<?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>3405</bug_id>
          
          <creation_ts>2005-06-09 22:12:34 -0700</creation_ts>
          <short_desc>Replace Id for tag names with QualifiedName</short_desc>
          <delta_ts>2019-02-06 09:03:38 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>412</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</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="Dave Hyatt">hyatt</reporter>
          <assigned_to name="Dave Hyatt">hyatt</assigned_to>
          <cc>andersca</cc>
    
    <cc>cdumez</cc>
    
    <cc>darin</cc>
    
    <cc>mjs</cc>
    
    <cc>nickshanks</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>11247</commentid>
    <comment_count>0</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2005-06-09 22:12:34 -0700</bug_when>
    <thetext>This bug is tracking the eventual elimination of the gperf-based Id representation of tag names KHTML 
and its replacement with a new class called QualifiedName, a smart hashed class that hold a prefix, a 
namespace URI and a localName all as atomic strings.

This conversion will reduce the memory footprint of the DOM and simplify the DOM significantly, since 
numerous classes like XMLElementImpl and HTMLGenericElementImpl can simply go away.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>11248</commentid>
    <comment_count>1</comment_count>
      <attachid>2199</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2005-06-09 22:13:46 -0700</bug_when>
    <thetext>Created attachment 2199
Work in progress (does not compile)

Just a snapshot of work in progress.  This does not compile.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>11924</commentid>
    <comment_count>2</comment_count>
      <attachid>2341</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2005-06-14 15:46:41 -0700</bug_when>
    <thetext>Created attachment 2341
Groundwork: eliminate the need to query for FORBIDDEN by fixing our newline handing for pre and other tags</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>11925</commentid>
    <comment_count>3</comment_count>
      <attachid>2341</attachid>
    <who name="John Sullivan">sullivan</who>
    <bug_when>2005-06-14 15:49:08 -0700</bug_when>
    <thetext>Comment on attachment 2341
Groundwork: eliminate the need to query for FORBIDDEN by fixing our newline handing for pre and other tags

I reviewed this with Dave. We discovered that the &lt;pre&gt; problem was not as
widespread as we had feared, so it&apos;s not an update candidate-worthy bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>11928</commentid>
    <comment_count>4</comment_count>
      <attachid>2343</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2005-06-14 17:39:43 -0700</bug_when>
    <thetext>Created attachment 2343
Add initial implementations of QualifiedName and the HTMLNames classes.

This patch adds these two classes to the build.  They are not used by anyone
yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>12134</commentid>
    <comment_count>5</comment_count>
      <attachid>2343</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-06-15 10:11:51 -0700</bug_when>
    <thetext>Comment on attachment 2343
Add initial implementations of QualifiedName and the HTMLNames classes.

Looks like this won&apos;t compile due to m_inner vs. m_impl and QualifiedNameImpl
vs. QualifiedNameInner.

The implementation file should be wrapped in namespace DOM rather than having a
using namespace DOM at the top of the file.

I suggest that m_qNameCache just be a private global inside the .cpp file
(using static) and not a member of the QualifiedName class; no need to expose
it, and then you don&apos;t have to include &lt;qptrdict.h&gt; in the header.

I prefer that you put spaces after the &lt; when you have to put a space before
the &gt; in expressions like:

QPtrDict&lt; QPtrDict&lt; QPtrDict&lt;QualifiedNameInner&gt; &gt; &gt;

Why all the (void*) casts? Those shouldn&apos;t be necessary. Are they for const
casting?

Can we change HTMLNames from a class to a namespace? The advantage of that is
that you can do a using on individual tags, and there&apos;s really nothing here
that calls for a class.

Other than these nitpicks, it looks great. I think I&apos;ll mark it review- just to
be pedantic.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>12147</commentid>
    <comment_count>6</comment_count>
      <attachid>2369</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2005-06-15 12:45:59 -0700</bug_when>
    <thetext>Created attachment 2369
Second pass at QualifiedName and HTMLNames classes

Address Darin and Maciej&apos;s comments.  I do not want to make HTMLNames a
namespace just yet, since I envision it growing to include more factory-based
functionality possibly at a later date, i.e., I&apos;m not convinced it&apos;s going to
just stay a &quot;names&quot; class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>12149</commentid>
    <comment_count>7</comment_count>
      <attachid>2369</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-06-15 14:04:27 -0700</bug_when>
    <thetext>Comment on attachment 2369
Second pass at QualifiedName and HTMLNames classes

Should use hasOneRef() instead of refCount() == 1; it&apos;s supposed to be for just
this sort of thing.

I still think you can use a namespace, regardless of the &quot;factory&quot; issue.
Namespaces can have functions in them too. The only reason to have a class is
if you want to create instances. No benefit to using a class to group a set of
global functions.

Anyway, r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>12150</commentid>
    <comment_count>8</comment_count>
      <attachid>2369</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-06-15 14:04:31 -0700</bug_when>
    <thetext>Comment on attachment 2369
Second pass at QualifiedName and HTMLNames classes

Should use hasOneRef() instead of refCount() == 1; it&apos;s supposed to be for just
this sort of thing.

I still think you can use a namespace, regardless of the &quot;factory&quot; issue.
Namespaces can have functions in them too. The only reason to have a class is
if you want to create instances. No benefit to using a class to group a set of
global functions.

Anyway, r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>12157</commentid>
    <comment_count>9</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2005-06-15 15:36:42 -0700</bug_when>
    <thetext>ditto on the review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>12301</commentid>
    <comment_count>10</comment_count>
      <attachid>2407</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2005-06-16 16:26:02 -0700</bug_when>
    <thetext>Created attachment 2407
More progress. kjs_html.cpp is done.  The htmltags and scripts to make them have been removed.

This is an update (still does not compile).  The next big structural issue is
the elimination of dtd.h and dtd.cpp completely.  Validation code is going to
move into the elements themselves and check against hashes in HTMLElement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>12314</commentid>
    <comment_count>11</comment_count>
      <attachid>2412</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2005-06-16 18:50:09 -0700</bug_when>
    <thetext>Created attachment 2412
This patch converts all of the parser&apos;s error handling logic. 

This patch nearly completes the parser&apos;s conversion.  I still need to handle
isInline (hopefully in terms of tag priorities, which are closely related) and
element creation.  There is also a DTD check in the table error handling code
that I will need to fix up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>12732</commentid>
    <comment_count>12</comment_count>
      <attachid>2510</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2005-06-20 14:12:36 -0700</bug_when>
    <thetext>Created attachment 2510
Next round. Converts much more of the code.

This patch gets the tokenizer and parser to compile, but there&apos;s still some
work to do on them.  Rendering and editing subdirectories are fully converted
in this patch and complete.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>12867</commentid>
    <comment_count>13</comment_count>
      <attachid>2558</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2005-06-22 16:41:39 -0700</bug_when>
    <thetext>Created attachment 2558
Re-implement CSS namespace support to use QualifiedNames.  Finish the HTML parser (except for 2 remaining issues).

This patch finishes the HTML parser (only 2 open issues remain).  It also
re-implements CSS namespace support using QualifiedName (allowing another
class, XMLNamespaceTable, to be removed from the build).  Note that namespaced
attributes in CSS are now broken, but this feature is minor enough that it can
be fixed later when I do attribute names&apos; conversion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>12873</commentid>
    <comment_count>14</comment_count>
      <attachid>2561</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2005-06-22 18:27:50 -0700</bug_when>
    <thetext>Created attachment 2561
Factor out element creation code and get dom_docimpl.cpp compiling

This patch factors out the element creation code into a single code path that
goes through a new object, HTMLElementFactory.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>13002</commentid>
    <comment_count>15</comment_count>
      <attachid>2608</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2005-06-23 15:10:07 -0700</bug_when>
    <thetext>Created attachment 2608
Complete the tagpriority/tagstatus movement into the element code.

This patch implements the isInline method in the parser and stops using
renderers to make the determination (thus eliminating any potential variance in
rendering caused by deferred renderer construction).

The tag priority and tag status rules are fully implemented using functions on
the elements now.  The two tables that were used in dtd.cpp are gone.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>13015</commentid>
    <comment_count>16</comment_count>
      <attachid>2613</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2005-06-23 20:28:03 -0700</bug_when>
    <thetext>Created attachment 2613
Patch that compiles and works (mostly).

The following patch compiles and can display some Web pages.  The following
open issues remain:

(1) Redo tables for dtd
(2) Fix the checkchild cases in parser/tokenizer/dom_element
(3) Re-implement createElementNS
(4) Re-implement createElement
(5) checkSetPrefix is now busted
(6) XMLElementImpl cloneNode issue and construction issue, move to ElementImpl
(7) getElementsByTagName needs to work again (TagNodeListImpl)
(8) Print namespace prefixes in selectortext now that CSS selectors store them</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>14032</commentid>
    <comment_count>17</comment_count>
      <attachid>2823</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2005-07-05 16:41:31 -0700</bug_when>
    <thetext>Created attachment 2823
Patch that passes all layout tests

This patch passes all layout tests (with some test results being adjusted). 
Performance analysis coming next.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>14039</commentid>
    <comment_count>18</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2005-07-05 19:16:19 -0700</bug_when>
    <thetext>Performance analysis shows:

0.145 avg. cached time without patch
0.155 avg. cached time with patch

Slowdown is about 7%.  That&apos;s the bad news.

The good news is none of the slowdown is hiding and is all clearly visible when sampling.  The 
HTMLNames accessors account for about 5-6%, and the operator == comparisons between QNames 
and AtomicStrings account for the remaining 1%.

I think there are two problems that could be fixed pretty easily:
(1) The accessors on HTMLNames need to be inlined, and that means having them return real global 
variables.
(2) Introduce more hashtables.  The element creation code and the parser are the two primary 
problems.  I think starting with the element creation code will be helpful.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>14088</commentid>
    <comment_count>19</comment_count>
      <attachid>2842</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2005-07-06 23:18:28 -0700</bug_when>
    <thetext>Created attachment 2842
Ready for review.  Now faster than trunk.

This patch adds a lot of hashing, inlines and provides globals for HTMLNames
access, inlines the QName comparison operator, optimizes lowercasing in the
tokenizer, and is now faster than the trunk.

0.141 compared with 0.145.

Ready for an initial review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>14091</commentid>
    <comment_count>20</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2005-07-06 23:39:47 -0700</bug_when>
    <thetext>Never mind.  I had been testing with harrison&apos;s regression when I established the baseline.  The real # to 
beat is 0.139.  So the patch is still slightly slower.  Fixing handleError and getNode should get the speed 
back.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>14135</commentid>
    <comment_count>21</comment_count>
    <who name="David Storey">dstorey</who>
    <bug_when>2005-07-07 09:02:23 -0700</bug_when>
    <thetext>Just a little nitpick.  I noticed in a few places that &apos;else&apos; and &apos;else if&apos; statements use braces on new lines 
such as   
+    else if (localName == starAtom &amp;&amp; cs-&gt;attr == ATTR_CLASS &amp;&amp; cs-&gt;match == CSSSelector::Class)
     {

as per style guidelines, should it not be like:  } else if  (condition) { and } else {

And also some lines like  +  if ( prof == DefaultGUI ) .  Should this not be like if (prof == DefaultGUI), 
without the spaces.  

Sorry for being a pain.  


</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>14150</commentid>
    <comment_count>22</comment_count>
      <attachid>2856</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2005-07-07 20:23:32 -0700</bug_when>
    <thetext>Created attachment 2856
Convert getNode to use a hash.  Convert some QPtrDicts to HashSets.

This patch scores 0.140-0.141, compared with the trunk&apos;s 0.138-0.139.  The
reason why is pretty clear on the profile.  AtomicString::add is about 1%, and
0.6% of that is the equality check that has to be done because it is not a
perfect hash like the old gperf was.

The equal method unfortunately is almost always having to scan the entire
string, because most of the time, what you find in the hash table *is* equal,
and so you hit the worst-case scenario of that function most of the time.

I am unsure how to proceed now, other than to find another speedup somewhere to
counteract the slowdown from not having a perfect hash.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>14156</commentid>
    <comment_count>23</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2005-07-07 21:22:06 -0700</bug_when>
    <thetext>Actually, the perfect hash has to do an equality check too. While there are no collisions for things in the 
hash, you can still miss entirely. However, I can find ways to micro-optimize the equality check.

Patch is missing htmlfactory.{cpp,h} though so I can&apos;t build it.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>14164</commentid>
    <comment_count>24</comment_count>
      <attachid>2860</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2005-07-07 23:08:54 -0700</bug_when>
    <thetext>Created attachment 2860
Implement unrelated micro-optimizations to get back the remaining couple of milliseconds

Maciej has ideas for how to further improve equality testing (and landed a
patch that helps).  I implemented three additional optimizations to gain 2ms of
PLT time.

(1) updatePseudoChild in RenderContainer is better about bailing early now when
no :before/:after content is used.  getPseudoStyle in RenderStyle has been
inlined as well (and is also smarter about short-circuiting).
(2) isBreakable no longer checks direction() for ASCII characters.  This check
was always returning false anyway.
(3) QFont now caches whether or not it is fixed pitch to avoid a dictionary
lookup and a call across the bridge.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>14165</commentid>
    <comment_count>25</comment_count>
      <attachid>2860</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2005-07-07 23:11:23 -0700</bug_when>
    <thetext>Comment on attachment 2860
Implement unrelated micro-optimizations to get back the remaining couple of milliseconds

I&apos;m missing some files.  Need to add them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>14166</commentid>
    <comment_count>26</comment_count>
      <attachid>2861</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2005-07-07 23:14:52 -0700</bug_when>
    <thetext>Created attachment 2861
Make sure to include the HTMLElementFactory.

Same as previous patch, but includes htmlfactory.h/.cpp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>14250</commentid>
    <comment_count>27</comment_count>
      <attachid>2873</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2005-07-08 20:01:43 -0700</bug_when>
    <thetext>Created attachment 2873
Patch that addresses some of maciej&apos;s comments and includes his hash fixes

This patch includes some micro-optimizations Maciej made to the hashing done by
AtomicString, and it also addresses his review comments (eliminating
XHTML_NAMESPACE and renaming GetSetInfo to Accessors in kjs_html.h/.cpp).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>14269</commentid>
    <comment_count>28</comment_count>
      <attachid>2873</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2005-07-09 01:12:20 -0700</bug_when>
    <thetext>Comment on attachment 2873
Patch that addresses some of maciej&apos;s comments and includes his hash fixes

r=me with the following caveats:

1) I think the implicit conversions on QualifiedName are dangerous and could
lead to people getting themselves in trouble.

2) Please add a layout test for the behavior change on tag name validation
(maybe something that uses a tag name wiht _ or * in it).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>14285</commentid>
    <comment_count>29</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2005-07-09 13:46:30 -0700</bug_when>
    <thetext>Fixed
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1503007</commentid>
    <comment_count>30</comment_count>
    <who name="Lucas Forschler">lforschler</who>
    <bug_when>2019-02-06 09:03:38 -0800</bug_when>
    <thetext>Mass moving XML DOM bugs to the &quot;DOM&quot; Component.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>2199</attachid>
            <date>2005-06-09 22:13:46 -0700</date>
            <delta_ts>2005-06-14 15:46:41 -0700</delta_ts>
            <desc>Work in progress (does not compile)</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>359677</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5wYnByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9sb2NhbC9ob21lL2N2cy9MYWJ5cmludGgvV2ViQ29yZS9XZWJDb3JlLnBicHJv
ai9wcm9qZWN0LnBieHByb2osdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNTQ4CmRpZmYgLXUgLXAg
LXIxLjU0OCBXZWJDb3JlL1dlYkNvcmUucGJwcm9qL3Byb2plY3QucGJ4cHJvagotLS0gV2ViQ29y
ZS9XZWJDb3JlLnBicHJvai9wcm9qZWN0LnBieHByb2oJMjAwNS8wNS8yNiAyMjoxNTo1NQkxLjU0
OAorKysgV2ViQ29yZS9XZWJDb3JlLnBicHJvai9wcm9qZWN0LnBieHByb2oJMjAwNS8wNi8wMiAw
NDoxMTozNwpAQCAtMjU2LDYgKzI1Niw2MiBAQAogLy81NTIKIC8vNTUzCiAvLzU1NAorCQk1NTE5
Mjg1QjA4NDNBNTMyMDAwQjVENTAgPSB7CisJCQlmaWxlRW5jb2RpbmcgPSAzMDsKKwkJCWlzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7CisJCQlsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsKKwkJCXBhdGggPSBodG1sbmFtZXMuY3BwOworCQkJcmVmVHlwZSA9IDQ7CisJCQlzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQk1NTE5Mjg1QzA4NDNBNTMyMDAwQjVENTAgPSB7
CisJCQlmaWxlRW5jb2RpbmcgPSAzMDsKKwkJCWlzYSA9IFBCWEZpbGVSZWZlcmVuY2U7CisJCQls
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOworCQkJcGF0aCA9IGh0bWxuYW1lcy5o
OworCQkJcmVmVHlwZSA9IDQ7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQk1
NTE5Mjg1RDA4NDNBNTMyMDAwQjVENTAgPSB7CisJCQlmaWxlUmVmID0gNTUxOTI4NUIwODQzQTUz
MjAwMEI1RDUwOworCQkJaXNhID0gUEJYQnVpbGRGaWxlOworCQkJc2V0dGluZ3MgPSB7CisJCQl9
OworCQl9OworCQk1NTE5Mjg1RTA4NDNBNTMyMDAwQjVENTAgPSB7CisJCQlmaWxlUmVmID0gNTUx
OTI4NUMwODQzQTUzMjAwMEI1RDUwOworCQkJaXNhID0gUEJYQnVpbGRGaWxlOworCQkJc2V0dGlu
Z3MgPSB7CisJCQl9OworCQl9OworCQk1NTE5Mjg1RjA4NDNBNTQ5MDAwQjVENTAgPSB7CisJCQlm
aWxlRW5jb2RpbmcgPSAzMDsKKwkJCWlzYSA9IFBCWEZpbGVSZWZlcmVuY2U7CisJCQlsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsKKwkJCXBhdGggPSBkb21fcW5hbWUuY3Bw
OworCQkJcmVmVHlwZSA9IDQ7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQk1
NTE5Mjg2MDA4NDNBNTQ5MDAwQjVENTAgPSB7CisJCQlmaWxlRW5jb2RpbmcgPSAzMDsKKwkJCWlz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7CisJCQlsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOworCQkJcGF0aCA9IGRvbV9xbmFtZS5oOworCQkJcmVmVHlwZSA9IDQ7CisJCQlzb3VyY2VU
cmVlID0gIjxncm91cD4iOworCQl9OworCQk1NTE5Mjg2MTA4NDNBNTQ5MDAwQjVENTAgPSB7CisJ
CQlmaWxlUmVmID0gNTUxOTI4NUYwODQzQTU0OTAwMEI1RDUwOworCQkJaXNhID0gUEJYQnVpbGRG
aWxlOworCQkJc2V0dGluZ3MgPSB7CisJCQl9OworCQl9OworCQk1NTE5Mjg2MjA4NDNBNTQ5MDAw
QjVENTAgPSB7CisJCQlmaWxlUmVmID0gNTUxOTI4NjAwODQzQTU0OTAwMEI1RDUwOworCQkJaXNh
ID0gUEJYQnVpbGRGaWxlOworCQkJc2V0dGluZ3MgPSB7CisJCQl9OworCQl9OwogCQk1NTk5OEE1
NzA1MkI1OThGMDAxN0E2QzEgPSB7CiAJCQljaGlsZHJlbiA9ICgKIAkJCQk1NTk5OEE1QTA1MkI1
OUNDMDAxN0E2QzEsCkBAIC0yNjI0LDYgKzI2ODAsOCBAQAogCQkJCTY1NDM2MDU3MDgzRDEyOTEw
MEMyMDQ3NSwKIAkJCQk2NTQzNjA1ODA4M0QxMjkxMDBDMjA0NzUsCiAJCQkJNjU0MzYwNzIwODNE
QjlGQjAwQzIwNDc1LAorCQkJCTU1MTkyODVFMDg0M0E1MzIwMDBCNUQ1MCwKKwkJCQk1NTE5Mjg2
MjA4NDNBNTQ5MDAwQjVENTAsCiAJCQkpOwogCQkJaXNhID0gUEJYSGVhZGVyc0J1aWxkUGhhc2U7
CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKQEAgLTUwMDAsNiAr
NTA1OCw4IEBACiAJCQkJNjU0MzYwODAwODNEQjlGQzAwQzIwNDc1LAogCQkJCTY1NDM2MDgxMDgz
REI5RkMwMEMyMDQ3NSwKIAkJCQk2NTQzNjA4MjA4M0RCOUZDMDBDMjA0NzUsCisJCQkJNTUxOTI4
NUQwODQzQTUzMjAwMEI1RDUwLAorCQkJCTU1MTkyODYxMDg0M0E1NDkwMDBCNUQ1MCwKIAkJCSk7
CiAJCQlpc2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50
UG9zdHByb2Nlc3NpbmcgPSAwOwpAQCAtODU1NCw2ICs4NjE0LDggQEAKIAkJfTsKIAkJRjUyM0Qy
NzcwMkRFNDM5ODAxODYzNUNBID0gewogCQkJY2hpbGRyZW4gPSAoCisJCQkJNTUxOTI4NUIwODQz
QTUzMjAwMEI1RDUwLAorCQkJCTU1MTkyODVDMDg0M0E1MzIwMDBCNUQ1MCwKIAkJCQlGNTIzRDIz
NTAyREU0Mzk2MDE4NjM1Q0EsCiAJCQkJRjUyM0QyMzYwMkRFNDM5NjAxODYzNUNBLAogCQkJCUY1
MjNEMjM3MDJERTQzOTYwMTg2MzVDQSwKQEAgLTkyMzUsNiArOTI5Nyw4IEBACiAJCX07CiAJCUY1
MjNEMzI0MDJERTQ0NzgwMTg2MzVDQSA9IHsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTU1MTkyODVG
MDg0M0E1NDkwMDBCNUQ1MCwKKwkJCQk1NTE5Mjg2MDA4NDNBNTQ5MDAwQjVENTAsCiAJCQkJQkMz
QjM2NDUwNUM5RDVFMjAwRTQyOTAyLAogCQkJCUJDM0IzNjQ2MDVDOUQ1RTIwMEU0MjkwMiwKIAkJ
CQlCQzNCMzY0NzA1QzlENUUyMDBFNDI5MDIsCkluZGV4OiBXZWJDb3JlL2todG1sL2todG1sdmll
dy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2xvY2FsL2hvbWUvY3ZzL0xhYnlyaW50aC9XZWJD
b3JlL2todG1sL2todG1sdmlldy5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTMzCmRpZmYg
LXUgLXAgLXIxLjEzMyBXZWJDb3JlL2todG1sL2todG1sdmlldy5jcHAKLS0tIFdlYkNvcmUva2h0
bWwva2h0bWx2aWV3LmNwcAkyMDA1LzA1LzExIDAwOjU4OjI3CTEuMTMzCisrKyBXZWJDb3JlL2to
dG1sL2todG1sdmlldy5jcHAJMjAwNS8wNi8wMiAwNDoxMTozOQpAQCAtNjA3LDEyICs2MDcsMTIg
QEAgdm9pZCBLSFRNTFZpZXc6OmxheW91dCgpCiAgICAgaWYgKGRvY3VtZW50LT5pc0hUTUxEb2N1
bWVudCgpKSB7CiAgICAgICAgIE5vZGVJbXBsICpib2R5ID0gc3RhdGljX2Nhc3Q8SFRNTERvY3Vt
ZW50SW1wbCo+KGRvY3VtZW50KS0+Ym9keSgpOwogICAgICAgICBpZiAoYm9keSAmJiBib2R5LT5y
ZW5kZXJlcigpKSB7Ci0gICAgICAgICAgICBpZiAoYm9keS0+aWQoKSA9PSBJRF9GUkFNRVNFVCkg
eworICAgICAgICAgICAgaWYgKGJvZHktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpmcmFtZXNldCgp
KSkgewogICAgICAgICAgICAgICAgIGJvZHktPnJlbmRlcmVyKCktPnNldE5lZWRzTGF5b3V0KHRy
dWUpOwogICAgICAgICAgICAgICAgIHZNb2RlID0gQWx3YXlzT2ZmOwogICAgICAgICAgICAgICAg
IGhNb2RlID0gQWx3YXlzT2ZmOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAo
Ym9keS0+aWQoKSA9PSBJRF9CT0RZKSB7CisgICAgICAgICAgICBlbHNlIGlmIChib2R5LT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6Ym9keSgpKSkgewogICAgICAgICAgICAgICAgIFJlbmRlck9iamVj
dCogbyA9IChyb290UmVuZGVyZXItPnN0eWxlKCktPm92ZXJmbG93KCkgPT0gT1ZJU0lCTEUpID8g
Ym9keS0+cmVuZGVyZXIoKSA6IHJvb3RSZW5kZXJlcjsKICAgICAgICAgICAgICAgICBhcHBseU92
ZXJmbG93VG9WaWV3cG9ydChvLCBoTW9kZSwgdk1vZGUpOyAvLyBPbmx5IGFwcGxpZXMgdG8gSFRN
TCBVQXMsIG5vdCB0byBYTUwvWEhUTUwgVUFzCiAgICAgICAgICAgICB9CkBAIC04NzcsMTAgKzg3
Nyw3IEBAIHZvaWQgS0hUTUxWaWV3Ojp2aWV3cG9ydE1vdXNlRG91YmxlQ2xpY2sKIAogc3RhdGlj
IGJvb2wgaXNTdWJtaXRJbWFnZShET006Ok5vZGVJbXBsICpub2RlKQogewotICAgIHJldHVybiBu
b2RlCi0gICAgICAgICYmIG5vZGUtPmlzSFRNTEVsZW1lbnQoKQotICAgICAgICAmJiBub2RlLT5p
ZCgpID09IElEX0lOUFVUCi0gICAgICAgICYmIHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnRJ
bXBsKj4obm9kZSktPmlucHV0VHlwZSgpID09IEhUTUxJbnB1dEVsZW1lbnRJbXBsOjpJTUFHRTsK
KyAgICByZXR1cm4gbm9kZSAmJiBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW5wdXQoKSkg
JiYgc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudEltcGwqPihub2RlKS0+aW5wdXRUeXBlKCkg
PT0gSFRNTElucHV0RWxlbWVudEltcGw6OklNQUdFOwogfQogCiB2b2lkIEtIVE1MVmlldzo6dmll
d3BvcnRNb3VzZU1vdmVFdmVudCggUU1vdXNlRXZlbnQgKiBfbW91c2UgKQpJbmRleDogV2ViQ29y
ZS9raHRtbC9jc3MvY3NzX2Jhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9sb2NhbC9ob21l
L2N2cy9MYWJ5cmludGgvV2ViQ29yZS9raHRtbC9jc3MvY3NzX2Jhc2UuY3BwLHYKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjEzCmRpZmYgLXUgLXAgLXIxLjEzIFdlYkNvcmUva2h0bWwvY3NzL2Nzc19i
YXNlLmNwcAotLS0gV2ViQ29yZS9raHRtbC9jc3MvY3NzX2Jhc2UuY3BwCTIwMDQvMTEvMTkgMDA6
MTI6MjAJMS4xMworKysgV2ViQ29yZS9raHRtbC9jc3MvY3NzX2Jhc2UuY3BwCTIwMDUvMDYvMDIg
MDQ6MTE6MzkKQEAgLTkzLDYgKzkzLDEyIEBAIFN0eWxlTGlzdEltcGw6On5TdHlsZUxpc3RJbXBs
KCkKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorc3RhdGljIGNvbnN0IFF1YWxpZmll
ZE5hbWUmIGFueVRhZ05hbWUoKQoreworICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIGFueU5hbWUo
bnVsbEF0b20sIHN0YXJBdG9tLCBzdGFyQXRvbSk7CisgICAgcmV0dXJuIGFueU5hbWU7Cit9CisK
IHZvaWQgQ1NTU2VsZWN0b3I6OnByaW50KHZvaWQpCiB7CiAgICAga2REZWJ1ZyggNjA4MCApIDw8
ICJbU2VsZWN0b3I6IHRhZyA9ICIgPDwgICAgICAgdGFnIDw8ICIsIGF0dHIgPSBcIiIgPDwgYXR0
ciA8PCAiXCIsIG1hdGNoID0gXCIiIDw8IG1hdGNoCkluZGV4OiBXZWJDb3JlL2todG1sL2Nzcy9j
c3NfYmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9sb2NhbC9ob21lL2N2cy9MYWJ5cmludGgv
V2ViQ29yZS9raHRtbC9jc3MvY3NzX2Jhc2UuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMApk
aWZmIC11IC1wIC1yMS4xMCBXZWJDb3JlL2todG1sL2Nzcy9jc3NfYmFzZS5oCi0tLSBXZWJDb3Jl
L2todG1sL2Nzcy9jc3NfYmFzZS5oCTIwMDUvMDQvMjYgMTg6NDY6MDQJMS4xMAorKysgV2ViQ29y
ZS9raHRtbC9jc3MvY3NzX2Jhc2UuaAkyMDA1LzA2LzAyIDA0OjExOjM5CkBAIC0yNyw2ICsyNyw3
IEBACiAjaW5jbHVkZSAiZG9tL2RvbV9zdHJpbmcuaCIKICNpbmNsdWRlICJkb20vZG9tX21pc2Mu
aCIKICNpbmNsdWRlICJ4bWwvZG9tX25vZGVpbXBsLmgiCisjaW5jbHVkZSAiZG9tX3FuYW1lLmgi
CiAjaW5jbHVkZSAibWlzYy9zaGFyZWQuaCIKICNpbmNsdWRlIDxxZGF0ZXRpbWUuaD4KICNpbmNs
dWRlIDxxcHRybGlzdC5oPgpAQCAtNzMsNyArNzQsNyBAQCBuYW1lc3BhY2UgRE9NIHsKICAgICB7
CiAgICAgcHVibGljOgogCUNTU1NlbGVjdG9yKCkKLQkgICAgOiB0YWdIaXN0b3J5KDApLCBzaW1w
bGVTZWxlY3RvcigwKSwgbmV4dFNlbGVjdG9yKDApLCBhdHRyKDApLCB0YWcoYW55UU5hbWUpLAor
CSAgICA6IHRhZ0hpc3RvcnkoMCksIHNpbXBsZVNlbGVjdG9yKDApLCBuZXh0U2VsZWN0b3IoMCks
IGF0dHIoMCksIHRhZyhhbnlUYWdOYW1lKCkpLAogICAgICAgICAgICAgICByZWxhdGlvbiggRGVz
Y2VuZGFudCApLCBtYXRjaCggTm9uZSApLAogICAgICAgICAgICAgICBwc2V1ZG9JZCggMCApLCBf
cHNldWRvVHlwZShQc2V1ZG9Ob3RQYXJzZWQpCiAgICAgICAgIHt9CkBAIC0xNjUsMTIgKzE2Niwx
NyBAQCBuYW1lc3BhY2UgRE9NIHsKIAkJcmV0dXJuIF9wc2V1ZG9UeXBlOwogCSAgICB9CiAKKyAg
ICAgICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGFueVRhZ05hbWUoKTsKKworICAgICAg
ICBib29sIGhhc1RhZygpIGNvbnN0IHsgcmV0dXJuIHRhZyAhPSBhbnlUYWdOYW1lKCk7IH0KKwog
CW11dGFibGUgRE9NOjpBdG9taWNTdHJpbmcgdmFsdWU7CiAJQ1NTU2VsZWN0b3IqIHRhZ0hpc3Rv
cnk7CiAgICAgICAgIENTU1NlbGVjdG9yKiBzaW1wbGVTZWxlY3RvcjsgLy8gVXNlZCBmb3IgOm5v
dC4KICAgICAgICAgQ1NTU2VsZWN0b3IqIG5leHRTZWxlY3RvcjsgLy8gdXNlZCBmb3IgLC1jaGFp
bmVkIHNlbGVjdG9ycwogCVFfVUlOVDMyICAgICBhdHRyOwotCVFfVUlOVDMyICAgICB0YWc7CisJ
CisgICAgICAgIFF1YWxpZmllZE5hbWUgdGFnOwogCiAgICAgICAgIFJlbGF0aW9uIHJlbGF0aW9u
ICAgICA6IDI7CiAJTWF0Y2ggCSBtYXRjaCAgICAgICAgIDogNDsKSW5kZXg6IFdlYkNvcmUva2h0
bWwvY3NzL2Nzc3N0eWxlc2VsZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9sb2NhbC9o
b21lL2N2cy9MYWJ5cmludGgvV2ViQ29yZS9raHRtbC9jc3MvY3Nzc3R5bGVzZWxlY3Rvci5jcHAs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTgzCmRpZmYgLXUgLXAgLXIxLjE4MyBXZWJDb3JlL2to
dG1sL2Nzcy9jc3NzdHlsZXNlbGVjdG9yLmNwcAotLS0gV2ViQ29yZS9raHRtbC9jc3MvY3Nzc3R5
bGVzZWxlY3Rvci5jcHAJMjAwNS8wNS8xMSAwNTo0OTozNAkxLjE4MworKysgV2ViQ29yZS9raHRt
bC9jc3MvY3Nzc3R5bGVzZWxlY3Rvci5jcHAJMjAwNS8wNi8wMiAwNDoxMTo0MwpAQCAtMzM5LDcg
KzMzOSw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hSdWxlcyhDU1NSdWwKICAgICAg
ICAgICAgIG1hdGNoUnVsZXNGb3JMaXN0KHJ1bGVzLT5nZXRDbGFzc1J1bGVzKHNpbmdsZUNsYXNz
LT5zdHJpbmcoKS5pbXBsZW1lbnRhdGlvbigpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4KTsK
ICAgICB9Ci0gICAgbWF0Y2hSdWxlc0Zvckxpc3QocnVsZXMtPmdldFRhZ1J1bGVzKCh2b2lkKiko
aW50KWxvY2FsTmFtZVBhcnQoZWxlbWVudC0+aWQoKSkpLAorICAgIG1hdGNoUnVsZXNGb3JMaXN0
KHJ1bGVzLT5nZXRUYWdSdWxlcyhlbGVtZW50LT5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigp
KSwKICAgICAgICAgICAgICAgICAgICAgICBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCk7
CiAgICAgbWF0Y2hSdWxlc0Zvckxpc3QocnVsZXMtPmdldFVuaXZlcnNhbFJ1bGVzKCksIGZpcnN0
UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4KTsKICAgICAKQEAgLTM2MCw5ICszNjAsOSBAQCB2b2lk
IENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUnVsZXNGb3JMaXN0CiAgICAgaWYgKCFydWxlcykgcmV0
dXJuOwogICAgIGZvciAoQ1NTUnVsZURhdGEqIGQgPSBydWxlcy0+Zmlyc3QoKTsgZDsgZCA9IGQt
Pm5leHQoKSkgewogICAgICAgICBDU1NTdHlsZVJ1bGVJbXBsKiBydWxlID0gZC0+cnVsZSgpOwot
ICAgICAgICBRX1VJTlQxNiBjc3NUYWdJZCA9IGxvY2FsTmFtZVBhcnQoZWxlbWVudC0+aWQoKSk7
Ci0gICAgICAgIFFfVUlOVDE2IHRhZyA9IGxvY2FsTmFtZVBhcnQoZC0+c2VsZWN0b3IoKS0+dGFn
KTsKLSAgICAgICAgaWYgKChjc3NUYWdJZCA9PSB0YWcgfHwgdGFnID09IGFueUxvY2FsTmFtZSkg
JiYgY2hlY2tTZWxlY3RvcihkLT5zZWxlY3RvcigpLCBlbGVtZW50KSkgeworICAgICAgICBjb25z
dCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSA9IGVsZW1lbnQtPmxvY2FsTmFtZSgpOworICAgICAg
ICBjb25zdCBBdG9taWNTdHJpbmcmIHNlbGVjdG9yTG9jYWxOYW1lID0gZC0+c2VsZWN0b3IoKS0+
dGFnLmxvY2FsTmFtZSgpOworICAgICAgICBpZiAoKGxvY2FsTmFtZSA9PSBzZWxlY3RvckxvY2Fs
TmFtZSB8fCBzZWxlY3RvckxvY2FsTmFtZSA9PSBzdGFyQXRvbSkgJiYgY2hlY2tTZWxlY3Rvcihk
LT5zZWxlY3RvcigpLCBlbGVtZW50KSkgewogICAgICAgICAgICAgLy8gSWYgdGhlIHJ1bGUgaGFz
IG5vIHByb3BlcnRpZXMgdG8gYXBwbHksIHRoZW4gaWdub3JlIGl0LgogICAgICAgICAgICAgQ1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb25JbXBsKiBkZWNsID0gcnVsZS0+ZGVjbGFyYXRpb24oKTsK
ICAgICAgICAgICAgIGlmICghZGVjbCB8fCAhZGVjbC0+bGVuZ3RoKCkpIGNvbnRpbnVlOwpAQCAt
NjA5LDcgKzYwOSw3IEBAIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6Y2FuU2hhcmVTdHlsZVdpdGgK
ICAgICBpZiAobi0+aXNTdHlsZWRFbGVtZW50KCkpIHsKICAgICAgICAgYm9vbCBtb3VzZUluc2lk
ZSA9IGVsZW1lbnQtPnJlbmRlcmVyKCkgPyBlbGVtZW50LT5yZW5kZXJlcigpLT5tb3VzZUluc2lk
ZSgpIDogZmFsc2U7CiAgICAgICAgIFN0eWxlZEVsZW1lbnRJbXBsKiBzID0gc3RhdGljX2Nhc3Q8
U3R5bGVkRWxlbWVudEltcGwqPihuKTsKLSAgICAgICAgaWYgKHMtPnJlbmRlcmVyKCkgJiYgKHMt
PmlkKCkgPT0gZWxlbWVudC0+aWQoKSkgJiYgIXMtPmhhc0lEKCkgJiYKKyAgICAgICAgaWYgKHMt
PnJlbmRlcmVyKCkgJiYgKHMtPnRhZ05hbWUoKSA9PSBlbGVtZW50LT50YWdOYW1lKCkpICYmICFz
LT5oYXNJRCgpICYmCiAgICAgICAgICAgICAocy0+aGFzQ2xhc3MoKSA9PSBlbGVtZW50LT5oYXND
bGFzcygpKSAmJiAhcy0+aW5saW5lU3R5bGVEZWNsKCkgJiYKICAgICAgICAgICAgIChzLT5oYXNN
YXBwZWRBdHRyaWJ1dGVzKCkgPT0gc3R5bGVkRWxlbWVudC0+aGFzTWFwcGVkQXR0cmlidXRlcygp
KSAmJgogICAgICAgICAgICAgKHMtPmlzTGluaygpID09IGVsZW1lbnQtPmlzTGluaygpKSAmJiAK
QEAgLTg4NSwyMyArODg1LDIzIEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YWRqdXN0UmVuZGVy
U3R5bGUKICAgICAgICAgLy8gU2l0ZXMgYWxzbyBjb21tb25seSB1c2UgZGlzcGxheTppbmxpbmUv
YmxvY2sgb24gPHRkPnMgYW5kIDx0YWJsZT5zLiAgSW4gcXVpcmtzIG1vZGUgd2UgZm9yY2UKICAg
ICAgICAgLy8gdGhlc2UgdGFncyB0byByZXRhaW4gdGhlaXIgZGlzcGxheSB0eXBlcy4KICAgICAg
ICAgaWYgKCFzdHJpY3RQYXJzaW5nICYmIGUpIHsKLSAgICAgICAgICAgIGlmIChlLT5pZCgpID09
IElEX1REKSB7CisgICAgICAgICAgICBpZiAoZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRkKCkp
KSB7CiAgICAgICAgICAgICAgICAgc3R5bGUtPnNldERpc3BsYXkoVEFCTEVfQ0VMTCk7CiAgICAg
ICAgICAgICAgICAgc3R5bGUtPnNldEZsb2F0aW5nKEZOT05FKTsKICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGVsc2UgaWYgKGUtPmlkKCkgPT0gSURfVEFCTEUpCisgICAgICAgICAgICBlbHNl
IGlmIChlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGFibGUoKSkpCiAgICAgICAgICAgICAgICAg
c3R5bGUtPnNldERpc3BsYXkoc3R5bGUtPmlzRGlzcGxheUlubGluZVR5cGUoKSA/IElOTElORV9U
QUJMRSA6IFRBQkxFKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIEZyYW1lcyBhbmQgZnJhbWVz
ZXRzIG5ldmVyIGhvbm9yIHBvc2l0aW9uOnJlbGF0aXZlIG9yIHBvc2l0aW9uOmFic29sdXRlLiAg
VGhpcyBpcyBuZWNlc3NhcnkgdG8KICAgICAgICAgLy8gZml4IGEgY3Jhc2ggd2hlcmUgYSBzaXRl
IHRyaWVzIHRvIHBvc2l0aW9uIHRoZXNlIG9iamVjdHMuICBUaGV5IGFsc28gbmV2ZXIgaG9ub3Ig
ZGlzcGxheS4KLSAgICAgICAgaWYgKGUgJiYgKGUtPmlkKCkgPT0gSURfRlJBTUUgfHwgZS0+aWQo
KSA9PSBJRF9GUkFNRVNFVCkpIHsKKyAgICAgICAgaWYgKGUgJiYgKGUtPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjpmcmFtZSgpKSB8fCBlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZnJhbWVzZXQoKSkp
KSB7CiAgICAgICAgICAgICBzdHlsZS0+c2V0UG9zaXRpb24oU1RBVElDKTsKICAgICAgICAgICAg
IHN0eWxlLT5zZXREaXNwbGF5KEJMT0NLKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIFRhYmxl
IGhlYWRlcnMgd2l0aCBhIHRleHQtYWxpZ24gb2YgYXV0byB3aWxsIGNoYW5nZSB0aGUgdGV4dC1h
bGlnbiB0byBjZW50ZXIuCi0gICAgICAgIGlmIChlICYmIGUtPmlkKCkgPT0gSURfVEggJiYgc3R5
bGUtPnRleHRBbGlnbigpID09IFRBQVVUTykKKyAgICAgICAgaWYgKGUgJiYgZS0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OnRoKCkpICYmIHN0eWxlLT50ZXh0QWxpZ24oKSA9PSBUQUFVVE8pCiAgICAg
ICAgICAgICBzdHlsZS0+c2V0VGV4dEFsaWduKENFTlRFUik7CiAgICAgICAgIAogICAgICAgICAv
LyBNdXRhdGUgdGhlIGRpc3BsYXkgdG8gQkxPQ0sgb3IgVEFCTEUgZm9yIGNlcnRhaW4gY2FzZXMs
IGUuZy4sIGlmIHNvbWVvbmUgYXR0ZW1wdHMgdG8KQEAgLTk3OSw3ICs5NzksNyBAQCBib29sIENT
U1N0eWxlU2VsZWN0b3I6OmNoZWNrU2VsZWN0b3IoQ1NTCiAgICAgLy8gV2UgdHJhY2sgd2hldGhl
ciBvciBub3QgdGhlIHJ1bGUgY29udGFpbnMgb25seSA6aG92ZXIgYW5kIDphY3RpdmUgaW4gYSBz
aW1wbGUgc2VsZWN0b3IuIElmCiAgICAgLy8gc28sIHdlIGNhbid0IGFsbG93IHRoYXQgdG8gYXBw
bHkgdG8gZXZlcnkgZWxlbWVudCBvbiB0aGUgcGFnZS4gIFdlIGFzc3VtZSB0aGUgYXV0aG9yIGlu
dGVuZGVkCiAgICAgLy8gdG8gYXBwbHkgdGhlIHJ1bGVzIG9ubHkgdG8gbGlua3MuCi0gICAgYm9v
bCBvbmx5SG92ZXJBY3RpdmUgPSAoc2VsLT50YWcgPT0gYW55UU5hbWUgJiYKKyAgICBib29sIG9u
bHlIb3ZlckFjdGl2ZSA9ICghc2VsLT5oYXNUYWcoKSAmJgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChzZWwtPm1hdGNoID09IENTU1NlbGVjdG9yOjpQc2V1ZG8gJiYKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChzZWwtPnBzZXVkb1R5cGUoKSA9PSBDU1NTZWxlY3Rvcjo6UHNl
dWRvSG92ZXIgfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWwtPnBzZXVkb1R5
cGUoKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQWN0aXZlKSkpOwpAQCAtMTA4MSwxOSArMTA4MSwx
NCBAQCBib29sIENTU1N0eWxlU2VsZWN0b3I6OmNoZWNrT25lU2VsZWN0b3IoCiAgICAgaWYoIWUp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChzZWwtPnRhZyAhPSBhbnlRTmFtZSkg
ewotICAgICAgICBpbnQgZWx0SUQgPSBlLT5pZCgpOwotICAgICAgICBRX1VJTlQxNiBsb2NhbE5h
bWUgPSBsb2NhbE5hbWVQYXJ0KGVsdElEKTsKLSAgICAgICAgUV9VSU5UMTYgbnMgPSBuYW1lc3Bh
Y2VQYXJ0KGVsdElEKTsKLSAgICAgICAgUV9VSU5UMTYgc2VsTG9jYWxOYW1lID0gbG9jYWxOYW1l
UGFydChzZWwtPnRhZyk7Ci0gICAgICAgIFFfVUlOVDE2IHNlbE5TID0gbmFtZXNwYWNlUGFydChz
ZWwtPnRhZyk7Ci0gICAgICAgIAotICAgICAgICBpZiAobG9jYWxOYW1lIDw9IElEX0xBU1RfVEFH
ICYmIGUtPmlzSFRNTEVsZW1lbnQoKSkKLSAgICAgICAgICAgIG5zID0geGh0bWxOYW1lc3BhY2U7
IC8vIEZJWE1FOiBSZWFsbHkgd2FudCB0byBtb3ZlIGF3YXkgZnJvbSB0aGlzIGNvbXBsaWNhdGVk
IGhhY2tlcnkgYW5kIGp1c3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN3
aXRjaCB0YWdzIGFuZCBhdHRyIG5hbWVzIG92ZXIgdG8gQXRvbWljU3RyaW5ncy4KLSAgICAgICAg
Ci0gICAgICAgIGlmICgoc2VsTG9jYWxOYW1lICE9IGFueUxvY2FsTmFtZSAmJiBsb2NhbE5hbWUg
IT0gc2VsTG9jYWxOYW1lKSB8fAotICAgICAgICAgICAgKHNlbE5TICE9IGFueU5hbWVzcGFjZSAm
JiBucyAhPSBzZWxOUykpCisgICAgaWYgKHNlbC0+aGFzVGFnKCkpIHsKKyAgICAgICAgY29uc3Qg
QXRvbWljU3RyaW5nJiBsb2NhbE5hbWUgPSBlLT5sb2NhbE5hbWUoKTsKKyAgICAgICAgY29uc3Qg
QXRvbWljU3RyaW5nJiBucyA9IGUtPm5hbWVzcGFjZVVSSSgpOworICAgICAgICBjb25zdCBBdG9t
aWNTdHJpbmcmIHNlbExvY2FsTmFtZSA9IHNlbC0+dGFnLmxvY2FsTmFtZSgpOworICAgICAgICBj
b25zdCBBdG9taWNTdHJpbmcmIHNlbE5TID0gc2VsLT50YWcubmFtZXNwYWNlVVJJKCk7CisgICAg
CisgICAgICAgIGlmICgoc2VsTG9jYWxOYW1lICE9IHN0YXJBdG9tICYmIGxvY2FsTmFtZSAhPSBz
ZWxMb2NhbE5hbWUpIHx8CisgICAgICAgICAgICAoc2VsTlMgIT0gc3RhckF0b20gJiYgbnMgIT0g
c2VsTlMpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtMTI4OSw3ICsx
Mjg0LDcgQEAgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpjaGVja09uZVNlbGVjdG9yKAogICAgICAg
ICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvSG92ZXI6IHsKICAgICAgICAgICAgICAgICAv
LyBJZiB3ZSdyZSBpbiBxdWlya3MgbW9kZSwgdGhlbiBob3ZlciBzaG91bGQgbmV2ZXIgbWF0Y2gg
YW5jaG9ycyB3aXRoIG5vCiAgICAgICAgICAgICAgICAgLy8gaHJlZi4gIFRoaXMgaXMgaW1wb3J0
YW50IGZvciBzaXRlcyBsaWtlIHdzai5jb20uCi0gICAgICAgICAgICAgICAgaWYgKHN0cmljdFBh
cnNpbmcgfHwgZS0+aWQoKSAhPSBJRF9BIHx8IGUtPmlzTGluaygpKSB7CisgICAgICAgICAgICAg
ICAgaWYgKHN0cmljdFBhcnNpbmcgfHwgIWUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjphKCkpIHx8
IGUtPmlzTGluaygpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50ID09IGUgJiYg
c3R5bGUpCiAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZS0+c2V0QWZmZWN0ZWRCeUhvdmVy
UnVsZXModHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChlLT5yZW5kZXJlcigpKSB7CkBA
IC0xMzIwLDcgKzEzMTUsNyBAQCBib29sIENTU1N0eWxlU2VsZWN0b3I6OmNoZWNrT25lU2VsZWN0
b3IoCiAgICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9BY3RpdmU6CiAgICAgICAg
ICAgICAgICAgLy8gSWYgd2UncmUgaW4gcXVpcmtzIG1vZGUsIHRoZW4gOmFjdGl2ZSBzaG91bGQg
bmV2ZXIgbWF0Y2ggYW5jaG9ycyB3aXRoIG5vCiAgICAgICAgICAgICAgICAgLy8gaHJlZi4gCi0g
ICAgICAgICAgICAgICAgaWYgKHN0cmljdFBhcnNpbmcgfHwgZS0+aWQoKSAhPSBJRF9BIHx8IGUt
PmlzTGluaygpKSB7CisgICAgICAgICAgICAgICAgaWYgKHN0cmljdFBhcnNpbmcgfHwgIWUtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjphKCkpIHx8IGUtPmlzTGluaygpKSB7CiAgICAgICAgICAgICAg
ICAgICAgIGlmIChlbGVtZW50ID09IGUgJiYgc3R5bGUpCiAgICAgICAgICAgICAgICAgICAgICAg
ICBzdHlsZS0+c2V0QWZmZWN0ZWRCeUFjdGl2ZVJ1bGVzKHRydWUpOwogICAgICAgICAgICAgICAg
ICAgICBlbHNlIGlmIChlLT5yZW5kZXJlcigpKQpAQCAtMTQwNSw5ICsxNDAwLDkgQEAgdm9pZCBD
U1NSdWxlU2V0OjphZGRSdWxlKENTU1N0eWxlUnVsZUltcAogICAgICAgICByZXR1cm47CiAgICAg
fQogICAgICAKLSAgICBRX1VJTlQxNiBsb2NhbE5hbWUgPSBsb2NhbE5hbWVQYXJ0KHNlbC0+dGFn
KTsKLSAgICBpZiAobG9jYWxOYW1lICE9IGFueUxvY2FsTmFtZSkgewotICAgICAgICBhZGRUb1J1
bGVTZXQoKHZvaWQqKShpbnQpbG9jYWxOYW1lLCBtX3RhZ1J1bGVzLCBydWxlLCBzZWwpOworICAg
IGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lID0gc2VsLT50YWcubG9jYWxOYW1lKCk7Cisg
ICAgaWYgKGxvY2FsTmFtZSAhPSBzdGFyQXRvbSkgeworICAgICAgICBhZGRUb1J1bGVTZXQobG9j
YWxOYW1lLmltcGxlbWVudGF0aW9uKCksIG1fdGFnUnVsZXMsIHJ1bGUsIHNlbCk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAgICAgCkluZGV4OiBXZWJDb3JlL2todG1sL2RvbS9jc3Nfc3R5bGVz
aGVldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2xvY2FsL2hvbWUvY3ZzL0xhYnlyaW50aC9X
ZWJDb3JlL2todG1sL2RvbS9jc3Nfc3R5bGVzaGVldC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuOApkaWZmIC11IC1wIC1yMS44IFdlYkNvcmUva2h0bWwvZG9tL2Nzc19zdHlsZXNoZWV0LmNw
cAotLS0gV2ViQ29yZS9raHRtbC9kb20vY3NzX3N0eWxlc2hlZXQuY3BwCTIwMDQvMDUvMjAgMTU6
MDk6MzIJMS44CisrKyBXZWJDb3JlL2todG1sL2RvbS9jc3Nfc3R5bGVzaGVldC5jcHAJMjAwNS8w
Ni8wMiAwNDoxMTo0MwpAQCAtMzg1LDcgKzM4NSw3IEBAIExpbmtTdHlsZSAmIExpbmtTdHlsZTo6
b3BlcmF0b3IgPSAoY29uc3QKIAogICAgIC8vICMjIyBjaGVjayBsaW5rIGlzIHJlYWxseSBsaW5r
aW5nIGEgc3R5bGUgc2hlZXQKICAgICBpZiggbiAmJiBuLT5pc0VsZW1lbnROb2RlKCkgJiYKLQko
bi0+aWQoKSA9PSBJRF9TVFlMRSB8fCBuLT5pZCgpID09IElEX0xJTkspICkgeworCShuLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6c3R5bGUoKSkgfHwgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omxp
bmsoKSkpKSB7CiAgICAgbm9kZSA9IG47CiAgICAgaWYobm9kZSkgbm9kZS0+cmVmKCk7CiAgICAg
fQpAQCAtMzk5LDEyICszOTksMTQgQEAgTGlua1N0eWxlOjp+TGlua1N0eWxlKCkKIAogU3R5bGVT
aGVldCBMaW5rU3R5bGU6OnNoZWV0KCkKIHsKLSAgICBpbnQgaWQgPSBub2RlID8gbm9kZS0+aWQo
KSA6IDA7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm4gU3R5bGVTaGVldCgpOworCiAg
ICAgLy8gIyMjIGFkZCBQSQogICAgIHJldHVybiAKLQkoIGlkID09IElEX1NUWUxFKSA/CisJKG5v
ZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzdHlsZSgpKSkgPwogCXN0YXRpY19jYXN0PEhUTUxT
dHlsZUVsZW1lbnRJbXBsICo+KG5vZGUpLT5zaGVldCgpCi0JOiAoIChpZCA9PSBJRF9MSU5LKSA/
CisJOiAoIG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpsaW5rKCkpID8KIAkgICAgc3RhdGlj
X2Nhc3Q8SFRNTExpbmtFbGVtZW50SW1wbCAqPihub2RlKS0+c2hlZXQoKQogCSAgICA6IFN0eWxl
U2hlZXQoKSApOwogfQpJbmRleDogV2ViQ29yZS9raHRtbC9kb20vZG9tX2VsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9sb2NhbC9ob21lL2N2cy9MYWJ5cmludGgvV2ViQ29yZS9raHRt
bC9kb20vZG9tX2VsZW1lbnQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEyCmRpZmYgLXUg
LXAgLXIxLjEyIFdlYkNvcmUva2h0bWwvZG9tL2RvbV9lbGVtZW50LmNwcAotLS0gV2ViQ29yZS9r
aHRtbC9kb20vZG9tX2VsZW1lbnQuY3BwCTIwMDUvMDUvMTIgMTc6MTE6MjEJMS4xMgorKysgV2Vi
Q29yZS9raHRtbC9kb20vZG9tX2VsZW1lbnQuY3BwCTIwMDUvMDYvMDIgMDQ6MTE6NDMKQEAgLTE0
MSw3ICsxNDEsNyBAQCBFbGVtZW50Ojp+RWxlbWVudCgpCiBET01TdHJpbmcgRWxlbWVudDo6dGFn
TmFtZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFpbXBsKSB0aHJvdyBET01FeGNlcHRpb24oRE9NRXhj
ZXB0aW9uOjpOT1RfRk9VTkRfRVJSKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RWxlbWVudElt
cGwqPihpbXBsKS0+dGFnTmFtZSgpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxFbGVtZW50SW1w
bCo+KGltcGwpLT5ub2RlTmFtZSgpOwogfQogCiBET01TdHJpbmcgRWxlbWVudDo6Z2V0QXR0cmli
dXRlKCBjb25zdCBET01TdHJpbmcgJm5hbWUgKQpJbmRleDogV2ViQ29yZS9raHRtbC9kb20vZG9t
X25vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9sb2NhbC9ob21lL2N2cy9MYWJ5cmludGgv
V2ViQ29yZS9raHRtbC9kb20vZG9tX25vZGUuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEy
CmRpZmYgLXUgLXAgLXIxLjEyIFdlYkNvcmUva2h0bWwvZG9tL2RvbV9ub2RlLmNwcAotLS0gV2Vi
Q29yZS9raHRtbC9kb20vZG9tX25vZGUuY3BwCTIwMDUvMDUvMTEgMDA6NTg6MjgJMS4xMgorKysg
V2ViQ29yZS9raHRtbC9kb20vZG9tX25vZGUuY3BwCTIwMDUvMDYvMDIgMDQ6MTE6NDQKQEAgLTMy
NCw3ICszMjQsNyBAQCBib29sIE5vZGU6OmlzU3VwcG9ydGVkKCBjb25zdCBET01TdHJpbmcgCiBE
T01TdHJpbmcgTm9kZTo6bmFtZXNwYWNlVVJJKCAgKSBjb25zdAogewogICAgIGlmICghaW1wbCkg
cmV0dXJuIERPTVN0cmluZygpOwotICAgIHJldHVybiBpbXBsLT5nZXREb2N1bWVudCgpLT5uYW1l
c3BhY2VVUkkoaW1wbC0+aWQoKSk7CisgICAgcmV0dXJuIGltcGwtPm5hbWVzcGFjZVVSSSgpOwog
fQogCiBET01TdHJpbmcgTm9kZTo6cHJlZml4KCAgKSBjb25zdApAQCAtMzM3LDcgKzMzNyw3IEBA
IHZvaWQgTm9kZTo6c2V0UHJlZml4KGNvbnN0IERPTVN0cmluZyAmcHIKIHsKICAgICBpZiAoIWlt
cGwpIHRocm93IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb246Ok5PVF9GT1VORF9FUlIpOwogICAg
IGludCBleGNlcHRpb25jb2RlID0gMDsKLSAgICBpbXBsLT5zZXRQcmVmaXgocHJlZml4LGV4Y2Vw
dGlvbmNvZGUpOworICAgIGltcGwtPnNldFByZWZpeChwcmVmaXguaW1wbGVtZW50YXRpb24oKSxl
eGNlcHRpb25jb2RlKTsKICAgICBpZiAoZXhjZXB0aW9uY29kZSkKICAgICAgICAgdGhyb3cgRE9N
RXhjZXB0aW9uKGV4Y2VwdGlvbmNvZGUpOwogfQpAQCAtMzc0LDEzICszNzQsNiBAQCBib29sIE5v
ZGU6OmRpc3BhdGNoRXZlbnQoY29uc3QgRXZlbnQgJmV2CiAgICAgaWYgKGV4Y2VwdGlvbmNvZGUp
CiAJdGhyb3cgRE9NRXhjZXB0aW9uKGV4Y2VwdGlvbmNvZGUpOwogICAgIHJldHVybiByOwotfQot
Ci0KLXVuc2lnbmVkIGludCBOb2RlOjplbGVtZW50SWQoKSBjb25zdAotewotICAgIGlmICghaW1w
bCkgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGltcGwtPmlkKCk7CiB9CiAKIHVuc2lnbmVkIGxvbmcg
Tm9kZTo6aW5kZXgoKSBjb25zdApJbmRleDogV2ViQ29yZS9raHRtbC9kb20vZG9tX25vZGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvbG9jYWwvaG9tZS9jdnMvTGFieXJpbnRoL1dlYkNvcmUva2h0
bWwvZG9tL2RvbV9ub2RlLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTIKZGlmZiAtdSAtcCAt
cjEuMTIgV2ViQ29yZS9raHRtbC9kb20vZG9tX25vZGUuaAotLS0gV2ViQ29yZS9raHRtbC9kb20v
ZG9tX25vZGUuaAkyMDA1LzA1LzE4IDIxOjEwOjI0CTEuMTIKKysrIFdlYkNvcmUva2h0bWwvZG9t
L2RvbV9ub2RlLmgJMjAwNS8wNi8wMiAwNDoxMTo0NQpAQCAtODU1LDEzICs4NTUsNiBAQCBwdWJs
aWM6CiAgICAgYm9vbCBkaXNwYXRjaEV2ZW50KGNvbnN0IEV2ZW50ICZldnQpOwogCiAgICAgLyoq
Ci0gICAgICogQGludGVybmFsCi0gICAgICogbm90IHBhcnQgb2YgdGhlIERPTS4KLSAgICAgKiBA
cmV0dXJucyB0aGUgZWxlbWVudCBpZCwgaW4gY2FzZSB0aGlzIGlzIGFuIGVsZW1lbnQsIDAgb3Ro
ZXJ3aXNlCi0gICAgICovCi0gICAgUV9VSU5UMzIgZWxlbWVudElkKCkgY29uc3Q7Ci0KLSAgICAv
KioKICAgICAgKiB0ZXN0cyBpZiB0aGlzIE5vZGUgaXMgMC4gVXNlZnVsIGVzcGVjaWFsbHksIGlm
IGNhc3RpbmcgdG8gYSBkZXJpdmVkCiAgICAgICogY2xhc3M6CiAgICAgICoKSW5kZXg6IFdlYkNv
cmUva2h0bWwvZG9tL2h0bWxfYmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2xvY2FsL2hv
bWUvY3ZzL0xhYnlyaW50aC9XZWJDb3JlL2todG1sL2RvbS9odG1sX2Jhc2UuY3BwLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjYKZGlmZiAtdSAtcCAtcjEuNiBXZWJDb3JlL2todG1sL2RvbS9odG1s
X2Jhc2UuY3BwCi0tLSBXZWJDb3JlL2todG1sL2RvbS9odG1sX2Jhc2UuY3BwCTIwMDMvMTEvMDMg
MDY6MzI6MDQJMS42CisrKyBXZWJDb3JlL2todG1sL2RvbS9odG1sX2Jhc2UuY3BwCTIwMDUvMDYv
MDIgMDQ6MTE6NDUKQEAgLTQxLDcgKzQxLDcgQEAgSFRNTEJvZHlFbGVtZW50OjpIVE1MQm9keUVs
ZW1lbnQoSFRNTEJvZAogCiBIVE1MQm9keUVsZW1lbnQgJkhUTUxCb2R5RWxlbWVudDo6b3BlcmF0
b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9C
T0RZICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OmJvZHkoKSApOwogICAg
IHJldHVybiAqdGhpczsKIH0KIApAQCAtMTM1LDcgKzEzNSw3IEBAIEhUTUxGcmFtZUVsZW1lbnQ6
OkhUTUxGcmFtZUVsZW1lbnQoSFRNTEYKIAogSFRNTEZyYW1lRWxlbWVudCAmSFRNTEZyYW1lRWxl
bWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIo
IG90aGVyLCBJRF9GUkFNRSApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpm
cmFtZSgpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC0yNjUsNyArMjY1LDcgQEAgSFRN
TElGcmFtZUVsZW1lbnQ6OkhUTUxJRnJhbWVFbGVtZW50KEhUTQogCiBIVE1MSUZyYW1lRWxlbWVu
dCAmSFRNTElGcmFtZUVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewot
ICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfSUZSQU1FICk7CisgICAgYXNzaWduT3RoZXIoIG90
aGVyLCBIVE1MTmFtZXM6OmlmcmFtZSgpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC00
MTQsNyArNDE0LDcgQEAgSFRNTEZyYW1lU2V0RWxlbWVudDo6SFRNTEZyYW1lU2V0RWxlbWVudAog
CiBIVE1MRnJhbWVTZXRFbGVtZW50ICZIVE1MRnJhbWVTZXRFbGVtZW50OjpvcGVyYXRvciA9IChj
b25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0ZSQU1FU0VU
ICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OmZyYW1lc2V0KCkgKTsKICAg
ICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTQ2Niw3ICs0NjYsNyBAQCBIVE1MSGVhZEVsZW1lbnQ6
OkhUTUxIZWFkRWxlbWVudChIVE1MSGVhCiAKIEhUTUxIZWFkRWxlbWVudCAmSFRNTEhlYWRFbGVt
ZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlcigg
b3RoZXIsIElEX0hFQUQgKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6aGVh
ZCgpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC01MDcsNyArNTA3LDcgQEAgSFRNTEh0
bWxFbGVtZW50OjpIVE1MSHRtbEVsZW1lbnQoSFRNTEh0bQogCiBIVE1MSHRtbEVsZW1lbnQgJkhU
TUxIdG1sRWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNz
aWduT3RoZXIoIG90aGVyLCBJRF9IVE1MICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1M
TmFtZXM6Omh0bWwoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApJbmRleDogV2ViQ29yZS9r
aHRtbC9kb20vaHRtbF9ibG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2xvY2FsL2hvbWUv
Y3ZzL0xhYnlyaW50aC9XZWJDb3JlL2todG1sL2RvbS9odG1sX2Jsb2NrLmNwcCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS40CmRpZmYgLXUgLXAgLXIxLjQgV2ViQ29yZS9raHRtbC9kb20vaHRtbF9i
bG9jay5jcHAKLS0tIFdlYkNvcmUva2h0bWwvZG9tL2h0bWxfYmxvY2suY3BwCTIwMDIvMDYvMTAg
MjA6MDc6MzQJMS40CisrKyBXZWJDb3JlL2todG1sL2RvbS9odG1sX2Jsb2NrLmNwcAkyMDA1LzA2
LzAyIDA0OjExOjQ1CkBAIC00Myw3ICs0Myw3IEBAIEhUTUxCbG9ja3F1b3RlRWxlbWVudDo6SFRN
TEJsb2NrcXVvdGVFbGUKIAogSFRNTEJsb2NrcXVvdGVFbGVtZW50ICZIVE1MQmxvY2txdW90ZUVs
ZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVy
KCBvdGhlciwgSURfQkxPQ0tRVU9URSApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5h
bWVzOjpibG9ja3F1b3RlKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTg0LDcgKzg0
LDcgQEAgSFRNTERpdkVsZW1lbnQ6OkhUTUxEaXZFbGVtZW50KEhUTUxEaXZFbAogCiBIVE1MRGl2
RWxlbWVudCAmSFRNTERpdkVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQog
ewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfRElWICk7CisgICAgYXNzaWduT3RoZXIoIG90
aGVyLCBIVE1MTmFtZXM6OmRpdigpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC0xMjUs
NyArMTI1LDcgQEAgSFRNTEhSRWxlbWVudDo6SFRNTEhSRWxlbWVudChIVE1MSFJFbGVtZQogCiBI
VE1MSFJFbGVtZW50ICZIVE1MSFJFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhl
cikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0hSICk7CisgICAgYXNzaWduT3RoZXIo
IG90aGVyLCBIVE1MTmFtZXM6OmhyKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTIw
NSwxNiArMjA1LDE3IEBAIEhUTUxIZWFkaW5nRWxlbWVudDo6SFRNTEhlYWRpbmdFbGVtZW50KEgK
IAogSFRNTEhlYWRpbmdFbGVtZW50ICZIVE1MSGVhZGluZ0VsZW1lbnQ6Om9wZXJhdG9yID0gKGNv
bnN0IE5vZGUgJm90aGVyKQogewotICAgIGlmKG90aGVyLmVsZW1lbnRJZCgpICE9IElEX0gxIHx8
Ci0gICAgICAgb3RoZXIuZWxlbWVudElkKCkgIT0gSURfSDIgfHwKLSAgICAgICBvdGhlci5lbGVt
ZW50SWQoKSAhPSBJRF9IMyB8fAotICAgICAgIG90aGVyLmVsZW1lbnRJZCgpICE9IElEX0g0IHx8
Ci0gICAgICAgb3RoZXIuZWxlbWVudElkKCkgIT0gSURfSDUgfHwKLSAgICAgICBvdGhlci5lbGVt
ZW50SWQoKSAhPSBJRF9INiApCisgICAgaWYgKCFvdGhlci5oYW5kbGUoKS0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OmgxKCkpICYmCisgICAgICAgICFvdGhlci5oYW5kbGUoKS0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OmgyKCkpICYmCisgICAgICAgICFvdGhlci5oYW5kbGUoKS0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OmgzKCkpICYmCisgICAgICAgICFvdGhlci5oYW5kbGUoKS0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6Omg0KCkpICYmCisgICAgICAgICFvdGhlci5oYW5kbGUoKS0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6Omg1KCkpICYmCisgICAgICAgICFvdGhlci5oYW5kbGUoKS0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6Omg2KCkpKQogICAgIHsKIAlpZiAoIGltcGwgKSBpbXBsLT5kZXJlZigpOwogCWlt
cGwgPSAwOwogICAgIH0gZWxzZSB7CisKICAgICBOb2RlOjpvcGVyYXRvciA9IChvdGhlcik7CiAg
ICAgfQogICAgIHJldHVybiAqdGhpczsKQEAgLTI1Nyw3ICsyNTgsNyBAQCBIVE1MUGFyYWdyYXBo
RWxlbWVudDo6SFRNTFBhcmFncmFwaEVsZW1lCiAKIEhUTUxQYXJhZ3JhcGhFbGVtZW50ICZIVE1M
UGFyYWdyYXBoRWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAg
YXNzaWduT3RoZXIoIG90aGVyLCBJRF9QICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1M
TmFtZXM6OnAoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtMjk4LDcgKzI5OSw3IEBA
IEhUTUxQcmVFbGVtZW50OjpIVE1MUHJlRWxlbWVudChIVE1MUHJlRWwKIAogSFRNTFByZUVsZW1l
bnQgJkhUTUxQcmVFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAg
ICBhc3NpZ25PdGhlciggb3RoZXIsIElEX1BSRSApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwg
SFRNTE5hbWVzOjpwcmUoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApJbmRleDogV2ViQ29y
ZS9raHRtbC9kb20vaHRtbF9lbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvbG9jYWwv
aG9tZS9jdnMvTGFieXJpbnRoL1dlYkNvcmUva2h0bWwvZG9tL2h0bWxfZWxlbWVudC5jcHAsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuMTQKZGlmZiAtdSAtcCAtcjEuMTQgV2ViQ29yZS9raHRtbC9k
b20vaHRtbF9lbGVtZW50LmNwcAotLS0gV2ViQ29yZS9raHRtbC9kb20vaHRtbF9lbGVtZW50LmNw
cAkyMDA1LzA1LzExIDAwOjU4OjI4CTEuMTQKKysrIFdlYkNvcmUva2h0bWwvZG9tL2h0bWxfZWxl
bWVudC5jcHAJMjAwNS8wNi8wMiAwNDoxMTo0NQpAQCAtMTgyLDkgKzE4Miw5IEBAIEhUTUxDb2xs
ZWN0aW9uIEhUTUxFbGVtZW50OjpjaGlsZHJlbigpIGMKICAgICByZXR1cm4gSFRNTENvbGxlY3Rp
b24oaW1wbCwgSFRNTENvbGxlY3Rpb25JbXBsOjpOT0RFX0NISUxEUkVOKTsKIH0KIAotdm9pZCBI
VE1MRWxlbWVudDo6YXNzaWduT3RoZXIoIGNvbnN0IE5vZGUgJm90aGVyLCBpbnQgZWxlbWVudElk
ICkKK3ZvaWQgSFRNTEVsZW1lbnQ6OmFzc2lnbk90aGVyKCBjb25zdCBOb2RlICZvdGhlciwgY29u
c3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSApCiB7Ci0gICAgaWYoKGludClvdGhlci5lbGVtZW50
SWQoKSAhPSBlbGVtZW50SWQpIHsKKyAgICBpZiAoIW90aGVyLmhhbmRsZSgpLT5oYXNUYWdOYW1l
KHRhZ05hbWUpKSB7CiAJaWYgKCBpbXBsICkgaW1wbC0+ZGVyZWYoKTsKIAlpbXBsID0gMDsKICAg
ICB9IGVsc2UgewpJbmRleDogV2ViQ29yZS9raHRtbC9kb20vaHRtbF9lbGVtZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2xvY2FsL2hvbWUvY3ZzL0xhYnlyaW50aC9XZWJDb3JlL2todG1sL2Rv
bS9odG1sX2VsZW1lbnQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS44CmRpZmYgLXUgLXAgLXIx
LjggV2ViQ29yZS9raHRtbC9kb20vaHRtbF9lbGVtZW50LmgKLS0tIFdlYkNvcmUva2h0bWwvZG9t
L2h0bWxfZWxlbWVudC5oCTIwMDQvMDUvMjIgMDE6NTA6NDgJMS44CisrKyBXZWJDb3JlL2todG1s
L2RvbS9odG1sX2VsZW1lbnQuaAkyMDA1LzA2LzAyIDA0OjExOjQ1CkBAIC0zMCw2ICszMCw4IEBA
CiAjZGVmaW5lIEhUTUxfRUxFTUVOVF9ICiAKICNpbmNsdWRlIDxkb20vZG9tX2VsZW1lbnQuaD4K
KyNpbmNsdWRlICJkb21fcW5hbWUuaCIKKwogY2xhc3MgS0hUTUxWaWV3OwogCiBuYW1lc3BhY2Ug
RE9NIHsKQEAgLTIyNSw3ICsyMjcsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgLyoKICAgICAgKiBAaW50
ZXJuYWwKICAgICAgKi8KLSAgICB2b2lkIGFzc2lnbk90aGVyKCBjb25zdCBOb2RlICZvdGhlciwg
aW50IGVsZW1lbnRJZCApOworICAgIHZvaWQgYXNzaWduT3RoZXIoIGNvbnN0IE5vZGUgJm90aGVy
LCBjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lICk7CiB9OwogCiB9OyAvL25hbWVzcGFjZQpJ
bmRleDogV2ViQ29yZS9raHRtbC9kb20vaHRtbF9mb3JtLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvbG9jYWwvaG9tZS9jdnMvTGFieXJpbnRoL1dlYkNvcmUva2h0bWwvZG9tL2h0bWxfZm9ybS5j
cHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTEKZGlmZiAtdSAtcCAtcjEuMTEgV2ViQ29yZS9r
aHRtbC9kb20vaHRtbF9mb3JtLmNwcAotLS0gV2ViQ29yZS9raHRtbC9kb20vaHRtbF9mb3JtLmNw
cAkyMDA1LzA1LzExIDAwOjU4OjI4CTEuMTEKKysrIFdlYkNvcmUva2h0bWwvZG9tL2h0bWxfZm9y
bS5jcHAJMjAwNS8wNi8wMiAwNDoxMTo0NgpAQCAtNDcsNyArNDcsNyBAQCBIVE1MQnV0dG9uRWxl
bWVudDo6SFRNTEJ1dHRvbkVsZW1lbnQoSFRNCiAKIEhUTUxCdXR0b25FbGVtZW50ICZIVE1MQnV0
dG9uRWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWdu
T3RoZXIoIG90aGVyLCBJRF9CVVRUT04gKTsJCisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1M
TmFtZXM6OmJ1dHRvbigpICk7CQogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtMTU3LDcgKzE1
Nyw3IEBAIEhUTUxGaWVsZFNldEVsZW1lbnQ6OkhUTUxGaWVsZFNldEVsZW1lbnQKIAogSFRNTEZp
ZWxkU2V0RWxlbWVudCAmSFRNTEZpZWxkU2V0RWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9k
ZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9GSUVMRFNFVCApOworICAg
IGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpmaWVsZHNldCgpICk7CiAgICAgcmV0dXJu
ICp0aGlzOwogfQogCkBAIC0xOTMsNyArMTkzLDcgQEAgSFRNTEZvcm1FbGVtZW50OjpIVE1MRm9y
bUVsZW1lbnQoSFRNTEZvcgogCiBIVE1MRm9ybUVsZW1lbnQgJkhUTUxGb3JtRWxlbWVudDo6b3Bl
cmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJ
RF9GT1JNICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OmZvcm0oKSApOwog
ICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtMzExLDcgKzMxMSw3IEBAIEhUTUxJbnB1dEVsZW1l
bnQ6OkhUTUxJbnB1dEVsZW1lbnQoSFRNTEkKIAogSFRNTElucHV0RWxlbWVudCAmSFRNTElucHV0
RWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3Ro
ZXIoIG90aGVyLCBJRF9JTlBVVCApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVz
OjppbnB1dCgpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC01NzQsNyArNTc0LDcgQEAg
SFRNTExhYmVsRWxlbWVudDo6SFRNTExhYmVsRWxlbWVudChIVE1MTAogCiBIVE1MTGFiZWxFbGVt
ZW50ICZIVE1MTGFiZWxFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsK
LSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0xBQkVMICk7CisgICAgYXNzaWduT3RoZXIoIG90
aGVyLCBIVE1MTmFtZXM6OmxhYmVsKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTYz
Myw3ICs2MzMsNyBAQCBIVE1MTGVnZW5kRWxlbWVudDo6SFRNTExlZ2VuZEVsZW1lbnQoSFRNCiAK
IEhUTUxMZWdlbmRFbGVtZW50ICZIVE1MTGVnZW5kRWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3Qg
Tm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9MRUdFTkQgKTsKKyAg
ICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6bGVnZW5kKCkgKTsKICAgICByZXR1cm4g
KnRoaXM7CiB9CiAKQEAgLTY5MSw3ICs2OTEsNyBAQCBIVE1MT3B0R3JvdXBFbGVtZW50OjpIVE1M
T3B0R3JvdXBFbGVtZW50CiAKIEhUTUxPcHRHcm91cEVsZW1lbnQgJkhUTUxPcHRHcm91cEVsZW1l
bnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBv
dGhlciwgSURfT1BUR1JPVVAgKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6
b3B0Z3JvdXAoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtNzQ0LDcgKzc0NCw3IEBA
IEhUTUxTZWxlY3RFbGVtZW50OjpIVE1MU2VsZWN0RWxlbWVudChIVE0KIAogSFRNTFNlbGVjdEVs
ZW1lbnQgJkhUTUxTZWxlY3RFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikK
IHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX1NFTEVDVCApOworICAgIGFzc2lnbk90aGVy
KCBvdGhlciwgSFRNTE5hbWVzOjpzZWxlY3QoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApA
QCAtOTA2LDcgKzkwNiw3IEBAIEhUTUxUZXh0QXJlYUVsZW1lbnQ6OkhUTUxUZXh0QXJlYUVsZW1l
bnQKIAogSFRNTFRleHRBcmVhRWxlbWVudCAmSFRNTFRleHRBcmVhRWxlbWVudDo6b3BlcmF0b3Ig
PSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9URVhU
QVJFQSApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjp0ZXh0YXJlYSgpICk7
CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC0xMDc0LDcgKzEwNzQsNyBAQCBIVE1MT3B0aW9u
RWxlbWVudDo6SFRNTE9wdGlvbkVsZW1lbnQoSFRNCiAKIEhUTUxPcHRpb25FbGVtZW50ICZIVE1M
T3B0aW9uRWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNz
aWduT3RoZXIoIG90aGVyLCBJRF9PUFRJT04gKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhU
TUxOYW1lczo6b3B0aW9uKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTExODIsNyAr
MTE4Miw3IEBAIEhUTUxJc0luZGV4RWxlbWVudDo6SFRNTElzSW5kZXhFbGVtZW50KEgKIAogSFRN
TElzSW5kZXhFbGVtZW50ICZIVE1MSXNJbmRleEVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5v
ZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfSVNJTkRFWCApOworICAg
IGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjppc2luZGV4KCkgKTsKICAgICByZXR1cm4g
KnRoaXM7CiB9CiAKSW5kZXg6IFdlYkNvcmUva2h0bWwvZG9tL2h0bWxfaGVhZC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2xvY2FsL2hvbWUvY3ZzL0xhYnlyaW50aC9XZWJDb3JlL2todG1sL2Rv
bS9odG1sX2hlYWQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjgKZGlmZiAtdSAtcCAtcjEu
OCBXZWJDb3JlL2todG1sL2RvbS9odG1sX2hlYWQuY3BwCi0tLSBXZWJDb3JlL2todG1sL2RvbS9o
dG1sX2hlYWQuY3BwCTIwMDMvMTEvMDMgMDY6MzI6MDQJMS44CisrKyBXZWJDb3JlL2todG1sL2Rv
bS9odG1sX2hlYWQuY3BwCTIwMDUvMDYvMDIgMDQ6MTE6NDYKQEAgLTQyLDcgKzQyLDcgQEAgSFRN
TEJhc2VFbGVtZW50OjpIVE1MQmFzZUVsZW1lbnQoSFRNTEJhcwogCiBIVE1MQmFzZUVsZW1lbnQg
JkhUTUxCYXNlRWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAg
YXNzaWduT3RoZXIoIG90aGVyLCBJRF9CQVNFICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBI
VE1MTmFtZXM6OmJhc2UoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtOTcsNyArOTcs
NyBAQCBIVE1MTGlua0VsZW1lbnQ6OkhUTUxMaW5rRWxlbWVudChIVE1MTGluCiAKIEhUTUxMaW5r
RWxlbWVudCAmSFRNTExpbmtFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikK
IHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0xJTksgKTsKKyAgICBhc3NpZ25PdGhlcigg
b3RoZXIsIEhUTUxOYW1lczo6bGluaygpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC0y
MzgsNyArMjM4LDcgQEAgSFRNTE1ldGFFbGVtZW50OjpIVE1MTWV0YUVsZW1lbnQoSFRNTE1ldAog
CiBIVE1MTWV0YUVsZW1lbnQgJkhUTUxNZXRhRWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9k
ZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9NRVRBICk7CisgICAgYXNz
aWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6Om1ldGEoKSApOwogICAgIHJldHVybiAqdGhpczsK
IH0KIApAQCAtMzEyLDcgKzMxMiw3IEBAIEhUTUxTY3JpcHRFbGVtZW50OjpIVE1MU2NyaXB0RWxl
bWVudChIVE0KIAogSFRNTFNjcmlwdEVsZW1lbnQgJkhUTUxTY3JpcHRFbGVtZW50OjpvcGVyYXRv
ciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX1ND
UklQVCApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpzY3JpcHQoKSApOwog
ICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtNDI0LDcgKzQyNCw3IEBAIEhUTUxTdHlsZUVsZW1l
bnQ6OkhUTUxTdHlsZUVsZW1lbnQoSFRNTFMKIAogSFRNTFN0eWxlRWxlbWVudCAmSFRNTFN0eWxl
RWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3Ro
ZXIoIG90aGVyLCBJRF9TVFlMRSApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVz
OjpzdHlsZSgpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC00OTYsNyArNDk2LDcgQEAg
SFRNTFRpdGxlRWxlbWVudDo6SFRNTFRpdGxlRWxlbWVudChIVE1MVAogCiBIVE1MVGl0bGVFbGVt
ZW50ICZIVE1MVGl0bGVFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsK
LSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX1RJVExFICk7CisgICAgYXNzaWduT3RoZXIoIG90
aGVyLCBIVE1MTmFtZXM6OnRpdGxlKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKSW5kZXg6
IFdlYkNvcmUva2h0bWwvZG9tL2h0bWxfaW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9s
b2NhbC9ob21lL2N2cy9MYWJ5cmludGgvV2ViQ29yZS9raHRtbC9kb20vaHRtbF9pbWFnZS5jcHAs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuOQpkaWZmIC11IC1wIC1yMS45IFdlYkNvcmUva2h0bWwv
ZG9tL2h0bWxfaW1hZ2UuY3BwCi0tLSBXZWJDb3JlL2todG1sL2RvbS9odG1sX2ltYWdlLmNwcAky
MDAzLzExLzAzIDA2OjMyOjA0CTEuOQorKysgV2ViQ29yZS9raHRtbC9kb20vaHRtbF9pbWFnZS5j
cHAJMjAwNS8wNi8wMiAwNDoxMTo0OQpAQCAtNDYsNyArNDYsNyBAQCBIVE1MQXJlYUVsZW1lbnQ6
OkhUTUxBcmVhRWxlbWVudChIVE1MQXJlCiAKIEhUTUxBcmVhRWxlbWVudCAmSFRNTEFyZWFFbGVt
ZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlcigg
b3RoZXIsIElEX0FSRUEgKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6YXJl
YSgpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC0xNzYsNyArMTc2LDcgQEAgSFRNTElt
YWdlRWxlbWVudDo6SFRNTEltYWdlRWxlbWVudChIVE1MSQogCiBIVE1MSW1hZ2VFbGVtZW50ICZI
VE1MSW1hZ2VFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBh
c3NpZ25PdGhlciggb3RoZXIsIElEX0lNRyApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRN
TE5hbWVzOjppbWcoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtMzcyLDcgKzM3Miw3
IEBAIEhUTUxNYXBFbGVtZW50OjpIVE1MTWFwRWxlbWVudChIVE1MTWFwRWwKIAogSFRNTE1hcEVs
ZW1lbnQgJkhUTUxNYXBFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsK
LSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX01BUCApOworICAgIGFzc2lnbk90aGVyKCBvdGhl
ciwgSFRNTE5hbWVzOjptYXAoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApJbmRleDogV2Vi
Q29yZS9raHRtbC9kb20vaHRtbF9pbmxpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9sb2Nh
bC9ob21lL2N2cy9MYWJ5cmludGgvV2ViQ29yZS9raHRtbC9kb20vaHRtbF9pbmxpbmUuY3BwLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjcKZGlmZiAtdSAtcCAtcjEuNyBXZWJDb3JlL2todG1sL2Rv
bS9odG1sX2lubGluZS5jcHAKLS0tIFdlYkNvcmUva2h0bWwvZG9tL2h0bWxfaW5saW5lLmNwcAky
MDA1LzA1LzExIDAwOjU4OjI4CTEuNworKysgV2ViQ29yZS9raHRtbC9kb20vaHRtbF9pbmxpbmUu
Y3BwCTIwMDUvMDYvMDIgMDQ6MTE6NDkKQEAgLTQ1LDcgKzQ1LDcgQEAgSFRNTEFuY2hvckVsZW1l
bnQ6OkhUTUxBbmNob3JFbGVtZW50KEhUTQogCiBIVE1MQW5jaG9yRWxlbWVudCAmSFRNTEFuY2hv
ckVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90
aGVyKCBvdGhlciwgSURfQSApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjph
KCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTIxNyw3ICsyMTcsNyBAQCBIVE1MQlJF
bGVtZW50OjpIVE1MQlJFbGVtZW50KEhUTUxCUkVsZW1lCiAKIEhUTUxCUkVsZW1lbnQgJkhUTUxC
UkVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90
aGVyKCBvdGhlciwgSURfQlIgKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6
YnIoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtMjU4LDcgKzI1OCw3IEBAIEhUTUxG
b250RWxlbWVudDo6SFRNTEZvbnRFbGVtZW50KEhUTUxGb24KIAogSFRNTEZvbnRFbGVtZW50ICZI
VE1MRm9udEVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFz
c2lnbk90aGVyKCBvdGhlciwgSURfRk9OVCApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRN
TE5hbWVzOjpmb250KCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTMxOSw3ICszMTks
NyBAQCBIVE1MTW9kRWxlbWVudDo6SFRNTE1vZEVsZW1lbnQoY29uc3QgSFRNCiBIVE1MTW9kRWxl
bWVudDo6SFRNTE1vZEVsZW1lbnQoSFRNTEVsZW1lbnRJbXBsICpfaW1wbCkKICAgICA6IEhUTUxF
bGVtZW50KCkKIHsKLSAgICBpZiAoX2ltcGwgJiYgKF9pbXBsLT5pZCgpID09IElEX0lOUyB8fCBf
aW1wbC0+aWQoKSA9PSBJRF9ERUwpKQorICAgIGlmIChfaW1wbCAmJiAoX2ltcGwtPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjppbnMoKSkgfHwgX2ltcGwtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpkZWwo
KSkpKQogICAgICAgICBpbXBsID0gX2ltcGw7CiAgICAgZWxzZQogICAgICAgICBpbXBsID0gMDsK
QEAgLTMyOCw5ICszMjgsOCBAQCBIVE1MTW9kRWxlbWVudDo6SFRNTE1vZEVsZW1lbnQoSFRNTEVs
ZW1lCiAKIEhUTUxNb2RFbGVtZW50ICZIVE1MTW9kRWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3Qg
Tm9kZSAmb3RoZXIpCiB7Ci0gICAgaWYoIG90aGVyLmVsZW1lbnRJZCgpICE9IElEX0lOUyAmJgot
CW90aGVyLmVsZW1lbnRJZCgpICE9IElEX0RFTCApCi0gICAgeworICAgIGlmICghb3RoZXIuaGFu
ZGxlKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppbnMoKSkgJiYKKyAgICAgICAgIW90aGVyLmhh
bmRsZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZGVsKCkpKSB7CiAJaWYgKCBpbXBsICkgaW1w
bC0+ZGVyZWYoKTsKIAlpbXBsID0gMDsKICAgICB9IGVsc2UgewpAQCAtMzgxLDE5ICszODAsMTYg
QEAgSFRNTFF1b3RlRWxlbWVudDo6SFRNTFF1b3RlRWxlbWVudChjb25zdAogewogfQogCi1IVE1M
UXVvdGVFbGVtZW50OjpIVE1MUXVvdGVFbGVtZW50KEhUTUxHZW5lcmljRWxlbWVudEltcGwgKl9p
bXBsKQorSFRNTFF1b3RlRWxlbWVudDo6SFRNTFF1b3RlRWxlbWVudChIVE1MUXVvdGVFbGVtZW50
SW1wbCAqX2ltcGwpCiAgICAgOiBIVE1MRWxlbWVudCgpCiB7Ci0gICAgaWYgKF9pbXBsICYmIF9p
bXBsLT5pZCgpID09IElEX1EpCi0gICAgICAgIGltcGwgPSBfaW1wbDsKLSAgICBlbHNlCi0gICAg
ICAgIGltcGwgPSAwOworICAgIGltcGwgPSBfaW1wbDsKICAgICBpZiAoIGltcGwgKSBpbXBsLT5y
ZWYoKTsKIH0KIAogSFRNTFF1b3RlRWxlbWVudCAmSFRNTFF1b3RlRWxlbWVudDo6b3BlcmF0b3Ig
PSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9RICk7
CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OnEoKSApOwogICAgIHJldHVybiAq
dGhpczsKIH0KIApJbmRleDogV2ViQ29yZS9raHRtbC9kb20vaHRtbF9pbmxpbmUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvbG9jYWwvaG9tZS9jdnMvTGFieXJpbnRoL1dlYkNvcmUva2h0bWwvZG9t
L2h0bWxfaW5saW5lLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMwpkaWZmIC11IC1wIC1yMS4z
IFdlYkNvcmUva2h0bWwvZG9tL2h0bWxfaW5saW5lLmgKLS0tIFdlYkNvcmUva2h0bWwvZG9tL2h0
bWxfaW5saW5lLmgJMjAwMi8wNC8xNSAyMzo0MjowMQkxLjMKKysrIFdlYkNvcmUva2h0bWwvZG9t
L2h0bWxfaW5saW5lLmgJMjAwNS8wNi8wMiAwNDoxMTo0OQpAQCAtNDI1LDcgKzQyNSw3IEBAIHB1
YmxpYzoKICAgICBIVE1MUXVvdGVFbGVtZW50KGNvbnN0IE5vZGUgJm90aGVyKSA6IEhUTUxFbGVt
ZW50KCkKICAgICAgICAgIHsoKnRoaXMpPW90aGVyO30KIHByb3RlY3RlZDoKLSAgICBIVE1MUXVv
dGVFbGVtZW50KEhUTUxHZW5lcmljRWxlbWVudEltcGwgKmltcGwpOworICAgIEhUTUxRdW90ZUVs
ZW1lbnQoSFRNTFF1b3RlRWxlbWVudEltcGwgKmltcGwpOwogcHVibGljOgogCiAgICAgSFRNTFF1
b3RlRWxlbWVudCAmIG9wZXJhdG9yID0gKGNvbnN0IEhUTUxRdW90ZUVsZW1lbnQgJm90aGVyKTsK
SW5kZXg6IFdlYkNvcmUva2h0bWwvZG9tL2h0bWxfbGlzdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2xvY2FsL2hvbWUvY3ZzL0xhYnlyaW50aC9XZWJDb3JlL2todG1sL2RvbS9odG1sX2xpc3Qu
Y3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjQKZGlmZiAtdSAtcCAtcjEuNCBXZWJDb3JlL2to
dG1sL2RvbS9odG1sX2xpc3QuY3BwCi0tLSBXZWJDb3JlL2todG1sL2RvbS9odG1sX2xpc3QuY3Bw
CTIwMDIvMDYvMTAgMjA6MDc6MzYJMS40CisrKyBXZWJDb3JlL2todG1sL2RvbS9odG1sX2xpc3Qu
Y3BwCTIwMDUvMDYvMDIgMDQ6MTE6NDkKQEAgLTQxLDcgKzQxLDcgQEAgSFRNTERMaXN0RWxlbWVu
dDo6SFRNTERMaXN0RWxlbWVudChIVE1MRAogCiBIVE1MRExpc3RFbGVtZW50ICZIVE1MRExpc3RF
bGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhl
ciggb3RoZXIsIElEX0RMICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OmRs
KCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTg4LDcgKzg4LDcgQEAgSFRNTERpcmVj
dG9yeUVsZW1lbnQ6OkhUTUxEaXJlY3RvcnlFbGVtZQogCiBIVE1MRGlyZWN0b3J5RWxlbWVudCAm
SFRNTERpcmVjdG9yeUVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewot
ICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfRElSICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVy
LCBIVE1MTmFtZXM6OmRpcigpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC0xMzUsNyAr
MTM1LDcgQEAgSFRNTExJRWxlbWVudDo6SFRNTExJRWxlbWVudChIVE1MTElFbGVtZQogCiBIVE1M
TElFbGVtZW50ICZIVE1MTElFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikK
IHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0xJICk7CisgICAgYXNzaWduT3RoZXIoIG90
aGVyLCBIVE1MTmFtZXM6OmxpKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTE5MCw3
ICsxOTAsNyBAQCBIVE1MTWVudUVsZW1lbnQ6OkhUTUxNZW51RWxlbWVudChIVE1MTWVuCiAKIEhU
TUxNZW51RWxlbWVudCAmSFRNTE1lbnVFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZv
dGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX01FTlUgKTsKKyAgICBhc3NpZ25P
dGhlciggb3RoZXIsIEhUTUxOYW1lczo6bWVudSgpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQog
CkBAIC0yMzcsNyArMjM3LDcgQEAgSFRNTE9MaXN0RWxlbWVudDo6SFRNTE9MaXN0RWxlbWVudChI
VE1MTwogCiBIVE1MT0xpc3RFbGVtZW50ICZIVE1MT0xpc3RFbGVtZW50OjpvcGVyYXRvciA9IChj
b25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX09MICk7Cisg
ICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6Om9sKCkgKTsKICAgICByZXR1cm4gKnRo
aXM7CiB9CiAKQEAgLTMxMCw3ICszMTAsNyBAQCBIVE1MVUxpc3RFbGVtZW50OjpIVE1MVUxpc3RF
bGVtZW50KEhUTUxVCiAKIEhUTUxVTGlzdEVsZW1lbnQgJkhUTUxVTGlzdEVsZW1lbnQ6Om9wZXJh
dG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURf
VUwgKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6dWwoKSApOwogICAgIHJl
dHVybiAqdGhpczsKIH0KIApJbmRleDogV2ViQ29yZS9raHRtbC9kb20vaHRtbF9taXNjLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvbG9jYWwvaG9tZS9jdnMvTGFieXJpbnRoL1dlYkNvcmUva2h0
bWwvZG9tL2h0bWxfbWlzYy5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNwpkaWZmIC11IC1w
IC1yMS43IFdlYkNvcmUva2h0bWwvZG9tL2h0bWxfbWlzYy5jcHAKLS0tIFdlYkNvcmUva2h0bWwv
ZG9tL2h0bWxfbWlzYy5jcHAJMjAwNS8wNS8xMSAwMDo1ODoyOAkxLjcKKysrIFdlYkNvcmUva2h0
bWwvZG9tL2h0bWxfbWlzYy5jcHAJMjAwNS8wNi8wMiAwNDoxMTo0OQpAQCAtNDEsNyArNDEsNyBA
QCBIVE1MQmFzZUZvbnRFbGVtZW50OjpIVE1MQmFzZUZvbnRFbGVtZW50CiAKIEhUTUxCYXNlRm9u
dEVsZW1lbnQgJkhUTUxCYXNlRm9udEVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90
aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfQkFTRUZPTlQgKTsKKyAgICBhc3Np
Z25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6YmFzZWZvbnQoKSApOwogICAgIHJldHVybiAqdGhp
czsKIH0KIApJbmRleDogV2ViQ29yZS9raHRtbC9kb20vaHRtbF9vYmplY3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9sb2NhbC9ob21lL2N2cy9MYWJ5cmludGgvV2ViQ29yZS9raHRtbC9kb20v
aHRtbF9vYmplY3QuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjUKZGlmZiAtdSAtcCAtcjEu
NSBXZWJDb3JlL2todG1sL2RvbS9odG1sX29iamVjdC5jcHAKLS0tIFdlYkNvcmUva2h0bWwvZG9t
L2h0bWxfb2JqZWN0LmNwcAkyMDA0LzAzLzAxIDE3OjA0OjI0CTEuNQorKysgV2ViQ29yZS9raHRt
bC9kb20vaHRtbF9vYmplY3QuY3BwCTIwMDUvMDYvMDIgMDQ6MTE6NTAKQEAgLTQzLDcgKzQzLDcg
QEAgSFRNTEFwcGxldEVsZW1lbnQ6OkhUTUxBcHBsZXRFbGVtZW50KEhUTQogCiBIVE1MQXBwbGV0
RWxlbWVudCAmSFRNTEFwcGxldEVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVy
KQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfQVBQTEVUICk7CisgICAgYXNzaWduT3Ro
ZXIoIG90aGVyLCBIVE1MTmFtZXM6OmFwcGxldCgpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQog
CkBAIC0xOTQsNyArMTk0LDcgQEAgSFRNTE9iamVjdEVsZW1lbnQ6OkhUTUxPYmplY3RFbGVtZW50
KEhUTQogCiBIVE1MT2JqZWN0RWxlbWVudCAmSFRNTE9iamVjdEVsZW1lbnQ6Om9wZXJhdG9yID0g
KGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfT0JKRUNU
ICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6Om9iamVjdCgpICk7CiAgICAg
cmV0dXJuICp0aGlzOwogfQogCkBAIC00MzIsNyArNDMyLDcgQEAgSFRNTFBhcmFtRWxlbWVudDo6
SFRNTFBhcmFtRWxlbWVudChIVE1MUAogCiBIVE1MUGFyYW1FbGVtZW50ICZIVE1MUGFyYW1FbGVt
ZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlcigg
b3RoZXIsIElEX1BBUkFNICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OnBh
cmFtKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKSW5kZXg6IFdlYkNvcmUva2h0bWwvZG9t
L2h0bWxfdGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9sb2NhbC9ob21lL2N2cy9MYWJ5
cmludGgvV2ViQ29yZS9raHRtbC9kb20vaHRtbF90YWJsZS5jcHAsdgpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuNgpkaWZmIC11IC1wIC1yMS42IFdlYkNvcmUva2h0bWwvZG9tL2h0bWxfdGFibGUuY3Bw
Ci0tLSBXZWJDb3JlL2todG1sL2RvbS9odG1sX3RhYmxlLmNwcAkyMDAzLzEwLzMxIDAwOjQ3OjE2
CTEuNgorKysgV2ViQ29yZS9raHRtbC9kb20vaHRtbF90YWJsZS5jcHAJMjAwNS8wNi8wMiAwNDox
MTo1MApAQCAtNDUsNyArNDUsNyBAQCBIVE1MVGFibGVDYXB0aW9uRWxlbWVudDo6SFRNTFRhYmxl
Q2FwdGlvCiAKIEhUTUxUYWJsZUNhcHRpb25FbGVtZW50ICZIVE1MVGFibGVDYXB0aW9uRWxlbWVu
dDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90
aGVyLCBJRF9DQVBUSU9OICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OmNh
cHRpb24oKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtODYsOSArODYsOCBAQCBIVE1M
VGFibGVDZWxsRWxlbWVudDo6SFRNTFRhYmxlQ2VsbEVsZW1lCiAKIEhUTUxUYWJsZUNlbGxFbGVt
ZW50ICZIVE1MVGFibGVDZWxsRWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIp
CiB7Ci0gICAgaWYoIG90aGVyLmVsZW1lbnRJZCgpICE9IElEX1REICYmCi0Jb3RoZXIuZWxlbWVu
dElkKCkgIT0gSURfVEggKQotICAgIHsKKyAgICBpZiAoIW90aGVyLmhhbmRsZSgpLT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6dGQoKSkgfHwKKyAgICAgICAgIW90aGVyLmhhbmRsZSgpLT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6dGgoKSkpIHsKIAlpZiAoIGltcGwgKSBpbXBsLT5kZXJlZigpOwogCWlt
cGwgPSAwOwogICAgIH0gZWxzZSB7CkBAIC0yOTUsOSArMjk0LDggQEAgSFRNTFRhYmxlQ29sRWxl
bWVudDo6SFRNTFRhYmxlQ29sRWxlbWVudAogCiBIVE1MVGFibGVDb2xFbGVtZW50ICZIVE1MVGFi
bGVDb2xFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBpZigg
b3RoZXIuZWxlbWVudElkKCkgIT0gSURfQ09MICYmCi0Jb3RoZXIuZWxlbWVudElkKCkgIT0gSURf
Q09MR1JPVVAgKQotICAgIHsKKyAgICBpZiAoIW90aGVyLmhhbmRsZSgpLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6Y29sKCkpICYmCisgICAgICAgICFvdGhlci5oYW5kbGUoKS0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OmNvbGdyb3VwKCkpKSB7CiAJaWYgKCBpbXBsICkgaW1wbC0+ZGVyZWYoKTsKIAlp
bXBsID0gMDsKICAgICB9IGVsc2UgewpAQCAtNDAxLDcgKzM5OSw3IEBAIEhUTUxUYWJsZUVsZW1l
bnQ6OkhUTUxUYWJsZUVsZW1lbnQoSFRNTFQKIAogSFRNTFRhYmxlRWxlbWVudCAmSFRNTFRhYmxl
RWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3Ro
ZXIoIG90aGVyLCBJRF9UQUJMRSApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVz
Ojp0YWJsZSgpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC02MzgsNyArNjM2LDcgQEAg
SFRNTFRhYmxlUm93RWxlbWVudDo6SFRNTFRhYmxlUm93RWxlbWVudAogCiBIVE1MVGFibGVSb3dF
bGVtZW50ICZIVE1MVGFibGVSb3dFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhl
cikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX1RSICk7CisgICAgYXNzaWduT3RoZXIo
IG90aGVyLCBIVE1MTmFtZXM6OnRyKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTc3
NSwxMCArNzczLDkgQEAgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ6OkhUTUxUYWJsZVNlY3Rpbwog
CiBIVE1MVGFibGVTZWN0aW9uRWxlbWVudCAmSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ6Om9wZXJh
dG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGlmKG90aGVyLmVsZW1lbnRJZCgpICE9
IElEX1RCT0RZICYmCi0gICAgICAgb3RoZXIuZWxlbWVudElkKCkgIT0gSURfVEhFQUQgJiYKLSAg
ICAgICBvdGhlci5lbGVtZW50SWQoKSAhPSBJRF9URk9PVCApCi0gICAgeworICAgIGlmICghb3Ro
ZXIuaGFuZGxlKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0Ym9keSgpKSAmJgorICAgICAgICAh
b3RoZXIuaGFuZGxlKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0aGVhZCgpKSAmJgorICAgICAg
ICAhb3RoZXIuaGFuZGxlKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0Zm9vdCgpKSkgewogCWlm
ICggaW1wbCApIGltcGwtPmRlcmVmKCk7CiAJaW1wbCA9IDA7CiAgICAgfSBlbHNlIHsKSW5kZXg6
IFdlYkNvcmUva2h0bWwvZWNtYS9ranNfY3NzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvbG9j
YWwvaG9tZS9jdnMvTGFieXJpbnRoL1dlYkNvcmUva2h0bWwvZWNtYS9ranNfY3NzLmNwcCx2CnJl
dHJpZXZpbmcgcmV2aXNpb24gMS4yMwpkaWZmIC11IC1wIC1yMS4yMyBXZWJDb3JlL2todG1sL2Vj
bWEva2pzX2Nzcy5jcHAKLS0tIFdlYkNvcmUva2h0bWwvZWNtYS9ranNfY3NzLmNwcAkyMDA1LzA1
LzE2IDE5OjE5OjM4CTEuMjMKKysrIFdlYkNvcmUva2h0bWwvZWNtYS9ranNfY3NzLmNwcAkyMDA1
LzA2LzAyIDA0OjExOjUxCkBAIC0yOSw3ICsyOSw3IEBACiAjaW5jbHVkZSAieG1sL2RvbV9kb2Np
bXBsLmgiCiAjaW5jbHVkZSAiaHRtbC9odG1sX2hlYWRpbXBsLmgiIC8vIGZvciBIVE1MU3R5bGVF
bGVtZW50CiAjaW5jbHVkZSAia2pzX2RvbS5oIgotI2luY2x1ZGUgIm1pc2MvaHRtbHRhZ3MuaCIK
KyNpbmNsdWRlICJodG1sbmFtZXMuaCIKIAogI2luY2x1ZGUgPGtkZWJ1Zy5oPgogCkBAIC01NSw2
ICs1NSw3IEBAIHVzaW5nIERPTTo6Q291bnRlckltcGw7CiB1c2luZyBET006OkRvY3VtZW50SW1w
bDsKIHVzaW5nIERPTTo6RE9NU3RyaW5nOwogdXNpbmcgRE9NOjpFbGVtZW50SW1wbDsKK3VzaW5n
IERPTTo6SFRNTE5hbWVzOwogdXNpbmcgRE9NOjpIVE1MU3R5bGVFbGVtZW50SW1wbDsKIHVzaW5n
IERPTTo6TWVkaWFMaXN0SW1wbDsKIHVzaW5nIERPTTo6UmVjdEltcGw7CkBAIC0zOTUsNyArMzk2
LDcgQEAgVmFsdWUgRE9NU3R5bGVTaGVldExpc3Q6OnRyeUdldChFeGVjU3RhdAogICAvLyBhbmQg
ZG9lc24ndCBsb29rIGZvciBuYW1lIGF0dHJpYnV0ZSAoc2VlIGltcGxlbWVudGF0aW9uIGFib3Zl
KS4KICAgLy8gQnV0IHVuaWNpdHkgb2Ygc3R5bGVzaGVldCBpZHMgaXMgZ29vZCBwcmFjdGljZSBh
bnl3YXkgOykKICAgRWxlbWVudEltcGwgKmVsZW1lbnQgPSBtX2RvYy0+Z2V0RWxlbWVudEJ5SWQo
cC5zdHJpbmcoKSk7Ci0gIGlmIChlbGVtZW50ICYmIGVsZW1lbnQtPmlkKCkgPT0gSURfU1RZTEUp
CisgIGlmIChlbGVtZW50ICYmIGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzdHlsZSgp
KSkKICAgICByZXR1cm4gZ2V0RE9NU3R5bGVTaGVldChleGVjLCBzdGF0aWNfY2FzdDxIVE1MU3R5
bGVFbGVtZW50SW1wbCAqPihlbGVtZW50KS0+c2hlZXQoKSk7CiAKICAgcmV0dXJuIERPTU9iamVj
dDo6dHJ5R2V0KGV4ZWMsIHApOwpJbmRleDogV2ViQ29yZS9raHRtbC9lY21hL2tqc19kb20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9sb2NhbC9ob21lL2N2cy9MYWJ5cmludGgvV2ViQ29yZS9r
aHRtbC9lY21hL2tqc19kb20uY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjczCmRpZmYgLXUg
LXAgLXIxLjczIFdlYkNvcmUva2h0bWwvZWNtYS9ranNfZG9tLmNwcAotLS0gV2ViQ29yZS9raHRt
bC9lY21hL2tqc19kb20uY3BwCTIwMDUvMDUvMzEgMDE6MjA6NDYJMS43MworKysgV2ViQ29yZS9r
aHRtbC9lY21hL2tqc19kb20uY3BwCTIwMDUvMDYvMDIgMDQ6MTE6NTMKQEAgLTY3LDYgKzY3LDcg
QEAgdXNpbmcgRE9NOjpIVE1MQXBwbGV0RWxlbWVudEltcGw7CiB1c2luZyBET006OkhUTUxEb2N1
bWVudEltcGw7CiB1c2luZyBET006OkhUTUxFbGVtZW50SW1wbDsKIHVzaW5nIERPTTo6SFRNTEVt
YmVkRWxlbWVudEltcGw7Cit1c2luZyBET006OkhUTUxOYW1lczsKIHVzaW5nIERPTTo6SFRNTE9i
amVjdEVsZW1lbnRJbXBsOwogdXNpbmcgRE9NOjpOYW1lZE5vZGVNYXBJbXBsOwogdXNpbmcgRE9N
OjpOb2RlOwpAQCAtNDQyLDcgKzQ0Myw3IEBAIHZvaWQgRE9NTm9kZTo6cHV0VmFsdWUoRXhlY1N0
YXRlICpleGVjLCAKICAgICBub2RlLnNldE5vZGVWYWx1ZSh2YWx1ZS50b1N0cmluZyhleGVjKS5z
dHJpbmcoKSwgZXhjZXB0aW9uKTsKICAgICBicmVhazsKICAgY2FzZSBQcmVmaXg6Ci0gICAgbm9k
ZS5zZXRQcmVmaXgodmFsdWUudG9TdHJpbmcoZXhlYykuc3RyaW5nKCksIGV4Y2VwdGlvbik7Cisg
ICAgbm9kZS5zZXRQcmVmaXgodmFsdWUudG9TdHJpbmcoZXhlYykuc3RyaW5nKCkuaW1wbGVtZW50
YXRpb24oKSwgZXhjZXB0aW9uKTsKICAgICBicmVhazsKICAgY2FzZSBPbkFib3J0OgogICAgIHNl
dExpc3RlbmVyKGV4ZWMsRE9NOjpFdmVudEltcGw6OkFCT1JUX0VWRU5ULHZhbHVlKTsKQEAgLTEx
NjcsNyArMTE2OCw3IEBAIFZhbHVlIERPTUVsZW1lbnQ6OnRyeUdldChFeGVjU3RhdGUgKmV4ZWMK
ICAgewogICAgIHN3aXRjaCggZW50cnktPnZhbHVlICkgewogICAgIGNhc2UgVGFnTmFtZToKLSAg
ICAgIHJldHVybiBnZXRTdHJpbmdPck51bGwoZWxlbWVudC50YWdOYW1lKCkpOworICAgICAgcmV0
dXJuIGdldFN0cmluZ09yTnVsbChlbGVtZW50Lm5vZGVOYW1lKCkpOwogICAgIGNhc2UgU3R5bGU6
CiAgICAgICByZXR1cm4gZ2V0RE9NQ1NTU3R5bGVEZWNsYXJhdGlvbihleGVjLGVsZW1lbnQuc3R5
bGUoKSk7CiAgICAgZGVmYXVsdDoKQEAgLTE2ODksMjYgKzE2OTAsMjEgQEAgVmFsdWVJbXAgKmdl
dFJ1bnRpbWVPYmplY3QoRXhlY1N0YXRlICpleAogICAgIGlmICghbikKICAgICAgICAgcmV0dXJu
IDA7CiAKLSAgICBzd2l0Y2ggKG4tPmlkKCkpIHsKLSAgICAgICAgY2FzZSBJRF9BUFBMRVQ6IHsK
LSAgICAgICAgICAgIEhUTUxBcHBsZXRFbGVtZW50SW1wbCAqYXBwbGV0RWxlbWVudCA9IHN0YXRp
Y19jYXN0PEhUTUxBcHBsZXRFbGVtZW50SW1wbCAqPihuKTsKLSAgICAgICAgICAgIGlmIChhcHBs
ZXRFbGVtZW50LT5nZXRBcHBsZXRJbnN0YW5jZSgpKQotICAgICAgICAgICAgICAgIC8vIFRoZSBp
bnN0YW5jZSBpcyBvd25lZCBieSB0aGUgYXBwbGV0IGVsZW1lbnQuCi0gICAgICAgICAgICAgICAg
cmV0dXJuIG5ldyBSdW50aW1lT2JqZWN0SW1wKGFwcGxldEVsZW1lbnQtPmdldEFwcGxldEluc3Rh
bmNlKCksIGZhbHNlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNh
c2UgSURfRU1CRUQ6IHsKLSAgICAgICAgICAgIEhUTUxFbWJlZEVsZW1lbnRJbXBsICplbWJlZEVs
ZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRW1iZWRFbGVtZW50SW1wbCAqPihuKTsKLSAgICAgICAg
ICAgIGlmIChlbWJlZEVsZW1lbnQtPmdldEVtYmVkSW5zdGFuY2UoKSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gbmV3IFJ1bnRpbWVPYmplY3RJbXAoZW1iZWRFbGVtZW50LT5nZXRFbWJlZEluc3Rh
bmNlKCksIGZhbHNlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNh
c2UgSURfT0JKRUNUOiB7Ci0gICAgICAgICAgICBIVE1MT2JqZWN0RWxlbWVudEltcGwgKm9iamVj
dEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MT2JqZWN0RWxlbWVudEltcGwgKj4obik7Ci0gICAg
ICAgICAgICBpZiAob2JqZWN0RWxlbWVudC0+Z2V0T2JqZWN0SW5zdGFuY2UoKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gbmV3IFJ1bnRpbWVPYmplY3RJbXAob2JqZWN0RWxlbWVudC0+Z2V0T2Jq
ZWN0SW5zdGFuY2UoKSwgZmFsc2UpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKyAg
ICBpZiAobi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmFwcGxldCgpKSkgeworICAgICAgICBIVE1M
QXBwbGV0RWxlbWVudEltcGwgKmFwcGxldEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MQXBwbGV0
RWxlbWVudEltcGwgKj4obik7CisgICAgICAgIGlmIChhcHBsZXRFbGVtZW50LT5nZXRBcHBsZXRJ
bnN0YW5jZSgpKQorICAgICAgICAgICAgLy8gVGhlIGluc3RhbmNlIGlzIG93bmVkIGJ5IHRoZSBh
cHBsZXQgZWxlbWVudC4KKyAgICAgICAgICAgIHJldHVybiBuZXcgUnVudGltZU9iamVjdEltcChh
cHBsZXRFbGVtZW50LT5nZXRBcHBsZXRJbnN0YW5jZSgpLCBmYWxzZSk7CisgICAgfQorICAgIGVs
c2UgaWYgKG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjplbWJlZCgpKSkgeworICAgICAgICBIVE1M
RW1iZWRFbGVtZW50SW1wbCAqZW1iZWRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEVtYmVkRWxl
bWVudEltcGwgKj4obik7CisgICAgICAgIGlmIChlbWJlZEVsZW1lbnQtPmdldEVtYmVkSW5zdGFu
Y2UoKSkKKyAgICAgICAgICAgIHJldHVybiBuZXcgUnVudGltZU9iamVjdEltcChlbWJlZEVsZW1l
bnQtPmdldEVtYmVkSW5zdGFuY2UoKSwgZmFsc2UpOworICAgIH0KKyAgICBlbHNlIGlmIChuLT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6b2JqZWN0KCkpKSB7CisgICAgICAgIEhUTUxPYmplY3RFbGVt
ZW50SW1wbCAqb2JqZWN0RWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxPYmplY3RFbGVtZW50SW1w
bCAqPihuKTsKKyAgICAgICAgaWYgKG9iamVjdEVsZW1lbnQtPmdldE9iamVjdEluc3RhbmNlKCkp
CisgICAgICAgICAgICByZXR1cm4gbmV3IFJ1bnRpbWVPYmplY3RJbXAob2JqZWN0RWxlbWVudC0+
Z2V0T2JqZWN0SW5zdGFuY2UoKSwgZmFsc2UpOwogICAgIH0KICAgICAKICAgICAvLyBJZiB3ZSBk
b24ndCBoYXZlIGEgcnVudGltZSBvYmplY3QgcmV0dXJuIDAuCkluZGV4OiBXZWJDb3JlL2todG1s
L2VjbWEva2pzX2h0bWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9sb2NhbC9ob21lL2N2cy9M
YWJ5cmludGgvV2ViQ29yZS9raHRtbC9lY21hL2tqc19odG1sLmNwcCx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS4xMTQKZGlmZiAtdSAtcCAtcjEuMTE0IFdlYkNvcmUva2h0bWwvZWNtYS9ranNfaHRt
bC5jcHAKLS0tIFdlYkNvcmUva2h0bWwvZWNtYS9ranNfaHRtbC5jcHAJMjAwNS8wNS8yMyAwMDo1
Nzo0MgkxLjExNAorKysgV2ViQ29yZS9raHRtbC9lY21hL2tqc19odG1sLmNwcAkyMDA1LzA2LzAy
IDA0OjExOjU5CkBAIC0xMDksNiArMTA5LDcgQEAgdXNpbmcgRE9NOjpIVE1MTWFwRWxlbWVudElt
cGw7CiB1c2luZyBET006OkhUTUxNZW51RWxlbWVudEltcGw7CiB1c2luZyBET006OkhUTUxNZXRh
RWxlbWVudEltcGw7CiB1c2luZyBET006OkhUTUxNb2RFbGVtZW50SW1wbDsKK3VzaW5nIERPTTo6
SFRNTE5hbWVzOwogdXNpbmcgRE9NOjpIVE1MT0xpc3RFbGVtZW50SW1wbDsKIHVzaW5nIERPTTo6
SFRNTE9iamVjdEVsZW1lbnRJbXBsOwogdXNpbmcgRE9NOjpIVE1MT3B0R3JvdXBFbGVtZW50SW1w
bDsKQEAgLTM1Myw3ICszNTQsNyBAQCBWYWx1ZSBIVE1MRG9jdW1lbnQ6OnRyeUdldChFeGVjU3Rh
dGUgKmV4CiAgIGlmICh2YWwpCiAgICAgcmV0dXJuIFZhbHVlKHZhbCk7CiAKLSAgSFRNTEJvZHlF
bGVtZW50SW1wbCAqYm9keUVsZW1lbnQgPSAoYm9keSAmJiBib2R5LT5pZCgpID09IElEX0JPRFkp
ID8gc3RhdGljX2Nhc3Q8SFRNTEJvZHlFbGVtZW50SW1wbCAqPihib2R5KSA6IDA7CisgIEhUTUxC
b2R5RWxlbWVudEltcGwgKmJvZHlFbGVtZW50ID0gKGJvZHkgJiYgYm9keS0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OmJvZHkoKSkpID8gc3RhdGljX2Nhc3Q8SFRNTEJvZHlFbGVtZW50SW1wbCAqPihi
b2R5KSA6IDA7CiAKICAgaWYgKGVudHJ5KSB7CiAgICAgc3dpdGNoIChlbnRyeS0+dmFsdWUpIHsK
QEAgLTQyOCw3ICs0MjksNyBAQCB2b2lkIEtKUzo6SFRNTERvY3VtZW50OjpwdXRWYWx1ZShFeGVj
U3RhCiAgIERPTUV4Y2VwdGlvblRyYW5zbGF0b3IgZXhjZXB0aW9uKGV4ZWMpOwogICBIVE1MRG9j
dW1lbnRJbXBsICZkb2MgPSAqc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50SW1wbCAqPihpbXBsKCkp
OwogICBIVE1MRWxlbWVudEltcGwgKmJvZHkgPSBkb2MuYm9keSgpOwotICBIVE1MQm9keUVsZW1l
bnRJbXBsICpib2R5RWxlbWVudCA9IChib2R5ICYmIGJvZHktPmlkKCkgPT0gSURfQk9EWSkgPyBz
dGF0aWNfY2FzdDxIVE1MQm9keUVsZW1lbnRJbXBsICo+KGJvZHkpIDogMDsKKyAgSFRNTEJvZHlF
bGVtZW50SW1wbCAqYm9keUVsZW1lbnQgPSAoYm9keSAmJiBib2R5LT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6Ym9keSgpKSkgPyBzdGF0aWNfY2FzdDxIVE1MQm9keUVsZW1lbnRJbXBsICo+KGJvZHkp
IDogMDsKIAogICBzd2l0Y2ggKHRva2VuKSB7CiAgIGNhc2UgVGl0bGU6CkBAIC01ODIsMTMzICs1
ODMsMjE4IEBAIGNvbnN0IENsYXNzSW5mbyBLSlM6OkhUTUxFbGVtZW50OjptYXJxdWUKIAogY29u
c3QgQ2xhc3NJbmZvKiBLSlM6OkhUTUxFbGVtZW50OjpjbGFzc0luZm8oKSBjb25zdAogewotICBz
d2l0Y2ggKGltcGwoKS0+aWQoKSkgewotICBjYXNlIElEX0hUTUw6Ci0gICAgcmV0dXJuICZodG1s
X2luZm87Ci0gIGNhc2UgSURfSEVBRDoKLSAgICByZXR1cm4gJmhlYWRfaW5mbzsKLSAgY2FzZSBJ
RF9MSU5LOgotICAgIHJldHVybiAmbGlua19pbmZvOwotICBjYXNlIElEX1RJVExFOgotICAgIHJl
dHVybiAmdGl0bGVfaW5mbzsKLSAgY2FzZSBJRF9NRVRBOgotICAgIHJldHVybiAmbWV0YV9pbmZv
OwotICBjYXNlIElEX0JBU0U6Ci0gICAgcmV0dXJuICZiYXNlX2luZm87Ci0gIGNhc2UgSURfSVNJ
TkRFWDoKLSAgICByZXR1cm4gJmlzSW5kZXhfaW5mbzsKLSAgY2FzZSBJRF9TVFlMRToKLSAgICBy
ZXR1cm4gJnN0eWxlX2luZm87Ci0gIGNhc2UgSURfQk9EWToKLSAgICByZXR1cm4gJmJvZHlfaW5m
bzsKLSAgY2FzZSBJRF9GT1JNOgotICAgIHJldHVybiAmZm9ybV9pbmZvOwotICBjYXNlIElEX1NF
TEVDVDoKLSAgICByZXR1cm4gJnNlbGVjdF9pbmZvOwotICBjYXNlIElEX09QVEdST1VQOgotICAg
IHJldHVybiAmb3B0R3JvdXBfaW5mbzsKLSAgY2FzZSBJRF9PUFRJT046Ci0gICAgcmV0dXJuICZv
cHRpb25faW5mbzsKLSAgY2FzZSBJRF9JTlBVVDoKLSAgICByZXR1cm4gJmlucHV0X2luZm87Ci0g
IGNhc2UgSURfVEVYVEFSRUE6Ci0gICAgcmV0dXJuICZ0ZXh0QXJlYV9pbmZvOwotICBjYXNlIElE
X0JVVFRPTjoKLSAgICByZXR1cm4gJmJ1dHRvbl9pbmZvOwotICBjYXNlIElEX0xBQkVMOgotICAg
IHJldHVybiAmbGFiZWxfaW5mbzsKLSAgY2FzZSBJRF9GSUVMRFNFVDoKLSAgICByZXR1cm4gJmZp
ZWxkU2V0X2luZm87Ci0gIGNhc2UgSURfTEVHRU5EOgotICAgIHJldHVybiAmbGVnZW5kX2luZm87
Ci0gIGNhc2UgSURfVUw6Ci0gICAgcmV0dXJuICZ1bF9pbmZvOwotICBjYXNlIElEX09MOgotICAg
IHJldHVybiAmb2xfaW5mbzsKLSAgY2FzZSBJRF9ETDoKLSAgICByZXR1cm4gJmRsX2luZm87Ci0g
IGNhc2UgSURfRElSOgotICAgIHJldHVybiAmZGlyX2luZm87Ci0gIGNhc2UgSURfTUVOVToKLSAg
ICByZXR1cm4gJm1lbnVfaW5mbzsKLSAgY2FzZSBJRF9MSToKLSAgICByZXR1cm4gJmxpX2luZm87
Ci0gIGNhc2UgSURfRElWOgotICAgIHJldHVybiAmZGl2X2luZm87Ci0gIGNhc2UgSURfUDoKLSAg
ICByZXR1cm4gJnBfaW5mbzsKLSAgY2FzZSBJRF9IMToKLSAgY2FzZSBJRF9IMjoKLSAgY2FzZSBJ
RF9IMzoKLSAgY2FzZSBJRF9INDoKLSAgY2FzZSBJRF9INToKLSAgY2FzZSBJRF9INjoKLSAgICBy
ZXR1cm4gJmhlYWRpbmdfaW5mbzsKLSAgY2FzZSBJRF9CTE9DS1FVT1RFOgotICAgIHJldHVybiAm
YmxvY2tRdW90ZV9pbmZvOwotICBjYXNlIElEX1E6Ci0gICAgcmV0dXJuICZxX2luZm87Ci0gIGNh
c2UgSURfUFJFOgotICAgIHJldHVybiAmcHJlX2luZm87Ci0gIGNhc2UgSURfQlI6Ci0gICAgcmV0
dXJuICZicl9pbmZvOwotICBjYXNlIElEX0JBU0VGT05UOgotICAgIHJldHVybiAmYmFzZUZvbnRf
aW5mbzsKLSAgY2FzZSBJRF9GT05UOgotICAgIHJldHVybiAmZm9udF9pbmZvOwotICBjYXNlIElE
X0hSOgotICAgIHJldHVybiAmaHJfaW5mbzsKLSAgY2FzZSBJRF9JTlM6Ci0gIGNhc2UgSURfREVM
OgotICAgIHJldHVybiAmbW9kX2luZm87Ci0gIGNhc2UgSURfQToKLSAgICByZXR1cm4gJmFfaW5m
bzsKLSAgY2FzZSBJRF9DQU5WQVM6Ci0gICAgcmV0dXJuICZjYW52YXNfaW5mbzsKLSAgY2FzZSBJ
RF9JTUc6Ci0gICAgcmV0dXJuICZpbWdfaW5mbzsKLSAgY2FzZSBJRF9PQkpFQ1Q6Ci0gICAgcmV0
dXJuICZvYmplY3RfaW5mbzsKLSAgY2FzZSBJRF9QQVJBTToKLSAgICByZXR1cm4gJnBhcmFtX2lu
Zm87Ci0gIGNhc2UgSURfQVBQTEVUOgotICAgIHJldHVybiAmYXBwbGV0X2luZm87Ci0gIGNhc2Ug
SURfTUFQOgotICAgIHJldHVybiAmbWFwX2luZm87Ci0gIGNhc2UgSURfQVJFQToKLSAgICByZXR1
cm4gJmFyZWFfaW5mbzsKLSAgY2FzZSBJRF9TQ1JJUFQ6Ci0gICAgcmV0dXJuICZzY3JpcHRfaW5m
bzsKLSAgY2FzZSBJRF9UQUJMRToKLSAgICByZXR1cm4gJnRhYmxlX2luZm87Ci0gIGNhc2UgSURf
Q0FQVElPTjoKLSAgICByZXR1cm4gJmNhcHRpb25faW5mbzsKLSAgY2FzZSBJRF9DT0w6Ci0gICAg
cmV0dXJuICZjb2xfaW5mbzsKLSAgY2FzZSBJRF9USEVBRDoKLSAgICByZXR1cm4gJnRhYmxlc2Vj
dGlvbl9pbmZvOwotICBjYXNlIElEX1RCT0RZOgotICAgIHJldHVybiAmdGFibGVzZWN0aW9uX2lu
Zm87Ci0gIGNhc2UgSURfVEZPT1Q6Ci0gICAgcmV0dXJuICZ0YWJsZXNlY3Rpb25faW5mbzsKLSAg
Y2FzZSBJRF9UUjoKLSAgICByZXR1cm4gJnRyX2luZm87Ci0gIGNhc2UgSURfVEg6Ci0gICAgcmV0
dXJuICZ0YWJsZWNlbGxfaW5mbzsKLSAgY2FzZSBJRF9URDoKLSAgICByZXR1cm4gJnRhYmxlY2Vs
bF9pbmZvOwotICBjYXNlIElEX0ZSQU1FU0VUOgotICAgIHJldHVybiAmZnJhbWVTZXRfaW5mbzsK
LSAgY2FzZSBJRF9GUkFNRToKLSAgICByZXR1cm4gJmZyYW1lX2luZm87Ci0gIGNhc2UgSURfSUZS
QU1FOgotICAgIHJldHVybiAmaUZyYW1lX2luZm87Ci0gIGNhc2UgSURfTUFSUVVFRToKLSAgICBy
ZXR1cm4gJm1hcnF1ZWVfaW5mbzsKLSAgZGVmYXVsdDoKKyAgICAvLyBXZSBhbHJlYWR5IGtub3cg
d2UgaGF2ZSBhbiBIVE1MIGVsZW1lbnQsIHNvIHdlIG9ubHkgbmVlZCB0byBjb21wYXJlIHRoZSBs
b2NhbE5hbWUgY29tcG9uZW50IG9mIHRoZSBxdWFsaWZpZWQgbmFtZS4KKyAgICBzdGF0aWMgUVB0
ckRpY3Q8Y29uc3QgQ2xhc3NJbmZvPiBjbGFzc0luZm9EaWN0OworICAgIGlmIChjbGFzc0luZm9E
aWN0LmlzRW1wdHkoKSkgeworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6
OmEoKS5sb2NhbE5hbWVQdHIoKSwgJmFfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5z
ZXJ0KEhUTUxOYW1lczo6YXBwbGV0KCkubG9jYWxOYW1lUHRyKCksICZhcHBsZXRfaW5mbyk7Cisg
ICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6YXJlYSgpLmxvY2FsTmFtZVB0
cigpLCAmYXJlYV9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVz
OjpiYXNlKCkubG9jYWxOYW1lUHRyKCksICZiYXNlX2luZm8pOworICAgICAgICBjbGFzc0luZm9E
aWN0Lmluc2VydChIVE1MTmFtZXM6OmJhc2Vmb250KCkubG9jYWxOYW1lUHRyKCksICZiYXNlRm9u
dF9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpibG9ja3F1
b3RlKCkubG9jYWxOYW1lUHRyKCksICZibG9ja1F1b3RlX2luZm8pOworICAgICAgICBjbGFzc0lu
Zm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmJvZHkoKS5sb2NhbE5hbWVQdHIoKSwgJmJvZHlfaW5m
byk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6YnIoKS5sb2NhbE5h
bWVQdHIoKSwgJmJyX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFt
ZXM6OmJ1dHRvbigpLmxvY2FsTmFtZVB0cigpLCAmYnV0dG9uX2luZm8pOworICAgICAgICBjbGFz
c0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmNhbnZhcygpLmxvY2FsTmFtZVB0cigpLCAmY2Fu
dmFzX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmNhcHRp
b24oKS5sb2NhbE5hbWVQdHIoKSwgJmNhcHRpb25faW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0Rp
Y3QuaW5zZXJ0KEhUTUxOYW1lczo6Y29sKCkubG9jYWxOYW1lUHRyKCksICZjb2xfaW5mbyk7Cisg
ICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6Y29sZ3JvdXAoKS5sb2NhbE5h
bWVQdHIoKSwgJmNvbF9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5h
bWVzOjpkZWwoKS5sb2NhbE5hbWVQdHIoKSwgJm1vZF9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZv
RGljdC5pbnNlcnQoSFRNTE5hbWVzOjpkaXIoKS5sb2NhbE5hbWVQdHIoKSwgJmRpcl9pbmZvKTsK
KyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpkaXYoKS5sb2NhbE5hbWVQ
dHIoKSwgJmRpdl9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVz
OjpkbCgpLmxvY2FsTmFtZVB0cigpLCAmZGxfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3Qu
aW5zZXJ0KEhUTUxOYW1lczo6ZmllbGRzZXQoKS5sb2NhbE5hbWVQdHIoKSwgJmZpZWxkU2V0X2lu
Zm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmZvbnQoKS5sb2Nh
bE5hbWVQdHIoKSwgJmZvbnRfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhU
TUxOYW1lczo6Zm9ybSgpLmxvY2FsTmFtZVB0cigpLCAmZm9ybV9pbmZvKTsKKyAgICAgICAgY2xh
c3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpmcmFtZSgpLmxvY2FsTmFtZVB0cigpLCAmZnJh
bWVfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6ZnJhbWVz
ZXQoKS5sb2NhbE5hbWVQdHIoKSwgJmZyYW1lU2V0X2luZm8pOworICAgICAgICBjbGFzc0luZm9E
aWN0Lmluc2VydChIVE1MTmFtZXM6OmgxKCkubG9jYWxOYW1lUHRyKCksICZoZWFkaW5nX2luZm8p
OworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmgyKCkubG9jYWxOYW1l
UHRyKCksICZoZWFkaW5nX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1M
TmFtZXM6OmgzKCkubG9jYWxOYW1lUHRyKCksICZoZWFkaW5nX2luZm8pOworICAgICAgICBjbGFz
c0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Omg0KCkubG9jYWxOYW1lUHRyKCksICZoZWFkaW5n
X2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Omg1KCkubG9j
YWxOYW1lUHRyKCksICZoZWFkaW5nX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2Vy
dChIVE1MTmFtZXM6Omg2KCkubG9jYWxOYW1lUHRyKCksICZoZWFkaW5nX2luZm8pOworICAgICAg
ICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmhlYWQoKS5sb2NhbE5hbWVQdHIoKSwg
JmhlYWRfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6aHIo
KS5sb2NhbE5hbWVQdHIoKSwgJmhyX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2Vy
dChIVE1MTmFtZXM6Omh0bWwoKS5sb2NhbE5hbWVQdHIoKSwgJmh0bWxfaW5mbyk7CisgICAgICAg
IGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6aWZyYW1lKCkubG9jYWxOYW1lUHRyKCks
ICZpRnJhbWVfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6
aW1nKCkubG9jYWxOYW1lUHRyKCksICZpbWdfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3Qu
aW5zZXJ0KEhUTUxOYW1lczo6aW5wdXQoKS5sb2NhbE5hbWVQdHIoKSwgJmlucHV0X2luZm8pOwor
ICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmlucygpLmxvY2FsTmFtZVB0
cigpLCAmbW9kX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6
OmlzaW5kZXgoKS5sb2NhbE5hbWVQdHIoKSwgJmlzSW5kZXhfaW5mbyk7CisgICAgICAgIGNsYXNz
SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6bGFiZWwoKS5sb2NhbE5hbWVQdHIoKSwgJmxhYmVs
X2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmxlZ2VuZCgp
LmxvY2FsTmFtZVB0cigpLCAmbGVnZW5kX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmlu
c2VydChIVE1MTmFtZXM6OmxpKCkubG9jYWxOYW1lUHRyKCksICZsaV9pbmZvKTsKKyAgICAgICAg
Y2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpsaW5rKCkubG9jYWxOYW1lUHRyKCksICZs
aW5rX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Om1hcCgp
LmxvY2FsTmFtZVB0cigpLCAmbWFwX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2Vy
dChIVE1MTmFtZXM6Om1hcnF1ZWUoKS5sb2NhbE5hbWVQdHIoKSwgJm1hcnF1ZWVfaW5mbyk7Cisg
ICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6bWVudSgpLmxvY2FsTmFtZVB0
cigpLCAmbWVudV9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVz
OjptZXRhKCkubG9jYWxOYW1lUHRyKCksICZtZXRhX2luZm8pOworICAgICAgICBjbGFzc0luZm9E
aWN0Lmluc2VydChIVE1MTmFtZXM6Om9iamVjdCgpLmxvY2FsTmFtZVB0cigpLCAmb2JqZWN0X2lu
Zm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Om9sKCkubG9jYWxO
YW1lUHRyKCksICZvbF9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5h
bWVzOjpvcHRpb24oKS5sb2NhbE5hbWVQdHIoKSwgJm9wdGlvbl9pbmZvKTsKKyAgICAgICAgY2xh
c3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpvcHRncm91cCgpLmxvY2FsTmFtZVB0cigpLCAm
b3B0R3JvdXBfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6
cCgpLmxvY2FsTmFtZVB0cigpLCAmcF9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNl
cnQoSFRNTE5hbWVzOjpwYXJhbSgpLmxvY2FsTmFtZVB0cigpLCAmcGFyYW1faW5mbyk7CisgICAg
ICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6cHJlKCkubG9jYWxOYW1lUHRyKCks
ICZwcmVfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6cSgp
LmxvY2FsTmFtZVB0cigpLCAmcV9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQo
SFRNTE5hbWVzOjpzY3JpcHQoKS5sb2NhbE5hbWVQdHIoKSwgJnNjcmlwdF9pbmZvKTsKKyAgICAg
ICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpzZWxlY3QoKS5sb2NhbE5hbWVQdHIo
KSwgJnNlbGVjdF9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVz
OjpzdHlsZSgpLmxvY2FsTmFtZVB0cigpLCAmc3R5bGVfaW5mbyk7CisgICAgICAgIGNsYXNzSW5m
b0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6dGFibGUoKS5sb2NhbE5hbWVQdHIoKSwgJnRhYmxlX2lu
Zm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OnRib2R5KCkubG9j
YWxOYW1lUHRyKCksICZ0YWJsZXNlY3Rpb25faW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3Qu
aW5zZXJ0KEhUTUxOYW1lczo6dGQoKS5sb2NhbE5hbWVQdHIoKSwgJnRhYmxlY2VsbF9pbmZvKTsK
KyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjp0ZXh0YXJlYSgpLmxvY2Fs
TmFtZVB0cigpLCAmdGV4dEFyZWFfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0
KEhUTUxOYW1lczo6dGgoKS5sb2NhbE5hbWVQdHIoKSwgJnRhYmxlY2VsbF9pbmZvKTsKKyAgICAg
ICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjp0aGVhZCgpLmxvY2FsTmFtZVB0cigp
LCAmdGFibGVzZWN0aW9uX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1M
TmFtZXM6OnRmb290KCkubG9jYWxOYW1lUHRyKCksICZ0YWJsZXNlY3Rpb25faW5mbyk7CisgICAg
ICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6dGl0bGUoKS5sb2NhbE5hbWVQdHIo
KSwgJnRpdGxlX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6
OnRyKCkubG9jYWxOYW1lUHRyKCksICZ0cl9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5p
bnNlcnQoSFRNTE5hbWVzOjp1bCgpLmxvY2FsTmFtZVB0cigpLCAmdWxfaW5mbyk7CisgICAgfQor
ICAgIAorICAgIEhUTUxFbGVtZW50SW1wbCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxFbGVt
ZW50SW1wbCo+KGltcGwoKSk7CisgICAgY29uc3QgQ2xhc3NJbmZvKiByZXN1bHQgPSBjbGFzc0lu
Zm9EaWN0LmZpbmQoZWxlbWVudC0+bG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSk7CisgICAg
aWYgKHJlc3VsdCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICByZXR1cm4gJmluZm87Ci0g
IH0KIH0KKworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6Omh0bWxf
Z2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6Omh0bWxHZXR0ZXIsICZIVE1MRWxlbWVudDo6aHRtbFNl
dHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmhlYWRf
Z2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmhlYWRHZXR0ZXIsICZIVE1MRWxlbWVudDo6aGVhZFNl
dHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6Omxpbmtf
Z2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmxpbmtHZXR0ZXIsICZIVE1MRWxlbWVudDo6bGlua1Nl
dHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OnRpdGxl
X2dldHNldCA9IHsgJkhUTUxFbGVtZW50Ojp0aXRsZUdldHRlciwgJkhUTUxFbGVtZW50Ojp0aXRs
ZVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6Om1l
dGFfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6Om1ldGFHZXR0ZXIsICZIVE1MRWxlbWVudDo6bWV0
YVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmJh
c2VfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmJhc2VHZXR0ZXIsICZIVE1MRWxlbWVudDo6YmFz
ZVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6Omlz
SW5kZXhfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmlzSW5kZXhHZXR0ZXIsICZIVE1MRWxlbWVu
dDo6aXNJbmRleFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVs
ZW1lbnQ6OnN0eWxlX2dldHNldCA9IHsgJkhUTUxFbGVtZW50OjpzdHlsZUdldHRlciwgJkhUTUxF
bGVtZW50OjpzdHlsZVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRN
TEVsZW1lbnQ6OmJvZHlfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmJvZHlHZXR0ZXIsICZIVE1M
RWxlbWVudDo6Ym9keVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRN
TEVsZW1lbnQ6OmZvcm1fZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmZvcm1HZXR0ZXIsICZIVE1M
RWxlbWVudDo6Zm9ybVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRN
TEVsZW1lbnQ6OnNlbGVjdF9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6c2VsZWN0R2V0dGVyLCAm
SFRNTEVsZW1lbnQ6OnNlbGVjdFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldElu
Zm8gSFRNTEVsZW1lbnQ6Om9wdEdyb3VwX2dldHNldCA9IHsgJkhUTUxFbGVtZW50OjpvcHRHcm91
cEdldHRlciwgJkhUTUxFbGVtZW50OjpvcHRHcm91cFNldHRlciB9OworY29uc3QgSFRNTEVsZW1l
bnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6Om9wdGlvbl9nZXRzZXQgPSB7ICZIVE1MRWxlbWVu
dDo6b3B0aW9uR2V0dGVyLCAmSFRNTEVsZW1lbnQ6Om9wdGlvblNldHRlciB9OworY29uc3QgSFRN
TEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmlucHV0X2dldHNldCA9IHsgJkhUTUxF
bGVtZW50OjppbnB1dEdldHRlciwgJkhUTUxFbGVtZW50OjppbnB1dFNldHRlciB9OworY29uc3Qg
SFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OnRleHRBcmVhX2dldHNldCA9IHsg
JkhUTUxFbGVtZW50Ojp0ZXh0QXJlYUdldHRlciwgJkhUTUxFbGVtZW50Ojp0ZXh0QXJlYVNldHRl
ciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmJ1dHRvbl9n
ZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6YnV0dG9uR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmJ1dHRv
blNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6Omxh
YmVsX2dldHNldCA9IHsgJkhUTUxFbGVtZW50OjpsYWJlbEdldHRlciwgJkhUTUxFbGVtZW50Ojps
YWJlbFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6
OmZpZWxkU2V0X2dldHNldCA9IHsgJkhUTUxFbGVtZW50OjpmaWVsZFNldEdldHRlciwgJkhUTUxF
bGVtZW50OjpmaWVsZFNldFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8g
SFRNTEVsZW1lbnQ6OmxlZ2VuZF9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6bGVnZW5kR2V0dGVy
LCAmSFRNTEVsZW1lbnQ6OmxlZ2VuZFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNl
dEluZm8gSFRNTEVsZW1lbnQ6OnVsX2dldHNldCA9IHsgJkhUTUxFbGVtZW50Ojp1TGlzdEdldHRl
ciwgJkhUTUxFbGVtZW50Ojp1TGlzdFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNl
dEluZm8gSFRNTEVsZW1lbnQ6Om9sX2dldHNldCA9IHsgJkhUTUxFbGVtZW50OjpvTGlzdEdldHRl
ciwgJkhUTUxFbGVtZW50OjpvTGlzdFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNl
dEluZm8gSFRNTEVsZW1lbnQ6OmRsX2dldHNldCA9IHsgJkhUTUxFbGVtZW50OjpkTGlzdEdldHRl
ciwgJkhUTUxFbGVtZW50OjpkTGlzdFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNl
dEluZm8gSFRNTEVsZW1lbnQ6OmRpcl9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6ZGlyR2V0dGVy
LCAmSFRNTEVsZW1lbnQ6OmRpclNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldElu
Zm8gSFRNTEVsZW1lbnQ6Om1lbnVfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6Om1lbnVHZXR0ZXIs
ICZIVE1MRWxlbWVudDo6bWVudVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldElu
Zm8gSFRNTEVsZW1lbnQ6OmxpX2dldHNldCA9IHsgJkhUTUxFbGVtZW50OjpsaUdldHRlciwgJkhU
TUxFbGVtZW50OjpsaVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRN
TEVsZW1lbnQ6OmRpdl9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6ZGl2R2V0dGVyLCAmSFRNTEVs
ZW1lbnQ6OmRpdlNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVs
ZW1lbnQ6OnBfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OnBhcmFncmFwaEdldHRlciwgJkhUTUxF
bGVtZW50OjpwYXJhZ3JhcGhTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZv
IEhUTUxFbGVtZW50OjpoZWFkaW5nX2dldHNldCA9IHsgJkhUTUxFbGVtZW50OjpoZWFkaW5nR2V0
dGVyLCAmSFRNTEVsZW1lbnQ6OmhlYWRpbmdTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpH
ZXRTZXRJbmZvIEhUTUxFbGVtZW50OjpibG9ja1F1b3RlX2dldHNldCA9IHsgJkhUTUxFbGVtZW50
OjpibG9ja1F1b3RlR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmJsb2NrUXVvdGVTZXR0ZXIgfTsKK2Nv
bnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjpxX2dldHNldCA9IHsgJkhU
TUxFbGVtZW50OjpxdW90ZUdldHRlciwgJkhUTUxFbGVtZW50OjpxdW90ZVNldHRlciB9OworY29u
c3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OnByZV9nZXRzZXQgPSB7ICZI
VE1MRWxlbWVudDo6cHJlR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OnByZVNldHRlciB9OworY29uc3Qg
SFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmJyX2dldHNldCA9IHsgJkhUTUxF
bGVtZW50OjpickdldHRlciwgJkhUTUxFbGVtZW50OjpiclNldHRlciB9OworY29uc3QgSFRNTEVs
ZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmJhc2VGb250X2dldHNldCA9IHsgJkhUTUxF
bGVtZW50OjpiYXNlRm9udEdldHRlciwgJkhUTUxFbGVtZW50OjpiYXNlRm9udFNldHRlciB9Owor
Y29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmZvbnRfZ2V0c2V0ID0g
eyAmSFRNTEVsZW1lbnQ6OmZvbnRHZXR0ZXIsICZIVE1MRWxlbWVudDo6Zm9udFNldHRlciB9Owor
Y29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmhyX2dldHNldCA9IHsg
JkhUTUxFbGVtZW50OjpockdldHRlciwgJkhUTUxFbGVtZW50OjpoclNldHRlciB9OworY29uc3Qg
SFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6Om1vZF9nZXRzZXQgPSB7ICZIVE1M
RWxlbWVudDo6bW9kR2V0dGVyLCAmSFRNTEVsZW1lbnQ6Om1vZFNldHRlciB9OworY29uc3QgSFRN
TEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmFfZ2V0c2V0ID0geyAmSFRNTEVsZW1l
bnQ6OmFuY2hvckdldHRlciwgJkhUTUxFbGVtZW50OjphbmNob3JTZXR0ZXIgfTsKK2NvbnN0IEhU
TUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjpjYW52YXNfZ2V0c2V0ID0geyAmSFRN
TEVsZW1lbnQ6OmNhbnZhc0dldHRlciwgJkhUTUxFbGVtZW50OjpjYW52YXNTZXR0ZXIgfTsKK2Nv
bnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjppbWdfZ2V0c2V0ID0geyAm
SFRNTEVsZW1lbnQ6OmltYWdlR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmltYWdlU2V0dGVyIH07Citj
b25zdCBIVE1MRWxlbWVudDo6R2V0U2V0SW5mbyBIVE1MRWxlbWVudDo6b2JqZWN0X2dldHNldCA9
IHsgJkhUTUxFbGVtZW50OjpvYmplY3RHZXR0ZXIsICZIVE1MRWxlbWVudDo6b2JqZWN0U2V0dGVy
IH07Citjb25zdCBIVE1MRWxlbWVudDo6R2V0U2V0SW5mbyBIVE1MRWxlbWVudDo6cGFyYW1fZ2V0
c2V0ID0geyAmSFRNTEVsZW1lbnQ6OnBhcmFtR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OnBhcmFtU2V0
dGVyIH07Citjb25zdCBIVE1MRWxlbWVudDo6R2V0U2V0SW5mbyBIVE1MRWxlbWVudDo6YXBwbGV0
X2dldHNldCA9IHsgJkhUTUxFbGVtZW50OjphcHBsZXRHZXR0ZXIsICZIVE1MRWxlbWVudDo6YXBw
bGV0U2V0dGVyIH07Citjb25zdCBIVE1MRWxlbWVudDo6R2V0U2V0SW5mbyBIVE1MRWxlbWVudDo6
bWFwX2dldHNldCA9IHsgJkhUTUxFbGVtZW50OjptYXBHZXR0ZXIsICZIVE1MRWxlbWVudDo6bWFw
U2V0dGVyIH07Citjb25zdCBIVE1MRWxlbWVudDo6R2V0U2V0SW5mbyBIVE1MRWxlbWVudDo6YXJl
YV9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6YXJlYUdldHRlciwgJkhUTUxFbGVtZW50OjphcmVh
U2V0dGVyIH07Citjb25zdCBIVE1MRWxlbWVudDo6R2V0U2V0SW5mbyBIVE1MRWxlbWVudDo6c2Ny
aXB0X2dldHNldCA9IHsgJkhUTUxFbGVtZW50OjpzY3JpcHRHZXR0ZXIsICZIVE1MRWxlbWVudDo6
c2NyaXB0U2V0dGVyIH07Citjb25zdCBIVE1MRWxlbWVudDo6R2V0U2V0SW5mbyBIVE1MRWxlbWVu
dDo6dGFibGVfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OnRhYmxlR2V0dGVyLCAmSFRNTEVsZW1l
bnQ6OnRhYmxlU2V0dGVyIH07Citjb25zdCBIVE1MRWxlbWVudDo6R2V0U2V0SW5mbyBIVE1MRWxl
bWVudDo6Y2FwdGlvbl9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6dGFibGVDYXB0aW9uR2V0dGVy
LCAmSFRNTEVsZW1lbnQ6OnRhYmxlQ2FwdGlvblNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6
OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmNvbF9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6dGFi
bGVDb2xHZXR0ZXIsICZIVE1MRWxlbWVudDo6dGFibGVDb2xTZXR0ZXIgfTsKK2NvbnN0IEhUTUxF
bGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50Ojp0YWJsZXNlY3Rpb25fZ2V0c2V0ID0geyAm
SFRNTEVsZW1lbnQ6OnRhYmxlU2VjdGlvbkdldHRlciwgJkhUTUxFbGVtZW50Ojp0YWJsZVNlY3Rp
b25TZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50Ojp0
cl9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6dGFibGVSb3dHZXR0ZXIsICZIVE1MRWxlbWVudDo6
dGFibGVSb3dTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVt
ZW50Ojp0YWJsZWNlbGxfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OnRhYmxlQ2VsbEdldHRlciwg
JkhUTUxFbGVtZW50Ojp0YWJsZUNlbGxTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRT
ZXRJbmZvIEhUTUxFbGVtZW50OjpmcmFtZVNldF9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6ZnJh
bWVTZXRHZXR0ZXIsICZIVE1MRWxlbWVudDo6ZnJhbWVTZXRTZXR0ZXIgfTsKK2NvbnN0IEhUTUxF
bGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjpmcmFtZV9nZXRzZXQgPSB7ICZIVE1MRWxl
bWVudDo6ZnJhbWVHZXR0ZXIsICZIVE1MRWxlbWVudDo6ZnJhbWVTZXR0ZXIgfTsKK2NvbnN0IEhU
TUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjppRnJhbWVfZ2V0c2V0ID0geyAmSFRN
TEVsZW1lbnQ6OmlGcmFtZUdldHRlciwgJkhUTUxFbGVtZW50OjppRnJhbWVTZXR0ZXIgfTsKK2Nv
bnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjptYXJxdWVlX2dldHNldCA9
IHsgJkhUTUxFbGVtZW50OjptYXJxdWVlR2V0dGVyLCAmSFRNTEVsZW1lbnQ6Om1hcnF1ZWVTZXR0
ZXIgfTsKKworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8qIEhUTUxFbGVtZW50OjpnZXRT
ZXRJbmZvKCkgY29uc3QKK3sKKyAgICAvLyBXZSBhbHJlYWR5IGtub3cgd2UgaGF2ZSBhbiBIVE1M
IGVsZW1lbnQsIHNvIHdlIG9ubHkgbmVlZCB0byBjb21wYXJlIHRoZSBsb2NhbE5hbWUgY29tcG9u
ZW50IG9mIHRoZSBxdWFsaWZpZWQgbmFtZS4KKyAgICBzdGF0aWMgUVB0ckRpY3Q8Y29uc3QgSFRN
TEVsZW1lbnQ6OkdldFNldEluZm8+IGdldFNldEluZm9EaWN0OworICAgIGlmIChnZXRTZXRJbmZv
RGljdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1l
czo6YSgpLmxvY2FsTmFtZVB0cigpLCAmYV9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGlj
dC5pbnNlcnQoSFRNTE5hbWVzOjphcHBsZXQoKS5sb2NhbE5hbWVQdHIoKSwgJmFwcGxldF9nZXRz
ZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjphcmVhKCkubG9j
YWxOYW1lUHRyKCksICZhcmVhX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2Vy
dChIVE1MTmFtZXM6OmJhc2UoKS5sb2NhbE5hbWVQdHIoKSwgJmJhc2VfZ2V0c2V0KTsKKyAgICAg
ICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6YmFzZWZvbnQoKS5sb2NhbE5hbWVQ
dHIoKSwgJmJhc2VGb250X2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChI
VE1MTmFtZXM6OmJsb2NrcXVvdGUoKS5sb2NhbE5hbWVQdHIoKSwgJmJsb2NrUXVvdGVfZ2V0c2V0
KTsgCisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmJvZHkoKS5sb2Nh
bE5hbWVQdHIoKSwgJmJvZHlfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0
KEhUTUxOYW1lczo6YnIoKS5sb2NhbE5hbWVQdHIoKSwgJmJyX2dldHNldCk7CisgICAgICAgIGdl
dFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmJ1dHRvbigpLmxvY2FsTmFtZVB0cigpLCAm
YnV0dG9uX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6
OmNhbnZhcygpLmxvY2FsTmFtZVB0cigpLCAmY2FudmFzX2dldHNldCk7CisgICAgICAgIGdldFNl
dEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmNhcHRpb24oKS5sb2NhbE5hbWVQdHIoKSwgJmNh
cHRpb25fZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6
Y29sKCkubG9jYWxOYW1lUHRyKCksICZjb2xfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0Rp
Y3QuaW5zZXJ0KEhUTUxOYW1lczo6Y29sZ3JvdXAoKS5sb2NhbE5hbWVQdHIoKSwgJmNvbF9nZXRz
ZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpkZWwoKS5sb2Nh
bE5hbWVQdHIoKSwgJm1vZF9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQo
SFRNTE5hbWVzOjpkaXIoKS5sb2NhbE5hbWVQdHIoKSwgJmRpcl9nZXRzZXQpOworICAgICAgICBn
ZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpkaXYoKS5sb2NhbE5hbWVQdHIoKSwgJmRp
dl9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpkbCgp
LmxvY2FsTmFtZVB0cigpLCAmZGxfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5z
ZXJ0KEhUTUxOYW1lczo6ZmllbGRzZXQoKS5sb2NhbE5hbWVQdHIoKSwgJmZpZWxkU2V0X2dldHNl
dCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmZvbnQoKS5sb2Nh
bE5hbWVQdHIoKSwgJmZvbnRfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0
KEhUTUxOYW1lczo6Zm9ybSgpLmxvY2FsTmFtZVB0cigpLCAmZm9ybV9nZXRzZXQpOworICAgICAg
ICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpmcmFtZSgpLmxvY2FsTmFtZVB0cigp
LCAmZnJhbWVfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1l
czo6ZnJhbWVzZXQoKS5sb2NhbE5hbWVQdHIoKSwgJmZyYW1lU2V0X2dldHNldCk7CisgICAgICAg
IGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmgxKCkubG9jYWxOYW1lUHRyKCksICZo
ZWFkaW5nX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6
OmgyKCkubG9jYWxOYW1lUHRyKCksICZoZWFkaW5nX2dldHNldCk7CisgICAgICAgIGdldFNldElu
Zm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmgzKCkubG9jYWxOYW1lUHRyKCksICZoZWFkaW5nX2dl
dHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Omg0KCkubG9j
YWxOYW1lUHRyKCksICZoZWFkaW5nX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmlu
c2VydChIVE1MTmFtZXM6Omg1KCkubG9jYWxOYW1lUHRyKCksICZoZWFkaW5nX2dldHNldCk7Cisg
ICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Omg2KCkubG9jYWxOYW1lUHRy
KCksICZoZWFkaW5nX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1M
TmFtZXM6OmhlYWQoKS5sb2NhbE5hbWVQdHIoKSwgJmhlYWRfZ2V0c2V0KTsKKyAgICAgICAgZ2V0
U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6aHIoKS5sb2NhbE5hbWVQdHIoKSwgJmhyX2dl
dHNldCk7IAorICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpodG1sKCku
bG9jYWxOYW1lUHRyKCksICZodG1sX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmlu
c2VydChIVE1MTmFtZXM6OmlmcmFtZSgpLmxvY2FsTmFtZVB0cigpLCAmaUZyYW1lX2dldHNldCk7
CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmltZygpLmxvY2FsTmFt
ZVB0cigpLCAmaW1nX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1M
TmFtZXM6OmlucHV0KCkubG9jYWxOYW1lUHRyKCksICZpbnB1dF9nZXRzZXQpOworICAgICAgICBn
ZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjppbnMoKS5sb2NhbE5hbWVQdHIoKSwgJm1v
ZF9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjppc2lu
ZGV4KCkubG9jYWxOYW1lUHRyKCksICZpc0luZGV4X2dldHNldCk7CisgICAgICAgIGdldFNldElu
Zm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmxhYmVsKCkubG9jYWxOYW1lUHRyKCksICZsYWJlbF9n
ZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpsZWdlbmQo
KS5sb2NhbE5hbWVQdHIoKSwgJmxlZ2VuZF9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGlj
dC5pbnNlcnQoSFRNTE5hbWVzOjpsaSgpLmxvY2FsTmFtZVB0cigpLCAmbGlfZ2V0c2V0KTsKKyAg
ICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6bGluaygpLmxvY2FsTmFtZVB0
cigpLCAmbGlua19nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5h
bWVzOjptYXAoKS5sb2NhbE5hbWVQdHIoKSwgJm1hcF9nZXRzZXQpOworICAgICAgICBnZXRTZXRJ
bmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjptYXJxdWVlKCkubG9jYWxOYW1lUHRyKCksICZtYXJx
dWVlX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Om1l
bnUoKS5sb2NhbE5hbWVQdHIoKSwgJm1lbnVfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0Rp
Y3QuaW5zZXJ0KEhUTUxOYW1lczo6bWV0YSgpLmxvY2FsTmFtZVB0cigpLCAmbWV0YV9nZXRzZXQp
OworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpvYmplY3QoKS5sb2Nh
bE5hbWVQdHIoKSwgJm9iamVjdF9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNl
cnQoSFRNTE5hbWVzOjpvbCgpLmxvY2FsTmFtZVB0cigpLCAmb2xfZ2V0c2V0KTsKKyAgICAgICAg
Z2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6b3B0aW9uKCkubG9jYWxOYW1lUHRyKCks
ICZvcHRpb25fZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1l
czo6b3B0Z3JvdXAoKS5sb2NhbE5hbWVQdHIoKSwgJm9wdEdyb3VwX2dldHNldCk7CisgICAgICAg
IGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OnAoKS5sb2NhbE5hbWVQdHIoKSwgJnBf
Z2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6cGFyYW0o
KS5sb2NhbE5hbWVQdHIoKSwgJnBhcmFtX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0
Lmluc2VydChIVE1MTmFtZXM6OnByZSgpLmxvY2FsTmFtZVB0cigpLCAmcHJlX2dldHNldCk7Cisg
ICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OnEoKS5sb2NhbE5hbWVQdHIo
KSwgJnFfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6
c2NyaXB0KCkubG9jYWxOYW1lUHRyKCksICZzY3JpcHRfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0
SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6c2VsZWN0KCkubG9jYWxOYW1lUHRyKCksICZzZWxl
Y3RfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6c3R5
bGUoKS5sb2NhbE5hbWVQdHIoKSwgJnN0eWxlX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9E
aWN0Lmluc2VydChIVE1MTmFtZXM6OnRhYmxlKCkubG9jYWxOYW1lUHRyKCksICZ0YWJsZV9nZXRz
ZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjp0Ym9keSgpLmxv
Y2FsTmFtZVB0cigpLCAmdGFibGVzZWN0aW9uX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9E
aWN0Lmluc2VydChIVE1MTmFtZXM6OnRkKCkubG9jYWxOYW1lUHRyKCksICZ0YWJsZWNlbGxfZ2V0
c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6dGV4dGFyZWEo
KS5sb2NhbE5hbWVQdHIoKSwgJnRleHRBcmVhX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9E
aWN0Lmluc2VydChIVE1MTmFtZXM6OnRoKCkubG9jYWxOYW1lUHRyKCksICZ0YWJsZWNlbGxfZ2V0
c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6dGhlYWQoKS5s
b2NhbE5hbWVQdHIoKSwgJnRhYmxlc2VjdGlvbl9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZv
RGljdC5pbnNlcnQoSFRNTE5hbWVzOjp0Zm9vdCgpLmxvY2FsTmFtZVB0cigpLCAmdGFibGVzZWN0
aW9uX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OnRp
dGxlKCkubG9jYWxOYW1lUHRyKCksICZ0aXRsZV9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZv
RGljdC5pbnNlcnQoSFRNTE5hbWVzOjp0cigpLmxvY2FsTmFtZVB0cigpLCAmdHJfZ2V0c2V0KTsK
KyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6dWwoKS5sb2NhbE5hbWVQ
dHIoKSwgJnVsX2dldHNldCk7CisgICAgfQorICAgIAorICAgIEhUTUxFbGVtZW50SW1wbCogZWxl
bWVudCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgY29uc3Qg
SFRNTEVsZW1lbnQ6OkdldFNldEluZm8qIHJlc3VsdCA9IGdldFNldEluZm9EaWN0LmZpbmQoZWxl
bWVudC0+bG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSk7CisgICAgaWYgKHJlc3VsdCkKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gMDsKK30KKwogLyoKIEBiZWdpbiBIVE1M
RWxlbWVudFRhYmxlIDE0CiAgIGlkCQlLSlM6OkhUTUxFbGVtZW50OjpFbGVtZW50SWQJRG9udERl
bGV0ZQpAQCAtMTE4NiwzNSArMTI3MiwzMiBAQCBIVE1MRWxlbWVudDo6SFRNTEVsZW1lbnQoRXhl
Y1N0YXRlICpleGVjCiAKIFZhbHVlIEtKUzo6SFRNTEVsZW1lbnQ6OnRyeUdldChFeGVjU3RhdGUg
KmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSkgY29uc3QKIHsKLSAgSFRNTEVs
ZW1lbnRJbXBsICZlbGVtZW50ID0gKnN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCAqPihpbXBs
KCkpOworICAgIEhUTUxFbGVtZW50SW1wbCAmZWxlbWVudCA9ICpzdGF0aWNfY2FzdDxIVE1MRWxl
bWVudEltcGwgKj4oaW1wbCgpKTsKICNpZmRlZiBLSlNfVkVSQk9TRQotICBrZERlYnVnKDYwNzAp
IDw8ICJLSlM6OkhUTUxFbGVtZW50Ojp0cnlHZXQgIiA8PCBwcm9wZXJ0eU5hbWUucXN0cmluZygp
IDw8ICIgdGhpc1RhZz0iIDw8IGVsZW1lbnQudGFnTmFtZSgpLnN0cmluZygpIDw8IGVuZGw7Cisg
ICAga2REZWJ1Zyg2MDcwKSA8PCAiS0pTOjpIVE1MRWxlbWVudDo6dHJ5R2V0ICIgPDwgcHJvcGVy
dHlOYW1lLnFzdHJpbmcoKSA8PCAiIHRoaXNUYWc9IiA8PCBlbGVtZW50LnRhZ05hbWUoKS5zdHJp
bmcoKSA8PCBlbmRsOwogI2VuZGlmCi0gIC8vIEZpcnN0IGxvb2sgYXQgZHluYW1pYyBwcm9wZXJ0
aWVzCi0gIHN3aXRjaCAoZWxlbWVudC5pZCgpKSB7Ci0gICAgY2FzZSBJRF9GT1JNOiB7Ci0gICAg
ICBIVE1MRm9ybUVsZW1lbnRJbXBsICZmb3JtID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50
SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIC8vIENoZWNrIGlmIHdlJ3JlIHJldHJpZXZpbmcgYW4g
ZWxlbWVudCAoYnkgaW5kZXggb3IgYnkgbmFtZSkKLSAgICAgIGJvb2wgb2s7Ci0gICAgICB1aW50
IHUgPSBwcm9wZXJ0eU5hbWUudG9VTG9uZygmb2spOwotICAgICAgaWYgKG9rKQotICAgICAgICBy
ZXR1cm4gZ2V0RE9NTm9kZShleGVjLCBmb3JtLmVsZW1lbnRzKCktPml0ZW0odSkpOwotICAgICAg
VmFsdWVJbXAgKm5hbWVkSXRlbXMgPSBIVE1MQ29sbGVjdGlvbihleGVjLCBmb3JtLmVsZW1lbnRz
KCkuZ2V0KCkpLmdldE5hbWVkSXRlbXMoZXhlYywgcHJvcGVydHlOYW1lKTsKLSAgICAgIGlmICgh
bmFtZWRJdGVtcy0+aXNVbmRlZmluZWQoKSkKLSAgICAgICAgcmV0dXJuIG5hbWVkSXRlbXM7Ci0g
ICAgfQotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9TRUxFQ1Q6IHsKLSAgICAgIEhUTUxTZWxl
Y3RFbGVtZW50SW1wbCAmc2VsZWN0ID0gc3RhdGljX2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnRJbXBs
ICY+KGVsZW1lbnQpOwotICAgICAgYm9vbCBvazsKLSAgICAgIHVpbnQgdSA9IHByb3BlcnR5TmFt
ZS50b1VMb25nKCZvayk7Ci0gICAgICBpZiAob2spCi0gICAgICAgIHJldHVybiBnZXRET01Ob2Rl
KGV4ZWMsIHNlbGVjdC5vcHRpb25zSFRNTENvbGxlY3Rpb24oKS0+aXRlbSh1KSk7IC8vIG5vdCBz
cGVjaWZpZWQgYnkgRE9NKD8pIGJ1dCBzdXBwb3J0ZWQgaW4gbmV0c2NhcGUvSUUKKyAgICAvLyBG
aXJzdCBsb29rIGF0IGR5bmFtaWMgcHJvcGVydGllcworICAgIGlmIChlbGVtZW50Lmhhc0xvY2Fs
TmFtZShIVE1MTmFtZXM6OmZvcm0oKSkpIHsKKyAgICAgICAgSFRNTEZvcm1FbGVtZW50SW1wbCAm
Zm9ybSA9IHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAg
ICAgIC8vIENoZWNrIGlmIHdlJ3JlIHJldHJpZXZpbmcgYW4gZWxlbWVudCAoYnkgaW5kZXggb3Ig
YnkgbmFtZSkKKyAgICAgICAgYm9vbCBvazsKKyAgICAgICAgdWludCB1ID0gcHJvcGVydHlOYW1l
LnRvVUxvbmcoJm9rKTsKKyAgICAgICAgaWYgKG9rKQorICAgICAgICAgICAgcmV0dXJuIGdldERP
TU5vZGUoZXhlYywgZm9ybS5lbGVtZW50cygpLT5pdGVtKHUpKTsKKyAgICAgICAgVmFsdWVJbXAg
Km5hbWVkSXRlbXMgPSBIVE1MQ29sbGVjdGlvbihleGVjLCBmb3JtLmVsZW1lbnRzKCkuZ2V0KCkp
LmdldE5hbWVkSXRlbXMoZXhlYywgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgaWYgKCFuYW1lZEl0
ZW1zLT5pc1VuZGVmaW5lZCgpKQorICAgICAgICAgICAgcmV0dXJuIG5hbWVkSXRlbXM7CisgICAg
fQorICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6c2VsZWN0KCkp
KSB7CisgICAgICAgIEhUTUxTZWxlY3RFbGVtZW50SW1wbCAmc2VsZWN0ID0gc3RhdGljX2Nhc3Q8
SFRNTFNlbGVjdEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgICAgICBib29sIG9rOworICAg
ICAgICB1aW50IHUgPSBwcm9wZXJ0eU5hbWUudG9VTG9uZygmb2spOworICAgICAgICBpZiAob2sp
CisgICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLCBzZWxlY3Qub3B0aW9uc0hUTUxD
b2xsZWN0aW9uKCktPml0ZW0odSkpOyAvLyBub3Qgc3BlY2lmaWVkIGJ5IERPTSg/KSBidXQgc3Vw
cG9ydGVkIGluIG5ldHNjYXBlL0lFCiAgICAgfQotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9G
UkFNRVNFVDogeworICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6
ZnJhbWVzZXQoKSkpIHsKICAgICAgICAgTm9kZUltcGwgKmZyYW1lID0gZWxlbWVudC5jaGlsZHJl
bigpLT5uYW1lZEl0ZW0ocHJvcGVydHlOYW1lLnN0cmluZygpKTsKLSAgICAgICAgaWYgKGZyYW1l
ICYmIGZyYW1lLT5pZCgpID09IElEX0ZSQU1FKSB7CisgICAgICAgIGlmIChmcmFtZSAmJiBmcmFt
ZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZyYW1lKCkpKSB7CiAgICAgICAgICAgICBEb2N1bWVu
dEltcGwqIGRvYyA9IHN0YXRpY19jYXN0PEhUTUxGcmFtZUVsZW1lbnRJbXBsICo+KGZyYW1lKS0+
Y29udGVudERvY3VtZW50KCk7CiAgICAgICAgICAgICBpZiAoZG9jKSB7CiAgICAgICAgICAgICAg
ICAgS0hUTUxQYXJ0KiBwYXJ0ID0gZG9jLT5wYXJ0KCk7CkBAIC0xMjI3LDczICsxMzEwLDU3IEBA
IFZhbHVlIEtKUzo6SFRNTEVsZW1lbnQ6OnRyeUdldChFeGVjU3RhdGUKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQogICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9GUkFNRToKLSAg
ICBjYXNlIElEX0lGUkFNRTogeworICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFzTG9jYWxOYW1lKEhU
TUxOYW1lczo6ZnJhbWUoKSkgfHwgZWxlbWVudC5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjppZnJh
bWUoKSkpIHsKICAgICAgICAgRG9jdW1lbnRJbXBsKiBkb2MgPSBzdGF0aWNfY2FzdDxIVE1MRnJh
bWVFbGVtZW50SW1wbCAmPihlbGVtZW50KS5jb250ZW50RG9jdW1lbnQoKTsKLSAgICAgICAgaWYg
KCBkb2MgKSB7CisgICAgICAgIGlmIChkb2MpIHsKICAgICAgICAgICAgIEtIVE1MUGFydCogcGFy
dCA9IGRvYy0+cGFydCgpOwotICAgICAgICAgICAgaWYgKCBwYXJ0ICkgeworICAgICAgICAgICAg
aWYgKHBhcnQpIHsKICAgICAgICAgICAgICAgV2luZG93ICp3aW5kb3cgPSBXaW5kb3c6OnJldHJp
ZXZlV2luZG93KHBhcnQpOwogCSAgICAgIGlmICh3aW5kb3cgJiYgd2luZG93LT5oYXNQcm9wZXJ0
eShleGVjLCBwcm9wZXJ0eU5hbWUpKQogICAgICAgICAgICAgICAgIHJldHVybiB3aW5kb3ctPmdl
dChleGVjLCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQot
ICAgICAgYnJlYWs7CiAjaWYgQVBQTEVfQ0hBTkdFUwotICAgIGNhc2UgSURfRU1CRUQ6Ci0gICAg
Y2FzZSBJRF9PQkpFQ1Q6Ci0gICAgY2FzZSBJRF9BUFBMRVQ6IHsKLQlpZiAocHJvcGVydHlOYW1l
ID09ICJfX2FwcGxlX3J1bnRpbWVfb2JqZWN0IikgeworICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFz
TG9jYWxOYW1lKEhUTUxOYW1lczo6ZW1iZWQoKSkgfHwgZWxlbWVudC5oYXNMb2NhbE5hbWUoSFRN
TE5hbWVzOjpvYmplY3QoKSkgfHwKKyAgICAgICAgICAgICBlbGVtZW50Lmhhc0xvY2FsTmFtZShI
VE1MTmFtZXM6OmFwcGxldCgpKSkgeworCWlmIChwcm9wZXJ0eU5hbWUgPT0gIl9fYXBwbGVfcnVu
dGltZV9vYmplY3QiKQogCSAgICByZXR1cm4gZ2V0UnVudGltZU9iamVjdChleGVjLCZlbGVtZW50
KTsKLQl9Ci0KIAlWYWx1ZSBydW50aW1lT2JqZWN0ID0gZ2V0UnVudGltZU9iamVjdChleGVjLCZl
bGVtZW50KTsKIAlpZiAoIXJ1bnRpbWVPYmplY3QuaXNOdWxsKCkpIHsKIAkgICAgT2JqZWN0SW1w
ICppbXAgPSBzdGF0aWNfY2FzdDxPYmplY3RJbXAgKj4ocnVudGltZU9iamVjdC5pbXAoKSk7Ci0J
ICAgIGlmIChpbXAtPmhhc1Byb3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFtZSkpIHsKKwkgICAgaWYg
KGltcC0+aGFzUHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lKSkKIAkJcmV0dXJuIGltcC0+Z2V0
IChleGVjLCBwcm9wZXJ0eU5hbWUpOwotCSAgICB9CiAJfQogICAgIH0KLSAgICAgIGJyZWFrOwog
I2VuZGlmCi0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQogCi0gIGNvbnN0IEhh
c2hUYWJsZSogdGFibGUgPSBjbGFzc0luZm8oKS0+cHJvcEhhc2hUYWJsZTsgLy8gZ2V0IHRoZSBy
aWdodCBoYXNodGFibGUKLSAgY29uc3QgSGFzaEVudHJ5KiBlbnRyeSA9IExvb2t1cDo6ZmluZEVu
dHJ5KHRhYmxlLCBwcm9wZXJ0eU5hbWUpOwotICBpZiAoZW50cnkpIHsKLSAgICBpZiAoZW50cnkt
PmF0dHIgJiBGdW5jdGlvbikKLSAgICAgIHJldHVybiBsb29rdXBPckNyZWF0ZUZ1bmN0aW9uPEtK
Uzo6SFRNTEVsZW1lbnRGdW5jdGlvbj4oZXhlYywgcHJvcGVydHlOYW1lLCB0aGlzLCBlbnRyeS0+
dmFsdWUsIGVudHJ5LT5wYXJhbXMsIGVudHJ5LT5hdHRyKTsKLSAgICByZXR1cm4gZ2V0VmFsdWVQ
cm9wZXJ0eShleGVjLCBlbnRyeS0+dmFsdWUpOwotICB9CisgICAgY29uc3QgSGFzaFRhYmxlKiB0
YWJsZSA9IGNsYXNzSW5mbygpLT5wcm9wSGFzaFRhYmxlOyAvLyBnZXQgdGhlIHJpZ2h0IGhhc2h0
YWJsZQorICAgIGNvbnN0IEhhc2hFbnRyeSogZW50cnkgPSBMb29rdXA6OmZpbmRFbnRyeSh0YWJs
ZSwgcHJvcGVydHlOYW1lKTsKKyAgICBpZiAoZW50cnkpIHsKKyAgICAgICAgaWYgKGVudHJ5LT5h
dHRyICYgRnVuY3Rpb24pCisgICAgICAgICAgICByZXR1cm4gbG9va3VwT3JDcmVhdGVGdW5jdGlv
bjxLSlM6OkhUTUxFbGVtZW50RnVuY3Rpb24+KGV4ZWMsIHByb3BlcnR5TmFtZSwgdGhpcywgZW50
cnktPnZhbHVlLCBlbnRyeS0+cGFyYW1zLCBlbnRyeS0+YXR0cik7CisgICAgICAgIHJldHVybiBn
ZXRWYWx1ZVByb3BlcnR5KGV4ZWMsIGVudHJ5LT52YWx1ZSk7CisgICAgfQogCi0gIC8vIEJhc2Ug
SFRNTEVsZW1lbnQgc3R1ZmYgb3IgcGFyZW50IGNsYXNzIGZvcndhcmQsIGFzIHVzdWFsCi0gIHJl
dHVybiBET01PYmplY3RMb29rdXBHZXQ8S0pTOjpIVE1MRWxlbWVudEZ1bmN0aW9uLCBLSlM6OkhU
TUxFbGVtZW50LCBET01FbGVtZW50PihleGVjLCBwcm9wZXJ0eU5hbWUsICZIVE1MRWxlbWVudFRh
YmxlLCB0aGlzKTsKKyAgICAvLyBCYXNlIEhUTUxFbGVtZW50IHN0dWZmIG9yIHBhcmVudCBjbGFz
cyBmb3J3YXJkLCBhcyB1c3VhbAorICAgIHJldHVybiBET01PYmplY3RMb29rdXBHZXQ8S0pTOjpI
VE1MRWxlbWVudEZ1bmN0aW9uLCBLSlM6OkhUTUxFbGVtZW50LCBET01FbGVtZW50PihleGVjLCBw
cm9wZXJ0eU5hbWUsICZIVE1MRWxlbWVudFRhYmxlLCB0aGlzKTsKIH0KIAogYm9vbCBLSlM6OkhU
TUxFbGVtZW50OjppbXBsZW1lbnRzQ2FsbCgpIGNvbnN0CiB7CiAgICAgSFRNTEVsZW1lbnRJbXBs
ICplbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KGltcGwoKSk7Ci0gICAg
c3dpdGNoIChlbGVtZW50LT5pZCgpKSB7Ci0JY2FzZSBJRF9FTUJFRDoKLQljYXNlIElEX09CSkVD
VDoKLQljYXNlIElEX0FQUExFVDogewotCQlEb2N1bWVudEltcGwqIGRvYyA9IGVsZW1lbnQtPmdl
dERvY3VtZW50KCk7Ci0JCUtKU1Byb3h5ICpwcm94eSA9IEtKU1Byb3h5Ojpwcm94eShkb2MtPnBh
cnQoKSk7Ci0JCUV4ZWNTdGF0ZSAqZXhlYyA9IHByb3h5LT5pbnRlcnByZXRlcigpLT5nbG9iYWxF
eGVjKCk7Ci0JCVZhbHVlIHJ1bnRpbWVPYmplY3QgPSBnZXRSdW50aW1lT2JqZWN0KGV4ZWMsZWxl
bWVudCk7Ci0JCWlmICghcnVudGltZU9iamVjdC5pc051bGwoKSkgewotCQkgICAgT2JqZWN0SW1w
ICppbXAgPSBzdGF0aWNfY2FzdDxPYmplY3RJbXAgKj4ocnVudGltZU9iamVjdC5pbXAoKSk7Ci0J
CSAgICByZXR1cm4gaW1wLT5pbXBsZW1lbnRzQ2FsbCAoKTsKLQkJfQotCSAgICB9Ci0JICAgIGJy
ZWFrOwotCWRlZmF1bHQ6Ci0JICAgIGJyZWFrOworICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6ZW1iZWQoKSkgfHwKKyAgICAgICAgZWxlbWVudC0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6Om9iamVjdCgpKSB8fAorICAgICAgICBlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6YXBwbGV0KCkpKSB7CisgICAJRG9jdW1lbnRJbXBsKiBkb2MgPSBlbGVtZW50LT5nZXREb2N1
bWVudCgpOworICAgICAgICBLSlNQcm94eSAqcHJveHkgPSBLSlNQcm94eTo6cHJveHkoZG9jLT5w
YXJ0KCkpOworICAgICAgICBFeGVjU3RhdGUgKmV4ZWMgPSBwcm94eS0+aW50ZXJwcmV0ZXIoKS0+
Z2xvYmFsRXhlYygpOworICAgICAgICBWYWx1ZSBydW50aW1lT2JqZWN0ID0gZ2V0UnVudGltZU9i
amVjdChleGVjLGVsZW1lbnQpOworICAgICAgICBpZiAoIXJ1bnRpbWVPYmplY3QuaXNOdWxsKCkp
IHsKKyAgICAgICAgICAgIE9iamVjdEltcCAqaW1wID0gc3RhdGljX2Nhc3Q8T2JqZWN0SW1wICo+
KHJ1bnRpbWVPYmplY3QuaW1wKCkpOworICAgICAgICAgICAgcmV0dXJuIGltcC0+aW1wbGVtZW50
c0NhbGwgKCk7CisgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtMTMw
MSwyNjMgKzEzNjgsMzQ5IEBAIGJvb2wgS0pTOjpIVE1MRWxlbWVudDo6aW1wbGVtZW50c0NhbGwo
KSAKIFZhbHVlIEtKUzo6SFRNTEVsZW1lbnQ6OmNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3Qg
JnRoaXNPYmosIGNvbnN0IExpc3QmYXJncykKIHsKICAgICBIVE1MRWxlbWVudEltcGwgKmVsZW1l
bnQgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwgKj4oaW1wbCgpKTsKLSAgICBzd2l0Y2gg
KGVsZW1lbnQtPmlkKCkpIHsKLQljYXNlIElEX0VNQkVEOgotCWNhc2UgSURfT0JKRUNUOgotCWNh
c2UgSURfQVBQTEVUOiB7Ci0JCVZhbHVlIHJ1bnRpbWVPYmplY3QgPSBnZXRSdW50aW1lT2JqZWN0
KGV4ZWMsZWxlbWVudCk7Ci0JCWlmICghcnVudGltZU9iamVjdC5pc051bGwoKSkgewotCQkgICAg
T2JqZWN0SW1wICppbXAgPSBzdGF0aWNfY2FzdDxPYmplY3RJbXAgKj4ocnVudGltZU9iamVjdC5p
bXAoKSk7Ci0JCSAgICByZXR1cm4gaW1wLT5jYWxsIChleGVjLCB0aGlzT2JqLCBhcmdzKTsKLQkJ
fQotCSAgICB9Ci0JICAgIGJyZWFrOwotCWRlZmF1bHQ6Ci0JICAgIGJyZWFrOworICAgIGlmIChl
bGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZW1iZWQoKSkgfHwKKyAgICAgICAgZWxlbWVu
dC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9iamVjdCgpKSB8fAorICAgICAgICBlbGVtZW50LT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6YXBwbGV0KCkpKSB7CisgICAgICAgIFZhbHVlIHJ1bnRpbWVP
YmplY3QgPSBnZXRSdW50aW1lT2JqZWN0KGV4ZWMsZWxlbWVudCk7CisgICAgICAgIGlmICghcnVu
dGltZU9iamVjdC5pc051bGwoKSkgeworICAgICAgICAgICAgT2JqZWN0SW1wICppbXAgPSBzdGF0
aWNfY2FzdDxPYmplY3RJbXAgKj4ocnVudGltZU9iamVjdC5pbXAoKSk7CisgICAgICAgICAgICBy
ZXR1cm4gaW1wLT5jYWxsIChleGVjLCB0aGlzT2JqLCBhcmdzKTsKKyAgICAgICAgfQogICAgIH0K
ICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLVZhbHVlIEtKUzo6SFRNTEVsZW1lbnQ6Omdl
dFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZSBI
VE1MRWxlbWVudDo6aHRtbEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QK
IHsKLSAgSFRNTEVsZW1lbnRJbXBsICZlbGVtZW50ID0gKnN0YXRpY19jYXN0PEhUTUxFbGVtZW50
SW1wbCAqPihpbXBsKCkpOwotICBzd2l0Y2ggKGVsZW1lbnQuaWQoKSkgewotICBjYXNlIElEX0hU
TUw6IHsKLSAgICBIVE1MSHRtbEVsZW1lbnRJbXBsICZodG1sID0gc3RhdGljX2Nhc3Q8SFRNTEh0
bWxFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICBpZiAgICAgICh0b2tlbiA9PSBIdG1sVmVy
c2lvbikgICAgICAgICByZXR1cm4gU3RyaW5nKGh0bWwudmVyc2lvbigpKTsKLSAgfQotICBicmVh
azsKLSAgY2FzZSBJRF9IRUFEOiB7Ci0gICAgSFRNTEhlYWRFbGVtZW50SW1wbCAmaGVhZCA9IHN0
YXRpY19jYXN0PEhUTUxIZWFkRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgaWYgICAgICAo
dG9rZW4gPT0gSGVhZFByb2ZpbGUpICAgICAgICAgcmV0dXJuIFN0cmluZyhoZWFkLnByb2ZpbGUo
KSk7Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfTElOSzogewotICAgIEhUTUxMaW5rRWxlbWVu
dEltcGwgJmxpbmsgPSBzdGF0aWNfY2FzdDxIVE1MTGlua0VsZW1lbnRJbXBsICY+KGVsZW1lbnQp
OwotICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIExpbmtEaXNhYmxlZDogICAgICAgIHJl
dHVybiBCb29sZWFuKGxpbmsuZGlzYWJsZWQoKSk7Ci0gICAgY2FzZSBMaW5rQ2hhcnNldDogICAg
ICAgICByZXR1cm4gU3RyaW5nKGxpbmsuY2hhcnNldCgpKTsKLSAgICBjYXNlIExpbmtIcmVmOiAg
ICAgICAgICAgIHJldHVybiBTdHJpbmcobGluay5ocmVmKCkpOwotICAgIGNhc2UgTGlua0hyZWZM
YW5nOiAgICAgICAgcmV0dXJuIFN0cmluZyhsaW5rLmhyZWZsYW5nKCkpOwotICAgIGNhc2UgTGlu
a01lZGlhOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhsaW5rLm1lZGlhKCkpOwotICAgIGNhc2Ug
TGlua1JlbDogICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhsaW5rLnJlbCgpKTsKLSAgICBjYXNl
IExpbmtSZXY6ICAgICAgICAgICAgIHJldHVybiBTdHJpbmcobGluay5yZXYoKSk7Ci0gICAgY2Fz
ZSBMaW5rVGFyZ2V0OiAgICAgICAgICByZXR1cm4gU3RyaW5nKGxpbmsudGFyZ2V0KCkpOwotICAg
IGNhc2UgTGlua1R5cGU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhsaW5rLnR5cGUoKSk7Ci0g
ICAgY2FzZSBMaW5rU2hlZXQ6ICAgICAgICAgICByZXR1cm4gZ2V0RE9NU3R5bGVTaGVldChleGVj
LCBsaW5rLnNoZWV0KCkpOwotICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9USVRMRTog
ewotICAgIEhUTUxUaXRsZUVsZW1lbnRJbXBsICZ0aXRsZSA9IHN0YXRpY19jYXN0PEhUTUxUaXRs
ZUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNl
IFRpdGxlVGV4dDogICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcodGl0bGUudGV4dCgpKTsK
LSAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfTUVUQTogewotICAgIEhUTUxNZXRhRWxl
bWVudEltcGwgJm1ldGEgPSBzdGF0aWNfY2FzdDxIVE1MTWV0YUVsZW1lbnRJbXBsICY+KGVsZW1l
bnQpOworICAgIEhUTUxIdG1sRWxlbWVudEltcGwmIGh0bWwgPSAqc3RhdGljX2Nhc3Q8SFRNTEh0
bWxFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IEh0bWxWZXJzaW9uKQor
ICAgICAgICByZXR1cm4gU3RyaW5nKGh0bWwudmVyc2lvbigpKTsKKyAgICByZXR1cm4gVW5kZWZp
bmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50OjpoZWFkR2V0dGVyKEV4ZWNTdGF0ZSogZXhl
YywgaW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxIZWFkRWxlbWVudEltcGwgJmhlYWQgPSAq
c3RhdGljX2Nhc3Q8SFRNTEhlYWRFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2Vu
ID09IEhlYWRQcm9maWxlKQorICAgICAgICByZXR1cm4gU3RyaW5nKGhlYWQucHJvZmlsZSgpKTsK
KyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50OjpsaW5rR2V0
dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxMaW5rRWxl
bWVudEltcGwgJmxpbmsgPSAqc3RhdGljX2Nhc3Q8SFRNTExpbmtFbGVtZW50SW1wbCo+KGltcGwo
KSk7CiAgICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgTWV0YUNvbnRlbnQ6ICAgICAgICAg
cmV0dXJuIFN0cmluZyhtZXRhLmNvbnRlbnQoKSk7Ci0gICAgY2FzZSBNZXRhSHR0cEVxdWl2OiAg
ICAgICByZXR1cm4gU3RyaW5nKG1ldGEuaHR0cEVxdWl2KCkpOwotICAgIGNhc2UgTWV0YU5hbWU6
ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhtZXRhLm5hbWUoKSk7Ci0gICAgY2FzZSBNZXRhU2No
ZW1lOiAgICAgICAgICByZXR1cm4gU3RyaW5nKG1ldGEuc2NoZW1lKCkpOworICAgICAgICBjYXNl
IExpbmtEaXNhYmxlZDoKKyAgICAgICAgICAgIHJldHVybiBCb29sZWFuKGxpbmsuZGlzYWJsZWQo
KSk7CisgICAgICAgIGNhc2UgTGlua0NoYXJzZXQ6CisgICAgICAgICAgICByZXR1cm4gU3RyaW5n
KGxpbmsuY2hhcnNldCgpKTsKKyAgICAgICAgY2FzZSBMaW5rSHJlZjoKKyAgICAgICAgICAgIHJl
dHVybiBTdHJpbmcobGluay5ocmVmKCkpOworICAgICAgICBjYXNlIExpbmtIcmVmTGFuZzoKKyAg
ICAgICAgICAgIHJldHVybiBTdHJpbmcobGluay5ocmVmbGFuZygpKTsKKyAgICAgICAgY2FzZSBM
aW5rTWVkaWE6ICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcobGluay5tZWRp
YSgpKTsKKyAgICAgICAgY2FzZSBMaW5rUmVsOiAgICAgICAgICAgICAKKyAgICAgICAgICAgIHJl
dHVybiBTdHJpbmcobGluay5yZWwoKSk7CisgICAgICAgIGNhc2UgTGlua1JldjogICAgICAgICAg
ICAKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcobGluay5yZXYoKSk7CisgICAgICAgIGNhc2Ug
TGlua1RhcmdldDogICAgICAgICAgCisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGxpbmsudGFy
Z2V0KCkpOworICAgICAgICBjYXNlIExpbmtUeXBlOiAgICAgICAgICAgIAorICAgICAgICAgICAg
cmV0dXJuIFN0cmluZyhsaW5rLnR5cGUoKSk7CisgICAgICAgIGNhc2UgTGlua1NoZWV0OiAgICAg
ICAgICAgCisgICAgICAgICAgICByZXR1cm4gZ2V0RE9NU3R5bGVTaGVldChleGVjLCBsaW5rLnNo
ZWV0KCkpOwogICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9CQVNFOiB7Ci0gICAgSFRN
TEJhc2VFbGVtZW50SW1wbCAmYmFzZSA9IHN0YXRpY19jYXN0PEhUTUxCYXNlRWxlbWVudEltcGwg
Jj4oZWxlbWVudCk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxl
bWVudDo6dGl0bGVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7Cisg
ICAgSFRNTFRpdGxlRWxlbWVudEltcGwmIHRpdGxlID0gKnN0YXRpY19jYXN0PEhUTUxUaXRsZUVs
ZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBpZiAodG9rZW4gPT0gVGl0bGVUZXh0KQorICAgICAg
ICByZXR1cm4gU3RyaW5nKHRpdGxlLnRleHQoKSk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwor
fQorCitWYWx1ZSBIVE1MRWxlbWVudDo6bWV0YUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0
b2tlbikgY29uc3QKK3sKKyAgICBIVE1MTWV0YUVsZW1lbnRJbXBsJiBtZXRhID0gKnN0YXRpY19j
YXN0PEhUTUxNZXRhRWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAodG9rZW4pIHsK
LSAgICBjYXNlIEJhc2VIcmVmOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYmFzZS5ocmVmKCkp
OwotICAgIGNhc2UgQmFzZVRhcmdldDogICAgICAgICAgcmV0dXJuIFN0cmluZyhiYXNlLnRhcmdl
dCgpKTsKKyAgICAgICAgY2FzZSBNZXRhQ29udGVudDogICAgICAgICByZXR1cm4gU3RyaW5nKG1l
dGEuY29udGVudCgpKTsKKyAgICAgICAgY2FzZSBNZXRhSHR0cEVxdWl2OiAgICAgICByZXR1cm4g
U3RyaW5nKG1ldGEuaHR0cEVxdWl2KCkpOworICAgICAgICBjYXNlIE1ldGFOYW1lOiAgICAgICAg
ICAgIHJldHVybiBTdHJpbmcobWV0YS5uYW1lKCkpOworICAgICAgICBjYXNlIE1ldGFTY2hlbWU6
ICAgICAgICAgIHJldHVybiBTdHJpbmcobWV0YS5zY2hlbWUoKSk7CiAgICAgfQotICB9Ci0gIGJy
ZWFrOwotICBjYXNlIElEX0lTSU5ERVg6IHsKLSAgICBIVE1MSXNJbmRleEVsZW1lbnRJbXBsICZp
c2luZGV4ID0gc3RhdGljX2Nhc3Q8SFRNTElzSW5kZXhFbGVtZW50SW1wbCAmPihlbGVtZW50KTsK
KyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50OjpiYXNlR2V0
dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxCYXNlRWxl
bWVudEltcGwmIGJhc2UgPSAqc3RhdGljX2Nhc3Q8SFRNTEJhc2VFbGVtZW50SW1wbCo+KGltcGwo
KSk7CiAgICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgSXNJbmRleEZvcm06ICAgICAgICAg
ICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYywgaXNpbmRleC5mb3JtKCkpOyAvLyB0eXBlIEhUTUxG
b3JtRWxlbWVudAotICAgIGNhc2UgSXNJbmRleFByb21wdDogICAgICAgICAgcmV0dXJuIFN0cmlu
Zyhpc2luZGV4LnByb21wdCgpKTsKKyAgICAgICAgY2FzZSBCYXNlSHJlZjogICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKGJhc2UuaHJlZigpKTsKKyAgICAgICAgY2FzZSBCYXNlVGFyZ2V0OiAgICAg
ICAgICByZXR1cm4gU3RyaW5nKGJhc2UudGFyZ2V0KCkpOwogICAgIH0KLSAgfQotICBicmVhazsK
LSAgY2FzZSBJRF9TVFlMRTogewotICAgIEhUTUxTdHlsZUVsZW1lbnRJbXBsICZzdHlsZSA9IHN0
YXRpY19jYXN0PEhUTUxTdHlsZUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgIHJldHVybiBV
bmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OmlzSW5kZXhHZXR0ZXIoRXhlY1N0
YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTElzSW5kZXhFbGVtZW50SW1w
bCYgaXNpbmRleCA9ICpzdGF0aWNfY2FzdDxIVE1MSXNJbmRleEVsZW1lbnRJbXBsKj4oaW1wbCgp
KTsKICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBTdHlsZURpc2FibGVkOiAgICAgICAg
cmV0dXJuIEJvb2xlYW4oc3R5bGUuZGlzYWJsZWQoKSk7Ci0gICAgY2FzZSBTdHlsZU1lZGlhOiAg
ICAgICAgICAgcmV0dXJuIFN0cmluZyhzdHlsZS5tZWRpYSgpKTsKLSAgICBjYXNlIFN0eWxlVHlw
ZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKHN0eWxlLnR5cGUoKSk7Ci0gICAgY2FzZSBTdHls
ZVNoZWV0OiAgICAgICAgICAgcmV0dXJuIGdldERPTVN0eWxlU2hlZXQoZXhlYywgc3R5bGUuc2hl
ZXQoKSk7CisgICAgICAgIGNhc2UgSXNJbmRleEZvcm06ICAgICAgICAgICAgcmV0dXJuIGdldERP
TU5vZGUoZXhlYywgaXNpbmRleC5mb3JtKCkpOyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVudAorICAg
ICAgICBjYXNlIElzSW5kZXhQcm9tcHQ6ICAgICAgICAgIHJldHVybiBTdHJpbmcoaXNpbmRleC5w
cm9tcHQoKSk7CiAgICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX0JPRFk6IHsKLSAgICBI
VE1MQm9keUVsZW1lbnRJbXBsICZib2R5ID0gc3RhdGljX2Nhc3Q8SFRNTEJvZHlFbGVtZW50SW1w
bCAmPihlbGVtZW50KTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxF
bGVtZW50OjpzdHlsZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sK
KyAgICBIVE1MU3R5bGVFbGVtZW50SW1wbCYgc3R5bGUgPSAqc3RhdGljX2Nhc3Q8SFRNTFN0eWxl
RWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIEJv
ZHlBTGluazogICAgICAgICAgIHJldHVybiBTdHJpbmcoYm9keS5hTGluaygpKTsKLSAgICBjYXNl
IEJvZHlCYWNrZ3JvdW5kOiAgICAgIHJldHVybiBTdHJpbmcoYm9keS5iYWNrZ3JvdW5kKCkpOwot
ICAgIGNhc2UgQm9keUJnQ29sb3I6ICAgICAgICAgcmV0dXJuIFN0cmluZyhib2R5LmJnQ29sb3Io
KSk7Ci0gICAgY2FzZSBCb2R5TGluazogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGJvZHkubGlu
aygpKTsKLSAgICBjYXNlIEJvZHlUZXh0OiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYm9keS50
ZXh0KCkpOwotICAgIGNhc2UgQm9keVZMaW5rOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhib2R5
LnZMaW5rKCkpOwotICAgIGRlZmF1bHQ6Ci0gICAgICAvLyBVcGRhdGUgdGhlIGRvY3VtZW50J3Mg
bGF5b3V0IGJlZm9yZSB3ZSBjb21wdXRlIHRoZXNlIGF0dHJpYnV0ZXMuCi0gICAgICBEb2N1bWVu
dEltcGwgKmRvYyA9IGJvZHkuZ2V0RG9jdW1lbnQoKTsKLSAgICAgIGlmIChkb2MpCi0gICAgICAg
IGRvYy0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7Ci0gICAgICBLSFRN
TFZpZXcgKnZpZXcgPSBkb2MgPyBkb2MtPnZpZXcoKSA6IDA7Ci0gICAgICBzd2l0Y2ggKHRva2Vu
KSB7Ci0gICAgICAgIGNhc2UgQm9keVNjcm9sbExlZnQ6Ci0gICAgICAgICAgICByZXR1cm4gTnVt
YmVyKHZpZXcgPyB2aWV3LT5jb250ZW50c1goKSA6IDApOwotICAgICAgICBjYXNlIEJvZHlTY3Jv
bGxUb3A6Ci0gICAgICAgICAgICByZXR1cm4gTnVtYmVyKHZpZXcgPyB2aWV3LT5jb250ZW50c1ko
KSA6IDApOwotICAgICAgICBjYXNlIEJvZHlTY3JvbGxIZWlnaHQ6ICAgcmV0dXJuIE51bWJlcih2
aWV3ID8gdmlldy0+Y29udGVudHNIZWlnaHQoKSA6IDApOwotICAgICAgICBjYXNlIEJvZHlTY3Jv
bGxXaWR0aDogICAgcmV0dXJuIE51bWJlcih2aWV3ID8gdmlldy0+Y29udGVudHNXaWR0aCgpIDog
MCk7Ci0gICAgICB9CisgICAgICAgIGNhc2UgU3R5bGVEaXNhYmxlZDogICAgICAgIHJldHVybiBC
b29sZWFuKHN0eWxlLmRpc2FibGVkKCkpOworICAgICAgICBjYXNlIFN0eWxlTWVkaWE6ICAgICAg
ICAgICByZXR1cm4gU3RyaW5nKHN0eWxlLm1lZGlhKCkpOworICAgICAgICBjYXNlIFN0eWxlVHlw
ZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKHN0eWxlLnR5cGUoKSk7CisgICAgICAgIGNhc2Ug
U3R5bGVTaGVldDogICAgICAgICAgIHJldHVybiBnZXRET01TdHlsZVNoZWV0KGV4ZWMsIHN0eWxl
LnNoZWV0KCkpOwogICAgIH0KLSAgfQotICBicmVhazsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7
Cit9CiAKLSAgY2FzZSBJRF9GT1JNOiB7Ci0gICAgSFRNTEZvcm1FbGVtZW50SW1wbCAmZm9ybSA9
IHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudEltcGwgJj4oZWxlbWVudCk7CitWYWx1ZSBIVE1M
RWxlbWVudDo6Ym9keUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sK
KyAgICBIVE1MQm9keUVsZW1lbnRJbXBsJiBib2R5ID0gKnN0YXRpY19jYXN0PEhUTUxCb2R5RWxl
bWVudEltcGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIEZvcm1F
bGVtZW50czogICAgICAgIHJldHVybiBnZXRIVE1MQ29sbGVjdGlvbihleGVjLCBmb3JtLmVsZW1l
bnRzKCkuZ2V0KCkpOwotICAgIGNhc2UgRm9ybUxlbmd0aDogICAgICAgICAgcmV0dXJuIE51bWJl
cihmb3JtLmxlbmd0aCgpKTsKLSAgICBjYXNlIEZvcm1OYW1lOiAgICAgICAgICAgIHJldHVybiBT
dHJpbmcoZm9ybS5uYW1lKCkpOwotICAgIGNhc2UgRm9ybUFjY2VwdENoYXJzZXQ6ICAgcmV0dXJu
IFN0cmluZyhmb3JtLmFjY2VwdENoYXJzZXQoKSk7Ci0gICAgY2FzZSBGb3JtQWN0aW9uOiAgICAg
ICAgICByZXR1cm4gU3RyaW5nKGZvcm0uYWN0aW9uKCkpOwotICAgIGNhc2UgRm9ybUVuY1R5cGU6
ICAgICAgICAgcmV0dXJuIFN0cmluZyhmb3JtLmVuY3R5cGUoKSk7Ci0gICAgY2FzZSBGb3JtTWV0
aG9kOiAgICAgICAgICByZXR1cm4gU3RyaW5nKGZvcm0ubWV0aG9kKCkpOwotICAgIGNhc2UgRm9y
bVRhcmdldDogICAgICAgICAgcmV0dXJuIFN0cmluZyhmb3JtLnRhcmdldCgpKTsKKyAgICAgICAg
Y2FzZSBCb2R5QUxpbms6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGJvZHkuYUxpbmsoKSk7Cisg
ICAgICAgIGNhc2UgQm9keUJhY2tncm91bmQ6ICAgICAgcmV0dXJuIFN0cmluZyhib2R5LmJhY2tn
cm91bmQoKSk7CisgICAgICAgIGNhc2UgQm9keUJnQ29sb3I6ICAgICAgICAgcmV0dXJuIFN0cmlu
Zyhib2R5LmJnQ29sb3IoKSk7CisgICAgICAgIGNhc2UgQm9keUxpbms6ICAgICAgICAgICAgcmV0
dXJuIFN0cmluZyhib2R5LmxpbmsoKSk7CisgICAgICAgIGNhc2UgQm9keVRleHQ6ICAgICAgICAg
ICAgcmV0dXJuIFN0cmluZyhib2R5LnRleHQoKSk7CisgICAgICAgIGNhc2UgQm9keVZMaW5rOiAg
ICAgICAgICAgcmV0dXJuIFN0cmluZyhib2R5LnZMaW5rKCkpOworICAgICAgICBkZWZhdWx0OiB7
CisgICAgICAgICAgICAvLyBVcGRhdGUgdGhlIGRvY3VtZW50J3MgbGF5b3V0IGJlZm9yZSB3ZSBj
b21wdXRlIHRoZXNlIGF0dHJpYnV0ZXMuCisgICAgICAgICAgICBEb2N1bWVudEltcGwgKmRvYyA9
IGJvZHkuZ2V0RG9jdW1lbnQoKTsKKyAgICAgICAgICAgIGlmIChkb2MpCisgICAgICAgICAgICAg
ICAgZG9jLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKKyAgICAgICAg
ICAgIEtIVE1MVmlldyAqdmlldyA9IGRvYyA/IGRvYy0+dmlldygpIDogMDsKKyAgICAgICAgICAg
IHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgICAgICAgICBjYXNlIEJvZHlTY3JvbGxMZWZ0Ogor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gTnVtYmVyKHZpZXcgPyB2aWV3LT5jb250ZW50c1go
KSA6IDApOworICAgICAgICAgICAgICAgIGNhc2UgQm9keVNjcm9sbFRvcDoKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIE51bWJlcih2aWV3ID8gdmlldy0+Y29udGVudHNZKCkgOiAwKTsKKyAg
ICAgICAgICAgICAgICBjYXNlIEJvZHlTY3JvbGxIZWlnaHQ6CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBOdW1iZXIodmlldyA/IHZpZXctPmNvbnRlbnRzSGVpZ2h0KCkgOiAwKTsKKyAgICAg
ICAgICAgICAgICBjYXNlIEJvZHlTY3JvbGxXaWR0aDoKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIE51bWJlcih2aWV3ID8gdmlldy0+Y29udGVudHNXaWR0aCgpIDogMCk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KICAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfU0VMRUNUOiB7
Ci0gICAgSFRNTFNlbGVjdEVsZW1lbnRJbXBsICZzZWxlY3QgPSBzdGF0aWNfY2FzdDxIVE1MU2Vs
ZWN0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQor
CitWYWx1ZSBIVE1MRWxlbWVudDo6Zm9ybUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tl
bikgY29uc3QKK3sKKyAgICBIVE1MRm9ybUVsZW1lbnRJbXBsJiBmb3JtID0gKnN0YXRpY19jYXN0
PEhUTUxGb3JtRWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAodG9rZW4pIHsKLSAg
ICBjYXNlIFNlbGVjdFR5cGU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhzZWxlY3QudHlwZSgp
KTsKLSAgICBjYXNlIFNlbGVjdFNlbGVjdGVkSW5kZXg6ICAgcmV0dXJuIE51bWJlcihzZWxlY3Qu
c2VsZWN0ZWRJbmRleCgpKTsKLSAgICBjYXNlIFNlbGVjdFZhbHVlOiAgICAgICAgICAgcmV0dXJu
IFN0cmluZyhzZWxlY3QudmFsdWUoKSk7Ci0gICAgY2FzZSBTZWxlY3RMZW5ndGg6ICAgICAgICAg
IHJldHVybiBOdW1iZXIoc2VsZWN0Lmxlbmd0aCgpKTsKLSAgICBjYXNlIFNlbGVjdEZvcm06ICAg
ICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYywgc2VsZWN0LmZvcm0oKSk7IC8vIHR5cGUg
SFRNTEZvcm1FbGVtZW50Ci0gICAgY2FzZSBTZWxlY3RPcHRpb25zOiAgICAgICAgIHJldHVybiBn
ZXRTZWxlY3RIVE1MQ29sbGVjdGlvbihleGVjLCBzZWxlY3Qub3B0aW9uc0hUTUxDb2xsZWN0aW9u
KCkuZ2V0KCksICZzZWxlY3QpOyAvLyB0eXBlIEhUTUxDb2xsZWN0aW9uCi0gICAgY2FzZSBTZWxl
Y3REaXNhYmxlZDogICAgICAgIHJldHVybiBCb29sZWFuKHNlbGVjdC5kaXNhYmxlZCgpKTsKLSAg
ICBjYXNlIFNlbGVjdE11bHRpcGxlOiAgICAgICAgcmV0dXJuIEJvb2xlYW4oc2VsZWN0Lm11bHRp
cGxlKCkpOwotICAgIGNhc2UgU2VsZWN0TmFtZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKHNl
bGVjdC5uYW1lKCkpOwotICAgIGNhc2UgU2VsZWN0U2l6ZTogICAgICAgICAgICByZXR1cm4gTnVt
YmVyKHNlbGVjdC5zaXplKCkpOwotICAgIGNhc2UgU2VsZWN0VGFiSW5kZXg6ICAgICAgICByZXR1
cm4gTnVtYmVyKHNlbGVjdC50YWJJbmRleCgpKTsKKyAgICAgICAgY2FzZSBGb3JtRWxlbWVudHM6
ICAgICAgICByZXR1cm4gZ2V0SFRNTENvbGxlY3Rpb24oZXhlYywgZm9ybS5lbGVtZW50cygpLmdl
dCgpKTsKKyAgICAgICAgY2FzZSBGb3JtTGVuZ3RoOiAgICAgICAgICByZXR1cm4gTnVtYmVyKGZv
cm0ubGVuZ3RoKCkpOworICAgICAgICBjYXNlIEZvcm1OYW1lOiAgICAgICAgICAgIHJldHVybiBT
dHJpbmcoZm9ybS5uYW1lKCkpOworICAgICAgICBjYXNlIEZvcm1BY2NlcHRDaGFyc2V0OiAgIHJl
dHVybiBTdHJpbmcoZm9ybS5hY2NlcHRDaGFyc2V0KCkpOworICAgICAgICBjYXNlIEZvcm1BY3Rp
b246ICAgICAgICAgIHJldHVybiBTdHJpbmcoZm9ybS5hY3Rpb24oKSk7CisgICAgICAgIGNhc2Ug
Rm9ybUVuY1R5cGU6ICAgICAgICAgcmV0dXJuIFN0cmluZyhmb3JtLmVuY3R5cGUoKSk7CisgICAg
ICAgIGNhc2UgRm9ybU1ldGhvZDogICAgICAgICAgcmV0dXJuIFN0cmluZyhmb3JtLm1ldGhvZCgp
KTsKKyAgICAgICAgY2FzZSBGb3JtVGFyZ2V0OiAgICAgICAgICByZXR1cm4gU3RyaW5nKGZvcm0u
dGFyZ2V0KCkpOwogICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9PUFRHUk9VUDogewot
ICAgIEhUTUxPcHRHcm91cEVsZW1lbnRJbXBsICZvcHRncm91cCA9IHN0YXRpY19jYXN0PEhUTUxP
cHRHcm91cEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgIHJldHVybiBVbmRlZmluZWQoKTsK
K30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OnNlbGVjdEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGlu
dCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MU2VsZWN0RWxlbWVudEltcGwmIHNlbGVjdCA9ICpz
dGF0aWNfY2FzdDxIVE1MU2VsZWN0RWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAo
dG9rZW4pIHsKLSAgICBjYXNlIE9wdEdyb3VwRGlzYWJsZWQ6ICAgICAgICByZXR1cm4gQm9vbGVh
bihvcHRncm91cC5kaXNhYmxlZCgpKTsKLSAgICBjYXNlIE9wdEdyb3VwTGFiZWw6ICAgICAgICAg
ICByZXR1cm4gU3RyaW5nKG9wdGdyb3VwLmxhYmVsKCkpOworICAgICAgICBjYXNlIFNlbGVjdFR5
cGU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhzZWxlY3QudHlwZSgpKTsKKyAgICAgICAgY2Fz
ZSBTZWxlY3RTZWxlY3RlZEluZGV4OiAgIHJldHVybiBOdW1iZXIoc2VsZWN0LnNlbGVjdGVkSW5k
ZXgoKSk7CisgICAgICAgIGNhc2UgU2VsZWN0VmFsdWU6ICAgICAgICAgICByZXR1cm4gU3RyaW5n
KHNlbGVjdC52YWx1ZSgpKTsKKyAgICAgICAgY2FzZSBTZWxlY3RMZW5ndGg6ICAgICAgICAgIHJl
dHVybiBOdW1iZXIoc2VsZWN0Lmxlbmd0aCgpKTsKKyAgICAgICAgY2FzZSBTZWxlY3RGb3JtOiAg
ICAgICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsIHNlbGVjdC5mb3JtKCkpOyAvLyB0eXBl
IEhUTUxGb3JtRWxlbWVudAorICAgICAgICBjYXNlIFNlbGVjdE9wdGlvbnM6ICAgICAgICAgcmV0
dXJuIGdldFNlbGVjdEhUTUxDb2xsZWN0aW9uKGV4ZWMsIHNlbGVjdC5vcHRpb25zSFRNTENvbGxl
Y3Rpb24oKS5nZXQoKSwgJnNlbGVjdCk7IC8vIHR5cGUgSFRNTENvbGxlY3Rpb24KKyAgICAgICAg
Y2FzZSBTZWxlY3REaXNhYmxlZDogICAgICAgIHJldHVybiBCb29sZWFuKHNlbGVjdC5kaXNhYmxl
ZCgpKTsKKyAgICAgICAgY2FzZSBTZWxlY3RNdWx0aXBsZTogICAgICAgIHJldHVybiBCb29sZWFu
KHNlbGVjdC5tdWx0aXBsZSgpKTsKKyAgICAgICAgY2FzZSBTZWxlY3ROYW1lOiAgICAgICAgICAg
IHJldHVybiBTdHJpbmcoc2VsZWN0Lm5hbWUoKSk7CisgICAgICAgIGNhc2UgU2VsZWN0U2l6ZTog
ICAgICAgICAgICByZXR1cm4gTnVtYmVyKHNlbGVjdC5zaXplKCkpOworICAgICAgICBjYXNlIFNl
bGVjdFRhYkluZGV4OiAgICAgICAgcmV0dXJuIE51bWJlcihzZWxlY3QudGFiSW5kZXgoKSk7CiAg
ICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX09QVElPTjogewotICAgIEhUTUxPcHRpb25F
bGVtZW50SW1wbCAmb3B0aW9uID0gc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnRJbXBsICY+
KGVsZW1lbnQpOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1l
bnQ6Om9wdEdyb3VwR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAorewor
ICAgIEhUTUxPcHRHcm91cEVsZW1lbnRJbXBsJiBvcHRncm91cCA9ICpzdGF0aWNfY2FzdDxIVE1M
T3B0R3JvdXBFbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tlbikgewotICAg
IGNhc2UgT3B0aW9uRm9ybTogICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLG9wdGlv
bi5mb3JtKCkpOyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVudAotICAgIGNhc2UgT3B0aW9uRGVmYXVs
dFNlbGVjdGVkOiByZXR1cm4gQm9vbGVhbihvcHRpb24uZGVmYXVsdFNlbGVjdGVkKCkpOwotICAg
IGNhc2UgT3B0aW9uVGV4dDogICAgICAgICAgICByZXR1cm4gU3RyaW5nKG9wdGlvbi50ZXh0KCkp
OwotICAgIGNhc2UgT3B0aW9uSW5kZXg6ICAgICAgICAgICByZXR1cm4gTnVtYmVyKG9wdGlvbi5p
bmRleCgpKTsKLSAgICBjYXNlIE9wdGlvbkRpc2FibGVkOiAgICAgICAgcmV0dXJuIEJvb2xlYW4o
b3B0aW9uLmRpc2FibGVkKCkpOwotICAgIGNhc2UgT3B0aW9uTGFiZWw6ICAgICAgICAgICByZXR1
cm4gU3RyaW5nKG9wdGlvbi5sYWJlbCgpKTsKLSAgICBjYXNlIE9wdGlvblNlbGVjdGVkOiAgICAg
ICAgcmV0dXJuIEJvb2xlYW4ob3B0aW9uLnNlbGVjdGVkKCkpOwotICAgIGNhc2UgT3B0aW9uVmFs
dWU6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKG9wdGlvbi52YWx1ZSgpKTsKKyAgICAgICAgY2Fz
ZSBPcHRHcm91cERpc2FibGVkOiAgICAgICAgcmV0dXJuIEJvb2xlYW4ob3B0Z3JvdXAuZGlzYWJs
ZWQoKSk7CisgICAgICAgIGNhc2UgT3B0R3JvdXBMYWJlbDogICAgICAgICAgIHJldHVybiBTdHJp
bmcob3B0Z3JvdXAubGFiZWwoKSk7CiAgICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX0lO
UFVUOiB7Ci0gICAgSFRNTElucHV0RWxlbWVudEltcGwgJmlucHV0ID0gc3RhdGljX2Nhc3Q8SFRN
TElucHV0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwor
fQorCitWYWx1ZSBIVE1MRWxlbWVudDo6b3B0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50
IHRva2VuKSBjb25zdAoreworICAgIEhUTUxPcHRpb25FbGVtZW50SW1wbCYgb3B0aW9uID0gKnN0
YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0
b2tlbikgewotICAgIGNhc2UgSW5wdXREZWZhdWx0VmFsdWU6ICAgIHJldHVybiBTdHJpbmcoaW5w
dXQuZGVmYXVsdFZhbHVlKCkpOwotICAgIGNhc2UgSW5wdXREZWZhdWx0Q2hlY2tlZDogIHJldHVy
biBCb29sZWFuKGlucHV0LmRlZmF1bHRDaGVja2VkKCkpOwotICAgIGNhc2UgSW5wdXRGb3JtOiAg
ICAgICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsaW5wdXQuZm9ybSgpKTsgLy8gdHlwZSBI
VE1MRm9ybUVsZW1lbnQKLSAgICBjYXNlIElucHV0QWNjZXB0OiAgICAgICAgICByZXR1cm4gU3Ry
aW5nKGlucHV0LmFjY2VwdCgpKTsKLSAgICBjYXNlIElucHV0QWNjZXNzS2V5OiAgICAgICByZXR1
cm4gU3RyaW5nKGlucHV0LmFjY2Vzc0tleSgpKTsKLSAgICBjYXNlIElucHV0QWxpZ246ICAgICAg
ICAgICByZXR1cm4gU3RyaW5nKGlucHV0LmFsaWduKCkpOwotICAgIGNhc2UgSW5wdXRBbHQ6ICAg
ICAgICAgICAgIHJldHVybiBTdHJpbmcoaW5wdXQuYWx0KCkpOwotICAgIGNhc2UgSW5wdXRDaGVj
a2VkOiAgICAgICAgIHJldHVybiBCb29sZWFuKGlucHV0LmNoZWNrZWQoKSk7Ci0gICAgY2FzZSBJ
bnB1dERpc2FibGVkOiAgICAgICAgcmV0dXJuIEJvb2xlYW4oaW5wdXQuZGlzYWJsZWQoKSk7Ci0g
ICAgY2FzZSBJbnB1dE1heExlbmd0aDogICAgICAgcmV0dXJuIE51bWJlcihpbnB1dC5tYXhMZW5n
dGgoKSk7Ci0gICAgY2FzZSBJbnB1dE5hbWU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpbnB1
dC5uYW1lKCkpOwotICAgIGNhc2UgSW5wdXRSZWFkT25seTogICAgICAgIHJldHVybiBCb29sZWFu
KGlucHV0LnJlYWRPbmx5KCkpOwotICAgIGNhc2UgSW5wdXRTaXplOiAgICAgICAgICAgIHJldHVy
biBTdHJpbmcoaW5wdXQuc2l6ZURPTSgpKTsKLSAgICBjYXNlIElucHV0U3JjOiAgICAgICAgICAg
ICByZXR1cm4gU3RyaW5nKGlucHV0LnNyYygpKTsKLSAgICBjYXNlIElucHV0VGFiSW5kZXg6ICAg
ICAgICByZXR1cm4gTnVtYmVyKGlucHV0LnRhYkluZGV4KCkpOwotICAgIGNhc2UgSW5wdXRUeXBl
OiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoaW5wdXQudHlwZSgpKTsKLSAgICBjYXNlIElucHV0
VXNlTWFwOiAgICAgICAgICByZXR1cm4gU3RyaW5nKGlucHV0LnVzZU1hcCgpKTsKLSAgICBjYXNl
IElucHV0VmFsdWU6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGlucHV0LnZhbHVlKCkpOworICAg
ICAgICBjYXNlIE9wdGlvbkZvcm06ICAgICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyxv
cHRpb24uZm9ybSgpKTsgLy8gdHlwZSBIVE1MRm9ybUVsZW1lbnQKKyAgICAgICAgY2FzZSBPcHRp
b25EZWZhdWx0U2VsZWN0ZWQ6IHJldHVybiBCb29sZWFuKG9wdGlvbi5kZWZhdWx0U2VsZWN0ZWQo
KSk7CisgICAgICAgIGNhc2UgT3B0aW9uVGV4dDogICAgICAgICAgICByZXR1cm4gU3RyaW5nKG9w
dGlvbi50ZXh0KCkpOworICAgICAgICBjYXNlIE9wdGlvbkluZGV4OiAgICAgICAgICAgcmV0dXJu
IE51bWJlcihvcHRpb24uaW5kZXgoKSk7CisgICAgICAgIGNhc2UgT3B0aW9uRGlzYWJsZWQ6ICAg
ICAgICByZXR1cm4gQm9vbGVhbihvcHRpb24uZGlzYWJsZWQoKSk7CisgICAgICAgIGNhc2UgT3B0
aW9uTGFiZWw6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKG9wdGlvbi5sYWJlbCgpKTsKKyAgICAg
ICAgY2FzZSBPcHRpb25TZWxlY3RlZDogICAgICAgIHJldHVybiBCb29sZWFuKG9wdGlvbi5zZWxl
Y3RlZCgpKTsKKyAgICAgICAgY2FzZSBPcHRpb25WYWx1ZTogICAgICAgICAgIHJldHVybiBTdHJp
bmcob3B0aW9uLnZhbHVlKCkpOwogICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9URVhU
QVJFQTogewotICAgIEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBsICZ0ZXh0YXJlYSA9IHN0YXRpY19j
YXN0PEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgIHJldHVybiBVbmRl
ZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OmlucHV0R2V0dGVyKEV4ZWNTdGF0ZSog
ZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxJbnB1dEVsZW1lbnRJbXBsJiBpbnB1
dCA9ICpzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dp
dGNoICh0b2tlbikgewotICAgIGNhc2UgVGV4dEFyZWFEZWZhdWx0VmFsdWU6ICAgIHJldHVybiBT
dHJpbmcodGV4dGFyZWEuZGVmYXVsdFZhbHVlKCkpOwotICAgIGNhc2UgVGV4dEFyZWFGb3JtOiAg
ICAgICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsdGV4dGFyZWEuZm9ybSgpKTsgLy8gdHlw
ZSBIVE1MRm9ybUVsZW1lbnQKLSAgICBjYXNlIFRleHRBcmVhQWNjZXNzS2V5OiAgICAgICByZXR1
cm4gU3RyaW5nKHRleHRhcmVhLmFjY2Vzc0tleSgpKTsKLSAgICBjYXNlIFRleHRBcmVhQ29sczog
ICAgICAgICAgICByZXR1cm4gTnVtYmVyKHRleHRhcmVhLmNvbHMoKSk7Ci0gICAgY2FzZSBUZXh0
QXJlYURpc2FibGVkOiAgICAgICAgcmV0dXJuIEJvb2xlYW4odGV4dGFyZWEuZGlzYWJsZWQoKSk7
Ci0gICAgY2FzZSBUZXh0QXJlYU5hbWU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0ZXh0YXJl
YS5uYW1lKCkpOwotICAgIGNhc2UgVGV4dEFyZWFSZWFkT25seTogICAgICAgIHJldHVybiBCb29s
ZWFuKHRleHRhcmVhLnJlYWRPbmx5KCkpOwotICAgIGNhc2UgVGV4dEFyZWFSb3dzOiAgICAgICAg
ICAgIHJldHVybiBOdW1iZXIodGV4dGFyZWEucm93cygpKTsKLSAgICBjYXNlIFRleHRBcmVhVGFi
SW5kZXg6ICAgICAgICByZXR1cm4gTnVtYmVyKHRleHRhcmVhLnRhYkluZGV4KCkpOwotICAgIGNh
c2UgVGV4dEFyZWFUeXBlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcodGV4dGFyZWEudHlwZSgp
KTsKLSAgICBjYXNlIFRleHRBcmVhVmFsdWU6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRleHRh
cmVhLnZhbHVlKCkpOworICAgICAgICBjYXNlIElucHV0RGVmYXVsdFZhbHVlOiAgICByZXR1cm4g
U3RyaW5nKGlucHV0LmRlZmF1bHRWYWx1ZSgpKTsKKyAgICAgICAgY2FzZSBJbnB1dERlZmF1bHRD
aGVja2VkOiAgcmV0dXJuIEJvb2xlYW4oaW5wdXQuZGVmYXVsdENoZWNrZWQoKSk7CisgICAgICAg
IGNhc2UgSW5wdXRGb3JtOiAgICAgICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsaW5wdXQu
Zm9ybSgpKTsgLy8gdHlwZSBIVE1MRm9ybUVsZW1lbnQKKyAgICAgICAgY2FzZSBJbnB1dEFjY2Vw
dDogICAgICAgICAgcmV0dXJuIFN0cmluZyhpbnB1dC5hY2NlcHQoKSk7CisgICAgICAgIGNhc2Ug
SW5wdXRBY2Nlc3NLZXk6ICAgICAgIHJldHVybiBTdHJpbmcoaW5wdXQuYWNjZXNzS2V5KCkpOwor
ICAgICAgICBjYXNlIElucHV0QWxpZ246ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGlucHV0LmFs
aWduKCkpOworICAgICAgICBjYXNlIElucHV0QWx0OiAgICAgICAgICAgICByZXR1cm4gU3RyaW5n
KGlucHV0LmFsdCgpKTsKKyAgICAgICAgY2FzZSBJbnB1dENoZWNrZWQ6ICAgICAgICAgcmV0dXJu
IEJvb2xlYW4oaW5wdXQuY2hlY2tlZCgpKTsKKyAgICAgICAgY2FzZSBJbnB1dERpc2FibGVkOiAg
ICAgICAgcmV0dXJuIEJvb2xlYW4oaW5wdXQuZGlzYWJsZWQoKSk7CisgICAgICAgIGNhc2UgSW5w
dXRNYXhMZW5ndGg6ICAgICAgIHJldHVybiBOdW1iZXIoaW5wdXQubWF4TGVuZ3RoKCkpOworICAg
ICAgICBjYXNlIElucHV0TmFtZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGlucHV0Lm5hbWUo
KSk7CisgICAgICAgIGNhc2UgSW5wdXRSZWFkT25seTogICAgICAgIHJldHVybiBCb29sZWFuKGlu
cHV0LnJlYWRPbmx5KCkpOworICAgICAgICBjYXNlIElucHV0U2l6ZTogICAgICAgICAgICByZXR1
cm4gU3RyaW5nKGlucHV0LnNpemVET00oKSk7CisgICAgICAgIGNhc2UgSW5wdXRTcmM6ICAgICAg
ICAgICAgIHJldHVybiBTdHJpbmcoaW5wdXQuc3JjKCkpOworICAgICAgICBjYXNlIElucHV0VGFi
SW5kZXg6ICAgICAgICByZXR1cm4gTnVtYmVyKGlucHV0LnRhYkluZGV4KCkpOworICAgICAgICBj
YXNlIElucHV0VHlwZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGlucHV0LnR5cGUoKSk7Cisg
ICAgICAgIGNhc2UgSW5wdXRVc2VNYXA6ICAgICAgICAgIHJldHVybiBTdHJpbmcoaW5wdXQudXNl
TWFwKCkpOworICAgICAgICBjYXNlIElucHV0VmFsdWU6ICAgICAgICAgICByZXR1cm4gU3RyaW5n
KGlucHV0LnZhbHVlKCkpOwogICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9CVVRUT046
IHsKLSAgICBIVE1MQnV0dG9uRWxlbWVudEltcGwgJmJ1dHRvbiA9IHN0YXRpY19jYXN0PEhUTUxC
dXR0b25FbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9
CisKK1ZhbHVlIEhUTUxFbGVtZW50Ojp0ZXh0QXJlYUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGlu
dCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MVGV4dEFyZWFFbGVtZW50SW1wbCYgdGV4dGFyZWEg
PSAqc3RhdGljX2Nhc3Q8SFRNTFRleHRBcmVhRWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIHN3
aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIEJ1dHRvbkZvcm06ICAgICAgICAgICAgcmV0dXJuIGdl
dERPTU5vZGUoZXhlYyxidXR0b24uZm9ybSgpKTsgLy8gdHlwZSBIVE1MRm9ybUVsZW1lbnQKLSAg
ICBjYXNlIEJ1dHRvbkFjY2Vzc0tleTogICAgICAgcmV0dXJuIFN0cmluZyhidXR0b24uYWNjZXNz
S2V5KCkpOwotICAgIGNhc2UgQnV0dG9uRGlzYWJsZWQ6ICAgICAgICByZXR1cm4gQm9vbGVhbihi
dXR0b24uZGlzYWJsZWQoKSk7Ci0gICAgY2FzZSBCdXR0b25OYW1lOiAgICAgICAgICAgIHJldHVy
biBTdHJpbmcoYnV0dG9uLm5hbWUoKSk7Ci0gICAgY2FzZSBCdXR0b25UYWJJbmRleDogICAgICAg
IHJldHVybiBOdW1iZXIoYnV0dG9uLnRhYkluZGV4KCkpOwotICAgIGNhc2UgQnV0dG9uVHlwZTog
ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGJ1dHRvbi50eXBlKCkpOwotICAgIGNhc2UgQnV0dG9u
VmFsdWU6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGJ1dHRvbi52YWx1ZSgpKTsKKyAgICAgICAg
Y2FzZSBUZXh0QXJlYURlZmF1bHRWYWx1ZTogICAgcmV0dXJuIFN0cmluZyh0ZXh0YXJlYS5kZWZh
dWx0VmFsdWUoKSk7CisgICAgICAgIGNhc2UgVGV4dEFyZWFGb3JtOiAgICAgICAgICAgIHJldHVy
biBnZXRET01Ob2RlKGV4ZWMsdGV4dGFyZWEuZm9ybSgpKTsgLy8gdHlwZSBIVE1MRm9ybUVsZW1l
bnQKKyAgICAgICAgY2FzZSBUZXh0QXJlYUFjY2Vzc0tleTogICAgICAgcmV0dXJuIFN0cmluZyh0
ZXh0YXJlYS5hY2Nlc3NLZXkoKSk7CisgICAgICAgIGNhc2UgVGV4dEFyZWFDb2xzOiAgICAgICAg
ICAgIHJldHVybiBOdW1iZXIodGV4dGFyZWEuY29scygpKTsKKyAgICAgICAgY2FzZSBUZXh0QXJl
YURpc2FibGVkOiAgICAgICAgcmV0dXJuIEJvb2xlYW4odGV4dGFyZWEuZGlzYWJsZWQoKSk7Cisg
ICAgICAgIGNhc2UgVGV4dEFyZWFOYW1lOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcodGV4dGFy
ZWEubmFtZSgpKTsKKyAgICAgICAgY2FzZSBUZXh0QXJlYVJlYWRPbmx5OiAgICAgICAgcmV0dXJu
IEJvb2xlYW4odGV4dGFyZWEucmVhZE9ubHkoKSk7CisgICAgICAgIGNhc2UgVGV4dEFyZWFSb3dz
OiAgICAgICAgICAgIHJldHVybiBOdW1iZXIodGV4dGFyZWEucm93cygpKTsKKyAgICAgICAgY2Fz
ZSBUZXh0QXJlYVRhYkluZGV4OiAgICAgICAgcmV0dXJuIE51bWJlcih0ZXh0YXJlYS50YWJJbmRl
eCgpKTsKKyAgICAgICAgY2FzZSBUZXh0QXJlYVR5cGU6ICAgICAgICAgICAgcmV0dXJuIFN0cmlu
Zyh0ZXh0YXJlYS50eXBlKCkpOworICAgICAgICBjYXNlIFRleHRBcmVhVmFsdWU6ICAgICAgICAg
ICByZXR1cm4gU3RyaW5nKHRleHRhcmVhLnZhbHVlKCkpOwogICAgIH0KLSAgfQotICBicmVhazsK
LSAgY2FzZSBJRF9MQUJFTDogewotICAgIEhUTUxMYWJlbEVsZW1lbnRJbXBsICZsYWJlbCA9IHN0
YXRpY19jYXN0PEhUTUxMYWJlbEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgIHJldHVybiBV
bmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OmJ1dHRvbkdldHRlcihFeGVjU3Rh
dGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MQnV0dG9uRWxlbWVudEltcGwm
IGJ1dHRvbiA9ICpzdGF0aWNfY2FzdDxIVE1MQnV0dG9uRWxlbWVudEltcGwqPihpbXBsKCkpOwog
ICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIExhYmVsRm9ybTogICAgICAgICAgICByZXR1
cm4gZ2V0RE9NTm9kZShleGVjLGxhYmVsLmZvcm0oKSk7IC8vIHR5cGUgSFRNTEZvcm1FbGVtZW50
Ci0gICAgY2FzZSBMYWJlbEFjY2Vzc0tleTogICAgICAgcmV0dXJuIFN0cmluZyhsYWJlbC5hY2Nl
c3NLZXkoKSk7Ci0gICAgY2FzZSBMYWJlbEh0bWxGb3I6ICAgICAgICAgcmV0dXJuIFN0cmluZyhs
YWJlbC5odG1sRm9yKCkpOworICAgICAgICBjYXNlIEJ1dHRvbkZvcm06ICAgICAgICAgICAgcmV0
dXJuIGdldERPTU5vZGUoZXhlYyxidXR0b24uZm9ybSgpKTsgLy8gdHlwZSBIVE1MRm9ybUVsZW1l
bnQKKyAgICAgICAgY2FzZSBCdXR0b25BY2Nlc3NLZXk6ICAgICAgIHJldHVybiBTdHJpbmcoYnV0
dG9uLmFjY2Vzc0tleSgpKTsKKyAgICAgICAgY2FzZSBCdXR0b25EaXNhYmxlZDogICAgICAgIHJl
dHVybiBCb29sZWFuKGJ1dHRvbi5kaXNhYmxlZCgpKTsKKyAgICAgICAgY2FzZSBCdXR0b25OYW1l
OiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYnV0dG9uLm5hbWUoKSk7CisgICAgICAgIGNhc2Ug
QnV0dG9uVGFiSW5kZXg6ICAgICAgICByZXR1cm4gTnVtYmVyKGJ1dHRvbi50YWJJbmRleCgpKTsK
KyAgICAgICAgY2FzZSBCdXR0b25UeXBlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYnV0dG9u
LnR5cGUoKSk7CisgICAgICAgIGNhc2UgQnV0dG9uVmFsdWU6ICAgICAgICAgICByZXR1cm4gU3Ry
aW5nKGJ1dHRvbi52YWx1ZSgpKTsKICAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfRklF
TERTRVQ6IHsKLSAgICBIVE1MRmllbGRTZXRFbGVtZW50SW1wbCAmZmllbGRTZXQgPSBzdGF0aWNf
Y2FzdDxIVE1MRmllbGRTZXRFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICByZXR1cm4gVW5k
ZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50OjpsYWJlbEdldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MTGFiZWxFbGVtZW50SW1wbCYgbGFi
ZWwgPSAqc3RhdGljX2Nhc3Q8SFRNTExhYmVsRWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIHN3
aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIEZpZWxkU2V0Rm9ybTogICAgICAgICAgICByZXR1cm4g
Z2V0RE9NTm9kZShleGVjLGZpZWxkU2V0LmZvcm0oKSk7IC8vIHR5cGUgSFRNTEZvcm1FbGVtZW50
CisgICAgICAgIGNhc2UgTGFiZWxGb3JtOiAgICAgICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4
ZWMsbGFiZWwuZm9ybSgpKTsgLy8gdHlwZSBIVE1MRm9ybUVsZW1lbnQKKyAgICAgICAgY2FzZSBM
YWJlbEFjY2Vzc0tleTogICAgICAgcmV0dXJuIFN0cmluZyhsYWJlbC5hY2Nlc3NLZXkoKSk7Cisg
ICAgICAgIGNhc2UgTGFiZWxIdG1sRm9yOiAgICAgICAgIHJldHVybiBTdHJpbmcobGFiZWwuaHRt
bEZvcigpKTsKICAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfTEVHRU5EOiB7Ci0gICAg
SFRNTExlZ2VuZEVsZW1lbnRJbXBsICZsZWdlbmQgPSBzdGF0aWNfY2FzdDxIVE1MTGVnZW5kRWxl
bWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1
ZSBIVE1MRWxlbWVudDo6ZmllbGRTZXRHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4p
IGNvbnN0Cit7CisgICAgSFRNTEZpZWxkU2V0RWxlbWVudEltcGwmIGZpZWxkU2V0ID0gKnN0YXRp
Y19jYXN0PEhUTUxGaWVsZFNldEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBpZiAodG9rZW4g
PT0gRmllbGRTZXRGb3JtKQorICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLGZpZWxkU2V0
LmZvcm0oKSk7IC8vIHR5cGUgSFRNTEZvcm1FbGVtZW50CisgICAgcmV0dXJuIFVuZGVmaW5lZCgp
OworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6bGVnZW5kR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywg
aW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxMZWdlbmRFbGVtZW50SW1wbCYgbGVnZW5kID0g
KnN0YXRpY19jYXN0PEhUTUxMZWdlbmRFbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNo
ICh0b2tlbikgewotICAgIGNhc2UgTGVnZW5kRm9ybTogICAgICAgICAgICByZXR1cm4gZ2V0RE9N
Tm9kZShleGVjLGxlZ2VuZC5mb3JtKCkpOyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVudAotICAgIGNh
c2UgTGVnZW5kQWNjZXNzS2V5OiAgICAgICByZXR1cm4gU3RyaW5nKGxlZ2VuZC5hY2Nlc3NLZXko
KSk7Ci0gICAgY2FzZSBMZWdlbmRBbGlnbjogICAgICAgICAgIHJldHVybiBTdHJpbmcobGVnZW5k
LmFsaWduKCkpOworICAgICAgICBjYXNlIExlZ2VuZEZvcm06ICAgICAgICAgICAgcmV0dXJuIGdl
dERPTU5vZGUoZXhlYyxsZWdlbmQuZm9ybSgpKTsgLy8gdHlwZSBIVE1MRm9ybUVsZW1lbnQKKyAg
ICAgICAgY2FzZSBMZWdlbmRBY2Nlc3NLZXk6ICAgICAgIHJldHVybiBTdHJpbmcobGVnZW5kLmFj
Y2Vzc0tleSgpKTsKKyAgICAgICAgY2FzZSBMZWdlbmRBbGlnbjogICAgICAgICAgIHJldHVybiBT
dHJpbmcobGVnZW5kLmFsaWduKCkpOwogICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9V
TDogewotICAgIEhUTUxVTGlzdEVsZW1lbnRJbXBsICZ1TGlzdCA9IHN0YXRpY19jYXN0PEhUTUxV
TGlzdEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30K
KworVmFsdWUgSFRNTEVsZW1lbnQ6OnVMaXN0R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRv
a2VuKSBjb25zdAoreworICAgIEhUTUxVTGlzdEVsZW1lbnRJbXBsJiB1TGlzdCA9ICpzdGF0aWNf
Y2FzdDxIVE1MVUxpc3RFbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tlbikg
ewogICAgIGNhc2UgVUxpc3RDb21wYWN0OiAgICAgICAgIHJldHVybiBCb29sZWFuKHVMaXN0LmNv
bXBhY3QoKSk7CiAgICAgY2FzZSBVTGlzdFR5cGU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh1
TGlzdC50eXBlKCkpOwogICAgIH0KLSAgfQotICBicmVhazsKKyAgICByZXR1cm4gVW5kZWZpbmVk
KCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAgIC8vIENoZWNrIG91ciBzZXQgb2YgZ2VuZXJp
YyBwcm9wZXJ0aWVzIGZpcnN0LgorICAgIEhUTUxFbGVtZW50SW1wbCAmZWxlbWVudCA9ICpzdGF0
aWNfY2FzdDxIVE1MRWxlbWVudEltcGwgKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7
CisgICAgICAgIGNhc2UgRWxlbWVudElkOgorICAgICAgICAvLyBpaHQuY29tIHJlbGllcyBvbiB0
aGlzIHZhbHVlIGJlaW5nICIiIHdoZW4gbm8gaWQgaXMgcHJlc2VudC4gIE90aGVyIGJyb3dzZXJz
IGRvIHRoaXMgYXMgd2VsbC4KKyAgICAgICAgLy8gU28gd2UgdXNlIFN0cmluZygpIGluc3RlYWQg
b2YgU3RyaW5nKCkgaGVyZS4KKyAgICAgICAgcmV0dXJuIFN0cmluZyhlbGVtZW50LmlkRE9NKCkp
OworICAgICAgICBjYXNlIEVsZW1lbnRUaXRsZToKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmco
ZWxlbWVudC50aXRsZSgpKTsKKyAgICAgICAgY2FzZSBFbGVtZW50TGFuZzoKKyAgICAgICAgICAg
IHJldHVybiBTdHJpbmcoZWxlbWVudC5sYW5nKCkpOworICAgICAgICBjYXNlIEVsZW1lbnREaXI6
CisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGVsZW1lbnQuZGlyKCkpOworICAgICAgICBjYXNl
IEVsZW1lbnRDbGFzc05hbWU6CisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGVsZW1lbnQuY2xh
c3NOYW1lKCkpOworICAgICAgICBjYXNlIEVsZW1lbnRJbm5lckhUTUw6CisgICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKGVsZW1lbnQuaW5uZXJIVE1MKCkpOworICAgICAgICBjYXNlIEVsZW1lbnRJ
bm5lclRleHQ6CisgICAgICAgICAgICBpZiAoRG9jdW1lbnRJbXBsKiBkb2MgPSBpbXBsKCktPmdl
dERvY3VtZW50KCkpCisgICAgICAgICAgICAgICAgZG9jLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5k
aW5nU3R5bGVzaGVldHMoKTsKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcoZWxlbWVudC5pbm5l
clRleHQoKSk7CisgICAgICAgIGNhc2UgRWxlbWVudE91dGVySFRNTDoKKyAgICAgICAgICAgIHJl
dHVybiBTdHJpbmcoZWxlbWVudC5vdXRlckhUTUwoKSk7CisgICAgICAgIGNhc2UgRWxlbWVudE91
dGVyVGV4dDoKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcoZWxlbWVudC5vdXRlclRleHQoKSk7
CisgICAgICAgIGNhc2UgRWxlbWVudERvY3VtZW50OgorICAgICAgICAgICAgcmV0dXJuIGdldERP
TU5vZGUoZXhlYyxlbGVtZW50Lm93bmVyRG9jdW1lbnQoKSk7CisgICAgICAgIGNhc2UgRWxlbWVu
dENoaWxkcmVuOgorICAgICAgICAgICAgcmV0dXJuIGdldEhUTUxDb2xsZWN0aW9uKGV4ZWMsIGVs
ZW1lbnQuY2hpbGRyZW4oKS5nZXQoKSk7CisgICAgICAgIGNhc2UgRWxlbWVudENvbnRlbnRFZGl0
YWJsZToKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcoZWxlbWVudC5jb250ZW50RWRpdGFibGUo
KSk7CisgICAgICAgIGNhc2UgRWxlbWVudElzQ29udGVudEVkaXRhYmxlOgorICAgICAgICAgICAg
cmV0dXJuIEJvb2xlYW4oZWxlbWVudC5pc0NvbnRlbnRFZGl0YWJsZSgpKTsKKyAgICB9CisKKyAg
ICAvLyBOb3cgY2hlY2sgdGhlIHByb3BlcnRpZXMgc3BlY2lmaWMgdG8gb3VyIGVsZW1lbnQgdHlw
ZS4KKyAgICBjb25zdCBHZXRTZXRJbmZvKiBpbmZvID0gZ2V0U2V0SW5mbygpOworICAgIGlmIChp
bmZvICYmIGluZm8tPm1fZ2V0dGVyKQorICAgICAgICByZXR1cm4gKHRoaXMtPiooaW5mby0+bV9n
ZXR0ZXIpKShleGVjLCB0b2tlbik7CisKKy8qICAgIHN3aXRjaCAoZWxlbWVudC5pZCgpKSB7CiAg
IGNhc2UgSURfT0w6IHsKICAgICBIVE1MT0xpc3RFbGVtZW50SW1wbCAmb0xpc3QgPSBzdGF0aWNf
Y2FzdDxIVE1MT0xpc3RFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKICAgICBzd2l0Y2ggKHRva2Vu
KSB7CkBAIC0xOTg0LDQxICsyMTM3LDggQEAgVmFsdWUgS0pTOjpIVE1MRWxlbWVudDo6Z2V0VmFs
dWVQcm9wZXJ0eQogICB9CiAgIH0gLy8geGVtYWNzIChvciBhcm50KSBjb3VsZCBiZSBhIGJpdCBz
bWFydGVyIHdoZW4gaXQgY29tZXMgdG8gaW5kZW50aW5nIHN3aXRjaCgpZXMgOykKICAgLy8gaXRz
IG5vdCBhcm50IHRvIGJsYW1lIC0gaXRzIHRoZSBvcmlnaW5hbCBTdHJvdXN0cnVwIHN0eWxlIHdl
IGxpa2UgOikgKERpcmspCisqLwogCi0gIC8vIGdlbmVyaWMgcHJvcGVydGllcwotICBzd2l0Y2gg
KHRva2VuKSB7Ci0gIGNhc2UgRWxlbWVudElkOgotICAgICAgLy8gaWh0LmNvbSByZWxpZXMgb24g
dGhpcyB2YWx1ZSBiZWluZyAiIiB3aGVuIG5vIGlkIGlzIHByZXNlbnQuICBPdGhlciBicm93c2Vy
cyBkbyB0aGlzIGFzIHdlbGwuCi0gICAgICAvLyBTbyB3ZSB1c2UgU3RyaW5nKCkgaW5zdGVhZCBv
ZiBTdHJpbmcoKSBoZXJlLgotICAgIHJldHVybiBTdHJpbmcoZWxlbWVudC5pZERPTSgpKTsKLSAg
Y2FzZSBFbGVtZW50VGl0bGU6Ci0gICAgcmV0dXJuIFN0cmluZyhlbGVtZW50LnRpdGxlKCkpOwot
ICBjYXNlIEVsZW1lbnRMYW5nOgotICAgIHJldHVybiBTdHJpbmcoZWxlbWVudC5sYW5nKCkpOwot
ICBjYXNlIEVsZW1lbnREaXI6Ci0gICAgcmV0dXJuIFN0cmluZyhlbGVtZW50LmRpcigpKTsKLSAg
Y2FzZSBFbGVtZW50Q2xhc3NOYW1lOgotICAgIHJldHVybiBTdHJpbmcoZWxlbWVudC5jbGFzc05h
bWUoKSk7Ci0gIGNhc2UgRWxlbWVudElubmVySFRNTDoKLSAgICByZXR1cm4gU3RyaW5nKGVsZW1l
bnQuaW5uZXJIVE1MKCkpOwotICBjYXNlIEVsZW1lbnRJbm5lclRleHQ6Ci0gICAgaWYgKERvY3Vt
ZW50SW1wbCogZG9jID0gaW1wbCgpLT5nZXREb2N1bWVudCgpKQotICAgICAgZG9jLT51cGRhdGVM
YXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKLSAgICByZXR1cm4gU3RyaW5nKGVsZW1l
bnQuaW5uZXJUZXh0KCkpOwotICBjYXNlIEVsZW1lbnRPdXRlckhUTUw6Ci0gICAgcmV0dXJuIFN0
cmluZyhlbGVtZW50Lm91dGVySFRNTCgpKTsKLSAgY2FzZSBFbGVtZW50T3V0ZXJUZXh0OgotICAg
IHJldHVybiBTdHJpbmcoZWxlbWVudC5vdXRlclRleHQoKSk7Ci0gIGNhc2UgRWxlbWVudERvY3Vt
ZW50OgotICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsZWxlbWVudC5vd25lckRvY3VtZW50KCkp
OwotICBjYXNlIEVsZW1lbnRDaGlsZHJlbjoKLSAgICByZXR1cm4gZ2V0SFRNTENvbGxlY3Rpb24o
ZXhlYywgZWxlbWVudC5jaGlsZHJlbigpLmdldCgpKTsKLSAgY2FzZSBFbGVtZW50Q29udGVudEVk
aXRhYmxlOgotICAgIHJldHVybiBTdHJpbmcoZWxlbWVudC5jb250ZW50RWRpdGFibGUoKSk7Ci0g
IGNhc2UgRWxlbWVudElzQ29udGVudEVkaXRhYmxlOgotICAgIHJldHVybiBCb29sZWFuKGVsZW1l
bnQuaXNDb250ZW50RWRpdGFibGUoKSk7Ci0gIC8vICMjIyB3aGF0IGFib3V0IHN0eWxlPyBvciBp
cyB0aGlzIHVzZWQgaW5zdGVhZCBmb3IgRE9NMiBzdHlsZXNoZWV0cz8KLSAgfQogICBrZFdhcm5p
bmcoKSA8PCAiSFRNTEVsZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkgdW5oYW5kbGVkIHRva2VuICIg
PDwgdG9rZW4gPDwgZW5kbDsKICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQpAQCAtMjAyNiw0MCAr
MjE0NiwzMyBAQCBWYWx1ZSBLSlM6OkhUTUxFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5CiBib29s
IEtKUzo6SFRNTEVsZW1lbnQ6Omhhc1Byb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRl
bnRpZmllciAmcHJvcGVydHlOYW1lKSBjb25zdAogewogI2lmZGVmIEtKU19WRVJCT1NFCi0gIC8v
a2REZWJ1Zyg2MDcwKSA8PCAiSFRNTEVsZW1lbnQ6Omhhc1Byb3BlcnR5ICIgPDwgcHJvcGVydHlO
YW1lLnFzdHJpbmcoKSA8PCBlbmRsOworICAgIC8va2REZWJ1Zyg2MDcwKSA8PCAiSFRNTEVsZW1l
bnQ6Omhhc1Byb3BlcnR5ICIgPDwgcHJvcGVydHlOYW1lLnFzdHJpbmcoKSA8PCBlbmRsOwogI2Vu
ZGlmCi0gIEhUTUxFbGVtZW50SW1wbCAmZWxlbWVudCA9ICpzdGF0aWNfY2FzdDxIVE1MRWxlbWVu
dEltcGwgKj4oaW1wbCgpKTsKLSAgLy8gRmlyc3QgbG9vayBhdCBkeW5hbWljIHByb3BlcnRpZXMg
LSBrZWVwIHRoaXMgaW4gc3luYyB3aXRoIHRyeUdldAotICBzd2l0Y2ggKGVsZW1lbnQuaWQoKSkg
ewotICAgIGNhc2UgSURfRk9STTogewotICAgICAgSFRNTEZvcm1FbGVtZW50SW1wbCAmZm9ybSA9
IHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICAvLyBD
aGVjayBpZiB3ZSdyZSByZXRyaWV2aW5nIGFuIGVsZW1lbnQgKGJ5IGluZGV4IG9yIGJ5IG5hbWUp
Ci0gICAgICBib29sIG9rOwotICAgICAgdWludCB1ID0gcHJvcGVydHlOYW1lLnRvVUxvbmcoJm9r
KTsKLSAgICAgIGlmIChvayAmJiBmb3JtLmVsZW1lbnRzKCktPml0ZW0odSkpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgaWYgKGZvcm0uZWxlbWVudHMoKS0+bmFtZWRJdGVtKHByb3BlcnR5
TmFtZS5zdHJpbmcoKSkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgYnJlYWs7CisgICAg
SFRNTEVsZW1lbnRJbXBsICZlbGVtZW50ID0gKnN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCAq
PihpbXBsKCkpOworICAgIC8vIEZpcnN0IGxvb2sgYXQgZHluYW1pYyBwcm9wZXJ0aWVzIC0ga2Vl
cCB0aGlzIGluIHN5bmMgd2l0aCB0cnlHZXQKKyAgICBpZiAoZWxlbWVudC5oYXNMb2NhbE5hbWUo
SFRNTE5hbWVzOjpmb3JtKCkpKSB7CisgICAgICAgIEhUTUxGb3JtRWxlbWVudEltcGwgJmZvcm0g
PSBzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgICAgICAv
LyBDaGVjayBpZiB3ZSdyZSByZXRyaWV2aW5nIGFuIGVsZW1lbnQgKGJ5IGluZGV4IG9yIGJ5IG5h
bWUpCisgICAgICAgIGJvb2wgb2s7CisgICAgICAgIHVpbnQgdSA9IHByb3BlcnR5TmFtZS50b1VM
b25nKCZvayk7CisgICAgICAgIGlmIChvayAmJiBmb3JtLmVsZW1lbnRzKCktPml0ZW0odSkpCisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKGZvcm0uZWxlbWVudHMoKS0+bmFt
ZWRJdGVtKHByb3BlcnR5TmFtZS5zdHJpbmcoKSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpzZWxl
Y3QoKSkpIHsKKyAgICAgICAgSFRNTFNlbGVjdEVsZW1lbnRJbXBsICZzZWxlY3QgPSBzdGF0aWNf
Y2FzdDxIVE1MU2VsZWN0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgICAgIGJvb2wgb2s7
CisgICAgICAgIHVpbnQgdSA9IHByb3BlcnR5TmFtZS50b1VMb25nKCZvayk7CisgICAgICAgIGlm
IChvayAmJiBzZWxlY3Qub3B0aW9uc0hUTUxDb2xsZWN0aW9uKCktPml0ZW0odSkpCisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgY2FzZSBJRF9TRUxFQ1Q6IHsKLSAgICAgIEhU
TUxTZWxlY3RFbGVtZW50SW1wbCAmc2VsZWN0ID0gc3RhdGljX2Nhc3Q8SFRNTFNlbGVjdEVsZW1l
bnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgYm9vbCBvazsKLSAgICAgIHVpbnQgdSA9IHByb3Bl
cnR5TmFtZS50b1VMb25nKCZvayk7Ci0gICAgICBpZiAob2sgJiYgc2VsZWN0Lm9wdGlvbnNIVE1M
Q29sbGVjdGlvbigpLT5pdGVtKHUpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIGJyZWFr
OwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXR1cm4gRE9N
RWxlbWVudDo6aGFzUHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lKTsKKyAgICByZXR1cm4gRE9N
RWxlbWVudDo6aGFzUHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lKTsKIH0KIAogVVN0cmluZyBL
SlM6OkhUTUxFbGVtZW50Ojp0b1N0cmluZyhFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0CiB7Ci0gIGlm
IChpbXBsKCktPmlkKCkgPT0gSURfQSkKKyAgaWYgKGltcGwoKS0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OmEoKSkpCiAgICAgcmV0dXJuIFVTdHJpbmcoc3RhdGljX2Nhc3Q8Y29uc3QgSFRNTEFuY2hv
ckVsZW1lbnRJbXBsICo+KGltcGwoKSktPmhyZWYoKSk7CiAgIGVsc2UKICAgICByZXR1cm4gRE9N
RWxlbWVudDo6dG9TdHJpbmcoZXhlYyk7CkBAIC0yMDY4LDE0ICsyMTgxLDExIEBAIFVTdHJpbmcg
S0pTOjpIVE1MRWxlbWVudDo6dG9TdHJpbmcoRXhlY1MKIHN0YXRpYyBIVE1MRm9ybUVsZW1lbnRJ
bXBsICpnZXRGb3JtKEhUTUxFbGVtZW50SW1wbCAqZWxlbWVudCkKIHsKICAgaWYgKGVsZW1lbnQt
PmlzR2VuZXJpY0Zvcm1FbGVtZW50KCkpCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxHZW5l
cmljRm9ybUVsZW1lbnRJbXBsICo+KGVsZW1lbnQpLT5mb3JtKCk7Ci0KLSAgc3dpdGNoIChlbGVt
ZW50LT5pZCgpKSB7Ci0gICAgY2FzZSBJRF9MQUJFTDoKKyAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbCAqPihlbGVtZW50KS0+Zm9ybSgpOworICBpZiAo
ZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmxhYmVsKCkpKQogICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PEhUTUxMYWJlbEVsZW1lbnRJbXBsICo+KGVsZW1lbnQpLT5mb3JtKCk7Ci0gICAg
Y2FzZSBJRF9PQkpFQ1Q6CisgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b2Jq
ZWN0KCkpKQogICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxPYmplY3RFbGVtZW50SW1wbCAq
PihlbGVtZW50KS0+Zm9ybSgpOwotICB9CiAKICAgcmV0dXJuIDA7CiB9CkBAIC0yMDk3LDcgKzIy
MDcsNyBAQCB2b2lkIEtKUzo6SFRNTEVsZW1lbnQ6OnB1c2hFdmVudEhhbmRsZXJTCiAgICAgc2Nv
cGUucHVzaChzdGF0aWNfY2FzdDxPYmplY3RJbXAgKj4oZ2V0RE9NTm9kZShleGVjLCBmb3JtKSkp
OwogICBlbHNlIHsKICAgICBOb2RlSW1wbCAqZm9ybSA9IGVsZW1lbnQtPnBhcmVudE5vZGUoKTsK
LSAgICB3aGlsZSAoZm9ybSAmJiBmb3JtLT5pZCgpICE9IElEX0ZPUk0pCisgICAgd2hpbGUgKGZv
cm0gJiYgIWZvcm0tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpmb3JtKCkpKQogICAgICAgZm9ybSA9
IGZvcm0tPnBhcmVudE5vZGUoKTsKICAgICAKICAgICBpZiAoZm9ybSkKQEAgLTIxMTcsMTYyICsy
MjI3LDE1MSBAQCBIVE1MRWxlbWVudEZ1bmN0aW9uOjpIVE1MRWxlbWVudEZ1bmN0aW9uCiAKIFZh
bHVlIEtKUzo6SFRNTEVsZW1lbnRGdW5jdGlvbjo6dHJ5Q2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9i
amVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCAmYXJncykKIHsKLSAgaWYgKCF0aGlzT2JqLmluaGVy
aXRzKCZLSlM6OkhUTUxFbGVtZW50OjppbmZvKSkgewotICAgIE9iamVjdCBlcnIgPSBFcnJvcjo6
Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsKLSAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKLSAg
ICByZXR1cm4gZXJyOwotICB9Ci0gIGtkRGVidWcoKSA8PCAiS0pTOjpIVE1MRWxlbWVudEZ1bmN0
aW9uOjp0cnlDYWxsICIgPDwgZW5kbDsKLSAgRE9NRXhjZXB0aW9uVHJhbnNsYXRvciBleGNlcHRp
b24oZXhlYyk7Ci0gIEhUTUxFbGVtZW50SW1wbCAmZWxlbWVudCA9ICpzdGF0aWNfY2FzdDxIVE1M
RWxlbWVudEltcGwgKj4oc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQgKj4odGhpc09iai5pbXAoKSkt
PmltcGwoKSk7Ci0KLSAgc3dpdGNoIChlbGVtZW50LmlkKCkpIHsKLSAgICBjYXNlIElEX0ZPUk06
IHsKLSAgICAgIEhUTUxGb3JtRWxlbWVudEltcGwgJmZvcm0gPSBzdGF0aWNfY2FzdDxIVE1MRm9y
bUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1l
bnQ6OkZvcm1TdWJtaXQpIHsKLSAgICAgICAgZm9ybS5zdWJtaXQoKTsKLSAgICAgICAgcmV0dXJu
IFVuZGVmaW5lZCgpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxl
bWVudDo6Rm9ybVJlc2V0KSB7Ci0gICAgICAgIGZvcm0ucmVzZXQoKTsKLSAgICAgICAgcmV0dXJu
IFVuZGVmaW5lZCgpOwotICAgICAgfQorICAgIGlmICghdGhpc09iai5pbmhlcml0cygmS0pTOjpI
VE1MRWxlbWVudDo6aW5mbykpIHsKKyAgICAgICAgT2JqZWN0IGVyciA9IEVycm9yOjpjcmVhdGUo
ZXhlYyxUeXBlRXJyb3IpOworICAgICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKKyAgICAg
ICAgcmV0dXJuIGVycjsKKyAgICB9CisgICAga2REZWJ1ZygpIDw8ICJLSlM6OkhUTUxFbGVtZW50
RnVuY3Rpb246OnRyeUNhbGwgIiA8PCBlbmRsOworICAgIERPTUV4Y2VwdGlvblRyYW5zbGF0b3Ig
ZXhjZXB0aW9uKGV4ZWMpOworICAgIEhUTUxFbGVtZW50SW1wbCAmZWxlbWVudCA9ICpzdGF0aWNf
Y2FzdDxIVE1MRWxlbWVudEltcGwgKj4oc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQgKj4odGhpc09i
ai5pbXAoKSktPmltcGwoKSk7CisKKyAgICBpZiAoZWxlbWVudC5oYXNMb2NhbE5hbWUoSFRNTE5h
bWVzOjpmb3JtKCkpKSB7CisgICAgICAgIEhUTUxGb3JtRWxlbWVudEltcGwgJmZvcm0gPSBzdGF0
aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgICAgICBpZiAoaWQg
PT0gS0pTOjpIVE1MRWxlbWVudDo6Rm9ybVN1Ym1pdCkgeworICAgICAgICAgICAgZm9ybS5zdWJt
aXQoKTsKKyAgICAgICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKKyAgICAgICAgfQorICAgICAg
ICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpGb3JtUmVzZXQpIHsKKyAgICAgICAg
ICAgIGZvcm0ucmVzZXQoKTsKKyAgICAgICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKKyAgICAg
ICAgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX1NFTEVDVDogewotICAgICAgSFRN
TFNlbGVjdEVsZW1lbnRJbXBsICZzZWxlY3QgPSBzdGF0aWNfY2FzdDxIVE1MU2VsZWN0RWxlbWVu
dEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6U2Vs
ZWN0QWRkKSB7Ci0gICAgICAgIHNlbGVjdC5hZGQodG9IVE1MRWxlbWVudChhcmdzWzBdKSwgdG9I
VE1MRWxlbWVudChhcmdzWzFdKSk7Ci0gICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKLSAgICAg
IH0KLSAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlNlbGVjdFJlbW92ZSkg
ewotICAgICAgICBzZWxlY3QucmVtb3ZlKGludChhcmdzWzBdLnRvTnVtYmVyKGV4ZWMpKSk7Ci0g
ICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGlkID09
IEtKUzo6SFRNTEVsZW1lbnQ6OlNlbGVjdEJsdXIpIHsKLSAgICAgICAgc2VsZWN0LmJsdXIoKTsK
LSAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoaWQg
PT0gS0pTOjpIVE1MRWxlbWVudDo6U2VsZWN0Rm9jdXMpIHsKLSAgICAgICAgc2VsZWN0LmZvY3Vz
KCk7Ci0gICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKLSAgICAgIH0KKyAgICBlbHNlIGlmIChl
bGVtZW50Lmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnNlbGVjdCgpKSkgeworICAgICAgICBIVE1M
U2VsZWN0RWxlbWVudEltcGwgJnNlbGVjdCA9IHN0YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50
SW1wbCAmPihlbGVtZW50KTsKKyAgICAgICAgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlNl
bGVjdEFkZCkgeworICAgICAgICAgICAgc2VsZWN0LmFkZCh0b0hUTUxFbGVtZW50KGFyZ3NbMF0p
LCB0b0hUTUxFbGVtZW50KGFyZ3NbMV0pKTsKKyAgICAgICAgICAgIHJldHVybiBVbmRlZmluZWQo
KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpT
ZWxlY3RSZW1vdmUpIHsKKyAgICAgICAgICAgIHNlbGVjdC5yZW1vdmUoaW50KGFyZ3NbMF0udG9O
dW1iZXIoZXhlYykpKTsKKyAgICAgICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKKyAgICAgICAg
fQorICAgICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpTZWxlY3RCbHVyKSB7
CisgICAgICAgICAgICBzZWxlY3QuYmx1cigpOworICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5l
ZCgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6
OlNlbGVjdEZvY3VzKSB7CisgICAgICAgICAgICBzZWxlY3QuZm9jdXMoKTsKKyAgICAgICAgICAg
IHJldHVybiBVbmRlZmluZWQoKTsKKyAgICAgICAgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBj
YXNlIElEX0lOUFVUOiB7Ci0gICAgICBIVE1MSW5wdXRFbGVtZW50SW1wbCAmaW5wdXQgPSBzdGF0
aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIGlmIChpZCA9
PSBLSlM6OkhUTUxFbGVtZW50OjpJbnB1dEJsdXIpIHsKLSAgICAgICAgaW5wdXQuYmx1cigpOwot
ICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChpZCA9
PSBLSlM6OkhUTUxFbGVtZW50OjpJbnB1dEZvY3VzKSB7Ci0gICAgICAgIGlucHV0LmZvY3VzKCk7
Ci0gICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGlk
ID09IEtKUzo6SFRNTEVsZW1lbnQ6OklucHV0U2VsZWN0KSB7Ci0gICAgICAgIGlucHV0LnNlbGVj
dCgpOwotICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlm
IChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpJbnB1dENsaWNrKSB7Ci0gICAgICAgIGlucHV0LmNs
aWNrKCk7Ci0gICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKLSAgICAgIH0KKyAgICBlbHNlIGlm
IChlbGVtZW50Lmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmlucHV0KCkpKSB7CisgICAgICAgIEhU
TUxJbnB1dEVsZW1lbnRJbXBsICZpbnB1dCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnRJ
bXBsICY+KGVsZW1lbnQpOworICAgICAgICBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6SW5w
dXRCbHVyKSB7CisgICAgICAgICAgICBpbnB1dC5ibHVyKCk7CisgICAgICAgICAgICByZXR1cm4g
VW5kZWZpbmVkKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1M
RWxlbWVudDo6SW5wdXRGb2N1cykgeworICAgICAgICAgICAgaW5wdXQuZm9jdXMoKTsKKyAgICAg
ICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChp
ZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpJbnB1dFNlbGVjdCkgeworICAgICAgICAgICAgaW5wdXQu
c2VsZWN0KCk7CisgICAgICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6SW5wdXRDbGljaykgeworICAg
ICAgICAgICAgaW5wdXQuY2xpY2soKTsKKyAgICAgICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsK
KyAgICAgICAgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0JVVFRPTjogewotICAg
ICAgSFRNTEJ1dHRvbkVsZW1lbnRJbXBsICZidXR0b24gPSBzdGF0aWNfY2FzdDxIVE1MQnV0dG9u
RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICAKLSAgICAgIGlmIChpZCA9PSBLSlM6OkhU
TUxFbGVtZW50OjpCdXR0b25CbHVyKSB7Ci0gICAgICAgIGJ1dHRvbi5ibHVyKCk7Ci0gICAgICAg
IHJldHVybiBVbmRlZmluZWQoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6
SFRNTEVsZW1lbnQ6OkJ1dHRvbkZvY3VzKSB7Ci0gICAgICAgIGJ1dHRvbi5mb2N1cygpOwotICAg
ICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9CisgICAgZWxzZSBpZiAoZWxlbWVudC5o
YXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpidXR0b24oKSkpIHsKKyAgICAgICAgSFRNTEJ1dHRvbkVs
ZW1lbnRJbXBsICZidXR0b24gPSBzdGF0aWNfY2FzdDxIVE1MQnV0dG9uRWxlbWVudEltcGwgJj4o
ZWxlbWVudCk7CisgICAgICAgIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpCdXR0b25CbHVy
KSB7CisgICAgICAgICAgICBidXR0b24uYmx1cigpOworICAgICAgICAgICAgcmV0dXJuIFVuZGVm
aW5lZCgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1l
bnQ6OkJ1dHRvbkZvY3VzKSB7CisgICAgICAgICAgICBidXR0b24uZm9jdXMoKTsKKyAgICAgICAg
ICAgIHJldHVybiBVbmRlZmluZWQoKTsKKyAgICAgICAgfQogICAgIH0KLSAgICBicmVhazsKLSAg
ICBjYXNlIElEX1RFWFRBUkVBOiB7Ci0gICAgICBIVE1MVGV4dEFyZWFFbGVtZW50SW1wbCAmdGV4
dGFyZWEgPSBzdGF0aWNfY2FzdDxIVE1MVGV4dEFyZWFFbGVtZW50SW1wbCAmPihlbGVtZW50KTsK
LSAgICAgIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUZXh0QXJlYUJsdXIpIHsKLSAgICAg
ICAgdGV4dGFyZWEuYmx1cigpOwotICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9
Ci0gICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUZXh0QXJlYUZvY3VzKSB7
Ci0gICAgICAgIHRleHRhcmVhLmZvY3VzKCk7Ci0gICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsK
LSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRleHRBcmVh
U2VsZWN0KSB7Ci0gICAgICAgIHRleHRhcmVhLnNlbGVjdCgpOwotICAgICAgICByZXR1cm4gVW5k
ZWZpbmVkKCk7Ci0gICAgICB9CisgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNMb2NhbE5hbWUoSFRN
TE5hbWVzOjp0ZXh0YXJlYSgpKSkgeworICAgICAgICBIVE1MVGV4dEFyZWFFbGVtZW50SW1wbCAm
dGV4dGFyZWEgPSBzdGF0aWNfY2FzdDxIVE1MVGV4dEFyZWFFbGVtZW50SW1wbCAmPihlbGVtZW50
KTsKKyAgICAgICAgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRleHRBcmVhQmx1cikgewor
ICAgICAgICAgICAgdGV4dGFyZWEuYmx1cigpOworICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5l
ZCgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6
OlRleHRBcmVhRm9jdXMpIHsKKyAgICAgICAgICAgIHRleHRhcmVhLmZvY3VzKCk7CisgICAgICAg
ICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoaWQg
PT0gS0pTOjpIVE1MRWxlbWVudDo6VGV4dEFyZWFTZWxlY3QpIHsKKyAgICAgICAgICAgIHRleHRh
cmVhLnNlbGVjdCgpOworICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAgICAgICB9
CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfQTogewotICAgICAgSFRNTEFuY2hvckVs
ZW1lbnRJbXBsICZhbmNob3IgPSBzdGF0aWNfY2FzdDxIVE1MQW5jaG9yRWxlbWVudEltcGwgJj4o
ZWxlbWVudCk7Ci0gICAgICBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6QW5jaG9yQmx1cikg
ewotICAgICAgICBhbmNob3IuYmx1cigpOwotICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0g
ICAgICB9Ci0gICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpBbmNob3JGb2N1
cykgewotICAgICAgICBhbmNob3IuZm9jdXMoKTsKLSAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgp
OwotICAgICAgfSAKLSAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OkFuY2hv
clRvU3RyaW5nKSB7Ci0JcmV0dXJuIFN0cmluZyh0aGlzT2JqLnRvU3RyaW5nKGV4ZWMpKTsKLSAg
ICAgIH0KKyAgICBlbHNlIGlmIChlbGVtZW50Lmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmEoKSkp
IHsKKyAgICAgICAgSFRNTEFuY2hvckVsZW1lbnRJbXBsICZhbmNob3IgPSBzdGF0aWNfY2FzdDxI
VE1MQW5jaG9yRWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgICAgIGlmIChpZCA9PSBLSlM6
OkhUTUxFbGVtZW50OjpBbmNob3JCbHVyKSB7CisgICAgICAgICAgICBhbmNob3IuYmx1cigpOwor
ICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAgICAgICB9CisgICAgICAgIGVsc2Ug
aWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OkFuY2hvckZvY3VzKSB7CisgICAgICAgICAgICBh
bmNob3IuZm9jdXMoKTsKKyAgICAgICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKKyAgICAgICAg
fQorICAgICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpBbmNob3JUb1N0cmlu
ZykKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcodGhpc09iai50b1N0cmluZyhleGVjKSk7CiAg
ICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfVEFCTEU6IHsKLSAgICAgIEhUTUxUYWJsZUVs
ZW1lbnRJbXBsICZ0YWJsZSA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZUVsZW1lbnRJbXBsICY+KGVs
ZW1lbnQpOwotICAgICAgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRhYmxlQ3JlYXRlVEhl
YWQpCi0gICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsdGFibGUuY3JlYXRlVEhlYWQoKSk7
Ci0gICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUYWJsZURlbGV0ZVRIZWFk
KSB7Ci0gICAgICAgIHRhYmxlLmRlbGV0ZVRIZWFkKCk7Ci0gICAgICAgIHJldHVybiBVbmRlZmlu
ZWQoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRh
YmxlQ3JlYXRlVEZvb3QpCi0gICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsdGFibGUuY3Jl
YXRlVEZvb3QoKSk7Ci0gICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUYWJs
ZURlbGV0ZVRGb290KSB7Ci0gICAgICAgIHRhYmxlLmRlbGV0ZVRGb290KCk7Ci0gICAgICAgIHJl
dHVybiBVbmRlZmluZWQoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRN
TEVsZW1lbnQ6OlRhYmxlQ3JlYXRlQ2FwdGlvbikKLSAgICAgICAgcmV0dXJuIGdldERPTU5vZGUo
ZXhlYyx0YWJsZS5jcmVhdGVDYXB0aW9uKCkpOwotICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpI
VE1MRWxlbWVudDo6VGFibGVEZWxldGVDYXB0aW9uKSB7Ci0gICAgICAgIHRhYmxlLmRlbGV0ZUNh
cHRpb24oKTsKLSAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwotICAgICAgfQotICAgICAgZWxz
ZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6VGFibGVJbnNlcnRSb3cpCi0gICAgICAgIHJl
dHVybiBnZXRET01Ob2RlKGV4ZWMsdGFibGUuaW5zZXJ0Um93KGFyZ3NbMF0udG9JbnQzMihleGVj
KSwgZXhjZXB0aW9uKSk7Ci0gICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpU
YWJsZURlbGV0ZVJvdykgewotICAgICAgICB0YWJsZS5kZWxldGVSb3coYXJnc1swXS50b0ludDMy
KGV4ZWMpLCBleGNlcHRpb24pOwotICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9
CisgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0YWJsZSgpKSkg
eworICAgICAgICBIVE1MVGFibGVFbGVtZW50SW1wbCAmdGFibGUgPSBzdGF0aWNfY2FzdDxIVE1M
VGFibGVFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICAgICAgaWYgKGlkID09IEtKUzo6SFRN
TEVsZW1lbnQ6OlRhYmxlQ3JlYXRlVEhlYWQpCisgICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9k
ZShleGVjLHRhYmxlLmNyZWF0ZVRIZWFkKCkpOworICAgICAgICBlbHNlIGlmIChpZCA9PSBLSlM6
OkhUTUxFbGVtZW50OjpUYWJsZURlbGV0ZVRIZWFkKSB7CisgICAgICAgICAgICB0YWJsZS5kZWxl
dGVUSGVhZCgpOworICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAgICAgICB9Cisg
ICAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRhYmxlQ3JlYXRlVEZvb3Qp
CisgICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLHRhYmxlLmNyZWF0ZVRGb290KCkp
OworICAgICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUYWJsZURlbGV0ZVRG
b290KSB7CisgICAgICAgICAgICB0YWJsZS5kZWxldGVURm9vdCgpOworICAgICAgICAgICAgcmV0
dXJuIFVuZGVmaW5lZCgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6
SFRNTEVsZW1lbnQ6OlRhYmxlQ3JlYXRlQ2FwdGlvbikKKyAgICAgICAgICAgIHJldHVybiBnZXRE
T01Ob2RlKGV4ZWMsdGFibGUuY3JlYXRlQ2FwdGlvbigpKTsKKyAgICAgICAgZWxzZSBpZiAoaWQg
PT0gS0pTOjpIVE1MRWxlbWVudDo6VGFibGVEZWxldGVDYXB0aW9uKSB7CisgICAgICAgICAgICB0
YWJsZS5kZWxldGVDYXB0aW9uKCk7CisgICAgICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6VGFibGVJ
bnNlcnRSb3cpCisgICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLHRhYmxlLmluc2Vy
dFJvdyhhcmdzWzBdLnRvSW50MzIoZXhlYyksIGV4Y2VwdGlvbikpOworICAgICAgICBlbHNlIGlm
IChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUYWJsZURlbGV0ZVJvdykgeworICAgICAgICAgICAg
dGFibGUuZGVsZXRlUm93KGFyZ3NbMF0udG9JbnQzMihleGVjKSwgZXhjZXB0aW9uKTsKKyAgICAg
ICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKKyAgICAgICAgfQogICAgIH0KLSAgICBicmVhazsK
LSAgICBjYXNlIElEX1RIRUFEOgotICAgIGNhc2UgSURfVEJPRFk6Ci0gICAgY2FzZSBJRF9URk9P
VDogewotICAgICAgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsICZ0YWJsZVNlY3Rpb24gPSBz
dGF0aWNfY2FzdDxIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAg
ICBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6VGFibGVTZWN0aW9uSW5zZXJ0Um93KQotICAg
ICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLCB0YWJsZVNlY3Rpb24uaW5zZXJ0Um93KGFyZ3Nb
MF0udG9JbnQzMihleGVjKSwgZXhjZXB0aW9uKSk7Ci0gICAgICBlbHNlIGlmIChpZCA9PSBLSlM6
OkhUTUxFbGVtZW50OjpUYWJsZVNlY3Rpb25EZWxldGVSb3cpIHsKLSAgICAgICAgdGFibGVTZWN0
aW9uLmRlbGV0ZVJvdyhhcmdzWzBdLnRvSW50MzIoZXhlYyksIGV4Y2VwdGlvbik7Ci0gICAgICAg
IHJldHVybiBVbmRlZmluZWQoKTsKLSAgICAgIH0KKyAgICBlbHNlIGlmIChlbGVtZW50Lmhhc0xv
Y2FsTmFtZShIVE1MTmFtZXM6OnRoZWFkKCkpIHx8CisgICAgICAgICAgICAgZWxlbWVudC5oYXNM
b2NhbE5hbWUoSFRNTE5hbWVzOjp0Ym9keSgpKSB8fAorICAgICAgICAgICAgIGVsZW1lbnQuaGFz
TG9jYWxOYW1lKEhUTUxOYW1lczo6dGZvb3QoKSkpIHsKKyAgICAgICAgSFRNTFRhYmxlU2VjdGlv
bkVsZW1lbnRJbXBsICZ0YWJsZVNlY3Rpb24gPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVTZWN0aW9u
RWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgICAgIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVt
ZW50OjpUYWJsZVNlY3Rpb25JbnNlcnRSb3cpCisgICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9k
ZShleGVjLCB0YWJsZVNlY3Rpb24uaW5zZXJ0Um93KGFyZ3NbMF0udG9JbnQzMihleGVjKSwgZXhj
ZXB0aW9uKSk7CisgICAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRhYmxl
U2VjdGlvbkRlbGV0ZVJvdykgeworICAgICAgICAgICAgdGFibGVTZWN0aW9uLmRlbGV0ZVJvdyhh
cmdzWzBdLnRvSW50MzIoZXhlYyksIGV4Y2VwdGlvbik7CisgICAgICAgICAgICByZXR1cm4gVW5k
ZWZpbmVkKCk7CisgICAgICAgIH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9UUjog
ewotICAgICAgSFRNTFRhYmxlUm93RWxlbWVudEltcGwgJnRhYmxlUm93ID0gc3RhdGljX2Nhc3Q8
SFRNTFRhYmxlUm93RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBpZiAoaWQgPT0gS0pT
OjpIVE1MRWxlbWVudDo6VGFibGVSb3dJbnNlcnRDZWxsKQotICAgICAgICByZXR1cm4gZ2V0RE9N
Tm9kZShleGVjLHRhYmxlUm93Lmluc2VydENlbGwoYXJnc1swXS50b0ludDMyKGV4ZWMpLCBleGNl
cHRpb24pKTsKLSAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRhYmxlUm93
RGVsZXRlQ2VsbCkgewotICAgICAgICB0YWJsZVJvdy5kZWxldGVDZWxsKGFyZ3NbMF0udG9JbnQz
MihleGVjKSwgZXhjZXB0aW9uKTsKLSAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwotICAgICAg
fQorICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dHIoKSkpIHsK
KyAgICAgICAgSFRNTFRhYmxlUm93RWxlbWVudEltcGwgJnRhYmxlUm93ID0gc3RhdGljX2Nhc3Q8
SFRNTFRhYmxlUm93RWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgICAgIGlmIChpZCA9PSBL
SlM6OkhUTUxFbGVtZW50OjpUYWJsZVJvd0luc2VydENlbGwpCisgICAgICAgICAgICByZXR1cm4g
Z2V0RE9NTm9kZShleGVjLHRhYmxlUm93Lmluc2VydENlbGwoYXJnc1swXS50b0ludDMyKGV4ZWMp
LCBleGNlcHRpb24pKTsKKyAgICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6
VGFibGVSb3dEZWxldGVDZWxsKSB7CisgICAgICAgICAgICB0YWJsZVJvdy5kZWxldGVDZWxsKGFy
Z3NbMF0udG9JbnQzMihleGVjKSwgZXhjZXB0aW9uKTsKKyAgICAgICAgICAgIHJldHVybiBVbmRl
ZmluZWQoKTsKKyAgICAgICAgfQogICAgIH0KLSAgICBjYXNlIElEX01BUlFVRUU6IHsKKyAgICBl
bHNlIGlmIChlbGVtZW50Lmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om1hcnF1ZWUoKSkpIHsKICAg
ICAgICAgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6Ok1hcnF1ZWVTdGFydCAmJiBlbGVtZW50
LnJlbmRlcmVyKCkgJiYgCiAgICAgICAgICAgICBlbGVtZW50LnJlbmRlcmVyKCktPmxheWVyKCkg
JiYKICAgICAgICAgICAgIGVsZW1lbnQucmVuZGVyZXIoKS0+bGF5ZXIoKS0+bWFycXVlZSgpKSB7
CkBAIC0yMjg1LDkgKzIzODQsOSBAQCBWYWx1ZSBLSlM6OkhUTUxFbGVtZW50RnVuY3Rpb246OnRy
eUNhbGwoCiAgICAgICAgICAgICBlbGVtZW50LnJlbmRlcmVyKCktPmxheWVyKCktPm1hcnF1ZWUo
KS0+c3RvcCgpOwogICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogICAgICAgICB9Ci0g
ICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBjYXNlIElEX0NBTlZBUzogeworI2lmIEFQUExFX0NI
QU5HRVMKKyAgICBlbHNlIGlmIChlbGVtZW50Lmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmNhbnZh
cygpKSkgewogICAgICAgICBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6R2V0Q29udGV4dCkg
ewogICAgICAgICAgICAgaWYgKGFyZ3Muc2l6ZSgpID09IDAgfHwgKGFyZ3Muc2l6ZSgpID09IDEg
JiYgYXJnc1swXS50b1N0cmluZyhleGVjKS5xc3RyaW5nKCkubG93ZXIoKSA9PSAiMmQiKSkgewog
ICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QobmV3IENvbnRleHQyRCgmZWxlbWVudCkpOwpA
QCAtMjI5NSwyODEgKzIzOTQsMzE2IEBAIFZhbHVlIEtKUzo6SFRNTEVsZW1lbnRGdW5jdGlvbjo6
dHJ5Q2FsbCgKICAgICAgICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKICAgICAgICAgfQogICAg
IH0KLSAgICAKLSAgICBicmVhazsKLSAgfQorI2VuZGlmCiAKLSAgcmV0dXJuIFVuZGVmaW5lZCgp
OworICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAogdm9pZCBLSlM6OkhUTUxFbGVtZW50Ojp0
cnlQdXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIGNv
bnN0IFZhbHVlJiB2YWx1ZSwgaW50IGF0dHIpCiB7CiAjaWZkZWYgS0pTX1ZFUkJPU0UKLSAgRE9N
OjpET01TdHJpbmcgc3RyID0gdmFsdWUuaXNBKE51bGxUeXBlKSA/IERPTTo6RE9NU3RyaW5nKCkg
OiB2YWx1ZS50b1N0cmluZyhleGVjKS5zdHJpbmcoKTsKKyAgICBET006OkRPTVN0cmluZyBzdHIg
PSB2YWx1ZS5pc0EoTnVsbFR5cGUpID8gRE9NOjpET01TdHJpbmcoKSA6IHZhbHVlLnRvU3RyaW5n
KGV4ZWMpLnN0cmluZygpOwogI2VuZGlmCi0gIEhUTUxFbGVtZW50SW1wbCAmZWxlbWVudCA9ICpz
dGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwgKj4oaW1wbCgpKTsKKyAgICBIVE1MRWxlbWVudElt
cGwgJmVsZW1lbnQgPSAqc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KGltcGwoKSk7CiAj
aWZkZWYgS0pTX1ZFUkJPU0UKLSAga2REZWJ1Zyg2MDcwKSA8PCAiS0pTOjpIVE1MRWxlbWVudDo6
dHJ5UHV0ICIgPDwgcHJvcGVydHlOYW1lLnFzdHJpbmcoKQotICAgICAgICAgICAgICAgIDw8ICIg
dGhpc1RhZz0iIDw8IGVsZW1lbnQudGFnTmFtZSgpLnN0cmluZygpCi0gICAgICAgICAgICAgICAg
PDwgIiBzdHI9IiA8PCBzdHIuc3RyaW5nKCkgPDwgZW5kbDsKKyAgICBrZERlYnVnKDYwNzApIDw8
ICJLSlM6OkhUTUxFbGVtZW50Ojp0cnlQdXQgIiA8PCBwcm9wZXJ0eU5hbWUucXN0cmluZygpCisg
ICAgICAgICAgICAgICAgICA8PCAiIHRoaXNUYWc9IiA8PCBlbGVtZW50LnRhZ05hbWUoKS5zdHJp
bmcoKQorICAgICAgICAgICAgICAgICAgPDwgIiBzdHI9IiA8PCBzdHIuc3RyaW5nKCkgPDwgZW5k
bDsKICNlbmRpZgotICAvLyBGaXJzdCBsb29rIGF0IGR5bmFtaWMgcHJvcGVydGllcwotICBzd2l0
Y2ggKGVsZW1lbnQuaWQoKSkgewotICAgIGNhc2UgSURfU0VMRUNUOiB7Ci0gICAgICBIVE1MU2Vs
ZWN0RWxlbWVudEltcGwgJnNlbGVjdCA9IHN0YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50SW1w
bCAmPihlbGVtZW50KTsKLSAgICAgIGJvb2wgb2s7Ci0gICAgICAvKnVpbnQgdSA9Ki8gcHJvcGVy
dHlOYW1lLnRvVUxvbmcoJm9rKTsKLSAgICAgIGlmIChvaykgewotICAgICAgICBPYmplY3QgY29s
bCA9IE9iamVjdDo6ZHluYW1pY0Nhc3QoIGdldFNlbGVjdEhUTUxDb2xsZWN0aW9uKGV4ZWMsIHNl
bGVjdC5vcHRpb25zSFRNTENvbGxlY3Rpb24oKS5nZXQoKSwgJnNlbGVjdCkgKTsKLSAgICAgICAg
aWYgKCAhY29sbC5pc051bGwoKSApCi0gICAgICAgICAgY29sbC5wdXQoZXhlYyxwcm9wZXJ0eU5h
bWUsdmFsdWUpOwotICAgICAgICByZXR1cm47Ci0gICAgICB9CisgICAgLy8gRmlyc3QgbG9vayBh
dCBkeW5hbWljIHByb3BlcnRpZXMKKyAgICBpZiAoZWxlbWVudC5oYXNMb2NhbE5hbWUoSFRNTE5h
bWVzOjpzZWxlY3QoKSkpIHsKKyAgICAgICAgSFRNTFNlbGVjdEVsZW1lbnRJbXBsICZzZWxlY3Qg
PSBzdGF0aWNfY2FzdDxIVE1MU2VsZWN0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgICAg
IGJvb2wgb2s7CisgICAgICAgIC8qdWludCB1ID0qLyBwcm9wZXJ0eU5hbWUudG9VTG9uZygmb2sp
OworICAgICAgICBpZiAob2spIHsKKyAgICAgICAgICAgIE9iamVjdCBjb2xsID0gT2JqZWN0Ojpk
eW5hbWljQ2FzdCggZ2V0U2VsZWN0SFRNTENvbGxlY3Rpb24oZXhlYywgc2VsZWN0Lm9wdGlvbnNI
VE1MQ29sbGVjdGlvbigpLmdldCgpLCAmc2VsZWN0KSApOworICAgICAgICAgICAgaWYgKCFjb2xs
LmlzTnVsbCgpKQorICAgICAgICAgICAgICAgIGNvbGwucHV0KGV4ZWMscHJvcGVydHlOYW1lLHZh
bHVlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAgIH0KICNpZiBBUFBMRV9D
SEFOR0VTCi0gICAgY2FzZSBJRF9FTUJFRDoKLSAgICBjYXNlIElEX09CSkVDVDoKLSAgICBjYXNl
IElEX0FQUExFVDogeworICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFzTG9jYWxOYW1lKEhUTUxOYW1l
czo6ZW1iZWQoKSkgfHwKKyAgICAgICAgICAgICBlbGVtZW50Lmhhc0xvY2FsTmFtZShIVE1MTmFt
ZXM6Om9iamVjdCgpKSB8fAorICAgICAgICAgICAgIGVsZW1lbnQuaGFzTG9jYWxOYW1lKEhUTUxO
YW1lczo6YXBwbGV0KCkpKSB7CiAJVmFsdWUgcnVudGltZU9iamVjdCA9IGdldFJ1bnRpbWVPYmpl
Y3QoZXhlYywmZWxlbWVudCk7CiAJaWYgKCFydW50aW1lT2JqZWN0LmlzTnVsbCgpKSB7CiAJICAg
IE9iamVjdEltcCAqaW1wID0gc3RhdGljX2Nhc3Q8T2JqZWN0SW1wICo+KHJ1bnRpbWVPYmplY3Qu
aW1wKCkpOwotCSAgICBpZiAoaW1wLT5jYW5QdXQoZXhlYywgcHJvcGVydHlOYW1lKSkgeworCSAg
ICBpZiAoaW1wLT5jYW5QdXQoZXhlYywgcHJvcGVydHlOYW1lKSkKIAkJcmV0dXJuIGltcC0+cHV0
IChleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKTsKLQkgICAgfQogCX0KICAgICB9Ci0gICAgICBi
cmVhazsKICNlbmRpZgotICAgIGJyZWFrOwotICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0K
IAotICBjb25zdCBIYXNoVGFibGUqIHRhYmxlID0gY2xhc3NJbmZvKCktPnByb3BIYXNoVGFibGU7
IC8vIGdldCB0aGUgcmlnaHQgaGFzaHRhYmxlCi0gIGNvbnN0IEhhc2hFbnRyeSogZW50cnkgPSBM
b29rdXA6OmZpbmRFbnRyeSh0YWJsZSwgcHJvcGVydHlOYW1lKTsKLSAgaWYgKGVudHJ5KSB7Ci0g
ICAgaWYgKGVudHJ5LT5hdHRyICYgRnVuY3Rpb24pIC8vIGZ1bmN0aW9uOiBwdXQgYXMgb3ZlcnJp
ZGUgcHJvcGVydHkKLSAgICB7Ci0gICAgICBPYmplY3RJbXA6OnB1dChleGVjLCBwcm9wZXJ0eU5h
bWUsIHZhbHVlLCBhdHRyKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgZWxzZSBpZiAoKGVu
dHJ5LT5hdHRyICYgUmVhZE9ubHkpID09IDApIC8vIGxldCBET01PYmplY3RMb29rdXBQdXQgcHJp
bnQgdGhlIHdhcm5pbmcgaWYgbm90Ci0gICAgewotICAgICAgcHV0VmFsdWUoZXhlYywgZW50cnkt
PnZhbHVlLCB2YWx1ZSwgYXR0cik7Ci0gICAgICByZXR1cm47CisgICAgY29uc3QgSGFzaFRhYmxl
KiB0YWJsZSA9IGNsYXNzSW5mbygpLT5wcm9wSGFzaFRhYmxlOyAvLyBnZXQgdGhlIHJpZ2h0IGhh
c2h0YWJsZQorICAgIGNvbnN0IEhhc2hFbnRyeSogZW50cnkgPSBMb29rdXA6OmZpbmRFbnRyeSh0
YWJsZSwgcHJvcGVydHlOYW1lKTsKKyAgICBpZiAoZW50cnkpIHsKKyAgICAgICAgaWYgKGVudHJ5
LT5hdHRyICYgRnVuY3Rpb24pIHsgLy8gZnVuY3Rpb246IHB1dCBhcyBvdmVycmlkZSBwcm9wZXJ0
eQorICAgICAgICAgICAgT2JqZWN0SW1wOjpwdXQoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwg
YXR0cik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAo
KGVudHJ5LT5hdHRyICYgUmVhZE9ubHkpID09IDApIHsgLy8gbGV0IERPTU9iamVjdExvb2t1cFB1
dCBwcmludCB0aGUgd2FybmluZyBpZiBub3QKKyAgICAgICAgICAgIHB1dFZhbHVlKGV4ZWMsIGVu
dHJ5LT52YWx1ZSwgdmFsdWUsIGF0dHIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CiAgICAgfQotICB9Ci0gIERPTU9iamVjdExvb2t1cFB1dDxLSlM6OkhUTUxFbGVtZW50LCBET01F
bGVtZW50PihleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBhdHRyLCAmSFRNTEVsZW1lbnRUYWJs
ZSwgdGhpcyk7CisKKyAgICBET01PYmplY3RMb29rdXBQdXQ8S0pTOjpIVE1MRWxlbWVudCwgRE9N
RWxlbWVudD4oZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgYXR0ciwgJkhUTUxFbGVtZW50VGFi
bGUsIHRoaXMpOwogfQogCi12b2lkIEhUTUxFbGVtZW50OjpwdXRWYWx1ZShFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBpbnQpCit2b2lkIEhUTUxFbGVtZW50
OjpodG1sU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFs
dWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCiB7Ci0gIERPTUV4Y2VwdGlvblRyYW5zbGF0
b3IgZXhjZXB0aW9uKGV4ZWMpOwotICBET006OkRPTVN0cmluZyBzdHIgPSB2YWx1ZS5pc0EoTnVs
bFR5cGUpID8gRE9NOjpET01TdHJpbmcoKSA6IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLnN0cmluZygp
OwotICBIVE1MRWxlbWVudEltcGwgJmVsZW1lbnQgPSAqc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJ
bXBsICo+KGltcGwoKSk7Ci0jaWZkZWYgS0pTX1ZFUkJPU0UKLSAga2REZWJ1Zyg2MDcwKSA8PCAi
S0pTOjpIVE1MRWxlbWVudDo6cHV0VmFsdWUgIgotICAgICAgICAgICAgICAgIDw8ICIgdGhpc1Rh
Zz0iIDw8IGVsZW1lbnQudGFnTmFtZSgpLnN0cmluZygpCi0gICAgICAgICAgICAgICAgPDwgIiB0
b2tlbj0iIDw8IHRva2VuIDw8IGVuZGw7Ci0jZW5kaWYKKyAgICBIVE1MSGVhZEVsZW1lbnRJbXBs
ICZoZWFkID0gKnN0YXRpY19jYXN0PEhUTUxIZWFkRWxlbWVudEltcGwqPihpbXBsKCkpOworICAg
IGlmICh0b2tlbiA9PSBIZWFkUHJvZmlsZSkgCisgICAgICAgIGhlYWQuc2V0UHJvZmlsZShzdHIp
OworfQogCi0gIHN3aXRjaCAoZWxlbWVudC5pZCgpKSB7Ci0gIGNhc2UgSURfSFRNTDogewotICAg
ICAgSFRNTEh0bWxFbGVtZW50SW1wbCAmaHRtbCA9IHN0YXRpY19jYXN0PEhUTUxIdG1sRWxlbWVu
dEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIEh0
bWxWZXJzaW9uOiAgICAgICAgIHsgaHRtbC5zZXRWZXJzaW9uKHN0cik7IHJldHVybjsgfQotICAg
ICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX0hFQUQ6IHsKLSAgICBIVE1MSGVhZEVsZW1l
bnRJbXBsICZoZWFkID0gc3RhdGljX2Nhc3Q8SFRNTEhlYWRFbGVtZW50SW1wbCAmPihlbGVtZW50
KTsKK3ZvaWQgSFRNTEVsZW1lbnQ6OmhlYWRTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAg
ICBIVE1MSGVhZEVsZW1lbnRJbXBsICZoZWFkID0gKnN0YXRpY19jYXN0PEhUTUxIZWFkRWxlbWVu
dEltcGwqPihpbXBsKCkpOworICAgIGlmICh0b2tlbiA9PSBIZWFkUHJvZmlsZSkgCisgICAgICAg
IGhlYWQuc2V0UHJvZmlsZShzdHIpOworfQorCit2b2lkIEhUTUxFbGVtZW50OjpsaW5rU2V0dGVy
KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERP
TTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTExpbmtFbGVtZW50SW1wbCAmbGluayA9ICpz
dGF0aWNfY2FzdDxIVE1MTGlua0VsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRv
a2VuKSB7Ci0gICAgY2FzZSBIZWFkUHJvZmlsZTogICAgICAgICB7IGhlYWQuc2V0UHJvZmlsZShz
dHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBMaW5rRGlzYWJsZWQ6ICAgICAgICB7IGxpbmsu
c2V0RGlzYWJsZWQodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNh
c2UgTGlua0NoYXJzZXQ6ICAgICAgICAgeyBsaW5rLnNldENoYXJzZXQoc3RyKTsgcmV0dXJuOyB9
CisgICAgICAgIGNhc2UgTGlua0hyZWY6ICAgICAgICAgICAgeyBsaW5rLnNldEhyZWYoc3RyKTsg
cmV0dXJuOyB9CisgICAgICAgIGNhc2UgTGlua0hyZWZMYW5nOiAgICAgICAgeyBsaW5rLnNldEhy
ZWZsYW5nKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIExpbmtNZWRpYTogICAgICAgICAg
IHsgbGluay5zZXRNZWRpYShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBMaW5rUmVsOiAg
ICAgICAgICAgICB7IGxpbmsuc2V0UmVsKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIExp
bmtSZXY6ICAgICAgICAgICAgIHsgbGluay5zZXRSZXYoc3RyKTsgcmV0dXJuOyB9CisgICAgICAg
IGNhc2UgTGlua1RhcmdldDogICAgICAgICAgeyBsaW5rLnNldFRhcmdldChzdHIpOyByZXR1cm47
IH0KKyAgICAgICAgY2FzZSBMaW5rVHlwZTogICAgICAgICAgICB7IGxpbmsuc2V0VHlwZShzdHIp
OyByZXR1cm47IH0KICAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfTElOSzogewotICAg
IEhUTUxMaW5rRWxlbWVudEltcGwgJmxpbmsgPSBzdGF0aWNfY2FzdDxIVE1MTGlua0VsZW1lbnRJ
bXBsICY+KGVsZW1lbnQpOworfQorCit2b2lkIEhUTUxFbGVtZW50Ojp0aXRsZVNldHRlcihFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRP
TVN0cmluZyYgc3RyKQoreworICAgICBIVE1MVGl0bGVFbGVtZW50SW1wbCYgdGl0bGUgPSAqc3Rh
dGljX2Nhc3Q8SFRNTFRpdGxlRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgICBpZiAodG9rZW4g
PT0gVGl0bGVUZXh0KQorICAgICAgICB0aXRsZS5zZXRUZXh0KHN0cik7Cit9CisKK3ZvaWQgSFRN
TEVsZW1lbnQ6Om1ldGFTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZh
bHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MTWV0YUVs
ZW1lbnRJbXBsJiBtZXRhID0gKnN0YXRpY19jYXN0PEhUTUxNZXRhRWxlbWVudEltcGwqPihpbXBs
KCkpOwogICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgTGlua0Rpc2FibGVkOiAgICAg
ICAgeyBsaW5rLnNldERpc2FibGVkKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQot
ICAgICAgY2FzZSBMaW5rQ2hhcnNldDogICAgICAgICB7IGxpbmsuc2V0Q2hhcnNldChzdHIpOyBy
ZXR1cm47IH0KLSAgICAgIGNhc2UgTGlua0hyZWY6ICAgICAgICAgICAgeyBsaW5rLnNldEhyZWYo
c3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIExpbmtIcmVmTGFuZzogICAgICAgIHsgbGluay5z
ZXRIcmVmbGFuZyhzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgTGlua01lZGlhOiAgICAgICAg
ICAgeyBsaW5rLnNldE1lZGlhKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBMaW5rUmVsOiAg
ICAgICAgICAgICB7IGxpbmsuc2V0UmVsKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBMaW5r
UmV2OiAgICAgICAgICAgICB7IGxpbmsuc2V0UmV2KHN0cik7IHJldHVybjsgfQotICAgICAgY2Fz
ZSBMaW5rVGFyZ2V0OiAgICAgICAgICB7IGxpbmsuc2V0VGFyZ2V0KHN0cik7IHJldHVybjsgfQot
ICAgICAgY2FzZSBMaW5rVHlwZTogICAgICAgICAgICB7IGxpbmsuc2V0VHlwZShzdHIpOyByZXR1
cm47IH0KLSAgICAgIH0KLSAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9USVRMRTogewot
ICAgICAgSFRNTFRpdGxlRWxlbWVudEltcGwgJnRpdGxlID0gc3RhdGljX2Nhc3Q8SFRNTFRpdGxl
RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBj
YXNlIFRpdGxlVGV4dDogICAgICAgICAgICAgICAgIHsgdGl0bGUuc2V0VGV4dChzdHIpOyByZXR1
cm47IH0KLSAgICAgIH0KLSAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9NRVRBOiB7Ci0g
ICAgICBIVE1MTWV0YUVsZW1lbnRJbXBsICZtZXRhID0gc3RhdGljX2Nhc3Q8SFRNTE1ldGFFbGVt
ZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2Ug
TWV0YUNvbnRlbnQ6ICAgICAgICAgeyBtZXRhLnNldENvbnRlbnQoc3RyKTsgcmV0dXJuOyB9Ci0g
ICAgICBjYXNlIE1ldGFIdHRwRXF1aXY6ICAgICAgIHsgbWV0YS5zZXRIdHRwRXF1aXYoc3RyKTsg
cmV0dXJuOyB9Ci0gICAgICBjYXNlIE1ldGFOYW1lOiAgICAgICAgICAgIHsgbWV0YS5zZXROYW1l
KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBNZXRhU2NoZW1lOiAgICAgICAgICB7IG1ldGEu
c2V0U2NoZW1lKHN0cik7IHJldHVybjsgfQotICAgICAgfQotICAgIH0KLSAgICBicmVhazsKLSAg
ICBjYXNlIElEX0JBU0U6IHsKLSAgICAgIEhUTUxCYXNlRWxlbWVudEltcGwgJmJhc2UgPSBzdGF0
aWNfY2FzdDxIVE1MQmFzZUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0
b2tlbikgewotICAgICAgY2FzZSBCYXNlSHJlZjogICAgICAgICAgICB7IGJhc2Uuc2V0SHJlZihz
dHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQmFzZVRhcmdldDogICAgICAgICAgeyBiYXNlLnNl
dFRhcmdldChzdHIpOyByZXR1cm47IH0KLSAgICAgIH0KKyAgICAgICAgY2FzZSBNZXRhQ29udGVu
dDogICAgICAgICB7IG1ldGEuc2V0Q29udGVudChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2Fz
ZSBNZXRhSHR0cEVxdWl2OiAgICAgICB7IG1ldGEuc2V0SHR0cEVxdWl2KHN0cik7IHJldHVybjsg
fQorICAgICAgICBjYXNlIE1ldGFOYW1lOiAgICAgICAgICAgIHsgbWV0YS5zZXROYW1lKHN0cik7
IHJldHVybjsgfQorICAgICAgICBjYXNlIE1ldGFTY2hlbWU6ICAgICAgICAgIHsgbWV0YS5zZXRT
Y2hlbWUoc3RyKTsgcmV0dXJuOyB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfSVNJ
TkRFWDogewotICAgICAgSFRNTElzSW5kZXhFbGVtZW50SW1wbCAmaXNpbmRleCA9IHN0YXRpY19j
YXN0PEhUTUxJc0luZGV4RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRv
a2VuKSB7Ci0gICAgICAvLyByZWFkLW9ubHk6IGZvcm0KLSAgICAgIGNhc2UgSXNJbmRleFByb21w
dDogICAgICAgICAgICAgICB7IGlzaW5kZXguc2V0UHJvbXB0KHN0cik7IHJldHVybjsgfQotICAg
ICAgfQorfQorCit2b2lkIEhUTUxFbGVtZW50OjpiYXNlU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIp
Cit7CisgICAgSFRNTEJhc2VFbGVtZW50SW1wbCYgYmFzZSA9ICpzdGF0aWNfY2FzdDxIVE1MQmFz
ZUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNh
c2UgQmFzZUhyZWY6ICAgICAgICAgICAgeyBiYXNlLnNldEhyZWYoc3RyKTsgcmV0dXJuOyB9Cisg
ICAgICAgIGNhc2UgQmFzZVRhcmdldDogICAgICAgICAgeyBiYXNlLnNldFRhcmdldChzdHIpOyBy
ZXR1cm47IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9TVFlMRTogewotICAgICAg
SFRNTFN0eWxlRWxlbWVudEltcGwgJnN0eWxlID0gc3RhdGljX2Nhc3Q8SFRNTFN0eWxlRWxlbWVu
dEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIFN0
eWxlRGlzYWJsZWQ6ICAgICAgICB7IHN0eWxlLnNldERpc2FibGVkKHZhbHVlLnRvQm9vbGVhbihl
eGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBTdHlsZU1lZGlhOiAgICAgICAgICAgeyBzdHls
ZS5zZXRNZWRpYShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgU3R5bGVUeXBlOiAgICAgICAg
ICAgIHsgc3R5bGUuc2V0VHlwZShzdHIpOyByZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBI
VE1MRWxlbWVudDo6aXNJbmRleFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29u
c3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxJ
c0luZGV4RWxlbWVudEltcGwmIGlzaW5kZXggPSAqc3RhdGljX2Nhc3Q8SFRNTElzSW5kZXhFbGVt
ZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IElzSW5kZXhQcm9tcHQpCisgICAg
ICAgIGlzaW5kZXguc2V0UHJvbXB0KHN0cik7Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OnN0eWxl
U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNv
bnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTFN0eWxlRWxlbWVudEltcGwmIHN0
eWxlID0gKnN0YXRpY19jYXN0PEhUTUxTdHlsZUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBz
d2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgU3R5bGVEaXNhYmxlZDogICAgICAgIHsgc3R5
bGUuc2V0RGlzYWJsZWQodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAg
IGNhc2UgU3R5bGVNZWRpYTogICAgICAgICAgIHsgc3R5bGUuc2V0TWVkaWEoc3RyKTsgcmV0dXJu
OyB9CisgICAgICAgIGNhc2UgU3R5bGVUeXBlOiAgICAgICAgICAgIHsgc3R5bGUuc2V0VHlwZShz
dHIpOyByZXR1cm47IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9CT0RZOiB7Ci0g
ICAgICBIVE1MQm9keUVsZW1lbnRJbXBsICZib2R5ID0gc3RhdGljX2Nhc3Q8SFRNTEJvZHlFbGVt
ZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2Ug
Qm9keUFMaW5rOiAgICAgICAgICAgeyBib2R5LnNldEFMaW5rKHN0cik7IHJldHVybjsgfQotICAg
ICAgY2FzZSBCb2R5QmFja2dyb3VuZDogICAgICB7IGJvZHkuc2V0QmFja2dyb3VuZChzdHIpOyBy
ZXR1cm47IH0KLSAgICAgIGNhc2UgQm9keUJnQ29sb3I6ICAgICAgICAgeyBib2R5LnNldEJnQ29s
b3Ioc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEJvZHlMaW5rOiAgICAgICAgICAgIHsgYm9k
eS5zZXRMaW5rKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBCb2R5VGV4dDogICAgICAgICAg
ICB7IGJvZHkuc2V0VGV4dChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQm9keVZMaW5rOiAg
ICAgICAgICAgeyBib2R5LnNldFZMaW5rKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBCb2R5
U2Nyb2xsTGVmdDoKLSAgICAgIGNhc2UgQm9keVNjcm9sbFRvcDogewotICAgICAgICAgIFFTY3Jv
bGxWaWV3KiBzdmlldyA9IGJvZHkub3duZXJEb2N1bWVudCgpLT52aWV3KCk7Ci0gICAgICAgICAg
aWYgKHN2aWV3KSB7Ci0gICAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgZG9jdW1lbnQncyBsYXlv
dXQgYmVmb3JlIHdlIGNvbXB1dGUgdGhlc2UgYXR0cmlidXRlcy4KLSAgICAgICAgICAgICAgaWYg
KERvY3VtZW50SW1wbCogZG9jID0gYm9keS5nZXREb2N1bWVudCgpKQotICAgICAgICAgICAgICAg
ICAgZG9jLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKLSAgICAgICAg
ICAgICAgaWYgKHRva2VuID09IEJvZHlTY3JvbGxMZWZ0KQotICAgICAgICAgICAgICAgICAgc3Zp
ZXctPnNldENvbnRlbnRzUG9zKHZhbHVlLnRvSW50MzIoZXhlYyksIHN2aWV3LT5jb250ZW50c1ko
KSk7Ci0gICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgIHN2aWV3LT5zZXRDb250
ZW50c1Bvcyhzdmlldy0+Y29udGVudHNYKCksIHZhbHVlLnRvSW50MzIoZXhlYykpOwotICAgICAg
ICAgIH0KLSAgICAgICAgICByZXR1cm47Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OmJvZHlTZXR0
ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3Qg
RE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MQm9keUVsZW1lbnRJbXBsJiBib2R5ID0g
KnN0YXRpY19jYXN0PEhUTUxCb2R5RWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAo
dG9rZW4pIHsKKyAgICAgICAgY2FzZSBCb2R5QUxpbms6ICAgICAgICAgICB7IGJvZHkuc2V0QUxp
bmsoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQm9keUJhY2tncm91bmQ6ICAgICAgeyBi
b2R5LnNldEJhY2tncm91bmQoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQm9keUJnQ29s
b3I6ICAgICAgICAgeyBib2R5LnNldEJnQ29sb3Ioc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNh
c2UgQm9keUxpbms6ICAgICAgICAgICAgeyBib2R5LnNldExpbmsoc3RyKTsgcmV0dXJuOyB9Cisg
ICAgICAgIGNhc2UgQm9keVRleHQ6ICAgICAgICAgICAgeyBib2R5LnNldFRleHQoc3RyKTsgcmV0
dXJuOyB9CisgICAgICAgIGNhc2UgQm9keVZMaW5rOiAgICAgICAgICAgeyBib2R5LnNldFZMaW5r
KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEJvZHlTY3JvbGxMZWZ0OgorICAgICAgICBj
YXNlIEJvZHlTY3JvbGxUb3A6IHsKKyAgICAgICAgICAgIFFTY3JvbGxWaWV3KiBzdmlldyA9IGJv
ZHkub3duZXJEb2N1bWVudCgpLT52aWV3KCk7CisgICAgICAgICAgICBpZiAoc3ZpZXcpIHsKKyAg
ICAgICAgICAgICAgICAvLyBVcGRhdGUgdGhlIGRvY3VtZW50J3MgbGF5b3V0IGJlZm9yZSB3ZSBj
b21wdXRlIHRoZXNlIGF0dHJpYnV0ZXMuCisgICAgICAgICAgICAgICAgaWYgKERvY3VtZW50SW1w
bCogZG9jID0gYm9keS5nZXREb2N1bWVudCgpKQorICAgICAgICAgICAgICAgICAgICBkb2MtPnVw
ZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOworICAgICAgICAgICAgICAgIGlm
ICh0b2tlbiA9PSBCb2R5U2Nyb2xsTGVmdCkKKyAgICAgICAgICAgICAgICAgICAgc3ZpZXctPnNl
dENvbnRlbnRzUG9zKHZhbHVlLnRvSW50MzIoZXhlYyksIHN2aWV3LT5jb250ZW50c1koKSk7Cisg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBzdmlldy0+c2V0Q29udGVu
dHNQb3Moc3ZpZXctPmNvbnRlbnRzWCgpLCB2YWx1ZS50b0ludDMyKGV4ZWMpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgfQogICAgIH0KLSAg
ICBicmVhazsKLSAgICBjYXNlIElEX0ZPUk06IHsKLSAgICAgIEhUTUxGb3JtRWxlbWVudEltcGwg
JmZvcm0gPSBzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAg
ICAgc3dpdGNoICh0b2tlbikgewotICAgICAgLy8gcmVhZC1vbmx5OiBlbGVtZW50cwotICAgICAg
Ly8gcmVhZC1vbmx5OiBsZW5ndGgKLSAgICAgIGNhc2UgRm9ybU5hbWU6ICAgICAgICAgICAgeyBm
b3JtLnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEZvcm1BY2NlcHRDaGFyc2V0
OiAgIHsgZm9ybS5zZXRBY2NlcHRDaGFyc2V0KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBG
b3JtQWN0aW9uOiAgICAgICAgICB7IGZvcm0uc2V0QWN0aW9uKHN0cik7IHJldHVybjsgfQotICAg
ICAgY2FzZSBGb3JtRW5jVHlwZTogICAgICAgICB7IGZvcm0uc2V0RW5jdHlwZShzdHIpOyByZXR1
cm47IH0KLSAgICAgIGNhc2UgRm9ybU1ldGhvZDogICAgICAgICAgeyBmb3JtLnNldE1ldGhvZChz
dHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgRm9ybVRhcmdldDogICAgICAgICAgeyBmb3JtLnNl
dFRhcmdldChzdHIpOyByZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6
Zm9ybVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVl
LCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxGb3JtRWxlbWVudEltcGwm
IGZvcm0gPSAqc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAg
c3dpdGNoICh0b2tlbikgeworICAgICAgICAvLyByZWFkLW9ubHk6IGVsZW1lbnRzCisgICAgICAg
IC8vIHJlYWQtb25seTogbGVuZ3RoCisgICAgICAgIGNhc2UgRm9ybU5hbWU6ICAgICAgICAgICAg
eyBmb3JtLnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgRm9ybUFjY2VwdENo
YXJzZXQ6ICAgeyBmb3JtLnNldEFjY2VwdENoYXJzZXQoc3RyKTsgcmV0dXJuOyB9CisgICAgICAg
IGNhc2UgRm9ybUFjdGlvbjogICAgICAgICAgeyBmb3JtLnNldEFjdGlvbihzdHIpOyByZXR1cm47
IH0KKyAgICAgICAgY2FzZSBGb3JtRW5jVHlwZTogICAgICAgICB7IGZvcm0uc2V0RW5jdHlwZShz
dHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBGb3JtTWV0aG9kOiAgICAgICAgICB7IGZvcm0u
c2V0TWV0aG9kKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEZvcm1UYXJnZXQ6ICAgICAg
ICAgIHsgZm9ybS5zZXRUYXJnZXQoc3RyKTsgcmV0dXJuOyB9CiAgICAgfQotICAgIGJyZWFrOwot
ICAgIGNhc2UgSURfU0VMRUNUOiB7Ci0gICAgICBIVE1MU2VsZWN0RWxlbWVudEltcGwgJnNlbGVj
dCA9IHN0YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAg
IHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIC8vIHJlYWQtb25seTogdHlwZQotICAgICAgY2FzZSBT
ZWxlY3RTZWxlY3RlZEluZGV4OiAgIHsgc2VsZWN0LnNldFNlbGVjdGVkSW5kZXgodmFsdWUudG9J
bnQzMihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBTZWxlY3RWYWx1ZTogICAgICAgICAg
IHsgc2VsZWN0LnNldFZhbHVlKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBTZWxlY3RMZW5n
dGg6ICAgICAgICAgIHsgLy8gcmVhZC1vbmx5IGFjY29yZGluZyB0byB0aGUgTlMgc3BlYywgYnV0
IHdlYnBhZ2VzIG5lZWQgaXQgd3JpdGVhYmxlCit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OnNlbGVj
dFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBj
b25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxTZWxlY3RFbGVtZW50SW1wbCYg
c2VsZWN0ID0gKnN0YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50SW1wbCo+KGltcGwoKSk7Cisg
ICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICAvLyByZWFkLW9ubHk6IHR5cGUKKyAgICAgICAg
Y2FzZSBTZWxlY3RTZWxlY3RlZEluZGV4OiAgIHsgc2VsZWN0LnNldFNlbGVjdGVkSW5kZXgodmFs
dWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIFNlbGVjdFZhbHVlOiAg
ICAgICAgICAgeyBzZWxlY3Quc2V0VmFsdWUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2Ug
U2VsZWN0TGVuZ3RoOiAgICAgICAgICB7IC8vIHJlYWQtb25seSBhY2NvcmRpbmcgdG8gdGhlIE5T
IHNwZWMsIGJ1dCB3ZWJwYWdlcyBuZWVkIGl0IHdyaXRlYWJsZQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QgY29sbCA9IE9iamVjdDo6ZHluYW1pY0Nhc3Qo
IGdldFNlbGVjdEhUTUxDb2xsZWN0aW9uKGV4ZWMsIHNlbGVjdC5vcHRpb25zSFRNTENvbGxlY3Rp
b24oKS5nZXQoKSwgJnNlbGVjdCkgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCAhY29sbC5pc051bGwoKSApCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29sbC5wdXQoZXhlYyxsZW5ndGhQcm9wZXJ0eU5hbWUsdmFsdWUp
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAvLyByZWFkLW9ubHk6
IGZvcm0KLSAgICAgIC8vIHJlYWQtb25seTogb3B0aW9ucwotICAgICAgY2FzZSBTZWxlY3REaXNh
YmxlZDogICAgICAgIHsgc2VsZWN0LnNldERpc2FibGVkKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7
IHJldHVybjsgfQotICAgICAgY2FzZSBTZWxlY3RNdWx0aXBsZTogICAgICAgIHsgc2VsZWN0LnNl
dE11bHRpcGxlKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBT
ZWxlY3ROYW1lOiAgICAgICAgICAgIHsgc2VsZWN0LnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9Ci0g
ICAgICBjYXNlIFNlbGVjdFNpemU6ICAgICAgICAgICAgeyBzZWxlY3Quc2V0U2l6ZSh2YWx1ZS50
b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFNlbGVjdFRhYkluZGV4OiAgICAg
ICAgeyBzZWxlY3Quc2V0VGFiSW5kZXgodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQot
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAv
LyByZWFkLW9ubHk6IGZvcm0KKyAgICAgICAgLy8gcmVhZC1vbmx5OiBvcHRpb25zCisgICAgICAg
IGNhc2UgU2VsZWN0RGlzYWJsZWQ6ICAgICAgICB7IHNlbGVjdC5zZXREaXNhYmxlZCh2YWx1ZS50
b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBTZWxlY3RNdWx0aXBsZTog
ICAgICAgIHsgc2VsZWN0LnNldE11bHRpcGxlKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVy
bjsgfQorICAgICAgICBjYXNlIFNlbGVjdE5hbWU6ICAgICAgICAgICAgeyBzZWxlY3Quc2V0TmFt
ZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBTZWxlY3RTaXplOiAgICAgICAgICAgIHsg
c2VsZWN0LnNldFNpemUodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBj
YXNlIFNlbGVjdFRhYkluZGV4OiAgICAgICAgeyBzZWxlY3Quc2V0VGFiSW5kZXgodmFsdWUudG9J
bnQzMihleGVjKSk7IHJldHVybjsgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX09Q
VEdST1VQOiB7Ci0gICAgICBIVE1MT3B0R3JvdXBFbGVtZW50SW1wbCAmb3B0Z3JvdXAgPSBzdGF0
aWNfY2FzdDxIVE1MT3B0R3JvdXBFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRj
aCAodG9rZW4pIHsKLSAgICAgIGNhc2UgT3B0R3JvdXBEaXNhYmxlZDogICAgICAgIHsgb3B0Z3Jv
dXAuc2V0RGlzYWJsZWQodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBj
YXNlIE9wdEdyb3VwTGFiZWw6ICAgICAgICAgICB7IG9wdGdyb3VwLnNldExhYmVsKHN0cik7IHJl
dHVybjsgfQotICAgICAgfQorfQorCit2b2lkIEhUTUxFbGVtZW50OjpvcHRHcm91cFNldHRlcihF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006
OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxPcHRHcm91cEVsZW1lbnRJbXBsJiBvcHRncm91
cCA9ICpzdGF0aWNfY2FzdDxIVE1MT3B0R3JvdXBFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAg
c3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNlIE9wdEdyb3VwRGlzYWJsZWQ6ICAgICAgICB7
IG9wdGdyb3VwLnNldERpc2FibGVkKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQor
ICAgICAgICBjYXNlIE9wdEdyb3VwTGFiZWw6ICAgICAgICAgICB7IG9wdGdyb3VwLnNldExhYmVs
KHN0cik7IHJldHVybjsgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX09QVElPTjog
ewotICAgICAgSFRNTE9wdGlvbkVsZW1lbnRJbXBsICZvcHRpb24gPSBzdGF0aWNfY2FzdDxIVE1M
T3B0aW9uRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0g
ICAgICAvLyByZWFkLW9ubHk6IGZvcm0KLSAgICAgIGNhc2UgT3B0aW9uRGVmYXVsdFNlbGVjdGVk
OiB7IG9wdGlvbi5zZXREZWZhdWx0U2VsZWN0ZWQodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0
dXJuOyB9Ci0gICAgICBjYXNlIE9wdGlvblRleHQ6ICAgICAgICAgICAgeyBvcHRpb24uc2V0VGV4
dChzdHIsIGV4Y2VwdGlvbik7IHJldHVybjsgfQotICAgICAgLy8gcmVhZC1vbmx5OiBpbmRleAot
ICAgICAgY2FzZSBPcHRpb25EaXNhYmxlZDogICAgICAgIHsgb3B0aW9uLnNldERpc2FibGVkKHZh
bHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBPcHRpb25MYWJlbDog
ICAgICAgICAgIHsgb3B0aW9uLnNldExhYmVsKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBP
cHRpb25TZWxlY3RlZDogICAgICAgIHsgb3B0aW9uLnNldFNlbGVjdGVkKHZhbHVlLnRvQm9vbGVh
bihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBPcHRpb25WYWx1ZTogICAgICAgICAgIHsg
b3B0aW9uLnNldFZhbHVlKHN0cik7IHJldHVybjsgfQotICAgICAgfQorfQorCit2b2lkIEhUTUxF
bGVtZW50OjpvcHRpb25TZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZh
bHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBET01FeGNlcHRp
b25UcmFuc2xhdG9yIGV4Y2VwdGlvbihleGVjKTsKKyAgICBIVE1MT3B0aW9uRWxlbWVudEltcGwm
IG9wdGlvbiA9ICpzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudEltcGwqPihpbXBsKCkpOwor
ICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgLy8gcmVhZC1vbmx5OiBmb3JtCisgICAgICAg
IGNhc2UgT3B0aW9uRGVmYXVsdFNlbGVjdGVkOiB7IG9wdGlvbi5zZXREZWZhdWx0U2VsZWN0ZWQo
dmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgT3B0aW9uVGV4
dDogICAgICAgICAgICB7IG9wdGlvbi5zZXRUZXh0KHN0ciwgZXhjZXB0aW9uKTsgcmV0dXJuOyB9
CisgICAgICAgIC8vIHJlYWQtb25seTogaW5kZXgKKyAgICAgICAgY2FzZSBPcHRpb25EaXNhYmxl
ZDogICAgICAgIHsgb3B0aW9uLnNldERpc2FibGVkKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJl
dHVybjsgfQorICAgICAgICBjYXNlIE9wdGlvbkxhYmVsOiAgICAgICAgICAgeyBvcHRpb24uc2V0
TGFiZWwoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgT3B0aW9uU2VsZWN0ZWQ6ICAgICAg
ICB7IG9wdGlvbi5zZXRTZWxlY3RlZCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0K
KyAgICAgICAgY2FzZSBPcHRpb25WYWx1ZTogICAgICAgICAgIHsgb3B0aW9uLnNldFZhbHVlKHN0
cik7IHJldHVybjsgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0lOUFVUOiB7Ci0g
ICAgICBIVE1MSW5wdXRFbGVtZW50SW1wbCAmaW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRF
bGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNh
c2UgSW5wdXREZWZhdWx0VmFsdWU6ICAgIHsgaW5wdXQuc2V0RGVmYXVsdFZhbHVlKHN0cik7IHJl
dHVybjsgfQotICAgICAgY2FzZSBJbnB1dERlZmF1bHRDaGVja2VkOiAgeyBpbnB1dC5zZXREZWZh
dWx0Q2hlY2tlZCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KLSAgICAgIC8vIHJl
YWQtb25seTogZm9ybQotICAgICAgY2FzZSBJbnB1dEFjY2VwdDogICAgICAgICAgeyBpbnB1dC5z
ZXRBY2NlcHQoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElucHV0QWNjZXNzS2V5OiAgICAg
ICB7IGlucHV0LnNldEFjY2Vzc0tleShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSW5wdXRB
bGlnbjogICAgICAgICAgIHsgaW5wdXQuc2V0QWxpZ24oc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBj
YXNlIElucHV0QWx0OiAgICAgICAgICAgICB7IGlucHV0LnNldEFsdChzdHIpOyByZXR1cm47IH0K
LSAgICAgIGNhc2UgSW5wdXRDaGVja2VkOiAgICAgICAgIHsgaW5wdXQuc2V0Q2hlY2tlZCh2YWx1
ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSW5wdXREaXNhYmxlZDog
ICAgICAgIHsgaW5wdXQuc2V0RGlzYWJsZWQodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJu
OyB9Ci0gICAgICBjYXNlIElucHV0TWF4TGVuZ3RoOiAgICAgICB7IGlucHV0LnNldE1heExlbmd0
aCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElucHV0TmFtZTog
ICAgICAgICAgICB7IGlucHV0LnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElu
cHV0UmVhZE9ubHk6ICAgICAgICB7IGlucHV0LnNldFJlYWRPbmx5KHZhbHVlLnRvQm9vbGVhbihl
eGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBJbnB1dFNpemU6ICAgICAgICAgICAgeyBpbnB1
dC5zZXRTaXplKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBJbnB1dFNyYzogICAgICAgICAg
ICAgeyBpbnB1dC5zZXRTcmMoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElucHV0VGFiSW5k
ZXg6ICAgICAgICB7IGlucHV0LnNldFRhYkluZGV4KHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1
cm47IH0KLSAgICAgIGNhc2UgSW5wdXRUeXBlOiAgICAgICAgICAgIHsgaW5wdXQuc2V0VHlwZShz
dHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSW5wdXRVc2VNYXA6ICAgICAgICAgIHsgaW5wdXQu
c2V0VXNlTWFwKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBJbnB1dFZhbHVlOiAgICAgICAg
ICAgeyBpbnB1dC5zZXRWYWx1ZShzdHIpOyByZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBI
VE1MRWxlbWVudDo6aW5wdXRTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0
IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MSW5w
dXRFbGVtZW50SW1wbCYgaW5wdXQgPSAqc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudEltcGwq
PihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBJbnB1dERlZmF1
bHRWYWx1ZTogICAgeyBpbnB1dC5zZXREZWZhdWx0VmFsdWUoc3RyKTsgcmV0dXJuOyB9CisgICAg
ICAgIGNhc2UgSW5wdXREZWZhdWx0Q2hlY2tlZDogIHsgaW5wdXQuc2V0RGVmYXVsdENoZWNrZWQo
dmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIC8vIHJlYWQtb25seTog
Zm9ybQorICAgICAgICBjYXNlIElucHV0QWNjZXB0OiAgICAgICAgICB7IGlucHV0LnNldEFjY2Vw
dChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJbnB1dEFjY2Vzc0tleTogICAgICAgeyBp
bnB1dC5zZXRBY2Nlc3NLZXkoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgSW5wdXRBbGln
bjogICAgICAgICAgIHsgaW5wdXQuc2V0QWxpZ24oc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNh
c2UgSW5wdXRBbHQ6ICAgICAgICAgICAgIHsgaW5wdXQuc2V0QWx0KHN0cik7IHJldHVybjsgfQor
ICAgICAgICBjYXNlIElucHV0Q2hlY2tlZDogICAgICAgICB7IGlucHV0LnNldENoZWNrZWQodmFs
dWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgSW5wdXREaXNhYmxl
ZDogICAgICAgIHsgaW5wdXQuc2V0RGlzYWJsZWQodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0
dXJuOyB9CisgICAgICAgIGNhc2UgSW5wdXRNYXhMZW5ndGg6ICAgICAgIHsgaW5wdXQuc2V0TWF4
TGVuZ3RoKHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJbnB1
dE5hbWU6ICAgICAgICAgICAgeyBpbnB1dC5zZXROYW1lKHN0cik7IHJldHVybjsgfQorICAgICAg
ICBjYXNlIElucHV0UmVhZE9ubHk6ICAgICAgICB7IGlucHV0LnNldFJlYWRPbmx5KHZhbHVlLnRv
Qm9vbGVhbihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIElucHV0U2l6ZTogICAgICAg
ICAgICB7IGlucHV0LnNldFNpemUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgSW5wdXRT
cmM6ICAgICAgICAgICAgIHsgaW5wdXQuc2V0U3JjKHN0cik7IHJldHVybjsgfQorICAgICAgICBj
YXNlIElucHV0VGFiSW5kZXg6ICAgICAgICB7IGlucHV0LnNldFRhYkluZGV4KHZhbHVlLnRvSW50
MzIoZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJbnB1dFR5cGU6ICAgICAgICAgICAg
eyBpbnB1dC5zZXRUeXBlKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIElucHV0VXNlTWFw
OiAgICAgICAgICB7IGlucHV0LnNldFVzZU1hcChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2Fz
ZSBJbnB1dFZhbHVlOiAgICAgICAgICAgeyBpbnB1dC5zZXRWYWx1ZShzdHIpOyByZXR1cm47IH0K
ICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9URVhUQVJFQTogewotICAgICAgSFRNTFRl
eHRBcmVhRWxlbWVudEltcGwgJnRleHRhcmVhID0gc3RhdGljX2Nhc3Q8SFRNTFRleHRBcmVhRWxl
bWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNl
IFRleHRBcmVhRGVmYXVsdFZhbHVlOiAgICB7IHRleHRhcmVhLnNldERlZmF1bHRWYWx1ZShzdHIp
OyByZXR1cm47IH0KLSAgICAgIC8vIHJlYWQtb25seTogZm9ybQotICAgICAgY2FzZSBUZXh0QXJl
YUFjY2Vzc0tleTogICAgICAgeyB0ZXh0YXJlYS5zZXRBY2Nlc3NLZXkoc3RyKTsgcmV0dXJuOyB9
Ci0gICAgICBjYXNlIFRleHRBcmVhQ29sczogICAgICAgICAgICB7IHRleHRhcmVhLnNldENvbHMo
dmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBUZXh0QXJlYURpc2Fi
bGVkOiAgICAgICAgeyB0ZXh0YXJlYS5zZXREaXNhYmxlZCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykp
OyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGV4dEFyZWFOYW1lOiAgICAgICAgICAgIHsgdGV4dGFy
ZWEuc2V0TmFtZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGV4dEFyZWFSZWFkT25seTog
ICAgICAgIHsgdGV4dGFyZWEuc2V0UmVhZE9ubHkodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0
dXJuOyB9Ci0gICAgICBjYXNlIFRleHRBcmVhUm93czogICAgICAgICAgICB7IHRleHRhcmVhLnNl
dFJvd3ModmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBUZXh0QXJl
YVRhYkluZGV4OiAgICAgICAgeyB0ZXh0YXJlYS5zZXRUYWJJbmRleCh2YWx1ZS50b0ludDMyKGV4
ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICAvLyByZWFkLW9ubHk6IHR5cGUKLSAgICAgIGNhc2UgVGV4
dEFyZWFWYWx1ZTogICAgICAgICAgIHsgdGV4dGFyZWEuc2V0VmFsdWUoc3RyKTsgcmV0dXJuOyB9
Ci0gICAgICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OnRleHRBcmVhU2V0dGVyKEV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3Ry
aW5nJiBzdHIpCit7CisgICAgSFRNTFRleHRBcmVhRWxlbWVudEltcGwmIHRleHRhcmVhID0gKnN0
YXRpY19jYXN0PEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2gg
KHRva2VuKSB7CisgICAgICAgIGNhc2UgVGV4dEFyZWFEZWZhdWx0VmFsdWU6ICAgIHsgdGV4dGFy
ZWEuc2V0RGVmYXVsdFZhbHVlKHN0cik7IHJldHVybjsgfQorICAgICAgICAvLyByZWFkLW9ubHk6
IGZvcm0KKyAgICAgICAgY2FzZSBUZXh0QXJlYUFjY2Vzc0tleTogICAgICAgeyB0ZXh0YXJlYS5z
ZXRBY2Nlc3NLZXkoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGV4dEFyZWFDb2xzOiAg
ICAgICAgICAgIHsgdGV4dGFyZWEuc2V0Q29scyh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJu
OyB9CisgICAgICAgIGNhc2UgVGV4dEFyZWFEaXNhYmxlZDogICAgICAgIHsgdGV4dGFyZWEuc2V0
RGlzYWJsZWQodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2Ug
VGV4dEFyZWFOYW1lOiAgICAgICAgICAgIHsgdGV4dGFyZWEuc2V0TmFtZShzdHIpOyByZXR1cm47
IH0KKyAgICAgICAgY2FzZSBUZXh0QXJlYVJlYWRPbmx5OiAgICAgICAgeyB0ZXh0YXJlYS5zZXRS
ZWFkT25seSh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBU
ZXh0QXJlYVJvd3M6ICAgICAgICAgICAgeyB0ZXh0YXJlYS5zZXRSb3dzKHZhbHVlLnRvSW50MzIo
ZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUZXh0QXJlYVRhYkluZGV4OiAgICAgICAg
eyB0ZXh0YXJlYS5zZXRUYWJJbmRleCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9Cisg
ICAgICAgIC8vIHJlYWQtb25seTogdHlwZQorICAgICAgICBjYXNlIFRleHRBcmVhVmFsdWU6ICAg
ICAgICAgICB7IHRleHRhcmVhLnNldFZhbHVlKHN0cik7IHJldHVybjsgfQogICAgIH0KLSAgICBi
cmVhazsKK30KKwordm9pZCBIVE1MRWxlbWVudDo6cHV0VmFsdWUoRXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgaW50KQoreworICAgIERPTUV4Y2VwdGlvblRy
YW5zbGF0b3IgZXhjZXB0aW9uKGV4ZWMpOworICAgIERPTTo6RE9NU3RyaW5nIHN0ciA9IHZhbHVl
LmlzQShOdWxsVHlwZSkgPyBET006OkRPTVN0cmluZygpIDogdmFsdWUudG9TdHJpbmcoZXhlYyku
c3RyaW5nKCk7CisgCisgICAgLy8gQ2hlY2sgb3VyIHNldCBvZiBnZW5lcmljIHByb3BlcnRpZXMg
Zmlyc3QuCisgICAgSFRNTEVsZW1lbnRJbXBsICZlbGVtZW50ID0gKnN0YXRpY19jYXN0PEhUTUxF
bGVtZW50SW1wbCAqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2Fz
ZSBFbGVtZW50SWQ6CisgICAgICAgICAgICBlbGVtZW50LnNldElkKHN0cik7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIGNhc2UgRWxlbWVudFRpdGxlOgorICAgICAgICAgICAgZWxlbWVu
dC5zZXRUaXRsZShzdHIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIEVsZW1l
bnRMYW5nOgorICAgICAgICAgICAgZWxlbWVudC5zZXRMYW5nKHN0cik7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIGNhc2UgRWxlbWVudERpcjoKKyAgICAgICAgICAgIGVsZW1lbnQuc2V0
RGlyKHN0cik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgRWxlbWVudENsYXNz
TmFtZToKKyAgICAgICAgICAgIGVsZW1lbnQuc2V0Q2xhc3NOYW1lKHN0cik7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIGNhc2UgRWxlbWVudElubmVySFRNTDoKKyAgICAgICAgICAgIGVs
ZW1lbnQuc2V0SW5uZXJIVE1MKHN0ciwgZXhjZXB0aW9uKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgY2FzZSBFbGVtZW50SW5uZXJUZXh0OgorICAgICAgICAgICAgZWxlbWVudC5zZXRJ
bm5lclRleHQoc3RyLCBleGNlcHRpb24pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBj
YXNlIEVsZW1lbnRPdXRlckhUTUw6CisgICAgICAgICAgICBlbGVtZW50LnNldE91dGVySFRNTChz
dHIsIGV4Y2VwdGlvbik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgRWxlbWVu
dE91dGVyVGV4dDoKKyAgICAgICAgICAgIGVsZW1lbnQuc2V0T3V0ZXJUZXh0KHN0ciwgZXhjZXB0
aW9uKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBFbGVtZW50Q29udGVudEVk
aXRhYmxlOgorICAgICAgICAgICAgZWxlbWVudC5zZXRDb250ZW50RWRpdGFibGUoc3RyKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBOb3cgY2hlY2sgZm9yIHByb3BlcnRp
ZXMgdGhhdCBhcHBseSB0byBhIHNwZWNpZmljIGVsZW1lbnQgdHlwZS4KKyAgICBjb25zdCBHZXRT
ZXRJbmZvKiBpbmZvID0gZ2V0U2V0SW5mbygpOworICAgIGlmIChpbmZvICYmIGluZm8tPm1fc2V0
dGVyKQorICAgICAgICByZXR1cm4gKHRoaXMtPiooaW5mby0+bV9zZXR0ZXIpKShleGVjLCB0b2tl
biwgdmFsdWUsIHN0cik7CisvKiAgICAKKyAgc3dpdGNoIChlbGVtZW50LmlkKCkpIHsKICAgICBj
YXNlIElEX0JVVFRPTjogewogICAgICAgSFRNTEJ1dHRvbkVsZW1lbnRJbXBsICZidXR0b24gPSBz
dGF0aWNfY2FzdDxIVE1MQnV0dG9uRWxlbWVudEltcGwgJj4oZWxlbWVudCk7CiAgICAgICBzd2l0
Y2ggKHRva2VuKSB7CkBAIC0yOTkwLDQzICszMTI0LDggQEAgdm9pZCBIVE1MRWxlbWVudDo6cHV0
VmFsdWUoRXhlY1N0YXRlICpleAogICAgICAgfQogICAgICAgYnJlYWs7CiAgICAgfQotICB9Ci0K
LSAgLy8gZ2VuZXJpYyBwcm9wZXJ0aWVzCi0gIHN3aXRjaCAodG9rZW4pIHsKLSAgY2FzZSBFbGVt
ZW50SWQ6Ci0gICAgZWxlbWVudC5zZXRJZChzdHIpOwotICAgIHJldHVybjsKLSAgY2FzZSBFbGVt
ZW50VGl0bGU6Ci0gICAgZWxlbWVudC5zZXRUaXRsZShzdHIpOwotICAgIHJldHVybjsKLSAgY2Fz
ZSBFbGVtZW50TGFuZzoKLSAgICBlbGVtZW50LnNldExhbmcoc3RyKTsKLSAgICByZXR1cm47Ci0g
IGNhc2UgRWxlbWVudERpcjoKLSAgICBlbGVtZW50LnNldERpcihzdHIpOwotICAgIHJldHVybjsK
LSAgY2FzZSBFbGVtZW50Q2xhc3NOYW1lOgotICAgIGVsZW1lbnQuc2V0Q2xhc3NOYW1lKHN0cik7
Ci0gICAgcmV0dXJuOwotICBjYXNlIEVsZW1lbnRJbm5lckhUTUw6Ci0gICAgZWxlbWVudC5zZXRJ
bm5lckhUTUwoc3RyLCBleGNlcHRpb24pOwotICAgIHJldHVybjsKLSAgY2FzZSBFbGVtZW50SW5u
ZXJUZXh0OgotICAgIGVsZW1lbnQuc2V0SW5uZXJUZXh0KHN0ciwgZXhjZXB0aW9uKTsKLSAgICBy
ZXR1cm47Ci0gIGNhc2UgRWxlbWVudE91dGVySFRNTDoKLSAgICBlbGVtZW50LnNldE91dGVySFRN
TChzdHIsIGV4Y2VwdGlvbik7Ci0gICAgcmV0dXJuOwotICBjYXNlIEVsZW1lbnRPdXRlclRleHQ6
Ci0gICAgZWxlbWVudC5zZXRPdXRlclRleHQoc3RyLCBleGNlcHRpb24pOwotICAgIHJldHVybjsK
LSAgY2FzZSBFbGVtZW50Q29udGVudEVkaXRhYmxlOgotICAgIGVsZW1lbnQuc2V0Q29udGVudEVk
aXRhYmxlKHN0cik7Ci0gICAgcmV0dXJuOwotICBkZWZhdWx0OgotICAgIGtkV2FybmluZygpIDw8
ICJLSlM6OkhUTUxFbGVtZW50OjpwdXRWYWx1ZSB1bmhhbmRsZWQgdG9rZW4gIiA8PCB0b2tlbiA8
PCAiIHRoaXNUYWc9IiA8PCBlbGVtZW50LnRhZ05hbWUoKS5zdHJpbmcoKSA8PCAiIHN0cj0iIDw8
IHN0ci5zdHJpbmcoKSA8PCBlbmRsOwotICB9CisgIH0qLworICAKIH0KIAogSFRNTEVsZW1lbnRJ
bXBsICp0b0hUTUxFbGVtZW50KFZhbHVlSW1wICp2YWwpCkBAIC0zMDM4LDIzICszMTM3LDE3IEBA
IEhUTUxFbGVtZW50SW1wbCAqdG9IVE1MRWxlbWVudChWYWx1ZUltcCAKIAogSFRNTFRhYmxlQ2Fw
dGlvbkVsZW1lbnRJbXBsICp0b0hUTUxUYWJsZUNhcHRpb25FbGVtZW50KFZhbHVlSW1wICp2YWwp
CiB7Ci0gICAgaWYgKEhUTUxFbGVtZW50SW1wbCAqZSA9IHRvSFRNTEVsZW1lbnQodmFsKSkKLSAg
ICAgICAgc3dpdGNoIChlLT5pZCgpKSB7Ci0gICAgICAgICAgICBjYXNlIElEX0NBUFRJT046Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxUYWJsZUNhcHRpb25FbGVtZW50
SW1wbCAqPihlKTsKLSAgICAgICAgfQorICAgIEhUTUxFbGVtZW50SW1wbCAqZSA9IHRvSFRNTEVs
ZW1lbnQodmFsKTsKKyAgICBpZiAoZSAmJiBlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Y2FwdGlv
bigpKSkKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxUYWJsZUNhcHRpb25FbGVtZW50
SW1wbCAqPihlKTsKICAgICByZXR1cm4gMDsKIH0KIAogSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJ
bXBsICp0b0hUTUxUYWJsZVNlY3Rpb25FbGVtZW50KFZhbHVlSW1wICp2YWwpCiB7Ci0gICAgaWYg
KEhUTUxFbGVtZW50SW1wbCAqZSA9IHRvSFRNTEVsZW1lbnQodmFsKSkKLSAgICAgICAgc3dpdGNo
IChlLT5pZCgpKSB7Ci0gICAgICAgICAgICBjYXNlIElEX1RIRUFEOgotICAgICAgICAgICAgY2Fz
ZSBJRF9UQk9EWToKLSAgICAgICAgICAgIGNhc2UgSURfVEZPT1Q6Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbCAqPihlKTsKLSAg
ICAgICAgfQorICAgIEhUTUxFbGVtZW50SW1wbCAqZSA9IHRvSFRNTEVsZW1lbnQodmFsKTsKKyAg
ICBpZiAoZSAmJiAoZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRoZWFkKCkpIHx8IGUtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjp0Ym9keSgpKSB8fCBlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGZv
b3QoKSkpKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlU2VjdGlvbkVsZW1l
bnRJbXBsICo+KGUpOwogICAgIHJldHVybiAwOwogfQogCkBAIC0zMTAzLDEwICszMTk2LDEwIEBA
IFZhbHVlIEtKUzo6SFRNTENvbGxlY3Rpb246OnRyeUdldChFeGVjU3QKICAgZWxzZSBpZiAocHJv
cGVydHlOYW1lID09ICJzZWxlY3RlZEluZGV4IikgewogICAgIC8vIE5PTi1TVEFOREFSRCBvcHRp
b25zLnNlbGVjdGVkSW5kZXgKICAgICBOb2RlSW1wbCAqb3B0aW9uID0gY29sbGVjdGlvbi5pdGVt
KDApOwotICAgIGlmIChvcHRpb24tPmlkKCkgPT0gSURfT1BUSU9OKSB7CisgICAgaWYgKG9wdGlv
bi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9wdGlvbigpKSkgewogICAgICAgTm9kZUltcGwgKnNl
bGVjdCA9IG9wdGlvbjsKICAgICAgIHdoaWxlICgoc2VsZWN0ID0gc2VsZWN0LT5wYXJlbnROb2Rl
KCkpKQotICAgICAgICBpZiAoc2VsZWN0LT5pZCgpID09IElEX1NFTEVDVCkKKyAgICAgICAgaWYg
KHNlbGVjdC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnNlbGVjdCgpKSkKIAkgIHJldHVybiBOdW1i
ZXIoc3RhdGljX2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnRJbXBsICo+KHNlbGVjdCktPnNlbGVjdGVk
SW5kZXgoKSk7CiAgICAgfQogICAgIHJldHVybiBVbmRlZmluZWQoKTsKQEAgLTMyOTQsNyArMzM4
Nyw3IEBAIHZvaWQgS0pTOjpIVE1MU2VsZWN0Q29sbGVjdGlvbjo6dHJ5UHV0KEUKIAogICAvLyBp
cyB2IGFuIG9wdGlvbiBlbGVtZW50ID8KICAgTm9kZUltcGwgKm9wdGlvbiA9IHRvTm9kZSh2YWx1
ZSk7Ci0gIGlmICghb3B0aW9uIHx8IG9wdGlvbi0+aWQoKSAhPSBJRF9PUFRJT04pCisgIGlmICgh
b3B0aW9uIHx8ICFvcHRpb24tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvcHRpb24oKSkpCiAgICAg
cmV0dXJuOwogCiAgIGludCBleGNlcHRpb24gPSAwOwpJbmRleDogV2ViQ29yZS9raHRtbC9lY21h
L2tqc19odG1sLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2xvY2FsL2hvbWUvY3ZzL0xhYnlyaW50
aC9XZWJDb3JlL2todG1sL2VjbWEva2pzX2h0bWwuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40
NApkaWZmIC11IC1wIC1yMS40NCBXZWJDb3JlL2todG1sL2VjbWEva2pzX2h0bWwuaAotLS0gV2Vi
Q29yZS9raHRtbC9lY21hL2tqc19odG1sLmgJMjAwNS8wNS8xMiAxNzoxMToyMQkxLjQ0CisrKyBX
ZWJDb3JlL2todG1sL2VjbWEva2pzX2h0bWwuaAkyMDA1LzA2LzAyIDA0OjEyOjAwCkBAIC04NSw2
ICs4NSwxMzMgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICBjYXB0aW9uX2luZm8sIGNvbF9pbmZv
LCB0YWJsZXNlY3Rpb25faW5mbywgdHJfaW5mbywKICAgICAgIHRhYmxlY2VsbF9pbmZvLCBmcmFt
ZVNldF9pbmZvLCBmcmFtZV9pbmZvLCBpRnJhbWVfaW5mbywgbWFycXVlZV9pbmZvOwogCisgICAg
Ly8gRklYTUU6IE1pZ2h0IG1ha2Ugc2Vuc2UgdG8gY29tYmluZSB0aGlzIHdpdGggQ2xhc3NJbmZv
IHNvbWUgZGF5LgorICAgIHR5cGVkZWYgVmFsdWUgKEhUTUxFbGVtZW50OjoqR2V0dGVyRnVuY3Rp
b24pKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB0eXBlZGVmIHZvaWQg
KEhUTUxFbGVtZW50OjoqU2V0dGVyRnVuY3Rpb24pKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
LCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIHN0
cnVjdCBHZXRTZXRJbmZvIHsgR2V0dGVyRnVuY3Rpb24gbV9nZXR0ZXI7IFNldHRlckZ1bmN0aW9u
IG1fc2V0dGVyOyB9OworICAgIGNvbnN0IEdldFNldEluZm8qIGdldFNldEluZm8oKSBjb25zdDsK
KyAgICBzdGF0aWMgY29uc3QgR2V0U2V0SW5mbyBodG1sX2dldHNldCwgaGVhZF9nZXRzZXQsIGxp
bmtfZ2V0c2V0LCB0aXRsZV9nZXRzZXQsCisgICAgICBtZXRhX2dldHNldCwgYmFzZV9nZXRzZXQs
IGlzSW5kZXhfZ2V0c2V0LCBzdHlsZV9nZXRzZXQsIGJvZHlfZ2V0c2V0LCBmb3JtX2dldHNldCwK
KyAgICAgIHNlbGVjdF9nZXRzZXQsIG9wdEdyb3VwX2dldHNldCwgb3B0aW9uX2dldHNldCwgaW5w
dXRfZ2V0c2V0LCB0ZXh0QXJlYV9nZXRzZXQsCisgICAgICBidXR0b25fZ2V0c2V0LCBsYWJlbF9n
ZXRzZXQsIGZpZWxkU2V0X2dldHNldCwgbGVnZW5kX2dldHNldCwgdWxfZ2V0c2V0LCBvbF9nZXRz
ZXQsCisgICAgICBkbF9nZXRzZXQsIGRpcl9nZXRzZXQsIG1lbnVfZ2V0c2V0LCBsaV9nZXRzZXQs
IGRpdl9nZXRzZXQsIHBfZ2V0c2V0LCBoZWFkaW5nX2dldHNldCwKKyAgICAgIGJsb2NrUXVvdGVf
Z2V0c2V0LCBxX2dldHNldCwgcHJlX2dldHNldCwgYnJfZ2V0c2V0LCBiYXNlRm9udF9nZXRzZXQs
IGZvbnRfZ2V0c2V0LAorICAgICAgaHJfZ2V0c2V0LCBtb2RfZ2V0c2V0LCBhX2dldHNldCwgY2Fu
dmFzX2dldHNldCwgaW1nX2dldHNldCwgb2JqZWN0X2dldHNldCwgcGFyYW1fZ2V0c2V0LAorICAg
ICAgYXBwbGV0X2dldHNldCwgbWFwX2dldHNldCwgYXJlYV9nZXRzZXQsIHNjcmlwdF9nZXRzZXQs
IHRhYmxlX2dldHNldCwKKyAgICAgIGNhcHRpb25fZ2V0c2V0LCBjb2xfZ2V0c2V0LCB0YWJsZXNl
Y3Rpb25fZ2V0c2V0LCB0cl9nZXRzZXQsCisgICAgICB0YWJsZWNlbGxfZ2V0c2V0LCBmcmFtZVNl
dF9nZXRzZXQsIGZyYW1lX2dldHNldCwgaUZyYW1lX2dldHNldCwgbWFycXVlZV9nZXRzZXQ7CisK
KyAgICBWYWx1ZSBodG1sR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsK
KyAgICB2b2lkICBodG1sU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBW
YWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIGhlYWRH
ZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGhlYWRT
ZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29u
c3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgbGlua0dldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgbGlua1NldHRlcihFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmlu
ZyYgc3RyKTsKKyAgICBWYWx1ZSB0aXRsZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tl
bikgY29uc3Q7CisgICAgdm9pZCAgdGl0bGVTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAg
VmFsdWUgbWV0YUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAg
dm9pZCAgbWV0YVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUm
IHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBiYXNlR2V0dGVy
KEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBiYXNlU2V0dGVy
KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERP
TTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIGlzSW5kZXhHZXR0ZXIoRXhlY1N0YXRlKiBl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGlzSW5kZXhTZXR0ZXIoRXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJp
bmcmIHN0cik7CisgICAgVmFsdWUgc3R5bGVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0OworICAgIHZvaWQgIHN0eWxlU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAg
IFZhbHVlIGJvZHlHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAg
IHZvaWQgIGJvZHlTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVl
JiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgZm9ybUdldHRl
cihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgZm9ybVNldHRl
cihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBE
T006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBzZWxlY3RHZXR0ZXIoRXhlY1N0YXRlKiBl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIHNlbGVjdFNldHRlcihFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmlu
ZyYgc3RyKTsKKyAgICBWYWx1ZSBvcHRHcm91cEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0
b2tlbikgY29uc3Q7CisgICAgdm9pZCAgb3B0R3JvdXBTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7
CisgICAgVmFsdWUgb3B0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25z
dDsKKyAgICB2b2lkICBvcHRpb25TZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNv
bnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUg
aW5wdXRHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQg
IGlucHV0U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFs
dWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIHRleHRBcmVhR2V0dGVy
KEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICB0ZXh0QXJlYVNl
dHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25z
dCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBidXR0b25HZXR0ZXIoRXhlY1N0YXRl
KiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGJ1dHRvblNldHRlcihFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0
cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBsYWJlbEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0
b2tlbikgY29uc3Q7CisgICAgdm9pZCAgbGFiZWxTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7Cisg
ICAgVmFsdWUgZmllbGRTZXRHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0
OworICAgIHZvaWQgIGZpZWxkU2V0U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBj
b25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVl
IGxlZ2VuZEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9p
ZCAgbGVnZW5kU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYg
dmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIHVMaXN0R2V0dGVy
KEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICB1TGlzdFNldHRl
cihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBE
T006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBvTGlzdEdldHRlcihFeGVjU3RhdGUqIGV4
ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgb0xpc3RTZXR0ZXIoRXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcm
IHN0cik7CisgICAgVmFsdWUgZExpc3RHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4p
IGNvbnN0OworICAgIHZvaWQgIGRMaXN0U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
LCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZh
bHVlIGRpckdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9p
ZCAgZGlyU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFs
dWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIG1lbnVHZXR0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIG1lbnVTZXR0ZXIoRXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpE
T01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgbGlHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQg
dG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGxpU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAg
IFZhbHVlIGRpdkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAg
dm9pZCAgZGl2U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYg
dmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIHBhcmFncmFwaEdl
dHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgcGFyYWdy
YXBoU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUs
IGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIGhlYWRpbmdHZXR0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGhlYWRpbmdTZXR0ZXIo
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9N
OjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgYmxvY2tRdW90ZUdldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgYmxvY2tRdW90ZVNldHRlcihFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRP
TVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBxdW90ZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGlu
dCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgcXVvdGVTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7
CisgICAgVmFsdWUgcHJlR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsK
KyAgICB2b2lkICBwcmVTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZh
bHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgYnJHZXR0
ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGJyU2V0dGVy
KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERP
TTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIGJhc2VGb250R2V0dGVyKEV4ZWNTdGF0ZSog
ZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBiYXNlRm9udFNldHRlcihFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0
cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBmb250R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRv
a2VuKSBjb25zdDsKKyAgICB2b2lkICBmb250U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAg
IFZhbHVlIGhyR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2
b2lkICBoclNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZh
bHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBtb2RHZXR0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIG1vZFNldHRlcihFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRP
TVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBhbmNob3JHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBp
bnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGFuY2hvclNldHRlcihFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3Ry
KTsKKyAgICBWYWx1ZSBjYW52YXNHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNv
bnN0OworICAgIHZvaWQgIGNhbnZhc1NldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwg
Y29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1
ZSBpbWFnZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9p
ZCAgaW1hZ2VTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2
YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgb2JqZWN0R2V0dGVy
KEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBvYmplY3RTZXR0
ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3Qg
RE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgcGFyYW1HZXR0ZXIoRXhlY1N0YXRlKiBl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIHBhcmFtU2V0dGVyKEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5n
JiBzdHIpOworICAgIFZhbHVlIGFwcGxldEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tl
bikgY29uc3Q7CisgICAgdm9pZCAgYXBwbGV0U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAg
IFZhbHVlIG1hcEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAg
dm9pZCAgbWFwU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYg
dmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIGFyZWFHZXR0ZXIo
RXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGFyZWFTZXR0ZXIo
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9N
OjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgc2NyaXB0R2V0dGVyKEV4ZWNTdGF0ZSogZXhl
YywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBzY3JpcHRTZXR0ZXIoRXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcm
IHN0cik7CisgICAgVmFsdWUgdGFibGVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4p
IGNvbnN0OworICAgIHZvaWQgIHRhYmxlU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
LCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZh
bHVlIHRhYmxlQ2FwdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7
CisgICAgdm9pZCAgdGFibGVDYXB0aW9uU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
LCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZh
bHVlIHRhYmxlQ29sR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAg
ICB2b2lkICB0YWJsZUNvbFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3Qg
VmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSB0YWJs
ZVNlY3Rpb25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZv
aWQgIHRhYmxlU2VjdGlvblNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3Qg
VmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSB0YWJs
ZVJvd0dldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAg
dGFibGVSb3dTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2
YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgdGFibGVDZWxsR2V0
dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICB0YWJsZUNl
bGxTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwg
Y29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgZnJhbWVTZXRHZXR0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGZyYW1lU2V0U2V0dGVy
KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERP
TTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIGZyYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhl
YywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBmcmFtZVNldHRlcihFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYg
c3RyKTsKKyAgICBWYWx1ZSBpRnJhbWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4p
IGNvbnN0OworICAgIHZvaWQgIGlGcmFtZVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
biwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBW
YWx1ZSBtYXJxdWVlR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAg
ICB2b2lkICBtYXJxdWVlU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBW
YWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworCiAgICAgZW51bSB7IEh0
bWxWZXJzaW9uLCBIZWFkUHJvZmlsZSwgTGlua0hyZWYsIExpbmtSZWwsIExpbmtNZWRpYSwKICAg
ICAgICAgICAgTGlua0NoYXJzZXQsIExpbmtEaXNhYmxlZCwgTGlua0hyZWZMYW5nLCBMaW5rUmV2
LCBMaW5rVGFyZ2V0LCBMaW5rVHlwZSwKICAgICAgICAgICAgTGlua1NoZWV0LCBUaXRsZVRleHQs
IE1ldGFOYW1lLCBNZXRhSHR0cEVxdWl2LCBNZXRhQ29udGVudCwgTWV0YVNjaGVtZSwKSW5kZXg6
IFdlYkNvcmUva2h0bWwvaHRtbC9kdGQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9sb2NhbC9o
b21lL2N2cy9MYWJ5cmludGgvV2ViQ29yZS9raHRtbC9odG1sL2R0ZC5jcHAsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuMzgKZGlmZiAtdSAtcCAtcjEuMzggV2ViQ29yZS9raHRtbC9odG1sL2R0ZC5j
cHAKLS0tIFdlYkNvcmUva2h0bWwvaHRtbC9kdGQuY3BwCTIwMDUvMDQvMTIgMjI6NDk6NDEJMS4z
OAorKysgV2ViQ29yZS9raHRtbC9odG1sL2R0ZC5jcHAJMjAwNS8wNi8wMiAwNDoxMjowMApAQCAt
NDQsNiArNDQsNyBAQCB1c2luZyBuYW1lc3BhY2UgRE9NOwogLy8gOCB0YWJsZQogLy8gOSBib2R5
IGZyYW1lc2V0CiAvLyAxMCBodG1sCisvKgogY29uc3QgdW5zaWduZWQgc2hvcnQgRE9NOjp0YWdQ
cmlvcml0eUFycmF5W10gPSB7CiAgICAgMCwgLy8gMAogICAgIDEsIC8vIElEX0EgPT0gMQpAQCAt
NTcsOCArNTgsNiBAQCBjb25zdCB1bnNpZ25lZCBzaG9ydCBET006OnRhZ1ByaW9yaXR5QXJyCiAg
ICAgMCwgLy8gSURfQkFTRUZPTlQKICAgICAxLCAvLyBJRF9CRE8KICAgICAxLCAvLyBJRF9CSUcK
LSAgICA1LCAvLyBJRF9CTE9DS1FVT1RFCi0gICAxMCwgLy8gSURfQk9EWQogICAgIDAsIC8vIElE
X0JSCiAgICAgMSwgLy8gSURfQlVUVE9OCiAgICAgMCwgLy8gSURfQ0FOVkFTCkBAIC03Miw3ICs3
MSw2IEBAIGNvbnN0IHVuc2lnbmVkIHNob3J0IERPTTo6dGFnUHJpb3JpdHlBcnIKICAgICAxLCAv
LyBJRF9ERUwKICAgICAxLCAvLyBJRF9ERk4KICAgICA1LCAvLyBJRF9ESVIKLSAgICA1LCAvLyBJ
RF9ESVYKICAgICA1LCAvLyBJRF9ETAogICAgIDMsIC8vIElEX0RUCiAgICAgMSwgLy8gSURfRU0K
QEAgLTgwLDE5ICs3OCw3IEBAIGNvbnN0IHVuc2lnbmVkIHNob3J0IERPTTo6dGFnUHJpb3JpdHlB
cnIKICAgICAzLCAvLyBJRF9GSUVMRFNFVAogICAgIDEsIC8vIElEX0ZPTlQKICAgICAzLCAvLyBJ
RF9GT1JNCi0gICAgMCwgLy8gSURfRlJBTUUKLSAgIDEwLC8vIElEX0ZSQU1FU0VUCi0gICAgNSwg
Ly8gSURfSDEKLSAgICA1LCAvLyBJRF9IMgotICAgIDUsIC8vIElEX0gzCi0gICAgNSwgLy8gSURf
SDQKLSAgICA1LCAvLyBJRF9INQotICAgIDUsIC8vIElEX0g2Ci0gICAxMCwvLyBJRF9IRUFECi0g
ICAgMCwgLy8gSURfSFIKLSAgIDExLC8vIElEX0hUTUwKICAgICAxLCAvLyBJRF9JCi0gICAgMSwg
Ly8gSURfSUZSQU1FCiAgICAgMCwgLy8gSURfSU1HCiAgICAgMCwgLy8gSURfSU5QVVQKICAgICAx
LCAvLyBJRF9JTlMKQEAgLTExNyw3ICsxMDMsNiBAQCBjb25zdCB1bnNpZ25lZCBzaG9ydCBET006
OnRhZ1ByaW9yaXR5QXJyCiAgICAgNSwgLy8gSURfT0wKICAgICAxLCAvLyBJRF9PUFRHUk9VUAog
ICAgIDIsIC8vIElEX09QVElPTgotICAgIDMsIC8vIElEX1AKICAgICAwLCAvLyBJRF9QQVJBTQog
ICAgIDUsIC8vIElEX1BMQUlOVEVYVAogICAgIDUsIC8vIElEX1BSRQpAQCAtMTI3LDcgKzExMiw2
IEBAIGNvbnN0IHVuc2lnbmVkIHNob3J0IERPTTo6dGFnUHJpb3JpdHlBcnIKICAgICAxLCAvLyBJ
RF9TQ1JJUFQKICAgICA2LCAvLyBJRF9TRUxFQ1QKICAgICAxLCAvLyBJRF9TTUFMTAotICAgIDEs
IC8vIElEX1NQQU4KICAgICAxLCAvLyBJRF9TVFJJS0UKICAgICAxLCAvLyBJRF9TVFJPTkcKICAg
ICAxLCAvLyBJRF9TVFlMRQpAQCAtMTY0LDggKzE0OCw2IEBAIGNvbnN0IHRhZ1N0YXR1cyBET006
OmVuZFRhZ0FycmF5W10gPSB7CiAgICAgRk9SQklEREVOLCAvLyBJRF9CQVNFRk9OVAogICAgIFJF
UVVJUkVELCAgLy8gSURfQkRPCiAgICAgUkVRVUlSRUQsICAvLyBJRF9CSUcKLSAgICBSRVFVSVJF
RCwgIC8vIElEX0JMT0NLUVVPVEUKLSAgICBSRVFVSVJFRCwgIC8vIElEX0JPRFkKICAgICBGT1JC
SURERU4sIC8vIElEX0JSCiAgICAgUkVRVUlSRUQsICAvLyBJRF9CVVRUT04KICAgICBGT1JCSURE
RU4sIC8vIElEX0NBTlZBUwpAQCAtMTc5LDcgKzE2MSw2IEBAIGNvbnN0IHRhZ1N0YXR1cyBET006
OmVuZFRhZ0FycmF5W10gPSB7CiAgICAgUkVRVUlSRUQsICAvLyBJRF9ERUwKICAgICBSRVFVSVJF
RCwgIC8vIElEX0RGTgogICAgIFJFUVVJUkVELCAgLy8gSURfRElSCi0gICAgUkVRVUlSRUQsICAv
LyBJRF9ESVYKICAgICBSRVFVSVJFRCwgIC8vIElEX0RMCiAgICAgT1BUSU9OQUwsICAvLyBJRF9E
VAogICAgIFJFUVVJUkVELCAgLy8gSURfRU0KQEAgLTE4NywxOSArMTY4LDggQEAgY29uc3QgdGFn
U3RhdHVzIERPTTo6ZW5kVGFnQXJyYXlbXSA9IHsKICAgICBSRVFVSVJFRCwgIC8vIElEX0ZJRUxE
U0VUCiAgICAgUkVRVUlSRUQsICAvLyBJRF9GT05UCiAgICAgUkVRVUlSRUQsICAvLyBJRF9GT1JN
Ci0gICAgRk9SQklEREVOLCAvLyBJRF9GUkFNRQogICAgIFJFUVVJUkVELCAgLy8gSURfRlJBTUVT
RVQKLSAgICBSRVFVSVJFRCwgIC8vIElEX0gxCi0gICAgUkVRVUlSRUQsICAvLyBJRF9IMgotICAg
IFJFUVVJUkVELCAgLy8gSURfSDMKLSAgICBSRVFVSVJFRCwgIC8vIElEX0g0Ci0gICAgUkVRVUlS
RUQsICAvLyBJRF9INQotICAgIFJFUVVJUkVELCAgLy8gSURfSDYKLSAgICBPUFRJT05BTCwgIC8v
IElEX0hFQUQKLSAgICBGT1JCSURERU4sIC8vIElEX0hSCi0gICAgUkVRVUlSRUQsICAvLyBJRF9I
VE1MCi0gICAgUkVRVUlSRUQsICAvLyBJRF9JCi0gICAgUkVRVUlSRUQsICAvLyBJRF9JRlJBTUUK
KyAgICAgIFJFUVVJUkVELCAgLy8gSURfSQogICAgIEZPUkJJRERFTiwgLy8gSURfSU1HCiAgICAg
Rk9SQklEREVOLCAvLyBJRF9JTlBVVAogICAgIFJFUVVJUkVELCAgLy8gSURfSU5TCkBAIC0yMjQs
NyArMTk0LDYgQEAgY29uc3QgdGFnU3RhdHVzIERPTTo6ZW5kVGFnQXJyYXlbXSA9IHsKICAgICBS
RVFVSVJFRCwgIC8vIElEX09MCiAgICAgUkVRVUlSRUQsICAvLyBJRF9PUFRHUk9VUAogICAgIE9Q
VElPTkFMLCAgLy8gSURfT1BUSU9OCi0gICAgT1BUSU9OQUwsICAvLyBJRF9QCiAgICAgRk9SQklE
REVOLCAvLyBJRF9QQVJBTQogICAgIFJFUVVJUkVELCAgLy8gSURfUExBSU5URVhUCiAgICAgUkVR
VUlSRUQsICAvLyBJRF9QUkUKQEAgLTIzNCw3ICsyMDMsNiBAQCBjb25zdCB0YWdTdGF0dXMgRE9N
OjplbmRUYWdBcnJheVtdID0gewogICAgIFJFUVVJUkVELCAgLy8gSURfU0NSSVBUCiAgICAgUkVR
VUlSRUQsICAvLyBJRF9TRUxFQ1QKICAgICBSRVFVSVJFRCwgIC8vIElEX1NNQUxMCi0gICAgUkVR
VUlSRUQsICAvLyBJRF9TUEFOCiAgICAgUkVRVUlSRUQsICAvLyBJRF9TVFJJS0UKICAgICBSRVFV
SVJFRCwgIC8vIElEX1NUUk9ORwogICAgIFJFUVVJUkVELCAgLy8gSURfU1RZTEUKQEAgLTI1OCw2
ICsyMjYsNyBAQCBjb25zdCB0YWdTdGF0dXMgRE9NOjplbmRUYWdBcnJheVtdID0gewogICAgIFJF
UVVJUkVEICAgLy8gSURfVEVYVAogfTsKIAorKi8KIAogc3RhdGljIGNvbnN0IHVzaG9ydCB0YWdf
bGlzdF8wW10gPSB7CiAgICAgSURfVEVYVCwKQEAgLTc2NywyMjMgKzczNiwzIEBAIGJvb2wgRE9N
OjpjaGVja0NoaWxkKHVzaG9ydCB0YWdJRCwgdXNob3IKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0KIH0KLQotdm9pZCBET006OmFkZEZvcmJpZGRlbihpbnQgdGFnSWQsIHVzaG9ydCAqZm9y
YmlkZGVuVGFncykKLXsKLSAgICBzd2l0Y2godGFnSWQpCi0gICAgewotICAgIGNhc2UgSURfTEFC
RUw6Ci0gICAgICAgIGZvcmJpZGRlblRhZ3NbSURfTEFCRUxdKys7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgSURfQlVUVE9OOgotICAgICAgICBmb3JiaWRkZW5UYWdzW0lEX0FdKys7Ci0gICAg
ICAgIGZvcmJpZGRlblRhZ3NbSURfSU5QVVRdKys7Ci0gICAgICAgIGZvcmJpZGRlblRhZ3NbSURf
U0VMRUNUXSsrOwotICAgICAgICBmb3JiaWRkZW5UYWdzW0lEX1RFWFRBUkVBXSsrOwotICAgICAg
ICBmb3JiaWRkZW5UYWdzW0lEX0xBQkVMXSsrOwotICAgICAgICBmb3JiaWRkZW5UYWdzW0lEX0JV
VFRPTl0rKzsKLSAgICAgICAgZm9yYmlkZGVuVGFnc1tJRF9GT1JNXSsrOwotICAgICAgICBmb3Ji
aWRkZW5UYWdzW0lEX0lTSU5ERVhdKys7Ci0gICAgICAgIGZvcmJpZGRlblRhZ3NbSURfRklFTERT
RVRdKys7Ci0gICAgICAgIGZvcmJpZGRlblRhZ3NbSURfSUZSQU1FXSsrOwotICAgICAgICBicmVh
azsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLXZvaWQgRE9NOjpy
ZW1vdmVGb3JiaWRkZW4oaW50IHRhZ0lkLCB1c2hvcnQgKmZvcmJpZGRlblRhZ3MpCi17Ci0gICAg
c3dpdGNoKHRhZ0lkKQotICAgIHsKLSAgICBjYXNlIElEX0xBQkVMOgotICAgICAgICBmb3JiaWRk
ZW5UYWdzW0lEX0xBQkVMXS0tOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIElEX0JVVFRPTjoK
LSAgICAgICAgZm9yYmlkZGVuVGFnc1tJRF9BXS0tOwotICAgICAgICBmb3JiaWRkZW5UYWdzW0lE
X0lOUFVUXS0tOwotICAgICAgICBmb3JiaWRkZW5UYWdzW0lEX1NFTEVDVF0tLTsKLSAgICAgICAg
Zm9yYmlkZGVuVGFnc1tJRF9URVhUQVJFQV0tLTsKLSAgICAgICAgZm9yYmlkZGVuVGFnc1tJRF9M
QUJFTF0tLTsKLSAgICAgICAgZm9yYmlkZGVuVGFnc1tJRF9CVVRUT05dLS07Ci0gICAgICAgIGZv
cmJpZGRlblRhZ3NbSURfRk9STV0tLTsKLSAgICAgICAgZm9yYmlkZGVuVGFnc1tJRF9JU0lOREVY
XS0tOwotICAgICAgICBmb3JiaWRkZW5UYWdzW0lEX0ZJRUxEU0VUXS0tOwotICAgICAgICBmb3Ji
aWRkZW5UYWdzW0lEX0lGUkFNRV0tLTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAg
ICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi0KLSNpZiAwCi0KLQotc3RydWN0IGF0dHJfcHJpdiB7
Ci0gICAgYXR0cl9wcml2KCkgeyBpZCA9IGxlbiA9IDAsIHZhbCA9IDA7IH0KLSAgICBhdHRyX3By
aXYodXNob3J0IGksIGNvbnN0IFFDaGFyICp2LCB1c2hvcnQgbCkKLSAgICB7IGlkID1pOyBsZW4g
PSBsLCB2YWwgPSB2OyB9Ci0gICAgdXNob3J0IGlkOwotICAgIGNvbnN0IFFDaGFyICp2YWw7Ci0g
ICAgdXNob3J0IGxlbjsKLX07Ci0KLURPTVN0cmluZyBmaW5kX2F0dHIodXNob3J0IGlkLCBjb25z
dCBhdHRyX3ByaXYgKmF0dHJzKQotewotICAgIGludCBpID0gMDsKLSAgICB3aGlsZShhdHRyc1tp
XS5pZCAhPSAwKQotICAgIHsKLSAgICAgICAgaWYoYXR0cnNbaV0uaWQgPT0gaWQpCi0gICAgICAg
ICAgICByZXR1cm4gRE9NU3RyaW5nKGF0dHJzW2ldLnZhbCwgYXR0cnNbaV0ubGVuKTsKLSAgICAg
ICAgaSsrOwotICAgIH0KLSAgICByZXR1cm4gRE9NU3RyaW5nKCk7Ci19Ci0KLXN0YXRpYyBjb25z
dCBRQ2hhciB2YWx1ZV8xXzAgW10gPSB7ICdOJywnTycsJ04nLCdFJyB9OwotCi1hdHRyX3ByaXYg
YXR0cl9saXN0XzFbXSA9IHsKLSAgICBhdHRyX3ByaXYoQVRUUl9DTEVBUiwgdmFsdWVfMV8wLCA0
KQotfTsKLQotc3RhdGljIGNvbnN0IFFDaGFyIHZhbHVlXzJfMCBbXSA9IHsgJ1InLCdFJywnQycs
J1QnIH07Ci0KLWF0dHJfcHJpdiBhdHRyX2xpc3RfMltdID0gewotICAgIGF0dHJfcHJpdihBVFRS
X1NIQVBFLCB2YWx1ZV8yXzAsIDQpCi19OwotCi1zdGF0aWMgY29uc3QgUUNoYXIgdmFsdWVfM18w
IFtdID0geyAnUicsJ0UnLCdDJywnVCcgfTsKLQotYXR0cl9wcml2IGF0dHJfbGlzdF8zW10gPSB7
Ci0gICAgYXR0cl9wcml2KEFUVFJfU0hBUEUsIHZhbHVlXzNfMCwgNCkKLX07Ci0KLXN0YXRpYyBj
b25zdCBRQ2hhciB2YWx1ZV80XzAgW10gPSB7ICdEJywnQScsJ1QnLCdBJyB9OwotCi1hdHRyX3By
aXYgYXR0cl9saXN0XzRbXSA9IHsKLSAgICBhdHRyX3ByaXYoQVRUUl9WQUxVRVRZUEUsIHZhbHVl
XzRfMCwgNCkKLX07Ci0KLXN0YXRpYyBjb25zdCBRQ2hhciB2YWx1ZV81XzAgW10gPSB7ICdHJywn
RScsJ1QnIH07Ci1zdGF0aWMgY29uc3QgUUNoYXIgdmFsdWVfNV8xIFtdID0geyAnQScsJ1AnLCdQ
JywnTCcsJ0knLCdDJywnQScsJ1QnLCdJJywnTycsJ04nLCcvJywnWCcsJy0nLCdXJywnVycsJ1cn
LCctJywnRicsJ08nLCdSJywnTScsJy0nLCdVJywnUicsJ0wnLCdFJywnTicsJ0MnLCdPJywnRCcs
J0UnLCdEJyB9OwotCi1hdHRyX3ByaXYgYXR0cl9saXN0XzVbXSA9IHsKLSAgICBhdHRyX3ByaXYo
QVRUUl9NRVRIT0QsIHZhbHVlXzVfMCwgMyksCi0gICAgYXR0cl9wcml2KEFUVFJfRU5DVFlQRSwg
dmFsdWVfNV8xLCAzMykKLX07Ci0KLXN0YXRpYyBjb25zdCBRQ2hhciB2YWx1ZV82XzAgW10gPSB7
ICdUJywnRScsJ1gnLCdUJyB9OwotCi1hdHRyX3ByaXYgYXR0cl9saXN0XzZbXSA9IHsKLSAgICBh
dHRyX3ByaXYoQVRUUl9UWVBFLCB2YWx1ZV82XzAsIDQpCi19OwotCi1zdGF0aWMgY29uc3QgUUNo
YXIgdmFsdWVfN18wIFtdID0geyAnUycsJ1UnLCdCJywnTScsJ0knLCdUJyB9OwotCi1hdHRyX3By
aXYgYXR0cl9saXN0XzdbXSA9IHsKLSAgICBhdHRyX3ByaXYoQVRUUl9UWVBFLCB2YWx1ZV83XzAs
IDYpCi19OwotCi1zdGF0aWMgY29uc3QgUUNoYXIgdmFsdWVfOF8wIFtdID0geyAnMScgfTsKLQot
YXR0cl9wcml2IGF0dHJfbGlzdF84W10gPSB7Ci0gICAgYXR0cl9wcml2KEFUVFJfU1BBTiwgdmFs
dWVfOF8wLCAxKQotfTsKLQotc3RhdGljIGNvbnN0IFFDaGFyIHZhbHVlXzlfMCBbXSA9IHsgJzEn
IH07Ci0KLWF0dHJfcHJpdiBhdHRyX2xpc3RfOVtdID0gewotICAgIGF0dHJfcHJpdihBVFRSX1NQ
QU4sIHZhbHVlXzlfMCwgMSkKLX07Ci0KLXN0YXRpYyBjb25zdCBRQ2hhciB2YWx1ZV8xMF8wIFtd
ID0geyAnMScgfTsKLXN0YXRpYyBjb25zdCBRQ2hhciB2YWx1ZV8xMF8xIFtdID0geyAnMScgfTsK
LQotYXR0cl9wcml2IGF0dHJfbGlzdF8xMFtdID0gewotICAgIGF0dHJfcHJpdihBVFRSX1JPV1NQ
QU4sIHZhbHVlXzEwXzAsIDEpLAotICAgIGF0dHJfcHJpdihBVFRSX0NPTFNQQU4sIHZhbHVlXzEw
XzEsIDEpCi19OwotCi1zdGF0aWMgY29uc3QgUUNoYXIgdmFsdWVfMTFfMCBbXSA9IHsgJzEnIH07
Ci1zdGF0aWMgY29uc3QgUUNoYXIgdmFsdWVfMTFfMSBbXSA9IHsgJ0EnLCdVJywnVCcsJ08nIH07
Ci0KLWF0dHJfcHJpdiBhdHRyX2xpc3RfMTFbXSA9IHsKLSAgICBhdHRyX3ByaXYoQVRUUl9GUkFN
RUJPUkRFUiwgdmFsdWVfMTFfMCwgMSksCi0gICAgYXR0cl9wcml2KEFUVFJfU0NST0xMSU5HLCB2
YWx1ZV8xMV8xLCA0KQotfTsKLQotc3RhdGljIGNvbnN0IFFDaGFyIHZhbHVlXzEyXzAgW10gPSB7
ICcxJyB9Owotc3RhdGljIGNvbnN0IFFDaGFyIHZhbHVlXzEyXzEgW10gPSB7ICdBJywnVScsJ1Qn
LCdPJyB9OwotCi1hdHRyX3ByaXYgYXR0cl9saXN0XzEyW10gPSB7Ci0gICAgYXR0cl9wcml2KEFU
VFJfRlJBTUVCT1JERVIsIHZhbHVlXzEyXzAsIDEpLAotICAgIGF0dHJfcHJpdihBVFRSX1NDUk9M
TElORywgdmFsdWVfMTJfMSwgNCkKLX07Ci0KLXN0YXRpYyBjb25zdCBRQ2hhciB2YWx1ZV8xM18w
IFtdID0geyAnLScsJy8nLCcvJywnVycsJzMnLCdDJywnLycsJy8nLCdEJywnVCcsJ0QnIH07Ci1z
dGF0aWMgY29uc3QgUUNoYXIgdmFsdWVfMTNfMSBbXSA9IHsgJ1QnLCdSJywnQScsJ04nLCdTJywn
SScsJ1QnLCdJJywnTycsJ04nLCdBJywnTCcsJy8nLCcvJywnRScsJ04nIH07Ci0KLWF0dHJfcHJp
diBhdHRyX2xpc3RfMTNbXSA9IHsKLSAgICBhdHRyX3ByaXYoQVRUUl9WRVJTSU9OLCB2YWx1ZV8x
M18wLCAxMSksCi0gICAgYXR0cl9wcml2KEFUVFJfSFRNTCwgdmFsdWVfMTNfMSwgMTYpCi19Owot
Ci1ET01TdHJpbmcgRE9NOjpmaW5kRGVmQXR0ck5vbmUodXNob3J0KQotewotICAgIHJldHVybiBE
T01TdHJpbmcoKTsKLX07Ci1ET01TdHJpbmcgRE9NOjpmaW5kRGVmQXR0ckJSKHVzaG9ydCBpZCkK
LXsKLSAgICByZXR1cm4gZmluZF9hdHRyKGlkLCBhdHRyX2xpc3RfMSk7Ci19Ci1ET01TdHJpbmcg
RE9NOjpmaW5kRGVmQXR0ckEodXNob3J0IGlkKQotewotICAgIHJldHVybiBmaW5kX2F0dHIoaWQs
IGF0dHJfbGlzdF8yKTsKLX0KLURPTVN0cmluZyBET006OmZpbmREZWZBdHRyQVJFQSh1c2hvcnQg
aWQpCi17Ci0gICAgcmV0dXJuIGZpbmRfYXR0cihpZCwgYXR0cl9saXN0XzMpOwotfQotRE9NU3Ry
aW5nIERPTTo6ZmluZERlZkF0dHJQQVJBTSh1c2hvcnQgaWQpCi17Ci0gICAgcmV0dXJuIGZpbmRf
YXR0cihpZCwgYXR0cl9saXN0XzQpOwotfQotRE9NU3RyaW5nIERPTTo6ZmluZERlZkF0dHJGT1JN
KHVzaG9ydCBpZCkKLXsKLSAgICByZXR1cm4gZmluZF9hdHRyKGlkLCBhdHRyX2xpc3RfNSk7Ci19
Ci1ET01TdHJpbmcgRE9NOjpmaW5kRGVmQXR0cklOUFVUKHVzaG9ydCBpZCkKLXsKLSAgICByZXR1
cm4gZmluZF9hdHRyKGlkLCBhdHRyX2xpc3RfNik7Ci19Ci1ET01TdHJpbmcgRE9NOjpmaW5kRGVm
QXR0ckJVVFRPTih1c2hvcnQgaWQpCi17Ci0gICAgcmV0dXJuIGZpbmRfYXR0cihpZCwgYXR0cl9s
aXN0XzcpOwotfQotRE9NU3RyaW5nIERPTTo6ZmluZERlZkF0dHJDT0xHUk9VUCh1c2hvcnQgaWQp
Ci17Ci0gICAgcmV0dXJuIGZpbmRfYXR0cihpZCwgYXR0cl9saXN0XzgpOwotfQotRE9NU3RyaW5n
IERPTTo6ZmluZERlZkF0dHJDT0wodXNob3J0IGlkKQotewotICAgIHJldHVybiBmaW5kX2F0dHIo
aWQsIGF0dHJfbGlzdF85KTsKLX0KLURPTVN0cmluZyBET006OmZpbmREZWZBdHRyVEgodXNob3J0
IGlkKQotewotICAgIHJldHVybiBmaW5kX2F0dHIoaWQsIGF0dHJfbGlzdF8xMCk7Ci19Ci1ET01T
dHJpbmcgRE9NOjpmaW5kRGVmQXR0ckZSQU1FKHVzaG9ydCBpZCkKLXsKLSAgICByZXR1cm4gZmlu
ZF9hdHRyKGlkLCBhdHRyX2xpc3RfMTEpOwotfQotRE9NU3RyaW5nIERPTTo6ZmluZERlZkF0dHJJ
RlJBTUUodXNob3J0IGlkKQotewotICAgIHJldHVybiBmaW5kX2F0dHIoaWQsIGF0dHJfbGlzdF8x
Mik7Ci19Ci1ET01TdHJpbmcgRE9NOjpmaW5kRGVmQXR0ckhUTUwodXNob3J0IGlkKQotewotICAg
IHJldHVybiBmaW5kX2F0dHIoaWQsIGF0dHJfbGlzdF8xMyk7Ci19Ci0KLSNlbmRpZgpJbmRleDog
V2ViQ29yZS9raHRtbC9odG1sL2R0ZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9sb2NhbC9ob21l
L2N2cy9MYWJ5cmludGgvV2ViQ29yZS9raHRtbC9odG1sL2R0ZC5oLHYKcmV0cmlldmluZyByZXZp
c2lvbiAxLjUKZGlmZiAtdSAtcCAtcjEuNSBXZWJDb3JlL2todG1sL2h0bWwvZHRkLmgKLS0tIFdl
YkNvcmUva2h0bWwvaHRtbC9kdGQuaAkyMDA1LzA0LzEyIDIyOjQ5OjQxCTEuNQorKysgV2ViQ29y
ZS9raHRtbC9odG1sL2R0ZC5oCTIwMDUvMDYvMDIgMDQ6MTI6MDAKQEAgLTI4LDMxICsyOCw3IEBA
CiBuYW1lc3BhY2UgRE9NCiB7CiAKLXZvaWQgYWRkRm9yYmlkZGVuKGludCB0YWdJZCwgdXNob3J0
ICpmb3JiaWRkZW5UYWdzKTsKLXZvaWQgcmVtb3ZlRm9yYmlkZGVuKGludCB0YWdJZCwgdXNob3J0
ICpmb3JiaWRkZW5UYWdzKTsKLQotZW51bSB0YWdTdGF0dXMgeyBPUFRJT05BTCwgUkVRVUlSRUQs
IEZPUkJJRERFTiB9OwotCiBib29sIGNoZWNrQ2hpbGQodXNob3J0IHRhZ0lELCB1c2hvcnQgY2hp
bGRJRCwgYm9vbCBzdHJpY3QpOwotCi1leHRlcm4gY29uc3QgdW5zaWduZWQgc2hvcnQgdGFnUHJp
b3JpdHlBcnJheVtdOwotZXh0ZXJuIGNvbnN0IHRhZ1N0YXR1cyBlbmRUYWdBcnJheVtdOwotCi1p
bmxpbmUgdW5zaWduZWQgc2hvcnQgdGFnUHJpb3JpdHkoUV9VSU5UMzIgdGFnSWQpCi17Ci0gICAg
Ly8gVHJlYXQgY3VzdG9tIGVsZW1lbnRzIHRoZSBzYW1lIGFzIDxzcGFuPjsgYWxzbyBkb24ndCBy
ZWFkIHBhc3QgdGhlIGVuZCBvZiB0aGUgYXJyYXkuCi0gICAgaWYgKHRhZ0lkID4gSURfTEFTVF9U
QUcpCi0gICAgICAgIHJldHVybiB0YWdQcmlvcml0eUFycmF5W0lEX1NQQU5dOwotICAgIHJldHVy
biB0YWdQcmlvcml0eUFycmF5W3RhZ0lkXTsKLX0KLQotaW5saW5lIHRhZ1N0YXR1cyBlbmRUYWdS
ZXF1aXJlbWVudChRX1VJTlQzMiB0YWdJZCkKLXsKLSAgICAvLyBUcmVhdCBjdXN0b20gZWxlbWVu
dHMgdGhlIHNhbWUgYXMgPHNwYW4+OyBhbHNvIGRvbid0IHJlYWQgcGFzdCB0aGUgZW5kIG9mIHRo
ZSBhcnJheS4KLSAgICBpZiAodGFnSWQgPiBJRF9MQVNUX1RBRykKLSAgICAgICAgcmV0dXJuIGVu
ZFRhZ0FycmF5W0lEX1NQQU5dOwotICAgIHJldHVybiBlbmRUYWdBcnJheVt0YWdJZF07Ci19CiAK
IH0gLy9uYW1lc3BhY2UgRE9NCiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUva2h0bWwvaHRtbC9odG1s
X2Jhc2VpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvbG9jYWwvaG9tZS9jdnMvTGFieXJp
bnRoL1dlYkNvcmUva2h0bWwvaHRtbC9odG1sX2Jhc2VpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS43MgpkaWZmIC11IC1wIC1yMS43MiBXZWJDb3JlL2todG1sL2h0bWwvaHRtbF9iYXNl
aW1wbC5jcHAKLS0tIFdlYkNvcmUva2h0bWwvaHRtbC9odG1sX2Jhc2VpbXBsLmNwcAkyMDA1LzA1
LzEyIDE3OjExOjIxCTEuNzIKKysrIFdlYkNvcmUva2h0bWwvaHRtbC9odG1sX2Jhc2VpbXBsLmNw
cAkyMDA1LzA2LzAyIDA0OjEyOjAxCkBAIC00OCw3ICs0OCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBE
T007CiB1c2luZyBuYW1lc3BhY2Uga2h0bWw7CiAKIEhUTUxCb2R5RWxlbWVudEltcGw6OkhUTUxC
b2R5RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50SW1wbChk
b2MpLCBtX2xpbmtEZWNsKDApCisgICAgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjpib2R5
KCksIGRvYyksIG1fbGlua0RlY2woMCkKIHsKIH0KIApAQCAtNjEsMTEgKzYxLDYgQEAgSFRNTEJv
ZHlFbGVtZW50SW1wbDo6fkhUTUxCb2R5RWxlbWVudEltcAogICAgIH0KIH0KIAotTm9kZUltcGw6
OklkIEhUTUxCb2R5RWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfQk9E
WTsKLX0KLQogdm9pZCBIVE1MQm9keUVsZW1lbnRJbXBsOjpjcmVhdGVMaW5rRGVjbCgpCiB7CiAg
ICAgbV9saW5rRGVjbCA9IG5ldyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbkltcGw7CkBAIC0y
ODksOCArMjg0LDE5IEBAIHZvaWQgSFRNTEJvZHlFbGVtZW50SW1wbDo6c2V0VkxpbmsoY29uc3QK
IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogSFRNTEZyYW1lRWxlbWVudEltcGw6OkhUTUxGcmFtZUVs
ZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0gICAgOiBIVE1MRWxlbWVudEltcGwoZG9jKQor
ICAgIDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6ZnJhbWUoKSwgZG9jKQoreworICAgIGlu
aXQoKTsKK30KKworSFRNTEZyYW1lRWxlbWVudEltcGw6OkhUTUxGcmFtZUVsZW1lbnRJbXBsKGNv
bnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50UHRyICpkb2MpCisgICAgOiBIVE1M
RWxlbWVudEltcGwodGFnTmFtZSwgZG9jKQogeworICAgIGluaXQoKTsKK30KKwordm9pZCBIVE1M
RnJhbWVFbGVtZW50SW1wbDo6aW5pdCgpCit7CiAgICAgbV9mcmFtZUJvcmRlciA9IHRydWU7CiAg
ICAgbV9mcmFtZUJvcmRlclNldCA9IGZhbHNlOwogICAgIG1fbWFyZ2luV2lkdGggPSAtMTsKQEAg
LTMwMywxMSArMzA5LDYgQEAgSFRNTEZyYW1lRWxlbWVudEltcGw6On5IVE1MRnJhbWVFbGVtZW50
SQogewogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTEZyYW1lRWxlbWVudEltcGw6OmlkKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gSURfRlJBTUU7Ci19Ci0KIGJvb2wgSFRNTEZyYW1lRWxlbWVudEltcGw6
OmlzVVJMQWxsb3dlZChjb25zdCBBdG9taWNTdHJpbmcgJlVSTFN0cmluZykgY29uc3QKIHsKICAg
ICBpZiAoVVJMU3RyaW5nLmlzRW1wdHkoKSkgewpAQCAtNDgyLDcgKzQ4Myw3IEBAIHZvaWQgSFRN
TEZyYW1lRWxlbWVudEltcGw6OmF0dGFjaCgpCiAKICAgICAvLyBpbmhlcml0IGRlZmF1bHQgc2V0
dGluZ3MgZnJvbSBwYXJlbnQgZnJhbWVzZXQKICAgICBmb3IgKE5vZGVJbXBsICpub2RlID0gcGFy
ZW50Tm9kZSgpOyBub2RlOyBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpKQotICAgICAgICBpZiAo
bm9kZS0+aWQoKSA9PSBJRF9GUkFNRVNFVCkgeworICAgICAgICBpZiAobm9kZS0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OmZyYW1lc2V0KCkpKSB7CiAgICAgICAgICAgICBIVE1MRnJhbWVTZXRFbGVt
ZW50SW1wbCogZnJhbWVzZXQgPSBzdGF0aWNfY2FzdDxIVE1MRnJhbWVTZXRFbGVtZW50SW1wbCo+
KG5vZGUpOwogICAgICAgICAgICAgaWYgKCFtX2ZyYW1lQm9yZGVyU2V0KQogICAgICAgICAgICAg
ICAgIG1fZnJhbWVCb3JkZXIgPSBmcmFtZXNldC0+ZnJhbWVCb3JkZXIoKTsKQEAgLTY2MSw3ICs2
NjIsNyBAQCB2b2lkIEhUTUxGcmFtZUVsZW1lbnRJbXBsOjpzZXRTcmMoY29uc3QgCiAvLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCiAKIEhUTUxGcmFtZVNldEVsZW1lbnRJbXBsOjpIVE1MRnJhbWVTZXRFbGVt
ZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAgIDogSFRNTEVsZW1lbnRJbXBsKGRvYykKKyAg
ICA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6OmZyYW1lc2V0KCksIGRvYykKIHsKICAgICAv
LyBkZWZhdWx0IHZhbHVlIGZvciByb3dzIGFuZCBjb2xzLi4uCiAgICAgbV90b3RhbFJvd3MgPSAx
OwpAQCAtNjg1LDExICs2ODYsNiBAQCBIVE1MRnJhbWVTZXRFbGVtZW50SW1wbDo6fkhUTUxGcmFt
ZVNldEVsCiAgICAgICAgIGRlbGV0ZSBbXSBtX2NvbHM7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1M
RnJhbWVTZXRFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9GUkFNRVNF
VDsKLX0KLQogdm9pZCBIVE1MRnJhbWVTZXRFbGVtZW50SW1wbDo6cGFyc2VNYXBwZWRBdHRyaWJ1
dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqYXR0cikKIHsKICAgICBzd2l0Y2goYXR0ci0+aWQoKSkK
QEAgLTc1Miw4ICs3NDgsNyBAQCB2b2lkIEhUTUxGcmFtZVNldEVsZW1lbnRJbXBsOjphdHRhY2go
KQogICAgIEhUTUxFbGVtZW50SW1wbCogbm9kZSA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1w
bCo+KHBhcmVudE5vZGUoKSk7CiAgICAgd2hpbGUobm9kZSkKICAgICB7Ci0gICAgICAgIGlmKG5v
ZGUtPmlkKCkgPT0gSURfRlJBTUVTRVQpCi0gICAgICAgIHsKKyAgICAgICAgaWYgKG5vZGUtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjpmcmFtZXNldCgpKSkgewogICAgICAgICAgICAgSFRNTEZyYW1l
U2V0RWxlbWVudEltcGwqIGZyYW1lc2V0ID0gc3RhdGljX2Nhc3Q8SFRNTEZyYW1lU2V0RWxlbWVu
dEltcGwqPihub2RlKTsKICAgICAgICAgICAgIGlmKCFmcmFtZUJvcmRlclNldCkgIGZyYW1lYm9y
ZGVyID0gZnJhbWVzZXQtPmZyYW1lQm9yZGVyKCk7CiAgICAgICAgICAgICBpZighbm9yZXNpemUp
ICBub3Jlc2l6ZSA9IGZyYW1lc2V0LT5ub1Jlc2l6ZSgpOwpAQCAtODE3LDcgKzgxMiw3IEBAIHZv
aWQgSFRNTEZyYW1lU2V0RWxlbWVudEltcGw6OnNldFJvd3MoY28KIC8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KIAogSFRNTEhlYWRFbGVtZW50SW1wbDo6SFRNTEhlYWRFbGVtZW50SW1wbChEb2N1bWVudFB0
ciAqZG9jKQotICAgIDogSFRNTEVsZW1lbnRJbXBsKGRvYykKKyAgICA6IEhUTUxFbGVtZW50SW1w
bChIVE1MTmFtZXM6OmhlYWQoKSwgZG9jKQogewogfQogCkBAIC04MjUsMTEgKzgyMCw2IEBAIEhU
TUxIZWFkRWxlbWVudEltcGw6On5IVE1MSGVhZEVsZW1lbnRJbXAKIHsKIH0KIAotTm9kZUltcGw6
OklkIEhUTUxIZWFkRWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfSEVB
RDsKLX0KLQogRE9NU3RyaW5nIEhUTUxIZWFkRWxlbWVudEltcGw6OnByb2ZpbGUoKSBjb25zdAog
ewogICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoQVRUUl9QUk9GSUxFKTsKQEAgLTg0Myw3ICs4MzMs
NyBAQCB2b2lkIEhUTUxIZWFkRWxlbWVudEltcGw6OnNldFByb2ZpbGUoY29uCiAvLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCiAKIEhUTUxIdG1sRWxlbWVudEltcGw6OkhUTUxIdG1sRWxlbWVudEltcGwoRG9j
dW1lbnRQdHIgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50SW1wbChkb2MpCisgICAgOiBIVE1MRWxl
bWVudEltcGwoSFRNTE5hbWVzOjpodG1sKCksIGRvYykKIHsKIH0KIApAQCAtODUxLDExICs4NDEs
NiBAQCBIVE1MSHRtbEVsZW1lbnRJbXBsOjp+SFRNTEh0bWxFbGVtZW50SW1wCiB7CiB9CiAKLU5v
ZGVJbXBsOjpJZCBIVE1MSHRtbEVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IElEX0hUTUw7Ci19Ci0KIERPTVN0cmluZyBIVE1MSHRtbEVsZW1lbnRJbXBsOjp2ZXJzaW9uKCkg
Y29uc3QKIHsKICAgICByZXR1cm4gZ2V0QXR0cmlidXRlKEFUVFJfVkVSU0lPTik7CkBAIC04Njgs
NyArODUzLDcgQEAgdm9pZCBIVE1MSHRtbEVsZW1lbnRJbXBsOjpzZXRWZXJzaW9uKGNvbgogCiAv
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCiAKLUhUTUxJRnJhbWVFbGVtZW50SW1wbDo6SFRNTElGcmFtZUVs
ZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpIDogSFRNTEZyYW1lRWxlbWVudEltcGwoZG9jKQor
SFRNTElGcmFtZUVsZW1lbnRJbXBsOjpIVE1MSUZyYW1lRWxlbWVudEltcGwoRG9jdW1lbnRQdHIg
KmRvYykgOiBIVE1MRnJhbWVFbGVtZW50SW1wbChIVE1MTmFtZXM6OmlmcmFtZSgpLCBkb2MpCiB7
CiAgICAgbV9mcmFtZUJvcmRlciA9IGZhbHNlOwogICAgIG1fbWFyZ2luV2lkdGggPSAtMTsKQEAg
LTg3OCwxMSArODYzLDYgQEAgSFRNTElGcmFtZUVsZW1lbnRJbXBsOjpIVE1MSUZyYW1lRWxlbWVu
dAogCiBIVE1MSUZyYW1lRWxlbWVudEltcGw6On5IVE1MSUZyYW1lRWxlbWVudEltcGwoKQogewot
fQotCi1Ob2RlSW1wbDo6SWQgSFRNTElGcmFtZUVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIElEX0lGUkFNRTsKIH0KIAogYm9vbCBIVE1MSUZyYW1lRWxlbWVudEltcGw6Om1h
cFRvRW50cnkoTm9kZUltcGw6OklkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQp
IGNvbnN0CkluZGV4OiBXZWJDb3JlL2todG1sL2h0bWwvaHRtbF9iYXNlaW1wbC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9sb2NhbC9ob21lL2N2cy9MYWJ5cmludGgvV2ViQ29yZS9raHRtbC9odG1s
L2h0bWxfYmFzZWltcGwuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yNwpkaWZmIC11IC1wIC1y
MS4yNyBXZWJDb3JlL2todG1sL2h0bWwvaHRtbF9iYXNlaW1wbC5oCi0tLSBXZWJDb3JlL2todG1s
L2h0bWwvaHRtbF9iYXNlaW1wbC5oCTIwMDUvMDUvMTEgMDU6NDk6MzQJMS4yNworKysgV2ViQ29y
ZS9raHRtbC9odG1sL2h0bWxfYmFzZWltcGwuaAkyMDA1LzA2LzAyIDA0OjEyOjAxCkBAIC01NSw4
ICs1NSw4IEBAIHB1YmxpYzoKICAgICBIVE1MQm9keUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpk
b2MpOwogICAgIH5IVE1MQm9keUVsZW1lbnRJbXBsKCk7CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkg
Y29uc3Q7Ci0KKyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDEw
OyB9CisgICAKICAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShOb2RlSW1wbDo6SWQgYXR0ciwg
TWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHBh
cnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKik7CiAKQEAgLTkyLDExICs5
MiwxNCBAQCBjbGFzcyBIVE1MRnJhbWVFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MCiAKIHB1Ymxp
YzoKICAgICBIVE1MRnJhbWVFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKTsKLQorICAgIEhU
TUxGcmFtZUVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50
UHRyKiBkb2MpOwogICAgIH5IVE1MRnJhbWVFbGVtZW50SW1wbCgpOwogCi0gICAgdmlydHVhbCBJ
ZCBpZCgpIGNvbnN0OworICAgIHZvaWQgaW5pdCgpOwogCisgICAgdmlydHVhbCBIVE1MVGFnU3Rh
dHVzIGVuZFRhZ3JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gRk9SQklEREVOOyB9CisgICAg
dmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAwOyB9CisgIAogICAgIHZp
cnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICopOwog
ICAgIHZpcnR1YWwgdm9pZCBhdHRhY2goKTsKICAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoKCk7CkBA
IC0xNzEsNyArMTc0LDcgQEAgcHVibGljOgogCiAgICAgfkhUTUxGcmFtZVNldEVsZW1lbnRJbXBs
KCk7CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgdGFnUHJp
b3JpdHkoKSBjb25zdCB7IHJldHVybiAxMDsgfQogCiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFw
cGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKik7CiAgICAgdmlydHVhbCB2b2lkIGF0
dGFjaCgpOwpAQCAtMjE5LDcgKzIyMiw4IEBAIHB1YmxpYzoKIAogICAgIH5IVE1MSGVhZEVsZW1l
bnRJbXBsKCk7CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CisgICAgdmlydHVhbCBIVE1M
VGFnU3RhdHVzIGVuZFRhZ3JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gT1BUSU9OQUw7IH0K
KyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDEwOyB9CiAKICAg
ICBET01TdHJpbmcgcHJvZmlsZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0UHJvZmlsZShjb25zdCBE
T01TdHJpbmcgJik7CkBAIC0yMzMsNyArMjM3LDcgQEAgcHVibGljOgogICAgIEhUTUxIdG1sRWxl
bWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYyk7CiAgICAgfkhUTUxIdG1sRWxlbWVudEltcGwoKTsK
IAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0
eSgpIGNvbnN0IHsgcmV0dXJuIDExOyB9CiAKICAgICBET01TdHJpbmcgdmVyc2lvbigpIGNvbnN0
OwogICAgIHZvaWQgc2V0VmVyc2lvbihjb25zdCBET01TdHJpbmcgJik7CkBAIC0yNDYsMTAgKzI1
MCw3IEBAIGNsYXNzIEhUTUxJRnJhbWVFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE0KIHsKIHB1Ymxp
YzoKICAgICBIVE1MSUZyYW1lRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYyk7Ci0KICAgICB+
SFRNTElGcmFtZUVsZW1lbnRJbXBsKCk7Ci0KLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CiAK
ICAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShOb2RlSW1wbDo6SWQgYXR0ciwgTWFwcGVkQXR0
cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVk
QXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIpOwpJbmRleDogV2ViQ29yZS9raHRt
bC9odG1sL2h0bWxfYmxvY2tpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvbG9jYWwvaG9t
ZS9jdnMvTGFieXJpbnRoL1dlYkNvcmUva2h0bWwvaHRtbC9odG1sX2Jsb2NraW1wbC5jcHAsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuMTcKZGlmZiAtdSAtcCAtcjEuMTcgV2ViQ29yZS9raHRtbC9o
dG1sL2h0bWxfYmxvY2tpbXBsLmNwcAotLS0gV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfYmxvY2tp
bXBsLmNwcAkyMDA1LzA1LzExIDA1OjQ5OjM0CTEuMTcKKysrIFdlYkNvcmUva2h0bWwvaHRtbC9o
dG1sX2Jsb2NraW1wbC5jcHAJMjAwNS8wNi8wMiAwNDoxMjowMQpAQCAtMzcsNyArMzcsNyBAQCB1
c2luZyBuYW1lc3BhY2Uga2h0bWw7CiB1c2luZyBuYW1lc3BhY2UgRE9NOwogCiBIVE1MQmxvY2tx
dW90ZUVsZW1lbnRJbXBsOjpIVE1MQmxvY2txdW90ZUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpk
b2MpCi0gICAgOiBIVE1MRWxlbWVudEltcGwoZG9jKQorICAgIDogSFRNTEVsZW1lbnRJbXBsKEhU
TUxOYW1lczo6YmxvY2txdW90ZSgpLCBkb2MpCiB7CiB9CiAKQEAgLTQ1LDExICs0NSw2IEBAIEhU
TUxCbG9ja3F1b3RlRWxlbWVudEltcGw6On5IVE1MQmxvY2txdW8KIHsKIH0KIAotTm9kZUltcGw6
OklkIEhUTUxCbG9ja3F1b3RlRWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
SURfQkxPQ0tRVU9URTsKLX0KLQogRE9NU3RyaW5nIEhUTUxCbG9ja3F1b3RlRWxlbWVudEltcGw6
OmNpdGUoKSBjb25zdAogewogICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoQVRUUl9DSVRFKTsKQEAg
LTYzLDcgKzU4LDcgQEAgdm9pZCBIVE1MQmxvY2txdW90ZUVsZW1lbnRJbXBsOjpzZXRDaXRlKAog
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MRGl2RWxlbWVudEltcGw6OkhUTUxEaXZFbGVtZW50
SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAgIDogSFRNTEVsZW1lbnRJbXBsKGRvYykKKyAgICA6
IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6OmRpdigpLCBkb2MpCiB7CiB9CiAKQEAgLTcxLDEx
ICs2Niw2IEBAIEhUTUxEaXZFbGVtZW50SW1wbDo6fkhUTUxEaXZFbGVtZW50SW1wbCgKIHsKIH0K
IAotTm9kZUltcGw6OklkIEhUTUxEaXZFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJl
dHVybiBJRF9ESVY7Ci19Ci0KIGJvb2wgSFRNTERpdkVsZW1lbnRJbXBsOjptYXBUb0VudHJ5KE5v
ZGVJbXBsOjpJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdAogewog
ICAgIGlmIChhdHRyID09IEFUVFJfQUxJR04pIHsKQEAgLTEyMCw3ICsxMTAsNyBAQCB2b2lkIEhU
TUxEaXZFbGVtZW50SW1wbDo6c2V0QWxpZ24oY29uc3QgCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAK
IEhUTUxIUkVsZW1lbnRJbXBsOjpIVE1MSFJFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQot
ICAgIDogSFRNTEVsZW1lbnRJbXBsKGRvYykKKyAgICA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFt
ZXM6OmhyKCksIGRvYykKIHsKIH0KIApAQCAtMTI4LDExICsxMTgsNiBAQCBIVE1MSFJFbGVtZW50
SW1wbDo6fkhUTUxIUkVsZW1lbnRJbXBsKCkKIHsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxIUkVs
ZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0hSOwotfQotCiBib29sIEhU
TUxIUkVsZW1lbnRJbXBsOjptYXBUb0VudHJ5KE5vZGVJbXBsOjpJZCBhdHRyLCBNYXBwZWRBdHRy
aWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdAogewogICAgIHN3aXRjaCAoYXR0cikgewpAQCAtMjUy
LDggKzIzNyw4IEBAIHZvaWQgSFRNTEhSRWxlbWVudEltcGw6OnNldFdpZHRoKGNvbnN0IEQKIAog
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogCi1IVE1MSGVhZGluZ0VsZW1lbnRJbXBsOjpIVE1MSGVhZGlu
Z0VsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIHVzaG9ydCBfdGFnaWQpCi0gICAgOiBIVE1M
R2VuZXJpY0VsZW1lbnRJbXBsKGRvYywgX3RhZ2lkKQorSFRNTEhlYWRpbmdFbGVtZW50SW1wbDo6
SFRNTEhlYWRpbmdFbGVtZW50SW1wbChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1
bWVudFB0ciAqZG9jKQorICAgIDogSFRNTEVsZW1lbnRJbXBsKHRhZ05hbWUsIGRvYykKIHsKIH0K
IApAQCAtMjcwLDEzICsyNTUsOCBAQCB2b2lkIEhUTUxIZWFkaW5nRWxlbWVudEltcGw6OnNldEFs
aWduKGNvCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxQYXJhZ3JhcGhFbGVtZW50SW1wbDo6
SFRNTFBhcmFncmFwaEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0gICAgOiBIVE1MRWxl
bWVudEltcGwoZG9jKQotewotfQotCi1Ob2RlSW1wbDo6SWQgSFRNTFBhcmFncmFwaEVsZW1lbnRJ
bXBsOjppZCgpIGNvbnN0CisgICAgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjpwKCksIGRv
YykKIHsKLSAgICByZXR1cm4gSURfUDsKIH0KIAogYm9vbCBIVE1MUGFyYWdyYXBoRWxlbWVudElt
cGw6Om1hcFRvRW50cnkoTm9kZUltcGw6OklkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiBy
ZXN1bHQpIGNvbnN0CkBAIC0zMjIsOCArMzAyLDggQEAgdm9pZCBIVE1MUGFyYWdyYXBoRWxlbWVu
dEltcGw6OnNldEFsaWduKAogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUhUTUxQcmVFbGVtZW50
SW1wbDo6SFRNTFByZUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIHVuc2lnbmVkIHNob3J0
IF90YWdpZCkKLSAgICA6IEhUTUxHZW5lcmljRWxlbWVudEltcGwoZG9jLCBfdGFnaWQpCitIVE1M
UHJlRWxlbWVudEltcGw6OkhUTUxQcmVFbGVtZW50SW1wbChjb25zdCBRdWFsaWZpZWROYW1lJiB0
YWdOYW1lLCBEb2N1bWVudFB0ciAqZG9jKQorICAgIDogSFRNTEVsZW1lbnRJbXBsKHRhZ05hbWUs
IGRvYykKIHsKIH0KIApAQCAtMzQzLDE2ICszMjMsMTEgQEAgdm9pZCBIVE1MUHJlRWxlbWVudElt
cGw6OnNldFdpZHRoKGxvbmcgdwogY29uc3QgaW50IGRlZmF1bHRNaW5pbXVtRGVsYXkgPSA2MDsK
IAogSFRNTE1hcnF1ZWVFbGVtZW50SW1wbDo6SFRNTE1hcnF1ZWVFbGVtZW50SW1wbChEb2N1bWVu
dFB0ciAqZG9jKQotOiBIVE1MRWxlbWVudEltcGwoZG9jKSwKKzogSFRNTEVsZW1lbnRJbXBsKEhU
TUxOYW1lczo6bWFycXVlZSgpLCBkb2MpLAogICBtX21pbmltdW1EZWxheShkZWZhdWx0TWluaW11
bURlbGF5KQogewogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTE1hcnF1ZWVFbGVtZW50SW1wbDo6aWQo
KSBjb25zdAotewotICAgIHJldHVybiBJRF9NQVJRVUVFOwotfQotCiBib29sIEhUTUxNYXJxdWVl
RWxlbWVudEltcGw6Om1hcFRvRW50cnkoTm9kZUltcGw6OklkIGF0dHIsIE1hcHBlZEF0dHJpYnV0
ZUVudHJ5JiByZXN1bHQpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChhdHRyKSB7CkBAIC00MzMsMjAg
KzQwOCw0IEBAIHZvaWQgSFRNTE1hcnF1ZWVFbGVtZW50SW1wbDo6cGFyc2VNYXBwZWQKICAgICAg
ICAgZGVmYXVsdDoKICAgICAgICAgICAgIEhUTUxFbGVtZW50SW1wbDo6cGFyc2VNYXBwZWRBdHRy
aWJ1dGUoYXR0cik7CiAgICAgfQotfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotSFRNTExheWVy
RWxlbWVudEltcGw6OkhUTUxMYXllckVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0gICAg
OiBIVE1MRGl2RWxlbWVudEltcGwoIGRvYyApCi17Ci19Ci0KLUhUTUxMYXllckVsZW1lbnRJbXBs
Ojp+SFRNTExheWVyRWxlbWVudEltcGwoKQotewotfQotCi1Ob2RlSW1wbDo6SWQgSFRNTExheWVy
RWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfTEFZRVI7CiB9CkluZGV4
OiBXZWJDb3JlL2todG1sL2h0bWwvaHRtbF9ibG9ja2ltcGwuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvbG9jYWwvaG9tZS9jdnMvTGFieXJpbnRoL1dlYkNvcmUva2h0bWwvaHRtbC9odG1sX2Jsb2Nr
aW1wbC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjkKZGlmZiAtdSAtcCAtcjEuOSBXZWJDb3Jl
L2todG1sL2h0bWwvaHRtbF9ibG9ja2ltcGwuaAotLS0gV2ViQ29yZS9raHRtbC9odG1sL2h0bWxf
YmxvY2tpbXBsLmgJMjAwNS8wNS8xMSAwNTo0OTozNAkxLjkKKysrIFdlYkNvcmUva2h0bWwvaHRt
bC9odG1sX2Jsb2NraW1wbC5oCTIwMDUvMDYvMDIgMDQ6MTI6MDEKQEAgLTQwLDggKzQwLDggQEAg
cHVibGljOgogICAgIEhUTUxCbG9ja3F1b3RlRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYyk7
CiAgICAgfkhUTUxCbG9ja3F1b3RlRWxlbWVudEltcGwoKTsKIAotICAgIHZpcnR1YWwgSWQgaWQo
KSBjb25zdDsKLQorICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4g
NTsgfQorICAgIAogICAgIERPTVN0cmluZyBjaXRlKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRDaXRl
KGNvbnN0IERPTVN0cmluZyAmKTsKIH07CkBAIC01NSw5ICs1NSw5IEBAIGNsYXNzIEhUTUxEaXZF
bGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MRWwKIHB1YmxpYzoKICAgICBIVE1MRGl2RWxlbWVudElt
cGwoRG9jdW1lbnRQdHIgKmRvYyk7CiAgICAgfkhUTUxEaXZFbGVtZW50SW1wbCgpOwotCi0gICAg
dmlydHVhbCBJZCBpZCgpIGNvbnN0OwogICAgIAorICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5
KCkgY29uc3QgeyByZXR1cm4gNTsgfQorICAgIAogICAgIHZpcnR1YWwgYm9vbCBtYXBUb0VudHJ5
KElkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0OwogICAgIHZpcnR1
YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICp0b2tlbik7
CiAKQEAgLTcyLDkgKzcyLDEwIEBAIGNsYXNzIEhUTUxIUkVsZW1lbnRJbXBsIDogcHVibGljIEhU
TUxFbGUKIHB1YmxpYzoKICAgICBIVE1MSFJFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKTsK
ICAgICB+SFRNTEhSRWxlbWVudEltcGwoKTsKLQotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsK
ICAgICAKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25z
dCB7IHJldHVybiBGT1JCSURERU47IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNv
bnN0IHsgcmV0dXJuIDA7IH0KKyAgICAKICAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShJZCBh
dHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdDsKICAgICB2aXJ0dWFsIHZv
aWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqKTsKIApAQCAtOTMs
MTAgKzk0LDEyIEBAIHB1YmxpYzoKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1jbGFzcyBIVE1M
SGVhZGluZ0VsZW1lbnRJbXBsIDogcHVibGljIEhUTUxHZW5lcmljRWxlbWVudEltcGwKK2NsYXNz
IEhUTUxIZWFkaW5nRWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTEVsZW1lbnRJbXBsCiB7CiBwdWJs
aWM6Ci0gICAgSFRNTEhlYWRpbmdFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCB1c2hvcnQg
X3RhZ2lkKTsKKyAgICBIVE1MSGVhZGluZ0VsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUm
IHRhZ05hbWUsIERvY3VtZW50UHRyICpkb2MpOworCisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3Jp
dHkoKSBjb25zdCB7IHJldHVybiA1OyB9CiAKICAgICBET01TdHJpbmcgYWxpZ24oKSBjb25zdDsK
ICAgICB2b2lkIHNldEFsaWduKGNvbnN0IERPTVN0cmluZyAmKTsKQEAgLTEwNCwyMSArMTA3LDE2
IEBAIHB1YmxpYzoKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0vKgotICogd2VyZSBub3QgdXNp
bmcgSFRNTEVsZW1lbnRJbXBsIGFzIHBhcmVudCBjbGFzcywgc2luY2UgYQotICogcGFyYWdyYXBo
IHNob3VsZCBiZSBhYmxlIHRvIGZsb3cgYXJvdW5kIGFsaWduZWQgb2JqZWN0cy4gVGh1cwotICog
YSA8cD4gZWxlbWVudCBoYXMgdG8gYmUgaW5saW5lLCBhbmQgaXMgcmVuZGVyZWQgYnkKLSAqIEhU
TUxCbG9ja0ltcGw6OmNhbGNQYXJhZ3JhcGgKLSAqLwogY2xhc3MgSFRNTFBhcmFncmFwaEVsZW1l
bnRJbXBsIDogcHVibGljIEhUTUxFbGVtZW50SW1wbAogewogcHVibGljOgogICAgIEhUTUxQYXJh
Z3JhcGhFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKTsKIAorICAgIHZpcnR1YWwgSFRNTFRh
Z1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIE9QVElPTkFMOyB9Cisg
ICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAzOyB9CisgICAgCiAg
ICAgdmlydHVhbCBib29sIG1hcFRvRW50cnkoSWQgYXR0ciwgTWFwcGVkQXR0cmlidXRlRW50cnkm
IHJlc3VsdCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1h
cHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIpOwotICAgIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25z
dDsKIAogICAgIERPTVN0cmluZyBhbGlnbigpIGNvbnN0OwogICAgIHZvaWQgc2V0QWxpZ24oY29u
c3QgRE9NU3RyaW5nICYpOwpAQCAtMTI2LDEzICsxMjQsMTMgQEAgcHVibGljOgogCiAvLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCiAKLWNsYXNzIEhUTUxQcmVFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MR2Vu
ZXJpY0VsZW1lbnRJbXBsCitjbGFzcyBIVE1MUHJlRWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTEVs
ZW1lbnRJbXBsCiB7CiBwdWJsaWM6Ci0gICAgSFRNTFByZUVsZW1lbnRJbXBsKERvY3VtZW50UHRy
ICpkb2MsIHVzaG9ydCBfdGFnaWQpOworICAgIEhUTUxQcmVFbGVtZW50SW1wbChjb25zdCBRdWFs
aWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudFB0ciAqZG9jKTsKIAogICAgIGxvbmcgd2lkdGgo
KSBjb25zdDsKLSAgICB2b2lkIHNldFdpZHRoKCBsb25nIHcgKTsKKyAgICB2b2lkIHNldFdpZHRo
KGxvbmcgdyk7CiB9OwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xNDEsOCArMTM5LDYgQEAg
Y2xhc3MgSFRNTE1hcnF1ZWVFbGVtZW50SW1wbCA6IHB1YmxpYyBIVAogewogcHVibGljOgogICAg
IEhUTUxNYXJxdWVlRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYyk7Ci0KLSAgICB2aXJ0dWFs
IElkIGlkKCkgY29uc3Q7CiAgICAgCiAgICAgdmlydHVhbCBib29sIG1hcFRvRW50cnkoSWQgYXR0
ciwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lk
IHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKnRva2VuKTsKQEAgLTE1
MSwxOSArMTQ3LDYgQEAgcHVibGljOgogICAgIAogcHJpdmF0ZToKICAgICBpbnQgbV9taW5pbXVt
RGVsYXk7Ci19OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIEhUTUxMYXllckVsZW1l
bnRJbXBsIDogcHVibGljIEhUTUxEaXZFbGVtZW50SW1wbAotewotcHVibGljOgotICAgIEhUTUxM
YXllckVsZW1lbnRJbXBsKCBEb2N1bWVudFB0ciAqZG9jICk7Ci0gICAgfkhUTUxMYXllckVsZW1l
bnRJbXBsKCk7Ci0KLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7Ci0KLSAgICBib29sIGZpeGVk
OwogfTsKIAogfTsgLy9uYW1lc3BhY2UKSW5kZXg6IFdlYkNvcmUva2h0bWwvaHRtbC9odG1sX2Rv
Y3VtZW50aW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2xvY2FsL2hvbWUvY3ZzL0xhYnly
aW50aC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbF9kb2N1bWVudGltcGwuY3BwLHYKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjYwCmRpZmYgLXUgLXAgLXIxLjYwIFdlYkNvcmUva2h0bWwvaHRtbC9odG1s
X2RvY3VtZW50aW1wbC5jcHAKLS0tIFdlYkNvcmUva2h0bWwvaHRtbC9odG1sX2RvY3VtZW50aW1w
bC5jcHAJMjAwNS8wNS8xMSAwMDo1ODoyOAkxLjYwCisrKyBXZWJDb3JlL2todG1sL2h0bWwvaHRt
bF9kb2N1bWVudGltcGwuY3BwCTIwMDUvMDYvMDIgMDQ6MTI6MDIKQEAgLTI0Niw3ICsyNDYsNyBA
QCBUb2tlbml6ZXIgKkhUTUxEb2N1bWVudEltcGw6OmNyZWF0ZVRva2VuCiBib29sIEhUTUxEb2N1
bWVudEltcGw6OmNoaWxkQWxsb3dlZCggTm9kZUltcGwgKm5ld0NoaWxkICkKIHsKICAgICAvLyAj
IyMgc3VwcG9ydCBjb21tZW50cy4gZXRjIGFzIGEgY2hpbGQKLSAgICByZXR1cm4gKG5ld0NoaWxk
LT5pZCgpID09IElEX0hUTUwgfHwgbmV3Q2hpbGQtPmlkKCkgPT0gSURfQ09NTUVOVCk7CisgICAg
cmV0dXJuIChuZXdDaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omh0bWwoKSkgfHwgbmV3Q2hp
bGQtPmlzQ29tbWVudE5vZGUoKSk7CiB9CiAKIEVsZW1lbnRJbXBsICpIVE1MRG9jdW1lbnRJbXBs
OjpjcmVhdGVFbGVtZW50KCBjb25zdCBET01TdHJpbmcgJm5hbWUsIGludCAmZXhjZXB0aW9uY29k
ZSApCkluZGV4OiBXZWJDb3JlL2todG1sL2h0bWwvaHRtbF9lbGVtZW50aW1wbC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2xvY2FsL2hvbWUvY3ZzL0xhYnlyaW50aC9XZWJDb3JlL2todG1sL2h0
bWwvaHRtbF9lbGVtZW50aW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuODcKZGlmZiAt
dSAtcCAtcjEuODcgV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfZWxlbWVudGltcGwuY3BwCi0tLSBX
ZWJDb3JlL2todG1sL2h0bWwvaHRtbF9lbGVtZW50aW1wbC5jcHAJMjAwNS8wNS8xMyAxNjo0ODo1
MQkxLjg3CisrKyBXZWJDb3JlL2todG1sL2h0bWwvaHRtbF9lbGVtZW50aW1wbC5jcHAJMjAwNS8w
Ni8wMiAwNDoxMjowMgpAQCAtNTgsOCArNTgsOCBAQCB1c2luZyBuYW1lc3BhY2Uga2h0bWw7CiAK
IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQogCi1IVE1MRWxlbWVudEltcGw6OkhUTUxFbGVtZW50SW1wbChEb2N1bWVu
dFB0ciAqZG9jKQotICAgIDogU3R5bGVkRWxlbWVudEltcGwoZG9jKQorSFRNTEVsZW1lbnRJbXBs
OjpIVE1MRWxlbWVudEltcGwoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnRQ
dHIgKmRvYykKKyAgICA6IFN0eWxlZEVsZW1lbnRJbXBsKHRhZ05hbWUsIGRvYykKIHsKIH0KIApA
QCAtNjcsNTEgKzY3LDkgQEAgSFRNTEVsZW1lbnRJbXBsOjp+SFRNTEVsZW1lbnRJbXBsKCkKIHsK
IH0KIAotYm9vbCBIVE1MRWxlbWVudEltcGw6OmlzSW5saW5lKCkgY29uc3QKLXsKLSAgICBpZiAo
cmVuZGVyZXIoKSkKLSAgICAgICAgcmV0dXJuIEVsZW1lbnRJbXBsOjppc0lubGluZSgpOwotICAg
IAotICAgIHN3aXRjaChpZCgpKSB7Ci0gICAgICAgIGNhc2UgSURfQToKLSAgICAgICAgY2FzZSBJ
RF9GT05UOgotICAgICAgICBjYXNlIElEX1RUOgotICAgICAgICBjYXNlIElEX1U6Ci0gICAgICAg
IGNhc2UgSURfQjoKLSAgICAgICAgY2FzZSBJRF9JOgotICAgICAgICBjYXNlIElEX1M6Ci0gICAg
ICAgIGNhc2UgSURfU1RSSUtFOgotICAgICAgICBjYXNlIElEX0JJRzoKLSAgICAgICAgY2FzZSBJ
RF9TTUFMTDoKLSAgICAKLSAgICAgICAgICAgIC8vICVwaHJhc2UKLSAgICAgICAgY2FzZSBJRF9F
TToKLSAgICAgICAgY2FzZSBJRF9TVFJPTkc6Ci0gICAgICAgIGNhc2UgSURfREZOOgotICAgICAg
ICBjYXNlIElEX0NPREU6Ci0gICAgICAgIGNhc2UgSURfU0FNUDoKLSAgICAgICAgY2FzZSBJRF9L
QkQ6Ci0gICAgICAgIGNhc2UgSURfVkFSOgotICAgICAgICBjYXNlIElEX0NJVEU6Ci0gICAgICAg
IGNhc2UgSURfQUJCUjoKLSAgICAgICAgY2FzZSBJRF9BQ1JPTllNOgotICAgIAotICAgICAgICAg
ICAgLy8gJXNwZWNpYWwKLSAgICAgICAgY2FzZSBJRF9TVUI6Ci0gICAgICAgIGNhc2UgSURfU1VQ
OgotICAgICAgICBjYXNlIElEX1NQQU46Ci0gICAgICAgIGNhc2UgSURfTk9CUjoKLSAgICAgICAg
Y2FzZSBJRF9XQlI6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIAotICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIEVsZW1lbnRJbXBsOjppc0lubGluZSgp
OwotICAgIH0KLX0KLQogTm9kZUltcGwgKkhUTUxFbGVtZW50SW1wbDo6Y2xvbmVOb2RlKGJvb2wg
ZGVlcCkKIHsKLSAgICBIVE1MRWxlbWVudEltcGwgKmNsb25lID0gc3RhdGljX2Nhc3Q8SFRNTEVs
ZW1lbnRJbXBsICo+KGdldERvY3VtZW50KCktPmNyZWF0ZUhUTUxFbGVtZW50KGxvY2FsTmFtZVBh
cnQoaWQoKSkpKTsKKyAgICBIVE1MRWxlbWVudEltcGwgKmNsb25lID0gc3RhdGljX2Nhc3Q8SFRN
TEVsZW1lbnRJbXBsICo+KGdldERvY3VtZW50KCktPmNyZWF0ZUhUTUxFbGVtZW50KGxvY2FsTmFt
ZSgpKSk7CiAgICAgaWYgKCFjbG9uZSkKICAgICAgICAgcmV0dXJuIDA7CiAKQEAgLTMyNSwyNiAr
MjgzLDE3IEBAIERPTVN0cmluZyBIVE1MRWxlbWVudEltcGw6Om91dGVyVGV4dCgpIGMKIERvY3Vt
ZW50RnJhZ21lbnRJbXBsICpIVE1MRWxlbWVudEltcGw6OmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVu
dChjb25zdCBET01TdHJpbmcgJmh0bWwpCiB7CiAgICAgLy8gdGhlIGZvbGxvd2luZyBpcyBpbiBh
Y2NvcmRhbmNlIHdpdGggdGhlIGRlZmluaXRpb24gYXMgdXNlZCBieSBJRQotICAgIGlmKCBlbmRU
YWdSZXF1aXJlbWVudChpZCgpKSA9PSBGT1JCSURERU4gKQotICAgICAgICByZXR1cm4gTlVMTDsK
LSAgICAvLyBJRSBkaXNhbGxvd3MgaW5uZXJIVE1MIG9uIGlubGluZSBlbGVtZW50cy4gSSBkb24n
dCBzZWUgd2h5IHdlIHNob3VsZCBoYXZlIHRoaXMgcmVzdHJpY3Rpb24sIGFzIG91cgotICAgIC8v
IGRodG1sIGVuZ2luZSBjYW4gY29wZSB3aXRoIGl0LiBMYXJzCi0gICAgLy9pZiAoIGlzSW5saW5l
KCkgKSByZXR1cm4gZmFsc2U7Ci0gICAgc3dpdGNoKCBpZCgpICkgewotICAgICAgICBjYXNlIElE
X0NPTDoKLSAgICAgICAgY2FzZSBJRF9DT0xHUk9VUDoKLSAgICAgICAgY2FzZSBJRF9GUkFNRVNF
VDoKLSAgICAgICAgY2FzZSBJRF9IRUFEOgotICAgICAgICBjYXNlIElEX1NUWUxFOgotICAgICAg
ICBjYXNlIElEX1RJVExFOgotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgaWYgKCAhZ2V0RG9jdW1lbnQoKS0+
aXNIVE1MRG9jdW1lbnQoKSApCi0gICAgICAgIHJldHVybiBOVUxMOworICAgIGlmIChlbmRUYWdS
ZXF1aXJlbWVudCgpID09IEZPUkJJRERFTikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAo
aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6Y29sKCkpIHx8IGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6
OmNvbGdyb3VwKCkpIHx8IGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmZyYW1lc2V0KCkpIHx8Cisg
ICAgICAgIGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmhlYWQoKSkgfHwgaGFzTG9jYWxOYW1lKEhU
TUxOYW1lczo6c3R5bGUoKSkgfHwgaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dGl0bGUoKSkpCisg
ICAgICAgIHJldHVybiAwOworCisgICAgaWYgKCFnZXREb2N1bWVudCgpLT5pc0hUTUxEb2N1bWVu
dCgpKQorICAgICAgICByZXR1cm4gMDsKIAotICAgIERvY3VtZW50RnJhZ21lbnRJbXBsICpmcmFn
bWVudCA9IG5ldyBEb2N1bWVudEZyYWdtZW50SW1wbCggZG9jUHRyKCkgKTsKKyAgICBEb2N1bWVu
dEZyYWdtZW50SW1wbCAqZnJhZ21lbnQgPSBuZXcgRG9jdW1lbnRGcmFnbWVudEltcGwoZG9jUHRy
KCkpOwogICAgIGZyYWdtZW50LT5yZWYoKTsKICAgICB7CiAgICAgICAgIEhUTUxUb2tlbml6ZXIg
dG9rKGRvY1B0cigpLCBmcmFnbWVudCk7CkBAIC0zNTgsMTQgKzMwNywxNCBAQCBEb2N1bWVudEZy
YWdtZW50SW1wbCAqSFRNTEVsZW1lbnRJbXBsOjpjCiAgICAgaW50IGlnbm9yZWRFeGNlcHRpb25D
b2RlOwogCiAgICAgLy8gd2UgbmVlZCB0byBwb3AgPGh0bWw+IGFuZCA8Ym9keT4gZWxlbWVudHMg
YW5kIHJlbW92ZSA8aGVhZD4gdG8KLSAgICAvLyBhY2NvbWFkYXRlIGZvbGtzIHBhc3NpbmcgY29t
cGxldGUgSFRNTCBkb2N1bWVudHMgdG8gbWFrZSB0aGUKKyAgICAvLyBhY2NvbW1vZGF0ZSBmb2xr
cyBwYXNzaW5nIGNvbXBsZXRlIEhUTUwgZG9jdW1lbnRzIHRvIG1ha2UgdGhlCiAgICAgLy8gY2hp
bGQgb2YgYW4gZWxlbWVudC4KIAogICAgIE5vZGVJbXBsICpuZXh0Tm9kZTsKICAgICBmb3IgKE5v
ZGVJbXBsICpub2RlID0gZnJhZ21lbnQtPmZpcnN0Q2hpbGQoKTsgbm9kZSAhPSBOVUxMOyBub2Rl
ID0gbmV4dE5vZGUpIHsKICAgICAgICAgbmV4dE5vZGUgPSBub2RlLT5uZXh0U2libGluZygpOwog
CW5vZGUtPnJlZigpOwotICAgICAgICBpZiAobm9kZS0+aWQoKSA9PSBJRF9IVE1MIHx8IG5vZGUt
PmlkKCkgPT0gSURfQk9EWSkgeworICAgICAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6Omh0bWwoKSkgfHwgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJvZHkoKSkpIHsKIAkg
ICAgTm9kZUltcGwgKmZpcnN0Q2hpbGQgPSBub2RlLT5maXJzdENoaWxkKCk7CiAgICAgICAgICAg
ICBpZiAoZmlyc3RDaGlsZCAhPSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgbmV4dE5vZGUgPSBm
aXJzdENoaWxkOwpAQCAtMzc5LDkgKzMyOCw5IEBAIERvY3VtZW50RnJhZ21lbnRJbXBsICpIVE1M
RWxlbWVudEltcGw6OmMKICAgICAgICAgICAgICAgICBjaGlsZC0+ZGVyZWYoKTsKIAkgICAgfQog
ICAgICAgICAgICAgZnJhZ21lbnQtPnJlbW92ZUNoaWxkKG5vZGUsIGlnbm9yZWRFeGNlcHRpb25D
b2RlKTsKLQl9IGVsc2UgaWYgKG5vZGUtPmlkKCkgPT0gSURfSEVBRCkgeworCX0gZWxzZSBpZiAo
bm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmhlYWQoKSkpCiAJICAgIGZyYWdtZW50LT5yZW1v
dmVDaGlsZChub2RlLCBpZ25vcmVkRXhjZXB0aW9uQ29kZSk7Ci0JfQorCiAgICAgICAgIC8vIElt
cG9ydGFudCB0byBkbyB0aGlzIGRlcmVmIGFmdGVyIHJlbW92ZUNoaWxkLCBiZWNhdXNlIGlmIHRo
ZSBvbmx5IHRoaW5nCiAgICAgICAgIC8vIGtlZXBpbmcgYSBub2RlIGFyb3VuZCBpcyBhIHBhcmVu
dCB0aGF0IGlzIG5vbi0wLCByZW1vdmVDaGlsZCB3aWxsIG5vdAogICAgICAgICAvLyBkZWxldGUg
dGhlIG5vZGUuIFRoaXMgd29ya3MgZmluZSBpbiBKYXZhU2NyaXB0IGJlY2F1c2UgdGhlcmUncyBh
bHdheXMKQEAgLTQwMCw3ICszNDksNyBAQCBEb2N1bWVudEZyYWdtZW50SW1wbCAqSFRNTEVsZW1l
bnRJbXBsOjpjCiAKIHZvaWQgSFRNTEVsZW1lbnRJbXBsOjpzZXRJbm5lckhUTUwoY29uc3QgRE9N
U3RyaW5nICZodG1sLCBpbnQgJmV4Y2VwdGlvbikKIHsKLSAgICBEb2N1bWVudEZyYWdtZW50SW1w
bCAqZnJhZ21lbnQgPSBjcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoIGh0bWwgKTsKKyAgICBEb2N1
bWVudEZyYWdtZW50SW1wbCAqZnJhZ21lbnQgPSBjcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoaHRt
bCk7CiAgICAgaWYgKGZyYWdtZW50ID09IE5VTEwpIHsKIAlleGNlcHRpb24gPSBET01FeGNlcHRp
b246Ok5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUjsKICAgICAgICAgcmV0dXJuOwpAQCAtNDE4
LDcgKzM2Nyw3IEBAIHZvaWQgSFRNTEVsZW1lbnRJbXBsOjpzZXRPdXRlckhUTUwoY29uc3QKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KICAgICBIVE1MRWxlbWVudEltcGwgKnBhcmVudCA9IHN0YXRp
Y19jYXN0PEhUTUxFbGVtZW50SW1wbCAqPihwKTsKLSAgICBEb2N1bWVudEZyYWdtZW50SW1wbCAq
ZnJhZ21lbnQgPSBwYXJlbnQtPmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCggaHRtbCApOworICAg
IERvY3VtZW50RnJhZ21lbnRJbXBsICpmcmFnbWVudCA9IHBhcmVudC0+Y3JlYXRlQ29udGV4dHVh
bEZyYWdtZW50KGh0bWwpOwogCiAgICAgaWYgKCFmcmFnbWVudCkgewogCWV4Y2VwdGlvbiA9IERP
TUV4Y2VwdGlvbjo6Tk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOwpAQCAtNDM0LDI5ICszODMs
MTcgQEAgdm9pZCBIVE1MRWxlbWVudEltcGw6OnNldE91dGVySFRNTChjb25zdAogdm9pZCBIVE1M
RWxlbWVudEltcGw6OnNldElubmVyVGV4dChjb25zdCBET01TdHJpbmcgJnRleHQsIGludCAmZXhj
ZXB0aW9uKQogewogICAgIC8vIGZvbGxvd2luZyB0aGUgSUUgc3BlY3MuCi0gICAgaWYgKGVuZFRh
Z1JlcXVpcmVtZW50KGlkKCkpID09IEZPUkJJRERFTikgeworICAgIGlmIChlbmRUYWdSZXF1aXJl
bWVudCgpID09IEZPUkJJRERFTikgewogCWV4Y2VwdGlvbiA9IERPTUV4Y2VwdGlvbjo6Tk9fTU9E
SUZJQ0FUSU9OX0FMTE9XRURfRVJSOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgLy8g
SUUgZGlzYWxsb3dzIGlubmVyVGV4dCBvbiBpbmxpbmUgZWxlbWVudHMuIEkgZG9uJ3Qgc2VlIHdo
eSB3ZSBzaG91bGQgaGF2ZSB0aGlzIHJlc3RyaWN0aW9uLCBhcyBvdXIKLSAgICAvLyBkaHRtbCBl
bmdpbmUgY2FuIGNvcGUgd2l0aCBpdC4gTGFycwotICAgIC8vaWYgKCBpc0lubGluZSgpICkgcmV0
dXJuIGZhbHNlOwotICAgIHN3aXRjaCggaWQoKSApIHsKLSAgICAgICAgY2FzZSBJRF9DT0w6Ci0g
ICAgICAgIGNhc2UgSURfQ09MR1JPVVA6Ci0gICAgICAgIGNhc2UgSURfRlJBTUVTRVQ6Ci0gICAg
ICAgIGNhc2UgSURfSEVBRDoKLSAgICAgICAgY2FzZSBJRF9IVE1MOgotICAgICAgICBjYXNlIElE
X1RBQkxFOgotICAgICAgICBjYXNlIElEX1RCT0RZOgotICAgICAgICBjYXNlIElEX1RGT09UOgot
ICAgICAgICBjYXNlIElEX1RIRUFEOgotICAgICAgICBjYXNlIElEX1RSOgotICAgICAgICAgICAg
ZXhjZXB0aW9uID0gRE9NRXhjZXB0aW9uOjpOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsK
KyAgICBpZiAoaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6Y29sKCkpIHx8IGhhc0xvY2FsTmFtZShI
VE1MTmFtZXM6OmNvbGdyb3VwKCkpIHx8IGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmZyYW1lc2V0
KCkpIHx8CisgICAgICAgIGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmhlYWQoKSkgfHwgaGFzTG9j
YWxOYW1lKEhUTUxOYW1lczo6aHRtbCgpKSB8fCBoYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0YWJs
ZSgpKSB8fCAKKyAgICAgICAgaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dGJvZHkoKSkgfHwgaGFz
TG9jYWxOYW1lKEhUTUxOYW1lczo6dGZvb3QoKSkgfHwgaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6
dGhlYWQoKSkgfHwKKyAgICAgICAgaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dHIoKSkpIHsKKyAg
ICAgICAgZXhjZXB0aW9uID0gRE9NRXhjZXB0aW9uOjpOT19NT0RJRklDQVRJT05fQUxMT1dFRF9F
UlI7CisgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICByZW1vdmVDaGlsZHJlbigpOwpAQCAt
NDY2LDI1ICs0MDMsMTcgQEAgdm9pZCBIVE1MRWxlbWVudEltcGw6OnNldElubmVyVGV4dChjb25z
dAogdm9pZCBIVE1MRWxlbWVudEltcGw6OnNldE91dGVyVGV4dChjb25zdCBET01TdHJpbmcgJnRl
eHQsIGludCAmZXhjZXB0aW9uKQogewogICAgIC8vIGZvbGxvd2luZyB0aGUgSUUgc3BlY3MuCi0g
ICAgaWYoIGVuZFRhZ1JlcXVpcmVtZW50KGlkKCkpID09IEZPUkJJRERFTiApIHsKKyAgICBpZiAo
ZW5kVGFnUmVxdWlyZW1lbnQoKSA9PSBGT1JCSURERU4pIHsKIAlleGNlcHRpb24gPSBET01FeGNl
cHRpb246Ok5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUjsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KLSAgICBzd2l0Y2goIGlkKCkgKSB7Ci0gICAgICAgIGNhc2UgSURfQ09MOgotICAgICAgICBj
YXNlIElEX0NPTEdST1VQOgotICAgICAgICBjYXNlIElEX0ZSQU1FU0VUOgotICAgICAgICBjYXNl
IElEX0hFQUQ6Ci0gICAgICAgIGNhc2UgSURfSFRNTDoKLSAgICAgICAgY2FzZSBJRF9UQUJMRToK
LSAgICAgICAgY2FzZSBJRF9UQk9EWToKLSAgICAgICAgY2FzZSBJRF9URk9PVDoKLSAgICAgICAg
Y2FzZSBJRF9USEVBRDoKLSAgICAgICAgY2FzZSBJRF9UUjoKLSAgICAgICAgICAgIGV4Y2VwdGlv
biA9IERPTUV4Y2VwdGlvbjo6Tk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7CisKKyAgICBp
ZiAoaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6Y29sKCkpIHx8IGhhc0xvY2FsTmFtZShIVE1MTmFt
ZXM6OmNvbGdyb3VwKCkpIHx8IGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmZyYW1lc2V0KCkpIHx8
CisgICAgICAgIGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmhlYWQoKSkgfHwgaGFzTG9jYWxOYW1l
KEhUTUxOYW1lczo6aHRtbCgpKSB8fCBoYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0YWJsZSgpKSB8
fCAKKyAgICAgICAgaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dGJvZHkoKSkgfHwgaGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6dGZvb3QoKSkgfHwgaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dGhlYWQo
KSkgfHwKKyAgICAgICAgaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dHIoKSkpIHsKKyAgICAgICAg
ZXhjZXB0aW9uID0gRE9NRXhjZXB0aW9uOjpOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI7Cisg
ICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBOb2RlSW1wbCAqcGFyZW50ID0gcGFyZW50Tm9k
ZSgpOwpAQCAtNTI1LDE3ICs0NTQsNiBAQCB2b2lkIEhUTUxFbGVtZW50SW1wbDo6c2V0T3V0ZXJU
ZXh0KGNvbnN0CiAgICAgfQogfQogCi0KLURPTVN0cmluZyBIVE1MRWxlbWVudEltcGw6Om5hbWVz
cGFjZVVSSSgpIGNvbnN0Ci17Ci0gICAgLy8gRm9yIEhUTUwgZG9jdW1lbnRzLCB3ZSB0cmVhdCBI
VE1MIGVsZW1lbnRzIGFzIGhhdmluZyBubyBuYW1lc3BhY2UuIEJ1dCBmb3IgWE1MIGRvY3VtZW50
cwotICAgIC8vIHRoZSBlbGVtZW50cyBoYXZlIHRoZSBuYW1lc3BhY2UgZGVmaW5lZCBpbiB0aGUg
WEhUTUwgc3BlYwotICAgIGlmIChnZXREb2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpKQotICAg
ICAgICByZXR1cm4gRE9NU3RyaW5nKCk7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gWEhUTUxf
TkFNRVNQQUNFOwotfQotCiB2b2lkIEhUTUxFbGVtZW50SW1wbDo6YWRkSFRNTEFsaWdubWVudChN
YXBwZWRBdHRyaWJ1dGVJbXBsKiBhdHRyKQogewogICAgIC8vcURlYnVnKCJhbGlnbm1lbnQgaXMg
JXMiLCBhbGlnbm1lbnQuc3RyaW5nKCkubGF0aW4xKCkgKTsKQEAgLTY4Miw5ICs2MDAsOSBAQCBE
T01TdHJpbmcgSFRNTEVsZW1lbnRJbXBsOjp0b1N0cmluZygpIGNvCiAJRE9NU3RyaW5nIHJlc3Vs
dCA9IG9wZW5UYWdTdGFydFRvU3RyaW5nKCk7CiAJcmVzdWx0ICs9ICI+IjsKIAotCWlmIChlbmRU
YWdSZXF1aXJlbWVudChpZCgpKSA9PSBSRVFVSVJFRCkgeworCWlmIChlbmRUYWdSZXF1aXJlbWVu
dCgpID09IFJFUVVJUkVEKSB7CiAJICAgIHJlc3VsdCArPSAiPC8iOwotCSAgICByZXN1bHQgKz0g
dGFnTmFtZSgpOworCSAgICByZXN1bHQgKz0gbm9kZU5hbWUoKTsKIAkgICAgcmVzdWx0ICs9ICI+
IjsKIAl9CiAKQEAgLTc0OSwxNSArNjY3LDMgQEAgU2hhcmVkUHRyPEhUTUxDb2xsZWN0aW9uSW1w
bD4gSFRNTEVsZW1lbgogICAgIHJldHVybiBTaGFyZWRQdHI8SFRNTENvbGxlY3Rpb25JbXBsPihu
ZXcgSFRNTENvbGxlY3Rpb25JbXBsKHRoaXMsIEhUTUxDb2xsZWN0aW9uSW1wbDo6Tk9ERV9DSElM
RFJFTikpOwogfQogCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUhUTUxHZW5lcmljRWxlbWVudElt
cGw6OkhUTUxHZW5lcmljRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgdXNob3J0IGkpCi0g
ICAgOiBIVE1MRWxlbWVudEltcGwoZG9jKQotewotICAgIG1fZWxlbWVudElkID0gaTsKLX0KLQot
Tm9kZUltcGw6OklkIEhUTUxHZW5lcmljRWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbV9lbGVtZW50SWQ7Ci19CkluZGV4OiBXZWJDb3JlL2todG1sL2h0bWwvaHRtbF9lbGVt
ZW50aW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9sb2NhbC9ob21lL2N2cy9MYWJ5cmludGgv
V2ViQ29yZS9raHRtbC9odG1sL2h0bWxfZWxlbWVudGltcGwuaCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS4zNQpkaWZmIC11IC1wIC1yMS4zNSBXZWJDb3JlL2todG1sL2h0bWwvaHRtbF9lbGVtZW50
aW1wbC5oCi0tLSBXZWJDb3JlL2todG1sL2h0bWwvaHRtbF9lbGVtZW50aW1wbC5oCTIwMDUvMDUv
MTEgMDU6NDk6MzQJMS4zNQorKysgV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfZWxlbWVudGltcGwu
aAkyMDA1LzA2LzAyIDA0OjEyOjAyCkBAIC0yNSwyNyArMjUsMjQgQEAKICNkZWZpbmUgSFRNTF9F
TEVNRU5USU1QTF9ICiAKICNpbmNsdWRlICJ4bWwvZG9tX2VsZW1lbnRpbXBsLmgiCi0jaW5jbHVk
ZSA8cXB0cmRpY3QuaD4KKyNpbmNsdWRlICJodG1sbmFtZXMuaCIKIAogbmFtZXNwYWNlIERPTSB7
CiAKIGNsYXNzIERvY3VtZW50RnJhZ21lbnRJbXBsOwogY2xhc3MgRE9NU3RyaW5nOwogY2xhc3Mg
SFRNTENvbGxlY3Rpb25JbXBsOwotICAgIAorCitlbnVtIEhUTUxUYWdTdGF0dXMgeyBPUFRJT05B
TCwgUkVRVUlSRUQsIEZPUkJJRERFTiB9OworCiBjbGFzcyBIVE1MRWxlbWVudEltcGwgOiBwdWJs
aWMgU3R5bGVkRWxlbWVudEltcGwKIHsKIHB1YmxpYzoKLSAgICBIVE1MRWxlbWVudEltcGwoRG9j
dW1lbnRQdHIgKmRvYyk7Ci0KKyAgICBIVE1MRWxlbWVudEltcGwoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgdGFnTmFtZSwgRG9jdW1lbnRQdHIgKmRvYyk7CiAgICAgdmlydHVhbCB+SFRNTEVsZW1lbnRJ
bXBsKCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNIVE1MRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJu
IHRydWU7IH0KIAotICAgIHZpcnR1YWwgYm9vbCBpc0lubGluZSgpIGNvbnN0OwotICAgICAKLSAg
ICB2aXJ0dWFsIElkIGlkKCkgY29uc3QgPSAwOwotICAgIAogICAgIHZpcnR1YWwgYm9vbCBtYXBU
b0VudHJ5KElkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0OwogICAg
IHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsKiBh
dHRyKTsKIApAQCAtNzMsOCArNzAsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRPdXRlckhUTUwo
Y29uc3QgRE9NU3RyaW5nICZodG1sLCBpbnQgJmV4Y2VwdGlvbik7CiAgICAgdm9pZCBzZXRJbm5l
clRleHQoY29uc3QgRE9NU3RyaW5nICZ0ZXh0LCBpbnQgJmV4Y2VwdGlvbik7CiAgICAgdm9pZCBz
ZXRPdXRlclRleHQoY29uc3QgRE9NU3RyaW5nICZ0ZXh0LCBpbnQgJmV4Y2VwdGlvbik7Ci0KLSAg
ICB2aXJ0dWFsIERPTVN0cmluZyBuYW1lc3BhY2VVUkkoKSBjb25zdDsKICAgICAKICAgICB2aXJ0
dWFsIGJvb2wgaXNGb2N1c2FibGUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNDb250ZW50
RWRpdGFibGUoKSBjb25zdDsKQEAgLTg5LDIwICs4NCwxNCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0
dWFsIERPTVN0cmluZyB0b1N0cmluZygpIGNvbnN0OwogCisgICAgLy8gU2FtZSB2YWx1ZXMgYXMg
PHNwYW4+LiAgVGhpcyB3YXkgY3VzdG9tIHRhZyBuYW1lIGVsZW1lbnRzIHdpbGwgYmVoYXZlIGxp
a2UgaW5saW5lIHNwYW5zLgorICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJl
bWVudCgpIGNvbnN0IHsgcmV0dXJuIFJFUVVJUkVEOyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJp
b3JpdHkoKSBjb25zdCB7IHJldHVybiAxOyB9CisgICAgCiBwcm90ZWN0ZWQ6CiAKICAgICAvLyBm
b3IgSU1HLCBPQkpFQ1QgYW5kIEFQUExFVAogICAgIHZvaWQgYWRkSFRNTEFsaWdubWVudChNYXBw
ZWRBdHRyaWJ1dGVJbXBsKiBodG1sQXR0cik7Ci19OwotCi1jbGFzcyBIVE1MR2VuZXJpY0VsZW1l
bnRJbXBsIDogcHVibGljIEhUTUxFbGVtZW50SW1wbAotewotcHVibGljOgotICAgIEhUTUxHZW5l
cmljRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgdXNob3J0IGVsZW1lbnRJZCk7Ci0gICAg
dmlydHVhbCBJZCBpZCgpIGNvbnN0OwotCi1wcm90ZWN0ZWQ6Ci0gICAgdXNob3J0IG1fZWxlbWVu
dElkOwogfTsKIAogfSAvL25hbWVzcGFjZQpJbmRleDogV2ViQ29yZS9raHRtbC9odG1sL2h0bWxf
Zm9ybWltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9sb2NhbC9ob21lL2N2cy9MYWJ5cmlu
dGgvV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfZm9ybWltcGwuY3BwLHYKcmV0cmlldmluZyByZXZp
c2lvbiAxLjE2MQpkaWZmIC11IC1wIC1yMS4xNjEgV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfZm9y
bWltcGwuY3BwCi0tLSBXZWJDb3JlL2todG1sL2h0bWwvaHRtbF9mb3JtaW1wbC5jcHAJMjAwNS8w
NS8zMSAwNTo0ODo0MQkxLjE2MQorKysgV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfZm9ybWltcGwu
Y3BwCTIwMDUvMDYvMDIgMDQ6MTI6MDcKQEAgLTEwMyw3ICsxMDMsNyBAQCBwcml2YXRlOgogfTsK
IAogSFRNTEZvcm1FbGVtZW50SW1wbDo6SFRNTEZvcm1FbGVtZW50SW1wbChEb2N1bWVudFB0ciAq
ZG9jKQotICAgIDogSFRNTEVsZW1lbnRJbXBsKGRvYykKKyAgICA6IEhUTUxFbGVtZW50SW1wbChI
VE1MTmFtZXM6OmZvcm0oKSwgZG9jKQogewogICAgIGNvbGxlY3Rpb25JbmZvID0gMDsKICAgICBt
X3Bvc3QgPSBmYWxzZTsKQEAgLTEzMCwxMSArMTMwLDYgQEAgSFRNTEZvcm1FbGVtZW50SW1wbDo6
fkhUTUxGb3JtRWxlbWVudEltcAogICAgICAgICBpbWdFbGVtZW50c1tpXS0+bV9mb3JtID0gMDsK
IH0KIAotTm9kZUltcGw6OklkIEhUTUxGb3JtRWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gSURfRk9STTsKLX0KLQogI2lmIEFQUExFX0NIQU5HRVMKIAogYm9vbCBIVE1MRm9y
bUVsZW1lbnRJbXBsOjpmb3JtV291bGRIYXZlU2VjdXJlU3VibWlzc2lvbihjb25zdCBET01TdHJp
bmcgJnVybCkKQEAgLTE5Miw3ICsxODcsNyBAQCB2b2lkIEhUTUxGb3JtRWxlbWVudEltcGw6OnN1
Ym1pdENsaWNrKCkKIHsKICAgICBib29sIHN1Ym1pdEZvdW5kID0gZmFsc2U7CiAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGZvcm1FbGVtZW50cy5jb3VudCgpOyArK2kpIHsKLSAgICAgICAg
aWYgKGZvcm1FbGVtZW50c1tpXS0+aWQoKSA9PSBJRF9JTlBVVCkgeworICAgICAgICBpZiAoZm9y
bUVsZW1lbnRzW2ldLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjppbnB1dCgpKSkgewogICAgICAg
ICAgICAgSFRNTElucHV0RWxlbWVudEltcGwgKmVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MSW5w
dXRFbGVtZW50SW1wbCAqPihmb3JtRWxlbWVudHNbaV0pOwogICAgICAgICAgICAgaWYgKGVsZW1l
bnQtPmlzU3VjY2Vzc2Z1bFN1Ym1pdEJ1dHRvbigpICYmIGVsZW1lbnQtPnJlbmRlcmVyKCkpIHsK
ICAgICAgICAgICAgICAgICBzdWJtaXRGb3VuZCA9IHRydWU7CkBAIC0zOTksNyArMzk0LDcgQEAg
Ym9vbCBIVE1MRm9ybUVsZW1lbnRJbXBsOjpmb3JtRGF0YShGb3JtRAogCiAgICAgICAgICAgICAg
ICAgICAgIC8vIGlmIHRoZSBjdXJyZW50IHR5cGUgaXMgRklMRSwgdGhlbiB3ZSBhbHNvIG5lZWQg
dG8KICAgICAgICAgICAgICAgICAgICAgLy8gaW5jbHVkZSB0aGUgZmlsZW5hbWUKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKGN1cnJlbnQtPm5vZGVUeXBlKCkgPT0gTm9kZTo6RUxFTUVOVF9OT0RF
ICYmIGN1cnJlbnQtPmlkKCkgPT0gSURfSU5QVVQgJiYKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGN1cnJlbnQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmlucHV0KCkpICYmCiAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50SW1wbCo+KGN1cnJlbnQp
LT5pbnB1dFR5cGUoKSA9PSBIVE1MSW5wdXRFbGVtZW50SW1wbDo6RklMRSkKICAgICAgICAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgUVN0cmluZyBwYXRoID0gc3RhdGlj
X2Nhc3Q8SFRNTElucHV0RWxlbWVudEltcGwqPihjdXJyZW50KS0+dmFsdWUoKS5zdHJpbmcoKTsK
QEAgLTU0Nyw3ICs1NDIsNyBAQCB2b2lkIEhUTUxGb3JtRWxlbWVudEltcGw6OnN1Ym1pdCggYm9v
bCBhCiAjaWYgQVBQTEVfQ0hBTkdFUwogICAgICAgICAvLyBPdXIgYXBwIG5lZWRzIHRvIGdldCBm
b3JtIHZhbHVlcyBmb3IgcGFzc3dvcmQgZmllbGRzIGZvciBkb2luZyBwYXNzd29yZCBhdXRvY29t
cGxldGUsCiAgICAgICAgIC8vIHNvIHdlIGFyZSBtb3JlIGxlbmllbnQgaW4gcHVzaGluZyB2YWx1
ZXMsIGFuZCBsZXQgdGhlIGFwcCBkZWNpZGUgd2hhdCB0byBzYXZlIHdoZW4uCi0gICAgICAgIGlm
IChjdXJyZW50LT5pZCgpID09IElEX0lOUFVUKSB7CisgICAgICAgIGlmIChjdXJyZW50LT5oYXNM
b2NhbE5hbWUoSFRNTE5hbWVzOjppbnB1dCgpKSkgewogICAgICAgICAgICAgSFRNTElucHV0RWxl
bWVudEltcGwgKmlucHV0ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudEltcGwqPihjdXJy
ZW50KTsKICAgICAgICAgICAgIGlmIChpbnB1dC0+aW5wdXRUeXBlKCkgPT0gSFRNTElucHV0RWxl
bWVudEltcGw6OlRFWFQKICAgICAgICAgICAgICAgICB8fCBpbnB1dC0+aW5wdXRUeXBlKCkgPT0g
IEhUTUxJbnB1dEVsZW1lbnRJbXBsOjpQQVNTV09SRApAQCAtNzA5LDcgKzcwNCw3IEBAIHZvaWQg
SFRNTEZvcm1FbGVtZW50SW1wbDo6cmFkaW9DbGlja2VkKCAKIHsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZm9ybUVsZW1lbnRzLmNvdW50KCk7ICsraSkgewogICAgICAgICBIVE1MR2Vu
ZXJpY0Zvcm1FbGVtZW50SW1wbCAqY3VycmVudCA9IGZvcm1FbGVtZW50c1tpXTsKLSAgICAgICAg
aWYgKGN1cnJlbnQtPmlkKCkgPT0gSURfSU5QVVQgJiYKKyAgICAgICAgaWYgKGN1cnJlbnQtPmhh
c0xvY2FsTmFtZShIVE1MTmFtZXM6OmlucHV0KCkpICYmCiAgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxIVE1MSW5wdXRFbGVtZW50SW1wbCo+KGN1cnJlbnQpLT5pbnB1dFR5cGUoKSA9PSBIVE1MSW5w
dXRFbGVtZW50SW1wbDo6UkFESU8gJiYKICAgICAgICAgICAgIGN1cnJlbnQgIT0gY2FsbGVyICYm
IGN1cnJlbnQtPmZvcm0oKSA9PSBjYWxsZXItPmZvcm0oKSAmJiBjdXJyZW50LT5uYW1lKCkgPT0g
Y2FsbGVyLT5uYW1lKCkpIHsKICAgICAgICAgICAgIHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1l
bnRJbXBsKj4oY3VycmVudCktPnNldENoZWNrZWQoZmFsc2UpOwpAQCAtODM1LDggKzgzMCw4IEBA
IHZvaWQgSFRNTEZvcm1FbGVtZW50SW1wbDo6c2V0VGFyZ2V0KGNvbnMKIAogLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQogCi1IVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbDo6SFRNTEdlbmVyaWNGb3JtRWxl
bWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgSFRNTEZvcm1FbGVtZW50SW1wbCAqZikKLSAgICA6
IEhUTUxFbGVtZW50SW1wbChkb2MpCitIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbDo6SFRNTEdl
bmVyaWNGb3JtRWxlbWVudEltcGwoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1l
bnRQdHIgKmRvYywgSFRNTEZvcm1FbGVtZW50SW1wbCAqZikKKyAgICA6IEhUTUxFbGVtZW50SW1w
bCh0YWdOYW1lLCBkb2MpCiB7CiAgICAgbV9kaXNhYmxlZCA9IG1fcmVhZE9ubHkgPSBmYWxzZTsK
ICAgICBtX2Rvcm1hbnQgPSBmYWxzZTsKQEAgLTkzOCw5ICs5MzMsOCBAQCB2b2lkIEhUTUxHZW5l
cmljRm9ybUVsZW1lbnRJbXBsOjpyZW1vdmVkCiBIVE1MRm9ybUVsZW1lbnRJbXBsICpIVE1MR2Vu
ZXJpY0Zvcm1FbGVtZW50SW1wbDo6Z2V0Rm9ybSgpIGNvbnN0CiB7CiAgICAgTm9kZUltcGwgKnAg
PSBwYXJlbnROb2RlKCk7Ci0gICAgd2hpbGUocCkKLSAgICB7Ci0gICAgICAgIGlmKCBwLT5pZCgp
ID09IElEX0ZPUk0gKQorICAgIHdoaWxlKHApIHsKKyAgICAgICAgaWYgKHAtPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjpmb3JtKCkpKQogICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxG
b3JtRWxlbWVudEltcGwgKj4ocCk7CiAgICAgICAgIHAgPSBwLT5wYXJlbnROb2RlKCk7CiAgICAg
fQpAQCAtMTE2MCw3ICsxMTU0LDcgQEAgdm9pZCBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbDo6
c2V0VGFiSQogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MQnV0dG9uRWxlbWVudEltcGw6OkhU
TUxCdXR0b25FbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBs
ICpmKQotICAgIDogSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwoZG9jLCBmKQorICAgIDogSFRN
TEdlbmVyaWNGb3JtRWxlbWVudEltcGwoSFRNTE5hbWVzOjpidXR0b24oKSwgZG9jLCBmKQogewog
ICAgIG1fdHlwZSA9IFNVQk1JVDsKICAgICBtX2RpcnR5ID0gdHJ1ZTsKQEAgLTExNzEsMTEgKzEx
NjUsNiBAQCBIVE1MQnV0dG9uRWxlbWVudEltcGw6On5IVE1MQnV0dG9uRWxlbWVuCiB7CiB9CiAK
LU5vZGVJbXBsOjpJZCBIVE1MQnV0dG9uRWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gSURfQlVUVE9OOwotfQotCiBET01TdHJpbmcgSFRNTEJ1dHRvbkVsZW1lbnRJbXBsOjp0
eXBlKCkgY29uc3QKIHsKICAgICByZXR1cm4gZ2V0QXR0cmlidXRlKEFUVFJfVFlQRSk7CkBAIC0x
MzEwLDcgKzEyOTksNyBAQCB2b2lkIEhUTUxCdXR0b25FbGVtZW50SW1wbDo6c2V0VmFsdWUoY29u
CiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxGaWVsZFNldEVsZW1lbnRJbXBsOjpIVE1MRmll
bGRTZXRFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpm
KQotICAgOiBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbChkb2MsIGYpCisgICA6IEhUTUxHZW5l
cmljRm9ybUVsZW1lbnRJbXBsKEhUTUxOYW1lczo6ZmllbGRzZXQoKSwgZG9jLCBmKQogewogfQog
CkBAIC0xMzIzLDExICsxMzEyLDYgQEAgYm9vbCBIVE1MRmllbGRTZXRFbGVtZW50SW1wbDo6aXNG
b2N1c2FibAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxGaWVsZFNl
dEVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0ZJRUxEU0VUOwotfQot
CiBET01TdHJpbmcgSFRNTEZpZWxkU2V0RWxlbWVudEltcGw6OnR5cGUoKSBjb25zdAogewogICAg
IHJldHVybiAiZmllbGRzZXQiOwpAQCAtMTM0MSw4ICsxMzI1LDIxIEBAIFJlbmRlck9iamVjdCog
SFRNTEZpZWxkU2V0RWxlbWVudEltcGw6OmMKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogSFRNTElu
cHV0RWxlbWVudEltcGw6OkhUTUxJbnB1dEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIEhU
TUxGb3JtRWxlbWVudEltcGwgKmYpCi0gICAgOiBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbChk
b2MsIGYpLCBtX2ltYWdlTG9hZGVyKDApLCBtX3ZhbHVlTWF0Y2hlc1JlbmRlcmVyKGZhbHNlKQor
ICAgIDogSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwoSFRNTE5hbWVzOjppbnB1dCgpLCBkb2Ms
IGYpCit7CisgICAgaW5pdCgpOworfQorCitIVE1MSW5wdXRFbGVtZW50SW1wbDo6SFRNTElucHV0
RWxlbWVudEltcGwoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnRQdHIgKmRv
YywgSFRNTEZvcm1FbGVtZW50SW1wbCAqZikKKyAgICA6IEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJ
bXBsKHRhZ05hbWUsIGRvYywgZikKIHsKKyAgICBpbml0KCk7Cit9CisKK3ZvaWQgSFRNTElucHV0
RWxlbWVudEltcGw6OmluaXQoKQoreworICAgIG1faW1hZ2VMb2FkZXIgPSAwOworICAgIG1fdmFs
dWVNYXRjaGVzUmVuZGVyZXIgPSBmYWxzZTsKICAgICBtX3R5cGUgPSBURVhUOwogICAgIG1fbWF4
TGVuID0gLTE7CiAgICAgbV9zaXplID0gMjA7CkBAIC0xMzYwLDggKzEzNTcsOCBAQCBIVE1MSW5w
dXRFbGVtZW50SW1wbDo6SFRNTElucHV0RWxlbWVudEltCiAKICAgICBtX21heFJlc3VsdHMgPSAt
MTsKIAotICAgIGlmICggbV9mb3JtICkKLSAgICAgICAgbV9hdXRvY29tcGxldGUgPSBmLT5hdXRv
Q29tcGxldGUoKTsKKyAgICBpZiAobV9mb3JtKQorICAgICAgICBtX2F1dG9jb21wbGV0ZSA9IG1f
Zm9ybS0+YXV0b0NvbXBsZXRlKCk7CiB9CiAKIEhUTUxJbnB1dEVsZW1lbnRJbXBsOjp+SFRNTElu
cHV0RWxlbWVudEltcGwoKQpAQCAtMTM3MCwxMSArMTM2Nyw2IEBAIEhUTUxJbnB1dEVsZW1lbnRJ
bXBsOjp+SFRNTElucHV0RWxlbWVudEkKICAgICBkZWxldGUgbV9pbWFnZUxvYWRlcjsKIH0KIAot
Tm9kZUltcGw6OklkIEhUTUxJbnB1dEVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIElEX0lOUFVUOwotfQotCiB2b2lkIEhUTUxJbnB1dEVsZW1lbnRJbXBsOjpzZXRUeXBlKGNv
bnN0IERPTVN0cmluZyYgdCkKIHsKICAgICB0eXBlRW51bSBuZXdUeXBlOwpAQCAtMjM1MCw3ICsy
MzQyLDcgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50SW1wbDo6c2V0VXNlTWFwKGNvbgogLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQogCiBIVE1MTGFiZWxFbGVtZW50SW1wbDo6SFRNTExhYmVsRWxlbWVudElt
cGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50SW1wbChkb2MpCisgICAgOiBI
VE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjpsYWJlbCgpLCBkb2MpCiB7CiB9CiAKQEAgLTIzNjMs
MTEgKzIzNTUsNiBAQCBib29sIEhUTUxMYWJlbEVsZW1lbnRJbXBsOjppc0ZvY3VzYWJsZSgpCiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTExhYmVsRWxlbWVudEltcGw6
OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfTEFCRUw7Ci19Ci0KIHZvaWQgSFRNTExhYmVs
RWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0
dHIpCiB7CiAgICAgc3dpdGNoKGF0dHItPmlkKCkpCkBAIC0yNDQ0LDcgKzI0MzEsNyBAQCB2b2lk
IEhUTUxMYWJlbEVsZW1lbnRJbXBsOjpzZXRIdG1sRm9yKGNvCiAvLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CiAKIEhUTUxMZWdlbmRFbGVtZW50SW1wbDo6SFRNTExlZ2VuZEVsZW1lbnRJbXBsKERvY3VtZW50
UHRyICpkb2MsIEhUTUxGb3JtRWxlbWVudEltcGwgKmYpCi06IEhUTUxHZW5lcmljRm9ybUVsZW1l
bnRJbXBsKGRvYywgZikKKzogSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwoSFRNTE5hbWVzOjps
ZWdlbmQoKSwgZG9jLCBmKQogewogfQogCkBAIC0yNDU3LDExICsyNDQ0LDYgQEAgYm9vbCBIVE1M
TGVnZW5kRWxlbWVudEltcGw6OmlzRm9jdXNhYmxlKAogICAgIHJldHVybiBmYWxzZTsKIH0KIAot
Tm9kZUltcGw6OklkIEhUTUxMZWdlbmRFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJl
dHVybiBJRF9MRUdFTkQ7Ci19Ci0KIFJlbmRlck9iamVjdCogSFRNTExlZ2VuZEVsZW1lbnRJbXBs
OjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSogYXJlbmEsIFJlbmRlclN0eWxlKiBzdHlsZSkK
IHsKICAgICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVyTGVnZW5kKHRoaXMpOwpAQCAtMjQ5NSw4
ICsyNDc3LDIwIEBAIHZvaWQgSFRNTExlZ2VuZEVsZW1lbnRJbXBsOjpzZXRBbGlnbihjb24KIC8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KIAogSFRNTFNlbGVjdEVsZW1lbnRJbXBsOjpIVE1MU2VsZWN0RWxl
bWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgSFRNTEZvcm1FbGVtZW50SW1wbCAqZikKLSAgICA6
IEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKGRvYywgZiksIG1fb3B0aW9ucygwKQorICAgIDog
SFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwoSFRNTE5hbWVzOjpzZWxlY3QoKSwgZG9jLCBmKSwg
bV9vcHRpb25zKDApCit7CisgICAgaW5pdCgpOworfQorCitIVE1MU2VsZWN0RWxlbWVudEltcGw6
OkhUTUxTZWxlY3RFbGVtZW50SW1wbChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1
bWVudFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmKQorICAgIDogSFRNTEdlbmVyaWNG
b3JtRWxlbWVudEltcGwodGFnTmFtZSwgZG9jLCBmKSwgbV9vcHRpb25zKDApCit7CisgICAgaW5p
dCgpOworfQorCit2b2lkIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6aW5pdCgpCiB7CisgICAgbV9v
cHRpb25zID0gMDsKICAgICBtX211bHRpcGxlID0gZmFsc2U7CiAgICAgbV9yZWNhbGNMaXN0SXRl
bXMgPSBmYWxzZTsKICAgICAvLyAwIG1lYW5zIGludmFsaWQgKGkuZS4gbm90IHNldCkKQEAgLTI1
MTMsMTEgKzI1MDcsNiBAQCBIVE1MU2VsZWN0RWxlbWVudEltcGw6On5IVE1MU2VsZWN0RWxlbWVu
CiAgICAgfQogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTFNlbGVjdEVsZW1lbnRJbXBsOjppZCgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIElEX1NFTEVDVDsKLX0KLQogdm9pZCBIVE1MU2VsZWN0RWxlbWVu
dEltcGw6OnJlY2FsY1N0eWxlKCBTdHlsZUNoYW5nZSBjaCApCiB7CiAgICAgaWYgKGhhc0NoYW5n
ZWRDaGlsZCgpICYmIG1fcmVuZGVyKSB7CkBAIC0yNTM5LDcgKzI1MjgsNyBAQCBsb25nIEhUTUxT
ZWxlY3RFbGVtZW50SW1wbDo6c2VsZWN0ZWRJbmRlCiAgICAgdWludCBvID0gMDsKICAgICBRTWVt
QXJyYXk8SFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwqPiBpdGVtcyA9IGxpc3RJdGVtcygpOwog
ICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyBpKyspIHsKLSAg
ICAgICAgaWYgKGl0ZW1zW2ldLT5pZCgpID09IElEX09QVElPTikgeworICAgICAgICBpZiAoaXRl
bXNbaV0tPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9wdGlvbigpKSkgewogICAgICAgICAgICAg
aWYgKHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50SW1wbCo+KGl0ZW1zW2ldKS0+c2VsZWN0
ZWQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gbzsKICAgICAgICAgICAgIG8rKzsKQEAgLTI1
NTUsNyArMjU0NCw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnRJbXBsOjpzZXRTZWxlY3RlZEkK
ICAgICBRTWVtQXJyYXk8SFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwqPiBpdGVtcyA9IGxpc3RJ
dGVtcygpOwogICAgIGludCBsaXN0SW5kZXg7CiAgICAgZm9yIChsaXN0SW5kZXggPSAwOyBsaXN0
SW5kZXggPCBpbnQoaXRlbXMuc2l6ZSgpKTsgbGlzdEluZGV4KyspIHsKLSAgICAgICAgaWYgKGl0
ZW1zW2xpc3RJbmRleF0tPmlkKCkgPT0gSURfT1BUSU9OKQorICAgICAgICBpZiAoaXRlbXNbbGlz
dEluZGV4XS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpKQogICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnRJbXBsKj4oaXRlbXNbbGlzdEluZGV4XSktPnNl
dFNlbGVjdGVkKGZhbHNlKTsKICAgICB9CiAgICAgbGlzdEluZGV4ID0gb3B0aW9uVG9MaXN0SW5k
ZXgoaW5kZXgpOwpAQCAtMjU3MSw3ICsyNTYwLDcgQEAgbG9uZyBIVE1MU2VsZWN0RWxlbWVudElt
cGw6Omxlbmd0aCgpIGNvbgogICAgIHVpbnQgaTsKICAgICBRTWVtQXJyYXk8SFRNTEdlbmVyaWNG
b3JtRWxlbWVudEltcGwqPiBpdGVtcyA9IGxpc3RJdGVtcygpOwogICAgIGZvciAoaSA9IDA7IGkg
PCBpdGVtcy5zaXplKCk7IGkrKykgewotICAgICAgICBpZiAoaXRlbXNbaV0tPmlkKCkgPT0gSURf
T1BUSU9OKQorICAgICAgICBpZiAoaXRlbXNbaV0tPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9w
dGlvbigpKSkKICAgICAgICAgICAgIGxlbisrOwogICAgIH0KICAgICByZXR1cm4gbGVuOwpAQCAt
MjU3OSw3ICsyNTY4LDcgQEAgbG9uZyBIVE1MU2VsZWN0RWxlbWVudEltcGw6Omxlbmd0aCgpIGNv
bgogCiB2b2lkIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6YWRkKCBIVE1MRWxlbWVudEltcGwgKmVs
ZW1lbnQsIEhUTUxFbGVtZW50SW1wbCAqYmVmb3JlICkKIHsKLSAgICBpZiAoIWVsZW1lbnQgfHwg
ZWxlbWVudC0+aWQoKSAhPSBJRF9PUFRJT04pCisgICAgaWYgKCFlbGVtZW50IHx8ICFlbGVtZW50
LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIGludCBleGNlcHRpb25jb2RlID0gMDsKQEAgLTI2MTMsMTMgKzI2MDIsMTIgQEAgdm9pZCBI
VE1MU2VsZWN0RWxlbWVudEltcGw6OmZvY3VzKCkKICAgICBnZXREb2N1bWVudCgpLT5zZXRGb2N1
c05vZGUodGhpcyk7CiB9CiAKLURPTVN0cmluZyBIVE1MU2VsZWN0RWxlbWVudEltcGw6OnZhbHVl
KCApCitET01TdHJpbmcgSFRNTFNlbGVjdEVsZW1lbnRJbXBsOjp2YWx1ZSgpCiB7CiAgICAgdWlu
dCBpOwogICAgIFFNZW1BcnJheTxIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbCo+IGl0ZW1zID0g
bGlzdEl0ZW1zKCk7CiAgICAgZm9yIChpID0gMDsgaSA8IGl0ZW1zLnNpemUoKTsgaSsrKSB7Ci0g
ICAgICAgIGlmICggaXRlbXNbaV0tPmlkKCkgPT0gSURfT1BUSU9OCi0gICAgICAgICAgICAmJiBz
dGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudEltcGwqPihpdGVtc1tpXSktPnNlbGVjdGVkKCkp
CisgICAgICAgIGlmIChpdGVtc1tpXS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkp
ICYmIHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50SW1wbCo+KGl0ZW1zW2ldKS0+c2VsZWN0
ZWQoKSkKICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudElt
cGwqPihpdGVtc1tpXSktPnZhbHVlKCk7CiAgICAgfQogICAgIHJldHVybiBET01TdHJpbmcoIiIp
OwpAQCAtMjYzMywxMyArMjYyMSwxMyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6c2V0
VmFsdWUoY29uCiAgICAgLy8gYW5kIG1ha2UgaXQgdGhlIGN1cnJlbnQgc2VsZWN0aW9uLgogICAg
IFFNZW1BcnJheTxIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbCo+IGl0ZW1zID0gbGlzdEl0ZW1z
KCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGl0ZW1zLnNpemUoKTsgaSsrKQotICAg
ICAgICBpZiAoaXRlbXNbaV0tPmlkKCkgPT0gSURfT1BUSU9OICYmIHN0YXRpY19jYXN0PEhUTUxP
cHRpb25FbGVtZW50SW1wbCo+KGl0ZW1zW2ldKS0+dmFsdWUoKSA9PSB2YWx1ZSkgeworICAgICAg
ICBpZiAoaXRlbXNbaV0tPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9wdGlvbigpKSAmJiBzdGF0
aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudEltcGwqPihpdGVtc1tpXSktPnZhbHVlKCkgPT0gdmFs
dWUpIHsKICAgICAgICAgICAgIHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50SW1wbCo+KGl0
ZW1zW2ldKS0+c2V0U2VsZWN0ZWQodHJ1ZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KIH0KIAotUVN0cmluZyBIVE1MU2VsZWN0RWxlbWVudEltcGw6OnN0YXRlKCApCitRU3RyaW5n
IEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6c3RhdGUoKQogewogI2lmICFBUFBMRV9DSEFOR0VTCiAg
ICAgUVN0cmluZyBzdGF0ZTsKQEAgLTI2NTIsNyArMjY0MCw3IEBAIFFTdHJpbmcgSFRNTFNlbGVj
dEVsZW1lbnRJbXBsOjpzdGF0ZSggKQogICAgIFFDaGFyIHN0YXRlQ2hhcnNbbF07CiAgICAgCiAg
ICAgZm9yKGludCBpID0gMDsgaSA8IGw7IGkrKykKLSAgICAgICAgaWYoaXRlbXNbaV0tPmlkKCkg
PT0gSURfT1BUSU9OICYmIHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50SW1wbCo+KGl0ZW1z
W2ldKS0+c2VsZWN0ZWQoKSkKKyAgICAgICAgaWYoaXRlbXNbaV0tPmhhc0xvY2FsTmFtZShIVE1M
TmFtZXM6Om9wdGlvbigpKSAmJiBzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudEltcGwqPihp
dGVtc1tpXSktPnNlbGVjdGVkKCkpCiAgICAgICAgICAgICBzdGF0ZUNoYXJzW2ldID0gJ1gnOwog
ICAgICAgICBlbHNlCiAgICAgICAgICAgICBzdGF0ZUNoYXJzW2ldID0gJy4nOwpAQCAtMjY4OSw3
ICsyNjc3LDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudEltcGw6OnJlc3RvcmVTdGF0ZQogCiAg
ICAgaW50IGwgPSBpdGVtcy5jb3VudCgpOwogICAgIGZvcihpbnQgaSA9IDA7IGkgPCBsOyBpKysp
IHsKLSAgICAgICAgaWYoaXRlbXNbaV0tPmlkKCkgPT0gSURfT1BUSU9OKSB7CisgICAgICAgIGlm
KGl0ZW1zW2ldLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvcHRpb24oKSkpIHsKICAgICAgICAg
ICAgIEhUTUxPcHRpb25FbGVtZW50SW1wbCogb2UgPSBzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxl
bWVudEltcGwqPihpdGVtc1tpXSk7CiAgICAgICAgICAgICBvZS0+c2V0U2VsZWN0ZWQoc3RhdGVb
aV0gPT0gJ1gnKTsKICAgICAgICAgfQpAQCAtMjc4MSw3ICsyNzY5LDcgQEAgYm9vbCBIVE1MU2Vs
ZWN0RWxlbWVudEltcGw6OmFwcGVuZEZvcm1EYQogCiAgICAgdWludCBpOwogICAgIGZvciAoaSA9
IDA7IGkgPCBpdGVtcy5zaXplKCk7IGkrKykgewotICAgICAgICBpZiAoaXRlbXNbaV0tPmlkKCkg
PT0gSURfT1BUSU9OKSB7CisgICAgICAgIGlmIChpdGVtc1tpXS0+aGFzTG9jYWxOYW1lKEhUTUxO
YW1lczo6b3B0aW9uKCkpKSB7CiAgICAgICAgICAgICBIVE1MT3B0aW9uRWxlbWVudEltcGwgKm9w
dGlvbiA9IHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50SW1wbCo+KGl0ZW1zW2ldKTsKICAg
ICAgICAgICAgIGlmIChvcHRpb24tPnNlbGVjdGVkKCkpIHsKICAgICAgICAgICAgICAgICBlbmNv
ZGVkX3ZhbHVlcy5hcHBlbmREYXRhKG5hbWUoKSwgb3B0aW9uLT52YWx1ZSgpKTsKQEAgLTI3OTQs
NyArMjc4Miw3IEBAIGJvb2wgSFRNTFNlbGVjdEVsZW1lbnRJbXBsOjphcHBlbmRGb3JtRGEKICAg
ICAvLyBpbiBhbnkgY2FzZS4gb3RoZXJ3aXNlIHdlIGhhdmUgbm8gY29uc2lzdGVuY3kgd2l0aCB0
aGUgRE9NIGludGVyZmFjZS4gRklYTUUhCiAgICAgLy8gd2UgcmV0dXJuIHRoZSBmaXJzdCBvbmUg
aWYgaXQgd2FzIGEgY29tYm9ib3ggc2VsZWN0CiAgICAgaWYgKCFzdWNjZXNzZnVsICYmICFtX211
bHRpcGxlICYmIG1fc2l6ZSA8PSAxICYmIGl0ZW1zLnNpemUoKSAmJgotICAgICAgICAoaXRlbXNb
MF0tPmlkKCkgPT0gSURfT1BUSU9OKSApIHsKKyAgICAgICAgKGl0ZW1zWzBdLT5oYXNMb2NhbE5h
bWUoSFRNTE5hbWVzOjpvcHRpb24oKSkpKSB7CiAgICAgICAgIEhUTUxPcHRpb25FbGVtZW50SW1w
bCAqb3B0aW9uID0gc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnRJbXBsKj4oaXRlbXNbMF0p
OwogICAgICAgICBpZiAob3B0aW9uLT52YWx1ZSgpLmlzTnVsbCgpKQogICAgICAgICAgICAgZW5j
b2RlZF92YWx1ZXMuYXBwZW5kRGF0YShuYW1lKCksIG9wdGlvbi0+dGV4dCgpLnN0cmluZygpLnN0
cmlwV2hpdGVTcGFjZSgpKTsKQEAgLTI4MTcsNyArMjgwNSw3IEBAIGludCBIVE1MU2VsZWN0RWxl
bWVudEltcGw6Om9wdGlvblRvTGlzdEkKICAgICBmb3IgKDsKICAgICAgICAgIG9wdGlvbkluZGV4
MiA8IGludChpdGVtcy5zaXplKCkpICYmIG9wdGlvbkluZGV4MiA8PSBvcHRpb25JbmRleDsKICAg
ICAgICAgIGxpc3RJbmRleCsrKSB7IC8vIG5vdCBhIHR5cG8hCi0gICAgICAgIGlmIChpdGVtc1ts
aXN0SW5kZXhdLT5pZCgpID09IElEX09QVElPTikKKyAgICAgICAgaWYgKGl0ZW1zW2xpc3RJbmRl
eF0tPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9wdGlvbigpKSkKICAgICAgICAgICAgIG9wdGlv
bkluZGV4MisrOwogICAgIH0KICAgICBsaXN0SW5kZXgtLTsKQEAgLTI4MjgsMTMgKzI4MTYsMTMg
QEAgaW50IEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6bGlzdFRvT3B0aW9uSQogewogICAgIFFNZW1B
cnJheTxIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbCo+IGl0ZW1zID0gbGlzdEl0ZW1zKCk7CiAg
ICAgaWYgKGxpc3RJbmRleCA8IDAgfHwgbGlzdEluZGV4ID49IGludChpdGVtcy5zaXplKCkpIHx8
Ci0gICAgICAgIGl0ZW1zW2xpc3RJbmRleF0tPmlkKCkgIT0gSURfT1BUSU9OKQorICAgICAgICAh
aXRlbXNbbGlzdEluZGV4XS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gLTE7CiAKICAgICBpbnQgb3B0aW9uSW5kZXggPSAwOyAvLyBhY3R1YWwgaW5k
ZXggb2Ygb3B0aW9uIG5vdCBjb3VudGluZyBPUFRHUk9VUCBlbnRyaWVzIHRoYXQgbWF5IGJlIGlu
IGxpc3QKICAgICBpbnQgaTsKICAgICBmb3IgKGkgPSAwOyBpIDwgbGlzdEluZGV4OyBpKyspCi0g
ICAgICAgIGlmIChpdGVtc1tpXS0+aWQoKSA9PSBJRF9PUFRJT04pCisgICAgICAgIGlmIChpdGVt
c1tpXS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpKQogICAgICAgICAgICAgb3B0
aW9uSW5kZXgrKzsKICAgICByZXR1cm4gb3B0aW9uSW5kZXg7CiB9CkBAIC0yODYwLDEzICsyODQ4
LDEzIEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnRJbXBsOjpyZWNhbGNMaXN0SXQKICAgICBtX2xp
c3RJdGVtcy5yZXNpemUoMCk7CiAgICAgSFRNTE9wdGlvbkVsZW1lbnRJbXBsKiBmb3VuZFNlbGVj
dGVkID0gMDsKICAgICB3aGlsZShjdXJyZW50KSB7Ci0gICAgICAgIGlmIChjdXJyZW50LT5pZCgp
ID09IElEX09QVEdST1VQICYmIGN1cnJlbnQtPmZpcnN0Q2hpbGQoKSkgeworICAgICAgICBpZiAo
Y3VycmVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9wdGdyb3VwKCkpICYmIGN1cnJlbnQtPmZp
cnN0Q2hpbGQoKSkgewogICAgICAgICAgICAgLy8gIyMjIHdoYXQgaWYgb3B0Z3JvdXAgY29udGFp
bnMganVzdCBjb21tZW50cz8gZG9uJ3Qgd2FudCBvbmUgb2Ygbm8gb3B0aW9ucyBpbiBpdC4uLgog
ICAgICAgICAgICAgbV9saXN0SXRlbXMucmVzaXplKG1fbGlzdEl0ZW1zLnNpemUoKSsxKTsKICAg
ICAgICAgICAgIG1fbGlzdEl0ZW1zW21fbGlzdEl0ZW1zLnNpemUoKS0xXSA9IHN0YXRpY19jYXN0
PEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKj4oY3VycmVudCk7CiAgICAgICAgICAgICBjdXJy
ZW50ID0gY3VycmVudC0+Zmlyc3RDaGlsZCgpOwogICAgICAgICB9Ci0gICAgICAgIGlmIChjdXJy
ZW50LT5pZCgpID09IElEX09QVElPTikgeworICAgICAgICBpZiAoY3VycmVudC0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6Om9wdGlvbigpKSkgewogICAgICAgICAgICAgbV9saXN0SXRlbXMucmVzaXpl
KG1fbGlzdEl0ZW1zLnNpemUoKSsxKTsKICAgICAgICAgICAgIG1fbGlzdEl0ZW1zW21fbGlzdEl0
ZW1zLnNpemUoKS0xXSA9IHN0YXRpY19jYXN0PEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKj4o
Y3VycmVudCk7CiAgICAgICAgICAgICBpZiAoIWZvdW5kU2VsZWN0ZWQgJiYgIW1fbXVsdGlwbGUg
JiYgbV9zaXplIDw9IDEpIHsKQEAgLTI5MDgsNyArMjg5Niw3IEBAIHZvaWQgSFRNTFNlbGVjdEVs
ZW1lbnRJbXBsOjpyZXNldCgpCiAgICAgUU1lbUFycmF5PEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJ
bXBsKj4gaXRlbXMgPSBsaXN0SXRlbXMoKTsKICAgICB1aW50IGk7CiAgICAgZm9yIChpID0gMDsg
aSA8IGl0ZW1zLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIGlmIChpdGVtc1tpXS0+aWQoKSA9PSBJ
RF9PUFRJT04pIHsKKyAgICAgICAgaWYgKGl0ZW1zW2ldLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVz
OjpvcHRpb24oKSkpIHsKICAgICAgICAgICAgIEhUTUxPcHRpb25FbGVtZW50SW1wbCAqb3B0aW9u
ID0gc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnRJbXBsKj4oaXRlbXNbaV0pOwogICAgICAg
ICAgICAgYm9vbCBzZWxlY3RlZCA9ICghb3B0aW9uLT5nZXRBdHRyaWJ1dGUoQVRUUl9TRUxFQ1RF
RCkuaXNOdWxsKCkpOwogICAgICAgICAgICAgb3B0aW9uLT5zZXRTZWxlY3RlZChzZWxlY3RlZCk7
CkBAIC0yOTI2LDcgKzI5MTQsNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6bm90aWZ5
T3B0aW9uCiAgICAgICAgIFFNZW1BcnJheTxIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbCo+IGl0
ZW1zID0gbGlzdEl0ZW1zKCk7CiAgICAgICAgIHVpbnQgaTsKICAgICAgICAgZm9yIChpID0gMDsg
aSA8IGl0ZW1zLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAoaXRlbXNbaV0tPmlkKCkg
PT0gSURfT1BUSU9OKQorICAgICAgICAgICAgaWYgKGl0ZW1zW2ldLT5oYXNMb2NhbE5hbWUoSFRN
TE5hbWVzOjpvcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTE9wdGlv
bkVsZW1lbnRJbXBsKj4oaXRlbXNbaV0pLT5tX3NlbGVjdGVkID0gKGl0ZW1zW2ldID09IHNlbGVj
dGVkT3B0aW9uKTsKICAgICAgICAgfQogICAgIH0KQEAgLTI5NzMsNyArMjk2MSw3IEBAIHZvaWQg
SFRNTFNlbGVjdEVsZW1lbnRJbXBsOjpzZXRTaXplKGxvbmcKIC8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
IAogSFRNTEtleWdlbkVsZW1lbnRJbXBsOjpIVE1MS2V5Z2VuRWxlbWVudEltcGwoRG9jdW1lbnRQ
dHIqIGRvYywgSFRNTEZvcm1FbGVtZW50SW1wbCogZikKLSAgICA6IEhUTUxTZWxlY3RFbGVtZW50
SW1wbChkb2MsIGYpCisgICAgOiBIVE1MU2VsZWN0RWxlbWVudEltcGwoSFRNTE5hbWVzOjprZXln
ZW4oKSwgZG9jLCBmKQogewogICAgIFFTdHJpbmdMaXN0IGtleXMgPSBLU1NMS2V5R2VuOjpzdXBw
b3J0ZWRLZXlTaXplcygpOwogICAgIGZvciAoUVN0cmluZ0xpc3Q6Okl0ZXJhdG9yIGkgPSBrZXlz
LmJlZ2luKCk7IGkgIT0ga2V5cy5lbmQoKTsgKytpKSB7CkBAIC0yOTgzLDExICsyOTcxLDYgQEAg
SFRNTEtleWdlbkVsZW1lbnRJbXBsOjpIVE1MS2V5Z2VuRWxlbWVudAogICAgIH0KIH0KIAotTm9k
ZUltcGw6OklkIEhUTUxLZXlnZW5FbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVy
biBJRF9LRVlHRU47Ci19Ci0KIERPTVN0cmluZyBIVE1MS2V5Z2VuRWxlbWVudEltcGw6OnR5cGUo
KSBjb25zdAogewogICAgIHJldHVybiAia2V5Z2VuIjsKQEAgLTMwNDIsNyArMzAyNSw3IEBAIGJv
b2wgSFRNTEtleWdlbkVsZW1lbnRJbXBsOjphcHBlbmRGb3JtRGEKIC8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KIAogSFRNTE9wdEdyb3VwRWxlbWVudEltcGw6OkhUTUxPcHRHcm91cEVsZW1lbnRJbXBsKERv
Y3VtZW50UHRyICpkb2MsIEhUTUxGb3JtRWxlbWVudEltcGwgKmYpCi0gICAgOiBIVE1MR2VuZXJp
Y0Zvcm1FbGVtZW50SW1wbChkb2MsIGYpCisgICAgOiBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1w
bChIVE1MTmFtZXM6Om9wdGdyb3VwKCksIGRvYywgZikKIHsKIH0KIApAQCAtMzA1NSwxMSArMzAz
OCw2IEBAIGJvb2wgSFRNTE9wdEdyb3VwRWxlbWVudEltcGw6OmlzRm9jdXNhYmwKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MT3B0R3JvdXBFbGVtZW50SW1wbDo6aWQo
KSBjb25zdAotewotICAgIHJldHVybiBJRF9PUFRHUk9VUDsKLX0KLQogRE9NU3RyaW5nIEhUTUxP
cHRHcm91cEVsZW1lbnRJbXBsOjp0eXBlKCkgY29uc3QKIHsKICAgICByZXR1cm4gIm9wdGdyb3Vw
IjsKQEAgLTMxMTMsNyArMzA5MSw3IEBAIHZvaWQgSFRNTE9wdEdyb3VwRWxlbWVudEltcGw6OnBh
cnNlTWFwcGUKIHZvaWQgSFRNTE9wdEdyb3VwRWxlbWVudEltcGw6OnJlY2FsY1NlbGVjdE9wdGlv
bnMoKQogewogICAgIE5vZGVJbXBsICpzZWxlY3QgPSBwYXJlbnROb2RlKCk7Ci0gICAgd2hpbGUg
KHNlbGVjdCAmJiBzZWxlY3QtPmlkKCkgIT0gSURfU0VMRUNUKQorICAgIHdoaWxlIChzZWxlY3Qg
JiYgIXNlbGVjdC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnNlbGVjdCgpKSkKICAgICAgICAgc2Vs
ZWN0ID0gc2VsZWN0LT5wYXJlbnROb2RlKCk7CiAgICAgaWYgKHNlbGVjdCkKICAgICAgICAgc3Rh
dGljX2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnRJbXBsKj4oc2VsZWN0KS0+c2V0UmVjYWxjTGlzdEl0
ZW1zKCk7CkBAIC0zMTMyLDcgKzMxMTAsNyBAQCB2b2lkIEhUTUxPcHRHcm91cEVsZW1lbnRJbXBs
OjpzZXRMYWJlbChjCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxPcHRpb25FbGVtZW50SW1w
bDo6SFRNTE9wdGlvbkVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIEhUTUxGb3JtRWxlbWVu
dEltcGwgKmYpCi0gICAgOiBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbChkb2MsIGYpCisgICAg
OiBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbChIVE1MTmFtZXM6Om9wdGlvbigpLCBkb2MsIGYp
CiB7CiAgICAgbV9zZWxlY3RlZCA9IGZhbHNlOwogfQpAQCAtMzE0MiwxMSArMzEyMCw2IEBAIGJv
b2wgSFRNTE9wdGlvbkVsZW1lbnRJbXBsOjppc0ZvY3VzYWJsZSgKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MT3B0aW9uRWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gSURfT1BUSU9OOwotfQotCiBET01TdHJpbmcgSFRNTE9wdGlvbkVsZW1lbnRJ
bXBsOjp0eXBlKCkgY29uc3QKIHsKICAgICByZXR1cm4gIm9wdGlvbiI7CkBAIC0zMTkzLDggKzMx
NjYsNyBAQCBsb25nIEhUTUxPcHRpb25FbGVtZW50SW1wbDo6aW5kZXgoKSBjb25zCiAgICAgaW50
IGwgPSBpdGVtcy5jb3VudCgpOwogICAgIGludCBvcHRpb25JbmRleCA9IDA7CiAgICAgZm9yKGlu
dCBpID0gMDsgaSA8IGw7IGkrKykgewotICAgICAgICBpZihpdGVtc1tpXS0+aWQoKSA9PSBJRF9P
UFRJT04pCi0gICAgICAgIHsKKyAgICAgICAgaWYgKGl0ZW1zW2ldLT5oYXNMb2NhbE5hbWUoSFRN
TE5hbWVzOjpvcHRpb24oKSkpIHsKICAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxIVE1MT3B0
aW9uRWxlbWVudEltcGwqPihpdGVtc1tpXSkgPT0gdGhpcykKICAgICAgICAgICAgICAgICByZXR1
cm4gb3B0aW9uSW5kZXg7CiAgICAgICAgICAgICBvcHRpb25JbmRleCsrOwpAQCAtMzI1OSw3ICsz
MjMxLDcgQEAgdm9pZCBIVE1MT3B0aW9uRWxlbWVudEltcGw6OmNoaWxkcmVuQ2hhbgogSFRNTFNl
bGVjdEVsZW1lbnRJbXBsICpIVE1MT3B0aW9uRWxlbWVudEltcGw6OmdldFNlbGVjdCgpIGNvbnN0
CiB7CiAgICAgTm9kZUltcGwgKnNlbGVjdCA9IHBhcmVudE5vZGUoKTsKLSAgICB3aGlsZSAoc2Vs
ZWN0ICYmIHNlbGVjdC0+aWQoKSAhPSBJRF9TRUxFQ1QpCisgICAgd2hpbGUgKHNlbGVjdCAmJiAh
c2VsZWN0LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c2VsZWN0KCkpKQogICAgICAgICBzZWxlY3Qg
PSBzZWxlY3QtPnBhcmVudE5vZGUoKTsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTFNlbGVj
dEVsZW1lbnRJbXBsKj4oc2VsZWN0KTsKIH0KQEAgLTMyODcsNyArMzI1OSw3IEBAIHZvaWQgSFRN
TE9wdGlvbkVsZW1lbnRJbXBsOjpzZXRMYWJlbChjb24KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAog
SFRNTFRleHRBcmVhRWxlbWVudEltcGw6OkhUTUxUZXh0QXJlYUVsZW1lbnRJbXBsKERvY3VtZW50
UHRyICpkb2MsIEhUTUxGb3JtRWxlbWVudEltcGwgKmYpCi0gICAgOiBIVE1MR2VuZXJpY0Zvcm1F
bGVtZW50SW1wbChkb2MsIGYpLCBtX3ZhbHVlSXNWYWxpZChmYWxzZSksIG1fdmFsdWVNYXRjaGVz
UmVuZGVyZXIoZmFsc2UpCisgICAgOiBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbChIVE1MTmFt
ZXM6OnRleHRhcmVhKCksIGRvYywgZiksIG1fdmFsdWVJc1ZhbGlkKGZhbHNlKSwgbV92YWx1ZU1h
dGNoZXNSZW5kZXJlcihmYWxzZSkKIHsKICAgICAvLyBEVEQgcmVxdWlyZXMgcm93cyAmIGNvbHMg
YmUgc3BlY2lmaWVkLCBidXQgd2Ugd2lsbCBwcm92aWRlIHJlYXNvbmFibGUgZGVmYXVsdHMKICAg
ICBtX3Jvd3MgPSAyOwpAQCAtMzMwMCwxMSArMzI3Miw2IEBAIEhUTUxUZXh0QXJlYUVsZW1lbnRJ
bXBsOjp+SFRNTFRleHRBcmVhRWwKICAgICBpZiAoZ2V0RG9jdW1lbnQoKSkgZ2V0RG9jdW1lbnQo
KS0+ZGVyZWdpc3Rlck1haW50YWluc1N0YXRlKHRoaXMpOwogfQogCi1Ob2RlSW1wbDo6SWQgSFRN
TFRleHRBcmVhRWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfVEVYVEFS
RUE7Ci19Ci0KIERPTVN0cmluZyBIVE1MVGV4dEFyZWFFbGVtZW50SW1wbDo6dHlwZSgpIGNvbnN0
CiB7CiAgICAgcmV0dXJuICJ0ZXh0YXJlYSI7CkBAIC0zNTIxLDE1ICszNDg4LDEwIEBAIHZvaWQg
SFRNTFRleHRBcmVhRWxlbWVudEltcGw6OnNldFJvd3MobG8KIC8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
IAogSFRNTElzSW5kZXhFbGVtZW50SW1wbDo6SFRNTElzSW5kZXhFbGVtZW50SW1wbChEb2N1bWVu
dFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmKQotICAgIDogSFRNTElucHV0RWxlbWVu
dEltcGwoZG9jLCBmKQorICAgIDogSFRNTElucHV0RWxlbWVudEltcGwoSFRNTE5hbWVzOjppc2lu
ZGV4KCksIGRvYywgZikKIHsKICAgICBtX3R5cGUgPSBURVhUOwogICAgIHNldE92ZXJyaWRlTmFt
ZSgiaXNpbmRleCIpOwotfQotCi1Ob2RlSW1wbDo6SWQgSFRNTElzSW5kZXhFbGVtZW50SW1wbDo6
aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9JU0lOREVYOwogfQogCiB2b2lkIEhUTUxJc0lu
ZGV4RWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwq
IGF0dHIpCkluZGV4OiBXZWJDb3JlL2todG1sL2h0bWwvaHRtbF9mb3JtaW1wbC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9sb2NhbC9ob21lL2N2cy9MYWJ5cmludGgvV2ViQ29yZS9raHRtbC9odG1s
L2h0bWxfZm9ybWltcGwuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS43MQpkaWZmIC11IC1wIC1y
MS43MSBXZWJDb3JlL2todG1sL2h0bWwvaHRtbF9mb3JtaW1wbC5oCi0tLSBXZWJDb3JlL2todG1s
L2h0bWwvaHRtbF9mb3JtaW1wbC5oCTIwMDUvMDUvMTIgMTc6MTE6MjIJMS43MQorKysgV2ViQ29y
ZS9raHRtbC9odG1sL2h0bWxfZm9ybWltcGwuaAkyMDA1LzA2LzAyIDA0OjEyOjA3CkBAIC02Nyw4
ICs2Nyw2IEBAIHB1YmxpYzoKICAgICBIVE1MRm9ybUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpk
b2MpOwogICAgIHZpcnR1YWwgfkhUTUxGb3JtRWxlbWVudEltcGwoKTsKIAotICAgIHZpcnR1YWwg
SWQgaWQoKSBjb25zdDsKLQogICAgIHZpcnR1YWwgdm9pZCBhdHRhY2goKTsKICAgICB2aXJ0dWFs
IHZvaWQgZGV0YWNoKCk7CiAKQEAgLTE1OSw3ICsxNTcsNyBAQCBjbGFzcyBIVE1MR2VuZXJpY0Zv
cm1FbGVtZW50SW1wbCA6IHB1YmxpCiAgICAgZnJpZW5kIGNsYXNzIGtodG1sOjpSZW5kZXJGb3Jt
RWxlbWVudDsKIAogcHVibGljOgotICAgIEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKERvY3Vt
ZW50UHRyICpkb2MsIEhUTUxGb3JtRWxlbWVudEltcGwgKmYgPSAwKTsKKyAgICBIVE1MR2VuZXJp
Y0Zvcm1FbGVtZW50SW1wbChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudFB0
ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmID0gMCk7CiAgICAgdmlydHVhbCB+SFRNTEdl
bmVyaWNGb3JtRWxlbWVudEltcGwoKTsKIAogICAgIEhUTUxGb3JtRWxlbWVudEltcGwgKmZvcm0o
KSB7IHJldHVybiBtX2Zvcm07IH0KQEAgLTI0Miw3ICsyNDAsNiBAQCBwdWJsaWM6CiAgICAgICAg
IEJVVFRPTgogICAgIH07CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CiAgICAgRE9NU3Ry
aW5nIHR5cGUoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0
ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICphdHRyKTsKQEAgLTI4MSw4ICsyNzgsNiBAQCBwdWJsaWM6
CiAgICAgSFRNTEZpZWxkU2V0RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgSFRNTEZvcm1F
bGVtZW50SW1wbCAqZiA9IDApOwogCiAgICAgdmlydHVhbCB+SFRNTEZpZWxkU2V0RWxlbWVudElt
cGwoKTsKLQotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKICAgICAKICAgICB2aXJ0dWFsIGJv
b2wgaXNGb2N1c2FibGUoKSBjb25zdDsKICAgICAKQEAgLTMyNSw5ICszMjAsMTAgQEAgcHVibGlj
OgogICAgIH07CiAKICAgICBIVE1MSW5wdXRFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCBI
VE1MRm9ybUVsZW1lbnRJbXBsICpmID0gMCk7CisgICAgSFRNTElucHV0RWxlbWVudEltcGwoY29u
c3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnRQdHIgKmRvYywgSFRNTEZvcm1FbGVt
ZW50SW1wbCAqZiA9IDApOwogICAgIHZpcnR1YWwgfkhUTUxJbnB1dEVsZW1lbnRJbXBsKCk7CiAK
LSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CisgICAgdm9pZCBpbml0KCk7CiAKICAgICB2aXJ0
dWFsIGJvb2wgaXNFbnVtZXJhdGFibGUoKSBjb25zdCB7IHJldHVybiBpbnB1dFR5cGUoKSAhPSBJ
TUFHRTsgfQogCkBAIC00NTEsOCArNDQ3LDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgfkhUTUxM
YWJlbEVsZW1lbnRJbXBsKCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNGb2N1c2FibGUoKSBjb25z
dDsKLSAgICAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQg
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqYXR0cik7CiAKQEAgLTQ4
NSw3ICs0NzksNiBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNGb2N1c2FibGUoKSBj
b25zdDsKICAgICAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CiAgICAgdmlydHVhbCBraHRt
bDo6UmVuZGVyT2JqZWN0ICpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSAqLCBraHRtbDo6UmVu
ZGVyU3R5bGUgKik7CiAKICAgICB2aXJ0dWFsIERPTVN0cmluZyB0eXBlKCkgY29uc3Q7CkBAIC01
MDUsOSArNDk4LDExIEBAIGNsYXNzIEhUTUxTZWxlY3RFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE0K
IAogcHVibGljOgogICAgIEhUTUxTZWxlY3RFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCBI
VE1MRm9ybUVsZW1lbnRJbXBsICpmID0gMCk7CisgICAgSFRNTFNlbGVjdEVsZW1lbnRJbXBsKGNv
bnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50UHRyICpkb2MsIEhUTUxGb3JtRWxl
bWVudEltcGwgKmYgPSAwKTsKICAgICB+SFRNTFNlbGVjdEVsZW1lbnRJbXBsKCk7CiAKLSAgICB2
aXJ0dWFsIElkIGlkKCkgY29uc3Q7CisgICAgdm9pZCBpbml0KCk7CisKICAgICBET01TdHJpbmcg
dHlwZSgpIGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lkIHJlY2FsY1N0eWxlKCBTdHlsZUNoYW5n
ZSApOwpAQCAtNTk0LDggKzU4OSw2IEBAIGNsYXNzIEhUTUxLZXlnZW5FbGVtZW50SW1wbCA6IHB1
YmxpYyBIVE0KIHB1YmxpYzoKICAgICBIVE1MS2V5Z2VuRWxlbWVudEltcGwoRG9jdW1lbnRQdHIg
KmRvYywgSFRNTEZvcm1FbGVtZW50SW1wbCAqZiA9IDApOwogCi0gICAgdmlydHVhbCBJZCBpZCgp
IGNvbnN0OwotCiAgICAgRE9NU3RyaW5nIHR5cGUoKSBjb25zdDsKIAogICAgIC8vICMjIyB0aGlz
IGlzIGp1c3QgYSByb3VnaCBndWVzcwpAQCAtNjE2LDcgKzYwOSw2IEBAIHB1YmxpYzoKICAgICBI
VE1MT3B0R3JvdXBFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJ
bXBsICpmID0gMCk7CiAgICAgdmlydHVhbCB+SFRNTE9wdEdyb3VwRWxlbWVudEltcGwoKTsKIAot
ICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKICAgICBET01TdHJpbmcgdHlwZSgpIGNvbnN0Owog
CiAgICAgdmlydHVhbCBib29sIGlzRm9jdXNhYmxlKCkgY29uc3Q7CkBAIC02NDUsOCArNjM3LDcg
QEAgcHVibGljOgogICAgIEhUTUxPcHRpb25FbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCBI
VE1MRm9ybUVsZW1lbnRJbXBsICpmID0gMCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNGb2N1c2Fi
bGUoKSBjb25zdDsKLSAgICAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CisKICAgICBET01T
dHJpbmcgdHlwZSgpIGNvbnN0OwogCiAgICAgRE9NU3RyaW5nIHRleHQoKSBjb25zdDsKQEAgLTY5
NCw4ICs2ODUsNiBAQCBwdWJsaWM6CiAgICAgSFRNTFRleHRBcmVhRWxlbWVudEltcGwoRG9jdW1l
bnRQdHIgKmRvYywgSFRNTEZvcm1FbGVtZW50SW1wbCAqZiA9IDApOwogICAgIH5IVE1MVGV4dEFy
ZWFFbGVtZW50SW1wbCgpOwogCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwotCiAgICAgbG9u
ZyBjb2xzKCkgY29uc3QgeyByZXR1cm4gbV9jb2xzOyB9CiAKICAgICBsb25nIHJvd3MoKSBjb25z
dCB7IHJldHVybiBtX3Jvd3M7IH0KQEAgLTc1Nyw4ICs3NDYsNiBAQCBjbGFzcyBIVE1MSXNJbmRl
eEVsZW1lbnRJbXBsIDogcHVibGljIEhUCiB7CiBwdWJsaWM6CiAgICAgSFRNTElzSW5kZXhFbGVt
ZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmID0gMCk7Ci0K
LSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqYXR0cik7CiAKSW5kZXg6IFdlYkNvcmUv
a2h0bWwvaHRtbC9odG1sX2hlYWRpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvbG9jYWwv
aG9tZS9jdnMvTGFieXJpbnRoL1dlYkNvcmUva2h0bWwvaHRtbC9odG1sX2hlYWRpbXBsLmNwcCx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS40OApkaWZmIC11IC1wIC1yMS40OCBXZWJDb3JlL2todG1s
L2h0bWwvaHRtbF9oZWFkaW1wbC5jcHAKLS0tIFdlYkNvcmUva2h0bWwvaHRtbC9odG1sX2hlYWRp
bXBsLmNwcAkyMDA1LzA1LzExIDA1OjQ5OjM0CTEuNDgKKysrIFdlYkNvcmUva2h0bWwvaHRtbC9o
dG1sX2hlYWRpbXBsLmNwcAkyMDA1LzA2LzAyIDA0OjEyOjA4CkBAIC00Niw3ICs0Niw3IEBAIHVz
aW5nIG5hbWVzcGFjZSBET007CiB1c2luZyBuYW1lc3BhY2Uga2h0bWw7CiAKIEhUTUxCYXNlRWxl
bWVudEltcGw6OkhUTUxCYXNlRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgICA6IEhU
TUxFbGVtZW50SW1wbChkb2MpCisgICAgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjpiYXNl
KCksIGRvYykKIHsKIH0KIApAQCAtMTE5LDcgKzExOSw3IEBAIHZvaWQgSFRNTEJhc2VFbGVtZW50
SW1wbDo6c2V0VGFyZ2V0KGNvbnMKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogSFRNTExpbmtFbGVt
ZW50SW1wbDo6SFRNTExpbmtFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAgIDogSFRN
TEVsZW1lbnRJbXBsKGRvYykKKyAgICA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6Omxpbmso
KSwgZG9jKQogewogICAgIG1fc2hlZXQgPSAwOwogICAgIG1fbG9hZGluZyA9IGZhbHNlOwpAQCAt
NDIzLDcgKzQyMyw3IEBAIHZvaWQgSFRNTExpbmtFbGVtZW50SW1wbDo6c2V0VHlwZShjb25zdCAK
IAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1IVE1MTWV0YUVsZW1lbnRJbXBsOjpIVE1MTWV0YUVs
ZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpIDogSFRNTEVsZW1lbnRJbXBsKGRvYykKK0hUTUxN
ZXRhRWxlbWVudEltcGw6OkhUTUxNZXRhRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykgOiBI
VE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjptZXRhKCksIGRvYykKIHsKIH0KIApAQCAtNTEyLDcg
KzUxMiw3IEBAIHZvaWQgSFRNTE1ldGFFbGVtZW50SW1wbDo6c2V0U2NoZW1lKGNvbnMKIC8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KIAogSFRNTFNjcmlwdEVsZW1lbnRJbXBsOjpIVE1MU2NyaXB0RWxlbWVu
dEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50SW1wbChkb2MpLCBtX2Nh
Y2hlZFNjcmlwdCgwKSwgbV9jcmVhdGVkQnlQYXJzZXIoZmFsc2UpCisgICAgOiBIVE1MRWxlbWVu
dEltcGwoSFRNTE5hbWVzOjpzY3JpcHQoKSwgZG9jKSwgbV9jYWNoZWRTY3JpcHQoMCksIG1fY3Jl
YXRlZEJ5UGFyc2VyKGZhbHNlKQogewogfQogCkBAIC02NjksNyArNjY5LDcgQEAgdm9pZCBIVE1M
U2NyaXB0RWxlbWVudEltcGw6OnNldFR5cGUoY29ucwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAK
LUhUTUxTdHlsZUVsZW1lbnRJbXBsOjpIVE1MU3R5bGVFbGVtZW50SW1wbChEb2N1bWVudFB0ciAq
ZG9jKSA6IEhUTUxFbGVtZW50SW1wbChkb2MpCitIVE1MU3R5bGVFbGVtZW50SW1wbDo6SFRNTFN0
eWxlRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5h
bWVzOjpzdHlsZSgpLCBkb2MpCiB7CiAgICAgbV9zaGVldCA9IDA7CiAgICAgbV9sb2FkaW5nID0g
ZmFsc2U7CkBAIC03OTYsNyArNzk2LDcgQEAgdm9pZCBIVE1MU3R5bGVFbGVtZW50SW1wbDo6c2V0
VHlwZShjb25zdAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MVGl0bGVFbGVtZW50SW1wbDo6
SFRNTFRpdGxlRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50
SW1wbChkb2MpCisgICAgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjp0aXRsZSgpLCBkb2Mp
CiB7CiB9CiAKSW5kZXg6IFdlYkNvcmUva2h0bWwvaHRtbC9odG1sX2ltYWdlaW1wbC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2xvY2FsL2hvbWUvY3ZzL0xhYnlyaW50aC9XZWJDb3JlL2todG1s
L2h0bWwvaHRtbF9pbWFnZWltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjQyCmRpZmYg
LXUgLXAgLXIxLjQyIFdlYkNvcmUva2h0bWwvaHRtbC9odG1sX2ltYWdlaW1wbC5jcHAKLS0tIFdl
YkNvcmUva2h0bWwvaHRtbC9odG1sX2ltYWdlaW1wbC5jcHAJMjAwNS8wNS8xMiAwMToxNjowMQkx
LjQyCisrKyBXZWJDb3JlL2todG1sL2h0bWwvaHRtbF9pbWFnZWltcGwuY3BwCTIwMDUvMDYvMDIg
MDQ6MTI6MDgKQEAgLTUxLDcgKzUxLDcgQEAKIHVzaW5nIG5hbWVzcGFjZSBET007CiB1c2luZyBu
YW1lc3BhY2Uga2h0bWw7CiAKLS8vI2RlZmluZSBJTlNUUlVNRU5UX0xBWU9VVF9TQ0hFRFVMSU5H
IDEKKy8vICNkZWZpbmUgSU5TVFJVTUVOVF9MQVlPVVRfU0NIRURVTElORyAxCiAKIEhUTUxJbWFn
ZUxvYWRlcjo6SFRNTEltYWdlTG9hZGVyKEVsZW1lbnRJbXBsKiBlbHQpCiA6bV9lbGVtZW50KGVs
dCksIG1faW1hZ2UoMCksIG1fZmlyZWRMb2FkKHRydWUpLCBtX2ltYWdlQ29tcGxldGUodHJ1ZSkK
QEAgLTc1LDcgKzc1LDcgQEAgdm9pZCBIVE1MSW1hZ2VMb2FkZXI6OnVwZGF0ZUZyb21FbGVtZW50
KAogICAgICAgICByZXR1cm47CiAKICAgICBBdG9taWNTdHJpbmcgYXR0cjsKLSAgICBpZiAoZWxl
bWVudCgpLT5pZCgpID09IElEX09CSkVDVCkKKyAgICBpZiAoZWxlbWVudCgpLT5oYXNMb2NhbE5h
bWUoSFRNTE5hbWVzOjpvYmplY3QoKSkpCiAgICAgICAgIGF0dHIgPSBlbGVtZW50KCktPmdldEF0
dHJpYnV0ZShBVFRSX0RBVEEpOwogICAgIGVsc2UKICAgICAgICAgYXR0ciA9IGVsZW1lbnQoKS0+
Z2V0QXR0cmlidXRlKEFUVFJfU1JDKTsKQEAgLTg2LDYgKzg2LDEwIEBAIHZvaWQgSFRNTEltYWdl
TG9hZGVyOjp1cGRhdGVGcm9tRWxlbWVudCgKICAgICAgICAgbmV3SW1hZ2UgPSBlbGVtZW50KCkt
PmdldERvY3VtZW50KCktPmRvY0xvYWRlcigpLT5yZXF1ZXN0SW1hZ2Uoa2h0bWw6OnBhcnNlVVJM
KGF0dHIpKTsKIAogICAgIGlmIChuZXdJbWFnZSAhPSBtX2ltYWdlKSB7CisjaWZkZWYgSU5TVFJV
TUVOVF9MQVlPVVRfU0NIRURVTElORworICAgICAgICBpZiAoIWRvY3VtZW50LT5vd25lckVsZW1l
bnQoKSAmJiBuZXdJbWFnZSkKKyAgICAgICAgICAgIHByaW50ZigiSW1hZ2UgcmVxdWVzdGVkIGF0
ICVkXG4iLCBlbGVtZW50KCktPmdldERvY3VtZW50KCktPmVsYXBzZWRUaW1lKCkpOworI2VuZGlm
CiAgICAgICAgIG1fZmlyZWRMb2FkID0gZmFsc2U7CiAgICAgICAgIG1faW1hZ2VDb21wbGV0ZSA9
IGZhbHNlOwogICAgICAgICBDYWNoZWRJbWFnZSogb2xkSW1hZ2UgPSBtX2ltYWdlOwpAQCAtMTMz
LDcgKzEzNyw3IEBAIHZvaWQgSFRNTEltYWdlTG9hZGVyOjpub3RpZnlGaW5pc2hlZChDYWMKIC8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KIAogSFRNTEltYWdlRWxlbWVudEltcGw6OkhUTUxJbWFnZUVsZW1l
bnRJbXBsKERvY3VtZW50UHRyICpkb2MsIEhUTUxGb3JtRWxlbWVudEltcGwgKmYpCi0gICAgOiBI
VE1MRWxlbWVudEltcGwoZG9jKSwgbV9pbWFnZUxvYWRlcih0aGlzKSwgaXNtYXAoZmFsc2UpLCBt
X2Zvcm0oZikKKyAgICA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6OmltZygpLCBkb2MpLCBt
X2ltYWdlTG9hZGVyKHRoaXMpLCBpc21hcChmYWxzZSksIG1fZm9ybShmKQogewogICAgIGlmICht
X2Zvcm0pCiAgICAgICAgIG1fZm9ybS0+cmVnaXN0ZXJJbWdFbGVtZW50KHRoaXMpOwpAQCAtNTI4
LDcgKzUzMiw3IEBAIGxvbmcgSFRNTEltYWdlRWxlbWVudEltcGw6OnkoKSBjb25zdAogLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQogCiBIVE1MTWFwRWxlbWVudEltcGw6OkhUTUxNYXBFbGVtZW50SW1wbChE
b2N1bWVudFB0ciAqZG9jKQotICAgIDogSFRNTEVsZW1lbnRJbXBsKGRvYykKKyAgICA6IEhUTUxF
bGVtZW50SW1wbChIVE1MTmFtZXM6Om1hcCgpLCBkb2MpCiB7CiB9CiAKQEAgLTU1MiwzMiArNTU2
LDI4IEBAIEhUTUxNYXBFbGVtZW50SW1wbDo6bWFwTW91c2VFdmVudChpbnQgeF8KICAgICBRUHRy
U3RhY2s8Tm9kZUltcGw+IG5vZGVTdGFjazsKIAogICAgIE5vZGVJbXBsICpjdXJyZW50ID0gZmly
c3RDaGlsZCgpOwotICAgIHdoaWxlKDEpCi0gICAgewotICAgICAgICBpZighY3VycmVudCkKLSAg
ICAgICAgeworICAgIHdoaWxlICgxKSB7CisgICAgICAgIGlmICghY3VycmVudCkgewogICAgICAg
ICAgICAgaWYobm9kZVN0YWNrLmlzRW1wdHkoKSkgYnJlYWs7CiAgICAgICAgICAgICBjdXJyZW50
ID0gbm9kZVN0YWNrLnBvcCgpOwogICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQtPm5leHRT
aWJsaW5nKCk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICBpZihj
dXJyZW50LT5pZCgpPT1JRF9BUkVBKQotICAgICAgICB7CisgICAgICAgIAorICAgICAgICBpZiAo
Y3VycmVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmFyZWEoKSkpIHsKICAgICAgICAgICAgIC8v
Y291dCA8PCAiYXJlYSBmb3VuZCAiIDw8IGVuZGw7Ci0gICAgICAgICAgICBIVE1MQXJlYUVsZW1l
bnRJbXBsKiBhcmVhPXN0YXRpY19jYXN0PEhUTUxBcmVhRWxlbWVudEltcGwqPihjdXJyZW50KTsK
KyAgICAgICAgICAgIEhUTUxBcmVhRWxlbWVudEltcGwqIGFyZWEgPSBzdGF0aWNfY2FzdDxIVE1M
QXJlYUVsZW1lbnRJbXBsKj4oY3VycmVudCk7CiAgICAgICAgICAgICBpZiAoYXJlYS0+bWFwTW91
c2VFdmVudCh4Xyx5Xyx3aWR0aF8saGVpZ2h0XywgaW5mbykpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIE5vZGVJbXBsICpjaGlsZCA9
IGN1cnJlbnQtPmZpcnN0Q2hpbGQoKTsKLSAgICAgICAgaWYoY2hpbGQpCi0gICAgICAgIHsKKyAg
ICAgICAgaWYgKGNoaWxkKSB7CiAgICAgICAgICAgICBub2RlU3RhY2sucHVzaChjdXJyZW50KTsK
ICAgICAgICAgICAgIGN1cnJlbnQgPSBjaGlsZDsKICAgICAgICAgfQogICAgICAgICBlbHNlCi0g
ICAgICAgIHsKICAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0U2libGluZygpOwot
ICAgICAgICB9CiAgICAgfQogCiAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogV2ViQ29yZS9raHRt
bC9odG1sL2h0bWxfaW5saW5laW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2xvY2FsL2hv
bWUvY3ZzL0xhYnlyaW50aC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbF9pbmxpbmVpbXBsLmNwcCx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS40MgpkaWZmIC11IC1wIC1yMS40MiBXZWJDb3JlL2todG1s
L2h0bWwvaHRtbF9pbmxpbmVpbXBsLmNwcAotLS0gV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfaW5s
aW5laW1wbC5jcHAJMjAwNS8wNS8xMSAwNTo0OTozNAkxLjQyCisrKyBXZWJDb3JlL2todG1sL2h0
bWwvaHRtbF9pbmxpbmVpbXBsLmNwcAkyMDA1LzA2LzAyIDA0OjEyOjA5CkBAIC00NSw3ICs0NSw3
IEBAIHVzaW5nIG5hbWVzcGFjZSBraHRtbDsKIG5hbWVzcGFjZSBET00gewogCiBIVE1MQW5jaG9y
RWxlbWVudEltcGw6OkhUTUxBbmNob3JFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAg
IDogSFRNTEVsZW1lbnRJbXBsKGRvYykKKyAgICA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6
OmEoKSwgZG9jKQogewogICAgIG1faGFzVGFyZ2V0ID0gZmFsc2U7CiB9CkBAIC0xMDQsMTEgKzEw
NCw2IEBAIGJvb2wgSFRNTEFuY2hvckVsZW1lbnRJbXBsOjppc0tleWJvYXJkRm8KICAgICByZXR1
cm4gZ2V0RG9jdW1lbnQoKS0+cGFydCgpLT50YWJzVG9MaW5rcygpOwogfQogCi1Ob2RlSW1wbDo6
SWQgSFRNTEFuY2hvckVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0E7
Ci19Ci0KIHZvaWQgSFRNTEFuY2hvckVsZW1lbnRJbXBsOjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2
ZW50SW1wbCAqZXZ0KQogewogICAgIC8vIFJlYWN0IG9uIGNsaWNrcyBhbmQgb24ga2V5cHJlc3Nl
cy4KQEAgLTE1Miw3ICsxNDcsNyBAQCB2b2lkIEhUTUxBbmNob3JFbGVtZW50SW1wbDo6ZGVmYXVs
dEV2ZW50CiAgICAgICAgIGlmICggZSAmJiBlLT5idXR0b24oKSA9PSAxICkKICAgICAgICAgICAg
IHV0YXJnZXQgPSAiX2JsYW5rIjsKIAotICAgICAgICBpZiAoIGV2dC0+dGFyZ2V0KCktPmlkKCkg
PT0gSURfSU1HICkgeworICAgICAgICBpZiAoZXZ0LT50YXJnZXQoKS0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OmltZygpKSkgewogICAgICAgICAgICAgSFRNTEltYWdlRWxlbWVudEltcGwqIGltZyA9
IHN0YXRpY19jYXN0PEhUTUxJbWFnZUVsZW1lbnRJbXBsKj4oIGV2dC0+dGFyZ2V0KCkgKTsKICAg
ICAgICAgICAgIGlmICggaW1nICYmIGltZy0+aXNTZXJ2ZXJNYXAoKSApCiAgICAgICAgICAgICB7
CkBAIC0zODIsNyArMzc3LDcgQEAgdm9pZCBIVE1MQW5jaG9yRWxlbWVudEltcGw6OmZvY3VzKCkK
IAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1IVE1MQlJFbGVtZW50SW1wbDo6SFRNTEJSRWxlbWVu
dEltcGwoRG9jdW1lbnRQdHIgKmRvYykgOiBIVE1MRWxlbWVudEltcGwoZG9jKQorSFRNTEJSRWxl
bWVudEltcGw6OkhUTUxCUkVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpIDogSFRNTEVsZW1l
bnRJbXBsKEhUTUxOYW1lczo6YnIoKSwgZG9jKQogewogfQogCkBAIC0zOTAsMTEgKzM4NSw2IEBA
IEhUTUxCUkVsZW1lbnRJbXBsOjp+SFRNTEJSRWxlbWVudEltcGwoKQogewogfQogCi1Ob2RlSW1w
bDo6SWQgSFRNTEJSRWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfQlI7
Ci19Ci0KIGJvb2wgSFRNTEJSRWxlbWVudEltcGw6Om1hcFRvRW50cnkoTm9kZUltcGw6OklkIGF0
dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0CiB7CiAgICAgaWYgKGF0dHIg
PT0gQVRUUl9DTEVBUikgewpAQCAtNDQ1LDcgKzQzNSw3IEBAIHZvaWQgSFRNTEJSRWxlbWVudElt
cGw6OnNldENsZWFyKGNvbnN0IEQKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogSFRNTEZvbnRFbGVt
ZW50SW1wbDo6SFRNTEZvbnRFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAgIDogSFRN
TEVsZW1lbnRJbXBsKGRvYykKKyAgICA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6OmZvbnQo
KSwgZG9jKQogewogfQogCkBAIC00NTMsMTEgKzQ0Myw2IEBAIEhUTUxGb250RWxlbWVudEltcGw6
On5IVE1MRm9udEVsZW1lbnRJbXAKIHsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxGb250RWxlbWVu
dEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfRk9OVDsKLX0KLQogLy8gQWxsb3dz
IGxlYWRpbmcgc3BhY2VzLgogLy8gQWxsb3dzIHRyYWlsaW5nIG5vbm51bWVyaWMgY2hhcmFjdGVy
cy4KIC8vIFJldHVybnMgMTAgZm9yIGFueSBzaXplIGdyZWF0ZXIgdGhhbiA5LgpAQCAtNTkwLDgg
KzU3NSw4IEBAIHZvaWQgSFRNTEZvbnRFbGVtZW50SW1wbDo6c2V0U2l6ZShjb25zdCAKIAogLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQogCi1IVE1MTW9kRWxlbWVudEltcGw6OkhUTUxNb2RFbGVtZW50SW1w
bChEb2N1bWVudFB0ciAqZG9jLCB1c2hvcnQgZWxlbWVudElkKQotICAgIDogSFRNTEdlbmVyaWNF
bGVtZW50SW1wbChkb2MsIGVsZW1lbnRJZCkKK0hUTUxNb2RFbGVtZW50SW1wbDo6SFRNTE1vZEVs
ZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50UHRyICpkb2Mp
CisgICAgOiBIVE1MRWxlbWVudEltcGwodGFnTmFtZSwgZG9jKQogewogfQogCkBAIC02MTgsMTUg
KzYwMywxMCBAQCB2b2lkIEhUTUxNb2RFbGVtZW50SW1wbDo6c2V0RGF0ZVRpbWUoY29uCiAvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxRdW90ZUVsZW1lbnRJbXBsOjpIVE1MUXVvdGVFbGVtZW50
SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAgIDogSFRNTEVsZW1lbnRJbXBsKGRvYykKKyAgICA6
IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6OnEoKSwgZG9jKQogewogfQogCi1Ob2RlSW1wbDo6
SWQgSFRNTFF1b3RlRWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfUTsK
LX0KLSAgICAKIERPTVN0cmluZyBIVE1MUXVvdGVFbGVtZW50SW1wbDo6Y2l0ZSgpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIGdldEF0dHJpYnV0ZShBVFRSX0NJVEUpOwpJbmRleDogV2ViQ29yZS9raHRt
bC9odG1sL2h0bWxfaW5saW5laW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9sb2NhbC9ob21l
L2N2cy9MYWJ5cmludGgvV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfaW5saW5laW1wbC5oLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjE5CmRpZmYgLXUgLXAgLXIxLjE5IFdlYkNvcmUva2h0bWwvaHRt
bC9odG1sX2lubGluZWltcGwuaAotLS0gV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfaW5saW5laW1w
bC5oCTIwMDUvMDUvMTEgMDU6NDk6MzQJMS4xOQorKysgV2ViQ29yZS9raHRtbC9odG1sL2h0bWxf
aW5saW5laW1wbC5oCTIwMDUvMDYvMDIgMDQ6MTI6MDkKQEAgLTM5LDcgKzM5LDYgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgYm9vbCBpc01vdXNlRm9jdXNhYmxlKCkgY29uc3Q7CiAgICAgdmlydHVh
bCBib29sIGlzS2V5Ym9hcmRGb2N1c2FibGUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNG
b2N1c2FibGUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CiAgICAgdmlydHVh
bCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIpOwog
ICAgIHZpcnR1YWwgdm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50SW1wbCAqZXZ0KTsKICAg
ICB2aXJ0dWFsIHZvaWQgYWNjZXNzS2V5QWN0aW9uKGJvb2wgZnVsbEFjdGlvbik7CkBAIC05Nyw4
ICs5Niw2IEBAIGNsYXNzIEhUTUxCUkVsZW1lbnRJbXBsIDogcHVibGljIEhUTUxFbGUKIHB1Ymxp
YzoKICAgICBIVE1MQlJFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKTsKICAgICB+SFRNTEJS
RWxlbWVudEltcGwoKTsKLQotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKICAgICAKICAgICB2
aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVz
dWx0KSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVk
QXR0cmlidXRlSW1wbCAqYXR0cik7CkBAIC0xMTYsOCArMTEzLDYgQEAgY2xhc3MgSFRNTEZvbnRF
bGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MRQogcHVibGljOgogICAgIEhUTUxGb250RWxlbWVudElt
cGwoRG9jdW1lbnRQdHIgKmRvYyk7CiAgICAgfkhUTUxGb250RWxlbWVudEltcGwoKTsKLQotICAg
IHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKICAgICAKICAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRy
eShJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdDsKICAgICB2aXJ0
dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqYXR0cik7
CkBAIC0xMzQsMTAgKzEyOSwxMCBAQCBwdWJsaWM6CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAot
Y2xhc3MgSFRNTE1vZEVsZW1lbnRJbXBsIDogcHVibGljIEhUTUxHZW5lcmljRWxlbWVudEltcGwK
K2NsYXNzIEhUTUxNb2RFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MRWxlbWVudEltcGwKIHsKIHB1
YmxpYzoKLSAgICBIVE1MTW9kRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgdXNob3J0IGVs
ZW1lbnRJZCk7CisgICAgSFRNTE1vZEVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRh
Z05hbWUsIERvY3VtZW50UHRyICpkb2MpOwogCiAgICAgRE9NU3RyaW5nIGNpdGUoKSBjb25zdDsK
ICAgICB2b2lkIHNldENpdGUoY29uc3QgRE9NU3RyaW5nICYpOwpAQCAtMTUyLDggKzE0Nyw2IEBA
IGNsYXNzIEhUTUxRdW90ZUVsZW1lbnRJbXBsIDogcHVibGljIEhUTUwKIHsKIHB1YmxpYzoKICAg
ICBIVE1MUXVvdGVFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKTsKLQotICAgIHZpcnR1YWwg
SWQgaWQoKSBjb25zdDsKICAgICAKICAgICBET01TdHJpbmcgY2l0ZSgpIGNvbnN0OwogICAgIHZv
aWQgc2V0Q2l0ZShjb25zdCBET01TdHJpbmcgJik7CkluZGV4OiBXZWJDb3JlL2todG1sL2h0bWwv
aHRtbF9saXN0aW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2xvY2FsL2hvbWUvY3ZzL0xh
YnlyaW50aC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbF9saXN0aW1wbC5jcHAsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuOQpkaWZmIC11IC1wIC1yMS45IFdlYkNvcmUva2h0bWwvaHRtbC9odG1sX2xp
c3RpbXBsLmNwcAotLS0gV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfbGlzdGltcGwuY3BwCTIwMDUv
MDUvMTEgMDU6NDk6MzQJMS45CisrKyBXZWJDb3JlL2todG1sL2h0bWwvaHRtbF9saXN0aW1wbC5j
cHAJMjAwNS8wNi8wMiAwNDoxMjowOQpAQCAtMzIsMTEgKzMyLDYgQEAgdXNpbmcgbmFtZXNwYWNl
IGtodG1sOwogCiBuYW1lc3BhY2UgRE9NIHsKIAotTm9kZUltcGw6OklkIEhUTUxVTGlzdEVsZW1l
bnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX1VMOwotfQotCiBib29sIEhUTUxV
TGlzdEVsZW1lbnRJbXBsOjptYXBUb0VudHJ5KE5vZGVJbXBsOjpJZCBhdHRyLCBNYXBwZWRBdHRy
aWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdAogewogICAgIHN3aXRjaCAoYXR0cikgewpAQCAtODQs
MTEgKzc5LDYgQEAgdm9pZCBIVE1MVUxpc3RFbGVtZW50SW1wbDo6c2V0VHlwZShjb25zdAogCiAv
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCiAKLU5vZGVJbXBsOjpJZCBIVE1MRGlyZWN0b3J5RWxlbWVudElt
cGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfRElSOwotfQotCiBib29sIEhUTUxEaXJl
Y3RvcnlFbGVtZW50SW1wbDo6Y29tcGFjdCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuICFnZXRBdHRy
aWJ1dGUoQVRUUl9DT01QQUNUKS5pc051bGwoKTsKQEAgLTEwMSwxMSArOTEsNiBAQCB2b2lkIEhU
TUxEaXJlY3RvcnlFbGVtZW50SW1wbDo6c2V0Q29tcGFjCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
IAotTm9kZUltcGw6OklkIEhUTUxNZW51RWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gSURfTUVOVTsKLX0KLQogYm9vbCBIVE1MTWVudUVsZW1lbnRJbXBsOjpjb21wYWN0KCkg
Y29uc3QKIHsKICAgICByZXR1cm4gIWdldEF0dHJpYnV0ZShBVFRSX0NPTVBBQ1QpLmlzTnVsbCgp
OwpAQCAtMTE4LDExICsxMDMsNiBAQCB2b2lkIEhUTUxNZW51RWxlbWVudEltcGw6OnNldENvbXBh
Y3QoYm9vCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotTm9kZUltcGw6OklkIEhUTUxPTGlzdEVs
ZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX09MOwotfQotCiBib29sIEhU
TUxPTGlzdEVsZW1lbnRJbXBsOjptYXBUb0VudHJ5KE5vZGVJbXBsOjpJZCBhdHRyLCBNYXBwZWRB
dHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdAogewogICAgIHN3aXRjaCAoYXR0cikgewpAQCAt
MTU1LDcgKzEzNSw3IEBAIHZvaWQgSFRNTE9MaXN0RWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXQK
ICAgICBjYXNlIEFUVFJfU1RBUlQ6CiAgICAgICAgICAgICBfc3RhcnQgPSAhYXR0ci0+aXNOdWxs
KCkgPyBhdHRyLT52YWx1ZSgpLnRvSW50KCkgOiAxOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIEhU
TUxVTGlzdEVsZW1lbnRJbXBsOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAg
SFRNTEVsZW1lbnRJbXBsOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKICAgICB9CiB9CiAK
QEAgLTE4NiwxMSArMTY2LDYgQEAgdm9pZCBIVE1MT0xpc3RFbGVtZW50SW1wbDo6c2V0VHlwZShj
b25zdAogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLU5vZGVJbXBsOjpJZCBIVE1MTElFbGVtZW50
SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9MSTsKLX0KLQogYm9vbCBIVE1MTElF
bGVtZW50SW1wbDo6bWFwVG9FbnRyeShOb2RlSW1wbDo6SWQgYXR0ciwgTWFwcGVkQXR0cmlidXRl
RW50cnkmIHJlc3VsdCkgY29uc3QKIHsKICAgICBzd2l0Y2ggKGF0dHIpIHsKQEAgLTI1MiwxMSAr
MjI3LDggQEAgdm9pZCBIVE1MTElFbGVtZW50SW1wbDo6YXR0YWNoKCkKICAgICAgICAgTm9kZUlt
cGwgKmxpc3ROb2RlID0gMDsKICAgICAgICAgTm9kZUltcGwgKm4gPSB0aGlzOwogICAgICAgICB3
aGlsZSAoIWxpc3ROb2RlICYmIChuID0gbi0+cGFyZW50Tm9kZSgpKSkgewotICAgICAgICAgICAg
c3dpdGNoIChuLT5pZCgpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBJRF9VTDoKLSAgICAgICAg
ICAgICAgICBjYXNlIElEX09MOgotICAgICAgICAgICAgICAgICAgICBsaXN0Tm9kZSA9IG47Ci0g
ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnVs
KCkpIHx8IG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvbCgpKSkKKyAgICAgICAgICAgICAgICBs
aXN0Tm9kZSA9IG47CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIElmIHdlIGFyZSBu
b3QgaW4gYSBsaXN0LCB0ZWxsIHRoZSByZW5kZXJlciBzbyBpdCBjYW4gcG9zaXRpb24gdXMgaW5z
aWRlLgpAQCAtMjY1LDcgKzIzNyw3IEBAIHZvaWQgSFRNTExJRWxlbWVudEltcGw6OmF0dGFjaCgp
CiAgICAgICAgICAgICByZW5kZXItPnNldE5vdEluTGlzdCh0cnVlKTsKIAogCS8vIElmIHdlIGFy
ZSBmaXJzdCwgYW5kIHRoZSBPTCBoYXMgYSBzdGFydCBhdHRyLCBzZXQgdGhlIHZhbHVlLgotCWlm
IChsaXN0Tm9kZSAmJiBsaXN0Tm9kZS0+aWQoKSA9PSBJRF9PTCAmJiAhbV9yZW5kZXItPnByZXZp
b3VzU2libGluZygpKSB7CisJaWYgKGxpc3ROb2RlICYmIGxpc3ROb2RlLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6b2woKSkgJiYgIW1fcmVuZGVyLT5wcmV2aW91c1NpYmxpbmcoKSkgewogCSAgICBI
VE1MT0xpc3RFbGVtZW50SW1wbCAqb2wgPSBzdGF0aWNfY2FzdDxIVE1MT0xpc3RFbGVtZW50SW1w
bCAqPihsaXN0Tm9kZSk7CiAgICAgICAgICAgICByZW5kZXItPnNldFZhbHVlKG9sLT5zdGFydCgp
KTsKIAl9CkBAIC0yOTUsMTIgKzI2Nyw4IEBAIHZvaWQgSFRNTExJRWxlbWVudEltcGw6OnNldFZh
bHVlKGxvbmcgdmEKIHsKICAgICBzZXRBdHRyaWJ1dGUoQVRUUl9WQUxVRSwgUVN0cmluZzo6bnVt
YmVyKHZhbHVlKSk7CiB9Ci0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLU5vZGVJbXBsOjpJZCBIVE1M
RExpc3RFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9ETDsKLX0KKy8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KIAogYm9vbCBIVE1MRExpc3RFbGVtZW50SW1wbDo6Y29tcGFjdCgp
IGNvbnN0CiB7CkluZGV4OiBXZWJDb3JlL2todG1sL2h0bWwvaHRtbF9saXN0aW1wbC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9sb2NhbC9ob21lL2N2cy9MYWJ5cmludGgvV2ViQ29yZS9raHRtbC9o
dG1sL2h0bWxfbGlzdGltcGwuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS43CmRpZmYgLXUgLXAg
LXIxLjcgV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfbGlzdGltcGwuaAotLS0gV2ViQ29yZS9raHRt
bC9odG1sL2h0bWxfbGlzdGltcGwuaAkyMDA1LzA1LzExIDA1OjQ5OjM0CTEuNworKysgV2ViQ29y
ZS9raHRtbC9odG1sL2h0bWxfbGlzdGltcGwuaAkyMDA1LzA2LzAyIDA0OjEyOjA5CkBAIC0zNSwx
MSArMzUsOSBAQCBuYW1lc3BhY2UgRE9NCiBjbGFzcyBIVE1MVUxpc3RFbGVtZW50SW1wbCA6IHB1
YmxpYyBIVE1MRWxlbWVudEltcGwKIHsKIHB1YmxpYzoKLSAgICBIVE1MVUxpc3RFbGVtZW50SW1w
bChEb2N1bWVudFB0ciAqZG9jKSA6IEhUTUxFbGVtZW50SW1wbChkb2MpIHt9CisgICAgSFRNTFVM
aXN0RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5h
bWVzOjp1bCgpLCBkb2MpIHt9CiAgICAgdmlydHVhbCB+SFRNTFVMaXN0RWxlbWVudEltcGwoKSB7
fQogCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwotCiAgICAgdmlydHVhbCBib29sIG1hcFRv
RW50cnkoSWQgYXR0ciwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3Q7CiAgICAg
dmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKik7
CiAKQEAgLTU3LDkgKzU1LDcgQEAgcHVibGljOgogY2xhc3MgSFRNTERpcmVjdG9yeUVsZW1lbnRJ
bXBsIDogcHVibGljIEhUTUxFbGVtZW50SW1wbAogewogcHVibGljOgotICAgIEhUTUxEaXJlY3Rv
cnlFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKSA6IEhUTUxFbGVtZW50SW1wbChkb2MpIHt9
Ci0KLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CisgICAgSFRNTERpcmVjdG9yeUVsZW1lbnRJ
bXBsKERvY3VtZW50UHRyICpkb2MpIDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6ZGlyKCks
IGRvYykge30KIAogICAgIGJvb2wgY29tcGFjdCgpIGNvbnN0OwogICAgIHZvaWQgc2V0Q29tcGFj
dChib29sKTsKQEAgLTcwLDkgKzY2LDcgQEAgcHVibGljOgogY2xhc3MgSFRNTE1lbnVFbGVtZW50
SW1wbCA6IHB1YmxpYyBIVE1MRWxlbWVudEltcGwKIHsKIHB1YmxpYzoKLSAgICBIVE1MTWVudUVs
ZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpIDogSFRNTEVsZW1lbnRJbXBsKGRvYykge30KLQot
ICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKKyAgICBIVE1MTWVudUVsZW1lbnRJbXBsKERvY3Vt
ZW50UHRyICpkb2MpIDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6bWVudSgpLCBkb2MpIHt9
CiAKICAgICBib29sIGNvbXBhY3QoKSBjb25zdDsKICAgICB2b2lkIHNldENvbXBhY3QoYm9vbCk7
CkBAIC04MCwxMyArNzQsMTEgQEAgcHVibGljOgogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLWNs
YXNzIEhUTUxPTGlzdEVsZW1lbnRJbXBsIDogcHVibGljIEhUTUxVTGlzdEVsZW1lbnRJbXBsCitj
bGFzcyBIVE1MT0xpc3RFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MRWxlbWVudEltcGwKIHsKIHB1
YmxpYzoKICAgICBIVE1MT0xpc3RFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAgICAg
ICA6IEhUTUxVTGlzdEVsZW1lbnRJbXBsKGRvYykgeyBfc3RhcnQgPSAxOyB9Ci0KLSAgICB2aXJ0
dWFsIElkIGlkKCkgY29uc3Q7CisgICAgICAgIDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6
b2woKSwgZG9jKSB7IF9zdGFydCA9IDE7IH0KICAgICAKICAgICB2aXJ0dWFsIGJvb2wgbWFwVG9F
bnRyeShJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdDsKICAgICB2
aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqKTsK
QEAgLTExMCwxMSArMTAyLDkgQEAgY2xhc3MgSFRNTExJRWxlbWVudEltcGwgOiBwdWJsaWMgSFRN
TEVsZQogewogcHVibGljOgogICAgIEhUTUxMSUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2Mp
Ci0gICAgICAgIDogSFRNTEVsZW1lbnRJbXBsKGRvYykgeyBpc1ZhbHVlZCA9IGZhbHNlOyB9Cisg
ICAgICAgIDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6bGkoKSwgZG9jKSB7IGlzVmFsdWVk
ID0gZmFsc2U7IH0KICAgICB2aXJ0dWFsIH5IVE1MTElFbGVtZW50SW1wbCgpIHt9CiAKLSAgICB2
aXJ0dWFsIElkIGlkKCkgY29uc3Q7Ci0KICAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShOb2Rl
SW1wbDo6SWQgYXR0ciwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3Q7CiAgICAg
dmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0
dHIpOwogCkBAIC0xMzYsMTAgKzEyNiw4IEBAIHByaXZhdGU6CiBjbGFzcyBIVE1MRExpc3RFbGVt
ZW50SW1wbCA6IHB1YmxpYyBIVE1MRWxlbWVudEltcGwKIHsKIHB1YmxpYzoKLSAgICBIVE1MRExp
c3RFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKSA6IEhUTUxFbGVtZW50SW1wbChkb2MpIHt9
CisgICAgSFRNTERMaXN0RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykgOiBIVE1MRWxlbWVu
dEltcGwoSFRNTE5hbWVzOjpkbCgpLCBkb2MpIHt9CiAgICAgdmlydHVhbCB+SFRNTERMaXN0RWxl
bWVudEltcGwoKSB7fQotCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwogCiAgICAgYm9vbCBj
b21wYWN0KCkgY29uc3Q7CiAgICAgdm9pZCBzZXRDb21wYWN0KGJvb2wpOwpJbmRleDogV2ViQ29y
ZS9raHRtbC9odG1sL2h0bWxfbWlzY2ltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9sb2Nh
bC9ob21lL2N2cy9MYWJ5cmludGgvV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfbWlzY2ltcGwuY3Bw
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjI1CmRpZmYgLXUgLXAgLXIxLjI1IFdlYkNvcmUva2h0
bWwvaHRtbC9odG1sX21pc2NpbXBsLmNwcAotLS0gV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfbWlz
Y2ltcGwuY3BwCTIwMDUvMDUvMTEgMDA6NTg6MjgJMS4yNQorKysgV2ViQ29yZS9raHRtbC9odG1s
L2h0bWxfbWlzY2ltcGwuY3BwCTIwMDUvMDYvMDIgMDQ6MTI6MTAKQEAgLTM1LDcgKzM1LDcgQEAK
IG5hbWVzcGFjZSBET00gewogCiBIVE1MQmFzZUZvbnRFbGVtZW50SW1wbDo6SFRNTEJhc2VGb250
RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50SW1wbChkb2Mp
CisgICAgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjpiYXNlZm9udCgpLCBkb2MpCiB7CiB9
CiAKQEAgLTEzOCw3MiArMTM4LDcyIEBAIE5vZGVJbXBsICpIVE1MQ29sbGVjdGlvbkltcGw6OnRy
YXZlcnNlTmUKICAgICAgICAgICAgIEhUTUxFbGVtZW50SW1wbCAqZSA9IHN0YXRpY19jYXN0PEhU
TUxFbGVtZW50SW1wbCAqPihjdXJyZW50KTsKICAgICAgICAgICAgIHN3aXRjaCh0eXBlKSB7CiAg
ICAgICAgICAgICBjYXNlIERPQ19JTUFHRVM6Ci0gICAgICAgICAgICAgICAgaWYoZS0+aWQoKSA9
PSBJRF9JTUcpCisgICAgICAgICAgICAgICAgaWYgKGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6
OmltZygpKSkKICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBET0NfRk9STVM6Ci0gICAgICAgICAgICAgICAg
aWYoZS0+aWQoKSA9PSBJRF9GT1JNKQorICAgICAgICAgICAgICAgIGlmKGUtPmhhc0xvY2FsTmFt
ZShIVE1MTmFtZXM6OmZvcm0oKSkpCiAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgRE9DX05BTUVBQkxFX0lU
RU1TOgotICAgICAgICAgICAgICAgIGlmKGUtPmlkKCkgPT0gSURfSU1HKQorICAgICAgICAgICAg
ICAgIGlmIChlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjppbWcoKSkpCiAgICAgICAgICAgICAg
ICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBpZihlLT5pZCgpID09IElEX0ZP
Uk0pCisgICAgICAgICAgICAgICAgaWYgKGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmZvcm0o
KSkpCiAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBp
ZihlLT5pZCgpID09IElEX0FQUExFVCkKKyAgICAgICAgICAgICAgICBpZiAoZS0+aGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6YXBwbGV0KCkpKQogICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRy
dWU7Ci0gICAgICAgICAgICAgICAgaWYoZS0+aWQoKSA9PSBJRF9FTUJFRCkKKyAgICAgICAgICAg
ICAgICBpZiAoZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6ZW1iZWQoKSkpCiAgICAgICAgICAg
ICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBpZihlLT5pZCgpID09IElE
X09CSkVDVCkKKyAgICAgICAgICAgICAgICBpZiAoZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6
b2JqZWN0KCkpKQogICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFRBQkxFX1RCT0RJRVM6Ci0gICAgICAgICAg
ICAgICAgaWYoZS0+aWQoKSA9PSBJRF9UQk9EWSkKKyAgICAgICAgICAgICAgICBpZiAoZS0+aGFz
TG9jYWxOYW1lKEhUTUxOYW1lczo6dGJvZHkoKSkpCiAgICAgICAgICAgICAgICAgICAgIGZvdW5k
ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBlbHNlIGlmKGUtPmlkKCkgPT0gSURfVEFCTEUpCisg
ICAgICAgICAgICAgICAgZWxzZSBpZiAoZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dGFibGUo
KSkpCiAgICAgICAgICAgICAgICAgICAgIGRlZXAgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIGNhc2UgVFJfQ0VMTFM6Ci0gICAgICAgICAgICAgICAgaWYoZS0+
aWQoKSA9PSBJRF9URCB8fCBlLT5pZCgpID09IElEX1RIKQorICAgICAgICAgICAgICAgIGlmIChl
LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0ZCgpKSB8fCBlLT5oYXNMb2NhbE5hbWUoSFRNTE5h
bWVzOjp0aCgpKSkKICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwotICAgICAgICAg
ICAgICAgIGVsc2UgaWYoZS0+aWQoKSA9PSBJRF9UQUJMRSkKKyAgICAgICAgICAgICAgICBlbHNl
IGlmIChlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0YWJsZSgpKSkKICAgICAgICAgICAgICAg
ICAgICAgZGVlcCA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
Y2FzZSBUQUJMRV9ST1dTOgogICAgICAgICAgICAgY2FzZSBUU0VDVElPTl9ST1dTOgotICAgICAg
ICAgICAgICAgIGlmKGUtPmlkKCkgPT0gSURfVFIpCisgICAgICAgICAgICAgICAgaWYgKGUtPmhh
c0xvY2FsTmFtZShIVE1MTmFtZXM6OnRyKCkpKQogICAgICAgICAgICAgICAgICAgICBmb3VuZCA9
IHRydWU7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZihlLT5pZCgpID09IElEX1RBQkxFKQorICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnRhYmxlKCkp
KQogICAgICAgICAgICAgICAgICAgICBkZWVwID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICBjYXNlIFNFTEVDVF9PUFRJT05TOgotICAgICAgICAgICAgICAgIGlm
KGUtPmlkKCkgPT0gSURfT1BUSU9OKQorICAgICAgICAgICAgICAgIGlmIChlLT5oYXNMb2NhbE5h
bWUoSFRNTE5hbWVzOjpvcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1
ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgTUFQX0FSRUFTOgot
ICAgICAgICAgICAgICAgIGlmKGUtPmlkKCkgPT0gSURfQVJFQSkKKyAgICAgICAgICAgICAgICBp
ZiAoZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6YXJlYSgpKSkKICAgICAgICAgICAgICAgICAg
ICAgZm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2Fz
ZSBET0NfQVBQTEVUUzogICAvLyBhbGwgT0JKRUNUIGFuZCBBUFBMRVQgZWxlbWVudHMKLSAgICAg
ICAgICAgICAgICBpZihlLT5pZCgpID09IElEX09CSkVDVCB8fCBlLT5pZCgpID09IElEX0FQUExF
VCkKKyAgICAgICAgICAgICAgICBpZiAoZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b2JqZWN0
KCkpIHx8IGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmFwcGxldCgpKSkKICAgICAgICAgICAg
ICAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgY2FzZSBET0NfRU1CRURTOiAgIC8vIGFsbCBFTUJFRCBlbGVtZW50cwotICAgICAgICAgICAg
ICAgIGlmKGUtPmlkKCkgPT0gSURfRU1CRUQpCisgICAgICAgICAgICAgICAgaWYgKGUtPmhhc0xv
Y2FsTmFtZShIVE1MTmFtZXM6OmVtYmVkKCkpKQogICAgICAgICAgICAgICAgICAgICBmb3VuZCA9
IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIERPQ19PQkpF
Q1RTOiAgIC8vIGFsbCBPQkpFQ1QgZWxlbWVudHMKLSAgICAgICAgICAgICAgICBpZihlLT5pZCgp
ID09IElEX09CSkVDVCkKKyAgICAgICAgICAgICAgICBpZiAoZS0+aGFzTG9jYWxOYW1lKEhUTUxO
YW1lczo6b2JqZWN0KCkpKQogICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIERPQ19MSU5LUzogICAgIC8vIGFs
bCBBIF9hbmRfIEFSRUEgZWxlbWVudHMgd2l0aCBhIHZhbHVlIGZvciBocmVmCi0gICAgICAgICAg
ICAgICAgaWYoZS0+aWQoKSA9PSBJRF9BIHx8IGUtPmlkKCkgPT0gSURfQVJFQSkKLSAgICAgICAg
ICAgICAgICAgICAgaWYoIWUtPmdldEF0dHJpYnV0ZShBVFRSX0hSRUYpLmlzTnVsbCgpKQorICAg
ICAgICAgICAgICAgIGlmIChlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjphKCkpIHx8IGUtPmhh
c0xvY2FsTmFtZShIVE1MTmFtZXM6OmFyZWEoKSkpCisgICAgICAgICAgICAgICAgICAgIGlmICgh
ZS0+Z2V0QXR0cmlidXRlKEFUVFJfSFJFRikuaXNOdWxsKCkpCiAgICAgICAgICAgICAgICAgICAg
ICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBj
YXNlIERPQ19BTkNIT1JTOiAgICAgIC8vIGFsbCBBIGVsZW1lbnRzIHdpdGggYSB2YWx1ZSBmb3Ig
bmFtZSBvciBhbiBpZCBhdHRyaWJ1dGUKLSAgICAgICAgICAgICAgICBpZihlLT5pZCgpID09IElE
X0EpCi0gICAgICAgICAgICAgICAgICAgIGlmKCFlLT5nZXRBdHRyaWJ1dGUoQVRUUl9OQU1FKS5p
c051bGwoKSkKKyAgICAgICAgICAgICAgICBpZiAoZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6
YSgpKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFlLT5nZXRBdHRyaWJ1dGUoQVRUUl9OQU1F
KS5pc051bGwoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgRE9DX0FMTDoKQEAgLTIxNiw5ICsy
MTYsOSBAQCBOb2RlSW1wbCAqSFRNTENvbGxlY3Rpb25JbXBsOjp0cmF2ZXJzZU5lCiAgICAgICAg
ICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGtkRGVidWcoIDYwMzAgKSA8PCAiRXJyb3Ig
aW4gSFRNTENvbGxlY3Rpb24sIHdyb25nIHRhZ0lkISIgPDwgZW5kbDsKICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGlmIChmb3VuZCkgeworCisgICAgICAgICAgICBpZiAoZm91bmQpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7Ci0gICAgICAgICAgICB9CiAgICAgICAgICAgICBp
ZiAoZGVlcCkgewogICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT50cmF2ZXJzZU5l
eHROb2RlKG1fYmFzZS5nZXQoKSk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC0yOTUs
MjkgKzI5NSwzMSBAQCBOb2RlSW1wbCAqSFRNTENvbGxlY3Rpb25JbXBsOjpuZXh0SXRlbSgpCiAK
IGJvb2wgSFRNTENvbGxlY3Rpb25JbXBsOjpjaGVja0Zvck5hbWVNYXRjaChOb2RlSW1wbCAqbm9k
ZSwgYm9vbCBjaGVja05hbWUsIGNvbnN0IERPTVN0cmluZyAmbmFtZSwgYm9vbCBjYXNlU2Vuc2l0
aXZlKSBjb25zdAogewotICAgIEVsZW1lbnRJbXBsICplID0gc3RhdGljX2Nhc3Q8RWxlbWVudElt
cGwgKj4obm9kZSk7CisgICAgaWYgKCFub2RlLT5pc0hUTUxFbGVtZW50KCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAKKyAgICBIVE1MRWxlbWVudEltcGwgKmUgPSBzdGF0aWNfY2FzdDxI
VE1MRWxlbWVudEltcGwqPihub2RlKTsKICAgICBpZiAoY2FzZVNlbnNpdGl2ZSkgewogICAgICAg
ICBpZiAoY2hlY2tOYW1lKSB7CiAgICAgICAgICAgICAvLyBkb2N1bWVudC5hbGwgcmV0dXJucyBv
bmx5IGltYWdlcywgZm9ybXMsIGFwcGxldHMsIG9iamVjdHMgYW5kIGVtYmVkcwogICAgICAgICAg
ICAgLy8gYnkgbmFtZSAodGhvdWdoIGV2ZXJ5dGhpbmcgYnkgaWQpCiAgICAgICAgICAgICBpZiAo
dHlwZSA9PSBET0NfQUxMICYmIAotICAgICAgICAgICAgICAgICEoZS0+aWQoKSA9PSBJRF9JTUcg
fHwgZS0+aWQoKSA9PSBJRF9GT1JNIHx8Ci0gICAgICAgICAgICAgICAgICBlLT5pZCgpID09IElE
X0FQUExFVCB8fCBlLT5pZCgpID09IElEX09CSkVDVCB8fAotICAgICAgICAgICAgICAgICAgZS0+
aWQoKSA9PSBJRF9FTUJFRCkpCisgICAgICAgICAgICAgICAgIShlLT5oYXNMb2NhbE5hbWUoSFRN
TE5hbWVzOjppbWcoKSkgfHwgZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6Zm9ybSgpKSB8fAor
ICAgICAgICAgICAgICAgICAgZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6YXBwbGV0KCkpIHx8
IGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9iamVjdCgpKSB8fAorICAgICAgICAgICAgICAg
ICAgZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6ZW1iZWQoKSkpKQogICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgICAgICAgICAgcmV0dXJuIGUtPmdldEF0dHJpYnV0ZShBVFRS
X05BTUUpID09IG5hbWUgJiYgZS0+Z2V0QXR0cmlidXRlKEFUVFJfSUQpICE9IG5hbWU7Ci0gICAg
ICAgIH0gZWxzZSB7CisgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgcmV0dXJuIGUtPmdldEF0
dHJpYnV0ZShBVFRSX0lEKSA9PSBuYW1lOwotICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAg
ICAgaWYgKGNoZWNrTmFtZSkgewogICAgICAgICAgICAgLy8gZG9jdW1lbnQuYWxsIHJldHVybnMg
b25seSBpbWFnZXMsIGZvcm1zLCBhcHBsZXRzLCBvYmplY3RzIGFuZCBlbWJlZHMKICAgICAgICAg
ICAgIC8vIGJ5IG5hbWUgKHRob3VnaCBldmVyeXRoaW5nIGJ5IGlkKQogICAgICAgICAgICAgaWYg
KHR5cGUgPT0gRE9DX0FMTCAmJiAKLSAgICAgICAgICAgICAgICAhKGUtPmlkKCkgPT0gSURfSU1H
IHx8IGUtPmlkKCkgPT0gSURfRk9STSB8fAotICAgICAgICAgICAgICAgICAgZS0+aWQoKSA9PSBJ
RF9BUFBMRVQgfHwgZS0+aWQoKSA9PSBJRF9PQkpFQ1QgfHwKLSAgICAgICAgICAgICAgICAgIGUt
PmlkKCkgPT0gSURfRU1CRUQpKQorICAgICAgICAgICAgICAgICEoZS0+aGFzTG9jYWxOYW1lKEhU
TUxOYW1lczo6aW1nKCkpIHx8IGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmZvcm0oKSkgfHwK
KyAgICAgICAgICAgICAgICAgIGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmFwcGxldCgpKSB8
fCBlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvYmplY3QoKSkgfHwKKyAgICAgICAgICAgICAg
ICAgIGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmVtYmVkKCkpKSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgICAgIHJldHVybiBlLT5nZXRBdHRyaWJ1dGUoQVRU
Ul9OQU1FKS5kb21TdHJpbmcoKS5sb3dlcigpID09IG5hbWUubG93ZXIoKSAmJgpAQCAtMzc2LDcg
KzM3OCw5IEBAIHZvaWQgSFRNTENvbGxlY3Rpb25JbXBsOjp1cGRhdGVOYW1lQ2FjaGUKICAgICAg
ICAgcmV0dXJuOwogICAgIAogICAgIGZvciAoTm9kZUltcGwgKm4gPSB0cmF2ZXJzZU5leHRJdGVt
KG1fYmFzZS5nZXQoKSk7IG47IG4gPSB0cmF2ZXJzZU5leHRJdGVtKG4pKSB7Ci0gICAgICAgIEVs
ZW1lbnRJbXBsICplID0gc3RhdGljX2Nhc3Q8RWxlbWVudEltcGwgKj4obik7CisgICAgICAgIGlm
ICghbi0+aXNIVE1MRWxlbWVudCgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIEhU
TUxFbGVtZW50SW1wbCogZSA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCo+KG4pOwogICAg
ICAgICBRU3RyaW5nIGlkQXR0ciA9IGUtPmdldEF0dHJpYnV0ZShBVFRSX0lEKS5zdHJpbmcoKTsK
ICAgICAgICAgUVN0cmluZyBuYW1lQXR0ciA9IGUtPmdldEF0dHJpYnV0ZShBVFRSX05BTUUpLnN0
cmluZygpOwogICAgICAgICBpZiAoIWlkQXR0ci5pc0VtcHR5KCkpIHsKQEAgLTM5MCw5ICszOTQs
OSBAQCB2b2lkIEhUTUxDb2xsZWN0aW9uSW1wbDo6dXBkYXRlTmFtZUNhY2hlCiAgICAgICAgIH0K
ICAgICAgICAgaWYgKCFuYW1lQXR0ci5pc0VtcHR5KCkgJiYgaWRBdHRyICE9IG5hbWVBdHRyCiAg
ICAgICAgICAgICAmJiAodHlwZSAhPSBET0NfQUxMIHx8IAotICAgICAgICAgICAgICAgIChlLT5p
ZCgpID09IElEX0lNRyB8fCBlLT5pZCgpID09IElEX0ZPUk0gfHwKLSAgICAgICAgICAgICAgICAg
ZS0+aWQoKSA9PSBJRF9BUFBMRVQgfHwgZS0+aWQoKSA9PSBJRF9PQkpFQ1QgfHwKLSAgICAgICAg
ICAgICAgICAgZS0+aWQoKSA9PSBJRF9FTUJFRCkpKSB7CisgICAgICAgICAgICAgICAgKGUtPmhh
c0xvY2FsTmFtZShIVE1MTmFtZXM6OmltZygpKSB8fCBlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVz
Ojpmb3JtKCkpIHx8CisgICAgICAgICAgICAgICAgIGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6
OmFwcGxldCgpKSB8fCBlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvYmplY3QoKSkgfHwKKyAg
ICAgICAgICAgICAgICAgZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6ZW1iZWQoKSkpKSkgewog
ICAgICAgICAgICAgLy8gYWRkIHRvIG5hbWUgY2FjaGUKICAgICAgICAgICAgIFFQdHJWZWN0b3I8
Tm9kZUltcGw+ICpuYW1lVmVjdG9yID0gaW5mby0+bmFtZUNhY2hlLmZpbmQobmFtZUF0dHIpOwog
ICAgICAgICAgICAgaWYgKCFuYW1lVmVjdG9yKSB7CkBAIC01MjksMTIgKzUzMywxMCBAQCBOb2Rl
SW1wbCogSFRNTEZvcm1Db2xsZWN0aW9uSW1wbDo6Z2V0TmFtCiAKIE5vZGVJbXBsKiBIVE1MRm9y
bUNvbGxlY3Rpb25JbXBsOjpnZXROYW1lZEZvcm1JdGVtKGludCBhdHRyX2lkLCBjb25zdCBET01T
dHJpbmcmIG5hbWUsIGludCBkdXBsaWNhdGVOdW1iZXIsIGJvb2wgY2FzZVNlbnNpdGl2ZSkgY29u
c3QKIHsKLSAgICBpZihtX2Jhc2UtPm5vZGVUeXBlKCkgPT0gTm9kZTo6RUxFTUVOVF9OT0RFKQot
ICAgIHsKKyAgICBpZiAobV9iYXNlLT5ub2RlVHlwZSgpID09IE5vZGU6OkVMRU1FTlRfTk9ERSkg
ewogICAgICAgICBIVE1MRWxlbWVudEltcGwqIGJhc2VFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRN
TEVsZW1lbnRJbXBsKj4obV9iYXNlLmdldCgpKTsKICAgICAgICAgYm9vbCBmb3VuZElucHV0RWxl
bWVudHMgPSBmYWxzZTsKLSAgICAgICAgaWYoYmFzZUVsZW1lbnQtPmlkKCkgPT0gSURfRk9STSkK
LSAgICAgICAgeworICAgICAgICBpZiAoYmFzZUVsZW1lbnQtPmhhc0xvY2FsTmFtZShIVE1MTmFt
ZXM6OmZvcm0oKSkpIHsKICAgICAgICAgICAgIEhUTUxGb3JtRWxlbWVudEltcGwqIGYgPSBzdGF0
aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnRJbXBsKj4oYmFzZUVsZW1lbnQpOwogICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGYtPmZvcm1FbGVtZW50cy5jb3VudCgpOyArK2kpIHsK
ICAgICAgICAgICAgICAgICBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbCogZSA9IGYtPmZvcm1F
bGVtZW50c1tpXTsKQEAgLTU1NCw4ICs1NTYsNyBAQCBOb2RlSW1wbCogSFRNTEZvcm1Db2xsZWN0
aW9uSW1wbDo6Z2V0TmFtCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBpZiAo
ICFmb3VuZElucHV0RWxlbWVudHMgKQotICAgICAgICB7CisgICAgICAgIGlmICghZm91bmRJbnB1
dEVsZW1lbnRzKSB7CiAgICAgICAgICAgICBIVE1MRm9ybUVsZW1lbnRJbXBsKiBmID0gc3RhdGlj
X2Nhc3Q8SFRNTEZvcm1FbGVtZW50SW1wbCo+KGJhc2VFbGVtZW50KTsKIAogICAgICAgICAgICAg
Zm9yKHVuc2lnbmVkIGkgPSAwOyBpIDwgZi0+aW1nRWxlbWVudHMuY291bnQoKTsgKytpKQpAQCAt
NjQ3LDcgKzY0OCw3IEBAIHZvaWQgSFRNTEZvcm1Db2xsZWN0aW9uSW1wbDo6dXBkYXRlTmFtZUMK
IAogICAgIFFEaWN0PGNoYXI+IGZvdW5kSW5wdXRFbGVtZW50czsKIAotICAgIGlmIChtX2Jhc2Ut
PmlkKCkgIT0gSURfRk9STSkgeworICAgIGlmICghbV9iYXNlLT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6Zm9ybSgpKSkgewogICAgICAgICBpbmZvLT5oYXNOYW1lQ2FjaGUgPSB0cnVlOwogICAgICAg
ICByZXR1cm47CiAgICAgfQpJbmRleDogV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfb2JqZWN0aW1w
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2xvY2FsL2hvbWUvY3ZzL0xhYnlyaW50aC9XZWJD
b3JlL2todG1sL2h0bWwvaHRtbF9vYmplY3RpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS42NApkaWZmIC11IC1wIC1yMS42NCBXZWJDb3JlL2todG1sL2h0bWwvaHRtbF9vYmplY3RpbXBs
LmNwcAotLS0gV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfb2JqZWN0aW1wbC5jcHAJMjAwNS8wNS8z
MSAwMDoxNTo1MgkxLjY0CisrKyBXZWJDb3JlL2todG1sL2h0bWwvaHRtbF9vYmplY3RpbXBsLmNw
cAkyMDA1LzA2LzAyIDA0OjEyOjEwCkBAIC01Nyw3ICs1Nyw3IEBAIG5hbWVzcGFjZSBET00gewog
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MQXBwbGV0RWxlbWVudEltcGw6OkhUTUxBcHBsZXRF
bGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICA6IEhUTUxFbGVtZW50SW1wbChkb2MpCisg
IDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6YXBwbGV0KCksIGRvYykKIHsKICAgICBhcHBs
ZXRJbnN0YW5jZSA9IDA7CiAgICAgbV9hbGxQYXJhbXNBdmFpbGFibGUgPSBmYWxzZTsKQEAgLTM0
Miw3ICszNDIsNyBAQCB2b2lkIEhUTUxBcHBsZXRFbGVtZW50SW1wbDo6c2V0V2lkdGgoY29uCiAv
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxFbWJlZEVsZW1lbnRJbXBsOjpIVE1MRW1iZWRFbGVt
ZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAgIDogSFRNTEVsZW1lbnRJbXBsKGRvYyksIGVt
YmVkSW5zdGFuY2UoMCkKKyAgICA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6OmVtYmVkKCks
IGRvYyksIGVtYmVkSW5zdGFuY2UoMCkKIHt9CiAKIEhUTUxFbWJlZEVsZW1lbnRJbXBsOjp+SFRN
TEVtYmVkRWxlbWVudEltcGwoKQpAQCAtNDY4LDcgKzQ2OCw3IEBAIGJvb2wgSFRNTEVtYmVkRWxl
bWVudEltcGw6OnJlbmRlcmVySXNOZWUKICAgICBLSFRNTFBhcnQgKnBhcnQgPSBnZXREb2N1bWVu
dCgpLT5wYXJ0KCk7CiAgICAgaWYgKCFwYXJ0KQogCXJldHVybiBmYWxzZTsKLSAgICByZXR1cm4g
cGFydC0+cGx1Z2luc0VuYWJsZWQoKSAmJiBwYXJlbnROb2RlKCktPmlkKCkgIT0gSURfT0JKRUNU
OworICAgIHJldHVybiBwYXJ0LT5wbHVnaW5zRW5hYmxlZCgpICYmICFwYXJlbnROb2RlKCktPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjpvYmplY3QoKSk7CiB9CiAKIFJlbmRlck9iamVjdCAqSFRNTEVt
YmVkRWxlbWVudEltcGw6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hICphcmVuYSwgUmVuZGVy
U3R5bGUgKnN0eWxlKQpAQCAtNDkzLDkgKzQ5Myw5IEBAIGJvb2wgSFRNTEVtYmVkRWxlbWVudElt
cGw6OmlzVVJMQXR0cmlidXQKIAogSFRNTE9iamVjdEVsZW1lbnRJbXBsOjpIVE1MT2JqZWN0RWxl
bWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykgCiAjaWYgQVBQTEVfQ0hBTkdFUwotOiBIVE1MRWxl
bWVudEltcGwoZG9jKSwgbV9pbWFnZUxvYWRlcigwKSwgb2JqZWN0SW5zdGFuY2UoMCkKKzogSFRN
TEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6b2JqZWN0KCksIGRvYyksIG1faW1hZ2VMb2FkZXIoMCks
IG9iamVjdEluc3RhbmNlKDApCiAjZWxzZQotOiBIVE1MRWxlbWVudEltcGwoZG9jKSwgbV9pbWFn
ZUxvYWRlcigwKQorOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjpvYmplY3QoKSwgZG9jKSwg
bV9pbWFnZUxvYWRlcigwKQogI2VuZGlmCiB7CiAgICAgbmVlZFdpZGdldFVwZGF0ZSA9IGZhbHNl
OwpAQCAtOTE4LDcgKzkxOCw3IEBAIHZvaWQgSFRNTE9iamVjdEVsZW1lbnRJbXBsOjpzZXRXaWR0
aChjb24KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogSFRNTFBhcmFtRWxlbWVudEltcGw6OkhUTUxQ
YXJhbUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0gICAgOiBIVE1MRWxlbWVudEltcGwo
ZG9jKQorICAgIDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6cGFyYW0oKSwgZG9jKQogewog
fQogCkluZGV4OiBXZWJDb3JlL2todG1sL2h0bWwvaHRtbF90YWJsZWltcGwuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9sb2NhbC9ob21lL2N2cy9MYWJ5cmludGgvV2ViQ29yZS9raHRtbC9odG1s
L2h0bWxfdGFibGVpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS41MgpkaWZmIC11IC1w
IC1yMS41MiBXZWJDb3JlL2todG1sL2h0bWwvaHRtbF90YWJsZWltcGwuY3BwCi0tLSBXZWJDb3Jl
L2todG1sL2h0bWwvaHRtbF90YWJsZWltcGwuY3BwCTIwMDUvMDUvMTEgMDU6NDk6MzQJMS41Mgor
KysgV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfdGFibGVpbXBsLmNwcAkyMDA1LzA2LzAyIDA0OjEy
OjExCkBAIC01MSw3ICs1MSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBraHRtbDsKIG5hbWVzcGFjZSBE
T00gewogCiBIVE1MVGFibGVFbGVtZW50SW1wbDo6SFRNTFRhYmxlRWxlbWVudEltcGwoRG9jdW1l
bnRQdHIgKmRvYykKLSAgOiBIVE1MRWxlbWVudEltcGwoZG9jKQorICA6IEhUTUxFbGVtZW50SW1w
bChIVE1MTmFtZXM6OnRhYmxlKCksIGRvYykKIHsKICAgICB0Q2FwdGlvbiA9IDA7CiAgICAgaGVh
ZCA9IDA7CkBAIC03MywxMSArNzMsNiBAQCBIVE1MVGFibGVFbGVtZW50SW1wbDo6fkhUTUxUYWJs
ZUVsZW1lbnRJCiB7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MVGFibGVFbGVtZW50SW1wbDo6aWQo
KSBjb25zdAotewotICAgIHJldHVybiBJRF9UQUJMRTsKLX0KLQogTm9kZUltcGwqIEhUTUxUYWJs
ZUVsZW1lbnRJbXBsOjpzZXRDYXB0aW9uKCBIVE1MVGFibGVDYXB0aW9uRWxlbWVudEltcGwgKmMg
KQogewogICAgIGludCBleGNlcHRpb25jb2RlID0gMDsKQEAgLTE0Niw3ICsxNDEsNyBAQCBIVE1M
RWxlbWVudEltcGwgKkhUTUxUYWJsZUVsZW1lbnRJbXBsOjpjCiAgICAgaWYoIWhlYWQpCiAgICAg
ewogICAgICAgICBpbnQgZXhjZXB0aW9uY29kZSA9IDA7Ci0gICAgICAgIGhlYWQgPSBuZXcgSFRN
TFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsKGRvY1B0cigpLCBJRF9USEVBRCwgdHJ1ZSAvKiBpbXBs
aWNpdCAqLyk7CisgICAgICAgIGhlYWQgPSBuZXcgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBs
KEhUTUxOYW1lczo6dGhlYWQoKSwgZG9jUHRyKCksIHRydWUgLyogaW1wbGljaXQgKi8pOwogICAg
ICAgICBpZihmb290KQogICAgICAgICAgICAgaW5zZXJ0QmVmb3JlKCBoZWFkLCBmb290LCBleGNl
cHRpb25jb2RlICk7CiAgICAgICAgIGVsc2UgaWYoZmlyc3RCb2R5KQpAQCAtMTcxLDcgKzE2Niw3
IEBAIEhUTUxFbGVtZW50SW1wbCAqSFRNTFRhYmxlRWxlbWVudEltcGw6OmMKICAgICBpZighZm9v
dCkKICAgICB7CiAgICAgICAgIGludCBleGNlcHRpb25jb2RlID0gMDsKLSAgICAgICAgZm9vdCA9
IG5ldyBIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGwoZG9jUHRyKCksIElEX1RGT09ULCB0cnVl
IC8qaW1wbGljaXQgKi8pOworICAgICAgICBmb290ID0gbmV3IEhUTUxUYWJsZVNlY3Rpb25FbGVt
ZW50SW1wbChIVE1MTmFtZXM6OnRmb290KCksIGRvY1B0cigpLCB0cnVlIC8qaW1wbGljaXQgKi8p
OwogICAgICAgICBpZihmaXJzdEJvZHkpCiAgICAgICAgICAgICBpbnNlcnRCZWZvcmUoIGZvb3Qs
IGZpcnN0Qm9keSwgZXhjZXB0aW9uY29kZSApOwogICAgICAgICBlbHNlCkBAIC0yMTYsNyArMjEx
LDcgQEAgSFRNTEVsZW1lbnRJbXBsICpIVE1MVGFibGVFbGVtZW50SW1wbDo6aQogICAgIC8vIChu
b3RlOiB0aGlzIGlzIGRpZmZlcmVudCBmcm9tICJpZiB0aGUgdGFibGUgaGFzIG5vIHNlY3Rpb25z
Iiwgc2luY2Ugd2UgY2FuIGhhdmUKICAgICAvLyA8VEFCTEU+PFRSPikKICAgICBpZighZmlyc3RC
b2R5ICYmICFoZWFkICYmICFmb290ICYmICFoYXNDaGlsZE5vZGVzKCkpCi0gICAgICAgIHNldFRC
b2R5KCBuZXcgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsKGRvY1B0cigpLCBJRF9UQk9EWSwg
dHJ1ZSAvKiBpbXBsaWNpdCAqLykgKTsKKyAgICAgICAgc2V0VEJvZHkoIG5ldyBIVE1MVGFibGVT
ZWN0aW9uRWxlbWVudEltcGwoSFRNTE5hbWVzOjp0Ym9keSgpLCBkb2NQdHIoKSwgdHJ1ZSAvKiBp
bXBsaWNpdCAqLykgKTsKIAogICAgIC8va2REZWJ1Zyg2MDMwKSA8PCBrX2Z1bmNpbmZvIDw8IGlu
ZGV4IDw8IGVuZGw7CiAgICAgLy8gSUUgdHJlYXRzIGluZGV4PS0xIGFzIGRlZmF1bHQgdmFsdWUg
bWVhbmluZyAnYXBwZW5kIGFmdGVyIGxhc3QnCkBAIC0yMzAsNyArMjI1LDggQEAgSFRNTEVsZW1l
bnRJbXBsICpIVE1MVGFibGVFbGVtZW50SW1wbDo6aQogICAgIHsKIAkvLyB0aGVyZSBjb3VsZCBi
ZSAyIHRmb290IGVsZW1lbnRzIGluIHRoZSB0YWJsZS4gT25seSB0aGUgZmlyc3Qgb25lIGlzIHRo
ZSAiZm9vdCIsIHRoYXQncyB3aHkgd2UgaGF2ZSB0aGUgbW9yZQogCS8vIGNvbXBsaWNhdGVkIGlm
IHN0YXRlbWVudCBiZWxvdy4KLSAgICAgICAgaWYgKCBub2RlICE9IGZvb3QgJiYgKG5vZGUtPmlk
KCkgPT0gSURfVEhFQUQgfHwgbm9kZS0+aWQoKSA9PSBJRF9URk9PVCB8fCBub2RlLT5pZCgpID09
IElEX1RCT0RZKSApCisgICAgICAgIGlmIChub2RlICE9IGZvb3QgJiYgKG5vZGUtPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjp0aGVhZCgpKSB8fCBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGZv
b3QoKSkgfHwgCisgICAgICAgICAgICBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGJvZHko
KSkpKQogICAgICAgICB7CiAgICAgICAgICAgICBzZWN0aW9uID0gc3RhdGljX2Nhc3Q8SFRNTFRh
YmxlU2VjdGlvbkVsZW1lbnRJbXBsICo+KG5vZGUpOwogICAgICAgICAgICAgbGFzdFNlY3Rpb24g
PSBzZWN0aW9uOwpAQCAtMjc2LDggKzI3Miw4IEBAIHZvaWQgSFRNTFRhYmxlRWxlbWVudEltcGw6
OmRlbGV0ZVJvdyggbG8KICAgICBib29sIGZvdW5kID0gZmFsc2U7CiAgICAgZm9yICggOyBub2Rl
IDsgbm9kZSA9IG5vZGUtPm5leHRTaWJsaW5nKCkgKQogICAgIHsKLSAgICAgICAgaWYgKCBub2Rl
ICE9IGZvb3QgJiYgKG5vZGUtPmlkKCkgPT0gSURfVEhFQUQgfHwgbm9kZS0+aWQoKSA9PSBJRF9U
Rk9PVCB8fCBub2RlLT5pZCgpID09IElEX1RCT0RZKSApCi0gICAgICAgIHsKKyAgICAgICAgaWYg
KG5vZGUgIT0gZm9vdCAmJiAobm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRoZWFkKCkpIHx8
IG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0Zm9vdCgpKSB8fCAKKyAgICAgICAgICAgIG5v
ZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0Ym9keSgpKSkpIHsKICAgICAgICAgICAgIHNlY3Rp
b24gPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGwgKj4obm9kZSk7CiAg
ICAgICAgICAgICBsYXN0U2VjdGlvbiA9IHNlY3Rpb247CiAgICAgICAgICAgICBpbnQgcm93cyA9
IHNlY3Rpb24tPm51bVJvd3MoKTsKQEAgLTMwOSw3ICszMDUsNyBAQCBOb2RlSW1wbCAqSFRNTFRh
YmxlRWxlbWVudEltcGw6OmFkZENoaWxkCiAgICAga2REZWJ1ZyggNjAzMCApIDw8IG5vZGVOYW1l
KCkuc3RyaW5nKCkgPDwgIihUYWJsZSk6OmFkZENoaWxkKCAiIDw8IGNoaWxkLT5ub2RlTmFtZSgp
LnN0cmluZygpIDw8ICIgKSIgPDwgZW5kbDsKICNlbmRpZgogCi0gICAgaWYgKGNoaWxkLT5pZCgp
ID09IElEX0ZPUk0pIHsKKyAgICBpZiAoY2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpmb3Jt
KCkpKSB7CiAgICAgICAgIC8vIEZpcnN0IGFkZCB0aGUgY2hpbGQuCiAgICAgICAgIEhUTUxFbGVt
ZW50SW1wbDo6YWRkQ2hpbGQoY2hpbGQpOwogICAgICAgICAvLyBOb3cgc2ltcGx5IHJldHVybiBv
dXJzZWx2ZXMgYXMgdGhlIG5ld25vZGUuICBUaGlzIGhhcyB0aGUgZWZmZWN0IG9mCkBAIC0zMzcs
MjggKzMzMywxNSBAQCBOb2RlSW1wbCAqSFRNTFRhYmxlRWxlbWVudEltcGw6OmFkZENoaWxkCiAK
ICAgICBpbnQgZXhjZXB0aW9uY29kZSA9IDA7CiAgICAgTm9kZUltcGwgKnJldHZhbCA9IGFwcGVu
ZENoaWxkKCBjaGlsZCwgZXhjZXB0aW9uY29kZSApOwotICAgIGlmICggcmV0dmFsICkgewotCXN3
aXRjaChjaGlsZC0+aWQoKSkgewotCWNhc2UgSURfQ0FQVElPTjoKLQkgICAgaWYgKCAhdENhcHRp
b24gKQotCQl0Q2FwdGlvbiA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZUNhcHRpb25FbGVtZW50SW1w
bCAqPihjaGlsZCk7Ci0JICAgIGJyZWFrOwotCWNhc2UgSURfQ09MOgotCWNhc2UgSURfQ09MR1JP
VVA6Ci0JICAgIGJyZWFrOwotCWNhc2UgSURfVEhFQUQ6Ci0JICAgIGlmICggIWhlYWQgKQotCQlo
ZWFkID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsICo+KGNoaWxkKTsK
LQkgICAgYnJlYWs7Ci0JY2FzZSBJRF9URk9PVDoKLQkgICAgaWYgKCAhZm9vdCApCi0JCWZvb3Qg
PSBzdGF0aWNfY2FzdDxIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGwgKj4oY2hpbGQpOwotCSAg
ICBicmVhazsKLQljYXNlIElEX1RCT0RZOgotCSAgICBpZiAoICFmaXJzdEJvZHkgKQotCQlmaXJz
dEJvZHkgPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGwgKj4oY2hpbGQp
OwotCSAgICBicmVhazsKLQl9CisgICAgaWYgKHJldHZhbCkgeworICAgICAgICBpZiAoIXRDYXB0
aW9uICYmIGNoaWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Y2FwdGlvbigpKSkKKyAgICAgICAg
ICAgIHRDYXB0aW9uID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnRJbXBsICo+
KGNoaWxkKTsKKyAgICAgICAgZWxzZSBpZiAoIWhlYWQgJiYgY2hpbGQtPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjp0aGVhZCgpKSkKKyAgICAgICAgICAgIGhlYWQgPSBzdGF0aWNfY2FzdDxIVE1MVGFi
bGVTZWN0aW9uRWxlbWVudEltcGwgKj4oY2hpbGQpOworICAgICAgICBlbHNlIGlmICghZm9vdCAm
JiBjaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRmb290KCkpKQorICAgICAgICAgICAgZm9v
dCA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbCAqPihjaGlsZCk7CisJ
ZWxzZSBpZiAoIWZpcnN0Qm9keSAmJiBjaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRib2R5
KCkpKQorCSAgICBmaXJzdEJvZHkgPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVTZWN0aW9uRWxlbWVu
dEltcGwgKj4oY2hpbGQpOwogICAgIH0KICAgICByZXR1cm4gcmV0dmFsOwogfQpAQCAtODAyLDI2
ICs3ODUsMTkgQEAgdm9pZCBIVE1MVGFibGVQYXJ0RWxlbWVudEltcGw6OnBhcnNlTWFwcAogCiAv
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCiAKLUhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbDo6SFRNTFRh
YmxlU2VjdGlvbkVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2hvcnQgdGFnaWQsIGJv
b2wgaW1wbGljaXQpCi0gICAgOiBIVE1MVGFibGVQYXJ0RWxlbWVudEltcGwoZG9jKQorSFRNTFRh
YmxlU2VjdGlvbkVsZW1lbnRJbXBsOjpIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGwoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnRQdHIgKmRvYywgYm9vbCBpbXBsaWNpdCkK
KyAgICA6IEhUTUxUYWJsZVBhcnRFbGVtZW50SW1wbCh0YWdOYW1lLCBkb2MpCiB7Ci0gICAgX2lk
ID0gdGFnaWQ7CiAgICAgbV9pbXBsaWNpdCA9IGltcGxpY2l0OwogfQogCi1Ob2RlSW1wbDo6SWQg
SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIF9p
ZDsKLX0KLQogTm9kZUltcGwgKkhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbDo6YWRkQ2hpbGQo
Tm9kZUltcGwgKmNoaWxkKQogewogI2lmZGVmIERFQlVHX0xBWU9VVAogICAgIGtkRGVidWcoIDYw
MzAgKSA8PCBub2RlTmFtZSgpLnN0cmluZygpIDw8ICIoVGJvZHkpOjphZGRDaGlsZCggIiA8PCBj
aGlsZC0+bm9kZU5hbWUoKS5zdHJpbmcoKSA8PCAiICkiIDw8IGVuZGw7CiAjZW5kaWYKIAotICAg
IGlmIChjaGlsZC0+aWQoKSA9PSBJRF9GT1JNKSB7CisgICAgaWYgKGNoaWxkLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6Zm9ybSgpKSkgewogICAgICAgICAvLyBGaXJzdCBhZGQgdGhlIGNoaWxkLgog
ICAgICAgICBIVE1MRWxlbWVudEltcGw6OmFkZENoaWxkKGNoaWxkKTsKICAgICAgICAgLy8gTm93
IHNpbXBseSByZXR1cm4gb3Vyc2VsdmVzIGFzIHRoZSBuZXdub2RlLiAgVGhpcyBoYXMgdGhlIGVm
ZmVjdCBvZgpAQCAtODc3LDcgKzg1Myw3IEBAIGludCBIVE1MVGFibGVTZWN0aW9uRWxlbWVudElt
cGw6Om51bVJvd3MKICAgICBpbnQgcm93cyA9IDA7CiAgICAgY29uc3QgTm9kZUltcGwgKm4gPSBm
aXJzdENoaWxkKCk7CiAgICAgd2hpbGUgKG4pIHsKLSAgICAgICAgaWYgKG4tPmlkKCkgPT0gSURf
VFIpCisgICAgICAgIGlmIChuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dHIoKSkpCiAgICAgICAg
ICAgICByb3dzKys7CiAgICAgICAgIG4gPSBuLT5uZXh0U2libGluZygpOwogICAgIH0KQEAgLTkz
MiwxOCArOTA4LDEzIEBAIFNoYXJlZFB0cjxIVE1MQ29sbGVjdGlvbkltcGw+IEhUTUxUYWJsZVMK
IAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Ob2RlSW1wbDo6SWQgSFRNTFRhYmxlUm93RWxlbWVu
dEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfVFI7Ci19Ci0KIE5vZGVJbXBsICpI
VE1MVGFibGVSb3dFbGVtZW50SW1wbDo6YWRkQ2hpbGQoTm9kZUltcGwgKmNoaWxkKQogewogI2lm
ZGVmIERFQlVHX0xBWU9VVAogICAgIGtkRGVidWcoIDYwMzAgKSA8PCBub2RlTmFtZSgpLnN0cmlu
ZygpIDw8ICIoVHJvdyk6OmFkZENoaWxkKCAiIDw8IGNoaWxkLT5ub2RlTmFtZSgpLnN0cmluZygp
IDw8ICIgKSIgPDwgZW5kbDsKICNlbmRpZgogCi0gICAgaWYgKGNoaWxkLT5pZCgpID09IElEX0ZP
Uk0pIHsKKyAgICBpZiAoY2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpmb3JtKCkpKSB7CiAg
ICAgICAgIC8vIEZpcnN0IGFkZCB0aGUgY2hpbGQuCiAgICAgICAgIEhUTUxFbGVtZW50SW1wbDo6
YWRkQ2hpbGQoY2hpbGQpOwogICAgICAgICAvLyBOb3cgc2ltcGx5IHJldHVybiBvdXJzZWx2ZXMg
YXMgdGhlIG5ld25vZGUuICBUaGlzIGhhcyB0aGUgZWZmZWN0IG9mCkBAIC05NTgsMTYgKzkyOSwx
NiBAQCBsb25nIEhUTUxUYWJsZVJvd0VsZW1lbnRJbXBsOjpyb3dJbmRleCgpCiAgICAgaW50IHJJ
bmRleCA9IDA7CiAKICAgICBOb2RlSW1wbCAqdGFibGUgPSBwYXJlbnROb2RlKCk7Ci0gICAgaWYg
KCAhdGFibGUgKQorICAgIGlmICghdGFibGUpCiAJcmV0dXJuIC0xOwogICAgIHRhYmxlID0gdGFi
bGUtPnBhcmVudE5vZGUoKTsKLSAgICBpZiAoICF0YWJsZSB8fCB0YWJsZS0+aWQoKSAhPSBJRF9U
QUJMRSApCisgICAgaWYgKCF0YWJsZSB8fCAhdGFibGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0
YWJsZSgpKSkKIAlyZXR1cm4gLTE7CiAKICAgICBIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGwg
KmZvb3QgPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVFbGVtZW50SW1wbCAqPih0YWJsZSktPnRGb290
KCk7CiAgICAgTm9kZUltcGwgKm5vZGUgPSB0YWJsZS0+Zmlyc3RDaGlsZCgpOwotICAgIHdoaWxl
ICggbm9kZSApIHsKLSAgICAgICAgaWYgKCBub2RlICE9IGZvb3QgJiYgKG5vZGUtPmlkKCkgPT0g
SURfVEhFQUQgfHwgbm9kZS0+aWQoKSA9PSBJRF9URk9PVCB8fCBub2RlLT5pZCgpID09IElEX1RC
T0RZKSApIHsKKyAgICB3aGlsZSAobm9kZSkgeworICAgICAgICBpZiAobm9kZSAhPSBmb290ICYm
IChub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGhlYWQoKSkgfHwgbm9kZS0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OnRmb290KCkpIHx8IG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0Ym9k
eSgpKSkpIHsKIAkgICAgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsKiBzZWN0aW9uID0gc3Rh
dGljX2Nhc3Q8SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsICo+KG5vZGUpOwogCSAgICBjb25z
dCBOb2RlSW1wbCAqcm93ID0gc2VjdGlvbi0+Zmlyc3RDaGlsZCgpOwogCSAgICB3aGlsZSAoIHJv
dyApIHsKQEAgLTk5Niw3ICs5NjcsNyBAQCBsb25nIEhUTUxUYWJsZVJvd0VsZW1lbnRJbXBsOjpz
ZWN0aW9uUm93CiAgICAgY29uc3QgTm9kZUltcGwgKm4gPSB0aGlzOwogICAgIGRvIHsKICAgICAg
ICAgbiA9IG4tPnByZXZpb3VzU2libGluZygpOwotICAgICAgICBpZiAobiAmJiBuLT5pc0VsZW1l
bnROb2RlKCkgJiYgbi0+aWQoKSA9PSBJRF9UUikKKyAgICAgICAgaWYgKG4gJiYgbi0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OnRyKCkpKQogICAgICAgICAgICAgckluZGV4Kys7CiAgICAgfQogICAg
IHdoaWxlIChuKTsKQEAgLTEwMTMsNyArOTg0LDcgQEAgSFRNTEVsZW1lbnRJbXBsICpIVE1MVGFi
bGVSb3dFbGVtZW50SW1wbAogICAgICAgICBleGNlcHRpb25jb2RlID0gRE9NRXhjZXB0aW9uOjpJ
TkRFWF9TSVpFX0VSUjsgLy8gcGVyIHRoZSBET00KICAgICBlbHNlCiAgICAgewotICAgICAgICBj
ID0gbmV3IEhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbChkb2NQdHIoKSwgSURfVEQpOworICAgICAg
ICBjID0gbmV3IEhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbChIVE1MTmFtZXM6OnRkKCksIGRvY1B0
cigpKTsKICAgICAgICAgaWYobnVtQ2VsbHMgPT0gaW5kZXggfHwgaW5kZXggPT0gLTEpCiAgICAg
ICAgICAgICBhcHBlbmRDaGlsZChjLCBleGNlcHRpb25jb2RlKTsKICAgICAgICAgZWxzZSB7CkBA
IC0xMTAzLDE1ICsxMDc0LDE0IEBAIHZvaWQgSFRNTFRhYmxlUm93RWxlbWVudEltcGw6OnNldFZB
bGlnbigKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1IVE1MVGFibGVDZWxsRWxlbWVudEltcGw6
OkhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCBpbnQgdGFnKQotICA6
IEhUTUxUYWJsZVBhcnRFbGVtZW50SW1wbChkb2MpCitIVE1MVGFibGVDZWxsRWxlbWVudEltcGw6
OkhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBE
b2N1bWVudFB0ciAqZG9jKQorICA6IEhUTUxUYWJsZVBhcnRFbGVtZW50SW1wbCh0YWdOYW1lLCBk
b2MpCiB7Ci0gIF9jb2wgPSAtMTsKLSAgX3JvdyA9IC0xOwotICBjU3BhbiA9IHJTcGFuID0gMTsK
LSAgX2lkID0gdGFnOwotICByb3dIZWlnaHQgPSAwOwotICBtX3NvbGlkID0gZmFsc2U7CisgICAg
X2NvbCA9IC0xOworICAgIF9yb3cgPSAtMTsKKyAgICBjU3BhbiA9IHJTcGFuID0gMTsKKyAgICBy
b3dIZWlnaHQgPSAwOworICAgIG1fc29saWQgPSBmYWxzZTsKIH0KIAogSFRNTFRhYmxlQ2VsbEVs
ZW1lbnRJbXBsOjp+SFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsKCkKQEAgLTExNzksOSArMTE0OSw5
IEBAIHZvaWQgSFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsOjpwYXJzZU1hcHAKIC8vIHVzZWQgYnkg
dGFibGUgY2VsbHMgdG8gc2hhcmUgc3R5bGUgZGVjbHMgY3JlYXRlZCBieSB0aGUgZW5jbG9zaW5n
IHRhYmxlLgogQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25JbXBsKiBIVE1MVGFibGVDZWxsRWxl
bWVudEltcGw6OmFkZGl0aW9uYWxBdHRyaWJ1dGVTdHlsZURlY2woKQogewotICAgIEhUTUxFbGVt
ZW50SW1wbCogcCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCo+KHBhcmVudE5vZGUoKSk7
Ci0gICAgd2hpbGUocCAmJiBwLT5pZCgpICE9IElEX1RBQkxFKQotICAgICAgICBwID0gc3RhdGlj
X2Nhc3Q8SFRNTEVsZW1lbnRJbXBsKj4ocC0+cGFyZW50Tm9kZSgpKTsKKyAgICBOb2RlSW1wbCog
cCA9IHBhcmVudE5vZGUoKTsKKyAgICB3aGlsZSAocCAmJiAhcC0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OnRhYmxlKCkpKQorICAgICAgICBwID0gcC0+cGFyZW50Tm9kZSgpOwogCiAgICAgaWYgKHAp
IHsKICAgICAgICAgSFRNTFRhYmxlRWxlbWVudEltcGwqIHRhYmxlID0gc3RhdGljX2Nhc3Q8SFRN
TFRhYmxlRWxlbWVudEltcGwqPihwKTsKQEAgLTExOTEsMTUgKzExNjEsNiBAQCBDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbkltcGwqIEhUTUxUYWJsCiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQg
SFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsOjphdHRhY2goKQotewotICAgIEhUTUxFbGVtZW50SW1w
bCogcCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCo+KHBhcmVudE5vZGUoKSk7Ci0gICAg
d2hpbGUocCAmJiBwLT5pZCgpICE9IElEX1RBQkxFKQotICAgICAgICBwID0gc3RhdGljX2Nhc3Q8
SFRNTEVsZW1lbnRJbXBsKj4ocC0+cGFyZW50Tm9kZSgpKTsKLQotICAgIEhUTUxUYWJsZVBhcnRF
bGVtZW50SW1wbDo6YXR0YWNoKCk7Ci19Ci0KIGJvb2wgSFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBs
Ojppc1VSTEF0dHJpYnV0ZShBdHRyaWJ1dGVJbXBsICphdHRyKSBjb25zdAogewogICAgIHJldHVy
biBhdHRyLT5pZCgpID09IEFUVFJfQkFDS0dST1VORDsKQEAgLTEzMzcsMTggKzEyOTgsMTIgQEAg
dm9pZCBIVE1MVGFibGVDZWxsRWxlbWVudEltcGw6OnNldFdpZHRoKAogCiAvLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCiAKLUhUTUxUYWJsZUNvbEVsZW1lbnRJbXBsOjpIVE1MVGFibGVDb2xFbGVtZW50SW1w
bChEb2N1bWVudFB0ciAqZG9jLCB1c2hvcnQgaSkKLSAgICA6IEhUTUxUYWJsZVBhcnRFbGVtZW50
SW1wbChkb2MpCitIVE1MVGFibGVDb2xFbGVtZW50SW1wbDo6SFRNTFRhYmxlQ29sRWxlbWVudElt
cGwoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnRQdHIgKmRvYykKKyAgICA6
IEhUTUxUYWJsZVBhcnRFbGVtZW50SW1wbCh0YWdOYW1lLCBkb2MpCiB7Ci0gICAgX2lkID0gaTsK
LSAgICBfc3BhbiA9IChfaWQgPT0gSURfQ09MR1JPVVAgPyAwIDogMSk7CisgICAgX3NwYW4gPSAo
dGFnTmFtZS5tYXRjaGVzKEhUTUxOYW1lczo6Y29sZ3JvdXAoKSkgPyAwIDogMSk7CiB9CiAKLU5v
ZGVJbXBsOjpJZCBIVE1MVGFibGVDb2xFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJl
dHVybiBfaWQ7Ci19Ci0KIGJvb2wgSFRNTFRhYmxlQ29sRWxlbWVudEltcGw6Om1hcFRvRW50cnko
Tm9kZUltcGw6OklkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0CiB7
CiAgICAgc3dpdGNoKGF0dHIpIHsKQEAgLTE0MzYsMTEgKzEzOTEsNiBAQCB2b2lkIEhUTUxUYWJs
ZUNvbEVsZW1lbnRJbXBsOjpzZXRXaWR0aChjCiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQot
Tm9kZUltcGw6OklkIEhUTUxUYWJsZUNhcHRpb25FbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewot
ICAgIHJldHVybiBJRF9DQVBUSU9OOwotfQogCiBib29sIEhUTUxUYWJsZUNhcHRpb25FbGVtZW50
SW1wbDo6bWFwVG9FbnRyeShOb2RlSW1wbDo6SWQgYXR0ciwgTWFwcGVkQXR0cmlidXRlRW50cnkm
IHJlc3VsdCkgY29uc3QKIHsKSW5kZXg6IFdlYkNvcmUva2h0bWwvaHRtbC9odG1sX3RhYmxlaW1w
bC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9sb2NhbC9ob21lL2N2cy9MYWJ5cmludGgvV2ViQ29y
ZS9raHRtbC9odG1sL2h0bWxfdGFibGVpbXBsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjAK
ZGlmZiAtdSAtcCAtcjEuMjAgV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfdGFibGVpbXBsLmgKLS0t
IFdlYkNvcmUva2h0bWwvaHRtbC9odG1sX3RhYmxlaW1wbC5oCTIwMDUvMDUvMTEgMDU6NDk6MzQJ
MS4yMAorKysgV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfdGFibGVpbXBsLmgJMjAwNS8wNi8wMiAw
NDoxMjoxMQpAQCAtNjIsOCArNjIsNiBAQCBwdWJsaWM6CiAgICAgSFRNTFRhYmxlRWxlbWVudElt
cGwoRG9jdW1lbnRQdHIgKmRvYyk7CiAgICAgfkhUTUxUYWJsZUVsZW1lbnRJbXBsKCk7CiAKLSAg
ICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7Ci0KICAgICBIVE1MVGFibGVDYXB0aW9uRWxlbWVudElt
cGwgKmNhcHRpb24oKSBjb25zdCB7IHJldHVybiB0Q2FwdGlvbjsgfQogICAgIE5vZGVJbXBsICpz
ZXRDYXB0aW9uKCBIVE1MVGFibGVDYXB0aW9uRWxlbWVudEltcGwgKiApOwogCkBAIC0xNDcsOCAr
MTQ1LDggQEAgY2xhc3MgSFRNTFRhYmxlUGFydEVsZW1lbnRJbXBsIDogcHVibGljIAogCiB7CiBw
dWJsaWM6Ci0gICAgSFRNTFRhYmxlUGFydEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0g
ICAgICAgIDogSFRNTEVsZW1lbnRJbXBsKGRvYykKKyAgICBIVE1MVGFibGVQYXJ0RWxlbWVudElt
cGwoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnRQdHIgKmRvYykKKyAgICAg
ICAgOiBIVE1MRWxlbWVudEltcGwodGFnTmFtZSwgZG9jKQogICAgICAgICB7IH0KIAogICAgIHZp
cnR1YWwgYm9vbCBtYXBUb0VudHJ5KE5vZGVJbXBsOjpJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVF
bnRyeSYgcmVzdWx0KSBjb25zdDsKQEAgLTE2MCw5ICsxNTgsNyBAQCBwdWJsaWM6CiBjbGFzcyBI
VE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTFRhYmxlUGFydEVsZW1lbnRJ
bXBsCiB7CiBwdWJsaWM6Ci0gICAgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsKERvY3VtZW50
UHRyICpkb2MsIHVzaG9ydCB0YWdpZCwgYm9vbCBpbXBsaWNpdCk7Ci0KLSAgICB2aXJ0dWFsIElk
IGlkKCkgY29uc3Q7CisgICAgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsKGNvbnN0IFF1YWxp
ZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50UHRyICpkb2MsIGJvb2wgaW1wbGljaXQpOwogCiAg
ICAgdmlydHVhbCBOb2RlSW1wbCAqYWRkQ2hpbGQoTm9kZUltcGwgKmNoaWxkKTsKICAgICAKQEAg
LTE4NCw5ICsxODAsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRWQWxpZ24oIGNvbnN0IERPTVN0
cmluZyAmICk7CiAKICAgICBraHRtbDo6U2hhcmVkUHRyPEhUTUxDb2xsZWN0aW9uSW1wbD4gcm93
cygpOwotCi1wcm90ZWN0ZWQ6Ci0gICAgdXNob3J0IF9pZDsKIH07CiAKIC8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KQEAgLTE5NSw5ICsxODgsNyBAQCBjbGFzcyBIVE1MVGFibGVSb3dFbGVtZW50SW1wbCA6
IHB1YmxpYyBICiB7CiBwdWJsaWM6CiAgICAgSFRNTFRhYmxlUm93RWxlbWVudEltcGwoRG9jdW1l
bnRQdHIgKmRvYykKLSAgICAgICAgOiBIVE1MVGFibGVQYXJ0RWxlbWVudEltcGwoZG9jKSB7fQot
Ci0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OworICAgICAgICA6IEhUTUxUYWJsZVBhcnRFbGVt
ZW50SW1wbChIVE1MTmFtZXM6OnRyKCksIGRvYykge30KIAogICAgIHZpcnR1YWwgTm9kZUltcGwg
KmFkZENoaWxkKE5vZGVJbXBsICpjaGlsZCk7CiAgICAgCkBAIC0yMzgsNyArMjI5LDcgQEAgcHJv
dGVjdGVkOgogY2xhc3MgSFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsIDogcHVibGljIEhUTUxUYWJs
ZVBhcnRFbGVtZW50SW1wbAogewogcHVibGljOgotICAgIEhUTUxUYWJsZUNlbGxFbGVtZW50SW1w
bChEb2N1bWVudFB0ciAqZG9jLCBpbnQgdGFnSWQpOworICAgIEhUTUxUYWJsZUNlbGxFbGVtZW50
SW1wbChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudFB0ciAqZG9jKTsKICAg
ICB+SFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsKCk7CiAKICAgICAvLyAjIyMgRklYIHRoZXNlIHR3
by4uLgpAQCAtMjUxLDE0ICsyNDIsMTAgQEAgcHVibGljOgogCiAgICAgaW50IGNvbFNwYW4oKSBj
b25zdCB7IHJldHVybiBjU3BhbjsgfQogICAgIGludCByb3dTcGFuKCkgY29uc3QgeyByZXR1cm4g
clNwYW47IH0KLSAgICAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3QgeyByZXR1cm4gX2lkOyB9
Ci0gICAgCisKICAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShOb2RlSW1wbDo6SWQgYXR0ciwg
TWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHBh
cnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIpOwogCi0gICAgdmly
dHVhbCB2b2lkIGF0dGFjaCgpOwotCiAgICAgLy8gdXNlZCBieSB0YWJsZSBjZWxscyB0byBzaGFy
ZSBzdHlsZSBkZWNscyBjcmVhdGVkIGJ5IHRoZSBlbmNsb3NpbmcgdGFibGUuCiAgICAgdmlydHVh
bCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbkltcGwqIGFkZGl0aW9uYWxBdHRyaWJ1dGVTdHls
ZURlY2woKTsKICAgICAKQEAgLTMxMSw3ICsyOTgsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgaW50IF9j
b2w7CiAgICAgaW50IHJTcGFuOwogICAgIGludCBjU3BhbjsKLSAgICBpbnQgX2lkOwogICAgIGlu
dCByb3dIZWlnaHQ7CiAgICAgYm9vbCBtX3NvbGlkICAgICAgICA6IDE7CiB9OwpAQCAtMzIxLDkg
KzMwNyw3IEBAIHByb3RlY3RlZDoKIGNsYXNzIEhUTUxUYWJsZUNvbEVsZW1lbnRJbXBsIDogcHVi
bGljIEhUTUxUYWJsZVBhcnRFbGVtZW50SW1wbAogewogcHVibGljOgotICAgIEhUTUxUYWJsZUNv
bEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIHVzaG9ydCBpKTsKLQotICAgIHZpcnR1YWwg
SWQgaWQoKSBjb25zdDsKKyAgICBIVE1MVGFibGVDb2xFbGVtZW50SW1wbChjb25zdCBRdWFsaWZp
ZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudFB0ciAqZG9jKTsKIAogICAgIHZvaWQgc2V0VGFibGUo
SFRNTFRhYmxlRWxlbWVudEltcGwgKnQpIHsgdGFibGUgPSB0OyB9CiAKQEAgLTM1MSwxMCArMzM1
LDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0V2lkdGgoIGNvbnN0IERPTVN0cmluZyAmICk7CiAK
IHByb3RlY3RlZDoKLSAgICAvLyBjb3VsZCBiZSBJRF9DT0wgb3IgSURfQ09MR1JPVVAgLi4uIFRo
ZSBET00gaXMgbm90IHF1aXRlIGNsZWFyIG9uCi0gICAgLy8gdGhpcywgYnV0IHNpbmNlIGJvdGgg
ZWxlbWVudHMgd29yayBxdWl0ZSBzaW1pbGFyLCB3ZSB1c2Ugb25lCi0gICAgLy8gRE9NRWxlbWVu
dCBmb3IgdGhlbS4uLgotICAgIHVzaG9ydCBfaWQ7CiAgICAgaW50IF9zcGFuOwogICAgIEhUTUxU
YWJsZUVsZW1lbnRJbXBsICp0YWJsZTsKIH07CkBAIC0zNjUsOSArMzQ1LDcgQEAgY2xhc3MgSFRN
TFRhYmxlQ2FwdGlvbkVsZW1lbnRJbXBsIDogcHVibAogewogcHVibGljOgogICAgIEhUTUxUYWJs
ZUNhcHRpb25FbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAgICAgICA6IEhUTUxUYWJs
ZVBhcnRFbGVtZW50SW1wbChkb2MpIHt9Ci0KLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7Cisg
ICAgICAgIDogSFRNTFRhYmxlUGFydEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6Y2FwdGlvbigpLCBk
b2MpIHt9CiAgICAgCiAgICAgdmlydHVhbCBib29sIG1hcFRvRW50cnkoTm9kZUltcGw6OklkIGF0
dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9p
ZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICphdHRyKTsKSW5kZXg6
IFdlYkNvcmUva2h0bWwvaHRtbC9odG1sbmFtZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IGh0
bWxuYW1lcy5jcHAKZGlmZiAtTiBodG1sbmFtZXMuY3BwCi0tLSAvZGV2L251bGwJVGh1IEFwciAx
MSAwNzoyNToxNSAyMDAyCisrKyBodG1sbmFtZXMuY3BwCVdlZCBKdW4gIDEgMjE6MTI6MTEgMjAw
NQpAQCAtMCwwICsxLDQ4IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEhUTUwg
RE9NIGltcGxlbWVudGF0aW9uIGZvciBLREUuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1IEFw
cGxlIENvbXB1dGVyLCBJbmMuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3
LCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJodG1sbmFtZXMuaCIKKworbmFtZXNwYWNlIERP
TSB7CisKK2NvbnN0IEF0b21pY1N0cmluZyYgSFRNTE5hbWVzOjp4aHRtbE5hbWVzcGFjZVVSSSgp
Cit7CisgICAgc3RhdGljIEF0b21pY1N0cmluZyB4aHRtbE5TKCJodHRwOi8vd3d3LnczLm9yZy8x
OTk5L3hodG1sIik7CisgICAgcmV0dXJuIHhodG1sTlM7Cit9CisKKworLy8gVGFnIG5hbWVzLgor
Citjb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OmNhcHRpb24oKQoreworICAgIHN0YXRp
YyBRdWFsaWZpZWROYW1lIGNhcHRpb24obnVsbEF0b20sICJjYXB0aW9uIiwgeGh0bWxOYW1lc3Bh
Y2VVUkkoKSk7CisgICAgcmV0dXJuIGNhcHRpb247Cit9CisKK2NvbnN0IFF1YWxpZmllZE5hbWUm
IEhUTUxOYW1lczo6dHIoKQoreworICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIHRyKG51bGxBdG9t
LCAidHIiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKKyAgICByZXR1cm4gdHI7Cit9CisKK30KXCBO
byBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBXZWJDb3JlL2todG1sL2h0bWwvaHRtbG5h
bWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogaHRtbG5hbWVzLmgKZGlmZiAtTiBodG1sbmFtZXMu
aAotLS0gL2Rldi9udWxsCVRodSBBcHIgMTEgMDc6MjU6MTUgMjAwMgorKysgaHRtbG5hbWVzLmgJ
V2VkIEp1biAgMSAyMToxMjoxMiAyMDA1CkBAIC0wLDAgKzEsMTMzIEBACisvKgorICogVGhpcyBm
aWxlIGlzIHBhcnQgb2YgdGhlIEhUTUwgRE9NIGltcGxlbWVudGF0aW9uIGZvciBLREUuCisgKgor
ICogQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAor
ICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICovCisjaWZuZGVmIEhUTUxOQU1F
U19ICisjZGVmaW5lIEhUTUxOQU1FU19ICisKKyNpbmNsdWRlICJ4bWwvZG9tX2VsZW1lbnRpbXBs
LmgiCisKK25hbWVzcGFjZSBET00KK3sKKworY2xhc3MgSFRNTE5hbWVzCit7CitwdWJsaWM6Cisg
ICAgLy8gVGhlIG5hbWVzcGFjZSBVUkkuCisgICAgc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyYg
eGh0bWxOYW1lc3BhY2VVUkkoKTsKKyAgICAKKyAgICAvLyBGdWxsIHRhZyBuYW1lcy4KKyAgICBz
dGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgYSgpOworICAgIHN0YXRpYyBjb25zdCBRdWFsaWZp
ZWROYW1lJiBhZGRyZXNzKCk7CisgICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGFwcGxl
dCgpOworICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBhcmVhKCk7CisgICAgc3RhdGlj
IGNvbnN0IFF1YWxpZmllZE5hbWUmIGIoKTsKKyAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFt
ZSYgYmFzZSgpOworICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBiYXNlZm9udCgpOwor
ICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBiaWcoKTsKKyAgICBzdGF0aWMgY29uc3Qg
UXVhbGlmaWVkTmFtZSYgYmxvY2txdW90ZSgpOworICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWRO
YW1lJiBib2R5KCk7CisgICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGJyKCk7CisgICAg
c3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGJ1dHRvbigpOworICAgIHN0YXRpYyBjb25zdCBR
dWFsaWZpZWROYW1lJiBjYW52YXMoKTsKKyAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYg
Y2FwdGlvbigpOworICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBjZW50ZXIoKTsKKyAg
ICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgY29kZSgpOworICAgIHN0YXRpYyBjb25zdCBR
dWFsaWZpZWROYW1lJiBjb2woKTsKKyAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgY29s
Z3JvdXAoKTsKKyAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgZGQoKTsKKyAgICBzdGF0
aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgZGVsKCk7CisgICAgc3RhdGljIGNvbnN0IFF1YWxpZmll
ZE5hbWUmIGRmbigpOworICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBkaXIoKTsKKyAg
ICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgZGl2KCk7CisgICAgc3RhdGljIGNvbnN0IFF1
YWxpZmllZE5hbWUmIGRsKCk7CisgICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGR0KCk7
CisgICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGVtKCk7CisgICAgc3RhdGljIGNvbnN0
IFF1YWxpZmllZE5hbWUmIGVtYmVkKCk7CisgICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUm
IGZpZWxkc2V0KCk7CisgICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGZvbnQoKTsKKyAg
ICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgZm9ybSgpOworICAgIHN0YXRpYyBjb25zdCBR
dWFsaWZpZWROYW1lJiBmcmFtZSgpOworICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBm
cmFtZXNldCgpOworICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBoZWFkKCk7CisgICAg
c3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGgxKCk7CisgICAgc3RhdGljIGNvbnN0IFF1YWxp
ZmllZE5hbWUmIGgyKCk7CisgICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGgzKCk7Cisg
ICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGg0KCk7CisgICAgc3RhdGljIGNvbnN0IFF1
YWxpZmllZE5hbWUmIGg1KCk7CisgICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGg2KCk7
CisgICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGhyKCk7CisgICAgc3RhdGljIGNvbnN0
IFF1YWxpZmllZE5hbWUmIGh0bWwoKTsKKyAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYg
aSgpOworICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBpZnJhbWUoKTsKKyAgICBzdGF0
aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgaW1nKCk7CisgICAgc3RhdGljIGNvbnN0IFF1YWxpZmll
ZE5hbWUmIGlucHV0KCk7CisgICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGlucygpOwor
ICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBpc2luZGV4KCk7CisgICAgc3RhdGljIGNv
bnN0IFF1YWxpZmllZE5hbWUmIGtiZCgpOworICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1l
JiBrZXlnZW4oKTsKKyAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgbGFiZWwoKTsKKyAg
ICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgbGVnZW5kKCk7CisgICAgc3RhdGljIGNvbnN0
IFF1YWxpZmllZE5hbWUmIGxpKCk7CisgICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGxp
bmsoKTsKKyAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgbWFwKCk7CisgICAgc3RhdGlj
IGNvbnN0IFF1YWxpZmllZE5hbWUmIG1hcnF1ZWUoKTsKKyAgICBzdGF0aWMgY29uc3QgUXVhbGlm
aWVkTmFtZSYgbWVudSgpOworICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBtZXRhKCk7
CisgICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIG5vZW1iZWQoKTsKKyAgICBzdGF0aWMg
Y29uc3QgUXVhbGlmaWVkTmFtZSYgbm9mcmFtZXMoKTsKKyAgICBzdGF0aWMgY29uc3QgUXVhbGlm
aWVkTmFtZSYgbm9zY3JpcHQoKTsKKyAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgb2Jq
ZWN0KCk7CisgICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIG9sKCk7CisgICAgc3RhdGlj
IGNvbnN0IFF1YWxpZmllZE5hbWUmIG9wdGdyb3VwKCk7CisgICAgc3RhdGljIGNvbnN0IFF1YWxp
ZmllZE5hbWUmIG9wdGlvbigpOworICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBwKCk7
CisgICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIHBhcmFtKCk7CisgICAgc3RhdGljIGNv
bnN0IFF1YWxpZmllZE5hbWUmIHByZSgpOworICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1l
JiBxKCk7CisgICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIHMoKTsKKyAgICBzdGF0aWMg
Y29uc3QgUXVhbGlmaWVkTmFtZSYgc2FtcCgpOworICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWRO
YW1lJiBzY3JpcHQoKTsKKyAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgc2VsZWN0KCk7
CisgICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIHNtYWxsKCk7CisgICAgc3RhdGljIGNv
bnN0IFF1YWxpZmllZE5hbWUmIHN0cmlrZSgpOworICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWRO
YW1lJiBzdHJvbmcoKTsKKyAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgc3R5bGUoKTsK
KyAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFibGUoKTsKKyAgICBzdGF0aWMgY29u
c3QgUXVhbGlmaWVkTmFtZSYgdGJvZHkoKTsKKyAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFt
ZSYgdGQoKTsKKyAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgdGV4dGFyZWEoKTsKKyAg
ICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgdGZvb3QoKTsKKyAgICBzdGF0aWMgY29uc3Qg
UXVhbGlmaWVkTmFtZSYgdGgoKTsKKyAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgdGhl
YWQoKTsKKyAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgdGl0bGUoKTsKKyAgICBzdGF0
aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgdHIoKTsKKyAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVk
TmFtZSYgdHQoKTsKKyAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgdSgpOworICAgIHN0
YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiB1bCgpOworICAgIHN0YXRpYyBjb25zdCBRdWFsaWZp
ZWROYW1lJiB2YXIoKTsKKyAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgeG1wKCk7CisK
KyAgICAvLyBBdHRyaWJ1dGUgbmFtZXMuCit9OworCit9CisKKyNlbmRpZgpJbmRleDogV2ViQ29y
ZS9raHRtbC9odG1sL2h0bWxwYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9sb2NhbC9o
b21lL2N2cy9MYWJ5cmludGgvV2ViQ29yZS9raHRtbC9odG1sL2h0bWxwYXJzZXIuY3BwLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjk2CmRpZmYgLXUgLXAgLXIxLjk2IFdlYkNvcmUva2h0bWwvaHRt
bC9odG1scGFyc2VyLmNwcAotLS0gV2ViQ29yZS9raHRtbC9odG1sL2h0bWxwYXJzZXIuY3BwCTIw
MDUvMDUvMTEgMDA6NTg6MjgJMS45NgorKysgV2ViQ29yZS9raHRtbC9odG1sL2h0bWxwYXJzZXIu
Y3BwCTIwMDUvMDYvMDIgMDQ6MTI6MTMKQEAgLTY5LDI0ICs2OSwyNCBAQCB1c2luZyBuYW1lc3Bh
Y2Uga2h0bWw7CiBjbGFzcyBIVE1MU3RhY2tFbGVtCiB7CiBwdWJsaWM6Ci0gICAgSFRNTFN0YWNr
RWxlbSggaW50IF9pZCwKLSAgICAgICAgICAgICAgICAgICBpbnQgX2xldmVsLAotICAgICAgICAg
ICAgICAgICAgIERPTTo6Tm9kZUltcGwgKl9ub2RlLAotICAgICAgICAgICAgICAgICAgIEhUTUxT
dGFja0VsZW0gKiBfbmV4dAorICAgIEhUTUxTdGFja0VsZW0oY29uc3QgQXRvbWljU3RyaW5nJiBf
dGFnTmFtZSwKKyAgICAgICAgICAgICAgICAgIGludCBfbGV2ZWwsCisgICAgICAgICAgICAgICAg
ICBET006Ok5vZGVJbXBsICpfbm9kZSwKKyAgICAgICAgICAgICAgICAgIEhUTUxTdGFja0VsZW0g
KiBfbmV4dAogICAgICAgICApCiAgICAgICAgIDoKLSAgICAgICAgaWQoX2lkKSwKKyAgICAgICAg
dGFnTmFtZShfdGFnTmFtZSksCiAgICAgICAgIGxldmVsKF9sZXZlbCksCiAgICAgICAgIHN0cmF5
VGFibGVDb250ZW50KGZhbHNlKSwKICAgICAgICAgbm9kZShfbm9kZSksCiAgICAgICAgIG5leHQo
X25leHQpCiAgICAgICAgIHsgfQogCi0gICAgaW50ICAgICAgIGlkOwotICAgIGludCAgICAgICBs
ZXZlbDsKLSAgICBib29sICAgICAgc3RyYXlUYWJsZUNvbnRlbnQ7Ci0gICAgTm9kZUltcGwgKm5v
ZGU7Ci0gICAgSFRNTFN0YWNrRWxlbSAqbmV4dDsKKyAgICBBdG9taWNTdHJpbmcgdGFnTmFtZTsK
KyAgICBpbnQgbGV2ZWw7CisgICAgYm9vbCBzdHJheVRhYmxlQ29udGVudDsKKyAgICBOb2RlSW1w
bCogbm9kZTsKKyAgICBIVE1MU3RhY2tFbGVtKiBuZXh0OwogfTsKIAogLyoqCkBAIC0xNjUsOSAr
MTY1LDYgQEAgdm9pZCBLSFRNTFBhcnNlcjo6cmVzZXQoKQogCiAgICAgZnJlZUJsb2NrKCk7CiAK
LSAgICAvLyBiZWZvcmUgcGFyc2luZywgbm8gdGFncyBhcmUgZm9yYmlkZGVuCi0gICAgbWVtc2V0
KGZvcmJpZGRlblRhZywgMCwgc2l6ZW9mKGZvcmJpZGRlblRhZykpOwotCiAgICAgaW5Cb2R5ID0g
ZmFsc2U7CiAgICAgaGF2ZUZyYW1lU2V0ID0gZmFsc2U7CiAgICAgaGF2ZUNvbnRlbnQgPSBmYWxz
ZTsKQEAgLTE4MCw3ICsxNzcsNyBAQCB2b2lkIEtIVE1MUGFyc2VyOjpyZXNldCgpCiAgICAgZW5k
ID0gZmFsc2U7CiAgICAgaXNpbmRleCA9IDA7CiAgICAgCi0gICAgZGlzY2FyZF91bnRpbCA9IDA7
CisgICAgZGlzY2FyZF91bnRpbCA9IG51bGxBdG9tOwogfQogCiB2b2lkIEtIVE1MUGFyc2VyOjpz
ZXRDdXJyZW50KERPTTo6Tm9kZUltcGwgKm5ld0N1cnJlbnQpIApAQCAtMTk2LDQxICsxOTMsMjkg
QEAgdm9pZCBLSFRNTFBhcnNlcjo6c2V0Q3VycmVudChET006Ok5vZGVJbQogCiB2b2lkIEtIVE1M
UGFyc2VyOjpwYXJzZVRva2VuKFRva2VuICp0KQogewotICAgIGlmKGRpc2NhcmRfdW50aWwpIHsK
LSAgICAgICAgaWYodC0+aWQgPT0gZGlzY2FyZF91bnRpbCkKLSAgICAgICAgICAgIGRpc2NhcmRf
dW50aWwgPSAwOworICAgIGlmICghZGlzY2FyZF91bnRpbC5pc051bGwoKSkgeworICAgICAgICBp
ZiAodC0+dGFnTmFtZSA9PSBkaXNjYXJkX3VudGlsICYmICF0LT5iZWdpblRhZykKKyAgICAgICAg
ICAgIGRpc2NhcmRfdW50aWwgPSBudWxsQXRvbTsKIAogICAgICAgICAvLyBkbyBub3Qgc2tpcCA8
L2lmcmFtZT4KLSAgICAgICAgaWYgKCBkaXNjYXJkX3VudGlsIHx8IGN1cnJlbnQtPmlkKCkgKyBJ
RF9DTE9TRV9UQUcgIT0gdC0+aWQgKQorICAgICAgICBpZiAoIWRpc2NhcmRfdW50aWwuaXNOdWxs
KCkgfHwgKGN1cnJlbnQtPmxvY2FsTmFtZSgpICE9IHQtPnRhZ05hbWUpKQogICAgICAgICAgICAg
cmV0dXJuOwogICAgIH0KLQotI2lmZGVmIFBBUlNFUl9ERUJVRwotICAgIGtkRGVidWcoIDYwMzUg
KSA8PCAiXG5cbj09PiBwYXJzZXI6IHByb2Nlc3NpbmcgdG9rZW4gIiA8PCBnZXRUYWdOYW1lKHQt
PmlkKS5zdHJpbmcoKSA8PCAiKCIgPDwgdC0+aWQgPDwgIikiCi0gICAgICAgICAgICAgICAgICAg
IDw8ICIgY3VycmVudCA9ICIgPDwgZ2V0VGFnTmFtZShjdXJyZW50LT5pZCgpKS5zdHJpbmcoKSA8
PCAiKCIgPDwgY3VycmVudC0+aWQoKSA8PCAiKSIgPDwgZW5kbDsKLSAgICBrZERlYnVnKDYwMzUp
IDw8ICIgaW5Cb2R5PSIgPDwgaW5Cb2R5IDw8ICIgaGF2ZUZyYW1lU2V0PSIgPDwgaGF2ZUZyYW1l
U2V0IDw8IGVuZGw7Ci0jZW5kaWYKIAotICAgIC8vIGhvbHkgc2hpdC4gYXBwYXJlbnRseSBzb21l
IHNpdGVzIHVzZSA8L2JyPiBpbnN0ZWFkIG9mIDxicj4KLSAgICAvLyBiZSBjb21wYXRpYmxlIHdp
dGggSUUgYW5kIE5TCi0gICAgaWYgKHQtPmlkID09IElEX0JSICsgSURfQ0xPU0VfVEFHICYmIGRv
YygpLT5pbkNvbXBhdE1vZGUoKSkKLSAgICAgICAgdC0+aWQgPSBJRF9CUjsKKyAgICAvLyBBcHBh
cmVudGx5IHNvbWUgc2l0ZXMgdXNlIDwvYnI+IGluc3RlYWQgb2YgPGJyPi4gIEJlIGNvbXBhdGli
bGUgd2l0aCBJRSBhbmQgRmlyZWZveCBhbmQgdHJlYXQgdGhpcyBsaWtlIDxicj4uCisgICAgaWYg
KHQtPmlzQ2xvc2VUYWcoSFRNTE5hbWVzOjpicigpKSAmJiBkb2MoKS0+aW5Db21wYXRNb2RlKCkp
CisgICAgICAgIHQtPmJlZ2luVGFnID0gdHJ1ZTsKIAotICAgIGlmICh0LT5pZCA+IElEX0NMT1NF
X1RBRykKLSAgICB7CisgICAgaWYgKCF0LT5iZWdpblRhZykgewogICAgICAgICBwcm9jZXNzQ2xv
c2VUYWcodCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICAvLyBpZ25vcmUgc3BhY2Vz
LCBpZiB3ZSdyZSBub3QgaW5zaWRlIGEgcGFyYWdyYXBoIG9yIG90aGVyIGlubGluZSBjb2RlCi0g
ICAgaWYoIHQtPmlkID09IElEX1RFWFQgJiYgdC0+dGV4dCApIHsKLSAgICAgICAgaWYoaW5Cb2R5
ICYmICFza2lwTW9kZSgpICYmIGN1cnJlbnQtPmlkKCkgIT0gSURfU1RZTEUgCi0gICAgICAgICAg
ICAmJiBjdXJyZW50LT5pZCgpICE9IElEX1RJVExFICYmIGN1cnJlbnQtPmlkKCkgIT0gSURfU0NS
SVBUICYmCi0gICAgICAgICAgICAhdC0+dGV4dC0+Y29udGFpbnNPbmx5V2hpdGVzcGFjZSgpKSAK
KyAgICBpZiAodC0+dGFnTmFtZSA9PSB0ZXh0QXRvbSAmJiB0LT50ZXh0KSB7CisgICAgICAgIGlm
IChpbkJvZHkgJiYgIXNraXBNb2RlKCkgJiYgY3VycmVudC0+bG9jYWxOYW1lKCkgIT0gSFRNTE5h
bWVzOjpzdHlsZSgpICYmIGN1cnJlbnQtPmxvY2FsTmFtZSgpICE9IEhUTUxOYW1lczo6dGl0bGUo
KSAmJiAKKyAgICAgICAgICAgIGN1cnJlbnQtPmxvY2FsTmFtZSgpICE9IEhUTUxOYW1lczo6c2Ny
aXB0KCkgJiYgIXQtPnRleHQtPmNvbnRhaW5zT25seVdoaXRlc3BhY2UoKSkgCiAgICAgICAgICAg
ICBoYXZlQ29udGVudCA9IHRydWU7Ci0jaWZkZWYgUEFSU0VSX0RFQlVHCi0gICAgICAgIGtkRGVi
dWcoNjAzNSkgPDwgImxlbmd0aD0iPDwgdC0+dGV4dC0+bCA8PCAiIHRleHQ9JyIgPDwgUUNvbnN0
U3RyaW5nKHQtPnRleHQtPnMsIHQtPnRleHQtPmwpLnN0cmluZygpIDw8ICInIiA8PCBlbmRsOwot
I2VuZGlmCiAgICAgfQogCiAgICAgTm9kZUltcGwgKm4gPSBnZXRFbGVtZW50KHQpOwpAQCAtMjQx
LDU2ICsyMjYsMzEgQEAgdm9pZCBLSFRNTFBhcnNlcjo6cGFyc2VUb2tlbihUb2tlbiAqdCkKICAg
ICBTaGFyZWRQdHI8Tm9kZUltcGw+IHByb3RlY3ROb2RlKG4pOwogCiAgICAgLy8gc2V0IGF0dHJp
YnV0ZXMKLSAgICBpZihuLT5pc0VsZW1lbnROb2RlKCkpCi0gICAgewotICAgICAgICBFbGVtZW50
SW1wbCAqZSA9IHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsICo+KG4pOworICAgIGlmIChuLT5pc0hU
TUxFbGVtZW50KCkpIHsKKyAgICAgICAgSFRNTEVsZW1lbnRJbXBsICplID0gc3RhdGljX2Nhc3Q8
SFRNTEVsZW1lbnRJbXBsKj4obik7CiAgICAgICAgIGUtPnNldEF0dHJpYnV0ZU1hcCh0LT5hdHRy
cyk7CiAKICAgICAgICAgLy8gdGFrZSBjYXJlIG9mIG9wdGlvbmFsIGNsb3NlIHRhZ3MKLSAgICAg
ICAgaWYoZW5kVGFnUmVxdWlyZW1lbnQoZS0+aWQoKSkgPT0gRE9NOjpPUFRJT05BTCkKLSAgICAg
ICAgICAgIHBvcEJsb2NrKHQtPmlkKTsKKyAgICAgICAgaWYgKGUtPmVuZFRhZ1JlcXVpcmVtZW50
KCkgPT0gRE9NOjpPUFRJT05BTCkKKyAgICAgICAgICAgIHBvcEJsb2NrKHQtPnRhZ05hbWUpOwog
ICAgICAgICAgICAgCi0gICAgICAgIGlmIChpc0hlYWRlclRhZyh0LT5pZCkpCisgICAgICAgIGlm
IChpc0hlYWRlclRhZyh0LT50YWdOYW1lKSkKICAgICAgICAgICAgIC8vIERvIG5vdCBhbGxvdyB0
d28gaGVhZGVyIHRhZ3MgdG8gYmUgbmVzdGVkIGlmIHRoZSBpbnRlcnZlbmluZyB0YWdzIGFyZSBp
bmxpbmVzLgogICAgICAgICAgICAgcG9wTmVzdGVkSGVhZGVyVGFnKCk7CiAgICAgfQogCi0gICAg
Ly8gaWYgdGhpcyB0YWcgaXMgZm9yYmlkZGVuIGluc2lkZSB0aGUgY3VycmVudCBjb250ZXh0LCBw
b3AKLSAgICAvLyBibG9ja3MgdW50aWwgd2UgYXJlIGFsbG93ZWQgdG8gYWRkIGl0Li4uCi0gICAg
d2hpbGUgKGJsb2NrU3RhY2sgJiYgdC0+aWQgPD0gSURfTEFTVF9UQUcgJiYgZm9yYmlkZGVuVGFn
W3QtPmlkXSkgewotI2lmZGVmIFBBUlNFUl9ERUJVRwotICAgICAgICBrZERlYnVnKCA2MDM1ICkg
PDwgInQtPmlkOiAiIDw8IHQtPmlkIDw8ICIgaXMgZm9yYmlkZGVuIDotKCAiIDw8IGVuZGw7Ci0j
ZW5kaWYKLSAgICAgICAgcG9wT25lQmxvY2soKTsKLSAgICB9Ci0KLSAgICBpZiAoIWluc2VydE5v
ZGUobiwgdC0+ZmxhdCkpIAotICAgIHsKKyAgICBpZiAoIWluc2VydE5vZGUobiwgdC0+ZmxhdCkp
IHsKICAgICAgICAgLy8gd2UgY291bGRuJ3QgaW5zZXJ0IHRoZSBub2RlLi4uCi0gICAgICAgIAot
ICAgICAgICBpZihuLT5pc0VsZW1lbnROb2RlKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEVs
ZW1lbnRJbXBsICplID0gc3RhdGljX2Nhc3Q8RWxlbWVudEltcGwgKj4obik7CisgICAgICAgIGlm
IChuLT5pc0VsZW1lbnROb2RlKCkpIHsKKyAgICAgICAgICAgIEVsZW1lbnRJbXBsKiBlID0gc3Rh
dGljX2Nhc3Q8RWxlbWVudEltcGwqPihuKTsKICAgICAgICAgICAgIGUtPnNldEF0dHJpYnV0ZU1h
cCgwKTsKICAgICAgICAgfQogICAgICAgICAgICAgCi0jaWZkZWYgUEFSU0VSX0RFQlVHCi0gICAg
ICAgIGtkRGVidWcoIDYwMzUgKSA8PCAiaW5zZXJ0Tm9kZSBmYWlsZWQgY3VycmVudD0iIDw8IGN1
cnJlbnQtPmlkKCkgPDwgIiwgbmV3PSIgPDwgbi0+aWQoKSA8PCAiISIgPDwgZW5kbDsKLSNlbmRp
ZgogICAgICAgICBpZiAobWFwID09IG4pCi0gICAgICAgIHsKLSNpZmRlZiBQQVJTRVJfREVCVUcK
LSAgICAgICAgICAgIGtkRGVidWcoIDYwMzUgKSA8PCAiICAtLT4gcmVzZXR0aW5nIG1hcCEiIDw8
IGVuZGw7Ci0jZW5kaWYKICAgICAgICAgICAgIG1hcCA9IDA7Ci0gICAgICAgIH0KKwogICAgICAg
ICBpZiAoZm9ybSA9PSBuKQotICAgICAgICB7Ci0jaWZkZWYgUEFSU0VSX0RFQlVHCi0gICAgICAg
ICAgICBrZERlYnVnKCA2MDM1ICkgPDwgIiAgIC0tPiByZXNldHRpbmcgZm9ybSEiIDw8IGVuZGw7
Ci0jZW5kaWYKICAgICAgICAgICAgIGZvcm0gPSAwOwotICAgICAgICB9CiAgICAgfQogfQogCkBA
IC0zMDQsMjQgKzI2NCwxOCBAQCBib29sIEtIVE1MUGFyc2VyOjppbnNlcnROb2RlKE5vZGVJbXBs
ICpuCiB7CiAgICAgU2hhcmVkUHRyPE5vZGVJbXBsPiBwcm90ZWN0Tm9kZShuKTsKIAotICAgIGlu
dCBpZCA9IG4tPmlkKCk7Ci0KKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSA9IG4t
PmxvY2FsTmFtZSgpOworICAgIGludCB0YWdQcmlvcml0eSA9IG4tPmlzSFRNTEVsZW1lbnQoKSA/
IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCo+KG4pLT50YWdQcmlvcml0eSgpIDogMDsKKyAg
ICAgICAgCiAgICAgLy8gbGV0J3MgYmUgc3R1cGlkIGFuZCBqdXN0IHRyeSB0byBpbnNlcnQgaXQu
Ci0gICAgLy8gdGhpcyBzaG91bGQgd29yayBpZiB0aGUgZG9jdW1lbnQgaXMgd2VsbGZvcm1lZAot
I2lmZGVmIFBBUlNFUl9ERUJVRwotICAgIE5vZGVJbXBsICp0bXAgPSBjdXJyZW50OwotI2VuZGlm
CisgICAgLy8gdGhpcyBzaG91bGQgd29yayBpZiB0aGUgZG9jdW1lbnQgaXMgd2VsbC1mb3JtZWQK
ICAgICBOb2RlSW1wbCAqbmV3Tm9kZSA9IGN1cnJlbnQtPmFkZENoaWxkKG4pOwotICAgIGlmICgg
bmV3Tm9kZSApIHsKLSNpZmRlZiBQQVJTRVJfREVCVUcKLSAgICAgICAga2REZWJ1ZyggNjAzNSAp
IDw8ICJhZGRlZCAiIDw8IG4tPm5vZGVOYW1lKCkuc3RyaW5nKCkgPDwgIiB0byAiIDw8IHRtcC0+
bm9kZU5hbWUoKS5zdHJpbmcoKSA8PCAiLCBuZXcgY3VycmVudD0iIDw8IG5ld05vZGUtPm5vZGVO
YW1lKCkuc3RyaW5nKCkgPDwgZW5kbDsKLSNlbmRpZgotICAgICAgICAvLyBkb24ndCBwdXNoIGVs
ZW1lbnRzIHdpdGhvdXQgZW5kIHRhZyBvbiB0aGUgc3RhY2sKLSAgICAgICAgaWYodGFnUHJpb3Jp
dHkoaWQpICE9IDAgJiYgIWZsYXQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHB1c2hCbG9jayhp
ZCwgdGFnUHJpb3JpdHkoaWQpKTsKKyAgICBpZiAobmV3Tm9kZSkgeworICAgICAgICAvLyBkb24n
dCBwdXNoIGVsZW1lbnRzIHdpdGhvdXQgZW5kIHRhZ3MgKGUuZy4sIDxpbWc+KSBvbiB0aGUgc3Rh
Y2sKKyAgICAgICAgaWYgKHRhZ1ByaW9yaXR5ID4gMCAmJiAhZmxhdCkgeworICAgICAgICAgICAg
cHVzaEJsb2NrKGxvY2FsTmFtZSwgdGFnUHJpb3JpdHkpOwogICAgICAgICAgICAgaWYgKG5ld05v
ZGUgPT0gY3VycmVudCkKLSAgICAgICAgICAgICAgICBwb3BCbG9jayhpZCk7CisgICAgICAgICAg
ICAgICAgcG9wQmxvY2sobG9jYWxOYW1lKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICAgICBzZXRDdXJyZW50KG5ld05vZGUpOwogI2lmIFNQRUVEX0RFQlVHIDwgMgpAQCAtMzQ1LDkg
KzI5OSw2IEBAIGJvb2wgS0hUTUxQYXJzZXI6Omluc2VydE5vZGUoTm9kZUltcGwgKm4KIAogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9IGVsc2UgewotI2lmZGVmIFBBUlNFUl9ERUJVRwotICAg
ICAgICBrZERlYnVnKCA2MDM1ICkgPDwgIkFERElORyBOT0RFIEZBSUxFRCEhISEgY3VycmVudCA9
ICIgPDwgY3VycmVudC0+bm9kZU5hbWUoKS5zdHJpbmcoKSA8PCAiLCBuZXcgPSAiIDw8IG4tPm5v
ZGVOYW1lKCkuc3RyaW5nKCkgPDwgZW5kbDsKLSNlbmRpZgogICAgICAgICAvLyBlcnJvciBoYW5k
bGluZy4uLgogICAgICAgICBIVE1MRWxlbWVudEltcGwgKmU7CiAgICAgICAgIGJvb2wgaGFuZGxl
ZCA9IGZhbHNlOwpAQCAtNDE2LDIyICszNjcsMTkgQEAgYm9vbCBLSFRNTFBhcnNlcjo6aW5zZXJ0
Tm9kZShOb2RlSW1wbCAqbgogICAgICAgICAgICAgaWYgKCBoZWFkICkgewogICAgICAgICAgICAg
ICAgIERPTTo6Tm9kZUltcGwgKm5ld05vZGUgPSBoZWFkLT5hZGRDaGlsZChuKTsKICAgICAgICAg
ICAgICAgICBpZiAoIG5ld05vZGUgKSB7Ci0gICAgICAgICAgICAgICAgICAgIHB1c2hCbG9jayhp
ZCwgdGFnUHJpb3JpdHkoaWQpKTsKKyAgICAgICAgICAgICAgICAgICAgcHVzaEJsb2NrKGxvY2Fs
TmFtZSwgdGFnUHJpb3JpdHkpOwogICAgICAgICAgICAgICAgICAgICBzZXRDdXJyZW50KG5ld05v
ZGUpOwogI2lmIFNQRUVEX0RFQlVHIDwgMgogCQkgICAgaWYoIW4tPmF0dGFjaGVkKCkgJiYgSFRN
TFdpZGdldCkKICAgICAgICAgICAgICAgICAgICAgICAgIG4tPmF0dGFjaCgpOwogI2VuZGlmCiAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKLSNpZmRlZiBQQVJTRVJfREVCVUcKLSAgICAgICAgICAg
ICAgICAgICAga2REZWJ1ZyggNjAzNSApIDw8ICJhZGRpbmcgc3R5bGUgYmVmb3JlIHRvIGJvZHkg
ZmFpbGVkISEhISIgPDwgZW5kbDsKLSNlbmRpZgotICAgICAgICAgICAgICAgICAgICBkaXNjYXJk
X3VudGlsID0gSURfU1RZTEUgKyBJRF9DTE9TRV9UQUc7CisgICAgICAgICAgICAgICAgICAgIHNl
dFNraXBNb2RlKEhUTUxOYW1lczo6c3R5bGUoKSk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgICAgICB9IGVsc2UgaWYoaW5Cb2R5KSB7Ci0gICAgICAgICAgICAgICAgZGlzY2Fy
ZF91bnRpbCA9IElEX1NUWUxFICsgSURfQ0xPU0VfVEFHOworICAgICAgICAgICAgICAgIHNldFNr
aXBNb2RlKEhUTUxOYW1lczo6c3R5bGUoKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CkBAIC01MjQsNyArNDcyLDcgQEAg
Ym9vbCBLSFRNTFBhcnNlcjo6aW5zZXJ0Tm9kZShOb2RlSW1wbCAqbgogICAgICAgICAgICAgICAg
ICAgICBOb2RlSW1wbCogdGFibGUgPSB0c2VjdGlvbi0+cGFyZW50KCk7CiAgICAgICAgICAgICAg
ICAgICAgIGludCBleGNlcHRpb25jb2RlID0gMDsKICAgICAgICAgICAgICAgICAgICAgdGFibGUt
Pmluc2VydEJlZm9yZShuLCB0c2VjdGlvbiwgZXhjZXB0aW9uY29kZSk7Ci0gICAgICAgICAgICAg
ICAgICAgIHB1c2hCbG9jayhpZCwgdGFnUHJpb3JpdHkoaWQpKTsKKyAgICAgICAgICAgICAgICAg
ICAgcHVzaEJsb2NrKGxvY2FsTmFtZSwgdGFnUHJpb3JpdHkpOwogICAgICAgICAgICAgICAgICAg
ICBzZXRDdXJyZW50KG4pOwogICAgICAgICAgICAgICAgICAgICBpblN0cmF5VGFibGVDb250ZW50
Kys7CiAgICAgICAgICAgICAgICAgICAgIGJsb2NrU3RhY2stPnN0cmF5VGFibGVDb250ZW50ID0g
dHJ1ZTsKQEAgLTU1MCw3ICs0OTgsOCBAQCBib29sIEtIVE1MUGFyc2VyOjppbnNlcnROb2RlKE5v
ZGVJbXBsICpuCiAgICAgICAgIH0KIAogICAgICAgICAvLyBzd2l0Y2ggb24gdGhlIGN1cnJlbnRs
eSBhY3RpdmUgZWxlbWVudAotICAgICAgICBzd2l0Y2goY3VycmVudC0+aWQoKSkKKyAgICAgICAg
Y29uc3QgQXRvbWljU3RyaW5nJiBjdXJyZW50VGFnTmFtZSA9IGN1cnJlbnQtPmxvY2FsTmFtZSgp
OworICAgICAgICBzd2l0Y2ggKGN1cnJlbnQtPmlkKCkpCiAgICAgICAgIHsKICAgICAgICAgY2Fz
ZSBJRF9IVE1MOgogICAgICAgICAgICAgc3dpdGNoKGlkKQpAQCAtNTkzLDcgKzU0Miw3IEBAIGJv
b2wgS0hUTUxQYXJzZXI6Omluc2VydE5vZGUoTm9kZUltcGwgKm4KICAgICAgICAgICAgIGVsc2Ug
ewogICAgICAgICAgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhlIGJvZHkgc3RhcnRzIGhlcmUuLi4K
ICAgICAgICAgICAgICAgICBpZiAoIGhhdmVGcmFtZVNldCApIGJyZWFrOwotICAgICAgICAgICAg
ICAgIHBvcEJsb2NrKElEX0hFQUQpOworICAgICAgICAgICAgICAgIHBvcEJsb2NrKGN1cnJlbnRU
YWdOYW1lKTsKICAgICAgICAgICAgICAgICBlID0gbmV3IEhUTUxCb2R5RWxlbWVudEltcGwoZG9j
dW1lbnQpOwogICAgICAgICAgICAgICAgIHN0YXJ0Qm9keSgpOwogICAgICAgICAgICAgICAgIGlu
c2VydE5vZGUoZSk7CkBAIC02MDQsNyArNTUzLDcgQEAgYm9vbCBLSFRNTFBhcnNlcjo6aW5zZXJ0
Tm9kZShOb2RlSW1wbCAqbgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSURfQ0FQ
VElPTjoKICAgICAgICAgICAgIC8vIElsbGVnYWwgY29udGVudCBpbiBhIGNhcHRpb24uIENsb3Nl
IHRoZSBjYXB0aW9uIGFuZCB0cnkgYWdhaW4uCi0gICAgICAgICAgICBwb3BCbG9jayhJRF9DQVBU
SU9OKTsKKyAgICAgICAgICAgIHBvcEJsb2NrKGN1cnJlbnRUYWdOYW1lKTsKICAgICAgICAgICAg
IHN3aXRjaCggaWQgKSB7CiAgICAgICAgICAgICBjYXNlIElEX1RIRUFEOgogICAgICAgICAgICAg
Y2FzZSBJRF9URk9PVDoKQEAgLTYyMyw3ICs1NzIsNyBAQCBib29sIEtIVE1MUGFyc2VyOjppbnNl
cnROb2RlKE5vZGVJbXBsICpuCiAgICAgICAgICAgICBzd2l0Y2goaWQpCiAgICAgICAgICAgICB7
CiAgICAgICAgICAgICBjYXNlIElEX1RBQkxFOgotICAgICAgICAgICAgICAgIHBvcEJsb2NrKElE
X1RBQkxFKTsgLy8gZW5kIHRoZSB0YWJsZQorICAgICAgICAgICAgICAgIHBvcEJsb2NrKGxvY2Fs
TmFtZSk7IC8vIGVuZCB0aGUgdGFibGUKICAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsg
ICAgICAvLyAuLi5hbmQgc3RhcnQgYSBuZXcgb25lCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAJ
ICAgIGNhc2UgSURfVEVYVDoKQEAgLTY2NCwxMCArNjEzLDEwIEBAIGJvb2wgS0hUTUxQYXJzZXI6
Omluc2VydE5vZGUoTm9kZUltcGwgKm4KICNlbmRpZgogICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKG4t
PmlzRWxlbWVudE5vZGUoKSAmJiB0YWdQcmlvcml0eShpZCkgIT0gMCAmJiAKLSAgICAgICAgICAg
ICAgICAgICAgICAgICFmbGF0ICYmIGVuZFRhZ1JlcXVpcmVtZW50KGlkKSAhPSBET006OkZPUkJJ
RERFTikKKyAgICAgICAgICAgICAgICAgICAgaWYgKG4tPmlzSFRNTEVsZW1lbnQoKSAmJiB0YWdQ
cmlvcml0eSA+IDAgJiYgCisgICAgICAgICAgICAgICAgICAgICAgICAhZmxhdCAmJiBzdGF0aWNf
Y2FzdDxIVE1MRWxlbWVudEltcGwqPihuKS0+ZW5kVGFnUmVxdWlyZW1lbnQoKSAhPSBET006OkZP
UkJJRERFTikKICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAg
cHVzaEJsb2NrKGlkLCB0YWdQcmlvcml0eShpZCkpOworICAgICAgICAgICAgICAgICAgICAgICAg
cHVzaEJsb2NrKGxvY2FsTmFtZSwgdGFnUHJpb3JpdHkpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgc2V0Q3VycmVudChuKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGluU3RyYXlUYWJsZUNv
bnRlbnQrKzsKICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrU3RhY2stPnN0cmF5VGFibGVD
b250ZW50ID0gdHJ1ZTsKQEAgLTY3NiwxMSArNjI1LDExIEBAIGJvb2wgS0hUTUxQYXJzZXI6Omlu
c2VydE5vZGUoTm9kZUltcGwgKm4KICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAg
ICBpZiAoIGN1cnJlbnQtPmlkKCkgPT0gSURfVFIgKQotICAgICAgICAgICAgICAgICAgICBlID0g
bmV3IEhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbChkb2N1bWVudCwgSURfVEQpOworICAgICAgICAg
ICAgICAgICAgICBlID0gbmV3IEhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbChIVE1MTmFtZXM6OnRk
KCksIGRvY3VtZW50KTsKICAgICAgICAgICAgICAgICBlbHNlIGlmICggY3VycmVudC0+aWQoKSA9
PSBJRF9UQUJMRSApCi0gICAgICAgICAgICAgICAgICAgIGUgPSBuZXcgSFRNTFRhYmxlU2VjdGlv
bkVsZW1lbnRJbXBsKCBkb2N1bWVudCwgSURfVEJPRFksIHRydWUgLyogaW1wbGljaXQgKi8gKTsK
KyAgICAgICAgICAgICAgICAgICAgZSA9IG5ldyBIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGwo
SFRNTE5hbWVzOjp0Ym9keSgpLCBkb2N1bWVudCwgdHJ1ZSAvKiBpbXBsaWNpdCAqLyk7CiAgICAg
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBlID0gbmV3IEhUTUxUYWJsZVJv
d0VsZW1lbnRJbXBsKCBkb2N1bWVudCApOworICAgICAgICAgICAgICAgICAgICBlID0gbmV3IEhU
TUxUYWJsZVJvd0VsZW1lbnRJbXBsKGRvY3VtZW50KTsKICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICBpbnNlcnROb2RlKGUpOwogICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVl
OwpAQCAtNjg5LDcgKzYzOCw3IEBAIGJvb2wgS0hUTUxQYXJzZXI6Omluc2VydE5vZGUoTm9kZUlt
cGwgKm4KICAgICAgICAgICAgIH0gLy8gZW5kIHN3aXRjaAogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGNhc2UgSURfT0JKRUNUOgotICAgICAgICAgICAgZGlzY2FyZF91bnRpbCA9IElEX09C
SkVDVCArIElEX0NMT1NFX1RBRzsKKyAgICAgICAgICAgIHNldFNraXBNb2RlKEhUTUxOYW1lczo6
b2JqZWN0KCkpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBjYXNlIElEX1VM
OgogICAgICAgICBjYXNlIElEX09MOgpAQCAtNjk5LDE2ICs2NDgsMTYgQEAgYm9vbCBLSFRNTFBh
cnNlcjo6aW5zZXJ0Tm9kZShOb2RlSW1wbCAqbgogICAgICAgICAgICAgaW5zZXJ0Tm9kZShlKTsK
ICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICBjYXNlIElEX0RMOgotICAgICAgICAgICAgICAgIHBvcEJsb2NrKElEX0RMKTsKLSAgICAg
ICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIGNhc2UgSURfRFQ6Ci0gICAgICAgICAgICAgICAgcG9wQmxvY2soSURfRFQpOwotICAg
ICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIElEX0RMOgorICAgICAgICAgICAgcG9wQmxvY2soY3VycmVudFRhZ05hbWUpOwor
ICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBJRF9EVDoKKyAgICAgICAgICAgIHBvcEJsb2NrKGN1cnJlbnRUYWdOYW1lKTsKKyAgICAg
ICAgICAgIGhhbmRsZWQgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2Ug
SURfU0VMRUNUOgotICAgICAgICAgICAgaWYoIG4tPmlzSW5saW5lKCkgKQorICAgICAgICAgICAg
aWYgKGlzSW5saW5lKG4pKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIElEX1A6CkBAIC03MTgsNTEgKzY2Nyw0OSBAQCBib29s
IEtIVE1MUGFyc2VyOjppbnNlcnROb2RlKE5vZGVJbXBsICpuCiAgICAgICAgIGNhc2UgSURfSDQ6
CiAgICAgICAgIGNhc2UgSURfSDU6CiAgICAgICAgIGNhc2UgSURfSDY6Ci0gICAgICAgICAgICBp
Zighbi0+aXNJbmxpbmUoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBwb3BCbG9j
ayhjdXJyZW50LT5pZCgpKTsKKyAgICAgICAgICAgIGlmIChpc0lubGluZShuKSkgeworICAgICAg
ICAgICAgICAgIHBvcEJsb2NrKGN1cnJlbnRUYWdOYW1lKTsKICAgICAgICAgICAgICAgICBoYW5k
bGVkID0gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIElEX09QVElPTjoKICAgICAgICAgY2FzZSBJRF9PUFRHUk9VUDoKLSAgICAgICAgICAgIGlm
IChpZCA9PSBJRF9PUFRHUk9VUCkKKyAgICAgICAgICAgIGlmIChsb2NhbE5hbWUgPT0gSFRNTE5h
bWVzOjpvcHRncm91cCgpKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHBvcEJsb2Nr
KGN1cnJlbnQtPmlkKCkpOworICAgICAgICAgICAgICAgIHBvcEJsb2NrKGN1cnJlbnRUYWdOYW1l
KTsKICAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGVsc2UgaWYoaWQgPT0gSURfU0VMRUNUKQorICAgICAgICAgICAgZWxzZSBpZiAobG9j
YWxOYW1lID09IEhUTUxOYW1lczo6c2VsZWN0KCkpCiAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgLy8gSUUgdHJlYXRzIGEgbmVzdGVkIHNlbGVjdCBhcyA8L3NlbGVjdD4uIExldCdzIGRv
IHRoZSBzYW1lCi0gICAgICAgICAgICAgICAgcG9wQmxvY2soIElEX1NFTEVDVCApOworICAgICAg
ICAgICAgICAgIHBvcEJsb2NrKGxvY2FsTmFtZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIC8vIGhlYWQgZWxl
bWVudHMgaW4gdGhlIGJvZHkgc2hvdWxkIGJlIGlnbm9yZWQuCiAgICAgICAgIGNhc2UgSURfQURE
UkVTUzoKLSAgICAgICAgICAgIHBvcEJsb2NrKElEX0FERFJFU1MpOworICAgICAgICAgICAgcG9w
QmxvY2soY3VycmVudFRhZ05hbWUpOwogICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBJRF9DT0xHUk9VUDoKLSAgICAgICAgICAgIGlm
IChpZCAhPSBJRF9URVhUKSB7Ci0gICAgICAgICAgICAgICAgcG9wQmxvY2soSURfQ09MR1JPVVAp
OworICAgICAgICAgICAgaWYgKGxvY2FsTmFtZSAhPSB0ZXh0QXRvbSkgeworICAgICAgICAgICAg
ICAgIHBvcEJsb2NrKGN1cnJlbnRUYWdOYW1lKTsKICAgICAgICAgICAgICAgICBoYW5kbGVkID0g
dHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIElE
X0ZPTlQ6Ci0gICAgICAgICAgICBwb3BCbG9jayhJRF9GT05UKTsKKyAgICAgICAgICAgIHBvcEJs
b2NrKGN1cnJlbnRUYWdOYW1lKTsKICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBpZihjdXJyZW50LT5p
c0RvY3VtZW50Tm9kZSgpKQotICAgICAgICAgICAgeworICAgICAgICAgICAgaWYgKGN1cnJlbnQt
PmlzRG9jdW1lbnROb2RlKCkpIHsKICAgICAgICAgICAgICAgICBpZihjdXJyZW50LT5maXJzdENo
aWxkKCkgPT0gMCkgewogICAgICAgICAgICAgICAgICAgICBlID0gbmV3IEhUTUxIdG1sRWxlbWVu
dEltcGwoZG9jdW1lbnQpOwogICAgICAgICAgICAgICAgICAgICBpbnNlcnROb2RlKGUpOwogICAg
ICAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmKGN1cnJlbnQtPmlzSW5saW5lKCkpCisgICAg
ICAgICAgICBlbHNlIGlmIChpc0lubGluZShjdXJyZW50KSkKICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICBwb3BJbmxpbmVCbG9ja3MoKTsKICAgICAgICAgICAgICAgICBoYW5kbGVkID0g
dHJ1ZTsKQEAgLTc3MCwxMiArNzE3LDggQEAgYm9vbCBLSFRNTFBhcnNlcjo6aW5zZXJ0Tm9kZShO
b2RlSW1wbCAqbgogICAgICAgICB9CiAKICAgICAgICAgLy8gaWYgd2UgY291bGRuJ3QgaGFuZGxl
IHRoZSBlcnJvciwganVzdCByZXRocm93IHRoZSBleGNlcHRpb24uLi4KLSAgICAgICAgaWYoIWhh
bmRsZWQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8va2REZWJ1ZyggNjAzNSApIDw8ICJFeGNl
cHRpb24gaGFuZGxlciBmYWlsZWQgaW4gSFRNTFBBcnNlcjo6aW5zZXJ0Tm9kZSgpIiA8PCBlbmRs
OworICAgICAgICBpZiAoIWhhbmRsZWQpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIH0KLQogICAgICAgICByZXR1cm4gaW5zZXJ0Tm9kZShuKTsKICAgICB9CiB9CkBAIC03ODUs
NyArNzI4LDcgQEAgTm9kZUltcGwgKktIVE1MUGFyc2VyOjpnZXRFbGVtZW50KFRva2VuKgogICAg
IHN3aXRjaCAodC0+aWQpCiAgICAgewogICAgIGNhc2UgSURfSEVBRDoKLSAgICAgICAgaWYgKCFo
ZWFkICYmIGN1cnJlbnQtPmlkKCkgPT0gSURfSFRNTCkgeworICAgICAgICBpZiAoIWhlYWQgJiYg
Y3VycmVudC0+bG9jYWxOYW1lKCkgPT0gSFRNTE5hbWVzOjpodG1sKCkpIHsKICAgICAgICAgICAg
IGhlYWQgPSBuZXcgSFRNTEhlYWRFbGVtZW50SW1wbChkb2N1bWVudCk7CiAgICAgICAgICAgICBy
ZXR1cm4gaGVhZDsKICAgICAgICAgfQpAQCAtNzk0LDE1ICs3MzcsMTUgQEAgTm9kZUltcGwgKktI
VE1MUGFyc2VyOjpnZXRFbGVtZW50KFRva2VuKgogICAgICAgICAvLyBib2R5IG5vIGxvbmdlciBh
bGxvd2VkIGlmIHdlIGhhdmUgYSBmcmFtZXNldAogICAgICAgICBpZiAoaGF2ZUZyYW1lU2V0KQog
ICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHBvcEJsb2NrKElEX0hFQUQpOworICAgICAg
ICBwb3BCbG9jayhIVE1MTmFtZXM6OmhlYWQoKSk7CiAgICAgICAgIHN0YXJ0Qm9keSgpOwogICAg
ICAgICByZXR1cm4gbmV3IEhUTUxCb2R5RWxlbWVudEltcGwoZG9jdW1lbnQpOwogCiAvLyBmcmFt
ZXMKICAgICBjYXNlIElEX0ZSQU1FU0VUOgotICAgICAgICBwb3BCbG9jayhJRF9IRUFEKTsKKyAg
ICAgICAgcG9wQmxvY2soSFRNTE5hbWVzOjpoZWFkKCkpOwogICAgICAgICBpZiAoaW5Cb2R5ICYm
ICFoYXZlRnJhbWVTZXQgJiYgIWhhdmVDb250ZW50KSB7Ci0gICAgICAgICAgICBwb3BCbG9jayhJ
RF9CT0RZKTsKKyAgICAgICAgICAgIHBvcEJsb2NrKEhUTUxOYW1lczo6Ym9keSgpKTsKICAgICAg
ICAgICAgIC8vICMjIyBhY3R1YWxseSBmb3IgSUUgZG9jdW1lbnQuYm9keSByZXR1cm5zIHRoZSBu
b3cgaGlkZGVuICJib2R5IiBlbGVtZW50CiAgICAgICAgICAgICAvLyB3ZSBjYW4ndCBpbXBsZW1l
bnQgdGhhdCBiZWhhdmlvdXIgbm93IGJlY2F1c2UgaXQgY291bGQgY2F1c2UgdG9vIG1hbnkKICAg
ICAgICAgICAgIC8vIHJlZ3Jlc3Npb25zIGFuZCB0aGUgaGVhZGFjaGVzIGFyZSBub3Qgd29ydGgg
dGhlIHdvcmsgYXMgbG9uZyBhcyB0aGVyZSBpcwpAQCAtODExLDcgKzc1NCw3IEBAIE5vZGVJbXBs
ICpLSFRNTFBhcnNlcjo6Z2V0RWxlbWVudChUb2tlbioKICAgICAgICAgICAgICAgICBkb2MoKS0+
Ym9keSgpLT5zZXRBdHRyaWJ1dGUoQVRUUl9TVFlMRSwgImRpc3BsYXk6bm9uZSIpOwogICAgICAg
ICAgICAgaW5Cb2R5ID0gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKChoYXZlQ29udGVu
dCB8fCBoYXZlRnJhbWVTZXQpICYmIGN1cnJlbnQtPmlkKCkgPT0gSURfSFRNTCkKKyAgICAgICAg
aWYgKChoYXZlQ29udGVudCB8fCBoYXZlRnJhbWVTZXQpICYmIGN1cnJlbnQtPmxvY2FsTmFtZSgp
ID09IEhUTUxOYW1lczo6aHRtbCgpKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIGhh
dmVGcmFtZVNldCA9IHRydWU7CiAgICAgICAgIHN0YXJ0Qm9keSgpOwpAQCAtODE5LDcgKzc2Miw3
IEBAIE5vZGVJbXBsICpLSFRNTFBhcnNlcjo6Z2V0RWxlbWVudChUb2tlbioKIAogICAgIC8vIGEg
Yml0IG9mIGEgc3BlY2lhbCBjYXNlLCBzaW5jZSB0aGUgZnJhbWUgaXMgaW5saW5lZAogICAgIGNh
c2UgSURfSUZSQU1FOgotICAgICAgICBkaXNjYXJkX3VudGlsID0gSURfSUZSQU1FICsgSURfQ0xP
U0VfVEFHOworICAgICAgICBzZXRTa2lwTW9kZShIVE1MTmFtZXM6OmlmcmFtZSgpKTsKICAgICAg
ICAgYnJlYWs7CiAKIC8vIGZvcm0gZWxlbWVudHMKQEAgLTg2NCwyMSArODA3LDIxIEBAIE5vZGVJ
bXBsICpLSFRNTFBhcnNlcjo6Z2V0RWxlbWVudChUb2tlbioKIAogLy8gbGlzdHMKICAgICBjYXNl
IElEX0REOgotICAgICAgICBwb3BCbG9jayhJRF9EVCk7Ci0gICAgICAgIHBvcEJsb2NrKElEX0RE
KTsKKyAgICAgICAgcG9wQmxvY2soSFRNTE5hbWVzOjpkdCgpKTsKKyAgICAgICAgcG9wQmxvY2so
SFRNTE5hbWVzOjpkZCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJRF9EVDoKLSAgICAg
ICAgcG9wQmxvY2soSURfREQpOwotICAgICAgICBwb3BCbG9jayhJRF9EVCk7CisgICAgICAgIHBv
cEJsb2NrKEhUTUxOYW1lczo6ZGQoKSk7CisgICAgICAgIHBvcEJsb2NrKEhUTUxOYW1lczo6ZHQo
KSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSURfTEk6Ci0gICAgICAgIHBvcEJsb2NrKElE
X0xJKTsKKyAgICAgICAgcG9wQmxvY2sodC0+dGFnTmFtZSk7CiAgICAgICAgIGJyZWFrOwogCiAv
LyBhbmNob3IKICAgICBjYXNlIElEX0E6CiAgICAgICAgIC8vIE5ldmVyIGFsbG93IG5lc3RlZCA8
YT5zLgotICAgICAgICBwb3BCbG9jayhJRF9BKTsKKyAgICAgICAgcG9wQmxvY2sodC0+dGFnTmFt
ZSk7CiAgICAgICAgIGJyZWFrOwogCiAvLyBpbWFnZXMKQEAgLTg5MCwxOSArODMzLDE5IEBAIE5v
ZGVJbXBsICpLSFRNTFBhcnNlcjo6Z2V0RWxlbWVudChUb2tlbioKIAogLy8gdGFibGVzCiAgICAg
Y2FzZSBJRF9UUjoKLSAgICAgICAgcG9wQmxvY2soSURfVFIpOworICAgICAgICBwb3BCbG9jayh0
LT50YWdOYW1lKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJRF9URDoKICAgICBjYXNlIElE
X1RIOgotICAgICAgICBwb3BCbG9jayhJRF9USCk7Ci0gICAgICAgIHBvcEJsb2NrKElEX1REKTsK
KyAgICAgICAgcG9wQmxvY2soSFRNTE5hbWVzOjp0aCgpKTsKKyAgICAgICAgcG9wQmxvY2soSFRN
TE5hbWVzOjp0ZCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJRF9UQk9EWToKICAgICBj
YXNlIElEX1RIRUFEOgogICAgIGNhc2UgSURfVEZPT1Q6Ci0gICAgICAgIHBvcEJsb2NrKElEX1RI
RUFEKTsKLSAgICAgICAgcG9wQmxvY2soSURfVEJPRFkpOwotICAgICAgICBwb3BCbG9jayhJRF9U
Rk9PVCk7CisgICAgICAgIHBvcEJsb2NrKEhUTUxOYW1lczo6dGhlYWQoKSk7CisgICAgICAgIHBv
cEJsb2NrKEhUTUxOYW1lczo6dGJvZHkoKSk7CisgICAgICAgIHBvcEJsb2NrKEhUTUxOYW1lczo6
dGZvb3QoKSk7CiAgICAgICAgIGJyZWFrOwogCiAvLyBlbGVtZW50cyB3aXRoIG5vIHNwZWNpYWwg
cmVwcmVzZW50YXRpb24gaW4gdGhlIERPTQpAQCAtOTE0LDI4ICs4NTcsMjcgQEAgTm9kZUltcGwg
KktIVE1MUGFyc2VyOjpnZXRFbGVtZW50KFRva2VuKgogICAgIGNhc2UgSURfU1RSSUtFOgogICAg
IGNhc2UgSURfQklHOgogICAgIGNhc2UgSURfU01BTEw6Ci0gICAgICAgIGlmICghYWxsb3dOZXN0
ZWRSZWR1bmRhbnRUYWcodC0+aWQpKQorICAgICAgICBpZiAoIWFsbG93TmVzdGVkUmVkdW5kYW50
VGFnKHQtPnRhZ05hbWUpKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIGJyZWFrOwog
CiAgICAgY2FzZSBJRF9OT0JSOgogICAgIGNhc2UgSURfV0JSOgotICAgICAgICBwb3BCbG9jayh0
LT5pZCk7IC8vIERvbid0IGFsbG93IG5lc3RlZCA8bm9icj4gb3IgPHdicj4KKyAgICAgICAgcG9w
QmxvY2sodC0+dGFnTmFtZSk7IC8vIERvbid0IGFsbG93IG5lc3RlZCA8bm9icj4gb3IgPHdicj4K
ICAgICAgICAgYnJlYWs7CiAKIC8vIHRoZXNlIGFyZSBzcGVjaWFsLCBhbmQgbm9ybWFsbHkgbm90
IHJlbmRlcmVkCiAgICAgY2FzZSBJRF9OT0VNQkVEOgotICAgICAgICBkaXNjYXJkX3VudGlsID0g
SURfTk9FTUJFRCArIElEX0NMT1NFX1RBRzsKKyAgICAgICAgc2V0U2tpcE1vZGUoSFRNTE5hbWVz
Ojpub2VtYmVkKCkpOwogICAgICAgICByZXR1cm4gMDsKICAgICBjYXNlIElEX05PRlJBTUVTOgot
ICAgICAgICBkaXNjYXJkX3VudGlsID0gSURfTk9GUkFNRVMgKyBJRF9DTE9TRV9UQUc7CisgICAg
ICAgIHNldFNraXBNb2RlKEhUTUxOYW1lczo6bm9mcmFtZXMoKSk7CiAgICAgICAgIHJldHVybiAw
OwogICAgIGNhc2UgSURfTk9TQ1JJUFQ6CiAgICAgICAgIGlmIChIVE1MV2lkZ2V0ICYmIEhUTUxX
aWRnZXQtPnBhcnQoKS0+alNjcmlwdEVuYWJsZWQoKSkKLSAgICAgICAgICAgIGRpc2NhcmRfdW50
aWwgPSBJRF9OT1NDUklQVCArIElEX0NMT1NFX1RBRzsKKyAgICAgICAgICAgIHNldFNraXBNb2Rl
KEhUTUxOYW1lczo6bm9zY3JpcHQoKSk7CiAgICAgICAgIHJldHVybiAwOwogICAgIGNhc2UgSURf
Tk9MQVlFUjoKLSAgICAgICAgLy9kaXNjYXJkX3VudGlsID0gSURfTk9MQVlFUiArIElEX0NMT1NF
X1RBRzsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgY2FzZSBJRF9URVhUOgogICAgICAgICByZXR1
cm4gbmV3IFRleHRJbXBsKGRvY3VtZW50LCB0LT50ZXh0KTsKQEAgLTk1Miw4NCArODk0LDYxIEBA
IE5vZGVJbXBsICpLSFRNTFBhcnNlcjo6Z2V0RWxlbWVudChUb2tlbioKICAgICAgICAgfQogICAg
IH0KIAotICAgIHJldHVybiBkb2N1bWVudC0+ZG9jdW1lbnQoKS0+Y3JlYXRlSFRNTEVsZW1lbnQo
dC0+aWQpOworICAgIHJldHVybiBkb2N1bWVudC0+ZG9jdW1lbnQoKS0+Y3JlYXRlSFRNTEVsZW1l
bnQodC0+dGFnTmFtZSk7CiB9CiAKICNkZWZpbmUgTUFYX1JFRFVOREFOVCAyMAogCi1ib29sIEtI
VE1MUGFyc2VyOjphbGxvd05lc3RlZFJlZHVuZGFudFRhZyhpbnQgX2lkKQorYm9vbCBLSFRNTFBh
cnNlcjo6YWxsb3dOZXN0ZWRSZWR1bmRhbnRUYWcoY29uc3QgQXRvbWljU3RyaW5nJiBfdGFnTmFt
ZSkKIHsKICAgICAvLyB3d3cubGljZW8uZWR1Lm14IGlzIGFuIGV4YW1wbGUgb2YgYSBzaXRlIHRo
YXQgYWNoaWV2ZXMgYSBsZXZlbCBvZiBuZXN0aW5nIG9mCiAgICAgLy8gYWJvdXQgMTUwMCB0YWdz
LCBhbGwgZnJvbSBhIGJ1bmNoIG9mIDxiPnMuICBXZSB3aWxsIG9ubHkgYWxsb3cgYXQgbW9zdCAy
MAogICAgIC8vIG5lc3RlZCB0YWdzIG9mIHRoZSBzYW1lIHR5cGUgYmVmb3JlIGp1c3QgaWdub3Jp
bmcgdGhlbSBhbGwgdG9nZXRoZXIuCiAgICAgaW50IGkgPSAwOwogICAgIGZvciAoSFRNTFN0YWNr
RWxlbSogY3VyciA9IGJsb2NrU3RhY2s7Ci0gICAgICAgICBpIDwgTUFYX1JFRFVOREFOVCAmJiBj
dXJyICYmIGN1cnItPmlkID09IF9pZDsKKyAgICAgICAgIGkgPCBNQVhfUkVEVU5EQU5UICYmIGN1
cnIgJiYgY3Vyci0+dGFnTmFtZSA9PSBfdGFnTmFtZTsKICAgICAgICAgIGN1cnIgPSBjdXJyLT5u
ZXh0LCBpKyspOwogICAgIHJldHVybiBpICE9IE1BWF9SRURVTkRBTlQ7CiB9CiAKIHZvaWQgS0hU
TUxQYXJzZXI6OnByb2Nlc3NDbG9zZVRhZyhUb2tlbiAqdCkKIHsKLSAgICAvLyBzdXBwb3J0IGZv
ciByZWFsbHkgYnJva2VuIGh0bWwuIENhbid0IGJlbGlldmUgSSdtIHN1cHBvcnRpbmcgc3VjaCBj
cmFwIChsYXJzKQotICAgIHN3aXRjaCh0LT5pZCkKLSAgICB7Ci0gICAgY2FzZSBJRF9IVE1MK0lE
X0NMT1NFX1RBRzoKLSAgICBjYXNlIElEX0JPRFkrSURfQ0xPU0VfVEFHOgotICAgICAgICAvLyB3
ZSBuZXZlciBjbG9zZSB0aGUgYm9keSB0YWcsIHNpbmNlIHNvbWUgc3R1cGlkIHdlYiBwYWdlcyBj
bG9zZSBpdCBiZWZvcmUgdGhlIGFjdHVhbCBlbmQgb2YgdGhlIGRvYy4KLSAgICAgICAgLy8gbGV0
J3MgcmVseSBvbiB0aGUgZW5kKCkgY2FsbCB0byBjbG9zZSB0aGluZ3MuCisgICAgLy8gU3VwcG9y
dCBmb3IgcmVhbGx5IGJyb2tlbiBodG1sLgorICAgIC8vIHdlIG5ldmVyIGNsb3NlIHRoZSBib2R5
IHRhZywgc2luY2Ugc29tZSBzdHVwaWQgd2ViIHBhZ2VzIGNsb3NlIGl0IGJlZm9yZSB0aGUgYWN0
dWFsIGVuZCBvZiB0aGUgZG9jLgorICAgIC8vIGxldCdzIHJlbHkgb24gdGhlIGVuZCgpIGNhbGwg
dG8gY2xvc2UgdGhpbmdzLgorICAgIGlmICh0LT50YWdOYW1lID09IEhUTUxOYW1lczo6aHRtbCgp
IHx8IHQtPnRhZ05hbWUgPT0gSFRNTE5hbWVzOjpib2R5KCkpCiAgICAgICAgIHJldHVybjsKLSAg
ICBjYXNlIElEX0ZPUk0rSURfQ0xPU0VfVEFHOgorICAgIAorICAgIGlmICh0LT50YWdOYW1lID09
IEhUTUxOYW1lczo6Zm9ybSgpKQogICAgICAgICBmb3JtID0gMDsKLSAgICAgICAgLy8gdGhpcyBv
bmUgaXMgdG8gZ2V0IHRoZSByaWdodCBzdHlsZSBvbiB0aGUgYm9keSBlbGVtZW50Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgSURfTUFQK0lEX0NMT1NFX1RBRzoKKyAgICBlbHNlIGlmICh0LT50
YWdOYW1lID09IEhUTUxOYW1lczo6bWFwKCkpCiAgICAgICAgIG1hcCA9IDA7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgSURfU0VMRUNUK0lEX0NMT1NFX1RBRzoKKyAgICBlbHNlIGlmICh0LT50
YWdOYW1lID09IEhUTUxOYW1lczo6c2VsZWN0KCkpCiAgICAgICAgIGluU2VsZWN0ID0gZmFsc2U7
Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQot
I2lmZGVmIFBBUlNFUl9ERUJVRwotICAgIGtkRGVidWcoIDYwMzUgKSA8PCAiYWRkZWQgdGhlIGZv
bGxvd2luZyBjaGlsZHMgdG8gIiA8PCBjdXJyZW50LT5ub2RlTmFtZSgpLnN0cmluZygpIDw8IGVu
ZGw7Ci0gICAgTm9kZUltcGwgKmNoaWxkID0gY3VycmVudC0+Zmlyc3RDaGlsZCgpOwotICAgIHdo
aWxlKGNoaWxkICE9IDApCi0gICAgewotICAgICAgICBrZERlYnVnKCA2MDM1ICkgPDwgIiAgICAi
IDw8IGNoaWxkLT5ub2RlTmFtZSgpLnN0cmluZygpIDw8IGVuZGw7Ci0gICAgICAgIGNoaWxkID0g
Y2hpbGQtPm5leHRTaWJsaW5nKCk7Ci0gICAgfQotI2VuZGlmCisgICAgICAgIAogICAgIEhUTUxT
dGFja0VsZW0qIG9sZEVsZW0gPSBibG9ja1N0YWNrOwotICAgIHBvcEJsb2NrKHQtPmlkLUlEX0NM
T1NFX1RBRyk7Ci0gICAgaWYgKG9sZEVsZW0gPT0gYmxvY2tTdGFjayAmJiB0LT5pZCA9PSBJRF9Q
K0lEX0NMT1NFX1RBRykgeworICAgIHBvcEJsb2NrKHQtPnRhZ05hbWUpOworICAgIGlmIChvbGRF
bGVtID09IGJsb2NrU3RhY2sgJiYgdC0+dGFnTmFtZSA9PSBIVE1MTmFtZXM6OnAoKSkgewogICAg
ICAgICAvLyBXZSBlbmNvdW50ZXJlZCBhIHN0cmF5IDwvcD4uICBBbWF6aW5nbHkgR2Vja28sIFdp
bklFLCBhbmQgTWFjSUUgYWxsIHRyZWF0CiAgICAgICAgIC8vIHRoaXMgYXMgYSB2YWxpZCBicmVh
aywgaS5lLiwgPHA+PC9wPi4gIFNvIGdvIGFoZWFkIGFuZCBtYWtlIHRoZSBlbXB0eQogICAgICAg
ICAvLyBwYXJhZ3JhcGguCi0gICAgICAgIHQtPmlkLT1JRF9DTE9TRV9UQUc7CisgICAgICAgIHQt
PmJlZ2luVGFnID0gdHJ1ZTsKICAgICAgICAgcGFyc2VUb2tlbih0KTsKLSAgICAgICAgcG9wQmxv
Y2soSURfUCk7CisgICAgICAgIHBvcEJsb2NrKHQtPnRhZ05hbWUpOwogICAgIH0KICNpZmRlZiBQ
QVJTRVJfREVCVUcKICAgICBrZERlYnVnKCA2MDM1ICkgPDwgImNsb3NlVGFnIC0tPiBjdXJyZW50
ID0gIiA8PCBjdXJyZW50LT5ub2RlTmFtZSgpLnN0cmluZygpIDw8IGVuZGw7CiAjZW5kaWYKIH0K
IAotYm9vbCBLSFRNTFBhcnNlcjo6aXNIZWFkZXJUYWcoaW50IF9pZCkKK2Jvb2wgS0hUTUxQYXJz
ZXI6OmlzSGVhZGVyVGFnKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSkKIHsKLSAgICBzd2l0
Y2ggKF9pZCkgewotICAgICAgICBjYXNlIElEX0gxOgotICAgICAgICBjYXNlIElEX0gyOgotICAg
ICAgICBjYXNlIElEX0gzOgotICAgICAgICBjYXNlIElEX0g0OgotICAgICAgICBjYXNlIElEX0g1
OgotICAgICAgICBjYXNlIElEX0g2OgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgIHJldHVybiB0
YWdOYW1lID09IEhUTUxOYW1lczo6aDEoKSB8fAorICAgICAgICAgICB0YWdOYW1lID09IEhUTUxO
YW1lczo6aDIoKSB8fAorICAgICAgICAgICB0YWdOYW1lID09IEhUTUxOYW1lczo6aDMoKSB8fAor
ICAgICAgICAgICB0YWdOYW1lID09IEhUTUxOYW1lczo6aDQoKSB8fAorICAgICAgICAgICB0YWdO
YW1lID09IEhUTUxOYW1lczo6aDUoKSB8fAorICAgICAgICAgICB0YWdOYW1lID09IEhUTUxOYW1l
czo6aDYoKTsKIH0KIAogdm9pZCBLSFRNTFBhcnNlcjo6cG9wTmVzdGVkSGVhZGVyVGFnKCkKQEAg
LTEwMzcsMTkgKzk1NiwxOSBAQCB2b2lkIEtIVE1MUGFyc2VyOjpwb3BOZXN0ZWRIZWFkZXJUYWco
KQogICAgIC8vIFRoaXMgZnVuY3Rpb24gb25seSBjYXJlcyBhYm91dCBjaGVja2luZyBmb3IgbmVz
dGVkIGhlYWRlcnMgdGhhdCBoYXZlIG9ubHkgaW5saW5lcyBpbiBiZXR3ZWVuIHRoZW0uCiAgICAg
Tm9kZUltcGwqIGN1cnJOb2RlID0gY3VycmVudDsKICAgICBmb3IgKEhUTUxTdGFja0VsZW0qIGN1
cnIgPSBibG9ja1N0YWNrOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dCkgewotICAgICAgICBpZiAo
aXNIZWFkZXJUYWcoY3Vyci0+aWQpKSB7Ci0gICAgICAgICAgICBwb3BCbG9jayhjdXJyLT5pZCk7
CisgICAgICAgIGlmIChpc0hlYWRlclRhZyhjdXJyLT50YWdOYW1lKSkgeworICAgICAgICAgICAg
cG9wQmxvY2soY3Vyci0+dGFnTmFtZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
LSAgICAgICAgaWYgKGN1cnJOb2RlICYmICFjdXJyTm9kZS0+aXNJbmxpbmUoKSkKKyAgICAgICAg
aWYgKGN1cnJOb2RlICYmICFpc0lubGluZShjdXJyTm9kZSkpCiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIGN1cnJOb2RlID0gY3Vyci0+bm9kZTsKICAgICB9CiB9CiAKLWJvb2wgS0hUTUxQ
YXJzZXI6OmlzUmVzaWR1YWxTdHlsZVRhZyhpbnQgX2lkKQorYm9vbCBLSFRNTFBhcnNlcjo6aXNJ
bmxpbmUoRE9NOjpOb2RlSW1wbCogbm9kZSkgY29uc3QKIHsKLSAgICBzd2l0Y2ggKF9pZCkgewor
ICAgIHN3aXRjaChpZCgpKSB7CiAgICAgICAgIGNhc2UgSURfQToKICAgICAgICAgY2FzZSBJRF9G
T05UOgogICAgICAgICBjYXNlIElEX1RUOgpAQCAtMTA2MCw2ICs5NzksOCBAQCBib29sIEtIVE1M
UGFyc2VyOjppc1Jlc2lkdWFsU3R5bGVUYWcoaW50CiAgICAgICAgIGNhc2UgSURfU1RSSUtFOgog
ICAgICAgICBjYXNlIElEX0JJRzoKICAgICAgICAgY2FzZSBJRF9TTUFMTDoKKyAgICAKKyAgICAg
ICAgICAgIC8vICVwaHJhc2UKICAgICAgICAgY2FzZSBJRF9FTToKICAgICAgICAgY2FzZSBJRF9T
VFJPTkc6CiAgICAgICAgIGNhc2UgSURfREZOOgpAQCAtMTA2Nyw0MCArOTg4LDQ0IEBAIGJvb2wg
S0hUTUxQYXJzZXI6OmlzUmVzaWR1YWxTdHlsZVRhZyhpbnQKICAgICAgICAgY2FzZSBJRF9TQU1Q
OgogICAgICAgICBjYXNlIElEX0tCRDoKICAgICAgICAgY2FzZSBJRF9WQVI6CisgICAgICAgIGNh
c2UgSURfQ0lURToKKyAgICAgICAgY2FzZSBJRF9BQkJSOgorICAgICAgICBjYXNlIElEX0FDUk9O
WU06CisgICAgCisgICAgICAgICAgICAvLyAlc3BlY2lhbAorICAgICAgICBjYXNlIElEX1NVQjoK
KyAgICAgICAgY2FzZSBJRF9TVVA6CisgICAgICAgIGNhc2UgSURfU1BBTjoKKyAgICAgICAgY2Fz
ZSBJRF9OT0JSOgorICAgICAgICBjYXNlIElEX1dCUjoKKyAgICAgICAgCisgICAgICAgIGNhc2Ug
SURfVEVYVDoKICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgCiAgICAgICAg
IGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogfQogCi1ib29sIEtI
VE1MUGFyc2VyOjppc0FmZmVjdGVkQnlSZXNpZHVhbFN0eWxlKGludCBfaWQpCitib29sIEtIVE1M
UGFyc2VyOjppc1Jlc2lkdWFsU3R5bGVUYWcoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lKQog
ewotICAgIGlmIChpc1Jlc2lkdWFsU3R5bGVUYWcoX2lkKSkKKyAgICByZXR1cm4gdGFnTmFtZSA9
PSBIVE1MTmFtZXM6OmEoKSB8fCB0YWdOYW1lID09IEhUTUxOYW1lczo6Zm9udCgpIHx8IHRhZ05h
bWUgPT0gSFRNTE5hbWVzOjp0dCgpIHx8CisgICAgICAgICAgIHRhZ05hbWUgPT0gSFRNTE5hbWVz
Ojp1KCkgfHwgdGFnTmFtZSA9PSBIVE1MTmFtZXM6OmIoKSB8fCB0YWdOYW1lID09IEhUTUxOYW1l
czo6aSgpIHx8CisgICAgICAgICAgIHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpzKCkgfHwgdGFnTmFt
ZSA9PSBIVE1MTmFtZXM6OnN0cmlrZSgpIHx8IHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpiaWcoKSB8
fAorICAgICAgICAgICB0YWdOYW1lID09IEhUTUxOYW1lczo6c21hbGwoKSB8fCB0YWdOYW1lID09
IEhUTUxOYW1lczo6ZW0oKSB8fCB0YWdOYW1lID09IEhUTUxOYW1lczo6c3Ryb25nKCkgfHwKKyAg
ICAgICAgICAgdGFnTmFtZSA9PSBIVE1MTmFtZXM6OmRmbigpIHx8IHRhZ05hbWUgPT0gSFRNTE5h
bWVzOjpjb2RlKCkgfHwgdGFnTmFtZSA9PSBIVE1MTmFtZXM6OnNhbXAoKSB8fAorICAgICAgICAg
ICB0YWdOYW1lID09IEhUTUxOYW1lczo6a2JkKCkgfHwgdGFnTmFtZSA9PSBIVE1MTmFtZXM6OnZh
cigpOworfQorCitib29sIEtIVE1MUGFyc2VyOjppc0FmZmVjdGVkQnlSZXNpZHVhbFN0eWxlKGNv
bnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSkKK3sKKyAgICBpZiAoaXNSZXNpZHVhbFN0eWxlVGFn
KHRhZ05hbWUpIHx8IGlzSGVhZGVyVGFnKHRhZ05hbWUpKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAKLSAgICBzd2l0Y2ggKF9pZCkgewotICAgICAgICBjYXNlIElEX1A6Ci0gICAgICAgIGNh
c2UgSURfRElWOgotICAgICAgICBjYXNlIElEX0JMT0NLUVVPVEU6Ci0gICAgICAgIGNhc2UgSURf
QUREUkVTUzoKLSAgICAgICAgY2FzZSBJRF9IMToKLSAgICAgICAgY2FzZSBJRF9IMjoKLSAgICAg
ICAgY2FzZSBJRF9IMzoKLSAgICAgICAgY2FzZSBJRF9INDoKLSAgICAgICAgY2FzZSBJRF9INToK
LSAgICAgICAgY2FzZSBJRF9INjoKLSAgICAgICAgY2FzZSBJRF9DRU5URVI6Ci0gICAgICAgIGNh
c2UgSURfVUw6Ci0gICAgICAgIGNhc2UgSURfT0w6Ci0gICAgICAgIGNhc2UgSURfTEk6Ci0gICAg
ICAgIGNhc2UgSURfREw6Ci0gICAgICAgIGNhc2UgSURfRFQ6Ci0gICAgICAgIGNhc2UgSURfREQ6
Ci0gICAgICAgIGNhc2UgSURfUFJFOgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgIHJldHVybiB0
YWdOYW1lID09IEhUTUxOYW1lczo6cCgpIHx8IHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpkaXYoKSB8
fCB0YWdOYW1lID09IEhUTUxOYW1lczo6YmxvY2txdW90ZSgpIHx8CisgICAgICAgICAgIHRhZ05h
bWUgPT0gSFRNTE5hbWVzOjphZGRyZXNzKCkgfHwgdGFnTmFtZSA9PSBIVE1MTmFtZXM6OmNlbnRl
cigpIHx8IHRhZ05hbWUgPT0gSFRNTE5hbWVzOjp1bCgpIHx8CisgICAgICAgICAgIHRhZ05hbWUg
PT0gSFRNTE5hbWVzOjpvbCgpIHx8IHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpsaSgpIHx8IHRhZ05h
bWUgPT0gSFRNTE5hbWVzOjpkbCgpIHx8CisgICAgICAgICAgIHRhZ05hbWUgPT0gSFRNTE5hbWVz
OjpkdCgpIHx8IHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpkZCgpIHx8IHRhZ05hbWUgPT0gSFRNTE5h
bWVzOjpwcmUoKTsKIH0KIAogdm9pZCBLSFRNTFBhcnNlcjo6aGFuZGxlUmVzaWR1YWxTdHlsZUNs
b3NlVGFnQWNyb3NzQmxvY2tzKEhUTUxTdGFja0VsZW0qIGVsZW0pCkBAIC0xMTI1LDcgKzEwNTAs
NyBAQCB2b2lkIEtIVE1MUGFyc2VyOjpoYW5kbGVSZXNpZHVhbFN0eWxlQ2xvCiAgICAgICAgIGN1
cnIgPSBjdXJyLT5uZXh0OwogICAgIH0KIAotICAgIGlmICghY3VyciB8fCAhbWF4RWxlbSB8fCAh
aXNBZmZlY3RlZEJ5UmVzaWR1YWxTdHlsZShtYXhFbGVtLT5pZCkpIHJldHVybjsKKyAgICBpZiAo
IWN1cnIgfHwgIW1heEVsZW0gfHwgIWlzQWZmZWN0ZWRCeVJlc2lkdWFsU3R5bGUobWF4RWxlbS0+
dGFnTmFtZSkpIHJldHVybjsKIAogICAgIE5vZGVJbXBsKiByZXNpZHVhbEVsZW0gPSBwcmV2LT5u
b2RlOwogICAgIE5vZGVJbXBsKiBibG9ja0VsZW0gPSBwcmV2TWF4RWxlbSA/IHByZXZNYXhFbGVt
LT5ub2RlIDogY3VycmVudDsKQEAgLTExNDcsNyArMTA3Miw3IEBAIHZvaWQgS0hUTUxQYXJzZXI6
OmhhbmRsZVJlc2lkdWFsU3R5bGVDbG8KICAgICAgICAgSFRNTFN0YWNrRWxlbSogcHJldkVsZW0g
PSBtYXhFbGVtOwogICAgICAgICB3aGlsZSAoY3VyckVsZW0gIT0gZWxlbSkgewogICAgICAgICAg
ICAgSFRNTFN0YWNrRWxlbSogbmV4dEVsZW0gPSBjdXJyRWxlbS0+bmV4dDsKLSAgICAgICAgICAg
IGlmICghaXNSZXNpZHVhbFN0eWxlVGFnKGN1cnJFbGVtLT5pZCkpIHsKKyAgICAgICAgICAgIGlm
ICghaXNSZXNpZHVhbFN0eWxlVGFnKGN1cnJFbGVtLT50YWdOYW1lKSkgewogICAgICAgICAgICAg
ICAgIHByZXZFbGVtLT5uZXh0ID0gbmV4dEVsZW07CiAgICAgICAgICAgICAgICAgcHJldkVsZW0t
Pm5vZGUgPSBjdXJyRWxlbS0+bm9kZTsKICAgICAgICAgICAgICAgICBkZWxldGUgY3VyckVsZW07
CkBAIC0xMTY5LDcgKzEwOTQsNyBAQCB2b2lkIEtIVE1MUGFyc2VyOjpoYW5kbGVSZXNpZHVhbFN0
eWxlQ2xvCiAgICAgICAgIE5vZGVJbXBsKiBjdXJyTm9kZSA9IDA7CiAgICAgICAgIGN1cnJFbGVt
ID0gbWF4RWxlbTsKICAgICAgICAgd2hpbGUgKGN1cnJFbGVtLT5ub2RlICE9IHJlc2lkdWFsRWxl
bSkgewotICAgICAgICAgICAgaWYgKGlzUmVzaWR1YWxTdHlsZVRhZyhjdXJyRWxlbS0+bm9kZS0+
aWQoKSkpIHsKKyAgICAgICAgICAgIGlmIChpc1Jlc2lkdWFsU3R5bGVUYWcoY3VyckVsZW0tPm5v
ZGUtPmxvY2FsTmFtZSgpKSkgewogICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBhIGNsb25lIG9m
IHRoaXMgZWxlbWVudC4KICAgICAgICAgICAgICAgICBjdXJyTm9kZSA9IGN1cnJFbGVtLT5ub2Rl
LT5jbG9uZU5vZGUoZmFsc2UpOwogCkBAIC0xMjQ1LDcgKzExNzAsNyBAQCB2b2lkIEtIVE1MUGFy
c2VyOjpoYW5kbGVSZXNpZHVhbFN0eWxlQ2xvCiAgICAgICAgIC8vIFdlIHdpbGwgYWN0dWFsbHkg
c2NoZWR1bGUgdGhpcyB0YWcgZm9yIHJlb3BlbmluZwogICAgICAgICAvLyBhZnRlciB3ZSBjb21w
bGV0ZSB0aGUgY2xvc2Ugb2YgdGhpcyBlbnRpcmUgYmxvY2suCiAgICAgICAgIE5vZGVJbXBsKiBj
dXJyTm9kZSA9IGN1cnJlbnQ7Ci0gICAgICAgIGlmIChpc1Jlc2lkdWFsU3R5bGVUYWcoY3Vyci0+
aWQpKSB7CisgICAgICAgIGlmIChpc1Jlc2lkdWFsU3R5bGVUYWcoY3Vyci0+dGFnTmFtZSkpIHsK
ICAgICAgICAgICAgIC8vIFdlJ3ZlIG92ZXJsb2FkZWQgdGhlIHVzZSBvZiBzdGFjayBlbGVtZW50
cyBhbmQgYXJlIGp1c3QgcmV1c2luZyB0aGUKICAgICAgICAgICAgIC8vIHN0cnVjdCB3aXRoIGEg
c2xpZ2h0bHkgZGlmZmVyZW50IG1lYW5pbmcgdG8gdGhlIHZhcmlhYmxlcy4gIEluc3RlYWQgb2Yg
Y2hhaW5pbmcKICAgICAgICAgICAgIC8vIGZyb20gaW5uZXJtb3N0IHRvIG91dGVybW9zdCwgd2Ug
YnVpbGQgdXAgYSBsaXN0IG9mIGFsbCB0aGUgdGFncyB3ZSBuZWVkIHRvIHJlb3BlbgpAQCAtMTI4
Niw3ICsxMjExLDcgQEAgdm9pZCBLSFRNTFBhcnNlcjo6cmVvcGVuUmVzaWR1YWxTdHlsZVRhZwog
ICAgICAgICAvLyBGSVhNRTogSXMgaXQgcmVhbGx5IE9LIHRvIGlnbm9yZSB0aGUgZXhjZXB0aW9u
cyBoZXJlPwogCiAgICAgICAgIC8vIE5vdyBwdXNoIGEgbmV3IHN0YWNrIGVsZW1lbnQgZm9yIHRo
aXMgbm9kZSB3ZSBqdXN0IGNyZWF0ZWQuCi0gICAgICAgIHB1c2hCbG9jayhlbGVtLT5pZCwgZWxl
bS0+bGV2ZWwpOworICAgICAgICBwdXNoQmxvY2soZWxlbS0+dGFnTmFtZSwgZWxlbS0+bGV2ZWwp
OwogCiAgICAgICAgIC8vIFNldCBvdXIgc3RyYXlUYWJsZUNvbnRlbnQgYm9vbGVhbiBpZiBuZWVk
ZWQsIHNvIHRoYXQgdGhlIHJlb3BlbmVkIHRhZyBhbHNvIGtub3dzCiAgICAgICAgIC8vIHRoYXQg
aXQgaXMgaW5zaWRlIGEgbWFsZm9ybWVkIHRhYmxlLgpAQCAtMTMwNywzNSArMTIzMiwyMSBAQCB2
b2lkIEtIVE1MUGFyc2VyOjpyZW9wZW5SZXNpZHVhbFN0eWxlVGFnCiAgICAgfQogfQogCi12b2lk
IEtIVE1MUGFyc2VyOjpwdXNoQmxvY2soaW50IF9pZCwgaW50IF9sZXZlbCkKK3ZvaWQgS0hUTUxQ
YXJzZXI6OnB1c2hCbG9jayhjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUsIGludCBfbGV2ZWwp
CiB7Ci0gICAgSFRNTFN0YWNrRWxlbSAqRWxlbSA9IG5ldyBIVE1MU3RhY2tFbGVtKF9pZCwgX2xl
dmVsLCBjdXJyZW50LCBibG9ja1N0YWNrKTsKLQorICAgIEhUTUxTdGFja0VsZW0gKkVsZW0gPSBu
ZXcgSFRNTFN0YWNrRWxlbSh0YWdOYW1lLCBfbGV2ZWwsIGN1cnJlbnQsIGJsb2NrU3RhY2spOwog
ICAgIGJsb2NrU3RhY2sgPSBFbGVtOwotICAgIGFkZEZvcmJpZGRlbihfaWQsIGZvcmJpZGRlblRh
Zyk7CiB9CiAKLXZvaWQgS0hUTUxQYXJzZXI6OnBvcEJsb2NrKCBpbnQgX2lkICkKK3ZvaWQgS0hU
TUxQYXJzZXI6OnBvcEJsb2NrKGNvbnN0IEF0b21pY1N0cmluZyYgX3RhZ05hbWUpCiB7CiAgICAg
SFRNTFN0YWNrRWxlbSAqRWxlbSA9IGJsb2NrU3RhY2s7CiAgICAgCiAgICAgaW50IG1heExldmVs
ID0gMDsKIAotI2lmZGVmIFBBUlNFUl9ERUJVRwotICAgIGtkRGVidWcoIDYwMzUgKSA8PCAicG9w
QmxvY2soIiA8PCBnZXRUYWdOYW1lKF9pZCkuc3RyaW5nKCkgPDwgIikiIDw8IGVuZGw7Ci0gICAg
d2hpbGUoRWxlbSkgewotICAgICAgICBrZERlYnVnKCA2MDM1KSA8PCAiICAgPiAiIDw8IGdldFRh
Z05hbWUoRWxlbS0+aWQpLnN0cmluZygpIDw8IGVuZGw7Ci0gICAgICAgIEVsZW0gPSBFbGVtLT5u
ZXh0OwotICAgIH0KLSAgICBFbGVtID0gYmxvY2tTdGFjazsKLSNlbmRpZgotCi0gICAgd2hpbGUo
IEVsZW0gJiYgKEVsZW0tPmlkICE9IF9pZCkpCi0gICAgeworICAgIHdoaWxlIChFbGVtICYmIChF
bGVtLT50YWdOYW1lICE9IF90YWdOYW1lKSkgewogICAgICAgICBpZiAobWF4TGV2ZWwgPCBFbGVt
LT5sZXZlbCkKLSAgICAgICAgewogICAgICAgICAgICAgbWF4TGV2ZWwgPSBFbGVtLT5sZXZlbDsK
LSAgICAgICAgfQogICAgICAgICBFbGVtID0gRWxlbS0+bmV4dDsKICAgICB9CiAKQEAgLTEzNDUs
MjAgKzEyNTYsMTggQEAgdm9pZCBLSFRNTFBhcnNlcjo6cG9wQmxvY2soIGludCBfaWQgKQogICAg
IGlmIChtYXhMZXZlbCA+IEVsZW0tPmxldmVsKSB7CiAgICAgICAgIC8vIFdlIGRpZG4ndCBtYXRj
aCBiZWNhdXNlIHRoZSB0YWcgaXMgaW4gYSBkaWZmZXJlbnQgc2NvcGUsIGUuZy4sCiAgICAgICAg
IC8vIDxiPjxwPkZvbzwvYj4uICBUcnkgdG8gY29ycmVjdCB0aGUgcHJvYmxlbS4KLSAgICAgICAg
aWYgKCFpc1Jlc2lkdWFsU3R5bGVUYWcoX2lkKSkKKyAgICAgICAgaWYgKCFpc1Jlc2lkdWFsU3R5
bGVUYWcoX3RhZ05hbWUpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICByZXR1cm4gaGFu
ZGxlUmVzaWR1YWxTdHlsZUNsb3NlVGFnQWNyb3NzQmxvY2tzKEVsZW0pOwogICAgIH0KIAotICAg
IGJvb2wgaXNBZmZlY3RlZEJ5U3R5bGUgPSBpc0FmZmVjdGVkQnlSZXNpZHVhbFN0eWxlKEVsZW0t
PmlkKTsKKyAgICBib29sIGlzQWZmZWN0ZWRCeVN0eWxlID0gaXNBZmZlY3RlZEJ5UmVzaWR1YWxT
dHlsZShFbGVtLT50YWdOYW1lKTsKICAgICBIVE1MU3RhY2tFbGVtKiByZXNpZHVhbFN0eWxlU3Rh
Y2sgPSAwOwogICAgIE5vZGVJbXBsKiBtYWxmb3JtZWRUYWJsZVBhcmVudCA9IDA7CiAgICAgCiAg
ICAgRWxlbSA9IGJsb2NrU3RhY2s7Ci0gICAgd2hpbGUgKEVsZW0pCi0gICAgewotICAgICAgICBp
ZiAoRWxlbS0+aWQgPT0gX2lkKQotICAgICAgICB7CisgICAgd2hpbGUgKEVsZW0pIHsKKyAgICAg
ICAgaWYgKEVsZW0tPnRhZ05hbWUgPT0gX3RhZ05hbWUpIHsKICAgICAgICAgICAgIGludCBzdHJh
eVRhYmxlID0gaW5TdHJheVRhYmxlQ29udGVudDsKICAgICAgICAgICAgIHBvcE9uZUJsb2NrKCk7
CiAgICAgICAgICAgICBFbGVtID0gMDsKQEAgLTEzNjksMTQgKzEyNzgsMTMgQEAgdm9pZCBLSFRN
TFBhcnNlcjo6cG9wQmxvY2soIGludCBfaWQgKQogICAgICAgICAgICAgLy8gbXVzdCBhbHNvIGtu
b3cgdGhhdCBpdCBpcyB0aGUgcm9vdCBvZiBtYWxmb3JtZWQgY29udGVudCBpbnNpZGUgYSA8dGJv
ZHk+Lzx0cj4uCiAgICAgICAgICAgICBpZiAoc3RyYXlUYWJsZSAmJiAoaW5TdHJheVRhYmxlQ29u
dGVudCA8IHN0cmF5VGFibGUpICYmIHJlc2lkdWFsU3R5bGVTdGFjaykgewogICAgICAgICAgICAg
ICAgIE5vZGVJbXBsKiBjdXJyID0gY3VycmVudDsKLSAgICAgICAgICAgICAgICB3aGlsZSAoY3Vy
ciAmJiBjdXJyLT5pZCgpICE9IElEX1RBQkxFKQorICAgICAgICAgICAgICAgIHdoaWxlIChjdXJy
ICYmICFjdXJyLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGFibGUoKSkpCiAgICAgICAgICAgICAg
ICAgICAgIGN1cnIgPSBjdXJyLT5wYXJlbnROb2RlKCk7CiAgICAgICAgICAgICAgICAgbWFsZm9y
bWVkVGFibGVQYXJlbnQgPSBjdXJyID8gY3Vyci0+cGFyZW50Tm9kZSgpIDogMDsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlm
IChFbGVtLT5pZCA9PSBJRF9GT1JNICYmIGZvcm0pCisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgaWYgKGZvcm0gJiYgRWxlbS0+dGFnTmFtZSA9PSBIVE1MTmFtZXM6OmZvcm0oKSkKICAgICAg
ICAgICAgICAgICAvLyBBIDxmb3JtPiBpcyBiZWluZyBjbG9zZWQgcHJlbWF0dXJlbHkgKGFuZCB0
aGlzIGlzCiAgICAgICAgICAgICAgICAgLy8gbWFsZm9ybWVkIEhUTUwpLiAgU2V0IGFuIGF0dHJp
YnV0ZSBvbiB0aGUgZm9ybSB0byBjbGVhciBvdXQgaXRzCiAgICAgICAgICAgICAgICAgLy8gYm90
dG9tIG1hcmdpbi4KQEAgLTEzODUsNyArMTI5Myw3IEBAIHZvaWQgS0hUTUxQYXJzZXI6OnBvcEJs
b2NrKCBpbnQgX2lkICkKICAgICAgICAgICAgIC8vIFNjaGVkdWxlIHRoaXMgdGFnIGZvciByZW9w
ZW5pbmcKICAgICAgICAgICAgIC8vIGFmdGVyIHdlIGNvbXBsZXRlIHRoZSBjbG9zZSBvZiB0aGlz
IGVudGlyZSBibG9jay4KICAgICAgICAgICAgIE5vZGVJbXBsKiBjdXJyTm9kZSA9IGN1cnJlbnQ7
Ci0gICAgICAgICAgICBpZiAoaXNBZmZlY3RlZEJ5U3R5bGUgJiYgaXNSZXNpZHVhbFN0eWxlVGFn
KEVsZW0tPmlkKSkgeworICAgICAgICAgICAgaWYgKGlzQWZmZWN0ZWRCeVN0eWxlICYmIGlzUmVz
aWR1YWxTdHlsZVRhZyhFbGVtLT50YWdOYW1lKSkgewogICAgICAgICAgICAgICAgIC8vIFdlJ3Zl
IG92ZXJsb2FkZWQgdGhlIHVzZSBvZiBzdGFjayBlbGVtZW50cyBhbmQgYXJlIGp1c3QgcmV1c2lu
ZyB0aGUKICAgICAgICAgICAgICAgICAvLyBzdHJ1Y3Qgd2l0aCBhIHNsaWdodGx5IGRpZmZlcmVu
dCBtZWFuaW5nIHRvIHRoZSB2YXJpYWJsZXMuICBJbnN0ZWFkIG9mIGNoYWluaW5nCiAgICAgICAg
ICAgICAgICAgLy8gZnJvbSBpbm5lcm1vc3QgdG8gb3V0ZXJtb3N0LCB3ZSBidWlsZCB1cCBhIGxp
c3Qgb2YgYWxsIHRoZSB0YWdzIHdlIG5lZWQgdG8gcmVvcGVuCkBAIC0xNDMzLDggKzEzNDEsNiBA
QCB2b2lkIEtIVE1MUGFyc2VyOjpwb3BPbmVCbG9jayhib29sIGRlbEJsCiAgICAgfQogI2VuZGlm
CiAKLSAgICByZW1vdmVGb3JiaWRkZW4oRWxlbS0+aWQsIGZvcmJpZGRlblRhZyk7Ci0KICAgICBi
bG9ja1N0YWNrID0gRWxlbS0+bmV4dDsKICAgICBzZXRDdXJyZW50KEVsZW0tPm5vZGUpOwogCkBA
IC0xNDQ3LDcgKzEzNTMsNyBAQCB2b2lkIEtIVE1MUGFyc2VyOjpwb3BPbmVCbG9jayhib29sIGRl
bEJsCiAKIHZvaWQgS0hUTUxQYXJzZXI6OnBvcElubGluZUJsb2NrcygpCiB7Ci0gICAgd2hpbGUg
KGJsb2NrU3RhY2sgJiYgY3VycmVudC0+aXNJbmxpbmUoKSkKKyAgICB3aGlsZSAoYmxvY2tTdGFj
ayAmJiBpc0lubGluZShjdXJyZW50KSkKICAgICAgICAgcG9wT25lQmxvY2soKTsKIH0KIApJbmRl
eDogV2ViQ29yZS9raHRtbC9odG1sL2h0bWxwYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
bG9jYWwvaG9tZS9jdnMvTGFieXJpbnRoL1dlYkNvcmUva2h0bWwvaHRtbC9odG1scGFyc2VyLmgs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjcKZGlmZiAtdSAtcCAtcjEuMjcgV2ViQ29yZS9raHRt
bC9odG1sL2h0bWxwYXJzZXIuaAotLS0gV2ViQ29yZS9raHRtbC9odG1sL2h0bWxwYXJzZXIuaAky
MDA1LzAxLzA2IDIxOjEzOjE2CTEuMjcKKysrIFdlYkNvcmUva2h0bWwvaHRtbC9odG1scGFyc2Vy
LmgJMjAwNS8wNi8wMiAwNDoxMjoxMwpAQCAtODksNyArODksNyBAQCBwdWJsaWM6CiAgICAgICov
CiAgICAgdm9pZCByZXNldCgpOwogCi0gICAgYm9vbCBza2lwTW9kZSgpIGNvbnN0IHsgcmV0dXJu
IChkaXNjYXJkX3VudGlsICE9IDApOyB9CisgICAgYm9vbCBza2lwTW9kZSgpIGNvbnN0IHsgcmV0
dXJuICFkaXNjYXJkX3VudGlsLmlzTnVsbCgpOyB9CiAgICAgYm9vbCBub1NwYWNlcygpIGNvbnN0
IHsgcmV0dXJuICFpbkJvZHk7IH0KICAgICBib29sIHNlbGVjdE1vZGUoKSBjb25zdCB7IHJldHVy
biBpblNlbGVjdDsgfQogCkBAIC05Nyw3ICs5Nyw4IEBAIHB1YmxpYzoKICAgICBET006OkRvY3Vt
ZW50UHRyICpkb2NQdHIoKSBjb25zdCB7IHJldHVybiBkb2N1bWVudDsgfQogCiBwcm90ZWN0ZWQ6
Ci0gICAgdm9pZCBzZXRDdXJyZW50KERPTTo6Tm9kZUltcGwgKm5ld0N1cnJlbnQpOworICAgIHZv
aWQgc2V0Q3VycmVudChET006Ok5vZGVJbXBsKiBuZXdDdXJyZW50KTsKKyAgICB2b2lkIHNldFNr
aXBNb2RlKGNvbnN0IERPTTo6UXVhbGlmaWVkTmFtZSYgcU5hbWUpIHsgZGlzY2FyZF91bnRpbCA9
IHFOYW1lLmxvY2FsTmFtZSgpOyB9CiAKICAgICBLSFRNTFZpZXcgKkhUTUxXaWRnZXQ7CiAgICAg
RE9NOjpEb2N1bWVudFB0ciAqZG9jdW1lbnQ7CkBAIC0xMTEsMTcgKzExMiwxNiBAQCBwcm90ZWN0
ZWQ6CiAKICAgICBib29sIGluc2VydE5vZGUoRE9NOjpOb2RlSW1wbCAqbiwgYm9vbCBmbGF0ID0g
ZmFsc2UpOwogCi0gICAgLyoKLSAgICAgKiBUaGUgY3VycmVudGx5IGFjdGl2ZSBlbGVtZW50ICh0
aGUgb25lIG5ldyBlbGVtZW50cyB3aWxsIGJlIGFkZGVkIHRvKQotICAgICAqLwotICAgIERPTTo6
Tm9kZUltcGwgKmN1cnJlbnQ7CisgICAgLy8gVGhlIGN1cnJlbnRseSBhY3RpdmUgZWxlbWVudCAo
dGhlIG9uZSBuZXcgZWxlbWVudHMgd2lsbCBiZSBhZGRlZCB0bykuICBDYW4gYmUgYSBEb2N1bWVu
dEZyYWdtZW50LCBhIERvY3VtZW50IG9yIGFuIEVsZW1lbnQuCisgICAgRE9NOjpOb2RlSW1wbCog
Y3VycmVudDsKKwogICAgIGJvb2wgY3VycmVudElzUmVmZXJlbmNlZDsKIAogICAgIEhUTUxTdGFj
a0VsZW0gKmJsb2NrU3RhY2s7CiAKLSAgICB2b2lkIHB1c2hCbG9jayggaW50IF9pZCwgaW50IF9s
ZXZlbCk7Ci0KLSAgICB2b2lkIHBvcEJsb2NrKCBpbnQgX2lkICk7CisgICAgdm9pZCBwdXNoQmxv
Y2soY29uc3QgRE9NOjpBdG9taWNTdHJpbmcmIHRhZ05hbWUsIGludCBfbGV2ZWwpOworICAgIHZv
aWQgcG9wQmxvY2soY29uc3QgRE9NOjpBdG9taWNTdHJpbmcmIHRhZ05hbWUpOworICAgIHZvaWQg
cG9wQmxvY2soY29uc3QgRE9NOjpRdWFsaWZpZWROYW1lJiBxTmFtZSkgeyByZXR1cm4gcG9wQmxv
Y2socU5hbWUubG9jYWxOYW1lKCkpOyB9IC8vIENvbnZlbmllbmNlIGZ1bmN0aW9uIGZvciByZWFk
YWJpbGl0eS4KICAgICB2b2lkIHBvcE9uZUJsb2NrKGJvb2wgZGVsQmxvY2sgPSB0cnVlKTsKICAg
ICB2b2lkIHBvcElubGluZUJsb2NrcygpOwogCkBAIC0xMjksMTYgKzEyOSwxOCBAQCBwcm90ZWN0
ZWQ6CiAKICAgICB2b2lkIGNyZWF0ZUhlYWQoKTsKIAotICAgIGJvb2wgaXNSZXNpZHVhbFN0eWxl
VGFnKGludCBfaWQpOwotICAgIGJvb2wgaXNBZmZlY3RlZEJ5UmVzaWR1YWxTdHlsZShpbnQgX2lk
KTsKKyAgICBib29sIGlzUmVzaWR1YWxTdHlsZVRhZyhjb25zdCBET006OkF0b21pY1N0cmluZyYg
dGFnTmFtZSk7CisgICAgYm9vbCBpc0FmZmVjdGVkQnlSZXNpZHVhbFN0eWxlKGNvbnN0IERPTTo6
QXRvbWljU3RyaW5nJiB0YWdOYW1lKTsKICAgICB2b2lkIGhhbmRsZVJlc2lkdWFsU3R5bGVDbG9z
ZVRhZ0Fjcm9zc0Jsb2NrcyhIVE1MU3RhY2tFbGVtKiBlbGVtKTsKICAgICB2b2lkIHJlb3BlblJl
c2lkdWFsU3R5bGVUYWdzKEhUTUxTdGFja0VsZW0qIGVsZW0sIERPTTo6Tm9kZUltcGwqIG1hbGZv
cm1lZFRhYmxlUGFyZW50KTsKIAotICAgIGJvb2wgYWxsb3dOZXN0ZWRSZWR1bmRhbnRUYWcoaW50
IF9pZCk7CisgICAgYm9vbCBhbGxvd05lc3RlZFJlZHVuZGFudFRhZyhjb25zdCBET006OkF0b21p
Y1N0cmluZyYgdGFnTmFtZSk7CiAgICAgCi0gICAgc3RhdGljIGJvb2wgaXNIZWFkZXJUYWcoaW50
IF9pZCk7CisgICAgc3RhdGljIGJvb2wgaXNIZWFkZXJUYWcoY29uc3QgRE9NOjpBdG9taWNTdHJp
bmcmIHRhZ05hbWUpOwogICAgIHZvaWQgcG9wTmVzdGVkSGVhZGVyVGFnKCk7CiAKKyAgICBib29s
IGlzSW5saW5lKERPTTo6Tm9kZUltcGwqIG5vZGUpIGNvbnN0OworICAgIAogICAgIC8qCiAgICAg
ICogY3VycmVudGx5IGFjdGl2ZSBmb3JtCiAgICAgICovCkBAIC0xNzUsMTQgKzE3NywxMiBAQCBw
cm90ZWN0ZWQ6CiAgICAgLyoKICAgICAgKiB0ZWxscyB0aGUgcGFyc2VyIHRvIGRpc2NhcmQgYWxs
IHRhZ3MsIHVudGlsIGl0IHJlYWNoZXMgdGhlIG9uZSBzcGVjaWZpZWQKICAgICAgKi8KLSAgICBp
bnQgZGlzY2FyZF91bnRpbDsKKyAgICBET006OkF0b21pY1N0cmluZyBkaXNjYXJkX3VudGlsOwog
CiAgICAgYm9vbCBoZWFkTG9hZGVkOwogICAgIGludCBpblN0cmF5VGFibGVDb250ZW50OwogCiAg
ICAgYm9vbCBpbmNsdWRlc0NvbW1lbnRzSW5ET007Ci0gICAgCi0gICAgdXNob3J0IGZvcmJpZGRl
blRhZ1tJRF9MQVNUX1RBRyArIDFdOwogICAgIAogI2lmIFNQRUVEX0RFQlVHID4gMAogICAgIFFU
aW1lIHF0OwpJbmRleDogV2ViQ29yZS9raHRtbC9odG1sL2h0bWx0b2tlbml6ZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9sb2NhbC9ob21lL2N2cy9MYWJ5cmludGgvV2ViQ29yZS9raHRtbC9o
dG1sL2h0bWx0b2tlbml6ZXIuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjkxCmRpZmYgLXUg
LXAgLXIxLjkxIFdlYkNvcmUva2h0bWwvaHRtbC9odG1sdG9rZW5pemVyLmNwcAotLS0gV2ViQ29y
ZS9raHRtbC9odG1sL2h0bWx0b2tlbml6ZXIuY3BwCTIwMDUvMDUvMTMgMTY6NDg6NTEJMS45MQor
KysgV2ViQ29yZS9raHRtbC9odG1sL2h0bWx0b2tlbml6ZXIuY3BwCTIwMDUvMDYvMDIgMDQ6MTI6
MTUKQEAgLTYyLDkgKzYyLDggQEAgdXNpbmcgRE9NOjpBdHRyaWJ1dGVJbXBsOwogdXNpbmcgRE9N
OjpET01TdHJpbmc7CiB1c2luZyBET006OkRPTVN0cmluZ0ltcGw7CiB1c2luZyBET006OkRvY3Vt
ZW50SW1wbDsKLXVzaW5nIERPTTo6Rk9SQklEREVOOwogdXNpbmcgRE9NOjplbXB0eUF0b207Ci11
c2luZyBET006OmVuZFRhZ1JlcXVpcmVtZW50OwordXNpbmcgRE9NOjpIVE1MTmFtZXM7CiAKIC8v
IHR1cm4gb2ZmIGlubGluaW5nIHRvIHZvaWQgd2FybmluZyB3aXRoIG5ld2VyIGdjYwogI3VuZGVm
IF9faW5saW5lCkBAIC00NTIsMTAgKzQ1MSwxMCBAQCB2b2lkIEhUTUxUb2tlbml6ZXI6OnBhcnNl
U3BlY2lhbChUb2tlbml6CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBwcm9j
ZXNzTGlzdGluZyhUb2tlbml6ZXJTdHJpbmcoc2NyaXB0Q29kZSwgc2NyaXB0Q29kZVNpemUpKTsK
ICAgICAgICAgICAgICAgICBwcm9jZXNzVG9rZW4oKTsKLSAgICAgICAgICAgICAgICBpZiAoIHN0
eWxlICkgICAgICAgICB7IGN1cnJUb2tlbi5pZCA9IElEX1NUWUxFICsgSURfQ0xPU0VfVEFHOyB9
Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoIHRleHRhcmVhICkgeyBjdXJyVG9rZW4uaWQgPSBJ
RF9URVhUQVJFQSArIElEX0NMT1NFX1RBRzsgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKCB0
aXRsZSApIHsgY3VyclRva2VuLmlkID0gSURfVElUTEUgKyBJRF9DTE9TRV9UQUc7IH0KLSAgICAg
ICAgICAgICAgICBlbHNlIGlmICggeG1wICkgIHsgY3VyclRva2VuLmlkID0gSURfWE1QICsgSURf
Q0xPU0VfVEFHOyB9CisgICAgICAgICAgICAgICAgaWYgKCBzdHlsZSApICAgICAgICAgeyBjdXJy
VG9rZW4udGFnTmFtZSA9IEhUTUxOYW1lczo6c3R5bGUoKS5sb2NhbE5hbWUoKTsgY3VyclRva2Vu
LmJlZ2luVGFnID0gZmFsc2U7IH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmICggdGV4dGFyZWEg
KSB7IGN1cnJUb2tlbi50YWdOYW1lID0gSFRNTE5hbWVzOjp0ZXh0YXJlYSgpLmxvY2FsTmFtZSgp
OyBjdXJyVG9rZW4uYmVnaW5UYWcgPSBmYWxzZTsgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYg
KCB0aXRsZSApIHsgY3VyclRva2VuLnRhZ05hbWUgPSBIVE1MTmFtZXM6OnRpdGxlKCkubG9jYWxO
YW1lKCk7IGN1cnJUb2tlbi5iZWdpblRhZyA9IGZhbHNlOyB9CisgICAgICAgICAgICAgICAgZWxz
ZSBpZiAoIHhtcCApICB7IGN1cnJUb2tlbi50YWdOYW1lID0gSFRNTE5hbWVzOjp4bXAoKS5sb2Nh
bE5hbWUoKTsgY3VyclRva2VuLmJlZ2luVGFnID0gZmFsc2U7IH0KICAgICAgICAgICAgICAgICBw
cm9jZXNzVG9rZW4oKTsKICAgICAgICAgICAgICAgICBzdHlsZSA9IHNjcmlwdCA9IHN0eWxlID0g
dGV4dGFyZWEgPSB0aXRsZSA9IHhtcCA9IGZhbHNlOwogICAgICAgICAgICAgICAgIHRxdW90ZSA9
IE5vUXVvdGU7CkBAIC01MjUsNyArNTI0LDggQEAgdm9pZCBIVE1MVG9rZW5pemVyOjpzY3JpcHRI
YW5kbGVyKCkKICAgICBwcm9jZXNzTGlzdGluZyhUb2tlbml6ZXJTdHJpbmcoc2NyaXB0Q29kZSwg
c2NyaXB0Q29kZVNpemUpKTsKICAgICBRU3RyaW5nIGV4U2NyaXB0KCBidWZmZXIsIGRlc3QtYnVm
ZmVyICk7CiAgICAgcHJvY2Vzc1Rva2VuKCk7Ci0gICAgY3VyclRva2VuLmlkID0gSURfU0NSSVBU
ICsgSURfQ0xPU0VfVEFHOworICAgIGN1cnJUb2tlbi50YWdOYW1lID0gSFRNTE5hbWVzOjpzY3Jp
cHQoKS5sb2NhbE5hbWUoKTsKKyAgICBjdXJyVG9rZW4uYmVnaW5UYWcgPSBmYWxzZTsKICAgICBw
cm9jZXNzVG9rZW4oKTsKIAogICAgIFRva2VuaXplclN0cmluZyAqc2F2ZWRQcmVwZW5kaW5nU3Jj
ID0gY3VycmVudFByZXBlbmRpbmdTcmM7CkBAIC03MDIsMTAgKzcwMiwxMSBAQCB2b2lkIEhUTUxU
b2tlbml6ZXI6OnBhcnNlQ29tbWVudChUb2tlbml6CiAgICAgICAgICAgICAgICAgICAgICAgICBj
aGVja1NjcmlwdEJ1ZmZlcigpOwogICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0Q29kZVsg
c2NyaXB0Q29kZVNpemUgXSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHRDb2Rl
WyBzY3JpcHRDb2RlU2l6ZSArIDEgXSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjdXJy
VG9rZW4uaWQgPSBJRF9DT01NRU5UOworICAgICAgICAgICAgICAgICAgICAgICAgY3VyclRva2Vu
LnRhZ05hbWUgPSBjb21tZW50QXRvbTsKICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NM
aXN0aW5nKFRva2VuaXplclN0cmluZyhzY3JpcHRDb2RlLCBzY3JpcHRDb2RlU2l6ZSAtIGVuZENo
YXJzQ291bnQpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NUb2tlbigpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgY3VyclRva2VuLmlkID0gSURfQ09NTUVOVCArIElEX0NMT1NF
X1RBRzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJUb2tlbi50YWdOYW1lID0gY29tbWVu
dEF0b207CisgICAgICAgICAgICAgICAgICAgICAgICBjdXJyVG9rZW4uYmVnaW5UYWcgPSBmYWxz
ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NUb2tlbigpOwogICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIHNjcmlwdENvZGVTaXplID0gMDsKQEAgLTEw
NjcsNyArMTA2OCw4IEBAIHZvaWQgSFRNTFRva2VuaXplcjo6cGFyc2VUYWcoVG9rZW5pemVyU3QK
ICAgICAgICAgICAgICAgICAgICAgUUNTdHJpbmcgdG1wKHB0ciwgbGVuKzEpOwogICAgICAgICAg
ICAgICAgICAgICBrZERlYnVnKCA2MDM2ICkgPDwgImZvdW5kIHRhZyBpZD0iIDw8IHRhZ0lEIDw8
ICI6ICIgPDwgdG1wLmRhdGEoKSA8PCBlbmRsOwogI2VuZGlmCi0gICAgICAgICAgICAgICAgICAg
IGN1cnJUb2tlbi5pZCA9IGJlZ2luVGFnID8gdGFnSUQgOiB0YWdJRCArIElEX0NMT1NFX1RBRzsK
KyAgICAgICAgICAgICAgICAgICAgY3VyclRva2VuLmlkID0gdGFnSUQ7CisgICAgICAgICAgICAg
ICAgICAgIGN1cnJUb2tlbi5iZWdpblRhZyA9IGJlZ2luVGFnOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICBkZXN0ID0gYnVmZmVyOwogICAgICAgICAgICAgICAgIHRhZyA9IFNl
YXJjaEF0dHJpYnV0ZTsKSW5kZXg6IFdlYkNvcmUva2h0bWwvaHRtbC9odG1sdG9rZW5pemVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2xvY2FsL2hvbWUvY3ZzL0xhYnlyaW50aC9XZWJDb3JlL2to
dG1sL2h0bWwvaHRtbHRva2VuaXplci5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjM0CmRpZmYg
LXUgLXAgLXIxLjM0IFdlYkNvcmUva2h0bWwvaHRtbC9odG1sdG9rZW5pemVyLmgKLS0tIFdlYkNv
cmUva2h0bWwvaHRtbC9odG1sdG9rZW5pemVyLmgJMjAwNS8wNS8xMSAwNTo0OTozNAkxLjM0Cisr
KyBXZWJDb3JlL2todG1sL2h0bWwvaHRtbHRva2VuaXplci5oCTIwMDUvMDYvMDIgMDQ6MTI6MTUK
QEAgLTM0LDggKzM0LDYgQEAKICNpbmNsdWRlIDxxcHRycXVldWUuaD4KIAogI2luY2x1ZGUgIm1p
c2MvbG9hZGVyX2NsaWVudC5oIgotI2luY2x1ZGUgIm1pc2MvaHRtbHRhZ3MuaCIKLSNpbmNsdWRl
ICJ4bWwvZG9tX3N0cmluZ2ltcGwuaCIKICNpbmNsdWRlICJ4bWwveG1sX3Rva2VuaXplci5oIgog
I2luY2x1ZGUgImh0bWwvaHRtbF9lbGVtZW50aW1wbC5oIgogI2luY2x1ZGUgInhtbC9kb21fZG9j
aW1wbC5oIgpAQCAtNzAsMjIgKzY4LDI0IEBAIGNsYXNzIFRva2VuCiB7CiBwdWJsaWM6CiAgICAg
VG9rZW4oKSB7Ci0gICAgICAgIGlkID0gMDsKICAgICAgICAgYXR0cnMgPSAwOwogICAgICAgICB0
ZXh0ID0gMDsKKyAgICAgICAgYmVnaW5UYWcgPSB0cnVlOwogICAgICAgICBmbGF0ID0gZmFsc2U7
CiAgICAgICAgIC8vcURlYnVnKCJuZXcgdG9rZW4sIGNyZWF0aW5nICUwOGx4IiwgYXR0cnMpOwog
ICAgIH0KKwogICAgIH5Ub2tlbigpIHsKLSAgICAgICAgaWYoYXR0cnMpIGF0dHJzLT5kZXJlZigp
OwotICAgICAgICBpZih0ZXh0KSB0ZXh0LT5kZXJlZigpOworICAgICAgICBpZiAoYXR0cnMpIGF0
dHJzLT5kZXJlZigpOworICAgICAgICBpZiAodGV4dCkgdGV4dC0+ZGVyZWYoKTsKICAgICB9CisK
ICAgICB2b2lkIGFkZEF0dHJpYnV0ZShET006OkRvY3VtZW50SW1wbCogZG9jLCBRQ2hhciogYnVm
ZmVyLCBjb25zdCBRU3RyaW5nJiBhdHRyTmFtZSwgY29uc3QgRE9NOjpBdG9taWNTdHJpbmcmIHYp
CiAgICAgewogICAgICAgICBET006OkF0dHJpYnV0ZUltcGwqIGEgPSAwOwotICAgICAgICBpZihi
dWZmZXItPnVuaWNvZGUoKSkKKyAgICAgICAgaWYgKGJ1ZmZlci0+dW5pY29kZSgpKQogICAgICAg
ICAgICAgYSA9IG5ldyBET006Ok1hcHBlZEF0dHJpYnV0ZUltcGwoYnVmZmVyLT51bmljb2RlKCks
IHYpOwotICAgICAgICBlbHNlIGlmICggIWF0dHJOYW1lLmlzRW1wdHkoKSAmJiBhdHRyTmFtZSAh
PSAiLyIgKQorICAgICAgICBlbHNlIGlmICghYXR0ck5hbWUuaXNFbXB0eSgpICYmIGF0dHJOYW1l
ICE9ICIvIikKICAgICAgICAgICAgIGEgPSBuZXcgRE9NOjpNYXBwZWRBdHRyaWJ1dGVJbXBsKGRv
Yy0+YXR0cklkKDAsIERPTTo6RE9NU3RyaW5nKGF0dHJOYW1lKS5pbXBsZW1lbnRhdGlvbigpLCBm
YWxzZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2KTsK
IApAQCAtOTcsMjMgKzk3LDMzIEBAIHB1YmxpYzoKICAgICAgICAgICAgIGF0dHJzLT5pbnNlcnRB
dHRyaWJ1dGUoYSk7CiAgICAgICAgIH0KICAgICB9CisKKyAgICBib29sIGlzT3BlblRhZyhjb25z
dCBET006OlF1YWxpZmllZE5hbWUmIGZ1bGxOYW1lKSBjb25zdCB7IHJldHVybiBiZWdpblRhZyAm
JiBmdWxsTmFtZS5sb2NhbE5hbWUoKSA9PSB0YWdOYW1lOyB9CisgICAgYm9vbCBpc0Nsb3NlVGFn
KGNvbnN0IERPTTo6UXVhbGlmaWVkTmFtZSYgZnVsbE5hbWUpIGNvbnN0IHsgcmV0dXJuICFiZWdp
blRhZyAmJiBmdWxsTmFtZS5sb2NhbE5hbWUoKSA9PSB0YWdOYW1lOyB9CisKICAgICB2b2lkIHJl
c2V0KCkKICAgICB7Ci0gICAgICAgIGlmKGF0dHJzKSB7CisgICAgICAgIGlmIChhdHRycykgewog
ICAgICAgICAgICAgYXR0cnMtPmRlcmVmKCk7CiAgICAgICAgICAgICBhdHRycyA9IDA7CiAgICAg
ICAgIH0KLSAgICAgICAgaWQgPSAwOwotICAgICAgICBpZih0ZXh0KSB7CisgICAgICAgIAorICAg
ICAgICB0YWdOYW1lID0gRE9NOjpudWxsQXRvbTsKKyAgICAgICAgCisgICAgICAgIGlmICh0ZXh0
KSB7CiAgICAgICAgICAgICB0ZXh0LT5kZXJlZigpOwogICAgICAgICAgICAgdGV4dCA9IDA7CiAg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGJlZ2luVGFnID0gdHJ1ZTsKICAgICAgICAgZmxh
dCA9IGZhbHNlOwogICAgIH0KKwogICAgIERPTTo6TmFtZWRNYXBwZWRBdHRyTWFwSW1wbCogYXR0
cnM7CiAgICAgRE9NOjpET01TdHJpbmdJbXBsKiB0ZXh0OwotICAgIHVzaG9ydCBpZDsKLSAgICBi
b29sIGZsYXQ7CisgICAgRE9NOjpBdG9taWNTdHJpbmcgdGFnTmFtZTsKKyAgICBib29sIGJlZ2lu
VGFnIDogMTsKKyAgICBib29sIGZsYXQgOiAxOwogfTsKIAogLy8gVGhlIGNvdW50IG9mIHNwYWNl
cyB1c2VkIGZvciBlYWNoIHRhYi4KSW5kZXg6IFdlYkNvcmUva2h0bWwveG1sL2RvbV9hdG9taWNz
dHJpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9sb2NhbC9ob21lL2N2cy9MYWJ5cmludGgv
V2ViQ29yZS9raHRtbC94bWwvZG9tX2F0b21pY3N0cmluZy5jcHAsdgpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuMwpkaWZmIC11IC1wIC1yMS4zIFdlYkNvcmUva2h0bWwveG1sL2RvbV9hdG9taWNzdHJp
bmcuY3BwCi0tLSBXZWJDb3JlL2todG1sL3htbC9kb21fYXRvbWljc3RyaW5nLmNwcAkyMDA0LzAy
LzA1IDAxOjQ1OjE2CTEuMworKysgV2ViQ29yZS9raHRtbC94bWwvZG9tX2F0b21pY3N0cmluZy5j
cHAJMjAwNS8wNi8wMiAwNDoxMjoxNQpAQCAtMzA0LDYgKzMwNCw5IEBAIHZvaWQgQXRvbWljU3Ry
aW5nOjpyZWhhc2goaW50IG5ld1RhYmxlU2kKIAogICAgIGV4dGVybiBjb25zdCBBdG9taWNTdHJp
bmcgbnVsbEF0b207CiAgICAgZXh0ZXJuIGNvbnN0IEF0b21pY1N0cmluZyBlbXB0eUF0b207Cisg
ICAgZXh0ZXJuIGNvbnN0IEF0b21pY1N0cmluZyB0ZXh0QXRvbTsKKyAgICBleHRlcm4gY29uc3Qg
QXRvbWljU3RyaW5nIGNvbW1lbnRBdG9tOworICAgIGV4dGVybiBjb25zdCBBdG9taWNTdHJpbmcg
c3RhckF0b207CiAjZWxzZQogICAgIC8vIERlZmluZSBhbiBBdG9taWNTdHJpbmctc2l6ZWQgYXJy
YXkgb2YgcG9pbnRlcnMgdG8gYXZvaWQgc3RhdGljIGluaXRpYWxpemF0aW9uLgogICAgIC8vIFVz
ZSBhbiBhcnJheSBvZiBwb2ludGVycyBpbnN0ZWFkIG9mIGFuIGFycmF5IG9mIGNoYXIgaW4gY2Fz
ZSB0aGVyZSBpcyBzb21lIGFsaWdubWVudCBpc3N1ZS4KQEAgLTMxMiw2ICszMTUsOSBAQCB2b2lk
IEF0b21pY1N0cmluZzo6cmVoYXNoKGludCBuZXdUYWJsZVNpCiAKICAgICBERUZJTkVfR0xPQkFM
KG51bGwsIGlnbm9yZWQpCiAgICAgREVGSU5FX0dMT0JBTChlbXB0eSwgaWdub3JlZCkKKyAgICBE
RUZJTkVfR0xPQkFMKHRleHQsIGlnbm9yZWQpCisgICAgREVGSU5FX0dMT0JBTChjb21tZW50LCBp
Z25vcmVkKQorICAgIERFRklORV9HTE9CQUwoc3RhciwgaWdub3JlZCkKICNlbmRpZgogCiAjZGVm
aW5lIENBTExfREVGSU5FX0dMT0JBTChuYW1lKSBERUZJTkVfR0xPQkFMKG5hbWUsICNuYW1lKQpA
QCAtMzI1LDcgKzMzMSwxMCBAQCB2b2lkIEF0b21pY1N0cmluZzo6aW5pdCgpCiAgICAgICAgIC8v
IFVzZSBwbGFjZW1lbnQgbmV3IHRvIGluaXRpYWxpemUgdGhlIGdsb2JhbHMuCiAgICAgICAgIG5l
dyAoJm51bGxBdG9tKSBBdG9taWNTdHJpbmc7CiAgICAgICAgIG5ldyAoJmVtcHR5QXRvbSkgQXRv
bWljU3RyaW5nKCIiKTsKLSAgICAgICAgCisgICAgICAgIG5ldyAoJnRleHRBdG9tKSBBdG9taWNT
dHJpbmcoIiN0ZXh0Iik7CisgICAgICAgIG5ldyAoJmNvbW1lbnRBdG9tKSBBdG9taWNTdHJpbmco
IiNjb21tZW50Iik7CisgICAgICAgIG5ldyAoJnN0YXJBdG9tKSBBdG9taWNTdHJpbmcoIioiKTsK
KwogICAgICAgICAjZGVmaW5lIFBMQUNFTUVOVF9ORVdfR0xPQkFMKG5hbWUsIHN0cmluZykgbmV3
ICgmbmFtZSAjIyBQcm9wZXJ0eU5hbWUpIEF0b21pY1N0cmluZyhzdHJpbmcpOwogICAgICAgICAj
ZGVmaW5lIENBTExfUExBQ0VNRU5UX05FV19HTE9CQUwobmFtZSkgUExBQ0VNRU5UX05FV19HTE9C
QUwobmFtZSwgI25hbWUpCiAgICAgICAgIEtIVE1MX0FUT01JQ1NUUklOR19FQUNIX0dMT0JBTChD
QUxMX1BMQUNFTUVOVF9ORVdfR0xPQkFMKQpJbmRleDogV2ViQ29yZS9raHRtbC94bWwvZG9tX2F0
b21pY3N0cmluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9sb2NhbC9ob21lL2N2cy9MYWJ5cmlu
dGgvV2ViQ29yZS9raHRtbC94bWwvZG9tX2F0b21pY3N0cmluZy5oLHYKcmV0cmlldmluZyByZXZp
c2lvbiAxLjIKZGlmZiAtdSAtcCAtcjEuMiBXZWJDb3JlL2todG1sL3htbC9kb21fYXRvbWljc3Ry
aW5nLmgKLS0tIFdlYkNvcmUva2h0bWwveG1sL2RvbV9hdG9taWNzdHJpbmcuaAkyMDA0LzAzLzAz
IDAwOjQyOjQ5CTEuMgorKysgV2ViQ29yZS9raHRtbC94bWwvZG9tX2F0b21pY3N0cmluZy5oCTIw
MDUvMDYvMDIgMDQ6MTI6MTUKQEAgLTExNSw2ICsxMTUsOSBAQCBpbmxpbmUgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IEF0b21pY1N0cmluCiAjaWYgIUtIVE1MX0FUT01JQ1NUUklOR19ISURFX0dMT0JB
TFMKICAgICBleHRlcm4gY29uc3QgQXRvbWljU3RyaW5nIG51bGxBdG9tOwogICAgIGV4dGVybiBj
b25zdCBBdG9taWNTdHJpbmcgZW1wdHlBdG9tOworICAgIGV4dGVybiBjb25zdCBBdG9taWNTdHJp
bmcgdGV4dEF0b207CisgICAgZXh0ZXJuIGNvbnN0IEF0b21pY1N0cmluZyBjb21tZW50QXRvbTsK
KyAgICBleHRlcm4gY29uc3QgQXRvbWljU3RyaW5nIHN0YXJBdG9tOwogI2RlZmluZSBLSFRNTF9B
VE9NSUNTVFJJTkdfREVDTEFSRV9HTE9CQUwobmFtZSkgZXh0ZXJuIGNvbnN0IEF0b21pY1N0cmlu
ZyBuYW1lICMjIFByb3BlcnR5TmFtZTsKICAgICBLSFRNTF9BVE9NSUNTVFJJTkdfRUFDSF9HTE9C
QUwoS0hUTUxfQVRPTUlDU1RSSU5HX0RFQ0xBUkVfR0xPQkFMKQogICAgIEtIVE1MX0FUT01JQ1NU
UklOR19ERUNMQVJFX0dMT0JBTChzcGVjaWFsUHJvdG90eXBlKQpJbmRleDogV2ViQ29yZS9raHRt
bC94bWwvZG9tX2RvY2ltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvbG9jYWwvaG9tZS9jdnMv
TGFieXJpbnRoL1dlYkNvcmUva2h0bWwveG1sL2RvbV9kb2NpbXBsLmgsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuMTE0CmRpZmYgLXUgLXAgLXIxLjExNCBXZWJDb3JlL2todG1sL3htbC9kb21fZG9j
aW1wbC5oCi0tLSBXZWJDb3JlL2todG1sL3htbC9kb21fZG9jaW1wbC5oCTIwMDUvMDUvMTMgMTY6
NDg6NTEJMS4xMTQKKysrIFdlYkNvcmUva2h0bWwveG1sL2RvbV9kb2NpbXBsLmgJMjAwNS8wNi8w
MiAwNDoxMjoxNgpAQCAtMjE3LDggKzIxNyw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wg
aXNEb2N1bWVudE5vZGUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBib29s
IGlzSFRNTERvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIEVsZW1lbnRJ
bXBsICpjcmVhdGVIVE1MRWxlbWVudChjb25zdCBET01TdHJpbmcgJnRhZ05hbWUsIGludCAmZXhj
ZXB0aW9uY29kZSk7Ci0gICAgRWxlbWVudEltcGwgKmNyZWF0ZUhUTUxFbGVtZW50KHVuc2lnbmVk
IHNob3J0IHRhZ0lEKTsKKyAgICBFbGVtZW50SW1wbCogY3JlYXRlSFRNTEVsZW1lbnQoY29uc3Qg
RE9NU3RyaW5nICZ0YWdOYW1lLCBpbnQgJmV4Y2VwdGlvbmNvZGUpOworICAgIEVsZW1lbnRJbXBs
KiBjcmVhdGVIVE1MRWxlbWVudChjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSk7CiAKICAg
ICBraHRtbDo6Q1NTU3R5bGVTZWxlY3RvciAqc3R5bGVTZWxlY3RvcigpIHsgcmV0dXJuIG1fc3R5
bGVTZWxlY3RvcjsgfQogCkBAIC0zOTgsOSArMzk4LDYgQEAgcHVibGljOgogICAgIC8vICMjIyB0
aGluayBhYm91dCBpbXBsZW1lbnRpbmcgcmVmJ2NvdW50aW5nIGZvciB0aGUgaWQncwogICAgIC8v
IGluIG9yZGVyIHRvIGJlIGFibGUgdG8gcmVhc3NpZ24gdGhvc2UgdGhhdCBhcmUgbm8gbG9uZ2Vy
IGluIHVzZQogICAgIC8vIChjb3VsZCBtYWtlIHByb2JsZW1zIHdoZW4gaXQgaXMgc3RpbGwga2Vw
dCBzb21ld2hlcmUgYXJvdW5kLCBpLmUuIHN0eWxlc2VsZWN0b3IpCi0gICAgTm9kZUltcGw6Oklk
IHRhZ0lkKERPTVN0cmluZ0ltcGwqIF9uYW1lc3BhY2VVUkksIERPTVN0cmluZ0ltcGwgKl9uYW1l
LCBib29sIHJlYWRvbmx5KTsKLSAgICBET01TdHJpbmcgdGFnTmFtZShOb2RlSW1wbDo6SWQgX2lk
KSBjb25zdDsKLQogICAgIE5vZGVJbXBsOjpJZCBhdHRySWQoRE9NU3RyaW5nSW1wbCogX25hbWVz
cGFjZVVSSSwgRE9NU3RyaW5nSW1wbCAqX25hbWUsIGJvb2wgcmVhZG9ubHkpOwogICAgIERPTVN0
cmluZyBhdHRyTmFtZShOb2RlSW1wbDo6SWQgX2lkKSBjb25zdDsKIApJbmRleDogV2ViQ29yZS9r
aHRtbC94bWwvZG9tX2VsZW1lbnRpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvbG9jYWwv
aG9tZS9jdnMvTGFieXJpbnRoL1dlYkNvcmUva2h0bWwveG1sL2RvbV9lbGVtZW50aW1wbC5jcHAs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNjcKZGlmZiAtdSAtcCAtcjEuNjcgV2ViQ29yZS9raHRt
bC94bWwvZG9tX2VsZW1lbnRpbXBsLmNwcAotLS0gV2ViQ29yZS9raHRtbC94bWwvZG9tX2VsZW1l
bnRpbXBsLmNwcAkyMDA1LzA1LzExIDA1OjQ5OjM1CTEuNjcKKysrIFdlYkNvcmUva2h0bWwveG1s
L2RvbV9lbGVtZW50aW1wbC5jcHAJMjAwNS8wNi8wMiAwNDoxMjoxNwpAQCAtOTAsMTggKzkwLDE4
IEBAIHVuc2lnbmVkIHNob3J0IEF0dHJJbXBsOjpub2RlVHlwZSgpIGNvbnMKICAgICByZXR1cm4g
Tm9kZTo6QVRUUklCVVRFX05PREU7CiB9CiAKLURPTVN0cmluZyBBdHRySW1wbDo6cHJlZml4KCkg
Y29uc3QKK2NvbnN0IEF0b21pY1N0cmluZyYgQXR0ckltcGw6OnByZWZpeCgpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIG1fYXR0cmlidXRlLT5wcmVmaXgoKTsKIH0KIAotdm9pZCBBdHRySW1wbDo6c2V0
UHJlZml4KGNvbnN0IERPTVN0cmluZyAmX3ByZWZpeCwgaW50ICZleGNlcHRpb25jb2RlICkKK3Zv
aWQgQXR0ckltcGw6OnNldFByZWZpeChjb25zdCBBdG9taWNTdHJpbmcgJl9wcmVmaXgsIGludCAm
ZXhjZXB0aW9uY29kZSApCiB7CiAgICAgY2hlY2tTZXRQcmVmaXgoX3ByZWZpeCwgZXhjZXB0aW9u
Y29kZSk7CiAgICAgaWYgKGV4Y2VwdGlvbmNvZGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1f
YXR0cmlidXRlLT5zZXRQcmVmaXgoX3ByZWZpeC5pbXBsZW1lbnRhdGlvbigpKTsKKyAgICBtX2F0
dHJpYnV0ZS0+c2V0UHJlZml4KF9wcmVmaXgpOwogfQogCiBET01TdHJpbmcgQXR0ckltcGw6Om5v
ZGVWYWx1ZSgpIGNvbnN0CkBAIC0yMDYsNyArMjA2LDYgQEAgRWxlbWVudEltcGw6OkVsZW1lbnRJ
bXBsKERvY3VtZW50UHRyICpkbwogICAgIDogQ29udGFpbmVyTm9kZUltcGwoZG9jKQogewogICAg
IG5hbWVkQXR0ck1hcCA9IDA7Ci0gICAgbV9wcmVmaXggPSAwOwogfQogCiBFbGVtZW50SW1wbDo6
fkVsZW1lbnRJbXBsKCkKQEAgLTIxNSw5ICsyMTQsNiBAQCBFbGVtZW50SW1wbDo6fkVsZW1lbnRJ
bXBsKCkKICAgICAgICAgbmFtZWRBdHRyTWFwLT5kZXRhY2hGcm9tRWxlbWVudCgpOwogICAgICAg
ICBuYW1lZEF0dHJNYXAtPmRlcmVmKCk7CiAgICAgfQotCi0gICAgaWYgKG1fcHJlZml4KQotICAg
ICAgICBtX3ByZWZpeC0+ZGVyZWYoKTsKIH0KIAogdm9pZCBFbGVtZW50SW1wbDo6cmVtb3ZlQXR0
cmlidXRlKCBOb2RlSW1wbDo6SWQgaWQsIGludCAmZXhjZXB0aW9uY29kZSApCkBAIC0zNTEsMzYg
KzM0NywyNSBAQCB2b2lkIEVsZW1lbnRJbXBsOjpzZXRBdHRyaWJ1dGVNYXAoIE5hbWVkCiBib29s
IEVsZW1lbnRJbXBsOjpoYXNBdHRyaWJ1dGVzKCkgY29uc3QKIHsKICAgICB1cGRhdGVTdHlsZUF0
dHJpYnV0ZUlmTmVlZGVkKCk7Ci0KICAgICByZXR1cm4gbmFtZWRBdHRyTWFwICYmIG5hbWVkQXR0
ck1hcC0+bGVuZ3RoKCkgPiAwOwogfQogCiBET01TdHJpbmcgRWxlbWVudEltcGw6Om5vZGVOYW1l
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gdGFnTmFtZSgpOwotfQotCi1ET01TdHJpbmcgRWxlbWVu
dEltcGw6OnRhZ05hbWUoKSBjb25zdAotewogICAgIERPTVN0cmluZyB0biA9IGdldERvY3VtZW50
KCktPnRhZ05hbWUoaWQoKSk7Ci0KLSAgICBpZiAobV9wcmVmaXgpCi0gICAgICAgIHJldHVybiBE
T01TdHJpbmcobV9wcmVmaXgpICsgIjoiICsgdG47Ci0KKyAgICBpZiAobV90YWdOYW1lLmhhc1By
ZWZpeCgpKQorICAgICAgICByZXR1cm4gRE9NU3RyaW5nKG1fdGFnTmFtZS5wcmVmaXgoKSkgKyAi
OiIgKyB0bjsKICAgICByZXR1cm4gdG47CiB9CiAKLXZvaWQgRWxlbWVudEltcGw6OnNldFByZWZp
eCggY29uc3QgRE9NU3RyaW5nICZfcHJlZml4LCBpbnQgJmV4Y2VwdGlvbmNvZGUgKQordm9pZCBF
bGVtZW50SW1wbDo6c2V0UHJlZml4KGNvbnN0IEF0b21pY1N0cmluZyAmX3ByZWZpeCwgaW50ICZl
eGNlcHRpb25jb2RlKQogewogICAgIGNoZWNrU2V0UHJlZml4KF9wcmVmaXgsIGV4Y2VwdGlvbmNv
ZGUpOwogICAgIGlmIChleGNlcHRpb25jb2RlKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAo
bV9wcmVmaXgpCi0gICAgICAgIG1fcHJlZml4LT5kZXJlZigpOwotICAgIG1fcHJlZml4ID0gX3By
ZWZpeC5pbXBsZW1lbnRhdGlvbigpOwotICAgIGlmIChtX3ByZWZpeCkKLSAgICAgICAgbV9wcmVm
aXgtPnJlZigpOworICAgIC8vIEZJWE1FOiBUaGlzIGlzIGp1c3QgYSBoYWNrIGZvciBzdGFnZSBv
bmUgb2YgdGhlIFRhZ05hbWUgcGF0Y2guICBJdCB3aWxsIGNoYW5nZS4KKyAgICBtX3RhZ05hbWUu
c2V0UHJlZml4KF9wcmVmaXgpOwogfQogCiB2b2lkIEVsZW1lbnRJbXBsOjpjcmVhdGVBdHRyaWJ1
dGVNYXAoKSBjb25zdApAQCAtNzgyLDE1ICs3NjcsMTkgQEAgWE1MRWxlbWVudEltcGw6OlhNTEVs
ZW1lbnRJbXBsKERvY3VtZW50UAogICAgICAgICBsb2NhbE5hbWUtPnJlbW92ZSgwLGNvbG9ucG9z
KzEpOwogICAgICAgICBtX2lkID0gZG9jLT5kb2N1bWVudCgpLT50YWdJZChfbmFtZXNwYWNlVVJJ
LCBsb2NhbE5hbWUsIGZhbHNlIC8qIGFsbG9jYXRlICovKTsKICAgICAgICAgbG9jYWxOYW1lLT5k
ZXJlZigpOwotICAgICAgICBtX3ByZWZpeCA9IF9xdWFsaWZpZWROYW1lLT5jb3B5KCk7Ci0gICAg
ICAgIG1fcHJlZml4LT5yZWYoKTsKLSAgICAgICAgbV9wcmVmaXgtPnRydW5jYXRlKGNvbG9ucG9z
KTsKKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgdGVtcG9yYXJ5IHNpdHVh
dGlvbiBmb3Igc3RhZ2Ugb25lIG9mIHRoZSBRdWFsaWZpZWROYW1lIHBhdGNoLiAgVGhpcyBpcyBh
bHNvIGEgcmVhbGx5IHN0dXBpZCB3YXkgdG8KKyAgICAgICAgLy8gaGF2ZSB0byBoYW5kbGUgdGhl
IHByZWZpeC4gIFdheSB0b28gbXVjaCBjb3B5aW5nLiAgV2Ugc2hvdWxkIG1ha2Ugc3VyZSB0aGUg
WE1MIHRva2VuaXplciBoYXMgZG9uZSB0aGUgc3BsaXQKKyAgICAgICAgLy8gYWxyZWFkeSBpbnRv
IHByZWZpeCBhbmQgbG9jYWxOYW1lLgorICAgICAgICBET01TdHJpbmdJbXBsKiBwcmVmaXggPSBf
cXVhbGlmaWVkTmFtZS0+Y29weSgpOworICAgICAgICBwcmVmaXgtPnJlZigpOworICAgICAgICBw
cmVmaXgtPnRydW5jYXRlKGNvbG9ucG9zKTsKKyAgICAgICAgbV90YWdOYW1lID0gUXVhbGlmaWVk
TmFtZShwcmVmaXgsIG51bGxBdG9tLCBudWxsQXRvbSk7CisgICAgICAgIHByZWZpeC0+ZGVyZWYo
KTsKICAgICB9Ci0gICAgZWxzZSB7CisgICAgZWxzZQogICAgICAgICAvLyBubyBwcmVmaXgKICAg
ICAgICAgbV9pZCA9IGRvYy0+ZG9jdW1lbnQoKS0+dGFnSWQoX25hbWVzcGFjZVVSSSwgX3F1YWxp
ZmllZE5hbWUsIGZhbHNlIC8qIGFsbG9jYXRlICovKTsKLSAgICAgICAgbV9wcmVmaXggPSAwOwot
ICAgIH0KIH0KIAogWE1MRWxlbWVudEltcGw6On5YTUxFbGVtZW50SW1wbCgpCkluZGV4OiBXZWJD
b3JlL2todG1sL3htbC9kb21fZWxlbWVudGltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvbG9j
YWwvaG9tZS9jdnMvTGFieXJpbnRoL1dlYkNvcmUva2h0bWwveG1sL2RvbV9lbGVtZW50aW1wbC5o
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjQxCmRpZmYgLXUgLXAgLXIxLjQxIFdlYkNvcmUva2h0
bWwveG1sL2RvbV9lbGVtZW50aW1wbC5oCi0tLSBXZWJDb3JlL2todG1sL3htbC9kb21fZWxlbWVu
dGltcGwuaAkyMDA1LzA1LzEyIDE3OjExOjIyCTEuNDEKKysrIFdlYkNvcmUva2h0bWwveG1sL2Rv
bV9lbGVtZW50aW1wbC5oCTIwMDUvMDYvMDIgMDQ6MTI6MTgKQEAgLTIzLDEzICsyMywxNCBAQAog
ICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCiAgKgogICovCi0jaWZuZGVmIF9ET01fRUxF
TUVOVEltcGxfaF8KLSNkZWZpbmUgX0RPTV9FTEVNRU5USW1wbF9oXworI2lmbmRlZiBfRE9NX0VM
RU1FTlRJTVBMX2hfCisjZGVmaW5lIF9ET01fRUxFTUVOVElNUExfaF8KIAogI2luY2x1ZGUgImRv
bV9ub2RlaW1wbC5oIgogI2luY2x1ZGUgInhtbC9kb21fc3RyaW5naW1wbC5oIgogI2luY2x1ZGUg
Im1pc2Mvc2hhcmVkLmgiCiAjaW5jbHVkZSAiY3NzL2Nzc192YWx1ZWltcGwuaCIKKyNpbmNsdWRl
ICJkb21fcW5hbWUuaCIKIAogI2lmIEFQUExFX0NIQU5HRVMKICNpZmRlZiBfX09CSkNfXwpAQCAt
MTI4LDggKzEyOSw4IEBAIHB1YmxpYzoKICAgICAvLyBET00gbWV0aG9kcyBvdmVycmlkZGVuIGZy
b20gIHBhcmVudCBjbGFzc2VzCiAgICAgdmlydHVhbCBET01TdHJpbmcgbm9kZU5hbWUoKSBjb25z
dDsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0IG5vZGVUeXBlKCkgY29uc3Q7Ci0gICAgdmly
dHVhbCBET01TdHJpbmcgcHJlZml4KCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHNldFByZWZp
eChjb25zdCBET01TdHJpbmcgJl9wcmVmaXgsIGludCAmZXhjZXB0aW9uY29kZSApOworICAgIHZp
cnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0UHJlZml4KGNvbnN0IEF0b21pY1N0cmluZyAmX3ByZWZpeCwgaW50ICZleGNlcHRpb25j
b2RlICk7CiAKICAgICB2aXJ0dWFsIERPTVN0cmluZyBub2RlVmFsdWUoKSBjb25zdDsKICAgICB2
aXJ0dWFsIHZvaWQgc2V0Tm9kZVZhbHVlKCBjb25zdCBET01TdHJpbmcgJiwgaW50ICZleGNlcHRp
b25jb2RlICk7CkBAIC0xNTYsNyArMTU3LDcgQEAgY2xhc3MgRWxlbWVudEltcGwgOiBwdWJsaWMg
Q29udGFpbmVyTm9kZQogICAgIGZyaWVuZCBjbGFzcyBOb2RlSW1wbDsKICAgICBmcmllbmQgY2xh
c3Mga2h0bWw6OkNTU1N0eWxlU2VsZWN0b3I7CiBwdWJsaWM6Ci0gICAgRWxlbWVudEltcGwoRG9j
dW1lbnRQdHIgKmRvYyk7CisgICAgRWxlbWVudEltcGwoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFn
TmFtZSwgRG9jdW1lbnRQdHIgKmRvYyk7CiAgICAgfkVsZW1lbnRJbXBsKCk7CiAKICAgICAvLyBV
c2VkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IGFuIGVsZW1lbnQgaGFzIGEg
Z2l2ZW4gQ1NTIGNsYXNzLgpAQCAtMTg2LDEzICsxODcsMjIgQEAgcHVibGljOgogICAgIFNoYXJl
ZFB0cjxBdHRySW1wbD4gc2V0QXR0cmlidXRlTm9kZU5TKEF0dHJJbXBsICpuZXdBdHRyLCBpbnQg
JmV4Y2VwdGlvbikgeyByZXR1cm4gc2V0QXR0cmlidXRlTm9kZShuZXdBdHRyLCBleGNlcHRpb24p
OyB9CiAgICAgU2hhcmVkUHRyPEF0dHJJbXBsPiByZW1vdmVBdHRyaWJ1dGVOb2RlKEF0dHJJbXBs
ICpvbGRBdHRyLCBpbnQgJmV4Y2VwdGlvbik7CiAgICAgCi0gICAgRE9NU3RyaW5nIHByZWZpeCgp
IGNvbnN0IHsgcmV0dXJuIG1fcHJlZml4OyB9Ci0gICAgdm9pZCBzZXRQcmVmaXgoY29uc3QgRE9N
U3RyaW5nICZfcHJlZml4LCBpbnQgJmV4Y2VwdGlvbmNvZGUgKTsKLQogICAgIHZpcnR1YWwgQ1NT
U3R5bGVEZWNsYXJhdGlvbkltcGwgKnN0eWxlKCk7CiAKKyAgICB2aXJ0dWFsIGNvbnN0IFF1YWxp
ZmllZE5hbWUmIHRhZ05hbWUoKSBjb25zdCB7IHJldHVybiBtX3RhZ05hbWU7IH0KKyAgICB2aXJ0
dWFsIGJvb2wgaGFzVGFnTmFtZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lKSBjb25zdCB7
IHJldHVybiBtX3RhZ05hbWUubWF0Y2hlcyh0YWdOYW1lKTsgfQorICAgIAorICAgIC8vIEEgbW9y
ZSBsaWdodHdlaWdodCBjaGVjayB0aGFuIGhhc1RhZ05hbWUuICBVc2UgdGhpcyBjaGVjayB3aGVu
IHlvdSBrbm93IHRoZSBuYW1lc3BhY2VzIG9mIHRoZSB0d28gUXVhbGlmaWVkTmFtZXMgbWF0Y2gs
IGUuZy4sIHRoYXQgdGhleSdyZQorICAgIC8vIGJvdGggSFRNTCBuYW1lcy4KKyAgICBib29sIGhh
c0xvY2FsTmFtZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lKSBjb25zdCB7IHJldHVybiBt
X3RhZ05hbWUubG9jYWxOYW1lKCkgPT0gdGFnTmFtZS5sb2NhbE5hbWUoKTsgfQorICAgIGJvb2wg
aGFzTG9jYWxOYW1lKGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lKSBjb25zdCB7IHJldHVy
biBtX3RhZ05hbWUubG9jYWxOYW1lKCkgPT0gbG9jYWxOYW1lOyB9CisKKyAgICB2aXJ0dWFsIGNv
bnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lKCkgY29uc3QgeyByZXR1cm4gbV90YWdOYW1lLmxv
Y2FsTmFtZSgpOyB9CisgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCgpIGNv
bnN0IHsgcmV0dXJuIG1fdGFnTmFtZS5wcmVmaXgoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRQ
cmVmaXgoY29uc3QgQXRvbWljU3RyaW5nICZfcHJlZml4LCBpbnQgJmV4Y2VwdGlvbmNvZGUpOwor
ICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkkoKSBjb25zdCB7IHJl
dHVybiBtX3RhZ05hbWUubmFtZXNwYWNlVVJJKCk7IH0KKyAgICAKICAgICAvLyBET00gbWV0aG9k
cyBvdmVycmlkZGVuIGZyb20gIHBhcmVudCBjbGFzc2VzCi0gICAgdmlydHVhbCBET01TdHJpbmcg
dGFnTmFtZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgdW5zaWduZWQgc2hvcnQgbm9kZVR5cGUoKSBj
b25zdDsKICAgICB2aXJ0dWFsIE5vZGVJbXBsICpjbG9uZU5vZGUgKCBib29sIGRlZXAgKSA9IDA7
CiAgICAgdmlydHVhbCBET01TdHJpbmcgbm9kZU5hbWUoKSBjb25zdDsKQEAgLTI1NCwyOSArMjY0
LDcgQEAgcHJpdmF0ZToKIAogcHJvdGVjdGVkOiAvLyBtZW1iZXIgdmFyaWFibGVzCiAgICAgbXV0
YWJsZSBOYW1lZEF0dHJNYXBJbXBsICpuYW1lZEF0dHJNYXA7Ci0gICAgRE9NU3RyaW5nSW1wbCAq
bV9wcmVmaXg7Ci19OwotCi0KLWNsYXNzIFhNTEVsZW1lbnRJbXBsIDogcHVibGljIEVsZW1lbnRJ
bXBsCi17Ci0KLXB1YmxpYzoKLSAgICBYTUxFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCBE
T01TdHJpbmdJbXBsICpfdGFnTmFtZSk7Ci0gICAgWE1MRWxlbWVudEltcGwoRG9jdW1lbnRQdHIg
KmRvYywgRE9NU3RyaW5nSW1wbCAqX3F1YWxpZmllZE5hbWUsIERPTVN0cmluZ0ltcGwgKl9uYW1l
c3BhY2VVUkkpOwotICAgIH5YTUxFbGVtZW50SW1wbCgpOwotCi0gICAgLy8gRE9NIG1ldGhvZHMg
b3ZlcnJpZGRlbiBmcm9tICBwYXJlbnQgY2xhc3NlcwotICAgIHZpcnR1YWwgRE9NU3RyaW5nIG5h
bWVzcGFjZVVSSSgpIGNvbnN0OwotICAgIHZpcnR1YWwgRE9NU3RyaW5nIGxvY2FsTmFtZSgpIGNv
bnN0OwotICAgIHZpcnR1YWwgTm9kZUltcGwgKmNsb25lTm9kZSAoIGJvb2wgZGVlcCApOwotCi0g
ICAgLy8gT3RoZXIgbWV0aG9kcyAobm90IHBhcnQgb2YgRE9NKQotICAgIHZpcnR1YWwgYm9vbCBp
c1hNTEVsZW1lbnROb2RlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgSWQg
aWQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9Ci0KLXByb3RlY3RlZDoKLSAgICBJZCBtX2lkOwor
ICAgIFF1YWxpZmllZE5hbWUgbV90YWdOYW1lOwogfTsKIAogLy8gdGhlIG1hcCBvZiBhdHRyaWJ1
dGVzIG9mIGFuIGVsZW1lbnQKQEAgLTQxNCw3ICs0MDIsNyBAQCBwcml2YXRlOgogY2xhc3MgU3R5
bGVkRWxlbWVudEltcGwgOiBwdWJsaWMgRWxlbWVudEltcGwKIHsKIHB1YmxpYzoKLSAgICBTdHls
ZWRFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKTsKKyAgICBTdHlsZWRFbGVtZW50SW1wbChj
b25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudFB0ciAqZG9jKTsKICAgICB2aXJ0
dWFsIH5TdHlsZWRFbGVtZW50SW1wbCgpOwogCiAgICAgdmlydHVhbCBib29sIGlzU3R5bGVkRWxl
bWVudCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KSW5kZXg6IFdlYkNvcmUva2h0bWwveG1sL2Rv
bV9ub2RlaW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2xvY2FsL2hvbWUvY3ZzL0xhYnly
aW50aC9XZWJDb3JlL2todG1sL3htbC9kb21fbm9kZWltcGwuY3BwLHYKcmV0cmlldmluZyByZXZp
c2lvbiAxLjE1MgpkaWZmIC11IC1wIC1yMS4xNTIgV2ViQ29yZS9raHRtbC94bWwvZG9tX25vZGVp
bXBsLmNwcAotLS0gV2ViQ29yZS9raHRtbC94bWwvZG9tX25vZGVpbXBsLmNwcAkyMDA1LzA1LzMx
IDAxOjIwOjQ2CTEuMTUyCisrKyBXZWJDb3JlL2todG1sL3htbC9kb21fbm9kZWltcGwuY3BwCTIw
MDUvMDYvMDIgMDQ6MTI6MTkKQEAgLTE1NCw3ICsxNTQsNyBAQCBOb2RlSW1wbCAqTm9kZUltcGw6
Omxhc3RDaGlsZCgpIGNvbnN0CiAgIHJldHVybiAwOwogfQogCi1Ob2RlSW1wbCAqTm9kZUltcGw6
Omxhc3REZXNjZW5kZW50KCkgY29uc3QKK05vZGVJbXBsICpOb2RlSW1wbDo6bGFzdERlc2NlbmRh
bnQoKSBjb25zdAogewogICAgIE5vZGVJbXBsICpuID0gY29uc3RfY2FzdDxOb2RlSW1wbCAqPih0
aGlzKTsKICAgICB3aGlsZSAobiAmJiBuLT5sYXN0Q2hpbGQoKSkKQEAgLTIzOSwxMyArMjM5LDEz
IEBAIHZvaWQgTm9kZUltcGw6Om5vcm1hbGl6ZSAoKQogICAgIH0KIH0KIAotRE9NU3RyaW5nIE5v
ZGVJbXBsOjpwcmVmaXgoKSBjb25zdAorY29uc3QgQXRvbWljU3RyaW5nJiBOb2RlSW1wbDo6cHJl
Zml4KCkgY29uc3QKIHsKICAgICAvLyBGb3Igbm9kZXMgb3RoZXIgdGhhbiBlbGVtZW50cyBhbmQg
YXR0cmlidXRlcywgdGhlIHByZWZpeCBpcyBhbHdheXMgbnVsbAotICAgIHJldHVybiBET01TdHJp
bmcoKTsKKyAgICByZXR1cm4gbnVsbEF0b207CiB9CiAKLXZvaWQgTm9kZUltcGw6OnNldFByZWZp
eChjb25zdCBET01TdHJpbmcgJi8qX3ByZWZpeCovLCBpbnQgJmV4Y2VwdGlvbmNvZGUgKQordm9p
ZCBOb2RlSW1wbDo6c2V0UHJlZml4KGNvbnN0IEF0b21pY1N0cmluZyAmLypfcHJlZml4Ki8sIGlu
dCAmZXhjZXB0aW9uY29kZSApCiB7CiAgICAgLy8gVGhlIHNwZWMgc2F5cyB0aGF0IGZvciBub2Rl
cyBvdGhlciB0aGFuIGVsZW1lbnRzIGFuZCBhdHRyaWJ1dGVzLCBwcmVmaXggaXMgYWx3YXlzIG51
bGwuCiAgICAgLy8gSXQgZG9lcyBub3Qgc2F5IHdoYXQgdG8gZG8gd2hlbiB0aGUgdXNlciB0cmll
cyB0byBzZXQgdGhlIHByZWZpeCBvbiBhbm90aGVyIHR5cGUgb2YKQEAgLTEwMDYsMzkgKzEwMDYs
MjcgQEAgTm9kZUltcGwgKk5vZGVJbXBsOjp0cmF2ZXJzZVByZXZpb3VzTm9kZQogICAgIHJldHVy
biAwOwogfQogCi12b2lkIE5vZGVJbXBsOjpjaGVja1NldFByZWZpeChjb25zdCBET01TdHJpbmcg
Jl9wcmVmaXgsIGludCAmZXhjZXB0aW9uY29kZSkKK3ZvaWQgTm9kZUltcGw6OmNoZWNrU2V0UHJl
Zml4KGNvbnN0IEF0b21pY1N0cmluZyAmX3ByZWZpeCwgaW50ICZleGNlcHRpb25jb2RlKQogewog
ICAgIC8vIFBlcmZvcm0gZXJyb3IgY2hlY2tpbmcgYXMgcmVxdWlyZWQgYnkgc3BlYyBmb3Igc2V0
dGluZyBOb2RlLnByZWZpeC4gVXNlZCBieQogICAgIC8vIEVsZW1lbnRJbXBsOjpzZXRQcmVmaXgo
KSBhbmQgQXR0ckltcGw6OnNldFByZWZpeCgpCiAKLSNpZiAwCi0gICAgLy8gRklYTUU6IEFkZCB0
aGlzIGNoZWNrIChidXQgbm90IGluIGEgd2F5IHRoYXQgZGVwZW5kcyBvbiB0aGUgQysrIERPTSEp
Ci0gICAgLy8gSU5WQUxJRF9DSEFSQUNURVJfRVJSOiBSYWlzZWQgaWYgdGhlIHNwZWNpZmllZCBw
cmVmaXggY29udGFpbnMgYW4gaWxsZWdhbCBjaGFyYWN0ZXIuCi0gICAgaWYgKCFFbGVtZW50Ojpr
aHRtbFZhbGlkUHJlZml4KF9wcmVmaXgpKSB7Ci0gICAgICAgIGV4Y2VwdGlvbmNvZGUgPSBET01F
eGNlcHRpb246OklOVkFMSURfQ0hBUkFDVEVSX0VSUjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSNlbmRpZgotCisgICAgLy8gRklYTUU6IEltcGxlbWVudCBzdXBwb3J0IGZvciBJTlZBTElEX0NI
QVJBQ1RFUl9FUlI6IFJhaXNlZCBpZiB0aGUgc3BlY2lmaWVkIHByZWZpeCBjb250YWlucyBhbiBp
bGxlZ2FsIGNoYXJhY3Rlci4KKyAgICAKICAgICAvLyBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9F
UlI6IFJhaXNlZCBpZiB0aGlzIG5vZGUgaXMgcmVhZG9ubHkuCiAgICAgaWYgKGlzUmVhZE9ubHko
KSkgewogICAgICAgICBleGNlcHRpb25jb2RlID0gRE9NRXhjZXB0aW9uOjpOT19NT0RJRklDQVRJ
T05fQUxMT1dFRF9FUlI7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICAvLyBOQU1FU1BB
Q0VfRVJSOiAtIFJhaXNlZCBpZiB0aGUgc3BlY2lmaWVkIHByZWZpeCBpcyBtYWxmb3JtZWQKKyAg
ICAvLyBGSVhNRTogSW1wbGVtZW50IE5BTUVTUEFDRV9FUlI6IC0gUmFpc2VkIGlmIHRoZSBzcGVj
aWZpZWQgcHJlZml4IGlzIG1hbGZvcm1lZAogICAgIC8vIC0gaWYgdGhlIG5hbWVzcGFjZVVSSSBv
ZiB0aGlzIG5vZGUgaXMgbnVsbCwKICAgICAvLyAtIGlmIHRoZSBzcGVjaWZpZWQgcHJlZml4IGlz
ICJ4bWwiIGFuZCB0aGUgbmFtZXNwYWNlVVJJIG9mIHRoaXMgbm9kZSBpcyBkaWZmZXJlbnQgZnJv
bQogICAgIC8vICAgImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIsCiAgICAg
Ly8gLSBpZiB0aGlzIG5vZGUgaXMgYW4gYXR0cmlidXRlIGFuZCB0aGUgc3BlY2lmaWVkIHByZWZp
eCBpcyAieG1sbnMiIGFuZAogICAgIC8vICAgdGhlIG5hbWVzcGFjZVVSSSBvZiB0aGlzIG5vZGUg
aXMgZGlmZmVyZW50IGZyb20gImh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIiwKICAgICAv
LyAtIG9yIGlmIHRoaXMgbm9kZSBpcyBhbiBhdHRyaWJ1dGUgYW5kIHRoZSBxdWFsaWZpZWROYW1l
IG9mIHRoaXMgbm9kZSBpcyAieG1sbnMiIFtOYW1lc3BhY2VzXS4KLSAgICBpZiAoCi0jaWYgMAot
ICAgICAgICAvLyBGSVhNRTogQWRkIHRoaXMgY2hlY2sgKGJ1dCBub3QgaW4gYSB3YXkgdGhhdCBk
ZXBlbmRzIG9uIHRoZSBDKysgRE9NISkKLSAgICAgICAgRWxlbWVudDo6a2h0bWxNYWxmb3JtZWRQ
cmVmaXgoX3ByZWZpeCkgfHwKLSNlbmRpZgotICAgICAgICAobmFtZXNwYWNlUGFydChpZCgpKSA9
PSBub05hbWVzcGFjZSAmJiBpZCgpID4gSURfTEFTVF9UQUcpIHx8CisgICAgaWYgKChuYW1lc3Bh
Y2VQYXJ0KGlkKCkpID09IG5vTmFtZXNwYWNlICYmIGlkKCkgPiBJRF9MQVNUX1RBRykgfHwKICAg
ICAgICAgKF9wcmVmaXggPT0gInhtbCIgJiYgRE9NU3RyaW5nKGdldERvY3VtZW50KCktPm5hbWVz
cGFjZVVSSShpZCgpKSkgIT0gImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIp
KSB7CiAgICAgICAgIGV4Y2VwdGlvbmNvZGUgPSBET01FeGNlcHRpb246Ok5BTUVTUEFDRV9FUlI7
CiAgICAgICAgIHJldHVybjsKSW5kZXg6IFdlYkNvcmUva2h0bWwveG1sL2RvbV9ub2RlaW1wbC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9sb2NhbC9ob21lL2N2cy9MYWJ5cmludGgvV2ViQ29yZS9r
aHRtbC94bWwvZG9tX25vZGVpbXBsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuODUKZGlmZiAt
dSAtcCAtcjEuODUgV2ViQ29yZS9raHRtbC94bWwvZG9tX25vZGVpbXBsLmgKLS0tIFdlYkNvcmUv
a2h0bWwveG1sL2RvbV9ub2RlaW1wbC5oCTIwMDUvMDUvMTIgMDE6MTY6MDEJMS44NQorKysgV2Vi
Q29yZS9raHRtbC94bWwvZG9tX25vZGVpbXBsLmgJMjAwNS8wNi8wMiAwNDoxMjoyMApAQCAtNTks
NiArNTksNyBAQCBjbGFzcyBFdmVudEltcGw7CiBjbGFzcyBFdmVudExpc3RlbmVyOwogY2xhc3Mg
Tm9kZUxpc3RJbXBsOwogY2xhc3MgTmFtZWRBdHRyTWFwSW1wbDsKK2NsYXNzIFF1YWxpZmllZE5h
bWU7CiBjbGFzcyBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcjsKIAogLy8gVGhlIG5hbWVzcGFjZSB1
c2VkIGZvciBYSFRNTCBlbGVtZW50cwpAQCAtMTAyLDYgKzEwMyw3IEBAIHB1YmxpYzoKICAgICBN
QUlOX1RIUkVBRF9BTExPQ0FURUQ7CiAKICAgICAvLyBET00gbWV0aG9kcyAmIGF0dHJpYnV0ZXMg
Zm9yIE5vZGUKKyAgICB2aXJ0dWFsIGJvb2wgaGFzVGFnTmFtZShjb25zdCBRdWFsaWZpZWROYW1l
JiB0YWdOYW1lKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgRE9NU3RyaW5n
IG5vZGVOYW1lKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgRE9NU3RyaW5nIG5vZGVWYWx1ZSgp
IGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBzZXROb2RlVmFsdWUoIGNvbnN0IERPTVN0cmluZyAm
X25vZGVWYWx1ZSwgaW50ICZleGNlcHRpb25jb2RlICk7CkBAIC0xMjIsMTQgKzEyNCwxNCBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZShpbnQgJmV4Y2VwdGlvbmNvZGUpOwogICAg
IHZpcnR1YWwgYm9vbCBoYXNDaGlsZE5vZGVzICggICkgY29uc3Q7CiAgICAgdmlydHVhbCBOb2Rl
SW1wbCAqY2xvbmVOb2RlICggYm9vbCBkZWVwICkgPSAwOwotICAgIHZpcnR1YWwgRE9NU3RyaW5n
IGxvY2FsTmFtZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgRE9NU3RyaW5nIG5hbWVzcGFjZVVSSSgp
IGNvbnN0OwotICAgIHZpcnR1YWwgRE9NU3RyaW5nIHByZWZpeCgpIGNvbnN0OwotICAgIHZpcnR1
YWwgdm9pZCBzZXRQcmVmaXgoY29uc3QgRE9NU3RyaW5nICZfcHJlZml4LCBpbnQgJmV4Y2VwdGlv
bmNvZGUgKTsKKyAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lKCkgY29u
c3Q7CisgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSgpIGNvbnN0
OworICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgoKSBjb25zdDsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0UHJlZml4KGNvbnN0IEF0b21pY1N0cmluZyAmX3ByZWZpeCwgaW50ICZl
eGNlcHRpb25jb2RlKTsKICAgICB2b2lkIG5vcm1hbGl6ZSAoKTsKICAgICBzdGF0aWMgYm9vbCBp
c1N1cHBvcnRlZChjb25zdCBET01TdHJpbmcgJmZlYXR1cmUsIGNvbnN0IERPTVN0cmluZyAmdmVy
c2lvbik7CiAKLSAgICBOb2RlSW1wbCAqbGFzdERlc2NlbmRlbnQoKSBjb25zdDsKKyAgICBOb2Rl
SW1wbCAqbGFzdERlc2NlbmRhbnQoKSBjb25zdDsKIAogICAgIC8vIE90aGVyIG1ldGhvZHMgKG5v
dCBwYXJ0IG9mIERPTSkKICAgICB2aXJ0dWFsIGJvb2wgaXNFbGVtZW50Tm9kZSgpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CkBAIC0xMzcsNiArMTM5LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
Ym9vbCBpc1N0eWxlZEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1
YWwgYm9vbCBpc0F0dHJpYnV0ZU5vZGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZp
cnR1YWwgYm9vbCBpc1RleHROb2RlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0
dWFsIGJvb2wgaXNDb21tZW50Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmly
dHVhbCBib29sIGlzRG9jdW1lbnROb2RlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2
aXJ0dWFsIGJvb2wgaXNYTUxFbGVtZW50Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAg
ICAgYm9vbCBpc0Jsb2NrRmxvdygpIGNvbnN0OwpAQCAtMTk4LDI1ICsyMDEsOCBAQCBwdWJsaWM6
CiAgICAgLy8gdW50aWwgdGhleSBrbm93IGFsbCBvZiB0aGVpciBuZXN0ZWQgPHBhcmFtPnMuIFsz
NjAzMTkxLCA0MDQwODQ4XQogICAgIHZpcnR1YWwgdm9pZCBjbG9zZVJlbmRlcmVyKCkgeyB9CiAK
LSAgICB0eXBlZGVmIFFfVUlOVDMyIElkOwotICAgIC8vIGlkKCkgaXMgdXNlZCB0byBlYXNpbHkg
YW5kIGV4YWN0bHkgaWRlbnRpZnkgYSBub2RlLiBJdAotICAgIC8vIGlzIG9wdGltaXplZCBmb3Ig
cXVpY2sgY29tcGFyaXNvbiBhbmQgbG93IG1lbW9yeSBjb25zdW1wdGlvbi4KLSAgICAvLyBpdHMg
dmFsdWUgZGVwZW5kcyBvbiB0aGUgb3duZXIgZG9jdW1lbnQgb2YgdGhlIG5vZGUgYW5kIGlzCi0g
ICAgLy8gY2F0ZWdvcml6ZWQgaW4gdGhlIGZvbGxvd2luZyB3YXk6Ci0gICAgLy8gMS4uSURfTEFT
VF9UQUc6IHRoZSBub2RlIGluaGVyaXRzIEhUTUxFbGVtZW50SW1wbCBhbmQgaXMKLSAgICAvLyAg
ICAgICAgICAgICAgICAgcGFydCBvZiB0aGUgSFRNTCBuYW1lc3BhY2UuCi0gICAgLy8gICAgICAg
ICAgICAgICAgIFRoZSBIVE1MIG5hbWVzcGFjZSBpcyBlaXRoZXIgdGhlIGdsb2JhbAotICAgIC8v
ICAgICAgICAgICAgICAgICBvbmUgKG5vIG5hbWVzcGFjZSkgb3IgdGhlIFhIVE1MIG5hbWVzcGFj
ZQotICAgIC8vICAgICAgICAgICAgICAgICBkZXBlbmRpbmcgb24gdGhlIG93bmVyIGRvY3VtZW50
J3MgZG9jdHlwZQotICAgIC8vIElEX0xBU1RfVEFHKzEuLjB4ZmZmZjogbm9uLUhUTUwgZWxlbWVu
dHMgaW4gdGhlIGdsb2JhbCBuYW1lc3BhY2UKLSAgICAvLyBvdGhlcnMgICAgICAgbm9uLUhUTUwg
ZWxlbWVudHMgaW4gYSBuYW1lc3BhY2UuCi0gICAgLy8gICAgICAgICAgICAgICAgIHRoZSB1cHBl
ciAxNiBiaXQgaWRlbnRpZnkgdGhlIG5hbWVzcGFjZQotICAgIC8vICAgICAgICAgICAgICAgICB0
aGUgbG93ZXIgMTYgYml0IGlkZW50aWZ5IHRoZSBsb2NhbCBwYXJ0IG9mIHRoZQotICAgIC8vICAg
ICAgICAgICAgICAgICBxdWFsaWZpZWQgZWxlbWVudCBuYW1lLgotICAgIHZpcnR1YWwgSWQgaWQo
KSBjb25zdCB7IHJldHVybiAwOyB9OwotI2lmIEFQUExFX0NIQU5HRVMKLSAgICBJZCBpZGVudGlm
aWVyKCkgY29uc3Q7Ci0jZW5kaWYKKyAgICB0eXBlZGVmIFFfVUlOVDMyIElkOyAvLyBGSVhNRTog
WWFuayB0aGlzIG9uY2UgYXR0cmlidXRlcyBhcmUgYWxzbyBzd2l0Y2hlZCBvdmVyLgorCiAgICAg
ZW51bSBNb3VzZUV2ZW50VHlwZSB7CiAgICAgICAgIE1vdXNlUHJlc3MsCiAgICAgICAgIE1vdXNl
UmVsZWFzZSwKQEAgLTI3OCw4ICsyNjQsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlz
S2V5Ym9hcmRGb2N1c2FibGUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNNb3VzZUZvY3Vz
YWJsZSgpIGNvbnN0OwogICAgIAotICAgIHZpcnR1YWwgYm9vbCBpc0lubGluZSgpIGNvbnN0Owot
ICAgIAogICAgIHZpcnR1YWwgYm9vbCBpc0NvbnRlbnRFZGl0YWJsZSgpIGNvbnN0OwogICAgIHZp
cnR1YWwgUVJlY3QgZ2V0UmVjdCgpIGNvbnN0OwogCkBAIC0zNjksNyArMzUzLDcgQEAgcHVibGlj
OgogICAgIGtodG1sOjpSZW5kZXJPYmplY3QgKnByZXZpb3VzUmVuZGVyZXIoKTsKICAgICB2b2lk
IHNldFJlbmRlcmVyKGtodG1sOjpSZW5kZXJPYmplY3QqIHJlbmRlcmVyKSB7IG1fcmVuZGVyID0g
cmVuZGVyZXI7IH0KICAgICAKLSAgICB2b2lkIGNoZWNrU2V0UHJlZml4KGNvbnN0IERPTVN0cmlu
ZyAmX3ByZWZpeCwgaW50ICZleGNlcHRpb25jb2RlKTsKKyAgICB2b2lkIGNoZWNrU2V0UHJlZml4
KGNvbnN0IEF0b21pY1N0cmluZyAmX3ByZWZpeCwgaW50ICZleGNlcHRpb25jb2RlKTsKICAgICB2
b2lkIGNoZWNrQWRkQ2hpbGQoTm9kZUltcGwgKm5ld0NoaWxkLCBpbnQgJmV4Y2VwdGlvbmNvZGUp
OwogICAgIGJvb2wgaXNBbmNlc3Rvcihjb25zdCBOb2RlSW1wbCAqKSBjb25zdDsKICAgICB2aXJ0
dWFsIGJvb2wgY2hpbGRBbGxvd2VkKCBOb2RlSW1wbCAqbmV3Q2hpbGQgKTsKSW5kZXg6IFdlYkNv
cmUva2h0bWwveG1sL2RvbV9xbmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogZG9tX3FuYW1l
LmNwcApkaWZmIC1OIGRvbV9xbmFtZS5jcHAKLS0tIC9kZXYvbnVsbAlUaHUgQXByIDExIDA3OjI1
OjE1IDIwMDIKKysrIGRvbV9xbmFtZS5jcHAJV2VkIEp1biAgMSAyMToxMjoyMCAyMDA1CkBAIC0w
LDAgKzEsMTA4IEBACisvKioKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1wbGVt
ZW50YXRpb24gZm9yIEtERS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0
ZXIsIEluYy4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1w
bGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAq
LworCisjaW5jbHVkZSAiZG9tX3FuYW1lLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBET007CisKK1FQ
dHJEaWN0PFFQdHJEaWN0PFFQdHJEaWN0PFF1YWxpZmllZE5hbWU6OlF1YWxpZmllZE5hbWVJbm5l
cj4gPiA+KiBRdWFsaWZpZWROYW1lOjptX3FOYW1lQ2FjaGUgPSAwOworCitRdWFsaWZpZWROYW1l
OjpRdWFsaWZpZWROYW1lKGNvbnN0IEF0b21pY1N0cmluZyYgcCwgY29uc3QgQXRvbWljU3RyaW5n
JiBsLCBjb25zdCBBdG9taWNTdHJpbmcmIG4pCit7CisgICAgLy8gT2J0YWluIGFuIGFwcHJvcHJp
YXRlIGlubmVyIGZyb20gb3VyIGRpY3Rpb25hcnkuCisgICAgUVB0ckRpY3Q8UVB0ckRpY3Q8UXVh
bGlmaWVkTmFtZUlubmVyPiA+KiBuYW1lc3BhY2VEaWN0ID0gMDsKKyAgICBRUHRyRGljdDxRdWFs
aWZpZWROYW1lSW5uZXI+KiBwcmVmaXhEaWN0ID0gMDsKKyAgICBpZiAobV9xTmFtZUNhY2hlKSB7
CisgICAgICAgIG5hbWVzcGFjZURpY3QgPSBtX3FOYW1lQ2FjaGUtPmZpbmQoKHZvaWQqKShuLmlt
cGxlbWVudGF0aW9uKCkpKTsKKyAgICAgICAgaWYgKG5hbWVzcGFjZURpY3QpIHsKKyAgICAgICAg
ICAgIHByZWZpeERpY3QgPSBuYW1lc3BhY2VEaWN0LT5maW5kKCh2b2lkKilwLmltcGxlbWVudGF0
aW9uKCkpOworICAgICAgICAgICAgaWYgKHByZWZpeERpY3QpCisgICAgICAgICAgICAgICAgbV9p
bm5lciA9IHByZWZpeERpY3QtPmZpbmQoKHZvaWQqKWwuaW1wbGVtZW50YXRpb24oKSk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBpZiAoIW1faW5uZXIpIHsKKyAgICAgICAgbV9pbm5lciA9IG5l
dyBRdWFsaWZpZWROYW1lSW5uZXIocCwgbCwgbik7CisKKyAgICAgICAgLy8gUHV0IHRoZSBvYmpl
Y3QgaW50byB0aGUgaGFzaC4KKyAgICAgICAgaWYgKCFtX3FOYW1lQ2FjaGUpCisgICAgICAgICAg
ICBtX3FOYW1lQ2FjaGUgPSBuZXcgUVB0ckRpY3Q8UVB0ckRpY3Q8UVB0ckRpY3Q8UXVhbGlmaWVk
TmFtZUlubmVyPiA+ID47CisgICAgICAgIAorICAgICAgICBpZiAoIW5hbWVzcGFjZURpY3QpIHsK
KyAgICAgICAgICAgIG5hbWVzcGFjZURpY3QgPSBuZXcgUVB0ckRpY3Q8UVB0ckRpY3Q8UXVhbGlm
aWVkTmFtZUlubmVyPiA+OworICAgICAgICAgICAgbmFtZXNwYWNlRGljdC0+c2V0QXV0b0RlbGV0
ZSh0cnVlKTsKKyAgICAgICAgICAgIG1fcU5hbWVDYWNoZS0+aW5zZXJ0KCh2b2lkKiluLmltcGxl
bWVudGF0aW9uKCksIG5hbWVzcGFjZURpY3QpOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBpZiAoIXByZWZpeERpY3QpIHsKKyAgICAgICAgICAgIHByZWZpeERpY3QgPSBuZXcgUVB0ckRp
Y3Q8UXVhbGlmaWVkTmFtZUlubmVyPjsKKyAgICAgICAgICAgIG5hbWVzcGFjZURpY3QtPmluc2Vy
dCgodm9pZCopcC5pbXBsZW1lbnRhdGlvbigpLCBwcmVmaXhEaWN0KTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgcHJlZml4RGljdC0+aW5zZXJ0KCh2b2lkKilsLmltcGxlbWVudGF0aW9u
KCksIG1faW5uZXIpOworICAgIH0KKyAgICAKKyAgICByZWYoKTsKK30KKworUXVhbGlmaWVkTmFt
ZTo6flF1YWxpZmllZE5hbWUoKQoreworICAgIGRlcmVmKCk7Cit9CisKK1F1YWxpZmllZE5hbWU6
OlF1YWxpZmllZE5hbWUoY29uc3QgUXVhbGlmaWVkTmFtZSYgb3RoZXIpCit7CisgICAgbV9pbm5l
ciA9IG90aGVyLm1faW5uZXI7CisgICAgcmVmKCk7Cit9CisKK2NvbnN0IFF1YWxpZmllZE5hbWUm
IFF1YWxpZmllZE5hbWU6Om9wZXJhdG9yPShjb25zdCBRdWFsaWZpZWROYW1lJiBvdGhlcikKK3sK
KyAgICBpZiAobV9pbm5lciAhPSBvdGhlci5tX2lubmVyKSB7CisgICAgICAgIGRlcmVmKCk7Cisg
ICAgICAgIG1faW5uZXIgPSBvdGhlci5tX2lubmVyOworICAgICAgICByZWYoKTsKKyAgICB9Cisg
ICAgCisgICAgcmV0dXJuICp0aGlzOworfQorCit2b2lkIFF1YWxpZmllZE5hbWU6OmRlcmVmKCkK
K3sKKyAgICBpZiAoIW1faW5uZXIpCisgICAgICAgIHJldHVybjsgLy8gRklYTUU6IFlhbmsgdGhp
cyBldmVudHVhbGx5LiBTZXJ2ZXMgbm8gcHVycG9zZS4KKyAgICAKKyAgICBpZiAobV9pbm5lci0+
cmVmQ291bnQoKSA9PSAxKSB7CisgICAgICAgIC8vIEJlZm9yZSBkZWNyZW1lbnRpbmcgdGhlIHJl
ZiB0byAwLCByZW1vdmUgb3Vyc2VsdmVzIGZyb20gdGhlIGhhc2ggdGFibGUuCisgICAgICAgIFFQ
dHJEaWN0PFFQdHJEaWN0PFF1YWxpZmllZE5hbWVJbm5lcj4gPiogbmFtZXNwYWNlRGljdCA9IDA7
CisgICAgICAgIFFQdHJEaWN0PFF1YWxpZmllZE5hbWVJbm5lcj4qIHByZWZpeERpY3QgPSAwOwor
ICAgICAgICBpZiAobV9xTmFtZUNhY2hlKSB7CisgICAgICAgICAgICBuYW1lc3BhY2VEaWN0ID0g
bV9xTmFtZUNhY2hlLT5maW5kKCh2b2lkKikobmFtZXNwYWNlVVJJKCkuaW1wbGVtZW50YXRpb24o
KSkpOworICAgICAgICAgICAgaWYgKG5hbWVzcGFjZURpY3QpIHsKKyAgICAgICAgICAgICAgICBw
cmVmaXhEaWN0ID0gbmFtZXNwYWNlRGljdC0+ZmluZCgodm9pZCopcHJlZml4KCkuaW1wbGVtZW50
YXRpb24oKSk7CisgICAgICAgICAgICAgICAgaWYgKHByZWZpeERpY3QpCisgICAgICAgICAgICAg
ICAgICAgIHByZWZpeERpY3QtPnJlbW92ZSgodm9pZCopbG9jYWxOYW1lKCkuaW1wbGVtZW50YXRp
b24oKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgbV9pbm5l
ci0+ZGVyZWYoKTsKK30KSW5kZXg6IFdlYkNvcmUva2h0bWwveG1sL2RvbV9xbmFtZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IGRvbV9xbmFtZS5oCmRpZmYgLU4gZG9tX3FuYW1lLmgKLS0tIC9kZXYv
bnVsbAlUaHUgQXByIDExIDA3OjI1OjE1IDIwMDIKKysrIGRvbV9xbmFtZS5oCVdlZCBKdW4gIDEg
MjE6MTI6MjAgMjAwNQpAQCAtMCwwICsxLDgyIEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQg
b2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgorICoKKyAqIENvcHlyaWdodCAoQykg
MjAwNSBBcHBsZSBDb21wdXRlciwgSW5jLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIx
MTEtMTMwNywgVVNBLgorICoKKyAqLworI2lmbmRlZiBfRE9NX1FOQU1FX2hfCisjZGVmaW5lIF9E
T01fUU5BTUVfaF8KKworI2luY2x1ZGUgPHFwdHJkaWN0Lmg+CisjaW5jbHVkZSAiZG9tX2F0b21p
Y3N0cmluZy5oIgorCituYW1lc3BhY2UgRE9NIHsKKworY2xhc3MgUXVhbGlmaWVkTmFtZSB7Citw
dWJsaWM6CisgICAgY2xhc3MgUXVhbGlmaWVkTmFtZUltcGwgOiBwdWJsaWMga2h0bWw6OlNoYXJl
ZDxRdWFsaWZpZWROYW1lSW1wbD4geworICAgIHB1YmxpYzoKKyAgICAgICAgUXVhbGlmaWVkTmFt
ZUltcGwoY29uc3QgQXRvbWljU3RyaW5nJiBwLCBjb25zdCBBdG9taWNTdHJpbmcmIGwsIGNvbnN0
IEF0b21pY1N0cmluZyYgbikgOm1fcHJlZml4KHApLCBtX2xvY2FsTmFtZShsKSwgbV9uYW1lc3Bh
Y2Uobikge30KKworICAgICAgICBmcmllbmQgY2xhc3MgUXVhbGlmaWVkTmFtZTsKKworICAgIHBy
aXZhdGU6CisgICAgICAgIEF0b21pY1N0cmluZyBtX3ByZWZpeDsKKyAgICAgICAgQXRvbWljU3Ry
aW5nIG1fbG9jYWxOYW1lOworICAgICAgICBBdG9taWNTdHJpbmcgbV9uYW1lc3BhY2U7CisgICAg
fTsKKworICAgIFF1YWxpZmllZE5hbWUoY29uc3QgQXRvbWljU3RyaW5nJiBwLCBjb25zdCBBdG9t
aWNTdHJpbmcmIGwsIGNvbnN0IEF0b21pY1N0cmluZyYgbik7CisgICAgUXVhbGlmaWVkTmFtZShR
dWFsaWZpZWROYW1lSW1wbCogaW5uZXIpOworICAgIH5RdWFsaWZpZWROYW1lKCk7CisKKyAgICBR
dWFsaWZpZWROYW1lKGNvbnN0IFF1YWxpZmllZE5hbWUmIG90aGVyKTsKKyAgICBjb25zdCBRdWFs
aWZpZWROYW1lJiBvcGVyYXRvcj0oY29uc3QgUXVhbGlmaWVkTmFtZSYgb3RoZXIpOworCisgICAg
RE9NU3RyaW5nSW1wbCogbG9jYWxOYW1lUHRyKCkgY29uc3QgeyByZXR1cm4gbG9jYWxOYW1lKCku
aW1wbGVtZW50YXRpb24oKTsgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBRdWFs
aWZpZWROYW1lJiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9pbXBsID09IG90aGVyLm1faW1wbCB8
fCAocHJlZml4KCkgPT0gb3RoZXIucHJlZml4KCkgJiYgbWF0Y2hlcyhvdGhlcikpOyB9CisgICAg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IFF1YWxpZmllZE5hbWUmIG90aGVyKSBjb25zdCB7IHJldHVy
biAhKCp0aGlzID09IG90aGVyKTsgfQorCisgICAgYm9vbCBtYXRjaGVzKGNvbnN0IFF1YWxpZmll
ZE5hbWUmIG90aGVyKSBjb25zdCB7IHJldHVybiBtX2ltcGwgPT0gb3RoZXIubV9pbXBsIHx8IChs
b2NhbE5hbWUoKSA9PSBvdGhlci5sb2NhbE5hbWUoKSAmJiBuYW1lc3BhY2VVUkkoKSA9PSBvdGhl
ci5uYW1lc3BhY2VVUkkoKSk7IH0KKworICAgIGJvb2wgaGFzUHJlZml4KCkgY29uc3QgeyByZXR1
cm4gIW1faW1wbC0+bV9wcmVmaXguaXNOdWxsKCk7IH0gLy8gRklYTUU6IEtpbGwgdGhlIG51bGwg
Y2hlY2sgZXZlbnR1YWxseS4KKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCgpIGNvbnN0
IHsgcmV0dXJuIG1faW1wbC0+bV9wcmVmaXg7IH0KKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGxv
Y2FsTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1wbC0+bV9sb2NhbE5hbWU7IH0KKyAgICBjb25z
dCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSgpIGNvbnN0IHsgcmV0dXJuIG1faW1wbC0+bV9u
YW1lc3BhY2U7IH0KKworICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgdGVtcG9yYXJ5IG1ldGhvZC9o
YWNrIGZvciBzdGFnZSBvbmUgb2YgdGhlIFF1YWxpZmllZE5hbWUgcGF0Y2guICBJdCB3aWxsIGdv
IGF3YXkgZXZlbnR1YWxseS4KKyAgICB2b2lkIHNldFByZWZpeChjb25zdCBBdG9taWNTdHJpbmcm
IHApIHsgbV9pbXBsLT5tX3ByZWZpeCA9IHA7IH0KKworcHJpdmF0ZToKKyAgICBzdGF0aWMgUVB0
ckRpY3Q8UVB0ckRpY3Q8UVB0ckRpY3Q8UXVhbGlmaWVkTmFtZUltcGw+ID4gPiogbV9xTmFtZUNh
Y2hlOworCisgICAgdm9pZCByZWYoKSB7IGlmIChtX2ltcGwpIG1faW1wbC0+cmVmKCk7IH0gLy8g
RklYTUU6IFlhbmsgbnVsbCBjaGVjayBldmVudHVhbGx5LgorICAgIHZvaWQgZGVyZWYoKTsKKyAg
ICAKKyAgICBRdWFsaWZpZWROYW1lSW1wbCogbV9pbXBsOworfTsKKworYm9vbCBvcGVyYXRvcj09
KGNvbnN0IEF0b21pY1N0cmluZyYgYSwgY29uc3QgUXVhbGlmaWVkTmFtZSYgcSkgeyByZXR1cm4g
YSA9PSBxLmxvY2FsTmFtZSgpOyB9Citib29sIG9wZXJhdG9yIT0oY29uc3QgQXRvbWljU3RyaW5n
JiBhLCBjb25zdCBRdWFsaWZpZWROYW1lJiBxKSB7IHJldHVybiBhICE9IHEubG9jYWxOYW1lKCk7
IH0KK2Jvb2wgb3BlcmF0b3I9PShjb25zdCBRdWFsaWZpZWROYW1lJiBxLCBjb25zdCBBdG9taWNT
dHJpbmcmIGEpIHsgcmV0dXJuIGEgPT0gcS5sb2NhbE5hbWUoKTsgfQorYm9vbCBvcGVyYXRvciE9
KGNvbnN0IFF1YWxpZmllZE5hbWUmIHEsIGNvbnN0IEF0b21pY1N0cmluZyYgYSkgeyByZXR1cm4g
YSAhPSBxLmxvY2FsTmFtZSgpOyB9CisKKworfQorI2VuZGlmCkluZGV4OiBXZWJDb3JlL2todG1s
L3htbC9kb21fdGV4dGltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvbG9jYWwvaG9tZS9jdnMv
TGFieXJpbnRoL1dlYkNvcmUva2h0bWwveG1sL2RvbV90ZXh0aW1wbC5oLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjE2CmRpZmYgLXUgLXAgLXIxLjE2IFdlYkNvcmUva2h0bWwveG1sL2RvbV90ZXh0
aW1wbC5oCi0tLSBXZWJDb3JlL2todG1sL3htbC9kb21fdGV4dGltcGwuaAkyMDA1LzA1LzEwIDIx
OjU5OjE1CTEuMTYKKysrIFdlYkNvcmUva2h0bWwveG1sL2RvbV90ZXh0aW1wbC5oCTIwMDUvMDYv
MDIgMDQ6MTI6MjAKQEAgLTEwMCw4ICsxMDAsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBOb2Rl
SW1wbCAqY2xvbmVOb2RlKGJvb2wgZGVlcCk7CiAKICAgICAvLyBPdGhlciBtZXRob2RzIChub3Qg
cGFydCBvZiBET00pCi0KLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CisgICAgdmlydHVhbCBi
b29sIGlzQ29tbWVudE5vZGUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBi
b29sIGNoaWxkVHlwZUFsbG93ZWQoIHVuc2lnbmVkIHNob3J0IHR5cGUgKTsKIAogICAgIHZpcnR1
YWwgRE9NU3RyaW5nIHRvU3RyaW5nKCkgY29uc3Q7CkBAIC0xMjgsNyArMTI3LDYgQEAgcHVibGlj
OgogICAgIC8vIE90aGVyIG1ldGhvZHMgKG5vdCBwYXJ0IG9mIERPTSkKIAogICAgIHZpcnR1YWwg
Ym9vbCBpc1RleHROb2RlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgSWQg
aWQoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoKCk7CiAgICAgdmlydHVhbCBib29s
IHJlbmRlcmVySXNOZWVkZWQoa2h0bWw6OlJlbmRlclN0eWxlICopOwogICAgIHZpcnR1YWwga2h0
bWw6OlJlbmRlck9iamVjdCAqY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEgKiwga2h0bWw6OlJl
bmRlclN0eWxlICopOwpJbmRleDogV2ViQ29yZS9rd3EvRE9NLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9sb2NhbC9ob21lL2N2cy9MYWJ5cmludGgvV2ViQ29yZS9rd3EvRE9NLm1tLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjM2CmRpZmYgLXUgLXAgLXIxLjM2IFdlYkNvcmUva3dxL0RPTS5tbQot
LS0gV2ViQ29yZS9rd3EvRE9NLm1tCTIwMDUvMDUvMTkgMTg6MzI6MjcJMS4zNgorKysgV2ViQ29y
ZS9rd3EvRE9NLm1tCTIwMDUvMDYvMDIgMDQ6MTI6MjIKQEAgLTMzOCw3ICszMzgsOCBAQCB1c2lu
ZyBraHRtbDo6U2hhcmVkUHRyOwogICAgIEFTU0VSVChwcmVmaXgpOwogCiAgICAgaW50IGV4Y2Vw
dGlvbkNvZGUgPSAwOwotICAgIFtzZWxmIF9ub2RlSW1wbF0tPnNldFByZWZpeChwcmVmaXgsIGV4
Y2VwdGlvbkNvZGUpOworICAgIERPTVN0cmluZyBwcmVmaXhTdHIocHJlZml4KTsKKyAgICBbc2Vs
ZiBfbm9kZUltcGxdLT5zZXRQcmVmaXgocHJlZml4U3RyLmltcGxlbWVudGF0aW9uKCksIGV4Y2Vw
dGlvbkNvZGUpOwogICAgIHJhaXNlT25ET01FcnJvcihleGNlcHRpb25Db2RlKTsKIH0KIApJbmRl
eDogV2ViQ29yZS9rd3EvS1dRS0hUTUxQYXJ0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9sb2Nh
bC9ob21lL2N2cy9MYWJ5cmludGgvV2ViQ29yZS9rd3EvS1dRS0hUTUxQYXJ0Lm1tLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjY0MwpkaWZmIC11IC1wIC1yMS42NDMgV2ViQ29yZS9rd3EvS1dRS0hU
TUxQYXJ0Lm1tCi0tLSBXZWJDb3JlL2t3cS9LV1FLSFRNTFBhcnQubW0JMjAwNS8wNS8yNiAyMDoz
MDoxMgkxLjY0MworKysgV2ViQ29yZS9rd3EvS1dRS0hUTUxQYXJ0Lm1tCTIwMDUvMDYvMDIgMDQ6
MTI6MjYKQEAgLTEwMCw2ICsxMDAsNyBAQCB1c2luZyBET006OkhUTUxFbGVtZW50SW1wbDsKIHVz
aW5nIERPTTo6SFRNTEZvcm1FbGVtZW50SW1wbDsKIHVzaW5nIERPTTo6SFRNTEZyYW1lRWxlbWVu
dEltcGw7CiB1c2luZyBET006OkhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsOwordXNpbmcgRE9N
OjpIVE1MTmFtZXM7CiB1c2luZyBET006OkhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbDsKIHVzaW5n
IERPTTo6Tm9kZTsKIHVzaW5nIERPTTo6Tm9kZUltcGw7CkBAIC0yODQ4LDE0ICsyODQ5LDEwIEBA
IE5TRmlsZVdyYXBwZXIgKktXUUtIVE1MUGFydDo6ZmlsZVdyYXBwZXIKIAogc3RhdGljIEVsZW1l
bnRJbXBsICpsaXN0UGFyZW50KEVsZW1lbnRJbXBsICppdGVtKQogewotICAgIC8vIEljayEgIEF2
b2lkIHVzZSBvZiBpdGVtLT5pZCgpIHdoaWNoIGNvbmZ1c2VzIE9iakMrKy4KLSAgICB1bnNpZ25l
ZCBzaG9ydCBfaWQgPSBpdGVtLT5pZGVudGlmaWVyKCk7Ci0gICAgCi0gICAgd2hpbGUgKF9pZCAh
PSBJRF9VTCAmJiBfaWQgIT0gSURfT0wpIHsKKyAgICB3aGlsZSAoIWl0ZW0tPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjp1bCgpKSAmJiAhaXRlbS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9sKCkpKSB7
CiAgICAgICAgIGl0ZW0gPSBzdGF0aWNfY2FzdDxFbGVtZW50SW1wbCAqPihpdGVtLT5wYXJlbnRO
b2RlKCkpOwogICAgICAgICBpZiAoIWl0ZW0pCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
X2lkID0gaXRlbS0+aWRlbnRpZmllcigpOwogICAgIH0KICAgICByZXR1cm4gaXRlbTsKIH0KQEAg
LTI4NjgsNyArMjg2NSw3IEBAIHN0YXRpYyBOb2RlSW1wbCogaXNUZXh0Rmlyc3RJbkxpc3RJdGVt
KE4KICAgICB3aGlsZSAocGFyKSB7CiAgICAgICAgIGlmIChwYXItPmZpcnN0Q2hpbGQoKSAhPSBl
KQogICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIGlmIChwYXItPmlkZW50aWZpZXIoKSA9
PSBJRF9MSSkKKyAgICAgICAgaWYgKHBhci0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmxpKCkpKQog
ICAgICAgICAgICAgcmV0dXJuIHBhcjsKICAgICAgICAgZSA9IHBhcjsKICAgICAgICAgcGFyID0g
cGFyLT5wYXJlbnROb2RlKCk7CkBAIC0zMDIyLDEwOSArMzAxOSw5NSBAQCBOU0F0dHJpYnV0ZWRT
dHJpbmcgKktXUUtIVE1MUGFydDo6YXR0cmliCiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgICAgIC8vIFRoaXMgaXMgb3VyIHNpbXBsZSBIVE1MIC0+IEFTQ0lJIHRyYW5zZm9ybWF0
aW9uOgogICAgICAgICAgICAgICAgIFFTdHJpbmcgdGV4dDsKLSAgICAgICAgICAgICAgICBOb2Rl
SW1wbDo6SWQgX2lkID0gbi0+aWRlbnRpZmllcigpOwotICAgICAgICAgICAgICAgIHN3aXRjaChf
aWQpIHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9BOgotICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gTm90ZSB0aGUgc3RhcnQgb2YgdGhlIDxhPiBlbGVtZW50LiAgV2Ugd2lsbCBhZGQg
dGhlIE5TTGlua0F0dHJpYnV0ZU5hbWUKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGF0dHJp
YnV0ZSB0byB0aGUgYXR0cmlidXRlZCBzdHJpbmcgd2hlbiBuYXZpZ2F0aW5nIHRvIHRoZSBuZXh0
IHNpYmxpbmcgCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBvZiB0aGlzIG5vZGUuCi0gICAg
ICAgICAgICAgICAgICAgICAgICBsaW5rU3RhcnRMb2NhdGlvbiA9IFtyZXN1bHQgbGVuZ3RoXTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtTdGFydE5vZGUgPSBzdGF0aWNfY2FzdDxFbGVt
ZW50SW1wbCo+KG4pOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgY2FzZSBJRF9CUjoKLSAgICAgICAgICAgICAgICAgICAgICAgIHRleHQgKz0g
IlxuIjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGhhc05ld0xpbmUgPSB0cnVlOwotICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgCi0gICAgICAgICAgICAgICAgICAgIGNhc2Ug
SURfTEk6Ci0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUVN0cmluZyBsaXN0VGV4dDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbGVt
ZW50SW1wbCAqaXRlbVBhcmVudCA9IGxpc3RQYXJlbnQoc3RhdGljX2Nhc3Q8RWxlbWVudEltcGwg
Kj4obikpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICghaGFzTmV3TGluZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbGlzdFRleHQgKz0gJ1xuJzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNOZXdM
aW5lID0gdHJ1ZTsKLSAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0SXRlbXMu
YXBwZW5kKHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsKj4obikpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIExpc3RJdGVtSW5mbyBpbmZvOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGluZm8uc3RhcnQgPSBbcmVzdWx0IGxlbmd0aF07Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW5mby5lbmQgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RJdGVtTG9j
YXRpb25zLmFwcGVuZCAoaW5mbyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbGlzdFRleHQgKz0gJ1x0JzsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoaXRlbVBhcmVudCAmJiByZW5kZXJlci0+aXNMaXN0SXRlbSgpKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRlckxpc3RJdGVtICpsaXN0UmVu
ZGVyZXIgPSBzdGF0aWNfY2FzdDxSZW5kZXJMaXN0SXRlbSo+KHJlbmRlcmVyKTsKLQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhNYXJrZXJXaWR0aCA9IE1BWChbZm9udCBwb2lu
dFNpemVdLCBtYXhNYXJrZXJXaWR0aCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN3aXRjaChzdHlsZS0+bGlzdFN0eWxlVHlwZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjYXNlIGtodG1sOjpESVNDOgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGxpc3RUZXh0ICs9ICgoUUNoYXIpQlVMTEVUX0NIQVIpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2FzZSBraHRtbDo6Q0lSQ0xFOgotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RUZXh0ICs9ICgoUUNoYXIpQ0lSQ0xFX0NIQVIp
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBraHRtbDo6U1FVQVJFOgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RUZXh0ICs9ICgoUUNoYXIpU1FV
QVJFX0NIQVIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBraHRtbDo6TE5PTkU6
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFFTdHJpbmcgbWFya2VyID0gbGlzdFJlbmRlcmVyLT5tYXJr
ZXJTdHJpbmdWYWx1ZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGxpc3RUZXh0ICs9IG1hcmtlcjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBVc2UgQXBwS2l0IG1ldHJpY3MuICBXaWxsIGJlIHJlbmRlcmVkIGJ5IEFwcEtpdC4K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBtYXJrZXJXaWR0
aCA9IFtmb250IHdpZHRoT2ZTdHJpbmc6IG1hcmtlci5nZXROU1N0cmluZygpXTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhNYXJrZXJXaWR0aCA9IE1BWChtYXJr
ZXJXaWR0aCwgbWF4TWFya2VyV2lkdGgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgaWYgKG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjphKCkpKSB7
CisgICAgICAgICAgICAgICAgICAgIC8vIE5vdGUgdGhlIHN0YXJ0IG9mIHRoZSA8YT4gZWxlbWVu
dC4gIFdlIHdpbGwgYWRkIHRoZSBOU0xpbmtBdHRyaWJ1dGVOYW1lCisgICAgICAgICAgICAgICAg
ICAgIC8vIGF0dHJpYnV0ZSB0byB0aGUgYXR0cmlidXRlZCBzdHJpbmcgd2hlbiBuYXZpZ2F0aW5n
IHRvIHRoZSBuZXh0IHNpYmxpbmcgCisgICAgICAgICAgICAgICAgICAgIC8vIG9mIHRoaXMgbm9k
ZS4KKyAgICAgICAgICAgICAgICAgICAgbGlua1N0YXJ0TG9jYXRpb24gPSBbcmVzdWx0IGxlbmd0
aF07CisgICAgICAgICAgICAgICAgICAgIGxpbmtTdGFydE5vZGUgPSBzdGF0aWNfY2FzdDxFbGVt
ZW50SW1wbCo+KG4pOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobi0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OmJyKCkpKSB7CisgICAgICAgICAgICAgICAgICAgIHRleHQgKz0gIlxuIjsKKyAg
ICAgICAgICAgICAgICAgICAgaGFzTmV3TGluZSA9IHRydWU7CisgICAgICAgICAgICAgICAgfSBl
bHNlIGlmIChuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6bGkoKSkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgUVN0cmluZyBsaXN0VGV4dDsKKyAgICAgICAgICAgICAgICAgICAgRWxlbWVudEltcGwg
Kml0ZW1QYXJlbnQgPSBsaXN0UGFyZW50KHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsICo+KG4pKTsK
KyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmICghaGFzTmV3TGlu
ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RUZXh0ICs9ICdcbic7CisgICAgICAgICAg
ICAgICAgICAgIGhhc05ld0xpbmUgPSB0cnVlOwogCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGxpc3RUZXh0ICs9ICcgJzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bGlzdFRleHQgKz0gJ1x0JzsKLSAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
TlNNdXRhYmxlRGljdGlvbmFyeSAqYXR0cnM7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYXR0cnMgPSBbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGlu
aXRdOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0cnMgc2V0T2JqZWN0OmZv
bnQgZm9yS2V5Ok5TRm9udEF0dHJpYnV0ZU5hbWVdOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoc3R5bGUgJiYgc3R5bGUtPmNvbG9yKCkuaXNWYWxpZCgpKQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHJzIHNldE9iamVjdDpzdHlsZS0+Y29sb3Io
KS5nZXROU0NvbG9yKCkgZm9yS2V5Ok5TRm9yZWdyb3VuZENvbG9yQXR0cmlidXRlTmFtZV07Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHlsZSAmJiBzdHlsZS0+YmFja2dy
b3VuZENvbG9yKCkuaXNWYWxpZCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgW2F0dHJzIHNldE9iamVjdDpzdHlsZS0+YmFja2dyb3VuZENvbG9yKCkuZ2V0TlNDb2xvcigp
IGZvcktleTpOU0JhY2tncm91bmRDb2xvckF0dHJpYnV0ZU5hbWVdOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5TQXR0cmlidXRlZFN0cmluZyAqcGFydGlh
bFN0cmluZyA9IFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzpsaXN0
VGV4dC5nZXROU1N0cmluZygpIGF0dHJpYnV0ZXM6YXR0cnNdOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBbYXR0cnMgcmVsZWFzZV07Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFtyZXN1bHQgYXBwZW5kQXR0cmlidXRlZFN0cmluZzogcGFydGlhbFN0cmluZ107ICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGFydGlhbFN0
cmluZyByZWxlYXNlXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIGxpc3RJdGVtcy5hcHBlbmQoc3RhdGljX2Nhc3Q8RWxlbWVudEltcGwqPihuKSk7
CisgICAgICAgICAgICAgICAgICAgIExpc3RJdGVtSW5mbyBpbmZvOworICAgICAgICAgICAgICAg
ICAgICBpbmZvLnN0YXJ0ID0gW3Jlc3VsdCBsZW5ndGhdOworICAgICAgICAgICAgICAgICAgICBp
bmZvLmVuZCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGxpc3RJdGVtTG9jYXRpb25zLmFwcGVu
ZCAoaW5mbyk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBsaXN0
VGV4dCArPSAnXHQnOworICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbVBhcmVudCAmJiByZW5k
ZXJlci0+aXNMaXN0SXRlbSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJMaXN0
SXRlbSAqbGlzdFJlbmRlcmVyID0gc3RhdGljX2Nhc3Q8UmVuZGVyTGlzdEl0ZW0qPihyZW5kZXJl
cik7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIG1heE1hcmtlcldpZHRoID0gTUFYKFtmb250
IHBvaW50U2l6ZV0sIG1heE1hcmtlcldpZHRoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN3
aXRjaChzdHlsZS0+bGlzdFN0eWxlVHlwZSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2FzZSBraHRtbDo6RElTQzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlz
dFRleHQgKz0gKChRQ2hhcilCVUxMRVRfQ0hBUik7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Uga2h0bWw6OkNJ
UkNMRToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdFRleHQgKz0gKChRQ2hh
cilDSVJDTEVfQ0hBUik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Uga2h0bWw6OlNRVUFSRToKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbGlzdFRleHQgKz0gKChRQ2hhcilTUVVBUkVfQ0hBUik7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNhc2Uga2h0bWw6OkxOT05FOgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRU3RyaW5nIG1hcmtlciA9IGxpc3RSZW5kZXJl
ci0+bWFya2VyU3RyaW5nVmFsdWUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bGlzdFRleHQgKz0gbWFya2VyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBV
c2UgQXBwS2l0IG1ldHJpY3MuICBXaWxsIGJlIHJlbmRlcmVkIGJ5IEFwcEtpdC4KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgbWFya2VyV2lkdGggPSBbZm9udCB3aWR0aE9m
U3RyaW5nOiBtYXJrZXIuZ2V0TlNTdHJpbmcoKV07CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1heE1hcmtlcldpZHRoID0gTUFYKG1hcmtlcldpZHRoLCBtYXhNYXJrZXJXaWR0aCk7
CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKworICAgICAgICAgICAgICAgICAgICAgICAgbGlzdFRleHQgKz0gJyAnOworICAgICAgICAg
ICAgICAgICAgICAgICAgbGlzdFRleHQgKz0gJ1x0JzsKKworICAgICAgICAgICAgICAgICAgICAg
ICAgTlNNdXRhYmxlRGljdGlvbmFyeSAqYXR0cnM7CiAKLSAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBJRF9PTDoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9VTDoKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGF0dHJzID0gW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIFthdHRycyBzZXRPYmplY3Q6Zm9udCBmb3JLZXk6TlNGb250
QXR0cmlidXRlTmFtZV07CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3R5bGUgJiYgc3R5
bGUtPmNvbG9yKCkuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRy
cyBzZXRPYmplY3Q6c3R5bGUtPmNvbG9yKCkuZ2V0TlNDb2xvcigpIGZvcktleTpOU0ZvcmVncm91
bmRDb2xvckF0dHJpYnV0ZU5hbWVdOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0eWxl
ICYmIHN0eWxlLT5iYWNrZ3JvdW5kQ29sb3IoKS5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgW2F0dHJzIHNldE9iamVjdDpzdHlsZS0+YmFja2dyb3VuZENvbG9yKCkuZ2V0
TlNDb2xvcigpIGZvcktleTpOU0JhY2tncm91bmRDb2xvckF0dHJpYnV0ZU5hbWVdOworCisgICAg
ICAgICAgICAgICAgICAgICAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKnBhcnRpYWxTdHJpbmcgPSBb
W05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6bGlzdFRleHQuZ2V0TlNT
dHJpbmcoKSBhdHRyaWJ1dGVzOmF0dHJzXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFthdHRy
cyByZWxlYXNlXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFtyZXN1bHQgYXBwZW5kQXR0cmli
dXRlZFN0cmluZzogcGFydGlhbFN0cmluZ107ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgICAgICAgICAgW3BhcnRpYWxTdHJpbmcgcmVsZWFzZV07CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
Om9sKCkpIHx8IG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp1bCgpKSkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCFoYXNOZXdMaW5lKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRleHQgKz0gIlxuIjsKICAgICAgICAgICAgICAgICAgICAgICAgIGhhc05ld0xpbmUgPSB0cnVl
OwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICAgICAg
Y2FzZSBJRF9URDoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9USDoKLSAgICAgICAgICAg
ICAgICAgICAgY2FzZSBJRF9IUjoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9ERDoKLSAg
ICAgICAgICAgICAgICAgICAgY2FzZSBJRF9ETDoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJ
RF9EVDoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9QUkU6Ci0gICAgICAgICAgICAgICAg
ICAgIGNhc2UgSURfQkxPQ0tRVU9URToKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9ESVY6
CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
OnRkKCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OnRoKCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OmhyKCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmRkKCkpIHx8CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmRsKCkpIHx8CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmR0KCkpIHx8Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnBy
ZSgpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjpibG9ja3F1b3RlKCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmRpdigpKSkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCFoYXNOZXdMaW5lKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQgKz0g
J1xuJzsKICAgICAgICAgICAgICAgICAgICAgICAgIGhhc05ld0xpbmUgPSB0cnVlOwotICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfUDoK
LSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9UUjoKLSAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBJRF9IMToKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9IMjoKLSAgICAgICAgICAgICAg
ICAgICAgY2FzZSBJRF9IMzoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9INDoKLSAgICAg
ICAgICAgICAgICAgICAgY2FzZSBJRF9INToKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9I
NjogeworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG4tPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjpwKCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OnRyKCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbi0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OmgxKCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmgyKCkpIHx8CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmgzKCkpIHx8CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omg0KCkpIHx8
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
Omg1KCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6Omg2KCkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWhhc05ld0xp
bmUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCArPSAnXG4nOwogICAgICAgICAg
ICAgICAgICAgICAgICAgCkBAIC0zMTM5LDEwICszMTIyLDggQEAgTlNBdHRyaWJ1dGVkU3RyaW5n
ICpLV1FLSFRNTFBhcnQ6OmF0dHJpYgogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICBoYXNOZXdMaW5lID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJ
RF9JTUc6CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG4tPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjppbWcoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZW5kaW5nU3R5bGVk
U3BhY2UgIT0gbmlsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpbmtTdGFy
dExvY2F0aW9uID09IFtyZXN1bHQgbGVuZ3RoXSkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICArK2xpbmtTdGFydExvY2F0aW9uOwpAQCAtMzE1Niw4ICszMTM3LDkgQEAgTlNBdHRy
aWJ1dGVkU3RyaW5nICpLV1FLSFRNTFBhcnQ6OmF0dHJpYgogICAgICAgICAgICAgICAgICAgICAg
ICAgTlNBdHRyaWJ1dGVkU3RyaW5nICppU3RyaW5nID0gW05TQXR0cmlidXRlZFN0cmluZyBhdHRy
aWJ1dGVkU3RyaW5nV2l0aEF0dGFjaG1lbnQ6YXR0YWNobWVudF07CiAgICAgICAgICAgICAgICAg
ICAgICAgICBbcmVzdWx0IGFwcGVuZEF0dHJpYnV0ZWRTdHJpbmc6IGlTdHJpbmddOwogICAgICAg
ICAgICAgICAgICAgICAgICAgW2F0dGFjaG1lbnQgcmVsZWFzZV07Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0K
KwogICAgICAgICAgICAgICAgIE5TQXR0cmlidXRlZFN0cmluZyAqcGFydGlhbFN0cmluZyA9IFtb
TlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzp0ZXh0LmdldE5TU3RyaW5n
KCldOwogICAgICAgICAgICAgICAgIFtyZXN1bHQgYXBwZW5kQXR0cmlidXRlZFN0cmluZzogcGFy
dGlhbFN0cmluZ107CiAgICAgICAgICAgICAgICAgW3BhcnRpYWxTdHJpbmcgcmVsZWFzZV07CkBA
IC0zMTc5LDcxICszMTYxLDYwIEBAIE5TQXR0cmlidXRlZFN0cmluZyAqS1dRS0hUTUxQYXJ0Ojph
dHRyaWIKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIG5leHQgPSBuLT5uZXh0
U2libGluZygpOwogCi0gICAgICAgICAgICBOb2RlSW1wbDo6SWQgX2lkID0gbi0+aWRlbnRpZmll
cigpOwotICAgICAgICAgICAgc3dpdGNoKF9pZCkgewotICAgICAgICAgICAgICAgIGNhc2UgSURf
QToKLSAgICAgICAgICAgICAgICAgICAgLy8gRW5kIG9mIGEgPGE+IGVsZW1lbnQuICBDcmVhdGUg
YW4gYXR0cmlidXRlZCBzdHJpbmcgTlNMaW5rQXR0cmlidXRlTmFtZSBhdHRyaWJ1dGUKLSAgICAg
ICAgICAgICAgICAgICAgLy8gZm9yIHRoZSByYW5nZSBvZiB0aGUgbGluay4gIE5vdGUgdGhhdCB3
ZSBjcmVhdGUgdGhlIGF0dHJpYnV0ZWQgc3RyaW5nIGZyb20gdGhlIERPTSwgd2hpY2gKLSAgICAg
ICAgICAgICAgICAgICAgLy8gd2lsbCBoYXZlIGNvcnJlY3RlZCBhbnkgaWxsZWdhbGx5IG5lc3Rl
ZCA8YT4gZWxlbWVudHMuCi0gICAgICAgICAgICAgICAgICAgIGlmIChsaW5rU3RhcnROb2RlICYm
IG4gPT0gbGlua1N0YXJ0Tm9kZSl7Ci0gICAgICAgICAgICAgICAgICAgICAgICBET01TdHJpbmcg
aHJlZiA9IHBhcnNlVVJMKGxpbmtTdGFydE5vZGUtPmdldEF0dHJpYnV0ZShBVFRSX0hSRUYpKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIEtVUkwga1VSTCA9IEtXUShsaW5rU3RhcnROb2RlLT5n
ZXREb2N1bWVudCgpLT5wYXJ0KCkpLT5jb21wbGV0ZVVSTChocmVmLnN0cmluZygpKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgTlNVUkwgKlVSTCA9
IGtVUkwuZ2V0TlNVUkwoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFtyZXN1bHQgYWRkQXR0
cmlidXRlOk5TTGlua0F0dHJpYnV0ZU5hbWUgdmFsdWU6VVJMIHJhbmdlOk5TTWFrZVJhbmdlKGxp
bmtTdGFydExvY2F0aW9uLCBbcmVzdWx0IGxlbmd0aF0tbGlua1N0YXJ0TG9jYXRpb24pXTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGxpbmtTdGFydE5vZGUgPSAwOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKG4tPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjphKCkpKSB7CisgICAgICAgICAgICAgICAgLy8gRW5kIG9mIGEg
PGE+IGVsZW1lbnQuICBDcmVhdGUgYW4gYXR0cmlidXRlZCBzdHJpbmcgTlNMaW5rQXR0cmlidXRl
TmFtZSBhdHRyaWJ1dGUKKyAgICAgICAgICAgICAgICAvLyBmb3IgdGhlIHJhbmdlIG9mIHRoZSBs
aW5rLiAgTm90ZSB0aGF0IHdlIGNyZWF0ZSB0aGUgYXR0cmlidXRlZCBzdHJpbmcgZnJvbSB0aGUg
RE9NLCB3aGljaAorICAgICAgICAgICAgICAgIC8vIHdpbGwgaGF2ZSBjb3JyZWN0ZWQgYW55IGls
bGVnYWxseSBuZXN0ZWQgPGE+IGVsZW1lbnRzLgorICAgICAgICAgICAgICAgIGlmIChsaW5rU3Rh
cnROb2RlICYmIG4gPT0gbGlua1N0YXJ0Tm9kZSkgeworICAgICAgICAgICAgICAgICAgICBET01T
dHJpbmcgaHJlZiA9IHBhcnNlVVJMKGxpbmtTdGFydE5vZGUtPmdldEF0dHJpYnV0ZShBVFRSX0hS
RUYpKTsKKyAgICAgICAgICAgICAgICAgICAgS1VSTCBrVVJMID0gS1dRKGxpbmtTdGFydE5vZGUt
PmdldERvY3VtZW50KCktPnBhcnQoKSktPmNvbXBsZXRlVVJMKGhyZWYuc3RyaW5nKCkpOworICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgTlNVUkwgKlVSTCA9IGtVUkwu
Z2V0TlNVUkwoKTsKKyAgICAgICAgICAgICAgICAgICAgW3Jlc3VsdCBhZGRBdHRyaWJ1dGU6TlNM
aW5rQXR0cmlidXRlTmFtZSB2YWx1ZTpVUkwgcmFuZ2U6TlNNYWtlUmFuZ2UobGlua1N0YXJ0TG9j
YXRpb24sIFtyZXN1bHQgbGVuZ3RoXS1saW5rU3RhcnRMb2NhdGlvbildOworICAgICAgICAgICAg
ICAgICAgICBsaW5rU3RhcnROb2RlID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBlbHNlIGlmIChuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b2woKSkg
fHwgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnVsKCkpKSB7CisgICAgICAgICAgICAgICAgaWYg
KCFoYXNOZXdMaW5lKQorICAgICAgICAgICAgICAgICAgICB0ZXh0ICs9ICdcbic7CisgICAgICAg
ICAgICAgICAgaGFzTmV3TGluZSA9IHRydWU7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG4tPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjpsaSgpKSkgewogICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIGNhc2UgSURfT0w6Ci0gICAgICAgICAgICAgICAgY2FzZSBJRF9VTDoKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKCFoYXNOZXdMaW5lKQotICAgICAgICAgICAgICAgICAgICAgICAgdGV4
dCArPSAnXG4nOwotICAgICAgICAgICAgICAgICAgICBoYXNOZXdMaW5lID0gdHJ1ZTsKLSAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBjYXNlIElEX0xJOgotICAg
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgaSwgY291bnQg
PSBsaXN0SXRlbXMuY291bnQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7
IGkgPCBjb3VudDsgaSsrKXsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGlzdEl0
ZW1zLmF0KGkpID09IG4pewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0SXRl
bUxvY2F0aW9uc1tpXS5lbmQgPSBbcmVzdWx0IGxlbmd0aF07Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpbnQgaSwgY291bnQgPSBsaXN0
SXRlbXMuY291bnQoKTsKKyAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkr
Kyl7CisgICAgICAgICAgICAgICAgICAgIGlmIChsaXN0SXRlbXMuYXQoaSkgPT0gbil7CisgICAg
ICAgICAgICAgICAgICAgICAgICBsaXN0SXRlbUxvY2F0aW9uc1tpXS5lbmQgPSBbcmVzdWx0IGxl
bmd0aF07CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoIWhhc05ld0xpbmUpCi0gICAgICAgICAgICAg
ICAgICAgICAgICB0ZXh0ICs9ICdcbic7Ci0gICAgICAgICAgICAgICAgICAgIGhhc05ld0xpbmUg
PSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgIGNh
c2UgSURfVEQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBJRF9USDoKLSAgICAgICAgICAgICAgICBj
YXNlIElEX0hSOgotICAgICAgICAgICAgICAgIGNhc2UgSURfREQ6Ci0gICAgICAgICAgICAgICAg
Y2FzZSBJRF9ETDoKLSAgICAgICAgICAgICAgICBjYXNlIElEX0RUOgotICAgICAgICAgICAgICAg
IGNhc2UgSURfUFJFOgotICAgICAgICAgICAgICAgIGNhc2UgSURfQkxPQ0tRVU9URToKLSAgICAg
ICAgICAgICAgICBjYXNlIElEX0RJVjoKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNOZXdM
aW5lKQotICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCArPSAnXG4nOwotICAgICAgICAgICAg
ICAgICAgICBoYXNOZXdMaW5lID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgY2FzZSBJRF9QOgotICAgICAgICAgICAgICAgIGNhc2UgSURfVFI6Ci0g
ICAgICAgICAgICAgICAgY2FzZSBJRF9IMToKLSAgICAgICAgICAgICAgICBjYXNlIElEX0gyOgot
ICAgICAgICAgICAgICAgIGNhc2UgSURfSDM6Ci0gICAgICAgICAgICAgICAgY2FzZSBJRF9INDoK
LSAgICAgICAgICAgICAgICBjYXNlIElEX0g1OgotICAgICAgICAgICAgICAgIGNhc2UgSURfSDY6
Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaGFzTmV3TGluZSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHRleHQgKz0gJ1xuJzsKLSAgICAgICAgICAgICAgICAgICAgLy8gQW4gZXh0cmEgbmV3
bGluZSBpcyBuZWVkZWQgYXQgdGhlIHN0YXJ0LCBub3QgdGhlIGVuZCwgb2YgdGhlc2UgdHlwZXMg
b2YgdGFncywKLSAgICAgICAgICAgICAgICAgICAgLy8gc28gZG9uJ3QgYWRkIGFub3RoZXIgaGVy
ZS4KLSAgICAgICAgICAgICAgICAgICAgaGFzTmV3TGluZSA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIWhh
c05ld0xpbmUpCisgICAgICAgICAgICAgICAgICAgIHRleHQgKz0gJ1xuJzsKKyAgICAgICAgICAg
ICAgICBoYXNOZXdMaW5lID0gdHJ1ZTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobi0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OnRkKCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgIG4tPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjp0aCgpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6aHIoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OmRkKCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgIG4tPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjpkbCgpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICBuLT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6ZHQoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgbi0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OnByZSgpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICBu
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YmxvY2txdW90ZSgpKSB8fAorICAgICAgICAgICAgICAg
ICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZGl2KCkpKSB7CisgICAgICAgICAgICAg
ICAgaWYgKCFoYXNOZXdMaW5lKQorICAgICAgICAgICAgICAgICAgICB0ZXh0ICs9ICdcbic7Cisg
ICAgICAgICAgICAgICAgaGFzTmV3TGluZSA9IHRydWU7CisgICAgICAgICAgICB9IGVsc2UgaWYg
KG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpwKCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAg
IG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0cigpKSB8fAorICAgICAgICAgICAgICAgICAgICAg
ICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDEoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAg
ICAgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmgyKCkpIHx8CisgICAgICAgICAgICAgICAgICAg
ICAgIG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoMygpKSB8fAorICAgICAgICAgICAgICAgICAg
ICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDQoKSkgfHwKKyAgICAgICAgICAgICAgICAg
ICAgICAgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omg1KCkpIHx8CisgICAgICAgICAgICAgICAg
ICAgICAgIG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoNigpKSkgeworICAgICAgICAgICAgICAg
IGlmICghaGFzTmV3TGluZSkKKyAgICAgICAgICAgICAgICAgICAgdGV4dCArPSAnXG4nOworICAg
ICAgICAgICAgICAgIC8vIEFuIGV4dHJhIG5ld2xpbmUgaXMgbmVlZGVkIGF0IHRoZSBzdGFydCwg
bm90IHRoZSBlbmQsIG9mIHRoZXNlIHR5cGVzIG9mIHRhZ3MsCisgICAgICAgICAgICAgICAgLy8g
c28gZG9uJ3QgYWRkIGFub3RoZXIgaGVyZS4KKyAgICAgICAgICAgICAgICBoYXNOZXdMaW5lID0g
dHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgTlNBdHRyaWJ1
dGVkU3RyaW5nICpwYXJ0aWFsU3RyaW5nID0gW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGlu
aXRXaXRoU3RyaW5nOnRleHQuZ2V0TlNTdHJpbmcoKV07CkBAIC0zNzAzLDcgKzM2NzQsNyBAQCB2
b2lkIEtXUUtIVE1MUGFydDo6c2V0U2VsZWN0aW9uRnJvbU5vbmUoCiAgICAgICAgIHdoaWxlIChu
b2RlKSB7CiAgICAgICAgICAgICAvLyBMb29rIGZvciBhIGJsb2NrIGZsb3csIGJ1dCBza2lwIG92
ZXIgdGhlIEhUTUwgZWxlbWVudCwgc2luY2Ugd2UgcmVhbGx5CiAgICAgICAgICAgICAvLyB3YW50
IHRvIGdldCBhdCBsZWFzdCBhcyBmYXIgYXMgdGhlIHRoZSBCT0RZIGVsZW1lbnQgaW4gYSBkb2N1
bWVudC4KLSAgICAgICAgICAgIGlmIChub2RlLT5pc0Jsb2NrRmxvdygpICYmIG5vZGUtPmlkZW50
aWZpZXIoKSAhPSBJRF9IVE1MKQorICAgICAgICAgICAgaWYgKG5vZGUtPmlzQmxvY2tGbG93KCkg
JiYgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omh0bWwoKSkpCiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpOwogICAg
ICAgICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>2341</attachid>
            <date>2005-06-14 15:46:41 -0700</date>
            <delta_ts>2005-06-15 12:45:59 -0700</delta_ts>
            <desc>Groundwork: eliminate the need to query for FORBIDDEN by fixing our newline handing for pre and other tags</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>2819</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9D
aGFuZ2VMb2csdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNDI2NApkaWZmIC11IC1wIC1yMS40MjY0
IENoYW5nZUxvZwotLS0gQ2hhbmdlTG9nCTE0IEp1biAyMDA1IDAwOjI5OjM1IC0wMDAwCTEuNDI2
NAorKysgQ2hhbmdlTG9nCTE0IEp1biAyMDA1IDIxOjAxOjA5IC0wMDAwCkBAIC0xLDMgKzEsMTcg
QEAKKzIwMDUtMDYtMTQgIERhdmlkIEh5YXR0ICA8aHlhdHRAYXBwbGUuY29tPgorCisJVGhpcyBp
cyBhbiB1cGRhdGUtY2FuZGlkYXRlLXdvcnRoeSBidWcuICBBdCBzb21lIHBvaW50IHRoZSBiZWhh
dmlvciBvZiA8cHJlPiBicm9rZSBzbyB0aGF0IHRoZSBuZXdsaW5lCisJd2FzIG5vdCBwcm9wZXJs
eSBiZWluZyBlYXRlbiBhZnRlciB0aGUgb3BlbiBvZiB0aGUgdGFnLiAgSW4gYWRkaXRpb24gd2Ug
d2VyZSBlYXRpbmcgdGhlIGZpcnN0IG5ld2xpbmUKKwlhZnRlciBhbGwgb3RoZXIgdGFncy4gIE91
ciBiZWhhdmlvciB3YXMgZXhhY3RseSBiYWNrd2FyZHMuCisJCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3QgY2FzZXMgYWRkZWQ6IChOT05FKQorCisg
ICAgICAgICoga2h0bWwvaHRtbC9odG1sdG9rZW5pemVyLmNwcDoKKyAgICAgICAgKGtodG1sOjpI
VE1MVG9rZW5pemVyOjpwYXJzZVRhZyk6CisgICAgICAgIChraHRtbDo6SFRNTFRva2VuaXplcjo6
d3JpdGUpOgorCiAyMDA1LTA2LTEzICBWaWNraSBNdXJsZXkgIDx2aWNraUBhcHBsZS5jb20+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4uCkluZGV4OiBraHRtbC9odG1sL2h0bWx0b2tlbml6
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwv
aHRtbHRva2VuaXplci5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuOTEKZGlmZiAtdSAtcCAt
cjEuOTEga2h0bWwvaHRtbC9odG1sdG9rZW5pemVyLmNwcAotLS0ga2h0bWwvaHRtbC9odG1sdG9r
ZW5pemVyLmNwcAkxMyBNYXkgMjAwNSAxNjo0ODo1MSAtMDAwMAkxLjkxCisrKyBraHRtbC9odG1s
L2h0bWx0b2tlbml6ZXIuY3BwCTE0IEp1biAyMDA1IDIxOjAxOjE4IC0wMDAwCkBAIC02Miw3ICs2
Miw2IEBAIHVzaW5nIERPTTo6QXR0cmlidXRlSW1wbDsKIHVzaW5nIERPTTo6RE9NU3RyaW5nOwog
dXNpbmcgRE9NOjpET01TdHJpbmdJbXBsOwogdXNpbmcgRE9NOjpEb2N1bWVudEltcGw7Ci11c2lu
ZyBET006OkZPUkJJRERFTjsKIHVzaW5nIERPTTo6ZW1wdHlBdG9tOwogdXNpbmcgRE9NOjplbmRU
YWdSZXF1aXJlbWVudDsKIApAQCAtMTQyNiw2ICsxNDI1LDcgQEAgdm9pZCBIVE1MVG9rZW5pemVy
OjpwYXJzZVRhZyhUb2tlbml6ZXJTdAogICAgICAgICAgICAgY2FzZSBJRF9QUkU6CiAgICAgICAg
ICAgICAgICAgcHJlUG9zID0gMDsKICAgICAgICAgICAgICAgICBwcmUgPSBiZWdpblRhZzsKKyAg
ICAgICAgICAgICAgICBkaXNjYXJkID0gTEZEaXNjYXJkOyAvLyBEaXNjYXJkIHRoZSBmaXJzdCBM
RiBhZnRlciB3ZSBvcGVuIGEgcHJlLgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgY2FzZSBJRF9TQ1JJUFQ6CiAgICAgICAgICAgICAgICAgaWYgKGJlZ2luVGFnKSB7CkBAIC0x
NDc2LDExICsxNDc2LDcgQEAgdm9pZCBIVE1MVG9rZW5pemVyOjpwYXJzZVRhZyhUb2tlbml6ZXJT
dAogICAgICAgICAgICAgICAgIHBsYWludGV4dCA9IGJlZ2luVGFnOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoYmVn
aW5UYWcgJiYgZW5kVGFnUmVxdWlyZW1lbnQodGFnSUQpID09IEZPUkJJRERFTikKLSAgICAgICAg
ICAgICAgICAvLyBEb24ndCBkaXNjYXJkIExGcyBzaW5jZSB0aGlzIGVsZW1lbnQgaGFzIG5vIGVu
ZCB0YWcuCi0gICAgICAgICAgICAgICAgZGlzY2FyZCA9IE5vbmVEaXNjYXJkOwotICAgICAgICAg
ICAgICAgIAorCiAgICAgICAgICAgICByZXR1cm47IC8vIEZpbmlzaGVkIHBhcnNpbmcgdGFnIQog
ICAgICAgICB9CiAgICAgICAgIH0gLy8gZW5kIHN3aXRjaApAQCAtMTY4NywxMCArMTY4Myw4IEBA
IHZvaWQgSFRNTFRva2VuaXplcjo6d3JpdGUoY29uc3QgVG9rZW5pemUKICAgICAgICAgICAgIGlm
ICggcGVuZGluZyApIHsKICAgICAgICAgICAgICAgICAvLyBwcmUgY29udGV4dCBhbHdheXMgZ2V0
cyBpdHMgc3BhY2VzL2xpbmVmZWVkcwogICAgICAgICAgICAgICAgIGlmICggcHJlIHx8IHNjcmlw
dCB8fCAoIXBhcnNlci0+c2VsZWN0TW9kZSgpICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICghcGFyc2VyLT5ub1NwYWNlcygpIHx8IGRlc3QgPiBidWZmZXIgKSkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKCFwYXJzZXItPm5vU3BhY2VzKCkgfHwgZGVzdCA+IGJ1ZmZl
ciApKSkKICAgICAgICAgICAgICAgICAgICAgYWRkUGVuZGluZygpOwotICAgICAgICAgICAgICAg
ICAgICBkaXNjYXJkID0gQWxsRGlzY2FyZDsgLy8gU28gd2UgZGlzY2FyZCB0aGUgZmlyc3QgTEYg
YWZ0ZXIgdGhlIG9wZW4gdGFnLgotICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAv
LyBqdXN0IGZvcmdldCBpdAogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAg
ICAgcGVuZGluZyA9IE5vbmVQZW5kaW5nOwo=
</data>
<flag name="review"
          id="11"
          type_id="1"
          status="+"
          setter="sullivan"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>2343</attachid>
            <date>2005-06-14 17:39:43 -0700</date>
            <delta_ts>2005-06-15 12:45:59 -0700</delta_ts>
            <desc>Add initial implementations of QualifiedName and the HTMLNames classes.</desc>
            <filename>patch-names.txt</filename>
            <type>text/plain</type>
            <size>30132</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9D
aGFuZ2VMb2csdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNDI2NQpkaWZmIC11IC1wIC1yMS40MjY1
IENoYW5nZUxvZwotLS0gQ2hhbmdlTG9nCTE0IEp1biAyMDA1IDIyOjM2OjI3IC0wMDAwCTEuNDI2
NQorKysgQ2hhbmdlTG9nCTE1IEp1biAyMDA1IDAwOjIxOjI0IC0wMDAwCkBAIC0xLDUgKzEsMTcg
QEAKIDIwMDUtMDYtMTQgIERhdmlkIEh5YXR0ICA8aHlhdHRAYXBwbGUuY29tPgogCisgICAgICAg
IEFkZCBhbiBpbml0aWFsIGltcGxlbWVudGF0aW9uIG9mIFF1YWxpZmllZE5hbWUgYW5kIEhUTUxO
YW1lcy4gIFRoZXNlIGNsYXNzZXMgYXJlIG5vdCB1c2VkIGJ5IGFueW9uZSB5ZXQuCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgbWpzCisKKyAgICAgICAgVGVzdCBjYXNlcyBhZGRlZDogKE5vbmUsIGRv
ZXMgbm90IGFmZmVjdCBidWlsZCB5ZXQpCisKKyAgICAgICAgKiBXZWJDb3JlLnBicHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICoga2h0bWwveG1sL2RvbV9xbmFtZS5oLC5jcHAKKyAgICAg
ICAgKiBraHRtbC9odG1sL2h0bWxuYW1lcy5oLC5jcHAKKworMjAwNS0wNi0xNCAgRGF2aWQgSHlh
dHQgIDxoeWF0dEBhcHBsZS5jb20+CisKIAlUaGUgYmVoYXZpb3Igb2YgPHByZT4gaXMgYnJva2Vu
IHNvIHRoYXQgdGhlIG5ld2xpbmUKIAlpcyBub3QgYWx3YXlzIHByb3Blcmx5IGJlaW5nIGVhdGVu
IGFmdGVyIHRoZSBvcGVuIG9mIHRoZSB0YWcuICBJbiBhZGRpdGlvbiB3ZSB3ZXJlIGVhdGluZyB0
aGUgZmlyc3QgbmV3bGluZQogCWFmdGVyIGFsbCBvdGhlciB0YWdzLiAgVGhpcyBwYXRjaCBzdG9w
cyBlYXRpbmcgbmV3bGluZXMgYWZ0ZXIgb3RoZXIgdGFncyBhbmQgcmVmaW5lcyB0aGUgYmVoYXZp
b3IgZm9yIHByZQpJbmRleDoga2h0bWwveG1sL2RvbV9xbmFtZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IGtodG1sL3htbC9kb21fcW5hbWUuaApkaWZmIC1OIGtodG1sL3htbC9kb21fcW5hbWUuaAot
LS0gL2Rldi9udWxsCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIGtodG1sL3htbC9kb21f
cW5hbWUuaAkxNSBKdW4gMjAwNSAwMDoyMToyNCAtMDAwMApAQCAtMCwwICsxLDgyIEBACisvKgor
ICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgor
ICoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBBcHBsZSBDb21wdXRlciwgSW5jLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMz
MCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqLworI2lmbmRlZiBfRE9N
X1FOQU1FX2hfCisjZGVmaW5lIF9ET01fUU5BTUVfaF8KKworI2luY2x1ZGUgPHFwdHJkaWN0Lmg+
CisjaW5jbHVkZSAiZG9tX2F0b21pY3N0cmluZy5oIgorCituYW1lc3BhY2UgRE9NIHsKKworY2xh
c3MgUXVhbGlmaWVkTmFtZSB7CitwdWJsaWM6CisgICAgY2xhc3MgUXVhbGlmaWVkTmFtZUltcGwg
OiBwdWJsaWMga2h0bWw6OlNoYXJlZDxRdWFsaWZpZWROYW1lSW1wbD4geworICAgIHB1YmxpYzoK
KyAgICAgICAgUXVhbGlmaWVkTmFtZUltcGwoY29uc3QgQXRvbWljU3RyaW5nJiBwLCBjb25zdCBB
dG9taWNTdHJpbmcmIGwsIGNvbnN0IEF0b21pY1N0cmluZyYgbikgOm1fcHJlZml4KHApLCBtX2xv
Y2FsTmFtZShsKSwgbV9uYW1lc3BhY2Uobikge30KKworICAgICAgICBmcmllbmQgY2xhc3MgUXVh
bGlmaWVkTmFtZTsKKworICAgIHByaXZhdGU6CisgICAgICAgIEF0b21pY1N0cmluZyBtX3ByZWZp
eDsKKyAgICAgICAgQXRvbWljU3RyaW5nIG1fbG9jYWxOYW1lOworICAgICAgICBBdG9taWNTdHJp
bmcgbV9uYW1lc3BhY2U7CisgICAgfTsKKworICAgIFF1YWxpZmllZE5hbWUoY29uc3QgQXRvbWlj
U3RyaW5nJiBwLCBjb25zdCBBdG9taWNTdHJpbmcmIGwsIGNvbnN0IEF0b21pY1N0cmluZyYgbik7
CisgICAgUXVhbGlmaWVkTmFtZShRdWFsaWZpZWROYW1lSW1wbCogaW5uZXIpOworICAgIH5RdWFs
aWZpZWROYW1lKCk7CisKKyAgICBRdWFsaWZpZWROYW1lKGNvbnN0IFF1YWxpZmllZE5hbWUmIG90
aGVyKTsKKyAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBvcGVyYXRvcj0oY29uc3QgUXVhbGlmaWVk
TmFtZSYgb3RoZXIpOworCisgICAgRE9NU3RyaW5nSW1wbCogbG9jYWxOYW1lUHRyKCkgY29uc3Qg
eyByZXR1cm4gbG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKTsgfQorICAgIAorICAgIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBRdWFsaWZpZWROYW1lJiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9p
bXBsID09IG90aGVyLm1faW1wbCB8fCAocHJlZml4KCkgPT0gb3RoZXIucHJlZml4KCkgJiYgbWF0
Y2hlcyhvdGhlcikpOyB9CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFF1YWxpZmllZE5hbWUm
IG90aGVyKSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09IG90aGVyKTsgfQorCisgICAgYm9vbCBt
YXRjaGVzKGNvbnN0IFF1YWxpZmllZE5hbWUmIG90aGVyKSBjb25zdCB7IHJldHVybiBtX2ltcGwg
PT0gb3RoZXIubV9pbXBsIHx8IChsb2NhbE5hbWUoKSA9PSBvdGhlci5sb2NhbE5hbWUoKSAmJiBu
YW1lc3BhY2VVUkkoKSA9PSBvdGhlci5uYW1lc3BhY2VVUkkoKSk7IH0KKworICAgIGJvb2wgaGFz
UHJlZml4KCkgY29uc3QgeyByZXR1cm4gIW1faW1wbC0+bV9wcmVmaXguaXNOdWxsKCk7IH0gLy8g
RklYTUU6IEtpbGwgdGhlIG51bGwgY2hlY2sgZXZlbnR1YWxseS4KKyAgICBjb25zdCBBdG9taWNT
dHJpbmcmIHByZWZpeCgpIGNvbnN0IHsgcmV0dXJuIG1faW1wbC0+bV9wcmVmaXg7IH0KKyAgICBj
b25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1wbC0+bV9s
b2NhbE5hbWU7IH0KKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSgpIGNvbnN0
IHsgcmV0dXJuIG1faW1wbC0+bV9uYW1lc3BhY2U7IH0KKworICAgIC8vIEZJWE1FOiBUaGlzIGlz
IGEgdGVtcG9yYXJ5IG1ldGhvZC9oYWNrIGZvciBzdGFnZSBvbmUgb2YgdGhlIFF1YWxpZmllZE5h
bWUgcGF0Y2guICBJdCB3aWxsIGdvIGF3YXkgZXZlbnR1YWxseS4KKyAgICB2b2lkIHNldFByZWZp
eChjb25zdCBBdG9taWNTdHJpbmcmIHApIHsgbV9pbXBsLT5tX3ByZWZpeCA9IHA7IH0KKworcHJp
dmF0ZToKKyAgICBzdGF0aWMgUVB0ckRpY3Q8UVB0ckRpY3Q8UVB0ckRpY3Q8UXVhbGlmaWVkTmFt
ZUltcGw+ID4gPiogbV9xTmFtZUNhY2hlOworCisgICAgdm9pZCByZWYoKSB7IGlmIChtX2ltcGwp
IG1faW1wbC0+cmVmKCk7IH0gLy8gRklYTUU6IFlhbmsgbnVsbCBjaGVjayBldmVudHVhbGx5Lgor
ICAgIHZvaWQgZGVyZWYoKTsKKyAgICAKKyAgICBRdWFsaWZpZWROYW1lSW1wbCogbV9pbXBsOwor
fTsKKworYm9vbCBvcGVyYXRvcj09KGNvbnN0IEF0b21pY1N0cmluZyYgYSwgY29uc3QgUXVhbGlm
aWVkTmFtZSYgcSkgeyByZXR1cm4gYSA9PSBxLmxvY2FsTmFtZSgpOyB9Citib29sIG9wZXJhdG9y
IT0oY29uc3QgQXRvbWljU3RyaW5nJiBhLCBjb25zdCBRdWFsaWZpZWROYW1lJiBxKSB7IHJldHVy
biBhICE9IHEubG9jYWxOYW1lKCk7IH0KK2Jvb2wgb3BlcmF0b3I9PShjb25zdCBRdWFsaWZpZWRO
YW1lJiBxLCBjb25zdCBBdG9taWNTdHJpbmcmIGEpIHsgcmV0dXJuIGEgPT0gcS5sb2NhbE5hbWUo
KTsgfQorYm9vbCBvcGVyYXRvciE9KGNvbnN0IFF1YWxpZmllZE5hbWUmIHEsIGNvbnN0IEF0b21p
Y1N0cmluZyYgYSkgeyByZXR1cm4gYSAhPSBxLmxvY2FsTmFtZSgpOyB9CisKKworfQorI2VuZGlm
CkluZGV4OiBraHRtbC94bWwvZG9tX3FuYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiBraHRt
bC94bWwvZG9tX3FuYW1lLmNwcApkaWZmIC1OIGtodG1sL3htbC9kb21fcW5hbWUuY3BwCi0tLSAv
ZGV2L251bGwJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysga2h0bWwveG1sL2RvbV9xbmFt
ZS5jcHAJMTUgSnVuIDIwMDUgMDA6MjE6MjQgLTAwMDAKQEAgLTAsMCArMSwxMDggQEAKKy8qKgor
ICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgor
ICoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBBcHBsZSBDb21wdXRlciwgSW5jLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMz
MCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlICJkb21f
cW5hbWUuaCIKKwordXNpbmcgbmFtZXNwYWNlIERPTTsKKworUVB0ckRpY3Q8UVB0ckRpY3Q8UVB0
ckRpY3Q8UXVhbGlmaWVkTmFtZTo6UXVhbGlmaWVkTmFtZUlubmVyPiA+ID4qIFF1YWxpZmllZE5h
bWU6Om1fcU5hbWVDYWNoZSA9IDA7CisKK1F1YWxpZmllZE5hbWU6OlF1YWxpZmllZE5hbWUoY29u
c3QgQXRvbWljU3RyaW5nJiBwLCBjb25zdCBBdG9taWNTdHJpbmcmIGwsIGNvbnN0IEF0b21pY1N0
cmluZyYgbikKK3sKKyAgICAvLyBPYnRhaW4gYW4gYXBwcm9wcmlhdGUgaW5uZXIgZnJvbSBvdXIg
ZGljdGlvbmFyeS4KKyAgICBRUHRyRGljdDxRUHRyRGljdDxRdWFsaWZpZWROYW1lSW5uZXI+ID4q
IG5hbWVzcGFjZURpY3QgPSAwOworICAgIFFQdHJEaWN0PFF1YWxpZmllZE5hbWVJbm5lcj4qIHBy
ZWZpeERpY3QgPSAwOworICAgIGlmIChtX3FOYW1lQ2FjaGUpIHsKKyAgICAgICAgbmFtZXNwYWNl
RGljdCA9IG1fcU5hbWVDYWNoZS0+ZmluZCgodm9pZCopKG4uaW1wbGVtZW50YXRpb24oKSkpOwor
ICAgICAgICBpZiAobmFtZXNwYWNlRGljdCkgeworICAgICAgICAgICAgcHJlZml4RGljdCA9IG5h
bWVzcGFjZURpY3QtPmZpbmQoKHZvaWQqKXAuaW1wbGVtZW50YXRpb24oKSk7CisgICAgICAgICAg
ICBpZiAocHJlZml4RGljdCkKKyAgICAgICAgICAgICAgICBtX2lubmVyID0gcHJlZml4RGljdC0+
ZmluZCgodm9pZCopbC5pbXBsZW1lbnRhdGlvbigpKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IGlmICghbV9pbm5lcikgeworICAgICAgICBtX2lubmVyID0gbmV3IFF1YWxpZmllZE5hbWVJbm5l
cihwLCBsLCBuKTsKKworICAgICAgICAvLyBQdXQgdGhlIG9iamVjdCBpbnRvIHRoZSBoYXNoLgor
ICAgICAgICBpZiAoIW1fcU5hbWVDYWNoZSkKKyAgICAgICAgICAgIG1fcU5hbWVDYWNoZSA9IG5l
dyBRUHRyRGljdDxRUHRyRGljdDxRUHRyRGljdDxRdWFsaWZpZWROYW1lSW5uZXI+ID4gPjsKKyAg
ICAgICAgCisgICAgICAgIGlmICghbmFtZXNwYWNlRGljdCkgeworICAgICAgICAgICAgbmFtZXNw
YWNlRGljdCA9IG5ldyBRUHRyRGljdDxRUHRyRGljdDxRdWFsaWZpZWROYW1lSW5uZXI+ID47Cisg
ICAgICAgICAgICBuYW1lc3BhY2VEaWN0LT5zZXRBdXRvRGVsZXRlKHRydWUpOworICAgICAgICAg
ICAgbV9xTmFtZUNhY2hlLT5pbnNlcnQoKHZvaWQqKW4uaW1wbGVtZW50YXRpb24oKSwgbmFtZXNw
YWNlRGljdCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICghcHJlZml4RGljdCkg
eworICAgICAgICAgICAgcHJlZml4RGljdCA9IG5ldyBRUHRyRGljdDxRdWFsaWZpZWROYW1lSW5u
ZXI+OworICAgICAgICAgICAgbmFtZXNwYWNlRGljdC0+aW5zZXJ0KCh2b2lkKilwLmltcGxlbWVu
dGF0aW9uKCksIHByZWZpeERpY3QpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBwcmVm
aXhEaWN0LT5pbnNlcnQoKHZvaWQqKWwuaW1wbGVtZW50YXRpb24oKSwgbV9pbm5lcik7CisgICAg
fQorICAgIAorICAgIHJlZigpOworfQorCitRdWFsaWZpZWROYW1lOjp+UXVhbGlmaWVkTmFtZSgp
Cit7CisgICAgZGVyZWYoKTsKK30KKworUXVhbGlmaWVkTmFtZTo6UXVhbGlmaWVkTmFtZShjb25z
dCBRdWFsaWZpZWROYW1lJiBvdGhlcikKK3sKKyAgICBtX2lubmVyID0gb3RoZXIubV9pbm5lcjsK
KyAgICByZWYoKTsKK30KKworY29uc3QgUXVhbGlmaWVkTmFtZSYgUXVhbGlmaWVkTmFtZTo6b3Bl
cmF0b3I9KGNvbnN0IFF1YWxpZmllZE5hbWUmIG90aGVyKQoreworICAgIGlmIChtX2lubmVyICE9
IG90aGVyLm1faW5uZXIpIHsKKyAgICAgICAgZGVyZWYoKTsKKyAgICAgICAgbV9pbm5lciA9IG90
aGVyLm1faW5uZXI7CisgICAgICAgIHJlZigpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gKnRo
aXM7Cit9CisKK3ZvaWQgUXVhbGlmaWVkTmFtZTo6ZGVyZWYoKQoreworICAgIGlmICghbV9pbm5l
cikKKyAgICAgICAgcmV0dXJuOyAvLyBGSVhNRTogWWFuayB0aGlzIGV2ZW50dWFsbHkuIFNlcnZl
cyBubyBwdXJwb3NlLgorICAgIAorICAgIGlmIChtX2lubmVyLT5yZWZDb3VudCgpID09IDEpIHsK
KyAgICAgICAgLy8gQmVmb3JlIGRlY3JlbWVudGluZyB0aGUgcmVmIHRvIDAsIHJlbW92ZSBvdXJz
ZWx2ZXMgZnJvbSB0aGUgaGFzaCB0YWJsZS4KKyAgICAgICAgUVB0ckRpY3Q8UVB0ckRpY3Q8UXVh
bGlmaWVkTmFtZUlubmVyPiA+KiBuYW1lc3BhY2VEaWN0ID0gMDsKKyAgICAgICAgUVB0ckRpY3Q8
UXVhbGlmaWVkTmFtZUlubmVyPiogcHJlZml4RGljdCA9IDA7CisgICAgICAgIGlmIChtX3FOYW1l
Q2FjaGUpIHsKKyAgICAgICAgICAgIG5hbWVzcGFjZURpY3QgPSBtX3FOYW1lQ2FjaGUtPmZpbmQo
KHZvaWQqKShuYW1lc3BhY2VVUkkoKS5pbXBsZW1lbnRhdGlvbigpKSk7CisgICAgICAgICAgICBp
ZiAobmFtZXNwYWNlRGljdCkgeworICAgICAgICAgICAgICAgIHByZWZpeERpY3QgPSBuYW1lc3Bh
Y2VEaWN0LT5maW5kKCh2b2lkKilwcmVmaXgoKS5pbXBsZW1lbnRhdGlvbigpKTsKKyAgICAgICAg
ICAgICAgICBpZiAocHJlZml4RGljdCkKKyAgICAgICAgICAgICAgICAgICAgcHJlZml4RGljdC0+
cmVtb3ZlKCh2b2lkKilsb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBtX2lubmVyLT5kZXJlZigpOworfQpJbmRl
eDoga2h0bWwvaHRtbC9odG1sbmFtZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiBraHRtbC9odG1s
L2h0bWxuYW1lcy5oCmRpZmYgLU4ga2h0bWwvaHRtbC9odG1sbmFtZXMuaAotLS0gL2Rldi9udWxs
CTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIGtodG1sL2h0bWwvaHRtbG5hbWVzLmgJMTUg
SnVuIDIwMDUgMDA6MjE6MjQgLTAwMDAKQEAgLTAsMCArMSwxMzMgQEAKKy8qCisgKiBUaGlzIGZp
bGUgaXMgcGFydCBvZiB0aGUgSFRNTCBET00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4KKyAqCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisg
KiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKi8KKyNpZm5kZWYgSFRNTE5BTUVT
X0gKKyNkZWZpbmUgSFRNTE5BTUVTX0gKKworI2luY2x1ZGUgInhtbC9kb21fZWxlbWVudGltcGwu
aCIKKworbmFtZXNwYWNlIERPTQoreworCitjbGFzcyBIVE1MTmFtZXMKK3sKK3B1YmxpYzoKKyAg
ICAvLyBUaGUgbmFtZXNwYWNlIFVSSS4KKyAgICBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiB4
aHRtbE5hbWVzcGFjZVVSSSgpOworICAgIAorICAgIC8vIEZ1bGwgdGFnIG5hbWVzLgorICAgIHN0
YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBhKCk7CisgICAgc3RhdGljIGNvbnN0IFF1YWxpZmll
ZE5hbWUmIGFkZHJlc3MoKTsKKyAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXBwbGV0
KCk7CisgICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGFyZWEoKTsKKyAgICBzdGF0aWMg
Y29uc3QgUXVhbGlmaWVkTmFtZSYgYigpOworICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1l
JiBiYXNlKCk7CisgICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGJhc2Vmb250KCk7Cisg
ICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGJpZygpOworICAgIHN0YXRpYyBjb25zdCBR
dWFsaWZpZWROYW1lJiBibG9ja3F1b3RlKCk7CisgICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5h
bWUmIGJvZHkoKTsKKyAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgYnIoKTsKKyAgICBz
dGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgYnV0dG9uKCk7CisgICAgc3RhdGljIGNvbnN0IFF1
YWxpZmllZE5hbWUmIGNhbnZhcygpOworICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBj
YXB0aW9uKCk7CisgICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGNlbnRlcigpOworICAg
IHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBjb2RlKCk7CisgICAgc3RhdGljIGNvbnN0IFF1
YWxpZmllZE5hbWUmIGNvbCgpOworICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBjb2xn
cm91cCgpOworICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBkZCgpOworICAgIHN0YXRp
YyBjb25zdCBRdWFsaWZpZWROYW1lJiBkZWwoKTsKKyAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVk
TmFtZSYgZGZuKCk7CisgICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGRpcigpOworICAg
IHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBkaXYoKTsKKyAgICBzdGF0aWMgY29uc3QgUXVh
bGlmaWVkTmFtZSYgZGwoKTsKKyAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgZHQoKTsK
KyAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgZW0oKTsKKyAgICBzdGF0aWMgY29uc3Qg
UXVhbGlmaWVkTmFtZSYgZW1iZWQoKTsKKyAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYg
ZmllbGRzZXQoKTsKKyAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgZm9udCgpOworICAg
IHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBmb3JtKCk7CisgICAgc3RhdGljIGNvbnN0IFF1
YWxpZmllZE5hbWUmIGZyYW1lKCk7CisgICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGZy
YW1lc2V0KCk7CisgICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGhlYWQoKTsKKyAgICBz
dGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgaDEoKTsKKyAgICBzdGF0aWMgY29uc3QgUXVhbGlm
aWVkTmFtZSYgaDIoKTsKKyAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgaDMoKTsKKyAg
ICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgaDQoKTsKKyAgICBzdGF0aWMgY29uc3QgUXVh
bGlmaWVkTmFtZSYgaDUoKTsKKyAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgaDYoKTsK
KyAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgaHIoKTsKKyAgICBzdGF0aWMgY29uc3Qg
UXVhbGlmaWVkTmFtZSYgaHRtbCgpOworICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBp
KCk7CisgICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGlmcmFtZSgpOworICAgIHN0YXRp
YyBjb25zdCBRdWFsaWZpZWROYW1lJiBpbWcoKTsKKyAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVk
TmFtZSYgaW5wdXQoKTsKKyAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgaW5zKCk7Cisg
ICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGlzaW5kZXgoKTsKKyAgICBzdGF0aWMgY29u
c3QgUXVhbGlmaWVkTmFtZSYga2JkKCk7CisgICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUm
IGtleWdlbigpOworICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBsYWJlbCgpOworICAg
IHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBsZWdlbmQoKTsKKyAgICBzdGF0aWMgY29uc3Qg
UXVhbGlmaWVkTmFtZSYgbGkoKTsKKyAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgbGlu
aygpOworICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBtYXAoKTsKKyAgICBzdGF0aWMg
Y29uc3QgUXVhbGlmaWVkTmFtZSYgbWFycXVlZSgpOworICAgIHN0YXRpYyBjb25zdCBRdWFsaWZp
ZWROYW1lJiBtZW51KCk7CisgICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIG1ldGEoKTsK
KyAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgbm9lbWJlZCgpOworICAgIHN0YXRpYyBj
b25zdCBRdWFsaWZpZWROYW1lJiBub2ZyYW1lcygpOworICAgIHN0YXRpYyBjb25zdCBRdWFsaWZp
ZWROYW1lJiBub3NjcmlwdCgpOworICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBvYmpl
Y3QoKTsKKyAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgb2woKTsKKyAgICBzdGF0aWMg
Y29uc3QgUXVhbGlmaWVkTmFtZSYgb3B0Z3JvdXAoKTsKKyAgICBzdGF0aWMgY29uc3QgUXVhbGlm
aWVkTmFtZSYgb3B0aW9uKCk7CisgICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIHAoKTsK
KyAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgcGFyYW0oKTsKKyAgICBzdGF0aWMgY29u
c3QgUXVhbGlmaWVkTmFtZSYgcHJlKCk7CisgICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUm
IHEoKTsKKyAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgcygpOworICAgIHN0YXRpYyBj
b25zdCBRdWFsaWZpZWROYW1lJiBzYW1wKCk7CisgICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5h
bWUmIHNjcmlwdCgpOworICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBzZWxlY3QoKTsK
KyAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgc21hbGwoKTsKKyAgICBzdGF0aWMgY29u
c3QgUXVhbGlmaWVkTmFtZSYgc3RyaWtlKCk7CisgICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5h
bWUmIHN0cm9uZygpOworICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBzdHlsZSgpOwor
ICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiB0YWJsZSgpOworICAgIHN0YXRpYyBjb25z
dCBRdWFsaWZpZWROYW1lJiB0Ym9keSgpOworICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1l
JiB0ZCgpOworICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiB0ZXh0YXJlYSgpOworICAg
IHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiB0Zm9vdCgpOworICAgIHN0YXRpYyBjb25zdCBR
dWFsaWZpZWROYW1lJiB0aCgpOworICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiB0aGVh
ZCgpOworICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiB0aXRsZSgpOworICAgIHN0YXRp
YyBjb25zdCBRdWFsaWZpZWROYW1lJiB0cigpOworICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWRO
YW1lJiB0dCgpOworICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiB1KCk7CisgICAgc3Rh
dGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIHVsKCk7CisgICAgc3RhdGljIGNvbnN0IFF1YWxpZmll
ZE5hbWUmIHZhcigpOworICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiB4bXAoKTsKKwor
ICAgIC8vIEF0dHJpYnV0ZSBuYW1lcy4KK307CisKK30KKworI2VuZGlmCkluZGV4OiBraHRtbC9o
dG1sL2h0bWxuYW1lcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZToga2h0bWwvaHRtbC9odG1sbmFt
ZXMuY3BwCmRpZmYgLU4ga2h0bWwvaHRtbC9odG1sbmFtZXMuY3BwCi0tLSAvZGV2L251bGwJMSBK
YW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysga2h0bWwvaHRtbC9odG1sbmFtZXMuY3BwCTE1IEp1
biAyMDA1IDAwOjIxOjI1IC0wMDAwCkBAIC0wLDAgKzEsNTY5IEBACisvKgorICogVGhpcyBmaWxl
IGlzIHBhcnQgb2YgdGhlIEhUTUwgRE9NIGltcGxlbWVudGF0aW9uIGZvciBLREUuCisgKgorICog
Q29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICog
Qm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJodG1sbmFt
ZXMuaCIKKworbmFtZXNwYWNlIERPTSB7CisKK2NvbnN0IEF0b21pY1N0cmluZyYgSFRNTE5hbWVz
Ojp4aHRtbE5hbWVzcGFjZVVSSSgpCit7CisgICAgc3RhdGljIEF0b21pY1N0cmluZyB4aHRtbE5T
KCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIik7CisgICAgcmV0dXJuIHhodG1sTlM7Cit9
CisKKworLy8gVGFnIG5hbWVzLgorY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjphKCkK
K3sKKyAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBhKG51bGxBdG9tLCAiYSIsIHhodG1sTmFtZXNw
YWNlVVJJKCkpOworICAgIHJldHVybiBhOworfQorCitjb25zdCBRdWFsaWZpZWROYW1lJiBIVE1M
TmFtZXM6OmFkZHJlc3MoKQoreworICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIGFkZHJlc3MobnVs
bEF0b20sICJhZGRyZXNzIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7CisgICAgcmV0dXJuIGFkZHJl
c3M7Cit9CisKK2NvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6YXBwbGV0KCkKK3sKKyAg
ICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBhcHBsZXQobnVsbEF0b20sICJhcHBsZXQiLCB4aHRtbE5h
bWVzcGFjZVVSSSgpKTsKKyAgICByZXR1cm4gYXBwbGV0OworfQorCitjb25zdCBRdWFsaWZpZWRO
YW1lJiBIVE1MTmFtZXM6OmFyZWEoKQoreworICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIGFyZWEo
bnVsbEF0b20sICJhcmVhIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7CisgICAgcmV0dXJuIGFyZWE7
Cit9CisKK2NvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6YigpCit7CisgICAgc3RhdGlj
IFF1YWxpZmllZE5hbWUgYWRkcmVzcyhudWxsQXRvbSwgImIiLCB4aHRtbE5hbWVzcGFjZVVSSSgp
KTsKKyAgICByZXR1cm4gYjsKK30KKworY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpi
YXNlKCkKK3sKKyAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBiYXNlKG51bGxBdG9tLCAiYmFzZSIs
IHhodG1sTmFtZXNwYWNlVVJJKCkpOworICAgIHJldHVybiBiYXNlOworfQorCitjb25zdCBRdWFs
aWZpZWROYW1lJiBIVE1MTmFtZXM6OmJhc2Vmb250KCkKK3sKKyAgICBzdGF0aWMgUXVhbGlmaWVk
TmFtZSBiYXNlZm9udChudWxsQXRvbSwgImJhc2Vmb250IiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7
CisgICAgcmV0dXJuIGJhc2Vmb250OworfQorCitjb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFt
ZXM6OmJpZygpCit7CisgICAgc3RhdGljIFF1YWxpZmllZE5hbWUgYWRkcmVzcyhudWxsQXRvbSwg
ImJpZyIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOworICAgIHJldHVybiBiaWc7Cit9CisKK2NvbnN0
IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6YmxvY2txdW90ZSgpCit7CisgICAgc3RhdGljIFF1
YWxpZmllZE5hbWUgYmxvY2txdW90ZShudWxsQXRvbSwgImJsb2NrcXVvdGUiLCB4aHRtbE5hbWVz
cGFjZVVSSSgpKTsKKyAgICByZXR1cm4gYmxvY2txdW90ZTsKK30KKworY29uc3QgUXVhbGlmaWVk
TmFtZSYgSFRNTE5hbWVzOjpib2R5KCkKK3sKKyAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBib2R5
KG51bGxBdG9tLCAiYm9keSIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOworICAgIHJldHVybiBib2R5
OworfQorCitjb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OmJyKCkKK3sKKyAgICBzdGF0
aWMgUXVhbGlmaWVkTmFtZSBicihudWxsQXRvbSwgImJyIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7
CisgICAgcmV0dXJuIGJyOworfQorCitjb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OmJ1
dHRvbigpCit7CisgICAgc3RhdGljIFF1YWxpZmllZE5hbWUgYnV0dG9uKG51bGxBdG9tLCAiYnV0
dG9uIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7CisgICAgcmV0dXJuIGJ1dHRvbjsKK30KKworY29u
c3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpjYW52YXMoKQoreworICAgIHN0YXRpYyBRdWFs
aWZpZWROYW1lIGNhbnZhcyhudWxsQXRvbSwgImNhbnZhcyIsIHhodG1sTmFtZXNwYWNlVVJJKCkp
OworICAgIHJldHVybiBjYW52YXM7Cit9CisKK2NvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1l
czo6Y2FwdGlvbigpCit7CisgICAgc3RhdGljIFF1YWxpZmllZE5hbWUgY2FwdGlvbihudWxsQXRv
bSwgImNhcHRpb24iLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKKyAgICByZXR1cm4gY2FwdGlvbjsK
K30KKworY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpjZW50ZXIoKQoreworICAgIHN0
YXRpYyBRdWFsaWZpZWROYW1lIGNlbnRlcihudWxsQXRvbSwgImNlbnRlciIsIHhodG1sTmFtZXNw
YWNlVVJJKCkpOworICAgIHJldHVybiBjZW50ZXI7Cit9CisKK2NvbnN0IFF1YWxpZmllZE5hbWUm
IEhUTUxOYW1lczo6Y29kZSgpCit7CisgICAgc3RhdGljIFF1YWxpZmllZE5hbWUgY29kZShudWxs
QXRvbSwgImNvZGUiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKKyAgICByZXR1cm4gY29kZTsKK30K
KworY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpjb2woKQoreworICAgIHN0YXRpYyBR
dWFsaWZpZWROYW1lIGNhcHRpb24obnVsbEF0b20sICJjb2wiLCB4aHRtbE5hbWVzcGFjZVVSSSgp
KTsKKyAgICByZXR1cm4gY29sOworfQorCitjb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6
OmNvbGdyb3VwKCkKK3sKKyAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBjb2xncm91cChudWxsQXRv
bSwgImNvbGdyb3VwIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7CisgICAgcmV0dXJuIGNvbGdyb3Vw
OworfQorCitjb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OmRkKCkKK3sKKyAgICBzdGF0
aWMgUXVhbGlmaWVkTmFtZSBkZChudWxsQXRvbSwgImRkIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7
CisgICAgcmV0dXJuIGRkOworfQorCitjb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OmRl
bCgpCit7CisgICAgc3RhdGljIFF1YWxpZmllZE5hbWUgZGVsKG51bGxBdG9tLCAiZGVsIiwgeGh0
bWxOYW1lc3BhY2VVUkkoKSk7CisgICAgcmV0dXJuIGRlbDsKK30KKworY29uc3QgUXVhbGlmaWVk
TmFtZSYgSFRNTE5hbWVzOjpkZm4oKQoreworICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIGRmbihu
dWxsQXRvbSwgImRmbiIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOworICAgIHJldHVybiBkZm47Cit9
CisKK2NvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6ZGlyKCkKK3sKKyAgICBzdGF0aWMg
UXVhbGlmaWVkTmFtZSBkaXIobnVsbEF0b20sICJkaXIiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsK
KyAgICByZXR1cm4gZGlyOworfQorCitjb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OmRp
digpCit7CisgICAgc3RhdGljIFF1YWxpZmllZE5hbWUgZGl2KG51bGxBdG9tLCAiZGl2IiwgeGh0
bWxOYW1lc3BhY2VVUkkoKSk7CisgICAgcmV0dXJuIGRpdjsKK30KKworY29uc3QgUXVhbGlmaWVk
TmFtZSYgSFRNTE5hbWVzOjpkbCgpCit7CisgICAgc3RhdGljIFF1YWxpZmllZE5hbWUgZGwobnVs
bEF0b20sICJkbCIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOworICAgIHJldHVybiBkbDsKK30KKwor
Y29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpkdCgpCit7CisgICAgc3RhdGljIFF1YWxp
ZmllZE5hbWUgZHQobnVsbEF0b20sICJkdCIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOworICAgIHJl
dHVybiBkdDsKK30KKworY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjplbSgpCit7Cisg
ICAgc3RhdGljIFF1YWxpZmllZE5hbWUgZW0obnVsbEF0b20sICJlbSIsIHhodG1sTmFtZXNwYWNl
VVJJKCkpOworICAgIHJldHVybiBlbTsKK30KKworY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5h
bWVzOjplbWJlZCgpCit7CisgICAgc3RhdGljIFF1YWxpZmllZE5hbWUgZW1iZWQobnVsbEF0b20s
ICJlbWJlZCIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOworICAgIHJldHVybiBlbWJlZDsKK30KKwor
Y29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpmaWVsZHNldCgpCit7CisgICAgc3RhdGlj
IFF1YWxpZmllZE5hbWUgZmllbGRzZXQobnVsbEF0b20sICJmaWVsZHNldCIsIHhodG1sTmFtZXNw
YWNlVVJJKCkpOworICAgIHJldHVybiBmaWVsZHNldDsKK30KKworY29uc3QgUXVhbGlmaWVkTmFt
ZSYgSFRNTE5hbWVzOjpmb250KCkKK3sKKyAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBmb250KG51
bGxBdG9tLCAiZm9udCIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOworICAgIHJldHVybiBmb250Owor
fQorCitjb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OmZvcm0oKQoreworICAgIHN0YXRp
YyBRdWFsaWZpZWROYW1lIGZvcm0obnVsbEF0b20sICJmb3JtIiwgeGh0bWxOYW1lc3BhY2VVUkko
KSk7CisgICAgcmV0dXJuIGZvcm07Cit9CisKK2NvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1l
czo6ZnJhbWUoKQoreworICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIGZyYW1lKG51bGxBdG9tLCAi
ZnJhbWUiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKKyAgICByZXR1cm4gZnJhbWU7Cit9CisKK2Nv
bnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6ZnJhbWVzZXQoKQoreworICAgIHN0YXRpYyBR
dWFsaWZpZWROYW1lIGZyYW1lc2V0KG51bGxBdG9tLCAiZnJhbWVzZXQiLCB4aHRtbE5hbWVzcGFj
ZVVSSSgpKTsKKyAgICByZXR1cm4gZnJhbWVzZXQ7Cit9CisKK2NvbnN0IFF1YWxpZmllZE5hbWUm
IEhUTUxOYW1lczo6aGVhZCgpCit7CisgICAgc3RhdGljIFF1YWxpZmllZE5hbWUgaGVhZChudWxs
QXRvbSwgImhlYWQiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKKyAgICByZXR1cm4gaGVhZDsKK30K
KworY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpoMSgpCit7CisgICAgc3RhdGljIFF1
YWxpZmllZE5hbWUgaDEobnVsbEF0b20sICJoMSIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOworICAg
IHJldHVybiBoMTsKK30KKworY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpoMigpCit7
CisgICAgc3RhdGljIFF1YWxpZmllZE5hbWUgaDIobnVsbEF0b20sICJoMiIsIHhodG1sTmFtZXNw
YWNlVVJJKCkpOworICAgIHJldHVybiBoMjsKK30KKworY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRN
TE5hbWVzOjpoMygpCit7CisgICAgc3RhdGljIFF1YWxpZmllZE5hbWUgaDMobnVsbEF0b20sICJo
MyIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOworICAgIHJldHVybiBoMzsKK30KKworY29uc3QgUXVh
bGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpoNCgpCit7CisgICAgc3RhdGljIFF1YWxpZmllZE5hbWUg
aDQobnVsbEF0b20sICJoNCIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOworICAgIHJldHVybiBoNDsK
K30KKworY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpoNSgpCit7CisgICAgc3RhdGlj
IFF1YWxpZmllZE5hbWUgaDUobnVsbEF0b20sICJoNSIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwor
ICAgIHJldHVybiBoNTsKK30KKworY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpoNigp
Cit7CisgICAgc3RhdGljIFF1YWxpZmllZE5hbWUgaDYobnVsbEF0b20sICJoNiIsIHhodG1sTmFt
ZXNwYWNlVVJJKCkpOworICAgIHJldHVybiBoNjsKK30KKworY29uc3QgUXVhbGlmaWVkTmFtZSYg
SFRNTE5hbWVzOjpocigpCit7CisgICAgc3RhdGljIFF1YWxpZmllZE5hbWUgaHIobnVsbEF0b20s
ICJociIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOworICAgIHJldHVybiBocjsKK30KKworY29uc3Qg
UXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpodG1sKCkKK3sKKyAgICBzdGF0aWMgUXVhbGlmaWVk
TmFtZSBodG1sKG51bGxBdG9tLCAiaHRtbCIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOworICAgIHJl
dHVybiBodG1sOworfQorCitjb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OmkoKQorewor
ICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIGkobnVsbEF0b20sICJpIiwgeGh0bWxOYW1lc3BhY2VV
UkkoKSk7CisgICAgcmV0dXJuIGk7Cit9CisKK2NvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1l
czo6aWZyYW1lKCkKK3sKKyAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBpZnJhbWUobnVsbEF0b20s
ICJpZnJhbWUiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKKyAgICByZXR1cm4gaWZyYW1lOworfQor
Citjb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OmltZygpCit7CisgICAgc3RhdGljIFF1
YWxpZmllZE5hbWUgaW1nKG51bGxBdG9tLCAiaW1nIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Cisg
ICAgcmV0dXJuIGltZzsKK30KKworY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjppbnB1
dCgpCit7CisgICAgc3RhdGljIFF1YWxpZmllZE5hbWUgaW5wdXQobnVsbEF0b20sICJpbnB1dCIs
IHhodG1sTmFtZXNwYWNlVVJJKCkpOworICAgIHJldHVybiBpbnB1dDsKK30KKworY29uc3QgUXVh
bGlmaWVkTmFtZSYgSFRNTE5hbWVzOjppbnMoKQoreworICAgIHN0YXRpYyBRdWFsaWZpZWROYW1l
IGlucyhudWxsQXRvbSwgImlucyIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOworICAgIHJldHVybiBp
bnM7Cit9CisKK2NvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6aXNpbmRleCgpCit7Cisg
ICAgc3RhdGljIFF1YWxpZmllZE5hbWUgaXNpbmRleChudWxsQXRvbSwgImlzaW5kZXgiLCB4aHRt
bE5hbWVzcGFjZVVSSSgpKTsKKyAgICByZXR1cm4gaXNpbmRleDsKK30KKworY29uc3QgUXVhbGlm
aWVkTmFtZSYgSFRNTE5hbWVzOjprYmQoKQoreworICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIGti
ZChudWxsQXRvbSwgImtiZCIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOworICAgIHJldHVybiBrYmQ7
Cit9CisKK2NvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6a2V5Z2VuKCkKK3sKKyAgICBz
dGF0aWMgUXVhbGlmaWVkTmFtZSBrZXlnZW4obnVsbEF0b20sICJrZXlnZW4iLCB4aHRtbE5hbWVz
cGFjZVVSSSgpKTsKKyAgICByZXR1cm4ga2V5Z2VuOworfQorCitjb25zdCBRdWFsaWZpZWROYW1l
JiBIVE1MTmFtZXM6OmxhYmVsKCkKK3sKKyAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBsYWJlbChu
dWxsQXRvbSwgImxhYmVsIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7CisgICAgcmV0dXJuIGxhYmVs
OworfQorCitjb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OmxlZ2VuZCgpCit7CisgICAg
c3RhdGljIFF1YWxpZmllZE5hbWUgbGVnZW5kKG51bGxBdG9tLCAibGVnZW5kIiwgeGh0bWxOYW1l
c3BhY2VVUkkoKSk7CisgICAgcmV0dXJuIGxlZ2VuZDsKK30KKworY29uc3QgUXVhbGlmaWVkTmFt
ZSYgSFRNTE5hbWVzOjpsaSgpCit7CisgICAgc3RhdGljIFF1YWxpZmllZE5hbWUgbGkobnVsbEF0
b20sICJsaSIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOworICAgIHJldHVybiBsaTsKK30KKworY29u
c3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpsaW5rKCkKK3sKKyAgICBzdGF0aWMgUXVhbGlm
aWVkTmFtZSBsaW5rKG51bGxBdG9tLCAibGluayIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOworICAg
IHJldHVybiBsaW5rOworfQorCitjb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6Om1hcCgp
Cit7CisgICAgc3RhdGljIFF1YWxpZmllZE5hbWUgbWFwKG51bGxBdG9tLCAibWFwIiwgeGh0bWxO
YW1lc3BhY2VVUkkoKSk7CisgICAgcmV0dXJuIG1hcDsKK30KKworY29uc3QgUXVhbGlmaWVkTmFt
ZSYgSFRNTE5hbWVzOjptYXJxdWVlKCkKK3sKKyAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBtYXJx
dWVlKG51bGxBdG9tLCAibWFycXVlZSIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOworICAgIHJldHVy
biBtYXJxdWVlOworfQorCitjb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6Om1lbnUoKQor
eworICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIG1lbnUobnVsbEF0b20sICJtZW51IiwgeGh0bWxO
YW1lc3BhY2VVUkkoKSk7CisgICAgcmV0dXJuIG1lbnU7Cit9CisKK2NvbnN0IFF1YWxpZmllZE5h
bWUmIEhUTUxOYW1lczo6bWV0YSgpCit7CisgICAgc3RhdGljIFF1YWxpZmllZE5hbWUgbWV0YShu
dWxsQXRvbSwgIm1ldGEiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKKyAgICByZXR1cm4gbWV0YTsK
K30KKworY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpub2VtYmVkKCkKK3sKKyAgICBz
dGF0aWMgUXVhbGlmaWVkTmFtZSBub2VtYmVkKG51bGxBdG9tLCAibm9lbWJlZCIsIHhodG1sTmFt
ZXNwYWNlVVJJKCkpOworICAgIHJldHVybiBub2VtYmVkOworfQorCitjb25zdCBRdWFsaWZpZWRO
YW1lJiBIVE1MTmFtZXM6Om5vZnJhbWVzKCkKK3sKKyAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBu
b2ZyYW1lcyhudWxsQXRvbSwgIm5vZnJhbWVzIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7CisgICAg
cmV0dXJuIG5vZnJhbWVzOworfQorCitjb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6Om5v
c2NyaXB0KCkKK3sKKyAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBub3NjcmlwdChudWxsQXRvbSwg
Im5vc2NyaXB0IiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7CisgICAgcmV0dXJuIG5vc2NyaXB0Owor
fQorCitjb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6Om9iamVjdCgpCit7CisgICAgc3Rh
dGljIFF1YWxpZmllZE5hbWUgb2JqZWN0KG51bGxBdG9tLCAib2JqZWN0IiwgeGh0bWxOYW1lc3Bh
Y2VVUkkoKSk7CisgICAgcmV0dXJuIG9iamVjdDsKK30KKworY29uc3QgUXVhbGlmaWVkTmFtZSYg
SFRNTE5hbWVzOjpvbCgpCit7CisgICAgc3RhdGljIFF1YWxpZmllZE5hbWUgb2wobnVsbEF0b20s
ICJvbCIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOworICAgIHJldHVybiBvbDsKK30KKworY29uc3Qg
UXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpvcHRncm91cCgpCit7CisgICAgc3RhdGljIFF1YWxp
ZmllZE5hbWUgb3B0Z3JvdXAobnVsbEF0b20sICJvcHRncm91cCIsIHhodG1sTmFtZXNwYWNlVVJJ
KCkpOworICAgIHJldHVybiBvcHRncm91cDsKK30KKworY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRN
TE5hbWVzOjpwKCkKK3sKKyAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBwKG51bGxBdG9tLCAicCIs
IHhodG1sTmFtZXNwYWNlVVJJKCkpOworICAgIHJldHVybiBwOworfQorCitjb25zdCBRdWFsaWZp
ZWROYW1lJiBIVE1MTmFtZXM6OnBhcmFtKCkKK3sKKyAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBw
YXJhbShudWxsQXRvbSwgInBhcmFtIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7CisgICAgcmV0dXJu
IHBhcmFtOworfQorCitjb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OnByZSgpCit7Cisg
ICAgc3RhdGljIFF1YWxpZmllZE5hbWUgcHJlKG51bGxBdG9tLCAicHJlIiwgeGh0bWxOYW1lc3Bh
Y2VVUkkoKSk7CisgICAgcmV0dXJuIHByZTsKK30KKworY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRN
TE5hbWVzOjpxKCkKK3sKKyAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBxKG51bGxBdG9tLCAicSIs
IHhodG1sTmFtZXNwYWNlVVJJKCkpOworICAgIHJldHVybiBxOworfQorCitjb25zdCBRdWFsaWZp
ZWROYW1lJiBIVE1MTmFtZXM6OnMoKQoreworICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIHMobnVs
bEF0b20sICJzIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7CisgICAgcmV0dXJuIHM7Cit9CisKK2Nv
bnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6c2FtcCgpCit7CisgICAgc3RhdGljIFF1YWxp
ZmllZE5hbWUgc2FtcChudWxsQXRvbSwgInNhbXAiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKKyAg
ICByZXR1cm4gc2FtcDsKK30KKworY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpzY3Jp
cHQoKQoreworICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIHNjcmlwdChudWxsQXRvbSwgInNjcmlw
dCIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOworICAgIHJldHVybiBzY3JpcHQ7Cit9CisKK2NvbnN0
IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6c2VsZWN0KCkKK3sKKyAgICBzdGF0aWMgUXVhbGlm
aWVkTmFtZSBzZWxlY3QobnVsbEF0b20sICJzZWxlY3QiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsK
KyAgICByZXR1cm4gc2VsZWN0OworfQorCitjb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6
OnNtYWxsKCkKK3sKKyAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBzbWFsbChudWxsQXRvbSwgInNt
YWxsIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7CisgICAgcmV0dXJuIHNtYWxsOworfQorCitjb25z
dCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OnN0cmlrZSgpCit7CisgICAgc3RhdGljIFF1YWxp
ZmllZE5hbWUgc3RyaWtlKG51bGxBdG9tLCAic3RyaWtlIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7
CisgICAgcmV0dXJuIHN0cmlrZTsKK30KKworY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVz
OjpzdHJvbmcoKQoreworICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIHN0cm9uZyhudWxsQXRvbSwg
InN0cm9uZyIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOworICAgIHJldHVybiBzdHJvbmc7Cit9CisK
K2NvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6c3R5bGUoKQoreworICAgIHN0YXRpYyBR
dWFsaWZpZWROYW1lIHN0eWxlKG51bGxBdG9tLCAic3R5bGUiLCB4aHRtbE5hbWVzcGFjZVVSSSgp
KTsKKyAgICByZXR1cm4gc3R5bGU7Cit9CisKK2NvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1l
czo6dGFibGUoKQoreworICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIHRhYmxlKG51bGxBdG9tLCAi
dGFibGUiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKKyAgICByZXR1cm4gdGFibGU7Cit9CisKK2Nv
bnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6dGJvZHkoKQoreworICAgIHN0YXRpYyBRdWFs
aWZpZWROYW1lIHRib2R5KG51bGxBdG9tLCAidGJvZHkiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsK
KyAgICByZXR1cm4gdGJvZHk7Cit9CisKK2NvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6
dGQoKQoreworICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIHRkKG51bGxBdG9tLCAidGQiLCB4aHRt
bE5hbWVzcGFjZVVSSSgpKTsKKyAgICByZXR1cm4gdGQ7Cit9CisKK2NvbnN0IFF1YWxpZmllZE5h
bWUmIEhUTUxOYW1lczo6dGV4dGFyZWEoKQoreworICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIHRl
eHRhcmVhKG51bGxBdG9tLCAidGV4dGFyZWEiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKKyAgICBy
ZXR1cm4gdGV4dGFyZWE7Cit9CisKK2NvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6dGZv
b3QoKQoreworICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIHRmb290KG51bGxBdG9tLCAidGZvb3Qi
LCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKKyAgICByZXR1cm4gdGZvb3Q7Cit9CisKK2NvbnN0IFF1
YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6dGgoKQoreworICAgIHN0YXRpYyBRdWFsaWZpZWROYW1l
IHRoKG51bGxBdG9tLCAidGgiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKKyAgICByZXR1cm4gdGg7
Cit9CisKK2NvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6dGhlYWQoKQoreworICAgIHN0
YXRpYyBRdWFsaWZpZWROYW1lIHRoZWFkKG51bGxBdG9tLCAidGhlYWQiLCB4aHRtbE5hbWVzcGFj
ZVVSSSgpKTsKKyAgICByZXR1cm4gdGhlYWQ7Cit9CisKK2NvbnN0IFF1YWxpZmllZE5hbWUmIEhU
TUxOYW1lczo6dGl0bGUoKQoreworICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIHRpdGxlKG51bGxB
dG9tLCAidGl0bGUiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKKyAgICByZXR1cm4gdGl0bGU7Cit9
CisKK2NvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6dHIoKQoreworICAgIHN0YXRpYyBR
dWFsaWZpZWROYW1lIHRyKG51bGxBdG9tLCAidHIiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKKyAg
ICByZXR1cm4gdHI7Cit9CisKK2NvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6dHQoKQor
eworICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIHR0KG51bGxBdG9tLCAidHQiLCB4aHRtbE5hbWVz
cGFjZVVSSSgpKTsKKyAgICByZXR1cm4gdHQ7Cit9CisKK2NvbnN0IFF1YWxpZmllZE5hbWUmIEhU
TUxOYW1lczo6dSgpCit7CisgICAgc3RhdGljIFF1YWxpZmllZE5hbWUgdShudWxsQXRvbSwgInUi
LCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKKyAgICByZXR1cm4gdTsKK30KKworY29uc3QgUXVhbGlm
aWVkTmFtZSYgSFRNTE5hbWVzOjp1bCgpCit7CisgICAgc3RhdGljIFF1YWxpZmllZE5hbWUgdWwo
bnVsbEF0b20sICJ1bCIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOworICAgIHJldHVybiB1bDsKK30K
KworY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjp2YXIoKQoreworICAgIHN0YXRpYyBR
dWFsaWZpZWROYW1lIHZhcihudWxsQXRvbSwgInZhciIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwor
ICAgIHJldHVybiB2YXI7Cit9CisKK2NvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6eG1w
KCkKK3sKKyAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSB4bXAobnVsbEF0b20sICJ4bXAiLCB4aHRt
bE5hbWVzcGFjZVVSSSgpKTsKKyAgICByZXR1cm4geG1wOworfQorCit9CkluZGV4OiBXZWJDb3Jl
LnBicHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dl
YkNvcmUvV2ViQ29yZS5wYnByb2ovcHJvamVjdC5wYnhwcm9qLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjU1MgpkaWZmIC11IC1wIC1yMS41NTIgV2ViQ29yZS5wYnByb2ovcHJvamVjdC5wYnhwcm9q
Ci0tLSBXZWJDb3JlLnBicHJvai9wcm9qZWN0LnBieHByb2oJOCBKdW4gMjAwNSAwOTo1NToxMiAt
MDAwMAkxLjU1MgorKysgV2ViQ29yZS5wYnByb2ovcHJvamVjdC5wYnhwcm9qCTE1IEp1biAyMDA1
IDAwOjIxOjMxIC0wMDAwCkBAIC0zMTEsNiArMzExLDYyIEBACiAvLzU1MgogLy81NTMKIC8vNTU0
CisJCTU1MEEwQkM3MDg1RjYwMzkwMDczNTNENiA9IHsKKwkJCWZpbGVFbmNvZGluZyA9IDMwOwor
CQkJaXNhID0gUEJYRmlsZVJlZmVyZW5jZTsKKwkJCWxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOworCQkJcGF0aCA9IGRvbV9xbmFtZS5jcHA7CisJCQlyZWZUeXBlID0gNDsK
KwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCTU1MEEwQkM4MDg1RjYwMzkwMDcz
NTNENiA9IHsKKwkJCWZpbGVFbmNvZGluZyA9IDMwOworCQkJaXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsKKwkJCWxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7CisJCQlwYXRoID0gZG9t
X3FuYW1lLmg7CisJCQlyZWZUeXBlID0gNDsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJ
CX07CisJCTU1MEEwQkM5MDg1RjYwMzkwMDczNTNENiA9IHsKKwkJCWZpbGVSZWYgPSA1NTBBMEJD
NzA4NUY2MDM5MDA3MzUzRDY7CisJCQlpc2EgPSBQQlhCdWlsZEZpbGU7CisJCQlzZXR0aW5ncyA9
IHsKKwkJCX07CisJCX07CisJCTU1MEEwQkNBMDg1RjYwMzkwMDczNTNENiA9IHsKKwkJCWZpbGVS
ZWYgPSA1NTBBMEJDODA4NUY2MDM5MDA3MzUzRDY7CisJCQlpc2EgPSBQQlhCdWlsZEZpbGU7CisJ
CQlzZXR0aW5ncyA9IHsKKwkJCX07CisJCX07CisJCTU1MEEwQkNCMDg1RjYwNEQwMDczNTNENiA9
IHsKKwkJCWZpbGVFbmNvZGluZyA9IDMwOworCQkJaXNhID0gUEJYRmlsZVJlZmVyZW5jZTsKKwkJ
CWxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOworCQkJcGF0aCA9IGh0bWxu
YW1lcy5jcHA7CisJCQlyZWZUeXBlID0gNDsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJ
CX07CisJCTU1MEEwQkNDMDg1RjYwNEQwMDczNTNENiA9IHsKKwkJCWZpbGVFbmNvZGluZyA9IDMw
OworCQkJaXNhID0gUEJYRmlsZVJlZmVyZW5jZTsKKwkJCWxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7CisJCQlwYXRoID0gaHRtbG5hbWVzLmg7CisJCQlyZWZUeXBlID0gNDsKKwkJ
CXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCTU1MEEwQkNEMDg1RjYwNEQwMDczNTNE
NiA9IHsKKwkJCWZpbGVSZWYgPSA1NTBBMEJDQjA4NUY2MDREMDA3MzUzRDY7CisJCQlpc2EgPSBQ
QlhCdWlsZEZpbGU7CisJCQlzZXR0aW5ncyA9IHsKKwkJCX07CisJCX07CisJCTU1MEEwQkNFMDg1
RjYwNEQwMDczNTNENiA9IHsKKwkJCWZpbGVSZWYgPSA1NTBBMEJDQzA4NUY2MDREMDA3MzUzRDY7
CisJCQlpc2EgPSBQQlhCdWlsZEZpbGU7CisJCQlzZXR0aW5ncyA9IHsKKwkJCX07CisJCX07CiAJ
CTU1OTk4QTU3MDUyQjU5OEYwMDE3QTZDMSA9IHsKIAkJCWNoaWxkcmVuID0gKAogCQkJCTU1OTk4
QTVBMDUyQjU5Q0MwMDE3QTZDMSwKQEAgLTI2ODEsNiArMjczNyw4IEBACiAJCQkJNjU0MzYwNTgw
ODNEMTI5MTAwQzIwNDc1LAogCQkJCTY1NDM2MDcyMDgzREI5RkIwMEMyMDQ3NSwKIAkJCQkxQTY5
RDM4MTA4NTYyNzQxMDAwOTg4MEQsCisJCQkJNTUwQTBCQ0EwODVGNjAzOTAwNzM1M0Q2LAorCQkJ
CTU1MEEwQkNFMDg1RjYwNEQwMDczNTNENiwKIAkJCSk7CiAJCQlpc2EgPSBQQlhIZWFkZXJzQnVp
bGRQaGFzZTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwpAQCAt
NTA1OCw2ICs1MTE2LDggQEAKIAkJCQk2NTQzNjA4MTA4M0RCOUZDMDBDMjA0NzUsCiAJCQkJNjU0
MzYwODIwODNEQjlGQzAwQzIwNDc1LAogCQkJCTFBNjlEMzgyMDg1NjI3NDEwMDA5ODgwRCwKKwkJ
CQk1NTBBMEJDOTA4NUY2MDM5MDA3MzUzRDYsCisJCQkJNTUwQTBCQ0QwODVGNjA0RDAwNzM1M0Q2
LAogCQkJKTsKIAkJCWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNlOwogCQkJcnVuT25seUZvckRl
cGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CkBAIC04NjE0LDYgKzg2NzQsOCBAQAogCQl9Owog
CQlGNTIzRDI3NzAyREU0Mzk4MDE4NjM1Q0EgPSB7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk1NTBB
MEJDQjA4NUY2MDREMDA3MzUzRDYsCisJCQkJNTUwQTBCQ0MwODVGNjA0RDAwNzM1M0Q2LAogCQkJ
CUY1MjNEMjM1MDJERTQzOTYwMTg2MzVDQSwKIAkJCQlGNTIzRDIzNjAyREU0Mzk2MDE4NjM1Q0Es
CiAJCQkJRjUyM0QyMzcwMkRFNDM5NjAxODYzNUNBLApAQCAtOTI5NSw2ICs5MzU3LDggQEAKIAkJ
fTsKIAkJRjUyM0QzMjQwMkRFNDQ3ODAxODYzNUNBID0gewogCQkJY2hpbGRyZW4gPSAoCisJCQkJ
NTUwQTBCQzcwODVGNjAzOTAwNzM1M0Q2LAorCQkJCTU1MEEwQkM4MDg1RjYwMzkwMDczNTNENiwK
IAkJCQlCQzNCMzY0NTA1QzlENUUyMDBFNDI5MDIsCiAJCQkJQkMzQjM2NDYwNUM5RDVFMjAwRTQy
OTAyLAogCQkJCUJDM0IzNjQ3MDVDOUQ1RTIwMEU0MjkwMiwK
</data>
<flag name="review"
          id="13"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>2369</attachid>
            <date>2005-06-15 12:45:59 -0700</date>
            <delta_ts>2005-06-16 16:26:02 -0700</delta_ts>
            <desc>Second pass at QualifiedName and HTMLNames classes</desc>
            <filename>patch-names.txt</filename>
            <type>text/plain</type>
            <size>29597</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9D
aGFuZ2VMb2csdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNDI2NQpkaWZmIC11IC1wIC1yMS40MjY1
IENoYW5nZUxvZwotLS0gQ2hhbmdlTG9nCTE0IEp1biAyMDA1IDIyOjM2OjI3IC0wMDAwCTEuNDI2
NQorKysgQ2hhbmdlTG9nCTE1IEp1biAyMDA1IDE5OjMwOjA1IC0wMDAwCkBAIC0xLDUgKzEsMTcg
QEAKIDIwMDUtMDYtMTQgIERhdmlkIEh5YXR0ICA8aHlhdHRAYXBwbGUuY29tPgogCisgICAgICAg
IEFkZCBhbiBpbml0aWFsIGltcGxlbWVudGF0aW9uIG9mIFF1YWxpZmllZE5hbWUgYW5kIEhUTUxO
YW1lcy4gIFRoZXNlIGNsYXNzZXMgYXJlIG5vdCB1c2VkIGJ5IGFueW9uZSB5ZXQuCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgbWpzCisKKyAgICAgICAgVGVzdCBjYXNlcyBhZGRlZDogKE5vbmUsIGRv
ZXMgbm90IGFmZmVjdCBidWlsZCB5ZXQpCisKKyAgICAgICAgKiBXZWJDb3JlLnBicHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICoga2h0bWwveG1sL2RvbV9xbmFtZS5oLC5jcHAKKyAgICAg
ICAgKiBraHRtbC9odG1sL2h0bWxuYW1lcy5oLC5jcHAKKworMjAwNS0wNi0xNCAgRGF2aWQgSHlh
dHQgIDxoeWF0dEBhcHBsZS5jb20+CisKIAlUaGUgYmVoYXZpb3Igb2YgPHByZT4gaXMgYnJva2Vu
IHNvIHRoYXQgdGhlIG5ld2xpbmUKIAlpcyBub3QgYWx3YXlzIHByb3Blcmx5IGJlaW5nIGVhdGVu
IGFmdGVyIHRoZSBvcGVuIG9mIHRoZSB0YWcuICBJbiBhZGRpdGlvbiB3ZSB3ZXJlIGVhdGluZyB0
aGUgZmlyc3QgbmV3bGluZQogCWFmdGVyIGFsbCBvdGhlciB0YWdzLiAgVGhpcyBwYXRjaCBzdG9w
cyBlYXRpbmcgbmV3bGluZXMgYWZ0ZXIgb3RoZXIgdGFncyBhbmQgcmVmaW5lcyB0aGUgYmVoYXZp
b3IgZm9yIHByZQpJbmRleDoga2h0bWwvaHRtbC9odG1sbmFtZXMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IGtodG1sL2h0bWwvaHRtbG5hbWVzLmNwcApkaWZmIC1OIGtodG1sL2h0bWwvaHRtbG5h
bWVzLmNwcAotLS0gL2Rldi9udWxsCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIGtodG1s
L2h0bWwvaHRtbG5hbWVzLmNwcAkxNSBKdW4gMjAwNSAxOTozMDowNSAtMDAwMApAQCAtMCwwICsx
LDU2OSBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBIVE1MIERPTSBpbXBsZW1l
bnRhdGlvbiBmb3IgS0RFLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBBcHBsZSBDb21wdXRl
ciwgSW5jLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBs
ZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICoK
KyAqLworCisjaW5jbHVkZSAiaHRtbG5hbWVzLmgiCisKK25hbWVzcGFjZSBET00geworCitjb25z
dCBBdG9taWNTdHJpbmcmIEhUTUxOYW1lczo6eGh0bWxOYW1lc3BhY2VVUkkoKQoreworICAgIHN0
YXRpYyBBdG9taWNTdHJpbmcgeGh0bWxOUygiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIp
OworICAgIHJldHVybiB4aHRtbE5TOworfQorCisKKy8vIFRhZyBuYW1lcy4KK2NvbnN0IFF1YWxp
ZmllZE5hbWUmIEhUTUxOYW1lczo6YSgpCit7CisgICAgc3RhdGljIFF1YWxpZmllZE5hbWUgYShu
dWxsQXRvbSwgImEiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKKyAgICByZXR1cm4gYTsKK30KKwor
Y29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjphZGRyZXNzKCkKK3sKKyAgICBzdGF0aWMg
UXVhbGlmaWVkTmFtZSBhZGRyZXNzKG51bGxBdG9tLCAiYWRkcmVzcyIsIHhodG1sTmFtZXNwYWNl
VVJJKCkpOworICAgIHJldHVybiBhZGRyZXNzOworfQorCitjb25zdCBRdWFsaWZpZWROYW1lJiBI
VE1MTmFtZXM6OmFwcGxldCgpCit7CisgICAgc3RhdGljIFF1YWxpZmllZE5hbWUgYXBwbGV0KG51
bGxBdG9tLCAiYXBwbGV0IiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7CisgICAgcmV0dXJuIGFwcGxl
dDsKK30KKworY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjphcmVhKCkKK3sKKyAgICBz
dGF0aWMgUXVhbGlmaWVkTmFtZSBhcmVhKG51bGxBdG9tLCAiYXJlYSIsIHhodG1sTmFtZXNwYWNl
VVJJKCkpOworICAgIHJldHVybiBhcmVhOworfQorCitjb25zdCBRdWFsaWZpZWROYW1lJiBIVE1M
TmFtZXM6OmIoKQoreworICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIGFkZHJlc3MobnVsbEF0b20s
ICJiIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7CisgICAgcmV0dXJuIGI7Cit9CisKK2NvbnN0IFF1
YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6YmFzZSgpCit7CisgICAgc3RhdGljIFF1YWxpZmllZE5h
bWUgYmFzZShudWxsQXRvbSwgImJhc2UiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKKyAgICByZXR1
cm4gYmFzZTsKK30KKworY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpiYXNlZm9udCgp
Cit7CisgICAgc3RhdGljIFF1YWxpZmllZE5hbWUgYmFzZWZvbnQobnVsbEF0b20sICJiYXNlZm9u
dCIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOworICAgIHJldHVybiBiYXNlZm9udDsKK30KKworY29u
c3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpiaWcoKQoreworICAgIHN0YXRpYyBRdWFsaWZp
ZWROYW1lIGFkZHJlc3MobnVsbEF0b20sICJiaWciLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKKyAg
ICByZXR1cm4gYmlnOworfQorCitjb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OmJsb2Nr
cXVvdGUoKQoreworICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIGJsb2NrcXVvdGUobnVsbEF0b20s
ICJibG9ja3F1b3RlIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7CisgICAgcmV0dXJuIGJsb2NrcXVv
dGU7Cit9CisKK2NvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6Ym9keSgpCit7CisgICAg
c3RhdGljIFF1YWxpZmllZE5hbWUgYm9keShudWxsQXRvbSwgImJvZHkiLCB4aHRtbE5hbWVzcGFj
ZVVSSSgpKTsKKyAgICByZXR1cm4gYm9keTsKK30KKworY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRN
TE5hbWVzOjpicigpCit7CisgICAgc3RhdGljIFF1YWxpZmllZE5hbWUgYnIobnVsbEF0b20sICJi
ciIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOworICAgIHJldHVybiBicjsKK30KKworY29uc3QgUXVh
bGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpidXR0b24oKQoreworICAgIHN0YXRpYyBRdWFsaWZpZWRO
YW1lIGJ1dHRvbihudWxsQXRvbSwgImJ1dHRvbiIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOworICAg
IHJldHVybiBidXR0b247Cit9CisKK2NvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6Y2Fu
dmFzKCkKK3sKKyAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBjYW52YXMobnVsbEF0b20sICJjYW52
YXMiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKKyAgICByZXR1cm4gY2FudmFzOworfQorCitjb25z
dCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OmNhcHRpb24oKQoreworICAgIHN0YXRpYyBRdWFs
aWZpZWROYW1lIGNhcHRpb24obnVsbEF0b20sICJjYXB0aW9uIiwgeGh0bWxOYW1lc3BhY2VVUkko
KSk7CisgICAgcmV0dXJuIGNhcHRpb247Cit9CisKK2NvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxO
YW1lczo6Y2VudGVyKCkKK3sKKyAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBjZW50ZXIobnVsbEF0
b20sICJjZW50ZXIiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKKyAgICByZXR1cm4gY2VudGVyOwor
fQorCitjb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OmNvZGUoKQoreworICAgIHN0YXRp
YyBRdWFsaWZpZWROYW1lIGNvZGUobnVsbEF0b20sICJjb2RlIiwgeGh0bWxOYW1lc3BhY2VVUkko
KSk7CisgICAgcmV0dXJuIGNvZGU7Cit9CisKK2NvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1l
czo6Y29sKCkKK3sKKyAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBjYXB0aW9uKG51bGxBdG9tLCAi
Y29sIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7CisgICAgcmV0dXJuIGNvbDsKK30KKworY29uc3Qg
UXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpjb2xncm91cCgpCit7CisgICAgc3RhdGljIFF1YWxp
ZmllZE5hbWUgY29sZ3JvdXAobnVsbEF0b20sICJjb2xncm91cCIsIHhodG1sTmFtZXNwYWNlVVJJ
KCkpOworICAgIHJldHVybiBjb2xncm91cDsKK30KKworY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRN
TE5hbWVzOjpkZCgpCit7CisgICAgc3RhdGljIFF1YWxpZmllZE5hbWUgZGQobnVsbEF0b20sICJk
ZCIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOworICAgIHJldHVybiBkZDsKK30KKworY29uc3QgUXVh
bGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpkZWwoKQoreworICAgIHN0YXRpYyBRdWFsaWZpZWROYW1l
IGRlbChudWxsQXRvbSwgImRlbCIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOworICAgIHJldHVybiBk
ZWw7Cit9CisKK2NvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6ZGZuKCkKK3sKKyAgICBz
dGF0aWMgUXVhbGlmaWVkTmFtZSBkZm4obnVsbEF0b20sICJkZm4iLCB4aHRtbE5hbWVzcGFjZVVS
SSgpKTsKKyAgICByZXR1cm4gZGZuOworfQorCitjb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFt
ZXM6OmRpcigpCit7CisgICAgc3RhdGljIFF1YWxpZmllZE5hbWUgZGlyKG51bGxBdG9tLCAiZGly
IiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7CisgICAgcmV0dXJuIGRpcjsKK30KKworY29uc3QgUXVh
bGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpkaXYoKQoreworICAgIHN0YXRpYyBRdWFsaWZpZWROYW1l
IGRpdihudWxsQXRvbSwgImRpdiIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOworICAgIHJldHVybiBk
aXY7Cit9CisKK2NvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6ZGwoKQoreworICAgIHN0
YXRpYyBRdWFsaWZpZWROYW1lIGRsKG51bGxBdG9tLCAiZGwiLCB4aHRtbE5hbWVzcGFjZVVSSSgp
KTsKKyAgICByZXR1cm4gZGw7Cit9CisKK2NvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6
ZHQoKQoreworICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIGR0KG51bGxBdG9tLCAiZHQiLCB4aHRt
bE5hbWVzcGFjZVVSSSgpKTsKKyAgICByZXR1cm4gZHQ7Cit9CisKK2NvbnN0IFF1YWxpZmllZE5h
bWUmIEhUTUxOYW1lczo6ZW0oKQoreworICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIGVtKG51bGxB
dG9tLCAiZW0iLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKKyAgICByZXR1cm4gZW07Cit9CisKK2Nv
bnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6ZW1iZWQoKQoreworICAgIHN0YXRpYyBRdWFs
aWZpZWROYW1lIGVtYmVkKG51bGxBdG9tLCAiZW1iZWQiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsK
KyAgICByZXR1cm4gZW1iZWQ7Cit9CisKK2NvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6
ZmllbGRzZXQoKQoreworICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIGZpZWxkc2V0KG51bGxBdG9t
LCAiZmllbGRzZXQiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKKyAgICByZXR1cm4gZmllbGRzZXQ7
Cit9CisKK2NvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6Zm9udCgpCit7CisgICAgc3Rh
dGljIFF1YWxpZmllZE5hbWUgZm9udChudWxsQXRvbSwgImZvbnQiLCB4aHRtbE5hbWVzcGFjZVVS
SSgpKTsKKyAgICByZXR1cm4gZm9udDsKK30KKworY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5h
bWVzOjpmb3JtKCkKK3sKKyAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBmb3JtKG51bGxBdG9tLCAi
Zm9ybSIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOworICAgIHJldHVybiBmb3JtOworfQorCitjb25z
dCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OmZyYW1lKCkKK3sKKyAgICBzdGF0aWMgUXVhbGlm
aWVkTmFtZSBmcmFtZShudWxsQXRvbSwgImZyYW1lIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Cisg
ICAgcmV0dXJuIGZyYW1lOworfQorCitjb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OmZy
YW1lc2V0KCkKK3sKKyAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBmcmFtZXNldChudWxsQXRvbSwg
ImZyYW1lc2V0IiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7CisgICAgcmV0dXJuIGZyYW1lc2V0Owor
fQorCitjb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OmhlYWQoKQoreworICAgIHN0YXRp
YyBRdWFsaWZpZWROYW1lIGhlYWQobnVsbEF0b20sICJoZWFkIiwgeGh0bWxOYW1lc3BhY2VVUkko
KSk7CisgICAgcmV0dXJuIGhlYWQ7Cit9CisKK2NvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1l
czo6aDEoKQoreworICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIGgxKG51bGxBdG9tLCAiaDEiLCB4
aHRtbE5hbWVzcGFjZVVSSSgpKTsKKyAgICByZXR1cm4gaDE7Cit9CisKK2NvbnN0IFF1YWxpZmll
ZE5hbWUmIEhUTUxOYW1lczo6aDIoKQoreworICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIGgyKG51
bGxBdG9tLCAiaDIiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKKyAgICByZXR1cm4gaDI7Cit9CisK
K2NvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6aDMoKQoreworICAgIHN0YXRpYyBRdWFs
aWZpZWROYW1lIGgzKG51bGxBdG9tLCAiaDMiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKKyAgICBy
ZXR1cm4gaDM7Cit9CisKK2NvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6aDQoKQorewor
ICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIGg0KG51bGxBdG9tLCAiaDQiLCB4aHRtbE5hbWVzcGFj
ZVVSSSgpKTsKKyAgICByZXR1cm4gaDQ7Cit9CisKK2NvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxO
YW1lczo6aDUoKQoreworICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIGg1KG51bGxBdG9tLCAiaDUi
LCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKKyAgICByZXR1cm4gaDU7Cit9CisKK2NvbnN0IFF1YWxp
ZmllZE5hbWUmIEhUTUxOYW1lczo6aDYoKQoreworICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIGg2
KG51bGxBdG9tLCAiaDYiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKKyAgICByZXR1cm4gaDY7Cit9
CisKK2NvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6aHIoKQoreworICAgIHN0YXRpYyBR
dWFsaWZpZWROYW1lIGhyKG51bGxBdG9tLCAiaHIiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKKyAg
ICByZXR1cm4gaHI7Cit9CisKK2NvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6aHRtbCgp
Cit7CisgICAgc3RhdGljIFF1YWxpZmllZE5hbWUgaHRtbChudWxsQXRvbSwgImh0bWwiLCB4aHRt
bE5hbWVzcGFjZVVSSSgpKTsKKyAgICByZXR1cm4gaHRtbDsKK30KKworY29uc3QgUXVhbGlmaWVk
TmFtZSYgSFRNTE5hbWVzOjppKCkKK3sKKyAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBpKG51bGxB
dG9tLCAiaSIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOworICAgIHJldHVybiBpOworfQorCitjb25z
dCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OmlmcmFtZSgpCit7CisgICAgc3RhdGljIFF1YWxp
ZmllZE5hbWUgaWZyYW1lKG51bGxBdG9tLCAiaWZyYW1lIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7
CisgICAgcmV0dXJuIGlmcmFtZTsKK30KKworY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVz
OjppbWcoKQoreworICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIGltZyhudWxsQXRvbSwgImltZyIs
IHhodG1sTmFtZXNwYWNlVVJJKCkpOworICAgIHJldHVybiBpbWc7Cit9CisKK2NvbnN0IFF1YWxp
ZmllZE5hbWUmIEhUTUxOYW1lczo6aW5wdXQoKQoreworICAgIHN0YXRpYyBRdWFsaWZpZWROYW1l
IGlucHV0KG51bGxBdG9tLCAiaW5wdXQiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKKyAgICByZXR1
cm4gaW5wdXQ7Cit9CisKK2NvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6aW5zKCkKK3sK
KyAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBpbnMobnVsbEF0b20sICJpbnMiLCB4aHRtbE5hbWVz
cGFjZVVSSSgpKTsKKyAgICByZXR1cm4gaW5zOworfQorCitjb25zdCBRdWFsaWZpZWROYW1lJiBI
VE1MTmFtZXM6OmlzaW5kZXgoKQoreworICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIGlzaW5kZXgo
bnVsbEF0b20sICJpc2luZGV4IiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7CisgICAgcmV0dXJuIGlz
aW5kZXg7Cit9CisKK2NvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6a2JkKCkKK3sKKyAg
ICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBrYmQobnVsbEF0b20sICJrYmQiLCB4aHRtbE5hbWVzcGFj
ZVVSSSgpKTsKKyAgICByZXR1cm4ga2JkOworfQorCitjb25zdCBRdWFsaWZpZWROYW1lJiBIVE1M
TmFtZXM6OmtleWdlbigpCit7CisgICAgc3RhdGljIFF1YWxpZmllZE5hbWUga2V5Z2VuKG51bGxB
dG9tLCAia2V5Z2VuIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7CisgICAgcmV0dXJuIGtleWdlbjsK
K30KKworY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpsYWJlbCgpCit7CisgICAgc3Rh
dGljIFF1YWxpZmllZE5hbWUgbGFiZWwobnVsbEF0b20sICJsYWJlbCIsIHhodG1sTmFtZXNwYWNl
VVJJKCkpOworICAgIHJldHVybiBsYWJlbDsKK30KKworY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRN
TE5hbWVzOjpsZWdlbmQoKQoreworICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIGxlZ2VuZChudWxs
QXRvbSwgImxlZ2VuZCIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOworICAgIHJldHVybiBsZWdlbmQ7
Cit9CisKK2NvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6bGkoKQoreworICAgIHN0YXRp
YyBRdWFsaWZpZWROYW1lIGxpKG51bGxBdG9tLCAibGkiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsK
KyAgICByZXR1cm4gbGk7Cit9CisKK2NvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6bGlu
aygpCit7CisgICAgc3RhdGljIFF1YWxpZmllZE5hbWUgbGluayhudWxsQXRvbSwgImxpbmsiLCB4
aHRtbE5hbWVzcGFjZVVSSSgpKTsKKyAgICByZXR1cm4gbGluazsKK30KKworY29uc3QgUXVhbGlm
aWVkTmFtZSYgSFRNTE5hbWVzOjptYXAoKQoreworICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIG1h
cChudWxsQXRvbSwgIm1hcCIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOworICAgIHJldHVybiBtYXA7
Cit9CisKK2NvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6bWFycXVlZSgpCit7CisgICAg
c3RhdGljIFF1YWxpZmllZE5hbWUgbWFycXVlZShudWxsQXRvbSwgIm1hcnF1ZWUiLCB4aHRtbE5h
bWVzcGFjZVVSSSgpKTsKKyAgICByZXR1cm4gbWFycXVlZTsKK30KKworY29uc3QgUXVhbGlmaWVk
TmFtZSYgSFRNTE5hbWVzOjptZW51KCkKK3sKKyAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBtZW51
KG51bGxBdG9tLCAibWVudSIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOworICAgIHJldHVybiBtZW51
OworfQorCitjb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6Om1ldGEoKQoreworICAgIHN0
YXRpYyBRdWFsaWZpZWROYW1lIG1ldGEobnVsbEF0b20sICJtZXRhIiwgeGh0bWxOYW1lc3BhY2VV
UkkoKSk7CisgICAgcmV0dXJuIG1ldGE7Cit9CisKK2NvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxO
YW1lczo6bm9lbWJlZCgpCit7CisgICAgc3RhdGljIFF1YWxpZmllZE5hbWUgbm9lbWJlZChudWxs
QXRvbSwgIm5vZW1iZWQiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKKyAgICByZXR1cm4gbm9lbWJl
ZDsKK30KKworY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpub2ZyYW1lcygpCit7Cisg
ICAgc3RhdGljIFF1YWxpZmllZE5hbWUgbm9mcmFtZXMobnVsbEF0b20sICJub2ZyYW1lcyIsIHho
dG1sTmFtZXNwYWNlVVJJKCkpOworICAgIHJldHVybiBub2ZyYW1lczsKK30KKworY29uc3QgUXVh
bGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpub3NjcmlwdCgpCit7CisgICAgc3RhdGljIFF1YWxpZmll
ZE5hbWUgbm9zY3JpcHQobnVsbEF0b20sICJub3NjcmlwdCIsIHhodG1sTmFtZXNwYWNlVVJJKCkp
OworICAgIHJldHVybiBub3NjcmlwdDsKK30KKworY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5h
bWVzOjpvYmplY3QoKQoreworICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIG9iamVjdChudWxsQXRv
bSwgIm9iamVjdCIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOworICAgIHJldHVybiBvYmplY3Q7Cit9
CisKK2NvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6b2woKQoreworICAgIHN0YXRpYyBR
dWFsaWZpZWROYW1lIG9sKG51bGxBdG9tLCAib2wiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKKyAg
ICByZXR1cm4gb2w7Cit9CisKK2NvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6b3B0Z3Jv
dXAoKQoreworICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIG9wdGdyb3VwKG51bGxBdG9tLCAib3B0
Z3JvdXAiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKKyAgICByZXR1cm4gb3B0Z3JvdXA7Cit9CisK
K2NvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6cCgpCit7CisgICAgc3RhdGljIFF1YWxp
ZmllZE5hbWUgcChudWxsQXRvbSwgInAiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKKyAgICByZXR1
cm4gcDsKK30KKworY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpwYXJhbSgpCit7Cisg
ICAgc3RhdGljIFF1YWxpZmllZE5hbWUgcGFyYW0obnVsbEF0b20sICJwYXJhbSIsIHhodG1sTmFt
ZXNwYWNlVVJJKCkpOworICAgIHJldHVybiBwYXJhbTsKK30KKworY29uc3QgUXVhbGlmaWVkTmFt
ZSYgSFRNTE5hbWVzOjpwcmUoKQoreworICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIHByZShudWxs
QXRvbSwgInByZSIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOworICAgIHJldHVybiBwcmU7Cit9CisK
K2NvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6cSgpCit7CisgICAgc3RhdGljIFF1YWxp
ZmllZE5hbWUgcShudWxsQXRvbSwgInEiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKKyAgICByZXR1
cm4gcTsKK30KKworY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpzKCkKK3sKKyAgICBz
dGF0aWMgUXVhbGlmaWVkTmFtZSBzKG51bGxBdG9tLCAicyIsIHhodG1sTmFtZXNwYWNlVVJJKCkp
OworICAgIHJldHVybiBzOworfQorCitjb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OnNh
bXAoKQoreworICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIHNhbXAobnVsbEF0b20sICJzYW1wIiwg
eGh0bWxOYW1lc3BhY2VVUkkoKSk7CisgICAgcmV0dXJuIHNhbXA7Cit9CisKK2NvbnN0IFF1YWxp
ZmllZE5hbWUmIEhUTUxOYW1lczo6c2NyaXB0KCkKK3sKKyAgICBzdGF0aWMgUXVhbGlmaWVkTmFt
ZSBzY3JpcHQobnVsbEF0b20sICJzY3JpcHQiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKKyAgICBy
ZXR1cm4gc2NyaXB0OworfQorCitjb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OnNlbGVj
dCgpCit7CisgICAgc3RhdGljIFF1YWxpZmllZE5hbWUgc2VsZWN0KG51bGxBdG9tLCAic2VsZWN0
IiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7CisgICAgcmV0dXJuIHNlbGVjdDsKK30KKworY29uc3Qg
UXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpzbWFsbCgpCit7CisgICAgc3RhdGljIFF1YWxpZmll
ZE5hbWUgc21hbGwobnVsbEF0b20sICJzbWFsbCIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOworICAg
IHJldHVybiBzbWFsbDsKK30KKworY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpzdHJp
a2UoKQoreworICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIHN0cmlrZShudWxsQXRvbSwgInN0cmlr
ZSIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOworICAgIHJldHVybiBzdHJpa2U7Cit9CisKK2NvbnN0
IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6c3Ryb25nKCkKK3sKKyAgICBzdGF0aWMgUXVhbGlm
aWVkTmFtZSBzdHJvbmcobnVsbEF0b20sICJzdHJvbmciLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsK
KyAgICByZXR1cm4gc3Ryb25nOworfQorCitjb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6
OnN0eWxlKCkKK3sKKyAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBzdHlsZShudWxsQXRvbSwgInN0
eWxlIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7CisgICAgcmV0dXJuIHN0eWxlOworfQorCitjb25z
dCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OnRhYmxlKCkKK3sKKyAgICBzdGF0aWMgUXVhbGlm
aWVkTmFtZSB0YWJsZShudWxsQXRvbSwgInRhYmxlIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Cisg
ICAgcmV0dXJuIHRhYmxlOworfQorCitjb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OnRi
b2R5KCkKK3sKKyAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSB0Ym9keShudWxsQXRvbSwgInRib2R5
IiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7CisgICAgcmV0dXJuIHRib2R5OworfQorCitjb25zdCBR
dWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OnRkKCkKK3sKKyAgICBzdGF0aWMgUXVhbGlmaWVkTmFt
ZSB0ZChudWxsQXRvbSwgInRkIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7CisgICAgcmV0dXJuIHRk
OworfQorCitjb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OnRleHRhcmVhKCkKK3sKKyAg
ICBzdGF0aWMgUXVhbGlmaWVkTmFtZSB0ZXh0YXJlYShudWxsQXRvbSwgInRleHRhcmVhIiwgeGh0
bWxOYW1lc3BhY2VVUkkoKSk7CisgICAgcmV0dXJuIHRleHRhcmVhOworfQorCitjb25zdCBRdWFs
aWZpZWROYW1lJiBIVE1MTmFtZXM6OnRmb290KCkKK3sKKyAgICBzdGF0aWMgUXVhbGlmaWVkTmFt
ZSB0Zm9vdChudWxsQXRvbSwgInRmb290IiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7CisgICAgcmV0
dXJuIHRmb290OworfQorCitjb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OnRoKCkKK3sK
KyAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSB0aChudWxsQXRvbSwgInRoIiwgeGh0bWxOYW1lc3Bh
Y2VVUkkoKSk7CisgICAgcmV0dXJuIHRoOworfQorCitjb25zdCBRdWFsaWZpZWROYW1lJiBIVE1M
TmFtZXM6OnRoZWFkKCkKK3sKKyAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSB0aGVhZChudWxsQXRv
bSwgInRoZWFkIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7CisgICAgcmV0dXJuIHRoZWFkOworfQor
Citjb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OnRpdGxlKCkKK3sKKyAgICBzdGF0aWMg
UXVhbGlmaWVkTmFtZSB0aXRsZShudWxsQXRvbSwgInRpdGxlIiwgeGh0bWxOYW1lc3BhY2VVUkko
KSk7CisgICAgcmV0dXJuIHRpdGxlOworfQorCitjb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFt
ZXM6OnRyKCkKK3sKKyAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSB0cihudWxsQXRvbSwgInRyIiwg
eGh0bWxOYW1lc3BhY2VVUkkoKSk7CisgICAgcmV0dXJuIHRyOworfQorCitjb25zdCBRdWFsaWZp
ZWROYW1lJiBIVE1MTmFtZXM6OnR0KCkKK3sKKyAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSB0dChu
dWxsQXRvbSwgInR0IiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7CisgICAgcmV0dXJuIHR0OworfQor
Citjb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OnUoKQoreworICAgIHN0YXRpYyBRdWFs
aWZpZWROYW1lIHUobnVsbEF0b20sICJ1IiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7CisgICAgcmV0
dXJuIHU7Cit9CisKK2NvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6dWwoKQoreworICAg
IHN0YXRpYyBRdWFsaWZpZWROYW1lIHVsKG51bGxBdG9tLCAidWwiLCB4aHRtbE5hbWVzcGFjZVVS
SSgpKTsKKyAgICByZXR1cm4gdWw7Cit9CisKK2NvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1l
czo6dmFyKCkKK3sKKyAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSB2YXIobnVsbEF0b20sICJ2YXIi
LCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKKyAgICByZXR1cm4gdmFyOworfQorCitjb25zdCBRdWFs
aWZpZWROYW1lJiBIVE1MTmFtZXM6OnhtcCgpCit7CisgICAgc3RhdGljIFF1YWxpZmllZE5hbWUg
eG1wKG51bGxBdG9tLCAieG1wIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7CisgICAgcmV0dXJuIHht
cDsKK30KKworfQpJbmRleDoga2h0bWwvaHRtbC9odG1sbmFtZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiBraHRtbC9odG1sL2h0bWxuYW1lcy5oCmRpZmYgLU4ga2h0bWwvaHRtbC9odG1sbmFtZXMu
aAotLS0gL2Rldi9udWxsCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIGtodG1sL2h0bWwv
aHRtbG5hbWVzLmgJMTUgSnVuIDIwMDUgMTk6MzA6MDUgLTAwMDAKQEAgLTAsMCArMSwxMzMgQEAK
Ky8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgSFRNTCBET00gaW1wbGVtZW50YXRpb24g
Zm9yIEtERS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2Ug
LSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKi8KKyNp
Zm5kZWYgSFRNTE5BTUVTX0gKKyNkZWZpbmUgSFRNTE5BTUVTX0gKKworI2luY2x1ZGUgInhtbC9k
b21fZWxlbWVudGltcGwuaCIKKworbmFtZXNwYWNlIERPTQoreworCitjbGFzcyBIVE1MTmFtZXMK
K3sKK3B1YmxpYzoKKyAgICAvLyBUaGUgbmFtZXNwYWNlIFVSSS4KKyAgICBzdGF0aWMgY29uc3Qg
QXRvbWljU3RyaW5nJiB4aHRtbE5hbWVzcGFjZVVSSSgpOworICAgIAorICAgIC8vIEZ1bGwgdGFn
IG5hbWVzLgorICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBhKCk7CisgICAgc3RhdGlj
IGNvbnN0IFF1YWxpZmllZE5hbWUmIGFkZHJlc3MoKTsKKyAgICBzdGF0aWMgY29uc3QgUXVhbGlm
aWVkTmFtZSYgYXBwbGV0KCk7CisgICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGFyZWEo
KTsKKyAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgYigpOworICAgIHN0YXRpYyBjb25z
dCBRdWFsaWZpZWROYW1lJiBiYXNlKCk7CisgICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUm
IGJhc2Vmb250KCk7CisgICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGJpZygpOworICAg
IHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBibG9ja3F1b3RlKCk7CisgICAgc3RhdGljIGNv
bnN0IFF1YWxpZmllZE5hbWUmIGJvZHkoKTsKKyAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFt
ZSYgYnIoKTsKKyAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgYnV0dG9uKCk7CisgICAg
c3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGNhbnZhcygpOworICAgIHN0YXRpYyBjb25zdCBR
dWFsaWZpZWROYW1lJiBjYXB0aW9uKCk7CisgICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUm
IGNlbnRlcigpOworICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBjb2RlKCk7CisgICAg
c3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGNvbCgpOworICAgIHN0YXRpYyBjb25zdCBRdWFs
aWZpZWROYW1lJiBjb2xncm91cCgpOworICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBk
ZCgpOworICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBkZWwoKTsKKyAgICBzdGF0aWMg
Y29uc3QgUXVhbGlmaWVkTmFtZSYgZGZuKCk7CisgICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5h
bWUmIGRpcigpOworICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBkaXYoKTsKKyAgICBz
dGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgZGwoKTsKKyAgICBzdGF0aWMgY29uc3QgUXVhbGlm
aWVkTmFtZSYgZHQoKTsKKyAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgZW0oKTsKKyAg
ICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgZW1iZWQoKTsKKyAgICBzdGF0aWMgY29uc3Qg
UXVhbGlmaWVkTmFtZSYgZmllbGRzZXQoKTsKKyAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFt
ZSYgZm9udCgpOworICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBmb3JtKCk7CisgICAg
c3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGZyYW1lKCk7CisgICAgc3RhdGljIGNvbnN0IFF1
YWxpZmllZE5hbWUmIGZyYW1lc2V0KCk7CisgICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUm
IGhlYWQoKTsKKyAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgaDEoKTsKKyAgICBzdGF0
aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgaDIoKTsKKyAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVk
TmFtZSYgaDMoKTsKKyAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgaDQoKTsKKyAgICBz
dGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgaDUoKTsKKyAgICBzdGF0aWMgY29uc3QgUXVhbGlm
aWVkTmFtZSYgaDYoKTsKKyAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgaHIoKTsKKyAg
ICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgaHRtbCgpOworICAgIHN0YXRpYyBjb25zdCBR
dWFsaWZpZWROYW1lJiBpKCk7CisgICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGlmcmFt
ZSgpOworICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBpbWcoKTsKKyAgICBzdGF0aWMg
Y29uc3QgUXVhbGlmaWVkTmFtZSYgaW5wdXQoKTsKKyAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVk
TmFtZSYgaW5zKCk7CisgICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGlzaW5kZXgoKTsK
KyAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYga2JkKCk7CisgICAgc3RhdGljIGNvbnN0
IFF1YWxpZmllZE5hbWUmIGtleWdlbigpOworICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1l
JiBsYWJlbCgpOworICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBsZWdlbmQoKTsKKyAg
ICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgbGkoKTsKKyAgICBzdGF0aWMgY29uc3QgUXVh
bGlmaWVkTmFtZSYgbGluaygpOworICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBtYXAo
KTsKKyAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgbWFycXVlZSgpOworICAgIHN0YXRp
YyBjb25zdCBRdWFsaWZpZWROYW1lJiBtZW51KCk7CisgICAgc3RhdGljIGNvbnN0IFF1YWxpZmll
ZE5hbWUmIG1ldGEoKTsKKyAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgbm9lbWJlZCgp
OworICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBub2ZyYW1lcygpOworICAgIHN0YXRp
YyBjb25zdCBRdWFsaWZpZWROYW1lJiBub3NjcmlwdCgpOworICAgIHN0YXRpYyBjb25zdCBRdWFs
aWZpZWROYW1lJiBvYmplY3QoKTsKKyAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgb2wo
KTsKKyAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgb3B0Z3JvdXAoKTsKKyAgICBzdGF0
aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgb3B0aW9uKCk7CisgICAgc3RhdGljIGNvbnN0IFF1YWxp
ZmllZE5hbWUmIHAoKTsKKyAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgcGFyYW0oKTsK
KyAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgcHJlKCk7CisgICAgc3RhdGljIGNvbnN0
IFF1YWxpZmllZE5hbWUmIHEoKTsKKyAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgcygp
OworICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBzYW1wKCk7CisgICAgc3RhdGljIGNv
bnN0IFF1YWxpZmllZE5hbWUmIHNjcmlwdCgpOworICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWRO
YW1lJiBzZWxlY3QoKTsKKyAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgc21hbGwoKTsK
KyAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgc3RyaWtlKCk7CisgICAgc3RhdGljIGNv
bnN0IFF1YWxpZmllZE5hbWUmIHN0cm9uZygpOworICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWRO
YW1lJiBzdHlsZSgpOworICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiB0YWJsZSgpOwor
ICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiB0Ym9keSgpOworICAgIHN0YXRpYyBjb25z
dCBRdWFsaWZpZWROYW1lJiB0ZCgpOworICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiB0
ZXh0YXJlYSgpOworICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiB0Zm9vdCgpOworICAg
IHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiB0aCgpOworICAgIHN0YXRpYyBjb25zdCBRdWFs
aWZpZWROYW1lJiB0aGVhZCgpOworICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiB0aXRs
ZSgpOworICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiB0cigpOworICAgIHN0YXRpYyBj
b25zdCBRdWFsaWZpZWROYW1lJiB0dCgpOworICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1l
JiB1KCk7CisgICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIHVsKCk7CisgICAgc3RhdGlj
IGNvbnN0IFF1YWxpZmllZE5hbWUmIHZhcigpOworICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWRO
YW1lJiB4bXAoKTsKKworICAgIC8vIEF0dHJpYnV0ZSBuYW1lcy4KK307CisKK30KKworI2VuZGlm
CkluZGV4OiBraHRtbC94bWwvZG9tX3FuYW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZToga2h0bWwv
eG1sL2RvbV9xbmFtZS5oCmRpZmYgLU4ga2h0bWwveG1sL2RvbV9xbmFtZS5oCi0tLSAvZGV2L251
bGwJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysga2h0bWwveG1sL2RvbV9xbmFtZS5oCTE1
IEp1biAyMDA1IDE5OjMwOjA1IC0wMDAwCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBUaGlzIGZp
bGUgaXMgcGFydCBvZiB0aGUgRE9NIGltcGxlbWVudGF0aW9uIGZvciBLREUuCisgKgorICogQ29w
eXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9z
dG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICovCisjaWZuZGVmIF9ET01fUU5BTUVfaF8K
KyNkZWZpbmUgX0RPTV9RTkFNRV9oXworCisjaW5jbHVkZSAiZG9tX2F0b21pY3N0cmluZy5oIgor
CituYW1lc3BhY2UgRE9NIHsKKworY2xhc3MgUXVhbGlmaWVkTmFtZSB7CitwdWJsaWM6CisgICAg
Y2xhc3MgUXVhbGlmaWVkTmFtZUltcGwgOiBwdWJsaWMga2h0bWw6OlNoYXJlZDxRdWFsaWZpZWRO
YW1lSW1wbD4geworICAgIHB1YmxpYzoKKyAgICAgICAgUXVhbGlmaWVkTmFtZUltcGwoY29uc3Qg
QXRvbWljU3RyaW5nJiBwLCBjb25zdCBBdG9taWNTdHJpbmcmIGwsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgbikgOm1fcHJlZml4KHApLCBtX2xvY2FsTmFtZShsKSwgbV9uYW1lc3BhY2Uobikge30KKwor
ICAgICAgICBmcmllbmQgY2xhc3MgUXVhbGlmaWVkTmFtZTsKKworICAgIHByaXZhdGU6CisgICAg
ICAgIEF0b21pY1N0cmluZyBtX3ByZWZpeDsKKyAgICAgICAgQXRvbWljU3RyaW5nIG1fbG9jYWxO
YW1lOworICAgICAgICBBdG9taWNTdHJpbmcgbV9uYW1lc3BhY2U7CisgICAgfTsKKworICAgIFF1
YWxpZmllZE5hbWUoY29uc3QgQXRvbWljU3RyaW5nJiBwLCBjb25zdCBBdG9taWNTdHJpbmcmIGws
IGNvbnN0IEF0b21pY1N0cmluZyYgbik7CisgICAgUXVhbGlmaWVkTmFtZShRdWFsaWZpZWROYW1l
SW1wbCogaW5uZXIpOworICAgIH5RdWFsaWZpZWROYW1lKCk7CisKKyAgICBRdWFsaWZpZWROYW1l
KGNvbnN0IFF1YWxpZmllZE5hbWUmIG90aGVyKTsKKyAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBv
cGVyYXRvcj0oY29uc3QgUXVhbGlmaWVkTmFtZSYgb3RoZXIpOworCisgICAgRE9NU3RyaW5nSW1w
bCogbG9jYWxOYW1lUHRyKCkgY29uc3QgeyByZXR1cm4gbG9jYWxOYW1lKCkuaW1wbGVtZW50YXRp
b24oKTsgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBRdWFsaWZpZWROYW1lJiBv
dGhlcikgY29uc3QgeyByZXR1cm4gbV9pbXBsID09IG90aGVyLm1faW1wbDsgfQorICAgIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBRdWFsaWZpZWROYW1lJiBvdGhlcikgY29uc3QgeyByZXR1cm4gISgq
dGhpcyA9PSBvdGhlcik7IH0KKworICAgIGJvb2wgbWF0Y2hlcyhjb25zdCBRdWFsaWZpZWROYW1l
JiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9pbXBsID09IG90aGVyLm1faW1wbCB8fCAobG9jYWxO
YW1lKCkgPT0gb3RoZXIubG9jYWxOYW1lKCkgJiYgbmFtZXNwYWNlVVJJKCkgPT0gb3RoZXIubmFt
ZXNwYWNlVVJJKCkpOyB9CisKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCgpIGNvbnN0
IHsgcmV0dXJuIG1faW1wbC0+bV9wcmVmaXg7IH0KKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGxv
Y2FsTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1wbC0+bV9sb2NhbE5hbWU7IH0KKyAgICBjb25z
dCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSgpIGNvbnN0IHsgcmV0dXJuIG1faW1wbC0+bV9u
YW1lc3BhY2U7IH0KKworcHJpdmF0ZToKKworICAgIHZvaWQgcmVmKCkgeyBpZiAobV9pbXBsKSBt
X2ltcGwtPnJlZigpOyB9IC8vIEZJWE1FOiBZYW5rIG51bGwgY2hlY2sgZXZlbnR1YWxseS4KKyAg
ICB2b2lkIGRlcmVmKCk7CisgICAgCisgICAgUXVhbGlmaWVkTmFtZUltcGwqIG1faW1wbDsKK307
CisKK2Jvb2wgb3BlcmF0b3I9PShjb25zdCBBdG9taWNTdHJpbmcmIGEsIGNvbnN0IFF1YWxpZmll
ZE5hbWUmIHEpIHsgcmV0dXJuIGEgPT0gcS5sb2NhbE5hbWUoKTsgfQorYm9vbCBvcGVyYXRvciE9
KGNvbnN0IEF0b21pY1N0cmluZyYgYSwgY29uc3QgUXVhbGlmaWVkTmFtZSYgcSkgeyByZXR1cm4g
YSAhPSBxLmxvY2FsTmFtZSgpOyB9Citib29sIG9wZXJhdG9yPT0oY29uc3QgUXVhbGlmaWVkTmFt
ZSYgcSwgY29uc3QgQXRvbWljU3RyaW5nJiBhKSB7IHJldHVybiBhID09IHEubG9jYWxOYW1lKCk7
IH0KK2Jvb2wgb3BlcmF0b3IhPShjb25zdCBRdWFsaWZpZWROYW1lJiBxLCBjb25zdCBBdG9taWNT
dHJpbmcmIGEpIHsgcmV0dXJuIGEgIT0gcS5sb2NhbE5hbWUoKTsgfQorCisKK30KKyNlbmRpZgpJ
bmRleDoga2h0bWwveG1sL2RvbV9xbmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZToga2h0bWwv
eG1sL2RvbV9xbmFtZS5jcHAKZGlmZiAtTiBraHRtbC94bWwvZG9tX3FuYW1lLmNwcAotLS0gL2Rl
di9udWxsCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIGtodG1sL3htbC9kb21fcW5hbWUu
Y3BwCTE1IEp1biAyMDA1IDE5OjMwOjA1IC0wMDAwCkBAIC0wLDAgKzEsMTA4IEBACisvKioKKyAq
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4KKyAq
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAs
CisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8cXB0cmRp
Y3QuaD4KKyNpbmNsdWRlICJkb21fcW5hbWUuaCIKKworbmFtZXNwYWNlIERPTSB7CisKK3N0YXRp
YyBRUHRyRGljdDxRUHRyRGljdDxRUHRyRGljdDxRdWFsaWZpZWROYW1lOjpRdWFsaWZpZWROYW1l
SW1wbD4gPiA+KiBnTmFtZUNhY2hlID0gMDsKKworUXVhbGlmaWVkTmFtZTo6UXVhbGlmaWVkTmFt
ZShjb25zdCBBdG9taWNTdHJpbmcmIHAsIGNvbnN0IEF0b21pY1N0cmluZyYgbCwgY29uc3QgQXRv
bWljU3RyaW5nJiBuKQoreworICAgIC8vIE9idGFpbiBhbiBhcHByb3ByaWF0ZSBpbm5lciBmcm9t
IG91ciBkaWN0aW9uYXJ5LgorICAgIFFQdHJEaWN0PFFQdHJEaWN0PFF1YWxpZmllZE5hbWVJbXBs
PiA+KiBuYW1lc3BhY2VEaWN0ID0gMDsKKyAgICBRUHRyRGljdDxRdWFsaWZpZWROYW1lSW1wbD4q
IHByZWZpeERpY3QgPSAwOworICAgIGlmIChnTmFtZUNhY2hlKSB7CisgICAgICAgIG5hbWVzcGFj
ZURpY3QgPSBnTmFtZUNhY2hlLT5maW5kKCh2b2lkKikobi5pbXBsZW1lbnRhdGlvbigpKSk7Cisg
ICAgICAgIGlmIChuYW1lc3BhY2VEaWN0KSB7CisgICAgICAgICAgICBwcmVmaXhEaWN0ID0gbmFt
ZXNwYWNlRGljdC0+ZmluZCgodm9pZCopcC5pbXBsZW1lbnRhdGlvbigpKTsKKyAgICAgICAgICAg
IGlmIChwcmVmaXhEaWN0KQorICAgICAgICAgICAgICAgIG1faW1wbCA9IHByZWZpeERpY3QtPmZp
bmQoKHZvaWQqKWwuaW1wbGVtZW50YXRpb24oKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBp
ZiAoIW1faW1wbCkgeworICAgICAgICBtX2ltcGwgPSBuZXcgUXVhbGlmaWVkTmFtZUltcGwocCwg
bCwgbik7CisKKyAgICAgICAgLy8gUHV0IHRoZSBvYmplY3QgaW50byB0aGUgaGFzaC4KKyAgICAg
ICAgaWYgKCFnTmFtZUNhY2hlKQorICAgICAgICAgICAgZ05hbWVDYWNoZSA9IG5ldyBRUHRyRGlj
dDxRUHRyRGljdDxRUHRyRGljdDxRdWFsaWZpZWROYW1lSW1wbD4gPiA+OworICAgICAgICAKKyAg
ICAgICAgaWYgKCFuYW1lc3BhY2VEaWN0KSB7CisgICAgICAgICAgICBuYW1lc3BhY2VEaWN0ID0g
bmV3IFFQdHJEaWN0PFFQdHJEaWN0PFF1YWxpZmllZE5hbWVJbXBsPiA+OworICAgICAgICAgICAg
bmFtZXNwYWNlRGljdC0+c2V0QXV0b0RlbGV0ZSh0cnVlKTsKKyAgICAgICAgICAgIGdOYW1lQ2Fj
aGUtPmluc2VydCgodm9pZCopbi5pbXBsZW1lbnRhdGlvbigpLCBuYW1lc3BhY2VEaWN0KTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCFwcmVmaXhEaWN0KSB7CisgICAgICAgICAg
ICBwcmVmaXhEaWN0ID0gbmV3IFFQdHJEaWN0PFF1YWxpZmllZE5hbWVJbXBsPjsKKyAgICAgICAg
ICAgIG5hbWVzcGFjZURpY3QtPmluc2VydCgodm9pZCopcC5pbXBsZW1lbnRhdGlvbigpLCBwcmVm
aXhEaWN0KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcHJlZml4RGljdC0+aW5zZXJ0
KCh2b2lkKilsLmltcGxlbWVudGF0aW9uKCksIG1faW1wbCk7CisgICAgfQorICAgIAorICAgIHJl
ZigpOworfQorCitRdWFsaWZpZWROYW1lOjp+UXVhbGlmaWVkTmFtZSgpCit7CisgICAgZGVyZWYo
KTsKK30KKworUXVhbGlmaWVkTmFtZTo6UXVhbGlmaWVkTmFtZShjb25zdCBRdWFsaWZpZWROYW1l
JiBvdGhlcikKK3sKKyAgICBtX2ltcGwgPSBvdGhlci5tX2ltcGw7CisgICAgcmVmKCk7Cit9CisK
K2NvbnN0IFF1YWxpZmllZE5hbWUmIFF1YWxpZmllZE5hbWU6Om9wZXJhdG9yPShjb25zdCBRdWFs
aWZpZWROYW1lJiBvdGhlcikKK3sKKyAgICBpZiAobV9pbXBsICE9IG90aGVyLm1faW1wbCkgewor
ICAgICAgICBkZXJlZigpOworICAgICAgICBtX2ltcGwgPSBvdGhlci5tX2ltcGw7CisgICAgICAg
IHJlZigpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK3ZvaWQgUXVhbGlm
aWVkTmFtZTo6ZGVyZWYoKQoreworICAgIGlmIChtX2ltcGwtPnJlZkNvdW50KCkgPT0gMSkgewor
ICAgICAgICAvLyBCZWZvcmUgZGVjcmVtZW50aW5nIHRoZSByZWYgdG8gMCwgcmVtb3ZlIG91cnNl
bHZlcyBmcm9tIHRoZSBoYXNoIHRhYmxlLgorICAgICAgICBRUHRyRGljdDxRUHRyRGljdDxRdWFs
aWZpZWROYW1lSW1wbD4gPiogbmFtZXNwYWNlRGljdCA9IDA7CisgICAgICAgIFFQdHJEaWN0PFF1
YWxpZmllZE5hbWVJbXBsPiogcHJlZml4RGljdCA9IDA7CisgICAgICAgIGlmIChnTmFtZUNhY2hl
KSB7CisgICAgICAgICAgICBuYW1lc3BhY2VEaWN0ID0gZ05hbWVDYWNoZS0+ZmluZCgodm9pZCop
KG5hbWVzcGFjZVVSSSgpLmltcGxlbWVudGF0aW9uKCkpKTsKKyAgICAgICAgICAgIGlmIChuYW1l
c3BhY2VEaWN0KSB7CisgICAgICAgICAgICAgICAgcHJlZml4RGljdCA9IG5hbWVzcGFjZURpY3Qt
PmZpbmQoKHZvaWQqKXByZWZpeCgpLmltcGxlbWVudGF0aW9uKCkpOworICAgICAgICAgICAgICAg
IGlmIChwcmVmaXhEaWN0KQorICAgICAgICAgICAgICAgICAgICBwcmVmaXhEaWN0LT5yZW1vdmUo
KHZvaWQqKWxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCkpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorICAgIAorICAgIG1faW1wbC0+ZGVyZWYoKTsKK30KKworfQpcIE5vIG5l
d2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IFdlYkNvcmUucGJwcm9qL3Byb2plY3QucGJ4cHJv
ago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9XZWJDb3JlLnBicHJvai9w
cm9qZWN0LnBieHByb2osdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNTUyCmRpZmYgLXUgLXAgLXIx
LjU1MiBXZWJDb3JlLnBicHJvai9wcm9qZWN0LnBieHByb2oKLS0tIFdlYkNvcmUucGJwcm9qL3By
b2plY3QucGJ4cHJvagk4IEp1biAyMDA1IDA5OjU1OjEyIC0wMDAwCTEuNTUyCisrKyBXZWJDb3Jl
LnBicHJvai9wcm9qZWN0LnBieHByb2oJMTUgSnVuIDIwMDUgMTk6MzA6MTIgLTAwMDAKQEAgLTMx
MSw2ICszMTEsNjIgQEAKIC8vNTUyCiAvLzU1MwogLy81NTQKKwkJNTUwQTBCQzcwODVGNjAzOTAw
NzM1M0Q2ID0geworCQkJZmlsZUVuY29kaW5nID0gMzA7CisJCQlpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOworCQkJbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7CisJCQlwYXRo
ID0gZG9tX3FuYW1lLmNwcDsKKwkJCXJlZlR5cGUgPSA0OworCQkJc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsKKwkJfTsKKwkJNTUwQTBCQzgwODVGNjAzOTAwNzM1M0Q2ID0geworCQkJZmlsZUVuY29k
aW5nID0gMzA7CisJCQlpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOworCQkJbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsKKwkJCXBhdGggPSBkb21fcW5hbWUuaDsKKwkJCXJlZlR5cGUg
PSA0OworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJNTUwQTBCQzkwODVGNjAz
OTAwNzM1M0Q2ID0geworCQkJZmlsZVJlZiA9IDU1MEEwQkM3MDg1RjYwMzkwMDczNTNENjsKKwkJ
CWlzYSA9IFBCWEJ1aWxkRmlsZTsKKwkJCXNldHRpbmdzID0geworCQkJfTsKKwkJfTsKKwkJNTUw
QTBCQ0EwODVGNjAzOTAwNzM1M0Q2ID0geworCQkJZmlsZVJlZiA9IDU1MEEwQkM4MDg1RjYwMzkw
MDczNTNENjsKKwkJCWlzYSA9IFBCWEJ1aWxkRmlsZTsKKwkJCXNldHRpbmdzID0geworCQkJfTsK
KwkJfTsKKwkJNTUwQTBCQ0IwODVGNjA0RDAwNzM1M0Q2ID0geworCQkJZmlsZUVuY29kaW5nID0g
MzA7CisJCQlpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOworCQkJbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7CisJCQlwYXRoID0gaHRtbG5hbWVzLmNwcDsKKwkJCXJlZlR5cGUg
PSA0OworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJNTUwQTBCQ0MwODVGNjA0
RDAwNzM1M0Q2ID0geworCQkJZmlsZUVuY29kaW5nID0gMzA7CisJCQlpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOworCQkJbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsKKwkJCXBhdGgg
PSBodG1sbmFtZXMuaDsKKwkJCXJlZlR5cGUgPSA0OworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsKKwkJfTsKKwkJNTUwQTBCQ0QwODVGNjA0RDAwNzM1M0Q2ID0geworCQkJZmlsZVJlZiA9IDU1
MEEwQkNCMDg1RjYwNEQwMDczNTNENjsKKwkJCWlzYSA9IFBCWEJ1aWxkRmlsZTsKKwkJCXNldHRp
bmdzID0geworCQkJfTsKKwkJfTsKKwkJNTUwQTBCQ0UwODVGNjA0RDAwNzM1M0Q2ID0geworCQkJ
ZmlsZVJlZiA9IDU1MEEwQkNDMDg1RjYwNEQwMDczNTNENjsKKwkJCWlzYSA9IFBCWEJ1aWxkRmls
ZTsKKwkJCXNldHRpbmdzID0geworCQkJfTsKKwkJfTsKIAkJNTU5OThBNTcwNTJCNTk4RjAwMTdB
NkMxID0gewogCQkJY2hpbGRyZW4gPSAoCiAJCQkJNTU5OThBNUEwNTJCNTlDQzAwMTdBNkMxLApA
QCAtMjY4MSw2ICsyNzM3LDggQEAKIAkJCQk2NTQzNjA1ODA4M0QxMjkxMDBDMjA0NzUsCiAJCQkJ
NjU0MzYwNzIwODNEQjlGQjAwQzIwNDc1LAogCQkJCTFBNjlEMzgxMDg1NjI3NDEwMDA5ODgwRCwK
KwkJCQk1NTBBMEJDQTA4NUY2MDM5MDA3MzUzRDYsCisJCQkJNTUwQTBCQ0UwODVGNjA0RDAwNzM1
M0Q2LAogCQkJKTsKIAkJCWlzYSA9IFBCWEhlYWRlcnNCdWlsZFBoYXNlOwogCQkJcnVuT25seUZv
ckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CkBAIC01MDU4LDYgKzUxMTYsOCBAQAogCQkJ
CTY1NDM2MDgxMDgzREI5RkMwMEMyMDQ3NSwKIAkJCQk2NTQzNjA4MjA4M0RCOUZDMDBDMjA0NzUs
CiAJCQkJMUE2OUQzODIwODU2Mjc0MTAwMDk4ODBELAorCQkJCTU1MEEwQkM5MDg1RjYwMzkwMDcz
NTNENiwKKwkJCQk1NTBBMEJDRDA4NUY2MDREMDA3MzUzRDYsCiAJCQkpOwogCQkJaXNhID0gUEJY
U291cmNlc0J1aWxkUGhhc2U7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5n
ID0gMDsKQEAgLTg2MTQsNiArODY3NCw4IEBACiAJCX07CiAJCUY1MjNEMjc3MDJERTQzOTgwMTg2
MzVDQSA9IHsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTU1MEEwQkNCMDg1RjYwNEQwMDczNTNENiwK
KwkJCQk1NTBBMEJDQzA4NUY2MDREMDA3MzUzRDYsCiAJCQkJRjUyM0QyMzUwMkRFNDM5NjAxODYz
NUNBLAogCQkJCUY1MjNEMjM2MDJERTQzOTYwMTg2MzVDQSwKIAkJCQlGNTIzRDIzNzAyREU0Mzk2
MDE4NjM1Q0EsCkBAIC05Mjk1LDYgKzkzNTcsOCBAQAogCQl9OwogCQlGNTIzRDMyNDAyREU0NDc4
MDE4NjM1Q0EgPSB7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk1NTBBMEJDNzA4NUY2MDM5MDA3MzUz
RDYsCisJCQkJNTUwQTBCQzgwODVGNjAzOTAwNzM1M0Q2LAogCQkJCUJDM0IzNjQ1MDVDOUQ1RTIw
MEU0MjkwMiwKIAkJCQlCQzNCMzY0NjA1QzlENUUyMDBFNDI5MDIsCiAJCQkJQkMzQjM2NDcwNUM5
RDVFMjAwRTQyOTAyLAo=
</data>
<flag name="review"
          id="20"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>2407</attachid>
            <date>2005-06-16 16:26:02 -0700</date>
            <delta_ts>2005-06-16 18:50:09 -0700</delta_ts>
            <desc>More progress. kjs_html.cpp is done.  The htmltags and scripts to make them have been removed.</desc>
            <filename>patch-2.txt</filename>
            <type>text/plain</type>
            <size>444991</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUucGJwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvV2ViQ29yZS9XZWJDb3JlLnBicHJvai9wcm9qZWN0LnBieHByb2osdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuNTUzCmRpZmYgLXUgLXAgLXIxLjU1MyBXZWJDb3JlLnBicHJvai9w
cm9qZWN0LnBieHByb2oKLS0tIFdlYkNvcmUucGJwcm9qL3Byb2plY3QucGJ4cHJvagkxNiBKdW4g
MjAwNSAxOTo0MjoxOCAtMDAwMAkxLjU1MworKysgV2ViQ29yZS5wYnByb2ovcHJvamVjdC5wYnhw
cm9qCTE2IEp1biAyMDA1IDIzOjAxOjQ0IC0wMDAwCkBAIC0yMTQsMzIgKzIxNCw2IEBACiAvLzJE
MgogLy8yRDMKIC8vMkQ0Ci0vLzM1MAotLy8zNTEKLS8vMzUyCi0vLzM1MwotLy8zNTQKLQkJMzU0
RjI0ODkwMkVFMjg1OTBBQ0EyQUNBID0gewotCQkJZmlsZUVuY29kaW5nID0gMzA7Ci0JCQlpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOwotCQkJbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsKLQkJCXBhdGggPSBLV1FET01Ob2RlLmg7Ci0JCQlyZWZUeXBlID0gNDsKLQkJCXNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7Ci0JCX07Ci0JCTM1NEYyNDhBMDJFRTI4NTkwQUNBMkFDQSA9IHsKLQkJ
CWZpbGVFbmNvZGluZyA9IDMwOwotCQkJaXNhID0gUEJYRmlsZVJlZmVyZW5jZTsKLQkJCWxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOwotCQkJcGF0aCA9IEtXUURPTU5vZGUu
Y3BwOwotCQkJcmVmVHlwZSA9IDQ7Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwotCQl9Owot
Ly8zNTAKLS8vMzUxCi0vLzM1MgotLy8zNTMKLS8vMzU0CiAvLzUxMAogLy81MTEKIC8vNTEyCkBA
IC0xODg1LDI0ICsxODU5LDYgQEAKIAkJCXNoZWxsUGF0aCA9IC9iaW4vc2g7CiAJCQlzaGVsbFNj
cmlwdCA9ICJcIiRDUkVBVEVfSEFTSF9UQUJMRVwiIGtodG1sL2VjbWEveG1sc2VyaWFsaXplci5j
cHAgPiBcIiRERVJJVkVEX0ZJTEVfRElSL3htbHNlcmlhbGl6ZXIubHV0LmhcIiI7CiAJCX07Ci0J
CTkzMkZDMUMwMDgyNEFCQjkwMDVCM0M3NSA9IHsKLQkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0
ODM2NDc7Ci0JCQlmaWxlcyA9ICgKLQkJCSk7Ci0JCQlpbnB1dFBhdGhzID0gKAotCQkJCWtodG1s
L21pc2MvbWFrZXRhZ3MsCi0JCQkJa2h0bWwvbWlzYy9odG1sdGFncy5pbiwKLQkJCSk7Ci0JCQlp
c2EgPSBQQlhTaGVsbFNjcmlwdEJ1aWxkUGhhc2U7Ci0JCQluYW1lID0gaHRtbHRhZ3MuYy9oOwot
CQkJb3V0cHV0UGF0aHMgPSAoCi0JCQkJIiQoREVSSVZFRF9GSUxFX0RJUikvaHRtbHRhZ3MuYyIs
Ci0JCQkJIiQoREVSSVZFRF9GSUxFX0RJUikvaHRtbHRhZ3MuaCIsCi0JCQkpOwotCQkJcnVuT25s
eUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7Ci0JCQlzaGVsbFBhdGggPSAvYmluL3No
OwotCQkJc2hlbGxTY3JpcHQgPSAiY2F0IGtodG1sL21pc2MvaHRtbHRhZ3MuaW4gPiBcIiRERVJJ
VkVEX0ZJTEVfRElSL2h0bWx0YWdzLmluXCJcbmNkIFwiJERFUklWRURfRklMRV9ESVJcIlxucGVy
bCBcIiRTUkNST09UL2todG1sL21pc2MvbWFrZXRhZ3NcIiI7Ci0JCX07CiAJCTkzMkZDMjk1MDgy
NEIzNDUwMDVCM0M3NSA9IHsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJCQlm
aWxlcyA9ICgKQEAgLTIzMjEsNyArMjI3Nyw2IEBACiAJCQkJOTMyRkMyQkMwODI0QjQyMjAwNUIz
Qzc1LAogCQkJCTkzMkZDMEI3MDgyNEExNzUwMDVCM0M3NSwKIAkJCQk5MzJGQzI5NTA4MjRCMzQ1
MDA1QjNDNzUsCi0JCQkJOTMyRkMxQzAwODI0QUJCOTAwNUIzQzc1LAogCQkJCTkzRUE2ODZDMDgy
NDlBRjQwMDY4N0Y1NiwKIAkJCQk5MzJGQzEwQjA4MjRBNEQ0MDA1QjNDNzUsCiAJCQkJOTMyRkMx
NjEwODI0QThFMzAwNUIzQzc1LApAQCAtMjUwNiw3ICsyNDYxLDYgQEAKIAkJCQk5M0YxOTkyRTA4
MjQ1RTU5MDAxRTlBQkMsCiAJCQkJOTNGMTk5MkYwODI0NUU1OTAwMUU5QUJDLAogCQkJCTkzRjE5
OTMwMDgyNDVFNTkwMDFFOUFCQywKLQkJCQk5M0YxOTkzMTA4MjQ1RTU5MDAxRTlBQkMsCiAJCQkJ
OTNGMTk5MzIwODI0NUU1OTAwMUU5QUJDLAogCQkJCTkzRjE5OTMzMDgyNDVFNTkwMDFFOUFCQywK
IAkJCQk5M0YxOTkzNDA4MjQ1RTU5MDAxRTlBQkMsCkBAIC0zNDQ0LDEyICszMzk4LDYgQEAKIAkJ
CXNldHRpbmdzID0gewogCQkJfTsKIAkJfTsKLQkJOTNGMTk5MzEwODI0NUU1OTAwMUU5QUJDID0g
ewotCQkJZmlsZVJlZiA9IDM1NEYyNDg5MDJFRTI4NTkwQUNBMkFDQTsKLQkJCWlzYSA9IFBCWEJ1
aWxkRmlsZTsKLQkJCXNldHRpbmdzID0gewotCQkJfTsKLQkJfTsKIAkJOTNGMTk5MzIwODI0NUU1
OTAwMUU5QUJDID0gewogCQkJZmlsZVJlZiA9IEY1ODc4Njg1MDJERTNCODYwMUVBNDEyMjsKIAkJ
CWlzYSA9IFBCWEJ1aWxkRmlsZTsKQEAgLTUwMDQsNyArNDk1Miw2IEBACiAJCQkJOTNGMTlBQzAw
ODI0NUU1OTAwMUU5QUJDLAogCQkJCTkzRjE5QUMxMDgyNDVFNTkwMDFFOUFCQywKIAkJCQk5M0Yx
OUFDMjA4MjQ1RTU5MDAxRTlBQkMsCi0JCQkJOTNGMTlBQzMwODI0NUU1OTAwMUU5QUJDLAogCQkJ
CTkzRjE5QUM0MDgyNDVFNTkwMDFFOUFCQywKIAkJCQk5M0YxOUFDNTA4MjQ1RTU5MDAxRTlBQkMs
CiAJCQkJOTNGMTlBQzYwODI0NUU1OTAwMUU5QUJDLApAQCAtNjA2OSwxMiArNjAxNiw2IEBACiAJ
CQlzZXR0aW5ncyA9IHsKIAkJCX07CiAJCX07Ci0JCTkzRjE5QUMzMDgyNDVFNTkwMDFFOUFCQyA9
IHsKLQkJCWZpbGVSZWYgPSAzNTRGMjQ4QTAyRUUyODU5MEFDQTJBQ0E7Ci0JCQlpc2EgPSBQQlhC
dWlsZEZpbGU7Ci0JCQlzZXR0aW5ncyA9IHsKLQkJCX07Ci0JCX07CiAJCTkzRjE5QUM0MDgyNDVF
NTkwMDFFOUFCQyA9IHsKIAkJCWZpbGVSZWYgPSBGNTExN0JDQTAyRjlGRkVGMDE4NjM1Q0U7CiAJ
CQlpc2EgPSBQQlhCdWlsZEZpbGU7CkBAIC03NDQ2LDggKzczODcsNiBAQAogCQkJCTJEOTA2NjBD
MDY2NUQ5MzcwMDZCNkYxQSwKIAkJCQlGNTg3ODRDRDAyREUzNzU5MDFFQTQxMjIsCiAJCQkJRjU4
Nzg0REEwMkRFMzc1OTAxRUE0MTIyLAotCQkJCTM1NEYyNDg5MDJFRTI4NTkwQUNBMkFDQSwKLQkJ
CQkzNTRGMjQ4QTAyRUUyODU5MEFDQTJBQ0EsCiAJCQkJOTMxQzhBMTYwMzgwMjg4QjAwODYzNUNF
LAogCQkJCTkzMUM4QTE3MDM4MDI4OEIwMDg2MzVDRSwKIAkJCQlCRUY3RUVBMDA1RkY4RjBEMDA5
NzE3RUUsCkluZGV4OiBraHRtbC9raHRtbHZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9XZWJDb3JlL2todG1sL2todG1sdmlldy5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuMTMzCmRpZmYgLXUgLXAgLXIxLjEzMyBraHRtbC9raHRtbHZpZXcuY3BwCi0tLSBraHRtbC9r
aHRtbHZpZXcuY3BwCTExIE1heSAyMDA1IDAwOjU4OjI3IC0wMDAwCTEuMTMzCisrKyBraHRtbC9r
aHRtbHZpZXcuY3BwCTE2IEp1biAyMDA1IDIzOjAxOjQ2IC0wMDAwCkBAIC02MDcsMTIgKzYwNywx
MiBAQCB2b2lkIEtIVE1MVmlldzo6bGF5b3V0KCkKICAgICBpZiAoZG9jdW1lbnQtPmlzSFRNTERv
Y3VtZW50KCkpIHsKICAgICAgICAgTm9kZUltcGwgKmJvZHkgPSBzdGF0aWNfY2FzdDxIVE1MRG9j
dW1lbnRJbXBsKj4oZG9jdW1lbnQpLT5ib2R5KCk7CiAgICAgICAgIGlmIChib2R5ICYmIGJvZHkt
PnJlbmRlcmVyKCkpIHsKLSAgICAgICAgICAgIGlmIChib2R5LT5pZCgpID09IElEX0ZSQU1FU0VU
KSB7CisgICAgICAgICAgICBpZiAoYm9keS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZyYW1lc2V0
KCkpKSB7CiAgICAgICAgICAgICAgICAgYm9keS0+cmVuZGVyZXIoKS0+c2V0TmVlZHNMYXlvdXQo
dHJ1ZSk7CiAgICAgICAgICAgICAgICAgdk1vZGUgPSBBbHdheXNPZmY7CiAgICAgICAgICAgICAg
ICAgaE1vZGUgPSBBbHdheXNPZmY7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlm
IChib2R5LT5pZCgpID09IElEX0JPRFkpIHsKKyAgICAgICAgICAgIGVsc2UgaWYgKGJvZHktPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjpib2R5KCkpKSB7CiAgICAgICAgICAgICAgICAgUmVuZGVyT2Jq
ZWN0KiBvID0gKHJvb3RSZW5kZXJlci0+c3R5bGUoKS0+b3ZlcmZsb3coKSA9PSBPVklTSUJMRSkg
PyBib2R5LT5yZW5kZXJlcigpIDogcm9vdFJlbmRlcmVyOwogICAgICAgICAgICAgICAgIGFwcGx5
T3ZlcmZsb3dUb1ZpZXdwb3J0KG8sIGhNb2RlLCB2TW9kZSk7IC8vIE9ubHkgYXBwbGllcyB0byBI
VE1MIFVBcywgbm90IHRvIFhNTC9YSFRNTCBVQXMKICAgICAgICAgICAgIH0KQEAgLTg3NywxMCAr
ODc3LDcgQEAgdm9pZCBLSFRNTFZpZXc6OnZpZXdwb3J0TW91c2VEb3VibGVDbGljawogCiBzdGF0
aWMgYm9vbCBpc1N1Ym1pdEltYWdlKERPTTo6Tm9kZUltcGwgKm5vZGUpCiB7Ci0gICAgcmV0dXJu
IG5vZGUKLSAgICAgICAgJiYgbm9kZS0+aXNIVE1MRWxlbWVudCgpCi0gICAgICAgICYmIG5vZGUt
PmlkKCkgPT0gSURfSU5QVVQKLSAgICAgICAgJiYgc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVu
dEltcGwqPihub2RlKS0+aW5wdXRUeXBlKCkgPT0gSFRNTElucHV0RWxlbWVudEltcGw6OklNQUdF
OworICAgIHJldHVybiBub2RlICYmIG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppbnB1dCgp
KSAmJiBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50SW1wbCo+KG5vZGUpLT5pbnB1dFR5cGUo
KSA9PSBIVE1MSW5wdXRFbGVtZW50SW1wbDo6SU1BR0U7CiB9CiAKIHZvaWQgS0hUTUxWaWV3Ojp2
aWV3cG9ydE1vdXNlTW92ZUV2ZW50KCBRTW91c2VFdmVudCAqIF9tb3VzZSApCkluZGV4OiBraHRt
bC9jc3MvY3NzX2Jhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3Jl
L2todG1sL2Nzcy9jc3NfYmFzZS5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTUKZGlmZiAt
dSAtcCAtcjEuMTUga2h0bWwvY3NzL2Nzc19iYXNlLmNwcAotLS0ga2h0bWwvY3NzL2Nzc19iYXNl
LmNwcAkxMiBKdW4gMjAwNSAwNDowNzozMCAtMDAwMAkxLjE1CisrKyBraHRtbC9jc3MvY3NzX2Jh
c2UuY3BwCTE2IEp1biAyMDA1IDIzOjAxOjQ2IC0wMDAwCkBAIC05Myw2ICs5MywxMiBAQCBTdHls
ZUxpc3RJbXBsOjp+U3R5bGVMaXN0SW1wbCgpCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CiAKK3N0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBhbnlUYWdOYW1lKCkKK3sKKyAgICBzdGF0
aWMgUXVhbGlmaWVkTmFtZSBhbnlOYW1lKG51bGxBdG9tLCBzdGFyQXRvbSwgc3RhckF0b20pOwor
ICAgIHJldHVybiBhbnlOYW1lOworfQorCiB2b2lkIENTU1NlbGVjdG9yOjpwcmludCh2b2lkKQog
ewogICAgIGtkRGVidWcoIDYwODAgKSA8PCAiW1NlbGVjdG9yOiB0YWcgPSAiIDw8ICAgICAgIHRh
ZyA8PCAiLCBhdHRyID0gXCIiIDw8IGF0dHIgPDwgIlwiLCBtYXRjaCA9IFwiIiA8PCBtYXRjaApJ
bmRleDoga2h0bWwvY3NzL2Nzc19iYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L1dlYkNvcmUva2h0bWwvY3NzL2Nzc19iYXNlLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTIK
ZGlmZiAtdSAtcCAtcjEuMTIga2h0bWwvY3NzL2Nzc19iYXNlLmgKLS0tIGtodG1sL2Nzcy9jc3Nf
YmFzZS5oCTEyIEp1biAyMDA1IDA0OjA3OjMwIC0wMDAwCTEuMTIKKysrIGtodG1sL2Nzcy9jc3Nf
YmFzZS5oCTE2IEp1biAyMDA1IDIzOjAxOjQ3IC0wMDAwCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5j
bHVkZSAiZG9tL2RvbV9zdHJpbmcuaCIKICNpbmNsdWRlICJkb20vZG9tX21pc2MuaCIKICNpbmNs
dWRlICJ4bWwvZG9tX25vZGVpbXBsLmgiCisjaW5jbHVkZSAiZG9tX3FuYW1lLmgiCiAjaW5jbHVk
ZSAibWlzYy9zaGFyZWQuaCIKICNpbmNsdWRlIDxxZGF0ZXRpbWUuaD4KICNpbmNsdWRlIDxxcHRy
bGlzdC5oPgpAQCAtNzMsNyArNzQsNyBAQCBuYW1lc3BhY2UgRE9NIHsKICAgICB7CiAgICAgcHVi
bGljOgogCUNTU1NlbGVjdG9yKCkKLQkgICAgOiB0YWdIaXN0b3J5KDApLCBzaW1wbGVTZWxlY3Rv
cigwKSwgbmV4dFNlbGVjdG9yKDApLCBhdHRyKDApLCB0YWcoYW55UU5hbWUpLAorCSAgICA6IHRh
Z0hpc3RvcnkoMCksIHNpbXBsZVNlbGVjdG9yKDApLCBuZXh0U2VsZWN0b3IoMCksIGF0dHIoMCks
IHRhZyhhbnlUYWdOYW1lKCkpLAogICAgICAgICAgICAgICByZWxhdGlvbiggRGVzY2VuZGFudCAp
LCBtYXRjaCggTm9uZSApLAogICAgICAgICAgICAgICBwc2V1ZG9JZCggMCApLCBfcHNldWRvVHlw
ZShQc2V1ZG9Ob3RQYXJzZWQpCiAgICAgICAgIHt9CkBAIC0xNjcsMTIgKzE2OCwxNyBAQCBuYW1l
c3BhY2UgRE9NIHsKICAgICAgICAgICAgIHJldHVybiBfcHNldWRvVHlwZTsKICAgICAgICAgfQog
CisgICAgICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBhbnlUYWdOYW1lKCk7CisKKyAg
ICAgICAgYm9vbCBoYXNUYWcoKSBjb25zdCB7IHJldHVybiB0YWcgIT0gYW55VGFnTmFtZSgpOyB9
CisKIAltdXRhYmxlIERPTTo6QXRvbWljU3RyaW5nIHZhbHVlOwogCUNTU1NlbGVjdG9yKiB0YWdI
aXN0b3J5OwogICAgICAgICBDU1NTZWxlY3Rvciogc2ltcGxlU2VsZWN0b3I7IC8vIFVzZWQgZm9y
IDpub3QuCiAgICAgICAgIENTU1NlbGVjdG9yKiBuZXh0U2VsZWN0b3I7IC8vIHVzZWQgZm9yICwt
Y2hhaW5lZCBzZWxlY3RvcnMKIAlRX1VJTlQzMiAgICAgYXR0cjsKLQlRX1VJTlQzMiAgICAgdGFn
OworCQorICAgICAgICBRdWFsaWZpZWROYW1lIHRhZzsKIAogICAgICAgICBSZWxhdGlvbiByZWxh
dGlvbiAgICAgICAgICAgICAgOiAzOwogCW11dGFibGUgTWF0Y2ggIG1hdGNoICAgICAgICAgICA6
IDQ7CkluZGV4OiBraHRtbC9jc3MvY3NzX3J1bGVpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9jc3MvY3NzX3J1bGVpbXBsLmNwcCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS4xOApkaWZmIC11IC1wIC1yMS4xOCBraHRtbC9jc3MvY3NzX3J1bGVpbXBs
LmNwcAotLS0ga2h0bWwvY3NzL2Nzc19ydWxlaW1wbC5jcHAJMTEgTWF5IDIwMDUgMDU6NDk6MzQg
LTAwMDAJMS4xOAorKysga2h0bWwvY3NzL2Nzc19ydWxlaW1wbC5jcHAJMTYgSnVuIDIwMDUgMjM6
MDE6NDcgLTAwMDAKQEAgLTMxLDcgKzMxLDYgQEAKICNpbmNsdWRlICJjc3MvY3NzX3J1bGVpbXBs
LmgiCiAKICNpbmNsdWRlICJtaXNjL2xvYWRlci5oIgotI2luY2x1ZGUgIm1pc2MvaHRtbHRhZ3Mu
aCIKICNpbmNsdWRlICJtaXNjL2h0bWxhdHRycy5oIgogI2luY2x1ZGUgInhtbC9kb21fZG9jaW1w
bC5oIgogCkluZGV4OiBraHRtbC9jc3MvY3Nzc3R5bGVzZWxlY3Rvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvY3NzL2Nzc3N0eWxlc2VsZWN0b3IuY3Bw
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE4NwpkaWZmIC11IC1wIC1yMS4xODcga2h0bWwvY3Nz
L2Nzc3N0eWxlc2VsZWN0b3IuY3BwCi0tLSBraHRtbC9jc3MvY3Nzc3R5bGVzZWxlY3Rvci5jcHAJ
MTIgSnVuIDIwMDUgMDQ6MDc6MzAgLTAwMDAJMS4xODcKKysrIGtodG1sL2Nzcy9jc3NzdHlsZXNl
bGVjdG9yLmNwcAkxNiBKdW4gMjAwNSAyMzowMTo1MyAtMDAwMApAQCAtMzM5LDcgKzMzOSw3IEBA
IHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hSdWxlcyhDU1NSdWwKICAgICAgICAgICAgIG1h
dGNoUnVsZXNGb3JMaXN0KHJ1bGVzLT5nZXRDbGFzc1J1bGVzKHNpbmdsZUNsYXNzLT5zdHJpbmco
KS5pbXBsZW1lbnRhdGlvbigpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4KTsKICAgICB9Ci0g
ICAgbWF0Y2hSdWxlc0Zvckxpc3QocnVsZXMtPmdldFRhZ1J1bGVzKCh2b2lkKikoaW50KWxvY2Fs
TmFtZVBhcnQoZWxlbWVudC0+aWQoKSkpLAorICAgIG1hdGNoUnVsZXNGb3JMaXN0KHJ1bGVzLT5n
ZXRUYWdSdWxlcyhlbGVtZW50LT5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpKSwKICAgICAg
ICAgICAgICAgICAgICAgICBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCk7CiAgICAgbWF0
Y2hSdWxlc0Zvckxpc3QocnVsZXMtPmdldFVuaXZlcnNhbFJ1bGVzKCksIGZpcnN0UnVsZUluZGV4
LCBsYXN0UnVsZUluZGV4KTsKICAgICAKQEAgLTM2MCw5ICszNjAsOSBAQCB2b2lkIENTU1N0eWxl
U2VsZWN0b3I6Om1hdGNoUnVsZXNGb3JMaXN0CiAgICAgaWYgKCFydWxlcykgcmV0dXJuOwogICAg
IGZvciAoQ1NTUnVsZURhdGEqIGQgPSBydWxlcy0+Zmlyc3QoKTsgZDsgZCA9IGQtPm5leHQoKSkg
ewogICAgICAgICBDU1NTdHlsZVJ1bGVJbXBsKiBydWxlID0gZC0+cnVsZSgpOwotICAgICAgICBR
X1VJTlQxNiBjc3NUYWdJZCA9IGxvY2FsTmFtZVBhcnQoZWxlbWVudC0+aWQoKSk7Ci0gICAgICAg
IFFfVUlOVDE2IHRhZyA9IGxvY2FsTmFtZVBhcnQoZC0+c2VsZWN0b3IoKS0+dGFnKTsKLSAgICAg
ICAgaWYgKChjc3NUYWdJZCA9PSB0YWcgfHwgdGFnID09IGFueUxvY2FsTmFtZSkgJiYgY2hlY2tT
ZWxlY3RvcihkLT5zZWxlY3RvcigpLCBlbGVtZW50KSkgeworICAgICAgICBjb25zdCBBdG9taWNT
dHJpbmcmIGxvY2FsTmFtZSA9IGVsZW1lbnQtPmxvY2FsTmFtZSgpOworICAgICAgICBjb25zdCBB
dG9taWNTdHJpbmcmIHNlbGVjdG9yTG9jYWxOYW1lID0gZC0+c2VsZWN0b3IoKS0+dGFnLmxvY2Fs
TmFtZSgpOworICAgICAgICBpZiAoKGxvY2FsTmFtZSA9PSBzZWxlY3RvckxvY2FsTmFtZSB8fCBz
ZWxlY3RvckxvY2FsTmFtZSA9PSBzdGFyQXRvbSkgJiYgY2hlY2tTZWxlY3RvcihkLT5zZWxlY3Rv
cigpLCBlbGVtZW50KSkgewogICAgICAgICAgICAgLy8gSWYgdGhlIHJ1bGUgaGFzIG5vIHByb3Bl
cnRpZXMgdG8gYXBwbHksIHRoZW4gaWdub3JlIGl0LgogICAgICAgICAgICAgQ1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb25JbXBsKiBkZWNsID0gcnVsZS0+ZGVjbGFyYXRpb24oKTsKICAgICAgICAg
ICAgIGlmICghZGVjbCB8fCAhZGVjbC0+bGVuZ3RoKCkpIGNvbnRpbnVlOwpAQCAtNjA5LDcgKzYw
OSw3IEBAIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6Y2FuU2hhcmVTdHlsZVdpdGgKICAgICBpZiAo
bi0+aXNTdHlsZWRFbGVtZW50KCkpIHsKICAgICAgICAgYm9vbCBtb3VzZUluc2lkZSA9IGVsZW1l
bnQtPnJlbmRlcmVyKCkgPyBlbGVtZW50LT5yZW5kZXJlcigpLT5tb3VzZUluc2lkZSgpIDogZmFs
c2U7CiAgICAgICAgIFN0eWxlZEVsZW1lbnRJbXBsKiBzID0gc3RhdGljX2Nhc3Q8U3R5bGVkRWxl
bWVudEltcGwqPihuKTsKLSAgICAgICAgaWYgKHMtPnJlbmRlcmVyKCkgJiYgKHMtPmlkKCkgPT0g
ZWxlbWVudC0+aWQoKSkgJiYgIXMtPmhhc0lEKCkgJiYKKyAgICAgICAgaWYgKHMtPnJlbmRlcmVy
KCkgJiYgKHMtPnRhZ05hbWUoKSA9PSBlbGVtZW50LT50YWdOYW1lKCkpICYmICFzLT5oYXNJRCgp
ICYmCiAgICAgICAgICAgICAocy0+aGFzQ2xhc3MoKSA9PSBlbGVtZW50LT5oYXNDbGFzcygpKSAm
JiAhcy0+aW5saW5lU3R5bGVEZWNsKCkgJiYKICAgICAgICAgICAgIChzLT5oYXNNYXBwZWRBdHRy
aWJ1dGVzKCkgPT0gc3R5bGVkRWxlbWVudC0+aGFzTWFwcGVkQXR0cmlidXRlcygpKSAmJgogICAg
ICAgICAgICAgKHMtPmlzTGluaygpID09IGVsZW1lbnQtPmlzTGluaygpKSAmJiAKQEAgLTg4NSwy
MyArODg1LDIzIEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YWRqdXN0UmVuZGVyU3R5bGUKICAg
ICAgICAgLy8gU2l0ZXMgYWxzbyBjb21tb25seSB1c2UgZGlzcGxheTppbmxpbmUvYmxvY2sgb24g
PHRkPnMgYW5kIDx0YWJsZT5zLiAgSW4gcXVpcmtzIG1vZGUgd2UgZm9yY2UKICAgICAgICAgLy8g
dGhlc2UgdGFncyB0byByZXRhaW4gdGhlaXIgZGlzcGxheSB0eXBlcy4KICAgICAgICAgaWYgKCFz
dHJpY3RQYXJzaW5nICYmIGUpIHsKLSAgICAgICAgICAgIGlmIChlLT5pZCgpID09IElEX1REKSB7
CisgICAgICAgICAgICBpZiAoZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRkKCkpKSB7CiAgICAg
ICAgICAgICAgICAgc3R5bGUtPnNldERpc3BsYXkoVEFCTEVfQ0VMTCk7CiAgICAgICAgICAgICAg
ICAgc3R5bGUtPnNldEZsb2F0aW5nKEZOT05FKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGVsc2UgaWYgKGUtPmlkKCkgPT0gSURfVEFCTEUpCisgICAgICAgICAgICBlbHNlIGlmIChlLT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6dGFibGUoKSkpCiAgICAgICAgICAgICAgICAgc3R5bGUtPnNl
dERpc3BsYXkoc3R5bGUtPmlzRGlzcGxheUlubGluZVR5cGUoKSA/IElOTElORV9UQUJMRSA6IFRB
QkxFKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIEZyYW1lcyBhbmQgZnJhbWVzZXRzIG5ldmVy
IGhvbm9yIHBvc2l0aW9uOnJlbGF0aXZlIG9yIHBvc2l0aW9uOmFic29sdXRlLiAgVGhpcyBpcyBu
ZWNlc3NhcnkgdG8KICAgICAgICAgLy8gZml4IGEgY3Jhc2ggd2hlcmUgYSBzaXRlIHRyaWVzIHRv
IHBvc2l0aW9uIHRoZXNlIG9iamVjdHMuICBUaGV5IGFsc28gbmV2ZXIgaG9ub3IgZGlzcGxheS4K
LSAgICAgICAgaWYgKGUgJiYgKGUtPmlkKCkgPT0gSURfRlJBTUUgfHwgZS0+aWQoKSA9PSBJRF9G
UkFNRVNFVCkpIHsKKyAgICAgICAgaWYgKGUgJiYgKGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpm
cmFtZSgpKSB8fCBlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZnJhbWVzZXQoKSkpKSB7CiAgICAg
ICAgICAgICBzdHlsZS0+c2V0UG9zaXRpb24oU1RBVElDKTsKICAgICAgICAgICAgIHN0eWxlLT5z
ZXREaXNwbGF5KEJMT0NLKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIFRhYmxlIGhlYWRlcnMg
d2l0aCBhIHRleHQtYWxpZ24gb2YgYXV0byB3aWxsIGNoYW5nZSB0aGUgdGV4dC1hbGlnbiB0byBj
ZW50ZXIuCi0gICAgICAgIGlmIChlICYmIGUtPmlkKCkgPT0gSURfVEggJiYgc3R5bGUtPnRleHRB
bGlnbigpID09IFRBQVVUTykKKyAgICAgICAgaWYgKGUgJiYgZS0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OnRoKCkpICYmIHN0eWxlLT50ZXh0QWxpZ24oKSA9PSBUQUFVVE8pCiAgICAgICAgICAgICBz
dHlsZS0+c2V0VGV4dEFsaWduKENFTlRFUik7CiAgICAgICAgIAogICAgICAgICAvLyBNdXRhdGUg
dGhlIGRpc3BsYXkgdG8gQkxPQ0sgb3IgVEFCTEUgZm9yIGNlcnRhaW4gY2FzZXMsIGUuZy4sIGlm
IHNvbWVvbmUgYXR0ZW1wdHMgdG8KQEAgLTk3OSw3ICs5NzksNyBAQCBib29sIENTU1N0eWxlU2Vs
ZWN0b3I6OmNoZWNrU2VsZWN0b3IoQ1NTCiAgICAgLy8gV2UgdHJhY2sgd2hldGhlciBvciBub3Qg
dGhlIHJ1bGUgY29udGFpbnMgb25seSA6aG92ZXIgYW5kIDphY3RpdmUgaW4gYSBzaW1wbGUgc2Vs
ZWN0b3IuIElmCiAgICAgLy8gc28sIHdlIGNhbid0IGFsbG93IHRoYXQgdG8gYXBwbHkgdG8gZXZl
cnkgZWxlbWVudCBvbiB0aGUgcGFnZS4gIFdlIGFzc3VtZSB0aGUgYXV0aG9yIGludGVuZGVkCiAg
ICAgLy8gdG8gYXBwbHkgdGhlIHJ1bGVzIG9ubHkgdG8gbGlua3MuCi0gICAgYm9vbCBvbmx5SG92
ZXJBY3RpdmUgPSAoc2VsLT50YWcgPT0gYW55UU5hbWUgJiYKKyAgICBib29sIG9ubHlIb3ZlckFj
dGl2ZSA9ICghc2VsLT5oYXNUYWcoKSAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIChz
ZWwtPm1hdGNoID09IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzcyAmJgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKHNlbC0+cHNldWRvVHlwZSgpID09IENTU1NlbGVjdG9yOjpQc2V1ZG9I
b3ZlciB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbC0+cHNldWRvVHlwZSgp
ID09IENTU1NlbGVjdG9yOjpQc2V1ZG9BY3RpdmUpKSk7CkBAIC0xMDk2LDE5ICsxMDk2LDE0IEBA
IGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6Y2hlY2tPbmVTZWxlY3RvcigKICAgICBpZighZSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKHNlbC0+dGFnICE9IGFueVFOYW1lKSB7Ci0g
ICAgICAgIGludCBlbHRJRCA9IGUtPmlkKCk7Ci0gICAgICAgIFFfVUlOVDE2IGxvY2FsTmFtZSA9
IGxvY2FsTmFtZVBhcnQoZWx0SUQpOwotICAgICAgICBRX1VJTlQxNiBucyA9IG5hbWVzcGFjZVBh
cnQoZWx0SUQpOwotICAgICAgICBRX1VJTlQxNiBzZWxMb2NhbE5hbWUgPSBsb2NhbE5hbWVQYXJ0
KHNlbC0+dGFnKTsKLSAgICAgICAgUV9VSU5UMTYgc2VsTlMgPSBuYW1lc3BhY2VQYXJ0KHNlbC0+
dGFnKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChsb2NhbE5hbWUgPD0gSURfTEFTVF9UQUcgJiYg
ZS0+aXNIVE1MRWxlbWVudCgpKQotICAgICAgICAgICAgbnMgPSB4aHRtbE5hbWVzcGFjZTsgLy8g
RklYTUU6IFJlYWxseSB3YW50IHRvIG1vdmUgYXdheSBmcm9tIHRoaXMgY29tcGxpY2F0ZWQgaGFj
a2VyeSBhbmQganVzdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3dpdGNo
IHRhZ3MgYW5kIGF0dHIgbmFtZXMgb3ZlciB0byBBdG9taWNTdHJpbmdzLgotICAgICAgICAKLSAg
ICAgICAgaWYgKChzZWxMb2NhbE5hbWUgIT0gYW55TG9jYWxOYW1lICYmIGxvY2FsTmFtZSAhPSBz
ZWxMb2NhbE5hbWUpIHx8Ci0gICAgICAgICAgICAoc2VsTlMgIT0gYW55TmFtZXNwYWNlICYmIG5z
ICE9IHNlbE5TKSkKKyAgICBpZiAoc2VsLT5oYXNUYWcoKSkgeworICAgICAgICBjb25zdCBBdG9t
aWNTdHJpbmcmIGxvY2FsTmFtZSA9IGUtPmxvY2FsTmFtZSgpOworICAgICAgICBjb25zdCBBdG9t
aWNTdHJpbmcmIG5zID0gZS0+bmFtZXNwYWNlVVJJKCk7CisgICAgICAgIGNvbnN0IEF0b21pY1N0
cmluZyYgc2VsTG9jYWxOYW1lID0gc2VsLT50YWcubG9jYWxOYW1lKCk7CisgICAgICAgIGNvbnN0
IEF0b21pY1N0cmluZyYgc2VsTlMgPSBzZWwtPnRhZy5uYW1lc3BhY2VVUkkoKTsKKyAgICAKKyAg
ICAgICAgaWYgKChzZWxMb2NhbE5hbWUgIT0gc3RhckF0b20gJiYgbG9jYWxOYW1lICE9IHNlbExv
Y2FsTmFtZSkgfHwKKyAgICAgICAgICAgIChzZWxOUyAhPSBzdGFyQXRvbSAmJiBucyAhPSBzZWxO
UykpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC0xMjk1LDcgKzEyOTAs
NyBAQCBib29sIENTU1N0eWxlU2VsZWN0b3I6OmNoZWNrT25lU2VsZWN0b3IoCiAgICAgICAgICAg
ICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9Ib3ZlcjogewogICAgICAgICAgICAgICAgIC8vIElm
IHdlJ3JlIGluIHF1aXJrcyBtb2RlLCB0aGVuIGhvdmVyIHNob3VsZCBuZXZlciBtYXRjaCBhbmNo
b3JzIHdpdGggbm8KICAgICAgICAgICAgICAgICAvLyBocmVmLiAgVGhpcyBpcyBpbXBvcnRhbnQg
Zm9yIHNpdGVzIGxpa2Ugd3NqLmNvbS4KLSAgICAgICAgICAgICAgICBpZiAoc3RyaWN0UGFyc2lu
ZyB8fCBlLT5pZCgpICE9IElEX0EgfHwgZS0+aXNMaW5rKCkpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoc3RyaWN0UGFyc2luZyB8fCAhZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmEoKSkgfHwgZS0+
aXNMaW5rKCkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQgPT0gZSAmJiBzdHls
ZSkKICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlLT5zZXRBZmZlY3RlZEJ5SG92ZXJSdWxl
cyh0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGUtPnJlbmRlcmVyKCkpIHsKQEAgLTEz
MjYsNyArMTMyMSw3IEBAIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6Y2hlY2tPbmVTZWxlY3RvcigK
ICAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0FjdGl2ZToKICAgICAgICAgICAg
ICAgICAvLyBJZiB3ZSdyZSBpbiBxdWlya3MgbW9kZSwgdGhlbiA6YWN0aXZlIHNob3VsZCBuZXZl
ciBtYXRjaCBhbmNob3JzIHdpdGggbm8KICAgICAgICAgICAgICAgICAvLyBocmVmLiAKLSAgICAg
ICAgICAgICAgICBpZiAoc3RyaWN0UGFyc2luZyB8fCBlLT5pZCgpICE9IElEX0EgfHwgZS0+aXNM
aW5rKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoc3RyaWN0UGFyc2luZyB8fCAhZS0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OmEoKSkgfHwgZS0+aXNMaW5rKCkpIHsKICAgICAgICAgICAgICAgICAg
ICAgaWYgKGVsZW1lbnQgPT0gZSAmJiBzdHlsZSkKICAgICAgICAgICAgICAgICAgICAgICAgIHN0
eWxlLT5zZXRBZmZlY3RlZEJ5QWN0aXZlUnVsZXModHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAg
IGVsc2UgaWYgKGUtPnJlbmRlcmVyKCkpCkBAIC0xNDI1LDkgKzE0MjAsOSBAQCB2b2lkIENTU1J1
bGVTZXQ6OmFkZFJ1bGUoQ1NTU3R5bGVSdWxlSW1wCiAgICAgICAgIHJldHVybjsKICAgICB9CiAg
ICAgIAotICAgIFFfVUlOVDE2IGxvY2FsTmFtZSA9IGxvY2FsTmFtZVBhcnQoc2VsLT50YWcpOwot
ICAgIGlmIChsb2NhbE5hbWUgIT0gYW55TG9jYWxOYW1lKSB7Ci0gICAgICAgIGFkZFRvUnVsZVNl
dCgodm9pZCopKGludClsb2NhbE5hbWUsIG1fdGFnUnVsZXMsIHJ1bGUsIHNlbCk7CisgICAgY29u
c3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUgPSBzZWwtPnRhZy5sb2NhbE5hbWUoKTsKKyAgICBp
ZiAobG9jYWxOYW1lICE9IHN0YXJBdG9tKSB7CisgICAgICAgIGFkZFRvUnVsZVNldChsb2NhbE5h
bWUuaW1wbGVtZW50YXRpb24oKSwgbV90YWdSdWxlcywgcnVsZSwgc2VsKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICAKSW5kZXg6IGtodG1sL2RvbS9jc3Nfc3R5bGVzaGVldC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZG9tL2Nzc19zdHlsZXNo
ZWV0LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS44CmRpZmYgLXUgLXAgLXIxLjgga2h0bWwv
ZG9tL2Nzc19zdHlsZXNoZWV0LmNwcAotLS0ga2h0bWwvZG9tL2Nzc19zdHlsZXNoZWV0LmNwcAky
MCBNYXkgMjAwNCAxNTowOTozMiAtMDAwMAkxLjgKKysrIGtodG1sL2RvbS9jc3Nfc3R5bGVzaGVl
dC5jcHAJMTYgSnVuIDIwMDUgMjM6MDE6NTMgLTAwMDAKQEAgLTM4NSw3ICszODUsNyBAQCBMaW5r
U3R5bGUgJiBMaW5rU3R5bGU6Om9wZXJhdG9yID0gKGNvbnN0CiAKICAgICAvLyAjIyMgY2hlY2sg
bGluayBpcyByZWFsbHkgbGlua2luZyBhIHN0eWxlIHNoZWV0CiAgICAgaWYoIG4gJiYgbi0+aXNF
bGVtZW50Tm9kZSgpICYmCi0JKG4tPmlkKCkgPT0gSURfU1RZTEUgfHwgbi0+aWQoKSA9PSBJRF9M
SU5LKSApIHsKKwkobi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnN0eWxlKCkpIHx8IG4tPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjpsaW5rKCkpKSkgewogICAgIG5vZGUgPSBuOwogICAgIGlmKG5vZGUp
IG5vZGUtPnJlZigpOwogICAgIH0KQEAgLTM5OSwxMiArMzk5LDE0IEBAIExpbmtTdHlsZTo6fkxp
bmtTdHlsZSgpCiAKIFN0eWxlU2hlZXQgTGlua1N0eWxlOjpzaGVldCgpCiB7Ci0gICAgaW50IGlk
ID0gbm9kZSA/IG5vZGUtPmlkKCkgOiAwOworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJu
IFN0eWxlU2hlZXQoKTsKKwogICAgIC8vICMjIyBhZGQgUEkKICAgICByZXR1cm4gCi0JKCBpZCA9
PSBJRF9TVFlMRSkgPworCShub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c3R5bGUoKSkpID8K
IAlzdGF0aWNfY2FzdDxIVE1MU3R5bGVFbGVtZW50SW1wbCAqPihub2RlKS0+c2hlZXQoKQotCTog
KCAoaWQgPT0gSURfTElOSykgPworCTogKCBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6bGlu
aygpKSA/CiAJICAgIHN0YXRpY19jYXN0PEhUTUxMaW5rRWxlbWVudEltcGwgKj4obm9kZSktPnNo
ZWV0KCkKIAkgICAgOiBTdHlsZVNoZWV0KCkgKTsKIH0KSW5kZXg6IGtodG1sL2RvbS9kb21fZWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZG9t
L2RvbV9lbGVtZW50LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMgpkaWZmIC11IC1wIC1y
MS4xMiBraHRtbC9kb20vZG9tX2VsZW1lbnQuY3BwCi0tLSBraHRtbC9kb20vZG9tX2VsZW1lbnQu
Y3BwCTEyIE1heSAyMDA1IDE3OjExOjIxIC0wMDAwCTEuMTIKKysrIGtodG1sL2RvbS9kb21fZWxl
bWVudC5jcHAJMTYgSnVuIDIwMDUgMjM6MDE6NTMgLTAwMDAKQEAgLTE0MSw3ICsxNDEsNyBAQCBF
bGVtZW50Ojp+RWxlbWVudCgpCiBET01TdHJpbmcgRWxlbWVudDo6dGFnTmFtZSgpIGNvbnN0CiB7
CiAgICAgaWYgKCFpbXBsKSB0aHJvdyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uOjpOT1RfRk9V
TkRfRVJSKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RWxlbWVudEltcGwqPihpbXBsKS0+dGFn
TmFtZSgpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxFbGVtZW50SW1wbCo+KGltcGwpLT5ub2Rl
TmFtZSgpOwogfQogCiBET01TdHJpbmcgRWxlbWVudDo6Z2V0QXR0cmlidXRlKCBjb25zdCBET01T
dHJpbmcgJm5hbWUgKQpJbmRleDoga2h0bWwvZG9tL2RvbV9ub2RlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9kb20vZG9tX25vZGUuY3BwLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjEyCmRpZmYgLXUgLXAgLXIxLjEyIGtodG1sL2RvbS9kb21fbm9kZS5j
cHAKLS0tIGtodG1sL2RvbS9kb21fbm9kZS5jcHAJMTEgTWF5IDIwMDUgMDA6NTg6MjggLTAwMDAJ
MS4xMgorKysga2h0bWwvZG9tL2RvbV9ub2RlLmNwcAkxNiBKdW4gMjAwNSAyMzowMTo1MyAtMDAw
MApAQCAtMzI0LDcgKzMyNCw3IEBAIGJvb2wgTm9kZTo6aXNTdXBwb3J0ZWQoIGNvbnN0IERPTVN0
cmluZyAKIERPTVN0cmluZyBOb2RlOjpuYW1lc3BhY2VVUkkoICApIGNvbnN0CiB7CiAgICAgaWYg
KCFpbXBsKSByZXR1cm4gRE9NU3RyaW5nKCk7Ci0gICAgcmV0dXJuIGltcGwtPmdldERvY3VtZW50
KCktPm5hbWVzcGFjZVVSSShpbXBsLT5pZCgpKTsKKyAgICByZXR1cm4gaW1wbC0+bmFtZXNwYWNl
VVJJKCk7CiB9CiAKIERPTVN0cmluZyBOb2RlOjpwcmVmaXgoICApIGNvbnN0CkBAIC0zMzcsNyAr
MzM3LDcgQEAgdm9pZCBOb2RlOjpzZXRQcmVmaXgoY29uc3QgRE9NU3RyaW5nICZwcgogewogICAg
IGlmICghaW1wbCkgdGhyb3cgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbjo6Tk9UX0ZPVU5EX0VS
Uik7CiAgICAgaW50IGV4Y2VwdGlvbmNvZGUgPSAwOwotICAgIGltcGwtPnNldFByZWZpeChwcmVm
aXgsZXhjZXB0aW9uY29kZSk7CisgICAgaW1wbC0+c2V0UHJlZml4KHByZWZpeC5pbXBsZW1lbnRh
dGlvbigpLGV4Y2VwdGlvbmNvZGUpOwogICAgIGlmIChleGNlcHRpb25jb2RlKQogICAgICAgICB0
aHJvdyBET01FeGNlcHRpb24oZXhjZXB0aW9uY29kZSk7CiB9CkBAIC0zNzYsMTMgKzM3Niw2IEBA
IGJvb2wgTm9kZTo6ZGlzcGF0Y2hFdmVudChjb25zdCBFdmVudCAmZXYKICAgICByZXR1cm4gcjsK
IH0KIAotCi11bnNpZ25lZCBpbnQgTm9kZTo6ZWxlbWVudElkKCkgY29uc3QKLXsKLSAgICBpZiAo
IWltcGwpIHJldHVybiAwOwotICAgIHJldHVybiBpbXBsLT5pZCgpOwotfQotCiB1bnNpZ25lZCBs
b25nIE5vZGU6OmluZGV4KCkgY29uc3QKIHsKICAgICBpZiAoIWltcGwpIHJldHVybiAwOwpJbmRl
eDoga2h0bWwvZG9tL2RvbV9ub2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dl
YkNvcmUva2h0bWwvZG9tL2RvbV9ub2RlLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTIKZGlm
ZiAtdSAtcCAtcjEuMTIga2h0bWwvZG9tL2RvbV9ub2RlLmgKLS0tIGtodG1sL2RvbS9kb21fbm9k
ZS5oCTE4IE1heSAyMDA1IDIxOjEwOjI0IC0wMDAwCTEuMTIKKysrIGtodG1sL2RvbS9kb21fbm9k
ZS5oCTE2IEp1biAyMDA1IDIzOjAxOjU0IC0wMDAwCkBAIC04NTUsMTMgKzg1NSw2IEBAIHB1Ymxp
YzoKICAgICBib29sIGRpc3BhdGNoRXZlbnQoY29uc3QgRXZlbnQgJmV2dCk7CiAKICAgICAvKioK
LSAgICAgKiBAaW50ZXJuYWwKLSAgICAgKiBub3QgcGFydCBvZiB0aGUgRE9NLgotICAgICAqIEBy
ZXR1cm5zIHRoZSBlbGVtZW50IGlkLCBpbiBjYXNlIHRoaXMgaXMgYW4gZWxlbWVudCwgMCBvdGhl
cndpc2UKLSAgICAgKi8KLSAgICBRX1VJTlQzMiBlbGVtZW50SWQoKSBjb25zdDsKLQotICAgIC8q
KgogICAgICAqIHRlc3RzIGlmIHRoaXMgTm9kZSBpcyAwLiBVc2VmdWwgZXNwZWNpYWxseSwgaWYg
Y2FzdGluZyB0byBhIGRlcml2ZWQKICAgICAgKiBjbGFzczoKICAgICAgKgpJbmRleDoga2h0bWwv
ZG9tL2h0bWxfYmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUv
a2h0bWwvZG9tL2h0bWxfYmFzZS5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNgpkaWZmIC11
IC1wIC1yMS42IGtodG1sL2RvbS9odG1sX2Jhc2UuY3BwCi0tLSBraHRtbC9kb20vaHRtbF9iYXNl
LmNwcAkzIE5vdiAyMDAzIDA2OjMyOjA0IC0wMDAwCTEuNgorKysga2h0bWwvZG9tL2h0bWxfYmFz
ZS5jcHAJMTYgSnVuIDIwMDUgMjM6MDE6NTQgLTAwMDAKQEAgLTQxLDcgKzQxLDcgQEAgSFRNTEJv
ZHlFbGVtZW50OjpIVE1MQm9keUVsZW1lbnQoSFRNTEJvZAogCiBIVE1MQm9keUVsZW1lbnQgJkhU
TUxCb2R5RWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNz
aWduT3RoZXIoIG90aGVyLCBJRF9CT0RZICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1M
TmFtZXM6OmJvZHkoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtMTM1LDcgKzEzNSw3
IEBAIEhUTUxGcmFtZUVsZW1lbnQ6OkhUTUxGcmFtZUVsZW1lbnQoSFRNTEYKIAogSFRNTEZyYW1l
RWxlbWVudCAmSFRNTEZyYW1lRWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIp
CiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9GUkFNRSApOworICAgIGFzc2lnbk90aGVy
KCBvdGhlciwgSFRNTE5hbWVzOjpmcmFtZSgpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBA
IC0yNjUsNyArMjY1LDcgQEAgSFRNTElGcmFtZUVsZW1lbnQ6OkhUTUxJRnJhbWVFbGVtZW50KEhU
TQogCiBIVE1MSUZyYW1lRWxlbWVudCAmSFRNTElGcmFtZUVsZW1lbnQ6Om9wZXJhdG9yID0gKGNv
bnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfSUZSQU1FICk7
CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OmlmcmFtZSgpICk7CiAgICAgcmV0
dXJuICp0aGlzOwogfQogCkBAIC00MTQsNyArNDE0LDcgQEAgSFRNTEZyYW1lU2V0RWxlbWVudDo6
SFRNTEZyYW1lU2V0RWxlbWVudAogCiBIVE1MRnJhbWVTZXRFbGVtZW50ICZIVE1MRnJhbWVTZXRF
bGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhl
ciggb3RoZXIsIElEX0ZSQU1FU0VUICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFt
ZXM6OmZyYW1lc2V0KCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTQ2Niw3ICs0NjYs
NyBAQCBIVE1MSGVhZEVsZW1lbnQ6OkhUTUxIZWFkRWxlbWVudChIVE1MSGVhCiAKIEhUTUxIZWFk
RWxlbWVudCAmSFRNTEhlYWRFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikK
IHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0hFQUQgKTsKKyAgICBhc3NpZ25PdGhlcigg
b3RoZXIsIEhUTUxOYW1lczo6aGVhZCgpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC01
MDcsNyArNTA3LDcgQEAgSFRNTEh0bWxFbGVtZW50OjpIVE1MSHRtbEVsZW1lbnQoSFRNTEh0bQog
CiBIVE1MSHRtbEVsZW1lbnQgJkhUTUxIdG1sRWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9k
ZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9IVE1MICk7CisgICAgYXNz
aWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6Omh0bWwoKSApOwogICAgIHJldHVybiAqdGhpczsK
IH0KIApJbmRleDoga2h0bWwvZG9tL2h0bWxfYmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2RvbS9odG1sX2Jsb2NrLmNwcCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS40CmRpZmYgLXUgLXAgLXIxLjQga2h0bWwvZG9tL2h0bWxfYmxvY2suY3BwCi0t
LSBraHRtbC9kb20vaHRtbF9ibG9jay5jcHAJMTAgSnVuIDIwMDIgMjA6MDc6MzQgLTAwMDAJMS40
CisrKyBraHRtbC9kb20vaHRtbF9ibG9jay5jcHAJMTYgSnVuIDIwMDUgMjM6MDE6NTUgLTAwMDAK
QEAgLTQzLDcgKzQzLDcgQEAgSFRNTEJsb2NrcXVvdGVFbGVtZW50OjpIVE1MQmxvY2txdW90ZUVs
ZQogCiBIVE1MQmxvY2txdW90ZUVsZW1lbnQgJkhUTUxCbG9ja3F1b3RlRWxlbWVudDo6b3BlcmF0
b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9C
TE9DS1FVT1RFICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OmJsb2NrcXVv
dGUoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtODQsNyArODQsNyBAQCBIVE1MRGl2
RWxlbWVudDo6SFRNTERpdkVsZW1lbnQoSFRNTERpdkVsCiAKIEhUTUxEaXZFbGVtZW50ICZIVE1M
RGl2RWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWdu
T3RoZXIoIG90aGVyLCBJRF9ESVYgKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1l
czo6ZGl2KCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTEyNSw3ICsxMjUsNyBAQCBI
VE1MSFJFbGVtZW50OjpIVE1MSFJFbGVtZW50KEhUTUxIUkVsZW1lCiAKIEhUTUxIUkVsZW1lbnQg
JkhUTUxIUkVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFz
c2lnbk90aGVyKCBvdGhlciwgSURfSFIgKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxO
YW1lczo6aHIoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtMjA1LDE2ICsyMDUsMTcg
QEAgSFRNTEhlYWRpbmdFbGVtZW50OjpIVE1MSGVhZGluZ0VsZW1lbnQoSAogCiBIVE1MSGVhZGlu
Z0VsZW1lbnQgJkhUTUxIZWFkaW5nRWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3Ro
ZXIpCiB7Ci0gICAgaWYob3RoZXIuZWxlbWVudElkKCkgIT0gSURfSDEgfHwKLSAgICAgICBvdGhl
ci5lbGVtZW50SWQoKSAhPSBJRF9IMiB8fAotICAgICAgIG90aGVyLmVsZW1lbnRJZCgpICE9IElE
X0gzIHx8Ci0gICAgICAgb3RoZXIuZWxlbWVudElkKCkgIT0gSURfSDQgfHwKLSAgICAgICBvdGhl
ci5lbGVtZW50SWQoKSAhPSBJRF9INSB8fAotICAgICAgIG90aGVyLmVsZW1lbnRJZCgpICE9IElE
X0g2ICkKKyAgICBpZiAoIW90aGVyLmhhbmRsZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDEo
KSkgJiYKKyAgICAgICAgIW90aGVyLmhhbmRsZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDIo
KSkgJiYKKyAgICAgICAgIW90aGVyLmhhbmRsZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDMo
KSkgJiYKKyAgICAgICAgIW90aGVyLmhhbmRsZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDQo
KSkgJiYKKyAgICAgICAgIW90aGVyLmhhbmRsZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDUo
KSkgJiYKKyAgICAgICAgIW90aGVyLmhhbmRsZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDYo
KSkpCiAgICAgewogCWlmICggaW1wbCApIGltcGwtPmRlcmVmKCk7CiAJaW1wbCA9IDA7CiAgICAg
fSBlbHNlIHsKKwogICAgIE5vZGU6Om9wZXJhdG9yID0gKG90aGVyKTsKICAgICB9CiAgICAgcmV0
dXJuICp0aGlzOwpAQCAtMjU3LDcgKzI1OCw3IEBAIEhUTUxQYXJhZ3JhcGhFbGVtZW50OjpIVE1M
UGFyYWdyYXBoRWxlbWUKIAogSFRNTFBhcmFncmFwaEVsZW1lbnQgJkhUTUxQYXJhZ3JhcGhFbGVt
ZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlcigg
b3RoZXIsIElEX1AgKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6cCgpICk7
CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC0yOTgsNyArMjk5LDcgQEAgSFRNTFByZUVsZW1l
bnQ6OkhUTUxQcmVFbGVtZW50KEhUTUxQcmVFbAogCiBIVE1MUHJlRWxlbWVudCAmSFRNTFByZUVs
ZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVy
KCBvdGhlciwgSURfUFJFICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OnBy
ZSgpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkluZGV4OiBraHRtbC9kb20vaHRtbF9lbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9kb20v
aHRtbF9lbGVtZW50LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNApkaWZmIC11IC1wIC1y
MS4xNCBraHRtbC9kb20vaHRtbF9lbGVtZW50LmNwcAotLS0ga2h0bWwvZG9tL2h0bWxfZWxlbWVu
dC5jcHAJMTEgTWF5IDIwMDUgMDA6NTg6MjggLTAwMDAJMS4xNAorKysga2h0bWwvZG9tL2h0bWxf
ZWxlbWVudC5jcHAJMTYgSnVuIDIwMDUgMjM6MDE6NTUgLTAwMDAKQEAgLTE4Miw5ICsxODIsOSBA
QCBIVE1MQ29sbGVjdGlvbiBIVE1MRWxlbWVudDo6Y2hpbGRyZW4oKSBjCiAgICAgcmV0dXJuIEhU
TUxDb2xsZWN0aW9uKGltcGwsIEhUTUxDb2xsZWN0aW9uSW1wbDo6Tk9ERV9DSElMRFJFTik7CiB9
CiAKLXZvaWQgSFRNTEVsZW1lbnQ6OmFzc2lnbk90aGVyKCBjb25zdCBOb2RlICZvdGhlciwgaW50
IGVsZW1lbnRJZCApCit2b2lkIEhUTUxFbGVtZW50Ojphc3NpZ25PdGhlciggY29uc3QgTm9kZSAm
b3RoZXIsIGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUgKQogewotICAgIGlmKChpbnQpb3Ro
ZXIuZWxlbWVudElkKCkgIT0gZWxlbWVudElkKSB7CisgICAgaWYgKCFvdGhlci5oYW5kbGUoKS0+
aGFzVGFnTmFtZSh0YWdOYW1lKSkgewogCWlmICggaW1wbCApIGltcGwtPmRlcmVmKCk7CiAJaW1w
bCA9IDA7CiAgICAgfSBlbHNlIHsKSW5kZXg6IGtodG1sL2RvbS9odG1sX2VsZW1lbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9kb20vaHRtbF9lbGVtZW50
LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuOApkaWZmIC11IC1wIC1yMS44IGtodG1sL2RvbS9o
dG1sX2VsZW1lbnQuaAotLS0ga2h0bWwvZG9tL2h0bWxfZWxlbWVudC5oCTIyIE1heSAyMDA0IDAx
OjUwOjQ4IC0wMDAwCTEuOAorKysga2h0bWwvZG9tL2h0bWxfZWxlbWVudC5oCTE2IEp1biAyMDA1
IDIzOjAxOjU1IC0wMDAwCkBAIC0zMCw2ICszMCw4IEBACiAjZGVmaW5lIEhUTUxfRUxFTUVOVF9I
CiAKICNpbmNsdWRlIDxkb20vZG9tX2VsZW1lbnQuaD4KKyNpbmNsdWRlICJkb21fcW5hbWUuaCIK
KwogY2xhc3MgS0hUTUxWaWV3OwogCiBuYW1lc3BhY2UgRE9NIHsKQEAgLTIyNSw3ICsyMjcsNyBA
QCBwcm90ZWN0ZWQ6CiAgICAgLyoKICAgICAgKiBAaW50ZXJuYWwKICAgICAgKi8KLSAgICB2b2lk
IGFzc2lnbk90aGVyKCBjb25zdCBOb2RlICZvdGhlciwgaW50IGVsZW1lbnRJZCApOworICAgIHZv
aWQgYXNzaWduT3RoZXIoIGNvbnN0IE5vZGUgJm90aGVyLCBjb25zdCBRdWFsaWZpZWROYW1lJiB0
YWdOYW1lICk7CiB9OwogCiB9OyAvL25hbWVzcGFjZQpJbmRleDoga2h0bWwvZG9tL2h0bWxfZm9y
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZG9tL2h0
bWxfZm9ybS5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTEKZGlmZiAtdSAtcCAtcjEuMTEg
a2h0bWwvZG9tL2h0bWxfZm9ybS5jcHAKLS0tIGtodG1sL2RvbS9odG1sX2Zvcm0uY3BwCTExIE1h
eSAyMDA1IDAwOjU4OjI4IC0wMDAwCTEuMTEKKysrIGtodG1sL2RvbS9odG1sX2Zvcm0uY3BwCTE2
IEp1biAyMDA1IDIzOjAxOjU2IC0wMDAwCkBAIC00Nyw3ICs0Nyw3IEBAIEhUTUxCdXR0b25FbGVt
ZW50OjpIVE1MQnV0dG9uRWxlbWVudChIVE0KIAogSFRNTEJ1dHRvbkVsZW1lbnQgJkhUTUxCdXR0
b25FbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25P
dGhlciggb3RoZXIsIElEX0JVVFRPTiApOwkKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxO
YW1lczo6YnV0dG9uKCkgKTsJCiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC0xNTcsNyArMTU3
LDcgQEAgSFRNTEZpZWxkU2V0RWxlbWVudDo6SFRNTEZpZWxkU2V0RWxlbWVudAogCiBIVE1MRmll
bGRTZXRFbGVtZW50ICZIVE1MRmllbGRTZXRFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2Rl
ICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0ZJRUxEU0VUICk7CisgICAg
YXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OmZpZWxkc2V0KCkgKTsKICAgICByZXR1cm4g
KnRoaXM7CiB9CiAKQEAgLTE5Myw3ICsxOTMsNyBAQCBIVE1MRm9ybUVsZW1lbnQ6OkhUTUxGb3Jt
RWxlbWVudChIVE1MRm9yCiAKIEhUTUxGb3JtRWxlbWVudCAmSFRNTEZvcm1FbGVtZW50OjpvcGVy
YXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElE
X0ZPUk0gKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6Zm9ybSgpICk7CiAg
ICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC0zMTEsNyArMzExLDcgQEAgSFRNTElucHV0RWxlbWVu
dDo6SFRNTElucHV0RWxlbWVudChIVE1MSQogCiBIVE1MSW5wdXRFbGVtZW50ICZIVE1MSW5wdXRF
bGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhl
ciggb3RoZXIsIElEX0lOUFVUICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6
OmlucHV0KCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTU3NCw3ICs1NzQsNyBAQCBI
VE1MTGFiZWxFbGVtZW50OjpIVE1MTGFiZWxFbGVtZW50KEhUTUxMCiAKIEhUTUxMYWJlbEVsZW1l
bnQgJkhUTUxMYWJlbEVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewot
ICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfTEFCRUwgKTsKKyAgICBhc3NpZ25PdGhlciggb3Ro
ZXIsIEhUTUxOYW1lczo6bGFiZWwoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtNjMz
LDcgKzYzMyw3IEBAIEhUTUxMZWdlbmRFbGVtZW50OjpIVE1MTGVnZW5kRWxlbWVudChIVE0KIAog
SFRNTExlZ2VuZEVsZW1lbnQgJkhUTUxMZWdlbmRFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBO
b2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0xFR0VORCApOworICAg
IGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpsZWdlbmQoKSApOwogICAgIHJldHVybiAq
dGhpczsKIH0KIApAQCAtNjkxLDcgKzY5MSw3IEBAIEhUTUxPcHRHcm91cEVsZW1lbnQ6OkhUTUxP
cHRHcm91cEVsZW1lbnQKIAogSFRNTE9wdEdyb3VwRWxlbWVudCAmSFRNTE9wdEdyb3VwRWxlbWVu
dDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90
aGVyLCBJRF9PUFRHUk9VUCApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpv
cHRncm91cCgpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC03NDQsNyArNzQ0LDcgQEAg
SFRNTFNlbGVjdEVsZW1lbnQ6OkhUTUxTZWxlY3RFbGVtZW50KEhUTQogCiBIVE1MU2VsZWN0RWxl
bWVudCAmSFRNTFNlbGVjdEVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQog
ewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfU0VMRUNUICk7CisgICAgYXNzaWduT3RoZXIo
IG90aGVyLCBIVE1MTmFtZXM6OnNlbGVjdCgpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBA
IC05MDYsNyArOTA2LDcgQEAgSFRNTFRleHRBcmVhRWxlbWVudDo6SFRNTFRleHRBcmVhRWxlbWVu
dAogCiBIVE1MVGV4dEFyZWFFbGVtZW50ICZIVE1MVGV4dEFyZWFFbGVtZW50OjpvcGVyYXRvciA9
IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX1RFWFRB
UkVBICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OnRleHRhcmVhKCkgKTsK
ICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTEwNzQsNyArMTA3NCw3IEBAIEhUTUxPcHRpb25F
bGVtZW50OjpIVE1MT3B0aW9uRWxlbWVudChIVE0KIAogSFRNTE9wdGlvbkVsZW1lbnQgJkhUTUxP
cHRpb25FbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3Np
Z25PdGhlciggb3RoZXIsIElEX09QVElPTiApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRN
TE5hbWVzOjpvcHRpb24oKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtMTE4Miw3ICsx
MTgyLDcgQEAgSFRNTElzSW5kZXhFbGVtZW50OjpIVE1MSXNJbmRleEVsZW1lbnQoSAogCiBIVE1M
SXNJbmRleEVsZW1lbnQgJkhUTUxJc0luZGV4RWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9k
ZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9JU0lOREVYICk7CisgICAg
YXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OmlzaW5kZXgoKSApOwogICAgIHJldHVybiAq
dGhpczsKIH0KIApJbmRleDoga2h0bWwvZG9tL2h0bWxfaGVhZC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZG9tL2h0bWxfaGVhZC5jcHAsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuOApkaWZmIC11IC1wIC1yMS44IGtodG1sL2RvbS9odG1sX2hlYWQuY3Bw
Ci0tLSBraHRtbC9kb20vaHRtbF9oZWFkLmNwcAkzIE5vdiAyMDAzIDA2OjMyOjA0IC0wMDAwCTEu
OAorKysga2h0bWwvZG9tL2h0bWxfaGVhZC5jcHAJMTYgSnVuIDIwMDUgMjM6MDE6NTYgLTAwMDAK
QEAgLTQyLDcgKzQyLDcgQEAgSFRNTEJhc2VFbGVtZW50OjpIVE1MQmFzZUVsZW1lbnQoSFRNTEJh
cwogCiBIVE1MQmFzZUVsZW1lbnQgJkhUTUxCYXNlRWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3Qg
Tm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9CQVNFICk7CisgICAg
YXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OmJhc2UoKSApOwogICAgIHJldHVybiAqdGhp
czsKIH0KIApAQCAtOTcsNyArOTcsNyBAQCBIVE1MTGlua0VsZW1lbnQ6OkhUTUxMaW5rRWxlbWVu
dChIVE1MTGluCiAKIEhUTUxMaW5rRWxlbWVudCAmSFRNTExpbmtFbGVtZW50OjpvcGVyYXRvciA9
IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0xJTksg
KTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6bGluaygpICk7CiAgICAgcmV0
dXJuICp0aGlzOwogfQogCkBAIC0yMzgsNyArMjM4LDcgQEAgSFRNTE1ldGFFbGVtZW50OjpIVE1M
TWV0YUVsZW1lbnQoSFRNTE1ldAogCiBIVE1MTWV0YUVsZW1lbnQgJkhUTUxNZXRhRWxlbWVudDo6
b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVy
LCBJRF9NRVRBICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6Om1ldGEoKSAp
OwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtMzEyLDcgKzMxMiw3IEBAIEhUTUxTY3JpcHRF
bGVtZW50OjpIVE1MU2NyaXB0RWxlbWVudChIVE0KIAogSFRNTFNjcmlwdEVsZW1lbnQgJkhUTUxT
Y3JpcHRFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3Np
Z25PdGhlciggb3RoZXIsIElEX1NDUklQVCApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRN
TE5hbWVzOjpzY3JpcHQoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtNDI0LDcgKzQy
NCw3IEBAIEhUTUxTdHlsZUVsZW1lbnQ6OkhUTUxTdHlsZUVsZW1lbnQoSFRNTFMKIAogSFRNTFN0
eWxlRWxlbWVudCAmSFRNTFN0eWxlRWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3Ro
ZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9TVFlMRSApOworICAgIGFzc2lnbk90
aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpzdHlsZSgpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQog
CkBAIC00OTYsNyArNDk2LDcgQEAgSFRNTFRpdGxlRWxlbWVudDo6SFRNTFRpdGxlRWxlbWVudChI
VE1MVAogCiBIVE1MVGl0bGVFbGVtZW50ICZIVE1MVGl0bGVFbGVtZW50OjpvcGVyYXRvciA9IChj
b25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX1RJVExFICk7
CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OnRpdGxlKCkgKTsKICAgICByZXR1
cm4gKnRoaXM7CiB9CiAKSW5kZXg6IGtodG1sL2RvbS9odG1sX2ltYWdlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9kb20vaHRtbF9pbWFnZS5jcHAsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuOQpkaWZmIC11IC1wIC1yMS45IGtodG1sL2RvbS9odG1sX2lt
YWdlLmNwcAotLS0ga2h0bWwvZG9tL2h0bWxfaW1hZ2UuY3BwCTMgTm92IDIwMDMgMDY6MzI6MDQg
LTAwMDAJMS45CisrKyBraHRtbC9kb20vaHRtbF9pbWFnZS5jcHAJMTYgSnVuIDIwMDUgMjM6MDE6
NTYgLTAwMDAKQEAgLTQ2LDcgKzQ2LDcgQEAgSFRNTEFyZWFFbGVtZW50OjpIVE1MQXJlYUVsZW1l
bnQoSFRNTEFyZQogCiBIVE1MQXJlYUVsZW1lbnQgJkhUTUxBcmVhRWxlbWVudDo6b3BlcmF0b3Ig
PSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9BUkVB
ICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OmFyZWEoKSApOwogICAgIHJl
dHVybiAqdGhpczsKIH0KIApAQCAtMTc2LDcgKzE3Niw3IEBAIEhUTUxJbWFnZUVsZW1lbnQ6OkhU
TUxJbWFnZUVsZW1lbnQoSFRNTEkKIAogSFRNTEltYWdlRWxlbWVudCAmSFRNTEltYWdlRWxlbWVu
dDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90
aGVyLCBJRF9JTUcgKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6aW1nKCkg
KTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTM3Miw3ICszNzIsNyBAQCBIVE1MTWFwRWxl
bWVudDo6SFRNTE1hcEVsZW1lbnQoSFRNTE1hcEVsCiAKIEhUTUxNYXBFbGVtZW50ICZIVE1MTWFw
RWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3Ro
ZXIoIG90aGVyLCBJRF9NQVAgKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6
bWFwKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKSW5kZXg6IGtodG1sL2RvbS9odG1sX2lu
bGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZG9t
L2h0bWxfaW5saW5lLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS43CmRpZmYgLXUgLXAgLXIx
Ljcga2h0bWwvZG9tL2h0bWxfaW5saW5lLmNwcAotLS0ga2h0bWwvZG9tL2h0bWxfaW5saW5lLmNw
cAkxMSBNYXkgMjAwNSAwMDo1ODoyOCAtMDAwMAkxLjcKKysrIGtodG1sL2RvbS9odG1sX2lubGlu
ZS5jcHAJMTYgSnVuIDIwMDUgMjM6MDE6NTYgLTAwMDAKQEAgLTQ1LDcgKzQ1LDcgQEAgSFRNTEFu
Y2hvckVsZW1lbnQ6OkhUTUxBbmNob3JFbGVtZW50KEhUTQogCiBIVE1MQW5jaG9yRWxlbWVudCAm
SFRNTEFuY2hvckVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAg
IGFzc2lnbk90aGVyKCBvdGhlciwgSURfQSApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRN
TE5hbWVzOjphKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTIxNyw3ICsyMTcsNyBA
QCBIVE1MQlJFbGVtZW50OjpIVE1MQlJFbGVtZW50KEhUTUxCUkVsZW1lCiAKIEhUTUxCUkVsZW1l
bnQgJkhUTUxCUkVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAg
IGFzc2lnbk90aGVyKCBvdGhlciwgSURfQlIgKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhU
TUxOYW1lczo6YnIoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtMjU4LDcgKzI1OCw3
IEBAIEhUTUxGb250RWxlbWVudDo6SFRNTEZvbnRFbGVtZW50KEhUTUxGb24KIAogSFRNTEZvbnRF
bGVtZW50ICZIVE1MRm9udEVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQog
ewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfRk9OVCApOworICAgIGFzc2lnbk90aGVyKCBv
dGhlciwgSFRNTE5hbWVzOjpmb250KCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTMx
OSw3ICszMTksNyBAQCBIVE1MTW9kRWxlbWVudDo6SFRNTE1vZEVsZW1lbnQoY29uc3QgSFRNCiBI
VE1MTW9kRWxlbWVudDo6SFRNTE1vZEVsZW1lbnQoSFRNTEVsZW1lbnRJbXBsICpfaW1wbCkKICAg
ICA6IEhUTUxFbGVtZW50KCkKIHsKLSAgICBpZiAoX2ltcGwgJiYgKF9pbXBsLT5pZCgpID09IElE
X0lOUyB8fCBfaW1wbC0+aWQoKSA9PSBJRF9ERUwpKQorICAgIGlmIChfaW1wbCAmJiAoX2ltcGwt
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppbnMoKSkgfHwgX2ltcGwtPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjpkZWwoKSkpKQogICAgICAgICBpbXBsID0gX2ltcGw7CiAgICAgZWxzZQogICAgICAgICBp
bXBsID0gMDsKQEAgLTMyOCw5ICszMjgsOCBAQCBIVE1MTW9kRWxlbWVudDo6SFRNTE1vZEVsZW1l
bnQoSFRNTEVsZW1lCiAKIEhUTUxNb2RFbGVtZW50ICZIVE1MTW9kRWxlbWVudDo6b3BlcmF0b3Ig
PSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgaWYoIG90aGVyLmVsZW1lbnRJZCgpICE9IElE
X0lOUyAmJgotCW90aGVyLmVsZW1lbnRJZCgpICE9IElEX0RFTCApCi0gICAgeworICAgIGlmICgh
b3RoZXIuaGFuZGxlKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppbnMoKSkgJiYKKyAgICAgICAg
IW90aGVyLmhhbmRsZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZGVsKCkpKSB7CiAJaWYgKCBp
bXBsICkgaW1wbC0+ZGVyZWYoKTsKIAlpbXBsID0gMDsKICAgICB9IGVsc2UgewpAQCAtMzgxLDE5
ICszODAsMTYgQEAgSFRNTFF1b3RlRWxlbWVudDo6SFRNTFF1b3RlRWxlbWVudChjb25zdAogewog
fQogCi1IVE1MUXVvdGVFbGVtZW50OjpIVE1MUXVvdGVFbGVtZW50KEhUTUxHZW5lcmljRWxlbWVu
dEltcGwgKl9pbXBsKQorSFRNTFF1b3RlRWxlbWVudDo6SFRNTFF1b3RlRWxlbWVudChIVE1MUXVv
dGVFbGVtZW50SW1wbCAqX2ltcGwpCiAgICAgOiBIVE1MRWxlbWVudCgpCiB7Ci0gICAgaWYgKF9p
bXBsICYmIF9pbXBsLT5pZCgpID09IElEX1EpCi0gICAgICAgIGltcGwgPSBfaW1wbDsKLSAgICBl
bHNlCi0gICAgICAgIGltcGwgPSAwOworICAgIGltcGwgPSBfaW1wbDsKICAgICBpZiAoIGltcGwg
KSBpbXBsLT5yZWYoKTsKIH0KIAogSFRNTFF1b3RlRWxlbWVudCAmSFRNTFF1b3RlRWxlbWVudDo6
b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVy
LCBJRF9RICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OnEoKSApOwogICAg
IHJldHVybiAqdGhpczsKIH0KIApJbmRleDoga2h0bWwvZG9tL2h0bWxfaW5saW5lLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZG9tL2h0bWxfaW5saW5lLmgs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMwpkaWZmIC11IC1wIC1yMS4zIGtodG1sL2RvbS9odG1s
X2lubGluZS5oCi0tLSBraHRtbC9kb20vaHRtbF9pbmxpbmUuaAkxNSBBcHIgMjAwMiAyMzo0Mjow
MSAtMDAwMAkxLjMKKysrIGtodG1sL2RvbS9odG1sX2lubGluZS5oCTE2IEp1biAyMDA1IDIzOjAx
OjU3IC0wMDAwCkBAIC00MjUsNyArNDI1LDcgQEAgcHVibGljOgogICAgIEhUTUxRdW90ZUVsZW1l
bnQoY29uc3QgTm9kZSAmb3RoZXIpIDogSFRNTEVsZW1lbnQoKQogICAgICAgICAgeygqdGhpcyk9
b3RoZXI7fQogcHJvdGVjdGVkOgotICAgIEhUTUxRdW90ZUVsZW1lbnQoSFRNTEdlbmVyaWNFbGVt
ZW50SW1wbCAqaW1wbCk7CisgICAgSFRNTFF1b3RlRWxlbWVudChIVE1MUXVvdGVFbGVtZW50SW1w
bCAqaW1wbCk7CiBwdWJsaWM6CiAKICAgICBIVE1MUXVvdGVFbGVtZW50ICYgb3BlcmF0b3IgPSAo
Y29uc3QgSFRNTFF1b3RlRWxlbWVudCAmb3RoZXIpOwpJbmRleDoga2h0bWwvZG9tL2h0bWxfbGlz
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZG9tL2h0
bWxfbGlzdC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNApkaWZmIC11IC1wIC1yMS40IGto
dG1sL2RvbS9odG1sX2xpc3QuY3BwCi0tLSBraHRtbC9kb20vaHRtbF9saXN0LmNwcAkxMCBKdW4g
MjAwMiAyMDowNzozNiAtMDAwMAkxLjQKKysrIGtodG1sL2RvbS9odG1sX2xpc3QuY3BwCTE2IEp1
biAyMDA1IDIzOjAxOjU3IC0wMDAwCkBAIC00MSw3ICs0MSw3IEBAIEhUTUxETGlzdEVsZW1lbnQ6
OkhUTUxETGlzdEVsZW1lbnQoSFRNTEQKIAogSFRNTERMaXN0RWxlbWVudCAmSFRNTERMaXN0RWxl
bWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIo
IG90aGVyLCBJRF9ETCApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpkbCgp
ICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC04OCw3ICs4OCw3IEBAIEhUTUxEaXJlY3Rv
cnlFbGVtZW50OjpIVE1MRGlyZWN0b3J5RWxlbWUKIAogSFRNTERpcmVjdG9yeUVsZW1lbnQgJkhU
TUxEaXJlY3RvcnlFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAg
ICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0RJUiApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwg
SFRNTE5hbWVzOjpkaXIoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtMTM1LDcgKzEz
NSw3IEBAIEhUTUxMSUVsZW1lbnQ6OkhUTUxMSUVsZW1lbnQoSFRNTExJRWxlbWUKIAogSFRNTExJ
RWxlbWVudCAmSFRNTExJRWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7
Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9MSSApOworICAgIGFzc2lnbk90aGVyKCBvdGhl
ciwgSFRNTE5hbWVzOjpsaSgpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC0xOTAsNyAr
MTkwLDcgQEAgSFRNTE1lbnVFbGVtZW50OjpIVE1MTWVudUVsZW1lbnQoSFRNTE1lbgogCiBIVE1M
TWVudUVsZW1lbnQgJkhUTUxNZW51RWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3Ro
ZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9NRU5VICk7CisgICAgYXNzaWduT3Ro
ZXIoIG90aGVyLCBIVE1MTmFtZXM6Om1lbnUoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApA
QCAtMjM3LDcgKzIzNyw3IEBAIEhUTUxPTGlzdEVsZW1lbnQ6OkhUTUxPTGlzdEVsZW1lbnQoSFRN
TE8KIAogSFRNTE9MaXN0RWxlbWVudCAmSFRNTE9MaXN0RWxlbWVudDo6b3BlcmF0b3IgPSAoY29u
c3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9PTCApOworICAg
IGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpvbCgpICk7CiAgICAgcmV0dXJuICp0aGlz
OwogfQogCkBAIC0zMTAsNyArMzEwLDcgQEAgSFRNTFVMaXN0RWxlbWVudDo6SFRNTFVMaXN0RWxl
bWVudChIVE1MVQogCiBIVE1MVUxpc3RFbGVtZW50ICZIVE1MVUxpc3RFbGVtZW50OjpvcGVyYXRv
ciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX1VM
ICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OnVsKCkgKTsKICAgICByZXR1
cm4gKnRoaXM7CiB9CiAKSW5kZXg6IGtodG1sL2RvbS9odG1sX21pc2MuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2RvbS9odG1sX21pc2MuY3BwLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjcKZGlmZiAtdSAtcCAtcjEuNyBraHRtbC9kb20vaHRtbF9taXNj
LmNwcAotLS0ga2h0bWwvZG9tL2h0bWxfbWlzYy5jcHAJMTEgTWF5IDIwMDUgMDA6NTg6MjggLTAw
MDAJMS43CisrKyBraHRtbC9kb20vaHRtbF9taXNjLmNwcAkxNiBKdW4gMjAwNSAyMzowMTo1NyAt
MDAwMApAQCAtNDEsNyArNDEsNyBAQCBIVE1MQmFzZUZvbnRFbGVtZW50OjpIVE1MQmFzZUZvbnRF
bGVtZW50CiAKIEhUTUxCYXNlRm9udEVsZW1lbnQgJkhUTUxCYXNlRm9udEVsZW1lbnQ6Om9wZXJh
dG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURf
QkFTRUZPTlQgKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6YmFzZWZvbnQo
KSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApJbmRleDoga2h0bWwvZG9tL2h0bWxfb2JqZWN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9kb20vaHRt
bF9vYmplY3QuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjUKZGlmZiAtdSAtcCAtcjEuNSBr
aHRtbC9kb20vaHRtbF9vYmplY3QuY3BwCi0tLSBraHRtbC9kb20vaHRtbF9vYmplY3QuY3BwCTEg
TWFyIDIwMDQgMTc6MDQ6MjQgLTAwMDAJMS41CisrKyBraHRtbC9kb20vaHRtbF9vYmplY3QuY3Bw
CTE2IEp1biAyMDA1IDIzOjAxOjU3IC0wMDAwCkBAIC00Myw3ICs0Myw3IEBAIEhUTUxBcHBsZXRF
bGVtZW50OjpIVE1MQXBwbGV0RWxlbWVudChIVE0KIAogSFRNTEFwcGxldEVsZW1lbnQgJkhUTUxB
cHBsZXRFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3Np
Z25PdGhlciggb3RoZXIsIElEX0FQUExFVCApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRN
TE5hbWVzOjphcHBsZXQoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtMTk0LDcgKzE5
NCw3IEBAIEhUTUxPYmplY3RFbGVtZW50OjpIVE1MT2JqZWN0RWxlbWVudChIVE0KIAogSFRNTE9i
amVjdEVsZW1lbnQgJkhUTUxPYmplY3RFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZv
dGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX09CSkVDVCApOworICAgIGFzc2ln
bk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpvYmplY3QoKSApOwogICAgIHJldHVybiAqdGhpczsK
IH0KIApAQCAtNDMyLDcgKzQzMiw3IEBAIEhUTUxQYXJhbUVsZW1lbnQ6OkhUTUxQYXJhbUVsZW1l
bnQoSFRNTFAKIAogSFRNTFBhcmFtRWxlbWVudCAmSFRNTFBhcmFtRWxlbWVudDo6b3BlcmF0b3Ig
PSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9QQVJB
TSApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpwYXJhbSgpICk7CiAgICAg
cmV0dXJuICp0aGlzOwogfQogCkluZGV4OiBraHRtbC9kb20vaHRtbF90YWJsZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZG9tL2h0bWxfdGFibGUuY3Bw
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjYKZGlmZiAtdSAtcCAtcjEuNiBraHRtbC9kb20vaHRt
bF90YWJsZS5jcHAKLS0tIGtodG1sL2RvbS9odG1sX3RhYmxlLmNwcAkzMSBPY3QgMjAwMyAwMDo0
NzoxNiAtMDAwMAkxLjYKKysrIGtodG1sL2RvbS9odG1sX3RhYmxlLmNwcAkxNiBKdW4gMjAwNSAy
MzowMTo1OCAtMDAwMApAQCAtNDUsNyArNDUsNyBAQCBIVE1MVGFibGVDYXB0aW9uRWxlbWVudDo6
SFRNTFRhYmxlQ2FwdGlvCiAKIEhUTUxUYWJsZUNhcHRpb25FbGVtZW50ICZIVE1MVGFibGVDYXB0
aW9uRWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWdu
T3RoZXIoIG90aGVyLCBJRF9DQVBUSU9OICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1M
TmFtZXM6OmNhcHRpb24oKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtODYsOSArODYs
OCBAQCBIVE1MVGFibGVDZWxsRWxlbWVudDo6SFRNTFRhYmxlQ2VsbEVsZW1lCiAKIEhUTUxUYWJs
ZUNlbGxFbGVtZW50ICZIVE1MVGFibGVDZWxsRWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9k
ZSAmb3RoZXIpCiB7Ci0gICAgaWYoIG90aGVyLmVsZW1lbnRJZCgpICE9IElEX1REICYmCi0Jb3Ro
ZXIuZWxlbWVudElkKCkgIT0gSURfVEggKQotICAgIHsKKyAgICBpZiAoIW90aGVyLmhhbmRsZSgp
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGQoKSkgfHwKKyAgICAgICAgIW90aGVyLmhhbmRsZSgp
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGgoKSkpIHsKIAlpZiAoIGltcGwgKSBpbXBsLT5kZXJl
ZigpOwogCWltcGwgPSAwOwogICAgIH0gZWxzZSB7CkBAIC0yOTUsOSArMjk0LDggQEAgSFRNTFRh
YmxlQ29sRWxlbWVudDo6SFRNTFRhYmxlQ29sRWxlbWVudAogCiBIVE1MVGFibGVDb2xFbGVtZW50
ICZIVE1MVGFibGVDb2xFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsK
LSAgICBpZiggb3RoZXIuZWxlbWVudElkKCkgIT0gSURfQ09MICYmCi0Jb3RoZXIuZWxlbWVudElk
KCkgIT0gSURfQ09MR1JPVVAgKQotICAgIHsKKyAgICBpZiAoIW90aGVyLmhhbmRsZSgpLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6Y29sKCkpICYmCisgICAgICAgICFvdGhlci5oYW5kbGUoKS0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OmNvbGdyb3VwKCkpKSB7CiAJaWYgKCBpbXBsICkgaW1wbC0+ZGVy
ZWYoKTsKIAlpbXBsID0gMDsKICAgICB9IGVsc2UgewpAQCAtNDAxLDcgKzM5OSw3IEBAIEhUTUxU
YWJsZUVsZW1lbnQ6OkhUTUxUYWJsZUVsZW1lbnQoSFRNTFQKIAogSFRNTFRhYmxlRWxlbWVudCAm
SFRNTFRhYmxlRWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAg
YXNzaWduT3RoZXIoIG90aGVyLCBJRF9UQUJMRSApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwg
SFRNTE5hbWVzOjp0YWJsZSgpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC02MzgsNyAr
NjM2LDcgQEAgSFRNTFRhYmxlUm93RWxlbWVudDo6SFRNTFRhYmxlUm93RWxlbWVudAogCiBIVE1M
VGFibGVSb3dFbGVtZW50ICZIVE1MVGFibGVSb3dFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBO
b2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX1RSICk7CisgICAgYXNz
aWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OnRyKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9
CiAKQEAgLTc3NSwxMCArNzczLDkgQEAgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ6OkhUTUxUYWJs
ZVNlY3RpbwogCiBIVE1MVGFibGVTZWN0aW9uRWxlbWVudCAmSFRNTFRhYmxlU2VjdGlvbkVsZW1l
bnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGlmKG90aGVyLmVsZW1l
bnRJZCgpICE9IElEX1RCT0RZICYmCi0gICAgICAgb3RoZXIuZWxlbWVudElkKCkgIT0gSURfVEhF
QUQgJiYKLSAgICAgICBvdGhlci5lbGVtZW50SWQoKSAhPSBJRF9URk9PVCApCi0gICAgeworICAg
IGlmICghb3RoZXIuaGFuZGxlKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0Ym9keSgpKSAmJgor
ICAgICAgICAhb3RoZXIuaGFuZGxlKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0aGVhZCgpKSAm
JgorICAgICAgICAhb3RoZXIuaGFuZGxlKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0Zm9vdCgp
KSkgewogCWlmICggaW1wbCApIGltcGwtPmRlcmVmKCk7CiAJaW1wbCA9IDA7CiAgICAgfSBlbHNl
IHsKSW5kZXg6IGtodG1sL2VjbWEva2pzX2Nzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1dlYkNvcmUva2h0bWwvZWNtYS9ranNfY3NzLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS4yMwpkaWZmIC11IC1wIC1yMS4yMyBraHRtbC9lY21hL2tqc19jc3MuY3BwCi0tLSBraHRt
bC9lY21hL2tqc19jc3MuY3BwCTE2IE1heSAyMDA1IDE5OjE5OjM4IC0wMDAwCTEuMjMKKysrIGto
dG1sL2VjbWEva2pzX2Nzcy5jcHAJMTYgSnVuIDIwMDUgMjM6MDE6NTkgLTAwMDAKQEAgLTI5LDcg
KzI5LDcgQEAKICNpbmNsdWRlICJ4bWwvZG9tX2RvY2ltcGwuaCIKICNpbmNsdWRlICJodG1sL2h0
bWxfaGVhZGltcGwuaCIgLy8gZm9yIEhUTUxTdHlsZUVsZW1lbnQKICNpbmNsdWRlICJranNfZG9t
LmgiCi0jaW5jbHVkZSAibWlzYy9odG1sdGFncy5oIgorI2luY2x1ZGUgImh0bWxuYW1lcy5oIgog
CiAjaW5jbHVkZSA8a2RlYnVnLmg+CiAKQEAgLTU1LDYgKzU1LDcgQEAgdXNpbmcgRE9NOjpDb3Vu
dGVySW1wbDsKIHVzaW5nIERPTTo6RG9jdW1lbnRJbXBsOwogdXNpbmcgRE9NOjpET01TdHJpbmc7
CiB1c2luZyBET006OkVsZW1lbnRJbXBsOwordXNpbmcgRE9NOjpIVE1MTmFtZXM7CiB1c2luZyBE
T006OkhUTUxTdHlsZUVsZW1lbnRJbXBsOwogdXNpbmcgRE9NOjpNZWRpYUxpc3RJbXBsOwogdXNp
bmcgRE9NOjpSZWN0SW1wbDsKQEAgLTM5NSw3ICszOTYsNyBAQCBWYWx1ZSBET01TdHlsZVNoZWV0
TGlzdDo6dHJ5R2V0KEV4ZWNTdGF0CiAgIC8vIGFuZCBkb2Vzbid0IGxvb2sgZm9yIG5hbWUgYXR0
cmlidXRlIChzZWUgaW1wbGVtZW50YXRpb24gYWJvdmUpLgogICAvLyBCdXQgdW5pY2l0eSBvZiBz
dHlsZXNoZWV0IGlkcyBpcyBnb29kIHByYWN0aWNlIGFueXdheSA7KQogICBFbGVtZW50SW1wbCAq
ZWxlbWVudCA9IG1fZG9jLT5nZXRFbGVtZW50QnlJZChwLnN0cmluZygpKTsKLSAgaWYgKGVsZW1l
bnQgJiYgZWxlbWVudC0+aWQoKSA9PSBJRF9TVFlMRSkKKyAgaWYgKGVsZW1lbnQgJiYgZWxlbWVu
dC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnN0eWxlKCkpKQogICAgIHJldHVybiBnZXRET01TdHls
ZVNoZWV0KGV4ZWMsIHN0YXRpY19jYXN0PEhUTUxTdHlsZUVsZW1lbnRJbXBsICo+KGVsZW1lbnQp
LT5zaGVldCgpKTsKIAogICByZXR1cm4gRE9NT2JqZWN0Ojp0cnlHZXQoZXhlYywgcCk7CkluZGV4
OiBraHRtbC9lY21hL2tqc19kb20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9X
ZWJDb3JlL2todG1sL2VjbWEva2pzX2RvbS5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNzQK
ZGlmZiAtdSAtcCAtcjEuNzQga2h0bWwvZWNtYS9ranNfZG9tLmNwcAotLS0ga2h0bWwvZWNtYS9r
anNfZG9tLmNwcAk3IEp1biAyMDA1IDIyOjEyOjU3IC0wMDAwCTEuNzQKKysrIGtodG1sL2VjbWEv
a2pzX2RvbS5jcHAJMTYgSnVuIDIwMDUgMjM6MDI6MDEgLTAwMDAKQEAgLTQ3LDggKzQ3LDYgQEAK
IAogI2luY2x1ZGUgImh0bWxfb2JqZWN0aW1wbC5oIgogCi0jaW5jbHVkZSAibWlzYy9odG1sdGFn
cy5oIgotCiAjaWYgQVBQTEVfQ0hBTkdFUwogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL3J1bnRp
bWVfb2JqZWN0Lmg+CiAjZW5kaWYKQEAgLTY3LDYgKzY1LDcgQEAgdXNpbmcgRE9NOjpIVE1MQXBw
bGV0RWxlbWVudEltcGw7CiB1c2luZyBET006OkhUTUxEb2N1bWVudEltcGw7CiB1c2luZyBET006
OkhUTUxFbGVtZW50SW1wbDsKIHVzaW5nIERPTTo6SFRNTEVtYmVkRWxlbWVudEltcGw7Cit1c2lu
ZyBET006OkhUTUxOYW1lczsKIHVzaW5nIERPTTo6SFRNTE9iamVjdEVsZW1lbnRJbXBsOwogdXNp
bmcgRE9NOjpOYW1lZE5vZGVNYXBJbXBsOwogdXNpbmcgRE9NOjpOb2RlOwpAQCAtNDYyLDcgKzQ2
MSw3IEBAIHZvaWQgRE9NTm9kZTo6cHV0VmFsdWUoRXhlY1N0YXRlICpleGVjLCAKICAgICBub2Rl
LnNldE5vZGVWYWx1ZSh2YWx1ZS50b1N0cmluZyhleGVjKS5zdHJpbmcoKSwgZXhjZXB0aW9uKTsK
ICAgICBicmVhazsKICAgY2FzZSBQcmVmaXg6Ci0gICAgbm9kZS5zZXRQcmVmaXgodmFsdWUudG9T
dHJpbmcoZXhlYykuc3RyaW5nKCksIGV4Y2VwdGlvbik7CisgICAgbm9kZS5zZXRQcmVmaXgodmFs
dWUudG9TdHJpbmcoZXhlYykuc3RyaW5nKCkuaW1wbGVtZW50YXRpb24oKSwgZXhjZXB0aW9uKTsK
ICAgICBicmVhazsKICAgY2FzZSBPbkFib3J0OgogICAgIHNldExpc3RlbmVyKGV4ZWMsRE9NOjpF
dmVudEltcGw6OkFCT1JUX0VWRU5ULHZhbHVlKTsKQEAgLTExODcsNyArMTE4Niw3IEBAIFZhbHVl
IERPTUVsZW1lbnQ6OnRyeUdldChFeGVjU3RhdGUgKmV4ZWMKICAgewogICAgIHN3aXRjaCggZW50
cnktPnZhbHVlICkgewogICAgIGNhc2UgVGFnTmFtZToKLSAgICAgIHJldHVybiBnZXRTdHJpbmdP
ck51bGwoZWxlbWVudC50YWdOYW1lKCkpOworICAgICAgcmV0dXJuIGdldFN0cmluZ09yTnVsbChl
bGVtZW50Lm5vZGVOYW1lKCkpOwogICAgIGNhc2UgU3R5bGU6CiAgICAgICByZXR1cm4gZ2V0RE9N
Q1NTU3R5bGVEZWNsYXJhdGlvbihleGVjLGVsZW1lbnQuc3R5bGUoKSk7CiAgICAgZGVmYXVsdDoK
QEAgLTE3MDksMjYgKzE3MDgsMjEgQEAgVmFsdWVJbXAgKmdldFJ1bnRpbWVPYmplY3QoRXhlY1N0
YXRlICpleAogICAgIGlmICghbikKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBzd2l0Y2ggKG4t
PmlkKCkpIHsKLSAgICAgICAgY2FzZSBJRF9BUFBMRVQ6IHsKLSAgICAgICAgICAgIEhUTUxBcHBs
ZXRFbGVtZW50SW1wbCAqYXBwbGV0RWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxBcHBsZXRFbGVt
ZW50SW1wbCAqPihuKTsKLSAgICAgICAgICAgIGlmIChhcHBsZXRFbGVtZW50LT5nZXRBcHBsZXRJ
bnN0YW5jZSgpKQotICAgICAgICAgICAgICAgIC8vIFRoZSBpbnN0YW5jZSBpcyBvd25lZCBieSB0
aGUgYXBwbGV0IGVsZW1lbnQuCi0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBSdW50aW1lT2Jq
ZWN0SW1wKGFwcGxldEVsZW1lbnQtPmdldEFwcGxldEluc3RhbmNlKCksIGZhbHNlKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgSURfRU1CRUQ6IHsKLSAgICAg
ICAgICAgIEhUTUxFbWJlZEVsZW1lbnRJbXBsICplbWJlZEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxI
VE1MRW1iZWRFbGVtZW50SW1wbCAqPihuKTsKLSAgICAgICAgICAgIGlmIChlbWJlZEVsZW1lbnQt
PmdldEVtYmVkSW5zdGFuY2UoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFJ1bnRpbWVP
YmplY3RJbXAoZW1iZWRFbGVtZW50LT5nZXRFbWJlZEluc3RhbmNlKCksIGZhbHNlKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgSURfT0JKRUNUOiB7Ci0gICAg
ICAgICAgICBIVE1MT2JqZWN0RWxlbWVudEltcGwgKm9iamVjdEVsZW1lbnQgPSBzdGF0aWNfY2Fz
dDxIVE1MT2JqZWN0RWxlbWVudEltcGwgKj4obik7Ci0gICAgICAgICAgICBpZiAob2JqZWN0RWxl
bWVudC0+Z2V0T2JqZWN0SW5zdGFuY2UoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFJ1
bnRpbWVPYmplY3RJbXAob2JqZWN0RWxlbWVudC0+Z2V0T2JqZWN0SW5zdGFuY2UoKSwgZmFsc2Up
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKyAgICBpZiAobi0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OmFwcGxldCgpKSkgeworICAgICAgICBIVE1MQXBwbGV0RWxlbWVudEltcGwgKmFw
cGxldEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MQXBwbGV0RWxlbWVudEltcGwgKj4obik7Cisg
ICAgICAgIGlmIChhcHBsZXRFbGVtZW50LT5nZXRBcHBsZXRJbnN0YW5jZSgpKQorICAgICAgICAg
ICAgLy8gVGhlIGluc3RhbmNlIGlzIG93bmVkIGJ5IHRoZSBhcHBsZXQgZWxlbWVudC4KKyAgICAg
ICAgICAgIHJldHVybiBuZXcgUnVudGltZU9iamVjdEltcChhcHBsZXRFbGVtZW50LT5nZXRBcHBs
ZXRJbnN0YW5jZSgpLCBmYWxzZSk7CisgICAgfQorICAgIGVsc2UgaWYgKG4tPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjplbWJlZCgpKSkgeworICAgICAgICBIVE1MRW1iZWRFbGVtZW50SW1wbCAqZW1i
ZWRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEVtYmVkRWxlbWVudEltcGwgKj4obik7CisgICAg
ICAgIGlmIChlbWJlZEVsZW1lbnQtPmdldEVtYmVkSW5zdGFuY2UoKSkKKyAgICAgICAgICAgIHJl
dHVybiBuZXcgUnVudGltZU9iamVjdEltcChlbWJlZEVsZW1lbnQtPmdldEVtYmVkSW5zdGFuY2Uo
KSwgZmFsc2UpOworICAgIH0KKyAgICBlbHNlIGlmIChuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
b2JqZWN0KCkpKSB7CisgICAgICAgIEhUTUxPYmplY3RFbGVtZW50SW1wbCAqb2JqZWN0RWxlbWVu
dCA9IHN0YXRpY19jYXN0PEhUTUxPYmplY3RFbGVtZW50SW1wbCAqPihuKTsKKyAgICAgICAgaWYg
KG9iamVjdEVsZW1lbnQtPmdldE9iamVjdEluc3RhbmNlKCkpCisgICAgICAgICAgICByZXR1cm4g
bmV3IFJ1bnRpbWVPYmplY3RJbXAob2JqZWN0RWxlbWVudC0+Z2V0T2JqZWN0SW5zdGFuY2UoKSwg
ZmFsc2UpOwogICAgIH0KICAgICAKICAgICAvLyBJZiB3ZSBkb24ndCBoYXZlIGEgcnVudGltZSBv
YmplY3QgcmV0dXJuIDAuCkluZGV4OiBraHRtbC9lY21hL2tqc19odG1sLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lY21hL2tqc19odG1sLmNwcCx2CnJl
dHJpZXZpbmcgcmV2aXNpb24gMS4xMTQKZGlmZiAtdSAtcCAtcjEuMTE0IGtodG1sL2VjbWEva2pz
X2h0bWwuY3BwCi0tLSBraHRtbC9lY21hL2tqc19odG1sLmNwcAkyMyBNYXkgMjAwNSAwMDo1Nzo0
MiAtMDAwMAkxLjExNAorKysga2h0bWwvZWNtYS9ranNfaHRtbC5jcHAJMTYgSnVuIDIwMDUgMjM6
MDI6MDYgLTAwMDAKQEAgLTQ2LDggKzQ2LDYgQEAKICNpbmNsdWRlICJranNfZXZlbnRzLmgiCiAj
aW5jbHVkZSAia2pzX3Byb3h5LmgiCiAKLSNpbmNsdWRlICJtaXNjL2h0bWx0YWdzLmgiCi0KICNp
bmNsdWRlICJyZW5kZXJpbmcvcmVuZGVyX2NhbnZhc2ltYWdlLmgiCiAjaW5jbHVkZSAicmVuZGVy
aW5nL3JlbmRlcl9vYmplY3QuaCIKICNpbmNsdWRlICJyZW5kZXJpbmcvcmVuZGVyX2xheWVyLmgi
CkBAIC0xMDksNiArMTA3LDcgQEAgdXNpbmcgRE9NOjpIVE1MTWFwRWxlbWVudEltcGw7CiB1c2lu
ZyBET006OkhUTUxNZW51RWxlbWVudEltcGw7CiB1c2luZyBET006OkhUTUxNZXRhRWxlbWVudElt
cGw7CiB1c2luZyBET006OkhUTUxNb2RFbGVtZW50SW1wbDsKK3VzaW5nIERPTTo6SFRNTE5hbWVz
OwogdXNpbmcgRE9NOjpIVE1MT0xpc3RFbGVtZW50SW1wbDsKIHVzaW5nIERPTTo6SFRNTE9iamVj
dEVsZW1lbnRJbXBsOwogdXNpbmcgRE9NOjpIVE1MT3B0R3JvdXBFbGVtZW50SW1wbDsKQEAgLTM1
Myw3ICszNTIsNyBAQCBWYWx1ZSBIVE1MRG9jdW1lbnQ6OnRyeUdldChFeGVjU3RhdGUgKmV4CiAg
IGlmICh2YWwpCiAgICAgcmV0dXJuIFZhbHVlKHZhbCk7CiAKLSAgSFRNTEJvZHlFbGVtZW50SW1w
bCAqYm9keUVsZW1lbnQgPSAoYm9keSAmJiBib2R5LT5pZCgpID09IElEX0JPRFkpID8gc3RhdGlj
X2Nhc3Q8SFRNTEJvZHlFbGVtZW50SW1wbCAqPihib2R5KSA6IDA7CisgIEhUTUxCb2R5RWxlbWVu
dEltcGwgKmJvZHlFbGVtZW50ID0gKGJvZHkgJiYgYm9keS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
OmJvZHkoKSkpID8gc3RhdGljX2Nhc3Q8SFRNTEJvZHlFbGVtZW50SW1wbCAqPihib2R5KSA6IDA7
CiAKICAgaWYgKGVudHJ5KSB7CiAgICAgc3dpdGNoIChlbnRyeS0+dmFsdWUpIHsKQEAgLTQyOCw3
ICs0MjcsNyBAQCB2b2lkIEtKUzo6SFRNTERvY3VtZW50OjpwdXRWYWx1ZShFeGVjU3RhCiAgIERP
TUV4Y2VwdGlvblRyYW5zbGF0b3IgZXhjZXB0aW9uKGV4ZWMpOwogICBIVE1MRG9jdW1lbnRJbXBs
ICZkb2MgPSAqc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50SW1wbCAqPihpbXBsKCkpOwogICBIVE1M
RWxlbWVudEltcGwgKmJvZHkgPSBkb2MuYm9keSgpOwotICBIVE1MQm9keUVsZW1lbnRJbXBsICpi
b2R5RWxlbWVudCA9IChib2R5ICYmIGJvZHktPmlkKCkgPT0gSURfQk9EWSkgPyBzdGF0aWNfY2Fz
dDxIVE1MQm9keUVsZW1lbnRJbXBsICo+KGJvZHkpIDogMDsKKyAgSFRNTEJvZHlFbGVtZW50SW1w
bCAqYm9keUVsZW1lbnQgPSAoYm9keSAmJiBib2R5LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Ym9k
eSgpKSkgPyBzdGF0aWNfY2FzdDxIVE1MQm9keUVsZW1lbnRJbXBsICo+KGJvZHkpIDogMDsKIAog
ICBzd2l0Y2ggKHRva2VuKSB7CiAgIGNhc2UgVGl0bGU6CkBAIC01ODIsMTMzICs1ODEsMjE4IEBA
IGNvbnN0IENsYXNzSW5mbyBLSlM6OkhUTUxFbGVtZW50OjptYXJxdWUKIAogY29uc3QgQ2xhc3NJ
bmZvKiBLSlM6OkhUTUxFbGVtZW50OjpjbGFzc0luZm8oKSBjb25zdAogewotICBzd2l0Y2ggKGlt
cGwoKS0+aWQoKSkgewotICBjYXNlIElEX0hUTUw6Ci0gICAgcmV0dXJuICZodG1sX2luZm87Ci0g
IGNhc2UgSURfSEVBRDoKLSAgICByZXR1cm4gJmhlYWRfaW5mbzsKLSAgY2FzZSBJRF9MSU5LOgot
ICAgIHJldHVybiAmbGlua19pbmZvOwotICBjYXNlIElEX1RJVExFOgotICAgIHJldHVybiAmdGl0
bGVfaW5mbzsKLSAgY2FzZSBJRF9NRVRBOgotICAgIHJldHVybiAmbWV0YV9pbmZvOwotICBjYXNl
IElEX0JBU0U6Ci0gICAgcmV0dXJuICZiYXNlX2luZm87Ci0gIGNhc2UgSURfSVNJTkRFWDoKLSAg
ICByZXR1cm4gJmlzSW5kZXhfaW5mbzsKLSAgY2FzZSBJRF9TVFlMRToKLSAgICByZXR1cm4gJnN0
eWxlX2luZm87Ci0gIGNhc2UgSURfQk9EWToKLSAgICByZXR1cm4gJmJvZHlfaW5mbzsKLSAgY2Fz
ZSBJRF9GT1JNOgotICAgIHJldHVybiAmZm9ybV9pbmZvOwotICBjYXNlIElEX1NFTEVDVDoKLSAg
ICByZXR1cm4gJnNlbGVjdF9pbmZvOwotICBjYXNlIElEX09QVEdST1VQOgotICAgIHJldHVybiAm
b3B0R3JvdXBfaW5mbzsKLSAgY2FzZSBJRF9PUFRJT046Ci0gICAgcmV0dXJuICZvcHRpb25faW5m
bzsKLSAgY2FzZSBJRF9JTlBVVDoKLSAgICByZXR1cm4gJmlucHV0X2luZm87Ci0gIGNhc2UgSURf
VEVYVEFSRUE6Ci0gICAgcmV0dXJuICZ0ZXh0QXJlYV9pbmZvOwotICBjYXNlIElEX0JVVFRPTjoK
LSAgICByZXR1cm4gJmJ1dHRvbl9pbmZvOwotICBjYXNlIElEX0xBQkVMOgotICAgIHJldHVybiAm
bGFiZWxfaW5mbzsKLSAgY2FzZSBJRF9GSUVMRFNFVDoKLSAgICByZXR1cm4gJmZpZWxkU2V0X2lu
Zm87Ci0gIGNhc2UgSURfTEVHRU5EOgotICAgIHJldHVybiAmbGVnZW5kX2luZm87Ci0gIGNhc2Ug
SURfVUw6Ci0gICAgcmV0dXJuICZ1bF9pbmZvOwotICBjYXNlIElEX09MOgotICAgIHJldHVybiAm
b2xfaW5mbzsKLSAgY2FzZSBJRF9ETDoKLSAgICByZXR1cm4gJmRsX2luZm87Ci0gIGNhc2UgSURf
RElSOgotICAgIHJldHVybiAmZGlyX2luZm87Ci0gIGNhc2UgSURfTUVOVToKLSAgICByZXR1cm4g
Jm1lbnVfaW5mbzsKLSAgY2FzZSBJRF9MSToKLSAgICByZXR1cm4gJmxpX2luZm87Ci0gIGNhc2Ug
SURfRElWOgotICAgIHJldHVybiAmZGl2X2luZm87Ci0gIGNhc2UgSURfUDoKLSAgICByZXR1cm4g
JnBfaW5mbzsKLSAgY2FzZSBJRF9IMToKLSAgY2FzZSBJRF9IMjoKLSAgY2FzZSBJRF9IMzoKLSAg
Y2FzZSBJRF9INDoKLSAgY2FzZSBJRF9INToKLSAgY2FzZSBJRF9INjoKLSAgICByZXR1cm4gJmhl
YWRpbmdfaW5mbzsKLSAgY2FzZSBJRF9CTE9DS1FVT1RFOgotICAgIHJldHVybiAmYmxvY2tRdW90
ZV9pbmZvOwotICBjYXNlIElEX1E6Ci0gICAgcmV0dXJuICZxX2luZm87Ci0gIGNhc2UgSURfUFJF
OgotICAgIHJldHVybiAmcHJlX2luZm87Ci0gIGNhc2UgSURfQlI6Ci0gICAgcmV0dXJuICZicl9p
bmZvOwotICBjYXNlIElEX0JBU0VGT05UOgotICAgIHJldHVybiAmYmFzZUZvbnRfaW5mbzsKLSAg
Y2FzZSBJRF9GT05UOgotICAgIHJldHVybiAmZm9udF9pbmZvOwotICBjYXNlIElEX0hSOgotICAg
IHJldHVybiAmaHJfaW5mbzsKLSAgY2FzZSBJRF9JTlM6Ci0gIGNhc2UgSURfREVMOgotICAgIHJl
dHVybiAmbW9kX2luZm87Ci0gIGNhc2UgSURfQToKLSAgICByZXR1cm4gJmFfaW5mbzsKLSAgY2Fz
ZSBJRF9DQU5WQVM6Ci0gICAgcmV0dXJuICZjYW52YXNfaW5mbzsKLSAgY2FzZSBJRF9JTUc6Ci0g
ICAgcmV0dXJuICZpbWdfaW5mbzsKLSAgY2FzZSBJRF9PQkpFQ1Q6Ci0gICAgcmV0dXJuICZvYmpl
Y3RfaW5mbzsKLSAgY2FzZSBJRF9QQVJBTToKLSAgICByZXR1cm4gJnBhcmFtX2luZm87Ci0gIGNh
c2UgSURfQVBQTEVUOgotICAgIHJldHVybiAmYXBwbGV0X2luZm87Ci0gIGNhc2UgSURfTUFQOgot
ICAgIHJldHVybiAmbWFwX2luZm87Ci0gIGNhc2UgSURfQVJFQToKLSAgICByZXR1cm4gJmFyZWFf
aW5mbzsKLSAgY2FzZSBJRF9TQ1JJUFQ6Ci0gICAgcmV0dXJuICZzY3JpcHRfaW5mbzsKLSAgY2Fz
ZSBJRF9UQUJMRToKLSAgICByZXR1cm4gJnRhYmxlX2luZm87Ci0gIGNhc2UgSURfQ0FQVElPTjoK
LSAgICByZXR1cm4gJmNhcHRpb25faW5mbzsKLSAgY2FzZSBJRF9DT0w6Ci0gICAgcmV0dXJuICZj
b2xfaW5mbzsKLSAgY2FzZSBJRF9USEVBRDoKLSAgICByZXR1cm4gJnRhYmxlc2VjdGlvbl9pbmZv
OwotICBjYXNlIElEX1RCT0RZOgotICAgIHJldHVybiAmdGFibGVzZWN0aW9uX2luZm87Ci0gIGNh
c2UgSURfVEZPT1Q6Ci0gICAgcmV0dXJuICZ0YWJsZXNlY3Rpb25faW5mbzsKLSAgY2FzZSBJRF9U
UjoKLSAgICByZXR1cm4gJnRyX2luZm87Ci0gIGNhc2UgSURfVEg6Ci0gICAgcmV0dXJuICZ0YWJs
ZWNlbGxfaW5mbzsKLSAgY2FzZSBJRF9URDoKLSAgICByZXR1cm4gJnRhYmxlY2VsbF9pbmZvOwot
ICBjYXNlIElEX0ZSQU1FU0VUOgotICAgIHJldHVybiAmZnJhbWVTZXRfaW5mbzsKLSAgY2FzZSBJ
RF9GUkFNRToKLSAgICByZXR1cm4gJmZyYW1lX2luZm87Ci0gIGNhc2UgSURfSUZSQU1FOgotICAg
IHJldHVybiAmaUZyYW1lX2luZm87Ci0gIGNhc2UgSURfTUFSUVVFRToKLSAgICByZXR1cm4gJm1h
cnF1ZWVfaW5mbzsKLSAgZGVmYXVsdDoKKyAgICAvLyBXZSBhbHJlYWR5IGtub3cgd2UgaGF2ZSBh
biBIVE1MIGVsZW1lbnQsIHNvIHdlIG9ubHkgbmVlZCB0byBjb21wYXJlIHRoZSBsb2NhbE5hbWUg
Y29tcG9uZW50IG9mIHRoZSBxdWFsaWZpZWQgbmFtZS4KKyAgICBzdGF0aWMgUVB0ckRpY3Q8Y29u
c3QgQ2xhc3NJbmZvPiBjbGFzc0luZm9EaWN0OworICAgIGlmIChjbGFzc0luZm9EaWN0LmlzRW1w
dHkoKSkgeworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmEoKS5sb2Nh
bE5hbWVQdHIoKSwgJmFfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxO
YW1lczo6YXBwbGV0KCkubG9jYWxOYW1lUHRyKCksICZhcHBsZXRfaW5mbyk7CisgICAgICAgIGNs
YXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6YXJlYSgpLmxvY2FsTmFtZVB0cigpLCAmYXJl
YV9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpiYXNlKCku
bG9jYWxOYW1lUHRyKCksICZiYXNlX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2Vy
dChIVE1MTmFtZXM6OmJhc2Vmb250KCkubG9jYWxOYW1lUHRyKCksICZiYXNlRm9udF9pbmZvKTsK
KyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpibG9ja3F1b3RlKCkubG9j
YWxOYW1lUHRyKCksICZibG9ja1F1b3RlX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmlu
c2VydChIVE1MTmFtZXM6OmJvZHkoKS5sb2NhbE5hbWVQdHIoKSwgJmJvZHlfaW5mbyk7CisgICAg
ICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6YnIoKS5sb2NhbE5hbWVQdHIoKSwg
JmJyX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmJ1dHRv
bigpLmxvY2FsTmFtZVB0cigpLCAmYnV0dG9uX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0
Lmluc2VydChIVE1MTmFtZXM6OmNhbnZhcygpLmxvY2FsTmFtZVB0cigpLCAmY2FudmFzX2luZm8p
OworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmNhcHRpb24oKS5sb2Nh
bE5hbWVQdHIoKSwgJmNhcHRpb25faW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0
KEhUTUxOYW1lczo6Y29sKCkubG9jYWxOYW1lUHRyKCksICZjb2xfaW5mbyk7CisgICAgICAgIGNs
YXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6Y29sZ3JvdXAoKS5sb2NhbE5hbWVQdHIoKSwg
JmNvbF9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpkZWwo
KS5sb2NhbE5hbWVQdHIoKSwgJm1vZF9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNl
cnQoSFRNTE5hbWVzOjpkaXIoKS5sb2NhbE5hbWVQdHIoKSwgJmRpcl9pbmZvKTsKKyAgICAgICAg
Y2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpkaXYoKS5sb2NhbE5hbWVQdHIoKSwgJmRp
dl9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpkbCgpLmxv
Y2FsTmFtZVB0cigpLCAmZGxfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhU
TUxOYW1lczo6ZmllbGRzZXQoKS5sb2NhbE5hbWVQdHIoKSwgJmZpZWxkU2V0X2luZm8pOworICAg
ICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmZvbnQoKS5sb2NhbE5hbWVQdHIo
KSwgJmZvbnRfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6
Zm9ybSgpLmxvY2FsTmFtZVB0cigpLCAmZm9ybV9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGlj
dC5pbnNlcnQoSFRNTE5hbWVzOjpmcmFtZSgpLmxvY2FsTmFtZVB0cigpLCAmZnJhbWVfaW5mbyk7
CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6ZnJhbWVzZXQoKS5sb2Nh
bE5hbWVQdHIoKSwgJmZyYW1lU2V0X2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2Vy
dChIVE1MTmFtZXM6OmgxKCkubG9jYWxOYW1lUHRyKCksICZoZWFkaW5nX2luZm8pOworICAgICAg
ICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmgyKCkubG9jYWxOYW1lUHRyKCksICZo
ZWFkaW5nX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Omgz
KCkubG9jYWxOYW1lUHRyKCksICZoZWFkaW5nX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0
Lmluc2VydChIVE1MTmFtZXM6Omg0KCkubG9jYWxOYW1lUHRyKCksICZoZWFkaW5nX2luZm8pOwor
ICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Omg1KCkubG9jYWxOYW1lUHRy
KCksICZoZWFkaW5nX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFt
ZXM6Omg2KCkubG9jYWxOYW1lUHRyKCksICZoZWFkaW5nX2luZm8pOworICAgICAgICBjbGFzc0lu
Zm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmhlYWQoKS5sb2NhbE5hbWVQdHIoKSwgJmhlYWRfaW5m
byk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6aHIoKS5sb2NhbE5h
bWVQdHIoKSwgJmhyX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFt
ZXM6Omh0bWwoKS5sb2NhbE5hbWVQdHIoKSwgJmh0bWxfaW5mbyk7CisgICAgICAgIGNsYXNzSW5m
b0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6aWZyYW1lKCkubG9jYWxOYW1lUHRyKCksICZpRnJhbWVf
aW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6aW1nKCkubG9j
YWxOYW1lUHRyKCksICZpbWdfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhU
TUxOYW1lczo6aW5wdXQoKS5sb2NhbE5hbWVQdHIoKSwgJmlucHV0X2luZm8pOworICAgICAgICBj
bGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmlucygpLmxvY2FsTmFtZVB0cigpLCAmbW9k
X2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmlzaW5kZXgo
KS5sb2NhbE5hbWVQdHIoKSwgJmlzSW5kZXhfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3Qu
aW5zZXJ0KEhUTUxOYW1lczo6bGFiZWwoKS5sb2NhbE5hbWVQdHIoKSwgJmxhYmVsX2luZm8pOwor
ICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmxlZ2VuZCgpLmxvY2FsTmFt
ZVB0cigpLCAmbGVnZW5kX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1M
TmFtZXM6OmxpKCkubG9jYWxOYW1lUHRyKCksICZsaV9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZv
RGljdC5pbnNlcnQoSFRNTE5hbWVzOjpsaW5rKCkubG9jYWxOYW1lUHRyKCksICZsaW5rX2luZm8p
OworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Om1hcCgpLmxvY2FsTmFt
ZVB0cigpLCAmbWFwX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFt
ZXM6Om1hcnF1ZWUoKS5sb2NhbE5hbWVQdHIoKSwgJm1hcnF1ZWVfaW5mbyk7CisgICAgICAgIGNs
YXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6bWVudSgpLmxvY2FsTmFtZVB0cigpLCAmbWVu
dV9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjptZXRhKCku
bG9jYWxOYW1lUHRyKCksICZtZXRhX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2Vy
dChIVE1MTmFtZXM6Om9iamVjdCgpLmxvY2FsTmFtZVB0cigpLCAmb2JqZWN0X2luZm8pOworICAg
ICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Om9sKCkubG9jYWxOYW1lUHRyKCks
ICZvbF9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpvcHRp
b24oKS5sb2NhbE5hbWVQdHIoKSwgJm9wdGlvbl9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGlj
dC5pbnNlcnQoSFRNTE5hbWVzOjpvcHRncm91cCgpLmxvY2FsTmFtZVB0cigpLCAmb3B0R3JvdXBf
aW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6cCgpLmxvY2Fs
TmFtZVB0cigpLCAmcF9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5h
bWVzOjpwYXJhbSgpLmxvY2FsTmFtZVB0cigpLCAmcGFyYW1faW5mbyk7CisgICAgICAgIGNsYXNz
SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6cHJlKCkubG9jYWxOYW1lUHRyKCksICZwcmVfaW5m
byk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6cSgpLmxvY2FsTmFt
ZVB0cigpLCAmcV9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVz
OjpzY3JpcHQoKS5sb2NhbE5hbWVQdHIoKSwgJnNjcmlwdF9pbmZvKTsKKyAgICAgICAgY2xhc3NJ
bmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpzZWxlY3QoKS5sb2NhbE5hbWVQdHIoKSwgJnNlbGVj
dF9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpzdHlsZSgp
LmxvY2FsTmFtZVB0cigpLCAmc3R5bGVfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5z
ZXJ0KEhUTUxOYW1lczo6dGFibGUoKS5sb2NhbE5hbWVQdHIoKSwgJnRhYmxlX2luZm8pOworICAg
ICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OnRib2R5KCkubG9jYWxOYW1lUHRy
KCksICZ0YWJsZXNlY3Rpb25faW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhU
TUxOYW1lczo6dGQoKS5sb2NhbE5hbWVQdHIoKSwgJnRhYmxlY2VsbF9pbmZvKTsKKyAgICAgICAg
Y2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjp0ZXh0YXJlYSgpLmxvY2FsTmFtZVB0cigp
LCAmdGV4dEFyZWFfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1l
czo6dGgoKS5sb2NhbE5hbWVQdHIoKSwgJnRhYmxlY2VsbF9pbmZvKTsKKyAgICAgICAgY2xhc3NJ
bmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjp0aGVhZCgpLmxvY2FsTmFtZVB0cigpLCAmdGFibGVz
ZWN0aW9uX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OnRm
b290KCkubG9jYWxOYW1lUHRyKCksICZ0YWJsZXNlY3Rpb25faW5mbyk7CisgICAgICAgIGNsYXNz
SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6dGl0bGUoKS5sb2NhbE5hbWVQdHIoKSwgJnRpdGxl
X2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OnRyKCkubG9j
YWxOYW1lUHRyKCksICZ0cl9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRN
TE5hbWVzOjp1bCgpLmxvY2FsTmFtZVB0cigpLCAmdWxfaW5mbyk7CisgICAgfQorICAgIAorICAg
IEhUTUxFbGVtZW50SW1wbCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCo+
KGltcGwoKSk7CisgICAgY29uc3QgQ2xhc3NJbmZvKiByZXN1bHQgPSBjbGFzc0luZm9EaWN0LmZp
bmQoZWxlbWVudC0+bG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSk7CisgICAgaWYgKHJlc3Vs
dCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICByZXR1cm4gJmluZm87Ci0gIH0KIH0KKwor
Y29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6Omh0bWxfZ2V0c2V0ID0g
eyAmSFRNTEVsZW1lbnQ6Omh0bWxHZXR0ZXIsICZIVE1MRWxlbWVudDo6aHRtbFNldHRlciB9Owor
Y29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmhlYWRfZ2V0c2V0ID0g
eyAmSFRNTEVsZW1lbnQ6OmhlYWRHZXR0ZXIsICZIVE1MRWxlbWVudDo6aGVhZFNldHRlciB9Owor
Y29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmxpbmtfZ2V0c2V0ID0g
eyAmSFRNTEVsZW1lbnQ6OmxpbmtHZXR0ZXIsICZIVE1MRWxlbWVudDo6bGlua1NldHRlciB9Owor
Y29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OnRpdGxlX2dldHNldCA9
IHsgJkhUTUxFbGVtZW50Ojp0aXRsZUdldHRlciwgJkhUTUxFbGVtZW50Ojp0aXRsZVNldHRlciB9
OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6Om1ldGFfZ2V0c2V0
ID0geyAmSFRNTEVsZW1lbnQ6Om1ldGFHZXR0ZXIsICZIVE1MRWxlbWVudDo6bWV0YVNldHRlciB9
OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmJhc2VfZ2V0c2V0
ID0geyAmSFRNTEVsZW1lbnQ6OmJhc2VHZXR0ZXIsICZIVE1MRWxlbWVudDo6YmFzZVNldHRlciB9
OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmlzSW5kZXhfZ2V0
c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmlzSW5kZXhHZXR0ZXIsICZIVE1MRWxlbWVudDo6aXNJbmRl
eFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OnN0
eWxlX2dldHNldCA9IHsgJkhUTUxFbGVtZW50OjpzdHlsZUdldHRlciwgJkhUTUxFbGVtZW50Ojpz
dHlsZVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6
OmJvZHlfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmJvZHlHZXR0ZXIsICZIVE1MRWxlbWVudDo6
Ym9keVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6
OmZvcm1fZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmZvcm1HZXR0ZXIsICZIVE1MRWxlbWVudDo6
Zm9ybVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6
OnNlbGVjdF9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6c2VsZWN0R2V0dGVyLCAmSFRNTEVsZW1l
bnQ6OnNlbGVjdFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVs
ZW1lbnQ6Om9wdEdyb3VwX2dldHNldCA9IHsgJkhUTUxFbGVtZW50OjpvcHRHcm91cEdldHRlciwg
JkhUTUxFbGVtZW50OjpvcHRHcm91cFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNl
dEluZm8gSFRNTEVsZW1lbnQ6Om9wdGlvbl9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6b3B0aW9u
R2V0dGVyLCAmSFRNTEVsZW1lbnQ6Om9wdGlvblNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6
OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmlucHV0X2dldHNldCA9IHsgJkhUTUxFbGVtZW50Ojpp
bnB1dEdldHRlciwgJkhUTUxFbGVtZW50OjppbnB1dFNldHRlciB9OworY29uc3QgSFRNTEVsZW1l
bnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OnRleHRBcmVhX2dldHNldCA9IHsgJkhUTUxFbGVt
ZW50Ojp0ZXh0QXJlYUdldHRlciwgJkhUTUxFbGVtZW50Ojp0ZXh0QXJlYVNldHRlciB9OworY29u
c3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmJ1dHRvbl9nZXRzZXQgPSB7
ICZIVE1MRWxlbWVudDo6YnV0dG9uR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmJ1dHRvblNldHRlciB9
OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmxhYmVsX2dldHNl
dCA9IHsgJkhUTUxFbGVtZW50OjpsYWJlbEdldHRlciwgJkhUTUxFbGVtZW50OjpsYWJlbFNldHRl
ciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmZpZWxkU2V0
X2dldHNldCA9IHsgJkhUTUxFbGVtZW50OjpmaWVsZFNldEdldHRlciwgJkhUTUxFbGVtZW50Ojpm
aWVsZFNldFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1l
bnQ6OmxlZ2VuZF9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6bGVnZW5kR2V0dGVyLCAmSFRNTEVs
ZW1lbnQ6OmxlZ2VuZFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRN
TEVsZW1lbnQ6OnVsX2dldHNldCA9IHsgJkhUTUxFbGVtZW50Ojp1TGlzdEdldHRlciwgJkhUTUxF
bGVtZW50Ojp1TGlzdFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRN
TEVsZW1lbnQ6Om9sX2dldHNldCA9IHsgJkhUTUxFbGVtZW50OjpvTGlzdEdldHRlciwgJkhUTUxF
bGVtZW50OjpvTGlzdFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRN
TEVsZW1lbnQ6OmRsX2dldHNldCA9IHsgJkhUTUxFbGVtZW50OjpkTGlzdEdldHRlciwgJkhUTUxF
bGVtZW50OjpkTGlzdFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRN
TEVsZW1lbnQ6OmRpcl9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6ZGlyR2V0dGVyLCAmSFRNTEVs
ZW1lbnQ6OmRpclNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVs
ZW1lbnQ6Om1lbnVfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6Om1lbnVHZXR0ZXIsICZIVE1MRWxl
bWVudDo6bWVudVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVs
ZW1lbnQ6OmxpX2dldHNldCA9IHsgJkhUTUxFbGVtZW50OjpsaUdldHRlciwgJkhUTUxFbGVtZW50
OjpsaVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6
OmRpdl9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6ZGl2R2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmRp
dlNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OnBf
Z2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OnBhcmFncmFwaEdldHRlciwgJkhUTUxFbGVtZW50Ojpw
YXJhZ3JhcGhTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVt
ZW50OjpoZWFkaW5nX2dldHNldCA9IHsgJkhUTUxFbGVtZW50OjpoZWFkaW5nR2V0dGVyLCAmSFRN
TEVsZW1lbnQ6OmhlYWRpbmdTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZv
IEhUTUxFbGVtZW50OjpibG9ja1F1b3RlX2dldHNldCA9IHsgJkhUTUxFbGVtZW50OjpibG9ja1F1
b3RlR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmJsb2NrUXVvdGVTZXR0ZXIgfTsKK2NvbnN0IEhUTUxF
bGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjpxX2dldHNldCA9IHsgJkhUTUxFbGVtZW50
OjpxdW90ZUdldHRlciwgJkhUTUxFbGVtZW50OjpxdW90ZVNldHRlciB9OworY29uc3QgSFRNTEVs
ZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OnByZV9nZXRzZXQgPSB7ICZIVE1MRWxlbWVu
dDo6cHJlR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OnByZVNldHRlciB9OworY29uc3QgSFRNTEVsZW1l
bnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmJyX2dldHNldCA9IHsgJkhUTUxFbGVtZW50Ojpi
ckdldHRlciwgJkhUTUxFbGVtZW50OjpiclNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6Okdl
dFNldEluZm8gSFRNTEVsZW1lbnQ6OmJhc2VGb250X2dldHNldCA9IHsgJkhUTUxFbGVtZW50Ojpi
YXNlRm9udEdldHRlciwgJkhUTUxFbGVtZW50OjpiYXNlRm9udFNldHRlciB9OworY29uc3QgSFRN
TEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmZvbnRfZ2V0c2V0ID0geyAmSFRNTEVs
ZW1lbnQ6OmZvbnRHZXR0ZXIsICZIVE1MRWxlbWVudDo6Zm9udFNldHRlciB9OworY29uc3QgSFRN
TEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmhyX2dldHNldCA9IHsgJkhUTUxFbGVt
ZW50OjpockdldHRlciwgJkhUTUxFbGVtZW50OjpoclNldHRlciB9OworY29uc3QgSFRNTEVsZW1l
bnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6Om1vZF9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6
bW9kR2V0dGVyLCAmSFRNTEVsZW1lbnQ6Om1vZFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6
OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmFfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmFuY2hv
ckdldHRlciwgJkhUTUxFbGVtZW50OjphbmNob3JTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50
OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjpjYW52YXNfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6
OmltYWdlR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmltYWdlU2V0dGVyIH07Citjb25zdCBIVE1MRWxl
bWVudDo6R2V0U2V0SW5mbyBIVE1MRWxlbWVudDo6aW1nX2dldHNldCA9IHsgJkhUTUxFbGVtZW50
OjppbWFnZUdldHRlciwgJkhUTUxFbGVtZW50OjppbWFnZVNldHRlciB9OworY29uc3QgSFRNTEVs
ZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6Om9iamVjdF9nZXRzZXQgPSB7ICZIVE1MRWxl
bWVudDo6b2JqZWN0R2V0dGVyLCAmSFRNTEVsZW1lbnQ6Om9iamVjdFNldHRlciB9OworY29uc3Qg
SFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OnBhcmFtX2dldHNldCA9IHsgJkhU
TUxFbGVtZW50OjpwYXJhbUdldHRlciwgJkhUTUxFbGVtZW50OjpwYXJhbVNldHRlciB9OworY29u
c3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmFwcGxldF9nZXRzZXQgPSB7
ICZIVE1MRWxlbWVudDo6YXBwbGV0R2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmFwcGxldFNldHRlciB9
OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6Om1hcF9nZXRzZXQg
PSB7ICZIVE1MRWxlbWVudDo6bWFwR2V0dGVyLCAmSFRNTEVsZW1lbnQ6Om1hcFNldHRlciB9Owor
Y29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmFyZWFfZ2V0c2V0ID0g
eyAmSFRNTEVsZW1lbnQ6OmFyZWFHZXR0ZXIsICZIVE1MRWxlbWVudDo6YXJlYVNldHRlciB9Owor
Y29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OnNjcmlwdF9nZXRzZXQg
PSB7ICZIVE1MRWxlbWVudDo6c2NyaXB0R2V0dGVyLCAmSFRNTEVsZW1lbnQ6OnNjcmlwdFNldHRl
ciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OnRhYmxlX2dl
dHNldCA9IHsgJkhUTUxFbGVtZW50Ojp0YWJsZUdldHRlciwgJkhUTUxFbGVtZW50Ojp0YWJsZVNl
dHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmNhcHRp
b25fZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OnRhYmxlQ2FwdGlvbkdldHRlciwgJkhUTUxFbGVt
ZW50Ojp0YWJsZUNhcHRpb25TZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZv
IEhUTUxFbGVtZW50Ojpjb2xfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OnRhYmxlQ29sR2V0dGVy
LCAmSFRNTEVsZW1lbnQ6OnRhYmxlQ29sU2V0dGVyIH07Citjb25zdCBIVE1MRWxlbWVudDo6R2V0
U2V0SW5mbyBIVE1MRWxlbWVudDo6dGFibGVzZWN0aW9uX2dldHNldCA9IHsgJkhUTUxFbGVtZW50
Ojp0YWJsZVNlY3Rpb25HZXR0ZXIsICZIVE1MRWxlbWVudDo6dGFibGVTZWN0aW9uU2V0dGVyIH07
Citjb25zdCBIVE1MRWxlbWVudDo6R2V0U2V0SW5mbyBIVE1MRWxlbWVudDo6dHJfZ2V0c2V0ID0g
eyAmSFRNTEVsZW1lbnQ6OnRhYmxlUm93R2V0dGVyLCAmSFRNTEVsZW1lbnQ6OnRhYmxlUm93U2V0
dGVyIH07Citjb25zdCBIVE1MRWxlbWVudDo6R2V0U2V0SW5mbyBIVE1MRWxlbWVudDo6dGFibGVj
ZWxsX2dldHNldCA9IHsgJkhUTUxFbGVtZW50Ojp0YWJsZUNlbGxHZXR0ZXIsICZIVE1MRWxlbWVu
dDo6dGFibGVDZWxsU2V0dGVyIH07Citjb25zdCBIVE1MRWxlbWVudDo6R2V0U2V0SW5mbyBIVE1M
RWxlbWVudDo6ZnJhbWVTZXRfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmZyYW1lU2V0R2V0dGVy
LCAmSFRNTEVsZW1lbnQ6OmZyYW1lU2V0U2V0dGVyIH07Citjb25zdCBIVE1MRWxlbWVudDo6R2V0
U2V0SW5mbyBIVE1MRWxlbWVudDo6ZnJhbWVfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmZyYW1l
R2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmZyYW1lU2V0dGVyIH07Citjb25zdCBIVE1MRWxlbWVudDo6
R2V0U2V0SW5mbyBIVE1MRWxlbWVudDo6aUZyYW1lX2dldHNldCA9IHsgJkhUTUxFbGVtZW50Ojpp
RnJhbWVHZXR0ZXIsICZIVE1MRWxlbWVudDo6aUZyYW1lU2V0dGVyIH07Citjb25zdCBIVE1MRWxl
bWVudDo6R2V0U2V0SW5mbyBIVE1MRWxlbWVudDo6bWFycXVlZV9nZXRzZXQgPSB7ICZIVE1MRWxl
bWVudDo6bWFycXVlZUdldHRlciwgJkhUTUxFbGVtZW50OjptYXJxdWVlU2V0dGVyIH07CisKK2Nv
bnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvKiBIVE1MRWxlbWVudDo6Z2V0U2V0SW5mbygpIGNv
bnN0Cit7CisgICAgLy8gV2UgYWxyZWFkeSBrbm93IHdlIGhhdmUgYW4gSFRNTCBlbGVtZW50LCBz
byB3ZSBvbmx5IG5lZWQgdG8gY29tcGFyZSB0aGUgbG9jYWxOYW1lIGNvbXBvbmVudCBvZiB0aGUg
cXVhbGlmaWVkIG5hbWUuCisgICAgc3RhdGljIFFQdHJEaWN0PGNvbnN0IEhUTUxFbGVtZW50OjpH
ZXRTZXRJbmZvPiBnZXRTZXRJbmZvRGljdDsKKyAgICBpZiAoZ2V0U2V0SW5mb0RpY3QuaXNFbXB0
eSgpKSB7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmEoKS5sb2Nh
bE5hbWVQdHIoKSwgJmFfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhU
TUxOYW1lczo6YXBwbGV0KCkubG9jYWxOYW1lUHRyKCksICZhcHBsZXRfZ2V0c2V0KTsKKyAgICAg
ICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6YXJlYSgpLmxvY2FsTmFtZVB0cigp
LCAmYXJlYV9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVz
OjpiYXNlKCkubG9jYWxOYW1lUHRyKCksICZiYXNlX2dldHNldCk7CisgICAgICAgIGdldFNldElu
Zm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmJhc2Vmb250KCkubG9jYWxOYW1lUHRyKCksICZiYXNl
Rm9udF9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpi
bG9ja3F1b3RlKCkubG9jYWxOYW1lUHRyKCksICZibG9ja1F1b3RlX2dldHNldCk7IAorICAgICAg
ICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpib2R5KCkubG9jYWxOYW1lUHRyKCks
ICZib2R5X2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6
OmJyKCkubG9jYWxOYW1lUHRyKCksICZicl9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGlj
dC5pbnNlcnQoSFRNTE5hbWVzOjpidXR0b24oKS5sb2NhbE5hbWVQdHIoKSwgJmJ1dHRvbl9nZXRz
ZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpjYW52YXMoKS5s
b2NhbE5hbWVQdHIoKSwgJmNhbnZhc19nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5p
bnNlcnQoSFRNTE5hbWVzOjpjYXB0aW9uKCkubG9jYWxOYW1lUHRyKCksICZjYXB0aW9uX2dldHNl
dCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmNvbCgpLmxvY2Fs
TmFtZVB0cigpLCAmY29sX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChI
VE1MTmFtZXM6OmNvbGdyb3VwKCkubG9jYWxOYW1lUHRyKCksICZjb2xfZ2V0c2V0KTsKKyAgICAg
ICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6ZGVsKCkubG9jYWxOYW1lUHRyKCks
ICZtb2RfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6
ZGlyKCkubG9jYWxOYW1lUHRyKCksICZkaXJfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0Rp
Y3QuaW5zZXJ0KEhUTUxOYW1lczo6ZGl2KCkubG9jYWxOYW1lUHRyKCksICZkaXZfZ2V0c2V0KTsK
KyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6ZGwoKS5sb2NhbE5hbWVQ
dHIoKSwgJmRsX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFt
ZXM6OmZpZWxkc2V0KCkubG9jYWxOYW1lUHRyKCksICZmaWVsZFNldF9nZXRzZXQpOworICAgICAg
ICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpmb250KCkubG9jYWxOYW1lUHRyKCks
ICZmb250X2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6
OmZvcm0oKS5sb2NhbE5hbWVQdHIoKSwgJmZvcm1fZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5m
b0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6ZnJhbWUoKS5sb2NhbE5hbWVQdHIoKSwgJmZyYW1lX2dl
dHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmZyYW1lc2V0
KCkubG9jYWxOYW1lUHRyKCksICZmcmFtZVNldF9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZv
RGljdC5pbnNlcnQoSFRNTE5hbWVzOjpoMSgpLmxvY2FsTmFtZVB0cigpLCAmaGVhZGluZ19nZXRz
ZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpoMigpLmxvY2Fs
TmFtZVB0cigpLCAmaGVhZGluZ19nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNl
cnQoSFRNTE5hbWVzOjpoMygpLmxvY2FsTmFtZVB0cigpLCAmaGVhZGluZ19nZXRzZXQpOworICAg
ICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpoNCgpLmxvY2FsTmFtZVB0cigp
LCAmaGVhZGluZ19nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5h
bWVzOjpoNSgpLmxvY2FsTmFtZVB0cigpLCAmaGVhZGluZ19nZXRzZXQpOworICAgICAgICBnZXRT
ZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpoNigpLmxvY2FsTmFtZVB0cigpLCAmaGVhZGlu
Z19nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpoZWFk
KCkubG9jYWxOYW1lUHRyKCksICZoZWFkX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0
Lmluc2VydChIVE1MTmFtZXM6OmhyKCkubG9jYWxOYW1lUHRyKCksICZocl9nZXRzZXQpOyAKKyAg
ICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6aHRtbCgpLmxvY2FsTmFtZVB0
cigpLCAmaHRtbF9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5h
bWVzOjppZnJhbWUoKS5sb2NhbE5hbWVQdHIoKSwgJmlGcmFtZV9nZXRzZXQpOworICAgICAgICBn
ZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjppbWcoKS5sb2NhbE5hbWVQdHIoKSwgJmlt
Z19nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjppbnB1
dCgpLmxvY2FsTmFtZVB0cigpLCAmaW5wdXRfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0Rp
Y3QuaW5zZXJ0KEhUTUxOYW1lczo6aW5zKCkubG9jYWxOYW1lUHRyKCksICZtb2RfZ2V0c2V0KTsK
KyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6aXNpbmRleCgpLmxvY2Fs
TmFtZVB0cigpLCAmaXNJbmRleF9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNl
cnQoSFRNTE5hbWVzOjpsYWJlbCgpLmxvY2FsTmFtZVB0cigpLCAmbGFiZWxfZ2V0c2V0KTsKKyAg
ICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6bGVnZW5kKCkubG9jYWxOYW1l
UHRyKCksICZsZWdlbmRfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhU
TUxOYW1lczo6bGkoKS5sb2NhbE5hbWVQdHIoKSwgJmxpX2dldHNldCk7CisgICAgICAgIGdldFNl
dEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmxpbmsoKS5sb2NhbE5hbWVQdHIoKSwgJmxpbmtf
Z2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6bWFwKCku
bG9jYWxOYW1lUHRyKCksICZtYXBfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5z
ZXJ0KEhUTUxOYW1lczo6bWFycXVlZSgpLmxvY2FsTmFtZVB0cigpLCAmbWFycXVlZV9nZXRzZXQp
OworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjptZW51KCkubG9jYWxO
YW1lUHRyKCksICZtZW51X2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChI
VE1MTmFtZXM6Om1ldGEoKS5sb2NhbE5hbWVQdHIoKSwgJm1ldGFfZ2V0c2V0KTsKKyAgICAgICAg
Z2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6b2JqZWN0KCkubG9jYWxOYW1lUHRyKCks
ICZvYmplY3RfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1l
czo6b2woKS5sb2NhbE5hbWVQdHIoKSwgJm9sX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9E
aWN0Lmluc2VydChIVE1MTmFtZXM6Om9wdGlvbigpLmxvY2FsTmFtZVB0cigpLCAmb3B0aW9uX2dl
dHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Om9wdGdyb3Vw
KCkubG9jYWxOYW1lUHRyKCksICZvcHRHcm91cF9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZv
RGljdC5pbnNlcnQoSFRNTE5hbWVzOjpwKCkubG9jYWxOYW1lUHRyKCksICZwX2dldHNldCk7Cisg
ICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OnBhcmFtKCkubG9jYWxOYW1l
UHRyKCksICZwYXJhbV9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRN
TE5hbWVzOjpwcmUoKS5sb2NhbE5hbWVQdHIoKSwgJnByZV9nZXRzZXQpOworICAgICAgICBnZXRT
ZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpxKCkubG9jYWxOYW1lUHRyKCksICZxX2dldHNl
dCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OnNjcmlwdCgpLmxv
Y2FsTmFtZVB0cigpLCAmc2NyaXB0X2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmlu
c2VydChIVE1MTmFtZXM6OnNlbGVjdCgpLmxvY2FsTmFtZVB0cigpLCAmc2VsZWN0X2dldHNldCk7
CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OnN0eWxlKCkubG9jYWxO
YW1lUHRyKCksICZzdHlsZV9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQo
SFRNTE5hbWVzOjp0YWJsZSgpLmxvY2FsTmFtZVB0cigpLCAmdGFibGVfZ2V0c2V0KTsKKyAgICAg
ICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6dGJvZHkoKS5sb2NhbE5hbWVQdHIo
KSwgJnRhYmxlc2VjdGlvbl9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQo
SFRNTE5hbWVzOjp0ZCgpLmxvY2FsTmFtZVB0cigpLCAmdGFibGVjZWxsX2dldHNldCk7CisgICAg
ICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OnRleHRhcmVhKCkubG9jYWxOYW1l
UHRyKCksICZ0ZXh0QXJlYV9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQo
SFRNTE5hbWVzOjp0aCgpLmxvY2FsTmFtZVB0cigpLCAmdGFibGVjZWxsX2dldHNldCk7CisgICAg
ICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OnRoZWFkKCkubG9jYWxOYW1lUHRy
KCksICZ0YWJsZXNlY3Rpb25fZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0
KEhUTUxOYW1lczo6dGZvb3QoKS5sb2NhbE5hbWVQdHIoKSwgJnRhYmxlc2VjdGlvbl9nZXRzZXQp
OworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjp0aXRsZSgpLmxvY2Fs
TmFtZVB0cigpLCAmdGl0bGVfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0
KEhUTUxOYW1lczo6dHIoKS5sb2NhbE5hbWVQdHIoKSwgJnRyX2dldHNldCk7CisgICAgICAgIGdl
dFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OnVsKCkubG9jYWxOYW1lUHRyKCksICZ1bF9n
ZXRzZXQpOworICAgIH0KKyAgICAKKyAgICBIVE1MRWxlbWVudEltcGwqIGVsZW1lbnQgPSBzdGF0
aWNfY2FzdDxIVE1MRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIGNvbnN0IEhUTUxFbGVtZW50
OjpHZXRTZXRJbmZvKiByZXN1bHQgPSBnZXRTZXRJbmZvRGljdC5maW5kKGVsZW1lbnQtPmxvY2Fs
TmFtZSgpLmltcGxlbWVudGF0aW9uKCkpOworICAgIGlmIChyZXN1bHQpCisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgcmV0dXJuIDA7Cit9CisKIC8qCiBAYmVnaW4gSFRNTEVsZW1lbnRUYWJs
ZSAxNAogICBpZAkJS0pTOjpIVE1MRWxlbWVudDo6RWxlbWVudElkCURvbnREZWxldGUKQEAgLTEx
ODYsMzUgKzEyNzAsMzIgQEAgSFRNTEVsZW1lbnQ6OkhUTUxFbGVtZW50KEV4ZWNTdGF0ZSAqZXhl
YwogCiBWYWx1ZSBLSlM6OkhUTUxFbGVtZW50Ojp0cnlHZXQoRXhlY1N0YXRlICpleGVjLCBjb25z
dCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUpIGNvbnN0CiB7Ci0gIEhUTUxFbGVtZW50SW1wbCAm
ZWxlbWVudCA9ICpzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwgKj4oaW1wbCgpKTsKKyAgICBI
VE1MRWxlbWVudEltcGwgJmVsZW1lbnQgPSAqc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+
KGltcGwoKSk7CiAjaWZkZWYgS0pTX1ZFUkJPU0UKLSAga2REZWJ1Zyg2MDcwKSA8PCAiS0pTOjpI
VE1MRWxlbWVudDo6dHJ5R2V0ICIgPDwgcHJvcGVydHlOYW1lLnFzdHJpbmcoKSA8PCAiIHRoaXNU
YWc9IiA8PCBlbGVtZW50LnRhZ05hbWUoKS5zdHJpbmcoKSA8PCBlbmRsOworICAgIGtkRGVidWco
NjA3MCkgPDwgIktKUzo6SFRNTEVsZW1lbnQ6OnRyeUdldCAiIDw8IHByb3BlcnR5TmFtZS5xc3Ry
aW5nKCkgPDwgIiB0aGlzVGFnPSIgPDwgZWxlbWVudC50YWdOYW1lKCkuc3RyaW5nKCkgPDwgZW5k
bDsKICNlbmRpZgotICAvLyBGaXJzdCBsb29rIGF0IGR5bmFtaWMgcHJvcGVydGllcwotICBzd2l0
Y2ggKGVsZW1lbnQuaWQoKSkgewotICAgIGNhc2UgSURfRk9STTogewotICAgICAgSFRNTEZvcm1F
bGVtZW50SW1wbCAmZm9ybSA9IHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudEltcGwgJj4oZWxl
bWVudCk7Ci0gICAgICAvLyBDaGVjayBpZiB3ZSdyZSByZXRyaWV2aW5nIGFuIGVsZW1lbnQgKGJ5
IGluZGV4IG9yIGJ5IG5hbWUpCi0gICAgICBib29sIG9rOwotICAgICAgdWludCB1ID0gcHJvcGVy
dHlOYW1lLnRvVUxvbmcoJm9rKTsKLSAgICAgIGlmIChvaykKLSAgICAgICAgcmV0dXJuIGdldERP
TU5vZGUoZXhlYywgZm9ybS5lbGVtZW50cygpLT5pdGVtKHUpKTsKLSAgICAgIFZhbHVlSW1wICpu
YW1lZEl0ZW1zID0gSFRNTENvbGxlY3Rpb24oZXhlYywgZm9ybS5lbGVtZW50cygpLmdldCgpKS5n
ZXROYW1lZEl0ZW1zKGV4ZWMsIHByb3BlcnR5TmFtZSk7Ci0gICAgICBpZiAoIW5hbWVkSXRlbXMt
PmlzVW5kZWZpbmVkKCkpCi0gICAgICAgIHJldHVybiBuYW1lZEl0ZW1zOwotICAgIH0KLSAgICAg
IGJyZWFrOwotICAgIGNhc2UgSURfU0VMRUNUOiB7Ci0gICAgICBIVE1MU2VsZWN0RWxlbWVudElt
cGwgJnNlbGVjdCA9IHN0YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50SW1wbCAmPihlbGVtZW50
KTsKLSAgICAgIGJvb2wgb2s7Ci0gICAgICB1aW50IHUgPSBwcm9wZXJ0eU5hbWUudG9VTG9uZygm
b2spOwotICAgICAgaWYgKG9rKQotICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLCBzZWxl
Y3Qub3B0aW9uc0hUTUxDb2xsZWN0aW9uKCktPml0ZW0odSkpOyAvLyBub3Qgc3BlY2lmaWVkIGJ5
IERPTSg/KSBidXQgc3VwcG9ydGVkIGluIG5ldHNjYXBlL0lFCisgICAgLy8gRmlyc3QgbG9vayBh
dCBkeW5hbWljIHByb3BlcnRpZXMKKyAgICBpZiAoZWxlbWVudC5oYXNMb2NhbE5hbWUoSFRNTE5h
bWVzOjpmb3JtKCkpKSB7CisgICAgICAgIEhUTUxGb3JtRWxlbWVudEltcGwgJmZvcm0gPSBzdGF0
aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgICAgICAvLyBDaGVj
ayBpZiB3ZSdyZSByZXRyaWV2aW5nIGFuIGVsZW1lbnQgKGJ5IGluZGV4IG9yIGJ5IG5hbWUpCisg
ICAgICAgIGJvb2wgb2s7CisgICAgICAgIHVpbnQgdSA9IHByb3BlcnR5TmFtZS50b1VMb25nKCZv
ayk7CisgICAgICAgIGlmIChvaykKKyAgICAgICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMs
IGZvcm0uZWxlbWVudHMoKS0+aXRlbSh1KSk7CisgICAgICAgIFZhbHVlSW1wICpuYW1lZEl0ZW1z
ID0gSFRNTENvbGxlY3Rpb24oZXhlYywgZm9ybS5lbGVtZW50cygpLmdldCgpKS5nZXROYW1lZEl0
ZW1zKGV4ZWMsIHByb3BlcnR5TmFtZSk7CisgICAgICAgIGlmICghbmFtZWRJdGVtcy0+aXNVbmRl
ZmluZWQoKSkKKyAgICAgICAgICAgIHJldHVybiBuYW1lZEl0ZW1zOworICAgIH0KKyAgICBlbHNl
IGlmIChlbGVtZW50Lmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnNlbGVjdCgpKSkgeworICAgICAg
ICBIVE1MU2VsZWN0RWxlbWVudEltcGwgJnNlbGVjdCA9IHN0YXRpY19jYXN0PEhUTUxTZWxlY3RF
bGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICAgICAgYm9vbCBvazsKKyAgICAgICAgdWludCB1
ID0gcHJvcGVydHlOYW1lLnRvVUxvbmcoJm9rKTsKKyAgICAgICAgaWYgKG9rKQorICAgICAgICAg
ICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYywgc2VsZWN0Lm9wdGlvbnNIVE1MQ29sbGVjdGlvbigp
LT5pdGVtKHUpKTsgLy8gbm90IHNwZWNpZmllZCBieSBET00oPykgYnV0IHN1cHBvcnRlZCBpbiBu
ZXRzY2FwZS9JRQogICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgSURfRlJBTUVTRVQ6IHsK
KyAgICBlbHNlIGlmIChlbGVtZW50Lmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmZyYW1lc2V0KCkp
KSB7CiAgICAgICAgIE5vZGVJbXBsICpmcmFtZSA9IGVsZW1lbnQuY2hpbGRyZW4oKS0+bmFtZWRJ
dGVtKHByb3BlcnR5TmFtZS5zdHJpbmcoKSk7Ci0gICAgICAgIGlmIChmcmFtZSAmJiBmcmFtZS0+
aWQoKSA9PSBJRF9GUkFNRSkgeworICAgICAgICBpZiAoZnJhbWUgJiYgZnJhbWUtPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjpmcmFtZSgpKSkgewogICAgICAgICAgICAgRG9jdW1lbnRJbXBsKiBkb2Mg
PSBzdGF0aWNfY2FzdDxIVE1MRnJhbWVFbGVtZW50SW1wbCAqPihmcmFtZSktPmNvbnRlbnREb2N1
bWVudCgpOwogICAgICAgICAgICAgaWYgKGRvYykgewogICAgICAgICAgICAgICAgIEtIVE1MUGFy
dCogcGFydCA9IGRvYy0+cGFydCgpOwpAQCAtMTIyNyw3MyArMTMwOCw1NyBAQCBWYWx1ZSBLSlM6
OkhUTUxFbGVtZW50Ojp0cnlHZXQoRXhlY1N0YXRlCiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
ICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSURfRlJBTUU6Ci0gICAgY2FzZSBJRF9J
RlJBTUU6IHsKKyAgICBlbHNlIGlmIChlbGVtZW50Lmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmZy
YW1lKCkpIHx8IGVsZW1lbnQuaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6aWZyYW1lKCkpKSB7CiAg
ICAgICAgIERvY3VtZW50SW1wbCogZG9jID0gc3RhdGljX2Nhc3Q8SFRNTEZyYW1lRWxlbWVudElt
cGwgJj4oZWxlbWVudCkuY29udGVudERvY3VtZW50KCk7Ci0gICAgICAgIGlmICggZG9jICkgewor
ICAgICAgICBpZiAoZG9jKSB7CiAgICAgICAgICAgICBLSFRNTFBhcnQqIHBhcnQgPSBkb2MtPnBh
cnQoKTsKLSAgICAgICAgICAgIGlmICggcGFydCApIHsKKyAgICAgICAgICAgIGlmIChwYXJ0KSB7
CiAgICAgICAgICAgICAgIFdpbmRvdyAqd2luZG93ID0gV2luZG93OjpyZXRyaWV2ZVdpbmRvdyhw
YXJ0KTsKIAkgICAgICBpZiAod2luZG93ICYmIHdpbmRvdy0+aGFzUHJvcGVydHkoZXhlYywgcHJv
cGVydHlOYW1lKSkKICAgICAgICAgICAgICAgICByZXR1cm4gd2luZG93LT5nZXQoZXhlYywgcHJv
cGVydHlOYW1lKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICAgIGJyZWFr
OwogI2lmIEFQUExFX0NIQU5HRVMKLSAgICBjYXNlIElEX0VNQkVEOgotICAgIGNhc2UgSURfT0JK
RUNUOgotICAgIGNhc2UgSURfQVBQTEVUOiB7Ci0JaWYgKHByb3BlcnR5TmFtZSA9PSAiX19hcHBs
ZV9ydW50aW1lX29iamVjdCIpIHsKKyAgICBlbHNlIGlmIChlbGVtZW50Lmhhc0xvY2FsTmFtZShI
VE1MTmFtZXM6OmVtYmVkKCkpIHx8IGVsZW1lbnQuaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b2Jq
ZWN0KCkpIHx8CisgICAgICAgICAgICAgZWxlbWVudC5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjph
cHBsZXQoKSkpIHsKKwlpZiAocHJvcGVydHlOYW1lID09ICJfX2FwcGxlX3J1bnRpbWVfb2JqZWN0
IikKIAkgICAgcmV0dXJuIGdldFJ1bnRpbWVPYmplY3QoZXhlYywmZWxlbWVudCk7Ci0JfQotCiAJ
VmFsdWUgcnVudGltZU9iamVjdCA9IGdldFJ1bnRpbWVPYmplY3QoZXhlYywmZWxlbWVudCk7CiAJ
aWYgKCFydW50aW1lT2JqZWN0LmlzTnVsbCgpKSB7CiAJICAgIE9iamVjdEltcCAqaW1wID0gc3Rh
dGljX2Nhc3Q8T2JqZWN0SW1wICo+KHJ1bnRpbWVPYmplY3QuaW1wKCkpOwotCSAgICBpZiAoaW1w
LT5oYXNQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUpKSB7CisJICAgIGlmIChpbXAtPmhhc1By
b3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFtZSkpCiAJCXJldHVybiBpbXAtPmdldCAoZXhlYywgcHJv
cGVydHlOYW1lKTsKLQkgICAgfQogCX0KICAgICB9Ci0gICAgICBicmVhazsKICNlbmRpZgotICAg
IGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KIAotICBjb25zdCBIYXNoVGFibGUqIHRh
YmxlID0gY2xhc3NJbmZvKCktPnByb3BIYXNoVGFibGU7IC8vIGdldCB0aGUgcmlnaHQgaGFzaHRh
YmxlCi0gIGNvbnN0IEhhc2hFbnRyeSogZW50cnkgPSBMb29rdXA6OmZpbmRFbnRyeSh0YWJsZSwg
cHJvcGVydHlOYW1lKTsKLSAgaWYgKGVudHJ5KSB7Ci0gICAgaWYgKGVudHJ5LT5hdHRyICYgRnVu
Y3Rpb24pCi0gICAgICByZXR1cm4gbG9va3VwT3JDcmVhdGVGdW5jdGlvbjxLSlM6OkhUTUxFbGVt
ZW50RnVuY3Rpb24+KGV4ZWMsIHByb3BlcnR5TmFtZSwgdGhpcywgZW50cnktPnZhbHVlLCBlbnRy
eS0+cGFyYW1zLCBlbnRyeS0+YXR0cik7Ci0gICAgcmV0dXJuIGdldFZhbHVlUHJvcGVydHkoZXhl
YywgZW50cnktPnZhbHVlKTsKLSAgfQorICAgIGNvbnN0IEhhc2hUYWJsZSogdGFibGUgPSBjbGFz
c0luZm8oKS0+cHJvcEhhc2hUYWJsZTsgLy8gZ2V0IHRoZSByaWdodCBoYXNodGFibGUKKyAgICBj
b25zdCBIYXNoRW50cnkqIGVudHJ5ID0gTG9va3VwOjpmaW5kRW50cnkodGFibGUsIHByb3BlcnR5
TmFtZSk7CisgICAgaWYgKGVudHJ5KSB7CisgICAgICAgIGlmIChlbnRyeS0+YXR0ciAmIEZ1bmN0
aW9uKQorICAgICAgICAgICAgcmV0dXJuIGxvb2t1cE9yQ3JlYXRlRnVuY3Rpb248S0pTOjpIVE1M
RWxlbWVudEZ1bmN0aW9uPihleGVjLCBwcm9wZXJ0eU5hbWUsIHRoaXMsIGVudHJ5LT52YWx1ZSwg
ZW50cnktPnBhcmFtcywgZW50cnktPmF0dHIpOworICAgICAgICByZXR1cm4gZ2V0VmFsdWVQcm9w
ZXJ0eShleGVjLCBlbnRyeS0+dmFsdWUpOworICAgIH0KIAotICAvLyBCYXNlIEhUTUxFbGVtZW50
IHN0dWZmIG9yIHBhcmVudCBjbGFzcyBmb3J3YXJkLCBhcyB1c3VhbAotICByZXR1cm4gRE9NT2Jq
ZWN0TG9va3VwR2V0PEtKUzo6SFRNTEVsZW1lbnRGdW5jdGlvbiwgS0pTOjpIVE1MRWxlbWVudCwg
RE9NRWxlbWVudD4oZXhlYywgcHJvcGVydHlOYW1lLCAmSFRNTEVsZW1lbnRUYWJsZSwgdGhpcyk7
CisgICAgLy8gQmFzZSBIVE1MRWxlbWVudCBzdHVmZiBvciBwYXJlbnQgY2xhc3MgZm9yd2FyZCwg
YXMgdXN1YWwKKyAgICByZXR1cm4gRE9NT2JqZWN0TG9va3VwR2V0PEtKUzo6SFRNTEVsZW1lbnRG
dW5jdGlvbiwgS0pTOjpIVE1MRWxlbWVudCwgRE9NRWxlbWVudD4oZXhlYywgcHJvcGVydHlOYW1l
LCAmSFRNTEVsZW1lbnRUYWJsZSwgdGhpcyk7CiB9CiAKIGJvb2wgS0pTOjpIVE1MRWxlbWVudDo6
aW1wbGVtZW50c0NhbGwoKSBjb25zdAogewogICAgIEhUTUxFbGVtZW50SW1wbCAqZWxlbWVudCA9
IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCAqPihpbXBsKCkpOwotICAgIHN3aXRjaCAoZWxl
bWVudC0+aWQoKSkgewotCWNhc2UgSURfRU1CRUQ6Ci0JY2FzZSBJRF9PQkpFQ1Q6Ci0JY2FzZSBJ
RF9BUFBMRVQ6IHsKLQkJRG9jdW1lbnRJbXBsKiBkb2MgPSBlbGVtZW50LT5nZXREb2N1bWVudCgp
OwotCQlLSlNQcm94eSAqcHJveHkgPSBLSlNQcm94eTo6cHJveHkoZG9jLT5wYXJ0KCkpOwotCQlF
eGVjU3RhdGUgKmV4ZWMgPSBwcm94eS0+aW50ZXJwcmV0ZXIoKS0+Z2xvYmFsRXhlYygpOwotCQlW
YWx1ZSBydW50aW1lT2JqZWN0ID0gZ2V0UnVudGltZU9iamVjdChleGVjLGVsZW1lbnQpOwotCQlp
ZiAoIXJ1bnRpbWVPYmplY3QuaXNOdWxsKCkpIHsKLQkJICAgIE9iamVjdEltcCAqaW1wID0gc3Rh
dGljX2Nhc3Q8T2JqZWN0SW1wICo+KHJ1bnRpbWVPYmplY3QuaW1wKCkpOwotCQkgICAgcmV0dXJu
IGltcC0+aW1wbGVtZW50c0NhbGwgKCk7Ci0JCX0KLQkgICAgfQotCSAgICBicmVhazsKLQlkZWZh
dWx0OgotCSAgICBicmVhazsKKyAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
OmVtYmVkKCkpIHx8CisgICAgICAgIGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvYmpl
Y3QoKSkgfHwKKyAgICAgICAgZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmFwcGxldCgp
KSkgeworICAgCURvY3VtZW50SW1wbCogZG9jID0gZWxlbWVudC0+Z2V0RG9jdW1lbnQoKTsKKyAg
ICAgICAgS0pTUHJveHkgKnByb3h5ID0gS0pTUHJveHk6OnByb3h5KGRvYy0+cGFydCgpKTsKKyAg
ICAgICAgRXhlY1N0YXRlICpleGVjID0gcHJveHktPmludGVycHJldGVyKCktPmdsb2JhbEV4ZWMo
KTsKKyAgICAgICAgVmFsdWUgcnVudGltZU9iamVjdCA9IGdldFJ1bnRpbWVPYmplY3QoZXhlYyxl
bGVtZW50KTsKKyAgICAgICAgaWYgKCFydW50aW1lT2JqZWN0LmlzTnVsbCgpKSB7CisgICAgICAg
ICAgICBPYmplY3RJbXAgKmltcCA9IHN0YXRpY19jYXN0PE9iamVjdEltcCAqPihydW50aW1lT2Jq
ZWN0LmltcCgpKTsKKyAgICAgICAgICAgIHJldHVybiBpbXAtPmltcGxlbWVudHNDYWxsICgpOwor
ICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTEzMDEsNzg2ICsxMzY2
LDg3NyBAQCBib29sIEtKUzo6SFRNTEVsZW1lbnQ6OmltcGxlbWVudHNDYWxsKCkgCiBWYWx1ZSBL
SlM6OkhUTUxFbGVtZW50OjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBj
b25zdCBMaXN0JmFyZ3MpCiB7CiAgICAgSFRNTEVsZW1lbnRJbXBsICplbGVtZW50ID0gc3RhdGlj
X2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KGltcGwoKSk7Ci0gICAgc3dpdGNoIChlbGVtZW50LT5p
ZCgpKSB7Ci0JY2FzZSBJRF9FTUJFRDoKLQljYXNlIElEX09CSkVDVDoKLQljYXNlIElEX0FQUExF
VDogewotCQlWYWx1ZSBydW50aW1lT2JqZWN0ID0gZ2V0UnVudGltZU9iamVjdChleGVjLGVsZW1l
bnQpOwotCQlpZiAoIXJ1bnRpbWVPYmplY3QuaXNOdWxsKCkpIHsKLQkJICAgIE9iamVjdEltcCAq
aW1wID0gc3RhdGljX2Nhc3Q8T2JqZWN0SW1wICo+KHJ1bnRpbWVPYmplY3QuaW1wKCkpOwotCQkg
ICAgcmV0dXJuIGltcC0+Y2FsbCAoZXhlYywgdGhpc09iaiwgYXJncyk7Ci0JCX0KLQkgICAgfQot
CSAgICBicmVhazsKLQlkZWZhdWx0OgotCSAgICBicmVhazsKKyAgICBpZiAoZWxlbWVudC0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OmVtYmVkKCkpIHx8CisgICAgICAgIGVsZW1lbnQtPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjpvYmplY3QoKSkgfHwKKyAgICAgICAgZWxlbWVudC0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OmFwcGxldCgpKSkgeworICAgICAgICBWYWx1ZSBydW50aW1lT2JqZWN0ID0gZ2V0
UnVudGltZU9iamVjdChleGVjLGVsZW1lbnQpOworICAgICAgICBpZiAoIXJ1bnRpbWVPYmplY3Qu
aXNOdWxsKCkpIHsKKyAgICAgICAgICAgIE9iamVjdEltcCAqaW1wID0gc3RhdGljX2Nhc3Q8T2Jq
ZWN0SW1wICo+KHJ1bnRpbWVPYmplY3QuaW1wKCkpOworICAgICAgICAgICAgcmV0dXJuIGltcC0+
Y2FsbCAoZXhlYywgdGhpc09iaiwgYXJncyk7CisgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJu
IFVuZGVmaW5lZCgpOwogfQogCi1WYWx1ZSBLSlM6OkhUTUxFbGVtZW50OjpnZXRWYWx1ZVByb3Bl
cnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAotewotICBIVE1MRWxlbWVudElt
cGwgJmVsZW1lbnQgPSAqc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KGltcGwoKSk7Ci0g
IHN3aXRjaCAoZWxlbWVudC5pZCgpKSB7Ci0gIGNhc2UgSURfSFRNTDogewotICAgIEhUTUxIdG1s
RWxlbWVudEltcGwgJmh0bWwgPSBzdGF0aWNfY2FzdDxIVE1MSHRtbEVsZW1lbnRJbXBsICY+KGVs
ZW1lbnQpOwotICAgIGlmICAgICAgKHRva2VuID09IEh0bWxWZXJzaW9uKSAgICAgICAgIHJldHVy
biBTdHJpbmcoaHRtbC52ZXJzaW9uKCkpOwotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX0hFQUQ6
IHsKLSAgICBIVE1MSGVhZEVsZW1lbnRJbXBsICZoZWFkID0gc3RhdGljX2Nhc3Q8SFRNTEhlYWRF
bGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICBpZiAgICAgICh0b2tlbiA9PSBIZWFkUHJvZmls
ZSkgICAgICAgICByZXR1cm4gU3RyaW5nKGhlYWQucHJvZmlsZSgpKTsKLSAgfQotICBicmVhazsK
LSAgY2FzZSBJRF9MSU5LOiB7Ci0gICAgSFRNTExpbmtFbGVtZW50SW1wbCAmbGluayA9IHN0YXRp
Y19jYXN0PEhUTUxMaW5rRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tl
bikgewotICAgIGNhc2UgTGlua0Rpc2FibGVkOiAgICAgICAgcmV0dXJuIEJvb2xlYW4obGluay5k
aXNhYmxlZCgpKTsKLSAgICBjYXNlIExpbmtDaGFyc2V0OiAgICAgICAgIHJldHVybiBTdHJpbmco
bGluay5jaGFyc2V0KCkpOwotICAgIGNhc2UgTGlua0hyZWY6ICAgICAgICAgICAgcmV0dXJuIFN0
cmluZyhsaW5rLmhyZWYoKSk7Ci0gICAgY2FzZSBMaW5rSHJlZkxhbmc6ICAgICAgICByZXR1cm4g
U3RyaW5nKGxpbmsuaHJlZmxhbmcoKSk7Ci0gICAgY2FzZSBMaW5rTWVkaWE6ICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKGxpbmsubWVkaWEoKSk7Ci0gICAgY2FzZSBMaW5rUmVsOiAgICAgICAgICAg
ICByZXR1cm4gU3RyaW5nKGxpbmsucmVsKCkpOwotICAgIGNhc2UgTGlua1JldjogICAgICAgICAg
ICAgcmV0dXJuIFN0cmluZyhsaW5rLnJldigpKTsKLSAgICBjYXNlIExpbmtUYXJnZXQ6ICAgICAg
ICAgIHJldHVybiBTdHJpbmcobGluay50YXJnZXQoKSk7Ci0gICAgY2FzZSBMaW5rVHlwZTogICAg
ICAgICAgICByZXR1cm4gU3RyaW5nKGxpbmsudHlwZSgpKTsKLSAgICBjYXNlIExpbmtTaGVldDog
ICAgICAgICAgIHJldHVybiBnZXRET01TdHlsZVNoZWV0KGV4ZWMsIGxpbmsuc2hlZXQoKSk7Ci0g
ICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX1RJVExFOiB7Ci0gICAgSFRNTFRpdGxlRWxl
bWVudEltcGwgJnRpdGxlID0gc3RhdGljX2Nhc3Q8SFRNTFRpdGxlRWxlbWVudEltcGwgJj4oZWxl
bWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgVGl0bGVUZXh0OiAgICAgICAg
ICAgICAgICAgcmV0dXJuIFN0cmluZyh0aXRsZS50ZXh0KCkpOwotICAgIH0KLSAgfQotICBicmVh
azsKLSAgY2FzZSBJRF9NRVRBOiB7Ci0gICAgSFRNTE1ldGFFbGVtZW50SW1wbCAmbWV0YSA9IHN0
YXRpY19jYXN0PEhUTUxNZXRhRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0
b2tlbikgewotICAgIGNhc2UgTWV0YUNvbnRlbnQ6ICAgICAgICAgcmV0dXJuIFN0cmluZyhtZXRh
LmNvbnRlbnQoKSk7Ci0gICAgY2FzZSBNZXRhSHR0cEVxdWl2OiAgICAgICByZXR1cm4gU3RyaW5n
KG1ldGEuaHR0cEVxdWl2KCkpOwotICAgIGNhc2UgTWV0YU5hbWU6ICAgICAgICAgICAgcmV0dXJu
IFN0cmluZyhtZXRhLm5hbWUoKSk7Ci0gICAgY2FzZSBNZXRhU2NoZW1lOiAgICAgICAgICByZXR1
cm4gU3RyaW5nKG1ldGEuc2NoZW1lKCkpOwotICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJ
RF9CQVNFOiB7Ci0gICAgSFRNTEJhc2VFbGVtZW50SW1wbCAmYmFzZSA9IHN0YXRpY19jYXN0PEhU
TUxCYXNlRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAg
IGNhc2UgQmFzZUhyZWY6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhiYXNlLmhyZWYoKSk7Ci0g
ICAgY2FzZSBCYXNlVGFyZ2V0OiAgICAgICAgICByZXR1cm4gU3RyaW5nKGJhc2UudGFyZ2V0KCkp
OwotICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9JU0lOREVYOiB7Ci0gICAgSFRNTElz
SW5kZXhFbGVtZW50SW1wbCAmaXNpbmRleCA9IHN0YXRpY19jYXN0PEhUTUxJc0luZGV4RWxlbWVu
dEltcGwgJj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgSXNJbmRl
eEZvcm06ICAgICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYywgaXNpbmRleC5mb3JtKCkp
OyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVudAotICAgIGNhc2UgSXNJbmRleFByb21wdDogICAgICAg
ICAgcmV0dXJuIFN0cmluZyhpc2luZGV4LnByb21wdCgpKTsKLSAgICB9Ci0gIH0KLSAgYnJlYWs7
Ci0gIGNhc2UgSURfU1RZTEU6IHsKLSAgICBIVE1MU3R5bGVFbGVtZW50SW1wbCAmc3R5bGUgPSBz
dGF0aWNfY2FzdDxIVE1MU3R5bGVFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICBzd2l0Y2gg
KHRva2VuKSB7Ci0gICAgY2FzZSBTdHlsZURpc2FibGVkOiAgICAgICAgcmV0dXJuIEJvb2xlYW4o
c3R5bGUuZGlzYWJsZWQoKSk7Ci0gICAgY2FzZSBTdHlsZU1lZGlhOiAgICAgICAgICAgcmV0dXJu
IFN0cmluZyhzdHlsZS5tZWRpYSgpKTsKLSAgICBjYXNlIFN0eWxlVHlwZTogICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKHN0eWxlLnR5cGUoKSk7Ci0gICAgY2FzZSBTdHlsZVNoZWV0OiAgICAgICAg
ICAgcmV0dXJuIGdldERPTVN0eWxlU2hlZXQoZXhlYywgc3R5bGUuc2hlZXQoKSk7Ci0gICAgfQot
ICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX0JPRFk6IHsKLSAgICBIVE1MQm9keUVsZW1lbnRJbXBs
ICZib2R5ID0gc3RhdGljX2Nhc3Q8SFRNTEJvZHlFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAg
ICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBCb2R5QUxpbms6ICAgICAgICAgICByZXR1cm4g
U3RyaW5nKGJvZHkuYUxpbmsoKSk7Ci0gICAgY2FzZSBCb2R5QmFja2dyb3VuZDogICAgICByZXR1
cm4gU3RyaW5nKGJvZHkuYmFja2dyb3VuZCgpKTsKLSAgICBjYXNlIEJvZHlCZ0NvbG9yOiAgICAg
ICAgIHJldHVybiBTdHJpbmcoYm9keS5iZ0NvbG9yKCkpOwotICAgIGNhc2UgQm9keUxpbms6ICAg
ICAgICAgICAgcmV0dXJuIFN0cmluZyhib2R5LmxpbmsoKSk7Ci0gICAgY2FzZSBCb2R5VGV4dDog
ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGJvZHkudGV4dCgpKTsKLSAgICBjYXNlIEJvZHlWTGlu
azogICAgICAgICAgIHJldHVybiBTdHJpbmcoYm9keS52TGluaygpKTsKLSAgICBkZWZhdWx0Ogot
ICAgICAgLy8gVXBkYXRlIHRoZSBkb2N1bWVudCdzIGxheW91dCBiZWZvcmUgd2UgY29tcHV0ZSB0
aGVzZSBhdHRyaWJ1dGVzLgotICAgICAgRG9jdW1lbnRJbXBsICpkb2MgPSBib2R5LmdldERvY3Vt
ZW50KCk7Ci0gICAgICBpZiAoZG9jKQotICAgICAgICBkb2MtPnVwZGF0ZUxheW91dElnbm9yZVBl
bmRpbmdTdHlsZXNoZWV0cygpOwotICAgICAgS0hUTUxWaWV3ICp2aWV3ID0gZG9jID8gZG9jLT52
aWV3KCkgOiAwOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgICBjYXNlIEJvZHlTY3Jv
bGxMZWZ0OgotICAgICAgICAgICAgcmV0dXJuIE51bWJlcih2aWV3ID8gdmlldy0+Y29udGVudHNY
KCkgOiAwKTsKLSAgICAgICAgY2FzZSBCb2R5U2Nyb2xsVG9wOgotICAgICAgICAgICAgcmV0dXJu
IE51bWJlcih2aWV3ID8gdmlldy0+Y29udGVudHNZKCkgOiAwKTsKLSAgICAgICAgY2FzZSBCb2R5
U2Nyb2xsSGVpZ2h0OiAgIHJldHVybiBOdW1iZXIodmlldyA/IHZpZXctPmNvbnRlbnRzSGVpZ2h0
KCkgOiAwKTsKLSAgICAgICAgY2FzZSBCb2R5U2Nyb2xsV2lkdGg6ICAgIHJldHVybiBOdW1iZXIo
dmlldyA/IHZpZXctPmNvbnRlbnRzV2lkdGgoKSA6IDApOwotICAgICAgfQotICAgIH0KLSAgfQot
ICBicmVhazsKK1ZhbHVlIEhUTUxFbGVtZW50OjpodG1sR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywg
aW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxIdG1sRWxlbWVudEltcGwmIGh0bWwgPSAqc3Rh
dGljX2Nhc3Q8SFRNTEh0bWxFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09
IEh0bWxWZXJzaW9uKQorICAgICAgICByZXR1cm4gU3RyaW5nKGh0bWwudmVyc2lvbigpKTsKKyAg
ICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CiAKLSAgY2FzZSBJRF9GT1JNOiB7Ci0gICAgSFRNTEZv
cm1FbGVtZW50SW1wbCAmZm9ybSA9IHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudEltcGwgJj4o
ZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgRm9ybUVsZW1lbnRzOiAg
ICAgICAgcmV0dXJuIGdldEhUTUxDb2xsZWN0aW9uKGV4ZWMsIGZvcm0uZWxlbWVudHMoKS5nZXQo
KSk7Ci0gICAgY2FzZSBGb3JtTGVuZ3RoOiAgICAgICAgICByZXR1cm4gTnVtYmVyKGZvcm0ubGVu
Z3RoKCkpOwotICAgIGNhc2UgRm9ybU5hbWU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhmb3Jt
Lm5hbWUoKSk7Ci0gICAgY2FzZSBGb3JtQWNjZXB0Q2hhcnNldDogICByZXR1cm4gU3RyaW5nKGZv
cm0uYWNjZXB0Q2hhcnNldCgpKTsKLSAgICBjYXNlIEZvcm1BY3Rpb246ICAgICAgICAgIHJldHVy
biBTdHJpbmcoZm9ybS5hY3Rpb24oKSk7Ci0gICAgY2FzZSBGb3JtRW5jVHlwZTogICAgICAgICBy
ZXR1cm4gU3RyaW5nKGZvcm0uZW5jdHlwZSgpKTsKLSAgICBjYXNlIEZvcm1NZXRob2Q6ICAgICAg
ICAgIHJldHVybiBTdHJpbmcoZm9ybS5tZXRob2QoKSk7Ci0gICAgY2FzZSBGb3JtVGFyZ2V0OiAg
ICAgICAgICByZXR1cm4gU3RyaW5nKGZvcm0udGFyZ2V0KCkpOwotICAgIH0KLSAgfQotICBicmVh
azsKLSAgY2FzZSBJRF9TRUxFQ1Q6IHsKLSAgICBIVE1MU2VsZWN0RWxlbWVudEltcGwgJnNlbGVj
dCA9IHN0YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICBz
d2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBTZWxlY3RUeXBlOiAgICAgICAgICAgIHJldHVybiBT
dHJpbmcoc2VsZWN0LnR5cGUoKSk7Ci0gICAgY2FzZSBTZWxlY3RTZWxlY3RlZEluZGV4OiAgIHJl
dHVybiBOdW1iZXIoc2VsZWN0LnNlbGVjdGVkSW5kZXgoKSk7Ci0gICAgY2FzZSBTZWxlY3RWYWx1
ZTogICAgICAgICAgIHJldHVybiBTdHJpbmcoc2VsZWN0LnZhbHVlKCkpOwotICAgIGNhc2UgU2Vs
ZWN0TGVuZ3RoOiAgICAgICAgICByZXR1cm4gTnVtYmVyKHNlbGVjdC5sZW5ndGgoKSk7Ci0gICAg
Y2FzZSBTZWxlY3RGb3JtOiAgICAgICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsIHNlbGVj
dC5mb3JtKCkpOyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVudAotICAgIGNhc2UgU2VsZWN0T3B0aW9u
czogICAgICAgICByZXR1cm4gZ2V0U2VsZWN0SFRNTENvbGxlY3Rpb24oZXhlYywgc2VsZWN0Lm9w
dGlvbnNIVE1MQ29sbGVjdGlvbigpLmdldCgpLCAmc2VsZWN0KTsgLy8gdHlwZSBIVE1MQ29sbGVj
dGlvbgotICAgIGNhc2UgU2VsZWN0RGlzYWJsZWQ6ICAgICAgICByZXR1cm4gQm9vbGVhbihzZWxl
Y3QuZGlzYWJsZWQoKSk7Ci0gICAgY2FzZSBTZWxlY3RNdWx0aXBsZTogICAgICAgIHJldHVybiBC
b29sZWFuKHNlbGVjdC5tdWx0aXBsZSgpKTsKLSAgICBjYXNlIFNlbGVjdE5hbWU6ICAgICAgICAg
ICAgcmV0dXJuIFN0cmluZyhzZWxlY3QubmFtZSgpKTsKLSAgICBjYXNlIFNlbGVjdFNpemU6ICAg
ICAgICAgICAgcmV0dXJuIE51bWJlcihzZWxlY3Quc2l6ZSgpKTsKLSAgICBjYXNlIFNlbGVjdFRh
YkluZGV4OiAgICAgICAgcmV0dXJuIE51bWJlcihzZWxlY3QudGFiSW5kZXgoKSk7Ci0gICAgfQot
ICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX09QVEdST1VQOiB7Ci0gICAgSFRNTE9wdEdyb3VwRWxl
bWVudEltcGwgJm9wdGdyb3VwID0gc3RhdGljX2Nhc3Q8SFRNTE9wdEdyb3VwRWxlbWVudEltcGwg
Jj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgT3B0R3JvdXBEaXNh
YmxlZDogICAgICAgIHJldHVybiBCb29sZWFuKG9wdGdyb3VwLmRpc2FibGVkKCkpOwotICAgIGNh
c2UgT3B0R3JvdXBMYWJlbDogICAgICAgICAgIHJldHVybiBTdHJpbmcob3B0Z3JvdXAubGFiZWwo
KSk7Ci0gICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX09QVElPTjogewotICAgIEhUTUxP
cHRpb25FbGVtZW50SW1wbCAmb3B0aW9uID0gc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnRJ
bXBsICY+KGVsZW1lbnQpOwotICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIE9wdGlvbkZv
cm06ICAgICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyxvcHRpb24uZm9ybSgpKTsgLy8g
dHlwZSBIVE1MRm9ybUVsZW1lbnQKLSAgICBjYXNlIE9wdGlvbkRlZmF1bHRTZWxlY3RlZDogcmV0
dXJuIEJvb2xlYW4ob3B0aW9uLmRlZmF1bHRTZWxlY3RlZCgpKTsKLSAgICBjYXNlIE9wdGlvblRl
eHQ6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhvcHRpb24udGV4dCgpKTsKLSAgICBjYXNlIE9w
dGlvbkluZGV4OiAgICAgICAgICAgcmV0dXJuIE51bWJlcihvcHRpb24uaW5kZXgoKSk7Ci0gICAg
Y2FzZSBPcHRpb25EaXNhYmxlZDogICAgICAgIHJldHVybiBCb29sZWFuKG9wdGlvbi5kaXNhYmxl
ZCgpKTsKLSAgICBjYXNlIE9wdGlvbkxhYmVsOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhvcHRp
b24ubGFiZWwoKSk7Ci0gICAgY2FzZSBPcHRpb25TZWxlY3RlZDogICAgICAgIHJldHVybiBCb29s
ZWFuKG9wdGlvbi5zZWxlY3RlZCgpKTsKLSAgICBjYXNlIE9wdGlvblZhbHVlOiAgICAgICAgICAg
cmV0dXJuIFN0cmluZyhvcHRpb24udmFsdWUoKSk7Ci0gICAgfQotICB9Ci0gIGJyZWFrOwotICBj
YXNlIElEX0lOUFVUOiB7Ci0gICAgSFRNTElucHV0RWxlbWVudEltcGwgJmlucHV0ID0gc3RhdGlj
X2Nhc3Q8SFRNTElucHV0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tl
bikgewotICAgIGNhc2UgSW5wdXREZWZhdWx0VmFsdWU6ICAgIHJldHVybiBTdHJpbmcoaW5wdXQu
ZGVmYXVsdFZhbHVlKCkpOwotICAgIGNhc2UgSW5wdXREZWZhdWx0Q2hlY2tlZDogIHJldHVybiBC
b29sZWFuKGlucHV0LmRlZmF1bHRDaGVja2VkKCkpOwotICAgIGNhc2UgSW5wdXRGb3JtOiAgICAg
ICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsaW5wdXQuZm9ybSgpKTsgLy8gdHlwZSBIVE1M
Rm9ybUVsZW1lbnQKLSAgICBjYXNlIElucHV0QWNjZXB0OiAgICAgICAgICByZXR1cm4gU3RyaW5n
KGlucHV0LmFjY2VwdCgpKTsKLSAgICBjYXNlIElucHV0QWNjZXNzS2V5OiAgICAgICByZXR1cm4g
U3RyaW5nKGlucHV0LmFjY2Vzc0tleSgpKTsKLSAgICBjYXNlIElucHV0QWxpZ246ICAgICAgICAg
ICByZXR1cm4gU3RyaW5nKGlucHV0LmFsaWduKCkpOwotICAgIGNhc2UgSW5wdXRBbHQ6ICAgICAg
ICAgICAgIHJldHVybiBTdHJpbmcoaW5wdXQuYWx0KCkpOwotICAgIGNhc2UgSW5wdXRDaGVja2Vk
OiAgICAgICAgIHJldHVybiBCb29sZWFuKGlucHV0LmNoZWNrZWQoKSk7Ci0gICAgY2FzZSBJbnB1
dERpc2FibGVkOiAgICAgICAgcmV0dXJuIEJvb2xlYW4oaW5wdXQuZGlzYWJsZWQoKSk7Ci0gICAg
Y2FzZSBJbnB1dE1heExlbmd0aDogICAgICAgcmV0dXJuIE51bWJlcihpbnB1dC5tYXhMZW5ndGgo
KSk7Ci0gICAgY2FzZSBJbnB1dE5hbWU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpbnB1dC5u
YW1lKCkpOwotICAgIGNhc2UgSW5wdXRSZWFkT25seTogICAgICAgIHJldHVybiBCb29sZWFuKGlu
cHV0LnJlYWRPbmx5KCkpOwotICAgIGNhc2UgSW5wdXRTaXplOiAgICAgICAgICAgIHJldHVybiBT
dHJpbmcoaW5wdXQuc2l6ZURPTSgpKTsKLSAgICBjYXNlIElucHV0U3JjOiAgICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKGlucHV0LnNyYygpKTsKLSAgICBjYXNlIElucHV0VGFiSW5kZXg6ICAgICAg
ICByZXR1cm4gTnVtYmVyKGlucHV0LnRhYkluZGV4KCkpOwotICAgIGNhc2UgSW5wdXRUeXBlOiAg
ICAgICAgICAgIHJldHVybiBTdHJpbmcoaW5wdXQudHlwZSgpKTsKLSAgICBjYXNlIElucHV0VXNl
TWFwOiAgICAgICAgICByZXR1cm4gU3RyaW5nKGlucHV0LnVzZU1hcCgpKTsKLSAgICBjYXNlIElu
cHV0VmFsdWU6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGlucHV0LnZhbHVlKCkpOwotICAgIH0K
LSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9URVhUQVJFQTogewotICAgIEhUTUxUZXh0QXJlYUVs
ZW1lbnRJbXBsICZ0ZXh0YXJlYSA9IHN0YXRpY19jYXN0PEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBs
ICY+KGVsZW1lbnQpOwotICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIFRleHRBcmVhRGVm
YXVsdFZhbHVlOiAgICByZXR1cm4gU3RyaW5nKHRleHRhcmVhLmRlZmF1bHRWYWx1ZSgpKTsKLSAg
ICBjYXNlIFRleHRBcmVhRm9ybTogICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLHRl
eHRhcmVhLmZvcm0oKSk7IC8vIHR5cGUgSFRNTEZvcm1FbGVtZW50Ci0gICAgY2FzZSBUZXh0QXJl
YUFjY2Vzc0tleTogICAgICAgcmV0dXJuIFN0cmluZyh0ZXh0YXJlYS5hY2Nlc3NLZXkoKSk7Ci0g
ICAgY2FzZSBUZXh0QXJlYUNvbHM6ICAgICAgICAgICAgcmV0dXJuIE51bWJlcih0ZXh0YXJlYS5j
b2xzKCkpOwotICAgIGNhc2UgVGV4dEFyZWFEaXNhYmxlZDogICAgICAgIHJldHVybiBCb29sZWFu
KHRleHRhcmVhLmRpc2FibGVkKCkpOwotICAgIGNhc2UgVGV4dEFyZWFOYW1lOiAgICAgICAgICAg
IHJldHVybiBTdHJpbmcodGV4dGFyZWEubmFtZSgpKTsKLSAgICBjYXNlIFRleHRBcmVhUmVhZE9u
bHk6ICAgICAgICByZXR1cm4gQm9vbGVhbih0ZXh0YXJlYS5yZWFkT25seSgpKTsKLSAgICBjYXNl
IFRleHRBcmVhUm93czogICAgICAgICAgICByZXR1cm4gTnVtYmVyKHRleHRhcmVhLnJvd3MoKSk7
Ci0gICAgY2FzZSBUZXh0QXJlYVRhYkluZGV4OiAgICAgICAgcmV0dXJuIE51bWJlcih0ZXh0YXJl
YS50YWJJbmRleCgpKTsKLSAgICBjYXNlIFRleHRBcmVhVHlwZTogICAgICAgICAgICByZXR1cm4g
U3RyaW5nKHRleHRhcmVhLnR5cGUoKSk7Ci0gICAgY2FzZSBUZXh0QXJlYVZhbHVlOiAgICAgICAg
ICAgcmV0dXJuIFN0cmluZyh0ZXh0YXJlYS52YWx1ZSgpKTsKLSAgICB9Ci0gIH0KLSAgYnJlYWs7
Ci0gIGNhc2UgSURfQlVUVE9OOiB7Ci0gICAgSFRNTEJ1dHRvbkVsZW1lbnRJbXBsICZidXR0b24g
PSBzdGF0aWNfY2FzdDxIVE1MQnV0dG9uRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgc3dp
dGNoICh0b2tlbikgewotICAgIGNhc2UgQnV0dG9uRm9ybTogICAgICAgICAgICByZXR1cm4gZ2V0
RE9NTm9kZShleGVjLGJ1dHRvbi5mb3JtKCkpOyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVudAotICAg
IGNhc2UgQnV0dG9uQWNjZXNzS2V5OiAgICAgICByZXR1cm4gU3RyaW5nKGJ1dHRvbi5hY2Nlc3NL
ZXkoKSk7Ci0gICAgY2FzZSBCdXR0b25EaXNhYmxlZDogICAgICAgIHJldHVybiBCb29sZWFuKGJ1
dHRvbi5kaXNhYmxlZCgpKTsKLSAgICBjYXNlIEJ1dHRvbk5hbWU6ICAgICAgICAgICAgcmV0dXJu
IFN0cmluZyhidXR0b24ubmFtZSgpKTsKLSAgICBjYXNlIEJ1dHRvblRhYkluZGV4OiAgICAgICAg
cmV0dXJuIE51bWJlcihidXR0b24udGFiSW5kZXgoKSk7Ci0gICAgY2FzZSBCdXR0b25UeXBlOiAg
ICAgICAgICAgIHJldHVybiBTdHJpbmcoYnV0dG9uLnR5cGUoKSk7Ci0gICAgY2FzZSBCdXR0b25W
YWx1ZTogICAgICAgICAgIHJldHVybiBTdHJpbmcoYnV0dG9uLnZhbHVlKCkpOwotICAgIH0KLSAg
fQotICBicmVhazsKLSAgY2FzZSBJRF9MQUJFTDogewotICAgIEhUTUxMYWJlbEVsZW1lbnRJbXBs
ICZsYWJlbCA9IHN0YXRpY19jYXN0PEhUTUxMYWJlbEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwot
ICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIExhYmVsRm9ybTogICAgICAgICAgICByZXR1
cm4gZ2V0RE9NTm9kZShleGVjLGxhYmVsLmZvcm0oKSk7IC8vIHR5cGUgSFRNTEZvcm1FbGVtZW50
Ci0gICAgY2FzZSBMYWJlbEFjY2Vzc0tleTogICAgICAgcmV0dXJuIFN0cmluZyhsYWJlbC5hY2Nl
c3NLZXkoKSk7Ci0gICAgY2FzZSBMYWJlbEh0bWxGb3I6ICAgICAgICAgcmV0dXJuIFN0cmluZyhs
YWJlbC5odG1sRm9yKCkpOwotICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9GSUVMRFNF
VDogewotICAgIEhUTUxGaWVsZFNldEVsZW1lbnRJbXBsICZmaWVsZFNldCA9IHN0YXRpY19jYXN0
PEhUTUxGaWVsZFNldEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworVmFsdWUgSFRNTEVsZW1lbnQ6
OmhlYWRHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRN
TEhlYWRFbGVtZW50SW1wbCAmaGVhZCA9ICpzdGF0aWNfY2FzdDxIVE1MSGVhZEVsZW1lbnRJbXBs
Kj4oaW1wbCgpKTsKKyAgICBpZiAodG9rZW4gPT0gSGVhZFByb2ZpbGUpCisgICAgICAgIHJldHVy
biBTdHJpbmcoaGVhZC5wcm9maWxlKCkpOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKwor
VmFsdWUgSFRNTEVsZW1lbnQ6OmxpbmtHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4p
IGNvbnN0Cit7CisgICAgSFRNTExpbmtFbGVtZW50SW1wbCAmbGluayA9ICpzdGF0aWNfY2FzdDxI
VE1MTGlua0VsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAg
Y2FzZSBGaWVsZFNldEZvcm06ICAgICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyxmaWVs
ZFNldC5mb3JtKCkpOyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVudAotICAgIH0KLSAgfQotICBicmVh
azsKLSAgY2FzZSBJRF9MRUdFTkQ6IHsKLSAgICBIVE1MTGVnZW5kRWxlbWVudEltcGwgJmxlZ2Vu
ZCA9IHN0YXRpY19jYXN0PEhUTUxMZWdlbmRFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICBz
d2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBMZWdlbmRGb3JtOiAgICAgICAgICAgIHJldHVybiBn
ZXRET01Ob2RlKGV4ZWMsbGVnZW5kLmZvcm0oKSk7IC8vIHR5cGUgSFRNTEZvcm1FbGVtZW50Ci0g
ICAgY2FzZSBMZWdlbmRBY2Nlc3NLZXk6ICAgICAgIHJldHVybiBTdHJpbmcobGVnZW5kLmFjY2Vz
c0tleSgpKTsKLSAgICBjYXNlIExlZ2VuZEFsaWduOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhs
ZWdlbmQuYWxpZ24oKSk7CisgICAgICAgIGNhc2UgTGlua0Rpc2FibGVkOgorICAgICAgICAgICAg
cmV0dXJuIEJvb2xlYW4obGluay5kaXNhYmxlZCgpKTsKKyAgICAgICAgY2FzZSBMaW5rQ2hhcnNl
dDoKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcobGluay5jaGFyc2V0KCkpOworICAgICAgICBj
YXNlIExpbmtIcmVmOgorICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhsaW5rLmhyZWYoKSk7Cisg
ICAgICAgIGNhc2UgTGlua0hyZWZMYW5nOgorICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhsaW5r
LmhyZWZsYW5nKCkpOworICAgICAgICBjYXNlIExpbmtNZWRpYTogICAgICAgICAgIAorICAgICAg
ICAgICAgcmV0dXJuIFN0cmluZyhsaW5rLm1lZGlhKCkpOworICAgICAgICBjYXNlIExpbmtSZWw6
ICAgICAgICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhsaW5rLnJlbCgpKTsKKyAg
ICAgICAgY2FzZSBMaW5rUmV2OiAgICAgICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIFN0cmlu
ZyhsaW5rLnJldigpKTsKKyAgICAgICAgY2FzZSBMaW5rVGFyZ2V0OiAgICAgICAgICAKKyAgICAg
ICAgICAgIHJldHVybiBTdHJpbmcobGluay50YXJnZXQoKSk7CisgICAgICAgIGNhc2UgTGlua1R5
cGU6ICAgICAgICAgICAgCisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGxpbmsudHlwZSgpKTsK
KyAgICAgICAgY2FzZSBMaW5rU2hlZXQ6ICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiBn
ZXRET01TdHlsZVNoZWV0KGV4ZWMsIGxpbmsuc2hlZXQoKSk7CiAgICAgfQotICB9Ci0gIGJyZWFr
OwotICBjYXNlIElEX1VMOiB7Ci0gICAgSFRNTFVMaXN0RWxlbWVudEltcGwgJnVMaXN0ID0gc3Rh
dGljX2Nhc3Q8SFRNTFVMaXN0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgcmV0dXJuIFVu
ZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6dGl0bGVHZXR0ZXIoRXhlY1N0YXRl
KiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTFRpdGxlRWxlbWVudEltcGwmIHRp
dGxlID0gKnN0YXRpY19jYXN0PEhUTUxUaXRsZUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBp
ZiAodG9rZW4gPT0gVGl0bGVUZXh0KQorICAgICAgICByZXR1cm4gU3RyaW5nKHRpdGxlLnRleHQo
KSk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6bWV0
YUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MTWV0
YUVsZW1lbnRJbXBsJiBtZXRhID0gKnN0YXRpY19jYXN0PEhUTUxNZXRhRWxlbWVudEltcGwqPihp
bXBsKCkpOwogICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIFVMaXN0Q29tcGFjdDogICAg
ICAgICByZXR1cm4gQm9vbGVhbih1TGlzdC5jb21wYWN0KCkpOwotICAgIGNhc2UgVUxpc3RUeXBl
OiAgICAgICAgICAgIHJldHVybiBTdHJpbmcodUxpc3QudHlwZSgpKTsKLSAgICB9Ci0gIH0KLSAg
YnJlYWs7Ci0gIGNhc2UgSURfT0w6IHsKLSAgICBIVE1MT0xpc3RFbGVtZW50SW1wbCAmb0xpc3Qg
PSBzdGF0aWNfY2FzdDxIVE1MT0xpc3RFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICBzd2l0
Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBPTGlzdENvbXBhY3Q6ICAgICAgICAgcmV0dXJuIEJvb2xl
YW4ob0xpc3QuY29tcGFjdCgpKTsKLSAgICBjYXNlIE9MaXN0U3RhcnQ6ICAgICAgICAgICByZXR1
cm4gTnVtYmVyKG9MaXN0LnN0YXJ0KCkpOwotICAgIGNhc2UgT0xpc3RUeXBlOiAgICAgICAgICAg
IHJldHVybiBTdHJpbmcob0xpc3QudHlwZSgpKTsKKyAgICAgICAgY2FzZSBNZXRhQ29udGVudDog
ICAgICAgICByZXR1cm4gU3RyaW5nKG1ldGEuY29udGVudCgpKTsKKyAgICAgICAgY2FzZSBNZXRh
SHR0cEVxdWl2OiAgICAgICByZXR1cm4gU3RyaW5nKG1ldGEuaHR0cEVxdWl2KCkpOworICAgICAg
ICBjYXNlIE1ldGFOYW1lOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcobWV0YS5uYW1lKCkpOwor
ICAgICAgICBjYXNlIE1ldGFTY2hlbWU6ICAgICAgICAgIHJldHVybiBTdHJpbmcobWV0YS5zY2hl
bWUoKSk7CiAgICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX0RMOiB7Ci0gICAgSFRNTERM
aXN0RWxlbWVudEltcGwgJmRMaXN0ID0gc3RhdGljX2Nhc3Q8SFRNTERMaXN0RWxlbWVudEltcGwg
Jj4oZWxlbWVudCk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxl
bWVudDo6YmFzZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAg
ICBIVE1MQmFzZUVsZW1lbnRJbXBsJiBiYXNlID0gKnN0YXRpY19jYXN0PEhUTUxCYXNlRWxlbWVu
dEltcGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIERMaXN0Q29t
cGFjdDogICAgICAgICByZXR1cm4gQm9vbGVhbihkTGlzdC5jb21wYWN0KCkpOworICAgICAgICBj
YXNlIEJhc2VIcmVmOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYmFzZS5ocmVmKCkpOworICAg
ICAgICBjYXNlIEJhc2VUYXJnZXQ6ICAgICAgICAgIHJldHVybiBTdHJpbmcoYmFzZS50YXJnZXQo
KSk7CiAgICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX0RJUjogewotICAgIEhUTUxEaXJl
Y3RvcnlFbGVtZW50SW1wbCAmZGlyZWN0b3J5ID0gc3RhdGljX2Nhc3Q8SFRNTERpcmVjdG9yeUVs
ZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFs
dWUgSFRNTEVsZW1lbnQ6OmlzSW5kZXhHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4p
IGNvbnN0Cit7CisgICAgSFRNTElzSW5kZXhFbGVtZW50SW1wbCYgaXNpbmRleCA9ICpzdGF0aWNf
Y2FzdDxIVE1MSXNJbmRleEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2Vu
KSB7Ci0gICAgY2FzZSBEaXJlY3RvcnlDb21wYWN0OiAgICAgICAgIHJldHVybiBCb29sZWFuKGRp
cmVjdG9yeS5jb21wYWN0KCkpOworICAgICAgICBjYXNlIElzSW5kZXhGb3JtOiAgICAgICAgICAg
IHJldHVybiBnZXRET01Ob2RlKGV4ZWMsIGlzaW5kZXguZm9ybSgpKTsgLy8gdHlwZSBIVE1MRm9y
bUVsZW1lbnQKKyAgICAgICAgY2FzZSBJc0luZGV4UHJvbXB0OiAgICAgICAgICByZXR1cm4gU3Ry
aW5nKGlzaW5kZXgucHJvbXB0KCkpOwogICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9N
RU5VOiB7Ci0gICAgSFRNTE1lbnVFbGVtZW50SW1wbCAmbWVudSA9IHN0YXRpY19jYXN0PEhUTUxN
ZW51RWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQor
CitWYWx1ZSBIVE1MRWxlbWVudDo6c3R5bGVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0Cit7CisgICAgSFRNTFN0eWxlRWxlbWVudEltcGwmIHN0eWxlID0gKnN0YXRpY19j
YXN0PEhUTUxTdHlsZUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7
Ci0gICAgY2FzZSBNZW51Q29tcGFjdDogICAgICAgICByZXR1cm4gQm9vbGVhbihtZW51LmNvbXBh
Y3QoKSk7CisgICAgICAgIGNhc2UgU3R5bGVEaXNhYmxlZDogICAgICAgIHJldHVybiBCb29sZWFu
KHN0eWxlLmRpc2FibGVkKCkpOworICAgICAgICBjYXNlIFN0eWxlTWVkaWE6ICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKHN0eWxlLm1lZGlhKCkpOworICAgICAgICBjYXNlIFN0eWxlVHlwZTogICAg
ICAgICAgICByZXR1cm4gU3RyaW5nKHN0eWxlLnR5cGUoKSk7CisgICAgICAgIGNhc2UgU3R5bGVT
aGVldDogICAgICAgICAgIHJldHVybiBnZXRET01TdHlsZVNoZWV0KGV4ZWMsIHN0eWxlLnNoZWV0
KCkpOwogICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9MSTogewotICAgIEhUTUxMSUVs
ZW1lbnRJbXBsICZsaSA9IHN0YXRpY19jYXN0PEhUTUxMSUVsZW1lbnRJbXBsICY+KGVsZW1lbnQp
OworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OmJvZHlH
ZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTEJvZHlF
bGVtZW50SW1wbCYgYm9keSA9ICpzdGF0aWNfY2FzdDxIVE1MQm9keUVsZW1lbnRJbXBsKj4oaW1w
bCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBMSVR5cGU6ICAgICAgICAgICAg
cmV0dXJuIFN0cmluZyhsaS50eXBlKCkpOwotICAgIGNhc2UgTElWYWx1ZTogICAgICAgICAgIHJl
dHVybiBOdW1iZXIobGkudmFsdWUoKSk7CisgICAgICAgIGNhc2UgQm9keUFMaW5rOiAgICAgICAg
ICAgcmV0dXJuIFN0cmluZyhib2R5LmFMaW5rKCkpOworICAgICAgICBjYXNlIEJvZHlCYWNrZ3Jv
dW5kOiAgICAgIHJldHVybiBTdHJpbmcoYm9keS5iYWNrZ3JvdW5kKCkpOworICAgICAgICBjYXNl
IEJvZHlCZ0NvbG9yOiAgICAgICAgIHJldHVybiBTdHJpbmcoYm9keS5iZ0NvbG9yKCkpOworICAg
ICAgICBjYXNlIEJvZHlMaW5rOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYm9keS5saW5rKCkp
OworICAgICAgICBjYXNlIEJvZHlUZXh0OiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYm9keS50
ZXh0KCkpOworICAgICAgICBjYXNlIEJvZHlWTGluazogICAgICAgICAgIHJldHVybiBTdHJpbmco
Ym9keS52TGluaygpKTsKKyAgICAgICAgZGVmYXVsdDogeworICAgICAgICAgICAgLy8gVXBkYXRl
IHRoZSBkb2N1bWVudCdzIGxheW91dCBiZWZvcmUgd2UgY29tcHV0ZSB0aGVzZSBhdHRyaWJ1dGVz
LgorICAgICAgICAgICAgRG9jdW1lbnRJbXBsICpkb2MgPSBib2R5LmdldERvY3VtZW50KCk7Cisg
ICAgICAgICAgICBpZiAoZG9jKQorICAgICAgICAgICAgICAgIGRvYy0+dXBkYXRlTGF5b3V0SWdu
b3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CisgICAgICAgICAgICBLSFRNTFZpZXcgKnZpZXcgPSBk
b2MgPyBkb2MtPnZpZXcoKSA6IDA7CisgICAgICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAg
ICAgICAgICAgICAgY2FzZSBCb2R5U2Nyb2xsTGVmdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIE51bWJlcih2aWV3ID8gdmlldy0+Y29udGVudHNYKCkgOiAwKTsKKyAgICAgICAgICAgICAg
ICBjYXNlIEJvZHlTY3JvbGxUb3A6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOdW1iZXIo
dmlldyA/IHZpZXctPmNvbnRlbnRzWSgpIDogMCk7CisgICAgICAgICAgICAgICAgY2FzZSBCb2R5
U2Nyb2xsSGVpZ2h0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTnVtYmVyKHZpZXcgPyB2
aWV3LT5jb250ZW50c0hlaWdodCgpIDogMCk7CisgICAgICAgICAgICAgICAgY2FzZSBCb2R5U2Ny
b2xsV2lkdGg6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOdW1iZXIodmlldyA/IHZpZXct
PmNvbnRlbnRzV2lkdGgoKSA6IDApOworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQot
ICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX0RJVjogewotICAgIEhUTUxEaXZFbGVtZW50SW1wbCAm
ZGl2ID0gc3RhdGljX2Nhc3Q8SFRNTERpdkVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgIHJl
dHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OmZvcm1HZXR0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTEZvcm1FbGVtZW50SW1w
bCYgZm9ybSA9ICpzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAg
ICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBEaXZBbGlnbjogICAgICAgICAgIHJldHVybiBT
dHJpbmcoZGl2LmFsaWduKCkpOworICAgICAgICBjYXNlIEZvcm1FbGVtZW50czogICAgICAgIHJl
dHVybiBnZXRIVE1MQ29sbGVjdGlvbihleGVjLCBmb3JtLmVsZW1lbnRzKCkuZ2V0KCkpOworICAg
ICAgICBjYXNlIEZvcm1MZW5ndGg6ICAgICAgICAgIHJldHVybiBOdW1iZXIoZm9ybS5sZW5ndGgo
KSk7CisgICAgICAgIGNhc2UgRm9ybU5hbWU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhmb3Jt
Lm5hbWUoKSk7CisgICAgICAgIGNhc2UgRm9ybUFjY2VwdENoYXJzZXQ6ICAgcmV0dXJuIFN0cmlu
Zyhmb3JtLmFjY2VwdENoYXJzZXQoKSk7CisgICAgICAgIGNhc2UgRm9ybUFjdGlvbjogICAgICAg
ICAgcmV0dXJuIFN0cmluZyhmb3JtLmFjdGlvbigpKTsKKyAgICAgICAgY2FzZSBGb3JtRW5jVHlw
ZTogICAgICAgICByZXR1cm4gU3RyaW5nKGZvcm0uZW5jdHlwZSgpKTsKKyAgICAgICAgY2FzZSBG
b3JtTWV0aG9kOiAgICAgICAgICByZXR1cm4gU3RyaW5nKGZvcm0ubWV0aG9kKCkpOworICAgICAg
ICBjYXNlIEZvcm1UYXJnZXQ6ICAgICAgICAgIHJldHVybiBTdHJpbmcoZm9ybS50YXJnZXQoKSk7
CiAgICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX1A6IHsKLSAgICBIVE1MUGFyYWdyYXBo
RWxlbWVudEltcGwgJnBhcmFncmFwaCA9IHN0YXRpY19jYXN0PEhUTUxQYXJhZ3JhcGhFbGVtZW50
SW1wbCAmPihlbGVtZW50KTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhU
TUxFbGVtZW50OjpzZWxlY3RHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0
Cit7CisgICAgSFRNTFNlbGVjdEVsZW1lbnRJbXBsJiBzZWxlY3QgPSAqc3RhdGljX2Nhc3Q8SFRN
TFNlbGVjdEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAg
Y2FzZSBQYXJhZ3JhcGhBbGlnbjogICAgICAgICAgIHJldHVybiBTdHJpbmcocGFyYWdyYXBoLmFs
aWduKCkpOworICAgICAgICBjYXNlIFNlbGVjdFR5cGU6ICAgICAgICAgICAgcmV0dXJuIFN0cmlu
ZyhzZWxlY3QudHlwZSgpKTsKKyAgICAgICAgY2FzZSBTZWxlY3RTZWxlY3RlZEluZGV4OiAgIHJl
dHVybiBOdW1iZXIoc2VsZWN0LnNlbGVjdGVkSW5kZXgoKSk7CisgICAgICAgIGNhc2UgU2VsZWN0
VmFsdWU6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHNlbGVjdC52YWx1ZSgpKTsKKyAgICAgICAg
Y2FzZSBTZWxlY3RMZW5ndGg6ICAgICAgICAgIHJldHVybiBOdW1iZXIoc2VsZWN0Lmxlbmd0aCgp
KTsKKyAgICAgICAgY2FzZSBTZWxlY3RGb3JtOiAgICAgICAgICAgIHJldHVybiBnZXRET01Ob2Rl
KGV4ZWMsIHNlbGVjdC5mb3JtKCkpOyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVudAorICAgICAgICBj
YXNlIFNlbGVjdE9wdGlvbnM6ICAgICAgICAgcmV0dXJuIGdldFNlbGVjdEhUTUxDb2xsZWN0aW9u
KGV4ZWMsIHNlbGVjdC5vcHRpb25zSFRNTENvbGxlY3Rpb24oKS5nZXQoKSwgJnNlbGVjdCk7IC8v
IHR5cGUgSFRNTENvbGxlY3Rpb24KKyAgICAgICAgY2FzZSBTZWxlY3REaXNhYmxlZDogICAgICAg
IHJldHVybiBCb29sZWFuKHNlbGVjdC5kaXNhYmxlZCgpKTsKKyAgICAgICAgY2FzZSBTZWxlY3RN
dWx0aXBsZTogICAgICAgIHJldHVybiBCb29sZWFuKHNlbGVjdC5tdWx0aXBsZSgpKTsKKyAgICAg
ICAgY2FzZSBTZWxlY3ROYW1lOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoc2VsZWN0Lm5hbWUo
KSk7CisgICAgICAgIGNhc2UgU2VsZWN0U2l6ZTogICAgICAgICAgICByZXR1cm4gTnVtYmVyKHNl
bGVjdC5zaXplKCkpOworICAgICAgICBjYXNlIFNlbGVjdFRhYkluZGV4OiAgICAgICAgcmV0dXJu
IE51bWJlcihzZWxlY3QudGFiSW5kZXgoKSk7CiAgICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNl
IElEX0gxOgotICBjYXNlIElEX0gyOgotICBjYXNlIElEX0gzOgotICBjYXNlIElEX0g0OgotICBj
YXNlIElEX0g1OgotICBjYXNlIElEX0g2OiB7Ci0gICAgSFRNTEhlYWRpbmdFbGVtZW50SW1wbCAm
aGVhZGluZyA9IHN0YXRpY19jYXN0PEhUTUxIZWFkaW5nRWxlbWVudEltcGwgJj4oZWxlbWVudCk7
CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6b3B0R3Jv
dXBHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTE9w
dEdyb3VwRWxlbWVudEltcGwmIG9wdGdyb3VwID0gKnN0YXRpY19jYXN0PEhUTUxPcHRHcm91cEVs
ZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBIZWFk
aW5nQWxpZ246ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGhlYWRpbmcuYWxpZ24oKSk7CisgICAg
ICAgIGNhc2UgT3B0R3JvdXBEaXNhYmxlZDogICAgICAgIHJldHVybiBCb29sZWFuKG9wdGdyb3Vw
LmRpc2FibGVkKCkpOworICAgICAgICBjYXNlIE9wdEdyb3VwTGFiZWw6ICAgICAgICAgICByZXR1
cm4gU3RyaW5nKG9wdGdyb3VwLmxhYmVsKCkpOwogICAgIH0KLSAgfQotICBicmVhazsKLSAgY2Fz
ZSBJRF9CTE9DS1FVT1RFOiB7Ci0gICAgSFRNTEJsb2NrcXVvdGVFbGVtZW50SW1wbCAmYmxvY2tx
dW90ZSA9IHN0YXRpY19jYXN0PEhUTUxCbG9ja3F1b3RlRWxlbWVudEltcGwgJj4oZWxlbWVudCk7
CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6b3B0aW9u
R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxPcHRp
b25FbGVtZW50SW1wbCYgb3B0aW9uID0gKnN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50SW1w
bCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgQmxvY2tRdW90ZUNp
dGU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhibG9ja3F1b3RlLmNpdGUoKSk7CisgICAgICAg
IGNhc2UgT3B0aW9uRm9ybTogICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLG9wdGlv
bi5mb3JtKCkpOyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVudAorICAgICAgICBjYXNlIE9wdGlvbkRl
ZmF1bHRTZWxlY3RlZDogcmV0dXJuIEJvb2xlYW4ob3B0aW9uLmRlZmF1bHRTZWxlY3RlZCgpKTsK
KyAgICAgICAgY2FzZSBPcHRpb25UZXh0OiAgICAgICAgICAgIHJldHVybiBTdHJpbmcob3B0aW9u
LnRleHQoKSk7CisgICAgICAgIGNhc2UgT3B0aW9uSW5kZXg6ICAgICAgICAgICByZXR1cm4gTnVt
YmVyKG9wdGlvbi5pbmRleCgpKTsKKyAgICAgICAgY2FzZSBPcHRpb25EaXNhYmxlZDogICAgICAg
IHJldHVybiBCb29sZWFuKG9wdGlvbi5kaXNhYmxlZCgpKTsKKyAgICAgICAgY2FzZSBPcHRpb25M
YWJlbDogICAgICAgICAgIHJldHVybiBTdHJpbmcob3B0aW9uLmxhYmVsKCkpOworICAgICAgICBj
YXNlIE9wdGlvblNlbGVjdGVkOiAgICAgICAgcmV0dXJuIEJvb2xlYW4ob3B0aW9uLnNlbGVjdGVk
KCkpOworICAgICAgICBjYXNlIE9wdGlvblZhbHVlOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhv
cHRpb24udmFsdWUoKSk7CiAgICAgfQotICB9Ci0gIGNhc2UgSURfUTogewotICAgIEhUTUxRdW90
ZUVsZW1lbnRJbXBsICZxdW90ZSA9IHN0YXRpY19jYXN0PEhUTUxRdW90ZUVsZW1lbnRJbXBsICY+
KGVsZW1lbnQpOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1l
bnQ6OmlucHV0R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAg
IEhUTUxJbnB1dEVsZW1lbnRJbXBsJiBpbnB1dCA9ICpzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVt
ZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgUXVvdGVD
aXRlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcocXVvdGUuY2l0ZSgpKTsKKyAgICAgICAgY2Fz
ZSBJbnB1dERlZmF1bHRWYWx1ZTogICAgcmV0dXJuIFN0cmluZyhpbnB1dC5kZWZhdWx0VmFsdWUo
KSk7CisgICAgICAgIGNhc2UgSW5wdXREZWZhdWx0Q2hlY2tlZDogIHJldHVybiBCb29sZWFuKGlu
cHV0LmRlZmF1bHRDaGVja2VkKCkpOworICAgICAgICBjYXNlIElucHV0Rm9ybTogICAgICAgICAg
ICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLGlucHV0LmZvcm0oKSk7IC8vIHR5cGUgSFRNTEZvcm1F
bGVtZW50CisgICAgICAgIGNhc2UgSW5wdXRBY2NlcHQ6ICAgICAgICAgIHJldHVybiBTdHJpbmco
aW5wdXQuYWNjZXB0KCkpOworICAgICAgICBjYXNlIElucHV0QWNjZXNzS2V5OiAgICAgICByZXR1
cm4gU3RyaW5nKGlucHV0LmFjY2Vzc0tleSgpKTsKKyAgICAgICAgY2FzZSBJbnB1dEFsaWduOiAg
ICAgICAgICAgcmV0dXJuIFN0cmluZyhpbnB1dC5hbGlnbigpKTsKKyAgICAgICAgY2FzZSBJbnB1
dEFsdDogICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpbnB1dC5hbHQoKSk7CisgICAgICAgIGNh
c2UgSW5wdXRDaGVja2VkOiAgICAgICAgIHJldHVybiBCb29sZWFuKGlucHV0LmNoZWNrZWQoKSk7
CisgICAgICAgIGNhc2UgSW5wdXREaXNhYmxlZDogICAgICAgIHJldHVybiBCb29sZWFuKGlucHV0
LmRpc2FibGVkKCkpOworICAgICAgICBjYXNlIElucHV0TWF4TGVuZ3RoOiAgICAgICByZXR1cm4g
TnVtYmVyKGlucHV0Lm1heExlbmd0aCgpKTsKKyAgICAgICAgY2FzZSBJbnB1dE5hbWU6ICAgICAg
ICAgICAgcmV0dXJuIFN0cmluZyhpbnB1dC5uYW1lKCkpOworICAgICAgICBjYXNlIElucHV0UmVh
ZE9ubHk6ICAgICAgICByZXR1cm4gQm9vbGVhbihpbnB1dC5yZWFkT25seSgpKTsKKyAgICAgICAg
Y2FzZSBJbnB1dFNpemU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpbnB1dC5zaXplRE9NKCkp
OworICAgICAgICBjYXNlIElucHV0U3JjOiAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGlucHV0
LnNyYygpKTsKKyAgICAgICAgY2FzZSBJbnB1dFRhYkluZGV4OiAgICAgICAgcmV0dXJuIE51bWJl
cihpbnB1dC50YWJJbmRleCgpKTsKKyAgICAgICAgY2FzZSBJbnB1dFR5cGU6ICAgICAgICAgICAg
cmV0dXJuIFN0cmluZyhpbnB1dC50eXBlKCkpOworICAgICAgICBjYXNlIElucHV0VXNlTWFwOiAg
ICAgICAgICByZXR1cm4gU3RyaW5nKGlucHV0LnVzZU1hcCgpKTsKKyAgICAgICAgY2FzZSBJbnB1
dFZhbHVlOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpbnB1dC52YWx1ZSgpKTsKICAgICB9Ci0g
IH0KLSAgY2FzZSBJRF9QUkU6IHsKLSAgICBIVE1MUHJlRWxlbWVudEltcGwgJnByZSA9IHN0YXRp
Y19jYXN0PEhUTUxQcmVFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICByZXR1cm4gVW5kZWZp
bmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50Ojp0ZXh0QXJlYUdldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MVGV4dEFyZWFFbGVtZW50SW1wbCYg
dGV4dGFyZWEgPSAqc3RhdGljX2Nhc3Q8SFRNTFRleHRBcmVhRWxlbWVudEltcGwqPihpbXBsKCkp
OwogICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIFByZVdpZHRoOiAgICAgICAgICAgcmV0
dXJuIE51bWJlcihwcmUud2lkdGgoKSk7CisgICAgICAgIGNhc2UgVGV4dEFyZWFEZWZhdWx0VmFs
dWU6ICAgIHJldHVybiBTdHJpbmcodGV4dGFyZWEuZGVmYXVsdFZhbHVlKCkpOworICAgICAgICBj
YXNlIFRleHRBcmVhRm9ybTogICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLHRleHRh
cmVhLmZvcm0oKSk7IC8vIHR5cGUgSFRNTEZvcm1FbGVtZW50CisgICAgICAgIGNhc2UgVGV4dEFy
ZWFBY2Nlc3NLZXk6ICAgICAgIHJldHVybiBTdHJpbmcodGV4dGFyZWEuYWNjZXNzS2V5KCkpOwor
ICAgICAgICBjYXNlIFRleHRBcmVhQ29sczogICAgICAgICAgICByZXR1cm4gTnVtYmVyKHRleHRh
cmVhLmNvbHMoKSk7CisgICAgICAgIGNhc2UgVGV4dEFyZWFEaXNhYmxlZDogICAgICAgIHJldHVy
biBCb29sZWFuKHRleHRhcmVhLmRpc2FibGVkKCkpOworICAgICAgICBjYXNlIFRleHRBcmVhTmFt
ZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRleHRhcmVhLm5hbWUoKSk7CisgICAgICAgIGNh
c2UgVGV4dEFyZWFSZWFkT25seTogICAgICAgIHJldHVybiBCb29sZWFuKHRleHRhcmVhLnJlYWRP
bmx5KCkpOworICAgICAgICBjYXNlIFRleHRBcmVhUm93czogICAgICAgICAgICByZXR1cm4gTnVt
YmVyKHRleHRhcmVhLnJvd3MoKSk7CisgICAgICAgIGNhc2UgVGV4dEFyZWFUYWJJbmRleDogICAg
ICAgIHJldHVybiBOdW1iZXIodGV4dGFyZWEudGFiSW5kZXgoKSk7CisgICAgICAgIGNhc2UgVGV4
dEFyZWFUeXBlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcodGV4dGFyZWEudHlwZSgpKTsKKyAg
ICAgICAgY2FzZSBUZXh0QXJlYVZhbHVlOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0ZXh0YXJl
YS52YWx1ZSgpKTsKICAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfQlI6IHsKLSAgICBI
VE1MQlJFbGVtZW50SW1wbCAmYnIgPSBzdGF0aWNfY2FzdDxIVE1MQlJFbGVtZW50SW1wbCAmPihl
bGVtZW50KTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50
OjpidXR0b25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAg
SFRNTEJ1dHRvbkVsZW1lbnRJbXBsJiBidXR0b24gPSAqc3RhdGljX2Nhc3Q8SFRNTEJ1dHRvbkVs
ZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBCUkNs
ZWFyOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhici5jbGVhcigpKTsKLSAgICB9Ci0gIH0KLSAg
YnJlYWs7Ci0gIGNhc2UgSURfQkFTRUZPTlQ6IHsKLSAgICBIVE1MQmFzZUZvbnRFbGVtZW50SW1w
bCAmYmFzZUZvbnQgPSBzdGF0aWNfY2FzdDxIVE1MQmFzZUZvbnRFbGVtZW50SW1wbCAmPihlbGVt
ZW50KTsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBCYXNlRm9udENvbG9yOiAgICAg
ICAgICAgcmV0dXJuIFN0cmluZyhiYXNlRm9udC5jb2xvcigpKTsKLSAgICBjYXNlIEJhc2VGb250
RmFjZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGJhc2VGb250LmZhY2UoKSk7Ci0gICAgY2Fz
ZSBCYXNlRm9udFNpemU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhiYXNlRm9udC5zaXplKCkp
OwotICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9GT05UOiB7Ci0gICAgSFRNTEZvbnRF
bGVtZW50SW1wbCAmZm9udCA9IHN0YXRpY19jYXN0PEhUTUxGb250RWxlbWVudEltcGwgJj4oZWxl
bWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgRm9udENvbG9yOiAgICAgICAg
ICAgcmV0dXJuIFN0cmluZyhmb250LmNvbG9yKCkpOwotICAgIGNhc2UgRm9udEZhY2U6ICAgICAg
ICAgICAgcmV0dXJuIFN0cmluZyhmb250LmZhY2UoKSk7Ci0gICAgY2FzZSBGb250U2l6ZTogICAg
ICAgICAgICByZXR1cm4gU3RyaW5nKGZvbnQuc2l6ZSgpKTsKLSAgICB9Ci0gIH0KLSAgYnJlYWs7
Ci0gIGNhc2UgSURfSFI6IHsKLSAgICBIVE1MSFJFbGVtZW50SW1wbCAmaHIgPSBzdGF0aWNfY2Fz
dDxIVE1MSFJFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0g
ICAgY2FzZSBIUkFsaWduOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhoci5hbGlnbigpKTsKLSAg
ICBjYXNlIEhSTm9TaGFkZTogICAgICAgICByZXR1cm4gQm9vbGVhbihoci5ub1NoYWRlKCkpOwot
ICAgIGNhc2UgSFJTaXplOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoaHIuc2l6ZSgpKTsKLSAg
ICBjYXNlIEhSV2lkdGg6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGhyLndpZHRoKCkpOworICAg
ICAgICBjYXNlIEJ1dHRvbkZvcm06ICAgICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyxi
dXR0b24uZm9ybSgpKTsgLy8gdHlwZSBIVE1MRm9ybUVsZW1lbnQKKyAgICAgICAgY2FzZSBCdXR0
b25BY2Nlc3NLZXk6ICAgICAgIHJldHVybiBTdHJpbmcoYnV0dG9uLmFjY2Vzc0tleSgpKTsKKyAg
ICAgICAgY2FzZSBCdXR0b25EaXNhYmxlZDogICAgICAgIHJldHVybiBCb29sZWFuKGJ1dHRvbi5k
aXNhYmxlZCgpKTsKKyAgICAgICAgY2FzZSBCdXR0b25OYW1lOiAgICAgICAgICAgIHJldHVybiBT
dHJpbmcoYnV0dG9uLm5hbWUoKSk7CisgICAgICAgIGNhc2UgQnV0dG9uVGFiSW5kZXg6ICAgICAg
ICByZXR1cm4gTnVtYmVyKGJ1dHRvbi50YWJJbmRleCgpKTsKKyAgICAgICAgY2FzZSBCdXR0b25U
eXBlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYnV0dG9uLnR5cGUoKSk7CisgICAgICAgIGNh
c2UgQnV0dG9uVmFsdWU6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGJ1dHRvbi52YWx1ZSgpKTsK
ICAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfSU5TOgotICBjYXNlIElEX0RFTDogewot
ICAgIEhUTUxNb2RFbGVtZW50SW1wbCAmbW9kID0gc3RhdGljX2Nhc3Q8SFRNTE1vZEVsZW1lbnRJ
bXBsICY+KGVsZW1lbnQpOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRN
TEVsZW1lbnQ6OmxhYmVsR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAor
eworICAgIEhUTUxMYWJlbEVsZW1lbnRJbXBsJiBsYWJlbCA9ICpzdGF0aWNfY2FzdDxIVE1MTGFi
ZWxFbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2Ug
TW9kQ2l0ZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKG1vZC5jaXRlKCkpOwotICAgIGNhc2Ug
TW9kRGF0ZVRpbWU6ICAgICAgICByZXR1cm4gU3RyaW5nKG1vZC5kYXRlVGltZSgpKTsKKyAgICAg
ICAgY2FzZSBMYWJlbEZvcm06ICAgICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyxsYWJl
bC5mb3JtKCkpOyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVudAorICAgICAgICBjYXNlIExhYmVsQWNj
ZXNzS2V5OiAgICAgICByZXR1cm4gU3RyaW5nKGxhYmVsLmFjY2Vzc0tleSgpKTsKKyAgICAgICAg
Y2FzZSBMYWJlbEh0bWxGb3I6ICAgICAgICAgcmV0dXJuIFN0cmluZyhsYWJlbC5odG1sRm9yKCkp
OwogICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9BOiB7Ci0gICAgSFRNTEFuY2hvckVs
ZW1lbnRJbXBsICZhbmNob3IgPSBzdGF0aWNfY2FzdDxIVE1MQW5jaG9yRWxlbWVudEltcGwgJj4o
ZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgQW5jaG9yQWNjZXNzS2V5
OiAgICAgICByZXR1cm4gU3RyaW5nKGFuY2hvci5hY2Nlc3NLZXkoKSk7Ci0gICAgY2FzZSBBbmNo
b3JDaGFyc2V0OiAgICAgICAgIHJldHVybiBTdHJpbmcoYW5jaG9yLmNoYXJzZXQoKSk7Ci0gICAg
Y2FzZSBBbmNob3JDb29yZHM6ICAgICAgICAgIHJldHVybiBTdHJpbmcoYW5jaG9yLmNvb3Jkcygp
KTsKLSAgICBjYXNlIEFuY2hvckhyZWY6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhhbmNob3Iu
aHJlZigpKTsKLSAgICBjYXNlIEFuY2hvckhyZWZMYW5nOiAgICAgICAgcmV0dXJuIFN0cmluZyhh
bmNob3IuaHJlZmxhbmcoKSk7Ci0gICAgY2FzZSBBbmNob3JIYXNoOiAgICAgICAgICAgIHJldHVy
biBTdHJpbmcoJyMnK0tVUkwoYW5jaG9yLmhyZWYoKS5zdHJpbmcoKSkucmVmKCkpOwotICAgIGNh
c2UgQW5jaG9ySG9zdDogICAgICAgICAgICByZXR1cm4gU3RyaW5nKEtVUkwoYW5jaG9yLmhyZWYo
KS5zdHJpbmcoKSkuaG9zdCgpKTsKLSAgICBjYXNlIEFuY2hvckhvc3RuYW1lOiB7Ci0gICAgICBL
VVJMIHVybChhbmNob3IuaHJlZigpLnN0cmluZygpKTsKLSAgICAgIGtkRGVidWcoNjA3MCkgPDwg
ImFuY2hvcjo6aG9zdG5hbWUgdXNlczoiIDw8dXJsLnVybCgpPDxlbmRsOwotICAgICAgaWYgKHVy
bC5wb3J0KCk9PTApCi0gICAgICAgIHJldHVybiBTdHJpbmcodXJsLmhvc3QoKSk7Ci0gICAgICBl
bHNlCi0gICAgICAgIHJldHVybiBTdHJpbmcodXJsLmhvc3QoKSArICI6IiArIFFTdHJpbmc6Om51
bWJlcih1cmwucG9ydCgpKSk7Ci0gICAgfQotICAgIGNhc2UgQW5jaG9yUGF0aE5hbWU6ICAgICAg
ICByZXR1cm4gU3RyaW5nKEtVUkwoYW5jaG9yLmhyZWYoKS5zdHJpbmcoKSkucGF0aCgpKTsKLSAg
ICBjYXNlIEFuY2hvclBvcnQ6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhRU3RyaW5nOjpudW1i
ZXIoS1VSTChhbmNob3IuaHJlZigpLnN0cmluZygpKS5wb3J0KCkpKTsKLSAgICBjYXNlIEFuY2hv
clByb3RvY29sOiAgICAgICAgcmV0dXJuIFN0cmluZyhLVVJMKGFuY2hvci5ocmVmKCkuc3RyaW5n
KCkpLnByb3RvY29sKCkrIjoiKTsKLSAgICBjYXNlIEFuY2hvclNlYXJjaDogICAgICAgICAgcmV0
dXJuIFN0cmluZyhLVVJMKGFuY2hvci5ocmVmKCkuc3RyaW5nKCkpLnF1ZXJ5KCkpOwotICAgIGNh
c2UgQW5jaG9yTmFtZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGFuY2hvci5uYW1lKCkpOwot
ICAgIGNhc2UgQW5jaG9yUmVsOiAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGFuY2hvci5yZWwo
KSk7Ci0gICAgY2FzZSBBbmNob3JSZXY6ICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYW5jaG9y
LnJldigpKTsKLSAgICBjYXNlIEFuY2hvclNoYXBlOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhh
bmNob3Iuc2hhcGUoKSk7Ci0gICAgY2FzZSBBbmNob3JUYWJJbmRleDogICAgICAgIHJldHVybiBO
dW1iZXIoYW5jaG9yLnRhYkluZGV4KCkpOwotICAgIGNhc2UgQW5jaG9yVGFyZ2V0OiAgICAgICAg
ICByZXR1cm4gU3RyaW5nKGFuY2hvci50YXJnZXQoKSk7Ci0gICAgY2FzZSBBbmNob3JUeXBlOiAg
ICAgICAgICAgIHJldHVybiBTdHJpbmcoYW5jaG9yLnR5cGUoKSk7Ci0gICAgY2FzZSBBbmNob3JU
ZXh0OgotICAgICAgaWYgKERvY3VtZW50SW1wbCogZG9jID0gYW5jaG9yLmdldERvY3VtZW50KCkp
Ci0gICAgICAgIGRvYy0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7Ci0g
ICAgICByZXR1cm4gU3RyaW5nKGFuY2hvci5pbm5lclRleHQoKSk7Ci0gICAgfQotICB9Ci0gIGJy
ZWFrOwotICBjYXNlIElEX0lNRzogewotICAgIEhUTUxJbWFnZUVsZW1lbnRJbXBsICZpbWFnZSA9
IHN0YXRpY19jYXN0PEhUTUxJbWFnZUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgIHN3aXRj
aCAodG9rZW4pIHsKLSAgICBjYXNlIEltYWdlTmFtZTogICAgICAgICAgICByZXR1cm4gU3RyaW5n
KGltYWdlLm5hbWUoKSk7Ci0gICAgY2FzZSBJbWFnZUFsaWduOiAgICAgICAgICAgcmV0dXJuIFN0
cmluZyhpbWFnZS5hbGlnbigpKTsKLSAgICBjYXNlIEltYWdlQWx0OiAgICAgICAgICAgICByZXR1
cm4gU3RyaW5nKGltYWdlLmFsdCgpKTsKLSAgICBjYXNlIEltYWdlQm9yZGVyOiAgICAgICAgICBy
ZXR1cm4gTnVtYmVyKGltYWdlLmJvcmRlcigpKTsKLSAgICBjYXNlIEltYWdlSGVpZ2h0OiAgICAg
ICAgICByZXR1cm4gTnVtYmVyKGltYWdlLmhlaWdodCh0cnVlKSk7Ci0gICAgY2FzZSBJbWFnZUhz
cGFjZTogICAgICAgICAgcmV0dXJuIE51bWJlcihpbWFnZS5oc3BhY2UoKSk7Ci0gICAgY2FzZSBJ
bWFnZUlzTWFwOiAgICAgICAgICAgcmV0dXJuIEJvb2xlYW4oaW1hZ2UuaXNNYXAoKSk7Ci0gICAg
Y2FzZSBJbWFnZUxvbmdEZXNjOiAgICAgICAgcmV0dXJuIFN0cmluZyhpbWFnZS5sb25nRGVzYygp
KTsKLSAgICBjYXNlIEltYWdlU3JjOiAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGltYWdlLnNy
YygpKTsKLSAgICBjYXNlIEltYWdlVXNlTWFwOiAgICAgICAgICByZXR1cm4gU3RyaW5nKGltYWdl
LnVzZU1hcCgpKTsKLSAgICBjYXNlIEltYWdlVnNwYWNlOiAgICAgICAgICByZXR1cm4gTnVtYmVy
KGltYWdlLnZzcGFjZSgpKTsKLSAgICBjYXNlIEltYWdlV2lkdGg6ICAgICAgICAgICByZXR1cm4g
TnVtYmVyKGltYWdlLndpZHRoKHRydWUpKTsKLSAgICBjYXNlIEltYWdlWDogICAgICAgICAgICAg
ICByZXR1cm4gTnVtYmVyKGltYWdlLngoKSk7Ci0gICAgY2FzZSBJbWFnZVk6ICAgICAgICAgICAg
ICAgcmV0dXJuIE51bWJlcihpbWFnZS55KCkpOwotICAgIH0KLSAgfQotICBicmVhazsKLSAgY2Fz
ZSBJRF9PQkpFQ1Q6IHsKLSAgICBIVE1MT2JqZWN0RWxlbWVudEltcGwgJm9iamVjdCA9IHN0YXRp
Y19jYXN0PEhUTUxPYmplY3RFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICBzd2l0Y2ggKHRv
a2VuKSB7Ci0gICAgY2FzZSBPYmplY3RGb3JtOiAgICAgICAgICAgIHJldHVybiBnZXRET01Ob2Rl
KGV4ZWMsb2JqZWN0LmZvcm0oKSk7IC8vIHR5cGUgSFRNTEZvcm1FbGVtZW50Ci0gICAgY2FzZSBP
YmplY3RDb2RlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcob2JqZWN0LmNvZGUoKSk7Ci0gICAg
Y2FzZSBPYmplY3RBbGlnbjogICAgICAgICAgIHJldHVybiBTdHJpbmcob2JqZWN0LmFsaWduKCkp
OwotICAgIGNhc2UgT2JqZWN0QXJjaGl2ZTogICAgICAgICByZXR1cm4gU3RyaW5nKG9iamVjdC5h
cmNoaXZlKCkpOwotICAgIGNhc2UgT2JqZWN0Qm9yZGVyOiAgICAgICAgICByZXR1cm4gU3RyaW5n
KG9iamVjdC5ib3JkZXIoKSk7Ci0gICAgY2FzZSBPYmplY3RDb2RlQmFzZTogICAgICAgIHJldHVy
biBTdHJpbmcob2JqZWN0LmNvZGVCYXNlKCkpOwotICAgIGNhc2UgT2JqZWN0Q29kZVR5cGU6ICAg
ICAgICByZXR1cm4gU3RyaW5nKG9iamVjdC5jb2RlVHlwZSgpKTsKLSAgICBjYXNlIE9iamVjdENv
bnRlbnREb2N1bWVudDogcmV0dXJuIGNoZWNrTm9kZVNlY3VyaXR5KGV4ZWMsb2JqZWN0LmNvbnRl
bnREb2N1bWVudCgpKSA/IAotCQkJCSAgICAgICBnZXRET01Ob2RlKGV4ZWMsIG9iamVjdC5jb250
ZW50RG9jdW1lbnQoKSkgOiBVbmRlZmluZWQoKTsKLSAgICBjYXNlIE9iamVjdERhdGE6ICAgICAg
ICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3QuZGF0YSgpKTsKLSAgICBjYXNlIE9iamVjdERlY2xh
cmU6ICAgICAgICAgcmV0dXJuIEJvb2xlYW4ob2JqZWN0LmRlY2xhcmUoKSk7Ci0gICAgY2FzZSBP
YmplY3RIZWlnaHQ6ICAgICAgICAgIHJldHVybiBTdHJpbmcob2JqZWN0LmhlaWdodCgpKTsKLSAg
ICBjYXNlIE9iamVjdEhzcGFjZTogICAgICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3QuaHNwYWNl
KCkpOwotICAgIGNhc2UgT2JqZWN0TmFtZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKG9iamVj
dC5uYW1lKCkpOwotICAgIGNhc2UgT2JqZWN0U3RhbmRieTogICAgICAgICByZXR1cm4gU3RyaW5n
KG9iamVjdC5zdGFuZGJ5KCkpOwotICAgIGNhc2UgT2JqZWN0VGFiSW5kZXg6ICAgICAgICByZXR1
cm4gTnVtYmVyKG9iamVjdC50YWJJbmRleCgpKTsKLSAgICBjYXNlIE9iamVjdFR5cGU6ICAgICAg
ICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3QudHlwZSgpKTsKLSAgICBjYXNlIE9iamVjdFVzZU1h
cDogICAgICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3QudXNlTWFwKCkpOwotICAgIGNhc2UgT2Jq
ZWN0VnNwYWNlOiAgICAgICAgICByZXR1cm4gU3RyaW5nKG9iamVjdC52c3BhY2UoKSk7Ci0gICAg
Y2FzZSBPYmplY3RXaWR0aDogICAgICAgICAgIHJldHVybiBTdHJpbmcob2JqZWN0LndpZHRoKCkp
OwotICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9QQVJBTTogewotICAgIEhUTUxQYXJh
bUVsZW1lbnRJbXBsICZwYXJhbSA9IHN0YXRpY19jYXN0PEhUTUxQYXJhbUVsZW1lbnRJbXBsICY+
KGVsZW1lbnQpOwotICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIFBhcmFtTmFtZTogICAg
ICAgICAgICByZXR1cm4gU3RyaW5nKHBhcmFtLm5hbWUoKSk7Ci0gICAgY2FzZSBQYXJhbVR5cGU6
ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhwYXJhbS50eXBlKCkpOwotICAgIGNhc2UgUGFyYW1W
YWx1ZTogICAgICAgICAgIHJldHVybiBTdHJpbmcocGFyYW0udmFsdWUoKSk7Ci0gICAgY2FzZSBQ
YXJhbVZhbHVlVHlwZTogICAgICAgcmV0dXJuIFN0cmluZyhwYXJhbS52YWx1ZVR5cGUoKSk7Ci0g
ICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX0FQUExFVDogewotICAgIEhUTUxBcHBsZXRF
bGVtZW50SW1wbCAmYXBwbGV0ID0gc3RhdGljX2Nhc3Q8SFRNTEFwcGxldEVsZW1lbnRJbXBsICY+
KGVsZW1lbnQpOwotICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIEFwcGxldEFsaWduOiAg
ICAgICAgICAgcmV0dXJuIFN0cmluZyhhcHBsZXQuYWxpZ24oKSk7Ci0gICAgY2FzZSBBcHBsZXRB
bHQ6ICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYXBwbGV0LmFsdCgpKTsKLSAgICBjYXNlIEFw
cGxldEFyY2hpdmU6ICAgICAgICAgcmV0dXJuIFN0cmluZyhhcHBsZXQuYXJjaGl2ZSgpKTsKLSAg
ICBjYXNlIEFwcGxldENvZGU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhhcHBsZXQuY29kZSgp
KTsKLSAgICBjYXNlIEFwcGxldENvZGVCYXNlOiAgICAgICAgcmV0dXJuIFN0cmluZyhhcHBsZXQu
Y29kZUJhc2UoKSk7Ci0gICAgY2FzZSBBcHBsZXRIZWlnaHQ6ICAgICAgICAgIHJldHVybiBTdHJp
bmcoYXBwbGV0LmhlaWdodCgpKTsKLSAgICBjYXNlIEFwcGxldEhzcGFjZTogICAgICAgICAgcmV0
dXJuIFN0cmluZyhhcHBsZXQuaHNwYWNlKCkpOwotICAgIGNhc2UgQXBwbGV0TmFtZTogICAgICAg
ICAgICByZXR1cm4gU3RyaW5nKGFwcGxldC5uYW1lKCkpOwotICAgIGNhc2UgQXBwbGV0T2JqZWN0
OiAgICAgICAgICByZXR1cm4gU3RyaW5nKGFwcGxldC5vYmplY3QoKSk7Ci0gICAgY2FzZSBBcHBs
ZXRWc3BhY2U6ICAgICAgICAgIHJldHVybiBTdHJpbmcoYXBwbGV0LnZzcGFjZSgpKTsKLSAgICBj
YXNlIEFwcGxldFdpZHRoOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhhcHBsZXQud2lkdGgoKSk7
Ci0gICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX01BUDogewotICAgIEhUTUxNYXBFbGVt
ZW50SW1wbCAmbWFwID0gc3RhdGljX2Nhc3Q8SFRNTE1hcEVsZW1lbnRJbXBsICY+KGVsZW1lbnQp
OworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OmZpZWxk
U2V0R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxG
aWVsZFNldEVsZW1lbnRJbXBsJiBmaWVsZFNldCA9ICpzdGF0aWNfY2FzdDxIVE1MRmllbGRTZXRF
bGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IEZpZWxkU2V0Rm9ybSkKKyAg
ICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyxmaWVsZFNldC5mb3JtKCkpOyAvLyB0eXBlIEhU
TUxGb3JtRWxlbWVudAorICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVs
ZW1lbnQ6OmxlZ2VuZEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sK
KyAgICBIVE1MTGVnZW5kRWxlbWVudEltcGwmIGxlZ2VuZCA9ICpzdGF0aWNfY2FzdDxIVE1MTGVn
ZW5kRWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNl
IE1hcEFyZWFzOiAgICAgICAgICAgcmV0dXJuIGdldEhUTUxDb2xsZWN0aW9uKGV4ZWMsIG1hcC5h
cmVhcygpLmdldCgpKTsgLy8gdHlwZSBIVE1MQ29sbGVjdGlvbgotICAgIGNhc2UgTWFwTmFtZTog
ICAgICAgICAgICByZXR1cm4gU3RyaW5nKG1hcC5uYW1lKCkpOwotICAgIH0KLSAgfQotICBicmVh
azsKLSAgY2FzZSBJRF9BUkVBOiB7Ci0gICAgSFRNTEFyZWFFbGVtZW50SW1wbCAmYXJlYSA9IHN0
YXRpY19jYXN0PEhUTUxBcmVhRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0
b2tlbikgewotICAgIGNhc2UgQXJlYUFjY2Vzc0tleTogICAgICAgcmV0dXJuIFN0cmluZyhhcmVh
LmFjY2Vzc0tleSgpKTsKLSAgICBjYXNlIEFyZWFBbHQ6ICAgICAgICAgICAgIHJldHVybiBTdHJp
bmcoYXJlYS5hbHQoKSk7Ci0gICAgY2FzZSBBcmVhQ29vcmRzOiAgICAgICAgICByZXR1cm4gU3Ry
aW5nKGFyZWEuY29vcmRzKCkpOwotICAgIGNhc2UgQXJlYUhyZWY6ICAgICAgICAgICAgcmV0dXJu
IFN0cmluZyhhcmVhLmhyZWYoKSk7Ci0gICAgY2FzZSBBcmVhSGFzaDogICAgICAgICAgICByZXR1
cm4gU3RyaW5nKCcjJytLVVJMKGFyZWEuaHJlZigpLnN0cmluZygpKS5yZWYoKSk7Ci0gICAgY2Fz
ZSBBcmVhSG9zdDogICAgICAgICAgICByZXR1cm4gU3RyaW5nKEtVUkwoYXJlYS5ocmVmKCkuc3Ry
aW5nKCkpLmhvc3QoKSk7Ci0gICAgY2FzZSBBcmVhSG9zdE5hbWU6IHsKLSAgICAgIEtVUkwgdXJs
KGFyZWEuaHJlZigpLnN0cmluZygpKTsKLSAgICAgIGtkRGVidWcoNjA3MCkgPDwgImxpbms6Omhv
c3RuYW1lIHVzZXM6IiA8PHVybC51cmwoKTw8ZW5kbDsKLSAgICAgIGlmICh1cmwucG9ydCgpPT0w
KQotICAgICAgICByZXR1cm4gU3RyaW5nKHVybC5ob3N0KCkpOwotICAgICAgZWxzZQotICAgICAg
ICByZXR1cm4gU3RyaW5nKHVybC5ob3N0KCkgKyAiOiIgKyBRU3RyaW5nOjpudW1iZXIodXJsLnBv
cnQoKSkpOworICAgICAgICBjYXNlIExlZ2VuZEZvcm06ICAgICAgICAgICAgcmV0dXJuIGdldERP
TU5vZGUoZXhlYyxsZWdlbmQuZm9ybSgpKTsgLy8gdHlwZSBIVE1MRm9ybUVsZW1lbnQKKyAgICAg
ICAgY2FzZSBMZWdlbmRBY2Nlc3NLZXk6ICAgICAgIHJldHVybiBTdHJpbmcobGVnZW5kLmFjY2Vz
c0tleSgpKTsKKyAgICAgICAgY2FzZSBMZWdlbmRBbGlnbjogICAgICAgICAgIHJldHVybiBTdHJp
bmcobGVnZW5kLmFsaWduKCkpOwogICAgIH0KLSAgICBjYXNlIEFyZWFQYXRoTmFtZTogICAgICAg
IHJldHVybiBTdHJpbmcoS1VSTChhcmVhLmhyZWYoKS5zdHJpbmcoKSkucGF0aCgpKTsKLSAgICBj
YXNlIEFyZWFQb3J0OiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoUVN0cmluZzo6bnVtYmVyKEtV
UkwoYXJlYS5ocmVmKCkuc3RyaW5nKCkpLnBvcnQoKSkpOwotICAgIGNhc2UgQXJlYVByb3RvY29s
OiAgICAgICAgcmV0dXJuIFN0cmluZyhLVVJMKGFyZWEuaHJlZigpLnN0cmluZygpKS5wcm90b2Nv
bCgpKyI6Iik7Ci0gICAgY2FzZSBBcmVhU2VhcmNoOiAgICAgICAgICByZXR1cm4gU3RyaW5nKEtV
UkwoYXJlYS5ocmVmKCkuc3RyaW5nKCkpLnF1ZXJ5KCkpOwotICAgIGNhc2UgQXJlYU5vSHJlZjog
ICAgICAgICAgcmV0dXJuIEJvb2xlYW4oYXJlYS5ub0hyZWYoKSk7Ci0gICAgY2FzZSBBcmVhU2hh
cGU6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGFyZWEuc2hhcGUoKSk7Ci0gICAgY2FzZSBBcmVh
VGFiSW5kZXg6ICAgICAgICByZXR1cm4gTnVtYmVyKGFyZWEudGFiSW5kZXgoKSk7Ci0gICAgY2Fz
ZSBBcmVhVGFyZ2V0OiAgICAgICAgICByZXR1cm4gU3RyaW5nKGFyZWEudGFyZ2V0KCkpOwotICAg
IH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9TQ1JJUFQ6IHsKLSAgICBIVE1MU2NyaXB0RWxl
bWVudEltcGwgJnNjcmlwdCA9IHN0YXRpY19jYXN0PEhUTUxTY3JpcHRFbGVtZW50SW1wbCAmPihl
bGVtZW50KTsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBTY3JpcHRUZXh0OiAgICAg
ICAgICAgIHJldHVybiBTdHJpbmcoc2NyaXB0LnRleHQoKSk7Ci0gICAgY2FzZSBTY3JpcHRIdG1s
Rm9yOiAgICAgICAgIHJldHVybiBTdHJpbmcoc2NyaXB0Lmh0bWxGb3IoKSk7Ci0gICAgY2FzZSBT
Y3JpcHRFdmVudDogICAgICAgICAgIHJldHVybiBTdHJpbmcoc2NyaXB0LmV2ZW50KCkpOwotICAg
IGNhc2UgU2NyaXB0Q2hhcnNldDogICAgICAgICByZXR1cm4gU3RyaW5nKHNjcmlwdC5jaGFyc2V0
KCkpOwotICAgIGNhc2UgU2NyaXB0RGVmZXI6ICAgICAgICAgICByZXR1cm4gQm9vbGVhbihzY3Jp
cHQuZGVmZXIoKSk7Ci0gICAgY2FzZSBTY3JpcHRTcmM6ICAgICAgICAgICAgIHJldHVybiBTdHJp
bmcoc2NyaXB0LnNyYygpKTsKLSAgICBjYXNlIFNjcmlwdFR5cGU6ICAgICAgICAgICAgcmV0dXJu
IFN0cmluZyhzY3JpcHQudHlwZSgpKTsKLSAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURf
VEFCTEU6IHsKLSAgICBIVE1MVGFibGVFbGVtZW50SW1wbCAmdGFibGUgPSBzdGF0aWNfY2FzdDxI
VE1MVGFibGVFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0g
ICAgY2FzZSBUYWJsZUNhcHRpb246ICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyx0YWJs
ZS5jYXB0aW9uKCkpOyAvLyB0eXBlIEhUTUxUYWJsZUNhcHRpb25FbGVtZW50Ci0gICAgY2FzZSBU
YWJsZVRIZWFkOiAgICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyx0YWJsZS50SGVhZCgp
KTsgLy8gdHlwZSBIVE1MVGFibGVTZWN0aW9uRWxlbWVudAotICAgIGNhc2UgVGFibGVURm9vdDog
ICAgICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsdGFibGUudEZvb3QoKSk7IC8vIHR5cGUg
SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQKLSAgICBjYXNlIFRhYmxlUm93czogICAgICAgICAgICBy
ZXR1cm4gZ2V0SFRNTENvbGxlY3Rpb24oZXhlYywgdGFibGUucm93cygpLmdldCgpKTsgLy8gdHlw
ZSBIVE1MQ29sbGVjdGlvbgotICAgIGNhc2UgVGFibGVUQm9kaWVzOiAgICAgICAgIHJldHVybiBn
ZXRIVE1MQ29sbGVjdGlvbihleGVjLCB0YWJsZS50Qm9kaWVzKCkuZ2V0KCkpOyAvLyB0eXBlIEhU
TUxDb2xsZWN0aW9uCi0gICAgY2FzZSBUYWJsZUFsaWduOiAgICAgICAgICAgcmV0dXJuIFN0cmlu
Zyh0YWJsZS5hbGlnbigpKTsKLSAgICBjYXNlIFRhYmxlQmdDb2xvcjogICAgICAgICByZXR1cm4g
U3RyaW5nKHRhYmxlLmJnQ29sb3IoKSk7Ci0gICAgY2FzZSBUYWJsZUJvcmRlcjogICAgICAgICAg
cmV0dXJuIFN0cmluZyh0YWJsZS5ib3JkZXIoKSk7Ci0gICAgY2FzZSBUYWJsZUNlbGxQYWRkaW5n
OiAgICAgcmV0dXJuIFN0cmluZyh0YWJsZS5jZWxsUGFkZGluZygpKTsKLSAgICBjYXNlIFRhYmxl
Q2VsbFNwYWNpbmc6ICAgICByZXR1cm4gU3RyaW5nKHRhYmxlLmNlbGxTcGFjaW5nKCkpOwotICAg
IGNhc2UgVGFibGVGcmFtZTogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGUuZnJhbWUoKSk7
Ci0gICAgY2FzZSBUYWJsZVJ1bGVzOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZS5ydWxl
cygpKTsKLSAgICBjYXNlIFRhYmxlU3VtbWFyeTogICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxl
LnN1bW1hcnkoKSk7Ci0gICAgY2FzZSBUYWJsZVdpZHRoOiAgICAgICAgICAgcmV0dXJuIFN0cmlu
Zyh0YWJsZS53aWR0aCgpKTsKLSAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfQ0FQVElP
TjogewotICAgIEhUTUxUYWJsZUNhcHRpb25FbGVtZW50SW1wbCAmdGFibGVDYXB0aW9uID0gc3Rh
dGljX2Nhc3Q8SFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgIHJl
dHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OnVMaXN0R2V0dGVyKEV4
ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxVTGlzdEVsZW1lbnRJ
bXBsJiB1TGlzdCA9ICpzdGF0aWNfY2FzdDxIVE1MVUxpc3RFbGVtZW50SW1wbCo+KGltcGwoKSk7
CiAgICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgVGFibGVDYXB0aW9uQWxpZ246ICAgICAg
IHJldHVybiBTdHJpbmcodGFibGVDYXB0aW9uLmFsaWduKCkpOwotICAgIH0KLSAgfQotICBicmVh
azsKLSAgY2FzZSBJRF9DT0w6IHsKLSAgICBIVE1MVGFibGVDb2xFbGVtZW50SW1wbCAmdGFibGVD
b2wgPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVDb2xFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAg
ICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBUYWJsZUNvbEFsaWduOiAgICAgICAgICAgcmV0
dXJuIFN0cmluZyh0YWJsZUNvbC5hbGlnbigpKTsKLSAgICBjYXNlIFRhYmxlQ29sQ2g6ICAgICAg
ICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ29sLmNoKCkpOwotICAgIGNhc2UgVGFibGVDb2xD
aE9mZjogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVDb2wuY2hPZmYoKSk7Ci0gICAgY2Fz
ZSBUYWJsZUNvbFNwYW46ICAgICAgICAgICAgcmV0dXJuIE51bWJlcih0YWJsZUNvbC5zcGFuKCkp
OwotICAgIGNhc2UgVGFibGVDb2xWQWxpZ246ICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVD
b2wudkFsaWduKCkpOwotICAgIGNhc2UgVGFibGVDb2xXaWR0aDogICAgICAgICAgIHJldHVybiBT
dHJpbmcodGFibGVDb2wud2lkdGgoKSk7Ci0gICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElE
X1RIRUFEOgotICBjYXNlIElEX1RCT0RZOgotICBjYXNlIElEX1RGT09UOiB7Ci0gICAgSFRNTFRh
YmxlU2VjdGlvbkVsZW1lbnRJbXBsICZ0YWJsZVNlY3Rpb24gPSBzdGF0aWNfY2FzdDxIVE1MVGFi
bGVTZWN0aW9uRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewot
ICAgIGNhc2UgVGFibGVTZWN0aW9uQWxpZ246ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxl
U2VjdGlvbi5hbGlnbigpKTsKLSAgICBjYXNlIFRhYmxlU2VjdGlvbkNoOiAgICAgICAgICAgICAg
cmV0dXJuIFN0cmluZyh0YWJsZVNlY3Rpb24uY2goKSk7Ci0gICAgY2FzZSBUYWJsZVNlY3Rpb25D
aE9mZjogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVTZWN0aW9uLmNoT2ZmKCkpOwotICAg
IGNhc2UgVGFibGVTZWN0aW9uVkFsaWduOiAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlU2Vj
dGlvbi52QWxpZ24oKSk7Ci0gICAgY2FzZSBUYWJsZVNlY3Rpb25Sb3dzOiAgICAgICAgICAgIHJl
dHVybiBnZXRIVE1MQ29sbGVjdGlvbihleGVjLCB0YWJsZVNlY3Rpb24ucm93cygpLmdldCgpKTsg
Ly8gdHlwZSBIVE1MQ29sbGVjdGlvbgotICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9U
UjogewotICAgSFRNTFRhYmxlUm93RWxlbWVudEltcGwgJnRhYmxlUm93ID0gc3RhdGljX2Nhc3Q8
SFRNTFRhYmxlUm93RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICBzd2l0Y2ggKHRva2VuKSB7
Ci0gICBjYXNlIFRhYmxlUm93Um93SW5kZXg6ICAgICAgICByZXR1cm4gTnVtYmVyKHRhYmxlUm93
LnJvd0luZGV4KCkpOwotICAgY2FzZSBUYWJsZVJvd1NlY3Rpb25Sb3dJbmRleDogcmV0dXJuIE51
bWJlcih0YWJsZVJvdy5zZWN0aW9uUm93SW5kZXgoKSk7Ci0gICBjYXNlIFRhYmxlUm93Q2VsbHM6
ICAgICAgICAgICByZXR1cm4gZ2V0SFRNTENvbGxlY3Rpb24oZXhlYywgdGFibGVSb3cuY2VsbHMo
KS5nZXQoKSk7IC8vIHR5cGUgSFRNTENvbGxlY3Rpb24KLSAgIGNhc2UgVGFibGVSb3dBbGlnbjog
ICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVSb3cuYWxpZ24oKSk7Ci0gICBjYXNlIFRhYmxl
Um93QmdDb2xvcjogICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlUm93LmJnQ29sb3IoKSk7Ci0g
ICBjYXNlIFRhYmxlUm93Q2g6ICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlUm93LmNo
KCkpOwotICAgY2FzZSBUYWJsZVJvd0NoT2ZmOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJs
ZVJvdy5jaE9mZigpKTsKLSAgIGNhc2UgVGFibGVSb3dWQWxpZ246ICAgICAgICAgIHJldHVybiBT
dHJpbmcodGFibGVSb3cudkFsaWduKCkpOwotICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElE
X1RIOgotICBjYXNlIElEX1REOiB7Ci0gICAgSFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsICZ0YWJs
ZUNlbGwgPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVDZWxsRWxlbWVudEltcGwgJj4oZWxlbWVudCk7
Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgVGFibGVDZWxsQ2VsbEluZGV4OiAgICAg
ICByZXR1cm4gTnVtYmVyKHRhYmxlQ2VsbC5jZWxsSW5kZXgoKSk7Ci0gICAgY2FzZSBUYWJsZUNl
bGxBYmJyOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVDZWxsLmFiYnIoKSk7Ci0gICAg
Y2FzZSBUYWJsZUNlbGxBbGlnbjogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVDZWxsLmFs
aWduKCkpOwotICAgIGNhc2UgVGFibGVDZWxsQXhpczogICAgICAgICAgICByZXR1cm4gU3RyaW5n
KHRhYmxlQ2VsbC5heGlzKCkpOwotICAgIGNhc2UgVGFibGVDZWxsQmdDb2xvcjogICAgICAgICBy
ZXR1cm4gU3RyaW5nKHRhYmxlQ2VsbC5iZ0NvbG9yKCkpOwotICAgIGNhc2UgVGFibGVDZWxsQ2g6
ICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ2VsbC5jaCgpKTsKLSAgICBjYXNlIFRh
YmxlQ2VsbENoT2ZmOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNlbGwuY2hPZmYoKSk7
Ci0gICAgY2FzZSBUYWJsZUNlbGxDb2xTcGFuOiAgICAgICAgIHJldHVybiBOdW1iZXIodGFibGVD
ZWxsLmNvbFNwYW4oKSk7Ci0gICAgY2FzZSBUYWJsZUNlbGxIZWFkZXJzOiAgICAgICAgIHJldHVy
biBTdHJpbmcodGFibGVDZWxsLmhlYWRlcnMoKSk7Ci0gICAgY2FzZSBUYWJsZUNlbGxIZWlnaHQ6
ICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVDZWxsLmhlaWdodCgpKTsKLSAgICBjYXNlIFRh
YmxlQ2VsbE5vV3JhcDogICAgICAgICAgcmV0dXJuIEJvb2xlYW4odGFibGVDZWxsLm5vV3JhcCgp
KTsKLSAgICBjYXNlIFRhYmxlQ2VsbFJvd1NwYW46ICAgICAgICAgcmV0dXJuIE51bWJlcih0YWJs
ZUNlbGwucm93U3BhbigpKTsKLSAgICBjYXNlIFRhYmxlQ2VsbFNjb3BlOiAgICAgICAgICAgcmV0
dXJuIFN0cmluZyh0YWJsZUNlbGwuc2NvcGUoKSk7Ci0gICAgY2FzZSBUYWJsZUNlbGxWQWxpZ246
ICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVDZWxsLnZBbGlnbigpKTsKLSAgICBjYXNlIFRh
YmxlQ2VsbFdpZHRoOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNlbGwud2lkdGgoKSk7
CisgICAgICAgIGNhc2UgVUxpc3RDb21wYWN0OiAgICAgICAgIHJldHVybiBCb29sZWFuKHVMaXN0
LmNvbXBhY3QoKSk7CisgICAgICAgIGNhc2UgVUxpc3RUeXBlOiAgICAgICAgICAgIHJldHVybiBT
dHJpbmcodUxpc3QudHlwZSgpKTsKICAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfRlJB
TUVTRVQ6IHsKLSAgICBIVE1MRnJhbWVTZXRFbGVtZW50SW1wbCAmZnJhbWVTZXQgPSBzdGF0aWNf
Y2FzdDxIVE1MRnJhbWVTZXRFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICByZXR1cm4gVW5k
ZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50OjpvTGlzdEdldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MT0xpc3RFbGVtZW50SW1wbCYgb0xp
c3QgPSAqc3RhdGljX2Nhc3Q8SFRNTE9MaXN0RWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIHN3
aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIEZyYW1lU2V0Q29sczogICAgICAgICAgICByZXR1cm4g
U3RyaW5nKGZyYW1lU2V0LmNvbHMoKSk7Ci0gICAgY2FzZSBGcmFtZVNldFJvd3M6ICAgICAgICAg
ICAgcmV0dXJuIFN0cmluZyhmcmFtZVNldC5yb3dzKCkpOwotICAgIH0KLSAgfQotICBicmVhazsK
LSAgY2FzZSBJRF9GUkFNRTogewotICAgIEhUTUxGcmFtZUVsZW1lbnRJbXBsICZmcmFtZUVsZW1l
bnQgPSBzdGF0aWNfY2FzdDxIVE1MRnJhbWVFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICBz
d2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBGcmFtZUNvbnRlbnREb2N1bWVudDogcmV0dXJuIGNo
ZWNrTm9kZVNlY3VyaXR5KGV4ZWMsZnJhbWVFbGVtZW50LmNvbnRlbnREb2N1bWVudCgpKSA/IAot
CQkJCSAgICAgIGdldERPTU5vZGUoZXhlYywgZnJhbWVFbGVtZW50LmNvbnRlbnREb2N1bWVudCgp
KSA6IFVuZGVmaW5lZCgpOwotICAgIGNhc2UgRnJhbWVDb250ZW50V2luZG93OiAgIHJldHVybiBj
aGVja05vZGVTZWN1cml0eShleGVjLGZyYW1lRWxlbWVudC5jb250ZW50RG9jdW1lbnQoKSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gV2luZG93OjpyZXRyaWV2ZShmcmFt
ZUVsZW1lbnQuY29udGVudFBhcnQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDogVW5kZWZpbmVkKCk7Ci0gICAgY2FzZSBGcmFtZUZyYW1lQm9yZGVyOiAgICAgcmV0dXJu
IFN0cmluZyhmcmFtZUVsZW1lbnQuZnJhbWVCb3JkZXIoKSk7Ci0gICAgY2FzZSBGcmFtZUxvbmdE
ZXNjOiAgICAgICAgcmV0dXJuIFN0cmluZyhmcmFtZUVsZW1lbnQubG9uZ0Rlc2MoKSk7Ci0gICAg
Y2FzZSBGcmFtZU1hcmdpbkhlaWdodDogICAgcmV0dXJuIFN0cmluZyhmcmFtZUVsZW1lbnQubWFy
Z2luSGVpZ2h0KCkpOwotICAgIGNhc2UgRnJhbWVNYXJnaW5XaWR0aDogICAgIHJldHVybiBTdHJp
bmcoZnJhbWVFbGVtZW50Lm1hcmdpbldpZHRoKCkpOwotICAgIGNhc2UgRnJhbWVOYW1lOiAgICAg
ICAgICAgIHJldHVybiBTdHJpbmcoZnJhbWVFbGVtZW50Lm5hbWUoKSk7Ci0gICAgY2FzZSBGcmFt
ZU5vUmVzaXplOiAgICAgICAgcmV0dXJuIEJvb2xlYW4oZnJhbWVFbGVtZW50Lm5vUmVzaXplKCkp
OwotICAgIGNhc2UgRnJhbWVTY3JvbGxpbmc6ICAgICAgIHJldHVybiBTdHJpbmcoZnJhbWVFbGVt
ZW50LnNjcm9sbGluZygpKTsKLSAgICBjYXNlIEZyYW1lU3JjOgotICAgIGNhc2UgRnJhbWVMb2Nh
dGlvbjogICAgICAgIHJldHVybiBTdHJpbmcoZnJhbWVFbGVtZW50LnNyYygpKTsKKyAgICAgICAg
Y2FzZSBPTGlzdENvbXBhY3Q6ICAgICAgICAgcmV0dXJuIEJvb2xlYW4ob0xpc3QuY29tcGFjdCgp
KTsKKyAgICAgICAgY2FzZSBPTGlzdFN0YXJ0OiAgICAgICAgICAgcmV0dXJuIE51bWJlcihvTGlz
dC5zdGFydCgpKTsKKyAgICAgICAgY2FzZSBPTGlzdFR5cGU6ICAgICAgICAgICAgcmV0dXJuIFN0
cmluZyhvTGlzdC50eXBlKCkpOwogICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9JRlJB
TUU6IHsKLSAgICBIVE1MSUZyYW1lRWxlbWVudEltcGwgJmlGcmFtZSA9IHN0YXRpY19jYXN0PEhU
TUxJRnJhbWVFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0g
ICAgY2FzZSBJRnJhbWVBbGlnbjogICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpRnJhbWUu
YWxpZ24oKSk7Ci0gICAgICAvLyAjIyMgc2VjdXJpdHkgY2hlY2sgPwotICAgIGNhc2UgSUZyYW1l
RG9jdW1lbnQ6IC8vIG5vbi1zdGFuZGFyZCwgbWFwcGVkIHRvIGNvbnRlbnREb2N1bWVudAotICAg
IGNhc2UgSUZyYW1lQ29udGVudERvY3VtZW50OiByZXR1cm4gY2hlY2tOb2RlU2VjdXJpdHkoZXhl
YyxpRnJhbWUuY29udGVudERvY3VtZW50KCkpID8gCi0JCQkJICBnZXRET01Ob2RlKGV4ZWMsIGlG
cmFtZS5jb250ZW50RG9jdW1lbnQoKSkgOiBVbmRlZmluZWQoKTsKLSAgICBjYXNlIElGcmFtZUNv
bnRlbnRXaW5kb3c6CXJldHVybiBjaGVja05vZGVTZWN1cml0eShleGVjLGlGcmFtZS5jb250ZW50
RG9jdW1lbnQoKSkgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFdpbmRv
dzo6cmV0cmlldmUoaUZyYW1lLmNvbnRlbnRQYXJ0KCkpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA6IFVuZGVmaW5lZCgpOwotICAgIGNhc2UgSUZyYW1lRnJhbWVCb3JkZXI6
ICAgICByZXR1cm4gU3RyaW5nKGlGcmFtZS5mcmFtZUJvcmRlcigpKTsKLSAgICBjYXNlIElGcmFt
ZUhlaWdodDogICAgICAgICAgcmV0dXJuIFN0cmluZyhpRnJhbWUuaGVpZ2h0KCkpOwotICAgIGNh
c2UgSUZyYW1lTG9uZ0Rlc2M6ICAgICAgICByZXR1cm4gU3RyaW5nKGlGcmFtZS5sb25nRGVzYygp
KTsKLSAgICBjYXNlIElGcmFtZU1hcmdpbkhlaWdodDogICAgcmV0dXJuIFN0cmluZyhpRnJhbWUu
bWFyZ2luSGVpZ2h0KCkpOwotICAgIGNhc2UgSUZyYW1lTWFyZ2luV2lkdGg6ICAgICByZXR1cm4g
U3RyaW5nKGlGcmFtZS5tYXJnaW5XaWR0aCgpKTsKLSAgICBjYXNlIElGcmFtZU5hbWU6ICAgICAg
ICAgICAgcmV0dXJuIFN0cmluZyhpRnJhbWUubmFtZSgpKTsKLSAgICBjYXNlIElGcmFtZVNjcm9s
bGluZzogICAgICAgcmV0dXJuIFN0cmluZyhpRnJhbWUuc2Nyb2xsaW5nKCkpOwotICAgIGNhc2Ug
SUZyYW1lU3JjOiAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGlGcmFtZS5zcmMoKSk7Ci0gICAg
Y2FzZSBJRnJhbWVXaWR0aDogICAgICAgICAgIHJldHVybiBTdHJpbmcoaUZyYW1lLndpZHRoKCkp
OwotICAgIH0KLSAgICBicmVhazsKLSAgfQotICB9IC8vIHhlbWFjcyAob3IgYXJudCkgY291bGQg
YmUgYSBiaXQgc21hcnRlciB3aGVuIGl0IGNvbWVzIHRvIGluZGVudGluZyBzd2l0Y2goKWVzIDsp
Ci0gIC8vIGl0cyBub3QgYXJudCB0byBibGFtZSAtIGl0cyB0aGUgb3JpZ2luYWwgU3Ryb3VzdHJ1
cCBzdHlsZSB3ZSBsaWtlIDopIChEaXJrKQorICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KIAot
ICAvLyBnZW5lcmljIHByb3BlcnRpZXMKLSAgc3dpdGNoICh0b2tlbikgewotICBjYXNlIEVsZW1l
bnRJZDoKLSAgICAgIC8vIGlodC5jb20gcmVsaWVzIG9uIHRoaXMgdmFsdWUgYmVpbmcgIiIgd2hl
biBubyBpZCBpcyBwcmVzZW50LiAgT3RoZXIgYnJvd3NlcnMgZG8gdGhpcyBhcyB3ZWxsLgotICAg
ICAgLy8gU28gd2UgdXNlIFN0cmluZygpIGluc3RlYWQgb2YgU3RyaW5nKCkgaGVyZS4KLSAgICBy
ZXR1cm4gU3RyaW5nKGVsZW1lbnQuaWRET00oKSk7Ci0gIGNhc2UgRWxlbWVudFRpdGxlOgotICAg
IHJldHVybiBTdHJpbmcoZWxlbWVudC50aXRsZSgpKTsKLSAgY2FzZSBFbGVtZW50TGFuZzoKLSAg
ICByZXR1cm4gU3RyaW5nKGVsZW1lbnQubGFuZygpKTsKLSAgY2FzZSBFbGVtZW50RGlyOgotICAg
IHJldHVybiBTdHJpbmcoZWxlbWVudC5kaXIoKSk7Ci0gIGNhc2UgRWxlbWVudENsYXNzTmFtZToK
LSAgICByZXR1cm4gU3RyaW5nKGVsZW1lbnQuY2xhc3NOYW1lKCkpOwotICBjYXNlIEVsZW1lbnRJ
bm5lckhUTUw6Ci0gICAgcmV0dXJuIFN0cmluZyhlbGVtZW50LmlubmVySFRNTCgpKTsKLSAgY2Fz
ZSBFbGVtZW50SW5uZXJUZXh0OgotICAgIGlmIChEb2N1bWVudEltcGwqIGRvYyA9IGltcGwoKS0+
Z2V0RG9jdW1lbnQoKSkKLSAgICAgIGRvYy0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxl
c2hlZXRzKCk7Ci0gICAgcmV0dXJuIFN0cmluZyhlbGVtZW50LmlubmVyVGV4dCgpKTsKLSAgY2Fz
ZSBFbGVtZW50T3V0ZXJIVE1MOgotICAgIHJldHVybiBTdHJpbmcoZWxlbWVudC5vdXRlckhUTUwo
KSk7Ci0gIGNhc2UgRWxlbWVudE91dGVyVGV4dDoKLSAgICByZXR1cm4gU3RyaW5nKGVsZW1lbnQu
b3V0ZXJUZXh0KCkpOwotICBjYXNlIEVsZW1lbnREb2N1bWVudDoKLSAgICByZXR1cm4gZ2V0RE9N
Tm9kZShleGVjLGVsZW1lbnQub3duZXJEb2N1bWVudCgpKTsKLSAgY2FzZSBFbGVtZW50Q2hpbGRy
ZW46Ci0gICAgcmV0dXJuIGdldEhUTUxDb2xsZWN0aW9uKGV4ZWMsIGVsZW1lbnQuY2hpbGRyZW4o
KS5nZXQoKSk7Ci0gIGNhc2UgRWxlbWVudENvbnRlbnRFZGl0YWJsZToKLSAgICByZXR1cm4gU3Ry
aW5nKGVsZW1lbnQuY29udGVudEVkaXRhYmxlKCkpOwotICBjYXNlIEVsZW1lbnRJc0NvbnRlbnRF
ZGl0YWJsZToKLSAgICByZXR1cm4gQm9vbGVhbihlbGVtZW50LmlzQ29udGVudEVkaXRhYmxlKCkp
OwotICAvLyAjIyMgd2hhdCBhYm91dCBzdHlsZT8gb3IgaXMgdGhpcyB1c2VkIGluc3RlYWQgZm9y
IERPTTIgc3R5bGVzaGVldHM/Ci0gIH0KLSAga2RXYXJuaW5nKCkgPDwgIkhUTUxFbGVtZW50Ojpn
ZXRWYWx1ZVByb3BlcnR5IHVuaGFuZGxlZCB0b2tlbiAiIDw8IHRva2VuIDw8IGVuZGw7Ci0gIHJl
dHVybiBVbmRlZmluZWQoKTsKK1ZhbHVlIEhUTUxFbGVtZW50OjpkTGlzdEdldHRlcihFeGVjU3Rh
dGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MRExpc3RFbGVtZW50SW1wbCYg
ZExpc3QgPSAqc3RhdGljX2Nhc3Q8SFRNTERMaXN0RWxlbWVudEltcGwqPihpbXBsKCkpOworICAg
IGlmICh0b2tlbiA9PSBETGlzdENvbXBhY3QpCisgICAgICAgIHJldHVybiBCb29sZWFuKGRMaXN0
LmNvbXBhY3QoKSk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1ib29sIEtKUzo6SFRN
TEVsZW1lbnQ6Omhhc1Byb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAm
cHJvcGVydHlOYW1lKSBjb25zdAorVmFsdWUgSFRNTEVsZW1lbnQ6OmRpckdldHRlcihFeGVjU3Rh
dGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKLSNpZmRlZiBLSlNfVkVSQk9TRQotICAvL2tk
RGVidWcoNjA3MCkgPDwgIkhUTUxFbGVtZW50OjpoYXNQcm9wZXJ0eSAiIDw8IHByb3BlcnR5TmFt
ZS5xc3RyaW5nKCkgPDwgZW5kbDsKLSNlbmRpZgotICBIVE1MRWxlbWVudEltcGwgJmVsZW1lbnQg
PSAqc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KGltcGwoKSk7Ci0gIC8vIEZpcnN0IGxv
b2sgYXQgZHluYW1pYyBwcm9wZXJ0aWVzIC0ga2VlcCB0aGlzIGluIHN5bmMgd2l0aCB0cnlHZXQK
LSAgc3dpdGNoIChlbGVtZW50LmlkKCkpIHsKLSAgICBjYXNlIElEX0ZPUk06IHsKLSAgICAgIEhU
TUxGb3JtRWxlbWVudEltcGwgJmZvcm0gPSBzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnRJbXBs
ICY+KGVsZW1lbnQpOwotICAgICAgLy8gQ2hlY2sgaWYgd2UncmUgcmV0cmlldmluZyBhbiBlbGVt
ZW50IChieSBpbmRleCBvciBieSBuYW1lKQotICAgICAgYm9vbCBvazsKLSAgICAgIHVpbnQgdSA9
IHByb3BlcnR5TmFtZS50b1VMb25nKCZvayk7Ci0gICAgICBpZiAob2sgJiYgZm9ybS5lbGVtZW50
cygpLT5pdGVtKHUpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIGlmIChmb3JtLmVsZW1l
bnRzKCktPm5hbWVkSXRlbShwcm9wZXJ0eU5hbWUuc3RyaW5nKCkpKQotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIElEX1NFTEVDVDogewotICAgICAg
SFRNTFNlbGVjdEVsZW1lbnRJbXBsICZzZWxlY3QgPSBzdGF0aWNfY2FzdDxIVE1MU2VsZWN0RWxl
bWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBib29sIG9rOwotICAgICAgdWludCB1ID0gcHJv
cGVydHlOYW1lLnRvVUxvbmcoJm9rKTsKLSAgICAgIGlmIChvayAmJiBzZWxlY3Qub3B0aW9uc0hU
TUxDb2xsZWN0aW9uKCktPml0ZW0odSkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgYnJl
YWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQorICAgIEhUTUxEaXJl
Y3RvcnlFbGVtZW50SW1wbCYgZGlyID0gKnN0YXRpY19jYXN0PEhUTUxEaXJlY3RvcnlFbGVtZW50
SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IERpcmVjdG9yeUNvbXBhY3QpCisgICAg
ICAgIHJldHVybiBCb29sZWFuKGRpci5jb21wYWN0KCkpOworICAgIHJldHVybiBVbmRlZmluZWQo
KTsKK30KIAotICByZXR1cm4gRE9NRWxlbWVudDo6aGFzUHJvcGVydHkoZXhlYywgcHJvcGVydHlO
YW1lKTsKK1ZhbHVlIEhUTUxFbGVtZW50OjptZW51R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50
IHRva2VuKSBjb25zdAoreworICAgIEhUTUxNZW51RWxlbWVudEltcGwmIG1lbnUgPSAqc3RhdGlj
X2Nhc3Q8SFRNTE1lbnVFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IE1l
bnVDb21wYWN0KQorICAgICAgICByZXR1cm4gQm9vbGVhbihtZW51LmNvbXBhY3QoKSk7CisgICAg
cmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1VU3RyaW5nIEtKUzo6SFRNTEVsZW1lbnQ6OnRvU3Ry
aW5nKEV4ZWNTdGF0ZSAqZXhlYykgY29uc3QKK1ZhbHVlIEhUTUxFbGVtZW50OjpsaUdldHRlcihF
eGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKLSAgaWYgKGltcGwoKS0+aWQoKSA9
PSBJRF9BKQotICAgIHJldHVybiBVU3RyaW5nKHN0YXRpY19jYXN0PGNvbnN0IEhUTUxBbmNob3JF
bGVtZW50SW1wbCAqPihpbXBsKCkpLT5ocmVmKCkpOwotICBlbHNlCi0gICAgcmV0dXJuIERPTUVs
ZW1lbnQ6OnRvU3RyaW5nKGV4ZWMpOworICAgIEhUTUxMSUVsZW1lbnRJbXBsJiBsaSA9ICpzdGF0
aWNfY2FzdDxIVE1MTElFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikg
eworICAgICAgICBjYXNlIExJVHlwZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGxpLnR5cGUo
KSk7CisgICAgICAgIGNhc2UgTElWYWx1ZTogICAgICAgICAgIHJldHVybiBOdW1iZXIobGkudmFs
dWUoKSk7CisgICAgfQorICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIEhUTUxG
b3JtRWxlbWVudEltcGwgKmdldEZvcm0oSFRNTEVsZW1lbnRJbXBsICplbGVtZW50KQorVmFsdWUg
SFRNTEVsZW1lbnQ6OmRpdkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QK
IHsKLSAgaWYgKGVsZW1lbnQtPmlzR2VuZXJpY0Zvcm1FbGVtZW50KCkpCi0gICAgcmV0dXJuIHN0
YXRpY19jYXN0PEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsICo+KGVsZW1lbnQpLT5mb3JtKCk7
CisgICAgSFRNTERpdkVsZW1lbnRJbXBsJiBkaXYgPSAqc3RhdGljX2Nhc3Q8SFRNTERpdkVsZW1l
bnRJbXBsKj4oaW1wbCgpKTsKKyAgICBpZiAodG9rZW4gPT0gRGl2QWxpZ24pCisgICAgICAgIHJl
dHVybiBTdHJpbmcoZGl2LmFsaWduKCkpOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KIAot
ICBzd2l0Y2ggKGVsZW1lbnQtPmlkKCkpIHsKLSAgICBjYXNlIElEX0xBQkVMOgotICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PEhUTUxMYWJlbEVsZW1lbnRJbXBsICo+KGVsZW1lbnQpLT5mb3JtKCk7
Ci0gICAgY2FzZSBJRF9PQkpFQ1Q6Ci0gICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTE9iamVj
dEVsZW1lbnRJbXBsICo+KGVsZW1lbnQpLT5mb3JtKCk7Ci0gIH0KK1ZhbHVlIEhUTUxFbGVtZW50
OjpwYXJhZ3JhcGhHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7Cisg
ICAgSFRNTFBhcmFncmFwaEVsZW1lbnRJbXBsJiBwID0gKnN0YXRpY19jYXN0PEhUTUxQYXJhZ3Jh
cGhFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IFBhcmFncmFwaEFsaWdu
KQorICAgICAgICByZXR1cm4gU3RyaW5nKHAuYWxpZ24oKSk7CisgICAgcmV0dXJuIFVuZGVmaW5l
ZCgpOworfQogCi0gIHJldHVybiAwOworVmFsdWUgSFRNTEVsZW1lbnQ6OmhlYWRpbmdHZXR0ZXIo
RXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTEhlYWRpbmdFbGVt
ZW50SW1wbCYgaCA9ICpzdGF0aWNfY2FzdDxIVE1MSGVhZGluZ0VsZW1lbnRJbXBsKj4oaW1wbCgp
KTsKKyAgICBpZiAodG9rZW4gPT0gSGVhZGluZ0FsaWduKQorICAgICAgICByZXR1cm4gU3RyaW5n
KGguYWxpZ24oKSk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi12b2lkIEtKUzo6SFRN
TEVsZW1lbnQ6OnB1c2hFdmVudEhhbmRsZXJTY29wZShFeGVjU3RhdGUgKmV4ZWMsIFNjb3BlQ2hh
aW4gJnNjb3BlKSBjb25zdAorVmFsdWUgSFRNTEVsZW1lbnQ6OmJsb2NrUXVvdGVHZXR0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTEJsb2NrcXVvdGVFbGVt
ZW50SW1wbCYgYmxvY2tRdW90ZSA9ICpzdGF0aWNfY2FzdDxIVE1MQmxvY2txdW90ZUVsZW1lbnRJ
bXBsKj4oaW1wbCgpKTsKKyAgICBpZiAodG9rZW4gPT0gQmxvY2tRdW90ZUNpdGUpCisgICAgICAg
IHJldHVybiBTdHJpbmcoYmxvY2tRdW90ZS5jaXRlKCkpOworICAgIHJldHVybiBVbmRlZmluZWQo
KTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OnF1b3RlR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywg
aW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxRdW90ZUVsZW1lbnRJbXBsJiBxdW90ZSA9ICpz
dGF0aWNfY2FzdDxIVE1MUXVvdGVFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2Vu
ID09IFF1b3RlQ2l0ZSkKKyAgICAgICAgcmV0dXJuIFN0cmluZyhxdW90ZS5jaXRlKCkpOworICAg
IHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OnByZUdldHRlcihF
eGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogQWRkIHN1
cHBvcnQgZm9yICd3cmFwJyB3aGVuIHdoaXRlLXNwYWNlOiBwcmUtd3JhcCBpcyBpbXBsZW1lbnRl
ZC4KKyAgICBIVE1MUHJlRWxlbWVudEltcGwmIHByZSA9ICpzdGF0aWNfY2FzdDxIVE1MUHJlRWxl
bWVudEltcGwqPihpbXBsKCkpOworICAgIGlmICh0b2tlbiA9PSBQcmVXaWR0aCkKKyAgICAgICAg
cmV0dXJuIE51bWJlcihwcmUud2lkdGgoKSk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQor
CitWYWx1ZSBIVE1MRWxlbWVudDo6YnJHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4p
IGNvbnN0Cit7CisgICAgSFRNTEJSRWxlbWVudEltcGwmIGJyID0gKnN0YXRpY19jYXN0PEhUTUxC
UkVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBpZiAodG9rZW4gPT0gQlJDbGVhcikKKyAgICAg
ICAgcmV0dXJuIFN0cmluZyhici5jbGVhcigpKTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9
CisKK1ZhbHVlIEhUTUxFbGVtZW50OjpiYXNlRm9udEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGlu
dCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MQmFzZUZvbnRFbGVtZW50SW1wbCYgYmFzZUZvbnQg
PSAqc3RhdGljX2Nhc3Q8SFRNTEJhc2VGb250RWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3
aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBCYXNlRm9udENvbG9yOiAgICAgICAgICAgcmV0
dXJuIFN0cmluZyhiYXNlRm9udC5jb2xvcigpKTsKKyAgICAgICAgY2FzZSBCYXNlRm9udEZhY2U6
ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhiYXNlRm9udC5mYWNlKCkpOworICAgICAgICBjYXNl
IEJhc2VGb250U2l6ZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGJhc2VGb250LnNpemUoKSk7
CisgICAgfQorICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6
OmZvbnRHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRN
TEZvbnRFbGVtZW50SW1wbCYgZm9udCA9ICpzdGF0aWNfY2FzdDxIVE1MRm9udEVsZW1lbnRJbXBs
Kj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgRm9udENvbG9y
OiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhmb250LmNvbG9yKCkpOworICAgICAgICBjYXNlIEZv
bnRGYWNlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoZm9udC5mYWNlKCkpOworICAgICAgICBj
YXNlIEZvbnRTaXplOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoZm9udC5zaXplKCkpOworICAg
IH0KKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50Ojpockdl
dHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MSFJFbGVt
ZW50SW1wbCYgaHIgPSAqc3RhdGljX2Nhc3Q8SFRNTEhSRWxlbWVudEltcGwqPihpbXBsKCkpOwor
ICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBIUkFsaWduOiAgICAgICAgICAgcmV0
dXJuIFN0cmluZyhoci5hbGlnbigpKTsKKyAgICAgICAgY2FzZSBIUk5vU2hhZGU6ICAgICAgICAg
cmV0dXJuIEJvb2xlYW4oaHIubm9TaGFkZSgpKTsKKyAgICAgICAgY2FzZSBIUlNpemU6ICAgICAg
ICAgICAgcmV0dXJuIFN0cmluZyhoci5zaXplKCkpOworICAgICAgICBjYXNlIEhSV2lkdGg6ICAg
ICAgICAgICByZXR1cm4gU3RyaW5nKGhyLndpZHRoKCkpOworICAgIH0KKyAgICByZXR1cm4gVW5k
ZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50Ojptb2RHZXR0ZXIoRXhlY1N0YXRlKiBl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTE1vZEVsZW1lbnRJbXBsJiBtb2QgPSAq
c3RhdGljX2Nhc3Q8SFRNTE1vZEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRv
a2VuKSB7CisgICAgICAgIGNhc2UgTW9kQ2l0ZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKG1v
ZC5jaXRlKCkpOworICAgICAgICBjYXNlIE1vZERhdGVUaW1lOiAgICAgICAgcmV0dXJuIFN0cmlu
Zyhtb2QuZGF0ZVRpbWUoKSk7CisgICAgfQorICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKwor
VmFsdWUgSFRNTEVsZW1lbnQ6OmFuY2hvckdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tl
bikgY29uc3QKK3sKKyAgICBIVE1MQW5jaG9yRWxlbWVudEltcGwmIGFuY2hvciA9ICpzdGF0aWNf
Y2FzdDxIVE1MQW5jaG9yRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4p
IHsKKyAgICAgICAgY2FzZSBBbmNob3JBY2Nlc3NLZXk6ICAgICAgIHJldHVybiBTdHJpbmcoYW5j
aG9yLmFjY2Vzc0tleSgpKTsKKyAgICAgICAgY2FzZSBBbmNob3JDaGFyc2V0OiAgICAgICAgIHJl
dHVybiBTdHJpbmcoYW5jaG9yLmNoYXJzZXQoKSk7CisgICAgICAgIGNhc2UgQW5jaG9yQ29vcmRz
OiAgICAgICAgICByZXR1cm4gU3RyaW5nKGFuY2hvci5jb29yZHMoKSk7CisgICAgICAgIGNhc2Ug
QW5jaG9ySHJlZjogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGFuY2hvci5ocmVmKCkpOworICAg
ICAgICBjYXNlIEFuY2hvckhyZWZMYW5nOiAgICAgICAgcmV0dXJuIFN0cmluZyhhbmNob3IuaHJl
ZmxhbmcoKSk7CisgICAgICAgIGNhc2UgQW5jaG9ySGFzaDogICAgICAgICAgICByZXR1cm4gU3Ry
aW5nKCcjJytLVVJMKGFuY2hvci5ocmVmKCkuc3RyaW5nKCkpLnJlZigpKTsKKyAgICAgICAgY2Fz
ZSBBbmNob3JIb3N0OiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoS1VSTChhbmNob3IuaHJlZigp
LnN0cmluZygpKS5ob3N0KCkpOworICAgICAgICBjYXNlIEFuY2hvckhvc3RuYW1lOiB7CisgICAg
ICAgICAgICBLVVJMIHVybChhbmNob3IuaHJlZigpLnN0cmluZygpKTsKKyAgICAgICAgICAgIGtk
RGVidWcoNjA3MCkgPDwgImFuY2hvcjo6aG9zdG5hbWUgdXNlczoiIDw8dXJsLnVybCgpPDxlbmRs
OworICAgICAgICAgICAgaWYgKHVybC5wb3J0KCk9PTApCisgICAgICAgICAgICAgICAgcmV0dXJu
IFN0cmluZyh1cmwuaG9zdCgpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKHVybC5ob3N0KCkgKyAiOiIgKyBRU3RyaW5nOjpudW1iZXIodXJsLnBvcnQo
KSkpOworICAgICAgICB9CisgICAgICAgIGNhc2UgQW5jaG9yUGF0aE5hbWU6ICAgICAgICByZXR1
cm4gU3RyaW5nKEtVUkwoYW5jaG9yLmhyZWYoKS5zdHJpbmcoKSkucGF0aCgpKTsKKyAgICAgICAg
Y2FzZSBBbmNob3JQb3J0OiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoUVN0cmluZzo6bnVtYmVy
KEtVUkwoYW5jaG9yLmhyZWYoKS5zdHJpbmcoKSkucG9ydCgpKSk7CisgICAgICAgIGNhc2UgQW5j
aG9yUHJvdG9jb2w6ICAgICAgICByZXR1cm4gU3RyaW5nKEtVUkwoYW5jaG9yLmhyZWYoKS5zdHJp
bmcoKSkucHJvdG9jb2woKSsiOiIpOworICAgICAgICBjYXNlIEFuY2hvclNlYXJjaDogICAgICAg
ICAgcmV0dXJuIFN0cmluZyhLVVJMKGFuY2hvci5ocmVmKCkuc3RyaW5nKCkpLnF1ZXJ5KCkpOwor
ICAgICAgICBjYXNlIEFuY2hvck5hbWU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhhbmNob3Iu
bmFtZSgpKTsKKyAgICAgICAgY2FzZSBBbmNob3JSZWw6ICAgICAgICAgICAgIHJldHVybiBTdHJp
bmcoYW5jaG9yLnJlbCgpKTsKKyAgICAgICAgY2FzZSBBbmNob3JSZXY6ICAgICAgICAgICAgIHJl
dHVybiBTdHJpbmcoYW5jaG9yLnJldigpKTsKKyAgICAgICAgY2FzZSBBbmNob3JTaGFwZTogICAg
ICAgICAgIHJldHVybiBTdHJpbmcoYW5jaG9yLnNoYXBlKCkpOworICAgICAgICBjYXNlIEFuY2hv
clRhYkluZGV4OiAgICAgICAgcmV0dXJuIE51bWJlcihhbmNob3IudGFiSW5kZXgoKSk7CisgICAg
ICAgIGNhc2UgQW5jaG9yVGFyZ2V0OiAgICAgICAgICByZXR1cm4gU3RyaW5nKGFuY2hvci50YXJn
ZXQoKSk7CisgICAgICAgIGNhc2UgQW5jaG9yVHlwZTogICAgICAgICAgICByZXR1cm4gU3RyaW5n
KGFuY2hvci50eXBlKCkpOworICAgICAgICBjYXNlIEFuY2hvclRleHQ6CisgICAgICAgICAgICBp
ZiAoRG9jdW1lbnRJbXBsKiBkb2MgPSBhbmNob3IuZ2V0RG9jdW1lbnQoKSkKKyAgICAgICAgICAg
ICAgICBkb2MtPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOworICAgICAg
ICAgICAgcmV0dXJuIFN0cmluZyhhbmNob3IuaW5uZXJUZXh0KCkpOworICAgIH0KKyAgICByZXR1
cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50OjppbWFnZUdldHRlcihFeGVj
U3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MSW1hZ2VFbGVtZW50SW1w
bCYgaW1hZ2UgPSAqc3RhdGljX2Nhc3Q8SFRNTEltYWdlRWxlbWVudEltcGwqPihpbXBsKCkpOwor
ICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBJbWFnZU5hbWU6ICAgICAgICAgICAg
cmV0dXJuIFN0cmluZyhpbWFnZS5uYW1lKCkpOworICAgICAgICBjYXNlIEltYWdlQWxpZ246ICAg
ICAgICAgICByZXR1cm4gU3RyaW5nKGltYWdlLmFsaWduKCkpOworICAgICAgICBjYXNlIEltYWdl
QWx0OiAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGltYWdlLmFsdCgpKTsKKyAgICAgICAgY2Fz
ZSBJbWFnZUJvcmRlcjogICAgICAgICAgcmV0dXJuIE51bWJlcihpbWFnZS5ib3JkZXIoKSk7Cisg
ICAgICAgIGNhc2UgSW1hZ2VIZWlnaHQ6ICAgICAgICAgIHJldHVybiBOdW1iZXIoaW1hZ2UuaGVp
Z2h0KHRydWUpKTsKKyAgICAgICAgY2FzZSBJbWFnZUhzcGFjZTogICAgICAgICAgcmV0dXJuIE51
bWJlcihpbWFnZS5oc3BhY2UoKSk7CisgICAgICAgIGNhc2UgSW1hZ2VJc01hcDogICAgICAgICAg
IHJldHVybiBCb29sZWFuKGltYWdlLmlzTWFwKCkpOworICAgICAgICBjYXNlIEltYWdlTG9uZ0Rl
c2M6ICAgICAgICByZXR1cm4gU3RyaW5nKGltYWdlLmxvbmdEZXNjKCkpOworICAgICAgICBjYXNl
IEltYWdlU3JjOiAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGltYWdlLnNyYygpKTsKKyAgICAg
ICAgY2FzZSBJbWFnZVVzZU1hcDogICAgICAgICAgcmV0dXJuIFN0cmluZyhpbWFnZS51c2VNYXAo
KSk7CisgICAgICAgIGNhc2UgSW1hZ2VWc3BhY2U6ICAgICAgICAgIHJldHVybiBOdW1iZXIoaW1h
Z2UudnNwYWNlKCkpOworICAgICAgICBjYXNlIEltYWdlV2lkdGg6ICAgICAgICAgICByZXR1cm4g
TnVtYmVyKGltYWdlLndpZHRoKHRydWUpKTsKKyAgICAgICAgY2FzZSBJbWFnZVg6ICAgICAgICAg
ICAgICAgcmV0dXJuIE51bWJlcihpbWFnZS54KCkpOworICAgICAgICBjYXNlIEltYWdlWTogICAg
ICAgICAgICAgICByZXR1cm4gTnVtYmVyKGltYWdlLnkoKSk7CisgICAgfQorICAgIHJldHVybiBV
bmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6Om9iamVjdEdldHRlcihFeGVjU3Rh
dGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MT2JqZWN0RWxlbWVudEltcGwm
IG9iamVjdCA9ICpzdGF0aWNfY2FzdDxIVE1MT2JqZWN0RWxlbWVudEltcGwqPihpbXBsKCkpOwor
ICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBPYmplY3RGb3JtOiAgICAgICAgICAg
IHJldHVybiBnZXRET01Ob2RlKGV4ZWMsb2JqZWN0LmZvcm0oKSk7IC8vIHR5cGUgSFRNTEZvcm1F
bGVtZW50CisgICAgICAgIGNhc2UgT2JqZWN0Q29kZTogICAgICAgICAgICByZXR1cm4gU3RyaW5n
KG9iamVjdC5jb2RlKCkpOworICAgICAgICBjYXNlIE9iamVjdEFsaWduOiAgICAgICAgICAgcmV0
dXJuIFN0cmluZyhvYmplY3QuYWxpZ24oKSk7CisgICAgICAgIGNhc2UgT2JqZWN0QXJjaGl2ZTog
ICAgICAgICByZXR1cm4gU3RyaW5nKG9iamVjdC5hcmNoaXZlKCkpOworICAgICAgICBjYXNlIE9i
amVjdEJvcmRlcjogICAgICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3QuYm9yZGVyKCkpOworICAg
ICAgICBjYXNlIE9iamVjdENvZGVCYXNlOiAgICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3QuY29k
ZUJhc2UoKSk7CisgICAgICAgIGNhc2UgT2JqZWN0Q29kZVR5cGU6ICAgICAgICByZXR1cm4gU3Ry
aW5nKG9iamVjdC5jb2RlVHlwZSgpKTsKKyAgICAgICAgY2FzZSBPYmplY3RDb250ZW50RG9jdW1l
bnQ6IHJldHVybiBjaGVja05vZGVTZWN1cml0eShleGVjLG9iamVjdC5jb250ZW50RG9jdW1lbnQo
KSkgPyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRET01O
b2RlKGV4ZWMsIG9iamVjdC5jb250ZW50RG9jdW1lbnQoKSkgOiBVbmRlZmluZWQoKTsKKyAgICAg
ICAgY2FzZSBPYmplY3REYXRhOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcob2JqZWN0LmRhdGEo
KSk7CisgICAgICAgIGNhc2UgT2JqZWN0RGVjbGFyZTogICAgICAgICByZXR1cm4gQm9vbGVhbihv
YmplY3QuZGVjbGFyZSgpKTsKKyAgICAgICAgY2FzZSBPYmplY3RIZWlnaHQ6ICAgICAgICAgIHJl
dHVybiBTdHJpbmcob2JqZWN0LmhlaWdodCgpKTsKKyAgICAgICAgY2FzZSBPYmplY3RIc3BhY2U6
ICAgICAgICAgIHJldHVybiBTdHJpbmcob2JqZWN0LmhzcGFjZSgpKTsKKyAgICAgICAgY2FzZSBP
YmplY3ROYW1lOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcob2JqZWN0Lm5hbWUoKSk7CisgICAg
ICAgIGNhc2UgT2JqZWN0U3RhbmRieTogICAgICAgICByZXR1cm4gU3RyaW5nKG9iamVjdC5zdGFu
ZGJ5KCkpOworICAgICAgICBjYXNlIE9iamVjdFRhYkluZGV4OiAgICAgICAgcmV0dXJuIE51bWJl
cihvYmplY3QudGFiSW5kZXgoKSk7CisgICAgICAgIGNhc2UgT2JqZWN0VHlwZTogICAgICAgICAg
ICByZXR1cm4gU3RyaW5nKG9iamVjdC50eXBlKCkpOworICAgICAgICBjYXNlIE9iamVjdFVzZU1h
cDogICAgICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3QudXNlTWFwKCkpOworICAgICAgICBjYXNl
IE9iamVjdFZzcGFjZTogICAgICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3QudnNwYWNlKCkpOwor
ICAgICAgICBjYXNlIE9iamVjdFdpZHRoOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3Qu
d2lkdGgoKSk7CisgICAgfQorICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRN
TEVsZW1lbnQ6OnBhcmFtR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAor
eworICAgIEhUTUxQYXJhbUVsZW1lbnRJbXBsJiBwYXJhbSA9ICpzdGF0aWNfY2FzdDxIVE1MUGFy
YW1FbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICBj
YXNlIFBhcmFtTmFtZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKHBhcmFtLm5hbWUoKSk7Cisg
ICAgICAgIGNhc2UgUGFyYW1UeXBlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcocGFyYW0udHlw
ZSgpKTsKKyAgICAgICAgY2FzZSBQYXJhbVZhbHVlOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhw
YXJhbS52YWx1ZSgpKTsKKyAgICAgICAgY2FzZSBQYXJhbVZhbHVlVHlwZTogICAgICAgcmV0dXJu
IFN0cmluZyhwYXJhbS52YWx1ZVR5cGUoKSk7CisgICAgfQorICAgIHJldHVybiBVbmRlZmluZWQo
KTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OmFwcGxldEdldHRlcihFeGVjU3RhdGUqIGV4ZWMs
IGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MQXBwbGV0RWxlbWVudEltcGwmIGFwcGxldCA9
ICpzdGF0aWNfY2FzdDxIVE1MQXBwbGV0RWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRj
aCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBBcHBsZXRBbGlnbjogICAgICAgICAgIHJldHVybiBT
dHJpbmcoYXBwbGV0LmFsaWduKCkpOworICAgICAgICBjYXNlIEFwcGxldEFsdDogICAgICAgICAg
ICAgcmV0dXJuIFN0cmluZyhhcHBsZXQuYWx0KCkpOworICAgICAgICBjYXNlIEFwcGxldEFyY2hp
dmU6ICAgICAgICAgcmV0dXJuIFN0cmluZyhhcHBsZXQuYXJjaGl2ZSgpKTsKKyAgICAgICAgY2Fz
ZSBBcHBsZXRDb2RlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYXBwbGV0LmNvZGUoKSk7Cisg
ICAgICAgIGNhc2UgQXBwbGV0Q29kZUJhc2U6ICAgICAgICByZXR1cm4gU3RyaW5nKGFwcGxldC5j
b2RlQmFzZSgpKTsKKyAgICAgICAgY2FzZSBBcHBsZXRIZWlnaHQ6ICAgICAgICAgIHJldHVybiBT
dHJpbmcoYXBwbGV0LmhlaWdodCgpKTsKKyAgICAgICAgY2FzZSBBcHBsZXRIc3BhY2U6ICAgICAg
ICAgIHJldHVybiBTdHJpbmcoYXBwbGV0LmhzcGFjZSgpKTsKKyAgICAgICAgY2FzZSBBcHBsZXRO
YW1lOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYXBwbGV0Lm5hbWUoKSk7CisgICAgICAgIGNh
c2UgQXBwbGV0T2JqZWN0OiAgICAgICAgICByZXR1cm4gU3RyaW5nKGFwcGxldC5vYmplY3QoKSk7
CisgICAgICAgIGNhc2UgQXBwbGV0VnNwYWNlOiAgICAgICAgICByZXR1cm4gU3RyaW5nKGFwcGxl
dC52c3BhY2UoKSk7CisgICAgICAgIGNhc2UgQXBwbGV0V2lkdGg6ICAgICAgICAgICByZXR1cm4g
U3RyaW5nKGFwcGxldC53aWR0aCgpKTsKKyAgICB9CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwor
fQorCitWYWx1ZSBIVE1MRWxlbWVudDo6bWFwR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRv
a2VuKSBjb25zdAoreworICAgIEhUTUxNYXBFbGVtZW50SW1wbCYgbWFwID0gKnN0YXRpY19jYXN0
PEhUTUxNYXBFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAg
ICAgICBjYXNlIE1hcEFyZWFzOiAgICAgICAgICAgcmV0dXJuIGdldEhUTUxDb2xsZWN0aW9uKGV4
ZWMsIG1hcC5hcmVhcygpLmdldCgpKTsgLy8gdHlwZSBIVE1MQ29sbGVjdGlvbgorICAgICAgICBj
YXNlIE1hcE5hbWU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhtYXAubmFtZSgpKTsKKyAgICB9
CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6YXJlYUdl
dHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MQXJlYUVs
ZW1lbnRJbXBsJiBhcmVhID0gKnN0YXRpY19jYXN0PEhUTUxBcmVhRWxlbWVudEltcGwqPihpbXBs
KCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBBcmVhQWNjZXNzS2V5OiAg
ICAgICByZXR1cm4gU3RyaW5nKGFyZWEuYWNjZXNzS2V5KCkpOworICAgICAgICBjYXNlIEFyZWFB
bHQ6ICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYXJlYS5hbHQoKSk7CisgICAgICAgIGNhc2Ug
QXJlYUNvb3JkczogICAgICAgICAgcmV0dXJuIFN0cmluZyhhcmVhLmNvb3JkcygpKTsKKyAgICAg
ICAgY2FzZSBBcmVhSHJlZjogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGFyZWEuaHJlZigpKTsK
KyAgICAgICAgY2FzZSBBcmVhSGFzaDogICAgICAgICAgICByZXR1cm4gU3RyaW5nKCcjJytLVVJM
KGFyZWEuaHJlZigpLnN0cmluZygpKS5yZWYoKSk7CisgICAgICAgIGNhc2UgQXJlYUhvc3Q6ICAg
ICAgICAgICAgcmV0dXJuIFN0cmluZyhLVVJMKGFyZWEuaHJlZigpLnN0cmluZygpKS5ob3N0KCkp
OworICAgICAgICBjYXNlIEFyZWFIb3N0TmFtZTogeworICAgICAgICAgICAgS1VSTCB1cmwoYXJl
YS5ocmVmKCkuc3RyaW5nKCkpOworICAgICAgICAgICAga2REZWJ1Zyg2MDcwKSA8PCAibGluazo6
aG9zdG5hbWUgdXNlczoiIDw8dXJsLnVybCgpPDxlbmRsOworICAgICAgICAgICAgaWYgKHVybC5w
b3J0KCk9PTApCisgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh1cmwuaG9zdCgpKTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKHVybC5ob3N0KCkg
KyAiOiIgKyBRU3RyaW5nOjpudW1iZXIodXJsLnBvcnQoKSkpOworICAgICAgICB9CisgICAgICAg
IGNhc2UgQXJlYVBhdGhOYW1lOiAgICAgICAgcmV0dXJuIFN0cmluZyhLVVJMKGFyZWEuaHJlZigp
LnN0cmluZygpKS5wYXRoKCkpOworICAgICAgICBjYXNlIEFyZWFQb3J0OiAgICAgICAgICAgIHJl
dHVybiBTdHJpbmcoUVN0cmluZzo6bnVtYmVyKEtVUkwoYXJlYS5ocmVmKCkuc3RyaW5nKCkpLnBv
cnQoKSkpOworICAgICAgICBjYXNlIEFyZWFQcm90b2NvbDogICAgICAgIHJldHVybiBTdHJpbmco
S1VSTChhcmVhLmhyZWYoKS5zdHJpbmcoKSkucHJvdG9jb2woKSsiOiIpOworICAgICAgICBjYXNl
IEFyZWFTZWFyY2g6ICAgICAgICAgIHJldHVybiBTdHJpbmcoS1VSTChhcmVhLmhyZWYoKS5zdHJp
bmcoKSkucXVlcnkoKSk7CisgICAgICAgIGNhc2UgQXJlYU5vSHJlZjogICAgICAgICAgcmV0dXJu
IEJvb2xlYW4oYXJlYS5ub0hyZWYoKSk7CisgICAgICAgIGNhc2UgQXJlYVNoYXBlOiAgICAgICAg
ICAgcmV0dXJuIFN0cmluZyhhcmVhLnNoYXBlKCkpOworICAgICAgICBjYXNlIEFyZWFUYWJJbmRl
eDogICAgICAgIHJldHVybiBOdW1iZXIoYXJlYS50YWJJbmRleCgpKTsKKyAgICAgICAgY2FzZSBB
cmVhVGFyZ2V0OiAgICAgICAgICByZXR1cm4gU3RyaW5nKGFyZWEudGFyZ2V0KCkpOworICAgIH0K
KyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50OjpzY3JpcHRH
ZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTFNjcmlw
dEVsZW1lbnRJbXBsJiBzY3JpcHQgPSAqc3RhdGljX2Nhc3Q8SFRNTFNjcmlwdEVsZW1lbnRJbXBs
Kj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgU2NyaXB0VGV4
dDogICAgICAgICAgICByZXR1cm4gU3RyaW5nKHNjcmlwdC50ZXh0KCkpOworICAgICAgICBjYXNl
IFNjcmlwdEh0bWxGb3I6ICAgICAgICAgcmV0dXJuIFN0cmluZyhzY3JpcHQuaHRtbEZvcigpKTsK
KyAgICAgICAgY2FzZSBTY3JpcHRFdmVudDogICAgICAgICAgIHJldHVybiBTdHJpbmcoc2NyaXB0
LmV2ZW50KCkpOworICAgICAgICBjYXNlIFNjcmlwdENoYXJzZXQ6ICAgICAgICAgcmV0dXJuIFN0
cmluZyhzY3JpcHQuY2hhcnNldCgpKTsKKyAgICAgICAgY2FzZSBTY3JpcHREZWZlcjogICAgICAg
ICAgIHJldHVybiBCb29sZWFuKHNjcmlwdC5kZWZlcigpKTsKKyAgICAgICAgY2FzZSBTY3JpcHRT
cmM6ICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoc2NyaXB0LnNyYygpKTsKKyAgICAgICAgY2Fz
ZSBTY3JpcHRUeXBlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoc2NyaXB0LnR5cGUoKSk7Cisg
ICAgfQorICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OnRh
YmxlR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxU
YWJsZUVsZW1lbnRJbXBsJiB0YWJsZSA9ICpzdGF0aWNfY2FzdDxIVE1MVGFibGVFbGVtZW50SW1w
bCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNlIFRhYmxlQ2Fw
dGlvbjogICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLHRhYmxlLmNhcHRpb24oKSk7IC8v
IHR5cGUgSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQKKyAgICAgICAgY2FzZSBUYWJsZVRIZWFkOiAg
ICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyx0YWJsZS50SGVhZCgpKTsgLy8gdHlwZSBI
VE1MVGFibGVTZWN0aW9uRWxlbWVudAorICAgICAgICBjYXNlIFRhYmxlVEZvb3Q6ICAgICAgICAg
ICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLHRhYmxlLnRGb290KCkpOyAvLyB0eXBlIEhUTUxUYWJs
ZVNlY3Rpb25FbGVtZW50CisgICAgICAgIGNhc2UgVGFibGVSb3dzOiAgICAgICAgICAgIHJldHVy
biBnZXRIVE1MQ29sbGVjdGlvbihleGVjLCB0YWJsZS5yb3dzKCkuZ2V0KCkpOyAvLyB0eXBlIEhU
TUxDb2xsZWN0aW9uCisgICAgICAgIGNhc2UgVGFibGVUQm9kaWVzOiAgICAgICAgIHJldHVybiBn
ZXRIVE1MQ29sbGVjdGlvbihleGVjLCB0YWJsZS50Qm9kaWVzKCkuZ2V0KCkpOyAvLyB0eXBlIEhU
TUxDb2xsZWN0aW9uCisgICAgICAgIGNhc2UgVGFibGVBbGlnbjogICAgICAgICAgIHJldHVybiBT
dHJpbmcodGFibGUuYWxpZ24oKSk7CisgICAgICAgIGNhc2UgVGFibGVCZ0NvbG9yOiAgICAgICAg
IHJldHVybiBTdHJpbmcodGFibGUuYmdDb2xvcigpKTsKKyAgICAgICAgY2FzZSBUYWJsZUJvcmRl
cjogICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZS5ib3JkZXIoKSk7CisgICAgICAgIGNhc2Ug
VGFibGVDZWxsUGFkZGluZzogICAgIHJldHVybiBTdHJpbmcodGFibGUuY2VsbFBhZGRpbmcoKSk7
CisgICAgICAgIGNhc2UgVGFibGVDZWxsU3BhY2luZzogICAgIHJldHVybiBTdHJpbmcodGFibGUu
Y2VsbFNwYWNpbmcoKSk7CisgICAgICAgIGNhc2UgVGFibGVGcmFtZTogICAgICAgICAgIHJldHVy
biBTdHJpbmcodGFibGUuZnJhbWUoKSk7CisgICAgICAgIGNhc2UgVGFibGVSdWxlczogICAgICAg
ICAgIHJldHVybiBTdHJpbmcodGFibGUucnVsZXMoKSk7CisgICAgICAgIGNhc2UgVGFibGVTdW1t
YXJ5OiAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGUuc3VtbWFyeSgpKTsKKyAgICAgICAgY2Fz
ZSBUYWJsZVdpZHRoOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZS53aWR0aCgpKTsKKyAg
ICB9CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6dGFi
bGVDYXB0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAg
IEhUTUxUYWJsZUNhcHRpb25FbGVtZW50SW1wbCYgdGFibGVDYXB0aW9uID0gKnN0YXRpY19jYXN0
PEhUTUxUYWJsZUNhcHRpb25FbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09
IFRhYmxlQ2FwdGlvbkFsaWduKQorICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ2FwdGlvbi5h
bGlnbigpKTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50
Ojp0YWJsZUNvbEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAg
ICBIVE1MVGFibGVDb2xFbGVtZW50SW1wbCYgdGFibGVDb2wgPSAqc3RhdGljX2Nhc3Q8SFRNTFRh
YmxlQ29sRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAg
ICAgY2FzZSBUYWJsZUNvbEFsaWduOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNvbC5h
bGlnbigpKTsKKyAgICAgICAgY2FzZSBUYWJsZUNvbENoOiAgICAgICAgICAgICAgcmV0dXJuIFN0
cmluZyh0YWJsZUNvbC5jaCgpKTsKKyAgICAgICAgY2FzZSBUYWJsZUNvbENoT2ZmOiAgICAgICAg
ICAgcmV0dXJuIFN0cmluZyh0YWJsZUNvbC5jaE9mZigpKTsKKyAgICAgICAgY2FzZSBUYWJsZUNv
bFNwYW46ICAgICAgICAgICAgcmV0dXJuIE51bWJlcih0YWJsZUNvbC5zcGFuKCkpOworICAgICAg
ICBjYXNlIFRhYmxlQ29sVkFsaWduOiAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ29sLnZB
bGlnbigpKTsKKyAgICAgICAgY2FzZSBUYWJsZUNvbFdpZHRoOiAgICAgICAgICAgcmV0dXJuIFN0
cmluZyh0YWJsZUNvbC53aWR0aCgpKTsKKyAgICB9CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwor
fQorCitWYWx1ZSBIVE1MRWxlbWVudDo6dGFibGVTZWN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhl
YywgaW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbCYg
dGFibGVTZWN0aW9uID0gKnN0YXRpY19jYXN0PEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbCo+
KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNlIFRhYmxlU2VjdGlv
bkFsaWduOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZVNlY3Rpb24uYWxpZ24oKSk7Cisg
ICAgICAgIGNhc2UgVGFibGVTZWN0aW9uQ2g6ICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRh
YmxlU2VjdGlvbi5jaCgpKTsKKyAgICAgICAgY2FzZSBUYWJsZVNlY3Rpb25DaE9mZjogICAgICAg
ICAgIHJldHVybiBTdHJpbmcodGFibGVTZWN0aW9uLmNoT2ZmKCkpOworICAgICAgICBjYXNlIFRh
YmxlU2VjdGlvblZBbGlnbjogICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZVNlY3Rpb24udkFs
aWduKCkpOworICAgICAgICBjYXNlIFRhYmxlU2VjdGlvblJvd3M6ICAgICAgICAgICAgcmV0dXJu
IGdldEhUTUxDb2xsZWN0aW9uKGV4ZWMsIHRhYmxlU2VjdGlvbi5yb3dzKCkuZ2V0KCkpOyAvLyB0
eXBlIEhUTUxDb2xsZWN0aW9uCisgICAgfQorICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKwor
VmFsdWUgSFRNTEVsZW1lbnQ6OnRhYmxlUm93R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRv
a2VuKSBjb25zdAoreworICAgIEhUTUxUYWJsZVJvd0VsZW1lbnRJbXBsJiB0YWJsZVJvdyA9ICpz
dGF0aWNfY2FzdDxIVE1MVGFibGVSb3dFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNo
ICh0b2tlbikgeworICAgICAgICBjYXNlIFRhYmxlUm93Um93SW5kZXg6ICAgICAgICByZXR1cm4g
TnVtYmVyKHRhYmxlUm93LnJvd0luZGV4KCkpOworICAgICAgICBjYXNlIFRhYmxlUm93U2VjdGlv
blJvd0luZGV4OiByZXR1cm4gTnVtYmVyKHRhYmxlUm93LnNlY3Rpb25Sb3dJbmRleCgpKTsKKyAg
ICAgICAgY2FzZSBUYWJsZVJvd0NlbGxzOiAgICAgICAgICAgcmV0dXJuIGdldEhUTUxDb2xsZWN0
aW9uKGV4ZWMsIHRhYmxlUm93LmNlbGxzKCkuZ2V0KCkpOyAvLyB0eXBlIEhUTUxDb2xsZWN0aW9u
CisgICAgICAgIGNhc2UgVGFibGVSb3dBbGlnbjogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFi
bGVSb3cuYWxpZ24oKSk7CisgICAgICAgIGNhc2UgVGFibGVSb3dCZ0NvbG9yOiAgICAgICAgIHJl
dHVybiBTdHJpbmcodGFibGVSb3cuYmdDb2xvcigpKTsKKyAgICAgICAgY2FzZSBUYWJsZVJvd0No
OiAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZVJvdy5jaCgpKTsKKyAgICAgICAgY2Fz
ZSBUYWJsZVJvd0NoT2ZmOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZVJvdy5jaE9mZigp
KTsKKyAgICAgICAgY2FzZSBUYWJsZVJvd1ZBbGlnbjogICAgICAgICAgcmV0dXJuIFN0cmluZyh0
YWJsZVJvdy52QWxpZ24oKSk7CisgICAgfQorICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKwor
VmFsdWUgSFRNTEVsZW1lbnQ6OnRhYmxlQ2VsbEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0
b2tlbikgY29uc3QKK3sKKyAgICBIVE1MVGFibGVDZWxsRWxlbWVudEltcGwmIHRhYmxlQ2VsbCA9
ICpzdGF0aWNfY2FzdDxIVE1MVGFibGVDZWxsRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3
aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBUYWJsZUNlbGxDZWxsSW5kZXg6ICAgICAgIHJl
dHVybiBOdW1iZXIodGFibGVDZWxsLmNlbGxJbmRleCgpKTsKKyAgICAgICAgY2FzZSBUYWJsZUNl
bGxBYmJyOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVDZWxsLmFiYnIoKSk7CisgICAg
ICAgIGNhc2UgVGFibGVDZWxsQWxpZ246ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ2Vs
bC5hbGlnbigpKTsKKyAgICAgICAgY2FzZSBUYWJsZUNlbGxBeGlzOiAgICAgICAgICAgIHJldHVy
biBTdHJpbmcodGFibGVDZWxsLmF4aXMoKSk7CisgICAgICAgIGNhc2UgVGFibGVDZWxsQmdDb2xv
cjogICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ2VsbC5iZ0NvbG9yKCkpOworICAgICAgICBj
YXNlIFRhYmxlQ2VsbENoOiAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNlbGwuY2go
KSk7CisgICAgICAgIGNhc2UgVGFibGVDZWxsQ2hPZmY6ICAgICAgICAgICByZXR1cm4gU3RyaW5n
KHRhYmxlQ2VsbC5jaE9mZigpKTsKKyAgICAgICAgY2FzZSBUYWJsZUNlbGxDb2xTcGFuOiAgICAg
ICAgIHJldHVybiBOdW1iZXIodGFibGVDZWxsLmNvbFNwYW4oKSk7CisgICAgICAgIGNhc2UgVGFi
bGVDZWxsSGVhZGVyczogICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ2VsbC5oZWFkZXJzKCkp
OworICAgICAgICBjYXNlIFRhYmxlQ2VsbEhlaWdodDogICAgICAgICAgcmV0dXJuIFN0cmluZyh0
YWJsZUNlbGwuaGVpZ2h0KCkpOworICAgICAgICBjYXNlIFRhYmxlQ2VsbE5vV3JhcDogICAgICAg
ICAgcmV0dXJuIEJvb2xlYW4odGFibGVDZWxsLm5vV3JhcCgpKTsKKyAgICAgICAgY2FzZSBUYWJs
ZUNlbGxSb3dTcGFuOiAgICAgICAgIHJldHVybiBOdW1iZXIodGFibGVDZWxsLnJvd1NwYW4oKSk7
CisgICAgICAgIGNhc2UgVGFibGVDZWxsU2NvcGU6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRh
YmxlQ2VsbC5zY29wZSgpKTsKKyAgICAgICAgY2FzZSBUYWJsZUNlbGxWQWxpZ246ICAgICAgICAg
IHJldHVybiBTdHJpbmcodGFibGVDZWxsLnZBbGlnbigpKTsKKyAgICAgICAgY2FzZSBUYWJsZUNl
bGxXaWR0aDogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVDZWxsLndpZHRoKCkpOworICAg
IH0KKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50OjpmcmFt
ZVNldEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1M
RnJhbWVTZXRFbGVtZW50SW1wbCYgZnJhbWVTZXQgPSAqc3RhdGljX2Nhc3Q8SFRNTEZyYW1lU2V0
RWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2Fz
ZSBGcmFtZVNldENvbHM6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhmcmFtZVNldC5jb2xzKCkp
OworICAgICAgICBjYXNlIEZyYW1lU2V0Um93czogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGZy
YW1lU2V0LnJvd3MoKSk7CisgICAgfQorICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFs
dWUgSFRNTEVsZW1lbnQ6OmZyYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBj
b25zdAoreworICAgIEhUTUxGcmFtZUVsZW1lbnRJbXBsJiBmcmFtZUVsZW1lbnQgPSAqc3RhdGlj
X2Nhc3Q8SFRNTEZyYW1lRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4p
IHsKKyAgICAgICAgY2FzZSBGcmFtZUNvbnRlbnREb2N1bWVudDogcmV0dXJuIGNoZWNrTm9kZVNl
Y3VyaXR5KGV4ZWMsZnJhbWVFbGVtZW50LmNvbnRlbnREb2N1bWVudCgpKSA/IAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0RE9NTm9kZShleGVjLCBmcmFtZUVs
ZW1lbnQuY29udGVudERvY3VtZW50KCkpIDogVW5kZWZpbmVkKCk7CisgICAgICAgIGNhc2UgRnJh
bWVDb250ZW50V2luZG93OiAgIHJldHVybiBjaGVja05vZGVTZWN1cml0eShleGVjLGZyYW1lRWxl
bWVudC5jb250ZW50RG9jdW1lbnQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA/IFdpbmRvdzo6cmV0cmlldmUoZnJhbWVFbGVtZW50LmNvbnRlbnRQYXJ0KCkpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBVbmRlZmluZWQoKTsKKyAg
ICAgICAgY2FzZSBGcmFtZUZyYW1lQm9yZGVyOiAgICAgcmV0dXJuIFN0cmluZyhmcmFtZUVsZW1l
bnQuZnJhbWVCb3JkZXIoKSk7CisgICAgICAgIGNhc2UgRnJhbWVMb25nRGVzYzogICAgICAgIHJl
dHVybiBTdHJpbmcoZnJhbWVFbGVtZW50LmxvbmdEZXNjKCkpOworICAgICAgICBjYXNlIEZyYW1l
TWFyZ2luSGVpZ2h0OiAgICByZXR1cm4gU3RyaW5nKGZyYW1lRWxlbWVudC5tYXJnaW5IZWlnaHQo
KSk7CisgICAgICAgIGNhc2UgRnJhbWVNYXJnaW5XaWR0aDogICAgIHJldHVybiBTdHJpbmcoZnJh
bWVFbGVtZW50Lm1hcmdpbldpZHRoKCkpOworICAgICAgICBjYXNlIEZyYW1lTmFtZTogICAgICAg
ICAgICByZXR1cm4gU3RyaW5nKGZyYW1lRWxlbWVudC5uYW1lKCkpOworICAgICAgICBjYXNlIEZy
YW1lTm9SZXNpemU6ICAgICAgICByZXR1cm4gQm9vbGVhbihmcmFtZUVsZW1lbnQubm9SZXNpemUo
KSk7CisgICAgICAgIGNhc2UgRnJhbWVTY3JvbGxpbmc6ICAgICAgIHJldHVybiBTdHJpbmcoZnJh
bWVFbGVtZW50LnNjcm9sbGluZygpKTsKKyAgICAgICAgY2FzZSBGcmFtZVNyYzoKKyAgICAgICAg
Y2FzZSBGcmFtZUxvY2F0aW9uOiAgICAgICAgcmV0dXJuIFN0cmluZyhmcmFtZUVsZW1lbnQuc3Jj
KCkpOworICAgIH0KKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVt
ZW50OjppRnJhbWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7Cisg
ICAgSFRNTElGcmFtZUVsZW1lbnRJbXBsJiBpRnJhbWUgPSAqc3RhdGljX2Nhc3Q8SFRNTElGcmFt
ZUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNh
c2UgSUZyYW1lQWxpZ246ICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoaUZyYW1lLmFsaWdu
KCkpOworICAgICAgICAgIC8vICMjIyBzZWN1cml0eSBjaGVjayA/CisgICAgICAgIGNhc2UgSUZy
YW1lRG9jdW1lbnQ6IC8vIG5vbi1zdGFuZGFyZCwgbWFwcGVkIHRvIGNvbnRlbnREb2N1bWVudAor
ICAgICAgICBjYXNlIElGcmFtZUNvbnRlbnREb2N1bWVudDogcmV0dXJuIGNoZWNrTm9kZVNlY3Vy
aXR5KGV4ZWMsaUZyYW1lLmNvbnRlbnREb2N1bWVudCgpKSA/IAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBnZXRET01Ob2RlKGV4ZWMsIGlGcmFtZS5jb250ZW50RG9jdW1l
bnQoKSkgOiBVbmRlZmluZWQoKTsKKyAgICAgICAgY2FzZSBJRnJhbWVDb250ZW50V2luZG93Ogly
ZXR1cm4gY2hlY2tOb2RlU2VjdXJpdHkoZXhlYyxpRnJhbWUuY29udGVudERvY3VtZW50KCkpIAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gV2luZG93OjpyZXRyaWV2
ZShpRnJhbWUuY29udGVudFBhcnQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA6IFVuZGVmaW5lZCgpOworICAgICAgICBjYXNlIElGcmFtZUZyYW1lQm9yZGVyOiAg
ICAgcmV0dXJuIFN0cmluZyhpRnJhbWUuZnJhbWVCb3JkZXIoKSk7CisgICAgICAgIGNhc2UgSUZy
YW1lSGVpZ2h0OiAgICAgICAgICByZXR1cm4gU3RyaW5nKGlGcmFtZS5oZWlnaHQoKSk7CisgICAg
ICAgIGNhc2UgSUZyYW1lTG9uZ0Rlc2M6ICAgICAgICByZXR1cm4gU3RyaW5nKGlGcmFtZS5sb25n
RGVzYygpKTsKKyAgICAgICAgY2FzZSBJRnJhbWVNYXJnaW5IZWlnaHQ6ICAgIHJldHVybiBTdHJp
bmcoaUZyYW1lLm1hcmdpbkhlaWdodCgpKTsKKyAgICAgICAgY2FzZSBJRnJhbWVNYXJnaW5XaWR0
aDogICAgIHJldHVybiBTdHJpbmcoaUZyYW1lLm1hcmdpbldpZHRoKCkpOworICAgICAgICBjYXNl
IElGcmFtZU5hbWU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpRnJhbWUubmFtZSgpKTsKKyAg
ICAgICAgY2FzZSBJRnJhbWVTY3JvbGxpbmc6ICAgICAgIHJldHVybiBTdHJpbmcoaUZyYW1lLnNj
cm9sbGluZygpKTsKKyAgICAgICAgY2FzZSBJRnJhbWVTcmM6ICAgICAgICAgICAgIHJldHVybiBT
dHJpbmcoaUZyYW1lLnNyYygpKTsKKyAgICAgICAgY2FzZSBJRnJhbWVXaWR0aDogICAgICAgICAg
IHJldHVybiBTdHJpbmcoaUZyYW1lLndpZHRoKCkpOworICAgIH0KKyAgICByZXR1cm4gVW5kZWZp
bmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50OjptYXJxdWVlR2V0dGVyKEV4ZWNTdGF0ZSog
ZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBGaW5kIG91dCB3aGF0IFdp
bklFIGV4cG9zZXMgYXMgcHJvcGVydGllcyBhbmQgaW1wbGVtZW50IHRoaXMuCisgICAgcmV0dXJu
IFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICAvLyBDaGVjayBvdXIgc2V0
IG9mIGdlbmVyaWMgcHJvcGVydGllcyBmaXJzdC4KKyAgICBIVE1MRWxlbWVudEltcGwgJmVsZW1l
bnQgPSAqc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KGltcGwoKSk7CisgICAgc3dpdGNo
ICh0b2tlbikgeworICAgICAgICBjYXNlIEVsZW1lbnRJZDoKKyAgICAgICAgLy8gaWh0LmNvbSBy
ZWxpZXMgb24gdGhpcyB2YWx1ZSBiZWluZyAiIiB3aGVuIG5vIGlkIGlzIHByZXNlbnQuICBPdGhl
ciBicm93c2VycyBkbyB0aGlzIGFzIHdlbGwuCisgICAgICAgIC8vIFNvIHdlIHVzZSBTdHJpbmco
KSBpbnN0ZWFkIG9mIFN0cmluZygpIGhlcmUuCisgICAgICAgIHJldHVybiBTdHJpbmcoZWxlbWVu
dC5pZERPTSgpKTsKKyAgICAgICAgY2FzZSBFbGVtZW50VGl0bGU6CisgICAgICAgICAgICByZXR1
cm4gU3RyaW5nKGVsZW1lbnQudGl0bGUoKSk7CisgICAgICAgIGNhc2UgRWxlbWVudExhbmc6Cisg
ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGVsZW1lbnQubGFuZygpKTsKKyAgICAgICAgY2FzZSBF
bGVtZW50RGlyOgorICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhlbGVtZW50LmRpcigpKTsKKyAg
ICAgICAgY2FzZSBFbGVtZW50Q2xhc3NOYW1lOgorICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhl
bGVtZW50LmNsYXNzTmFtZSgpKTsKKyAgICAgICAgY2FzZSBFbGVtZW50SW5uZXJIVE1MOgorICAg
ICAgICAgICAgcmV0dXJuIFN0cmluZyhlbGVtZW50LmlubmVySFRNTCgpKTsKKyAgICAgICAgY2Fz
ZSBFbGVtZW50SW5uZXJUZXh0OgorICAgICAgICAgICAgaWYgKERvY3VtZW50SW1wbCogZG9jID0g
aW1wbCgpLT5nZXREb2N1bWVudCgpKQorICAgICAgICAgICAgICAgIGRvYy0+dXBkYXRlTGF5b3V0
SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGVs
ZW1lbnQuaW5uZXJUZXh0KCkpOworICAgICAgICBjYXNlIEVsZW1lbnRPdXRlckhUTUw6CisgICAg
ICAgICAgICByZXR1cm4gU3RyaW5nKGVsZW1lbnQub3V0ZXJIVE1MKCkpOworICAgICAgICBjYXNl
IEVsZW1lbnRPdXRlclRleHQ6CisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGVsZW1lbnQub3V0
ZXJUZXh0KCkpOworICAgICAgICBjYXNlIEVsZW1lbnREb2N1bWVudDoKKyAgICAgICAgICAgIHJl
dHVybiBnZXRET01Ob2RlKGV4ZWMsZWxlbWVudC5vd25lckRvY3VtZW50KCkpOworICAgICAgICBj
YXNlIEVsZW1lbnRDaGlsZHJlbjoKKyAgICAgICAgICAgIHJldHVybiBnZXRIVE1MQ29sbGVjdGlv
bihleGVjLCBlbGVtZW50LmNoaWxkcmVuKCkuZ2V0KCkpOworICAgICAgICBjYXNlIEVsZW1lbnRD
b250ZW50RWRpdGFibGU6CisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGVsZW1lbnQuY29udGVu
dEVkaXRhYmxlKCkpOworICAgICAgICBjYXNlIEVsZW1lbnRJc0NvbnRlbnRFZGl0YWJsZToKKyAg
ICAgICAgICAgIHJldHVybiBCb29sZWFuKGVsZW1lbnQuaXNDb250ZW50RWRpdGFibGUoKSk7Cisg
ICAgfQorCisgICAgLy8gTm93IGNoZWNrIHRoZSBwcm9wZXJ0aWVzIHNwZWNpZmljIHRvIG91ciBl
bGVtZW50IHR5cGUuCisgICAgY29uc3QgR2V0U2V0SW5mbyogaW5mbyA9IGdldFNldEluZm8oKTsK
KyAgICBpZiAoaW5mbyAmJiBpbmZvLT5tX2dldHRlcikKKyAgICAgICAgcmV0dXJuICh0aGlzLT4q
KGluZm8tPm1fZ2V0dGVyKSkoZXhlYywgdG9rZW4pOworICAgIHJldHVybiBVbmRlZmluZWQoKTsK
K30KKworYm9vbCBLSlM6OkhUTUxFbGVtZW50OjpoYXNQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMs
IGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSkgY29uc3QKK3sKKyNpZmRlZiBLSlNfVkVS
Qk9TRQorICAgIC8va2REZWJ1Zyg2MDcwKSA8PCAiSFRNTEVsZW1lbnQ6Omhhc1Byb3BlcnR5ICIg
PDwgcHJvcGVydHlOYW1lLnFzdHJpbmcoKSA8PCBlbmRsOworI2VuZGlmCisgICAgSFRNTEVsZW1l
bnRJbXBsICZlbGVtZW50ID0gKnN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCAqPihpbXBsKCkp
OworICAgIC8vIEZpcnN0IGxvb2sgYXQgZHluYW1pYyBwcm9wZXJ0aWVzIC0ga2VlcCB0aGlzIGlu
IHN5bmMgd2l0aCB0cnlHZXQKKyAgICBpZiAoZWxlbWVudC5oYXNMb2NhbE5hbWUoSFRNTE5hbWVz
Ojpmb3JtKCkpKSB7CisgICAgICAgIEhUTUxGb3JtRWxlbWVudEltcGwgJmZvcm0gPSBzdGF0aWNf
Y2FzdDxIVE1MRm9ybUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgICAgICAvLyBDaGVjayBp
ZiB3ZSdyZSByZXRyaWV2aW5nIGFuIGVsZW1lbnQgKGJ5IGluZGV4IG9yIGJ5IG5hbWUpCisgICAg
ICAgIGJvb2wgb2s7CisgICAgICAgIHVpbnQgdSA9IHByb3BlcnR5TmFtZS50b1VMb25nKCZvayk7
CisgICAgICAgIGlmIChvayAmJiBmb3JtLmVsZW1lbnRzKCktPml0ZW0odSkpCisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKGZvcm0uZWxlbWVudHMoKS0+bmFtZWRJdGVtKHBy
b3BlcnR5TmFtZS5zdHJpbmcoKSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cisg
ICAgZWxzZSBpZiAoZWxlbWVudC5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpzZWxlY3QoKSkpIHsK
KyAgICAgICAgSFRNTFNlbGVjdEVsZW1lbnRJbXBsICZzZWxlY3QgPSBzdGF0aWNfY2FzdDxIVE1M
U2VsZWN0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgICAgIGJvb2wgb2s7CisgICAgICAg
IHVpbnQgdSA9IHByb3BlcnR5TmFtZS50b1VMb25nKCZvayk7CisgICAgICAgIGlmIChvayAmJiBz
ZWxlY3Qub3B0aW9uc0hUTUxDb2xsZWN0aW9uKCktPml0ZW0odSkpCisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIERPTUVsZW1lbnQ6Omhhc1Byb3BlcnR5KGV4ZWMs
IHByb3BlcnR5TmFtZSk7Cit9CisKK1VTdHJpbmcgS0pTOjpIVE1MRWxlbWVudDo6dG9TdHJpbmco
RXhlY1N0YXRlICpleGVjKSBjb25zdAoreworICBpZiAoaW1wbCgpLT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6YSgpKSkKKyAgICByZXR1cm4gVVN0cmluZyhzdGF0aWNfY2FzdDxjb25zdCBIVE1MQW5j
aG9yRWxlbWVudEltcGwgKj4oaW1wbCgpKS0+aHJlZigpKTsKKyAgZWxzZQorICAgIHJldHVybiBE
T01FbGVtZW50Ojp0b1N0cmluZyhleGVjKTsKK30KKworc3RhdGljIEhUTUxGb3JtRWxlbWVudElt
cGwgKmdldEZvcm0oSFRNTEVsZW1lbnRJbXBsICplbGVtZW50KQoreworICBpZiAoZWxlbWVudC0+
aXNHZW5lcmljRm9ybUVsZW1lbnQoKSkKKyAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MR2Vu
ZXJpY0Zvcm1FbGVtZW50SW1wbCAqPihlbGVtZW50KS0+Zm9ybSgpOworICBpZiAoZWxlbWVudC0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OmxhYmVsKCkpKQorICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PEhUTUxMYWJlbEVsZW1lbnRJbXBsICo+KGVsZW1lbnQpLT5mb3JtKCk7CisgIGlmIChlbGVtZW50
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b2JqZWN0KCkpKQorICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PEhUTUxPYmplY3RFbGVtZW50SW1wbCAqPihlbGVtZW50KS0+Zm9ybSgpOworCisgIHJldHVy
biAwOworfQorCit2b2lkIEtKUzo6SFRNTEVsZW1lbnQ6OnB1c2hFdmVudEhhbmRsZXJTY29wZShF
eGVjU3RhdGUgKmV4ZWMsIFNjb3BlQ2hhaW4gJnNjb3BlKSBjb25zdAogewogICBIVE1MRWxlbWVu
dEltcGwgKmVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwgKj4oaW1wbCgpKTsK
IApAQCAtMjA5Nyw3ICsyMjUzLDcgQEAgdm9pZCBLSlM6OkhUTUxFbGVtZW50OjpwdXNoRXZlbnRI
YW5kbGVyUwogICAgIHNjb3BlLnB1c2goc3RhdGljX2Nhc3Q8T2JqZWN0SW1wICo+KGdldERPTU5v
ZGUoZXhlYywgZm9ybSkpKTsKICAgZWxzZSB7CiAgICAgTm9kZUltcGwgKmZvcm0gPSBlbGVtZW50
LT5wYXJlbnROb2RlKCk7Ci0gICAgd2hpbGUgKGZvcm0gJiYgZm9ybS0+aWQoKSAhPSBJRF9GT1JN
KQorICAgIHdoaWxlIChmb3JtICYmICFmb3JtLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Zm9ybSgp
KSkKICAgICAgIGZvcm0gPSBmb3JtLT5wYXJlbnROb2RlKCk7CiAgICAgCiAgICAgaWYgKGZvcm0p
CkBAIC0yMTE3LDE2MiArMjI3MywxNTEgQEAgSFRNTEVsZW1lbnRGdW5jdGlvbjo6SFRNTEVsZW1l
bnRGdW5jdGlvbgogCiBWYWx1ZSBLSlM6OkhUTUxFbGVtZW50RnVuY3Rpb246OnRyeUNhbGwoRXhl
Y1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7Ci0gIGlm
ICghdGhpc09iai5pbmhlcml0cygmS0pTOjpIVE1MRWxlbWVudDo6aW5mbykpIHsKLSAgICBPYmpl
Y3QgZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5cGVFcnJvcik7Ci0gICAgZXhlYy0+c2V0RXhj
ZXB0aW9uKGVycik7Ci0gICAgcmV0dXJuIGVycjsKLSAgfQotICBrZERlYnVnKCkgPDwgIktKUzo6
SFRNTEVsZW1lbnRGdW5jdGlvbjo6dHJ5Q2FsbCAiIDw8IGVuZGw7Ci0gIERPTUV4Y2VwdGlvblRy
YW5zbGF0b3IgZXhjZXB0aW9uKGV4ZWMpOwotICBIVE1MRWxlbWVudEltcGwgJmVsZW1lbnQgPSAq
c3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KHN0YXRpY19jYXN0PEhUTUxFbGVtZW50ICo+
KHRoaXNPYmouaW1wKCkpLT5pbXBsKCkpOwotCi0gIHN3aXRjaCAoZWxlbWVudC5pZCgpKSB7Ci0g
ICAgY2FzZSBJRF9GT1JNOiB7Ci0gICAgICBIVE1MRm9ybUVsZW1lbnRJbXBsICZmb3JtID0gc3Rh
dGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIGlmIChpZCA9
PSBLSlM6OkhUTUxFbGVtZW50OjpGb3JtU3VibWl0KSB7Ci0gICAgICAgIGZvcm0uc3VibWl0KCk7
Ci0gICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGlk
ID09IEtKUzo6SFRNTEVsZW1lbnQ6OkZvcm1SZXNldCkgewotICAgICAgICBmb3JtLnJlc2V0KCk7
Ci0gICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKLSAgICAgIH0KKyAgICBpZiAoIXRoaXNPYmou
aW5oZXJpdHMoJktKUzo6SFRNTEVsZW1lbnQ6OmluZm8pKSB7CisgICAgICAgIE9iamVjdCBlcnIg
PSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsKKyAgICAgICAgZXhlYy0+c2V0RXhjZXB0
aW9uKGVycik7CisgICAgICAgIHJldHVybiBlcnI7CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNh
c2UgSURfU0VMRUNUOiB7Ci0gICAgICBIVE1MU2VsZWN0RWxlbWVudEltcGwgJnNlbGVjdCA9IHN0
YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIGlmIChp
ZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpTZWxlY3RBZGQpIHsKLSAgICAgICAgc2VsZWN0LmFkZCh0
b0hUTUxFbGVtZW50KGFyZ3NbMF0pLCB0b0hUTUxFbGVtZW50KGFyZ3NbMV0pKTsKLSAgICAgICAg
cmV0dXJuIFVuZGVmaW5lZCgpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpI
VE1MRWxlbWVudDo6U2VsZWN0UmVtb3ZlKSB7Ci0gICAgICAgIHNlbGVjdC5yZW1vdmUoaW50KGFy
Z3NbMF0udG9OdW1iZXIoZXhlYykpKTsKLSAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwotICAg
ICAgfQotICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6U2VsZWN0Qmx1cikg
ewotICAgICAgICBzZWxlY3QuYmx1cigpOwotICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0g
ICAgICB9Ci0gICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpTZWxlY3RGb2N1
cykgewotICAgICAgICBzZWxlY3QuZm9jdXMoKTsKLSAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgp
OwotICAgICAgfQorICAgIGtkRGVidWcoKSA8PCAiS0pTOjpIVE1MRWxlbWVudEZ1bmN0aW9uOjp0
cnlDYWxsICIgPDwgZW5kbDsKKyAgICBET01FeGNlcHRpb25UcmFuc2xhdG9yIGV4Y2VwdGlvbihl
eGVjKTsKKyAgICBIVE1MRWxlbWVudEltcGwgJmVsZW1lbnQgPSAqc3RhdGljX2Nhc3Q8SFRNTEVs
ZW1lbnRJbXBsICo+KHN0YXRpY19jYXN0PEhUTUxFbGVtZW50ICo+KHRoaXNPYmouaW1wKCkpLT5p
bXBsKCkpOworCisgICAgaWYgKGVsZW1lbnQuaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6Zm9ybSgp
KSkgeworICAgICAgICBIVE1MRm9ybUVsZW1lbnRJbXBsICZmb3JtID0gc3RhdGljX2Nhc3Q8SFRN
TEZvcm1FbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICAgICAgaWYgKGlkID09IEtKUzo6SFRN
TEVsZW1lbnQ6OkZvcm1TdWJtaXQpIHsKKyAgICAgICAgICAgIGZvcm0uc3VibWl0KCk7CisgICAg
ICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAo
aWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6Rm9ybVJlc2V0KSB7CisgICAgICAgICAgICBmb3JtLnJl
c2V0KCk7CisgICAgICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CisgICAgICAgIH0KICAgICB9
Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9JTlBVVDogewotICAgICAgSFRNTElucHV0RWxlbWVu
dEltcGwgJmlucHV0ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudEltcGwgJj4oZWxlbWVu
dCk7Ci0gICAgICBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6SW5wdXRCbHVyKSB7Ci0gICAg
ICAgIGlucHV0LmJsdXIoKTsKLSAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwotICAgICAgfQot
ICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6SW5wdXRGb2N1cykgewotICAg
ICAgICBpbnB1dC5mb2N1cygpOwotICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9
Ci0gICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpJbnB1dFNlbGVjdCkgewot
ICAgICAgICBpbnB1dC5zZWxlY3QoKTsKLSAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwotICAg
ICAgfQotICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6SW5wdXRDbGljaykg
ewotICAgICAgICBpbnB1dC5jbGljaygpOwotICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0g
ICAgICB9CisgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpzZWxl
Y3QoKSkpIHsKKyAgICAgICAgSFRNTFNlbGVjdEVsZW1lbnRJbXBsICZzZWxlY3QgPSBzdGF0aWNf
Y2FzdDxIVE1MU2VsZWN0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgICAgIGlmIChpZCA9
PSBLSlM6OkhUTUxFbGVtZW50OjpTZWxlY3RBZGQpIHsKKyAgICAgICAgICAgIHNlbGVjdC5hZGQo
dG9IVE1MRWxlbWVudChhcmdzWzBdKSwgdG9IVE1MRWxlbWVudChhcmdzWzFdKSk7CisgICAgICAg
ICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoaWQg
PT0gS0pTOjpIVE1MRWxlbWVudDo6U2VsZWN0UmVtb3ZlKSB7CisgICAgICAgICAgICBzZWxlY3Qu
cmVtb3ZlKGludChhcmdzWzBdLnRvTnVtYmVyKGV4ZWMpKSk7CisgICAgICAgICAgICByZXR1cm4g
VW5kZWZpbmVkKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1M
RWxlbWVudDo6U2VsZWN0Qmx1cikgeworICAgICAgICAgICAgc2VsZWN0LmJsdXIoKTsKKyAgICAg
ICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChp
ZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpTZWxlY3RGb2N1cykgeworICAgICAgICAgICAgc2VsZWN0
LmZvY3VzKCk7CisgICAgICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CisgICAgICAgIH0KICAg
ICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9CVVRUT046IHsKLSAgICAgIEhUTUxCdXR0b25F
bGVtZW50SW1wbCAmYnV0dG9uID0gc3RhdGljX2Nhc3Q8SFRNTEJ1dHRvbkVsZW1lbnRJbXBsICY+
KGVsZW1lbnQpOwotICAgICAgCi0gICAgICBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6QnV0
dG9uQmx1cikgewotICAgICAgICBidXR0b24uYmx1cigpOwotICAgICAgICByZXR1cm4gVW5kZWZp
bmVkKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpC
dXR0b25Gb2N1cykgewotICAgICAgICBidXR0b24uZm9jdXMoKTsKLSAgICAgICAgcmV0dXJuIFVu
ZGVmaW5lZCgpOwotICAgICAgfQorICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFzTG9jYWxOYW1lKEhU
TUxOYW1lczo6aW5wdXQoKSkpIHsKKyAgICAgICAgSFRNTElucHV0RWxlbWVudEltcGwgJmlucHV0
ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgICAg
IGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpJbnB1dEJsdXIpIHsKKyAgICAgICAgICAgIGlu
cHV0LmJsdXIoKTsKKyAgICAgICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKKyAgICAgICAgfQor
ICAgICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpJbnB1dEZvY3VzKSB7Cisg
ICAgICAgICAgICBpbnB1dC5mb2N1cygpOworICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgp
OworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6Oklu
cHV0U2VsZWN0KSB7CisgICAgICAgICAgICBpbnB1dC5zZWxlY3QoKTsKKyAgICAgICAgICAgIHJl
dHVybiBVbmRlZmluZWQoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChpZCA9PSBLSlM6
OkhUTUxFbGVtZW50OjpJbnB1dENsaWNrKSB7CisgICAgICAgICAgICBpbnB1dC5jbGljaygpOwor
ICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAgICAgICB9CiAgICAgfQotICAgIGJy
ZWFrOwotICAgIGNhc2UgSURfVEVYVEFSRUE6IHsKLSAgICAgIEhUTUxUZXh0QXJlYUVsZW1lbnRJ
bXBsICZ0ZXh0YXJlYSA9IHN0YXRpY19jYXN0PEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBsICY+KGVs
ZW1lbnQpOwotICAgICAgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRleHRBcmVhQmx1cikg
ewotICAgICAgICB0ZXh0YXJlYS5ibHVyKCk7Ci0gICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsK
LSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRleHRBcmVh
Rm9jdXMpIHsKLSAgICAgICAgdGV4dGFyZWEuZm9jdXMoKTsKLSAgICAgICAgcmV0dXJuIFVuZGVm
aW5lZCgpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6
VGV4dEFyZWFTZWxlY3QpIHsKLSAgICAgICAgdGV4dGFyZWEuc2VsZWN0KCk7Ci0gICAgICAgIHJl
dHVybiBVbmRlZmluZWQoKTsKLSAgICAgIH0KKyAgICBlbHNlIGlmIChlbGVtZW50Lmhhc0xvY2Fs
TmFtZShIVE1MTmFtZXM6OmJ1dHRvbigpKSkgeworICAgICAgICBIVE1MQnV0dG9uRWxlbWVudElt
cGwgJmJ1dHRvbiA9IHN0YXRpY19jYXN0PEhUTUxCdXR0b25FbGVtZW50SW1wbCAmPihlbGVtZW50
KTsKKyAgICAgICAgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OkJ1dHRvbkJsdXIpIHsKKyAg
ICAgICAgICAgIGJ1dHRvbi5ibHVyKCk7CisgICAgICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7
CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6QnV0
dG9uRm9jdXMpIHsKKyAgICAgICAgICAgIGJ1dHRvbi5mb2N1cygpOworICAgICAgICAgICAgcmV0
dXJuIFVuZGVmaW5lZCgpOworICAgICAgICB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2Ug
SURfQTogewotICAgICAgSFRNTEFuY2hvckVsZW1lbnRJbXBsICZhbmNob3IgPSBzdGF0aWNfY2Fz
dDxIVE1MQW5jaG9yRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBpZiAoaWQgPT0gS0pT
OjpIVE1MRWxlbWVudDo6QW5jaG9yQmx1cikgewotICAgICAgICBhbmNob3IuYmx1cigpOwotICAg
ICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChpZCA9PSBL
SlM6OkhUTUxFbGVtZW50OjpBbmNob3JGb2N1cykgewotICAgICAgICBhbmNob3IuZm9jdXMoKTsK
LSAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwotICAgICAgfSAKLSAgICAgIGVsc2UgaWYgKGlk
ID09IEtKUzo6SFRNTEVsZW1lbnQ6OkFuY2hvclRvU3RyaW5nKSB7Ci0JcmV0dXJuIFN0cmluZyh0
aGlzT2JqLnRvU3RyaW5nKGV4ZWMpKTsKLSAgICAgIH0KKyAgICBlbHNlIGlmIChlbGVtZW50Lmhh
c0xvY2FsTmFtZShIVE1MTmFtZXM6OnRleHRhcmVhKCkpKSB7CisgICAgICAgIEhUTUxUZXh0QXJl
YUVsZW1lbnRJbXBsICZ0ZXh0YXJlYSA9IHN0YXRpY19jYXN0PEhUTUxUZXh0QXJlYUVsZW1lbnRJ
bXBsICY+KGVsZW1lbnQpOworICAgICAgICBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6VGV4
dEFyZWFCbHVyKSB7CisgICAgICAgICAgICB0ZXh0YXJlYS5ibHVyKCk7CisgICAgICAgICAgICBy
ZXR1cm4gVW5kZWZpbmVkKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoaWQgPT0gS0pT
OjpIVE1MRWxlbWVudDo6VGV4dEFyZWFGb2N1cykgeworICAgICAgICAgICAgdGV4dGFyZWEuZm9j
dXMoKTsKKyAgICAgICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKKyAgICAgICAgfQorICAgICAg
ICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUZXh0QXJlYVNlbGVjdCkgeworICAg
ICAgICAgICAgdGV4dGFyZWEuc2VsZWN0KCk7CisgICAgICAgICAgICByZXR1cm4gVW5kZWZpbmVk
KCk7CisgICAgICAgIH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9UQUJMRTogewot
ICAgICAgSFRNTFRhYmxlRWxlbWVudEltcGwgJnRhYmxlID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxl
RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVu
dDo6VGFibGVDcmVhdGVUSGVhZCkKLSAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyx0YWJs
ZS5jcmVhdGVUSGVhZCgpKTsKLSAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6
OlRhYmxlRGVsZXRlVEhlYWQpIHsKLSAgICAgICAgdGFibGUuZGVsZXRlVEhlYWQoKTsKLSAgICAg
ICAgcmV0dXJuIFVuZGVmaW5lZCgpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoaWQgPT0gS0pT
OjpIVE1MRWxlbWVudDo6VGFibGVDcmVhdGVURm9vdCkKLSAgICAgICAgcmV0dXJuIGdldERPTU5v
ZGUoZXhlYyx0YWJsZS5jcmVhdGVURm9vdCgpKTsKLSAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6
SFRNTEVsZW1lbnQ6OlRhYmxlRGVsZXRlVEZvb3QpIHsKLSAgICAgICAgdGFibGUuZGVsZXRlVEZv
b3QoKTsKLSAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwotICAgICAgfQotICAgICAgZWxzZSBp
ZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6VGFibGVDcmVhdGVDYXB0aW9uKQotICAgICAgICBy
ZXR1cm4gZ2V0RE9NTm9kZShleGVjLHRhYmxlLmNyZWF0ZUNhcHRpb24oKSk7Ci0gICAgICBlbHNl
IGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUYWJsZURlbGV0ZUNhcHRpb24pIHsKLSAgICAg
ICAgdGFibGUuZGVsZXRlQ2FwdGlvbigpOwotICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0g
ICAgICB9Ci0gICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUYWJsZUluc2Vy
dFJvdykKLSAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyx0YWJsZS5pbnNlcnRSb3coYXJn
c1swXS50b0ludDMyKGV4ZWMpLCBleGNlcHRpb24pKTsKLSAgICAgIGVsc2UgaWYgKGlkID09IEtK
Uzo6SFRNTEVsZW1lbnQ6OlRhYmxlRGVsZXRlUm93KSB7Ci0gICAgICAgIHRhYmxlLmRlbGV0ZVJv
dyhhcmdzWzBdLnRvSW50MzIoZXhlYyksIGV4Y2VwdGlvbik7Ci0gICAgICAgIHJldHVybiBVbmRl
ZmluZWQoKTsKLSAgICAgIH0KKyAgICBlbHNlIGlmIChlbGVtZW50Lmhhc0xvY2FsTmFtZShIVE1M
TmFtZXM6OmEoKSkpIHsKKyAgICAgICAgSFRNTEFuY2hvckVsZW1lbnRJbXBsICZhbmNob3IgPSBz
dGF0aWNfY2FzdDxIVE1MQW5jaG9yRWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgICAgIGlm
IChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpBbmNob3JCbHVyKSB7CisgICAgICAgICAgICBhbmNo
b3IuYmx1cigpOworICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAgICAgICB9Cisg
ICAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OkFuY2hvckZvY3VzKSB7Cisg
ICAgICAgICAgICBhbmNob3IuZm9jdXMoKTsKKyAgICAgICAgICAgIHJldHVybiBVbmRlZmluZWQo
KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpB
bmNob3JUb1N0cmluZykKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcodGhpc09iai50b1N0cmlu
ZyhleGVjKSk7CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfVEhFQUQ6Ci0gICAgY2Fz
ZSBJRF9UQk9EWToKLSAgICBjYXNlIElEX1RGT09UOiB7Ci0gICAgICBIVE1MVGFibGVTZWN0aW9u
RWxlbWVudEltcGwgJnRhYmxlU2VjdGlvbiA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZVNlY3Rpb25F
bGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50
OjpUYWJsZVNlY3Rpb25JbnNlcnRSb3cpCi0gICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMs
IHRhYmxlU2VjdGlvbi5pbnNlcnRSb3coYXJnc1swXS50b0ludDMyKGV4ZWMpLCBleGNlcHRpb24p
KTsKLSAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRhYmxlU2VjdGlvbkRl
bGV0ZVJvdykgewotICAgICAgICB0YWJsZVNlY3Rpb24uZGVsZXRlUm93KGFyZ3NbMF0udG9JbnQz
MihleGVjKSwgZXhjZXB0aW9uKTsKLSAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwotICAgICAg
fQorICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dGFibGUoKSkp
IHsKKyAgICAgICAgSFRNTFRhYmxlRWxlbWVudEltcGwgJnRhYmxlID0gc3RhdGljX2Nhc3Q8SFRN
TFRhYmxlRWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgICAgIGlmIChpZCA9PSBLSlM6OkhU
TUxFbGVtZW50OjpUYWJsZUNyZWF0ZVRIZWFkKQorICAgICAgICAgICAgcmV0dXJuIGdldERPTU5v
ZGUoZXhlYyx0YWJsZS5jcmVhdGVUSGVhZCgpKTsKKyAgICAgICAgZWxzZSBpZiAoaWQgPT0gS0pT
OjpIVE1MRWxlbWVudDo6VGFibGVEZWxldGVUSGVhZCkgeworICAgICAgICAgICAgdGFibGUuZGVs
ZXRlVEhlYWQoKTsKKyAgICAgICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKKyAgICAgICAgfQor
ICAgICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUYWJsZUNyZWF0ZVRGb290
KQorICAgICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyx0YWJsZS5jcmVhdGVURm9vdCgp
KTsKKyAgICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6VGFibGVEZWxldGVU
Rm9vdCkgeworICAgICAgICAgICAgdGFibGUuZGVsZXRlVEZvb3QoKTsKKyAgICAgICAgICAgIHJl
dHVybiBVbmRlZmluZWQoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChpZCA9PSBLSlM6
OkhUTUxFbGVtZW50OjpUYWJsZUNyZWF0ZUNhcHRpb24pCisgICAgICAgICAgICByZXR1cm4gZ2V0
RE9NTm9kZShleGVjLHRhYmxlLmNyZWF0ZUNhcHRpb24oKSk7CisgICAgICAgIGVsc2UgaWYgKGlk
ID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRhYmxlRGVsZXRlQ2FwdGlvbikgeworICAgICAgICAgICAg
dGFibGUuZGVsZXRlQ2FwdGlvbigpOworICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwor
ICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRhYmxl
SW5zZXJ0Um93KQorICAgICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyx0YWJsZS5pbnNl
cnRSb3coYXJnc1swXS50b0ludDMyKGV4ZWMpLCBleGNlcHRpb24pKTsKKyAgICAgICAgZWxzZSBp
ZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6VGFibGVEZWxldGVSb3cpIHsKKyAgICAgICAgICAg
IHRhYmxlLmRlbGV0ZVJvdyhhcmdzWzBdLnRvSW50MzIoZXhlYyksIGV4Y2VwdGlvbik7CisgICAg
ICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CisgICAgICAgIH0KICAgICB9Ci0gICAgYnJlYWs7
Ci0gICAgY2FzZSBJRF9UUjogewotICAgICAgSFRNTFRhYmxlUm93RWxlbWVudEltcGwgJnRhYmxl
Um93ID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlUm93RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0g
ICAgICBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6VGFibGVSb3dJbnNlcnRDZWxsKQotICAg
ICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLHRhYmxlUm93Lmluc2VydENlbGwoYXJnc1swXS50
b0ludDMyKGV4ZWMpLCBleGNlcHRpb24pKTsKLSAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRN
TEVsZW1lbnQ6OlRhYmxlUm93RGVsZXRlQ2VsbCkgewotICAgICAgICB0YWJsZVJvdy5kZWxldGVD
ZWxsKGFyZ3NbMF0udG9JbnQzMihleGVjKSwgZXhjZXB0aW9uKTsKLSAgICAgICAgcmV0dXJuIFVu
ZGVmaW5lZCgpOwotICAgICAgfQorICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFzTG9jYWxOYW1lKEhU
TUxOYW1lczo6dGhlYWQoKSkgfHwKKyAgICAgICAgICAgICBlbGVtZW50Lmhhc0xvY2FsTmFtZShI
VE1MTmFtZXM6OnRib2R5KCkpIHx8CisgICAgICAgICAgICAgZWxlbWVudC5oYXNMb2NhbE5hbWUo
SFRNTE5hbWVzOjp0Zm9vdCgpKSkgeworICAgICAgICBIVE1MVGFibGVTZWN0aW9uRWxlbWVudElt
cGwgJnRhYmxlU2VjdGlvbiA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1w
bCAmPihlbGVtZW50KTsKKyAgICAgICAgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRhYmxl
U2VjdGlvbkluc2VydFJvdykKKyAgICAgICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsIHRh
YmxlU2VjdGlvbi5pbnNlcnRSb3coYXJnc1swXS50b0ludDMyKGV4ZWMpLCBleGNlcHRpb24pKTsK
KyAgICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6VGFibGVTZWN0aW9uRGVs
ZXRlUm93KSB7CisgICAgICAgICAgICB0YWJsZVNlY3Rpb24uZGVsZXRlUm93KGFyZ3NbMF0udG9J
bnQzMihleGVjKSwgZXhjZXB0aW9uKTsKKyAgICAgICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsK
KyAgICAgICAgfQogICAgIH0KLSAgICBjYXNlIElEX01BUlFVRUU6IHsKKyAgICBlbHNlIGlmIChl
bGVtZW50Lmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnRyKCkpKSB7CisgICAgICAgIEhUTUxUYWJs
ZVJvd0VsZW1lbnRJbXBsICZ0YWJsZVJvdyA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZVJvd0VsZW1l
bnRJbXBsICY+KGVsZW1lbnQpOworICAgICAgICBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6
VGFibGVSb3dJbnNlcnRDZWxsKQorICAgICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyx0
YWJsZVJvdy5pbnNlcnRDZWxsKGFyZ3NbMF0udG9JbnQzMihleGVjKSwgZXhjZXB0aW9uKSk7Cisg
ICAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRhYmxlUm93RGVsZXRlQ2Vs
bCkgeworICAgICAgICAgICAgdGFibGVSb3cuZGVsZXRlQ2VsbChhcmdzWzBdLnRvSW50MzIoZXhl
YyksIGV4Y2VwdGlvbik7CisgICAgICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CisgICAgICAg
IH0KKyAgICB9CisgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpt
YXJxdWVlKCkpKSB7CiAgICAgICAgIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpNYXJxdWVl
U3RhcnQgJiYgZWxlbWVudC5yZW5kZXJlcigpICYmIAogICAgICAgICAgICAgZWxlbWVudC5yZW5k
ZXJlcigpLT5sYXllcigpICYmCiAgICAgICAgICAgICBlbGVtZW50LnJlbmRlcmVyKCktPmxheWVy
KCktPm1hcnF1ZWUoKSkgewpAQCAtMjI4NSw5ICsyNDMwLDkgQEAgVmFsdWUgS0pTOjpIVE1MRWxl
bWVudEZ1bmN0aW9uOjp0cnlDYWxsKAogICAgICAgICAgICAgZWxlbWVudC5yZW5kZXJlcigpLT5s
YXllcigpLT5tYXJxdWVlKCktPnN0b3AoKTsKICAgICAgICAgICAgIHJldHVybiBVbmRlZmluZWQo
KTsKICAgICAgICAgfQotICAgICAgICBicmVhazsKICAgICB9Ci0gICAgY2FzZSBJRF9DQU5WQVM6
IHsKKyNpZiBBUFBMRV9DSEFOR0VTCisgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNMb2NhbE5hbWUo
SFRNTE5hbWVzOjpjYW52YXMoKSkpIHsKICAgICAgICAgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1l
bnQ6OkdldENvbnRleHQpIHsKICAgICAgICAgICAgIGlmIChhcmdzLnNpemUoKSA9PSAwIHx8IChh
cmdzLnNpemUoKSA9PSAxICYmIGFyZ3NbMF0udG9TdHJpbmcoZXhlYykucXN0cmluZygpLmxvd2Vy
KCkgPT0gIjJkIikpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0KG5ldyBDb250ZXh0
MkQoJmVsZW1lbnQpKTsKQEAgLTIyOTUsNzM4ICsyNDQwLDc1NiBAQCBWYWx1ZSBLSlM6OkhUTUxF
bGVtZW50RnVuY3Rpb246OnRyeUNhbGwoCiAgICAgICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7
CiAgICAgICAgIH0KICAgICB9Ci0gICAgCi0gICAgYnJlYWs7Ci0gIH0KKyNlbmRpZgogCi0gIHJl
dHVybiBVbmRlZmluZWQoKTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKIHZvaWQgS0pT
OjpIVE1MRWxlbWVudDo6dHJ5UHV0KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAm
cHJvcGVydHlOYW1lLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGludCBhdHRyKQogewogI2lmZGVmIEtK
U19WRVJCT1NFCi0gIERPTTo6RE9NU3RyaW5nIHN0ciA9IHZhbHVlLmlzQShOdWxsVHlwZSkgPyBE
T006OkRPTVN0cmluZygpIDogdmFsdWUudG9TdHJpbmcoZXhlYykuc3RyaW5nKCk7CisgICAgRE9N
OjpET01TdHJpbmcgc3RyID0gdmFsdWUuaXNBKE51bGxUeXBlKSA/IERPTTo6RE9NU3RyaW5nKCkg
OiB2YWx1ZS50b1N0cmluZyhleGVjKS5zdHJpbmcoKTsKICNlbmRpZgotICBIVE1MRWxlbWVudElt
cGwgJmVsZW1lbnQgPSAqc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KGltcGwoKSk7Cisg
ICAgSFRNTEVsZW1lbnRJbXBsICZlbGVtZW50ID0gKnN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1w
bCAqPihpbXBsKCkpOwogI2lmZGVmIEtKU19WRVJCT1NFCi0gIGtkRGVidWcoNjA3MCkgPDwgIktK
Uzo6SFRNTEVsZW1lbnQ6OnRyeVB1dCAiIDw8IHByb3BlcnR5TmFtZS5xc3RyaW5nKCkKLSAgICAg
ICAgICAgICAgICA8PCAiIHRoaXNUYWc9IiA8PCBlbGVtZW50LnRhZ05hbWUoKS5zdHJpbmcoKQot
ICAgICAgICAgICAgICAgIDw8ICIgc3RyPSIgPDwgc3RyLnN0cmluZygpIDw8IGVuZGw7CisgICAg
a2REZWJ1Zyg2MDcwKSA8PCAiS0pTOjpIVE1MRWxlbWVudDo6dHJ5UHV0ICIgPDwgcHJvcGVydHlO
YW1lLnFzdHJpbmcoKQorICAgICAgICAgICAgICAgICAgPDwgIiB0aGlzVGFnPSIgPDwgZWxlbWVu
dC50YWdOYW1lKCkuc3RyaW5nKCkKKyAgICAgICAgICAgICAgICAgIDw8ICIgc3RyPSIgPDwgc3Ry
LnN0cmluZygpIDw8IGVuZGw7CiAjZW5kaWYKLSAgLy8gRmlyc3QgbG9vayBhdCBkeW5hbWljIHBy
b3BlcnRpZXMKLSAgc3dpdGNoIChlbGVtZW50LmlkKCkpIHsKLSAgICBjYXNlIElEX1NFTEVDVDog
ewotICAgICAgSFRNTFNlbGVjdEVsZW1lbnRJbXBsICZzZWxlY3QgPSBzdGF0aWNfY2FzdDxIVE1M
U2VsZWN0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBib29sIG9rOwotICAgICAgLyp1
aW50IHUgPSovIHByb3BlcnR5TmFtZS50b1VMb25nKCZvayk7Ci0gICAgICBpZiAob2spIHsKLSAg
ICAgICAgT2JqZWN0IGNvbGwgPSBPYmplY3Q6OmR5bmFtaWNDYXN0KCBnZXRTZWxlY3RIVE1MQ29s
bGVjdGlvbihleGVjLCBzZWxlY3Qub3B0aW9uc0hUTUxDb2xsZWN0aW9uKCkuZ2V0KCksICZzZWxl
Y3QpICk7Ci0gICAgICAgIGlmICggIWNvbGwuaXNOdWxsKCkgKQotICAgICAgICAgIGNvbGwucHV0
KGV4ZWMscHJvcGVydHlOYW1lLHZhbHVlKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQorICAg
IC8vIEZpcnN0IGxvb2sgYXQgZHluYW1pYyBwcm9wZXJ0aWVzCisgICAgaWYgKGVsZW1lbnQuaGFz
TG9jYWxOYW1lKEhUTUxOYW1lczo6c2VsZWN0KCkpKSB7CisgICAgICAgIEhUTUxTZWxlY3RFbGVt
ZW50SW1wbCAmc2VsZWN0ID0gc3RhdGljX2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnRJbXBsICY+KGVs
ZW1lbnQpOworICAgICAgICBib29sIG9rOworICAgICAgICAvKnVpbnQgdSA9Ki8gcHJvcGVydHlO
YW1lLnRvVUxvbmcoJm9rKTsKKyAgICAgICAgaWYgKG9rKSB7CisgICAgICAgICAgICBPYmplY3Qg
Y29sbCA9IE9iamVjdDo6ZHluYW1pY0Nhc3QoIGdldFNlbGVjdEhUTUxDb2xsZWN0aW9uKGV4ZWMs
IHNlbGVjdC5vcHRpb25zSFRNTENvbGxlY3Rpb24oKS5nZXQoKSwgJnNlbGVjdCkgKTsKKyAgICAg
ICAgICAgIGlmICghY29sbC5pc051bGwoKSkKKyAgICAgICAgICAgICAgICBjb2xsLnB1dChleGVj
LHByb3BlcnR5TmFtZSx2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAg
ICB9CiAjaWYgQVBQTEVfQ0hBTkdFUwotICAgIGNhc2UgSURfRU1CRUQ6Ci0gICAgY2FzZSBJRF9P
QkpFQ1Q6Ci0gICAgY2FzZSBJRF9BUFBMRVQ6IHsKKyAgICBlbHNlIGlmIChlbGVtZW50Lmhhc0xv
Y2FsTmFtZShIVE1MTmFtZXM6OmVtYmVkKCkpIHx8CisgICAgICAgICAgICAgZWxlbWVudC5oYXNM
b2NhbE5hbWUoSFRNTE5hbWVzOjpvYmplY3QoKSkgfHwKKyAgICAgICAgICAgICBlbGVtZW50Lmhh
c0xvY2FsTmFtZShIVE1MTmFtZXM6OmFwcGxldCgpKSkgewogCVZhbHVlIHJ1bnRpbWVPYmplY3Qg
PSBnZXRSdW50aW1lT2JqZWN0KGV4ZWMsJmVsZW1lbnQpOwogCWlmICghcnVudGltZU9iamVjdC5p
c051bGwoKSkgewogCSAgICBPYmplY3RJbXAgKmltcCA9IHN0YXRpY19jYXN0PE9iamVjdEltcCAq
PihydW50aW1lT2JqZWN0LmltcCgpKTsKLQkgICAgaWYgKGltcC0+Y2FuUHV0KGV4ZWMsIHByb3Bl
cnR5TmFtZSkpIHsKKwkgICAgaWYgKGltcC0+Y2FuUHV0KGV4ZWMsIHByb3BlcnR5TmFtZSkpCiAJ
CXJldHVybiBpbXAtPnB1dCAoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSk7Ci0JICAgIH0KIAl9
CiAgICAgfQotICAgICAgYnJlYWs7CiAjZW5kaWYKLSAgICBicmVhazsKLSAgZGVmYXVsdDoKLSAg
ICAgIGJyZWFrOwotICB9CiAKLSAgY29uc3QgSGFzaFRhYmxlKiB0YWJsZSA9IGNsYXNzSW5mbygp
LT5wcm9wSGFzaFRhYmxlOyAvLyBnZXQgdGhlIHJpZ2h0IGhhc2h0YWJsZQotICBjb25zdCBIYXNo
RW50cnkqIGVudHJ5ID0gTG9va3VwOjpmaW5kRW50cnkodGFibGUsIHByb3BlcnR5TmFtZSk7Ci0g
IGlmIChlbnRyeSkgewotICAgIGlmIChlbnRyeS0+YXR0ciAmIEZ1bmN0aW9uKSAvLyBmdW5jdGlv
bjogcHV0IGFzIG92ZXJyaWRlIHByb3BlcnR5Ci0gICAgewotICAgICAgT2JqZWN0SW1wOjpwdXQo
ZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgYXR0cik7Ci0gICAgICByZXR1cm47Ci0gICAgfQot
ICAgIGVsc2UgaWYgKChlbnRyeS0+YXR0ciAmIFJlYWRPbmx5KSA9PSAwKSAvLyBsZXQgRE9NT2Jq
ZWN0TG9va3VwUHV0IHByaW50IHRoZSB3YXJuaW5nIGlmIG5vdAotICAgIHsKLSAgICAgIHB1dFZh
bHVlKGV4ZWMsIGVudHJ5LT52YWx1ZSwgdmFsdWUsIGF0dHIpOwotICAgICAgcmV0dXJuOworICAg
IGNvbnN0IEhhc2hUYWJsZSogdGFibGUgPSBjbGFzc0luZm8oKS0+cHJvcEhhc2hUYWJsZTsgLy8g
Z2V0IHRoZSByaWdodCBoYXNodGFibGUKKyAgICBjb25zdCBIYXNoRW50cnkqIGVudHJ5ID0gTG9v
a3VwOjpmaW5kRW50cnkodGFibGUsIHByb3BlcnR5TmFtZSk7CisgICAgaWYgKGVudHJ5KSB7Cisg
ICAgICAgIGlmIChlbnRyeS0+YXR0ciAmIEZ1bmN0aW9uKSB7IC8vIGZ1bmN0aW9uOiBwdXQgYXMg
b3ZlcnJpZGUgcHJvcGVydHkKKyAgICAgICAgICAgIE9iamVjdEltcDo6cHV0KGV4ZWMsIHByb3Bl
cnR5TmFtZSwgdmFsdWUsIGF0dHIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIGVsc2UgaWYgKChlbnRyeS0+YXR0ciAmIFJlYWRPbmx5KSA9PSAwKSB7IC8vIGxldCBE
T01PYmplY3RMb29rdXBQdXQgcHJpbnQgdGhlIHdhcm5pbmcgaWYgbm90CisgICAgICAgICAgICBw
dXRWYWx1ZShleGVjLCBlbnRyeS0+dmFsdWUsIHZhbHVlLCBhdHRyKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQogICAgIH0KLSAgfQotICBET01PYmplY3RMb29rdXBQdXQ8S0pTOjpI
VE1MRWxlbWVudCwgRE9NRWxlbWVudD4oZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgYXR0ciwg
JkhUTUxFbGVtZW50VGFibGUsIHRoaXMpOworCisgICAgRE9NT2JqZWN0TG9va3VwUHV0PEtKUzo6
SFRNTEVsZW1lbnQsIERPTUVsZW1lbnQ+KGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIGF0dHIs
ICZIVE1MRWxlbWVudFRhYmxlLCB0aGlzKTsKIH0KIAotdm9pZCBIVE1MRWxlbWVudDo6cHV0VmFs
dWUoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgaW50KQor
dm9pZCBIVE1MRWxlbWVudDo6aHRtbFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwg
Y29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQogewotICBET01F
eGNlcHRpb25UcmFuc2xhdG9yIGV4Y2VwdGlvbihleGVjKTsKLSAgRE9NOjpET01TdHJpbmcgc3Ry
ID0gdmFsdWUuaXNBKE51bGxUeXBlKSA/IERPTTo6RE9NU3RyaW5nKCkgOiB2YWx1ZS50b1N0cmlu
ZyhleGVjKS5zdHJpbmcoKTsKLSAgSFRNTEVsZW1lbnRJbXBsICZlbGVtZW50ID0gKnN0YXRpY19j
YXN0PEhUTUxFbGVtZW50SW1wbCAqPihpbXBsKCkpOwotI2lmZGVmIEtKU19WRVJCT1NFCi0gIGtk
RGVidWcoNjA3MCkgPDwgIktKUzo6SFRNTEVsZW1lbnQ6OnB1dFZhbHVlICIKLSAgICAgICAgICAg
ICAgICA8PCAiIHRoaXNUYWc9IiA8PCBlbGVtZW50LnRhZ05hbWUoKS5zdHJpbmcoKQotICAgICAg
ICAgICAgICAgIDw8ICIgdG9rZW49IiA8PCB0b2tlbiA8PCBlbmRsOwotI2VuZGlmCisgICAgSFRN
TEhlYWRFbGVtZW50SW1wbCAmaGVhZCA9ICpzdGF0aWNfY2FzdDxIVE1MSGVhZEVsZW1lbnRJbXBs
Kj4oaW1wbCgpKTsKKyAgICBpZiAodG9rZW4gPT0gSGVhZFByb2ZpbGUpIAorICAgICAgICBoZWFk
LnNldFByb2ZpbGUoc3RyKTsKK30KIAotICBzd2l0Y2ggKGVsZW1lbnQuaWQoKSkgewotICBjYXNl
IElEX0hUTUw6IHsKLSAgICAgIEhUTUxIdG1sRWxlbWVudEltcGwgJmh0bWwgPSBzdGF0aWNfY2Fz
dDxIVE1MSHRtbEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikg
ewotICAgICAgY2FzZSBIdG1sVmVyc2lvbjogICAgICAgICB7IGh0bWwuc2V0VmVyc2lvbihzdHIp
OyByZXR1cm47IH0KLSAgICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9IRUFEOiB7Ci0g
ICAgSFRNTEhlYWRFbGVtZW50SW1wbCAmaGVhZCA9IHN0YXRpY19jYXN0PEhUTUxIZWFkRWxlbWVu
dEltcGwgJj4oZWxlbWVudCk7Cit2b2lkIEhUTUxFbGVtZW50OjpoZWFkU2V0dGVyKEV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3Ry
aW5nJiBzdHIpCit7CisgICAgSFRNTEhlYWRFbGVtZW50SW1wbCAmaGVhZCA9ICpzdGF0aWNfY2Fz
dDxIVE1MSGVhZEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBpZiAodG9rZW4gPT0gSGVhZFBy
b2ZpbGUpIAorICAgICAgICBoZWFkLnNldFByb2ZpbGUoc3RyKTsKK30KKwordm9pZCBIVE1MRWxl
bWVudDo6bGlua1NldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUm
IHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxMaW5rRWxlbWVu
dEltcGwgJmxpbmsgPSAqc3RhdGljX2Nhc3Q8SFRNTExpbmtFbGVtZW50SW1wbCo+KGltcGwoKSk7
CiAgICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgSGVhZFByb2ZpbGU6ICAgICAgICAgeyBo
ZWFkLnNldFByb2ZpbGUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgTGlua0Rpc2FibGVk
OiAgICAgICAgeyBsaW5rLnNldERpc2FibGVkKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVy
bjsgfQorICAgICAgICBjYXNlIExpbmtDaGFyc2V0OiAgICAgICAgIHsgbGluay5zZXRDaGFyc2V0
KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIExpbmtIcmVmOiAgICAgICAgICAgIHsgbGlu
ay5zZXRIcmVmKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIExpbmtIcmVmTGFuZzogICAg
ICAgIHsgbGluay5zZXRIcmVmbGFuZyhzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBMaW5r
TWVkaWE6ICAgICAgICAgICB7IGxpbmsuc2V0TWVkaWEoc3RyKTsgcmV0dXJuOyB9CisgICAgICAg
IGNhc2UgTGlua1JlbDogICAgICAgICAgICAgeyBsaW5rLnNldFJlbChzdHIpOyByZXR1cm47IH0K
KyAgICAgICAgY2FzZSBMaW5rUmV2OiAgICAgICAgICAgICB7IGxpbmsuc2V0UmV2KHN0cik7IHJl
dHVybjsgfQorICAgICAgICBjYXNlIExpbmtUYXJnZXQ6ICAgICAgICAgIHsgbGluay5zZXRUYXJn
ZXQoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgTGlua1R5cGU6ICAgICAgICAgICAgeyBs
aW5rLnNldFR5cGUoc3RyKTsgcmV0dXJuOyB9CiAgICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNl
IElEX0xJTks6IHsKLSAgICBIVE1MTGlua0VsZW1lbnRJbXBsICZsaW5rID0gc3RhdGljX2Nhc3Q8
SFRNTExpbmtFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0g
ICAgICBjYXNlIExpbmtEaXNhYmxlZDogICAgICAgIHsgbGluay5zZXREaXNhYmxlZCh2YWx1ZS50
b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgTGlua0NoYXJzZXQ6ICAgICAg
ICAgeyBsaW5rLnNldENoYXJzZXQoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIExpbmtIcmVm
OiAgICAgICAgICAgIHsgbGluay5zZXRIcmVmKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBM
aW5rSHJlZkxhbmc6ICAgICAgICB7IGxpbmsuc2V0SHJlZmxhbmcoc3RyKTsgcmV0dXJuOyB9Ci0g
ICAgICBjYXNlIExpbmtNZWRpYTogICAgICAgICAgIHsgbGluay5zZXRNZWRpYShzdHIpOyByZXR1
cm47IH0KLSAgICAgIGNhc2UgTGlua1JlbDogICAgICAgICAgICAgeyBsaW5rLnNldFJlbChzdHIp
OyByZXR1cm47IH0KLSAgICAgIGNhc2UgTGlua1JldjogICAgICAgICAgICAgeyBsaW5rLnNldFJl
dihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgTGlua1RhcmdldDogICAgICAgICAgeyBsaW5r
LnNldFRhcmdldChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgTGlua1R5cGU6ICAgICAgICAg
ICAgeyBsaW5rLnNldFR5cGUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICB9Ci0gICAgfQotICAgIGJy
ZWFrOwotICAgIGNhc2UgSURfVElUTEU6IHsKLSAgICAgIEhUTUxUaXRsZUVsZW1lbnRJbXBsICZ0
aXRsZSA9IHN0YXRpY19jYXN0PEhUTUxUaXRsZUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAg
ICAgc3dpdGNoICh0b2tlbikgewotICAgICAgY2FzZSBUaXRsZVRleHQ6ICAgICAgICAgICAgICAg
ICB7IHRpdGxlLnNldFRleHQoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICB9Ci0gICAgfQotICAgIGJy
ZWFrOwotICAgIGNhc2UgSURfTUVUQTogewotICAgICAgSFRNTE1ldGFFbGVtZW50SW1wbCAmbWV0
YSA9IHN0YXRpY19jYXN0PEhUTUxNZXRhRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBz
d2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIE1ldGFDb250ZW50OiAgICAgICAgIHsgbWV0YS5z
ZXRDb250ZW50KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBNZXRhSHR0cEVxdWl2OiAgICAg
ICB7IG1ldGEuc2V0SHR0cEVxdWl2KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBNZXRhTmFt
ZTogICAgICAgICAgICB7IG1ldGEuc2V0TmFtZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2Ug
TWV0YVNjaGVtZTogICAgICAgICAgeyBtZXRhLnNldFNjaGVtZShzdHIpOyByZXR1cm47IH0KLSAg
ICAgIH0KLSAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9CQVNFOiB7Ci0gICAgICBIVE1M
QmFzZUVsZW1lbnRJbXBsICZiYXNlID0gc3RhdGljX2Nhc3Q8SFRNTEJhc2VFbGVtZW50SW1wbCAm
PihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgQmFzZUhyZWY6
ICAgICAgICAgICAgeyBiYXNlLnNldEhyZWYoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEJh
c2VUYXJnZXQ6ICAgICAgICAgIHsgYmFzZS5zZXRUYXJnZXQoc3RyKTsgcmV0dXJuOyB9Ci0gICAg
ICB9Ci0gICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfSVNJTkRFWDogewotICAgICAgSFRN
TElzSW5kZXhFbGVtZW50SW1wbCAmaXNpbmRleCA9IHN0YXRpY19jYXN0PEhUTUxJc0luZGV4RWxl
bWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICAvLyBy
ZWFkLW9ubHk6IGZvcm0KLSAgICAgIGNhc2UgSXNJbmRleFByb21wdDogICAgICAgICAgICAgICB7
IGlzaW5kZXguc2V0UHJvbXB0KHN0cik7IHJldHVybjsgfQotICAgICAgfQotICAgIH0KLSAgICBi
cmVhazsKLSAgICBjYXNlIElEX1NUWUxFOiB7Ci0gICAgICBIVE1MU3R5bGVFbGVtZW50SW1wbCAm
c3R5bGUgPSBzdGF0aWNfY2FzdDxIVE1MU3R5bGVFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAg
ICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgU3R5bGVEaXNhYmxlZDogICAgICAgIHsg
c3R5bGUuc2V0RGlzYWJsZWQodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAg
ICBjYXNlIFN0eWxlTWVkaWE6ICAgICAgICAgICB7IHN0eWxlLnNldE1lZGlhKHN0cik7IHJldHVy
bjsgfQotICAgICAgY2FzZSBTdHlsZVR5cGU6ICAgICAgICAgICAgeyBzdHlsZS5zZXRUeXBlKHN0
cik7IHJldHVybjsgfQotICAgICAgfQotICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0JP
RFk6IHsKLSAgICAgIEhUTUxCb2R5RWxlbWVudEltcGwgJmJvZHkgPSBzdGF0aWNfY2FzdDxIVE1M
Qm9keUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAg
ICAgY2FzZSBCb2R5QUxpbms6ICAgICAgICAgICB7IGJvZHkuc2V0QUxpbmsoc3RyKTsgcmV0dXJu
OyB9Ci0gICAgICBjYXNlIEJvZHlCYWNrZ3JvdW5kOiAgICAgIHsgYm9keS5zZXRCYWNrZ3JvdW5k
KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBCb2R5QmdDb2xvcjogICAgICAgICB7IGJvZHku
c2V0QmdDb2xvcihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQm9keUxpbms6ICAgICAgICAg
ICAgeyBib2R5LnNldExpbmsoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEJvZHlUZXh0OiAg
ICAgICAgICAgIHsgYm9keS5zZXRUZXh0KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBCb2R5
Vkxpbms6ICAgICAgICAgICB7IGJvZHkuc2V0Vkxpbmsoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBj
YXNlIEJvZHlTY3JvbGxMZWZ0OgotICAgICAgY2FzZSBCb2R5U2Nyb2xsVG9wOiB7Ci0gICAgICAg
ICAgUVNjcm9sbFZpZXcqIHN2aWV3ID0gYm9keS5vd25lckRvY3VtZW50KCktPnZpZXcoKTsKLSAg
ICAgICAgICBpZiAoc3ZpZXcpIHsKLSAgICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBkb2N1bWVu
dCdzIGxheW91dCBiZWZvcmUgd2UgY29tcHV0ZSB0aGVzZSBhdHRyaWJ1dGVzLgotICAgICAgICAg
ICAgICBpZiAoRG9jdW1lbnRJbXBsKiBkb2MgPSBib2R5LmdldERvY3VtZW50KCkpCi0gICAgICAg
ICAgICAgICAgICBkb2MtPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwot
ICAgICAgICAgICAgICBpZiAodG9rZW4gPT0gQm9keVNjcm9sbExlZnQpCi0gICAgICAgICAgICAg
ICAgICBzdmlldy0+c2V0Q29udGVudHNQb3ModmFsdWUudG9JbnQzMihleGVjKSwgc3ZpZXctPmNv
bnRlbnRzWSgpKTsKLSAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgc3ZpZXct
PnNldENvbnRlbnRzUG9zKHN2aWV3LT5jb250ZW50c1goKSwgdmFsdWUudG9JbnQzMihleGVjKSk7
Ci0gICAgICAgICAgfQotICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgfQotICAg
IH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0ZPUk06IHsKLSAgICAgIEhUTUxGb3JtRWxlbWVu
dEltcGwgJmZvcm0gPSBzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnRJbXBsICY+KGVsZW1lbnQp
OwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgLy8gcmVhZC1vbmx5OiBlbGVtZW50cwot
ICAgICAgLy8gcmVhZC1vbmx5OiBsZW5ndGgKLSAgICAgIGNhc2UgRm9ybU5hbWU6ICAgICAgICAg
ICAgeyBmb3JtLnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEZvcm1BY2NlcHRD
aGFyc2V0OiAgIHsgZm9ybS5zZXRBY2NlcHRDaGFyc2V0KHN0cik7IHJldHVybjsgfQotICAgICAg
Y2FzZSBGb3JtQWN0aW9uOiAgICAgICAgICB7IGZvcm0uc2V0QWN0aW9uKHN0cik7IHJldHVybjsg
fQotICAgICAgY2FzZSBGb3JtRW5jVHlwZTogICAgICAgICB7IGZvcm0uc2V0RW5jdHlwZShzdHIp
OyByZXR1cm47IH0KLSAgICAgIGNhc2UgRm9ybU1ldGhvZDogICAgICAgICAgeyBmb3JtLnNldE1l
dGhvZChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgRm9ybVRhcmdldDogICAgICAgICAgeyBm
b3JtLnNldFRhcmdldChzdHIpOyByZXR1cm47IH0KLSAgICAgIH0KLSAgICB9Ci0gICAgYnJlYWs7
Ci0gICAgY2FzZSBJRF9TRUxFQ1Q6IHsKLSAgICAgIEhUTUxTZWxlY3RFbGVtZW50SW1wbCAmc2Vs
ZWN0ID0gc3RhdGljX2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAg
ICAgc3dpdGNoICh0b2tlbikgewotICAgICAgLy8gcmVhZC1vbmx5OiB0eXBlCi0gICAgICBjYXNl
IFNlbGVjdFNlbGVjdGVkSW5kZXg6ICAgeyBzZWxlY3Quc2V0U2VsZWN0ZWRJbmRleCh2YWx1ZS50
b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFNlbGVjdFZhbHVlOiAgICAgICAg
ICAgeyBzZWxlY3Quc2V0VmFsdWUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFNlbGVjdExl
bmd0aDogICAgICAgICAgeyAvLyByZWFkLW9ubHkgYWNjb3JkaW5nIHRvIHRoZSBOUyBzcGVjLCBi
dXQgd2VicGFnZXMgbmVlZCBpdCB3cml0ZWFibGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgT2JqZWN0IGNvbGwgPSBPYmplY3Q6OmR5bmFtaWNDYXN0KCBnZXRTZWxl
Y3RIVE1MQ29sbGVjdGlvbihleGVjLCBzZWxlY3Qub3B0aW9uc0hUTUxDb2xsZWN0aW9uKCkuZ2V0
KCksICZzZWxlY3QpICk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICggIWNvbGwuaXNOdWxsKCkgKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbGwucHV0KGV4ZWMsbGVuZ3RoUHJvcGVydHlOYW1lLHZhbHVlKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgLy8gcmVhZC1vbmx5OiBmb3JtCi0g
ICAgICAvLyByZWFkLW9ubHk6IG9wdGlvbnMKLSAgICAgIGNhc2UgU2VsZWN0RGlzYWJsZWQ6ICAg
ICAgICB7IHNlbGVjdC5zZXREaXNhYmxlZCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47
IH0KLSAgICAgIGNhc2UgU2VsZWN0TXVsdGlwbGU6ICAgICAgICB7IHNlbGVjdC5zZXRNdWx0aXBs
ZSh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgU2VsZWN0TmFt
ZTogICAgICAgICAgICB7IHNlbGVjdC5zZXROYW1lKHN0cik7IHJldHVybjsgfQotICAgICAgY2Fz
ZSBTZWxlY3RTaXplOiAgICAgICAgICAgIHsgc2VsZWN0LnNldFNpemUodmFsdWUudG9JbnQzMihl
eGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBTZWxlY3RUYWJJbmRleDogICAgICAgIHsgc2Vs
ZWN0LnNldFRhYkluZGV4KHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KLSAgICAgIH0K
LSAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9PUFRHUk9VUDogewotICAgICAgSFRNTE9w
dEdyb3VwRWxlbWVudEltcGwgJm9wdGdyb3VwID0gc3RhdGljX2Nhc3Q8SFRNTE9wdEdyb3VwRWxl
bWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNl
IE9wdEdyb3VwRGlzYWJsZWQ6ICAgICAgICB7IG9wdGdyb3VwLnNldERpc2FibGVkKHZhbHVlLnRv
Qm9vbGVhbihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBPcHRHcm91cExhYmVsOiAgICAg
ICAgICAgeyBvcHRncm91cC5zZXRMYWJlbChzdHIpOyByZXR1cm47IH0KLSAgICAgIH0KLSAgICB9
Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9PUFRJT046IHsKLSAgICAgIEhUTUxPcHRpb25FbGVt
ZW50SW1wbCAmb3B0aW9uID0gc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnRJbXBsICY+KGVs
ZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgLy8gcmVhZC1vbmx5OiBmb3Jt
Ci0gICAgICBjYXNlIE9wdGlvbkRlZmF1bHRTZWxlY3RlZDogeyBvcHRpb24uc2V0RGVmYXVsdFNl
bGVjdGVkKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBPcHRp
b25UZXh0OiAgICAgICAgICAgIHsgb3B0aW9uLnNldFRleHQoc3RyLCBleGNlcHRpb24pOyByZXR1
cm47IH0KLSAgICAgIC8vIHJlYWQtb25seTogaW5kZXgKLSAgICAgIGNhc2UgT3B0aW9uRGlzYWJs
ZWQ6ICAgICAgICB7IG9wdGlvbi5zZXREaXNhYmxlZCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyBy
ZXR1cm47IH0KLSAgICAgIGNhc2UgT3B0aW9uTGFiZWw6ICAgICAgICAgICB7IG9wdGlvbi5zZXRM
YWJlbChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgT3B0aW9uU2VsZWN0ZWQ6ICAgICAgICB7
IG9wdGlvbi5zZXRTZWxlY3RlZCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KLSAg
ICAgIGNhc2UgT3B0aW9uVmFsdWU6ICAgICAgICAgICB7IG9wdGlvbi5zZXRWYWx1ZShzdHIpOyBy
ZXR1cm47IH0KLSAgICAgIH0KLSAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9JTlBVVDog
ewotICAgICAgSFRNTElucHV0RWxlbWVudEltcGwgJmlucHV0ID0gc3RhdGljX2Nhc3Q8SFRNTElu
cHV0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAg
ICBjYXNlIElucHV0RGVmYXVsdFZhbHVlOiAgICB7IGlucHV0LnNldERlZmF1bHRWYWx1ZShzdHIp
OyByZXR1cm47IH0KLSAgICAgIGNhc2UgSW5wdXREZWZhdWx0Q2hlY2tlZDogIHsgaW5wdXQuc2V0
RGVmYXVsdENoZWNrZWQodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICAv
LyByZWFkLW9ubHk6IGZvcm0KLSAgICAgIGNhc2UgSW5wdXRBY2NlcHQ6ICAgICAgICAgIHsgaW5w
dXQuc2V0QWNjZXB0KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBJbnB1dEFjY2Vzc0tleTog
ICAgICAgeyBpbnB1dC5zZXRBY2Nlc3NLZXkoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElu
cHV0QWxpZ246ICAgICAgICAgICB7IGlucHV0LnNldEFsaWduKHN0cik7IHJldHVybjsgfQotICAg
ICAgY2FzZSBJbnB1dEFsdDogICAgICAgICAgICAgeyBpbnB1dC5zZXRBbHQoc3RyKTsgcmV0dXJu
OyB9Ci0gICAgICBjYXNlIElucHV0Q2hlY2tlZDogICAgICAgICB7IGlucHV0LnNldENoZWNrZWQo
dmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElucHV0RGlzYWJs
ZWQ6ICAgICAgICB7IGlucHV0LnNldERpc2FibGVkKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJl
dHVybjsgfQotICAgICAgY2FzZSBJbnB1dE1heExlbmd0aDogICAgICAgeyBpbnB1dC5zZXRNYXhM
ZW5ndGgodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBJbnB1dE5h
bWU6ICAgICAgICAgICAgeyBpbnB1dC5zZXROYW1lKHN0cik7IHJldHVybjsgfQotICAgICAgY2Fz
ZSBJbnB1dFJlYWRPbmx5OiAgICAgICAgeyBpbnB1dC5zZXRSZWFkT25seSh2YWx1ZS50b0Jvb2xl
YW4oZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSW5wdXRTaXplOiAgICAgICAgICAgIHsg
aW5wdXQuc2V0U2l6ZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSW5wdXRTcmM6ICAgICAg
ICAgICAgIHsgaW5wdXQuc2V0U3JjKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBJbnB1dFRh
YkluZGV4OiAgICAgICAgeyBpbnB1dC5zZXRUYWJJbmRleCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsg
cmV0dXJuOyB9Ci0gICAgICBjYXNlIElucHV0VHlwZTogICAgICAgICAgICB7IGlucHV0LnNldFR5
cGUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElucHV0VXNlTWFwOiAgICAgICAgICB7IGlu
cHV0LnNldFVzZU1hcChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSW5wdXRWYWx1ZTogICAg
ICAgICAgIHsgaW5wdXQuc2V0VmFsdWUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICB9Ci0gICAgfQot
ICAgIGJyZWFrOwotICAgIGNhc2UgSURfVEVYVEFSRUE6IHsKLSAgICAgIEhUTUxUZXh0QXJlYUVs
ZW1lbnRJbXBsICZ0ZXh0YXJlYSA9IHN0YXRpY19jYXN0PEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBs
ICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgY2FzZSBUZXh0QXJl
YURlZmF1bHRWYWx1ZTogICAgeyB0ZXh0YXJlYS5zZXREZWZhdWx0VmFsdWUoc3RyKTsgcmV0dXJu
OyB9Ci0gICAgICAvLyByZWFkLW9ubHk6IGZvcm0KLSAgICAgIGNhc2UgVGV4dEFyZWFBY2Nlc3NL
ZXk6ICAgICAgIHsgdGV4dGFyZWEuc2V0QWNjZXNzS2V5KHN0cik7IHJldHVybjsgfQotICAgICAg
Y2FzZSBUZXh0QXJlYUNvbHM6ICAgICAgICAgICAgeyB0ZXh0YXJlYS5zZXRDb2xzKHZhbHVlLnRv
SW50MzIoZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGV4dEFyZWFEaXNhYmxlZDogICAg
ICAgIHsgdGV4dGFyZWEuc2V0RGlzYWJsZWQodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJu
OyB9Ci0gICAgICBjYXNlIFRleHRBcmVhTmFtZTogICAgICAgICAgICB7IHRleHRhcmVhLnNldE5h
bWUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRleHRBcmVhUmVhZE9ubHk6ICAgICAgICB7
IHRleHRhcmVhLnNldFJlYWRPbmx5KHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQot
ICAgICAgY2FzZSBUZXh0QXJlYVJvd3M6ICAgICAgICAgICAgeyB0ZXh0YXJlYS5zZXRSb3dzKHZh
bHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGV4dEFyZWFUYWJJbmRl
eDogICAgICAgIHsgdGV4dGFyZWEuc2V0VGFiSW5kZXgodmFsdWUudG9JbnQzMihleGVjKSk7IHJl
dHVybjsgfQotICAgICAgLy8gcmVhZC1vbmx5OiB0eXBlCi0gICAgICBjYXNlIFRleHRBcmVhVmFs
dWU6ICAgICAgICAgICB7IHRleHRhcmVhLnNldFZhbHVlKHN0cik7IHJldHVybjsgfQotICAgICAg
fQotICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0JVVFRPTjogewotICAgICAgSFRNTEJ1
dHRvbkVsZW1lbnRJbXBsICZidXR0b24gPSBzdGF0aWNfY2FzdDxIVE1MQnV0dG9uRWxlbWVudElt
cGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICAvLyByZWFkLW9u
bHk6IGZvcm0KLSAgICAgIGNhc2UgQnV0dG9uQWNjZXNzS2V5OiAgICAgICB7IGJ1dHRvbi5zZXRB
Y2Nlc3NLZXkoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEJ1dHRvbkRpc2FibGVkOiAgICAg
ICAgeyBidXR0b24uc2V0RGlzYWJsZWQodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9
Ci0gICAgICBjYXNlIEJ1dHRvbk5hbWU6ICAgICAgICAgICAgeyBidXR0b24uc2V0TmFtZShzdHIp
OyByZXR1cm47IH0KLSAgICAgIGNhc2UgQnV0dG9uVGFiSW5kZXg6ICAgICAgICB7IGJ1dHRvbi5z
ZXRUYWJJbmRleCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICAvLyByZWFk
LW9ubHk6IHR5cGUKLSAgICAgIGNhc2UgQnV0dG9uVmFsdWU6ICAgICAgICAgICB7IGJ1dHRvbi5z
ZXRWYWx1ZShzdHIpOyByZXR1cm47IH0KLSAgICAgIH0KLSAgICB9Ci0gICAgYnJlYWs7Ci0gICAg
Y2FzZSBJRF9MQUJFTDogewotICAgICAgSFRNTExhYmVsRWxlbWVudEltcGwgJmxhYmVsID0gc3Rh
dGljX2Nhc3Q8SFRNTExhYmVsRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2gg
KHRva2VuKSB7Ci0gICAgICAvLyByZWFkLW9ubHk6IGZvcm0KLSAgICAgIGNhc2UgTGFiZWxBY2Nl
c3NLZXk6ICAgICAgIHsgbGFiZWwuc2V0QWNjZXNzS2V5KHN0cik7IHJldHVybjsgfQotICAgICAg
Y2FzZSBMYWJlbEh0bWxGb3I6ICAgICAgICAgeyBsYWJlbC5zZXRIdG1sRm9yKHN0cik7IHJldHVy
bjsgfQotICAgICAgfQotICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0xFR0VORDogewot
ICAgICAgSFRNTExlZ2VuZEVsZW1lbnRJbXBsICZsZWdlbmQgPSBzdGF0aWNfY2FzdDxIVE1MTGVn
ZW5kRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAg
ICAvLyByZWFkLW9ubHk6IGZvcm0KLSAgICAgIGNhc2UgTGVnZW5kQWNjZXNzS2V5OiAgICAgICB7
IGxlZ2VuZC5zZXRBY2Nlc3NLZXkoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIExlZ2VuZEFs
aWduOiAgICAgICAgICAgeyBsZWdlbmQuc2V0QWxpZ24oc3RyKTsgcmV0dXJuOyB9Ci0gICAgICB9
Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OnRpdGxlU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7
CisgICAgIEhUTUxUaXRsZUVsZW1lbnRJbXBsJiB0aXRsZSA9ICpzdGF0aWNfY2FzdDxIVE1MVGl0
bGVFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgIGlmICh0b2tlbiA9PSBUaXRsZVRleHQpCisg
ICAgICAgIHRpdGxlLnNldFRleHQoc3RyKTsKK30KKwordm9pZCBIVE1MRWxlbWVudDo6bWV0YVNl
dHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25z
dCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxNZXRhRWxlbWVudEltcGwmIG1ldGEg
PSAqc3RhdGljX2Nhc3Q8SFRNTE1ldGFFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNo
ICh0b2tlbikgeworICAgICAgICBjYXNlIE1ldGFDb250ZW50OiAgICAgICAgIHsgbWV0YS5zZXRD
b250ZW50KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIE1ldGFIdHRwRXF1aXY6ICAgICAg
IHsgbWV0YS5zZXRIdHRwRXF1aXYoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgTWV0YU5h
bWU6ICAgICAgICAgICAgeyBtZXRhLnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNh
c2UgTWV0YVNjaGVtZTogICAgICAgICAgeyBtZXRhLnNldFNjaGVtZShzdHIpOyByZXR1cm47IH0K
ICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9VTDogewotICAgICAgSFRNTFVMaXN0RWxl
bWVudEltcGwgJnVMaXN0ID0gc3RhdGljX2Nhc3Q8SFRNTFVMaXN0RWxlbWVudEltcGwgJj4oZWxl
bWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIFVMaXN0Q29tcGFjdDog
ICAgICAgICB7IHVMaXN0LnNldENvbXBhY3QodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJu
OyB9Ci0gICAgICBjYXNlIFVMaXN0VHlwZTogICAgICAgICAgICB7IHVMaXN0LnNldFR5cGUoc3Ry
KTsgcmV0dXJuOyB9Ci0gICAgICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OmJhc2VTZXR0ZXIo
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9N
OjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MQmFzZUVsZW1lbnRJbXBsJiBiYXNlID0gKnN0
YXRpY19jYXN0PEhUTUxCYXNlRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9r
ZW4pIHsKKyAgICAgICAgY2FzZSBCYXNlSHJlZjogICAgICAgICAgICB7IGJhc2Uuc2V0SHJlZihz
dHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBCYXNlVGFyZ2V0OiAgICAgICAgICB7IGJhc2Uu
c2V0VGFyZ2V0KHN0cik7IHJldHVybjsgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElE
X09MOiB7Ci0gICAgICBIVE1MT0xpc3RFbGVtZW50SW1wbCAmb0xpc3QgPSBzdGF0aWNfY2FzdDxI
VE1MT0xpc3RFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsK
LSAgICAgIGNhc2UgT0xpc3RDb21wYWN0OiAgICAgICAgIHsgb0xpc3Quc2V0Q29tcGFjdCh2YWx1
ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgT0xpc3RTdGFydDogICAg
ICAgICAgIHsgb0xpc3Quc2V0U3RhcnQodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQot
ICAgICAgY2FzZSBPTGlzdFR5cGU6ICAgICAgICAgICAgeyBvTGlzdC5zZXRUeXBlKHN0cik7IHJl
dHVybjsgfQotICAgICAgfQorfQorCit2b2lkIEhUTUxFbGVtZW50Ojppc0luZGV4U2V0dGVyKEV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6
RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTElzSW5kZXhFbGVtZW50SW1wbCYgaXNpbmRleCA9
ICpzdGF0aWNfY2FzdDxIVE1MSXNJbmRleEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBpZiAo
dG9rZW4gPT0gSXNJbmRleFByb21wdCkKKyAgICAgICAgaXNpbmRleC5zZXRQcm9tcHQoc3RyKTsK
K30KKwordm9pZCBIVE1MRWxlbWVudDo6c3R5bGVTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sK
KyAgICBIVE1MU3R5bGVFbGVtZW50SW1wbCYgc3R5bGUgPSAqc3RhdGljX2Nhc3Q8SFRNTFN0eWxl
RWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2Fz
ZSBTdHlsZURpc2FibGVkOiAgICAgICAgeyBzdHlsZS5zZXREaXNhYmxlZCh2YWx1ZS50b0Jvb2xl
YW4oZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBTdHlsZU1lZGlhOiAgICAgICAgICAg
eyBzdHlsZS5zZXRNZWRpYShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBTdHlsZVR5cGU6
ICAgICAgICAgICAgeyBzdHlsZS5zZXRUeXBlKHN0cik7IHJldHVybjsgfQogICAgIH0KLSAgICBi
cmVhazsKLSAgICBjYXNlIElEX0RMOiB7Ci0gICAgICBIVE1MRExpc3RFbGVtZW50SW1wbCAmZExp
c3QgPSBzdGF0aWNfY2FzdDxIVE1MRExpc3RFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAg
IHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgRExpc3RDb21wYWN0OiAgICAgICAgIHsgZExp
c3Quc2V0Q29tcGFjdCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KLSAgICAgIH0K
K30KKwordm9pZCBIVE1MRWxlbWVudDo6Ym9keVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQorewor
ICAgIEhUTUxCb2R5RWxlbWVudEltcGwmIGJvZHkgPSAqc3RhdGljX2Nhc3Q8SFRNTEJvZHlFbGVt
ZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNlIEJv
ZHlBTGluazogICAgICAgICAgIHsgYm9keS5zZXRBTGluayhzdHIpOyByZXR1cm47IH0KKyAgICAg
ICAgY2FzZSBCb2R5QmFja2dyb3VuZDogICAgICB7IGJvZHkuc2V0QmFja2dyb3VuZChzdHIpOyBy
ZXR1cm47IH0KKyAgICAgICAgY2FzZSBCb2R5QmdDb2xvcjogICAgICAgICB7IGJvZHkuc2V0QmdD
b2xvcihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBCb2R5TGluazogICAgICAgICAgICB7
IGJvZHkuc2V0TGluayhzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBCb2R5VGV4dDogICAg
ICAgICAgICB7IGJvZHkuc2V0VGV4dChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBCb2R5
Vkxpbms6ICAgICAgICAgICB7IGJvZHkuc2V0Vkxpbmsoc3RyKTsgcmV0dXJuOyB9CisgICAgICAg
IGNhc2UgQm9keVNjcm9sbExlZnQ6CisgICAgICAgIGNhc2UgQm9keVNjcm9sbFRvcDogeworICAg
ICAgICAgICAgUVNjcm9sbFZpZXcqIHN2aWV3ID0gYm9keS5vd25lckRvY3VtZW50KCktPnZpZXco
KTsKKyAgICAgICAgICAgIGlmIChzdmlldykgeworICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSB0
aGUgZG9jdW1lbnQncyBsYXlvdXQgYmVmb3JlIHdlIGNvbXB1dGUgdGhlc2UgYXR0cmlidXRlcy4K
KyAgICAgICAgICAgICAgICBpZiAoRG9jdW1lbnRJbXBsKiBkb2MgPSBib2R5LmdldERvY3VtZW50
KCkpCisgICAgICAgICAgICAgICAgICAgIGRvYy0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0
eWxlc2hlZXRzKCk7CisgICAgICAgICAgICAgICAgaWYgKHRva2VuID09IEJvZHlTY3JvbGxMZWZ0
KQorICAgICAgICAgICAgICAgICAgICBzdmlldy0+c2V0Q29udGVudHNQb3ModmFsdWUudG9JbnQz
MihleGVjKSwgc3ZpZXctPmNvbnRlbnRzWSgpKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgICAgIHN2aWV3LT5zZXRDb250ZW50c1Bvcyhzdmlldy0+Y29udGVudHNYKCks
IHZhbHVlLnRvSW50MzIoZXhlYykpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfRElSOiB7Ci0gICAg
ICBIVE1MRGlyZWN0b3J5RWxlbWVudEltcGwgJmRpcmVjdG9yeSA9IHN0YXRpY19jYXN0PEhUTUxE
aXJlY3RvcnlFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsK
LSAgICAgIGNhc2UgRGlyZWN0b3J5Q29tcGFjdDogICAgIHsgZGlyZWN0b3J5LnNldENvbXBhY3Qo
dmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICB9Cit9CisKK3ZvaWQgSFRN
TEVsZW1lbnQ6OmZvcm1TZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZh
bHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MRm9ybUVs
ZW1lbnRJbXBsJiBmb3JtID0gKnN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudEltcGwqPihpbXBs
KCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgLy8gcmVhZC1vbmx5OiBlbGVtZW50
cworICAgICAgICAvLyByZWFkLW9ubHk6IGxlbmd0aAorICAgICAgICBjYXNlIEZvcm1OYW1lOiAg
ICAgICAgICAgIHsgZm9ybS5zZXROYW1lKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEZv
cm1BY2NlcHRDaGFyc2V0OiAgIHsgZm9ybS5zZXRBY2NlcHRDaGFyc2V0KHN0cik7IHJldHVybjsg
fQorICAgICAgICBjYXNlIEZvcm1BY3Rpb246ICAgICAgICAgIHsgZm9ybS5zZXRBY3Rpb24oc3Ry
KTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgRm9ybUVuY1R5cGU6ICAgICAgICAgeyBmb3JtLnNl
dEVuY3R5cGUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgRm9ybU1ldGhvZDogICAgICAg
ICAgeyBmb3JtLnNldE1ldGhvZChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBGb3JtVGFy
Z2V0OiAgICAgICAgICB7IGZvcm0uc2V0VGFyZ2V0KHN0cik7IHJldHVybjsgfQogICAgIH0KLSAg
ICBicmVhazsKLSAgICBjYXNlIElEX01FTlU6IHsKLSAgICAgIEhUTUxNZW51RWxlbWVudEltcGwg
Jm1lbnUgPSBzdGF0aWNfY2FzdDxIVE1MTWVudUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAg
ICAgc3dpdGNoICh0b2tlbikgewotICAgICAgY2FzZSBNZW51Q29tcGFjdDogICAgICAgICB7IG1l
bnUuc2V0Q29tcGFjdCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KLSAgICAgIH0K
K30KKwordm9pZCBIVE1MRWxlbWVudDo6c2VsZWN0U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7
CisgICAgSFRNTFNlbGVjdEVsZW1lbnRJbXBsJiBzZWxlY3QgPSAqc3RhdGljX2Nhc3Q8SFRNTFNl
bGVjdEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAg
IC8vIHJlYWQtb25seTogdHlwZQorICAgICAgICBjYXNlIFNlbGVjdFNlbGVjdGVkSW5kZXg6ICAg
eyBzZWxlY3Quc2V0U2VsZWN0ZWRJbmRleCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9
CisgICAgICAgIGNhc2UgU2VsZWN0VmFsdWU6ICAgICAgICAgICB7IHNlbGVjdC5zZXRWYWx1ZShz
dHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBTZWxlY3RMZW5ndGg6ICAgICAgICAgIHsgLy8g
cmVhZC1vbmx5IGFjY29yZGluZyB0byB0aGUgTlMgc3BlYywgYnV0IHdlYnBhZ2VzIG5lZWQgaXQg
d3JpdGVhYmxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVj
dCBjb2xsID0gT2JqZWN0OjpkeW5hbWljQ2FzdCggZ2V0U2VsZWN0SFRNTENvbGxlY3Rpb24oZXhl
Yywgc2VsZWN0Lm9wdGlvbnNIVE1MQ29sbGVjdGlvbigpLmdldCgpLCAmc2VsZWN0KSApOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoICFjb2xsLmlzTnVsbCgp
ICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xsLnB1dChl
eGVjLGxlbmd0aFByb3BlcnR5TmFtZSx2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgLy8gcmVhZC1vbmx5OiBmb3JtCisgICAgICAgIC8vIHJlYWQtb25seTog
b3B0aW9ucworICAgICAgICBjYXNlIFNlbGVjdERpc2FibGVkOiAgICAgICAgeyBzZWxlY3Quc2V0
RGlzYWJsZWQodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2Ug
U2VsZWN0TXVsdGlwbGU6ICAgICAgICB7IHNlbGVjdC5zZXRNdWx0aXBsZSh2YWx1ZS50b0Jvb2xl
YW4oZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBTZWxlY3ROYW1lOiAgICAgICAgICAg
IHsgc2VsZWN0LnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgU2VsZWN0U2l6
ZTogICAgICAgICAgICB7IHNlbGVjdC5zZXRTaXplKHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1
cm47IH0KKyAgICAgICAgY2FzZSBTZWxlY3RUYWJJbmRleDogICAgICAgIHsgc2VsZWN0LnNldFRh
YkluZGV4KHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KICAgICB9Ci0gICAgYnJlYWs7
Ci0gICAgY2FzZSBJRF9MSTogewotICAgICAgSFRNTExJRWxlbWVudEltcGwgJmxpID0gc3RhdGlj
X2Nhc3Q8SFRNTExJRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2Vu
KSB7Ci0gICAgICBjYXNlIExJVHlwZTogICAgICAgICAgICB7IGxpLnNldFR5cGUoc3RyKTsgcmV0
dXJuOyB9Ci0gICAgICBjYXNlIExJVmFsdWU6ICAgICAgICAgICB7IGxpLnNldFZhbHVlKHZhbHVl
LnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVu
dDo6b3B0R3JvdXBTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVl
JiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MT3B0R3JvdXBF
bGVtZW50SW1wbCYgb3B0Z3JvdXAgPSAqc3RhdGljX2Nhc3Q8SFRNTE9wdEdyb3VwRWxlbWVudElt
cGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBPcHRHcm91
cERpc2FibGVkOiAgICAgICAgeyBvcHRncm91cC5zZXREaXNhYmxlZCh2YWx1ZS50b0Jvb2xlYW4o
ZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBPcHRHcm91cExhYmVsOiAgICAgICAgICAg
eyBvcHRncm91cC5zZXRMYWJlbChzdHIpOyByZXR1cm47IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0g
ICAgY2FzZSBJRF9ESVY6IHsKLSAgICAgIEhUTUxEaXZFbGVtZW50SW1wbCAmZGl2ID0gc3RhdGlj
X2Nhc3Q8SFRNTERpdkVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tl
bikgewotICAgICAgY2FzZSBEaXZBbGlnbjogICAgICAgICAgIHsgZGl2LnNldEFsaWduKHN0cik7
IHJldHVybjsgfQotICAgICAgfQorfQorCit2b2lkIEhUTUxFbGVtZW50OjpvcHRpb25TZXR0ZXIo
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9N
OjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBET01FeGNlcHRpb25UcmFuc2xhdG9yIGV4Y2VwdGlv
bihleGVjKTsKKyAgICBIVE1MT3B0aW9uRWxlbWVudEltcGwmIG9wdGlvbiA9ICpzdGF0aWNfY2Fz
dDxIVE1MT3B0aW9uRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsK
KyAgICAgICAgLy8gcmVhZC1vbmx5OiBmb3JtCisgICAgICAgIGNhc2UgT3B0aW9uRGVmYXVsdFNl
bGVjdGVkOiB7IG9wdGlvbi5zZXREZWZhdWx0U2VsZWN0ZWQodmFsdWUudG9Cb29sZWFuKGV4ZWMp
KTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgT3B0aW9uVGV4dDogICAgICAgICAgICB7IG9wdGlv
bi5zZXRUZXh0KHN0ciwgZXhjZXB0aW9uKTsgcmV0dXJuOyB9CisgICAgICAgIC8vIHJlYWQtb25s
eTogaW5kZXgKKyAgICAgICAgY2FzZSBPcHRpb25EaXNhYmxlZDogICAgICAgIHsgb3B0aW9uLnNl
dERpc2FibGVkKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNl
IE9wdGlvbkxhYmVsOiAgICAgICAgICAgeyBvcHRpb24uc2V0TGFiZWwoc3RyKTsgcmV0dXJuOyB9
CisgICAgICAgIGNhc2UgT3B0aW9uU2VsZWN0ZWQ6ICAgICAgICB7IG9wdGlvbi5zZXRTZWxlY3Rl
ZCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBPcHRpb25W
YWx1ZTogICAgICAgICAgIHsgb3B0aW9uLnNldFZhbHVlKHN0cik7IHJldHVybjsgfQogICAgIH0K
LSAgICBicmVhazsKLSAgICBjYXNlIElEX1A6IHsKLSAgICAgIEhUTUxQYXJhZ3JhcGhFbGVtZW50
SW1wbCAmcGFyYWdyYXBoID0gc3RhdGljX2Nhc3Q8SFRNTFBhcmFncmFwaEVsZW1lbnRJbXBsICY+
KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgY2FzZSBQYXJhZ3JhcGhB
bGlnbjogICAgIHsgcGFyYWdyYXBoLnNldEFsaWduKHN0cik7IHJldHVybjsgfQotICAgICAgfQor
fQorCit2b2lkIEhUTUxFbGVtZW50OjppbnB1dFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQorewor
ICAgIEhUTUxJbnB1dEVsZW1lbnRJbXBsJiBpbnB1dCA9ICpzdGF0aWNfY2FzdDxIVE1MSW5wdXRF
bGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNl
IElucHV0RGVmYXVsdFZhbHVlOiAgICB7IGlucHV0LnNldERlZmF1bHRWYWx1ZShzdHIpOyByZXR1
cm47IH0KKyAgICAgICAgY2FzZSBJbnB1dERlZmF1bHRDaGVja2VkOiAgeyBpbnB1dC5zZXREZWZh
dWx0Q2hlY2tlZCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgLy8g
cmVhZC1vbmx5OiBmb3JtCisgICAgICAgIGNhc2UgSW5wdXRBY2NlcHQ6ICAgICAgICAgIHsgaW5w
dXQuc2V0QWNjZXB0KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIElucHV0QWNjZXNzS2V5
OiAgICAgICB7IGlucHV0LnNldEFjY2Vzc0tleShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2Fz
ZSBJbnB1dEFsaWduOiAgICAgICAgICAgeyBpbnB1dC5zZXRBbGlnbihzdHIpOyByZXR1cm47IH0K
KyAgICAgICAgY2FzZSBJbnB1dEFsdDogICAgICAgICAgICAgeyBpbnB1dC5zZXRBbHQoc3RyKTsg
cmV0dXJuOyB9CisgICAgICAgIGNhc2UgSW5wdXRDaGVja2VkOiAgICAgICAgIHsgaW5wdXQuc2V0
Q2hlY2tlZCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJ
bnB1dERpc2FibGVkOiAgICAgICAgeyBpbnB1dC5zZXREaXNhYmxlZCh2YWx1ZS50b0Jvb2xlYW4o
ZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJbnB1dE1heExlbmd0aDogICAgICAgeyBp
bnB1dC5zZXRNYXhMZW5ndGgodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQorICAgICAg
ICBjYXNlIElucHV0TmFtZTogICAgICAgICAgICB7IGlucHV0LnNldE5hbWUoc3RyKTsgcmV0dXJu
OyB9CisgICAgICAgIGNhc2UgSW5wdXRSZWFkT25seTogICAgICAgIHsgaW5wdXQuc2V0UmVhZE9u
bHkodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgSW5wdXRT
aXplOiAgICAgICAgICAgIHsgaW5wdXQuc2V0U2l6ZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAg
Y2FzZSBJbnB1dFNyYzogICAgICAgICAgICAgeyBpbnB1dC5zZXRTcmMoc3RyKTsgcmV0dXJuOyB9
CisgICAgICAgIGNhc2UgSW5wdXRUYWJJbmRleDogICAgICAgIHsgaW5wdXQuc2V0VGFiSW5kZXgo
dmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIElucHV0VHlwZTog
ICAgICAgICAgICB7IGlucHV0LnNldFR5cGUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2Ug
SW5wdXRVc2VNYXA6ICAgICAgICAgIHsgaW5wdXQuc2V0VXNlTWFwKHN0cik7IHJldHVybjsgfQor
ICAgICAgICBjYXNlIElucHV0VmFsdWU6ICAgICAgICAgICB7IGlucHV0LnNldFZhbHVlKHN0cik7
IHJldHVybjsgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0gxOgotICAgIGNhc2Ug
SURfSDI6Ci0gICAgY2FzZSBJRF9IMzoKLSAgICBjYXNlIElEX0g0OgotICAgIGNhc2UgSURfSDU6
Ci0gICAgY2FzZSBJRF9INjogewotICAgICAgSFRNTEhlYWRpbmdFbGVtZW50SW1wbCAmaGVhZGlu
ZyA9IHN0YXRpY19jYXN0PEhUTUxIZWFkaW5nRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAg
ICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIEhlYWRpbmdBbGlnbjogICAgICAgICB7IGhl
YWRpbmcuc2V0QWxpZ24oc3RyKTsgcmV0dXJuOyB9Ci0gICAgICB9Cit9CisKK3ZvaWQgSFRNTEVs
ZW1lbnQ6OnRleHRBcmVhU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBW
YWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTFRleHRB
cmVhRWxlbWVudEltcGwmIHRleHRhcmVhID0gKnN0YXRpY19jYXN0PEhUTUxUZXh0QXJlYUVsZW1l
bnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgVGV4
dEFyZWFEZWZhdWx0VmFsdWU6ICAgIHsgdGV4dGFyZWEuc2V0RGVmYXVsdFZhbHVlKHN0cik7IHJl
dHVybjsgfQorICAgICAgICAvLyByZWFkLW9ubHk6IGZvcm0KKyAgICAgICAgY2FzZSBUZXh0QXJl
YUFjY2Vzc0tleTogICAgICAgeyB0ZXh0YXJlYS5zZXRBY2Nlc3NLZXkoc3RyKTsgcmV0dXJuOyB9
CisgICAgICAgIGNhc2UgVGV4dEFyZWFDb2xzOiAgICAgICAgICAgIHsgdGV4dGFyZWEuc2V0Q29s
cyh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGV4dEFyZWFE
aXNhYmxlZDogICAgICAgIHsgdGV4dGFyZWEuc2V0RGlzYWJsZWQodmFsdWUudG9Cb29sZWFuKGV4
ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGV4dEFyZWFOYW1lOiAgICAgICAgICAgIHsg
dGV4dGFyZWEuc2V0TmFtZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUZXh0QXJlYVJl
YWRPbmx5OiAgICAgICAgeyB0ZXh0YXJlYS5zZXRSZWFkT25seSh2YWx1ZS50b0Jvb2xlYW4oZXhl
YykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUZXh0QXJlYVJvd3M6ICAgICAgICAgICAgeyB0
ZXh0YXJlYS5zZXRSb3dzKHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAg
Y2FzZSBUZXh0QXJlYVRhYkluZGV4OiAgICAgICAgeyB0ZXh0YXJlYS5zZXRUYWJJbmRleCh2YWx1
ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIC8vIHJlYWQtb25seTogdHlwZQor
ICAgICAgICBjYXNlIFRleHRBcmVhVmFsdWU6ICAgICAgICAgICB7IHRleHRhcmVhLnNldFZhbHVl
KHN0cik7IHJldHVybjsgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0JMT0NLUVVP
VEU6IHsKLSAgICAgIEhUTUxCbG9ja3F1b3RlRWxlbWVudEltcGwgJmJsb2NrcXVvdGUgPSBzdGF0
aWNfY2FzdDxIVE1MQmxvY2txdW90ZUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dp
dGNoICh0b2tlbikgewotICAgICAgY2FzZSBCbG9ja1F1b3RlQ2l0ZTogICAgICAgeyBibG9ja3F1
b3RlLnNldENpdGUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1l
bnQ6OmJ1dHRvblNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUm
IHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxCdXR0b25FbGVt
ZW50SW1wbCYgYnV0dG9uID0gKnN0YXRpY19jYXN0PEhUTUxCdXR0b25FbGVtZW50SW1wbCo+KGlt
cGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICAvLyByZWFkLW9ubHk6IGZvcm0K
KyAgICAgICAgY2FzZSBCdXR0b25BY2Nlc3NLZXk6ICAgICAgIHsgYnV0dG9uLnNldEFjY2Vzc0tl
eShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBCdXR0b25EaXNhYmxlZDogICAgICAgIHsg
YnV0dG9uLnNldERpc2FibGVkKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQorICAg
ICAgICBjYXNlIEJ1dHRvbk5hbWU6ICAgICAgICAgICAgeyBidXR0b24uc2V0TmFtZShzdHIpOyBy
ZXR1cm47IH0KKyAgICAgICAgY2FzZSBCdXR0b25UYWJJbmRleDogICAgICAgIHsgYnV0dG9uLnNl
dFRhYkluZGV4KHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgLy8gcmVh
ZC1vbmx5OiB0eXBlCisgICAgICAgIGNhc2UgQnV0dG9uVmFsdWU6ICAgICAgICAgICB7IGJ1dHRv
bi5zZXRWYWx1ZShzdHIpOyByZXR1cm47IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJ
RF9ROiB7Ci0gICAgICBIVE1MUXVvdGVFbGVtZW50SW1wbCAmcXVvdGUgPSBzdGF0aWNfY2FzdDxI
VE1MUXVvdGVFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsK
LSAgICAgIGNhc2UgUXVvdGVDaXRlOiAgICAgICAgICAgIHsgcXVvdGUuc2V0Q2l0ZShzdHIpOyBy
ZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6bGFiZWxTZXR0ZXIoRXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpE
T01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MTGFiZWxFbGVtZW50SW1wbCYgbGFiZWwgPSAqc3Rh
dGljX2Nhc3Q8SFRNTExhYmVsRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9r
ZW4pIHsKKyAgICAgICAgLy8gcmVhZC1vbmx5OiBmb3JtCisgICAgICAgIGNhc2UgTGFiZWxBY2Nl
c3NLZXk6ICAgICAgIHsgbGFiZWwuc2V0QWNjZXNzS2V5KHN0cik7IHJldHVybjsgfQorICAgICAg
ICBjYXNlIExhYmVsSHRtbEZvcjogICAgICAgICB7IGxhYmVsLnNldEh0bWxGb3Ioc3RyKTsgcmV0
dXJuOyB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfUFJFOiB7Ci0gICAgICBIVE1M
UHJlRWxlbWVudEltcGwgJnByZSA9IHN0YXRpY19jYXN0PEhUTUxQcmVFbGVtZW50SW1wbCAmPihl
bGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgUHJlV2lkdGg6ICAg
ICAgICAgICB7IHByZS5zZXRXaWR0aCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9Ci0g
ICAgICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OmxlZ2VuZFNldHRlcihFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYg
c3RyKQoreworICAgIEhUTUxMZWdlbmRFbGVtZW50SW1wbCYgbGVnZW5kID0gKnN0YXRpY19jYXN0
PEhUTUxMZWdlbmRFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgewor
ICAgICAgICAvLyByZWFkLW9ubHk6IGZvcm0KKyAgICAgICAgY2FzZSBMZWdlbmRBY2Nlc3NLZXk6
ICAgICAgIHsgbGVnZW5kLnNldEFjY2Vzc0tleShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2Fz
ZSBMZWdlbmRBbGlnbjogICAgICAgICAgIHsgbGVnZW5kLnNldEFsaWduKHN0cik7IHJldHVybjsg
fQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0JSOiB7Ci0gICAgICBIVE1MQlJFbGVt
ZW50SW1wbCAmYnIgPSBzdGF0aWNfY2FzdDxIVE1MQlJFbGVtZW50SW1wbCAmPihlbGVtZW50KTsK
LSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgQlJDbGVhcjogICAgICAgICAgIHsg
YnIuc2V0Q2xlYXIoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1l
bnQ6OnVMaXN0U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYg
dmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTFVMaXN0RWxlbWVu
dEltcGwmIHVMaXN0ID0gKnN0YXRpY19jYXN0PEhUTUxVTGlzdEVsZW1lbnRJbXBsKj4oaW1wbCgp
KTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgVUxpc3RDb21wYWN0OiAgICAg
ICAgIHsgdUxpc3Quc2V0Q29tcGFjdCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0K
KyAgICAgICAgY2FzZSBVTGlzdFR5cGU6ICAgICAgICAgICAgeyB1TGlzdC5zZXRUeXBlKHN0cik7
IHJldHVybjsgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0JBU0VGT05UOiB7Ci0g
ICAgICBIVE1MQmFzZUZvbnRFbGVtZW50SW1wbCAmYmFzZUZvbnQgPSBzdGF0aWNfY2FzdDxIVE1M
QmFzZUZvbnRFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsK
LSAgICAgIGNhc2UgQmFzZUZvbnRDb2xvcjogICAgICAgICAgIHsgYmFzZUZvbnQuc2V0Q29sb3Io
c3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEJhc2VGb250RmFjZTogICAgICAgICAgICB7IGJh
c2VGb250LnNldEZhY2Uoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEJhc2VGb250U2l6ZTog
ICAgICAgICAgICB7IGJhc2VGb250LnNldFNpemUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICB9Cit9
CisKK3ZvaWQgSFRNTEVsZW1lbnQ6Om9MaXN0U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7Cisg
ICAgSFRNTE9MaXN0RWxlbWVudEltcGwmIG9MaXN0ID0gKnN0YXRpY19jYXN0PEhUTUxPTGlzdEVs
ZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2Ug
T0xpc3RDb21wYWN0OiAgICAgICAgIHsgb0xpc3Quc2V0Q29tcGFjdCh2YWx1ZS50b0Jvb2xlYW4o
ZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBPTGlzdFN0YXJ0OiAgICAgICAgICAgeyBv
TGlzdC5zZXRTdGFydCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNh
c2UgT0xpc3RUeXBlOiAgICAgICAgICAgIHsgb0xpc3Quc2V0VHlwZShzdHIpOyByZXR1cm47IH0K
ICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9GT05UOiB7Ci0gICAgICBIVE1MRm9udEVs
ZW1lbnRJbXBsICZmb250ID0gc3RhdGljX2Nhc3Q8SFRNTEZvbnRFbGVtZW50SW1wbCAmPihlbGVt
ZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgRm9udENvbG9yOiAgICAg
ICAgICAgeyBmb250LnNldENvbG9yKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBGb250RmFj
ZTogICAgICAgICAgICB7IGZvbnQuc2V0RmFjZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2Ug
Rm9udFNpemU6ICAgICAgICAgICAgeyBmb250LnNldFNpemUoc3RyKTsgcmV0dXJuOyB9Ci0gICAg
ICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OmRMaXN0U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIp
Cit7CisgICAgSFRNTERMaXN0RWxlbWVudEltcGwmIGRMaXN0ID0gKnN0YXRpY19jYXN0PEhUTUxE
TGlzdEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBpZiAodG9rZW4gPT0gRExpc3RDb21wYWN0
KQorICAgICAgICBkTGlzdC5zZXRDb21wYWN0KHZhbHVlLnRvQm9vbGVhbihleGVjKSk7Cit9CisK
K3ZvaWQgSFRNTEVsZW1lbnQ6OmRpclNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwg
Y29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhU
TUxEaXJlY3RvcnlFbGVtZW50SW1wbCYgZGlyZWN0b3J5ID0gKnN0YXRpY19jYXN0PEhUTUxEaXJl
Y3RvcnlFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IERpcmVjdG9yeUNv
bXBhY3QpCisgICAgICAgIGRpcmVjdG9yeS5zZXRDb21wYWN0KHZhbHVlLnRvQm9vbGVhbihleGVj
KSk7Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6Om1lbnVTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikK
K3sKKyAgICBIVE1MTWVudUVsZW1lbnRJbXBsJiBtZW51ID0gKnN0YXRpY19jYXN0PEhUTUxNZW51
RWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIGlmICh0b2tlbiA9PSBNZW51Q29tcGFjdCkKKyAg
ICAgICAgbWVudS5zZXRDb21wYWN0KHZhbHVlLnRvQm9vbGVhbihleGVjKSk7Cit9CisKK3ZvaWQg
SFRNTEVsZW1lbnQ6OmxpU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBW
YWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTExJRWxl
bWVudEltcGwmIGxpID0gKnN0YXRpY19jYXN0PEhUTUxMSUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsK
KyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgTElUeXBlOiAgICAgICAgICAgIHsg
bGkuc2V0VHlwZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBMSVZhbHVlOiAgICAgICAg
ICAgeyBsaS5zZXRWYWx1ZSh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CiAgICAgfQot
ICAgIGJyZWFrOwotICAgIGNhc2UgSURfSFI6IHsKLSAgICAgIEhUTUxIUkVsZW1lbnRJbXBsICZo
ciA9IHN0YXRpY19jYXN0PEhUTUxIUkVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dp
dGNoICh0b2tlbikgewotICAgICAgY2FzZSBIUkFsaWduOiAgICAgICAgICAgeyBoci5zZXRBbGln
bihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSFJOb1NoYWRlOiAgICAgICAgIHsgaHIuc2V0
Tm9TaGFkZSh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSFJT
aXplOiAgICAgICAgICAgIHsgaHIuc2V0U2l6ZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2Ug
SFJXaWR0aDogICAgICAgICAgIHsgaHIuc2V0V2lkdGgoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICB9
Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OmRpdlNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQorewor
ICAgIEhUTUxEaXZFbGVtZW50SW1wbCYgZGl2ID0gKnN0YXRpY19jYXN0PEhUTUxEaXZFbGVtZW50
SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IERpdkFsaWduKQorICAgICAgICBkaXYu
c2V0QWxpZ24oc3RyKTsKK30KKwordm9pZCBIVE1MRWxlbWVudDo6cGFyYWdyYXBoU2V0dGVyKEV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6
RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTFBhcmFncmFwaEVsZW1lbnRJbXBsJiBwYXJhZ3Jh
cGggPSAqc3RhdGljX2Nhc3Q8SFRNTFBhcmFncmFwaEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAg
ICBpZiAodG9rZW4gPT0gUGFyYWdyYXBoQWxpZ24pCisgICAgICAgIHBhcmFncmFwaC5zZXRBbGln
bihzdHIpOworfQorCit2b2lkIEhUTUxFbGVtZW50OjpoZWFkaW5nU2V0dGVyKEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5n
JiBzdHIpCit7CisgICAgSFRNTEhlYWRpbmdFbGVtZW50SW1wbCYgaGVhZGluZyA9ICpzdGF0aWNf
Y2FzdDxIVE1MSGVhZGluZ0VsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBpZiAodG9rZW4gPT0g
SGVhZGluZ0FsaWduKQorICAgICAgICBoZWFkaW5nLnNldEFsaWduKHN0cik7Cit9CisKK3ZvaWQg
SFRNTEVsZW1lbnQ6OmJsb2NrUXVvdGVTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4s
IGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBI
VE1MQmxvY2txdW90ZUVsZW1lbnRJbXBsJiBibG9ja1F1b3RlID0gKnN0YXRpY19jYXN0PEhUTUxC
bG9ja3F1b3RlRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIGlmICh0b2tlbiA9PSBCbG9ja1F1
b3RlQ2l0ZSkKKyAgICAgICAgYmxvY2tRdW90ZS5zZXRDaXRlKHN0cik7Cit9CisKK3ZvaWQgSFRN
TEVsZW1lbnQ6OnF1b3RlU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBW
YWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTFF1b3Rl
RWxlbWVudEltcGwmIHF1b3RlID0gKnN0YXRpY19jYXN0PEhUTUxRdW90ZUVsZW1lbnRJbXBsKj4o
aW1wbCgpKTsKKyAgICBpZiAodG9rZW4gPT0gUXVvdGVDaXRlKQorICAgICAgICBxdW90ZS5zZXRD
aXRlKHN0cik7Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OnByZVNldHRlcihFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYg
c3RyKQoreworICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgJ3dyYXAnIHdoZW4gd2hpdGUt
c3BhY2U6IHByZS13cmFwIGlzIGltcGxlbWVudGVkLgorICAgIEhUTUxQcmVFbGVtZW50SW1wbCYg
cHJlID0gKnN0YXRpY19jYXN0PEhUTUxQcmVFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYg
KHRva2VuID09IFByZVdpZHRoKQorICAgICAgICBwcmUuc2V0V2lkdGgodmFsdWUudG9JbnQzMihl
eGVjKSk7Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OmJyU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIp
Cit7CisgICAgSFRNTEJSRWxlbWVudEltcGwmIGJyID0gKnN0YXRpY19jYXN0PEhUTUxCUkVsZW1l
bnRJbXBsKj4oaW1wbCgpKTsKKyAgICBpZiAodG9rZW4gPT0gQlJDbGVhcikKKyAgICAgICAgYnIu
c2V0Q2xlYXIoc3RyKTsKK30KKwordm9pZCBIVE1MRWxlbWVudDo6YmFzZUZvbnRTZXR0ZXIoRXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpE
T01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MQmFzZUZvbnRFbGVtZW50SW1wbCYgYmFzZUZvbnQg
PSAqc3RhdGljX2Nhc3Q8SFRNTEJhc2VGb250RWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3
aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBCYXNlRm9udENvbG9yOiAgICAgICAgICAgeyBi
YXNlRm9udC5zZXRDb2xvcihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBCYXNlRm9udEZh
Y2U6ICAgICAgICAgICAgeyBiYXNlRm9udC5zZXRGYWNlKHN0cik7IHJldHVybjsgfQorICAgICAg
ICBjYXNlIEJhc2VGb250U2l6ZTogICAgICAgICAgICB7IGJhc2VGb250LnNldFNpemUoc3RyKTsg
cmV0dXJuOyB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfSU5TOgotICAgIGNhc2Ug
SURfREVMOiB7Ci0gICAgICBIVE1MTW9kRWxlbWVudEltcGwgJm1vZCA9IHN0YXRpY19jYXN0PEhU
TUxNb2RFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAg
ICAgIGNhc2UgTW9kQ2l0ZTogICAgICAgICAgICB7IG1vZC5zZXRDaXRlKHN0cik7IHJldHVybjsg
fQotICAgICAgY2FzZSBNb2REYXRlVGltZTogICAgICAgIHsgbW9kLnNldERhdGVUaW1lKHN0cik7
IHJldHVybjsgfQotICAgICAgfQorfQorCit2b2lkIEhUTUxFbGVtZW50Ojpmb250U2V0dGVyKEV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6
RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTEZvbnRFbGVtZW50SW1wbCYgZm9udCA9ICpzdGF0
aWNfY2FzdDxIVE1MRm9udEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2Vu
KSB7CisgICAgICAgIGNhc2UgRm9udENvbG9yOiAgICAgICAgICAgeyBmb250LnNldENvbG9yKHN0
cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEZvbnRGYWNlOiAgICAgICAgICAgIHsgZm9udC5z
ZXRGYWNlKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEZvbnRTaXplOiAgICAgICAgICAg
IHsgZm9udC5zZXRTaXplKHN0cik7IHJldHVybjsgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBj
YXNlIElEX0E6IHsKLSAgICAgIEhUTUxBbmNob3JFbGVtZW50SW1wbCAmYW5jaG9yID0gc3RhdGlj
X2Nhc3Q8SFRNTEFuY2hvckVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0
b2tlbikgewotICAgICAgY2FzZSBBbmNob3JBY2Nlc3NLZXk6ICAgICAgIHsgYW5jaG9yLnNldEFj
Y2Vzc0tleShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQW5jaG9yQ2hhcnNldDogICAgICAg
ICB7IGFuY2hvci5zZXRDaGFyc2V0KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBBbmNob3JD
b29yZHM6ICAgICAgICAgIHsgYW5jaG9yLnNldENvb3JkcyhzdHIpOyByZXR1cm47IH0KLSAgICAg
IGNhc2UgQW5jaG9ySHJlZjogICAgICAgICAgICB7IGFuY2hvci5zZXRIcmVmKHN0cik7IHJldHVy
bjsgfQotICAgICAgY2FzZSBBbmNob3JIcmVmTGFuZzogICAgICAgIHsgYW5jaG9yLnNldEhyZWZs
YW5nKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBBbmNob3JOYW1lOiAgICAgICAgICAgIHsg
YW5jaG9yLnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEFuY2hvclJlbDogICAg
ICAgICAgICAgeyBhbmNob3Iuc2V0UmVsKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBBbmNo
b3JSZXY6ICAgICAgICAgICAgIHsgYW5jaG9yLnNldFJldihzdHIpOyByZXR1cm47IH0KLSAgICAg
IGNhc2UgQW5jaG9yU2hhcGU6ICAgICAgICAgICB7IGFuY2hvci5zZXRTaGFwZShzdHIpOyByZXR1
cm47IH0KLSAgICAgIGNhc2UgQW5jaG9yVGFiSW5kZXg6ICAgICAgICB7IGFuY2hvci5zZXRUYWJJ
bmRleCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEFuY2hvclRh
cmdldDogICAgICAgICAgeyBhbmNob3Iuc2V0VGFyZ2V0KHN0cik7IHJldHVybjsgfQotICAgICAg
Y2FzZSBBbmNob3JUeXBlOiAgICAgICAgICAgIHsgYW5jaG9yLnNldFR5cGUoc3RyKTsgcmV0dXJu
OyB9Ci0gICAgICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OmhyU2V0dGVyKEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5n
JiBzdHIpCit7CisgICAgSFRNTEhSRWxlbWVudEltcGwmIGhyID0gKnN0YXRpY19jYXN0PEhUTUxI
UkVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNh
c2UgSFJBbGlnbjogICAgICAgICAgIHsgaHIuc2V0QWxpZ24oc3RyKTsgcmV0dXJuOyB9CisgICAg
ICAgIGNhc2UgSFJOb1NoYWRlOiAgICAgICAgIHsgaHIuc2V0Tm9TaGFkZSh2YWx1ZS50b0Jvb2xl
YW4oZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBIUlNpemU6ICAgICAgICAgICAgeyBo
ci5zZXRTaXplKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEhSV2lkdGg6ICAgICAgICAg
ICB7IGhyLnNldFdpZHRoKHN0cik7IHJldHVybjsgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBj
YXNlIElEX0lNRzogewotICAgICAgSFRNTEltYWdlRWxlbWVudEltcGwgJmltYWdlID0gc3RhdGlj
X2Nhc3Q8SFRNTEltYWdlRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRv
a2VuKSB7Ci0gICAgICBjYXNlIEltYWdlTmFtZTogICAgICAgICAgICB7IGltYWdlLnNldE5hbWUo
c3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEltYWdlQWxpZ246ICAgICAgICAgICB7IGltYWdl
LnNldEFsaWduKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBJbWFnZUFsdDogICAgICAgICAg
ICAgeyBpbWFnZS5zZXRBbHQoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEltYWdlQm9yZGVy
OiAgICAgICAgICB7IGltYWdlLnNldEJvcmRlcih2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJu
OyB9Ci0gICAgICBjYXNlIEltYWdlSGVpZ2h0OiAgICAgICAgICB7IGltYWdlLnNldEhlaWdodCh2
YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEltYWdlSHNwYWNlOiAg
ICAgICAgICB7IGltYWdlLnNldEhzcGFjZSh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9
Ci0gICAgICBjYXNlIEltYWdlSXNNYXA6ICAgICAgICAgICB7IGltYWdlLnNldElzTWFwKHZhbHVl
LnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBJbWFnZUxvbmdEZXNjOiAg
ICAgICAgeyBpbWFnZS5zZXRMb25nRGVzYyhzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSW1h
Z2VTcmM6ICAgICAgICAgICAgIHsgaW1hZ2Uuc2V0U3JjKHN0cik7IHJldHVybjsgfQotICAgICAg
Y2FzZSBJbWFnZVVzZU1hcDogICAgICAgICAgeyBpbWFnZS5zZXRVc2VNYXAoc3RyKTsgcmV0dXJu
OyB9Ci0gICAgICBjYXNlIEltYWdlVnNwYWNlOiAgICAgICAgICB7IGltYWdlLnNldFZzcGFjZSh2
YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEltYWdlV2lkdGg6ICAg
ICAgICAgICB7IGltYWdlLnNldFdpZHRoKHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0K
LSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6bW9kU2V0dGVyKEV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBz
dHIpCit7CisgICAgSFRNTE1vZEVsZW1lbnRJbXBsJiBtb2QgPSAqc3RhdGljX2Nhc3Q8SFRNTE1v
ZEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNh
c2UgTW9kQ2l0ZTogICAgICAgICAgICB7IG1vZC5zZXRDaXRlKHN0cik7IHJldHVybjsgfQorICAg
ICAgICBjYXNlIE1vZERhdGVUaW1lOiAgICAgICAgeyBtb2Quc2V0RGF0ZVRpbWUoc3RyKTsgcmV0
dXJuOyB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfT0JKRUNUOiB7Ci0gICAgICBI
VE1MT2JqZWN0RWxlbWVudEltcGwgJm9iamVjdCA9IHN0YXRpY19jYXN0PEhUTUxPYmplY3RFbGVt
ZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIC8vIHJl
YWQtb25seTogZm9ybQotICAgICAgY2FzZSBPYmplY3RDb2RlOiAgICAgICAgICAgICAgICAgeyBv
YmplY3Quc2V0Q29kZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgT2JqZWN0QWxpZ246ICAg
ICAgICAgICB7IG9iamVjdC5zZXRBbGlnbihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgT2Jq
ZWN0QXJjaGl2ZTogICAgICAgICB7IG9iamVjdC5zZXRBcmNoaXZlKHN0cik7IHJldHVybjsgfQot
ICAgICAgY2FzZSBPYmplY3RCb3JkZXI6ICAgICAgICAgIHsgb2JqZWN0LnNldEJvcmRlcihzdHIp
OyByZXR1cm47IH0KLSAgICAgIGNhc2UgT2JqZWN0Q29kZUJhc2U6ICAgICAgICB7IG9iamVjdC5z
ZXRDb2RlQmFzZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgT2JqZWN0Q29kZVR5cGU6ICAg
ICAgICB7IG9iamVjdC5zZXRDb2RlVHlwZShzdHIpOyByZXR1cm47IH0KLSAgICAgIC8vIHJlYWQt
b25seTogT2JqZWN0Q29udGVudERvY3VtZW50Ci0gICAgICBjYXNlIE9iamVjdERhdGE6ICAgICAg
ICAgICAgeyBvYmplY3Quc2V0RGF0YShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgT2JqZWN0
RGVjbGFyZTogICAgICAgICB7IG9iamVjdC5zZXREZWNsYXJlKHZhbHVlLnRvQm9vbGVhbihleGVj
KSk7IHJldHVybjsgfQotICAgICAgY2FzZSBPYmplY3RIZWlnaHQ6ICAgICAgICAgIHsgb2JqZWN0
LnNldEhlaWdodChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgT2JqZWN0SHNwYWNlOiAgICAg
ICAgICB7IG9iamVjdC5zZXRIc3BhY2Uoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIE9iamVj
dE5hbWU6ICAgICAgICAgICAgeyBvYmplY3Quc2V0TmFtZShzdHIpOyByZXR1cm47IH0KLSAgICAg
IGNhc2UgT2JqZWN0U3RhbmRieTogICAgICAgICB7IG9iamVjdC5zZXRTdGFuZGJ5KHN0cik7IHJl
dHVybjsgfQotICAgICAgY2FzZSBPYmplY3RUYWJJbmRleDogICAgICAgIHsgb2JqZWN0LnNldFRh
YkluZGV4KHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgT2JqZWN0
VHlwZTogICAgICAgICAgICB7IG9iamVjdC5zZXRUeXBlKHN0cik7IHJldHVybjsgfQotICAgICAg
Y2FzZSBPYmplY3RVc2VNYXA6ICAgICAgICAgIHsgb2JqZWN0LnNldFVzZU1hcChzdHIpOyByZXR1
cm47IH0KLSAgICAgIGNhc2UgT2JqZWN0VnNwYWNlOiAgICAgICAgICB7IG9iamVjdC5zZXRWc3Bh
Y2Uoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIE9iamVjdFdpZHRoOiAgICAgICAgICAgeyBv
YmplY3Quc2V0V2lkdGgoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICB9Cit9CisKK3ZvaWQgSFRNTEVs
ZW1lbnQ6OmFuY2hvclNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFs
dWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxBbmNob3JF
bGVtZW50SW1wbCYgYW5jaG9yID0gKnN0YXRpY19jYXN0PEhUTUxBbmNob3JFbGVtZW50SW1wbCo+
KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNlIEFuY2hvckFjY2Vz
c0tleTogICAgICAgeyBhbmNob3Iuc2V0QWNjZXNzS2V5KHN0cik7IHJldHVybjsgfQorICAgICAg
ICBjYXNlIEFuY2hvckNoYXJzZXQ6ICAgICAgICAgeyBhbmNob3Iuc2V0Q2hhcnNldChzdHIpOyBy
ZXR1cm47IH0KKyAgICAgICAgY2FzZSBBbmNob3JDb29yZHM6ICAgICAgICAgIHsgYW5jaG9yLnNl
dENvb3JkcyhzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBBbmNob3JIcmVmOiAgICAgICAg
ICAgIHsgYW5jaG9yLnNldEhyZWYoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQW5jaG9y
SHJlZkxhbmc6ICAgICAgICB7IGFuY2hvci5zZXRIcmVmbGFuZyhzdHIpOyByZXR1cm47IH0KKyAg
ICAgICAgY2FzZSBBbmNob3JOYW1lOiAgICAgICAgICAgIHsgYW5jaG9yLnNldE5hbWUoc3RyKTsg
cmV0dXJuOyB9CisgICAgICAgIGNhc2UgQW5jaG9yUmVsOiAgICAgICAgICAgICB7IGFuY2hvci5z
ZXRSZWwoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQW5jaG9yUmV2OiAgICAgICAgICAg
ICB7IGFuY2hvci5zZXRSZXYoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQW5jaG9yU2hh
cGU6ICAgICAgICAgICB7IGFuY2hvci5zZXRTaGFwZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAg
Y2FzZSBBbmNob3JUYWJJbmRleDogICAgICAgIHsgYW5jaG9yLnNldFRhYkluZGV4KHZhbHVlLnRv
SW50MzIoZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBBbmNob3JUYXJnZXQ6ICAgICAg
ICAgIHsgYW5jaG9yLnNldFRhcmdldChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBBbmNo
b3JUeXBlOiAgICAgICAgICAgIHsgYW5jaG9yLnNldFR5cGUoc3RyKTsgcmV0dXJuOyB9CiAgICAg
fQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfUEFSQU06IHsKLSAgICAgIEhUTUxQYXJhbUVsZW1l
bnRJbXBsICZwYXJhbSA9IHN0YXRpY19jYXN0PEhUTUxQYXJhbUVsZW1lbnRJbXBsICY+KGVsZW1l
bnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgY2FzZSBQYXJhbU5hbWU6ICAgICAg
ICAgICAgeyBwYXJhbS5zZXROYW1lKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBQYXJhbVR5
cGU6ICAgICAgICAgICAgeyBwYXJhbS5zZXRUeXBlKHN0cik7IHJldHVybjsgfQotICAgICAgY2Fz
ZSBQYXJhbVZhbHVlOiAgICAgICAgICAgeyBwYXJhbS5zZXRWYWx1ZShzdHIpOyByZXR1cm47IH0K
LSAgICAgIGNhc2UgUGFyYW1WYWx1ZVR5cGU6ICAgICAgIHsgcGFyYW0uc2V0VmFsdWVUeXBlKHN0
cik7IHJldHVybjsgfQotICAgICAgfQorfQorCit2b2lkIEhUTUxFbGVtZW50OjppbWFnZVNldHRl
cihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBE
T006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxJbWFnZUVsZW1lbnRJbXBsJiBpbWFnZSA9
ICpzdGF0aWNfY2FzdDxIVE1MSW1hZ2VFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNo
ICh0b2tlbikgeworICAgICAgICBjYXNlIEltYWdlTmFtZTogICAgICAgICAgICB7IGltYWdlLnNl
dE5hbWUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgSW1hZ2VBbGlnbjogICAgICAgICAg
IHsgaW1hZ2Uuc2V0QWxpZ24oc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgSW1hZ2VBbHQ6
ICAgICAgICAgICAgIHsgaW1hZ2Uuc2V0QWx0KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNl
IEltYWdlQm9yZGVyOiAgICAgICAgICB7IGltYWdlLnNldEJvcmRlcih2YWx1ZS50b0ludDMyKGV4
ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgSW1hZ2VIZWlnaHQ6ICAgICAgICAgIHsgaW1h
Z2Uuc2V0SGVpZ2h0KHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2Fz
ZSBJbWFnZUhzcGFjZTogICAgICAgICAgeyBpbWFnZS5zZXRIc3BhY2UodmFsdWUudG9JbnQzMihl
eGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIEltYWdlSXNNYXA6ICAgICAgICAgICB7IGlt
YWdlLnNldElzTWFwKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBj
YXNlIEltYWdlTG9uZ0Rlc2M6ICAgICAgICB7IGltYWdlLnNldExvbmdEZXNjKHN0cik7IHJldHVy
bjsgfQorICAgICAgICBjYXNlIEltYWdlU3JjOiAgICAgICAgICAgICB7IGltYWdlLnNldFNyYyhz
dHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJbWFnZVVzZU1hcDogICAgICAgICAgeyBpbWFn
ZS5zZXRVc2VNYXAoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgSW1hZ2VWc3BhY2U6ICAg
ICAgICAgIHsgaW1hZ2Uuc2V0VnNwYWNlKHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0K
KyAgICAgICAgY2FzZSBJbWFnZVdpZHRoOiAgICAgICAgICAgeyBpbWFnZS5zZXRXaWR0aCh2YWx1
ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2Ug
SURfQVBQTEVUOiB7Ci0gICAgICBIVE1MQXBwbGV0RWxlbWVudEltcGwgJmFwcGxldCA9IHN0YXRp
Y19jYXN0PEhUTUxBcHBsZXRFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAo
dG9rZW4pIHsKLSAgICAgIGNhc2UgQXBwbGV0QWxpZ246ICAgICAgICAgICB7IGFwcGxldC5zZXRB
bGlnbihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQXBwbGV0QWx0OiAgICAgICAgICAgICB7
IGFwcGxldC5zZXRBbHQoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEFwcGxldEFyY2hpdmU6
ICAgICAgICAgeyBhcHBsZXQuc2V0QXJjaGl2ZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2Ug
QXBwbGV0Q29kZTogICAgICAgICAgICB7IGFwcGxldC5zZXRDb2RlKHN0cik7IHJldHVybjsgfQot
ICAgICAgY2FzZSBBcHBsZXRDb2RlQmFzZTogICAgICAgIHsgYXBwbGV0LnNldENvZGVCYXNlKHN0
cik7IHJldHVybjsgfQotICAgICAgY2FzZSBBcHBsZXRIZWlnaHQ6ICAgICAgICAgIHsgYXBwbGV0
LnNldEhlaWdodChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQXBwbGV0SHNwYWNlOiAgICAg
ICAgICB7IGFwcGxldC5zZXRIc3BhY2Uoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEFwcGxl
dE5hbWU6ICAgICAgICAgICAgeyBhcHBsZXQuc2V0TmFtZShzdHIpOyByZXR1cm47IH0KLSAgICAg
IGNhc2UgQXBwbGV0T2JqZWN0OiAgICAgICAgICB7IGFwcGxldC5zZXRPYmplY3Qoc3RyKTsgcmV0
dXJuOyB9Ci0gICAgICBjYXNlIEFwcGxldFZzcGFjZTogICAgICAgICAgeyBhcHBsZXQuc2V0VnNw
YWNlKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBBcHBsZXRXaWR0aDogICAgICAgICAgIHsg
YXBwbGV0LnNldFdpZHRoKHN0cik7IHJldHVybjsgfQotICAgICAgfQorfQorCit2b2lkIEhUTUxF
bGVtZW50OjpvYmplY3RTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZh
bHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MT2JqZWN0
RWxlbWVudEltcGwmIG9iamVjdCA9ICpzdGF0aWNfY2FzdDxIVE1MT2JqZWN0RWxlbWVudEltcGwq
PihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgLy8gcmVhZC1vbmx5OiBm
b3JtCisgICAgICAgIGNhc2UgT2JqZWN0Q29kZTogICAgICAgICAgICB7IG9iamVjdC5zZXRDb2Rl
KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIE9iamVjdEFsaWduOiAgICAgICAgICAgeyBv
YmplY3Quc2V0QWxpZ24oc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgT2JqZWN0QXJjaGl2
ZTogICAgICAgICB7IG9iamVjdC5zZXRBcmNoaXZlKHN0cik7IHJldHVybjsgfQorICAgICAgICBj
YXNlIE9iamVjdEJvcmRlcjogICAgICAgICAgeyBvYmplY3Quc2V0Qm9yZGVyKHN0cik7IHJldHVy
bjsgfQorICAgICAgICBjYXNlIE9iamVjdENvZGVCYXNlOiAgICAgICAgeyBvYmplY3Quc2V0Q29k
ZUJhc2Uoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgT2JqZWN0Q29kZVR5cGU6ICAgICAg
ICB7IG9iamVjdC5zZXRDb2RlVHlwZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgLy8gcmVhZC1v
bmx5OiBPYmplY3RDb250ZW50RG9jdW1lbnQKKyAgICAgICAgY2FzZSBPYmplY3REYXRhOiAgICAg
ICAgICAgIHsgb2JqZWN0LnNldERhdGEoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgT2Jq
ZWN0RGVjbGFyZTogICAgICAgICB7IG9iamVjdC5zZXREZWNsYXJlKHZhbHVlLnRvQm9vbGVhbihl
eGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIE9iamVjdEhlaWdodDogICAgICAgICAgeyBv
YmplY3Quc2V0SGVpZ2h0KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIE9iamVjdEhzcGFj
ZTogICAgICAgICAgeyBvYmplY3Quc2V0SHNwYWNlKHN0cik7IHJldHVybjsgfQorICAgICAgICBj
YXNlIE9iamVjdE5hbWU6ICAgICAgICAgICAgeyBvYmplY3Quc2V0TmFtZShzdHIpOyByZXR1cm47
IH0KKyAgICAgICAgY2FzZSBPYmplY3RTdGFuZGJ5OiAgICAgICAgIHsgb2JqZWN0LnNldFN0YW5k
Ynkoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgT2JqZWN0VGFiSW5kZXg6ICAgICAgICB7
IG9iamVjdC5zZXRUYWJJbmRleCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAg
ICAgIGNhc2UgT2JqZWN0VHlwZTogICAgICAgICAgICB7IG9iamVjdC5zZXRUeXBlKHN0cik7IHJl
dHVybjsgfQorICAgICAgICBjYXNlIE9iamVjdFVzZU1hcDogICAgICAgICAgeyBvYmplY3Quc2V0
VXNlTWFwKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIE9iamVjdFZzcGFjZTogICAgICAg
ICAgeyBvYmplY3Quc2V0VnNwYWNlKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIE9iamVj
dFdpZHRoOiAgICAgICAgICAgeyBvYmplY3Quc2V0V2lkdGgoc3RyKTsgcmV0dXJuOyB9CiAgICAg
fQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfTUFQOiB7Ci0gICAgICBIVE1MTWFwRWxlbWVudElt
cGwgJm1hcCA9IHN0YXRpY19jYXN0PEhUTUxNYXBFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAg
ICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIC8vIHJlYWQtb25seTogYXJlYXMKLSAgICAgIGNh
c2UgTWFwTmFtZTogICAgICAgICAgICAgICAgIHsgbWFwLnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9
Ci0gICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6cGFyYW1TZXR0ZXIoRXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcm
IHN0cikKK3sKKyAgICBIVE1MUGFyYW1FbGVtZW50SW1wbCYgcGFyYW0gPSAqc3RhdGljX2Nhc3Q8
SFRNTFBhcmFtRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAg
ICAgICAgY2FzZSBQYXJhbU5hbWU6ICAgICAgICAgICAgeyBwYXJhbS5zZXROYW1lKHN0cik7IHJl
dHVybjsgfQorICAgICAgICBjYXNlIFBhcmFtVHlwZTogICAgICAgICAgICB7IHBhcmFtLnNldFR5
cGUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgUGFyYW1WYWx1ZTogICAgICAgICAgIHsg
cGFyYW0uc2V0VmFsdWUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgUGFyYW1WYWx1ZVR5
cGU6ICAgICAgIHsgcGFyYW0uc2V0VmFsdWVUeXBlKHN0cik7IHJldHVybjsgfQogICAgIH0KLSAg
ICBicmVhazsKLSAgICBjYXNlIElEX0FSRUE6IHsKLSAgICAgIEhUTUxBcmVhRWxlbWVudEltcGwg
JmFyZWEgPSBzdGF0aWNfY2FzdDxIVE1MQXJlYUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAg
ICAgc3dpdGNoICh0b2tlbikgewotICAgICAgY2FzZSBBcmVhQWNjZXNzS2V5OiAgICAgICB7IGFy
ZWEuc2V0QWNjZXNzS2V5KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBBcmVhQWx0OiAgICAg
ICAgICAgICB7IGFyZWEuc2V0QWx0KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBBcmVhQ29v
cmRzOiAgICAgICAgICB7IGFyZWEuc2V0Q29vcmRzKHN0cik7IHJldHVybjsgfQotICAgICAgY2Fz
ZSBBcmVhSHJlZjogICAgICAgICAgICB7IGFyZWEuc2V0SHJlZihzdHIpOyByZXR1cm47IH0KLSAg
ICAgIGNhc2UgQXJlYU5vSHJlZjogICAgICAgICAgeyBhcmVhLnNldE5vSHJlZih2YWx1ZS50b0Jv
b2xlYW4oZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQXJlYVNoYXBlOiAgICAgICAgICAg
eyBhcmVhLnNldFNoYXBlKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBBcmVhVGFiSW5kZXg6
ICAgICAgICB7IGFyZWEuc2V0VGFiSW5kZXgodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsg
fQotICAgICAgY2FzZSBBcmVhVGFyZ2V0OiAgICAgICAgICB7IGFyZWEuc2V0VGFyZ2V0KHN0cik7
IHJldHVybjsgfQotICAgICAgfQorfQorCit2b2lkIEhUTUxFbGVtZW50OjphcHBsZXRTZXR0ZXIo
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9N
OjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MQXBwbGV0RWxlbWVudEltcGwmIGFwcGxldCA9
ICpzdGF0aWNfY2FzdDxIVE1MQXBwbGV0RWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRj
aCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBBcHBsZXRBbGlnbjogICAgICAgICAgIHsgYXBwbGV0
LnNldEFsaWduKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEFwcGxldEFsdDogICAgICAg
ICAgICAgeyBhcHBsZXQuc2V0QWx0KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEFwcGxl
dEFyY2hpdmU6ICAgICAgICAgeyBhcHBsZXQuc2V0QXJjaGl2ZShzdHIpOyByZXR1cm47IH0KKyAg
ICAgICAgY2FzZSBBcHBsZXRDb2RlOiAgICAgICAgICAgIHsgYXBwbGV0LnNldENvZGUoc3RyKTsg
cmV0dXJuOyB9CisgICAgICAgIGNhc2UgQXBwbGV0Q29kZUJhc2U6ICAgICAgICB7IGFwcGxldC5z
ZXRDb2RlQmFzZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBBcHBsZXRIZWlnaHQ6ICAg
ICAgICAgIHsgYXBwbGV0LnNldEhlaWdodChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBB
cHBsZXRIc3BhY2U6ICAgICAgICAgIHsgYXBwbGV0LnNldEhzcGFjZShzdHIpOyByZXR1cm47IH0K
KyAgICAgICAgY2FzZSBBcHBsZXROYW1lOiAgICAgICAgICAgIHsgYXBwbGV0LnNldE5hbWUoc3Ry
KTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQXBwbGV0T2JqZWN0OiAgICAgICAgICB7IGFwcGxl
dC5zZXRPYmplY3Qoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQXBwbGV0VnNwYWNlOiAg
ICAgICAgICB7IGFwcGxldC5zZXRWc3BhY2Uoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2Ug
QXBwbGV0V2lkdGg6ICAgICAgICAgICB7IGFwcGxldC5zZXRXaWR0aChzdHIpOyByZXR1cm47IH0K
ICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9TQ1JJUFQ6IHsKLSAgICAgIEhUTUxTY3Jp
cHRFbGVtZW50SW1wbCAmc2NyaXB0ID0gc3RhdGljX2Nhc3Q8SFRNTFNjcmlwdEVsZW1lbnRJbXBs
ICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgY2FzZSBTY3JpcHRU
ZXh0OiAgICAgICAgICAgIHsgc2NyaXB0LnNldFRleHQoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBj
YXNlIFNjcmlwdEh0bWxGb3I6ICAgICAgICAgeyBzY3JpcHQuc2V0SHRtbEZvcihzdHIpOyByZXR1
cm47IH0KLSAgICAgIGNhc2UgU2NyaXB0RXZlbnQ6ICAgICAgICAgICB7IHNjcmlwdC5zZXRFdmVu
dChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgU2NyaXB0Q2hhcnNldDogICAgICAgICB7IHNj
cmlwdC5zZXRDaGFyc2V0KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBTY3JpcHREZWZlcjog
ICAgICAgICAgIHsgc2NyaXB0LnNldERlZmVyKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVy
bjsgfQotICAgICAgY2FzZSBTY3JpcHRTcmM6ICAgICAgICAgICAgIHsgc2NyaXB0LnNldFNyYyhz
dHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgU2NyaXB0VHlwZTogICAgICAgICAgICB7IHNjcmlw
dC5zZXRUeXBlKHN0cik7IHJldHVybjsgfQotICAgICAgfQorfQorCit2b2lkIEhUTUxFbGVtZW50
OjptYXBTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1
ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MTWFwRWxlbWVudEltcGwm
IG1hcCA9ICpzdGF0aWNfY2FzdDxIVE1MTWFwRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIGlm
ICh0b2tlbiA9PSBNYXBOYW1lKQorICAgICAgICAvLyByZWFkLW9ubHk6IGFyZWFzCisgICAgICAg
IG1hcC5zZXROYW1lKHN0cik7Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OmFyZWFTZXR0ZXIoRXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpE
T01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MQXJlYUVsZW1lbnRJbXBsJiBhcmVhID0gKnN0YXRp
Y19jYXN0PEhUTUxBcmVhRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4p
IHsKKyAgICAgICAgY2FzZSBBcmVhQWNjZXNzS2V5OiAgICAgICB7IGFyZWEuc2V0QWNjZXNzS2V5
KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEFyZWFBbHQ6ICAgICAgICAgICAgIHsgYXJl
YS5zZXRBbHQoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQXJlYUNvb3JkczogICAgICAg
ICAgeyBhcmVhLnNldENvb3JkcyhzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBBcmVhSHJl
ZjogICAgICAgICAgICB7IGFyZWEuc2V0SHJlZihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2Fz
ZSBBcmVhTm9IcmVmOiAgICAgICAgICB7IGFyZWEuc2V0Tm9IcmVmKHZhbHVlLnRvQm9vbGVhbihl
eGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIEFyZWFTaGFwZTogICAgICAgICAgIHsgYXJl
YS5zZXRTaGFwZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBBcmVhVGFiSW5kZXg6ICAg
ICAgICB7IGFyZWEuc2V0VGFiSW5kZXgodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQor
ICAgICAgICBjYXNlIEFyZWFUYXJnZXQ6ICAgICAgICAgIHsgYXJlYS5zZXRUYXJnZXQoc3RyKTsg
cmV0dXJuOyB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfVEFCTEU6IHsKLSAgICAg
IEhUTUxUYWJsZUVsZW1lbnRJbXBsICZ0YWJsZSA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZUVsZW1l
bnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgY2FzZSBU
YWJsZUNhcHRpb246ICAgICAgICAgeyB0YWJsZS5zZXRDYXB0aW9uKHRvSFRNTFRhYmxlQ2FwdGlv
bkVsZW1lbnQodmFsdWUpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlVEhlYWQ6ICAgICAg
ICAgICB7IHRhYmxlLnNldFRIZWFkKHRvSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQodmFsdWUpKTsg
cmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlVEZvb3Q6ICAgICAgICAgICB7IHRhYmxlLnNldFRG
b290KHRvSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQodmFsdWUpKTsgcmV0dXJuOyB9Ci0gICAgICAv
LyByZWFkLW9ubHk6IHJvd3MKLSAgICAgIC8vIHJlYWQtb25seTogdGJvZGllcwotICAgICAgY2Fz
ZSBUYWJsZUFsaWduOiAgICAgICAgICAgeyB0YWJsZS5zZXRBbGlnbihzdHIpOyByZXR1cm47IH0K
LSAgICAgIGNhc2UgVGFibGVCZ0NvbG9yOiAgICAgICAgIHsgdGFibGUuc2V0QmdDb2xvcihzdHIp
OyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVCb3JkZXI6ICAgICAgICAgIHsgdGFibGUuc2V0
Qm9yZGVyKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJsZUNlbGxQYWRkaW5nOiAgICAg
eyB0YWJsZS5zZXRDZWxsUGFkZGluZyhzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVD
ZWxsU3BhY2luZzogICAgIHsgdGFibGUuc2V0Q2VsbFNwYWNpbmcoc3RyKTsgcmV0dXJuOyB9Ci0g
ICAgICBjYXNlIFRhYmxlRnJhbWU6ICAgICAgICAgICB7IHRhYmxlLnNldEZyYW1lKHN0cik7IHJl
dHVybjsgfQotICAgICAgY2FzZSBUYWJsZVJ1bGVzOiAgICAgICAgICAgeyB0YWJsZS5zZXRSdWxl
cyhzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVTdW1tYXJ5OiAgICAgICAgIHsgdGFi
bGUuc2V0U3VtbWFyeShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVXaWR0aDogICAg
ICAgICAgIHsgdGFibGUuc2V0V2lkdGgoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICB9Cit9CisKK3Zv
aWQgSFRNTEVsZW1lbnQ6OnNjcmlwdFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwg
Y29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhU
TUxTY3JpcHRFbGVtZW50SW1wbCYgc2NyaXB0ID0gKnN0YXRpY19jYXN0PEhUTUxTY3JpcHRFbGVt
ZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNlIFNj
cmlwdFRleHQ6ICAgICAgICAgICAgeyBzY3JpcHQuc2V0VGV4dChzdHIpOyByZXR1cm47IH0KKyAg
ICAgICAgY2FzZSBTY3JpcHRIdG1sRm9yOiAgICAgICAgIHsgc2NyaXB0LnNldEh0bWxGb3Ioc3Ry
KTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgU2NyaXB0RXZlbnQ6ICAgICAgICAgICB7IHNjcmlw
dC5zZXRFdmVudChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBTY3JpcHRDaGFyc2V0OiAg
ICAgICAgIHsgc2NyaXB0LnNldENoYXJzZXQoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2Ug
U2NyaXB0RGVmZXI6ICAgICAgICAgICB7IHNjcmlwdC5zZXREZWZlcih2YWx1ZS50b0Jvb2xlYW4o
ZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBTY3JpcHRTcmM6ICAgICAgICAgICAgIHsg
c2NyaXB0LnNldFNyYyhzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBTY3JpcHRUeXBlOiAg
ICAgICAgICAgIHsgc2NyaXB0LnNldFR5cGUoc3RyKTsgcmV0dXJuOyB9CiAgICAgfQotICAgIGJy
ZWFrOwotICAgIGNhc2UgSURfQ0FQVElPTjogewotICAgICAgSFRNTFRhYmxlQ2FwdGlvbkVsZW1l
bnRJbXBsICZ0YWJsZUNhcHRpb24gPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVDYXB0aW9uRWxlbWVu
dEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIFRh
YmxlQWxpZ246ICAgICAgICAgICB7IHRhYmxlQ2FwdGlvbi5zZXRBbGlnbihzdHIpOyByZXR1cm47
IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6dGFibGVTZXR0ZXIoRXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJp
bmcmIHN0cikKK3sKKyAgICBIVE1MVGFibGVFbGVtZW50SW1wbCYgdGFibGUgPSAqc3RhdGljX2Nh
c3Q8SFRNTFRhYmxlRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsK
KyAgICAgICAgY2FzZSBUYWJsZUNhcHRpb246ICAgICAgICAgeyB0YWJsZS5zZXRDYXB0aW9uKHRv
SFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQodmFsdWUpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2Ug
VGFibGVUSGVhZDogICAgICAgICAgIHsgdGFibGUuc2V0VEhlYWQodG9IVE1MVGFibGVTZWN0aW9u
RWxlbWVudCh2YWx1ZSkpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZVRGb290OiAgICAg
ICAgICAgeyB0YWJsZS5zZXRURm9vdCh0b0hUTUxUYWJsZVNlY3Rpb25FbGVtZW50KHZhbHVlKSk7
IHJldHVybjsgfQorICAgICAgICAvLyByZWFkLW9ubHk6IHJvd3MKKyAgICAgICAgLy8gcmVhZC1v
bmx5OiB0Ym9kaWVzCisgICAgICAgIGNhc2UgVGFibGVBbGlnbjogICAgICAgICAgIHsgdGFibGUu
c2V0QWxpZ24oc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGFibGVCZ0NvbG9yOiAgICAg
ICAgIHsgdGFibGUuc2V0QmdDb2xvcihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJs
ZUJvcmRlcjogICAgICAgICAgeyB0YWJsZS5zZXRCb3JkZXIoc3RyKTsgcmV0dXJuOyB9CisgICAg
ICAgIGNhc2UgVGFibGVDZWxsUGFkZGluZzogICAgIHsgdGFibGUuc2V0Q2VsbFBhZGRpbmcoc3Ry
KTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGFibGVDZWxsU3BhY2luZzogICAgIHsgdGFibGUu
c2V0Q2VsbFNwYWNpbmcoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGFibGVGcmFtZTog
ICAgICAgICAgIHsgdGFibGUuc2V0RnJhbWUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2Ug
VGFibGVSdWxlczogICAgICAgICAgIHsgdGFibGUuc2V0UnVsZXMoc3RyKTsgcmV0dXJuOyB9Cisg
ICAgICAgIGNhc2UgVGFibGVTdW1tYXJ5OiAgICAgICAgIHsgdGFibGUuc2V0U3VtbWFyeShzdHIp
OyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZVdpZHRoOiAgICAgICAgICAgeyB0YWJsZS5z
ZXRXaWR0aChzdHIpOyByZXR1cm47IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9D
T0w6IHsKLSAgICAgIEhUTUxUYWJsZUNvbEVsZW1lbnRJbXBsICZ0YWJsZUNvbCA9IHN0YXRpY19j
YXN0PEhUTUxUYWJsZUNvbEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0
b2tlbikgewotICAgICAgY2FzZSBUYWJsZUNvbEFsaWduOiAgICAgICAgICAgeyB0YWJsZUNvbC5z
ZXRBbGlnbihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVDb2xDaDogICAgICAgICAg
ICAgIHsgdGFibGVDb2wuc2V0Q2goc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlQ29s
Q2hPZmY6ICAgICAgICAgICB7IHRhYmxlQ29sLnNldENoT2ZmKHN0cik7IHJldHVybjsgfQotICAg
ICAgY2FzZSBUYWJsZUNvbFNwYW46ICAgICAgICAgICAgeyB0YWJsZUNvbC5zZXRTcGFuKHZhbHVl
LnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVDb2xWQWxpZ246ICAg
ICAgICAgIHsgdGFibGVDb2wuc2V0VkFsaWduKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBU
YWJsZUNvbFdpZHRoOiAgICAgICAgICAgeyB0YWJsZUNvbC5zZXRXaWR0aChzdHIpOyByZXR1cm47
IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6dGFibGVDYXB0aW9uU2V0dGVyKEV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6
RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnRJbXBsJiB0YWJs
ZUNhcHRpb24gPSAqc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnRJbXBsKj4oaW1w
bCgpKTsKKyAgICBpZiAodG9rZW4gPT0gVGFibGVDYXB0aW9uQWxpZ24pCisgICAgICAgIHRhYmxl
Q2FwdGlvbi5zZXRBbGlnbihzdHIpOworfQorCit2b2lkIEhUTUxFbGVtZW50Ojp0YWJsZUNvbFNl
dHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25z
dCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxUYWJsZUNvbEVsZW1lbnRJbXBsJiB0
YWJsZUNvbCA9ICpzdGF0aWNfY2FzdDxIVE1MVGFibGVDb2xFbGVtZW50SW1wbCo+KGltcGwoKSk7
CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNlIFRhYmxlQ29sQWxpZ246ICAgICAg
ICAgICB7IHRhYmxlQ29sLnNldEFsaWduKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRh
YmxlQ29sQ2g6ICAgICAgICAgICAgICB7IHRhYmxlQ29sLnNldENoKHN0cik7IHJldHVybjsgfQor
ICAgICAgICBjYXNlIFRhYmxlQ29sQ2hPZmY6ICAgICAgICAgICB7IHRhYmxlQ29sLnNldENoT2Zm
KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxlQ29sU3BhbjogICAgICAgICAgICB7
IHRhYmxlQ29sLnNldFNwYW4odmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQorICAgICAg
ICBjYXNlIFRhYmxlQ29sVkFsaWduOiAgICAgICAgICB7IHRhYmxlQ29sLnNldFZBbGlnbihzdHIp
OyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZUNvbFdpZHRoOiAgICAgICAgICAgeyB0YWJs
ZUNvbC5zZXRXaWR0aChzdHIpOyByZXR1cm47IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2Fz
ZSBJRF9USEVBRDoKLSAgICBjYXNlIElEX1RCT0RZOgotICAgIGNhc2UgSURfVEZPT1Q6IHsKLSAg
ICAgIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbCAmdGFibGVTZWN0aW9uID0gc3RhdGljX2Nh
c3Q8SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNo
ICh0b2tlbikgewotICAgICAgY2FzZSBUYWJsZVNlY3Rpb25BbGlnbjogICAgICAgICAgIHsgdGFi
bGVTZWN0aW9uLnNldEFsaWduKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJsZVNlY3Rp
b25DaDogICAgICAgICAgICAgIHsgdGFibGVTZWN0aW9uLnNldENoKHN0cik7IHJldHVybjsgfQot
ICAgICAgY2FzZSBUYWJsZVNlY3Rpb25DaE9mZjogICAgICAgICAgIHsgdGFibGVTZWN0aW9uLnNl
dENoT2ZmKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJsZVNlY3Rpb25WQWxpZ246ICAg
ICAgICAgIHsgdGFibGVTZWN0aW9uLnNldFZBbGlnbihzdHIpOyByZXR1cm47IH0KLSAgICAgIC8v
IHJlYWQtb25seTogcm93cwotICAgICAgfQorfQorCit2b2lkIEhUTUxFbGVtZW50Ojp0YWJsZVNl
Y3Rpb25TZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1
ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MVGFibGVTZWN0aW9uRWxl
bWVudEltcGwmIHRhYmxlU2VjdGlvbiA9ICpzdGF0aWNfY2FzdDxIVE1MVGFibGVTZWN0aW9uRWxl
bWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBU
YWJsZVNlY3Rpb25BbGlnbjogICAgICAgICAgIHsgdGFibGVTZWN0aW9uLnNldEFsaWduKHN0cik7
IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxlU2VjdGlvbkNoOiAgICAgICAgICAgICAgeyB0
YWJsZVNlY3Rpb24uc2V0Q2goc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGFibGVTZWN0
aW9uQ2hPZmY6ICAgICAgICAgICB7IHRhYmxlU2VjdGlvbi5zZXRDaE9mZihzdHIpOyByZXR1cm47
IH0KKyAgICAgICAgY2FzZSBUYWJsZVNlY3Rpb25WQWxpZ246ICAgICAgICAgIHsgdGFibGVTZWN0
aW9uLnNldFZBbGlnbihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgLy8gcmVhZC1vbmx5OiByb3dz
CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfVFI6IHsKLSAgICAgIEhUTUxUYWJsZVJv
d0VsZW1lbnRJbXBsICZ0YWJsZVJvdyA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZVJvd0VsZW1lbnRJ
bXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgLy8gcmVhZC1v
bmx5OiByb3dJbmRleAotICAgICAgLy8gcmVhZC1vbmx5OiBzZWN0aW9uUm93SW5kZXgKLSAgICAg
IC8vIHJlYWQtb25seTogY2VsbHMKLSAgICAgIGNhc2UgVGFibGVSb3dBbGlnbjogICAgICAgICAg
IHsgdGFibGVSb3cuc2V0QWxpZ24oc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlUm93
QmdDb2xvcjogICAgICAgICB7IHRhYmxlUm93LnNldEJnQ29sb3Ioc3RyKTsgcmV0dXJuOyB9Ci0g
ICAgICBjYXNlIFRhYmxlUm93Q2g6ICAgICAgICAgICAgICB7IHRhYmxlUm93LnNldENoKHN0cik7
IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJsZVJvd0NoT2ZmOiAgICAgICAgICAgeyB0YWJsZVJv
dy5zZXRDaE9mZihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVSb3dWQWxpZ246ICAg
ICAgICAgIHsgdGFibGVSb3cuc2V0VkFsaWduKHN0cik7IHJldHVybjsgfQotICAgICAgfQorfQor
Cit2b2lkIEhUTUxFbGVtZW50Ojp0YWJsZVJvd1NldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQorewor
ICAgIEhUTUxUYWJsZVJvd0VsZW1lbnRJbXBsJiB0YWJsZVJvdyA9ICpzdGF0aWNfY2FzdDxIVE1M
VGFibGVSb3dFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAg
ICAgICAvLyByZWFkLW9ubHk6IHJvd0luZGV4CisgICAgICAgIC8vIHJlYWQtb25seTogc2VjdGlv
blJvd0luZGV4CisgICAgICAgIC8vIHJlYWQtb25seTogY2VsbHMKKyAgICAgICAgY2FzZSBUYWJs
ZVJvd0FsaWduOiAgICAgICAgICAgeyB0YWJsZVJvdy5zZXRBbGlnbihzdHIpOyByZXR1cm47IH0K
KyAgICAgICAgY2FzZSBUYWJsZVJvd0JnQ29sb3I6ICAgICAgICAgeyB0YWJsZVJvdy5zZXRCZ0Nv
bG9yKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxlUm93Q2g6ICAgICAgICAgICAg
ICB7IHRhYmxlUm93LnNldENoKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxlUm93
Q2hPZmY6ICAgICAgICAgICB7IHRhYmxlUm93LnNldENoT2ZmKHN0cik7IHJldHVybjsgfQorICAg
ICAgICBjYXNlIFRhYmxlUm93VkFsaWduOiAgICAgICAgICB7IHRhYmxlUm93LnNldFZBbGlnbihz
dHIpOyByZXR1cm47IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9USDoKLSAgICBj
YXNlIElEX1REOiB7Ci0gICAgICBIVE1MVGFibGVDZWxsRWxlbWVudEltcGwgJnRhYmxlQ2VsbCA9
IHN0YXRpY19jYXN0PEhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAg
IHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIC8vIHJlYWQtb25seTogY2VsbEluZGV4Ci0gICAgICBj
YXNlIFRhYmxlQ2VsbEFiYnI6ICAgICAgICAgICAgeyB0YWJsZUNlbGwuc2V0QWJicihzdHIpOyBy
ZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVDZWxsQWxpZ246ICAgICAgICAgICB7IHRhYmxlQ2Vs
bC5zZXRBbGlnbihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVDZWxsQXhpczogICAg
ICAgICAgICB7IHRhYmxlQ2VsbC5zZXRBeGlzKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBU
YWJsZUNlbGxCZ0NvbG9yOiAgICAgICAgIHsgdGFibGVDZWxsLnNldEJnQ29sb3Ioc3RyKTsgcmV0
dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlQ2VsbENoOiAgICAgICAgICAgICAgeyB0YWJsZUNlbGwu
c2V0Q2goc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlQ2VsbENoT2ZmOiAgICAgICAg
ICAgeyB0YWJsZUNlbGwuc2V0Q2hPZmYoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxl
Q2VsbENvbFNwYW46ICAgICAgICAgeyB0YWJsZUNlbGwuc2V0Q29sU3Bhbih2YWx1ZS50b0ludDMy
KGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlQ2VsbEhlYWRlcnM6ICAgICAgICAg
eyB0YWJsZUNlbGwuc2V0SGVhZGVycyhzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVD
ZWxsSGVpZ2h0OiAgICAgICAgICB7IHRhYmxlQ2VsbC5zZXRIZWlnaHQoc3RyKTsgcmV0dXJuOyB9
Ci0gICAgICBjYXNlIFRhYmxlQ2VsbE5vV3JhcDogICAgICAgICAgeyB0YWJsZUNlbGwuc2V0Tm9X
cmFwKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJsZUNl
bGxSb3dTcGFuOiAgICAgICAgIHsgdGFibGVDZWxsLnNldFJvd1NwYW4odmFsdWUudG9JbnQzMihl
eGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJsZUNlbGxTY29wZTogICAgICAgICAgIHsg
dGFibGVDZWxsLnNldFNjb3BlKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJsZUNlbGxW
QWxpZ246ICAgICAgICAgIHsgdGFibGVDZWxsLnNldFZBbGlnbihzdHIpOyByZXR1cm47IH0KLSAg
ICAgIGNhc2UgVGFibGVDZWxsV2lkdGg6ICAgICAgICAgICB7IHRhYmxlQ2VsbC5zZXRXaWR0aChz
dHIpOyByZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6dGFibGVDZWxs
U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNv
bnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBs
JiB0YWJsZUNlbGwgPSAqc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsKj4oaW1w
bCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIC8vIHJlYWQtb25seTogY2VsbElu
ZGV4CisgICAgICAgIGNhc2UgVGFibGVDZWxsQWJicjogICAgICAgICAgICB7IHRhYmxlQ2VsbC5z
ZXRBYmJyKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxlQ2VsbEFsaWduOiAgICAg
ICAgICAgeyB0YWJsZUNlbGwuc2V0QWxpZ24oc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2Ug
VGFibGVDZWxsQXhpczogICAgICAgICAgICB7IHRhYmxlQ2VsbC5zZXRBeGlzKHN0cik7IHJldHVy
bjsgfQorICAgICAgICBjYXNlIFRhYmxlQ2VsbEJnQ29sb3I6ICAgICAgICAgeyB0YWJsZUNlbGwu
c2V0QmdDb2xvcihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZUNlbGxDaDogICAg
ICAgICAgICAgIHsgdGFibGVDZWxsLnNldENoKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNl
IFRhYmxlQ2VsbENoT2ZmOiAgICAgICAgICAgeyB0YWJsZUNlbGwuc2V0Q2hPZmYoc3RyKTsgcmV0
dXJuOyB9CisgICAgICAgIGNhc2UgVGFibGVDZWxsQ29sU3BhbjogICAgICAgICB7IHRhYmxlQ2Vs
bC5zZXRDb2xTcGFuKHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2Fz
ZSBUYWJsZUNlbGxIZWFkZXJzOiAgICAgICAgIHsgdGFibGVDZWxsLnNldEhlYWRlcnMoc3RyKTsg
cmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGFibGVDZWxsSGVpZ2h0OiAgICAgICAgICB7IHRhYmxl
Q2VsbC5zZXRIZWlnaHQoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGFibGVDZWxsTm9X
cmFwOiAgICAgICAgICB7IHRhYmxlQ2VsbC5zZXROb1dyYXAodmFsdWUudG9Cb29sZWFuKGV4ZWMp
KTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGFibGVDZWxsUm93U3BhbjogICAgICAgICB7IHRh
YmxlQ2VsbC5zZXRSb3dTcGFuKHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KKyAgICAg
ICAgY2FzZSBUYWJsZUNlbGxTY29wZTogICAgICAgICAgIHsgdGFibGVDZWxsLnNldFNjb3BlKHN0
cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxlQ2VsbFZBbGlnbjogICAgICAgICAgeyB0
YWJsZUNlbGwuc2V0VkFsaWduKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxlQ2Vs
bFdpZHRoOiAgICAgICAgICAgeyB0YWJsZUNlbGwuc2V0V2lkdGgoc3RyKTsgcmV0dXJuOyB9CiAg
ICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfRlJBTUVTRVQ6IHsKLSAgICAgIEhUTUxGcmFt
ZVNldEVsZW1lbnRJbXBsICZmcmFtZVNldCA9IHN0YXRpY19jYXN0PEhUTUxGcmFtZVNldEVsZW1l
bnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgY2FzZSBG
cmFtZVNldENvbHM6ICAgICAgICAgICAgeyBmcmFtZVNldC5zZXRDb2xzKHN0cik7IHJldHVybjsg
fQotICAgICAgY2FzZSBGcmFtZVNldFJvd3M6ICAgICAgICAgICAgeyBmcmFtZVNldC5zZXRSb3dz
KHN0cik7IHJldHVybjsgfQotICAgICAgfQorfQorCit2b2lkIEhUTUxFbGVtZW50OjpmcmFtZVNl
dFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBj
b25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxGcmFtZVNldEVsZW1lbnRJbXBs
JiBmcmFtZVNldCA9ICpzdGF0aWNfY2FzdDxIVE1MRnJhbWVTZXRFbGVtZW50SW1wbCo+KGltcGwo
KSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNlIEZyYW1lU2V0Q29sczogICAg
ICAgICAgICB7IGZyYW1lU2V0LnNldENvbHMoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2Ug
RnJhbWVTZXRSb3dzOiAgICAgICAgICAgIHsgZnJhbWVTZXQuc2V0Um93cyhzdHIpOyByZXR1cm47
IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9GUkFNRTogewotICAgICAgSFRNTEZy
YW1lRWxlbWVudEltcGwgJmZyYW1lRWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxGcmFtZUVsZW1l
bnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgIC8vIHJl
YWQtb25seTogRnJhbWVDb250ZW50RG9jdW1lbnQ6Ci0gICAgICBjYXNlIEZyYW1lRnJhbWVCb3Jk
ZXI6ICAgICB7IGZyYW1lRWxlbWVudC5zZXRGcmFtZUJvcmRlcihzdHIpOyByZXR1cm47IH0KLSAg
ICAgIGNhc2UgRnJhbWVMb25nRGVzYzogICAgICAgIHsgZnJhbWVFbGVtZW50LnNldExvbmdEZXNj
KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBGcmFtZU1hcmdpbkhlaWdodDogICAgeyBmcmFt
ZUVsZW1lbnQuc2V0TWFyZ2luSGVpZ2h0KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBGcmFt
ZU1hcmdpbldpZHRoOiAgICAgeyBmcmFtZUVsZW1lbnQuc2V0TWFyZ2luV2lkdGgoc3RyKTsgcmV0
dXJuOyB9Ci0gICAgICBjYXNlIEZyYW1lTmFtZTogICAgICAgICAgICB7IGZyYW1lRWxlbWVudC5z
ZXROYW1lKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBGcmFtZU5vUmVzaXplOiAgICAgICAg
eyBmcmFtZUVsZW1lbnQuc2V0Tm9SZXNpemUodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJu
OyB9Ci0gICAgICBjYXNlIEZyYW1lU2Nyb2xsaW5nOiAgICAgICB7IGZyYW1lRWxlbWVudC5zZXRT
Y3JvbGxpbmcoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEZyYW1lU3JjOiAgICAgICAgICAg
ICB7IGZyYW1lRWxlbWVudC5zZXRTcmMoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEZyYW1l
TG9jYXRpb246ICAgICAgICB7IGZyYW1lRWxlbWVudC5zZXRMb2NhdGlvbihzdHIpOyByZXR1cm47
IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6ZnJhbWVTZXR0ZXIoRXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJp
bmcmIHN0cikKK3sKKyAgICBIVE1MRnJhbWVFbGVtZW50SW1wbCYgZnJhbWVFbGVtZW50ID0gKnN0
YXRpY19jYXN0PEhUTUxGcmFtZUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRv
a2VuKSB7CisgICAgICAgIC8vIHJlYWQtb25seTogRnJhbWVDb250ZW50RG9jdW1lbnQ6CisgICAg
ICAgIGNhc2UgRnJhbWVGcmFtZUJvcmRlcjogICAgIHsgZnJhbWVFbGVtZW50LnNldEZyYW1lQm9y
ZGVyKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEZyYW1lTG9uZ0Rlc2M6ICAgICAgICB7
IGZyYW1lRWxlbWVudC5zZXRMb25nRGVzYyhzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBG
cmFtZU1hcmdpbkhlaWdodDogICAgeyBmcmFtZUVsZW1lbnQuc2V0TWFyZ2luSGVpZ2h0KHN0cik7
IHJldHVybjsgfQorICAgICAgICBjYXNlIEZyYW1lTWFyZ2luV2lkdGg6ICAgICB7IGZyYW1lRWxl
bWVudC5zZXRNYXJnaW5XaWR0aChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBGcmFtZU5h
bWU6ICAgICAgICAgICAgeyBmcmFtZUVsZW1lbnQuc2V0TmFtZShzdHIpOyByZXR1cm47IH0KKyAg
ICAgICAgY2FzZSBGcmFtZU5vUmVzaXplOiAgICAgICAgeyBmcmFtZUVsZW1lbnQuc2V0Tm9SZXNp
emUodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgRnJhbWVT
Y3JvbGxpbmc6ICAgICAgIHsgZnJhbWVFbGVtZW50LnNldFNjcm9sbGluZyhzdHIpOyByZXR1cm47
IH0KKyAgICAgICAgY2FzZSBGcmFtZVNyYzogICAgICAgICAgICAgeyBmcmFtZUVsZW1lbnQuc2V0
U3JjKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEZyYW1lTG9jYXRpb246ICAgICAgICB7
IGZyYW1lRWxlbWVudC5zZXRMb2NhdGlvbihzdHIpOyByZXR1cm47IH0KICAgICB9Ci0gICAgYnJl
YWs7Ci0gICAgY2FzZSBJRF9JRlJBTUU6IHsKLSAgICAgIEhUTUxJRnJhbWVFbGVtZW50SW1wbCAm
aUZyYW1lID0gc3RhdGljX2Nhc3Q8SFRNTElGcmFtZUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwot
ICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgY2FzZSBJRnJhbWVBbGlnbjogICAgICAgICAg
IHsgaUZyYW1lLnNldEFsaWduKHN0cik7IHJldHVybjsgfQotICAgICAgLy8gcmVhZC1vbmx5OiBJ
RnJhbWVDb250ZW50RG9jdW1lbnQKLSAgICAgIGNhc2UgSUZyYW1lRnJhbWVCb3JkZXI6ICAgICB7
IGlGcmFtZS5zZXRGcmFtZUJvcmRlcihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSUZyYW1l
SGVpZ2h0OiAgICAgICAgICB7IGlGcmFtZS5zZXRIZWlnaHQoc3RyKTsgcmV0dXJuOyB9Ci0gICAg
ICBjYXNlIElGcmFtZUxvbmdEZXNjOiAgICAgICAgeyBpRnJhbWUuc2V0TG9uZ0Rlc2Moc3RyKTsg
cmV0dXJuOyB9Ci0gICAgICBjYXNlIElGcmFtZU1hcmdpbkhlaWdodDogICAgeyBpRnJhbWUuc2V0
TWFyZ2luSGVpZ2h0KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBJRnJhbWVNYXJnaW5XaWR0
aDogICAgIHsgaUZyYW1lLnNldE1hcmdpbldpZHRoKHN0cik7IHJldHVybjsgfQotICAgICAgY2Fz
ZSBJRnJhbWVOYW1lOiAgICAgICAgICAgIHsgaUZyYW1lLnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9
Ci0gICAgICBjYXNlIElGcmFtZVNjcm9sbGluZzogICAgICAgeyBpRnJhbWUuc2V0U2Nyb2xsaW5n
KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBJRnJhbWVTcmM6ICAgICAgICAgICAgIHsgaUZy
YW1lLnNldFNyYyhzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSUZyYW1lV2lkdGg6ICAgICAg
ICAgICB7IGlGcmFtZS5zZXRXaWR0aChzdHIpOyByZXR1cm47IH0KLSAgICAgIH0KLSAgICAgIGJy
ZWFrOworfQorCit2b2lkIEhUTUxFbGVtZW50OjppRnJhbWVTZXR0ZXIoRXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0
cikKK3sKKyAgICBIVE1MSUZyYW1lRWxlbWVudEltcGwmIGlGcmFtZSA9ICpzdGF0aWNfY2FzdDxI
VE1MSUZyYW1lRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAg
ICAgICAgY2FzZSBJRnJhbWVBbGlnbjogICAgICAgICAgIHsgaUZyYW1lLnNldEFsaWduKHN0cik7
IHJldHVybjsgfQorICAgICAgICAvLyByZWFkLW9ubHk6IElGcmFtZUNvbnRlbnREb2N1bWVudAor
ICAgICAgICBjYXNlIElGcmFtZUZyYW1lQm9yZGVyOiAgICAgeyBpRnJhbWUuc2V0RnJhbWVCb3Jk
ZXIoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgSUZyYW1lSGVpZ2h0OiAgICAgICAgICB7
IGlGcmFtZS5zZXRIZWlnaHQoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgSUZyYW1lTG9u
Z0Rlc2M6ICAgICAgICB7IGlGcmFtZS5zZXRMb25nRGVzYyhzdHIpOyByZXR1cm47IH0KKyAgICAg
ICAgY2FzZSBJRnJhbWVNYXJnaW5IZWlnaHQ6ICAgIHsgaUZyYW1lLnNldE1hcmdpbkhlaWdodChz
dHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJRnJhbWVNYXJnaW5XaWR0aDogICAgIHsgaUZy
YW1lLnNldE1hcmdpbldpZHRoKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIElGcmFtZU5h
bWU6ICAgICAgICAgICAgeyBpRnJhbWUuc2V0TmFtZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAg
Y2FzZSBJRnJhbWVTY3JvbGxpbmc6ICAgICAgIHsgaUZyYW1lLnNldFNjcm9sbGluZyhzdHIpOyBy
ZXR1cm47IH0KKyAgICAgICAgY2FzZSBJRnJhbWVTcmM6ICAgICAgICAgICAgIHsgaUZyYW1lLnNl
dFNyYyhzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJRnJhbWVXaWR0aDogICAgICAgICAg
IHsgaUZyYW1lLnNldFdpZHRoKHN0cik7IHJldHVybjsgfQogICAgIH0KLSAgfQorfQogCi0gIC8v
IGdlbmVyaWMgcHJvcGVydGllcwotICBzd2l0Y2ggKHRva2VuKSB7Ci0gIGNhc2UgRWxlbWVudElk
OgotICAgIGVsZW1lbnQuc2V0SWQoc3RyKTsKLSAgICByZXR1cm47Ci0gIGNhc2UgRWxlbWVudFRp
dGxlOgotICAgIGVsZW1lbnQuc2V0VGl0bGUoc3RyKTsKLSAgICByZXR1cm47Ci0gIGNhc2UgRWxl
bWVudExhbmc6Ci0gICAgZWxlbWVudC5zZXRMYW5nKHN0cik7Ci0gICAgcmV0dXJuOwotICBjYXNl
IEVsZW1lbnREaXI6Ci0gICAgZWxlbWVudC5zZXREaXIoc3RyKTsKLSAgICByZXR1cm47Ci0gIGNh
c2UgRWxlbWVudENsYXNzTmFtZToKLSAgICBlbGVtZW50LnNldENsYXNzTmFtZShzdHIpOwotICAg
IHJldHVybjsKLSAgY2FzZSBFbGVtZW50SW5uZXJIVE1MOgotICAgIGVsZW1lbnQuc2V0SW5uZXJI
VE1MKHN0ciwgZXhjZXB0aW9uKTsKLSAgICByZXR1cm47Ci0gIGNhc2UgRWxlbWVudElubmVyVGV4
dDoKLSAgICBlbGVtZW50LnNldElubmVyVGV4dChzdHIsIGV4Y2VwdGlvbik7Ci0gICAgcmV0dXJu
OwotICBjYXNlIEVsZW1lbnRPdXRlckhUTUw6Ci0gICAgZWxlbWVudC5zZXRPdXRlckhUTUwoc3Ry
LCBleGNlcHRpb24pOwotICAgIHJldHVybjsKLSAgY2FzZSBFbGVtZW50T3V0ZXJUZXh0OgotICAg
IGVsZW1lbnQuc2V0T3V0ZXJUZXh0KHN0ciwgZXhjZXB0aW9uKTsKLSAgICByZXR1cm47Ci0gIGNh
c2UgRWxlbWVudENvbnRlbnRFZGl0YWJsZToKLSAgICBlbGVtZW50LnNldENvbnRlbnRFZGl0YWJs
ZShzdHIpOwotICAgIHJldHVybjsKLSAgZGVmYXVsdDoKLSAgICBrZFdhcm5pbmcoKSA8PCAiS0pT
OjpIVE1MRWxlbWVudDo6cHV0VmFsdWUgdW5oYW5kbGVkIHRva2VuICIgPDwgdG9rZW4gPDwgIiB0
aGlzVGFnPSIgPDwgZWxlbWVudC50YWdOYW1lKCkuc3RyaW5nKCkgPDwgIiBzdHI9IiA8PCBzdHIu
c3RyaW5nKCkgPDwgZW5kbDsKLSAgfQordm9pZCBIVE1MRWxlbWVudDo6bWFycXVlZVNldHRlcihF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006
OkRPTVN0cmluZyYgc3RyKQoreworICAgIC8vIEZJWE1FOiBGaW5kIG91dCB3aGF0IFdpbklFIHN1
cHBvcnRzIGFuZCBpbXBsZW1lbnQgaXQuCit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OnB1dFZhbHVl
KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGludCkKK3sK
KyAgICBET01FeGNlcHRpb25UcmFuc2xhdG9yIGV4Y2VwdGlvbihleGVjKTsKKyAgICBET006OkRP
TVN0cmluZyBzdHIgPSB2YWx1ZS5pc0EoTnVsbFR5cGUpID8gRE9NOjpET01TdHJpbmcoKSA6IHZh
bHVlLnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpOworIAorICAgIC8vIENoZWNrIG91ciBzZXQgb2Yg
Z2VuZXJpYyBwcm9wZXJ0aWVzIGZpcnN0LgorICAgIEhUTUxFbGVtZW50SW1wbCAmZWxlbWVudCA9
ICpzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwgKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRv
a2VuKSB7CisgICAgICAgIGNhc2UgRWxlbWVudElkOgorICAgICAgICAgICAgZWxlbWVudC5zZXRJ
ZChzdHIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIEVsZW1lbnRUaXRsZToK
KyAgICAgICAgICAgIGVsZW1lbnQuc2V0VGl0bGUoc3RyKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgY2FzZSBFbGVtZW50TGFuZzoKKyAgICAgICAgICAgIGVsZW1lbnQuc2V0TGFuZyhz
dHIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIEVsZW1lbnREaXI6CisgICAg
ICAgICAgICBlbGVtZW50LnNldERpcihzdHIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICBjYXNlIEVsZW1lbnRDbGFzc05hbWU6CisgICAgICAgICAgICBlbGVtZW50LnNldENsYXNzTmFt
ZShzdHIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIEVsZW1lbnRJbm5lckhU
TUw6CisgICAgICAgICAgICBlbGVtZW50LnNldElubmVySFRNTChzdHIsIGV4Y2VwdGlvbik7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgRWxlbWVudElubmVyVGV4dDoKKyAgICAg
ICAgICAgIGVsZW1lbnQuc2V0SW5uZXJUZXh0KHN0ciwgZXhjZXB0aW9uKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgY2FzZSBFbGVtZW50T3V0ZXJIVE1MOgorICAgICAgICAgICAgZWxl
bWVudC5zZXRPdXRlckhUTUwoc3RyLCBleGNlcHRpb24pOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICBjYXNlIEVsZW1lbnRPdXRlclRleHQ6CisgICAgICAgICAgICBlbGVtZW50LnNldE91
dGVyVGV4dChzdHIsIGV4Y2VwdGlvbik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNh
c2UgRWxlbWVudENvbnRlbnRFZGl0YWJsZToKKyAgICAgICAgICAgIGVsZW1lbnQuc2V0Q29udGVu
dEVkaXRhYmxlKHN0cik7CisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gTm93
IGNoZWNrIGZvciBwcm9wZXJ0aWVzIHRoYXQgYXBwbHkgdG8gYSBzcGVjaWZpYyBlbGVtZW50IHR5
cGUuCisgICAgY29uc3QgR2V0U2V0SW5mbyogaW5mbyA9IGdldFNldEluZm8oKTsKKyAgICBpZiAo
aW5mbyAmJiBpbmZvLT5tX3NldHRlcikKKyAgICAgICAgcmV0dXJuICh0aGlzLT4qKGluZm8tPm1f
c2V0dGVyKSkoZXhlYywgdG9rZW4sIHZhbHVlLCBzdHIpOyAgCiB9CiAKIEhUTUxFbGVtZW50SW1w
bCAqdG9IVE1MRWxlbWVudChWYWx1ZUltcCAqdmFsKQpAQCAtMzAzOCwyMyArMzIwMSwxNyBAQCBI
VE1MRWxlbWVudEltcGwgKnRvSFRNTEVsZW1lbnQoVmFsdWVJbXAgCiAKIEhUTUxUYWJsZUNhcHRp
b25FbGVtZW50SW1wbCAqdG9IVE1MVGFibGVDYXB0aW9uRWxlbWVudChWYWx1ZUltcCAqdmFsKQog
ewotICAgIGlmIChIVE1MRWxlbWVudEltcGwgKmUgPSB0b0hUTUxFbGVtZW50KHZhbCkpCi0gICAg
ICAgIHN3aXRjaCAoZS0+aWQoKSkgewotICAgICAgICAgICAgY2FzZSBJRF9DQVBUSU9OOgotICAg
ICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MVGFibGVDYXB0aW9uRWxlbWVudElt
cGwgKj4oZSk7Ci0gICAgICAgIH0KKyAgICBIVE1MRWxlbWVudEltcGwgKmUgPSB0b0hUTUxFbGVt
ZW50KHZhbCk7CisgICAgaWYgKGUgJiYgZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmNhcHRpb24o
KSkpCisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MVGFibGVDYXB0aW9uRWxlbWVudElt
cGwgKj4oZSk7CiAgICAgcmV0dXJuIDA7CiB9CiAKIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1w
bCAqdG9IVE1MVGFibGVTZWN0aW9uRWxlbWVudChWYWx1ZUltcCAqdmFsKQogewotICAgIGlmIChI
VE1MRWxlbWVudEltcGwgKmUgPSB0b0hUTUxFbGVtZW50KHZhbCkpCi0gICAgICAgIHN3aXRjaCAo
ZS0+aWQoKSkgewotICAgICAgICAgICAgY2FzZSBJRF9USEVBRDoKLSAgICAgICAgICAgIGNhc2Ug
SURfVEJPRFk6Ci0gICAgICAgICAgICBjYXNlIElEX1RGT09UOgotICAgICAgICAgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGwgKj4oZSk7Ci0gICAg
ICAgIH0KKyAgICBIVE1MRWxlbWVudEltcGwgKmUgPSB0b0hUTUxFbGVtZW50KHZhbCk7CisgICAg
aWYgKGUgJiYgKGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0aGVhZCgpKSB8fCBlLT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6dGJvZHkoKSkgfHwgZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRmb290
KCkpKSkKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50
SW1wbCAqPihlKTsKICAgICByZXR1cm4gMDsKIH0KIApAQCAtMzEwMywxMCArMzI2MCwxMCBAQCBW
YWx1ZSBLSlM6OkhUTUxDb2xsZWN0aW9uOjp0cnlHZXQoRXhlY1N0CiAgIGVsc2UgaWYgKHByb3Bl
cnR5TmFtZSA9PSAic2VsZWN0ZWRJbmRleCIpIHsKICAgICAvLyBOT04tU1RBTkRBUkQgb3B0aW9u
cy5zZWxlY3RlZEluZGV4CiAgICAgTm9kZUltcGwgKm9wdGlvbiA9IGNvbGxlY3Rpb24uaXRlbSgw
KTsKLSAgICBpZiAob3B0aW9uLT5pZCgpID09IElEX09QVElPTikgeworICAgIGlmIChvcHRpb24t
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvcHRpb24oKSkpIHsKICAgICAgIE5vZGVJbXBsICpzZWxl
Y3QgPSBvcHRpb247CiAgICAgICB3aGlsZSAoKHNlbGVjdCA9IHNlbGVjdC0+cGFyZW50Tm9kZSgp
KSkKLSAgICAgICAgaWYgKHNlbGVjdC0+aWQoKSA9PSBJRF9TRUxFQ1QpCisgICAgICAgIGlmIChz
ZWxlY3QtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzZWxlY3QoKSkpCiAJICByZXR1cm4gTnVtYmVy
KHN0YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50SW1wbCAqPihzZWxlY3QpLT5zZWxlY3RlZElu
ZGV4KCkpOwogICAgIH0KICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CkBAIC0zMjk0LDcgKzM0NTEs
NyBAQCB2b2lkIEtKUzo6SFRNTFNlbGVjdENvbGxlY3Rpb246OnRyeVB1dChFCiAKICAgLy8gaXMg
diBhbiBvcHRpb24gZWxlbWVudCA/CiAgIE5vZGVJbXBsICpvcHRpb24gPSB0b05vZGUodmFsdWUp
OwotICBpZiAoIW9wdGlvbiB8fCBvcHRpb24tPmlkKCkgIT0gSURfT1BUSU9OKQorICBpZiAoIW9w
dGlvbiB8fCAhb3B0aW9uLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpKQogICAgIHJl
dHVybjsKIAogICBpbnQgZXhjZXB0aW9uID0gMDsKSW5kZXg6IGtodG1sL2VjbWEva2pzX2h0bWwu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lY21hL2tqc19o
dG1sLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNDQKZGlmZiAtdSAtcCAtcjEuNDQga2h0bWwv
ZWNtYS9ranNfaHRtbC5oCi0tLSBraHRtbC9lY21hL2tqc19odG1sLmgJMTIgTWF5IDIwMDUgMTc6
MTE6MjEgLTAwMDAJMS40NAorKysga2h0bWwvZWNtYS9ranNfaHRtbC5oCTE2IEp1biAyMDA1IDIz
OjAyOjA4IC0wMDAwCkBAIC04NSw2ICs4NSwxMzEgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICBj
YXB0aW9uX2luZm8sIGNvbF9pbmZvLCB0YWJsZXNlY3Rpb25faW5mbywgdHJfaW5mbywKICAgICAg
IHRhYmxlY2VsbF9pbmZvLCBmcmFtZVNldF9pbmZvLCBmcmFtZV9pbmZvLCBpRnJhbWVfaW5mbywg
bWFycXVlZV9pbmZvOwogCisgICAgLy8gRklYTUU6IE1pZ2h0IG1ha2Ugc2Vuc2UgdG8gY29tYmlu
ZSB0aGlzIHdpdGggQ2xhc3NJbmZvIHNvbWUgZGF5LgorICAgIHR5cGVkZWYgVmFsdWUgKEhUTUxF
bGVtZW50OjoqR2V0dGVyRnVuY3Rpb24pKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25z
dDsKKyAgICB0eXBlZGVmIHZvaWQgKEhUTUxFbGVtZW50OjoqU2V0dGVyRnVuY3Rpb24pKEV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9N
U3RyaW5nJiBzdHIpOworICAgIHN0cnVjdCBHZXRTZXRJbmZvIHsgR2V0dGVyRnVuY3Rpb24gbV9n
ZXR0ZXI7IFNldHRlckZ1bmN0aW9uIG1fc2V0dGVyOyB9OworICAgIGNvbnN0IEdldFNldEluZm8q
IGdldFNldEluZm8oKSBjb25zdDsKKyAgICBzdGF0aWMgY29uc3QgR2V0U2V0SW5mbyBodG1sX2dl
dHNldCwgaGVhZF9nZXRzZXQsIGxpbmtfZ2V0c2V0LCB0aXRsZV9nZXRzZXQsCisgICAgICBtZXRh
X2dldHNldCwgYmFzZV9nZXRzZXQsIGlzSW5kZXhfZ2V0c2V0LCBzdHlsZV9nZXRzZXQsIGJvZHlf
Z2V0c2V0LCBmb3JtX2dldHNldCwKKyAgICAgIHNlbGVjdF9nZXRzZXQsIG9wdEdyb3VwX2dldHNl
dCwgb3B0aW9uX2dldHNldCwgaW5wdXRfZ2V0c2V0LCB0ZXh0QXJlYV9nZXRzZXQsCisgICAgICBi
dXR0b25fZ2V0c2V0LCBsYWJlbF9nZXRzZXQsIGZpZWxkU2V0X2dldHNldCwgbGVnZW5kX2dldHNl
dCwgdWxfZ2V0c2V0LCBvbF9nZXRzZXQsCisgICAgICBkbF9nZXRzZXQsIGRpcl9nZXRzZXQsIG1l
bnVfZ2V0c2V0LCBsaV9nZXRzZXQsIGRpdl9nZXRzZXQsIHBfZ2V0c2V0LCBoZWFkaW5nX2dldHNl
dCwKKyAgICAgIGJsb2NrUXVvdGVfZ2V0c2V0LCBxX2dldHNldCwgcHJlX2dldHNldCwgYnJfZ2V0
c2V0LCBiYXNlRm9udF9nZXRzZXQsIGZvbnRfZ2V0c2V0LAorICAgICAgaHJfZ2V0c2V0LCBtb2Rf
Z2V0c2V0LCBhX2dldHNldCwgY2FudmFzX2dldHNldCwgaW1nX2dldHNldCwgb2JqZWN0X2dldHNl
dCwgcGFyYW1fZ2V0c2V0LAorICAgICAgYXBwbGV0X2dldHNldCwgbWFwX2dldHNldCwgYXJlYV9n
ZXRzZXQsIHNjcmlwdF9nZXRzZXQsIHRhYmxlX2dldHNldCwKKyAgICAgIGNhcHRpb25fZ2V0c2V0
LCBjb2xfZ2V0c2V0LCB0YWJsZXNlY3Rpb25fZ2V0c2V0LCB0cl9nZXRzZXQsCisgICAgICB0YWJs
ZWNlbGxfZ2V0c2V0LCBmcmFtZVNldF9nZXRzZXQsIGZyYW1lX2dldHNldCwgaUZyYW1lX2dldHNl
dCwgbWFycXVlZV9nZXRzZXQ7CisKKyAgICBWYWx1ZSBodG1sR2V0dGVyKEV4ZWNTdGF0ZSogZXhl
YywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBodG1sU2V0dGVyKEV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBz
dHIpOworICAgIFZhbHVlIGhlYWRHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNv
bnN0OworICAgIHZvaWQgIGhlYWRTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNv
bnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUg
bGlua0dldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAg
bGlua1NldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVl
LCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSB0aXRsZUdldHRlcihFeGVj
U3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgdGl0bGVTZXR0ZXIoRXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpE
T01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgbWV0YUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGlu
dCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgbWV0YVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsK
KyAgICBWYWx1ZSBiYXNlR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsK
KyAgICB2b2lkICBiYXNlU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBW
YWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIGlzSW5k
ZXhHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGlz
SW5kZXhTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1
ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgc3R5bGVHZXR0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIHN0eWxlU2V0dGVyKEV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6
RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIGJvZHlHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBp
bnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGJvZHlTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7
CisgICAgVmFsdWUgZm9ybUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7
CisgICAgdm9pZCAgZm9ybVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3Qg
VmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBzZWxl
Y3RHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIHNl
bGVjdFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVl
LCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBvcHRHcm91cEdldHRlcihF
eGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgb3B0R3JvdXBTZXR0
ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3Qg
RE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgb3B0aW9uR2V0dGVyKEV4ZWNTdGF0ZSog
ZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBvcHRpb25TZXR0ZXIoRXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJp
bmcmIHN0cik7CisgICAgVmFsdWUgaW5wdXRHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0OworICAgIHZvaWQgIGlucHV0U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAg
IFZhbHVlIHRleHRBcmVhR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsK
KyAgICB2b2lkICB0ZXh0QXJlYVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29u
c3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBi
dXR0b25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQg
IGJ1dHRvblNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZh
bHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBsYWJlbEdldHRlcihF
eGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgbGFiZWxTZXR0ZXIo
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9N
OjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgZmllbGRTZXRHZXR0ZXIoRXhlY1N0YXRlKiBl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGZpZWxkU2V0U2V0dGVyKEV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3Ry
aW5nJiBzdHIpOworICAgIFZhbHVlIGxlZ2VuZEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0
b2tlbikgY29uc3Q7CisgICAgdm9pZCAgbGVnZW5kU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOwor
ICAgIFZhbHVlIHVMaXN0R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsK
KyAgICB2b2lkICB1TGlzdFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3Qg
VmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBvTGlz
dEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgb0xp
c3RTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwg
Y29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgZExpc3RHZXR0ZXIoRXhlY1N0
YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGRMaXN0U2V0dGVyKEV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9N
U3RyaW5nJiBzdHIpOworICAgIFZhbHVlIGRpckdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0
b2tlbikgY29uc3Q7CisgICAgdm9pZCAgZGlyU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAg
IFZhbHVlIG1lbnVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAg
IHZvaWQgIG1lbnVTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVl
JiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgbGlHZXR0ZXIo
RXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGxpU2V0dGVyKEV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6
RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIGRpdkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGlu
dCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgZGl2U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOwor
ICAgIFZhbHVlIHBhcmFncmFwaEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29u
c3Q7CisgICAgdm9pZCAgcGFyYWdyYXBoU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
LCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZh
bHVlIGhlYWRpbmdHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAg
IHZvaWQgIGhlYWRpbmdTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZh
bHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgYmxvY2tR
dW90ZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAg
YmxvY2tRdW90ZVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUm
IHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBxdW90ZUdldHRl
cihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgcXVvdGVTZXR0
ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3Qg
RE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgcHJlR2V0dGVyKEV4ZWNTdGF0ZSogZXhl
YywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBwcmVTZXR0ZXIoRXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0
cik7CisgICAgVmFsdWUgYnJHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0
OworICAgIHZvaWQgIGJyU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBW
YWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIGJhc2VG
b250R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBi
YXNlRm9udFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZh
bHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBmb250R2V0dGVyKEV4
ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBmb250U2V0dGVyKEV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6
RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIGhyR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50
IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBoclNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAg
ICBWYWx1ZSBtb2RHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAg
IHZvaWQgIG1vZFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUm
IHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBhbmNob3JHZXR0
ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGFuY2hvclNl
dHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25z
dCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBpbWFnZUdldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgaW1hZ2VTZXR0ZXIoRXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJp
bmcmIHN0cik7CisgICAgVmFsdWUgb2JqZWN0R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRv
a2VuKSBjb25zdDsKKyAgICB2b2lkICBvYmplY3RTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7Cisg
ICAgVmFsdWUgcGFyYW1HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Owor
ICAgIHZvaWQgIHBhcmFtU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBW
YWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIGFwcGxl
dEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgYXBw
bGV0U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUs
IGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIG1hcEdldHRlcihFeGVjU3Rh
dGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgbWFwU2V0dGVyKEV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3Ry
aW5nJiBzdHIpOworICAgIFZhbHVlIGFyZWFHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0OworICAgIHZvaWQgIGFyZWFTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAg
VmFsdWUgc2NyaXB0R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAg
ICB2b2lkICBzY3JpcHRTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZh
bHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgdGFibGVH
ZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIHRhYmxl
U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNv
bnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIHRhYmxlQ2FwdGlvbkdldHRlcihF
eGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgdGFibGVDYXB0aW9u
U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNv
bnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIHRhYmxlQ29sR2V0dGVyKEV4ZWNT
dGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICB0YWJsZUNvbFNldHRlcihF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006
OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSB0YWJsZVNlY3Rpb25HZXR0ZXIoRXhlY1N0YXRl
KiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIHRhYmxlU2VjdGlvblNldHRlcihF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006
OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSB0YWJsZVJvd0dldHRlcihFeGVjU3RhdGUqIGV4
ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgdGFibGVSb3dTZXR0ZXIoRXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJp
bmcmIHN0cik7CisgICAgVmFsdWUgdGFibGVDZWxsR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50
IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICB0YWJsZUNlbGxTZXR0ZXIoRXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0
cik7CisgICAgVmFsdWUgZnJhbWVTZXRHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4p
IGNvbnN0OworICAgIHZvaWQgIGZyYW1lU2V0U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAg
IFZhbHVlIGZyYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAg
ICB2b2lkICBmcmFtZVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFs
dWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBpRnJhbWVH
ZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGlGcmFt
ZVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBj
b25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBtYXJxdWVlR2V0dGVyKEV4ZWNT
dGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBtYXJxdWVlU2V0dGVyKEV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6
RE9NU3RyaW5nJiBzdHIpOworCiAgICAgZW51bSB7IEh0bWxWZXJzaW9uLCBIZWFkUHJvZmlsZSwg
TGlua0hyZWYsIExpbmtSZWwsIExpbmtNZWRpYSwKICAgICAgICAgICAgTGlua0NoYXJzZXQsIExp
bmtEaXNhYmxlZCwgTGlua0hyZWZMYW5nLCBMaW5rUmV2LCBMaW5rVGFyZ2V0LCBMaW5rVHlwZSwK
ICAgICAgICAgICAgTGlua1NoZWV0LCBUaXRsZVRleHQsIE1ldGFOYW1lLCBNZXRhSHR0cEVxdWl2
LCBNZXRhQ29udGVudCwgTWV0YVNjaGVtZSwKSW5kZXg6IGtodG1sL2VjbWEva2pzX3dpbmRvdy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWNtYS9ranNf
d2luZG93LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNTkKZGlmZiAtdSAtcCAtcjEuMTU5
IGtodG1sL2VjbWEva2pzX3dpbmRvdy5jcHAKLS0tIGtodG1sL2VjbWEva2pzX3dpbmRvdy5jcHAJ
MTQgSnVuIDIwMDUgMDA6Mjk6NDAgLTAwMDAJMS4xNTkKKysrIGtodG1sL2VjbWEva2pzX3dpbmRv
dy5jcHAJMTYgSnVuIDIwMDUgMjM6MDI6MTEgLTAwMDAKQEAgLTY4LDcgKzY4LDYgQEAKICNpbmNs
dWRlICJodG1sL2h0bWxfZG9jdW1lbnRpbXBsLmgiCiAjaW5jbHVkZSAiY3NzL2Nzc19ydWxlaW1w
bC5oIgogI2luY2x1ZGUgImNzcy9jc3Nfc3R5bGVzaGVldGltcGwuaCIKLSNpbmNsdWRlICJtaXNj
L2h0bWx0YWdzLmgiCiAKIC8vIE11c3QgaW5jbHVkZSA8Y21hdGg+IGluc3RlYWQgb2YgPG1hdGgu
aD4gYmVjYXVzZSBvZiBhIGJ1ZyBpbiB0aGUKIC8vIGdjYyAzLjMgbGlicmFyeSB2ZXJzaW9uIG9m
IDxtYXRoLmg+IHdoZXJlIGlmIHlvdSBpbmNsdWRlIGJvdGgKSW5kZXg6IGtodG1sL2h0bWwvZHRk
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9odG1sL2R0
ZC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzgKZGlmZiAtdSAtcCAtcjEuMzgga2h0bWwv
aHRtbC9kdGQuY3BwCi0tLSBraHRtbC9odG1sL2R0ZC5jcHAJMTIgQXByIDIwMDUgMjI6NDk6NDEg
LTAwMDAJMS4zOAorKysga2h0bWwvaHRtbC9kdGQuY3BwCTE2IEp1biAyMDA1IDIzOjAyOjExIC0w
MDAwCkBAIC00NCw2ICs0NCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBET007CiAvLyA4IHRhYmxlCiAv
LyA5IGJvZHkgZnJhbWVzZXQKIC8vIDEwIGh0bWwKKy8qCiBjb25zdCB1bnNpZ25lZCBzaG9ydCBE
T006OnRhZ1ByaW9yaXR5QXJyYXlbXSA9IHsKICAgICAwLCAvLyAwCiAgICAgMSwgLy8gSURfQSA9
PSAxCkBAIC01Nyw4ICs1OCw2IEBAIGNvbnN0IHVuc2lnbmVkIHNob3J0IERPTTo6dGFnUHJpb3Jp
dHlBcnIKICAgICAwLCAvLyBJRF9CQVNFRk9OVAogICAgIDEsIC8vIElEX0JETwogICAgIDEsIC8v
IElEX0JJRwotICAgIDUsIC8vIElEX0JMT0NLUVVPVEUKLSAgIDEwLCAvLyBJRF9CT0RZCiAgICAg
MCwgLy8gSURfQlIKICAgICAxLCAvLyBJRF9CVVRUT04KICAgICAwLCAvLyBJRF9DQU5WQVMKQEAg
LTcyLDcgKzcxLDYgQEAgY29uc3QgdW5zaWduZWQgc2hvcnQgRE9NOjp0YWdQcmlvcml0eUFycgog
ICAgIDEsIC8vIElEX0RFTAogICAgIDEsIC8vIElEX0RGTgogICAgIDUsIC8vIElEX0RJUgotICAg
IDUsIC8vIElEX0RJVgogICAgIDUsIC8vIElEX0RMCiAgICAgMywgLy8gSURfRFQKICAgICAxLCAv
LyBJRF9FTQpAQCAtODAsMTkgKzc4LDcgQEAgY29uc3QgdW5zaWduZWQgc2hvcnQgRE9NOjp0YWdQ
cmlvcml0eUFycgogICAgIDMsIC8vIElEX0ZJRUxEU0VUCiAgICAgMSwgLy8gSURfRk9OVAogICAg
IDMsIC8vIElEX0ZPUk0KLSAgICAwLCAvLyBJRF9GUkFNRQotICAgMTAsLy8gSURfRlJBTUVTRVQK
LSAgICA1LCAvLyBJRF9IMQotICAgIDUsIC8vIElEX0gyCi0gICAgNSwgLy8gSURfSDMKLSAgICA1
LCAvLyBJRF9INAotICAgIDUsIC8vIElEX0g1Ci0gICAgNSwgLy8gSURfSDYKLSAgIDEwLC8vIElE
X0hFQUQKLSAgICAwLCAvLyBJRF9IUgotICAgMTEsLy8gSURfSFRNTAogICAgIDEsIC8vIElEX0kK
LSAgICAxLCAvLyBJRF9JRlJBTUUKICAgICAwLCAvLyBJRF9JTUcKICAgICAwLCAvLyBJRF9JTlBV
VAogICAgIDEsIC8vIElEX0lOUwpAQCAtMTE3LDcgKzEwMyw2IEBAIGNvbnN0IHVuc2lnbmVkIHNo
b3J0IERPTTo6dGFnUHJpb3JpdHlBcnIKICAgICA1LCAvLyBJRF9PTAogICAgIDEsIC8vIElEX09Q
VEdST1VQCiAgICAgMiwgLy8gSURfT1BUSU9OCi0gICAgMywgLy8gSURfUAogICAgIDAsIC8vIElE
X1BBUkFNCiAgICAgNSwgLy8gSURfUExBSU5URVhUCiAgICAgNSwgLy8gSURfUFJFCkBAIC0xMjcs
NyArMTEyLDYgQEAgY29uc3QgdW5zaWduZWQgc2hvcnQgRE9NOjp0YWdQcmlvcml0eUFycgogICAg
IDEsIC8vIElEX1NDUklQVAogICAgIDYsIC8vIElEX1NFTEVDVAogICAgIDEsIC8vIElEX1NNQUxM
Ci0gICAgMSwgLy8gSURfU1BBTgogICAgIDEsIC8vIElEX1NUUklLRQogICAgIDEsIC8vIElEX1NU
Uk9ORwogICAgIDEsIC8vIElEX1NUWUxFCkBAIC0xNjQsOCArMTQ4LDYgQEAgY29uc3QgdGFnU3Rh
dHVzIERPTTo6ZW5kVGFnQXJyYXlbXSA9IHsKICAgICBGT1JCSURERU4sIC8vIElEX0JBU0VGT05U
CiAgICAgUkVRVUlSRUQsICAvLyBJRF9CRE8KICAgICBSRVFVSVJFRCwgIC8vIElEX0JJRwotICAg
IFJFUVVJUkVELCAgLy8gSURfQkxPQ0tRVU9URQotICAgIFJFUVVJUkVELCAgLy8gSURfQk9EWQog
ICAgIEZPUkJJRERFTiwgLy8gSURfQlIKICAgICBSRVFVSVJFRCwgIC8vIElEX0JVVFRPTgogICAg
IEZPUkJJRERFTiwgLy8gSURfQ0FOVkFTCkBAIC0xNzksNyArMTYxLDYgQEAgY29uc3QgdGFnU3Rh
dHVzIERPTTo6ZW5kVGFnQXJyYXlbXSA9IHsKICAgICBSRVFVSVJFRCwgIC8vIElEX0RFTAogICAg
IFJFUVVJUkVELCAgLy8gSURfREZOCiAgICAgUkVRVUlSRUQsICAvLyBJRF9ESVIKLSAgICBSRVFV
SVJFRCwgIC8vIElEX0RJVgogICAgIFJFUVVJUkVELCAgLy8gSURfREwKICAgICBPUFRJT05BTCwg
IC8vIElEX0RUCiAgICAgUkVRVUlSRUQsICAvLyBJRF9FTQpAQCAtMTg3LDE5ICsxNjgsOCBAQCBj
b25zdCB0YWdTdGF0dXMgRE9NOjplbmRUYWdBcnJheVtdID0gewogICAgIFJFUVVJUkVELCAgLy8g
SURfRklFTERTRVQKICAgICBSRVFVSVJFRCwgIC8vIElEX0ZPTlQKICAgICBSRVFVSVJFRCwgIC8v
IElEX0ZPUk0KLSAgICBGT1JCSURERU4sIC8vIElEX0ZSQU1FCiAgICAgUkVRVUlSRUQsICAvLyBJ
RF9GUkFNRVNFVAotICAgIFJFUVVJUkVELCAgLy8gSURfSDEKLSAgICBSRVFVSVJFRCwgIC8vIElE
X0gyCi0gICAgUkVRVUlSRUQsICAvLyBJRF9IMwotICAgIFJFUVVJUkVELCAgLy8gSURfSDQKLSAg
ICBSRVFVSVJFRCwgIC8vIElEX0g1Ci0gICAgUkVRVUlSRUQsICAvLyBJRF9INgotICAgIE9QVElP
TkFMLCAgLy8gSURfSEVBRAotICAgIEZPUkJJRERFTiwgLy8gSURfSFIKLSAgICBSRVFVSVJFRCwg
IC8vIElEX0hUTUwKLSAgICBSRVFVSVJFRCwgIC8vIElEX0kKLSAgICBSRVFVSVJFRCwgIC8vIElE
X0lGUkFNRQorICAgICAgUkVRVUlSRUQsICAvLyBJRF9JCiAgICAgRk9SQklEREVOLCAvLyBJRF9J
TUcKICAgICBGT1JCSURERU4sIC8vIElEX0lOUFVUCiAgICAgUkVRVUlSRUQsICAvLyBJRF9JTlMK
QEAgLTIyNCw3ICsxOTQsNiBAQCBjb25zdCB0YWdTdGF0dXMgRE9NOjplbmRUYWdBcnJheVtdID0g
ewogICAgIFJFUVVJUkVELCAgLy8gSURfT0wKICAgICBSRVFVSVJFRCwgIC8vIElEX09QVEdST1VQ
CiAgICAgT1BUSU9OQUwsICAvLyBJRF9PUFRJT04KLSAgICBPUFRJT05BTCwgIC8vIElEX1AKICAg
ICBGT1JCSURERU4sIC8vIElEX1BBUkFNCiAgICAgUkVRVUlSRUQsICAvLyBJRF9QTEFJTlRFWFQK
ICAgICBSRVFVSVJFRCwgIC8vIElEX1BSRQpAQCAtMjM0LDcgKzIwMyw2IEBAIGNvbnN0IHRhZ1N0
YXR1cyBET006OmVuZFRhZ0FycmF5W10gPSB7CiAgICAgUkVRVUlSRUQsICAvLyBJRF9TQ1JJUFQK
ICAgICBSRVFVSVJFRCwgIC8vIElEX1NFTEVDVAogICAgIFJFUVVJUkVELCAgLy8gSURfU01BTEwK
LSAgICBSRVFVSVJFRCwgIC8vIElEX1NQQU4KICAgICBSRVFVSVJFRCwgIC8vIElEX1NUUklLRQog
ICAgIFJFUVVJUkVELCAgLy8gSURfU1RST05HCiAgICAgUkVRVUlSRUQsICAvLyBJRF9TVFlMRQpA
QCAtMjU4LDYgKzIyNiw3IEBAIGNvbnN0IHRhZ1N0YXR1cyBET006OmVuZFRhZ0FycmF5W10gPSB7
CiAgICAgUkVRVUlSRUQgICAvLyBJRF9URVhUCiB9OwogCisqLwogCiBzdGF0aWMgY29uc3QgdXNo
b3J0IHRhZ19saXN0XzBbXSA9IHsKICAgICBJRF9URVhULApAQCAtNzY3LDIyMyArNzM2LDMgQEAg
Ym9vbCBET006OmNoZWNrQ2hpbGQodXNob3J0IHRhZ0lELCB1c2hvcgogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogfQotCi12b2lkIERPTTo6YWRkRm9yYmlkZGVuKGludCB0YWdJZCwgdXNo
b3J0ICpmb3JiaWRkZW5UYWdzKQotewotICAgIHN3aXRjaCh0YWdJZCkKLSAgICB7Ci0gICAgY2Fz
ZSBJRF9MQUJFTDoKLSAgICAgICAgZm9yYmlkZGVuVGFnc1tJRF9MQUJFTF0rKzsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBJRF9CVVRUT046Ci0gICAgICAgIGZvcmJpZGRlblRhZ3NbSURfQV0r
KzsKLSAgICAgICAgZm9yYmlkZGVuVGFnc1tJRF9JTlBVVF0rKzsKLSAgICAgICAgZm9yYmlkZGVu
VGFnc1tJRF9TRUxFQ1RdKys7Ci0gICAgICAgIGZvcmJpZGRlblRhZ3NbSURfVEVYVEFSRUFdKys7
Ci0gICAgICAgIGZvcmJpZGRlblRhZ3NbSURfTEFCRUxdKys7Ci0gICAgICAgIGZvcmJpZGRlblRh
Z3NbSURfQlVUVE9OXSsrOwotICAgICAgICBmb3JiaWRkZW5UYWdzW0lEX0ZPUk1dKys7Ci0gICAg
ICAgIGZvcmJpZGRlblRhZ3NbSURfSVNJTkRFWF0rKzsKLSAgICAgICAgZm9yYmlkZGVuVGFnc1tJ
RF9GSUVMRFNFVF0rKzsKLSAgICAgICAgZm9yYmlkZGVuVGFnc1tJRF9JRlJBTUVdKys7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotdm9p
ZCBET006OnJlbW92ZUZvcmJpZGRlbihpbnQgdGFnSWQsIHVzaG9ydCAqZm9yYmlkZGVuVGFncykK
LXsKLSAgICBzd2l0Y2godGFnSWQpCi0gICAgewotICAgIGNhc2UgSURfTEFCRUw6Ci0gICAgICAg
IGZvcmJpZGRlblRhZ3NbSURfTEFCRUxdLS07Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSURf
QlVUVE9OOgotICAgICAgICBmb3JiaWRkZW5UYWdzW0lEX0FdLS07Ci0gICAgICAgIGZvcmJpZGRl
blRhZ3NbSURfSU5QVVRdLS07Ci0gICAgICAgIGZvcmJpZGRlblRhZ3NbSURfU0VMRUNUXS0tOwot
ICAgICAgICBmb3JiaWRkZW5UYWdzW0lEX1RFWFRBUkVBXS0tOwotICAgICAgICBmb3JiaWRkZW5U
YWdzW0lEX0xBQkVMXS0tOwotICAgICAgICBmb3JiaWRkZW5UYWdzW0lEX0JVVFRPTl0tLTsKLSAg
ICAgICAgZm9yYmlkZGVuVGFnc1tJRF9GT1JNXS0tOwotICAgICAgICBmb3JiaWRkZW5UYWdzW0lE
X0lTSU5ERVhdLS07Ci0gICAgICAgIGZvcmJpZGRlblRhZ3NbSURfRklFTERTRVRdLS07Ci0gICAg
ICAgIGZvcmJpZGRlblRhZ3NbSURfSUZSQU1FXS0tOwotICAgICAgICBicmVhazsKLSAgICBkZWZh
dWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLQotI2lmIDAKLQotCi1zdHJ1Y3QgYXR0
cl9wcml2IHsKLSAgICBhdHRyX3ByaXYoKSB7IGlkID0gbGVuID0gMCwgdmFsID0gMDsgfQotICAg
IGF0dHJfcHJpdih1c2hvcnQgaSwgY29uc3QgUUNoYXIgKnYsIHVzaG9ydCBsKQotICAgIHsgaWQg
PWk7IGxlbiA9IGwsIHZhbCA9IHY7IH0KLSAgICB1c2hvcnQgaWQ7Ci0gICAgY29uc3QgUUNoYXIg
KnZhbDsKLSAgICB1c2hvcnQgbGVuOwotfTsKLQotRE9NU3RyaW5nIGZpbmRfYXR0cih1c2hvcnQg
aWQsIGNvbnN0IGF0dHJfcHJpdiAqYXR0cnMpCi17Ci0gICAgaW50IGkgPSAwOwotICAgIHdoaWxl
KGF0dHJzW2ldLmlkICE9IDApCi0gICAgewotICAgICAgICBpZihhdHRyc1tpXS5pZCA9PSBpZCkK
LSAgICAgICAgICAgIHJldHVybiBET01TdHJpbmcoYXR0cnNbaV0udmFsLCBhdHRyc1tpXS5sZW4p
OwotICAgICAgICBpKys7Ci0gICAgfQotICAgIHJldHVybiBET01TdHJpbmcoKTsKLX0KLQotc3Rh
dGljIGNvbnN0IFFDaGFyIHZhbHVlXzFfMCBbXSA9IHsgJ04nLCdPJywnTicsJ0UnIH07Ci0KLWF0
dHJfcHJpdiBhdHRyX2xpc3RfMVtdID0gewotICAgIGF0dHJfcHJpdihBVFRSX0NMRUFSLCB2YWx1
ZV8xXzAsIDQpCi19OwotCi1zdGF0aWMgY29uc3QgUUNoYXIgdmFsdWVfMl8wIFtdID0geyAnUics
J0UnLCdDJywnVCcgfTsKLQotYXR0cl9wcml2IGF0dHJfbGlzdF8yW10gPSB7Ci0gICAgYXR0cl9w
cml2KEFUVFJfU0hBUEUsIHZhbHVlXzJfMCwgNCkKLX07Ci0KLXN0YXRpYyBjb25zdCBRQ2hhciB2
YWx1ZV8zXzAgW10gPSB7ICdSJywnRScsJ0MnLCdUJyB9OwotCi1hdHRyX3ByaXYgYXR0cl9saXN0
XzNbXSA9IHsKLSAgICBhdHRyX3ByaXYoQVRUUl9TSEFQRSwgdmFsdWVfM18wLCA0KQotfTsKLQot
c3RhdGljIGNvbnN0IFFDaGFyIHZhbHVlXzRfMCBbXSA9IHsgJ0QnLCdBJywnVCcsJ0EnIH07Ci0K
LWF0dHJfcHJpdiBhdHRyX2xpc3RfNFtdID0gewotICAgIGF0dHJfcHJpdihBVFRSX1ZBTFVFVFlQ
RSwgdmFsdWVfNF8wLCA0KQotfTsKLQotc3RhdGljIGNvbnN0IFFDaGFyIHZhbHVlXzVfMCBbXSA9
IHsgJ0cnLCdFJywnVCcgfTsKLXN0YXRpYyBjb25zdCBRQ2hhciB2YWx1ZV81XzEgW10gPSB7ICdB
JywnUCcsJ1AnLCdMJywnSScsJ0MnLCdBJywnVCcsJ0knLCdPJywnTicsJy8nLCdYJywnLScsJ1cn
LCdXJywnVycsJy0nLCdGJywnTycsJ1InLCdNJywnLScsJ1UnLCdSJywnTCcsJ0UnLCdOJywnQycs
J08nLCdEJywnRScsJ0QnIH07Ci0KLWF0dHJfcHJpdiBhdHRyX2xpc3RfNVtdID0gewotICAgIGF0
dHJfcHJpdihBVFRSX01FVEhPRCwgdmFsdWVfNV8wLCAzKSwKLSAgICBhdHRyX3ByaXYoQVRUUl9F
TkNUWVBFLCB2YWx1ZV81XzEsIDMzKQotfTsKLQotc3RhdGljIGNvbnN0IFFDaGFyIHZhbHVlXzZf
MCBbXSA9IHsgJ1QnLCdFJywnWCcsJ1QnIH07Ci0KLWF0dHJfcHJpdiBhdHRyX2xpc3RfNltdID0g
ewotICAgIGF0dHJfcHJpdihBVFRSX1RZUEUsIHZhbHVlXzZfMCwgNCkKLX07Ci0KLXN0YXRpYyBj
b25zdCBRQ2hhciB2YWx1ZV83XzAgW10gPSB7ICdTJywnVScsJ0InLCdNJywnSScsJ1QnIH07Ci0K
LWF0dHJfcHJpdiBhdHRyX2xpc3RfN1tdID0gewotICAgIGF0dHJfcHJpdihBVFRSX1RZUEUsIHZh
bHVlXzdfMCwgNikKLX07Ci0KLXN0YXRpYyBjb25zdCBRQ2hhciB2YWx1ZV84XzAgW10gPSB7ICcx
JyB9OwotCi1hdHRyX3ByaXYgYXR0cl9saXN0XzhbXSA9IHsKLSAgICBhdHRyX3ByaXYoQVRUUl9T
UEFOLCB2YWx1ZV84XzAsIDEpCi19OwotCi1zdGF0aWMgY29uc3QgUUNoYXIgdmFsdWVfOV8wIFtd
ID0geyAnMScgfTsKLQotYXR0cl9wcml2IGF0dHJfbGlzdF85W10gPSB7Ci0gICAgYXR0cl9wcml2
KEFUVFJfU1BBTiwgdmFsdWVfOV8wLCAxKQotfTsKLQotc3RhdGljIGNvbnN0IFFDaGFyIHZhbHVl
XzEwXzAgW10gPSB7ICcxJyB9Owotc3RhdGljIGNvbnN0IFFDaGFyIHZhbHVlXzEwXzEgW10gPSB7
ICcxJyB9OwotCi1hdHRyX3ByaXYgYXR0cl9saXN0XzEwW10gPSB7Ci0gICAgYXR0cl9wcml2KEFU
VFJfUk9XU1BBTiwgdmFsdWVfMTBfMCwgMSksCi0gICAgYXR0cl9wcml2KEFUVFJfQ09MU1BBTiwg
dmFsdWVfMTBfMSwgMSkKLX07Ci0KLXN0YXRpYyBjb25zdCBRQ2hhciB2YWx1ZV8xMV8wIFtdID0g
eyAnMScgfTsKLXN0YXRpYyBjb25zdCBRQ2hhciB2YWx1ZV8xMV8xIFtdID0geyAnQScsJ1UnLCdU
JywnTycgfTsKLQotYXR0cl9wcml2IGF0dHJfbGlzdF8xMVtdID0gewotICAgIGF0dHJfcHJpdihB
VFRSX0ZSQU1FQk9SREVSLCB2YWx1ZV8xMV8wLCAxKSwKLSAgICBhdHRyX3ByaXYoQVRUUl9TQ1JP
TExJTkcsIHZhbHVlXzExXzEsIDQpCi19OwotCi1zdGF0aWMgY29uc3QgUUNoYXIgdmFsdWVfMTJf
MCBbXSA9IHsgJzEnIH07Ci1zdGF0aWMgY29uc3QgUUNoYXIgdmFsdWVfMTJfMSBbXSA9IHsgJ0En
LCdVJywnVCcsJ08nIH07Ci0KLWF0dHJfcHJpdiBhdHRyX2xpc3RfMTJbXSA9IHsKLSAgICBhdHRy
X3ByaXYoQVRUUl9GUkFNRUJPUkRFUiwgdmFsdWVfMTJfMCwgMSksCi0gICAgYXR0cl9wcml2KEFU
VFJfU0NST0xMSU5HLCB2YWx1ZV8xMl8xLCA0KQotfTsKLQotc3RhdGljIGNvbnN0IFFDaGFyIHZh
bHVlXzEzXzAgW10gPSB7ICctJywnLycsJy8nLCdXJywnMycsJ0MnLCcvJywnLycsJ0QnLCdUJywn
RCcgfTsKLXN0YXRpYyBjb25zdCBRQ2hhciB2YWx1ZV8xM18xIFtdID0geyAnVCcsJ1InLCdBJywn
TicsJ1MnLCdJJywnVCcsJ0knLCdPJywnTicsJ0EnLCdMJywnLycsJy8nLCdFJywnTicgfTsKLQot
YXR0cl9wcml2IGF0dHJfbGlzdF8xM1tdID0gewotICAgIGF0dHJfcHJpdihBVFRSX1ZFUlNJT04s
IHZhbHVlXzEzXzAsIDExKSwKLSAgICBhdHRyX3ByaXYoQVRUUl9IVE1MLCB2YWx1ZV8xM18xLCAx
NikKLX07Ci0KLURPTVN0cmluZyBET006OmZpbmREZWZBdHRyTm9uZSh1c2hvcnQpCi17Ci0gICAg
cmV0dXJuIERPTVN0cmluZygpOwotfTsKLURPTVN0cmluZyBET006OmZpbmREZWZBdHRyQlIodXNo
b3J0IGlkKQotewotICAgIHJldHVybiBmaW5kX2F0dHIoaWQsIGF0dHJfbGlzdF8xKTsKLX0KLURP
TVN0cmluZyBET006OmZpbmREZWZBdHRyQSh1c2hvcnQgaWQpCi17Ci0gICAgcmV0dXJuIGZpbmRf
YXR0cihpZCwgYXR0cl9saXN0XzIpOwotfQotRE9NU3RyaW5nIERPTTo6ZmluZERlZkF0dHJBUkVB
KHVzaG9ydCBpZCkKLXsKLSAgICByZXR1cm4gZmluZF9hdHRyKGlkLCBhdHRyX2xpc3RfMyk7Ci19
Ci1ET01TdHJpbmcgRE9NOjpmaW5kRGVmQXR0clBBUkFNKHVzaG9ydCBpZCkKLXsKLSAgICByZXR1
cm4gZmluZF9hdHRyKGlkLCBhdHRyX2xpc3RfNCk7Ci19Ci1ET01TdHJpbmcgRE9NOjpmaW5kRGVm
QXR0ckZPUk0odXNob3J0IGlkKQotewotICAgIHJldHVybiBmaW5kX2F0dHIoaWQsIGF0dHJfbGlz
dF81KTsKLX0KLURPTVN0cmluZyBET006OmZpbmREZWZBdHRySU5QVVQodXNob3J0IGlkKQotewot
ICAgIHJldHVybiBmaW5kX2F0dHIoaWQsIGF0dHJfbGlzdF82KTsKLX0KLURPTVN0cmluZyBET006
OmZpbmREZWZBdHRyQlVUVE9OKHVzaG9ydCBpZCkKLXsKLSAgICByZXR1cm4gZmluZF9hdHRyKGlk
LCBhdHRyX2xpc3RfNyk7Ci19Ci1ET01TdHJpbmcgRE9NOjpmaW5kRGVmQXR0ckNPTEdST1VQKHVz
aG9ydCBpZCkKLXsKLSAgICByZXR1cm4gZmluZF9hdHRyKGlkLCBhdHRyX2xpc3RfOCk7Ci19Ci1E
T01TdHJpbmcgRE9NOjpmaW5kRGVmQXR0ckNPTCh1c2hvcnQgaWQpCi17Ci0gICAgcmV0dXJuIGZp
bmRfYXR0cihpZCwgYXR0cl9saXN0XzkpOwotfQotRE9NU3RyaW5nIERPTTo6ZmluZERlZkF0dHJU
SCh1c2hvcnQgaWQpCi17Ci0gICAgcmV0dXJuIGZpbmRfYXR0cihpZCwgYXR0cl9saXN0XzEwKTsK
LX0KLURPTVN0cmluZyBET006OmZpbmREZWZBdHRyRlJBTUUodXNob3J0IGlkKQotewotICAgIHJl
dHVybiBmaW5kX2F0dHIoaWQsIGF0dHJfbGlzdF8xMSk7Ci19Ci1ET01TdHJpbmcgRE9NOjpmaW5k
RGVmQXR0cklGUkFNRSh1c2hvcnQgaWQpCi17Ci0gICAgcmV0dXJuIGZpbmRfYXR0cihpZCwgYXR0
cl9saXN0XzEyKTsKLX0KLURPTVN0cmluZyBET006OmZpbmREZWZBdHRySFRNTCh1c2hvcnQgaWQp
Ci17Ci0gICAgcmV0dXJuIGZpbmRfYXR0cihpZCwgYXR0cl9saXN0XzEzKTsKLX0KLQotI2VuZGlm
CkluZGV4OiBraHRtbC9odG1sL2R0ZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9X
ZWJDb3JlL2todG1sL2h0bWwvZHRkLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNQpkaWZmIC11
IC1wIC1yMS41IGtodG1sL2h0bWwvZHRkLmgKLS0tIGtodG1sL2h0bWwvZHRkLmgJMTIgQXByIDIw
MDUgMjI6NDk6NDEgLTAwMDAJMS41CisrKyBraHRtbC9odG1sL2R0ZC5oCTE2IEp1biAyMDA1IDIz
OjAyOjExIC0wMDAwCkBAIC0yMywzNiArMjMsMTEgQEAKICNkZWZpbmUgX0RPTV9kdGRfaF8KIAog
I2luY2x1ZGUgImRvbS9kb21fc3RyaW5nLmgiCi0jaW5jbHVkZSAibWlzYy9odG1sdGFncy5oIgog
CiBuYW1lc3BhY2UgRE9NCiB7CiAKLXZvaWQgYWRkRm9yYmlkZGVuKGludCB0YWdJZCwgdXNob3J0
ICpmb3JiaWRkZW5UYWdzKTsKLXZvaWQgcmVtb3ZlRm9yYmlkZGVuKGludCB0YWdJZCwgdXNob3J0
ICpmb3JiaWRkZW5UYWdzKTsKLQotZW51bSB0YWdTdGF0dXMgeyBPUFRJT05BTCwgUkVRVUlSRUQs
IEZPUkJJRERFTiB9OwotCiBib29sIGNoZWNrQ2hpbGQodXNob3J0IHRhZ0lELCB1c2hvcnQgY2hp
bGRJRCwgYm9vbCBzdHJpY3QpOwogCi1leHRlcm4gY29uc3QgdW5zaWduZWQgc2hvcnQgdGFnUHJp
b3JpdHlBcnJheVtdOwotZXh0ZXJuIGNvbnN0IHRhZ1N0YXR1cyBlbmRUYWdBcnJheVtdOwotCi1p
bmxpbmUgdW5zaWduZWQgc2hvcnQgdGFnUHJpb3JpdHkoUV9VSU5UMzIgdGFnSWQpCi17Ci0gICAg
Ly8gVHJlYXQgY3VzdG9tIGVsZW1lbnRzIHRoZSBzYW1lIGFzIDxzcGFuPjsgYWxzbyBkb24ndCBy
ZWFkIHBhc3QgdGhlIGVuZCBvZiB0aGUgYXJyYXkuCi0gICAgaWYgKHRhZ0lkID4gSURfTEFTVF9U
QUcpCi0gICAgICAgIHJldHVybiB0YWdQcmlvcml0eUFycmF5W0lEX1NQQU5dOwotICAgIHJldHVy
biB0YWdQcmlvcml0eUFycmF5W3RhZ0lkXTsKLX0KLQotaW5saW5lIHRhZ1N0YXR1cyBlbmRUYWdS
ZXF1aXJlbWVudChRX1VJTlQzMiB0YWdJZCkKLXsKLSAgICAvLyBUcmVhdCBjdXN0b20gZWxlbWVu
dHMgdGhlIHNhbWUgYXMgPHNwYW4+OyBhbHNvIGRvbid0IHJlYWQgcGFzdCB0aGUgZW5kIG9mIHRo
ZSBhcnJheS4KLSAgICBpZiAodGFnSWQgPiBJRF9MQVNUX1RBRykKLSAgICAgICAgcmV0dXJuIGVu
ZFRhZ0FycmF5W0lEX1NQQU5dOwotICAgIHJldHVybiBlbmRUYWdBcnJheVt0YWdJZF07Ci19Ci0K
IH0gLy9uYW1lc3BhY2UgRE9NCiAjZW5kaWYKSW5kZXg6IGtodG1sL2h0bWwvaHRtbF9iYXNlaW1w
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9o
dG1sX2Jhc2VpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS43MgpkaWZmIC11IC1wIC1y
MS43MiBraHRtbC9odG1sL2h0bWxfYmFzZWltcGwuY3BwCi0tLSBraHRtbC9odG1sL2h0bWxfYmFz
ZWltcGwuY3BwCTEyIE1heSAyMDA1IDE3OjExOjIxIC0wMDAwCTEuNzIKKysrIGtodG1sL2h0bWwv
aHRtbF9iYXNlaW1wbC5jcHAJMTYgSnVuIDIwMDUgMjM6MDI6MTIgLTAwMDAKQEAgLTQ4LDcgKzQ4
LDcgQEAgdXNpbmcgbmFtZXNwYWNlIERPTTsKIHVzaW5nIG5hbWVzcGFjZSBraHRtbDsKIAogSFRN
TEJvZHlFbGVtZW50SW1wbDo6SFRNTEJvZHlFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQot
ICAgIDogSFRNTEVsZW1lbnRJbXBsKGRvYyksIG1fbGlua0RlY2woMCkKKyAgICA6IEhUTUxFbGVt
ZW50SW1wbChIVE1MTmFtZXM6OmJvZHkoKSwgZG9jKSwgbV9saW5rRGVjbCgwKQogewogfQogCkBA
IC02MSwxMSArNjEsNiBAQCBIVE1MQm9keUVsZW1lbnRJbXBsOjp+SFRNTEJvZHlFbGVtZW50SW1w
CiAgICAgfQogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTEJvZHlFbGVtZW50SW1wbDo6aWQoKSBjb25z
dAotewotICAgIHJldHVybiBJRF9CT0RZOwotfQotCiB2b2lkIEhUTUxCb2R5RWxlbWVudEltcGw6
OmNyZWF0ZUxpbmtEZWNsKCkKIHsKICAgICBtX2xpbmtEZWNsID0gbmV3IENTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uSW1wbDsKQEAgLTI4OSw3ICsyODQsMTggQEAgdm9pZCBIVE1MQm9keUVsZW1l
bnRJbXBsOjpzZXRWTGluayhjb25zdAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MRnJhbWVF
bGVtZW50SW1wbDo6SFRNTEZyYW1lRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgICA6
IEhUTUxFbGVtZW50SW1wbChkb2MpCisgICAgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjpm
cmFtZSgpLCBkb2MpCit7CisgICAgaW5pdCgpOworfQorCitIVE1MRnJhbWVFbGVtZW50SW1wbDo6
SFRNTEZyYW1lRWxlbWVudEltcGwoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1l
bnRQdHIgKmRvYykKKyAgICA6IEhUTUxFbGVtZW50SW1wbCh0YWdOYW1lLCBkb2MpCit7CisgICAg
aW5pdCgpOworfQorCit2b2lkIEhUTUxGcmFtZUVsZW1lbnRJbXBsOjppbml0KCkKIHsKICAgICBt
X2ZyYW1lQm9yZGVyID0gdHJ1ZTsKICAgICBtX2ZyYW1lQm9yZGVyU2V0ID0gZmFsc2U7CkBAIC0z
MDMsMTEgKzMwOSw2IEBAIEhUTUxGcmFtZUVsZW1lbnRJbXBsOjp+SFRNTEZyYW1lRWxlbWVudEkK
IHsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxGcmFtZUVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIElEX0ZSQU1FOwotfQotCiBib29sIEhUTUxGcmFtZUVsZW1lbnRJbXBsOjpp
c1VSTEFsbG93ZWQoY29uc3QgQXRvbWljU3RyaW5nICZVUkxTdHJpbmcpIGNvbnN0CiB7CiAgICAg
aWYgKFVSTFN0cmluZy5pc0VtcHR5KCkpIHsKQEAgLTQ4Miw3ICs0ODMsNyBAQCB2b2lkIEhUTUxG
cmFtZUVsZW1lbnRJbXBsOjphdHRhY2goKQogCiAgICAgLy8gaW5oZXJpdCBkZWZhdWx0IHNldHRp
bmdzIGZyb20gcGFyZW50IGZyYW1lc2V0CiAgICAgZm9yIChOb2RlSW1wbCAqbm9kZSA9IHBhcmVu
dE5vZGUoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKSkKLSAgICAgICAgaWYgKG5v
ZGUtPmlkKCkgPT0gSURfRlJBTUVTRVQpIHsKKyAgICAgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjpmcmFtZXNldCgpKSkgewogICAgICAgICAgICAgSFRNTEZyYW1lU2V0RWxlbWVu
dEltcGwqIGZyYW1lc2V0ID0gc3RhdGljX2Nhc3Q8SFRNTEZyYW1lU2V0RWxlbWVudEltcGwqPihu
b2RlKTsKICAgICAgICAgICAgIGlmICghbV9mcmFtZUJvcmRlclNldCkKICAgICAgICAgICAgICAg
ICBtX2ZyYW1lQm9yZGVyID0gZnJhbWVzZXQtPmZyYW1lQm9yZGVyKCk7CkBAIC02NjEsNyArNjYy
LDcgQEAgdm9pZCBIVE1MRnJhbWVFbGVtZW50SW1wbDo6c2V0U3JjKGNvbnN0IAogLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQogCiBIVE1MRnJhbWVTZXRFbGVtZW50SW1wbDo6SFRNTEZyYW1lU2V0RWxlbWVu
dEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50SW1wbChkb2MpCisgICAg
OiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjpmcmFtZXNldCgpLCBkb2MpCiB7CiAgICAgLy8g
ZGVmYXVsdCB2YWx1ZSBmb3Igcm93cyBhbmQgY29scy4uLgogICAgIG1fdG90YWxSb3dzID0gMTsK
QEAgLTY4NSwxMSArNjg2LDYgQEAgSFRNTEZyYW1lU2V0RWxlbWVudEltcGw6On5IVE1MRnJhbWVT
ZXRFbAogICAgICAgICBkZWxldGUgW10gbV9jb2xzOwogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTEZy
YW1lU2V0RWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfRlJBTUVTRVQ7
Ci19Ci0KIHZvaWQgSFRNTEZyYW1lU2V0RWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KE1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIpCiB7CiAgICAgc3dpdGNoKGF0dHItPmlkKCkpCkBA
IC03NTIsOCArNzQ4LDcgQEAgdm9pZCBIVE1MRnJhbWVTZXRFbGVtZW50SW1wbDo6YXR0YWNoKCkK
ICAgICBIVE1MRWxlbWVudEltcGwqIG5vZGUgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwq
PihwYXJlbnROb2RlKCkpOwogICAgIHdoaWxlKG5vZGUpCiAgICAgewotICAgICAgICBpZihub2Rl
LT5pZCgpID09IElEX0ZSQU1FU0VUKQotICAgICAgICB7CisgICAgICAgIGlmIChub2RlLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6ZnJhbWVzZXQoKSkpIHsKICAgICAgICAgICAgIEhUTUxGcmFtZVNl
dEVsZW1lbnRJbXBsKiBmcmFtZXNldCA9IHN0YXRpY19jYXN0PEhUTUxGcmFtZVNldEVsZW1lbnRJ
bXBsKj4obm9kZSk7CiAgICAgICAgICAgICBpZighZnJhbWVCb3JkZXJTZXQpICBmcmFtZWJvcmRl
ciA9IGZyYW1lc2V0LT5mcmFtZUJvcmRlcigpOwogICAgICAgICAgICAgaWYoIW5vcmVzaXplKSAg
bm9yZXNpemUgPSBmcmFtZXNldC0+bm9SZXNpemUoKTsKQEAgLTgxNyw3ICs4MTIsNyBAQCB2b2lk
IEhUTUxGcmFtZVNldEVsZW1lbnRJbXBsOjpzZXRSb3dzKGNvCiAvLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CiAKIEhUTUxIZWFkRWxlbWVudEltcGw6OkhUTUxIZWFkRWxlbWVudEltcGwoRG9jdW1lbnRQdHIg
KmRvYykKLSAgICA6IEhUTUxFbGVtZW50SW1wbChkb2MpCisgICAgOiBIVE1MRWxlbWVudEltcGwo
SFRNTE5hbWVzOjpoZWFkKCksIGRvYykKIHsKIH0KIApAQCAtODI1LDExICs4MjAsNiBAQCBIVE1M
SGVhZEVsZW1lbnRJbXBsOjp+SFRNTEhlYWRFbGVtZW50SW1wCiB7CiB9CiAKLU5vZGVJbXBsOjpJ
ZCBIVE1MSGVhZEVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0hFQUQ7
Ci19Ci0KIERPTVN0cmluZyBIVE1MSGVhZEVsZW1lbnRJbXBsOjpwcm9maWxlKCkgY29uc3QKIHsK
ICAgICByZXR1cm4gZ2V0QXR0cmlidXRlKEFUVFJfUFJPRklMRSk7CkBAIC04NDMsNyArODMzLDcg
QEAgdm9pZCBIVE1MSGVhZEVsZW1lbnRJbXBsOjpzZXRQcm9maWxlKGNvbgogLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQogCiBIVE1MSHRtbEVsZW1lbnRJbXBsOjpIVE1MSHRtbEVsZW1lbnRJbXBsKERvY3Vt
ZW50UHRyICpkb2MpCi0gICAgOiBIVE1MRWxlbWVudEltcGwoZG9jKQorICAgIDogSFRNTEVsZW1l
bnRJbXBsKEhUTUxOYW1lczo6aHRtbCgpLCBkb2MpCiB7CiB9CiAKQEAgLTg1MSwxMSArODQxLDYg
QEAgSFRNTEh0bWxFbGVtZW50SW1wbDo6fkhUTUxIdG1sRWxlbWVudEltcAogewogfQogCi1Ob2Rl
SW1wbDo6SWQgSFRNTEh0bWxFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJ
RF9IVE1MOwotfQotCiBET01TdHJpbmcgSFRNTEh0bWxFbGVtZW50SW1wbDo6dmVyc2lvbigpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIGdldEF0dHJpYnV0ZShBVFRSX1ZFUlNJT04pOwpAQCAtODY4LDcg
Kzg1Myw3IEBAIHZvaWQgSFRNTEh0bWxFbGVtZW50SW1wbDo6c2V0VmVyc2lvbihjb24KIAogLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQogCi1IVE1MSUZyYW1lRWxlbWVudEltcGw6OkhUTUxJRnJhbWVFbGVt
ZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKSA6IEhUTUxGcmFtZUVsZW1lbnRJbXBsKGRvYykKK0hU
TUxJRnJhbWVFbGVtZW50SW1wbDo6SFRNTElGcmFtZUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpk
b2MpIDogSFRNTEZyYW1lRWxlbWVudEltcGwoSFRNTE5hbWVzOjppZnJhbWUoKSwgZG9jKQogewog
ICAgIG1fZnJhbWVCb3JkZXIgPSBmYWxzZTsKICAgICBtX21hcmdpbldpZHRoID0gLTE7CkBAIC04
ODAsMTEgKzg2NSw2IEBAIEhUTUxJRnJhbWVFbGVtZW50SW1wbDo6fkhUTUxJRnJhbWVFbGVtZW4K
IHsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxJRnJhbWVFbGVtZW50SW1wbDo6aWQoKSBjb25zdAot
ewotICAgIHJldHVybiBJRF9JRlJBTUU7Ci19Ci0KIGJvb2wgSFRNTElGcmFtZUVsZW1lbnRJbXBs
OjptYXBUb0VudHJ5KE5vZGVJbXBsOjpJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVz
dWx0KSBjb25zdAogewogICAgIHN3aXRjaCAoYXR0cikgewpJbmRleDoga2h0bWwvaHRtbC9odG1s
X2Jhc2VpbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwv
aHRtbC9odG1sX2Jhc2VpbXBsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjcKZGlmZiAtdSAt
cCAtcjEuMjcga2h0bWwvaHRtbC9odG1sX2Jhc2VpbXBsLmgKLS0tIGtodG1sL2h0bWwvaHRtbF9i
YXNlaW1wbC5oCTExIE1heSAyMDA1IDA1OjQ5OjM0IC0wMDAwCTEuMjcKKysrIGtodG1sL2h0bWwv
aHRtbF9iYXNlaW1wbC5oCTE2IEp1biAyMDA1IDIzOjAyOjEyIC0wMDAwCkBAIC01NSw4ICs1NSw4
IEBAIHB1YmxpYzoKICAgICBIVE1MQm9keUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpOwog
ICAgIH5IVE1MQm9keUVsZW1lbnRJbXBsKCk7CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7
Ci0KKyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDEwOyB9Cisg
ICAKICAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShOb2RlSW1wbDo6SWQgYXR0ciwgTWFwcGVk
QXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFw
cGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKik7CiAKQEAgLTkyLDExICs5MiwxNCBA
QCBjbGFzcyBIVE1MRnJhbWVFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MCiAKIHB1YmxpYzoKICAg
ICBIVE1MRnJhbWVFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKTsKLQorICAgIEhUTUxGcmFt
ZUVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50UHRyKiBk
b2MpOwogICAgIH5IVE1MRnJhbWVFbGVtZW50SW1wbCgpOwogCi0gICAgdmlydHVhbCBJZCBpZCgp
IGNvbnN0OworICAgIHZvaWQgaW5pdCgpOwogCisgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVu
ZFRhZ3JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gRk9SQklEREVOOyB9CisgICAgdmlydHVh
bCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAwOyB9CisgIAogICAgIHZpcnR1YWwg
dm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICopOwogICAgIHZp
cnR1YWwgdm9pZCBhdHRhY2goKTsKICAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoKCk7CkBAIC0xNzEs
NyArMTc0LDcgQEAgcHVibGljOgogCiAgICAgfkhUTUxGcmFtZVNldEVsZW1lbnRJbXBsKCk7CiAK
LSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHko
KSBjb25zdCB7IHJldHVybiAxMDsgfQogCiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0
cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKik7CiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaCgp
OwpAQCAtMjE5LDcgKzIyMiw4IEBAIHB1YmxpYzoKIAogICAgIH5IVE1MSGVhZEVsZW1lbnRJbXBs
KCk7CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CisgICAgdmlydHVhbCBIVE1MVGFnU3Rh
dHVzIGVuZFRhZ3JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gT1BUSU9OQUw7IH0KKyAgICB2
aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDEwOyB9CiAKICAgICBET01T
dHJpbmcgcHJvZmlsZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0UHJvZmlsZShjb25zdCBET01TdHJp
bmcgJik7CkBAIC0yMzMsNyArMjM3LDcgQEAgcHVibGljOgogICAgIEhUTUxIdG1sRWxlbWVudElt
cGwoRG9jdW1lbnRQdHIgKmRvYyk7CiAgICAgfkhUTUxIdG1sRWxlbWVudEltcGwoKTsKIAotICAg
IHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNv
bnN0IHsgcmV0dXJuIDExOyB9CiAKICAgICBET01TdHJpbmcgdmVyc2lvbigpIGNvbnN0OwogICAg
IHZvaWQgc2V0VmVyc2lvbihjb25zdCBET01TdHJpbmcgJik7CkBAIC0yNDYsMTEgKzI1MCw4IEBA
IGNsYXNzIEhUTUxJRnJhbWVFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE0KIHsKIHB1YmxpYzoKICAg
ICBIVE1MSUZyYW1lRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYyk7Ci0KICAgICB+SFRNTElG
cmFtZUVsZW1lbnRJbXBsKCk7CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7Ci0KICAgICB2
aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShOb2RlSW1wbDo6SWQgYXR0ciwgTWFwcGVkQXR0cmlidXRl
RW50cnkmIHJlc3VsdCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmli
dXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIpOwogCkluZGV4OiBraHRtbC9odG1sL2h0bWxf
YmxvY2tpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRt
bC9odG1sL2h0bWxfYmxvY2tpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNwpkaWZm
IC11IC1wIC1yMS4xNyBraHRtbC9odG1sL2h0bWxfYmxvY2tpbXBsLmNwcAotLS0ga2h0bWwvaHRt
bC9odG1sX2Jsb2NraW1wbC5jcHAJMTEgTWF5IDIwMDUgMDU6NDk6MzQgLTAwMDAJMS4xNworKysg
a2h0bWwvaHRtbC9odG1sX2Jsb2NraW1wbC5jcHAJMTYgSnVuIDIwMDUgMjM6MDI6MTIgLTAwMDAK
QEAgLTM3LDcgKzM3LDcgQEAgdXNpbmcgbmFtZXNwYWNlIGtodG1sOwogdXNpbmcgbmFtZXNwYWNl
IERPTTsKIAogSFRNTEJsb2NrcXVvdGVFbGVtZW50SW1wbDo6SFRNTEJsb2NrcXVvdGVFbGVtZW50
SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAgIDogSFRNTEVsZW1lbnRJbXBsKGRvYykKKyAgICA6
IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6OmJsb2NrcXVvdGUoKSwgZG9jKQogewogfQogCkBA
IC00NSwxMSArNDUsNiBAQCBIVE1MQmxvY2txdW90ZUVsZW1lbnRJbXBsOjp+SFRNTEJsb2NrcXVv
CiB7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MQmxvY2txdW90ZUVsZW1lbnRJbXBsOjppZCgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIElEX0JMT0NLUVVPVEU7Ci19Ci0KIERPTVN0cmluZyBIVE1MQmxv
Y2txdW90ZUVsZW1lbnRJbXBsOjpjaXRlKCkgY29uc3QKIHsKICAgICByZXR1cm4gZ2V0QXR0cmli
dXRlKEFUVFJfQ0lURSk7CkBAIC02Myw3ICs1OCw3IEBAIHZvaWQgSFRNTEJsb2NrcXVvdGVFbGVt
ZW50SW1wbDo6c2V0Q2l0ZSgKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogSFRNTERpdkVsZW1lbnRJ
bXBsOjpIVE1MRGl2RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgICA6IEhUTUxFbGVt
ZW50SW1wbChkb2MpCisgICAgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjpkaXYoKSwgZG9j
KQogewogfQogCkBAIC03MSwxMSArNjYsNiBAQCBIVE1MRGl2RWxlbWVudEltcGw6On5IVE1MRGl2
RWxlbWVudEltcGwoCiB7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MRGl2RWxlbWVudEltcGw6Omlk
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfRElWOwotfQotCiBib29sIEhUTUxEaXZFbGVtZW50
SW1wbDo6bWFwVG9FbnRyeShOb2RlSW1wbDo6SWQgYXR0ciwgTWFwcGVkQXR0cmlidXRlRW50cnkm
IHJlc3VsdCkgY29uc3QKIHsKICAgICBpZiAoYXR0ciA9PSBBVFRSX0FMSUdOKSB7CkBAIC0xMjAs
NyArMTEwLDcgQEAgdm9pZCBIVE1MRGl2RWxlbWVudEltcGw6OnNldEFsaWduKGNvbnN0IAogLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MSFJFbGVtZW50SW1wbDo6SFRNTEhSRWxlbWVudEltcGwo
RG9jdW1lbnRQdHIgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50SW1wbChkb2MpCisgICAgOiBIVE1M
RWxlbWVudEltcGwoSFRNTE5hbWVzOjpocigpLCBkb2MpCiB7CiB9CiAKQEAgLTEyOCwxMSArMTE4
LDYgQEAgSFRNTEhSRWxlbWVudEltcGw6On5IVE1MSFJFbGVtZW50SW1wbCgpCiB7CiB9CiAKLU5v
ZGVJbXBsOjpJZCBIVE1MSFJFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJ
RF9IUjsKLX0KLQogYm9vbCBIVE1MSFJFbGVtZW50SW1wbDo6bWFwVG9FbnRyeShOb2RlSW1wbDo6
SWQgYXR0ciwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3QKIHsKICAgICBzd2l0
Y2ggKGF0dHIpIHsKQEAgLTI1Miw4ICsyMzcsOCBAQCB2b2lkIEhUTUxIUkVsZW1lbnRJbXBsOjpz
ZXRXaWR0aChjb25zdCBECiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSFRNTEhlYWRpbmdFbGVt
ZW50SW1wbDo6SFRNTEhlYWRpbmdFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCB1c2hvcnQg
X3RhZ2lkKQotICAgIDogSFRNTEdlbmVyaWNFbGVtZW50SW1wbChkb2MsIF90YWdpZCkKK0hUTUxI
ZWFkaW5nRWxlbWVudEltcGw6OkhUTUxIZWFkaW5nRWxlbWVudEltcGwoY29uc3QgUXVhbGlmaWVk
TmFtZSYgdGFnTmFtZSwgRG9jdW1lbnRQdHIgKmRvYykKKyAgICA6IEhUTUxFbGVtZW50SW1wbCh0
YWdOYW1lLCBkb2MpCiB7CiB9CiAKQEAgLTI3MCwxMyArMjU1LDggQEAgdm9pZCBIVE1MSGVhZGlu
Z0VsZW1lbnRJbXBsOjpzZXRBbGlnbihjbwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MUGFy
YWdyYXBoRWxlbWVudEltcGw6OkhUTUxQYXJhZ3JhcGhFbGVtZW50SW1wbChEb2N1bWVudFB0ciAq
ZG9jKQotICAgIDogSFRNTEVsZW1lbnRJbXBsKGRvYykKLXsKLX0KLQotTm9kZUltcGw6OklkIEhU
TUxQYXJhZ3JhcGhFbGVtZW50SW1wbDo6aWQoKSBjb25zdAorICAgIDogSFRNTEVsZW1lbnRJbXBs
KEhUTUxOYW1lczo6cCgpLCBkb2MpCiB7Ci0gICAgcmV0dXJuIElEX1A7CiB9CiAKIGJvb2wgSFRN
TFBhcmFncmFwaEVsZW1lbnRJbXBsOjptYXBUb0VudHJ5KE5vZGVJbXBsOjpJZCBhdHRyLCBNYXBw
ZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdApAQCAtMzIyLDggKzMwMiw4IEBAIHZvaWQg
SFRNTFBhcmFncmFwaEVsZW1lbnRJbXBsOjpzZXRBbGlnbigKIAogLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQogCi1IVE1MUHJlRWxlbWVudEltcGw6OkhUTUxQcmVFbGVtZW50SW1wbChEb2N1bWVudFB0ciAq
ZG9jLCB1bnNpZ25lZCBzaG9ydCBfdGFnaWQpCi0gICAgOiBIVE1MR2VuZXJpY0VsZW1lbnRJbXBs
KGRvYywgX3RhZ2lkKQorSFRNTFByZUVsZW1lbnRJbXBsOjpIVE1MUHJlRWxlbWVudEltcGwoY29u
c3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnRQdHIgKmRvYykKKyAgICA6IEhUTUxF
bGVtZW50SW1wbCh0YWdOYW1lLCBkb2MpCiB7CiB9CiAKQEAgLTM0MywxNiArMzIzLDExIEBAIHZv
aWQgSFRNTFByZUVsZW1lbnRJbXBsOjpzZXRXaWR0aChsb25nIHcKIGNvbnN0IGludCBkZWZhdWx0
TWluaW11bURlbGF5ID0gNjA7CiAKIEhUTUxNYXJxdWVlRWxlbWVudEltcGw6OkhUTUxNYXJxdWVl
RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLTogSFRNTEVsZW1lbnRJbXBsKGRvYyksCis6
IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6Om1hcnF1ZWUoKSwgZG9jKSwKICAgbV9taW5pbXVt
RGVsYXkoZGVmYXVsdE1pbmltdW1EZWxheSkKIHsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxNYXJx
dWVlRWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfTUFSUVVFRTsKLX0K
LQogYm9vbCBIVE1MTWFycXVlZUVsZW1lbnRJbXBsOjptYXBUb0VudHJ5KE5vZGVJbXBsOjpJZCBh
dHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdAogewogICAgIHN3aXRjaCAo
YXR0cikgewpAQCAtNDM0LDE5ICs0MDksMyBAQCB2b2lkIEhUTUxNYXJxdWVlRWxlbWVudEltcGw6
OnBhcnNlTWFwcGVkCiAgICAgICAgICAgICBIVE1MRWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXR0
cmlidXRlKGF0dHIpOwogICAgIH0KIH0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUhUTUxMYXll
ckVsZW1lbnRJbXBsOjpIVE1MTGF5ZXJFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAg
IDogSFRNTERpdkVsZW1lbnRJbXBsKCBkb2MgKQotewotfQotCi1IVE1MTGF5ZXJFbGVtZW50SW1w
bDo6fkhUTUxMYXllckVsZW1lbnRJbXBsKCkKLXsKLX0KLQotTm9kZUltcGw6OklkIEhUTUxMYXll
ckVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0xBWUVSOwotfQpJbmRl
eDoga2h0bWwvaHRtbC9odG1sX2Jsb2NraW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbF9ibG9ja2ltcGwuaCx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS45CmRpZmYgLXUgLXAgLXIxLjkga2h0bWwvaHRtbC9odG1sX2Jsb2NraW1wbC5oCi0t
LSBraHRtbC9odG1sL2h0bWxfYmxvY2tpbXBsLmgJMTEgTWF5IDIwMDUgMDU6NDk6MzQgLTAwMDAJ
MS45CisrKyBraHRtbC9odG1sL2h0bWxfYmxvY2tpbXBsLmgJMTYgSnVuIDIwMDUgMjM6MDI6MTMg
LTAwMDAKQEAgLTQwLDggKzQwLDggQEAgcHVibGljOgogICAgIEhUTUxCbG9ja3F1b3RlRWxlbWVu
dEltcGwoRG9jdW1lbnRQdHIgKmRvYyk7CiAgICAgfkhUTUxCbG9ja3F1b3RlRWxlbWVudEltcGwo
KTsKIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKLQorICAgIHZpcnR1YWwgaW50IHRhZ1By
aW9yaXR5KCkgY29uc3QgeyByZXR1cm4gNTsgfQorICAgIAogICAgIERPTVN0cmluZyBjaXRlKCkg
Y29uc3Q7CiAgICAgdm9pZCBzZXRDaXRlKGNvbnN0IERPTVN0cmluZyAmKTsKIH07CkBAIC01NSw4
ICs1NSw4IEBAIGNsYXNzIEhUTUxEaXZFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MRWwKIHB1Ymxp
YzoKICAgICBIVE1MRGl2RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYyk7CiAgICAgfkhUTUxE
aXZFbGVtZW50SW1wbCgpOwotCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OworICAgIAorICAg
IHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gNTsgfQogICAgIAogICAg
IHZpcnR1YWwgYm9vbCBtYXBUb0VudHJ5KElkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiBy
ZXN1bHQpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBw
ZWRBdHRyaWJ1dGVJbXBsICp0b2tlbik7CkBAIC03Miw4ICs3Miw5IEBAIGNsYXNzIEhUTUxIUkVs
ZW1lbnRJbXBsIDogcHVibGljIEhUTUxFbGUKIHB1YmxpYzoKICAgICBIVE1MSFJFbGVtZW50SW1w
bChEb2N1bWVudFB0ciAqZG9jKTsKICAgICB+SFRNTEhSRWxlbWVudEltcGwoKTsKLQotICAgIHZp
cnR1YWwgSWQgaWQoKSBjb25zdDsKKyAgICAKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5k
VGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBGT1JCSURERU47IH0KKyAgICB2aXJ0dWFs
IGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KICAgICAKICAgICB2aXJ0dWFs
IGJvb2wgbWFwVG9FbnRyeShJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBj
b25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmli
dXRlSW1wbCAqKTsKQEAgLTkzLDEwICs5NCwxMiBAQCBwdWJsaWM6CiAKIC8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KIAotY2xhc3MgSFRNTEhlYWRpbmdFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MR2VuZXJp
Y0VsZW1lbnRJbXBsCitjbGFzcyBIVE1MSGVhZGluZ0VsZW1lbnRJbXBsIDogcHVibGljIEhUTUxF
bGVtZW50SW1wbAogewogcHVibGljOgotICAgIEhUTUxIZWFkaW5nRWxlbWVudEltcGwoRG9jdW1l
bnRQdHIgKmRvYywgdXNob3J0IF90YWdpZCk7CisgICAgSFRNTEhlYWRpbmdFbGVtZW50SW1wbChj
b25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudFB0ciAqZG9jKTsKKworICAgIHZp
cnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gNTsgfQogCiAgICAgRE9NU3Ry
aW5nIGFsaWduKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRBbGlnbihjb25zdCBET01TdHJpbmcgJik7
CkBAIC0xMDQsMjEgKzEwNywxNiBAQCBwdWJsaWM6CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAot
LyoKLSAqIHdlcmUgbm90IHVzaW5nIEhUTUxFbGVtZW50SW1wbCBhcyBwYXJlbnQgY2xhc3MsIHNp
bmNlIGEKLSAqIHBhcmFncmFwaCBzaG91bGQgYmUgYWJsZSB0byBmbG93IGFyb3VuZCBhbGlnbmVk
IG9iamVjdHMuIFRodXMKLSAqIGEgPHA+IGVsZW1lbnQgaGFzIHRvIGJlIGlubGluZSwgYW5kIGlz
IHJlbmRlcmVkIGJ5Ci0gKiBIVE1MQmxvY2tJbXBsOjpjYWxjUGFyYWdyYXBoCi0gKi8KIGNsYXNz
IEhUTUxQYXJhZ3JhcGhFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MRWxlbWVudEltcGwKIHsKIHB1
YmxpYzoKICAgICBIVE1MUGFyYWdyYXBoRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYyk7CiAK
KyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJl
dHVybiBPUFRJT05BTDsgfQorICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyBy
ZXR1cm4gMzsgfQorICAgIAogICAgIHZpcnR1YWwgYm9vbCBtYXBUb0VudHJ5KElkIGF0dHIsIE1h
cHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICphdHRyKTsKLSAgICAKLSAgICB2
aXJ0dWFsIElkIGlkKCkgY29uc3Q7CiAKICAgICBET01TdHJpbmcgYWxpZ24oKSBjb25zdDsKICAg
ICB2b2lkIHNldEFsaWduKGNvbnN0IERPTVN0cmluZyAmKTsKQEAgLTEyNiwxMyArMTI0LDEzIEBA
IHB1YmxpYzoKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1jbGFzcyBIVE1MUHJlRWxlbWVudElt
cGwgOiBwdWJsaWMgSFRNTEdlbmVyaWNFbGVtZW50SW1wbAorY2xhc3MgSFRNTFByZUVsZW1lbnRJ
bXBsIDogcHVibGljIEhUTUxFbGVtZW50SW1wbAogewogcHVibGljOgotICAgIEhUTUxQcmVFbGVt
ZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCB1c2hvcnQgX3RhZ2lkKTsKKyAgICBIVE1MUHJlRWxl
bWVudEltcGwoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnRQdHIgKmRvYyk7
CiAKICAgICBsb25nIHdpZHRoKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRXaWR0aCggbG9uZyB3ICk7
CisgICAgdm9pZCBzZXRXaWR0aChsb25nIHcpOwogfTsKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpA
QCAtMTQxLDggKzEzOSw2IEBAIGNsYXNzIEhUTUxNYXJxdWVlRWxlbWVudEltcGwgOiBwdWJsaWMg
SFQKIHsKIHB1YmxpYzoKICAgICBIVE1MTWFycXVlZUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpk
b2MpOwotCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwogICAgIAogICAgIHZpcnR1YWwgYm9v
bCBtYXBUb0VudHJ5KElkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0
OwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJ
bXBsICp0b2tlbik7CkBAIC0xNTMsMTggKzE0OSw1IEBAIHByaXZhdGU6CiAgICAgaW50IG1fbWlu
aW11bURlbGF5OwogfTsKIAotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBIVE1MTGF5ZXJF
bGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MRGl2RWxlbWVudEltcGwKLXsKLXB1YmxpYzoKLSAgICBI
VE1MTGF5ZXJFbGVtZW50SW1wbCggRG9jdW1lbnRQdHIgKmRvYyApOwotICAgIH5IVE1MTGF5ZXJF
bGVtZW50SW1wbCgpOwotCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwotCi0gICAgYm9vbCBm
aXhlZDsKLX07Ci0KIH07IC8vbmFtZXNwYWNlCiAjZW5kaWYKSW5kZXg6IGtodG1sL2h0bWwvaHRt
bF9kb2N1bWVudGltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3Jl
L2todG1sL2h0bWwvaHRtbF9kb2N1bWVudGltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjYwCmRpZmYgLXUgLXAgLXIxLjYwIGtodG1sL2h0bWwvaHRtbF9kb2N1bWVudGltcGwuY3BwCi0t
LSBraHRtbC9odG1sL2h0bWxfZG9jdW1lbnRpbXBsLmNwcAkxMSBNYXkgMjAwNSAwMDo1ODoyOCAt
MDAwMAkxLjYwCisrKyBraHRtbC9odG1sL2h0bWxfZG9jdW1lbnRpbXBsLmNwcAkxNiBKdW4gMjAw
NSAyMzowMjoxMyAtMDAwMApAQCAtMjQ2LDcgKzI0Niw3IEBAIFRva2VuaXplciAqSFRNTERvY3Vt
ZW50SW1wbDo6Y3JlYXRlVG9rZW4KIGJvb2wgSFRNTERvY3VtZW50SW1wbDo6Y2hpbGRBbGxvd2Vk
KCBOb2RlSW1wbCAqbmV3Q2hpbGQgKQogewogICAgIC8vICMjIyBzdXBwb3J0IGNvbW1lbnRzLiBl
dGMgYXMgYSBjaGlsZAotICAgIHJldHVybiAobmV3Q2hpbGQtPmlkKCkgPT0gSURfSFRNTCB8fCBu
ZXdDaGlsZC0+aWQoKSA9PSBJRF9DT01NRU5UKTsKKyAgICByZXR1cm4gKG5ld0NoaWxkLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6aHRtbCgpKSB8fCBuZXdDaGlsZC0+aXNDb21tZW50Tm9kZSgpKTsK
IH0KIAogRWxlbWVudEltcGwgKkhUTUxEb2N1bWVudEltcGw6OmNyZWF0ZUVsZW1lbnQoIGNvbnN0
IERPTVN0cmluZyAmbmFtZSwgaW50ICZleGNlcHRpb25jb2RlICkKSW5kZXg6IGtodG1sL2h0bWwv
aHRtbF9lbGVtZW50aW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNv
cmUva2h0bWwvaHRtbC9odG1sX2VsZW1lbnRpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS44NwpkaWZmIC11IC1wIC1yMS44NyBraHRtbC9odG1sL2h0bWxfZWxlbWVudGltcGwuY3BwCi0t
LSBraHRtbC9odG1sL2h0bWxfZWxlbWVudGltcGwuY3BwCTEzIE1heSAyMDA1IDE2OjQ4OjUxIC0w
MDAwCTEuODcKKysrIGtodG1sL2h0bWwvaHRtbF9lbGVtZW50aW1wbC5jcHAJMTYgSnVuIDIwMDUg
MjM6MDI6MTQgLTAwMDAKQEAgLTU4LDggKzU4LDggQEAgdXNpbmcgbmFtZXNwYWNlIGtodG1sOwog
CiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KIAotSFRNTEVsZW1lbnRJbXBsOjpIVE1MRWxlbWVudEltcGwoRG9jdW1l
bnRQdHIgKmRvYykKLSAgICA6IFN0eWxlZEVsZW1lbnRJbXBsKGRvYykKK0hUTUxFbGVtZW50SW1w
bDo6SFRNTEVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50
UHRyICpkb2MpCisgICAgOiBTdHlsZWRFbGVtZW50SW1wbCh0YWdOYW1lLCBkb2MpCiB7CiB9CiAK
QEAgLTY3LDUxICs2Nyw5IEBAIEhUTUxFbGVtZW50SW1wbDo6fkhUTUxFbGVtZW50SW1wbCgpCiB7
CiB9CiAKLWJvb2wgSFRNTEVsZW1lbnRJbXBsOjppc0lubGluZSgpIGNvbnN0Ci17Ci0gICAgaWYg
KHJlbmRlcmVyKCkpCi0gICAgICAgIHJldHVybiBFbGVtZW50SW1wbDo6aXNJbmxpbmUoKTsKLSAg
ICAKLSAgICBzd2l0Y2goaWQoKSkgewotICAgICAgICBjYXNlIElEX0E6Ci0gICAgICAgIGNhc2Ug
SURfRk9OVDoKLSAgICAgICAgY2FzZSBJRF9UVDoKLSAgICAgICAgY2FzZSBJRF9VOgotICAgICAg
ICBjYXNlIElEX0I6Ci0gICAgICAgIGNhc2UgSURfSToKLSAgICAgICAgY2FzZSBJRF9TOgotICAg
ICAgICBjYXNlIElEX1NUUklLRToKLSAgICAgICAgY2FzZSBJRF9CSUc6Ci0gICAgICAgIGNhc2Ug
SURfU01BTEw6Ci0gICAgCi0gICAgICAgICAgICAvLyAlcGhyYXNlCi0gICAgICAgIGNhc2UgSURf
RU06Ci0gICAgICAgIGNhc2UgSURfU1RST05HOgotICAgICAgICBjYXNlIElEX0RGTjoKLSAgICAg
ICAgY2FzZSBJRF9DT0RFOgotICAgICAgICBjYXNlIElEX1NBTVA6Ci0gICAgICAgIGNhc2UgSURf
S0JEOgotICAgICAgICBjYXNlIElEX1ZBUjoKLSAgICAgICAgY2FzZSBJRF9DSVRFOgotICAgICAg
ICBjYXNlIElEX0FCQlI6Ci0gICAgICAgIGNhc2UgSURfQUNST05ZTToKLSAgICAKLSAgICAgICAg
ICAgIC8vICVzcGVjaWFsCi0gICAgICAgIGNhc2UgSURfU1VCOgotICAgICAgICBjYXNlIElEX1NV
UDoKLSAgICAgICAgY2FzZSBJRF9TUEFOOgotICAgICAgICBjYXNlIElEX05PQlI6Ci0gICAgICAg
IGNhc2UgSURfV0JSOgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBFbGVtZW50SW1wbDo6aXNJbmxpbmUo
KTsKLSAgICB9Ci19Ci0KIE5vZGVJbXBsICpIVE1MRWxlbWVudEltcGw6OmNsb25lTm9kZShib29s
IGRlZXApCiB7Ci0gICAgSFRNTEVsZW1lbnRJbXBsICpjbG9uZSA9IHN0YXRpY19jYXN0PEhUTUxF
bGVtZW50SW1wbCAqPihnZXREb2N1bWVudCgpLT5jcmVhdGVIVE1MRWxlbWVudChsb2NhbE5hbWVQ
YXJ0KGlkKCkpKSk7CisgICAgSFRNTEVsZW1lbnRJbXBsICpjbG9uZSA9IHN0YXRpY19jYXN0PEhU
TUxFbGVtZW50SW1wbCAqPihnZXREb2N1bWVudCgpLT5jcmVhdGVIVE1MRWxlbWVudChsb2NhbE5h
bWUoKSkpOwogICAgIGlmICghY2xvbmUpCiAgICAgICAgIHJldHVybiAwOwogCkBAIC0zMjUsMjYg
KzI4MywxNyBAQCBET01TdHJpbmcgSFRNTEVsZW1lbnRJbXBsOjpvdXRlclRleHQoKSBjCiBEb2N1
bWVudEZyYWdtZW50SW1wbCAqSFRNTEVsZW1lbnRJbXBsOjpjcmVhdGVDb250ZXh0dWFsRnJhZ21l
bnQoY29uc3QgRE9NU3RyaW5nICZodG1sKQogewogICAgIC8vIHRoZSBmb2xsb3dpbmcgaXMgaW4g
YWNjb3JkYW5jZSB3aXRoIHRoZSBkZWZpbml0aW9uIGFzIHVzZWQgYnkgSUUKLSAgICBpZiggZW5k
VGFnUmVxdWlyZW1lbnQoaWQoKSkgPT0gRk9SQklEREVOICkKLSAgICAgICAgcmV0dXJuIE5VTEw7
Ci0gICAgLy8gSUUgZGlzYWxsb3dzIGlubmVySFRNTCBvbiBpbmxpbmUgZWxlbWVudHMuIEkgZG9u
J3Qgc2VlIHdoeSB3ZSBzaG91bGQgaGF2ZSB0aGlzIHJlc3RyaWN0aW9uLCBhcyBvdXIKLSAgICAv
LyBkaHRtbCBlbmdpbmUgY2FuIGNvcGUgd2l0aCBpdC4gTGFycwotICAgIC8vaWYgKCBpc0lubGlu
ZSgpICkgcmV0dXJuIGZhbHNlOwotICAgIHN3aXRjaCggaWQoKSApIHsKLSAgICAgICAgY2FzZSBJ
RF9DT0w6Ci0gICAgICAgIGNhc2UgSURfQ09MR1JPVVA6Ci0gICAgICAgIGNhc2UgSURfRlJBTUVT
RVQ6Ci0gICAgICAgIGNhc2UgSURfSEVBRDoKLSAgICAgICAgY2FzZSBJRF9TVFlMRToKLSAgICAg
ICAgY2FzZSBJRF9USVRMRToKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGlmICggIWdldERvY3VtZW50KCkt
PmlzSFRNTERvY3VtZW50KCkgKQotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoZW5kVGFn
UmVxdWlyZW1lbnQoKSA9PSBGT1JCSURERU4pCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYg
KGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmNvbCgpKSB8fCBoYXNMb2NhbE5hbWUoSFRNTE5hbWVz
Ojpjb2xncm91cCgpKSB8fCBoYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpmcmFtZXNldCgpKSB8fAor
ICAgICAgICBoYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpoZWFkKCkpIHx8IGhhc0xvY2FsTmFtZShI
VE1MTmFtZXM6OnN0eWxlKCkpIHx8IGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnRpdGxlKCkpKQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIGlmICghZ2V0RG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1l
bnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBEb2N1bWVudEZyYWdtZW50SW1wbCAqZnJh
Z21lbnQgPSBuZXcgRG9jdW1lbnRGcmFnbWVudEltcGwoIGRvY1B0cigpICk7CisgICAgRG9jdW1l
bnRGcmFnbWVudEltcGwgKmZyYWdtZW50ID0gbmV3IERvY3VtZW50RnJhZ21lbnRJbXBsKGRvY1B0
cigpKTsKICAgICBmcmFnbWVudC0+cmVmKCk7CiAgICAgewogICAgICAgICBIVE1MVG9rZW5pemVy
IHRvayhkb2NQdHIoKSwgZnJhZ21lbnQpOwpAQCAtMzU4LDE0ICszMDcsMTQgQEAgRG9jdW1lbnRG
cmFnbWVudEltcGwgKkhUTUxFbGVtZW50SW1wbDo6YwogICAgIGludCBpZ25vcmVkRXhjZXB0aW9u
Q29kZTsKIAogICAgIC8vIHdlIG5lZWQgdG8gcG9wIDxodG1sPiBhbmQgPGJvZHk+IGVsZW1lbnRz
IGFuZCByZW1vdmUgPGhlYWQ+IHRvCi0gICAgLy8gYWNjb21hZGF0ZSBmb2xrcyBwYXNzaW5nIGNv
bXBsZXRlIEhUTUwgZG9jdW1lbnRzIHRvIG1ha2UgdGhlCisgICAgLy8gYWNjb21tb2RhdGUgZm9s
a3MgcGFzc2luZyBjb21wbGV0ZSBIVE1MIGRvY3VtZW50cyB0byBtYWtlIHRoZQogICAgIC8vIGNo
aWxkIG9mIGFuIGVsZW1lbnQuCiAKICAgICBOb2RlSW1wbCAqbmV4dE5vZGU7CiAgICAgZm9yIChO
b2RlSW1wbCAqbm9kZSA9IGZyYWdtZW50LT5maXJzdENoaWxkKCk7IG5vZGUgIT0gTlVMTDsgbm9k
ZSA9IG5leHROb2RlKSB7CiAgICAgICAgIG5leHROb2RlID0gbm9kZS0+bmV4dFNpYmxpbmcoKTsK
IAlub2RlLT5yZWYoKTsKLSAgICAgICAgaWYgKG5vZGUtPmlkKCkgPT0gSURfSFRNTCB8fCBub2Rl
LT5pZCgpID09IElEX0JPRFkpIHsKKyAgICAgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjpodG1sKCkpIHx8IG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpib2R5KCkpKSB7CiAJ
ICAgIE5vZGVJbXBsICpmaXJzdENoaWxkID0gbm9kZS0+Zmlyc3RDaGlsZCgpOwogICAgICAgICAg
ICAgaWYgKGZpcnN0Q2hpbGQgIT0gTlVMTCkgewogICAgICAgICAgICAgICAgIG5leHROb2RlID0g
Zmlyc3RDaGlsZDsKQEAgLTM3OSw5ICszMjgsOSBAQCBEb2N1bWVudEZyYWdtZW50SW1wbCAqSFRN
TEVsZW1lbnRJbXBsOjpjCiAgICAgICAgICAgICAgICAgY2hpbGQtPmRlcmVmKCk7CiAJICAgIH0K
ICAgICAgICAgICAgIGZyYWdtZW50LT5yZW1vdmVDaGlsZChub2RlLCBpZ25vcmVkRXhjZXB0aW9u
Q29kZSk7Ci0JfSBlbHNlIGlmIChub2RlLT5pZCgpID09IElEX0hFQUQpIHsKKwl9IGVsc2UgaWYg
KG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoZWFkKCkpKQogCSAgICBmcmFnbWVudC0+cmVt
b3ZlQ2hpbGQobm9kZSwgaWdub3JlZEV4Y2VwdGlvbkNvZGUpOwotCX0KKwogICAgICAgICAvLyBJ
bXBvcnRhbnQgdG8gZG8gdGhpcyBkZXJlZiBhZnRlciByZW1vdmVDaGlsZCwgYmVjYXVzZSBpZiB0
aGUgb25seSB0aGluZwogICAgICAgICAvLyBrZWVwaW5nIGEgbm9kZSBhcm91bmQgaXMgYSBwYXJl
bnQgdGhhdCBpcyBub24tMCwgcmVtb3ZlQ2hpbGQgd2lsbCBub3QKICAgICAgICAgLy8gZGVsZXRl
IHRoZSBub2RlLiBUaGlzIHdvcmtzIGZpbmUgaW4gSmF2YVNjcmlwdCBiZWNhdXNlIHRoZXJlJ3Mg
YWx3YXlzCkBAIC00MDAsNyArMzQ5LDcgQEAgRG9jdW1lbnRGcmFnbWVudEltcGwgKkhUTUxFbGVt
ZW50SW1wbDo6YwogCiB2b2lkIEhUTUxFbGVtZW50SW1wbDo6c2V0SW5uZXJIVE1MKGNvbnN0IERP
TVN0cmluZyAmaHRtbCwgaW50ICZleGNlcHRpb24pCiB7Ci0gICAgRG9jdW1lbnRGcmFnbWVudElt
cGwgKmZyYWdtZW50ID0gY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KCBodG1sICk7CisgICAgRG9j
dW1lbnRGcmFnbWVudEltcGwgKmZyYWdtZW50ID0gY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KGh0
bWwpOwogICAgIGlmIChmcmFnbWVudCA9PSBOVUxMKSB7CiAJZXhjZXB0aW9uID0gRE9NRXhjZXB0
aW9uOjpOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI7CiAgICAgICAgIHJldHVybjsKQEAgLTQx
OCw3ICszNjcsNyBAQCB2b2lkIEhUTUxFbGVtZW50SW1wbDo6c2V0T3V0ZXJIVE1MKGNvbnN0CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAgICAgSFRNTEVsZW1lbnRJbXBsICpwYXJlbnQgPSBzdGF0
aWNfY2FzdDxIVE1MRWxlbWVudEltcGwgKj4ocCk7Ci0gICAgRG9jdW1lbnRGcmFnbWVudEltcGwg
KmZyYWdtZW50ID0gcGFyZW50LT5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoIGh0bWwgKTsKKyAg
ICBEb2N1bWVudEZyYWdtZW50SW1wbCAqZnJhZ21lbnQgPSBwYXJlbnQtPmNyZWF0ZUNvbnRleHR1
YWxGcmFnbWVudChodG1sKTsKIAogICAgIGlmICghZnJhZ21lbnQpIHsKIAlleGNlcHRpb24gPSBE
T01FeGNlcHRpb246Ok5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUjsKQEAgLTQzNCwyOSArMzgz
LDE3IEBAIHZvaWQgSFRNTEVsZW1lbnRJbXBsOjpzZXRPdXRlckhUTUwoY29uc3QKIHZvaWQgSFRN
TEVsZW1lbnRJbXBsOjpzZXRJbm5lclRleHQoY29uc3QgRE9NU3RyaW5nICZ0ZXh0LCBpbnQgJmV4
Y2VwdGlvbikKIHsKICAgICAvLyBmb2xsb3dpbmcgdGhlIElFIHNwZWNzLgotICAgIGlmIChlbmRU
YWdSZXF1aXJlbWVudChpZCgpKSA9PSBGT1JCSURERU4pIHsKKyAgICBpZiAoZW5kVGFnUmVxdWly
ZW1lbnQoKSA9PSBGT1JCSURERU4pIHsKIAlleGNlcHRpb24gPSBET01FeGNlcHRpb246Ok5PX01P
RElGSUNBVElPTl9BTExPV0VEX0VSUjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIC8v
IElFIGRpc2FsbG93cyBpbm5lclRleHQgb24gaW5saW5lIGVsZW1lbnRzLiBJIGRvbid0IHNlZSB3
aHkgd2Ugc2hvdWxkIGhhdmUgdGhpcyByZXN0cmljdGlvbiwgYXMgb3VyCi0gICAgLy8gZGh0bWwg
ZW5naW5lIGNhbiBjb3BlIHdpdGggaXQuIExhcnMKLSAgICAvL2lmICggaXNJbmxpbmUoKSApIHJl
dHVybiBmYWxzZTsKLSAgICBzd2l0Y2goIGlkKCkgKSB7Ci0gICAgICAgIGNhc2UgSURfQ09MOgot
ICAgICAgICBjYXNlIElEX0NPTEdST1VQOgotICAgICAgICBjYXNlIElEX0ZSQU1FU0VUOgotICAg
ICAgICBjYXNlIElEX0hFQUQ6Ci0gICAgICAgIGNhc2UgSURfSFRNTDoKLSAgICAgICAgY2FzZSBJ
RF9UQUJMRToKLSAgICAgICAgY2FzZSBJRF9UQk9EWToKLSAgICAgICAgY2FzZSBJRF9URk9PVDoK
LSAgICAgICAgY2FzZSBJRF9USEVBRDoKLSAgICAgICAgY2FzZSBJRF9UUjoKLSAgICAgICAgICAg
IGV4Y2VwdGlvbiA9IERPTUV4Y2VwdGlvbjo6Tk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOwot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7
CisgICAgaWYgKGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmNvbCgpKSB8fCBoYXNMb2NhbE5hbWUo
SFRNTE5hbWVzOjpjb2xncm91cCgpKSB8fCBoYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpmcmFtZXNl
dCgpKSB8fAorICAgICAgICBoYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpoZWFkKCkpIHx8IGhhc0xv
Y2FsTmFtZShIVE1MTmFtZXM6Omh0bWwoKSkgfHwgaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dGFi
bGUoKSkgfHwgCisgICAgICAgIGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnRib2R5KCkpIHx8IGhh
c0xvY2FsTmFtZShIVE1MTmFtZXM6OnRmb290KCkpIHx8IGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6
OnRoZWFkKCkpIHx8CisgICAgICAgIGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnRyKCkpKSB7Cisg
ICAgICAgIGV4Y2VwdGlvbiA9IERPTUV4Y2VwdGlvbjo6Tk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURf
RVJSOworICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgcmVtb3ZlQ2hpbGRyZW4oKTsKQEAg
LTQ2NiwyNSArNDAzLDE3IEBAIHZvaWQgSFRNTEVsZW1lbnRJbXBsOjpzZXRJbm5lclRleHQoY29u
c3QKIHZvaWQgSFRNTEVsZW1lbnRJbXBsOjpzZXRPdXRlclRleHQoY29uc3QgRE9NU3RyaW5nICZ0
ZXh0LCBpbnQgJmV4Y2VwdGlvbikKIHsKICAgICAvLyBmb2xsb3dpbmcgdGhlIElFIHNwZWNzLgot
ICAgIGlmKCBlbmRUYWdSZXF1aXJlbWVudChpZCgpKSA9PSBGT1JCSURERU4gKSB7CisgICAgaWYg
KGVuZFRhZ1JlcXVpcmVtZW50KCkgPT0gRk9SQklEREVOKSB7CiAJZXhjZXB0aW9uID0gRE9NRXhj
ZXB0aW9uOjpOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI7CiAgICAgICAgIHJldHVybjsKICAg
ICB9Ci0gICAgc3dpdGNoKCBpZCgpICkgewotICAgICAgICBjYXNlIElEX0NPTDoKLSAgICAgICAg
Y2FzZSBJRF9DT0xHUk9VUDoKLSAgICAgICAgY2FzZSBJRF9GUkFNRVNFVDoKLSAgICAgICAgY2Fz
ZSBJRF9IRUFEOgotICAgICAgICBjYXNlIElEX0hUTUw6Ci0gICAgICAgIGNhc2UgSURfVEFCTEU6
Ci0gICAgICAgIGNhc2UgSURfVEJPRFk6Ci0gICAgICAgIGNhc2UgSURfVEZPT1Q6Ci0gICAgICAg
IGNhc2UgSURfVEhFQUQ6Ci0gICAgICAgIGNhc2UgSURfVFI6Ci0gICAgICAgICAgICBleGNlcHRp
b24gPSBET01FeGNlcHRpb246Ok5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUjsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOworCisgICAg
aWYgKGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmNvbCgpKSB8fCBoYXNMb2NhbE5hbWUoSFRNTE5h
bWVzOjpjb2xncm91cCgpKSB8fCBoYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpmcmFtZXNldCgpKSB8
fAorICAgICAgICBoYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpoZWFkKCkpIHx8IGhhc0xvY2FsTmFt
ZShIVE1MTmFtZXM6Omh0bWwoKSkgfHwgaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dGFibGUoKSkg
fHwgCisgICAgICAgIGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnRib2R5KCkpIHx8IGhhc0xvY2Fs
TmFtZShIVE1MTmFtZXM6OnRmb290KCkpIHx8IGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnRoZWFk
KCkpIHx8CisgICAgICAgIGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnRyKCkpKSB7CisgICAgICAg
IGV4Y2VwdGlvbiA9IERPTUV4Y2VwdGlvbjo6Tk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOwor
ICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgTm9kZUltcGwgKnBhcmVudCA9IHBhcmVudE5v
ZGUoKTsKQEAgLTUyNSwxNyArNDU0LDYgQEAgdm9pZCBIVE1MRWxlbWVudEltcGw6OnNldE91dGVy
VGV4dChjb25zdAogICAgIH0KIH0KIAotCi1ET01TdHJpbmcgSFRNTEVsZW1lbnRJbXBsOjpuYW1l
c3BhY2VVUkkoKSBjb25zdAotewotICAgIC8vIEZvciBIVE1MIGRvY3VtZW50cywgd2UgdHJlYXQg
SFRNTCBlbGVtZW50cyBhcyBoYXZpbmcgbm8gbmFtZXNwYWNlLiBCdXQgZm9yIFhNTCBkb2N1bWVu
dHMKLSAgICAvLyB0aGUgZWxlbWVudHMgaGF2ZSB0aGUgbmFtZXNwYWNlIGRlZmluZWQgaW4gdGhl
IFhIVE1MIHNwZWMKLSAgICBpZiAoZ2V0RG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSkKLSAg
ICAgICAgcmV0dXJuIERPTVN0cmluZygpOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIFhIVE1M
X05BTUVTUEFDRTsKLX0KLQogdm9pZCBIVE1MRWxlbWVudEltcGw6OmFkZEhUTUxBbGlnbm1lbnQo
TWFwcGVkQXR0cmlidXRlSW1wbCogYXR0cikKIHsKICAgICAvL3FEZWJ1ZygiYWxpZ25tZW50IGlz
ICVzIiwgYWxpZ25tZW50LnN0cmluZygpLmxhdGluMSgpICk7CkBAIC02ODIsOSArNjAwLDkgQEAg
RE9NU3RyaW5nIEhUTUxFbGVtZW50SW1wbDo6dG9TdHJpbmcoKSBjbwogCURPTVN0cmluZyByZXN1
bHQgPSBvcGVuVGFnU3RhcnRUb1N0cmluZygpOwogCXJlc3VsdCArPSAiPiI7CiAKLQlpZiAoZW5k
VGFnUmVxdWlyZW1lbnQoaWQoKSkgPT0gUkVRVUlSRUQpIHsKKwlpZiAoZW5kVGFnUmVxdWlyZW1l
bnQoKSA9PSBSRVFVSVJFRCkgewogCSAgICByZXN1bHQgKz0gIjwvIjsKLQkgICAgcmVzdWx0ICs9
IHRhZ05hbWUoKTsKKwkgICAgcmVzdWx0ICs9IG5vZGVOYW1lKCk7CiAJICAgIHJlc3VsdCArPSAi
PiI7CiAJfQogCkBAIC03NDksMTUgKzY2NywzIEBAIFNoYXJlZFB0cjxIVE1MQ29sbGVjdGlvbklt
cGw+IEhUTUxFbGVtZW4KICAgICByZXR1cm4gU2hhcmVkUHRyPEhUTUxDb2xsZWN0aW9uSW1wbD4o
bmV3IEhUTUxDb2xsZWN0aW9uSW1wbCh0aGlzLCBIVE1MQ29sbGVjdGlvbkltcGw6Ok5PREVfQ0hJ
TERSRU4pKTsKIH0KIAotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1IVE1MR2VuZXJpY0VsZW1lbnRJ
bXBsOjpIVE1MR2VuZXJpY0VsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIHVzaG9ydCBpKQot
ICAgIDogSFRNTEVsZW1lbnRJbXBsKGRvYykKLXsKLSAgICBtX2VsZW1lbnRJZCA9IGk7Ci19Ci0K
LU5vZGVJbXBsOjpJZCBIVE1MR2VuZXJpY0VsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1fZWxlbWVudElkOwotfQpJbmRleDoga2h0bWwvaHRtbC9odG1sX2VsZW1lbnRpbXBs
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1s
X2VsZW1lbnRpbXBsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzUKZGlmZiAtdSAtcCAtcjEu
MzUga2h0bWwvaHRtbC9odG1sX2VsZW1lbnRpbXBsLmgKLS0tIGtodG1sL2h0bWwvaHRtbF9lbGVt
ZW50aW1wbC5oCTExIE1heSAyMDA1IDA1OjQ5OjM0IC0wMDAwCTEuMzUKKysrIGtodG1sL2h0bWwv
aHRtbF9lbGVtZW50aW1wbC5oCTE2IEp1biAyMDA1IDIzOjAyOjE0IC0wMDAwCkBAIC0yNSwyNyAr
MjUsMjQgQEAKICNkZWZpbmUgSFRNTF9FTEVNRU5USU1QTF9ICiAKICNpbmNsdWRlICJ4bWwvZG9t
X2VsZW1lbnRpbXBsLmgiCi0jaW5jbHVkZSA8cXB0cmRpY3QuaD4KKyNpbmNsdWRlICJodG1sbmFt
ZXMuaCIKIAogbmFtZXNwYWNlIERPTSB7CiAKIGNsYXNzIERvY3VtZW50RnJhZ21lbnRJbXBsOwog
Y2xhc3MgRE9NU3RyaW5nOwogY2xhc3MgSFRNTENvbGxlY3Rpb25JbXBsOwotICAgIAorCitlbnVt
IEhUTUxUYWdTdGF0dXMgeyBPUFRJT05BTCwgUkVRVUlSRUQsIEZPUkJJRERFTiB9OworCiBjbGFz
cyBIVE1MRWxlbWVudEltcGwgOiBwdWJsaWMgU3R5bGVkRWxlbWVudEltcGwKIHsKIHB1YmxpYzoK
LSAgICBIVE1MRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYyk7Ci0KKyAgICBIVE1MRWxlbWVu
dEltcGwoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnRQdHIgKmRvYyk7CiAg
ICAgdmlydHVhbCB+SFRNTEVsZW1lbnRJbXBsKCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNIVE1M
RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHZpcnR1YWwgYm9vbCBpc0lu
bGluZSgpIGNvbnN0OwotICAgICAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3QgPSAwOwotICAg
IAogICAgIHZpcnR1YWwgYm9vbCBtYXBUb0VudHJ5KElkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVu
dHJ5JiByZXN1bHQpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0
ZShNYXBwZWRBdHRyaWJ1dGVJbXBsKiBhdHRyKTsKIApAQCAtNzMsOCArNzAsNiBAQCBwdWJsaWM6
CiAgICAgdm9pZCBzZXRPdXRlckhUTUwoY29uc3QgRE9NU3RyaW5nICZodG1sLCBpbnQgJmV4Y2Vw
dGlvbik7CiAgICAgdm9pZCBzZXRJbm5lclRleHQoY29uc3QgRE9NU3RyaW5nICZ0ZXh0LCBpbnQg
JmV4Y2VwdGlvbik7CiAgICAgdm9pZCBzZXRPdXRlclRleHQoY29uc3QgRE9NU3RyaW5nICZ0ZXh0
LCBpbnQgJmV4Y2VwdGlvbik7Ci0KLSAgICB2aXJ0dWFsIERPTVN0cmluZyBuYW1lc3BhY2VVUkko
KSBjb25zdDsKICAgICAKICAgICB2aXJ0dWFsIGJvb2wgaXNGb2N1c2FibGUoKSBjb25zdDsKICAg
ICB2aXJ0dWFsIGJvb2wgaXNDb250ZW50RWRpdGFibGUoKSBjb25zdDsKQEAgLTg5LDIyICs4NCwx
NiBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIERPTVN0cmluZyB0b1N0cmluZygpIGNvbnN0Owog
CisgICAgLy8gU2FtZSB2YWx1ZXMgYXMgPHNwYW4+LiAgVGhpcyB3YXkgY3VzdG9tIHRhZyBuYW1l
IGVsZW1lbnRzIHdpbGwgYmVoYXZlIGxpa2UgaW5saW5lIHNwYW5zLgorICAgIHZpcnR1YWwgSFRN
TFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFJFUVVJUkVEOyB9
CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAxOyB9CisgICAg
CiBwcm90ZWN0ZWQ6CiAKICAgICAvLyBmb3IgSU1HLCBPQkpFQ1QgYW5kIEFQUExFVAogICAgIHZv
aWQgYWRkSFRNTEFsaWdubWVudChNYXBwZWRBdHRyaWJ1dGVJbXBsKiBodG1sQXR0cik7CiB9Owog
Ci1jbGFzcyBIVE1MR2VuZXJpY0VsZW1lbnRJbXBsIDogcHVibGljIEhUTUxFbGVtZW50SW1wbAot
ewotcHVibGljOgotICAgIEhUTUxHZW5lcmljRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywg
dXNob3J0IGVsZW1lbnRJZCk7Ci0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwotCi1wcm90ZWN0
ZWQ6Ci0gICAgdXNob3J0IG1fZWxlbWVudElkOwotfTsKLQogfSAvL25hbWVzcGFjZQogCiAjZW5k
aWYKSW5kZXg6IGtodG1sL2h0bWwvaHRtbF9mb3JtaW1wbC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sX2Zvcm1pbXBsLmNwcCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS4xNjEKZGlmZiAtdSAtcCAtcjEuMTYxIGtodG1sL2h0bWwvaHRtbF9m
b3JtaW1wbC5jcHAKLS0tIGtodG1sL2h0bWwvaHRtbF9mb3JtaW1wbC5jcHAJMzEgTWF5IDIwMDUg
MDU6NDg6NDEgLTAwMDAJMS4xNjEKKysrIGtodG1sL2h0bWwvaHRtbF9mb3JtaW1wbC5jcHAJMTYg
SnVuIDIwMDUgMjM6MDI6MTYgLTAwMDAKQEAgLTEwMyw3ICsxMDMsNyBAQCBwcml2YXRlOgogfTsK
IAogSFRNTEZvcm1FbGVtZW50SW1wbDo6SFRNTEZvcm1FbGVtZW50SW1wbChEb2N1bWVudFB0ciAq
ZG9jKQotICAgIDogSFRNTEVsZW1lbnRJbXBsKGRvYykKKyAgICA6IEhUTUxFbGVtZW50SW1wbChI
VE1MTmFtZXM6OmZvcm0oKSwgZG9jKQogewogICAgIGNvbGxlY3Rpb25JbmZvID0gMDsKICAgICBt
X3Bvc3QgPSBmYWxzZTsKQEAgLTEzMCwxMSArMTMwLDYgQEAgSFRNTEZvcm1FbGVtZW50SW1wbDo6
fkhUTUxGb3JtRWxlbWVudEltcAogICAgICAgICBpbWdFbGVtZW50c1tpXS0+bV9mb3JtID0gMDsK
IH0KIAotTm9kZUltcGw6OklkIEhUTUxGb3JtRWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gSURfRk9STTsKLX0KLQogI2lmIEFQUExFX0NIQU5HRVMKIAogYm9vbCBIVE1MRm9y
bUVsZW1lbnRJbXBsOjpmb3JtV291bGRIYXZlU2VjdXJlU3VibWlzc2lvbihjb25zdCBET01TdHJp
bmcgJnVybCkKQEAgLTE5Miw3ICsxODcsNyBAQCB2b2lkIEhUTUxGb3JtRWxlbWVudEltcGw6OnN1
Ym1pdENsaWNrKCkKIHsKICAgICBib29sIHN1Ym1pdEZvdW5kID0gZmFsc2U7CiAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGZvcm1FbGVtZW50cy5jb3VudCgpOyArK2kpIHsKLSAgICAgICAg
aWYgKGZvcm1FbGVtZW50c1tpXS0+aWQoKSA9PSBJRF9JTlBVVCkgeworICAgICAgICBpZiAoZm9y
bUVsZW1lbnRzW2ldLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjppbnB1dCgpKSkgewogICAgICAg
ICAgICAgSFRNTElucHV0RWxlbWVudEltcGwgKmVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MSW5w
dXRFbGVtZW50SW1wbCAqPihmb3JtRWxlbWVudHNbaV0pOwogICAgICAgICAgICAgaWYgKGVsZW1l
bnQtPmlzU3VjY2Vzc2Z1bFN1Ym1pdEJ1dHRvbigpICYmIGVsZW1lbnQtPnJlbmRlcmVyKCkpIHsK
ICAgICAgICAgICAgICAgICBzdWJtaXRGb3VuZCA9IHRydWU7CkBAIC0zOTksNyArMzk0LDcgQEAg
Ym9vbCBIVE1MRm9ybUVsZW1lbnRJbXBsOjpmb3JtRGF0YShGb3JtRAogCiAgICAgICAgICAgICAg
ICAgICAgIC8vIGlmIHRoZSBjdXJyZW50IHR5cGUgaXMgRklMRSwgdGhlbiB3ZSBhbHNvIG5lZWQg
dG8KICAgICAgICAgICAgICAgICAgICAgLy8gaW5jbHVkZSB0aGUgZmlsZW5hbWUKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKGN1cnJlbnQtPm5vZGVUeXBlKCkgPT0gTm9kZTo6RUxFTUVOVF9OT0RF
ICYmIGN1cnJlbnQtPmlkKCkgPT0gSURfSU5QVVQgJiYKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGN1cnJlbnQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmlucHV0KCkpICYmCiAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50SW1wbCo+KGN1cnJlbnQp
LT5pbnB1dFR5cGUoKSA9PSBIVE1MSW5wdXRFbGVtZW50SW1wbDo6RklMRSkKICAgICAgICAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgUVN0cmluZyBwYXRoID0gc3RhdGlj
X2Nhc3Q8SFRNTElucHV0RWxlbWVudEltcGwqPihjdXJyZW50KS0+dmFsdWUoKS5zdHJpbmcoKTsK
QEAgLTU0Nyw3ICs1NDIsNyBAQCB2b2lkIEhUTUxGb3JtRWxlbWVudEltcGw6OnN1Ym1pdCggYm9v
bCBhCiAjaWYgQVBQTEVfQ0hBTkdFUwogICAgICAgICAvLyBPdXIgYXBwIG5lZWRzIHRvIGdldCBm
b3JtIHZhbHVlcyBmb3IgcGFzc3dvcmQgZmllbGRzIGZvciBkb2luZyBwYXNzd29yZCBhdXRvY29t
cGxldGUsCiAgICAgICAgIC8vIHNvIHdlIGFyZSBtb3JlIGxlbmllbnQgaW4gcHVzaGluZyB2YWx1
ZXMsIGFuZCBsZXQgdGhlIGFwcCBkZWNpZGUgd2hhdCB0byBzYXZlIHdoZW4uCi0gICAgICAgIGlm
IChjdXJyZW50LT5pZCgpID09IElEX0lOUFVUKSB7CisgICAgICAgIGlmIChjdXJyZW50LT5oYXNM
b2NhbE5hbWUoSFRNTE5hbWVzOjppbnB1dCgpKSkgewogICAgICAgICAgICAgSFRNTElucHV0RWxl
bWVudEltcGwgKmlucHV0ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudEltcGwqPihjdXJy
ZW50KTsKICAgICAgICAgICAgIGlmIChpbnB1dC0+aW5wdXRUeXBlKCkgPT0gSFRNTElucHV0RWxl
bWVudEltcGw6OlRFWFQKICAgICAgICAgICAgICAgICB8fCBpbnB1dC0+aW5wdXRUeXBlKCkgPT0g
IEhUTUxJbnB1dEVsZW1lbnRJbXBsOjpQQVNTV09SRApAQCAtNzA5LDcgKzcwNCw3IEBAIHZvaWQg
SFRNTEZvcm1FbGVtZW50SW1wbDo6cmFkaW9DbGlja2VkKCAKIHsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZm9ybUVsZW1lbnRzLmNvdW50KCk7ICsraSkgewogICAgICAgICBIVE1MR2Vu
ZXJpY0Zvcm1FbGVtZW50SW1wbCAqY3VycmVudCA9IGZvcm1FbGVtZW50c1tpXTsKLSAgICAgICAg
aWYgKGN1cnJlbnQtPmlkKCkgPT0gSURfSU5QVVQgJiYKKyAgICAgICAgaWYgKGN1cnJlbnQtPmhh
c0xvY2FsTmFtZShIVE1MTmFtZXM6OmlucHV0KCkpICYmCiAgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxIVE1MSW5wdXRFbGVtZW50SW1wbCo+KGN1cnJlbnQpLT5pbnB1dFR5cGUoKSA9PSBIVE1MSW5w
dXRFbGVtZW50SW1wbDo6UkFESU8gJiYKICAgICAgICAgICAgIGN1cnJlbnQgIT0gY2FsbGVyICYm
IGN1cnJlbnQtPmZvcm0oKSA9PSBjYWxsZXItPmZvcm0oKSAmJiBjdXJyZW50LT5uYW1lKCkgPT0g
Y2FsbGVyLT5uYW1lKCkpIHsKICAgICAgICAgICAgIHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1l
bnRJbXBsKj4oY3VycmVudCktPnNldENoZWNrZWQoZmFsc2UpOwpAQCAtODM1LDggKzgzMCw4IEBA
IHZvaWQgSFRNTEZvcm1FbGVtZW50SW1wbDo6c2V0VGFyZ2V0KGNvbnMKIAogLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQogCi1IVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbDo6SFRNTEdlbmVyaWNGb3JtRWxl
bWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgSFRNTEZvcm1FbGVtZW50SW1wbCAqZikKLSAgICA6
IEhUTUxFbGVtZW50SW1wbChkb2MpCitIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbDo6SFRNTEdl
bmVyaWNGb3JtRWxlbWVudEltcGwoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1l
bnRQdHIgKmRvYywgSFRNTEZvcm1FbGVtZW50SW1wbCAqZikKKyAgICA6IEhUTUxFbGVtZW50SW1w
bCh0YWdOYW1lLCBkb2MpCiB7CiAgICAgbV9kaXNhYmxlZCA9IG1fcmVhZE9ubHkgPSBmYWxzZTsK
ICAgICBtX2Rvcm1hbnQgPSBmYWxzZTsKQEAgLTkzOCw5ICs5MzMsOCBAQCB2b2lkIEhUTUxHZW5l
cmljRm9ybUVsZW1lbnRJbXBsOjpyZW1vdmVkCiBIVE1MRm9ybUVsZW1lbnRJbXBsICpIVE1MR2Vu
ZXJpY0Zvcm1FbGVtZW50SW1wbDo6Z2V0Rm9ybSgpIGNvbnN0CiB7CiAgICAgTm9kZUltcGwgKnAg
PSBwYXJlbnROb2RlKCk7Ci0gICAgd2hpbGUocCkKLSAgICB7Ci0gICAgICAgIGlmKCBwLT5pZCgp
ID09IElEX0ZPUk0gKQorICAgIHdoaWxlKHApIHsKKyAgICAgICAgaWYgKHAtPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjpmb3JtKCkpKQogICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxG
b3JtRWxlbWVudEltcGwgKj4ocCk7CiAgICAgICAgIHAgPSBwLT5wYXJlbnROb2RlKCk7CiAgICAg
fQpAQCAtMTE2MCw3ICsxMTU0LDcgQEAgdm9pZCBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbDo6
c2V0VGFiSQogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MQnV0dG9uRWxlbWVudEltcGw6OkhU
TUxCdXR0b25FbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBs
ICpmKQotICAgIDogSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwoZG9jLCBmKQorICAgIDogSFRN
TEdlbmVyaWNGb3JtRWxlbWVudEltcGwoSFRNTE5hbWVzOjpidXR0b24oKSwgZG9jLCBmKQogewog
ICAgIG1fdHlwZSA9IFNVQk1JVDsKICAgICBtX2RpcnR5ID0gdHJ1ZTsKQEAgLTExNzEsMTEgKzEx
NjUsNiBAQCBIVE1MQnV0dG9uRWxlbWVudEltcGw6On5IVE1MQnV0dG9uRWxlbWVuCiB7CiB9CiAK
LU5vZGVJbXBsOjpJZCBIVE1MQnV0dG9uRWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gSURfQlVUVE9OOwotfQotCiBET01TdHJpbmcgSFRNTEJ1dHRvbkVsZW1lbnRJbXBsOjp0
eXBlKCkgY29uc3QKIHsKICAgICByZXR1cm4gZ2V0QXR0cmlidXRlKEFUVFJfVFlQRSk7CkBAIC0x
MzEwLDcgKzEyOTksNyBAQCB2b2lkIEhUTUxCdXR0b25FbGVtZW50SW1wbDo6c2V0VmFsdWUoY29u
CiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxGaWVsZFNldEVsZW1lbnRJbXBsOjpIVE1MRmll
bGRTZXRFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpm
KQotICAgOiBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbChkb2MsIGYpCisgICA6IEhUTUxHZW5l
cmljRm9ybUVsZW1lbnRJbXBsKEhUTUxOYW1lczo6ZmllbGRzZXQoKSwgZG9jLCBmKQogewogfQog
CkBAIC0xMzIzLDExICsxMzEyLDYgQEAgYm9vbCBIVE1MRmllbGRTZXRFbGVtZW50SW1wbDo6aXNG
b2N1c2FibAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxGaWVsZFNl
dEVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0ZJRUxEU0VUOwotfQot
CiBET01TdHJpbmcgSFRNTEZpZWxkU2V0RWxlbWVudEltcGw6OnR5cGUoKSBjb25zdAogewogICAg
IHJldHVybiAiZmllbGRzZXQiOwpAQCAtMTM0MSw4ICsxMzI1LDIxIEBAIFJlbmRlck9iamVjdCog
SFRNTEZpZWxkU2V0RWxlbWVudEltcGw6OmMKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogSFRNTElu
cHV0RWxlbWVudEltcGw6OkhUTUxJbnB1dEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIEhU
TUxGb3JtRWxlbWVudEltcGwgKmYpCi0gICAgOiBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbChk
b2MsIGYpLCBtX2ltYWdlTG9hZGVyKDApLCBtX3ZhbHVlTWF0Y2hlc1JlbmRlcmVyKGZhbHNlKQor
ICAgIDogSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwoSFRNTE5hbWVzOjppbnB1dCgpLCBkb2Ms
IGYpCit7CisgICAgaW5pdCgpOworfQorCitIVE1MSW5wdXRFbGVtZW50SW1wbDo6SFRNTElucHV0
RWxlbWVudEltcGwoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnRQdHIgKmRv
YywgSFRNTEZvcm1FbGVtZW50SW1wbCAqZikKKyAgICA6IEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJ
bXBsKHRhZ05hbWUsIGRvYywgZikKIHsKKyAgICBpbml0KCk7Cit9CisKK3ZvaWQgSFRNTElucHV0
RWxlbWVudEltcGw6OmluaXQoKQoreworICAgIG1faW1hZ2VMb2FkZXIgPSAwOworICAgIG1fdmFs
dWVNYXRjaGVzUmVuZGVyZXIgPSBmYWxzZTsKICAgICBtX3R5cGUgPSBURVhUOwogICAgIG1fbWF4
TGVuID0gLTE7CiAgICAgbV9zaXplID0gMjA7CkBAIC0xMzYwLDggKzEzNTcsOCBAQCBIVE1MSW5w
dXRFbGVtZW50SW1wbDo6SFRNTElucHV0RWxlbWVudEltCiAKICAgICBtX21heFJlc3VsdHMgPSAt
MTsKIAotICAgIGlmICggbV9mb3JtICkKLSAgICAgICAgbV9hdXRvY29tcGxldGUgPSBmLT5hdXRv
Q29tcGxldGUoKTsKKyAgICBpZiAobV9mb3JtKQorICAgICAgICBtX2F1dG9jb21wbGV0ZSA9IG1f
Zm9ybS0+YXV0b0NvbXBsZXRlKCk7CiB9CiAKIEhUTUxJbnB1dEVsZW1lbnRJbXBsOjp+SFRNTElu
cHV0RWxlbWVudEltcGwoKQpAQCAtMTM3MCwxMSArMTM2Nyw2IEBAIEhUTUxJbnB1dEVsZW1lbnRJ
bXBsOjp+SFRNTElucHV0RWxlbWVudEkKICAgICBkZWxldGUgbV9pbWFnZUxvYWRlcjsKIH0KIAot
Tm9kZUltcGw6OklkIEhUTUxJbnB1dEVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIElEX0lOUFVUOwotfQotCiB2b2lkIEhUTUxJbnB1dEVsZW1lbnRJbXBsOjpzZXRUeXBlKGNv
bnN0IERPTVN0cmluZyYgdCkKIHsKICAgICB0eXBlRW51bSBuZXdUeXBlOwpAQCAtMjM1MCw3ICsy
MzQyLDcgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50SW1wbDo6c2V0VXNlTWFwKGNvbgogLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQogCiBIVE1MTGFiZWxFbGVtZW50SW1wbDo6SFRNTExhYmVsRWxlbWVudElt
cGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50SW1wbChkb2MpCisgICAgOiBI
VE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjpsYWJlbCgpLCBkb2MpCiB7CiB9CiAKQEAgLTIzNjMs
MTEgKzIzNTUsNiBAQCBib29sIEhUTUxMYWJlbEVsZW1lbnRJbXBsOjppc0ZvY3VzYWJsZSgpCiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTExhYmVsRWxlbWVudEltcGw6
OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfTEFCRUw7Ci19Ci0KIHZvaWQgSFRNTExhYmVs
RWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0
dHIpCiB7CiAgICAgc3dpdGNoKGF0dHItPmlkKCkpCkBAIC0yNDQ0LDcgKzI0MzEsNyBAQCB2b2lk
IEhUTUxMYWJlbEVsZW1lbnRJbXBsOjpzZXRIdG1sRm9yKGNvCiAvLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CiAKIEhUTUxMZWdlbmRFbGVtZW50SW1wbDo6SFRNTExlZ2VuZEVsZW1lbnRJbXBsKERvY3VtZW50
UHRyICpkb2MsIEhUTUxGb3JtRWxlbWVudEltcGwgKmYpCi06IEhUTUxHZW5lcmljRm9ybUVsZW1l
bnRJbXBsKGRvYywgZikKKzogSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwoSFRNTE5hbWVzOjps
ZWdlbmQoKSwgZG9jLCBmKQogewogfQogCkBAIC0yNDU3LDExICsyNDQ0LDYgQEAgYm9vbCBIVE1M
TGVnZW5kRWxlbWVudEltcGw6OmlzRm9jdXNhYmxlKAogICAgIHJldHVybiBmYWxzZTsKIH0KIAot
Tm9kZUltcGw6OklkIEhUTUxMZWdlbmRFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJl
dHVybiBJRF9MRUdFTkQ7Ci19Ci0KIFJlbmRlck9iamVjdCogSFRNTExlZ2VuZEVsZW1lbnRJbXBs
OjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSogYXJlbmEsIFJlbmRlclN0eWxlKiBzdHlsZSkK
IHsKICAgICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVyTGVnZW5kKHRoaXMpOwpAQCAtMjQ5NSw4
ICsyNDc3LDIwIEBAIHZvaWQgSFRNTExlZ2VuZEVsZW1lbnRJbXBsOjpzZXRBbGlnbihjb24KIC8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KIAogSFRNTFNlbGVjdEVsZW1lbnRJbXBsOjpIVE1MU2VsZWN0RWxl
bWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgSFRNTEZvcm1FbGVtZW50SW1wbCAqZikKLSAgICA6
IEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKGRvYywgZiksIG1fb3B0aW9ucygwKQorICAgIDog
SFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwoSFRNTE5hbWVzOjpzZWxlY3QoKSwgZG9jLCBmKSwg
bV9vcHRpb25zKDApCit7CisgICAgaW5pdCgpOworfQorCitIVE1MU2VsZWN0RWxlbWVudEltcGw6
OkhUTUxTZWxlY3RFbGVtZW50SW1wbChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1
bWVudFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmKQorICAgIDogSFRNTEdlbmVyaWNG
b3JtRWxlbWVudEltcGwodGFnTmFtZSwgZG9jLCBmKSwgbV9vcHRpb25zKDApCit7CisgICAgaW5p
dCgpOworfQorCit2b2lkIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6aW5pdCgpCiB7CisgICAgbV9v
cHRpb25zID0gMDsKICAgICBtX211bHRpcGxlID0gZmFsc2U7CiAgICAgbV9yZWNhbGNMaXN0SXRl
bXMgPSBmYWxzZTsKICAgICAvLyAwIG1lYW5zIGludmFsaWQgKGkuZS4gbm90IHNldCkKQEAgLTI1
MTMsMTEgKzI1MDcsNiBAQCBIVE1MU2VsZWN0RWxlbWVudEltcGw6On5IVE1MU2VsZWN0RWxlbWVu
CiAgICAgfQogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTFNlbGVjdEVsZW1lbnRJbXBsOjppZCgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIElEX1NFTEVDVDsKLX0KLQogdm9pZCBIVE1MU2VsZWN0RWxlbWVu
dEltcGw6OnJlY2FsY1N0eWxlKCBTdHlsZUNoYW5nZSBjaCApCiB7CiAgICAgaWYgKGhhc0NoYW5n
ZWRDaGlsZCgpICYmIG1fcmVuZGVyKSB7CkBAIC0yNTM5LDcgKzI1MjgsNyBAQCBsb25nIEhUTUxT
ZWxlY3RFbGVtZW50SW1wbDo6c2VsZWN0ZWRJbmRlCiAgICAgdWludCBvID0gMDsKICAgICBRTWVt
QXJyYXk8SFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwqPiBpdGVtcyA9IGxpc3RJdGVtcygpOwog
ICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyBpKyspIHsKLSAg
ICAgICAgaWYgKGl0ZW1zW2ldLT5pZCgpID09IElEX09QVElPTikgeworICAgICAgICBpZiAoaXRl
bXNbaV0tPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9wdGlvbigpKSkgewogICAgICAgICAgICAg
aWYgKHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50SW1wbCo+KGl0ZW1zW2ldKS0+c2VsZWN0
ZWQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gbzsKICAgICAgICAgICAgIG8rKzsKQEAgLTI1
NTUsNyArMjU0NCw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnRJbXBsOjpzZXRTZWxlY3RlZEkK
ICAgICBRTWVtQXJyYXk8SFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwqPiBpdGVtcyA9IGxpc3RJ
dGVtcygpOwogICAgIGludCBsaXN0SW5kZXg7CiAgICAgZm9yIChsaXN0SW5kZXggPSAwOyBsaXN0
SW5kZXggPCBpbnQoaXRlbXMuc2l6ZSgpKTsgbGlzdEluZGV4KyspIHsKLSAgICAgICAgaWYgKGl0
ZW1zW2xpc3RJbmRleF0tPmlkKCkgPT0gSURfT1BUSU9OKQorICAgICAgICBpZiAoaXRlbXNbbGlz
dEluZGV4XS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpKQogICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnRJbXBsKj4oaXRlbXNbbGlzdEluZGV4XSktPnNl
dFNlbGVjdGVkKGZhbHNlKTsKICAgICB9CiAgICAgbGlzdEluZGV4ID0gb3B0aW9uVG9MaXN0SW5k
ZXgoaW5kZXgpOwpAQCAtMjU3MSw3ICsyNTYwLDcgQEAgbG9uZyBIVE1MU2VsZWN0RWxlbWVudElt
cGw6Omxlbmd0aCgpIGNvbgogICAgIHVpbnQgaTsKICAgICBRTWVtQXJyYXk8SFRNTEdlbmVyaWNG
b3JtRWxlbWVudEltcGwqPiBpdGVtcyA9IGxpc3RJdGVtcygpOwogICAgIGZvciAoaSA9IDA7IGkg
PCBpdGVtcy5zaXplKCk7IGkrKykgewotICAgICAgICBpZiAoaXRlbXNbaV0tPmlkKCkgPT0gSURf
T1BUSU9OKQorICAgICAgICBpZiAoaXRlbXNbaV0tPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9w
dGlvbigpKSkKICAgICAgICAgICAgIGxlbisrOwogICAgIH0KICAgICByZXR1cm4gbGVuOwpAQCAt
MjU3OSw3ICsyNTY4LDcgQEAgbG9uZyBIVE1MU2VsZWN0RWxlbWVudEltcGw6Omxlbmd0aCgpIGNv
bgogCiB2b2lkIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6YWRkKCBIVE1MRWxlbWVudEltcGwgKmVs
ZW1lbnQsIEhUTUxFbGVtZW50SW1wbCAqYmVmb3JlICkKIHsKLSAgICBpZiAoIWVsZW1lbnQgfHwg
ZWxlbWVudC0+aWQoKSAhPSBJRF9PUFRJT04pCisgICAgaWYgKCFlbGVtZW50IHx8ICFlbGVtZW50
LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIGludCBleGNlcHRpb25jb2RlID0gMDsKQEAgLTI2MTMsMTMgKzI2MDIsMTIgQEAgdm9pZCBI
VE1MU2VsZWN0RWxlbWVudEltcGw6OmZvY3VzKCkKICAgICBnZXREb2N1bWVudCgpLT5zZXRGb2N1
c05vZGUodGhpcyk7CiB9CiAKLURPTVN0cmluZyBIVE1MU2VsZWN0RWxlbWVudEltcGw6OnZhbHVl
KCApCitET01TdHJpbmcgSFRNTFNlbGVjdEVsZW1lbnRJbXBsOjp2YWx1ZSgpCiB7CiAgICAgdWlu
dCBpOwogICAgIFFNZW1BcnJheTxIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbCo+IGl0ZW1zID0g
bGlzdEl0ZW1zKCk7CiAgICAgZm9yIChpID0gMDsgaSA8IGl0ZW1zLnNpemUoKTsgaSsrKSB7Ci0g
ICAgICAgIGlmICggaXRlbXNbaV0tPmlkKCkgPT0gSURfT1BUSU9OCi0gICAgICAgICAgICAmJiBz
dGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudEltcGwqPihpdGVtc1tpXSktPnNlbGVjdGVkKCkp
CisgICAgICAgIGlmIChpdGVtc1tpXS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkp
ICYmIHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50SW1wbCo+KGl0ZW1zW2ldKS0+c2VsZWN0
ZWQoKSkKICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudElt
cGwqPihpdGVtc1tpXSktPnZhbHVlKCk7CiAgICAgfQogICAgIHJldHVybiBET01TdHJpbmcoIiIp
OwpAQCAtMjYzMywxMyArMjYyMSwxMyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6c2V0
VmFsdWUoY29uCiAgICAgLy8gYW5kIG1ha2UgaXQgdGhlIGN1cnJlbnQgc2VsZWN0aW9uLgogICAg
IFFNZW1BcnJheTxIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbCo+IGl0ZW1zID0gbGlzdEl0ZW1z
KCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGl0ZW1zLnNpemUoKTsgaSsrKQotICAg
ICAgICBpZiAoaXRlbXNbaV0tPmlkKCkgPT0gSURfT1BUSU9OICYmIHN0YXRpY19jYXN0PEhUTUxP
cHRpb25FbGVtZW50SW1wbCo+KGl0ZW1zW2ldKS0+dmFsdWUoKSA9PSB2YWx1ZSkgeworICAgICAg
ICBpZiAoaXRlbXNbaV0tPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9wdGlvbigpKSAmJiBzdGF0
aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudEltcGwqPihpdGVtc1tpXSktPnZhbHVlKCkgPT0gdmFs
dWUpIHsKICAgICAgICAgICAgIHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50SW1wbCo+KGl0
ZW1zW2ldKS0+c2V0U2VsZWN0ZWQodHJ1ZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KIH0KIAotUVN0cmluZyBIVE1MU2VsZWN0RWxlbWVudEltcGw6OnN0YXRlKCApCitRU3RyaW5n
IEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6c3RhdGUoKQogewogI2lmICFBUFBMRV9DSEFOR0VTCiAg
ICAgUVN0cmluZyBzdGF0ZTsKQEAgLTI2NTIsNyArMjY0MCw3IEBAIFFTdHJpbmcgSFRNTFNlbGVj
dEVsZW1lbnRJbXBsOjpzdGF0ZSggKQogICAgIFFDaGFyIHN0YXRlQ2hhcnNbbF07CiAgICAgCiAg
ICAgZm9yKGludCBpID0gMDsgaSA8IGw7IGkrKykKLSAgICAgICAgaWYoaXRlbXNbaV0tPmlkKCkg
PT0gSURfT1BUSU9OICYmIHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50SW1wbCo+KGl0ZW1z
W2ldKS0+c2VsZWN0ZWQoKSkKKyAgICAgICAgaWYoaXRlbXNbaV0tPmhhc0xvY2FsTmFtZShIVE1M
TmFtZXM6Om9wdGlvbigpKSAmJiBzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudEltcGwqPihp
dGVtc1tpXSktPnNlbGVjdGVkKCkpCiAgICAgICAgICAgICBzdGF0ZUNoYXJzW2ldID0gJ1gnOwog
ICAgICAgICBlbHNlCiAgICAgICAgICAgICBzdGF0ZUNoYXJzW2ldID0gJy4nOwpAQCAtMjY4OSw3
ICsyNjc3LDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudEltcGw6OnJlc3RvcmVTdGF0ZQogCiAg
ICAgaW50IGwgPSBpdGVtcy5jb3VudCgpOwogICAgIGZvcihpbnQgaSA9IDA7IGkgPCBsOyBpKysp
IHsKLSAgICAgICAgaWYoaXRlbXNbaV0tPmlkKCkgPT0gSURfT1BUSU9OKSB7CisgICAgICAgIGlm
KGl0ZW1zW2ldLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvcHRpb24oKSkpIHsKICAgICAgICAg
ICAgIEhUTUxPcHRpb25FbGVtZW50SW1wbCogb2UgPSBzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxl
bWVudEltcGwqPihpdGVtc1tpXSk7CiAgICAgICAgICAgICBvZS0+c2V0U2VsZWN0ZWQoc3RhdGVb
aV0gPT0gJ1gnKTsKICAgICAgICAgfQpAQCAtMjc4MSw3ICsyNzY5LDcgQEAgYm9vbCBIVE1MU2Vs
ZWN0RWxlbWVudEltcGw6OmFwcGVuZEZvcm1EYQogCiAgICAgdWludCBpOwogICAgIGZvciAoaSA9
IDA7IGkgPCBpdGVtcy5zaXplKCk7IGkrKykgewotICAgICAgICBpZiAoaXRlbXNbaV0tPmlkKCkg
PT0gSURfT1BUSU9OKSB7CisgICAgICAgIGlmIChpdGVtc1tpXS0+aGFzTG9jYWxOYW1lKEhUTUxO
YW1lczo6b3B0aW9uKCkpKSB7CiAgICAgICAgICAgICBIVE1MT3B0aW9uRWxlbWVudEltcGwgKm9w
dGlvbiA9IHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50SW1wbCo+KGl0ZW1zW2ldKTsKICAg
ICAgICAgICAgIGlmIChvcHRpb24tPnNlbGVjdGVkKCkpIHsKICAgICAgICAgICAgICAgICBlbmNv
ZGVkX3ZhbHVlcy5hcHBlbmREYXRhKG5hbWUoKSwgb3B0aW9uLT52YWx1ZSgpKTsKQEAgLTI3OTQs
NyArMjc4Miw3IEBAIGJvb2wgSFRNTFNlbGVjdEVsZW1lbnRJbXBsOjphcHBlbmRGb3JtRGEKICAg
ICAvLyBpbiBhbnkgY2FzZS4gb3RoZXJ3aXNlIHdlIGhhdmUgbm8gY29uc2lzdGVuY3kgd2l0aCB0
aGUgRE9NIGludGVyZmFjZS4gRklYTUUhCiAgICAgLy8gd2UgcmV0dXJuIHRoZSBmaXJzdCBvbmUg
aWYgaXQgd2FzIGEgY29tYm9ib3ggc2VsZWN0CiAgICAgaWYgKCFzdWNjZXNzZnVsICYmICFtX211
bHRpcGxlICYmIG1fc2l6ZSA8PSAxICYmIGl0ZW1zLnNpemUoKSAmJgotICAgICAgICAoaXRlbXNb
MF0tPmlkKCkgPT0gSURfT1BUSU9OKSApIHsKKyAgICAgICAgKGl0ZW1zWzBdLT5oYXNMb2NhbE5h
bWUoSFRNTE5hbWVzOjpvcHRpb24oKSkpKSB7CiAgICAgICAgIEhUTUxPcHRpb25FbGVtZW50SW1w
bCAqb3B0aW9uID0gc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnRJbXBsKj4oaXRlbXNbMF0p
OwogICAgICAgICBpZiAob3B0aW9uLT52YWx1ZSgpLmlzTnVsbCgpKQogICAgICAgICAgICAgZW5j
b2RlZF92YWx1ZXMuYXBwZW5kRGF0YShuYW1lKCksIG9wdGlvbi0+dGV4dCgpLnN0cmluZygpLnN0
cmlwV2hpdGVTcGFjZSgpKTsKQEAgLTI4MTcsNyArMjgwNSw3IEBAIGludCBIVE1MU2VsZWN0RWxl
bWVudEltcGw6Om9wdGlvblRvTGlzdEkKICAgICBmb3IgKDsKICAgICAgICAgIG9wdGlvbkluZGV4
MiA8IGludChpdGVtcy5zaXplKCkpICYmIG9wdGlvbkluZGV4MiA8PSBvcHRpb25JbmRleDsKICAg
ICAgICAgIGxpc3RJbmRleCsrKSB7IC8vIG5vdCBhIHR5cG8hCi0gICAgICAgIGlmIChpdGVtc1ts
aXN0SW5kZXhdLT5pZCgpID09IElEX09QVElPTikKKyAgICAgICAgaWYgKGl0ZW1zW2xpc3RJbmRl
eF0tPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9wdGlvbigpKSkKICAgICAgICAgICAgIG9wdGlv
bkluZGV4MisrOwogICAgIH0KICAgICBsaXN0SW5kZXgtLTsKQEAgLTI4MjgsMTMgKzI4MTYsMTMg
QEAgaW50IEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6bGlzdFRvT3B0aW9uSQogewogICAgIFFNZW1B
cnJheTxIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbCo+IGl0ZW1zID0gbGlzdEl0ZW1zKCk7CiAg
ICAgaWYgKGxpc3RJbmRleCA8IDAgfHwgbGlzdEluZGV4ID49IGludChpdGVtcy5zaXplKCkpIHx8
Ci0gICAgICAgIGl0ZW1zW2xpc3RJbmRleF0tPmlkKCkgIT0gSURfT1BUSU9OKQorICAgICAgICAh
aXRlbXNbbGlzdEluZGV4XS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gLTE7CiAKICAgICBpbnQgb3B0aW9uSW5kZXggPSAwOyAvLyBhY3R1YWwgaW5k
ZXggb2Ygb3B0aW9uIG5vdCBjb3VudGluZyBPUFRHUk9VUCBlbnRyaWVzIHRoYXQgbWF5IGJlIGlu
IGxpc3QKICAgICBpbnQgaTsKICAgICBmb3IgKGkgPSAwOyBpIDwgbGlzdEluZGV4OyBpKyspCi0g
ICAgICAgIGlmIChpdGVtc1tpXS0+aWQoKSA9PSBJRF9PUFRJT04pCisgICAgICAgIGlmIChpdGVt
c1tpXS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpKQogICAgICAgICAgICAgb3B0
aW9uSW5kZXgrKzsKICAgICByZXR1cm4gb3B0aW9uSW5kZXg7CiB9CkBAIC0yODYwLDEzICsyODQ4
LDEzIEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnRJbXBsOjpyZWNhbGNMaXN0SXQKICAgICBtX2xp
c3RJdGVtcy5yZXNpemUoMCk7CiAgICAgSFRNTE9wdGlvbkVsZW1lbnRJbXBsKiBmb3VuZFNlbGVj
dGVkID0gMDsKICAgICB3aGlsZShjdXJyZW50KSB7Ci0gICAgICAgIGlmIChjdXJyZW50LT5pZCgp
ID09IElEX09QVEdST1VQICYmIGN1cnJlbnQtPmZpcnN0Q2hpbGQoKSkgeworICAgICAgICBpZiAo
Y3VycmVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9wdGdyb3VwKCkpICYmIGN1cnJlbnQtPmZp
cnN0Q2hpbGQoKSkgewogICAgICAgICAgICAgLy8gIyMjIHdoYXQgaWYgb3B0Z3JvdXAgY29udGFp
bnMganVzdCBjb21tZW50cz8gZG9uJ3Qgd2FudCBvbmUgb2Ygbm8gb3B0aW9ucyBpbiBpdC4uLgog
ICAgICAgICAgICAgbV9saXN0SXRlbXMucmVzaXplKG1fbGlzdEl0ZW1zLnNpemUoKSsxKTsKICAg
ICAgICAgICAgIG1fbGlzdEl0ZW1zW21fbGlzdEl0ZW1zLnNpemUoKS0xXSA9IHN0YXRpY19jYXN0
PEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKj4oY3VycmVudCk7CiAgICAgICAgICAgICBjdXJy
ZW50ID0gY3VycmVudC0+Zmlyc3RDaGlsZCgpOwogICAgICAgICB9Ci0gICAgICAgIGlmIChjdXJy
ZW50LT5pZCgpID09IElEX09QVElPTikgeworICAgICAgICBpZiAoY3VycmVudC0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6Om9wdGlvbigpKSkgewogICAgICAgICAgICAgbV9saXN0SXRlbXMucmVzaXpl
KG1fbGlzdEl0ZW1zLnNpemUoKSsxKTsKICAgICAgICAgICAgIG1fbGlzdEl0ZW1zW21fbGlzdEl0
ZW1zLnNpemUoKS0xXSA9IHN0YXRpY19jYXN0PEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKj4o
Y3VycmVudCk7CiAgICAgICAgICAgICBpZiAoIWZvdW5kU2VsZWN0ZWQgJiYgIW1fbXVsdGlwbGUg
JiYgbV9zaXplIDw9IDEpIHsKQEAgLTI5MDgsNyArMjg5Niw3IEBAIHZvaWQgSFRNTFNlbGVjdEVs
ZW1lbnRJbXBsOjpyZXNldCgpCiAgICAgUU1lbUFycmF5PEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJ
bXBsKj4gaXRlbXMgPSBsaXN0SXRlbXMoKTsKICAgICB1aW50IGk7CiAgICAgZm9yIChpID0gMDsg
aSA8IGl0ZW1zLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIGlmIChpdGVtc1tpXS0+aWQoKSA9PSBJ
RF9PUFRJT04pIHsKKyAgICAgICAgaWYgKGl0ZW1zW2ldLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVz
OjpvcHRpb24oKSkpIHsKICAgICAgICAgICAgIEhUTUxPcHRpb25FbGVtZW50SW1wbCAqb3B0aW9u
ID0gc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnRJbXBsKj4oaXRlbXNbaV0pOwogICAgICAg
ICAgICAgYm9vbCBzZWxlY3RlZCA9ICghb3B0aW9uLT5nZXRBdHRyaWJ1dGUoQVRUUl9TRUxFQ1RF
RCkuaXNOdWxsKCkpOwogICAgICAgICAgICAgb3B0aW9uLT5zZXRTZWxlY3RlZChzZWxlY3RlZCk7
CkBAIC0yOTI2LDcgKzI5MTQsNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6bm90aWZ5
T3B0aW9uCiAgICAgICAgIFFNZW1BcnJheTxIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbCo+IGl0
ZW1zID0gbGlzdEl0ZW1zKCk7CiAgICAgICAgIHVpbnQgaTsKICAgICAgICAgZm9yIChpID0gMDsg
aSA8IGl0ZW1zLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAoaXRlbXNbaV0tPmlkKCkg
PT0gSURfT1BUSU9OKQorICAgICAgICAgICAgaWYgKGl0ZW1zW2ldLT5oYXNMb2NhbE5hbWUoSFRN
TE5hbWVzOjpvcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTE9wdGlv
bkVsZW1lbnRJbXBsKj4oaXRlbXNbaV0pLT5tX3NlbGVjdGVkID0gKGl0ZW1zW2ldID09IHNlbGVj
dGVkT3B0aW9uKTsKICAgICAgICAgfQogICAgIH0KQEAgLTI5NzMsNyArMjk2MSw3IEBAIHZvaWQg
SFRNTFNlbGVjdEVsZW1lbnRJbXBsOjpzZXRTaXplKGxvbmcKIC8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
IAogSFRNTEtleWdlbkVsZW1lbnRJbXBsOjpIVE1MS2V5Z2VuRWxlbWVudEltcGwoRG9jdW1lbnRQ
dHIqIGRvYywgSFRNTEZvcm1FbGVtZW50SW1wbCogZikKLSAgICA6IEhUTUxTZWxlY3RFbGVtZW50
SW1wbChkb2MsIGYpCisgICAgOiBIVE1MU2VsZWN0RWxlbWVudEltcGwoSFRNTE5hbWVzOjprZXln
ZW4oKSwgZG9jLCBmKQogewogICAgIFFTdHJpbmdMaXN0IGtleXMgPSBLU1NMS2V5R2VuOjpzdXBw
b3J0ZWRLZXlTaXplcygpOwogICAgIGZvciAoUVN0cmluZ0xpc3Q6Okl0ZXJhdG9yIGkgPSBrZXlz
LmJlZ2luKCk7IGkgIT0ga2V5cy5lbmQoKTsgKytpKSB7CkBAIC0yOTgzLDExICsyOTcxLDYgQEAg
SFRNTEtleWdlbkVsZW1lbnRJbXBsOjpIVE1MS2V5Z2VuRWxlbWVudAogICAgIH0KIH0KIAotTm9k
ZUltcGw6OklkIEhUTUxLZXlnZW5FbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVy
biBJRF9LRVlHRU47Ci19Ci0KIERPTVN0cmluZyBIVE1MS2V5Z2VuRWxlbWVudEltcGw6OnR5cGUo
KSBjb25zdAogewogICAgIHJldHVybiAia2V5Z2VuIjsKQEAgLTMwNDIsNyArMzAyNSw3IEBAIGJv
b2wgSFRNTEtleWdlbkVsZW1lbnRJbXBsOjphcHBlbmRGb3JtRGEKIC8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KIAogSFRNTE9wdEdyb3VwRWxlbWVudEltcGw6OkhUTUxPcHRHcm91cEVsZW1lbnRJbXBsKERv
Y3VtZW50UHRyICpkb2MsIEhUTUxGb3JtRWxlbWVudEltcGwgKmYpCi0gICAgOiBIVE1MR2VuZXJp
Y0Zvcm1FbGVtZW50SW1wbChkb2MsIGYpCisgICAgOiBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1w
bChIVE1MTmFtZXM6Om9wdGdyb3VwKCksIGRvYywgZikKIHsKIH0KIApAQCAtMzA1NSwxMSArMzAz
OCw2IEBAIGJvb2wgSFRNTE9wdEdyb3VwRWxlbWVudEltcGw6OmlzRm9jdXNhYmwKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MT3B0R3JvdXBFbGVtZW50SW1wbDo6aWQo
KSBjb25zdAotewotICAgIHJldHVybiBJRF9PUFRHUk9VUDsKLX0KLQogRE9NU3RyaW5nIEhUTUxP
cHRHcm91cEVsZW1lbnRJbXBsOjp0eXBlKCkgY29uc3QKIHsKICAgICByZXR1cm4gIm9wdGdyb3Vw
IjsKQEAgLTMxMTMsNyArMzA5MSw3IEBAIHZvaWQgSFRNTE9wdEdyb3VwRWxlbWVudEltcGw6OnBh
cnNlTWFwcGUKIHZvaWQgSFRNTE9wdEdyb3VwRWxlbWVudEltcGw6OnJlY2FsY1NlbGVjdE9wdGlv
bnMoKQogewogICAgIE5vZGVJbXBsICpzZWxlY3QgPSBwYXJlbnROb2RlKCk7Ci0gICAgd2hpbGUg
KHNlbGVjdCAmJiBzZWxlY3QtPmlkKCkgIT0gSURfU0VMRUNUKQorICAgIHdoaWxlIChzZWxlY3Qg
JiYgIXNlbGVjdC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnNlbGVjdCgpKSkKICAgICAgICAgc2Vs
ZWN0ID0gc2VsZWN0LT5wYXJlbnROb2RlKCk7CiAgICAgaWYgKHNlbGVjdCkKICAgICAgICAgc3Rh
dGljX2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnRJbXBsKj4oc2VsZWN0KS0+c2V0UmVjYWxjTGlzdEl0
ZW1zKCk7CkBAIC0zMTMyLDcgKzMxMTAsNyBAQCB2b2lkIEhUTUxPcHRHcm91cEVsZW1lbnRJbXBs
OjpzZXRMYWJlbChjCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxPcHRpb25FbGVtZW50SW1w
bDo6SFRNTE9wdGlvbkVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIEhUTUxGb3JtRWxlbWVu
dEltcGwgKmYpCi0gICAgOiBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbChkb2MsIGYpCisgICAg
OiBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbChIVE1MTmFtZXM6Om9wdGlvbigpLCBkb2MsIGYp
CiB7CiAgICAgbV9zZWxlY3RlZCA9IGZhbHNlOwogfQpAQCAtMzE0MiwxMSArMzEyMCw2IEBAIGJv
b2wgSFRNTE9wdGlvbkVsZW1lbnRJbXBsOjppc0ZvY3VzYWJsZSgKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MT3B0aW9uRWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gSURfT1BUSU9OOwotfQotCiBET01TdHJpbmcgSFRNTE9wdGlvbkVsZW1lbnRJ
bXBsOjp0eXBlKCkgY29uc3QKIHsKICAgICByZXR1cm4gIm9wdGlvbiI7CkBAIC0zMTkzLDggKzMx
NjYsNyBAQCBsb25nIEhUTUxPcHRpb25FbGVtZW50SW1wbDo6aW5kZXgoKSBjb25zCiAgICAgaW50
IGwgPSBpdGVtcy5jb3VudCgpOwogICAgIGludCBvcHRpb25JbmRleCA9IDA7CiAgICAgZm9yKGlu
dCBpID0gMDsgaSA8IGw7IGkrKykgewotICAgICAgICBpZihpdGVtc1tpXS0+aWQoKSA9PSBJRF9P
UFRJT04pCi0gICAgICAgIHsKKyAgICAgICAgaWYgKGl0ZW1zW2ldLT5oYXNMb2NhbE5hbWUoSFRN
TE5hbWVzOjpvcHRpb24oKSkpIHsKICAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxIVE1MT3B0
aW9uRWxlbWVudEltcGwqPihpdGVtc1tpXSkgPT0gdGhpcykKICAgICAgICAgICAgICAgICByZXR1
cm4gb3B0aW9uSW5kZXg7CiAgICAgICAgICAgICBvcHRpb25JbmRleCsrOwpAQCAtMzI1OSw3ICsz
MjMxLDcgQEAgdm9pZCBIVE1MT3B0aW9uRWxlbWVudEltcGw6OmNoaWxkcmVuQ2hhbgogSFRNTFNl
bGVjdEVsZW1lbnRJbXBsICpIVE1MT3B0aW9uRWxlbWVudEltcGw6OmdldFNlbGVjdCgpIGNvbnN0
CiB7CiAgICAgTm9kZUltcGwgKnNlbGVjdCA9IHBhcmVudE5vZGUoKTsKLSAgICB3aGlsZSAoc2Vs
ZWN0ICYmIHNlbGVjdC0+aWQoKSAhPSBJRF9TRUxFQ1QpCisgICAgd2hpbGUgKHNlbGVjdCAmJiAh
c2VsZWN0LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c2VsZWN0KCkpKQogICAgICAgICBzZWxlY3Qg
PSBzZWxlY3QtPnBhcmVudE5vZGUoKTsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTFNlbGVj
dEVsZW1lbnRJbXBsKj4oc2VsZWN0KTsKIH0KQEAgLTMyODcsNyArMzI1OSw3IEBAIHZvaWQgSFRN
TE9wdGlvbkVsZW1lbnRJbXBsOjpzZXRMYWJlbChjb24KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAog
SFRNTFRleHRBcmVhRWxlbWVudEltcGw6OkhUTUxUZXh0QXJlYUVsZW1lbnRJbXBsKERvY3VtZW50
UHRyICpkb2MsIEhUTUxGb3JtRWxlbWVudEltcGwgKmYpCi0gICAgOiBIVE1MR2VuZXJpY0Zvcm1F
bGVtZW50SW1wbChkb2MsIGYpLCBtX3ZhbHVlSXNWYWxpZChmYWxzZSksIG1fdmFsdWVNYXRjaGVz
UmVuZGVyZXIoZmFsc2UpCisgICAgOiBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbChIVE1MTmFt
ZXM6OnRleHRhcmVhKCksIGRvYywgZiksIG1fdmFsdWVJc1ZhbGlkKGZhbHNlKSwgbV92YWx1ZU1h
dGNoZXNSZW5kZXJlcihmYWxzZSkKIHsKICAgICAvLyBEVEQgcmVxdWlyZXMgcm93cyAmIGNvbHMg
YmUgc3BlY2lmaWVkLCBidXQgd2Ugd2lsbCBwcm92aWRlIHJlYXNvbmFibGUgZGVmYXVsdHMKICAg
ICBtX3Jvd3MgPSAyOwpAQCAtMzMwMCwxMSArMzI3Miw2IEBAIEhUTUxUZXh0QXJlYUVsZW1lbnRJ
bXBsOjp+SFRNTFRleHRBcmVhRWwKICAgICBpZiAoZ2V0RG9jdW1lbnQoKSkgZ2V0RG9jdW1lbnQo
KS0+ZGVyZWdpc3Rlck1haW50YWluc1N0YXRlKHRoaXMpOwogfQogCi1Ob2RlSW1wbDo6SWQgSFRN
TFRleHRBcmVhRWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfVEVYVEFS
RUE7Ci19Ci0KIERPTVN0cmluZyBIVE1MVGV4dEFyZWFFbGVtZW50SW1wbDo6dHlwZSgpIGNvbnN0
CiB7CiAgICAgcmV0dXJuICJ0ZXh0YXJlYSI7CkBAIC0zNTIxLDE3ICszNDg4LDEyIEBAIHZvaWQg
SFRNTFRleHRBcmVhRWxlbWVudEltcGw6OnNldFJvd3MobG8KIC8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
IAogSFRNTElzSW5kZXhFbGVtZW50SW1wbDo6SFRNTElzSW5kZXhFbGVtZW50SW1wbChEb2N1bWVu
dFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmKQotICAgIDogSFRNTElucHV0RWxlbWVu
dEltcGwoZG9jLCBmKQorICAgIDogSFRNTElucHV0RWxlbWVudEltcGwoSFRNTE5hbWVzOjppc2lu
ZGV4KCksIGRvYywgZikKIHsKICAgICBtX3R5cGUgPSBURVhUOwogICAgIHNldE92ZXJyaWRlTmFt
ZSgiaXNpbmRleCIpOwogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTElzSW5kZXhFbGVtZW50SW1wbDo6
aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9JU0lOREVYOwotfQotCiB2b2lkIEhUTUxJc0lu
ZGV4RWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwq
IGF0dHIpCiB7CiAgICAgc3dpdGNoKGF0dHItPmlkKCkpCkluZGV4OiBraHRtbC9odG1sL2h0bWxf
Zm9ybWltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9o
dG1sL2h0bWxfZm9ybWltcGwuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS43MQpkaWZmIC11IC1w
IC1yMS43MSBraHRtbC9odG1sL2h0bWxfZm9ybWltcGwuaAotLS0ga2h0bWwvaHRtbC9odG1sX2Zv
cm1pbXBsLmgJMTIgTWF5IDIwMDUgMTc6MTE6MjIgLTAwMDAJMS43MQorKysga2h0bWwvaHRtbC9o
dG1sX2Zvcm1pbXBsLmgJMTYgSnVuIDIwMDUgMjM6MDI6MTcgLTAwMDAKQEAgLTY3LDggKzY3LDYg
QEAgcHVibGljOgogICAgIEhUTUxGb3JtRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYyk7CiAg
ICAgdmlydHVhbCB+SFRNTEZvcm1FbGVtZW50SW1wbCgpOwogCi0gICAgdmlydHVhbCBJZCBpZCgp
IGNvbnN0OwotCiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaCgpOwogICAgIHZpcnR1YWwgdm9pZCBk
ZXRhY2goKTsKIApAQCAtMTU5LDcgKzE1Nyw3IEBAIGNsYXNzIEhUTUxHZW5lcmljRm9ybUVsZW1l
bnRJbXBsIDogcHVibGkKICAgICBmcmllbmQgY2xhc3Mga2h0bWw6OlJlbmRlckZvcm1FbGVtZW50
OwogCiBwdWJsaWM6Ci0gICAgSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwoRG9jdW1lbnRQdHIg
KmRvYywgSFRNTEZvcm1FbGVtZW50SW1wbCAqZiA9IDApOworICAgIEhUTUxHZW5lcmljRm9ybUVs
ZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50UHRyICpkb2Ms
IEhUTUxGb3JtRWxlbWVudEltcGwgKmYgPSAwKTsKICAgICB2aXJ0dWFsIH5IVE1MR2VuZXJpY0Zv
cm1FbGVtZW50SW1wbCgpOwogCiAgICAgSFRNTEZvcm1FbGVtZW50SW1wbCAqZm9ybSgpIHsgcmV0
dXJuIG1fZm9ybTsgfQpAQCAtMjQyLDcgKzI0MCw2IEBAIHB1YmxpYzoKICAgICAgICAgQlVUVE9O
CiAgICAgfTsKIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKICAgICBET01TdHJpbmcgdHlw
ZSgpIGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBl
ZEF0dHJpYnV0ZUltcGwgKmF0dHIpOwpAQCAtMjgxLDggKzI3OCw2IEBAIHB1YmxpYzoKICAgICBI
VE1MRmllbGRTZXRFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJ
bXBsICpmID0gMCk7CiAKICAgICB2aXJ0dWFsIH5IVE1MRmllbGRTZXRFbGVtZW50SW1wbCgpOwot
Ci0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwogICAgIAogICAgIHZpcnR1YWwgYm9vbCBpc0Zv
Y3VzYWJsZSgpIGNvbnN0OwogICAgIApAQCAtMzI1LDkgKzMyMCwxMCBAQCBwdWJsaWM6CiAgICAg
fTsKIAogICAgIEhUTUxJbnB1dEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIEhUTUxGb3Jt
RWxlbWVudEltcGwgKmYgPSAwKTsKKyAgICBIVE1MSW5wdXRFbGVtZW50SW1wbChjb25zdCBRdWFs
aWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBs
ICpmID0gMCk7CiAgICAgdmlydHVhbCB+SFRNTElucHV0RWxlbWVudEltcGwoKTsKIAotICAgIHZp
cnR1YWwgSWQgaWQoKSBjb25zdDsKKyAgICB2b2lkIGluaXQoKTsKIAogICAgIHZpcnR1YWwgYm9v
bCBpc0VudW1lcmF0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIGlucHV0VHlwZSgpICE9IElNQUdFOyB9
CiAKQEAgLTQ1MSw4ICs0NDcsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+SFRNTExhYmVsRWxl
bWVudEltcGwoKTsKIAogICAgIHZpcnR1YWwgYm9vbCBpc0ZvY3VzYWJsZSgpIGNvbnN0OwotICAg
IAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1h
cHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICphdHRyKTsKIApAQCAtNDg1LDcgKzQ3
OSw2IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCBpc0ZvY3VzYWJsZSgpIGNvbnN0Owog
ICAgIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGtodG1sOjpSZW5k
ZXJPYmplY3QgKmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hICosIGtodG1sOjpSZW5kZXJTdHls
ZSAqKTsKIAogICAgIHZpcnR1YWwgRE9NU3RyaW5nIHR5cGUoKSBjb25zdDsKQEAgLTUwNSw5ICs0
OTgsMTEgQEAgY2xhc3MgSFRNTFNlbGVjdEVsZW1lbnRJbXBsIDogcHVibGljIEhUTQogCiBwdWJs
aWM6CiAgICAgSFRNTFNlbGVjdEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIEhUTUxGb3Jt
RWxlbWVudEltcGwgKmYgPSAwKTsKKyAgICBIVE1MU2VsZWN0RWxlbWVudEltcGwoY29uc3QgUXVh
bGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnRQdHIgKmRvYywgSFRNTEZvcm1FbGVtZW50SW1w
bCAqZiA9IDApOwogICAgIH5IVE1MU2VsZWN0RWxlbWVudEltcGwoKTsKIAotICAgIHZpcnR1YWwg
SWQgaWQoKSBjb25zdDsKKyAgICB2b2lkIGluaXQoKTsKKwogICAgIERPTVN0cmluZyB0eXBlKCkg
Y29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgcmVjYWxjU3R5bGUoIFN0eWxlQ2hhbmdlICk7CkBA
IC01OTQsOCArNTg5LDYgQEAgY2xhc3MgSFRNTEtleWdlbkVsZW1lbnRJbXBsIDogcHVibGljIEhU
TQogcHVibGljOgogICAgIEhUTUxLZXlnZW5FbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCBI
VE1MRm9ybUVsZW1lbnRJbXBsICpmID0gMCk7CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7
Ci0KICAgICBET01TdHJpbmcgdHlwZSgpIGNvbnN0OwogCiAgICAgLy8gIyMjIHRoaXMgaXMganVz
dCBhIHJvdWdoIGd1ZXNzCkBAIC02MTYsNyArNjA5LDYgQEAgcHVibGljOgogICAgIEhUTUxPcHRH
cm91cEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIEhUTUxGb3JtRWxlbWVudEltcGwgKmYg
PSAwKTsKICAgICB2aXJ0dWFsIH5IVE1MT3B0R3JvdXBFbGVtZW50SW1wbCgpOwogCi0gICAgdmly
dHVhbCBJZCBpZCgpIGNvbnN0OwogICAgIERPTVN0cmluZyB0eXBlKCkgY29uc3Q7CiAKICAgICB2
aXJ0dWFsIGJvb2wgaXNGb2N1c2FibGUoKSBjb25zdDsKQEAgLTY0NSw4ICs2MzcsNyBAQCBwdWJs
aWM6CiAgICAgSFRNTE9wdGlvbkVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIEhUTUxGb3Jt
RWxlbWVudEltcGwgKmYgPSAwKTsKIAogICAgIHZpcnR1YWwgYm9vbCBpc0ZvY3VzYWJsZSgpIGNv
bnN0OwotICAgIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKKwogICAgIERPTVN0cmluZyB0
eXBlKCkgY29uc3Q7CiAKICAgICBET01TdHJpbmcgdGV4dCgpIGNvbnN0OwpAQCAtNjk0LDggKzY4
NSw2IEBAIHB1YmxpYzoKICAgICBIVE1MVGV4dEFyZWFFbGVtZW50SW1wbChEb2N1bWVudFB0ciAq
ZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmID0gMCk7CiAgICAgfkhUTUxUZXh0QXJlYUVsZW1l
bnRJbXBsKCk7CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7Ci0KICAgICBsb25nIGNvbHMo
KSBjb25zdCB7IHJldHVybiBtX2NvbHM7IH0KIAogICAgIGxvbmcgcm93cygpIGNvbnN0IHsgcmV0
dXJuIG1fcm93czsgfQpAQCAtNzU4LDggKzc0Nyw2IEBAIGNsYXNzIEhUTUxJc0luZGV4RWxlbWVu
dEltcGwgOiBwdWJsaWMgSFQKIHB1YmxpYzoKICAgICBIVE1MSXNJbmRleEVsZW1lbnRJbXBsKERv
Y3VtZW50UHRyICpkb2MsIEhUTUxGb3JtRWxlbWVudEltcGwgKmYgPSAwKTsKIAotICAgIHZpcnR1
YWwgSWQgaWQoKSBjb25zdDsKLQogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0
ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICphdHRyKTsKIAogICAgIERPTVN0cmluZyBwcm9tcHQoKSBj
b25zdDsKSW5kZXg6IGtodG1sL2h0bWwvaHRtbF9oZWFkaW1wbC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sX2hlYWRpbXBsLmNwcCx2CnJl
dHJpZXZpbmcgcmV2aXNpb24gMS40OApkaWZmIC11IC1wIC1yMS40OCBraHRtbC9odG1sL2h0bWxf
aGVhZGltcGwuY3BwCi0tLSBraHRtbC9odG1sL2h0bWxfaGVhZGltcGwuY3BwCTExIE1heSAyMDA1
IDA1OjQ5OjM0IC0wMDAwCTEuNDgKKysrIGtodG1sL2h0bWwvaHRtbF9oZWFkaW1wbC5jcHAJMTYg
SnVuIDIwMDUgMjM6MDI6MTcgLTAwMDAKQEAgLTQ2LDcgKzQ2LDcgQEAgdXNpbmcgbmFtZXNwYWNl
IERPTTsKIHVzaW5nIG5hbWVzcGFjZSBraHRtbDsKIAogSFRNTEJhc2VFbGVtZW50SW1wbDo6SFRN
TEJhc2VFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAgIDogSFRNTEVsZW1lbnRJbXBs
KGRvYykKKyAgICA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6OmJhc2UoKSwgZG9jKQogewog
fQogCkBAIC0xMTksNyArMTE5LDcgQEAgdm9pZCBIVE1MQmFzZUVsZW1lbnRJbXBsOjpzZXRUYXJn
ZXQoY29ucwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MTGlua0VsZW1lbnRJbXBsOjpIVE1M
TGlua0VsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0gICAgOiBIVE1MRWxlbWVudEltcGwo
ZG9jKQorICAgIDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6bGluaygpLCBkb2MpCiB7CiAg
ICAgbV9zaGVldCA9IDA7CiAgICAgbV9sb2FkaW5nID0gZmFsc2U7CkBAIC00MjMsNyArNDIzLDcg
QEAgdm9pZCBIVE1MTGlua0VsZW1lbnRJbXBsOjpzZXRUeXBlKGNvbnN0IAogCiAvLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCiAKLUhUTUxNZXRhRWxlbWVudEltcGw6OkhUTUxNZXRhRWxlbWVudEltcGwoRG9j
dW1lbnRQdHIgKmRvYykgOiBIVE1MRWxlbWVudEltcGwoZG9jKQorSFRNTE1ldGFFbGVtZW50SW1w
bDo6SFRNTE1ldGFFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKSA6IEhUTUxFbGVtZW50SW1w
bChIVE1MTmFtZXM6Om1ldGEoKSwgZG9jKQogewogfQogCkBAIC01MTIsNyArNTEyLDcgQEAgdm9p
ZCBIVE1MTWV0YUVsZW1lbnRJbXBsOjpzZXRTY2hlbWUoY29ucwogLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQogCiBIVE1MU2NyaXB0RWxlbWVudEltcGw6OkhUTUxTY3JpcHRFbGVtZW50SW1wbChEb2N1bWVu
dFB0ciAqZG9jKQotICAgIDogSFRNTEVsZW1lbnRJbXBsKGRvYyksIG1fY2FjaGVkU2NyaXB0KDAp
LCBtX2NyZWF0ZWRCeVBhcnNlcihmYWxzZSkKKyAgICA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFt
ZXM6OnNjcmlwdCgpLCBkb2MpLCBtX2NhY2hlZFNjcmlwdCgwKSwgbV9jcmVhdGVkQnlQYXJzZXIo
ZmFsc2UpCiB7CiB9CiAKQEAgLTY2OSw3ICs2NjksNyBAQCB2b2lkIEhUTUxTY3JpcHRFbGVtZW50
SW1wbDo6c2V0VHlwZShjb25zCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSFRNTFN0eWxlRWxl
bWVudEltcGw6OkhUTUxTdHlsZUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpIDogSFRNTEVs
ZW1lbnRJbXBsKGRvYykKK0hUTUxTdHlsZUVsZW1lbnRJbXBsOjpIVE1MU3R5bGVFbGVtZW50SW1w
bChEb2N1bWVudFB0ciAqZG9jKSA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6OnN0eWxlKCks
IGRvYykKIHsKICAgICBtX3NoZWV0ID0gMDsKICAgICBtX2xvYWRpbmcgPSBmYWxzZTsKQEAgLTc5
Niw3ICs3OTYsNyBAQCB2b2lkIEhUTUxTdHlsZUVsZW1lbnRJbXBsOjpzZXRUeXBlKGNvbnN0CiAv
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxUaXRsZUVsZW1lbnRJbXBsOjpIVE1MVGl0bGVFbGVt
ZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAgIDogSFRNTEVsZW1lbnRJbXBsKGRvYykKKyAg
ICA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6OnRpdGxlKCksIGRvYykKIHsKIH0KIApJbmRl
eDoga2h0bWwvaHRtbC9odG1sX2ltYWdlaW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sX2ltYWdlaW1wbC5jcHAsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuNDIKZGlmZiAtdSAtcCAtcjEuNDIga2h0bWwvaHRtbC9odG1sX2ltYWdlaW1w
bC5jcHAKLS0tIGtodG1sL2h0bWwvaHRtbF9pbWFnZWltcGwuY3BwCTEyIE1heSAyMDA1IDAxOjE2
OjAxIC0wMDAwCTEuNDIKKysrIGtodG1sL2h0bWwvaHRtbF9pbWFnZWltcGwuY3BwCTE2IEp1biAy
MDA1IDIzOjAyOjE4IC0wMDAwCkBAIC01MSw3ICs1MSw3IEBACiB1c2luZyBuYW1lc3BhY2UgRE9N
OwogdXNpbmcgbmFtZXNwYWNlIGtodG1sOwogCi0vLyNkZWZpbmUgSU5TVFJVTUVOVF9MQVlPVVRf
U0NIRURVTElORyAxCisvLyAjZGVmaW5lIElOU1RSVU1FTlRfTEFZT1VUX1NDSEVEVUxJTkcgMQog
CiBIVE1MSW1hZ2VMb2FkZXI6OkhUTUxJbWFnZUxvYWRlcihFbGVtZW50SW1wbCogZWx0KQogOm1f
ZWxlbWVudChlbHQpLCBtX2ltYWdlKDApLCBtX2ZpcmVkTG9hZCh0cnVlKSwgbV9pbWFnZUNvbXBs
ZXRlKHRydWUpCkBAIC03NSw3ICs3NSw3IEBAIHZvaWQgSFRNTEltYWdlTG9hZGVyOjp1cGRhdGVG
cm9tRWxlbWVudCgKICAgICAgICAgcmV0dXJuOwogCiAgICAgQXRvbWljU3RyaW5nIGF0dHI7Ci0g
ICAgaWYgKGVsZW1lbnQoKS0+aWQoKSA9PSBJRF9PQkpFQ1QpCisgICAgaWYgKGVsZW1lbnQoKS0+
aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b2JqZWN0KCkpKQogICAgICAgICBhdHRyID0gZWxlbWVu
dCgpLT5nZXRBdHRyaWJ1dGUoQVRUUl9EQVRBKTsKICAgICBlbHNlCiAgICAgICAgIGF0dHIgPSBl
bGVtZW50KCktPmdldEF0dHJpYnV0ZShBVFRSX1NSQyk7CkBAIC04Niw2ICs4NiwxMCBAQCB2b2lk
IEhUTUxJbWFnZUxvYWRlcjo6dXBkYXRlRnJvbUVsZW1lbnQoCiAgICAgICAgIG5ld0ltYWdlID0g
ZWxlbWVudCgpLT5nZXREb2N1bWVudCgpLT5kb2NMb2FkZXIoKS0+cmVxdWVzdEltYWdlKGtodG1s
OjpwYXJzZVVSTChhdHRyKSk7CiAKICAgICBpZiAobmV3SW1hZ2UgIT0gbV9pbWFnZSkgeworI2lm
ZGVmIElOU1RSVU1FTlRfTEFZT1VUX1NDSEVEVUxJTkcKKyAgICAgICAgaWYgKCFkb2N1bWVudC0+
b3duZXJFbGVtZW50KCkgJiYgbmV3SW1hZ2UpCisgICAgICAgICAgICBwcmludGYoIkltYWdlIHJl
cXVlc3RlZCBhdCAlZFxuIiwgZWxlbWVudCgpLT5nZXREb2N1bWVudCgpLT5lbGFwc2VkVGltZSgp
KTsKKyNlbmRpZgogICAgICAgICBtX2ZpcmVkTG9hZCA9IGZhbHNlOwogICAgICAgICBtX2ltYWdl
Q29tcGxldGUgPSBmYWxzZTsKICAgICAgICAgQ2FjaGVkSW1hZ2UqIG9sZEltYWdlID0gbV9pbWFn
ZTsKQEAgLTEzMyw3ICsxMzcsNyBAQCB2b2lkIEhUTUxJbWFnZUxvYWRlcjo6bm90aWZ5RmluaXNo
ZWQoQ2FjCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxJbWFnZUVsZW1lbnRJbXBsOjpIVE1M
SW1hZ2VFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpm
KQotICAgIDogSFRNTEVsZW1lbnRJbXBsKGRvYyksIG1faW1hZ2VMb2FkZXIodGhpcyksIGlzbWFw
KGZhbHNlKSwgbV9mb3JtKGYpCisgICAgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjppbWco
KSwgZG9jKSwgbV9pbWFnZUxvYWRlcih0aGlzKSwgaXNtYXAoZmFsc2UpLCBtX2Zvcm0oZikKIHsK
ICAgICBpZiAobV9mb3JtKQogICAgICAgICBtX2Zvcm0tPnJlZ2lzdGVySW1nRWxlbWVudCh0aGlz
KTsKQEAgLTUyOCw3ICs1MzIsNyBAQCBsb25nIEhUTUxJbWFnZUVsZW1lbnRJbXBsOjp5KCkgY29u
c3QKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogSFRNTE1hcEVsZW1lbnRJbXBsOjpIVE1MTWFwRWxl
bWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50SW1wbChkb2MpCisg
ICAgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjptYXAoKSwgZG9jKQogewogfQogCkBAIC01
NTIsMzIgKzU1NiwyOCBAQCBIVE1MTWFwRWxlbWVudEltcGw6Om1hcE1vdXNlRXZlbnQoaW50IHhf
CiAgICAgUVB0clN0YWNrPE5vZGVJbXBsPiBub2RlU3RhY2s7CiAKICAgICBOb2RlSW1wbCAqY3Vy
cmVudCA9IGZpcnN0Q2hpbGQoKTsKLSAgICB3aGlsZSgxKQotICAgIHsKLSAgICAgICAgaWYoIWN1
cnJlbnQpCi0gICAgICAgIHsKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBpZiAoIWN1cnJlbnQp
IHsKICAgICAgICAgICAgIGlmKG5vZGVTdGFjay5pc0VtcHR5KCkpIGJyZWFrOwogICAgICAgICAg
ICAgY3VycmVudCA9IG5vZGVTdGFjay5wb3AoKTsKICAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJy
ZW50LT5uZXh0U2libGluZygpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAg
ICAgICAgaWYoY3VycmVudC0+aWQoKT09SURfQVJFQSkKLSAgICAgICAgeworICAgICAgICAKKyAg
ICAgICAgaWYgKGN1cnJlbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjphcmVhKCkpKSB7CiAgICAg
ICAgICAgICAvL2NvdXQgPDwgImFyZWEgZm91bmQgIiA8PCBlbmRsOwotICAgICAgICAgICAgSFRN
TEFyZWFFbGVtZW50SW1wbCogYXJlYT1zdGF0aWNfY2FzdDxIVE1MQXJlYUVsZW1lbnRJbXBsKj4o
Y3VycmVudCk7CisgICAgICAgICAgICBIVE1MQXJlYUVsZW1lbnRJbXBsKiBhcmVhID0gc3RhdGlj
X2Nhc3Q8SFRNTEFyZWFFbGVtZW50SW1wbCo+KGN1cnJlbnQpOwogICAgICAgICAgICAgaWYgKGFy
ZWEtPm1hcE1vdXNlRXZlbnQoeF8seV8sd2lkdGhfLGhlaWdodF8sIGluZm8pKQogICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CisgICAgICAgIAogICAgICAgICBOb2RlSW1w
bCAqY2hpbGQgPSBjdXJyZW50LT5maXJzdENoaWxkKCk7Ci0gICAgICAgIGlmKGNoaWxkKQotICAg
ICAgICB7CisgICAgICAgIGlmIChjaGlsZCkgewogICAgICAgICAgICAgbm9kZVN0YWNrLnB1c2go
Y3VycmVudCk7CiAgICAgICAgICAgICBjdXJyZW50ID0gY2hpbGQ7CiAgICAgICAgIH0KICAgICAg
ICAgZWxzZQotICAgICAgICB7CiAgICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC0+bmV4dFNp
YmxpbmcoKTsKLSAgICAgICAgfQogICAgIH0KIAogICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IGto
dG1sL2h0bWwvaHRtbF9pbmxpbmVpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfaW5saW5laW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuNDIKZGlmZiAtdSAtcCAtcjEuNDIga2h0bWwvaHRtbC9odG1sX2lubGluZWltcGwu
Y3BwCi0tLSBraHRtbC9odG1sL2h0bWxfaW5saW5laW1wbC5jcHAJMTEgTWF5IDIwMDUgMDU6NDk6
MzQgLTAwMDAJMS40MgorKysga2h0bWwvaHRtbC9odG1sX2lubGluZWltcGwuY3BwCTE2IEp1biAy
MDA1IDIzOjAyOjE4IC0wMDAwCkBAIC00NSw3ICs0NSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBraHRt
bDsKIG5hbWVzcGFjZSBET00gewogCiBIVE1MQW5jaG9yRWxlbWVudEltcGw6OkhUTUxBbmNob3JF
bGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAgIDogSFRNTEVsZW1lbnRJbXBsKGRvYykK
KyAgICA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6OmEoKSwgZG9jKQogewogICAgIG1faGFz
VGFyZ2V0ID0gZmFsc2U7CiB9CkBAIC0xMDQsMTEgKzEwNCw2IEBAIGJvb2wgSFRNTEFuY2hvckVs
ZW1lbnRJbXBsOjppc0tleWJvYXJkRm8KICAgICByZXR1cm4gZ2V0RG9jdW1lbnQoKS0+cGFydCgp
LT50YWJzVG9MaW5rcygpOwogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTEFuY2hvckVsZW1lbnRJbXBs
OjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0E7Ci19Ci0KIHZvaWQgSFRNTEFuY2hvckVs
ZW1lbnRJbXBsOjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50SW1wbCAqZXZ0KQogewogICAgIC8v
IFJlYWN0IG9uIGNsaWNrcyBhbmQgb24ga2V5cHJlc3Nlcy4KQEAgLTE1Miw3ICsxNDcsNyBAQCB2
b2lkIEhUTUxBbmNob3JFbGVtZW50SW1wbDo6ZGVmYXVsdEV2ZW50CiAgICAgICAgIGlmICggZSAm
JiBlLT5idXR0b24oKSA9PSAxICkKICAgICAgICAgICAgIHV0YXJnZXQgPSAiX2JsYW5rIjsKIAot
ICAgICAgICBpZiAoIGV2dC0+dGFyZ2V0KCktPmlkKCkgPT0gSURfSU1HICkgeworICAgICAgICBp
ZiAoZXZ0LT50YXJnZXQoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmltZygpKSkgewogICAgICAg
ICAgICAgSFRNTEltYWdlRWxlbWVudEltcGwqIGltZyA9IHN0YXRpY19jYXN0PEhUTUxJbWFnZUVs
ZW1lbnRJbXBsKj4oIGV2dC0+dGFyZ2V0KCkgKTsKICAgICAgICAgICAgIGlmICggaW1nICYmIGlt
Zy0+aXNTZXJ2ZXJNYXAoKSApCiAgICAgICAgICAgICB7CkBAIC0zODIsNyArMzc3LDcgQEAgdm9p
ZCBIVE1MQW5jaG9yRWxlbWVudEltcGw6OmZvY3VzKCkKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQog
Ci1IVE1MQlJFbGVtZW50SW1wbDo6SFRNTEJSRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykg
OiBIVE1MRWxlbWVudEltcGwoZG9jKQorSFRNTEJSRWxlbWVudEltcGw6OkhUTUxCUkVsZW1lbnRJ
bXBsKERvY3VtZW50UHRyICpkb2MpIDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6YnIoKSwg
ZG9jKQogewogfQogCkBAIC0zOTAsMTEgKzM4NSw2IEBAIEhUTUxCUkVsZW1lbnRJbXBsOjp+SFRN
TEJSRWxlbWVudEltcGwoKQogewogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTEJSRWxlbWVudEltcGw6
OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfQlI7Ci19Ci0KIGJvb2wgSFRNTEJSRWxlbWVu
dEltcGw6Om1hcFRvRW50cnkoTm9kZUltcGw6OklkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5
JiByZXN1bHQpIGNvbnN0CiB7CiAgICAgaWYgKGF0dHIgPT0gQVRUUl9DTEVBUikgewpAQCAtNDQ1
LDcgKzQzNSw3IEBAIHZvaWQgSFRNTEJSRWxlbWVudEltcGw6OnNldENsZWFyKGNvbnN0IEQKIC8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KIAogSFRNTEZvbnRFbGVtZW50SW1wbDo6SFRNTEZvbnRFbGVtZW50
SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAgIDogSFRNTEVsZW1lbnRJbXBsKGRvYykKKyAgICA6
IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6OmZvbnQoKSwgZG9jKQogewogfQogCkBAIC00NTMs
MTEgKzQ0Myw2IEBAIEhUTUxGb250RWxlbWVudEltcGw6On5IVE1MRm9udEVsZW1lbnRJbXAKIHsK
IH0KIAotTm9kZUltcGw6OklkIEhUTUxGb250RWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gSURfRk9OVDsKLX0KLQogLy8gQWxsb3dzIGxlYWRpbmcgc3BhY2VzLgogLy8gQWxs
b3dzIHRyYWlsaW5nIG5vbm51bWVyaWMgY2hhcmFjdGVycy4KIC8vIFJldHVybnMgMTAgZm9yIGFu
eSBzaXplIGdyZWF0ZXIgdGhhbiA5LgpAQCAtNTkwLDggKzU3NSw4IEBAIHZvaWQgSFRNTEZvbnRF
bGVtZW50SW1wbDo6c2V0U2l6ZShjb25zdCAKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1IVE1M
TW9kRWxlbWVudEltcGw6OkhUTUxNb2RFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCB1c2hv
cnQgZWxlbWVudElkKQotICAgIDogSFRNTEdlbmVyaWNFbGVtZW50SW1wbChkb2MsIGVsZW1lbnRJ
ZCkKK0hUTUxNb2RFbGVtZW50SW1wbDo6SFRNTE1vZEVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmll
ZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50UHRyICpkb2MpCisgICAgOiBIVE1MRWxlbWVudEltcGwo
dGFnTmFtZSwgZG9jKQogewogfQogCkBAIC02MTgsMTUgKzYwMywxMCBAQCB2b2lkIEhUTUxNb2RF
bGVtZW50SW1wbDo6c2V0RGF0ZVRpbWUoY29uCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxR
dW90ZUVsZW1lbnRJbXBsOjpIVE1MUXVvdGVFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQot
ICAgIDogSFRNTEVsZW1lbnRJbXBsKGRvYykKKyAgICA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFt
ZXM6OnEoKSwgZG9jKQogewogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTFF1b3RlRWxlbWVudEltcGw6
OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfUTsKLX0KLSAgICAKIERPTVN0cmluZyBIVE1M
UXVvdGVFbGVtZW50SW1wbDo6Y2l0ZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGdldEF0dHJpYnV0
ZShBVFRSX0NJVEUpOwpJbmRleDoga2h0bWwvaHRtbC9odG1sX2lubGluZWltcGwuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfaW5saW5laW1w
bC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE5CmRpZmYgLXUgLXAgLXIxLjE5IGtodG1sL2h0
bWwvaHRtbF9pbmxpbmVpbXBsLmgKLS0tIGtodG1sL2h0bWwvaHRtbF9pbmxpbmVpbXBsLmgJMTEg
TWF5IDIwMDUgMDU6NDk6MzQgLTAwMDAJMS4xOQorKysga2h0bWwvaHRtbC9odG1sX2lubGluZWlt
cGwuaAkxNiBKdW4gMjAwNSAyMzowMjoxOCAtMDAwMApAQCAtMzksNyArMzksNiBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCBib29sIGlzTW91c2VGb2N1c2FibGUoKSBjb25zdDsKICAgICB2aXJ0dWFs
IGJvb2wgaXNLZXlib2FyZEZvY3VzYWJsZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBpc0Zv
Y3VzYWJsZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKICAgICB2aXJ0dWFs
IHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqYXR0cik7CiAg
ICAgdmlydHVhbCB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnRJbXBsICpldnQpOwogICAg
IHZpcnR1YWwgdm9pZCBhY2Nlc3NLZXlBY3Rpb24oYm9vbCBmdWxsQWN0aW9uKTsKQEAgLTk3LDgg
Kzk2LDYgQEAgY2xhc3MgSFRNTEJSRWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTEVsZQogcHVibGlj
OgogICAgIEhUTUxCUkVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpOwogICAgIH5IVE1MQlJF
bGVtZW50SW1wbCgpOwotCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwogICAgIAogICAgIHZp
cnR1YWwgYm9vbCBtYXBUb0VudHJ5KElkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1
bHQpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRB
dHRyaWJ1dGVJbXBsICphdHRyKTsKQEAgLTExNiw4ICsxMTMsNiBAQCBjbGFzcyBIVE1MRm9udEVs
ZW1lbnRJbXBsIDogcHVibGljIEhUTUxFCiBwdWJsaWM6CiAgICAgSFRNTEZvbnRFbGVtZW50SW1w
bChEb2N1bWVudFB0ciAqZG9jKTsKICAgICB+SFRNTEZvbnRFbGVtZW50SW1wbCgpOwotCi0gICAg
dmlydHVhbCBJZCBpZCgpIGNvbnN0OwogICAgIAogICAgIHZpcnR1YWwgYm9vbCBtYXBUb0VudHJ5
KElkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0OwogICAgIHZpcnR1
YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICphdHRyKTsK
QEAgLTEzNCwxMCArMTI5LDEwIEBAIHB1YmxpYzoKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1j
bGFzcyBIVE1MTW9kRWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTEdlbmVyaWNFbGVtZW50SW1wbAor
Y2xhc3MgSFRNTE1vZEVsZW1lbnRJbXBsIDogcHVibGljIEhUTUxFbGVtZW50SW1wbAogewogcHVi
bGljOgotICAgIEhUTUxNb2RFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCB1c2hvcnQgZWxl
bWVudElkKTsKKyAgICBIVE1MTW9kRWxlbWVudEltcGwoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFn
TmFtZSwgRG9jdW1lbnRQdHIgKmRvYyk7CiAKICAgICBET01TdHJpbmcgY2l0ZSgpIGNvbnN0Owog
ICAgIHZvaWQgc2V0Q2l0ZShjb25zdCBET01TdHJpbmcgJik7CkBAIC0xNTIsOCArMTQ3LDYgQEAg
Y2xhc3MgSFRNTFF1b3RlRWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTAogewogcHVibGljOgogICAg
IEhUTUxRdW90ZUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpOwotCi0gICAgdmlydHVhbCBJ
ZCBpZCgpIGNvbnN0OwogICAgIAogICAgIERPTVN0cmluZyBjaXRlKCkgY29uc3Q7CiAgICAgdm9p
ZCBzZXRDaXRlKGNvbnN0IERPTVN0cmluZyAmKTsKSW5kZXg6IGtodG1sL2h0bWwvaHRtbF9saXN0
aW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRt
bC9odG1sX2xpc3RpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS45CmRpZmYgLXUgLXAg
LXIxLjkga2h0bWwvaHRtbC9odG1sX2xpc3RpbXBsLmNwcAotLS0ga2h0bWwvaHRtbC9odG1sX2xp
c3RpbXBsLmNwcAkxMSBNYXkgMjAwNSAwNTo0OTozNCAtMDAwMAkxLjkKKysrIGtodG1sL2h0bWwv
aHRtbF9saXN0aW1wbC5jcHAJMTYgSnVuIDIwMDUgMjM6MDI6MTkgLTAwMDAKQEAgLTMyLDExICsz
Miw2IEBAIHVzaW5nIG5hbWVzcGFjZSBraHRtbDsKIAogbmFtZXNwYWNlIERPTSB7CiAKLU5vZGVJ
bXBsOjpJZCBIVE1MVUxpc3RFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJ
RF9VTDsKLX0KLQogYm9vbCBIVE1MVUxpc3RFbGVtZW50SW1wbDo6bWFwVG9FbnRyeShOb2RlSW1w
bDo6SWQgYXR0ciwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3QKIHsKICAgICBz
d2l0Y2ggKGF0dHIpIHsKQEAgLTg0LDExICs3OSw2IEBAIHZvaWQgSFRNTFVMaXN0RWxlbWVudElt
cGw6OnNldFR5cGUoY29uc3QKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Ob2RlSW1wbDo6SWQg
SFRNTERpcmVjdG9yeUVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0RJ
UjsKLX0KLQogYm9vbCBIVE1MRGlyZWN0b3J5RWxlbWVudEltcGw6OmNvbXBhY3QoKSBjb25zdAog
ewogICAgIHJldHVybiAhZ2V0QXR0cmlidXRlKEFUVFJfQ09NUEFDVCkuaXNOdWxsKCk7CkBAIC0x
MDEsMTEgKzkxLDYgQEAgdm9pZCBIVE1MRGlyZWN0b3J5RWxlbWVudEltcGw6OnNldENvbXBhYwog
CiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLU5vZGVJbXBsOjpJZCBIVE1MTWVudUVsZW1lbnRJbXBs
OjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX01FTlU7Ci19Ci0KIGJvb2wgSFRNTE1lbnVF
bGVtZW50SW1wbDo6Y29tcGFjdCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuICFnZXRBdHRyaWJ1dGUo
QVRUUl9DT01QQUNUKS5pc051bGwoKTsKQEAgLTExOCwxMSArMTAzLDYgQEAgdm9pZCBIVE1MTWVu
dUVsZW1lbnRJbXBsOjpzZXRDb21wYWN0KGJvbwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLU5v
ZGVJbXBsOjpJZCBIVE1MT0xpc3RFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVy
biBJRF9PTDsKLX0KLQogYm9vbCBIVE1MT0xpc3RFbGVtZW50SW1wbDo6bWFwVG9FbnRyeShOb2Rl
SW1wbDo6SWQgYXR0ciwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3QKIHsKICAg
ICBzd2l0Y2ggKGF0dHIpIHsKQEAgLTE1NSw3ICsxMzUsNyBAQCB2b2lkIEhUTUxPTGlzdEVsZW1l
bnRJbXBsOjpwYXJzZU1hcHBlZEF0CiAgICAgY2FzZSBBVFRSX1NUQVJUOgogICAgICAgICAgICAg
X3N0YXJ0ID0gIWF0dHItPmlzTnVsbCgpID8gYXR0ci0+dmFsdWUoKS50b0ludCgpIDogMTsKICAg
ICBkZWZhdWx0OgotICAgICAgICBIVE1MVUxpc3RFbGVtZW50SW1wbDo6cGFyc2VNYXBwZWRBdHRy
aWJ1dGUoYXR0cik7CisgICAgICAgIEhUTUxFbGVtZW50SW1wbDo6cGFyc2VNYXBwZWRBdHRyaWJ1
dGUoYXR0cik7CiAgICAgfQogfQogCkBAIC0xODYsMTEgKzE2Niw2IEBAIHZvaWQgSFRNTE9MaXN0
RWxlbWVudEltcGw6OnNldFR5cGUoY29uc3QKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Ob2Rl
SW1wbDo6SWQgSFRNTExJRWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURf
TEk7Ci19Ci0KIGJvb2wgSFRNTExJRWxlbWVudEltcGw6Om1hcFRvRW50cnkoTm9kZUltcGw6Oklk
IGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0CiB7CiAgICAgc3dpdGNo
IChhdHRyKSB7CkBAIC0yNTIsMTEgKzIyNyw4IEBAIHZvaWQgSFRNTExJRWxlbWVudEltcGw6OmF0
dGFjaCgpCiAgICAgICAgIE5vZGVJbXBsICpsaXN0Tm9kZSA9IDA7CiAgICAgICAgIE5vZGVJbXBs
ICpuID0gdGhpczsKICAgICAgICAgd2hpbGUgKCFsaXN0Tm9kZSAmJiAobiA9IG4tPnBhcmVudE5v
ZGUoKSkpIHsKLSAgICAgICAgICAgIHN3aXRjaCAobi0+aWQoKSkgewotICAgICAgICAgICAgICAg
IGNhc2UgSURfVUw6Ci0gICAgICAgICAgICAgICAgY2FzZSBJRF9PTDoKLSAgICAgICAgICAgICAg
ICAgICAgbGlzdE5vZGUgPSBuOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG4tPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjp1bCgpKSB8fCBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b2wo
KSkpCisgICAgICAgICAgICAgICAgbGlzdE5vZGUgPSBuOwogICAgICAgICB9CiAgICAgICAgIAog
ICAgICAgICAvLyBJZiB3ZSBhcmUgbm90IGluIGEgbGlzdCwgdGVsbCB0aGUgcmVuZGVyZXIgc28g
aXQgY2FuIHBvc2l0aW9uIHVzIGluc2lkZS4KQEAgLTI2NSw3ICsyMzcsNyBAQCB2b2lkIEhUTUxM
SUVsZW1lbnRJbXBsOjphdHRhY2goKQogICAgICAgICAgICAgcmVuZGVyLT5zZXROb3RJbkxpc3Qo
dHJ1ZSk7CiAKIAkvLyBJZiB3ZSBhcmUgZmlyc3QsIGFuZCB0aGUgT0wgaGFzIGEgc3RhcnQgYXR0
ciwgc2V0IHRoZSB2YWx1ZS4KLQlpZiAobGlzdE5vZGUgJiYgbGlzdE5vZGUtPmlkKCkgPT0gSURf
T0wgJiYgIW1fcmVuZGVyLT5wcmV2aW91c1NpYmxpbmcoKSkgeworCWlmIChsaXN0Tm9kZSAmJiBs
aXN0Tm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9sKCkpICYmICFtX3JlbmRlci0+cHJldmlv
dXNTaWJsaW5nKCkpIHsKIAkgICAgSFRNTE9MaXN0RWxlbWVudEltcGwgKm9sID0gc3RhdGljX2Nh
c3Q8SFRNTE9MaXN0RWxlbWVudEltcGwgKj4obGlzdE5vZGUpOwogICAgICAgICAgICAgcmVuZGVy
LT5zZXRWYWx1ZShvbC0+c3RhcnQoKSk7CiAJfQpAQCAtMjk1LDEyICsyNjcsOCBAQCB2b2lkIEhU
TUxMSUVsZW1lbnRJbXBsOjpzZXRWYWx1ZShsb25nIHZhCiB7CiAgICAgc2V0QXR0cmlidXRlKEFU
VFJfVkFMVUUsIFFTdHJpbmc6Om51bWJlcih2YWx1ZSkpOwogfQotLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQogCi1Ob2RlSW1wbDo6SWQgSFRNTERMaXN0RWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gSURfREw7Ci19CisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIGJvb2wgSFRNTERMaXN0
RWxlbWVudEltcGw6OmNvbXBhY3QoKSBjb25zdAogewpJbmRleDoga2h0bWwvaHRtbC9odG1sX2xp
c3RpbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRt
bC9odG1sX2xpc3RpbXBsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNwpkaWZmIC11IC1wIC1y
MS43IGtodG1sL2h0bWwvaHRtbF9saXN0aW1wbC5oCi0tLSBraHRtbC9odG1sL2h0bWxfbGlzdGlt
cGwuaAkxMSBNYXkgMjAwNSAwNTo0OTozNCAtMDAwMAkxLjcKKysrIGtodG1sL2h0bWwvaHRtbF9s
aXN0aW1wbC5oCTE2IEp1biAyMDA1IDIzOjAyOjE5IC0wMDAwCkBAIC0zNSwxMSArMzUsOSBAQCBu
YW1lc3BhY2UgRE9NCiBjbGFzcyBIVE1MVUxpc3RFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MRWxl
bWVudEltcGwKIHsKIHB1YmxpYzoKLSAgICBIVE1MVUxpc3RFbGVtZW50SW1wbChEb2N1bWVudFB0
ciAqZG9jKSA6IEhUTUxFbGVtZW50SW1wbChkb2MpIHt9CisgICAgSFRNTFVMaXN0RWxlbWVudElt
cGwoRG9jdW1lbnRQdHIgKmRvYykgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjp1bCgpLCBk
b2MpIHt9CiAgICAgdmlydHVhbCB+SFRNTFVMaXN0RWxlbWVudEltcGwoKSB7fQogCi0gICAgdmly
dHVhbCBJZCBpZCgpIGNvbnN0OwotCiAgICAgdmlydHVhbCBib29sIG1hcFRvRW50cnkoSWQgYXR0
ciwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lk
IHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKik7CiAKQEAgLTU3LDkg
KzU1LDcgQEAgcHVibGljOgogY2xhc3MgSFRNTERpcmVjdG9yeUVsZW1lbnRJbXBsIDogcHVibGlj
IEhUTUxFbGVtZW50SW1wbAogewogcHVibGljOgotICAgIEhUTUxEaXJlY3RvcnlFbGVtZW50SW1w
bChEb2N1bWVudFB0ciAqZG9jKSA6IEhUTUxFbGVtZW50SW1wbChkb2MpIHt9Ci0KLSAgICB2aXJ0
dWFsIElkIGlkKCkgY29uc3Q7CisgICAgSFRNTERpcmVjdG9yeUVsZW1lbnRJbXBsKERvY3VtZW50
UHRyICpkb2MpIDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6ZGlyKCksIGRvYykge30KIAog
ICAgIGJvb2wgY29tcGFjdCgpIGNvbnN0OwogICAgIHZvaWQgc2V0Q29tcGFjdChib29sKTsKQEAg
LTcwLDkgKzY2LDcgQEAgcHVibGljOgogY2xhc3MgSFRNTE1lbnVFbGVtZW50SW1wbCA6IHB1Ymxp
YyBIVE1MRWxlbWVudEltcGwKIHsKIHB1YmxpYzoKLSAgICBIVE1MTWVudUVsZW1lbnRJbXBsKERv
Y3VtZW50UHRyICpkb2MpIDogSFRNTEVsZW1lbnRJbXBsKGRvYykge30KLQotICAgIHZpcnR1YWwg
SWQgaWQoKSBjb25zdDsKKyAgICBIVE1MTWVudUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2Mp
IDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6bWVudSgpLCBkb2MpIHt9CiAKICAgICBib29s
IGNvbXBhY3QoKSBjb25zdDsKICAgICB2b2lkIHNldENvbXBhY3QoYm9vbCk7CkBAIC04MCwxMyAr
NzQsMTEgQEAgcHVibGljOgogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLWNsYXNzIEhUTUxPTGlz
dEVsZW1lbnRJbXBsIDogcHVibGljIEhUTUxVTGlzdEVsZW1lbnRJbXBsCitjbGFzcyBIVE1MT0xp
c3RFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MRWxlbWVudEltcGwKIHsKIHB1YmxpYzoKICAgICBI
VE1MT0xpc3RFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAgICAgICA6IEhUTUxVTGlz
dEVsZW1lbnRJbXBsKGRvYykgeyBfc3RhcnQgPSAxOyB9Ci0KLSAgICB2aXJ0dWFsIElkIGlkKCkg
Y29uc3Q7CisgICAgICAgIDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6b2woKSwgZG9jKSB7
IF9zdGFydCA9IDE7IH0KICAgICAKICAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShJZCBhdHRy
LCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQg
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqKTsKQEAgLTExMCwxMSAr
MTAyLDkgQEAgY2xhc3MgSFRNTExJRWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTEVsZQogewogcHVi
bGljOgogICAgIEhUTUxMSUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0gICAgICAgIDog
SFRNTEVsZW1lbnRJbXBsKGRvYykgeyBpc1ZhbHVlZCA9IGZhbHNlOyB9CisgICAgICAgIDogSFRN
TEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6bGkoKSwgZG9jKSB7IGlzVmFsdWVkID0gZmFsc2U7IH0K
ICAgICB2aXJ0dWFsIH5IVE1MTElFbGVtZW50SW1wbCgpIHt9CiAKLSAgICB2aXJ0dWFsIElkIGlk
KCkgY29uc3Q7Ci0KICAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShOb2RlSW1wbDo6SWQgYXR0
ciwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lk
IHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIpOwogCkBAIC0x
MzYsMTEgKzEyNiw5IEBAIHByaXZhdGU6CiBjbGFzcyBIVE1MRExpc3RFbGVtZW50SW1wbCA6IHB1
YmxpYyBIVE1MRWxlbWVudEltcGwKIHsKIHB1YmxpYzoKLSAgICBIVE1MRExpc3RFbGVtZW50SW1w
bChEb2N1bWVudFB0ciAqZG9jKSA6IEhUTUxFbGVtZW50SW1wbChkb2MpIHt9CisgICAgSFRNTERM
aXN0RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5h
bWVzOjpkbCgpLCBkb2MpIHt9CiAgICAgdmlydHVhbCB+SFRNTERMaXN0RWxlbWVudEltcGwoKSB7
fQogCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwotCiAgICAgYm9vbCBjb21wYWN0KCkgY29u
c3Q7CiAgICAgdm9pZCBzZXRDb21wYWN0KGJvb2wpOwogfTsKSW5kZXg6IGtodG1sL2h0bWwvaHRt
bF9taXNjaW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0
bWwvaHRtbC9odG1sX21pc2NpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yNgpkaWZm
IC11IC1wIC1yMS4yNiBraHRtbC9odG1sL2h0bWxfbWlzY2ltcGwuY3BwCi0tLSBraHRtbC9odG1s
L2h0bWxfbWlzY2ltcGwuY3BwCTExIEp1biAyMDA1IDA5OjUxOjAxIC0wMDAwCTEuMjYKKysrIGto
dG1sL2h0bWwvaHRtbF9taXNjaW1wbC5jcHAJMTYgSnVuIDIwMDUgMjM6MDI6MTkgLTAwMDAKQEAg
LTM1LDcgKzM1LDcgQEAKIG5hbWVzcGFjZSBET00gewogCiBIVE1MQmFzZUZvbnRFbGVtZW50SW1w
bDo6SFRNTEJhc2VGb250RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgICA6IEhUTUxF
bGVtZW50SW1wbChkb2MpCisgICAgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjpiYXNlZm9u
dCgpLCBkb2MpCiB7CiB9CiAKQEAgLTE0MSw3MiArMTQxLDcyIEBAIE5vZGVJbXBsICpIVE1MQ29s
bGVjdGlvbkltcGw6OnRyYXZlcnNlTmUKICAgICAgICAgICAgIEhUTUxFbGVtZW50SW1wbCAqZSA9
IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCAqPihjdXJyZW50KTsKICAgICAgICAgICAgIHN3
aXRjaCh0eXBlKSB7CiAgICAgICAgICAgICBjYXNlIERPQ19JTUFHRVM6Ci0gICAgICAgICAgICAg
ICAgaWYoZS0+aWQoKSA9PSBJRF9JTUcpCisgICAgICAgICAgICAgICAgaWYgKGUtPmhhc0xvY2Fs
TmFtZShIVE1MTmFtZXM6OmltZygpKSkKICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVl
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBET0NfRk9STVM6Ci0g
ICAgICAgICAgICAgICAgaWYoZS0+aWQoKSA9PSBJRF9GT1JNKQorICAgICAgICAgICAgICAgIGlm
KGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmZvcm0oKSkpCiAgICAgICAgICAgICAgICAgICAg
IGZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2Ug
RE9DX05BTUVBQkxFX0lURU1TOgotICAgICAgICAgICAgICAgIGlmKGUtPmlkKCkgPT0gSURfSU1H
KQorICAgICAgICAgICAgICAgIGlmIChlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjppbWcoKSkp
CiAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBpZihl
LT5pZCgpID09IElEX0ZPUk0pCisgICAgICAgICAgICAgICAgaWYgKGUtPmhhc0xvY2FsTmFtZShI
VE1MTmFtZXM6OmZvcm0oKSkpCiAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAg
ICAgICAgICAgICAgICBpZihlLT5pZCgpID09IElEX0FQUExFVCkKKyAgICAgICAgICAgICAgICBp
ZiAoZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6YXBwbGV0KCkpKQogICAgICAgICAgICAgICAg
ICAgICBmb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgaWYoZS0+aWQoKSA9PSBJRF9FTUJF
RCkKKyAgICAgICAgICAgICAgICBpZiAoZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6ZW1iZWQo
KSkpCiAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBp
ZihlLT5pZCgpID09IElEX09CSkVDVCkKKyAgICAgICAgICAgICAgICBpZiAoZS0+aGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6b2JqZWN0KCkpKQogICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRy
dWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFRBQkxFX1RCT0RJ
RVM6Ci0gICAgICAgICAgICAgICAgaWYoZS0+aWQoKSA9PSBJRF9UQk9EWSkKKyAgICAgICAgICAg
ICAgICBpZiAoZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dGJvZHkoKSkpCiAgICAgICAgICAg
ICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBlbHNlIGlmKGUtPmlkKCkg
PT0gSURfVEFCTEUpCisgICAgICAgICAgICAgICAgZWxzZSBpZiAoZS0+aGFzTG9jYWxOYW1lKEhU
TUxOYW1lczo6dGFibGUoKSkpCiAgICAgICAgICAgICAgICAgICAgIGRlZXAgPSBmYWxzZTsKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgVFJfQ0VMTFM6Ci0gICAgICAg
ICAgICAgICAgaWYoZS0+aWQoKSA9PSBJRF9URCB8fCBlLT5pZCgpID09IElEX1RIKQorICAgICAg
ICAgICAgICAgIGlmIChlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0ZCgpKSB8fCBlLT5oYXNM
b2NhbE5hbWUoSFRNTE5hbWVzOjp0aCgpKSkKICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0
cnVlOwotICAgICAgICAgICAgICAgIGVsc2UgaWYoZS0+aWQoKSA9PSBJRF9UQUJMRSkKKyAgICAg
ICAgICAgICAgICBlbHNlIGlmIChlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0YWJsZSgpKSkK
ICAgICAgICAgICAgICAgICAgICAgZGVlcCA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgY2FzZSBUQUJMRV9ST1dTOgogICAgICAgICAgICAgY2FzZSBUU0VDVElP
Tl9ST1dTOgotICAgICAgICAgICAgICAgIGlmKGUtPmlkKCkgPT0gSURfVFIpCisgICAgICAgICAg
ICAgICAgaWYgKGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnRyKCkpKQogICAgICAgICAgICAg
ICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZihlLT5pZCgpID09
IElEX1RBQkxFKQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKGUtPmhhc0xvY2FsTmFtZShIVE1M
TmFtZXM6OnRhYmxlKCkpKQogICAgICAgICAgICAgICAgICAgICBkZWVwID0gZmFsc2U7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFNFTEVDVF9PUFRJT05TOgotICAg
ICAgICAgICAgICAgIGlmKGUtPmlkKCkgPT0gSURfT1BUSU9OKQorICAgICAgICAgICAgICAgIGlm
IChlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvcHRpb24oKSkpCiAgICAgICAgICAgICAgICAg
ICAgIGZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNh
c2UgTUFQX0FSRUFTOgotICAgICAgICAgICAgICAgIGlmKGUtPmlkKCkgPT0gSURfQVJFQSkKKyAg
ICAgICAgICAgICAgICBpZiAoZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6YXJlYSgpKSkKICAg
ICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgY2FzZSBET0NfQVBQTEVUUzogICAvLyBhbGwgT0JKRUNUIGFuZCBBUFBMRVQg
ZWxlbWVudHMKLSAgICAgICAgICAgICAgICBpZihlLT5pZCgpID09IElEX09CSkVDVCB8fCBlLT5p
ZCgpID09IElEX0FQUExFVCkKKyAgICAgICAgICAgICAgICBpZiAoZS0+aGFzTG9jYWxOYW1lKEhU
TUxOYW1lczo6b2JqZWN0KCkpIHx8IGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmFwcGxldCgp
KSkKICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgY2FzZSBET0NfRU1CRURTOiAgIC8vIGFsbCBFTUJFRCBlbGVtZW50
cwotICAgICAgICAgICAgICAgIGlmKGUtPmlkKCkgPT0gSURfRU1CRUQpCisgICAgICAgICAgICAg
ICAgaWYgKGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmVtYmVkKCkpKQogICAgICAgICAgICAg
ICAgICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICBjYXNlIERPQ19PQkpFQ1RTOiAgIC8vIGFsbCBPQkpFQ1QgZWxlbWVudHMKLSAgICAgICAgICAg
ICAgICBpZihlLT5pZCgpID09IElEX09CSkVDVCkKKyAgICAgICAgICAgICAgICBpZiAoZS0+aGFz
TG9jYWxOYW1lKEhUTUxOYW1lczo6b2JqZWN0KCkpKQogICAgICAgICAgICAgICAgICAgICBmb3Vu
ZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIERPQ19M
SU5LUzogICAgIC8vIGFsbCBBIF9hbmRfIEFSRUEgZWxlbWVudHMgd2l0aCBhIHZhbHVlIGZvciBo
cmVmCi0gICAgICAgICAgICAgICAgaWYoZS0+aWQoKSA9PSBJRF9BIHx8IGUtPmlkKCkgPT0gSURf
QVJFQSkKLSAgICAgICAgICAgICAgICAgICAgaWYoIWUtPmdldEF0dHJpYnV0ZShBVFRSX0hSRUYp
LmlzTnVsbCgpKQorICAgICAgICAgICAgICAgIGlmIChlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVz
OjphKCkpIHx8IGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmFyZWEoKSkpCisgICAgICAgICAg
ICAgICAgICAgIGlmICghZS0+Z2V0QXR0cmlidXRlKEFUVFJfSFJFRikuaXNOdWxsKCkpCiAgICAg
ICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICBjYXNlIERPQ19BTkNIT1JTOiAgICAgIC8vIGFsbCBBIGVsZW1lbnRzIHdp
dGggYSB2YWx1ZSBmb3IgbmFtZSBvciBhbiBpZCBhdHRyaWJ1dGUKLSAgICAgICAgICAgICAgICBp
ZihlLT5pZCgpID09IElEX0EpCi0gICAgICAgICAgICAgICAgICAgIGlmKCFlLT5nZXRBdHRyaWJ1
dGUoQVRUUl9OQU1FKS5pc051bGwoKSkKKyAgICAgICAgICAgICAgICBpZiAoZS0+aGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6YSgpKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFlLT5nZXRBdHRy
aWJ1dGUoQVRUUl9OQU1FKS5pc051bGwoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5k
ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgRE9DX0FM
TDoKQEAgLTIxOSw5ICsyMTksOSBAQCBOb2RlSW1wbCAqSFRNTENvbGxlY3Rpb25JbXBsOjp0cmF2
ZXJzZU5lCiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGtkRGVidWcoIDYw
MzAgKSA8PCAiRXJyb3IgaW4gSFRNTENvbGxlY3Rpb24sIHdyb25nIHRhZ0lkISIgPDwgZW5kbDsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChmb3VuZCkgeworCisgICAgICAgICAgICBp
ZiAoZm91bmQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7Ci0gICAgICAgICAgICB9
CiAgICAgICAgICAgICBpZiAoZGVlcCkgewogICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJy
ZW50LT50cmF2ZXJzZU5leHROb2RlKG1fYmFzZS5nZXQoKSk7CiAgICAgICAgICAgICAgICAgY29u
dGludWU7CkBAIC0yOTgsMjkgKzI5OCwzMSBAQCBOb2RlSW1wbCAqSFRNTENvbGxlY3Rpb25JbXBs
OjpuZXh0SXRlbSgpCiAKIGJvb2wgSFRNTENvbGxlY3Rpb25JbXBsOjpjaGVja0Zvck5hbWVNYXRj
aChOb2RlSW1wbCAqbm9kZSwgYm9vbCBjaGVja05hbWUsIGNvbnN0IERPTVN0cmluZyAmbmFtZSwg
Ym9vbCBjYXNlU2Vuc2l0aXZlKSBjb25zdAogewotICAgIEVsZW1lbnRJbXBsICplID0gc3RhdGlj
X2Nhc3Q8RWxlbWVudEltcGwgKj4obm9kZSk7CisgICAgaWYgKCFub2RlLT5pc0hUTUxFbGVtZW50
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBIVE1MRWxlbWVudEltcGwgKmUg
PSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwqPihub2RlKTsKICAgICBpZiAoY2FzZVNlbnNp
dGl2ZSkgewogICAgICAgICBpZiAoY2hlY2tOYW1lKSB7CiAgICAgICAgICAgICAvLyBkb2N1bWVu
dC5hbGwgcmV0dXJucyBvbmx5IGltYWdlcywgZm9ybXMsIGFwcGxldHMsIG9iamVjdHMgYW5kIGVt
YmVkcwogICAgICAgICAgICAgLy8gYnkgbmFtZSAodGhvdWdoIGV2ZXJ5dGhpbmcgYnkgaWQpCiAg
ICAgICAgICAgICBpZiAodHlwZSA9PSBET0NfQUxMICYmIAotICAgICAgICAgICAgICAgICEoZS0+
aWQoKSA9PSBJRF9JTUcgfHwgZS0+aWQoKSA9PSBJRF9GT1JNIHx8Ci0gICAgICAgICAgICAgICAg
ICBlLT5pZCgpID09IElEX0FQUExFVCB8fCBlLT5pZCgpID09IElEX09CSkVDVCB8fAotICAgICAg
ICAgICAgICAgICAgZS0+aWQoKSA9PSBJRF9FTUJFRCkpCisgICAgICAgICAgICAgICAgIShlLT5o
YXNMb2NhbE5hbWUoSFRNTE5hbWVzOjppbWcoKSkgfHwgZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1l
czo6Zm9ybSgpKSB8fAorICAgICAgICAgICAgICAgICAgZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1l
czo6YXBwbGV0KCkpIHx8IGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9iamVjdCgpKSB8fAor
ICAgICAgICAgICAgICAgICAgZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6ZW1iZWQoKSkpKQog
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAgICAgcmV0dXJuIGUtPmdl
dEF0dHJpYnV0ZShBVFRSX05BTUUpID09IG5hbWUgJiYgZS0+Z2V0QXR0cmlidXRlKEFUVFJfSUQp
ICE9IG5hbWU7Ci0gICAgICAgIH0gZWxzZSB7CisgICAgICAgIH0gZWxzZQogICAgICAgICAgICAg
cmV0dXJuIGUtPmdldEF0dHJpYnV0ZShBVFRSX0lEKSA9PSBuYW1lOwotICAgICAgICB9CiAgICAg
fSBlbHNlIHsKICAgICAgICAgaWYgKGNoZWNrTmFtZSkgewogICAgICAgICAgICAgLy8gZG9jdW1l
bnQuYWxsIHJldHVybnMgb25seSBpbWFnZXMsIGZvcm1zLCBhcHBsZXRzLCBvYmplY3RzIGFuZCBl
bWJlZHMKICAgICAgICAgICAgIC8vIGJ5IG5hbWUgKHRob3VnaCBldmVyeXRoaW5nIGJ5IGlkKQog
ICAgICAgICAgICAgaWYgKHR5cGUgPT0gRE9DX0FMTCAmJiAKLSAgICAgICAgICAgICAgICAhKGUt
PmlkKCkgPT0gSURfSU1HIHx8IGUtPmlkKCkgPT0gSURfRk9STSB8fAotICAgICAgICAgICAgICAg
ICAgZS0+aWQoKSA9PSBJRF9BUFBMRVQgfHwgZS0+aWQoKSA9PSBJRF9PQkpFQ1QgfHwKLSAgICAg
ICAgICAgICAgICAgIGUtPmlkKCkgPT0gSURfRU1CRUQpKQorICAgICAgICAgICAgICAgICEoZS0+
aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6aW1nKCkpIHx8IGUtPmhhc0xvY2FsTmFtZShIVE1MTmFt
ZXM6OmZvcm0oKSkgfHwKKyAgICAgICAgICAgICAgICAgIGUtPmhhc0xvY2FsTmFtZShIVE1MTmFt
ZXM6OmFwcGxldCgpKSB8fCBlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvYmplY3QoKSkgfHwK
KyAgICAgICAgICAgICAgICAgIGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmVtYmVkKCkpKSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgICAgIHJldHVybiBlLT5n
ZXRBdHRyaWJ1dGUoQVRUUl9OQU1FKS5kb21TdHJpbmcoKS5sb3dlcigpID09IG5hbWUubG93ZXIo
KSAmJgpAQCAtMzc5LDcgKzM4MSw5IEBAIHZvaWQgSFRNTENvbGxlY3Rpb25JbXBsOjp1cGRhdGVO
YW1lQ2FjaGUKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIGZvciAoTm9kZUltcGwgKm4gPSB0
cmF2ZXJzZU5leHRJdGVtKG1fYmFzZS5nZXQoKSk7IG47IG4gPSB0cmF2ZXJzZU5leHRJdGVtKG4p
KSB7Ci0gICAgICAgIEVsZW1lbnRJbXBsICplID0gc3RhdGljX2Nhc3Q8RWxlbWVudEltcGwgKj4o
bik7CisgICAgICAgIGlmICghbi0+aXNIVE1MRWxlbWVudCgpKQorICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIEhUTUxFbGVtZW50SW1wbCogZSA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50
SW1wbCo+KG4pOwogICAgICAgICBRU3RyaW5nIGlkQXR0ciA9IGUtPmdldEF0dHJpYnV0ZShBVFRS
X0lEKS5zdHJpbmcoKTsKICAgICAgICAgUVN0cmluZyBuYW1lQXR0ciA9IGUtPmdldEF0dHJpYnV0
ZShBVFRSX05BTUUpLnN0cmluZygpOwogICAgICAgICBpZiAoIWlkQXR0ci5pc0VtcHR5KCkpIHsK
QEAgLTM5Myw5ICszOTcsOSBAQCB2b2lkIEhUTUxDb2xsZWN0aW9uSW1wbDo6dXBkYXRlTmFtZUNh
Y2hlCiAgICAgICAgIH0KICAgICAgICAgaWYgKCFuYW1lQXR0ci5pc0VtcHR5KCkgJiYgaWRBdHRy
ICE9IG5hbWVBdHRyCiAgICAgICAgICAgICAmJiAodHlwZSAhPSBET0NfQUxMIHx8IAotICAgICAg
ICAgICAgICAgIChlLT5pZCgpID09IElEX0lNRyB8fCBlLT5pZCgpID09IElEX0ZPUk0gfHwKLSAg
ICAgICAgICAgICAgICAgZS0+aWQoKSA9PSBJRF9BUFBMRVQgfHwgZS0+aWQoKSA9PSBJRF9PQkpF
Q1QgfHwKLSAgICAgICAgICAgICAgICAgZS0+aWQoKSA9PSBJRF9FTUJFRCkpKSB7CisgICAgICAg
ICAgICAgICAgKGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmltZygpKSB8fCBlLT5oYXNMb2Nh
bE5hbWUoSFRNTE5hbWVzOjpmb3JtKCkpIHx8CisgICAgICAgICAgICAgICAgIGUtPmhhc0xvY2Fs
TmFtZShIVE1MTmFtZXM6OmFwcGxldCgpKSB8fCBlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpv
YmplY3QoKSkgfHwKKyAgICAgICAgICAgICAgICAgZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6
ZW1iZWQoKSkpKSkgewogICAgICAgICAgICAgLy8gYWRkIHRvIG5hbWUgY2FjaGUKICAgICAgICAg
ICAgIFFQdHJWZWN0b3I8Tm9kZUltcGw+ICpuYW1lVmVjdG9yID0gaW5mby0+bmFtZUNhY2hlLmZp
bmQobmFtZUF0dHIpOwogICAgICAgICAgICAgaWYgKCFuYW1lVmVjdG9yKSB7CkBAIC01MzIsMTIg
KzUzNiwxMCBAQCBOb2RlSW1wbCogSFRNTEZvcm1Db2xsZWN0aW9uSW1wbDo6Z2V0TmFtCiAKIE5v
ZGVJbXBsKiBIVE1MRm9ybUNvbGxlY3Rpb25JbXBsOjpnZXROYW1lZEZvcm1JdGVtKGludCBhdHRy
X2lkLCBjb25zdCBET01TdHJpbmcmIG5hbWUsIGludCBkdXBsaWNhdGVOdW1iZXIsIGJvb2wgY2Fz
ZVNlbnNpdGl2ZSkgY29uc3QKIHsKLSAgICBpZihtX2Jhc2UtPm5vZGVUeXBlKCkgPT0gTm9kZTo6
RUxFTUVOVF9OT0RFKQotICAgIHsKKyAgICBpZiAobV9iYXNlLT5ub2RlVHlwZSgpID09IE5vZGU6
OkVMRU1FTlRfTk9ERSkgewogICAgICAgICBIVE1MRWxlbWVudEltcGwqIGJhc2VFbGVtZW50ID0g
c3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsKj4obV9iYXNlLmdldCgpKTsKICAgICAgICAgYm9v
bCBmb3VuZElucHV0RWxlbWVudHMgPSBmYWxzZTsKLSAgICAgICAgaWYoYmFzZUVsZW1lbnQtPmlk
KCkgPT0gSURfRk9STSkKLSAgICAgICAgeworICAgICAgICBpZiAoYmFzZUVsZW1lbnQtPmhhc0xv
Y2FsTmFtZShIVE1MTmFtZXM6OmZvcm0oKSkpIHsKICAgICAgICAgICAgIEhUTUxGb3JtRWxlbWVu
dEltcGwqIGYgPSBzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnRJbXBsKj4oYmFzZUVsZW1lbnQp
OwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGYtPmZvcm1FbGVtZW50cy5j
b3VudCgpOyArK2kpIHsKICAgICAgICAgICAgICAgICBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1w
bCogZSA9IGYtPmZvcm1FbGVtZW50c1tpXTsKQEAgLTU1Nyw4ICs1NTksNyBAQCBOb2RlSW1wbCog
SFRNTEZvcm1Db2xsZWN0aW9uSW1wbDo6Z2V0TmFtCiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
IAotICAgICAgICBpZiAoICFmb3VuZElucHV0RWxlbWVudHMgKQotICAgICAgICB7CisgICAgICAg
IGlmICghZm91bmRJbnB1dEVsZW1lbnRzKSB7CiAgICAgICAgICAgICBIVE1MRm9ybUVsZW1lbnRJ
bXBsKiBmID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50SW1wbCo+KGJhc2VFbGVtZW50KTsK
IAogICAgICAgICAgICAgZm9yKHVuc2lnbmVkIGkgPSAwOyBpIDwgZi0+aW1nRWxlbWVudHMuY291
bnQoKTsgKytpKQpAQCAtNjUwLDcgKzY1MSw3IEBAIHZvaWQgSFRNTEZvcm1Db2xsZWN0aW9uSW1w
bDo6dXBkYXRlTmFtZUMKIAogICAgIFFEaWN0PGNoYXI+IGZvdW5kSW5wdXRFbGVtZW50czsKIAot
ICAgIGlmIChtX2Jhc2UtPmlkKCkgIT0gSURfRk9STSkgeworICAgIGlmICghbV9iYXNlLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6Zm9ybSgpKSkgewogICAgICAgICBpbmZvLT5oYXNOYW1lQ2FjaGUg
PSB0cnVlOwogICAgICAgICByZXR1cm47CiAgICAgfQpJbmRleDoga2h0bWwvaHRtbC9odG1sX29i
amVjdGltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1s
L2h0bWwvaHRtbF9vYmplY3RpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS42NApkaWZm
IC11IC1wIC1yMS42NCBraHRtbC9odG1sL2h0bWxfb2JqZWN0aW1wbC5jcHAKLS0tIGtodG1sL2h0
bWwvaHRtbF9vYmplY3RpbXBsLmNwcAkzMSBNYXkgMjAwNSAwMDoxNTo1MiAtMDAwMAkxLjY0Cisr
KyBraHRtbC9odG1sL2h0bWxfb2JqZWN0aW1wbC5jcHAJMTYgSnVuIDIwMDUgMjM6MDI6MjAgLTAw
MDAKQEAgLTU3LDcgKzU3LDcgQEAgbmFtZXNwYWNlIERPTSB7CiAvLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CiAKIEhUTUxBcHBsZXRFbGVtZW50SW1wbDo6SFRNTEFwcGxldEVsZW1lbnRJbXBsKERvY3VtZW50
UHRyICpkb2MpCi0gIDogSFRNTEVsZW1lbnRJbXBsKGRvYykKKyAgOiBIVE1MRWxlbWVudEltcGwo
SFRNTE5hbWVzOjphcHBsZXQoKSwgZG9jKQogewogICAgIGFwcGxldEluc3RhbmNlID0gMDsKICAg
ICBtX2FsbFBhcmFtc0F2YWlsYWJsZSA9IGZhbHNlOwpAQCAtMzQyLDcgKzM0Miw3IEBAIHZvaWQg
SFRNTEFwcGxldEVsZW1lbnRJbXBsOjpzZXRXaWR0aChjb24KIC8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
IAogSFRNTEVtYmVkRWxlbWVudEltcGw6OkhUTUxFbWJlZEVsZW1lbnRJbXBsKERvY3VtZW50UHRy
ICpkb2MpCi0gICAgOiBIVE1MRWxlbWVudEltcGwoZG9jKSwgZW1iZWRJbnN0YW5jZSgwKQorICAg
IDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6ZW1iZWQoKSwgZG9jKSwgZW1iZWRJbnN0YW5j
ZSgwKQoge30KIAogSFRNTEVtYmVkRWxlbWVudEltcGw6On5IVE1MRW1iZWRFbGVtZW50SW1wbCgp
CkBAIC00NjgsNyArNDY4LDcgQEAgYm9vbCBIVE1MRW1iZWRFbGVtZW50SW1wbDo6cmVuZGVyZXJJ
c05lZQogICAgIEtIVE1MUGFydCAqcGFydCA9IGdldERvY3VtZW50KCktPnBhcnQoKTsKICAgICBp
ZiAoIXBhcnQpCiAJcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBwYXJ0LT5wbHVnaW5zRW5hYmxl
ZCgpICYmIHBhcmVudE5vZGUoKS0+aWQoKSAhPSBJRF9PQkpFQ1Q7CisgICAgcmV0dXJuIHBhcnQt
PnBsdWdpbnNFbmFibGVkKCkgJiYgIXBhcmVudE5vZGUoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
Om9iamVjdCgpKTsKIH0KIAogUmVuZGVyT2JqZWN0ICpIVE1MRW1iZWRFbGVtZW50SW1wbDo6Y3Jl
YXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEgKmFyZW5hLCBSZW5kZXJTdHlsZSAqc3R5bGUpCkBAIC00
OTMsOSArNDkzLDkgQEAgYm9vbCBIVE1MRW1iZWRFbGVtZW50SW1wbDo6aXNVUkxBdHRyaWJ1dAog
CiBIVE1MT2JqZWN0RWxlbWVudEltcGw6OkhUTUxPYmplY3RFbGVtZW50SW1wbChEb2N1bWVudFB0
ciAqZG9jKSAKICNpZiBBUFBMRV9DSEFOR0VTCi06IEhUTUxFbGVtZW50SW1wbChkb2MpLCBtX2lt
YWdlTG9hZGVyKDApLCBvYmplY3RJbnN0YW5jZSgwKQorOiBIVE1MRWxlbWVudEltcGwoSFRNTE5h
bWVzOjpvYmplY3QoKSwgZG9jKSwgbV9pbWFnZUxvYWRlcigwKSwgb2JqZWN0SW5zdGFuY2UoMCkK
ICNlbHNlCi06IEhUTUxFbGVtZW50SW1wbChkb2MpLCBtX2ltYWdlTG9hZGVyKDApCis6IEhUTUxF
bGVtZW50SW1wbChIVE1MTmFtZXM6Om9iamVjdCgpLCBkb2MpLCBtX2ltYWdlTG9hZGVyKDApCiAj
ZW5kaWYKIHsKICAgICBuZWVkV2lkZ2V0VXBkYXRlID0gZmFsc2U7CkBAIC05MTgsNyArOTE4LDcg
QEAgdm9pZCBIVE1MT2JqZWN0RWxlbWVudEltcGw6OnNldFdpZHRoKGNvbgogLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQogCiBIVE1MUGFyYW1FbGVtZW50SW1wbDo6SFRNTFBhcmFtRWxlbWVudEltcGwoRG9j
dW1lbnRQdHIgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50SW1wbChkb2MpCisgICAgOiBIVE1MRWxl
bWVudEltcGwoSFRNTE5hbWVzOjpwYXJhbSgpLCBkb2MpCiB7CiB9CiAKSW5kZXg6IGtodG1sL2h0
bWwvaHRtbF90YWJsZWltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJD
b3JlL2todG1sL2h0bWwvaHRtbF90YWJsZWltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjUyCmRpZmYgLXUgLXAgLXIxLjUyIGtodG1sL2h0bWwvaHRtbF90YWJsZWltcGwuY3BwCi0tLSBr
aHRtbC9odG1sL2h0bWxfdGFibGVpbXBsLmNwcAkxMSBNYXkgMjAwNSAwNTo0OTozNCAtMDAwMAkx
LjUyCisrKyBraHRtbC9odG1sL2h0bWxfdGFibGVpbXBsLmNwcAkxNiBKdW4gMjAwNSAyMzowMjoy
MSAtMDAwMApAQCAtNTEsNyArNTEsNyBAQCB1c2luZyBuYW1lc3BhY2Uga2h0bWw7CiBuYW1lc3Bh
Y2UgRE9NIHsKIAogSFRNTFRhYmxlRWxlbWVudEltcGw6OkhUTUxUYWJsZUVsZW1lbnRJbXBsKERv
Y3VtZW50UHRyICpkb2MpCi0gIDogSFRNTEVsZW1lbnRJbXBsKGRvYykKKyAgOiBIVE1MRWxlbWVu
dEltcGwoSFRNTE5hbWVzOjp0YWJsZSgpLCBkb2MpCiB7CiAgICAgdENhcHRpb24gPSAwOwogICAg
IGhlYWQgPSAwOwpAQCAtNzMsMTEgKzczLDYgQEAgSFRNTFRhYmxlRWxlbWVudEltcGw6On5IVE1M
VGFibGVFbGVtZW50SQogewogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTFRhYmxlRWxlbWVudEltcGw6
OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfVEFCTEU7Ci19Ci0KIE5vZGVJbXBsKiBIVE1M
VGFibGVFbGVtZW50SW1wbDo6c2V0Q2FwdGlvbiggSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnRJbXBs
ICpjICkKIHsKICAgICBpbnQgZXhjZXB0aW9uY29kZSA9IDA7CkBAIC0xNDYsNyArMTQxLDcgQEAg
SFRNTEVsZW1lbnRJbXBsICpIVE1MVGFibGVFbGVtZW50SW1wbDo6YwogICAgIGlmKCFoZWFkKQog
ICAgIHsKICAgICAgICAgaW50IGV4Y2VwdGlvbmNvZGUgPSAwOwotICAgICAgICBoZWFkID0gbmV3
IEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbChkb2NQdHIoKSwgSURfVEhFQUQsIHRydWUgLyog
aW1wbGljaXQgKi8pOworICAgICAgICBoZWFkID0gbmV3IEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50
SW1wbChIVE1MTmFtZXM6OnRoZWFkKCksIGRvY1B0cigpLCB0cnVlIC8qIGltcGxpY2l0ICovKTsK
ICAgICAgICAgaWYoZm9vdCkKICAgICAgICAgICAgIGluc2VydEJlZm9yZSggaGVhZCwgZm9vdCwg
ZXhjZXB0aW9uY29kZSApOwogICAgICAgICBlbHNlIGlmKGZpcnN0Qm9keSkKQEAgLTE3MSw3ICsx
NjYsNyBAQCBIVE1MRWxlbWVudEltcGwgKkhUTUxUYWJsZUVsZW1lbnRJbXBsOjpjCiAgICAgaWYo
IWZvb3QpCiAgICAgewogICAgICAgICBpbnQgZXhjZXB0aW9uY29kZSA9IDA7Ci0gICAgICAgIGZv
b3QgPSBuZXcgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsKGRvY1B0cigpLCBJRF9URk9PVCwg
dHJ1ZSAvKmltcGxpY2l0ICovKTsKKyAgICAgICAgZm9vdCA9IG5ldyBIVE1MVGFibGVTZWN0aW9u
RWxlbWVudEltcGwoSFRNTE5hbWVzOjp0Zm9vdCgpLCBkb2NQdHIoKSwgdHJ1ZSAvKmltcGxpY2l0
ICovKTsKICAgICAgICAgaWYoZmlyc3RCb2R5KQogICAgICAgICAgICAgaW5zZXJ0QmVmb3JlKCBm
b290LCBmaXJzdEJvZHksIGV4Y2VwdGlvbmNvZGUgKTsKICAgICAgICAgZWxzZQpAQCAtMjE2LDcg
KzIxMSw3IEBAIEhUTUxFbGVtZW50SW1wbCAqSFRNTFRhYmxlRWxlbWVudEltcGw6OmkKICAgICAv
LyAobm90ZTogdGhpcyBpcyBkaWZmZXJlbnQgZnJvbSAiaWYgdGhlIHRhYmxlIGhhcyBubyBzZWN0
aW9ucyIsIHNpbmNlIHdlIGNhbiBoYXZlCiAgICAgLy8gPFRBQkxFPjxUUj4pCiAgICAgaWYoIWZp
cnN0Qm9keSAmJiAhaGVhZCAmJiAhZm9vdCAmJiAhaGFzQ2hpbGROb2RlcygpKQotICAgICAgICBz
ZXRUQm9keSggbmV3IEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbChkb2NQdHIoKSwgSURfVEJP
RFksIHRydWUgLyogaW1wbGljaXQgKi8pICk7CisgICAgICAgIHNldFRCb2R5KCBuZXcgSFRNTFRh
YmxlU2VjdGlvbkVsZW1lbnRJbXBsKEhUTUxOYW1lczo6dGJvZHkoKSwgZG9jUHRyKCksIHRydWUg
LyogaW1wbGljaXQgKi8pICk7CiAKICAgICAvL2tkRGVidWcoNjAzMCkgPDwga19mdW5jaW5mbyA8
PCBpbmRleCA8PCBlbmRsOwogICAgIC8vIElFIHRyZWF0cyBpbmRleD0tMSBhcyBkZWZhdWx0IHZh
bHVlIG1lYW5pbmcgJ2FwcGVuZCBhZnRlciBsYXN0JwpAQCAtMjMwLDcgKzIyNSw4IEBAIEhUTUxF
bGVtZW50SW1wbCAqSFRNTFRhYmxlRWxlbWVudEltcGw6OmkKICAgICB7CiAJLy8gdGhlcmUgY291
bGQgYmUgMiB0Zm9vdCBlbGVtZW50cyBpbiB0aGUgdGFibGUuIE9ubHkgdGhlIGZpcnN0IG9uZSBp
cyB0aGUgImZvb3QiLCB0aGF0J3Mgd2h5IHdlIGhhdmUgdGhlIG1vcmUKIAkvLyBjb21wbGljYXRl
ZCBpZiBzdGF0ZW1lbnQgYmVsb3cuCi0gICAgICAgIGlmICggbm9kZSAhPSBmb290ICYmIChub2Rl
LT5pZCgpID09IElEX1RIRUFEIHx8IG5vZGUtPmlkKCkgPT0gSURfVEZPT1QgfHwgbm9kZS0+aWQo
KSA9PSBJRF9UQk9EWSkgKQorICAgICAgICBpZiAobm9kZSAhPSBmb290ICYmIChub2RlLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6dGhlYWQoKSkgfHwgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
OnRmb290KCkpIHx8IAorICAgICAgICAgICAgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRi
b2R5KCkpKSkKICAgICAgICAgewogICAgICAgICAgICAgc2VjdGlvbiA9IHN0YXRpY19jYXN0PEhU
TUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbCAqPihub2RlKTsKICAgICAgICAgICAgIGxhc3RTZWN0
aW9uID0gc2VjdGlvbjsKQEAgLTI3Niw4ICsyNzIsOCBAQCB2b2lkIEhUTUxUYWJsZUVsZW1lbnRJ
bXBsOjpkZWxldGVSb3coIGxvCiAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOwogICAgIGZvciAoIDsg
bm9kZSA7IG5vZGUgPSBub2RlLT5uZXh0U2libGluZygpICkKICAgICB7Ci0gICAgICAgIGlmICgg
bm9kZSAhPSBmb290ICYmIChub2RlLT5pZCgpID09IElEX1RIRUFEIHx8IG5vZGUtPmlkKCkgPT0g
SURfVEZPT1QgfHwgbm9kZS0+aWQoKSA9PSBJRF9UQk9EWSkgKQotICAgICAgICB7CisgICAgICAg
IGlmIChub2RlICE9IGZvb3QgJiYgKG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0aGVhZCgp
KSB8fCBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGZvb3QoKSkgfHwgCisgICAgICAgICAg
ICBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGJvZHkoKSkpKSB7CiAgICAgICAgICAgICBz
ZWN0aW9uID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsICo+KG5vZGUp
OwogICAgICAgICAgICAgbGFzdFNlY3Rpb24gPSBzZWN0aW9uOwogICAgICAgICAgICAgaW50IHJv
d3MgPSBzZWN0aW9uLT5udW1Sb3dzKCk7CkBAIC0zMDksNyArMzA1LDcgQEAgTm9kZUltcGwgKkhU
TUxUYWJsZUVsZW1lbnRJbXBsOjphZGRDaGlsZAogICAgIGtkRGVidWcoIDYwMzAgKSA8PCBub2Rl
TmFtZSgpLnN0cmluZygpIDw8ICIoVGFibGUpOjphZGRDaGlsZCggIiA8PCBjaGlsZC0+bm9kZU5h
bWUoKS5zdHJpbmcoKSA8PCAiICkiIDw8IGVuZGw7CiAjZW5kaWYKIAotICAgIGlmIChjaGlsZC0+
aWQoKSA9PSBJRF9GT1JNKSB7CisgICAgaWYgKGNoaWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
Zm9ybSgpKSkgewogICAgICAgICAvLyBGaXJzdCBhZGQgdGhlIGNoaWxkLgogICAgICAgICBIVE1M
RWxlbWVudEltcGw6OmFkZENoaWxkKGNoaWxkKTsKICAgICAgICAgLy8gTm93IHNpbXBseSByZXR1
cm4gb3Vyc2VsdmVzIGFzIHRoZSBuZXdub2RlLiAgVGhpcyBoYXMgdGhlIGVmZmVjdCBvZgpAQCAt
MzM3LDI4ICszMzMsMTUgQEAgTm9kZUltcGwgKkhUTUxUYWJsZUVsZW1lbnRJbXBsOjphZGRDaGls
ZAogCiAgICAgaW50IGV4Y2VwdGlvbmNvZGUgPSAwOwogICAgIE5vZGVJbXBsICpyZXR2YWwgPSBh
cHBlbmRDaGlsZCggY2hpbGQsIGV4Y2VwdGlvbmNvZGUgKTsKLSAgICBpZiAoIHJldHZhbCApIHsK
LQlzd2l0Y2goY2hpbGQtPmlkKCkpIHsKLQljYXNlIElEX0NBUFRJT046Ci0JICAgIGlmICggIXRD
YXB0aW9uICkKLQkJdENhcHRpb24gPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVDYXB0aW9uRWxlbWVu
dEltcGwgKj4oY2hpbGQpOwotCSAgICBicmVhazsKLQljYXNlIElEX0NPTDoKLQljYXNlIElEX0NP
TEdST1VQOgotCSAgICBicmVhazsKLQljYXNlIElEX1RIRUFEOgotCSAgICBpZiAoICFoZWFkICkK
LQkJaGVhZCA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbCAqPihjaGls
ZCk7Ci0JICAgIGJyZWFrOwotCWNhc2UgSURfVEZPT1Q6Ci0JICAgIGlmICggIWZvb3QgKQotCQlm
b290ID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsICo+KGNoaWxkKTsK
LQkgICAgYnJlYWs7Ci0JY2FzZSBJRF9UQk9EWToKLQkgICAgaWYgKCAhZmlyc3RCb2R5ICkKLQkJ
Zmlyc3RCb2R5ID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsICo+KGNo
aWxkKTsKLQkgICAgYnJlYWs7Ci0JfQorICAgIGlmIChyZXR2YWwpIHsKKyAgICAgICAgaWYgKCF0
Q2FwdGlvbiAmJiBjaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmNhcHRpb24oKSkpCisgICAg
ICAgICAgICB0Q2FwdGlvbiA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZUNhcHRpb25FbGVtZW50SW1w
bCAqPihjaGlsZCk7CisgICAgICAgIGVsc2UgaWYgKCFoZWFkICYmIGNoaWxkLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6dGhlYWQoKSkpCisgICAgICAgICAgICBoZWFkID0gc3RhdGljX2Nhc3Q8SFRN
TFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsICo+KGNoaWxkKTsKKyAgICAgICAgZWxzZSBpZiAoIWZv
b3QgJiYgY2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0Zm9vdCgpKSkKKyAgICAgICAgICAg
IGZvb3QgPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGwgKj4oY2hpbGQp
OworCWVsc2UgaWYgKCFmaXJzdEJvZHkgJiYgY2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0
Ym9keSgpKSkKKwkgICAgZmlyc3RCb2R5ID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlU2VjdGlvbkVs
ZW1lbnRJbXBsICo+KGNoaWxkKTsKICAgICB9CiAgICAgcmV0dXJuIHJldHZhbDsKIH0KQEAgLTgw
MiwyNiArNzg1LDE5IEBAIHZvaWQgSFRNTFRhYmxlUGFydEVsZW1lbnRJbXBsOjpwYXJzZU1hcHAK
IAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1IVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGw6OkhU
TUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNob3J0IHRhZ2lk
LCBib29sIGltcGxpY2l0KQotICAgIDogSFRNTFRhYmxlUGFydEVsZW1lbnRJbXBsKGRvYykKK0hU
TUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbDo6SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsKGNv
bnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50UHRyICpkb2MsIGJvb2wgaW1wbGlj
aXQpCisgICAgOiBIVE1MVGFibGVQYXJ0RWxlbWVudEltcGwodGFnTmFtZSwgZG9jKQogewotICAg
IF9pZCA9IHRhZ2lkOwogICAgIG1faW1wbGljaXQgPSBpbXBsaWNpdDsKIH0KIAotTm9kZUltcGw6
OklkIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVy
biBfaWQ7Ci19Ci0KIE5vZGVJbXBsICpIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGw6OmFkZENo
aWxkKE5vZGVJbXBsICpjaGlsZCkKIHsKICNpZmRlZiBERUJVR19MQVlPVVQKICAgICBrZERlYnVn
KCA2MDMwICkgPDwgbm9kZU5hbWUoKS5zdHJpbmcoKSA8PCAiKFRib2R5KTo6YWRkQ2hpbGQoICIg
PDwgY2hpbGQtPm5vZGVOYW1lKCkuc3RyaW5nKCkgPDwgIiApIiA8PCBlbmRsOwogI2VuZGlmCiAK
LSAgICBpZiAoY2hpbGQtPmlkKCkgPT0gSURfRk9STSkgeworICAgIGlmIChjaGlsZC0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OmZvcm0oKSkpIHsKICAgICAgICAgLy8gRmlyc3QgYWRkIHRoZSBjaGls
ZC4KICAgICAgICAgSFRNTEVsZW1lbnRJbXBsOjphZGRDaGlsZChjaGlsZCk7CiAgICAgICAgIC8v
IE5vdyBzaW1wbHkgcmV0dXJuIG91cnNlbHZlcyBhcyB0aGUgbmV3bm9kZS4gIFRoaXMgaGFzIHRo
ZSBlZmZlY3Qgb2YKQEAgLTg3Nyw3ICs4NTMsNyBAQCBpbnQgSFRNTFRhYmxlU2VjdGlvbkVsZW1l
bnRJbXBsOjpudW1Sb3dzCiAgICAgaW50IHJvd3MgPSAwOwogICAgIGNvbnN0IE5vZGVJbXBsICpu
ID0gZmlyc3RDaGlsZCgpOwogICAgIHdoaWxlIChuKSB7Ci0gICAgICAgIGlmIChuLT5pZCgpID09
IElEX1RSKQorICAgICAgICBpZiAobi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRyKCkpKQogICAg
ICAgICAgICAgcm93cysrOwogICAgICAgICBuID0gbi0+bmV4dFNpYmxpbmcoKTsKICAgICB9CkBA
IC05MzIsMTggKzkwOCwxMyBAQCBTaGFyZWRQdHI8SFRNTENvbGxlY3Rpb25JbXBsPiBIVE1MVGFi
bGVTCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotTm9kZUltcGw6OklkIEhUTUxUYWJsZVJvd0Vs
ZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX1RSOwotfQotCiBOb2RlSW1w
bCAqSFRNTFRhYmxlUm93RWxlbWVudEltcGw6OmFkZENoaWxkKE5vZGVJbXBsICpjaGlsZCkKIHsK
ICNpZmRlZiBERUJVR19MQVlPVVQKICAgICBrZERlYnVnKCA2MDMwICkgPDwgbm9kZU5hbWUoKS5z
dHJpbmcoKSA8PCAiKFRyb3cpOjphZGRDaGlsZCggIiA8PCBjaGlsZC0+bm9kZU5hbWUoKS5zdHJp
bmcoKSA8PCAiICkiIDw8IGVuZGw7CiAjZW5kaWYKIAotICAgIGlmIChjaGlsZC0+aWQoKSA9PSBJ
RF9GT1JNKSB7CisgICAgaWYgKGNoaWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Zm9ybSgpKSkg
ewogICAgICAgICAvLyBGaXJzdCBhZGQgdGhlIGNoaWxkLgogICAgICAgICBIVE1MRWxlbWVudElt
cGw6OmFkZENoaWxkKGNoaWxkKTsKICAgICAgICAgLy8gTm93IHNpbXBseSByZXR1cm4gb3Vyc2Vs
dmVzIGFzIHRoZSBuZXdub2RlLiAgVGhpcyBoYXMgdGhlIGVmZmVjdCBvZgpAQCAtOTU4LDE2ICs5
MjksMTYgQEAgbG9uZyBIVE1MVGFibGVSb3dFbGVtZW50SW1wbDo6cm93SW5kZXgoKQogICAgIGlu
dCBySW5kZXggPSAwOwogCiAgICAgTm9kZUltcGwgKnRhYmxlID0gcGFyZW50Tm9kZSgpOwotICAg
IGlmICggIXRhYmxlICkKKyAgICBpZiAoIXRhYmxlKQogCXJldHVybiAtMTsKICAgICB0YWJsZSA9
IHRhYmxlLT5wYXJlbnROb2RlKCk7Ci0gICAgaWYgKCAhdGFibGUgfHwgdGFibGUtPmlkKCkgIT0g
SURfVEFCTEUgKQorICAgIGlmICghdGFibGUgfHwgIXRhYmxlLT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6dGFibGUoKSkpCiAJcmV0dXJuIC0xOwogCiAgICAgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJ
bXBsICpmb290ID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlRWxlbWVudEltcGwgKj4odGFibGUpLT50
Rm9vdCgpOwogICAgIE5vZGVJbXBsICpub2RlID0gdGFibGUtPmZpcnN0Q2hpbGQoKTsKLSAgICB3
aGlsZSAoIG5vZGUgKSB7Ci0gICAgICAgIGlmICggbm9kZSAhPSBmb290ICYmIChub2RlLT5pZCgp
ID09IElEX1RIRUFEIHx8IG5vZGUtPmlkKCkgPT0gSURfVEZPT1QgfHwgbm9kZS0+aWQoKSA9PSBJ
RF9UQk9EWSkgKSB7CisgICAgd2hpbGUgKG5vZGUpIHsKKyAgICAgICAgaWYgKG5vZGUgIT0gZm9v
dCAmJiAobm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRoZWFkKCkpIHx8IG5vZGUtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjp0Zm9vdCgpKSB8fCBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
dGJvZHkoKSkpKSB7CiAJICAgIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbCogc2VjdGlvbiA9
IHN0YXRpY19jYXN0PEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbCAqPihub2RlKTsKIAkgICAg
Y29uc3QgTm9kZUltcGwgKnJvdyA9IHNlY3Rpb24tPmZpcnN0Q2hpbGQoKTsKIAkgICAgd2hpbGUg
KCByb3cgKSB7CkBAIC05OTYsNyArOTY3LDcgQEAgbG9uZyBIVE1MVGFibGVSb3dFbGVtZW50SW1w
bDo6c2VjdGlvblJvdwogICAgIGNvbnN0IE5vZGVJbXBsICpuID0gdGhpczsKICAgICBkbyB7CiAg
ICAgICAgIG4gPSBuLT5wcmV2aW91c1NpYmxpbmcoKTsKLSAgICAgICAgaWYgKG4gJiYgbi0+aXNF
bGVtZW50Tm9kZSgpICYmIG4tPmlkKCkgPT0gSURfVFIpCisgICAgICAgIGlmIChuICYmIG4tPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjp0cigpKSkKICAgICAgICAgICAgIHJJbmRleCsrOwogICAgIH0K
ICAgICB3aGlsZSAobik7CkBAIC0xMDEzLDcgKzk4NCw3IEBAIEhUTUxFbGVtZW50SW1wbCAqSFRN
TFRhYmxlUm93RWxlbWVudEltcGwKICAgICAgICAgZXhjZXB0aW9uY29kZSA9IERPTUV4Y2VwdGlv
bjo6SU5ERVhfU0laRV9FUlI7IC8vIHBlciB0aGUgRE9NCiAgICAgZWxzZQogICAgIHsKLSAgICAg
ICAgYyA9IG5ldyBIVE1MVGFibGVDZWxsRWxlbWVudEltcGwoZG9jUHRyKCksIElEX1REKTsKKyAg
ICAgICAgYyA9IG5ldyBIVE1MVGFibGVDZWxsRWxlbWVudEltcGwoSFRNTE5hbWVzOjp0ZCgpLCBk
b2NQdHIoKSk7CiAgICAgICAgIGlmKG51bUNlbGxzID09IGluZGV4IHx8IGluZGV4ID09IC0xKQog
ICAgICAgICAgICAgYXBwZW5kQ2hpbGQoYywgZXhjZXB0aW9uY29kZSk7CiAgICAgICAgIGVsc2Ug
ewpAQCAtMTEwMywxNSArMTA3NCwxNCBAQCB2b2lkIEhUTUxUYWJsZVJvd0VsZW1lbnRJbXBsOjpz
ZXRWQWxpZ24oCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSFRNTFRhYmxlQ2VsbEVsZW1lbnRJ
bXBsOjpIVE1MVGFibGVDZWxsRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgaW50IHRhZykK
LSAgOiBIVE1MVGFibGVQYXJ0RWxlbWVudEltcGwoZG9jKQorSFRNTFRhYmxlQ2VsbEVsZW1lbnRJ
bXBsOjpIVE1MVGFibGVDZWxsRWxlbWVudEltcGwoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFt
ZSwgRG9jdW1lbnRQdHIgKmRvYykKKyAgOiBIVE1MVGFibGVQYXJ0RWxlbWVudEltcGwodGFnTmFt
ZSwgZG9jKQogewotICBfY29sID0gLTE7Ci0gIF9yb3cgPSAtMTsKLSAgY1NwYW4gPSByU3BhbiA9
IDE7Ci0gIF9pZCA9IHRhZzsKLSAgcm93SGVpZ2h0ID0gMDsKLSAgbV9zb2xpZCA9IGZhbHNlOwor
ICAgIF9jb2wgPSAtMTsKKyAgICBfcm93ID0gLTE7CisgICAgY1NwYW4gPSByU3BhbiA9IDE7Cisg
ICAgcm93SGVpZ2h0ID0gMDsKKyAgICBtX3NvbGlkID0gZmFsc2U7CiB9CiAKIEhUTUxUYWJsZUNl
bGxFbGVtZW50SW1wbDo6fkhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbCgpCkBAIC0xMTc5LDkgKzEx
NDksOSBAQCB2b2lkIEhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbDo6cGFyc2VNYXBwCiAvLyB1c2Vk
IGJ5IHRhYmxlIGNlbGxzIHRvIHNoYXJlIHN0eWxlIGRlY2xzIGNyZWF0ZWQgYnkgdGhlIGVuY2xv
c2luZyB0YWJsZS4KIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uSW1wbCogSFRNTFRhYmxlQ2Vs
bEVsZW1lbnRJbXBsOjphZGRpdGlvbmFsQXR0cmlidXRlU3R5bGVEZWNsKCkKIHsKLSAgICBIVE1M
RWxlbWVudEltcGwqIHAgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwqPihwYXJlbnROb2Rl
KCkpOwotICAgIHdoaWxlKHAgJiYgcC0+aWQoKSAhPSBJRF9UQUJMRSkKLSAgICAgICAgcCA9IHN0
YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCo+KHAtPnBhcmVudE5vZGUoKSk7CisgICAgTm9kZUlt
cGwqIHAgPSBwYXJlbnROb2RlKCk7CisgICAgd2hpbGUgKHAgJiYgIXAtPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjp0YWJsZSgpKSkKKyAgICAgICAgcCA9IHAtPnBhcmVudE5vZGUoKTsKIAogICAgIGlm
IChwKSB7CiAgICAgICAgIEhUTUxUYWJsZUVsZW1lbnRJbXBsKiB0YWJsZSA9IHN0YXRpY19jYXN0
PEhUTUxUYWJsZUVsZW1lbnRJbXBsKj4ocCk7CkBAIC0xMTkxLDE1ICsxMTYxLDYgQEAgQ1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb25JbXBsKiBIVE1MVGFibAogICAgIHJldHVybiAwOwogfQogCi12
b2lkIEhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbDo6YXR0YWNoKCkKLXsKLSAgICBIVE1MRWxlbWVu
dEltcGwqIHAgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwqPihwYXJlbnROb2RlKCkpOwot
ICAgIHdoaWxlKHAgJiYgcC0+aWQoKSAhPSBJRF9UQUJMRSkKLSAgICAgICAgcCA9IHN0YXRpY19j
YXN0PEhUTUxFbGVtZW50SW1wbCo+KHAtPnBhcmVudE5vZGUoKSk7Ci0KLSAgICBIVE1MVGFibGVQ
YXJ0RWxlbWVudEltcGw6OmF0dGFjaCgpOwotfQotCiBib29sIEhUTUxUYWJsZUNlbGxFbGVtZW50
SW1wbDo6aXNVUkxBdHRyaWJ1dGUoQXR0cmlidXRlSW1wbCAqYXR0cikgY29uc3QKIHsKICAgICBy
ZXR1cm4gYXR0ci0+aWQoKSA9PSBBVFRSX0JBQ0tHUk9VTkQ7CkBAIC0xMzM3LDE2ICsxMjk4LDEw
IEBAIHZvaWQgSFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsOjpzZXRXaWR0aCgKIAogLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQogCi1IVE1MVGFibGVDb2xFbGVtZW50SW1wbDo6SFRNTFRhYmxlQ29sRWxlbWVu
dEltcGwoRG9jdW1lbnRQdHIgKmRvYywgdXNob3J0IGkpCi0gICAgOiBIVE1MVGFibGVQYXJ0RWxl
bWVudEltcGwoZG9jKQorSFRNTFRhYmxlQ29sRWxlbWVudEltcGw6OkhUTUxUYWJsZUNvbEVsZW1l
bnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50UHRyICpkb2MpCisg
ICAgOiBIVE1MVGFibGVQYXJ0RWxlbWVudEltcGwodGFnTmFtZSwgZG9jKQogewotICAgIF9pZCA9
IGk7Ci0gICAgX3NwYW4gPSAoX2lkID09IElEX0NPTEdST1VQID8gMCA6IDEpOwotfQotCi1Ob2Rl
SW1wbDo6SWQgSFRNTFRhYmxlQ29sRWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gX2lkOworICAgIF9zcGFuID0gKHRhZ05hbWUubWF0Y2hlcyhIVE1MTmFtZXM6OmNvbGdyb3Vw
KCkpID8gMCA6IDEpOwogfQogCiBib29sIEhUTUxUYWJsZUNvbEVsZW1lbnRJbXBsOjptYXBUb0Vu
dHJ5KE5vZGVJbXBsOjpJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25z
dApAQCAtMTQzNywxMSArMTM5Miw2IEBAIHZvaWQgSFRNTFRhYmxlQ29sRWxlbWVudEltcGw6OnNl
dFdpZHRoKGMKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Ob2RlSW1wbDo6SWQgSFRNTFRhYmxl
Q2FwdGlvbkVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0NBUFRJT047
Ci19Ci0KIGJvb2wgSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnRJbXBsOjptYXBUb0VudHJ5KE5vZGVJ
bXBsOjpJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdAogewogICAg
IGlmIChhdHRyID09IEFUVFJfQUxJR04pIHsKSW5kZXg6IGtodG1sL2h0bWwvaHRtbF90YWJsZWlt
cGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9odG1sL2h0
bWxfdGFibGVpbXBsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjAKZGlmZiAtdSAtcCAtcjEu
MjAga2h0bWwvaHRtbC9odG1sX3RhYmxlaW1wbC5oCi0tLSBraHRtbC9odG1sL2h0bWxfdGFibGVp
bXBsLmgJMTEgTWF5IDIwMDUgMDU6NDk6MzQgLTAwMDAJMS4yMAorKysga2h0bWwvaHRtbC9odG1s
X3RhYmxlaW1wbC5oCTE2IEp1biAyMDA1IDIzOjAyOjIxIC0wMDAwCkBAIC02Miw4ICs2Miw2IEBA
IHB1YmxpYzoKICAgICBIVE1MVGFibGVFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKTsKICAg
ICB+SFRNTFRhYmxlRWxlbWVudEltcGwoKTsKIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsK
LQogICAgIEhUTUxUYWJsZUNhcHRpb25FbGVtZW50SW1wbCAqY2FwdGlvbigpIGNvbnN0IHsgcmV0
dXJuIHRDYXB0aW9uOyB9CiAgICAgTm9kZUltcGwgKnNldENhcHRpb24oIEhUTUxUYWJsZUNhcHRp
b25FbGVtZW50SW1wbCAqICk7CiAKQEAgLTE0Nyw4ICsxNDUsOCBAQCBjbGFzcyBIVE1MVGFibGVQ
YXJ0RWxlbWVudEltcGwgOiBwdWJsaWMgCiAKIHsKIHB1YmxpYzoKLSAgICBIVE1MVGFibGVQYXJ0
RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgICAgICAgOiBIVE1MRWxlbWVudEltcGwo
ZG9jKQorICAgIEhUTUxUYWJsZVBhcnRFbGVtZW50SW1wbChjb25zdCBRdWFsaWZpZWROYW1lJiB0
YWdOYW1lLCBEb2N1bWVudFB0ciAqZG9jKQorICAgICAgICA6IEhUTUxFbGVtZW50SW1wbCh0YWdO
YW1lLCBkb2MpCiAgICAgICAgIHsgfQogCiAgICAgdmlydHVhbCBib29sIG1hcFRvRW50cnkoTm9k
ZUltcGw6OklkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0OwpAQCAt
MTYwLDkgKzE1OCw3IEBAIHB1YmxpYzoKIGNsYXNzIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1w
bCA6IHB1YmxpYyBIVE1MVGFibGVQYXJ0RWxlbWVudEltcGwKIHsKIHB1YmxpYzoKLSAgICBIVE1M
VGFibGVTZWN0aW9uRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgdXNob3J0IHRhZ2lkLCBi
b29sIGltcGxpY2l0KTsKLQotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKKyAgICBIVE1MVGFi
bGVTZWN0aW9uRWxlbWVudEltcGwoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1l
bnRQdHIgKmRvYywgYm9vbCBpbXBsaWNpdCk7CiAKICAgICB2aXJ0dWFsIE5vZGVJbXBsICphZGRD
aGlsZChOb2RlSW1wbCAqY2hpbGQpOwogICAgIApAQCAtMTg0LDkgKzE4MCw2IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHNldFZBbGlnbiggY29uc3QgRE9NU3RyaW5nICYgKTsKIAogICAgIGtodG1sOjpT
aGFyZWRQdHI8SFRNTENvbGxlY3Rpb25JbXBsPiByb3dzKCk7Ci0KLXByb3RlY3RlZDoKLSAgICB1
c2hvcnQgX2lkOwogfTsKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTk1LDkgKzE4OCw3IEBA
IGNsYXNzIEhUTUxUYWJsZVJvd0VsZW1lbnRJbXBsIDogcHVibGljIEgKIHsKIHB1YmxpYzoKICAg
ICBIVE1MVGFibGVSb3dFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAgICAgICA6IEhU
TUxUYWJsZVBhcnRFbGVtZW50SW1wbChkb2MpIHt9Ci0KLSAgICB2aXJ0dWFsIElkIGlkKCkgY29u
c3Q7CisgICAgICAgIDogSFRNTFRhYmxlUGFydEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6dHIoKSwg
ZG9jKSB7fQogCiAgICAgdmlydHVhbCBOb2RlSW1wbCAqYWRkQ2hpbGQoTm9kZUltcGwgKmNoaWxk
KTsKICAgICAKQEAgLTIzOCw3ICsyMjksNyBAQCBwcm90ZWN0ZWQ6CiBjbGFzcyBIVE1MVGFibGVD
ZWxsRWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTFRhYmxlUGFydEVsZW1lbnRJbXBsCiB7CiBwdWJs
aWM6Ci0gICAgSFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIGludCB0
YWdJZCk7CisgICAgSFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUm
IHRhZ05hbWUsIERvY3VtZW50UHRyICpkb2MpOwogICAgIH5IVE1MVGFibGVDZWxsRWxlbWVudElt
cGwoKTsKIAogICAgIC8vICMjIyBGSVggdGhlc2UgdHdvLi4uCkBAIC0yNTEsMTQgKzI0MiwxMCBA
QCBwdWJsaWM6CiAKICAgICBpbnQgY29sU3BhbigpIGNvbnN0IHsgcmV0dXJuIGNTcGFuOyB9CiAg
ICAgaW50IHJvd1NwYW4oKSBjb25zdCB7IHJldHVybiByU3BhbjsgfQotICAgIAotICAgIHZpcnR1
YWwgSWQgaWQoKSBjb25zdCB7IHJldHVybiBfaWQ7IH0KLSAgICAKKwogICAgIHZpcnR1YWwgYm9v
bCBtYXBUb0VudHJ5KE5vZGVJbXBsOjpJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVz
dWx0KSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVk
QXR0cmlidXRlSW1wbCAqYXR0cik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoKCk7Ci0KICAg
ICAvLyB1c2VkIGJ5IHRhYmxlIGNlbGxzIHRvIHNoYXJlIHN0eWxlIGRlY2xzIGNyZWF0ZWQgYnkg
dGhlIGVuY2xvc2luZyB0YWJsZS4KICAgICB2aXJ0dWFsIENTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uSW1wbCogYWRkaXRpb25hbEF0dHJpYnV0ZVN0eWxlRGVjbCgpOwogICAgIApAQCAtMzExLDcg
KzI5OCw2IEBAIHByb3RlY3RlZDoKICAgICBpbnQgX2NvbDsKICAgICBpbnQgclNwYW47CiAgICAg
aW50IGNTcGFuOwotICAgIGludCBfaWQ7CiAgICAgaW50IHJvd0hlaWdodDsKICAgICBib29sIG1f
c29saWQgICAgICAgIDogMTsKIH07CkBAIC0zMjEsOSArMzA3LDcgQEAgcHJvdGVjdGVkOgogY2xh
c3MgSFRNTFRhYmxlQ29sRWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTFRhYmxlUGFydEVsZW1lbnRJ
bXBsCiB7CiBwdWJsaWM6Ci0gICAgSFRNTFRhYmxlQ29sRWxlbWVudEltcGwoRG9jdW1lbnRQdHIg
KmRvYywgdXNob3J0IGkpOwotCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OworICAgIEhUTUxU
YWJsZUNvbEVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50
UHRyICpkb2MpOwogCiAgICAgdm9pZCBzZXRUYWJsZShIVE1MVGFibGVFbGVtZW50SW1wbCAqdCkg
eyB0YWJsZSA9IHQ7IH0KIApAQCAtMzUxLDEwICszMzUsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBz
ZXRXaWR0aCggY29uc3QgRE9NU3RyaW5nICYgKTsKIAogcHJvdGVjdGVkOgotICAgIC8vIGNvdWxk
IGJlIElEX0NPTCBvciBJRF9DT0xHUk9VUCAuLi4gVGhlIERPTSBpcyBub3QgcXVpdGUgY2xlYXIg
b24KLSAgICAvLyB0aGlzLCBidXQgc2luY2UgYm90aCBlbGVtZW50cyB3b3JrIHF1aXRlIHNpbWls
YXIsIHdlIHVzZSBvbmUKLSAgICAvLyBET01FbGVtZW50IGZvciB0aGVtLi4uCi0gICAgdXNob3J0
IF9pZDsKICAgICBpbnQgX3NwYW47CiAgICAgSFRNTFRhYmxlRWxlbWVudEltcGwgKnRhYmxlOwog
fTsKQEAgLTM2NSw5ICszNDUsNyBAQCBjbGFzcyBIVE1MVGFibGVDYXB0aW9uRWxlbWVudEltcGwg
OiBwdWJsCiB7CiBwdWJsaWM6CiAgICAgSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnRJbXBsKERvY3Vt
ZW50UHRyICpkb2MpCi0gICAgICAgIDogSFRNTFRhYmxlUGFydEVsZW1lbnRJbXBsKGRvYykge30K
LQotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKKyAgICAgICAgOiBIVE1MVGFibGVQYXJ0RWxl
bWVudEltcGwoSFRNTE5hbWVzOjpjYXB0aW9uKCksIGRvYykge30KICAgICAKICAgICB2aXJ0dWFs
IGJvb2wgbWFwVG9FbnRyeShOb2RlSW1wbDo6SWQgYXR0ciwgTWFwcGVkQXR0cmlidXRlRW50cnkm
IHJlc3VsdCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1h
cHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIpOwpJbmRleDoga2h0bWwvaHRtbC9odG1scGFyc2VyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9odG1sL2h0bWxw
YXJzZXIuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjk2CmRpZmYgLXUgLXAgLXIxLjk2IGto
dG1sL2h0bWwvaHRtbHBhcnNlci5jcHAKLS0tIGtodG1sL2h0bWwvaHRtbHBhcnNlci5jcHAJMTEg
TWF5IDIwMDUgMDA6NTg6MjggLTAwMDAJMS45NgorKysga2h0bWwvaHRtbC9odG1scGFyc2VyLmNw
cAkxNiBKdW4gMjAwNSAyMzowMjoyMiAtMDAwMApAQCAtNjksMjQgKzY5LDI0IEBAIHVzaW5nIG5h
bWVzcGFjZSBraHRtbDsKIGNsYXNzIEhUTUxTdGFja0VsZW0KIHsKIHB1YmxpYzoKLSAgICBIVE1M
U3RhY2tFbGVtKCBpbnQgX2lkLAotICAgICAgICAgICAgICAgICAgIGludCBfbGV2ZWwsCi0gICAg
ICAgICAgICAgICAgICAgRE9NOjpOb2RlSW1wbCAqX25vZGUsCi0gICAgICAgICAgICAgICAgICAg
SFRNTFN0YWNrRWxlbSAqIF9uZXh0CisgICAgSFRNTFN0YWNrRWxlbShjb25zdCBBdG9taWNTdHJp
bmcmIF90YWdOYW1lLAorICAgICAgICAgICAgICAgICAgaW50IF9sZXZlbCwKKyAgICAgICAgICAg
ICAgICAgIERPTTo6Tm9kZUltcGwgKl9ub2RlLAorICAgICAgICAgICAgICAgICAgSFRNTFN0YWNr
RWxlbSAqIF9uZXh0CiAgICAgICAgICkKICAgICAgICAgOgotICAgICAgICBpZChfaWQpLAorICAg
ICAgICB0YWdOYW1lKF90YWdOYW1lKSwKICAgICAgICAgbGV2ZWwoX2xldmVsKSwKICAgICAgICAg
c3RyYXlUYWJsZUNvbnRlbnQoZmFsc2UpLAogICAgICAgICBub2RlKF9ub2RlKSwKICAgICAgICAg
bmV4dChfbmV4dCkKICAgICAgICAgeyB9CiAKLSAgICBpbnQgICAgICAgaWQ7Ci0gICAgaW50ICAg
ICAgIGxldmVsOwotICAgIGJvb2wgICAgICBzdHJheVRhYmxlQ29udGVudDsKLSAgICBOb2RlSW1w
bCAqbm9kZTsKLSAgICBIVE1MU3RhY2tFbGVtICpuZXh0OworICAgIEF0b21pY1N0cmluZyB0YWdO
YW1lOworICAgIGludCBsZXZlbDsKKyAgICBib29sIHN0cmF5VGFibGVDb250ZW50OworICAgIE5v
ZGVJbXBsKiBub2RlOworICAgIEhUTUxTdGFja0VsZW0qIG5leHQ7CiB9OwogCiAvKioKQEAgLTE2
NSw5ICsxNjUsNiBAQCB2b2lkIEtIVE1MUGFyc2VyOjpyZXNldCgpCiAKICAgICBmcmVlQmxvY2so
KTsKIAotICAgIC8vIGJlZm9yZSBwYXJzaW5nLCBubyB0YWdzIGFyZSBmb3JiaWRkZW4KLSAgICBt
ZW1zZXQoZm9yYmlkZGVuVGFnLCAwLCBzaXplb2YoZm9yYmlkZGVuVGFnKSk7Ci0KICAgICBpbkJv
ZHkgPSBmYWxzZTsKICAgICBoYXZlRnJhbWVTZXQgPSBmYWxzZTsKICAgICBoYXZlQ29udGVudCA9
IGZhbHNlOwpAQCAtMTgwLDcgKzE3Nyw3IEBAIHZvaWQgS0hUTUxQYXJzZXI6OnJlc2V0KCkKICAg
ICBlbmQgPSBmYWxzZTsKICAgICBpc2luZGV4ID0gMDsKICAgICAKLSAgICBkaXNjYXJkX3VudGls
ID0gMDsKKyAgICBkaXNjYXJkX3VudGlsID0gbnVsbEF0b207CiB9CiAKIHZvaWQgS0hUTUxQYXJz
ZXI6OnNldEN1cnJlbnQoRE9NOjpOb2RlSW1wbCAqbmV3Q3VycmVudCkgCkBAIC0xOTYsNDEgKzE5
MywyOSBAQCB2b2lkIEtIVE1MUGFyc2VyOjpzZXRDdXJyZW50KERPTTo6Tm9kZUltCiAKIHZvaWQg
S0hUTUxQYXJzZXI6OnBhcnNlVG9rZW4oVG9rZW4gKnQpCiB7Ci0gICAgaWYoZGlzY2FyZF91bnRp
bCkgewotICAgICAgICBpZih0LT5pZCA9PSBkaXNjYXJkX3VudGlsKQotICAgICAgICAgICAgZGlz
Y2FyZF91bnRpbCA9IDA7CisgICAgaWYgKCFkaXNjYXJkX3VudGlsLmlzTnVsbCgpKSB7CisgICAg
ICAgIGlmICh0LT50YWdOYW1lID09IGRpc2NhcmRfdW50aWwgJiYgIXQtPmJlZ2luVGFnKQorICAg
ICAgICAgICAgZGlzY2FyZF91bnRpbCA9IG51bGxBdG9tOwogCiAgICAgICAgIC8vIGRvIG5vdCBz
a2lwIDwvaWZyYW1lPgotICAgICAgICBpZiAoIGRpc2NhcmRfdW50aWwgfHwgY3VycmVudC0+aWQo
KSArIElEX0NMT1NFX1RBRyAhPSB0LT5pZCApCisgICAgICAgIGlmICghZGlzY2FyZF91bnRpbC5p
c051bGwoKSB8fCAoY3VycmVudC0+bG9jYWxOYW1lKCkgIT0gdC0+dGFnTmFtZSkpCiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0jaWZkZWYgUEFSU0VSX0RFQlVHCi0gICAga2REZWJ1Zygg
NjAzNSApIDw8ICJcblxuPT0+IHBhcnNlcjogcHJvY2Vzc2luZyB0b2tlbiAiIDw8IGdldFRhZ05h
bWUodC0+aWQpLnN0cmluZygpIDw8ICIoIiA8PCB0LT5pZCA8PCAiKSIKLSAgICAgICAgICAgICAg
ICAgICAgPDwgIiBjdXJyZW50ID0gIiA8PCBnZXRUYWdOYW1lKGN1cnJlbnQtPmlkKCkpLnN0cmlu
ZygpIDw8ICIoIiA8PCBjdXJyZW50LT5pZCgpIDw8ICIpIiA8PCBlbmRsOwotICAgIGtkRGVidWco
NjAzNSkgPDwgIiBpbkJvZHk9IiA8PCBpbkJvZHkgPDwgIiBoYXZlRnJhbWVTZXQ9IiA8PCBoYXZl
RnJhbWVTZXQgPDwgZW5kbDsKLSNlbmRpZgotCi0gICAgLy8gaG9seSBzaGl0LiBhcHBhcmVudGx5
IHNvbWUgc2l0ZXMgdXNlIDwvYnI+IGluc3RlYWQgb2YgPGJyPgotICAgIC8vIGJlIGNvbXBhdGli
bGUgd2l0aCBJRSBhbmQgTlMKLSAgICBpZiAodC0+aWQgPT0gSURfQlIgKyBJRF9DTE9TRV9UQUcg
JiYgZG9jKCktPmluQ29tcGF0TW9kZSgpKQotICAgICAgICB0LT5pZCA9IElEX0JSOworICAgIC8v
IEFwcGFyZW50bHkgc29tZSBzaXRlcyB1c2UgPC9icj4gaW5zdGVhZCBvZiA8YnI+LiAgQmUgY29t
cGF0aWJsZSB3aXRoIElFIGFuZCBGaXJlZm94IGFuZCB0cmVhdCB0aGlzIGxpa2UgPGJyPi4KKyAg
ICBpZiAodC0+aXNDbG9zZVRhZyhIVE1MTmFtZXM6OmJyKCkpICYmIGRvYygpLT5pbkNvbXBhdE1v
ZGUoKSkKKyAgICAgICAgdC0+YmVnaW5UYWcgPSB0cnVlOwogCi0gICAgaWYgKHQtPmlkID4gSURf
Q0xPU0VfVEFHKQotICAgIHsKKyAgICBpZiAoIXQtPmJlZ2luVGFnKSB7CiAgICAgICAgIHByb2Nl
c3NDbG9zZVRhZyh0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIC8vIGlnbm9yZSBz
cGFjZXMsIGlmIHdlJ3JlIG5vdCBpbnNpZGUgYSBwYXJhZ3JhcGggb3Igb3RoZXIgaW5saW5lIGNv
ZGUKLSAgICBpZiggdC0+aWQgPT0gSURfVEVYVCAmJiB0LT50ZXh0ICkgewotICAgICAgICBpZihp
bkJvZHkgJiYgIXNraXBNb2RlKCkgJiYgY3VycmVudC0+aWQoKSAhPSBJRF9TVFlMRSAKLSAgICAg
ICAgICAgICYmIGN1cnJlbnQtPmlkKCkgIT0gSURfVElUTEUgJiYgY3VycmVudC0+aWQoKSAhPSBJ
RF9TQ1JJUFQgJiYKLSAgICAgICAgICAgICF0LT50ZXh0LT5jb250YWluc09ubHlXaGl0ZXNwYWNl
KCkpIAorICAgIGlmICh0LT50YWdOYW1lID09IHRleHRBdG9tICYmIHQtPnRleHQpIHsKKyAgICAg
ICAgaWYgKGluQm9keSAmJiAhc2tpcE1vZGUoKSAmJiBjdXJyZW50LT5sb2NhbE5hbWUoKSAhPSBI
VE1MTmFtZXM6OnN0eWxlKCkgJiYgY3VycmVudC0+bG9jYWxOYW1lKCkgIT0gSFRNTE5hbWVzOjp0
aXRsZSgpICYmIAorICAgICAgICAgICAgY3VycmVudC0+bG9jYWxOYW1lKCkgIT0gSFRNTE5hbWVz
OjpzY3JpcHQoKSAmJiAhdC0+dGV4dC0+Y29udGFpbnNPbmx5V2hpdGVzcGFjZSgpKSAKICAgICAg
ICAgICAgIGhhdmVDb250ZW50ID0gdHJ1ZTsKLSNpZmRlZiBQQVJTRVJfREVCVUcKLSAgICAgICAg
a2REZWJ1Zyg2MDM1KSA8PCAibGVuZ3RoPSI8PCB0LT50ZXh0LT5sIDw8ICIgdGV4dD0nIiA8PCBR
Q29uc3RTdHJpbmcodC0+dGV4dC0+cywgdC0+dGV4dC0+bCkuc3RyaW5nKCkgPDwgIiciIDw8IGVu
ZGw7Ci0jZW5kaWYKICAgICB9CiAKICAgICBOb2RlSW1wbCAqbiA9IGdldEVsZW1lbnQodCk7CkBA
IC0yNDEsNTYgKzIyNiwzMSBAQCB2b2lkIEtIVE1MUGFyc2VyOjpwYXJzZVRva2VuKFRva2VuICp0
KQogICAgIFNoYXJlZFB0cjxOb2RlSW1wbD4gcHJvdGVjdE5vZGUobik7CiAKICAgICAvLyBzZXQg
YXR0cmlidXRlcwotICAgIGlmKG4tPmlzRWxlbWVudE5vZGUoKSkKLSAgICB7Ci0gICAgICAgIEVs
ZW1lbnRJbXBsICplID0gc3RhdGljX2Nhc3Q8RWxlbWVudEltcGwgKj4obik7CisgICAgaWYgKG4t
PmlzSFRNTEVsZW1lbnQoKSkgeworICAgICAgICBIVE1MRWxlbWVudEltcGwgKmUgPSBzdGF0aWNf
Y2FzdDxIVE1MRWxlbWVudEltcGwqPihuKTsKICAgICAgICAgZS0+c2V0QXR0cmlidXRlTWFwKHQt
PmF0dHJzKTsKIAogICAgICAgICAvLyB0YWtlIGNhcmUgb2Ygb3B0aW9uYWwgY2xvc2UgdGFncwot
ICAgICAgICBpZihlbmRUYWdSZXF1aXJlbWVudChlLT5pZCgpKSA9PSBET006Ok9QVElPTkFMKQot
ICAgICAgICAgICAgcG9wQmxvY2sodC0+aWQpOworICAgICAgICBpZiAoZS0+ZW5kVGFnUmVxdWly
ZW1lbnQoKSA9PSBET006Ok9QVElPTkFMKQorICAgICAgICAgICAgcG9wQmxvY2sodC0+dGFnTmFt
ZSk7CiAgICAgICAgICAgICAKLSAgICAgICAgaWYgKGlzSGVhZGVyVGFnKHQtPmlkKSkKKyAgICAg
ICAgaWYgKGlzSGVhZGVyVGFnKHQtPnRhZ05hbWUpKQogICAgICAgICAgICAgLy8gRG8gbm90IGFs
bG93IHR3byBoZWFkZXIgdGFncyB0byBiZSBuZXN0ZWQgaWYgdGhlIGludGVydmVuaW5nIHRhZ3Mg
YXJlIGlubGluZXMuCiAgICAgICAgICAgICBwb3BOZXN0ZWRIZWFkZXJUYWcoKTsKICAgICB9CiAK
LSAgICAvLyBpZiB0aGlzIHRhZyBpcyBmb3JiaWRkZW4gaW5zaWRlIHRoZSBjdXJyZW50IGNvbnRl
eHQsIHBvcAotICAgIC8vIGJsb2NrcyB1bnRpbCB3ZSBhcmUgYWxsb3dlZCB0byBhZGQgaXQuLi4K
LSAgICB3aGlsZSAoYmxvY2tTdGFjayAmJiB0LT5pZCA8PSBJRF9MQVNUX1RBRyAmJiBmb3JiaWRk
ZW5UYWdbdC0+aWRdKSB7Ci0jaWZkZWYgUEFSU0VSX0RFQlVHCi0gICAgICAgIGtkRGVidWcoIDYw
MzUgKSA8PCAidC0+aWQ6ICIgPDwgdC0+aWQgPDwgIiBpcyBmb3JiaWRkZW4gOi0oICIgPDwgZW5k
bDsKLSNlbmRpZgotICAgICAgICBwb3BPbmVCbG9jaygpOwotICAgIH0KLQotICAgIGlmICghaW5z
ZXJ0Tm9kZShuLCB0LT5mbGF0KSkgCi0gICAgeworICAgIGlmICghaW5zZXJ0Tm9kZShuLCB0LT5m
bGF0KSkgewogICAgICAgICAvLyB3ZSBjb3VsZG4ndCBpbnNlcnQgdGhlIG5vZGUuLi4KLSAgICAg
ICAgCi0gICAgICAgIGlmKG4tPmlzRWxlbWVudE5vZGUoKSkKLSAgICAgICAgewotICAgICAgICAg
ICAgRWxlbWVudEltcGwgKmUgPSBzdGF0aWNfY2FzdDxFbGVtZW50SW1wbCAqPihuKTsKKyAgICAg
ICAgaWYgKG4tPmlzRWxlbWVudE5vZGUoKSkgeworICAgICAgICAgICAgRWxlbWVudEltcGwqIGUg
PSBzdGF0aWNfY2FzdDxFbGVtZW50SW1wbCo+KG4pOwogICAgICAgICAgICAgZS0+c2V0QXR0cmli
dXRlTWFwKDApOwogICAgICAgICB9CiAgICAgICAgICAgICAKLSNpZmRlZiBQQVJTRVJfREVCVUcK
LSAgICAgICAga2REZWJ1ZyggNjAzNSApIDw8ICJpbnNlcnROb2RlIGZhaWxlZCBjdXJyZW50PSIg
PDwgY3VycmVudC0+aWQoKSA8PCAiLCBuZXc9IiA8PCBuLT5pZCgpIDw8ICIhIiA8PCBlbmRsOwot
I2VuZGlmCiAgICAgICAgIGlmIChtYXAgPT0gbikKLSAgICAgICAgewotI2lmZGVmIFBBUlNFUl9E
RUJVRwotICAgICAgICAgICAga2REZWJ1ZyggNjAzNSApIDw8ICIgIC0tPiByZXNldHRpbmcgbWFw
ISIgPDwgZW5kbDsKLSNlbmRpZgogICAgICAgICAgICAgbWFwID0gMDsKLSAgICAgICAgfQorCiAg
ICAgICAgIGlmIChmb3JtID09IG4pCi0gICAgICAgIHsKLSNpZmRlZiBQQVJTRVJfREVCVUcKLSAg
ICAgICAgICAgIGtkRGVidWcoIDYwMzUgKSA8PCAiICAgLS0+IHJlc2V0dGluZyBmb3JtISIgPDwg
ZW5kbDsKLSNlbmRpZgogICAgICAgICAgICAgZm9ybSA9IDA7Ci0gICAgICAgIH0KICAgICB9CiB9
CiAKQEAgLTMwNCwyNCArMjY0LDE4IEBAIGJvb2wgS0hUTUxQYXJzZXI6Omluc2VydE5vZGUoTm9k
ZUltcGwgKm4KIHsKICAgICBTaGFyZWRQdHI8Tm9kZUltcGw+IHByb3RlY3ROb2RlKG4pOwogCi0g
ICAgaW50IGlkID0gbi0+aWQoKTsKLQorICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1l
ID0gbi0+bG9jYWxOYW1lKCk7CisgICAgaW50IHRhZ1ByaW9yaXR5ID0gbi0+aXNIVE1MRWxlbWVu
dCgpID8gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsKj4obiktPnRhZ1ByaW9yaXR5KCkgOiAw
OworICAgICAgICAKICAgICAvLyBsZXQncyBiZSBzdHVwaWQgYW5kIGp1c3QgdHJ5IHRvIGluc2Vy
dCBpdC4KLSAgICAvLyB0aGlzIHNob3VsZCB3b3JrIGlmIHRoZSBkb2N1bWVudCBpcyB3ZWxsZm9y
bWVkCi0jaWZkZWYgUEFSU0VSX0RFQlVHCi0gICAgTm9kZUltcGwgKnRtcCA9IGN1cnJlbnQ7Ci0j
ZW5kaWYKKyAgICAvLyB0aGlzIHNob3VsZCB3b3JrIGlmIHRoZSBkb2N1bWVudCBpcyB3ZWxsLWZv
cm1lZAogICAgIE5vZGVJbXBsICpuZXdOb2RlID0gY3VycmVudC0+YWRkQ2hpbGQobik7Ci0gICAg
aWYgKCBuZXdOb2RlICkgewotI2lmZGVmIFBBUlNFUl9ERUJVRwotICAgICAgICBrZERlYnVnKCA2
MDM1ICkgPDwgImFkZGVkICIgPDwgbi0+bm9kZU5hbWUoKS5zdHJpbmcoKSA8PCAiIHRvICIgPDwg
dG1wLT5ub2RlTmFtZSgpLnN0cmluZygpIDw8ICIsIG5ldyBjdXJyZW50PSIgPDwgbmV3Tm9kZS0+
bm9kZU5hbWUoKS5zdHJpbmcoKSA8PCBlbmRsOwotI2VuZGlmCi0gICAgICAgIC8vIGRvbid0IHB1
c2ggZWxlbWVudHMgd2l0aG91dCBlbmQgdGFnIG9uIHRoZSBzdGFjawotICAgICAgICBpZih0YWdQ
cmlvcml0eShpZCkgIT0gMCAmJiAhZmxhdCkKLSAgICAgICAgewotICAgICAgICAgICAgcHVzaEJs
b2NrKGlkLCB0YWdQcmlvcml0eShpZCkpOworICAgIGlmIChuZXdOb2RlKSB7CisgICAgICAgIC8v
IGRvbid0IHB1c2ggZWxlbWVudHMgd2l0aG91dCBlbmQgdGFncyAoZS5nLiwgPGltZz4pIG9uIHRo
ZSBzdGFjaworICAgICAgICBpZiAodGFnUHJpb3JpdHkgPiAwICYmICFmbGF0KSB7CisgICAgICAg
ICAgICBwdXNoQmxvY2sobG9jYWxOYW1lLCB0YWdQcmlvcml0eSk7CiAgICAgICAgICAgICBpZiAo
bmV3Tm9kZSA9PSBjdXJyZW50KQotICAgICAgICAgICAgICAgIHBvcEJsb2NrKGlkKTsKKyAgICAg
ICAgICAgICAgICBwb3BCbG9jayhsb2NhbE5hbWUpOwogICAgICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgICAgIHNldEN1cnJlbnQobmV3Tm9kZSk7CiAjaWYgU1BFRURfREVCVUcgPCAyCkBAIC0z
NDUsOSArMjk5LDYgQEAgYm9vbCBLSFRNTFBhcnNlcjo6aW5zZXJ0Tm9kZShOb2RlSW1wbCAqbgog
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0gZWxzZSB7Ci0jaWZkZWYgUEFSU0VSX0RFQlVH
Ci0gICAgICAgIGtkRGVidWcoIDYwMzUgKSA8PCAiQURESU5HIE5PREUgRkFJTEVEISEhISBjdXJy
ZW50ID0gIiA8PCBjdXJyZW50LT5ub2RlTmFtZSgpLnN0cmluZygpIDw8ICIsIG5ldyA9ICIgPDwg
bi0+bm9kZU5hbWUoKS5zdHJpbmcoKSA8PCBlbmRsOwotI2VuZGlmCiAgICAgICAgIC8vIGVycm9y
IGhhbmRsaW5nLi4uCiAgICAgICAgIEhUTUxFbGVtZW50SW1wbCAqZTsKICAgICAgICAgYm9vbCBo
YW5kbGVkID0gZmFsc2U7CkBAIC00MTYsMjIgKzM2NywxOSBAQCBib29sIEtIVE1MUGFyc2VyOjpp
bnNlcnROb2RlKE5vZGVJbXBsICpuCiAgICAgICAgICAgICBpZiAoIGhlYWQgKSB7CiAgICAgICAg
ICAgICAgICAgRE9NOjpOb2RlSW1wbCAqbmV3Tm9kZSA9IGhlYWQtPmFkZENoaWxkKG4pOwogICAg
ICAgICAgICAgICAgIGlmICggbmV3Tm9kZSApIHsKLSAgICAgICAgICAgICAgICAgICAgcHVzaEJs
b2NrKGlkLCB0YWdQcmlvcml0eShpZCkpOworICAgICAgICAgICAgICAgICAgICBwdXNoQmxvY2so
bG9jYWxOYW1lLCB0YWdQcmlvcml0eSk7CiAgICAgICAgICAgICAgICAgICAgIHNldEN1cnJlbnQo
bmV3Tm9kZSk7CiAjaWYgU1BFRURfREVCVUcgPCAyCiAJCSAgICBpZighbi0+YXR0YWNoZWQoKSAm
JiBIVE1MV2lkZ2V0KQogICAgICAgICAgICAgICAgICAgICAgICAgbi0+YXR0YWNoKCk7CiAjZW5k
aWYKICAgICAgICAgICAgICAgICB9IGVsc2UgewotI2lmZGVmIFBBUlNFUl9ERUJVRwotICAgICAg
ICAgICAgICAgICAgICBrZERlYnVnKCA2MDM1ICkgPDwgImFkZGluZyBzdHlsZSBiZWZvcmUgdG8g
Ym9keSBmYWlsZWQhISEhIiA8PCBlbmRsOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgIGRp
c2NhcmRfdW50aWwgPSBJRF9TVFlMRSArIElEX0NMT1NFX1RBRzsKKyAgICAgICAgICAgICAgICAg
ICAgc2V0U2tpcE1vZGUoSFRNTE5hbWVzOjpzdHlsZSgpKTsKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgICAgIH0gZWxzZSBpZihpbkJvZHkpIHsKLSAgICAgICAgICAgICAgICBk
aXNjYXJkX3VudGlsID0gSURfU1RZTEUgKyBJRF9DTE9TRV9UQUc7CisgICAgICAgICAgICAgICAg
c2V0U2tpcE1vZGUoSFRNTE5hbWVzOjpzdHlsZSgpKTsKICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKQEAgLTUyNCw3ICs0NzIs
NyBAQCBib29sIEtIVE1MUGFyc2VyOjppbnNlcnROb2RlKE5vZGVJbXBsICpuCiAgICAgICAgICAg
ICAgICAgICAgIE5vZGVJbXBsKiB0YWJsZSA9IHRzZWN0aW9uLT5wYXJlbnQoKTsKICAgICAgICAg
ICAgICAgICAgICAgaW50IGV4Y2VwdGlvbmNvZGUgPSAwOwogICAgICAgICAgICAgICAgICAgICB0
YWJsZS0+aW5zZXJ0QmVmb3JlKG4sIHRzZWN0aW9uLCBleGNlcHRpb25jb2RlKTsKLSAgICAgICAg
ICAgICAgICAgICAgcHVzaEJsb2NrKGlkLCB0YWdQcmlvcml0eShpZCkpOworICAgICAgICAgICAg
ICAgICAgICBwdXNoQmxvY2sobG9jYWxOYW1lLCB0YWdQcmlvcml0eSk7CiAgICAgICAgICAgICAg
ICAgICAgIHNldEN1cnJlbnQobik7CiAgICAgICAgICAgICAgICAgICAgIGluU3RyYXlUYWJsZUNv
bnRlbnQrKzsKICAgICAgICAgICAgICAgICAgICAgYmxvY2tTdGFjay0+c3RyYXlUYWJsZUNvbnRl
bnQgPSB0cnVlOwpAQCAtNTUwLDcgKzQ5OCw4IEBAIGJvb2wgS0hUTUxQYXJzZXI6Omluc2VydE5v
ZGUoTm9kZUltcGwgKm4KICAgICAgICAgfQogCiAgICAgICAgIC8vIHN3aXRjaCBvbiB0aGUgY3Vy
cmVudGx5IGFjdGl2ZSBlbGVtZW50Ci0gICAgICAgIHN3aXRjaChjdXJyZW50LT5pZCgpKQorICAg
ICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGN1cnJlbnRUYWdOYW1lID0gY3VycmVudC0+bG9jYWxO
YW1lKCk7CisgICAgICAgIHN3aXRjaCAoY3VycmVudC0+aWQoKSkKICAgICAgICAgewogICAgICAg
ICBjYXNlIElEX0hUTUw6CiAgICAgICAgICAgICBzd2l0Y2goaWQpCkBAIC01OTMsNyArNTQyLDcg
QEAgYm9vbCBLSFRNTFBhcnNlcjo6aW5zZXJ0Tm9kZShOb2RlSW1wbCAqbgogICAgICAgICAgICAg
ZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGUgYm9keSBzdGFydHMgaGVy
ZS4uLgogICAgICAgICAgICAgICAgIGlmICggaGF2ZUZyYW1lU2V0ICkgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgcG9wQmxvY2soSURfSEVBRCk7CisgICAgICAgICAgICAgICAgcG9wQmxvY2soY3Vy
cmVudFRhZ05hbWUpOwogICAgICAgICAgICAgICAgIGUgPSBuZXcgSFRNTEJvZHlFbGVtZW50SW1w
bChkb2N1bWVudCk7CiAgICAgICAgICAgICAgICAgc3RhcnRCb2R5KCk7CiAgICAgICAgICAgICAg
ICAgaW5zZXJ0Tm9kZShlKTsKQEAgLTYwNCw3ICs1NTMsNyBAQCBib29sIEtIVE1MUGFyc2VyOjpp
bnNlcnROb2RlKE5vZGVJbXBsICpuCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBJ
RF9DQVBUSU9OOgogICAgICAgICAgICAgLy8gSWxsZWdhbCBjb250ZW50IGluIGEgY2FwdGlvbi4g
Q2xvc2UgdGhlIGNhcHRpb24gYW5kIHRyeSBhZ2Fpbi4KLSAgICAgICAgICAgIHBvcEJsb2NrKElE
X0NBUFRJT04pOworICAgICAgICAgICAgcG9wQmxvY2soY3VycmVudFRhZ05hbWUpOwogICAgICAg
ICAgICAgc3dpdGNoKCBpZCApIHsKICAgICAgICAgICAgIGNhc2UgSURfVEhFQUQ6CiAgICAgICAg
ICAgICBjYXNlIElEX1RGT09UOgpAQCAtNjIzLDcgKzU3Miw3IEBAIGJvb2wgS0hUTUxQYXJzZXI6
Omluc2VydE5vZGUoTm9kZUltcGwgKm4KICAgICAgICAgICAgIHN3aXRjaChpZCkKICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgIGNhc2UgSURfVEFCTEU6Ci0gICAgICAgICAgICAgICAgcG9wQmxv
Y2soSURfVEFCTEUpOyAvLyBlbmQgdGhlIHRhYmxlCisgICAgICAgICAgICAgICAgcG9wQmxvY2so
bG9jYWxOYW1lKTsgLy8gZW5kIHRoZSB0YWJsZQogICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0
cnVlOyAgICAgIC8vIC4uLmFuZCBzdGFydCBhIG5ldyBvbmUKICAgICAgICAgICAgICAgICBicmVh
azsKIAkgICAgY2FzZSBJRF9URVhUOgpAQCAtNjY0LDEwICs2MTMsMTAgQEAgYm9vbCBLSFRNTFBh
cnNlcjo6aW5zZXJ0Tm9kZShOb2RlSW1wbCAqbgogI2VuZGlmCiAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBp
ZiAobi0+aXNFbGVtZW50Tm9kZSgpICYmIHRhZ1ByaW9yaXR5KGlkKSAhPSAwICYmIAotICAgICAg
ICAgICAgICAgICAgICAgICAgIWZsYXQgJiYgZW5kVGFnUmVxdWlyZW1lbnQoaWQpICE9IERPTTo6
Rk9SQklEREVOKQorICAgICAgICAgICAgICAgICAgICBpZiAobi0+aXNIVE1MRWxlbWVudCgpICYm
IHRhZ1ByaW9yaXR5ID4gMCAmJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICFmbGF0ICYmIHN0
YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCo+KG4pLT5lbmRUYWdSZXF1aXJlbWVudCgpICE9IERP
TTo6Rk9SQklEREVOKQogICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBwdXNoQmxvY2soaWQsIHRhZ1ByaW9yaXR5KGlkKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBwdXNoQmxvY2sobG9jYWxOYW1lLCB0YWdQcmlvcml0eSk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBzZXRDdXJyZW50KG4pOwogICAgICAgICAgICAgICAgICAgICAgICAgaW5TdHJheVRh
YmxlQ29udGVudCsrOwogICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tTdGFjay0+c3RyYXlU
YWJsZUNvbnRlbnQgPSB0cnVlOwpAQCAtNjc2LDExICs2MjUsMTEgQEAgYm9vbCBLSFRNTFBhcnNl
cjo6aW5zZXJ0Tm9kZShOb2RlSW1wbCAqbgogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAg
ICAgICAgIGlmICggY3VycmVudC0+aWQoKSA9PSBJRF9UUiApCi0gICAgICAgICAgICAgICAgICAg
IGUgPSBuZXcgSFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsKGRvY3VtZW50LCBJRF9URCk7CisgICAg
ICAgICAgICAgICAgICAgIGUgPSBuZXcgSFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsKEhUTUxOYW1l
czo6dGQoKSwgZG9jdW1lbnQpOwogICAgICAgICAgICAgICAgIGVsc2UgaWYgKCBjdXJyZW50LT5p
ZCgpID09IElEX1RBQkxFICkKLSAgICAgICAgICAgICAgICAgICAgZSA9IG5ldyBIVE1MVGFibGVT
ZWN0aW9uRWxlbWVudEltcGwoIGRvY3VtZW50LCBJRF9UQk9EWSwgdHJ1ZSAvKiBpbXBsaWNpdCAq
LyApOworICAgICAgICAgICAgICAgICAgICBlID0gbmV3IEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50
SW1wbChIVE1MTmFtZXM6OnRib2R5KCksIGRvY3VtZW50LCB0cnVlIC8qIGltcGxpY2l0ICovKTsK
ICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGUgPSBuZXcgSFRNTFRh
YmxlUm93RWxlbWVudEltcGwoIGRvY3VtZW50ICk7CisgICAgICAgICAgICAgICAgICAgIGUgPSBu
ZXcgSFRNTFRhYmxlUm93RWxlbWVudEltcGwoZG9jdW1lbnQpOwogICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgIGluc2VydE5vZGUoZSk7CiAgICAgICAgICAgICAgICAgaGFuZGxlZCA9
IHRydWU7CkBAIC02ODksNyArNjM4LDcgQEAgYm9vbCBLSFRNTFBhcnNlcjo6aW5zZXJ0Tm9kZShO
b2RlSW1wbCAqbgogICAgICAgICAgICAgfSAvLyBlbmQgc3dpdGNoCiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBJRF9PQkpFQ1Q6Ci0gICAgICAgICAgICBkaXNjYXJkX3VudGlsID0g
SURfT0JKRUNUICsgSURfQ0xPU0VfVEFHOworICAgICAgICAgICAgc2V0U2tpcE1vZGUoSFRNTE5h
bWVzOjpvYmplY3QoKSk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGNhc2Ug
SURfVUw6CiAgICAgICAgIGNhc2UgSURfT0w6CkBAIC02OTksMTYgKzY0OCwxNiBAQCBib29sIEtI
VE1MUGFyc2VyOjppbnNlcnROb2RlKE5vZGVJbXBsICpuCiAgICAgICAgICAgICBpbnNlcnROb2Rl
KGUpOwogICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7CiAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIGNhc2UgSURfREw6Ci0gICAgICAgICAgICAgICAgcG9wQmxvY2soSURfREwpOwot
ICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgY2FzZSBJRF9EVDoKLSAgICAgICAgICAgICAgICBwb3BCbG9jayhJRF9EVCk7
Ci0gICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgSURfREw6CisgICAgICAgICAgICBwb3BCbG9jayhjdXJyZW50VGFnTmFt
ZSk7CisgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIElEX0RUOgorICAgICAgICAgICAgcG9wQmxvY2soY3VycmVudFRhZ05hbWUpOwor
ICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBJRF9TRUxFQ1Q6Ci0gICAgICAgICAgICBpZiggbi0+aXNJbmxpbmUoKSApCisgICAgICAg
ICAgICBpZiAoaXNJbmxpbmUobikpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSURfUDoKQEAgLTcxOCw1MSArNjY3LDQ5IEBA
IGJvb2wgS0hUTUxQYXJzZXI6Omluc2VydE5vZGUoTm9kZUltcGwgKm4KICAgICAgICAgY2FzZSBJ
RF9INDoKICAgICAgICAgY2FzZSBJRF9INToKICAgICAgICAgY2FzZSBJRF9INjoKLSAgICAgICAg
ICAgIGlmKCFuLT5pc0lubGluZSgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHBv
cEJsb2NrKGN1cnJlbnQtPmlkKCkpOworICAgICAgICAgICAgaWYgKGlzSW5saW5lKG4pKSB7Cisg
ICAgICAgICAgICAgICAgcG9wQmxvY2soY3VycmVudFRhZ05hbWUpOwogICAgICAgICAgICAgICAg
IGhhbmRsZWQgPSB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgSURfT1BUSU9OOgogICAgICAgICBjYXNlIElEX09QVEdST1VQOgotICAgICAgICAg
ICAgaWYgKGlkID09IElEX09QVEdST1VQKQorICAgICAgICAgICAgaWYgKGxvY2FsTmFtZSA9PSBI
VE1MTmFtZXM6Om9wdGdyb3VwKCkpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcG9w
QmxvY2soY3VycmVudC0+aWQoKSk7CisgICAgICAgICAgICAgICAgcG9wQmxvY2soY3VycmVudFRh
Z05hbWUpOwogICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwogICAgICAgICAgICAgfQot
ICAgICAgICAgICAgZWxzZSBpZihpZCA9PSBJRF9TRUxFQ1QpCisgICAgICAgICAgICBlbHNlIGlm
IChsb2NhbE5hbWUgPT0gSFRNTE5hbWVzOjpzZWxlY3QoKSkKICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICAvLyBJRSB0cmVhdHMgYSBuZXN0ZWQgc2VsZWN0IGFzIDwvc2VsZWN0Pi4gTGV0
J3MgZG8gdGhlIHNhbWUKLSAgICAgICAgICAgICAgICBwb3BCbG9jayggSURfU0VMRUNUICk7Cisg
ICAgICAgICAgICAgICAgcG9wQmxvY2sobG9jYWxOYW1lKTsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgLy8gaGVh
ZCBlbGVtZW50cyBpbiB0aGUgYm9keSBzaG91bGQgYmUgaWdub3JlZC4KICAgICAgICAgY2FzZSBJ
RF9BRERSRVNTOgotICAgICAgICAgICAgcG9wQmxvY2soSURfQUREUkVTUyk7CisgICAgICAgICAg
ICBwb3BCbG9jayhjdXJyZW50VGFnTmFtZSk7CiAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIElEX0NPTEdST1VQOgotICAgICAgICAg
ICAgaWYgKGlkICE9IElEX1RFWFQpIHsKLSAgICAgICAgICAgICAgICBwb3BCbG9jayhJRF9DT0xH
Uk9VUCk7CisgICAgICAgICAgICBpZiAobG9jYWxOYW1lICE9IHRleHRBdG9tKSB7CisgICAgICAg
ICAgICAgICAgcG9wQmxvY2soY3VycmVudFRhZ05hbWUpOwogICAgICAgICAgICAgICAgIGhhbmRs
ZWQgPSB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgSURfRk9OVDoKLSAgICAgICAgICAgIHBvcEJsb2NrKElEX0ZPTlQpOworICAgICAgICAgICAg
cG9wQmxvY2soY3VycmVudFRhZ05hbWUpOwogICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGlmKGN1cnJl
bnQtPmlzRG9jdW1lbnROb2RlKCkpCi0gICAgICAgICAgICB7CisgICAgICAgICAgICBpZiAoY3Vy
cmVudC0+aXNEb2N1bWVudE5vZGUoKSkgewogICAgICAgICAgICAgICAgIGlmKGN1cnJlbnQtPmZp
cnN0Q2hpbGQoKSA9PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgIGUgPSBuZXcgSFRNTEh0bWxF
bGVtZW50SW1wbChkb2N1bWVudCk7CiAgICAgICAgICAgICAgICAgICAgIGluc2VydE5vZGUoZSk7
CiAgICAgICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYoY3VycmVudC0+aXNJbmxpbmUoKSkK
KyAgICAgICAgICAgIGVsc2UgaWYgKGlzSW5saW5lKGN1cnJlbnQpKQogICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgIHBvcElubGluZUJsb2NrcygpOwogICAgICAgICAgICAgICAgIGhhbmRs
ZWQgPSB0cnVlOwpAQCAtNzcwLDEyICs3MTcsOCBAQCBib29sIEtIVE1MUGFyc2VyOjppbnNlcnRO
b2RlKE5vZGVJbXBsICpuCiAgICAgICAgIH0KIAogICAgICAgICAvLyBpZiB3ZSBjb3VsZG4ndCBo
YW5kbGUgdGhlIGVycm9yLCBqdXN0IHJldGhyb3cgdGhlIGV4Y2VwdGlvbi4uLgotICAgICAgICBp
ZighaGFuZGxlZCkKLSAgICAgICAgewotICAgICAgICAgICAgLy9rZERlYnVnKCA2MDM1ICkgPDwg
IkV4Y2VwdGlvbiBoYW5kbGVyIGZhaWxlZCBpbiBIVE1MUEFyc2VyOjppbnNlcnROb2RlKCkiIDw8
IGVuZGw7CisgICAgICAgIGlmICghaGFuZGxlZCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgfQotCiAgICAgICAgIHJldHVybiBpbnNlcnROb2RlKG4pOwogICAgIH0KIH0KQEAg
LTc4NSw3ICs3MjgsNyBAQCBOb2RlSW1wbCAqS0hUTUxQYXJzZXI6OmdldEVsZW1lbnQoVG9rZW4q
CiAgICAgc3dpdGNoICh0LT5pZCkKICAgICB7CiAgICAgY2FzZSBJRF9IRUFEOgotICAgICAgICBp
ZiAoIWhlYWQgJiYgY3VycmVudC0+aWQoKSA9PSBJRF9IVE1MKSB7CisgICAgICAgIGlmICghaGVh
ZCAmJiBjdXJyZW50LT5sb2NhbE5hbWUoKSA9PSBIVE1MTmFtZXM6Omh0bWwoKSkgewogICAgICAg
ICAgICAgaGVhZCA9IG5ldyBIVE1MSGVhZEVsZW1lbnRJbXBsKGRvY3VtZW50KTsKICAgICAgICAg
ICAgIHJldHVybiBoZWFkOwogICAgICAgICB9CkBAIC03OTQsMTUgKzczNywxNSBAQCBOb2RlSW1w
bCAqS0hUTUxQYXJzZXI6OmdldEVsZW1lbnQoVG9rZW4qCiAgICAgICAgIC8vIGJvZHkgbm8gbG9u
Z2VyIGFsbG93ZWQgaWYgd2UgaGF2ZSBhIGZyYW1lc2V0CiAgICAgICAgIGlmIChoYXZlRnJhbWVT
ZXQpCiAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgcG9wQmxvY2soSURfSEVBRCk7Cisg
ICAgICAgIHBvcEJsb2NrKEhUTUxOYW1lczo6aGVhZCgpKTsKICAgICAgICAgc3RhcnRCb2R5KCk7
CiAgICAgICAgIHJldHVybiBuZXcgSFRNTEJvZHlFbGVtZW50SW1wbChkb2N1bWVudCk7CiAKIC8v
IGZyYW1lcwogICAgIGNhc2UgSURfRlJBTUVTRVQ6Ci0gICAgICAgIHBvcEJsb2NrKElEX0hFQUQp
OworICAgICAgICBwb3BCbG9jayhIVE1MTmFtZXM6OmhlYWQoKSk7CiAgICAgICAgIGlmIChpbkJv
ZHkgJiYgIWhhdmVGcmFtZVNldCAmJiAhaGF2ZUNvbnRlbnQpIHsKLSAgICAgICAgICAgIHBvcEJs
b2NrKElEX0JPRFkpOworICAgICAgICAgICAgcG9wQmxvY2soSFRNTE5hbWVzOjpib2R5KCkpOwog
ICAgICAgICAgICAgLy8gIyMjIGFjdHVhbGx5IGZvciBJRSBkb2N1bWVudC5ib2R5IHJldHVybnMg
dGhlIG5vdyBoaWRkZW4gImJvZHkiIGVsZW1lbnQKICAgICAgICAgICAgIC8vIHdlIGNhbid0IGlt
cGxlbWVudCB0aGF0IGJlaGF2aW91ciBub3cgYmVjYXVzZSBpdCBjb3VsZCBjYXVzZSB0b28gbWFu
eQogICAgICAgICAgICAgLy8gcmVncmVzc2lvbnMgYW5kIHRoZSBoZWFkYWNoZXMgYXJlIG5vdCB3
b3J0aCB0aGUgd29yayBhcyBsb25nIGFzIHRoZXJlIGlzCkBAIC04MTEsNyArNzU0LDcgQEAgTm9k
ZUltcGwgKktIVE1MUGFyc2VyOjpnZXRFbGVtZW50KFRva2VuKgogICAgICAgICAgICAgICAgIGRv
YygpLT5ib2R5KCktPnNldEF0dHJpYnV0ZShBVFRSX1NUWUxFLCAiZGlzcGxheTpub25lIik7CiAg
ICAgICAgICAgICBpbkJvZHkgPSBmYWxzZTsKICAgICAgICAgfQotICAgICAgICBpZiAoKGhhdmVD
b250ZW50IHx8IGhhdmVGcmFtZVNldCkgJiYgY3VycmVudC0+aWQoKSA9PSBJRF9IVE1MKQorICAg
ICAgICBpZiAoKGhhdmVDb250ZW50IHx8IGhhdmVGcmFtZVNldCkgJiYgY3VycmVudC0+bG9jYWxO
YW1lKCkgPT0gSFRNTE5hbWVzOjpodG1sKCkpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAg
ICAgaGF2ZUZyYW1lU2V0ID0gdHJ1ZTsKICAgICAgICAgc3RhcnRCb2R5KCk7CkBAIC04MTksNyAr
NzYyLDcgQEAgTm9kZUltcGwgKktIVE1MUGFyc2VyOjpnZXRFbGVtZW50KFRva2VuKgogCiAgICAg
Ly8gYSBiaXQgb2YgYSBzcGVjaWFsIGNhc2UsIHNpbmNlIHRoZSBmcmFtZSBpcyBpbmxpbmVkCiAg
ICAgY2FzZSBJRF9JRlJBTUU6Ci0gICAgICAgIGRpc2NhcmRfdW50aWwgPSBJRF9JRlJBTUUgKyBJ
RF9DTE9TRV9UQUc7CisgICAgICAgIHNldFNraXBNb2RlKEhUTUxOYW1lczo6aWZyYW1lKCkpOwog
ICAgICAgICBicmVhazsKIAogLy8gZm9ybSBlbGVtZW50cwpAQCAtODY0LDIxICs4MDcsMjEgQEAg
Tm9kZUltcGwgKktIVE1MUGFyc2VyOjpnZXRFbGVtZW50KFRva2VuKgogCiAvLyBsaXN0cwogICAg
IGNhc2UgSURfREQ6Ci0gICAgICAgIHBvcEJsb2NrKElEX0RUKTsKLSAgICAgICAgcG9wQmxvY2so
SURfREQpOworICAgICAgICBwb3BCbG9jayhIVE1MTmFtZXM6OmR0KCkpOworICAgICAgICBwb3BC
bG9jayhIVE1MTmFtZXM6OmRkKCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIElEX0RUOgot
ICAgICAgICBwb3BCbG9jayhJRF9ERCk7Ci0gICAgICAgIHBvcEJsb2NrKElEX0RUKTsKKyAgICAg
ICAgcG9wQmxvY2soSFRNTE5hbWVzOjpkZCgpKTsKKyAgICAgICAgcG9wQmxvY2soSFRNTE5hbWVz
OjpkdCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJRF9MSToKLSAgICAgICAgcG9wQmxv
Y2soSURfTEkpOworICAgICAgICBwb3BCbG9jayh0LT50YWdOYW1lKTsKICAgICAgICAgYnJlYWs7
CiAKIC8vIGFuY2hvcgogICAgIGNhc2UgSURfQToKICAgICAgICAgLy8gTmV2ZXIgYWxsb3cgbmVz
dGVkIDxhPnMuCi0gICAgICAgIHBvcEJsb2NrKElEX0EpOworICAgICAgICBwb3BCbG9jayh0LT50
YWdOYW1lKTsKICAgICAgICAgYnJlYWs7CiAKIC8vIGltYWdlcwpAQCAtODkwLDE5ICs4MzMsMTkg
QEAgTm9kZUltcGwgKktIVE1MUGFyc2VyOjpnZXRFbGVtZW50KFRva2VuKgogCiAvLyB0YWJsZXMK
ICAgICBjYXNlIElEX1RSOgotICAgICAgICBwb3BCbG9jayhJRF9UUik7CisgICAgICAgIHBvcEJs
b2NrKHQtPnRhZ05hbWUpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIElEX1REOgogICAgIGNh
c2UgSURfVEg6Ci0gICAgICAgIHBvcEJsb2NrKElEX1RIKTsKLSAgICAgICAgcG9wQmxvY2soSURf
VEQpOworICAgICAgICBwb3BCbG9jayhIVE1MTmFtZXM6OnRoKCkpOworICAgICAgICBwb3BCbG9j
ayhIVE1MTmFtZXM6OnRkKCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIElEX1RCT0RZOgog
ICAgIGNhc2UgSURfVEhFQUQ6CiAgICAgY2FzZSBJRF9URk9PVDoKLSAgICAgICAgcG9wQmxvY2so
SURfVEhFQUQpOwotICAgICAgICBwb3BCbG9jayhJRF9UQk9EWSk7Ci0gICAgICAgIHBvcEJsb2Nr
KElEX1RGT09UKTsKKyAgICAgICAgcG9wQmxvY2soSFRNTE5hbWVzOjp0aGVhZCgpKTsKKyAgICAg
ICAgcG9wQmxvY2soSFRNTE5hbWVzOjp0Ym9keSgpKTsKKyAgICAgICAgcG9wQmxvY2soSFRNTE5h
bWVzOjp0Zm9vdCgpKTsKICAgICAgICAgYnJlYWs7CiAKIC8vIGVsZW1lbnRzIHdpdGggbm8gc3Bl
Y2lhbCByZXByZXNlbnRhdGlvbiBpbiB0aGUgRE9NCkBAIC05MTQsMjggKzg1NywyNyBAQCBOb2Rl
SW1wbCAqS0hUTUxQYXJzZXI6OmdldEVsZW1lbnQoVG9rZW4qCiAgICAgY2FzZSBJRF9TVFJJS0U6
CiAgICAgY2FzZSBJRF9CSUc6CiAgICAgY2FzZSBJRF9TTUFMTDoKLSAgICAgICAgaWYgKCFhbGxv
d05lc3RlZFJlZHVuZGFudFRhZyh0LT5pZCkpCisgICAgICAgIGlmICghYWxsb3dOZXN0ZWRSZWR1
bmRhbnRUYWcodC0+dGFnTmFtZSkpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgYnJl
YWs7CiAKICAgICBjYXNlIElEX05PQlI6CiAgICAgY2FzZSBJRF9XQlI6Ci0gICAgICAgIHBvcEJs
b2NrKHQtPmlkKTsgLy8gRG9uJ3QgYWxsb3cgbmVzdGVkIDxub2JyPiBvciA8d2JyPgorICAgICAg
ICBwb3BCbG9jayh0LT50YWdOYW1lKTsgLy8gRG9uJ3QgYWxsb3cgbmVzdGVkIDxub2JyPiBvciA8
d2JyPgogICAgICAgICBicmVhazsKIAogLy8gdGhlc2UgYXJlIHNwZWNpYWwsIGFuZCBub3JtYWxs
eSBub3QgcmVuZGVyZWQKICAgICBjYXNlIElEX05PRU1CRUQ6Ci0gICAgICAgIGRpc2NhcmRfdW50
aWwgPSBJRF9OT0VNQkVEICsgSURfQ0xPU0VfVEFHOworICAgICAgICBzZXRTa2lwTW9kZShIVE1M
TmFtZXM6Om5vZW1iZWQoKSk7CiAgICAgICAgIHJldHVybiAwOwogICAgIGNhc2UgSURfTk9GUkFN
RVM6Ci0gICAgICAgIGRpc2NhcmRfdW50aWwgPSBJRF9OT0ZSQU1FUyArIElEX0NMT1NFX1RBRzsK
KyAgICAgICAgc2V0U2tpcE1vZGUoSFRNTE5hbWVzOjpub2ZyYW1lcygpKTsKICAgICAgICAgcmV0
dXJuIDA7CiAgICAgY2FzZSBJRF9OT1NDUklQVDoKICAgICAgICAgaWYgKEhUTUxXaWRnZXQgJiYg
SFRNTFdpZGdldC0+cGFydCgpLT5qU2NyaXB0RW5hYmxlZCgpKQotICAgICAgICAgICAgZGlzY2Fy
ZF91bnRpbCA9IElEX05PU0NSSVBUICsgSURfQ0xPU0VfVEFHOworICAgICAgICAgICAgc2V0U2tp
cE1vZGUoSFRNTE5hbWVzOjpub3NjcmlwdCgpKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgY2Fz
ZSBJRF9OT0xBWUVSOgotICAgICAgICAvL2Rpc2NhcmRfdW50aWwgPSBJRF9OT0xBWUVSICsgSURf
Q0xPU0VfVEFHOwogICAgICAgICByZXR1cm4gMDsKICAgICBjYXNlIElEX1RFWFQ6CiAgICAgICAg
IHJldHVybiBuZXcgVGV4dEltcGwoZG9jdW1lbnQsIHQtPnRleHQpOwpAQCAtOTUyLDg0ICs4OTQs
NjEgQEAgTm9kZUltcGwgKktIVE1MUGFyc2VyOjpnZXRFbGVtZW50KFRva2VuKgogICAgICAgICB9
CiAgICAgfQogCi0gICAgcmV0dXJuIGRvY3VtZW50LT5kb2N1bWVudCgpLT5jcmVhdGVIVE1MRWxl
bWVudCh0LT5pZCk7CisgICAgcmV0dXJuIGRvY3VtZW50LT5kb2N1bWVudCgpLT5jcmVhdGVIVE1M
RWxlbWVudCh0LT50YWdOYW1lKTsKIH0KIAogI2RlZmluZSBNQVhfUkVEVU5EQU5UIDIwCiAKLWJv
b2wgS0hUTUxQYXJzZXI6OmFsbG93TmVzdGVkUmVkdW5kYW50VGFnKGludCBfaWQpCitib29sIEtI
VE1MUGFyc2VyOjphbGxvd05lc3RlZFJlZHVuZGFudFRhZyhjb25zdCBBdG9taWNTdHJpbmcmIF90
YWdOYW1lKQogewogICAgIC8vIHd3dy5saWNlby5lZHUubXggaXMgYW4gZXhhbXBsZSBvZiBhIHNp
dGUgdGhhdCBhY2hpZXZlcyBhIGxldmVsIG9mIG5lc3Rpbmcgb2YKICAgICAvLyBhYm91dCAxNTAw
IHRhZ3MsIGFsbCBmcm9tIGEgYnVuY2ggb2YgPGI+cy4gIFdlIHdpbGwgb25seSBhbGxvdyBhdCBt
b3N0IDIwCiAgICAgLy8gbmVzdGVkIHRhZ3Mgb2YgdGhlIHNhbWUgdHlwZSBiZWZvcmUganVzdCBp
Z25vcmluZyB0aGVtIGFsbCB0b2dldGhlci4KICAgICBpbnQgaSA9IDA7CiAgICAgZm9yIChIVE1M
U3RhY2tFbGVtKiBjdXJyID0gYmxvY2tTdGFjazsKLSAgICAgICAgIGkgPCBNQVhfUkVEVU5EQU5U
ICYmIGN1cnIgJiYgY3Vyci0+aWQgPT0gX2lkOworICAgICAgICAgaSA8IE1BWF9SRURVTkRBTlQg
JiYgY3VyciAmJiBjdXJyLT50YWdOYW1lID09IF90YWdOYW1lOwogICAgICAgICAgY3VyciA9IGN1
cnItPm5leHQsIGkrKyk7CiAgICAgcmV0dXJuIGkgIT0gTUFYX1JFRFVOREFOVDsKIH0KIAogdm9p
ZCBLSFRNTFBhcnNlcjo6cHJvY2Vzc0Nsb3NlVGFnKFRva2VuICp0KQogewotICAgIC8vIHN1cHBv
cnQgZm9yIHJlYWxseSBicm9rZW4gaHRtbC4gQ2FuJ3QgYmVsaWV2ZSBJJ20gc3VwcG9ydGluZyBz
dWNoIGNyYXAgKGxhcnMpCi0gICAgc3dpdGNoKHQtPmlkKQotICAgIHsKLSAgICBjYXNlIElEX0hU
TUwrSURfQ0xPU0VfVEFHOgotICAgIGNhc2UgSURfQk9EWStJRF9DTE9TRV9UQUc6Ci0gICAgICAg
IC8vIHdlIG5ldmVyIGNsb3NlIHRoZSBib2R5IHRhZywgc2luY2Ugc29tZSBzdHVwaWQgd2ViIHBh
Z2VzIGNsb3NlIGl0IGJlZm9yZSB0aGUgYWN0dWFsIGVuZCBvZiB0aGUgZG9jLgotICAgICAgICAv
LyBsZXQncyByZWx5IG9uIHRoZSBlbmQoKSBjYWxsIHRvIGNsb3NlIHRoaW5ncy4KKyAgICAvLyBT
dXBwb3J0IGZvciByZWFsbHkgYnJva2VuIGh0bWwuCisgICAgLy8gd2UgbmV2ZXIgY2xvc2UgdGhl
IGJvZHkgdGFnLCBzaW5jZSBzb21lIHN0dXBpZCB3ZWIgcGFnZXMgY2xvc2UgaXQgYmVmb3JlIHRo
ZSBhY3R1YWwgZW5kIG9mIHRoZSBkb2MuCisgICAgLy8gbGV0J3MgcmVseSBvbiB0aGUgZW5kKCkg
Y2FsbCB0byBjbG9zZSB0aGluZ3MuCisgICAgaWYgKHQtPnRhZ05hbWUgPT0gSFRNTE5hbWVzOjpo
dG1sKCkgfHwgdC0+dGFnTmFtZSA9PSBIVE1MTmFtZXM6OmJvZHkoKSkKICAgICAgICAgcmV0dXJu
OwotICAgIGNhc2UgSURfRk9STStJRF9DTE9TRV9UQUc6CisgICAgCisgICAgaWYgKHQtPnRhZ05h
bWUgPT0gSFRNTE5hbWVzOjpmb3JtKCkpCiAgICAgICAgIGZvcm0gPSAwOwotICAgICAgICAvLyB0
aGlzIG9uZSBpcyB0byBnZXQgdGhlIHJpZ2h0IHN0eWxlIG9uIHRoZSBib2R5IGVsZW1lbnQKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9NQVArSURfQ0xPU0VfVEFHOgorICAgIGVsc2UgaWYg
KHQtPnRhZ05hbWUgPT0gSFRNTE5hbWVzOjptYXAoKSkKICAgICAgICAgbWFwID0gMDsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9TRUxFQ1QrSURfQ0xPU0VfVEFHOgorICAgIGVsc2UgaWYg
KHQtPnRhZ05hbWUgPT0gSFRNTE5hbWVzOjpzZWxlY3QoKSkKICAgICAgICAgaW5TZWxlY3QgPSBm
YWxzZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotCi0jaWZkZWYgUEFSU0VSX0RFQlVHCi0gICAga2REZWJ1ZyggNjAzNSApIDw8ICJhZGRlZCB0
aGUgZm9sbG93aW5nIGNoaWxkcyB0byAiIDw8IGN1cnJlbnQtPm5vZGVOYW1lKCkuc3RyaW5nKCkg
PDwgZW5kbDsKLSAgICBOb2RlSW1wbCAqY2hpbGQgPSBjdXJyZW50LT5maXJzdENoaWxkKCk7Ci0g
ICAgd2hpbGUoY2hpbGQgIT0gMCkKLSAgICB7Ci0gICAgICAgIGtkRGVidWcoIDYwMzUgKSA8PCAi
ICAgICIgPDwgY2hpbGQtPm5vZGVOYW1lKCkuc3RyaW5nKCkgPDwgZW5kbDsKLSAgICAgICAgY2hp
bGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKTsKLSAgICB9Ci0jZW5kaWYKKyAgICAgICAgCiAgICAg
SFRNTFN0YWNrRWxlbSogb2xkRWxlbSA9IGJsb2NrU3RhY2s7Ci0gICAgcG9wQmxvY2sodC0+aWQt
SURfQ0xPU0VfVEFHKTsKLSAgICBpZiAob2xkRWxlbSA9PSBibG9ja1N0YWNrICYmIHQtPmlkID09
IElEX1ArSURfQ0xPU0VfVEFHKSB7CisgICAgcG9wQmxvY2sodC0+dGFnTmFtZSk7CisgICAgaWYg
KG9sZEVsZW0gPT0gYmxvY2tTdGFjayAmJiB0LT50YWdOYW1lID09IEhUTUxOYW1lczo6cCgpKSB7
CiAgICAgICAgIC8vIFdlIGVuY291bnRlcmVkIGEgc3RyYXkgPC9wPi4gIEFtYXppbmdseSBHZWNr
bywgV2luSUUsIGFuZCBNYWNJRSBhbGwgdHJlYXQKICAgICAgICAgLy8gdGhpcyBhcyBhIHZhbGlk
IGJyZWFrLCBpLmUuLCA8cD48L3A+LiAgU28gZ28gYWhlYWQgYW5kIG1ha2UgdGhlIGVtcHR5CiAg
ICAgICAgIC8vIHBhcmFncmFwaC4KLSAgICAgICAgdC0+aWQtPUlEX0NMT1NFX1RBRzsKKyAgICAg
ICAgdC0+YmVnaW5UYWcgPSB0cnVlOwogICAgICAgICBwYXJzZVRva2VuKHQpOwotICAgICAgICBw
b3BCbG9jayhJRF9QKTsKKyAgICAgICAgcG9wQmxvY2sodC0+dGFnTmFtZSk7CiAgICAgfQogI2lm
ZGVmIFBBUlNFUl9ERUJVRwogICAgIGtkRGVidWcoIDYwMzUgKSA8PCAiY2xvc2VUYWcgLS0+IGN1
cnJlbnQgPSAiIDw8IGN1cnJlbnQtPm5vZGVOYW1lKCkuc3RyaW5nKCkgPDwgZW5kbDsKICNlbmRp
ZgogfQogCi1ib29sIEtIVE1MUGFyc2VyOjppc0hlYWRlclRhZyhpbnQgX2lkKQorYm9vbCBLSFRN
TFBhcnNlcjo6aXNIZWFkZXJUYWcoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lKQogewotICAg
IHN3aXRjaCAoX2lkKSB7Ci0gICAgICAgIGNhc2UgSURfSDE6Ci0gICAgICAgIGNhc2UgSURfSDI6
Ci0gICAgICAgIGNhc2UgSURfSDM6Ci0gICAgICAgIGNhc2UgSURfSDQ6Ci0gICAgICAgIGNhc2Ug
SURfSDU6Ci0gICAgICAgIGNhc2UgSURfSDY6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgcmV0
dXJuIHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpoMSgpIHx8CisgICAgICAgICAgIHRhZ05hbWUgPT0g
SFRNTE5hbWVzOjpoMigpIHx8CisgICAgICAgICAgIHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpoMygp
IHx8CisgICAgICAgICAgIHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpoNCgpIHx8CisgICAgICAgICAg
IHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpoNSgpIHx8CisgICAgICAgICAgIHRhZ05hbWUgPT0gSFRN
TE5hbWVzOjpoNigpOwogfQogCiB2b2lkIEtIVE1MUGFyc2VyOjpwb3BOZXN0ZWRIZWFkZXJUYWco
KQpAQCAtMTAzNywxOSArOTU2LDE5IEBAIHZvaWQgS0hUTUxQYXJzZXI6OnBvcE5lc3RlZEhlYWRl
clRhZygpCiAgICAgLy8gVGhpcyBmdW5jdGlvbiBvbmx5IGNhcmVzIGFib3V0IGNoZWNraW5nIGZv
ciBuZXN0ZWQgaGVhZGVycyB0aGF0IGhhdmUgb25seSBpbmxpbmVzIGluIGJldHdlZW4gdGhlbS4K
ICAgICBOb2RlSW1wbCogY3Vyck5vZGUgPSBjdXJyZW50OwogICAgIGZvciAoSFRNTFN0YWNrRWxl
bSogY3VyciA9IGJsb2NrU3RhY2s7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0KSB7Ci0gICAgICAg
IGlmIChpc0hlYWRlclRhZyhjdXJyLT5pZCkpIHsKLSAgICAgICAgICAgIHBvcEJsb2NrKGN1cnIt
PmlkKTsKKyAgICAgICAgaWYgKGlzSGVhZGVyVGFnKGN1cnItPnRhZ05hbWUpKSB7CisgICAgICAg
ICAgICBwb3BCbG9jayhjdXJyLT50YWdOYW1lKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQotICAgICAgICBpZiAoY3Vyck5vZGUgJiYgIWN1cnJOb2RlLT5pc0lubGluZSgpKQorICAg
ICAgICBpZiAoY3Vyck5vZGUgJiYgIWlzSW5saW5lKGN1cnJOb2RlKSkKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgY3Vyck5vZGUgPSBjdXJyLT5ub2RlOwogICAgIH0KIH0KIAotYm9vbCBL
SFRNTFBhcnNlcjo6aXNSZXNpZHVhbFN0eWxlVGFnKGludCBfaWQpCitib29sIEtIVE1MUGFyc2Vy
Ojppc0lubGluZShET006Ok5vZGVJbXBsKiBub2RlKSBjb25zdAogewotICAgIHN3aXRjaCAoX2lk
KSB7CisgICAgc3dpdGNoKGlkKCkpIHsKICAgICAgICAgY2FzZSBJRF9BOgogICAgICAgICBjYXNl
IElEX0ZPTlQ6CiAgICAgICAgIGNhc2UgSURfVFQ6CkBAIC0xMDYwLDYgKzk3OSw4IEBAIGJvb2wg
S0hUTUxQYXJzZXI6OmlzUmVzaWR1YWxTdHlsZVRhZyhpbnQKICAgICAgICAgY2FzZSBJRF9TVFJJ
S0U6CiAgICAgICAgIGNhc2UgSURfQklHOgogICAgICAgICBjYXNlIElEX1NNQUxMOgorICAgIAor
ICAgICAgICAgICAgLy8gJXBocmFzZQogICAgICAgICBjYXNlIElEX0VNOgogICAgICAgICBjYXNl
IElEX1NUUk9ORzoKICAgICAgICAgY2FzZSBJRF9ERk46CkBAIC0xMDY3LDQwICs5ODgsNDQgQEAg
Ym9vbCBLSFRNTFBhcnNlcjo6aXNSZXNpZHVhbFN0eWxlVGFnKGludAogICAgICAgICBjYXNlIElE
X1NBTVA6CiAgICAgICAgIGNhc2UgSURfS0JEOgogICAgICAgICBjYXNlIElEX1ZBUjoKKyAgICAg
ICAgY2FzZSBJRF9DSVRFOgorICAgICAgICBjYXNlIElEX0FCQlI6CisgICAgICAgIGNhc2UgSURf
QUNST05ZTToKKyAgICAKKyAgICAgICAgICAgIC8vICVzcGVjaWFsCisgICAgICAgIGNhc2UgSURf
U1VCOgorICAgICAgICBjYXNlIElEX1NVUDoKKyAgICAgICAgY2FzZSBJRF9TUEFOOgorICAgICAg
ICBjYXNlIElEX05PQlI6CisgICAgICAgIGNhc2UgSURfV0JSOgorICAgICAgICAKKyAgICAgICAg
Y2FzZSBJRF9URVhUOgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAKICAg
ICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiB9CiAKLWJv
b2wgS0hUTUxQYXJzZXI6OmlzQWZmZWN0ZWRCeVJlc2lkdWFsU3R5bGUoaW50IF9pZCkKK2Jvb2wg
S0hUTUxQYXJzZXI6OmlzUmVzaWR1YWxTdHlsZVRhZyhjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05h
bWUpCiB7Ci0gICAgaWYgKGlzUmVzaWR1YWxTdHlsZVRhZyhfaWQpKQorICAgIHJldHVybiB0YWdO
YW1lID09IEhUTUxOYW1lczo6YSgpIHx8IHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpmb250KCkgfHwg
dGFnTmFtZSA9PSBIVE1MTmFtZXM6OnR0KCkgfHwKKyAgICAgICAgICAgdGFnTmFtZSA9PSBIVE1M
TmFtZXM6OnUoKSB8fCB0YWdOYW1lID09IEhUTUxOYW1lczo6YigpIHx8IHRhZ05hbWUgPT0gSFRN
TE5hbWVzOjppKCkgfHwKKyAgICAgICAgICAgdGFnTmFtZSA9PSBIVE1MTmFtZXM6OnMoKSB8fCB0
YWdOYW1lID09IEhUTUxOYW1lczo6c3RyaWtlKCkgfHwgdGFnTmFtZSA9PSBIVE1MTmFtZXM6OmJp
ZygpIHx8CisgICAgICAgICAgIHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpzbWFsbCgpIHx8IHRhZ05h
bWUgPT0gSFRNTE5hbWVzOjplbSgpIHx8IHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpzdHJvbmcoKSB8
fAorICAgICAgICAgICB0YWdOYW1lID09IEhUTUxOYW1lczo6ZGZuKCkgfHwgdGFnTmFtZSA9PSBI
VE1MTmFtZXM6OmNvZGUoKSB8fCB0YWdOYW1lID09IEhUTUxOYW1lczo6c2FtcCgpIHx8CisgICAg
ICAgICAgIHRhZ05hbWUgPT0gSFRNTE5hbWVzOjprYmQoKSB8fCB0YWdOYW1lID09IEhUTUxOYW1l
czo6dmFyKCk7Cit9CisKK2Jvb2wgS0hUTUxQYXJzZXI6OmlzQWZmZWN0ZWRCeVJlc2lkdWFsU3R5
bGUoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lKQoreworICAgIGlmIChpc1Jlc2lkdWFsU3R5
bGVUYWcodGFnTmFtZSkgfHwgaXNIZWFkZXJUYWcodGFnTmFtZSkpCiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIAotICAgIHN3aXRjaCAoX2lkKSB7Ci0gICAgICAgIGNhc2UgSURfUDoKLSAgICAg
ICAgY2FzZSBJRF9ESVY6Ci0gICAgICAgIGNhc2UgSURfQkxPQ0tRVU9URToKLSAgICAgICAgY2Fz
ZSBJRF9BRERSRVNTOgotICAgICAgICBjYXNlIElEX0gxOgotICAgICAgICBjYXNlIElEX0gyOgot
ICAgICAgICBjYXNlIElEX0gzOgotICAgICAgICBjYXNlIElEX0g0OgotICAgICAgICBjYXNlIElE
X0g1OgotICAgICAgICBjYXNlIElEX0g2OgotICAgICAgICBjYXNlIElEX0NFTlRFUjoKLSAgICAg
ICAgY2FzZSBJRF9VTDoKLSAgICAgICAgY2FzZSBJRF9PTDoKLSAgICAgICAgY2FzZSBJRF9MSToK
LSAgICAgICAgY2FzZSBJRF9ETDoKLSAgICAgICAgY2FzZSBJRF9EVDoKLSAgICAgICAgY2FzZSBJ
RF9ERDoKLSAgICAgICAgY2FzZSBJRF9QUkU6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgcmV0
dXJuIHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpwKCkgfHwgdGFnTmFtZSA9PSBIVE1MTmFtZXM6OmRp
digpIHx8IHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpibG9ja3F1b3RlKCkgfHwKKyAgICAgICAgICAg
dGFnTmFtZSA9PSBIVE1MTmFtZXM6OmFkZHJlc3MoKSB8fCB0YWdOYW1lID09IEhUTUxOYW1lczo6
Y2VudGVyKCkgfHwgdGFnTmFtZSA9PSBIVE1MTmFtZXM6OnVsKCkgfHwKKyAgICAgICAgICAgdGFn
TmFtZSA9PSBIVE1MTmFtZXM6Om9sKCkgfHwgdGFnTmFtZSA9PSBIVE1MTmFtZXM6OmxpKCkgfHwg
dGFnTmFtZSA9PSBIVE1MTmFtZXM6OmRsKCkgfHwKKyAgICAgICAgICAgdGFnTmFtZSA9PSBIVE1M
TmFtZXM6OmR0KCkgfHwgdGFnTmFtZSA9PSBIVE1MTmFtZXM6OmRkKCkgfHwgdGFnTmFtZSA9PSBI
VE1MTmFtZXM6OnByZSgpOwogfQogCiB2b2lkIEtIVE1MUGFyc2VyOjpoYW5kbGVSZXNpZHVhbFN0
eWxlQ2xvc2VUYWdBY3Jvc3NCbG9ja3MoSFRNTFN0YWNrRWxlbSogZWxlbSkKQEAgLTExMjUsNyAr
MTA1MCw3IEBAIHZvaWQgS0hUTUxQYXJzZXI6OmhhbmRsZVJlc2lkdWFsU3R5bGVDbG8KICAgICAg
ICAgY3VyciA9IGN1cnItPm5leHQ7CiAgICAgfQogCi0gICAgaWYgKCFjdXJyIHx8ICFtYXhFbGVt
IHx8ICFpc0FmZmVjdGVkQnlSZXNpZHVhbFN0eWxlKG1heEVsZW0tPmlkKSkgcmV0dXJuOworICAg
IGlmICghY3VyciB8fCAhbWF4RWxlbSB8fCAhaXNBZmZlY3RlZEJ5UmVzaWR1YWxTdHlsZShtYXhF
bGVtLT50YWdOYW1lKSkgcmV0dXJuOwogCiAgICAgTm9kZUltcGwqIHJlc2lkdWFsRWxlbSA9IHBy
ZXYtPm5vZGU7CiAgICAgTm9kZUltcGwqIGJsb2NrRWxlbSA9IHByZXZNYXhFbGVtID8gcHJldk1h
eEVsZW0tPm5vZGUgOiBjdXJyZW50OwpAQCAtMTE0Nyw3ICsxMDcyLDcgQEAgdm9pZCBLSFRNTFBh
cnNlcjo6aGFuZGxlUmVzaWR1YWxTdHlsZUNsbwogICAgICAgICBIVE1MU3RhY2tFbGVtKiBwcmV2
RWxlbSA9IG1heEVsZW07CiAgICAgICAgIHdoaWxlIChjdXJyRWxlbSAhPSBlbGVtKSB7CiAgICAg
ICAgICAgICBIVE1MU3RhY2tFbGVtKiBuZXh0RWxlbSA9IGN1cnJFbGVtLT5uZXh0OwotICAgICAg
ICAgICAgaWYgKCFpc1Jlc2lkdWFsU3R5bGVUYWcoY3VyckVsZW0tPmlkKSkgeworICAgICAgICAg
ICAgaWYgKCFpc1Jlc2lkdWFsU3R5bGVUYWcoY3VyckVsZW0tPnRhZ05hbWUpKSB7CiAgICAgICAg
ICAgICAgICAgcHJldkVsZW0tPm5leHQgPSBuZXh0RWxlbTsKICAgICAgICAgICAgICAgICBwcmV2
RWxlbS0+bm9kZSA9IGN1cnJFbGVtLT5ub2RlOwogICAgICAgICAgICAgICAgIGRlbGV0ZSBjdXJy
RWxlbTsKQEAgLTExNjksNyArMTA5NCw3IEBAIHZvaWQgS0hUTUxQYXJzZXI6OmhhbmRsZVJlc2lk
dWFsU3R5bGVDbG8KICAgICAgICAgTm9kZUltcGwqIGN1cnJOb2RlID0gMDsKICAgICAgICAgY3Vy
ckVsZW0gPSBtYXhFbGVtOwogICAgICAgICB3aGlsZSAoY3VyckVsZW0tPm5vZGUgIT0gcmVzaWR1
YWxFbGVtKSB7Ci0gICAgICAgICAgICBpZiAoaXNSZXNpZHVhbFN0eWxlVGFnKGN1cnJFbGVtLT5u
b2RlLT5pZCgpKSkgeworICAgICAgICAgICAgaWYgKGlzUmVzaWR1YWxTdHlsZVRhZyhjdXJyRWxl
bS0+bm9kZS0+bG9jYWxOYW1lKCkpKSB7CiAgICAgICAgICAgICAgICAgLy8gQ3JlYXRlIGEgY2xv
bmUgb2YgdGhpcyBlbGVtZW50LgogICAgICAgICAgICAgICAgIGN1cnJOb2RlID0gY3VyckVsZW0t
Pm5vZGUtPmNsb25lTm9kZShmYWxzZSk7CiAKQEAgLTEyNDUsNyArMTE3MCw3IEBAIHZvaWQgS0hU
TUxQYXJzZXI6OmhhbmRsZVJlc2lkdWFsU3R5bGVDbG8KICAgICAgICAgLy8gV2Ugd2lsbCBhY3R1
YWxseSBzY2hlZHVsZSB0aGlzIHRhZyBmb3IgcmVvcGVuaW5nCiAgICAgICAgIC8vIGFmdGVyIHdl
IGNvbXBsZXRlIHRoZSBjbG9zZSBvZiB0aGlzIGVudGlyZSBibG9jay4KICAgICAgICAgTm9kZUlt
cGwqIGN1cnJOb2RlID0gY3VycmVudDsKLSAgICAgICAgaWYgKGlzUmVzaWR1YWxTdHlsZVRhZyhj
dXJyLT5pZCkpIHsKKyAgICAgICAgaWYgKGlzUmVzaWR1YWxTdHlsZVRhZyhjdXJyLT50YWdOYW1l
KSkgewogICAgICAgICAgICAgLy8gV2UndmUgb3ZlcmxvYWRlZCB0aGUgdXNlIG9mIHN0YWNrIGVs
ZW1lbnRzIGFuZCBhcmUganVzdCByZXVzaW5nIHRoZQogICAgICAgICAgICAgLy8gc3RydWN0IHdp
dGggYSBzbGlnaHRseSBkaWZmZXJlbnQgbWVhbmluZyB0byB0aGUgdmFyaWFibGVzLiAgSW5zdGVh
ZCBvZiBjaGFpbmluZwogICAgICAgICAgICAgLy8gZnJvbSBpbm5lcm1vc3QgdG8gb3V0ZXJtb3N0
LCB3ZSBidWlsZCB1cCBhIGxpc3Qgb2YgYWxsIHRoZSB0YWdzIHdlIG5lZWQgdG8gcmVvcGVuCkBA
IC0xMjg2LDcgKzEyMTEsNyBAQCB2b2lkIEtIVE1MUGFyc2VyOjpyZW9wZW5SZXNpZHVhbFN0eWxl
VGFnCiAgICAgICAgIC8vIEZJWE1FOiBJcyBpdCByZWFsbHkgT0sgdG8gaWdub3JlIHRoZSBleGNl
cHRpb25zIGhlcmU/CiAKICAgICAgICAgLy8gTm93IHB1c2ggYSBuZXcgc3RhY2sgZWxlbWVudCBm
b3IgdGhpcyBub2RlIHdlIGp1c3QgY3JlYXRlZC4KLSAgICAgICAgcHVzaEJsb2NrKGVsZW0tPmlk
LCBlbGVtLT5sZXZlbCk7CisgICAgICAgIHB1c2hCbG9jayhlbGVtLT50YWdOYW1lLCBlbGVtLT5s
ZXZlbCk7CiAKICAgICAgICAgLy8gU2V0IG91ciBzdHJheVRhYmxlQ29udGVudCBib29sZWFuIGlm
IG5lZWRlZCwgc28gdGhhdCB0aGUgcmVvcGVuZWQgdGFnIGFsc28ga25vd3MKICAgICAgICAgLy8g
dGhhdCBpdCBpcyBpbnNpZGUgYSBtYWxmb3JtZWQgdGFibGUuCkBAIC0xMzA3LDM1ICsxMjMyLDIx
IEBAIHZvaWQgS0hUTUxQYXJzZXI6OnJlb3BlblJlc2lkdWFsU3R5bGVUYWcKICAgICB9CiB9CiAK
LXZvaWQgS0hUTUxQYXJzZXI6OnB1c2hCbG9jayhpbnQgX2lkLCBpbnQgX2xldmVsKQordm9pZCBL
SFRNTFBhcnNlcjo6cHVzaEJsb2NrKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSwgaW50IF9s
ZXZlbCkKIHsKLSAgICBIVE1MU3RhY2tFbGVtICpFbGVtID0gbmV3IEhUTUxTdGFja0VsZW0oX2lk
LCBfbGV2ZWwsIGN1cnJlbnQsIGJsb2NrU3RhY2spOwotCisgICAgSFRNTFN0YWNrRWxlbSAqRWxl
bSA9IG5ldyBIVE1MU3RhY2tFbGVtKHRhZ05hbWUsIF9sZXZlbCwgY3VycmVudCwgYmxvY2tTdGFj
ayk7CiAgICAgYmxvY2tTdGFjayA9IEVsZW07Ci0gICAgYWRkRm9yYmlkZGVuKF9pZCwgZm9yYmlk
ZGVuVGFnKTsKIH0KIAotdm9pZCBLSFRNTFBhcnNlcjo6cG9wQmxvY2soIGludCBfaWQgKQordm9p
ZCBLSFRNTFBhcnNlcjo6cG9wQmxvY2soY29uc3QgQXRvbWljU3RyaW5nJiBfdGFnTmFtZSkKIHsK
ICAgICBIVE1MU3RhY2tFbGVtICpFbGVtID0gYmxvY2tTdGFjazsKICAgICAKICAgICBpbnQgbWF4
TGV2ZWwgPSAwOwogCi0jaWZkZWYgUEFSU0VSX0RFQlVHCi0gICAga2REZWJ1ZyggNjAzNSApIDw8
ICJwb3BCbG9jaygiIDw8IGdldFRhZ05hbWUoX2lkKS5zdHJpbmcoKSA8PCAiKSIgPDwgZW5kbDsK
LSAgICB3aGlsZShFbGVtKSB7Ci0gICAgICAgIGtkRGVidWcoIDYwMzUpIDw8ICIgICA+ICIgPDwg
Z2V0VGFnTmFtZShFbGVtLT5pZCkuc3RyaW5nKCkgPDwgZW5kbDsKLSAgICAgICAgRWxlbSA9IEVs
ZW0tPm5leHQ7Ci0gICAgfQotICAgIEVsZW0gPSBibG9ja1N0YWNrOwotI2VuZGlmCi0KLSAgICB3
aGlsZSggRWxlbSAmJiAoRWxlbS0+aWQgIT0gX2lkKSkKLSAgICB7CisgICAgd2hpbGUgKEVsZW0g
JiYgKEVsZW0tPnRhZ05hbWUgIT0gX3RhZ05hbWUpKSB7CiAgICAgICAgIGlmIChtYXhMZXZlbCA8
IEVsZW0tPmxldmVsKQotICAgICAgICB7CiAgICAgICAgICAgICBtYXhMZXZlbCA9IEVsZW0tPmxl
dmVsOwotICAgICAgICB9CiAgICAgICAgIEVsZW0gPSBFbGVtLT5uZXh0OwogICAgIH0KIApAQCAt
MTM0NSwyMCArMTI1NiwxOCBAQCB2b2lkIEtIVE1MUGFyc2VyOjpwb3BCbG9jayggaW50IF9pZCAp
CiAgICAgaWYgKG1heExldmVsID4gRWxlbS0+bGV2ZWwpIHsKICAgICAgICAgLy8gV2UgZGlkbid0
IG1hdGNoIGJlY2F1c2UgdGhlIHRhZyBpcyBpbiBhIGRpZmZlcmVudCBzY29wZSwgZS5nLiwKICAg
ICAgICAgLy8gPGI+PHA+Rm9vPC9iPi4gIFRyeSB0byBjb3JyZWN0IHRoZSBwcm9ibGVtLgotICAg
ICAgICBpZiAoIWlzUmVzaWR1YWxTdHlsZVRhZyhfaWQpKQorICAgICAgICBpZiAoIWlzUmVzaWR1
YWxTdHlsZVRhZyhfdGFnTmFtZSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIHJldHVy
biBoYW5kbGVSZXNpZHVhbFN0eWxlQ2xvc2VUYWdBY3Jvc3NCbG9ja3MoRWxlbSk7CiAgICAgfQog
Ci0gICAgYm9vbCBpc0FmZmVjdGVkQnlTdHlsZSA9IGlzQWZmZWN0ZWRCeVJlc2lkdWFsU3R5bGUo
RWxlbS0+aWQpOworICAgIGJvb2wgaXNBZmZlY3RlZEJ5U3R5bGUgPSBpc0FmZmVjdGVkQnlSZXNp
ZHVhbFN0eWxlKEVsZW0tPnRhZ05hbWUpOwogICAgIEhUTUxTdGFja0VsZW0qIHJlc2lkdWFsU3R5
bGVTdGFjayA9IDA7CiAgICAgTm9kZUltcGwqIG1hbGZvcm1lZFRhYmxlUGFyZW50ID0gMDsKICAg
ICAKICAgICBFbGVtID0gYmxvY2tTdGFjazsKLSAgICB3aGlsZSAoRWxlbSkKLSAgICB7Ci0gICAg
ICAgIGlmIChFbGVtLT5pZCA9PSBfaWQpCi0gICAgICAgIHsKKyAgICB3aGlsZSAoRWxlbSkgewor
ICAgICAgICBpZiAoRWxlbS0+dGFnTmFtZSA9PSBfdGFnTmFtZSkgewogICAgICAgICAgICAgaW50
IHN0cmF5VGFibGUgPSBpblN0cmF5VGFibGVDb250ZW50OwogICAgICAgICAgICAgcG9wT25lQmxv
Y2soKTsKICAgICAgICAgICAgIEVsZW0gPSAwOwpAQCAtMTM2OSwxNCArMTI3OCwxMyBAQCB2b2lk
IEtIVE1MUGFyc2VyOjpwb3BCbG9jayggaW50IF9pZCApCiAgICAgICAgICAgICAvLyBtdXN0IGFs
c28ga25vdyB0aGF0IGl0IGlzIHRoZSByb290IG9mIG1hbGZvcm1lZCBjb250ZW50IGluc2lkZSBh
IDx0Ym9keT4vPHRyPi4KICAgICAgICAgICAgIGlmIChzdHJheVRhYmxlICYmIChpblN0cmF5VGFi
bGVDb250ZW50IDwgc3RyYXlUYWJsZSkgJiYgcmVzaWR1YWxTdHlsZVN0YWNrKSB7CiAgICAgICAg
ICAgICAgICAgTm9kZUltcGwqIGN1cnIgPSBjdXJyZW50OwotICAgICAgICAgICAgICAgIHdoaWxl
IChjdXJyICYmIGN1cnItPmlkKCkgIT0gSURfVEFCTEUpCisgICAgICAgICAgICAgICAgd2hpbGUg
KGN1cnIgJiYgIWN1cnItPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0YWJsZSgpKSkKICAgICAgICAg
ICAgICAgICAgICAgY3VyciA9IGN1cnItPnBhcmVudE5vZGUoKTsKICAgICAgICAgICAgICAgICBt
YWxmb3JtZWRUYWJsZVBhcmVudCA9IGN1cnIgPyBjdXJyLT5wYXJlbnROb2RlKCkgOiAwOwogICAg
ICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAg
ICAgaWYgKEVsZW0tPmlkID09IElEX0ZPUk0gJiYgZm9ybSkKKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICBpZiAoZm9ybSAmJiBFbGVtLT50YWdOYW1lID09IEhUTUxOYW1lczo6Zm9ybSgpKQog
ICAgICAgICAgICAgICAgIC8vIEEgPGZvcm0+IGlzIGJlaW5nIGNsb3NlZCBwcmVtYXR1cmVseSAo
YW5kIHRoaXMgaXMKICAgICAgICAgICAgICAgICAvLyBtYWxmb3JtZWQgSFRNTCkuICBTZXQgYW4g
YXR0cmlidXRlIG9uIHRoZSBmb3JtIHRvIGNsZWFyIG91dCBpdHMKICAgICAgICAgICAgICAgICAv
LyBib3R0b20gbWFyZ2luLgpAQCAtMTM4NSw3ICsxMjkzLDcgQEAgdm9pZCBLSFRNTFBhcnNlcjo6
cG9wQmxvY2soIGludCBfaWQgKQogICAgICAgICAgICAgLy8gU2NoZWR1bGUgdGhpcyB0YWcgZm9y
IHJlb3BlbmluZwogICAgICAgICAgICAgLy8gYWZ0ZXIgd2UgY29tcGxldGUgdGhlIGNsb3NlIG9m
IHRoaXMgZW50aXJlIGJsb2NrLgogICAgICAgICAgICAgTm9kZUltcGwqIGN1cnJOb2RlID0gY3Vy
cmVudDsKLSAgICAgICAgICAgIGlmIChpc0FmZmVjdGVkQnlTdHlsZSAmJiBpc1Jlc2lkdWFsU3R5
bGVUYWcoRWxlbS0+aWQpKSB7CisgICAgICAgICAgICBpZiAoaXNBZmZlY3RlZEJ5U3R5bGUgJiYg
aXNSZXNpZHVhbFN0eWxlVGFnKEVsZW0tPnRhZ05hbWUpKSB7CiAgICAgICAgICAgICAgICAgLy8g
V2UndmUgb3ZlcmxvYWRlZCB0aGUgdXNlIG9mIHN0YWNrIGVsZW1lbnRzIGFuZCBhcmUganVzdCBy
ZXVzaW5nIHRoZQogICAgICAgICAgICAgICAgIC8vIHN0cnVjdCB3aXRoIGEgc2xpZ2h0bHkgZGlm
ZmVyZW50IG1lYW5pbmcgdG8gdGhlIHZhcmlhYmxlcy4gIEluc3RlYWQgb2YgY2hhaW5pbmcKICAg
ICAgICAgICAgICAgICAvLyBmcm9tIGlubmVybW9zdCB0byBvdXRlcm1vc3QsIHdlIGJ1aWxkIHVw
IGEgbGlzdCBvZiBhbGwgdGhlIHRhZ3Mgd2UgbmVlZCB0byByZW9wZW4KQEAgLTE0MzMsOCArMTM0
MSw2IEBAIHZvaWQgS0hUTUxQYXJzZXI6OnBvcE9uZUJsb2NrKGJvb2wgZGVsQmwKICAgICB9CiAj
ZW5kaWYKIAotICAgIHJlbW92ZUZvcmJpZGRlbihFbGVtLT5pZCwgZm9yYmlkZGVuVGFnKTsKLQog
ICAgIGJsb2NrU3RhY2sgPSBFbGVtLT5uZXh0OwogICAgIHNldEN1cnJlbnQoRWxlbS0+bm9kZSk7
CiAKQEAgLTE0NDcsNyArMTM1Myw3IEBAIHZvaWQgS0hUTUxQYXJzZXI6OnBvcE9uZUJsb2NrKGJv
b2wgZGVsQmwKIAogdm9pZCBLSFRNTFBhcnNlcjo6cG9wSW5saW5lQmxvY2tzKCkKIHsKLSAgICB3
aGlsZSAoYmxvY2tTdGFjayAmJiBjdXJyZW50LT5pc0lubGluZSgpKQorICAgIHdoaWxlIChibG9j
a1N0YWNrICYmIGlzSW5saW5lKGN1cnJlbnQpKQogICAgICAgICBwb3BPbmVCbG9jaygpOwogfQog
CkluZGV4OiBraHRtbC9odG1sL2h0bWxwYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvV2ViQ29yZS9raHRtbC9odG1sL2h0bWxwYXJzZXIuaCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS4yNwpkaWZmIC11IC1wIC1yMS4yNyBraHRtbC9odG1sL2h0bWxwYXJzZXIuaAotLS0ga2h0
bWwvaHRtbC9odG1scGFyc2VyLmgJNiBKYW4gMjAwNSAyMToxMzoxNiAtMDAwMAkxLjI3CisrKyBr
aHRtbC9odG1sL2h0bWxwYXJzZXIuaAkxNiBKdW4gMjAwNSAyMzowMjoyMiAtMDAwMApAQCAtODks
NyArODksNyBAQCBwdWJsaWM6CiAgICAgICovCiAgICAgdm9pZCByZXNldCgpOwogCi0gICAgYm9v
bCBza2lwTW9kZSgpIGNvbnN0IHsgcmV0dXJuIChkaXNjYXJkX3VudGlsICE9IDApOyB9CisgICAg
Ym9vbCBza2lwTW9kZSgpIGNvbnN0IHsgcmV0dXJuICFkaXNjYXJkX3VudGlsLmlzTnVsbCgpOyB9
CiAgICAgYm9vbCBub1NwYWNlcygpIGNvbnN0IHsgcmV0dXJuICFpbkJvZHk7IH0KICAgICBib29s
IHNlbGVjdE1vZGUoKSBjb25zdCB7IHJldHVybiBpblNlbGVjdDsgfQogCkBAIC05Nyw3ICs5Nyw4
IEBAIHB1YmxpYzoKICAgICBET006OkRvY3VtZW50UHRyICpkb2NQdHIoKSBjb25zdCB7IHJldHVy
biBkb2N1bWVudDsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgdm9pZCBzZXRDdXJyZW50KERPTTo6Tm9k
ZUltcGwgKm5ld0N1cnJlbnQpOworICAgIHZvaWQgc2V0Q3VycmVudChET006Ok5vZGVJbXBsKiBu
ZXdDdXJyZW50KTsKKyAgICB2b2lkIHNldFNraXBNb2RlKGNvbnN0IERPTTo6UXVhbGlmaWVkTmFt
ZSYgcU5hbWUpIHsgZGlzY2FyZF91bnRpbCA9IHFOYW1lLmxvY2FsTmFtZSgpOyB9CiAKICAgICBL
SFRNTFZpZXcgKkhUTUxXaWRnZXQ7CiAgICAgRE9NOjpEb2N1bWVudFB0ciAqZG9jdW1lbnQ7CkBA
IC0xMTEsMTcgKzExMiwxNiBAQCBwcm90ZWN0ZWQ6CiAKICAgICBib29sIGluc2VydE5vZGUoRE9N
OjpOb2RlSW1wbCAqbiwgYm9vbCBmbGF0ID0gZmFsc2UpOwogCi0gICAgLyoKLSAgICAgKiBUaGUg
Y3VycmVudGx5IGFjdGl2ZSBlbGVtZW50ICh0aGUgb25lIG5ldyBlbGVtZW50cyB3aWxsIGJlIGFk
ZGVkIHRvKQotICAgICAqLwotICAgIERPTTo6Tm9kZUltcGwgKmN1cnJlbnQ7CisgICAgLy8gVGhl
IGN1cnJlbnRseSBhY3RpdmUgZWxlbWVudCAodGhlIG9uZSBuZXcgZWxlbWVudHMgd2lsbCBiZSBh
ZGRlZCB0bykuICBDYW4gYmUgYSBEb2N1bWVudEZyYWdtZW50LCBhIERvY3VtZW50IG9yIGFuIEVs
ZW1lbnQuCisgICAgRE9NOjpOb2RlSW1wbCogY3VycmVudDsKKwogICAgIGJvb2wgY3VycmVudElz
UmVmZXJlbmNlZDsKIAogICAgIEhUTUxTdGFja0VsZW0gKmJsb2NrU3RhY2s7CiAKLSAgICB2b2lk
IHB1c2hCbG9jayggaW50IF9pZCwgaW50IF9sZXZlbCk7Ci0KLSAgICB2b2lkIHBvcEJsb2NrKCBp
bnQgX2lkICk7CisgICAgdm9pZCBwdXNoQmxvY2soY29uc3QgRE9NOjpBdG9taWNTdHJpbmcmIHRh
Z05hbWUsIGludCBfbGV2ZWwpOworICAgIHZvaWQgcG9wQmxvY2soY29uc3QgRE9NOjpBdG9taWNT
dHJpbmcmIHRhZ05hbWUpOworICAgIHZvaWQgcG9wQmxvY2soY29uc3QgRE9NOjpRdWFsaWZpZWRO
YW1lJiBxTmFtZSkgeyByZXR1cm4gcG9wQmxvY2socU5hbWUubG9jYWxOYW1lKCkpOyB9IC8vIENv
bnZlbmllbmNlIGZ1bmN0aW9uIGZvciByZWFkYWJpbGl0eS4KICAgICB2b2lkIHBvcE9uZUJsb2Nr
KGJvb2wgZGVsQmxvY2sgPSB0cnVlKTsKICAgICB2b2lkIHBvcElubGluZUJsb2NrcygpOwogCkBA
IC0xMjksMTYgKzEyOSwxOCBAQCBwcm90ZWN0ZWQ6CiAKICAgICB2b2lkIGNyZWF0ZUhlYWQoKTsK
IAotICAgIGJvb2wgaXNSZXNpZHVhbFN0eWxlVGFnKGludCBfaWQpOwotICAgIGJvb2wgaXNBZmZl
Y3RlZEJ5UmVzaWR1YWxTdHlsZShpbnQgX2lkKTsKKyAgICBib29sIGlzUmVzaWR1YWxTdHlsZVRh
Zyhjb25zdCBET006OkF0b21pY1N0cmluZyYgdGFnTmFtZSk7CisgICAgYm9vbCBpc0FmZmVjdGVk
QnlSZXNpZHVhbFN0eWxlKGNvbnN0IERPTTo6QXRvbWljU3RyaW5nJiB0YWdOYW1lKTsKICAgICB2
b2lkIGhhbmRsZVJlc2lkdWFsU3R5bGVDbG9zZVRhZ0Fjcm9zc0Jsb2NrcyhIVE1MU3RhY2tFbGVt
KiBlbGVtKTsKICAgICB2b2lkIHJlb3BlblJlc2lkdWFsU3R5bGVUYWdzKEhUTUxTdGFja0VsZW0q
IGVsZW0sIERPTTo6Tm9kZUltcGwqIG1hbGZvcm1lZFRhYmxlUGFyZW50KTsKIAotICAgIGJvb2wg
YWxsb3dOZXN0ZWRSZWR1bmRhbnRUYWcoaW50IF9pZCk7CisgICAgYm9vbCBhbGxvd05lc3RlZFJl
ZHVuZGFudFRhZyhjb25zdCBET006OkF0b21pY1N0cmluZyYgdGFnTmFtZSk7CiAgICAgCi0gICAg
c3RhdGljIGJvb2wgaXNIZWFkZXJUYWcoaW50IF9pZCk7CisgICAgc3RhdGljIGJvb2wgaXNIZWFk
ZXJUYWcoY29uc3QgRE9NOjpBdG9taWNTdHJpbmcmIHRhZ05hbWUpOwogICAgIHZvaWQgcG9wTmVz
dGVkSGVhZGVyVGFnKCk7CiAKKyAgICBib29sIGlzSW5saW5lKERPTTo6Tm9kZUltcGwqIG5vZGUp
IGNvbnN0OworICAgIAogICAgIC8qCiAgICAgICogY3VycmVudGx5IGFjdGl2ZSBmb3JtCiAgICAg
ICovCkBAIC0xNzUsMTUgKzE3NywxMyBAQCBwcm90ZWN0ZWQ6CiAgICAgLyoKICAgICAgKiB0ZWxs
cyB0aGUgcGFyc2VyIHRvIGRpc2NhcmQgYWxsIHRhZ3MsIHVudGlsIGl0IHJlYWNoZXMgdGhlIG9u
ZSBzcGVjaWZpZWQKICAgICAgKi8KLSAgICBpbnQgZGlzY2FyZF91bnRpbDsKKyAgICBET006OkF0
b21pY1N0cmluZyBkaXNjYXJkX3VudGlsOwogCiAgICAgYm9vbCBoZWFkTG9hZGVkOwogICAgIGlu
dCBpblN0cmF5VGFibGVDb250ZW50OwogCiAgICAgYm9vbCBpbmNsdWRlc0NvbW1lbnRzSW5ET007
CiAgICAgCi0gICAgdXNob3J0IGZvcmJpZGRlblRhZ1tJRF9MQVNUX1RBRyArIDFdOwotICAgIAog
I2lmIFNQRUVEX0RFQlVHID4gMAogICAgIFFUaW1lIHF0OwogI2VuZGlmCkluZGV4OiBraHRtbC9o
dG1sL2h0bWx0b2tlbml6ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJD
b3JlL2todG1sL2h0bWwvaHRtbHRva2VuaXplci5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
OTIKZGlmZiAtdSAtcCAtcjEuOTIga2h0bWwvaHRtbC9odG1sdG9rZW5pemVyLmNwcAotLS0ga2h0
bWwvaHRtbC9odG1sdG9rZW5pemVyLmNwcAkxNCBKdW4gMjAwNSAyMjozNjozMCAtMDAwMAkxLjky
CisrKyBraHRtbC9odG1sL2h0bWx0b2tlbml6ZXIuY3BwCTE2IEp1biAyMDA1IDIzOjAyOjI0IC0w
MDAwCkBAIC02Myw3ICs2Myw3IEBAIHVzaW5nIERPTTo6RE9NU3RyaW5nOwogdXNpbmcgRE9NOjpE
T01TdHJpbmdJbXBsOwogdXNpbmcgRE9NOjpEb2N1bWVudEltcGw7CiB1c2luZyBET006OmVtcHR5
QXRvbTsKLXVzaW5nIERPTTo6ZW5kVGFnUmVxdWlyZW1lbnQ7Cit1c2luZyBET006OkhUTUxOYW1l
czsKIAogLy8gdHVybiBvZmYgaW5saW5pbmcgdG8gdm9pZCB3YXJuaW5nIHdpdGggbmV3ZXIgZ2Nj
CiAjdW5kZWYgX19pbmxpbmUKQEAgLTQ1MSwxMCArNDUxLDEwIEBAIHZvaWQgSFRNTFRva2VuaXpl
cjo6cGFyc2VTcGVjaWFsKFRva2VuaXoKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAg
ICAgIHByb2Nlc3NMaXN0aW5nKFRva2VuaXplclN0cmluZyhzY3JpcHRDb2RlLCBzY3JpcHRDb2Rl
U2l6ZSkpOwogICAgICAgICAgICAgICAgIHByb2Nlc3NUb2tlbigpOwotICAgICAgICAgICAgICAg
IGlmICggc3R5bGUgKSAgICAgICAgIHsgY3VyclRva2VuLmlkID0gSURfU1RZTEUgKyBJRF9DTE9T
RV9UQUc7IH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmICggdGV4dGFyZWEgKSB7IGN1cnJUb2tl
bi5pZCA9IElEX1RFWFRBUkVBICsgSURfQ0xPU0VfVEFHOyB9Ci0gICAgICAgICAgICAgICAgZWxz
ZSBpZiAoIHRpdGxlICkgeyBjdXJyVG9rZW4uaWQgPSBJRF9USVRMRSArIElEX0NMT1NFX1RBRzsg
fQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKCB4bXAgKSAgeyBjdXJyVG9rZW4uaWQgPSBJRF9Y
TVAgKyBJRF9DTE9TRV9UQUc7IH0KKyAgICAgICAgICAgICAgICBpZiAoIHN0eWxlICkgICAgICAg
ICB7IGN1cnJUb2tlbi50YWdOYW1lID0gSFRNTE5hbWVzOjpzdHlsZSgpLmxvY2FsTmFtZSgpOyBj
dXJyVG9rZW4uYmVnaW5UYWcgPSBmYWxzZTsgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKCB0
ZXh0YXJlYSApIHsgY3VyclRva2VuLnRhZ05hbWUgPSBIVE1MTmFtZXM6OnRleHRhcmVhKCkubG9j
YWxOYW1lKCk7IGN1cnJUb2tlbi5iZWdpblRhZyA9IGZhbHNlOyB9CisgICAgICAgICAgICAgICAg
ZWxzZSBpZiAoIHRpdGxlICkgeyBjdXJyVG9rZW4udGFnTmFtZSA9IEhUTUxOYW1lczo6dGl0bGUo
KS5sb2NhbE5hbWUoKTsgY3VyclRva2VuLmJlZ2luVGFnID0gZmFsc2U7IH0KKyAgICAgICAgICAg
ICAgICBlbHNlIGlmICggeG1wICkgIHsgY3VyclRva2VuLnRhZ05hbWUgPSBIVE1MTmFtZXM6Onht
cCgpLmxvY2FsTmFtZSgpOyBjdXJyVG9rZW4uYmVnaW5UYWcgPSBmYWxzZTsgfQogICAgICAgICAg
ICAgICAgIHByb2Nlc3NUb2tlbigpOwogICAgICAgICAgICAgICAgIHN0eWxlID0gc2NyaXB0ID0g
c3R5bGUgPSB0ZXh0YXJlYSA9IHRpdGxlID0geG1wID0gZmFsc2U7CiAgICAgICAgICAgICAgICAg
dHF1b3RlID0gTm9RdW90ZTsKQEAgLTUyNCw3ICs1MjQsOCBAQCB2b2lkIEhUTUxUb2tlbml6ZXI6
OnNjcmlwdEhhbmRsZXIoKQogICAgIHByb2Nlc3NMaXN0aW5nKFRva2VuaXplclN0cmluZyhzY3Jp
cHRDb2RlLCBzY3JpcHRDb2RlU2l6ZSkpOwogICAgIFFTdHJpbmcgZXhTY3JpcHQoIGJ1ZmZlciwg
ZGVzdC1idWZmZXIgKTsKICAgICBwcm9jZXNzVG9rZW4oKTsKLSAgICBjdXJyVG9rZW4uaWQgPSBJ
RF9TQ1JJUFQgKyBJRF9DTE9TRV9UQUc7CisgICAgY3VyclRva2VuLnRhZ05hbWUgPSBIVE1MTmFt
ZXM6OnNjcmlwdCgpLmxvY2FsTmFtZSgpOworICAgIGN1cnJUb2tlbi5iZWdpblRhZyA9IGZhbHNl
OwogICAgIHByb2Nlc3NUb2tlbigpOwogCiAgICAgVG9rZW5pemVyU3RyaW5nICpzYXZlZFByZXBl
bmRpbmdTcmMgPSBjdXJyZW50UHJlcGVuZGluZ1NyYzsKQEAgLTcwMSwxMCArNzAyLDExIEBAIHZv
aWQgSFRNTFRva2VuaXplcjo6cGFyc2VDb21tZW50KFRva2VuaXoKICAgICAgICAgICAgICAgICAg
ICAgICAgIGNoZWNrU2NyaXB0QnVmZmVyKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzY3Jp
cHRDb2RlWyBzY3JpcHRDb2RlU2l6ZSBdID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgIHNj
cmlwdENvZGVbIHNjcmlwdENvZGVTaXplICsgMSBdID0gMDsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGN1cnJUb2tlbi5pZCA9IElEX0NPTU1FTlQ7CisgICAgICAgICAgICAgICAgICAgICAgICBj
dXJyVG9rZW4udGFnTmFtZSA9IGNvbW1lbnRBdG9tOwogICAgICAgICAgICAgICAgICAgICAgICAg
cHJvY2Vzc0xpc3RpbmcoVG9rZW5pemVyU3RyaW5nKHNjcmlwdENvZGUsIHNjcmlwdENvZGVTaXpl
IC0gZW5kQ2hhcnNDb3VudCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc1Rva2Vu
KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjdXJyVG9rZW4uaWQgPSBJRF9DT01NRU5UICsg
SURfQ0xPU0VfVEFHOworICAgICAgICAgICAgICAgICAgICAgICAgY3VyclRva2VuLnRhZ05hbWUg
PSBjb21tZW50QXRvbTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJUb2tlbi5iZWdpblRh
ZyA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc1Rva2VuKCk7CiAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgc2NyaXB0Q29kZVNpemUgPSAw
OwpAQCAtMTA2Niw3ICsxMDY4LDggQEAgdm9pZCBIVE1MVG9rZW5pemVyOjpwYXJzZVRhZyhUb2tl
bml6ZXJTdAogICAgICAgICAgICAgICAgICAgICBRQ1N0cmluZyB0bXAocHRyLCBsZW4rMSk7CiAg
ICAgICAgICAgICAgICAgICAgIGtkRGVidWcoIDYwMzYgKSA8PCAiZm91bmQgdGFnIGlkPSIgPDwg
dGFnSUQgPDwgIjogIiA8PCB0bXAuZGF0YSgpIDw8IGVuZGw7CiAjZW5kaWYKLSAgICAgICAgICAg
ICAgICAgICAgY3VyclRva2VuLmlkID0gYmVnaW5UYWcgPyB0YWdJRCA6IHRhZ0lEICsgSURfQ0xP
U0VfVEFHOworICAgICAgICAgICAgICAgICAgICBjdXJyVG9rZW4uaWQgPSB0YWdJRDsKKyAgICAg
ICAgICAgICAgICAgICAgY3VyclRva2VuLmJlZ2luVGFnID0gYmVnaW5UYWc7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIGRlc3QgPSBidWZmZXI7CiAgICAgICAgICAgICAgICAg
dGFnID0gU2VhcmNoQXR0cmlidXRlOwpJbmRleDoga2h0bWwvaHRtbC9odG1sdG9rZW5pemVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sdG9r
ZW5pemVyLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzQKZGlmZiAtdSAtcCAtcjEuMzQga2h0
bWwvaHRtbC9odG1sdG9rZW5pemVyLmgKLS0tIGtodG1sL2h0bWwvaHRtbHRva2VuaXplci5oCTEx
IE1heSAyMDA1IDA1OjQ5OjM0IC0wMDAwCTEuMzQKKysrIGtodG1sL2h0bWwvaHRtbHRva2VuaXpl
ci5oCTE2IEp1biAyMDA1IDIzOjAyOjI1IC0wMDAwCkBAIC0zNCw4ICszNCw2IEBACiAjaW5jbHVk
ZSA8cXB0cnF1ZXVlLmg+CiAKICNpbmNsdWRlICJtaXNjL2xvYWRlcl9jbGllbnQuaCIKLSNpbmNs
dWRlICJtaXNjL2h0bWx0YWdzLmgiCi0jaW5jbHVkZSAieG1sL2RvbV9zdHJpbmdpbXBsLmgiCiAj
aW5jbHVkZSAieG1sL3htbF90b2tlbml6ZXIuaCIKICNpbmNsdWRlICJodG1sL2h0bWxfZWxlbWVu
dGltcGwuaCIKICNpbmNsdWRlICJ4bWwvZG9tX2RvY2ltcGwuaCIKQEAgLTcwLDIyICs2OCwyNCBA
QCBjbGFzcyBUb2tlbgogewogcHVibGljOgogICAgIFRva2VuKCkgewotICAgICAgICBpZCA9IDA7
CiAgICAgICAgIGF0dHJzID0gMDsKICAgICAgICAgdGV4dCA9IDA7CisgICAgICAgIGJlZ2luVGFn
ID0gdHJ1ZTsKICAgICAgICAgZmxhdCA9IGZhbHNlOwogICAgICAgICAvL3FEZWJ1ZygibmV3IHRv
a2VuLCBjcmVhdGluZyAlMDhseCIsIGF0dHJzKTsKICAgICB9CisKICAgICB+VG9rZW4oKSB7Ci0g
ICAgICAgIGlmKGF0dHJzKSBhdHRycy0+ZGVyZWYoKTsKLSAgICAgICAgaWYodGV4dCkgdGV4dC0+
ZGVyZWYoKTsKKyAgICAgICAgaWYgKGF0dHJzKSBhdHRycy0+ZGVyZWYoKTsKKyAgICAgICAgaWYg
KHRleHQpIHRleHQtPmRlcmVmKCk7CiAgICAgfQorCiAgICAgdm9pZCBhZGRBdHRyaWJ1dGUoRE9N
OjpEb2N1bWVudEltcGwqIGRvYywgUUNoYXIqIGJ1ZmZlciwgY29uc3QgUVN0cmluZyYgYXR0ck5h
bWUsIGNvbnN0IERPTTo6QXRvbWljU3RyaW5nJiB2KQogICAgIHsKICAgICAgICAgRE9NOjpBdHRy
aWJ1dGVJbXBsKiBhID0gMDsKLSAgICAgICAgaWYoYnVmZmVyLT51bmljb2RlKCkpCisgICAgICAg
IGlmIChidWZmZXItPnVuaWNvZGUoKSkKICAgICAgICAgICAgIGEgPSBuZXcgRE9NOjpNYXBwZWRB
dHRyaWJ1dGVJbXBsKGJ1ZmZlci0+dW5pY29kZSgpLCB2KTsKLSAgICAgICAgZWxzZSBpZiAoICFh
dHRyTmFtZS5pc0VtcHR5KCkgJiYgYXR0ck5hbWUgIT0gIi8iICkKKyAgICAgICAgZWxzZSBpZiAo
IWF0dHJOYW1lLmlzRW1wdHkoKSAmJiBhdHRyTmFtZSAhPSAiLyIpCiAgICAgICAgICAgICBhID0g
bmV3IERPTTo6TWFwcGVkQXR0cmlidXRlSW1wbChkb2MtPmF0dHJJZCgwLCBET006OkRPTVN0cmlu
ZyhhdHRyTmFtZSkuaW1wbGVtZW50YXRpb24oKSwgZmFsc2UpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdik7CiAKQEAgLTk3LDIzICs5NywzMyBAQCBwdWJs
aWM6CiAgICAgICAgICAgICBhdHRycy0+aW5zZXJ0QXR0cmlidXRlKGEpOwogICAgICAgICB9CiAg
ICAgfQorCisgICAgYm9vbCBpc09wZW5UYWcoY29uc3QgRE9NOjpRdWFsaWZpZWROYW1lJiBmdWxs
TmFtZSkgY29uc3QgeyByZXR1cm4gYmVnaW5UYWcgJiYgZnVsbE5hbWUubG9jYWxOYW1lKCkgPT0g
dGFnTmFtZTsgfQorICAgIGJvb2wgaXNDbG9zZVRhZyhjb25zdCBET006OlF1YWxpZmllZE5hbWUm
IGZ1bGxOYW1lKSBjb25zdCB7IHJldHVybiAhYmVnaW5UYWcgJiYgZnVsbE5hbWUubG9jYWxOYW1l
KCkgPT0gdGFnTmFtZTsgfQorCiAgICAgdm9pZCByZXNldCgpCiAgICAgewotICAgICAgICBpZihh
dHRycykgeworICAgICAgICBpZiAoYXR0cnMpIHsKICAgICAgICAgICAgIGF0dHJzLT5kZXJlZigp
OwogICAgICAgICAgICAgYXR0cnMgPSAwOwogICAgICAgICB9Ci0gICAgICAgIGlkID0gMDsKLSAg
ICAgICAgaWYodGV4dCkgeworICAgICAgICAKKyAgICAgICAgdGFnTmFtZSA9IERPTTo6bnVsbEF0
b207CisgICAgICAgIAorICAgICAgICBpZiAodGV4dCkgewogICAgICAgICAgICAgdGV4dC0+ZGVy
ZWYoKTsKICAgICAgICAgICAgIHRleHQgPSAwOwogICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBiZWdpblRhZyA9IHRydWU7CiAgICAgICAgIGZsYXQgPSBmYWxzZTsKICAgICB9CisKICAgICBE
T006Ok5hbWVkTWFwcGVkQXR0ck1hcEltcGwqIGF0dHJzOwogICAgIERPTTo6RE9NU3RyaW5nSW1w
bCogdGV4dDsKLSAgICB1c2hvcnQgaWQ7Ci0gICAgYm9vbCBmbGF0OworICAgIERPTTo6QXRvbWlj
U3RyaW5nIHRhZ05hbWU7CisgICAgYm9vbCBiZWdpblRhZyA6IDE7CisgICAgYm9vbCBmbGF0IDog
MTsKIH07CiAKIC8vIFRoZSBjb3VudCBvZiBzcGFjZXMgdXNlZCBmb3IgZWFjaCB0YWIuCkluZGV4
OiBraHRtbC9taXNjL2h0bWxoYXNoZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9XZWJDb3JlL2todG1sL21pc2MvaHRtbGhhc2hlcy5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuMTAKZGlmZiAtdSAtcCAtcjEuMTAga2h0bWwvbWlzYy9odG1saGFzaGVzLmNwcAotLS0ga2h0
bWwvbWlzYy9odG1saGFzaGVzLmNwcAk1IEphbiAyMDA1IDIyOjU2OjQ2IC0wMDAwCTEuMTAKKysr
IGtodG1sL21pc2MvaHRtbGhhc2hlcy5jcHAJMTYgSnVuIDIwMDUgMjM6MDI6MjUgLTAwMDAKQEAg
LTI1LDIyICsyNSwxMyBAQAogLy8gdHVybiBvZmYgaW5saW5pbmcgdG8gdm9pZCB3YXJuaW5nIHdp
dGggbmV3ZXIgZ2NjCiAjdW5kZWYgX19pbmxpbmUKICNkZWZpbmUgX19pbmxpbmUKLSNpbmNsdWRl
ICJodG1sdGFncy5jIgogI2luY2x1ZGUgImh0bWxhdHRycy5jIgogI3VuZGVmIF9faW5saW5lCiAK
LXVuc2lnbmVkIHNob3J0IGtodG1sOjpnZXRUYWdJRChjb25zdCBjaGFyICp0YWdTdHIsIGludCBs
ZW4pCit1bnNpZ25lZCBzaG9ydCBraHRtbDo6Z2V0QXR0cklEKGNvbnN0IGNoYXIgKmF0dHJTdHIs
IGludCBsZW4pCiB7Ci0gICAgY29uc3Qgc3RydWN0IHRhZ3MgKnRhZ1B0ciA9IGZpbmRUYWcodGFn
U3RyLCBsZW4pOwotICAgIGlmICghdGFnUHRyKQorICAgIGNvbnN0IHN0cnVjdCBhdHRycyAqYXR0
clB0ciA9IGZpbmRBdHRyKGF0dHJTdHIsIGxlbik7CisgICAgaWYgKCFhdHRyUHRyKQogICAgICAg
ICByZXR1cm4gMDsKLSAgICByZXR1cm4gdGFnUHRyLT5pZDsKLX0KLQotdW5zaWduZWQgc2hvcnQg
a2h0bWw6OmdldEF0dHJJRChjb25zdCBjaGFyICp0YWdTdHIsIGludCBsZW4pCi17Ci0gICAgY29u
c3Qgc3RydWN0IGF0dHJzICp0YWdQdHIgPSBmaW5kQXR0cih0YWdTdHIsIGxlbik7Ci0gICAgaWYg
KCF0YWdQdHIpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiB0YWdQdHItPmlkOworICAg
IHJldHVybiBhdHRyUHRyLT5pZDsKIH0KSW5kZXg6IGtodG1sL21pc2MvaHRtbGhhc2hlcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL21pc2MvaHRtbGhhc2hl
cy5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjYKZGlmZiAtdSAtcCAtcjEuNiBraHRtbC9taXNj
L2h0bWxoYXNoZXMuaAotLS0ga2h0bWwvbWlzYy9odG1saGFzaGVzLmgJNSBKYW4gMjAwNSAyMjo1
Njo0NiAtMDAwMAkxLjYKKysrIGtodG1sL21pc2MvaHRtbGhhc2hlcy5oCTE2IEp1biAyMDA1IDIz
OjAyOjI1IC0wMDAwCkBAIC0yMywxMiArMjMsMTAgQEAKICNpZm5kZWYgSFRNTEhBU0hFU19ICiAj
ZGVmaW5lIEhUTUxIQVNIRVNfSAogCi0jaW5jbHVkZSAiaHRtbHRhZ3MuaCIKICNpbmNsdWRlICJo
dG1sYXR0cnMuaCIKIAogbmFtZXNwYWNlIGtodG1sCiB7Ci0gIHVuc2lnbmVkIHNob3J0IGdldFRh
Z0lEKGNvbnN0IGNoYXIgKnRhZ1N0ciwgaW50IGxlbik7CiAgIHVuc2lnbmVkIHNob3J0IGdldEF0
dHJJRChjb25zdCBjaGFyICp0YWdTdHIsIGludCBsZW4pOwogfQogCkluZGV4OiBraHRtbC9taXNj
L2h0bWx0YWdzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IGtodG1sL21pc2MvaHRtbHRhZ3MuaW4K
ZGlmZiAtTiBraHRtbC9taXNjL2h0bWx0YWdzLmluCi0tLSBraHRtbC9taXNjL2h0bWx0YWdzLmlu
CTExIE1heSAyMDA1IDIzOjQ1OjI5IC0wMDAwCTEuNworKysgL2Rldi9udWxsCTEgSmFuIDE5NzAg
MDA6MDA6MDAgLTAwMDAKQEAgLTEsMTAyICswLDAgQEAKLWEKLWFiYnIKLWFjcm9ueW0KLWFkZHJl
c3MKLWFwcGxldAotYXJlYQotYgotYmFzZQotYmFzZWZvbnQKLWJkbwotYmlnCi1ibG9ja3F1b3Rl
Ci1ib2R5Ci1icgotYnV0dG9uCi1jYW52YXMKLWNhcHRpb24KLWNlbnRlcgotY2l0ZQotY29kZQot
Y29sCi1jb2xncm91cAotZGQKLWRlbAotZGZuCi1kaXIKLWRpdgotZGwKLWR0Ci1lbQotZW1iZWQK
LWZpZWxkc2V0Ci1mb250Ci1mb3JtCi1mcmFtZQotZnJhbWVzZXQKLWgxCi1oMgotaDMKLWg0Ci1o
NQotaDYKLWhlYWQKLWhyCi1odG1sCi1pCi1pZnJhbWUKLWltZwotaW5wdXQKLWlucwotaXNpbmRl
eAota2JkCi1rZXlnZW4KLWxhYmVsCi1sYXllcgotbGVnZW5kCi1saQotbGluawotbWFwCi1tYXJx
dWVlCi1tZW51Ci1tZXRhCi1ub2JyCi1ub2VtYmVkCi1ub2ZyYW1lcwotbm9zY3JpcHQKLW5vbGF5
ZXIKLW9iamVjdAotb2wKLW9wdGdyb3VwCi1vcHRpb24KLXAKLXBhcmFtCi1wbGFpbnRleHQKLXBy
ZQotcQotcwotc2FtcAotc2NyaXB0Ci1zZWxlY3QKLXNtYWxsCi1zcGFuCi1zdHJpa2UKLXN0cm9u
Zwotc3R5bGUKLXN1Ygotc3VwCi10YWJsZQotdGJvZHkKLXRkCi10ZXh0YXJlYQotdGZvb3QKLXRo
Ci10aGVhZAotdGl0bGUKLXRyCi10dAotdQotdWwKLXZhcgotd2JyCi14bXAKSW5kZXg6IGtodG1s
L21pc2MvbWFrZXRhZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZToga2h0bWwvbWlzYy9tYWtldGFncwpk
aWZmIC1OIGtodG1sL21pc2MvbWFrZXRhZ3MKLS0tIGtodG1sL21pc2MvbWFrZXRhZ3MJNiBKYW4g
MjAwNSAyMToxMzoxNiAtMDAwMAkxLjEzCisrKyAvZGV2L251bGwJMSBKYW4gMTk3MCAwMDowMDow
MCAtMDAwMApAQCAtMSwxMjEgKzAsMCBAQAotIyEvdXNyL2Jpbi9wZXJsCi0jICAgVGhpcyBmaWxl
IGlzIHBhcnQgb2YgdGhlIEtERSBsaWJyYXJpZXMKLSMKLSMgICBDb3B5cmlnaHQgKEMpIDE5OTgg
V2FsZG8gQmFzdGlhbiAoYmFzdGlhbkBrZGUub3JnKQotIyAgICAgICAgICAgICAgICAgMTk5OSBM
YXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQotIyAgIENvcHlyaWdodCAoQykgMjAwNCBBcHBsZSBD
b21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0jICAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
LSMgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKLSMgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCi0jCi0jICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jICAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSMgICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQotIyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgotIwotIyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSMgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotIyAgIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwK
LSMgICBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KLSMKLSMtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0jCi0jICBLREUgSFRNTCBXaWRnZXQgLS0gU2NyaXB0IHRvIGdlbmVyYXRlIGh0bWx0YWdzLmMg
YW5kIGh0bWx0YWdzLmgKLSMKLQotdXNlIHN0cmljdDsKLQotb3BlbiBJTiwgImh0bWx0YWdzLmlu
IgotICBvciBkaWUgIkNhbid0IG9wZW4gaW5cbiI7Ci1vcGVuIGhlYWRlciwgIj5odG1sdGFncy5o
IgotICBvciBkaWUgIkNhbid0IG9wZW4gaGVhZGVyXG4iOwotb3BlbiBvdXQsICI+aHRtbHRhZ3Mu
Z3BlcmYiCi0gIG9yIGRpZSAiQ2FuJ3Qgb3BlbiBvdXRcbiI7Ci0KLXByaW50IG91dCAiJXtcbi8q
IFRoaXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGh0bWx0YWdzLmluIGJ5
IG1ha2V0YWdzLCBkbyBub3QgZWRpdCAqL1xuLyogQ29weXJpZ2h0IDE5OTkgTGFycyBLbm9sbCAq
L1xuI2luY2x1ZGUgXCJodG1sdGFncy5oXCJcbiV9XG4iOwotcHJpbnQgb3V0ICJzdHJ1Y3QgdGFn
cyB7XG4gICAgY29uc3QgY2hhciAqbmFtZTtcbiAgICBpbnQgaWQ7XG59O1xuJSVcbiI7Ci0KLXBy
aW50IGhlYWRlciAiLyogVGhpcyBmaWxlIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20K
LWh0bWx0YWdzLmluIGJ5IG1ha2V0YWdzLCBkbyBub3QgZWRpdCAqL1xuLyogQ29weXJpZ2h0IDE5
OTkgTGFycyBLbm9sbCAqL1xuLyogQ29weXJpZ2h0IDIwMDQgQXBwbGUgQ29tcHV0ZXIsIEluYy4g
Ki9cblxuI2lmbmRlZiBLSFRNTF9UQUdTX0hcbiNkZWZpbmUgS0hUTUxfVEFHU19IXG5cbiNpbmNs
dWRlIFwiZG9tL2RvbV9zdHJpbmcuaFwiXG5cbiI7Ci0KLXByaW50IGhlYWRlciAiRE9NOjpET01T
dHJpbmcgZ2V0VGFnTmFtZSh1bnNpZ25lZCBzaG9ydCBpZCk7XG5cbiI7Ci0KLW15ICRudW0gPSAw
OwotbXkgJG9wZW5UYWdzID0gIiI7Ci1teSAkY2xvc2VUYWdzID0gIiI7Ci13aGlsZSAoPElOPikg
ewotICAgIGNob21wOwotICAgIG15ICRhdHRyID0gJF87Ci0gICAgJG51bSArPSAxOwotICAgIG15
ICR1cCA9IHVjKCRhdHRyKTsKLSAgICAkb3BlblRhZ3MgLj0gIiAgICBcIiR1cFwiLFxuIjsKLSAg
ICAkY2xvc2VUYWdzIC49ICIgICAgXCIvJHVwXCIsXG4iOwotICAgICR1cCA9fiBzLy0vXy87Ci0g
ICAgcHJpbnQgb3V0ICRhdHRyIC4gIiwgSURfIiAuICR1cCAuICJcbiI7Ci0gICAgcHJpbnQgaGVh
ZGVyICJjb25zdCB1bnNpZ25lZCBzaG9ydCBJRF8kdXAgPSAkbnVtO1xuIjsKLX0KLXByaW50IG91
dCAiYW5jaG9yLCBJRF9BXG4iOwotcHJpbnQgb3V0ICJpbWFnZSwgSURfSU1HXG4iOwotcHJpbnQg
b3V0ICJsaXN0aW5nLCBJRF9QUkVcbiI7Ci0kbnVtICs9IDE7Ci1wcmludCBoZWFkZXIgImNvbnN0
IHVuc2lnbmVkIHNob3J0IElEX1RFWFQgPSAkbnVtO1xuIjsKLSRudW0gKz0gMTsKLXByaW50IGhl
YWRlciAiY29uc3QgdW5zaWduZWQgc2hvcnQgSURfQ09NTUVOVCA9ICRudW07XG4iOwotcHJpbnQg
aGVhZGVyICJjb25zdCB1bnNpZ25lZCBzaG9ydCBJRF9MQVNUX1RBRyA9ICRudW07XG4iOwotcHJp
bnQgaGVhZGVyICJjb25zdCB1bnNpZ25lZCBzaG9ydCBJRF9DTE9TRV9UQUcgPSAzMjAwMDtcbiI7
Ci0KLXByaW50IG91dCAiJSVcbiI7Ci1jbG9zZSBvdXQ7Ci1wcmludCBoZWFkZXIgIlxuI2VuZGlm
XG4iOwotY2xvc2UgaGVhZGVyOwotCi1teSAkcmVzdWx0ID0gc3lzdGVtKCIvYmluL3NoIiwgIi1j
IiwgImdwZXJmIC1hIC1MICdBTlNJLUMnIC1EIC1FIC1DIC1sIC1vIC10IC1rICcqJyAtTmZpbmRU
YWcgLUhoYXNoX3RhZyAtV3dvcmRsaXN0X3RhZyBodG1sdGFncy5ncGVyZiA+IGh0bWx0YWdzLmMi
KTsKLWlmICgkcmVzdWx0KSB7Ci0gIHVubGluayAiaHRtbHRhZ3MuYyI7Ci0gIGV4aXQgJHJlc3Vs
dDsKLX0KLQotb3BlbiBJTiwgImh0bWx0YWdzLmMiIG9yIGRpZTsKLQotbXkgJG51bUxpbmVzID0g
MDsKLXdoaWxlICg8SU4+KSB7Ci0gICAgJG51bUxpbmVzKys7Ci19Ci0kbnVtTGluZXMgKz0gMjsK
LQotY2hvbXAgJG9wZW5UYWdzOwotY2hvbXAgJGNsb3NlVGFnczsKLQotb3BlbiBPVVQsICI+Pmh0
bWx0YWdzLmMiIG9yIGRpZTsKLXByaW50IE9VVCA8PEVORAotI2xpbmUgJG51bUxpbmVzICJodG1s
dGFncy5jIgotCi11c2luZyBET006OkRPTVN0cmluZzsKLQotc3RhdGljIGNvbnN0IGNoYXIgKiBj
b25zdCBvcGVuVGFnTmFtZXNbXSA9IHsKLSAgICAwLAotJG9wZW5UYWdzCi0gICAgIlRFWFQiLAot
ICAgICJDT01NRU5UIgotfTsKLQotc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBjbG9zZVRhZ05h
bWVzW10gPSB7Ci0gICAgMCwKLSRjbG9zZVRhZ3MKLX07Ci0KLURPTVN0cmluZyBnZXRUYWdOYW1l
KHVuc2lnbmVkIHNob3J0IGlkKQotewotICAgIGlmIChpZCA+IElEX0NMT1NFX1RBRykgewotICAg
ICAgICBpbnQgaW5kZXggPSBpZCAtIElEX0NMT1NFX1RBRzsKLSAgICAgICAgaWYgKGluZGV4ID49
IElEX1RFWFQpCi0gICAgICAgICAgICByZXR1cm4gRE9NU3RyaW5nKCk7Ci0gICAgICAgIHJldHVy
biBjbG9zZVRhZ05hbWVzW2luZGV4XTsKLSAgICB9Ci0gICAgaWYgKGlkID4gSURfTEFTVF9UQUcp
Ci0gICAgICAgIHJldHVybiBET01TdHJpbmcoKTsKLSAgICByZXR1cm4gb3BlblRhZ05hbWVzW2lk
XTsKLX0KLUVORApJbmRleDoga2h0bWwveG1sL2RvbV9hdG9taWNzdHJpbmcuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3htbC9kb21fYXRvbWljc3RyaW5n
LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zCmRpZmYgLXUgLXAgLXIxLjMga2h0bWwveG1s
L2RvbV9hdG9taWNzdHJpbmcuY3BwCi0tLSBraHRtbC94bWwvZG9tX2F0b21pY3N0cmluZy5jcHAJ
NSBGZWIgMjAwNCAwMTo0NToxNiAtMDAwMAkxLjMKKysrIGtodG1sL3htbC9kb21fYXRvbWljc3Ry
aW5nLmNwcAkxNiBKdW4gMjAwNSAyMzowMjoyNSAtMDAwMApAQCAtMzA0LDYgKzMwNCw5IEBAIHZv
aWQgQXRvbWljU3RyaW5nOjpyZWhhc2goaW50IG5ld1RhYmxlU2kKIAogICAgIGV4dGVybiBjb25z
dCBBdG9taWNTdHJpbmcgbnVsbEF0b207CiAgICAgZXh0ZXJuIGNvbnN0IEF0b21pY1N0cmluZyBl
bXB0eUF0b207CisgICAgZXh0ZXJuIGNvbnN0IEF0b21pY1N0cmluZyB0ZXh0QXRvbTsKKyAgICBl
eHRlcm4gY29uc3QgQXRvbWljU3RyaW5nIGNvbW1lbnRBdG9tOworICAgIGV4dGVybiBjb25zdCBB
dG9taWNTdHJpbmcgc3RhckF0b207CiAjZWxzZQogICAgIC8vIERlZmluZSBhbiBBdG9taWNTdHJp
bmctc2l6ZWQgYXJyYXkgb2YgcG9pbnRlcnMgdG8gYXZvaWQgc3RhdGljIGluaXRpYWxpemF0aW9u
LgogICAgIC8vIFVzZSBhbiBhcnJheSBvZiBwb2ludGVycyBpbnN0ZWFkIG9mIGFuIGFycmF5IG9m
IGNoYXIgaW4gY2FzZSB0aGVyZSBpcyBzb21lIGFsaWdubWVudCBpc3N1ZS4KQEAgLTMxMiw2ICsz
MTUsOSBAQCB2b2lkIEF0b21pY1N0cmluZzo6cmVoYXNoKGludCBuZXdUYWJsZVNpCiAKICAgICBE
RUZJTkVfR0xPQkFMKG51bGwsIGlnbm9yZWQpCiAgICAgREVGSU5FX0dMT0JBTChlbXB0eSwgaWdu
b3JlZCkKKyAgICBERUZJTkVfR0xPQkFMKHRleHQsIGlnbm9yZWQpCisgICAgREVGSU5FX0dMT0JB
TChjb21tZW50LCBpZ25vcmVkKQorICAgIERFRklORV9HTE9CQUwoc3RhciwgaWdub3JlZCkKICNl
bmRpZgogCiAjZGVmaW5lIENBTExfREVGSU5FX0dMT0JBTChuYW1lKSBERUZJTkVfR0xPQkFMKG5h
bWUsICNuYW1lKQpAQCAtMzI1LDcgKzMzMSwxMCBAQCB2b2lkIEF0b21pY1N0cmluZzo6aW5pdCgp
CiAgICAgICAgIC8vIFVzZSBwbGFjZW1lbnQgbmV3IHRvIGluaXRpYWxpemUgdGhlIGdsb2JhbHMu
CiAgICAgICAgIG5ldyAoJm51bGxBdG9tKSBBdG9taWNTdHJpbmc7CiAgICAgICAgIG5ldyAoJmVt
cHR5QXRvbSkgQXRvbWljU3RyaW5nKCIiKTsKLSAgICAgICAgCisgICAgICAgIG5ldyAoJnRleHRB
dG9tKSBBdG9taWNTdHJpbmcoIiN0ZXh0Iik7CisgICAgICAgIG5ldyAoJmNvbW1lbnRBdG9tKSBB
dG9taWNTdHJpbmcoIiNjb21tZW50Iik7CisgICAgICAgIG5ldyAoJnN0YXJBdG9tKSBBdG9taWNT
dHJpbmcoIioiKTsKKwogICAgICAgICAjZGVmaW5lIFBMQUNFTUVOVF9ORVdfR0xPQkFMKG5hbWUs
IHN0cmluZykgbmV3ICgmbmFtZSAjIyBQcm9wZXJ0eU5hbWUpIEF0b21pY1N0cmluZyhzdHJpbmcp
OwogICAgICAgICAjZGVmaW5lIENBTExfUExBQ0VNRU5UX05FV19HTE9CQUwobmFtZSkgUExBQ0VN
RU5UX05FV19HTE9CQUwobmFtZSwgI25hbWUpCiAgICAgICAgIEtIVE1MX0FUT01JQ1NUUklOR19F
QUNIX0dMT0JBTChDQUxMX1BMQUNFTUVOVF9ORVdfR0xPQkFMKQpJbmRleDoga2h0bWwveG1sL2Rv
bV9hdG9taWNzdHJpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9r
aHRtbC94bWwvZG9tX2F0b21pY3N0cmluZy5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIKZGlm
ZiAtdSAtcCAtcjEuMiBraHRtbC94bWwvZG9tX2F0b21pY3N0cmluZy5oCi0tLSBraHRtbC94bWwv
ZG9tX2F0b21pY3N0cmluZy5oCTMgTWFyIDIwMDQgMDA6NDI6NDkgLTAwMDAJMS4yCisrKyBraHRt
bC94bWwvZG9tX2F0b21pY3N0cmluZy5oCTE2IEp1biAyMDA1IDIzOjAyOjI1IC0wMDAwCkBAIC0x
MTUsNiArMTE1LDkgQEAgaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBdG9taWNTdHJpbgog
I2lmICFLSFRNTF9BVE9NSUNTVFJJTkdfSElERV9HTE9CQUxTCiAgICAgZXh0ZXJuIGNvbnN0IEF0
b21pY1N0cmluZyBudWxsQXRvbTsKICAgICBleHRlcm4gY29uc3QgQXRvbWljU3RyaW5nIGVtcHR5
QXRvbTsKKyAgICBleHRlcm4gY29uc3QgQXRvbWljU3RyaW5nIHRleHRBdG9tOworICAgIGV4dGVy
biBjb25zdCBBdG9taWNTdHJpbmcgY29tbWVudEF0b207CisgICAgZXh0ZXJuIGNvbnN0IEF0b21p
Y1N0cmluZyBzdGFyQXRvbTsKICNkZWZpbmUgS0hUTUxfQVRPTUlDU1RSSU5HX0RFQ0xBUkVfR0xP
QkFMKG5hbWUpIGV4dGVybiBjb25zdCBBdG9taWNTdHJpbmcgbmFtZSAjIyBQcm9wZXJ0eU5hbWU7
CiAgICAgS0hUTUxfQVRPTUlDU1RSSU5HX0VBQ0hfR0xPQkFMKEtIVE1MX0FUT01JQ1NUUklOR19E
RUNMQVJFX0dMT0JBTCkKICAgICBLSFRNTF9BVE9NSUNTVFJJTkdfREVDTEFSRV9HTE9CQUwoc3Bl
Y2lhbFByb3RvdHlwZSkKSW5kZXg6IGtodG1sL3htbC9kb21fZG9jaW1wbC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3htbC9kb21fZG9jaW1wbC5oLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjExNApkaWZmIC11IC1wIC1yMS4xMTQga2h0bWwveG1sL2RvbV9k
b2NpbXBsLmgKLS0tIGtodG1sL3htbC9kb21fZG9jaW1wbC5oCTEzIE1heSAyMDA1IDE2OjQ4OjUx
IC0wMDAwCTEuMTE0CisrKyBraHRtbC94bWwvZG9tX2RvY2ltcGwuaAkxNiBKdW4gMjAwNSAyMzow
MjoyNiAtMDAwMApAQCAtMjE3LDggKzIxNyw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wg
aXNEb2N1bWVudE5vZGUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBib29s
IGlzSFRNTERvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIEVsZW1lbnRJ
bXBsICpjcmVhdGVIVE1MRWxlbWVudChjb25zdCBET01TdHJpbmcgJnRhZ05hbWUsIGludCAmZXhj
ZXB0aW9uY29kZSk7Ci0gICAgRWxlbWVudEltcGwgKmNyZWF0ZUhUTUxFbGVtZW50KHVuc2lnbmVk
IHNob3J0IHRhZ0lEKTsKKyAgICBFbGVtZW50SW1wbCogY3JlYXRlSFRNTEVsZW1lbnQoY29uc3Qg
RE9NU3RyaW5nICZ0YWdOYW1lLCBpbnQgJmV4Y2VwdGlvbmNvZGUpOworICAgIEVsZW1lbnRJbXBs
KiBjcmVhdGVIVE1MRWxlbWVudChjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSk7CiAKICAg
ICBraHRtbDo6Q1NTU3R5bGVTZWxlY3RvciAqc3R5bGVTZWxlY3RvcigpIHsgcmV0dXJuIG1fc3R5
bGVTZWxlY3RvcjsgfQogCkBAIC0zOTgsOSArMzk4LDYgQEAgcHVibGljOgogICAgIC8vICMjIyB0
aGluayBhYm91dCBpbXBsZW1lbnRpbmcgcmVmJ2NvdW50aW5nIGZvciB0aGUgaWQncwogICAgIC8v
IGluIG9yZGVyIHRvIGJlIGFibGUgdG8gcmVhc3NpZ24gdGhvc2UgdGhhdCBhcmUgbm8gbG9uZ2Vy
IGluIHVzZQogICAgIC8vIChjb3VsZCBtYWtlIHByb2JsZW1zIHdoZW4gaXQgaXMgc3RpbGwga2Vw
dCBzb21ld2hlcmUgYXJvdW5kLCBpLmUuIHN0eWxlc2VsZWN0b3IpCi0gICAgTm9kZUltcGw6Oklk
IHRhZ0lkKERPTVN0cmluZ0ltcGwqIF9uYW1lc3BhY2VVUkksIERPTVN0cmluZ0ltcGwgKl9uYW1l
LCBib29sIHJlYWRvbmx5KTsKLSAgICBET01TdHJpbmcgdGFnTmFtZShOb2RlSW1wbDo6SWQgX2lk
KSBjb25zdDsKLQogICAgIE5vZGVJbXBsOjpJZCBhdHRySWQoRE9NU3RyaW5nSW1wbCogX25hbWVz
cGFjZVVSSSwgRE9NU3RyaW5nSW1wbCAqX25hbWUsIGJvb2wgcmVhZG9ubHkpOwogICAgIERPTVN0
cmluZyBhdHRyTmFtZShOb2RlSW1wbDo6SWQgX2lkKSBjb25zdDsKIApJbmRleDoga2h0bWwveG1s
L2RvbV9lbGVtZW50aW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNv
cmUva2h0bWwveG1sL2RvbV9lbGVtZW50aW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
NjcKZGlmZiAtdSAtcCAtcjEuNjcga2h0bWwveG1sL2RvbV9lbGVtZW50aW1wbC5jcHAKLS0tIGto
dG1sL3htbC9kb21fZWxlbWVudGltcGwuY3BwCTExIE1heSAyMDA1IDA1OjQ5OjM1IC0wMDAwCTEu
NjcKKysrIGtodG1sL3htbC9kb21fZWxlbWVudGltcGwuY3BwCTE2IEp1biAyMDA1IDIzOjAyOjI3
IC0wMDAwCkBAIC05MCwxOCArOTAsMTggQEAgdW5zaWduZWQgc2hvcnQgQXR0ckltcGw6Om5vZGVU
eXBlKCkgY29ucwogICAgIHJldHVybiBOb2RlOjpBVFRSSUJVVEVfTk9ERTsKIH0KIAotRE9NU3Ry
aW5nIEF0dHJJbXBsOjpwcmVmaXgoKSBjb25zdAorY29uc3QgQXRvbWljU3RyaW5nJiBBdHRySW1w
bDo6cHJlZml4KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9hdHRyaWJ1dGUtPnByZWZpeCgpOwog
fQogCi12b2lkIEF0dHJJbXBsOjpzZXRQcmVmaXgoY29uc3QgRE9NU3RyaW5nICZfcHJlZml4LCBp
bnQgJmV4Y2VwdGlvbmNvZGUgKQordm9pZCBBdHRySW1wbDo6c2V0UHJlZml4KGNvbnN0IEF0b21p
Y1N0cmluZyAmX3ByZWZpeCwgaW50ICZleGNlcHRpb25jb2RlICkKIHsKICAgICBjaGVja1NldFBy
ZWZpeChfcHJlZml4LCBleGNlcHRpb25jb2RlKTsKICAgICBpZiAoZXhjZXB0aW9uY29kZSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgbV9hdHRyaWJ1dGUtPnNldFByZWZpeChfcHJlZml4LmltcGxl
bWVudGF0aW9uKCkpOworICAgIG1fYXR0cmlidXRlLT5zZXRQcmVmaXgoX3ByZWZpeCk7CiB9CiAK
IERPTVN0cmluZyBBdHRySW1wbDo6bm9kZVZhbHVlKCkgY29uc3QKQEAgLTIwNiw3ICsyMDYsNiBA
QCBFbGVtZW50SW1wbDo6RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvCiAgICAgOiBDb250YWlu
ZXJOb2RlSW1wbChkb2MpCiB7CiAgICAgbmFtZWRBdHRyTWFwID0gMDsKLSAgICBtX3ByZWZpeCA9
IDA7CiB9CiAKIEVsZW1lbnRJbXBsOjp+RWxlbWVudEltcGwoKQpAQCAtMjE1LDkgKzIxNCw2IEBA
IEVsZW1lbnRJbXBsOjp+RWxlbWVudEltcGwoKQogICAgICAgICBuYW1lZEF0dHJNYXAtPmRldGFj
aEZyb21FbGVtZW50KCk7CiAgICAgICAgIG5hbWVkQXR0ck1hcC0+ZGVyZWYoKTsKICAgICB9Ci0K
LSAgICBpZiAobV9wcmVmaXgpCi0gICAgICAgIG1fcHJlZml4LT5kZXJlZigpOwogfQogCiB2b2lk
IEVsZW1lbnRJbXBsOjpyZW1vdmVBdHRyaWJ1dGUoIE5vZGVJbXBsOjpJZCBpZCwgaW50ICZleGNl
cHRpb25jb2RlICkKQEAgLTM1MSwzNiArMzQ3LDI1IEBAIHZvaWQgRWxlbWVudEltcGw6OnNldEF0
dHJpYnV0ZU1hcCggTmFtZWQKIGJvb2wgRWxlbWVudEltcGw6Omhhc0F0dHJpYnV0ZXMoKSBjb25z
dAogewogICAgIHVwZGF0ZVN0eWxlQXR0cmlidXRlSWZOZWVkZWQoKTsKLQogICAgIHJldHVybiBu
YW1lZEF0dHJNYXAgJiYgbmFtZWRBdHRyTWFwLT5sZW5ndGgoKSA+IDA7CiB9CiAKIERPTVN0cmlu
ZyBFbGVtZW50SW1wbDo6bm9kZU5hbWUoKSBjb25zdAogewotICAgIHJldHVybiB0YWdOYW1lKCk7
Ci19Ci0KLURPTVN0cmluZyBFbGVtZW50SW1wbDo6dGFnTmFtZSgpIGNvbnN0Ci17CiAgICAgRE9N
U3RyaW5nIHRuID0gZ2V0RG9jdW1lbnQoKS0+dGFnTmFtZShpZCgpKTsKLQotICAgIGlmIChtX3By
ZWZpeCkKLSAgICAgICAgcmV0dXJuIERPTVN0cmluZyhtX3ByZWZpeCkgKyAiOiIgKyB0bjsKLQor
ICAgIGlmIChtX3RhZ05hbWUuaGFzUHJlZml4KCkpCisgICAgICAgIHJldHVybiBET01TdHJpbmco
bV90YWdOYW1lLnByZWZpeCgpKSArICI6IiArIHRuOwogICAgIHJldHVybiB0bjsKIH0KIAotdm9p
ZCBFbGVtZW50SW1wbDo6c2V0UHJlZml4KCBjb25zdCBET01TdHJpbmcgJl9wcmVmaXgsIGludCAm
ZXhjZXB0aW9uY29kZSApCit2b2lkIEVsZW1lbnRJbXBsOjpzZXRQcmVmaXgoY29uc3QgQXRvbWlj
U3RyaW5nICZfcHJlZml4LCBpbnQgJmV4Y2VwdGlvbmNvZGUpCiB7CiAgICAgY2hlY2tTZXRQcmVm
aXgoX3ByZWZpeCwgZXhjZXB0aW9uY29kZSk7CiAgICAgaWYgKGV4Y2VwdGlvbmNvZGUpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIGlmIChtX3ByZWZpeCkKLSAgICAgICAgbV9wcmVmaXgtPmRlcmVm
KCk7Ci0gICAgbV9wcmVmaXggPSBfcHJlZml4LmltcGxlbWVudGF0aW9uKCk7Ci0gICAgaWYgKG1f
cHJlZml4KQotICAgICAgICBtX3ByZWZpeC0+cmVmKCk7CisgICAgLy8gRklYTUU6IFRoaXMgaXMg
anVzdCBhIGhhY2sgZm9yIHN0YWdlIG9uZSBvZiB0aGUgVGFnTmFtZSBwYXRjaC4gIEl0IHdpbGwg
Y2hhbmdlLgorICAgIG1fdGFnTmFtZS5zZXRQcmVmaXgoX3ByZWZpeCk7CiB9CiAKIHZvaWQgRWxl
bWVudEltcGw6OmNyZWF0ZUF0dHJpYnV0ZU1hcCgpIGNvbnN0CkBAIC03ODIsMTUgKzc2NywxOSBA
QCBYTUxFbGVtZW50SW1wbDo6WE1MRWxlbWVudEltcGwoRG9jdW1lbnRQCiAgICAgICAgIGxvY2Fs
TmFtZS0+cmVtb3ZlKDAsY29sb25wb3MrMSk7CiAgICAgICAgIG1faWQgPSBkb2MtPmRvY3VtZW50
KCktPnRhZ0lkKF9uYW1lc3BhY2VVUkksIGxvY2FsTmFtZSwgZmFsc2UgLyogYWxsb2NhdGUgKi8p
OwogICAgICAgICBsb2NhbE5hbWUtPmRlcmVmKCk7Ci0gICAgICAgIG1fcHJlZml4ID0gX3F1YWxp
ZmllZE5hbWUtPmNvcHkoKTsKLSAgICAgICAgbV9wcmVmaXgtPnJlZigpOwotICAgICAgICBtX3By
ZWZpeC0+dHJ1bmNhdGUoY29sb25wb3MpOworICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IFRo
aXMgaXMgYSB0ZW1wb3Jhcnkgc2l0dWF0aW9uIGZvciBzdGFnZSBvbmUgb2YgdGhlIFF1YWxpZmll
ZE5hbWUgcGF0Y2guICBUaGlzIGlzIGFsc28gYSByZWFsbHkgc3R1cGlkIHdheSB0bworICAgICAg
ICAvLyBoYXZlIHRvIGhhbmRsZSB0aGUgcHJlZml4LiAgV2F5IHRvbyBtdWNoIGNvcHlpbmcuICBX
ZSBzaG91bGQgbWFrZSBzdXJlIHRoZSBYTUwgdG9rZW5pemVyIGhhcyBkb25lIHRoZSBzcGxpdAor
ICAgICAgICAvLyBhbHJlYWR5IGludG8gcHJlZml4IGFuZCBsb2NhbE5hbWUuCisgICAgICAgIERP
TVN0cmluZ0ltcGwqIHByZWZpeCA9IF9xdWFsaWZpZWROYW1lLT5jb3B5KCk7CisgICAgICAgIHBy
ZWZpeC0+cmVmKCk7CisgICAgICAgIHByZWZpeC0+dHJ1bmNhdGUoY29sb25wb3MpOworICAgICAg
ICBtX3RhZ05hbWUgPSBRdWFsaWZpZWROYW1lKHByZWZpeCwgbnVsbEF0b20sIG51bGxBdG9tKTsK
KyAgICAgICAgcHJlZml4LT5kZXJlZigpOwogICAgIH0KLSAgICBlbHNlIHsKKyAgICBlbHNlCiAg
ICAgICAgIC8vIG5vIHByZWZpeAogICAgICAgICBtX2lkID0gZG9jLT5kb2N1bWVudCgpLT50YWdJ
ZChfbmFtZXNwYWNlVVJJLCBfcXVhbGlmaWVkTmFtZSwgZmFsc2UgLyogYWxsb2NhdGUgKi8pOwot
ICAgICAgICBtX3ByZWZpeCA9IDA7Ci0gICAgfQogfQogCiBYTUxFbGVtZW50SW1wbDo6flhNTEVs
ZW1lbnRJbXBsKCkKSW5kZXg6IGtodG1sL3htbC9kb21fZWxlbWVudGltcGwuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC94bWwvZG9tX2VsZW1lbnRpbXBsLmgs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNDEKZGlmZiAtdSAtcCAtcjEuNDEga2h0bWwveG1sL2Rv
bV9lbGVtZW50aW1wbC5oCi0tLSBraHRtbC94bWwvZG9tX2VsZW1lbnRpbXBsLmgJMTIgTWF5IDIw
MDUgMTc6MTE6MjIgLTAwMDAJMS40MQorKysga2h0bWwveG1sL2RvbV9lbGVtZW50aW1wbC5oCTE2
IEp1biAyMDA1IDIzOjAyOjI3IC0wMDAwCkBAIC0yMywxMyArMjMsMTQgQEAKICAqIEJvc3Rvbiwg
TUEgMDIxMTEtMTMwNywgVVNBLgogICoKICAqLwotI2lmbmRlZiBfRE9NX0VMRU1FTlRJbXBsX2hf
Ci0jZGVmaW5lIF9ET01fRUxFTUVOVEltcGxfaF8KKyNpZm5kZWYgX0RPTV9FTEVNRU5USU1QTF9o
XworI2RlZmluZSBfRE9NX0VMRU1FTlRJTVBMX2hfCiAKICNpbmNsdWRlICJkb21fbm9kZWltcGwu
aCIKICNpbmNsdWRlICJ4bWwvZG9tX3N0cmluZ2ltcGwuaCIKICNpbmNsdWRlICJtaXNjL3NoYXJl
ZC5oIgogI2luY2x1ZGUgImNzcy9jc3NfdmFsdWVpbXBsLmgiCisjaW5jbHVkZSAiZG9tX3FuYW1l
LmgiCiAKICNpZiBBUFBMRV9DSEFOR0VTCiAjaWZkZWYgX19PQkpDX18KQEAgLTEyOCw4ICsxMjks
OCBAQCBwdWJsaWM6CiAgICAgLy8gRE9NIG1ldGhvZHMgb3ZlcnJpZGRlbiBmcm9tICBwYXJlbnQg
Y2xhc3NlcwogICAgIHZpcnR1YWwgRE9NU3RyaW5nIG5vZGVOYW1lKCkgY29uc3Q7CiAgICAgdmly
dHVhbCB1bnNpZ25lZCBzaG9ydCBub2RlVHlwZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgRE9NU3Ry
aW5nIHByZWZpeCgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBzZXRQcmVmaXgoY29uc3QgRE9N
U3RyaW5nICZfcHJlZml4LCBpbnQgJmV4Y2VwdGlvbmNvZGUgKTsKKyAgICB2aXJ0dWFsIGNvbnN0
IEF0b21pY1N0cmluZyYgcHJlZml4KCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNldFByZWZp
eChjb25zdCBBdG9taWNTdHJpbmcgJl9wcmVmaXgsIGludCAmZXhjZXB0aW9uY29kZSApOwogCiAg
ICAgdmlydHVhbCBET01TdHJpbmcgbm9kZVZhbHVlKCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lk
IHNldE5vZGVWYWx1ZSggY29uc3QgRE9NU3RyaW5nICYsIGludCAmZXhjZXB0aW9uY29kZSApOwpA
QCAtMTU2LDcgKzE1Nyw3IEBAIGNsYXNzIEVsZW1lbnRJbXBsIDogcHVibGljIENvbnRhaW5lck5v
ZGUKICAgICBmcmllbmQgY2xhc3MgTm9kZUltcGw7CiAgICAgZnJpZW5kIGNsYXNzIGtodG1sOjpD
U1NTdHlsZVNlbGVjdG9yOwogcHVibGljOgotICAgIEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpk
b2MpOworICAgIEVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3Vt
ZW50UHRyICpkb2MpOwogICAgIH5FbGVtZW50SW1wbCgpOwogCiAgICAgLy8gVXNlZCB0byBxdWlj
a2x5IGRldGVybWluZSB3aGV0aGVyIG9yIG5vdCBhbiBlbGVtZW50IGhhcyBhIGdpdmVuIENTUyBj
bGFzcy4KQEAgLTE4NiwxMyArMTg3LDIyIEBAIHB1YmxpYzoKICAgICBTaGFyZWRQdHI8QXR0cklt
cGw+IHNldEF0dHJpYnV0ZU5vZGVOUyhBdHRySW1wbCAqbmV3QXR0ciwgaW50ICZleGNlcHRpb24p
IHsgcmV0dXJuIHNldEF0dHJpYnV0ZU5vZGUobmV3QXR0ciwgZXhjZXB0aW9uKTsgfQogICAgIFNo
YXJlZFB0cjxBdHRySW1wbD4gcmVtb3ZlQXR0cmlidXRlTm9kZShBdHRySW1wbCAqb2xkQXR0ciwg
aW50ICZleGNlcHRpb24pOwogICAgIAotICAgIERPTVN0cmluZyBwcmVmaXgoKSBjb25zdCB7IHJl
dHVybiBtX3ByZWZpeDsgfQotICAgIHZvaWQgc2V0UHJlZml4KGNvbnN0IERPTVN0cmluZyAmX3By
ZWZpeCwgaW50ICZleGNlcHRpb25jb2RlICk7Ci0KICAgICB2aXJ0dWFsIENTU1N0eWxlRGVjbGFy
YXRpb25JbXBsICpzdHlsZSgpOwogCisgICAgdmlydHVhbCBjb25zdCBRdWFsaWZpZWROYW1lJiB0
YWdOYW1lKCkgY29uc3QgeyByZXR1cm4gbV90YWdOYW1lOyB9CisgICAgdmlydHVhbCBib29sIGhh
c1RhZ05hbWUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSkgY29uc3QgeyByZXR1cm4gbV90
YWdOYW1lLm1hdGNoZXModGFnTmFtZSk7IH0KKyAgICAKKyAgICAvLyBBIG1vcmUgbGlnaHR3ZWln
aHQgY2hlY2sgdGhhbiBoYXNUYWdOYW1lLiAgVXNlIHRoaXMgY2hlY2sgd2hlbiB5b3Uga25vdyB0
aGUgbmFtZXNwYWNlcyBvZiB0aGUgdHdvIFF1YWxpZmllZE5hbWVzIG1hdGNoLCBlLmcuLCB0aGF0
IHRoZXkncmUKKyAgICAvLyBib3RoIEhUTUwgbmFtZXMuCisgICAgYm9vbCBoYXNMb2NhbE5hbWUo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSkgY29uc3QgeyByZXR1cm4gbV90YWdOYW1lLmxv
Y2FsTmFtZSgpID09IHRhZ05hbWUubG9jYWxOYW1lKCk7IH0KKyAgICBib29sIGhhc0xvY2FsTmFt
ZShjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSkgY29uc3QgeyByZXR1cm4gbV90YWdOYW1l
LmxvY2FsTmFtZSgpID09IGxvY2FsTmFtZTsgfQorCisgICAgdmlydHVhbCBjb25zdCBBdG9taWNT
dHJpbmcmIGxvY2FsTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFnTmFtZS5sb2NhbE5hbWUoKTsg
fQorICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgoKSBjb25zdCB7IHJldHVy
biBtX3RhZ05hbWUucHJlZml4KCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0UHJlZml4KGNvbnN0
IEF0b21pY1N0cmluZyAmX3ByZWZpeCwgaW50ICZleGNlcHRpb25jb2RlKTsKKyAgICB2aXJ0dWFs
IGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJKCkgY29uc3QgeyByZXR1cm4gbV90YWdO
YW1lLm5hbWVzcGFjZVVSSSgpOyB9CisgICAgCiAgICAgLy8gRE9NIG1ldGhvZHMgb3ZlcnJpZGRl
biBmcm9tICBwYXJlbnQgY2xhc3NlcwotICAgIHZpcnR1YWwgRE9NU3RyaW5nIHRhZ05hbWUoKSBj
b25zdDsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0IG5vZGVUeXBlKCkgY29uc3Q7CiAgICAg
dmlydHVhbCBOb2RlSW1wbCAqY2xvbmVOb2RlICggYm9vbCBkZWVwICkgPSAwOwogICAgIHZpcnR1
YWwgRE9NU3RyaW5nIG5vZGVOYW1lKCkgY29uc3Q7CkBAIC0yNTQsMjkgKzI2NCw3IEBAIHByaXZh
dGU6CiAKIHByb3RlY3RlZDogLy8gbWVtYmVyIHZhcmlhYmxlcwogICAgIG11dGFibGUgTmFtZWRB
dHRyTWFwSW1wbCAqbmFtZWRBdHRyTWFwOwotICAgIERPTVN0cmluZ0ltcGwgKm1fcHJlZml4Owot
fTsKLQotCi1jbGFzcyBYTUxFbGVtZW50SW1wbCA6IHB1YmxpYyBFbGVtZW50SW1wbAotewotCi1w
dWJsaWM6Ci0gICAgWE1MRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgRE9NU3RyaW5nSW1w
bCAqX3RhZ05hbWUpOwotICAgIFhNTEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIERPTVN0
cmluZ0ltcGwgKl9xdWFsaWZpZWROYW1lLCBET01TdHJpbmdJbXBsICpfbmFtZXNwYWNlVVJJKTsK
LSAgICB+WE1MRWxlbWVudEltcGwoKTsKLQotICAgIC8vIERPTSBtZXRob2RzIG92ZXJyaWRkZW4g
ZnJvbSAgcGFyZW50IGNsYXNzZXMKLSAgICB2aXJ0dWFsIERPTVN0cmluZyBuYW1lc3BhY2VVUkko
KSBjb25zdDsKLSAgICB2aXJ0dWFsIERPTVN0cmluZyBsb2NhbE5hbWUoKSBjb25zdDsKLSAgICB2
aXJ0dWFsIE5vZGVJbXBsICpjbG9uZU5vZGUgKCBib29sIGRlZXAgKTsKLQotICAgIC8vIE90aGVy
IG1ldGhvZHMgKG5vdCBwYXJ0IG9mIERPTSkKLSAgICB2aXJ0dWFsIGJvb2wgaXNYTUxFbGVtZW50
Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Qg
eyByZXR1cm4gbV9pZDsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgSWQgbV9pZDsKKyAgICBRdWFsaWZp
ZWROYW1lIG1fdGFnTmFtZTsKIH07CiAKIC8vIHRoZSBtYXAgb2YgYXR0cmlidXRlcyBvZiBhbiBl
bGVtZW50CkBAIC00MTQsNyArNDAyLDcgQEAgcHJpdmF0ZToKIGNsYXNzIFN0eWxlZEVsZW1lbnRJ
bXBsIDogcHVibGljIEVsZW1lbnRJbXBsCiB7CiBwdWJsaWM6Ci0gICAgU3R5bGVkRWxlbWVudElt
cGwoRG9jdW1lbnRQdHIgKmRvYyk7CisgICAgU3R5bGVkRWxlbWVudEltcGwoY29uc3QgUXVhbGlm
aWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnRQdHIgKmRvYyk7CiAgICAgdmlydHVhbCB+U3R5bGVk
RWxlbWVudEltcGwoKTsKIAogICAgIHZpcnR1YWwgYm9vbCBpc1N0eWxlZEVsZW1lbnQoKSBjb25z
dCB7IHJldHVybiB0cnVlOyB9CkluZGV4OiBraHRtbC94bWwvZG9tX25vZGVpbXBsLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC94bWwvZG9tX25vZGVpbXBs
LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNTIKZGlmZiAtdSAtcCAtcjEuMTUyIGtodG1s
L3htbC9kb21fbm9kZWltcGwuY3BwCi0tLSBraHRtbC94bWwvZG9tX25vZGVpbXBsLmNwcAkzMSBN
YXkgMjAwNSAwMToyMDo0NiAtMDAwMAkxLjE1MgorKysga2h0bWwveG1sL2RvbV9ub2RlaW1wbC5j
cHAJMTYgSnVuIDIwMDUgMjM6MDI6MjkgLTAwMDAKQEAgLTE1NCw3ICsxNTQsNyBAQCBOb2RlSW1w
bCAqTm9kZUltcGw6Omxhc3RDaGlsZCgpIGNvbnN0CiAgIHJldHVybiAwOwogfQogCi1Ob2RlSW1w
bCAqTm9kZUltcGw6Omxhc3REZXNjZW5kZW50KCkgY29uc3QKK05vZGVJbXBsICpOb2RlSW1wbDo6
bGFzdERlc2NlbmRhbnQoKSBjb25zdAogewogICAgIE5vZGVJbXBsICpuID0gY29uc3RfY2FzdDxO
b2RlSW1wbCAqPih0aGlzKTsKICAgICB3aGlsZSAobiAmJiBuLT5sYXN0Q2hpbGQoKSkKQEAgLTIz
OSwxMyArMjM5LDEzIEBAIHZvaWQgTm9kZUltcGw6Om5vcm1hbGl6ZSAoKQogICAgIH0KIH0KIAot
RE9NU3RyaW5nIE5vZGVJbXBsOjpwcmVmaXgoKSBjb25zdAorY29uc3QgQXRvbWljU3RyaW5nJiBO
b2RlSW1wbDo6cHJlZml4KCkgY29uc3QKIHsKICAgICAvLyBGb3Igbm9kZXMgb3RoZXIgdGhhbiBl
bGVtZW50cyBhbmQgYXR0cmlidXRlcywgdGhlIHByZWZpeCBpcyBhbHdheXMgbnVsbAotICAgIHJl
dHVybiBET01TdHJpbmcoKTsKKyAgICByZXR1cm4gbnVsbEF0b207CiB9CiAKLXZvaWQgTm9kZUlt
cGw6OnNldFByZWZpeChjb25zdCBET01TdHJpbmcgJi8qX3ByZWZpeCovLCBpbnQgJmV4Y2VwdGlv
bmNvZGUgKQordm9pZCBOb2RlSW1wbDo6c2V0UHJlZml4KGNvbnN0IEF0b21pY1N0cmluZyAmLypf
cHJlZml4Ki8sIGludCAmZXhjZXB0aW9uY29kZSApCiB7CiAgICAgLy8gVGhlIHNwZWMgc2F5cyB0
aGF0IGZvciBub2RlcyBvdGhlciB0aGFuIGVsZW1lbnRzIGFuZCBhdHRyaWJ1dGVzLCBwcmVmaXgg
aXMgYWx3YXlzIG51bGwuCiAgICAgLy8gSXQgZG9lcyBub3Qgc2F5IHdoYXQgdG8gZG8gd2hlbiB0
aGUgdXNlciB0cmllcyB0byBzZXQgdGhlIHByZWZpeCBvbiBhbm90aGVyIHR5cGUgb2YKQEAgLTEw
MDYsMzkgKzEwMDYsMjcgQEAgTm9kZUltcGwgKk5vZGVJbXBsOjp0cmF2ZXJzZVByZXZpb3VzTm9k
ZQogICAgIHJldHVybiAwOwogfQogCi12b2lkIE5vZGVJbXBsOjpjaGVja1NldFByZWZpeChjb25z
dCBET01TdHJpbmcgJl9wcmVmaXgsIGludCAmZXhjZXB0aW9uY29kZSkKK3ZvaWQgTm9kZUltcGw6
OmNoZWNrU2V0UHJlZml4KGNvbnN0IEF0b21pY1N0cmluZyAmX3ByZWZpeCwgaW50ICZleGNlcHRp
b25jb2RlKQogewogICAgIC8vIFBlcmZvcm0gZXJyb3IgY2hlY2tpbmcgYXMgcmVxdWlyZWQgYnkg
c3BlYyBmb3Igc2V0dGluZyBOb2RlLnByZWZpeC4gVXNlZCBieQogICAgIC8vIEVsZW1lbnRJbXBs
OjpzZXRQcmVmaXgoKSBhbmQgQXR0ckltcGw6OnNldFByZWZpeCgpCiAKLSNpZiAwCi0gICAgLy8g
RklYTUU6IEFkZCB0aGlzIGNoZWNrIChidXQgbm90IGluIGEgd2F5IHRoYXQgZGVwZW5kcyBvbiB0
aGUgQysrIERPTSEpCi0gICAgLy8gSU5WQUxJRF9DSEFSQUNURVJfRVJSOiBSYWlzZWQgaWYgdGhl
IHNwZWNpZmllZCBwcmVmaXggY29udGFpbnMgYW4gaWxsZWdhbCBjaGFyYWN0ZXIuCi0gICAgaWYg
KCFFbGVtZW50OjpraHRtbFZhbGlkUHJlZml4KF9wcmVmaXgpKSB7Ci0gICAgICAgIGV4Y2VwdGlv
bmNvZGUgPSBET01FeGNlcHRpb246OklOVkFMSURfQ0hBUkFDVEVSX0VSUjsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSNlbmRpZgotCisgICAgLy8gRklYTUU6IEltcGxlbWVudCBzdXBwb3J0IGZv
ciBJTlZBTElEX0NIQVJBQ1RFUl9FUlI6IFJhaXNlZCBpZiB0aGUgc3BlY2lmaWVkIHByZWZpeCBj
b250YWlucyBhbiBpbGxlZ2FsIGNoYXJhY3Rlci4KKyAgICAKICAgICAvLyBOT19NT0RJRklDQVRJ
T05fQUxMT1dFRF9FUlI6IFJhaXNlZCBpZiB0aGlzIG5vZGUgaXMgcmVhZG9ubHkuCiAgICAgaWYg
KGlzUmVhZE9ubHkoKSkgewogICAgICAgICBleGNlcHRpb25jb2RlID0gRE9NRXhjZXB0aW9uOjpO
T19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICAvLyBOQU1FU1BBQ0VfRVJSOiAtIFJhaXNlZCBpZiB0aGUgc3BlY2lmaWVkIHByZWZpeCBpcyBt
YWxmb3JtZWQKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IE5BTUVTUEFDRV9FUlI6IC0gUmFpc2Vk
IGlmIHRoZSBzcGVjaWZpZWQgcHJlZml4IGlzIG1hbGZvcm1lZAogICAgIC8vIC0gaWYgdGhlIG5h
bWVzcGFjZVVSSSBvZiB0aGlzIG5vZGUgaXMgbnVsbCwKICAgICAvLyAtIGlmIHRoZSBzcGVjaWZp
ZWQgcHJlZml4IGlzICJ4bWwiIGFuZCB0aGUgbmFtZXNwYWNlVVJJIG9mIHRoaXMgbm9kZSBpcyBk
aWZmZXJlbnQgZnJvbQogICAgIC8vICAgImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVz
cGFjZSIsCiAgICAgLy8gLSBpZiB0aGlzIG5vZGUgaXMgYW4gYXR0cmlidXRlIGFuZCB0aGUgc3Bl
Y2lmaWVkIHByZWZpeCBpcyAieG1sbnMiIGFuZAogICAgIC8vICAgdGhlIG5hbWVzcGFjZVVSSSBv
ZiB0aGlzIG5vZGUgaXMgZGlmZmVyZW50IGZyb20gImh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1s
bnMvIiwKICAgICAvLyAtIG9yIGlmIHRoaXMgbm9kZSBpcyBhbiBhdHRyaWJ1dGUgYW5kIHRoZSBx
dWFsaWZpZWROYW1lIG9mIHRoaXMgbm9kZSBpcyAieG1sbnMiIFtOYW1lc3BhY2VzXS4KLSAgICBp
ZiAoCi0jaWYgMAotICAgICAgICAvLyBGSVhNRTogQWRkIHRoaXMgY2hlY2sgKGJ1dCBub3QgaW4g
YSB3YXkgdGhhdCBkZXBlbmRzIG9uIHRoZSBDKysgRE9NISkKLSAgICAgICAgRWxlbWVudDo6a2h0
bWxNYWxmb3JtZWRQcmVmaXgoX3ByZWZpeCkgfHwKLSNlbmRpZgotICAgICAgICAobmFtZXNwYWNl
UGFydChpZCgpKSA9PSBub05hbWVzcGFjZSAmJiBpZCgpID4gSURfTEFTVF9UQUcpIHx8CisgICAg
aWYgKChuYW1lc3BhY2VQYXJ0KGlkKCkpID09IG5vTmFtZXNwYWNlICYmIGlkKCkgPiBJRF9MQVNU
X1RBRykgfHwKICAgICAgICAgKF9wcmVmaXggPT0gInhtbCIgJiYgRE9NU3RyaW5nKGdldERvY3Vt
ZW50KCktPm5hbWVzcGFjZVVSSShpZCgpKSkgIT0gImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4
L25hbWVzcGFjZSIpKSB7CiAgICAgICAgIGV4Y2VwdGlvbmNvZGUgPSBET01FeGNlcHRpb246Ok5B
TUVTUEFDRV9FUlI7CiAgICAgICAgIHJldHVybjsKSW5kZXg6IGtodG1sL3htbC9kb21fbm9kZWlt
cGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC94bWwvZG9t
X25vZGVpbXBsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuODUKZGlmZiAtdSAtcCAtcjEuODUg
a2h0bWwveG1sL2RvbV9ub2RlaW1wbC5oCi0tLSBraHRtbC94bWwvZG9tX25vZGVpbXBsLmgJMTIg
TWF5IDIwMDUgMDE6MTY6MDEgLTAwMDAJMS44NQorKysga2h0bWwveG1sL2RvbV9ub2RlaW1wbC5o
CTE2IEp1biAyMDA1IDIzOjAyOjMwIC0wMDAwCkBAIC01OSw2ICs1OSw3IEBAIGNsYXNzIEV2ZW50
SW1wbDsKIGNsYXNzIEV2ZW50TGlzdGVuZXI7CiBjbGFzcyBOb2RlTGlzdEltcGw7CiBjbGFzcyBO
YW1lZEF0dHJNYXBJbXBsOworY2xhc3MgUXVhbGlmaWVkTmFtZTsKIGNsYXNzIFJlZ2lzdGVyZWRF
dmVudExpc3RlbmVyOwogCiAvLyBUaGUgbmFtZXNwYWNlIHVzZWQgZm9yIFhIVE1MIGVsZW1lbnRz
CkBAIC0xMDIsNiArMTAzLDcgQEAgcHVibGljOgogICAgIE1BSU5fVEhSRUFEX0FMTE9DQVRFRDsK
IAogICAgIC8vIERPTSBtZXRob2RzICYgYXR0cmlidXRlcyBmb3IgTm9kZQorICAgIHZpcnR1YWwg
Ym9vbCBoYXNUYWdOYW1lKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBET01TdHJpbmcgbm9kZU5hbWUoKSBjb25zdCA9IDA7
CiAgICAgdmlydHVhbCBET01TdHJpbmcgbm9kZVZhbHVlKCkgY29uc3Q7CiAgICAgdmlydHVhbCB2
b2lkIHNldE5vZGVWYWx1ZSggY29uc3QgRE9NU3RyaW5nICZfbm9kZVZhbHVlLCBpbnQgJmV4Y2Vw
dGlvbmNvZGUgKTsKQEAgLTEyMiwxNCArMTI0LDE0IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZv
aWQgcmVtb3ZlKGludCAmZXhjZXB0aW9uY29kZSk7CiAgICAgdmlydHVhbCBib29sIGhhc0NoaWxk
Tm9kZXMgKCAgKSBjb25zdDsKICAgICB2aXJ0dWFsIE5vZGVJbXBsICpjbG9uZU5vZGUgKCBib29s
IGRlZXAgKSA9IDA7Ci0gICAgdmlydHVhbCBET01TdHJpbmcgbG9jYWxOYW1lKCkgY29uc3Q7Ci0g
ICAgdmlydHVhbCBET01TdHJpbmcgbmFtZXNwYWNlVVJJKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBE
T01TdHJpbmcgcHJlZml4KCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHNldFByZWZpeChjb25z
dCBET01TdHJpbmcgJl9wcmVmaXgsIGludCAmZXhjZXB0aW9uY29kZSApOworICAgIHZpcnR1YWwg
Y29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGNvbnN0
IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJKCkgY29uc3Q7CisgICAgdmlydHVhbCBjb25zdCBB
dG9taWNTdHJpbmcmIHByZWZpeCgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRQcmVmaXgo
Y29uc3QgQXRvbWljU3RyaW5nICZfcHJlZml4LCBpbnQgJmV4Y2VwdGlvbmNvZGUpOwogICAgIHZv
aWQgbm9ybWFsaXplICgpOwogICAgIHN0YXRpYyBib29sIGlzU3VwcG9ydGVkKGNvbnN0IERPTVN0
cmluZyAmZmVhdHVyZSwgY29uc3QgRE9NU3RyaW5nICZ2ZXJzaW9uKTsKIAotICAgIE5vZGVJbXBs
ICpsYXN0RGVzY2VuZGVudCgpIGNvbnN0OworICAgIE5vZGVJbXBsICpsYXN0RGVzY2VuZGFudCgp
IGNvbnN0OwogCiAgICAgLy8gT3RoZXIgbWV0aG9kcyAobm90IHBhcnQgb2YgRE9NKQogICAgIHZp
cnR1YWwgYm9vbCBpc0VsZW1lbnROb2RlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTEz
Nyw2ICsxMzksNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlzU3R5bGVkRWxlbWVudCgp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzQXR0cmlidXRlTm9k
ZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzVGV4dE5vZGUo
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0NvbW1lbnROb2Rl
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNEb2N1bWVudE5v
ZGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1hNTEVsZW1l
bnROb2RlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICBib29sIGlzQmxvY2tGbG93KCkg
Y29uc3Q7CkBAIC0xOTgsMjUgKzIwMSw4IEBAIHB1YmxpYzoKICAgICAvLyB1bnRpbCB0aGV5IGtu
b3cgYWxsIG9mIHRoZWlyIG5lc3RlZCA8cGFyYW0+cy4gWzM2MDMxOTEsIDQwNDA4NDhdCiAgICAg
dmlydHVhbCB2b2lkIGNsb3NlUmVuZGVyZXIoKSB7IH0KIAotICAgIHR5cGVkZWYgUV9VSU5UMzIg
SWQ7Ci0gICAgLy8gaWQoKSBpcyB1c2VkIHRvIGVhc2lseSBhbmQgZXhhY3RseSBpZGVudGlmeSBh
IG5vZGUuIEl0Ci0gICAgLy8gaXMgb3B0aW1pemVkIGZvciBxdWljayBjb21wYXJpc29uIGFuZCBs
b3cgbWVtb3J5IGNvbnN1bXB0aW9uLgotICAgIC8vIGl0cyB2YWx1ZSBkZXBlbmRzIG9uIHRoZSBv
d25lciBkb2N1bWVudCBvZiB0aGUgbm9kZSBhbmQgaXMKLSAgICAvLyBjYXRlZ29yaXplZCBpbiB0
aGUgZm9sbG93aW5nIHdheToKLSAgICAvLyAxLi5JRF9MQVNUX1RBRzogdGhlIG5vZGUgaW5oZXJp
dHMgSFRNTEVsZW1lbnRJbXBsIGFuZCBpcwotICAgIC8vICAgICAgICAgICAgICAgICBwYXJ0IG9m
IHRoZSBIVE1MIG5hbWVzcGFjZS4KLSAgICAvLyAgICAgICAgICAgICAgICAgVGhlIEhUTUwgbmFt
ZXNwYWNlIGlzIGVpdGhlciB0aGUgZ2xvYmFsCi0gICAgLy8gICAgICAgICAgICAgICAgIG9uZSAo
bm8gbmFtZXNwYWNlKSBvciB0aGUgWEhUTUwgbmFtZXNwYWNlCi0gICAgLy8gICAgICAgICAgICAg
ICAgIGRlcGVuZGluZyBvbiB0aGUgb3duZXIgZG9jdW1lbnQncyBkb2N0eXBlCi0gICAgLy8gSURf
TEFTVF9UQUcrMS4uMHhmZmZmOiBub24tSFRNTCBlbGVtZW50cyBpbiB0aGUgZ2xvYmFsIG5hbWVz
cGFjZQotICAgIC8vIG90aGVycyAgICAgICBub24tSFRNTCBlbGVtZW50cyBpbiBhIG5hbWVzcGFj
ZS4KLSAgICAvLyAgICAgICAgICAgICAgICAgdGhlIHVwcGVyIDE2IGJpdCBpZGVudGlmeSB0aGUg
bmFtZXNwYWNlCi0gICAgLy8gICAgICAgICAgICAgICAgIHRoZSBsb3dlciAxNiBiaXQgaWRlbnRp
ZnkgdGhlIGxvY2FsIHBhcnQgb2YgdGhlCi0gICAgLy8gICAgICAgICAgICAgICAgIHF1YWxpZmll
ZCBlbGVtZW50IG5hbWUuCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0IHsgcmV0dXJuIDA7IH07
Ci0jaWYgQVBQTEVfQ0hBTkdFUwotICAgIElkIGlkZW50aWZpZXIoKSBjb25zdDsKLSNlbmRpZgor
ICAgIHR5cGVkZWYgUV9VSU5UMzIgSWQ7IC8vIEZJWE1FOiBZYW5rIHRoaXMgb25jZSBhdHRyaWJ1
dGVzIGFyZSBhbHNvIHN3aXRjaGVkIG92ZXIuCisKICAgICBlbnVtIE1vdXNlRXZlbnRUeXBlIHsK
ICAgICAgICAgTW91c2VQcmVzcywKICAgICAgICAgTW91c2VSZWxlYXNlLApAQCAtMjc4LDggKzI2
NCw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNLZXlib2FyZEZvY3VzYWJsZSgpIGNv
bnN0OwogICAgIHZpcnR1YWwgYm9vbCBpc01vdXNlRm9jdXNhYmxlKCkgY29uc3Q7CiAgICAgCi0g
ICAgdmlydHVhbCBib29sIGlzSW5saW5lKCkgY29uc3Q7Ci0gICAgCiAgICAgdmlydHVhbCBib29s
IGlzQ29udGVudEVkaXRhYmxlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBRUmVjdCBnZXRSZWN0KCkg
Y29uc3Q7CiAKQEAgLTM2OSw3ICszNTMsNyBAQCBwdWJsaWM6CiAgICAga2h0bWw6OlJlbmRlck9i
amVjdCAqcHJldmlvdXNSZW5kZXJlcigpOwogICAgIHZvaWQgc2V0UmVuZGVyZXIoa2h0bWw6OlJl
bmRlck9iamVjdCogcmVuZGVyZXIpIHsgbV9yZW5kZXIgPSByZW5kZXJlcjsgfQogICAgIAotICAg
IHZvaWQgY2hlY2tTZXRQcmVmaXgoY29uc3QgRE9NU3RyaW5nICZfcHJlZml4LCBpbnQgJmV4Y2Vw
dGlvbmNvZGUpOworICAgIHZvaWQgY2hlY2tTZXRQcmVmaXgoY29uc3QgQXRvbWljU3RyaW5nICZf
cHJlZml4LCBpbnQgJmV4Y2VwdGlvbmNvZGUpOwogICAgIHZvaWQgY2hlY2tBZGRDaGlsZChOb2Rl
SW1wbCAqbmV3Q2hpbGQsIGludCAmZXhjZXB0aW9uY29kZSk7CiAgICAgYm9vbCBpc0FuY2VzdG9y
KGNvbnN0IE5vZGVJbXBsICopIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBjaGlsZEFsbG93ZWQo
IE5vZGVJbXBsICpuZXdDaGlsZCApOwpJbmRleDoga2h0bWwveG1sL2RvbV90ZXh0aW1wbC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3htbC9kb21fdGV4dGlt
cGwuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNgpkaWZmIC11IC1wIC1yMS4xNiBraHRtbC94
bWwvZG9tX3RleHRpbXBsLmgKLS0tIGtodG1sL3htbC9kb21fdGV4dGltcGwuaAkxMCBNYXkgMjAw
NSAyMTo1OToxNSAtMDAwMAkxLjE2CisrKyBraHRtbC94bWwvZG9tX3RleHRpbXBsLmgJMTYgSnVu
IDIwMDUgMjM6MDI6MzAgLTAwMDAKQEAgLTEwMCw4ICsxMDAsNyBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCBOb2RlSW1wbCAqY2xvbmVOb2RlKGJvb2wgZGVlcCk7CiAKICAgICAvLyBPdGhlciBtZXRo
b2RzIChub3QgcGFydCBvZiBET00pCi0KLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CisgICAg
dmlydHVhbCBib29sIGlzQ29tbWVudE5vZGUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAg
dmlydHVhbCBib29sIGNoaWxkVHlwZUFsbG93ZWQoIHVuc2lnbmVkIHNob3J0IHR5cGUgKTsKIAog
ICAgIHZpcnR1YWwgRE9NU3RyaW5nIHRvU3RyaW5nKCkgY29uc3Q7CkBAIC0xMjgsNyArMTI3LDYg
QEAgcHVibGljOgogICAgIC8vIE90aGVyIG1ldGhvZHMgKG5vdCBwYXJ0IG9mIERPTSkKIAogICAg
IHZpcnR1YWwgYm9vbCBpc1RleHROb2RlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZp
cnR1YWwgSWQgaWQoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoKCk7CiAgICAgdmly
dHVhbCBib29sIHJlbmRlcmVySXNOZWVkZWQoa2h0bWw6OlJlbmRlclN0eWxlICopOwogICAgIHZp
cnR1YWwga2h0bWw6OlJlbmRlck9iamVjdCAqY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEgKiwg
a2h0bWw6OlJlbmRlclN0eWxlICopOwpJbmRleDoga3dxL0RPTS5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3EvRE9NLm1tLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjM2CmRpZmYgLXUgLXAgLXIxLjM2IGt3cS9ET00ubW0KLS0tIGt3cS9ET00ubW0JMTkgTWF5IDIw
MDUgMTg6MzI6MjcgLTAwMDAJMS4zNgorKysga3dxL0RPTS5tbQkxNiBKdW4gMjAwNSAyMzowMjoz
MiAtMDAwMApAQCAtMzM4LDcgKzMzOCw4IEBAIHVzaW5nIGtodG1sOjpTaGFyZWRQdHI7CiAgICAg
QVNTRVJUKHByZWZpeCk7CiAKICAgICBpbnQgZXhjZXB0aW9uQ29kZSA9IDA7Ci0gICAgW3NlbGYg
X25vZGVJbXBsXS0+c2V0UHJlZml4KHByZWZpeCwgZXhjZXB0aW9uQ29kZSk7CisgICAgRE9NU3Ry
aW5nIHByZWZpeFN0cihwcmVmaXgpOworICAgIFtzZWxmIF9ub2RlSW1wbF0tPnNldFByZWZpeChw
cmVmaXhTdHIuaW1wbGVtZW50YXRpb24oKSwgZXhjZXB0aW9uQ29kZSk7CiAgICAgcmFpc2VPbkRP
TUVycm9yKGV4Y2VwdGlvbkNvZGUpOwogfQogCkluZGV4OiBrd3EvS1dRRE9NTm9kZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZToga3dxL0tXUURPTU5vZGUuY3BwCmRpZmYgLU4ga3dxL0tXUURPTU5v
ZGUuY3BwCi0tLSBrd3EvS1dRRE9NTm9kZS5jcHAJMTEgSnVsIDIwMDMgMTY6MjQ6MzcgLTAwMDAJ
MS45CisrKyAvZGV2L251bGwJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMApAQCAtMSwzNCArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDAzIEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJLV1FET01Ob2RlLmgiCi0KLXVzaW5n
IERPTTo6Tm9kZUltcGw7Ci0KLS8vIFRoaXMgbmVlZHMgdG8gYmUgaW4gYSBDKysgc291cmNlIGZp
bGUgYmVjYXVzZSBpZCBpcyBhIHJlc2VydmVkIHdvcmQgaW4gT2JqZWN0aXZlLUMrKy4KLU5vZGVJ
bXBsOjpJZCBpZEZyb21Ob2RlKE5vZGVJbXBsICpub2RlKQotewotICAgIHJldHVybiBub2RlLT5p
ZCgpOwotfQpJbmRleDoga3dxL0tXUURPTU5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiBrd3Ev
S1dRRE9NTm9kZS5oCmRpZmYgLU4ga3dxL0tXUURPTU5vZGUuaAotLS0ga3dxL0tXUURPTU5vZGUu
aAkxMSBKdWwgMjAwMyAxNjoyNDozNyAtMDAwMAkxLjUKKysrIC9kZXYvbnVsbAkxIEphbiAxOTcw
IDAwOjAwOjAwIC0wMDAwCkBAIC0xLDI4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDMgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lu
Y2x1ZGUgImRvbV9ub2RlaW1wbC5oIgotCi1ET006Ok5vZGVJbXBsOjpJZCBpZEZyb21Ob2RlKERP
TTo6Tm9kZUltcGwgKik7CkluZGV4OiBrd3EvS1dRS0hUTUxQYXJ0Lm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9LV1FLSFRNTFBhcnQubW0sdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuNjQzCmRpZmYgLXUgLXAgLXIxLjY0MyBrd3EvS1dRS0hUTUxQYXJ0Lm1tCi0t
LSBrd3EvS1dRS0hUTUxQYXJ0Lm1tCTI2IE1heSAyMDA1IDIwOjMwOjEyIC0wMDAwCTEuNjQzCisr
KyBrd3EvS1dRS0hUTUxQYXJ0Lm1tCTE2IEp1biAyMDA1IDIzOjAyOjM5IC0wMDAwCkBAIC0yOCw3
ICsyOCw2IEBACiAjaW1wb3J0ICJET01JbnRlcm5hbC5oIgogCiAjaW1wb3J0ICJLV1FDbGlwYm9h
cmQuaCIKLSNpbXBvcnQgIktXUURPTU5vZGUuaCIKICNpbXBvcnQgIktXUUR1bW15Vmlldy5oIgog
I2ltcG9ydCAiS1dRRWRpdENvbW1hbmQuaCIKICNpbXBvcnQgIktXUUV4Y2VwdGlvbnMuaCIKQEAg
LTEwMCw2ICs5OSw3IEBAIHVzaW5nIERPTTo6SFRNTEVsZW1lbnRJbXBsOwogdXNpbmcgRE9NOjpI
VE1MRm9ybUVsZW1lbnRJbXBsOwogdXNpbmcgRE9NOjpIVE1MRnJhbWVFbGVtZW50SW1wbDsKIHVz
aW5nIERPTTo6SFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGw7Cit1c2luZyBET006OkhUTUxOYW1l
czsKIHVzaW5nIERPTTo6SFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsOwogdXNpbmcgRE9NOjpOb2Rl
OwogdXNpbmcgRE9NOjpOb2RlSW1wbDsKQEAgLTM2MSwxMyArMzYxLDEyIEBAIHN0YXRpYyBIVE1M
Rm9ybUVsZW1lbnRJbXBsICpzY2FuRm9yRm9ybSgKIHsKICAgICBOb2RlSW1wbCAqbjsKICAgICBm
b3IgKG4gPSBzdGFydDsgbjsgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUoKSkgewotICAgICAgICBO
b2RlSW1wbDo6SWQgbm9kZUlEID0gaWRGcm9tTm9kZShuKTsKLSAgICAgICAgaWYgKG5vZGVJRCA9
PSBJRF9GT1JNKSB7CisgICAgICAgIGlmIChuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Zm9ybSgp
KSkgewogICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudEltcGwg
Kj4obik7CiAgICAgICAgIH0gZWxzZSBpZiAobi0+aXNIVE1MRWxlbWVudCgpCiAgICAgICAgICAg
ICAgICAgICAgJiYgc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KG4pLT5pc0dlbmVyaWNG
b3JtRWxlbWVudCgpKSB7CiAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTEdlbmVy
aWNGb3JtRWxlbWVudEltcGwgKj4obiktPmZvcm0oKTsKLSAgICAgICAgfSBlbHNlIGlmIChub2Rl
SUQgPT0gSURfRlJBTUUgfHwgbm9kZUlEID09IElEX0lGUkFNRSkgeworICAgICAgICB9IGVsc2Ug
aWYgKG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpmcmFtZSgpKSB8fCBuLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6aWZyYW1lKCkpKSB7CiAgICAgICAgICAgICBOb2RlSW1wbCAqY2hpbGREb2MgPSBz
dGF0aWNfY2FzdDxIVE1MRnJhbWVFbGVtZW50SW1wbCAqPihuKS0+Y29udGVudERvY3VtZW50KCk7
CiAgICAgICAgICAgICBIVE1MRm9ybUVsZW1lbnRJbXBsICpmcmFtZVJlc3VsdCA9IHNjYW5Gb3JG
b3JtKGNoaWxkRG9jKTsKICAgICAgICAgICAgIGlmIChmcmFtZVJlc3VsdCkgewpAQCAtMzkwLDcg
KzM4OSw3IEBAIEhUTUxGb3JtRWxlbWVudEltcGwgKktXUUtIVE1MUGFydDo6Y3VycmUKICAgICAv
LyB0cnkgd2Fsa2luZyB1cCB0aGUgbm9kZSB0cmVlIHRvIGZpbmQgYSBmb3JtIGVsZW1lbnQKICAg
ICBOb2RlSW1wbCAqbjsKICAgICBmb3IgKG4gPSBzdGFydDsgbjsgbiA9IG4tPnBhcmVudE5vZGUo
KSkgewotICAgICAgICBpZiAoaWRGcm9tTm9kZShuKSA9PSBJRF9GT1JNKSB7CisgICAgICAgIGlm
IChuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Zm9ybSgpKSkgewogICAgICAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudEltcGwgKj4obik7CiAgICAgICAgIH0gZWxzZSBp
ZiAobi0+aXNIVE1MRWxlbWVudCgpCiAgICAgICAgICAgICAgICAgICAgJiYgc3RhdGljX2Nhc3Q8
SFRNTEVsZW1lbnRJbXBsICo+KG4pLT5pc0dlbmVyaWNGb3JtRWxlbWVudCgpKSB7CkBAIC00ODks
OCArNDg4LDcgQEAgTlNTdHJpbmcgKktXUUtIVE1MUGFydDo6c2VhcmNoRm9yTGFiZWxzQQogICAg
ICAgICBpZiAoYWJvdmVDZWxsKSB7CiAgICAgICAgICAgICAvLyBzZWFyY2ggd2l0aGluIHRoZSBh
Ym92ZSBjZWxsIHdlIGZvdW5kIGZvciBhIG1hdGNoCiAgICAgICAgICAgICBmb3IgKE5vZGVJbXBs
ICpuID0gYWJvdmVDZWxsLT5maXJzdENoaWxkKCk7IG47IG4gPSBuLT50cmF2ZXJzZU5leHROb2Rl
KGFib3ZlQ2VsbCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoaWRGcm9tTm9kZShuKSA9PSBJRF9U
RVhUCi0gICAgICAgICAgICAgICAgICAgICYmIG4tPnJlbmRlcmVyKCkgJiYgbi0+cmVuZGVyZXIo
KS0+c3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUpCisgICAgICAgICAgICAgICAgaWYg
KG4tPmlzVGV4dE5vZGUoKSAmJiBuLT5yZW5kZXJlcigpICYmIG4tPnJlbmRlcmVyKCktPnN0eWxl
KCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICAgICAgLy8gRm9yIGVhY2ggdGV4dCBjaHVuaywgcnVuIHRoZSByZWdleHAKICAgICAg
ICAgICAgICAgICAgICAgUVN0cmluZyBub2RlU3RyaW5nID0gbi0+bm9kZVZhbHVlKCkuc3RyaW5n
KCk7CkBAIC01MjUsMjMgKzUyMywyMSBAQCBOU1N0cmluZyAqS1dRS0hUTUxQYXJ0OjpzZWFyY2hG
b3JMYWJlbHNCCiAgICAgICAgICBuICYmIGxlbmd0aFNlYXJjaGVkIDwgY2hhcnNTZWFyY2hlZFRo
cmVzaG9sZDsKICAgICAgICAgIG4gPSBuLT50cmF2ZXJzZVByZXZpb3VzTm9kZSgpKQogICAgIHsK
LSAgICAgICAgTm9kZUltcGw6OklkIG5vZGVJRCA9IGlkRnJvbU5vZGUobik7Ci0gICAgICAgIGlm
IChub2RlSUQgPT0gSURfRk9STQorICAgICAgICBpZiAobi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
OmZvcm0oKSkKICAgICAgICAgICAgIHx8IChuLT5pc0hUTUxFbGVtZW50KCkKICAgICAgICAgICAg
ICAgICAmJiBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwgKj4obiktPmlzR2VuZXJpY0Zvcm1F
bGVtZW50KCkpKQogICAgICAgICB7CiAgICAgICAgICAgICAvLyBXZSBoaXQgYW5vdGhlciBmb3Jt
IGVsZW1lbnQgb3IgdGhlIHN0YXJ0IG9mIHRoZSBmb3JtIC0gYmFpbCBvdXQKICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9IGVsc2UgaWYgKG5vZGVJRCA9PSBJRF9URCAmJiAhc3RhcnRpbmdU
YWJsZUNlbGwpIHsKKyAgICAgICAgfSBlbHNlIGlmIChuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
dGQoKSkgJiYgIXN0YXJ0aW5nVGFibGVDZWxsKSB7CiAgICAgICAgICAgICBzdGFydGluZ1RhYmxl
Q2VsbCA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbCAqPihuKTsKLSAgICAg
ICAgfSBlbHNlIGlmIChub2RlSUQgPT0gSURfVFIgJiYgc3RhcnRpbmdUYWJsZUNlbGwpIHsKKyAg
ICAgICAgfSBlbHNlIGlmIChuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dHIoKSkgJiYgc3RhcnRp
bmdUYWJsZUNlbGwpIHsKICAgICAgICAgICAgIE5TU3RyaW5nICpyZXN1bHQgPSBzZWFyY2hGb3JM
YWJlbHNBYm92ZUNlbGwocmVnRXhwLCBzdGFydGluZ1RhYmxlQ2VsbCk7CiAgICAgICAgICAgICBp
ZiAocmVzdWx0KSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIHNlYXJjaGVkQ2VsbEFib3ZlID0gdHJ1ZTsKLSAgICAgICAgfSBlbHNl
IGlmIChub2RlSUQgPT0gSURfVEVYVAotICAgICAgICAgICAgICAgICAgICYmIG4tPnJlbmRlcmVy
KCkgJiYgbi0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUpCisg
ICAgICAgIH0gZWxzZSBpZiAobi0+aXNUZXh0Tm9kZSgpICYmIG4tPnJlbmRlcmVyKCkgJiYgbi0+
cmVuZGVyZXIoKS0+c3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIC8vIEZvciBlYWNoIHRleHQgY2h1bmssIHJ1biB0aGUgcmVnZXhwCiAgICAg
ICAgICAgICBRU3RyaW5nIG5vZGVTdHJpbmcgPSBuLT5ub2RlVmFsdWUoKS5zdHJpbmcoKTsKQEAg
LTI4NDgsMTQgKzI4NDQsMTAgQEAgTlNGaWxlV3JhcHBlciAqS1dRS0hUTUxQYXJ0OjpmaWxlV3Jh
cHBlcgogCiBzdGF0aWMgRWxlbWVudEltcGwgKmxpc3RQYXJlbnQoRWxlbWVudEltcGwgKml0ZW0p
CiB7Ci0gICAgLy8gSWNrISAgQXZvaWQgdXNlIG9mIGl0ZW0tPmlkKCkgd2hpY2ggY29uZnVzZXMg
T2JqQysrLgotICAgIHVuc2lnbmVkIHNob3J0IF9pZCA9IGl0ZW0tPmlkZW50aWZpZXIoKTsKLSAg
ICAKLSAgICB3aGlsZSAoX2lkICE9IElEX1VMICYmIF9pZCAhPSBJRF9PTCkgeworICAgIHdoaWxl
ICghaXRlbS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnVsKCkpICYmICFpdGVtLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6b2woKSkpIHsKICAgICAgICAgaXRlbSA9IHN0YXRpY19jYXN0PEVsZW1lbnRJ
bXBsICo+KGl0ZW0tPnBhcmVudE5vZGUoKSk7CiAgICAgICAgIGlmICghaXRlbSkKICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBfaWQgPSBpdGVtLT5pZGVudGlmaWVyKCk7CiAgICAgfQogICAg
IHJldHVybiBpdGVtOwogfQpAQCAtMjg2OCw3ICsyODYwLDcgQEAgc3RhdGljIE5vZGVJbXBsKiBp
c1RleHRGaXJzdEluTGlzdEl0ZW0oTgogICAgIHdoaWxlIChwYXIpIHsKICAgICAgICAgaWYgKHBh
ci0+Zmlyc3RDaGlsZCgpICE9IGUpCiAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgaWYg
KHBhci0+aWRlbnRpZmllcigpID09IElEX0xJKQorICAgICAgICBpZiAocGFyLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6bGkoKSkpCiAgICAgICAgICAgICByZXR1cm4gcGFyOwogICAgICAgICBlID0g
cGFyOwogICAgICAgICBwYXIgPSBwYXItPnBhcmVudE5vZGUoKTsKQEAgLTMwMjIsMTA5ICszMDE0
LDk1IEBAIE5TQXR0cmlidXRlZFN0cmluZyAqS1dRS0hUTUxQYXJ0OjphdHRyaWIKICAgICAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBvdXIgc2ltcGxlIEhUTUwg
LT4gQVNDSUkgdHJhbnNmb3JtYXRpb246CiAgICAgICAgICAgICAgICAgUVN0cmluZyB0ZXh0Owot
ICAgICAgICAgICAgICAgIE5vZGVJbXBsOjpJZCBfaWQgPSBuLT5pZGVudGlmaWVyKCk7Ci0gICAg
ICAgICAgICAgICAgc3dpdGNoKF9pZCkgewotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0E6
Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3RlIHRoZSBzdGFydCBvZiB0aGUgPGE+IGVs
ZW1lbnQuICBXZSB3aWxsIGFkZCB0aGUgTlNMaW5rQXR0cmlidXRlTmFtZQotICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gYXR0cmlidXRlIHRvIHRoZSBhdHRyaWJ1dGVkIHN0cmluZyB3aGVuIG5h
dmlnYXRpbmcgdG8gdGhlIG5leHQgc2libGluZyAKLSAgICAgICAgICAgICAgICAgICAgICAgIC8v
IG9mIHRoaXMgbm9kZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtTdGFydExvY2F0aW9u
ID0gW3Jlc3VsdCBsZW5ndGhdOwotICAgICAgICAgICAgICAgICAgICAgICAgbGlua1N0YXJ0Tm9k
ZSA9IHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsKj4obik7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLQotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0JSOgotICAgICAgICAgICAg
ICAgICAgICAgICAgdGV4dCArPSAiXG4iOwotICAgICAgICAgICAgICAgICAgICAgICAgaGFzTmV3
TGluZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAKLSAgICAg
ICAgICAgICAgICAgICAgY2FzZSBJRF9MSToKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBRU3RyaW5nIGxpc3RUZXh0OwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEVsZW1lbnRJbXBsICppdGVtUGFyZW50ID0gbGlzdFBhcmVudChzdGF0
aWNfY2FzdDxFbGVtZW50SW1wbCAqPihuKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNOZXdMaW5lKQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsaXN0VGV4dCArPSAnXG4nOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGhhc05ld0xpbmUgPSB0cnVlOwotICAgIAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGxpc3RJdGVtcy5hcHBlbmQoc3RhdGljX2Nhc3Q8RWxlbWVudEltcGwqPihuKSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdEl0ZW1JbmZvIGluZm87Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW5mby5zdGFydCA9IFtyZXN1bHQgbGVuZ3RoXTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbmZvLmVuZCA9IDA7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbGlzdEl0ZW1Mb2NhdGlvbnMuYXBwZW5kIChpbmZvKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0VGV4dCArPSAn
XHQnOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtUGFyZW50ICYmIHJlbmRl
cmVyLT5pc0xpc3RJdGVtKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVu
ZGVyTGlzdEl0ZW0gKmxpc3RSZW5kZXJlciA9IHN0YXRpY19jYXN0PFJlbmRlckxpc3RJdGVtKj4o
cmVuZGVyZXIpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heE1hcmtlcldp
ZHRoID0gTUFYKFtmb250IHBvaW50U2l6ZV0sIG1heE1hcmtlcldpZHRoKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3dpdGNoKHN0eWxlLT5saXN0U3R5bGVUeXBlKCkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Uga2h0bWw6OkRJU0M6Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdFRleHQgKz0gKChRQ2hhcilC
VUxMRVRfQ0hBUik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIGtodG1sOjpDSVJD
TEU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdFRleHQgKz0g
KChRQ2hhcilDSVJDTEVfQ0hBUik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIGto
dG1sOjpTUVVBUkU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlz
dFRleHQgKz0gKChRQ2hhcilTUVVBUkVfQ0hBUik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjYXNlIGtodG1sOjpMTk9ORToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVN0cmluZyBtYXJrZXIg
PSBsaXN0UmVuZGVyZXItPm1hcmtlclN0cmluZ1ZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbGlzdFRleHQgKz0gbWFya2VyOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVzZSBBcHBLaXQgbWV0cmljcy4gIFdpbGwgYmUg
cmVuZGVyZWQgYnkgQXBwS2l0LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZsb2F0IG1hcmtlcldpZHRoID0gW2ZvbnQgd2lkdGhPZlN0cmluZzogbWFya2VyLmdldE5T
U3RyaW5nKCldOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heE1h
cmtlcldpZHRoID0gTUFYKG1hcmtlcldpZHRoLCBtYXhNYXJrZXJXaWR0aCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAobi0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OmEoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gTm90ZSB0aGUgc3Rh
cnQgb2YgdGhlIDxhPiBlbGVtZW50LiAgV2Ugd2lsbCBhZGQgdGhlIE5TTGlua0F0dHJpYnV0ZU5h
bWUKKyAgICAgICAgICAgICAgICAgICAgLy8gYXR0cmlidXRlIHRvIHRoZSBhdHRyaWJ1dGVkIHN0
cmluZyB3aGVuIG5hdmlnYXRpbmcgdG8gdGhlIG5leHQgc2libGluZyAKKyAgICAgICAgICAgICAg
ICAgICAgLy8gb2YgdGhpcyBub2RlLgorICAgICAgICAgICAgICAgICAgICBsaW5rU3RhcnRMb2Nh
dGlvbiA9IFtyZXN1bHQgbGVuZ3RoXTsKKyAgICAgICAgICAgICAgICAgICAgbGlua1N0YXJ0Tm9k
ZSA9IHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsKj4obik7CisgICAgICAgICAgICAgICAgfSBlbHNl
IGlmIChuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YnIoKSkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgdGV4dCArPSAiXG4iOworICAgICAgICAgICAgICAgICAgICBoYXNOZXdMaW5lID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpsaSgp
KSkgeworICAgICAgICAgICAgICAgICAgICBRU3RyaW5nIGxpc3RUZXh0OworICAgICAgICAgICAg
ICAgICAgICBFbGVtZW50SW1wbCAqaXRlbVBhcmVudCA9IGxpc3RQYXJlbnQoc3RhdGljX2Nhc3Q8
RWxlbWVudEltcGwgKj4obikpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKCFoYXNOZXdMaW5lKQorICAgICAgICAgICAgICAgICAgICAgICAgbGlzdFRleHQg
Kz0gJ1xuJzsKKyAgICAgICAgICAgICAgICAgICAgaGFzTmV3TGluZSA9IHRydWU7CiAKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdFRleHQgKz0gJyAnOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBsaXN0VGV4dCArPSAnXHQnOwotICAgIAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBOU011dGFibGVEaWN0aW9uYXJ5ICphdHRyczsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRycyA9IFtbTlNNdXRhYmxl
RGljdGlvbmFyeSBhbGxvY10gaW5pdF07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFthdHRycyBzZXRPYmplY3Q6Zm9udCBmb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHlsZSAmJiBzdHlsZS0+Y29sb3IoKS5p
c1ZhbGlkKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0cnMgc2V0
T2JqZWN0OnN0eWxlLT5jb2xvcigpLmdldE5TQ29sb3IoKSBmb3JLZXk6TlNGb3JlZ3JvdW5kQ29s
b3JBdHRyaWJ1dGVOYW1lXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0
eWxlICYmIHN0eWxlLT5iYWNrZ3JvdW5kQ29sb3IoKS5pc1ZhbGlkKCkpCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBbYXR0cnMgc2V0T2JqZWN0OnN0eWxlLT5iYWNrZ3JvdW5k
Q29sb3IoKS5nZXROU0NvbG9yKCkgZm9yS2V5Ok5TQmFja2dyb3VuZENvbG9yQXR0cmlidXRlTmFt
ZV07Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlNBdHRy
aWJ1dGVkU3RyaW5nICpwYXJ0aWFsU3RyaW5nID0gW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2Nd
IGluaXRXaXRoU3RyaW5nOmxpc3RUZXh0LmdldE5TU3RyaW5nKCkgYXR0cmlidXRlczphdHRyc107
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRycyByZWxlYXNlXTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jlc3VsdCBhcHBlbmRBdHRyaWJ1dGVkU3RyaW5n
OiBwYXJ0aWFsU3RyaW5nXTsgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFtwYXJ0aWFsU3RyaW5nIHJlbGVhc2VdOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbGlzdEl0ZW1zLmFwcGVuZChzdGF0aWNfY2Fz
dDxFbGVtZW50SW1wbCo+KG4pKTsKKyAgICAgICAgICAgICAgICAgICAgTGlzdEl0ZW1JbmZvIGlu
Zm87CisgICAgICAgICAgICAgICAgICAgIGluZm8uc3RhcnQgPSBbcmVzdWx0IGxlbmd0aF07Cisg
ICAgICAgICAgICAgICAgICAgIGluZm8uZW5kID0gMDsKKyAgICAgICAgICAgICAgICAgICAgbGlz
dEl0ZW1Mb2NhdGlvbnMuYXBwZW5kIChpbmZvKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgICAgIGxpc3RUZXh0ICs9ICdcdCc7CisgICAgICAgICAgICAgICAgICAgIGlm
IChpdGVtUGFyZW50ICYmIHJlbmRlcmVyLT5pc0xpc3RJdGVtKCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIFJlbmRlckxpc3RJdGVtICpsaXN0UmVuZGVyZXIgPSBzdGF0aWNfY2FzdDxSZW5k
ZXJMaXN0SXRlbSo+KHJlbmRlcmVyKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgbWF4TWFy
a2VyV2lkdGggPSBNQVgoW2ZvbnQgcG9pbnRTaXplXSwgbWF4TWFya2VyV2lkdGgpOworICAgICAg
ICAgICAgICAgICAgICAgICAgc3dpdGNoKHN0eWxlLT5saXN0U3R5bGVUeXBlKCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjYXNlIGtodG1sOjpESVNDOgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBsaXN0VGV4dCArPSAoKFFDaGFyKUJVTExFVF9DSEFSKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2FzZSBraHRtbDo6Q0lSQ0xFOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsaXN0VGV4dCArPSAoKFFDaGFyKUNJUkNMRV9DSEFSKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBraHRt
bDo6U1FVQVJFOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0VGV4dCArPSAo
KFFDaGFyKVNRVUFSRV9DSEFSKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBraHRtbDo6TE5PTkU6CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFTdHJpbmcg
bWFya2VyID0gbGlzdFJlbmRlcmVyLT5tYXJrZXJTdHJpbmdWYWx1ZSgpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBsaXN0VGV4dCArPSBtYXJrZXI7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIFVzZSBBcHBLaXQgbWV0cmljcy4gIFdpbGwgYmUgcmVuZGVyZWQg
YnkgQXBwS2l0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBtYXJrZXJX
aWR0aCA9IFtmb250IHdpZHRoT2ZTdHJpbmc6IG1hcmtlci5nZXROU1N0cmluZygpXTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4TWFya2VyV2lkdGggPSBNQVgobWFya2VyV2lk
dGgsIG1heE1hcmtlcldpZHRoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfT0w6
Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfVUw6CisgICAgICAgICAgICAgICAgICAgICAg
ICBsaXN0VGV4dCArPSAnICc7CisgICAgICAgICAgICAgICAgICAgICAgICBsaXN0VGV4dCArPSAn
XHQnOworCisgICAgICAgICAgICAgICAgICAgICAgICBOU011dGFibGVEaWN0aW9uYXJ5ICphdHRy
czsKKworICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnMgPSBbW05TTXV0YWJsZURpY3Rpb25h
cnkgYWxsb2NdIGluaXRdOworICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHJzIHNldE9iamVj
dDpmb250IGZvcktleTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChzdHlsZSAmJiBzdHlsZS0+Y29sb3IoKS5pc1ZhbGlkKCkpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgW2F0dHJzIHNldE9iamVjdDpzdHlsZS0+Y29sb3IoKS5nZXROU0NvbG9y
KCkgZm9yS2V5Ok5TRm9yZWdyb3VuZENvbG9yQXR0cmlidXRlTmFtZV07CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoc3R5bGUgJiYgc3R5bGUtPmJhY2tncm91bmRDb2xvcigpLmlzVmFsaWQo
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0cnMgc2V0T2JqZWN0OnN0eWxlLT5i
YWNrZ3JvdW5kQ29sb3IoKS5nZXROU0NvbG9yKCkgZm9yS2V5Ok5TQmFja2dyb3VuZENvbG9yQXR0
cmlidXRlTmFtZV07CisKKyAgICAgICAgICAgICAgICAgICAgICAgIE5TQXR0cmlidXRlZFN0cmlu
ZyAqcGFydGlhbFN0cmluZyA9IFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0
cmluZzpsaXN0VGV4dC5nZXROU1N0cmluZygpIGF0dHJpYnV0ZXM6YXR0cnNdOworICAgICAgICAg
ICAgICAgICAgICAgICAgW2F0dHJzIHJlbGVhc2VdOworICAgICAgICAgICAgICAgICAgICAgICAg
W3Jlc3VsdCBhcHBlbmRBdHRyaWJ1dGVkU3RyaW5nOiBwYXJ0aWFsU3RyaW5nXTsgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBbcGFydGlhbFN0cmluZyByZWxlYXNlXTsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChuLT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6b2woKSkgfHwgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnVs
KCkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWhhc05ld0xpbmUpCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGV4dCArPSAiXG4iOwogICAgICAgICAgICAgICAgICAgICAg
ICAgaGFzTmV3TGluZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLQot
ICAgICAgICAgICAgICAgICAgICBjYXNlIElEX1REOgotICAgICAgICAgICAgICAgICAgICBjYXNl
IElEX1RIOgotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0hSOgotICAgICAgICAgICAgICAg
ICAgICBjYXNlIElEX0REOgotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0RMOgotICAgICAg
ICAgICAgICAgICAgICBjYXNlIElEX0RUOgotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX1BS
RToKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9CTE9DS1FVT1RFOgotICAgICAgICAgICAg
ICAgICAgICBjYXNlIElEX0RJVjoKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuLT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6dGQoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGgoKSkgfHwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aHIoKSkgfHwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZGQoKSkgfHwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
ZGwoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6ZHQoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6cHJlKCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJsb2NrcXVvdGUoKSkgfHwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZGl2KCkpKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWhhc05ld0xpbmUpCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGV4dCArPSAnXG4nOwogICAgICAgICAgICAgICAgICAgICAgICAgaGFzTmV3
TGluZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICAgICAgY2FzZSBJRF9QOgotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX1RSOgotICAg
ICAgICAgICAgICAgICAgICBjYXNlIElEX0gxOgotICAgICAgICAgICAgICAgICAgICBjYXNlIElE
X0gyOgotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0gzOgotICAgICAgICAgICAgICAgICAg
ICBjYXNlIElEX0g0OgotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0g1OgotICAgICAgICAg
ICAgICAgICAgICBjYXNlIElEX0g2OiB7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo
bi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnAoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dHIoKSkgfHwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDEoKSkgfHwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDIoKSkg
fHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6aDMoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6aDQoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuLT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6aDUoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDYoKSkpIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICghaGFzTmV3TGluZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0
ICs9ICdcbic7CiAgICAgICAgICAgICAgICAgICAgICAgICAKQEAgLTMxMzksMTAgKzMxMTcsOCBA
QCBOU0F0dHJpYnV0ZWRTdHJpbmcgKktXUUtIVE1MUGFydDo6YXR0cmliCiAgICAgICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAg
ICAgICAgIGhhc05ld0xpbmUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgICAgICBjYXNlIElEX0lNRzoKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAo
bi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmltZygpKSkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHBlbmRpbmdTdHlsZWRTcGFjZSAhPSBuaWwpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAobGlua1N0YXJ0TG9jYXRpb24gPT0gW3Jlc3VsdCBsZW5ndGhdKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrbGlua1N0YXJ0TG9jYXRpb247CkBAIC0zMTU2
LDggKzMxMzIsOSBAQCBOU0F0dHJpYnV0ZWRTdHJpbmcgKktXUUtIVE1MUGFydDo6YXR0cmliCiAg
ICAgICAgICAgICAgICAgICAgICAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKmlTdHJpbmcgPSBbTlNB
dHRyaWJ1dGVkU3RyaW5nIGF0dHJpYnV0ZWRTdHJpbmdXaXRoQXR0YWNobWVudDphdHRhY2htZW50
XTsKICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXN1bHQgYXBwZW5kQXR0cmlidXRlZFN0cmlu
ZzogaVN0cmluZ107CiAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0YWNobWVudCByZWxlYXNl
XTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAgICAgTlNBdHRyaWJ1dGVkU3RyaW5n
ICpwYXJ0aWFsU3RyaW5nID0gW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3Ry
aW5nOnRleHQuZ2V0TlNTdHJpbmcoKV07CiAgICAgICAgICAgICAgICAgW3Jlc3VsdCBhcHBlbmRB
dHRyaWJ1dGVkU3RyaW5nOiBwYXJ0aWFsU3RyaW5nXTsKICAgICAgICAgICAgICAgICBbcGFydGlh
bFN0cmluZyByZWxlYXNlXTsKQEAgLTMxNzksNzEgKzMxNTYsNjAgQEAgTlNBdHRyaWJ1dGVkU3Ry
aW5nICpLV1FLSFRNTFBhcnQ6OmF0dHJpYgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgbmV4dCA9IG4tPm5leHRTaWJsaW5nKCk7CiAKLSAgICAgICAgICAgIE5vZGVJbXBsOjpJ
ZCBfaWQgPSBuLT5pZGVudGlmaWVyKCk7Ci0gICAgICAgICAgICBzd2l0Y2goX2lkKSB7Ci0gICAg
ICAgICAgICAgICAgY2FzZSBJRF9BOgotICAgICAgICAgICAgICAgICAgICAvLyBFbmQgb2YgYSA8
YT4gZWxlbWVudC4gIENyZWF0ZSBhbiBhdHRyaWJ1dGVkIHN0cmluZyBOU0xpbmtBdHRyaWJ1dGVO
YW1lIGF0dHJpYnV0ZQotICAgICAgICAgICAgICAgICAgICAvLyBmb3IgdGhlIHJhbmdlIG9mIHRo
ZSBsaW5rLiAgTm90ZSB0aGF0IHdlIGNyZWF0ZSB0aGUgYXR0cmlidXRlZCBzdHJpbmcgZnJvbSB0
aGUgRE9NLCB3aGljaAotICAgICAgICAgICAgICAgICAgICAvLyB3aWxsIGhhdmUgY29ycmVjdGVk
IGFueSBpbGxlZ2FsbHkgbmVzdGVkIDxhPiBlbGVtZW50cy4KLSAgICAgICAgICAgICAgICAgICAg
aWYgKGxpbmtTdGFydE5vZGUgJiYgbiA9PSBsaW5rU3RhcnROb2RlKXsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIERPTVN0cmluZyBocmVmID0gcGFyc2VVUkwobGlua1N0YXJ0Tm9kZS0+Z2V0QXR0
cmlidXRlKEFUVFJfSFJFRikpOwotICAgICAgICAgICAgICAgICAgICAgICAgS1VSTCBrVVJMID0g
S1dRKGxpbmtTdGFydE5vZGUtPmdldERvY3VtZW50KCktPnBhcnQoKSktPmNvbXBsZXRlVVJMKGhy
ZWYuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
ICAgICAgICBOU1VSTCAqVVJMID0ga1VSTC5nZXROU1VSTCgpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgW3Jlc3VsdCBhZGRBdHRyaWJ1dGU6TlNMaW5rQXR0cmlidXRlTmFtZSB2YWx1ZTpVUkwg
cmFuZ2U6TlNNYWtlUmFuZ2UobGlua1N0YXJ0TG9jYXRpb24sIFtyZXN1bHQgbGVuZ3RoXS1saW5r
U3RhcnRMb2NhdGlvbildOwotICAgICAgICAgICAgICAgICAgICAgICAgbGlua1N0YXJ0Tm9kZSA9
IDA7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBpZiAobi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmEoKSkpIHsKKyAgICAgICAg
ICAgICAgICAvLyBFbmQgb2YgYSA8YT4gZWxlbWVudC4gIENyZWF0ZSBhbiBhdHRyaWJ1dGVkIHN0
cmluZyBOU0xpbmtBdHRyaWJ1dGVOYW1lIGF0dHJpYnV0ZQorICAgICAgICAgICAgICAgIC8vIGZv
ciB0aGUgcmFuZ2Ugb2YgdGhlIGxpbmsuICBOb3RlIHRoYXQgd2UgY3JlYXRlIHRoZSBhdHRyaWJ1
dGVkIHN0cmluZyBmcm9tIHRoZSBET00sIHdoaWNoCisgICAgICAgICAgICAgICAgLy8gd2lsbCBo
YXZlIGNvcnJlY3RlZCBhbnkgaWxsZWdhbGx5IG5lc3RlZCA8YT4gZWxlbWVudHMuCisgICAgICAg
ICAgICAgICAgaWYgKGxpbmtTdGFydE5vZGUgJiYgbiA9PSBsaW5rU3RhcnROb2RlKSB7CisgICAg
ICAgICAgICAgICAgICAgIERPTVN0cmluZyBocmVmID0gcGFyc2VVUkwobGlua1N0YXJ0Tm9kZS0+
Z2V0QXR0cmlidXRlKEFUVFJfSFJFRikpOworICAgICAgICAgICAgICAgICAgICBLVVJMIGtVUkwg
PSBLV1EobGlua1N0YXJ0Tm9kZS0+Z2V0RG9jdW1lbnQoKS0+cGFydCgpKS0+Y29tcGxldGVVUkwo
aHJlZi5zdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAg
ICBOU1VSTCAqVVJMID0ga1VSTC5nZXROU1VSTCgpOworICAgICAgICAgICAgICAgICAgICBbcmVz
dWx0IGFkZEF0dHJpYnV0ZTpOU0xpbmtBdHRyaWJ1dGVOYW1lIHZhbHVlOlVSTCByYW5nZTpOU01h
a2VSYW5nZShsaW5rU3RhcnRMb2NhdGlvbiwgW3Jlc3VsdCBsZW5ndGhdLWxpbmtTdGFydExvY2F0
aW9uKV07CisgICAgICAgICAgICAgICAgICAgIGxpbmtTdGFydE5vZGUgPSAwOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKG4tPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjpvbCgpKSB8fCBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dWwoKSkpIHsK
KyAgICAgICAgICAgICAgICBpZiAoIWhhc05ld0xpbmUpCisgICAgICAgICAgICAgICAgICAgIHRl
eHQgKz0gJ1xuJzsKKyAgICAgICAgICAgICAgICBoYXNOZXdMaW5lID0gdHJ1ZTsKKyAgICAgICAg
ICAgIH0gZWxzZSBpZiAobi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmxpKCkpKSB7CiAgICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgY2FzZSBJRF9PTDoKLSAgICAgICAgICAgICAgICBj
YXNlIElEX1VMOgotICAgICAgICAgICAgICAgICAgICBpZiAoIWhhc05ld0xpbmUpCi0gICAgICAg
ICAgICAgICAgICAgICAgICB0ZXh0ICs9ICdcbic7Ci0gICAgICAgICAgICAgICAgICAgIGhhc05l
d0xpbmUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAg
ICAgIGNhc2UgSURfTEk6Ci0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBpLCBjb3VudCA9IGxpc3RJdGVtcy5jb3VudCgpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChsaXN0SXRlbXMuYXQoaSkgPT0gbil7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxpc3RJdGVtTG9jYXRpb25zW2ldLmVuZCA9IFtyZXN1bHQgbGVuZ3RoXTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGludCBpLCBjb3VudCA9IGxpc3RJdGVtcy5jb3VudCgpOworICAgICAgICAgICAgICAgIGZvciAo
aSA9IDA7IGkgPCBjb3VudDsgaSsrKXsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGxpc3RJdGVt
cy5hdChpKSA9PSBuKXsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RJdGVtTG9jYXRpb25z
W2ldLmVuZCA9IFtyZXN1bHQgbGVuZ3RoXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaGFzTmV3
TGluZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHRleHQgKz0gJ1xuJzsKLSAgICAgICAgICAg
ICAgICAgICAgaGFzTmV3TGluZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
Ci0gICAgICAgICAgICAgICAgY2FzZSBJRF9URDoKLSAgICAgICAgICAgICAgICBjYXNlIElEX1RI
OgotICAgICAgICAgICAgICAgIGNhc2UgSURfSFI6Ci0gICAgICAgICAgICAgICAgY2FzZSBJRF9E
RDoKLSAgICAgICAgICAgICAgICBjYXNlIElEX0RMOgotICAgICAgICAgICAgICAgIGNhc2UgSURf
RFQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBJRF9QUkU6Ci0gICAgICAgICAgICAgICAgY2FzZSBJ
RF9CTE9DS1FVT1RFOgotICAgICAgICAgICAgICAgIGNhc2UgSURfRElWOgotICAgICAgICAgICAg
ICAgICAgICBpZiAoIWhhc05ld0xpbmUpCi0gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0ICs9
ICdcbic7Ci0gICAgICAgICAgICAgICAgICAgIGhhc05ld0xpbmUgPSB0cnVlOwotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIElEX1A6Ci0gICAgICAgICAg
ICAgICAgY2FzZSBJRF9UUjoKLSAgICAgICAgICAgICAgICBjYXNlIElEX0gxOgotICAgICAgICAg
ICAgICAgIGNhc2UgSURfSDI6Ci0gICAgICAgICAgICAgICAgY2FzZSBJRF9IMzoKLSAgICAgICAg
ICAgICAgICBjYXNlIElEX0g0OgotICAgICAgICAgICAgICAgIGNhc2UgSURfSDU6Ci0gICAgICAg
ICAgICAgICAgY2FzZSBJRF9INjoKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNOZXdMaW5l
KQotICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCArPSAnXG4nOwotICAgICAgICAgICAgICAg
ICAgICAvLyBBbiBleHRyYSBuZXdsaW5lIGlzIG5lZWRlZCBhdCB0aGUgc3RhcnQsIG5vdCB0aGUg
ZW5kLCBvZiB0aGVzZSB0eXBlcyBvZiB0YWdzLAotICAgICAgICAgICAgICAgICAgICAvLyBzbyBk
b24ndCBhZGQgYW5vdGhlciBoZXJlLgotICAgICAgICAgICAgICAgICAgICBoYXNOZXdMaW5lID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGlmICghaGFzTmV3TGluZSkKKyAgICAgICAgICAgICAgICAgICAgdGV4dCAr
PSAnXG4nOworICAgICAgICAgICAgICAgIGhhc05ld0xpbmUgPSB0cnVlOworICAgICAgICAgICAg
fSBlbHNlIGlmIChuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGQoKSkgfHwKKyAgICAgICAgICAg
ICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRoKCkpIHx8CisgICAgICAgICAg
ICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpocigpKSB8fAorICAgICAgICAg
ICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZGQoKSkgfHwKKyAgICAgICAg
ICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmRsKCkpIHx8CisgICAgICAg
ICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpkdCgpKSB8fAorICAgICAg
ICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6cHJlKCkpIHx8CisgICAg
ICAgICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpibG9ja3F1b3RlKCkp
IHx8CisgICAgICAgICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpkaXYo
KSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWhhc05ld0xpbmUpCisgICAgICAgICAgICAgICAg
ICAgIHRleHQgKz0gJ1xuJzsKKyAgICAgICAgICAgICAgICBoYXNOZXdMaW5lID0gdHJ1ZTsKKyAg
ICAgICAgICAgIH0gZWxzZSBpZiAobi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnAoKSkgfHwKKyAg
ICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRyKCkpIHx8Cisg
ICAgICAgICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoMSgpKSB8fAor
ICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDIoKSkgfHwK
KyAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmgzKCkpIHx8
CisgICAgICAgICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoNCgpKSB8
fAorICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDUoKSkg
fHwKKyAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omg2KCkp
KSB7CisgICAgICAgICAgICAgICAgaWYgKCFoYXNOZXdMaW5lKQorICAgICAgICAgICAgICAgICAg
ICB0ZXh0ICs9ICdcbic7CisgICAgICAgICAgICAgICAgLy8gQW4gZXh0cmEgbmV3bGluZSBpcyBu
ZWVkZWQgYXQgdGhlIHN0YXJ0LCBub3QgdGhlIGVuZCwgb2YgdGhlc2UgdHlwZXMgb2YgdGFncywK
KyAgICAgICAgICAgICAgICAvLyBzbyBkb24ndCBhZGQgYW5vdGhlciBoZXJlLgorICAgICAgICAg
ICAgICAgIGhhc05ld0xpbmUgPSB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAg
ICAgICAgICAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKnBhcnRpYWxTdHJpbmcgPSBbW05TQXR0cmli
dXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6dGV4dC5nZXROU1N0cmluZygpXTsKQEAg
LTM3MDMsNyArMzY2OSw3IEBAIHZvaWQgS1dRS0hUTUxQYXJ0OjpzZXRTZWxlY3Rpb25Gcm9tTm9u
ZSgKICAgICAgICAgd2hpbGUgKG5vZGUpIHsKICAgICAgICAgICAgIC8vIExvb2sgZm9yIGEgYmxv
Y2sgZmxvdywgYnV0IHNraXAgb3ZlciB0aGUgSFRNTCBlbGVtZW50LCBzaW5jZSB3ZSByZWFsbHkK
ICAgICAgICAgICAgIC8vIHdhbnQgdG8gZ2V0IGF0IGxlYXN0IGFzIGZhciBhcyB0aGUgdGhlIEJP
RFkgZWxlbWVudCBpbiBhIGRvY3VtZW50LgotICAgICAgICAgICAgaWYgKG5vZGUtPmlzQmxvY2tG
bG93KCkgJiYgbm9kZS0+aWRlbnRpZmllcigpICE9IElEX0hUTUwpCisgICAgICAgICAgICBpZiAo
bm9kZS0+aXNCbG9ja0Zsb3coKSAmJiBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aHRtbCgp
KSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIG5vZGUgPSBub2RlLT50cmF2
ZXJzZU5leHROb2RlKCk7CiAgICAgICAgIH0KSW5kZXg6IGt3cS9XZWJDb3JlQnJpZGdlLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9XZWJDb3JlQnJpZGdlLm1t
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjM5NgpkaWZmIC11IC1wIC1yMS4zOTYga3dxL1dlYkNv
cmVCcmlkZ2UubW0KLS0tIGt3cS9XZWJDb3JlQnJpZGdlLm1tCTE0IEp1biAyMDA1IDAwOjIzOjQ1
IC0wMDAwCTEuMzk2CisrKyBrd3EvV2ViQ29yZUJyaWRnZS5tbQkxNiBKdW4gMjAwNSAyMzowMjo0
MSAtMDAwMApAQCAtMzksNyArMzksNiBAQAogI2ltcG9ydCAiaHRtbF9pbWFnZWltcGwuaCIKICNp
bXBvcnQgImh0bWxhdHRycy5oIgogI2ltcG9ydCAiaHRtbGVkaXRpbmcuaCIKLSNpbXBvcnQgImh0
bWx0YWdzLmgiCiAjaW1wb3J0ICJraHRtbF9wYXJ0LmgiCiAjaW1wb3J0ICJraHRtbHZpZXcuaCIK
ICNpbXBvcnQgImtqc19wcm94eS5oIgpAQCAtNjcsNyArNjYsNiBAQAogI2ltcG9ydCAiS1dRQXNz
ZXJ0aW9ucy5oIgogI2ltcG9ydCAiS1dRQ2hhcnNldHMuaCIKICNpbXBvcnQgIktXUUNsaXBib2Fy
ZC5oIgotI2ltcG9ydCAiS1dRRE9NTm9kZS5oIgogI2ltcG9ydCAiS1dRRWRpdENvbW1hbmQuaCIK
ICNpbXBvcnQgIktXUUZvbnQuaCIKICNpbXBvcnQgIktXUUZvdW5kYXRpb25FeHRyYXMuaCIKQEAg
LTEwMCw2ICs5OCw3IEBAIHVzaW5nIERPTTo6SFRNTEZvcm1FbGVtZW50SW1wbDsKIHVzaW5nIERP
TTo6SFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGw7CiB1c2luZyBET006OkhUTUxJbWFnZUVsZW1l
bnRJbXBsOwogdXNpbmcgRE9NOjpIVE1MSW5wdXRFbGVtZW50SW1wbDsKK3VzaW5nIERPTTo6SFRN
TE5hbWVzOwogdXNpbmcgRE9NOjpOb2RlSW1wbDsKIHVzaW5nIERPTTo6UG9zaXRpb247CiB1c2lu
ZyBET006OlJhbmdlSW1wbDsKQEAgLTkxMyw3ICs5MTIsNyBAQCBzdGF0aWMgTlNWaWV3ICp2aWV3
Rm9yRWxlbWVudChFbGVtZW50SW1wCiBzdGF0aWMgSFRNTElucHV0RWxlbWVudEltcGwgKmlucHV0
RWxlbWVudEZyb21ET01FbGVtZW50KERPTUVsZW1lbnQgKmVsZW1lbnQpCiB7CiAgICAgTm9kZUlt
cGwgKm5vZGUgPSBbZWxlbWVudCBfbm9kZUltcGxdOwotICAgIGlmIChub2RlICYmIGlkRnJvbU5v
ZGUobm9kZSkgPT0gSURfSU5QVVQpIHsKKyAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OmlucHV0KCkpKSB7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVt
ZW50SW1wbCAqPihub2RlKTsKICAgICB9CiAgICAgcmV0dXJuIG5pbDsKQEAgLTkyNiw3ICs5MjUs
NyBAQCBzdGF0aWMgSFRNTEZvcm1FbGVtZW50SW1wbCAqZm9ybUVsZW1lbnRGCiAgICAgLy8gbWFw
cy5nb29nbGUuY29tIGNyYXNoZXMgb3RoZXJ3aXNlIGJlY2F1c2UgaXQgaXMgYW4geHNsdCBmaWxl
CiAgICAgLy8gdGhhdCBjb250YWlucyA8Zm9ybT4gZWxlbWVudHMgdGhhdCBhcmVuJ3QgaW4gYW55
IG5hbWVzcGFjZSwgc28KICAgICAvLyB0aGV5IGNvbWUgb3V0IGFzIGdlbmVyaWMgQ01MIGVsZW1l
bnRzCi0gICAgaWYgKG5vZGUgJiYgbm9kZS0+aXNIVE1MRWxlbWVudCgpICYmIGlkRnJvbU5vZGUo
bm9kZSkgPT0gSURfRk9STSkgeworICAgIGlmIChub2RlICYmIG5vZGUtPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjpmb3JtKCkpKSB7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MRm9ybUVs
ZW1lbnRJbXBsICo+KG5vZGUpOwogICAgIH0KICAgICByZXR1cm4gbmlsOwpAQCAtMTA5Niw3ICsx
MDk1LDcgQEAgc3RhdGljIEhUTUxGb3JtRWxlbWVudEltcGwgKmZvcm1FbGVtZW50RgogICAgIAog
ICAgICAgICAgICAgLy8gRklYTUU6IENvZGUgY29waWVkIGZyb20gUmVuZGVySW1hZ2U6OnVwZGF0
ZUZyb21FbGVtZW50OyBzaG91bGQgc2hhcmUuCiAgICAgICAgICAgICBET01TdHJpbmcgYXR0cjsK
LSAgICAgICAgICAgIGlmIChpZEZyb21Ob2RlKGkpID09IElEX09CSkVDVCkgeworICAgICAgICAg
ICAgaWYgKGktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvYmplY3QoKSkpIHsKICAgICAgICAgICAg
ICAgICBhdHRyID0gaS0+Z2V0QXR0cmlidXRlKEFUVFJfREFUQSk7CiAgICAgICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgICAgIGF0dHIgPSBpLT5nZXRBdHRyaWJ1dGUoQVRUUl9TUkMpOwpA
QCAtMTEwOCw5ICsxMTA3LDkgQEAgc3RhdGljIEhUTUxGb3JtRWxlbWVudEltcGwgKmZvcm1FbGVt
ZW50RgogICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBGSVhNRTogQ29kZSBjb3BpZWQgZnJv
bSBSZW5kZXJJbWFnZTo6dXBkYXRlRnJvbUVsZW1lbnQ7IHNob3VsZCBzaGFyZS4KICAgICAgICAg
ICAgIERPTVN0cmluZyBhbHQ7Ci0gICAgICAgICAgICBpZiAoaWRGcm9tTm9kZShpKSA9PSBJRF9J
TlBVVCkKKyAgICAgICAgICAgIGlmIChpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW5wdXQoKSkp
CiAgICAgICAgICAgICAgICAgYWx0ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudEltcGwg
Kj4oaSktPmFsdFRleHQoKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGlkRnJvbU5vZGUoaSkgPT0g
SURfSU1HKQorICAgICAgICAgICAgZWxzZSBpZiAoaS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omlt
ZygpKSkKICAgICAgICAgICAgICAgICBhbHQgPSBzdGF0aWNfY2FzdDxIVE1MSW1hZ2VFbGVtZW50
SW1wbCAqPihpKS0+YWx0VGV4dCgpOwogICAgICAgICAgICAgaWYgKCFhbHQuaXNOdWxsKCkpIHsK
ICAgICAgICAgICAgICAgICBRU3RyaW5nIGFsdFRleHQgPSBhbHQuc3RyaW5nKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>2412</attachid>
            <date>2005-06-16 18:50:09 -0700</date>
            <delta_ts>2005-06-20 14:12:36 -0700</delta_ts>
            <desc>This patch converts all of the parser&apos;s error handling logic. </desc>
            <filename>patch-3.txt</filename>
            <type>text/plain</type>
            <size>480813</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUucGJwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvV2ViQ29yZS9XZWJDb3JlLnBicHJvai9wcm9qZWN0LnBieHByb2osdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuNTUzCmRpZmYgLXUgLXAgLXIxLjU1MyBXZWJDb3JlLnBicHJvai9w
cm9qZWN0LnBieHByb2oKLS0tIFdlYkNvcmUucGJwcm9qL3Byb2plY3QucGJ4cHJvagkxNiBKdW4g
MjAwNSAxOTo0MjoxOCAtMDAwMAkxLjU1MworKysgV2ViQ29yZS5wYnByb2ovcHJvamVjdC5wYnhw
cm9qCTE3IEp1biAyMDA1IDAxOjMyOjE0IC0wMDAwCkBAIC0yMTQsMzIgKzIxNCw2IEBACiAvLzJE
MgogLy8yRDMKIC8vMkQ0Ci0vLzM1MAotLy8zNTEKLS8vMzUyCi0vLzM1MwotLy8zNTQKLQkJMzU0
RjI0ODkwMkVFMjg1OTBBQ0EyQUNBID0gewotCQkJZmlsZUVuY29kaW5nID0gMzA7Ci0JCQlpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOwotCQkJbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsKLQkJCXBhdGggPSBLV1FET01Ob2RlLmg7Ci0JCQlyZWZUeXBlID0gNDsKLQkJCXNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7Ci0JCX07Ci0JCTM1NEYyNDhBMDJFRTI4NTkwQUNBMkFDQSA9IHsKLQkJ
CWZpbGVFbmNvZGluZyA9IDMwOwotCQkJaXNhID0gUEJYRmlsZVJlZmVyZW5jZTsKLQkJCWxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOwotCQkJcGF0aCA9IEtXUURPTU5vZGUu
Y3BwOwotCQkJcmVmVHlwZSA9IDQ7Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwotCQl9Owot
Ly8zNTAKLS8vMzUxCi0vLzM1MgotLy8zNTMKLS8vMzU0CiAvLzUxMAogLy81MTEKIC8vNTEyCkBA
IC0xODg1LDI0ICsxODU5LDYgQEAKIAkJCXNoZWxsUGF0aCA9IC9iaW4vc2g7CiAJCQlzaGVsbFNj
cmlwdCA9ICJcIiRDUkVBVEVfSEFTSF9UQUJMRVwiIGtodG1sL2VjbWEveG1sc2VyaWFsaXplci5j
cHAgPiBcIiRERVJJVkVEX0ZJTEVfRElSL3htbHNlcmlhbGl6ZXIubHV0LmhcIiI7CiAJCX07Ci0J
CTkzMkZDMUMwMDgyNEFCQjkwMDVCM0M3NSA9IHsKLQkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0
ODM2NDc7Ci0JCQlmaWxlcyA9ICgKLQkJCSk7Ci0JCQlpbnB1dFBhdGhzID0gKAotCQkJCWtodG1s
L21pc2MvbWFrZXRhZ3MsCi0JCQkJa2h0bWwvbWlzYy9odG1sdGFncy5pbiwKLQkJCSk7Ci0JCQlp
c2EgPSBQQlhTaGVsbFNjcmlwdEJ1aWxkUGhhc2U7Ci0JCQluYW1lID0gaHRtbHRhZ3MuYy9oOwot
CQkJb3V0cHV0UGF0aHMgPSAoCi0JCQkJIiQoREVSSVZFRF9GSUxFX0RJUikvaHRtbHRhZ3MuYyIs
Ci0JCQkJIiQoREVSSVZFRF9GSUxFX0RJUikvaHRtbHRhZ3MuaCIsCi0JCQkpOwotCQkJcnVuT25s
eUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7Ci0JCQlzaGVsbFBhdGggPSAvYmluL3No
OwotCQkJc2hlbGxTY3JpcHQgPSAiY2F0IGtodG1sL21pc2MvaHRtbHRhZ3MuaW4gPiBcIiRERVJJ
VkVEX0ZJTEVfRElSL2h0bWx0YWdzLmluXCJcbmNkIFwiJERFUklWRURfRklMRV9ESVJcIlxucGVy
bCBcIiRTUkNST09UL2todG1sL21pc2MvbWFrZXRhZ3NcIiI7Ci0JCX07CiAJCTkzMkZDMjk1MDgy
NEIzNDUwMDVCM0M3NSA9IHsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJCQlm
aWxlcyA9ICgKQEAgLTIzMjEsNyArMjI3Nyw2IEBACiAJCQkJOTMyRkMyQkMwODI0QjQyMjAwNUIz
Qzc1LAogCQkJCTkzMkZDMEI3MDgyNEExNzUwMDVCM0M3NSwKIAkJCQk5MzJGQzI5NTA4MjRCMzQ1
MDA1QjNDNzUsCi0JCQkJOTMyRkMxQzAwODI0QUJCOTAwNUIzQzc1LAogCQkJCTkzRUE2ODZDMDgy
NDlBRjQwMDY4N0Y1NiwKIAkJCQk5MzJGQzEwQjA4MjRBNEQ0MDA1QjNDNzUsCiAJCQkJOTMyRkMx
NjEwODI0QThFMzAwNUIzQzc1LApAQCAtMjQyOSw3ICsyMzg0LDYgQEAKIAkJCQk5M0YxOThEQzA4
MjQ1RTU5MDAxRTlBQkMsCiAJCQkJOTNGMTk4REUwODI0NUU1OTAwMUU5QUJDLAogCQkJCTkzRjE5
OEUwMDgyNDVFNTkwMDFFOUFCQywKLQkJCQk5M0YxOThFMjA4MjQ1RTU5MDAxRTlBQkMsCiAJCQkJ
OTNGMTk4RTMwODI0NUU1OTAwMUU5QUJDLAogCQkJCTkzRjE5OEU0MDgyNDVFNTkwMDFFOUFCQywK
IAkJCQk5M0YxOThFNTA4MjQ1RTU5MDAxRTlBQkMsCkBAIC0yNTA2LDcgKzI0NjAsNiBAQAogCQkJ
CTkzRjE5OTJFMDgyNDVFNTkwMDFFOUFCQywKIAkJCQk5M0YxOTkyRjA4MjQ1RTU5MDAxRTlBQkMs
CiAJCQkJOTNGMTk5MzAwODI0NUU1OTAwMUU5QUJDLAotCQkJCTkzRjE5OTMxMDgyNDVFNTkwMDFF
OUFCQywKIAkJCQk5M0YxOTkzMjA4MjQ1RTU5MDAxRTlBQkMsCiAJCQkJOTNGMTk5MzMwODI0NUU1
OTAwMUU5QUJDLAogCQkJCTkzRjE5OTM0MDgyNDVFNTkwMDFFOUFCQywKQEAgLTI5ODIsMTIgKzI5
MzUsNiBAQAogCQkJc2V0dGluZ3MgPSB7CiAJCQl9OwogCQl9OwotCQk5M0YxOThFMjA4MjQ1RTU5
MDAxRTlBQkMgPSB7Ci0JCQlmaWxlUmVmID0gRjUyM0QyMzYwMkRFNDM5NjAxODYzNUNBOwotCQkJ
aXNhID0gUEJYQnVpbGRGaWxlOwotCQkJc2V0dGluZ3MgPSB7Ci0JCQl9OwotCQl9OwogCQk5M0Yx
OThFMzA4MjQ1RTU5MDAxRTlBQkMgPSB7CiAJCQlmaWxlUmVmID0gRjUyM0QyMzgwMkRFNDM5NjAx
ODYzNUNBOwogCQkJaXNhID0gUEJYQnVpbGRGaWxlOwpAQCAtMzQ0NCwxMiArMzM5MSw2IEBACiAJ
CQlzZXR0aW5ncyA9IHsKIAkJCX07CiAJCX07Ci0JCTkzRjE5OTMxMDgyNDVFNTkwMDFFOUFCQyA9
IHsKLQkJCWZpbGVSZWYgPSAzNTRGMjQ4OTAyRUUyODU5MEFDQTJBQ0E7Ci0JCQlpc2EgPSBQQlhC
dWlsZEZpbGU7Ci0JCQlzZXR0aW5ncyA9IHsKLQkJCX07Ci0JCX07CiAJCTkzRjE5OTMyMDgyNDVF
NTkwMDFFOUFCQyA9IHsKIAkJCWZpbGVSZWYgPSBGNTg3ODY4NTAyREUzQjg2MDFFQTQxMjI7CiAJ
CQlpc2EgPSBQQlhCdWlsZEZpbGU7CkBAIC00OTUxLDcgKzQ4OTIsNiBAQAogCQkJCTkzRjE5QThC
MDgyNDVFNTkwMDFFOUFCQywKIAkJCQk5M0YxOUE4QzA4MjQ1RTU5MDAxRTlBQkMsCiAJCQkJOTNG
MTlBOEQwODI0NUU1OTAwMUU5QUJDLAotCQkJCTkzRjE5QThFMDgyNDVFNTkwMDFFOUFCQywKIAkJ
CQk5M0YxOUE4RjA4MjQ1RTU5MDAxRTlBQkMsCiAJCQkJOTNGMTlBOTAwODI0NUU1OTAwMUU5QUJD
LAogCQkJCTkzRjE5QTkxMDgyNDVFNTkwMDFFOUFCQywKQEAgLTUwMDQsNyArNDk0NCw2IEBACiAJ
CQkJOTNGMTlBQzAwODI0NUU1OTAwMUU5QUJDLAogCQkJCTkzRjE5QUMxMDgyNDVFNTkwMDFFOUFC
QywKIAkJCQk5M0YxOUFDMjA4MjQ1RTU5MDAxRTlBQkMsCi0JCQkJOTNGMTlBQzMwODI0NUU1OTAw
MUU5QUJDLAogCQkJCTkzRjE5QUM0MDgyNDVFNTkwMDFFOUFCQywKIAkJCQk5M0YxOUFDNTA4MjQ1
RTU5MDAxRTlBQkMsCiAJCQkJOTNGMTlBQzYwODI0NUU1OTAwMUU5QUJDLApAQCAtNTc1MSwxMiAr
NTY5MCw2IEBACiAJCQlzZXR0aW5ncyA9IHsKIAkJCX07CiAJCX07Ci0JCTkzRjE5QThFMDgyNDVF
NTkwMDFFOUFCQyA9IHsKLQkJCWZpbGVSZWYgPSBGNTIzRDIzNTAyREU0Mzk2MDE4NjM1Q0E7Ci0J
CQlpc2EgPSBQQlhCdWlsZEZpbGU7Ci0JCQlzZXR0aW5ncyA9IHsKLQkJCX07Ci0JCX07CiAJCTkz
RjE5QThGMDgyNDVFNTkwMDFFOUFCQyA9IHsKIAkJCWZpbGVSZWYgPSBGNTIzRDIzNzAyREU0Mzk2
MDE4NjM1Q0E7CiAJCQlpc2EgPSBQQlhCdWlsZEZpbGU7CkBAIC02MDY5LDEyICs2MDAyLDYgQEAK
IAkJCXNldHRpbmdzID0gewogCQkJfTsKIAkJfTsKLQkJOTNGMTlBQzMwODI0NUU1OTAwMUU5QUJD
ID0gewotCQkJZmlsZVJlZiA9IDM1NEYyNDhBMDJFRTI4NTkwQUNBMkFDQTsKLQkJCWlzYSA9IFBC
WEJ1aWxkRmlsZTsKLQkJCXNldHRpbmdzID0gewotCQkJfTsKLQkJfTsKIAkJOTNGMTlBQzQwODI0
NUU1OTAwMUU5QUJDID0gewogCQkJZmlsZVJlZiA9IEY1MTE3QkNBMDJGOUZGRUYwMTg2MzVDRTsK
IAkJCWlzYSA9IFBCWEJ1aWxkRmlsZTsKQEAgLTc0NDYsOCArNzM3Myw2IEBACiAJCQkJMkQ5MDY2
MEMwNjY1RDkzNzAwNkI2RjFBLAogCQkJCUY1ODc4NENEMDJERTM3NTkwMUVBNDEyMiwKIAkJCQlG
NTg3ODREQTAyREUzNzU5MDFFQTQxMjIsCi0JCQkJMzU0RjI0ODkwMkVFMjg1OTBBQ0EyQUNBLAot
CQkJCTM1NEYyNDhBMDJFRTI4NTkwQUNBMkFDQSwKIAkJCQk5MzFDOEExNjAzODAyODhCMDA4NjM1
Q0UsCiAJCQkJOTMxQzhBMTcwMzgwMjg4QjAwODYzNUNFLAogCQkJCUJFRjdFRUEwMDVGRjhGMEQw
MDk3MTdFRSwKQEAgLTg0MTcsMjIgKzgzNDIsNiBAQAogCQkJcmVmVHlwZSA9IDQ7CiAJCQlzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOwogCQl9OwotCQlGNTIzRDIzNTAyREU0Mzk2MDE4NjM1Q0EgPSB7
Ci0JCQlmaWxlRW5jb2RpbmcgPSAzMDsKLQkJCWlzYSA9IFBCWEZpbGVSZWZlcmVuY2U7Ci0JCQls
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsKLQkJCXBhdGggPSBkdGQuY3Bw
OwotCQkJcmVmVHlwZSA9IDQ7Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwotCQl9OwotCQlG
NTIzRDIzNjAyREU0Mzk2MDE4NjM1Q0EgPSB7Ci0JCQlmaWxlRW5jb2RpbmcgPSAzMDsKLQkJCWlz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7Ci0JCQlsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOwotCQkJcGF0aCA9IGR0ZC5oOwotCQkJcmVmVHlwZSA9IDQ7Ci0JCQlzb3VyY2VUcmVlID0g
Ijxncm91cD4iOwotCQl9OwogCQlGNTIzRDIzNzAyREU0Mzk2MDE4NjM1Q0EgPSB7CiAJCQlmaWxl
RW5jb2RpbmcgPSAzMDsKIAkJCWlzYSA9IFBCWEZpbGVSZWZlcmVuY2U7CkBAIC04NjYxLDggKzg1
NzAsNiBAQAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJNTUwQTBCQ0IwODVGNjA0RDAwNzM1M0Q2LAog
CQkJCTU1MEEwQkNDMDg1RjYwNEQwMDczNTNENiwKLQkJCQlGNTIzRDIzNTAyREU0Mzk2MDE4NjM1
Q0EsCi0JCQkJRjUyM0QyMzYwMkRFNDM5NjAxODYzNUNBLAogCQkJCUY1MjNEMjM3MDJERTQzOTYw
MTg2MzVDQSwKIAkJCQlGNTIzRDIzODAyREU0Mzk2MDE4NjM1Q0EsCiAJCQkJRjUyM0QyMzkwMkRF
NDM5NjAxODYzNUNBLApJbmRleDoga2h0bWwva2h0bWx2aWV3LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9raHRtbHZpZXcuY3BwLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjEzMwpkaWZmIC11IC1wIC1yMS4xMzMga2h0bWwva2h0bWx2aWV3LmNwcAotLS0g
a2h0bWwva2h0bWx2aWV3LmNwcAkxMSBNYXkgMjAwNSAwMDo1ODoyNyAtMDAwMAkxLjEzMworKysg
a2h0bWwva2h0bWx2aWV3LmNwcAkxNyBKdW4gMjAwNSAwMTozMjoxNSAtMDAwMApAQCAtNjA3LDEy
ICs2MDcsMTIgQEAgdm9pZCBLSFRNTFZpZXc6OmxheW91dCgpCiAgICAgaWYgKGRvY3VtZW50LT5p
c0hUTUxEb2N1bWVudCgpKSB7CiAgICAgICAgIE5vZGVJbXBsICpib2R5ID0gc3RhdGljX2Nhc3Q8
SFRNTERvY3VtZW50SW1wbCo+KGRvY3VtZW50KS0+Ym9keSgpOwogICAgICAgICBpZiAoYm9keSAm
JiBib2R5LT5yZW5kZXJlcigpKSB7Ci0gICAgICAgICAgICBpZiAoYm9keS0+aWQoKSA9PSBJRF9G
UkFNRVNFVCkgeworICAgICAgICAgICAgaWYgKGJvZHktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpm
cmFtZXNldCgpKSkgewogICAgICAgICAgICAgICAgIGJvZHktPnJlbmRlcmVyKCktPnNldE5lZWRz
TGF5b3V0KHRydWUpOwogICAgICAgICAgICAgICAgIHZNb2RlID0gQWx3YXlzT2ZmOwogICAgICAg
ICAgICAgICAgIGhNb2RlID0gQWx3YXlzT2ZmOwogICAgICAgICAgICAgfQotICAgICAgICAgICAg
ZWxzZSBpZiAoYm9keS0+aWQoKSA9PSBJRF9CT0RZKSB7CisgICAgICAgICAgICBlbHNlIGlmIChi
b2R5LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Ym9keSgpKSkgewogICAgICAgICAgICAgICAgIFJl
bmRlck9iamVjdCogbyA9IChyb290UmVuZGVyZXItPnN0eWxlKCktPm92ZXJmbG93KCkgPT0gT1ZJ
U0lCTEUpID8gYm9keS0+cmVuZGVyZXIoKSA6IHJvb3RSZW5kZXJlcjsKICAgICAgICAgICAgICAg
ICBhcHBseU92ZXJmbG93VG9WaWV3cG9ydChvLCBoTW9kZSwgdk1vZGUpOyAvLyBPbmx5IGFwcGxp
ZXMgdG8gSFRNTCBVQXMsIG5vdCB0byBYTUwvWEhUTUwgVUFzCiAgICAgICAgICAgICB9CkBAIC04
NzcsMTAgKzg3Nyw3IEBAIHZvaWQgS0hUTUxWaWV3Ojp2aWV3cG9ydE1vdXNlRG91YmxlQ2xpY2sK
IAogc3RhdGljIGJvb2wgaXNTdWJtaXRJbWFnZShET006Ok5vZGVJbXBsICpub2RlKQogewotICAg
IHJldHVybiBub2RlCi0gICAgICAgICYmIG5vZGUtPmlzSFRNTEVsZW1lbnQoKQotICAgICAgICAm
JiBub2RlLT5pZCgpID09IElEX0lOUFVUCi0gICAgICAgICYmIHN0YXRpY19jYXN0PEhUTUxJbnB1
dEVsZW1lbnRJbXBsKj4obm9kZSktPmlucHV0VHlwZSgpID09IEhUTUxJbnB1dEVsZW1lbnRJbXBs
OjpJTUFHRTsKKyAgICByZXR1cm4gbm9kZSAmJiBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
aW5wdXQoKSkgJiYgc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudEltcGwqPihub2RlKS0+aW5w
dXRUeXBlKCkgPT0gSFRNTElucHV0RWxlbWVudEltcGw6OklNQUdFOwogfQogCiB2b2lkIEtIVE1M
Vmlldzo6dmlld3BvcnRNb3VzZU1vdmVFdmVudCggUU1vdXNlRXZlbnQgKiBfbW91c2UgKQpJbmRl
eDoga2h0bWwvY3NzL2Nzc19iYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3Qv
V2ViQ29yZS9raHRtbC9jc3MvY3NzX2Jhc2UuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE1
CmRpZmYgLXUgLXAgLXIxLjE1IGtodG1sL2Nzcy9jc3NfYmFzZS5jcHAKLS0tIGtodG1sL2Nzcy9j
c3NfYmFzZS5jcHAJMTIgSnVuIDIwMDUgMDQ6MDc6MzAgLTAwMDAJMS4xNQorKysga2h0bWwvY3Nz
L2Nzc19iYXNlLmNwcAkxNyBKdW4gMjAwNSAwMTozMjoxNiAtMDAwMApAQCAtOTMsNiArOTMsMTIg
QEAgU3R5bGVMaXN0SW1wbDo6flN0eWxlTGlzdEltcGwoKQogCiAvLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQogCitzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgYW55VGFnTmFtZSgpCit7Cisg
ICAgc3RhdGljIFF1YWxpZmllZE5hbWUgYW55TmFtZShudWxsQXRvbSwgc3RhckF0b20sIHN0YXJB
dG9tKTsKKyAgICByZXR1cm4gYW55TmFtZTsKK30KKwogdm9pZCBDU1NTZWxlY3Rvcjo6cHJpbnQo
dm9pZCkKIHsKICAgICBrZERlYnVnKCA2MDgwICkgPDwgIltTZWxlY3RvcjogdGFnID0gIiA8PCAg
ICAgICB0YWcgPDwgIiwgYXR0ciA9IFwiIiA8PCBhdHRyIDw8ICJcIiwgbWF0Y2ggPSBcIiIgPDwg
bWF0Y2gKSW5kZXg6IGtodG1sL2Nzcy9jc3NfYmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9XZWJDb3JlL2todG1sL2Nzcy9jc3NfYmFzZS5oLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjEyCmRpZmYgLXUgLXAgLXIxLjEyIGtodG1sL2Nzcy9jc3NfYmFzZS5oCi0tLSBraHRtbC9j
c3MvY3NzX2Jhc2UuaAkxMiBKdW4gMjAwNSAwNDowNzozMCAtMDAwMAkxLjEyCisrKyBraHRtbC9j
c3MvY3NzX2Jhc2UuaAkxNyBKdW4gMjAwNSAwMTozMjoxNiAtMDAwMApAQCAtMjcsNiArMjcsNyBA
QAogI2luY2x1ZGUgImRvbS9kb21fc3RyaW5nLmgiCiAjaW5jbHVkZSAiZG9tL2RvbV9taXNjLmgi
CiAjaW5jbHVkZSAieG1sL2RvbV9ub2RlaW1wbC5oIgorI2luY2x1ZGUgImRvbV9xbmFtZS5oIgog
I2luY2x1ZGUgIm1pc2Mvc2hhcmVkLmgiCiAjaW5jbHVkZSA8cWRhdGV0aW1lLmg+CiAjaW5jbHVk
ZSA8cXB0cmxpc3QuaD4KQEAgLTczLDcgKzc0LDcgQEAgbmFtZXNwYWNlIERPTSB7CiAgICAgewog
ICAgIHB1YmxpYzoKIAlDU1NTZWxlY3RvcigpCi0JICAgIDogdGFnSGlzdG9yeSgwKSwgc2ltcGxl
U2VsZWN0b3IoMCksIG5leHRTZWxlY3RvcigwKSwgYXR0cigwKSwgdGFnKGFueVFOYW1lKSwKKwkg
ICAgOiB0YWdIaXN0b3J5KDApLCBzaW1wbGVTZWxlY3RvcigwKSwgbmV4dFNlbGVjdG9yKDApLCBh
dHRyKDApLCB0YWcoYW55VGFnTmFtZSgpKSwKICAgICAgICAgICAgICAgcmVsYXRpb24oIERlc2Nl
bmRhbnQgKSwgbWF0Y2goIE5vbmUgKSwKICAgICAgICAgICAgICAgcHNldWRvSWQoIDAgKSwgX3Bz
ZXVkb1R5cGUoUHNldWRvTm90UGFyc2VkKQogICAgICAgICB7fQpAQCAtMTY3LDEyICsxNjgsMTcg
QEAgbmFtZXNwYWNlIERPTSB7CiAgICAgICAgICAgICByZXR1cm4gX3BzZXVkb1R5cGU7CiAgICAg
ICAgIH0KIAorICAgICAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgYW55VGFnTmFtZSgp
OworCisgICAgICAgIGJvb2wgaGFzVGFnKCkgY29uc3QgeyByZXR1cm4gdGFnICE9IGFueVRhZ05h
bWUoKTsgfQorCiAJbXV0YWJsZSBET006OkF0b21pY1N0cmluZyB2YWx1ZTsKIAlDU1NTZWxlY3Rv
ciogdGFnSGlzdG9yeTsKICAgICAgICAgQ1NTU2VsZWN0b3IqIHNpbXBsZVNlbGVjdG9yOyAvLyBV
c2VkIGZvciA6bm90LgogICAgICAgICBDU1NTZWxlY3RvciogbmV4dFNlbGVjdG9yOyAvLyB1c2Vk
IGZvciAsLWNoYWluZWQgc2VsZWN0b3JzCiAJUV9VSU5UMzIgICAgIGF0dHI7Ci0JUV9VSU5UMzIg
ICAgIHRhZzsKKwkKKyAgICAgICAgUXVhbGlmaWVkTmFtZSB0YWc7CiAKICAgICAgICAgUmVsYXRp
b24gcmVsYXRpb24gICAgICAgICAgICAgIDogMzsKIAltdXRhYmxlIE1hdGNoICBtYXRjaCAgICAg
ICAgICAgOiA0OwpJbmRleDoga2h0bWwvY3NzL2Nzc19ydWxlaW1wbC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvY3NzL2Nzc19ydWxlaW1wbC5jcHAsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuMTgKZGlmZiAtdSAtcCAtcjEuMTgga2h0bWwvY3NzL2Nzc19y
dWxlaW1wbC5jcHAKLS0tIGtodG1sL2Nzcy9jc3NfcnVsZWltcGwuY3BwCTExIE1heSAyMDA1IDA1
OjQ5OjM0IC0wMDAwCTEuMTgKKysrIGtodG1sL2Nzcy9jc3NfcnVsZWltcGwuY3BwCTE3IEp1biAy
MDA1IDAxOjMyOjE2IC0wMDAwCkBAIC0zMSw3ICszMSw2IEBACiAjaW5jbHVkZSAiY3NzL2Nzc19y
dWxlaW1wbC5oIgogCiAjaW5jbHVkZSAibWlzYy9sb2FkZXIuaCIKLSNpbmNsdWRlICJtaXNjL2h0
bWx0YWdzLmgiCiAjaW5jbHVkZSAibWlzYy9odG1sYXR0cnMuaCIKICNpbmNsdWRlICJ4bWwvZG9t
X2RvY2ltcGwuaCIKIApJbmRleDoga2h0bWwvY3NzL2Nzc3N0eWxlc2VsZWN0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2Nzcy9jc3NzdHlsZXNlbGVj
dG9yLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xODcKZGlmZiAtdSAtcCAtcjEuMTg3IGto
dG1sL2Nzcy9jc3NzdHlsZXNlbGVjdG9yLmNwcAotLS0ga2h0bWwvY3NzL2Nzc3N0eWxlc2VsZWN0
b3IuY3BwCTEyIEp1biAyMDA1IDA0OjA3OjMwIC0wMDAwCTEuMTg3CisrKyBraHRtbC9jc3MvY3Nz
c3R5bGVzZWxlY3Rvci5jcHAJMTcgSnVuIDIwMDUgMDE6MzI6MjAgLTAwMDAKQEAgLTMzOSw3ICsz
MzksNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUnVsZXMoQ1NTUnVsCiAgICAgICAg
ICAgICBtYXRjaFJ1bGVzRm9yTGlzdChydWxlcy0+Z2V0Q2xhc3NSdWxlcyhzaW5nbGVDbGFzcy0+
c3RyaW5nKCkuaW1wbGVtZW50YXRpb24oKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCk7CiAg
ICAgfQotICAgIG1hdGNoUnVsZXNGb3JMaXN0KHJ1bGVzLT5nZXRUYWdSdWxlcygodm9pZCopKGlu
dClsb2NhbE5hbWVQYXJ0KGVsZW1lbnQtPmlkKCkpKSwKKyAgICBtYXRjaFJ1bGVzRm9yTGlzdChy
dWxlcy0+Z2V0VGFnUnVsZXMoZWxlbWVudC0+bG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSks
CiAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgpOwog
ICAgIG1hdGNoUnVsZXNGb3JMaXN0KHJ1bGVzLT5nZXRVbml2ZXJzYWxSdWxlcygpLCBmaXJzdFJ1
bGVJbmRleCwgbGFzdFJ1bGVJbmRleCk7CiAgICAgCkBAIC0zNjAsOSArMzYwLDkgQEAgdm9pZCBD
U1NTdHlsZVNlbGVjdG9yOjptYXRjaFJ1bGVzRm9yTGlzdAogICAgIGlmICghcnVsZXMpIHJldHVy
bjsKICAgICBmb3IgKENTU1J1bGVEYXRhKiBkID0gcnVsZXMtPmZpcnN0KCk7IGQ7IGQgPSBkLT5u
ZXh0KCkpIHsKICAgICAgICAgQ1NTU3R5bGVSdWxlSW1wbCogcnVsZSA9IGQtPnJ1bGUoKTsKLSAg
ICAgICAgUV9VSU5UMTYgY3NzVGFnSWQgPSBsb2NhbE5hbWVQYXJ0KGVsZW1lbnQtPmlkKCkpOwot
ICAgICAgICBRX1VJTlQxNiB0YWcgPSBsb2NhbE5hbWVQYXJ0KGQtPnNlbGVjdG9yKCktPnRhZyk7
Ci0gICAgICAgIGlmICgoY3NzVGFnSWQgPT0gdGFnIHx8IHRhZyA9PSBhbnlMb2NhbE5hbWUpICYm
IGNoZWNrU2VsZWN0b3IoZC0+c2VsZWN0b3IoKSwgZWxlbWVudCkpIHsKKyAgICAgICAgY29uc3Qg
QXRvbWljU3RyaW5nJiBsb2NhbE5hbWUgPSBlbGVtZW50LT5sb2NhbE5hbWUoKTsKKyAgICAgICAg
Y29uc3QgQXRvbWljU3RyaW5nJiBzZWxlY3RvckxvY2FsTmFtZSA9IGQtPnNlbGVjdG9yKCktPnRh
Zy5sb2NhbE5hbWUoKTsKKyAgICAgICAgaWYgKChsb2NhbE5hbWUgPT0gc2VsZWN0b3JMb2NhbE5h
bWUgfHwgc2VsZWN0b3JMb2NhbE5hbWUgPT0gc3RhckF0b20pICYmIGNoZWNrU2VsZWN0b3IoZC0+
c2VsZWN0b3IoKSwgZWxlbWVudCkpIHsKICAgICAgICAgICAgIC8vIElmIHRoZSBydWxlIGhhcyBu
byBwcm9wZXJ0aWVzIHRvIGFwcGx5LCB0aGVuIGlnbm9yZSBpdC4KICAgICAgICAgICAgIENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uSW1wbCogZGVjbCA9IHJ1bGUtPmRlY2xhcmF0aW9uKCk7CiAg
ICAgICAgICAgICBpZiAoIWRlY2wgfHwgIWRlY2wtPmxlbmd0aCgpKSBjb250aW51ZTsKQEAgLTYw
OSw3ICs2MDksNyBAQCBib29sIENTU1N0eWxlU2VsZWN0b3I6OmNhblNoYXJlU3R5bGVXaXRoCiAg
ICAgaWYgKG4tPmlzU3R5bGVkRWxlbWVudCgpKSB7CiAgICAgICAgIGJvb2wgbW91c2VJbnNpZGUg
PSBlbGVtZW50LT5yZW5kZXJlcigpID8gZWxlbWVudC0+cmVuZGVyZXIoKS0+bW91c2VJbnNpZGUo
KSA6IGZhbHNlOwogICAgICAgICBTdHlsZWRFbGVtZW50SW1wbCogcyA9IHN0YXRpY19jYXN0PFN0
eWxlZEVsZW1lbnRJbXBsKj4obik7Ci0gICAgICAgIGlmIChzLT5yZW5kZXJlcigpICYmIChzLT5p
ZCgpID09IGVsZW1lbnQtPmlkKCkpICYmICFzLT5oYXNJRCgpICYmCisgICAgICAgIGlmIChzLT5y
ZW5kZXJlcigpICYmIChzLT50YWdOYW1lKCkgPT0gZWxlbWVudC0+dGFnTmFtZSgpKSAmJiAhcy0+
aGFzSUQoKSAmJgogICAgICAgICAgICAgKHMtPmhhc0NsYXNzKCkgPT0gZWxlbWVudC0+aGFzQ2xh
c3MoKSkgJiYgIXMtPmlubGluZVN0eWxlRGVjbCgpICYmCiAgICAgICAgICAgICAocy0+aGFzTWFw
cGVkQXR0cmlidXRlcygpID09IHN0eWxlZEVsZW1lbnQtPmhhc01hcHBlZEF0dHJpYnV0ZXMoKSkg
JiYKICAgICAgICAgICAgIChzLT5pc0xpbmsoKSA9PSBlbGVtZW50LT5pc0xpbmsoKSkgJiYgCkBA
IC04ODUsMjMgKzg4NSwyMyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFkanVzdFJlbmRlclN0
eWxlCiAgICAgICAgIC8vIFNpdGVzIGFsc28gY29tbW9ubHkgdXNlIGRpc3BsYXk6aW5saW5lL2Js
b2NrIG9uIDx0ZD5zIGFuZCA8dGFibGU+cy4gIEluIHF1aXJrcyBtb2RlIHdlIGZvcmNlCiAgICAg
ICAgIC8vIHRoZXNlIHRhZ3MgdG8gcmV0YWluIHRoZWlyIGRpc3BsYXkgdHlwZXMuCiAgICAgICAg
IGlmICghc3RyaWN0UGFyc2luZyAmJiBlKSB7Ci0gICAgICAgICAgICBpZiAoZS0+aWQoKSA9PSBJ
RF9URCkgeworICAgICAgICAgICAgaWYgKGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0ZCgpKSkg
ewogICAgICAgICAgICAgICAgIHN0eWxlLT5zZXREaXNwbGF5KFRBQkxFX0NFTEwpOwogICAgICAg
ICAgICAgICAgIHN0eWxlLT5zZXRGbG9hdGluZyhGTk9ORSk7CiAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBlbHNlIGlmIChlLT5pZCgpID09IElEX1RBQkxFKQorICAgICAgICAgICAgZWxzZSBp
ZiAoZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRhYmxlKCkpKQogICAgICAgICAgICAgICAgIHN0
eWxlLT5zZXREaXNwbGF5KHN0eWxlLT5pc0Rpc3BsYXlJbmxpbmVUeXBlKCkgPyBJTkxJTkVfVEFC
TEUgOiBUQUJMRSk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBGcmFtZXMgYW5kIGZyYW1lc2V0
cyBuZXZlciBob25vciBwb3NpdGlvbjpyZWxhdGl2ZSBvciBwb3NpdGlvbjphYnNvbHV0ZS4gIFRo
aXMgaXMgbmVjZXNzYXJ5IHRvCiAgICAgICAgIC8vIGZpeCBhIGNyYXNoIHdoZXJlIGEgc2l0ZSB0
cmllcyB0byBwb3NpdGlvbiB0aGVzZSBvYmplY3RzLiAgVGhleSBhbHNvIG5ldmVyIGhvbm9yIGRp
c3BsYXkuCi0gICAgICAgIGlmIChlICYmIChlLT5pZCgpID09IElEX0ZSQU1FIHx8IGUtPmlkKCkg
PT0gSURfRlJBTUVTRVQpKSB7CisgICAgICAgIGlmIChlICYmIChlLT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6ZnJhbWUoKSkgfHwgZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZyYW1lc2V0KCkpKSkg
ewogICAgICAgICAgICAgc3R5bGUtPnNldFBvc2l0aW9uKFNUQVRJQyk7CiAgICAgICAgICAgICBz
dHlsZS0+c2V0RGlzcGxheShCTE9DSyk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBUYWJsZSBo
ZWFkZXJzIHdpdGggYSB0ZXh0LWFsaWduIG9mIGF1dG8gd2lsbCBjaGFuZ2UgdGhlIHRleHQtYWxp
Z24gdG8gY2VudGVyLgotICAgICAgICBpZiAoZSAmJiBlLT5pZCgpID09IElEX1RIICYmIHN0eWxl
LT50ZXh0QWxpZ24oKSA9PSBUQUFVVE8pCisgICAgICAgIGlmIChlICYmIGUtPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjp0aCgpKSAmJiBzdHlsZS0+dGV4dEFsaWduKCkgPT0gVEFBVVRPKQogICAgICAg
ICAgICAgc3R5bGUtPnNldFRleHRBbGlnbihDRU5URVIpOwogICAgICAgICAKICAgICAgICAgLy8g
TXV0YXRlIHRoZSBkaXNwbGF5IHRvIEJMT0NLIG9yIFRBQkxFIGZvciBjZXJ0YWluIGNhc2VzLCBl
LmcuLCBpZiBzb21lb25lIGF0dGVtcHRzIHRvCkBAIC05NzksNyArOTc5LDcgQEAgYm9vbCBDU1NT
dHlsZVNlbGVjdG9yOjpjaGVja1NlbGVjdG9yKENTUwogICAgIC8vIFdlIHRyYWNrIHdoZXRoZXIg
b3Igbm90IHRoZSBydWxlIGNvbnRhaW5zIG9ubHkgOmhvdmVyIGFuZCA6YWN0aXZlIGluIGEgc2lt
cGxlIHNlbGVjdG9yLiBJZgogICAgIC8vIHNvLCB3ZSBjYW4ndCBhbGxvdyB0aGF0IHRvIGFwcGx5
IHRvIGV2ZXJ5IGVsZW1lbnQgb24gdGhlIHBhZ2UuICBXZSBhc3N1bWUgdGhlIGF1dGhvciBpbnRl
bmRlZAogICAgIC8vIHRvIGFwcGx5IHRoZSBydWxlcyBvbmx5IHRvIGxpbmtzLgotICAgIGJvb2wg
b25seUhvdmVyQWN0aXZlID0gKHNlbC0+dGFnID09IGFueVFOYW1lICYmCisgICAgYm9vbCBvbmx5
SG92ZXJBY3RpdmUgPSAoIXNlbC0+aGFzVGFnKCkgJiYKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAoc2VsLT5tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3MgJiYKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIChzZWwtPnBzZXVkb1R5cGUoKSA9PSBDU1NTZWxlY3Rvcjo6
UHNldWRvSG92ZXIgfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWwtPnBzZXVk
b1R5cGUoKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQWN0aXZlKSkpOwpAQCAtMTA5NiwxOSArMTA5
NiwxNCBAQCBib29sIENTU1N0eWxlU2VsZWN0b3I6OmNoZWNrT25lU2VsZWN0b3IoCiAgICAgaWYo
IWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChzZWwtPnRhZyAhPSBhbnlRTmFt
ZSkgewotICAgICAgICBpbnQgZWx0SUQgPSBlLT5pZCgpOwotICAgICAgICBRX1VJTlQxNiBsb2Nh
bE5hbWUgPSBsb2NhbE5hbWVQYXJ0KGVsdElEKTsKLSAgICAgICAgUV9VSU5UMTYgbnMgPSBuYW1l
c3BhY2VQYXJ0KGVsdElEKTsKLSAgICAgICAgUV9VSU5UMTYgc2VsTG9jYWxOYW1lID0gbG9jYWxO
YW1lUGFydChzZWwtPnRhZyk7Ci0gICAgICAgIFFfVUlOVDE2IHNlbE5TID0gbmFtZXNwYWNlUGFy
dChzZWwtPnRhZyk7Ci0gICAgICAgIAotICAgICAgICBpZiAobG9jYWxOYW1lIDw9IElEX0xBU1Rf
VEFHICYmIGUtPmlzSFRNTEVsZW1lbnQoKSkKLSAgICAgICAgICAgIG5zID0geGh0bWxOYW1lc3Bh
Y2U7IC8vIEZJWE1FOiBSZWFsbHkgd2FudCB0byBtb3ZlIGF3YXkgZnJvbSB0aGlzIGNvbXBsaWNh
dGVkIGhhY2tlcnkgYW5kIGp1c3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IHN3aXRjaCB0YWdzIGFuZCBhdHRyIG5hbWVzIG92ZXIgdG8gQXRvbWljU3RyaW5ncy4KLSAgICAg
ICAgCi0gICAgICAgIGlmICgoc2VsTG9jYWxOYW1lICE9IGFueUxvY2FsTmFtZSAmJiBsb2NhbE5h
bWUgIT0gc2VsTG9jYWxOYW1lKSB8fAotICAgICAgICAgICAgKHNlbE5TICE9IGFueU5hbWVzcGFj
ZSAmJiBucyAhPSBzZWxOUykpCisgICAgaWYgKHNlbC0+aGFzVGFnKCkpIHsKKyAgICAgICAgY29u
c3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUgPSBlLT5sb2NhbE5hbWUoKTsKKyAgICAgICAgY29u
c3QgQXRvbWljU3RyaW5nJiBucyA9IGUtPm5hbWVzcGFjZVVSSSgpOworICAgICAgICBjb25zdCBB
dG9taWNTdHJpbmcmIHNlbExvY2FsTmFtZSA9IHNlbC0+dGFnLmxvY2FsTmFtZSgpOworICAgICAg
ICBjb25zdCBBdG9taWNTdHJpbmcmIHNlbE5TID0gc2VsLT50YWcubmFtZXNwYWNlVVJJKCk7Cisg
ICAgCisgICAgICAgIGlmICgoc2VsTG9jYWxOYW1lICE9IHN0YXJBdG9tICYmIGxvY2FsTmFtZSAh
PSBzZWxMb2NhbE5hbWUpIHx8CisgICAgICAgICAgICAoc2VsTlMgIT0gc3RhckF0b20gJiYgbnMg
IT0gc2VsTlMpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtMTI5NSw3
ICsxMjkwLDcgQEAgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpjaGVja09uZVNlbGVjdG9yKAogICAg
ICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvSG92ZXI6IHsKICAgICAgICAgICAgICAg
ICAvLyBJZiB3ZSdyZSBpbiBxdWlya3MgbW9kZSwgdGhlbiBob3ZlciBzaG91bGQgbmV2ZXIgbWF0
Y2ggYW5jaG9ycyB3aXRoIG5vCiAgICAgICAgICAgICAgICAgLy8gaHJlZi4gIFRoaXMgaXMgaW1w
b3J0YW50IGZvciBzaXRlcyBsaWtlIHdzai5jb20uCi0gICAgICAgICAgICAgICAgaWYgKHN0cmlj
dFBhcnNpbmcgfHwgZS0+aWQoKSAhPSBJRF9BIHx8IGUtPmlzTGluaygpKSB7CisgICAgICAgICAg
ICAgICAgaWYgKHN0cmljdFBhcnNpbmcgfHwgIWUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjphKCkp
IHx8IGUtPmlzTGluaygpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50ID09IGUg
JiYgc3R5bGUpCiAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZS0+c2V0QWZmZWN0ZWRCeUhv
dmVyUnVsZXModHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChlLT5yZW5kZXJlcigpKSB7
CkBAIC0xMzI2LDcgKzEzMjEsNyBAQCBib29sIENTU1N0eWxlU2VsZWN0b3I6OmNoZWNrT25lU2Vs
ZWN0b3IoCiAgICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9BY3RpdmU6CiAgICAg
ICAgICAgICAgICAgLy8gSWYgd2UncmUgaW4gcXVpcmtzIG1vZGUsIHRoZW4gOmFjdGl2ZSBzaG91
bGQgbmV2ZXIgbWF0Y2ggYW5jaG9ycyB3aXRoIG5vCiAgICAgICAgICAgICAgICAgLy8gaHJlZi4g
Ci0gICAgICAgICAgICAgICAgaWYgKHN0cmljdFBhcnNpbmcgfHwgZS0+aWQoKSAhPSBJRF9BIHx8
IGUtPmlzTGluaygpKSB7CisgICAgICAgICAgICAgICAgaWYgKHN0cmljdFBhcnNpbmcgfHwgIWUt
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjphKCkpIHx8IGUtPmlzTGluaygpKSB7CiAgICAgICAgICAg
ICAgICAgICAgIGlmIChlbGVtZW50ID09IGUgJiYgc3R5bGUpCiAgICAgICAgICAgICAgICAgICAg
ICAgICBzdHlsZS0+c2V0QWZmZWN0ZWRCeUFjdGl2ZVJ1bGVzKHRydWUpOwogICAgICAgICAgICAg
ICAgICAgICBlbHNlIGlmIChlLT5yZW5kZXJlcigpKQpAQCAtMTQyNSw5ICsxNDIwLDkgQEAgdm9p
ZCBDU1NSdWxlU2V0OjphZGRSdWxlKENTU1N0eWxlUnVsZUltcAogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgICAKLSAgICBRX1VJTlQxNiBsb2NhbE5hbWUgPSBsb2NhbE5hbWVQYXJ0KHNlbC0+
dGFnKTsKLSAgICBpZiAobG9jYWxOYW1lICE9IGFueUxvY2FsTmFtZSkgewotICAgICAgICBhZGRU
b1J1bGVTZXQoKHZvaWQqKShpbnQpbG9jYWxOYW1lLCBtX3RhZ1J1bGVzLCBydWxlLCBzZWwpOwor
ICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lID0gc2VsLT50YWcubG9jYWxOYW1lKCk7
CisgICAgaWYgKGxvY2FsTmFtZSAhPSBzdGFyQXRvbSkgeworICAgICAgICBhZGRUb1J1bGVTZXQo
bG9jYWxOYW1lLmltcGxlbWVudGF0aW9uKCksIG1fdGFnUnVsZXMsIHJ1bGUsIHNlbCk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAgICAgCkluZGV4OiBraHRtbC9kb20vY3NzX3N0eWxlc2hlZXQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2RvbS9jc3Nf
c3R5bGVzaGVldC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuOApkaWZmIC11IC1wIC1yMS44
IGtodG1sL2RvbS9jc3Nfc3R5bGVzaGVldC5jcHAKLS0tIGtodG1sL2RvbS9jc3Nfc3R5bGVzaGVl
dC5jcHAJMjAgTWF5IDIwMDQgMTU6MDk6MzIgLTAwMDAJMS44CisrKyBraHRtbC9kb20vY3NzX3N0
eWxlc2hlZXQuY3BwCTE3IEp1biAyMDA1IDAxOjMyOjIwIC0wMDAwCkBAIC0zODUsNyArMzg1LDcg
QEAgTGlua1N0eWxlICYgTGlua1N0eWxlOjpvcGVyYXRvciA9IChjb25zdAogCiAgICAgLy8gIyMj
IGNoZWNrIGxpbmsgaXMgcmVhbGx5IGxpbmtpbmcgYSBzdHlsZSBzaGVldAogICAgIGlmKCBuICYm
IG4tPmlzRWxlbWVudE5vZGUoKSAmJgotCShuLT5pZCgpID09IElEX1NUWUxFIHx8IG4tPmlkKCkg
PT0gSURfTElOSykgKSB7CisJKG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzdHlsZSgpKSB8fCBu
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6bGluaygpKSkpIHsKICAgICBub2RlID0gbjsKICAgICBp
Zihub2RlKSBub2RlLT5yZWYoKTsKICAgICB9CkBAIC0zOTksMTIgKzM5OSwxNCBAQCBMaW5rU3R5
bGU6On5MaW5rU3R5bGUoKQogCiBTdHlsZVNoZWV0IExpbmtTdHlsZTo6c2hlZXQoKQogewotICAg
IGludCBpZCA9IG5vZGUgPyBub2RlLT5pZCgpIDogMDsKKyAgICBpZiAoIW5vZGUpCisgICAgICAg
IHJldHVybiBTdHlsZVNoZWV0KCk7CisKICAgICAvLyAjIyMgYWRkIFBJCiAgICAgcmV0dXJuIAot
CSggaWQgPT0gSURfU1RZTEUpID8KKwkobm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnN0eWxl
KCkpKSA/CiAJc3RhdGljX2Nhc3Q8SFRNTFN0eWxlRWxlbWVudEltcGwgKj4obm9kZSktPnNoZWV0
KCkKLQk6ICggKGlkID09IElEX0xJTkspID8KKwk6ICggbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OmxpbmsoKSkgPwogCSAgICBzdGF0aWNfY2FzdDxIVE1MTGlua0VsZW1lbnRJbXBsICo+KG5v
ZGUpLT5zaGVldCgpCiAJICAgIDogU3R5bGVTaGVldCgpICk7CiB9CkluZGV4OiBraHRtbC9kb20v
ZG9tX2VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2to
dG1sL2RvbS9kb21fZWxlbWVudC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTIKZGlmZiAt
dSAtcCAtcjEuMTIga2h0bWwvZG9tL2RvbV9lbGVtZW50LmNwcAotLS0ga2h0bWwvZG9tL2RvbV9l
bGVtZW50LmNwcAkxMiBNYXkgMjAwNSAxNzoxMToyMSAtMDAwMAkxLjEyCisrKyBraHRtbC9kb20v
ZG9tX2VsZW1lbnQuY3BwCTE3IEp1biAyMDA1IDAxOjMyOjIwIC0wMDAwCkBAIC0xNDEsNyArMTQx
LDcgQEAgRWxlbWVudDo6fkVsZW1lbnQoKQogRE9NU3RyaW5nIEVsZW1lbnQ6OnRhZ05hbWUoKSBj
b25zdAogewogICAgIGlmICghaW1wbCkgdGhyb3cgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbjo6
Tk9UX0ZPVU5EX0VSUik7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsKj4oaW1w
bCktPnRhZ05hbWUoKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RWxlbWVudEltcGwqPihpbXBs
KS0+bm9kZU5hbWUoKTsKIH0KIAogRE9NU3RyaW5nIEVsZW1lbnQ6OmdldEF0dHJpYnV0ZSggY29u
c3QgRE9NU3RyaW5nICZuYW1lICkKSW5kZXg6IGtodG1sL2RvbS9kb21fbm9kZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZG9tL2RvbV9ub2RlLmNwcCx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMgpkaWZmIC11IC1wIC1yMS4xMiBraHRtbC9kb20vZG9t
X25vZGUuY3BwCi0tLSBraHRtbC9kb20vZG9tX25vZGUuY3BwCTExIE1heSAyMDA1IDAwOjU4OjI4
IC0wMDAwCTEuMTIKKysrIGtodG1sL2RvbS9kb21fbm9kZS5jcHAJMTcgSnVuIDIwMDUgMDE6MzI6
MjEgLTAwMDAKQEAgLTMyNCw3ICszMjQsNyBAQCBib29sIE5vZGU6OmlzU3VwcG9ydGVkKCBjb25z
dCBET01TdHJpbmcgCiBET01TdHJpbmcgTm9kZTo6bmFtZXNwYWNlVVJJKCAgKSBjb25zdAogewog
ICAgIGlmICghaW1wbCkgcmV0dXJuIERPTVN0cmluZygpOwotICAgIHJldHVybiBpbXBsLT5nZXRE
b2N1bWVudCgpLT5uYW1lc3BhY2VVUkkoaW1wbC0+aWQoKSk7CisgICAgcmV0dXJuIGltcGwtPm5h
bWVzcGFjZVVSSSgpOwogfQogCiBET01TdHJpbmcgTm9kZTo6cHJlZml4KCAgKSBjb25zdApAQCAt
MzM3LDcgKzMzNyw3IEBAIHZvaWQgTm9kZTo6c2V0UHJlZml4KGNvbnN0IERPTVN0cmluZyAmcHIK
IHsKICAgICBpZiAoIWltcGwpIHRocm93IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb246Ok5PVF9G
T1VORF9FUlIpOwogICAgIGludCBleGNlcHRpb25jb2RlID0gMDsKLSAgICBpbXBsLT5zZXRQcmVm
aXgocHJlZml4LGV4Y2VwdGlvbmNvZGUpOworICAgIGltcGwtPnNldFByZWZpeChwcmVmaXguaW1w
bGVtZW50YXRpb24oKSxleGNlcHRpb25jb2RlKTsKICAgICBpZiAoZXhjZXB0aW9uY29kZSkKICAg
ICAgICAgdGhyb3cgRE9NRXhjZXB0aW9uKGV4Y2VwdGlvbmNvZGUpOwogfQpAQCAtMzc2LDEzICsz
NzYsNiBAQCBib29sIE5vZGU6OmRpc3BhdGNoRXZlbnQoY29uc3QgRXZlbnQgJmV2CiAgICAgcmV0
dXJuIHI7CiB9CiAKLQotdW5zaWduZWQgaW50IE5vZGU6OmVsZW1lbnRJZCgpIGNvbnN0Ci17Ci0g
ICAgaWYgKCFpbXBsKSByZXR1cm4gMDsKLSAgICByZXR1cm4gaW1wbC0+aWQoKTsKLX0KLQogdW5z
aWduZWQgbG9uZyBOb2RlOjppbmRleCgpIGNvbnN0CiB7CiAgICAgaWYgKCFpbXBsKSByZXR1cm4g
MDsKSW5kZXg6IGtodG1sL2RvbS9kb21fbm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9XZWJDb3JlL2todG1sL2RvbS9kb21fbm9kZS5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjEyCmRpZmYgLXUgLXAgLXIxLjEyIGtodG1sL2RvbS9kb21fbm9kZS5oCi0tLSBraHRtbC9kb20v
ZG9tX25vZGUuaAkxOCBNYXkgMjAwNSAyMToxMDoyNCAtMDAwMAkxLjEyCisrKyBraHRtbC9kb20v
ZG9tX25vZGUuaAkxNyBKdW4gMjAwNSAwMTozMjoyMyAtMDAwMApAQCAtODU1LDEzICs4NTUsNiBA
QCBwdWJsaWM6CiAgICAgYm9vbCBkaXNwYXRjaEV2ZW50KGNvbnN0IEV2ZW50ICZldnQpOwogCiAg
ICAgLyoqCi0gICAgICogQGludGVybmFsCi0gICAgICogbm90IHBhcnQgb2YgdGhlIERPTS4KLSAg
ICAgKiBAcmV0dXJucyB0aGUgZWxlbWVudCBpZCwgaW4gY2FzZSB0aGlzIGlzIGFuIGVsZW1lbnQs
IDAgb3RoZXJ3aXNlCi0gICAgICovCi0gICAgUV9VSU5UMzIgZWxlbWVudElkKCkgY29uc3Q7Ci0K
LSAgICAvKioKICAgICAgKiB0ZXN0cyBpZiB0aGlzIE5vZGUgaXMgMC4gVXNlZnVsIGVzcGVjaWFs
bHksIGlmIGNhc3RpbmcgdG8gYSBkZXJpdmVkCiAgICAgICogY2xhc3M6CiAgICAgICoKSW5kZXg6
IGtodG1sL2RvbS9odG1sX2Jhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9X
ZWJDb3JlL2todG1sL2RvbS9odG1sX2Jhc2UuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjYK
ZGlmZiAtdSAtcCAtcjEuNiBraHRtbC9kb20vaHRtbF9iYXNlLmNwcAotLS0ga2h0bWwvZG9tL2h0
bWxfYmFzZS5jcHAJMyBOb3YgMjAwMyAwNjozMjowNCAtMDAwMAkxLjYKKysrIGtodG1sL2RvbS9o
dG1sX2Jhc2UuY3BwCTE3IEp1biAyMDA1IDAxOjMyOjIzIC0wMDAwCkBAIC00MSw3ICs0MSw3IEBA
IEhUTUxCb2R5RWxlbWVudDo6SFRNTEJvZHlFbGVtZW50KEhUTUxCb2QKIAogSFRNTEJvZHlFbGVt
ZW50ICZIVE1MQm9keUVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewot
ICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfQk9EWSApOworICAgIGFzc2lnbk90aGVyKCBvdGhl
ciwgSFRNTE5hbWVzOjpib2R5KCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTEzNSw3
ICsxMzUsNyBAQCBIVE1MRnJhbWVFbGVtZW50OjpIVE1MRnJhbWVFbGVtZW50KEhUTUxGCiAKIEhU
TUxGcmFtZUVsZW1lbnQgJkhUTUxGcmFtZUVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUg
Jm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfRlJBTUUgKTsKKyAgICBhc3Np
Z25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6ZnJhbWUoKSApOwogICAgIHJldHVybiAqdGhpczsK
IH0KIApAQCAtMjY1LDcgKzI2NSw3IEBAIEhUTUxJRnJhbWVFbGVtZW50OjpIVE1MSUZyYW1lRWxl
bWVudChIVE0KIAogSFRNTElGcmFtZUVsZW1lbnQgJkhUTUxJRnJhbWVFbGVtZW50OjpvcGVyYXRv
ciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0lG
UkFNRSApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjppZnJhbWUoKSApOwog
ICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtNDE0LDcgKzQxNCw3IEBAIEhUTUxGcmFtZVNldEVs
ZW1lbnQ6OkhUTUxGcmFtZVNldEVsZW1lbnQKIAogSFRNTEZyYW1lU2V0RWxlbWVudCAmSFRNTEZy
YW1lU2V0RWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNz
aWduT3RoZXIoIG90aGVyLCBJRF9GUkFNRVNFVCApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwg
SFRNTE5hbWVzOjpmcmFtZXNldCgpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC00NjYs
NyArNDY2LDcgQEAgSFRNTEhlYWRFbGVtZW50OjpIVE1MSGVhZEVsZW1lbnQoSFRNTEhlYQogCiBI
VE1MSGVhZEVsZW1lbnQgJkhUTUxIZWFkRWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAm
b3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9IRUFEICk7CisgICAgYXNzaWdu
T3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OmhlYWQoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0K
IApAQCAtNTA3LDcgKzUwNyw3IEBAIEhUTUxIdG1sRWxlbWVudDo6SFRNTEh0bWxFbGVtZW50KEhU
TUxIdG0KIAogSFRNTEh0bWxFbGVtZW50ICZIVE1MSHRtbEVsZW1lbnQ6Om9wZXJhdG9yID0gKGNv
bnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfSFRNTCApOwor
ICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpodG1sKCkgKTsKICAgICByZXR1cm4g
KnRoaXM7CiB9CiAKSW5kZXg6IGtodG1sL2RvbS9odG1sX2Jsb2NrLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9kb20vaHRtbF9ibG9jay5jcHAsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuNApkaWZmIC11IC1wIC1yMS40IGtodG1sL2RvbS9odG1sX2Jsb2Nr
LmNwcAotLS0ga2h0bWwvZG9tL2h0bWxfYmxvY2suY3BwCTEwIEp1biAyMDAyIDIwOjA3OjM0IC0w
MDAwCTEuNAorKysga2h0bWwvZG9tL2h0bWxfYmxvY2suY3BwCTE3IEp1biAyMDA1IDAxOjMyOjI0
IC0wMDAwCkBAIC00Myw3ICs0Myw3IEBAIEhUTUxCbG9ja3F1b3RlRWxlbWVudDo6SFRNTEJsb2Nr
cXVvdGVFbGUKIAogSFRNTEJsb2NrcXVvdGVFbGVtZW50ICZIVE1MQmxvY2txdW90ZUVsZW1lbnQ6
Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhl
ciwgSURfQkxPQ0tRVU9URSApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpi
bG9ja3F1b3RlKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTg0LDcgKzg0LDcgQEAg
SFRNTERpdkVsZW1lbnQ6OkhUTUxEaXZFbGVtZW50KEhUTUxEaXZFbAogCiBIVE1MRGl2RWxlbWVu
dCAmSFRNTERpdkVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAg
IGFzc2lnbk90aGVyKCBvdGhlciwgSURfRElWICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBI
VE1MTmFtZXM6OmRpdigpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC0xMjUsNyArMTI1
LDcgQEAgSFRNTEhSRWxlbWVudDo6SFRNTEhSRWxlbWVudChIVE1MSFJFbGVtZQogCiBIVE1MSFJF
bGVtZW50ICZIVE1MSFJFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsK
LSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0hSICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVy
LCBIVE1MTmFtZXM6OmhyKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTIwNSwxNiAr
MjA1LDE3IEBAIEhUTUxIZWFkaW5nRWxlbWVudDo6SFRNTEhlYWRpbmdFbGVtZW50KEgKIAogSFRN
TEhlYWRpbmdFbGVtZW50ICZIVE1MSGVhZGluZ0VsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5v
ZGUgJm90aGVyKQogewotICAgIGlmKG90aGVyLmVsZW1lbnRJZCgpICE9IElEX0gxIHx8Ci0gICAg
ICAgb3RoZXIuZWxlbWVudElkKCkgIT0gSURfSDIgfHwKLSAgICAgICBvdGhlci5lbGVtZW50SWQo
KSAhPSBJRF9IMyB8fAotICAgICAgIG90aGVyLmVsZW1lbnRJZCgpICE9IElEX0g0IHx8Ci0gICAg
ICAgb3RoZXIuZWxlbWVudElkKCkgIT0gSURfSDUgfHwKLSAgICAgICBvdGhlci5lbGVtZW50SWQo
KSAhPSBJRF9INiApCisgICAgaWYgKCFvdGhlci5oYW5kbGUoKS0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OmgxKCkpICYmCisgICAgICAgICFvdGhlci5oYW5kbGUoKS0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OmgyKCkpICYmCisgICAgICAgICFvdGhlci5oYW5kbGUoKS0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OmgzKCkpICYmCisgICAgICAgICFvdGhlci5oYW5kbGUoKS0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6Omg0KCkpICYmCisgICAgICAgICFvdGhlci5oYW5kbGUoKS0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6Omg1KCkpICYmCisgICAgICAgICFvdGhlci5oYW5kbGUoKS0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6Omg2KCkpKQogICAgIHsKIAlpZiAoIGltcGwgKSBpbXBsLT5kZXJlZigpOwogCWltcGwgPSAw
OwogICAgIH0gZWxzZSB7CisKICAgICBOb2RlOjpvcGVyYXRvciA9IChvdGhlcik7CiAgICAgfQog
ICAgIHJldHVybiAqdGhpczsKQEAgLTI1Nyw3ICsyNTgsNyBAQCBIVE1MUGFyYWdyYXBoRWxlbWVu
dDo6SFRNTFBhcmFncmFwaEVsZW1lCiAKIEhUTUxQYXJhZ3JhcGhFbGVtZW50ICZIVE1MUGFyYWdy
YXBoRWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWdu
T3RoZXIoIG90aGVyLCBJRF9QICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6
OnAoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtMjk4LDcgKzI5OSw3IEBAIEhUTUxQ
cmVFbGVtZW50OjpIVE1MUHJlRWxlbWVudChIVE1MUHJlRWwKIAogSFRNTFByZUVsZW1lbnQgJkhU
TUxQcmVFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3Np
Z25PdGhlciggb3RoZXIsIElEX1BSRSApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5h
bWVzOjpwcmUoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApJbmRleDoga2h0bWwvZG9tL2h0
bWxfZWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0
bWwvZG9tL2h0bWxfZWxlbWVudC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTQKZGlmZiAt
dSAtcCAtcjEuMTQga2h0bWwvZG9tL2h0bWxfZWxlbWVudC5jcHAKLS0tIGtodG1sL2RvbS9odG1s
X2VsZW1lbnQuY3BwCTExIE1heSAyMDA1IDAwOjU4OjI4IC0wMDAwCTEuMTQKKysrIGtodG1sL2Rv
bS9odG1sX2VsZW1lbnQuY3BwCTE3IEp1biAyMDA1IDAxOjMyOjI0IC0wMDAwCkBAIC0xODIsOSAr
MTgyLDkgQEAgSFRNTENvbGxlY3Rpb24gSFRNTEVsZW1lbnQ6OmNoaWxkcmVuKCkgYwogICAgIHJl
dHVybiBIVE1MQ29sbGVjdGlvbihpbXBsLCBIVE1MQ29sbGVjdGlvbkltcGw6Ok5PREVfQ0hJTERS
RU4pOwogfQogCi12b2lkIEhUTUxFbGVtZW50Ojphc3NpZ25PdGhlciggY29uc3QgTm9kZSAmb3Ro
ZXIsIGludCBlbGVtZW50SWQgKQordm9pZCBIVE1MRWxlbWVudDo6YXNzaWduT3RoZXIoIGNvbnN0
IE5vZGUgJm90aGVyLCBjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lICkKIHsKLSAgICBpZigo
aW50KW90aGVyLmVsZW1lbnRJZCgpICE9IGVsZW1lbnRJZCkgeworICAgIGlmICghb3RoZXIuaGFu
ZGxlKCktPmhhc1RhZ05hbWUodGFnTmFtZSkpIHsKIAlpZiAoIGltcGwgKSBpbXBsLT5kZXJlZigp
OwogCWltcGwgPSAwOwogICAgIH0gZWxzZSB7CkluZGV4OiBraHRtbC9kb20vaHRtbF9lbGVtZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZG9tL2h0bWxf
ZWxlbWVudC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjgKZGlmZiAtdSAtcCAtcjEuOCBraHRt
bC9kb20vaHRtbF9lbGVtZW50LmgKLS0tIGtodG1sL2RvbS9odG1sX2VsZW1lbnQuaAkyMiBNYXkg
MjAwNCAwMTo1MDo0OCAtMDAwMAkxLjgKKysrIGtodG1sL2RvbS9odG1sX2VsZW1lbnQuaAkxNyBK
dW4gMjAwNSAwMTozMjoyNCAtMDAwMApAQCAtMzAsNiArMzAsOCBAQAogI2RlZmluZSBIVE1MX0VM
RU1FTlRfSAogCiAjaW5jbHVkZSA8ZG9tL2RvbV9lbGVtZW50Lmg+CisjaW5jbHVkZSAiZG9tX3Fu
YW1lLmgiCisKIGNsYXNzIEtIVE1MVmlldzsKIAogbmFtZXNwYWNlIERPTSB7CkBAIC0yMjUsNyAr
MjI3LDcgQEAgcHJvdGVjdGVkOgogICAgIC8qCiAgICAgICogQGludGVybmFsCiAgICAgICovCi0g
ICAgdm9pZCBhc3NpZ25PdGhlciggY29uc3QgTm9kZSAmb3RoZXIsIGludCBlbGVtZW50SWQgKTsK
KyAgICB2b2lkIGFzc2lnbk90aGVyKCBjb25zdCBOb2RlICZvdGhlciwgY29uc3QgUXVhbGlmaWVk
TmFtZSYgdGFnTmFtZSApOwogfTsKIAogfTsgLy9uYW1lc3BhY2UKSW5kZXg6IGtodG1sL2RvbS9o
dG1sX2Zvcm0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1s
L2RvbS9odG1sX2Zvcm0uY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjExCmRpZmYgLXUgLXAg
LXIxLjExIGtodG1sL2RvbS9odG1sX2Zvcm0uY3BwCi0tLSBraHRtbC9kb20vaHRtbF9mb3JtLmNw
cAkxMSBNYXkgMjAwNSAwMDo1ODoyOCAtMDAwMAkxLjExCisrKyBraHRtbC9kb20vaHRtbF9mb3Jt
LmNwcAkxNyBKdW4gMjAwNSAwMTozMjoyNSAtMDAwMApAQCAtNDcsNyArNDcsNyBAQCBIVE1MQnV0
dG9uRWxlbWVudDo6SFRNTEJ1dHRvbkVsZW1lbnQoSFRNCiAKIEhUTUxCdXR0b25FbGVtZW50ICZI
VE1MQnV0dG9uRWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAg
YXNzaWduT3RoZXIoIG90aGVyLCBJRF9CVVRUT04gKTsJCisgICAgYXNzaWduT3RoZXIoIG90aGVy
LCBIVE1MTmFtZXM6OmJ1dHRvbigpICk7CQogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtMTU3
LDcgKzE1Nyw3IEBAIEhUTUxGaWVsZFNldEVsZW1lbnQ6OkhUTUxGaWVsZFNldEVsZW1lbnQKIAog
SFRNTEZpZWxkU2V0RWxlbWVudCAmSFRNTEZpZWxkU2V0RWxlbWVudDo6b3BlcmF0b3IgPSAoY29u
c3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9GSUVMRFNFVCAp
OworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpmaWVsZHNldCgpICk7CiAgICAg
cmV0dXJuICp0aGlzOwogfQogCkBAIC0xOTMsNyArMTkzLDcgQEAgSFRNTEZvcm1FbGVtZW50OjpI
VE1MRm9ybUVsZW1lbnQoSFRNTEZvcgogCiBIVE1MRm9ybUVsZW1lbnQgJkhUTUxGb3JtRWxlbWVu
dDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90
aGVyLCBJRF9GT1JNICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OmZvcm0o
KSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtMzExLDcgKzMxMSw3IEBAIEhUTUxJbnB1
dEVsZW1lbnQ6OkhUTUxJbnB1dEVsZW1lbnQoSFRNTEkKIAogSFRNTElucHV0RWxlbWVudCAmSFRN
TElucHV0RWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNz
aWduT3RoZXIoIG90aGVyLCBJRF9JTlBVVCApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRN
TE5hbWVzOjppbnB1dCgpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC01NzQsNyArNTc0
LDcgQEAgSFRNTExhYmVsRWxlbWVudDo6SFRNTExhYmVsRWxlbWVudChIVE1MTAogCiBIVE1MTGFi
ZWxFbGVtZW50ICZIVE1MTGFiZWxFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhl
cikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0xBQkVMICk7CisgICAgYXNzaWduT3Ro
ZXIoIG90aGVyLCBIVE1MTmFtZXM6OmxhYmVsKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAK
QEAgLTYzMyw3ICs2MzMsNyBAQCBIVE1MTGVnZW5kRWxlbWVudDo6SFRNTExlZ2VuZEVsZW1lbnQo
SFRNCiAKIEhUTUxMZWdlbmRFbGVtZW50ICZIVE1MTGVnZW5kRWxlbWVudDo6b3BlcmF0b3IgPSAo
Y29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9MRUdFTkQg
KTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6bGVnZW5kKCkgKTsKICAgICBy
ZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTY5MSw3ICs2OTEsNyBAQCBIVE1MT3B0R3JvdXBFbGVtZW50
OjpIVE1MT3B0R3JvdXBFbGVtZW50CiAKIEhUTUxPcHRHcm91cEVsZW1lbnQgJkhUTUxPcHRHcm91
cEVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90
aGVyKCBvdGhlciwgSURfT1BUR1JPVVAgKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxO
YW1lczo6b3B0Z3JvdXAoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtNzQ0LDcgKzc0
NCw3IEBAIEhUTUxTZWxlY3RFbGVtZW50OjpIVE1MU2VsZWN0RWxlbWVudChIVE0KIAogSFRNTFNl
bGVjdEVsZW1lbnQgJkhUTUxTZWxlY3RFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZv
dGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX1NFTEVDVCApOworICAgIGFzc2ln
bk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpzZWxlY3QoKSApOwogICAgIHJldHVybiAqdGhpczsK
IH0KIApAQCAtOTA2LDcgKzkwNiw3IEBAIEhUTUxUZXh0QXJlYUVsZW1lbnQ6OkhUTUxUZXh0QXJl
YUVsZW1lbnQKIAogSFRNTFRleHRBcmVhRWxlbWVudCAmSFRNTFRleHRBcmVhRWxlbWVudDo6b3Bl
cmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJ
RF9URVhUQVJFQSApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjp0ZXh0YXJl
YSgpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC0xMDc0LDcgKzEwNzQsNyBAQCBIVE1M
T3B0aW9uRWxlbWVudDo6SFRNTE9wdGlvbkVsZW1lbnQoSFRNCiAKIEhUTUxPcHRpb25FbGVtZW50
ICZIVE1MT3B0aW9uRWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0g
ICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9PUFRJT04gKTsKKyAgICBhc3NpZ25PdGhlciggb3Ro
ZXIsIEhUTUxOYW1lczo6b3B0aW9uKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTEx
ODIsNyArMTE4Miw3IEBAIEhUTUxJc0luZGV4RWxlbWVudDo6SFRNTElzSW5kZXhFbGVtZW50KEgK
IAogSFRNTElzSW5kZXhFbGVtZW50ICZIVE1MSXNJbmRleEVsZW1lbnQ6Om9wZXJhdG9yID0gKGNv
bnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfSVNJTkRFWCAp
OworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjppc2luZGV4KCkgKTsKICAgICBy
ZXR1cm4gKnRoaXM7CiB9CiAKSW5kZXg6IGtodG1sL2RvbS9odG1sX2hlYWQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2RvbS9odG1sX2hlYWQuY3BwLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjgKZGlmZiAtdSAtcCAtcjEuOCBraHRtbC9kb20vaHRtbF9o
ZWFkLmNwcAotLS0ga2h0bWwvZG9tL2h0bWxfaGVhZC5jcHAJMyBOb3YgMjAwMyAwNjozMjowNCAt
MDAwMAkxLjgKKysrIGtodG1sL2RvbS9odG1sX2hlYWQuY3BwCTE3IEp1biAyMDA1IDAxOjMyOjI1
IC0wMDAwCkBAIC00Miw3ICs0Miw3IEBAIEhUTUxCYXNlRWxlbWVudDo6SFRNTEJhc2VFbGVtZW50
KEhUTUxCYXMKIAogSFRNTEJhc2VFbGVtZW50ICZIVE1MQmFzZUVsZW1lbnQ6Om9wZXJhdG9yID0g
KGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfQkFTRSAp
OworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpiYXNlKCkgKTsKICAgICByZXR1
cm4gKnRoaXM7CiB9CiAKQEAgLTk3LDcgKzk3LDcgQEAgSFRNTExpbmtFbGVtZW50OjpIVE1MTGlu
a0VsZW1lbnQoSFRNTExpbgogCiBIVE1MTGlua0VsZW1lbnQgJkhUTUxMaW5rRWxlbWVudDo6b3Bl
cmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJ
RF9MSU5LICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OmxpbmsoKSApOwog
ICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtMjM4LDcgKzIzOCw3IEBAIEhUTUxNZXRhRWxlbWVu
dDo6SFRNTE1ldGFFbGVtZW50KEhUTUxNZXQKIAogSFRNTE1ldGFFbGVtZW50ICZIVE1MTWV0YUVs
ZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVy
KCBvdGhlciwgSURfTUVUQSApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpt
ZXRhKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTMxMiw3ICszMTIsNyBAQCBIVE1M
U2NyaXB0RWxlbWVudDo6SFRNTFNjcmlwdEVsZW1lbnQoSFRNCiAKIEhUTUxTY3JpcHRFbGVtZW50
ICZIVE1MU2NyaXB0RWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0g
ICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9TQ1JJUFQgKTsKKyAgICBhc3NpZ25PdGhlciggb3Ro
ZXIsIEhUTUxOYW1lczo6c2NyaXB0KCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTQy
NCw3ICs0MjQsNyBAQCBIVE1MU3R5bGVFbGVtZW50OjpIVE1MU3R5bGVFbGVtZW50KEhUTUxTCiAK
IEhUTUxTdHlsZUVsZW1lbnQgJkhUTUxTdHlsZUVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5v
ZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfU1RZTEUgKTsKKyAgICBh
c3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6c3R5bGUoKSApOwogICAgIHJldHVybiAqdGhp
czsKIH0KIApAQCAtNDk2LDcgKzQ5Niw3IEBAIEhUTUxUaXRsZUVsZW1lbnQ6OkhUTUxUaXRsZUVs
ZW1lbnQoSFRNTFQKIAogSFRNTFRpdGxlRWxlbWVudCAmSFRNTFRpdGxlRWxlbWVudDo6b3BlcmF0
b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9U
SVRMRSApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjp0aXRsZSgpICk7CiAg
ICAgcmV0dXJuICp0aGlzOwogfQogCkluZGV4OiBraHRtbC9kb20vaHRtbF9pbWFnZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZG9tL2h0bWxfaW1hZ2Uu
Y3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjkKZGlmZiAtdSAtcCAtcjEuOSBraHRtbC9kb20v
aHRtbF9pbWFnZS5jcHAKLS0tIGtodG1sL2RvbS9odG1sX2ltYWdlLmNwcAkzIE5vdiAyMDAzIDA2
OjMyOjA0IC0wMDAwCTEuOQorKysga2h0bWwvZG9tL2h0bWxfaW1hZ2UuY3BwCTE3IEp1biAyMDA1
IDAxOjMyOjI1IC0wMDAwCkBAIC00Niw3ICs0Niw3IEBAIEhUTUxBcmVhRWxlbWVudDo6SFRNTEFy
ZWFFbGVtZW50KEhUTUxBcmUKIAogSFRNTEFyZWFFbGVtZW50ICZIVE1MQXJlYUVsZW1lbnQ6Om9w
ZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwg
SURfQVJFQSApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjphcmVhKCkgKTsK
ICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTE3Niw3ICsxNzYsNyBAQCBIVE1MSW1hZ2VFbGVt
ZW50OjpIVE1MSW1hZ2VFbGVtZW50KEhUTUxJCiAKIEhUTUxJbWFnZUVsZW1lbnQgJkhUTUxJbWFn
ZUVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90
aGVyKCBvdGhlciwgSURfSU1HICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6
OmltZygpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC0zNzIsNyArMzcyLDcgQEAgSFRN
TE1hcEVsZW1lbnQ6OkhUTUxNYXBFbGVtZW50KEhUTUxNYXBFbAogCiBIVE1MTWFwRWxlbWVudCAm
SFRNTE1hcEVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFz
c2lnbk90aGVyKCBvdGhlciwgSURfTUFQICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1M
TmFtZXM6Om1hcCgpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkluZGV4OiBraHRtbC9kb20v
aHRtbF9pbmxpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2to
dG1sL2RvbS9odG1sX2lubGluZS5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNwpkaWZmIC11
IC1wIC1yMS43IGtodG1sL2RvbS9odG1sX2lubGluZS5jcHAKLS0tIGtodG1sL2RvbS9odG1sX2lu
bGluZS5jcHAJMTEgTWF5IDIwMDUgMDA6NTg6MjggLTAwMDAJMS43CisrKyBraHRtbC9kb20vaHRt
bF9pbmxpbmUuY3BwCTE3IEp1biAyMDA1IDAxOjMyOjI1IC0wMDAwCkBAIC00NSw3ICs0NSw3IEBA
IEhUTUxBbmNob3JFbGVtZW50OjpIVE1MQW5jaG9yRWxlbWVudChIVE0KIAogSFRNTEFuY2hvckVs
ZW1lbnQgJkhUTUxBbmNob3JFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikK
IHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0EgKTsKKyAgICBhc3NpZ25PdGhlciggb3Ro
ZXIsIEhUTUxOYW1lczo6YSgpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC0yMTcsNyAr
MjE3LDcgQEAgSFRNTEJSRWxlbWVudDo6SFRNTEJSRWxlbWVudChIVE1MQlJFbGVtZQogCiBIVE1M
QlJFbGVtZW50ICZIVE1MQlJFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikK
IHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0JSICk7CisgICAgYXNzaWduT3RoZXIoIG90
aGVyLCBIVE1MTmFtZXM6OmJyKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTI1OCw3
ICsyNTgsNyBAQCBIVE1MRm9udEVsZW1lbnQ6OkhUTUxGb250RWxlbWVudChIVE1MRm9uCiAKIEhU
TUxGb250RWxlbWVudCAmSFRNTEZvbnRFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZv
dGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0ZPTlQgKTsKKyAgICBhc3NpZ25P
dGhlciggb3RoZXIsIEhUTUxOYW1lczo6Zm9udCgpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQog
CkBAIC0zMTksNyArMzE5LDcgQEAgSFRNTE1vZEVsZW1lbnQ6OkhUTUxNb2RFbGVtZW50KGNvbnN0
IEhUTQogSFRNTE1vZEVsZW1lbnQ6OkhUTUxNb2RFbGVtZW50KEhUTUxFbGVtZW50SW1wbCAqX2lt
cGwpCiAgICAgOiBIVE1MRWxlbWVudCgpCiB7Ci0gICAgaWYgKF9pbXBsICYmIChfaW1wbC0+aWQo
KSA9PSBJRF9JTlMgfHwgX2ltcGwtPmlkKCkgPT0gSURfREVMKSkKKyAgICBpZiAoX2ltcGwgJiYg
KF9pbXBsLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW5zKCkpIHx8IF9pbXBsLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6ZGVsKCkpKSkKICAgICAgICAgaW1wbCA9IF9pbXBsOwogICAgIGVsc2UKICAg
ICAgICAgaW1wbCA9IDA7CkBAIC0zMjgsOSArMzI4LDggQEAgSFRNTE1vZEVsZW1lbnQ6OkhUTUxN
b2RFbGVtZW50KEhUTUxFbGVtZQogCiBIVE1MTW9kRWxlbWVudCAmSFRNTE1vZEVsZW1lbnQ6Om9w
ZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGlmKCBvdGhlci5lbGVtZW50SWQo
KSAhPSBJRF9JTlMgJiYKLQlvdGhlci5lbGVtZW50SWQoKSAhPSBJRF9ERUwgKQotICAgIHsKKyAg
ICBpZiAoIW90aGVyLmhhbmRsZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW5zKCkpICYmCisg
ICAgICAgICFvdGhlci5oYW5kbGUoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmRlbCgpKSkgewog
CWlmICggaW1wbCApIGltcGwtPmRlcmVmKCk7CiAJaW1wbCA9IDA7CiAgICAgfSBlbHNlIHsKQEAg
LTM4MSwxOSArMzgwLDE2IEBAIEhUTUxRdW90ZUVsZW1lbnQ6OkhUTUxRdW90ZUVsZW1lbnQoY29u
c3QKIHsKIH0KIAotSFRNTFF1b3RlRWxlbWVudDo6SFRNTFF1b3RlRWxlbWVudChIVE1MR2VuZXJp
Y0VsZW1lbnRJbXBsICpfaW1wbCkKK0hUTUxRdW90ZUVsZW1lbnQ6OkhUTUxRdW90ZUVsZW1lbnQo
SFRNTFF1b3RlRWxlbWVudEltcGwgKl9pbXBsKQogICAgIDogSFRNTEVsZW1lbnQoKQogewotICAg
IGlmIChfaW1wbCAmJiBfaW1wbC0+aWQoKSA9PSBJRF9RKQotICAgICAgICBpbXBsID0gX2ltcGw7
Ci0gICAgZWxzZQotICAgICAgICBpbXBsID0gMDsKKyAgICBpbXBsID0gX2ltcGw7CiAgICAgaWYg
KCBpbXBsICkgaW1wbC0+cmVmKCk7CiB9CiAKIEhUTUxRdW90ZUVsZW1lbnQgJkhUTUxRdW90ZUVs
ZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVy
KCBvdGhlciwgSURfUSApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpxKCkg
KTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKSW5kZXg6IGtodG1sL2RvbS9odG1sX2lubGluZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2RvbS9odG1sX2lu
bGluZS5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjMKZGlmZiAtdSAtcCAtcjEuMyBraHRtbC9k
b20vaHRtbF9pbmxpbmUuaAotLS0ga2h0bWwvZG9tL2h0bWxfaW5saW5lLmgJMTUgQXByIDIwMDIg
MjM6NDI6MDEgLTAwMDAJMS4zCisrKyBraHRtbC9kb20vaHRtbF9pbmxpbmUuaAkxNyBKdW4gMjAw
NSAwMTozMjoyNiAtMDAwMApAQCAtNDI1LDcgKzQyNSw3IEBAIHB1YmxpYzoKICAgICBIVE1MUXVv
dGVFbGVtZW50KGNvbnN0IE5vZGUgJm90aGVyKSA6IEhUTUxFbGVtZW50KCkKICAgICAgICAgIHso
KnRoaXMpPW90aGVyO30KIHByb3RlY3RlZDoKLSAgICBIVE1MUXVvdGVFbGVtZW50KEhUTUxHZW5l
cmljRWxlbWVudEltcGwgKmltcGwpOworICAgIEhUTUxRdW90ZUVsZW1lbnQoSFRNTFF1b3RlRWxl
bWVudEltcGwgKmltcGwpOwogcHVibGljOgogCiAgICAgSFRNTFF1b3RlRWxlbWVudCAmIG9wZXJh
dG9yID0gKGNvbnN0IEhUTUxRdW90ZUVsZW1lbnQgJm90aGVyKTsKSW5kZXg6IGtodG1sL2RvbS9o
dG1sX2xpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1s
L2RvbS9odG1sX2xpc3QuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjQKZGlmZiAtdSAtcCAt
cjEuNCBraHRtbC9kb20vaHRtbF9saXN0LmNwcAotLS0ga2h0bWwvZG9tL2h0bWxfbGlzdC5jcHAJ
MTAgSnVuIDIwMDIgMjA6MDc6MzYgLTAwMDAJMS40CisrKyBraHRtbC9kb20vaHRtbF9saXN0LmNw
cAkxNyBKdW4gMjAwNSAwMTozMjoyNiAtMDAwMApAQCAtNDEsNyArNDEsNyBAQCBIVE1MRExpc3RF
bGVtZW50OjpIVE1MRExpc3RFbGVtZW50KEhUTUxECiAKIEhUTUxETGlzdEVsZW1lbnQgJkhUTUxE
TGlzdEVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2ln
bk90aGVyKCBvdGhlciwgSURfREwgKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1l
czo6ZGwoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtODgsNyArODgsNyBAQCBIVE1M
RGlyZWN0b3J5RWxlbWVudDo6SFRNTERpcmVjdG9yeUVsZW1lCiAKIEhUTUxEaXJlY3RvcnlFbGVt
ZW50ICZIVE1MRGlyZWN0b3J5RWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIp
CiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9ESVIgKTsKKyAgICBhc3NpZ25PdGhlcigg
b3RoZXIsIEhUTUxOYW1lczo6ZGlyKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTEz
NSw3ICsxMzUsNyBAQCBIVE1MTElFbGVtZW50OjpIVE1MTElFbGVtZW50KEhUTUxMSUVsZW1lCiAK
IEhUTUxMSUVsZW1lbnQgJkhUTUxMSUVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90
aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfTEkgKTsKKyAgICBhc3NpZ25PdGhl
ciggb3RoZXIsIEhUTUxOYW1lczo6bGkoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAt
MTkwLDcgKzE5MCw3IEBAIEhUTUxNZW51RWxlbWVudDo6SFRNTE1lbnVFbGVtZW50KEhUTUxNZW4K
IAogSFRNTE1lbnVFbGVtZW50ICZIVE1MTWVudUVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5v
ZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfTUVOVSApOworICAgIGFz
c2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjptZW51KCkgKTsKICAgICByZXR1cm4gKnRoaXM7
CiB9CiAKQEAgLTIzNyw3ICsyMzcsNyBAQCBIVE1MT0xpc3RFbGVtZW50OjpIVE1MT0xpc3RFbGVt
ZW50KEhUTUxPCiAKIEhUTUxPTGlzdEVsZW1lbnQgJkhUTUxPTGlzdEVsZW1lbnQ6Om9wZXJhdG9y
ID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfT0wg
KTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6b2woKSApOwogICAgIHJldHVy
biAqdGhpczsKIH0KIApAQCAtMzEwLDcgKzMxMCw3IEBAIEhUTUxVTGlzdEVsZW1lbnQ6OkhUTUxV
TGlzdEVsZW1lbnQoSFRNTFUKIAogSFRNTFVMaXN0RWxlbWVudCAmSFRNTFVMaXN0RWxlbWVudDo6
b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVy
LCBJRF9VTCApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjp1bCgpICk7CiAg
ICAgcmV0dXJuICp0aGlzOwogfQogCkluZGV4OiBraHRtbC9kb20vaHRtbF9taXNjLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9kb20vaHRtbF9taXNjLmNw
cCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS43CmRpZmYgLXUgLXAgLXIxLjcga2h0bWwvZG9tL2h0
bWxfbWlzYy5jcHAKLS0tIGtodG1sL2RvbS9odG1sX21pc2MuY3BwCTExIE1heSAyMDA1IDAwOjU4
OjI4IC0wMDAwCTEuNworKysga2h0bWwvZG9tL2h0bWxfbWlzYy5jcHAJMTcgSnVuIDIwMDUgMDE6
MzI6MjYgLTAwMDAKQEAgLTQxLDcgKzQxLDcgQEAgSFRNTEJhc2VGb250RWxlbWVudDo6SFRNTEJh
c2VGb250RWxlbWVudAogCiBIVE1MQmFzZUZvbnRFbGVtZW50ICZIVE1MQmFzZUZvbnRFbGVtZW50
OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3Ro
ZXIsIElEX0JBU0VGT05UICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OmJh
c2Vmb250KCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKSW5kZXg6IGtodG1sL2RvbS9odG1s
X29iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwv
ZG9tL2h0bWxfb2JqZWN0LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS41CmRpZmYgLXUgLXAg
LXIxLjUga2h0bWwvZG9tL2h0bWxfb2JqZWN0LmNwcAotLS0ga2h0bWwvZG9tL2h0bWxfb2JqZWN0
LmNwcAkxIE1hciAyMDA0IDE3OjA0OjI0IC0wMDAwCTEuNQorKysga2h0bWwvZG9tL2h0bWxfb2Jq
ZWN0LmNwcAkxNyBKdW4gMjAwNSAwMTozMjoyNiAtMDAwMApAQCAtNDMsNyArNDMsNyBAQCBIVE1M
QXBwbGV0RWxlbWVudDo6SFRNTEFwcGxldEVsZW1lbnQoSFRNCiAKIEhUTUxBcHBsZXRFbGVtZW50
ICZIVE1MQXBwbGV0RWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0g
ICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9BUFBMRVQgKTsKKyAgICBhc3NpZ25PdGhlciggb3Ro
ZXIsIEhUTUxOYW1lczo6YXBwbGV0KCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTE5
NCw3ICsxOTQsNyBAQCBIVE1MT2JqZWN0RWxlbWVudDo6SFRNTE9iamVjdEVsZW1lbnQoSFRNCiAK
IEhUTUxPYmplY3RFbGVtZW50ICZIVE1MT2JqZWN0RWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3Qg
Tm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9PQkpFQ1QgKTsKKyAg
ICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6b2JqZWN0KCkgKTsKICAgICByZXR1cm4g
KnRoaXM7CiB9CiAKQEAgLTQzMiw3ICs0MzIsNyBAQCBIVE1MUGFyYW1FbGVtZW50OjpIVE1MUGFy
YW1FbGVtZW50KEhUTUxQCiAKIEhUTUxQYXJhbUVsZW1lbnQgJkhUTUxQYXJhbUVsZW1lbnQ6Om9w
ZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwg
SURfUEFSQU0gKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6cGFyYW0oKSAp
OwogICAgIHJldHVybiAqdGhpczsKIH0KIApJbmRleDoga2h0bWwvZG9tL2h0bWxfdGFibGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2RvbS9odG1sX3Rh
YmxlLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS42CmRpZmYgLXUgLXAgLXIxLjYga2h0bWwv
ZG9tL2h0bWxfdGFibGUuY3BwCi0tLSBraHRtbC9kb20vaHRtbF90YWJsZS5jcHAJMzEgT2N0IDIw
MDMgMDA6NDc6MTYgLTAwMDAJMS42CisrKyBraHRtbC9kb20vaHRtbF90YWJsZS5jcHAJMTcgSnVu
IDIwMDUgMDE6MzI6MjcgLTAwMDAKQEAgLTQ1LDcgKzQ1LDcgQEAgSFRNTFRhYmxlQ2FwdGlvbkVs
ZW1lbnQ6OkhUTUxUYWJsZUNhcHRpbwogCiBIVE1MVGFibGVDYXB0aW9uRWxlbWVudCAmSFRNTFRh
YmxlQ2FwdGlvbkVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAg
IGFzc2lnbk90aGVyKCBvdGhlciwgSURfQ0FQVElPTiApOworICAgIGFzc2lnbk90aGVyKCBvdGhl
ciwgSFRNTE5hbWVzOjpjYXB0aW9uKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTg2
LDkgKzg2LDggQEAgSFRNTFRhYmxlQ2VsbEVsZW1lbnQ6OkhUTUxUYWJsZUNlbGxFbGVtZQogCiBI
VE1MVGFibGVDZWxsRWxlbWVudCAmSFRNTFRhYmxlQ2VsbEVsZW1lbnQ6Om9wZXJhdG9yID0gKGNv
bnN0IE5vZGUgJm90aGVyKQogewotICAgIGlmKCBvdGhlci5lbGVtZW50SWQoKSAhPSBJRF9URCAm
JgotCW90aGVyLmVsZW1lbnRJZCgpICE9IElEX1RIICkKLSAgICB7CisgICAgaWYgKCFvdGhlci5o
YW5kbGUoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRkKCkpIHx8CisgICAgICAgICFvdGhlci5o
YW5kbGUoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRoKCkpKSB7CiAJaWYgKCBpbXBsICkgaW1w
bC0+ZGVyZWYoKTsKIAlpbXBsID0gMDsKICAgICB9IGVsc2UgewpAQCAtMjk1LDkgKzI5NCw4IEBA
IEhUTUxUYWJsZUNvbEVsZW1lbnQ6OkhUTUxUYWJsZUNvbEVsZW1lbnQKIAogSFRNTFRhYmxlQ29s
RWxlbWVudCAmSFRNTFRhYmxlQ29sRWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3Ro
ZXIpCiB7Ci0gICAgaWYoIG90aGVyLmVsZW1lbnRJZCgpICE9IElEX0NPTCAmJgotCW90aGVyLmVs
ZW1lbnRJZCgpICE9IElEX0NPTEdST1VQICkKLSAgICB7CisgICAgaWYgKCFvdGhlci5oYW5kbGUo
KS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmNvbCgpKSAmJgorICAgICAgICAhb3RoZXIuaGFuZGxl
KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpjb2xncm91cCgpKSkgewogCWlmICggaW1wbCApIGlt
cGwtPmRlcmVmKCk7CiAJaW1wbCA9IDA7CiAgICAgfSBlbHNlIHsKQEAgLTQwMSw3ICszOTksNyBA
QCBIVE1MVGFibGVFbGVtZW50OjpIVE1MVGFibGVFbGVtZW50KEhUTUxUCiAKIEhUTUxUYWJsZUVs
ZW1lbnQgJkhUTUxUYWJsZUVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQog
ewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfVEFCTEUgKTsKKyAgICBhc3NpZ25PdGhlcigg
b3RoZXIsIEhUTUxOYW1lczo6dGFibGUoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAt
NjM4LDcgKzYzNiw3IEBAIEhUTUxUYWJsZVJvd0VsZW1lbnQ6OkhUTUxUYWJsZVJvd0VsZW1lbnQK
IAogSFRNTFRhYmxlUm93RWxlbWVudCAmSFRNTFRhYmxlUm93RWxlbWVudDo6b3BlcmF0b3IgPSAo
Y29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9UUiApOwor
ICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjp0cigpICk7CiAgICAgcmV0dXJuICp0
aGlzOwogfQogCkBAIC03NzUsMTAgKzc3Myw5IEBAIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50OjpI
VE1MVGFibGVTZWN0aW8KIAogSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQgJkhUTUxUYWJsZVNlY3Rp
b25FbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBpZihvdGhl
ci5lbGVtZW50SWQoKSAhPSBJRF9UQk9EWSAmJgotICAgICAgIG90aGVyLmVsZW1lbnRJZCgpICE9
IElEX1RIRUFEICYmCi0gICAgICAgb3RoZXIuZWxlbWVudElkKCkgIT0gSURfVEZPT1QgKQotICAg
IHsKKyAgICBpZiAoIW90aGVyLmhhbmRsZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGJvZHko
KSkgJiYKKyAgICAgICAgIW90aGVyLmhhbmRsZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGhl
YWQoKSkgJiYKKyAgICAgICAgIW90aGVyLmhhbmRsZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
dGZvb3QoKSkpIHsKIAlpZiAoIGltcGwgKSBpbXBsLT5kZXJlZigpOwogCWltcGwgPSAwOwogICAg
IH0gZWxzZSB7CkluZGV4OiBraHRtbC9lY21hL2tqc19jc3MuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VjbWEva2pzX2Nzcy5jcHAsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuMjMKZGlmZiAtdSAtcCAtcjEuMjMga2h0bWwvZWNtYS9ranNfY3NzLmNwcAot
LS0ga2h0bWwvZWNtYS9ranNfY3NzLmNwcAkxNiBNYXkgMjAwNSAxOToxOTozOCAtMDAwMAkxLjIz
CisrKyBraHRtbC9lY21hL2tqc19jc3MuY3BwCTE3IEp1biAyMDA1IDAxOjMyOjI4IC0wMDAwCkBA
IC0yOSw3ICsyOSw3IEBACiAjaW5jbHVkZSAieG1sL2RvbV9kb2NpbXBsLmgiCiAjaW5jbHVkZSAi
aHRtbC9odG1sX2hlYWRpbXBsLmgiIC8vIGZvciBIVE1MU3R5bGVFbGVtZW50CiAjaW5jbHVkZSAi
a2pzX2RvbS5oIgotI2luY2x1ZGUgIm1pc2MvaHRtbHRhZ3MuaCIKKyNpbmNsdWRlICJodG1sbmFt
ZXMuaCIKIAogI2luY2x1ZGUgPGtkZWJ1Zy5oPgogCkBAIC01NSw2ICs1NSw3IEBAIHVzaW5nIERP
TTo6Q291bnRlckltcGw7CiB1c2luZyBET006OkRvY3VtZW50SW1wbDsKIHVzaW5nIERPTTo6RE9N
U3RyaW5nOwogdXNpbmcgRE9NOjpFbGVtZW50SW1wbDsKK3VzaW5nIERPTTo6SFRNTE5hbWVzOwog
dXNpbmcgRE9NOjpIVE1MU3R5bGVFbGVtZW50SW1wbDsKIHVzaW5nIERPTTo6TWVkaWFMaXN0SW1w
bDsKIHVzaW5nIERPTTo6UmVjdEltcGw7CkBAIC0zOTUsNyArMzk2LDcgQEAgVmFsdWUgRE9NU3R5
bGVTaGVldExpc3Q6OnRyeUdldChFeGVjU3RhdAogICAvLyBhbmQgZG9lc24ndCBsb29rIGZvciBu
YW1lIGF0dHJpYnV0ZSAoc2VlIGltcGxlbWVudGF0aW9uIGFib3ZlKS4KICAgLy8gQnV0IHVuaWNp
dHkgb2Ygc3R5bGVzaGVldCBpZHMgaXMgZ29vZCBwcmFjdGljZSBhbnl3YXkgOykKICAgRWxlbWVu
dEltcGwgKmVsZW1lbnQgPSBtX2RvYy0+Z2V0RWxlbWVudEJ5SWQocC5zdHJpbmcoKSk7Ci0gIGlm
IChlbGVtZW50ICYmIGVsZW1lbnQtPmlkKCkgPT0gSURfU1RZTEUpCisgIGlmIChlbGVtZW50ICYm
IGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzdHlsZSgpKSkKICAgICByZXR1cm4gZ2V0
RE9NU3R5bGVTaGVldChleGVjLCBzdGF0aWNfY2FzdDxIVE1MU3R5bGVFbGVtZW50SW1wbCAqPihl
bGVtZW50KS0+c2hlZXQoKSk7CiAKICAgcmV0dXJuIERPTU9iamVjdDo6dHJ5R2V0KGV4ZWMsIHAp
OwpJbmRleDoga2h0bWwvZWNtYS9ranNfZG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvV2ViQ29yZS9raHRtbC9lY21hL2tqc19kb20uY3BwLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjc0CmRpZmYgLXUgLXAgLXIxLjc0IGtodG1sL2VjbWEva2pzX2RvbS5jcHAKLS0tIGtodG1s
L2VjbWEva2pzX2RvbS5jcHAJNyBKdW4gMjAwNSAyMjoxMjo1NyAtMDAwMAkxLjc0CisrKyBraHRt
bC9lY21hL2tqc19kb20uY3BwCTE3IEp1biAyMDA1IDAxOjMyOjMwIC0wMDAwCkBAIC00Nyw4ICs0
Nyw2IEBACiAKICNpbmNsdWRlICJodG1sX29iamVjdGltcGwuaCIKIAotI2luY2x1ZGUgIm1pc2Mv
aHRtbHRhZ3MuaCIKLQogI2lmIEFQUExFX0NIQU5HRVMKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9ydW50aW1lX29iamVjdC5oPgogI2VuZGlmCkBAIC02Nyw2ICs2NSw3IEBAIHVzaW5nIERPTTo6
SFRNTEFwcGxldEVsZW1lbnRJbXBsOwogdXNpbmcgRE9NOjpIVE1MRG9jdW1lbnRJbXBsOwogdXNp
bmcgRE9NOjpIVE1MRWxlbWVudEltcGw7CiB1c2luZyBET006OkhUTUxFbWJlZEVsZW1lbnRJbXBs
OwordXNpbmcgRE9NOjpIVE1MTmFtZXM7CiB1c2luZyBET006OkhUTUxPYmplY3RFbGVtZW50SW1w
bDsKIHVzaW5nIERPTTo6TmFtZWROb2RlTWFwSW1wbDsKIHVzaW5nIERPTTo6Tm9kZTsKQEAgLTQ2
Miw3ICs0NjEsNyBAQCB2b2lkIERPTU5vZGU6OnB1dFZhbHVlKEV4ZWNTdGF0ZSAqZXhlYywgCiAg
ICAgbm9kZS5zZXROb2RlVmFsdWUodmFsdWUudG9TdHJpbmcoZXhlYykuc3RyaW5nKCksIGV4Y2Vw
dGlvbik7CiAgICAgYnJlYWs7CiAgIGNhc2UgUHJlZml4OgotICAgIG5vZGUuc2V0UHJlZml4KHZh
bHVlLnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpLCBleGNlcHRpb24pOworICAgIG5vZGUuc2V0UHJl
Zml4KHZhbHVlLnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpLmltcGxlbWVudGF0aW9uKCksIGV4Y2Vw
dGlvbik7CiAgICAgYnJlYWs7CiAgIGNhc2UgT25BYm9ydDoKICAgICBzZXRMaXN0ZW5lcihleGVj
LERPTTo6RXZlbnRJbXBsOjpBQk9SVF9FVkVOVCx2YWx1ZSk7CkBAIC0xMTg3LDcgKzExODYsNyBA
QCBWYWx1ZSBET01FbGVtZW50Ojp0cnlHZXQoRXhlY1N0YXRlICpleGVjCiAgIHsKICAgICBzd2l0
Y2goIGVudHJ5LT52YWx1ZSApIHsKICAgICBjYXNlIFRhZ05hbWU6Ci0gICAgICByZXR1cm4gZ2V0
U3RyaW5nT3JOdWxsKGVsZW1lbnQudGFnTmFtZSgpKTsKKyAgICAgIHJldHVybiBnZXRTdHJpbmdP
ck51bGwoZWxlbWVudC5ub2RlTmFtZSgpKTsKICAgICBjYXNlIFN0eWxlOgogICAgICAgcmV0dXJu
IGdldERPTUNTU1N0eWxlRGVjbGFyYXRpb24oZXhlYyxlbGVtZW50LnN0eWxlKCkpOwogICAgIGRl
ZmF1bHQ6CkBAIC0xNzA5LDI2ICsxNzA4LDIxIEBAIFZhbHVlSW1wICpnZXRSdW50aW1lT2JqZWN0
KEV4ZWNTdGF0ZSAqZXgKICAgICBpZiAoIW4pCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgc3dp
dGNoIChuLT5pZCgpKSB7Ci0gICAgICAgIGNhc2UgSURfQVBQTEVUOiB7Ci0gICAgICAgICAgICBI
VE1MQXBwbGV0RWxlbWVudEltcGwgKmFwcGxldEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MQXBw
bGV0RWxlbWVudEltcGwgKj4obik7Ci0gICAgICAgICAgICBpZiAoYXBwbGV0RWxlbWVudC0+Z2V0
QXBwbGV0SW5zdGFuY2UoKSkKLSAgICAgICAgICAgICAgICAvLyBUaGUgaW5zdGFuY2UgaXMgb3du
ZWQgYnkgdGhlIGFwcGxldCBlbGVtZW50LgotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUnVu
dGltZU9iamVjdEltcChhcHBsZXRFbGVtZW50LT5nZXRBcHBsZXRJbnN0YW5jZSgpLCBmYWxzZSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIElEX0VNQkVEOiB7
Ci0gICAgICAgICAgICBIVE1MRW1iZWRFbGVtZW50SW1wbCAqZW1iZWRFbGVtZW50ID0gc3RhdGlj
X2Nhc3Q8SFRNTEVtYmVkRWxlbWVudEltcGwgKj4obik7Ci0gICAgICAgICAgICBpZiAoZW1iZWRF
bGVtZW50LT5nZXRFbWJlZEluc3RhbmNlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBS
dW50aW1lT2JqZWN0SW1wKGVtYmVkRWxlbWVudC0+Z2V0RW1iZWRJbnN0YW5jZSgpLCBmYWxzZSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIElEX09CSkVDVDog
ewotICAgICAgICAgICAgSFRNTE9iamVjdEVsZW1lbnRJbXBsICpvYmplY3RFbGVtZW50ID0gc3Rh
dGljX2Nhc3Q8SFRNTE9iamVjdEVsZW1lbnRJbXBsICo+KG4pOwotICAgICAgICAgICAgaWYgKG9i
amVjdEVsZW1lbnQtPmdldE9iamVjdEluc3RhbmNlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IG5ldyBSdW50aW1lT2JqZWN0SW1wKG9iamVjdEVsZW1lbnQtPmdldE9iamVjdEluc3RhbmNlKCks
IGZhbHNlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisgICAgaWYgKG4tPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjphcHBsZXQoKSkpIHsKKyAgICAgICAgSFRNTEFwcGxldEVsZW1lbnRJ
bXBsICphcHBsZXRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEFwcGxldEVsZW1lbnRJbXBsICo+
KG4pOworICAgICAgICBpZiAoYXBwbGV0RWxlbWVudC0+Z2V0QXBwbGV0SW5zdGFuY2UoKSkKKyAg
ICAgICAgICAgIC8vIFRoZSBpbnN0YW5jZSBpcyBvd25lZCBieSB0aGUgYXBwbGV0IGVsZW1lbnQu
CisgICAgICAgICAgICByZXR1cm4gbmV3IFJ1bnRpbWVPYmplY3RJbXAoYXBwbGV0RWxlbWVudC0+
Z2V0QXBwbGV0SW5zdGFuY2UoKSwgZmFsc2UpOworICAgIH0KKyAgICBlbHNlIGlmIChuLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6ZW1iZWQoKSkpIHsKKyAgICAgICAgSFRNTEVtYmVkRWxlbWVudElt
cGwgKmVtYmVkRWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxFbWJlZEVsZW1lbnRJbXBsICo+KG4p
OworICAgICAgICBpZiAoZW1iZWRFbGVtZW50LT5nZXRFbWJlZEluc3RhbmNlKCkpCisgICAgICAg
ICAgICByZXR1cm4gbmV3IFJ1bnRpbWVPYmplY3RJbXAoZW1iZWRFbGVtZW50LT5nZXRFbWJlZElu
c3RhbmNlKCksIGZhbHNlKTsKKyAgICB9CisgICAgZWxzZSBpZiAobi0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6Om9iamVjdCgpKSkgeworICAgICAgICBIVE1MT2JqZWN0RWxlbWVudEltcGwgKm9iamVj
dEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MT2JqZWN0RWxlbWVudEltcGwgKj4obik7CisgICAg
ICAgIGlmIChvYmplY3RFbGVtZW50LT5nZXRPYmplY3RJbnN0YW5jZSgpKQorICAgICAgICAgICAg
cmV0dXJuIG5ldyBSdW50aW1lT2JqZWN0SW1wKG9iamVjdEVsZW1lbnQtPmdldE9iamVjdEluc3Rh
bmNlKCksIGZhbHNlKTsKICAgICB9CiAgICAgCiAgICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhIHJ1
bnRpbWUgb2JqZWN0IHJldHVybiAwLgpJbmRleDoga2h0bWwvZWNtYS9ranNfaHRtbC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWNtYS9ranNfaHRtbC5j
cHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTE0CmRpZmYgLXUgLXAgLXIxLjExNCBraHRtbC9l
Y21hL2tqc19odG1sLmNwcAotLS0ga2h0bWwvZWNtYS9ranNfaHRtbC5jcHAJMjMgTWF5IDIwMDUg
MDA6NTc6NDIgLTAwMDAJMS4xMTQKKysrIGtodG1sL2VjbWEva2pzX2h0bWwuY3BwCTE3IEp1biAy
MDA1IDAxOjMyOjM1IC0wMDAwCkBAIC00Niw4ICs0Niw2IEBACiAjaW5jbHVkZSAia2pzX2V2ZW50
cy5oIgogI2luY2x1ZGUgImtqc19wcm94eS5oIgogCi0jaW5jbHVkZSAibWlzYy9odG1sdGFncy5o
IgotCiAjaW5jbHVkZSAicmVuZGVyaW5nL3JlbmRlcl9jYW52YXNpbWFnZS5oIgogI2luY2x1ZGUg
InJlbmRlcmluZy9yZW5kZXJfb2JqZWN0LmgiCiAjaW5jbHVkZSAicmVuZGVyaW5nL3JlbmRlcl9s
YXllci5oIgpAQCAtMTA5LDYgKzEwNyw3IEBAIHVzaW5nIERPTTo6SFRNTE1hcEVsZW1lbnRJbXBs
OwogdXNpbmcgRE9NOjpIVE1MTWVudUVsZW1lbnRJbXBsOwogdXNpbmcgRE9NOjpIVE1MTWV0YUVs
ZW1lbnRJbXBsOwogdXNpbmcgRE9NOjpIVE1MTW9kRWxlbWVudEltcGw7Cit1c2luZyBET006OkhU
TUxOYW1lczsKIHVzaW5nIERPTTo6SFRNTE9MaXN0RWxlbWVudEltcGw7CiB1c2luZyBET006OkhU
TUxPYmplY3RFbGVtZW50SW1wbDsKIHVzaW5nIERPTTo6SFRNTE9wdEdyb3VwRWxlbWVudEltcGw7
CkBAIC0zNTMsNyArMzUyLDcgQEAgVmFsdWUgSFRNTERvY3VtZW50Ojp0cnlHZXQoRXhlY1N0YXRl
ICpleAogICBpZiAodmFsKQogICAgIHJldHVybiBWYWx1ZSh2YWwpOwogCi0gIEhUTUxCb2R5RWxl
bWVudEltcGwgKmJvZHlFbGVtZW50ID0gKGJvZHkgJiYgYm9keS0+aWQoKSA9PSBJRF9CT0RZKSA/
IHN0YXRpY19jYXN0PEhUTUxCb2R5RWxlbWVudEltcGwgKj4oYm9keSkgOiAwOworICBIVE1MQm9k
eUVsZW1lbnRJbXBsICpib2R5RWxlbWVudCA9IChib2R5ICYmIGJvZHktPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjpib2R5KCkpKSA/IHN0YXRpY19jYXN0PEhUTUxCb2R5RWxlbWVudEltcGwgKj4oYm9k
eSkgOiAwOwogCiAgIGlmIChlbnRyeSkgewogICAgIHN3aXRjaCAoZW50cnktPnZhbHVlKSB7CkBA
IC00MjgsNyArNDI3LDcgQEAgdm9pZCBLSlM6OkhUTUxEb2N1bWVudDo6cHV0VmFsdWUoRXhlY1N0
YQogICBET01FeGNlcHRpb25UcmFuc2xhdG9yIGV4Y2VwdGlvbihleGVjKTsKICAgSFRNTERvY3Vt
ZW50SW1wbCAmZG9jID0gKnN0YXRpY19jYXN0PEhUTUxEb2N1bWVudEltcGwgKj4oaW1wbCgpKTsK
ICAgSFRNTEVsZW1lbnRJbXBsICpib2R5ID0gZG9jLmJvZHkoKTsKLSAgSFRNTEJvZHlFbGVtZW50
SW1wbCAqYm9keUVsZW1lbnQgPSAoYm9keSAmJiBib2R5LT5pZCgpID09IElEX0JPRFkpID8gc3Rh
dGljX2Nhc3Q8SFRNTEJvZHlFbGVtZW50SW1wbCAqPihib2R5KSA6IDA7CisgIEhUTUxCb2R5RWxl
bWVudEltcGwgKmJvZHlFbGVtZW50ID0gKGJvZHkgJiYgYm9keS0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OmJvZHkoKSkpID8gc3RhdGljX2Nhc3Q8SFRNTEJvZHlFbGVtZW50SW1wbCAqPihib2R5KSA6
IDA7CiAKICAgc3dpdGNoICh0b2tlbikgewogICBjYXNlIFRpdGxlOgpAQCAtNTgyLDEzMyArNTgx
LDIxOCBAQCBjb25zdCBDbGFzc0luZm8gS0pTOjpIVE1MRWxlbWVudDo6bWFycXVlCiAKIGNvbnN0
IENsYXNzSW5mbyogS0pTOjpIVE1MRWxlbWVudDo6Y2xhc3NJbmZvKCkgY29uc3QKIHsKLSAgc3dp
dGNoIChpbXBsKCktPmlkKCkpIHsKLSAgY2FzZSBJRF9IVE1MOgotICAgIHJldHVybiAmaHRtbF9p
bmZvOwotICBjYXNlIElEX0hFQUQ6Ci0gICAgcmV0dXJuICZoZWFkX2luZm87Ci0gIGNhc2UgSURf
TElOSzoKLSAgICByZXR1cm4gJmxpbmtfaW5mbzsKLSAgY2FzZSBJRF9USVRMRToKLSAgICByZXR1
cm4gJnRpdGxlX2luZm87Ci0gIGNhc2UgSURfTUVUQToKLSAgICByZXR1cm4gJm1ldGFfaW5mbzsK
LSAgY2FzZSBJRF9CQVNFOgotICAgIHJldHVybiAmYmFzZV9pbmZvOwotICBjYXNlIElEX0lTSU5E
RVg6Ci0gICAgcmV0dXJuICZpc0luZGV4X2luZm87Ci0gIGNhc2UgSURfU1RZTEU6Ci0gICAgcmV0
dXJuICZzdHlsZV9pbmZvOwotICBjYXNlIElEX0JPRFk6Ci0gICAgcmV0dXJuICZib2R5X2luZm87
Ci0gIGNhc2UgSURfRk9STToKLSAgICByZXR1cm4gJmZvcm1faW5mbzsKLSAgY2FzZSBJRF9TRUxF
Q1Q6Ci0gICAgcmV0dXJuICZzZWxlY3RfaW5mbzsKLSAgY2FzZSBJRF9PUFRHUk9VUDoKLSAgICBy
ZXR1cm4gJm9wdEdyb3VwX2luZm87Ci0gIGNhc2UgSURfT1BUSU9OOgotICAgIHJldHVybiAmb3B0
aW9uX2luZm87Ci0gIGNhc2UgSURfSU5QVVQ6Ci0gICAgcmV0dXJuICZpbnB1dF9pbmZvOwotICBj
YXNlIElEX1RFWFRBUkVBOgotICAgIHJldHVybiAmdGV4dEFyZWFfaW5mbzsKLSAgY2FzZSBJRF9C
VVRUT046Ci0gICAgcmV0dXJuICZidXR0b25faW5mbzsKLSAgY2FzZSBJRF9MQUJFTDoKLSAgICBy
ZXR1cm4gJmxhYmVsX2luZm87Ci0gIGNhc2UgSURfRklFTERTRVQ6Ci0gICAgcmV0dXJuICZmaWVs
ZFNldF9pbmZvOwotICBjYXNlIElEX0xFR0VORDoKLSAgICByZXR1cm4gJmxlZ2VuZF9pbmZvOwot
ICBjYXNlIElEX1VMOgotICAgIHJldHVybiAmdWxfaW5mbzsKLSAgY2FzZSBJRF9PTDoKLSAgICBy
ZXR1cm4gJm9sX2luZm87Ci0gIGNhc2UgSURfREw6Ci0gICAgcmV0dXJuICZkbF9pbmZvOwotICBj
YXNlIElEX0RJUjoKLSAgICByZXR1cm4gJmRpcl9pbmZvOwotICBjYXNlIElEX01FTlU6Ci0gICAg
cmV0dXJuICZtZW51X2luZm87Ci0gIGNhc2UgSURfTEk6Ci0gICAgcmV0dXJuICZsaV9pbmZvOwot
ICBjYXNlIElEX0RJVjoKLSAgICByZXR1cm4gJmRpdl9pbmZvOwotICBjYXNlIElEX1A6Ci0gICAg
cmV0dXJuICZwX2luZm87Ci0gIGNhc2UgSURfSDE6Ci0gIGNhc2UgSURfSDI6Ci0gIGNhc2UgSURf
SDM6Ci0gIGNhc2UgSURfSDQ6Ci0gIGNhc2UgSURfSDU6Ci0gIGNhc2UgSURfSDY6Ci0gICAgcmV0
dXJuICZoZWFkaW5nX2luZm87Ci0gIGNhc2UgSURfQkxPQ0tRVU9URToKLSAgICByZXR1cm4gJmJs
b2NrUXVvdGVfaW5mbzsKLSAgY2FzZSBJRF9ROgotICAgIHJldHVybiAmcV9pbmZvOwotICBjYXNl
IElEX1BSRToKLSAgICByZXR1cm4gJnByZV9pbmZvOwotICBjYXNlIElEX0JSOgotICAgIHJldHVy
biAmYnJfaW5mbzsKLSAgY2FzZSBJRF9CQVNFRk9OVDoKLSAgICByZXR1cm4gJmJhc2VGb250X2lu
Zm87Ci0gIGNhc2UgSURfRk9OVDoKLSAgICByZXR1cm4gJmZvbnRfaW5mbzsKLSAgY2FzZSBJRF9I
UjoKLSAgICByZXR1cm4gJmhyX2luZm87Ci0gIGNhc2UgSURfSU5TOgotICBjYXNlIElEX0RFTDoK
LSAgICByZXR1cm4gJm1vZF9pbmZvOwotICBjYXNlIElEX0E6Ci0gICAgcmV0dXJuICZhX2luZm87
Ci0gIGNhc2UgSURfQ0FOVkFTOgotICAgIHJldHVybiAmY2FudmFzX2luZm87Ci0gIGNhc2UgSURf
SU1HOgotICAgIHJldHVybiAmaW1nX2luZm87Ci0gIGNhc2UgSURfT0JKRUNUOgotICAgIHJldHVy
biAmb2JqZWN0X2luZm87Ci0gIGNhc2UgSURfUEFSQU06Ci0gICAgcmV0dXJuICZwYXJhbV9pbmZv
OwotICBjYXNlIElEX0FQUExFVDoKLSAgICByZXR1cm4gJmFwcGxldF9pbmZvOwotICBjYXNlIElE
X01BUDoKLSAgICByZXR1cm4gJm1hcF9pbmZvOwotICBjYXNlIElEX0FSRUE6Ci0gICAgcmV0dXJu
ICZhcmVhX2luZm87Ci0gIGNhc2UgSURfU0NSSVBUOgotICAgIHJldHVybiAmc2NyaXB0X2luZm87
Ci0gIGNhc2UgSURfVEFCTEU6Ci0gICAgcmV0dXJuICZ0YWJsZV9pbmZvOwotICBjYXNlIElEX0NB
UFRJT046Ci0gICAgcmV0dXJuICZjYXB0aW9uX2luZm87Ci0gIGNhc2UgSURfQ09MOgotICAgIHJl
dHVybiAmY29sX2luZm87Ci0gIGNhc2UgSURfVEhFQUQ6Ci0gICAgcmV0dXJuICZ0YWJsZXNlY3Rp
b25faW5mbzsKLSAgY2FzZSBJRF9UQk9EWToKLSAgICByZXR1cm4gJnRhYmxlc2VjdGlvbl9pbmZv
OwotICBjYXNlIElEX1RGT09UOgotICAgIHJldHVybiAmdGFibGVzZWN0aW9uX2luZm87Ci0gIGNh
c2UgSURfVFI6Ci0gICAgcmV0dXJuICZ0cl9pbmZvOwotICBjYXNlIElEX1RIOgotICAgIHJldHVy
biAmdGFibGVjZWxsX2luZm87Ci0gIGNhc2UgSURfVEQ6Ci0gICAgcmV0dXJuICZ0YWJsZWNlbGxf
aW5mbzsKLSAgY2FzZSBJRF9GUkFNRVNFVDoKLSAgICByZXR1cm4gJmZyYW1lU2V0X2luZm87Ci0g
IGNhc2UgSURfRlJBTUU6Ci0gICAgcmV0dXJuICZmcmFtZV9pbmZvOwotICBjYXNlIElEX0lGUkFN
RToKLSAgICByZXR1cm4gJmlGcmFtZV9pbmZvOwotICBjYXNlIElEX01BUlFVRUU6Ci0gICAgcmV0
dXJuICZtYXJxdWVlX2luZm87Ci0gIGRlZmF1bHQ6CisgICAgLy8gV2UgYWxyZWFkeSBrbm93IHdl
IGhhdmUgYW4gSFRNTCBlbGVtZW50LCBzbyB3ZSBvbmx5IG5lZWQgdG8gY29tcGFyZSB0aGUgbG9j
YWxOYW1lIGNvbXBvbmVudCBvZiB0aGUgcXVhbGlmaWVkIG5hbWUuCisgICAgc3RhdGljIFFQdHJE
aWN0PGNvbnN0IENsYXNzSW5mbz4gY2xhc3NJbmZvRGljdDsKKyAgICBpZiAoY2xhc3NJbmZvRGlj
dC5pc0VtcHR5KCkpIHsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjph
KCkubG9jYWxOYW1lUHRyKCksICZhX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2Vy
dChIVE1MTmFtZXM6OmFwcGxldCgpLmxvY2FsTmFtZVB0cigpLCAmYXBwbGV0X2luZm8pOworICAg
ICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmFyZWEoKS5sb2NhbE5hbWVQdHIo
KSwgJmFyZWFfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6
YmFzZSgpLmxvY2FsTmFtZVB0cigpLCAmYmFzZV9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGlj
dC5pbnNlcnQoSFRNTE5hbWVzOjpiYXNlZm9udCgpLmxvY2FsTmFtZVB0cigpLCAmYmFzZUZvbnRf
aW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6YmxvY2txdW90
ZSgpLmxvY2FsTmFtZVB0cigpLCAmYmxvY2tRdW90ZV9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZv
RGljdC5pbnNlcnQoSFRNTE5hbWVzOjpib2R5KCkubG9jYWxOYW1lUHRyKCksICZib2R5X2luZm8p
OworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmJyKCkubG9jYWxOYW1l
UHRyKCksICZicl9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVz
OjpidXR0b24oKS5sb2NhbE5hbWVQdHIoKSwgJmJ1dHRvbl9pbmZvKTsKKyAgICAgICAgY2xhc3NJ
bmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpjYW52YXMoKS5sb2NhbE5hbWVQdHIoKSwgJmNhbnZh
c19pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpjYXB0aW9u
KCkubG9jYWxOYW1lUHRyKCksICZjYXB0aW9uX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0
Lmluc2VydChIVE1MTmFtZXM6OmNvbCgpLmxvY2FsTmFtZVB0cigpLCAmY29sX2luZm8pOworICAg
ICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmNvbGdyb3VwKCkubG9jYWxOYW1l
UHRyKCksICZjb2xfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1l
czo6ZGVsKCkubG9jYWxOYW1lUHRyKCksICZtb2RfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0Rp
Y3QuaW5zZXJ0KEhUTUxOYW1lczo6ZGlyKCkubG9jYWxOYW1lUHRyKCksICZkaXJfaW5mbyk7Cisg
ICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6ZGl2KCkubG9jYWxOYW1lUHRy
KCksICZkaXZfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6
ZGwoKS5sb2NhbE5hbWVQdHIoKSwgJmRsX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmlu
c2VydChIVE1MTmFtZXM6OmZpZWxkc2V0KCkubG9jYWxOYW1lUHRyKCksICZmaWVsZFNldF9pbmZv
KTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpmb250KCkubG9jYWxO
YW1lUHRyKCksICZmb250X2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1M
TmFtZXM6OmZvcm0oKS5sb2NhbE5hbWVQdHIoKSwgJmZvcm1faW5mbyk7CisgICAgICAgIGNsYXNz
SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6ZnJhbWUoKS5sb2NhbE5hbWVQdHIoKSwgJmZyYW1l
X2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmZyYW1lc2V0
KCkubG9jYWxOYW1lUHRyKCksICZmcmFtZVNldF9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGlj
dC5pbnNlcnQoSFRNTE5hbWVzOjpoMSgpLmxvY2FsTmFtZVB0cigpLCAmaGVhZGluZ19pbmZvKTsK
KyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpoMigpLmxvY2FsTmFtZVB0
cigpLCAmaGVhZGluZ19pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5h
bWVzOjpoMygpLmxvY2FsTmFtZVB0cigpLCAmaGVhZGluZ19pbmZvKTsKKyAgICAgICAgY2xhc3NJ
bmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpoNCgpLmxvY2FsTmFtZVB0cigpLCAmaGVhZGluZ19p
bmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpoNSgpLmxvY2Fs
TmFtZVB0cigpLCAmaGVhZGluZ19pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQo
SFRNTE5hbWVzOjpoNigpLmxvY2FsTmFtZVB0cigpLCAmaGVhZGluZ19pbmZvKTsKKyAgICAgICAg
Y2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpoZWFkKCkubG9jYWxOYW1lUHRyKCksICZo
ZWFkX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmhyKCku
bG9jYWxOYW1lUHRyKCksICZocl9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQo
SFRNTE5hbWVzOjpodG1sKCkubG9jYWxOYW1lUHRyKCksICZodG1sX2luZm8pOworICAgICAgICBj
bGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmlmcmFtZSgpLmxvY2FsTmFtZVB0cigpLCAm
aUZyYW1lX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Omlt
ZygpLmxvY2FsTmFtZVB0cigpLCAmaW1nX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmlu
c2VydChIVE1MTmFtZXM6OmlucHV0KCkubG9jYWxOYW1lUHRyKCksICZpbnB1dF9pbmZvKTsKKyAg
ICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjppbnMoKS5sb2NhbE5hbWVQdHIo
KSwgJm1vZF9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpp
c2luZGV4KCkubG9jYWxOYW1lUHRyKCksICZpc0luZGV4X2luZm8pOworICAgICAgICBjbGFzc0lu
Zm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmxhYmVsKCkubG9jYWxOYW1lUHRyKCksICZsYWJlbF9p
bmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpsZWdlbmQoKS5s
b2NhbE5hbWVQdHIoKSwgJmxlZ2VuZF9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNl
cnQoSFRNTE5hbWVzOjpsaSgpLmxvY2FsTmFtZVB0cigpLCAmbGlfaW5mbyk7CisgICAgICAgIGNs
YXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6bGluaygpLmxvY2FsTmFtZVB0cigpLCAmbGlu
a19pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjptYXAoKS5s
b2NhbE5hbWVQdHIoKSwgJm1hcF9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQo
SFRNTE5hbWVzOjptYXJxdWVlKCkubG9jYWxOYW1lUHRyKCksICZtYXJxdWVlX2luZm8pOworICAg
ICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Om1lbnUoKS5sb2NhbE5hbWVQdHIo
KSwgJm1lbnVfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6
bWV0YSgpLmxvY2FsTmFtZVB0cigpLCAmbWV0YV9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGlj
dC5pbnNlcnQoSFRNTE5hbWVzOjpvYmplY3QoKS5sb2NhbE5hbWVQdHIoKSwgJm9iamVjdF9pbmZv
KTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpvbCgpLmxvY2FsTmFt
ZVB0cigpLCAmb2xfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1l
czo6b3B0aW9uKCkubG9jYWxOYW1lUHRyKCksICZvcHRpb25faW5mbyk7CisgICAgICAgIGNsYXNz
SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6b3B0Z3JvdXAoKS5sb2NhbE5hbWVQdHIoKSwgJm9w
dEdyb3VwX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OnAo
KS5sb2NhbE5hbWVQdHIoKSwgJnBfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0
KEhUTUxOYW1lczo6cGFyYW0oKS5sb2NhbE5hbWVQdHIoKSwgJnBhcmFtX2luZm8pOworICAgICAg
ICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OnByZSgpLmxvY2FsTmFtZVB0cigpLCAm
cHJlX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OnEoKS5s
b2NhbE5hbWVQdHIoKSwgJnFfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhU
TUxOYW1lczo6c2NyaXB0KCkubG9jYWxOYW1lUHRyKCksICZzY3JpcHRfaW5mbyk7CisgICAgICAg
IGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6c2VsZWN0KCkubG9jYWxOYW1lUHRyKCks
ICZzZWxlY3RfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6
c3R5bGUoKS5sb2NhbE5hbWVQdHIoKSwgJnN0eWxlX2luZm8pOworICAgICAgICBjbGFzc0luZm9E
aWN0Lmluc2VydChIVE1MTmFtZXM6OnRhYmxlKCkubG9jYWxOYW1lUHRyKCksICZ0YWJsZV9pbmZv
KTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjp0Ym9keSgpLmxvY2Fs
TmFtZVB0cigpLCAmdGFibGVzZWN0aW9uX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmlu
c2VydChIVE1MTmFtZXM6OnRkKCkubG9jYWxOYW1lUHRyKCksICZ0YWJsZWNlbGxfaW5mbyk7Cisg
ICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6dGV4dGFyZWEoKS5sb2NhbE5h
bWVQdHIoKSwgJnRleHRBcmVhX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChI
VE1MTmFtZXM6OnRoKCkubG9jYWxOYW1lUHRyKCksICZ0YWJsZWNlbGxfaW5mbyk7CisgICAgICAg
IGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6dGhlYWQoKS5sb2NhbE5hbWVQdHIoKSwg
JnRhYmxlc2VjdGlvbl9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5h
bWVzOjp0Zm9vdCgpLmxvY2FsTmFtZVB0cigpLCAmdGFibGVzZWN0aW9uX2luZm8pOworICAgICAg
ICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OnRpdGxlKCkubG9jYWxOYW1lUHRyKCks
ICZ0aXRsZV9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjp0
cigpLmxvY2FsTmFtZVB0cigpLCAmdHJfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5z
ZXJ0KEhUTUxOYW1lczo6dWwoKS5sb2NhbE5hbWVQdHIoKSwgJnVsX2luZm8pOworICAgIH0KKyAg
ICAKKyAgICBIVE1MRWxlbWVudEltcGwqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVu
dEltcGwqPihpbXBsKCkpOworICAgIGNvbnN0IENsYXNzSW5mbyogcmVzdWx0ID0gY2xhc3NJbmZv
RGljdC5maW5kKGVsZW1lbnQtPmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCkpOworICAgIGlm
IChyZXN1bHQpCisgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgcmV0dXJuICZpbmZvOwotICB9
CiB9CisKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjpodG1sX2dl
dHNldCA9IHsgJkhUTUxFbGVtZW50OjpodG1sR2V0dGVyLCAmSFRNTEVsZW1lbnQ6Omh0bWxTZXR0
ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjpoZWFkX2dl
dHNldCA9IHsgJkhUTUxFbGVtZW50OjpoZWFkR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmhlYWRTZXR0
ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjpsaW5rX2dl
dHNldCA9IHsgJkhUTUxFbGVtZW50OjpsaW5rR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmxpbmtTZXR0
ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50Ojp0aXRsZV9n
ZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6dGl0bGVHZXR0ZXIsICZIVE1MRWxlbWVudDo6dGl0bGVT
ZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjptZXRh
X2dldHNldCA9IHsgJkhUTUxFbGVtZW50OjptZXRhR2V0dGVyLCAmSFRNTEVsZW1lbnQ6Om1ldGFT
ZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjpiYXNl
X2dldHNldCA9IHsgJkhUTUxFbGVtZW50OjpiYXNlR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmJhc2VT
ZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50Ojppc0lu
ZGV4X2dldHNldCA9IHsgJkhUTUxFbGVtZW50Ojppc0luZGV4R2V0dGVyLCAmSFRNTEVsZW1lbnQ6
OmlzSW5kZXhTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVt
ZW50OjpzdHlsZV9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6c3R5bGVHZXR0ZXIsICZIVE1MRWxl
bWVudDo6c3R5bGVTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxF
bGVtZW50Ojpib2R5X2dldHNldCA9IHsgJkhUTUxFbGVtZW50Ojpib2R5R2V0dGVyLCAmSFRNTEVs
ZW1lbnQ6OmJvZHlTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxF
bGVtZW50Ojpmb3JtX2dldHNldCA9IHsgJkhUTUxFbGVtZW50Ojpmb3JtR2V0dGVyLCAmSFRNTEVs
ZW1lbnQ6OmZvcm1TZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxF
bGVtZW50OjpzZWxlY3RfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OnNlbGVjdEdldHRlciwgJkhU
TUxFbGVtZW50OjpzZWxlY3RTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZv
IEhUTUxFbGVtZW50OjpvcHRHcm91cF9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6b3B0R3JvdXBH
ZXR0ZXIsICZIVE1MRWxlbWVudDo6b3B0R3JvdXBTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50
OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjpvcHRpb25fZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6
Om9wdGlvbkdldHRlciwgJkhUTUxFbGVtZW50OjpvcHRpb25TZXR0ZXIgfTsKK2NvbnN0IEhUTUxF
bGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjppbnB1dF9nZXRzZXQgPSB7ICZIVE1MRWxl
bWVudDo6aW5wdXRHZXR0ZXIsICZIVE1MRWxlbWVudDo6aW5wdXRTZXR0ZXIgfTsKK2NvbnN0IEhU
TUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50Ojp0ZXh0QXJlYV9nZXRzZXQgPSB7ICZI
VE1MRWxlbWVudDo6dGV4dEFyZWFHZXR0ZXIsICZIVE1MRWxlbWVudDo6dGV4dEFyZWFTZXR0ZXIg
fTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjpidXR0b25fZ2V0
c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmJ1dHRvbkdldHRlciwgJkhUTUxFbGVtZW50OjpidXR0b25T
ZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjpsYWJl
bF9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6bGFiZWxHZXR0ZXIsICZIVE1MRWxlbWVudDo6bGFi
ZWxTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50Ojpm
aWVsZFNldF9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6ZmllbGRTZXRHZXR0ZXIsICZIVE1MRWxl
bWVudDo6ZmllbGRTZXRTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhU
TUxFbGVtZW50OjpsZWdlbmRfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmxlZ2VuZEdldHRlciwg
JkhUTUxFbGVtZW50OjpsZWdlbmRTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJ
bmZvIEhUTUxFbGVtZW50Ojp1bF9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6dUxpc3RHZXR0ZXIs
ICZIVE1MRWxlbWVudDo6dUxpc3RTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJ
bmZvIEhUTUxFbGVtZW50OjpvbF9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6b0xpc3RHZXR0ZXIs
ICZIVE1MRWxlbWVudDo6b0xpc3RTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJ
bmZvIEhUTUxFbGVtZW50OjpkbF9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6ZExpc3RHZXR0ZXIs
ICZIVE1MRWxlbWVudDo6ZExpc3RTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJ
bmZvIEhUTUxFbGVtZW50OjpkaXJfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmRpckdldHRlciwg
JkhUTUxFbGVtZW50OjpkaXJTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZv
IEhUTUxFbGVtZW50OjptZW51X2dldHNldCA9IHsgJkhUTUxFbGVtZW50OjptZW51R2V0dGVyLCAm
SFRNTEVsZW1lbnQ6Om1lbnVTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZv
IEhUTUxFbGVtZW50OjpsaV9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6bGlHZXR0ZXIsICZIVE1M
RWxlbWVudDo6bGlTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxF
bGVtZW50OjpkaXZfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmRpdkdldHRlciwgJkhUTUxFbGVt
ZW50OjpkaXZTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVt
ZW50OjpwX2dldHNldCA9IHsgJkhUTUxFbGVtZW50OjpwYXJhZ3JhcGhHZXR0ZXIsICZIVE1MRWxl
bWVudDo6cGFyYWdyYXBoU2V0dGVyIH07Citjb25zdCBIVE1MRWxlbWVudDo6R2V0U2V0SW5mbyBI
VE1MRWxlbWVudDo6aGVhZGluZ19nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6aGVhZGluZ0dldHRl
ciwgJkhUTUxFbGVtZW50OjpoZWFkaW5nU2V0dGVyIH07Citjb25zdCBIVE1MRWxlbWVudDo6R2V0
U2V0SW5mbyBIVE1MRWxlbWVudDo6YmxvY2tRdW90ZV9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6
YmxvY2tRdW90ZUdldHRlciwgJkhUTUxFbGVtZW50OjpibG9ja1F1b3RlU2V0dGVyIH07Citjb25z
dCBIVE1MRWxlbWVudDo6R2V0U2V0SW5mbyBIVE1MRWxlbWVudDo6cV9nZXRzZXQgPSB7ICZIVE1M
RWxlbWVudDo6cXVvdGVHZXR0ZXIsICZIVE1MRWxlbWVudDo6cXVvdGVTZXR0ZXIgfTsKK2NvbnN0
IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjpwcmVfZ2V0c2V0ID0geyAmSFRN
TEVsZW1lbnQ6OnByZUdldHRlciwgJkhUTUxFbGVtZW50OjpwcmVTZXR0ZXIgfTsKK2NvbnN0IEhU
TUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50Ojpicl9nZXRzZXQgPSB7ICZIVE1MRWxl
bWVudDo6YnJHZXR0ZXIsICZIVE1MRWxlbWVudDo6YnJTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVt
ZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjpiYXNlRm9udF9nZXRzZXQgPSB7ICZIVE1MRWxl
bWVudDo6YmFzZUZvbnRHZXR0ZXIsICZIVE1MRWxlbWVudDo6YmFzZUZvbnRTZXR0ZXIgfTsKK2Nv
bnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50Ojpmb250X2dldHNldCA9IHsg
JkhUTUxFbGVtZW50Ojpmb250R2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmZvbnRTZXR0ZXIgfTsKK2Nv
bnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50Ojpocl9nZXRzZXQgPSB7ICZI
VE1MRWxlbWVudDo6aHJHZXR0ZXIsICZIVE1MRWxlbWVudDo6aHJTZXR0ZXIgfTsKK2NvbnN0IEhU
TUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50Ojptb2RfZ2V0c2V0ID0geyAmSFRNTEVs
ZW1lbnQ6Om1vZEdldHRlciwgJkhUTUxFbGVtZW50Ojptb2RTZXR0ZXIgfTsKK2NvbnN0IEhUTUxF
bGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjphX2dldHNldCA9IHsgJkhUTUxFbGVtZW50
OjphbmNob3JHZXR0ZXIsICZIVE1MRWxlbWVudDo6YW5jaG9yU2V0dGVyIH07Citjb25zdCBIVE1M
RWxlbWVudDo6R2V0U2V0SW5mbyBIVE1MRWxlbWVudDo6Y2FudmFzX2dldHNldCA9IHsgJkhUTUxF
bGVtZW50OjppbWFnZUdldHRlciwgJkhUTUxFbGVtZW50OjppbWFnZVNldHRlciB9OworY29uc3Qg
SFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmltZ19nZXRzZXQgPSB7ICZIVE1M
RWxlbWVudDo6aW1hZ2VHZXR0ZXIsICZIVE1MRWxlbWVudDo6aW1hZ2VTZXR0ZXIgfTsKK2NvbnN0
IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjpvYmplY3RfZ2V0c2V0ID0geyAm
SFRNTEVsZW1lbnQ6Om9iamVjdEdldHRlciwgJkhUTUxFbGVtZW50OjpvYmplY3RTZXR0ZXIgfTsK
K2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjpwYXJhbV9nZXRzZXQg
PSB7ICZIVE1MRWxlbWVudDo6cGFyYW1HZXR0ZXIsICZIVE1MRWxlbWVudDo6cGFyYW1TZXR0ZXIg
fTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjphcHBsZXRfZ2V0
c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmFwcGxldEdldHRlciwgJkhUTUxFbGVtZW50OjphcHBsZXRT
ZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjptYXBf
Z2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6Om1hcEdldHRlciwgJkhUTUxFbGVtZW50OjptYXBTZXR0
ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjphcmVhX2dl
dHNldCA9IHsgJkhUTUxFbGVtZW50OjphcmVhR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmFyZWFTZXR0
ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjpzY3JpcHRf
Z2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OnNjcmlwdEdldHRlciwgJkhUTUxFbGVtZW50OjpzY3Jp
cHRTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50Ojp0
YWJsZV9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6dGFibGVHZXR0ZXIsICZIVE1MRWxlbWVudDo6
dGFibGVTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50
OjpjYXB0aW9uX2dldHNldCA9IHsgJkhUTUxFbGVtZW50Ojp0YWJsZUNhcHRpb25HZXR0ZXIsICZI
VE1MRWxlbWVudDo6dGFibGVDYXB0aW9uU2V0dGVyIH07Citjb25zdCBIVE1MRWxlbWVudDo6R2V0
U2V0SW5mbyBIVE1MRWxlbWVudDo6Y29sX2dldHNldCA9IHsgJkhUTUxFbGVtZW50Ojp0YWJsZUNv
bEdldHRlciwgJkhUTUxFbGVtZW50Ojp0YWJsZUNvbFNldHRlciB9OworY29uc3QgSFRNTEVsZW1l
bnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OnRhYmxlc2VjdGlvbl9nZXRzZXQgPSB7ICZIVE1M
RWxlbWVudDo6dGFibGVTZWN0aW9uR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OnRhYmxlU2VjdGlvblNl
dHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OnRyX2dl
dHNldCA9IHsgJkhUTUxFbGVtZW50Ojp0YWJsZVJvd0dldHRlciwgJkhUTUxFbGVtZW50Ojp0YWJs
ZVJvd1NldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6
OnRhYmxlY2VsbF9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6dGFibGVDZWxsR2V0dGVyLCAmSFRN
TEVsZW1lbnQ6OnRhYmxlQ2VsbFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldElu
Zm8gSFRNTEVsZW1lbnQ6OmZyYW1lU2V0X2dldHNldCA9IHsgJkhUTUxFbGVtZW50OjpmcmFtZVNl
dEdldHRlciwgJkhUTUxFbGVtZW50OjpmcmFtZVNldFNldHRlciB9OworY29uc3QgSFRNTEVsZW1l
bnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmZyYW1lX2dldHNldCA9IHsgJkhUTUxFbGVtZW50
OjpmcmFtZUdldHRlciwgJkhUTUxFbGVtZW50OjpmcmFtZVNldHRlciB9OworY29uc3QgSFRNTEVs
ZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmlGcmFtZV9nZXRzZXQgPSB7ICZIVE1MRWxl
bWVudDo6aUZyYW1lR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmlGcmFtZVNldHRlciB9OworY29uc3Qg
SFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6Om1hcnF1ZWVfZ2V0c2V0ID0geyAm
SFRNTEVsZW1lbnQ6Om1hcnF1ZWVHZXR0ZXIsICZIVE1MRWxlbWVudDo6bWFycXVlZVNldHRlciB9
OworCitjb25zdCBIVE1MRWxlbWVudDo6R2V0U2V0SW5mbyogSFRNTEVsZW1lbnQ6OmdldFNldElu
Zm8oKSBjb25zdAoreworICAgIC8vIFdlIGFscmVhZHkga25vdyB3ZSBoYXZlIGFuIEhUTUwgZWxl
bWVudCwgc28gd2Ugb25seSBuZWVkIHRvIGNvbXBhcmUgdGhlIGxvY2FsTmFtZSBjb21wb25lbnQg
b2YgdGhlIHF1YWxpZmllZCBuYW1lLgorICAgIHN0YXRpYyBRUHRyRGljdDxjb25zdCBIVE1MRWxl
bWVudDo6R2V0U2V0SW5mbz4gZ2V0U2V0SW5mb0RpY3Q7CisgICAgaWYgKGdldFNldEluZm9EaWN0
LmlzRW1wdHkoKSkgeworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjph
KCkubG9jYWxOYW1lUHRyKCksICZhX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmlu
c2VydChIVE1MTmFtZXM6OmFwcGxldCgpLmxvY2FsTmFtZVB0cigpLCAmYXBwbGV0X2dldHNldCk7
CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmFyZWEoKS5sb2NhbE5h
bWVQdHIoKSwgJmFyZWFfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhU
TUxOYW1lczo6YmFzZSgpLmxvY2FsTmFtZVB0cigpLCAmYmFzZV9nZXRzZXQpOworICAgICAgICBn
ZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpiYXNlZm9udCgpLmxvY2FsTmFtZVB0cigp
LCAmYmFzZUZvbnRfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxO
YW1lczo6YmxvY2txdW90ZSgpLmxvY2FsTmFtZVB0cigpLCAmYmxvY2tRdW90ZV9nZXRzZXQpOyAK
KyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6Ym9keSgpLmxvY2FsTmFt
ZVB0cigpLCAmYm9keV9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRN
TE5hbWVzOjpicigpLmxvY2FsTmFtZVB0cigpLCAmYnJfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0
SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6YnV0dG9uKCkubG9jYWxOYW1lUHRyKCksICZidXR0
b25fZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6Y2Fu
dmFzKCkubG9jYWxOYW1lUHRyKCksICZjYW52YXNfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5m
b0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6Y2FwdGlvbigpLmxvY2FsTmFtZVB0cigpLCAmY2FwdGlv
bl9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpjb2wo
KS5sb2NhbE5hbWVQdHIoKSwgJmNvbF9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5p
bnNlcnQoSFRNTE5hbWVzOjpjb2xncm91cCgpLmxvY2FsTmFtZVB0cigpLCAmY29sX2dldHNldCk7
CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmRlbCgpLmxvY2FsTmFt
ZVB0cigpLCAmbW9kX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1M
TmFtZXM6OmRpcigpLmxvY2FsTmFtZVB0cigpLCAmZGlyX2dldHNldCk7CisgICAgICAgIGdldFNl
dEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmRpdigpLmxvY2FsTmFtZVB0cigpLCAmZGl2X2dl
dHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmRsKCkubG9j
YWxOYW1lUHRyKCksICZkbF9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQo
SFRNTE5hbWVzOjpmaWVsZHNldCgpLmxvY2FsTmFtZVB0cigpLCAmZmllbGRTZXRfZ2V0c2V0KTsK
KyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6Zm9udCgpLmxvY2FsTmFt
ZVB0cigpLCAmZm9udF9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRN
TE5hbWVzOjpmb3JtKCkubG9jYWxOYW1lUHRyKCksICZmb3JtX2dldHNldCk7CisgICAgICAgIGdl
dFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmZyYW1lKCkubG9jYWxOYW1lUHRyKCksICZm
cmFtZV9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpm
cmFtZXNldCgpLmxvY2FsTmFtZVB0cigpLCAmZnJhbWVTZXRfZ2V0c2V0KTsKKyAgICAgICAgZ2V0
U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6aDEoKS5sb2NhbE5hbWVQdHIoKSwgJmhlYWRp
bmdfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6aDIo
KS5sb2NhbE5hbWVQdHIoKSwgJmhlYWRpbmdfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0Rp
Y3QuaW5zZXJ0KEhUTUxOYW1lczo6aDMoKS5sb2NhbE5hbWVQdHIoKSwgJmhlYWRpbmdfZ2V0c2V0
KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6aDQoKS5sb2NhbE5h
bWVQdHIoKSwgJmhlYWRpbmdfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0
KEhUTUxOYW1lczo6aDUoKS5sb2NhbE5hbWVQdHIoKSwgJmhlYWRpbmdfZ2V0c2V0KTsKKyAgICAg
ICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6aDYoKS5sb2NhbE5hbWVQdHIoKSwg
JmhlYWRpbmdfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1l
czo6aGVhZCgpLmxvY2FsTmFtZVB0cigpLCAmaGVhZF9nZXRzZXQpOworICAgICAgICBnZXRTZXRJ
bmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpocigpLmxvY2FsTmFtZVB0cigpLCAmaHJfZ2V0c2V0
KTsgCisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Omh0bWwoKS5sb2Nh
bE5hbWVQdHIoKSwgJmh0bWxfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0
KEhUTUxOYW1lczo6aWZyYW1lKCkubG9jYWxOYW1lUHRyKCksICZpRnJhbWVfZ2V0c2V0KTsKKyAg
ICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6aW1nKCkubG9jYWxOYW1lUHRy
KCksICZpbWdfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1l
czo6aW5wdXQoKS5sb2NhbE5hbWVQdHIoKSwgJmlucHV0X2dldHNldCk7CisgICAgICAgIGdldFNl
dEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmlucygpLmxvY2FsTmFtZVB0cigpLCAmbW9kX2dl
dHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmlzaW5kZXgo
KS5sb2NhbE5hbWVQdHIoKSwgJmlzSW5kZXhfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0Rp
Y3QuaW5zZXJ0KEhUTUxOYW1lczo6bGFiZWwoKS5sb2NhbE5hbWVQdHIoKSwgJmxhYmVsX2dldHNl
dCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmxlZ2VuZCgpLmxv
Y2FsTmFtZVB0cigpLCAmbGVnZW5kX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmlu
c2VydChIVE1MTmFtZXM6OmxpKCkubG9jYWxOYW1lUHRyKCksICZsaV9nZXRzZXQpOworICAgICAg
ICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpsaW5rKCkubG9jYWxOYW1lUHRyKCks
ICZsaW5rX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6
Om1hcCgpLmxvY2FsTmFtZVB0cigpLCAmbWFwX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9E
aWN0Lmluc2VydChIVE1MTmFtZXM6Om1hcnF1ZWUoKS5sb2NhbE5hbWVQdHIoKSwgJm1hcnF1ZWVf
Z2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6bWVudSgp
LmxvY2FsTmFtZVB0cigpLCAmbWVudV9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5p
bnNlcnQoSFRNTE5hbWVzOjptZXRhKCkubG9jYWxOYW1lUHRyKCksICZtZXRhX2dldHNldCk7Cisg
ICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Om9iamVjdCgpLmxvY2FsTmFt
ZVB0cigpLCAmb2JqZWN0X2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChI
VE1MTmFtZXM6Om9sKCkubG9jYWxOYW1lUHRyKCksICZvbF9nZXRzZXQpOworICAgICAgICBnZXRT
ZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpvcHRpb24oKS5sb2NhbE5hbWVQdHIoKSwgJm9w
dGlvbl9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpv
cHRncm91cCgpLmxvY2FsTmFtZVB0cigpLCAmb3B0R3JvdXBfZ2V0c2V0KTsKKyAgICAgICAgZ2V0
U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6cCgpLmxvY2FsTmFtZVB0cigpLCAmcF9nZXRz
ZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpwYXJhbSgpLmxv
Y2FsTmFtZVB0cigpLCAmcGFyYW1fZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5z
ZXJ0KEhUTUxOYW1lczo6cHJlKCkubG9jYWxOYW1lUHRyKCksICZwcmVfZ2V0c2V0KTsKKyAgICAg
ICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6cSgpLmxvY2FsTmFtZVB0cigpLCAm
cV9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpzY3Jp
cHQoKS5sb2NhbE5hbWVQdHIoKSwgJnNjcmlwdF9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZv
RGljdC5pbnNlcnQoSFRNTE5hbWVzOjpzZWxlY3QoKS5sb2NhbE5hbWVQdHIoKSwgJnNlbGVjdF9n
ZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpzdHlsZSgp
LmxvY2FsTmFtZVB0cigpLCAmc3R5bGVfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3Qu
aW5zZXJ0KEhUTUxOYW1lczo6dGFibGUoKS5sb2NhbE5hbWVQdHIoKSwgJnRhYmxlX2dldHNldCk7
CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OnRib2R5KCkubG9jYWxO
YW1lUHRyKCksICZ0YWJsZXNlY3Rpb25fZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3Qu
aW5zZXJ0KEhUTUxOYW1lczo6dGQoKS5sb2NhbE5hbWVQdHIoKSwgJnRhYmxlY2VsbF9nZXRzZXQp
OworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjp0ZXh0YXJlYSgpLmxv
Y2FsTmFtZVB0cigpLCAmdGV4dEFyZWFfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3Qu
aW5zZXJ0KEhUTUxOYW1lczo6dGgoKS5sb2NhbE5hbWVQdHIoKSwgJnRhYmxlY2VsbF9nZXRzZXQp
OworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjp0aGVhZCgpLmxvY2Fs
TmFtZVB0cigpLCAmdGFibGVzZWN0aW9uX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0
Lmluc2VydChIVE1MTmFtZXM6OnRmb290KCkubG9jYWxOYW1lUHRyKCksICZ0YWJsZXNlY3Rpb25f
Z2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6dGl0bGUo
KS5sb2NhbE5hbWVQdHIoKSwgJnRpdGxlX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0
Lmluc2VydChIVE1MTmFtZXM6OnRyKCkubG9jYWxOYW1lUHRyKCksICZ0cl9nZXRzZXQpOworICAg
ICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjp1bCgpLmxvY2FsTmFtZVB0cigp
LCAmdWxfZ2V0c2V0KTsKKyAgICB9CisgICAgCisgICAgSFRNTEVsZW1lbnRJbXBsKiBlbGVtZW50
ID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBjb25zdCBIVE1M
RWxlbWVudDo6R2V0U2V0SW5mbyogcmVzdWx0ID0gZ2V0U2V0SW5mb0RpY3QuZmluZChlbGVtZW50
LT5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpKTsKKyAgICBpZiAocmVzdWx0KQorICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiAwOworfQorCiAvKgogQGJlZ2luIEhUTUxFbGVt
ZW50VGFibGUgMTQKICAgaWQJCUtKUzo6SFRNTEVsZW1lbnQ6OkVsZW1lbnRJZAlEb250RGVsZXRl
CkBAIC0xMTg2LDM1ICsxMjcwLDMyIEBAIEhUTUxFbGVtZW50OjpIVE1MRWxlbWVudChFeGVjU3Rh
dGUgKmV4ZWMKIAogVmFsdWUgS0pTOjpIVE1MRWxlbWVudDo6dHJ5R2V0KEV4ZWNTdGF0ZSAqZXhl
YywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lKSBjb25zdAogewotICBIVE1MRWxlbWVu
dEltcGwgJmVsZW1lbnQgPSAqc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KGltcGwoKSk7
CisgICAgSFRNTEVsZW1lbnRJbXBsICZlbGVtZW50ID0gKnN0YXRpY19jYXN0PEhUTUxFbGVtZW50
SW1wbCAqPihpbXBsKCkpOwogI2lmZGVmIEtKU19WRVJCT1NFCi0gIGtkRGVidWcoNjA3MCkgPDwg
IktKUzo6SFRNTEVsZW1lbnQ6OnRyeUdldCAiIDw8IHByb3BlcnR5TmFtZS5xc3RyaW5nKCkgPDwg
IiB0aGlzVGFnPSIgPDwgZWxlbWVudC50YWdOYW1lKCkuc3RyaW5nKCkgPDwgZW5kbDsKKyAgICBr
ZERlYnVnKDYwNzApIDw8ICJLSlM6OkhUTUxFbGVtZW50Ojp0cnlHZXQgIiA8PCBwcm9wZXJ0eU5h
bWUucXN0cmluZygpIDw8ICIgdGhpc1RhZz0iIDw8IGVsZW1lbnQudGFnTmFtZSgpLnN0cmluZygp
IDw8IGVuZGw7CiAjZW5kaWYKLSAgLy8gRmlyc3QgbG9vayBhdCBkeW5hbWljIHByb3BlcnRpZXMK
LSAgc3dpdGNoIChlbGVtZW50LmlkKCkpIHsKLSAgICBjYXNlIElEX0ZPUk06IHsKLSAgICAgIEhU
TUxGb3JtRWxlbWVudEltcGwgJmZvcm0gPSBzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnRJbXBs
ICY+KGVsZW1lbnQpOwotICAgICAgLy8gQ2hlY2sgaWYgd2UncmUgcmV0cmlldmluZyBhbiBlbGVt
ZW50IChieSBpbmRleCBvciBieSBuYW1lKQotICAgICAgYm9vbCBvazsKLSAgICAgIHVpbnQgdSA9
IHByb3BlcnR5TmFtZS50b1VMb25nKCZvayk7Ci0gICAgICBpZiAob2spCi0gICAgICAgIHJldHVy
biBnZXRET01Ob2RlKGV4ZWMsIGZvcm0uZWxlbWVudHMoKS0+aXRlbSh1KSk7Ci0gICAgICBWYWx1
ZUltcCAqbmFtZWRJdGVtcyA9IEhUTUxDb2xsZWN0aW9uKGV4ZWMsIGZvcm0uZWxlbWVudHMoKS5n
ZXQoKSkuZ2V0TmFtZWRJdGVtcyhleGVjLCBwcm9wZXJ0eU5hbWUpOwotICAgICAgaWYgKCFuYW1l
ZEl0ZW1zLT5pc1VuZGVmaW5lZCgpKQotICAgICAgICByZXR1cm4gbmFtZWRJdGVtczsKLSAgICB9
Ci0gICAgICBicmVhazsKLSAgICBjYXNlIElEX1NFTEVDVDogewotICAgICAgSFRNTFNlbGVjdEVs
ZW1lbnRJbXBsICZzZWxlY3QgPSBzdGF0aWNfY2FzdDxIVE1MU2VsZWN0RWxlbWVudEltcGwgJj4o
ZWxlbWVudCk7Ci0gICAgICBib29sIG9rOwotICAgICAgdWludCB1ID0gcHJvcGVydHlOYW1lLnRv
VUxvbmcoJm9rKTsKLSAgICAgIGlmIChvaykKLSAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhl
Yywgc2VsZWN0Lm9wdGlvbnNIVE1MQ29sbGVjdGlvbigpLT5pdGVtKHUpKTsgLy8gbm90IHNwZWNp
ZmllZCBieSBET00oPykgYnV0IHN1cHBvcnRlZCBpbiBuZXRzY2FwZS9JRQorICAgIC8vIEZpcnN0
IGxvb2sgYXQgZHluYW1pYyBwcm9wZXJ0aWVzCisgICAgaWYgKGVsZW1lbnQuaGFzTG9jYWxOYW1l
KEhUTUxOYW1lczo6Zm9ybSgpKSkgeworICAgICAgICBIVE1MRm9ybUVsZW1lbnRJbXBsICZmb3Jt
ID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICAgICAg
Ly8gQ2hlY2sgaWYgd2UncmUgcmV0cmlldmluZyBhbiBlbGVtZW50IChieSBpbmRleCBvciBieSBu
YW1lKQorICAgICAgICBib29sIG9rOworICAgICAgICB1aW50IHUgPSBwcm9wZXJ0eU5hbWUudG9V
TG9uZygmb2spOworICAgICAgICBpZiAob2spCisgICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9k
ZShleGVjLCBmb3JtLmVsZW1lbnRzKCktPml0ZW0odSkpOworICAgICAgICBWYWx1ZUltcCAqbmFt
ZWRJdGVtcyA9IEhUTUxDb2xsZWN0aW9uKGV4ZWMsIGZvcm0uZWxlbWVudHMoKS5nZXQoKSkuZ2V0
TmFtZWRJdGVtcyhleGVjLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICBpZiAoIW5hbWVkSXRlbXMt
PmlzVW5kZWZpbmVkKCkpCisgICAgICAgICAgICByZXR1cm4gbmFtZWRJdGVtczsKKyAgICB9Cisg
ICAgZWxzZSBpZiAoZWxlbWVudC5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpzZWxlY3QoKSkpIHsK
KyAgICAgICAgSFRNTFNlbGVjdEVsZW1lbnRJbXBsICZzZWxlY3QgPSBzdGF0aWNfY2FzdDxIVE1M
U2VsZWN0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgICAgIGJvb2wgb2s7CisgICAgICAg
IHVpbnQgdSA9IHByb3BlcnR5TmFtZS50b1VMb25nKCZvayk7CisgICAgICAgIGlmIChvaykKKyAg
ICAgICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsIHNlbGVjdC5vcHRpb25zSFRNTENvbGxl
Y3Rpb24oKS0+aXRlbSh1KSk7IC8vIG5vdCBzcGVjaWZpZWQgYnkgRE9NKD8pIGJ1dCBzdXBwb3J0
ZWQgaW4gbmV0c2NhcGUvSUUKICAgICB9Ci0gICAgICBicmVhazsKLSAgICBjYXNlIElEX0ZSQU1F
U0VUOiB7CisgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpmcmFt
ZXNldCgpKSkgewogICAgICAgICBOb2RlSW1wbCAqZnJhbWUgPSBlbGVtZW50LmNoaWxkcmVuKCkt
Pm5hbWVkSXRlbShwcm9wZXJ0eU5hbWUuc3RyaW5nKCkpOwotICAgICAgICBpZiAoZnJhbWUgJiYg
ZnJhbWUtPmlkKCkgPT0gSURfRlJBTUUpIHsKKyAgICAgICAgaWYgKGZyYW1lICYmIGZyYW1lLT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6ZnJhbWUoKSkpIHsKICAgICAgICAgICAgIERvY3VtZW50SW1w
bCogZG9jID0gc3RhdGljX2Nhc3Q8SFRNTEZyYW1lRWxlbWVudEltcGwgKj4oZnJhbWUpLT5jb250
ZW50RG9jdW1lbnQoKTsKICAgICAgICAgICAgIGlmIChkb2MpIHsKICAgICAgICAgICAgICAgICBL
SFRNTFBhcnQqIHBhcnQgPSBkb2MtPnBhcnQoKTsKQEAgLTEyMjcsNzMgKzEzMDgsNTcgQEAgVmFs
dWUgS0pTOjpIVE1MRWxlbWVudDo6dHJ5R2V0KEV4ZWNTdGF0ZQogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIElEX0ZSQU1FOgotICAgIGNh
c2UgSURfSUZSQU1FOiB7CisgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNMb2NhbE5hbWUoSFRNTE5h
bWVzOjpmcmFtZSgpKSB8fCBlbGVtZW50Lmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmlmcmFtZSgp
KSkgewogICAgICAgICBEb2N1bWVudEltcGwqIGRvYyA9IHN0YXRpY19jYXN0PEhUTUxGcmFtZUVs
ZW1lbnRJbXBsICY+KGVsZW1lbnQpLmNvbnRlbnREb2N1bWVudCgpOwotICAgICAgICBpZiAoIGRv
YyApIHsKKyAgICAgICAgaWYgKGRvYykgewogICAgICAgICAgICAgS0hUTUxQYXJ0KiBwYXJ0ID0g
ZG9jLT5wYXJ0KCk7Ci0gICAgICAgICAgICBpZiAoIHBhcnQgKSB7CisgICAgICAgICAgICBpZiAo
cGFydCkgewogICAgICAgICAgICAgICBXaW5kb3cgKndpbmRvdyA9IFdpbmRvdzo6cmV0cmlldmVX
aW5kb3cocGFydCk7CiAJICAgICAgaWYgKHdpbmRvdyAmJiB3aW5kb3ctPmhhc1Byb3BlcnR5KGV4
ZWMsIHByb3BlcnR5TmFtZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy0+Z2V0KGV4
ZWMsIHByb3BlcnR5TmFtZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAg
ICBicmVhazsKICNpZiBBUFBMRV9DSEFOR0VTCi0gICAgY2FzZSBJRF9FTUJFRDoKLSAgICBjYXNl
IElEX09CSkVDVDoKLSAgICBjYXNlIElEX0FQUExFVDogewotCWlmIChwcm9wZXJ0eU5hbWUgPT0g
Il9fYXBwbGVfcnVudGltZV9vYmplY3QiKSB7CisgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNMb2Nh
bE5hbWUoSFRNTE5hbWVzOjplbWJlZCgpKSB8fCBlbGVtZW50Lmhhc0xvY2FsTmFtZShIVE1MTmFt
ZXM6Om9iamVjdCgpKSB8fAorICAgICAgICAgICAgIGVsZW1lbnQuaGFzTG9jYWxOYW1lKEhUTUxO
YW1lczo6YXBwbGV0KCkpKSB7CisJaWYgKHByb3BlcnR5TmFtZSA9PSAiX19hcHBsZV9ydW50aW1l
X29iamVjdCIpCiAJICAgIHJldHVybiBnZXRSdW50aW1lT2JqZWN0KGV4ZWMsJmVsZW1lbnQpOwot
CX0KLQogCVZhbHVlIHJ1bnRpbWVPYmplY3QgPSBnZXRSdW50aW1lT2JqZWN0KGV4ZWMsJmVsZW1l
bnQpOwogCWlmICghcnVudGltZU9iamVjdC5pc051bGwoKSkgewogCSAgICBPYmplY3RJbXAgKmlt
cCA9IHN0YXRpY19jYXN0PE9iamVjdEltcCAqPihydW50aW1lT2JqZWN0LmltcCgpKTsKLQkgICAg
aWYgKGltcC0+aGFzUHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lKSkgeworCSAgICBpZiAoaW1w
LT5oYXNQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUpKQogCQlyZXR1cm4gaW1wLT5nZXQgKGV4
ZWMsIHByb3BlcnR5TmFtZSk7Ci0JICAgIH0KIAl9CiAgICAgfQotICAgICAgYnJlYWs7CiAjZW5k
aWYKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9CiAKLSAgY29uc3QgSGFzaFRh
YmxlKiB0YWJsZSA9IGNsYXNzSW5mbygpLT5wcm9wSGFzaFRhYmxlOyAvLyBnZXQgdGhlIHJpZ2h0
IGhhc2h0YWJsZQotICBjb25zdCBIYXNoRW50cnkqIGVudHJ5ID0gTG9va3VwOjpmaW5kRW50cnko
dGFibGUsIHByb3BlcnR5TmFtZSk7Ci0gIGlmIChlbnRyeSkgewotICAgIGlmIChlbnRyeS0+YXR0
ciAmIEZ1bmN0aW9uKQotICAgICAgcmV0dXJuIGxvb2t1cE9yQ3JlYXRlRnVuY3Rpb248S0pTOjpI
VE1MRWxlbWVudEZ1bmN0aW9uPihleGVjLCBwcm9wZXJ0eU5hbWUsIHRoaXMsIGVudHJ5LT52YWx1
ZSwgZW50cnktPnBhcmFtcywgZW50cnktPmF0dHIpOwotICAgIHJldHVybiBnZXRWYWx1ZVByb3Bl
cnR5KGV4ZWMsIGVudHJ5LT52YWx1ZSk7Ci0gIH0KKyAgICBjb25zdCBIYXNoVGFibGUqIHRhYmxl
ID0gY2xhc3NJbmZvKCktPnByb3BIYXNoVGFibGU7IC8vIGdldCB0aGUgcmlnaHQgaGFzaHRhYmxl
CisgICAgY29uc3QgSGFzaEVudHJ5KiBlbnRyeSA9IExvb2t1cDo6ZmluZEVudHJ5KHRhYmxlLCBw
cm9wZXJ0eU5hbWUpOworICAgIGlmIChlbnRyeSkgeworICAgICAgICBpZiAoZW50cnktPmF0dHIg
JiBGdW5jdGlvbikKKyAgICAgICAgICAgIHJldHVybiBsb29rdXBPckNyZWF0ZUZ1bmN0aW9uPEtK
Uzo6SFRNTEVsZW1lbnRGdW5jdGlvbj4oZXhlYywgcHJvcGVydHlOYW1lLCB0aGlzLCBlbnRyeS0+
dmFsdWUsIGVudHJ5LT5wYXJhbXMsIGVudHJ5LT5hdHRyKTsKKyAgICAgICAgcmV0dXJuIGdldFZh
bHVlUHJvcGVydHkoZXhlYywgZW50cnktPnZhbHVlKTsKKyAgICB9CiAKLSAgLy8gQmFzZSBIVE1M
RWxlbWVudCBzdHVmZiBvciBwYXJlbnQgY2xhc3MgZm9yd2FyZCwgYXMgdXN1YWwKLSAgcmV0dXJu
IERPTU9iamVjdExvb2t1cEdldDxLSlM6OkhUTUxFbGVtZW50RnVuY3Rpb24sIEtKUzo6SFRNTEVs
ZW1lbnQsIERPTUVsZW1lbnQ+KGV4ZWMsIHByb3BlcnR5TmFtZSwgJkhUTUxFbGVtZW50VGFibGUs
IHRoaXMpOworICAgIC8vIEJhc2UgSFRNTEVsZW1lbnQgc3R1ZmYgb3IgcGFyZW50IGNsYXNzIGZv
cndhcmQsIGFzIHVzdWFsCisgICAgcmV0dXJuIERPTU9iamVjdExvb2t1cEdldDxLSlM6OkhUTUxF
bGVtZW50RnVuY3Rpb24sIEtKUzo6SFRNTEVsZW1lbnQsIERPTUVsZW1lbnQ+KGV4ZWMsIHByb3Bl
cnR5TmFtZSwgJkhUTUxFbGVtZW50VGFibGUsIHRoaXMpOwogfQogCiBib29sIEtKUzo6SFRNTEVs
ZW1lbnQ6OmltcGxlbWVudHNDYWxsKCkgY29uc3QKIHsKICAgICBIVE1MRWxlbWVudEltcGwgKmVs
ZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwgKj4oaW1wbCgpKTsKLSAgICBzd2l0
Y2ggKGVsZW1lbnQtPmlkKCkpIHsKLQljYXNlIElEX0VNQkVEOgotCWNhc2UgSURfT0JKRUNUOgot
CWNhc2UgSURfQVBQTEVUOiB7Ci0JCURvY3VtZW50SW1wbCogZG9jID0gZWxlbWVudC0+Z2V0RG9j
dW1lbnQoKTsKLQkJS0pTUHJveHkgKnByb3h5ID0gS0pTUHJveHk6OnByb3h5KGRvYy0+cGFydCgp
KTsKLQkJRXhlY1N0YXRlICpleGVjID0gcHJveHktPmludGVycHJldGVyKCktPmdsb2JhbEV4ZWMo
KTsKLQkJVmFsdWUgcnVudGltZU9iamVjdCA9IGdldFJ1bnRpbWVPYmplY3QoZXhlYyxlbGVtZW50
KTsKLQkJaWYgKCFydW50aW1lT2JqZWN0LmlzTnVsbCgpKSB7Ci0JCSAgICBPYmplY3RJbXAgKmlt
cCA9IHN0YXRpY19jYXN0PE9iamVjdEltcCAqPihydW50aW1lT2JqZWN0LmltcCgpKTsKLQkJICAg
IHJldHVybiBpbXAtPmltcGxlbWVudHNDYWxsICgpOwotCQl9Ci0JICAgIH0KLQkgICAgYnJlYWs7
Ci0JZGVmYXVsdDoKLQkgICAgYnJlYWs7CisgICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjplbWJlZCgpKSB8fAorICAgICAgICBlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6b2JqZWN0KCkpIHx8CisgICAgICAgIGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjph
cHBsZXQoKSkpIHsKKyAgIAlEb2N1bWVudEltcGwqIGRvYyA9IGVsZW1lbnQtPmdldERvY3VtZW50
KCk7CisgICAgICAgIEtKU1Byb3h5ICpwcm94eSA9IEtKU1Byb3h5Ojpwcm94eShkb2MtPnBhcnQo
KSk7CisgICAgICAgIEV4ZWNTdGF0ZSAqZXhlYyA9IHByb3h5LT5pbnRlcnByZXRlcigpLT5nbG9i
YWxFeGVjKCk7CisgICAgICAgIFZhbHVlIHJ1bnRpbWVPYmplY3QgPSBnZXRSdW50aW1lT2JqZWN0
KGV4ZWMsZWxlbWVudCk7CisgICAgICAgIGlmICghcnVudGltZU9iamVjdC5pc051bGwoKSkgewor
ICAgICAgICAgICAgT2JqZWN0SW1wICppbXAgPSBzdGF0aWNfY2FzdDxPYmplY3RJbXAgKj4ocnVu
dGltZU9iamVjdC5pbXAoKSk7CisgICAgICAgICAgICByZXR1cm4gaW1wLT5pbXBsZW1lbnRzQ2Fs
bCAoKTsKKyAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CiB9CkBAIC0xMzAxLDc4
NiArMTM2Niw4NzcgQEAgYm9vbCBLSlM6OkhUTUxFbGVtZW50OjppbXBsZW1lbnRzQ2FsbCgpIAog
VmFsdWUgS0pTOjpIVE1MRWxlbWVudDo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhp
c09iaiwgY29uc3QgTGlzdCZhcmdzKQogewogICAgIEhUTUxFbGVtZW50SW1wbCAqZWxlbWVudCA9
IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCAqPihpbXBsKCkpOwotICAgIHN3aXRjaCAoZWxl
bWVudC0+aWQoKSkgewotCWNhc2UgSURfRU1CRUQ6Ci0JY2FzZSBJRF9PQkpFQ1Q6Ci0JY2FzZSBJ
RF9BUFBMRVQ6IHsKLQkJVmFsdWUgcnVudGltZU9iamVjdCA9IGdldFJ1bnRpbWVPYmplY3QoZXhl
YyxlbGVtZW50KTsKLQkJaWYgKCFydW50aW1lT2JqZWN0LmlzTnVsbCgpKSB7Ci0JCSAgICBPYmpl
Y3RJbXAgKmltcCA9IHN0YXRpY19jYXN0PE9iamVjdEltcCAqPihydW50aW1lT2JqZWN0LmltcCgp
KTsKLQkJICAgIHJldHVybiBpbXAtPmNhbGwgKGV4ZWMsIHRoaXNPYmosIGFyZ3MpOwotCQl9Ci0J
ICAgIH0KLQkgICAgYnJlYWs7Ci0JZGVmYXVsdDoKLQkgICAgYnJlYWs7CisgICAgaWYgKGVsZW1l
bnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjplbWJlZCgpKSB8fAorICAgICAgICBlbGVtZW50LT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6b2JqZWN0KCkpIHx8CisgICAgICAgIGVsZW1lbnQtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjphcHBsZXQoKSkpIHsKKyAgICAgICAgVmFsdWUgcnVudGltZU9iamVj
dCA9IGdldFJ1bnRpbWVPYmplY3QoZXhlYyxlbGVtZW50KTsKKyAgICAgICAgaWYgKCFydW50aW1l
T2JqZWN0LmlzTnVsbCgpKSB7CisgICAgICAgICAgICBPYmplY3RJbXAgKmltcCA9IHN0YXRpY19j
YXN0PE9iamVjdEltcCAqPihydW50aW1lT2JqZWN0LmltcCgpKTsKKyAgICAgICAgICAgIHJldHVy
biBpbXAtPmNhbGwgKGV4ZWMsIHRoaXNPYmosIGFyZ3MpOworICAgICAgICB9CiAgICAgfQogICAg
IHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotVmFsdWUgS0pTOjpIVE1MRWxlbWVudDo6Z2V0VmFs
dWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKLXsKLSAgSFRNTEVs
ZW1lbnRJbXBsICZlbGVtZW50ID0gKnN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCAqPihpbXBs
KCkpOwotICBzd2l0Y2ggKGVsZW1lbnQuaWQoKSkgewotICBjYXNlIElEX0hUTUw6IHsKLSAgICBI
VE1MSHRtbEVsZW1lbnRJbXBsICZodG1sID0gc3RhdGljX2Nhc3Q8SFRNTEh0bWxFbGVtZW50SW1w
bCAmPihlbGVtZW50KTsKLSAgICBpZiAgICAgICh0b2tlbiA9PSBIdG1sVmVyc2lvbikgICAgICAg
ICByZXR1cm4gU3RyaW5nKGh0bWwudmVyc2lvbigpKTsKLSAgfQotICBicmVhazsKLSAgY2FzZSBJ
RF9IRUFEOiB7Ci0gICAgSFRNTEhlYWRFbGVtZW50SW1wbCAmaGVhZCA9IHN0YXRpY19jYXN0PEhU
TUxIZWFkRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgaWYgICAgICAodG9rZW4gPT0gSGVh
ZFByb2ZpbGUpICAgICAgICAgcmV0dXJuIFN0cmluZyhoZWFkLnByb2ZpbGUoKSk7Ci0gIH0KLSAg
YnJlYWs7Ci0gIGNhc2UgSURfTElOSzogewotICAgIEhUTUxMaW5rRWxlbWVudEltcGwgJmxpbmsg
PSBzdGF0aWNfY2FzdDxIVE1MTGlua0VsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgIHN3aXRj
aCAodG9rZW4pIHsKLSAgICBjYXNlIExpbmtEaXNhYmxlZDogICAgICAgIHJldHVybiBCb29sZWFu
KGxpbmsuZGlzYWJsZWQoKSk7Ci0gICAgY2FzZSBMaW5rQ2hhcnNldDogICAgICAgICByZXR1cm4g
U3RyaW5nKGxpbmsuY2hhcnNldCgpKTsKLSAgICBjYXNlIExpbmtIcmVmOiAgICAgICAgICAgIHJl
dHVybiBTdHJpbmcobGluay5ocmVmKCkpOwotICAgIGNhc2UgTGlua0hyZWZMYW5nOiAgICAgICAg
cmV0dXJuIFN0cmluZyhsaW5rLmhyZWZsYW5nKCkpOwotICAgIGNhc2UgTGlua01lZGlhOiAgICAg
ICAgICAgcmV0dXJuIFN0cmluZyhsaW5rLm1lZGlhKCkpOwotICAgIGNhc2UgTGlua1JlbDogICAg
ICAgICAgICAgcmV0dXJuIFN0cmluZyhsaW5rLnJlbCgpKTsKLSAgICBjYXNlIExpbmtSZXY6ICAg
ICAgICAgICAgIHJldHVybiBTdHJpbmcobGluay5yZXYoKSk7Ci0gICAgY2FzZSBMaW5rVGFyZ2V0
OiAgICAgICAgICByZXR1cm4gU3RyaW5nKGxpbmsudGFyZ2V0KCkpOwotICAgIGNhc2UgTGlua1R5
cGU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhsaW5rLnR5cGUoKSk7Ci0gICAgY2FzZSBMaW5r
U2hlZXQ6ICAgICAgICAgICByZXR1cm4gZ2V0RE9NU3R5bGVTaGVldChleGVjLCBsaW5rLnNoZWV0
KCkpOwotICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9USVRMRTogewotICAgIEhUTUxU
aXRsZUVsZW1lbnRJbXBsICZ0aXRsZSA9IHN0YXRpY19jYXN0PEhUTUxUaXRsZUVsZW1lbnRJbXBs
ICY+KGVsZW1lbnQpOwotICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIFRpdGxlVGV4dDog
ICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcodGl0bGUudGV4dCgpKTsKLSAgICB9Ci0gIH0K
LSAgYnJlYWs7Ci0gIGNhc2UgSURfTUVUQTogewotICAgIEhUTUxNZXRhRWxlbWVudEltcGwgJm1l
dGEgPSBzdGF0aWNfY2FzdDxIVE1MTWV0YUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgIHN3
aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIE1ldGFDb250ZW50OiAgICAgICAgIHJldHVybiBTdHJp
bmcobWV0YS5jb250ZW50KCkpOwotICAgIGNhc2UgTWV0YUh0dHBFcXVpdjogICAgICAgcmV0dXJu
IFN0cmluZyhtZXRhLmh0dHBFcXVpdigpKTsKLSAgICBjYXNlIE1ldGFOYW1lOiAgICAgICAgICAg
IHJldHVybiBTdHJpbmcobWV0YS5uYW1lKCkpOwotICAgIGNhc2UgTWV0YVNjaGVtZTogICAgICAg
ICAgcmV0dXJuIFN0cmluZyhtZXRhLnNjaGVtZSgpKTsKLSAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0g
IGNhc2UgSURfQkFTRTogewotICAgIEhUTUxCYXNlRWxlbWVudEltcGwgJmJhc2UgPSBzdGF0aWNf
Y2FzdDxIVE1MQmFzZUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgIHN3aXRjaCAodG9rZW4p
IHsKLSAgICBjYXNlIEJhc2VIcmVmOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYmFzZS5ocmVm
KCkpOwotICAgIGNhc2UgQmFzZVRhcmdldDogICAgICAgICAgcmV0dXJuIFN0cmluZyhiYXNlLnRh
cmdldCgpKTsKLSAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfSVNJTkRFWDogewotICAg
IEhUTUxJc0luZGV4RWxlbWVudEltcGwgJmlzaW5kZXggPSBzdGF0aWNfY2FzdDxIVE1MSXNJbmRl
eEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNl
IElzSW5kZXhGb3JtOiAgICAgICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsIGlzaW5kZXgu
Zm9ybSgpKTsgLy8gdHlwZSBIVE1MRm9ybUVsZW1lbnQKLSAgICBjYXNlIElzSW5kZXhQcm9tcHQ6
ICAgICAgICAgIHJldHVybiBTdHJpbmcoaXNpbmRleC5wcm9tcHQoKSk7Ci0gICAgfQotICB9Ci0g
IGJyZWFrOwotICBjYXNlIElEX1NUWUxFOiB7Ci0gICAgSFRNTFN0eWxlRWxlbWVudEltcGwgJnN0
eWxlID0gc3RhdGljX2Nhc3Q8SFRNTFN0eWxlRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAg
c3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgU3R5bGVEaXNhYmxlZDogICAgICAgIHJldHVybiBC
b29sZWFuKHN0eWxlLmRpc2FibGVkKCkpOwotICAgIGNhc2UgU3R5bGVNZWRpYTogICAgICAgICAg
IHJldHVybiBTdHJpbmcoc3R5bGUubWVkaWEoKSk7Ci0gICAgY2FzZSBTdHlsZVR5cGU6ICAgICAg
ICAgICAgcmV0dXJuIFN0cmluZyhzdHlsZS50eXBlKCkpOwotICAgIGNhc2UgU3R5bGVTaGVldDog
ICAgICAgICAgIHJldHVybiBnZXRET01TdHlsZVNoZWV0KGV4ZWMsIHN0eWxlLnNoZWV0KCkpOwot
ICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9CT0RZOiB7Ci0gICAgSFRNTEJvZHlFbGVt
ZW50SW1wbCAmYm9keSA9IHN0YXRpY19jYXN0PEhUTUxCb2R5RWxlbWVudEltcGwgJj4oZWxlbWVu
dCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgQm9keUFMaW5rOiAgICAgICAgICAg
cmV0dXJuIFN0cmluZyhib2R5LmFMaW5rKCkpOwotICAgIGNhc2UgQm9keUJhY2tncm91bmQ6ICAg
ICAgcmV0dXJuIFN0cmluZyhib2R5LmJhY2tncm91bmQoKSk7Ci0gICAgY2FzZSBCb2R5QmdDb2xv
cjogICAgICAgICByZXR1cm4gU3RyaW5nKGJvZHkuYmdDb2xvcigpKTsKLSAgICBjYXNlIEJvZHlM
aW5rOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYm9keS5saW5rKCkpOwotICAgIGNhc2UgQm9k
eVRleHQ6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhib2R5LnRleHQoKSk7Ci0gICAgY2FzZSBC
b2R5Vkxpbms6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGJvZHkudkxpbmsoKSk7Ci0gICAgZGVm
YXVsdDoKLSAgICAgIC8vIFVwZGF0ZSB0aGUgZG9jdW1lbnQncyBsYXlvdXQgYmVmb3JlIHdlIGNv
bXB1dGUgdGhlc2UgYXR0cmlidXRlcy4KLSAgICAgIERvY3VtZW50SW1wbCAqZG9jID0gYm9keS5n
ZXREb2N1bWVudCgpOwotICAgICAgaWYgKGRvYykKLSAgICAgICAgZG9jLT51cGRhdGVMYXlvdXRJ
Z25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKLSAgICAgIEtIVE1MVmlldyAqdmlldyA9IGRvYyA/
IGRvYy0+dmlldygpIDogMDsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgICAgY2FzZSBC
b2R5U2Nyb2xsTGVmdDoKLSAgICAgICAgICAgIHJldHVybiBOdW1iZXIodmlldyA/IHZpZXctPmNv
bnRlbnRzWCgpIDogMCk7Ci0gICAgICAgIGNhc2UgQm9keVNjcm9sbFRvcDoKLSAgICAgICAgICAg
IHJldHVybiBOdW1iZXIodmlldyA/IHZpZXctPmNvbnRlbnRzWSgpIDogMCk7Ci0gICAgICAgIGNh
c2UgQm9keVNjcm9sbEhlaWdodDogICByZXR1cm4gTnVtYmVyKHZpZXcgPyB2aWV3LT5jb250ZW50
c0hlaWdodCgpIDogMCk7Ci0gICAgICAgIGNhc2UgQm9keVNjcm9sbFdpZHRoOiAgICByZXR1cm4g
TnVtYmVyKHZpZXcgPyB2aWV3LT5jb250ZW50c1dpZHRoKCkgOiAwKTsKLSAgICAgIH0KLSAgICB9
Ci0gIH0KLSAgYnJlYWs7CitWYWx1ZSBIVE1MRWxlbWVudDo6aHRtbEdldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MSHRtbEVsZW1lbnRJbXBsJiBodG1s
ID0gKnN0YXRpY19jYXN0PEhUTUxIdG1sRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIGlmICh0
b2tlbiA9PSBIdG1sVmVyc2lvbikKKyAgICAgICAgcmV0dXJuIFN0cmluZyhodG1sLnZlcnNpb24o
KSk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQogCi0gIGNhc2UgSURfRk9STTogewotICAg
IEhUTUxGb3JtRWxlbWVudEltcGwgJmZvcm0gPSBzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnRJ
bXBsICY+KGVsZW1lbnQpOwotICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIEZvcm1FbGVt
ZW50czogICAgICAgIHJldHVybiBnZXRIVE1MQ29sbGVjdGlvbihleGVjLCBmb3JtLmVsZW1lbnRz
KCkuZ2V0KCkpOwotICAgIGNhc2UgRm9ybUxlbmd0aDogICAgICAgICAgcmV0dXJuIE51bWJlcihm
b3JtLmxlbmd0aCgpKTsKLSAgICBjYXNlIEZvcm1OYW1lOiAgICAgICAgICAgIHJldHVybiBTdHJp
bmcoZm9ybS5uYW1lKCkpOwotICAgIGNhc2UgRm9ybUFjY2VwdENoYXJzZXQ6ICAgcmV0dXJuIFN0
cmluZyhmb3JtLmFjY2VwdENoYXJzZXQoKSk7Ci0gICAgY2FzZSBGb3JtQWN0aW9uOiAgICAgICAg
ICByZXR1cm4gU3RyaW5nKGZvcm0uYWN0aW9uKCkpOwotICAgIGNhc2UgRm9ybUVuY1R5cGU6ICAg
ICAgICAgcmV0dXJuIFN0cmluZyhmb3JtLmVuY3R5cGUoKSk7Ci0gICAgY2FzZSBGb3JtTWV0aG9k
OiAgICAgICAgICByZXR1cm4gU3RyaW5nKGZvcm0ubWV0aG9kKCkpOwotICAgIGNhc2UgRm9ybVRh
cmdldDogICAgICAgICAgcmV0dXJuIFN0cmluZyhmb3JtLnRhcmdldCgpKTsKLSAgICB9Ci0gIH0K
LSAgYnJlYWs7Ci0gIGNhc2UgSURfU0VMRUNUOiB7Ci0gICAgSFRNTFNlbGVjdEVsZW1lbnRJbXBs
ICZzZWxlY3QgPSBzdGF0aWNfY2FzdDxIVE1MU2VsZWN0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7
Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgU2VsZWN0VHlwZTogICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKHNlbGVjdC50eXBlKCkpOwotICAgIGNhc2UgU2VsZWN0U2VsZWN0ZWRJbmRl
eDogICByZXR1cm4gTnVtYmVyKHNlbGVjdC5zZWxlY3RlZEluZGV4KCkpOwotICAgIGNhc2UgU2Vs
ZWN0VmFsdWU6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHNlbGVjdC52YWx1ZSgpKTsKLSAgICBj
YXNlIFNlbGVjdExlbmd0aDogICAgICAgICAgcmV0dXJuIE51bWJlcihzZWxlY3QubGVuZ3RoKCkp
OwotICAgIGNhc2UgU2VsZWN0Rm9ybTogICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVj
LCBzZWxlY3QuZm9ybSgpKTsgLy8gdHlwZSBIVE1MRm9ybUVsZW1lbnQKLSAgICBjYXNlIFNlbGVj
dE9wdGlvbnM6ICAgICAgICAgcmV0dXJuIGdldFNlbGVjdEhUTUxDb2xsZWN0aW9uKGV4ZWMsIHNl
bGVjdC5vcHRpb25zSFRNTENvbGxlY3Rpb24oKS5nZXQoKSwgJnNlbGVjdCk7IC8vIHR5cGUgSFRN
TENvbGxlY3Rpb24KLSAgICBjYXNlIFNlbGVjdERpc2FibGVkOiAgICAgICAgcmV0dXJuIEJvb2xl
YW4oc2VsZWN0LmRpc2FibGVkKCkpOwotICAgIGNhc2UgU2VsZWN0TXVsdGlwbGU6ICAgICAgICBy
ZXR1cm4gQm9vbGVhbihzZWxlY3QubXVsdGlwbGUoKSk7Ci0gICAgY2FzZSBTZWxlY3ROYW1lOiAg
ICAgICAgICAgIHJldHVybiBTdHJpbmcoc2VsZWN0Lm5hbWUoKSk7Ci0gICAgY2FzZSBTZWxlY3RT
aXplOiAgICAgICAgICAgIHJldHVybiBOdW1iZXIoc2VsZWN0LnNpemUoKSk7Ci0gICAgY2FzZSBT
ZWxlY3RUYWJJbmRleDogICAgICAgIHJldHVybiBOdW1iZXIoc2VsZWN0LnRhYkluZGV4KCkpOwot
ICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9PUFRHUk9VUDogewotICAgIEhUTUxPcHRH
cm91cEVsZW1lbnRJbXBsICZvcHRncm91cCA9IHN0YXRpY19jYXN0PEhUTUxPcHRHcm91cEVsZW1l
bnRJbXBsICY+KGVsZW1lbnQpOwotICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIE9wdEdy
b3VwRGlzYWJsZWQ6ICAgICAgICByZXR1cm4gQm9vbGVhbihvcHRncm91cC5kaXNhYmxlZCgpKTsK
LSAgICBjYXNlIE9wdEdyb3VwTGFiZWw6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKG9wdGdyb3Vw
LmxhYmVsKCkpOwotICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9PUFRJT046IHsKLSAg
ICBIVE1MT3B0aW9uRWxlbWVudEltcGwgJm9wdGlvbiA9IHN0YXRpY19jYXN0PEhUTUxPcHRpb25F
bGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBP
cHRpb25Gb3JtOiAgICAgICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsb3B0aW9uLmZvcm0o
KSk7IC8vIHR5cGUgSFRNTEZvcm1FbGVtZW50Ci0gICAgY2FzZSBPcHRpb25EZWZhdWx0U2VsZWN0
ZWQ6IHJldHVybiBCb29sZWFuKG9wdGlvbi5kZWZhdWx0U2VsZWN0ZWQoKSk7Ci0gICAgY2FzZSBP
cHRpb25UZXh0OiAgICAgICAgICAgIHJldHVybiBTdHJpbmcob3B0aW9uLnRleHQoKSk7Ci0gICAg
Y2FzZSBPcHRpb25JbmRleDogICAgICAgICAgIHJldHVybiBOdW1iZXIob3B0aW9uLmluZGV4KCkp
OwotICAgIGNhc2UgT3B0aW9uRGlzYWJsZWQ6ICAgICAgICByZXR1cm4gQm9vbGVhbihvcHRpb24u
ZGlzYWJsZWQoKSk7Ci0gICAgY2FzZSBPcHRpb25MYWJlbDogICAgICAgICAgIHJldHVybiBTdHJp
bmcob3B0aW9uLmxhYmVsKCkpOwotICAgIGNhc2UgT3B0aW9uU2VsZWN0ZWQ6ICAgICAgICByZXR1
cm4gQm9vbGVhbihvcHRpb24uc2VsZWN0ZWQoKSk7Ci0gICAgY2FzZSBPcHRpb25WYWx1ZTogICAg
ICAgICAgIHJldHVybiBTdHJpbmcob3B0aW9uLnZhbHVlKCkpOwotICAgIH0KLSAgfQotICBicmVh
azsKLSAgY2FzZSBJRF9JTlBVVDogewotICAgIEhUTUxJbnB1dEVsZW1lbnRJbXBsICZpbnB1dCA9
IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgIHN3aXRj
aCAodG9rZW4pIHsKLSAgICBjYXNlIElucHV0RGVmYXVsdFZhbHVlOiAgICByZXR1cm4gU3RyaW5n
KGlucHV0LmRlZmF1bHRWYWx1ZSgpKTsKLSAgICBjYXNlIElucHV0RGVmYXVsdENoZWNrZWQ6ICBy
ZXR1cm4gQm9vbGVhbihpbnB1dC5kZWZhdWx0Q2hlY2tlZCgpKTsKLSAgICBjYXNlIElucHV0Rm9y
bTogICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLGlucHV0LmZvcm0oKSk7IC8vIHR5
cGUgSFRNTEZvcm1FbGVtZW50Ci0gICAgY2FzZSBJbnB1dEFjY2VwdDogICAgICAgICAgcmV0dXJu
IFN0cmluZyhpbnB1dC5hY2NlcHQoKSk7Ci0gICAgY2FzZSBJbnB1dEFjY2Vzc0tleTogICAgICAg
cmV0dXJuIFN0cmluZyhpbnB1dC5hY2Nlc3NLZXkoKSk7Ci0gICAgY2FzZSBJbnB1dEFsaWduOiAg
ICAgICAgICAgcmV0dXJuIFN0cmluZyhpbnB1dC5hbGlnbigpKTsKLSAgICBjYXNlIElucHV0QWx0
OiAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGlucHV0LmFsdCgpKTsKLSAgICBjYXNlIElucHV0
Q2hlY2tlZDogICAgICAgICByZXR1cm4gQm9vbGVhbihpbnB1dC5jaGVja2VkKCkpOwotICAgIGNh
c2UgSW5wdXREaXNhYmxlZDogICAgICAgIHJldHVybiBCb29sZWFuKGlucHV0LmRpc2FibGVkKCkp
OwotICAgIGNhc2UgSW5wdXRNYXhMZW5ndGg6ICAgICAgIHJldHVybiBOdW1iZXIoaW5wdXQubWF4
TGVuZ3RoKCkpOwotICAgIGNhc2UgSW5wdXROYW1lOiAgICAgICAgICAgIHJldHVybiBTdHJpbmco
aW5wdXQubmFtZSgpKTsKLSAgICBjYXNlIElucHV0UmVhZE9ubHk6ICAgICAgICByZXR1cm4gQm9v
bGVhbihpbnB1dC5yZWFkT25seSgpKTsKLSAgICBjYXNlIElucHV0U2l6ZTogICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKGlucHV0LnNpemVET00oKSk7Ci0gICAgY2FzZSBJbnB1dFNyYzogICAgICAg
ICAgICAgcmV0dXJuIFN0cmluZyhpbnB1dC5zcmMoKSk7Ci0gICAgY2FzZSBJbnB1dFRhYkluZGV4
OiAgICAgICAgcmV0dXJuIE51bWJlcihpbnB1dC50YWJJbmRleCgpKTsKLSAgICBjYXNlIElucHV0
VHlwZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGlucHV0LnR5cGUoKSk7Ci0gICAgY2FzZSBJ
bnB1dFVzZU1hcDogICAgICAgICAgcmV0dXJuIFN0cmluZyhpbnB1dC51c2VNYXAoKSk7Ci0gICAg
Y2FzZSBJbnB1dFZhbHVlOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpbnB1dC52YWx1ZSgpKTsK
LSAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfVEVYVEFSRUE6IHsKLSAgICBIVE1MVGV4
dEFyZWFFbGVtZW50SW1wbCAmdGV4dGFyZWEgPSBzdGF0aWNfY2FzdDxIVE1MVGV4dEFyZWFFbGVt
ZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBUZXh0
QXJlYURlZmF1bHRWYWx1ZTogICAgcmV0dXJuIFN0cmluZyh0ZXh0YXJlYS5kZWZhdWx0VmFsdWUo
KSk7Ci0gICAgY2FzZSBUZXh0QXJlYUZvcm06ICAgICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUo
ZXhlYyx0ZXh0YXJlYS5mb3JtKCkpOyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVudAotICAgIGNhc2Ug
VGV4dEFyZWFBY2Nlc3NLZXk6ICAgICAgIHJldHVybiBTdHJpbmcodGV4dGFyZWEuYWNjZXNzS2V5
KCkpOwotICAgIGNhc2UgVGV4dEFyZWFDb2xzOiAgICAgICAgICAgIHJldHVybiBOdW1iZXIodGV4
dGFyZWEuY29scygpKTsKLSAgICBjYXNlIFRleHRBcmVhRGlzYWJsZWQ6ICAgICAgICByZXR1cm4g
Qm9vbGVhbih0ZXh0YXJlYS5kaXNhYmxlZCgpKTsKLSAgICBjYXNlIFRleHRBcmVhTmFtZTogICAg
ICAgICAgICByZXR1cm4gU3RyaW5nKHRleHRhcmVhLm5hbWUoKSk7Ci0gICAgY2FzZSBUZXh0QXJl
YVJlYWRPbmx5OiAgICAgICAgcmV0dXJuIEJvb2xlYW4odGV4dGFyZWEucmVhZE9ubHkoKSk7Ci0g
ICAgY2FzZSBUZXh0QXJlYVJvd3M6ICAgICAgICAgICAgcmV0dXJuIE51bWJlcih0ZXh0YXJlYS5y
b3dzKCkpOwotICAgIGNhc2UgVGV4dEFyZWFUYWJJbmRleDogICAgICAgIHJldHVybiBOdW1iZXIo
dGV4dGFyZWEudGFiSW5kZXgoKSk7Ci0gICAgY2FzZSBUZXh0QXJlYVR5cGU6ICAgICAgICAgICAg
cmV0dXJuIFN0cmluZyh0ZXh0YXJlYS50eXBlKCkpOwotICAgIGNhc2UgVGV4dEFyZWFWYWx1ZTog
ICAgICAgICAgIHJldHVybiBTdHJpbmcodGV4dGFyZWEudmFsdWUoKSk7Ci0gICAgfQotICB9Ci0g
IGJyZWFrOwotICBjYXNlIElEX0JVVFRPTjogewotICAgIEhUTUxCdXR0b25FbGVtZW50SW1wbCAm
YnV0dG9uID0gc3RhdGljX2Nhc3Q8SFRNTEJ1dHRvbkVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwot
ICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIEJ1dHRvbkZvcm06ICAgICAgICAgICAgcmV0
dXJuIGdldERPTU5vZGUoZXhlYyxidXR0b24uZm9ybSgpKTsgLy8gdHlwZSBIVE1MRm9ybUVsZW1l
bnQKLSAgICBjYXNlIEJ1dHRvbkFjY2Vzc0tleTogICAgICAgcmV0dXJuIFN0cmluZyhidXR0b24u
YWNjZXNzS2V5KCkpOwotICAgIGNhc2UgQnV0dG9uRGlzYWJsZWQ6ICAgICAgICByZXR1cm4gQm9v
bGVhbihidXR0b24uZGlzYWJsZWQoKSk7Ci0gICAgY2FzZSBCdXR0b25OYW1lOiAgICAgICAgICAg
IHJldHVybiBTdHJpbmcoYnV0dG9uLm5hbWUoKSk7Ci0gICAgY2FzZSBCdXR0b25UYWJJbmRleDog
ICAgICAgIHJldHVybiBOdW1iZXIoYnV0dG9uLnRhYkluZGV4KCkpOwotICAgIGNhc2UgQnV0dG9u
VHlwZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGJ1dHRvbi50eXBlKCkpOwotICAgIGNhc2Ug
QnV0dG9uVmFsdWU6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGJ1dHRvbi52YWx1ZSgpKTsKLSAg
ICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfTEFCRUw6IHsKLSAgICBIVE1MTGFiZWxFbGVt
ZW50SW1wbCAmbGFiZWwgPSBzdGF0aWNfY2FzdDxIVE1MTGFiZWxFbGVtZW50SW1wbCAmPihlbGVt
ZW50KTsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBMYWJlbEZvcm06ICAgICAgICAg
ICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyxsYWJlbC5mb3JtKCkpOyAvLyB0eXBlIEhUTUxGb3Jt
RWxlbWVudAotICAgIGNhc2UgTGFiZWxBY2Nlc3NLZXk6ICAgICAgIHJldHVybiBTdHJpbmcobGFi
ZWwuYWNjZXNzS2V5KCkpOwotICAgIGNhc2UgTGFiZWxIdG1sRm9yOiAgICAgICAgIHJldHVybiBT
dHJpbmcobGFiZWwuaHRtbEZvcigpKTsKLSAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURf
RklFTERTRVQ6IHsKLSAgICBIVE1MRmllbGRTZXRFbGVtZW50SW1wbCAmZmllbGRTZXQgPSBzdGF0
aWNfY2FzdDxIVE1MRmllbGRTZXRFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKK1ZhbHVlIEhUTUxF
bGVtZW50OjpoZWFkR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAorewor
ICAgIEhUTUxIZWFkRWxlbWVudEltcGwgJmhlYWQgPSAqc3RhdGljX2Nhc3Q8SFRNTEhlYWRFbGVt
ZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IEhlYWRQcm9maWxlKQorICAgICAg
ICByZXR1cm4gU3RyaW5nKGhlYWQucHJvZmlsZSgpKTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7
Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50OjpsaW5rR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50
IHRva2VuKSBjb25zdAoreworICAgIEhUTUxMaW5rRWxlbWVudEltcGwgJmxpbmsgPSAqc3RhdGlj
X2Nhc3Q8SFRNTExpbmtFbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tlbikg
ewotICAgIGNhc2UgRmllbGRTZXRGb3JtOiAgICAgICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4
ZWMsZmllbGRTZXQuZm9ybSgpKTsgLy8gdHlwZSBIVE1MRm9ybUVsZW1lbnQKLSAgICB9Ci0gIH0K
LSAgYnJlYWs7Ci0gIGNhc2UgSURfTEVHRU5EOiB7Ci0gICAgSFRNTExlZ2VuZEVsZW1lbnRJbXBs
ICZsZWdlbmQgPSBzdGF0aWNfY2FzdDxIVE1MTGVnZW5kRWxlbWVudEltcGwgJj4oZWxlbWVudCk7
Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgTGVnZW5kRm9ybTogICAgICAgICAgICBy
ZXR1cm4gZ2V0RE9NTm9kZShleGVjLGxlZ2VuZC5mb3JtKCkpOyAvLyB0eXBlIEhUTUxGb3JtRWxl
bWVudAotICAgIGNhc2UgTGVnZW5kQWNjZXNzS2V5OiAgICAgICByZXR1cm4gU3RyaW5nKGxlZ2Vu
ZC5hY2Nlc3NLZXkoKSk7Ci0gICAgY2FzZSBMZWdlbmRBbGlnbjogICAgICAgICAgIHJldHVybiBT
dHJpbmcobGVnZW5kLmFsaWduKCkpOworICAgICAgICBjYXNlIExpbmtEaXNhYmxlZDoKKyAgICAg
ICAgICAgIHJldHVybiBCb29sZWFuKGxpbmsuZGlzYWJsZWQoKSk7CisgICAgICAgIGNhc2UgTGlu
a0NoYXJzZXQ6CisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGxpbmsuY2hhcnNldCgpKTsKKyAg
ICAgICAgY2FzZSBMaW5rSHJlZjoKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcobGluay5ocmVm
KCkpOworICAgICAgICBjYXNlIExpbmtIcmVmTGFuZzoKKyAgICAgICAgICAgIHJldHVybiBTdHJp
bmcobGluay5ocmVmbGFuZygpKTsKKyAgICAgICAgY2FzZSBMaW5rTWVkaWE6ICAgICAgICAgICAK
KyAgICAgICAgICAgIHJldHVybiBTdHJpbmcobGluay5tZWRpYSgpKTsKKyAgICAgICAgY2FzZSBM
aW5rUmVsOiAgICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcobGluay5yZWwo
KSk7CisgICAgICAgIGNhc2UgTGlua1JldjogICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVy
biBTdHJpbmcobGluay5yZXYoKSk7CisgICAgICAgIGNhc2UgTGlua1RhcmdldDogICAgICAgICAg
CisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGxpbmsudGFyZ2V0KCkpOworICAgICAgICBjYXNl
IExpbmtUeXBlOiAgICAgICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhsaW5rLnR5
cGUoKSk7CisgICAgICAgIGNhc2UgTGlua1NoZWV0OiAgICAgICAgICAgCisgICAgICAgICAgICBy
ZXR1cm4gZ2V0RE9NU3R5bGVTaGVldChleGVjLCBsaW5rLnNoZWV0KCkpOwogICAgIH0KLSAgfQot
ICBicmVhazsKLSAgY2FzZSBJRF9VTDogewotICAgIEhUTUxVTGlzdEVsZW1lbnRJbXBsICZ1TGlz
dCA9IHN0YXRpY19jYXN0PEhUTUxVTGlzdEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgIHJl
dHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OnRpdGxlR2V0dGVyKEV4
ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxUaXRsZUVsZW1lbnRJ
bXBsJiB0aXRsZSA9ICpzdGF0aWNfY2FzdDxIVE1MVGl0bGVFbGVtZW50SW1wbCo+KGltcGwoKSk7
CisgICAgaWYgKHRva2VuID09IFRpdGxlVGV4dCkKKyAgICAgICAgcmV0dXJuIFN0cmluZyh0aXRs
ZS50ZXh0KCkpOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1l
bnQ6Om1ldGFHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAg
SFRNTE1ldGFFbGVtZW50SW1wbCYgbWV0YSA9ICpzdGF0aWNfY2FzdDxIVE1MTWV0YUVsZW1lbnRJ
bXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBVTGlzdENvbXBh
Y3Q6ICAgICAgICAgcmV0dXJuIEJvb2xlYW4odUxpc3QuY29tcGFjdCgpKTsKLSAgICBjYXNlIFVM
aXN0VHlwZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKHVMaXN0LnR5cGUoKSk7Ci0gICAgfQot
ICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX09MOiB7Ci0gICAgSFRNTE9MaXN0RWxlbWVudEltcGwg
Jm9MaXN0ID0gc3RhdGljX2Nhc3Q8SFRNTE9MaXN0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0g
ICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgT0xpc3RDb21wYWN0OiAgICAgICAgIHJldHVy
biBCb29sZWFuKG9MaXN0LmNvbXBhY3QoKSk7Ci0gICAgY2FzZSBPTGlzdFN0YXJ0OiAgICAgICAg
ICAgcmV0dXJuIE51bWJlcihvTGlzdC5zdGFydCgpKTsKLSAgICBjYXNlIE9MaXN0VHlwZTogICAg
ICAgICAgICByZXR1cm4gU3RyaW5nKG9MaXN0LnR5cGUoKSk7CisgICAgICAgIGNhc2UgTWV0YUNv
bnRlbnQ6ICAgICAgICAgcmV0dXJuIFN0cmluZyhtZXRhLmNvbnRlbnQoKSk7CisgICAgICAgIGNh
c2UgTWV0YUh0dHBFcXVpdjogICAgICAgcmV0dXJuIFN0cmluZyhtZXRhLmh0dHBFcXVpdigpKTsK
KyAgICAgICAgY2FzZSBNZXRhTmFtZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKG1ldGEubmFt
ZSgpKTsKKyAgICAgICAgY2FzZSBNZXRhU2NoZW1lOiAgICAgICAgICByZXR1cm4gU3RyaW5nKG1l
dGEuc2NoZW1lKCkpOwogICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9ETDogewotICAg
IEhUTUxETGlzdEVsZW1lbnRJbXBsICZkTGlzdCA9IHN0YXRpY19jYXN0PEhUTUxETGlzdEVsZW1l
bnRJbXBsICY+KGVsZW1lbnQpOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUg
SFRNTEVsZW1lbnQ6OmJhc2VHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0
Cit7CisgICAgSFRNTEJhc2VFbGVtZW50SW1wbCYgYmFzZSA9ICpzdGF0aWNfY2FzdDxIVE1MQmFz
ZUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBE
TGlzdENvbXBhY3Q6ICAgICAgICAgcmV0dXJuIEJvb2xlYW4oZExpc3QuY29tcGFjdCgpKTsKKyAg
ICAgICAgY2FzZSBCYXNlSHJlZjogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGJhc2UuaHJlZigp
KTsKKyAgICAgICAgY2FzZSBCYXNlVGFyZ2V0OiAgICAgICAgICByZXR1cm4gU3RyaW5nKGJhc2Uu
dGFyZ2V0KCkpOwogICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9ESVI6IHsKLSAgICBI
VE1MRGlyZWN0b3J5RWxlbWVudEltcGwgJmRpcmVjdG9yeSA9IHN0YXRpY19jYXN0PEhUTUxEaXJl
Y3RvcnlFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9
CisKK1ZhbHVlIEhUTUxFbGVtZW50Ojppc0luZGV4R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50
IHRva2VuKSBjb25zdAoreworICAgIEhUTUxJc0luZGV4RWxlbWVudEltcGwmIGlzaW5kZXggPSAq
c3RhdGljX2Nhc3Q8SFRNTElzSW5kZXhFbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNo
ICh0b2tlbikgewotICAgIGNhc2UgRGlyZWN0b3J5Q29tcGFjdDogICAgICAgICByZXR1cm4gQm9v
bGVhbihkaXJlY3RvcnkuY29tcGFjdCgpKTsKKyAgICAgICAgY2FzZSBJc0luZGV4Rm9ybTogICAg
ICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLCBpc2luZGV4LmZvcm0oKSk7IC8vIHR5cGUg
SFRNTEZvcm1FbGVtZW50CisgICAgICAgIGNhc2UgSXNJbmRleFByb21wdDogICAgICAgICAgcmV0
dXJuIFN0cmluZyhpc2luZGV4LnByb21wdCgpKTsKICAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNh
c2UgSURfTUVOVTogewotICAgIEhUTUxNZW51RWxlbWVudEltcGwgJm1lbnUgPSBzdGF0aWNfY2Fz
dDxIVE1MTWVudUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgIHJldHVybiBVbmRlZmluZWQo
KTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OnN0eWxlR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywg
aW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxTdHlsZUVsZW1lbnRJbXBsJiBzdHlsZSA9ICpz
dGF0aWNfY2FzdDxIVE1MU3R5bGVFbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0
b2tlbikgewotICAgIGNhc2UgTWVudUNvbXBhY3Q6ICAgICAgICAgcmV0dXJuIEJvb2xlYW4obWVu
dS5jb21wYWN0KCkpOworICAgICAgICBjYXNlIFN0eWxlRGlzYWJsZWQ6ICAgICAgICByZXR1cm4g
Qm9vbGVhbihzdHlsZS5kaXNhYmxlZCgpKTsKKyAgICAgICAgY2FzZSBTdHlsZU1lZGlhOiAgICAg
ICAgICAgcmV0dXJuIFN0cmluZyhzdHlsZS5tZWRpYSgpKTsKKyAgICAgICAgY2FzZSBTdHlsZVR5
cGU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhzdHlsZS50eXBlKCkpOworICAgICAgICBjYXNl
IFN0eWxlU2hlZXQ6ICAgICAgICAgICByZXR1cm4gZ2V0RE9NU3R5bGVTaGVldChleGVjLCBzdHls
ZS5zaGVldCgpKTsKICAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfTEk6IHsKLSAgICBI
VE1MTElFbGVtZW50SW1wbCAmbGkgPSBzdGF0aWNfY2FzdDxIVE1MTElFbGVtZW50SW1wbCAmPihl
bGVtZW50KTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50
Ojpib2R5R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAgIEhU
TUxCb2R5RWxlbWVudEltcGwmIGJvZHkgPSAqc3RhdGljX2Nhc3Q8SFRNTEJvZHlFbGVtZW50SW1w
bCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgTElUeXBlOiAgICAg
ICAgICAgIHJldHVybiBTdHJpbmcobGkudHlwZSgpKTsKLSAgICBjYXNlIExJVmFsdWU6ICAgICAg
ICAgICByZXR1cm4gTnVtYmVyKGxpLnZhbHVlKCkpOworICAgICAgICBjYXNlIEJvZHlBTGluazog
ICAgICAgICAgIHJldHVybiBTdHJpbmcoYm9keS5hTGluaygpKTsKKyAgICAgICAgY2FzZSBCb2R5
QmFja2dyb3VuZDogICAgICByZXR1cm4gU3RyaW5nKGJvZHkuYmFja2dyb3VuZCgpKTsKKyAgICAg
ICAgY2FzZSBCb2R5QmdDb2xvcjogICAgICAgICByZXR1cm4gU3RyaW5nKGJvZHkuYmdDb2xvcigp
KTsKKyAgICAgICAgY2FzZSBCb2R5TGluazogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGJvZHku
bGluaygpKTsKKyAgICAgICAgY2FzZSBCb2R5VGV4dDogICAgICAgICAgICByZXR1cm4gU3RyaW5n
KGJvZHkudGV4dCgpKTsKKyAgICAgICAgY2FzZSBCb2R5Vkxpbms6ICAgICAgICAgICByZXR1cm4g
U3RyaW5nKGJvZHkudkxpbmsoKSk7CisgICAgICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgICAgIC8v
IFVwZGF0ZSB0aGUgZG9jdW1lbnQncyBsYXlvdXQgYmVmb3JlIHdlIGNvbXB1dGUgdGhlc2UgYXR0
cmlidXRlcy4KKyAgICAgICAgICAgIERvY3VtZW50SW1wbCAqZG9jID0gYm9keS5nZXREb2N1bWVu
dCgpOworICAgICAgICAgICAgaWYgKGRvYykKKyAgICAgICAgICAgICAgICBkb2MtPnVwZGF0ZUxh
eW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOworICAgICAgICAgICAgS0hUTUxWaWV3ICp2
aWV3ID0gZG9jID8gZG9jLT52aWV3KCkgOiAwOworICAgICAgICAgICAgc3dpdGNoICh0b2tlbikg
eworICAgICAgICAgICAgICAgIGNhc2UgQm9keVNjcm9sbExlZnQ6CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBOdW1iZXIodmlldyA/IHZpZXctPmNvbnRlbnRzWCgpIDogMCk7CisgICAgICAg
ICAgICAgICAgY2FzZSBCb2R5U2Nyb2xsVG9wOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
TnVtYmVyKHZpZXcgPyB2aWV3LT5jb250ZW50c1koKSA6IDApOworICAgICAgICAgICAgICAgIGNh
c2UgQm9keVNjcm9sbEhlaWdodDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE51bWJlcih2
aWV3ID8gdmlldy0+Y29udGVudHNIZWlnaHQoKSA6IDApOworICAgICAgICAgICAgICAgIGNhc2Ug
Qm9keVNjcm9sbFdpZHRoOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTnVtYmVyKHZpZXcg
PyB2aWV3LT5jb250ZW50c1dpZHRoKCkgOiAwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQog
ICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9ESVY6IHsKLSAgICBIVE1MRGl2RWxlbWVu
dEltcGwgJmRpdiA9IHN0YXRpY19jYXN0PEhUTUxEaXZFbGVtZW50SW1wbCAmPihlbGVtZW50KTsK
KyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50Ojpmb3JtR2V0
dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxGb3JtRWxl
bWVudEltcGwmIGZvcm0gPSAqc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50SW1wbCo+KGltcGwo
KSk7CiAgICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgRGl2QWxpZ246ICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKGRpdi5hbGlnbigpKTsKKyAgICAgICAgY2FzZSBGb3JtRWxlbWVudHM6ICAg
ICAgICByZXR1cm4gZ2V0SFRNTENvbGxlY3Rpb24oZXhlYywgZm9ybS5lbGVtZW50cygpLmdldCgp
KTsKKyAgICAgICAgY2FzZSBGb3JtTGVuZ3RoOiAgICAgICAgICByZXR1cm4gTnVtYmVyKGZvcm0u
bGVuZ3RoKCkpOworICAgICAgICBjYXNlIEZvcm1OYW1lOiAgICAgICAgICAgIHJldHVybiBTdHJp
bmcoZm9ybS5uYW1lKCkpOworICAgICAgICBjYXNlIEZvcm1BY2NlcHRDaGFyc2V0OiAgIHJldHVy
biBTdHJpbmcoZm9ybS5hY2NlcHRDaGFyc2V0KCkpOworICAgICAgICBjYXNlIEZvcm1BY3Rpb246
ICAgICAgICAgIHJldHVybiBTdHJpbmcoZm9ybS5hY3Rpb24oKSk7CisgICAgICAgIGNhc2UgRm9y
bUVuY1R5cGU6ICAgICAgICAgcmV0dXJuIFN0cmluZyhmb3JtLmVuY3R5cGUoKSk7CisgICAgICAg
IGNhc2UgRm9ybU1ldGhvZDogICAgICAgICAgcmV0dXJuIFN0cmluZyhmb3JtLm1ldGhvZCgpKTsK
KyAgICAgICAgY2FzZSBGb3JtVGFyZ2V0OiAgICAgICAgICByZXR1cm4gU3RyaW5nKGZvcm0udGFy
Z2V0KCkpOwogICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9QOiB7Ci0gICAgSFRNTFBh
cmFncmFwaEVsZW1lbnRJbXBsICZwYXJhZ3JhcGggPSBzdGF0aWNfY2FzdDxIVE1MUGFyYWdyYXBo
RWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitW
YWx1ZSBIVE1MRWxlbWVudDo6c2VsZWN0R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2Vu
KSBjb25zdAoreworICAgIEhUTUxTZWxlY3RFbGVtZW50SW1wbCYgc2VsZWN0ID0gKnN0YXRpY19j
YXN0PEhUTUxTZWxlY3RFbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tlbikg
ewotICAgIGNhc2UgUGFyYWdyYXBoQWxpZ246ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHBhcmFn
cmFwaC5hbGlnbigpKTsKKyAgICAgICAgY2FzZSBTZWxlY3RUeXBlOiAgICAgICAgICAgIHJldHVy
biBTdHJpbmcoc2VsZWN0LnR5cGUoKSk7CisgICAgICAgIGNhc2UgU2VsZWN0U2VsZWN0ZWRJbmRl
eDogICByZXR1cm4gTnVtYmVyKHNlbGVjdC5zZWxlY3RlZEluZGV4KCkpOworICAgICAgICBjYXNl
IFNlbGVjdFZhbHVlOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhzZWxlY3QudmFsdWUoKSk7Cisg
ICAgICAgIGNhc2UgU2VsZWN0TGVuZ3RoOiAgICAgICAgICByZXR1cm4gTnVtYmVyKHNlbGVjdC5s
ZW5ndGgoKSk7CisgICAgICAgIGNhc2UgU2VsZWN0Rm9ybTogICAgICAgICAgICByZXR1cm4gZ2V0
RE9NTm9kZShleGVjLCBzZWxlY3QuZm9ybSgpKTsgLy8gdHlwZSBIVE1MRm9ybUVsZW1lbnQKKyAg
ICAgICAgY2FzZSBTZWxlY3RPcHRpb25zOiAgICAgICAgIHJldHVybiBnZXRTZWxlY3RIVE1MQ29s
bGVjdGlvbihleGVjLCBzZWxlY3Qub3B0aW9uc0hUTUxDb2xsZWN0aW9uKCkuZ2V0KCksICZzZWxl
Y3QpOyAvLyB0eXBlIEhUTUxDb2xsZWN0aW9uCisgICAgICAgIGNhc2UgU2VsZWN0RGlzYWJsZWQ6
ICAgICAgICByZXR1cm4gQm9vbGVhbihzZWxlY3QuZGlzYWJsZWQoKSk7CisgICAgICAgIGNhc2Ug
U2VsZWN0TXVsdGlwbGU6ICAgICAgICByZXR1cm4gQm9vbGVhbihzZWxlY3QubXVsdGlwbGUoKSk7
CisgICAgICAgIGNhc2UgU2VsZWN0TmFtZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKHNlbGVj
dC5uYW1lKCkpOworICAgICAgICBjYXNlIFNlbGVjdFNpemU6ICAgICAgICAgICAgcmV0dXJuIE51
bWJlcihzZWxlY3Quc2l6ZSgpKTsKKyAgICAgICAgY2FzZSBTZWxlY3RUYWJJbmRleDogICAgICAg
IHJldHVybiBOdW1iZXIoc2VsZWN0LnRhYkluZGV4KCkpOwogICAgIH0KLSAgfQotICBicmVhazsK
LSAgY2FzZSBJRF9IMToKLSAgY2FzZSBJRF9IMjoKLSAgY2FzZSBJRF9IMzoKLSAgY2FzZSBJRF9I
NDoKLSAgY2FzZSBJRF9INToKLSAgY2FzZSBJRF9INjogewotICAgIEhUTUxIZWFkaW5nRWxlbWVu
dEltcGwgJmhlYWRpbmcgPSBzdGF0aWNfY2FzdDxIVE1MSGVhZGluZ0VsZW1lbnRJbXBsICY+KGVs
ZW1lbnQpOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6
Om9wdEdyb3VwR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAg
IEhUTUxPcHRHcm91cEVsZW1lbnRJbXBsJiBvcHRncm91cCA9ICpzdGF0aWNfY2FzdDxIVE1MT3B0
R3JvdXBFbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tlbikgewotICAgIGNh
c2UgSGVhZGluZ0FsaWduOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhoZWFkaW5nLmFsaWduKCkp
OworICAgICAgICBjYXNlIE9wdEdyb3VwRGlzYWJsZWQ6ICAgICAgICByZXR1cm4gQm9vbGVhbihv
cHRncm91cC5kaXNhYmxlZCgpKTsKKyAgICAgICAgY2FzZSBPcHRHcm91cExhYmVsOiAgICAgICAg
ICAgcmV0dXJuIFN0cmluZyhvcHRncm91cC5sYWJlbCgpKTsKICAgICB9Ci0gIH0KLSAgYnJlYWs7
Ci0gIGNhc2UgSURfQkxPQ0tRVU9URTogewotICAgIEhUTUxCbG9ja3F1b3RlRWxlbWVudEltcGwg
JmJsb2NrcXVvdGUgPSBzdGF0aWNfY2FzdDxIVE1MQmxvY2txdW90ZUVsZW1lbnRJbXBsICY+KGVs
ZW1lbnQpOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6
Om9wdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBI
VE1MT3B0aW9uRWxlbWVudEltcGwmIG9wdGlvbiA9ICpzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxl
bWVudEltcGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIEJsb2Nr
UXVvdGVDaXRlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYmxvY2txdW90ZS5jaXRlKCkpOwor
ICAgICAgICBjYXNlIE9wdGlvbkZvcm06ICAgICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhl
YyxvcHRpb24uZm9ybSgpKTsgLy8gdHlwZSBIVE1MRm9ybUVsZW1lbnQKKyAgICAgICAgY2FzZSBP
cHRpb25EZWZhdWx0U2VsZWN0ZWQ6IHJldHVybiBCb29sZWFuKG9wdGlvbi5kZWZhdWx0U2VsZWN0
ZWQoKSk7CisgICAgICAgIGNhc2UgT3B0aW9uVGV4dDogICAgICAgICAgICByZXR1cm4gU3RyaW5n
KG9wdGlvbi50ZXh0KCkpOworICAgICAgICBjYXNlIE9wdGlvbkluZGV4OiAgICAgICAgICAgcmV0
dXJuIE51bWJlcihvcHRpb24uaW5kZXgoKSk7CisgICAgICAgIGNhc2UgT3B0aW9uRGlzYWJsZWQ6
ICAgICAgICByZXR1cm4gQm9vbGVhbihvcHRpb24uZGlzYWJsZWQoKSk7CisgICAgICAgIGNhc2Ug
T3B0aW9uTGFiZWw6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKG9wdGlvbi5sYWJlbCgpKTsKKyAg
ICAgICAgY2FzZSBPcHRpb25TZWxlY3RlZDogICAgICAgIHJldHVybiBCb29sZWFuKG9wdGlvbi5z
ZWxlY3RlZCgpKTsKKyAgICAgICAgY2FzZSBPcHRpb25WYWx1ZTogICAgICAgICAgIHJldHVybiBT
dHJpbmcob3B0aW9uLnZhbHVlKCkpOwogICAgIH0KLSAgfQotICBjYXNlIElEX1E6IHsKLSAgICBI
VE1MUXVvdGVFbGVtZW50SW1wbCAmcXVvdGUgPSBzdGF0aWNfY2FzdDxIVE1MUXVvdGVFbGVtZW50
SW1wbCAmPihlbGVtZW50KTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhU
TUxFbGVtZW50OjppbnB1dEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QK
K3sKKyAgICBIVE1MSW5wdXRFbGVtZW50SW1wbCYgaW5wdXQgPSAqc3RhdGljX2Nhc3Q8SFRNTElu
cHV0RWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNl
IFF1b3RlQ2l0ZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKHF1b3RlLmNpdGUoKSk7CisgICAg
ICAgIGNhc2UgSW5wdXREZWZhdWx0VmFsdWU6ICAgIHJldHVybiBTdHJpbmcoaW5wdXQuZGVmYXVs
dFZhbHVlKCkpOworICAgICAgICBjYXNlIElucHV0RGVmYXVsdENoZWNrZWQ6ICByZXR1cm4gQm9v
bGVhbihpbnB1dC5kZWZhdWx0Q2hlY2tlZCgpKTsKKyAgICAgICAgY2FzZSBJbnB1dEZvcm06ICAg
ICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyxpbnB1dC5mb3JtKCkpOyAvLyB0eXBlIEhU
TUxGb3JtRWxlbWVudAorICAgICAgICBjYXNlIElucHV0QWNjZXB0OiAgICAgICAgICByZXR1cm4g
U3RyaW5nKGlucHV0LmFjY2VwdCgpKTsKKyAgICAgICAgY2FzZSBJbnB1dEFjY2Vzc0tleTogICAg
ICAgcmV0dXJuIFN0cmluZyhpbnB1dC5hY2Nlc3NLZXkoKSk7CisgICAgICAgIGNhc2UgSW5wdXRB
bGlnbjogICAgICAgICAgIHJldHVybiBTdHJpbmcoaW5wdXQuYWxpZ24oKSk7CisgICAgICAgIGNh
c2UgSW5wdXRBbHQ6ICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoaW5wdXQuYWx0KCkpOworICAg
ICAgICBjYXNlIElucHV0Q2hlY2tlZDogICAgICAgICByZXR1cm4gQm9vbGVhbihpbnB1dC5jaGVj
a2VkKCkpOworICAgICAgICBjYXNlIElucHV0RGlzYWJsZWQ6ICAgICAgICByZXR1cm4gQm9vbGVh
bihpbnB1dC5kaXNhYmxlZCgpKTsKKyAgICAgICAgY2FzZSBJbnB1dE1heExlbmd0aDogICAgICAg
cmV0dXJuIE51bWJlcihpbnB1dC5tYXhMZW5ndGgoKSk7CisgICAgICAgIGNhc2UgSW5wdXROYW1l
OiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoaW5wdXQubmFtZSgpKTsKKyAgICAgICAgY2FzZSBJ
bnB1dFJlYWRPbmx5OiAgICAgICAgcmV0dXJuIEJvb2xlYW4oaW5wdXQucmVhZE9ubHkoKSk7Cisg
ICAgICAgIGNhc2UgSW5wdXRTaXplOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoaW5wdXQuc2l6
ZURPTSgpKTsKKyAgICAgICAgY2FzZSBJbnB1dFNyYzogICAgICAgICAgICAgcmV0dXJuIFN0cmlu
ZyhpbnB1dC5zcmMoKSk7CisgICAgICAgIGNhc2UgSW5wdXRUYWJJbmRleDogICAgICAgIHJldHVy
biBOdW1iZXIoaW5wdXQudGFiSW5kZXgoKSk7CisgICAgICAgIGNhc2UgSW5wdXRUeXBlOiAgICAg
ICAgICAgIHJldHVybiBTdHJpbmcoaW5wdXQudHlwZSgpKTsKKyAgICAgICAgY2FzZSBJbnB1dFVz
ZU1hcDogICAgICAgICAgcmV0dXJuIFN0cmluZyhpbnB1dC51c2VNYXAoKSk7CisgICAgICAgIGNh
c2UgSW5wdXRWYWx1ZTogICAgICAgICAgIHJldHVybiBTdHJpbmcoaW5wdXQudmFsdWUoKSk7CiAg
ICAgfQotICB9Ci0gIGNhc2UgSURfUFJFOiB7Ci0gICAgSFRNTFByZUVsZW1lbnRJbXBsICZwcmUg
PSBzdGF0aWNfY2FzdDxIVE1MUHJlRWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgcmV0dXJu
IFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6dGV4dEFyZWFHZXR0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTFRleHRBcmVhRWxlbWVu
dEltcGwmIHRleHRhcmVhID0gKnN0YXRpY19jYXN0PEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBsKj4o
aW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBQcmVXaWR0aDogICAgICAg
ICAgIHJldHVybiBOdW1iZXIocHJlLndpZHRoKCkpOworICAgICAgICBjYXNlIFRleHRBcmVhRGVm
YXVsdFZhbHVlOiAgICByZXR1cm4gU3RyaW5nKHRleHRhcmVhLmRlZmF1bHRWYWx1ZSgpKTsKKyAg
ICAgICAgY2FzZSBUZXh0QXJlYUZvcm06ICAgICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhl
Yyx0ZXh0YXJlYS5mb3JtKCkpOyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVudAorICAgICAgICBjYXNl
IFRleHRBcmVhQWNjZXNzS2V5OiAgICAgICByZXR1cm4gU3RyaW5nKHRleHRhcmVhLmFjY2Vzc0tl
eSgpKTsKKyAgICAgICAgY2FzZSBUZXh0QXJlYUNvbHM6ICAgICAgICAgICAgcmV0dXJuIE51bWJl
cih0ZXh0YXJlYS5jb2xzKCkpOworICAgICAgICBjYXNlIFRleHRBcmVhRGlzYWJsZWQ6ICAgICAg
ICByZXR1cm4gQm9vbGVhbih0ZXh0YXJlYS5kaXNhYmxlZCgpKTsKKyAgICAgICAgY2FzZSBUZXh0
QXJlYU5hbWU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0ZXh0YXJlYS5uYW1lKCkpOworICAg
ICAgICBjYXNlIFRleHRBcmVhUmVhZE9ubHk6ICAgICAgICByZXR1cm4gQm9vbGVhbih0ZXh0YXJl
YS5yZWFkT25seSgpKTsKKyAgICAgICAgY2FzZSBUZXh0QXJlYVJvd3M6ICAgICAgICAgICAgcmV0
dXJuIE51bWJlcih0ZXh0YXJlYS5yb3dzKCkpOworICAgICAgICBjYXNlIFRleHRBcmVhVGFiSW5k
ZXg6ICAgICAgICByZXR1cm4gTnVtYmVyKHRleHRhcmVhLnRhYkluZGV4KCkpOworICAgICAgICBj
YXNlIFRleHRBcmVhVHlwZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRleHRhcmVhLnR5cGUo
KSk7CisgICAgICAgIGNhc2UgVGV4dEFyZWFWYWx1ZTogICAgICAgICAgIHJldHVybiBTdHJpbmco
dGV4dGFyZWEudmFsdWUoKSk7CiAgICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX0JSOiB7
Ci0gICAgSFRNTEJSRWxlbWVudEltcGwgJmJyID0gc3RhdGljX2Nhc3Q8SFRNTEJSRWxlbWVudElt
cGwgJj4oZWxlbWVudCk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1M
RWxlbWVudDo6YnV0dG9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAor
eworICAgIEhUTUxCdXR0b25FbGVtZW50SW1wbCYgYnV0dG9uID0gKnN0YXRpY19jYXN0PEhUTUxC
dXR0b25FbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tlbikgewotICAgIGNh
c2UgQlJDbGVhcjogICAgICAgICAgIHJldHVybiBTdHJpbmcoYnIuY2xlYXIoKSk7Ci0gICAgfQot
ICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX0JBU0VGT05UOiB7Ci0gICAgSFRNTEJhc2VGb250RWxl
bWVudEltcGwgJmJhc2VGb250ID0gc3RhdGljX2Nhc3Q8SFRNTEJhc2VGb250RWxlbWVudEltcGwg
Jj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgQmFzZUZvbnRDb2xv
cjogICAgICAgICAgIHJldHVybiBTdHJpbmcoYmFzZUZvbnQuY29sb3IoKSk7Ci0gICAgY2FzZSBC
YXNlRm9udEZhY2U6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhiYXNlRm9udC5mYWNlKCkpOwot
ICAgIGNhc2UgQmFzZUZvbnRTaXplOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYmFzZUZvbnQu
c2l6ZSgpKTsKLSAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfRk9OVDogewotICAgIEhU
TUxGb250RWxlbWVudEltcGwgJmZvbnQgPSBzdGF0aWNfY2FzdDxIVE1MRm9udEVsZW1lbnRJbXBs
ICY+KGVsZW1lbnQpOwotICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIEZvbnRDb2xvcjog
ICAgICAgICAgIHJldHVybiBTdHJpbmcoZm9udC5jb2xvcigpKTsKLSAgICBjYXNlIEZvbnRGYWNl
OiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoZm9udC5mYWNlKCkpOwotICAgIGNhc2UgRm9udFNp
emU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhmb250LnNpemUoKSk7Ci0gICAgfQotICB9Ci0g
IGJyZWFrOwotICBjYXNlIElEX0hSOiB7Ci0gICAgSFRNTEhSRWxlbWVudEltcGwgJmhyID0gc3Rh
dGljX2Nhc3Q8SFRNTEhSRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tl
bikgewotICAgIGNhc2UgSFJBbGlnbjogICAgICAgICAgIHJldHVybiBTdHJpbmcoaHIuYWxpZ24o
KSk7Ci0gICAgY2FzZSBIUk5vU2hhZGU6ICAgICAgICAgcmV0dXJuIEJvb2xlYW4oaHIubm9TaGFk
ZSgpKTsKLSAgICBjYXNlIEhSU2l6ZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGhyLnNpemUo
KSk7Ci0gICAgY2FzZSBIUldpZHRoOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhoci53aWR0aCgp
KTsKKyAgICAgICAgY2FzZSBCdXR0b25Gb3JtOiAgICAgICAgICAgIHJldHVybiBnZXRET01Ob2Rl
KGV4ZWMsYnV0dG9uLmZvcm0oKSk7IC8vIHR5cGUgSFRNTEZvcm1FbGVtZW50CisgICAgICAgIGNh
c2UgQnV0dG9uQWNjZXNzS2V5OiAgICAgICByZXR1cm4gU3RyaW5nKGJ1dHRvbi5hY2Nlc3NLZXko
KSk7CisgICAgICAgIGNhc2UgQnV0dG9uRGlzYWJsZWQ6ICAgICAgICByZXR1cm4gQm9vbGVhbihi
dXR0b24uZGlzYWJsZWQoKSk7CisgICAgICAgIGNhc2UgQnV0dG9uTmFtZTogICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKGJ1dHRvbi5uYW1lKCkpOworICAgICAgICBjYXNlIEJ1dHRvblRhYkluZGV4
OiAgICAgICAgcmV0dXJuIE51bWJlcihidXR0b24udGFiSW5kZXgoKSk7CisgICAgICAgIGNhc2Ug
QnV0dG9uVHlwZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGJ1dHRvbi50eXBlKCkpOworICAg
ICAgICBjYXNlIEJ1dHRvblZhbHVlOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhidXR0b24udmFs
dWUoKSk7CiAgICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX0lOUzoKLSAgY2FzZSBJRF9E
RUw6IHsKLSAgICBIVE1MTW9kRWxlbWVudEltcGwgJm1vZCA9IHN0YXRpY19jYXN0PEhUTUxNb2RF
bGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1Zh
bHVlIEhUTUxFbGVtZW50OjpsYWJlbEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikg
Y29uc3QKK3sKKyAgICBIVE1MTGFiZWxFbGVtZW50SW1wbCYgbGFiZWwgPSAqc3RhdGljX2Nhc3Q8
SFRNTExhYmVsRWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAodG9rZW4pIHsKLSAg
ICBjYXNlIE1vZENpdGU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhtb2QuY2l0ZSgpKTsKLSAg
ICBjYXNlIE1vZERhdGVUaW1lOiAgICAgICAgcmV0dXJuIFN0cmluZyhtb2QuZGF0ZVRpbWUoKSk7
CisgICAgICAgIGNhc2UgTGFiZWxGb3JtOiAgICAgICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4
ZWMsbGFiZWwuZm9ybSgpKTsgLy8gdHlwZSBIVE1MRm9ybUVsZW1lbnQKKyAgICAgICAgY2FzZSBM
YWJlbEFjY2Vzc0tleTogICAgICAgcmV0dXJuIFN0cmluZyhsYWJlbC5hY2Nlc3NLZXkoKSk7Cisg
ICAgICAgIGNhc2UgTGFiZWxIdG1sRm9yOiAgICAgICAgIHJldHVybiBTdHJpbmcobGFiZWwuaHRt
bEZvcigpKTsKICAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfQTogewotICAgIEhUTUxB
bmNob3JFbGVtZW50SW1wbCAmYW5jaG9yID0gc3RhdGljX2Nhc3Q8SFRNTEFuY2hvckVsZW1lbnRJ
bXBsICY+KGVsZW1lbnQpOwotICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIEFuY2hvckFj
Y2Vzc0tleTogICAgICAgcmV0dXJuIFN0cmluZyhhbmNob3IuYWNjZXNzS2V5KCkpOwotICAgIGNh
c2UgQW5jaG9yQ2hhcnNldDogICAgICAgICByZXR1cm4gU3RyaW5nKGFuY2hvci5jaGFyc2V0KCkp
OwotICAgIGNhc2UgQW5jaG9yQ29vcmRzOiAgICAgICAgICByZXR1cm4gU3RyaW5nKGFuY2hvci5j
b29yZHMoKSk7Ci0gICAgY2FzZSBBbmNob3JIcmVmOiAgICAgICAgICAgIHJldHVybiBTdHJpbmco
YW5jaG9yLmhyZWYoKSk7Ci0gICAgY2FzZSBBbmNob3JIcmVmTGFuZzogICAgICAgIHJldHVybiBT
dHJpbmcoYW5jaG9yLmhyZWZsYW5nKCkpOwotICAgIGNhc2UgQW5jaG9ySGFzaDogICAgICAgICAg
ICByZXR1cm4gU3RyaW5nKCcjJytLVVJMKGFuY2hvci5ocmVmKCkuc3RyaW5nKCkpLnJlZigpKTsK
LSAgICBjYXNlIEFuY2hvckhvc3Q6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhLVVJMKGFuY2hv
ci5ocmVmKCkuc3RyaW5nKCkpLmhvc3QoKSk7Ci0gICAgY2FzZSBBbmNob3JIb3N0bmFtZTogewot
ICAgICAgS1VSTCB1cmwoYW5jaG9yLmhyZWYoKS5zdHJpbmcoKSk7Ci0gICAgICBrZERlYnVnKDYw
NzApIDw8ICJhbmNob3I6Omhvc3RuYW1lIHVzZXM6IiA8PHVybC51cmwoKTw8ZW5kbDsKLSAgICAg
IGlmICh1cmwucG9ydCgpPT0wKQotICAgICAgICByZXR1cm4gU3RyaW5nKHVybC5ob3N0KCkpOwot
ICAgICAgZWxzZQotICAgICAgICByZXR1cm4gU3RyaW5nKHVybC5ob3N0KCkgKyAiOiIgKyBRU3Ry
aW5nOjpudW1iZXIodXJsLnBvcnQoKSkpOwotICAgIH0KLSAgICBjYXNlIEFuY2hvclBhdGhOYW1l
OiAgICAgICAgcmV0dXJuIFN0cmluZyhLVVJMKGFuY2hvci5ocmVmKCkuc3RyaW5nKCkpLnBhdGgo
KSk7Ci0gICAgY2FzZSBBbmNob3JQb3J0OiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoUVN0cmlu
Zzo6bnVtYmVyKEtVUkwoYW5jaG9yLmhyZWYoKS5zdHJpbmcoKSkucG9ydCgpKSk7Ci0gICAgY2Fz
ZSBBbmNob3JQcm90b2NvbDogICAgICAgIHJldHVybiBTdHJpbmcoS1VSTChhbmNob3IuaHJlZigp
LnN0cmluZygpKS5wcm90b2NvbCgpKyI6Iik7Ci0gICAgY2FzZSBBbmNob3JTZWFyY2g6ICAgICAg
ICAgIHJldHVybiBTdHJpbmcoS1VSTChhbmNob3IuaHJlZigpLnN0cmluZygpKS5xdWVyeSgpKTsK
LSAgICBjYXNlIEFuY2hvck5hbWU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhhbmNob3IubmFt
ZSgpKTsKLSAgICBjYXNlIEFuY2hvclJlbDogICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhhbmNo
b3IucmVsKCkpOwotICAgIGNhc2UgQW5jaG9yUmV2OiAgICAgICAgICAgICByZXR1cm4gU3RyaW5n
KGFuY2hvci5yZXYoKSk7Ci0gICAgY2FzZSBBbmNob3JTaGFwZTogICAgICAgICAgIHJldHVybiBT
dHJpbmcoYW5jaG9yLnNoYXBlKCkpOwotICAgIGNhc2UgQW5jaG9yVGFiSW5kZXg6ICAgICAgICBy
ZXR1cm4gTnVtYmVyKGFuY2hvci50YWJJbmRleCgpKTsKLSAgICBjYXNlIEFuY2hvclRhcmdldDog
ICAgICAgICAgcmV0dXJuIFN0cmluZyhhbmNob3IudGFyZ2V0KCkpOwotICAgIGNhc2UgQW5jaG9y
VHlwZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGFuY2hvci50eXBlKCkpOwotICAgIGNhc2Ug
QW5jaG9yVGV4dDoKLSAgICAgIGlmIChEb2N1bWVudEltcGwqIGRvYyA9IGFuY2hvci5nZXREb2N1
bWVudCgpKQotICAgICAgICBkb2MtPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0
cygpOwotICAgICAgcmV0dXJuIFN0cmluZyhhbmNob3IuaW5uZXJUZXh0KCkpOwotICAgIH0KLSAg
fQotICBicmVhazsKLSAgY2FzZSBJRF9JTUc6IHsKLSAgICBIVE1MSW1hZ2VFbGVtZW50SW1wbCAm
aW1hZ2UgPSBzdGF0aWNfY2FzdDxIVE1MSW1hZ2VFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAg
ICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBJbWFnZU5hbWU6ICAgICAgICAgICAgcmV0dXJu
IFN0cmluZyhpbWFnZS5uYW1lKCkpOwotICAgIGNhc2UgSW1hZ2VBbGlnbjogICAgICAgICAgIHJl
dHVybiBTdHJpbmcoaW1hZ2UuYWxpZ24oKSk7Ci0gICAgY2FzZSBJbWFnZUFsdDogICAgICAgICAg
ICAgcmV0dXJuIFN0cmluZyhpbWFnZS5hbHQoKSk7Ci0gICAgY2FzZSBJbWFnZUJvcmRlcjogICAg
ICAgICAgcmV0dXJuIE51bWJlcihpbWFnZS5ib3JkZXIoKSk7Ci0gICAgY2FzZSBJbWFnZUhlaWdo
dDogICAgICAgICAgcmV0dXJuIE51bWJlcihpbWFnZS5oZWlnaHQodHJ1ZSkpOwotICAgIGNhc2Ug
SW1hZ2VIc3BhY2U6ICAgICAgICAgIHJldHVybiBOdW1iZXIoaW1hZ2UuaHNwYWNlKCkpOwotICAg
IGNhc2UgSW1hZ2VJc01hcDogICAgICAgICAgIHJldHVybiBCb29sZWFuKGltYWdlLmlzTWFwKCkp
OwotICAgIGNhc2UgSW1hZ2VMb25nRGVzYzogICAgICAgIHJldHVybiBTdHJpbmcoaW1hZ2UubG9u
Z0Rlc2MoKSk7Ci0gICAgY2FzZSBJbWFnZVNyYzogICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhp
bWFnZS5zcmMoKSk7Ci0gICAgY2FzZSBJbWFnZVVzZU1hcDogICAgICAgICAgcmV0dXJuIFN0cmlu
ZyhpbWFnZS51c2VNYXAoKSk7Ci0gICAgY2FzZSBJbWFnZVZzcGFjZTogICAgICAgICAgcmV0dXJu
IE51bWJlcihpbWFnZS52c3BhY2UoKSk7Ci0gICAgY2FzZSBJbWFnZVdpZHRoOiAgICAgICAgICAg
cmV0dXJuIE51bWJlcihpbWFnZS53aWR0aCh0cnVlKSk7Ci0gICAgY2FzZSBJbWFnZVg6ICAgICAg
ICAgICAgICAgcmV0dXJuIE51bWJlcihpbWFnZS54KCkpOwotICAgIGNhc2UgSW1hZ2VZOiAgICAg
ICAgICAgICAgIHJldHVybiBOdW1iZXIoaW1hZ2UueSgpKTsKLSAgICB9Ci0gIH0KLSAgYnJlYWs7
Ci0gIGNhc2UgSURfT0JKRUNUOiB7Ci0gICAgSFRNTE9iamVjdEVsZW1lbnRJbXBsICZvYmplY3Qg
PSBzdGF0aWNfY2FzdDxIVE1MT2JqZWN0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgc3dp
dGNoICh0b2tlbikgewotICAgIGNhc2UgT2JqZWN0Rm9ybTogICAgICAgICAgICByZXR1cm4gZ2V0
RE9NTm9kZShleGVjLG9iamVjdC5mb3JtKCkpOyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVudAotICAg
IGNhc2UgT2JqZWN0Q29kZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKG9iamVjdC5jb2RlKCkp
OwotICAgIGNhc2UgT2JqZWN0QWxpZ246ICAgICAgICAgICByZXR1cm4gU3RyaW5nKG9iamVjdC5h
bGlnbigpKTsKLSAgICBjYXNlIE9iamVjdEFyY2hpdmU6ICAgICAgICAgcmV0dXJuIFN0cmluZyhv
YmplY3QuYXJjaGl2ZSgpKTsKLSAgICBjYXNlIE9iamVjdEJvcmRlcjogICAgICAgICAgcmV0dXJu
IFN0cmluZyhvYmplY3QuYm9yZGVyKCkpOwotICAgIGNhc2UgT2JqZWN0Q29kZUJhc2U6ICAgICAg
ICByZXR1cm4gU3RyaW5nKG9iamVjdC5jb2RlQmFzZSgpKTsKLSAgICBjYXNlIE9iamVjdENvZGVU
eXBlOiAgICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3QuY29kZVR5cGUoKSk7Ci0gICAgY2FzZSBP
YmplY3RDb250ZW50RG9jdW1lbnQ6IHJldHVybiBjaGVja05vZGVTZWN1cml0eShleGVjLG9iamVj
dC5jb250ZW50RG9jdW1lbnQoKSkgPyAKLQkJCQkgICAgICAgZ2V0RE9NTm9kZShleGVjLCBvYmpl
Y3QuY29udGVudERvY3VtZW50KCkpIDogVW5kZWZpbmVkKCk7Ci0gICAgY2FzZSBPYmplY3REYXRh
OiAgICAgICAgICAgIHJldHVybiBTdHJpbmcob2JqZWN0LmRhdGEoKSk7Ci0gICAgY2FzZSBPYmpl
Y3REZWNsYXJlOiAgICAgICAgIHJldHVybiBCb29sZWFuKG9iamVjdC5kZWNsYXJlKCkpOwotICAg
IGNhc2UgT2JqZWN0SGVpZ2h0OiAgICAgICAgICByZXR1cm4gU3RyaW5nKG9iamVjdC5oZWlnaHQo
KSk7Ci0gICAgY2FzZSBPYmplY3RIc3BhY2U6ICAgICAgICAgIHJldHVybiBTdHJpbmcob2JqZWN0
LmhzcGFjZSgpKTsKLSAgICBjYXNlIE9iamVjdE5hbWU6ICAgICAgICAgICAgcmV0dXJuIFN0cmlu
ZyhvYmplY3QubmFtZSgpKTsKLSAgICBjYXNlIE9iamVjdFN0YW5kYnk6ICAgICAgICAgcmV0dXJu
IFN0cmluZyhvYmplY3Quc3RhbmRieSgpKTsKLSAgICBjYXNlIE9iamVjdFRhYkluZGV4OiAgICAg
ICAgcmV0dXJuIE51bWJlcihvYmplY3QudGFiSW5kZXgoKSk7Ci0gICAgY2FzZSBPYmplY3RUeXBl
OiAgICAgICAgICAgIHJldHVybiBTdHJpbmcob2JqZWN0LnR5cGUoKSk7Ci0gICAgY2FzZSBPYmpl
Y3RVc2VNYXA6ICAgICAgICAgIHJldHVybiBTdHJpbmcob2JqZWN0LnVzZU1hcCgpKTsKLSAgICBj
YXNlIE9iamVjdFZzcGFjZTogICAgICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3QudnNwYWNlKCkp
OwotICAgIGNhc2UgT2JqZWN0V2lkdGg6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKG9iamVjdC53
aWR0aCgpKTsKLSAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfUEFSQU06IHsKLSAgICBI
VE1MUGFyYW1FbGVtZW50SW1wbCAmcGFyYW0gPSBzdGF0aWNfY2FzdDxIVE1MUGFyYW1FbGVtZW50
SW1wbCAmPihlbGVtZW50KTsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBQYXJhbU5h
bWU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhwYXJhbS5uYW1lKCkpOwotICAgIGNhc2UgUGFy
YW1UeXBlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcocGFyYW0udHlwZSgpKTsKLSAgICBjYXNl
IFBhcmFtVmFsdWU6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHBhcmFtLnZhbHVlKCkpOwotICAg
IGNhc2UgUGFyYW1WYWx1ZVR5cGU6ICAgICAgIHJldHVybiBTdHJpbmcocGFyYW0udmFsdWVUeXBl
KCkpOwotICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9BUFBMRVQ6IHsKLSAgICBIVE1M
QXBwbGV0RWxlbWVudEltcGwgJmFwcGxldCA9IHN0YXRpY19jYXN0PEhUTUxBcHBsZXRFbGVtZW50
SW1wbCAmPihlbGVtZW50KTsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBBcHBsZXRB
bGlnbjogICAgICAgICAgIHJldHVybiBTdHJpbmcoYXBwbGV0LmFsaWduKCkpOwotICAgIGNhc2Ug
QXBwbGV0QWx0OiAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGFwcGxldC5hbHQoKSk7Ci0gICAg
Y2FzZSBBcHBsZXRBcmNoaXZlOiAgICAgICAgIHJldHVybiBTdHJpbmcoYXBwbGV0LmFyY2hpdmUo
KSk7Ci0gICAgY2FzZSBBcHBsZXRDb2RlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYXBwbGV0
LmNvZGUoKSk7Ci0gICAgY2FzZSBBcHBsZXRDb2RlQmFzZTogICAgICAgIHJldHVybiBTdHJpbmco
YXBwbGV0LmNvZGVCYXNlKCkpOwotICAgIGNhc2UgQXBwbGV0SGVpZ2h0OiAgICAgICAgICByZXR1
cm4gU3RyaW5nKGFwcGxldC5oZWlnaHQoKSk7Ci0gICAgY2FzZSBBcHBsZXRIc3BhY2U6ICAgICAg
ICAgIHJldHVybiBTdHJpbmcoYXBwbGV0LmhzcGFjZSgpKTsKLSAgICBjYXNlIEFwcGxldE5hbWU6
ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhhcHBsZXQubmFtZSgpKTsKLSAgICBjYXNlIEFwcGxl
dE9iamVjdDogICAgICAgICAgcmV0dXJuIFN0cmluZyhhcHBsZXQub2JqZWN0KCkpOwotICAgIGNh
c2UgQXBwbGV0VnNwYWNlOiAgICAgICAgICByZXR1cm4gU3RyaW5nKGFwcGxldC52c3BhY2UoKSk7
Ci0gICAgY2FzZSBBcHBsZXRXaWR0aDogICAgICAgICAgIHJldHVybiBTdHJpbmcoYXBwbGV0Lndp
ZHRoKCkpOwotICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9NQVA6IHsKLSAgICBIVE1M
TWFwRWxlbWVudEltcGwgJm1hcCA9IHN0YXRpY19jYXN0PEhUTUxNYXBFbGVtZW50SW1wbCAmPihl
bGVtZW50KTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50
OjpmaWVsZFNldEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAg
ICBIVE1MRmllbGRTZXRFbGVtZW50SW1wbCYgZmllbGRTZXQgPSAqc3RhdGljX2Nhc3Q8SFRNTEZp
ZWxkU2V0RWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIGlmICh0b2tlbiA9PSBGaWVsZFNldEZv
cm0pCisgICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsZmllbGRTZXQuZm9ybSgpKTsgLy8g
dHlwZSBIVE1MRm9ybUVsZW1lbnQKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVl
IEhUTUxFbGVtZW50OjpsZWdlbmRHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNv
bnN0Cit7CisgICAgSFRNTExlZ2VuZEVsZW1lbnRJbXBsJiBsZWdlbmQgPSAqc3RhdGljX2Nhc3Q8
SFRNTExlZ2VuZEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0g
ICAgY2FzZSBNYXBBcmVhczogICAgICAgICAgIHJldHVybiBnZXRIVE1MQ29sbGVjdGlvbihleGVj
LCBtYXAuYXJlYXMoKS5nZXQoKSk7IC8vIHR5cGUgSFRNTENvbGxlY3Rpb24KLSAgICBjYXNlIE1h
cE5hbWU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhtYXAubmFtZSgpKTsKLSAgICB9Ci0gIH0K
LSAgYnJlYWs7Ci0gIGNhc2UgSURfQVJFQTogewotICAgIEhUTUxBcmVhRWxlbWVudEltcGwgJmFy
ZWEgPSBzdGF0aWNfY2FzdDxIVE1MQXJlYUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgIHN3
aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIEFyZWFBY2Nlc3NLZXk6ICAgICAgIHJldHVybiBTdHJp
bmcoYXJlYS5hY2Nlc3NLZXkoKSk7Ci0gICAgY2FzZSBBcmVhQWx0OiAgICAgICAgICAgICByZXR1
cm4gU3RyaW5nKGFyZWEuYWx0KCkpOwotICAgIGNhc2UgQXJlYUNvb3JkczogICAgICAgICAgcmV0
dXJuIFN0cmluZyhhcmVhLmNvb3JkcygpKTsKLSAgICBjYXNlIEFyZWFIcmVmOiAgICAgICAgICAg
IHJldHVybiBTdHJpbmcoYXJlYS5ocmVmKCkpOwotICAgIGNhc2UgQXJlYUhhc2g6ICAgICAgICAg
ICAgcmV0dXJuIFN0cmluZygnIycrS1VSTChhcmVhLmhyZWYoKS5zdHJpbmcoKSkucmVmKCkpOwot
ICAgIGNhc2UgQXJlYUhvc3Q6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhLVVJMKGFyZWEuaHJl
ZigpLnN0cmluZygpKS5ob3N0KCkpOwotICAgIGNhc2UgQXJlYUhvc3ROYW1lOiB7Ci0gICAgICBL
VVJMIHVybChhcmVhLmhyZWYoKS5zdHJpbmcoKSk7Ci0gICAgICBrZERlYnVnKDYwNzApIDw8ICJs
aW5rOjpob3N0bmFtZSB1c2VzOiIgPDx1cmwudXJsKCk8PGVuZGw7Ci0gICAgICBpZiAodXJsLnBv
cnQoKT09MCkKLSAgICAgICAgcmV0dXJuIFN0cmluZyh1cmwuaG9zdCgpKTsKLSAgICAgIGVsc2UK
LSAgICAgICAgcmV0dXJuIFN0cmluZyh1cmwuaG9zdCgpICsgIjoiICsgUVN0cmluZzo6bnVtYmVy
KHVybC5wb3J0KCkpKTsKKyAgICAgICAgY2FzZSBMZWdlbmRGb3JtOiAgICAgICAgICAgIHJldHVy
biBnZXRET01Ob2RlKGV4ZWMsbGVnZW5kLmZvcm0oKSk7IC8vIHR5cGUgSFRNTEZvcm1FbGVtZW50
CisgICAgICAgIGNhc2UgTGVnZW5kQWNjZXNzS2V5OiAgICAgICByZXR1cm4gU3RyaW5nKGxlZ2Vu
ZC5hY2Nlc3NLZXkoKSk7CisgICAgICAgIGNhc2UgTGVnZW5kQWxpZ246ICAgICAgICAgICByZXR1
cm4gU3RyaW5nKGxlZ2VuZC5hbGlnbigpKTsKICAgICB9Ci0gICAgY2FzZSBBcmVhUGF0aE5hbWU6
ICAgICAgICByZXR1cm4gU3RyaW5nKEtVUkwoYXJlYS5ocmVmKCkuc3RyaW5nKCkpLnBhdGgoKSk7
Ci0gICAgY2FzZSBBcmVhUG9ydDogICAgICAgICAgICByZXR1cm4gU3RyaW5nKFFTdHJpbmc6Om51
bWJlcihLVVJMKGFyZWEuaHJlZigpLnN0cmluZygpKS5wb3J0KCkpKTsKLSAgICBjYXNlIEFyZWFQ
cm90b2NvbDogICAgICAgIHJldHVybiBTdHJpbmcoS1VSTChhcmVhLmhyZWYoKS5zdHJpbmcoKSku
cHJvdG9jb2woKSsiOiIpOwotICAgIGNhc2UgQXJlYVNlYXJjaDogICAgICAgICAgcmV0dXJuIFN0
cmluZyhLVVJMKGFyZWEuaHJlZigpLnN0cmluZygpKS5xdWVyeSgpKTsKLSAgICBjYXNlIEFyZWFO
b0hyZWY6ICAgICAgICAgIHJldHVybiBCb29sZWFuKGFyZWEubm9IcmVmKCkpOwotICAgIGNhc2Ug
QXJlYVNoYXBlOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhhcmVhLnNoYXBlKCkpOwotICAgIGNh
c2UgQXJlYVRhYkluZGV4OiAgICAgICAgcmV0dXJuIE51bWJlcihhcmVhLnRhYkluZGV4KCkpOwot
ICAgIGNhc2UgQXJlYVRhcmdldDogICAgICAgICAgcmV0dXJuIFN0cmluZyhhcmVhLnRhcmdldCgp
KTsKLSAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfU0NSSVBUOiB7Ci0gICAgSFRNTFNj
cmlwdEVsZW1lbnRJbXBsICZzY3JpcHQgPSBzdGF0aWNfY2FzdDxIVE1MU2NyaXB0RWxlbWVudElt
cGwgJj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgU2NyaXB0VGV4
dDogICAgICAgICAgICByZXR1cm4gU3RyaW5nKHNjcmlwdC50ZXh0KCkpOwotICAgIGNhc2UgU2Ny
aXB0SHRtbEZvcjogICAgICAgICByZXR1cm4gU3RyaW5nKHNjcmlwdC5odG1sRm9yKCkpOwotICAg
IGNhc2UgU2NyaXB0RXZlbnQ6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHNjcmlwdC5ldmVudCgp
KTsKLSAgICBjYXNlIFNjcmlwdENoYXJzZXQ6ICAgICAgICAgcmV0dXJuIFN0cmluZyhzY3JpcHQu
Y2hhcnNldCgpKTsKLSAgICBjYXNlIFNjcmlwdERlZmVyOiAgICAgICAgICAgcmV0dXJuIEJvb2xl
YW4oc2NyaXB0LmRlZmVyKCkpOwotICAgIGNhc2UgU2NyaXB0U3JjOiAgICAgICAgICAgICByZXR1
cm4gU3RyaW5nKHNjcmlwdC5zcmMoKSk7Ci0gICAgY2FzZSBTY3JpcHRUeXBlOiAgICAgICAgICAg
IHJldHVybiBTdHJpbmcoc2NyaXB0LnR5cGUoKSk7Ci0gICAgfQotICB9Ci0gIGJyZWFrOwotICBj
YXNlIElEX1RBQkxFOiB7Ci0gICAgSFRNTFRhYmxlRWxlbWVudEltcGwgJnRhYmxlID0gc3RhdGlj
X2Nhc3Q8SFRNTFRhYmxlRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tl
bikgewotICAgIGNhc2UgVGFibGVDYXB0aW9uOiAgICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4
ZWMsdGFibGUuY2FwdGlvbigpKTsgLy8gdHlwZSBIVE1MVGFibGVDYXB0aW9uRWxlbWVudAotICAg
IGNhc2UgVGFibGVUSGVhZDogICAgICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsdGFibGUu
dEhlYWQoKSk7IC8vIHR5cGUgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQKLSAgICBjYXNlIFRhYmxl
VEZvb3Q6ICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLHRhYmxlLnRGb290KCkpOyAv
LyB0eXBlIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50Ci0gICAgY2FzZSBUYWJsZVJvd3M6ICAgICAg
ICAgICAgcmV0dXJuIGdldEhUTUxDb2xsZWN0aW9uKGV4ZWMsIHRhYmxlLnJvd3MoKS5nZXQoKSk7
IC8vIHR5cGUgSFRNTENvbGxlY3Rpb24KLSAgICBjYXNlIFRhYmxlVEJvZGllczogICAgICAgICBy
ZXR1cm4gZ2V0SFRNTENvbGxlY3Rpb24oZXhlYywgdGFibGUudEJvZGllcygpLmdldCgpKTsgLy8g
dHlwZSBIVE1MQ29sbGVjdGlvbgotICAgIGNhc2UgVGFibGVBbGlnbjogICAgICAgICAgIHJldHVy
biBTdHJpbmcodGFibGUuYWxpZ24oKSk7Ci0gICAgY2FzZSBUYWJsZUJnQ29sb3I6ICAgICAgICAg
cmV0dXJuIFN0cmluZyh0YWJsZS5iZ0NvbG9yKCkpOwotICAgIGNhc2UgVGFibGVCb3JkZXI6ICAg
ICAgICAgIHJldHVybiBTdHJpbmcodGFibGUuYm9yZGVyKCkpOwotICAgIGNhc2UgVGFibGVDZWxs
UGFkZGluZzogICAgIHJldHVybiBTdHJpbmcodGFibGUuY2VsbFBhZGRpbmcoKSk7Ci0gICAgY2Fz
ZSBUYWJsZUNlbGxTcGFjaW5nOiAgICAgcmV0dXJuIFN0cmluZyh0YWJsZS5jZWxsU3BhY2luZygp
KTsKLSAgICBjYXNlIFRhYmxlRnJhbWU6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlLmZy
YW1lKCkpOwotICAgIGNhc2UgVGFibGVSdWxlczogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFi
bGUucnVsZXMoKSk7Ci0gICAgY2FzZSBUYWJsZVN1bW1hcnk6ICAgICAgICAgcmV0dXJuIFN0cmlu
Zyh0YWJsZS5zdW1tYXJ5KCkpOwotICAgIGNhc2UgVGFibGVXaWR0aDogICAgICAgICAgIHJldHVy
biBTdHJpbmcodGFibGUud2lkdGgoKSk7Ci0gICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElE
X0NBUFRJT046IHsKLSAgICBIVE1MVGFibGVDYXB0aW9uRWxlbWVudEltcGwgJnRhYmxlQ2FwdGlv
biA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZUNhcHRpb25FbGVtZW50SW1wbCAmPihlbGVtZW50KTsK
KyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50Ojp1TGlzdEdl
dHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MVUxpc3RF
bGVtZW50SW1wbCYgdUxpc3QgPSAqc3RhdGljX2Nhc3Q8SFRNTFVMaXN0RWxlbWVudEltcGwqPihp
bXBsKCkpOwogICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIFRhYmxlQ2FwdGlvbkFsaWdu
OiAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ2FwdGlvbi5hbGlnbigpKTsKLSAgICB9Ci0gIH0K
LSAgYnJlYWs7Ci0gIGNhc2UgSURfQ09MOiB7Ci0gICAgSFRNTFRhYmxlQ29sRWxlbWVudEltcGwg
JnRhYmxlQ29sID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ29sRWxlbWVudEltcGwgJj4oZWxlbWVu
dCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgVGFibGVDb2xBbGlnbjogICAgICAg
ICAgIHJldHVybiBTdHJpbmcodGFibGVDb2wuYWxpZ24oKSk7Ci0gICAgY2FzZSBUYWJsZUNvbENo
OiAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNvbC5jaCgpKTsKLSAgICBjYXNlIFRh
YmxlQ29sQ2hPZmY6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ29sLmNoT2ZmKCkpOwot
ICAgIGNhc2UgVGFibGVDb2xTcGFuOiAgICAgICAgICAgIHJldHVybiBOdW1iZXIodGFibGVDb2wu
c3BhbigpKTsKLSAgICBjYXNlIFRhYmxlQ29sVkFsaWduOiAgICAgICAgICByZXR1cm4gU3RyaW5n
KHRhYmxlQ29sLnZBbGlnbigpKTsKLSAgICBjYXNlIFRhYmxlQ29sV2lkdGg6ICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKHRhYmxlQ29sLndpZHRoKCkpOwotICAgIH0KLSAgfQotICBicmVhazsKLSAg
Y2FzZSBJRF9USEVBRDoKLSAgY2FzZSBJRF9UQk9EWToKLSAgY2FzZSBJRF9URk9PVDogewotICAg
IEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbCAmdGFibGVTZWN0aW9uID0gc3RhdGljX2Nhc3Q8
SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgIHN3aXRjaCAodG9r
ZW4pIHsKLSAgICBjYXNlIFRhYmxlU2VjdGlvbkFsaWduOiAgICAgICAgICAgcmV0dXJuIFN0cmlu
Zyh0YWJsZVNlY3Rpb24uYWxpZ24oKSk7Ci0gICAgY2FzZSBUYWJsZVNlY3Rpb25DaDogICAgICAg
ICAgICAgIHJldHVybiBTdHJpbmcodGFibGVTZWN0aW9uLmNoKCkpOwotICAgIGNhc2UgVGFibGVT
ZWN0aW9uQ2hPZmY6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlU2VjdGlvbi5jaE9mZigp
KTsKLSAgICBjYXNlIFRhYmxlU2VjdGlvblZBbGlnbjogICAgICAgICAgcmV0dXJuIFN0cmluZyh0
YWJsZVNlY3Rpb24udkFsaWduKCkpOwotICAgIGNhc2UgVGFibGVTZWN0aW9uUm93czogICAgICAg
ICAgICByZXR1cm4gZ2V0SFRNTENvbGxlY3Rpb24oZXhlYywgdGFibGVTZWN0aW9uLnJvd3MoKS5n
ZXQoKSk7IC8vIHR5cGUgSFRNTENvbGxlY3Rpb24KLSAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNh
c2UgSURfVFI6IHsKLSAgIEhUTUxUYWJsZVJvd0VsZW1lbnRJbXBsICZ0YWJsZVJvdyA9IHN0YXRp
Y19jYXN0PEhUTUxUYWJsZVJvd0VsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgc3dpdGNoICh0
b2tlbikgewotICAgY2FzZSBUYWJsZVJvd1Jvd0luZGV4OiAgICAgICAgcmV0dXJuIE51bWJlcih0
YWJsZVJvdy5yb3dJbmRleCgpKTsKLSAgIGNhc2UgVGFibGVSb3dTZWN0aW9uUm93SW5kZXg6IHJl
dHVybiBOdW1iZXIodGFibGVSb3cuc2VjdGlvblJvd0luZGV4KCkpOwotICAgY2FzZSBUYWJsZVJv
d0NlbGxzOiAgICAgICAgICAgcmV0dXJuIGdldEhUTUxDb2xsZWN0aW9uKGV4ZWMsIHRhYmxlUm93
LmNlbGxzKCkuZ2V0KCkpOyAvLyB0eXBlIEhUTUxDb2xsZWN0aW9uCi0gICBjYXNlIFRhYmxlUm93
QWxpZ246ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlUm93LmFsaWduKCkpOwotICAgY2Fz
ZSBUYWJsZVJvd0JnQ29sb3I6ICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZVJvdy5iZ0NvbG9y
KCkpOwotICAgY2FzZSBUYWJsZVJvd0NoOiAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJs
ZVJvdy5jaCgpKTsKLSAgIGNhc2UgVGFibGVSb3dDaE9mZjogICAgICAgICAgIHJldHVybiBTdHJp
bmcodGFibGVSb3cuY2hPZmYoKSk7Ci0gICBjYXNlIFRhYmxlUm93VkFsaWduOiAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKHRhYmxlUm93LnZBbGlnbigpKTsKLSAgIH0KLSAgfQotICBicmVhazsKLSAg
Y2FzZSBJRF9USDoKLSAgY2FzZSBJRF9URDogewotICAgIEhUTUxUYWJsZUNlbGxFbGVtZW50SW1w
bCAmdGFibGVDZWxsID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsICY+KGVs
ZW1lbnQpOwotICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIFRhYmxlQ2VsbENlbGxJbmRl
eDogICAgICAgcmV0dXJuIE51bWJlcih0YWJsZUNlbGwuY2VsbEluZGV4KCkpOwotICAgIGNhc2Ug
VGFibGVDZWxsQWJicjogICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ2VsbC5hYmJyKCkp
OwotICAgIGNhc2UgVGFibGVDZWxsQWxpZ246ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxl
Q2VsbC5hbGlnbigpKTsKLSAgICBjYXNlIFRhYmxlQ2VsbEF4aXM6ICAgICAgICAgICAgcmV0dXJu
IFN0cmluZyh0YWJsZUNlbGwuYXhpcygpKTsKLSAgICBjYXNlIFRhYmxlQ2VsbEJnQ29sb3I6ICAg
ICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNlbGwuYmdDb2xvcigpKTsKLSAgICBjYXNlIFRhYmxl
Q2VsbENoOiAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNlbGwuY2goKSk7Ci0gICAg
Y2FzZSBUYWJsZUNlbGxDaE9mZjogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVDZWxsLmNo
T2ZmKCkpOwotICAgIGNhc2UgVGFibGVDZWxsQ29sU3BhbjogICAgICAgICByZXR1cm4gTnVtYmVy
KHRhYmxlQ2VsbC5jb2xTcGFuKCkpOwotICAgIGNhc2UgVGFibGVDZWxsSGVhZGVyczogICAgICAg
ICByZXR1cm4gU3RyaW5nKHRhYmxlQ2VsbC5oZWFkZXJzKCkpOwotICAgIGNhc2UgVGFibGVDZWxs
SGVpZ2h0OiAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ2VsbC5oZWlnaHQoKSk7Ci0gICAg
Y2FzZSBUYWJsZUNlbGxOb1dyYXA6ICAgICAgICAgIHJldHVybiBCb29sZWFuKHRhYmxlQ2VsbC5u
b1dyYXAoKSk7Ci0gICAgY2FzZSBUYWJsZUNlbGxSb3dTcGFuOiAgICAgICAgIHJldHVybiBOdW1i
ZXIodGFibGVDZWxsLnJvd1NwYW4oKSk7Ci0gICAgY2FzZSBUYWJsZUNlbGxTY29wZTogICAgICAg
ICAgIHJldHVybiBTdHJpbmcodGFibGVDZWxsLnNjb3BlKCkpOwotICAgIGNhc2UgVGFibGVDZWxs
VkFsaWduOiAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ2VsbC52QWxpZ24oKSk7Ci0gICAg
Y2FzZSBUYWJsZUNlbGxXaWR0aDogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVDZWxsLndp
ZHRoKCkpOworICAgICAgICBjYXNlIFVMaXN0Q29tcGFjdDogICAgICAgICByZXR1cm4gQm9vbGVh
bih1TGlzdC5jb21wYWN0KCkpOworICAgICAgICBjYXNlIFVMaXN0VHlwZTogICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKHVMaXN0LnR5cGUoKSk7CiAgICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNl
IElEX0ZSQU1FU0VUOiB7Ci0gICAgSFRNTEZyYW1lU2V0RWxlbWVudEltcGwgJmZyYW1lU2V0ID0g
c3RhdGljX2Nhc3Q8SFRNTEZyYW1lU2V0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgcmV0
dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6b0xpc3RHZXR0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTE9MaXN0RWxlbWVudElt
cGwmIG9MaXN0ID0gKnN0YXRpY19jYXN0PEhUTUxPTGlzdEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsK
ICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBGcmFtZVNldENvbHM6ICAgICAgICAgICAg
cmV0dXJuIFN0cmluZyhmcmFtZVNldC5jb2xzKCkpOwotICAgIGNhc2UgRnJhbWVTZXRSb3dzOiAg
ICAgICAgICAgIHJldHVybiBTdHJpbmcoZnJhbWVTZXQucm93cygpKTsKLSAgICB9Ci0gIH0KLSAg
YnJlYWs7Ci0gIGNhc2UgSURfRlJBTUU6IHsKLSAgICBIVE1MRnJhbWVFbGVtZW50SW1wbCAmZnJh
bWVFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEZyYW1lRWxlbWVudEltcGwgJj4oZWxlbWVudCk7
Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgRnJhbWVDb250ZW50RG9jdW1lbnQ6IHJl
dHVybiBjaGVja05vZGVTZWN1cml0eShleGVjLGZyYW1lRWxlbWVudC5jb250ZW50RG9jdW1lbnQo
KSkgPyAKLQkJCQkgICAgICBnZXRET01Ob2RlKGV4ZWMsIGZyYW1lRWxlbWVudC5jb250ZW50RG9j
dW1lbnQoKSkgOiBVbmRlZmluZWQoKTsKLSAgICBjYXNlIEZyYW1lQ29udGVudFdpbmRvdzogICBy
ZXR1cm4gY2hlY2tOb2RlU2VjdXJpdHkoZXhlYyxmcmFtZUVsZW1lbnQuY29udGVudERvY3VtZW50
KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFdpbmRvdzo6cmV0cmll
dmUoZnJhbWVFbGVtZW50LmNvbnRlbnRQYXJ0KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA6IFVuZGVmaW5lZCgpOwotICAgIGNhc2UgRnJhbWVGcmFtZUJvcmRlcjogICAg
IHJldHVybiBTdHJpbmcoZnJhbWVFbGVtZW50LmZyYW1lQm9yZGVyKCkpOwotICAgIGNhc2UgRnJh
bWVMb25nRGVzYzogICAgICAgIHJldHVybiBTdHJpbmcoZnJhbWVFbGVtZW50LmxvbmdEZXNjKCkp
OwotICAgIGNhc2UgRnJhbWVNYXJnaW5IZWlnaHQ6ICAgIHJldHVybiBTdHJpbmcoZnJhbWVFbGVt
ZW50Lm1hcmdpbkhlaWdodCgpKTsKLSAgICBjYXNlIEZyYW1lTWFyZ2luV2lkdGg6ICAgICByZXR1
cm4gU3RyaW5nKGZyYW1lRWxlbWVudC5tYXJnaW5XaWR0aCgpKTsKLSAgICBjYXNlIEZyYW1lTmFt
ZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGZyYW1lRWxlbWVudC5uYW1lKCkpOwotICAgIGNh
c2UgRnJhbWVOb1Jlc2l6ZTogICAgICAgIHJldHVybiBCb29sZWFuKGZyYW1lRWxlbWVudC5ub1Jl
c2l6ZSgpKTsKLSAgICBjYXNlIEZyYW1lU2Nyb2xsaW5nOiAgICAgICByZXR1cm4gU3RyaW5nKGZy
YW1lRWxlbWVudC5zY3JvbGxpbmcoKSk7Ci0gICAgY2FzZSBGcmFtZVNyYzoKLSAgICBjYXNlIEZy
YW1lTG9jYXRpb246ICAgICAgICByZXR1cm4gU3RyaW5nKGZyYW1lRWxlbWVudC5zcmMoKSk7Cisg
ICAgICAgIGNhc2UgT0xpc3RDb21wYWN0OiAgICAgICAgIHJldHVybiBCb29sZWFuKG9MaXN0LmNv
bXBhY3QoKSk7CisgICAgICAgIGNhc2UgT0xpc3RTdGFydDogICAgICAgICAgIHJldHVybiBOdW1i
ZXIob0xpc3Quc3RhcnQoKSk7CisgICAgICAgIGNhc2UgT0xpc3RUeXBlOiAgICAgICAgICAgIHJl
dHVybiBTdHJpbmcob0xpc3QudHlwZSgpKTsKICAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2Ug
SURfSUZSQU1FOiB7Ci0gICAgSFRNTElGcmFtZUVsZW1lbnRJbXBsICZpRnJhbWUgPSBzdGF0aWNf
Y2FzdDxIVE1MSUZyYW1lRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tl
bikgewotICAgIGNhc2UgSUZyYW1lQWxpZ246ICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmco
aUZyYW1lLmFsaWduKCkpOwotICAgICAgLy8gIyMjIHNlY3VyaXR5IGNoZWNrID8KLSAgICBjYXNl
IElGcmFtZURvY3VtZW50OiAvLyBub24tc3RhbmRhcmQsIG1hcHBlZCB0byBjb250ZW50RG9jdW1l
bnQKLSAgICBjYXNlIElGcmFtZUNvbnRlbnREb2N1bWVudDogcmV0dXJuIGNoZWNrTm9kZVNlY3Vy
aXR5KGV4ZWMsaUZyYW1lLmNvbnRlbnREb2N1bWVudCgpKSA/IAotCQkJCSAgZ2V0RE9NTm9kZShl
eGVjLCBpRnJhbWUuY29udGVudERvY3VtZW50KCkpIDogVW5kZWZpbmVkKCk7Ci0gICAgY2FzZSBJ
RnJhbWVDb250ZW50V2luZG93OglyZXR1cm4gY2hlY2tOb2RlU2VjdXJpdHkoZXhlYyxpRnJhbWUu
Y29udGVudERvY3VtZW50KCkpIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
PyBXaW5kb3c6OnJldHJpZXZlKGlGcmFtZS5jb250ZW50UGFydCgpKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOiBVbmRlZmluZWQoKTsKLSAgICBjYXNlIElGcmFtZUZyYW1l
Qm9yZGVyOiAgICAgcmV0dXJuIFN0cmluZyhpRnJhbWUuZnJhbWVCb3JkZXIoKSk7Ci0gICAgY2Fz
ZSBJRnJhbWVIZWlnaHQ6ICAgICAgICAgIHJldHVybiBTdHJpbmcoaUZyYW1lLmhlaWdodCgpKTsK
LSAgICBjYXNlIElGcmFtZUxvbmdEZXNjOiAgICAgICAgcmV0dXJuIFN0cmluZyhpRnJhbWUubG9u
Z0Rlc2MoKSk7Ci0gICAgY2FzZSBJRnJhbWVNYXJnaW5IZWlnaHQ6ICAgIHJldHVybiBTdHJpbmco
aUZyYW1lLm1hcmdpbkhlaWdodCgpKTsKLSAgICBjYXNlIElGcmFtZU1hcmdpbldpZHRoOiAgICAg
cmV0dXJuIFN0cmluZyhpRnJhbWUubWFyZ2luV2lkdGgoKSk7Ci0gICAgY2FzZSBJRnJhbWVOYW1l
OiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoaUZyYW1lLm5hbWUoKSk7Ci0gICAgY2FzZSBJRnJh
bWVTY3JvbGxpbmc6ICAgICAgIHJldHVybiBTdHJpbmcoaUZyYW1lLnNjcm9sbGluZygpKTsKLSAg
ICBjYXNlIElGcmFtZVNyYzogICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpRnJhbWUuc3JjKCkp
OwotICAgIGNhc2UgSUZyYW1lV2lkdGg6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGlGcmFtZS53
aWR0aCgpKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0gIH0KLSAgfSAvLyB4ZW1hY3MgKG9yIGFybnQp
IGNvdWxkIGJlIGEgYml0IHNtYXJ0ZXIgd2hlbiBpdCBjb21lcyB0byBpbmRlbnRpbmcgc3dpdGNo
KCllcyA7KQotICAvLyBpdHMgbm90IGFybnQgdG8gYmxhbWUgLSBpdHMgdGhlIG9yaWdpbmFsIFN0
cm91c3RydXAgc3R5bGUgd2UgbGlrZSA6KSAoRGlyaykKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7
Cit9CiAKLSAgLy8gZ2VuZXJpYyBwcm9wZXJ0aWVzCi0gIHN3aXRjaCAodG9rZW4pIHsKLSAgY2Fz
ZSBFbGVtZW50SWQ6Ci0gICAgICAvLyBpaHQuY29tIHJlbGllcyBvbiB0aGlzIHZhbHVlIGJlaW5n
ICIiIHdoZW4gbm8gaWQgaXMgcHJlc2VudC4gIE90aGVyIGJyb3dzZXJzIGRvIHRoaXMgYXMgd2Vs
bC4KLSAgICAgIC8vIFNvIHdlIHVzZSBTdHJpbmcoKSBpbnN0ZWFkIG9mIFN0cmluZygpIGhlcmUu
Ci0gICAgcmV0dXJuIFN0cmluZyhlbGVtZW50LmlkRE9NKCkpOwotICBjYXNlIEVsZW1lbnRUaXRs
ZToKLSAgICByZXR1cm4gU3RyaW5nKGVsZW1lbnQudGl0bGUoKSk7Ci0gIGNhc2UgRWxlbWVudExh
bmc6Ci0gICAgcmV0dXJuIFN0cmluZyhlbGVtZW50LmxhbmcoKSk7Ci0gIGNhc2UgRWxlbWVudERp
cjoKLSAgICByZXR1cm4gU3RyaW5nKGVsZW1lbnQuZGlyKCkpOwotICBjYXNlIEVsZW1lbnRDbGFz
c05hbWU6Ci0gICAgcmV0dXJuIFN0cmluZyhlbGVtZW50LmNsYXNzTmFtZSgpKTsKLSAgY2FzZSBF
bGVtZW50SW5uZXJIVE1MOgotICAgIHJldHVybiBTdHJpbmcoZWxlbWVudC5pbm5lckhUTUwoKSk7
Ci0gIGNhc2UgRWxlbWVudElubmVyVGV4dDoKLSAgICBpZiAoRG9jdW1lbnRJbXBsKiBkb2MgPSBp
bXBsKCktPmdldERvY3VtZW50KCkpCi0gICAgICBkb2MtPnVwZGF0ZUxheW91dElnbm9yZVBlbmRp
bmdTdHlsZXNoZWV0cygpOwotICAgIHJldHVybiBTdHJpbmcoZWxlbWVudC5pbm5lclRleHQoKSk7
Ci0gIGNhc2UgRWxlbWVudE91dGVySFRNTDoKLSAgICByZXR1cm4gU3RyaW5nKGVsZW1lbnQub3V0
ZXJIVE1MKCkpOwotICBjYXNlIEVsZW1lbnRPdXRlclRleHQ6Ci0gICAgcmV0dXJuIFN0cmluZyhl
bGVtZW50Lm91dGVyVGV4dCgpKTsKLSAgY2FzZSBFbGVtZW50RG9jdW1lbnQ6Ci0gICAgcmV0dXJu
IGdldERPTU5vZGUoZXhlYyxlbGVtZW50Lm93bmVyRG9jdW1lbnQoKSk7Ci0gIGNhc2UgRWxlbWVu
dENoaWxkcmVuOgotICAgIHJldHVybiBnZXRIVE1MQ29sbGVjdGlvbihleGVjLCBlbGVtZW50LmNo
aWxkcmVuKCkuZ2V0KCkpOwotICBjYXNlIEVsZW1lbnRDb250ZW50RWRpdGFibGU6Ci0gICAgcmV0
dXJuIFN0cmluZyhlbGVtZW50LmNvbnRlbnRFZGl0YWJsZSgpKTsKLSAgY2FzZSBFbGVtZW50SXND
b250ZW50RWRpdGFibGU6Ci0gICAgcmV0dXJuIEJvb2xlYW4oZWxlbWVudC5pc0NvbnRlbnRFZGl0
YWJsZSgpKTsKLSAgLy8gIyMjIHdoYXQgYWJvdXQgc3R5bGU/IG9yIGlzIHRoaXMgdXNlZCBpbnN0
ZWFkIGZvciBET00yIHN0eWxlc2hlZXRzPwotICB9Ci0gIGtkV2FybmluZygpIDw8ICJIVE1MRWxl
bWVudDo6Z2V0VmFsdWVQcm9wZXJ0eSB1bmhhbmRsZWQgdG9rZW4gIiA8PCB0b2tlbiA8PCBlbmRs
OwotICByZXR1cm4gVW5kZWZpbmVkKCk7CitWYWx1ZSBIVE1MRWxlbWVudDo6ZExpc3RHZXR0ZXIo
RXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTERMaXN0RWxlbWVu
dEltcGwmIGRMaXN0ID0gKnN0YXRpY19jYXN0PEhUTUxETGlzdEVsZW1lbnRJbXBsKj4oaW1wbCgp
KTsKKyAgICBpZiAodG9rZW4gPT0gRExpc3RDb21wYWN0KQorICAgICAgICByZXR1cm4gQm9vbGVh
bihkTGlzdC5jb21wYWN0KCkpOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotYm9vbCBL
SlM6OkhUTUxFbGVtZW50OjpoYXNQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50
aWZpZXIgJnByb3BlcnR5TmFtZSkgY29uc3QKK1ZhbHVlIEhUTUxFbGVtZW50OjpkaXJHZXR0ZXIo
RXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7Ci0jaWZkZWYgS0pTX1ZFUkJPU0UK
LSAgLy9rZERlYnVnKDYwNzApIDw8ICJIVE1MRWxlbWVudDo6aGFzUHJvcGVydHkgIiA8PCBwcm9w
ZXJ0eU5hbWUucXN0cmluZygpIDw8IGVuZGw7Ci0jZW5kaWYKLSAgSFRNTEVsZW1lbnRJbXBsICZl
bGVtZW50ID0gKnN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCAqPihpbXBsKCkpOwotICAvLyBG
aXJzdCBsb29rIGF0IGR5bmFtaWMgcHJvcGVydGllcyAtIGtlZXAgdGhpcyBpbiBzeW5jIHdpdGgg
dHJ5R2V0Ci0gIHN3aXRjaCAoZWxlbWVudC5pZCgpKSB7Ci0gICAgY2FzZSBJRF9GT1JNOiB7Ci0g
ICAgICBIVE1MRm9ybUVsZW1lbnRJbXBsICZmb3JtID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVt
ZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIC8vIENoZWNrIGlmIHdlJ3JlIHJldHJpZXZpbmcg
YW4gZWxlbWVudCAoYnkgaW5kZXggb3IgYnkgbmFtZSkKLSAgICAgIGJvb2wgb2s7Ci0gICAgICB1
aW50IHUgPSBwcm9wZXJ0eU5hbWUudG9VTG9uZygmb2spOwotICAgICAgaWYgKG9rICYmIGZvcm0u
ZWxlbWVudHMoKS0+aXRlbSh1KSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICBpZiAoZm9y
bS5lbGVtZW50cygpLT5uYW1lZEl0ZW0ocHJvcGVydHlOYW1lLnN0cmluZygpKSkKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBJRF9TRUxFQ1Q6IHsK
LSAgICAgIEhUTUxTZWxlY3RFbGVtZW50SW1wbCAmc2VsZWN0ID0gc3RhdGljX2Nhc3Q8SFRNTFNl
bGVjdEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgYm9vbCBvazsKLSAgICAgIHVpbnQg
dSA9IHByb3BlcnR5TmFtZS50b1VMb25nKCZvayk7Ci0gICAgICBpZiAob2sgJiYgc2VsZWN0Lm9w
dGlvbnNIVE1MQ29sbGVjdGlvbigpLT5pdGVtKHUpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KKyAgICBI
VE1MRGlyZWN0b3J5RWxlbWVudEltcGwmIGRpciA9ICpzdGF0aWNfY2FzdDxIVE1MRGlyZWN0b3J5
RWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIGlmICh0b2tlbiA9PSBEaXJlY3RvcnlDb21wYWN0
KQorICAgICAgICByZXR1cm4gQm9vbGVhbihkaXIuY29tcGFjdCgpKTsKKyAgICByZXR1cm4gVW5k
ZWZpbmVkKCk7Cit9CiAKLSAgcmV0dXJuIERPTUVsZW1lbnQ6Omhhc1Byb3BlcnR5KGV4ZWMsIHBy
b3BlcnR5TmFtZSk7CitWYWx1ZSBIVE1MRWxlbWVudDo6bWVudUdldHRlcihFeGVjU3RhdGUqIGV4
ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MTWVudUVsZW1lbnRJbXBsJiBtZW51ID0g
KnN0YXRpY19jYXN0PEhUTUxNZW51RWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIGlmICh0b2tl
biA9PSBNZW51Q29tcGFjdCkKKyAgICAgICAgcmV0dXJuIEJvb2xlYW4obWVudS5jb21wYWN0KCkp
OworICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotVVN0cmluZyBLSlM6OkhUTUxFbGVtZW50
Ojp0b1N0cmluZyhFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0CitWYWx1ZSBIVE1MRWxlbWVudDo6bGlH
ZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7Ci0gIGlmIChpbXBsKCkt
PmlkKCkgPT0gSURfQSkKLSAgICByZXR1cm4gVVN0cmluZyhzdGF0aWNfY2FzdDxjb25zdCBIVE1M
QW5jaG9yRWxlbWVudEltcGwgKj4oaW1wbCgpKS0+aHJlZigpKTsKLSAgZWxzZQotICAgIHJldHVy
biBET01FbGVtZW50Ojp0b1N0cmluZyhleGVjKTsKKyAgICBIVE1MTElFbGVtZW50SW1wbCYgbGkg
PSAqc3RhdGljX2Nhc3Q8SFRNTExJRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAo
dG9rZW4pIHsKKyAgICAgICAgY2FzZSBMSVR5cGU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhs
aS50eXBlKCkpOworICAgICAgICBjYXNlIExJVmFsdWU6ICAgICAgICAgICByZXR1cm4gTnVtYmVy
KGxpLnZhbHVlKCkpOworICAgIH0KKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRp
YyBIVE1MRm9ybUVsZW1lbnRJbXBsICpnZXRGb3JtKEhUTUxFbGVtZW50SW1wbCAqZWxlbWVudCkK
K1ZhbHVlIEhUTUxFbGVtZW50OjpkaXZHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4p
IGNvbnN0CiB7Ci0gIGlmIChlbGVtZW50LT5pc0dlbmVyaWNGb3JtRWxlbWVudCgpKQotICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbCAqPihlbGVtZW50KS0+
Zm9ybSgpOworICAgIEhUTUxEaXZFbGVtZW50SW1wbCYgZGl2ID0gKnN0YXRpY19jYXN0PEhUTUxE
aXZFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IERpdkFsaWduKQorICAg
ICAgICByZXR1cm4gU3RyaW5nKGRpdi5hbGlnbigpKTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7
Cit9CiAKLSAgc3dpdGNoIChlbGVtZW50LT5pZCgpKSB7Ci0gICAgY2FzZSBJRF9MQUJFTDoKLSAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MTGFiZWxFbGVtZW50SW1wbCAqPihlbGVtZW50KS0+
Zm9ybSgpOwotICAgIGNhc2UgSURfT0JKRUNUOgotICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhU
TUxPYmplY3RFbGVtZW50SW1wbCAqPihlbGVtZW50KS0+Zm9ybSgpOwotICB9CitWYWx1ZSBIVE1M
RWxlbWVudDo6cGFyYWdyYXBoR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25z
dAoreworICAgIEhUTUxQYXJhZ3JhcGhFbGVtZW50SW1wbCYgcCA9ICpzdGF0aWNfY2FzdDxIVE1M
UGFyYWdyYXBoRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIGlmICh0b2tlbiA9PSBQYXJhZ3Jh
cGhBbGlnbikKKyAgICAgICAgcmV0dXJuIFN0cmluZyhwLmFsaWduKCkpOworICAgIHJldHVybiBV
bmRlZmluZWQoKTsKK30KIAotICByZXR1cm4gMDsKK1ZhbHVlIEhUTUxFbGVtZW50OjpoZWFkaW5n
R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxIZWFk
aW5nRWxlbWVudEltcGwmIGggPSAqc3RhdGljX2Nhc3Q8SFRNTEhlYWRpbmdFbGVtZW50SW1wbCo+
KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IEhlYWRpbmdBbGlnbikKKyAgICAgICAgcmV0dXJu
IFN0cmluZyhoLmFsaWduKCkpOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotdm9pZCBL
SlM6OkhUTUxFbGVtZW50OjpwdXNoRXZlbnRIYW5kbGVyU2NvcGUoRXhlY1N0YXRlICpleGVjLCBT
Y29wZUNoYWluICZzY29wZSkgY29uc3QKK1ZhbHVlIEhUTUxFbGVtZW50OjpibG9ja1F1b3RlR2V0
dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxCbG9ja3F1
b3RlRWxlbWVudEltcGwmIGJsb2NrUXVvdGUgPSAqc3RhdGljX2Nhc3Q8SFRNTEJsb2NrcXVvdGVF
bGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IEJsb2NrUXVvdGVDaXRlKQor
ICAgICAgICByZXR1cm4gU3RyaW5nKGJsb2NrUXVvdGUuY2l0ZSgpKTsKKyAgICByZXR1cm4gVW5k
ZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50OjpxdW90ZUdldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MUXVvdGVFbGVtZW50SW1wbCYgcXVv
dGUgPSAqc3RhdGljX2Nhc3Q8SFRNTFF1b3RlRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIGlm
ICh0b2tlbiA9PSBRdW90ZUNpdGUpCisgICAgICAgIHJldHVybiBTdHJpbmcocXVvdGUuY2l0ZSgp
KTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50OjpwcmVH
ZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgLy8gRklYTUU6
IEFkZCBzdXBwb3J0IGZvciAnd3JhcCcgd2hlbiB3aGl0ZS1zcGFjZTogcHJlLXdyYXAgaXMgaW1w
bGVtZW50ZWQuCisgICAgSFRNTFByZUVsZW1lbnRJbXBsJiBwcmUgPSAqc3RhdGljX2Nhc3Q8SFRN
TFByZUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBpZiAodG9rZW4gPT0gUHJlV2lkdGgpCisg
ICAgICAgIHJldHVybiBOdW1iZXIocHJlLndpZHRoKCkpOworICAgIHJldHVybiBVbmRlZmluZWQo
KTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OmJyR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50
IHRva2VuKSBjb25zdAoreworICAgIEhUTUxCUkVsZW1lbnRJbXBsJiBiciA9ICpzdGF0aWNfY2Fz
dDxIVE1MQlJFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IEJSQ2xlYXIp
CisgICAgICAgIHJldHVybiBTdHJpbmcoYnIuY2xlYXIoKSk7CisgICAgcmV0dXJuIFVuZGVmaW5l
ZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6YmFzZUZvbnRHZXR0ZXIoRXhlY1N0YXRlKiBl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTEJhc2VGb250RWxlbWVudEltcGwmIGJh
c2VGb250ID0gKnN0YXRpY19jYXN0PEhUTUxCYXNlRm9udEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsK
KyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgQmFzZUZvbnRDb2xvcjogICAgICAg
ICAgIHJldHVybiBTdHJpbmcoYmFzZUZvbnQuY29sb3IoKSk7CisgICAgICAgIGNhc2UgQmFzZUZv
bnRGYWNlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYmFzZUZvbnQuZmFjZSgpKTsKKyAgICAg
ICAgY2FzZSBCYXNlRm9udFNpemU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhiYXNlRm9udC5z
aXplKCkpOworICAgIH0KKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxF
bGVtZW50Ojpmb250R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAorewor
ICAgIEhUTUxGb250RWxlbWVudEltcGwmIGZvbnQgPSAqc3RhdGljX2Nhc3Q8SFRNTEZvbnRFbGVt
ZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNlIEZv
bnRDb2xvcjogICAgICAgICAgIHJldHVybiBTdHJpbmcoZm9udC5jb2xvcigpKTsKKyAgICAgICAg
Y2FzZSBGb250RmFjZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGZvbnQuZmFjZSgpKTsKKyAg
ICAgICAgY2FzZSBGb250U2l6ZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGZvbnQuc2l6ZSgp
KTsKKyAgICB9CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVu
dDo6aHJHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRN
TEhSRWxlbWVudEltcGwmIGhyID0gKnN0YXRpY19jYXN0PEhUTUxIUkVsZW1lbnRJbXBsKj4oaW1w
bCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgSFJBbGlnbjogICAgICAg
ICAgIHJldHVybiBTdHJpbmcoaHIuYWxpZ24oKSk7CisgICAgICAgIGNhc2UgSFJOb1NoYWRlOiAg
ICAgICAgIHJldHVybiBCb29sZWFuKGhyLm5vU2hhZGUoKSk7CisgICAgICAgIGNhc2UgSFJTaXpl
OiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoaHIuc2l6ZSgpKTsKKyAgICAgICAgY2FzZSBIUldp
ZHRoOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhoci53aWR0aCgpKTsKKyAgICB9CisgICAgcmV0
dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6bW9kR2V0dGVyKEV4ZWNT
dGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxNb2RFbGVtZW50SW1wbCYg
bW9kID0gKnN0YXRpY19jYXN0PEhUTUxNb2RFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dp
dGNoICh0b2tlbikgeworICAgICAgICBjYXNlIE1vZENpdGU6ICAgICAgICAgICAgcmV0dXJuIFN0
cmluZyhtb2QuY2l0ZSgpKTsKKyAgICAgICAgY2FzZSBNb2REYXRlVGltZTogICAgICAgIHJldHVy
biBTdHJpbmcobW9kLmRhdGVUaW1lKCkpOworICAgIH0KKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7
Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50OjphbmNob3JHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBp
bnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTEFuY2hvckVsZW1lbnRJbXBsJiBhbmNob3IgPSAq
c3RhdGljX2Nhc3Q8SFRNTEFuY2hvckVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2gg
KHRva2VuKSB7CisgICAgICAgIGNhc2UgQW5jaG9yQWNjZXNzS2V5OiAgICAgICByZXR1cm4gU3Ry
aW5nKGFuY2hvci5hY2Nlc3NLZXkoKSk7CisgICAgICAgIGNhc2UgQW5jaG9yQ2hhcnNldDogICAg
ICAgICByZXR1cm4gU3RyaW5nKGFuY2hvci5jaGFyc2V0KCkpOworICAgICAgICBjYXNlIEFuY2hv
ckNvb3JkczogICAgICAgICAgcmV0dXJuIFN0cmluZyhhbmNob3IuY29vcmRzKCkpOworICAgICAg
ICBjYXNlIEFuY2hvckhyZWY6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhhbmNob3IuaHJlZigp
KTsKKyAgICAgICAgY2FzZSBBbmNob3JIcmVmTGFuZzogICAgICAgIHJldHVybiBTdHJpbmcoYW5j
aG9yLmhyZWZsYW5nKCkpOworICAgICAgICBjYXNlIEFuY2hvckhhc2g6ICAgICAgICAgICAgcmV0
dXJuIFN0cmluZygnIycrS1VSTChhbmNob3IuaHJlZigpLnN0cmluZygpKS5yZWYoKSk7CisgICAg
ICAgIGNhc2UgQW5jaG9ySG9zdDogICAgICAgICAgICByZXR1cm4gU3RyaW5nKEtVUkwoYW5jaG9y
LmhyZWYoKS5zdHJpbmcoKSkuaG9zdCgpKTsKKyAgICAgICAgY2FzZSBBbmNob3JIb3N0bmFtZTog
eworICAgICAgICAgICAgS1VSTCB1cmwoYW5jaG9yLmhyZWYoKS5zdHJpbmcoKSk7CisgICAgICAg
ICAgICBrZERlYnVnKDYwNzApIDw8ICJhbmNob3I6Omhvc3RuYW1lIHVzZXM6IiA8PHVybC51cmwo
KTw8ZW5kbDsKKyAgICAgICAgICAgIGlmICh1cmwucG9ydCgpPT0wKQorICAgICAgICAgICAgICAg
IHJldHVybiBTdHJpbmcodXJsLmhvc3QoKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgcmV0dXJuIFN0cmluZyh1cmwuaG9zdCgpICsgIjoiICsgUVN0cmluZzo6bnVtYmVyKHVy
bC5wb3J0KCkpKTsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEFuY2hvclBhdGhOYW1lOiAgICAg
ICAgcmV0dXJuIFN0cmluZyhLVVJMKGFuY2hvci5ocmVmKCkuc3RyaW5nKCkpLnBhdGgoKSk7Cisg
ICAgICAgIGNhc2UgQW5jaG9yUG9ydDogICAgICAgICAgICByZXR1cm4gU3RyaW5nKFFTdHJpbmc6
Om51bWJlcihLVVJMKGFuY2hvci5ocmVmKCkuc3RyaW5nKCkpLnBvcnQoKSkpOworICAgICAgICBj
YXNlIEFuY2hvclByb3RvY29sOiAgICAgICAgcmV0dXJuIFN0cmluZyhLVVJMKGFuY2hvci5ocmVm
KCkuc3RyaW5nKCkpLnByb3RvY29sKCkrIjoiKTsKKyAgICAgICAgY2FzZSBBbmNob3JTZWFyY2g6
ICAgICAgICAgIHJldHVybiBTdHJpbmcoS1VSTChhbmNob3IuaHJlZigpLnN0cmluZygpKS5xdWVy
eSgpKTsKKyAgICAgICAgY2FzZSBBbmNob3JOYW1lOiAgICAgICAgICAgIHJldHVybiBTdHJpbmco
YW5jaG9yLm5hbWUoKSk7CisgICAgICAgIGNhc2UgQW5jaG9yUmVsOiAgICAgICAgICAgICByZXR1
cm4gU3RyaW5nKGFuY2hvci5yZWwoKSk7CisgICAgICAgIGNhc2UgQW5jaG9yUmV2OiAgICAgICAg
ICAgICByZXR1cm4gU3RyaW5nKGFuY2hvci5yZXYoKSk7CisgICAgICAgIGNhc2UgQW5jaG9yU2hh
cGU6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGFuY2hvci5zaGFwZSgpKTsKKyAgICAgICAgY2Fz
ZSBBbmNob3JUYWJJbmRleDogICAgICAgIHJldHVybiBOdW1iZXIoYW5jaG9yLnRhYkluZGV4KCkp
OworICAgICAgICBjYXNlIEFuY2hvclRhcmdldDogICAgICAgICAgcmV0dXJuIFN0cmluZyhhbmNo
b3IudGFyZ2V0KCkpOworICAgICAgICBjYXNlIEFuY2hvclR5cGU6ICAgICAgICAgICAgcmV0dXJu
IFN0cmluZyhhbmNob3IudHlwZSgpKTsKKyAgICAgICAgY2FzZSBBbmNob3JUZXh0OgorICAgICAg
ICAgICAgaWYgKERvY3VtZW50SW1wbCogZG9jID0gYW5jaG9yLmdldERvY3VtZW50KCkpCisgICAg
ICAgICAgICAgICAgZG9jLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsK
KyAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYW5jaG9yLmlubmVyVGV4dCgpKTsKKyAgICB9Cisg
ICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6aW1hZ2VHZXR0
ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTEltYWdlRWxl
bWVudEltcGwmIGltYWdlID0gKnN0YXRpY19jYXN0PEhUTUxJbWFnZUVsZW1lbnRJbXBsKj4oaW1w
bCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgSW1hZ2VOYW1lOiAgICAg
ICAgICAgIHJldHVybiBTdHJpbmcoaW1hZ2UubmFtZSgpKTsKKyAgICAgICAgY2FzZSBJbWFnZUFs
aWduOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpbWFnZS5hbGlnbigpKTsKKyAgICAgICAgY2Fz
ZSBJbWFnZUFsdDogICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpbWFnZS5hbHQoKSk7CisgICAg
ICAgIGNhc2UgSW1hZ2VCb3JkZXI6ICAgICAgICAgIHJldHVybiBOdW1iZXIoaW1hZ2UuYm9yZGVy
KCkpOworICAgICAgICBjYXNlIEltYWdlSGVpZ2h0OiAgICAgICAgICByZXR1cm4gTnVtYmVyKGlt
YWdlLmhlaWdodCh0cnVlKSk7CisgICAgICAgIGNhc2UgSW1hZ2VIc3BhY2U6ICAgICAgICAgIHJl
dHVybiBOdW1iZXIoaW1hZ2UuaHNwYWNlKCkpOworICAgICAgICBjYXNlIEltYWdlSXNNYXA6ICAg
ICAgICAgICByZXR1cm4gQm9vbGVhbihpbWFnZS5pc01hcCgpKTsKKyAgICAgICAgY2FzZSBJbWFn
ZUxvbmdEZXNjOiAgICAgICAgcmV0dXJuIFN0cmluZyhpbWFnZS5sb25nRGVzYygpKTsKKyAgICAg
ICAgY2FzZSBJbWFnZVNyYzogICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpbWFnZS5zcmMoKSk7
CisgICAgICAgIGNhc2UgSW1hZ2VVc2VNYXA6ICAgICAgICAgIHJldHVybiBTdHJpbmcoaW1hZ2Uu
dXNlTWFwKCkpOworICAgICAgICBjYXNlIEltYWdlVnNwYWNlOiAgICAgICAgICByZXR1cm4gTnVt
YmVyKGltYWdlLnZzcGFjZSgpKTsKKyAgICAgICAgY2FzZSBJbWFnZVdpZHRoOiAgICAgICAgICAg
cmV0dXJuIE51bWJlcihpbWFnZS53aWR0aCh0cnVlKSk7CisgICAgICAgIGNhc2UgSW1hZ2VYOiAg
ICAgICAgICAgICAgIHJldHVybiBOdW1iZXIoaW1hZ2UueCgpKTsKKyAgICAgICAgY2FzZSBJbWFn
ZVk6ICAgICAgICAgICAgICAgcmV0dXJuIE51bWJlcihpbWFnZS55KCkpOworICAgIH0KKyAgICBy
ZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50OjpvYmplY3RHZXR0ZXIo
RXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTE9iamVjdEVsZW1l
bnRJbXBsJiBvYmplY3QgPSAqc3RhdGljX2Nhc3Q8SFRNTE9iamVjdEVsZW1lbnRJbXBsKj4oaW1w
bCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgT2JqZWN0Rm9ybTogICAg
ICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLG9iamVjdC5mb3JtKCkpOyAvLyB0eXBlIEhU
TUxGb3JtRWxlbWVudAorICAgICAgICBjYXNlIE9iamVjdENvZGU6ICAgICAgICAgICAgcmV0dXJu
IFN0cmluZyhvYmplY3QuY29kZSgpKTsKKyAgICAgICAgY2FzZSBPYmplY3RBbGlnbjogICAgICAg
ICAgIHJldHVybiBTdHJpbmcob2JqZWN0LmFsaWduKCkpOworICAgICAgICBjYXNlIE9iamVjdEFy
Y2hpdmU6ICAgICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3QuYXJjaGl2ZSgpKTsKKyAgICAgICAg
Y2FzZSBPYmplY3RCb3JkZXI6ICAgICAgICAgIHJldHVybiBTdHJpbmcob2JqZWN0LmJvcmRlcigp
KTsKKyAgICAgICAgY2FzZSBPYmplY3RDb2RlQmFzZTogICAgICAgIHJldHVybiBTdHJpbmcob2Jq
ZWN0LmNvZGVCYXNlKCkpOworICAgICAgICBjYXNlIE9iamVjdENvZGVUeXBlOiAgICAgICAgcmV0
dXJuIFN0cmluZyhvYmplY3QuY29kZVR5cGUoKSk7CisgICAgICAgIGNhc2UgT2JqZWN0Q29udGVu
dERvY3VtZW50OiByZXR1cm4gY2hlY2tOb2RlU2VjdXJpdHkoZXhlYyxvYmplY3QuY29udGVudERv
Y3VtZW50KCkpID8gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z2V0RE9NTm9kZShleGVjLCBvYmplY3QuY29udGVudERvY3VtZW50KCkpIDogVW5kZWZpbmVkKCk7
CisgICAgICAgIGNhc2UgT2JqZWN0RGF0YTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKG9iamVj
dC5kYXRhKCkpOworICAgICAgICBjYXNlIE9iamVjdERlY2xhcmU6ICAgICAgICAgcmV0dXJuIEJv
b2xlYW4ob2JqZWN0LmRlY2xhcmUoKSk7CisgICAgICAgIGNhc2UgT2JqZWN0SGVpZ2h0OiAgICAg
ICAgICByZXR1cm4gU3RyaW5nKG9iamVjdC5oZWlnaHQoKSk7CisgICAgICAgIGNhc2UgT2JqZWN0
SHNwYWNlOiAgICAgICAgICByZXR1cm4gU3RyaW5nKG9iamVjdC5oc3BhY2UoKSk7CisgICAgICAg
IGNhc2UgT2JqZWN0TmFtZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKG9iamVjdC5uYW1lKCkp
OworICAgICAgICBjYXNlIE9iamVjdFN0YW5kYnk6ICAgICAgICAgcmV0dXJuIFN0cmluZyhvYmpl
Y3Quc3RhbmRieSgpKTsKKyAgICAgICAgY2FzZSBPYmplY3RUYWJJbmRleDogICAgICAgIHJldHVy
biBOdW1iZXIob2JqZWN0LnRhYkluZGV4KCkpOworICAgICAgICBjYXNlIE9iamVjdFR5cGU6ICAg
ICAgICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3QudHlwZSgpKTsKKyAgICAgICAgY2FzZSBPYmpl
Y3RVc2VNYXA6ICAgICAgICAgIHJldHVybiBTdHJpbmcob2JqZWN0LnVzZU1hcCgpKTsKKyAgICAg
ICAgY2FzZSBPYmplY3RWc3BhY2U6ICAgICAgICAgIHJldHVybiBTdHJpbmcob2JqZWN0LnZzcGFj
ZSgpKTsKKyAgICAgICAgY2FzZSBPYmplY3RXaWR0aDogICAgICAgICAgIHJldHVybiBTdHJpbmco
b2JqZWN0LndpZHRoKCkpOworICAgIH0KKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1Zh
bHVlIEhUTUxFbGVtZW50OjpwYXJhbUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikg
Y29uc3QKK3sKKyAgICBIVE1MUGFyYW1FbGVtZW50SW1wbCYgcGFyYW0gPSAqc3RhdGljX2Nhc3Q8
SFRNTFBhcmFtRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAg
ICAgICAgY2FzZSBQYXJhbU5hbWU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhwYXJhbS5uYW1l
KCkpOworICAgICAgICBjYXNlIFBhcmFtVHlwZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKHBh
cmFtLnR5cGUoKSk7CisgICAgICAgIGNhc2UgUGFyYW1WYWx1ZTogICAgICAgICAgIHJldHVybiBT
dHJpbmcocGFyYW0udmFsdWUoKSk7CisgICAgICAgIGNhc2UgUGFyYW1WYWx1ZVR5cGU6ICAgICAg
IHJldHVybiBTdHJpbmcocGFyYW0udmFsdWVUeXBlKCkpOworICAgIH0KKyAgICByZXR1cm4gVW5k
ZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50OjphcHBsZXRHZXR0ZXIoRXhlY1N0YXRl
KiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTEFwcGxldEVsZW1lbnRJbXBsJiBh
cHBsZXQgPSAqc3RhdGljX2Nhc3Q8SFRNTEFwcGxldEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAg
ICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgQXBwbGV0QWxpZ246ICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKGFwcGxldC5hbGlnbigpKTsKKyAgICAgICAgY2FzZSBBcHBsZXRBbHQ6ICAg
ICAgICAgICAgIHJldHVybiBTdHJpbmcoYXBwbGV0LmFsdCgpKTsKKyAgICAgICAgY2FzZSBBcHBs
ZXRBcmNoaXZlOiAgICAgICAgIHJldHVybiBTdHJpbmcoYXBwbGV0LmFyY2hpdmUoKSk7CisgICAg
ICAgIGNhc2UgQXBwbGV0Q29kZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGFwcGxldC5jb2Rl
KCkpOworICAgICAgICBjYXNlIEFwcGxldENvZGVCYXNlOiAgICAgICAgcmV0dXJuIFN0cmluZyhh
cHBsZXQuY29kZUJhc2UoKSk7CisgICAgICAgIGNhc2UgQXBwbGV0SGVpZ2h0OiAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKGFwcGxldC5oZWlnaHQoKSk7CisgICAgICAgIGNhc2UgQXBwbGV0SHNwYWNl
OiAgICAgICAgICByZXR1cm4gU3RyaW5nKGFwcGxldC5oc3BhY2UoKSk7CisgICAgICAgIGNhc2Ug
QXBwbGV0TmFtZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGFwcGxldC5uYW1lKCkpOworICAg
ICAgICBjYXNlIEFwcGxldE9iamVjdDogICAgICAgICAgcmV0dXJuIFN0cmluZyhhcHBsZXQub2Jq
ZWN0KCkpOworICAgICAgICBjYXNlIEFwcGxldFZzcGFjZTogICAgICAgICAgcmV0dXJuIFN0cmlu
ZyhhcHBsZXQudnNwYWNlKCkpOworICAgICAgICBjYXNlIEFwcGxldFdpZHRoOiAgICAgICAgICAg
cmV0dXJuIFN0cmluZyhhcHBsZXQud2lkdGgoKSk7CisgICAgfQorICAgIHJldHVybiBVbmRlZmlu
ZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6Om1hcEdldHRlcihFeGVjU3RhdGUqIGV4ZWMs
IGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MTWFwRWxlbWVudEltcGwmIG1hcCA9ICpzdGF0
aWNfY2FzdDxIVE1MTWFwRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4p
IHsKKyAgICAgICAgY2FzZSBNYXBBcmVhczogICAgICAgICAgIHJldHVybiBnZXRIVE1MQ29sbGVj
dGlvbihleGVjLCBtYXAuYXJlYXMoKS5nZXQoKSk7IC8vIHR5cGUgSFRNTENvbGxlY3Rpb24KKyAg
ICAgICAgY2FzZSBNYXBOYW1lOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcobWFwLm5hbWUoKSk7
CisgICAgfQorICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6
OmFyZWFHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRN
TEFyZWFFbGVtZW50SW1wbCYgYXJlYSA9ICpzdGF0aWNfY2FzdDxIVE1MQXJlYUVsZW1lbnRJbXBs
Kj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgQXJlYUFjY2Vz
c0tleTogICAgICAgcmV0dXJuIFN0cmluZyhhcmVhLmFjY2Vzc0tleSgpKTsKKyAgICAgICAgY2Fz
ZSBBcmVhQWx0OiAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGFyZWEuYWx0KCkpOworICAgICAg
ICBjYXNlIEFyZWFDb29yZHM6ICAgICAgICAgIHJldHVybiBTdHJpbmcoYXJlYS5jb29yZHMoKSk7
CisgICAgICAgIGNhc2UgQXJlYUhyZWY6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhhcmVhLmhy
ZWYoKSk7CisgICAgICAgIGNhc2UgQXJlYUhhc2g6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZygn
IycrS1VSTChhcmVhLmhyZWYoKS5zdHJpbmcoKSkucmVmKCkpOworICAgICAgICBjYXNlIEFyZWFI
b3N0OiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoS1VSTChhcmVhLmhyZWYoKS5zdHJpbmcoKSku
aG9zdCgpKTsKKyAgICAgICAgY2FzZSBBcmVhSG9zdE5hbWU6IHsKKyAgICAgICAgICAgIEtVUkwg
dXJsKGFyZWEuaHJlZigpLnN0cmluZygpKTsKKyAgICAgICAgICAgIGtkRGVidWcoNjA3MCkgPDwg
Imxpbms6Omhvc3RuYW1lIHVzZXM6IiA8PHVybC51cmwoKTw8ZW5kbDsKKyAgICAgICAgICAgIGlm
ICh1cmwucG9ydCgpPT0wKQorICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcodXJsLmhvc3Qo
KSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh1cmwu
aG9zdCgpICsgIjoiICsgUVN0cmluZzo6bnVtYmVyKHVybC5wb3J0KCkpKTsKKyAgICAgICAgfQor
ICAgICAgICBjYXNlIEFyZWFQYXRoTmFtZTogICAgICAgIHJldHVybiBTdHJpbmcoS1VSTChhcmVh
LmhyZWYoKS5zdHJpbmcoKSkucGF0aCgpKTsKKyAgICAgICAgY2FzZSBBcmVhUG9ydDogICAgICAg
ICAgICByZXR1cm4gU3RyaW5nKFFTdHJpbmc6Om51bWJlcihLVVJMKGFyZWEuaHJlZigpLnN0cmlu
ZygpKS5wb3J0KCkpKTsKKyAgICAgICAgY2FzZSBBcmVhUHJvdG9jb2w6ICAgICAgICByZXR1cm4g
U3RyaW5nKEtVUkwoYXJlYS5ocmVmKCkuc3RyaW5nKCkpLnByb3RvY29sKCkrIjoiKTsKKyAgICAg
ICAgY2FzZSBBcmVhU2VhcmNoOiAgICAgICAgICByZXR1cm4gU3RyaW5nKEtVUkwoYXJlYS5ocmVm
KCkuc3RyaW5nKCkpLnF1ZXJ5KCkpOworICAgICAgICBjYXNlIEFyZWFOb0hyZWY6ICAgICAgICAg
IHJldHVybiBCb29sZWFuKGFyZWEubm9IcmVmKCkpOworICAgICAgICBjYXNlIEFyZWFTaGFwZTog
ICAgICAgICAgIHJldHVybiBTdHJpbmcoYXJlYS5zaGFwZSgpKTsKKyAgICAgICAgY2FzZSBBcmVh
VGFiSW5kZXg6ICAgICAgICByZXR1cm4gTnVtYmVyKGFyZWEudGFiSW5kZXgoKSk7CisgICAgICAg
IGNhc2UgQXJlYVRhcmdldDogICAgICAgICAgcmV0dXJuIFN0cmluZyhhcmVhLnRhcmdldCgpKTsK
KyAgICB9CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6
c2NyaXB0R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAgIEhU
TUxTY3JpcHRFbGVtZW50SW1wbCYgc2NyaXB0ID0gKnN0YXRpY19jYXN0PEhUTUxTY3JpcHRFbGVt
ZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNlIFNj
cmlwdFRleHQ6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhzY3JpcHQudGV4dCgpKTsKKyAgICAg
ICAgY2FzZSBTY3JpcHRIdG1sRm9yOiAgICAgICAgIHJldHVybiBTdHJpbmcoc2NyaXB0Lmh0bWxG
b3IoKSk7CisgICAgICAgIGNhc2UgU2NyaXB0RXZlbnQ6ICAgICAgICAgICByZXR1cm4gU3RyaW5n
KHNjcmlwdC5ldmVudCgpKTsKKyAgICAgICAgY2FzZSBTY3JpcHRDaGFyc2V0OiAgICAgICAgIHJl
dHVybiBTdHJpbmcoc2NyaXB0LmNoYXJzZXQoKSk7CisgICAgICAgIGNhc2UgU2NyaXB0RGVmZXI6
ICAgICAgICAgICByZXR1cm4gQm9vbGVhbihzY3JpcHQuZGVmZXIoKSk7CisgICAgICAgIGNhc2Ug
U2NyaXB0U3JjOiAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKHNjcmlwdC5zcmMoKSk7CisgICAg
ICAgIGNhc2UgU2NyaXB0VHlwZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKHNjcmlwdC50eXBl
KCkpOworICAgIH0KKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVt
ZW50Ojp0YWJsZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAg
ICBIVE1MVGFibGVFbGVtZW50SW1wbCYgdGFibGUgPSAqc3RhdGljX2Nhc3Q8SFRNTFRhYmxlRWxl
bWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBU
YWJsZUNhcHRpb246ICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyx0YWJsZS5jYXB0aW9u
KCkpOyAvLyB0eXBlIEhUTUxUYWJsZUNhcHRpb25FbGVtZW50CisgICAgICAgIGNhc2UgVGFibGVU
SGVhZDogICAgICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsdGFibGUudEhlYWQoKSk7IC8v
IHR5cGUgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQKKyAgICAgICAgY2FzZSBUYWJsZVRGb290OiAg
ICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyx0YWJsZS50Rm9vdCgpKTsgLy8gdHlwZSBI
VE1MVGFibGVTZWN0aW9uRWxlbWVudAorICAgICAgICBjYXNlIFRhYmxlUm93czogICAgICAgICAg
ICByZXR1cm4gZ2V0SFRNTENvbGxlY3Rpb24oZXhlYywgdGFibGUucm93cygpLmdldCgpKTsgLy8g
dHlwZSBIVE1MQ29sbGVjdGlvbgorICAgICAgICBjYXNlIFRhYmxlVEJvZGllczogICAgICAgICBy
ZXR1cm4gZ2V0SFRNTENvbGxlY3Rpb24oZXhlYywgdGFibGUudEJvZGllcygpLmdldCgpKTsgLy8g
dHlwZSBIVE1MQ29sbGVjdGlvbgorICAgICAgICBjYXNlIFRhYmxlQWxpZ246ICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKHRhYmxlLmFsaWduKCkpOworICAgICAgICBjYXNlIFRhYmxlQmdDb2xvcjog
ICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlLmJnQ29sb3IoKSk7CisgICAgICAgIGNhc2UgVGFi
bGVCb3JkZXI6ICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGUuYm9yZGVyKCkpOworICAgICAg
ICBjYXNlIFRhYmxlQ2VsbFBhZGRpbmc6ICAgICByZXR1cm4gU3RyaW5nKHRhYmxlLmNlbGxQYWRk
aW5nKCkpOworICAgICAgICBjYXNlIFRhYmxlQ2VsbFNwYWNpbmc6ICAgICByZXR1cm4gU3RyaW5n
KHRhYmxlLmNlbGxTcGFjaW5nKCkpOworICAgICAgICBjYXNlIFRhYmxlRnJhbWU6ICAgICAgICAg
ICByZXR1cm4gU3RyaW5nKHRhYmxlLmZyYW1lKCkpOworICAgICAgICBjYXNlIFRhYmxlUnVsZXM6
ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlLnJ1bGVzKCkpOworICAgICAgICBjYXNlIFRh
YmxlU3VtbWFyeTogICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlLnN1bW1hcnkoKSk7CisgICAg
ICAgIGNhc2UgVGFibGVXaWR0aDogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGUud2lkdGgo
KSk7CisgICAgfQorICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1l
bnQ6OnRhYmxlQ2FwdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QK
K3sKKyAgICBIVE1MVGFibGVDYXB0aW9uRWxlbWVudEltcGwmIHRhYmxlQ2FwdGlvbiA9ICpzdGF0
aWNfY2FzdDxIVE1MVGFibGVDYXB0aW9uRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIGlmICh0
b2tlbiA9PSBUYWJsZUNhcHRpb25BbGlnbikKKyAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNh
cHRpb24uYWxpZ24oKSk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1M
RWxlbWVudDo6dGFibGVDb2xHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0
Cit7CisgICAgSFRNTFRhYmxlQ29sRWxlbWVudEltcGwmIHRhYmxlQ29sID0gKnN0YXRpY19jYXN0
PEhUTUxUYWJsZUNvbEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7
CisgICAgICAgIGNhc2UgVGFibGVDb2xBbGlnbjogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFi
bGVDb2wuYWxpZ24oKSk7CisgICAgICAgIGNhc2UgVGFibGVDb2xDaDogICAgICAgICAgICAgIHJl
dHVybiBTdHJpbmcodGFibGVDb2wuY2goKSk7CisgICAgICAgIGNhc2UgVGFibGVDb2xDaE9mZjog
ICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVDb2wuY2hPZmYoKSk7CisgICAgICAgIGNhc2Ug
VGFibGVDb2xTcGFuOiAgICAgICAgICAgIHJldHVybiBOdW1iZXIodGFibGVDb2wuc3BhbigpKTsK
KyAgICAgICAgY2FzZSBUYWJsZUNvbFZBbGlnbjogICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJs
ZUNvbC52QWxpZ24oKSk7CisgICAgICAgIGNhc2UgVGFibGVDb2xXaWR0aDogICAgICAgICAgIHJl
dHVybiBTdHJpbmcodGFibGVDb2wud2lkdGgoKSk7CisgICAgfQorICAgIHJldHVybiBVbmRlZmlu
ZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OnRhYmxlU2VjdGlvbkdldHRlcihFeGVjU3Rh
dGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MVGFibGVTZWN0aW9uRWxlbWVu
dEltcGwmIHRhYmxlU2VjdGlvbiA9ICpzdGF0aWNfY2FzdDxIVE1MVGFibGVTZWN0aW9uRWxlbWVu
dEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBUYWJs
ZVNlY3Rpb25BbGlnbjogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVTZWN0aW9uLmFsaWdu
KCkpOworICAgICAgICBjYXNlIFRhYmxlU2VjdGlvbkNoOiAgICAgICAgICAgICAgcmV0dXJuIFN0
cmluZyh0YWJsZVNlY3Rpb24uY2goKSk7CisgICAgICAgIGNhc2UgVGFibGVTZWN0aW9uQ2hPZmY6
ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlU2VjdGlvbi5jaE9mZigpKTsKKyAgICAgICAg
Y2FzZSBUYWJsZVNlY3Rpb25WQWxpZ246ICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVTZWN0
aW9uLnZBbGlnbigpKTsKKyAgICAgICAgY2FzZSBUYWJsZVNlY3Rpb25Sb3dzOiAgICAgICAgICAg
IHJldHVybiBnZXRIVE1MQ29sbGVjdGlvbihleGVjLCB0YWJsZVNlY3Rpb24ucm93cygpLmdldCgp
KTsgLy8gdHlwZSBIVE1MQ29sbGVjdGlvbgorICAgIH0KKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7
Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50Ojp0YWJsZVJvd0dldHRlcihFeGVjU3RhdGUqIGV4ZWMs
IGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MVGFibGVSb3dFbGVtZW50SW1wbCYgdGFibGVS
b3cgPSAqc3RhdGljX2Nhc3Q8SFRNTFRhYmxlUm93RWxlbWVudEltcGwqPihpbXBsKCkpOworICAg
IHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBUYWJsZVJvd1Jvd0luZGV4OiAgICAgICAg
cmV0dXJuIE51bWJlcih0YWJsZVJvdy5yb3dJbmRleCgpKTsKKyAgICAgICAgY2FzZSBUYWJsZVJv
d1NlY3Rpb25Sb3dJbmRleDogcmV0dXJuIE51bWJlcih0YWJsZVJvdy5zZWN0aW9uUm93SW5kZXgo
KSk7CisgICAgICAgIGNhc2UgVGFibGVSb3dDZWxsczogICAgICAgICAgIHJldHVybiBnZXRIVE1M
Q29sbGVjdGlvbihleGVjLCB0YWJsZVJvdy5jZWxscygpLmdldCgpKTsgLy8gdHlwZSBIVE1MQ29s
bGVjdGlvbgorICAgICAgICBjYXNlIFRhYmxlUm93QWxpZ246ICAgICAgICAgICByZXR1cm4gU3Ry
aW5nKHRhYmxlUm93LmFsaWduKCkpOworICAgICAgICBjYXNlIFRhYmxlUm93QmdDb2xvcjogICAg
ICAgICByZXR1cm4gU3RyaW5nKHRhYmxlUm93LmJnQ29sb3IoKSk7CisgICAgICAgIGNhc2UgVGFi
bGVSb3dDaDogICAgICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVSb3cuY2goKSk7CisgICAg
ICAgIGNhc2UgVGFibGVSb3dDaE9mZjogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVSb3cu
Y2hPZmYoKSk7CisgICAgICAgIGNhc2UgVGFibGVSb3dWQWxpZ246ICAgICAgICAgIHJldHVybiBT
dHJpbmcodGFibGVSb3cudkFsaWduKCkpOworICAgIH0KKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7
Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50Ojp0YWJsZUNlbGxHZXR0ZXIoRXhlY1N0YXRlKiBleGVj
LCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsJiB0YWJs
ZUNlbGwgPSAqc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsK
KyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgVGFibGVDZWxsQ2VsbEluZGV4OiAg
ICAgICByZXR1cm4gTnVtYmVyKHRhYmxlQ2VsbC5jZWxsSW5kZXgoKSk7CisgICAgICAgIGNhc2Ug
VGFibGVDZWxsQWJicjogICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ2VsbC5hYmJyKCkp
OworICAgICAgICBjYXNlIFRhYmxlQ2VsbEFsaWduOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0
YWJsZUNlbGwuYWxpZ24oKSk7CisgICAgICAgIGNhc2UgVGFibGVDZWxsQXhpczogICAgICAgICAg
ICByZXR1cm4gU3RyaW5nKHRhYmxlQ2VsbC5heGlzKCkpOworICAgICAgICBjYXNlIFRhYmxlQ2Vs
bEJnQ29sb3I6ICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNlbGwuYmdDb2xvcigpKTsKKyAg
ICAgICAgY2FzZSBUYWJsZUNlbGxDaDogICAgICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVD
ZWxsLmNoKCkpOworICAgICAgICBjYXNlIFRhYmxlQ2VsbENoT2ZmOiAgICAgICAgICAgcmV0dXJu
IFN0cmluZyh0YWJsZUNlbGwuY2hPZmYoKSk7CisgICAgICAgIGNhc2UgVGFibGVDZWxsQ29sU3Bh
bjogICAgICAgICByZXR1cm4gTnVtYmVyKHRhYmxlQ2VsbC5jb2xTcGFuKCkpOworICAgICAgICBj
YXNlIFRhYmxlQ2VsbEhlYWRlcnM6ICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNlbGwuaGVh
ZGVycygpKTsKKyAgICAgICAgY2FzZSBUYWJsZUNlbGxIZWlnaHQ6ICAgICAgICAgIHJldHVybiBT
dHJpbmcodGFibGVDZWxsLmhlaWdodCgpKTsKKyAgICAgICAgY2FzZSBUYWJsZUNlbGxOb1dyYXA6
ICAgICAgICAgIHJldHVybiBCb29sZWFuKHRhYmxlQ2VsbC5ub1dyYXAoKSk7CisgICAgICAgIGNh
c2UgVGFibGVDZWxsUm93U3BhbjogICAgICAgICByZXR1cm4gTnVtYmVyKHRhYmxlQ2VsbC5yb3dT
cGFuKCkpOworICAgICAgICBjYXNlIFRhYmxlQ2VsbFNjb3BlOiAgICAgICAgICAgcmV0dXJuIFN0
cmluZyh0YWJsZUNlbGwuc2NvcGUoKSk7CisgICAgICAgIGNhc2UgVGFibGVDZWxsVkFsaWduOiAg
ICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ2VsbC52QWxpZ24oKSk7CisgICAgICAgIGNhc2Ug
VGFibGVDZWxsV2lkdGg6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ2VsbC53aWR0aCgp
KTsKKyAgICB9CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVu
dDo6ZnJhbWVTZXRHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7Cisg
ICAgSFRNTEZyYW1lU2V0RWxlbWVudEltcGwmIGZyYW1lU2V0ID0gKnN0YXRpY19jYXN0PEhUTUxG
cmFtZVNldEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAg
ICAgIGNhc2UgRnJhbWVTZXRDb2xzOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoZnJhbWVTZXQu
Y29scygpKTsKKyAgICAgICAgY2FzZSBGcmFtZVNldFJvd3M6ICAgICAgICAgICAgcmV0dXJuIFN0
cmluZyhmcmFtZVNldC5yb3dzKCkpOworICAgIH0KKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9
CisKK1ZhbHVlIEhUTUxFbGVtZW50OjpmcmFtZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0
b2tlbikgY29uc3QKK3sKKyAgICBIVE1MRnJhbWVFbGVtZW50SW1wbCYgZnJhbWVFbGVtZW50ID0g
KnN0YXRpY19jYXN0PEhUTUxGcmFtZUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2gg
KHRva2VuKSB7CisgICAgICAgIGNhc2UgRnJhbWVDb250ZW50RG9jdW1lbnQ6IHJldHVybiBjaGVj
a05vZGVTZWN1cml0eShleGVjLGZyYW1lRWxlbWVudC5jb250ZW50RG9jdW1lbnQoKSkgPyAKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldERPTU5vZGUoZXhlYywg
ZnJhbWVFbGVtZW50LmNvbnRlbnREb2N1bWVudCgpKSA6IFVuZGVmaW5lZCgpOworICAgICAgICBj
YXNlIEZyYW1lQ29udGVudFdpbmRvdzogICByZXR1cm4gY2hlY2tOb2RlU2VjdXJpdHkoZXhlYyxm
cmFtZUVsZW1lbnQuY29udGVudERvY3VtZW50KCkpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgPyBXaW5kb3c6OnJldHJpZXZlKGZyYW1lRWxlbWVudC5jb250ZW50UGFy
dCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogVW5kZWZpbmVk
KCk7CisgICAgICAgIGNhc2UgRnJhbWVGcmFtZUJvcmRlcjogICAgIHJldHVybiBTdHJpbmcoZnJh
bWVFbGVtZW50LmZyYW1lQm9yZGVyKCkpOworICAgICAgICBjYXNlIEZyYW1lTG9uZ0Rlc2M6ICAg
ICAgICByZXR1cm4gU3RyaW5nKGZyYW1lRWxlbWVudC5sb25nRGVzYygpKTsKKyAgICAgICAgY2Fz
ZSBGcmFtZU1hcmdpbkhlaWdodDogICAgcmV0dXJuIFN0cmluZyhmcmFtZUVsZW1lbnQubWFyZ2lu
SGVpZ2h0KCkpOworICAgICAgICBjYXNlIEZyYW1lTWFyZ2luV2lkdGg6ICAgICByZXR1cm4gU3Ry
aW5nKGZyYW1lRWxlbWVudC5tYXJnaW5XaWR0aCgpKTsKKyAgICAgICAgY2FzZSBGcmFtZU5hbWU6
ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhmcmFtZUVsZW1lbnQubmFtZSgpKTsKKyAgICAgICAg
Y2FzZSBGcmFtZU5vUmVzaXplOiAgICAgICAgcmV0dXJuIEJvb2xlYW4oZnJhbWVFbGVtZW50Lm5v
UmVzaXplKCkpOworICAgICAgICBjYXNlIEZyYW1lU2Nyb2xsaW5nOiAgICAgICByZXR1cm4gU3Ry
aW5nKGZyYW1lRWxlbWVudC5zY3JvbGxpbmcoKSk7CisgICAgICAgIGNhc2UgRnJhbWVTcmM6Cisg
ICAgICAgIGNhc2UgRnJhbWVMb2NhdGlvbjogICAgICAgIHJldHVybiBTdHJpbmcoZnJhbWVFbGVt
ZW50LnNyYygpKTsKKyAgICB9CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBI
VE1MRWxlbWVudDo6aUZyYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25z
dAoreworICAgIEhUTUxJRnJhbWVFbGVtZW50SW1wbCYgaUZyYW1lID0gKnN0YXRpY19jYXN0PEhU
TUxJRnJhbWVFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAg
ICAgICBjYXNlIElGcmFtZUFsaWduOiAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGlGcmFt
ZS5hbGlnbigpKTsKKyAgICAgICAgICAvLyAjIyMgc2VjdXJpdHkgY2hlY2sgPworICAgICAgICBj
YXNlIElGcmFtZURvY3VtZW50OiAvLyBub24tc3RhbmRhcmQsIG1hcHBlZCB0byBjb250ZW50RG9j
dW1lbnQKKyAgICAgICAgY2FzZSBJRnJhbWVDb250ZW50RG9jdW1lbnQ6IHJldHVybiBjaGVja05v
ZGVTZWN1cml0eShleGVjLGlGcmFtZS5jb250ZW50RG9jdW1lbnQoKSkgPyAKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0RE9NTm9kZShleGVjLCBpRnJhbWUuY29udGVu
dERvY3VtZW50KCkpIDogVW5kZWZpbmVkKCk7CisgICAgICAgIGNhc2UgSUZyYW1lQ29udGVudFdp
bmRvdzoJcmV0dXJuIGNoZWNrTm9kZVNlY3VyaXR5KGV4ZWMsaUZyYW1lLmNvbnRlbnREb2N1bWVu
dCgpKSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFdpbmRvdzo6
cmV0cmlldmUoaUZyYW1lLmNvbnRlbnRQYXJ0KCkpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOiBVbmRlZmluZWQoKTsKKyAgICAgICAgY2FzZSBJRnJhbWVGcmFtZUJv
cmRlcjogICAgIHJldHVybiBTdHJpbmcoaUZyYW1lLmZyYW1lQm9yZGVyKCkpOworICAgICAgICBj
YXNlIElGcmFtZUhlaWdodDogICAgICAgICAgcmV0dXJuIFN0cmluZyhpRnJhbWUuaGVpZ2h0KCkp
OworICAgICAgICBjYXNlIElGcmFtZUxvbmdEZXNjOiAgICAgICAgcmV0dXJuIFN0cmluZyhpRnJh
bWUubG9uZ0Rlc2MoKSk7CisgICAgICAgIGNhc2UgSUZyYW1lTWFyZ2luSGVpZ2h0OiAgICByZXR1
cm4gU3RyaW5nKGlGcmFtZS5tYXJnaW5IZWlnaHQoKSk7CisgICAgICAgIGNhc2UgSUZyYW1lTWFy
Z2luV2lkdGg6ICAgICByZXR1cm4gU3RyaW5nKGlGcmFtZS5tYXJnaW5XaWR0aCgpKTsKKyAgICAg
ICAgY2FzZSBJRnJhbWVOYW1lOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoaUZyYW1lLm5hbWUo
KSk7CisgICAgICAgIGNhc2UgSUZyYW1lU2Nyb2xsaW5nOiAgICAgICByZXR1cm4gU3RyaW5nKGlG
cmFtZS5zY3JvbGxpbmcoKSk7CisgICAgICAgIGNhc2UgSUZyYW1lU3JjOiAgICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKGlGcmFtZS5zcmMoKSk7CisgICAgICAgIGNhc2UgSUZyYW1lV2lkdGg6ICAg
ICAgICAgICByZXR1cm4gU3RyaW5nKGlGcmFtZS53aWR0aCgpKTsKKyAgICB9CisgICAgcmV0dXJu
IFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6bWFycXVlZUdldHRlcihFeGVj
U3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogRmluZCBvdXQg
d2hhdCBXaW5JRSBleHBvc2VzIGFzIHByb3BlcnRpZXMgYW5kIGltcGxlbWVudCB0aGlzLgorICAg
IHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OmdldFZhbHVlUHJv
cGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgLy8gQ2hlY2sg
b3VyIHNldCBvZiBnZW5lcmljIHByb3BlcnRpZXMgZmlyc3QuCisgICAgSFRNTEVsZW1lbnRJbXBs
ICZlbGVtZW50ID0gKnN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCAqPihpbXBsKCkpOworICAg
IHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBFbGVtZW50SWQ6CisgICAgICAgIC8vIGlo
dC5jb20gcmVsaWVzIG9uIHRoaXMgdmFsdWUgYmVpbmcgIiIgd2hlbiBubyBpZCBpcyBwcmVzZW50
LiAgT3RoZXIgYnJvd3NlcnMgZG8gdGhpcyBhcyB3ZWxsLgorICAgICAgICAvLyBTbyB3ZSB1c2Ug
U3RyaW5nKCkgaW5zdGVhZCBvZiBTdHJpbmcoKSBoZXJlLgorICAgICAgICByZXR1cm4gU3RyaW5n
KGVsZW1lbnQuaWQoKSk7CisgICAgICAgIGNhc2UgRWxlbWVudFRpdGxlOgorICAgICAgICAgICAg
cmV0dXJuIFN0cmluZyhlbGVtZW50LnRpdGxlKCkpOworICAgICAgICBjYXNlIEVsZW1lbnRMYW5n
OgorICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhlbGVtZW50LmxhbmcoKSk7CisgICAgICAgIGNh
c2UgRWxlbWVudERpcjoKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcoZWxlbWVudC5kaXIoKSk7
CisgICAgICAgIGNhc2UgRWxlbWVudENsYXNzTmFtZToKKyAgICAgICAgICAgIHJldHVybiBTdHJp
bmcoZWxlbWVudC5jbGFzc05hbWUoKSk7CisgICAgICAgIGNhc2UgRWxlbWVudElubmVySFRNTDoK
KyAgICAgICAgICAgIHJldHVybiBTdHJpbmcoZWxlbWVudC5pbm5lckhUTUwoKSk7CisgICAgICAg
IGNhc2UgRWxlbWVudElubmVyVGV4dDoKKyAgICAgICAgICAgIGlmIChEb2N1bWVudEltcGwqIGRv
YyA9IGltcGwoKS0+Z2V0RG9jdW1lbnQoKSkKKyAgICAgICAgICAgICAgICBkb2MtPnVwZGF0ZUxh
eW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOworICAgICAgICAgICAgcmV0dXJuIFN0cmlu
ZyhlbGVtZW50LmlubmVyVGV4dCgpKTsKKyAgICAgICAgY2FzZSBFbGVtZW50T3V0ZXJIVE1MOgor
ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhlbGVtZW50Lm91dGVySFRNTCgpKTsKKyAgICAgICAg
Y2FzZSBFbGVtZW50T3V0ZXJUZXh0OgorICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhlbGVtZW50
Lm91dGVyVGV4dCgpKTsKKyAgICAgICAgY2FzZSBFbGVtZW50RG9jdW1lbnQ6CisgICAgICAgICAg
ICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLGVsZW1lbnQub3duZXJEb2N1bWVudCgpKTsKKyAgICAg
ICAgY2FzZSBFbGVtZW50Q2hpbGRyZW46CisgICAgICAgICAgICByZXR1cm4gZ2V0SFRNTENvbGxl
Y3Rpb24oZXhlYywgZWxlbWVudC5jaGlsZHJlbigpLmdldCgpKTsKKyAgICAgICAgY2FzZSBFbGVt
ZW50Q29udGVudEVkaXRhYmxlOgorICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhlbGVtZW50LmNv
bnRlbnRFZGl0YWJsZSgpKTsKKyAgICAgICAgY2FzZSBFbGVtZW50SXNDb250ZW50RWRpdGFibGU6
CisgICAgICAgICAgICByZXR1cm4gQm9vbGVhbihlbGVtZW50LmlzQ29udGVudEVkaXRhYmxlKCkp
OworICAgIH0KKworICAgIC8vIE5vdyBjaGVjayB0aGUgcHJvcGVydGllcyBzcGVjaWZpYyB0byBv
dXIgZWxlbWVudCB0eXBlLgorICAgIGNvbnN0IEdldFNldEluZm8qIGluZm8gPSBnZXRTZXRJbmZv
KCk7CisgICAgaWYgKGluZm8gJiYgaW5mby0+bV9nZXR0ZXIpCisgICAgICAgIHJldHVybiAodGhp
cy0+KihpbmZvLT5tX2dldHRlcikpKGV4ZWMsIHRva2VuKTsKKyAgICByZXR1cm4gVW5kZWZpbmVk
KCk7Cit9CisKK2Jvb2wgS0pTOjpIVE1MRWxlbWVudDo6aGFzUHJvcGVydHkoRXhlY1N0YXRlICpl
eGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUpIGNvbnN0Cit7CisjaWZkZWYgS0pT
X1ZFUkJPU0UKKyAgICAvL2tkRGVidWcoNjA3MCkgPDwgIkhUTUxFbGVtZW50OjpoYXNQcm9wZXJ0
eSAiIDw8IHByb3BlcnR5TmFtZS5xc3RyaW5nKCkgPDwgZW5kbDsKKyNlbmRpZgorICAgIEhUTUxF
bGVtZW50SW1wbCAmZWxlbWVudCA9ICpzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwgKj4oaW1w
bCgpKTsKKyAgICAvLyBGaXJzdCBsb29rIGF0IGR5bmFtaWMgcHJvcGVydGllcyAtIGtlZXAgdGhp
cyBpbiBzeW5jIHdpdGggdHJ5R2V0CisgICAgaWYgKGVsZW1lbnQuaGFzTG9jYWxOYW1lKEhUTUxO
YW1lczo6Zm9ybSgpKSkgeworICAgICAgICBIVE1MRm9ybUVsZW1lbnRJbXBsICZmb3JtID0gc3Rh
dGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICAgICAgLy8gQ2hl
Y2sgaWYgd2UncmUgcmV0cmlldmluZyBhbiBlbGVtZW50IChieSBpbmRleCBvciBieSBuYW1lKQor
ICAgICAgICBib29sIG9rOworICAgICAgICB1aW50IHUgPSBwcm9wZXJ0eU5hbWUudG9VTG9uZygm
b2spOworICAgICAgICBpZiAob2sgJiYgZm9ybS5lbGVtZW50cygpLT5pdGVtKHUpKQorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChmb3JtLmVsZW1lbnRzKCktPm5hbWVkSXRl
bShwcm9wZXJ0eU5hbWUuc3RyaW5nKCkpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6c2VsZWN0KCkp
KSB7CisgICAgICAgIEhUTUxTZWxlY3RFbGVtZW50SW1wbCAmc2VsZWN0ID0gc3RhdGljX2Nhc3Q8
SFRNTFNlbGVjdEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgICAgICBib29sIG9rOworICAg
ICAgICB1aW50IHUgPSBwcm9wZXJ0eU5hbWUudG9VTG9uZygmb2spOworICAgICAgICBpZiAob2sg
JiYgc2VsZWN0Lm9wdGlvbnNIVE1MQ29sbGVjdGlvbigpLT5pdGVtKHUpKQorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBET01FbGVtZW50OjpoYXNQcm9wZXJ0eShl
eGVjLCBwcm9wZXJ0eU5hbWUpOworfQorCitVU3RyaW5nIEtKUzo6SFRNTEVsZW1lbnQ6OnRvU3Ry
aW5nKEV4ZWNTdGF0ZSAqZXhlYykgY29uc3QKK3sKKyAgaWYgKGltcGwoKS0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OmEoKSkpCisgICAgcmV0dXJuIFVTdHJpbmcoc3RhdGljX2Nhc3Q8Y29uc3QgSFRN
TEFuY2hvckVsZW1lbnRJbXBsICo+KGltcGwoKSktPmhyZWYoKSk7CisgIGVsc2UKKyAgICByZXR1
cm4gRE9NRWxlbWVudDo6dG9TdHJpbmcoZXhlYyk7Cit9CisKK3N0YXRpYyBIVE1MRm9ybUVsZW1l
bnRJbXBsICpnZXRGb3JtKEhUTUxFbGVtZW50SW1wbCAqZWxlbWVudCkKK3sKKyAgaWYgKGVsZW1l
bnQtPmlzR2VuZXJpY0Zvcm1FbGVtZW50KCkpCisgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRN
TEdlbmVyaWNGb3JtRWxlbWVudEltcGwgKj4oZWxlbWVudCktPmZvcm0oKTsKKyAgaWYgKGVsZW1l
bnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpsYWJlbCgpKSkKKyAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxIVE1MTGFiZWxFbGVtZW50SW1wbCAqPihlbGVtZW50KS0+Zm9ybSgpOworICBpZiAoZWxl
bWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9iamVjdCgpKSkKKyAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxIVE1MT2JqZWN0RWxlbWVudEltcGwgKj4oZWxlbWVudCktPmZvcm0oKTsKKworICBy
ZXR1cm4gMDsKK30KKwordm9pZCBLSlM6OkhUTUxFbGVtZW50OjpwdXNoRXZlbnRIYW5kbGVyU2Nv
cGUoRXhlY1N0YXRlICpleGVjLCBTY29wZUNoYWluICZzY29wZSkgY29uc3QKIHsKICAgSFRNTEVs
ZW1lbnRJbXBsICplbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KGltcGwo
KSk7CiAKQEAgLTIwOTcsNyArMjI1Myw3IEBAIHZvaWQgS0pTOjpIVE1MRWxlbWVudDo6cHVzaEV2
ZW50SGFuZGxlclMKICAgICBzY29wZS5wdXNoKHN0YXRpY19jYXN0PE9iamVjdEltcCAqPihnZXRE
T01Ob2RlKGV4ZWMsIGZvcm0pKSk7CiAgIGVsc2UgewogICAgIE5vZGVJbXBsICpmb3JtID0gZWxl
bWVudC0+cGFyZW50Tm9kZSgpOwotICAgIHdoaWxlIChmb3JtICYmIGZvcm0tPmlkKCkgIT0gSURf
Rk9STSkKKyAgICB3aGlsZSAoZm9ybSAmJiAhZm9ybS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZv
cm0oKSkpCiAgICAgICBmb3JtID0gZm9ybS0+cGFyZW50Tm9kZSgpOwogICAgIAogICAgIGlmIChm
b3JtKQpAQCAtMjExNywxNjIgKzIyNzMsMTUxIEBAIEhUTUxFbGVtZW50RnVuY3Rpb246OkhUTUxF
bGVtZW50RnVuY3Rpb24KIAogVmFsdWUgS0pTOjpIVE1MRWxlbWVudEZ1bmN0aW9uOjp0cnlDYWxs
KEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewot
ICBpZiAoIXRoaXNPYmouaW5oZXJpdHMoJktKUzo6SFRNTEVsZW1lbnQ6OmluZm8pKSB7Ci0gICAg
T2JqZWN0IGVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBlRXJyb3IpOwotICAgIGV4ZWMtPnNl
dEV4Y2VwdGlvbihlcnIpOwotICAgIHJldHVybiBlcnI7Ci0gIH0KLSAga2REZWJ1ZygpIDw8ICJL
SlM6OkhUTUxFbGVtZW50RnVuY3Rpb246OnRyeUNhbGwgIiA8PCBlbmRsOwotICBET01FeGNlcHRp
b25UcmFuc2xhdG9yIGV4Y2VwdGlvbihleGVjKTsKLSAgSFRNTEVsZW1lbnRJbXBsICZlbGVtZW50
ID0gKnN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCAqPihzdGF0aWNfY2FzdDxIVE1MRWxlbWVu
dCAqPih0aGlzT2JqLmltcCgpKS0+aW1wbCgpKTsKLQotICBzd2l0Y2ggKGVsZW1lbnQuaWQoKSkg
ewotICAgIGNhc2UgSURfRk9STTogewotICAgICAgSFRNTEZvcm1FbGVtZW50SW1wbCAmZm9ybSA9
IHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBpZiAo
aWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6Rm9ybVN1Ym1pdCkgewotICAgICAgICBmb3JtLnN1Ym1p
dCgpOwotICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlm
IChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpGb3JtUmVzZXQpIHsKLSAgICAgICAgZm9ybS5yZXNl
dCgpOwotICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9CisgICAgaWYgKCF0aGlz
T2JqLmluaGVyaXRzKCZLSlM6OkhUTUxFbGVtZW50OjppbmZvKSkgeworICAgICAgICBPYmplY3Qg
ZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5cGVFcnJvcik7CisgICAgICAgIGV4ZWMtPnNldEV4
Y2VwdGlvbihlcnIpOworICAgICAgICByZXR1cm4gZXJyOwogICAgIH0KLSAgICBicmVhazsKLSAg
ICBjYXNlIElEX1NFTEVDVDogewotICAgICAgSFRNTFNlbGVjdEVsZW1lbnRJbXBsICZzZWxlY3Qg
PSBzdGF0aWNfY2FzdDxIVE1MU2VsZWN0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBp
ZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6U2VsZWN0QWRkKSB7Ci0gICAgICAgIHNlbGVjdC5h
ZGQodG9IVE1MRWxlbWVudChhcmdzWzBdKSwgdG9IVE1MRWxlbWVudChhcmdzWzFdKSk7Ci0gICAg
ICAgIHJldHVybiBVbmRlZmluZWQoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGlkID09IEtK
Uzo6SFRNTEVsZW1lbnQ6OlNlbGVjdFJlbW92ZSkgewotICAgICAgICBzZWxlY3QucmVtb3ZlKGlu
dChhcmdzWzBdLnRvTnVtYmVyKGV4ZWMpKSk7Ci0gICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsK
LSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlNlbGVjdEJs
dXIpIHsKLSAgICAgICAgc2VsZWN0LmJsdXIoKTsKLSAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgp
OwotICAgICAgfQotICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6U2VsZWN0
Rm9jdXMpIHsKLSAgICAgICAgc2VsZWN0LmZvY3VzKCk7Ci0gICAgICAgIHJldHVybiBVbmRlZmlu
ZWQoKTsKLSAgICAgIH0KKyAgICBrZERlYnVnKCkgPDwgIktKUzo6SFRNTEVsZW1lbnRGdW5jdGlv
bjo6dHJ5Q2FsbCAiIDw8IGVuZGw7CisgICAgRE9NRXhjZXB0aW9uVHJhbnNsYXRvciBleGNlcHRp
b24oZXhlYyk7CisgICAgSFRNTEVsZW1lbnRJbXBsICZlbGVtZW50ID0gKnN0YXRpY19jYXN0PEhU
TUxFbGVtZW50SW1wbCAqPihzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCAqPih0aGlzT2JqLmltcCgp
KS0+aW1wbCgpKTsKKworICAgIGlmIChlbGVtZW50Lmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmZv
cm0oKSkpIHsKKyAgICAgICAgSFRNTEZvcm1FbGVtZW50SW1wbCAmZm9ybSA9IHN0YXRpY19jYXN0
PEhUTUxGb3JtRWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgICAgIGlmIChpZCA9PSBLSlM6
OkhUTUxFbGVtZW50OjpGb3JtU3VibWl0KSB7CisgICAgICAgICAgICBmb3JtLnN1Ym1pdCgpOwor
ICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAgICAgICB9CisgICAgICAgIGVsc2Ug
aWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OkZvcm1SZXNldCkgeworICAgICAgICAgICAgZm9y
bS5yZXNldCgpOworICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAgICAgICB9CiAg
ICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfSU5QVVQ6IHsKLSAgICAgIEhUTUxJbnB1dEVs
ZW1lbnRJbXBsICZpbnB1dCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnRJbXBsICY+KGVs
ZW1lbnQpOwotICAgICAgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OklucHV0Qmx1cikgewot
ICAgICAgICBpbnB1dC5ibHVyKCk7Ci0gICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKLSAgICAg
IH0KLSAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OklucHV0Rm9jdXMpIHsK
LSAgICAgICAgaW5wdXQuZm9jdXMoKTsKLSAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwotICAg
ICAgfQotICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6SW5wdXRTZWxlY3Qp
IHsKLSAgICAgICAgaW5wdXQuc2VsZWN0KCk7Ci0gICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsK
LSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OklucHV0Q2xp
Y2spIHsKLSAgICAgICAgaW5wdXQuY2xpY2soKTsKLSAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgp
OwotICAgICAgfQorICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6
c2VsZWN0KCkpKSB7CisgICAgICAgIEhUTUxTZWxlY3RFbGVtZW50SW1wbCAmc2VsZWN0ID0gc3Rh
dGljX2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgICAgICBpZiAo
aWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6U2VsZWN0QWRkKSB7CisgICAgICAgICAgICBzZWxlY3Qu
YWRkKHRvSFRNTEVsZW1lbnQoYXJnc1swXSksIHRvSFRNTEVsZW1lbnQoYXJnc1sxXSkpOworICAg
ICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYg
KGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlNlbGVjdFJlbW92ZSkgeworICAgICAgICAgICAgc2Vs
ZWN0LnJlbW92ZShpbnQoYXJnc1swXS50b051bWJlcihleGVjKSkpOworICAgICAgICAgICAgcmV0
dXJuIFVuZGVmaW5lZCgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6
SFRNTEVsZW1lbnQ6OlNlbGVjdEJsdXIpIHsKKyAgICAgICAgICAgIHNlbGVjdC5ibHVyKCk7Cisg
ICAgICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBp
ZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6U2VsZWN0Rm9jdXMpIHsKKyAgICAgICAgICAgIHNl
bGVjdC5mb2N1cygpOworICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAgICAgICB9
CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfQlVUVE9OOiB7Ci0gICAgICBIVE1MQnV0
dG9uRWxlbWVudEltcGwgJmJ1dHRvbiA9IHN0YXRpY19jYXN0PEhUTUxCdXR0b25FbGVtZW50SW1w
bCAmPihlbGVtZW50KTsKLSAgICAgIAotICAgICAgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6
OkJ1dHRvbkJsdXIpIHsKLSAgICAgICAgYnV0dG9uLmJsdXIoKTsKLSAgICAgICAgcmV0dXJuIFVu
ZGVmaW5lZCgpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVu
dDo6QnV0dG9uRm9jdXMpIHsKLSAgICAgICAgYnV0dG9uLmZvY3VzKCk7Ci0gICAgICAgIHJldHVy
biBVbmRlZmluZWQoKTsKLSAgICAgIH0KKyAgICBlbHNlIGlmIChlbGVtZW50Lmhhc0xvY2FsTmFt
ZShIVE1MTmFtZXM6OmlucHV0KCkpKSB7CisgICAgICAgIEhUTUxJbnB1dEVsZW1lbnRJbXBsICZp
bnB1dCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAg
ICAgICBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6SW5wdXRCbHVyKSB7CisgICAgICAgICAg
ICBpbnB1dC5ibHVyKCk7CisgICAgICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CisgICAgICAg
IH0KKyAgICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6SW5wdXRGb2N1cykg
eworICAgICAgICAgICAgaW5wdXQuZm9jdXMoKTsKKyAgICAgICAgICAgIHJldHVybiBVbmRlZmlu
ZWQoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50
OjpJbnB1dFNlbGVjdCkgeworICAgICAgICAgICAgaW5wdXQuc2VsZWN0KCk7CisgICAgICAgICAg
ICByZXR1cm4gVW5kZWZpbmVkKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoaWQgPT0g
S0pTOjpIVE1MRWxlbWVudDo6SW5wdXRDbGljaykgeworICAgICAgICAgICAgaW5wdXQuY2xpY2so
KTsKKyAgICAgICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKKyAgICAgICAgfQogICAgIH0KLSAg
ICBicmVhazsKLSAgICBjYXNlIElEX1RFWFRBUkVBOiB7Ci0gICAgICBIVE1MVGV4dEFyZWFFbGVt
ZW50SW1wbCAmdGV4dGFyZWEgPSBzdGF0aWNfY2FzdDxIVE1MVGV4dEFyZWFFbGVtZW50SW1wbCAm
PihlbGVtZW50KTsKLSAgICAgIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUZXh0QXJlYUJs
dXIpIHsKLSAgICAgICAgdGV4dGFyZWEuYmx1cigpOwotICAgICAgICByZXR1cm4gVW5kZWZpbmVk
KCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUZXh0
QXJlYUZvY3VzKSB7Ci0gICAgICAgIHRleHRhcmVhLmZvY3VzKCk7Ci0gICAgICAgIHJldHVybiBV
bmRlZmluZWQoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1l
bnQ6OlRleHRBcmVhU2VsZWN0KSB7Ci0gICAgICAgIHRleHRhcmVhLnNlbGVjdCgpOwotICAgICAg
ICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9CisgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNM
b2NhbE5hbWUoSFRNTE5hbWVzOjpidXR0b24oKSkpIHsKKyAgICAgICAgSFRNTEJ1dHRvbkVsZW1l
bnRJbXBsICZidXR0b24gPSBzdGF0aWNfY2FzdDxIVE1MQnV0dG9uRWxlbWVudEltcGwgJj4oZWxl
bWVudCk7CisgICAgICAgIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpCdXR0b25CbHVyKSB7
CisgICAgICAgICAgICBidXR0b24uYmx1cigpOworICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5l
ZCgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6
OkJ1dHRvbkZvY3VzKSB7CisgICAgICAgICAgICBidXR0b24uZm9jdXMoKTsKKyAgICAgICAgICAg
IHJldHVybiBVbmRlZmluZWQoKTsKKyAgICAgICAgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBj
YXNlIElEX0E6IHsKLSAgICAgIEhUTUxBbmNob3JFbGVtZW50SW1wbCAmYW5jaG9yID0gc3RhdGlj
X2Nhc3Q8SFRNTEFuY2hvckVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgaWYgKGlkID09
IEtKUzo6SFRNTEVsZW1lbnQ6OkFuY2hvckJsdXIpIHsKLSAgICAgICAgYW5jaG9yLmJsdXIoKTsK
LSAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoaWQg
PT0gS0pTOjpIVE1MRWxlbWVudDo6QW5jaG9yRm9jdXMpIHsKLSAgICAgICAgYW5jaG9yLmZvY3Vz
KCk7Ci0gICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKLSAgICAgIH0gCi0gICAgICBlbHNlIGlm
IChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpBbmNob3JUb1N0cmluZykgewotCXJldHVybiBTdHJp
bmcodGhpc09iai50b1N0cmluZyhleGVjKSk7Ci0gICAgICB9CisgICAgZWxzZSBpZiAoZWxlbWVu
dC5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0ZXh0YXJlYSgpKSkgeworICAgICAgICBIVE1MVGV4
dEFyZWFFbGVtZW50SW1wbCAmdGV4dGFyZWEgPSBzdGF0aWNfY2FzdDxIVE1MVGV4dEFyZWFFbGVt
ZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICAgICAgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6
OlRleHRBcmVhQmx1cikgeworICAgICAgICAgICAgdGV4dGFyZWEuYmx1cigpOworICAgICAgICAg
ICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGlkID09
IEtKUzo6SFRNTEVsZW1lbnQ6OlRleHRBcmVhRm9jdXMpIHsKKyAgICAgICAgICAgIHRleHRhcmVh
LmZvY3VzKCk7CisgICAgICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6VGV4dEFyZWFTZWxlY3QpIHsK
KyAgICAgICAgICAgIHRleHRhcmVhLnNlbGVjdCgpOworICAgICAgICAgICAgcmV0dXJuIFVuZGVm
aW5lZCgpOworICAgICAgICB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfVEFCTEU6
IHsKLSAgICAgIEhUTUxUYWJsZUVsZW1lbnRJbXBsICZ0YWJsZSA9IHN0YXRpY19jYXN0PEhUTUxU
YWJsZUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgaWYgKGlkID09IEtKUzo6SFRNTEVs
ZW1lbnQ6OlRhYmxlQ3JlYXRlVEhlYWQpCi0gICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMs
dGFibGUuY3JlYXRlVEhlYWQoKSk7Ci0gICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVt
ZW50OjpUYWJsZURlbGV0ZVRIZWFkKSB7Ci0gICAgICAgIHRhYmxlLmRlbGV0ZVRIZWFkKCk7Ci0g
ICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGlkID09
IEtKUzo6SFRNTEVsZW1lbnQ6OlRhYmxlQ3JlYXRlVEZvb3QpCi0gICAgICAgIHJldHVybiBnZXRE
T01Ob2RlKGV4ZWMsdGFibGUuY3JlYXRlVEZvb3QoKSk7Ci0gICAgICBlbHNlIGlmIChpZCA9PSBL
SlM6OkhUTUxFbGVtZW50OjpUYWJsZURlbGV0ZVRGb290KSB7Ci0gICAgICAgIHRhYmxlLmRlbGV0
ZVRGb290KCk7Ci0gICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKLSAgICAgIH0KLSAgICAgIGVs
c2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRhYmxlQ3JlYXRlQ2FwdGlvbikKLSAgICAg
ICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyx0YWJsZS5jcmVhdGVDYXB0aW9uKCkpOwotICAgICAg
ZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6VGFibGVEZWxldGVDYXB0aW9uKSB7Ci0g
ICAgICAgIHRhYmxlLmRlbGV0ZUNhcHRpb24oKTsKLSAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgp
OwotICAgICAgfQotICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6VGFibGVJ
bnNlcnRSb3cpCi0gICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsdGFibGUuaW5zZXJ0Um93
KGFyZ3NbMF0udG9JbnQzMihleGVjKSwgZXhjZXB0aW9uKSk7Ci0gICAgICBlbHNlIGlmIChpZCA9
PSBLSlM6OkhUTUxFbGVtZW50OjpUYWJsZURlbGV0ZVJvdykgewotICAgICAgICB0YWJsZS5kZWxl
dGVSb3coYXJnc1swXS50b0ludDMyKGV4ZWMpLCBleGNlcHRpb24pOwotICAgICAgICByZXR1cm4g
VW5kZWZpbmVkKCk7Ci0gICAgICB9CisgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNMb2NhbE5hbWUo
SFRNTE5hbWVzOjphKCkpKSB7CisgICAgICAgIEhUTUxBbmNob3JFbGVtZW50SW1wbCAmYW5jaG9y
ID0gc3RhdGljX2Nhc3Q8SFRNTEFuY2hvckVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgICAg
ICBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6QW5jaG9yQmx1cikgeworICAgICAgICAgICAg
YW5jaG9yLmJsdXIoKTsKKyAgICAgICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKKyAgICAgICAg
fQorICAgICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpBbmNob3JGb2N1cykg
eworICAgICAgICAgICAgYW5jaG9yLmZvY3VzKCk7CisgICAgICAgICAgICByZXR1cm4gVW5kZWZp
bmVkKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVu
dDo6QW5jaG9yVG9TdHJpbmcpCisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRoaXNPYmoudG9T
dHJpbmcoZXhlYykpOwogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX1RIRUFEOgotICAg
IGNhc2UgSURfVEJPRFk6Ci0gICAgY2FzZSBJRF9URk9PVDogewotICAgICAgSFRNTFRhYmxlU2Vj
dGlvbkVsZW1lbnRJbXBsICZ0YWJsZVNlY3Rpb24gPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVTZWN0
aW9uRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBpZiAoaWQgPT0gS0pTOjpIVE1MRWxl
bWVudDo6VGFibGVTZWN0aW9uSW5zZXJ0Um93KQotICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShl
eGVjLCB0YWJsZVNlY3Rpb24uaW5zZXJ0Um93KGFyZ3NbMF0udG9JbnQzMihleGVjKSwgZXhjZXB0
aW9uKSk7Ci0gICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUYWJsZVNlY3Rp
b25EZWxldGVSb3cpIHsKLSAgICAgICAgdGFibGVTZWN0aW9uLmRlbGV0ZVJvdyhhcmdzWzBdLnRv
SW50MzIoZXhlYyksIGV4Y2VwdGlvbik7Ci0gICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKLSAg
ICAgIH0KKyAgICBlbHNlIGlmIChlbGVtZW50Lmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnRhYmxl
KCkpKSB7CisgICAgICAgIEhUTUxUYWJsZUVsZW1lbnRJbXBsICZ0YWJsZSA9IHN0YXRpY19jYXN0
PEhUTUxUYWJsZUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgICAgICBpZiAoaWQgPT0gS0pT
OjpIVE1MRWxlbWVudDo6VGFibGVDcmVhdGVUSGVhZCkKKyAgICAgICAgICAgIHJldHVybiBnZXRE
T01Ob2RlKGV4ZWMsdGFibGUuY3JlYXRlVEhlYWQoKSk7CisgICAgICAgIGVsc2UgaWYgKGlkID09
IEtKUzo6SFRNTEVsZW1lbnQ6OlRhYmxlRGVsZXRlVEhlYWQpIHsKKyAgICAgICAgICAgIHRhYmxl
LmRlbGV0ZVRIZWFkKCk7CisgICAgICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CisgICAgICAg
IH0KKyAgICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6VGFibGVDcmVhdGVU
Rm9vdCkKKyAgICAgICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsdGFibGUuY3JlYXRlVEZv
b3QoKSk7CisgICAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRhYmxlRGVs
ZXRlVEZvb3QpIHsKKyAgICAgICAgICAgIHRhYmxlLmRlbGV0ZVRGb290KCk7CisgICAgICAgICAg
ICByZXR1cm4gVW5kZWZpbmVkKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoaWQgPT0g
S0pTOjpIVE1MRWxlbWVudDo6VGFibGVDcmVhdGVDYXB0aW9uKQorICAgICAgICAgICAgcmV0dXJu
IGdldERPTU5vZGUoZXhlYyx0YWJsZS5jcmVhdGVDYXB0aW9uKCkpOworICAgICAgICBlbHNlIGlm
IChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUYWJsZURlbGV0ZUNhcHRpb24pIHsKKyAgICAgICAg
ICAgIHRhYmxlLmRlbGV0ZUNhcHRpb24oKTsKKyAgICAgICAgICAgIHJldHVybiBVbmRlZmluZWQo
KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpU
YWJsZUluc2VydFJvdykKKyAgICAgICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsdGFibGUu
aW5zZXJ0Um93KGFyZ3NbMF0udG9JbnQzMihleGVjKSwgZXhjZXB0aW9uKSk7CisgICAgICAgIGVs
c2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRhYmxlRGVsZXRlUm93KSB7CisgICAgICAg
ICAgICB0YWJsZS5kZWxldGVSb3coYXJnc1swXS50b0ludDMyKGV4ZWMpLCBleGNlcHRpb24pOwor
ICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAgICAgICB9CiAgICAgfQotICAgIGJy
ZWFrOwotICAgIGNhc2UgSURfVFI6IHsKLSAgICAgIEhUTUxUYWJsZVJvd0VsZW1lbnRJbXBsICZ0
YWJsZVJvdyA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZVJvd0VsZW1lbnRJbXBsICY+KGVsZW1lbnQp
OwotICAgICAgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRhYmxlUm93SW5zZXJ0Q2VsbCkK
LSAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyx0YWJsZVJvdy5pbnNlcnRDZWxsKGFyZ3Nb
MF0udG9JbnQzMihleGVjKSwgZXhjZXB0aW9uKSk7Ci0gICAgICBlbHNlIGlmIChpZCA9PSBLSlM6
OkhUTUxFbGVtZW50OjpUYWJsZVJvd0RlbGV0ZUNlbGwpIHsKLSAgICAgICAgdGFibGVSb3cuZGVs
ZXRlQ2VsbChhcmdzWzBdLnRvSW50MzIoZXhlYyksIGV4Y2VwdGlvbik7Ci0gICAgICAgIHJldHVy
biBVbmRlZmluZWQoKTsKLSAgICAgIH0KKyAgICBlbHNlIGlmIChlbGVtZW50Lmhhc0xvY2FsTmFt
ZShIVE1MTmFtZXM6OnRoZWFkKCkpIHx8CisgICAgICAgICAgICAgZWxlbWVudC5oYXNMb2NhbE5h
bWUoSFRNTE5hbWVzOjp0Ym9keSgpKSB8fAorICAgICAgICAgICAgIGVsZW1lbnQuaGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6dGZvb3QoKSkpIHsKKyAgICAgICAgSFRNTFRhYmxlU2VjdGlvbkVsZW1l
bnRJbXBsICZ0YWJsZVNlY3Rpb24gPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVTZWN0aW9uRWxlbWVu
dEltcGwgJj4oZWxlbWVudCk7CisgICAgICAgIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpU
YWJsZVNlY3Rpb25JbnNlcnRSb3cpCisgICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVj
LCB0YWJsZVNlY3Rpb24uaW5zZXJ0Um93KGFyZ3NbMF0udG9JbnQzMihleGVjKSwgZXhjZXB0aW9u
KSk7CisgICAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRhYmxlU2VjdGlv
bkRlbGV0ZVJvdykgeworICAgICAgICAgICAgdGFibGVTZWN0aW9uLmRlbGV0ZVJvdyhhcmdzWzBd
LnRvSW50MzIoZXhlYyksIGV4Y2VwdGlvbik7CisgICAgICAgICAgICByZXR1cm4gVW5kZWZpbmVk
KCk7CisgICAgICAgIH0KICAgICB9Ci0gICAgY2FzZSBJRF9NQVJRVUVFOiB7CisgICAgZWxzZSBp
ZiAoZWxlbWVudC5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0cigpKSkgeworICAgICAgICBIVE1M
VGFibGVSb3dFbGVtZW50SW1wbCAmdGFibGVSb3cgPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVSb3dF
bGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICAgICAgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1l
bnQ6OlRhYmxlUm93SW5zZXJ0Q2VsbCkKKyAgICAgICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4
ZWMsdGFibGVSb3cuaW5zZXJ0Q2VsbChhcmdzWzBdLnRvSW50MzIoZXhlYyksIGV4Y2VwdGlvbikp
OworICAgICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUYWJsZVJvd0RlbGV0
ZUNlbGwpIHsKKyAgICAgICAgICAgIHRhYmxlUm93LmRlbGV0ZUNlbGwoYXJnc1swXS50b0ludDMy
KGV4ZWMpLCBleGNlcHRpb24pOworICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAg
ICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFzTG9jYWxOYW1lKEhUTUxOYW1l
czo6bWFycXVlZSgpKSkgewogICAgICAgICBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6TWFy
cXVlZVN0YXJ0ICYmIGVsZW1lbnQucmVuZGVyZXIoKSAmJiAKICAgICAgICAgICAgIGVsZW1lbnQu
cmVuZGVyZXIoKS0+bGF5ZXIoKSAmJgogICAgICAgICAgICAgZWxlbWVudC5yZW5kZXJlcigpLT5s
YXllcigpLT5tYXJxdWVlKCkpIHsKQEAgLTIyODUsOSArMjQzMCw5IEBAIFZhbHVlIEtKUzo6SFRN
TEVsZW1lbnRGdW5jdGlvbjo6dHJ5Q2FsbCgKICAgICAgICAgICAgIGVsZW1lbnQucmVuZGVyZXIo
KS0+bGF5ZXIoKS0+bWFycXVlZSgpLT5zdG9wKCk7CiAgICAgICAgICAgICByZXR1cm4gVW5kZWZp
bmVkKCk7CiAgICAgICAgIH0KLSAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGNhc2UgSURfQ0FO
VkFTOiB7CisjaWYgQVBQTEVfQ0hBTkdFUworICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6Y2FudmFzKCkpKSB7CiAgICAgICAgIGlmIChpZCA9PSBLSlM6OkhUTUxF
bGVtZW50OjpHZXRDb250ZXh0KSB7CiAgICAgICAgICAgICBpZiAoYXJncy5zaXplKCkgPT0gMCB8
fCAoYXJncy5zaXplKCkgPT0gMSAmJiBhcmdzWzBdLnRvU3RyaW5nKGV4ZWMpLnFzdHJpbmcoKS5s
b3dlcigpID09ICIyZCIpKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdChuZXcgQ29u
dGV4dDJEKCZlbGVtZW50KSk7CkBAIC0yMjk1LDczOCArMjQ0MCw3NTYgQEAgVmFsdWUgS0pTOjpI
VE1MRWxlbWVudEZ1bmN0aW9uOjp0cnlDYWxsKAogICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5l
ZCgpOwogICAgICAgICB9CiAgICAgfQotICAgIAotICAgIGJyZWFrOwotICB9CisjZW5kaWYKIAot
ICByZXR1cm4gVW5kZWZpbmVkKCk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCiB2b2lk
IEtKUzo6SFRNTEVsZW1lbnQ6OnRyeVB1dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZp
ZXIgJnByb3BlcnR5TmFtZSwgY29uc3QgVmFsdWUmIHZhbHVlLCBpbnQgYXR0cikKIHsKICNpZmRl
ZiBLSlNfVkVSQk9TRQotICBET006OkRPTVN0cmluZyBzdHIgPSB2YWx1ZS5pc0EoTnVsbFR5cGUp
ID8gRE9NOjpET01TdHJpbmcoKSA6IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpOworICAg
IERPTTo6RE9NU3RyaW5nIHN0ciA9IHZhbHVlLmlzQShOdWxsVHlwZSkgPyBET006OkRPTVN0cmlu
ZygpIDogdmFsdWUudG9TdHJpbmcoZXhlYykuc3RyaW5nKCk7CiAjZW5kaWYKLSAgSFRNTEVsZW1l
bnRJbXBsICZlbGVtZW50ID0gKnN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCAqPihpbXBsKCkp
OworICAgIEhUTUxFbGVtZW50SW1wbCAmZWxlbWVudCA9ICpzdGF0aWNfY2FzdDxIVE1MRWxlbWVu
dEltcGwgKj4oaW1wbCgpKTsKICNpZmRlZiBLSlNfVkVSQk9TRQotICBrZERlYnVnKDYwNzApIDw8
ICJLSlM6OkhUTUxFbGVtZW50Ojp0cnlQdXQgIiA8PCBwcm9wZXJ0eU5hbWUucXN0cmluZygpCi0g
ICAgICAgICAgICAgICAgPDwgIiB0aGlzVGFnPSIgPDwgZWxlbWVudC50YWdOYW1lKCkuc3RyaW5n
KCkKLSAgICAgICAgICAgICAgICA8PCAiIHN0cj0iIDw8IHN0ci5zdHJpbmcoKSA8PCBlbmRsOwor
ICAgIGtkRGVidWcoNjA3MCkgPDwgIktKUzo6SFRNTEVsZW1lbnQ6OnRyeVB1dCAiIDw8IHByb3Bl
cnR5TmFtZS5xc3RyaW5nKCkKKyAgICAgICAgICAgICAgICAgIDw8ICIgdGhpc1RhZz0iIDw8IGVs
ZW1lbnQudGFnTmFtZSgpLnN0cmluZygpCisgICAgICAgICAgICAgICAgICA8PCAiIHN0cj0iIDw8
IHN0ci5zdHJpbmcoKSA8PCBlbmRsOwogI2VuZGlmCi0gIC8vIEZpcnN0IGxvb2sgYXQgZHluYW1p
YyBwcm9wZXJ0aWVzCi0gIHN3aXRjaCAoZWxlbWVudC5pZCgpKSB7Ci0gICAgY2FzZSBJRF9TRUxF
Q1Q6IHsKLSAgICAgIEhUTUxTZWxlY3RFbGVtZW50SW1wbCAmc2VsZWN0ID0gc3RhdGljX2Nhc3Q8
SFRNTFNlbGVjdEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgYm9vbCBvazsKLSAgICAg
IC8qdWludCB1ID0qLyBwcm9wZXJ0eU5hbWUudG9VTG9uZygmb2spOwotICAgICAgaWYgKG9rKSB7
Ci0gICAgICAgIE9iamVjdCBjb2xsID0gT2JqZWN0OjpkeW5hbWljQ2FzdCggZ2V0U2VsZWN0SFRN
TENvbGxlY3Rpb24oZXhlYywgc2VsZWN0Lm9wdGlvbnNIVE1MQ29sbGVjdGlvbigpLmdldCgpLCAm
c2VsZWN0KSApOwotICAgICAgICBpZiAoICFjb2xsLmlzTnVsbCgpICkKLSAgICAgICAgICBjb2xs
LnB1dChleGVjLHByb3BlcnR5TmFtZSx2YWx1ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0K
KyAgICAvLyBGaXJzdCBsb29rIGF0IGR5bmFtaWMgcHJvcGVydGllcworICAgIGlmIChlbGVtZW50
Lmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnNlbGVjdCgpKSkgeworICAgICAgICBIVE1MU2VsZWN0
RWxlbWVudEltcGwgJnNlbGVjdCA9IHN0YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50SW1wbCAm
PihlbGVtZW50KTsKKyAgICAgICAgYm9vbCBvazsKKyAgICAgICAgLyp1aW50IHUgPSovIHByb3Bl
cnR5TmFtZS50b1VMb25nKCZvayk7CisgICAgICAgIGlmIChvaykgeworICAgICAgICAgICAgT2Jq
ZWN0IGNvbGwgPSBPYmplY3Q6OmR5bmFtaWNDYXN0KCBnZXRTZWxlY3RIVE1MQ29sbGVjdGlvbihl
eGVjLCBzZWxlY3Qub3B0aW9uc0hUTUxDb2xsZWN0aW9uKCkuZ2V0KCksICZzZWxlY3QpICk7Cisg
ICAgICAgICAgICBpZiAoIWNvbGwuaXNOdWxsKCkpCisgICAgICAgICAgICAgICAgY29sbC5wdXQo
ZXhlYyxwcm9wZXJ0eU5hbWUsdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CiAgICAgfQogI2lmIEFQUExFX0NIQU5HRVMKLSAgICBjYXNlIElEX0VNQkVEOgotICAgIGNhc2Ug
SURfT0JKRUNUOgotICAgIGNhc2UgSURfQVBQTEVUOiB7CisgICAgZWxzZSBpZiAoZWxlbWVudC5o
YXNMb2NhbE5hbWUoSFRNTE5hbWVzOjplbWJlZCgpKSB8fAorICAgICAgICAgICAgIGVsZW1lbnQu
aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b2JqZWN0KCkpIHx8CisgICAgICAgICAgICAgZWxlbWVu
dC5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjphcHBsZXQoKSkpIHsKIAlWYWx1ZSBydW50aW1lT2Jq
ZWN0ID0gZ2V0UnVudGltZU9iamVjdChleGVjLCZlbGVtZW50KTsKIAlpZiAoIXJ1bnRpbWVPYmpl
Y3QuaXNOdWxsKCkpIHsKIAkgICAgT2JqZWN0SW1wICppbXAgPSBzdGF0aWNfY2FzdDxPYmplY3RJ
bXAgKj4ocnVudGltZU9iamVjdC5pbXAoKSk7Ci0JICAgIGlmIChpbXAtPmNhblB1dChleGVjLCBw
cm9wZXJ0eU5hbWUpKSB7CisJICAgIGlmIChpbXAtPmNhblB1dChleGVjLCBwcm9wZXJ0eU5hbWUp
KQogCQlyZXR1cm4gaW1wLT5wdXQgKGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUpOwotCSAgICB9
CiAJfQogICAgIH0KLSAgICAgIGJyZWFrOwogI2VuZGlmCi0gICAgYnJlYWs7Ci0gIGRlZmF1bHQ6
Ci0gICAgICBicmVhazsKLSAgfQogCi0gIGNvbnN0IEhhc2hUYWJsZSogdGFibGUgPSBjbGFzc0lu
Zm8oKS0+cHJvcEhhc2hUYWJsZTsgLy8gZ2V0IHRoZSByaWdodCBoYXNodGFibGUKLSAgY29uc3Qg
SGFzaEVudHJ5KiBlbnRyeSA9IExvb2t1cDo6ZmluZEVudHJ5KHRhYmxlLCBwcm9wZXJ0eU5hbWUp
OwotICBpZiAoZW50cnkpIHsKLSAgICBpZiAoZW50cnktPmF0dHIgJiBGdW5jdGlvbikgLy8gZnVu
Y3Rpb246IHB1dCBhcyBvdmVycmlkZSBwcm9wZXJ0eQotICAgIHsKLSAgICAgIE9iamVjdEltcDo6
cHV0KGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIGF0dHIpOwotICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICBlbHNlIGlmICgoZW50cnktPmF0dHIgJiBSZWFkT25seSkgPT0gMCkgLy8gbGV0IERP
TU9iamVjdExvb2t1cFB1dCBwcmludCB0aGUgd2FybmluZyBpZiBub3QKLSAgICB7Ci0gICAgICBw
dXRWYWx1ZShleGVjLCBlbnRyeS0+dmFsdWUsIHZhbHVlLCBhdHRyKTsKLSAgICAgIHJldHVybjsK
KyAgICBjb25zdCBIYXNoVGFibGUqIHRhYmxlID0gY2xhc3NJbmZvKCktPnByb3BIYXNoVGFibGU7
IC8vIGdldCB0aGUgcmlnaHQgaGFzaHRhYmxlCisgICAgY29uc3QgSGFzaEVudHJ5KiBlbnRyeSA9
IExvb2t1cDo6ZmluZEVudHJ5KHRhYmxlLCBwcm9wZXJ0eU5hbWUpOworICAgIGlmIChlbnRyeSkg
eworICAgICAgICBpZiAoZW50cnktPmF0dHIgJiBGdW5jdGlvbikgeyAvLyBmdW5jdGlvbjogcHV0
IGFzIG92ZXJyaWRlIHByb3BlcnR5CisgICAgICAgICAgICBPYmplY3RJbXA6OnB1dChleGVjLCBw
cm9wZXJ0eU5hbWUsIHZhbHVlLCBhdHRyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICBlbHNlIGlmICgoZW50cnktPmF0dHIgJiBSZWFkT25seSkgPT0gMCkgeyAvLyBs
ZXQgRE9NT2JqZWN0TG9va3VwUHV0IHByaW50IHRoZSB3YXJuaW5nIGlmIG5vdAorICAgICAgICAg
ICAgcHV0VmFsdWUoZXhlYywgZW50cnktPnZhbHVlLCB2YWx1ZSwgYXR0cik7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KICAgICB9Ci0gIH0KLSAgRE9NT2JqZWN0TG9va3VwUHV0PEtK
Uzo6SFRNTEVsZW1lbnQsIERPTUVsZW1lbnQ+KGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIGF0
dHIsICZIVE1MRWxlbWVudFRhYmxlLCB0aGlzKTsKKworICAgIERPTU9iamVjdExvb2t1cFB1dDxL
SlM6OkhUTUxFbGVtZW50LCBET01FbGVtZW50PihleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBh
dHRyLCAmSFRNTEVsZW1lbnRUYWJsZSwgdGhpcyk7CiB9CiAKLXZvaWQgSFRNTEVsZW1lbnQ6OnB1
dFZhbHVlKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGlu
dCkKK3ZvaWQgSFRNTEVsZW1lbnQ6Omh0bWxTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKIHsKLSAg
RE9NRXhjZXB0aW9uVHJhbnNsYXRvciBleGNlcHRpb24oZXhlYyk7Ci0gIERPTTo6RE9NU3RyaW5n
IHN0ciA9IHZhbHVlLmlzQShOdWxsVHlwZSkgPyBET006OkRPTVN0cmluZygpIDogdmFsdWUudG9T
dHJpbmcoZXhlYykuc3RyaW5nKCk7Ci0gIEhUTUxFbGVtZW50SW1wbCAmZWxlbWVudCA9ICpzdGF0
aWNfY2FzdDxIVE1MRWxlbWVudEltcGwgKj4oaW1wbCgpKTsKLSNpZmRlZiBLSlNfVkVSQk9TRQot
ICBrZERlYnVnKDYwNzApIDw8ICJLSlM6OkhUTUxFbGVtZW50OjpwdXRWYWx1ZSAiCi0gICAgICAg
ICAgICAgICAgPDwgIiB0aGlzVGFnPSIgPDwgZWxlbWVudC50YWdOYW1lKCkuc3RyaW5nKCkKLSAg
ICAgICAgICAgICAgICA8PCAiIHRva2VuPSIgPDwgdG9rZW4gPDwgZW5kbDsKLSNlbmRpZgorICAg
IEhUTUxIZWFkRWxlbWVudEltcGwgJmhlYWQgPSAqc3RhdGljX2Nhc3Q8SFRNTEhlYWRFbGVtZW50
SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IEhlYWRQcm9maWxlKSAKKyAgICAgICAg
aGVhZC5zZXRQcm9maWxlKHN0cik7Cit9CiAKLSAgc3dpdGNoIChlbGVtZW50LmlkKCkpIHsKLSAg
Y2FzZSBJRF9IVE1MOiB7Ci0gICAgICBIVE1MSHRtbEVsZW1lbnRJbXBsICZodG1sID0gc3RhdGlj
X2Nhc3Q8SFRNTEh0bWxFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9r
ZW4pIHsKLSAgICAgIGNhc2UgSHRtbFZlcnNpb246ICAgICAgICAgeyBodG1sLnNldFZlcnNpb24o
c3RyKTsgcmV0dXJuOyB9Ci0gICAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfSEVBRDog
ewotICAgIEhUTUxIZWFkRWxlbWVudEltcGwgJmhlYWQgPSBzdGF0aWNfY2FzdDxIVE1MSGVhZEVs
ZW1lbnRJbXBsICY+KGVsZW1lbnQpOwordm9pZCBIVE1MRWxlbWVudDo6aGVhZFNldHRlcihFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRP
TVN0cmluZyYgc3RyKQoreworICAgIEhUTUxIZWFkRWxlbWVudEltcGwgJmhlYWQgPSAqc3RhdGlj
X2Nhc3Q8SFRNTEhlYWRFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IEhl
YWRQcm9maWxlKSAKKyAgICAgICAgaGVhZC5zZXRQcm9maWxlKHN0cik7Cit9CisKK3ZvaWQgSFRN
TEVsZW1lbnQ6OmxpbmtTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZh
bHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MTGlua0Vs
ZW1lbnRJbXBsICZsaW5rID0gKnN0YXRpY19jYXN0PEhUTUxMaW5rRWxlbWVudEltcGwqPihpbXBs
KCkpOwogICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIEhlYWRQcm9maWxlOiAgICAgICAg
IHsgaGVhZC5zZXRQcm9maWxlKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIExpbmtEaXNh
YmxlZDogICAgICAgIHsgbGluay5zZXREaXNhYmxlZCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyBy
ZXR1cm47IH0KKyAgICAgICAgY2FzZSBMaW5rQ2hhcnNldDogICAgICAgICB7IGxpbmsuc2V0Q2hh
cnNldChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBMaW5rSHJlZjogICAgICAgICAgICB7
IGxpbmsuc2V0SHJlZihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBMaW5rSHJlZkxhbmc6
ICAgICAgICB7IGxpbmsuc2V0SHJlZmxhbmcoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2Ug
TGlua01lZGlhOiAgICAgICAgICAgeyBsaW5rLnNldE1lZGlhKHN0cik7IHJldHVybjsgfQorICAg
ICAgICBjYXNlIExpbmtSZWw6ICAgICAgICAgICAgIHsgbGluay5zZXRSZWwoc3RyKTsgcmV0dXJu
OyB9CisgICAgICAgIGNhc2UgTGlua1JldjogICAgICAgICAgICAgeyBsaW5rLnNldFJldihzdHIp
OyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBMaW5rVGFyZ2V0OiAgICAgICAgICB7IGxpbmsuc2V0
VGFyZ2V0KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIExpbmtUeXBlOiAgICAgICAgICAg
IHsgbGluay5zZXRUeXBlKHN0cik7IHJldHVybjsgfQogICAgIH0KLSAgfQotICBicmVhazsKLSAg
Y2FzZSBJRF9MSU5LOiB7Ci0gICAgSFRNTExpbmtFbGVtZW50SW1wbCAmbGluayA9IHN0YXRpY19j
YXN0PEhUTUxMaW5rRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikg
ewotICAgICAgY2FzZSBMaW5rRGlzYWJsZWQ6ICAgICAgICB7IGxpbmsuc2V0RGlzYWJsZWQodmFs
dWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIExpbmtDaGFyc2V0OiAg
ICAgICAgIHsgbGluay5zZXRDaGFyc2V0KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBMaW5r
SHJlZjogICAgICAgICAgICB7IGxpbmsuc2V0SHJlZihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNh
c2UgTGlua0hyZWZMYW5nOiAgICAgICAgeyBsaW5rLnNldEhyZWZsYW5nKHN0cik7IHJldHVybjsg
fQotICAgICAgY2FzZSBMaW5rTWVkaWE6ICAgICAgICAgICB7IGxpbmsuc2V0TWVkaWEoc3RyKTsg
cmV0dXJuOyB9Ci0gICAgICBjYXNlIExpbmtSZWw6ICAgICAgICAgICAgIHsgbGluay5zZXRSZWwo
c3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIExpbmtSZXY6ICAgICAgICAgICAgIHsgbGluay5z
ZXRSZXYoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIExpbmtUYXJnZXQ6ICAgICAgICAgIHsg
bGluay5zZXRUYXJnZXQoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIExpbmtUeXBlOiAgICAg
ICAgICAgIHsgbGluay5zZXRUeXBlKHN0cik7IHJldHVybjsgfQotICAgICAgfQotICAgIH0KLSAg
ICBicmVhazsKLSAgICBjYXNlIElEX1RJVExFOiB7Ci0gICAgICBIVE1MVGl0bGVFbGVtZW50SW1w
bCAmdGl0bGUgPSBzdGF0aWNfY2FzdDxIVE1MVGl0bGVFbGVtZW50SW1wbCAmPihlbGVtZW50KTsK
LSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgVGl0bGVUZXh0OiAgICAgICAgICAg
ICAgICAgeyB0aXRsZS5zZXRUZXh0KHN0cik7IHJldHVybjsgfQotICAgICAgfQotICAgIH0KLSAg
ICBicmVhazsKLSAgICBjYXNlIElEX01FVEE6IHsKLSAgICAgIEhUTUxNZXRhRWxlbWVudEltcGwg
Jm1ldGEgPSBzdGF0aWNfY2FzdDxIVE1MTWV0YUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAg
ICAgc3dpdGNoICh0b2tlbikgewotICAgICAgY2FzZSBNZXRhQ29udGVudDogICAgICAgICB7IG1l
dGEuc2V0Q29udGVudChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgTWV0YUh0dHBFcXVpdjog
ICAgICAgeyBtZXRhLnNldEh0dHBFcXVpdihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgTWV0
YU5hbWU6ICAgICAgICAgICAgeyBtZXRhLnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBj
YXNlIE1ldGFTY2hlbWU6ICAgICAgICAgIHsgbWV0YS5zZXRTY2hlbWUoc3RyKTsgcmV0dXJuOyB9
Ci0gICAgICB9Ci0gICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfQkFTRTogewotICAgICAg
SFRNTEJhc2VFbGVtZW50SW1wbCAmYmFzZSA9IHN0YXRpY19jYXN0PEhUTUxCYXNlRWxlbWVudElt
cGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIEJhc2VI
cmVmOiAgICAgICAgICAgIHsgYmFzZS5zZXRIcmVmKHN0cik7IHJldHVybjsgfQotICAgICAgY2Fz
ZSBCYXNlVGFyZ2V0OiAgICAgICAgICB7IGJhc2Uuc2V0VGFyZ2V0KHN0cik7IHJldHVybjsgfQot
ICAgICAgfQotICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0lTSU5ERVg6IHsKLSAgICAg
IEhUTUxJc0luZGV4RWxlbWVudEltcGwgJmlzaW5kZXggPSBzdGF0aWNfY2FzdDxIVE1MSXNJbmRl
eEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAg
Ly8gcmVhZC1vbmx5OiBmb3JtCi0gICAgICBjYXNlIElzSW5kZXhQcm9tcHQ6ICAgICAgICAgICAg
ICAgeyBpc2luZGV4LnNldFByb21wdChzdHIpOyByZXR1cm47IH0KLSAgICAgIH0KLSAgICB9Ci0g
ICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9TVFlMRTogewotICAgICAgSFRNTFN0eWxlRWxlbWVudElt
cGwgJnN0eWxlID0gc3RhdGljX2Nhc3Q8SFRNTFN0eWxlRWxlbWVudEltcGwgJj4oZWxlbWVudCk7
Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIFN0eWxlRGlzYWJsZWQ6ICAgICAg
ICB7IHN0eWxlLnNldERpc2FibGVkKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQot
ICAgICAgY2FzZSBTdHlsZU1lZGlhOiAgICAgICAgICAgeyBzdHlsZS5zZXRNZWRpYShzdHIpOyBy
ZXR1cm47IH0KLSAgICAgIGNhc2UgU3R5bGVUeXBlOiAgICAgICAgICAgIHsgc3R5bGUuc2V0VHlw
ZShzdHIpOyByZXR1cm47IH0KLSAgICAgIH0KLSAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJ
RF9CT0RZOiB7Ci0gICAgICBIVE1MQm9keUVsZW1lbnRJbXBsICZib2R5ID0gc3RhdGljX2Nhc3Q8
SFRNTEJvZHlFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsK
LSAgICAgIGNhc2UgQm9keUFMaW5rOiAgICAgICAgICAgeyBib2R5LnNldEFMaW5rKHN0cik7IHJl
dHVybjsgfQotICAgICAgY2FzZSBCb2R5QmFja2dyb3VuZDogICAgICB7IGJvZHkuc2V0QmFja2dy
b3VuZChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQm9keUJnQ29sb3I6ICAgICAgICAgeyBi
b2R5LnNldEJnQ29sb3Ioc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEJvZHlMaW5rOiAgICAg
ICAgICAgIHsgYm9keS5zZXRMaW5rKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBCb2R5VGV4
dDogICAgICAgICAgICB7IGJvZHkuc2V0VGV4dChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2Ug
Qm9keVZMaW5rOiAgICAgICAgICAgeyBib2R5LnNldFZMaW5rKHN0cik7IHJldHVybjsgfQotICAg
ICAgY2FzZSBCb2R5U2Nyb2xsTGVmdDoKLSAgICAgIGNhc2UgQm9keVNjcm9sbFRvcDogewotICAg
ICAgICAgIFFTY3JvbGxWaWV3KiBzdmlldyA9IGJvZHkub3duZXJEb2N1bWVudCgpLT52aWV3KCk7
Ci0gICAgICAgICAgaWYgKHN2aWV3KSB7Ci0gICAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgZG9j
dW1lbnQncyBsYXlvdXQgYmVmb3JlIHdlIGNvbXB1dGUgdGhlc2UgYXR0cmlidXRlcy4KLSAgICAg
ICAgICAgICAgaWYgKERvY3VtZW50SW1wbCogZG9jID0gYm9keS5nZXREb2N1bWVudCgpKQotICAg
ICAgICAgICAgICAgICAgZG9jLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMo
KTsKLSAgICAgICAgICAgICAgaWYgKHRva2VuID09IEJvZHlTY3JvbGxMZWZ0KQotICAgICAgICAg
ICAgICAgICAgc3ZpZXctPnNldENvbnRlbnRzUG9zKHZhbHVlLnRvSW50MzIoZXhlYyksIHN2aWV3
LT5jb250ZW50c1koKSk7Ci0gICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgIHN2
aWV3LT5zZXRDb250ZW50c1Bvcyhzdmlldy0+Y29udGVudHNYKCksIHZhbHVlLnRvSW50MzIoZXhl
YykpOwotICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgIH0K
LSAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9GT1JNOiB7Ci0gICAgICBIVE1MRm9ybUVs
ZW1lbnRJbXBsICZmb3JtID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50SW1wbCAmPihlbGVt
ZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIC8vIHJlYWQtb25seTogZWxlbWVu
dHMKLSAgICAgIC8vIHJlYWQtb25seTogbGVuZ3RoCi0gICAgICBjYXNlIEZvcm1OYW1lOiAgICAg
ICAgICAgIHsgZm9ybS5zZXROYW1lKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBGb3JtQWNj
ZXB0Q2hhcnNldDogICB7IGZvcm0uc2V0QWNjZXB0Q2hhcnNldChzdHIpOyByZXR1cm47IH0KLSAg
ICAgIGNhc2UgRm9ybUFjdGlvbjogICAgICAgICAgeyBmb3JtLnNldEFjdGlvbihzdHIpOyByZXR1
cm47IH0KLSAgICAgIGNhc2UgRm9ybUVuY1R5cGU6ICAgICAgICAgeyBmb3JtLnNldEVuY3R5cGUo
c3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEZvcm1NZXRob2Q6ICAgICAgICAgIHsgZm9ybS5z
ZXRNZXRob2Qoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEZvcm1UYXJnZXQ6ICAgICAgICAg
IHsgZm9ybS5zZXRUYXJnZXQoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICB9Ci0gICAgfQotICAgIGJy
ZWFrOwotICAgIGNhc2UgSURfU0VMRUNUOiB7Ci0gICAgICBIVE1MU2VsZWN0RWxlbWVudEltcGwg
JnNlbGVjdCA9IHN0YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50SW1wbCAmPihlbGVtZW50KTsK
LSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIC8vIHJlYWQtb25seTogdHlwZQotICAgICAg
Y2FzZSBTZWxlY3RTZWxlY3RlZEluZGV4OiAgIHsgc2VsZWN0LnNldFNlbGVjdGVkSW5kZXgodmFs
dWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBTZWxlY3RWYWx1ZTogICAg
ICAgICAgIHsgc2VsZWN0LnNldFZhbHVlKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBTZWxl
Y3RMZW5ndGg6ICAgICAgICAgIHsgLy8gcmVhZC1vbmx5IGFjY29yZGluZyB0byB0aGUgTlMgc3Bl
YywgYnV0IHdlYnBhZ2VzIG5lZWQgaXQgd3JpdGVhYmxlCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIE9iamVjdCBjb2xsID0gT2JqZWN0OjpkeW5hbWljQ2FzdCggZ2V0
U2VsZWN0SFRNTENvbGxlY3Rpb24oZXhlYywgc2VsZWN0Lm9wdGlvbnNIVE1MQ29sbGVjdGlvbigp
LmdldCgpLCAmc2VsZWN0KSApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoICFjb2xsLmlzTnVsbCgpICkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb2xsLnB1dChleGVjLGxlbmd0aFByb3BlcnR5TmFtZSx2YWx1ZSk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgIC8vIHJlYWQtb25seTogZm9y
bQotICAgICAgLy8gcmVhZC1vbmx5OiBvcHRpb25zCi0gICAgICBjYXNlIFNlbGVjdERpc2FibGVk
OiAgICAgICAgeyBzZWxlY3Quc2V0RGlzYWJsZWQodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0
dXJuOyB9Ci0gICAgICBjYXNlIFNlbGVjdE11bHRpcGxlOiAgICAgICAgeyBzZWxlY3Quc2V0TXVs
dGlwbGUodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFNlbGVj
dE5hbWU6ICAgICAgICAgICAgeyBzZWxlY3Quc2V0TmFtZShzdHIpOyByZXR1cm47IH0KLSAgICAg
IGNhc2UgU2VsZWN0U2l6ZTogICAgICAgICAgICB7IHNlbGVjdC5zZXRTaXplKHZhbHVlLnRvSW50
MzIoZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgU2VsZWN0VGFiSW5kZXg6ICAgICAgICB7
IHNlbGVjdC5zZXRUYWJJbmRleCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAg
ICB9Ci0gICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfT1BUR1JPVVA6IHsKLSAgICAgIEhU
TUxPcHRHcm91cEVsZW1lbnRJbXBsICZvcHRncm91cCA9IHN0YXRpY19jYXN0PEhUTUxPcHRHcm91
cEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAg
Y2FzZSBPcHRHcm91cERpc2FibGVkOiAgICAgICAgeyBvcHRncm91cC5zZXREaXNhYmxlZCh2YWx1
ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgT3B0R3JvdXBMYWJlbDog
ICAgICAgICAgIHsgb3B0Z3JvdXAuc2V0TGFiZWwoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICB9Ci0g
ICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfT1BUSU9OOiB7Ci0gICAgICBIVE1MT3B0aW9u
RWxlbWVudEltcGwgJm9wdGlvbiA9IHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50SW1wbCAm
PihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIC8vIHJlYWQtb25seTog
Zm9ybQotICAgICAgY2FzZSBPcHRpb25EZWZhdWx0U2VsZWN0ZWQ6IHsgb3B0aW9uLnNldERlZmF1
bHRTZWxlY3RlZCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2Ug
T3B0aW9uVGV4dDogICAgICAgICAgICB7IG9wdGlvbi5zZXRUZXh0KHN0ciwgZXhjZXB0aW9uKTsg
cmV0dXJuOyB9Ci0gICAgICAvLyByZWFkLW9ubHk6IGluZGV4Ci0gICAgICBjYXNlIE9wdGlvbkRp
c2FibGVkOiAgICAgICAgeyBvcHRpb24uc2V0RGlzYWJsZWQodmFsdWUudG9Cb29sZWFuKGV4ZWMp
KTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIE9wdGlvbkxhYmVsOiAgICAgICAgICAgeyBvcHRpb24u
c2V0TGFiZWwoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIE9wdGlvblNlbGVjdGVkOiAgICAg
ICAgeyBvcHRpb24uc2V0U2VsZWN0ZWQodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9
Ci0gICAgICBjYXNlIE9wdGlvblZhbHVlOiAgICAgICAgICAgeyBvcHRpb24uc2V0VmFsdWUoc3Ry
KTsgcmV0dXJuOyB9Ci0gICAgICB9Ci0gICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfSU5Q
VVQ6IHsKLSAgICAgIEhUTUxJbnB1dEVsZW1lbnRJbXBsICZpbnB1dCA9IHN0YXRpY19jYXN0PEhU
TUxJbnB1dEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewot
ICAgICAgY2FzZSBJbnB1dERlZmF1bHRWYWx1ZTogICAgeyBpbnB1dC5zZXREZWZhdWx0VmFsdWUo
c3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElucHV0RGVmYXVsdENoZWNrZWQ6ICB7IGlucHV0
LnNldERlZmF1bHRDaGVja2VkKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQotICAg
ICAgLy8gcmVhZC1vbmx5OiBmb3JtCi0gICAgICBjYXNlIElucHV0QWNjZXB0OiAgICAgICAgICB7
IGlucHV0LnNldEFjY2VwdChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSW5wdXRBY2Nlc3NL
ZXk6ICAgICAgIHsgaW5wdXQuc2V0QWNjZXNzS2V5KHN0cik7IHJldHVybjsgfQotICAgICAgY2Fz
ZSBJbnB1dEFsaWduOiAgICAgICAgICAgeyBpbnB1dC5zZXRBbGlnbihzdHIpOyByZXR1cm47IH0K
LSAgICAgIGNhc2UgSW5wdXRBbHQ6ICAgICAgICAgICAgIHsgaW5wdXQuc2V0QWx0KHN0cik7IHJl
dHVybjsgfQotICAgICAgY2FzZSBJbnB1dENoZWNrZWQ6ICAgICAgICAgeyBpbnB1dC5zZXRDaGVj
a2VkKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBJbnB1dERp
c2FibGVkOiAgICAgICAgeyBpbnB1dC5zZXREaXNhYmxlZCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykp
OyByZXR1cm47IH0KLSAgICAgIGNhc2UgSW5wdXRNYXhMZW5ndGg6ICAgICAgIHsgaW5wdXQuc2V0
TWF4TGVuZ3RoKHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSW5w
dXROYW1lOiAgICAgICAgICAgIHsgaW5wdXQuc2V0TmFtZShzdHIpOyByZXR1cm47IH0KLSAgICAg
IGNhc2UgSW5wdXRSZWFkT25seTogICAgICAgIHsgaW5wdXQuc2V0UmVhZE9ubHkodmFsdWUudG9C
b29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElucHV0U2l6ZTogICAgICAgICAg
ICB7IGlucHV0LnNldFNpemUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElucHV0U3JjOiAg
ICAgICAgICAgICB7IGlucHV0LnNldFNyYyhzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSW5w
dXRUYWJJbmRleDogICAgICAgIHsgaW5wdXQuc2V0VGFiSW5kZXgodmFsdWUudG9JbnQzMihleGVj
KSk7IHJldHVybjsgfQotICAgICAgY2FzZSBJbnB1dFR5cGU6ICAgICAgICAgICAgeyBpbnB1dC5z
ZXRUeXBlKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBJbnB1dFVzZU1hcDogICAgICAgICAg
eyBpbnB1dC5zZXRVc2VNYXAoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElucHV0VmFsdWU6
ICAgICAgICAgICB7IGlucHV0LnNldFZhbHVlKHN0cik7IHJldHVybjsgfQotICAgICAgfQotICAg
IH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX1RFWFRBUkVBOiB7Ci0gICAgICBIVE1MVGV4dEFy
ZWFFbGVtZW50SW1wbCAmdGV4dGFyZWEgPSBzdGF0aWNfY2FzdDxIVE1MVGV4dEFyZWFFbGVtZW50
SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgVGV4
dEFyZWFEZWZhdWx0VmFsdWU6ICAgIHsgdGV4dGFyZWEuc2V0RGVmYXVsdFZhbHVlKHN0cik7IHJl
dHVybjsgfQotICAgICAgLy8gcmVhZC1vbmx5OiBmb3JtCi0gICAgICBjYXNlIFRleHRBcmVhQWNj
ZXNzS2V5OiAgICAgICB7IHRleHRhcmVhLnNldEFjY2Vzc0tleShzdHIpOyByZXR1cm47IH0KLSAg
ICAgIGNhc2UgVGV4dEFyZWFDb2xzOiAgICAgICAgICAgIHsgdGV4dGFyZWEuc2V0Q29scyh2YWx1
ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRleHRBcmVhRGlzYWJsZWQ6
ICAgICAgICB7IHRleHRhcmVhLnNldERpc2FibGVkKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJl
dHVybjsgfQotICAgICAgY2FzZSBUZXh0QXJlYU5hbWU6ICAgICAgICAgICAgeyB0ZXh0YXJlYS5z
ZXROYW1lKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBUZXh0QXJlYVJlYWRPbmx5OiAgICAg
ICAgeyB0ZXh0YXJlYS5zZXRSZWFkT25seSh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47
IH0KLSAgICAgIGNhc2UgVGV4dEFyZWFSb3dzOiAgICAgICAgICAgIHsgdGV4dGFyZWEuc2V0Um93
cyh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRleHRBcmVhVGFi
SW5kZXg6ICAgICAgICB7IHRleHRhcmVhLnNldFRhYkluZGV4KHZhbHVlLnRvSW50MzIoZXhlYykp
OyByZXR1cm47IH0KLSAgICAgIC8vIHJlYWQtb25seTogdHlwZQotICAgICAgY2FzZSBUZXh0QXJl
YVZhbHVlOiAgICAgICAgICAgeyB0ZXh0YXJlYS5zZXRWYWx1ZShzdHIpOyByZXR1cm47IH0KLSAg
ICAgIH0KLSAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9CVVRUT046IHsKLSAgICAgIEhU
TUxCdXR0b25FbGVtZW50SW1wbCAmYnV0dG9uID0gc3RhdGljX2Nhc3Q8SFRNTEJ1dHRvbkVsZW1l
bnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgLy8gcmVh
ZC1vbmx5OiBmb3JtCi0gICAgICBjYXNlIEJ1dHRvbkFjY2Vzc0tleTogICAgICAgeyBidXR0b24u
c2V0QWNjZXNzS2V5KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBCdXR0b25EaXNhYmxlZDog
ICAgICAgIHsgYnV0dG9uLnNldERpc2FibGVkKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVy
bjsgfQotICAgICAgY2FzZSBCdXR0b25OYW1lOiAgICAgICAgICAgIHsgYnV0dG9uLnNldE5hbWUo
c3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEJ1dHRvblRhYkluZGV4OiAgICAgICAgeyBidXR0
b24uc2V0VGFiSW5kZXgodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQotICAgICAgLy8g
cmVhZC1vbmx5OiB0eXBlCi0gICAgICBjYXNlIEJ1dHRvblZhbHVlOiAgICAgICAgICAgeyBidXR0
b24uc2V0VmFsdWUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICB9Ci0gICAgfQotICAgIGJyZWFrOwot
ICAgIGNhc2UgSURfTEFCRUw6IHsKLSAgICAgIEhUTUxMYWJlbEVsZW1lbnRJbXBsICZsYWJlbCA9
IHN0YXRpY19jYXN0PEhUTUxMYWJlbEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dp
dGNoICh0b2tlbikgewotICAgICAgLy8gcmVhZC1vbmx5OiBmb3JtCi0gICAgICBjYXNlIExhYmVs
QWNjZXNzS2V5OiAgICAgICB7IGxhYmVsLnNldEFjY2Vzc0tleShzdHIpOyByZXR1cm47IH0KLSAg
ICAgIGNhc2UgTGFiZWxIdG1sRm9yOiAgICAgICAgIHsgbGFiZWwuc2V0SHRtbEZvcihzdHIpOyBy
ZXR1cm47IH0KLSAgICAgIH0KLSAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9MRUdFTkQ6
IHsKLSAgICAgIEhUTUxMZWdlbmRFbGVtZW50SW1wbCAmbGVnZW5kID0gc3RhdGljX2Nhc3Q8SFRN
TExlZ2VuZEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewot
ICAgICAgLy8gcmVhZC1vbmx5OiBmb3JtCi0gICAgICBjYXNlIExlZ2VuZEFjY2Vzc0tleTogICAg
ICAgeyBsZWdlbmQuc2V0QWNjZXNzS2V5KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBMZWdl
bmRBbGlnbjogICAgICAgICAgIHsgbGVnZW5kLnNldEFsaWduKHN0cik7IHJldHVybjsgfQotICAg
ICAgfQorfQorCit2b2lkIEhUTUxFbGVtZW50Ojp0aXRsZVNldHRlcihFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3Ry
KQoreworICAgICBIVE1MVGl0bGVFbGVtZW50SW1wbCYgdGl0bGUgPSAqc3RhdGljX2Nhc3Q8SFRN
TFRpdGxlRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgICBpZiAodG9rZW4gPT0gVGl0bGVUZXh0
KQorICAgICAgICB0aXRsZS5zZXRUZXh0KHN0cik7Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6Om1l
dGFTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwg
Y29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MTWV0YUVsZW1lbnRJbXBsJiBt
ZXRhID0gKnN0YXRpY19jYXN0PEhUTUxNZXRhRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3
aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBNZXRhQ29udGVudDogICAgICAgICB7IG1ldGEu
c2V0Q29udGVudChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBNZXRhSHR0cEVxdWl2OiAg
ICAgICB7IG1ldGEuc2V0SHR0cEVxdWl2KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIE1l
dGFOYW1lOiAgICAgICAgICAgIHsgbWV0YS5zZXROYW1lKHN0cik7IHJldHVybjsgfQorICAgICAg
ICBjYXNlIE1ldGFTY2hlbWU6ICAgICAgICAgIHsgbWV0YS5zZXRTY2hlbWUoc3RyKTsgcmV0dXJu
OyB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfVUw6IHsKLSAgICAgIEhUTUxVTGlz
dEVsZW1lbnRJbXBsICZ1TGlzdCA9IHN0YXRpY19jYXN0PEhUTUxVTGlzdEVsZW1lbnRJbXBsICY+
KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgY2FzZSBVTGlzdENvbXBh
Y3Q6ICAgICAgICAgeyB1TGlzdC5zZXRDb21wYWN0KHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJl
dHVybjsgfQotICAgICAgY2FzZSBVTGlzdFR5cGU6ICAgICAgICAgICAgeyB1TGlzdC5zZXRUeXBl
KHN0cik7IHJldHVybjsgfQotICAgICAgfQorfQorCit2b2lkIEhUTUxFbGVtZW50OjpiYXNlU2V0
dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0
IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTEJhc2VFbGVtZW50SW1wbCYgYmFzZSA9
ICpzdGF0aWNfY2FzdDxIVE1MQmFzZUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2gg
KHRva2VuKSB7CisgICAgICAgIGNhc2UgQmFzZUhyZWY6ICAgICAgICAgICAgeyBiYXNlLnNldEhy
ZWYoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQmFzZVRhcmdldDogICAgICAgICAgeyBi
YXNlLnNldFRhcmdldChzdHIpOyByZXR1cm47IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2Fz
ZSBJRF9PTDogewotICAgICAgSFRNTE9MaXN0RWxlbWVudEltcGwgJm9MaXN0ID0gc3RhdGljX2Nh
c3Q8SFRNTE9MaXN0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2Vu
KSB7Ci0gICAgICBjYXNlIE9MaXN0Q29tcGFjdDogICAgICAgICB7IG9MaXN0LnNldENvbXBhY3Qo
dmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIE9MaXN0U3RhcnQ6
ICAgICAgICAgICB7IG9MaXN0LnNldFN0YXJ0KHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47
IH0KLSAgICAgIGNhc2UgT0xpc3RUeXBlOiAgICAgICAgICAgIHsgb0xpc3Quc2V0VHlwZShzdHIp
OyByZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6aXNJbmRleFNldHRl
cihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBE
T006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxJc0luZGV4RWxlbWVudEltcGwmIGlzaW5k
ZXggPSAqc3RhdGljX2Nhc3Q8SFRNTElzSW5kZXhFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAg
aWYgKHRva2VuID09IElzSW5kZXhQcm9tcHQpCisgICAgICAgIGlzaW5kZXguc2V0UHJvbXB0KHN0
cik7Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OnN0eWxlU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIp
Cit7CisgICAgSFRNTFN0eWxlRWxlbWVudEltcGwmIHN0eWxlID0gKnN0YXRpY19jYXN0PEhUTUxT
dHlsZUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAg
IGNhc2UgU3R5bGVEaXNhYmxlZDogICAgICAgIHsgc3R5bGUuc2V0RGlzYWJsZWQodmFsdWUudG9C
b29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgU3R5bGVNZWRpYTogICAgICAg
ICAgIHsgc3R5bGUuc2V0TWVkaWEoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgU3R5bGVU
eXBlOiAgICAgICAgICAgIHsgc3R5bGUuc2V0VHlwZShzdHIpOyByZXR1cm47IH0KICAgICB9Ci0g
ICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9ETDogewotICAgICAgSFRNTERMaXN0RWxlbWVudEltcGwg
JmRMaXN0ID0gc3RhdGljX2Nhc3Q8SFRNTERMaXN0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0g
ICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIERMaXN0Q29tcGFjdDogICAgICAgICB7
IGRMaXN0LnNldENvbXBhY3QodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAg
ICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OmJvZHlTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikK
K3sKKyAgICBIVE1MQm9keUVsZW1lbnRJbXBsJiBib2R5ID0gKnN0YXRpY19jYXN0PEhUTUxCb2R5
RWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2Fz
ZSBCb2R5QUxpbms6ICAgICAgICAgICB7IGJvZHkuc2V0QUxpbmsoc3RyKTsgcmV0dXJuOyB9Cisg
ICAgICAgIGNhc2UgQm9keUJhY2tncm91bmQ6ICAgICAgeyBib2R5LnNldEJhY2tncm91bmQoc3Ry
KTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQm9keUJnQ29sb3I6ICAgICAgICAgeyBib2R5LnNl
dEJnQ29sb3Ioc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQm9keUxpbms6ICAgICAgICAg
ICAgeyBib2R5LnNldExpbmsoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQm9keVRleHQ6
ICAgICAgICAgICAgeyBib2R5LnNldFRleHQoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2Ug
Qm9keVZMaW5rOiAgICAgICAgICAgeyBib2R5LnNldFZMaW5rKHN0cik7IHJldHVybjsgfQorICAg
ICAgICBjYXNlIEJvZHlTY3JvbGxMZWZ0OgorICAgICAgICBjYXNlIEJvZHlTY3JvbGxUb3A6IHsK
KyAgICAgICAgICAgIFFTY3JvbGxWaWV3KiBzdmlldyA9IGJvZHkub3duZXJEb2N1bWVudCgpLT52
aWV3KCk7CisgICAgICAgICAgICBpZiAoc3ZpZXcpIHsKKyAgICAgICAgICAgICAgICAvLyBVcGRh
dGUgdGhlIGRvY3VtZW50J3MgbGF5b3V0IGJlZm9yZSB3ZSBjb21wdXRlIHRoZXNlIGF0dHJpYnV0
ZXMuCisgICAgICAgICAgICAgICAgaWYgKERvY3VtZW50SW1wbCogZG9jID0gYm9keS5nZXREb2N1
bWVudCgpKQorICAgICAgICAgICAgICAgICAgICBkb2MtPnVwZGF0ZUxheW91dElnbm9yZVBlbmRp
bmdTdHlsZXNoZWV0cygpOworICAgICAgICAgICAgICAgIGlmICh0b2tlbiA9PSBCb2R5U2Nyb2xs
TGVmdCkKKyAgICAgICAgICAgICAgICAgICAgc3ZpZXctPnNldENvbnRlbnRzUG9zKHZhbHVlLnRv
SW50MzIoZXhlYyksIHN2aWV3LT5jb250ZW50c1koKSk7CisgICAgICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgICAgICBzdmlldy0+c2V0Q29udGVudHNQb3Moc3ZpZXctPmNvbnRlbnRz
WCgpLCB2YWx1ZS50b0ludDMyKGV4ZWMpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0RJUjogewot
ICAgICAgSFRNTERpcmVjdG9yeUVsZW1lbnRJbXBsICZkaXJlY3RvcnkgPSBzdGF0aWNfY2FzdDxI
VE1MRGlyZWN0b3J5RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2Vu
KSB7Ci0gICAgICBjYXNlIERpcmVjdG9yeUNvbXBhY3Q6ICAgICB7IGRpcmVjdG9yeS5zZXRDb21w
YWN0KHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQotICAgICAgfQorfQorCit2b2lk
IEhUTUxFbGVtZW50Ojpmb3JtU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25z
dCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTEZv
cm1FbGVtZW50SW1wbCYgZm9ybSA9ICpzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnRJbXBsKj4o
aW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIC8vIHJlYWQtb25seTogZWxl
bWVudHMKKyAgICAgICAgLy8gcmVhZC1vbmx5OiBsZW5ndGgKKyAgICAgICAgY2FzZSBGb3JtTmFt
ZTogICAgICAgICAgICB7IGZvcm0uc2V0TmFtZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2Fz
ZSBGb3JtQWNjZXB0Q2hhcnNldDogICB7IGZvcm0uc2V0QWNjZXB0Q2hhcnNldChzdHIpOyByZXR1
cm47IH0KKyAgICAgICAgY2FzZSBGb3JtQWN0aW9uOiAgICAgICAgICB7IGZvcm0uc2V0QWN0aW9u
KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEZvcm1FbmNUeXBlOiAgICAgICAgIHsgZm9y
bS5zZXRFbmN0eXBlKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEZvcm1NZXRob2Q6ICAg
ICAgICAgIHsgZm9ybS5zZXRNZXRob2Qoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgRm9y
bVRhcmdldDogICAgICAgICAgeyBmb3JtLnNldFRhcmdldChzdHIpOyByZXR1cm47IH0KICAgICB9
Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9NRU5VOiB7Ci0gICAgICBIVE1MTWVudUVsZW1lbnRJ
bXBsICZtZW51ID0gc3RhdGljX2Nhc3Q8SFRNTE1lbnVFbGVtZW50SW1wbCAmPihlbGVtZW50KTsK
LSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgTWVudUNvbXBhY3Q6ICAgICAgICAg
eyBtZW51LnNldENvbXBhY3QodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAg
ICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OnNlbGVjdFNldHRlcihFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3Ry
KQoreworICAgIEhUTUxTZWxlY3RFbGVtZW50SW1wbCYgc2VsZWN0ID0gKnN0YXRpY19jYXN0PEhU
TUxTZWxlY3RFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAg
ICAgICAvLyByZWFkLW9ubHk6IHR5cGUKKyAgICAgICAgY2FzZSBTZWxlY3RTZWxlY3RlZEluZGV4
OiAgIHsgc2VsZWN0LnNldFNlbGVjdGVkSW5kZXgodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVy
bjsgfQorICAgICAgICBjYXNlIFNlbGVjdFZhbHVlOiAgICAgICAgICAgeyBzZWxlY3Quc2V0VmFs
dWUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgU2VsZWN0TGVuZ3RoOiAgICAgICAgICB7
IC8vIHJlYWQtb25seSBhY2NvcmRpbmcgdG8gdGhlIE5TIHNwZWMsIGJ1dCB3ZWJwYWdlcyBuZWVk
IGl0IHdyaXRlYWJsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBP
YmplY3QgY29sbCA9IE9iamVjdDo6ZHluYW1pY0Nhc3QoIGdldFNlbGVjdEhUTUxDb2xsZWN0aW9u
KGV4ZWMsIHNlbGVjdC5vcHRpb25zSFRNTENvbGxlY3Rpb24oKS5nZXQoKSwgJnNlbGVjdCkgKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhY29sbC5pc051
bGwoKSApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbC5w
dXQoZXhlYyxsZW5ndGhQcm9wZXJ0eU5hbWUsdmFsdWUpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgIC8vIHJlYWQtb25seTogZm9ybQorICAgICAgICAvLyByZWFkLW9u
bHk6IG9wdGlvbnMKKyAgICAgICAgY2FzZSBTZWxlY3REaXNhYmxlZDogICAgICAgIHsgc2VsZWN0
LnNldERpc2FibGVkKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBj
YXNlIFNlbGVjdE11bHRpcGxlOiAgICAgICAgeyBzZWxlY3Quc2V0TXVsdGlwbGUodmFsdWUudG9C
b29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgU2VsZWN0TmFtZTogICAgICAg
ICAgICB7IHNlbGVjdC5zZXROYW1lKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFNlbGVj
dFNpemU6ICAgICAgICAgICAgeyBzZWxlY3Quc2V0U2l6ZSh2YWx1ZS50b0ludDMyKGV4ZWMpKTsg
cmV0dXJuOyB9CisgICAgICAgIGNhc2UgU2VsZWN0VGFiSW5kZXg6ICAgICAgICB7IHNlbGVjdC5z
ZXRUYWJJbmRleCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CiAgICAgfQotICAgIGJy
ZWFrOwotICAgIGNhc2UgSURfTEk6IHsKLSAgICAgIEhUTUxMSUVsZW1lbnRJbXBsICZsaSA9IHN0
YXRpY19jYXN0PEhUTUxMSUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0
b2tlbikgewotICAgICAgY2FzZSBMSVR5cGU6ICAgICAgICAgICAgeyBsaS5zZXRUeXBlKHN0cik7
IHJldHVybjsgfQotICAgICAgY2FzZSBMSVZhbHVlOiAgICAgICAgICAgeyBsaS5zZXRWYWx1ZSh2
YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICB9Cit9CisKK3ZvaWQgSFRNTEVs
ZW1lbnQ6Om9wdEdyb3VwU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBW
YWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTE9wdEdy
b3VwRWxlbWVudEltcGwmIG9wdGdyb3VwID0gKnN0YXRpY19jYXN0PEhUTUxPcHRHcm91cEVsZW1l
bnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgT3B0
R3JvdXBEaXNhYmxlZDogICAgICAgIHsgb3B0Z3JvdXAuc2V0RGlzYWJsZWQodmFsdWUudG9Cb29s
ZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgT3B0R3JvdXBMYWJlbDogICAgICAg
ICAgIHsgb3B0Z3JvdXAuc2V0TGFiZWwoc3RyKTsgcmV0dXJuOyB9CiAgICAgfQotICAgIGJyZWFr
OwotICAgIGNhc2UgSURfRElWOiB7Ci0gICAgICBIVE1MRGl2RWxlbWVudEltcGwgJmRpdiA9IHN0
YXRpY19jYXN0PEhUTUxEaXZFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAo
dG9rZW4pIHsKLSAgICAgIGNhc2UgRGl2QWxpZ246ICAgICAgICAgICB7IGRpdi5zZXRBbGlnbihz
dHIpOyByZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6b3B0aW9uU2V0
dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0
IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgRE9NRXhjZXB0aW9uVHJhbnNsYXRvciBleGNl
cHRpb24oZXhlYyk7CisgICAgSFRNTE9wdGlvbkVsZW1lbnRJbXBsJiBvcHRpb24gPSAqc3RhdGlj
X2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2Vu
KSB7CisgICAgICAgIC8vIHJlYWQtb25seTogZm9ybQorICAgICAgICBjYXNlIE9wdGlvbkRlZmF1
bHRTZWxlY3RlZDogeyBvcHRpb24uc2V0RGVmYXVsdFNlbGVjdGVkKHZhbHVlLnRvQm9vbGVhbihl
eGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIE9wdGlvblRleHQ6ICAgICAgICAgICAgeyBv
cHRpb24uc2V0VGV4dChzdHIsIGV4Y2VwdGlvbik7IHJldHVybjsgfQorICAgICAgICAvLyByZWFk
LW9ubHk6IGluZGV4CisgICAgICAgIGNhc2UgT3B0aW9uRGlzYWJsZWQ6ICAgICAgICB7IG9wdGlv
bi5zZXREaXNhYmxlZCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAg
Y2FzZSBPcHRpb25MYWJlbDogICAgICAgICAgIHsgb3B0aW9uLnNldExhYmVsKHN0cik7IHJldHVy
bjsgfQorICAgICAgICBjYXNlIE9wdGlvblNlbGVjdGVkOiAgICAgICAgeyBvcHRpb24uc2V0U2Vs
ZWN0ZWQodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgT3B0
aW9uVmFsdWU6ICAgICAgICAgICB7IG9wdGlvbi5zZXRWYWx1ZShzdHIpOyByZXR1cm47IH0KICAg
ICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9QOiB7Ci0gICAgICBIVE1MUGFyYWdyYXBoRWxl
bWVudEltcGwgJnBhcmFncmFwaCA9IHN0YXRpY19jYXN0PEhUTUxQYXJhZ3JhcGhFbGVtZW50SW1w
bCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgUGFyYWdy
YXBoQWxpZ246ICAgICB7IHBhcmFncmFwaC5zZXRBbGlnbihzdHIpOyByZXR1cm47IH0KLSAgICAg
IH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6aW5wdXRTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikK
K3sKKyAgICBIVE1MSW5wdXRFbGVtZW50SW1wbCYgaW5wdXQgPSAqc3RhdGljX2Nhc3Q8SFRNTElu
cHV0RWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAg
Y2FzZSBJbnB1dERlZmF1bHRWYWx1ZTogICAgeyBpbnB1dC5zZXREZWZhdWx0VmFsdWUoc3RyKTsg
cmV0dXJuOyB9CisgICAgICAgIGNhc2UgSW5wdXREZWZhdWx0Q2hlY2tlZDogIHsgaW5wdXQuc2V0
RGVmYXVsdENoZWNrZWQodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAg
IC8vIHJlYWQtb25seTogZm9ybQorICAgICAgICBjYXNlIElucHV0QWNjZXB0OiAgICAgICAgICB7
IGlucHV0LnNldEFjY2VwdChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJbnB1dEFjY2Vz
c0tleTogICAgICAgeyBpbnB1dC5zZXRBY2Nlc3NLZXkoc3RyKTsgcmV0dXJuOyB9CisgICAgICAg
IGNhc2UgSW5wdXRBbGlnbjogICAgICAgICAgIHsgaW5wdXQuc2V0QWxpZ24oc3RyKTsgcmV0dXJu
OyB9CisgICAgICAgIGNhc2UgSW5wdXRBbHQ6ICAgICAgICAgICAgIHsgaW5wdXQuc2V0QWx0KHN0
cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIElucHV0Q2hlY2tlZDogICAgICAgICB7IGlucHV0
LnNldENoZWNrZWQodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNh
c2UgSW5wdXREaXNhYmxlZDogICAgICAgIHsgaW5wdXQuc2V0RGlzYWJsZWQodmFsdWUudG9Cb29s
ZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgSW5wdXRNYXhMZW5ndGg6ICAgICAg
IHsgaW5wdXQuc2V0TWF4TGVuZ3RoKHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KKyAg
ICAgICAgY2FzZSBJbnB1dE5hbWU6ICAgICAgICAgICAgeyBpbnB1dC5zZXROYW1lKHN0cik7IHJl
dHVybjsgfQorICAgICAgICBjYXNlIElucHV0UmVhZE9ubHk6ICAgICAgICB7IGlucHV0LnNldFJl
YWRPbmx5KHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIElu
cHV0U2l6ZTogICAgICAgICAgICB7IGlucHV0LnNldFNpemUoc3RyKTsgcmV0dXJuOyB9CisgICAg
ICAgIGNhc2UgSW5wdXRTcmM6ICAgICAgICAgICAgIHsgaW5wdXQuc2V0U3JjKHN0cik7IHJldHVy
bjsgfQorICAgICAgICBjYXNlIElucHV0VGFiSW5kZXg6ICAgICAgICB7IGlucHV0LnNldFRhYklu
ZGV4KHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJbnB1dFR5
cGU6ICAgICAgICAgICAgeyBpbnB1dC5zZXRUeXBlKHN0cik7IHJldHVybjsgfQorICAgICAgICBj
YXNlIElucHV0VXNlTWFwOiAgICAgICAgICB7IGlucHV0LnNldFVzZU1hcChzdHIpOyByZXR1cm47
IH0KKyAgICAgICAgY2FzZSBJbnB1dFZhbHVlOiAgICAgICAgICAgeyBpbnB1dC5zZXRWYWx1ZShz
dHIpOyByZXR1cm47IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9IMToKLSAgICBj
YXNlIElEX0gyOgotICAgIGNhc2UgSURfSDM6Ci0gICAgY2FzZSBJRF9INDoKLSAgICBjYXNlIElE
X0g1OgotICAgIGNhc2UgSURfSDY6IHsKLSAgICAgIEhUTUxIZWFkaW5nRWxlbWVudEltcGwgJmhl
YWRpbmcgPSBzdGF0aWNfY2FzdDxIVE1MSGVhZGluZ0VsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwot
ICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgY2FzZSBIZWFkaW5nQWxpZ246ICAgICAgICAg
eyBoZWFkaW5nLnNldEFsaWduKHN0cik7IHJldHVybjsgfQotICAgICAgfQorfQorCit2b2lkIEhU
TUxFbGVtZW50Ojp0ZXh0QXJlYVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29u
c3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxU
ZXh0QXJlYUVsZW1lbnRJbXBsJiB0ZXh0YXJlYSA9ICpzdGF0aWNfY2FzdDxIVE1MVGV4dEFyZWFF
bGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNl
IFRleHRBcmVhRGVmYXVsdFZhbHVlOiAgICB7IHRleHRhcmVhLnNldERlZmF1bHRWYWx1ZShzdHIp
OyByZXR1cm47IH0KKyAgICAgICAgLy8gcmVhZC1vbmx5OiBmb3JtCisgICAgICAgIGNhc2UgVGV4
dEFyZWFBY2Nlc3NLZXk6ICAgICAgIHsgdGV4dGFyZWEuc2V0QWNjZXNzS2V5KHN0cik7IHJldHVy
bjsgfQorICAgICAgICBjYXNlIFRleHRBcmVhQ29sczogICAgICAgICAgICB7IHRleHRhcmVhLnNl
dENvbHModmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRleHRB
cmVhRGlzYWJsZWQ6ICAgICAgICB7IHRleHRhcmVhLnNldERpc2FibGVkKHZhbHVlLnRvQm9vbGVh
bihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRleHRBcmVhTmFtZTogICAgICAgICAg
ICB7IHRleHRhcmVhLnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGV4dEFy
ZWFSZWFkT25seTogICAgICAgIHsgdGV4dGFyZWEuc2V0UmVhZE9ubHkodmFsdWUudG9Cb29sZWFu
KGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGV4dEFyZWFSb3dzOiAgICAgICAgICAg
IHsgdGV4dGFyZWEuc2V0Um93cyh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAg
ICAgIGNhc2UgVGV4dEFyZWFUYWJJbmRleDogICAgICAgIHsgdGV4dGFyZWEuc2V0VGFiSW5kZXgo
dmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQorICAgICAgICAvLyByZWFkLW9ubHk6IHR5
cGUKKyAgICAgICAgY2FzZSBUZXh0QXJlYVZhbHVlOiAgICAgICAgICAgeyB0ZXh0YXJlYS5zZXRW
YWx1ZShzdHIpOyByZXR1cm47IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9CTE9D
S1FVT1RFOiB7Ci0gICAgICBIVE1MQmxvY2txdW90ZUVsZW1lbnRJbXBsICZibG9ja3F1b3RlID0g
c3RhdGljX2Nhc3Q8SFRNTEJsb2NrcXVvdGVFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAg
IHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgQmxvY2tRdW90ZUNpdGU6ICAgICAgIHsgYmxv
Y2txdW90ZS5zZXRDaXRlKHN0cik7IHJldHVybjsgfQotICAgICAgfQorfQorCit2b2lkIEhUTUxF
bGVtZW50OjpidXR0b25TZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZh
bHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MQnV0dG9u
RWxlbWVudEltcGwmIGJ1dHRvbiA9ICpzdGF0aWNfY2FzdDxIVE1MQnV0dG9uRWxlbWVudEltcGwq
PihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgLy8gcmVhZC1vbmx5OiBm
b3JtCisgICAgICAgIGNhc2UgQnV0dG9uQWNjZXNzS2V5OiAgICAgICB7IGJ1dHRvbi5zZXRBY2Nl
c3NLZXkoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQnV0dG9uRGlzYWJsZWQ6ICAgICAg
ICB7IGJ1dHRvbi5zZXREaXNhYmxlZCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0K
KyAgICAgICAgY2FzZSBCdXR0b25OYW1lOiAgICAgICAgICAgIHsgYnV0dG9uLnNldE5hbWUoc3Ry
KTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQnV0dG9uVGFiSW5kZXg6ICAgICAgICB7IGJ1dHRv
bi5zZXRUYWJJbmRleCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIC8v
IHJlYWQtb25seTogdHlwZQorICAgICAgICBjYXNlIEJ1dHRvblZhbHVlOiAgICAgICAgICAgeyBi
dXR0b24uc2V0VmFsdWUoc3RyKTsgcmV0dXJuOyB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNh
c2UgSURfUTogewotICAgICAgSFRNTFF1b3RlRWxlbWVudEltcGwgJnF1b3RlID0gc3RhdGljX2Nh
c3Q8SFRNTFF1b3RlRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2Vu
KSB7Ci0gICAgICBjYXNlIFF1b3RlQ2l0ZTogICAgICAgICAgICB7IHF1b3RlLnNldENpdGUoc3Ry
KTsgcmV0dXJuOyB9Ci0gICAgICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OmxhYmVsU2V0dGVy
KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERP
TTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTExhYmVsRWxlbWVudEltcGwmIGxhYmVsID0g
KnN0YXRpY19jYXN0PEhUTUxMYWJlbEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2gg
KHRva2VuKSB7CisgICAgICAgIC8vIHJlYWQtb25seTogZm9ybQorICAgICAgICBjYXNlIExhYmVs
QWNjZXNzS2V5OiAgICAgICB7IGxhYmVsLnNldEFjY2Vzc0tleShzdHIpOyByZXR1cm47IH0KKyAg
ICAgICAgY2FzZSBMYWJlbEh0bWxGb3I6ICAgICAgICAgeyBsYWJlbC5zZXRIdG1sRm9yKHN0cik7
IHJldHVybjsgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX1BSRTogewotICAgICAg
SFRNTFByZUVsZW1lbnRJbXBsICZwcmUgPSBzdGF0aWNfY2FzdDxIVE1MUHJlRWxlbWVudEltcGwg
Jj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIFByZVdpZHRo
OiAgICAgICAgICAgeyBwcmUuc2V0V2lkdGgodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsg
fQotICAgICAgfQorfQorCit2b2lkIEhUTUxFbGVtZW50OjpsZWdlbmRTZXR0ZXIoRXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJp
bmcmIHN0cikKK3sKKyAgICBIVE1MTGVnZW5kRWxlbWVudEltcGwmIGxlZ2VuZCA9ICpzdGF0aWNf
Y2FzdDxIVE1MTGVnZW5kRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4p
IHsKKyAgICAgICAgLy8gcmVhZC1vbmx5OiBmb3JtCisgICAgICAgIGNhc2UgTGVnZW5kQWNjZXNz
S2V5OiAgICAgICB7IGxlZ2VuZC5zZXRBY2Nlc3NLZXkoc3RyKTsgcmV0dXJuOyB9CisgICAgICAg
IGNhc2UgTGVnZW5kQWxpZ246ICAgICAgICAgICB7IGxlZ2VuZC5zZXRBbGlnbihzdHIpOyByZXR1
cm47IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9CUjogewotICAgICAgSFRNTEJS
RWxlbWVudEltcGwgJmJyID0gc3RhdGljX2Nhc3Q8SFRNTEJSRWxlbWVudEltcGwgJj4oZWxlbWVu
dCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIEJSQ2xlYXI6ICAgICAgICAg
ICB7IGJyLnNldENsZWFyKHN0cik7IHJldHVybjsgfQotICAgICAgfQorfQorCit2b2lkIEhUTUxF
bGVtZW50Ojp1TGlzdFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFs
dWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxVTGlzdEVs
ZW1lbnRJbXBsJiB1TGlzdCA9ICpzdGF0aWNfY2FzdDxIVE1MVUxpc3RFbGVtZW50SW1wbCo+KGlt
cGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNlIFVMaXN0Q29tcGFjdDog
ICAgICAgICB7IHVMaXN0LnNldENvbXBhY3QodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJu
OyB9CisgICAgICAgIGNhc2UgVUxpc3RUeXBlOiAgICAgICAgICAgIHsgdUxpc3Quc2V0VHlwZShz
dHIpOyByZXR1cm47IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9CQVNFRk9OVDog
ewotICAgICAgSFRNTEJhc2VGb250RWxlbWVudEltcGwgJmJhc2VGb250ID0gc3RhdGljX2Nhc3Q8
SFRNTEJhc2VGb250RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2Vu
KSB7Ci0gICAgICBjYXNlIEJhc2VGb250Q29sb3I6ICAgICAgICAgICB7IGJhc2VGb250LnNldENv
bG9yKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBCYXNlRm9udEZhY2U6ICAgICAgICAgICAg
eyBiYXNlRm9udC5zZXRGYWNlKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBCYXNlRm9udFNp
emU6ICAgICAgICAgICAgeyBiYXNlRm9udC5zZXRTaXplKHN0cik7IHJldHVybjsgfQotICAgICAg
fQorfQorCit2b2lkIEhUTUxFbGVtZW50OjpvTGlzdFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQor
eworICAgIEhUTUxPTGlzdEVsZW1lbnRJbXBsJiBvTGlzdCA9ICpzdGF0aWNfY2FzdDxIVE1MT0xp
c3RFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICBj
YXNlIE9MaXN0Q29tcGFjdDogICAgICAgICB7IG9MaXN0LnNldENvbXBhY3QodmFsdWUudG9Cb29s
ZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgT0xpc3RTdGFydDogICAgICAgICAg
IHsgb0xpc3Quc2V0U3RhcnQodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQorICAgICAg
ICBjYXNlIE9MaXN0VHlwZTogICAgICAgICAgICB7IG9MaXN0LnNldFR5cGUoc3RyKTsgcmV0dXJu
OyB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfRk9OVDogewotICAgICAgSFRNTEZv
bnRFbGVtZW50SW1wbCAmZm9udCA9IHN0YXRpY19jYXN0PEhUTUxGb250RWxlbWVudEltcGwgJj4o
ZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIEZvbnRDb2xvcjog
ICAgICAgICAgIHsgZm9udC5zZXRDb2xvcihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgRm9u
dEZhY2U6ICAgICAgICAgICAgeyBmb250LnNldEZhY2Uoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBj
YXNlIEZvbnRTaXplOiAgICAgICAgICAgIHsgZm9udC5zZXRTaXplKHN0cik7IHJldHVybjsgfQot
ICAgICAgfQorfQorCit2b2lkIEhUTUxFbGVtZW50OjpkTGlzdFNldHRlcihFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYg
c3RyKQoreworICAgIEhUTUxETGlzdEVsZW1lbnRJbXBsJiBkTGlzdCA9ICpzdGF0aWNfY2FzdDxI
VE1MRExpc3RFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IERMaXN0Q29t
cGFjdCkKKyAgICAgICAgZExpc3Quc2V0Q29tcGFjdCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOwor
fQorCit2b2lkIEhUTUxFbGVtZW50OjpkaXJTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAg
ICBIVE1MRGlyZWN0b3J5RWxlbWVudEltcGwmIGRpcmVjdG9yeSA9ICpzdGF0aWNfY2FzdDxIVE1M
RGlyZWN0b3J5RWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIGlmICh0b2tlbiA9PSBEaXJlY3Rv
cnlDb21wYWN0KQorICAgICAgICBkaXJlY3Rvcnkuc2V0Q29tcGFjdCh2YWx1ZS50b0Jvb2xlYW4o
ZXhlYykpOworfQorCit2b2lkIEhUTUxFbGVtZW50OjptZW51U2V0dGVyKEV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBz
dHIpCit7CisgICAgSFRNTE1lbnVFbGVtZW50SW1wbCYgbWVudSA9ICpzdGF0aWNfY2FzdDxIVE1M
TWVudUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBpZiAodG9rZW4gPT0gTWVudUNvbXBhY3Qp
CisgICAgICAgIG1lbnUuc2V0Q29tcGFjdCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOworfQorCit2
b2lkIEhUTUxFbGVtZW50OjpsaVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29u
c3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxM
SUVsZW1lbnRJbXBsJiBsaSA9ICpzdGF0aWNfY2FzdDxIVE1MTElFbGVtZW50SW1wbCo+KGltcGwo
KSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNlIExJVHlwZTogICAgICAgICAg
ICB7IGxpLnNldFR5cGUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgTElWYWx1ZTogICAg
ICAgICAgIHsgbGkuc2V0VmFsdWUodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQogICAg
IH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0hSOiB7Ci0gICAgICBIVE1MSFJFbGVtZW50SW1w
bCAmaHIgPSBzdGF0aWNfY2FzdDxIVE1MSFJFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAg
IHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgSFJBbGlnbjogICAgICAgICAgIHsgaHIuc2V0
QWxpZ24oc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEhSTm9TaGFkZTogICAgICAgICB7IGhy
LnNldE5vU2hhZGUodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNl
IEhSU2l6ZTogICAgICAgICAgICB7IGhyLnNldFNpemUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBj
YXNlIEhSV2lkdGg6ICAgICAgICAgICB7IGhyLnNldFdpZHRoKHN0cik7IHJldHVybjsgfQotICAg
ICAgfQorfQorCit2b2lkIEhUTUxFbGVtZW50OjpkaXZTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikK
K3sKKyAgICBIVE1MRGl2RWxlbWVudEltcGwmIGRpdiA9ICpzdGF0aWNfY2FzdDxIVE1MRGl2RWxl
bWVudEltcGwqPihpbXBsKCkpOworICAgIGlmICh0b2tlbiA9PSBEaXZBbGlnbikKKyAgICAgICAg
ZGl2LnNldEFsaWduKHN0cik7Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OnBhcmFncmFwaFNldHRl
cihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBE
T006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxQYXJhZ3JhcGhFbGVtZW50SW1wbCYgcGFy
YWdyYXBoID0gKnN0YXRpY19jYXN0PEhUTUxQYXJhZ3JhcGhFbGVtZW50SW1wbCo+KGltcGwoKSk7
CisgICAgaWYgKHRva2VuID09IFBhcmFncmFwaEFsaWduKQorICAgICAgICBwYXJhZ3JhcGguc2V0
QWxpZ24oc3RyKTsKK30KKwordm9pZCBIVE1MRWxlbWVudDo6aGVhZGluZ1NldHRlcihFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0
cmluZyYgc3RyKQoreworICAgIEhUTUxIZWFkaW5nRWxlbWVudEltcGwmIGhlYWRpbmcgPSAqc3Rh
dGljX2Nhc3Q8SFRNTEhlYWRpbmdFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2Vu
ID09IEhlYWRpbmdBbGlnbikKKyAgICAgICAgaGVhZGluZy5zZXRBbGlnbihzdHIpOworfQorCit2
b2lkIEhUTUxFbGVtZW50OjpibG9ja1F1b3RlU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7Cisg
ICAgSFRNTEJsb2NrcXVvdGVFbGVtZW50SW1wbCYgYmxvY2tRdW90ZSA9ICpzdGF0aWNfY2FzdDxI
VE1MQmxvY2txdW90ZUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBpZiAodG9rZW4gPT0gQmxv
Y2tRdW90ZUNpdGUpCisgICAgICAgIGJsb2NrUXVvdGUuc2V0Q2l0ZShzdHIpOworfQorCit2b2lk
IEhUTUxFbGVtZW50OjpxdW90ZVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29u
c3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxR
dW90ZUVsZW1lbnRJbXBsJiBxdW90ZSA9ICpzdGF0aWNfY2FzdDxIVE1MUXVvdGVFbGVtZW50SW1w
bCo+KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IFF1b3RlQ2l0ZSkKKyAgICAgICAgcXVvdGUu
c2V0Q2l0ZShzdHIpOworfQorCit2b2lkIEhUTUxFbGVtZW50OjpwcmVTZXR0ZXIoRXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJp
bmcmIHN0cikKK3sKKyAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yICd3cmFwJyB3aGVuIHdo
aXRlLXNwYWNlOiBwcmUtd3JhcCBpcyBpbXBsZW1lbnRlZC4KKyAgICBIVE1MUHJlRWxlbWVudElt
cGwmIHByZSA9ICpzdGF0aWNfY2FzdDxIVE1MUHJlRWxlbWVudEltcGwqPihpbXBsKCkpOworICAg
IGlmICh0b2tlbiA9PSBQcmVXaWR0aCkKKyAgICAgICAgcHJlLnNldFdpZHRoKHZhbHVlLnRvSW50
MzIoZXhlYykpOworfQorCit2b2lkIEhUTUxFbGVtZW50OjpiclNldHRlcihFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYg
c3RyKQoreworICAgIEhUTUxCUkVsZW1lbnRJbXBsJiBiciA9ICpzdGF0aWNfY2FzdDxIVE1MQlJF
bGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IEJSQ2xlYXIpCisgICAgICAg
IGJyLnNldENsZWFyKHN0cik7Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OmJhc2VGb250U2V0dGVy
KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERP
TTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTEJhc2VGb250RWxlbWVudEltcGwmIGJhc2VG
b250ID0gKnN0YXRpY19jYXN0PEhUTUxCYXNlRm9udEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAg
ICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgQmFzZUZvbnRDb2xvcjogICAgICAgICAg
IHsgYmFzZUZvbnQuc2V0Q29sb3Ioc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQmFzZUZv
bnRGYWNlOiAgICAgICAgICAgIHsgYmFzZUZvbnQuc2V0RmFjZShzdHIpOyByZXR1cm47IH0KKyAg
ICAgICAgY2FzZSBCYXNlRm9udFNpemU6ICAgICAgICAgICAgeyBiYXNlRm9udC5zZXRTaXplKHN0
cik7IHJldHVybjsgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0lOUzoKLSAgICBj
YXNlIElEX0RFTDogewotICAgICAgSFRNTE1vZEVsZW1lbnRJbXBsICZtb2QgPSBzdGF0aWNfY2Fz
dDxIVE1MTW9kRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7
Ci0gICAgICBjYXNlIE1vZENpdGU6ICAgICAgICAgICAgeyBtb2Quc2V0Q2l0ZShzdHIpOyByZXR1
cm47IH0KLSAgICAgIGNhc2UgTW9kRGF0ZVRpbWU6ICAgICAgICB7IG1vZC5zZXREYXRlVGltZShz
dHIpOyByZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6Zm9udFNldHRl
cihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBE
T006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxGb250RWxlbWVudEltcGwmIGZvbnQgPSAq
c3RhdGljX2Nhc3Q8SFRNTEZvbnRFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0
b2tlbikgeworICAgICAgICBjYXNlIEZvbnRDb2xvcjogICAgICAgICAgIHsgZm9udC5zZXRDb2xv
cihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBGb250RmFjZTogICAgICAgICAgICB7IGZv
bnQuc2V0RmFjZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBGb250U2l6ZTogICAgICAg
ICAgICB7IGZvbnQuc2V0U2l6ZShzdHIpOyByZXR1cm47IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0g
ICAgY2FzZSBJRF9BOiB7Ci0gICAgICBIVE1MQW5jaG9yRWxlbWVudEltcGwgJmFuY2hvciA9IHN0
YXRpY19jYXN0PEhUTUxBbmNob3JFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRj
aCAodG9rZW4pIHsKLSAgICAgIGNhc2UgQW5jaG9yQWNjZXNzS2V5OiAgICAgICB7IGFuY2hvci5z
ZXRBY2Nlc3NLZXkoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEFuY2hvckNoYXJzZXQ6ICAg
ICAgICAgeyBhbmNob3Iuc2V0Q2hhcnNldChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQW5j
aG9yQ29vcmRzOiAgICAgICAgICB7IGFuY2hvci5zZXRDb29yZHMoc3RyKTsgcmV0dXJuOyB9Ci0g
ICAgICBjYXNlIEFuY2hvckhyZWY6ICAgICAgICAgICAgeyBhbmNob3Iuc2V0SHJlZihzdHIpOyBy
ZXR1cm47IH0KLSAgICAgIGNhc2UgQW5jaG9ySHJlZkxhbmc6ICAgICAgICB7IGFuY2hvci5zZXRI
cmVmbGFuZyhzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQW5jaG9yTmFtZTogICAgICAgICAg
ICB7IGFuY2hvci5zZXROYW1lKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBBbmNob3JSZWw6
ICAgICAgICAgICAgIHsgYW5jaG9yLnNldFJlbChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2Ug
QW5jaG9yUmV2OiAgICAgICAgICAgICB7IGFuY2hvci5zZXRSZXYoc3RyKTsgcmV0dXJuOyB9Ci0g
ICAgICBjYXNlIEFuY2hvclNoYXBlOiAgICAgICAgICAgeyBhbmNob3Iuc2V0U2hhcGUoc3RyKTsg
cmV0dXJuOyB9Ci0gICAgICBjYXNlIEFuY2hvclRhYkluZGV4OiAgICAgICAgeyBhbmNob3Iuc2V0
VGFiSW5kZXgodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBBbmNo
b3JUYXJnZXQ6ICAgICAgICAgIHsgYW5jaG9yLnNldFRhcmdldChzdHIpOyByZXR1cm47IH0KLSAg
ICAgIGNhc2UgQW5jaG9yVHlwZTogICAgICAgICAgICB7IGFuY2hvci5zZXRUeXBlKHN0cik7IHJl
dHVybjsgfQotICAgICAgfQorfQorCit2b2lkIEhUTUxFbGVtZW50OjpoclNldHRlcihFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0
cmluZyYgc3RyKQoreworICAgIEhUTUxIUkVsZW1lbnRJbXBsJiBociA9ICpzdGF0aWNfY2FzdDxI
VE1MSFJFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAg
ICBjYXNlIEhSQWxpZ246ICAgICAgICAgICB7IGhyLnNldEFsaWduKHN0cik7IHJldHVybjsgfQor
ICAgICAgICBjYXNlIEhSTm9TaGFkZTogICAgICAgICB7IGhyLnNldE5vU2hhZGUodmFsdWUudG9C
b29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgSFJTaXplOiAgICAgICAgICAg
IHsgaHIuc2V0U2l6ZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBIUldpZHRoOiAgICAg
ICAgICAgeyBoci5zZXRXaWR0aChzdHIpOyByZXR1cm47IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0g
ICAgY2FzZSBJRF9JTUc6IHsKLSAgICAgIEhUTUxJbWFnZUVsZW1lbnRJbXBsICZpbWFnZSA9IHN0
YXRpY19jYXN0PEhUTUxJbWFnZUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNo
ICh0b2tlbikgewotICAgICAgY2FzZSBJbWFnZU5hbWU6ICAgICAgICAgICAgeyBpbWFnZS5zZXRO
YW1lKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBJbWFnZUFsaWduOiAgICAgICAgICAgeyBp
bWFnZS5zZXRBbGlnbihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSW1hZ2VBbHQ6ICAgICAg
ICAgICAgIHsgaW1hZ2Uuc2V0QWx0KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBJbWFnZUJv
cmRlcjogICAgICAgICAgeyBpbWFnZS5zZXRCb3JkZXIodmFsdWUudG9JbnQzMihleGVjKSk7IHJl
dHVybjsgfQotICAgICAgY2FzZSBJbWFnZUhlaWdodDogICAgICAgICAgeyBpbWFnZS5zZXRIZWln
aHQodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBJbWFnZUhzcGFj
ZTogICAgICAgICAgeyBpbWFnZS5zZXRIc3BhY2UodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVy
bjsgfQotICAgICAgY2FzZSBJbWFnZUlzTWFwOiAgICAgICAgICAgeyBpbWFnZS5zZXRJc01hcCh2
YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSW1hZ2VMb25nRGVz
YzogICAgICAgIHsgaW1hZ2Uuc2V0TG9uZ0Rlc2Moc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNl
IEltYWdlU3JjOiAgICAgICAgICAgICB7IGltYWdlLnNldFNyYyhzdHIpOyByZXR1cm47IH0KLSAg
ICAgIGNhc2UgSW1hZ2VVc2VNYXA6ICAgICAgICAgIHsgaW1hZ2Uuc2V0VXNlTWFwKHN0cik7IHJl
dHVybjsgfQotICAgICAgY2FzZSBJbWFnZVZzcGFjZTogICAgICAgICAgeyBpbWFnZS5zZXRWc3Bh
Y2UodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBJbWFnZVdpZHRo
OiAgICAgICAgICAgeyBpbWFnZS5zZXRXaWR0aCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJu
OyB9Ci0gICAgICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6Om1vZFNldHRlcihFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmlu
ZyYgc3RyKQoreworICAgIEhUTUxNb2RFbGVtZW50SW1wbCYgbW9kID0gKnN0YXRpY19jYXN0PEhU
TUxNb2RFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAg
ICBjYXNlIE1vZENpdGU6ICAgICAgICAgICAgeyBtb2Quc2V0Q2l0ZShzdHIpOyByZXR1cm47IH0K
KyAgICAgICAgY2FzZSBNb2REYXRlVGltZTogICAgICAgIHsgbW9kLnNldERhdGVUaW1lKHN0cik7
IHJldHVybjsgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX09CSkVDVDogewotICAg
ICAgSFRNTE9iamVjdEVsZW1lbnRJbXBsICZvYmplY3QgPSBzdGF0aWNfY2FzdDxIVE1MT2JqZWN0
RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICAv
LyByZWFkLW9ubHk6IGZvcm0KLSAgICAgIGNhc2UgT2JqZWN0Q29kZTogICAgICAgICAgICAgICAg
IHsgb2JqZWN0LnNldENvZGUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIE9iamVjdEFsaWdu
OiAgICAgICAgICAgeyBvYmplY3Quc2V0QWxpZ24oc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNl
IE9iamVjdEFyY2hpdmU6ICAgICAgICAgeyBvYmplY3Quc2V0QXJjaGl2ZShzdHIpOyByZXR1cm47
IH0KLSAgICAgIGNhc2UgT2JqZWN0Qm9yZGVyOiAgICAgICAgICB7IG9iamVjdC5zZXRCb3JkZXIo
c3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIE9iamVjdENvZGVCYXNlOiAgICAgICAgeyBvYmpl
Y3Quc2V0Q29kZUJhc2Uoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIE9iamVjdENvZGVUeXBl
OiAgICAgICAgeyBvYmplY3Quc2V0Q29kZVR5cGUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICAvLyBy
ZWFkLW9ubHk6IE9iamVjdENvbnRlbnREb2N1bWVudAotICAgICAgY2FzZSBPYmplY3REYXRhOiAg
ICAgICAgICAgIHsgb2JqZWN0LnNldERhdGEoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIE9i
amVjdERlY2xhcmU6ICAgICAgICAgeyBvYmplY3Quc2V0RGVjbGFyZSh2YWx1ZS50b0Jvb2xlYW4o
ZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgT2JqZWN0SGVpZ2h0OiAgICAgICAgICB7IG9i
amVjdC5zZXRIZWlnaHQoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIE9iamVjdEhzcGFjZTog
ICAgICAgICAgeyBvYmplY3Quc2V0SHNwYWNlKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBP
YmplY3ROYW1lOiAgICAgICAgICAgIHsgb2JqZWN0LnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9Ci0g
ICAgICBjYXNlIE9iamVjdFN0YW5kYnk6ICAgICAgICAgeyBvYmplY3Quc2V0U3RhbmRieShzdHIp
OyByZXR1cm47IH0KLSAgICAgIGNhc2UgT2JqZWN0VGFiSW5kZXg6ICAgICAgICB7IG9iamVjdC5z
ZXRUYWJJbmRleCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIE9i
amVjdFR5cGU6ICAgICAgICAgICAgeyBvYmplY3Quc2V0VHlwZShzdHIpOyByZXR1cm47IH0KLSAg
ICAgIGNhc2UgT2JqZWN0VXNlTWFwOiAgICAgICAgICB7IG9iamVjdC5zZXRVc2VNYXAoc3RyKTsg
cmV0dXJuOyB9Ci0gICAgICBjYXNlIE9iamVjdFZzcGFjZTogICAgICAgICAgeyBvYmplY3Quc2V0
VnNwYWNlKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBPYmplY3RXaWR0aDogICAgICAgICAg
IHsgb2JqZWN0LnNldFdpZHRoKHN0cik7IHJldHVybjsgfQotICAgICAgfQorfQorCit2b2lkIEhU
TUxFbGVtZW50OjphbmNob3JTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0
IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MQW5j
aG9yRWxlbWVudEltcGwmIGFuY2hvciA9ICpzdGF0aWNfY2FzdDxIVE1MQW5jaG9yRWxlbWVudElt
cGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBBbmNob3JB
Y2Nlc3NLZXk6ICAgICAgIHsgYW5jaG9yLnNldEFjY2Vzc0tleShzdHIpOyByZXR1cm47IH0KKyAg
ICAgICAgY2FzZSBBbmNob3JDaGFyc2V0OiAgICAgICAgIHsgYW5jaG9yLnNldENoYXJzZXQoc3Ry
KTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQW5jaG9yQ29vcmRzOiAgICAgICAgICB7IGFuY2hv
ci5zZXRDb29yZHMoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQW5jaG9ySHJlZjogICAg
ICAgICAgICB7IGFuY2hvci5zZXRIcmVmKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEFu
Y2hvckhyZWZMYW5nOiAgICAgICAgeyBhbmNob3Iuc2V0SHJlZmxhbmcoc3RyKTsgcmV0dXJuOyB9
CisgICAgICAgIGNhc2UgQW5jaG9yTmFtZTogICAgICAgICAgICB7IGFuY2hvci5zZXROYW1lKHN0
cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEFuY2hvclJlbDogICAgICAgICAgICAgeyBhbmNo
b3Iuc2V0UmVsKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEFuY2hvclJldjogICAgICAg
ICAgICAgeyBhbmNob3Iuc2V0UmV2KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEFuY2hv
clNoYXBlOiAgICAgICAgICAgeyBhbmNob3Iuc2V0U2hhcGUoc3RyKTsgcmV0dXJuOyB9CisgICAg
ICAgIGNhc2UgQW5jaG9yVGFiSW5kZXg6ICAgICAgICB7IGFuY2hvci5zZXRUYWJJbmRleCh2YWx1
ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQW5jaG9yVGFyZ2V0OiAg
ICAgICAgICB7IGFuY2hvci5zZXRUYXJnZXQoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2Ug
QW5jaG9yVHlwZTogICAgICAgICAgICB7IGFuY2hvci5zZXRUeXBlKHN0cik7IHJldHVybjsgfQog
ICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX1BBUkFNOiB7Ci0gICAgICBIVE1MUGFyYW1F
bGVtZW50SW1wbCAmcGFyYW0gPSBzdGF0aWNfY2FzdDxIVE1MUGFyYW1FbGVtZW50SW1wbCAmPihl
bGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgUGFyYW1OYW1lOiAg
ICAgICAgICAgIHsgcGFyYW0uc2V0TmFtZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgUGFy
YW1UeXBlOiAgICAgICAgICAgIHsgcGFyYW0uc2V0VHlwZShzdHIpOyByZXR1cm47IH0KLSAgICAg
IGNhc2UgUGFyYW1WYWx1ZTogICAgICAgICAgIHsgcGFyYW0uc2V0VmFsdWUoc3RyKTsgcmV0dXJu
OyB9Ci0gICAgICBjYXNlIFBhcmFtVmFsdWVUeXBlOiAgICAgICB7IHBhcmFtLnNldFZhbHVlVHlw
ZShzdHIpOyByZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6aW1hZ2VT
ZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29u
c3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MSW1hZ2VFbGVtZW50SW1wbCYgaW1h
Z2UgPSAqc3RhdGljX2Nhc3Q8SFRNTEltYWdlRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3
aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBJbWFnZU5hbWU6ICAgICAgICAgICAgeyBpbWFn
ZS5zZXROYW1lKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEltYWdlQWxpZ246ICAgICAg
ICAgICB7IGltYWdlLnNldEFsaWduKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEltYWdl
QWx0OiAgICAgICAgICAgICB7IGltYWdlLnNldEFsdChzdHIpOyByZXR1cm47IH0KKyAgICAgICAg
Y2FzZSBJbWFnZUJvcmRlcjogICAgICAgICAgeyBpbWFnZS5zZXRCb3JkZXIodmFsdWUudG9JbnQz
MihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIEltYWdlSGVpZ2h0OiAgICAgICAgICB7
IGltYWdlLnNldEhlaWdodCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAg
IGNhc2UgSW1hZ2VIc3BhY2U6ICAgICAgICAgIHsgaW1hZ2Uuc2V0SHNwYWNlKHZhbHVlLnRvSW50
MzIoZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJbWFnZUlzTWFwOiAgICAgICAgICAg
eyBpbWFnZS5zZXRJc01hcCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KKyAgICAg
ICAgY2FzZSBJbWFnZUxvbmdEZXNjOiAgICAgICAgeyBpbWFnZS5zZXRMb25nRGVzYyhzdHIpOyBy
ZXR1cm47IH0KKyAgICAgICAgY2FzZSBJbWFnZVNyYzogICAgICAgICAgICAgeyBpbWFnZS5zZXRT
cmMoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgSW1hZ2VVc2VNYXA6ICAgICAgICAgIHsg
aW1hZ2Uuc2V0VXNlTWFwKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEltYWdlVnNwYWNl
OiAgICAgICAgICB7IGltYWdlLnNldFZzcGFjZSh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJu
OyB9CisgICAgICAgIGNhc2UgSW1hZ2VXaWR0aDogICAgICAgICAgIHsgaW1hZ2Uuc2V0V2lkdGgo
dmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBj
YXNlIElEX0FQUExFVDogewotICAgICAgSFRNTEFwcGxldEVsZW1lbnRJbXBsICZhcHBsZXQgPSBz
dGF0aWNfY2FzdDxIVE1MQXBwbGV0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0
Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIEFwcGxldEFsaWduOiAgICAgICAgICAgeyBhcHBsZXQu
c2V0QWxpZ24oc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEFwcGxldEFsdDogICAgICAgICAg
ICAgeyBhcHBsZXQuc2V0QWx0KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBBcHBsZXRBcmNo
aXZlOiAgICAgICAgIHsgYXBwbGV0LnNldEFyY2hpdmUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBj
YXNlIEFwcGxldENvZGU6ICAgICAgICAgICAgeyBhcHBsZXQuc2V0Q29kZShzdHIpOyByZXR1cm47
IH0KLSAgICAgIGNhc2UgQXBwbGV0Q29kZUJhc2U6ICAgICAgICB7IGFwcGxldC5zZXRDb2RlQmFz
ZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQXBwbGV0SGVpZ2h0OiAgICAgICAgICB7IGFw
cGxldC5zZXRIZWlnaHQoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEFwcGxldEhzcGFjZTog
ICAgICAgICAgeyBhcHBsZXQuc2V0SHNwYWNlKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBB
cHBsZXROYW1lOiAgICAgICAgICAgIHsgYXBwbGV0LnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9Ci0g
ICAgICBjYXNlIEFwcGxldE9iamVjdDogICAgICAgICAgeyBhcHBsZXQuc2V0T2JqZWN0KHN0cik7
IHJldHVybjsgfQotICAgICAgY2FzZSBBcHBsZXRWc3BhY2U6ICAgICAgICAgIHsgYXBwbGV0LnNl
dFZzcGFjZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQXBwbGV0V2lkdGg6ICAgICAgICAg
ICB7IGFwcGxldC5zZXRXaWR0aChzdHIpOyByZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBI
VE1MRWxlbWVudDo6b2JqZWN0U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25z
dCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTE9i
amVjdEVsZW1lbnRJbXBsJiBvYmplY3QgPSAqc3RhdGljX2Nhc3Q8SFRNTE9iamVjdEVsZW1lbnRJ
bXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIC8vIHJlYWQtb25s
eTogZm9ybQorICAgICAgICBjYXNlIE9iamVjdENvZGU6ICAgICAgICAgICAgeyBvYmplY3Quc2V0
Q29kZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBPYmplY3RBbGlnbjogICAgICAgICAg
IHsgb2JqZWN0LnNldEFsaWduKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIE9iamVjdEFy
Y2hpdmU6ICAgICAgICAgeyBvYmplY3Quc2V0QXJjaGl2ZShzdHIpOyByZXR1cm47IH0KKyAgICAg
ICAgY2FzZSBPYmplY3RCb3JkZXI6ICAgICAgICAgIHsgb2JqZWN0LnNldEJvcmRlcihzdHIpOyBy
ZXR1cm47IH0KKyAgICAgICAgY2FzZSBPYmplY3RDb2RlQmFzZTogICAgICAgIHsgb2JqZWN0LnNl
dENvZGVCYXNlKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIE9iamVjdENvZGVUeXBlOiAg
ICAgICAgeyBvYmplY3Quc2V0Q29kZVR5cGUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIC8vIHJl
YWQtb25seTogT2JqZWN0Q29udGVudERvY3VtZW50CisgICAgICAgIGNhc2UgT2JqZWN0RGF0YTog
ICAgICAgICAgICB7IG9iamVjdC5zZXREYXRhKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNl
IE9iamVjdERlY2xhcmU6ICAgICAgICAgeyBvYmplY3Quc2V0RGVjbGFyZSh2YWx1ZS50b0Jvb2xl
YW4oZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBPYmplY3RIZWlnaHQ6ICAgICAgICAg
IHsgb2JqZWN0LnNldEhlaWdodChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBPYmplY3RI
c3BhY2U6ICAgICAgICAgIHsgb2JqZWN0LnNldEhzcGFjZShzdHIpOyByZXR1cm47IH0KKyAgICAg
ICAgY2FzZSBPYmplY3ROYW1lOiAgICAgICAgICAgIHsgb2JqZWN0LnNldE5hbWUoc3RyKTsgcmV0
dXJuOyB9CisgICAgICAgIGNhc2UgT2JqZWN0U3RhbmRieTogICAgICAgICB7IG9iamVjdC5zZXRT
dGFuZGJ5KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIE9iamVjdFRhYkluZGV4OiAgICAg
ICAgeyBvYmplY3Quc2V0VGFiSW5kZXgodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQor
ICAgICAgICBjYXNlIE9iamVjdFR5cGU6ICAgICAgICAgICAgeyBvYmplY3Quc2V0VHlwZShzdHIp
OyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBPYmplY3RVc2VNYXA6ICAgICAgICAgIHsgb2JqZWN0
LnNldFVzZU1hcChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBPYmplY3RWc3BhY2U6ICAg
ICAgICAgIHsgb2JqZWN0LnNldFZzcGFjZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBP
YmplY3RXaWR0aDogICAgICAgICAgIHsgb2JqZWN0LnNldFdpZHRoKHN0cik7IHJldHVybjsgfQog
ICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX01BUDogewotICAgICAgSFRNTE1hcEVsZW1l
bnRJbXBsICZtYXAgPSBzdGF0aWNfY2FzdDxIVE1MTWFwRWxlbWVudEltcGwgJj4oZWxlbWVudCk7
Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICAvLyByZWFkLW9ubHk6IGFyZWFzCi0gICAg
ICBjYXNlIE1hcE5hbWU6ICAgICAgICAgICAgICAgICB7IG1hcC5zZXROYW1lKHN0cik7IHJldHVy
bjsgfQotICAgICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OnBhcmFtU2V0dGVyKEV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3Ry
aW5nJiBzdHIpCit7CisgICAgSFRNTFBhcmFtRWxlbWVudEltcGwmIHBhcmFtID0gKnN0YXRpY19j
YXN0PEhUTUxQYXJhbUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7
CisgICAgICAgIGNhc2UgUGFyYW1OYW1lOiAgICAgICAgICAgIHsgcGFyYW0uc2V0TmFtZShzdHIp
OyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBQYXJhbVR5cGU6ICAgICAgICAgICAgeyBwYXJhbS5z
ZXRUeXBlKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFBhcmFtVmFsdWU6ICAgICAgICAg
ICB7IHBhcmFtLnNldFZhbHVlKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFBhcmFtVmFs
dWVUeXBlOiAgICAgICB7IHBhcmFtLnNldFZhbHVlVHlwZShzdHIpOyByZXR1cm47IH0KICAgICB9
Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9BUkVBOiB7Ci0gICAgICBIVE1MQXJlYUVsZW1lbnRJ
bXBsICZhcmVhID0gc3RhdGljX2Nhc3Q8SFRNTEFyZWFFbGVtZW50SW1wbCAmPihlbGVtZW50KTsK
LSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgQXJlYUFjY2Vzc0tleTogICAgICAg
eyBhcmVhLnNldEFjY2Vzc0tleShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQXJlYUFsdDog
ICAgICAgICAgICAgeyBhcmVhLnNldEFsdChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQXJl
YUNvb3JkczogICAgICAgICAgeyBhcmVhLnNldENvb3JkcyhzdHIpOyByZXR1cm47IH0KLSAgICAg
IGNhc2UgQXJlYUhyZWY6ICAgICAgICAgICAgeyBhcmVhLnNldEhyZWYoc3RyKTsgcmV0dXJuOyB9
Ci0gICAgICBjYXNlIEFyZWFOb0hyZWY6ICAgICAgICAgIHsgYXJlYS5zZXROb0hyZWYodmFsdWUu
dG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEFyZWFTaGFwZTogICAgICAg
ICAgIHsgYXJlYS5zZXRTaGFwZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQXJlYVRhYklu
ZGV4OiAgICAgICAgeyBhcmVhLnNldFRhYkluZGV4KHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1
cm47IH0KLSAgICAgIGNhc2UgQXJlYVRhcmdldDogICAgICAgICAgeyBhcmVhLnNldFRhcmdldChz
dHIpOyByZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6YXBwbGV0U2V0
dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0
IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTEFwcGxldEVsZW1lbnRJbXBsJiBhcHBs
ZXQgPSAqc3RhdGljX2Nhc3Q8SFRNTEFwcGxldEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBz
d2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgQXBwbGV0QWxpZ246ICAgICAgICAgICB7IGFw
cGxldC5zZXRBbGlnbihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBBcHBsZXRBbHQ6ICAg
ICAgICAgICAgIHsgYXBwbGV0LnNldEFsdChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBB
cHBsZXRBcmNoaXZlOiAgICAgICAgIHsgYXBwbGV0LnNldEFyY2hpdmUoc3RyKTsgcmV0dXJuOyB9
CisgICAgICAgIGNhc2UgQXBwbGV0Q29kZTogICAgICAgICAgICB7IGFwcGxldC5zZXRDb2RlKHN0
cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEFwcGxldENvZGVCYXNlOiAgICAgICAgeyBhcHBs
ZXQuc2V0Q29kZUJhc2Uoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQXBwbGV0SGVpZ2h0
OiAgICAgICAgICB7IGFwcGxldC5zZXRIZWlnaHQoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNh
c2UgQXBwbGV0SHNwYWNlOiAgICAgICAgICB7IGFwcGxldC5zZXRIc3BhY2Uoc3RyKTsgcmV0dXJu
OyB9CisgICAgICAgIGNhc2UgQXBwbGV0TmFtZTogICAgICAgICAgICB7IGFwcGxldC5zZXROYW1l
KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEFwcGxldE9iamVjdDogICAgICAgICAgeyBh
cHBsZXQuc2V0T2JqZWN0KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEFwcGxldFZzcGFj
ZTogICAgICAgICAgeyBhcHBsZXQuc2V0VnNwYWNlKHN0cik7IHJldHVybjsgfQorICAgICAgICBj
YXNlIEFwcGxldFdpZHRoOiAgICAgICAgICAgeyBhcHBsZXQuc2V0V2lkdGgoc3RyKTsgcmV0dXJu
OyB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfU0NSSVBUOiB7Ci0gICAgICBIVE1M
U2NyaXB0RWxlbWVudEltcGwgJnNjcmlwdCA9IHN0YXRpY19jYXN0PEhUTUxTY3JpcHRFbGVtZW50
SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgU2Ny
aXB0VGV4dDogICAgICAgICAgICB7IHNjcmlwdC5zZXRUZXh0KHN0cik7IHJldHVybjsgfQotICAg
ICAgY2FzZSBTY3JpcHRIdG1sRm9yOiAgICAgICAgIHsgc2NyaXB0LnNldEh0bWxGb3Ioc3RyKTsg
cmV0dXJuOyB9Ci0gICAgICBjYXNlIFNjcmlwdEV2ZW50OiAgICAgICAgICAgeyBzY3JpcHQuc2V0
RXZlbnQoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFNjcmlwdENoYXJzZXQ6ICAgICAgICAg
eyBzY3JpcHQuc2V0Q2hhcnNldChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgU2NyaXB0RGVm
ZXI6ICAgICAgICAgICB7IHNjcmlwdC5zZXREZWZlcih2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyBy
ZXR1cm47IH0KLSAgICAgIGNhc2UgU2NyaXB0U3JjOiAgICAgICAgICAgICB7IHNjcmlwdC5zZXRT
cmMoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFNjcmlwdFR5cGU6ICAgICAgICAgICAgeyBz
Y3JpcHQuc2V0VHlwZShzdHIpOyByZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxl
bWVudDo6bWFwU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYg
dmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTE1hcEVsZW1lbnRJ
bXBsJiBtYXAgPSAqc3RhdGljX2Nhc3Q8SFRNTE1hcEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAg
ICBpZiAodG9rZW4gPT0gTWFwTmFtZSkKKyAgICAgICAgLy8gcmVhZC1vbmx5OiBhcmVhcworICAg
ICAgICBtYXAuc2V0TmFtZShzdHIpOworfQorCit2b2lkIEhUTUxFbGVtZW50OjphcmVhU2V0dGVy
KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERP
TTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTEFyZWFFbGVtZW50SW1wbCYgYXJlYSA9ICpz
dGF0aWNfY2FzdDxIVE1MQXJlYUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRv
a2VuKSB7CisgICAgICAgIGNhc2UgQXJlYUFjY2Vzc0tleTogICAgICAgeyBhcmVhLnNldEFjY2Vz
c0tleShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBBcmVhQWx0OiAgICAgICAgICAgICB7
IGFyZWEuc2V0QWx0KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEFyZWFDb29yZHM6ICAg
ICAgICAgIHsgYXJlYS5zZXRDb29yZHMoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQXJl
YUhyZWY6ICAgICAgICAgICAgeyBhcmVhLnNldEhyZWYoc3RyKTsgcmV0dXJuOyB9CisgICAgICAg
IGNhc2UgQXJlYU5vSHJlZjogICAgICAgICAgeyBhcmVhLnNldE5vSHJlZih2YWx1ZS50b0Jvb2xl
YW4oZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBBcmVhU2hhcGU6ICAgICAgICAgICB7
IGFyZWEuc2V0U2hhcGUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQXJlYVRhYkluZGV4
OiAgICAgICAgeyBhcmVhLnNldFRhYkluZGV4KHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47
IH0KKyAgICAgICAgY2FzZSBBcmVhVGFyZ2V0OiAgICAgICAgICB7IGFyZWEuc2V0VGFyZ2V0KHN0
cik7IHJldHVybjsgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX1RBQkxFOiB7Ci0g
ICAgICBIVE1MVGFibGVFbGVtZW50SW1wbCAmdGFibGUgPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVF
bGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNh
c2UgVGFibGVDYXB0aW9uOiAgICAgICAgIHsgdGFibGUuc2V0Q2FwdGlvbih0b0hUTUxUYWJsZUNh
cHRpb25FbGVtZW50KHZhbHVlKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJsZVRIZWFkOiAg
ICAgICAgICAgeyB0YWJsZS5zZXRUSGVhZCh0b0hUTUxUYWJsZVNlY3Rpb25FbGVtZW50KHZhbHVl
KSk7IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJsZVRGb290OiAgICAgICAgICAgeyB0YWJsZS5z
ZXRURm9vdCh0b0hUTUxUYWJsZVNlY3Rpb25FbGVtZW50KHZhbHVlKSk7IHJldHVybjsgfQotICAg
ICAgLy8gcmVhZC1vbmx5OiByb3dzCi0gICAgICAvLyByZWFkLW9ubHk6IHRib2RpZXMKLSAgICAg
IGNhc2UgVGFibGVBbGlnbjogICAgICAgICAgIHsgdGFibGUuc2V0QWxpZ24oc3RyKTsgcmV0dXJu
OyB9Ci0gICAgICBjYXNlIFRhYmxlQmdDb2xvcjogICAgICAgICB7IHRhYmxlLnNldEJnQ29sb3Io
c3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlQm9yZGVyOiAgICAgICAgICB7IHRhYmxl
LnNldEJvcmRlcihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVDZWxsUGFkZGluZzog
ICAgIHsgdGFibGUuc2V0Q2VsbFBhZGRpbmcoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRh
YmxlQ2VsbFNwYWNpbmc6ICAgICB7IHRhYmxlLnNldENlbGxTcGFjaW5nKHN0cik7IHJldHVybjsg
fQotICAgICAgY2FzZSBUYWJsZUZyYW1lOiAgICAgICAgICAgeyB0YWJsZS5zZXRGcmFtZShzdHIp
OyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVSdWxlczogICAgICAgICAgIHsgdGFibGUuc2V0
UnVsZXMoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlU3VtbWFyeTogICAgICAgICB7
IHRhYmxlLnNldFN1bW1hcnkoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlV2lkdGg6
ICAgICAgICAgICB7IHRhYmxlLnNldFdpZHRoKHN0cik7IHJldHVybjsgfQotICAgICAgfQorfQor
Cit2b2lkIEhUTUxFbGVtZW50OjpzY3JpcHRTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAg
ICBIVE1MU2NyaXB0RWxlbWVudEltcGwmIHNjcmlwdCA9ICpzdGF0aWNfY2FzdDxIVE1MU2NyaXB0
RWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2Fz
ZSBTY3JpcHRUZXh0OiAgICAgICAgICAgIHsgc2NyaXB0LnNldFRleHQoc3RyKTsgcmV0dXJuOyB9
CisgICAgICAgIGNhc2UgU2NyaXB0SHRtbEZvcjogICAgICAgICB7IHNjcmlwdC5zZXRIdG1sRm9y
KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFNjcmlwdEV2ZW50OiAgICAgICAgICAgeyBz
Y3JpcHQuc2V0RXZlbnQoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgU2NyaXB0Q2hhcnNl
dDogICAgICAgICB7IHNjcmlwdC5zZXRDaGFyc2V0KHN0cik7IHJldHVybjsgfQorICAgICAgICBj
YXNlIFNjcmlwdERlZmVyOiAgICAgICAgICAgeyBzY3JpcHQuc2V0RGVmZXIodmFsdWUudG9Cb29s
ZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgU2NyaXB0U3JjOiAgICAgICAgICAg
ICB7IHNjcmlwdC5zZXRTcmMoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgU2NyaXB0VHlw
ZTogICAgICAgICAgICB7IHNjcmlwdC5zZXRUeXBlKHN0cik7IHJldHVybjsgfQogICAgIH0KLSAg
ICBicmVhazsKLSAgICBjYXNlIElEX0NBUFRJT046IHsKLSAgICAgIEhUTUxUYWJsZUNhcHRpb25F
bGVtZW50SW1wbCAmdGFibGVDYXB0aW9uID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ2FwdGlvbkVs
ZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgY2Fz
ZSBUYWJsZUFsaWduOiAgICAgICAgICAgeyB0YWJsZUNhcHRpb24uc2V0QWxpZ24oc3RyKTsgcmV0
dXJuOyB9Ci0gICAgICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OnRhYmxlU2V0dGVyKEV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9N
U3RyaW5nJiBzdHIpCit7CisgICAgSFRNTFRhYmxlRWxlbWVudEltcGwmIHRhYmxlID0gKnN0YXRp
Y19jYXN0PEhUTUxUYWJsZUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2Vu
KSB7CisgICAgICAgIGNhc2UgVGFibGVDYXB0aW9uOiAgICAgICAgIHsgdGFibGUuc2V0Q2FwdGlv
bih0b0hUTUxUYWJsZUNhcHRpb25FbGVtZW50KHZhbHVlKSk7IHJldHVybjsgfQorICAgICAgICBj
YXNlIFRhYmxlVEhlYWQ6ICAgICAgICAgICB7IHRhYmxlLnNldFRIZWFkKHRvSFRNTFRhYmxlU2Vj
dGlvbkVsZW1lbnQodmFsdWUpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGFibGVURm9vdDog
ICAgICAgICAgIHsgdGFibGUuc2V0VEZvb3QodG9IVE1MVGFibGVTZWN0aW9uRWxlbWVudCh2YWx1
ZSkpOyByZXR1cm47IH0KKyAgICAgICAgLy8gcmVhZC1vbmx5OiByb3dzCisgICAgICAgIC8vIHJl
YWQtb25seTogdGJvZGllcworICAgICAgICBjYXNlIFRhYmxlQWxpZ246ICAgICAgICAgICB7IHRh
YmxlLnNldEFsaWduKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxlQmdDb2xvcjog
ICAgICAgICB7IHRhYmxlLnNldEJnQ29sb3Ioc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2Ug
VGFibGVCb3JkZXI6ICAgICAgICAgIHsgdGFibGUuc2V0Qm9yZGVyKHN0cik7IHJldHVybjsgfQor
ICAgICAgICBjYXNlIFRhYmxlQ2VsbFBhZGRpbmc6ICAgICB7IHRhYmxlLnNldENlbGxQYWRkaW5n
KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxlQ2VsbFNwYWNpbmc6ICAgICB7IHRh
YmxlLnNldENlbGxTcGFjaW5nKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxlRnJh
bWU6ICAgICAgICAgICB7IHRhYmxlLnNldEZyYW1lKHN0cik7IHJldHVybjsgfQorICAgICAgICBj
YXNlIFRhYmxlUnVsZXM6ICAgICAgICAgICB7IHRhYmxlLnNldFJ1bGVzKHN0cik7IHJldHVybjsg
fQorICAgICAgICBjYXNlIFRhYmxlU3VtbWFyeTogICAgICAgICB7IHRhYmxlLnNldFN1bW1hcnko
c3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGFibGVXaWR0aDogICAgICAgICAgIHsgdGFi
bGUuc2V0V2lkdGgoc3RyKTsgcmV0dXJuOyB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2Ug
SURfQ09MOiB7Ci0gICAgICBIVE1MVGFibGVDb2xFbGVtZW50SW1wbCAmdGFibGVDb2wgPSBzdGF0
aWNfY2FzdDxIVE1MVGFibGVDb2xFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRj
aCAodG9rZW4pIHsKLSAgICAgIGNhc2UgVGFibGVDb2xBbGlnbjogICAgICAgICAgIHsgdGFibGVD
b2wuc2V0QWxpZ24oc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlQ29sQ2g6ICAgICAg
ICAgICAgICB7IHRhYmxlQ29sLnNldENoKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJs
ZUNvbENoT2ZmOiAgICAgICAgICAgeyB0YWJsZUNvbC5zZXRDaE9mZihzdHIpOyByZXR1cm47IH0K
LSAgICAgIGNhc2UgVGFibGVDb2xTcGFuOiAgICAgICAgICAgIHsgdGFibGVDb2wuc2V0U3Bhbih2
YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlQ29sVkFsaWdu
OiAgICAgICAgICB7IHRhYmxlQ29sLnNldFZBbGlnbihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNh
c2UgVGFibGVDb2xXaWR0aDogICAgICAgICAgIHsgdGFibGVDb2wuc2V0V2lkdGgoc3RyKTsgcmV0
dXJuOyB9Ci0gICAgICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OnRhYmxlQ2FwdGlvblNldHRl
cihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBE
T006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxUYWJsZUNhcHRpb25FbGVtZW50SW1wbCYg
dGFibGVDYXB0aW9uID0gKnN0YXRpY19jYXN0PEhUTUxUYWJsZUNhcHRpb25FbGVtZW50SW1wbCo+
KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IFRhYmxlQ2FwdGlvbkFsaWduKQorICAgICAgICB0
YWJsZUNhcHRpb24uc2V0QWxpZ24oc3RyKTsKK30KKwordm9pZCBIVE1MRWxlbWVudDo6dGFibGVD
b2xTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwg
Y29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MVGFibGVDb2xFbGVtZW50SW1w
bCYgdGFibGVDb2wgPSAqc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ29sRWxlbWVudEltcGwqPihpbXBs
KCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBUYWJsZUNvbEFsaWduOiAg
ICAgICAgICAgeyB0YWJsZUNvbC5zZXRBbGlnbihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2Fz
ZSBUYWJsZUNvbENoOiAgICAgICAgICAgICAgeyB0YWJsZUNvbC5zZXRDaChzdHIpOyByZXR1cm47
IH0KKyAgICAgICAgY2FzZSBUYWJsZUNvbENoT2ZmOiAgICAgICAgICAgeyB0YWJsZUNvbC5zZXRD
aE9mZihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZUNvbFNwYW46ICAgICAgICAg
ICAgeyB0YWJsZUNvbC5zZXRTcGFuKHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KKyAg
ICAgICAgY2FzZSBUYWJsZUNvbFZBbGlnbjogICAgICAgICAgeyB0YWJsZUNvbC5zZXRWQWxpZ24o
c3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGFibGVDb2xXaWR0aDogICAgICAgICAgIHsg
dGFibGVDb2wuc2V0V2lkdGgoc3RyKTsgcmV0dXJuOyB9CiAgICAgfQotICAgIGJyZWFrOwotICAg
IGNhc2UgSURfVEhFQUQ6Ci0gICAgY2FzZSBJRF9UQk9EWToKLSAgICBjYXNlIElEX1RGT09UOiB7
Ci0gICAgICBIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGwgJnRhYmxlU2VjdGlvbiA9IHN0YXRp
Y19jYXN0PEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3
aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgVGFibGVTZWN0aW9uQWxpZ246ICAgICAgICAgICB7
IHRhYmxlU2VjdGlvbi5zZXRBbGlnbihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVT
ZWN0aW9uQ2g6ICAgICAgICAgICAgICB7IHRhYmxlU2VjdGlvbi5zZXRDaChzdHIpOyByZXR1cm47
IH0KLSAgICAgIGNhc2UgVGFibGVTZWN0aW9uQ2hPZmY6ICAgICAgICAgICB7IHRhYmxlU2VjdGlv
bi5zZXRDaE9mZihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVTZWN0aW9uVkFsaWdu
OiAgICAgICAgICB7IHRhYmxlU2VjdGlvbi5zZXRWQWxpZ24oc3RyKTsgcmV0dXJuOyB9Ci0gICAg
ICAvLyByZWFkLW9ubHk6IHJvd3MKLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6dGFi
bGVTZWN0aW9uU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYg
dmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTFRhYmxlU2VjdGlv
bkVsZW1lbnRJbXBsJiB0YWJsZVNlY3Rpb24gPSAqc3RhdGljX2Nhc3Q8SFRNTFRhYmxlU2VjdGlv
bkVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNh
c2UgVGFibGVTZWN0aW9uQWxpZ246ICAgICAgICAgICB7IHRhYmxlU2VjdGlvbi5zZXRBbGlnbihz
dHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZVNlY3Rpb25DaDogICAgICAgICAgICAg
IHsgdGFibGVTZWN0aW9uLnNldENoKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxl
U2VjdGlvbkNoT2ZmOiAgICAgICAgICAgeyB0YWJsZVNlY3Rpb24uc2V0Q2hPZmYoc3RyKTsgcmV0
dXJuOyB9CisgICAgICAgIGNhc2UgVGFibGVTZWN0aW9uVkFsaWduOiAgICAgICAgICB7IHRhYmxl
U2VjdGlvbi5zZXRWQWxpZ24oc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIC8vIHJlYWQtb25seTog
cm93cwogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX1RSOiB7Ci0gICAgICBIVE1MVGFi
bGVSb3dFbGVtZW50SW1wbCAmdGFibGVSb3cgPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVSb3dFbGVt
ZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIC8vIHJl
YWQtb25seTogcm93SW5kZXgKLSAgICAgIC8vIHJlYWQtb25seTogc2VjdGlvblJvd0luZGV4Ci0g
ICAgICAvLyByZWFkLW9ubHk6IGNlbGxzCi0gICAgICBjYXNlIFRhYmxlUm93QWxpZ246ICAgICAg
ICAgICB7IHRhYmxlUm93LnNldEFsaWduKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJs
ZVJvd0JnQ29sb3I6ICAgICAgICAgeyB0YWJsZVJvdy5zZXRCZ0NvbG9yKHN0cik7IHJldHVybjsg
fQotICAgICAgY2FzZSBUYWJsZVJvd0NoOiAgICAgICAgICAgICAgeyB0YWJsZVJvdy5zZXRDaChz
dHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVSb3dDaE9mZjogICAgICAgICAgIHsgdGFi
bGVSb3cuc2V0Q2hPZmYoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlUm93VkFsaWdu
OiAgICAgICAgICB7IHRhYmxlUm93LnNldFZBbGlnbihzdHIpOyByZXR1cm47IH0KLSAgICAgIH0K
K30KKwordm9pZCBIVE1MRWxlbWVudDo6dGFibGVSb3dTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikK
K3sKKyAgICBIVE1MVGFibGVSb3dFbGVtZW50SW1wbCYgdGFibGVSb3cgPSAqc3RhdGljX2Nhc3Q8
SFRNTFRhYmxlUm93RWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsK
KyAgICAgICAgLy8gcmVhZC1vbmx5OiByb3dJbmRleAorICAgICAgICAvLyByZWFkLW9ubHk6IHNl
Y3Rpb25Sb3dJbmRleAorICAgICAgICAvLyByZWFkLW9ubHk6IGNlbGxzCisgICAgICAgIGNhc2Ug
VGFibGVSb3dBbGlnbjogICAgICAgICAgIHsgdGFibGVSb3cuc2V0QWxpZ24oc3RyKTsgcmV0dXJu
OyB9CisgICAgICAgIGNhc2UgVGFibGVSb3dCZ0NvbG9yOiAgICAgICAgIHsgdGFibGVSb3cuc2V0
QmdDb2xvcihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZVJvd0NoOiAgICAgICAg
ICAgICAgeyB0YWJsZVJvdy5zZXRDaChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJs
ZVJvd0NoT2ZmOiAgICAgICAgICAgeyB0YWJsZVJvdy5zZXRDaE9mZihzdHIpOyByZXR1cm47IH0K
KyAgICAgICAgY2FzZSBUYWJsZVJvd1ZBbGlnbjogICAgICAgICAgeyB0YWJsZVJvdy5zZXRWQWxp
Z24oc3RyKTsgcmV0dXJuOyB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfVEg6Ci0g
ICAgY2FzZSBJRF9URDogewotICAgICAgSFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsICZ0YWJsZUNl
bGwgPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVDZWxsRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0g
ICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICAvLyByZWFkLW9ubHk6IGNlbGxJbmRleAotICAg
ICAgY2FzZSBUYWJsZUNlbGxBYmJyOiAgICAgICAgICAgIHsgdGFibGVDZWxsLnNldEFiYnIoc3Ry
KTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlQ2VsbEFsaWduOiAgICAgICAgICAgeyB0YWJs
ZUNlbGwuc2V0QWxpZ24oc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlQ2VsbEF4aXM6
ICAgICAgICAgICAgeyB0YWJsZUNlbGwuc2V0QXhpcyhzdHIpOyByZXR1cm47IH0KLSAgICAgIGNh
c2UgVGFibGVDZWxsQmdDb2xvcjogICAgICAgICB7IHRhYmxlQ2VsbC5zZXRCZ0NvbG9yKHN0cik7
IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJsZUNlbGxDaDogICAgICAgICAgICAgIHsgdGFibGVD
ZWxsLnNldENoKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJsZUNlbGxDaE9mZjogICAg
ICAgICAgIHsgdGFibGVDZWxsLnNldENoT2ZmKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBU
YWJsZUNlbGxDb2xTcGFuOiAgICAgICAgIHsgdGFibGVDZWxsLnNldENvbFNwYW4odmFsdWUudG9J
bnQzMihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJsZUNlbGxIZWFkZXJzOiAgICAg
ICAgIHsgdGFibGVDZWxsLnNldEhlYWRlcnMoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRh
YmxlQ2VsbEhlaWdodDogICAgICAgICAgeyB0YWJsZUNlbGwuc2V0SGVpZ2h0KHN0cik7IHJldHVy
bjsgfQotICAgICAgY2FzZSBUYWJsZUNlbGxOb1dyYXA6ICAgICAgICAgIHsgdGFibGVDZWxsLnNl
dE5vV3JhcCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFi
bGVDZWxsUm93U3BhbjogICAgICAgICB7IHRhYmxlQ2VsbC5zZXRSb3dTcGFuKHZhbHVlLnRvSW50
MzIoZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVDZWxsU2NvcGU6ICAgICAgICAg
ICB7IHRhYmxlQ2VsbC5zZXRTY29wZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVD
ZWxsVkFsaWduOiAgICAgICAgICB7IHRhYmxlQ2VsbC5zZXRWQWxpZ24oc3RyKTsgcmV0dXJuOyB9
Ci0gICAgICBjYXNlIFRhYmxlQ2VsbFdpZHRoOiAgICAgICAgICAgeyB0YWJsZUNlbGwuc2V0V2lk
dGgoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OnRhYmxl
Q2VsbFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVl
LCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxUYWJsZUNlbGxFbGVtZW50
SW1wbCYgdGFibGVDZWxsID0gKnN0YXRpY19jYXN0PEhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbCo+
KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICAvLyByZWFkLW9ubHk6IGNl
bGxJbmRleAorICAgICAgICBjYXNlIFRhYmxlQ2VsbEFiYnI6ICAgICAgICAgICAgeyB0YWJsZUNl
bGwuc2V0QWJicihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZUNlbGxBbGlnbjog
ICAgICAgICAgIHsgdGFibGVDZWxsLnNldEFsaWduKHN0cik7IHJldHVybjsgfQorICAgICAgICBj
YXNlIFRhYmxlQ2VsbEF4aXM6ICAgICAgICAgICAgeyB0YWJsZUNlbGwuc2V0QXhpcyhzdHIpOyBy
ZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZUNlbGxCZ0NvbG9yOiAgICAgICAgIHsgdGFibGVD
ZWxsLnNldEJnQ29sb3Ioc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGFibGVDZWxsQ2g6
ICAgICAgICAgICAgICB7IHRhYmxlQ2VsbC5zZXRDaChzdHIpOyByZXR1cm47IH0KKyAgICAgICAg
Y2FzZSBUYWJsZUNlbGxDaE9mZjogICAgICAgICAgIHsgdGFibGVDZWxsLnNldENoT2ZmKHN0cik7
IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxlQ2VsbENvbFNwYW46ICAgICAgICAgeyB0YWJs
ZUNlbGwuc2V0Q29sU3Bhbih2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAg
IGNhc2UgVGFibGVDZWxsSGVhZGVyczogICAgICAgICB7IHRhYmxlQ2VsbC5zZXRIZWFkZXJzKHN0
cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxlQ2VsbEhlaWdodDogICAgICAgICAgeyB0
YWJsZUNlbGwuc2V0SGVpZ2h0KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxlQ2Vs
bE5vV3JhcDogICAgICAgICAgeyB0YWJsZUNlbGwuc2V0Tm9XcmFwKHZhbHVlLnRvQm9vbGVhbihl
eGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxlQ2VsbFJvd1NwYW46ICAgICAgICAg
eyB0YWJsZUNlbGwuc2V0Um93U3Bhbih2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9Cisg
ICAgICAgIGNhc2UgVGFibGVDZWxsU2NvcGU6ICAgICAgICAgICB7IHRhYmxlQ2VsbC5zZXRTY29w
ZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZUNlbGxWQWxpZ246ICAgICAgICAg
IHsgdGFibGVDZWxsLnNldFZBbGlnbihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJs
ZUNlbGxXaWR0aDogICAgICAgICAgIHsgdGFibGVDZWxsLnNldFdpZHRoKHN0cik7IHJldHVybjsg
fQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0ZSQU1FU0VUOiB7Ci0gICAgICBIVE1M
RnJhbWVTZXRFbGVtZW50SW1wbCAmZnJhbWVTZXQgPSBzdGF0aWNfY2FzdDxIVE1MRnJhbWVTZXRF
bGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNh
c2UgRnJhbWVTZXRDb2xzOiAgICAgICAgICAgIHsgZnJhbWVTZXQuc2V0Q29scyhzdHIpOyByZXR1
cm47IH0KLSAgICAgIGNhc2UgRnJhbWVTZXRSb3dzOiAgICAgICAgICAgIHsgZnJhbWVTZXQuc2V0
Um93cyhzdHIpOyByZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6ZnJh
bWVTZXRTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1
ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MRnJhbWVTZXRFbGVtZW50
SW1wbCYgZnJhbWVTZXQgPSAqc3RhdGljX2Nhc3Q8SFRNTEZyYW1lU2V0RWxlbWVudEltcGwqPihp
bXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBGcmFtZVNldENvbHM6
ICAgICAgICAgICAgeyBmcmFtZVNldC5zZXRDb2xzKHN0cik7IHJldHVybjsgfQorICAgICAgICBj
YXNlIEZyYW1lU2V0Um93czogICAgICAgICAgICB7IGZyYW1lU2V0LnNldFJvd3Moc3RyKTsgcmV0
dXJuOyB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfRlJBTUU6IHsKLSAgICAgIEhU
TUxGcmFtZUVsZW1lbnRJbXBsICZmcmFtZUVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRnJhbWVF
bGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgICAv
LyByZWFkLW9ubHk6IEZyYW1lQ29udGVudERvY3VtZW50OgotICAgICAgY2FzZSBGcmFtZUZyYW1l
Qm9yZGVyOiAgICAgeyBmcmFtZUVsZW1lbnQuc2V0RnJhbWVCb3JkZXIoc3RyKTsgcmV0dXJuOyB9
Ci0gICAgICBjYXNlIEZyYW1lTG9uZ0Rlc2M6ICAgICAgICB7IGZyYW1lRWxlbWVudC5zZXRMb25n
RGVzYyhzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgRnJhbWVNYXJnaW5IZWlnaHQ6ICAgIHsg
ZnJhbWVFbGVtZW50LnNldE1hcmdpbkhlaWdodChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2Ug
RnJhbWVNYXJnaW5XaWR0aDogICAgIHsgZnJhbWVFbGVtZW50LnNldE1hcmdpbldpZHRoKHN0cik7
IHJldHVybjsgfQotICAgICAgY2FzZSBGcmFtZU5hbWU6ICAgICAgICAgICAgeyBmcmFtZUVsZW1l
bnQuc2V0TmFtZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgRnJhbWVOb1Jlc2l6ZTogICAg
ICAgIHsgZnJhbWVFbGVtZW50LnNldE5vUmVzaXplKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJl
dHVybjsgfQotICAgICAgY2FzZSBGcmFtZVNjcm9sbGluZzogICAgICAgeyBmcmFtZUVsZW1lbnQu
c2V0U2Nyb2xsaW5nKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBGcmFtZVNyYzogICAgICAg
ICAgICAgeyBmcmFtZUVsZW1lbnQuc2V0U3JjKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBG
cmFtZUxvY2F0aW9uOiAgICAgICAgeyBmcmFtZUVsZW1lbnQuc2V0TG9jYXRpb24oc3RyKTsgcmV0
dXJuOyB9Ci0gICAgICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OmZyYW1lU2V0dGVyKEV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9N
U3RyaW5nJiBzdHIpCit7CisgICAgSFRNTEZyYW1lRWxlbWVudEltcGwmIGZyYW1lRWxlbWVudCA9
ICpzdGF0aWNfY2FzdDxIVE1MRnJhbWVFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNo
ICh0b2tlbikgeworICAgICAgICAvLyByZWFkLW9ubHk6IEZyYW1lQ29udGVudERvY3VtZW50Ogor
ICAgICAgICBjYXNlIEZyYW1lRnJhbWVCb3JkZXI6ICAgICB7IGZyYW1lRWxlbWVudC5zZXRGcmFt
ZUJvcmRlcihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBGcmFtZUxvbmdEZXNjOiAgICAg
ICAgeyBmcmFtZUVsZW1lbnQuc2V0TG9uZ0Rlc2Moc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNh
c2UgRnJhbWVNYXJnaW5IZWlnaHQ6ICAgIHsgZnJhbWVFbGVtZW50LnNldE1hcmdpbkhlaWdodChz
dHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBGcmFtZU1hcmdpbldpZHRoOiAgICAgeyBmcmFt
ZUVsZW1lbnQuc2V0TWFyZ2luV2lkdGgoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgRnJh
bWVOYW1lOiAgICAgICAgICAgIHsgZnJhbWVFbGVtZW50LnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9
CisgICAgICAgIGNhc2UgRnJhbWVOb1Jlc2l6ZTogICAgICAgIHsgZnJhbWVFbGVtZW50LnNldE5v
UmVzaXplKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIEZy
YW1lU2Nyb2xsaW5nOiAgICAgICB7IGZyYW1lRWxlbWVudC5zZXRTY3JvbGxpbmcoc3RyKTsgcmV0
dXJuOyB9CisgICAgICAgIGNhc2UgRnJhbWVTcmM6ICAgICAgICAgICAgIHsgZnJhbWVFbGVtZW50
LnNldFNyYyhzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBGcmFtZUxvY2F0aW9uOiAgICAg
ICAgeyBmcmFtZUVsZW1lbnQuc2V0TG9jYXRpb24oc3RyKTsgcmV0dXJuOyB9CiAgICAgfQotICAg
IGJyZWFrOwotICAgIGNhc2UgSURfSUZSQU1FOiB7Ci0gICAgICBIVE1MSUZyYW1lRWxlbWVudElt
cGwgJmlGcmFtZSA9IHN0YXRpY19jYXN0PEhUTUxJRnJhbWVFbGVtZW50SW1wbCAmPihlbGVtZW50
KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgSUZyYW1lQWxpZ246ICAgICAg
ICAgICB7IGlGcmFtZS5zZXRBbGlnbihzdHIpOyByZXR1cm47IH0KLSAgICAgIC8vIHJlYWQtb25s
eTogSUZyYW1lQ29udGVudERvY3VtZW50Ci0gICAgICBjYXNlIElGcmFtZUZyYW1lQm9yZGVyOiAg
ICAgeyBpRnJhbWUuc2V0RnJhbWVCb3JkZXIoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElG
cmFtZUhlaWdodDogICAgICAgICAgeyBpRnJhbWUuc2V0SGVpZ2h0KHN0cik7IHJldHVybjsgfQot
ICAgICAgY2FzZSBJRnJhbWVMb25nRGVzYzogICAgICAgIHsgaUZyYW1lLnNldExvbmdEZXNjKHN0
cik7IHJldHVybjsgfQotICAgICAgY2FzZSBJRnJhbWVNYXJnaW5IZWlnaHQ6ICAgIHsgaUZyYW1l
LnNldE1hcmdpbkhlaWdodChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSUZyYW1lTWFyZ2lu
V2lkdGg6ICAgICB7IGlGcmFtZS5zZXRNYXJnaW5XaWR0aChzdHIpOyByZXR1cm47IH0KLSAgICAg
IGNhc2UgSUZyYW1lTmFtZTogICAgICAgICAgICB7IGlGcmFtZS5zZXROYW1lKHN0cik7IHJldHVy
bjsgfQotICAgICAgY2FzZSBJRnJhbWVTY3JvbGxpbmc6ICAgICAgIHsgaUZyYW1lLnNldFNjcm9s
bGluZyhzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSUZyYW1lU3JjOiAgICAgICAgICAgICB7
IGlGcmFtZS5zZXRTcmMoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElGcmFtZVdpZHRoOiAg
ICAgICAgICAgeyBpRnJhbWUuc2V0V2lkdGgoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICB9Ci0gICAg
ICBicmVhazsKK30KKwordm9pZCBIVE1MRWxlbWVudDo6aUZyYW1lU2V0dGVyKEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5n
JiBzdHIpCit7CisgICAgSFRNTElGcmFtZUVsZW1lbnRJbXBsJiBpRnJhbWUgPSAqc3RhdGljX2Nh
c3Q8SFRNTElGcmFtZUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7
CisgICAgICAgIGNhc2UgSUZyYW1lQWxpZ246ICAgICAgICAgICB7IGlGcmFtZS5zZXRBbGlnbihz
dHIpOyByZXR1cm47IH0KKyAgICAgICAgLy8gcmVhZC1vbmx5OiBJRnJhbWVDb250ZW50RG9jdW1l
bnQKKyAgICAgICAgY2FzZSBJRnJhbWVGcmFtZUJvcmRlcjogICAgIHsgaUZyYW1lLnNldEZyYW1l
Qm9yZGVyKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIElGcmFtZUhlaWdodDogICAgICAg
ICAgeyBpRnJhbWUuc2V0SGVpZ2h0KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIElGcmFt
ZUxvbmdEZXNjOiAgICAgICAgeyBpRnJhbWUuc2V0TG9uZ0Rlc2Moc3RyKTsgcmV0dXJuOyB9Cisg
ICAgICAgIGNhc2UgSUZyYW1lTWFyZ2luSGVpZ2h0OiAgICB7IGlGcmFtZS5zZXRNYXJnaW5IZWln
aHQoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgSUZyYW1lTWFyZ2luV2lkdGg6ICAgICB7
IGlGcmFtZS5zZXRNYXJnaW5XaWR0aChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJRnJh
bWVOYW1lOiAgICAgICAgICAgIHsgaUZyYW1lLnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9CisgICAg
ICAgIGNhc2UgSUZyYW1lU2Nyb2xsaW5nOiAgICAgICB7IGlGcmFtZS5zZXRTY3JvbGxpbmcoc3Ry
KTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgSUZyYW1lU3JjOiAgICAgICAgICAgICB7IGlGcmFt
ZS5zZXRTcmMoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgSUZyYW1lV2lkdGg6ICAgICAg
ICAgICB7IGlGcmFtZS5zZXRXaWR0aChzdHIpOyByZXR1cm47IH0KICAgICB9Ci0gIH0KK30KIAot
ICAvLyBnZW5lcmljIHByb3BlcnRpZXMKLSAgc3dpdGNoICh0b2tlbikgewotICBjYXNlIEVsZW1l
bnRJZDoKLSAgICBlbGVtZW50LnNldElkKHN0cik7Ci0gICAgcmV0dXJuOwotICBjYXNlIEVsZW1l
bnRUaXRsZToKLSAgICBlbGVtZW50LnNldFRpdGxlKHN0cik7Ci0gICAgcmV0dXJuOwotICBjYXNl
IEVsZW1lbnRMYW5nOgotICAgIGVsZW1lbnQuc2V0TGFuZyhzdHIpOwotICAgIHJldHVybjsKLSAg
Y2FzZSBFbGVtZW50RGlyOgotICAgIGVsZW1lbnQuc2V0RGlyKHN0cik7Ci0gICAgcmV0dXJuOwot
ICBjYXNlIEVsZW1lbnRDbGFzc05hbWU6Ci0gICAgZWxlbWVudC5zZXRDbGFzc05hbWUoc3RyKTsK
LSAgICByZXR1cm47Ci0gIGNhc2UgRWxlbWVudElubmVySFRNTDoKLSAgICBlbGVtZW50LnNldElu
bmVySFRNTChzdHIsIGV4Y2VwdGlvbik7Ci0gICAgcmV0dXJuOwotICBjYXNlIEVsZW1lbnRJbm5l
clRleHQ6Ci0gICAgZWxlbWVudC5zZXRJbm5lclRleHQoc3RyLCBleGNlcHRpb24pOwotICAgIHJl
dHVybjsKLSAgY2FzZSBFbGVtZW50T3V0ZXJIVE1MOgotICAgIGVsZW1lbnQuc2V0T3V0ZXJIVE1M
KHN0ciwgZXhjZXB0aW9uKTsKLSAgICByZXR1cm47Ci0gIGNhc2UgRWxlbWVudE91dGVyVGV4dDoK
LSAgICBlbGVtZW50LnNldE91dGVyVGV4dChzdHIsIGV4Y2VwdGlvbik7Ci0gICAgcmV0dXJuOwot
ICBjYXNlIEVsZW1lbnRDb250ZW50RWRpdGFibGU6Ci0gICAgZWxlbWVudC5zZXRDb250ZW50RWRp
dGFibGUoc3RyKTsKLSAgICByZXR1cm47Ci0gIGRlZmF1bHQ6Ci0gICAga2RXYXJuaW5nKCkgPDwg
IktKUzo6SFRNTEVsZW1lbnQ6OnB1dFZhbHVlIHVuaGFuZGxlZCB0b2tlbiAiIDw8IHRva2VuIDw8
ICIgdGhpc1RhZz0iIDw8IGVsZW1lbnQudGFnTmFtZSgpLnN0cmluZygpIDw8ICIgc3RyPSIgPDwg
c3RyLnN0cmluZygpIDw8IGVuZGw7Ci0gIH0KK3ZvaWQgSFRNTEVsZW1lbnQ6Om1hcnF1ZWVTZXR0
ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3Qg
RE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICAvLyBGSVhNRTogRmluZCBvdXQgd2hhdCBXaW5J
RSBzdXBwb3J0cyBhbmQgaW1wbGVtZW50IGl0LgorfQorCit2b2lkIEhUTUxFbGVtZW50OjpwdXRW
YWx1ZShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBpbnQp
Cit7CisgICAgRE9NRXhjZXB0aW9uVHJhbnNsYXRvciBleGNlcHRpb24oZXhlYyk7CisgICAgRE9N
OjpET01TdHJpbmcgc3RyID0gdmFsdWUuaXNBKE51bGxUeXBlKSA/IERPTTo6RE9NU3RyaW5nKCkg
OiB2YWx1ZS50b1N0cmluZyhleGVjKS5zdHJpbmcoKTsKKyAKKyAgICAvLyBDaGVjayBvdXIgc2V0
IG9mIGdlbmVyaWMgcHJvcGVydGllcyBmaXJzdC4KKyAgICBIVE1MRWxlbWVudEltcGwgJmVsZW1l
bnQgPSAqc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KGltcGwoKSk7CisgICAgc3dpdGNo
ICh0b2tlbikgeworICAgICAgICBjYXNlIEVsZW1lbnRJZDoKKyAgICAgICAgICAgIGVsZW1lbnQu
c2V0SWQoc3RyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBFbGVtZW50VGl0
bGU6CisgICAgICAgICAgICBlbGVtZW50LnNldFRpdGxlKHN0cik7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIGNhc2UgRWxlbWVudExhbmc6CisgICAgICAgICAgICBlbGVtZW50LnNldExh
bmcoc3RyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBFbGVtZW50RGlyOgor
ICAgICAgICAgICAgZWxlbWVudC5zZXREaXIoc3RyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgY2FzZSBFbGVtZW50Q2xhc3NOYW1lOgorICAgICAgICAgICAgZWxlbWVudC5zZXRDbGFz
c05hbWUoc3RyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBFbGVtZW50SW5u
ZXJIVE1MOgorICAgICAgICAgICAgZWxlbWVudC5zZXRJbm5lckhUTUwoc3RyLCBleGNlcHRpb24p
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIEVsZW1lbnRJbm5lclRleHQ6Cisg
ICAgICAgICAgICBlbGVtZW50LnNldElubmVyVGV4dChzdHIsIGV4Y2VwdGlvbik7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIGNhc2UgRWxlbWVudE91dGVySFRNTDoKKyAgICAgICAgICAg
IGVsZW1lbnQuc2V0T3V0ZXJIVE1MKHN0ciwgZXhjZXB0aW9uKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgY2FzZSBFbGVtZW50T3V0ZXJUZXh0OgorICAgICAgICAgICAgZWxlbWVudC5z
ZXRPdXRlclRleHQoc3RyLCBleGNlcHRpb24pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICBjYXNlIEVsZW1lbnRDb250ZW50RWRpdGFibGU6CisgICAgICAgICAgICBlbGVtZW50LnNldENv
bnRlbnRFZGl0YWJsZShzdHIpOworICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8v
IE5vdyBjaGVjayBmb3IgcHJvcGVydGllcyB0aGF0IGFwcGx5IHRvIGEgc3BlY2lmaWMgZWxlbWVu
dCB0eXBlLgorICAgIGNvbnN0IEdldFNldEluZm8qIGluZm8gPSBnZXRTZXRJbmZvKCk7CisgICAg
aWYgKGluZm8gJiYgaW5mby0+bV9zZXR0ZXIpCisgICAgICAgIHJldHVybiAodGhpcy0+KihpbmZv
LT5tX3NldHRlcikpKGV4ZWMsIHRva2VuLCB2YWx1ZSwgc3RyKTsgIAogfQogCiBIVE1MRWxlbWVu
dEltcGwgKnRvSFRNTEVsZW1lbnQoVmFsdWVJbXAgKnZhbCkKQEAgLTMwMzgsMjMgKzMyMDEsMTcg
QEAgSFRNTEVsZW1lbnRJbXBsICp0b0hUTUxFbGVtZW50KFZhbHVlSW1wIAogCiBIVE1MVGFibGVD
YXB0aW9uRWxlbWVudEltcGwgKnRvSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQoVmFsdWVJbXAgKnZh
bCkKIHsKLSAgICBpZiAoSFRNTEVsZW1lbnRJbXBsICplID0gdG9IVE1MRWxlbWVudCh2YWwpKQot
ICAgICAgICBzd2l0Y2ggKGUtPmlkKCkpIHsKLSAgICAgICAgICAgIGNhc2UgSURfQ0FQVElPTjoK
LSAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ2FwdGlvbkVsZW1l
bnRJbXBsICo+KGUpOwotICAgICAgICB9CisgICAgSFRNTEVsZW1lbnRJbXBsICplID0gdG9IVE1M
RWxlbWVudCh2YWwpOworICAgIGlmIChlICYmIGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpjYXB0
aW9uKCkpKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ2FwdGlvbkVsZW1l
bnRJbXBsICo+KGUpOwogICAgIHJldHVybiAwOwogfQogCiBIVE1MVGFibGVTZWN0aW9uRWxlbWVu
dEltcGwgKnRvSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQoVmFsdWVJbXAgKnZhbCkKIHsKLSAgICBp
ZiAoSFRNTEVsZW1lbnRJbXBsICplID0gdG9IVE1MRWxlbWVudCh2YWwpKQotICAgICAgICBzd2l0
Y2ggKGUtPmlkKCkpIHsKLSAgICAgICAgICAgIGNhc2UgSURfVEhFQUQ6Ci0gICAgICAgICAgICBj
YXNlIElEX1RCT0RZOgotICAgICAgICAgICAgY2FzZSBJRF9URk9PVDoKLSAgICAgICAgICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsICo+KGUpOwot
ICAgICAgICB9CisgICAgSFRNTEVsZW1lbnRJbXBsICplID0gdG9IVE1MRWxlbWVudCh2YWwpOwor
ICAgIGlmIChlICYmIChlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGhlYWQoKSkgfHwgZS0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OnRib2R5KCkpIHx8IGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0
Zm9vdCgpKSkpCisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MVGFibGVTZWN0aW9uRWxl
bWVudEltcGwgKj4oZSk7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTMxMDMsMTAgKzMyNjAsMTAg
QEAgVmFsdWUgS0pTOjpIVE1MQ29sbGVjdGlvbjo6dHJ5R2V0KEV4ZWNTdAogICBlbHNlIGlmIChw
cm9wZXJ0eU5hbWUgPT0gInNlbGVjdGVkSW5kZXgiKSB7CiAgICAgLy8gTk9OLVNUQU5EQVJEIG9w
dGlvbnMuc2VsZWN0ZWRJbmRleAogICAgIE5vZGVJbXBsICpvcHRpb24gPSBjb2xsZWN0aW9uLml0
ZW0oMCk7Ci0gICAgaWYgKG9wdGlvbi0+aWQoKSA9PSBJRF9PUFRJT04pIHsKKyAgICBpZiAob3B0
aW9uLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpKSB7CiAgICAgICBOb2RlSW1wbCAq
c2VsZWN0ID0gb3B0aW9uOwogICAgICAgd2hpbGUgKChzZWxlY3QgPSBzZWxlY3QtPnBhcmVudE5v
ZGUoKSkpCi0gICAgICAgIGlmIChzZWxlY3QtPmlkKCkgPT0gSURfU0VMRUNUKQorICAgICAgICBp
ZiAoc2VsZWN0LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c2VsZWN0KCkpKQogCSAgcmV0dXJuIE51
bWJlcihzdGF0aWNfY2FzdDxIVE1MU2VsZWN0RWxlbWVudEltcGwgKj4oc2VsZWN0KS0+c2VsZWN0
ZWRJbmRleCgpKTsKICAgICB9CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwpAQCAtMzI5NCw3ICsz
NDUxLDcgQEAgdm9pZCBLSlM6OkhUTUxTZWxlY3RDb2xsZWN0aW9uOjp0cnlQdXQoRQogCiAgIC8v
IGlzIHYgYW4gb3B0aW9uIGVsZW1lbnQgPwogICBOb2RlSW1wbCAqb3B0aW9uID0gdG9Ob2RlKHZh
bHVlKTsKLSAgaWYgKCFvcHRpb24gfHwgb3B0aW9uLT5pZCgpICE9IElEX09QVElPTikKKyAgaWYg
KCFvcHRpb24gfHwgIW9wdGlvbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9wdGlvbigpKSkKICAg
ICByZXR1cm47CiAKICAgaW50IGV4Y2VwdGlvbiA9IDA7CkluZGV4OiBraHRtbC9lY21hL2tqc19o
dG1sLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWNtYS9r
anNfaHRtbC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjQ0CmRpZmYgLXUgLXAgLXIxLjQ0IGto
dG1sL2VjbWEva2pzX2h0bWwuaAotLS0ga2h0bWwvZWNtYS9ranNfaHRtbC5oCTEyIE1heSAyMDA1
IDE3OjExOjIxIC0wMDAwCTEuNDQKKysrIGtodG1sL2VjbWEva2pzX2h0bWwuaAkxNyBKdW4gMjAw
NSAwMTozMjozNiAtMDAwMApAQCAtODUsNiArODUsMTMxIEBAIG5hbWVzcGFjZSBLSlMgewogICAg
ICAgY2FwdGlvbl9pbmZvLCBjb2xfaW5mbywgdGFibGVzZWN0aW9uX2luZm8sIHRyX2luZm8sCiAg
ICAgICB0YWJsZWNlbGxfaW5mbywgZnJhbWVTZXRfaW5mbywgZnJhbWVfaW5mbywgaUZyYW1lX2lu
Zm8sIG1hcnF1ZWVfaW5mbzsKIAorICAgIC8vIEZJWE1FOiBNaWdodCBtYWtlIHNlbnNlIHRvIGNv
bWJpbmUgdGhpcyB3aXRoIENsYXNzSW5mbyBzb21lIGRheS4KKyAgICB0eXBlZGVmIFZhbHVlIChI
VE1MRWxlbWVudDo6KkdldHRlckZ1bmN0aW9uKShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikg
Y29uc3Q7CisgICAgdHlwZWRlZiB2b2lkIChIVE1MRWxlbWVudDo6KlNldHRlckZ1bmN0aW9uKShF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006
OkRPTVN0cmluZyYgc3RyKTsKKyAgICBzdHJ1Y3QgR2V0U2V0SW5mbyB7IEdldHRlckZ1bmN0aW9u
IG1fZ2V0dGVyOyBTZXR0ZXJGdW5jdGlvbiBtX3NldHRlcjsgfTsKKyAgICBjb25zdCBHZXRTZXRJ
bmZvKiBnZXRTZXRJbmZvKCkgY29uc3Q7CisgICAgc3RhdGljIGNvbnN0IEdldFNldEluZm8gaHRt
bF9nZXRzZXQsIGhlYWRfZ2V0c2V0LCBsaW5rX2dldHNldCwgdGl0bGVfZ2V0c2V0LAorICAgICAg
bWV0YV9nZXRzZXQsIGJhc2VfZ2V0c2V0LCBpc0luZGV4X2dldHNldCwgc3R5bGVfZ2V0c2V0LCBi
b2R5X2dldHNldCwgZm9ybV9nZXRzZXQsCisgICAgICBzZWxlY3RfZ2V0c2V0LCBvcHRHcm91cF9n
ZXRzZXQsIG9wdGlvbl9nZXRzZXQsIGlucHV0X2dldHNldCwgdGV4dEFyZWFfZ2V0c2V0LAorICAg
ICAgYnV0dG9uX2dldHNldCwgbGFiZWxfZ2V0c2V0LCBmaWVsZFNldF9nZXRzZXQsIGxlZ2VuZF9n
ZXRzZXQsIHVsX2dldHNldCwgb2xfZ2V0c2V0LAorICAgICAgZGxfZ2V0c2V0LCBkaXJfZ2V0c2V0
LCBtZW51X2dldHNldCwgbGlfZ2V0c2V0LCBkaXZfZ2V0c2V0LCBwX2dldHNldCwgaGVhZGluZ19n
ZXRzZXQsCisgICAgICBibG9ja1F1b3RlX2dldHNldCwgcV9nZXRzZXQsIHByZV9nZXRzZXQsIGJy
X2dldHNldCwgYmFzZUZvbnRfZ2V0c2V0LCBmb250X2dldHNldCwKKyAgICAgIGhyX2dldHNldCwg
bW9kX2dldHNldCwgYV9nZXRzZXQsIGNhbnZhc19nZXRzZXQsIGltZ19nZXRzZXQsIG9iamVjdF9n
ZXRzZXQsIHBhcmFtX2dldHNldCwKKyAgICAgIGFwcGxldF9nZXRzZXQsIG1hcF9nZXRzZXQsIGFy
ZWFfZ2V0c2V0LCBzY3JpcHRfZ2V0c2V0LCB0YWJsZV9nZXRzZXQsCisgICAgICBjYXB0aW9uX2dl
dHNldCwgY29sX2dldHNldCwgdGFibGVzZWN0aW9uX2dldHNldCwgdHJfZ2V0c2V0LAorICAgICAg
dGFibGVjZWxsX2dldHNldCwgZnJhbWVTZXRfZ2V0c2V0LCBmcmFtZV9nZXRzZXQsIGlGcmFtZV9n
ZXRzZXQsIG1hcnF1ZWVfZ2V0c2V0OworCisgICAgVmFsdWUgaHRtbEdldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgaHRtbFNldHRlcihFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmlu
ZyYgc3RyKTsKKyAgICBWYWx1ZSBoZWFkR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2Vu
KSBjb25zdDsKKyAgICB2b2lkICBoZWFkU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
LCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZh
bHVlIGxpbmtHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZv
aWQgIGxpbmtTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2
YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgdGl0bGVHZXR0ZXIo
RXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIHRpdGxlU2V0dGVy
KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERP
TTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIG1ldGFHZXR0ZXIoRXhlY1N0YXRlKiBleGVj
LCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIG1ldGFTZXR0ZXIoRXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0
cik7CisgICAgVmFsdWUgYmFzZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29u
c3Q7CisgICAgdm9pZCAgYmFzZVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29u
c3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBp
c0luZGV4R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lk
ICBpc0luZGV4U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYg
dmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIHN0eWxlR2V0dGVy
KEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBzdHlsZVNldHRl
cihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBE
T006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBib2R5R2V0dGVyKEV4ZWNTdGF0ZSogZXhl
YywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBib2R5U2V0dGVyKEV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBz
dHIpOworICAgIFZhbHVlIGZvcm1HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNv
bnN0OworICAgIHZvaWQgIGZvcm1TZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNv
bnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUg
c2VsZWN0R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lk
ICBzZWxlY3RTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2
YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgb3B0R3JvdXBHZXR0
ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIG9wdEdyb3Vw
U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNv
bnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIG9wdGlvbkdldHRlcihFeGVjU3Rh
dGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgb3B0aW9uU2V0dGVyKEV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9N
U3RyaW5nJiBzdHIpOworICAgIFZhbHVlIGlucHV0R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50
IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBpbnB1dFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsK
KyAgICBWYWx1ZSB0ZXh0QXJlYUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29u
c3Q7CisgICAgdm9pZCAgdGV4dEFyZWFTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4s
IGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFs
dWUgYnV0dG9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2
b2lkICBidXR0b25TZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVl
JiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgbGFiZWxHZXR0
ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGxhYmVsU2V0
dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0
IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIGZpZWxkU2V0R2V0dGVyKEV4ZWNTdGF0
ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBmaWVsZFNldFNldHRlcihFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRP
TVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBsZWdlbmRHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBp
bnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGxlZ2VuZFNldHRlcihFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3Ry
KTsKKyAgICBWYWx1ZSB1TGlzdEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29u
c3Q7CisgICAgdm9pZCAgdUxpc3RTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNv
bnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUg
b0xpc3RHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQg
IG9MaXN0U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFs
dWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIGRMaXN0R2V0dGVyKEV4
ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBkTGlzdFNldHRlcihF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006
OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBkaXJHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBp
bnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGRpclNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsK
KyAgICBWYWx1ZSBtZW51R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsK
KyAgICB2b2lkICBtZW51U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBW
YWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIGxpR2V0
dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBsaVNldHRl
cihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBE
T006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBkaXZHZXR0ZXIoRXhlY1N0YXRlKiBleGVj
LCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGRpdlNldHRlcihFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3Ry
KTsKKyAgICBWYWx1ZSBwYXJhZ3JhcGhHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4p
IGNvbnN0OworICAgIHZvaWQgIHBhcmFncmFwaFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAg
ICBWYWx1ZSBoZWFkaW5nR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsK
KyAgICB2b2lkICBoZWFkaW5nU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25z
dCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIGJs
b2NrUXVvdGVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZv
aWQgIGJsb2NrUXVvdGVTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZh
bHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgcXVvdGVH
ZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIHF1b3Rl
U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNv
bnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIHByZUdldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgcHJlU2V0dGVyKEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5n
JiBzdHIpOworICAgIFZhbHVlIGJyR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBj
b25zdDsKKyAgICB2b2lkICBiclNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29u
c3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBi
YXNlRm9udEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9p
ZCAgYmFzZUZvbnRTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVl
JiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgZm9udEdldHRl
cihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgZm9udFNldHRl
cihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBE
T006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBockdldHRlcihFeGVjU3RhdGUqIGV4ZWMs
IGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgaHJTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7
CisgICAgVmFsdWUgbW9kR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsK
KyAgICB2b2lkICBtb2RTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZh
bHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgYW5jaG9y
R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBhbmNo
b3JTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwg
Y29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgaW1hZ2VHZXR0ZXIoRXhlY1N0
YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGltYWdlU2V0dGVyKEV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9N
U3RyaW5nJiBzdHIpOworICAgIFZhbHVlIG9iamVjdEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGlu
dCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgb2JqZWN0U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIp
OworICAgIFZhbHVlIHBhcmFtR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25z
dDsKKyAgICB2b2lkICBwYXJhbVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29u
c3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBh
cHBsZXRHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQg
IGFwcGxldFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZh
bHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBtYXBHZXR0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIG1hcFNldHRlcihFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRP
TVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBhcmVhR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50
IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBhcmVhU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOwor
ICAgIFZhbHVlIHNjcmlwdEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7
CisgICAgdm9pZCAgc2NyaXB0U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25z
dCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIHRh
YmxlR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICB0
YWJsZVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVl
LCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSB0YWJsZUNhcHRpb25HZXR0
ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIHRhYmxlQ2Fw
dGlvblNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVl
LCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSB0YWJsZUNvbEdldHRlcihF
eGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgdGFibGVDb2xTZXR0
ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3Qg
RE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgdGFibGVTZWN0aW9uR2V0dGVyKEV4ZWNT
dGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICB0YWJsZVNlY3Rpb25TZXR0
ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3Qg
RE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgdGFibGVSb3dHZXR0ZXIoRXhlY1N0YXRl
KiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIHRhYmxlUm93U2V0dGVyKEV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9N
U3RyaW5nJiBzdHIpOworICAgIFZhbHVlIHRhYmxlQ2VsbEdldHRlcihFeGVjU3RhdGUqIGV4ZWMs
IGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgdGFibGVDZWxsU2V0dGVyKEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5n
JiBzdHIpOworICAgIFZhbHVlIGZyYW1lU2V0R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRv
a2VuKSBjb25zdDsKKyAgICB2b2lkICBmcmFtZVNldFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsK
KyAgICBWYWx1ZSBmcmFtZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7
CisgICAgdm9pZCAgZnJhbWVTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0
IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgaUZy
YW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBp
RnJhbWVTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1
ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgbWFycXVlZUdldHRlcihF
eGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgbWFycXVlZVNldHRl
cihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBE
T006OkRPTVN0cmluZyYgc3RyKTsKKwogICAgIGVudW0geyBIdG1sVmVyc2lvbiwgSGVhZFByb2Zp
bGUsIExpbmtIcmVmLCBMaW5rUmVsLCBMaW5rTWVkaWEsCiAgICAgICAgICAgIExpbmtDaGFyc2V0
LCBMaW5rRGlzYWJsZWQsIExpbmtIcmVmTGFuZywgTGlua1JldiwgTGlua1RhcmdldCwgTGlua1R5
cGUsCiAgICAgICAgICAgIExpbmtTaGVldCwgVGl0bGVUZXh0LCBNZXRhTmFtZSwgTWV0YUh0dHBF
cXVpdiwgTWV0YUNvbnRlbnQsIE1ldGFTY2hlbWUsCkluZGV4OiBraHRtbC9lY21hL2tqc193aW5k
b3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VjbWEv
a2pzX3dpbmRvdy5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTU5CmRpZmYgLXUgLXAgLXIx
LjE1OSBraHRtbC9lY21hL2tqc193aW5kb3cuY3BwCi0tLSBraHRtbC9lY21hL2tqc193aW5kb3cu
Y3BwCTE0IEp1biAyMDA1IDAwOjI5OjQwIC0wMDAwCTEuMTU5CisrKyBraHRtbC9lY21hL2tqc193
aW5kb3cuY3BwCTE3IEp1biAyMDA1IDAxOjMyOjM5IC0wMDAwCkBAIC02OCw3ICs2OCw2IEBACiAj
aW5jbHVkZSAiaHRtbC9odG1sX2RvY3VtZW50aW1wbC5oIgogI2luY2x1ZGUgImNzcy9jc3NfcnVs
ZWltcGwuaCIKICNpbmNsdWRlICJjc3MvY3NzX3N0eWxlc2hlZXRpbXBsLmgiCi0jaW5jbHVkZSAi
bWlzYy9odG1sdGFncy5oIgogCiAvLyBNdXN0IGluY2x1ZGUgPGNtYXRoPiBpbnN0ZWFkIG9mIDxt
YXRoLmg+IGJlY2F1c2Ugb2YgYSBidWcgaW4gdGhlCiAvLyBnY2MgMy4zIGxpYnJhcnkgdmVyc2lv
biBvZiA8bWF0aC5oPiB3aGVyZSBpZiB5b3UgaW5jbHVkZSBib3RoCkluZGV4OiBraHRtbC9odG1s
L2R0ZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRt
bC9kdGQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjM4CmRpZmYgLXUgLXAgLXIxLjM4IGto
dG1sL2h0bWwvZHRkLmNwcAotLS0ga2h0bWwvaHRtbC9kdGQuY3BwCTEyIEFwciAyMDA1IDIyOjQ5
OjQxIC0wMDAwCTEuMzgKKysrIGtodG1sL2h0bWwvZHRkLmNwcAkxNyBKdW4gMjAwNSAwMTozMjoz
OSAtMDAwMApAQCAtNDQsNiArNDQsNyBAQCB1c2luZyBuYW1lc3BhY2UgRE9NOwogLy8gOCB0YWJs
ZQogLy8gOSBib2R5IGZyYW1lc2V0CiAvLyAxMCBodG1sCisvKgogY29uc3QgdW5zaWduZWQgc2hv
cnQgRE9NOjp0YWdQcmlvcml0eUFycmF5W10gPSB7CiAgICAgMCwgLy8gMAogICAgIDEsIC8vIElE
X0EgPT0gMQpAQCAtNTcsOCArNTgsNiBAQCBjb25zdCB1bnNpZ25lZCBzaG9ydCBET006OnRhZ1By
aW9yaXR5QXJyCiAgICAgMCwgLy8gSURfQkFTRUZPTlQKICAgICAxLCAvLyBJRF9CRE8KICAgICAx
LCAvLyBJRF9CSUcKLSAgICA1LCAvLyBJRF9CTE9DS1FVT1RFCi0gICAxMCwgLy8gSURfQk9EWQog
ICAgIDAsIC8vIElEX0JSCiAgICAgMSwgLy8gSURfQlVUVE9OCiAgICAgMCwgLy8gSURfQ0FOVkFT
CkBAIC03Miw3ICs3MSw2IEBAIGNvbnN0IHVuc2lnbmVkIHNob3J0IERPTTo6dGFnUHJpb3JpdHlB
cnIKICAgICAxLCAvLyBJRF9ERUwKICAgICAxLCAvLyBJRF9ERk4KICAgICA1LCAvLyBJRF9ESVIK
LSAgICA1LCAvLyBJRF9ESVYKICAgICA1LCAvLyBJRF9ETAogICAgIDMsIC8vIElEX0RUCiAgICAg
MSwgLy8gSURfRU0KQEAgLTgwLDE5ICs3OCw3IEBAIGNvbnN0IHVuc2lnbmVkIHNob3J0IERPTTo6
dGFnUHJpb3JpdHlBcnIKICAgICAzLCAvLyBJRF9GSUVMRFNFVAogICAgIDEsIC8vIElEX0ZPTlQK
ICAgICAzLCAvLyBJRF9GT1JNCi0gICAgMCwgLy8gSURfRlJBTUUKLSAgIDEwLC8vIElEX0ZSQU1F
U0VUCi0gICAgNSwgLy8gSURfSDEKLSAgICA1LCAvLyBJRF9IMgotICAgIDUsIC8vIElEX0gzCi0g
ICAgNSwgLy8gSURfSDQKLSAgICA1LCAvLyBJRF9INQotICAgIDUsIC8vIElEX0g2Ci0gICAxMCwv
LyBJRF9IRUFECi0gICAgMCwgLy8gSURfSFIKLSAgIDExLC8vIElEX0hUTUwKICAgICAxLCAvLyBJ
RF9JCi0gICAgMSwgLy8gSURfSUZSQU1FCiAgICAgMCwgLy8gSURfSU1HCiAgICAgMCwgLy8gSURf
SU5QVVQKICAgICAxLCAvLyBJRF9JTlMKQEAgLTExNyw3ICsxMDMsNiBAQCBjb25zdCB1bnNpZ25l
ZCBzaG9ydCBET006OnRhZ1ByaW9yaXR5QXJyCiAgICAgNSwgLy8gSURfT0wKICAgICAxLCAvLyBJ
RF9PUFRHUk9VUAogICAgIDIsIC8vIElEX09QVElPTgotICAgIDMsIC8vIElEX1AKICAgICAwLCAv
LyBJRF9QQVJBTQogICAgIDUsIC8vIElEX1BMQUlOVEVYVAogICAgIDUsIC8vIElEX1BSRQpAQCAt
MTI3LDcgKzExMiw2IEBAIGNvbnN0IHVuc2lnbmVkIHNob3J0IERPTTo6dGFnUHJpb3JpdHlBcnIK
ICAgICAxLCAvLyBJRF9TQ1JJUFQKICAgICA2LCAvLyBJRF9TRUxFQ1QKICAgICAxLCAvLyBJRF9T
TUFMTAotICAgIDEsIC8vIElEX1NQQU4KICAgICAxLCAvLyBJRF9TVFJJS0UKICAgICAxLCAvLyBJ
RF9TVFJPTkcKICAgICAxLCAvLyBJRF9TVFlMRQpAQCAtMTY0LDggKzE0OCw2IEBAIGNvbnN0IHRh
Z1N0YXR1cyBET006OmVuZFRhZ0FycmF5W10gPSB7CiAgICAgRk9SQklEREVOLCAvLyBJRF9CQVNF
Rk9OVAogICAgIFJFUVVJUkVELCAgLy8gSURfQkRPCiAgICAgUkVRVUlSRUQsICAvLyBJRF9CSUcK
LSAgICBSRVFVSVJFRCwgIC8vIElEX0JMT0NLUVVPVEUKLSAgICBSRVFVSVJFRCwgIC8vIElEX0JP
RFkKICAgICBGT1JCSURERU4sIC8vIElEX0JSCiAgICAgUkVRVUlSRUQsICAvLyBJRF9CVVRUT04K
ICAgICBGT1JCSURERU4sIC8vIElEX0NBTlZBUwpAQCAtMTc5LDcgKzE2MSw2IEBAIGNvbnN0IHRh
Z1N0YXR1cyBET006OmVuZFRhZ0FycmF5W10gPSB7CiAgICAgUkVRVUlSRUQsICAvLyBJRF9ERUwK
ICAgICBSRVFVSVJFRCwgIC8vIElEX0RGTgogICAgIFJFUVVJUkVELCAgLy8gSURfRElSCi0gICAg
UkVRVUlSRUQsICAvLyBJRF9ESVYKICAgICBSRVFVSVJFRCwgIC8vIElEX0RMCiAgICAgT1BUSU9O
QUwsICAvLyBJRF9EVAogICAgIFJFUVVJUkVELCAgLy8gSURfRU0KQEAgLTE4NywxOSArMTY4LDgg
QEAgY29uc3QgdGFnU3RhdHVzIERPTTo6ZW5kVGFnQXJyYXlbXSA9IHsKICAgICBSRVFVSVJFRCwg
IC8vIElEX0ZJRUxEU0VUCiAgICAgUkVRVUlSRUQsICAvLyBJRF9GT05UCiAgICAgUkVRVUlSRUQs
ICAvLyBJRF9GT1JNCi0gICAgRk9SQklEREVOLCAvLyBJRF9GUkFNRQogICAgIFJFUVVJUkVELCAg
Ly8gSURfRlJBTUVTRVQKLSAgICBSRVFVSVJFRCwgIC8vIElEX0gxCi0gICAgUkVRVUlSRUQsICAv
LyBJRF9IMgotICAgIFJFUVVJUkVELCAgLy8gSURfSDMKLSAgICBSRVFVSVJFRCwgIC8vIElEX0g0
Ci0gICAgUkVRVUlSRUQsICAvLyBJRF9INQotICAgIFJFUVVJUkVELCAgLy8gSURfSDYKLSAgICBP
UFRJT05BTCwgIC8vIElEX0hFQUQKLSAgICBGT1JCSURERU4sIC8vIElEX0hSCi0gICAgUkVRVUlS
RUQsICAvLyBJRF9IVE1MCi0gICAgUkVRVUlSRUQsICAvLyBJRF9JCi0gICAgUkVRVUlSRUQsICAv
LyBJRF9JRlJBTUUKKyAgICAgIFJFUVVJUkVELCAgLy8gSURfSQogICAgIEZPUkJJRERFTiwgLy8g
SURfSU1HCiAgICAgRk9SQklEREVOLCAvLyBJRF9JTlBVVAogICAgIFJFUVVJUkVELCAgLy8gSURf
SU5TCkBAIC0yMjQsNyArMTk0LDYgQEAgY29uc3QgdGFnU3RhdHVzIERPTTo6ZW5kVGFnQXJyYXlb
XSA9IHsKICAgICBSRVFVSVJFRCwgIC8vIElEX09MCiAgICAgUkVRVUlSRUQsICAvLyBJRF9PUFRH
Uk9VUAogICAgIE9QVElPTkFMLCAgLy8gSURfT1BUSU9OCi0gICAgT1BUSU9OQUwsICAvLyBJRF9Q
CiAgICAgRk9SQklEREVOLCAvLyBJRF9QQVJBTQogICAgIFJFUVVJUkVELCAgLy8gSURfUExBSU5U
RVhUCiAgICAgUkVRVUlSRUQsICAvLyBJRF9QUkUKQEAgLTIzNCw3ICsyMDMsNiBAQCBjb25zdCB0
YWdTdGF0dXMgRE9NOjplbmRUYWdBcnJheVtdID0gewogICAgIFJFUVVJUkVELCAgLy8gSURfU0NS
SVBUCiAgICAgUkVRVUlSRUQsICAvLyBJRF9TRUxFQ1QKICAgICBSRVFVSVJFRCwgIC8vIElEX1NN
QUxMCi0gICAgUkVRVUlSRUQsICAvLyBJRF9TUEFOCiAgICAgUkVRVUlSRUQsICAvLyBJRF9TVFJJ
S0UKICAgICBSRVFVSVJFRCwgIC8vIElEX1NUUk9ORwogICAgIFJFUVVJUkVELCAgLy8gSURfU1RZ
TEUKQEAgLTI1OCw2ICsyMjYsNyBAQCBjb25zdCB0YWdTdGF0dXMgRE9NOjplbmRUYWdBcnJheVtd
ID0gewogICAgIFJFUVVJUkVEICAgLy8gSURfVEVYVAogfTsKIAorKi8KIAogc3RhdGljIGNvbnN0
IHVzaG9ydCB0YWdfbGlzdF8wW10gPSB7CiAgICAgSURfVEVYVCwKQEAgLTc2NywyMjMgKzczNiwz
IEBAIGJvb2wgRE9NOjpjaGVja0NoaWxkKHVzaG9ydCB0YWdJRCwgdXNob3IKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KIH0KLQotdm9pZCBET006OmFkZEZvcmJpZGRlbihpbnQgdGFnSWQs
IHVzaG9ydCAqZm9yYmlkZGVuVGFncykKLXsKLSAgICBzd2l0Y2godGFnSWQpCi0gICAgewotICAg
IGNhc2UgSURfTEFCRUw6Ci0gICAgICAgIGZvcmJpZGRlblRhZ3NbSURfTEFCRUxdKys7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgSURfQlVUVE9OOgotICAgICAgICBmb3JiaWRkZW5UYWdzW0lE
X0FdKys7Ci0gICAgICAgIGZvcmJpZGRlblRhZ3NbSURfSU5QVVRdKys7Ci0gICAgICAgIGZvcmJp
ZGRlblRhZ3NbSURfU0VMRUNUXSsrOwotICAgICAgICBmb3JiaWRkZW5UYWdzW0lEX1RFWFRBUkVB
XSsrOwotICAgICAgICBmb3JiaWRkZW5UYWdzW0lEX0xBQkVMXSsrOwotICAgICAgICBmb3JiaWRk
ZW5UYWdzW0lEX0JVVFRPTl0rKzsKLSAgICAgICAgZm9yYmlkZGVuVGFnc1tJRF9GT1JNXSsrOwot
ICAgICAgICBmb3JiaWRkZW5UYWdzW0lEX0lTSU5ERVhdKys7Ci0gICAgICAgIGZvcmJpZGRlblRh
Z3NbSURfRklFTERTRVRdKys7Ci0gICAgICAgIGZvcmJpZGRlblRhZ3NbSURfSUZSQU1FXSsrOwot
ICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0K
LXZvaWQgRE9NOjpyZW1vdmVGb3JiaWRkZW4oaW50IHRhZ0lkLCB1c2hvcnQgKmZvcmJpZGRlblRh
Z3MpCi17Ci0gICAgc3dpdGNoKHRhZ0lkKQotICAgIHsKLSAgICBjYXNlIElEX0xBQkVMOgotICAg
ICAgICBmb3JiaWRkZW5UYWdzW0lEX0xBQkVMXS0tOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IElEX0JVVFRPTjoKLSAgICAgICAgZm9yYmlkZGVuVGFnc1tJRF9BXS0tOwotICAgICAgICBmb3Ji
aWRkZW5UYWdzW0lEX0lOUFVUXS0tOwotICAgICAgICBmb3JiaWRkZW5UYWdzW0lEX1NFTEVDVF0t
LTsKLSAgICAgICAgZm9yYmlkZGVuVGFnc1tJRF9URVhUQVJFQV0tLTsKLSAgICAgICAgZm9yYmlk
ZGVuVGFnc1tJRF9MQUJFTF0tLTsKLSAgICAgICAgZm9yYmlkZGVuVGFnc1tJRF9CVVRUT05dLS07
Ci0gICAgICAgIGZvcmJpZGRlblRhZ3NbSURfRk9STV0tLTsKLSAgICAgICAgZm9yYmlkZGVuVGFn
c1tJRF9JU0lOREVYXS0tOwotICAgICAgICBmb3JiaWRkZW5UYWdzW0lEX0ZJRUxEU0VUXS0tOwot
ICAgICAgICBmb3JiaWRkZW5UYWdzW0lEX0lGUkFNRV0tLTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
ZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi0KLSNpZiAwCi0KLQotc3RydWN0
IGF0dHJfcHJpdiB7Ci0gICAgYXR0cl9wcml2KCkgeyBpZCA9IGxlbiA9IDAsIHZhbCA9IDA7IH0K
LSAgICBhdHRyX3ByaXYodXNob3J0IGksIGNvbnN0IFFDaGFyICp2LCB1c2hvcnQgbCkKLSAgICB7
IGlkID1pOyBsZW4gPSBsLCB2YWwgPSB2OyB9Ci0gICAgdXNob3J0IGlkOwotICAgIGNvbnN0IFFD
aGFyICp2YWw7Ci0gICAgdXNob3J0IGxlbjsKLX07Ci0KLURPTVN0cmluZyBmaW5kX2F0dHIodXNo
b3J0IGlkLCBjb25zdCBhdHRyX3ByaXYgKmF0dHJzKQotewotICAgIGludCBpID0gMDsKLSAgICB3
aGlsZShhdHRyc1tpXS5pZCAhPSAwKQotICAgIHsKLSAgICAgICAgaWYoYXR0cnNbaV0uaWQgPT0g
aWQpCi0gICAgICAgICAgICByZXR1cm4gRE9NU3RyaW5nKGF0dHJzW2ldLnZhbCwgYXR0cnNbaV0u
bGVuKTsKLSAgICAgICAgaSsrOwotICAgIH0KLSAgICByZXR1cm4gRE9NU3RyaW5nKCk7Ci19Ci0K
LXN0YXRpYyBjb25zdCBRQ2hhciB2YWx1ZV8xXzAgW10gPSB7ICdOJywnTycsJ04nLCdFJyB9Owot
Ci1hdHRyX3ByaXYgYXR0cl9saXN0XzFbXSA9IHsKLSAgICBhdHRyX3ByaXYoQVRUUl9DTEVBUiwg
dmFsdWVfMV8wLCA0KQotfTsKLQotc3RhdGljIGNvbnN0IFFDaGFyIHZhbHVlXzJfMCBbXSA9IHsg
J1InLCdFJywnQycsJ1QnIH07Ci0KLWF0dHJfcHJpdiBhdHRyX2xpc3RfMltdID0gewotICAgIGF0
dHJfcHJpdihBVFRSX1NIQVBFLCB2YWx1ZV8yXzAsIDQpCi19OwotCi1zdGF0aWMgY29uc3QgUUNo
YXIgdmFsdWVfM18wIFtdID0geyAnUicsJ0UnLCdDJywnVCcgfTsKLQotYXR0cl9wcml2IGF0dHJf
bGlzdF8zW10gPSB7Ci0gICAgYXR0cl9wcml2KEFUVFJfU0hBUEUsIHZhbHVlXzNfMCwgNCkKLX07
Ci0KLXN0YXRpYyBjb25zdCBRQ2hhciB2YWx1ZV80XzAgW10gPSB7ICdEJywnQScsJ1QnLCdBJyB9
OwotCi1hdHRyX3ByaXYgYXR0cl9saXN0XzRbXSA9IHsKLSAgICBhdHRyX3ByaXYoQVRUUl9WQUxV
RVRZUEUsIHZhbHVlXzRfMCwgNCkKLX07Ci0KLXN0YXRpYyBjb25zdCBRQ2hhciB2YWx1ZV81XzAg
W10gPSB7ICdHJywnRScsJ1QnIH07Ci1zdGF0aWMgY29uc3QgUUNoYXIgdmFsdWVfNV8xIFtdID0g
eyAnQScsJ1AnLCdQJywnTCcsJ0knLCdDJywnQScsJ1QnLCdJJywnTycsJ04nLCcvJywnWCcsJy0n
LCdXJywnVycsJ1cnLCctJywnRicsJ08nLCdSJywnTScsJy0nLCdVJywnUicsJ0wnLCdFJywnTics
J0MnLCdPJywnRCcsJ0UnLCdEJyB9OwotCi1hdHRyX3ByaXYgYXR0cl9saXN0XzVbXSA9IHsKLSAg
ICBhdHRyX3ByaXYoQVRUUl9NRVRIT0QsIHZhbHVlXzVfMCwgMyksCi0gICAgYXR0cl9wcml2KEFU
VFJfRU5DVFlQRSwgdmFsdWVfNV8xLCAzMykKLX07Ci0KLXN0YXRpYyBjb25zdCBRQ2hhciB2YWx1
ZV82XzAgW10gPSB7ICdUJywnRScsJ1gnLCdUJyB9OwotCi1hdHRyX3ByaXYgYXR0cl9saXN0XzZb
XSA9IHsKLSAgICBhdHRyX3ByaXYoQVRUUl9UWVBFLCB2YWx1ZV82XzAsIDQpCi19OwotCi1zdGF0
aWMgY29uc3QgUUNoYXIgdmFsdWVfN18wIFtdID0geyAnUycsJ1UnLCdCJywnTScsJ0knLCdUJyB9
OwotCi1hdHRyX3ByaXYgYXR0cl9saXN0XzdbXSA9IHsKLSAgICBhdHRyX3ByaXYoQVRUUl9UWVBF
LCB2YWx1ZV83XzAsIDYpCi19OwotCi1zdGF0aWMgY29uc3QgUUNoYXIgdmFsdWVfOF8wIFtdID0g
eyAnMScgfTsKLQotYXR0cl9wcml2IGF0dHJfbGlzdF84W10gPSB7Ci0gICAgYXR0cl9wcml2KEFU
VFJfU1BBTiwgdmFsdWVfOF8wLCAxKQotfTsKLQotc3RhdGljIGNvbnN0IFFDaGFyIHZhbHVlXzlf
MCBbXSA9IHsgJzEnIH07Ci0KLWF0dHJfcHJpdiBhdHRyX2xpc3RfOVtdID0gewotICAgIGF0dHJf
cHJpdihBVFRSX1NQQU4sIHZhbHVlXzlfMCwgMSkKLX07Ci0KLXN0YXRpYyBjb25zdCBRQ2hhciB2
YWx1ZV8xMF8wIFtdID0geyAnMScgfTsKLXN0YXRpYyBjb25zdCBRQ2hhciB2YWx1ZV8xMF8xIFtd
ID0geyAnMScgfTsKLQotYXR0cl9wcml2IGF0dHJfbGlzdF8xMFtdID0gewotICAgIGF0dHJfcHJp
dihBVFRSX1JPV1NQQU4sIHZhbHVlXzEwXzAsIDEpLAotICAgIGF0dHJfcHJpdihBVFRSX0NPTFNQ
QU4sIHZhbHVlXzEwXzEsIDEpCi19OwotCi1zdGF0aWMgY29uc3QgUUNoYXIgdmFsdWVfMTFfMCBb
XSA9IHsgJzEnIH07Ci1zdGF0aWMgY29uc3QgUUNoYXIgdmFsdWVfMTFfMSBbXSA9IHsgJ0EnLCdV
JywnVCcsJ08nIH07Ci0KLWF0dHJfcHJpdiBhdHRyX2xpc3RfMTFbXSA9IHsKLSAgICBhdHRyX3By
aXYoQVRUUl9GUkFNRUJPUkRFUiwgdmFsdWVfMTFfMCwgMSksCi0gICAgYXR0cl9wcml2KEFUVFJf
U0NST0xMSU5HLCB2YWx1ZV8xMV8xLCA0KQotfTsKLQotc3RhdGljIGNvbnN0IFFDaGFyIHZhbHVl
XzEyXzAgW10gPSB7ICcxJyB9Owotc3RhdGljIGNvbnN0IFFDaGFyIHZhbHVlXzEyXzEgW10gPSB7
ICdBJywnVScsJ1QnLCdPJyB9OwotCi1hdHRyX3ByaXYgYXR0cl9saXN0XzEyW10gPSB7Ci0gICAg
YXR0cl9wcml2KEFUVFJfRlJBTUVCT1JERVIsIHZhbHVlXzEyXzAsIDEpLAotICAgIGF0dHJfcHJp
dihBVFRSX1NDUk9MTElORywgdmFsdWVfMTJfMSwgNCkKLX07Ci0KLXN0YXRpYyBjb25zdCBRQ2hh
ciB2YWx1ZV8xM18wIFtdID0geyAnLScsJy8nLCcvJywnVycsJzMnLCdDJywnLycsJy8nLCdEJywn
VCcsJ0QnIH07Ci1zdGF0aWMgY29uc3QgUUNoYXIgdmFsdWVfMTNfMSBbXSA9IHsgJ1QnLCdSJywn
QScsJ04nLCdTJywnSScsJ1QnLCdJJywnTycsJ04nLCdBJywnTCcsJy8nLCcvJywnRScsJ04nIH07
Ci0KLWF0dHJfcHJpdiBhdHRyX2xpc3RfMTNbXSA9IHsKLSAgICBhdHRyX3ByaXYoQVRUUl9WRVJT
SU9OLCB2YWx1ZV8xM18wLCAxMSksCi0gICAgYXR0cl9wcml2KEFUVFJfSFRNTCwgdmFsdWVfMTNf
MSwgMTYpCi19OwotCi1ET01TdHJpbmcgRE9NOjpmaW5kRGVmQXR0ck5vbmUodXNob3J0KQotewot
ICAgIHJldHVybiBET01TdHJpbmcoKTsKLX07Ci1ET01TdHJpbmcgRE9NOjpmaW5kRGVmQXR0ckJS
KHVzaG9ydCBpZCkKLXsKLSAgICByZXR1cm4gZmluZF9hdHRyKGlkLCBhdHRyX2xpc3RfMSk7Ci19
Ci1ET01TdHJpbmcgRE9NOjpmaW5kRGVmQXR0ckEodXNob3J0IGlkKQotewotICAgIHJldHVybiBm
aW5kX2F0dHIoaWQsIGF0dHJfbGlzdF8yKTsKLX0KLURPTVN0cmluZyBET006OmZpbmREZWZBdHRy
QVJFQSh1c2hvcnQgaWQpCi17Ci0gICAgcmV0dXJuIGZpbmRfYXR0cihpZCwgYXR0cl9saXN0XzMp
OwotfQotRE9NU3RyaW5nIERPTTo6ZmluZERlZkF0dHJQQVJBTSh1c2hvcnQgaWQpCi17Ci0gICAg
cmV0dXJuIGZpbmRfYXR0cihpZCwgYXR0cl9saXN0XzQpOwotfQotRE9NU3RyaW5nIERPTTo6Zmlu
ZERlZkF0dHJGT1JNKHVzaG9ydCBpZCkKLXsKLSAgICByZXR1cm4gZmluZF9hdHRyKGlkLCBhdHRy
X2xpc3RfNSk7Ci19Ci1ET01TdHJpbmcgRE9NOjpmaW5kRGVmQXR0cklOUFVUKHVzaG9ydCBpZCkK
LXsKLSAgICByZXR1cm4gZmluZF9hdHRyKGlkLCBhdHRyX2xpc3RfNik7Ci19Ci1ET01TdHJpbmcg
RE9NOjpmaW5kRGVmQXR0ckJVVFRPTih1c2hvcnQgaWQpCi17Ci0gICAgcmV0dXJuIGZpbmRfYXR0
cihpZCwgYXR0cl9saXN0XzcpOwotfQotRE9NU3RyaW5nIERPTTo6ZmluZERlZkF0dHJDT0xHUk9V
UCh1c2hvcnQgaWQpCi17Ci0gICAgcmV0dXJuIGZpbmRfYXR0cihpZCwgYXR0cl9saXN0XzgpOwot
fQotRE9NU3RyaW5nIERPTTo6ZmluZERlZkF0dHJDT0wodXNob3J0IGlkKQotewotICAgIHJldHVy
biBmaW5kX2F0dHIoaWQsIGF0dHJfbGlzdF85KTsKLX0KLURPTVN0cmluZyBET006OmZpbmREZWZB
dHRyVEgodXNob3J0IGlkKQotewotICAgIHJldHVybiBmaW5kX2F0dHIoaWQsIGF0dHJfbGlzdF8x
MCk7Ci19Ci1ET01TdHJpbmcgRE9NOjpmaW5kRGVmQXR0ckZSQU1FKHVzaG9ydCBpZCkKLXsKLSAg
ICByZXR1cm4gZmluZF9hdHRyKGlkLCBhdHRyX2xpc3RfMTEpOwotfQotRE9NU3RyaW5nIERPTTo6
ZmluZERlZkF0dHJJRlJBTUUodXNob3J0IGlkKQotewotICAgIHJldHVybiBmaW5kX2F0dHIoaWQs
IGF0dHJfbGlzdF8xMik7Ci19Ci1ET01TdHJpbmcgRE9NOjpmaW5kRGVmQXR0ckhUTUwodXNob3J0
IGlkKQotewotICAgIHJldHVybiBmaW5kX2F0dHIoaWQsIGF0dHJfbGlzdF8xMyk7Ci19Ci0KLSNl
bmRpZgpJbmRleDoga2h0bWwvaHRtbC9kdGQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvV2ViQ29yZS9raHRtbC9odG1sL2R0ZC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjUKZGlm
ZiAtdSAtcCAtcjEuNSBraHRtbC9odG1sL2R0ZC5oCi0tLSBraHRtbC9odG1sL2R0ZC5oCTEyIEFw
ciAyMDA1IDIyOjQ5OjQxIC0wMDAwCTEuNQorKysga2h0bWwvaHRtbC9kdGQuaAkxNyBKdW4gMjAw
NSAwMTozMjozOSAtMDAwMApAQCAtMjMsMzYgKzIzLDExIEBACiAjZGVmaW5lIF9ET01fZHRkX2hf
CiAKICNpbmNsdWRlICJkb20vZG9tX3N0cmluZy5oIgotI2luY2x1ZGUgIm1pc2MvaHRtbHRhZ3Mu
aCIKIAogbmFtZXNwYWNlIERPTQogewogCi12b2lkIGFkZEZvcmJpZGRlbihpbnQgdGFnSWQsIHVz
aG9ydCAqZm9yYmlkZGVuVGFncyk7Ci12b2lkIHJlbW92ZUZvcmJpZGRlbihpbnQgdGFnSWQsIHVz
aG9ydCAqZm9yYmlkZGVuVGFncyk7Ci0KLWVudW0gdGFnU3RhdHVzIHsgT1BUSU9OQUwsIFJFUVVJ
UkVELCBGT1JCSURERU4gfTsKLQogYm9vbCBjaGVja0NoaWxkKHVzaG9ydCB0YWdJRCwgdXNob3J0
IGNoaWxkSUQsIGJvb2wgc3RyaWN0KTsKIAotZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIHNob3J0IHRh
Z1ByaW9yaXR5QXJyYXlbXTsKLWV4dGVybiBjb25zdCB0YWdTdGF0dXMgZW5kVGFnQXJyYXlbXTsK
LQotaW5saW5lIHVuc2lnbmVkIHNob3J0IHRhZ1ByaW9yaXR5KFFfVUlOVDMyIHRhZ0lkKQotewot
ICAgIC8vIFRyZWF0IGN1c3RvbSBlbGVtZW50cyB0aGUgc2FtZSBhcyA8c3Bhbj47IGFsc28gZG9u
J3QgcmVhZCBwYXN0IHRoZSBlbmQgb2YgdGhlIGFycmF5LgotICAgIGlmICh0YWdJZCA+IElEX0xB
U1RfVEFHKQotICAgICAgICByZXR1cm4gdGFnUHJpb3JpdHlBcnJheVtJRF9TUEFOXTsKLSAgICBy
ZXR1cm4gdGFnUHJpb3JpdHlBcnJheVt0YWdJZF07Ci19Ci0KLWlubGluZSB0YWdTdGF0dXMgZW5k
VGFnUmVxdWlyZW1lbnQoUV9VSU5UMzIgdGFnSWQpCi17Ci0gICAgLy8gVHJlYXQgY3VzdG9tIGVs
ZW1lbnRzIHRoZSBzYW1lIGFzIDxzcGFuPjsgYWxzbyBkb24ndCByZWFkIHBhc3QgdGhlIGVuZCBv
ZiB0aGUgYXJyYXkuCi0gICAgaWYgKHRhZ0lkID4gSURfTEFTVF9UQUcpCi0gICAgICAgIHJldHVy
biBlbmRUYWdBcnJheVtJRF9TUEFOXTsKLSAgICByZXR1cm4gZW5kVGFnQXJyYXlbdGFnSWRdOwot
fQotCiB9IC8vbmFtZXNwYWNlIERPTQogI2VuZGlmCkluZGV4OiBraHRtbC9odG1sL2h0bWxfYmFz
ZWltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0
bWwvaHRtbF9iYXNlaW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNzIKZGlmZiAtdSAt
cCAtcjEuNzIga2h0bWwvaHRtbC9odG1sX2Jhc2VpbXBsLmNwcAotLS0ga2h0bWwvaHRtbC9odG1s
X2Jhc2VpbXBsLmNwcAkxMiBNYXkgMjAwNSAxNzoxMToyMSAtMDAwMAkxLjcyCisrKyBraHRtbC9o
dG1sL2h0bWxfYmFzZWltcGwuY3BwCTE3IEp1biAyMDA1IDAxOjMyOjQwIC0wMDAwCkBAIC00OCw3
ICs0OCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBET007CiB1c2luZyBuYW1lc3BhY2Uga2h0bWw7CiAK
IEhUTUxCb2R5RWxlbWVudEltcGw6OkhUTUxCb2R5RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRv
YykKLSAgICA6IEhUTUxFbGVtZW50SW1wbChkb2MpLCBtX2xpbmtEZWNsKDApCisgICAgOiBIVE1M
RWxlbWVudEltcGwoSFRNTE5hbWVzOjpib2R5KCksIGRvYyksIG1fbGlua0RlY2woMCkKIHsKIH0K
IApAQCAtNjEsMTEgKzYxLDYgQEAgSFRNTEJvZHlFbGVtZW50SW1wbDo6fkhUTUxCb2R5RWxlbWVu
dEltcAogICAgIH0KIH0KIAotTm9kZUltcGw6OklkIEhUTUxCb2R5RWxlbWVudEltcGw6OmlkKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gSURfQk9EWTsKLX0KLQogdm9pZCBIVE1MQm9keUVsZW1lbnRJ
bXBsOjpjcmVhdGVMaW5rRGVjbCgpCiB7CiAgICAgbV9saW5rRGVjbCA9IG5ldyBDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbkltcGw7CkBAIC0yODksNyArMjg0LDE4IEBAIHZvaWQgSFRNTEJvZHlF
bGVtZW50SW1wbDo6c2V0VkxpbmsoY29uc3QKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogSFRNTEZy
YW1lRWxlbWVudEltcGw6OkhUTUxGcmFtZUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0g
ICAgOiBIVE1MRWxlbWVudEltcGwoZG9jKQorICAgIDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1l
czo6ZnJhbWUoKSwgZG9jKQoreworICAgIGluaXQoKTsKK30KKworSFRNTEZyYW1lRWxlbWVudElt
cGw6OkhUTUxGcmFtZUVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERv
Y3VtZW50UHRyICpkb2MpCisgICAgOiBIVE1MRWxlbWVudEltcGwodGFnTmFtZSwgZG9jKQorewor
ICAgIGluaXQoKTsKK30KKwordm9pZCBIVE1MRnJhbWVFbGVtZW50SW1wbDo6aW5pdCgpCiB7CiAg
ICAgbV9mcmFtZUJvcmRlciA9IHRydWU7CiAgICAgbV9mcmFtZUJvcmRlclNldCA9IGZhbHNlOwpA
QCAtMzAzLDExICszMDksNiBAQCBIVE1MRnJhbWVFbGVtZW50SW1wbDo6fkhUTUxGcmFtZUVsZW1l
bnRJCiB7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MRnJhbWVFbGVtZW50SW1wbDo6aWQoKSBjb25z
dAotewotICAgIHJldHVybiBJRF9GUkFNRTsKLX0KLQogYm9vbCBIVE1MRnJhbWVFbGVtZW50SW1w
bDo6aXNVUkxBbGxvd2VkKGNvbnN0IEF0b21pY1N0cmluZyAmVVJMU3RyaW5nKSBjb25zdAogewog
ICAgIGlmIChVUkxTdHJpbmcuaXNFbXB0eSgpKSB7CkBAIC00ODIsNyArNDgzLDcgQEAgdm9pZCBI
VE1MRnJhbWVFbGVtZW50SW1wbDo6YXR0YWNoKCkKIAogICAgIC8vIGluaGVyaXQgZGVmYXVsdCBz
ZXR0aW5ncyBmcm9tIHBhcmVudCBmcmFtZXNldAogICAgIGZvciAoTm9kZUltcGwgKm5vZGUgPSBw
YXJlbnROb2RlKCk7IG5vZGU7IG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCkpCi0gICAgICAgIGlm
IChub2RlLT5pZCgpID09IElEX0ZSQU1FU0VUKSB7CisgICAgICAgIGlmIChub2RlLT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6ZnJhbWVzZXQoKSkpIHsKICAgICAgICAgICAgIEhUTUxGcmFtZVNldEVs
ZW1lbnRJbXBsKiBmcmFtZXNldCA9IHN0YXRpY19jYXN0PEhUTUxGcmFtZVNldEVsZW1lbnRJbXBs
Kj4obm9kZSk7CiAgICAgICAgICAgICBpZiAoIW1fZnJhbWVCb3JkZXJTZXQpCiAgICAgICAgICAg
ICAgICAgbV9mcmFtZUJvcmRlciA9IGZyYW1lc2V0LT5mcmFtZUJvcmRlcigpOwpAQCAtNjYxLDcg
KzY2Miw3IEBAIHZvaWQgSFRNTEZyYW1lRWxlbWVudEltcGw6OnNldFNyYyhjb25zdCAKIC8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KIAogSFRNTEZyYW1lU2V0RWxlbWVudEltcGw6OkhUTUxGcmFtZVNldEVs
ZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0gICAgOiBIVE1MRWxlbWVudEltcGwoZG9jKQor
ICAgIDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6ZnJhbWVzZXQoKSwgZG9jKQogewogICAg
IC8vIGRlZmF1bHQgdmFsdWUgZm9yIHJvd3MgYW5kIGNvbHMuLi4KICAgICBtX3RvdGFsUm93cyA9
IDE7CkBAIC02ODUsMTEgKzY4Niw2IEBAIEhUTUxGcmFtZVNldEVsZW1lbnRJbXBsOjp+SFRNTEZy
YW1lU2V0RWwKICAgICAgICAgZGVsZXRlIFtdIG1fY29sczsKIH0KIAotTm9kZUltcGw6OklkIEhU
TUxGcmFtZVNldEVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0ZSQU1F
U0VUOwotfQotCiB2b2lkIEhUTUxGcmFtZVNldEVsZW1lbnRJbXBsOjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICphdHRyKQogewogICAgIHN3aXRjaChhdHRyLT5pZCgp
KQpAQCAtNzUyLDggKzc0OCw3IEBAIHZvaWQgSFRNTEZyYW1lU2V0RWxlbWVudEltcGw6OmF0dGFj
aCgpCiAgICAgSFRNTEVsZW1lbnRJbXBsKiBub2RlID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJ
bXBsKj4ocGFyZW50Tm9kZSgpKTsKICAgICB3aGlsZShub2RlKQogICAgIHsKLSAgICAgICAgaWYo
bm9kZS0+aWQoKSA9PSBJRF9GUkFNRVNFVCkKLSAgICAgICAgeworICAgICAgICBpZiAobm9kZS0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZyYW1lc2V0KCkpKSB7CiAgICAgICAgICAgICBIVE1MRnJh
bWVTZXRFbGVtZW50SW1wbCogZnJhbWVzZXQgPSBzdGF0aWNfY2FzdDxIVE1MRnJhbWVTZXRFbGVt
ZW50SW1wbCo+KG5vZGUpOwogICAgICAgICAgICAgaWYoIWZyYW1lQm9yZGVyU2V0KSAgZnJhbWVi
b3JkZXIgPSBmcmFtZXNldC0+ZnJhbWVCb3JkZXIoKTsKICAgICAgICAgICAgIGlmKCFub3Jlc2l6
ZSkgIG5vcmVzaXplID0gZnJhbWVzZXQtPm5vUmVzaXplKCk7CkBAIC04MTcsNyArODEyLDcgQEAg
dm9pZCBIVE1MRnJhbWVTZXRFbGVtZW50SW1wbDo6c2V0Um93cyhjbwogLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQogCiBIVE1MSGVhZEVsZW1lbnRJbXBsOjpIVE1MSGVhZEVsZW1lbnRJbXBsKERvY3VtZW50
UHRyICpkb2MpCi0gICAgOiBIVE1MRWxlbWVudEltcGwoZG9jKQorICAgIDogSFRNTEVsZW1lbnRJ
bXBsKEhUTUxOYW1lczo6aGVhZCgpLCBkb2MpCiB7CiB9CiAKQEAgLTgyNSwxMSArODIwLDYgQEAg
SFRNTEhlYWRFbGVtZW50SW1wbDo6fkhUTUxIZWFkRWxlbWVudEltcAogewogfQogCi1Ob2RlSW1w
bDo6SWQgSFRNTEhlYWRFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9I
RUFEOwotfQotCiBET01TdHJpbmcgSFRNTEhlYWRFbGVtZW50SW1wbDo6cHJvZmlsZSgpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIGdldEF0dHJpYnV0ZShBVFRSX1BST0ZJTEUpOwpAQCAtODQzLDcgKzgz
Myw3IEBAIHZvaWQgSFRNTEhlYWRFbGVtZW50SW1wbDo6c2V0UHJvZmlsZShjb24KIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KIAogSFRNTEh0bWxFbGVtZW50SW1wbDo6SFRNTEh0bWxFbGVtZW50SW1wbChE
b2N1bWVudFB0ciAqZG9jKQotICAgIDogSFRNTEVsZW1lbnRJbXBsKGRvYykKKyAgICA6IEhUTUxF
bGVtZW50SW1wbChIVE1MTmFtZXM6Omh0bWwoKSwgZG9jKQogewogfQogCkBAIC04NTEsMTEgKzg0
MSw2IEBAIEhUTUxIdG1sRWxlbWVudEltcGw6On5IVE1MSHRtbEVsZW1lbnRJbXAKIHsKIH0KIAot
Tm9kZUltcGw6OklkIEhUTUxIdG1sRWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gSURfSFRNTDsKLX0KLQogRE9NU3RyaW5nIEhUTUxIdG1sRWxlbWVudEltcGw6OnZlcnNpb24o
KSBjb25zdAogewogICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoQVRUUl9WRVJTSU9OKTsKQEAgLTg2
OCw3ICs4NTMsNyBAQCB2b2lkIEhUTUxIdG1sRWxlbWVudEltcGw6OnNldFZlcnNpb24oY29uCiAK
IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSFRNTElGcmFtZUVsZW1lbnRJbXBsOjpIVE1MSUZyYW1l
RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykgOiBIVE1MRnJhbWVFbGVtZW50SW1wbChkb2Mp
CitIVE1MSUZyYW1lRWxlbWVudEltcGw6OkhUTUxJRnJhbWVFbGVtZW50SW1wbChEb2N1bWVudFB0
ciAqZG9jKSA6IEhUTUxGcmFtZUVsZW1lbnRJbXBsKEhUTUxOYW1lczo6aWZyYW1lKCksIGRvYykK
IHsKICAgICBtX2ZyYW1lQm9yZGVyID0gZmFsc2U7CiAgICAgbV9tYXJnaW5XaWR0aCA9IC0xOwpA
QCAtODgwLDExICs4NjUsNiBAQCBIVE1MSUZyYW1lRWxlbWVudEltcGw6On5IVE1MSUZyYW1lRWxl
bWVuCiB7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MSUZyYW1lRWxlbWVudEltcGw6OmlkKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gSURfSUZSQU1FOwotfQotCiBib29sIEhUTUxJRnJhbWVFbGVtZW50
SW1wbDo6bWFwVG9FbnRyeShOb2RlSW1wbDo6SWQgYXR0ciwgTWFwcGVkQXR0cmlidXRlRW50cnkm
IHJlc3VsdCkgY29uc3QKIHsKICAgICBzd2l0Y2ggKGF0dHIpIHsKSW5kZXg6IGtodG1sL2h0bWwv
aHRtbF9iYXNlaW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2to
dG1sL2h0bWwvaHRtbF9iYXNlaW1wbC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjI3CmRpZmYg
LXUgLXAgLXIxLjI3IGtodG1sL2h0bWwvaHRtbF9iYXNlaW1wbC5oCi0tLSBraHRtbC9odG1sL2h0
bWxfYmFzZWltcGwuaAkxMSBNYXkgMjAwNSAwNTo0OTozNCAtMDAwMAkxLjI3CisrKyBraHRtbC9o
dG1sL2h0bWxfYmFzZWltcGwuaAkxNyBKdW4gMjAwNSAwMTozMjo0MCAtMDAwMApAQCAtMjYsNyAr
MjYsNiBAQAogI2lmbmRlZiBIVE1MX0JBU0VJTVBMX0gKICNkZWZpbmUgSFRNTF9CQVNFSU1QTF9I
CiAKLSNpbmNsdWRlICJodG1sL2R0ZC5oIgogI2luY2x1ZGUgImh0bWwvaHRtbF9lbGVtZW50aW1w
bC5oIgogI2luY2x1ZGUgIm1pc2Mva2h0bWxsYXlvdXQuaCIKIApAQCAtNTUsOCArNTQsOCBAQCBw
dWJsaWM6CiAgICAgSFRNTEJvZHlFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKTsKICAgICB+
SFRNTEJvZHlFbGVtZW50SW1wbCgpOwogCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwotCisg
ICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAxMDsgfQorICAgCiAg
ICAgdmlydHVhbCBib29sIG1hcFRvRW50cnkoTm9kZUltcGw6OklkIGF0dHIsIE1hcHBlZEF0dHJp
YnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0
dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICopOwogCkBAIC05MiwxMSArOTEsMTQgQEAgY2xh
c3MgSFRNTEZyYW1lRWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTAogCiBwdWJsaWM6CiAgICAgSFRN
TEZyYW1lRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYyk7Ci0KKyAgICBIVE1MRnJhbWVFbGVt
ZW50SW1wbChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudFB0ciogZG9jKTsK
ICAgICB+SFRNTEZyYW1lRWxlbWVudEltcGwoKTsKIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25z
dDsKKyAgICB2b2lkIGluaXQoKTsKIAorICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdy
ZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIEZPUkJJRERFTjsgfQorICAgIHZpcnR1YWwgaW50
IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMDsgfQorICAKICAgICB2aXJ0dWFsIHZvaWQg
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqKTsKICAgICB2aXJ0dWFs
IHZvaWQgYXR0YWNoKCk7CiAgICAgdmlydHVhbCB2b2lkIGRldGFjaCgpOwpAQCAtMTcxLDcgKzE3
Myw3IEBAIHB1YmxpYzoKIAogICAgIH5IVE1MRnJhbWVTZXRFbGVtZW50SW1wbCgpOwogCi0gICAg
dmlydHVhbCBJZCBpZCgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29u
c3QgeyByZXR1cm4gMTA7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0
ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICopOwogICAgIHZpcnR1YWwgdm9pZCBhdHRhY2goKTsKQEAg
LTIxOSw3ICsyMjEsOCBAQCBwdWJsaWM6CiAKICAgICB+SFRNTEhlYWRFbGVtZW50SW1wbCgpOwog
Ci0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OworICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBl
bmRUYWdyZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIE9QVElPTkFMOyB9CisgICAgdmlydHVh
bCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAxMDsgfQogCiAgICAgRE9NU3RyaW5n
IHByb2ZpbGUoKSBjb25zdDsKICAgICB2b2lkIHNldFByb2ZpbGUoY29uc3QgRE9NU3RyaW5nICYp
OwpAQCAtMjMzLDcgKzIzNiw3IEBAIHB1YmxpYzoKICAgICBIVE1MSHRtbEVsZW1lbnRJbXBsKERv
Y3VtZW50UHRyICpkb2MpOwogICAgIH5IVE1MSHRtbEVsZW1lbnRJbXBsKCk7CiAKLSAgICB2aXJ0
dWFsIElkIGlkKCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7
IHJldHVybiAxMTsgfQogCiAgICAgRE9NU3RyaW5nIHZlcnNpb24oKSBjb25zdDsKICAgICB2b2lk
IHNldFZlcnNpb24oY29uc3QgRE9NU3RyaW5nICYpOwpAQCAtMjQ2LDExICsyNDksOCBAQCBjbGFz
cyBIVE1MSUZyYW1lRWxlbWVudEltcGwgOiBwdWJsaWMgSFRNCiB7CiBwdWJsaWM6CiAgICAgSFRN
TElGcmFtZUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpOwotCiAgICAgfkhUTUxJRnJhbWVF
bGVtZW50SW1wbCgpOwogCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwotCiAgICAgdmlydHVh
bCBib29sIG1hcFRvRW50cnkoTm9kZUltcGw6OklkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5
JiByZXN1bHQpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShN
YXBwZWRBdHRyaWJ1dGVJbXBsICphdHRyKTsKIApJbmRleDoga2h0bWwvaHRtbC9odG1sX2Jsb2Nr
aW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRt
bC9odG1sX2Jsb2NraW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTcKZGlmZiAtdSAt
cCAtcjEuMTcga2h0bWwvaHRtbC9odG1sX2Jsb2NraW1wbC5jcHAKLS0tIGtodG1sL2h0bWwvaHRt
bF9ibG9ja2ltcGwuY3BwCTExIE1heSAyMDA1IDA1OjQ5OjM0IC0wMDAwCTEuMTcKKysrIGtodG1s
L2h0bWwvaHRtbF9ibG9ja2ltcGwuY3BwCTE3IEp1biAyMDA1IDAxOjMyOjQwIC0wMDAwCkBAIC0z
Nyw3ICszNyw3IEBAIHVzaW5nIG5hbWVzcGFjZSBraHRtbDsKIHVzaW5nIG5hbWVzcGFjZSBET007
CiAKIEhUTUxCbG9ja3F1b3RlRWxlbWVudEltcGw6OkhUTUxCbG9ja3F1b3RlRWxlbWVudEltcGwo
RG9jdW1lbnRQdHIgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50SW1wbChkb2MpCisgICAgOiBIVE1M
RWxlbWVudEltcGwoSFRNTE5hbWVzOjpibG9ja3F1b3RlKCksIGRvYykKIHsKIH0KIApAQCAtNDUs
MTEgKzQ1LDYgQEAgSFRNTEJsb2NrcXVvdGVFbGVtZW50SW1wbDo6fkhUTUxCbG9ja3F1bwogewog
fQogCi1Ob2RlSW1wbDo6SWQgSFRNTEJsb2NrcXVvdGVFbGVtZW50SW1wbDo6aWQoKSBjb25zdAot
ewotICAgIHJldHVybiBJRF9CTE9DS1FVT1RFOwotfQotCiBET01TdHJpbmcgSFRNTEJsb2NrcXVv
dGVFbGVtZW50SW1wbDo6Y2l0ZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGdldEF0dHJpYnV0ZShB
VFRSX0NJVEUpOwpAQCAtNjMsNyArNTgsNyBAQCB2b2lkIEhUTUxCbG9ja3F1b3RlRWxlbWVudElt
cGw6OnNldENpdGUoCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxEaXZFbGVtZW50SW1wbDo6
SFRNTERpdkVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0gICAgOiBIVE1MRWxlbWVudElt
cGwoZG9jKQorICAgIDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6ZGl2KCksIGRvYykKIHsK
IH0KIApAQCAtNzEsMTEgKzY2LDYgQEAgSFRNTERpdkVsZW1lbnRJbXBsOjp+SFRNTERpdkVsZW1l
bnRJbXBsKAogewogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTERpdkVsZW1lbnRJbXBsOjppZCgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIElEX0RJVjsKLX0KLQogYm9vbCBIVE1MRGl2RWxlbWVudEltcGw6
Om1hcFRvRW50cnkoTm9kZUltcGw6OklkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1
bHQpIGNvbnN0CiB7CiAgICAgaWYgKGF0dHIgPT0gQVRUUl9BTElHTikgewpAQCAtMTIwLDcgKzEx
MCw3IEBAIHZvaWQgSFRNTERpdkVsZW1lbnRJbXBsOjpzZXRBbGlnbihjb25zdCAKIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KIAogSFRNTEhSRWxlbWVudEltcGw6OkhUTUxIUkVsZW1lbnRJbXBsKERvY3Vt
ZW50UHRyICpkb2MpCi0gICAgOiBIVE1MRWxlbWVudEltcGwoZG9jKQorICAgIDogSFRNTEVsZW1l
bnRJbXBsKEhUTUxOYW1lczo6aHIoKSwgZG9jKQogewogfQogCkBAIC0xMjgsMTEgKzExOCw2IEBA
IEhUTUxIUkVsZW1lbnRJbXBsOjp+SFRNTEhSRWxlbWVudEltcGwoKQogewogfQogCi1Ob2RlSW1w
bDo6SWQgSFRNTEhSRWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfSFI7
Ci19Ci0KIGJvb2wgSFRNTEhSRWxlbWVudEltcGw6Om1hcFRvRW50cnkoTm9kZUltcGw6OklkIGF0
dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChh
dHRyKSB7CkBAIC0yNTIsOCArMjM3LDggQEAgdm9pZCBIVE1MSFJFbGVtZW50SW1wbDo6c2V0V2lk
dGgoY29uc3QgRAogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUhUTUxIZWFkaW5nRWxlbWVudElt
cGw6OkhUTUxIZWFkaW5nRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgdXNob3J0IF90YWdp
ZCkKLSAgICA6IEhUTUxHZW5lcmljRWxlbWVudEltcGwoZG9jLCBfdGFnaWQpCitIVE1MSGVhZGlu
Z0VsZW1lbnRJbXBsOjpIVE1MSGVhZGluZ0VsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUm
IHRhZ05hbWUsIERvY3VtZW50UHRyICpkb2MpCisgICAgOiBIVE1MRWxlbWVudEltcGwodGFnTmFt
ZSwgZG9jKQogewogfQogCkBAIC0yNzAsMTMgKzI1NSw4IEBAIHZvaWQgSFRNTEhlYWRpbmdFbGVt
ZW50SW1wbDo6c2V0QWxpZ24oY28KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogSFRNTFBhcmFncmFw
aEVsZW1lbnRJbXBsOjpIVE1MUGFyYWdyYXBoRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykK
LSAgICA6IEhUTUxFbGVtZW50SW1wbChkb2MpCi17Ci19Ci0KLU5vZGVJbXBsOjpJZCBIVE1MUGFy
YWdyYXBoRWxlbWVudEltcGw6OmlkKCkgY29uc3QKKyAgICA6IEhUTUxFbGVtZW50SW1wbChIVE1M
TmFtZXM6OnAoKSwgZG9jKQogewotICAgIHJldHVybiBJRF9QOwogfQogCiBib29sIEhUTUxQYXJh
Z3JhcGhFbGVtZW50SW1wbDo6bWFwVG9FbnRyeShOb2RlSW1wbDo6SWQgYXR0ciwgTWFwcGVkQXR0
cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3QKQEAgLTMyMiw4ICszMDIsOCBAQCB2b2lkIEhUTUxQ
YXJhZ3JhcGhFbGVtZW50SW1wbDo6c2V0QWxpZ24oCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAot
SFRNTFByZUVsZW1lbnRJbXBsOjpIVE1MUHJlRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywg
dW5zaWduZWQgc2hvcnQgX3RhZ2lkKQotICAgIDogSFRNTEdlbmVyaWNFbGVtZW50SW1wbChkb2Ms
IF90YWdpZCkKK0hUTUxQcmVFbGVtZW50SW1wbDo6SFRNTFByZUVsZW1lbnRJbXBsKGNvbnN0IFF1
YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50UHRyICpkb2MpCisgICAgOiBIVE1MRWxlbWVu
dEltcGwodGFnTmFtZSwgZG9jKQogewogfQogCkBAIC0zNDMsMTYgKzMyMywxMSBAQCB2b2lkIEhU
TUxQcmVFbGVtZW50SW1wbDo6c2V0V2lkdGgobG9uZyB3CiBjb25zdCBpbnQgZGVmYXVsdE1pbmlt
dW1EZWxheSA9IDYwOwogCiBIVE1MTWFycXVlZUVsZW1lbnRJbXBsOjpIVE1MTWFycXVlZUVsZW1l
bnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi06IEhUTUxFbGVtZW50SW1wbChkb2MpLAorOiBIVE1M
RWxlbWVudEltcGwoSFRNTE5hbWVzOjptYXJxdWVlKCksIGRvYyksCiAgIG1fbWluaW11bURlbGF5
KGRlZmF1bHRNaW5pbXVtRGVsYXkpCiB7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MTWFycXVlZUVs
ZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX01BUlFVRUU7Ci19Ci0KIGJv
b2wgSFRNTE1hcnF1ZWVFbGVtZW50SW1wbDo6bWFwVG9FbnRyeShOb2RlSW1wbDo6SWQgYXR0ciwg
TWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3QKIHsKICAgICBzd2l0Y2ggKGF0dHIp
IHsKQEAgLTQzNCwxOSArNDA5LDMgQEAgdm9pZCBIVE1MTWFycXVlZUVsZW1lbnRJbXBsOjpwYXJz
ZU1hcHBlZAogICAgICAgICAgICAgSFRNTEVsZW1lbnRJbXBsOjpwYXJzZU1hcHBlZEF0dHJpYnV0
ZShhdHRyKTsKICAgICB9CiB9Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1IVE1MTGF5ZXJFbGVt
ZW50SW1wbDo6SFRNTExheWVyRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgICA6IEhU
TUxEaXZFbGVtZW50SW1wbCggZG9jICkKLXsKLX0KLQotSFRNTExheWVyRWxlbWVudEltcGw6On5I
VE1MTGF5ZXJFbGVtZW50SW1wbCgpCi17Ci19Ci0KLU5vZGVJbXBsOjpJZCBIVE1MTGF5ZXJFbGVt
ZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9MQVlFUjsKLX0KSW5kZXg6IGto
dG1sL2h0bWwvaHRtbF9ibG9ja2ltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3Qv
V2ViQ29yZS9raHRtbC9odG1sL2h0bWxfYmxvY2tpbXBsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuOQpkaWZmIC11IC1wIC1yMS45IGtodG1sL2h0bWwvaHRtbF9ibG9ja2ltcGwuaAotLS0ga2h0
bWwvaHRtbC9odG1sX2Jsb2NraW1wbC5oCTExIE1heSAyMDA1IDA1OjQ5OjM0IC0wMDAwCTEuOQor
Kysga2h0bWwvaHRtbC9odG1sX2Jsb2NraW1wbC5oCTE3IEp1biAyMDA1IDAxOjMyOjQwIC0wMDAw
CkBAIC0yNiw3ICsyNiw2IEBACiAjZGVmaW5lIEhUTUxfQkxPQ0tJTVBMX0gKIAogI2luY2x1ZGUg
Imh0bWxfZWxlbWVudGltcGwuaCIKLSNpbmNsdWRlICJkdGQuaCIKIAogbmFtZXNwYWNlIERPTSB7
CiAKQEAgLTQwLDggKzM5LDggQEAgcHVibGljOgogICAgIEhUTUxCbG9ja3F1b3RlRWxlbWVudElt
cGwoRG9jdW1lbnRQdHIgKmRvYyk7CiAgICAgfkhUTUxCbG9ja3F1b3RlRWxlbWVudEltcGwoKTsK
IAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKLQorICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9y
aXR5KCkgY29uc3QgeyByZXR1cm4gNTsgfQorICAgIAogICAgIERPTVN0cmluZyBjaXRlKCkgY29u
c3Q7CiAgICAgdm9pZCBzZXRDaXRlKGNvbnN0IERPTVN0cmluZyAmKTsKIH07CkBAIC01NSw4ICs1
NCw4IEBAIGNsYXNzIEhUTUxEaXZFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MRWwKIHB1YmxpYzoK
ICAgICBIVE1MRGl2RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYyk7CiAgICAgfkhUTUxEaXZF
bGVtZW50SW1wbCgpOwotCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OworICAgIAorICAgIHZp
cnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gNTsgfQogICAgIAogICAgIHZp
cnR1YWwgYm9vbCBtYXBUb0VudHJ5KElkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1
bHQpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRB
dHRyaWJ1dGVJbXBsICp0b2tlbik7CkBAIC03Miw4ICs3MSw5IEBAIGNsYXNzIEhUTUxIUkVsZW1l
bnRJbXBsIDogcHVibGljIEhUTUxFbGUKIHB1YmxpYzoKICAgICBIVE1MSFJFbGVtZW50SW1wbChE
b2N1bWVudFB0ciAqZG9jKTsKICAgICB+SFRNTEhSRWxlbWVudEltcGwoKTsKLQotICAgIHZpcnR1
YWwgSWQgaWQoKSBjb25zdDsKKyAgICAKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFn
UmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBGT1JCSURERU47IH0KKyAgICB2aXJ0dWFsIGlu
dCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KICAgICAKICAgICB2aXJ0dWFsIGJv
b2wgbWFwVG9FbnRyeShJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25z
dDsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRl
SW1wbCAqKTsKQEAgLTkzLDEwICs5MywxMiBAQCBwdWJsaWM6CiAKIC8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KIAotY2xhc3MgSFRNTEhlYWRpbmdFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MR2VuZXJpY0Vs
ZW1lbnRJbXBsCitjbGFzcyBIVE1MSGVhZGluZ0VsZW1lbnRJbXBsIDogcHVibGljIEhUTUxFbGVt
ZW50SW1wbAogewogcHVibGljOgotICAgIEhUTUxIZWFkaW5nRWxlbWVudEltcGwoRG9jdW1lbnRQ
dHIgKmRvYywgdXNob3J0IF90YWdpZCk7CisgICAgSFRNTEhlYWRpbmdFbGVtZW50SW1wbChjb25z
dCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudFB0ciAqZG9jKTsKKworICAgIHZpcnR1
YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gNTsgfQogCiAgICAgRE9NU3RyaW5n
IGFsaWduKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRBbGlnbihjb25zdCBET01TdHJpbmcgJik7CkBA
IC0xMDQsMjEgKzEwNiwxNiBAQCBwdWJsaWM6CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotLyoK
LSAqIHdlcmUgbm90IHVzaW5nIEhUTUxFbGVtZW50SW1wbCBhcyBwYXJlbnQgY2xhc3MsIHNpbmNl
IGEKLSAqIHBhcmFncmFwaCBzaG91bGQgYmUgYWJsZSB0byBmbG93IGFyb3VuZCBhbGlnbmVkIG9i
amVjdHMuIFRodXMKLSAqIGEgPHA+IGVsZW1lbnQgaGFzIHRvIGJlIGlubGluZSwgYW5kIGlzIHJl
bmRlcmVkIGJ5Ci0gKiBIVE1MQmxvY2tJbXBsOjpjYWxjUGFyYWdyYXBoCi0gKi8KIGNsYXNzIEhU
TUxQYXJhZ3JhcGhFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MRWxlbWVudEltcGwKIHsKIHB1Ymxp
YzoKICAgICBIVE1MUGFyYWdyYXBoRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYyk7CiAKKyAg
ICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVy
biBPUFRJT05BTDsgfQorICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1
cm4gMzsgfQorICAgIAogICAgIHZpcnR1YWwgYm9vbCBtYXBUb0VudHJ5KElkIGF0dHIsIE1hcHBl
ZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1h
cHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICphdHRyKTsKLSAgICAKLSAgICB2aXJ0
dWFsIElkIGlkKCkgY29uc3Q7CiAKICAgICBET01TdHJpbmcgYWxpZ24oKSBjb25zdDsKICAgICB2
b2lkIHNldEFsaWduKGNvbnN0IERPTVN0cmluZyAmKTsKQEAgLTEyNiwxMyArMTIzLDEzIEBAIHB1
YmxpYzoKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1jbGFzcyBIVE1MUHJlRWxlbWVudEltcGwg
OiBwdWJsaWMgSFRNTEdlbmVyaWNFbGVtZW50SW1wbAorY2xhc3MgSFRNTFByZUVsZW1lbnRJbXBs
IDogcHVibGljIEhUTUxFbGVtZW50SW1wbAogewogcHVibGljOgotICAgIEhUTUxQcmVFbGVtZW50
SW1wbChEb2N1bWVudFB0ciAqZG9jLCB1c2hvcnQgX3RhZ2lkKTsKKyAgICBIVE1MUHJlRWxlbWVu
dEltcGwoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnRQdHIgKmRvYyk7CiAK
ICAgICBsb25nIHdpZHRoKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRXaWR0aCggbG9uZyB3ICk7Cisg
ICAgdm9pZCBzZXRXaWR0aChsb25nIHcpOwogfTsKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAt
MTQxLDggKzEzOCw2IEBAIGNsYXNzIEhUTUxNYXJxdWVlRWxlbWVudEltcGwgOiBwdWJsaWMgSFQK
IHsKIHB1YmxpYzoKICAgICBIVE1MTWFycXVlZUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2Mp
OwotCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwogICAgIAogICAgIHZpcnR1YWwgYm9vbCBt
YXBUb0VudHJ5KElkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0Owog
ICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBs
ICp0b2tlbik7CkBAIC0xNTMsMTggKzE0OCw1IEBAIHByaXZhdGU6CiAgICAgaW50IG1fbWluaW11
bURlbGF5OwogfTsKIAotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBIVE1MTGF5ZXJFbGVt
ZW50SW1wbCA6IHB1YmxpYyBIVE1MRGl2RWxlbWVudEltcGwKLXsKLXB1YmxpYzoKLSAgICBIVE1M
TGF5ZXJFbGVtZW50SW1wbCggRG9jdW1lbnRQdHIgKmRvYyApOwotICAgIH5IVE1MTGF5ZXJFbGVt
ZW50SW1wbCgpOwotCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwotCi0gICAgYm9vbCBmaXhl
ZDsKLX07Ci0KIH07IC8vbmFtZXNwYWNlCiAjZW5kaWYKSW5kZXg6IGtodG1sL2h0bWwvaHRtbF9k
b2N1bWVudGltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2to
dG1sL2h0bWwvaHRtbF9kb2N1bWVudGltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjYw
CmRpZmYgLXUgLXAgLXIxLjYwIGtodG1sL2h0bWwvaHRtbF9kb2N1bWVudGltcGwuY3BwCi0tLSBr
aHRtbC9odG1sL2h0bWxfZG9jdW1lbnRpbXBsLmNwcAkxMSBNYXkgMjAwNSAwMDo1ODoyOCAtMDAw
MAkxLjYwCisrKyBraHRtbC9odG1sL2h0bWxfZG9jdW1lbnRpbXBsLmNwcAkxNyBKdW4gMjAwNSAw
MTozMjo0MSAtMDAwMApAQCAtMjQ2LDcgKzI0Niw3IEBAIFRva2VuaXplciAqSFRNTERvY3VtZW50
SW1wbDo6Y3JlYXRlVG9rZW4KIGJvb2wgSFRNTERvY3VtZW50SW1wbDo6Y2hpbGRBbGxvd2VkKCBO
b2RlSW1wbCAqbmV3Q2hpbGQgKQogewogICAgIC8vICMjIyBzdXBwb3J0IGNvbW1lbnRzLiBldGMg
YXMgYSBjaGlsZAotICAgIHJldHVybiAobmV3Q2hpbGQtPmlkKCkgPT0gSURfSFRNTCB8fCBuZXdD
aGlsZC0+aWQoKSA9PSBJRF9DT01NRU5UKTsKKyAgICByZXR1cm4gKG5ld0NoaWxkLT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6aHRtbCgpKSB8fCBuZXdDaGlsZC0+aXNDb21tZW50Tm9kZSgpKTsKIH0K
IAogRWxlbWVudEltcGwgKkhUTUxEb2N1bWVudEltcGw6OmNyZWF0ZUVsZW1lbnQoIGNvbnN0IERP
TVN0cmluZyAmbmFtZSwgaW50ICZleGNlcHRpb25jb2RlICkKSW5kZXg6IGtodG1sL2h0bWwvaHRt
bF9lbGVtZW50aW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUv
a2h0bWwvaHRtbC9odG1sX2VsZW1lbnRpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS44
NwpkaWZmIC11IC1wIC1yMS44NyBraHRtbC9odG1sL2h0bWxfZWxlbWVudGltcGwuY3BwCi0tLSBr
aHRtbC9odG1sL2h0bWxfZWxlbWVudGltcGwuY3BwCTEzIE1heSAyMDA1IDE2OjQ4OjUxIC0wMDAw
CTEuODcKKysrIGtodG1sL2h0bWwvaHRtbF9lbGVtZW50aW1wbC5jcHAJMTcgSnVuIDIwMDUgMDE6
MzI6NDEgLTAwMDAKQEAgLTI4LDcgKzI4LDYgQEAKIC8vI2RlZmluZSBFVkVOVF9ERUJVRwogLy8j
ZGVmaW5lIFVOU1VQUE9SVEVEX0FUVFIKIAotI2luY2x1ZGUgImh0bWwvZHRkLmgiCiAjaW5jbHVk
ZSAiaHRtbC9odG1sX2VsZW1lbnRpbXBsLmgiCiAjaW5jbHVkZSAiaHRtbC9odG1sX2RvY3VtZW50
aW1wbC5oIgogI2luY2x1ZGUgImh0bWwvaHRtbHRva2VuaXplci5oIgpAQCAtNTgsOCArNTcsOCBA
QCB1c2luZyBuYW1lc3BhY2Uga2h0bWw7CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1IVE1MRWxlbWVudElt
cGw6OkhUTUxFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAgIDogU3R5bGVkRWxlbWVu
dEltcGwoZG9jKQorSFRNTEVsZW1lbnRJbXBsOjpIVE1MRWxlbWVudEltcGwoY29uc3QgUXVhbGlm
aWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnRQdHIgKmRvYykKKyAgICA6IFN0eWxlZEVsZW1lbnRJ
bXBsKHRhZ05hbWUsIGRvYykKIHsKIH0KIApAQCAtNjcsNTEgKzY2LDkgQEAgSFRNTEVsZW1lbnRJ
bXBsOjp+SFRNTEVsZW1lbnRJbXBsKCkKIHsKIH0KIAotYm9vbCBIVE1MRWxlbWVudEltcGw6Omlz
SW5saW5lKCkgY29uc3QKLXsKLSAgICBpZiAocmVuZGVyZXIoKSkKLSAgICAgICAgcmV0dXJuIEVs
ZW1lbnRJbXBsOjppc0lubGluZSgpOwotICAgIAotICAgIHN3aXRjaChpZCgpKSB7Ci0gICAgICAg
IGNhc2UgSURfQToKLSAgICAgICAgY2FzZSBJRF9GT05UOgotICAgICAgICBjYXNlIElEX1RUOgot
ICAgICAgICBjYXNlIElEX1U6Ci0gICAgICAgIGNhc2UgSURfQjoKLSAgICAgICAgY2FzZSBJRF9J
OgotICAgICAgICBjYXNlIElEX1M6Ci0gICAgICAgIGNhc2UgSURfU1RSSUtFOgotICAgICAgICBj
YXNlIElEX0JJRzoKLSAgICAgICAgY2FzZSBJRF9TTUFMTDoKLSAgICAKLSAgICAgICAgICAgIC8v
ICVwaHJhc2UKLSAgICAgICAgY2FzZSBJRF9FTToKLSAgICAgICAgY2FzZSBJRF9TVFJPTkc6Ci0g
ICAgICAgIGNhc2UgSURfREZOOgotICAgICAgICBjYXNlIElEX0NPREU6Ci0gICAgICAgIGNhc2Ug
SURfU0FNUDoKLSAgICAgICAgY2FzZSBJRF9LQkQ6Ci0gICAgICAgIGNhc2UgSURfVkFSOgotICAg
ICAgICBjYXNlIElEX0NJVEU6Ci0gICAgICAgIGNhc2UgSURfQUJCUjoKLSAgICAgICAgY2FzZSBJ
RF9BQ1JPTllNOgotICAgIAotICAgICAgICAgICAgLy8gJXNwZWNpYWwKLSAgICAgICAgY2FzZSBJ
RF9TVUI6Ci0gICAgICAgIGNhc2UgSURfU1VQOgotICAgICAgICBjYXNlIElEX1NQQU46Ci0gICAg
ICAgIGNhc2UgSURfTk9CUjoKLSAgICAgICAgY2FzZSBJRF9XQlI6Ci0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgICAgIAotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0
dXJuIEVsZW1lbnRJbXBsOjppc0lubGluZSgpOwotICAgIH0KLX0KLQogTm9kZUltcGwgKkhUTUxF
bGVtZW50SW1wbDo6Y2xvbmVOb2RlKGJvb2wgZGVlcCkKIHsKLSAgICBIVE1MRWxlbWVudEltcGwg
KmNsb25lID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KGdldERvY3VtZW50KCktPmNy
ZWF0ZUhUTUxFbGVtZW50KGxvY2FsTmFtZVBhcnQoaWQoKSkpKTsKKyAgICBIVE1MRWxlbWVudElt
cGwgKmNsb25lID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KGdldERvY3VtZW50KCkt
PmNyZWF0ZUhUTUxFbGVtZW50KGxvY2FsTmFtZSgpKSk7CiAgICAgaWYgKCFjbG9uZSkKICAgICAg
ICAgcmV0dXJuIDA7CiAKQEAgLTMyNSwyNiArMjgyLDE3IEBAIERPTVN0cmluZyBIVE1MRWxlbWVu
dEltcGw6Om91dGVyVGV4dCgpIGMKIERvY3VtZW50RnJhZ21lbnRJbXBsICpIVE1MRWxlbWVudElt
cGw6OmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudChjb25zdCBET01TdHJpbmcgJmh0bWwpCiB7CiAg
ICAgLy8gdGhlIGZvbGxvd2luZyBpcyBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIGRlZmluaXRpb24g
YXMgdXNlZCBieSBJRQotICAgIGlmKCBlbmRUYWdSZXF1aXJlbWVudChpZCgpKSA9PSBGT1JCSURE
RU4gKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAvLyBJRSBkaXNhbGxvd3MgaW5uZXJIVE1M
IG9uIGlubGluZSBlbGVtZW50cy4gSSBkb24ndCBzZWUgd2h5IHdlIHNob3VsZCBoYXZlIHRoaXMg
cmVzdHJpY3Rpb24sIGFzIG91cgotICAgIC8vIGRodG1sIGVuZ2luZSBjYW4gY29wZSB3aXRoIGl0
LiBMYXJzCi0gICAgLy9pZiAoIGlzSW5saW5lKCkgKSByZXR1cm4gZmFsc2U7Ci0gICAgc3dpdGNo
KCBpZCgpICkgewotICAgICAgICBjYXNlIElEX0NPTDoKLSAgICAgICAgY2FzZSBJRF9DT0xHUk9V
UDoKLSAgICAgICAgY2FzZSBJRF9GUkFNRVNFVDoKLSAgICAgICAgY2FzZSBJRF9IRUFEOgotICAg
ICAgICBjYXNlIElEX1NUWUxFOgotICAgICAgICBjYXNlIElEX1RJVExFOgotICAgICAgICAgICAg
cmV0dXJuIE5VTEw7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9
Ci0gICAgaWYgKCAhZ2V0RG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSApCi0gICAgICAgIHJl
dHVybiBOVUxMOworICAgIGlmIChlbmRUYWdSZXF1aXJlbWVudCgpID09IEZPUkJJRERFTikKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6Y29sKCkp
IHx8IGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmNvbGdyb3VwKCkpIHx8IGhhc0xvY2FsTmFtZShI
VE1MTmFtZXM6OmZyYW1lc2V0KCkpIHx8CisgICAgICAgIGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6
OmhlYWQoKSkgfHwgaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6c3R5bGUoKSkgfHwgaGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6dGl0bGUoKSkpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKCFn
ZXREb2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpKQorICAgICAgICByZXR1cm4gMDsKIAotICAg
IERvY3VtZW50RnJhZ21lbnRJbXBsICpmcmFnbWVudCA9IG5ldyBEb2N1bWVudEZyYWdtZW50SW1w
bCggZG9jUHRyKCkgKTsKKyAgICBEb2N1bWVudEZyYWdtZW50SW1wbCAqZnJhZ21lbnQgPSBuZXcg
RG9jdW1lbnRGcmFnbWVudEltcGwoZG9jUHRyKCkpOwogICAgIGZyYWdtZW50LT5yZWYoKTsKICAg
ICB7CiAgICAgICAgIEhUTUxUb2tlbml6ZXIgdG9rKGRvY1B0cigpLCBmcmFnbWVudCk7CkBAIC0z
NTgsMTQgKzMwNiwxNCBAQCBEb2N1bWVudEZyYWdtZW50SW1wbCAqSFRNTEVsZW1lbnRJbXBsOjpj
CiAgICAgaW50IGlnbm9yZWRFeGNlcHRpb25Db2RlOwogCiAgICAgLy8gd2UgbmVlZCB0byBwb3Ag
PGh0bWw+IGFuZCA8Ym9keT4gZWxlbWVudHMgYW5kIHJlbW92ZSA8aGVhZD4gdG8KLSAgICAvLyBh
Y2NvbWFkYXRlIGZvbGtzIHBhc3NpbmcgY29tcGxldGUgSFRNTCBkb2N1bWVudHMgdG8gbWFrZSB0
aGUKKyAgICAvLyBhY2NvbW1vZGF0ZSBmb2xrcyBwYXNzaW5nIGNvbXBsZXRlIEhUTUwgZG9jdW1l
bnRzIHRvIG1ha2UgdGhlCiAgICAgLy8gY2hpbGQgb2YgYW4gZWxlbWVudC4KIAogICAgIE5vZGVJ
bXBsICpuZXh0Tm9kZTsKICAgICBmb3IgKE5vZGVJbXBsICpub2RlID0gZnJhZ21lbnQtPmZpcnN0
Q2hpbGQoKTsgbm9kZSAhPSBOVUxMOyBub2RlID0gbmV4dE5vZGUpIHsKICAgICAgICAgbmV4dE5v
ZGUgPSBub2RlLT5uZXh0U2libGluZygpOwogCW5vZGUtPnJlZigpOwotICAgICAgICBpZiAobm9k
ZS0+aWQoKSA9PSBJRF9IVE1MIHx8IG5vZGUtPmlkKCkgPT0gSURfQk9EWSkgeworICAgICAgICBp
ZiAobm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omh0bWwoKSkgfHwgbm9kZS0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OmJvZHkoKSkpIHsKIAkgICAgTm9kZUltcGwgKmZpcnN0Q2hpbGQgPSBub2Rl
LT5maXJzdENoaWxkKCk7CiAgICAgICAgICAgICBpZiAoZmlyc3RDaGlsZCAhPSBOVUxMKSB7CiAg
ICAgICAgICAgICAgICAgbmV4dE5vZGUgPSBmaXJzdENoaWxkOwpAQCAtMzc5LDkgKzMyNyw5IEBA
IERvY3VtZW50RnJhZ21lbnRJbXBsICpIVE1MRWxlbWVudEltcGw6OmMKICAgICAgICAgICAgICAg
ICBjaGlsZC0+ZGVyZWYoKTsKIAkgICAgfQogICAgICAgICAgICAgZnJhZ21lbnQtPnJlbW92ZUNo
aWxkKG5vZGUsIGlnbm9yZWRFeGNlcHRpb25Db2RlKTsKLQl9IGVsc2UgaWYgKG5vZGUtPmlkKCkg
PT0gSURfSEVBRCkgeworCX0gZWxzZSBpZiAobm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omhl
YWQoKSkpCiAJICAgIGZyYWdtZW50LT5yZW1vdmVDaGlsZChub2RlLCBpZ25vcmVkRXhjZXB0aW9u
Q29kZSk7Ci0JfQorCiAgICAgICAgIC8vIEltcG9ydGFudCB0byBkbyB0aGlzIGRlcmVmIGFmdGVy
IHJlbW92ZUNoaWxkLCBiZWNhdXNlIGlmIHRoZSBvbmx5IHRoaW5nCiAgICAgICAgIC8vIGtlZXBp
bmcgYSBub2RlIGFyb3VuZCBpcyBhIHBhcmVudCB0aGF0IGlzIG5vbi0wLCByZW1vdmVDaGlsZCB3
aWxsIG5vdAogICAgICAgICAvLyBkZWxldGUgdGhlIG5vZGUuIFRoaXMgd29ya3MgZmluZSBpbiBK
YXZhU2NyaXB0IGJlY2F1c2UgdGhlcmUncyBhbHdheXMKQEAgLTQwMCw3ICszNDgsNyBAQCBEb2N1
bWVudEZyYWdtZW50SW1wbCAqSFRNTEVsZW1lbnRJbXBsOjpjCiAKIHZvaWQgSFRNTEVsZW1lbnRJ
bXBsOjpzZXRJbm5lckhUTUwoY29uc3QgRE9NU3RyaW5nICZodG1sLCBpbnQgJmV4Y2VwdGlvbikK
IHsKLSAgICBEb2N1bWVudEZyYWdtZW50SW1wbCAqZnJhZ21lbnQgPSBjcmVhdGVDb250ZXh0dWFs
RnJhZ21lbnQoIGh0bWwgKTsKKyAgICBEb2N1bWVudEZyYWdtZW50SW1wbCAqZnJhZ21lbnQgPSBj
cmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoaHRtbCk7CiAgICAgaWYgKGZyYWdtZW50ID09IE5VTEwp
IHsKIAlleGNlcHRpb24gPSBET01FeGNlcHRpb246Ok5PX01PRElGSUNBVElPTl9BTExPV0VEX0VS
UjsKICAgICAgICAgcmV0dXJuOwpAQCAtNDE4LDcgKzM2Niw3IEBAIHZvaWQgSFRNTEVsZW1lbnRJ
bXBsOjpzZXRPdXRlckhUTUwoY29uc3QKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBIVE1M
RWxlbWVudEltcGwgKnBhcmVudCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCAqPihwKTsK
LSAgICBEb2N1bWVudEZyYWdtZW50SW1wbCAqZnJhZ21lbnQgPSBwYXJlbnQtPmNyZWF0ZUNvbnRl
eHR1YWxGcmFnbWVudCggaHRtbCApOworICAgIERvY3VtZW50RnJhZ21lbnRJbXBsICpmcmFnbWVu
dCA9IHBhcmVudC0+Y3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KGh0bWwpOwogCiAgICAgaWYgKCFm
cmFnbWVudCkgewogCWV4Y2VwdGlvbiA9IERPTUV4Y2VwdGlvbjo6Tk9fTU9ESUZJQ0FUSU9OX0FM
TE9XRURfRVJSOwpAQCAtNDM0LDI5ICszODIsMTcgQEAgdm9pZCBIVE1MRWxlbWVudEltcGw6OnNl
dE91dGVySFRNTChjb25zdAogdm9pZCBIVE1MRWxlbWVudEltcGw6OnNldElubmVyVGV4dChjb25z
dCBET01TdHJpbmcgJnRleHQsIGludCAmZXhjZXB0aW9uKQogewogICAgIC8vIGZvbGxvd2luZyB0
aGUgSUUgc3BlY3MuCi0gICAgaWYgKGVuZFRhZ1JlcXVpcmVtZW50KGlkKCkpID09IEZPUkJJRERF
TikgeworICAgIGlmIChlbmRUYWdSZXF1aXJlbWVudCgpID09IEZPUkJJRERFTikgewogCWV4Y2Vw
dGlvbiA9IERPTUV4Y2VwdGlvbjo6Tk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgLy8gSUUgZGlzYWxsb3dzIGlubmVyVGV4dCBvbiBpbmxp
bmUgZWxlbWVudHMuIEkgZG9uJ3Qgc2VlIHdoeSB3ZSBzaG91bGQgaGF2ZSB0aGlzIHJlc3RyaWN0
aW9uLCBhcyBvdXIKLSAgICAvLyBkaHRtbCBlbmdpbmUgY2FuIGNvcGUgd2l0aCBpdC4gTGFycwot
ICAgIC8vaWYgKCBpc0lubGluZSgpICkgcmV0dXJuIGZhbHNlOwotICAgIHN3aXRjaCggaWQoKSAp
IHsKLSAgICAgICAgY2FzZSBJRF9DT0w6Ci0gICAgICAgIGNhc2UgSURfQ09MR1JPVVA6Ci0gICAg
ICAgIGNhc2UgSURfRlJBTUVTRVQ6Ci0gICAgICAgIGNhc2UgSURfSEVBRDoKLSAgICAgICAgY2Fz
ZSBJRF9IVE1MOgotICAgICAgICBjYXNlIElEX1RBQkxFOgotICAgICAgICBjYXNlIElEX1RCT0RZ
OgotICAgICAgICBjYXNlIElEX1RGT09UOgotICAgICAgICBjYXNlIElEX1RIRUFEOgotICAgICAg
ICBjYXNlIElEX1RSOgotICAgICAgICAgICAgZXhjZXB0aW9uID0gRE9NRXhjZXB0aW9uOjpOT19N
T0RJRklDQVRJT05fQUxMT1dFRF9FUlI7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsKKyAgICBpZiAoaGFzTG9jYWxOYW1lKEhUTUxOYW1l
czo6Y29sKCkpIHx8IGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmNvbGdyb3VwKCkpIHx8IGhhc0xv
Y2FsTmFtZShIVE1MTmFtZXM6OmZyYW1lc2V0KCkpIHx8CisgICAgICAgIGhhc0xvY2FsTmFtZShI
VE1MTmFtZXM6OmhlYWQoKSkgfHwgaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6aHRtbCgpKSB8fCBo
YXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0YWJsZSgpKSB8fCAKKyAgICAgICAgaGFzTG9jYWxOYW1l
KEhUTUxOYW1lczo6dGJvZHkoKSkgfHwgaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dGZvb3QoKSkg
fHwgaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dGhlYWQoKSkgfHwKKyAgICAgICAgaGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6dHIoKSkpIHsKKyAgICAgICAgZXhjZXB0aW9uID0gRE9NRXhjZXB0aW9u
OjpOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI7CisgICAgICAgIHJldHVybjsKICAgICB9CiAK
ICAgICByZW1vdmVDaGlsZHJlbigpOwpAQCAtNDY2LDI1ICs0MDIsMTcgQEAgdm9pZCBIVE1MRWxl
bWVudEltcGw6OnNldElubmVyVGV4dChjb25zdAogdm9pZCBIVE1MRWxlbWVudEltcGw6OnNldE91
dGVyVGV4dChjb25zdCBET01TdHJpbmcgJnRleHQsIGludCAmZXhjZXB0aW9uKQogewogICAgIC8v
IGZvbGxvd2luZyB0aGUgSUUgc3BlY3MuCi0gICAgaWYoIGVuZFRhZ1JlcXVpcmVtZW50KGlkKCkp
ID09IEZPUkJJRERFTiApIHsKKyAgICBpZiAoZW5kVGFnUmVxdWlyZW1lbnQoKSA9PSBGT1JCSURE
RU4pIHsKIAlleGNlcHRpb24gPSBET01FeGNlcHRpb246Ok5PX01PRElGSUNBVElPTl9BTExPV0VE
X0VSUjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBzd2l0Y2goIGlkKCkgKSB7Ci0gICAg
ICAgIGNhc2UgSURfQ09MOgotICAgICAgICBjYXNlIElEX0NPTEdST1VQOgotICAgICAgICBjYXNl
IElEX0ZSQU1FU0VUOgotICAgICAgICBjYXNlIElEX0hFQUQ6Ci0gICAgICAgIGNhc2UgSURfSFRN
TDoKLSAgICAgICAgY2FzZSBJRF9UQUJMRToKLSAgICAgICAgY2FzZSBJRF9UQk9EWToKLSAgICAg
ICAgY2FzZSBJRF9URk9PVDoKLSAgICAgICAgY2FzZSBJRF9USEVBRDoKLSAgICAgICAgY2FzZSBJ
RF9UUjoKLSAgICAgICAgICAgIGV4Y2VwdGlvbiA9IERPTUV4Y2VwdGlvbjo6Tk9fTU9ESUZJQ0FU
SU9OX0FMTE9XRURfRVJSOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICBpZiAoaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6Y29s
KCkpIHx8IGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmNvbGdyb3VwKCkpIHx8IGhhc0xvY2FsTmFt
ZShIVE1MTmFtZXM6OmZyYW1lc2V0KCkpIHx8CisgICAgICAgIGhhc0xvY2FsTmFtZShIVE1MTmFt
ZXM6OmhlYWQoKSkgfHwgaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6aHRtbCgpKSB8fCBoYXNMb2Nh
bE5hbWUoSFRNTE5hbWVzOjp0YWJsZSgpKSB8fCAKKyAgICAgICAgaGFzTG9jYWxOYW1lKEhUTUxO
YW1lczo6dGJvZHkoKSkgfHwgaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dGZvb3QoKSkgfHwgaGFz
TG9jYWxOYW1lKEhUTUxOYW1lczo6dGhlYWQoKSkgfHwKKyAgICAgICAgaGFzTG9jYWxOYW1lKEhU
TUxOYW1lczo6dHIoKSkpIHsKKyAgICAgICAgZXhjZXB0aW9uID0gRE9NRXhjZXB0aW9uOjpOT19N
T0RJRklDQVRJT05fQUxMT1dFRF9FUlI7CisgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBO
b2RlSW1wbCAqcGFyZW50ID0gcGFyZW50Tm9kZSgpOwpAQCAtNTI1LDE3ICs0NTMsNiBAQCB2b2lk
IEhUTUxFbGVtZW50SW1wbDo6c2V0T3V0ZXJUZXh0KGNvbnN0CiAgICAgfQogfQogCi0KLURPTVN0
cmluZyBIVE1MRWxlbWVudEltcGw6Om5hbWVzcGFjZVVSSSgpIGNvbnN0Ci17Ci0gICAgLy8gRm9y
IEhUTUwgZG9jdW1lbnRzLCB3ZSB0cmVhdCBIVE1MIGVsZW1lbnRzIGFzIGhhdmluZyBubyBuYW1l
c3BhY2UuIEJ1dCBmb3IgWE1MIGRvY3VtZW50cwotICAgIC8vIHRoZSBlbGVtZW50cyBoYXZlIHRo
ZSBuYW1lc3BhY2UgZGVmaW5lZCBpbiB0aGUgWEhUTUwgc3BlYwotICAgIGlmIChnZXREb2N1bWVu
dCgpLT5pc0hUTUxEb2N1bWVudCgpKQotICAgICAgICByZXR1cm4gRE9NU3RyaW5nKCk7Ci0gICAg
ZWxzZQotICAgICAgICByZXR1cm4gWEhUTUxfTkFNRVNQQUNFOwotfQotCiB2b2lkIEhUTUxFbGVt
ZW50SW1wbDo6YWRkSFRNTEFsaWdubWVudChNYXBwZWRBdHRyaWJ1dGVJbXBsKiBhdHRyKQogewog
ICAgIC8vcURlYnVnKCJhbGlnbm1lbnQgaXMgJXMiLCBhbGlnbm1lbnQuc3RyaW5nKCkubGF0aW4x
KCkgKTsKQEAgLTY4Miw5ICs1OTksOSBAQCBET01TdHJpbmcgSFRNTEVsZW1lbnRJbXBsOjp0b1N0
cmluZygpIGNvCiAJRE9NU3RyaW5nIHJlc3VsdCA9IG9wZW5UYWdTdGFydFRvU3RyaW5nKCk7CiAJ
cmVzdWx0ICs9ICI+IjsKIAotCWlmIChlbmRUYWdSZXF1aXJlbWVudChpZCgpKSA9PSBSRVFVSVJF
RCkgeworCWlmIChlbmRUYWdSZXF1aXJlbWVudCgpID09IFJFUVVJUkVEKSB7CiAJICAgIHJlc3Vs
dCArPSAiPC8iOwotCSAgICByZXN1bHQgKz0gdGFnTmFtZSgpOworCSAgICByZXN1bHQgKz0gbm9k
ZU5hbWUoKTsKIAkgICAgcmVzdWx0ICs9ICI+IjsKIAl9CiAKQEAgLTY5NCw3ICs2MTEsNyBAQCBE
T01TdHJpbmcgSFRNTEVsZW1lbnRJbXBsOjp0b1N0cmluZygpIGNvCiAgICAgcmV0dXJuIEVsZW1l
bnRJbXBsOjp0b1N0cmluZygpOwogfQogCi1ET01TdHJpbmcgSFRNTEVsZW1lbnRJbXBsOjppZERP
TSgpIGNvbnN0CitET01TdHJpbmcgSFRNTEVsZW1lbnRJbXBsOjppZCgpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIGdldEF0dHJpYnV0ZShBVFRSX0lEKTsKIH0KQEAgLTc0OSwxNSArNjY2LDMgQEAgU2hh
cmVkUHRyPEhUTUxDb2xsZWN0aW9uSW1wbD4gSFRNTEVsZW1lbgogICAgIHJldHVybiBTaGFyZWRQ
dHI8SFRNTENvbGxlY3Rpb25JbXBsPihuZXcgSFRNTENvbGxlY3Rpb25JbXBsKHRoaXMsIEhUTUxD
b2xsZWN0aW9uSW1wbDo6Tk9ERV9DSElMRFJFTikpOwogfQogCi0vLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0KLUhUTUxHZW5lcmljRWxlbWVudEltcGw6OkhUTUxHZW5lcmljRWxlbWVudEltcGwoRG9jdW1l
bnRQdHIgKmRvYywgdXNob3J0IGkpCi0gICAgOiBIVE1MRWxlbWVudEltcGwoZG9jKQotewotICAg
IG1fZWxlbWVudElkID0gaTsKLX0KLQotTm9kZUltcGw6OklkIEhUTUxHZW5lcmljRWxlbWVudElt
cGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9lbGVtZW50SWQ7Ci19CkluZGV4OiBraHRt
bC9odG1sL2h0bWxfZWxlbWVudGltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3Qv
V2ViQ29yZS9raHRtbC9odG1sL2h0bWxfZWxlbWVudGltcGwuaCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS4zNQpkaWZmIC11IC1wIC1yMS4zNSBraHRtbC9odG1sL2h0bWxfZWxlbWVudGltcGwuaAot
LS0ga2h0bWwvaHRtbC9odG1sX2VsZW1lbnRpbXBsLmgJMTEgTWF5IDIwMDUgMDU6NDk6MzQgLTAw
MDAJMS4zNQorKysga2h0bWwvaHRtbC9odG1sX2VsZW1lbnRpbXBsLmgJMTcgSnVuIDIwMDUgMDE6
MzI6NDIgLTAwMDAKQEAgLTI1LDI3ICsyNSwyNCBAQAogI2RlZmluZSBIVE1MX0VMRU1FTlRJTVBM
X0gKIAogI2luY2x1ZGUgInhtbC9kb21fZWxlbWVudGltcGwuaCIKLSNpbmNsdWRlIDxxcHRyZGlj
dC5oPgorI2luY2x1ZGUgImh0bWxuYW1lcy5oIgogCiBuYW1lc3BhY2UgRE9NIHsKIAogY2xhc3Mg
RG9jdW1lbnRGcmFnbWVudEltcGw7CiBjbGFzcyBET01TdHJpbmc7CiBjbGFzcyBIVE1MQ29sbGVj
dGlvbkltcGw7Ci0gICAgCisKK2VudW0gSFRNTFRhZ1N0YXR1cyB7IE9QVElPTkFMLCBSRVFVSVJF
RCwgRk9SQklEREVOIH07CisKIGNsYXNzIEhUTUxFbGVtZW50SW1wbCA6IHB1YmxpYyBTdHlsZWRF
bGVtZW50SW1wbAogewogcHVibGljOgotICAgIEhUTUxFbGVtZW50SW1wbChEb2N1bWVudFB0ciAq
ZG9jKTsKLQorICAgIEhUTUxFbGVtZW50SW1wbChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1l
LCBEb2N1bWVudFB0ciAqZG9jKTsKICAgICB2aXJ0dWFsIH5IVE1MRWxlbWVudEltcGwoKTsKIAog
ICAgIHZpcnR1YWwgYm9vbCBpc0hUTUxFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQog
Ci0gICAgdmlydHVhbCBib29sIGlzSW5saW5lKCkgY29uc3Q7Ci0gICAgIAotICAgIHZpcnR1YWwg
SWQgaWQoKSBjb25zdCA9IDA7Ci0gICAgCiAgICAgdmlydHVhbCBib29sIG1hcFRvRW50cnkoSWQg
YXR0ciwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3Q7CiAgICAgdmlydHVhbCB2
b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwqIGF0dHIpOwogCkBA
IC01Myw3ICs1MCw3IEBAIHB1YmxpYzoKIAogICAgIFNoYXJlZFB0cjxIVE1MQ29sbGVjdGlvbklt
cGw+IGNoaWxkcmVuKCk7CiAgICAgCi0gICAgRE9NU3RyaW5nIGlkRE9NKCkgY29uc3Q7IC8vIHJl
bmFtZSB0byBpZCBhZnRlciBlbGltaW5hdGluZyBOb2RlSW1wbDo6aWQgc29tZSBkYXkKKyAgICBE
T01TdHJpbmcgaWQoKSBjb25zdDsKICAgICB2b2lkIHNldElkKGNvbnN0IERPTVN0cmluZyAmdmFs
dWUpOwogICAgIERPTVN0cmluZyB0aXRsZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0VGl0bGUoY29u
c3QgRE9NU3RyaW5nICZ2YWx1ZSk7CkBAIC03Myw4ICs3MCw2IEBAIHB1YmxpYzoKICAgICB2b2lk
IHNldE91dGVySFRNTChjb25zdCBET01TdHJpbmcgJmh0bWwsIGludCAmZXhjZXB0aW9uKTsKICAg
ICB2b2lkIHNldElubmVyVGV4dChjb25zdCBET01TdHJpbmcgJnRleHQsIGludCAmZXhjZXB0aW9u
KTsKICAgICB2b2lkIHNldE91dGVyVGV4dChjb25zdCBET01TdHJpbmcgJnRleHQsIGludCAmZXhj
ZXB0aW9uKTsKLQotICAgIHZpcnR1YWwgRE9NU3RyaW5nIG5hbWVzcGFjZVVSSSgpIGNvbnN0Owog
ICAgIAogICAgIHZpcnR1YWwgYm9vbCBpc0ZvY3VzYWJsZSgpIGNvbnN0OwogICAgIHZpcnR1YWwg
Ym9vbCBpc0NvbnRlbnRFZGl0YWJsZSgpIGNvbnN0OwpAQCAtODksMjIgKzg0LDE2IEBAIHB1Ymxp
YzoKIAogICAgIHZpcnR1YWwgRE9NU3RyaW5nIHRvU3RyaW5nKCkgY29uc3Q7CiAKKyAgICAvLyBT
YW1lIHZhbHVlcyBhcyA8c3Bhbj4uICBUaGlzIHdheSBjdXN0b20gdGFnIG5hbWUgZWxlbWVudHMg
d2lsbCBiZWhhdmUgbGlrZSBpbmxpbmUgc3BhbnMuCisgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVz
IGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gUkVRVUlSRUQ7IH0KKyAgICB2aXJ0
dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDE7IH0KKyAgICAKIHByb3RlY3Rl
ZDoKIAogICAgIC8vIGZvciBJTUcsIE9CSkVDVCBhbmQgQVBQTEVUCiAgICAgdm9pZCBhZGRIVE1M
QWxpZ25tZW50KE1hcHBlZEF0dHJpYnV0ZUltcGwqIGh0bWxBdHRyKTsKIH07CiAKLWNsYXNzIEhU
TUxHZW5lcmljRWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTEVsZW1lbnRJbXBsCi17Ci1wdWJsaWM6
Ci0gICAgSFRNTEdlbmVyaWNFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCB1c2hvcnQgZWxl
bWVudElkKTsKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7Ci0KLXByb3RlY3RlZDoKLSAgICB1
c2hvcnQgbV9lbGVtZW50SWQ7Ci19OwotCiB9IC8vbmFtZXNwYWNlCiAKICNlbmRpZgpJbmRleDog
a2h0bWwvaHRtbC9odG1sX2Zvcm1pbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfZm9ybWltcGwuY3BwLHYKcmV0cmlldmluZyByZXZp
c2lvbiAxLjE2MQpkaWZmIC11IC1wIC1yMS4xNjEga2h0bWwvaHRtbC9odG1sX2Zvcm1pbXBsLmNw
cAotLS0ga2h0bWwvaHRtbC9odG1sX2Zvcm1pbXBsLmNwcAkzMSBNYXkgMjAwNSAwNTo0ODo0MSAt
MDAwMAkxLjE2MQorKysga2h0bWwvaHRtbC9odG1sX2Zvcm1pbXBsLmNwcAkxNyBKdW4gMjAwNSAw
MTozMjo0NCAtMDAwMApAQCAtMTAzLDcgKzEwMyw3IEBAIHByaXZhdGU6CiB9OwogCiBIVE1MRm9y
bUVsZW1lbnRJbXBsOjpIVE1MRm9ybUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0gICAg
OiBIVE1MRWxlbWVudEltcGwoZG9jKQorICAgIDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6
Zm9ybSgpLCBkb2MpCiB7CiAgICAgY29sbGVjdGlvbkluZm8gPSAwOwogICAgIG1fcG9zdCA9IGZh
bHNlOwpAQCAtMTMwLDExICsxMzAsNiBAQCBIVE1MRm9ybUVsZW1lbnRJbXBsOjp+SFRNTEZvcm1F
bGVtZW50SW1wCiAgICAgICAgIGltZ0VsZW1lbnRzW2ldLT5tX2Zvcm0gPSAwOwogfQogCi1Ob2Rl
SW1wbDo6SWQgSFRNTEZvcm1FbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJ
RF9GT1JNOwotfQotCiAjaWYgQVBQTEVfQ0hBTkdFUwogCiBib29sIEhUTUxGb3JtRWxlbWVudElt
cGw6OmZvcm1Xb3VsZEhhdmVTZWN1cmVTdWJtaXNzaW9uKGNvbnN0IERPTVN0cmluZyAmdXJsKQpA
QCAtMTkyLDcgKzE4Nyw3IEBAIHZvaWQgSFRNTEZvcm1FbGVtZW50SW1wbDo6c3VibWl0Q2xpY2so
KQogewogICAgIGJvb2wgc3VibWl0Rm91bmQgPSBmYWxzZTsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgZm9ybUVsZW1lbnRzLmNvdW50KCk7ICsraSkgewotICAgICAgICBpZiAoZm9ybUVs
ZW1lbnRzW2ldLT5pZCgpID09IElEX0lOUFVUKSB7CisgICAgICAgIGlmIChmb3JtRWxlbWVudHNb
aV0tPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmlucHV0KCkpKSB7CiAgICAgICAgICAgICBIVE1M
SW5wdXRFbGVtZW50SW1wbCAqZWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnRJ
bXBsICo+KGZvcm1FbGVtZW50c1tpXSk7CiAgICAgICAgICAgICBpZiAoZWxlbWVudC0+aXNTdWNj
ZXNzZnVsU3VibWl0QnV0dG9uKCkgJiYgZWxlbWVudC0+cmVuZGVyZXIoKSkgewogICAgICAgICAg
ICAgICAgIHN1Ym1pdEZvdW5kID0gdHJ1ZTsKQEAgLTM5OSw3ICszOTQsNyBAQCBib29sIEhUTUxG
b3JtRWxlbWVudEltcGw6OmZvcm1EYXRhKEZvcm1ECiAKICAgICAgICAgICAgICAgICAgICAgLy8g
aWYgdGhlIGN1cnJlbnQgdHlwZSBpcyBGSUxFLCB0aGVuIHdlIGFsc28gbmVlZCB0bwogICAgICAg
ICAgICAgICAgICAgICAvLyBpbmNsdWRlIHRoZSBmaWxlbmFtZQotICAgICAgICAgICAgICAgICAg
ICBpZiAoY3VycmVudC0+bm9kZVR5cGUoKSA9PSBOb2RlOjpFTEVNRU5UX05PREUgJiYgY3VycmVu
dC0+aWQoKSA9PSBJRF9JTlBVVCAmJgorICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudC0+
aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6aW5wdXQoKSkgJiYKICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnRJbXBsKj4oY3VycmVudCktPmlucHV0VHlw
ZSgpID09IEhUTUxJbnB1dEVsZW1lbnRJbXBsOjpGSUxFKQogICAgICAgICAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgICAgICAgICBRU3RyaW5nIHBhdGggPSBzdGF0aWNfY2FzdDxIVE1M
SW5wdXRFbGVtZW50SW1wbCo+KGN1cnJlbnQpLT52YWx1ZSgpLnN0cmluZygpOwpAQCAtNTQ3LDcg
KzU0Miw3IEBAIHZvaWQgSFRNTEZvcm1FbGVtZW50SW1wbDo6c3VibWl0KCBib29sIGEKICNpZiBB
UFBMRV9DSEFOR0VTCiAgICAgICAgIC8vIE91ciBhcHAgbmVlZHMgdG8gZ2V0IGZvcm0gdmFsdWVz
IGZvciBwYXNzd29yZCBmaWVsZHMgZm9yIGRvaW5nIHBhc3N3b3JkIGF1dG9jb21wbGV0ZSwKICAg
ICAgICAgLy8gc28gd2UgYXJlIG1vcmUgbGVuaWVudCBpbiBwdXNoaW5nIHZhbHVlcywgYW5kIGxl
dCB0aGUgYXBwIGRlY2lkZSB3aGF0IHRvIHNhdmUgd2hlbi4KLSAgICAgICAgaWYgKGN1cnJlbnQt
PmlkKCkgPT0gSURfSU5QVVQpIHsKKyAgICAgICAgaWYgKGN1cnJlbnQtPmhhc0xvY2FsTmFtZShI
VE1MTmFtZXM6OmlucHV0KCkpKSB7CiAgICAgICAgICAgICBIVE1MSW5wdXRFbGVtZW50SW1wbCAq
aW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50SW1wbCo+KGN1cnJlbnQpOwogICAg
ICAgICAgICAgaWYgKGlucHV0LT5pbnB1dFR5cGUoKSA9PSBIVE1MSW5wdXRFbGVtZW50SW1wbDo6
VEVYVAogICAgICAgICAgICAgICAgIHx8IGlucHV0LT5pbnB1dFR5cGUoKSA9PSAgSFRNTElucHV0
RWxlbWVudEltcGw6OlBBU1NXT1JECkBAIC03MDksNyArNzA0LDcgQEAgdm9pZCBIVE1MRm9ybUVs
ZW1lbnRJbXBsOjpyYWRpb0NsaWNrZWQoIAogewogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBmb3JtRWxlbWVudHMuY291bnQoKTsgKytpKSB7CiAgICAgICAgIEhUTUxHZW5lcmljRm9ybUVs
ZW1lbnRJbXBsICpjdXJyZW50ID0gZm9ybUVsZW1lbnRzW2ldOwotICAgICAgICBpZiAoY3VycmVu
dC0+aWQoKSA9PSBJRF9JTlBVVCAmJgorICAgICAgICBpZiAoY3VycmVudC0+aGFzTG9jYWxOYW1l
KEhUTUxOYW1lczo6aW5wdXQoKSkgJiYKICAgICAgICAgICAgIHN0YXRpY19jYXN0PEhUTUxJbnB1
dEVsZW1lbnRJbXBsKj4oY3VycmVudCktPmlucHV0VHlwZSgpID09IEhUTUxJbnB1dEVsZW1lbnRJ
bXBsOjpSQURJTyAmJgogICAgICAgICAgICAgY3VycmVudCAhPSBjYWxsZXIgJiYgY3VycmVudC0+
Zm9ybSgpID09IGNhbGxlci0+Zm9ybSgpICYmIGN1cnJlbnQtPm5hbWUoKSA9PSBjYWxsZXItPm5h
bWUoKSkgewogICAgICAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudEltcGwqPihj
dXJyZW50KS0+c2V0Q2hlY2tlZChmYWxzZSk7CkBAIC04MzUsOCArODMwLDggQEAgdm9pZCBIVE1M
Rm9ybUVsZW1lbnRJbXBsOjpzZXRUYXJnZXQoY29ucwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAK
LUhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsOjpIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbChE
b2N1bWVudFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmKQotICAgIDogSFRNTEVsZW1l
bnRJbXBsKGRvYykKK0hUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsOjpIVE1MR2VuZXJpY0Zvcm1F
bGVtZW50SW1wbChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudFB0ciAqZG9j
LCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmKQorICAgIDogSFRNTEVsZW1lbnRJbXBsKHRhZ05hbWUs
IGRvYykKIHsKICAgICBtX2Rpc2FibGVkID0gbV9yZWFkT25seSA9IGZhbHNlOwogICAgIG1fZG9y
bWFudCA9IGZhbHNlOwpAQCAtOTM4LDkgKzkzMyw4IEBAIHZvaWQgSFRNTEdlbmVyaWNGb3JtRWxl
bWVudEltcGw6OnJlbW92ZWQKIEhUTUxGb3JtRWxlbWVudEltcGwgKkhUTUxHZW5lcmljRm9ybUVs
ZW1lbnRJbXBsOjpnZXRGb3JtKCkgY29uc3QKIHsKICAgICBOb2RlSW1wbCAqcCA9IHBhcmVudE5v
ZGUoKTsKLSAgICB3aGlsZShwKQotICAgIHsKLSAgICAgICAgaWYoIHAtPmlkKCkgPT0gSURfRk9S
TSApCisgICAgd2hpbGUocCkgeworICAgICAgICBpZiAocC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
OmZvcm0oKSkpCiAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50
SW1wbCAqPihwKTsKICAgICAgICAgcCA9IHAtPnBhcmVudE5vZGUoKTsKICAgICB9CkBAIC0xMTYw
LDcgKzExNTQsNyBAQCB2b2lkIEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsOjpzZXRUYWJJCiAv
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxCdXR0b25FbGVtZW50SW1wbDo6SFRNTEJ1dHRvbkVs
ZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIEhUTUxGb3JtRWxlbWVudEltcGwgKmYpCi0gICAg
OiBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbChkb2MsIGYpCisgICAgOiBIVE1MR2VuZXJpY0Zv
cm1FbGVtZW50SW1wbChIVE1MTmFtZXM6OmJ1dHRvbigpLCBkb2MsIGYpCiB7CiAgICAgbV90eXBl
ID0gU1VCTUlUOwogICAgIG1fZGlydHkgPSB0cnVlOwpAQCAtMTE3MSwxMSArMTE2NSw2IEBAIEhU
TUxCdXR0b25FbGVtZW50SW1wbDo6fkhUTUxCdXR0b25FbGVtZW4KIHsKIH0KIAotTm9kZUltcGw6
OklkIEhUTUxCdXR0b25FbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9C
VVRUT047Ci19Ci0KIERPTVN0cmluZyBIVE1MQnV0dG9uRWxlbWVudEltcGw6OnR5cGUoKSBjb25z
dAogewogICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoQVRUUl9UWVBFKTsKQEAgLTEzMTAsNyArMTI5
OSw3IEBAIHZvaWQgSFRNTEJ1dHRvbkVsZW1lbnRJbXBsOjpzZXRWYWx1ZShjb24KIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KIAogSFRNTEZpZWxkU2V0RWxlbWVudEltcGw6OkhUTUxGaWVsZFNldEVsZW1l
bnRJbXBsKERvY3VtZW50UHRyICpkb2MsIEhUTUxGb3JtRWxlbWVudEltcGwgKmYpCi0gICA6IEhU
TUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKGRvYywgZikKKyAgIDogSFRNTEdlbmVyaWNGb3JtRWxl
bWVudEltcGwoSFRNTE5hbWVzOjpmaWVsZHNldCgpLCBkb2MsIGYpCiB7CiB9CiAKQEAgLTEzMjMs
MTEgKzEzMTIsNiBAQCBib29sIEhUTUxGaWVsZFNldEVsZW1lbnRJbXBsOjppc0ZvY3VzYWJsCiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTEZpZWxkU2V0RWxlbWVudElt
cGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfRklFTERTRVQ7Ci19Ci0KIERPTVN0cmlu
ZyBIVE1MRmllbGRTZXRFbGVtZW50SW1wbDo6dHlwZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuICJm
aWVsZHNldCI7CkBAIC0xMzQxLDggKzEzMjUsMjEgQEAgUmVuZGVyT2JqZWN0KiBIVE1MRmllbGRT
ZXRFbGVtZW50SW1wbDo6YwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MSW5wdXRFbGVtZW50
SW1wbDo6SFRNTElucHV0RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgSFRNTEZvcm1FbGVt
ZW50SW1wbCAqZikKLSAgICA6IEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKGRvYywgZiksIG1f
aW1hZ2VMb2FkZXIoMCksIG1fdmFsdWVNYXRjaGVzUmVuZGVyZXIoZmFsc2UpCisgICAgOiBIVE1M
R2VuZXJpY0Zvcm1FbGVtZW50SW1wbChIVE1MTmFtZXM6OmlucHV0KCksIGRvYywgZikKK3sKKyAg
ICBpbml0KCk7Cit9CisKK0hUTUxJbnB1dEVsZW1lbnRJbXBsOjpIVE1MSW5wdXRFbGVtZW50SW1w
bChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudFB0ciAqZG9jLCBIVE1MRm9y
bUVsZW1lbnRJbXBsICpmKQorICAgIDogSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwodGFnTmFt
ZSwgZG9jLCBmKQogeworICAgIGluaXQoKTsKK30KKwordm9pZCBIVE1MSW5wdXRFbGVtZW50SW1w
bDo6aW5pdCgpCit7CisgICAgbV9pbWFnZUxvYWRlciA9IDA7CisgICAgbV92YWx1ZU1hdGNoZXNS
ZW5kZXJlciA9IGZhbHNlOwogICAgIG1fdHlwZSA9IFRFWFQ7CiAgICAgbV9tYXhMZW4gPSAtMTsK
ICAgICBtX3NpemUgPSAyMDsKQEAgLTEzNjAsOCArMTM1Nyw4IEBAIEhUTUxJbnB1dEVsZW1lbnRJ
bXBsOjpIVE1MSW5wdXRFbGVtZW50SW0KIAogICAgIG1fbWF4UmVzdWx0cyA9IC0xOwogCi0gICAg
aWYgKCBtX2Zvcm0gKQotICAgICAgICBtX2F1dG9jb21wbGV0ZSA9IGYtPmF1dG9Db21wbGV0ZSgp
OworICAgIGlmIChtX2Zvcm0pCisgICAgICAgIG1fYXV0b2NvbXBsZXRlID0gbV9mb3JtLT5hdXRv
Q29tcGxldGUoKTsKIH0KIAogSFRNTElucHV0RWxlbWVudEltcGw6On5IVE1MSW5wdXRFbGVtZW50
SW1wbCgpCkBAIC0xMzcwLDExICsxMzY3LDYgQEAgSFRNTElucHV0RWxlbWVudEltcGw6On5IVE1M
SW5wdXRFbGVtZW50SQogICAgIGRlbGV0ZSBtX2ltYWdlTG9hZGVyOwogfQogCi1Ob2RlSW1wbDo6
SWQgSFRNTElucHV0RWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfSU5Q
VVQ7Ci19Ci0KIHZvaWQgSFRNTElucHV0RWxlbWVudEltcGw6OnNldFR5cGUoY29uc3QgRE9NU3Ry
aW5nJiB0KQogewogICAgIHR5cGVFbnVtIG5ld1R5cGU7CkBAIC0yMzUwLDcgKzIzNDIsNyBAQCB2
b2lkIEhUTUxJbnB1dEVsZW1lbnRJbXBsOjpzZXRVc2VNYXAoY29uCiAvLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCiAKIEhUTUxMYWJlbEVsZW1lbnRJbXBsOjpIVE1MTGFiZWxFbGVtZW50SW1wbChEb2N1bWVu
dFB0ciAqZG9jKQotICAgIDogSFRNTEVsZW1lbnRJbXBsKGRvYykKKyAgICA6IEhUTUxFbGVtZW50
SW1wbChIVE1MTmFtZXM6OmxhYmVsKCksIGRvYykKIHsKIH0KIApAQCAtMjM2MywxMSArMjM1NSw2
IEBAIGJvb2wgSFRNTExhYmVsRWxlbWVudEltcGw6OmlzRm9jdXNhYmxlKCkKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MTGFiZWxFbGVtZW50SW1wbDo6aWQoKSBjb25z
dAotewotICAgIHJldHVybiBJRF9MQUJFTDsKLX0KLQogdm9pZCBIVE1MTGFiZWxFbGVtZW50SW1w
bDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqYXR0cikKIHsKICAg
ICBzd2l0Y2goYXR0ci0+aWQoKSkKQEAgLTI0NDQsNyArMjQzMSw3IEBAIHZvaWQgSFRNTExhYmVs
RWxlbWVudEltcGw6OnNldEh0bWxGb3IoY28KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogSFRNTExl
Z2VuZEVsZW1lbnRJbXBsOjpIVE1MTGVnZW5kRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywg
SFRNTEZvcm1FbGVtZW50SW1wbCAqZikKLTogSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwoZG9j
LCBmKQorOiBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbChIVE1MTmFtZXM6OmxlZ2VuZCgpLCBk
b2MsIGYpCiB7CiB9CiAKQEAgLTI0NTcsMTEgKzI0NDQsNiBAQCBib29sIEhUTUxMZWdlbmRFbGVt
ZW50SW1wbDo6aXNGb2N1c2FibGUoCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1Ob2RlSW1wbDo6
SWQgSFRNTExlZ2VuZEVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0xF
R0VORDsKLX0KLQogUmVuZGVyT2JqZWN0KiBIVE1MTGVnZW5kRWxlbWVudEltcGw6OmNyZWF0ZVJl
bmRlcmVyKFJlbmRlckFyZW5hKiBhcmVuYSwgUmVuZGVyU3R5bGUqIHN0eWxlKQogewogICAgIHJl
dHVybiBuZXcgKGFyZW5hKSBSZW5kZXJMZWdlbmQodGhpcyk7CkBAIC0yNDk1LDggKzI0NzcsMjAg
QEAgdm9pZCBIVE1MTGVnZW5kRWxlbWVudEltcGw6OnNldEFsaWduKGNvbgogLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQogCiBIVE1MU2VsZWN0RWxlbWVudEltcGw6OkhUTUxTZWxlY3RFbGVtZW50SW1wbChE
b2N1bWVudFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmKQotICAgIDogSFRNTEdlbmVy
aWNGb3JtRWxlbWVudEltcGwoZG9jLCBmKSwgbV9vcHRpb25zKDApCisgICAgOiBIVE1MR2VuZXJp
Y0Zvcm1FbGVtZW50SW1wbChIVE1MTmFtZXM6OnNlbGVjdCgpLCBkb2MsIGYpLCBtX29wdGlvbnMo
MCkKK3sKKyAgICBpbml0KCk7Cit9CisKK0hUTUxTZWxlY3RFbGVtZW50SW1wbDo6SFRNTFNlbGVj
dEVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50UHRyICpk
b2MsIEhUTUxGb3JtRWxlbWVudEltcGwgKmYpCisgICAgOiBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50
SW1wbCh0YWdOYW1lLCBkb2MsIGYpLCBtX29wdGlvbnMoMCkKK3sKKyAgICBpbml0KCk7Cit9CisK
K3ZvaWQgSFRNTFNlbGVjdEVsZW1lbnRJbXBsOjppbml0KCkKIHsKKyAgICBtX29wdGlvbnMgPSAw
OwogICAgIG1fbXVsdGlwbGUgPSBmYWxzZTsKICAgICBtX3JlY2FsY0xpc3RJdGVtcyA9IGZhbHNl
OwogICAgIC8vIDAgbWVhbnMgaW52YWxpZCAoaS5lLiBub3Qgc2V0KQpAQCAtMjUxMywxMSArMjUw
Nyw2IEBAIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6fkhUTUxTZWxlY3RFbGVtZW4KICAgICB9CiB9
CiAKLU5vZGVJbXBsOjpJZCBIVE1MU2VsZWN0RWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gSURfU0VMRUNUOwotfQotCiB2b2lkIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6cmVj
YWxjU3R5bGUoIFN0eWxlQ2hhbmdlIGNoICkKIHsKICAgICBpZiAoaGFzQ2hhbmdlZENoaWxkKCkg
JiYgbV9yZW5kZXIpIHsKQEAgLTI1MzksNyArMjUyOCw3IEBAIGxvbmcgSFRNTFNlbGVjdEVsZW1l
bnRJbXBsOjpzZWxlY3RlZEluZGUKICAgICB1aW50IG8gPSAwOwogICAgIFFNZW1BcnJheTxIVE1M
R2VuZXJpY0Zvcm1FbGVtZW50SW1wbCo+IGl0ZW1zID0gbGlzdEl0ZW1zKCk7CiAgICAgZm9yICh1
bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBpdGVtcy5zaXplKCk7IGkrKykgewotICAgICAgICBpZiAo
aXRlbXNbaV0tPmlkKCkgPT0gSURfT1BUSU9OKSB7CisgICAgICAgIGlmIChpdGVtc1tpXS0+aGFz
TG9jYWxOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpKSB7CiAgICAgICAgICAgICBpZiAoc3RhdGlj
X2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnRJbXBsKj4oaXRlbXNbaV0pLT5zZWxlY3RlZCgpKQogICAg
ICAgICAgICAgICAgIHJldHVybiBvOwogICAgICAgICAgICAgbysrOwpAQCAtMjU1NSw3ICsyNTQ0
LDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudEltcGw6OnNldFNlbGVjdGVkSQogICAgIFFNZW1B
cnJheTxIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbCo+IGl0ZW1zID0gbGlzdEl0ZW1zKCk7CiAg
ICAgaW50IGxpc3RJbmRleDsKICAgICBmb3IgKGxpc3RJbmRleCA9IDA7IGxpc3RJbmRleCA8IGlu
dChpdGVtcy5zaXplKCkpOyBsaXN0SW5kZXgrKykgewotICAgICAgICBpZiAoaXRlbXNbbGlzdElu
ZGV4XS0+aWQoKSA9PSBJRF9PUFRJT04pCisgICAgICAgIGlmIChpdGVtc1tsaXN0SW5kZXhdLT5o
YXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvcHRpb24oKSkpCiAgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxIVE1MT3B0aW9uRWxlbWVudEltcGwqPihpdGVtc1tsaXN0SW5kZXhdKS0+c2V0U2VsZWN0ZWQo
ZmFsc2UpOwogICAgIH0KICAgICBsaXN0SW5kZXggPSBvcHRpb25Ub0xpc3RJbmRleChpbmRleCk7
CkBAIC0yNTcxLDcgKzI1NjAsNyBAQCBsb25nIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6bGVuZ3Ro
KCkgY29uCiAgICAgdWludCBpOwogICAgIFFNZW1BcnJheTxIVE1MR2VuZXJpY0Zvcm1FbGVtZW50
SW1wbCo+IGl0ZW1zID0gbGlzdEl0ZW1zKCk7CiAgICAgZm9yIChpID0gMDsgaSA8IGl0ZW1zLnNp
emUoKTsgaSsrKSB7Ci0gICAgICAgIGlmIChpdGVtc1tpXS0+aWQoKSA9PSBJRF9PUFRJT04pCisg
ICAgICAgIGlmIChpdGVtc1tpXS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpKQog
ICAgICAgICAgICAgbGVuKys7CiAgICAgfQogICAgIHJldHVybiBsZW47CkBAIC0yNTc5LDcgKzI1
NjgsNyBAQCBsb25nIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6bGVuZ3RoKCkgY29uCiAKIHZvaWQg
SFRNTFNlbGVjdEVsZW1lbnRJbXBsOjphZGQoIEhUTUxFbGVtZW50SW1wbCAqZWxlbWVudCwgSFRN
TEVsZW1lbnRJbXBsICpiZWZvcmUgKQogewotICAgIGlmICghZWxlbWVudCB8fCBlbGVtZW50LT5p
ZCgpICE9IElEX09QVElPTikKKyAgICBpZiAoIWVsZW1lbnQgfHwgIWVsZW1lbnQtPmhhc0xvY2Fs
TmFtZShIVE1MTmFtZXM6Om9wdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaW50IGV4
Y2VwdGlvbmNvZGUgPSAwOwpAQCAtMjYxMywxMyArMjYwMiwxMiBAQCB2b2lkIEhUTUxTZWxlY3RF
bGVtZW50SW1wbDo6Zm9jdXMoKQogICAgIGdldERvY3VtZW50KCktPnNldEZvY3VzTm9kZSh0aGlz
KTsKIH0KIAotRE9NU3RyaW5nIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6dmFsdWUoICkKK0RPTVN0
cmluZyBIVE1MU2VsZWN0RWxlbWVudEltcGw6OnZhbHVlKCkKIHsKICAgICB1aW50IGk7CiAgICAg
UU1lbUFycmF5PEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKj4gaXRlbXMgPSBsaXN0SXRlbXMo
KTsKICAgICBmb3IgKGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgaWYg
KCBpdGVtc1tpXS0+aWQoKSA9PSBJRF9PUFRJT04KLSAgICAgICAgICAgICYmIHN0YXRpY19jYXN0
PEhUTUxPcHRpb25FbGVtZW50SW1wbCo+KGl0ZW1zW2ldKS0+c2VsZWN0ZWQoKSkKKyAgICAgICAg
aWYgKGl0ZW1zW2ldLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvcHRpb24oKSkgJiYgc3RhdGlj
X2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnRJbXBsKj4oaXRlbXNbaV0pLT5zZWxlY3RlZCgpKQogICAg
ICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50SW1wbCo+KGl0ZW1z
W2ldKS0+dmFsdWUoKTsKICAgICB9CiAgICAgcmV0dXJuIERPTVN0cmluZygiIik7CkBAIC0yNjMz
LDEzICsyNjIxLDEzIEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnRJbXBsOjpzZXRWYWx1ZShjb24K
ICAgICAvLyBhbmQgbWFrZSBpdCB0aGUgY3VycmVudCBzZWxlY3Rpb24uCiAgICAgUU1lbUFycmF5
PEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKj4gaXRlbXMgPSBsaXN0SXRlbXMoKTsKICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyBpKyspCi0gICAgICAgIGlmIChp
dGVtc1tpXS0+aWQoKSA9PSBJRF9PUFRJT04gJiYgc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1l
bnRJbXBsKj4oaXRlbXNbaV0pLT52YWx1ZSgpID09IHZhbHVlKSB7CisgICAgICAgIGlmIChpdGVt
c1tpXS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpICYmIHN0YXRpY19jYXN0PEhU
TUxPcHRpb25FbGVtZW50SW1wbCo+KGl0ZW1zW2ldKS0+dmFsdWUoKSA9PSB2YWx1ZSkgewogICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnRJbXBsKj4oaXRlbXNbaV0pLT5z
ZXRTZWxlY3RlZCh0cnVlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogfQogCi1R
U3RyaW5nIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6c3RhdGUoICkKK1FTdHJpbmcgSFRNTFNlbGVj
dEVsZW1lbnRJbXBsOjpzdGF0ZSgpCiB7CiAjaWYgIUFQUExFX0NIQU5HRVMKICAgICBRU3RyaW5n
IHN0YXRlOwpAQCAtMjY1Miw3ICsyNjQwLDcgQEAgUVN0cmluZyBIVE1MU2VsZWN0RWxlbWVudElt
cGw6OnN0YXRlKCApCiAgICAgUUNoYXIgc3RhdGVDaGFyc1tsXTsKICAgICAKICAgICBmb3IoaW50
IGkgPSAwOyBpIDwgbDsgaSsrKQotICAgICAgICBpZihpdGVtc1tpXS0+aWQoKSA9PSBJRF9PUFRJ
T04gJiYgc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnRJbXBsKj4oaXRlbXNbaV0pLT5zZWxl
Y3RlZCgpKQorICAgICAgICBpZihpdGVtc1tpXS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b3B0
aW9uKCkpICYmIHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50SW1wbCo+KGl0ZW1zW2ldKS0+
c2VsZWN0ZWQoKSkKICAgICAgICAgICAgIHN0YXRlQ2hhcnNbaV0gPSAnWCc7CiAgICAgICAgIGVs
c2UKICAgICAgICAgICAgIHN0YXRlQ2hhcnNbaV0gPSAnLic7CkBAIC0yNjg5LDcgKzI2NzcsNyBA
QCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6cmVzdG9yZVN0YXRlCiAKICAgICBpbnQgbCA9
IGl0ZW1zLmNvdW50KCk7CiAgICAgZm9yKGludCBpID0gMDsgaSA8IGw7IGkrKykgewotICAgICAg
ICBpZihpdGVtc1tpXS0+aWQoKSA9PSBJRF9PUFRJT04pIHsKKyAgICAgICAgaWYoaXRlbXNbaV0t
Pmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9wdGlvbigpKSkgewogICAgICAgICAgICAgSFRNTE9w
dGlvbkVsZW1lbnRJbXBsKiBvZSA9IHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50SW1wbCo+
KGl0ZW1zW2ldKTsKICAgICAgICAgICAgIG9lLT5zZXRTZWxlY3RlZChzdGF0ZVtpXSA9PSAnWCcp
OwogICAgICAgICB9CkBAIC0yNzgxLDcgKzI3NjksNyBAQCBib29sIEhUTUxTZWxlY3RFbGVtZW50
SW1wbDo6YXBwZW5kRm9ybURhCiAKICAgICB1aW50IGk7CiAgICAgZm9yIChpID0gMDsgaSA8IGl0
ZW1zLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIGlmIChpdGVtc1tpXS0+aWQoKSA9PSBJRF9PUFRJ
T04pIHsKKyAgICAgICAgaWYgKGl0ZW1zW2ldLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvcHRp
b24oKSkpIHsKICAgICAgICAgICAgIEhUTUxPcHRpb25FbGVtZW50SW1wbCAqb3B0aW9uID0gc3Rh
dGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnRJbXBsKj4oaXRlbXNbaV0pOwogICAgICAgICAgICAg
aWYgKG9wdGlvbi0+c2VsZWN0ZWQoKSkgewogICAgICAgICAgICAgICAgIGVuY29kZWRfdmFsdWVz
LmFwcGVuZERhdGEobmFtZSgpLCBvcHRpb24tPnZhbHVlKCkpOwpAQCAtMjc5NCw3ICsyNzgyLDcg
QEAgYm9vbCBIVE1MU2VsZWN0RWxlbWVudEltcGw6OmFwcGVuZEZvcm1EYQogICAgIC8vIGluIGFu
eSBjYXNlLiBvdGhlcndpc2Ugd2UgaGF2ZSBubyBjb25zaXN0ZW5jeSB3aXRoIHRoZSBET00gaW50
ZXJmYWNlLiBGSVhNRSEKICAgICAvLyB3ZSByZXR1cm4gdGhlIGZpcnN0IG9uZSBpZiBpdCB3YXMg
YSBjb21ib2JveCBzZWxlY3QKICAgICBpZiAoIXN1Y2Nlc3NmdWwgJiYgIW1fbXVsdGlwbGUgJiYg
bV9zaXplIDw9IDEgJiYgaXRlbXMuc2l6ZSgpICYmCi0gICAgICAgIChpdGVtc1swXS0+aWQoKSA9
PSBJRF9PUFRJT04pICkgeworICAgICAgICAoaXRlbXNbMF0tPmhhc0xvY2FsTmFtZShIVE1MTmFt
ZXM6Om9wdGlvbigpKSkpIHsKICAgICAgICAgSFRNTE9wdGlvbkVsZW1lbnRJbXBsICpvcHRpb24g
PSBzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudEltcGwqPihpdGVtc1swXSk7CiAgICAgICAg
IGlmIChvcHRpb24tPnZhbHVlKCkuaXNOdWxsKCkpCiAgICAgICAgICAgICBlbmNvZGVkX3ZhbHVl
cy5hcHBlbmREYXRhKG5hbWUoKSwgb3B0aW9uLT50ZXh0KCkuc3RyaW5nKCkuc3RyaXBXaGl0ZVNw
YWNlKCkpOwpAQCAtMjgxNyw3ICsyODA1LDcgQEAgaW50IEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6
b3B0aW9uVG9MaXN0SQogICAgIGZvciAoOwogICAgICAgICAgb3B0aW9uSW5kZXgyIDwgaW50KGl0
ZW1zLnNpemUoKSkgJiYgb3B0aW9uSW5kZXgyIDw9IG9wdGlvbkluZGV4OwogICAgICAgICAgbGlz
dEluZGV4KyspIHsgLy8gbm90IGEgdHlwbyEKLSAgICAgICAgaWYgKGl0ZW1zW2xpc3RJbmRleF0t
PmlkKCkgPT0gSURfT1BUSU9OKQorICAgICAgICBpZiAoaXRlbXNbbGlzdEluZGV4XS0+aGFzTG9j
YWxOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpKQogICAgICAgICAgICAgb3B0aW9uSW5kZXgyKys7
CiAgICAgfQogICAgIGxpc3RJbmRleC0tOwpAQCAtMjgyOCwxMyArMjgxNiwxMyBAQCBpbnQgSFRN
TFNlbGVjdEVsZW1lbnRJbXBsOjpsaXN0VG9PcHRpb25JCiB7CiAgICAgUU1lbUFycmF5PEhUTUxH
ZW5lcmljRm9ybUVsZW1lbnRJbXBsKj4gaXRlbXMgPSBsaXN0SXRlbXMoKTsKICAgICBpZiAobGlz
dEluZGV4IDwgMCB8fCBsaXN0SW5kZXggPj0gaW50KGl0ZW1zLnNpemUoKSkgfHwKLSAgICAgICAg
aXRlbXNbbGlzdEluZGV4XS0+aWQoKSAhPSBJRF9PUFRJT04pCisgICAgICAgICFpdGVtc1tsaXN0
SW5kZXhdLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biAtMTsKIAogICAgIGludCBvcHRpb25JbmRleCA9IDA7IC8vIGFjdHVhbCBpbmRleCBvZiBvcHRp
b24gbm90IGNvdW50aW5nIE9QVEdST1VQIGVudHJpZXMgdGhhdCBtYXkgYmUgaW4gbGlzdAogICAg
IGludCBpOwogICAgIGZvciAoaSA9IDA7IGkgPCBsaXN0SW5kZXg7IGkrKykKLSAgICAgICAgaWYg
KGl0ZW1zW2ldLT5pZCgpID09IElEX09QVElPTikKKyAgICAgICAgaWYgKGl0ZW1zW2ldLT5oYXNM
b2NhbE5hbWUoSFRNTE5hbWVzOjpvcHRpb24oKSkpCiAgICAgICAgICAgICBvcHRpb25JbmRleCsr
OwogICAgIHJldHVybiBvcHRpb25JbmRleDsKIH0KQEAgLTI4NjAsMTMgKzI4NDgsMTMgQEAgdm9p
ZCBIVE1MU2VsZWN0RWxlbWVudEltcGw6OnJlY2FsY0xpc3RJdAogICAgIG1fbGlzdEl0ZW1zLnJl
c2l6ZSgwKTsKICAgICBIVE1MT3B0aW9uRWxlbWVudEltcGwqIGZvdW5kU2VsZWN0ZWQgPSAwOwog
ICAgIHdoaWxlKGN1cnJlbnQpIHsKLSAgICAgICAgaWYgKGN1cnJlbnQtPmlkKCkgPT0gSURfT1BU
R1JPVVAgJiYgY3VycmVudC0+Zmlyc3RDaGlsZCgpKSB7CisgICAgICAgIGlmIChjdXJyZW50LT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6b3B0Z3JvdXAoKSkgJiYgY3VycmVudC0+Zmlyc3RDaGlsZCgp
KSB7CiAgICAgICAgICAgICAvLyAjIyMgd2hhdCBpZiBvcHRncm91cCBjb250YWlucyBqdXN0IGNv
bW1lbnRzPyBkb24ndCB3YW50IG9uZSBvZiBubyBvcHRpb25zIGluIGl0Li4uCiAgICAgICAgICAg
ICBtX2xpc3RJdGVtcy5yZXNpemUobV9saXN0SXRlbXMuc2l6ZSgpKzEpOwogICAgICAgICAgICAg
bV9saXN0SXRlbXNbbV9saXN0SXRlbXMuc2l6ZSgpLTFdID0gc3RhdGljX2Nhc3Q8SFRNTEdlbmVy
aWNGb3JtRWxlbWVudEltcGwqPihjdXJyZW50KTsKICAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJy
ZW50LT5maXJzdENoaWxkKCk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGN1cnJlbnQtPmlkKCkg
PT0gSURfT1BUSU9OKSB7CisgICAgICAgIGlmIChjdXJyZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6b3B0aW9uKCkpKSB7CiAgICAgICAgICAgICBtX2xpc3RJdGVtcy5yZXNpemUobV9saXN0SXRl
bXMuc2l6ZSgpKzEpOwogICAgICAgICAgICAgbV9saXN0SXRlbXNbbV9saXN0SXRlbXMuc2l6ZSgp
LTFdID0gc3RhdGljX2Nhc3Q8SFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwqPihjdXJyZW50KTsK
ICAgICAgICAgICAgIGlmICghZm91bmRTZWxlY3RlZCAmJiAhbV9tdWx0aXBsZSAmJiBtX3NpemUg
PD0gMSkgewpAQCAtMjkwOCw3ICsyODk2LDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudEltcGw6
OnJlc2V0KCkKICAgICBRTWVtQXJyYXk8SFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwqPiBpdGVt
cyA9IGxpc3RJdGVtcygpOwogICAgIHVpbnQgaTsKICAgICBmb3IgKGkgPSAwOyBpIDwgaXRlbXMu
c2l6ZSgpOyBpKyspIHsKLSAgICAgICAgaWYgKGl0ZW1zW2ldLT5pZCgpID09IElEX09QVElPTikg
eworICAgICAgICBpZiAoaXRlbXNbaV0tPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9wdGlvbigp
KSkgewogICAgICAgICAgICAgSFRNTE9wdGlvbkVsZW1lbnRJbXBsICpvcHRpb24gPSBzdGF0aWNf
Y2FzdDxIVE1MT3B0aW9uRWxlbWVudEltcGwqPihpdGVtc1tpXSk7CiAgICAgICAgICAgICBib29s
IHNlbGVjdGVkID0gKCFvcHRpb24tPmdldEF0dHJpYnV0ZShBVFRSX1NFTEVDVEVEKS5pc051bGwo
KSk7CiAgICAgICAgICAgICBvcHRpb24tPnNldFNlbGVjdGVkKHNlbGVjdGVkKTsKQEAgLTI5MjYs
NyArMjkxNCw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnRJbXBsOjpub3RpZnlPcHRpb24KICAg
ICAgICAgUU1lbUFycmF5PEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKj4gaXRlbXMgPSBsaXN0
SXRlbXMoKTsKICAgICAgICAgdWludCBpOwogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaXRlbXMu
c2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgIGlmIChpdGVtc1tpXS0+aWQoKSA9PSBJRF9PUFRJ
T04pCisgICAgICAgICAgICBpZiAoaXRlbXNbaV0tPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9w
dGlvbigpKSkKICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudElt
cGwqPihpdGVtc1tpXSktPm1fc2VsZWN0ZWQgPSAoaXRlbXNbaV0gPT0gc2VsZWN0ZWRPcHRpb24p
OwogICAgICAgICB9CiAgICAgfQpAQCAtMjk3Myw3ICsyOTYxLDcgQEAgdm9pZCBIVE1MU2VsZWN0
RWxlbWVudEltcGw6OnNldFNpemUobG9uZwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MS2V5
Z2VuRWxlbWVudEltcGw6OkhUTUxLZXlnZW5FbGVtZW50SW1wbChEb2N1bWVudFB0ciogZG9jLCBI
VE1MRm9ybUVsZW1lbnRJbXBsKiBmKQotICAgIDogSFRNTFNlbGVjdEVsZW1lbnRJbXBsKGRvYywg
ZikKKyAgICA6IEhUTUxTZWxlY3RFbGVtZW50SW1wbChIVE1MTmFtZXM6OmtleWdlbigpLCBkb2Ms
IGYpCiB7CiAgICAgUVN0cmluZ0xpc3Qga2V5cyA9IEtTU0xLZXlHZW46OnN1cHBvcnRlZEtleVNp
emVzKCk7CiAgICAgZm9yIChRU3RyaW5nTGlzdDo6SXRlcmF0b3IgaSA9IGtleXMuYmVnaW4oKTsg
aSAhPSBrZXlzLmVuZCgpOyArK2kpIHsKQEAgLTI5ODMsMTEgKzI5NzEsNiBAQCBIVE1MS2V5Z2Vu
RWxlbWVudEltcGw6OkhUTUxLZXlnZW5FbGVtZW50CiAgICAgfQogfQogCi1Ob2RlSW1wbDo6SWQg
SFRNTEtleWdlbkVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0tFWUdF
TjsKLX0KLQogRE9NU3RyaW5nIEhUTUxLZXlnZW5FbGVtZW50SW1wbDo6dHlwZSgpIGNvbnN0CiB7
CiAgICAgcmV0dXJuICJrZXlnZW4iOwpAQCAtMzA0Miw3ICszMDI1LDcgQEAgYm9vbCBIVE1MS2V5
Z2VuRWxlbWVudEltcGw6OmFwcGVuZEZvcm1EYQogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBIVE1M
T3B0R3JvdXBFbGVtZW50SW1wbDo6SFRNTE9wdEdyb3VwRWxlbWVudEltcGwoRG9jdW1lbnRQdHIg
KmRvYywgSFRNTEZvcm1FbGVtZW50SW1wbCAqZikKLSAgICA6IEhUTUxHZW5lcmljRm9ybUVsZW1l
bnRJbXBsKGRvYywgZikKKyAgICA6IEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKEhUTUxOYW1l
czo6b3B0Z3JvdXAoKSwgZG9jLCBmKQogewogfQogCkBAIC0zMDU1LDExICszMDM4LDYgQEAgYm9v
bCBIVE1MT3B0R3JvdXBFbGVtZW50SW1wbDo6aXNGb2N1c2FibAogICAgIHJldHVybiBmYWxzZTsK
IH0KIAotTm9kZUltcGw6OklkIEhUTUxPcHRHcm91cEVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIElEX09QVEdST1VQOwotfQotCiBET01TdHJpbmcgSFRNTE9wdEdyb3VwRWxl
bWVudEltcGw6OnR5cGUoKSBjb25zdAogewogICAgIHJldHVybiAib3B0Z3JvdXAiOwpAQCAtMzEx
Myw3ICszMDkxLDcgQEAgdm9pZCBIVE1MT3B0R3JvdXBFbGVtZW50SW1wbDo6cGFyc2VNYXBwZQog
dm9pZCBIVE1MT3B0R3JvdXBFbGVtZW50SW1wbDo6cmVjYWxjU2VsZWN0T3B0aW9ucygpCiB7CiAg
ICAgTm9kZUltcGwgKnNlbGVjdCA9IHBhcmVudE5vZGUoKTsKLSAgICB3aGlsZSAoc2VsZWN0ICYm
IHNlbGVjdC0+aWQoKSAhPSBJRF9TRUxFQ1QpCisgICAgd2hpbGUgKHNlbGVjdCAmJiAhc2VsZWN0
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c2VsZWN0KCkpKQogICAgICAgICBzZWxlY3QgPSBzZWxl
Y3QtPnBhcmVudE5vZGUoKTsKICAgICBpZiAoc2VsZWN0KQogICAgICAgICBzdGF0aWNfY2FzdDxI
VE1MU2VsZWN0RWxlbWVudEltcGwqPihzZWxlY3QpLT5zZXRSZWNhbGNMaXN0SXRlbXMoKTsKQEAg
LTMxMzIsNyArMzExMCw3IEBAIHZvaWQgSFRNTE9wdEdyb3VwRWxlbWVudEltcGw6OnNldExhYmVs
KGMKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogSFRNTE9wdGlvbkVsZW1lbnRJbXBsOjpIVE1MT3B0
aW9uRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgSFRNTEZvcm1FbGVtZW50SW1wbCAqZikK
LSAgICA6IEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKGRvYywgZikKKyAgICA6IEhUTUxHZW5l
cmljRm9ybUVsZW1lbnRJbXBsKEhUTUxOYW1lczo6b3B0aW9uKCksIGRvYywgZikKIHsKICAgICBt
X3NlbGVjdGVkID0gZmFsc2U7CiB9CkBAIC0zMTQyLDExICszMTIwLDYgQEAgYm9vbCBIVE1MT3B0
aW9uRWxlbWVudEltcGw6OmlzRm9jdXNhYmxlKAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotTm9k
ZUltcGw6OklkIEhUTUxPcHRpb25FbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVy
biBJRF9PUFRJT047Ci19Ci0KIERPTVN0cmluZyBIVE1MT3B0aW9uRWxlbWVudEltcGw6OnR5cGUo
KSBjb25zdAogewogICAgIHJldHVybiAib3B0aW9uIjsKQEAgLTMxOTMsOCArMzE2Niw3IEBAIGxv
bmcgSFRNTE9wdGlvbkVsZW1lbnRJbXBsOjppbmRleCgpIGNvbnMKICAgICBpbnQgbCA9IGl0ZW1z
LmNvdW50KCk7CiAgICAgaW50IG9wdGlvbkluZGV4ID0gMDsKICAgICBmb3IoaW50IGkgPSAwOyBp
IDwgbDsgaSsrKSB7Ci0gICAgICAgIGlmKGl0ZW1zW2ldLT5pZCgpID09IElEX09QVElPTikKLSAg
ICAgICAgeworICAgICAgICBpZiAoaXRlbXNbaV0tPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9w
dGlvbigpKSkgewogICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50
SW1wbCo+KGl0ZW1zW2ldKSA9PSB0aGlzKQogICAgICAgICAgICAgICAgIHJldHVybiBvcHRpb25J
bmRleDsKICAgICAgICAgICAgIG9wdGlvbkluZGV4Kys7CkBAIC0zMjU5LDcgKzMyMzEsNyBAQCB2
b2lkIEhUTUxPcHRpb25FbGVtZW50SW1wbDo6Y2hpbGRyZW5DaGFuCiBIVE1MU2VsZWN0RWxlbWVu
dEltcGwgKkhUTUxPcHRpb25FbGVtZW50SW1wbDo6Z2V0U2VsZWN0KCkgY29uc3QKIHsKICAgICBO
b2RlSW1wbCAqc2VsZWN0ID0gcGFyZW50Tm9kZSgpOwotICAgIHdoaWxlIChzZWxlY3QgJiYgc2Vs
ZWN0LT5pZCgpICE9IElEX1NFTEVDVCkKKyAgICB3aGlsZSAoc2VsZWN0ICYmICFzZWxlY3QtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjpzZWxlY3QoKSkpCiAgICAgICAgIHNlbGVjdCA9IHNlbGVjdC0+
cGFyZW50Tm9kZSgpOwogICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MU2VsZWN0RWxlbWVudElt
cGwqPihzZWxlY3QpOwogfQpAQCAtMzI4Nyw3ICszMjU5LDcgQEAgdm9pZCBIVE1MT3B0aW9uRWxl
bWVudEltcGw6OnNldExhYmVsKGNvbgogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MVGV4dEFy
ZWFFbGVtZW50SW1wbDo6SFRNTFRleHRBcmVhRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywg
SFRNTEZvcm1FbGVtZW50SW1wbCAqZikKLSAgICA6IEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBs
KGRvYywgZiksIG1fdmFsdWVJc1ZhbGlkKGZhbHNlKSwgbV92YWx1ZU1hdGNoZXNSZW5kZXJlcihm
YWxzZSkKKyAgICA6IEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKEhUTUxOYW1lczo6dGV4dGFy
ZWEoKSwgZG9jLCBmKSwgbV92YWx1ZUlzVmFsaWQoZmFsc2UpLCBtX3ZhbHVlTWF0Y2hlc1JlbmRl
cmVyKGZhbHNlKQogewogICAgIC8vIERURCByZXF1aXJlcyByb3dzICYgY29scyBiZSBzcGVjaWZp
ZWQsIGJ1dCB3ZSB3aWxsIHByb3ZpZGUgcmVhc29uYWJsZSBkZWZhdWx0cwogICAgIG1fcm93cyA9
IDI7CkBAIC0zMzAwLDExICszMjcyLDYgQEAgSFRNTFRleHRBcmVhRWxlbWVudEltcGw6On5IVE1M
VGV4dEFyZWFFbAogICAgIGlmIChnZXREb2N1bWVudCgpKSBnZXREb2N1bWVudCgpLT5kZXJlZ2lz
dGVyTWFpbnRhaW5zU3RhdGUodGhpcyk7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MVGV4dEFyZWFF
bGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9URVhUQVJFQTsKLX0KLQog
RE9NU3RyaW5nIEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBsOjp0eXBlKCkgY29uc3QKIHsKICAgICBy
ZXR1cm4gInRleHRhcmVhIjsKQEAgLTM1MjEsMTcgKzM0ODgsMTIgQEAgdm9pZCBIVE1MVGV4dEFy
ZWFFbGVtZW50SW1wbDo6c2V0Um93cyhsbwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MSXNJ
bmRleEVsZW1lbnRJbXBsOjpIVE1MSXNJbmRleEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2Ms
IEhUTUxGb3JtRWxlbWVudEltcGwgKmYpCi0gICAgOiBIVE1MSW5wdXRFbGVtZW50SW1wbChkb2Ms
IGYpCisgICAgOiBIVE1MSW5wdXRFbGVtZW50SW1wbChIVE1MTmFtZXM6OmlzaW5kZXgoKSwgZG9j
LCBmKQogewogICAgIG1fdHlwZSA9IFRFWFQ7CiAgICAgc2V0T3ZlcnJpZGVOYW1lKCJpc2luZGV4
Iik7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MSXNJbmRleEVsZW1lbnRJbXBsOjppZCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIElEX0lTSU5ERVg7Ci19Ci0KIHZvaWQgSFRNTElzSW5kZXhFbGVtZW50
SW1wbDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCogYXR0cikKIHsK
ICAgICBzd2l0Y2goYXR0ci0+aWQoKSkKSW5kZXg6IGtodG1sL2h0bWwvaHRtbF9mb3JtaW1wbC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbF9m
b3JtaW1wbC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjcxCmRpZmYgLXUgLXAgLXIxLjcxIGto
dG1sL2h0bWwvaHRtbF9mb3JtaW1wbC5oCi0tLSBraHRtbC9odG1sL2h0bWxfZm9ybWltcGwuaAkx
MiBNYXkgMjAwNSAxNzoxMToyMiAtMDAwMAkxLjcxCisrKyBraHRtbC9odG1sL2h0bWxfZm9ybWlt
cGwuaAkxNyBKdW4gMjAwNSAwMTozMjo0NSAtMDAwMApAQCAtNjcsOCArNjcsNiBAQCBwdWJsaWM6
CiAgICAgSFRNTEZvcm1FbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKTsKICAgICB2aXJ0dWFs
IH5IVE1MRm9ybUVsZW1lbnRJbXBsKCk7CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7Ci0K
ICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoKCk7CiAgICAgdmlydHVhbCB2b2lkIGRldGFjaCgpOwog
CkBAIC0xNTksNyArMTU3LDcgQEAgY2xhc3MgSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwgOiBw
dWJsaQogICAgIGZyaWVuZCBjbGFzcyBraHRtbDo6UmVuZGVyRm9ybUVsZW1lbnQ7CiAKIHB1Ymxp
YzoKLSAgICBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCBIVE1M
Rm9ybUVsZW1lbnRJbXBsICpmID0gMCk7CisgICAgSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnRQdHIgKmRvYywgSFRNTEZvcm1F
bGVtZW50SW1wbCAqZiA9IDApOwogICAgIHZpcnR1YWwgfkhUTUxHZW5lcmljRm9ybUVsZW1lbnRJ
bXBsKCk7CiAKICAgICBIVE1MRm9ybUVsZW1lbnRJbXBsICpmb3JtKCkgeyByZXR1cm4gbV9mb3Jt
OyB9CkBAIC0yNDIsNyArMjQwLDYgQEAgcHVibGljOgogICAgICAgICBCVVRUT04KICAgICB9Owog
Ci0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwogICAgIERPTVN0cmluZyB0eXBlKCkgY29uc3Q7
CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRl
SW1wbCAqYXR0cik7CkBAIC0yODEsOCArMjc4LDYgQEAgcHVibGljOgogICAgIEhUTUxGaWVsZFNl
dEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIEhUTUxGb3JtRWxlbWVudEltcGwgKmYgPSAw
KTsKIAogICAgIHZpcnR1YWwgfkhUTUxGaWVsZFNldEVsZW1lbnRJbXBsKCk7Ci0KLSAgICB2aXJ0
dWFsIElkIGlkKCkgY29uc3Q7CiAgICAgCiAgICAgdmlydHVhbCBib29sIGlzRm9jdXNhYmxlKCkg
Y29uc3Q7CiAgICAgCkBAIC0zMjUsOSArMzIwLDEwIEBAIHB1YmxpYzoKICAgICB9OwogCiAgICAg
SFRNTElucHV0RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgSFRNTEZvcm1FbGVtZW50SW1w
bCAqZiA9IDApOworICAgIEhUTUxJbnB1dEVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUm
IHRhZ05hbWUsIERvY3VtZW50UHRyICpkb2MsIEhUTUxGb3JtRWxlbWVudEltcGwgKmYgPSAwKTsK
ICAgICB2aXJ0dWFsIH5IVE1MSW5wdXRFbGVtZW50SW1wbCgpOwogCi0gICAgdmlydHVhbCBJZCBp
ZCgpIGNvbnN0OworICAgIHZvaWQgaW5pdCgpOwogCiAgICAgdmlydHVhbCBib29sIGlzRW51bWVy
YXRhYmxlKCkgY29uc3QgeyByZXR1cm4gaW5wdXRUeXBlKCkgIT0gSU1BR0U7IH0KIApAQCAtNDUx
LDggKzQ0Nyw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5IVE1MTGFiZWxFbGVtZW50SW1wbCgp
OwogCiAgICAgdmlydHVhbCBib29sIGlzRm9jdXNhYmxlKCkgY29uc3Q7Ci0gICAgCi0gICAgdmly
dHVhbCBJZCBpZCgpIGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmli
dXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIpOwogCkBAIC00ODUsNyArNDc5LDYgQEAgcHVi
bGljOgogCiAgICAgdmlydHVhbCBib29sIGlzRm9jdXNhYmxlKCkgY29uc3Q7CiAgICAgCi0gICAg
dmlydHVhbCBJZCBpZCgpIGNvbnN0OwogICAgIHZpcnR1YWwga2h0bWw6OlJlbmRlck9iamVjdCAq
Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEgKiwga2h0bWw6OlJlbmRlclN0eWxlICopOwogCiAg
ICAgdmlydHVhbCBET01TdHJpbmcgdHlwZSgpIGNvbnN0OwpAQCAtNTA1LDkgKzQ5OCwxMSBAQCBj
bGFzcyBIVE1MU2VsZWN0RWxlbWVudEltcGwgOiBwdWJsaWMgSFRNCiAKIHB1YmxpYzoKICAgICBI
VE1MU2VsZWN0RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgSFRNTEZvcm1FbGVtZW50SW1w
bCAqZiA9IDApOworICAgIEhUTUxTZWxlY3RFbGVtZW50SW1wbChjb25zdCBRdWFsaWZpZWROYW1l
JiB0YWdOYW1lLCBEb2N1bWVudFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmID0gMCk7
CiAgICAgfkhUTUxTZWxlY3RFbGVtZW50SW1wbCgpOwogCi0gICAgdmlydHVhbCBJZCBpZCgpIGNv
bnN0OworICAgIHZvaWQgaW5pdCgpOworCiAgICAgRE9NU3RyaW5nIHR5cGUoKSBjb25zdDsKIAog
ICAgIHZpcnR1YWwgdm9pZCByZWNhbGNTdHlsZSggU3R5bGVDaGFuZ2UgKTsKQEAgLTU5NCw4ICs1
ODksNiBAQCBjbGFzcyBIVE1MS2V5Z2VuRWxlbWVudEltcGwgOiBwdWJsaWMgSFRNCiBwdWJsaWM6
CiAgICAgSFRNTEtleWdlbkVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIEhUTUxGb3JtRWxl
bWVudEltcGwgKmYgPSAwKTsKIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKLQogICAgIERP
TVN0cmluZyB0eXBlKCkgY29uc3Q7CiAKICAgICAvLyAjIyMgdGhpcyBpcyBqdXN0IGEgcm91Z2gg
Z3Vlc3MKQEAgLTYxNiw3ICs2MDksNiBAQCBwdWJsaWM6CiAgICAgSFRNTE9wdEdyb3VwRWxlbWVu
dEltcGwoRG9jdW1lbnRQdHIgKmRvYywgSFRNTEZvcm1FbGVtZW50SW1wbCAqZiA9IDApOwogICAg
IHZpcnR1YWwgfkhUTUxPcHRHcm91cEVsZW1lbnRJbXBsKCk7CiAKLSAgICB2aXJ0dWFsIElkIGlk
KCkgY29uc3Q7CiAgICAgRE9NU3RyaW5nIHR5cGUoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgYm9v
bCBpc0ZvY3VzYWJsZSgpIGNvbnN0OwpAQCAtNjQ1LDggKzYzNyw3IEBAIHB1YmxpYzoKICAgICBI
VE1MT3B0aW9uRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgSFRNTEZvcm1FbGVtZW50SW1w
bCAqZiA9IDApOwogCiAgICAgdmlydHVhbCBib29sIGlzRm9jdXNhYmxlKCkgY29uc3Q7Ci0gICAg
Ci0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OworCiAgICAgRE9NU3RyaW5nIHR5cGUoKSBjb25z
dDsKIAogICAgIERPTVN0cmluZyB0ZXh0KCkgY29uc3Q7CkBAIC02OTQsOCArNjg1LDYgQEAgcHVi
bGljOgogICAgIEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIEhUTUxG
b3JtRWxlbWVudEltcGwgKmYgPSAwKTsKICAgICB+SFRNTFRleHRBcmVhRWxlbWVudEltcGwoKTsK
IAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKLQogICAgIGxvbmcgY29scygpIGNvbnN0IHsg
cmV0dXJuIG1fY29sczsgfQogCiAgICAgbG9uZyByb3dzKCkgY29uc3QgeyByZXR1cm4gbV9yb3dz
OyB9CkBAIC03NTgsOCArNzQ3LDYgQEAgY2xhc3MgSFRNTElzSW5kZXhFbGVtZW50SW1wbCA6IHB1
YmxpYyBIVAogcHVibGljOgogICAgIEhUTUxJc0luZGV4RWxlbWVudEltcGwoRG9jdW1lbnRQdHIg
KmRvYywgSFRNTEZvcm1FbGVtZW50SW1wbCAqZiA9IDApOwogCi0gICAgdmlydHVhbCBJZCBpZCgp
IGNvbnN0OwotCiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0
dHJpYnV0ZUltcGwgKmF0dHIpOwogCiAgICAgRE9NU3RyaW5nIHByb21wdCgpIGNvbnN0OwpJbmRl
eDoga2h0bWwvaHRtbC9odG1sX2hlYWRpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfaGVhZGltcGwuY3BwLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjQ4CmRpZmYgLXUgLXAgLXIxLjQ4IGtodG1sL2h0bWwvaHRtbF9oZWFkaW1wbC5j
cHAKLS0tIGtodG1sL2h0bWwvaHRtbF9oZWFkaW1wbC5jcHAJMTEgTWF5IDIwMDUgMDU6NDk6MzQg
LTAwMDAJMS40OAorKysga2h0bWwvaHRtbC9odG1sX2hlYWRpbXBsLmNwcAkxNyBKdW4gMjAwNSAw
MTozMjo0NSAtMDAwMApAQCAtNDYsNyArNDYsNyBAQCB1c2luZyBuYW1lc3BhY2UgRE9NOwogdXNp
bmcgbmFtZXNwYWNlIGtodG1sOwogCiBIVE1MQmFzZUVsZW1lbnRJbXBsOjpIVE1MQmFzZUVsZW1l
bnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0gICAgOiBIVE1MRWxlbWVudEltcGwoZG9jKQorICAg
IDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6YmFzZSgpLCBkb2MpCiB7CiB9CiAKQEAgLTU0
LDExICs1NCw2IEBAIEhUTUxCYXNlRWxlbWVudEltcGw6On5IVE1MQmFzZUVsZW1lbnRJbXAKIHsK
IH0KIAotTm9kZUltcGw6OklkIEhUTUxCYXNlRWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gSURfQkFTRTsKLX0KLQogdm9pZCBIVE1MQmFzZUVsZW1lbnRJbXBsOjpwYXJzZU1h
cHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICphdHRyKQogewogICAgIHN3aXRjaChh
dHRyLT5pZCgpKQpAQCAtMTE5LDcgKzExNCw3IEBAIHZvaWQgSFRNTEJhc2VFbGVtZW50SW1wbDo6
c2V0VGFyZ2V0KGNvbnMKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogSFRNTExpbmtFbGVtZW50SW1w
bDo6SFRNTExpbmtFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAgIDogSFRNTEVsZW1l
bnRJbXBsKGRvYykKKyAgICA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6OmxpbmsoKSwgZG9j
KQogewogICAgIG1fc2hlZXQgPSAwOwogICAgIG1fbG9hZGluZyA9IGZhbHNlOwpAQCAtMTM0LDEx
ICsxMjksNiBAQCBIVE1MTGlua0VsZW1lbnRJbXBsOjp+SFRNTExpbmtFbGVtZW50SW1wCiAgICAg
aWYobV9jYWNoZWRTaGVldCkgbV9jYWNoZWRTaGVldC0+ZGVyZWYodGhpcyk7CiB9CiAKLU5vZGVJ
bXBsOjpJZCBIVE1MTGlua0VsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElE
X0xJTks7Ci19Ci0KIHZvaWQgSFRNTExpbmtFbGVtZW50SW1wbDo6c2V0RGlzYWJsZWRTdGF0ZShi
b29sIF9kaXNhYmxlZCkKIHsKICAgICBpbnQgb2xkRGlzYWJsZWRTdGF0ZSA9IG1fZGlzYWJsZWRT
dGF0ZTsKQEAgLTQyMyw3ICs0MTMsNyBAQCB2b2lkIEhUTUxMaW5rRWxlbWVudEltcGw6OnNldFR5
cGUoY29uc3QgCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSFRNTE1ldGFFbGVtZW50SW1wbDo6
SFRNTE1ldGFFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKSA6IEhUTUxFbGVtZW50SW1wbChk
b2MpCitIVE1MTWV0YUVsZW1lbnRJbXBsOjpIVE1MTWV0YUVsZW1lbnRJbXBsKERvY3VtZW50UHRy
ICpkb2MpIDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6bWV0YSgpLCBkb2MpCiB7CiB9CiAK
QEAgLTQzMSwxMSArNDIxLDYgQEAgSFRNTE1ldGFFbGVtZW50SW1wbDo6fkhUTUxNZXRhRWxlbWVu
dEltcAogewogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTE1ldGFFbGVtZW50SW1wbDo6aWQoKSBjb25z
dAotewotICAgIHJldHVybiBJRF9NRVRBOwotfQotCiB2b2lkIEhUTUxNZXRhRWxlbWVudEltcGw6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIpCiB7CiAgICAg
c3dpdGNoKGF0dHItPmlkKCkpCkBAIC01MTIsNyArNDk3LDcgQEAgdm9pZCBIVE1MTWV0YUVsZW1l
bnRJbXBsOjpzZXRTY2hlbWUoY29ucwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MU2NyaXB0
RWxlbWVudEltcGw6OkhUTUxTY3JpcHRFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAg
IDogSFRNTEVsZW1lbnRJbXBsKGRvYyksIG1fY2FjaGVkU2NyaXB0KDApLCBtX2NyZWF0ZWRCeVBh
cnNlcihmYWxzZSkKKyAgICA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6OnNjcmlwdCgpLCBk
b2MpLCBtX2NhY2hlZFNjcmlwdCgwKSwgbV9jcmVhdGVkQnlQYXJzZXIoZmFsc2UpCiB7CiB9CiAK
QEAgLTUyMiwxMSArNTA3LDYgQEAgSFRNTFNjcmlwdEVsZW1lbnRJbXBsOjp+SFRNTFNjcmlwdEVs
ZW1lbgogICAgICAgICBtX2NhY2hlZFNjcmlwdC0+ZGVyZWYodGhpcyk7CiB9CiAKLU5vZGVJbXBs
OjpJZCBIVE1MU2NyaXB0RWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURf
U0NSSVBUOwotfQotCiBib29sIEhUTUxTY3JpcHRFbGVtZW50SW1wbDo6aXNVUkxBdHRyaWJ1dGUo
QXR0cmlidXRlSW1wbCAqYXR0cikgY29uc3QKIHsKICAgICByZXR1cm4gYXR0ci0+aWQoKSA9PSBB
VFRSX1NSQzsKQEAgLTY2OSw3ICs2NDksNyBAQCB2b2lkIEhUTUxTY3JpcHRFbGVtZW50SW1wbDo6
c2V0VHlwZShjb25zCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSFRNTFN0eWxlRWxlbWVudElt
cGw6OkhUTUxTdHlsZUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpIDogSFRNTEVsZW1lbnRJ
bXBsKGRvYykKK0hUTUxTdHlsZUVsZW1lbnRJbXBsOjpIVE1MU3R5bGVFbGVtZW50SW1wbChEb2N1
bWVudFB0ciAqZG9jKSA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6OnN0eWxlKCksIGRvYykK
IHsKICAgICBtX3NoZWV0ID0gMDsKICAgICBtX2xvYWRpbmcgPSBmYWxzZTsKQEAgLTY4MCwxMSAr
NjYwLDYgQEAgSFRNTFN0eWxlRWxlbWVudEltcGw6On5IVE1MU3R5bGVFbGVtZW50SQogICAgIGlm
KG1fc2hlZXQpIG1fc2hlZXQtPmRlcmVmKCk7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MU3R5bGVF
bGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9TVFlMRTsKLX0KLQogLy8g
b3RoZXIgc3R1ZmYuLi4KIHZvaWQgSFRNTFN0eWxlRWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXR0
cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIpCiB7CkBAIC03OTYsNyArNzcxLDcgQEAg
dm9pZCBIVE1MU3R5bGVFbGVtZW50SW1wbDo6c2V0VHlwZShjb25zdAogLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQogCiBIVE1MVGl0bGVFbGVtZW50SW1wbDo6SFRNTFRpdGxlRWxlbWVudEltcGwoRG9jdW1l
bnRQdHIgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50SW1wbChkb2MpCisgICAgOiBIVE1MRWxlbWVu
dEltcGwoSFRNTE5hbWVzOjp0aXRsZSgpLCBkb2MpCiB7CiB9CiAKQEAgLTgwNCwxMSArNzc5LDYg
QEAgSFRNTFRpdGxlRWxlbWVudEltcGw6On5IVE1MVGl0bGVFbGVtZW50SQogewogfQogCi1Ob2Rl
SW1wbDo6SWQgSFRNTFRpdGxlRWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
SURfVElUTEU7Ci19Ci0KIHZvaWQgSFRNTFRpdGxlRWxlbWVudEltcGw6Omluc2VydGVkSW50b0Rv
Y3VtZW50KCkKIHsKICAgICBIVE1MRWxlbWVudEltcGw6Omluc2VydGVkSW50b0RvY3VtZW50KCk7
CkluZGV4OiBraHRtbC9odG1sL2h0bWxfaGVhZGltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfaGVhZGltcGwuaCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS4xOQpkaWZmIC11IC1wIC1yMS4xOSBraHRtbC9odG1sL2h0bWxfaGVhZGltcGwu
aAotLS0ga2h0bWwvaHRtbC9odG1sX2hlYWRpbXBsLmgJMTEgTWF5IDIwMDUgMDU6NDk6MzQgLTAw
MDAJMS4xOQorKysga2h0bWwvaHRtbC9odG1sX2hlYWRpbXBsLmgJMTcgSnVuIDIwMDUgMDE6MzI6
NDUgLTAwMDAKQEAgLTUyLDcgKzUyLDYgQEAgcHVibGljOgogICAgIERPTVN0cmluZyBocmVmKCkg
Y29uc3QgeyByZXR1cm4gbV9ocmVmOyB9CiAgICAgRE9NU3RyaW5nIHRhcmdldCgpIGNvbnN0IHsg
cmV0dXJuIG1fdGFyZ2V0OyB9CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CiAgICAgdmly
dHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIp
OwogICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9Eb2N1bWVudCgpOwogICAgIHZpcnR1YWwg
dm9pZCByZW1vdmVkRnJvbURvY3VtZW50KCk7CkBAIC03Nyw4ICs3Niw2IEBAIHB1YmxpYzoKICAg
ICBIVE1MTGlua0VsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpOwogICAgIH5IVE1MTGlua0Vs
ZW1lbnRJbXBsKCk7CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7Ci0KICAgICBib29sIGRp
c2FibGVkKCkgY29uc3Q7CiAgICAgdm9pZCBzZXREaXNhYmxlZChib29sKTsKIApAQCAtMTU1LDcg
KzE1Miw2IEBAIHB1YmxpYzoKIAogICAgIH5IVE1MTWV0YUVsZW1lbnRJbXBsKCk7CiAKLSAgICB2
aXJ0dWFsIElkIGlkKCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmli
dXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIpOwogICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRl
ZEludG9Eb2N1bWVudCgpOwogCkBAIC0xOTAsNyArMTg2LDYgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgdm9pZCByZW1vdmVkRnJvbURvY3VtZW50KCk7CiAgICAgdmlydHVhbCB2b2lkIG5vdGlmeUZp
bmlzaGVkKGtodG1sOjpDYWNoZWRPYmplY3QgKmZpbmlzaGVkT2JqKTsKIAotICAgIHZpcnR1YWwg
SWQgaWQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNVUkxBdHRyaWJ1dGUoQXR0cmlidXRl
SW1wbCAqYXR0cikgY29uc3Q7CiAKICAgICB2b2lkIHNldENyZWF0ZWRCeVBhcnNlcihib29sIGNy
ZWF0ZWRCeVBhcnNlcikgeyBtX2NyZWF0ZWRCeVBhcnNlciA9IGNyZWF0ZWRCeVBhcnNlcjsgfQpA
QCAtMjI5LDggKzIyNCw2IEBAIHB1YmxpYzoKICAgICBIVE1MU3R5bGVFbGVtZW50SW1wbChEb2N1
bWVudFB0ciAqZG9jKTsKICAgICB+SFRNTFN0eWxlRWxlbWVudEltcGwoKTsKIAotICAgIHZpcnR1
YWwgSWQgaWQoKSBjb25zdDsKLQogICAgIFN0eWxlU2hlZXRJbXBsICpzaGVldCgpIGNvbnN0IHsg
cmV0dXJuIG1fc2hlZXQ7IH0KIAogICAgIC8vIG92ZXJsb2FkIGZyb20gSFRNTEVsZW1lbnRJbXBs
CkBAIC0yNjcsOCArMjYwLDYgQEAgcHVibGljOgogCiAgICAgfkhUTUxUaXRsZUVsZW1lbnRJbXBs
KCk7CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7Ci0KICAgICB2aXJ0dWFsIHZvaWQgaW5z
ZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlZEZyb21Eb2N1bWVu
dCgpOwogICAgIHZpcnR1YWwgdm9pZCBjaGlsZHJlbkNoYW5nZWQoKTsKSW5kZXg6IGtodG1sL2h0
bWwvaHRtbF9pbWFnZWltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJD
b3JlL2todG1sL2h0bWwvaHRtbF9pbWFnZWltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjQyCmRpZmYgLXUgLXAgLXIxLjQyIGtodG1sL2h0bWwvaHRtbF9pbWFnZWltcGwuY3BwCi0tLSBr
aHRtbC9odG1sL2h0bWxfaW1hZ2VpbXBsLmNwcAkxMiBNYXkgMjAwNSAwMToxNjowMSAtMDAwMAkx
LjQyCisrKyBraHRtbC9odG1sL2h0bWxfaW1hZ2VpbXBsLmNwcAkxNyBKdW4gMjAwNSAwMTozMjo0
NiAtMDAwMApAQCAtNTEsNyArNTEsNyBAQAogdXNpbmcgbmFtZXNwYWNlIERPTTsKIHVzaW5nIG5h
bWVzcGFjZSBraHRtbDsKIAotLy8jZGVmaW5lIElOU1RSVU1FTlRfTEFZT1VUX1NDSEVEVUxJTkcg
MQorLy8gI2RlZmluZSBJTlNUUlVNRU5UX0xBWU9VVF9TQ0hFRFVMSU5HIDEKIAogSFRNTEltYWdl
TG9hZGVyOjpIVE1MSW1hZ2VMb2FkZXIoRWxlbWVudEltcGwqIGVsdCkKIDptX2VsZW1lbnQoZWx0
KSwgbV9pbWFnZSgwKSwgbV9maXJlZExvYWQodHJ1ZSksIG1faW1hZ2VDb21wbGV0ZSh0cnVlKQpA
QCAtNzUsNyArNzUsNyBAQCB2b2lkIEhUTUxJbWFnZUxvYWRlcjo6dXBkYXRlRnJvbUVsZW1lbnQo
CiAgICAgICAgIHJldHVybjsKIAogICAgIEF0b21pY1N0cmluZyBhdHRyOwotICAgIGlmIChlbGVt
ZW50KCktPmlkKCkgPT0gSURfT0JKRUNUKQorICAgIGlmIChlbGVtZW50KCktPmhhc0xvY2FsTmFt
ZShIVE1MTmFtZXM6Om9iamVjdCgpKSkKICAgICAgICAgYXR0ciA9IGVsZW1lbnQoKS0+Z2V0QXR0
cmlidXRlKEFUVFJfREFUQSk7CiAgICAgZWxzZQogICAgICAgICBhdHRyID0gZWxlbWVudCgpLT5n
ZXRBdHRyaWJ1dGUoQVRUUl9TUkMpOwpAQCAtODYsNiArODYsMTAgQEAgdm9pZCBIVE1MSW1hZ2VM
b2FkZXI6OnVwZGF0ZUZyb21FbGVtZW50KAogICAgICAgICBuZXdJbWFnZSA9IGVsZW1lbnQoKS0+
Z2V0RG9jdW1lbnQoKS0+ZG9jTG9hZGVyKCktPnJlcXVlc3RJbWFnZShraHRtbDo6cGFyc2VVUkwo
YXR0cikpOwogCiAgICAgaWYgKG5ld0ltYWdlICE9IG1faW1hZ2UpIHsKKyNpZmRlZiBJTlNUUlVN
RU5UX0xBWU9VVF9TQ0hFRFVMSU5HCisgICAgICAgIGlmICghZG9jdW1lbnQtPm93bmVyRWxlbWVu
dCgpICYmIG5ld0ltYWdlKQorICAgICAgICAgICAgcHJpbnRmKCJJbWFnZSByZXF1ZXN0ZWQgYXQg
JWRcbiIsIGVsZW1lbnQoKS0+Z2V0RG9jdW1lbnQoKS0+ZWxhcHNlZFRpbWUoKSk7CisjZW5kaWYK
ICAgICAgICAgbV9maXJlZExvYWQgPSBmYWxzZTsKICAgICAgICAgbV9pbWFnZUNvbXBsZXRlID0g
ZmFsc2U7CiAgICAgICAgIENhY2hlZEltYWdlKiBvbGRJbWFnZSA9IG1faW1hZ2U7CkBAIC0xMzMs
NyArMTM3LDcgQEAgdm9pZCBIVE1MSW1hZ2VMb2FkZXI6Om5vdGlmeUZpbmlzaGVkKENhYwogLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MSW1hZ2VFbGVtZW50SW1wbDo6SFRNTEltYWdlRWxlbWVu
dEltcGwoRG9jdW1lbnRQdHIgKmRvYywgSFRNTEZvcm1FbGVtZW50SW1wbCAqZikKLSAgICA6IEhU
TUxFbGVtZW50SW1wbChkb2MpLCBtX2ltYWdlTG9hZGVyKHRoaXMpLCBpc21hcChmYWxzZSksIG1f
Zm9ybShmKQorICAgIDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6aW1nKCksIGRvYyksIG1f
aW1hZ2VMb2FkZXIodGhpcyksIGlzbWFwKGZhbHNlKSwgbV9mb3JtKGYpCiB7CiAgICAgaWYgKG1f
Zm9ybSkKICAgICAgICAgbV9mb3JtLT5yZWdpc3RlckltZ0VsZW1lbnQodGhpcyk7CkBAIC0xNDUs
MTEgKzE0OSw2IEBAIEhUTUxJbWFnZUVsZW1lbnRJbXBsOjp+SFRNTEltYWdlRWxlbWVudEkKICAg
ICAgICAgbV9mb3JtLT5yZW1vdmVJbWdFbGVtZW50KHRoaXMpOwogfQogCi1Ob2RlSW1wbDo6SWQg
SFRNTEltYWdlRWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfSU1HOwot
fQotCiBib29sIEhUTUxJbWFnZUVsZW1lbnRJbXBsOjptYXBUb0VudHJ5KE5vZGVJbXBsOjpJZCBh
dHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdAogewogICAgIHN3aXRjaChh
dHRyKQpAQCAtNTI4LDcgKzUyNyw3IEBAIGxvbmcgSFRNTEltYWdlRWxlbWVudEltcGw6OnkoKSBj
b25zdAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MTWFwRWxlbWVudEltcGw6OkhUTUxNYXBF
bGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAgIDogSFRNTEVsZW1lbnRJbXBsKGRvYykK
KyAgICA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6Om1hcCgpLCBkb2MpCiB7CiB9CiAKQEAg
LTUzOCwxMSArNTM3LDYgQEAgSFRNTE1hcEVsZW1lbnRJbXBsOjp+SFRNTE1hcEVsZW1lbnRJbXBs
KAogICAgICAgICBnZXREb2N1bWVudCgpLT5yZW1vdmVJbWFnZU1hcCh0aGlzKTsKIH0KIAotTm9k
ZUltcGw6OklkIEhUTUxNYXBFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJ
RF9NQVA7Ci19Ci0KIGJvb2wKIEhUTUxNYXBFbGVtZW50SW1wbDo6bWFwTW91c2VFdmVudChpbnQg
eF8sIGludCB5XywgaW50IHdpZHRoXywgaW50IGhlaWdodF8sCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUmVuZGVyT2JqZWN0OjpOb2RlSW5mbyYgaW5mbykKQEAgLTU1MiwzMiAr
NTQ2LDI4IEBAIEhUTUxNYXBFbGVtZW50SW1wbDo6bWFwTW91c2VFdmVudChpbnQgeF8KICAgICBR
UHRyU3RhY2s8Tm9kZUltcGw+IG5vZGVTdGFjazsKIAogICAgIE5vZGVJbXBsICpjdXJyZW50ID0g
Zmlyc3RDaGlsZCgpOwotICAgIHdoaWxlKDEpCi0gICAgewotICAgICAgICBpZighY3VycmVudCkK
LSAgICAgICAgeworICAgIHdoaWxlICgxKSB7CisgICAgICAgIGlmICghY3VycmVudCkgewogICAg
ICAgICAgICAgaWYobm9kZVN0YWNrLmlzRW1wdHkoKSkgYnJlYWs7CiAgICAgICAgICAgICBjdXJy
ZW50ID0gbm9kZVN0YWNrLnBvcCgpOwogICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQtPm5l
eHRTaWJsaW5nKCk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICBp
ZihjdXJyZW50LT5pZCgpPT1JRF9BUkVBKQotICAgICAgICB7CisgICAgICAgIAorICAgICAgICBp
ZiAoY3VycmVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmFyZWEoKSkpIHsKICAgICAgICAgICAg
IC8vY291dCA8PCAiYXJlYSBmb3VuZCAiIDw8IGVuZGw7Ci0gICAgICAgICAgICBIVE1MQXJlYUVs
ZW1lbnRJbXBsKiBhcmVhPXN0YXRpY19jYXN0PEhUTUxBcmVhRWxlbWVudEltcGwqPihjdXJyZW50
KTsKKyAgICAgICAgICAgIEhUTUxBcmVhRWxlbWVudEltcGwqIGFyZWEgPSBzdGF0aWNfY2FzdDxI
VE1MQXJlYUVsZW1lbnRJbXBsKj4oY3VycmVudCk7CiAgICAgICAgICAgICBpZiAoYXJlYS0+bWFw
TW91c2VFdmVudCh4Xyx5Xyx3aWR0aF8saGVpZ2h0XywgaW5mbykpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIE5vZGVJbXBsICpjaGls
ZCA9IGN1cnJlbnQtPmZpcnN0Q2hpbGQoKTsKLSAgICAgICAgaWYoY2hpbGQpCi0gICAgICAgIHsK
KyAgICAgICAgaWYgKGNoaWxkKSB7CiAgICAgICAgICAgICBub2RlU3RhY2sucHVzaChjdXJyZW50
KTsKICAgICAgICAgICAgIGN1cnJlbnQgPSBjaGlsZDsKICAgICAgICAgfQogICAgICAgICBlbHNl
Ci0gICAgICAgIHsKICAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0U2libGluZygp
OwotICAgICAgICB9CiAgICAgfQogCiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNjM1LDExICs2MjUs
NiBAQCBIVE1MQXJlYUVsZW1lbnRJbXBsOjp+SFRNTEFyZWFFbGVtZW50SW1wCiAgICAgaWYgKG1f
Y29vcmRzKSBkZWxldGUgW10gbV9jb29yZHM7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MQXJlYUVs
ZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0FSRUE7Ci19Ci0KIHZvaWQg
SFRNTEFyZWFFbGVtZW50SW1wbDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRl
SW1wbCAqYXR0cikKIHsKICAgICBzd2l0Y2ggKGF0dHItPmlkKCkpCkluZGV4OiBraHRtbC9odG1s
L2h0bWxfaW1hZ2VpbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUv
a2h0bWwvaHRtbC9odG1sX2ltYWdlaW1wbC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIxCmRp
ZmYgLXUgLXAgLXIxLjIxIGtodG1sL2h0bWwvaHRtbF9pbWFnZWltcGwuaAotLS0ga2h0bWwvaHRt
bC9odG1sX2ltYWdlaW1wbC5oCTExIE1heSAyMDA1IDA1OjQ5OjM0IC0wMDAwCTEuMjEKKysrIGto
dG1sL2h0bWwvaHRtbF9pbWFnZWltcGwuaAkxNyBKdW4gMjAwNSAwMTozMjo0NiAtMDAwMApAQCAt
NzcsOCArNzcsNiBAQCBwdWJsaWM6CiAgICAgSFRNTEltYWdlRWxlbWVudEltcGwoRG9jdW1lbnRQ
dHIgKmRvYywgSFRNTEZvcm1FbGVtZW50SW1wbCAqZiA9IDApOwogICAgIH5IVE1MSW1hZ2VFbGVt
ZW50SW1wbCgpOwogCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwotCiAgICAgdmlydHVhbCBi
b29sIG1hcFRvRW50cnkoTm9kZUltcGw6OklkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiBy
ZXN1bHQpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBw
ZWRBdHRyaWJ1dGVJbXBsICopOwogCkBAIC0xNjEsOCArMTU5LDYgQEAgcHVibGljOgogICAgIEhU
TUxBcmVhRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYyk7CiAgICAgfkhUTUxBcmVhRWxlbWVu
dEltcGwoKTsKIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKLQogICAgIHZpcnR1YWwgdm9p
ZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICphdHRyKTsKIAogICAg
IGJvb2wgaXNEZWZhdWx0KCkgY29uc3QgeyByZXR1cm4gbV9zaGFwZSA9PSBEZWZhdWx0OyB9CkBA
IC0yMTIsMTEgKzIwOCw4IEBAIGNsYXNzIEhUTUxNYXBFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1M
RWwKIHsKIHB1YmxpYzoKICAgICBIVE1MTWFwRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYyk7
Ci0KICAgICB+SFRNTE1hcEVsZW1lbnRJbXBsKCk7CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29u
c3Q7Ci0KICAgICB2aXJ0dWFsIERPTVN0cmluZyBnZXROYW1lKCkgY29uc3QgeyByZXR1cm4gbV9u
YW1lOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0
cmlidXRlSW1wbCAqYXR0cik7CkluZGV4OiBraHRtbC9odG1sL2h0bWxfaW5saW5laW1wbC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sX2lu
bGluZWltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjQyCmRpZmYgLXUgLXAgLXIxLjQy
IGtodG1sL2h0bWwvaHRtbF9pbmxpbmVpbXBsLmNwcAotLS0ga2h0bWwvaHRtbC9odG1sX2lubGlu
ZWltcGwuY3BwCTExIE1heSAyMDA1IDA1OjQ5OjM0IC0wMDAwCTEuNDIKKysrIGtodG1sL2h0bWwv
aHRtbF9pbmxpbmVpbXBsLmNwcAkxNyBKdW4gMjAwNSAwMTozMjo0NiAtMDAwMApAQCAtNDUsNyAr
NDUsNyBAQCB1c2luZyBuYW1lc3BhY2Uga2h0bWw7CiBuYW1lc3BhY2UgRE9NIHsKIAogSFRNTEFu
Y2hvckVsZW1lbnRJbXBsOjpIVE1MQW5jaG9yRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykK
LSAgICA6IEhUTUxFbGVtZW50SW1wbChkb2MpCisgICAgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5h
bWVzOjphKCksIGRvYykKIHsKICAgICBtX2hhc1RhcmdldCA9IGZhbHNlOwogfQpAQCAtMTA0LDEx
ICsxMDQsNiBAQCBib29sIEhUTUxBbmNob3JFbGVtZW50SW1wbDo6aXNLZXlib2FyZEZvCiAgICAg
cmV0dXJuIGdldERvY3VtZW50KCktPnBhcnQoKS0+dGFic1RvTGlua3MoKTsKIH0KIAotTm9kZUlt
cGw6OklkIEhUTUxBbmNob3JFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJ
RF9BOwotfQotCiB2b2lkIEhUTUxBbmNob3JFbGVtZW50SW1wbDo6ZGVmYXVsdEV2ZW50SGFuZGxl
cihFdmVudEltcGwgKmV2dCkKIHsKICAgICAvLyBSZWFjdCBvbiBjbGlja3MgYW5kIG9uIGtleXBy
ZXNzZXMuCkBAIC0xNTIsNyArMTQ3LDcgQEAgdm9pZCBIVE1MQW5jaG9yRWxlbWVudEltcGw6OmRl
ZmF1bHRFdmVudAogICAgICAgICBpZiAoIGUgJiYgZS0+YnV0dG9uKCkgPT0gMSApCiAgICAgICAg
ICAgICB1dGFyZ2V0ID0gIl9ibGFuayI7CiAKLSAgICAgICAgaWYgKCBldnQtPnRhcmdldCgpLT5p
ZCgpID09IElEX0lNRyApIHsKKyAgICAgICAgaWYgKGV2dC0+dGFyZ2V0KCktPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjppbWcoKSkpIHsKICAgICAgICAgICAgIEhUTUxJbWFnZUVsZW1lbnRJbXBsKiBp
bWcgPSBzdGF0aWNfY2FzdDxIVE1MSW1hZ2VFbGVtZW50SW1wbCo+KCBldnQtPnRhcmdldCgpICk7
CiAgICAgICAgICAgICBpZiAoIGltZyAmJiBpbWctPmlzU2VydmVyTWFwKCkgKQogICAgICAgICAg
ICAgewpAQCAtMzgyLDcgKzM3Nyw3IEBAIHZvaWQgSFRNTEFuY2hvckVsZW1lbnRJbXBsOjpmb2N1
cygpCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSFRNTEJSRWxlbWVudEltcGw6OkhUTUxCUkVs
ZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpIDogSFRNTEVsZW1lbnRJbXBsKGRvYykKK0hUTUxC
UkVsZW1lbnRJbXBsOjpIVE1MQlJFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKSA6IEhUTUxF
bGVtZW50SW1wbChIVE1MTmFtZXM6OmJyKCksIGRvYykKIHsKIH0KIApAQCAtMzkwLDExICszODUs
NiBAQCBIVE1MQlJFbGVtZW50SW1wbDo6fkhUTUxCUkVsZW1lbnRJbXBsKCkKIHsKIH0KIAotTm9k
ZUltcGw6OklkIEhUTUxCUkVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElE
X0JSOwotfQotCiBib29sIEhUTUxCUkVsZW1lbnRJbXBsOjptYXBUb0VudHJ5KE5vZGVJbXBsOjpJ
ZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdAogewogICAgIGlmIChh
dHRyID09IEFUVFJfQ0xFQVIpIHsKQEAgLTQ0NSw3ICs0MzUsNyBAQCB2b2lkIEhUTUxCUkVsZW1l
bnRJbXBsOjpzZXRDbGVhcihjb25zdCBECiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxGb250
RWxlbWVudEltcGw6OkhUTUxGb250RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgICA6
IEhUTUxFbGVtZW50SW1wbChkb2MpCisgICAgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjpm
b250KCksIGRvYykKIHsKIH0KIApAQCAtNDUzLDExICs0NDMsNiBAQCBIVE1MRm9udEVsZW1lbnRJ
bXBsOjp+SFRNTEZvbnRFbGVtZW50SW1wCiB7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MRm9udEVs
ZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0ZPTlQ7Ci19Ci0KIC8vIEFs
bG93cyBsZWFkaW5nIHNwYWNlcy4KIC8vIEFsbG93cyB0cmFpbGluZyBub25udW1lcmljIGNoYXJh
Y3RlcnMuCiAvLyBSZXR1cm5zIDEwIGZvciBhbnkgc2l6ZSBncmVhdGVyIHRoYW4gOS4KQEAgLTU5
MCw4ICs1NzUsOCBAQCB2b2lkIEhUTUxGb250RWxlbWVudEltcGw6OnNldFNpemUoY29uc3QgCiAK
IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSFRNTE1vZEVsZW1lbnRJbXBsOjpIVE1MTW9kRWxlbWVu
dEltcGwoRG9jdW1lbnRQdHIgKmRvYywgdXNob3J0IGVsZW1lbnRJZCkKLSAgICA6IEhUTUxHZW5l
cmljRWxlbWVudEltcGwoZG9jLCBlbGVtZW50SWQpCitIVE1MTW9kRWxlbWVudEltcGw6OkhUTUxN
b2RFbGVtZW50SW1wbChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudFB0ciAq
ZG9jKQorICAgIDogSFRNTEVsZW1lbnRJbXBsKHRhZ05hbWUsIGRvYykKIHsKIH0KIApAQCAtNjE4
LDE1ICs2MDMsMTAgQEAgdm9pZCBIVE1MTW9kRWxlbWVudEltcGw6OnNldERhdGVUaW1lKGNvbgog
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MUXVvdGVFbGVtZW50SW1wbDo6SFRNTFF1b3RlRWxl
bWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50SW1wbChkb2MpCisg
ICAgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjpxKCksIGRvYykKIHsKIH0KIAotTm9kZUlt
cGw6OklkIEhUTUxRdW90ZUVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElE
X1E7Ci19Ci0gICAgCiBET01TdHJpbmcgSFRNTFF1b3RlRWxlbWVudEltcGw6OmNpdGUoKSBjb25z
dAogewogICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoQVRUUl9DSVRFKTsKSW5kZXg6IGtodG1sL2h0
bWwvaHRtbF9pbmxpbmVpbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNv
cmUva2h0bWwvaHRtbC9odG1sX2lubGluZWltcGwuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4x
OQpkaWZmIC11IC1wIC1yMS4xOSBraHRtbC9odG1sL2h0bWxfaW5saW5laW1wbC5oCi0tLSBraHRt
bC9odG1sL2h0bWxfaW5saW5laW1wbC5oCTExIE1heSAyMDA1IDA1OjQ5OjM0IC0wMDAwCTEuMTkK
KysrIGtodG1sL2h0bWwvaHRtbF9pbmxpbmVpbXBsLmgJMTcgSnVuIDIwMDUgMDE6MzI6NDcgLTAw
MDAKQEAgLTM5LDcgKzM5LDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpc01vdXNlRm9j
dXNhYmxlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlzS2V5Ym9hcmRGb2N1c2FibGUoKSBj
b25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNGb2N1c2FibGUoKSBjb25zdDsKLSAgICB2aXJ0dWFs
IElkIGlkKCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1h
cHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIpOwogICAgIHZpcnR1YWwgdm9pZCBkZWZhdWx0RXZlbnRI
YW5kbGVyKEV2ZW50SW1wbCAqZXZ0KTsKICAgICB2aXJ0dWFsIHZvaWQgYWNjZXNzS2V5QWN0aW9u
KGJvb2wgZnVsbEFjdGlvbik7CkBAIC05Nyw4ICs5Niw2IEBAIGNsYXNzIEhUTUxCUkVsZW1lbnRJ
bXBsIDogcHVibGljIEhUTUxFbGUKIHB1YmxpYzoKICAgICBIVE1MQlJFbGVtZW50SW1wbChEb2N1
bWVudFB0ciAqZG9jKTsKICAgICB+SFRNTEJSRWxlbWVudEltcGwoKTsKLQotICAgIHZpcnR1YWwg
SWQgaWQoKSBjb25zdDsKICAgICAKICAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShJZCBhdHRy
LCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQg
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqYXR0cik7CkBAIC0xMTYs
OCArMTEzLDYgQEAgY2xhc3MgSFRNTEZvbnRFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MRQogcHVi
bGljOgogICAgIEhUTUxGb250RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYyk7CiAgICAgfkhU
TUxGb250RWxlbWVudEltcGwoKTsKLQotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKICAgICAK
ICAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRy
eSYgcmVzdWx0KSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUo
TWFwcGVkQXR0cmlidXRlSW1wbCAqYXR0cik7CkBAIC0xMzQsMTAgKzEyOSwxMCBAQCBwdWJsaWM6
CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotY2xhc3MgSFRNTE1vZEVsZW1lbnRJbXBsIDogcHVi
bGljIEhUTUxHZW5lcmljRWxlbWVudEltcGwKK2NsYXNzIEhUTUxNb2RFbGVtZW50SW1wbCA6IHB1
YmxpYyBIVE1MRWxlbWVudEltcGwKIHsKIHB1YmxpYzoKLSAgICBIVE1MTW9kRWxlbWVudEltcGwo
RG9jdW1lbnRQdHIgKmRvYywgdXNob3J0IGVsZW1lbnRJZCk7CisgICAgSFRNTE1vZEVsZW1lbnRJ
bXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50UHRyICpkb2MpOwogCiAg
ICAgRE9NU3RyaW5nIGNpdGUoKSBjb25zdDsKICAgICB2b2lkIHNldENpdGUoY29uc3QgRE9NU3Ry
aW5nICYpOwpAQCAtMTUyLDggKzE0Nyw2IEBAIGNsYXNzIEhUTUxRdW90ZUVsZW1lbnRJbXBsIDog
cHVibGljIEhUTUwKIHsKIHB1YmxpYzoKICAgICBIVE1MUXVvdGVFbGVtZW50SW1wbChEb2N1bWVu
dFB0ciAqZG9jKTsKLQotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKICAgICAKICAgICBET01T
dHJpbmcgY2l0ZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0Q2l0ZShjb25zdCBET01TdHJpbmcgJik7
CkluZGV4OiBraHRtbC9odG1sL2h0bWxfbGlzdGltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbF9saXN0aW1wbC5jcHAsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuOQpkaWZmIC11IC1wIC1yMS45IGtodG1sL2h0bWwvaHRtbF9saXN0aW1w
bC5jcHAKLS0tIGtodG1sL2h0bWwvaHRtbF9saXN0aW1wbC5jcHAJMTEgTWF5IDIwMDUgMDU6NDk6
MzQgLTAwMDAJMS45CisrKyBraHRtbC9odG1sL2h0bWxfbGlzdGltcGwuY3BwCTE3IEp1biAyMDA1
IDAxOjMyOjQ3IC0wMDAwCkBAIC0zMiwxMSArMzIsNiBAQCB1c2luZyBuYW1lc3BhY2Uga2h0bWw7
CiAKIG5hbWVzcGFjZSBET00gewogCi1Ob2RlSW1wbDo6SWQgSFRNTFVMaXN0RWxlbWVudEltcGw6
OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfVUw7Ci19Ci0KIGJvb2wgSFRNTFVMaXN0RWxl
bWVudEltcGw6Om1hcFRvRW50cnkoTm9kZUltcGw6OklkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVu
dHJ5JiByZXN1bHQpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChhdHRyKSB7CkBAIC04NCwxMSArNzks
NiBAQCB2b2lkIEhUTUxVTGlzdEVsZW1lbnRJbXBsOjpzZXRUeXBlKGNvbnN0CiAKIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KIAotTm9kZUltcGw6OklkIEhUTUxEaXJlY3RvcnlFbGVtZW50SW1wbDo6aWQo
KSBjb25zdAotewotICAgIHJldHVybiBJRF9ESVI7Ci19Ci0KIGJvb2wgSFRNTERpcmVjdG9yeUVs
ZW1lbnRJbXBsOjpjb21wYWN0KCkgY29uc3QKIHsKICAgICByZXR1cm4gIWdldEF0dHJpYnV0ZShB
VFRSX0NPTVBBQ1QpLmlzTnVsbCgpOwpAQCAtMTAxLDExICs5MSw2IEBAIHZvaWQgSFRNTERpcmVj
dG9yeUVsZW1lbnRJbXBsOjpzZXRDb21wYWMKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Ob2Rl
SW1wbDo6SWQgSFRNTE1lbnVFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJ
RF9NRU5VOwotfQotCiBib29sIEhUTUxNZW51RWxlbWVudEltcGw6OmNvbXBhY3QoKSBjb25zdAog
ewogICAgIHJldHVybiAhZ2V0QXR0cmlidXRlKEFUVFJfQ09NUEFDVCkuaXNOdWxsKCk7CkBAIC0x
MTgsMTEgKzEwMyw2IEBAIHZvaWQgSFRNTE1lbnVFbGVtZW50SW1wbDo6c2V0Q29tcGFjdChib28K
IAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Ob2RlSW1wbDo6SWQgSFRNTE9MaXN0RWxlbWVudElt
cGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfT0w7Ci19Ci0KIGJvb2wgSFRNTE9MaXN0
RWxlbWVudEltcGw6Om1hcFRvRW50cnkoTm9kZUltcGw6OklkIGF0dHIsIE1hcHBlZEF0dHJpYnV0
ZUVudHJ5JiByZXN1bHQpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChhdHRyKSB7CkBAIC0xNTUsNyAr
MTM1LDcgQEAgdm9pZCBIVE1MT0xpc3RFbGVtZW50SW1wbDo6cGFyc2VNYXBwZWRBdAogICAgIGNh
c2UgQVRUUl9TVEFSVDoKICAgICAgICAgICAgIF9zdGFydCA9ICFhdHRyLT5pc051bGwoKSA/IGF0
dHItPnZhbHVlKCkudG9JbnQoKSA6IDE7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgSFRNTFVMaXN0
RWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICBIVE1MRWxl
bWVudEltcGw6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwogICAgIH0KIH0KIApAQCAtMTg2
LDExICsxNjYsNiBAQCB2b2lkIEhUTUxPTGlzdEVsZW1lbnRJbXBsOjpzZXRUeXBlKGNvbnN0CiAK
IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotTm9kZUltcGw6OklkIEhUTUxMSUVsZW1lbnRJbXBsOjpp
ZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0xJOwotfQotCiBib29sIEhUTUxMSUVsZW1lbnRJ
bXBsOjptYXBUb0VudHJ5KE5vZGVJbXBsOjpJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYg
cmVzdWx0KSBjb25zdAogewogICAgIHN3aXRjaCAoYXR0cikgewpAQCAtMjUyLDExICsyMjcsOCBA
QCB2b2lkIEhUTUxMSUVsZW1lbnRJbXBsOjphdHRhY2goKQogICAgICAgICBOb2RlSW1wbCAqbGlz
dE5vZGUgPSAwOwogICAgICAgICBOb2RlSW1wbCAqbiA9IHRoaXM7CiAgICAgICAgIHdoaWxlICgh
bGlzdE5vZGUgJiYgKG4gPSBuLT5wYXJlbnROb2RlKCkpKSB7Ci0gICAgICAgICAgICBzd2l0Y2gg
KG4tPmlkKCkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIElEX1VMOgotICAgICAgICAgICAgICAg
IGNhc2UgSURfT0w6Ci0gICAgICAgICAgICAgICAgICAgIGxpc3ROb2RlID0gbjsKLSAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmIChuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dWwoKSkgfHwg
bi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9sKCkpKQorICAgICAgICAgICAgICAgIGxpc3ROb2Rl
ID0gbjsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8gSWYgd2UgYXJlIG5vdCBpbiBh
IGxpc3QsIHRlbGwgdGhlIHJlbmRlcmVyIHNvIGl0IGNhbiBwb3NpdGlvbiB1cyBpbnNpZGUuCkBA
IC0yNjUsNyArMjM3LDcgQEAgdm9pZCBIVE1MTElFbGVtZW50SW1wbDo6YXR0YWNoKCkKICAgICAg
ICAgICAgIHJlbmRlci0+c2V0Tm90SW5MaXN0KHRydWUpOwogCiAJLy8gSWYgd2UgYXJlIGZpcnN0
LCBhbmQgdGhlIE9MIGhhcyBhIHN0YXJ0IGF0dHIsIHNldCB0aGUgdmFsdWUuCi0JaWYgKGxpc3RO
b2RlICYmIGxpc3ROb2RlLT5pZCgpID09IElEX09MICYmICFtX3JlbmRlci0+cHJldmlvdXNTaWJs
aW5nKCkpIHsKKwlpZiAobGlzdE5vZGUgJiYgbGlzdE5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjpvbCgpKSAmJiAhbV9yZW5kZXItPnByZXZpb3VzU2libGluZygpKSB7CiAJICAgIEhUTUxPTGlz
dEVsZW1lbnRJbXBsICpvbCA9IHN0YXRpY19jYXN0PEhUTUxPTGlzdEVsZW1lbnRJbXBsICo+KGxp
c3ROb2RlKTsKICAgICAgICAgICAgIHJlbmRlci0+c2V0VmFsdWUob2wtPnN0YXJ0KCkpOwogCX0K
QEAgLTI5NSwxMiArMjY3LDggQEAgdm9pZCBIVE1MTElFbGVtZW50SW1wbDo6c2V0VmFsdWUobG9u
ZyB2YQogewogICAgIHNldEF0dHJpYnV0ZShBVFRSX1ZBTFVFLCBRU3RyaW5nOjpudW1iZXIodmFs
dWUpKTsKIH0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotTm9kZUltcGw6OklkIEhUTUxETGlzdEVs
ZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0RMOwotfQorLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQogCiBib29sIEhUTUxETGlzdEVsZW1lbnRJbXBsOjpjb21wYWN0KCkgY29uc3QK
IHsKSW5kZXg6IGtodG1sL2h0bWwvaHRtbF9saXN0aW1wbC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbF9saXN0aW1wbC5oLHYKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjcKZGlmZiAtdSAtcCAtcjEuNyBraHRtbC9odG1sL2h0bWxfbGlzdGltcGwu
aAotLS0ga2h0bWwvaHRtbC9odG1sX2xpc3RpbXBsLmgJMTEgTWF5IDIwMDUgMDU6NDk6MzQgLTAw
MDAJMS43CisrKyBraHRtbC9odG1sL2h0bWxfbGlzdGltcGwuaAkxNyBKdW4gMjAwNSAwMTozMjo0
NyAtMDAwMApAQCAtMzUsMTEgKzM1LDkgQEAgbmFtZXNwYWNlIERPTQogY2xhc3MgSFRNTFVMaXN0
RWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTEVsZW1lbnRJbXBsCiB7CiBwdWJsaWM6Ci0gICAgSFRN
TFVMaXN0RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykgOiBIVE1MRWxlbWVudEltcGwoZG9j
KSB7fQorICAgIEhUTUxVTGlzdEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpIDogSFRNTEVs
ZW1lbnRJbXBsKEhUTUxOYW1lczo6dWwoKSwgZG9jKSB7fQogICAgIHZpcnR1YWwgfkhUTUxVTGlz
dEVsZW1lbnRJbXBsKCkge30KIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKLQogICAgIHZp
cnR1YWwgYm9vbCBtYXBUb0VudHJ5KElkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1
bHQpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRB
dHRyaWJ1dGVJbXBsICopOwogCkBAIC01Nyw5ICs1NSw3IEBAIHB1YmxpYzoKIGNsYXNzIEhUTUxE
aXJlY3RvcnlFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MRWxlbWVudEltcGwKIHsKIHB1YmxpYzoK
LSAgICBIVE1MRGlyZWN0b3J5RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykgOiBIVE1MRWxl
bWVudEltcGwoZG9jKSB7fQotCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OworICAgIEhUTUxE
aXJlY3RvcnlFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKSA6IEhUTUxFbGVtZW50SW1wbChI
VE1MTmFtZXM6OmRpcigpLCBkb2MpIHt9CiAKICAgICBib29sIGNvbXBhY3QoKSBjb25zdDsKICAg
ICB2b2lkIHNldENvbXBhY3QoYm9vbCk7CkBAIC03MCw5ICs2Niw3IEBAIHB1YmxpYzoKIGNsYXNz
IEhUTUxNZW51RWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTEVsZW1lbnRJbXBsCiB7CiBwdWJsaWM6
Ci0gICAgSFRNTE1lbnVFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKSA6IEhUTUxFbGVtZW50
SW1wbChkb2MpIHt9Ci0KLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CisgICAgSFRNTE1lbnVF
bGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKSA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6
Om1lbnUoKSwgZG9jKSB7fQogCiAgICAgYm9vbCBjb21wYWN0KCkgY29uc3Q7CiAgICAgdm9pZCBz
ZXRDb21wYWN0KGJvb2wpOwpAQCAtODAsMTMgKzc0LDExIEBAIHB1YmxpYzoKIAogLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQogCi1jbGFzcyBIVE1MT0xpc3RFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MVUxp
c3RFbGVtZW50SW1wbAorY2xhc3MgSFRNTE9MaXN0RWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTEVs
ZW1lbnRJbXBsCiB7CiBwdWJsaWM6CiAgICAgSFRNTE9MaXN0RWxlbWVudEltcGwoRG9jdW1lbnRQ
dHIgKmRvYykKLSAgICAgICAgOiBIVE1MVUxpc3RFbGVtZW50SW1wbChkb2MpIHsgX3N0YXJ0ID0g
MTsgfQotCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OworICAgICAgICA6IEhUTUxFbGVtZW50
SW1wbChIVE1MTmFtZXM6Om9sKCksIGRvYykgeyBfc3RhcnQgPSAxOyB9CiAgICAgCiAgICAgdmly
dHVhbCBib29sIG1hcFRvRW50cnkoSWQgYXR0ciwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3Vs
dCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0
dHJpYnV0ZUltcGwgKik7CkBAIC0xMTAsMTEgKzEwMiw5IEBAIGNsYXNzIEhUTUxMSUVsZW1lbnRJ
bXBsIDogcHVibGljIEhUTUxFbGUKIHsKIHB1YmxpYzoKICAgICBIVE1MTElFbGVtZW50SW1wbChE
b2N1bWVudFB0ciAqZG9jKQotICAgICAgICA6IEhUTUxFbGVtZW50SW1wbChkb2MpIHsgaXNWYWx1
ZWQgPSBmYWxzZTsgfQorICAgICAgICA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6OmxpKCks
IGRvYykgeyBpc1ZhbHVlZCA9IGZhbHNlOyB9CiAgICAgdmlydHVhbCB+SFRNTExJRWxlbWVudElt
cGwoKSB7fQogCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwotCiAgICAgdmlydHVhbCBib29s
IG1hcFRvRW50cnkoTm9kZUltcGw6OklkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1
bHQpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRB
dHRyaWJ1dGVJbXBsICphdHRyKTsKIApAQCAtMTM2LDExICsxMjYsOSBAQCBwcml2YXRlOgogY2xh
c3MgSFRNTERMaXN0RWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTEVsZW1lbnRJbXBsCiB7CiBwdWJs
aWM6Ci0gICAgSFRNTERMaXN0RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykgOiBIVE1MRWxl
bWVudEltcGwoZG9jKSB7fQorICAgIEhUTUxETGlzdEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpk
b2MpIDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6ZGwoKSwgZG9jKSB7fQogICAgIHZpcnR1
YWwgfkhUTUxETGlzdEVsZW1lbnRJbXBsKCkge30KIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25z
dDsKLQogICAgIGJvb2wgY29tcGFjdCgpIGNvbnN0OwogICAgIHZvaWQgc2V0Q29tcGFjdChib29s
KTsKIH07CkluZGV4OiBraHRtbC9odG1sL2h0bWxfbWlzY2ltcGwuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbF9taXNjaW1wbC5jcHAsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuMjYKZGlmZiAtdSAtcCAtcjEuMjYga2h0bWwvaHRtbC9odG1s
X21pc2NpbXBsLmNwcAotLS0ga2h0bWwvaHRtbC9odG1sX21pc2NpbXBsLmNwcAkxMSBKdW4gMjAw
NSAwOTo1MTowMSAtMDAwMAkxLjI2CisrKyBraHRtbC9odG1sL2h0bWxfbWlzY2ltcGwuY3BwCTE3
IEp1biAyMDA1IDAxOjMyOjQ3IC0wMDAwCkBAIC0zNSwxNSArMzUsMTAgQEAKIG5hbWVzcGFjZSBE
T00gewogCiBIVE1MQmFzZUZvbnRFbGVtZW50SW1wbDo6SFRNTEJhc2VGb250RWxlbWVudEltcGwo
RG9jdW1lbnRQdHIgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50SW1wbChkb2MpCisgICAgOiBIVE1M
RWxlbWVudEltcGwoSFRNTE5hbWVzOjpiYXNlZm9udCgpLCBkb2MpCiB7CiB9CiAKLU5vZGVJbXBs
OjpJZCBIVE1MQmFzZUZvbnRFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJ
RF9CQVNFRk9OVDsKLX0KLQogRE9NU3RyaW5nIEhUTUxCYXNlRm9udEVsZW1lbnRJbXBsOjpjb2xv
cigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGdldEF0dHJpYnV0ZShBVFRSX0NPTE9SKTsKQEAgLTE0
MSw3MiArMTM2LDcyIEBAIE5vZGVJbXBsICpIVE1MQ29sbGVjdGlvbkltcGw6OnRyYXZlcnNlTmUK
ICAgICAgICAgICAgIEhUTUxFbGVtZW50SW1wbCAqZSA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50
SW1wbCAqPihjdXJyZW50KTsKICAgICAgICAgICAgIHN3aXRjaCh0eXBlKSB7CiAgICAgICAgICAg
ICBjYXNlIERPQ19JTUFHRVM6Ci0gICAgICAgICAgICAgICAgaWYoZS0+aWQoKSA9PSBJRF9JTUcp
CisgICAgICAgICAgICAgICAgaWYgKGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmltZygpKSkK
ICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgY2FzZSBET0NfRk9STVM6Ci0gICAgICAgICAgICAgICAgaWYoZS0+aWQo
KSA9PSBJRF9GT1JNKQorICAgICAgICAgICAgICAgIGlmKGUtPmhhc0xvY2FsTmFtZShIVE1MTmFt
ZXM6OmZvcm0oKSkpCiAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgRE9DX05BTUVBQkxFX0lURU1TOgotICAg
ICAgICAgICAgICAgIGlmKGUtPmlkKCkgPT0gSURfSU1HKQorICAgICAgICAgICAgICAgIGlmIChl
LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjppbWcoKSkpCiAgICAgICAgICAgICAgICAgICAgIGZv
dW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBpZihlLT5pZCgpID09IElEX0ZPUk0pCisgICAg
ICAgICAgICAgICAgaWYgKGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmZvcm0oKSkpCiAgICAg
ICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBpZihlLT5pZCgp
ID09IElEX0FQUExFVCkKKyAgICAgICAgICAgICAgICBpZiAoZS0+aGFzTG9jYWxOYW1lKEhUTUxO
YW1lczo6YXBwbGV0KCkpKQogICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAg
ICAgICAgICAgICAgaWYoZS0+aWQoKSA9PSBJRF9FTUJFRCkKKyAgICAgICAgICAgICAgICBpZiAo
ZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6ZW1iZWQoKSkpCiAgICAgICAgICAgICAgICAgICAg
IGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBpZihlLT5pZCgpID09IElEX09CSkVDVCkK
KyAgICAgICAgICAgICAgICBpZiAoZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b2JqZWN0KCkp
KQogICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICBjYXNlIFRBQkxFX1RCT0RJRVM6Ci0gICAgICAgICAgICAgICAgaWYo
ZS0+aWQoKSA9PSBJRF9UQk9EWSkKKyAgICAgICAgICAgICAgICBpZiAoZS0+aGFzTG9jYWxOYW1l
KEhUTUxOYW1lczo6dGJvZHkoKSkpCiAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsK
LSAgICAgICAgICAgICAgICBlbHNlIGlmKGUtPmlkKCkgPT0gSURfVEFCTEUpCisgICAgICAgICAg
ICAgICAgZWxzZSBpZiAoZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dGFibGUoKSkpCiAgICAg
ICAgICAgICAgICAgICAgIGRlZXAgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIGNhc2UgVFJfQ0VMTFM6Ci0gICAgICAgICAgICAgICAgaWYoZS0+aWQoKSA9PSBJ
RF9URCB8fCBlLT5pZCgpID09IElEX1RIKQorICAgICAgICAgICAgICAgIGlmIChlLT5oYXNMb2Nh
bE5hbWUoSFRNTE5hbWVzOjp0ZCgpKSB8fCBlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0aCgp
KSkKICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGVs
c2UgaWYoZS0+aWQoKSA9PSBJRF9UQUJMRSkKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChlLT5o
YXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0YWJsZSgpKSkKICAgICAgICAgICAgICAgICAgICAgZGVl
cCA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBUQUJM
RV9ST1dTOgogICAgICAgICAgICAgY2FzZSBUU0VDVElPTl9ST1dTOgotICAgICAgICAgICAgICAg
IGlmKGUtPmlkKCkgPT0gSURfVFIpCisgICAgICAgICAgICAgICAgaWYgKGUtPmhhc0xvY2FsTmFt
ZShIVE1MTmFtZXM6OnRyKCkpKQogICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7Ci0g
ICAgICAgICAgICAgICAgZWxzZSBpZihlLT5pZCgpID09IElEX1RBQkxFKQorICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnRhYmxlKCkpKQogICAgICAg
ICAgICAgICAgICAgICBkZWVwID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICBjYXNlIFNFTEVDVF9PUFRJT05TOgotICAgICAgICAgICAgICAgIGlmKGUtPmlkKCkg
PT0gSURfT1BUSU9OKQorICAgICAgICAgICAgICAgIGlmIChlLT5oYXNMb2NhbE5hbWUoSFRNTE5h
bWVzOjpvcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgTUFQX0FSRUFTOgotICAgICAgICAg
ICAgICAgIGlmKGUtPmlkKCkgPT0gSURfQVJFQSkKKyAgICAgICAgICAgICAgICBpZiAoZS0+aGFz
TG9jYWxOYW1lKEhUTUxOYW1lczo6YXJlYSgpKSkKICAgICAgICAgICAgICAgICAgICAgZm91bmQg
PSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBET0NfQVBQ
TEVUUzogICAvLyBhbGwgT0JKRUNUIGFuZCBBUFBMRVQgZWxlbWVudHMKLSAgICAgICAgICAgICAg
ICBpZihlLT5pZCgpID09IElEX09CSkVDVCB8fCBlLT5pZCgpID09IElEX0FQUExFVCkKKyAgICAg
ICAgICAgICAgICBpZiAoZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b2JqZWN0KCkpIHx8IGUt
Pmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmFwcGxldCgpKSkKICAgICAgICAgICAgICAgICAgICAg
Zm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBE
T0NfRU1CRURTOiAgIC8vIGFsbCBFTUJFRCBlbGVtZW50cwotICAgICAgICAgICAgICAgIGlmKGUt
PmlkKCkgPT0gSURfRU1CRUQpCisgICAgICAgICAgICAgICAgaWYgKGUtPmhhc0xvY2FsTmFtZShI
VE1MTmFtZXM6OmVtYmVkKCkpKQogICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIERPQ19PQkpFQ1RTOiAgIC8v
IGFsbCBPQkpFQ1QgZWxlbWVudHMKLSAgICAgICAgICAgICAgICBpZihlLT5pZCgpID09IElEX09C
SkVDVCkKKyAgICAgICAgICAgICAgICBpZiAoZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b2Jq
ZWN0KCkpKQogICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIERPQ19MSU5LUzogICAgIC8vIGFsbCBBIF9hbmRf
IEFSRUEgZWxlbWVudHMgd2l0aCBhIHZhbHVlIGZvciBocmVmCi0gICAgICAgICAgICAgICAgaWYo
ZS0+aWQoKSA9PSBJRF9BIHx8IGUtPmlkKCkgPT0gSURfQVJFQSkKLSAgICAgICAgICAgICAgICAg
ICAgaWYoIWUtPmdldEF0dHJpYnV0ZShBVFRSX0hSRUYpLmlzTnVsbCgpKQorICAgICAgICAgICAg
ICAgIGlmIChlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjphKCkpIHx8IGUtPmhhc0xvY2FsTmFt
ZShIVE1MTmFtZXM6OmFyZWEoKSkpCisgICAgICAgICAgICAgICAgICAgIGlmICghZS0+Z2V0QXR0
cmlidXRlKEFUVFJfSFJFRikuaXNOdWxsKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBmb3Vu
ZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIERPQ19B
TkNIT1JTOiAgICAgIC8vIGFsbCBBIGVsZW1lbnRzIHdpdGggYSB2YWx1ZSBmb3IgbmFtZSBvciBh
biBpZCBhdHRyaWJ1dGUKLSAgICAgICAgICAgICAgICBpZihlLT5pZCgpID09IElEX0EpCi0gICAg
ICAgICAgICAgICAgICAgIGlmKCFlLT5nZXRBdHRyaWJ1dGUoQVRUUl9OQU1FKS5pc051bGwoKSkK
KyAgICAgICAgICAgICAgICBpZiAoZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6YSgpKSkKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKCFlLT5nZXRBdHRyaWJ1dGUoQVRUUl9OQU1FKS5pc051bGwo
KSkKICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIGNhc2UgRE9DX0FMTDoKQEAgLTIxOSw5ICsyMTQsOSBAQCBO
b2RlSW1wbCAqSFRNTENvbGxlY3Rpb25JbXBsOjp0cmF2ZXJzZU5lCiAgICAgICAgICAgICBkZWZh
dWx0OgogICAgICAgICAgICAgICAgIGtkRGVidWcoIDYwMzAgKSA8PCAiRXJyb3IgaW4gSFRNTENv
bGxlY3Rpb24sIHdyb25nIHRhZ0lkISIgPDwgZW5kbDsKICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGlmIChmb3VuZCkgeworCisgICAgICAgICAgICBpZiAoZm91bmQpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGN1cnJlbnQ7Ci0gICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoZGVlcCkg
ewogICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT50cmF2ZXJzZU5leHROb2RlKG1f
YmFzZS5nZXQoKSk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC0yOTgsMjkgKzI5Mywz
MSBAQCBOb2RlSW1wbCAqSFRNTENvbGxlY3Rpb25JbXBsOjpuZXh0SXRlbSgpCiAKIGJvb2wgSFRN
TENvbGxlY3Rpb25JbXBsOjpjaGVja0Zvck5hbWVNYXRjaChOb2RlSW1wbCAqbm9kZSwgYm9vbCBj
aGVja05hbWUsIGNvbnN0IERPTVN0cmluZyAmbmFtZSwgYm9vbCBjYXNlU2Vuc2l0aXZlKSBjb25z
dAogewotICAgIEVsZW1lbnRJbXBsICplID0gc3RhdGljX2Nhc3Q8RWxlbWVudEltcGwgKj4obm9k
ZSk7CisgICAgaWYgKCFub2RlLT5pc0hUTUxFbGVtZW50KCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAKKyAgICBIVE1MRWxlbWVudEltcGwgKmUgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVu
dEltcGwqPihub2RlKTsKICAgICBpZiAoY2FzZVNlbnNpdGl2ZSkgewogICAgICAgICBpZiAoY2hl
Y2tOYW1lKSB7CiAgICAgICAgICAgICAvLyBkb2N1bWVudC5hbGwgcmV0dXJucyBvbmx5IGltYWdl
cywgZm9ybXMsIGFwcGxldHMsIG9iamVjdHMgYW5kIGVtYmVkcwogICAgICAgICAgICAgLy8gYnkg
bmFtZSAodGhvdWdoIGV2ZXJ5dGhpbmcgYnkgaWQpCiAgICAgICAgICAgICBpZiAodHlwZSA9PSBE
T0NfQUxMICYmIAotICAgICAgICAgICAgICAgICEoZS0+aWQoKSA9PSBJRF9JTUcgfHwgZS0+aWQo
KSA9PSBJRF9GT1JNIHx8Ci0gICAgICAgICAgICAgICAgICBlLT5pZCgpID09IElEX0FQUExFVCB8
fCBlLT5pZCgpID09IElEX09CSkVDVCB8fAotICAgICAgICAgICAgICAgICAgZS0+aWQoKSA9PSBJ
RF9FTUJFRCkpCisgICAgICAgICAgICAgICAgIShlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpp
bWcoKSkgfHwgZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6Zm9ybSgpKSB8fAorICAgICAgICAg
ICAgICAgICAgZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6YXBwbGV0KCkpIHx8IGUtPmhhc0xv
Y2FsTmFtZShIVE1MTmFtZXM6Om9iamVjdCgpKSB8fAorICAgICAgICAgICAgICAgICAgZS0+aGFz
TG9jYWxOYW1lKEhUTUxOYW1lczo6ZW1iZWQoKSkpKQogICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgICAgICAgICAgcmV0dXJuIGUtPmdldEF0dHJpYnV0ZShBVFRSX05BTUUpID09
IG5hbWUgJiYgZS0+Z2V0QXR0cmlidXRlKEFUVFJfSUQpICE9IG5hbWU7Ci0gICAgICAgIH0gZWxz
ZSB7CisgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgcmV0dXJuIGUtPmdldEF0dHJpYnV0ZShB
VFRSX0lEKSA9PSBuYW1lOwotICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKGNo
ZWNrTmFtZSkgewogICAgICAgICAgICAgLy8gZG9jdW1lbnQuYWxsIHJldHVybnMgb25seSBpbWFn
ZXMsIGZvcm1zLCBhcHBsZXRzLCBvYmplY3RzIGFuZCBlbWJlZHMKICAgICAgICAgICAgIC8vIGJ5
IG5hbWUgKHRob3VnaCBldmVyeXRoaW5nIGJ5IGlkKQogICAgICAgICAgICAgaWYgKHR5cGUgPT0g
RE9DX0FMTCAmJiAKLSAgICAgICAgICAgICAgICAhKGUtPmlkKCkgPT0gSURfSU1HIHx8IGUtPmlk
KCkgPT0gSURfRk9STSB8fAotICAgICAgICAgICAgICAgICAgZS0+aWQoKSA9PSBJRF9BUFBMRVQg
fHwgZS0+aWQoKSA9PSBJRF9PQkpFQ1QgfHwKLSAgICAgICAgICAgICAgICAgIGUtPmlkKCkgPT0g
SURfRU1CRUQpKQorICAgICAgICAgICAgICAgICEoZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6
aW1nKCkpIHx8IGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmZvcm0oKSkgfHwKKyAgICAgICAg
ICAgICAgICAgIGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmFwcGxldCgpKSB8fCBlLT5oYXNM
b2NhbE5hbWUoSFRNTE5hbWVzOjpvYmplY3QoKSkgfHwKKyAgICAgICAgICAgICAgICAgIGUtPmhh
c0xvY2FsTmFtZShIVE1MTmFtZXM6OmVtYmVkKCkpKSkKICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICAgICAgICAgIHJldHVybiBlLT5nZXRBdHRyaWJ1dGUoQVRUUl9OQU1FKS5k
b21TdHJpbmcoKS5sb3dlcigpID09IG5hbWUubG93ZXIoKSAmJgpAQCAtMzc5LDcgKzM3Niw5IEBA
IHZvaWQgSFRNTENvbGxlY3Rpb25JbXBsOjp1cGRhdGVOYW1lQ2FjaGUKICAgICAgICAgcmV0dXJu
OwogICAgIAogICAgIGZvciAoTm9kZUltcGwgKm4gPSB0cmF2ZXJzZU5leHRJdGVtKG1fYmFzZS5n
ZXQoKSk7IG47IG4gPSB0cmF2ZXJzZU5leHRJdGVtKG4pKSB7Ci0gICAgICAgIEVsZW1lbnRJbXBs
ICplID0gc3RhdGljX2Nhc3Q8RWxlbWVudEltcGwgKj4obik7CisgICAgICAgIGlmICghbi0+aXNI
VE1MRWxlbWVudCgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIEhUTUxFbGVtZW50
SW1wbCogZSA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCo+KG4pOwogICAgICAgICBRU3Ry
aW5nIGlkQXR0ciA9IGUtPmdldEF0dHJpYnV0ZShBVFRSX0lEKS5zdHJpbmcoKTsKICAgICAgICAg
UVN0cmluZyBuYW1lQXR0ciA9IGUtPmdldEF0dHJpYnV0ZShBVFRSX05BTUUpLnN0cmluZygpOwog
ICAgICAgICBpZiAoIWlkQXR0ci5pc0VtcHR5KCkpIHsKQEAgLTM5Myw5ICszOTIsOSBAQCB2b2lk
IEhUTUxDb2xsZWN0aW9uSW1wbDo6dXBkYXRlTmFtZUNhY2hlCiAgICAgICAgIH0KICAgICAgICAg
aWYgKCFuYW1lQXR0ci5pc0VtcHR5KCkgJiYgaWRBdHRyICE9IG5hbWVBdHRyCiAgICAgICAgICAg
ICAmJiAodHlwZSAhPSBET0NfQUxMIHx8IAotICAgICAgICAgICAgICAgIChlLT5pZCgpID09IElE
X0lNRyB8fCBlLT5pZCgpID09IElEX0ZPUk0gfHwKLSAgICAgICAgICAgICAgICAgZS0+aWQoKSA9
PSBJRF9BUFBMRVQgfHwgZS0+aWQoKSA9PSBJRF9PQkpFQ1QgfHwKLSAgICAgICAgICAgICAgICAg
ZS0+aWQoKSA9PSBJRF9FTUJFRCkpKSB7CisgICAgICAgICAgICAgICAgKGUtPmhhc0xvY2FsTmFt
ZShIVE1MTmFtZXM6OmltZygpKSB8fCBlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpmb3JtKCkp
IHx8CisgICAgICAgICAgICAgICAgIGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmFwcGxldCgp
KSB8fCBlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvYmplY3QoKSkgfHwKKyAgICAgICAgICAg
ICAgICAgZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6ZW1iZWQoKSkpKSkgewogICAgICAgICAg
ICAgLy8gYWRkIHRvIG5hbWUgY2FjaGUKICAgICAgICAgICAgIFFQdHJWZWN0b3I8Tm9kZUltcGw+
ICpuYW1lVmVjdG9yID0gaW5mby0+bmFtZUNhY2hlLmZpbmQobmFtZUF0dHIpOwogICAgICAgICAg
ICAgaWYgKCFuYW1lVmVjdG9yKSB7CkBAIC01MzIsMTIgKzUzMSwxMCBAQCBOb2RlSW1wbCogSFRN
TEZvcm1Db2xsZWN0aW9uSW1wbDo6Z2V0TmFtCiAKIE5vZGVJbXBsKiBIVE1MRm9ybUNvbGxlY3Rp
b25JbXBsOjpnZXROYW1lZEZvcm1JdGVtKGludCBhdHRyX2lkLCBjb25zdCBET01TdHJpbmcmIG5h
bWUsIGludCBkdXBsaWNhdGVOdW1iZXIsIGJvb2wgY2FzZVNlbnNpdGl2ZSkgY29uc3QKIHsKLSAg
ICBpZihtX2Jhc2UtPm5vZGVUeXBlKCkgPT0gTm9kZTo6RUxFTUVOVF9OT0RFKQotICAgIHsKKyAg
ICBpZiAobV9iYXNlLT5ub2RlVHlwZSgpID09IE5vZGU6OkVMRU1FTlRfTk9ERSkgewogICAgICAg
ICBIVE1MRWxlbWVudEltcGwqIGJhc2VFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJ
bXBsKj4obV9iYXNlLmdldCgpKTsKICAgICAgICAgYm9vbCBmb3VuZElucHV0RWxlbWVudHMgPSBm
YWxzZTsKLSAgICAgICAgaWYoYmFzZUVsZW1lbnQtPmlkKCkgPT0gSURfRk9STSkKLSAgICAgICAg
eworICAgICAgICBpZiAoYmFzZUVsZW1lbnQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmZvcm0o
KSkpIHsKICAgICAgICAgICAgIEhUTUxGb3JtRWxlbWVudEltcGwqIGYgPSBzdGF0aWNfY2FzdDxI
VE1MRm9ybUVsZW1lbnRJbXBsKj4oYmFzZUVsZW1lbnQpOwogICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGYtPmZvcm1FbGVtZW50cy5jb3VudCgpOyArK2kpIHsKICAgICAgICAg
ICAgICAgICBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbCogZSA9IGYtPmZvcm1FbGVtZW50c1tp
XTsKQEAgLTU1Nyw4ICs1NTQsNyBAQCBOb2RlSW1wbCogSFRNTEZvcm1Db2xsZWN0aW9uSW1wbDo6
Z2V0TmFtCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoICFmb3VuZElu
cHV0RWxlbWVudHMgKQotICAgICAgICB7CisgICAgICAgIGlmICghZm91bmRJbnB1dEVsZW1lbnRz
KSB7CiAgICAgICAgICAgICBIVE1MRm9ybUVsZW1lbnRJbXBsKiBmID0gc3RhdGljX2Nhc3Q8SFRN
TEZvcm1FbGVtZW50SW1wbCo+KGJhc2VFbGVtZW50KTsKIAogICAgICAgICAgICAgZm9yKHVuc2ln
bmVkIGkgPSAwOyBpIDwgZi0+aW1nRWxlbWVudHMuY291bnQoKTsgKytpKQpAQCAtNjUwLDcgKzY0
Niw3IEBAIHZvaWQgSFRNTEZvcm1Db2xsZWN0aW9uSW1wbDo6dXBkYXRlTmFtZUMKIAogICAgIFFE
aWN0PGNoYXI+IGZvdW5kSW5wdXRFbGVtZW50czsKIAotICAgIGlmIChtX2Jhc2UtPmlkKCkgIT0g
SURfRk9STSkgeworICAgIGlmICghbV9iYXNlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Zm9ybSgp
KSkgewogICAgICAgICBpbmZvLT5oYXNOYW1lQ2FjaGUgPSB0cnVlOwogICAgICAgICByZXR1cm47
CiAgICAgfQpJbmRleDoga2h0bWwvaHRtbC9odG1sX21pc2NpbXBsLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sX21pc2NpbXBsLmgsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuMTYKZGlmZiAtdSAtcCAtcjEuMTYga2h0bWwvaHRtbC9odG1sX21p
c2NpbXBsLmgKLS0tIGtodG1sL2h0bWwvaHRtbF9taXNjaW1wbC5oCTExIE1heSAyMDA1IDAwOjU4
OjI4IC0wMDAwCTEuMTYKKysrIGtodG1sL2h0bWwvaHRtbF9taXNjaW1wbC5oCTE3IEp1biAyMDA1
IDAxOjMyOjQ4IC0wMDAwCkBAIC0zOSw4ICszOSw2IEBAIGNsYXNzIEhUTUxCYXNlRm9udEVsZW1l
bnRJbXBsIDogcHVibGljIEgKIHB1YmxpYzoKICAgICBIVE1MQmFzZUZvbnRFbGVtZW50SW1wbChE
b2N1bWVudFB0ciAqZG9jKTsKIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKLQogICAgIERP
TVN0cmluZyBjb2xvcigpIGNvbnN0OwogICAgIHZvaWQgc2V0Q29sb3IoY29uc3QgRE9NU3RyaW5n
ICYpOwogCkluZGV4OiBraHRtbC9odG1sL2h0bWxfb2JqZWN0aW1wbC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sX29iamVjdGltcGwuY3Bw
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjY0CmRpZmYgLXUgLXAgLXIxLjY0IGtodG1sL2h0bWwv
aHRtbF9vYmplY3RpbXBsLmNwcAotLS0ga2h0bWwvaHRtbC9odG1sX29iamVjdGltcGwuY3BwCTMx
IE1heSAyMDA1IDAwOjE1OjUyIC0wMDAwCTEuNjQKKysrIGtodG1sL2h0bWwvaHRtbF9vYmplY3Rp
bXBsLmNwcAkxNyBKdW4gMjAwNSAwMTozMjo0OCAtMDAwMApAQCAtNTcsNyArNTcsNyBAQCBuYW1l
c3BhY2UgRE9NIHsKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogSFRNTEFwcGxldEVsZW1lbnRJbXBs
OjpIVE1MQXBwbGV0RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgOiBIVE1MRWxlbWVu
dEltcGwoZG9jKQorICA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6OmFwcGxldCgpLCBkb2Mp
CiB7CiAgICAgYXBwbGV0SW5zdGFuY2UgPSAwOwogICAgIG1fYWxsUGFyYW1zQXZhaWxhYmxlID0g
ZmFsc2U7CkBAIC02OCwxMSArNjgsNiBAQCBIVE1MQXBwbGV0RWxlbWVudEltcGw6On5IVE1MQXBw
bGV0RWxlbWVuCiAgICAgZGVsZXRlIGFwcGxldEluc3RhbmNlOwogfQogCi1Ob2RlSW1wbDo6SWQg
SFRNTEFwcGxldEVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0FQUExF
VDsKLX0KLQogYm9vbCBIVE1MQXBwbGV0RWxlbWVudEltcGw6Om1hcFRvRW50cnkoTm9kZUltcGw6
OklkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0CiB7CiAgICAgc3dp
dGNoIChhdHRyKSB7CkBAIC0zNDIsMTggKzMzNywxMyBAQCB2b2lkIEhUTUxBcHBsZXRFbGVtZW50
SW1wbDo6c2V0V2lkdGgoY29uCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxFbWJlZEVsZW1l
bnRJbXBsOjpIVE1MRW1iZWRFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAgIDogSFRN
TEVsZW1lbnRJbXBsKGRvYyksIGVtYmVkSW5zdGFuY2UoMCkKKyAgICA6IEhUTUxFbGVtZW50SW1w
bChIVE1MTmFtZXM6OmVtYmVkKCksIGRvYyksIGVtYmVkSW5zdGFuY2UoMCkKIHt9CiAKIEhUTUxF
bWJlZEVsZW1lbnRJbXBsOjp+SFRNTEVtYmVkRWxlbWVudEltcGwoKQogewogfQogCi1Ob2RlSW1w
bDo6SWQgSFRNTEVtYmVkRWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURf
RU1CRUQ7Ci19Ci0KICNpZiBBUFBMRV9DSEFOR0VTCiBLSlM6OkJpbmRpbmdzOjpJbnN0YW5jZSAq
SFRNTEVtYmVkRWxlbWVudEltcGw6OmdldEVtYmVkSW5zdGFuY2UoKSBjb25zdAogewpAQCAtNDY4
LDcgKzQ1OCw3IEBAIGJvb2wgSFRNTEVtYmVkRWxlbWVudEltcGw6OnJlbmRlcmVySXNOZWUKICAg
ICBLSFRNTFBhcnQgKnBhcnQgPSBnZXREb2N1bWVudCgpLT5wYXJ0KCk7CiAgICAgaWYgKCFwYXJ0
KQogCXJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gcGFydC0+cGx1Z2luc0VuYWJsZWQoKSAmJiBw
YXJlbnROb2RlKCktPmlkKCkgIT0gSURfT0JKRUNUOworICAgIHJldHVybiBwYXJ0LT5wbHVnaW5z
RW5hYmxlZCgpICYmICFwYXJlbnROb2RlKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvYmplY3Qo
KSk7CiB9CiAKIFJlbmRlck9iamVjdCAqSFRNTEVtYmVkRWxlbWVudEltcGw6OmNyZWF0ZVJlbmRl
cmVyKFJlbmRlckFyZW5hICphcmVuYSwgUmVuZGVyU3R5bGUgKnN0eWxlKQpAQCAtNDkzLDkgKzQ4
Myw5IEBAIGJvb2wgSFRNTEVtYmVkRWxlbWVudEltcGw6OmlzVVJMQXR0cmlidXQKIAogSFRNTE9i
amVjdEVsZW1lbnRJbXBsOjpIVE1MT2JqZWN0RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykg
CiAjaWYgQVBQTEVfQ0hBTkdFUwotOiBIVE1MRWxlbWVudEltcGwoZG9jKSwgbV9pbWFnZUxvYWRl
cigwKSwgb2JqZWN0SW5zdGFuY2UoMCkKKzogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6b2Jq
ZWN0KCksIGRvYyksIG1faW1hZ2VMb2FkZXIoMCksIG9iamVjdEluc3RhbmNlKDApCiAjZWxzZQot
OiBIVE1MRWxlbWVudEltcGwoZG9jKSwgbV9pbWFnZUxvYWRlcigwKQorOiBIVE1MRWxlbWVudElt
cGwoSFRNTE5hbWVzOjpvYmplY3QoKSwgZG9jKSwgbV9pbWFnZUxvYWRlcigwKQogI2VuZGlmCiB7
CiAgICAgbmVlZFdpZGdldFVwZGF0ZSA9IGZhbHNlOwpAQCAtNTA3LDExICs0OTcsNiBAQCBIVE1M
T2JqZWN0RWxlbWVudEltcGw6On5IVE1MT2JqZWN0RWxlbWVuCiAgICAgZGVsZXRlIG1faW1hZ2VM
b2FkZXI7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MT2JqZWN0RWxlbWVudEltcGw6OmlkKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gSURfT0JKRUNUOwotfQotCiAjaWYgQVBQTEVfQ0hBTkdFUwogS0pT
OjpCaW5kaW5nczo6SW5zdGFuY2UgKkhUTUxPYmplY3RFbGVtZW50SW1wbDo6Z2V0T2JqZWN0SW5z
dGFuY2UoKSBjb25zdAogewpAQCAtOTE4LDcgKzkwMyw3IEBAIHZvaWQgSFRNTE9iamVjdEVsZW1l
bnRJbXBsOjpzZXRXaWR0aChjb24KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogSFRNTFBhcmFtRWxl
bWVudEltcGw6OkhUTUxQYXJhbUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0gICAgOiBI
VE1MRWxlbWVudEltcGwoZG9jKQorICAgIDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6cGFy
YW0oKSwgZG9jKQogewogfQogCkBAIC05MjYsMTEgKzkxMSw2IEBAIEhUTUxQYXJhbUVsZW1lbnRJ
bXBsOjp+SFRNTFBhcmFtRWxlbWVudEkKIHsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxQYXJhbUVs
ZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX1BBUkFNOwotfQotCiB2b2lk
IEhUTUxQYXJhbUVsZW1lbnRJbXBsOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1
dGVJbXBsICphdHRyKQogewogICAgIHN3aXRjaCggYXR0ci0+aWQoKSApCkluZGV4OiBraHRtbC9o
dG1sL2h0bWxfb2JqZWN0aW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJD
b3JlL2todG1sL2h0bWwvaHRtbF9vYmplY3RpbXBsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
MzEKZGlmZiAtdSAtcCAtcjEuMzEga2h0bWwvaHRtbC9odG1sX29iamVjdGltcGwuaAotLS0ga2h0
bWwvaHRtbC9odG1sX29iamVjdGltcGwuaAkxMSBNYXkgMjAwNSAwNTo0OTozNCAtMDAwMAkxLjMx
CisrKyBraHRtbC9odG1sL2h0bWxfb2JqZWN0aW1wbC5oCTE3IEp1biAyMDA1IDAxOjMyOjQ5IC0w
MDAwCkBAIC00MiwxMSArNDIsOCBAQCBjbGFzcyBIVE1MQXBwbGV0RWxlbWVudEltcGwgOiBwdWJs
aWMgSFRNCiB7CiBwdWJsaWM6CiAgICAgSFRNTEFwcGxldEVsZW1lbnRJbXBsKERvY3VtZW50UHRy
ICpkb2MpOwotCiAgICAgfkhUTUxBcHBsZXRFbGVtZW50SW1wbCgpOwogCi0gICAgdmlydHVhbCBJ
ZCBpZCgpIGNvbnN0OwotCiAgICAgdmlydHVhbCBib29sIG1hcFRvRW50cnkoSWQgYXR0ciwgTWFw
cGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNl
TWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKnRva2VuKTsKICAgICAKQEAgLTEx
MiwxMSArMTA5LDggQEAgY2xhc3MgSFRNTEVtYmVkRWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTAog
ewogcHVibGljOgogICAgIEhUTUxFbWJlZEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpOwot
CiAgICAgfkhUTUxFbWJlZEVsZW1lbnRJbXBsKCk7CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29u
c3Q7Ci0KICAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1
dGVFbnRyeSYgcmVzdWx0KSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRy
aWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqYXR0cik7CiAKQEAgLTE0NiwxMSArMTQwLDggQEAg
Y2xhc3MgSFRNTE9iamVjdEVsZW1lbnRJbXBsIDogcHVibGljIEhUTQogewogcHVibGljOgogICAg
IEhUTUxPYmplY3RFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKTsKLQogICAgIH5IVE1MT2Jq
ZWN0RWxlbWVudEltcGwoKTsKIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKLQogICAgIEhU
TUxGb3JtRWxlbWVudEltcGwgKmZvcm0oKSBjb25zdDsKIAogICAgIHZpcnR1YWwgYm9vbCBtYXBU
b0VudHJ5KElkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0OwpAQCAt
MjQ3LDExICsyMzgsOCBAQCBjbGFzcyBIVE1MUGFyYW1FbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1M
CiAgICAgZnJpZW5kIGNsYXNzIEhUTUxBcHBsZXRFbGVtZW50SW1wbDsKIHB1YmxpYzoKICAgICBI
VE1MUGFyYW1FbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKTsKLQogICAgIH5IVE1MUGFyYW1F
bGVtZW50SW1wbCgpOwogCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwotCiAgICAgdmlydHVh
bCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKnRva2VuKTsK
IAogICAgIHZpcnR1YWwgYm9vbCBpc1VSTEF0dHJpYnV0ZShBdHRyaWJ1dGVJbXBsICphdHRyKSBj
b25zdDsKSW5kZXg6IGtodG1sL2h0bWwvaHRtbF90YWJsZWltcGwuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbF90YWJsZWltcGwuY3BwLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjUyCmRpZmYgLXUgLXAgLXIxLjUyIGtodG1sL2h0bWwvaHRt
bF90YWJsZWltcGwuY3BwCi0tLSBraHRtbC9odG1sL2h0bWxfdGFibGVpbXBsLmNwcAkxMSBNYXkg
MjAwNSAwNTo0OTozNCAtMDAwMAkxLjUyCisrKyBraHRtbC9odG1sL2h0bWxfdGFibGVpbXBsLmNw
cAkxNyBKdW4gMjAwNSAwMTozMjo1MSAtMDAwMApAQCAtNTEsNyArNTEsNyBAQCB1c2luZyBuYW1l
c3BhY2Uga2h0bWw7CiBuYW1lc3BhY2UgRE9NIHsKIAogSFRNTFRhYmxlRWxlbWVudEltcGw6OkhU
TUxUYWJsZUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0gIDogSFRNTEVsZW1lbnRJbXBs
KGRvYykKKyAgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjp0YWJsZSgpLCBkb2MpCiB7CiAg
ICAgdENhcHRpb24gPSAwOwogICAgIGhlYWQgPSAwOwpAQCAtNzMsMTEgKzczLDYgQEAgSFRNTFRh
YmxlRWxlbWVudEltcGw6On5IVE1MVGFibGVFbGVtZW50SQogewogfQogCi1Ob2RlSW1wbDo6SWQg
SFRNTFRhYmxlRWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfVEFCTEU7
Ci19Ci0KIE5vZGVJbXBsKiBIVE1MVGFibGVFbGVtZW50SW1wbDo6c2V0Q2FwdGlvbiggSFRNTFRh
YmxlQ2FwdGlvbkVsZW1lbnRJbXBsICpjICkKIHsKICAgICBpbnQgZXhjZXB0aW9uY29kZSA9IDA7
CkBAIC0xNDYsNyArMTQxLDcgQEAgSFRNTEVsZW1lbnRJbXBsICpIVE1MVGFibGVFbGVtZW50SW1w
bDo6YwogICAgIGlmKCFoZWFkKQogICAgIHsKICAgICAgICAgaW50IGV4Y2VwdGlvbmNvZGUgPSAw
OwotICAgICAgICBoZWFkID0gbmV3IEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbChkb2NQdHIo
KSwgSURfVEhFQUQsIHRydWUgLyogaW1wbGljaXQgKi8pOworICAgICAgICBoZWFkID0gbmV3IEhU
TUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbChIVE1MTmFtZXM6OnRoZWFkKCksIGRvY1B0cigpLCB0
cnVlIC8qIGltcGxpY2l0ICovKTsKICAgICAgICAgaWYoZm9vdCkKICAgICAgICAgICAgIGluc2Vy
dEJlZm9yZSggaGVhZCwgZm9vdCwgZXhjZXB0aW9uY29kZSApOwogICAgICAgICBlbHNlIGlmKGZp
cnN0Qm9keSkKQEAgLTE3MSw3ICsxNjYsNyBAQCBIVE1MRWxlbWVudEltcGwgKkhUTUxUYWJsZUVs
ZW1lbnRJbXBsOjpjCiAgICAgaWYoIWZvb3QpCiAgICAgewogICAgICAgICBpbnQgZXhjZXB0aW9u
Y29kZSA9IDA7Ci0gICAgICAgIGZvb3QgPSBuZXcgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBs
KGRvY1B0cigpLCBJRF9URk9PVCwgdHJ1ZSAvKmltcGxpY2l0ICovKTsKKyAgICAgICAgZm9vdCA9
IG5ldyBIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGwoSFRNTE5hbWVzOjp0Zm9vdCgpLCBkb2NQ
dHIoKSwgdHJ1ZSAvKmltcGxpY2l0ICovKTsKICAgICAgICAgaWYoZmlyc3RCb2R5KQogICAgICAg
ICAgICAgaW5zZXJ0QmVmb3JlKCBmb290LCBmaXJzdEJvZHksIGV4Y2VwdGlvbmNvZGUgKTsKICAg
ICAgICAgZWxzZQpAQCAtMjE2LDcgKzIxMSw3IEBAIEhUTUxFbGVtZW50SW1wbCAqSFRNTFRhYmxl
RWxlbWVudEltcGw6OmkKICAgICAvLyAobm90ZTogdGhpcyBpcyBkaWZmZXJlbnQgZnJvbSAiaWYg
dGhlIHRhYmxlIGhhcyBubyBzZWN0aW9ucyIsIHNpbmNlIHdlIGNhbiBoYXZlCiAgICAgLy8gPFRB
QkxFPjxUUj4pCiAgICAgaWYoIWZpcnN0Qm9keSAmJiAhaGVhZCAmJiAhZm9vdCAmJiAhaGFzQ2hp
bGROb2RlcygpKQotICAgICAgICBzZXRUQm9keSggbmV3IEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50
SW1wbChkb2NQdHIoKSwgSURfVEJPRFksIHRydWUgLyogaW1wbGljaXQgKi8pICk7CisgICAgICAg
IHNldFRCb2R5KCBuZXcgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsKEhUTUxOYW1lczo6dGJv
ZHkoKSwgZG9jUHRyKCksIHRydWUgLyogaW1wbGljaXQgKi8pICk7CiAKICAgICAvL2tkRGVidWco
NjAzMCkgPDwga19mdW5jaW5mbyA8PCBpbmRleCA8PCBlbmRsOwogICAgIC8vIElFIHRyZWF0cyBp
bmRleD0tMSBhcyBkZWZhdWx0IHZhbHVlIG1lYW5pbmcgJ2FwcGVuZCBhZnRlciBsYXN0JwpAQCAt
MjMwLDcgKzIyNSw4IEBAIEhUTUxFbGVtZW50SW1wbCAqSFRNTFRhYmxlRWxlbWVudEltcGw6OmkK
ICAgICB7CiAJLy8gdGhlcmUgY291bGQgYmUgMiB0Zm9vdCBlbGVtZW50cyBpbiB0aGUgdGFibGUu
IE9ubHkgdGhlIGZpcnN0IG9uZSBpcyB0aGUgImZvb3QiLCB0aGF0J3Mgd2h5IHdlIGhhdmUgdGhl
IG1vcmUKIAkvLyBjb21wbGljYXRlZCBpZiBzdGF0ZW1lbnQgYmVsb3cuCi0gICAgICAgIGlmICgg
bm9kZSAhPSBmb290ICYmIChub2RlLT5pZCgpID09IElEX1RIRUFEIHx8IG5vZGUtPmlkKCkgPT0g
SURfVEZPT1QgfHwgbm9kZS0+aWQoKSA9PSBJRF9UQk9EWSkgKQorICAgICAgICBpZiAobm9kZSAh
PSBmb290ICYmIChub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGhlYWQoKSkgfHwgbm9kZS0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRmb290KCkpIHx8IAorICAgICAgICAgICAgbm9kZS0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OnRib2R5KCkpKSkKICAgICAgICAgewogICAgICAgICAgICAgc2Vj
dGlvbiA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbCAqPihub2RlKTsK
ICAgICAgICAgICAgIGxhc3RTZWN0aW9uID0gc2VjdGlvbjsKQEAgLTI3Niw4ICsyNzIsOCBAQCB2
b2lkIEhUTUxUYWJsZUVsZW1lbnRJbXBsOjpkZWxldGVSb3coIGxvCiAgICAgYm9vbCBmb3VuZCA9
IGZhbHNlOwogICAgIGZvciAoIDsgbm9kZSA7IG5vZGUgPSBub2RlLT5uZXh0U2libGluZygpICkK
ICAgICB7Ci0gICAgICAgIGlmICggbm9kZSAhPSBmb290ICYmIChub2RlLT5pZCgpID09IElEX1RI
RUFEIHx8IG5vZGUtPmlkKCkgPT0gSURfVEZPT1QgfHwgbm9kZS0+aWQoKSA9PSBJRF9UQk9EWSkg
KQotICAgICAgICB7CisgICAgICAgIGlmIChub2RlICE9IGZvb3QgJiYgKG5vZGUtPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjp0aGVhZCgpKSB8fCBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGZv
b3QoKSkgfHwgCisgICAgICAgICAgICBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGJvZHko
KSkpKSB7CiAgICAgICAgICAgICBzZWN0aW9uID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlU2VjdGlv
bkVsZW1lbnRJbXBsICo+KG5vZGUpOwogICAgICAgICAgICAgbGFzdFNlY3Rpb24gPSBzZWN0aW9u
OwogICAgICAgICAgICAgaW50IHJvd3MgPSBzZWN0aW9uLT5udW1Sb3dzKCk7CkBAIC0zMDksNyAr
MzA1LDcgQEAgTm9kZUltcGwgKkhUTUxUYWJsZUVsZW1lbnRJbXBsOjphZGRDaGlsZAogICAgIGtk
RGVidWcoIDYwMzAgKSA8PCBub2RlTmFtZSgpLnN0cmluZygpIDw8ICIoVGFibGUpOjphZGRDaGls
ZCggIiA8PCBjaGlsZC0+bm9kZU5hbWUoKS5zdHJpbmcoKSA8PCAiICkiIDw8IGVuZGw7CiAjZW5k
aWYKIAotICAgIGlmIChjaGlsZC0+aWQoKSA9PSBJRF9GT1JNKSB7CisgICAgaWYgKGNoaWxkLT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6Zm9ybSgpKSkgewogICAgICAgICAvLyBGaXJzdCBhZGQgdGhl
IGNoaWxkLgogICAgICAgICBIVE1MRWxlbWVudEltcGw6OmFkZENoaWxkKGNoaWxkKTsKICAgICAg
ICAgLy8gTm93IHNpbXBseSByZXR1cm4gb3Vyc2VsdmVzIGFzIHRoZSBuZXdub2RlLiAgVGhpcyBo
YXMgdGhlIGVmZmVjdCBvZgpAQCAtMzM3LDI4ICszMzMsMTUgQEAgTm9kZUltcGwgKkhUTUxUYWJs
ZUVsZW1lbnRJbXBsOjphZGRDaGlsZAogCiAgICAgaW50IGV4Y2VwdGlvbmNvZGUgPSAwOwogICAg
IE5vZGVJbXBsICpyZXR2YWwgPSBhcHBlbmRDaGlsZCggY2hpbGQsIGV4Y2VwdGlvbmNvZGUgKTsK
LSAgICBpZiAoIHJldHZhbCApIHsKLQlzd2l0Y2goY2hpbGQtPmlkKCkpIHsKLQljYXNlIElEX0NB
UFRJT046Ci0JICAgIGlmICggIXRDYXB0aW9uICkKLQkJdENhcHRpb24gPSBzdGF0aWNfY2FzdDxI
VE1MVGFibGVDYXB0aW9uRWxlbWVudEltcGwgKj4oY2hpbGQpOwotCSAgICBicmVhazsKLQljYXNl
IElEX0NPTDoKLQljYXNlIElEX0NPTEdST1VQOgotCSAgICBicmVhazsKLQljYXNlIElEX1RIRUFE
OgotCSAgICBpZiAoICFoZWFkICkKLQkJaGVhZCA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZVNlY3Rp
b25FbGVtZW50SW1wbCAqPihjaGlsZCk7Ci0JICAgIGJyZWFrOwotCWNhc2UgSURfVEZPT1Q6Ci0J
ICAgIGlmICggIWZvb3QgKQotCQlmb290ID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlU2VjdGlvbkVs
ZW1lbnRJbXBsICo+KGNoaWxkKTsKLQkgICAgYnJlYWs7Ci0JY2FzZSBJRF9UQk9EWToKLQkgICAg
aWYgKCAhZmlyc3RCb2R5ICkKLQkJZmlyc3RCb2R5ID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlU2Vj
dGlvbkVsZW1lbnRJbXBsICo+KGNoaWxkKTsKLQkgICAgYnJlYWs7Ci0JfQorICAgIGlmIChyZXR2
YWwpIHsKKyAgICAgICAgaWYgKCF0Q2FwdGlvbiAmJiBjaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OmNhcHRpb24oKSkpCisgICAgICAgICAgICB0Q2FwdGlvbiA9IHN0YXRpY19jYXN0PEhUTUxU
YWJsZUNhcHRpb25FbGVtZW50SW1wbCAqPihjaGlsZCk7CisgICAgICAgIGVsc2UgaWYgKCFoZWFk
ICYmIGNoaWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGhlYWQoKSkpCisgICAgICAgICAgICBo
ZWFkID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsICo+KGNoaWxkKTsK
KyAgICAgICAgZWxzZSBpZiAoIWZvb3QgJiYgY2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0
Zm9vdCgpKSkKKyAgICAgICAgICAgIGZvb3QgPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVTZWN0aW9u
RWxlbWVudEltcGwgKj4oY2hpbGQpOworCWVsc2UgaWYgKCFmaXJzdEJvZHkgJiYgY2hpbGQtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjp0Ym9keSgpKSkKKwkgICAgZmlyc3RCb2R5ID0gc3RhdGljX2Nh
c3Q8SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsICo+KGNoaWxkKTsKICAgICB9CiAgICAgcmV0
dXJuIHJldHZhbDsKIH0KQEAgLTgwMiwyNiArNzg1LDE5IEBAIHZvaWQgSFRNTFRhYmxlUGFydEVs
ZW1lbnRJbXBsOjpwYXJzZU1hcHAKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1IVE1MVGFibGVT
ZWN0aW9uRWxlbWVudEltcGw6OkhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbChEb2N1bWVudFB0
ciAqZG9jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdXNob3J0IHRhZ2lkLCBib29sIGltcGxpY2l0KQotICAgIDogSFRNTFRhYmxlUGFy
dEVsZW1lbnRJbXBsKGRvYykKK0hUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbDo6SFRNTFRhYmxl
U2VjdGlvbkVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50
UHRyICpkb2MsIGJvb2wgaW1wbGljaXQpCisgICAgOiBIVE1MVGFibGVQYXJ0RWxlbWVudEltcGwo
dGFnTmFtZSwgZG9jKQogewotICAgIF9pZCA9IHRhZ2lkOwogICAgIG1faW1wbGljaXQgPSBpbXBs
aWNpdDsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbDo6aWQo
KSBjb25zdAotewotICAgIHJldHVybiBfaWQ7Ci19Ci0KIE5vZGVJbXBsICpIVE1MVGFibGVTZWN0
aW9uRWxlbWVudEltcGw6OmFkZENoaWxkKE5vZGVJbXBsICpjaGlsZCkKIHsKICNpZmRlZiBERUJV
R19MQVlPVVQKICAgICBrZERlYnVnKCA2MDMwICkgPDwgbm9kZU5hbWUoKS5zdHJpbmcoKSA8PCAi
KFRib2R5KTo6YWRkQ2hpbGQoICIgPDwgY2hpbGQtPm5vZGVOYW1lKCkuc3RyaW5nKCkgPDwgIiAp
IiA8PCBlbmRsOwogI2VuZGlmCiAKLSAgICBpZiAoY2hpbGQtPmlkKCkgPT0gSURfRk9STSkgewor
ICAgIGlmIChjaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZvcm0oKSkpIHsKICAgICAgICAg
Ly8gRmlyc3QgYWRkIHRoZSBjaGlsZC4KICAgICAgICAgSFRNTEVsZW1lbnRJbXBsOjphZGRDaGls
ZChjaGlsZCk7CiAgICAgICAgIC8vIE5vdyBzaW1wbHkgcmV0dXJuIG91cnNlbHZlcyBhcyB0aGUg
bmV3bm9kZS4gIFRoaXMgaGFzIHRoZSBlZmZlY3Qgb2YKQEAgLTg3Nyw3ICs4NTMsNyBAQCBpbnQg
SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsOjpudW1Sb3dzCiAgICAgaW50IHJvd3MgPSAwOwog
ICAgIGNvbnN0IE5vZGVJbXBsICpuID0gZmlyc3RDaGlsZCgpOwogICAgIHdoaWxlIChuKSB7Ci0g
ICAgICAgIGlmIChuLT5pZCgpID09IElEX1RSKQorICAgICAgICBpZiAobi0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OnRyKCkpKQogICAgICAgICAgICAgcm93cysrOwogICAgICAgICBuID0gbi0+bmV4
dFNpYmxpbmcoKTsKICAgICB9CkBAIC05MzIsMTggKzkwOCwxMyBAQCBTaGFyZWRQdHI8SFRNTENv
bGxlY3Rpb25JbXBsPiBIVE1MVGFibGVTCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotTm9kZUlt
cGw6OklkIEhUTUxUYWJsZVJvd0VsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IElEX1RSOwotfQotCiBOb2RlSW1wbCAqSFRNTFRhYmxlUm93RWxlbWVudEltcGw6OmFkZENoaWxk
KE5vZGVJbXBsICpjaGlsZCkKIHsKICNpZmRlZiBERUJVR19MQVlPVVQKICAgICBrZERlYnVnKCA2
MDMwICkgPDwgbm9kZU5hbWUoKS5zdHJpbmcoKSA8PCAiKFRyb3cpOjphZGRDaGlsZCggIiA8PCBj
aGlsZC0+bm9kZU5hbWUoKS5zdHJpbmcoKSA8PCAiICkiIDw8IGVuZGw7CiAjZW5kaWYKIAotICAg
IGlmIChjaGlsZC0+aWQoKSA9PSBJRF9GT1JNKSB7CisgICAgaWYgKGNoaWxkLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6Zm9ybSgpKSkgewogICAgICAgICAvLyBGaXJzdCBhZGQgdGhlIGNoaWxkLgog
ICAgICAgICBIVE1MRWxlbWVudEltcGw6OmFkZENoaWxkKGNoaWxkKTsKICAgICAgICAgLy8gTm93
IHNpbXBseSByZXR1cm4gb3Vyc2VsdmVzIGFzIHRoZSBuZXdub2RlLiAgVGhpcyBoYXMgdGhlIGVm
ZmVjdCBvZgpAQCAtOTU4LDE2ICs5MjksMTYgQEAgbG9uZyBIVE1MVGFibGVSb3dFbGVtZW50SW1w
bDo6cm93SW5kZXgoKQogICAgIGludCBySW5kZXggPSAwOwogCiAgICAgTm9kZUltcGwgKnRhYmxl
ID0gcGFyZW50Tm9kZSgpOwotICAgIGlmICggIXRhYmxlICkKKyAgICBpZiAoIXRhYmxlKQogCXJl
dHVybiAtMTsKICAgICB0YWJsZSA9IHRhYmxlLT5wYXJlbnROb2RlKCk7Ci0gICAgaWYgKCAhdGFi
bGUgfHwgdGFibGUtPmlkKCkgIT0gSURfVEFCTEUgKQorICAgIGlmICghdGFibGUgfHwgIXRhYmxl
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGFibGUoKSkpCiAJcmV0dXJuIC0xOwogCiAgICAgSFRN
TFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsICpmb290ID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlRWxl
bWVudEltcGwgKj4odGFibGUpLT50Rm9vdCgpOwogICAgIE5vZGVJbXBsICpub2RlID0gdGFibGUt
PmZpcnN0Q2hpbGQoKTsKLSAgICB3aGlsZSAoIG5vZGUgKSB7Ci0gICAgICAgIGlmICggbm9kZSAh
PSBmb290ICYmIChub2RlLT5pZCgpID09IElEX1RIRUFEIHx8IG5vZGUtPmlkKCkgPT0gSURfVEZP
T1QgfHwgbm9kZS0+aWQoKSA9PSBJRF9UQk9EWSkgKSB7CisgICAgd2hpbGUgKG5vZGUpIHsKKyAg
ICAgICAgaWYgKG5vZGUgIT0gZm9vdCAmJiAobm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRo
ZWFkKCkpIHx8IG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0Zm9vdCgpKSB8fCBub2RlLT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6dGJvZHkoKSkpKSB7CiAJICAgIEhUTUxUYWJsZVNlY3Rpb25F
bGVtZW50SW1wbCogc2VjdGlvbiA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50
SW1wbCAqPihub2RlKTsKIAkgICAgY29uc3QgTm9kZUltcGwgKnJvdyA9IHNlY3Rpb24tPmZpcnN0
Q2hpbGQoKTsKIAkgICAgd2hpbGUgKCByb3cgKSB7CkBAIC05OTYsNyArOTY3LDcgQEAgbG9uZyBI
VE1MVGFibGVSb3dFbGVtZW50SW1wbDo6c2VjdGlvblJvdwogICAgIGNvbnN0IE5vZGVJbXBsICpu
ID0gdGhpczsKICAgICBkbyB7CiAgICAgICAgIG4gPSBuLT5wcmV2aW91c1NpYmxpbmcoKTsKLSAg
ICAgICAgaWYgKG4gJiYgbi0+aXNFbGVtZW50Tm9kZSgpICYmIG4tPmlkKCkgPT0gSURfVFIpCisg
ICAgICAgIGlmIChuICYmIG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0cigpKSkKICAgICAgICAg
ICAgIHJJbmRleCsrOwogICAgIH0KICAgICB3aGlsZSAobik7CkBAIC0xMDEzLDcgKzk4NCw3IEBA
IEhUTUxFbGVtZW50SW1wbCAqSFRNTFRhYmxlUm93RWxlbWVudEltcGwKICAgICAgICAgZXhjZXB0
aW9uY29kZSA9IERPTUV4Y2VwdGlvbjo6SU5ERVhfU0laRV9FUlI7IC8vIHBlciB0aGUgRE9NCiAg
ICAgZWxzZQogICAgIHsKLSAgICAgICAgYyA9IG5ldyBIVE1MVGFibGVDZWxsRWxlbWVudEltcGwo
ZG9jUHRyKCksIElEX1REKTsKKyAgICAgICAgYyA9IG5ldyBIVE1MVGFibGVDZWxsRWxlbWVudElt
cGwoSFRNTE5hbWVzOjp0ZCgpLCBkb2NQdHIoKSk7CiAgICAgICAgIGlmKG51bUNlbGxzID09IGlu
ZGV4IHx8IGluZGV4ID09IC0xKQogICAgICAgICAgICAgYXBwZW5kQ2hpbGQoYywgZXhjZXB0aW9u
Y29kZSk7CiAgICAgICAgIGVsc2UgewpAQCAtMTEwMywxNSArMTA3NCwxNCBAQCB2b2lkIEhUTUxU
YWJsZVJvd0VsZW1lbnRJbXBsOjpzZXRWQWxpZ24oCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAot
SFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsOjpIVE1MVGFibGVDZWxsRWxlbWVudEltcGwoRG9jdW1l
bnRQdHIgKmRvYywgaW50IHRhZykKLSAgOiBIVE1MVGFibGVQYXJ0RWxlbWVudEltcGwoZG9jKQor
SFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsOjpIVE1MVGFibGVDZWxsRWxlbWVudEltcGwoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnRQdHIgKmRvYykKKyAgOiBIVE1MVGFibGVQ
YXJ0RWxlbWVudEltcGwodGFnTmFtZSwgZG9jKQogewotICBfY29sID0gLTE7Ci0gIF9yb3cgPSAt
MTsKLSAgY1NwYW4gPSByU3BhbiA9IDE7Ci0gIF9pZCA9IHRhZzsKLSAgcm93SGVpZ2h0ID0gMDsK
LSAgbV9zb2xpZCA9IGZhbHNlOworICAgIF9jb2wgPSAtMTsKKyAgICBfcm93ID0gLTE7CisgICAg
Y1NwYW4gPSByU3BhbiA9IDE7CisgICAgcm93SGVpZ2h0ID0gMDsKKyAgICBtX3NvbGlkID0gZmFs
c2U7CiB9CiAKIEhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbDo6fkhUTUxUYWJsZUNlbGxFbGVtZW50
SW1wbCgpCkBAIC0xMTc5LDkgKzExNDksOSBAQCB2b2lkIEhUTUxUYWJsZUNlbGxFbGVtZW50SW1w
bDo6cGFyc2VNYXBwCiAvLyB1c2VkIGJ5IHRhYmxlIGNlbGxzIHRvIHNoYXJlIHN0eWxlIGRlY2xz
IGNyZWF0ZWQgYnkgdGhlIGVuY2xvc2luZyB0YWJsZS4KIENTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uSW1wbCogSFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsOjphZGRpdGlvbmFsQXR0cmlidXRlU3R5
bGVEZWNsKCkKIHsKLSAgICBIVE1MRWxlbWVudEltcGwqIHAgPSBzdGF0aWNfY2FzdDxIVE1MRWxl
bWVudEltcGwqPihwYXJlbnROb2RlKCkpOwotICAgIHdoaWxlKHAgJiYgcC0+aWQoKSAhPSBJRF9U
QUJMRSkKLSAgICAgICAgcCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCo+KHAtPnBhcmVu
dE5vZGUoKSk7CisgICAgTm9kZUltcGwqIHAgPSBwYXJlbnROb2RlKCk7CisgICAgd2hpbGUgKHAg
JiYgIXAtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0YWJsZSgpKSkKKyAgICAgICAgcCA9IHAtPnBh
cmVudE5vZGUoKTsKIAogICAgIGlmIChwKSB7CiAgICAgICAgIEhUTUxUYWJsZUVsZW1lbnRJbXBs
KiB0YWJsZSA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZUVsZW1lbnRJbXBsKj4ocCk7CkBAIC0xMTkx
LDE1ICsxMTYxLDYgQEAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25JbXBsKiBIVE1MVGFibAog
ICAgIHJldHVybiAwOwogfQogCi12b2lkIEhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbDo6YXR0YWNo
KCkKLXsKLSAgICBIVE1MRWxlbWVudEltcGwqIHAgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudElt
cGwqPihwYXJlbnROb2RlKCkpOwotICAgIHdoaWxlKHAgJiYgcC0+aWQoKSAhPSBJRF9UQUJMRSkK
LSAgICAgICAgcCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCo+KHAtPnBhcmVudE5vZGUo
KSk7Ci0KLSAgICBIVE1MVGFibGVQYXJ0RWxlbWVudEltcGw6OmF0dGFjaCgpOwotfQotCiBib29s
IEhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbDo6aXNVUkxBdHRyaWJ1dGUoQXR0cmlidXRlSW1wbCAq
YXR0cikgY29uc3QKIHsKICAgICByZXR1cm4gYXR0ci0+aWQoKSA9PSBBVFRSX0JBQ0tHUk9VTkQ7
CkBAIC0xMzM3LDE2ICsxMjk4LDEwIEBAIHZvaWQgSFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsOjpz
ZXRXaWR0aCgKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1IVE1MVGFibGVDb2xFbGVtZW50SW1w
bDo6SFRNTFRhYmxlQ29sRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgdXNob3J0IGkpCi0g
ICAgOiBIVE1MVGFibGVQYXJ0RWxlbWVudEltcGwoZG9jKQorSFRNTFRhYmxlQ29sRWxlbWVudElt
cGw6OkhUTUxUYWJsZUNvbEVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUs
IERvY3VtZW50UHRyICpkb2MpCisgICAgOiBIVE1MVGFibGVQYXJ0RWxlbWVudEltcGwodGFnTmFt
ZSwgZG9jKQogewotICAgIF9pZCA9IGk7Ci0gICAgX3NwYW4gPSAoX2lkID09IElEX0NPTEdST1VQ
ID8gMCA6IDEpOwotfQotCi1Ob2RlSW1wbDo6SWQgSFRNTFRhYmxlQ29sRWxlbWVudEltcGw6Omlk
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gX2lkOworICAgIF9zcGFuID0gKHRhZ05hbWUubWF0Y2hl
cyhIVE1MTmFtZXM6OmNvbGdyb3VwKCkpID8gMCA6IDEpOwogfQogCiBib29sIEhUTUxUYWJsZUNv
bEVsZW1lbnRJbXBsOjptYXBUb0VudHJ5KE5vZGVJbXBsOjpJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1
dGVFbnRyeSYgcmVzdWx0KSBjb25zdApAQCAtMTQzNywxMSArMTM5Miw2IEBAIHZvaWQgSFRNTFRh
YmxlQ29sRWxlbWVudEltcGw6OnNldFdpZHRoKGMKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1O
b2RlSW1wbDo6SWQgSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIElEX0NBUFRJT047Ci19Ci0KIGJvb2wgSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnRJ
bXBsOjptYXBUb0VudHJ5KE5vZGVJbXBsOjpJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYg
cmVzdWx0KSBjb25zdAogewogICAgIGlmIChhdHRyID09IEFUVFJfQUxJR04pIHsKSW5kZXg6IGto
dG1sL2h0bWwvaHRtbF90YWJsZWltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3Qv
V2ViQ29yZS9raHRtbC9odG1sL2h0bWxfdGFibGVpbXBsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuMjAKZGlmZiAtdSAtcCAtcjEuMjAga2h0bWwvaHRtbC9odG1sX3RhYmxlaW1wbC5oCi0tLSBr
aHRtbC9odG1sL2h0bWxfdGFibGVpbXBsLmgJMTEgTWF5IDIwMDUgMDU6NDk6MzQgLTAwMDAJMS4y
MAorKysga2h0bWwvaHRtbC9odG1sX3RhYmxlaW1wbC5oCTE3IEp1biAyMDA1IDAxOjMyOjUyIC0w
MDAwCkBAIC02Miw4ICs2Miw2IEBAIHB1YmxpYzoKICAgICBIVE1MVGFibGVFbGVtZW50SW1wbChE
b2N1bWVudFB0ciAqZG9jKTsKICAgICB+SFRNTFRhYmxlRWxlbWVudEltcGwoKTsKIAotICAgIHZp
cnR1YWwgSWQgaWQoKSBjb25zdDsKLQogICAgIEhUTUxUYWJsZUNhcHRpb25FbGVtZW50SW1wbCAq
Y2FwdGlvbigpIGNvbnN0IHsgcmV0dXJuIHRDYXB0aW9uOyB9CiAgICAgTm9kZUltcGwgKnNldENh
cHRpb24oIEhUTUxUYWJsZUNhcHRpb25FbGVtZW50SW1wbCAqICk7CiAKQEAgLTE0Nyw4ICsxNDUs
OCBAQCBjbGFzcyBIVE1MVGFibGVQYXJ0RWxlbWVudEltcGwgOiBwdWJsaWMgCiAKIHsKIHB1Ymxp
YzoKLSAgICBIVE1MVGFibGVQYXJ0RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgICAg
ICAgOiBIVE1MRWxlbWVudEltcGwoZG9jKQorICAgIEhUTUxUYWJsZVBhcnRFbGVtZW50SW1wbChj
b25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudFB0ciAqZG9jKQorICAgICAgICA6
IEhUTUxFbGVtZW50SW1wbCh0YWdOYW1lLCBkb2MpCiAgICAgICAgIHsgfQogCiAgICAgdmlydHVh
bCBib29sIG1hcFRvRW50cnkoTm9kZUltcGw6OklkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5
JiByZXN1bHQpIGNvbnN0OwpAQCAtMTYwLDkgKzE1OCw3IEBAIHB1YmxpYzoKIGNsYXNzIEhUTUxU
YWJsZVNlY3Rpb25FbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MVGFibGVQYXJ0RWxlbWVudEltcGwK
IHsKIHB1YmxpYzoKLSAgICBIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGwoRG9jdW1lbnRQdHIg
KmRvYywgdXNob3J0IHRhZ2lkLCBib29sIGltcGxpY2l0KTsKLQotICAgIHZpcnR1YWwgSWQgaWQo
KSBjb25zdDsKKyAgICBIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGwoY29uc3QgUXVhbGlmaWVk
TmFtZSYgdGFnTmFtZSwgRG9jdW1lbnRQdHIgKmRvYywgYm9vbCBpbXBsaWNpdCk7CiAKICAgICB2
aXJ0dWFsIE5vZGVJbXBsICphZGRDaGlsZChOb2RlSW1wbCAqY2hpbGQpOwogICAgIApAQCAtMTg0
LDkgKzE4MCw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFZBbGlnbiggY29uc3QgRE9NU3RyaW5n
ICYgKTsKIAogICAgIGtodG1sOjpTaGFyZWRQdHI8SFRNTENvbGxlY3Rpb25JbXBsPiByb3dzKCk7
Ci0KLXByb3RlY3RlZDoKLSAgICB1c2hvcnQgX2lkOwogfTsKIAogLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQpAQCAtMTk1LDkgKzE4OCw3IEBAIGNsYXNzIEhUTUxUYWJsZVJvd0VsZW1lbnRJbXBsIDogcHVi
bGljIEgKIHsKIHB1YmxpYzoKICAgICBIVE1MVGFibGVSb3dFbGVtZW50SW1wbChEb2N1bWVudFB0
ciAqZG9jKQotICAgICAgICA6IEhUTUxUYWJsZVBhcnRFbGVtZW50SW1wbChkb2MpIHt9Ci0KLSAg
ICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CisgICAgICAgIDogSFRNTFRhYmxlUGFydEVsZW1lbnRJ
bXBsKEhUTUxOYW1lczo6dHIoKSwgZG9jKSB7fQogCiAgICAgdmlydHVhbCBOb2RlSW1wbCAqYWRk
Q2hpbGQoTm9kZUltcGwgKmNoaWxkKTsKICAgICAKQEAgLTIzOCw3ICsyMjksNyBAQCBwcm90ZWN0
ZWQ6CiBjbGFzcyBIVE1MVGFibGVDZWxsRWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTFRhYmxlUGFy
dEVsZW1lbnRJbXBsCiB7CiBwdWJsaWM6Ci0gICAgSFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsKERv
Y3VtZW50UHRyICpkb2MsIGludCB0YWdJZCk7CisgICAgSFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBs
KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50UHRyICpkb2MpOwogICAgIH5I
VE1MVGFibGVDZWxsRWxlbWVudEltcGwoKTsKIAogICAgIC8vICMjIyBGSVggdGhlc2UgdHdvLi4u
CkBAIC0yNTEsMTQgKzI0MiwxMCBAQCBwdWJsaWM6CiAKICAgICBpbnQgY29sU3BhbigpIGNvbnN0
IHsgcmV0dXJuIGNTcGFuOyB9CiAgICAgaW50IHJvd1NwYW4oKSBjb25zdCB7IHJldHVybiByU3Bh
bjsgfQotICAgIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdCB7IHJldHVybiBfaWQ7IH0KLSAg
ICAKKwogICAgIHZpcnR1YWwgYm9vbCBtYXBUb0VudHJ5KE5vZGVJbXBsOjpJZCBhdHRyLCBNYXBw
ZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VN
YXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqYXR0cik7CiAKLSAgICB2aXJ0dWFs
IHZvaWQgYXR0YWNoKCk7Ci0KICAgICAvLyB1c2VkIGJ5IHRhYmxlIGNlbGxzIHRvIHNoYXJlIHN0
eWxlIGRlY2xzIGNyZWF0ZWQgYnkgdGhlIGVuY2xvc2luZyB0YWJsZS4KICAgICB2aXJ0dWFsIENT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uSW1wbCogYWRkaXRpb25hbEF0dHJpYnV0ZVN0eWxlRGVj
bCgpOwogICAgIApAQCAtMzExLDcgKzI5OCw2IEBAIHByb3RlY3RlZDoKICAgICBpbnQgX2NvbDsK
ICAgICBpbnQgclNwYW47CiAgICAgaW50IGNTcGFuOwotICAgIGludCBfaWQ7CiAgICAgaW50IHJv
d0hlaWdodDsKICAgICBib29sIG1fc29saWQgICAgICAgIDogMTsKIH07CkBAIC0zMjEsOSArMzA3
LDcgQEAgcHJvdGVjdGVkOgogY2xhc3MgSFRNTFRhYmxlQ29sRWxlbWVudEltcGwgOiBwdWJsaWMg
SFRNTFRhYmxlUGFydEVsZW1lbnRJbXBsCiB7CiBwdWJsaWM6Ci0gICAgSFRNTFRhYmxlQ29sRWxl
bWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgdXNob3J0IGkpOwotCi0gICAgdmlydHVhbCBJZCBp
ZCgpIGNvbnN0OworICAgIEhUTUxUYWJsZUNvbEVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5h
bWUmIHRhZ05hbWUsIERvY3VtZW50UHRyICpkb2MpOwogCiAgICAgdm9pZCBzZXRUYWJsZShIVE1M
VGFibGVFbGVtZW50SW1wbCAqdCkgeyB0YWJsZSA9IHQ7IH0KIApAQCAtMzUxLDEwICszMzUsNiBA
QCBwdWJsaWM6CiAgICAgdm9pZCBzZXRXaWR0aCggY29uc3QgRE9NU3RyaW5nICYgKTsKIAogcHJv
dGVjdGVkOgotICAgIC8vIGNvdWxkIGJlIElEX0NPTCBvciBJRF9DT0xHUk9VUCAuLi4gVGhlIERP
TSBpcyBub3QgcXVpdGUgY2xlYXIgb24KLSAgICAvLyB0aGlzLCBidXQgc2luY2UgYm90aCBlbGVt
ZW50cyB3b3JrIHF1aXRlIHNpbWlsYXIsIHdlIHVzZSBvbmUKLSAgICAvLyBET01FbGVtZW50IGZv
ciB0aGVtLi4uCi0gICAgdXNob3J0IF9pZDsKICAgICBpbnQgX3NwYW47CiAgICAgSFRNTFRhYmxl
RWxlbWVudEltcGwgKnRhYmxlOwogfTsKQEAgLTM2NSw5ICszNDUsNyBAQCBjbGFzcyBIVE1MVGFi
bGVDYXB0aW9uRWxlbWVudEltcGwgOiBwdWJsCiB7CiBwdWJsaWM6CiAgICAgSFRNTFRhYmxlQ2Fw
dGlvbkVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0gICAgICAgIDogSFRNTFRhYmxlUGFy
dEVsZW1lbnRJbXBsKGRvYykge30KLQotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKKyAgICAg
ICAgOiBIVE1MVGFibGVQYXJ0RWxlbWVudEltcGwoSFRNTE5hbWVzOjpjYXB0aW9uKCksIGRvYykg
e30KICAgICAKICAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShOb2RlSW1wbDo6SWQgYXR0ciwg
TWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHBh
cnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIpOwpJbmRleDoga2h0
bWwvaHRtbC9odG1scGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2Vi
Q29yZS9raHRtbC9odG1sL2h0bWxwYXJzZXIuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjk2
CmRpZmYgLXUgLXAgLXIxLjk2IGtodG1sL2h0bWwvaHRtbHBhcnNlci5jcHAKLS0tIGtodG1sL2h0
bWwvaHRtbHBhcnNlci5jcHAJMTEgTWF5IDIwMDUgMDA6NTg6MjggLTAwMDAJMS45NgorKysga2h0
bWwvaHRtbC9odG1scGFyc2VyLmNwcAkxNyBKdW4gMjAwNSAwMTozMjo1MyAtMDAwMApAQCAtNjks
MjQgKzY5LDI0IEBAIHVzaW5nIG5hbWVzcGFjZSBraHRtbDsKIGNsYXNzIEhUTUxTdGFja0VsZW0K
IHsKIHB1YmxpYzoKLSAgICBIVE1MU3RhY2tFbGVtKCBpbnQgX2lkLAotICAgICAgICAgICAgICAg
ICAgIGludCBfbGV2ZWwsCi0gICAgICAgICAgICAgICAgICAgRE9NOjpOb2RlSW1wbCAqX25vZGUs
Ci0gICAgICAgICAgICAgICAgICAgSFRNTFN0YWNrRWxlbSAqIF9uZXh0CisgICAgSFRNTFN0YWNr
RWxlbShjb25zdCBBdG9taWNTdHJpbmcmIF90YWdOYW1lLAorICAgICAgICAgICAgICAgICAgaW50
IF9sZXZlbCwKKyAgICAgICAgICAgICAgICAgIERPTTo6Tm9kZUltcGwgKl9ub2RlLAorICAgICAg
ICAgICAgICAgICAgSFRNTFN0YWNrRWxlbSAqIF9uZXh0CiAgICAgICAgICkKICAgICAgICAgOgot
ICAgICAgICBpZChfaWQpLAorICAgICAgICB0YWdOYW1lKF90YWdOYW1lKSwKICAgICAgICAgbGV2
ZWwoX2xldmVsKSwKICAgICAgICAgc3RyYXlUYWJsZUNvbnRlbnQoZmFsc2UpLAogICAgICAgICBu
b2RlKF9ub2RlKSwKICAgICAgICAgbmV4dChfbmV4dCkKICAgICAgICAgeyB9CiAKLSAgICBpbnQg
ICAgICAgaWQ7Ci0gICAgaW50ICAgICAgIGxldmVsOwotICAgIGJvb2wgICAgICBzdHJheVRhYmxl
Q29udGVudDsKLSAgICBOb2RlSW1wbCAqbm9kZTsKLSAgICBIVE1MU3RhY2tFbGVtICpuZXh0Owor
ICAgIEF0b21pY1N0cmluZyB0YWdOYW1lOworICAgIGludCBsZXZlbDsKKyAgICBib29sIHN0cmF5
VGFibGVDb250ZW50OworICAgIE5vZGVJbXBsKiBub2RlOworICAgIEhUTUxTdGFja0VsZW0qIG5l
eHQ7CiB9OwogCiAvKioKQEAgLTExNSwxMSArMTE1LDYgQEAgcHVibGljOgogS0hUTUxQYXJzZXI6
OktIVE1MUGFyc2VyKEtIVE1MVmlldyAqX3BhcmVudCwgRG9jdW1lbnRQdHIgKmRvYywgYm9vbCBp
bmNsdWRlc0NvbW1lbnRzKSAKICAgICA6IGN1cnJlbnQoMCksIGN1cnJlbnRJc1JlZmVyZW5jZWQo
ZmFsc2UpLCBpbmNsdWRlc0NvbW1lbnRzSW5ET00oaW5jbHVkZXNDb21tZW50cykKIHsKLSAgICAv
L2tkRGVidWcoIDYwMzUgKSA8PCAicGFyc2VyIGNvbnN0cnVjdG9yIiA8PCBlbmRsOwotI2lmIFNQ
RUVEX0RFQlVHID4gMAotICAgIHF0LnN0YXJ0KCk7Ci0jZW5kaWYKLQogICAgIEhUTUxXaWRnZXQg
ICAgPSBfcGFyZW50OwogICAgIGRvY3VtZW50ICAgICAgPSBkb2M7CiAgICAgZG9jdW1lbnQtPnJl
ZigpOwpAQCAtMTQ1LDEwICsxNDAsNiBAQCBLSFRNTFBhcnNlcjo6S0hUTUxQYXJzZXIoRE9NOjpE
b2N1bWVudEZyCiAKIEtIVE1MUGFyc2VyOjp+S0hUTUxQYXJzZXIoKQogewotI2lmIFNQRUVEX0RF
QlVHID4gMAotICAgIGtkRGVidWcoICkgPDwgIlRJTUU6IHBhcnNpbmcgdGltZSB3YXMgPSAiIDw8
IHF0LmVsYXBzZWQoKSA8PCBlbmRsOwotI2VuZGlmCi0KICAgICBmcmVlQmxvY2soKTsKIAogICAg
IHNldEN1cnJlbnQoMCk7CkBAIC0xNjUsOSArMTU2LDYgQEAgdm9pZCBLSFRNTFBhcnNlcjo6cmVz
ZXQoKQogCiAgICAgZnJlZUJsb2NrKCk7CiAKLSAgICAvLyBiZWZvcmUgcGFyc2luZywgbm8gdGFn
cyBhcmUgZm9yYmlkZGVuCi0gICAgbWVtc2V0KGZvcmJpZGRlblRhZywgMCwgc2l6ZW9mKGZvcmJp
ZGRlblRhZykpOwotCiAgICAgaW5Cb2R5ID0gZmFsc2U7CiAgICAgaGF2ZUZyYW1lU2V0ID0gZmFs
c2U7CiAgICAgaGF2ZUNvbnRlbnQgPSBmYWxzZTsKQEAgLTE4MCw3ICsxNjgsNyBAQCB2b2lkIEtI
VE1MUGFyc2VyOjpyZXNldCgpCiAgICAgZW5kID0gZmFsc2U7CiAgICAgaXNpbmRleCA9IDA7CiAg
ICAgCi0gICAgZGlzY2FyZF91bnRpbCA9IDA7CisgICAgZGlzY2FyZF91bnRpbCA9IG51bGxBdG9t
OwogfQogCiB2b2lkIEtIVE1MUGFyc2VyOjpzZXRDdXJyZW50KERPTTo6Tm9kZUltcGwgKm5ld0N1
cnJlbnQpIApAQCAtMTk2LDQxICsxODQsMjkgQEAgdm9pZCBLSFRNTFBhcnNlcjo6c2V0Q3VycmVu
dChET006Ok5vZGVJbQogCiB2b2lkIEtIVE1MUGFyc2VyOjpwYXJzZVRva2VuKFRva2VuICp0KQog
ewotICAgIGlmKGRpc2NhcmRfdW50aWwpIHsKLSAgICAgICAgaWYodC0+aWQgPT0gZGlzY2FyZF91
bnRpbCkKLSAgICAgICAgICAgIGRpc2NhcmRfdW50aWwgPSAwOworICAgIGlmICghZGlzY2FyZF91
bnRpbC5pc051bGwoKSkgeworICAgICAgICBpZiAodC0+dGFnTmFtZSA9PSBkaXNjYXJkX3VudGls
ICYmICF0LT5iZWdpblRhZykKKyAgICAgICAgICAgIGRpc2NhcmRfdW50aWwgPSBudWxsQXRvbTsK
IAogICAgICAgICAvLyBkbyBub3Qgc2tpcCA8L2lmcmFtZT4KLSAgICAgICAgaWYgKCBkaXNjYXJk
X3VudGlsIHx8IGN1cnJlbnQtPmlkKCkgKyBJRF9DTE9TRV9UQUcgIT0gdC0+aWQgKQorICAgICAg
ICBpZiAoIWRpc2NhcmRfdW50aWwuaXNOdWxsKCkgfHwgKGN1cnJlbnQtPmxvY2FsTmFtZSgpICE9
IHQtPnRhZ05hbWUpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotI2lmZGVmIFBBUlNF
Ul9ERUJVRwotICAgIGtkRGVidWcoIDYwMzUgKSA8PCAiXG5cbj09PiBwYXJzZXI6IHByb2Nlc3Np
bmcgdG9rZW4gIiA8PCBnZXRUYWdOYW1lKHQtPmlkKS5zdHJpbmcoKSA8PCAiKCIgPDwgdC0+aWQg
PDwgIikiCi0gICAgICAgICAgICAgICAgICAgIDw8ICIgY3VycmVudCA9ICIgPDwgZ2V0VGFnTmFt
ZShjdXJyZW50LT5pZCgpKS5zdHJpbmcoKSA8PCAiKCIgPDwgY3VycmVudC0+aWQoKSA8PCAiKSIg
PDwgZW5kbDsKLSAgICBrZERlYnVnKDYwMzUpIDw8ICIgaW5Cb2R5PSIgPDwgaW5Cb2R5IDw8ICIg
aGF2ZUZyYW1lU2V0PSIgPDwgaGF2ZUZyYW1lU2V0IDw8IGVuZGw7Ci0jZW5kaWYKLQotICAgIC8v
IGhvbHkgc2hpdC4gYXBwYXJlbnRseSBzb21lIHNpdGVzIHVzZSA8L2JyPiBpbnN0ZWFkIG9mIDxi
cj4KLSAgICAvLyBiZSBjb21wYXRpYmxlIHdpdGggSUUgYW5kIE5TCi0gICAgaWYgKHQtPmlkID09
IElEX0JSICsgSURfQ0xPU0VfVEFHICYmIGRvYygpLT5pbkNvbXBhdE1vZGUoKSkKLSAgICAgICAg
dC0+aWQgPSBJRF9CUjsKKyAgICAvLyBBcHBhcmVudGx5IHNvbWUgc2l0ZXMgdXNlIDwvYnI+IGlu
c3RlYWQgb2YgPGJyPi4gIEJlIGNvbXBhdGlibGUgd2l0aCBJRSBhbmQgRmlyZWZveCBhbmQgdHJl
YXQgdGhpcyBsaWtlIDxicj4uCisgICAgaWYgKHQtPmlzQ2xvc2VUYWcoSFRNTE5hbWVzOjpicigp
KSAmJiBkb2MoKS0+aW5Db21wYXRNb2RlKCkpCisgICAgICAgIHQtPmJlZ2luVGFnID0gdHJ1ZTsK
IAotICAgIGlmICh0LT5pZCA+IElEX0NMT1NFX1RBRykKLSAgICB7CisgICAgaWYgKCF0LT5iZWdp
blRhZykgewogICAgICAgICBwcm9jZXNzQ2xvc2VUYWcodCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKICAgICAvLyBpZ25vcmUgc3BhY2VzLCBpZiB3ZSdyZSBub3QgaW5zaWRlIGEgcGFyYWdy
YXBoIG9yIG90aGVyIGlubGluZSBjb2RlCi0gICAgaWYoIHQtPmlkID09IElEX1RFWFQgJiYgdC0+
dGV4dCApIHsKLSAgICAgICAgaWYoaW5Cb2R5ICYmICFza2lwTW9kZSgpICYmIGN1cnJlbnQtPmlk
KCkgIT0gSURfU1RZTEUgCi0gICAgICAgICAgICAmJiBjdXJyZW50LT5pZCgpICE9IElEX1RJVExF
ICYmIGN1cnJlbnQtPmlkKCkgIT0gSURfU0NSSVBUICYmCi0gICAgICAgICAgICAhdC0+dGV4dC0+
Y29udGFpbnNPbmx5V2hpdGVzcGFjZSgpKSAKKyAgICBpZiAodC0+dGFnTmFtZSA9PSB0ZXh0QXRv
bSAmJiB0LT50ZXh0KSB7CisgICAgICAgIGlmIChpbkJvZHkgJiYgIXNraXBNb2RlKCkgJiYgY3Vy
cmVudC0+bG9jYWxOYW1lKCkgIT0gSFRNTE5hbWVzOjpzdHlsZSgpICYmIGN1cnJlbnQtPmxvY2Fs
TmFtZSgpICE9IEhUTUxOYW1lczo6dGl0bGUoKSAmJiAKKyAgICAgICAgICAgIGN1cnJlbnQtPmxv
Y2FsTmFtZSgpICE9IEhUTUxOYW1lczo6c2NyaXB0KCkgJiYgIXQtPnRleHQtPmNvbnRhaW5zT25s
eVdoaXRlc3BhY2UoKSkgCiAgICAgICAgICAgICBoYXZlQ29udGVudCA9IHRydWU7Ci0jaWZkZWYg
UEFSU0VSX0RFQlVHCi0gICAgICAgIGtkRGVidWcoNjAzNSkgPDwgImxlbmd0aD0iPDwgdC0+dGV4
dC0+bCA8PCAiIHRleHQ9JyIgPDwgUUNvbnN0U3RyaW5nKHQtPnRleHQtPnMsIHQtPnRleHQtPmwp
LnN0cmluZygpIDw8ICInIiA8PCBlbmRsOwotI2VuZGlmCiAgICAgfQogCiAgICAgTm9kZUltcGwg
Km4gPSBnZXRFbGVtZW50KHQpOwpAQCAtMjQxLDk3ICsyMTcsNzMgQEAgdm9pZCBLSFRNTFBhcnNl
cjo6cGFyc2VUb2tlbihUb2tlbiAqdCkKICAgICBTaGFyZWRQdHI8Tm9kZUltcGw+IHByb3RlY3RO
b2RlKG4pOwogCiAgICAgLy8gc2V0IGF0dHJpYnV0ZXMKLSAgICBpZihuLT5pc0VsZW1lbnROb2Rl
KCkpCi0gICAgewotICAgICAgICBFbGVtZW50SW1wbCAqZSA9IHN0YXRpY19jYXN0PEVsZW1lbnRJ
bXBsICo+KG4pOworICAgIGlmIChuLT5pc0hUTUxFbGVtZW50KCkpIHsKKyAgICAgICAgSFRNTEVs
ZW1lbnRJbXBsICplID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsKj4obik7CiAgICAgICAg
IGUtPnNldEF0dHJpYnV0ZU1hcCh0LT5hdHRycyk7CiAKICAgICAgICAgLy8gdGFrZSBjYXJlIG9m
IG9wdGlvbmFsIGNsb3NlIHRhZ3MKLSAgICAgICAgaWYoZW5kVGFnUmVxdWlyZW1lbnQoZS0+aWQo
KSkgPT0gRE9NOjpPUFRJT05BTCkKLSAgICAgICAgICAgIHBvcEJsb2NrKHQtPmlkKTsKKyAgICAg
ICAgaWYgKGUtPmVuZFRhZ1JlcXVpcmVtZW50KCkgPT0gRE9NOjpPUFRJT05BTCkKKyAgICAgICAg
ICAgIHBvcEJsb2NrKHQtPnRhZ05hbWUpOwogICAgICAgICAgICAgCi0gICAgICAgIGlmIChpc0hl
YWRlclRhZyh0LT5pZCkpCisgICAgICAgIGlmIChpc0hlYWRlclRhZyh0LT50YWdOYW1lKSkKICAg
ICAgICAgICAgIC8vIERvIG5vdCBhbGxvdyB0d28gaGVhZGVyIHRhZ3MgdG8gYmUgbmVzdGVkIGlm
IHRoZSBpbnRlcnZlbmluZyB0YWdzIGFyZSBpbmxpbmVzLgogICAgICAgICAgICAgcG9wTmVzdGVk
SGVhZGVyVGFnKCk7CiAgICAgfQogCi0gICAgLy8gaWYgdGhpcyB0YWcgaXMgZm9yYmlkZGVuIGlu
c2lkZSB0aGUgY3VycmVudCBjb250ZXh0LCBwb3AKLSAgICAvLyBibG9ja3MgdW50aWwgd2UgYXJl
IGFsbG93ZWQgdG8gYWRkIGl0Li4uCi0gICAgd2hpbGUgKGJsb2NrU3RhY2sgJiYgdC0+aWQgPD0g
SURfTEFTVF9UQUcgJiYgZm9yYmlkZGVuVGFnW3QtPmlkXSkgewotI2lmZGVmIFBBUlNFUl9ERUJV
RwotICAgICAgICBrZERlYnVnKCA2MDM1ICkgPDwgInQtPmlkOiAiIDw8IHQtPmlkIDw8ICIgaXMg
Zm9yYmlkZGVuIDotKCAiIDw8IGVuZGw7Ci0jZW5kaWYKLSAgICAgICAgcG9wT25lQmxvY2soKTsK
LSAgICB9Ci0KLSAgICBpZiAoIWluc2VydE5vZGUobiwgdC0+ZmxhdCkpIAotICAgIHsKKyAgICBp
ZiAoIWluc2VydE5vZGUobiwgdC0+ZmxhdCkpIHsKICAgICAgICAgLy8gd2UgY291bGRuJ3QgaW5z
ZXJ0IHRoZSBub2RlLi4uCi0gICAgICAgIAotICAgICAgICBpZihuLT5pc0VsZW1lbnROb2RlKCkp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEVsZW1lbnRJbXBsICplID0gc3RhdGljX2Nhc3Q8RWxl
bWVudEltcGwgKj4obik7CisgICAgICAgIGlmIChuLT5pc0VsZW1lbnROb2RlKCkpIHsKKyAgICAg
ICAgICAgIEVsZW1lbnRJbXBsKiBlID0gc3RhdGljX2Nhc3Q8RWxlbWVudEltcGwqPihuKTsKICAg
ICAgICAgICAgIGUtPnNldEF0dHJpYnV0ZU1hcCgwKTsKICAgICAgICAgfQogICAgICAgICAgICAg
Ci0jaWZkZWYgUEFSU0VSX0RFQlVHCi0gICAgICAgIGtkRGVidWcoIDYwMzUgKSA8PCAiaW5zZXJ0
Tm9kZSBmYWlsZWQgY3VycmVudD0iIDw8IGN1cnJlbnQtPmlkKCkgPDwgIiwgbmV3PSIgPDwgbi0+
aWQoKSA8PCAiISIgPDwgZW5kbDsKLSNlbmRpZgogICAgICAgICBpZiAobWFwID09IG4pCi0gICAg
ICAgIHsKLSNpZmRlZiBQQVJTRVJfREVCVUcKLSAgICAgICAgICAgIGtkRGVidWcoIDYwMzUgKSA8
PCAiICAtLT4gcmVzZXR0aW5nIG1hcCEiIDw8IGVuZGw7Ci0jZW5kaWYKICAgICAgICAgICAgIG1h
cCA9IDA7Ci0gICAgICAgIH0KKwogICAgICAgICBpZiAoZm9ybSA9PSBuKQotICAgICAgICB7Ci0j
aWZkZWYgUEFSU0VSX0RFQlVHCi0gICAgICAgICAgICBrZERlYnVnKCA2MDM1ICkgPDwgIiAgIC0t
PiByZXNldHRpbmcgZm9ybSEiIDw8IGVuZGw7Ci0jZW5kaWYKICAgICAgICAgICAgIGZvcm0gPSAw
OwotICAgICAgICB9CiAgICAgfQogfQogCi1zdGF0aWMgYm9vbCBpc1RhYmxlUmVsYXRlZFRhZyhp
bnQgaWQpCitzdGF0aWMgYm9vbCBpc1RhYmxlU2VjdGlvbihOb2RlSW1wbCogbikKK3sKKyAgICBy
ZXR1cm4gbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRib2R5KCkpIHx8IG4tPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjp0Zm9vdCgpKSB8fCBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGhlYWQoKSk7
Cit9CisKK3N0YXRpYyBib29sIGlzVGFibGVQYXJ0KE5vZGVJbXBsKiBuKQogewotICAgIHJldHVy
biAoaWQgPT0gSURfVFIgfHwgaWQgPT0gSURfVEQgfHwgaWQgPT0gSURfVEFCTEUgfHwgaWQgPT0g
SURfVEJPRFkgfHwgaWQgPT0gSURfVEZPT1QgfHwgaWQgPT0gSURfVEhFQUQgfHwKLSAgICAgICAg
ICAgIGlkID09IElEX1RIKTsKKyAgICByZXR1cm4gbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRy
KCkpIHx8IG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0ZCgpKSB8fCBuLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6dGgoKSkgfHwKKyAgICAgICAgICAgaXNUYWJsZVNlY3Rpb24obik7Cit9CisKK3N0
YXRpYyBib29sIGlzVGFibGVSZWxhdGVkKE5vZGVJbXBsKiBuKQoreworICAgIHJldHVybiBuLT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6dGFibGUoKSkgfHwgaXNUYWJsZVBhcnQobik7CiB9CiAKIGJv
b2wgS0hUTUxQYXJzZXI6Omluc2VydE5vZGUoTm9kZUltcGwgKm4sIGJvb2wgZmxhdCkKIHsKICAg
ICBTaGFyZWRQdHI8Tm9kZUltcGw+IHByb3RlY3ROb2RlKG4pOwogCi0gICAgaW50IGlkID0gbi0+
aWQoKTsKLQorICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lID0gbi0+bG9jYWxOYW1l
KCk7CisgICAgaW50IHRhZ1ByaW9yaXR5ID0gbi0+aXNIVE1MRWxlbWVudCgpID8gc3RhdGljX2Nh
c3Q8SFRNTEVsZW1lbnRJbXBsKj4obiktPnRhZ1ByaW9yaXR5KCkgOiAwOworICAgICAgICAKICAg
ICAvLyBsZXQncyBiZSBzdHVwaWQgYW5kIGp1c3QgdHJ5IHRvIGluc2VydCBpdC4KLSAgICAvLyB0
aGlzIHNob3VsZCB3b3JrIGlmIHRoZSBkb2N1bWVudCBpcyB3ZWxsZm9ybWVkCi0jaWZkZWYgUEFS
U0VSX0RFQlVHCi0gICAgTm9kZUltcGwgKnRtcCA9IGN1cnJlbnQ7Ci0jZW5kaWYKKyAgICAvLyB0
aGlzIHNob3VsZCB3b3JrIGlmIHRoZSBkb2N1bWVudCBpcyB3ZWxsLWZvcm1lZAogICAgIE5vZGVJ
bXBsICpuZXdOb2RlID0gY3VycmVudC0+YWRkQ2hpbGQobik7Ci0gICAgaWYgKCBuZXdOb2RlICkg
ewotI2lmZGVmIFBBUlNFUl9ERUJVRwotICAgICAgICBrZERlYnVnKCA2MDM1ICkgPDwgImFkZGVk
ICIgPDwgbi0+bm9kZU5hbWUoKS5zdHJpbmcoKSA8PCAiIHRvICIgPDwgdG1wLT5ub2RlTmFtZSgp
LnN0cmluZygpIDw8ICIsIG5ldyBjdXJyZW50PSIgPDwgbmV3Tm9kZS0+bm9kZU5hbWUoKS5zdHJp
bmcoKSA8PCBlbmRsOwotI2VuZGlmCi0gICAgICAgIC8vIGRvbid0IHB1c2ggZWxlbWVudHMgd2l0
aG91dCBlbmQgdGFnIG9uIHRoZSBzdGFjawotICAgICAgICBpZih0YWdQcmlvcml0eShpZCkgIT0g
MCAmJiAhZmxhdCkKLSAgICAgICAgewotICAgICAgICAgICAgcHVzaEJsb2NrKGlkLCB0YWdQcmlv
cml0eShpZCkpOworICAgIGlmIChuZXdOb2RlKSB7CisgICAgICAgIC8vIGRvbid0IHB1c2ggZWxl
bWVudHMgd2l0aG91dCBlbmQgdGFncyAoZS5nLiwgPGltZz4pIG9uIHRoZSBzdGFjaworICAgICAg
ICBpZiAodGFnUHJpb3JpdHkgPiAwICYmICFmbGF0KSB7CisgICAgICAgICAgICBwdXNoQmxvY2so
bG9jYWxOYW1lLCB0YWdQcmlvcml0eSk7CiAgICAgICAgICAgICBpZiAobmV3Tm9kZSA9PSBjdXJy
ZW50KQotICAgICAgICAgICAgICAgIHBvcEJsb2NrKGlkKTsKKyAgICAgICAgICAgICAgICBwb3BC
bG9jayhsb2NhbE5hbWUpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHNldEN1
cnJlbnQobmV3Tm9kZSk7Ci0jaWYgU1BFRURfREVCVUcgPCAyCi0gICAgICAgICAgICBpZighbi0+
YXR0YWNoZWQoKSAmJiBIVE1MV2lkZ2V0KQorICAgICAgICAgICAgaWYgKCFuLT5hdHRhY2hlZCgp
ICYmIEhUTUxXaWRnZXQpCiAgICAgICAgICAgICAgICAgbi0+YXR0YWNoKCk7Ci0jZW5kaWYKICAg
ICAgICAgfQogICAgICAgICBlbHNlIHsKLSNpZiBTUEVFRF9ERUJVRyA8IDIKLSAgICAgICAgICAg
IGlmKCFuLT5hdHRhY2hlZCgpICYmIEhUTUxXaWRnZXQpCisgICAgICAgICAgICBpZiAoIW4tPmF0
dGFjaGVkKCkgJiYgSFRNTFdpZGdldCkKICAgICAgICAgICAgICAgICBuLT5hdHRhY2goKTsKICAg
ICAgICAgICAgIGlmIChuLT5tYWludGFpbnNTdGF0ZSgpKSB7CiAgICAgICAgICAgICAgICAgZG9j
KCktPnJlZ2lzdGVyTWFpbnRhaW5zU3RhdGUobik7CkBAIC0zNDAsMTA0ICsyOTIsODYgQEAgYm9v
bCBLSFRNTFBhcnNlcjo6aW5zZXJ0Tm9kZShOb2RlSW1wbCAqbgogICAgICAgICAgICAgICAgICAg
ICBuLT5yZXN0b3JlU3RhdGUoc3RhdGVzKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG4t
PmNsb3NlUmVuZGVyZXIoKTsKLSNlbmRpZgogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgfSBlbHNlIHsKLSNpZmRlZiBQQVJTRVJfREVCVUcKLSAgICAgICAga2REZWJ1Zygg
NjAzNSApIDw8ICJBRERJTkcgTk9ERSBGQUlMRUQhISEhIGN1cnJlbnQgPSAiIDw8IGN1cnJlbnQt
Pm5vZGVOYW1lKCkuc3RyaW5nKCkgPDwgIiwgbmV3ID0gIiA8PCBuLT5ub2RlTmFtZSgpLnN0cmlu
ZygpIDw8IGVuZGw7Ci0jZW5kaWYKLSAgICAgICAgLy8gZXJyb3IgaGFuZGxpbmcuLi4KLSAgICAg
ICAgSFRNTEVsZW1lbnRJbXBsICplOwotICAgICAgICBib29sIGhhbmRsZWQgPSBmYWxzZTsKKyAg
ICB9IGVsc2UKKyAgICAgICAgcmV0dXJuIGhhbmRsZUVycm9yKG4sIGZsYXQsIGxvY2FsTmFtZSwg
dGFnUHJpb3JpdHkpOyAvLyBUcnkgdG8gaGFuZGxlIHRoZSBlcnJvci4KK30KIAotICAgICAgICAv
LyBzd2l0Y2ggYWNjb3JkaW5nIHRvIHRoZSBlbGVtZW50IHRvIGluc2VydAotICAgICAgICBzd2l0
Y2goaWQpCi0gICAgICAgIHsKLSAgICAgICAgY2FzZSBJRF9UUjoKLSAgICAgICAgY2FzZSBJRF9U
SDoKLSAgICAgICAgY2FzZSBJRF9URDoKLSAgICAgICAgICAgIGlmIChpblN0cmF5VGFibGVDb250
ZW50ICYmICFpc1RhYmxlUmVsYXRlZFRhZyhjdXJyZW50LT5pZCgpKSkgeworYm9vbCBLSFRNTFBh
cnNlcjo6aGFuZGxlRXJyb3IoTm9kZUltcGwqIG4sIGJvb2wgZmxhdCwgY29uc3QgQXRvbWljU3Ry
aW5nJiBsb2NhbE5hbWUsIGludCB0YWdQcmlvcml0eSkKK3sKKyAgICAvLyBFcnJvciBoYW5kbGlu
ZyBjb2RlLiAgVGhpcyBpcyBqdXN0IGFkIGhvYyBoYW5kbGluZyBvZiBzcGVjaWZpYyBwYXJlbnQv
Y2hpbGQgY29tYmluYXRpb25zLgorICAgIEhUTUxFbGVtZW50SW1wbCAqZTsKKyAgICBib29sIGhh
bmRsZWQgPSBmYWxzZTsKKworICAgIC8vIDEuIENoZWNrIG91dCB0aGUgZWxlbWVudCdzIHRhZyBu
YW1lIHRvIGRlY2lkZSBob3cgdG8gZGVhbCB3aXRoIGVycm9ycy4KKyAgICBpZiAobi0+aXNUZXh0
Tm9kZSgpKSB7CisgICAgICAgIGlmIChjdXJyZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c2Vs
ZWN0KCkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0gZWxzZSBpZiAobi0+aXNI
VE1MRWxlbWVudCgpKSB7CisgICAgICAgIEhUTUxFbGVtZW50SW1wbCogaCA9IHN0YXRpY19jYXN0
PEhUTUxFbGVtZW50SW1wbCo+KG4pOworICAgICAgICBpZiAoaC0+aGFzTG9jYWxOYW1lKEhUTUxO
YW1lczo6dHIoKSkgfHwgaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dGgoKSkgfHwKKyAgICAg
ICAgICAgIGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnRkKCkpKSB7CisgICAgICAgICAgICBp
ZiAoaW5TdHJheVRhYmxlQ29udGVudCAmJiAhaXNUYWJsZVJlbGF0ZWQoY3VycmVudCkpIHsKICAg
ICAgICAgICAgICAgICAvLyBwb3Agb3V0IHRvIHRoZSBuZWFyZXN0IGVuY2xvc2luZyB0YWJsZS1y
ZWxhdGVkIHRhZy4KLSAgICAgICAgICAgICAgICB3aGlsZSAoYmxvY2tTdGFjayAmJiAhaXNUYWJs
ZVJlbGF0ZWRUYWcoY3VycmVudC0+aWQoKSkpCisgICAgICAgICAgICAgICAgd2hpbGUgKGJsb2Nr
U3RhY2sgJiYgIWlzVGFibGVSZWxhdGVkKGN1cnJlbnQpKQogICAgICAgICAgICAgICAgICAgICBw
b3BPbmVCbG9jaygpOwogICAgICAgICAgICAgICAgIHJldHVybiBpbnNlcnROb2RlKG4pOwogICAg
ICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSURfQ09NTUVOVDoK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElEX0hFQUQ6Ci0gICAgICAgICAgICAv
LyAjIyMgYWxsbG93IG5vdCBoYXZpbmcgPEhUTUw+IGluIGF0IGFsbCwgYXMgcGVyIEhUTUwgc3Bl
YwotICAgICAgICAgICAgaWYgKCFjdXJyZW50LT5pc0RvY3VtZW50Tm9kZSgpICYmIGN1cnJlbnQt
PmlkKCkgIT0gSURfSFRNTCApCisgICAgICAgIH0gZWxzZSBpZiAoaC0+aGFzTG9jYWxOYW1lKEhU
TUxOYW1lczo6aGVhZCgpKSkgeworICAgICAgICAgICAgaWYgKCFjdXJyZW50LT5pc0RvY3VtZW50
Tm9kZSgpICYmICFjdXJyZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aHRtbCgpKSkKICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IC8vIFdlIGNhbiBkZWFsIHdpdGggYSBiYXNlLCBtZXRhIGFuZCBsaW5rIGVsZW1lbnQgaW4gdGhl
IGJvZHksIGJ5IGp1c3QgYWRkaW5nIHRoZSBlbGVtZW50IHRvIGhlYWQuCi0gICAgICAgIGNhc2Ug
SURfTUVUQToKLSAgICAgICAgY2FzZSBJRF9MSU5LOgotICAgICAgICBjYXNlIElEX0JBU0U6Ci0g
ICAgICAgICAgICBpZiggIWhlYWQgKQorICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFt
ZShIVE1MTmFtZXM6Om1ldGEoKSkgfHwgaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6bGluaygp
KSB8fCBoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpiYXNlKCkpKSB7CisgICAgICAgICAgICBp
ZiAoIWhlYWQpCiAgICAgICAgICAgICAgICAgY3JlYXRlSGVhZCgpOwotICAgICAgICAgICAgaWYo
IGhlYWQgKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCBoZWFkLT5hZGRDaGlsZChuKSApIHsKLSNp
ZiBTUEVFRF9ERUJVRyA8IDIKLSAgICAgICAgICAgICAgICAgICAgaWYoIW4tPmF0dGFjaGVkKCkg
JiYgSFRNTFdpZGdldCkKKyAgICAgICAgICAgIGlmIChoZWFkKSB7CisgICAgICAgICAgICAgICAg
aWYgKGhlYWQtPmFkZENoaWxkKG4pKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghbi0+YXR0
YWNoZWQoKSAmJiBIVE1MV2lkZ2V0KQogICAgICAgICAgICAgICAgICAgICAgICAgbi0+YXR0YWNo
KCk7Ci0jZW5kaWYKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0JCX0gZWxzZSB7
Ci0JCSAgICByZXR1cm4gZmFsc2U7Ci0JCX0KKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgSURfSFRNTDoKKyAgICAgICAgfSBlbHNlIGlmIChoLT5oYXNM
b2NhbE5hbWUoSFRNTE5hbWVzOjpodG1sKCkpKSB7CiAgICAgICAgICAgICBpZiAoIWN1cnJlbnQt
PmlzRG9jdW1lbnROb2RlKCkgKSB7Ci0JCWlmICggZG9jKCktPmZpcnN0Q2hpbGQoKS0+aWQoKSA9
PSBJRF9IVE1MKSB7Ci0JCSAgICAvLyB3ZSBoYXZlIGFub3RoZXIgPEhUTUw+IGVsZW1lbnQuLi4u
IGFwcGx5IGF0dHJpYnV0ZXMgdG8gZXhpc3Rpbmcgb25lCi0JCSAgICAvLyBtYWtlIHN1cmUgd2Ug
ZG9uJ3Qgb3ZlcndyaXRlIGFscmVhZHkgZXhpc3RpbmcgYXR0cmlidXRlcwotCQkgICAgTmFtZWRB
dHRyTWFwSW1wbCAqbWFwID0gc3RhdGljX2Nhc3Q8RWxlbWVudEltcGwqPihuKS0+YXR0cmlidXRl
cyh0cnVlKTsKLQkJICAgIE5hbWVkQXR0ck1hcEltcGwgKmJtYXAgPSBzdGF0aWNfY2FzdDxFbGVt
ZW50SW1wbCo+KGRvYygpLT5maXJzdENoaWxkKCkpLT5hdHRyaWJ1dGVzKGZhbHNlKTsKLQkJICAg
IGJvb2wgY2hhbmdlZCA9IGZhbHNlOwotCQkgICAgZm9yICh1bnNpZ25lZCBsb25nIGwgPSAwOyBt
YXAgJiYgbCA8IG1hcC0+bGVuZ3RoKCk7ICsrbCkgewotCQkJQXR0cmlidXRlSW1wbCogaXQgPSBt
YXAtPmF0dHJpYnV0ZUl0ZW0obCk7Ci0JCQljaGFuZ2VkID0gIWJtYXAtPmdldEF0dHJpYnV0ZUl0
ZW0oaXQtPmlkKCkpOwotCQkJYm1hcC0+aW5zZXJ0QXR0cmlidXRlKGl0LT5jbG9uZShmYWxzZSkp
OwotCQkgICAgfQotCQkgICAgaWYgKCBjaGFuZ2VkICkKLQkJCWRvYygpLT5yZWNhbGNTdHlsZSgg
Tm9kZUltcGw6OkluaGVyaXQgKTsKLQkJfQorICAgICAgICAgICAgICAgIGlmIChkb2MoKS0+Zmly
c3RDaGlsZCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aHRtbCgpKSkgeworICAgICAgICAgICAg
ICAgICAgICAvLyB3ZSBoYXZlIGFub3RoZXIgPEhUTUw+IGVsZW1lbnQuLi4uIGFwcGx5IGF0dHJp
YnV0ZXMgdG8gZXhpc3Rpbmcgb25lCisgICAgICAgICAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB3
ZSBkb24ndCBvdmVyd3JpdGUgYWxyZWFkeSBleGlzdGluZyBhdHRyaWJ1dGVzCisgICAgICAgICAg
ICAgICAgICAgIE5hbWVkQXR0ck1hcEltcGwgKm1hcCA9IHN0YXRpY19jYXN0PEVsZW1lbnRJbXBs
Kj4obiktPmF0dHJpYnV0ZXModHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgIE5hbWVkQXR0ck1h
cEltcGwgKmJtYXAgPSBzdGF0aWNfY2FzdDxFbGVtZW50SW1wbCo+KGRvYygpLT5maXJzdENoaWxk
KCkpLT5hdHRyaWJ1dGVzKGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBjaGFuZ2Vk
ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgbG9uZyBsID0gMDsg
bWFwICYmIGwgPCBtYXAtPmxlbmd0aCgpOyArK2wpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IEF0dHJpYnV0ZUltcGwqIGl0ID0gbWFwLT5hdHRyaWJ1dGVJdGVtKGwpOworICAgICAgICAgICAg
ICAgICAgICAgICAgY2hhbmdlZCA9ICFibWFwLT5nZXRBdHRyaWJ1dGVJdGVtKGl0LT5pZCgpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGJtYXAtPmluc2VydEF0dHJpYnV0ZShpdC0+Y2xvbmUo
ZmFsc2UpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAo
Y2hhbmdlZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvYygpLT5yZWNhbGNTdHlsZShOb2Rl
SW1wbDo6SW5oZXJpdCk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLQkgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSURfVElU
TEU6Ci0gICAgICAgIGNhc2UgSURfU1RZTEU6Ci0gICAgICAgICAgICBpZiAoICFoZWFkICkKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVz
Ojp0aXRsZSgpKSB8fCBoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpzdHlsZSgpKSkgeworICAg
ICAgICAgICAgaWYgKCFoZWFkKQogICAgICAgICAgICAgICAgIGNyZWF0ZUhlYWQoKTsKLSAgICAg
ICAgICAgIGlmICggaGVhZCApIHsKKyAgICAgICAgICAgIGlmIChoZWFkKSB7CiAgICAgICAgICAg
ICAgICAgRE9NOjpOb2RlSW1wbCAqbmV3Tm9kZSA9IGhlYWQtPmFkZENoaWxkKG4pOwotICAgICAg
ICAgICAgICAgIGlmICggbmV3Tm9kZSApIHsKLSAgICAgICAgICAgICAgICAgICAgcHVzaEJsb2Nr
KGlkLCB0YWdQcmlvcml0eShpZCkpOworICAgICAgICAgICAgICAgIGlmIChuZXdOb2RlKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHB1c2hCbG9jayhsb2NhbE5hbWUsIHRhZ1ByaW9yaXR5KTsKICAg
ICAgICAgICAgICAgICAgICAgc2V0Q3VycmVudChuZXdOb2RlKTsKLSNpZiBTUEVFRF9ERUJVRyA8
IDIKLQkJICAgIGlmKCFuLT5hdHRhY2hlZCgpICYmIEhUTUxXaWRnZXQpCisgICAgICAgICAgICAg
ICAgICAgIGlmICghbi0+YXR0YWNoZWQoKSAmJiBIVE1MV2lkZ2V0KQogICAgICAgICAgICAgICAg
ICAgICAgICAgbi0+YXR0YWNoKCk7Ci0jZW5kaWYKICAgICAgICAgICAgICAgICB9IGVsc2Ugewot
I2lmZGVmIFBBUlNFUl9ERUJVRwotICAgICAgICAgICAgICAgICAgICBrZERlYnVnKCA2MDM1ICkg
PDwgImFkZGluZyBzdHlsZSBiZWZvcmUgdG8gYm9keSBmYWlsZWQhISEhIiA8PCBlbmRsOwotI2Vu
ZGlmCi0gICAgICAgICAgICAgICAgICAgIGRpc2NhcmRfdW50aWwgPSBJRF9TVFlMRSArIElEX0NM
T1NFX1RBRzsKKyAgICAgICAgICAgICAgICAgICAgc2V0U2tpcE1vZGUoSFRNTE5hbWVzOjpzdHls
ZSgpKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0gZWxzZSBpZihp
bkJvZHkpIHsKLSAgICAgICAgICAgICAgICBkaXNjYXJkX3VudGlsID0gSURfU1RZTEUgKyBJRF9D
TE9TRV9UQUc7CisgICAgICAgICAgICAgICAgc2V0U2tpcE1vZGUoSFRNTE5hbWVzOjpzdHlsZSgp
KTsKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIC8vIFNDUklQVCBhbmQgT0JKRUNUIGFyZSBhbGxvd2Vk
IGluIHRoZSBib2R5LgotICAgICAgICBjYXNlIElEX0JPRFk6Ci0gICAgICAgICAgICBpZihpbkJv
ZHkgJiYgZG9jKCktPmJvZHkoKSkgeworICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFt
ZShIVE1MTmFtZXM6OmJvZHkoKSkpIHsKKyAgICAgICAgICAgIGlmIChpbkJvZHkgJiYgZG9jKCkt
PmJvZHkoKSkgewogICAgICAgICAgICAgICAgIC8vIHdlIGhhdmUgYW5vdGhlciA8Qk9EWT4gZWxl
bWVudC4uLi4gYXBwbHkgYXR0cmlidXRlcyB0byBleGlzdGluZyBvbmUKICAgICAgICAgICAgICAg
ICAvLyBtYWtlIHN1cmUgd2UgZG9uJ3Qgb3ZlcndyaXRlIGFscmVhZHkgZXhpc3RpbmcgYXR0cmli
dXRlcwogICAgICAgICAgICAgICAgIC8vIHNvbWUgc2l0ZXMgdXNlIDxib2R5IGJnY29sb3I9cmln
aHRjb2xvcj4uLi48Ym9keSBiZ2NvbG9yPXdyb25nY29sb3I+CkBAIC00NDksMzYwICszODMsMjU3
IEBAIGJvb2wgS0hUTUxQYXJzZXI6Omluc2VydE5vZGUoTm9kZUltcGwgKm4KICAgICAgICAgICAg
ICAgICAgICAgY2hhbmdlZCA9ICFibWFwLT5nZXRBdHRyaWJ1dGVJdGVtKGl0LT5pZCgpKTsKICAg
ICAgICAgICAgICAgICAgICAgYm1hcC0+aW5zZXJ0QXR0cmlidXRlKGl0LT5jbG9uZShmYWxzZSkp
OwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoIGNoYW5nZWQgKQotICAg
ICAgICAgICAgICAgICAgICBkb2MoKS0+cmVjYWxjU3R5bGUoIE5vZGVJbXBsOjpJbmhlcml0ICk7
Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKCBjdXJyZW50LT5pc0RvY3VtZW50Tm9kZSgpICkKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
ICAgIGJyZWFrOwotCi0gICAgICAgICAgICAvLyB0aGUgZm9sbG93aW5nIGlzIGEgaGFjayB0byBt
b3ZlIG5vbiByZW5kZXJlZCBlbGVtZW50cwotICAgICAgICAgICAgLy8gb3V0c2lkZSBvZiB0YWJs
ZXMuCi0gICAgICAgICAgICAvLyBuZWVkZWQgZm9yIGJyb2tlbiBjb25zdHJ1Y3RzIGxpa2UgPHRh
YmxlPjxmb3JtIC4uLj48dHI+Li4uLgotICAgICAgICBjYXNlIElEX0lOUFVUOgotICAgICAgICB7
Ci0gICAgICAgICAgICBFbGVtZW50SW1wbCAqZSA9IHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsICo+
KG4pOwotICAgICAgICAgICAgRE9NU3RyaW5nIHR5cGUgPSBlLT5nZXRBdHRyaWJ1dGUoQVRUUl9U
WVBFKTsKLQotICAgICAgICAgICAgaWYgKCBzdHJjYXNlY21wKCB0eXBlLCAiaGlkZGVuIiApID09
IDAgJiYgZm9ybSkgeworICAgICAgICAgICAgICAgIGlmIChjaGFuZ2VkKQorICAgICAgICAgICAg
ICAgICAgICBkb2MoKS0+cmVjYWxjU3R5bGUoTm9kZUltcGw6OkluaGVyaXQpOworICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYg
KCFjdXJyZW50LT5pc0RvY3VtZW50Tm9kZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfSBlbHNlIGlmIChoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjppbnB1dCgp
KSkgeworICAgICAgICAgICAgRE9NU3RyaW5nIHR5cGUgPSBoLT5nZXRBdHRyaWJ1dGUoQVRUUl9U
WVBFKTsKKyAgICAgICAgICAgIGlmIChzdHJjYXNlY21wKHR5cGUsICJoaWRkZW4iKSA9PSAwICYm
IGZvcm0pIHsKICAgICAgICAgICAgICAgICBmb3JtLT5hZGRDaGlsZChuKTsKLSNpZiBTUEVFRF9E
RUJVRyA8IDIKLSAgICAgICAgICAgICAgICBpZighbi0+YXR0YWNoZWQoKSAmJiBIVE1MV2lkZ2V0
KQorICAgICAgICAgICAgICAgIGlmICghbi0+YXR0YWNoZWQoKSAmJiBIVE1MV2lkZ2V0KQogICAg
ICAgICAgICAgICAgICAgICBuLT5hdHRhY2goKTsKLSNlbmRpZgogICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgY2FzZSBJRF9URVhUOgotICAgICAgICAgICAgLy8gaWdub3JlIHRleHQgaW5zaWRl
IHRoZSBmb2xsb3dpbmcgZWxlbWVudHMuCi0gICAgICAgICAgICBzd2l0Y2goY3VycmVudC0+aWQo
KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIGNhc2UgSURfU0VMRUNUOgotICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAg
ICAgOwotICAgICAgICAgICAgICAgIC8vIGZhbGwgdGhyb3VnaCEhCi0gICAgICAgICAgICB9Owot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSURfREQ6Ci0gICAgICAgIGNhc2UgSURf
RFQ6CisgICAgICAgIH0gZWxzZSBpZiAoaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6ZGQoKSkg
fHwgaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6ZHQoKSkpIHsKICAgICAgICAgICAgIGUgPSBu
ZXcgSFRNTERMaXN0RWxlbWVudEltcGwoZG9jdW1lbnQpOwotICAgICAgICAgICAgaWYgKCBpbnNl
cnROb2RlKGUpICkgeworICAgICAgICAgICAgaWYgKGluc2VydE5vZGUoZSkpIHsKICAgICAgICAg
ICAgICAgICBpbnNlcnROb2RlKG4pOwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSURfQVJFQToKLSAg
ICAgICAgewotICAgICAgICAgICAgaWYobWFwKQotICAgICAgICAgICAgeworICAgICAgICB9IGVs
c2UgaWYgKGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmFyZWEoKSkpIHsKKyAgICAgICAgICAg
IGlmIChtYXApIHsKICAgICAgICAgICAgICAgICBtYXAtPmFkZENoaWxkKG4pOwotI2lmIFNQRUVE
X0RFQlVHIDwgMgotICAgICAgICAgICAgICAgIGlmKCFuLT5hdHRhY2hlZCgpICYmIEhUTUxXaWRn
ZXQpCisgICAgICAgICAgICAgICAgaWYgKCFuLT5hdHRhY2hlZCgpICYmIEhUTUxXaWRnZXQpCiAg
ICAgICAgICAgICAgICAgICAgIG4tPmF0dGFjaCgpOwotI2VuZGlmCiAgICAgICAgICAgICAgICAg
aGFuZGxlZCA9IHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
IH0KLSAgICAgICAgY2FzZSBJRF9DQVBUSU9OOiB7Ci0gICAgICAgICAgICBzd2l0Y2ggKGN1cnJl
bnQtPmlkKCkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIElEX1RIRUFEOgotICAgICAgICAgICAg
ICAgIGNhc2UgSURfVEJPRFk6Ci0gICAgICAgICAgICAgICAgY2FzZSBJRF9URk9PVDoKLSAgICAg
ICAgICAgICAgICBjYXNlIElEX1RSOgotICAgICAgICAgICAgICAgIGNhc2UgSURfVEg6Ci0gICAg
ICAgICAgICAgICAgY2FzZSBJRF9URDogewotICAgICAgICAgICAgICAgICAgICBOb2RlSW1wbCog
dHNlY3Rpb24gPSBjdXJyZW50OwotICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudC0+aWQo
KSA9PSBJRF9UUikKLSAgICAgICAgICAgICAgICAgICAgICAgIHRzZWN0aW9uID0gY3VycmVudC0+
cGFyZW50KCk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGN1cnJlbnQtPmlkKCkgPT0g
SURfVEQgfHwgY3VycmVudC0+aWQoKSA9PSBJRF9USCkKLSAgICAgICAgICAgICAgICAgICAgICAg
IHRzZWN0aW9uID0gY3VycmVudC0+cGFyZW50KCktPnBhcmVudCgpOwotICAgICAgICAgICAgICAg
ICAgICBOb2RlSW1wbCogdGFibGUgPSB0c2VjdGlvbi0+cGFyZW50KCk7Ci0gICAgICAgICAgICAg
ICAgICAgIGludCBleGNlcHRpb25jb2RlID0gMDsKLSAgICAgICAgICAgICAgICAgICAgdGFibGUt
Pmluc2VydEJlZm9yZShuLCB0c2VjdGlvbiwgZXhjZXB0aW9uY29kZSk7Ci0gICAgICAgICAgICAg
ICAgICAgIHB1c2hCbG9jayhpZCwgdGFnUHJpb3JpdHkoaWQpKTsKLSAgICAgICAgICAgICAgICAg
ICAgc2V0Q3VycmVudChuKTsKLSAgICAgICAgICAgICAgICAgICAgaW5TdHJheVRhYmxlQ29udGVu
dCsrOwotICAgICAgICAgICAgICAgICAgICBibG9ja1N0YWNrLT5zdHJheVRhYmxlQ29udGVudCA9
IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfSBlbHNlIGlmIChoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpjYXB0aW9uKCkp
KSB7CisgICAgICAgICAgICBpZiAoaXNUYWJsZVBhcnQoY3VycmVudCkpIHsKKyAgICAgICAgICAg
ICAgICBOb2RlSW1wbCogdHNlY3Rpb24gPSBjdXJyZW50OworICAgICAgICAgICAgICAgIGlmIChj
dXJyZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dHIoKSkpCisgICAgICAgICAgICAgICAgICAg
IHRzZWN0aW9uID0gY3VycmVudC0+cGFyZW50KCk7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAo
Y3VycmVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRkKCkpIHx8IGN1cnJlbnQtPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjp0aCgpKSkKKyAgICAgICAgICAgICAgICAgICAgdHNlY3Rpb24gPSBjdXJy
ZW50LT5wYXJlbnQoKS0+cGFyZW50KCk7CisgICAgICAgICAgICAgICAgTm9kZUltcGwqIHRhYmxl
ID0gdHNlY3Rpb24tPnBhcmVudCgpOworICAgICAgICAgICAgICAgIGludCBleGNlcHRpb25jb2Rl
ID0gMDsKKyAgICAgICAgICAgICAgICB0YWJsZS0+aW5zZXJ0QmVmb3JlKG4sIHRzZWN0aW9uLCBl
eGNlcHRpb25jb2RlKTsKKyAgICAgICAgICAgICAgICBwdXNoQmxvY2sobG9jYWxOYW1lLCB0YWdQ
cmlvcml0eSk7CisgICAgICAgICAgICAgICAgc2V0Q3VycmVudChuKTsKKyAgICAgICAgICAgICAg
ICBpblN0cmF5VGFibGVDb250ZW50Kys7CisgICAgICAgICAgICAgICAgYmxvY2tTdGFjay0+c3Ry
YXlUYWJsZUNvbnRlbnQgPSB0cnVlOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBJ
RF9USEVBRDoKLSAgICAgICAgY2FzZSBJRF9UQk9EWToKLSAgICAgICAgY2FzZSBJRF9URk9PVDoK
LSAgICAgICAgY2FzZSBJRF9DT0xHUk9VUDogewotICAgICAgICAgICAgaWYgKGlzVGFibGVSZWxh
dGVkVGFnKGN1cnJlbnQtPmlkKCkpKSB7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKGJsb2NrU3Rh
Y2sgJiYgY3VycmVudC0+aWQoKSAhPSBJRF9UQUJMRSAmJiBpc1RhYmxlUmVsYXRlZFRhZyhjdXJy
ZW50LT5pZCgpKSkKKyAgICAgICAgfSBlbHNlIGlmIChoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVz
Ojp0aGVhZCgpKSB8fCBoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0Ym9keSgpKSB8fAorICAg
ICAgICAgICAgICAgICAgIGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnRmb290KCkpIHx8IGgt
Pmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmNvbGdyb3VwKCkpKSB7CisgICAgICAgICAgICBpZiAo
aXNUYWJsZVJlbGF0ZWQoY3VycmVudCkpIHsKKyAgICAgICAgICAgICAgICB3aGlsZSAoYmxvY2tT
dGFjayAmJiBpc1RhYmxlUGFydChjdXJyZW50KSkKICAgICAgICAgICAgICAgICAgICAgcG9wT25l
QmxvY2soKTsKICAgICAgICAgICAgICAgICByZXR1cm4gaW5zZXJ0Tm9kZShuKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLQotICAgICAgICAvLyBzd2l0Y2ggb24gdGhlIGN1cnJlbnRseSBhY3RpdmUgZWxl
bWVudAotICAgICAgICBzd2l0Y2goY3VycmVudC0+aWQoKSkKLSAgICAgICAgewotICAgICAgICBj
YXNlIElEX0hUTUw6Ci0gICAgICAgICAgICBzd2l0Y2goaWQpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICBjYXNlIElEX1NDUklQVDoKLSAgICAgICAgICAgIGNhc2UgSURfU1RZTEU6Ci0gICAg
ICAgICAgICBjYXNlIElEX01FVEE6Ci0gICAgICAgICAgICBjYXNlIElEX0xJTks6Ci0gICAgICAg
ICAgICBjYXNlIElEX09CSkVDVDoKLSAgICAgICAgICAgIGNhc2UgSURfRU1CRUQ6Ci0gICAgICAg
ICAgICBjYXNlIElEX1RJVExFOgotICAgICAgICAgICAgY2FzZSBJRF9JU0lOREVYOgotICAgICAg
ICAgICAgY2FzZSBJRF9CQVNFOgotICAgICAgICAgICAgICAgIGlmKCFoZWFkKSB7CisgICAgfQor
ICAgIAorICAgIC8vIDIuIE5leHQgd2UgZXhhbWluZSBvdXIgY3VycmVudGx5IGFjdGl2ZSBlbGVt
ZW50IHRvIGRvIHNvbWUgZnVydGhlciBlcnJvciBoYW5kbGluZy4KKyAgICBpZiAoY3VycmVudC0+
aXNIVE1MRWxlbWVudCgpKSB7CisgICAgICAgIEhUTUxFbGVtZW50SW1wbCogaCA9IHN0YXRpY19j
YXN0PEhUTUxFbGVtZW50SW1wbCo+KGN1cnJlbnQpOworICAgICAgICBjb25zdCBBdG9taWNTdHJp
bmcmIGN1cnJlbnRUYWdOYW1lID0gY3VycmVudC0+bG9jYWxOYW1lKCk7CisgICAgICAgIGlmICho
LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpodG1sKCkpKSB7CisgICAgICAgICAgICBIVE1MRWxl
bWVudEltcGwqIGVsdCA9IG4tPmlzSFRNTEVsZW1lbnQoKSA/IHN0YXRpY19jYXN0PEhUTUxFbGVt
ZW50SW1wbCo+KG4pIDogMDsKKyAgICAgICAgICAgIGlmIChlbHQgJiYgZWx0LT5oYXNMb2NhbE5h
bWUoSFRNTE5hbWVzOjpzY3JpcHQoKSkgfHwgZWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpz
dHlsZSgpKSB8fAorICAgICAgICAgICAgICAgIGVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6
bWV0YSgpKSB8fCBlbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmxpbmsoKSkgfHwKKyAgICAg
ICAgICAgICAgICBlbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9iamVjdCgpKSB8fCBlbHQt
Pmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmVtYmVkKCkpIHx8CisgICAgICAgICAgICAgICAgZWx0
LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0aXRsZSgpKSB8fCBlbHQtPmhhc0xvY2FsTmFtZShI
VE1MTmFtZXM6OmlzaW5kZXgoKSkgfHwKKyAgICAgICAgICAgICAgICBlbHQtPmhhc0xvY2FsTmFt
ZShIVE1MTmFtZXM6OmJhc2UoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWhlYWQpIHsKICAg
ICAgICAgICAgICAgICAgICAgaGVhZCA9IG5ldyBIVE1MSGVhZEVsZW1lbnRJbXBsKGRvY3VtZW50
KTsKICAgICAgICAgICAgICAgICAgICAgZSA9IGhlYWQ7CiAgICAgICAgICAgICAgICAgICAgIGlu
c2VydE5vZGUoZSk7CiAgICAgICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwogICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgSURf
VEVYVDogewotICAgICAgICAgICAgICAgIFRleHRJbXBsICp0ID0gc3RhdGljX2Nhc3Q8VGV4dElt
cGwgKj4obik7Ci0gICAgICAgICAgICAgICAgaWYgKHQtPmNvbnRhaW5zT25seVdoaXRlc3BhY2Uo
KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIC8q
IEZhbGwgdGhyb3VnaCB0byBkZWZhdWx0ICovCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgICAgIGlmICggaGF2ZUZyYW1lU2V0ICkgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgZSA9IG5ldyBIVE1MQm9keUVsZW1lbnRJbXBsKGRvY3VtZW50KTsKLSAgICAg
ICAgICAgICAgICBzdGFydEJvZHkoKTsKLSAgICAgICAgICAgICAgICBpbnNlcnROb2RlKGUpOwot
ICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAobi0+aXNUZXh0Tm9kZSgp
KSB7CisgICAgICAgICAgICAgICAgICAgIFRleHRJbXBsICp0ID0gc3RhdGljX2Nhc3Q8VGV4dElt
cGwgKj4obik7CisgICAgICAgICAgICAgICAgICAgIGlmICh0LT5jb250YWluc09ubHlXaGl0ZXNw
YWNlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICAgICAgICAgIGlmICghaGF2ZUZyYW1lU2V0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBl
ID0gbmV3IEhUTUxCb2R5RWxlbWVudEltcGwoZG9jdW1lbnQpOworICAgICAgICAgICAgICAgICAg
ICAgICAgc3RhcnRCb2R5KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnROb2RlKGUp
OworICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBJRF9IRUFEOgotICAgICAgICAgICAgLy8gd2UgY2FuIGdldCBo
ZXJlIG9ubHkgaWYgdGhlIGVsZW1lbnQgaXMgbm90IGFsbG93ZWQgaW4gaGVhZC4KLSAgICAgICAg
ICAgIGlmIChpZCA9PSBJRF9IVE1MKQorICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFt
ZShIVE1MTmFtZXM6OmhlYWQoKSkpIHsKKyAgICAgICAgICAgIGlmIChuLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6aHRtbCgpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
ICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHRoZSBib2R5IHN0YXJ0
cyBoZXJlLi4uCi0gICAgICAgICAgICAgICAgaWYgKCBoYXZlRnJhbWVTZXQgKSBicmVhazsKLSAg
ICAgICAgICAgICAgICBwb3BCbG9jayhJRF9IRUFEKTsKLSAgICAgICAgICAgICAgICBlID0gbmV3
IEhUTUxCb2R5RWxlbWVudEltcGwoZG9jdW1lbnQpOwotICAgICAgICAgICAgICAgIHN0YXJ0Qm9k
eSgpOwotICAgICAgICAgICAgICAgIGluc2VydE5vZGUoZSk7Ci0gICAgICAgICAgICAgICAgaGFu
ZGxlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgaWYgKCFoYXZlRnJhbWVTZXQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgcG9wQmxvY2soY3VycmVudFRhZ05hbWUpOworICAgICAgICAgICAgICAg
ICAgICBlID0gbmV3IEhUTUxCb2R5RWxlbWVudEltcGwoZG9jdW1lbnQpOworICAgICAgICAgICAg
ICAgICAgICBzdGFydEJvZHkoKTsKKyAgICAgICAgICAgICAgICAgICAgaW5zZXJ0Tm9kZShlKTsK
KyAgICAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSURfQk9EWToK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElEX0NBUFRJT046CisgICAgICAgIH0g
ZWxzZSBpZiAoaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6Y2FwdGlvbigpKSkgewogICAgICAg
ICAgICAgLy8gSWxsZWdhbCBjb250ZW50IGluIGEgY2FwdGlvbi4gQ2xvc2UgdGhlIGNhcHRpb24g
YW5kIHRyeSBhZ2Fpbi4KLSAgICAgICAgICAgIHBvcEJsb2NrKElEX0NBUFRJT04pOwotICAgICAg
ICAgICAgc3dpdGNoKCBpZCApIHsKLSAgICAgICAgICAgIGNhc2UgSURfVEhFQUQ6Ci0gICAgICAg
ICAgICBjYXNlIElEX1RGT09UOgotICAgICAgICAgICAgY2FzZSBJRF9UQk9EWToKLSAgICAgICAg
ICAgIGNhc2UgSURfVFI6Ci0gICAgICAgICAgICBjYXNlIElEX1REOgotICAgICAgICAgICAgY2Fz
ZSBJRF9USDoKKyAgICAgICAgICAgIHBvcEJsb2NrKGN1cnJlbnRUYWdOYW1lKTsKKyAgICAgICAg
ICAgIGlmIChpc1RhYmxlUGFydChuKSkKICAgICAgICAgICAgICAgICByZXR1cm4gaW5zZXJ0Tm9k
ZShuLCBmbGF0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIElEX1RBQkxFOgotICAgICAgICBjYXNlIElEX1RIRUFEOgotICAgICAgICBjYXNlIElEX1RG
T09UOgotICAgICAgICBjYXNlIElEX1RCT0RZOgotICAgICAgICBjYXNlIElEX1RSOgotICAgICAg
ICAgICAgc3dpdGNoKGlkKQotICAgICAgICAgICAgewotICAgICAgICAgICAgY2FzZSBJRF9UQUJM
RToKLSAgICAgICAgICAgICAgICBwb3BCbG9jayhJRF9UQUJMRSk7IC8vIGVuZCB0aGUgdGFibGUK
KyAgICAgICAgfSBlbHNlIGlmIChoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0YWJsZSgpKSB8
fCBoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0cigpKSB8fCBpc1RhYmxlU2VjdGlvbihoKSkg
eworICAgICAgICAgICAgaWYgKG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0YWJsZSgpKSkgewor
ICAgICAgICAgICAgICAgIHBvcEJsb2NrKGxvY2FsTmFtZSk7IC8vIGVuZCB0aGUgdGFibGUKICAg
ICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsgICAgICAvLyAuLi5hbmQgc3RhcnQgYSBuZXcg
b25lCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0JICAgIGNhc2UgSURfVEVYVDoKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBUZXh0SW1wbCAqdCA9IHN0YXRpY19jYXN0PFRleHRJbXBs
ICo+KG4pOwotICAgICAgICAgICAgICAgIGlmICh0LT5jb250YWluc09ubHlXaGl0ZXNwYWNlKCkp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICBET01T
dHJpbmdJbXBsICppID0gdC0+c3RyaW5nKCk7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgaW50
IHBvcyA9IDA7Ci0gICAgICAgICAgICAgICAgd2hpbGUocG9zIDwgaS0+bCAmJiAoICooaS0+cytw
b3MpID09IFFDaGFyKCcgJykgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKihpLT5zK3BvcykgPT0gUUNoYXIoMHhhMCkpKSBwb3MrKzsKLSAgICAgICAgICAgICAgICBp
Zihwb3MgPT0gaS0+bCkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIE5v
ZGVJbXBsICpub2RlID0gY3VycmVudDsKLSAgICAgICAgICAgICAgICBOb2RlSW1wbCAqcGFyZW50
ID0gbm9kZS0+cGFyZW50Tm9kZSgpOwotCi0gICAgICAgICAgICAgICAgTm9kZUltcGwgKnBhcmVu
dHBhcmVudCA9IHBhcmVudC0+cGFyZW50Tm9kZSgpOwotCi0gICAgICAgICAgICAgICAgaWYgKG4t
PmlzVGV4dE5vZGUoKSB8fAotICAgICAgICAgICAgICAgICAgICAoIG5vZGUtPmlkKCkgPT0gSURf
VFIgJiYKLSAgICAgICAgICAgICAgICAgICAgICggcGFyZW50LT5pZCgpID09IElEX1RIRUFEIHx8
Ci0gICAgICAgICAgICAgICAgICAgICAgcGFyZW50LT5pZCgpID09IElEX1RCT0RZIHx8Ci0gICAg
ICAgICAgICAgICAgICAgICAgcGFyZW50LT5pZCgpID09IElEX1RGT09UICkgJiYgcGFyZW50cGFy
ZW50LT5pZCgpID09IElEX1RBQkxFICkgfHwKLSAgICAgICAgICAgICAgICAgICAgKCAhY2hlY2tD
aGlsZChJRF9UUiwgaWQsICFkb2MoKS0+aW5Db21wYXRNb2RlKCkpICYmICggbm9kZS0+aWQoKSA9
PSBJRF9USEVBRCB8fCBub2RlLT5pZCgpID09IElEX1RCT0RZIHx8IG5vZGUtPmlkKCkgPT0gSURf
VEZPT1QgKSAmJgotICAgICAgICAgICAgICAgICAgICAgcGFyZW50LT5pZCgpID09IElEX1RBQkxF
ICkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBub2RlID0gKG5vZGUt
PmlkKCkgPT0gSURfVEFCTEUpID8gbm9kZSA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
KChub2RlLT5pZCgpID09IElEX1RSKSA/IHBhcmVudHBhcmVudCA6IHBhcmVudCk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBib29sIHBvc3NpYmx5
TW92ZVN0cmF5Q29udGVudCA9IHRydWU7CisgICAgICAgICAgICAgICAgaW50IGV4Y2VwdGlvbkNv
ZGUgPSAwOworICAgICAgICAgICAgICAgIGlmIChuLT5pc1RleHROb2RlKCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgVGV4dEltcGwgKnQgPSBzdGF0aWNfY2FzdDxUZXh0SW1wbCAqPihuKTsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHQtPmNvbnRhaW5zT25seVdoaXRlc3BhY2UoKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgRE9N
U3RyaW5nSW1wbCAqaSA9IHQtPnN0cmluZygpOworICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBpbnQgcG9zID0gMDsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHBvcyA8IGktPmwgJiYg
KCooaS0+cytwb3MpID09IFFDaGFyKCcgJykgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICooaS0+cytwb3MpID09IFFDaGFyKDB4YTApKSkgcG9zKys7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChwb3MgPT0gaS0+bCkKKyAgICAgICAgICAgICAgICAgICAgICAg
IHBvc3NpYmx5TW92ZVN0cmF5Q29udGVudCA9IGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBpZiAocG9zc2libHlNb3ZlU3RyYXlDb250ZW50KSB7CisgICAgICAgICAg
ICAgICAgICAgIE5vZGVJbXBsICpub2RlID0gY3VycmVudDsKICAgICAgICAgICAgICAgICAgICAg
Tm9kZUltcGwgKnBhcmVudCA9IG5vZGUtPnBhcmVudE5vZGUoKTsKLSAgICAgICAgICAgICAgICAg
ICAgaW50IGV4Y2VwdGlvbmNvZGUgPSAwOwotICAgICAgICAgICAgICAgICAgICBwYXJlbnQtPmlu
c2VydEJlZm9yZSggbiwgbm9kZSwgZXhjZXB0aW9uY29kZSApOwotICAgICAgICAgICAgICAgICAg
ICBpZiAoIGV4Y2VwdGlvbmNvZGUgKSB7Ci0jaWZkZWYgUEFSU0VSX0RFQlVHCi0gICAgICAgICAg
ICAgICAgICAgICAgICBrZERlYnVnKCA2MDM1ICkgPDwgImFkZGluZyBjb250ZW50IGJlZm9yZSB0
YWJsZSBmYWlsZWQhIiA8PCBlbmRsOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgTm9kZUltcGwgKmdyYW5kcGFyZW50ID0gcGFyZW50
LT5wYXJlbnROb2RlKCk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKG4tPmlzVGV4dE5vZGUo
KSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgKGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6
OnRyKCkpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgaXNUYWJsZVNlY3Rpb24ocGFyZW50
KSAmJiBncmFuZHBhcmVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRhYmxlKCkpKSB8fAorICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBEVEQgQ0hFQ0sgd2l0aCBubyBlbGVtZW50
IQorICAgICAgICAgICAgICAgICAgICAgICAgKCAvKiFjaGVja0NoaWxkKElEX1RSLCBpZCwgIWRv
YygpLT5pbkNvbXBhdE1vZGUoKSkgJiYqLyBpc1RhYmxlU2VjdGlvbihub2RlKSAmJgorICAgICAg
ICAgICAgICAgICAgICAgICAgIHBhcmVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRhYmxlKCkp
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSA9IChub2RlLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6dGFibGUoKSkpID8gbm9kZSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICgobm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRyKCkpKSA/IGdyYW5kcGFyZW50IDog
cGFyZW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIE5vZGVJbXBsICpwYXJlbnQgPSBub2Rl
LT5wYXJlbnROb2RlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQtPmluc2VydEJl
Zm9yZShuLCBub2RlLCBleGNlcHRpb25Db2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICghZXhjZXB0aW9uQ29kZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuLT5p
c0hUTUxFbGVtZW50KCkgJiYgdGFnUHJpb3JpdHkgPiAwICYmIAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAhZmxhdCAmJiBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwqPihuKS0+
ZW5kVGFnUmVxdWlyZW1lbnQoKSAhPSBET006OkZPUkJJRERFTikKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2hCbG9jayhs
b2NhbE5hbWUsIHRhZ1ByaW9yaXR5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2V0Q3VycmVudChuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5TdHJheVRh
YmxlQ29udGVudCsrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9ja1N0YWNr
LT5zdHJheVRhYmxlQ29udGVudCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChuLT5pc0VsZW1lbnROb2RlKCkgJiYgdGFnUHJpb3JpdHkoaWQpICE9IDAgJiYgCi0gICAg
ICAgICAgICAgICAgICAgICAgICAhZmxhdCAmJiBlbmRUYWdSZXF1aXJlbWVudChpZCkgIT0gRE9N
OjpGT1JCSURERU4pCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHB1c2hCbG9jayhpZCwgdGFnUHJpb3JpdHkoaWQpKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHNldEN1cnJlbnQobik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpblN0cmF5VGFibGVD
b250ZW50Kys7Ci0gICAgICAgICAgICAgICAgICAgICAgICBibG9ja1N0YWNrLT5zdHJheVRhYmxl
Q29udGVudCA9IHRydWU7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFleGNlcHRpb25Db2Rl
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudC0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OnRyKCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUgPSBuZXcgSFRNTFRh
YmxlQ2VsbEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6dGQoKSwgZG9jdW1lbnQpOworICAgICAgICAg
ICAgICAgICAgICAgICAgZWxzZSBpZiAoY3VycmVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRh
YmxlKCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUgPSBuZXcgSFRNTFRhYmxlU2Vj
dGlvbkVsZW1lbnRJbXBsKEhUTUxOYW1lczo6dGJvZHkoKSwgZG9jdW1lbnQsIHRydWUpOyAvLyBp
bXBsaWNpdCAKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBlID0gbmV3IEhUTUxUYWJsZVJvd0VsZW1lbnRJbXBsKGRvY3VtZW50KTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0Tm9k
ZShlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwogICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICggY3VycmVudC0+aWQoKSA9PSBJRF9UUiAp
Ci0gICAgICAgICAgICAgICAgICAgIGUgPSBuZXcgSFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsKGRv
Y3VtZW50LCBJRF9URCk7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoIGN1cnJlbnQtPmlkKCkg
PT0gSURfVEFCTEUgKQotICAgICAgICAgICAgICAgICAgICBlID0gbmV3IEhUTUxUYWJsZVNlY3Rp
b25FbGVtZW50SW1wbCggZG9jdW1lbnQsIElEX1RCT0RZLCB0cnVlIC8qIGltcGxpY2l0ICovICk7
Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBlID0gbmV3IEhUTUxU
YWJsZVJvd0VsZW1lbnRJbXBsKCBkb2N1bWVudCApOwotICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgIGluc2VydE5vZGUoZSk7Ci0gICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9IC8vIGVuZCBkZWZhdWx0Ci0g
ICAgICAgICAgICB9IC8vIGVuZCBzd2l0Y2gKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIElEX09CSkVDVDoKLSAgICAgICAgICAgIGRpc2NhcmRfdW50aWwgPSBJRF9PQkpFQ1QgKyBJ
RF9DTE9TRV9UQUc7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAo
aC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b2JqZWN0KCkpKSB7CisgICAgICAgICAgICBzZXRT
a2lwTW9kZShIVE1MTmFtZXM6Om9iamVjdCgpKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgY2FzZSBJRF9VTDoKLSAgICAgICAgY2FzZSBJRF9PTDoKLSAgICAgICAgY2FzZSBJ
RF9ESVI6Ci0gICAgICAgIGNhc2UgSURfTUVOVToKKyAgICAgICAgfSBlbHNlIGlmIChoLT5oYXNM
b2NhbE5hbWUoSFRNTE5hbWVzOjp1bCgpKSB8fCBoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpv
bCgpKSB8fAorICAgICAgICAgICAgICAgICBoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpkaXIo
KSkgfHwgaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6bWVudSgpKSkgewogICAgICAgICAgICAg
ZSA9IG5ldyBIVE1MRGl2RWxlbWVudEltcGwoZG9jdW1lbnQpOwogICAgICAgICAgICAgaW5zZXJ0
Tm9kZShlKTsKICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBjYXNlIElEX0RMOgotICAgICAgICAgICAgICAgIHBvcEJsb2NrKElEX0RM
KTsKLSAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIGNhc2UgSURfRFQ6Ci0gICAgICAgICAgICAgICAgcG9wQmxvY2soSURf
RFQpOwotICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIElEX1NFTEVDVDoKLSAgICAgICAgICAgIGlmKCBuLT5pc0lubGlu
ZSgpICkKKyAgICAgICAgfSBlbHNlIGlmIChoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpkbCgp
KSB8fCBoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpkdCgpKSkgeworICAgICAgICAgICAgcG9w
QmxvY2soY3VycmVudFRhZ05hbWUpOworICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7CisgICAg
ICAgIH0gZWxzZSBpZiAoaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6c2VsZWN0KCkpKSB7Cisg
ICAgICAgICAgICBpZiAoaXNJbmxpbmUobikpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSURfUDoKLSAgICAgICAgY2FzZSBJ
RF9IMToKLSAgICAgICAgY2FzZSBJRF9IMjoKLSAgICAgICAgY2FzZSBJRF9IMzoKLSAgICAgICAg
Y2FzZSBJRF9INDoKLSAgICAgICAgY2FzZSBJRF9INToKLSAgICAgICAgY2FzZSBJRF9INjoKLSAg
ICAgICAgICAgIGlmKCFuLT5pc0lubGluZSgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIHBvcEJsb2NrKGN1cnJlbnQtPmlkKCkpOworICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xv
Y2FsTmFtZShIVE1MTmFtZXM6OnAoKSkgfHwgaXNIZWFkZXJUYWcoY3VycmVudFRhZ05hbWUpKSB7
CisgICAgICAgICAgICBpZiAoaXNJbmxpbmUobikpIHsKKyAgICAgICAgICAgICAgICBwb3BCbG9j
ayhjdXJyZW50VGFnTmFtZSk7CiAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7CiAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJRF9PUFRJT046Ci0g
ICAgICAgIGNhc2UgSURfT1BUR1JPVVA6Ci0gICAgICAgICAgICBpZiAoaWQgPT0gSURfT1BUR1JP
VVApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcG9wQmxvY2soY3VycmVudC0+aWQo
KSk7CisgICAgICAgIH0gZWxzZSBpZiAoaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b3B0aW9u
KCkpIHx8IGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9wdGdyb3VwKCkpKSB7CisgICAgICAg
ICAgICBpZiAobG9jYWxOYW1lID09IEhUTUxOYW1lczo6b3B0Z3JvdXAoKSkgeworICAgICAgICAg
ICAgICAgIHBvcEJsb2NrKGN1cnJlbnRUYWdOYW1lKTsKICAgICAgICAgICAgICAgICBoYW5kbGVk
ID0gdHJ1ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYoaWQgPT0gSURfU0VM
RUNUKQotICAgICAgICAgICAgeworICAgICAgICAgICAgZWxzZSBpZiAobG9jYWxOYW1lID09IEhU
TUxOYW1lczo6c2VsZWN0KCkpIHsKICAgICAgICAgICAgICAgICAvLyBJRSB0cmVhdHMgYSBuZXN0
ZWQgc2VsZWN0IGFzIDwvc2VsZWN0Pi4gTGV0J3MgZG8gdGhlIHNhbWUKLSAgICAgICAgICAgICAg
ICBwb3BCbG9jayggSURfU0VMRUNUICk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgcG9wQmxvY2sobG9jYWxOYW1lKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgLy8gaGVhZCBlbGVtZW50cyBpbiB0aGUgYm9keSBzaG91bGQg
YmUgaWdub3JlZC4KLSAgICAgICAgY2FzZSBJRF9BRERSRVNTOgotICAgICAgICAgICAgcG9wQmxv
Y2soSURfQUREUkVTUyk7CisgICAgICAgIH0gZWxzZSBpZiAoaC0+aGFzTG9jYWxOYW1lKEhUTUxO
YW1lczo6YWRkcmVzcygpKSkgeworICAgICAgICAgICAgcG9wQmxvY2soY3VycmVudFRhZ05hbWUp
OwogICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBJRF9DT0xHUk9VUDoKLSAgICAgICAgICAgIGlmIChpZCAhPSBJRF9URVhUKSB7Ci0g
ICAgICAgICAgICAgICAgcG9wQmxvY2soSURfQ09MR1JPVVApOworICAgICAgICB9IGVsc2UgaWYg
KGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmNvbGdyb3VwKCkpKSB7CisgICAgICAgICAgICBp
ZiAobG9jYWxOYW1lICE9IHRleHRBdG9tKSB7CisgICAgICAgICAgICAgICAgcG9wQmxvY2soY3Vy
cmVudFRhZ05hbWUpOwogICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwogICAgICAgICAg
ICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSURfRk9OVDoKLSAgICAgICAg
ICAgIHBvcEJsb2NrKElEX0ZPTlQpOworICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFt
ZShIVE1MTmFtZXM6OmZvbnQoKSkpIHsKKyAgICAgICAgICAgIHBvcEJsb2NrKGN1cnJlbnRUYWdO
YW1lKTsKICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBpZihjdXJyZW50LT5pc0RvY3VtZW50Tm9kZSgp
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmKGN1cnJlbnQtPmZpcnN0Q2hpbGQo
KSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGUgPSBuZXcgSFRNTEh0bWxFbGVtZW50SW1w
bChkb2N1bWVudCk7Ci0gICAgICAgICAgICAgICAgICAgIGluc2VydE5vZGUoZSk7Ci0gICAgICAg
ICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYoY3VycmVudC0+aXNJbmxpbmUoKSkKLSAgICAgICAg
ICAgIHsKKyAgICAgICAgfSBlbHNlIGlmICghaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6Ym9k
eSgpKSkgeworICAgICAgICAgICAgaWYgKGlzSW5saW5lKGN1cnJlbnQpKSB7CiAgICAgICAgICAg
ICAgICAgcG9wSW5saW5lQmxvY2tzKCk7CiAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLQotICAgICAgICAvLyBpZiB3ZSBjb3VsZG4ndCBo
YW5kbGUgdGhlIGVycm9yLCBqdXN0IHJldGhyb3cgdGhlIGV4Y2VwdGlvbi4uLgotICAgICAgICBp
ZighaGFuZGxlZCkKLSAgICAgICAgewotICAgICAgICAgICAgLy9rZERlYnVnKCA2MDM1ICkgPDwg
IkV4Y2VwdGlvbiBoYW5kbGVyIGZhaWxlZCBpbiBIVE1MUEFyc2VyOjppbnNlcnROb2RlKCkiIDw8
IGVuZGw7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGVsc2UgaWYgKGN1
cnJlbnQtPmlzRG9jdW1lbnROb2RlKCkpIHsKKyAgICAgICAgaWYgKGN1cnJlbnQtPmZpcnN0Q2hp
bGQoKSA9PSAwKSB7CisgICAgICAgICAgICBlID0gbmV3IEhUTUxIdG1sRWxlbWVudEltcGwoZG9j
dW1lbnQpOworICAgICAgICAgICAgaW5zZXJ0Tm9kZShlKTsKKyAgICAgICAgICAgIGhhbmRsZWQg
PSB0cnVlOwogICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGluc2VydE5vZGUobik7CiAgICAg
fQorCisgICAgLy8gMy4gSWYgd2UgY291bGRuJ3QgaGFuZGxlIHRoZSBlcnJvciwganVzdCByZXR1
cm4gZmFsc2UgYW5kIGF0dGVtcHQgdG8gZXJyb3ItY29ycmVjdCBhZ2Fpbi4KKyAgICBpZiAoIWhh
bmRsZWQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gaW5zZXJ0Tm9kZShuKTsK
IH0KIAogTm9kZUltcGwgKktIVE1MUGFyc2VyOjpnZXRFbGVtZW50KFRva2VuKiB0KQogewotICAg
IHN3aXRjaCAodC0+aWQpCi0gICAgewotICAgIGNhc2UgSURfSEVBRDoKLSAgICAgICAgaWYgKCFo
ZWFkICYmIGN1cnJlbnQtPmlkKCkgPT0gSURfSFRNTCkgeworICAgIGlmICh0LT50YWdOYW1lID09
IEhUTUxOYW1lczo6aGVhZCgpKSB7CisgICAgICAgIGlmICghaGVhZCAmJiBjdXJyZW50LT5sb2Nh
bE5hbWUoKSA9PSBIVE1MTmFtZXM6Omh0bWwoKSkgewogICAgICAgICAgICAgaGVhZCA9IG5ldyBI
VE1MSGVhZEVsZW1lbnRJbXBsKGRvY3VtZW50KTsKICAgICAgICAgICAgIHJldHVybiBoZWFkOwog
ICAgICAgICB9CiAgICAgICAgIHJldHVybiAwOworICAgIH0KKworLyoKKyAgICBzd2l0Y2ggKHQt
PmlkKQorICAgIHsKICAgICBjYXNlIElEX0JPRFk6CiAgICAgICAgIC8vIGJvZHkgbm8gbG9uZ2Vy
IGFsbG93ZWQgaWYgd2UgaGF2ZSBhIGZyYW1lc2V0CiAgICAgICAgIGlmIChoYXZlRnJhbWVTZXQp
CiAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgcG9wQmxvY2soSURfSEVBRCk7CisgICAg
ICAgIHBvcEJsb2NrKEhUTUxOYW1lczo6aGVhZCgpKTsKICAgICAgICAgc3RhcnRCb2R5KCk7CiAg
ICAgICAgIHJldHVybiBuZXcgSFRNTEJvZHlFbGVtZW50SW1wbChkb2N1bWVudCk7CiAKIC8vIGZy
YW1lcwogICAgIGNhc2UgSURfRlJBTUVTRVQ6Ci0gICAgICAgIHBvcEJsb2NrKElEX0hFQUQpOwor
ICAgICAgICBwb3BCbG9jayhIVE1MTmFtZXM6OmhlYWQoKSk7CiAgICAgICAgIGlmIChpbkJvZHkg
JiYgIWhhdmVGcmFtZVNldCAmJiAhaGF2ZUNvbnRlbnQpIHsKLSAgICAgICAgICAgIHBvcEJsb2Nr
KElEX0JPRFkpOworICAgICAgICAgICAgcG9wQmxvY2soSFRNTE5hbWVzOjpib2R5KCkpOwogICAg
ICAgICAgICAgLy8gIyMjIGFjdHVhbGx5IGZvciBJRSBkb2N1bWVudC5ib2R5IHJldHVybnMgdGhl
IG5vdyBoaWRkZW4gImJvZHkiIGVsZW1lbnQKICAgICAgICAgICAgIC8vIHdlIGNhbid0IGltcGxl
bWVudCB0aGF0IGJlaGF2aW91ciBub3cgYmVjYXVzZSBpdCBjb3VsZCBjYXVzZSB0b28gbWFueQog
ICAgICAgICAgICAgLy8gcmVncmVzc2lvbnMgYW5kIHRoZSBoZWFkYWNoZXMgYXJlIG5vdCB3b3J0
aCB0aGUgd29yayBhcyBsb25nIGFzIHRoZXJlIGlzCkBAIC04MTEsNyArNjQyLDcgQEAgTm9kZUlt
cGwgKktIVE1MUGFyc2VyOjpnZXRFbGVtZW50KFRva2VuKgogICAgICAgICAgICAgICAgIGRvYygp
LT5ib2R5KCktPnNldEF0dHJpYnV0ZShBVFRSX1NUWUxFLCAiZGlzcGxheTpub25lIik7CiAgICAg
ICAgICAgICBpbkJvZHkgPSBmYWxzZTsKICAgICAgICAgfQotICAgICAgICBpZiAoKGhhdmVDb250
ZW50IHx8IGhhdmVGcmFtZVNldCkgJiYgY3VycmVudC0+aWQoKSA9PSBJRF9IVE1MKQorICAgICAg
ICBpZiAoKGhhdmVDb250ZW50IHx8IGhhdmVGcmFtZVNldCkgJiYgY3VycmVudC0+bG9jYWxOYW1l
KCkgPT0gSFRNTE5hbWVzOjpodG1sKCkpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAg
aGF2ZUZyYW1lU2V0ID0gdHJ1ZTsKICAgICAgICAgc3RhcnRCb2R5KCk7CkBAIC04MTksNyArNjUw
LDcgQEAgTm9kZUltcGwgKktIVE1MUGFyc2VyOjpnZXRFbGVtZW50KFRva2VuKgogCiAgICAgLy8g
YSBiaXQgb2YgYSBzcGVjaWFsIGNhc2UsIHNpbmNlIHRoZSBmcmFtZSBpcyBpbmxpbmVkCiAgICAg
Y2FzZSBJRF9JRlJBTUU6Ci0gICAgICAgIGRpc2NhcmRfdW50aWwgPSBJRF9JRlJBTUUgKyBJRF9D
TE9TRV9UQUc7CisgICAgICAgIHNldFNraXBNb2RlKEhUTUxOYW1lczo6aWZyYW1lKCkpOwogICAg
ICAgICBicmVhazsKIAogLy8gZm9ybSBlbGVtZW50cwpAQCAtODY0LDIxICs2OTUsMjEgQEAgTm9k
ZUltcGwgKktIVE1MUGFyc2VyOjpnZXRFbGVtZW50KFRva2VuKgogCiAvLyBsaXN0cwogICAgIGNh
c2UgSURfREQ6Ci0gICAgICAgIHBvcEJsb2NrKElEX0RUKTsKLSAgICAgICAgcG9wQmxvY2soSURf
REQpOworICAgICAgICBwb3BCbG9jayhIVE1MTmFtZXM6OmR0KCkpOworICAgICAgICBwb3BCbG9j
ayhIVE1MTmFtZXM6OmRkKCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIElEX0RUOgotICAg
ICAgICBwb3BCbG9jayhJRF9ERCk7Ci0gICAgICAgIHBvcEJsb2NrKElEX0RUKTsKKyAgICAgICAg
cG9wQmxvY2soSFRNTE5hbWVzOjpkZCgpKTsKKyAgICAgICAgcG9wQmxvY2soSFRNTE5hbWVzOjpk
dCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJRF9MSToKLSAgICAgICAgcG9wQmxvY2so
SURfTEkpOworICAgICAgICBwb3BCbG9jayh0LT50YWdOYW1lKTsKICAgICAgICAgYnJlYWs7CiAK
IC8vIGFuY2hvcgogICAgIGNhc2UgSURfQToKICAgICAgICAgLy8gTmV2ZXIgYWxsb3cgbmVzdGVk
IDxhPnMuCi0gICAgICAgIHBvcEJsb2NrKElEX0EpOworICAgICAgICBwb3BCbG9jayh0LT50YWdO
YW1lKTsKICAgICAgICAgYnJlYWs7CiAKIC8vIGltYWdlcwpAQCAtODkwLDE5ICs3MjEsMTkgQEAg
Tm9kZUltcGwgKktIVE1MUGFyc2VyOjpnZXRFbGVtZW50KFRva2VuKgogCiAvLyB0YWJsZXMKICAg
ICBjYXNlIElEX1RSOgotICAgICAgICBwb3BCbG9jayhJRF9UUik7CisgICAgICAgIHBvcEJsb2Nr
KHQtPnRhZ05hbWUpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIElEX1REOgogICAgIGNhc2Ug
SURfVEg6Ci0gICAgICAgIHBvcEJsb2NrKElEX1RIKTsKLSAgICAgICAgcG9wQmxvY2soSURfVEQp
OworICAgICAgICBwb3BCbG9jayhIVE1MTmFtZXM6OnRoKCkpOworICAgICAgICBwb3BCbG9jayhI
VE1MTmFtZXM6OnRkKCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIElEX1RCT0RZOgogICAg
IGNhc2UgSURfVEhFQUQ6CiAgICAgY2FzZSBJRF9URk9PVDoKLSAgICAgICAgcG9wQmxvY2soSURf
VEhFQUQpOwotICAgICAgICBwb3BCbG9jayhJRF9UQk9EWSk7Ci0gICAgICAgIHBvcEJsb2NrKElE
X1RGT09UKTsKKyAgICAgICAgcG9wQmxvY2soSFRNTE5hbWVzOjp0aGVhZCgpKTsKKyAgICAgICAg
cG9wQmxvY2soSFRNTE5hbWVzOjp0Ym9keSgpKTsKKyAgICAgICAgcG9wQmxvY2soSFRNTE5hbWVz
Ojp0Zm9vdCgpKTsKICAgICAgICAgYnJlYWs7CiAKIC8vIGVsZW1lbnRzIHdpdGggbm8gc3BlY2lh
bCByZXByZXNlbnRhdGlvbiBpbiB0aGUgRE9NCkBAIC05MTQsMjggKzc0NSwyNyBAQCBOb2RlSW1w
bCAqS0hUTUxQYXJzZXI6OmdldEVsZW1lbnQoVG9rZW4qCiAgICAgY2FzZSBJRF9TVFJJS0U6CiAg
ICAgY2FzZSBJRF9CSUc6CiAgICAgY2FzZSBJRF9TTUFMTDoKLSAgICAgICAgaWYgKCFhbGxvd05l
c3RlZFJlZHVuZGFudFRhZyh0LT5pZCkpCisgICAgICAgIGlmICghYWxsb3dOZXN0ZWRSZWR1bmRh
bnRUYWcodC0+dGFnTmFtZSkpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgYnJlYWs7
CiAKICAgICBjYXNlIElEX05PQlI6CiAgICAgY2FzZSBJRF9XQlI6Ci0gICAgICAgIHBvcEJsb2Nr
KHQtPmlkKTsgLy8gRG9uJ3QgYWxsb3cgbmVzdGVkIDxub2JyPiBvciA8d2JyPgorICAgICAgICBw
b3BCbG9jayh0LT50YWdOYW1lKTsgLy8gRG9uJ3QgYWxsb3cgbmVzdGVkIDxub2JyPiBvciA8d2Jy
PgogICAgICAgICBicmVhazsKIAogLy8gdGhlc2UgYXJlIHNwZWNpYWwsIGFuZCBub3JtYWxseSBu
b3QgcmVuZGVyZWQKICAgICBjYXNlIElEX05PRU1CRUQ6Ci0gICAgICAgIGRpc2NhcmRfdW50aWwg
PSBJRF9OT0VNQkVEICsgSURfQ0xPU0VfVEFHOworICAgICAgICBzZXRTa2lwTW9kZShIVE1MTmFt
ZXM6Om5vZW1iZWQoKSk7CiAgICAgICAgIHJldHVybiAwOwogICAgIGNhc2UgSURfTk9GUkFNRVM6
Ci0gICAgICAgIGRpc2NhcmRfdW50aWwgPSBJRF9OT0ZSQU1FUyArIElEX0NMT1NFX1RBRzsKKyAg
ICAgICAgc2V0U2tpcE1vZGUoSFRNTE5hbWVzOjpub2ZyYW1lcygpKTsKICAgICAgICAgcmV0dXJu
IDA7CiAgICAgY2FzZSBJRF9OT1NDUklQVDoKICAgICAgICAgaWYgKEhUTUxXaWRnZXQgJiYgSFRN
TFdpZGdldC0+cGFydCgpLT5qU2NyaXB0RW5hYmxlZCgpKQotICAgICAgICAgICAgZGlzY2FyZF91
bnRpbCA9IElEX05PU0NSSVBUICsgSURfQ0xPU0VfVEFHOworICAgICAgICAgICAgc2V0U2tpcE1v
ZGUoSFRNTE5hbWVzOjpub3NjcmlwdCgpKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgY2FzZSBJ
RF9OT0xBWUVSOgotICAgICAgICAvL2Rpc2NhcmRfdW50aWwgPSBJRF9OT0xBWUVSICsgSURfQ0xP
U0VfVEFHOwogICAgICAgICByZXR1cm4gMDsKICAgICBjYXNlIElEX1RFWFQ6CiAgICAgICAgIHJl
dHVybiBuZXcgVGV4dEltcGwoZG9jdW1lbnQsIHQtPnRleHQpOwpAQCAtOTUwLDg2ICs3ODAsNjMg
QEAgTm9kZUltcGwgKktIVE1MUGFyc2VyOjpnZXRFbGVtZW50KFRva2VuKgogICAgICAgICAgICAg
c2NyaXB0RWxlbWVudC0+c2V0Q3JlYXRlZEJ5UGFyc2VyKHRydWUpOwogICAgICAgICAgICAgcmV0
dXJuIHNjcmlwdEVsZW1lbnQ7CiAgICAgICAgIH0KLSAgICB9CisgICAgfSovCiAKLSAgICByZXR1
cm4gZG9jdW1lbnQtPmRvY3VtZW50KCktPmNyZWF0ZUhUTUxFbGVtZW50KHQtPmlkKTsKKyAgICBy
ZXR1cm4gZG9jdW1lbnQtPmRvY3VtZW50KCktPmNyZWF0ZUhUTUxFbGVtZW50KHQtPnRhZ05hbWUp
OwogfQogCiAjZGVmaW5lIE1BWF9SRURVTkRBTlQgMjAKIAotYm9vbCBLSFRNTFBhcnNlcjo6YWxs
b3dOZXN0ZWRSZWR1bmRhbnRUYWcoaW50IF9pZCkKK2Jvb2wgS0hUTUxQYXJzZXI6OmFsbG93TmVz
dGVkUmVkdW5kYW50VGFnKGNvbnN0IEF0b21pY1N0cmluZyYgX3RhZ05hbWUpCiB7CiAgICAgLy8g
d3d3LmxpY2VvLmVkdS5teCBpcyBhbiBleGFtcGxlIG9mIGEgc2l0ZSB0aGF0IGFjaGlldmVzIGEg
bGV2ZWwgb2YgbmVzdGluZyBvZgogICAgIC8vIGFib3V0IDE1MDAgdGFncywgYWxsIGZyb20gYSBi
dW5jaCBvZiA8Yj5zLiAgV2Ugd2lsbCBvbmx5IGFsbG93IGF0IG1vc3QgMjAKICAgICAvLyBuZXN0
ZWQgdGFncyBvZiB0aGUgc2FtZSB0eXBlIGJlZm9yZSBqdXN0IGlnbm9yaW5nIHRoZW0gYWxsIHRv
Z2V0aGVyLgogICAgIGludCBpID0gMDsKICAgICBmb3IgKEhUTUxTdGFja0VsZW0qIGN1cnIgPSBi
bG9ja1N0YWNrOwotICAgICAgICAgaSA8IE1BWF9SRURVTkRBTlQgJiYgY3VyciAmJiBjdXJyLT5p
ZCA9PSBfaWQ7CisgICAgICAgICBpIDwgTUFYX1JFRFVOREFOVCAmJiBjdXJyICYmIGN1cnItPnRh
Z05hbWUgPT0gX3RhZ05hbWU7CiAgICAgICAgICBjdXJyID0gY3Vyci0+bmV4dCwgaSsrKTsKICAg
ICByZXR1cm4gaSAhPSBNQVhfUkVEVU5EQU5UOwogfQogCiB2b2lkIEtIVE1MUGFyc2VyOjpwcm9j
ZXNzQ2xvc2VUYWcoVG9rZW4gKnQpCiB7Ci0gICAgLy8gc3VwcG9ydCBmb3IgcmVhbGx5IGJyb2tl
biBodG1sLiBDYW4ndCBiZWxpZXZlIEknbSBzdXBwb3J0aW5nIHN1Y2ggY3JhcCAobGFycykKLSAg
ICBzd2l0Y2godC0+aWQpCi0gICAgewotICAgIGNhc2UgSURfSFRNTCtJRF9DTE9TRV9UQUc6Ci0g
ICAgY2FzZSBJRF9CT0RZK0lEX0NMT1NFX1RBRzoKLSAgICAgICAgLy8gd2UgbmV2ZXIgY2xvc2Ug
dGhlIGJvZHkgdGFnLCBzaW5jZSBzb21lIHN0dXBpZCB3ZWIgcGFnZXMgY2xvc2UgaXQgYmVmb3Jl
IHRoZSBhY3R1YWwgZW5kIG9mIHRoZSBkb2MuCi0gICAgICAgIC8vIGxldCdzIHJlbHkgb24gdGhl
IGVuZCgpIGNhbGwgdG8gY2xvc2UgdGhpbmdzLgorICAgIC8vIFN1cHBvcnQgZm9yIHJlYWxseSBi
cm9rZW4gaHRtbC4KKyAgICAvLyB3ZSBuZXZlciBjbG9zZSB0aGUgYm9keSB0YWcsIHNpbmNlIHNv
bWUgc3R1cGlkIHdlYiBwYWdlcyBjbG9zZSBpdCBiZWZvcmUgdGhlIGFjdHVhbCBlbmQgb2YgdGhl
IGRvYy4KKyAgICAvLyBsZXQncyByZWx5IG9uIHRoZSBlbmQoKSBjYWxsIHRvIGNsb3NlIHRoaW5n
cy4KKyAgICBpZiAodC0+dGFnTmFtZSA9PSBIVE1MTmFtZXM6Omh0bWwoKSB8fCB0LT50YWdOYW1l
ID09IEhUTUxOYW1lczo6Ym9keSgpKQogICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJRF9GT1JN
K0lEX0NMT1NFX1RBRzoKKyAgICAKKyAgICBpZiAodC0+dGFnTmFtZSA9PSBIVE1MTmFtZXM6OmZv
cm0oKSkKICAgICAgICAgZm9ybSA9IDA7Ci0gICAgICAgIC8vIHRoaXMgb25lIGlzIHRvIGdldCB0
aGUgcmlnaHQgc3R5bGUgb24gdGhlIGJvZHkgZWxlbWVudAotICAgICAgICBicmVhazsKLSAgICBj
YXNlIElEX01BUCtJRF9DTE9TRV9UQUc6CisgICAgZWxzZSBpZiAodC0+dGFnTmFtZSA9PSBIVE1M
TmFtZXM6Om1hcCgpKQogICAgICAgICBtYXAgPSAwOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IElEX1NFTEVDVCtJRF9DTE9TRV9UQUc6CisgICAgZWxzZSBpZiAodC0+dGFnTmFtZSA9PSBIVE1M
TmFtZXM6OnNlbGVjdCgpKQogICAgICAgICBpblNlbGVjdCA9IGZhbHNlOwotICAgICAgICBicmVh
azsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSNpZmRlZiBQQVJTRVJf
REVCVUcKLSAgICBrZERlYnVnKCA2MDM1ICkgPDwgImFkZGVkIHRoZSBmb2xsb3dpbmcgY2hpbGRz
IHRvICIgPDwgY3VycmVudC0+bm9kZU5hbWUoKS5zdHJpbmcoKSA8PCBlbmRsOwotICAgIE5vZGVJ
bXBsICpjaGlsZCA9IGN1cnJlbnQtPmZpcnN0Q2hpbGQoKTsKLSAgICB3aGlsZShjaGlsZCAhPSAw
KQotICAgIHsKLSAgICAgICAga2REZWJ1ZyggNjAzNSApIDw8ICIgICAgIiA8PCBjaGlsZC0+bm9k
ZU5hbWUoKS5zdHJpbmcoKSA8PCBlbmRsOwotICAgICAgICBjaGlsZCA9IGNoaWxkLT5uZXh0U2li
bGluZygpOwotICAgIH0KLSNlbmRpZgorICAgICAgICAKICAgICBIVE1MU3RhY2tFbGVtKiBvbGRF
bGVtID0gYmxvY2tTdGFjazsKLSAgICBwb3BCbG9jayh0LT5pZC1JRF9DTE9TRV9UQUcpOwotICAg
IGlmIChvbGRFbGVtID09IGJsb2NrU3RhY2sgJiYgdC0+aWQgPT0gSURfUCtJRF9DTE9TRV9UQUcp
IHsKKyAgICBwb3BCbG9jayh0LT50YWdOYW1lKTsKKyAgICBpZiAob2xkRWxlbSA9PSBibG9ja1N0
YWNrICYmIHQtPnRhZ05hbWUgPT0gSFRNTE5hbWVzOjpwKCkpIHsKICAgICAgICAgLy8gV2UgZW5j
b3VudGVyZWQgYSBzdHJheSA8L3A+LiAgQW1hemluZ2x5IEdlY2tvLCBXaW5JRSwgYW5kIE1hY0lF
IGFsbCB0cmVhdAogICAgICAgICAvLyB0aGlzIGFzIGEgdmFsaWQgYnJlYWssIGkuZS4sIDxwPjwv
cD4uICBTbyBnbyBhaGVhZCBhbmQgbWFrZSB0aGUgZW1wdHkKICAgICAgICAgLy8gcGFyYWdyYXBo
LgotICAgICAgICB0LT5pZC09SURfQ0xPU0VfVEFHOworICAgICAgICB0LT5iZWdpblRhZyA9IHRy
dWU7CiAgICAgICAgIHBhcnNlVG9rZW4odCk7Ci0gICAgICAgIHBvcEJsb2NrKElEX1ApOworICAg
ICAgICBwb3BCbG9jayh0LT50YWdOYW1lKTsKICAgICB9CiAjaWZkZWYgUEFSU0VSX0RFQlVHCiAg
ICAga2REZWJ1ZyggNjAzNSApIDw8ICJjbG9zZVRhZyAtLT4gY3VycmVudCA9ICIgPDwgY3VycmVu
dC0+bm9kZU5hbWUoKS5zdHJpbmcoKSA8PCBlbmRsOwogI2VuZGlmCiB9CiAKLWJvb2wgS0hUTUxQ
YXJzZXI6OmlzSGVhZGVyVGFnKGludCBfaWQpCitib29sIEtIVE1MUGFyc2VyOjppc0hlYWRlclRh
Zyhjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUpCiB7Ci0gICAgc3dpdGNoIChfaWQpIHsKLSAg
ICAgICAgY2FzZSBJRF9IMToKLSAgICAgICAgY2FzZSBJRF9IMjoKLSAgICAgICAgY2FzZSBJRF9I
MzoKLSAgICAgICAgY2FzZSBJRF9INDoKLSAgICAgICAgY2FzZSBJRF9INToKLSAgICAgICAgY2Fz
ZSBJRF9INjoKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICByZXR1cm4gdGFnTmFtZSA9PSBIVE1M
TmFtZXM6OmgxKCkgfHwKKyAgICAgICAgICAgdGFnTmFtZSA9PSBIVE1MTmFtZXM6OmgyKCkgfHwK
KyAgICAgICAgICAgdGFnTmFtZSA9PSBIVE1MTmFtZXM6OmgzKCkgfHwKKyAgICAgICAgICAgdGFn
TmFtZSA9PSBIVE1MTmFtZXM6Omg0KCkgfHwKKyAgICAgICAgICAgdGFnTmFtZSA9PSBIVE1MTmFt
ZXM6Omg1KCkgfHwKKyAgICAgICAgICAgdGFnTmFtZSA9PSBIVE1MTmFtZXM6Omg2KCk7CiB9CiAK
IHZvaWQgS0hUTUxQYXJzZXI6OnBvcE5lc3RlZEhlYWRlclRhZygpCkBAIC0xMDM3LDE5ICs4NDQs
MjggQEAgdm9pZCBLSFRNTFBhcnNlcjo6cG9wTmVzdGVkSGVhZGVyVGFnKCkKICAgICAvLyBUaGlz
IGZ1bmN0aW9uIG9ubHkgY2FyZXMgYWJvdXQgY2hlY2tpbmcgZm9yIG5lc3RlZCBoZWFkZXJzIHRo
YXQgaGF2ZSBvbmx5IGlubGluZXMgaW4gYmV0d2VlbiB0aGVtLgogICAgIE5vZGVJbXBsKiBjdXJy
Tm9kZSA9IGN1cnJlbnQ7CiAgICAgZm9yIChIVE1MU3RhY2tFbGVtKiBjdXJyID0gYmxvY2tTdGFj
azsgY3VycjsgY3VyciA9IGN1cnItPm5leHQpIHsKLSAgICAgICAgaWYgKGlzSGVhZGVyVGFnKGN1
cnItPmlkKSkgewotICAgICAgICAgICAgcG9wQmxvY2soY3Vyci0+aWQpOworICAgICAgICBpZiAo
aXNIZWFkZXJUYWcoY3Vyci0+dGFnTmFtZSkpIHsKKyAgICAgICAgICAgIHBvcEJsb2NrKGN1cnIt
PnRhZ05hbWUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGlmIChj
dXJyTm9kZSAmJiAhY3Vyck5vZGUtPmlzSW5saW5lKCkpCisgICAgICAgIGlmIChjdXJyTm9kZSAm
JiAhaXNJbmxpbmUoY3Vyck5vZGUpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBjdXJy
Tm9kZSA9IGN1cnItPm5vZGU7CiAgICAgfQogfQogCi1ib29sIEtIVE1MUGFyc2VyOjppc1Jlc2lk
dWFsU3R5bGVUYWcoaW50IF9pZCkKK2Jvb2wgS0hUTUxQYXJzZXI6OmlzSW5saW5lKERPTTo6Tm9k
ZUltcGwqIG5vZGUpIGNvbnN0CiB7Ci0gICAgc3dpdGNoIChfaWQpIHsKKyAgICBpZiAobm9kZS0+
aXNUZXh0Tm9kZSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAobm9kZS0+aXNIVE1M
RWxlbWVudCgpKSB7CisgICAgICAgIC8vSFRNTEVsZW1lbnRJbXBsKiBlID0gc3RhdGljX2Nhc3Q8
SFRNTEVsZW1lbnRJbXBsKj4obm9kZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsgLy8gRklYTUU6
IFNob3VsZCBiZSBwb3NzaWJsZSB0byBpbXBsZW1lbnQgdGhpcyBpbiB0ZXJtcyBvZiBwcmlvcml0
eSBsZXZlbHMuCisgICAgfQorICAgIHJldHVybiBmYWxzZTsKKworLyoKKyAgICBzd2l0Y2goaWQo
KSkgewogICAgICAgICBjYXNlIElEX0E6CiAgICAgICAgIGNhc2UgSURfRk9OVDoKICAgICAgICAg
Y2FzZSBJRF9UVDoKQEAgLTEwNjAsNiArODc2LDggQEAgYm9vbCBLSFRNTFBhcnNlcjo6aXNSZXNp
ZHVhbFN0eWxlVGFnKGludAogICAgICAgICBjYXNlIElEX1NUUklLRToKICAgICAgICAgY2FzZSBJ
RF9CSUc6CiAgICAgICAgIGNhc2UgSURfU01BTEw6CisgICAgCisgICAgICAgICAgICAvLyAlcGhy
YXNlCiAgICAgICAgIGNhc2UgSURfRU06CiAgICAgICAgIGNhc2UgSURfU1RST05HOgogICAgICAg
ICBjYXNlIElEX0RGTjoKQEAgLTEwNjcsNDAgKzg4NSw0NCBAQCBib29sIEtIVE1MUGFyc2VyOjpp
c1Jlc2lkdWFsU3R5bGVUYWcoaW50CiAgICAgICAgIGNhc2UgSURfU0FNUDoKICAgICAgICAgY2Fz
ZSBJRF9LQkQ6CiAgICAgICAgIGNhc2UgSURfVkFSOgorICAgICAgICBjYXNlIElEX0NJVEU6Cisg
ICAgICAgIGNhc2UgSURfQUJCUjoKKyAgICAgICAgY2FzZSBJRF9BQ1JPTllNOgorICAgIAorICAg
ICAgICAgICAgLy8gJXNwZWNpYWwKKyAgICAgICAgY2FzZSBJRF9TVUI6CisgICAgICAgIGNhc2Ug
SURfU1VQOgorICAgICAgICBjYXNlIElEX1NQQU46CisgICAgICAgIGNhc2UgSURfTk9CUjoKKyAg
ICAgICAgY2FzZSBJRF9XQlI6CisgICAgICAgIAorICAgICAgICBjYXNlIElEX1RFWFQ6CiAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIAogICAgICAgICBkZWZhdWx0OgogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICB9Ki8KK30KKworYm9vbCBLSFRNTFBh
cnNlcjo6aXNSZXNpZHVhbFN0eWxlVGFnKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSkKK3sK
KyAgICByZXR1cm4gdGFnTmFtZSA9PSBIVE1MTmFtZXM6OmEoKSB8fCB0YWdOYW1lID09IEhUTUxO
YW1lczo6Zm9udCgpIHx8IHRhZ05hbWUgPT0gSFRNTE5hbWVzOjp0dCgpIHx8CisgICAgICAgICAg
IHRhZ05hbWUgPT0gSFRNTE5hbWVzOjp1KCkgfHwgdGFnTmFtZSA9PSBIVE1MTmFtZXM6OmIoKSB8
fCB0YWdOYW1lID09IEhUTUxOYW1lczo6aSgpIHx8CisgICAgICAgICAgIHRhZ05hbWUgPT0gSFRN
TE5hbWVzOjpzKCkgfHwgdGFnTmFtZSA9PSBIVE1MTmFtZXM6OnN0cmlrZSgpIHx8IHRhZ05hbWUg
PT0gSFRNTE5hbWVzOjpiaWcoKSB8fAorICAgICAgICAgICB0YWdOYW1lID09IEhUTUxOYW1lczo6
c21hbGwoKSB8fCB0YWdOYW1lID09IEhUTUxOYW1lczo6ZW0oKSB8fCB0YWdOYW1lID09IEhUTUxO
YW1lczo6c3Ryb25nKCkgfHwKKyAgICAgICAgICAgdGFnTmFtZSA9PSBIVE1MTmFtZXM6OmRmbigp
IHx8IHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpjb2RlKCkgfHwgdGFnTmFtZSA9PSBIVE1MTmFtZXM6
OnNhbXAoKSB8fAorICAgICAgICAgICB0YWdOYW1lID09IEhUTUxOYW1lczo6a2JkKCkgfHwgdGFn
TmFtZSA9PSBIVE1MTmFtZXM6OnZhcigpOwogfQogCi1ib29sIEtIVE1MUGFyc2VyOjppc0FmZmVj
dGVkQnlSZXNpZHVhbFN0eWxlKGludCBfaWQpCitib29sIEtIVE1MUGFyc2VyOjppc0FmZmVjdGVk
QnlSZXNpZHVhbFN0eWxlKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSkKIHsKLSAgICBpZiAo
aXNSZXNpZHVhbFN0eWxlVGFnKF9pZCkpCisgICAgaWYgKGlzUmVzaWR1YWxTdHlsZVRhZyh0YWdO
YW1lKSB8fCBpc0hlYWRlclRhZyh0YWdOYW1lKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
Ci0gICAgc3dpdGNoIChfaWQpIHsKLSAgICAgICAgY2FzZSBJRF9QOgotICAgICAgICBjYXNlIElE
X0RJVjoKLSAgICAgICAgY2FzZSBJRF9CTE9DS1FVT1RFOgotICAgICAgICBjYXNlIElEX0FERFJF
U1M6Ci0gICAgICAgIGNhc2UgSURfSDE6Ci0gICAgICAgIGNhc2UgSURfSDI6Ci0gICAgICAgIGNh
c2UgSURfSDM6Ci0gICAgICAgIGNhc2UgSURfSDQ6Ci0gICAgICAgIGNhc2UgSURfSDU6Ci0gICAg
ICAgIGNhc2UgSURfSDY6Ci0gICAgICAgIGNhc2UgSURfQ0VOVEVSOgotICAgICAgICBjYXNlIElE
X1VMOgotICAgICAgICBjYXNlIElEX09MOgotICAgICAgICBjYXNlIElEX0xJOgotICAgICAgICBj
YXNlIElEX0RMOgotICAgICAgICBjYXNlIElEX0RUOgotICAgICAgICBjYXNlIElEX0REOgotICAg
ICAgICBjYXNlIElEX1BSRToKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICByZXR1cm4gdGFnTmFt
ZSA9PSBIVE1MTmFtZXM6OnAoKSB8fCB0YWdOYW1lID09IEhUTUxOYW1lczo6ZGl2KCkgfHwgdGFn
TmFtZSA9PSBIVE1MTmFtZXM6OmJsb2NrcXVvdGUoKSB8fAorICAgICAgICAgICB0YWdOYW1lID09
IEhUTUxOYW1lczo6YWRkcmVzcygpIHx8IHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpjZW50ZXIoKSB8
fCB0YWdOYW1lID09IEhUTUxOYW1lczo6dWwoKSB8fAorICAgICAgICAgICB0YWdOYW1lID09IEhU
TUxOYW1lczo6b2woKSB8fCB0YWdOYW1lID09IEhUTUxOYW1lczo6bGkoKSB8fCB0YWdOYW1lID09
IEhUTUxOYW1lczo6ZGwoKSB8fAorICAgICAgICAgICB0YWdOYW1lID09IEhUTUxOYW1lczo6ZHQo
KSB8fCB0YWdOYW1lID09IEhUTUxOYW1lczo6ZGQoKSB8fCB0YWdOYW1lID09IEhUTUxOYW1lczo6
cHJlKCk7CiB9CiAKIHZvaWQgS0hUTUxQYXJzZXI6OmhhbmRsZVJlc2lkdWFsU3R5bGVDbG9zZVRh
Z0Fjcm9zc0Jsb2NrcyhIVE1MU3RhY2tFbGVtKiBlbGVtKQpAQCAtMTEyNSw3ICs5NDcsNyBAQCB2
b2lkIEtIVE1MUGFyc2VyOjpoYW5kbGVSZXNpZHVhbFN0eWxlQ2xvCiAgICAgICAgIGN1cnIgPSBj
dXJyLT5uZXh0OwogICAgIH0KIAotICAgIGlmICghY3VyciB8fCAhbWF4RWxlbSB8fCAhaXNBZmZl
Y3RlZEJ5UmVzaWR1YWxTdHlsZShtYXhFbGVtLT5pZCkpIHJldHVybjsKKyAgICBpZiAoIWN1cnIg
fHwgIW1heEVsZW0gfHwgIWlzQWZmZWN0ZWRCeVJlc2lkdWFsU3R5bGUobWF4RWxlbS0+dGFnTmFt
ZSkpIHJldHVybjsKIAogICAgIE5vZGVJbXBsKiByZXNpZHVhbEVsZW0gPSBwcmV2LT5ub2RlOwog
ICAgIE5vZGVJbXBsKiBibG9ja0VsZW0gPSBwcmV2TWF4RWxlbSA/IHByZXZNYXhFbGVtLT5ub2Rl
IDogY3VycmVudDsKQEAgLTExNDcsNyArOTY5LDcgQEAgdm9pZCBLSFRNTFBhcnNlcjo6aGFuZGxl
UmVzaWR1YWxTdHlsZUNsbwogICAgICAgICBIVE1MU3RhY2tFbGVtKiBwcmV2RWxlbSA9IG1heEVs
ZW07CiAgICAgICAgIHdoaWxlIChjdXJyRWxlbSAhPSBlbGVtKSB7CiAgICAgICAgICAgICBIVE1M
U3RhY2tFbGVtKiBuZXh0RWxlbSA9IGN1cnJFbGVtLT5uZXh0OwotICAgICAgICAgICAgaWYgKCFp
c1Jlc2lkdWFsU3R5bGVUYWcoY3VyckVsZW0tPmlkKSkgeworICAgICAgICAgICAgaWYgKCFpc1Jl
c2lkdWFsU3R5bGVUYWcoY3VyckVsZW0tPnRhZ05hbWUpKSB7CiAgICAgICAgICAgICAgICAgcHJl
dkVsZW0tPm5leHQgPSBuZXh0RWxlbTsKICAgICAgICAgICAgICAgICBwcmV2RWxlbS0+bm9kZSA9
IGN1cnJFbGVtLT5ub2RlOwogICAgICAgICAgICAgICAgIGRlbGV0ZSBjdXJyRWxlbTsKQEAgLTEx
NjksNyArOTkxLDcgQEAgdm9pZCBLSFRNTFBhcnNlcjo6aGFuZGxlUmVzaWR1YWxTdHlsZUNsbwog
ICAgICAgICBOb2RlSW1wbCogY3Vyck5vZGUgPSAwOwogICAgICAgICBjdXJyRWxlbSA9IG1heEVs
ZW07CiAgICAgICAgIHdoaWxlIChjdXJyRWxlbS0+bm9kZSAhPSByZXNpZHVhbEVsZW0pIHsKLSAg
ICAgICAgICAgIGlmIChpc1Jlc2lkdWFsU3R5bGVUYWcoY3VyckVsZW0tPm5vZGUtPmlkKCkpKSB7
CisgICAgICAgICAgICBpZiAoaXNSZXNpZHVhbFN0eWxlVGFnKGN1cnJFbGVtLT5ub2RlLT5sb2Nh
bE5hbWUoKSkpIHsKICAgICAgICAgICAgICAgICAvLyBDcmVhdGUgYSBjbG9uZSBvZiB0aGlzIGVs
ZW1lbnQuCiAgICAgICAgICAgICAgICAgY3Vyck5vZGUgPSBjdXJyRWxlbS0+bm9kZS0+Y2xvbmVO
b2RlKGZhbHNlKTsKIApAQCAtMTI0NSw3ICsxMDY3LDcgQEAgdm9pZCBLSFRNTFBhcnNlcjo6aGFu
ZGxlUmVzaWR1YWxTdHlsZUNsbwogICAgICAgICAvLyBXZSB3aWxsIGFjdHVhbGx5IHNjaGVkdWxl
IHRoaXMgdGFnIGZvciByZW9wZW5pbmcKICAgICAgICAgLy8gYWZ0ZXIgd2UgY29tcGxldGUgdGhl
IGNsb3NlIG9mIHRoaXMgZW50aXJlIGJsb2NrLgogICAgICAgICBOb2RlSW1wbCogY3Vyck5vZGUg
PSBjdXJyZW50OwotICAgICAgICBpZiAoaXNSZXNpZHVhbFN0eWxlVGFnKGN1cnItPmlkKSkgewor
ICAgICAgICBpZiAoaXNSZXNpZHVhbFN0eWxlVGFnKGN1cnItPnRhZ05hbWUpKSB7CiAgICAgICAg
ICAgICAvLyBXZSd2ZSBvdmVybG9hZGVkIHRoZSB1c2Ugb2Ygc3RhY2sgZWxlbWVudHMgYW5kIGFy
ZSBqdXN0IHJldXNpbmcgdGhlCiAgICAgICAgICAgICAvLyBzdHJ1Y3Qgd2l0aCBhIHNsaWdodGx5
IGRpZmZlcmVudCBtZWFuaW5nIHRvIHRoZSB2YXJpYWJsZXMuICBJbnN0ZWFkIG9mIGNoYWluaW5n
CiAgICAgICAgICAgICAvLyBmcm9tIGlubmVybW9zdCB0byBvdXRlcm1vc3QsIHdlIGJ1aWxkIHVw
IGEgbGlzdCBvZiBhbGwgdGhlIHRhZ3Mgd2UgbmVlZCB0byByZW9wZW4KQEAgLTEyODYsNyArMTEw
OCw3IEBAIHZvaWQgS0hUTUxQYXJzZXI6OnJlb3BlblJlc2lkdWFsU3R5bGVUYWcKICAgICAgICAg
Ly8gRklYTUU6IElzIGl0IHJlYWxseSBPSyB0byBpZ25vcmUgdGhlIGV4Y2VwdGlvbnMgaGVyZT8K
IAogICAgICAgICAvLyBOb3cgcHVzaCBhIG5ldyBzdGFjayBlbGVtZW50IGZvciB0aGlzIG5vZGUg
d2UganVzdCBjcmVhdGVkLgotICAgICAgICBwdXNoQmxvY2soZWxlbS0+aWQsIGVsZW0tPmxldmVs
KTsKKyAgICAgICAgcHVzaEJsb2NrKGVsZW0tPnRhZ05hbWUsIGVsZW0tPmxldmVsKTsKIAogICAg
ICAgICAvLyBTZXQgb3VyIHN0cmF5VGFibGVDb250ZW50IGJvb2xlYW4gaWYgbmVlZGVkLCBzbyB0
aGF0IHRoZSByZW9wZW5lZCB0YWcgYWxzbyBrbm93cwogICAgICAgICAvLyB0aGF0IGl0IGlzIGlu
c2lkZSBhIG1hbGZvcm1lZCB0YWJsZS4KQEAgLTEzMDcsMzUgKzExMjksMjEgQEAgdm9pZCBLSFRN
TFBhcnNlcjo6cmVvcGVuUmVzaWR1YWxTdHlsZVRhZwogICAgIH0KIH0KIAotdm9pZCBLSFRNTFBh
cnNlcjo6cHVzaEJsb2NrKGludCBfaWQsIGludCBfbGV2ZWwpCit2b2lkIEtIVE1MUGFyc2VyOjpw
dXNoQmxvY2soY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lLCBpbnQgX2xldmVsKQogewotICAg
IEhUTUxTdGFja0VsZW0gKkVsZW0gPSBuZXcgSFRNTFN0YWNrRWxlbShfaWQsIF9sZXZlbCwgY3Vy
cmVudCwgYmxvY2tTdGFjayk7Ci0KKyAgICBIVE1MU3RhY2tFbGVtICpFbGVtID0gbmV3IEhUTUxT
dGFja0VsZW0odGFnTmFtZSwgX2xldmVsLCBjdXJyZW50LCBibG9ja1N0YWNrKTsKICAgICBibG9j
a1N0YWNrID0gRWxlbTsKLSAgICBhZGRGb3JiaWRkZW4oX2lkLCBmb3JiaWRkZW5UYWcpOwogfQog
Ci12b2lkIEtIVE1MUGFyc2VyOjpwb3BCbG9jayggaW50IF9pZCApCit2b2lkIEtIVE1MUGFyc2Vy
Ojpwb3BCbG9jayhjb25zdCBBdG9taWNTdHJpbmcmIF90YWdOYW1lKQogewogICAgIEhUTUxTdGFj
a0VsZW0gKkVsZW0gPSBibG9ja1N0YWNrOwogICAgIAogICAgIGludCBtYXhMZXZlbCA9IDA7CiAK
LSNpZmRlZiBQQVJTRVJfREVCVUcKLSAgICBrZERlYnVnKCA2MDM1ICkgPDwgInBvcEJsb2NrKCIg
PDwgZ2V0VGFnTmFtZShfaWQpLnN0cmluZygpIDw8ICIpIiA8PCBlbmRsOwotICAgIHdoaWxlKEVs
ZW0pIHsKLSAgICAgICAga2REZWJ1ZyggNjAzNSkgPDwgIiAgID4gIiA8PCBnZXRUYWdOYW1lKEVs
ZW0tPmlkKS5zdHJpbmcoKSA8PCBlbmRsOwotICAgICAgICBFbGVtID0gRWxlbS0+bmV4dDsKLSAg
ICB9Ci0gICAgRWxlbSA9IGJsb2NrU3RhY2s7Ci0jZW5kaWYKLQotICAgIHdoaWxlKCBFbGVtICYm
IChFbGVtLT5pZCAhPSBfaWQpKQotICAgIHsKKyAgICB3aGlsZSAoRWxlbSAmJiAoRWxlbS0+dGFn
TmFtZSAhPSBfdGFnTmFtZSkpIHsKICAgICAgICAgaWYgKG1heExldmVsIDwgRWxlbS0+bGV2ZWwp
Ci0gICAgICAgIHsKICAgICAgICAgICAgIG1heExldmVsID0gRWxlbS0+bGV2ZWw7Ci0gICAgICAg
IH0KICAgICAgICAgRWxlbSA9IEVsZW0tPm5leHQ7CiAgICAgfQogCkBAIC0xMzQ1LDIwICsxMTUz
LDE4IEBAIHZvaWQgS0hUTUxQYXJzZXI6OnBvcEJsb2NrKCBpbnQgX2lkICkKICAgICBpZiAobWF4
TGV2ZWwgPiBFbGVtLT5sZXZlbCkgewogICAgICAgICAvLyBXZSBkaWRuJ3QgbWF0Y2ggYmVjYXVz
ZSB0aGUgdGFnIGlzIGluIGEgZGlmZmVyZW50IHNjb3BlLCBlLmcuLAogICAgICAgICAvLyA8Yj48
cD5Gb288L2I+LiAgVHJ5IHRvIGNvcnJlY3QgdGhlIHByb2JsZW0uCi0gICAgICAgIGlmICghaXNS
ZXNpZHVhbFN0eWxlVGFnKF9pZCkpCisgICAgICAgIGlmICghaXNSZXNpZHVhbFN0eWxlVGFnKF90
YWdOYW1lKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgcmV0dXJuIGhhbmRsZVJlc2lk
dWFsU3R5bGVDbG9zZVRhZ0Fjcm9zc0Jsb2NrcyhFbGVtKTsKICAgICB9CiAKLSAgICBib29sIGlz
QWZmZWN0ZWRCeVN0eWxlID0gaXNBZmZlY3RlZEJ5UmVzaWR1YWxTdHlsZShFbGVtLT5pZCk7Cisg
ICAgYm9vbCBpc0FmZmVjdGVkQnlTdHlsZSA9IGlzQWZmZWN0ZWRCeVJlc2lkdWFsU3R5bGUoRWxl
bS0+dGFnTmFtZSk7CiAgICAgSFRNTFN0YWNrRWxlbSogcmVzaWR1YWxTdHlsZVN0YWNrID0gMDsK
ICAgICBOb2RlSW1wbCogbWFsZm9ybWVkVGFibGVQYXJlbnQgPSAwOwogICAgIAogICAgIEVsZW0g
PSBibG9ja1N0YWNrOwotICAgIHdoaWxlIChFbGVtKQotICAgIHsKLSAgICAgICAgaWYgKEVsZW0t
PmlkID09IF9pZCkKLSAgICAgICAgeworICAgIHdoaWxlIChFbGVtKSB7CisgICAgICAgIGlmIChF
bGVtLT50YWdOYW1lID09IF90YWdOYW1lKSB7CiAgICAgICAgICAgICBpbnQgc3RyYXlUYWJsZSA9
IGluU3RyYXlUYWJsZUNvbnRlbnQ7CiAgICAgICAgICAgICBwb3BPbmVCbG9jaygpOwogICAgICAg
ICAgICAgRWxlbSA9IDA7CkBAIC0xMzY5LDE0ICsxMTc1LDEzIEBAIHZvaWQgS0hUTUxQYXJzZXI6
OnBvcEJsb2NrKCBpbnQgX2lkICkKICAgICAgICAgICAgIC8vIG11c3QgYWxzbyBrbm93IHRoYXQg
aXQgaXMgdGhlIHJvb3Qgb2YgbWFsZm9ybWVkIGNvbnRlbnQgaW5zaWRlIGEgPHRib2R5Pi88dHI+
LgogICAgICAgICAgICAgaWYgKHN0cmF5VGFibGUgJiYgKGluU3RyYXlUYWJsZUNvbnRlbnQgPCBz
dHJheVRhYmxlKSAmJiByZXNpZHVhbFN0eWxlU3RhY2spIHsKICAgICAgICAgICAgICAgICBOb2Rl
SW1wbCogY3VyciA9IGN1cnJlbnQ7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKGN1cnIgJiYgY3Vy
ci0+aWQoKSAhPSBJRF9UQUJMRSkKKyAgICAgICAgICAgICAgICB3aGlsZSAoY3VyciAmJiAhY3Vy
ci0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRhYmxlKCkpKQogICAgICAgICAgICAgICAgICAgICBj
dXJyID0gY3Vyci0+cGFyZW50Tm9kZSgpOwogICAgICAgICAgICAgICAgIG1hbGZvcm1lZFRhYmxl
UGFyZW50ID0gY3VyciA/IGN1cnItPnBhcmVudE5vZGUoKSA6IDA7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoRWxlbS0+
aWQgPT0gSURfRk9STSAmJiBmb3JtKQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmIChm
b3JtICYmIEVsZW0tPnRhZ05hbWUgPT0gSFRNTE5hbWVzOjpmb3JtKCkpCiAgICAgICAgICAgICAg
ICAgLy8gQSA8Zm9ybT4gaXMgYmVpbmcgY2xvc2VkIHByZW1hdHVyZWx5IChhbmQgdGhpcyBpcwog
ICAgICAgICAgICAgICAgIC8vIG1hbGZvcm1lZCBIVE1MKS4gIFNldCBhbiBhdHRyaWJ1dGUgb24g
dGhlIGZvcm0gdG8gY2xlYXIgb3V0IGl0cwogICAgICAgICAgICAgICAgIC8vIGJvdHRvbSBtYXJn
aW4uCkBAIC0xMzg1LDcgKzExOTAsNyBAQCB2b2lkIEtIVE1MUGFyc2VyOjpwb3BCbG9jayggaW50
IF9pZCApCiAgICAgICAgICAgICAvLyBTY2hlZHVsZSB0aGlzIHRhZyBmb3IgcmVvcGVuaW5nCiAg
ICAgICAgICAgICAvLyBhZnRlciB3ZSBjb21wbGV0ZSB0aGUgY2xvc2Ugb2YgdGhpcyBlbnRpcmUg
YmxvY2suCiAgICAgICAgICAgICBOb2RlSW1wbCogY3Vyck5vZGUgPSBjdXJyZW50OwotICAgICAg
ICAgICAgaWYgKGlzQWZmZWN0ZWRCeVN0eWxlICYmIGlzUmVzaWR1YWxTdHlsZVRhZyhFbGVtLT5p
ZCkpIHsKKyAgICAgICAgICAgIGlmIChpc0FmZmVjdGVkQnlTdHlsZSAmJiBpc1Jlc2lkdWFsU3R5
bGVUYWcoRWxlbS0+dGFnTmFtZSkpIHsKICAgICAgICAgICAgICAgICAvLyBXZSd2ZSBvdmVybG9h
ZGVkIHRoZSB1c2Ugb2Ygc3RhY2sgZWxlbWVudHMgYW5kIGFyZSBqdXN0IHJldXNpbmcgdGhlCiAg
ICAgICAgICAgICAgICAgLy8gc3RydWN0IHdpdGggYSBzbGlnaHRseSBkaWZmZXJlbnQgbWVhbmlu
ZyB0byB0aGUgdmFyaWFibGVzLiAgSW5zdGVhZCBvZiBjaGFpbmluZwogICAgICAgICAgICAgICAg
IC8vIGZyb20gaW5uZXJtb3N0IHRvIG91dGVybW9zdCwgd2UgYnVpbGQgdXAgYSBsaXN0IG9mIGFs
bCB0aGUgdGFncyB3ZSBuZWVkIHRvIHJlb3BlbgpAQCAtMTQxMywxNCArMTIxOCw5IEBAIHZvaWQg
S0hUTUxQYXJzZXI6OnBvcE9uZUJsb2NrKGJvb2wgZGVsQmwKICAgICBIVE1MU3RhY2tFbGVtICpF
bGVtID0gYmxvY2tTdGFjazsKIAogICAgIC8vIHdlIHNob3VsZCBuZXZlciBnZXQgaGVyZSwgYnV0
IHNvbWUgYmFkIGh0bWwgbWlnaHQgY2F1c2UgaXQuCi0jaWZuZGVmIFBBUlNFUl9ERUJVRwotICAg
IGlmKCFFbGVtKSByZXR1cm47Ci0jZWxzZQotICAgIGtkRGVidWcoIDYwMzUgKSA8PCAicG9wcGlu
ZyBibG9jazogIiA8PCBnZXRUYWdOYW1lKEVsZW0tPmlkKS5zdHJpbmcoKSA8PCAiKCIgPDwgRWxl
bS0+aWQgPDwgIikiIDw8IGVuZGw7Ci0jZW5kaWYKLQotI2lmIFNQRUVEX0RFQlVHIDwgMQotICAg
IGlmKChFbGVtLT5ub2RlICE9IGN1cnJlbnQpKSB7CisgICAgaWYgKCFFbGVtKSByZXR1cm47Cisg
ICAgCisgICAgaWYgKChFbGVtLT5ub2RlICE9IGN1cnJlbnQpKSB7CiAgICAgICAgIGlmIChjdXJy
ZW50LT5tYWludGFpbnNTdGF0ZSgpICYmIGRvYygpKXsKICAgICAgICAgICAgIGRvYygpLT5yZWdp
c3Rlck1haW50YWluc1N0YXRlKGN1cnJlbnQpOwogICAgICAgICAgICAgUVN0cmluZ0xpc3QgJnN0
YXRlcyA9IGRvYygpLT5yZXN0b3JlU3RhdGUoKTsKQEAgLTE0MzEsOSArMTIzMSw2IEBAIHZvaWQg
S0hUTUxQYXJzZXI6OnBvcE9uZUJsb2NrKGJvb2wgZGVsQmwKICAgICAgICAgLy8gQSBmZXcgZWxl
bWVudHMgKDxhcHBsZXQ+LCA8b2JqZWN0PikgbmVlZCB0byBrbm93IHdoZW4gYWxsIGNoaWxkIGVs
ZW1lbnRzICg8cGFyYW0+cykgYXJlIGF2YWlsYWJsZToKICAgICAgICAgY3VycmVudC0+Y2xvc2VS
ZW5kZXJlcigpOwogICAgIH0KLSNlbmRpZgotCi0gICAgcmVtb3ZlRm9yYmlkZGVuKEVsZW0tPmlk
LCBmb3JiaWRkZW5UYWcpOwogCiAgICAgYmxvY2tTdGFjayA9IEVsZW0tPm5leHQ7CiAgICAgc2V0
Q3VycmVudChFbGVtLT5ub2RlKTsKQEAgLTE0NDcsNyArMTI0NCw3IEBAIHZvaWQgS0hUTUxQYXJz
ZXI6OnBvcE9uZUJsb2NrKGJvb2wgZGVsQmwKIAogdm9pZCBLSFRNTFBhcnNlcjo6cG9wSW5saW5l
QmxvY2tzKCkKIHsKLSAgICB3aGlsZSAoYmxvY2tTdGFjayAmJiBjdXJyZW50LT5pc0lubGluZSgp
KQorICAgIHdoaWxlIChibG9ja1N0YWNrICYmIGlzSW5saW5lKGN1cnJlbnQpKQogICAgICAgICBw
b3BPbmVCbG9jaygpOwogfQogCkluZGV4OiBraHRtbC9odG1sL2h0bWxwYXJzZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9odG1sL2h0bWxwYXJzZXIuaCx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yNwpkaWZmIC11IC1wIC1yMS4yNyBraHRtbC9odG1sL2h0
bWxwYXJzZXIuaAotLS0ga2h0bWwvaHRtbC9odG1scGFyc2VyLmgJNiBKYW4gMjAwNSAyMToxMzox
NiAtMDAwMAkxLjI3CisrKyBraHRtbC9odG1sL2h0bWxwYXJzZXIuaAkxNyBKdW4gMjAwNSAwMToz
Mjo1MyAtMDAwMApAQCAtMjksMTkgKzI5LDkgQEAKICNpZm5kZWYgSFRNTFBBUlNFUl9ICiAjZGVm
aW5lIEhUTUxQQVJTRVJfSAogCi0vLyAwIGFsbAotLy8gMSBkb210cmVlICsgcmVuZGVydHJlZSAr
IHN0eWxlRm9yRWxlbWVudCwgbm8gbGF5b3V0aW5nCi0vLyAyIGRvbXRyZWUgb25seQotI2RlZmlu
ZSBTUEVFRF9ERUJVRyAwCi0KLSNpZmRlZiBTUEVFRF9ERUJVRwotI2luY2x1ZGUgPHFkYXRldGlt
ZS5oPgotI2VuZGlmCi0KICNpbmNsdWRlICJkb20vZG9tX3N0cmluZy5oIgogI2luY2x1ZGUgInht
bC9kb21fbm9kZWltcGwuaCIKICNpbmNsdWRlICJodG1sL2h0bWxfZG9jdW1lbnRpbXBsLmgiCi0j
aW5jbHVkZSAibWlzYy9odG1sdGFncy5oIgogCiBjbGFzcyBLSFRNTFZpZXc7CiBjbGFzcyBIVE1M
U3RhY2tFbGVtOwpAQCAtODksNyArNzksNyBAQCBwdWJsaWM6CiAgICAgICovCiAgICAgdm9pZCBy
ZXNldCgpOwogCi0gICAgYm9vbCBza2lwTW9kZSgpIGNvbnN0IHsgcmV0dXJuIChkaXNjYXJkX3Vu
dGlsICE9IDApOyB9CisgICAgYm9vbCBza2lwTW9kZSgpIGNvbnN0IHsgcmV0dXJuICFkaXNjYXJk
X3VudGlsLmlzTnVsbCgpOyB9CiAgICAgYm9vbCBub1NwYWNlcygpIGNvbnN0IHsgcmV0dXJuICFp
bkJvZHk7IH0KICAgICBib29sIHNlbGVjdE1vZGUoKSBjb25zdCB7IHJldHVybiBpblNlbGVjdDsg
fQogCkBAIC05Nyw3ICs4Nyw4IEBAIHB1YmxpYzoKICAgICBET006OkRvY3VtZW50UHRyICpkb2NQ
dHIoKSBjb25zdCB7IHJldHVybiBkb2N1bWVudDsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgdm9pZCBz
ZXRDdXJyZW50KERPTTo6Tm9kZUltcGwgKm5ld0N1cnJlbnQpOworICAgIHZvaWQgc2V0Q3VycmVu
dChET006Ok5vZGVJbXBsKiBuZXdDdXJyZW50KTsKKyAgICB2b2lkIHNldFNraXBNb2RlKGNvbnN0
IERPTTo6UXVhbGlmaWVkTmFtZSYgcU5hbWUpIHsgZGlzY2FyZF91bnRpbCA9IHFOYW1lLmxvY2Fs
TmFtZSgpOyB9CiAKICAgICBLSFRNTFZpZXcgKkhUTUxXaWRnZXQ7CiAgICAgRE9NOjpEb2N1bWVu
dFB0ciAqZG9jdW1lbnQ7CkBAIC0xMTAsMTggKzEwMSwxOCBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9p
ZCBwcm9jZXNzQ2xvc2VUYWcoa2h0bWw6OlRva2VuICopOwogCiAgICAgYm9vbCBpbnNlcnROb2Rl
KERPTTo6Tm9kZUltcGwgKm4sIGJvb2wgZmxhdCA9IGZhbHNlKTsKKyAgICBib29sIGhhbmRsZUVy
cm9yKERPTTo6Tm9kZUltcGwqIG4sIGJvb2wgZmxhdCwgY29uc3QgRE9NOjpBdG9taWNTdHJpbmcm
IGxvY2FsTmFtZSwgaW50IHRhZ1ByaW9yaXR5KTsKKyAgICAKKyAgICAvLyBUaGUgY3VycmVudGx5
IGFjdGl2ZSBlbGVtZW50ICh0aGUgb25lIG5ldyBlbGVtZW50cyB3aWxsIGJlIGFkZGVkIHRvKS4g
IENhbiBiZSBhIERvY3VtZW50RnJhZ21lbnQsIGEgRG9jdW1lbnQgb3IgYW4gRWxlbWVudC4KKyAg
ICBET006Ok5vZGVJbXBsKiBjdXJyZW50OwogCi0gICAgLyoKLSAgICAgKiBUaGUgY3VycmVudGx5
IGFjdGl2ZSBlbGVtZW50ICh0aGUgb25lIG5ldyBlbGVtZW50cyB3aWxsIGJlIGFkZGVkIHRvKQot
ICAgICAqLwotICAgIERPTTo6Tm9kZUltcGwgKmN1cnJlbnQ7CiAgICAgYm9vbCBjdXJyZW50SXNS
ZWZlcmVuY2VkOwogCiAgICAgSFRNTFN0YWNrRWxlbSAqYmxvY2tTdGFjazsKIAotICAgIHZvaWQg
cHVzaEJsb2NrKCBpbnQgX2lkLCBpbnQgX2xldmVsKTsKLQotICAgIHZvaWQgcG9wQmxvY2soIGlu
dCBfaWQgKTsKKyAgICB2b2lkIHB1c2hCbG9jayhjb25zdCBET006OkF0b21pY1N0cmluZyYgdGFn
TmFtZSwgaW50IF9sZXZlbCk7CisgICAgdm9pZCBwb3BCbG9jayhjb25zdCBET006OkF0b21pY1N0
cmluZyYgdGFnTmFtZSk7CisgICAgdm9pZCBwb3BCbG9jayhjb25zdCBET006OlF1YWxpZmllZE5h
bWUmIHFOYW1lKSB7IHJldHVybiBwb3BCbG9jayhxTmFtZS5sb2NhbE5hbWUoKSk7IH0gLy8gQ29u
dmVuaWVuY2UgZnVuY3Rpb24gZm9yIHJlYWRhYmlsaXR5LgogICAgIHZvaWQgcG9wT25lQmxvY2so
Ym9vbCBkZWxCbG9jayA9IHRydWUpOwogICAgIHZvaWQgcG9wSW5saW5lQmxvY2tzKCk7CiAKQEAg
LTEyOSwxNiArMTIwLDE4IEBAIHByb3RlY3RlZDoKIAogICAgIHZvaWQgY3JlYXRlSGVhZCgpOwog
Ci0gICAgYm9vbCBpc1Jlc2lkdWFsU3R5bGVUYWcoaW50IF9pZCk7Ci0gICAgYm9vbCBpc0FmZmVj
dGVkQnlSZXNpZHVhbFN0eWxlKGludCBfaWQpOworICAgIGJvb2wgaXNSZXNpZHVhbFN0eWxlVGFn
KGNvbnN0IERPTTo6QXRvbWljU3RyaW5nJiB0YWdOYW1lKTsKKyAgICBib29sIGlzQWZmZWN0ZWRC
eVJlc2lkdWFsU3R5bGUoY29uc3QgRE9NOjpBdG9taWNTdHJpbmcmIHRhZ05hbWUpOwogICAgIHZv
aWQgaGFuZGxlUmVzaWR1YWxTdHlsZUNsb3NlVGFnQWNyb3NzQmxvY2tzKEhUTUxTdGFja0VsZW0q
IGVsZW0pOwogICAgIHZvaWQgcmVvcGVuUmVzaWR1YWxTdHlsZVRhZ3MoSFRNTFN0YWNrRWxlbSog
ZWxlbSwgRE9NOjpOb2RlSW1wbCogbWFsZm9ybWVkVGFibGVQYXJlbnQpOwogCi0gICAgYm9vbCBh
bGxvd05lc3RlZFJlZHVuZGFudFRhZyhpbnQgX2lkKTsKKyAgICBib29sIGFsbG93TmVzdGVkUmVk
dW5kYW50VGFnKGNvbnN0IERPTTo6QXRvbWljU3RyaW5nJiB0YWdOYW1lKTsKICAgICAKLSAgICBz
dGF0aWMgYm9vbCBpc0hlYWRlclRhZyhpbnQgX2lkKTsKKyAgICBzdGF0aWMgYm9vbCBpc0hlYWRl
clRhZyhjb25zdCBET006OkF0b21pY1N0cmluZyYgdGFnTmFtZSk7CiAgICAgdm9pZCBwb3BOZXN0
ZWRIZWFkZXJUYWcoKTsKIAorICAgIGJvb2wgaXNJbmxpbmUoRE9NOjpOb2RlSW1wbCogbm9kZSkg
Y29uc3Q7CisgICAgCiAgICAgLyoKICAgICAgKiBjdXJyZW50bHkgYWN0aXZlIGZvcm0KICAgICAg
Ki8KQEAgLTE3NSwxOCArMTY4LDEyIEBAIHByb3RlY3RlZDoKICAgICAvKgogICAgICAqIHRlbGxz
IHRoZSBwYXJzZXIgdG8gZGlzY2FyZCBhbGwgdGFncywgdW50aWwgaXQgcmVhY2hlcyB0aGUgb25l
IHNwZWNpZmllZAogICAgICAqLwotICAgIGludCBkaXNjYXJkX3VudGlsOworICAgIERPTTo6QXRv
bWljU3RyaW5nIGRpc2NhcmRfdW50aWw7CiAKICAgICBib29sIGhlYWRMb2FkZWQ7CiAgICAgaW50
IGluU3RyYXlUYWJsZUNvbnRlbnQ7CiAKICAgICBib29sIGluY2x1ZGVzQ29tbWVudHNJbkRPTTsK
LSAgICAKLSAgICB1c2hvcnQgZm9yYmlkZGVuVGFnW0lEX0xBU1RfVEFHICsgMV07Ci0gICAgCi0j
aWYgU1BFRURfREVCVUcgPiAwCi0gICAgUVRpbWUgcXQ7Ci0jZW5kaWYKIH07CiAKICNlbmRpZiAv
LyBIVE1MUEFSU0VSX0gKSW5kZXg6IGtodG1sL2h0bWwvaHRtbHRva2VuaXplci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sdG9rZW5pemVy
LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS45MgpkaWZmIC11IC1wIC1yMS45MiBraHRtbC9o
dG1sL2h0bWx0b2tlbml6ZXIuY3BwCi0tLSBraHRtbC9odG1sL2h0bWx0b2tlbml6ZXIuY3BwCTE0
IEp1biAyMDA1IDIyOjM2OjMwIC0wMDAwCTEuOTIKKysrIGtodG1sL2h0bWwvaHRtbHRva2VuaXpl
ci5jcHAJMTcgSnVuIDIwMDUgMDE6MzI6NTUgLTAwMDAKQEAgLTM5LDcgKzM5LDYgQEAKICNpbmNs
dWRlICJodG1sL2h0bWx0b2tlbml6ZXIuaCIKICNpbmNsdWRlICJodG1sL2h0bWxfZG9jdW1lbnRp
bXBsLmgiCiAjaW5jbHVkZSAiaHRtbC9odG1scGFyc2VyLmgiCi0jaW5jbHVkZSAiaHRtbC9kdGQu
aCIKIAogI2luY2x1ZGUgIm1pc2MvbG9hZGVyLmgiCiAjaW5jbHVkZSAibWlzYy9odG1saGFzaGVz
LmgiCkBAIC02Myw3ICs2Miw4IEBAIHVzaW5nIERPTTo6RE9NU3RyaW5nOwogdXNpbmcgRE9NOjpE
T01TdHJpbmdJbXBsOwogdXNpbmcgRE9NOjpEb2N1bWVudEltcGw7CiB1c2luZyBET006OmVtcHR5
QXRvbTsKLXVzaW5nIERPTTo6ZW5kVGFnUmVxdWlyZW1lbnQ7Cit1c2luZyBET006OmNvbW1lbnRB
dG9tOwordXNpbmcgRE9NOjpIVE1MTmFtZXM7CiAKIC8vIHR1cm4gb2ZmIGlubGluaW5nIHRvIHZv
aWQgd2FybmluZyB3aXRoIG5ld2VyIGdjYwogI3VuZGVmIF9faW5saW5lCkBAIC00NTEsMTAgKzQ1
MSwxMCBAQCB2b2lkIEhUTUxUb2tlbml6ZXI6OnBhcnNlU3BlY2lhbChUb2tlbml6CiAgICAgICAg
ICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBwcm9jZXNzTGlzdGluZyhUb2tlbml6ZXJTdHJp
bmcoc2NyaXB0Q29kZSwgc2NyaXB0Q29kZVNpemUpKTsKICAgICAgICAgICAgICAgICBwcm9jZXNz
VG9rZW4oKTsKLSAgICAgICAgICAgICAgICBpZiAoIHN0eWxlICkgICAgICAgICB7IGN1cnJUb2tl
bi5pZCA9IElEX1NUWUxFICsgSURfQ0xPU0VfVEFHOyB9Ci0gICAgICAgICAgICAgICAgZWxzZSBp
ZiAoIHRleHRhcmVhICkgeyBjdXJyVG9rZW4uaWQgPSBJRF9URVhUQVJFQSArIElEX0NMT1NFX1RB
RzsgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKCB0aXRsZSApIHsgY3VyclRva2VuLmlkID0g
SURfVElUTEUgKyBJRF9DTE9TRV9UQUc7IH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmICggeG1w
ICkgIHsgY3VyclRva2VuLmlkID0gSURfWE1QICsgSURfQ0xPU0VfVEFHOyB9CisgICAgICAgICAg
ICAgICAgaWYgKCBzdHlsZSApICAgICAgICAgeyBjdXJyVG9rZW4udGFnTmFtZSA9IEhUTUxOYW1l
czo6c3R5bGUoKS5sb2NhbE5hbWUoKTsgY3VyclRva2VuLmJlZ2luVGFnID0gZmFsc2U7IH0KKyAg
ICAgICAgICAgICAgICBlbHNlIGlmICggdGV4dGFyZWEgKSB7IGN1cnJUb2tlbi50YWdOYW1lID0g
SFRNTE5hbWVzOjp0ZXh0YXJlYSgpLmxvY2FsTmFtZSgpOyBjdXJyVG9rZW4uYmVnaW5UYWcgPSBm
YWxzZTsgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKCB0aXRsZSApIHsgY3VyclRva2VuLnRh
Z05hbWUgPSBIVE1MTmFtZXM6OnRpdGxlKCkubG9jYWxOYW1lKCk7IGN1cnJUb2tlbi5iZWdpblRh
ZyA9IGZhbHNlOyB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoIHhtcCApICB7IGN1cnJUb2tl
bi50YWdOYW1lID0gSFRNTE5hbWVzOjp4bXAoKS5sb2NhbE5hbWUoKTsgY3VyclRva2VuLmJlZ2lu
VGFnID0gZmFsc2U7IH0KICAgICAgICAgICAgICAgICBwcm9jZXNzVG9rZW4oKTsKICAgICAgICAg
ICAgICAgICBzdHlsZSA9IHNjcmlwdCA9IHN0eWxlID0gdGV4dGFyZWEgPSB0aXRsZSA9IHhtcCA9
IGZhbHNlOwogICAgICAgICAgICAgICAgIHRxdW90ZSA9IE5vUXVvdGU7CkBAIC01MjQsNyArNTI0
LDggQEAgdm9pZCBIVE1MVG9rZW5pemVyOjpzY3JpcHRIYW5kbGVyKCkKICAgICBwcm9jZXNzTGlz
dGluZyhUb2tlbml6ZXJTdHJpbmcoc2NyaXB0Q29kZSwgc2NyaXB0Q29kZVNpemUpKTsKICAgICBR
U3RyaW5nIGV4U2NyaXB0KCBidWZmZXIsIGRlc3QtYnVmZmVyICk7CiAgICAgcHJvY2Vzc1Rva2Vu
KCk7Ci0gICAgY3VyclRva2VuLmlkID0gSURfU0NSSVBUICsgSURfQ0xPU0VfVEFHOworICAgIGN1
cnJUb2tlbi50YWdOYW1lID0gSFRNTE5hbWVzOjpzY3JpcHQoKS5sb2NhbE5hbWUoKTsKKyAgICBj
dXJyVG9rZW4uYmVnaW5UYWcgPSBmYWxzZTsKICAgICBwcm9jZXNzVG9rZW4oKTsKIAogICAgIFRv
a2VuaXplclN0cmluZyAqc2F2ZWRQcmVwZW5kaW5nU3JjID0gY3VycmVudFByZXBlbmRpbmdTcmM7
CkBAIC03MDEsMTAgKzcwMiwxMSBAQCB2b2lkIEhUTUxUb2tlbml6ZXI6OnBhcnNlQ29tbWVudChU
b2tlbml6CiAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja1NjcmlwdEJ1ZmZlcigpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgc2NyaXB0Q29kZVsgc2NyaXB0Q29kZVNpemUgXSA9IDA7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHRDb2RlWyBzY3JpcHRDb2RlU2l6ZSArIDEgXSA9
IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjdXJyVG9rZW4uaWQgPSBJRF9DT01NRU5UOwor
ICAgICAgICAgICAgICAgICAgICAgICAgY3VyclRva2VuLnRhZ05hbWUgPSBjb21tZW50QXRvbTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NMaXN0aW5nKFRva2VuaXplclN0cmluZyhz
Y3JpcHRDb2RlLCBzY3JpcHRDb2RlU2l6ZSAtIGVuZENoYXJzQ291bnQpKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIHByb2Nlc3NUb2tlbigpOwotICAgICAgICAgICAgICAgICAgICAgICAgY3Vy
clRva2VuLmlkID0gSURfQ09NTUVOVCArIElEX0NMT1NFX1RBRzsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGN1cnJUb2tlbi50YWdOYW1lID0gY29tbWVudEF0b207CisgICAgICAgICAgICAgICAg
ICAgICAgICBjdXJyVG9rZW4uYmVnaW5UYWcgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIHByb2Nlc3NUb2tlbigpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgIHNjcmlwdENvZGVTaXplID0gMDsKQEAgLTEwNjYsNyArMTA2OCw4IEBAIHZvaWQgSFRN
TFRva2VuaXplcjo6cGFyc2VUYWcoVG9rZW5pemVyU3QKICAgICAgICAgICAgICAgICAgICAgUUNT
dHJpbmcgdG1wKHB0ciwgbGVuKzEpOwogICAgICAgICAgICAgICAgICAgICBrZERlYnVnKCA2MDM2
ICkgPDwgImZvdW5kIHRhZyBpZD0iIDw8IHRhZ0lEIDw8ICI6ICIgPDwgdG1wLmRhdGEoKSA8PCBl
bmRsOwogI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgIGN1cnJUb2tlbi5pZCA9IGJlZ2luVGFn
ID8gdGFnSUQgOiB0YWdJRCArIElEX0NMT1NFX1RBRzsKKyAgICAgICAgICAgICAgICAgICAgY3Vy
clRva2VuLmlkID0gdGFnSUQ7CisgICAgICAgICAgICAgICAgICAgIGN1cnJUb2tlbi5iZWdpblRh
ZyA9IGJlZ2luVGFnOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBkZXN0ID0g
YnVmZmVyOwogICAgICAgICAgICAgICAgIHRhZyA9IFNlYXJjaEF0dHJpYnV0ZTsKSW5kZXg6IGto
dG1sL2h0bWwvaHRtbHRva2VuaXplci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9X
ZWJDb3JlL2todG1sL2h0bWwvaHRtbHRva2VuaXplci5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjM0CmRpZmYgLXUgLXAgLXIxLjM0IGtodG1sL2h0bWwvaHRtbHRva2VuaXplci5oCi0tLSBraHRt
bC9odG1sL2h0bWx0b2tlbml6ZXIuaAkxMSBNYXkgMjAwNSAwNTo0OTozNCAtMDAwMAkxLjM0Cisr
KyBraHRtbC9odG1sL2h0bWx0b2tlbml6ZXIuaAkxNyBKdW4gMjAwNSAwMTozMjo1NSAtMDAwMApA
QCAtMzQsOCArMzQsNiBAQAogI2luY2x1ZGUgPHFwdHJxdWV1ZS5oPgogCiAjaW5jbHVkZSAibWlz
Yy9sb2FkZXJfY2xpZW50LmgiCi0jaW5jbHVkZSAibWlzYy9odG1sdGFncy5oIgotI2luY2x1ZGUg
InhtbC9kb21fc3RyaW5naW1wbC5oIgogI2luY2x1ZGUgInhtbC94bWxfdG9rZW5pemVyLmgiCiAj
aW5jbHVkZSAiaHRtbC9odG1sX2VsZW1lbnRpbXBsLmgiCiAjaW5jbHVkZSAieG1sL2RvbV9kb2Np
bXBsLmgiCkBAIC03MCwyMiArNjgsMjQgQEAgY2xhc3MgVG9rZW4KIHsKIHB1YmxpYzoKICAgICBU
b2tlbigpIHsKLSAgICAgICAgaWQgPSAwOwogICAgICAgICBhdHRycyA9IDA7CiAgICAgICAgIHRl
eHQgPSAwOworICAgICAgICBiZWdpblRhZyA9IHRydWU7CiAgICAgICAgIGZsYXQgPSBmYWxzZTsK
ICAgICAgICAgLy9xRGVidWcoIm5ldyB0b2tlbiwgY3JlYXRpbmcgJTA4bHgiLCBhdHRycyk7CiAg
ICAgfQorCiAgICAgflRva2VuKCkgewotICAgICAgICBpZihhdHRycykgYXR0cnMtPmRlcmVmKCk7
Ci0gICAgICAgIGlmKHRleHQpIHRleHQtPmRlcmVmKCk7CisgICAgICAgIGlmIChhdHRycykgYXR0
cnMtPmRlcmVmKCk7CisgICAgICAgIGlmICh0ZXh0KSB0ZXh0LT5kZXJlZigpOwogICAgIH0KKwog
ICAgIHZvaWQgYWRkQXR0cmlidXRlKERPTTo6RG9jdW1lbnRJbXBsKiBkb2MsIFFDaGFyKiBidWZm
ZXIsIGNvbnN0IFFTdHJpbmcmIGF0dHJOYW1lLCBjb25zdCBET006OkF0b21pY1N0cmluZyYgdikK
ICAgICB7CiAgICAgICAgIERPTTo6QXR0cmlidXRlSW1wbCogYSA9IDA7Ci0gICAgICAgIGlmKGJ1
ZmZlci0+dW5pY29kZSgpKQorICAgICAgICBpZiAoYnVmZmVyLT51bmljb2RlKCkpCiAgICAgICAg
ICAgICBhID0gbmV3IERPTTo6TWFwcGVkQXR0cmlidXRlSW1wbChidWZmZXItPnVuaWNvZGUoKSwg
dik7Ci0gICAgICAgIGVsc2UgaWYgKCAhYXR0ck5hbWUuaXNFbXB0eSgpICYmIGF0dHJOYW1lICE9
ICIvIiApCisgICAgICAgIGVsc2UgaWYgKCFhdHRyTmFtZS5pc0VtcHR5KCkgJiYgYXR0ck5hbWUg
IT0gIi8iKQogICAgICAgICAgICAgYSA9IG5ldyBET006Ok1hcHBlZEF0dHJpYnV0ZUltcGwoZG9j
LT5hdHRySWQoMCwgRE9NOjpET01TdHJpbmcoYXR0ck5hbWUpLmltcGxlbWVudGF0aW9uKCksIGZh
bHNlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYpOwog
CkBAIC05NywyMyArOTcsMzMgQEAgcHVibGljOgogICAgICAgICAgICAgYXR0cnMtPmluc2VydEF0
dHJpYnV0ZShhKTsKICAgICAgICAgfQogICAgIH0KKworICAgIGJvb2wgaXNPcGVuVGFnKGNvbnN0
IERPTTo6UXVhbGlmaWVkTmFtZSYgZnVsbE5hbWUpIGNvbnN0IHsgcmV0dXJuIGJlZ2luVGFnICYm
IGZ1bGxOYW1lLmxvY2FsTmFtZSgpID09IHRhZ05hbWU7IH0KKyAgICBib29sIGlzQ2xvc2VUYWco
Y29uc3QgRE9NOjpRdWFsaWZpZWROYW1lJiBmdWxsTmFtZSkgY29uc3QgeyByZXR1cm4gIWJlZ2lu
VGFnICYmIGZ1bGxOYW1lLmxvY2FsTmFtZSgpID09IHRhZ05hbWU7IH0KKwogICAgIHZvaWQgcmVz
ZXQoKQogICAgIHsKLSAgICAgICAgaWYoYXR0cnMpIHsKKyAgICAgICAgaWYgKGF0dHJzKSB7CiAg
ICAgICAgICAgICBhdHRycy0+ZGVyZWYoKTsKICAgICAgICAgICAgIGF0dHJzID0gMDsKICAgICAg
ICAgfQotICAgICAgICBpZCA9IDA7Ci0gICAgICAgIGlmKHRleHQpIHsKKyAgICAgICAgCisgICAg
ICAgIHRhZ05hbWUgPSBET006Om51bGxBdG9tOworICAgICAgICAKKyAgICAgICAgaWYgKHRleHQp
IHsKICAgICAgICAgICAgIHRleHQtPmRlcmVmKCk7CiAgICAgICAgICAgICB0ZXh0ID0gMDsKICAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgYmVnaW5UYWcgPSB0cnVlOwogICAgICAgICBmbGF0
ID0gZmFsc2U7CiAgICAgfQorCiAgICAgRE9NOjpOYW1lZE1hcHBlZEF0dHJNYXBJbXBsKiBhdHRy
czsKICAgICBET006OkRPTVN0cmluZ0ltcGwqIHRleHQ7Ci0gICAgdXNob3J0IGlkOwotICAgIGJv
b2wgZmxhdDsKKyAgICBET006OkF0b21pY1N0cmluZyB0YWdOYW1lOworICAgIGJvb2wgYmVnaW5U
YWcgOiAxOworICAgIGJvb2wgZmxhdCA6IDE7CiB9OwogCiAvLyBUaGUgY291bnQgb2Ygc3BhY2Vz
IHVzZWQgZm9yIGVhY2ggdGFiLgpJbmRleDoga2h0bWwvbWlzYy9odG1saGFzaGVzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9taXNjL2h0bWxoYXNoZXMu
Y3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEwCmRpZmYgLXUgLXAgLXIxLjEwIGtodG1sL21p
c2MvaHRtbGhhc2hlcy5jcHAKLS0tIGtodG1sL21pc2MvaHRtbGhhc2hlcy5jcHAJNSBKYW4gMjAw
NSAyMjo1Njo0NiAtMDAwMAkxLjEwCisrKyBraHRtbC9taXNjL2h0bWxoYXNoZXMuY3BwCTE3IEp1
biAyMDA1IDAxOjMyOjU1IC0wMDAwCkBAIC0yNSwyMiArMjUsMTMgQEAKIC8vIHR1cm4gb2ZmIGlu
bGluaW5nIHRvIHZvaWQgd2FybmluZyB3aXRoIG5ld2VyIGdjYwogI3VuZGVmIF9faW5saW5lCiAj
ZGVmaW5lIF9faW5saW5lCi0jaW5jbHVkZSAiaHRtbHRhZ3MuYyIKICNpbmNsdWRlICJodG1sYXR0
cnMuYyIKICN1bmRlZiBfX2lubGluZQogCi11bnNpZ25lZCBzaG9ydCBraHRtbDo6Z2V0VGFnSUQo
Y29uc3QgY2hhciAqdGFnU3RyLCBpbnQgbGVuKQordW5zaWduZWQgc2hvcnQga2h0bWw6OmdldEF0
dHJJRChjb25zdCBjaGFyICphdHRyU3RyLCBpbnQgbGVuKQogewotICAgIGNvbnN0IHN0cnVjdCB0
YWdzICp0YWdQdHIgPSBmaW5kVGFnKHRhZ1N0ciwgbGVuKTsKLSAgICBpZiAoIXRhZ1B0cikKKyAg
ICBjb25zdCBzdHJ1Y3QgYXR0cnMgKmF0dHJQdHIgPSBmaW5kQXR0cihhdHRyU3RyLCBsZW4pOwor
ICAgIGlmICghYXR0clB0cikKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIHRhZ1B0ci0+
aWQ7Ci19Ci0KLXVuc2lnbmVkIHNob3J0IGtodG1sOjpnZXRBdHRySUQoY29uc3QgY2hhciAqdGFn
U3RyLCBpbnQgbGVuKQotewotICAgIGNvbnN0IHN0cnVjdCBhdHRycyAqdGFnUHRyID0gZmluZEF0
dHIodGFnU3RyLCBsZW4pOwotICAgIGlmICghdGFnUHRyKQotICAgICAgICByZXR1cm4gMDsKLSAg
ICByZXR1cm4gdGFnUHRyLT5pZDsKKyAgICByZXR1cm4gYXR0clB0ci0+aWQ7CiB9CkluZGV4OiBr
aHRtbC9taXNjL2h0bWxoYXNoZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2Vi
Q29yZS9raHRtbC9taXNjL2h0bWxoYXNoZXMuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS42CmRp
ZmYgLXUgLXAgLXIxLjYga2h0bWwvbWlzYy9odG1saGFzaGVzLmgKLS0tIGtodG1sL21pc2MvaHRt
bGhhc2hlcy5oCTUgSmFuIDIwMDUgMjI6NTY6NDYgLTAwMDAJMS42CisrKyBraHRtbC9taXNjL2h0
bWxoYXNoZXMuaAkxNyBKdW4gMjAwNSAwMTozMjo1NSAtMDAwMApAQCAtMjMsMTIgKzIzLDEwIEBA
CiAjaWZuZGVmIEhUTUxIQVNIRVNfSAogI2RlZmluZSBIVE1MSEFTSEVTX0gKIAotI2luY2x1ZGUg
Imh0bWx0YWdzLmgiCiAjaW5jbHVkZSAiaHRtbGF0dHJzLmgiCiAKIG5hbWVzcGFjZSBraHRtbAog
ewotICB1bnNpZ25lZCBzaG9ydCBnZXRUYWdJRChjb25zdCBjaGFyICp0YWdTdHIsIGludCBsZW4p
OwogICB1bnNpZ25lZCBzaG9ydCBnZXRBdHRySUQoY29uc3QgY2hhciAqdGFnU3RyLCBpbnQgbGVu
KTsKIH0KIApJbmRleDoga2h0bWwvbWlzYy9odG1sdGFncy5pbgo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiBraHRtbC9taXNjL2h0bWx0YWdzLmluCmRpZmYgLU4ga2h0bWwvbWlzYy9odG1sdGFncy5pbgot
LS0ga2h0bWwvbWlzYy9odG1sdGFncy5pbgkxMSBNYXkgMjAwNSAyMzo0NToyOSAtMDAwMAkxLjcK
KysrIC9kZXYvbnVsbAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCkBAIC0xLDEwMiArMCwwIEBA
Ci1hCi1hYmJyCi1hY3JvbnltCi1hZGRyZXNzCi1hcHBsZXQKLWFyZWEKLWIKLWJhc2UKLWJhc2Vm
b250Ci1iZG8KLWJpZwotYmxvY2txdW90ZQotYm9keQotYnIKLWJ1dHRvbgotY2FudmFzCi1jYXB0
aW9uCi1jZW50ZXIKLWNpdGUKLWNvZGUKLWNvbAotY29sZ3JvdXAKLWRkCi1kZWwKLWRmbgotZGly
Ci1kaXYKLWRsCi1kdAotZW0KLWVtYmVkCi1maWVsZHNldAotZm9udAotZm9ybQotZnJhbWUKLWZy
YW1lc2V0Ci1oMQotaDIKLWgzCi1oNAotaDUKLWg2Ci1oZWFkCi1ocgotaHRtbAotaQotaWZyYW1l
Ci1pbWcKLWlucHV0Ci1pbnMKLWlzaW5kZXgKLWtiZAota2V5Z2VuCi1sYWJlbAotbGF5ZXIKLWxl
Z2VuZAotbGkKLWxpbmsKLW1hcAotbWFycXVlZQotbWVudQotbWV0YQotbm9icgotbm9lbWJlZAot
bm9mcmFtZXMKLW5vc2NyaXB0Ci1ub2xheWVyCi1vYmplY3QKLW9sCi1vcHRncm91cAotb3B0aW9u
Ci1wCi1wYXJhbQotcGxhaW50ZXh0Ci1wcmUKLXEKLXMKLXNhbXAKLXNjcmlwdAotc2VsZWN0Ci1z
bWFsbAotc3Bhbgotc3RyaWtlCi1zdHJvbmcKLXN0eWxlCi1zdWIKLXN1cAotdGFibGUKLXRib2R5
Ci10ZAotdGV4dGFyZWEKLXRmb290Ci10aAotdGhlYWQKLXRpdGxlCi10cgotdHQKLXUKLXVsCi12
YXIKLXdicgoteG1wCkluZGV4OiBraHRtbC9taXNjL21ha2V0YWdzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IGtodG1sL21pc2MvbWFrZXRhZ3MKZGlmZiAtTiBraHRtbC9taXNjL21ha2V0YWdzCi0tLSBr
aHRtbC9taXNjL21ha2V0YWdzCTYgSmFuIDIwMDUgMjE6MTM6MTYgLTAwMDAJMS4xMworKysgL2Rl
di9udWxsCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKQEAgLTEsMTIxICswLDAgQEAKLSMhL3Vz
ci9iaW4vcGVybAotIyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgbGlicmFyaWVzCi0j
Ci0jICAgQ29weXJpZ2h0IChDKSAxOTk4IFdhbGRvIEJhc3RpYW4gKGJhc3RpYW5Aa2RlLm9yZykK
LSMgICAgICAgICAgICAgICAgIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKLSMgICBD
b3B5cmlnaHQgKEMpIDIwMDQgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0jCi0jICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgotIyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0jICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0jICAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotIwotIyAgIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAotIyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCi0jICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSMgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSMKLSMgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0jICAg
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KLSMgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBU
ZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCi0jICAgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0Eu
Ci0jCi0jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIwotIyAgS0RFIEhUTUwgV2lkZ2V0IC0tIFNjcmlw
dCB0byBnZW5lcmF0ZSBodG1sdGFncy5jIGFuZCBodG1sdGFncy5oCi0jCi0KLXVzZSBzdHJpY3Q7
Ci0KLW9wZW4gSU4sICJodG1sdGFncy5pbiIKLSAgb3IgZGllICJDYW4ndCBvcGVuIGluXG4iOwot
b3BlbiBoZWFkZXIsICI+aHRtbHRhZ3MuaCIKLSAgb3IgZGllICJDYW4ndCBvcGVuIGhlYWRlclxu
IjsKLW9wZW4gb3V0LCAiPmh0bWx0YWdzLmdwZXJmIgotICBvciBkaWUgIkNhbid0IG9wZW4gb3V0
XG4iOwotCi1wcmludCBvdXQgIiV7XG4vKiBUaGlzIGZpbGUgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBodG1sdGFncy5pbiBieSBtYWtldGFncywgZG8gbm90IGVkaXQgKi9cbi8qIENv
cHlyaWdodCAxOTk5IExhcnMgS25vbGwgKi9cbiNpbmNsdWRlIFwiaHRtbHRhZ3MuaFwiXG4lfVxu
IjsKLXByaW50IG91dCAic3RydWN0IHRhZ3Mge1xuICAgIGNvbnN0IGNoYXIgKm5hbWU7XG4gICAg
aW50IGlkO1xufTtcbiUlXG4iOwotCi1wcmludCBoZWFkZXIgIi8qIFRoaXMgZmlsZSBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tCi1odG1sdGFncy5pbiBieSBtYWtldGFncywgZG8gbm90
IGVkaXQgKi9cbi8qIENvcHlyaWdodCAxOTk5IExhcnMgS25vbGwgKi9cbi8qIENvcHlyaWdodCAy
MDA0IEFwcGxlIENvbXB1dGVyLCBJbmMuICovXG5cbiNpZm5kZWYgS0hUTUxfVEFHU19IXG4jZGVm
aW5lIEtIVE1MX1RBR1NfSFxuXG4jaW5jbHVkZSBcImRvbS9kb21fc3RyaW5nLmhcIlxuXG4iOwot
Ci1wcmludCBoZWFkZXIgIkRPTTo6RE9NU3RyaW5nIGdldFRhZ05hbWUodW5zaWduZWQgc2hvcnQg
aWQpO1xuXG4iOwotCi1teSAkbnVtID0gMDsKLW15ICRvcGVuVGFncyA9ICIiOwotbXkgJGNsb3Nl
VGFncyA9ICIiOwotd2hpbGUgKDxJTj4pIHsKLSAgICBjaG9tcDsKLSAgICBteSAkYXR0ciA9ICRf
OwotICAgICRudW0gKz0gMTsKLSAgICBteSAkdXAgPSB1YygkYXR0cik7Ci0gICAgJG9wZW5UYWdz
IC49ICIgICAgXCIkdXBcIixcbiI7Ci0gICAgJGNsb3NlVGFncyAuPSAiICAgIFwiLyR1cFwiLFxu
IjsKLSAgICAkdXAgPX4gcy8tL18vOwotICAgIHByaW50IG91dCAkYXR0ciAuICIsIElEXyIgLiAk
dXAgLiAiXG4iOwotICAgIHByaW50IGhlYWRlciAiY29uc3QgdW5zaWduZWQgc2hvcnQgSURfJHVw
ID0gJG51bTtcbiI7Ci19Ci1wcmludCBvdXQgImFuY2hvciwgSURfQVxuIjsKLXByaW50IG91dCAi
aW1hZ2UsIElEX0lNR1xuIjsKLXByaW50IG91dCAibGlzdGluZywgSURfUFJFXG4iOwotJG51bSAr
PSAxOwotcHJpbnQgaGVhZGVyICJjb25zdCB1bnNpZ25lZCBzaG9ydCBJRF9URVhUID0gJG51bTtc
biI7Ci0kbnVtICs9IDE7Ci1wcmludCBoZWFkZXIgImNvbnN0IHVuc2lnbmVkIHNob3J0IElEX0NP
TU1FTlQgPSAkbnVtO1xuIjsKLXByaW50IGhlYWRlciAiY29uc3QgdW5zaWduZWQgc2hvcnQgSURf
TEFTVF9UQUcgPSAkbnVtO1xuIjsKLXByaW50IGhlYWRlciAiY29uc3QgdW5zaWduZWQgc2hvcnQg
SURfQ0xPU0VfVEFHID0gMzIwMDA7XG4iOwotCi1wcmludCBvdXQgIiUlXG4iOwotY2xvc2Ugb3V0
OwotcHJpbnQgaGVhZGVyICJcbiNlbmRpZlxuIjsKLWNsb3NlIGhlYWRlcjsKLQotbXkgJHJlc3Vs
dCA9IHN5c3RlbSgiL2Jpbi9zaCIsICItYyIsICJncGVyZiAtYSAtTCAnQU5TSS1DJyAtRCAtRSAt
QyAtbCAtbyAtdCAtayAnKicgLU5maW5kVGFnIC1IaGFzaF90YWcgLVd3b3JkbGlzdF90YWcgaHRt
bHRhZ3MuZ3BlcmYgPiBodG1sdGFncy5jIik7Ci1pZiAoJHJlc3VsdCkgewotICB1bmxpbmsgImh0
bWx0YWdzLmMiOwotICBleGl0ICRyZXN1bHQ7Ci19Ci0KLW9wZW4gSU4sICJodG1sdGFncy5jIiBv
ciBkaWU7Ci0KLW15ICRudW1MaW5lcyA9IDA7Ci13aGlsZSAoPElOPikgewotICAgICRudW1MaW5l
cysrOwotfQotJG51bUxpbmVzICs9IDI7Ci0KLWNob21wICRvcGVuVGFnczsKLWNob21wICRjbG9z
ZVRhZ3M7Ci0KLW9wZW4gT1VULCAiPj5odG1sdGFncy5jIiBvciBkaWU7Ci1wcmludCBPVVQgPDxF
TkQKLSNsaW5lICRudW1MaW5lcyAiaHRtbHRhZ3MuYyIKLQotdXNpbmcgRE9NOjpET01TdHJpbmc7
Ci0KLXN0YXRpYyBjb25zdCBjaGFyICogY29uc3Qgb3BlblRhZ05hbWVzW10gPSB7Ci0gICAgMCwK
LSRvcGVuVGFncwotICAgICJURVhUIiwKLSAgICAiQ09NTUVOVCIKLX07Ci0KLXN0YXRpYyBjb25z
dCBjaGFyICogY29uc3QgY2xvc2VUYWdOYW1lc1tdID0gewotICAgIDAsCi0kY2xvc2VUYWdzCi19
OwotCi1ET01TdHJpbmcgZ2V0VGFnTmFtZSh1bnNpZ25lZCBzaG9ydCBpZCkKLXsKLSAgICBpZiAo
aWQgPiBJRF9DTE9TRV9UQUcpIHsKLSAgICAgICAgaW50IGluZGV4ID0gaWQgLSBJRF9DTE9TRV9U
QUc7Ci0gICAgICAgIGlmIChpbmRleCA+PSBJRF9URVhUKQotICAgICAgICAgICAgcmV0dXJuIERP
TVN0cmluZygpOwotICAgICAgICByZXR1cm4gY2xvc2VUYWdOYW1lc1tpbmRleF07Ci0gICAgfQot
ICAgIGlmIChpZCA+IElEX0xBU1RfVEFHKQotICAgICAgICByZXR1cm4gRE9NU3RyaW5nKCk7Ci0g
ICAgcmV0dXJuIG9wZW5UYWdOYW1lc1tpZF07Ci19Ci1FTkQKSW5kZXg6IGtodG1sL3JlbmRlcmlu
Zy9yZW5kZXJfY2FudmFzaW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9X
ZWJDb3JlL2todG1sL3JlbmRlcmluZy9yZW5kZXJfY2FudmFzaW1hZ2UuY3BwLHYKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjExCmRpZmYgLXUgLXAgLXIxLjExIGtodG1sL3JlbmRlcmluZy9yZW5kZXJf
Y2FudmFzaW1hZ2UuY3BwCi0tLSBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2NhbnZhc2ltYWdlLmNw
cAkyNSBNYXkgMjAwNSAwMTozMzoyMiAtMDAwMAkxLjExCisrKyBraHRtbC9yZW5kZXJpbmcvcmVu
ZGVyX2NhbnZhc2ltYWdlLmNwcAkxNyBKdW4gMjAwNSAwMTozMjo1NSAtMDAwMApAQCAtMzcsMTAg
KzM3LDggQEAKICNpbmNsdWRlICJjc3MvY3NzaGVscGVyLmgiCiAjaW5jbHVkZSAibWlzYy9oZWxw
ZXIuaCIKICNpbmNsdWRlICJtaXNjL2h0bWxhdHRycy5oIgotI2luY2x1ZGUgIm1pc2MvaHRtbHRh
Z3MuaCIKICNpbmNsdWRlICJodG1sL2h0bWxfZm9ybWltcGwuaCIKICNpbmNsdWRlICJodG1sL2h0
bWxfY2FudmFzaW1wbC5oIgotI2luY2x1ZGUgImh0bWwvZHRkLmgiCiAjaW5jbHVkZSAieG1sL2Rv
bTJfZXZlbnRzaW1wbC5oIgogI2luY2x1ZGUgImh0bWwvaHRtbF9kb2N1bWVudGltcGwuaCIKICNp
bmNsdWRlIDxtYXRoLmg+CkluZGV4OiBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2ltYWdlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9yZW5kZXJpbmcvcmVu
ZGVyX2ltYWdlLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS43NApkaWZmIC11IC1wIC1yMS43
NCBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2ltYWdlLmNwcAotLS0ga2h0bWwvcmVuZGVyaW5nL3Jl
bmRlcl9pbWFnZS5jcHAJMjUgRmViIDIwMDUgMDA6MjU6MTIgLTAwMDAJMS43NAorKysga2h0bWwv
cmVuZGVyaW5nL3JlbmRlcl9pbWFnZS5jcHAJMTcgSnVuIDIwMDUgMDE6MzI6NTYgLTAwMDAKQEAg
LTM2LDEwICszNiw4IEBACiAjaW5jbHVkZSAiY3NzL2Nzc2hlbHBlci5oIgogI2luY2x1ZGUgIm1p
c2MvaGVscGVyLmgiCiAjaW5jbHVkZSAibWlzYy9odG1sYXR0cnMuaCIKLSNpbmNsdWRlICJtaXNj
L2h0bWx0YWdzLmgiCiAjaW5jbHVkZSAiaHRtbC9odG1sX2Zvcm1pbXBsLmgiCiAjaW5jbHVkZSAi
aHRtbC9odG1sX2ltYWdlaW1wbC5oIgotI2luY2x1ZGUgImh0bWwvZHRkLmgiCiAjaW5jbHVkZSAi
eG1sL2RvbTJfZXZlbnRzaW1wbC5oIgogI2luY2x1ZGUgImh0bWwvaHRtbF9kb2N1bWVudGltcGwu
aCIKICNpbmNsdWRlIDxtYXRoLmg+CkluZGV4OiBraHRtbC94bWwvZG9tX2F0b21pY3N0cmluZy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwveG1sL2RvbV9h
dG9taWNzdHJpbmcuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjMKZGlmZiAtdSAtcCAtcjEu
MyBraHRtbC94bWwvZG9tX2F0b21pY3N0cmluZy5jcHAKLS0tIGtodG1sL3htbC9kb21fYXRvbWlj
c3RyaW5nLmNwcAk1IEZlYiAyMDA0IDAxOjQ1OjE2IC0wMDAwCTEuMworKysga2h0bWwveG1sL2Rv
bV9hdG9taWNzdHJpbmcuY3BwCTE3IEp1biAyMDA1IDAxOjMyOjU2IC0wMDAwCkBAIC0zMDQsNiAr
MzA0LDkgQEAgdm9pZCBBdG9taWNTdHJpbmc6OnJlaGFzaChpbnQgbmV3VGFibGVTaQogCiAgICAg
ZXh0ZXJuIGNvbnN0IEF0b21pY1N0cmluZyBudWxsQXRvbTsKICAgICBleHRlcm4gY29uc3QgQXRv
bWljU3RyaW5nIGVtcHR5QXRvbTsKKyAgICBleHRlcm4gY29uc3QgQXRvbWljU3RyaW5nIHRleHRB
dG9tOworICAgIGV4dGVybiBjb25zdCBBdG9taWNTdHJpbmcgY29tbWVudEF0b207CisgICAgZXh0
ZXJuIGNvbnN0IEF0b21pY1N0cmluZyBzdGFyQXRvbTsKICNlbHNlCiAgICAgLy8gRGVmaW5lIGFu
IEF0b21pY1N0cmluZy1zaXplZCBhcnJheSBvZiBwb2ludGVycyB0byBhdm9pZCBzdGF0aWMgaW5p
dGlhbGl6YXRpb24uCiAgICAgLy8gVXNlIGFuIGFycmF5IG9mIHBvaW50ZXJzIGluc3RlYWQgb2Yg
YW4gYXJyYXkgb2YgY2hhciBpbiBjYXNlIHRoZXJlIGlzIHNvbWUgYWxpZ25tZW50IGlzc3VlLgpA
QCAtMzEyLDYgKzMxNSw5IEBAIHZvaWQgQXRvbWljU3RyaW5nOjpyZWhhc2goaW50IG5ld1RhYmxl
U2kKIAogICAgIERFRklORV9HTE9CQUwobnVsbCwgaWdub3JlZCkKICAgICBERUZJTkVfR0xPQkFM
KGVtcHR5LCBpZ25vcmVkKQorICAgIERFRklORV9HTE9CQUwodGV4dCwgaWdub3JlZCkKKyAgICBE
RUZJTkVfR0xPQkFMKGNvbW1lbnQsIGlnbm9yZWQpCisgICAgREVGSU5FX0dMT0JBTChzdGFyLCBp
Z25vcmVkKQogI2VuZGlmCiAKICNkZWZpbmUgQ0FMTF9ERUZJTkVfR0xPQkFMKG5hbWUpIERFRklO
RV9HTE9CQUwobmFtZSwgI25hbWUpCkBAIC0zMjUsNyArMzMxLDEwIEBAIHZvaWQgQXRvbWljU3Ry
aW5nOjppbml0KCkKICAgICAgICAgLy8gVXNlIHBsYWNlbWVudCBuZXcgdG8gaW5pdGlhbGl6ZSB0
aGUgZ2xvYmFscy4KICAgICAgICAgbmV3ICgmbnVsbEF0b20pIEF0b21pY1N0cmluZzsKICAgICAg
ICAgbmV3ICgmZW1wdHlBdG9tKSBBdG9taWNTdHJpbmcoIiIpOwotICAgICAgICAKKyAgICAgICAg
bmV3ICgmdGV4dEF0b20pIEF0b21pY1N0cmluZygiI3RleHQiKTsKKyAgICAgICAgbmV3ICgmY29t
bWVudEF0b20pIEF0b21pY1N0cmluZygiI2NvbW1lbnQiKTsKKyAgICAgICAgbmV3ICgmc3RhckF0
b20pIEF0b21pY1N0cmluZygiKiIpOworCiAgICAgICAgICNkZWZpbmUgUExBQ0VNRU5UX05FV19H
TE9CQUwobmFtZSwgc3RyaW5nKSBuZXcgKCZuYW1lICMjIFByb3BlcnR5TmFtZSkgQXRvbWljU3Ry
aW5nKHN0cmluZyk7CiAgICAgICAgICNkZWZpbmUgQ0FMTF9QTEFDRU1FTlRfTkVXX0dMT0JBTChu
YW1lKSBQTEFDRU1FTlRfTkVXX0dMT0JBTChuYW1lLCAjbmFtZSkKICAgICAgICAgS0hUTUxfQVRP
TUlDU1RSSU5HX0VBQ0hfR0xPQkFMKENBTExfUExBQ0VNRU5UX05FV19HTE9CQUwpCkluZGV4OiBr
aHRtbC94bWwvZG9tX2F0b21pY3N0cmluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9XZWJDb3JlL2todG1sL3htbC9kb21fYXRvbWljc3RyaW5nLmgsdgpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuMgpkaWZmIC11IC1wIC1yMS4yIGtodG1sL3htbC9kb21fYXRvbWljc3RyaW5nLmgKLS0t
IGtodG1sL3htbC9kb21fYXRvbWljc3RyaW5nLmgJMyBNYXIgMjAwNCAwMDo0Mjo0OSAtMDAwMAkx
LjIKKysrIGtodG1sL3htbC9kb21fYXRvbWljc3RyaW5nLmgJMTcgSnVuIDIwMDUgMDE6MzI6NTYg
LTAwMDAKQEAgLTExNSw2ICsxMTUsOSBAQCBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEF0
b21pY1N0cmluCiAjaWYgIUtIVE1MX0FUT01JQ1NUUklOR19ISURFX0dMT0JBTFMKICAgICBleHRl
cm4gY29uc3QgQXRvbWljU3RyaW5nIG51bGxBdG9tOwogICAgIGV4dGVybiBjb25zdCBBdG9taWNT
dHJpbmcgZW1wdHlBdG9tOworICAgIGV4dGVybiBjb25zdCBBdG9taWNTdHJpbmcgdGV4dEF0b207
CisgICAgZXh0ZXJuIGNvbnN0IEF0b21pY1N0cmluZyBjb21tZW50QXRvbTsKKyAgICBleHRlcm4g
Y29uc3QgQXRvbWljU3RyaW5nIHN0YXJBdG9tOwogI2RlZmluZSBLSFRNTF9BVE9NSUNTVFJJTkdf
REVDTEFSRV9HTE9CQUwobmFtZSkgZXh0ZXJuIGNvbnN0IEF0b21pY1N0cmluZyBuYW1lICMjIFBy
b3BlcnR5TmFtZTsKICAgICBLSFRNTF9BVE9NSUNTVFJJTkdfRUFDSF9HTE9CQUwoS0hUTUxfQVRP
TUlDU1RSSU5HX0RFQ0xBUkVfR0xPQkFMKQogICAgIEtIVE1MX0FUT01JQ1NUUklOR19ERUNMQVJF
X0dMT0JBTChzcGVjaWFsUHJvdG90eXBlKQpJbmRleDoga2h0bWwveG1sL2RvbV9kb2NpbXBsLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwveG1sL2RvbV9kb2Np
bXBsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTE0CmRpZmYgLXUgLXAgLXIxLjExNCBraHRt
bC94bWwvZG9tX2RvY2ltcGwuaAotLS0ga2h0bWwveG1sL2RvbV9kb2NpbXBsLmgJMTMgTWF5IDIw
MDUgMTY6NDg6NTEgLTAwMDAJMS4xMTQKKysrIGtodG1sL3htbC9kb21fZG9jaW1wbC5oCTE3IEp1
biAyMDA1IDAxOjMyOjU5IC0wMDAwCkBAIC0yMTcsOCArMjE3LDggQEAgcHVibGljOgogICAgIHZp
cnR1YWwgYm9vbCBpc0RvY3VtZW50Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICB2
aXJ0dWFsIGJvb2wgaXNIVE1MRG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCi0g
ICAgRWxlbWVudEltcGwgKmNyZWF0ZUhUTUxFbGVtZW50KGNvbnN0IERPTVN0cmluZyAmdGFnTmFt
ZSwgaW50ICZleGNlcHRpb25jb2RlKTsKLSAgICBFbGVtZW50SW1wbCAqY3JlYXRlSFRNTEVsZW1l
bnQodW5zaWduZWQgc2hvcnQgdGFnSUQpOworICAgIEVsZW1lbnRJbXBsKiBjcmVhdGVIVE1MRWxl
bWVudChjb25zdCBET01TdHJpbmcgJnRhZ05hbWUsIGludCAmZXhjZXB0aW9uY29kZSk7CisgICAg
RWxlbWVudEltcGwqIGNyZWF0ZUhUTUxFbGVtZW50KGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxO
YW1lKTsKIAogICAgIGtodG1sOjpDU1NTdHlsZVNlbGVjdG9yICpzdHlsZVNlbGVjdG9yKCkgeyBy
ZXR1cm4gbV9zdHlsZVNlbGVjdG9yOyB9CiAKQEAgLTM5OCw5ICszOTgsNiBAQCBwdWJsaWM6CiAg
ICAgLy8gIyMjIHRoaW5rIGFib3V0IGltcGxlbWVudGluZyByZWYnY291bnRpbmcgZm9yIHRoZSBp
ZCdzCiAgICAgLy8gaW4gb3JkZXIgdG8gYmUgYWJsZSB0byByZWFzc2lnbiB0aG9zZSB0aGF0IGFy
ZSBubyBsb25nZXIgaW4gdXNlCiAgICAgLy8gKGNvdWxkIG1ha2UgcHJvYmxlbXMgd2hlbiBpdCBp
cyBzdGlsbCBrZXB0IHNvbWV3aGVyZSBhcm91bmQsIGkuZS4gc3R5bGVzZWxlY3RvcikKLSAgICBO
b2RlSW1wbDo6SWQgdGFnSWQoRE9NU3RyaW5nSW1wbCogX25hbWVzcGFjZVVSSSwgRE9NU3RyaW5n
SW1wbCAqX25hbWUsIGJvb2wgcmVhZG9ubHkpOwotICAgIERPTVN0cmluZyB0YWdOYW1lKE5vZGVJ
bXBsOjpJZCBfaWQpIGNvbnN0OwotCiAgICAgTm9kZUltcGw6OklkIGF0dHJJZChET01TdHJpbmdJ
bXBsKiBfbmFtZXNwYWNlVVJJLCBET01TdHJpbmdJbXBsICpfbmFtZSwgYm9vbCByZWFkb25seSk7
CiAgICAgRE9NU3RyaW5nIGF0dHJOYW1lKE5vZGVJbXBsOjpJZCBfaWQpIGNvbnN0OwogCkluZGV4
OiBraHRtbC94bWwvZG9tX2VsZW1lbnRpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvV2ViQ29yZS9raHRtbC94bWwvZG9tX2VsZW1lbnRpbXBsLmNwcCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS42NwpkaWZmIC11IC1wIC1yMS42NyBraHRtbC94bWwvZG9tX2VsZW1lbnRpbXBs
LmNwcAotLS0ga2h0bWwveG1sL2RvbV9lbGVtZW50aW1wbC5jcHAJMTEgTWF5IDIwMDUgMDU6NDk6
MzUgLTAwMDAJMS42NworKysga2h0bWwveG1sL2RvbV9lbGVtZW50aW1wbC5jcHAJMTcgSnVuIDIw
MDUgMDE6MzM6MDEgLTAwMDAKQEAgLTkwLDE4ICs5MCwxOCBAQCB1bnNpZ25lZCBzaG9ydCBBdHRy
SW1wbDo6bm9kZVR5cGUoKSBjb25zCiAgICAgcmV0dXJuIE5vZGU6OkFUVFJJQlVURV9OT0RFOwog
fQogCi1ET01TdHJpbmcgQXR0ckltcGw6OnByZWZpeCgpIGNvbnN0Citjb25zdCBBdG9taWNTdHJp
bmcmIEF0dHJJbXBsOjpwcmVmaXgoKSBjb25zdAogewogICAgIHJldHVybiBtX2F0dHJpYnV0ZS0+
cHJlZml4KCk7CiB9CiAKLXZvaWQgQXR0ckltcGw6OnNldFByZWZpeChjb25zdCBET01TdHJpbmcg
Jl9wcmVmaXgsIGludCAmZXhjZXB0aW9uY29kZSApCit2b2lkIEF0dHJJbXBsOjpzZXRQcmVmaXgo
Y29uc3QgQXRvbWljU3RyaW5nICZfcHJlZml4LCBpbnQgJmV4Y2VwdGlvbmNvZGUgKQogewogICAg
IGNoZWNrU2V0UHJlZml4KF9wcmVmaXgsIGV4Y2VwdGlvbmNvZGUpOwogICAgIGlmIChleGNlcHRp
b25jb2RlKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2F0dHJpYnV0ZS0+c2V0UHJlZml4KF9w
cmVmaXguaW1wbGVtZW50YXRpb24oKSk7CisgICAgbV9hdHRyaWJ1dGUtPnNldFByZWZpeChfcHJl
Zml4KTsKIH0KIAogRE9NU3RyaW5nIEF0dHJJbXBsOjpub2RlVmFsdWUoKSBjb25zdApAQCAtMjA2
LDcgKzIwNiw2IEBAIEVsZW1lbnRJbXBsOjpFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG8KICAg
ICA6IENvbnRhaW5lck5vZGVJbXBsKGRvYykKIHsKICAgICBuYW1lZEF0dHJNYXAgPSAwOwotICAg
IG1fcHJlZml4ID0gMDsKIH0KIAogRWxlbWVudEltcGw6On5FbGVtZW50SW1wbCgpCkBAIC0yMTUs
OSArMjE0LDYgQEAgRWxlbWVudEltcGw6On5FbGVtZW50SW1wbCgpCiAgICAgICAgIG5hbWVkQXR0
ck1hcC0+ZGV0YWNoRnJvbUVsZW1lbnQoKTsKICAgICAgICAgbmFtZWRBdHRyTWFwLT5kZXJlZigp
OwogICAgIH0KLQotICAgIGlmIChtX3ByZWZpeCkKLSAgICAgICAgbV9wcmVmaXgtPmRlcmVmKCk7
CiB9CiAKIHZvaWQgRWxlbWVudEltcGw6OnJlbW92ZUF0dHJpYnV0ZSggTm9kZUltcGw6OklkIGlk
LCBpbnQgJmV4Y2VwdGlvbmNvZGUgKQpAQCAtMzUxLDM2ICszNDcsMjUgQEAgdm9pZCBFbGVtZW50
SW1wbDo6c2V0QXR0cmlidXRlTWFwKCBOYW1lZAogYm9vbCBFbGVtZW50SW1wbDo6aGFzQXR0cmli
dXRlcygpIGNvbnN0CiB7CiAgICAgdXBkYXRlU3R5bGVBdHRyaWJ1dGVJZk5lZWRlZCgpOwotCiAg
ICAgcmV0dXJuIG5hbWVkQXR0ck1hcCAmJiBuYW1lZEF0dHJNYXAtPmxlbmd0aCgpID4gMDsKIH0K
IAogRE9NU3RyaW5nIEVsZW1lbnRJbXBsOjpub2RlTmFtZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IHRhZ05hbWUoKTsKLX0KLQotRE9NU3RyaW5nIEVsZW1lbnRJbXBsOjp0YWdOYW1lKCkgY29uc3QK
LXsKICAgICBET01TdHJpbmcgdG4gPSBnZXREb2N1bWVudCgpLT50YWdOYW1lKGlkKCkpOwotCi0g
ICAgaWYgKG1fcHJlZml4KQotICAgICAgICByZXR1cm4gRE9NU3RyaW5nKG1fcHJlZml4KSArICI6
IiArIHRuOwotCisgICAgaWYgKG1fdGFnTmFtZS5oYXNQcmVmaXgoKSkKKyAgICAgICAgcmV0dXJu
IERPTVN0cmluZyhtX3RhZ05hbWUucHJlZml4KCkpICsgIjoiICsgdG47CiAgICAgcmV0dXJuIHRu
OwogfQogCi12b2lkIEVsZW1lbnRJbXBsOjpzZXRQcmVmaXgoIGNvbnN0IERPTVN0cmluZyAmX3By
ZWZpeCwgaW50ICZleGNlcHRpb25jb2RlICkKK3ZvaWQgRWxlbWVudEltcGw6OnNldFByZWZpeChj
b25zdCBBdG9taWNTdHJpbmcgJl9wcmVmaXgsIGludCAmZXhjZXB0aW9uY29kZSkKIHsKICAgICBj
aGVja1NldFByZWZpeChfcHJlZml4LCBleGNlcHRpb25jb2RlKTsKICAgICBpZiAoZXhjZXB0aW9u
Y29kZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1fcHJlZml4KQotICAgICAgICBtX3By
ZWZpeC0+ZGVyZWYoKTsKLSAgICBtX3ByZWZpeCA9IF9wcmVmaXguaW1wbGVtZW50YXRpb24oKTsK
LSAgICBpZiAobV9wcmVmaXgpCi0gICAgICAgIG1fcHJlZml4LT5yZWYoKTsKKyAgICAvLyBGSVhN
RTogVGhpcyBpcyBqdXN0IGEgaGFjayBmb3Igc3RhZ2Ugb25lIG9mIHRoZSBUYWdOYW1lIHBhdGNo
LiAgSXQgd2lsbCBjaGFuZ2UuCisgICAgbV90YWdOYW1lLnNldFByZWZpeChfcHJlZml4KTsKIH0K
IAogdm9pZCBFbGVtZW50SW1wbDo6Y3JlYXRlQXR0cmlidXRlTWFwKCkgY29uc3QKQEAgLTc4Miwx
NSArNzY3LDE5IEBAIFhNTEVsZW1lbnRJbXBsOjpYTUxFbGVtZW50SW1wbChEb2N1bWVudFAKICAg
ICAgICAgbG9jYWxOYW1lLT5yZW1vdmUoMCxjb2xvbnBvcysxKTsKICAgICAgICAgbV9pZCA9IGRv
Yy0+ZG9jdW1lbnQoKS0+dGFnSWQoX25hbWVzcGFjZVVSSSwgbG9jYWxOYW1lLCBmYWxzZSAvKiBh
bGxvY2F0ZSAqLyk7CiAgICAgICAgIGxvY2FsTmFtZS0+ZGVyZWYoKTsKLSAgICAgICAgbV9wcmVm
aXggPSBfcXVhbGlmaWVkTmFtZS0+Y29weSgpOwotICAgICAgICBtX3ByZWZpeC0+cmVmKCk7Ci0g
ICAgICAgIG1fcHJlZml4LT50cnVuY2F0ZShjb2xvbnBvcyk7CisgICAgICAgIAorICAgICAgICAv
LyBGSVhNRTogVGhpcyBpcyBhIHRlbXBvcmFyeSBzaXR1YXRpb24gZm9yIHN0YWdlIG9uZSBvZiB0
aGUgUXVhbGlmaWVkTmFtZSBwYXRjaC4gIFRoaXMgaXMgYWxzbyBhIHJlYWxseSBzdHVwaWQgd2F5
IHRvCisgICAgICAgIC8vIGhhdmUgdG8gaGFuZGxlIHRoZSBwcmVmaXguICBXYXkgdG9vIG11Y2gg
Y29weWluZy4gIFdlIHNob3VsZCBtYWtlIHN1cmUgdGhlIFhNTCB0b2tlbml6ZXIgaGFzIGRvbmUg
dGhlIHNwbGl0CisgICAgICAgIC8vIGFscmVhZHkgaW50byBwcmVmaXggYW5kIGxvY2FsTmFtZS4K
KyAgICAgICAgRE9NU3RyaW5nSW1wbCogcHJlZml4ID0gX3F1YWxpZmllZE5hbWUtPmNvcHkoKTsK
KyAgICAgICAgcHJlZml4LT5yZWYoKTsKKyAgICAgICAgcHJlZml4LT50cnVuY2F0ZShjb2xvbnBv
cyk7CisgICAgICAgIG1fdGFnTmFtZSA9IFF1YWxpZmllZE5hbWUocHJlZml4LCBudWxsQXRvbSwg
bnVsbEF0b20pOworICAgICAgICBwcmVmaXgtPmRlcmVmKCk7CiAgICAgfQotICAgIGVsc2Ugewor
ICAgIGVsc2UKICAgICAgICAgLy8gbm8gcHJlZml4CiAgICAgICAgIG1faWQgPSBkb2MtPmRvY3Vt
ZW50KCktPnRhZ0lkKF9uYW1lc3BhY2VVUkksIF9xdWFsaWZpZWROYW1lLCBmYWxzZSAvKiBhbGxv
Y2F0ZSAqLyk7Ci0gICAgICAgIG1fcHJlZml4ID0gMDsKLSAgICB9CiB9CiAKIFhNTEVsZW1lbnRJ
bXBsOjp+WE1MRWxlbWVudEltcGwoKQpJbmRleDoga2h0bWwveG1sL2RvbV9lbGVtZW50aW1wbC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3htbC9kb21fZWxl
bWVudGltcGwuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40MQpkaWZmIC11IC1wIC1yMS40MSBr
aHRtbC94bWwvZG9tX2VsZW1lbnRpbXBsLmgKLS0tIGtodG1sL3htbC9kb21fZWxlbWVudGltcGwu
aAkxMiBNYXkgMjAwNSAxNzoxMToyMiAtMDAwMAkxLjQxCisrKyBraHRtbC94bWwvZG9tX2VsZW1l
bnRpbXBsLmgJMTcgSnVuIDIwMDUgMDE6MzM6MDEgLTAwMDAKQEAgLTIzLDEzICsyMywxNCBAQAog
ICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCiAgKgogICovCi0jaWZuZGVmIF9ET01fRUxF
TUVOVEltcGxfaF8KLSNkZWZpbmUgX0RPTV9FTEVNRU5USW1wbF9oXworI2lmbmRlZiBfRE9NX0VM
RU1FTlRJTVBMX2hfCisjZGVmaW5lIF9ET01fRUxFTUVOVElNUExfaF8KIAogI2luY2x1ZGUgImRv
bV9ub2RlaW1wbC5oIgogI2luY2x1ZGUgInhtbC9kb21fc3RyaW5naW1wbC5oIgogI2luY2x1ZGUg
Im1pc2Mvc2hhcmVkLmgiCiAjaW5jbHVkZSAiY3NzL2Nzc192YWx1ZWltcGwuaCIKKyNpbmNsdWRl
ICJkb21fcW5hbWUuaCIKIAogI2lmIEFQUExFX0NIQU5HRVMKICNpZmRlZiBfX09CSkNfXwpAQCAt
MTI4LDggKzEyOSw4IEBAIHB1YmxpYzoKICAgICAvLyBET00gbWV0aG9kcyBvdmVycmlkZGVuIGZy
b20gIHBhcmVudCBjbGFzc2VzCiAgICAgdmlydHVhbCBET01TdHJpbmcgbm9kZU5hbWUoKSBjb25z
dDsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0IG5vZGVUeXBlKCkgY29uc3Q7Ci0gICAgdmly
dHVhbCBET01TdHJpbmcgcHJlZml4KCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHNldFByZWZp
eChjb25zdCBET01TdHJpbmcgJl9wcmVmaXgsIGludCAmZXhjZXB0aW9uY29kZSApOworICAgIHZp
cnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0UHJlZml4KGNvbnN0IEF0b21pY1N0cmluZyAmX3ByZWZpeCwgaW50ICZleGNlcHRpb25j
b2RlICk7CiAKICAgICB2aXJ0dWFsIERPTVN0cmluZyBub2RlVmFsdWUoKSBjb25zdDsKICAgICB2
aXJ0dWFsIHZvaWQgc2V0Tm9kZVZhbHVlKCBjb25zdCBET01TdHJpbmcgJiwgaW50ICZleGNlcHRp
b25jb2RlICk7CkBAIC0xNTYsNyArMTU3LDcgQEAgY2xhc3MgRWxlbWVudEltcGwgOiBwdWJsaWMg
Q29udGFpbmVyTm9kZQogICAgIGZyaWVuZCBjbGFzcyBOb2RlSW1wbDsKICAgICBmcmllbmQgY2xh
c3Mga2h0bWw6OkNTU1N0eWxlU2VsZWN0b3I7CiBwdWJsaWM6Ci0gICAgRWxlbWVudEltcGwoRG9j
dW1lbnRQdHIgKmRvYyk7CisgICAgRWxlbWVudEltcGwoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFn
TmFtZSwgRG9jdW1lbnRQdHIgKmRvYyk7CiAgICAgfkVsZW1lbnRJbXBsKCk7CiAKICAgICAvLyBV
c2VkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IGFuIGVsZW1lbnQgaGFzIGEg
Z2l2ZW4gQ1NTIGNsYXNzLgpAQCAtMTg2LDEzICsxODcsMjIgQEAgcHVibGljOgogICAgIFNoYXJl
ZFB0cjxBdHRySW1wbD4gc2V0QXR0cmlidXRlTm9kZU5TKEF0dHJJbXBsICpuZXdBdHRyLCBpbnQg
JmV4Y2VwdGlvbikgeyByZXR1cm4gc2V0QXR0cmlidXRlTm9kZShuZXdBdHRyLCBleGNlcHRpb24p
OyB9CiAgICAgU2hhcmVkUHRyPEF0dHJJbXBsPiByZW1vdmVBdHRyaWJ1dGVOb2RlKEF0dHJJbXBs
ICpvbGRBdHRyLCBpbnQgJmV4Y2VwdGlvbik7CiAgICAgCi0gICAgRE9NU3RyaW5nIHByZWZpeCgp
IGNvbnN0IHsgcmV0dXJuIG1fcHJlZml4OyB9Ci0gICAgdm9pZCBzZXRQcmVmaXgoY29uc3QgRE9N
U3RyaW5nICZfcHJlZml4LCBpbnQgJmV4Y2VwdGlvbmNvZGUgKTsKLQogICAgIHZpcnR1YWwgQ1NT
U3R5bGVEZWNsYXJhdGlvbkltcGwgKnN0eWxlKCk7CiAKKyAgICB2aXJ0dWFsIGNvbnN0IFF1YWxp
ZmllZE5hbWUmIHRhZ05hbWUoKSBjb25zdCB7IHJldHVybiBtX3RhZ05hbWU7IH0KKyAgICB2aXJ0
dWFsIGJvb2wgaGFzVGFnTmFtZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lKSBjb25zdCB7
IHJldHVybiBtX3RhZ05hbWUubWF0Y2hlcyh0YWdOYW1lKTsgfQorICAgIAorICAgIC8vIEEgbW9y
ZSBsaWdodHdlaWdodCBjaGVjayB0aGFuIGhhc1RhZ05hbWUuICBVc2UgdGhpcyBjaGVjayB3aGVu
IHlvdSBrbm93IHRoZSBuYW1lc3BhY2VzIG9mIHRoZSB0d28gUXVhbGlmaWVkTmFtZXMgbWF0Y2gs
IGUuZy4sIHRoYXQgdGhleSdyZQorICAgIC8vIGJvdGggSFRNTCBuYW1lcy4KKyAgICBib29sIGhh
c0xvY2FsTmFtZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lKSBjb25zdCB7IHJldHVybiBt
X3RhZ05hbWUubG9jYWxOYW1lKCkgPT0gdGFnTmFtZS5sb2NhbE5hbWUoKTsgfQorICAgIGJvb2wg
aGFzTG9jYWxOYW1lKGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lKSBjb25zdCB7IHJldHVy
biBtX3RhZ05hbWUubG9jYWxOYW1lKCkgPT0gbG9jYWxOYW1lOyB9CisKKyAgICB2aXJ0dWFsIGNv
bnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lKCkgY29uc3QgeyByZXR1cm4gbV90YWdOYW1lLmxv
Y2FsTmFtZSgpOyB9CisgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCgpIGNv
bnN0IHsgcmV0dXJuIG1fdGFnTmFtZS5wcmVmaXgoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRQ
cmVmaXgoY29uc3QgQXRvbWljU3RyaW5nICZfcHJlZml4LCBpbnQgJmV4Y2VwdGlvbmNvZGUpOwor
ICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkkoKSBjb25zdCB7IHJl
dHVybiBtX3RhZ05hbWUubmFtZXNwYWNlVVJJKCk7IH0KKyAgICAKICAgICAvLyBET00gbWV0aG9k
cyBvdmVycmlkZGVuIGZyb20gIHBhcmVudCBjbGFzc2VzCi0gICAgdmlydHVhbCBET01TdHJpbmcg
dGFnTmFtZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgdW5zaWduZWQgc2hvcnQgbm9kZVR5cGUoKSBj
b25zdDsKICAgICB2aXJ0dWFsIE5vZGVJbXBsICpjbG9uZU5vZGUgKCBib29sIGRlZXAgKSA9IDA7
CiAgICAgdmlydHVhbCBET01TdHJpbmcgbm9kZU5hbWUoKSBjb25zdDsKQEAgLTI1NCwyOSArMjY0
LDcgQEAgcHJpdmF0ZToKIAogcHJvdGVjdGVkOiAvLyBtZW1iZXIgdmFyaWFibGVzCiAgICAgbXV0
YWJsZSBOYW1lZEF0dHJNYXBJbXBsICpuYW1lZEF0dHJNYXA7Ci0gICAgRE9NU3RyaW5nSW1wbCAq
bV9wcmVmaXg7Ci19OwotCi0KLWNsYXNzIFhNTEVsZW1lbnRJbXBsIDogcHVibGljIEVsZW1lbnRJ
bXBsCi17Ci0KLXB1YmxpYzoKLSAgICBYTUxFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCBE
T01TdHJpbmdJbXBsICpfdGFnTmFtZSk7Ci0gICAgWE1MRWxlbWVudEltcGwoRG9jdW1lbnRQdHIg
KmRvYywgRE9NU3RyaW5nSW1wbCAqX3F1YWxpZmllZE5hbWUsIERPTVN0cmluZ0ltcGwgKl9uYW1l
c3BhY2VVUkkpOwotICAgIH5YTUxFbGVtZW50SW1wbCgpOwotCi0gICAgLy8gRE9NIG1ldGhvZHMg
b3ZlcnJpZGRlbiBmcm9tICBwYXJlbnQgY2xhc3NlcwotICAgIHZpcnR1YWwgRE9NU3RyaW5nIG5h
bWVzcGFjZVVSSSgpIGNvbnN0OwotICAgIHZpcnR1YWwgRE9NU3RyaW5nIGxvY2FsTmFtZSgpIGNv
bnN0OwotICAgIHZpcnR1YWwgTm9kZUltcGwgKmNsb25lTm9kZSAoIGJvb2wgZGVlcCApOwotCi0g
ICAgLy8gT3RoZXIgbWV0aG9kcyAobm90IHBhcnQgb2YgRE9NKQotICAgIHZpcnR1YWwgYm9vbCBp
c1hNTEVsZW1lbnROb2RlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgSWQg
aWQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9Ci0KLXByb3RlY3RlZDoKLSAgICBJZCBtX2lkOwor
ICAgIFF1YWxpZmllZE5hbWUgbV90YWdOYW1lOwogfTsKIAogLy8gdGhlIG1hcCBvZiBhdHRyaWJ1
dGVzIG9mIGFuIGVsZW1lbnQKQEAgLTQxNCw3ICs0MDIsNyBAQCBwcml2YXRlOgogY2xhc3MgU3R5
bGVkRWxlbWVudEltcGwgOiBwdWJsaWMgRWxlbWVudEltcGwKIHsKIHB1YmxpYzoKLSAgICBTdHls
ZWRFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKTsKKyAgICBTdHlsZWRFbGVtZW50SW1wbChj
b25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudFB0ciAqZG9jKTsKICAgICB2aXJ0
dWFsIH5TdHlsZWRFbGVtZW50SW1wbCgpOwogCiAgICAgdmlydHVhbCBib29sIGlzU3R5bGVkRWxl
bWVudCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KSW5kZXg6IGtodG1sL3htbC9kb21fbm9kZWlt
cGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3htbC9k
b21fbm9kZWltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE1MgpkaWZmIC11IC1wIC1y
MS4xNTIga2h0bWwveG1sL2RvbV9ub2RlaW1wbC5jcHAKLS0tIGtodG1sL3htbC9kb21fbm9kZWlt
cGwuY3BwCTMxIE1heSAyMDA1IDAxOjIwOjQ2IC0wMDAwCTEuMTUyCisrKyBraHRtbC94bWwvZG9t
X25vZGVpbXBsLmNwcAkxNyBKdW4gMjAwNSAwMTozMzowMyAtMDAwMApAQCAtMTU0LDcgKzE1NCw3
IEBAIE5vZGVJbXBsICpOb2RlSW1wbDo6bGFzdENoaWxkKCkgY29uc3QKICAgcmV0dXJuIDA7CiB9
CiAKLU5vZGVJbXBsICpOb2RlSW1wbDo6bGFzdERlc2NlbmRlbnQoKSBjb25zdAorTm9kZUltcGwg
Kk5vZGVJbXBsOjpsYXN0RGVzY2VuZGFudCgpIGNvbnN0CiB7CiAgICAgTm9kZUltcGwgKm4gPSBj
b25zdF9jYXN0PE5vZGVJbXBsICo+KHRoaXMpOwogICAgIHdoaWxlIChuICYmIG4tPmxhc3RDaGls
ZCgpKQpAQCAtMjM5LDEzICsyMzksMTMgQEAgdm9pZCBOb2RlSW1wbDo6bm9ybWFsaXplICgpCiAg
ICAgfQogfQogCi1ET01TdHJpbmcgTm9kZUltcGw6OnByZWZpeCgpIGNvbnN0Citjb25zdCBBdG9t
aWNTdHJpbmcmIE5vZGVJbXBsOjpwcmVmaXgoKSBjb25zdAogewogICAgIC8vIEZvciBub2RlcyBv
dGhlciB0aGFuIGVsZW1lbnRzIGFuZCBhdHRyaWJ1dGVzLCB0aGUgcHJlZml4IGlzIGFsd2F5cyBu
dWxsCi0gICAgcmV0dXJuIERPTVN0cmluZygpOworICAgIHJldHVybiBudWxsQXRvbTsKIH0KIAot
dm9pZCBOb2RlSW1wbDo6c2V0UHJlZml4KGNvbnN0IERPTVN0cmluZyAmLypfcHJlZml4Ki8sIGlu
dCAmZXhjZXB0aW9uY29kZSApCit2b2lkIE5vZGVJbXBsOjpzZXRQcmVmaXgoY29uc3QgQXRvbWlj
U3RyaW5nICYvKl9wcmVmaXgqLywgaW50ICZleGNlcHRpb25jb2RlICkKIHsKICAgICAvLyBUaGUg
c3BlYyBzYXlzIHRoYXQgZm9yIG5vZGVzIG90aGVyIHRoYW4gZWxlbWVudHMgYW5kIGF0dHJpYnV0
ZXMsIHByZWZpeCBpcyBhbHdheXMgbnVsbC4KICAgICAvLyBJdCBkb2VzIG5vdCBzYXkgd2hhdCB0
byBkbyB3aGVuIHRoZSB1c2VyIHRyaWVzIHRvIHNldCB0aGUgcHJlZml4IG9uIGFub3RoZXIgdHlw
ZSBvZgpAQCAtMTAwNiwzOSArMTAwNiwyNyBAQCBOb2RlSW1wbCAqTm9kZUltcGw6OnRyYXZlcnNl
UHJldmlvdXNOb2RlCiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgTm9kZUltcGw6OmNoZWNrU2V0
UHJlZml4KGNvbnN0IERPTVN0cmluZyAmX3ByZWZpeCwgaW50ICZleGNlcHRpb25jb2RlKQordm9p
ZCBOb2RlSW1wbDo6Y2hlY2tTZXRQcmVmaXgoY29uc3QgQXRvbWljU3RyaW5nICZfcHJlZml4LCBp
bnQgJmV4Y2VwdGlvbmNvZGUpCiB7CiAgICAgLy8gUGVyZm9ybSBlcnJvciBjaGVja2luZyBhcyBy
ZXF1aXJlZCBieSBzcGVjIGZvciBzZXR0aW5nIE5vZGUucHJlZml4LiBVc2VkIGJ5CiAgICAgLy8g
RWxlbWVudEltcGw6OnNldFByZWZpeCgpIGFuZCBBdHRySW1wbDo6c2V0UHJlZml4KCkKIAotI2lm
IDAKLSAgICAvLyBGSVhNRTogQWRkIHRoaXMgY2hlY2sgKGJ1dCBub3QgaW4gYSB3YXkgdGhhdCBk
ZXBlbmRzIG9uIHRoZSBDKysgRE9NISkKLSAgICAvLyBJTlZBTElEX0NIQVJBQ1RFUl9FUlI6IFJh
aXNlZCBpZiB0aGUgc3BlY2lmaWVkIHByZWZpeCBjb250YWlucyBhbiBpbGxlZ2FsIGNoYXJhY3Rl
ci4KLSAgICBpZiAoIUVsZW1lbnQ6OmtodG1sVmFsaWRQcmVmaXgoX3ByZWZpeCkpIHsKLSAgICAg
ICAgZXhjZXB0aW9uY29kZSA9IERPTUV4Y2VwdGlvbjo6SU5WQUxJRF9DSEFSQUNURVJfRVJSOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KKyAgICAvLyBGSVhNRTogSW1wbGVtZW50
IHN1cHBvcnQgZm9yIElOVkFMSURfQ0hBUkFDVEVSX0VSUjogUmFpc2VkIGlmIHRoZSBzcGVjaWZp
ZWQgcHJlZml4IGNvbnRhaW5zIGFuIGlsbGVnYWwgY2hhcmFjdGVyLgorICAgIAogICAgIC8vIE5P
X01PRElGSUNBVElPTl9BTExPV0VEX0VSUjogUmFpc2VkIGlmIHRoaXMgbm9kZSBpcyByZWFkb25s
eS4KICAgICBpZiAoaXNSZWFkT25seSgpKSB7CiAgICAgICAgIGV4Y2VwdGlvbmNvZGUgPSBET01F
eGNlcHRpb246Ok5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUjsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIC8vIE5BTUVTUEFDRV9FUlI6IC0gUmFpc2VkIGlmIHRoZSBzcGVjaWZpZWQg
cHJlZml4IGlzIG1hbGZvcm1lZAorICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgTkFNRVNQQUNFX0VS
UjogLSBSYWlzZWQgaWYgdGhlIHNwZWNpZmllZCBwcmVmaXggaXMgbWFsZm9ybWVkCiAgICAgLy8g
LSBpZiB0aGUgbmFtZXNwYWNlVVJJIG9mIHRoaXMgbm9kZSBpcyBudWxsLAogICAgIC8vIC0gaWYg
dGhlIHNwZWNpZmllZCBwcmVmaXggaXMgInhtbCIgYW5kIHRoZSBuYW1lc3BhY2VVUkkgb2YgdGhp
cyBub2RlIGlzIGRpZmZlcmVudCBmcm9tCiAgICAgLy8gICAiaHR0cDovL3d3dy53My5vcmcvWE1M
LzE5OTgvbmFtZXNwYWNlIiwKICAgICAvLyAtIGlmIHRoaXMgbm9kZSBpcyBhbiBhdHRyaWJ1dGUg
YW5kIHRoZSBzcGVjaWZpZWQgcHJlZml4IGlzICJ4bWxucyIgYW5kCiAgICAgLy8gICB0aGUgbmFt
ZXNwYWNlVVJJIG9mIHRoaXMgbm9kZSBpcyBkaWZmZXJlbnQgZnJvbSAiaHR0cDovL3d3dy53My5v
cmcvMjAwMC94bWxucy8iLAogICAgIC8vIC0gb3IgaWYgdGhpcyBub2RlIGlzIGFuIGF0dHJpYnV0
ZSBhbmQgdGhlIHF1YWxpZmllZE5hbWUgb2YgdGhpcyBub2RlIGlzICJ4bWxucyIgW05hbWVzcGFj
ZXNdLgotICAgIGlmICgKLSNpZiAwCi0gICAgICAgIC8vIEZJWE1FOiBBZGQgdGhpcyBjaGVjayAo
YnV0IG5vdCBpbiBhIHdheSB0aGF0IGRlcGVuZHMgb24gdGhlIEMrKyBET00hKQotICAgICAgICBF
bGVtZW50OjpraHRtbE1hbGZvcm1lZFByZWZpeChfcHJlZml4KSB8fAotI2VuZGlmCi0gICAgICAg
IChuYW1lc3BhY2VQYXJ0KGlkKCkpID09IG5vTmFtZXNwYWNlICYmIGlkKCkgPiBJRF9MQVNUX1RB
RykgfHwKKyAgICBpZiAoKG5hbWVzcGFjZVBhcnQoaWQoKSkgPT0gbm9OYW1lc3BhY2UgJiYgaWQo
KSA+IElEX0xBU1RfVEFHKSB8fAogICAgICAgICAoX3ByZWZpeCA9PSAieG1sIiAmJiBET01TdHJp
bmcoZ2V0RG9jdW1lbnQoKS0+bmFtZXNwYWNlVVJJKGlkKCkpKSAhPSAiaHR0cDovL3d3dy53My5v
cmcvWE1MLzE5OTgvbmFtZXNwYWNlIikpIHsKICAgICAgICAgZXhjZXB0aW9uY29kZSA9IERPTUV4
Y2VwdGlvbjo6TkFNRVNQQUNFX0VSUjsKICAgICAgICAgcmV0dXJuOwpJbmRleDoga2h0bWwveG1s
L2RvbV9ub2RlaW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2to
dG1sL3htbC9kb21fbm9kZWltcGwuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS44NQpkaWZmIC11
IC1wIC1yMS44NSBraHRtbC94bWwvZG9tX25vZGVpbXBsLmgKLS0tIGtodG1sL3htbC9kb21fbm9k
ZWltcGwuaAkxMiBNYXkgMjAwNSAwMToxNjowMSAtMDAwMAkxLjg1CisrKyBraHRtbC94bWwvZG9t
X25vZGVpbXBsLmgJMTcgSnVuIDIwMDUgMDE6MzM6MDQgLTAwMDAKQEAgLTU5LDYgKzU5LDcgQEAg
Y2xhc3MgRXZlbnRJbXBsOwogY2xhc3MgRXZlbnRMaXN0ZW5lcjsKIGNsYXNzIE5vZGVMaXN0SW1w
bDsKIGNsYXNzIE5hbWVkQXR0ck1hcEltcGw7CitjbGFzcyBRdWFsaWZpZWROYW1lOwogY2xhc3Mg
UmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXI7CiAKIC8vIFRoZSBuYW1lc3BhY2UgdXNlZCBmb3IgWEhU
TUwgZWxlbWVudHMKQEAgLTEwMiw2ICsxMDMsNyBAQCBwdWJsaWM6CiAgICAgTUFJTl9USFJFQURf
QUxMT0NBVEVEOwogCiAgICAgLy8gRE9NIG1ldGhvZHMgJiBhdHRyaWJ1dGVzIGZvciBOb2RlCisg
ICAgdmlydHVhbCBib29sIGhhc1RhZ05hbWUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSkg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIERPTVN0cmluZyBub2RlTmFtZSgp
IGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIERPTVN0cmluZyBub2RlVmFsdWUoKSBjb25zdDsKICAg
ICB2aXJ0dWFsIHZvaWQgc2V0Tm9kZVZhbHVlKCBjb25zdCBET01TdHJpbmcgJl9ub2RlVmFsdWUs
IGludCAmZXhjZXB0aW9uY29kZSApOwpAQCAtMTIyLDE0ICsxMjQsMTQgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgdm9pZCByZW1vdmUoaW50ICZleGNlcHRpb25jb2RlKTsKICAgICB2aXJ0dWFsIGJv
b2wgaGFzQ2hpbGROb2RlcyAoICApIGNvbnN0OwogICAgIHZpcnR1YWwgTm9kZUltcGwgKmNsb25l
Tm9kZSAoIGJvb2wgZGVlcCApID0gMDsKLSAgICB2aXJ0dWFsIERPTVN0cmluZyBsb2NhbE5hbWUo
KSBjb25zdDsKLSAgICB2aXJ0dWFsIERPTVN0cmluZyBuYW1lc3BhY2VVUkkoKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIERPTVN0cmluZyBwcmVmaXgoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0
UHJlZml4KGNvbnN0IERPTVN0cmluZyAmX3ByZWZpeCwgaW50ICZleGNlcHRpb25jb2RlICk7Cisg
ICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSgpIGNvbnN0OworICAgIHZp
cnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkkoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4KCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lk
IHNldFByZWZpeChjb25zdCBBdG9taWNTdHJpbmcgJl9wcmVmaXgsIGludCAmZXhjZXB0aW9uY29k
ZSk7CiAgICAgdm9pZCBub3JtYWxpemUgKCk7CiAgICAgc3RhdGljIGJvb2wgaXNTdXBwb3J0ZWQo
Y29uc3QgRE9NU3RyaW5nICZmZWF0dXJlLCBjb25zdCBET01TdHJpbmcgJnZlcnNpb24pOwogCi0g
ICAgTm9kZUltcGwgKmxhc3REZXNjZW5kZW50KCkgY29uc3Q7CisgICAgTm9kZUltcGwgKmxhc3RE
ZXNjZW5kYW50KCkgY29uc3Q7CiAKICAgICAvLyBPdGhlciBtZXRob2RzIChub3QgcGFydCBvZiBE
T00pCiAgICAgdmlydHVhbCBib29sIGlzRWxlbWVudE5vZGUoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQpAQCAtMTM3LDYgKzEzOSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNTdHls
ZWRFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNB
dHRyaWJ1dGVOb2RlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wg
aXNUZXh0Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlz
Q29tbWVudE5vZGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBp
c0RvY3VtZW50Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29s
IGlzWE1MRWxlbWVudE5vZGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIGJvb2wgaXNC
bG9ja0Zsb3coKSBjb25zdDsKQEAgLTE5OCwyNSArMjAxLDggQEAgcHVibGljOgogICAgIC8vIHVu
dGlsIHRoZXkga25vdyBhbGwgb2YgdGhlaXIgbmVzdGVkIDxwYXJhbT5zLiBbMzYwMzE5MSwgNDA0
MDg0OF0KICAgICB2aXJ0dWFsIHZvaWQgY2xvc2VSZW5kZXJlcigpIHsgfQogCi0gICAgdHlwZWRl
ZiBRX1VJTlQzMiBJZDsKLSAgICAvLyBpZCgpIGlzIHVzZWQgdG8gZWFzaWx5IGFuZCBleGFjdGx5
IGlkZW50aWZ5IGEgbm9kZS4gSXQKLSAgICAvLyBpcyBvcHRpbWl6ZWQgZm9yIHF1aWNrIGNvbXBh
cmlzb24gYW5kIGxvdyBtZW1vcnkgY29uc3VtcHRpb24uCi0gICAgLy8gaXRzIHZhbHVlIGRlcGVu
ZHMgb24gdGhlIG93bmVyIGRvY3VtZW50IG9mIHRoZSBub2RlIGFuZCBpcwotICAgIC8vIGNhdGVn
b3JpemVkIGluIHRoZSBmb2xsb3dpbmcgd2F5OgotICAgIC8vIDEuLklEX0xBU1RfVEFHOiB0aGUg
bm9kZSBpbmhlcml0cyBIVE1MRWxlbWVudEltcGwgYW5kIGlzCi0gICAgLy8gICAgICAgICAgICAg
ICAgIHBhcnQgb2YgdGhlIEhUTUwgbmFtZXNwYWNlLgotICAgIC8vICAgICAgICAgICAgICAgICBU
aGUgSFRNTCBuYW1lc3BhY2UgaXMgZWl0aGVyIHRoZSBnbG9iYWwKLSAgICAvLyAgICAgICAgICAg
ICAgICAgb25lIChubyBuYW1lc3BhY2UpIG9yIHRoZSBYSFRNTCBuYW1lc3BhY2UKLSAgICAvLyAg
ICAgICAgICAgICAgICAgZGVwZW5kaW5nIG9uIHRoZSBvd25lciBkb2N1bWVudCdzIGRvY3R5cGUK
LSAgICAvLyBJRF9MQVNUX1RBRysxLi4weGZmZmY6IG5vbi1IVE1MIGVsZW1lbnRzIGluIHRoZSBn
bG9iYWwgbmFtZXNwYWNlCi0gICAgLy8gb3RoZXJzICAgICAgIG5vbi1IVE1MIGVsZW1lbnRzIGlu
IGEgbmFtZXNwYWNlLgotICAgIC8vICAgICAgICAgICAgICAgICB0aGUgdXBwZXIgMTYgYml0IGlk
ZW50aWZ5IHRoZSBuYW1lc3BhY2UKLSAgICAvLyAgICAgICAgICAgICAgICAgdGhlIGxvd2VyIDE2
IGJpdCBpZGVudGlmeSB0aGUgbG9jYWwgcGFydCBvZiB0aGUKLSAgICAvLyAgICAgICAgICAgICAg
ICAgcXVhbGlmaWVkIGVsZW1lbnQgbmFtZS4KLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3QgeyBy
ZXR1cm4gMDsgfTsKLSNpZiBBUFBMRV9DSEFOR0VTCi0gICAgSWQgaWRlbnRpZmllcigpIGNvbnN0
OwotI2VuZGlmCisgICAgdHlwZWRlZiBRX1VJTlQzMiBJZDsgLy8gRklYTUU6IFlhbmsgdGhpcyBv
bmNlIGF0dHJpYnV0ZXMgYXJlIGFsc28gc3dpdGNoZWQgb3Zlci4KKwogICAgIGVudW0gTW91c2VF
dmVudFR5cGUgewogICAgICAgICBNb3VzZVByZXNzLAogICAgICAgICBNb3VzZVJlbGVhc2UsCkBA
IC0yNzgsOCArMjY0LDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpc0tleWJvYXJkRm9j
dXNhYmxlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlzTW91c2VGb2N1c2FibGUoKSBjb25z
dDsKICAgICAKLSAgICB2aXJ0dWFsIGJvb2wgaXNJbmxpbmUoKSBjb25zdDsKLSAgICAKICAgICB2
aXJ0dWFsIGJvb2wgaXNDb250ZW50RWRpdGFibGUoKSBjb25zdDsKICAgICB2aXJ0dWFsIFFSZWN0
IGdldFJlY3QoKSBjb25zdDsKIApAQCAtMzY5LDcgKzM1Myw3IEBAIHB1YmxpYzoKICAgICBraHRt
bDo6UmVuZGVyT2JqZWN0ICpwcmV2aW91c1JlbmRlcmVyKCk7CiAgICAgdm9pZCBzZXRSZW5kZXJl
cihraHRtbDo6UmVuZGVyT2JqZWN0KiByZW5kZXJlcikgeyBtX3JlbmRlciA9IHJlbmRlcmVyOyB9
CiAgICAgCi0gICAgdm9pZCBjaGVja1NldFByZWZpeChjb25zdCBET01TdHJpbmcgJl9wcmVmaXgs
IGludCAmZXhjZXB0aW9uY29kZSk7CisgICAgdm9pZCBjaGVja1NldFByZWZpeChjb25zdCBBdG9t
aWNTdHJpbmcgJl9wcmVmaXgsIGludCAmZXhjZXB0aW9uY29kZSk7CiAgICAgdm9pZCBjaGVja0Fk
ZENoaWxkKE5vZGVJbXBsICpuZXdDaGlsZCwgaW50ICZleGNlcHRpb25jb2RlKTsKICAgICBib29s
IGlzQW5jZXN0b3IoY29uc3QgTm9kZUltcGwgKikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGNo
aWxkQWxsb3dlZCggTm9kZUltcGwgKm5ld0NoaWxkICk7CkluZGV4OiBraHRtbC94bWwvZG9tX3Fu
YW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC94bWwv
ZG9tX3FuYW1lLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yCmRpZmYgLXUgLXAgLXIxLjIg
a2h0bWwveG1sL2RvbV9xbmFtZS5jcHAKLS0tIGtodG1sL3htbC9kb21fcW5hbWUuY3BwCTE2IEp1
biAyMDA1IDIxOjA2OjQ2IC0wMDAwCTEuMgorKysga2h0bWwveG1sL2RvbV9xbmFtZS5jcHAJMTcg
SnVuIDIwMDUgMDE6MzM6MDQgLTAwMDAKQEAgLTg4LDcgKzg4LDcgQEAgY29uc3QgUXVhbGlmaWVk
TmFtZSYgUXVhbGlmaWVkTmFtZTo6b3BlcgogCiB2b2lkIFF1YWxpZmllZE5hbWU6OmRlcmVmKCkK
IHsKLSAgICBpZiAobV9pbXBsLT5yZWZDb3VudCgpID09IDEpIHsKKyAgICBpZiAobV9pbXBsLT5o
YXNPbmVSZWYoKSkgewogICAgICAgICAvLyBCZWZvcmUgZGVjcmVtZW50aW5nIHRoZSByZWYgdG8g
MCwgcmVtb3ZlIG91cnNlbHZlcyBmcm9tIHRoZSBoYXNoIHRhYmxlLgogICAgICAgICBRUHRyRGlj
dDxRUHRyRGljdDxRdWFsaWZpZWROYW1lSW1wbD4gPiogbmFtZXNwYWNlRGljdCA9IDA7CiAgICAg
ICAgIFFQdHJEaWN0PFF1YWxpZmllZE5hbWVJbXBsPiogcHJlZml4RGljdCA9IDA7CkluZGV4OiBr
aHRtbC94bWwvZG9tX3RleHRpbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dl
YkNvcmUva2h0bWwveG1sL2RvbV90ZXh0aW1wbC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE2
CmRpZmYgLXUgLXAgLXIxLjE2IGtodG1sL3htbC9kb21fdGV4dGltcGwuaAotLS0ga2h0bWwveG1s
L2RvbV90ZXh0aW1wbC5oCTEwIE1heSAyMDA1IDIxOjU5OjE1IC0wMDAwCTEuMTYKKysrIGtodG1s
L3htbC9kb21fdGV4dGltcGwuaAkxNyBKdW4gMjAwNSAwMTozMzowNCAtMDAwMApAQCAtMTAwLDgg
KzEwMCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIE5vZGVJbXBsICpjbG9uZU5vZGUoYm9vbCBk
ZWVwKTsKIAogICAgIC8vIE90aGVyIG1ldGhvZHMgKG5vdCBwYXJ0IG9mIERPTSkKLQotICAgIHZp
cnR1YWwgSWQgaWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNDb21tZW50Tm9kZSgpIGNv
bnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIGJvb2wgY2hpbGRUeXBlQWxsb3dlZCgg
dW5zaWduZWQgc2hvcnQgdHlwZSApOwogCiAgICAgdmlydHVhbCBET01TdHJpbmcgdG9TdHJpbmco
KSBjb25zdDsKQEAgLTEyOCw3ICsxMjcsNiBAQCBwdWJsaWM6CiAgICAgLy8gT3RoZXIgbWV0aG9k
cyAobm90IHBhcnQgb2YgRE9NKQogCiAgICAgdmlydHVhbCBib29sIGlzVGV4dE5vZGUoKSBjb25z
dCB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwogICAgIHZpcnR1
YWwgdm9pZCBhdHRhY2goKTsKICAgICB2aXJ0dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRlZChraHRt
bDo6UmVuZGVyU3R5bGUgKik7CiAgICAgdmlydHVhbCBraHRtbDo6UmVuZGVyT2JqZWN0ICpjcmVh
dGVSZW5kZXJlcihSZW5kZXJBcmVuYSAqLCBraHRtbDo6UmVuZGVyU3R5bGUgKik7CkluZGV4OiBr
d3EvRE9NLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9ET00u
bW0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzYKZGlmZiAtdSAtcCAtcjEuMzYga3dxL0RPTS5t
bQotLS0ga3dxL0RPTS5tbQkxOSBNYXkgMjAwNSAxODozMjoyNyAtMDAwMAkxLjM2CisrKyBrd3Ev
RE9NLm1tCTE3IEp1biAyMDA1IDAxOjMzOjA3IC0wMDAwCkBAIC0zMzgsNyArMzM4LDggQEAgdXNp
bmcga2h0bWw6OlNoYXJlZFB0cjsKICAgICBBU1NFUlQocHJlZml4KTsKIAogICAgIGludCBleGNl
cHRpb25Db2RlID0gMDsKLSAgICBbc2VsZiBfbm9kZUltcGxdLT5zZXRQcmVmaXgocHJlZml4LCBl
eGNlcHRpb25Db2RlKTsKKyAgICBET01TdHJpbmcgcHJlZml4U3RyKHByZWZpeCk7CisgICAgW3Nl
bGYgX25vZGVJbXBsXS0+c2V0UHJlZml4KHByZWZpeFN0ci5pbXBsZW1lbnRhdGlvbigpLCBleGNl
cHRpb25Db2RlKTsKICAgICByYWlzZU9uRE9NRXJyb3IoZXhjZXB0aW9uQ29kZSk7CiB9CiAKSW5k
ZXg6IGt3cS9LV1FET01Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiBrd3EvS1dRRE9NTm9k
ZS5jcHAKZGlmZiAtTiBrd3EvS1dRRE9NTm9kZS5jcHAKLS0tIGt3cS9LV1FET01Ob2RlLmNwcAkx
MSBKdWwgMjAwMyAxNjoyNDozNyAtMDAwMAkxLjkKKysrIC9kZXYvbnVsbAkxIEphbiAxOTcwIDAw
OjAwOjAwIC0wMDAwCkBAIC0xLDM0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMg
QXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1
ZGUgIktXUURPTU5vZGUuaCIKLQotdXNpbmcgRE9NOjpOb2RlSW1wbDsKLQotLy8gVGhpcyBuZWVk
cyB0byBiZSBpbiBhIEMrKyBzb3VyY2UgZmlsZSBiZWNhdXNlIGlkIGlzIGEgcmVzZXJ2ZWQgd29y
ZCBpbiBPYmplY3RpdmUtQysrLgotTm9kZUltcGw6OklkIGlkRnJvbU5vZGUoTm9kZUltcGwgKm5v
ZGUpCi17Ci0gICAgcmV0dXJuIG5vZGUtPmlkKCk7Ci19CkluZGV4OiBrd3EvS1dRRE9NTm9kZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IGt3cS9LV1FET01Ob2RlLmgKZGlmZiAtTiBrd3EvS1dRRE9N
Tm9kZS5oCi0tLSBrd3EvS1dRRE9NTm9kZS5oCTExIEp1bCAyMDAzIDE2OjI0OjM3IC0wMDAwCTEu
NQorKysgL2Rldi9udWxsCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKQEAgLTEsMjggKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMyBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiZG9tX25vZGVpbXBsLmgiCi0KLURPTTo6
Tm9kZUltcGw6OklkIGlkRnJvbU5vZGUoRE9NOjpOb2RlSW1wbCAqKTsKSW5kZXg6IGt3cS9LV1FL
SFRNTFBhcnQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva3dxL0tX
UUtIVE1MUGFydC5tbSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS42NDMKZGlmZiAtdSAtcCAtcjEu
NjQzIGt3cS9LV1FLSFRNTFBhcnQubW0KLS0tIGt3cS9LV1FLSFRNTFBhcnQubW0JMjYgTWF5IDIw
MDUgMjA6MzA6MTIgLTAwMDAJMS42NDMKKysrIGt3cS9LV1FLSFRNTFBhcnQubW0JMTcgSnVuIDIw
MDUgMDE6MzM6MTEgLTAwMDAKQEAgLTI4LDcgKzI4LDYgQEAKICNpbXBvcnQgIkRPTUludGVybmFs
LmgiCiAKICNpbXBvcnQgIktXUUNsaXBib2FyZC5oIgotI2ltcG9ydCAiS1dRRE9NTm9kZS5oIgog
I2ltcG9ydCAiS1dRRHVtbXlWaWV3LmgiCiAjaW1wb3J0ICJLV1FFZGl0Q29tbWFuZC5oIgogI2lt
cG9ydCAiS1dRRXhjZXB0aW9ucy5oIgpAQCAtMTAwLDYgKzk5LDcgQEAgdXNpbmcgRE9NOjpIVE1M
RWxlbWVudEltcGw7CiB1c2luZyBET006OkhUTUxGb3JtRWxlbWVudEltcGw7CiB1c2luZyBET006
OkhUTUxGcmFtZUVsZW1lbnRJbXBsOwogdXNpbmcgRE9NOjpIVE1MR2VuZXJpY0Zvcm1FbGVtZW50
SW1wbDsKK3VzaW5nIERPTTo6SFRNTE5hbWVzOwogdXNpbmcgRE9NOjpIVE1MVGFibGVDZWxsRWxl
bWVudEltcGw7CiB1c2luZyBET006Ok5vZGU7CiB1c2luZyBET006Ok5vZGVJbXBsOwpAQCAtMzYx
LDEzICszNjEsMTIgQEAgc3RhdGljIEhUTUxGb3JtRWxlbWVudEltcGwgKnNjYW5Gb3JGb3JtKAog
ewogICAgIE5vZGVJbXBsICpuOwogICAgIGZvciAobiA9IHN0YXJ0OyBuOyBuID0gbi0+dHJhdmVy
c2VOZXh0Tm9kZSgpKSB7Ci0gICAgICAgIE5vZGVJbXBsOjpJZCBub2RlSUQgPSBpZEZyb21Ob2Rl
KG4pOwotICAgICAgICBpZiAobm9kZUlEID09IElEX0ZPUk0pIHsKKyAgICAgICAgaWYgKG4tPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjpmb3JtKCkpKSB7CiAgICAgICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8SFRNTEZvcm1FbGVtZW50SW1wbCAqPihuKTsKICAgICAgICAgfSBlbHNlIGlmIChuLT5p
c0hUTUxFbGVtZW50KCkKICAgICAgICAgICAgICAgICAgICAmJiBzdGF0aWNfY2FzdDxIVE1MRWxl
bWVudEltcGwgKj4obiktPmlzR2VuZXJpY0Zvcm1FbGVtZW50KCkpIHsKICAgICAgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbCAqPihuKS0+Zm9ybSgp
OwotICAgICAgICB9IGVsc2UgaWYgKG5vZGVJRCA9PSBJRF9GUkFNRSB8fCBub2RlSUQgPT0gSURf
SUZSQU1FKSB7CisgICAgICAgIH0gZWxzZSBpZiAobi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZy
YW1lKCkpIHx8IG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppZnJhbWUoKSkpIHsKICAgICAgICAg
ICAgIE5vZGVJbXBsICpjaGlsZERvYyA9IHN0YXRpY19jYXN0PEhUTUxGcmFtZUVsZW1lbnRJbXBs
ICo+KG4pLT5jb250ZW50RG9jdW1lbnQoKTsKICAgICAgICAgICAgIEhUTUxGb3JtRWxlbWVudElt
cGwgKmZyYW1lUmVzdWx0ID0gc2NhbkZvckZvcm0oY2hpbGREb2MpOwogICAgICAgICAgICAgaWYg
KGZyYW1lUmVzdWx0KSB7CkBAIC0zOTAsNyArMzg5LDcgQEAgSFRNTEZvcm1FbGVtZW50SW1wbCAq
S1dRS0hUTUxQYXJ0OjpjdXJyZQogICAgIC8vIHRyeSB3YWxraW5nIHVwIHRoZSBub2RlIHRyZWUg
dG8gZmluZCBhIGZvcm0gZWxlbWVudAogICAgIE5vZGVJbXBsICpuOwogICAgIGZvciAobiA9IHN0
YXJ0OyBuOyBuID0gbi0+cGFyZW50Tm9kZSgpKSB7Ci0gICAgICAgIGlmIChpZEZyb21Ob2RlKG4p
ID09IElEX0ZPUk0pIHsKKyAgICAgICAgaWYgKG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpmb3Jt
KCkpKSB7CiAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50SW1w
bCAqPihuKTsKICAgICAgICAgfSBlbHNlIGlmIChuLT5pc0hUTUxFbGVtZW50KCkKICAgICAgICAg
ICAgICAgICAgICAmJiBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwgKj4obiktPmlzR2VuZXJp
Y0Zvcm1FbGVtZW50KCkpIHsKQEAgLTQ4OSw4ICs0ODgsNyBAQCBOU1N0cmluZyAqS1dRS0hUTUxQ
YXJ0OjpzZWFyY2hGb3JMYWJlbHNBCiAgICAgICAgIGlmIChhYm92ZUNlbGwpIHsKICAgICAgICAg
ICAgIC8vIHNlYXJjaCB3aXRoaW4gdGhlIGFib3ZlIGNlbGwgd2UgZm91bmQgZm9yIGEgbWF0Y2gK
ICAgICAgICAgICAgIGZvciAoTm9kZUltcGwgKm4gPSBhYm92ZUNlbGwtPmZpcnN0Q2hpbGQoKTsg
bjsgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUoYWJvdmVDZWxsKSkgewotICAgICAgICAgICAgICAg
IGlmIChpZEZyb21Ob2RlKG4pID09IElEX1RFWFQKLSAgICAgICAgICAgICAgICAgICAgJiYgbi0+
cmVuZGVyZXIoKSAmJiBuLT5yZW5kZXJlcigpLT5zdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0gVklT
SUJMRSkKKyAgICAgICAgICAgICAgICBpZiAobi0+aXNUZXh0Tm9kZSgpICYmIG4tPnJlbmRlcmVy
KCkgJiYgbi0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUpCiAg
ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAvLyBGb3IgZWFjaCB0ZXh0IGNo
dW5rLCBydW4gdGhlIHJlZ2V4cAogICAgICAgICAgICAgICAgICAgICBRU3RyaW5nIG5vZGVTdHJp
bmcgPSBuLT5ub2RlVmFsdWUoKS5zdHJpbmcoKTsKQEAgLTUyNSwyMyArNTIzLDIxIEBAIE5TU3Ry
aW5nICpLV1FLSFRNTFBhcnQ6OnNlYXJjaEZvckxhYmVsc0IKICAgICAgICAgIG4gJiYgbGVuZ3Ro
U2VhcmNoZWQgPCBjaGFyc1NlYXJjaGVkVGhyZXNob2xkOwogICAgICAgICAgbiA9IG4tPnRyYXZl
cnNlUHJldmlvdXNOb2RlKCkpCiAgICAgewotICAgICAgICBOb2RlSW1wbDo6SWQgbm9kZUlEID0g
aWRGcm9tTm9kZShuKTsKLSAgICAgICAgaWYgKG5vZGVJRCA9PSBJRF9GT1JNCisgICAgICAgIGlm
IChuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Zm9ybSgpKQogICAgICAgICAgICAgfHwgKG4tPmlz
SFRNTEVsZW1lbnQoKQogICAgICAgICAgICAgICAgICYmIHN0YXRpY19jYXN0PEhUTUxFbGVtZW50
SW1wbCAqPihuKS0+aXNHZW5lcmljRm9ybUVsZW1lbnQoKSkpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIC8vIFdlIGhpdCBhbm90aGVyIGZvcm0gZWxlbWVudCBvciB0aGUgc3RhcnQgb2YgdGhlIGZv
cm0gLSBiYWlsIG91dAogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0gZWxzZSBpZiAobm9k
ZUlEID09IElEX1REICYmICFzdGFydGluZ1RhYmxlQ2VsbCkgeworICAgICAgICB9IGVsc2UgaWYg
KG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0ZCgpKSAmJiAhc3RhcnRpbmdUYWJsZUNlbGwpIHsK
ICAgICAgICAgICAgIHN0YXJ0aW5nVGFibGVDZWxsID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ2Vs
bEVsZW1lbnRJbXBsICo+KG4pOwotICAgICAgICB9IGVsc2UgaWYgKG5vZGVJRCA9PSBJRF9UUiAm
JiBzdGFydGluZ1RhYmxlQ2VsbCkgeworICAgICAgICB9IGVsc2UgaWYgKG4tPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjp0cigpKSAmJiBzdGFydGluZ1RhYmxlQ2VsbCkgewogICAgICAgICAgICAgTlNT
dHJpbmcgKnJlc3VsdCA9IHNlYXJjaEZvckxhYmVsc0Fib3ZlQ2VsbChyZWdFeHAsIHN0YXJ0aW5n
VGFibGVDZWxsKTsKICAgICAgICAgICAgIGlmIChyZXN1bHQpIHsKICAgICAgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgc2VhcmNoZWRDZWxsQWJv
dmUgPSB0cnVlOwotICAgICAgICB9IGVsc2UgaWYgKG5vZGVJRCA9PSBJRF9URVhUCi0gICAgICAg
ICAgICAgICAgICAgJiYgbi0+cmVuZGVyZXIoKSAmJiBuLT5yZW5kZXJlcigpLT5zdHlsZSgpLT52
aXNpYmlsaXR5KCkgPT0gVklTSUJMRSkKKyAgICAgICAgfSBlbHNlIGlmIChuLT5pc1RleHROb2Rl
KCkgJiYgbi0+cmVuZGVyZXIoKSAmJiBuLT5yZW5kZXJlcigpLT5zdHlsZSgpLT52aXNpYmlsaXR5
KCkgPT0gVklTSUJMRSkKICAgICAgICAgewogICAgICAgICAgICAgLy8gRm9yIGVhY2ggdGV4dCBj
aHVuaywgcnVuIHRoZSByZWdleHAKICAgICAgICAgICAgIFFTdHJpbmcgbm9kZVN0cmluZyA9IG4t
Pm5vZGVWYWx1ZSgpLnN0cmluZygpOwpAQCAtMjg0OCwxNCArMjg0NCwxMCBAQCBOU0ZpbGVXcmFw
cGVyICpLV1FLSFRNTFBhcnQ6OmZpbGVXcmFwcGVyCiAKIHN0YXRpYyBFbGVtZW50SW1wbCAqbGlz
dFBhcmVudChFbGVtZW50SW1wbCAqaXRlbSkKIHsKLSAgICAvLyBJY2shICBBdm9pZCB1c2Ugb2Yg
aXRlbS0+aWQoKSB3aGljaCBjb25mdXNlcyBPYmpDKysuCi0gICAgdW5zaWduZWQgc2hvcnQgX2lk
ID0gaXRlbS0+aWRlbnRpZmllcigpOwotICAgIAotICAgIHdoaWxlIChfaWQgIT0gSURfVUwgJiYg
X2lkICE9IElEX09MKSB7CisgICAgd2hpbGUgKCFpdGVtLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
dWwoKSkgJiYgIWl0ZW0tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvbCgpKSkgewogICAgICAgICBp
dGVtID0gc3RhdGljX2Nhc3Q8RWxlbWVudEltcGwgKj4oaXRlbS0+cGFyZW50Tm9kZSgpKTsKICAg
ICAgICAgaWYgKCFpdGVtKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIF9pZCA9IGl0ZW0t
PmlkZW50aWZpZXIoKTsKICAgICB9CiAgICAgcmV0dXJuIGl0ZW07CiB9CkBAIC0yODY4LDcgKzI4
NjAsNyBAQCBzdGF0aWMgTm9kZUltcGwqIGlzVGV4dEZpcnN0SW5MaXN0SXRlbShOCiAgICAgd2hp
bGUgKHBhcikgewogICAgICAgICBpZiAocGFyLT5maXJzdENoaWxkKCkgIT0gZSkKICAgICAgICAg
ICAgIHJldHVybiAwOwotICAgICAgICBpZiAocGFyLT5pZGVudGlmaWVyKCkgPT0gSURfTEkpCisg
ICAgICAgIGlmIChwYXItPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpsaSgpKSkKICAgICAgICAgICAg
IHJldHVybiBwYXI7CiAgICAgICAgIGUgPSBwYXI7CiAgICAgICAgIHBhciA9IHBhci0+cGFyZW50
Tm9kZSgpOwpAQCAtMzAyMiwxMDkgKzMwMTQsOTUgQEAgTlNBdHRyaWJ1dGVkU3RyaW5nICpLV1FL
SFRNTFBhcnQ6OmF0dHJpYgogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAv
LyBUaGlzIGlzIG91ciBzaW1wbGUgSFRNTCAtPiBBU0NJSSB0cmFuc2Zvcm1hdGlvbjoKICAgICAg
ICAgICAgICAgICBRU3RyaW5nIHRleHQ7Ci0gICAgICAgICAgICAgICAgTm9kZUltcGw6OklkIF9p
ZCA9IG4tPmlkZW50aWZpZXIoKTsKLSAgICAgICAgICAgICAgICBzd2l0Y2goX2lkKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGNhc2UgSURfQToKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5v
dGUgdGhlIHN0YXJ0IG9mIHRoZSA8YT4gZWxlbWVudC4gIFdlIHdpbGwgYWRkIHRoZSBOU0xpbmtB
dHRyaWJ1dGVOYW1lCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBhdHRyaWJ1dGUgdG8gdGhl
IGF0dHJpYnV0ZWQgc3RyaW5nIHdoZW4gbmF2aWdhdGluZyB0byB0aGUgbmV4dCBzaWJsaW5nIAot
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gb2YgdGhpcyBub2RlLgotICAgICAgICAgICAgICAg
ICAgICAgICAgbGlua1N0YXJ0TG9jYXRpb24gPSBbcmVzdWx0IGxlbmd0aF07Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBsaW5rU3RhcnROb2RlID0gc3RhdGljX2Nhc3Q8RWxlbWVudEltcGwqPihu
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgICAg
IGNhc2UgSURfQlI6Ci0gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0ICs9ICJcbiI7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBoYXNOZXdMaW5lID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgIAotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0xJOgotICAg
ICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFTdHJp
bmcgbGlzdFRleHQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgRWxlbWVudEltcGwgKml0
ZW1QYXJlbnQgPSBsaXN0UGFyZW50KHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsICo+KG4pKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIWhhc05ld0xpbmUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RUZXh0
ICs9ICdcbic7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzTmV3TGluZSA9IHRydWU7
Ci0gICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdEl0ZW1zLmFwcGVuZChzdGF0
aWNfY2FzdDxFbGVtZW50SW1wbCo+KG4pKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBM
aXN0SXRlbUluZm8gaW5mbzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLnN0YXJ0
ID0gW3Jlc3VsdCBsZW5ndGhdOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8uZW5k
ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0SXRlbUxvY2F0aW9ucy5hcHBl
bmQgKGluZm8pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxpc3RUZXh0ICs9ICdcdCc7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGl0ZW1QYXJlbnQgJiYgcmVuZGVyZXItPmlzTGlzdEl0ZW0oKSkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJMaXN0SXRlbSAqbGlzdFJlbmRlcmVyID0gc3Rh
dGljX2Nhc3Q8UmVuZGVyTGlzdEl0ZW0qPihyZW5kZXJlcik7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbWF4TWFya2VyV2lkdGggPSBNQVgoW2ZvbnQgcG9pbnRTaXplXSwgbWF4
TWFya2VyV2lkdGgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2goc3R5
bGUtPmxpc3RTdHlsZVR5cGUoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2FzZSBraHRtbDo6RElTQzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBsaXN0VGV4dCArPSAoKFFDaGFyKUJVTExFVF9DSEFSKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNhc2Uga2h0bWw6OkNJUkNMRToKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBsaXN0VGV4dCArPSAoKFFDaGFyKUNJUkNMRV9DSEFSKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNhc2Uga2h0bWw6OlNRVUFSRToKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsaXN0VGV4dCArPSAoKFFDaGFyKVNRVUFSRV9DSEFSKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Uga2h0bWw6OkxOT05FOgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBRU3RyaW5nIG1hcmtlciA9IGxpc3RSZW5kZXJlci0+bWFya2VyU3RyaW5nVmFs
dWUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0VGV4dCAr
PSBtYXJrZXI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVXNl
IEFwcEtpdCBtZXRyaWNzLiAgV2lsbCBiZSByZW5kZXJlZCBieSBBcHBLaXQuCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgbWFya2VyV2lkdGggPSBbZm9udCB3
aWR0aE9mU3RyaW5nOiBtYXJrZXIuZ2V0TlNTdHJpbmcoKV07Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbWF4TWFya2VyV2lkdGggPSBNQVgobWFya2VyV2lkdGgsIG1h
eE1hcmtlcldpZHRoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGlmIChuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YSgpKSkgeworICAgICAgICAg
ICAgICAgICAgICAvLyBOb3RlIHRoZSBzdGFydCBvZiB0aGUgPGE+IGVsZW1lbnQuICBXZSB3aWxs
IGFkZCB0aGUgTlNMaW5rQXR0cmlidXRlTmFtZQorICAgICAgICAgICAgICAgICAgICAvLyBhdHRy
aWJ1dGUgdG8gdGhlIGF0dHJpYnV0ZWQgc3RyaW5nIHdoZW4gbmF2aWdhdGluZyB0byB0aGUgbmV4
dCBzaWJsaW5nIAorICAgICAgICAgICAgICAgICAgICAvLyBvZiB0aGlzIG5vZGUuCisgICAgICAg
ICAgICAgICAgICAgIGxpbmtTdGFydExvY2F0aW9uID0gW3Jlc3VsdCBsZW5ndGhdOworICAgICAg
ICAgICAgICAgICAgICBsaW5rU3RhcnROb2RlID0gc3RhdGljX2Nhc3Q8RWxlbWVudEltcGwqPihu
KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpi
cigpKSkgeworICAgICAgICAgICAgICAgICAgICB0ZXh0ICs9ICJcbiI7CisgICAgICAgICAgICAg
ICAgICAgIGhhc05ld0xpbmUgPSB0cnVlOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobi0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OmxpKCkpKSB7CisgICAgICAgICAgICAgICAgICAgIFFTdHJp
bmcgbGlzdFRleHQ7CisgICAgICAgICAgICAgICAgICAgIEVsZW1lbnRJbXBsICppdGVtUGFyZW50
ID0gbGlzdFBhcmVudChzdGF0aWNfY2FzdDxFbGVtZW50SW1wbCAqPihuKSk7CisgICAgICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAoIWhhc05ld0xpbmUpCisgICAgICAg
ICAgICAgICAgICAgICAgICBsaXN0VGV4dCArPSAnXG4nOworICAgICAgICAgICAgICAgICAgICBo
YXNOZXdMaW5lID0gdHJ1ZTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0
VGV4dCArPSAnICc7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RUZXh0ICs9
ICdcdCc7Ci0gICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5TTXV0YWJsZURp
Y3Rpb25hcnkgKmF0dHJzOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGF0dHJzID0gW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHJzIHNldE9iamVjdDpmb250IGZvcktleTpO
U0ZvbnRBdHRyaWJ1dGVOYW1lXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHN0eWxlICYmIHN0eWxlLT5jb2xvcigpLmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFthdHRycyBzZXRPYmplY3Q6c3R5bGUtPmNvbG9yKCkuZ2V0TlNDb2xv
cigpIGZvcktleTpOU0ZvcmVncm91bmRDb2xvckF0dHJpYnV0ZU5hbWVdOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoc3R5bGUgJiYgc3R5bGUtPmJhY2tncm91bmRDb2xvcigp
LmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRycyBz
ZXRPYmplY3Q6c3R5bGUtPmJhY2tncm91bmRDb2xvcigpLmdldE5TQ29sb3IoKSBmb3JLZXk6TlNC
YWNrZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lXTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKnBhcnRpYWxTdHJpbmcgPSBb
W05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6bGlzdFRleHQuZ2V0TlNT
dHJpbmcoKSBhdHRyaWJ1dGVzOmF0dHJzXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgW2F0dHJzIHJlbGVhc2VdOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVz
dWx0IGFwcGVuZEF0dHJpYnV0ZWRTdHJpbmc6IHBhcnRpYWxTdHJpbmddOyAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BhcnRpYWxTdHJpbmcgcmVsZWFz
ZV07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBs
aXN0SXRlbXMuYXBwZW5kKHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsKj4obikpOworICAgICAgICAg
ICAgICAgICAgICBMaXN0SXRlbUluZm8gaW5mbzsKKyAgICAgICAgICAgICAgICAgICAgaW5mby5z
dGFydCA9IFtyZXN1bHQgbGVuZ3RoXTsKKyAgICAgICAgICAgICAgICAgICAgaW5mby5lbmQgPSAw
OworICAgICAgICAgICAgICAgICAgICBsaXN0SXRlbUxvY2F0aW9ucy5hcHBlbmQgKGluZm8pOwor
ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgbGlzdFRleHQgKz0gJ1x0
JzsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW1QYXJlbnQgJiYgcmVuZGVyZXItPmlzTGlz
dEl0ZW0oKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVyTGlzdEl0ZW0gKmxpc3RS
ZW5kZXJlciA9IHN0YXRpY19jYXN0PFJlbmRlckxpc3RJdGVtKj4ocmVuZGVyZXIpOworCisgICAg
ICAgICAgICAgICAgICAgICAgICBtYXhNYXJrZXJXaWR0aCA9IE1BWChbZm9udCBwb2ludFNpemVd
LCBtYXhNYXJrZXJXaWR0aCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2goc3R5bGUt
Pmxpc3RTdHlsZVR5cGUoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Uga2h0
bWw6OkRJU0M6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RUZXh0ICs9ICgo
UUNoYXIpQlVMTEVUX0NIQVIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIGtodG1sOjpDSVJDTEU6CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RUZXh0ICs9ICgoUUNoYXIpQ0lSQ0xFX0NI
QVIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjYXNlIGtodG1sOjpTUVVBUkU6CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxpc3RUZXh0ICs9ICgoUUNoYXIpU1FVQVJFX0NIQVIpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjYXNlIGtodG1sOjpMTk9ORToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUVN0cmluZyBtYXJrZXIgPSBsaXN0UmVuZGVyZXItPm1hcmtlclN0
cmluZ1ZhbHVlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RUZXh0ICs9
IG1hcmtlcjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVXNlIEFwcEtpdCBt
ZXRyaWNzLiAgV2lsbCBiZSByZW5kZXJlZCBieSBBcHBLaXQuCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZsb2F0IG1hcmtlcldpZHRoID0gW2ZvbnQgd2lkdGhPZlN0cmluZzogbWFy
a2VyLmdldE5TU3RyaW5nKCldOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhN
YXJrZXJXaWR0aCA9IE1BWChtYXJrZXJXaWR0aCwgbWF4TWFya2VyV2lkdGgpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAg
ICAgICAgICAgICAgICAgY2FzZSBJRF9PTDoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9V
TDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RUZXh0ICs9ICcgJzsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGxpc3RUZXh0ICs9ICdcdCc7CisKKyAgICAgICAgICAgICAgICAgICAgICAg
IE5TTXV0YWJsZURpY3Rpb25hcnkgKmF0dHJzOworCisgICAgICAgICAgICAgICAgICAgICAgICBh
dHRycyA9IFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF07CisgICAgICAgICAgICAg
ICAgICAgICAgICBbYXR0cnMgc2V0T2JqZWN0OmZvbnQgZm9yS2V5Ok5TRm9udEF0dHJpYnV0ZU5h
bWVdOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0eWxlICYmIHN0eWxlLT5jb2xvcigp
LmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0cnMgc2V0T2JqZWN0
OnN0eWxlLT5jb2xvcigpLmdldE5TQ29sb3IoKSBmb3JLZXk6TlNGb3JlZ3JvdW5kQ29sb3JBdHRy
aWJ1dGVOYW1lXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHlsZSAmJiBzdHlsZS0+
YmFja2dyb3VuZENvbG9yKCkuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFthdHRycyBzZXRPYmplY3Q6c3R5bGUtPmJhY2tncm91bmRDb2xvcigpLmdldE5TQ29sb3IoKSBm
b3JLZXk6TlNCYWNrZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lXTsKKworICAgICAgICAgICAgICAg
ICAgICAgICAgTlNBdHRyaWJ1dGVkU3RyaW5nICpwYXJ0aWFsU3RyaW5nID0gW1tOU0F0dHJpYnV0
ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOmxpc3RUZXh0LmdldE5TU3RyaW5nKCkgYXR0
cmlidXRlczphdHRyc107CisgICAgICAgICAgICAgICAgICAgICAgICBbYXR0cnMgcmVsZWFzZV07
CisgICAgICAgICAgICAgICAgICAgICAgICBbcmVzdWx0IGFwcGVuZEF0dHJpYnV0ZWRTdHJpbmc6
IHBhcnRpYWxTdHJpbmddOyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAg
IFtwYXJ0aWFsU3RyaW5nIHJlbGVhc2VdOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvbCgpKSB8fCBu
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dWwoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICghaGFzTmV3TGluZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0ICs9ICJc
biI7CiAgICAgICAgICAgICAgICAgICAgICAgICBoYXNOZXdMaW5lID0gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfVEQ6
Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfVEg6Ci0gICAgICAgICAgICAgICAgICAgIGNh
c2UgSURfSFI6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfREQ6Ci0gICAgICAgICAgICAg
ICAgICAgIGNhc2UgSURfREw6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfRFQ6Ci0gICAg
ICAgICAgICAgICAgICAgIGNhc2UgSURfUFJFOgotICAgICAgICAgICAgICAgICAgICBjYXNlIElE
X0JMT0NLUVVPVEU6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfRElWOgorICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0ZCgpKSB8fAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0
aCgpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjpocigpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4tPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjpkZCgpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpkbCgpKSB8fAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpkdCgpKSB8fAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpwcmUoKSkgfHwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Ymxv
Y2txdW90ZSgpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjpkaXYoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaGFz
TmV3TGluZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0ICs9ICdcbic7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBoYXNOZXdMaW5lID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX1A6Ci0gICAgICAgICAg
ICAgICAgICAgIGNhc2UgSURfVFI6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfSDE6Ci0g
ICAgICAgICAgICAgICAgICAgIGNhc2UgSURfSDI6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2Ug
SURfSDM6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfSDQ6Ci0gICAgICAgICAgICAgICAg
ICAgIGNhc2UgSURfSDU6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfSDY6IHsKKyAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6cCgpKSB8
fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVz
Ojp0cigpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjpoMSgpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4tPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjpoMigpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoMygpKSB8fAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoNCgpKSB8fAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoNSgpKSB8fAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpo
NigpKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNOZXdMaW5lKQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRleHQgKz0gJ1xuJzsKICAgICAgICAgICAgICAgICAgICAg
ICAgIApAQCAtMzEzOSwxMCArMzExNyw4IEBAIE5TQXR0cmlidXRlZFN0cmluZyAqS1dRS0hUTUxQ
YXJ0OjphdHRyaWIKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgaGFzTmV3TGluZSA9IHRydWU7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfSU1HOgorICAg
ICAgICAgICAgICAgICAgICBlbHNlIGlmIChuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW1nKCkp
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGVuZGluZ1N0eWxlZFNwYWNlICE9IG5p
bCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsaW5rU3RhcnRMb2NhdGlvbiA9
PSBbcmVzdWx0IGxlbmd0aF0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyts
aW5rU3RhcnRMb2NhdGlvbjsKQEAgLTMxNTYsOCArMzEzMiw5IEBAIE5TQXR0cmlidXRlZFN0cmlu
ZyAqS1dRS0hUTUxQYXJ0OjphdHRyaWIKICAgICAgICAgICAgICAgICAgICAgICAgIE5TQXR0cmli
dXRlZFN0cmluZyAqaVN0cmluZyA9IFtOU0F0dHJpYnV0ZWRTdHJpbmcgYXR0cmlidXRlZFN0cmlu
Z1dpdGhBdHRhY2htZW50OmF0dGFjaG1lbnRdOwogICAgICAgICAgICAgICAgICAgICAgICAgW3Jl
c3VsdCBhcHBlbmRBdHRyaWJ1dGVkU3RyaW5nOiBpU3RyaW5nXTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIFthdHRhY2htZW50IHJlbGVhc2VdOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CisKICAgICAgICAg
ICAgICAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKnBhcnRpYWxTdHJpbmcgPSBbW05TQXR0cmlidXRl
ZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6dGV4dC5nZXROU1N0cmluZygpXTsKICAgICAg
ICAgICAgICAgICBbcmVzdWx0IGFwcGVuZEF0dHJpYnV0ZWRTdHJpbmc6IHBhcnRpYWxTdHJpbmdd
OwogICAgICAgICAgICAgICAgIFtwYXJ0aWFsU3RyaW5nIHJlbGVhc2VdOwpAQCAtMzE3OSw3MSAr
MzE1Niw2MCBAQCBOU0F0dHJpYnV0ZWRTdHJpbmcgKktXUUtIVE1MUGFydDo6YXR0cmliCiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBuZXh0ID0gbi0+bmV4dFNpYmxpbmcoKTsK
IAotICAgICAgICAgICAgTm9kZUltcGw6OklkIF9pZCA9IG4tPmlkZW50aWZpZXIoKTsKLSAgICAg
ICAgICAgIHN3aXRjaChfaWQpIHsKLSAgICAgICAgICAgICAgICBjYXNlIElEX0E6Ci0gICAgICAg
ICAgICAgICAgICAgIC8vIEVuZCBvZiBhIDxhPiBlbGVtZW50LiAgQ3JlYXRlIGFuIGF0dHJpYnV0
ZWQgc3RyaW5nIE5TTGlua0F0dHJpYnV0ZU5hbWUgYXR0cmlidXRlCi0gICAgICAgICAgICAgICAg
ICAgIC8vIGZvciB0aGUgcmFuZ2Ugb2YgdGhlIGxpbmsuICBOb3RlIHRoYXQgd2UgY3JlYXRlIHRo
ZSBhdHRyaWJ1dGVkIHN0cmluZyBmcm9tIHRoZSBET00sIHdoaWNoCi0gICAgICAgICAgICAgICAg
ICAgIC8vIHdpbGwgaGF2ZSBjb3JyZWN0ZWQgYW55IGlsbGVnYWxseSBuZXN0ZWQgPGE+IGVsZW1l
bnRzLgotICAgICAgICAgICAgICAgICAgICBpZiAobGlua1N0YXJ0Tm9kZSAmJiBuID09IGxpbmtT
dGFydE5vZGUpewotICAgICAgICAgICAgICAgICAgICAgICAgRE9NU3RyaW5nIGhyZWYgPSBwYXJz
ZVVSTChsaW5rU3RhcnROb2RlLT5nZXRBdHRyaWJ1dGUoQVRUUl9IUkVGKSk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBLVVJMIGtVUkwgPSBLV1EobGlua1N0YXJ0Tm9kZS0+Z2V0RG9jdW1lbnQo
KS0+cGFydCgpKS0+Y29tcGxldGVVUkwoaHJlZi5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgIE5TVVJMICpVUkwgPSBrVVJMLmdldE5T
VVJMKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBbcmVzdWx0IGFkZEF0dHJpYnV0ZTpOU0xp
bmtBdHRyaWJ1dGVOYW1lIHZhbHVlOlVSTCByYW5nZTpOU01ha2VSYW5nZShsaW5rU3RhcnRMb2Nh
dGlvbiwgW3Jlc3VsdCBsZW5ndGhdLWxpbmtTdGFydExvY2F0aW9uKV07Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBsaW5rU3RhcnROb2RlID0gMDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChuLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6YSgpKSkgeworICAgICAgICAgICAgICAgIC8vIEVuZCBvZiBhIDxhPiBlbGVtZW50
LiAgQ3JlYXRlIGFuIGF0dHJpYnV0ZWQgc3RyaW5nIE5TTGlua0F0dHJpYnV0ZU5hbWUgYXR0cmli
dXRlCisgICAgICAgICAgICAgICAgLy8gZm9yIHRoZSByYW5nZSBvZiB0aGUgbGluay4gIE5vdGUg
dGhhdCB3ZSBjcmVhdGUgdGhlIGF0dHJpYnV0ZWQgc3RyaW5nIGZyb20gdGhlIERPTSwgd2hpY2gK
KyAgICAgICAgICAgICAgICAvLyB3aWxsIGhhdmUgY29ycmVjdGVkIGFueSBpbGxlZ2FsbHkgbmVz
dGVkIDxhPiBlbGVtZW50cy4KKyAgICAgICAgICAgICAgICBpZiAobGlua1N0YXJ0Tm9kZSAmJiBu
ID09IGxpbmtTdGFydE5vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgRE9NU3RyaW5nIGhyZWYg
PSBwYXJzZVVSTChsaW5rU3RhcnROb2RlLT5nZXRBdHRyaWJ1dGUoQVRUUl9IUkVGKSk7CisgICAg
ICAgICAgICAgICAgICAgIEtVUkwga1VSTCA9IEtXUShsaW5rU3RhcnROb2RlLT5nZXREb2N1bWVu
dCgpLT5wYXJ0KCkpLT5jb21wbGV0ZVVSTChocmVmLnN0cmluZygpKTsKKyAgICAgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgICAgIE5TVVJMICpVUkwgPSBrVVJMLmdldE5TVVJMKCk7
CisgICAgICAgICAgICAgICAgICAgIFtyZXN1bHQgYWRkQXR0cmlidXRlOk5TTGlua0F0dHJpYnV0
ZU5hbWUgdmFsdWU6VVJMIHJhbmdlOk5TTWFrZVJhbmdlKGxpbmtTdGFydExvY2F0aW9uLCBbcmVz
dWx0IGxlbmd0aF0tbGlua1N0YXJ0TG9jYXRpb24pXTsKKyAgICAgICAgICAgICAgICAgICAgbGlu
a1N0YXJ0Tm9kZSA9IDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZWxzZSBpZiAobi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9sKCkpIHx8IG4tPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjp1bCgpKSkgeworICAgICAgICAgICAgICAgIGlmICghaGFzTmV3TGlu
ZSkKKyAgICAgICAgICAgICAgICAgICAgdGV4dCArPSAnXG4nOworICAgICAgICAgICAgICAgIGhh
c05ld0xpbmUgPSB0cnVlOworICAgICAgICAgICAgfSBlbHNlIGlmIChuLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6bGkoKSkpIHsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBjYXNl
IElEX09MOgotICAgICAgICAgICAgICAgIGNhc2UgSURfVUw6Ci0gICAgICAgICAgICAgICAgICAg
IGlmICghaGFzTmV3TGluZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHRleHQgKz0gJ1xuJzsK
LSAgICAgICAgICAgICAgICAgICAgaGFzTmV3TGluZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgY2FzZSBJRF9MSToKLSAgICAgICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaW50IGksIGNvdW50ID0gbGlzdEl0ZW1z
LmNvdW50KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7
IGkrKyl7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpc3RJdGVtcy5hdChpKSA9
PSBuKXsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdEl0ZW1Mb2NhdGlvbnNb
aV0uZW5kID0gW3Jlc3VsdCBsZW5ndGhdOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgaW50IGksIGNvdW50ID0gbGlzdEl0ZW1zLmNvdW50
KCk7CisgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspeworICAgICAg
ICAgICAgICAgICAgICBpZiAobGlzdEl0ZW1zLmF0KGkpID09IG4peworICAgICAgICAgICAgICAg
ICAgICAgICAgbGlzdEl0ZW1Mb2NhdGlvbnNbaV0uZW5kID0gW3Jlc3VsdCBsZW5ndGhdOworICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgaWYgKCFoYXNOZXdMaW5lKQotICAgICAgICAgICAgICAgICAgICAgICAg
dGV4dCArPSAnXG4nOwotICAgICAgICAgICAgICAgICAgICBoYXNOZXdMaW5lID0gdHJ1ZTsKLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBjYXNlIElEX1REOgot
ICAgICAgICAgICAgICAgIGNhc2UgSURfVEg6Ci0gICAgICAgICAgICAgICAgY2FzZSBJRF9IUjoK
LSAgICAgICAgICAgICAgICBjYXNlIElEX0REOgotICAgICAgICAgICAgICAgIGNhc2UgSURfREw6
Ci0gICAgICAgICAgICAgICAgY2FzZSBJRF9EVDoKLSAgICAgICAgICAgICAgICBjYXNlIElEX1BS
RToKLSAgICAgICAgICAgICAgICBjYXNlIElEX0JMT0NLUVVPVEU6Ci0gICAgICAgICAgICAgICAg
Y2FzZSBJRF9ESVY6Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaGFzTmV3TGluZSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHRleHQgKz0gJ1xuJzsKLSAgICAgICAgICAgICAgICAgICAgaGFz
TmV3TGluZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgIGNhc2UgSURfUDoKLSAgICAgICAgICAgICAgICBjYXNlIElEX1RSOgotICAgICAgICAgICAg
ICAgIGNhc2UgSURfSDE6Ci0gICAgICAgICAgICAgICAgY2FzZSBJRF9IMjoKLSAgICAgICAgICAg
ICAgICBjYXNlIElEX0gzOgotICAgICAgICAgICAgICAgIGNhc2UgSURfSDQ6Ci0gICAgICAgICAg
ICAgICAgY2FzZSBJRF9INToKLSAgICAgICAgICAgICAgICBjYXNlIElEX0g2OgotICAgICAgICAg
ICAgICAgICAgICBpZiAoIWhhc05ld0xpbmUpCi0gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0
ICs9ICdcbic7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEFuIGV4dHJhIG5ld2xpbmUgaXMgbmVl
ZGVkIGF0IHRoZSBzdGFydCwgbm90IHRoZSBlbmQsIG9mIHRoZXNlIHR5cGVzIG9mIHRhZ3MsCi0g
ICAgICAgICAgICAgICAgICAgIC8vIHNvIGRvbid0IGFkZCBhbm90aGVyIGhlcmUuCi0gICAgICAg
ICAgICAgICAgICAgIGhhc05ld0xpbmUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCFoYXNOZXdMaW5lKQor
ICAgICAgICAgICAgICAgICAgICB0ZXh0ICs9ICdcbic7CisgICAgICAgICAgICAgICAgaGFzTmV3
TGluZSA9IHRydWU7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG4tPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjp0ZCgpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6dGgoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OmhyKCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjpkZCgpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6ZGwoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OmR0KCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjpwcmUoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OmJsb2NrcXVvdGUoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgbi0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OmRpdigpKSkgeworICAgICAgICAgICAgICAgIGlmICghaGFz
TmV3TGluZSkKKyAgICAgICAgICAgICAgICAgICAgdGV4dCArPSAnXG4nOworICAgICAgICAgICAg
ICAgIGhhc05ld0xpbmUgPSB0cnVlOworICAgICAgICAgICAgfSBlbHNlIGlmIChuLT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6cCgpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6dHIoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OmgxKCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgIG4tPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjpoMigpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6aDMoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6Omg0KCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgIG4tPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjpoNSgpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICBuLT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6aDYoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWhhc05l
d0xpbmUpCisgICAgICAgICAgICAgICAgICAgIHRleHQgKz0gJ1xuJzsKKyAgICAgICAgICAgICAg
ICAvLyBBbiBleHRyYSBuZXdsaW5lIGlzIG5lZWRlZCBhdCB0aGUgc3RhcnQsIG5vdCB0aGUgZW5k
LCBvZiB0aGVzZSB0eXBlcyBvZiB0YWdzLAorICAgICAgICAgICAgICAgIC8vIHNvIGRvbid0IGFk
ZCBhbm90aGVyIGhlcmUuCisgICAgICAgICAgICAgICAgaGFzTmV3TGluZSA9IHRydWU7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIE5TQXR0cmlidXRlZFN0cmluZyAq
cGFydGlhbFN0cmluZyA9IFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmlu
Zzp0ZXh0LmdldE5TU3RyaW5nKCldOwpAQCAtMzcwMyw3ICszNjY5LDcgQEAgdm9pZCBLV1FLSFRN
TFBhcnQ6OnNldFNlbGVjdGlvbkZyb21Ob25lKAogICAgICAgICB3aGlsZSAobm9kZSkgewogICAg
ICAgICAgICAgLy8gTG9vayBmb3IgYSBibG9jayBmbG93LCBidXQgc2tpcCBvdmVyIHRoZSBIVE1M
IGVsZW1lbnQsIHNpbmNlIHdlIHJlYWxseQogICAgICAgICAgICAgLy8gd2FudCB0byBnZXQgYXQg
bGVhc3QgYXMgZmFyIGFzIHRoZSB0aGUgQk9EWSBlbGVtZW50IGluIGEgZG9jdW1lbnQuCi0gICAg
ICAgICAgICBpZiAobm9kZS0+aXNCbG9ja0Zsb3coKSAmJiBub2RlLT5pZGVudGlmaWVyKCkgIT0g
SURfSFRNTCkKKyAgICAgICAgICAgIGlmIChub2RlLT5pc0Jsb2NrRmxvdygpICYmIG5vZGUtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjpodG1sKCkpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKTsKICAgICAgICAgfQpJbmRl
eDoga3dxL1dlYkNvcmVCcmlkZ2UubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dl
YkNvcmUva3dxL1dlYkNvcmVCcmlkZ2UubW0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzk2CmRp
ZmYgLXUgLXAgLXIxLjM5NiBrd3EvV2ViQ29yZUJyaWRnZS5tbQotLS0ga3dxL1dlYkNvcmVCcmlk
Z2UubW0JMTQgSnVuIDIwMDUgMDA6MjM6NDUgLTAwMDAJMS4zOTYKKysrIGt3cS9XZWJDb3JlQnJp
ZGdlLm1tCTE3IEp1biAyMDA1IDAxOjMzOjEzIC0wMDAwCkBAIC0zOSw3ICszOSw2IEBACiAjaW1w
b3J0ICJodG1sX2ltYWdlaW1wbC5oIgogI2ltcG9ydCAiaHRtbGF0dHJzLmgiCiAjaW1wb3J0ICJo
dG1sZWRpdGluZy5oIgotI2ltcG9ydCAiaHRtbHRhZ3MuaCIKICNpbXBvcnQgImtodG1sX3BhcnQu
aCIKICNpbXBvcnQgImtodG1sdmlldy5oIgogI2ltcG9ydCAia2pzX3Byb3h5LmgiCkBAIC02Nyw3
ICs2Niw2IEBACiAjaW1wb3J0ICJLV1FBc3NlcnRpb25zLmgiCiAjaW1wb3J0ICJLV1FDaGFyc2V0
cy5oIgogI2ltcG9ydCAiS1dRQ2xpcGJvYXJkLmgiCi0jaW1wb3J0ICJLV1FET01Ob2RlLmgiCiAj
aW1wb3J0ICJLV1FFZGl0Q29tbWFuZC5oIgogI2ltcG9ydCAiS1dRRm9udC5oIgogI2ltcG9ydCAi
S1dRRm91bmRhdGlvbkV4dHJhcy5oIgpAQCAtMTAwLDYgKzk4LDcgQEAgdXNpbmcgRE9NOjpIVE1M
Rm9ybUVsZW1lbnRJbXBsOwogdXNpbmcgRE9NOjpIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbDsK
IHVzaW5nIERPTTo6SFRNTEltYWdlRWxlbWVudEltcGw7CiB1c2luZyBET006OkhUTUxJbnB1dEVs
ZW1lbnRJbXBsOwordXNpbmcgRE9NOjpIVE1MTmFtZXM7CiB1c2luZyBET006Ok5vZGVJbXBsOwog
dXNpbmcgRE9NOjpQb3NpdGlvbjsKIHVzaW5nIERPTTo6UmFuZ2VJbXBsOwpAQCAtOTEzLDcgKzkx
Miw3IEBAIHN0YXRpYyBOU1ZpZXcgKnZpZXdGb3JFbGVtZW50KEVsZW1lbnRJbXAKIHN0YXRpYyBI
VE1MSW5wdXRFbGVtZW50SW1wbCAqaW5wdXRFbGVtZW50RnJvbURPTUVsZW1lbnQoRE9NRWxlbWVu
dCAqZWxlbWVudCkKIHsKICAgICBOb2RlSW1wbCAqbm9kZSA9IFtlbGVtZW50IF9ub2RlSW1wbF07
Ci0gICAgaWYgKG5vZGUgJiYgaWRGcm9tTm9kZShub2RlKSA9PSBJRF9JTlBVVCkgeworICAgIGlm
IChub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW5wdXQoKSkpIHsKICAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnRJbXBsICo+KG5vZGUpOwogICAgIH0KICAgICBy
ZXR1cm4gbmlsOwpAQCAtOTI2LDcgKzkyNSw3IEBAIHN0YXRpYyBIVE1MRm9ybUVsZW1lbnRJbXBs
ICpmb3JtRWxlbWVudEYKICAgICAvLyBtYXBzLmdvb2dsZS5jb20gY3Jhc2hlcyBvdGhlcndpc2Ug
YmVjYXVzZSBpdCBpcyBhbiB4c2x0IGZpbGUKICAgICAvLyB0aGF0IGNvbnRhaW5zIDxmb3JtPiBl
bGVtZW50cyB0aGF0IGFyZW4ndCBpbiBhbnkgbmFtZXNwYWNlLCBzbwogICAgIC8vIHRoZXkgY29t
ZSBvdXQgYXMgZ2VuZXJpYyBDTUwgZWxlbWVudHMKLSAgICBpZiAobm9kZSAmJiBub2RlLT5pc0hU
TUxFbGVtZW50KCkgJiYgaWRGcm9tTm9kZShub2RlKSA9PSBJRF9GT1JNKSB7CisgICAgaWYgKG5v
ZGUgJiYgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZvcm0oKSkpIHsKICAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudEltcGwgKj4obm9kZSk7CiAgICAgfQogICAg
IHJldHVybiBuaWw7CkBAIC0xMDk2LDcgKzEwOTUsNyBAQCBzdGF0aWMgSFRNTEZvcm1FbGVtZW50
SW1wbCAqZm9ybUVsZW1lbnRGCiAgICAgCiAgICAgICAgICAgICAvLyBGSVhNRTogQ29kZSBjb3Bp
ZWQgZnJvbSBSZW5kZXJJbWFnZTo6dXBkYXRlRnJvbUVsZW1lbnQ7IHNob3VsZCBzaGFyZS4KICAg
ICAgICAgICAgIERPTVN0cmluZyBhdHRyOwotICAgICAgICAgICAgaWYgKGlkRnJvbU5vZGUoaSkg
PT0gSURfT0JKRUNUKSB7CisgICAgICAgICAgICBpZiAoaS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
Om9iamVjdCgpKSkgewogICAgICAgICAgICAgICAgIGF0dHIgPSBpLT5nZXRBdHRyaWJ1dGUoQVRU
Ul9EQVRBKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgYXR0ciA9IGkt
PmdldEF0dHJpYnV0ZShBVFRSX1NSQyk7CkBAIC0xMTA4LDkgKzExMDcsOSBAQCBzdGF0aWMgSFRN
TEZvcm1FbGVtZW50SW1wbCAqZm9ybUVsZW1lbnRGCiAgICAgICAgICAgICAKICAgICAgICAgICAg
IC8vIEZJWE1FOiBDb2RlIGNvcGllZCBmcm9tIFJlbmRlckltYWdlOjp1cGRhdGVGcm9tRWxlbWVu
dDsgc2hvdWxkIHNoYXJlLgogICAgICAgICAgICAgRE9NU3RyaW5nIGFsdDsKLSAgICAgICAgICAg
IGlmIChpZEZyb21Ob2RlKGkpID09IElEX0lOUFVUKQorICAgICAgICAgICAgaWYgKGktPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjppbnB1dCgpKSkKICAgICAgICAgICAgICAgICBhbHQgPSBzdGF0aWNf
Y2FzdDxIVE1MSW5wdXRFbGVtZW50SW1wbCAqPihpKS0+YWx0VGV4dCgpOwotICAgICAgICAgICAg
ZWxzZSBpZiAoaWRGcm9tTm9kZShpKSA9PSBJRF9JTUcpCisgICAgICAgICAgICBlbHNlIGlmIChp
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW1nKCkpKQogICAgICAgICAgICAgICAgIGFsdCA9IHN0
YXRpY19jYXN0PEhUTUxJbWFnZUVsZW1lbnRJbXBsICo+KGkpLT5hbHRUZXh0KCk7CiAgICAgICAg
ICAgICBpZiAoIWFsdC5pc051bGwoKSkgewogICAgICAgICAgICAgICAgIFFTdHJpbmcgYWx0VGV4
dCA9IGFsdC5zdHJpbmcoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>2510</attachid>
            <date>2005-06-20 14:12:36 -0700</date>
            <delta_ts>2005-06-22 16:42:19 -0700</delta_ts>
            <desc>Next round. Converts much more of the code.</desc>
            <filename>patch-4.txt</filename>
            <type>text/plain</type>
            <size>559396</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUucGJwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvV2ViQ29yZS9XZWJDb3JlLnBicHJvai9wcm9qZWN0LnBieHByb2osdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuNTUzCmRpZmYgLXUgLXAgLXIxLjU1MyBXZWJDb3JlLnBicHJvai9w
cm9qZWN0LnBieHByb2oKLS0tIFdlYkNvcmUucGJwcm9qL3Byb2plY3QucGJ4cHJvagkxNiBKdW4g
MjAwNSAxOTo0MjoxOCAtMDAwMAkxLjU1MworKysgV2ViQ29yZS5wYnByb2ovcHJvamVjdC5wYnhw
cm9qCTIwIEp1biAyMDA1IDIwOjU1OjAwIC0wMDAwCkBAIC0yMTQsMzIgKzIxNCw2IEBACiAvLzJE
MgogLy8yRDMKIC8vMkQ0Ci0vLzM1MAotLy8zNTEKLS8vMzUyCi0vLzM1MwotLy8zNTQKLQkJMzU0
RjI0ODkwMkVFMjg1OTBBQ0EyQUNBID0gewotCQkJZmlsZUVuY29kaW5nID0gMzA7Ci0JCQlpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOwotCQkJbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsKLQkJCXBhdGggPSBLV1FET01Ob2RlLmg7Ci0JCQlyZWZUeXBlID0gNDsKLQkJCXNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7Ci0JCX07Ci0JCTM1NEYyNDhBMDJFRTI4NTkwQUNBMkFDQSA9IHsKLQkJ
CWZpbGVFbmNvZGluZyA9IDMwOwotCQkJaXNhID0gUEJYRmlsZVJlZmVyZW5jZTsKLQkJCWxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOwotCQkJcGF0aCA9IEtXUURPTU5vZGUu
Y3BwOwotCQkJcmVmVHlwZSA9IDQ7Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwotCQl9Owot
Ly8zNTAKLS8vMzUxCi0vLzM1MgotLy8zNTMKLS8vMzU0CiAvLzUxMAogLy81MTEKIC8vNTEyCkBA
IC0xODg1LDI0ICsxODU5LDYgQEAKIAkJCXNoZWxsUGF0aCA9IC9iaW4vc2g7CiAJCQlzaGVsbFNj
cmlwdCA9ICJcIiRDUkVBVEVfSEFTSF9UQUJMRVwiIGtodG1sL2VjbWEveG1sc2VyaWFsaXplci5j
cHAgPiBcIiRERVJJVkVEX0ZJTEVfRElSL3htbHNlcmlhbGl6ZXIubHV0LmhcIiI7CiAJCX07Ci0J
CTkzMkZDMUMwMDgyNEFCQjkwMDVCM0M3NSA9IHsKLQkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0
ODM2NDc7Ci0JCQlmaWxlcyA9ICgKLQkJCSk7Ci0JCQlpbnB1dFBhdGhzID0gKAotCQkJCWtodG1s
L21pc2MvbWFrZXRhZ3MsCi0JCQkJa2h0bWwvbWlzYy9odG1sdGFncy5pbiwKLQkJCSk7Ci0JCQlp
c2EgPSBQQlhTaGVsbFNjcmlwdEJ1aWxkUGhhc2U7Ci0JCQluYW1lID0gaHRtbHRhZ3MuYy9oOwot
CQkJb3V0cHV0UGF0aHMgPSAoCi0JCQkJIiQoREVSSVZFRF9GSUxFX0RJUikvaHRtbHRhZ3MuYyIs
Ci0JCQkJIiQoREVSSVZFRF9GSUxFX0RJUikvaHRtbHRhZ3MuaCIsCi0JCQkpOwotCQkJcnVuT25s
eUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7Ci0JCQlzaGVsbFBhdGggPSAvYmluL3No
OwotCQkJc2hlbGxTY3JpcHQgPSAiY2F0IGtodG1sL21pc2MvaHRtbHRhZ3MuaW4gPiBcIiRERVJJ
VkVEX0ZJTEVfRElSL2h0bWx0YWdzLmluXCJcbmNkIFwiJERFUklWRURfRklMRV9ESVJcIlxucGVy
bCBcIiRTUkNST09UL2todG1sL21pc2MvbWFrZXRhZ3NcIiI7Ci0JCX07CiAJCTkzMkZDMjk1MDgy
NEIzNDUwMDVCM0M3NSA9IHsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJCQlm
aWxlcyA9ICgKQEAgLTIzMjEsNyArMjI3Nyw2IEBACiAJCQkJOTMyRkMyQkMwODI0QjQyMjAwNUIz
Qzc1LAogCQkJCTkzMkZDMEI3MDgyNEExNzUwMDVCM0M3NSwKIAkJCQk5MzJGQzI5NTA4MjRCMzQ1
MDA1QjNDNzUsCi0JCQkJOTMyRkMxQzAwODI0QUJCOTAwNUIzQzc1LAogCQkJCTkzRUE2ODZDMDgy
NDlBRjQwMDY4N0Y1NiwKIAkJCQk5MzJGQzEwQjA4MjRBNEQ0MDA1QjNDNzUsCiAJCQkJOTMyRkMx
NjEwODI0QThFMzAwNUIzQzc1LApAQCAtMjQyOSw3ICsyMzg0LDYgQEAKIAkJCQk5M0YxOThEQzA4
MjQ1RTU5MDAxRTlBQkMsCiAJCQkJOTNGMTk4REUwODI0NUU1OTAwMUU5QUJDLAogCQkJCTkzRjE5
OEUwMDgyNDVFNTkwMDFFOUFCQywKLQkJCQk5M0YxOThFMjA4MjQ1RTU5MDAxRTlBQkMsCiAJCQkJ
OTNGMTk4RTMwODI0NUU1OTAwMUU5QUJDLAogCQkJCTkzRjE5OEU0MDgyNDVFNTkwMDFFOUFCQywK
IAkJCQk5M0YxOThFNTA4MjQ1RTU5MDAxRTlBQkMsCkBAIC0yNTA2LDcgKzI0NjAsNiBAQAogCQkJ
CTkzRjE5OTJFMDgyNDVFNTkwMDFFOUFCQywKIAkJCQk5M0YxOTkyRjA4MjQ1RTU5MDAxRTlBQkMs
CiAJCQkJOTNGMTk5MzAwODI0NUU1OTAwMUU5QUJDLAotCQkJCTkzRjE5OTMxMDgyNDVFNTkwMDFF
OUFCQywKIAkJCQk5M0YxOTkzMjA4MjQ1RTU5MDAxRTlBQkMsCiAJCQkJOTNGMTk5MzMwODI0NUU1
OTAwMUU5QUJDLAogCQkJCTkzRjE5OTM0MDgyNDVFNTkwMDFFOUFCQywKQEAgLTI5ODIsMTIgKzI5
MzUsNiBAQAogCQkJc2V0dGluZ3MgPSB7CiAJCQl9OwogCQl9OwotCQk5M0YxOThFMjA4MjQ1RTU5
MDAxRTlBQkMgPSB7Ci0JCQlmaWxlUmVmID0gRjUyM0QyMzYwMkRFNDM5NjAxODYzNUNBOwotCQkJ
aXNhID0gUEJYQnVpbGRGaWxlOwotCQkJc2V0dGluZ3MgPSB7Ci0JCQl9OwotCQl9OwogCQk5M0Yx
OThFMzA4MjQ1RTU5MDAxRTlBQkMgPSB7CiAJCQlmaWxlUmVmID0gRjUyM0QyMzgwMkRFNDM5NjAx
ODYzNUNBOwogCQkJaXNhID0gUEJYQnVpbGRGaWxlOwpAQCAtMzQ0NCwxMiArMzM5MSw2IEBACiAJ
CQlzZXR0aW5ncyA9IHsKIAkJCX07CiAJCX07Ci0JCTkzRjE5OTMxMDgyNDVFNTkwMDFFOUFCQyA9
IHsKLQkJCWZpbGVSZWYgPSAzNTRGMjQ4OTAyRUUyODU5MEFDQTJBQ0E7Ci0JCQlpc2EgPSBQQlhC
dWlsZEZpbGU7Ci0JCQlzZXR0aW5ncyA9IHsKLQkJCX07Ci0JCX07CiAJCTkzRjE5OTMyMDgyNDVF
NTkwMDFFOUFCQyA9IHsKIAkJCWZpbGVSZWYgPSBGNTg3ODY4NTAyREUzQjg2MDFFQTQxMjI7CiAJ
CQlpc2EgPSBQQlhCdWlsZEZpbGU7CkBAIC00OTUxLDcgKzQ4OTIsNiBAQAogCQkJCTkzRjE5QThC
MDgyNDVFNTkwMDFFOUFCQywKIAkJCQk5M0YxOUE4QzA4MjQ1RTU5MDAxRTlBQkMsCiAJCQkJOTNG
MTlBOEQwODI0NUU1OTAwMUU5QUJDLAotCQkJCTkzRjE5QThFMDgyNDVFNTkwMDFFOUFCQywKIAkJ
CQk5M0YxOUE4RjA4MjQ1RTU5MDAxRTlBQkMsCiAJCQkJOTNGMTlBOTAwODI0NUU1OTAwMUU5QUJD
LAogCQkJCTkzRjE5QTkxMDgyNDVFNTkwMDFFOUFCQywKQEAgLTUwMDQsNyArNDk0NCw2IEBACiAJ
CQkJOTNGMTlBQzAwODI0NUU1OTAwMUU5QUJDLAogCQkJCTkzRjE5QUMxMDgyNDVFNTkwMDFFOUFC
QywKIAkJCQk5M0YxOUFDMjA4MjQ1RTU5MDAxRTlBQkMsCi0JCQkJOTNGMTlBQzMwODI0NUU1OTAw
MUU5QUJDLAogCQkJCTkzRjE5QUM0MDgyNDVFNTkwMDFFOUFCQywKIAkJCQk5M0YxOUFDNTA4MjQ1
RTU5MDAxRTlBQkMsCiAJCQkJOTNGMTlBQzYwODI0NUU1OTAwMUU5QUJDLApAQCAtNTc1MSwxMiAr
NTY5MCw2IEBACiAJCQlzZXR0aW5ncyA9IHsKIAkJCX07CiAJCX07Ci0JCTkzRjE5QThFMDgyNDVF
NTkwMDFFOUFCQyA9IHsKLQkJCWZpbGVSZWYgPSBGNTIzRDIzNTAyREU0Mzk2MDE4NjM1Q0E7Ci0J
CQlpc2EgPSBQQlhCdWlsZEZpbGU7Ci0JCQlzZXR0aW5ncyA9IHsKLQkJCX07Ci0JCX07CiAJCTkz
RjE5QThGMDgyNDVFNTkwMDFFOUFCQyA9IHsKIAkJCWZpbGVSZWYgPSBGNTIzRDIzNzAyREU0Mzk2
MDE4NjM1Q0E7CiAJCQlpc2EgPSBQQlhCdWlsZEZpbGU7CkBAIC02MDY5LDEyICs2MDAyLDYgQEAK
IAkJCXNldHRpbmdzID0gewogCQkJfTsKIAkJfTsKLQkJOTNGMTlBQzMwODI0NUU1OTAwMUU5QUJD
ID0gewotCQkJZmlsZVJlZiA9IDM1NEYyNDhBMDJFRTI4NTkwQUNBMkFDQTsKLQkJCWlzYSA9IFBC
WEJ1aWxkRmlsZTsKLQkJCXNldHRpbmdzID0gewotCQkJfTsKLQkJfTsKIAkJOTNGMTlBQzQwODI0
NUU1OTAwMUU5QUJDID0gewogCQkJZmlsZVJlZiA9IEY1MTE3QkNBMDJGOUZGRUYwMTg2MzVDRTsK
IAkJCWlzYSA9IFBCWEJ1aWxkRmlsZTsKQEAgLTc0NDYsOCArNzM3Myw2IEBACiAJCQkJMkQ5MDY2
MEMwNjY1RDkzNzAwNkI2RjFBLAogCQkJCUY1ODc4NENEMDJERTM3NTkwMUVBNDEyMiwKIAkJCQlG
NTg3ODREQTAyREUzNzU5MDFFQTQxMjIsCi0JCQkJMzU0RjI0ODkwMkVFMjg1OTBBQ0EyQUNBLAot
CQkJCTM1NEYyNDhBMDJFRTI4NTkwQUNBMkFDQSwKIAkJCQk5MzFDOEExNjAzODAyODhCMDA4NjM1
Q0UsCiAJCQkJOTMxQzhBMTcwMzgwMjg4QjAwODYzNUNFLAogCQkJCUJFRjdFRUEwMDVGRjhGMEQw
MDk3MTdFRSwKQEAgLTg0MTcsMjIgKzgzNDIsNiBAQAogCQkJcmVmVHlwZSA9IDQ7CiAJCQlzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOwogCQl9OwotCQlGNTIzRDIzNTAyREU0Mzk2MDE4NjM1Q0EgPSB7
Ci0JCQlmaWxlRW5jb2RpbmcgPSAzMDsKLQkJCWlzYSA9IFBCWEZpbGVSZWZlcmVuY2U7Ci0JCQls
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsKLQkJCXBhdGggPSBkdGQuY3Bw
OwotCQkJcmVmVHlwZSA9IDQ7Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwotCQl9OwotCQlG
NTIzRDIzNjAyREU0Mzk2MDE4NjM1Q0EgPSB7Ci0JCQlmaWxlRW5jb2RpbmcgPSAzMDsKLQkJCWlz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7Ci0JCQlsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOwotCQkJcGF0aCA9IGR0ZC5oOwotCQkJcmVmVHlwZSA9IDQ7Ci0JCQlzb3VyY2VUcmVlID0g
Ijxncm91cD4iOwotCQl9OwogCQlGNTIzRDIzNzAyREU0Mzk2MDE4NjM1Q0EgPSB7CiAJCQlmaWxl
RW5jb2RpbmcgPSAzMDsKIAkJCWlzYSA9IFBCWEZpbGVSZWZlcmVuY2U7CkBAIC04NjYxLDggKzg1
NzAsNiBAQAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJNTUwQTBCQ0IwODVGNjA0RDAwNzM1M0Q2LAog
CQkJCTU1MEEwQkNDMDg1RjYwNEQwMDczNTNENiwKLQkJCQlGNTIzRDIzNTAyREU0Mzk2MDE4NjM1
Q0EsCi0JCQkJRjUyM0QyMzYwMkRFNDM5NjAxODYzNUNBLAogCQkJCUY1MjNEMjM3MDJERTQzOTYw
MTg2MzVDQSwKIAkJCQlGNTIzRDIzODAyREU0Mzk2MDE4NjM1Q0EsCiAJCQkJRjUyM0QyMzkwMkRF
NDM5NjAxODYzNUNBLApJbmRleDoga2h0bWwva2h0bWx2aWV3LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9raHRtbHZpZXcuY3BwLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjEzMwpkaWZmIC11IC1wIC1yMS4xMzMga2h0bWwva2h0bWx2aWV3LmNwcAotLS0g
a2h0bWwva2h0bWx2aWV3LmNwcAkxMSBNYXkgMjAwNSAwMDo1ODoyNyAtMDAwMAkxLjEzMworKysg
a2h0bWwva2h0bWx2aWV3LmNwcAkyMCBKdW4gMjAwNSAyMDo1NTowMiAtMDAwMApAQCAtNjA3LDEy
ICs2MDcsMTIgQEAgdm9pZCBLSFRNTFZpZXc6OmxheW91dCgpCiAgICAgaWYgKGRvY3VtZW50LT5p
c0hUTUxEb2N1bWVudCgpKSB7CiAgICAgICAgIE5vZGVJbXBsICpib2R5ID0gc3RhdGljX2Nhc3Q8
SFRNTERvY3VtZW50SW1wbCo+KGRvY3VtZW50KS0+Ym9keSgpOwogICAgICAgICBpZiAoYm9keSAm
JiBib2R5LT5yZW5kZXJlcigpKSB7Ci0gICAgICAgICAgICBpZiAoYm9keS0+aWQoKSA9PSBJRF9G
UkFNRVNFVCkgeworICAgICAgICAgICAgaWYgKGJvZHktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpm
cmFtZXNldCgpKSkgewogICAgICAgICAgICAgICAgIGJvZHktPnJlbmRlcmVyKCktPnNldE5lZWRz
TGF5b3V0KHRydWUpOwogICAgICAgICAgICAgICAgIHZNb2RlID0gQWx3YXlzT2ZmOwogICAgICAg
ICAgICAgICAgIGhNb2RlID0gQWx3YXlzT2ZmOwogICAgICAgICAgICAgfQotICAgICAgICAgICAg
ZWxzZSBpZiAoYm9keS0+aWQoKSA9PSBJRF9CT0RZKSB7CisgICAgICAgICAgICBlbHNlIGlmIChi
b2R5LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Ym9keSgpKSkgewogICAgICAgICAgICAgICAgIFJl
bmRlck9iamVjdCogbyA9IChyb290UmVuZGVyZXItPnN0eWxlKCktPm92ZXJmbG93KCkgPT0gT1ZJ
U0lCTEUpID8gYm9keS0+cmVuZGVyZXIoKSA6IHJvb3RSZW5kZXJlcjsKICAgICAgICAgICAgICAg
ICBhcHBseU92ZXJmbG93VG9WaWV3cG9ydChvLCBoTW9kZSwgdk1vZGUpOyAvLyBPbmx5IGFwcGxp
ZXMgdG8gSFRNTCBVQXMsIG5vdCB0byBYTUwvWEhUTUwgVUFzCiAgICAgICAgICAgICB9CkBAIC04
NzcsMTAgKzg3Nyw3IEBAIHZvaWQgS0hUTUxWaWV3Ojp2aWV3cG9ydE1vdXNlRG91YmxlQ2xpY2sK
IAogc3RhdGljIGJvb2wgaXNTdWJtaXRJbWFnZShET006Ok5vZGVJbXBsICpub2RlKQogewotICAg
IHJldHVybiBub2RlCi0gICAgICAgICYmIG5vZGUtPmlzSFRNTEVsZW1lbnQoKQotICAgICAgICAm
JiBub2RlLT5pZCgpID09IElEX0lOUFVUCi0gICAgICAgICYmIHN0YXRpY19jYXN0PEhUTUxJbnB1
dEVsZW1lbnRJbXBsKj4obm9kZSktPmlucHV0VHlwZSgpID09IEhUTUxJbnB1dEVsZW1lbnRJbXBs
OjpJTUFHRTsKKyAgICByZXR1cm4gbm9kZSAmJiBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
aW5wdXQoKSkgJiYgc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudEltcGwqPihub2RlKS0+aW5w
dXRUeXBlKCkgPT0gSFRNTElucHV0RWxlbWVudEltcGw6OklNQUdFOwogfQogCiB2b2lkIEtIVE1M
Vmlldzo6dmlld3BvcnRNb3VzZU1vdmVFdmVudCggUU1vdXNlRXZlbnQgKiBfbW91c2UgKQpJbmRl
eDoga2h0bWwvY3NzL2Nzc19iYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3Qv
V2ViQ29yZS9raHRtbC9jc3MvY3NzX2Jhc2UuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE1
CmRpZmYgLXUgLXAgLXIxLjE1IGtodG1sL2Nzcy9jc3NfYmFzZS5jcHAKLS0tIGtodG1sL2Nzcy9j
c3NfYmFzZS5jcHAJMTIgSnVuIDIwMDUgMDQ6MDc6MzAgLTAwMDAJMS4xNQorKysga2h0bWwvY3Nz
L2Nzc19iYXNlLmNwcAkyMCBKdW4gMjAwNSAyMDo1NTowMiAtMDAwMApAQCAtOTMsNiArOTMsMTIg
QEAgU3R5bGVMaXN0SW1wbDo6flN0eWxlTGlzdEltcGwoKQogCiAvLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQogCitzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgYW55VGFnTmFtZSgpCit7Cisg
ICAgc3RhdGljIFF1YWxpZmllZE5hbWUgYW55TmFtZShudWxsQXRvbSwgc3RhckF0b20sIHN0YXJB
dG9tKTsKKyAgICByZXR1cm4gYW55TmFtZTsKK30KKwogdm9pZCBDU1NTZWxlY3Rvcjo6cHJpbnQo
dm9pZCkKIHsKICAgICBrZERlYnVnKCA2MDgwICkgPDwgIltTZWxlY3RvcjogdGFnID0gIiA8PCAg
ICAgICB0YWcgPDwgIiwgYXR0ciA9IFwiIiA8PCBhdHRyIDw8ICJcIiwgbWF0Y2ggPSBcIiIgPDwg
bWF0Y2gKSW5kZXg6IGtodG1sL2Nzcy9jc3NfYmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9XZWJDb3JlL2todG1sL2Nzcy9jc3NfYmFzZS5oLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjEyCmRpZmYgLXUgLXAgLXIxLjEyIGtodG1sL2Nzcy9jc3NfYmFzZS5oCi0tLSBraHRtbC9j
c3MvY3NzX2Jhc2UuaAkxMiBKdW4gMjAwNSAwNDowNzozMCAtMDAwMAkxLjEyCisrKyBraHRtbC9j
c3MvY3NzX2Jhc2UuaAkyMCBKdW4gMjAwNSAyMDo1NTowMiAtMDAwMApAQCAtMjcsNiArMjcsNyBA
QAogI2luY2x1ZGUgImRvbS9kb21fc3RyaW5nLmgiCiAjaW5jbHVkZSAiZG9tL2RvbV9taXNjLmgi
CiAjaW5jbHVkZSAieG1sL2RvbV9ub2RlaW1wbC5oIgorI2luY2x1ZGUgImRvbV9xbmFtZS5oIgog
I2luY2x1ZGUgIm1pc2Mvc2hhcmVkLmgiCiAjaW5jbHVkZSA8cWRhdGV0aW1lLmg+CiAjaW5jbHVk
ZSA8cXB0cmxpc3QuaD4KQEAgLTczLDcgKzc0LDcgQEAgbmFtZXNwYWNlIERPTSB7CiAgICAgewog
ICAgIHB1YmxpYzoKIAlDU1NTZWxlY3RvcigpCi0JICAgIDogdGFnSGlzdG9yeSgwKSwgc2ltcGxl
U2VsZWN0b3IoMCksIG5leHRTZWxlY3RvcigwKSwgYXR0cigwKSwgdGFnKGFueVFOYW1lKSwKKwkg
ICAgOiB0YWdIaXN0b3J5KDApLCBzaW1wbGVTZWxlY3RvcigwKSwgbmV4dFNlbGVjdG9yKDApLCBh
dHRyKDApLCB0YWcoYW55VGFnTmFtZSgpKSwKICAgICAgICAgICAgICAgcmVsYXRpb24oIERlc2Nl
bmRhbnQgKSwgbWF0Y2goIE5vbmUgKSwKICAgICAgICAgICAgICAgcHNldWRvSWQoIDAgKSwgX3Bz
ZXVkb1R5cGUoUHNldWRvTm90UGFyc2VkKQogICAgICAgICB7fQpAQCAtMTY3LDEyICsxNjgsMTcg
QEAgbmFtZXNwYWNlIERPTSB7CiAgICAgICAgICAgICByZXR1cm4gX3BzZXVkb1R5cGU7CiAgICAg
ICAgIH0KIAorICAgICAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgYW55VGFnTmFtZSgp
OworCisgICAgICAgIGJvb2wgaGFzVGFnKCkgY29uc3QgeyByZXR1cm4gdGFnICE9IGFueVRhZ05h
bWUoKTsgfQorCiAJbXV0YWJsZSBET006OkF0b21pY1N0cmluZyB2YWx1ZTsKIAlDU1NTZWxlY3Rv
ciogdGFnSGlzdG9yeTsKICAgICAgICAgQ1NTU2VsZWN0b3IqIHNpbXBsZVNlbGVjdG9yOyAvLyBV
c2VkIGZvciA6bm90LgogICAgICAgICBDU1NTZWxlY3RvciogbmV4dFNlbGVjdG9yOyAvLyB1c2Vk
IGZvciAsLWNoYWluZWQgc2VsZWN0b3JzCiAJUV9VSU5UMzIgICAgIGF0dHI7Ci0JUV9VSU5UMzIg
ICAgIHRhZzsKKwkKKyAgICAgICAgUXVhbGlmaWVkTmFtZSB0YWc7CiAKICAgICAgICAgUmVsYXRp
b24gcmVsYXRpb24gICAgICAgICAgICAgIDogMzsKIAltdXRhYmxlIE1hdGNoICBtYXRjaCAgICAg
ICAgICAgOiA0OwpJbmRleDoga2h0bWwvY3NzL2Nzc19ydWxlaW1wbC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvY3NzL2Nzc19ydWxlaW1wbC5jcHAsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuMTgKZGlmZiAtdSAtcCAtcjEuMTgga2h0bWwvY3NzL2Nzc19y
dWxlaW1wbC5jcHAKLS0tIGtodG1sL2Nzcy9jc3NfcnVsZWltcGwuY3BwCTExIE1heSAyMDA1IDA1
OjQ5OjM0IC0wMDAwCTEuMTgKKysrIGtodG1sL2Nzcy9jc3NfcnVsZWltcGwuY3BwCTIwIEp1biAy
MDA1IDIwOjU1OjAyIC0wMDAwCkBAIC0zMSw3ICszMSw2IEBACiAjaW5jbHVkZSAiY3NzL2Nzc19y
dWxlaW1wbC5oIgogCiAjaW5jbHVkZSAibWlzYy9sb2FkZXIuaCIKLSNpbmNsdWRlICJtaXNjL2h0
bWx0YWdzLmgiCiAjaW5jbHVkZSAibWlzYy9odG1sYXR0cnMuaCIKICNpbmNsdWRlICJ4bWwvZG9t
X2RvY2ltcGwuaCIKIApJbmRleDoga2h0bWwvY3NzL2Nzc3N0eWxlc2VsZWN0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2Nzcy9jc3NzdHlsZXNlbGVj
dG9yLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xODcKZGlmZiAtdSAtcCAtcjEuMTg3IGto
dG1sL2Nzcy9jc3NzdHlsZXNlbGVjdG9yLmNwcAotLS0ga2h0bWwvY3NzL2Nzc3N0eWxlc2VsZWN0
b3IuY3BwCTEyIEp1biAyMDA1IDA0OjA3OjMwIC0wMDAwCTEuMTg3CisrKyBraHRtbC9jc3MvY3Nz
c3R5bGVzZWxlY3Rvci5jcHAJMjAgSnVuIDIwMDUgMjA6NTU6MDYgLTAwMDAKQEAgLTMzOSw3ICsz
MzksNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUnVsZXMoQ1NTUnVsCiAgICAgICAg
ICAgICBtYXRjaFJ1bGVzRm9yTGlzdChydWxlcy0+Z2V0Q2xhc3NSdWxlcyhzaW5nbGVDbGFzcy0+
c3RyaW5nKCkuaW1wbGVtZW50YXRpb24oKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCk7CiAg
ICAgfQotICAgIG1hdGNoUnVsZXNGb3JMaXN0KHJ1bGVzLT5nZXRUYWdSdWxlcygodm9pZCopKGlu
dClsb2NhbE5hbWVQYXJ0KGVsZW1lbnQtPmlkKCkpKSwKKyAgICBtYXRjaFJ1bGVzRm9yTGlzdChy
dWxlcy0+Z2V0VGFnUnVsZXMoZWxlbWVudC0+bG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSks
CiAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgpOwog
ICAgIG1hdGNoUnVsZXNGb3JMaXN0KHJ1bGVzLT5nZXRVbml2ZXJzYWxSdWxlcygpLCBmaXJzdFJ1
bGVJbmRleCwgbGFzdFJ1bGVJbmRleCk7CiAgICAgCkBAIC0zNjAsOSArMzYwLDkgQEAgdm9pZCBD
U1NTdHlsZVNlbGVjdG9yOjptYXRjaFJ1bGVzRm9yTGlzdAogICAgIGlmICghcnVsZXMpIHJldHVy
bjsKICAgICBmb3IgKENTU1J1bGVEYXRhKiBkID0gcnVsZXMtPmZpcnN0KCk7IGQ7IGQgPSBkLT5u
ZXh0KCkpIHsKICAgICAgICAgQ1NTU3R5bGVSdWxlSW1wbCogcnVsZSA9IGQtPnJ1bGUoKTsKLSAg
ICAgICAgUV9VSU5UMTYgY3NzVGFnSWQgPSBsb2NhbE5hbWVQYXJ0KGVsZW1lbnQtPmlkKCkpOwot
ICAgICAgICBRX1VJTlQxNiB0YWcgPSBsb2NhbE5hbWVQYXJ0KGQtPnNlbGVjdG9yKCktPnRhZyk7
Ci0gICAgICAgIGlmICgoY3NzVGFnSWQgPT0gdGFnIHx8IHRhZyA9PSBhbnlMb2NhbE5hbWUpICYm
IGNoZWNrU2VsZWN0b3IoZC0+c2VsZWN0b3IoKSwgZWxlbWVudCkpIHsKKyAgICAgICAgY29uc3Qg
QXRvbWljU3RyaW5nJiBsb2NhbE5hbWUgPSBlbGVtZW50LT5sb2NhbE5hbWUoKTsKKyAgICAgICAg
Y29uc3QgQXRvbWljU3RyaW5nJiBzZWxlY3RvckxvY2FsTmFtZSA9IGQtPnNlbGVjdG9yKCktPnRh
Zy5sb2NhbE5hbWUoKTsKKyAgICAgICAgaWYgKChsb2NhbE5hbWUgPT0gc2VsZWN0b3JMb2NhbE5h
bWUgfHwgc2VsZWN0b3JMb2NhbE5hbWUgPT0gc3RhckF0b20pICYmIGNoZWNrU2VsZWN0b3IoZC0+
c2VsZWN0b3IoKSwgZWxlbWVudCkpIHsKICAgICAgICAgICAgIC8vIElmIHRoZSBydWxlIGhhcyBu
byBwcm9wZXJ0aWVzIHRvIGFwcGx5LCB0aGVuIGlnbm9yZSBpdC4KICAgICAgICAgICAgIENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uSW1wbCogZGVjbCA9IHJ1bGUtPmRlY2xhcmF0aW9uKCk7CiAg
ICAgICAgICAgICBpZiAoIWRlY2wgfHwgIWRlY2wtPmxlbmd0aCgpKSBjb250aW51ZTsKQEAgLTYw
OSw3ICs2MDksNyBAQCBib29sIENTU1N0eWxlU2VsZWN0b3I6OmNhblNoYXJlU3R5bGVXaXRoCiAg
ICAgaWYgKG4tPmlzU3R5bGVkRWxlbWVudCgpKSB7CiAgICAgICAgIGJvb2wgbW91c2VJbnNpZGUg
PSBlbGVtZW50LT5yZW5kZXJlcigpID8gZWxlbWVudC0+cmVuZGVyZXIoKS0+bW91c2VJbnNpZGUo
KSA6IGZhbHNlOwogICAgICAgICBTdHlsZWRFbGVtZW50SW1wbCogcyA9IHN0YXRpY19jYXN0PFN0
eWxlZEVsZW1lbnRJbXBsKj4obik7Ci0gICAgICAgIGlmIChzLT5yZW5kZXJlcigpICYmIChzLT5p
ZCgpID09IGVsZW1lbnQtPmlkKCkpICYmICFzLT5oYXNJRCgpICYmCisgICAgICAgIGlmIChzLT5y
ZW5kZXJlcigpICYmIChzLT50YWdOYW1lKCkgPT0gZWxlbWVudC0+dGFnTmFtZSgpKSAmJiAhcy0+
aGFzSUQoKSAmJgogICAgICAgICAgICAgKHMtPmhhc0NsYXNzKCkgPT0gZWxlbWVudC0+aGFzQ2xh
c3MoKSkgJiYgIXMtPmlubGluZVN0eWxlRGVjbCgpICYmCiAgICAgICAgICAgICAocy0+aGFzTWFw
cGVkQXR0cmlidXRlcygpID09IHN0eWxlZEVsZW1lbnQtPmhhc01hcHBlZEF0dHJpYnV0ZXMoKSkg
JiYKICAgICAgICAgICAgIChzLT5pc0xpbmsoKSA9PSBlbGVtZW50LT5pc0xpbmsoKSkgJiYgCkBA
IC04ODUsMjMgKzg4NSwyMyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFkanVzdFJlbmRlclN0
eWxlCiAgICAgICAgIC8vIFNpdGVzIGFsc28gY29tbW9ubHkgdXNlIGRpc3BsYXk6aW5saW5lL2Js
b2NrIG9uIDx0ZD5zIGFuZCA8dGFibGU+cy4gIEluIHF1aXJrcyBtb2RlIHdlIGZvcmNlCiAgICAg
ICAgIC8vIHRoZXNlIHRhZ3MgdG8gcmV0YWluIHRoZWlyIGRpc3BsYXkgdHlwZXMuCiAgICAgICAg
IGlmICghc3RyaWN0UGFyc2luZyAmJiBlKSB7Ci0gICAgICAgICAgICBpZiAoZS0+aWQoKSA9PSBJ
RF9URCkgeworICAgICAgICAgICAgaWYgKGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0ZCgpKSkg
ewogICAgICAgICAgICAgICAgIHN0eWxlLT5zZXREaXNwbGF5KFRBQkxFX0NFTEwpOwogICAgICAg
ICAgICAgICAgIHN0eWxlLT5zZXRGbG9hdGluZyhGTk9ORSk7CiAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBlbHNlIGlmIChlLT5pZCgpID09IElEX1RBQkxFKQorICAgICAgICAgICAgZWxzZSBp
ZiAoZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRhYmxlKCkpKQogICAgICAgICAgICAgICAgIHN0
eWxlLT5zZXREaXNwbGF5KHN0eWxlLT5pc0Rpc3BsYXlJbmxpbmVUeXBlKCkgPyBJTkxJTkVfVEFC
TEUgOiBUQUJMRSk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBGcmFtZXMgYW5kIGZyYW1lc2V0
cyBuZXZlciBob25vciBwb3NpdGlvbjpyZWxhdGl2ZSBvciBwb3NpdGlvbjphYnNvbHV0ZS4gIFRo
aXMgaXMgbmVjZXNzYXJ5IHRvCiAgICAgICAgIC8vIGZpeCBhIGNyYXNoIHdoZXJlIGEgc2l0ZSB0
cmllcyB0byBwb3NpdGlvbiB0aGVzZSBvYmplY3RzLiAgVGhleSBhbHNvIG5ldmVyIGhvbm9yIGRp
c3BsYXkuCi0gICAgICAgIGlmIChlICYmIChlLT5pZCgpID09IElEX0ZSQU1FIHx8IGUtPmlkKCkg
PT0gSURfRlJBTUVTRVQpKSB7CisgICAgICAgIGlmIChlICYmIChlLT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6ZnJhbWUoKSkgfHwgZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZyYW1lc2V0KCkpKSkg
ewogICAgICAgICAgICAgc3R5bGUtPnNldFBvc2l0aW9uKFNUQVRJQyk7CiAgICAgICAgICAgICBz
dHlsZS0+c2V0RGlzcGxheShCTE9DSyk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBUYWJsZSBo
ZWFkZXJzIHdpdGggYSB0ZXh0LWFsaWduIG9mIGF1dG8gd2lsbCBjaGFuZ2UgdGhlIHRleHQtYWxp
Z24gdG8gY2VudGVyLgotICAgICAgICBpZiAoZSAmJiBlLT5pZCgpID09IElEX1RIICYmIHN0eWxl
LT50ZXh0QWxpZ24oKSA9PSBUQUFVVE8pCisgICAgICAgIGlmIChlICYmIGUtPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjp0aCgpKSAmJiBzdHlsZS0+dGV4dEFsaWduKCkgPT0gVEFBVVRPKQogICAgICAg
ICAgICAgc3R5bGUtPnNldFRleHRBbGlnbihDRU5URVIpOwogICAgICAgICAKICAgICAgICAgLy8g
TXV0YXRlIHRoZSBkaXNwbGF5IHRvIEJMT0NLIG9yIFRBQkxFIGZvciBjZXJ0YWluIGNhc2VzLCBl
LmcuLCBpZiBzb21lb25lIGF0dGVtcHRzIHRvCkBAIC05NzksNyArOTc5LDcgQEAgYm9vbCBDU1NT
dHlsZVNlbGVjdG9yOjpjaGVja1NlbGVjdG9yKENTUwogICAgIC8vIFdlIHRyYWNrIHdoZXRoZXIg
b3Igbm90IHRoZSBydWxlIGNvbnRhaW5zIG9ubHkgOmhvdmVyIGFuZCA6YWN0aXZlIGluIGEgc2lt
cGxlIHNlbGVjdG9yLiBJZgogICAgIC8vIHNvLCB3ZSBjYW4ndCBhbGxvdyB0aGF0IHRvIGFwcGx5
IHRvIGV2ZXJ5IGVsZW1lbnQgb24gdGhlIHBhZ2UuICBXZSBhc3N1bWUgdGhlIGF1dGhvciBpbnRl
bmRlZAogICAgIC8vIHRvIGFwcGx5IHRoZSBydWxlcyBvbmx5IHRvIGxpbmtzLgotICAgIGJvb2wg
b25seUhvdmVyQWN0aXZlID0gKHNlbC0+dGFnID09IGFueVFOYW1lICYmCisgICAgYm9vbCBvbmx5
SG92ZXJBY3RpdmUgPSAoIXNlbC0+aGFzVGFnKCkgJiYKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAoc2VsLT5tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3MgJiYKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIChzZWwtPnBzZXVkb1R5cGUoKSA9PSBDU1NTZWxlY3Rvcjo6
UHNldWRvSG92ZXIgfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWwtPnBzZXVk
b1R5cGUoKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQWN0aXZlKSkpOwpAQCAtMTA5NiwxOSArMTA5
NiwxNCBAQCBib29sIENTU1N0eWxlU2VsZWN0b3I6OmNoZWNrT25lU2VsZWN0b3IoCiAgICAgaWYo
IWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChzZWwtPnRhZyAhPSBhbnlRTmFt
ZSkgewotICAgICAgICBpbnQgZWx0SUQgPSBlLT5pZCgpOwotICAgICAgICBRX1VJTlQxNiBsb2Nh
bE5hbWUgPSBsb2NhbE5hbWVQYXJ0KGVsdElEKTsKLSAgICAgICAgUV9VSU5UMTYgbnMgPSBuYW1l
c3BhY2VQYXJ0KGVsdElEKTsKLSAgICAgICAgUV9VSU5UMTYgc2VsTG9jYWxOYW1lID0gbG9jYWxO
YW1lUGFydChzZWwtPnRhZyk7Ci0gICAgICAgIFFfVUlOVDE2IHNlbE5TID0gbmFtZXNwYWNlUGFy
dChzZWwtPnRhZyk7Ci0gICAgICAgIAotICAgICAgICBpZiAobG9jYWxOYW1lIDw9IElEX0xBU1Rf
VEFHICYmIGUtPmlzSFRNTEVsZW1lbnQoKSkKLSAgICAgICAgICAgIG5zID0geGh0bWxOYW1lc3Bh
Y2U7IC8vIEZJWE1FOiBSZWFsbHkgd2FudCB0byBtb3ZlIGF3YXkgZnJvbSB0aGlzIGNvbXBsaWNh
dGVkIGhhY2tlcnkgYW5kIGp1c3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IHN3aXRjaCB0YWdzIGFuZCBhdHRyIG5hbWVzIG92ZXIgdG8gQXRvbWljU3RyaW5ncy4KLSAgICAg
ICAgCi0gICAgICAgIGlmICgoc2VsTG9jYWxOYW1lICE9IGFueUxvY2FsTmFtZSAmJiBsb2NhbE5h
bWUgIT0gc2VsTG9jYWxOYW1lKSB8fAotICAgICAgICAgICAgKHNlbE5TICE9IGFueU5hbWVzcGFj
ZSAmJiBucyAhPSBzZWxOUykpCisgICAgaWYgKHNlbC0+aGFzVGFnKCkpIHsKKyAgICAgICAgY29u
c3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUgPSBlLT5sb2NhbE5hbWUoKTsKKyAgICAgICAgY29u
c3QgQXRvbWljU3RyaW5nJiBucyA9IGUtPm5hbWVzcGFjZVVSSSgpOworICAgICAgICBjb25zdCBB
dG9taWNTdHJpbmcmIHNlbExvY2FsTmFtZSA9IHNlbC0+dGFnLmxvY2FsTmFtZSgpOworICAgICAg
ICBjb25zdCBBdG9taWNTdHJpbmcmIHNlbE5TID0gc2VsLT50YWcubmFtZXNwYWNlVVJJKCk7Cisg
ICAgCisgICAgICAgIGlmICgoc2VsTG9jYWxOYW1lICE9IHN0YXJBdG9tICYmIGxvY2FsTmFtZSAh
PSBzZWxMb2NhbE5hbWUpIHx8CisgICAgICAgICAgICAoc2VsTlMgIT0gc3RhckF0b20gJiYgbnMg
IT0gc2VsTlMpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtMTI5NSw3
ICsxMjkwLDcgQEAgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpjaGVja09uZVNlbGVjdG9yKAogICAg
ICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvSG92ZXI6IHsKICAgICAgICAgICAgICAg
ICAvLyBJZiB3ZSdyZSBpbiBxdWlya3MgbW9kZSwgdGhlbiBob3ZlciBzaG91bGQgbmV2ZXIgbWF0
Y2ggYW5jaG9ycyB3aXRoIG5vCiAgICAgICAgICAgICAgICAgLy8gaHJlZi4gIFRoaXMgaXMgaW1w
b3J0YW50IGZvciBzaXRlcyBsaWtlIHdzai5jb20uCi0gICAgICAgICAgICAgICAgaWYgKHN0cmlj
dFBhcnNpbmcgfHwgZS0+aWQoKSAhPSBJRF9BIHx8IGUtPmlzTGluaygpKSB7CisgICAgICAgICAg
ICAgICAgaWYgKHN0cmljdFBhcnNpbmcgfHwgIWUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjphKCkp
IHx8IGUtPmlzTGluaygpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50ID09IGUg
JiYgc3R5bGUpCiAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZS0+c2V0QWZmZWN0ZWRCeUhv
dmVyUnVsZXModHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChlLT5yZW5kZXJlcigpKSB7
CkBAIC0xMzI2LDcgKzEzMjEsNyBAQCBib29sIENTU1N0eWxlU2VsZWN0b3I6OmNoZWNrT25lU2Vs
ZWN0b3IoCiAgICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9BY3RpdmU6CiAgICAg
ICAgICAgICAgICAgLy8gSWYgd2UncmUgaW4gcXVpcmtzIG1vZGUsIHRoZW4gOmFjdGl2ZSBzaG91
bGQgbmV2ZXIgbWF0Y2ggYW5jaG9ycyB3aXRoIG5vCiAgICAgICAgICAgICAgICAgLy8gaHJlZi4g
Ci0gICAgICAgICAgICAgICAgaWYgKHN0cmljdFBhcnNpbmcgfHwgZS0+aWQoKSAhPSBJRF9BIHx8
IGUtPmlzTGluaygpKSB7CisgICAgICAgICAgICAgICAgaWYgKHN0cmljdFBhcnNpbmcgfHwgIWUt
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjphKCkpIHx8IGUtPmlzTGluaygpKSB7CiAgICAgICAgICAg
ICAgICAgICAgIGlmIChlbGVtZW50ID09IGUgJiYgc3R5bGUpCiAgICAgICAgICAgICAgICAgICAg
ICAgICBzdHlsZS0+c2V0QWZmZWN0ZWRCeUFjdGl2ZVJ1bGVzKHRydWUpOwogICAgICAgICAgICAg
ICAgICAgICBlbHNlIGlmIChlLT5yZW5kZXJlcigpKQpAQCAtMTQyNSw5ICsxNDIwLDkgQEAgdm9p
ZCBDU1NSdWxlU2V0OjphZGRSdWxlKENTU1N0eWxlUnVsZUltcAogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgICAKLSAgICBRX1VJTlQxNiBsb2NhbE5hbWUgPSBsb2NhbE5hbWVQYXJ0KHNlbC0+
dGFnKTsKLSAgICBpZiAobG9jYWxOYW1lICE9IGFueUxvY2FsTmFtZSkgewotICAgICAgICBhZGRU
b1J1bGVTZXQoKHZvaWQqKShpbnQpbG9jYWxOYW1lLCBtX3RhZ1J1bGVzLCBydWxlLCBzZWwpOwor
ICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lID0gc2VsLT50YWcubG9jYWxOYW1lKCk7
CisgICAgaWYgKGxvY2FsTmFtZSAhPSBzdGFyQXRvbSkgeworICAgICAgICBhZGRUb1J1bGVTZXQo
bG9jYWxOYW1lLmltcGxlbWVudGF0aW9uKCksIG1fdGFnUnVsZXMsIHJ1bGUsIHNlbCk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAgICAgCkluZGV4OiBraHRtbC9kb20vY3NzX3N0eWxlc2hlZXQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2RvbS9jc3Nf
c3R5bGVzaGVldC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuOApkaWZmIC11IC1wIC1yMS44
IGtodG1sL2RvbS9jc3Nfc3R5bGVzaGVldC5jcHAKLS0tIGtodG1sL2RvbS9jc3Nfc3R5bGVzaGVl
dC5jcHAJMjAgTWF5IDIwMDQgMTU6MDk6MzIgLTAwMDAJMS44CisrKyBraHRtbC9kb20vY3NzX3N0
eWxlc2hlZXQuY3BwCTIwIEp1biAyMDA1IDIwOjU1OjA3IC0wMDAwCkBAIC0zODUsNyArMzg1LDcg
QEAgTGlua1N0eWxlICYgTGlua1N0eWxlOjpvcGVyYXRvciA9IChjb25zdAogCiAgICAgLy8gIyMj
IGNoZWNrIGxpbmsgaXMgcmVhbGx5IGxpbmtpbmcgYSBzdHlsZSBzaGVldAogICAgIGlmKCBuICYm
IG4tPmlzRWxlbWVudE5vZGUoKSAmJgotCShuLT5pZCgpID09IElEX1NUWUxFIHx8IG4tPmlkKCkg
PT0gSURfTElOSykgKSB7CisJKG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzdHlsZSgpKSB8fCBu
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6bGluaygpKSkpIHsKICAgICBub2RlID0gbjsKICAgICBp
Zihub2RlKSBub2RlLT5yZWYoKTsKICAgICB9CkBAIC0zOTksMTIgKzM5OSwxNCBAQCBMaW5rU3R5
bGU6On5MaW5rU3R5bGUoKQogCiBTdHlsZVNoZWV0IExpbmtTdHlsZTo6c2hlZXQoKQogewotICAg
IGludCBpZCA9IG5vZGUgPyBub2RlLT5pZCgpIDogMDsKKyAgICBpZiAoIW5vZGUpCisgICAgICAg
IHJldHVybiBTdHlsZVNoZWV0KCk7CisKICAgICAvLyAjIyMgYWRkIFBJCiAgICAgcmV0dXJuIAot
CSggaWQgPT0gSURfU1RZTEUpID8KKwkobm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnN0eWxl
KCkpKSA/CiAJc3RhdGljX2Nhc3Q8SFRNTFN0eWxlRWxlbWVudEltcGwgKj4obm9kZSktPnNoZWV0
KCkKLQk6ICggKGlkID09IElEX0xJTkspID8KKwk6ICggbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OmxpbmsoKSkgPwogCSAgICBzdGF0aWNfY2FzdDxIVE1MTGlua0VsZW1lbnRJbXBsICo+KG5v
ZGUpLT5zaGVldCgpCiAJICAgIDogU3R5bGVTaGVldCgpICk7CiB9CkluZGV4OiBraHRtbC9kb20v
ZG9tX2VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2to
dG1sL2RvbS9kb21fZWxlbWVudC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTIKZGlmZiAt
dSAtcCAtcjEuMTIga2h0bWwvZG9tL2RvbV9lbGVtZW50LmNwcAotLS0ga2h0bWwvZG9tL2RvbV9l
bGVtZW50LmNwcAkxMiBNYXkgMjAwNSAxNzoxMToyMSAtMDAwMAkxLjEyCisrKyBraHRtbC9kb20v
ZG9tX2VsZW1lbnQuY3BwCTIwIEp1biAyMDA1IDIwOjU1OjA3IC0wMDAwCkBAIC0xNDEsNyArMTQx
LDcgQEAgRWxlbWVudDo6fkVsZW1lbnQoKQogRE9NU3RyaW5nIEVsZW1lbnQ6OnRhZ05hbWUoKSBj
b25zdAogewogICAgIGlmICghaW1wbCkgdGhyb3cgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbjo6
Tk9UX0ZPVU5EX0VSUik7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsKj4oaW1w
bCktPnRhZ05hbWUoKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RWxlbWVudEltcGwqPihpbXBs
KS0+bm9kZU5hbWUoKTsKIH0KIAogRE9NU3RyaW5nIEVsZW1lbnQ6OmdldEF0dHJpYnV0ZSggY29u
c3QgRE9NU3RyaW5nICZuYW1lICkKSW5kZXg6IGtodG1sL2RvbS9kb21fbm9kZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZG9tL2RvbV9ub2RlLmNwcCx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMgpkaWZmIC11IC1wIC1yMS4xMiBraHRtbC9kb20vZG9t
X25vZGUuY3BwCi0tLSBraHRtbC9kb20vZG9tX25vZGUuY3BwCTExIE1heSAyMDA1IDAwOjU4OjI4
IC0wMDAwCTEuMTIKKysrIGtodG1sL2RvbS9kb21fbm9kZS5jcHAJMjAgSnVuIDIwMDUgMjA6NTU6
MDcgLTAwMDAKQEAgLTMyNCw3ICszMjQsNyBAQCBib29sIE5vZGU6OmlzU3VwcG9ydGVkKCBjb25z
dCBET01TdHJpbmcgCiBET01TdHJpbmcgTm9kZTo6bmFtZXNwYWNlVVJJKCAgKSBjb25zdAogewog
ICAgIGlmICghaW1wbCkgcmV0dXJuIERPTVN0cmluZygpOwotICAgIHJldHVybiBpbXBsLT5nZXRE
b2N1bWVudCgpLT5uYW1lc3BhY2VVUkkoaW1wbC0+aWQoKSk7CisgICAgcmV0dXJuIGltcGwtPm5h
bWVzcGFjZVVSSSgpOwogfQogCiBET01TdHJpbmcgTm9kZTo6cHJlZml4KCAgKSBjb25zdApAQCAt
MzM3LDcgKzMzNyw3IEBAIHZvaWQgTm9kZTo6c2V0UHJlZml4KGNvbnN0IERPTVN0cmluZyAmcHIK
IHsKICAgICBpZiAoIWltcGwpIHRocm93IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb246Ok5PVF9G
T1VORF9FUlIpOwogICAgIGludCBleGNlcHRpb25jb2RlID0gMDsKLSAgICBpbXBsLT5zZXRQcmVm
aXgocHJlZml4LGV4Y2VwdGlvbmNvZGUpOworICAgIGltcGwtPnNldFByZWZpeChwcmVmaXguaW1w
bGVtZW50YXRpb24oKSxleGNlcHRpb25jb2RlKTsKICAgICBpZiAoZXhjZXB0aW9uY29kZSkKICAg
ICAgICAgdGhyb3cgRE9NRXhjZXB0aW9uKGV4Y2VwdGlvbmNvZGUpOwogfQpAQCAtMzc2LDEzICsz
NzYsNiBAQCBib29sIE5vZGU6OmRpc3BhdGNoRXZlbnQoY29uc3QgRXZlbnQgJmV2CiAgICAgcmV0
dXJuIHI7CiB9CiAKLQotdW5zaWduZWQgaW50IE5vZGU6OmVsZW1lbnRJZCgpIGNvbnN0Ci17Ci0g
ICAgaWYgKCFpbXBsKSByZXR1cm4gMDsKLSAgICByZXR1cm4gaW1wbC0+aWQoKTsKLX0KLQogdW5z
aWduZWQgbG9uZyBOb2RlOjppbmRleCgpIGNvbnN0CiB7CiAgICAgaWYgKCFpbXBsKSByZXR1cm4g
MDsKSW5kZXg6IGtodG1sL2RvbS9kb21fbm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9XZWJDb3JlL2todG1sL2RvbS9kb21fbm9kZS5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjEyCmRpZmYgLXUgLXAgLXIxLjEyIGtodG1sL2RvbS9kb21fbm9kZS5oCi0tLSBraHRtbC9kb20v
ZG9tX25vZGUuaAkxOCBNYXkgMjAwNSAyMToxMDoyNCAtMDAwMAkxLjEyCisrKyBraHRtbC9kb20v
ZG9tX25vZGUuaAkyMCBKdW4gMjAwNSAyMDo1NTowOCAtMDAwMApAQCAtODU1LDEzICs4NTUsNiBA
QCBwdWJsaWM6CiAgICAgYm9vbCBkaXNwYXRjaEV2ZW50KGNvbnN0IEV2ZW50ICZldnQpOwogCiAg
ICAgLyoqCi0gICAgICogQGludGVybmFsCi0gICAgICogbm90IHBhcnQgb2YgdGhlIERPTS4KLSAg
ICAgKiBAcmV0dXJucyB0aGUgZWxlbWVudCBpZCwgaW4gY2FzZSB0aGlzIGlzIGFuIGVsZW1lbnQs
IDAgb3RoZXJ3aXNlCi0gICAgICovCi0gICAgUV9VSU5UMzIgZWxlbWVudElkKCkgY29uc3Q7Ci0K
LSAgICAvKioKICAgICAgKiB0ZXN0cyBpZiB0aGlzIE5vZGUgaXMgMC4gVXNlZnVsIGVzcGVjaWFs
bHksIGlmIGNhc3RpbmcgdG8gYSBkZXJpdmVkCiAgICAgICogY2xhc3M6CiAgICAgICoKSW5kZXg6
IGtodG1sL2RvbS9odG1sX2Jhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9X
ZWJDb3JlL2todG1sL2RvbS9odG1sX2Jhc2UuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjYK
ZGlmZiAtdSAtcCAtcjEuNiBraHRtbC9kb20vaHRtbF9iYXNlLmNwcAotLS0ga2h0bWwvZG9tL2h0
bWxfYmFzZS5jcHAJMyBOb3YgMjAwMyAwNjozMjowNCAtMDAwMAkxLjYKKysrIGtodG1sL2RvbS9o
dG1sX2Jhc2UuY3BwCTIwIEp1biAyMDA1IDIwOjU1OjA4IC0wMDAwCkBAIC00MSw3ICs0MSw3IEBA
IEhUTUxCb2R5RWxlbWVudDo6SFRNTEJvZHlFbGVtZW50KEhUTUxCb2QKIAogSFRNTEJvZHlFbGVt
ZW50ICZIVE1MQm9keUVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewot
ICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfQk9EWSApOworICAgIGFzc2lnbk90aGVyKCBvdGhl
ciwgSFRNTE5hbWVzOjpib2R5KCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTEzNSw3
ICsxMzUsNyBAQCBIVE1MRnJhbWVFbGVtZW50OjpIVE1MRnJhbWVFbGVtZW50KEhUTUxGCiAKIEhU
TUxGcmFtZUVsZW1lbnQgJkhUTUxGcmFtZUVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUg
Jm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfRlJBTUUgKTsKKyAgICBhc3Np
Z25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6ZnJhbWUoKSApOwogICAgIHJldHVybiAqdGhpczsK
IH0KIApAQCAtMjY1LDcgKzI2NSw3IEBAIEhUTUxJRnJhbWVFbGVtZW50OjpIVE1MSUZyYW1lRWxl
bWVudChIVE0KIAogSFRNTElGcmFtZUVsZW1lbnQgJkhUTUxJRnJhbWVFbGVtZW50OjpvcGVyYXRv
ciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0lG
UkFNRSApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjppZnJhbWUoKSApOwog
ICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtNDE0LDcgKzQxNCw3IEBAIEhUTUxGcmFtZVNldEVs
ZW1lbnQ6OkhUTUxGcmFtZVNldEVsZW1lbnQKIAogSFRNTEZyYW1lU2V0RWxlbWVudCAmSFRNTEZy
YW1lU2V0RWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNz
aWduT3RoZXIoIG90aGVyLCBJRF9GUkFNRVNFVCApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwg
SFRNTE5hbWVzOjpmcmFtZXNldCgpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC00NjYs
NyArNDY2LDcgQEAgSFRNTEhlYWRFbGVtZW50OjpIVE1MSGVhZEVsZW1lbnQoSFRNTEhlYQogCiBI
VE1MSGVhZEVsZW1lbnQgJkhUTUxIZWFkRWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAm
b3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9IRUFEICk7CisgICAgYXNzaWdu
T3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OmhlYWQoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0K
IApAQCAtNTA3LDcgKzUwNyw3IEBAIEhUTUxIdG1sRWxlbWVudDo6SFRNTEh0bWxFbGVtZW50KEhU
TUxIdG0KIAogSFRNTEh0bWxFbGVtZW50ICZIVE1MSHRtbEVsZW1lbnQ6Om9wZXJhdG9yID0gKGNv
bnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfSFRNTCApOwor
ICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpodG1sKCkgKTsKICAgICByZXR1cm4g
KnRoaXM7CiB9CiAKSW5kZXg6IGtodG1sL2RvbS9odG1sX2Jsb2NrLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9kb20vaHRtbF9ibG9jay5jcHAsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuNApkaWZmIC11IC1wIC1yMS40IGtodG1sL2RvbS9odG1sX2Jsb2Nr
LmNwcAotLS0ga2h0bWwvZG9tL2h0bWxfYmxvY2suY3BwCTEwIEp1biAyMDAyIDIwOjA3OjM0IC0w
MDAwCTEuNAorKysga2h0bWwvZG9tL2h0bWxfYmxvY2suY3BwCTIwIEp1biAyMDA1IDIwOjU1OjA4
IC0wMDAwCkBAIC00Myw3ICs0Myw3IEBAIEhUTUxCbG9ja3F1b3RlRWxlbWVudDo6SFRNTEJsb2Nr
cXVvdGVFbGUKIAogSFRNTEJsb2NrcXVvdGVFbGVtZW50ICZIVE1MQmxvY2txdW90ZUVsZW1lbnQ6
Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhl
ciwgSURfQkxPQ0tRVU9URSApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpi
bG9ja3F1b3RlKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTg0LDcgKzg0LDcgQEAg
SFRNTERpdkVsZW1lbnQ6OkhUTUxEaXZFbGVtZW50KEhUTUxEaXZFbAogCiBIVE1MRGl2RWxlbWVu
dCAmSFRNTERpdkVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAg
IGFzc2lnbk90aGVyKCBvdGhlciwgSURfRElWICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBI
VE1MTmFtZXM6OmRpdigpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC0xMjUsNyArMTI1
LDcgQEAgSFRNTEhSRWxlbWVudDo6SFRNTEhSRWxlbWVudChIVE1MSFJFbGVtZQogCiBIVE1MSFJF
bGVtZW50ICZIVE1MSFJFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsK
LSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0hSICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVy
LCBIVE1MTmFtZXM6OmhyKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTIwNSwxNiAr
MjA1LDE3IEBAIEhUTUxIZWFkaW5nRWxlbWVudDo6SFRNTEhlYWRpbmdFbGVtZW50KEgKIAogSFRN
TEhlYWRpbmdFbGVtZW50ICZIVE1MSGVhZGluZ0VsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5v
ZGUgJm90aGVyKQogewotICAgIGlmKG90aGVyLmVsZW1lbnRJZCgpICE9IElEX0gxIHx8Ci0gICAg
ICAgb3RoZXIuZWxlbWVudElkKCkgIT0gSURfSDIgfHwKLSAgICAgICBvdGhlci5lbGVtZW50SWQo
KSAhPSBJRF9IMyB8fAotICAgICAgIG90aGVyLmVsZW1lbnRJZCgpICE9IElEX0g0IHx8Ci0gICAg
ICAgb3RoZXIuZWxlbWVudElkKCkgIT0gSURfSDUgfHwKLSAgICAgICBvdGhlci5lbGVtZW50SWQo
KSAhPSBJRF9INiApCisgICAgaWYgKCFvdGhlci5oYW5kbGUoKS0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OmgxKCkpICYmCisgICAgICAgICFvdGhlci5oYW5kbGUoKS0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OmgyKCkpICYmCisgICAgICAgICFvdGhlci5oYW5kbGUoKS0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OmgzKCkpICYmCisgICAgICAgICFvdGhlci5oYW5kbGUoKS0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6Omg0KCkpICYmCisgICAgICAgICFvdGhlci5oYW5kbGUoKS0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6Omg1KCkpICYmCisgICAgICAgICFvdGhlci5oYW5kbGUoKS0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6Omg2KCkpKQogICAgIHsKIAlpZiAoIGltcGwgKSBpbXBsLT5kZXJlZigpOwogCWltcGwgPSAw
OwogICAgIH0gZWxzZSB7CisKICAgICBOb2RlOjpvcGVyYXRvciA9IChvdGhlcik7CiAgICAgfQog
ICAgIHJldHVybiAqdGhpczsKQEAgLTI1Nyw3ICsyNTgsNyBAQCBIVE1MUGFyYWdyYXBoRWxlbWVu
dDo6SFRNTFBhcmFncmFwaEVsZW1lCiAKIEhUTUxQYXJhZ3JhcGhFbGVtZW50ICZIVE1MUGFyYWdy
YXBoRWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWdu
T3RoZXIoIG90aGVyLCBJRF9QICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6
OnAoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtMjk4LDcgKzI5OSw3IEBAIEhUTUxQ
cmVFbGVtZW50OjpIVE1MUHJlRWxlbWVudChIVE1MUHJlRWwKIAogSFRNTFByZUVsZW1lbnQgJkhU
TUxQcmVFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3Np
Z25PdGhlciggb3RoZXIsIElEX1BSRSApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5h
bWVzOjpwcmUoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApJbmRleDoga2h0bWwvZG9tL2h0
bWxfZWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0
bWwvZG9tL2h0bWxfZWxlbWVudC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTQKZGlmZiAt
dSAtcCAtcjEuMTQga2h0bWwvZG9tL2h0bWxfZWxlbWVudC5jcHAKLS0tIGtodG1sL2RvbS9odG1s
X2VsZW1lbnQuY3BwCTExIE1heSAyMDA1IDAwOjU4OjI4IC0wMDAwCTEuMTQKKysrIGtodG1sL2Rv
bS9odG1sX2VsZW1lbnQuY3BwCTIwIEp1biAyMDA1IDIwOjU1OjA4IC0wMDAwCkBAIC0xODIsOSAr
MTgyLDkgQEAgSFRNTENvbGxlY3Rpb24gSFRNTEVsZW1lbnQ6OmNoaWxkcmVuKCkgYwogICAgIHJl
dHVybiBIVE1MQ29sbGVjdGlvbihpbXBsLCBIVE1MQ29sbGVjdGlvbkltcGw6Ok5PREVfQ0hJTERS
RU4pOwogfQogCi12b2lkIEhUTUxFbGVtZW50Ojphc3NpZ25PdGhlciggY29uc3QgTm9kZSAmb3Ro
ZXIsIGludCBlbGVtZW50SWQgKQordm9pZCBIVE1MRWxlbWVudDo6YXNzaWduT3RoZXIoIGNvbnN0
IE5vZGUgJm90aGVyLCBjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lICkKIHsKLSAgICBpZigo
aW50KW90aGVyLmVsZW1lbnRJZCgpICE9IGVsZW1lbnRJZCkgeworICAgIGlmICghb3RoZXIuaGFu
ZGxlKCktPmhhc1RhZ05hbWUodGFnTmFtZSkpIHsKIAlpZiAoIGltcGwgKSBpbXBsLT5kZXJlZigp
OwogCWltcGwgPSAwOwogICAgIH0gZWxzZSB7CkluZGV4OiBraHRtbC9kb20vaHRtbF9lbGVtZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZG9tL2h0bWxf
ZWxlbWVudC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjgKZGlmZiAtdSAtcCAtcjEuOCBraHRt
bC9kb20vaHRtbF9lbGVtZW50LmgKLS0tIGtodG1sL2RvbS9odG1sX2VsZW1lbnQuaAkyMiBNYXkg
MjAwNCAwMTo1MDo0OCAtMDAwMAkxLjgKKysrIGtodG1sL2RvbS9odG1sX2VsZW1lbnQuaAkyMCBK
dW4gMjAwNSAyMDo1NTowOSAtMDAwMApAQCAtMzAsNiArMzAsOCBAQAogI2RlZmluZSBIVE1MX0VM
RU1FTlRfSAogCiAjaW5jbHVkZSA8ZG9tL2RvbV9lbGVtZW50Lmg+CisjaW5jbHVkZSAiZG9tX3Fu
YW1lLmgiCisKIGNsYXNzIEtIVE1MVmlldzsKIAogbmFtZXNwYWNlIERPTSB7CkBAIC0yMjUsNyAr
MjI3LDcgQEAgcHJvdGVjdGVkOgogICAgIC8qCiAgICAgICogQGludGVybmFsCiAgICAgICovCi0g
ICAgdm9pZCBhc3NpZ25PdGhlciggY29uc3QgTm9kZSAmb3RoZXIsIGludCBlbGVtZW50SWQgKTsK
KyAgICB2b2lkIGFzc2lnbk90aGVyKCBjb25zdCBOb2RlICZvdGhlciwgY29uc3QgUXVhbGlmaWVk
TmFtZSYgdGFnTmFtZSApOwogfTsKIAogfTsgLy9uYW1lc3BhY2UKSW5kZXg6IGtodG1sL2RvbS9o
dG1sX2Zvcm0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1s
L2RvbS9odG1sX2Zvcm0uY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjExCmRpZmYgLXUgLXAg
LXIxLjExIGtodG1sL2RvbS9odG1sX2Zvcm0uY3BwCi0tLSBraHRtbC9kb20vaHRtbF9mb3JtLmNw
cAkxMSBNYXkgMjAwNSAwMDo1ODoyOCAtMDAwMAkxLjExCisrKyBraHRtbC9kb20vaHRtbF9mb3Jt
LmNwcAkyMCBKdW4gMjAwNSAyMDo1NTowOSAtMDAwMApAQCAtNDcsNyArNDcsNyBAQCBIVE1MQnV0
dG9uRWxlbWVudDo6SFRNTEJ1dHRvbkVsZW1lbnQoSFRNCiAKIEhUTUxCdXR0b25FbGVtZW50ICZI
VE1MQnV0dG9uRWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAg
YXNzaWduT3RoZXIoIG90aGVyLCBJRF9CVVRUT04gKTsJCisgICAgYXNzaWduT3RoZXIoIG90aGVy
LCBIVE1MTmFtZXM6OmJ1dHRvbigpICk7CQogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtMTU3
LDcgKzE1Nyw3IEBAIEhUTUxGaWVsZFNldEVsZW1lbnQ6OkhUTUxGaWVsZFNldEVsZW1lbnQKIAog
SFRNTEZpZWxkU2V0RWxlbWVudCAmSFRNTEZpZWxkU2V0RWxlbWVudDo6b3BlcmF0b3IgPSAoY29u
c3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9GSUVMRFNFVCAp
OworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpmaWVsZHNldCgpICk7CiAgICAg
cmV0dXJuICp0aGlzOwogfQogCkBAIC0xOTMsNyArMTkzLDcgQEAgSFRNTEZvcm1FbGVtZW50OjpI
VE1MRm9ybUVsZW1lbnQoSFRNTEZvcgogCiBIVE1MRm9ybUVsZW1lbnQgJkhUTUxGb3JtRWxlbWVu
dDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90
aGVyLCBJRF9GT1JNICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OmZvcm0o
KSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtMzExLDcgKzMxMSw3IEBAIEhUTUxJbnB1
dEVsZW1lbnQ6OkhUTUxJbnB1dEVsZW1lbnQoSFRNTEkKIAogSFRNTElucHV0RWxlbWVudCAmSFRN
TElucHV0RWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNz
aWduT3RoZXIoIG90aGVyLCBJRF9JTlBVVCApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRN
TE5hbWVzOjppbnB1dCgpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC01NzQsNyArNTc0
LDcgQEAgSFRNTExhYmVsRWxlbWVudDo6SFRNTExhYmVsRWxlbWVudChIVE1MTAogCiBIVE1MTGFi
ZWxFbGVtZW50ICZIVE1MTGFiZWxFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhl
cikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0xBQkVMICk7CisgICAgYXNzaWduT3Ro
ZXIoIG90aGVyLCBIVE1MTmFtZXM6OmxhYmVsKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAK
QEAgLTYzMyw3ICs2MzMsNyBAQCBIVE1MTGVnZW5kRWxlbWVudDo6SFRNTExlZ2VuZEVsZW1lbnQo
SFRNCiAKIEhUTUxMZWdlbmRFbGVtZW50ICZIVE1MTGVnZW5kRWxlbWVudDo6b3BlcmF0b3IgPSAo
Y29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9MRUdFTkQg
KTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6bGVnZW5kKCkgKTsKICAgICBy
ZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTY5MSw3ICs2OTEsNyBAQCBIVE1MT3B0R3JvdXBFbGVtZW50
OjpIVE1MT3B0R3JvdXBFbGVtZW50CiAKIEhUTUxPcHRHcm91cEVsZW1lbnQgJkhUTUxPcHRHcm91
cEVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90
aGVyKCBvdGhlciwgSURfT1BUR1JPVVAgKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxO
YW1lczo6b3B0Z3JvdXAoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtNzQ0LDcgKzc0
NCw3IEBAIEhUTUxTZWxlY3RFbGVtZW50OjpIVE1MU2VsZWN0RWxlbWVudChIVE0KIAogSFRNTFNl
bGVjdEVsZW1lbnQgJkhUTUxTZWxlY3RFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZv
dGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX1NFTEVDVCApOworICAgIGFzc2ln
bk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpzZWxlY3QoKSApOwogICAgIHJldHVybiAqdGhpczsK
IH0KIApAQCAtOTA2LDcgKzkwNiw3IEBAIEhUTUxUZXh0QXJlYUVsZW1lbnQ6OkhUTUxUZXh0QXJl
YUVsZW1lbnQKIAogSFRNTFRleHRBcmVhRWxlbWVudCAmSFRNTFRleHRBcmVhRWxlbWVudDo6b3Bl
cmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJ
RF9URVhUQVJFQSApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjp0ZXh0YXJl
YSgpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC0xMDc0LDcgKzEwNzQsNyBAQCBIVE1M
T3B0aW9uRWxlbWVudDo6SFRNTE9wdGlvbkVsZW1lbnQoSFRNCiAKIEhUTUxPcHRpb25FbGVtZW50
ICZIVE1MT3B0aW9uRWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0g
ICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9PUFRJT04gKTsKKyAgICBhc3NpZ25PdGhlciggb3Ro
ZXIsIEhUTUxOYW1lczo6b3B0aW9uKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTEx
ODIsNyArMTE4Miw3IEBAIEhUTUxJc0luZGV4RWxlbWVudDo6SFRNTElzSW5kZXhFbGVtZW50KEgK
IAogSFRNTElzSW5kZXhFbGVtZW50ICZIVE1MSXNJbmRleEVsZW1lbnQ6Om9wZXJhdG9yID0gKGNv
bnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfSVNJTkRFWCAp
OworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjppc2luZGV4KCkgKTsKICAgICBy
ZXR1cm4gKnRoaXM7CiB9CiAKSW5kZXg6IGtodG1sL2RvbS9odG1sX2hlYWQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2RvbS9odG1sX2hlYWQuY3BwLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjgKZGlmZiAtdSAtcCAtcjEuOCBraHRtbC9kb20vaHRtbF9o
ZWFkLmNwcAotLS0ga2h0bWwvZG9tL2h0bWxfaGVhZC5jcHAJMyBOb3YgMjAwMyAwNjozMjowNCAt
MDAwMAkxLjgKKysrIGtodG1sL2RvbS9odG1sX2hlYWQuY3BwCTIwIEp1biAyMDA1IDIwOjU1OjEw
IC0wMDAwCkBAIC00Miw3ICs0Miw3IEBAIEhUTUxCYXNlRWxlbWVudDo6SFRNTEJhc2VFbGVtZW50
KEhUTUxCYXMKIAogSFRNTEJhc2VFbGVtZW50ICZIVE1MQmFzZUVsZW1lbnQ6Om9wZXJhdG9yID0g
KGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfQkFTRSAp
OworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpiYXNlKCkgKTsKICAgICByZXR1
cm4gKnRoaXM7CiB9CiAKQEAgLTk3LDcgKzk3LDcgQEAgSFRNTExpbmtFbGVtZW50OjpIVE1MTGlu
a0VsZW1lbnQoSFRNTExpbgogCiBIVE1MTGlua0VsZW1lbnQgJkhUTUxMaW5rRWxlbWVudDo6b3Bl
cmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJ
RF9MSU5LICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OmxpbmsoKSApOwog
ICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtMjM4LDcgKzIzOCw3IEBAIEhUTUxNZXRhRWxlbWVu
dDo6SFRNTE1ldGFFbGVtZW50KEhUTUxNZXQKIAogSFRNTE1ldGFFbGVtZW50ICZIVE1MTWV0YUVs
ZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVy
KCBvdGhlciwgSURfTUVUQSApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpt
ZXRhKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTMxMiw3ICszMTIsNyBAQCBIVE1M
U2NyaXB0RWxlbWVudDo6SFRNTFNjcmlwdEVsZW1lbnQoSFRNCiAKIEhUTUxTY3JpcHRFbGVtZW50
ICZIVE1MU2NyaXB0RWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0g
ICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9TQ1JJUFQgKTsKKyAgICBhc3NpZ25PdGhlciggb3Ro
ZXIsIEhUTUxOYW1lczo6c2NyaXB0KCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTQy
NCw3ICs0MjQsNyBAQCBIVE1MU3R5bGVFbGVtZW50OjpIVE1MU3R5bGVFbGVtZW50KEhUTUxTCiAK
IEhUTUxTdHlsZUVsZW1lbnQgJkhUTUxTdHlsZUVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5v
ZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfU1RZTEUgKTsKKyAgICBh
c3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6c3R5bGUoKSApOwogICAgIHJldHVybiAqdGhp
czsKIH0KIApAQCAtNDk2LDcgKzQ5Niw3IEBAIEhUTUxUaXRsZUVsZW1lbnQ6OkhUTUxUaXRsZUVs
ZW1lbnQoSFRNTFQKIAogSFRNTFRpdGxlRWxlbWVudCAmSFRNTFRpdGxlRWxlbWVudDo6b3BlcmF0
b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9U
SVRMRSApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjp0aXRsZSgpICk7CiAg
ICAgcmV0dXJuICp0aGlzOwogfQogCkluZGV4OiBraHRtbC9kb20vaHRtbF9pbWFnZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZG9tL2h0bWxfaW1hZ2Uu
Y3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjkKZGlmZiAtdSAtcCAtcjEuOSBraHRtbC9kb20v
aHRtbF9pbWFnZS5jcHAKLS0tIGtodG1sL2RvbS9odG1sX2ltYWdlLmNwcAkzIE5vdiAyMDAzIDA2
OjMyOjA0IC0wMDAwCTEuOQorKysga2h0bWwvZG9tL2h0bWxfaW1hZ2UuY3BwCTIwIEp1biAyMDA1
IDIwOjU1OjEwIC0wMDAwCkBAIC00Niw3ICs0Niw3IEBAIEhUTUxBcmVhRWxlbWVudDo6SFRNTEFy
ZWFFbGVtZW50KEhUTUxBcmUKIAogSFRNTEFyZWFFbGVtZW50ICZIVE1MQXJlYUVsZW1lbnQ6Om9w
ZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwg
SURfQVJFQSApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjphcmVhKCkgKTsK
ICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTE3Niw3ICsxNzYsNyBAQCBIVE1MSW1hZ2VFbGVt
ZW50OjpIVE1MSW1hZ2VFbGVtZW50KEhUTUxJCiAKIEhUTUxJbWFnZUVsZW1lbnQgJkhUTUxJbWFn
ZUVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90
aGVyKCBvdGhlciwgSURfSU1HICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6
OmltZygpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC0zNzIsNyArMzcyLDcgQEAgSFRN
TE1hcEVsZW1lbnQ6OkhUTUxNYXBFbGVtZW50KEhUTUxNYXBFbAogCiBIVE1MTWFwRWxlbWVudCAm
SFRNTE1hcEVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFz
c2lnbk90aGVyKCBvdGhlciwgSURfTUFQICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1M
TmFtZXM6Om1hcCgpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkluZGV4OiBraHRtbC9kb20v
aHRtbF9pbmxpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2to
dG1sL2RvbS9odG1sX2lubGluZS5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNwpkaWZmIC11
IC1wIC1yMS43IGtodG1sL2RvbS9odG1sX2lubGluZS5jcHAKLS0tIGtodG1sL2RvbS9odG1sX2lu
bGluZS5jcHAJMTEgTWF5IDIwMDUgMDA6NTg6MjggLTAwMDAJMS43CisrKyBraHRtbC9kb20vaHRt
bF9pbmxpbmUuY3BwCTIwIEp1biAyMDA1IDIwOjU1OjEwIC0wMDAwCkBAIC00NSw3ICs0NSw3IEBA
IEhUTUxBbmNob3JFbGVtZW50OjpIVE1MQW5jaG9yRWxlbWVudChIVE0KIAogSFRNTEFuY2hvckVs
ZW1lbnQgJkhUTUxBbmNob3JFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikK
IHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0EgKTsKKyAgICBhc3NpZ25PdGhlciggb3Ro
ZXIsIEhUTUxOYW1lczo6YSgpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC0yMTcsNyAr
MjE3LDcgQEAgSFRNTEJSRWxlbWVudDo6SFRNTEJSRWxlbWVudChIVE1MQlJFbGVtZQogCiBIVE1M
QlJFbGVtZW50ICZIVE1MQlJFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikK
IHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0JSICk7CisgICAgYXNzaWduT3RoZXIoIG90
aGVyLCBIVE1MTmFtZXM6OmJyKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTI1OCw3
ICsyNTgsNyBAQCBIVE1MRm9udEVsZW1lbnQ6OkhUTUxGb250RWxlbWVudChIVE1MRm9uCiAKIEhU
TUxGb250RWxlbWVudCAmSFRNTEZvbnRFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZv
dGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0ZPTlQgKTsKKyAgICBhc3NpZ25P
dGhlciggb3RoZXIsIEhUTUxOYW1lczo6Zm9udCgpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQog
CkBAIC0zMTksNyArMzE5LDcgQEAgSFRNTE1vZEVsZW1lbnQ6OkhUTUxNb2RFbGVtZW50KGNvbnN0
IEhUTQogSFRNTE1vZEVsZW1lbnQ6OkhUTUxNb2RFbGVtZW50KEhUTUxFbGVtZW50SW1wbCAqX2lt
cGwpCiAgICAgOiBIVE1MRWxlbWVudCgpCiB7Ci0gICAgaWYgKF9pbXBsICYmIChfaW1wbC0+aWQo
KSA9PSBJRF9JTlMgfHwgX2ltcGwtPmlkKCkgPT0gSURfREVMKSkKKyAgICBpZiAoX2ltcGwgJiYg
KF9pbXBsLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW5zKCkpIHx8IF9pbXBsLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6ZGVsKCkpKSkKICAgICAgICAgaW1wbCA9IF9pbXBsOwogICAgIGVsc2UKICAg
ICAgICAgaW1wbCA9IDA7CkBAIC0zMjgsOSArMzI4LDggQEAgSFRNTE1vZEVsZW1lbnQ6OkhUTUxN
b2RFbGVtZW50KEhUTUxFbGVtZQogCiBIVE1MTW9kRWxlbWVudCAmSFRNTE1vZEVsZW1lbnQ6Om9w
ZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGlmKCBvdGhlci5lbGVtZW50SWQo
KSAhPSBJRF9JTlMgJiYKLQlvdGhlci5lbGVtZW50SWQoKSAhPSBJRF9ERUwgKQotICAgIHsKKyAg
ICBpZiAoIW90aGVyLmhhbmRsZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW5zKCkpICYmCisg
ICAgICAgICFvdGhlci5oYW5kbGUoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmRlbCgpKSkgewog
CWlmICggaW1wbCApIGltcGwtPmRlcmVmKCk7CiAJaW1wbCA9IDA7CiAgICAgfSBlbHNlIHsKQEAg
LTM4MSwxOSArMzgwLDE2IEBAIEhUTUxRdW90ZUVsZW1lbnQ6OkhUTUxRdW90ZUVsZW1lbnQoY29u
c3QKIHsKIH0KIAotSFRNTFF1b3RlRWxlbWVudDo6SFRNTFF1b3RlRWxlbWVudChIVE1MR2VuZXJp
Y0VsZW1lbnRJbXBsICpfaW1wbCkKK0hUTUxRdW90ZUVsZW1lbnQ6OkhUTUxRdW90ZUVsZW1lbnQo
SFRNTFF1b3RlRWxlbWVudEltcGwgKl9pbXBsKQogICAgIDogSFRNTEVsZW1lbnQoKQogewotICAg
IGlmIChfaW1wbCAmJiBfaW1wbC0+aWQoKSA9PSBJRF9RKQotICAgICAgICBpbXBsID0gX2ltcGw7
Ci0gICAgZWxzZQotICAgICAgICBpbXBsID0gMDsKKyAgICBpbXBsID0gX2ltcGw7CiAgICAgaWYg
KCBpbXBsICkgaW1wbC0+cmVmKCk7CiB9CiAKIEhUTUxRdW90ZUVsZW1lbnQgJkhUTUxRdW90ZUVs
ZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVy
KCBvdGhlciwgSURfUSApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpxKCkg
KTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKSW5kZXg6IGtodG1sL2RvbS9odG1sX2lubGluZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2RvbS9odG1sX2lu
bGluZS5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjMKZGlmZiAtdSAtcCAtcjEuMyBraHRtbC9k
b20vaHRtbF9pbmxpbmUuaAotLS0ga2h0bWwvZG9tL2h0bWxfaW5saW5lLmgJMTUgQXByIDIwMDIg
MjM6NDI6MDEgLTAwMDAJMS4zCisrKyBraHRtbC9kb20vaHRtbF9pbmxpbmUuaAkyMCBKdW4gMjAw
NSAyMDo1NToxMCAtMDAwMApAQCAtNDI1LDcgKzQyNSw3IEBAIHB1YmxpYzoKICAgICBIVE1MUXVv
dGVFbGVtZW50KGNvbnN0IE5vZGUgJm90aGVyKSA6IEhUTUxFbGVtZW50KCkKICAgICAgICAgIHso
KnRoaXMpPW90aGVyO30KIHByb3RlY3RlZDoKLSAgICBIVE1MUXVvdGVFbGVtZW50KEhUTUxHZW5l
cmljRWxlbWVudEltcGwgKmltcGwpOworICAgIEhUTUxRdW90ZUVsZW1lbnQoSFRNTFF1b3RlRWxl
bWVudEltcGwgKmltcGwpOwogcHVibGljOgogCiAgICAgSFRNTFF1b3RlRWxlbWVudCAmIG9wZXJh
dG9yID0gKGNvbnN0IEhUTUxRdW90ZUVsZW1lbnQgJm90aGVyKTsKSW5kZXg6IGtodG1sL2RvbS9o
dG1sX2xpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1s
L2RvbS9odG1sX2xpc3QuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjQKZGlmZiAtdSAtcCAt
cjEuNCBraHRtbC9kb20vaHRtbF9saXN0LmNwcAotLS0ga2h0bWwvZG9tL2h0bWxfbGlzdC5jcHAJ
MTAgSnVuIDIwMDIgMjA6MDc6MzYgLTAwMDAJMS40CisrKyBraHRtbC9kb20vaHRtbF9saXN0LmNw
cAkyMCBKdW4gMjAwNSAyMDo1NToxMSAtMDAwMApAQCAtNDEsNyArNDEsNyBAQCBIVE1MRExpc3RF
bGVtZW50OjpIVE1MRExpc3RFbGVtZW50KEhUTUxECiAKIEhUTUxETGlzdEVsZW1lbnQgJkhUTUxE
TGlzdEVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2ln
bk90aGVyKCBvdGhlciwgSURfREwgKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1l
czo6ZGwoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtODgsNyArODgsNyBAQCBIVE1M
RGlyZWN0b3J5RWxlbWVudDo6SFRNTERpcmVjdG9yeUVsZW1lCiAKIEhUTUxEaXJlY3RvcnlFbGVt
ZW50ICZIVE1MRGlyZWN0b3J5RWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIp
CiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9ESVIgKTsKKyAgICBhc3NpZ25PdGhlcigg
b3RoZXIsIEhUTUxOYW1lczo6ZGlyKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTEz
NSw3ICsxMzUsNyBAQCBIVE1MTElFbGVtZW50OjpIVE1MTElFbGVtZW50KEhUTUxMSUVsZW1lCiAK
IEhUTUxMSUVsZW1lbnQgJkhUTUxMSUVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90
aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfTEkgKTsKKyAgICBhc3NpZ25PdGhl
ciggb3RoZXIsIEhUTUxOYW1lczo6bGkoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAt
MTkwLDcgKzE5MCw3IEBAIEhUTUxNZW51RWxlbWVudDo6SFRNTE1lbnVFbGVtZW50KEhUTUxNZW4K
IAogSFRNTE1lbnVFbGVtZW50ICZIVE1MTWVudUVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5v
ZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfTUVOVSApOworICAgIGFz
c2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjptZW51KCkgKTsKICAgICByZXR1cm4gKnRoaXM7
CiB9CiAKQEAgLTIzNyw3ICsyMzcsNyBAQCBIVE1MT0xpc3RFbGVtZW50OjpIVE1MT0xpc3RFbGVt
ZW50KEhUTUxPCiAKIEhUTUxPTGlzdEVsZW1lbnQgJkhUTUxPTGlzdEVsZW1lbnQ6Om9wZXJhdG9y
ID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfT0wg
KTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6b2woKSApOwogICAgIHJldHVy
biAqdGhpczsKIH0KIApAQCAtMzEwLDcgKzMxMCw3IEBAIEhUTUxVTGlzdEVsZW1lbnQ6OkhUTUxV
TGlzdEVsZW1lbnQoSFRNTFUKIAogSFRNTFVMaXN0RWxlbWVudCAmSFRNTFVMaXN0RWxlbWVudDo6
b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVy
LCBJRF9VTCApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjp1bCgpICk7CiAg
ICAgcmV0dXJuICp0aGlzOwogfQogCkluZGV4OiBraHRtbC9kb20vaHRtbF9taXNjLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9kb20vaHRtbF9taXNjLmNw
cCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS43CmRpZmYgLXUgLXAgLXIxLjcga2h0bWwvZG9tL2h0
bWxfbWlzYy5jcHAKLS0tIGtodG1sL2RvbS9odG1sX21pc2MuY3BwCTExIE1heSAyMDA1IDAwOjU4
OjI4IC0wMDAwCTEuNworKysga2h0bWwvZG9tL2h0bWxfbWlzYy5jcHAJMjAgSnVuIDIwMDUgMjA6
NTU6MTEgLTAwMDAKQEAgLTQxLDcgKzQxLDcgQEAgSFRNTEJhc2VGb250RWxlbWVudDo6SFRNTEJh
c2VGb250RWxlbWVudAogCiBIVE1MQmFzZUZvbnRFbGVtZW50ICZIVE1MQmFzZUZvbnRFbGVtZW50
OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3Ro
ZXIsIElEX0JBU0VGT05UICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OmJh
c2Vmb250KCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKSW5kZXg6IGtodG1sL2RvbS9odG1s
X29iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwv
ZG9tL2h0bWxfb2JqZWN0LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS41CmRpZmYgLXUgLXAg
LXIxLjUga2h0bWwvZG9tL2h0bWxfb2JqZWN0LmNwcAotLS0ga2h0bWwvZG9tL2h0bWxfb2JqZWN0
LmNwcAkxIE1hciAyMDA0IDE3OjA0OjI0IC0wMDAwCTEuNQorKysga2h0bWwvZG9tL2h0bWxfb2Jq
ZWN0LmNwcAkyMCBKdW4gMjAwNSAyMDo1NToxMSAtMDAwMApAQCAtNDMsNyArNDMsNyBAQCBIVE1M
QXBwbGV0RWxlbWVudDo6SFRNTEFwcGxldEVsZW1lbnQoSFRNCiAKIEhUTUxBcHBsZXRFbGVtZW50
ICZIVE1MQXBwbGV0RWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0g
ICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9BUFBMRVQgKTsKKyAgICBhc3NpZ25PdGhlciggb3Ro
ZXIsIEhUTUxOYW1lczo6YXBwbGV0KCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTE5
NCw3ICsxOTQsNyBAQCBIVE1MT2JqZWN0RWxlbWVudDo6SFRNTE9iamVjdEVsZW1lbnQoSFRNCiAK
IEhUTUxPYmplY3RFbGVtZW50ICZIVE1MT2JqZWN0RWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3Qg
Tm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9PQkpFQ1QgKTsKKyAg
ICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6b2JqZWN0KCkgKTsKICAgICByZXR1cm4g
KnRoaXM7CiB9CiAKQEAgLTQzMiw3ICs0MzIsNyBAQCBIVE1MUGFyYW1FbGVtZW50OjpIVE1MUGFy
YW1FbGVtZW50KEhUTUxQCiAKIEhUTUxQYXJhbUVsZW1lbnQgJkhUTUxQYXJhbUVsZW1lbnQ6Om9w
ZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwg
SURfUEFSQU0gKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6cGFyYW0oKSAp
OwogICAgIHJldHVybiAqdGhpczsKIH0KIApJbmRleDoga2h0bWwvZG9tL2h0bWxfdGFibGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2RvbS9odG1sX3Rh
YmxlLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS42CmRpZmYgLXUgLXAgLXIxLjYga2h0bWwv
ZG9tL2h0bWxfdGFibGUuY3BwCi0tLSBraHRtbC9kb20vaHRtbF90YWJsZS5jcHAJMzEgT2N0IDIw
MDMgMDA6NDc6MTYgLTAwMDAJMS42CisrKyBraHRtbC9kb20vaHRtbF90YWJsZS5jcHAJMjAgSnVu
IDIwMDUgMjA6NTU6MTIgLTAwMDAKQEAgLTQ1LDcgKzQ1LDcgQEAgSFRNTFRhYmxlQ2FwdGlvbkVs
ZW1lbnQ6OkhUTUxUYWJsZUNhcHRpbwogCiBIVE1MVGFibGVDYXB0aW9uRWxlbWVudCAmSFRNTFRh
YmxlQ2FwdGlvbkVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAg
IGFzc2lnbk90aGVyKCBvdGhlciwgSURfQ0FQVElPTiApOworICAgIGFzc2lnbk90aGVyKCBvdGhl
ciwgSFRNTE5hbWVzOjpjYXB0aW9uKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTg2
LDkgKzg2LDggQEAgSFRNTFRhYmxlQ2VsbEVsZW1lbnQ6OkhUTUxUYWJsZUNlbGxFbGVtZQogCiBI
VE1MVGFibGVDZWxsRWxlbWVudCAmSFRNTFRhYmxlQ2VsbEVsZW1lbnQ6Om9wZXJhdG9yID0gKGNv
bnN0IE5vZGUgJm90aGVyKQogewotICAgIGlmKCBvdGhlci5lbGVtZW50SWQoKSAhPSBJRF9URCAm
JgotCW90aGVyLmVsZW1lbnRJZCgpICE9IElEX1RIICkKLSAgICB7CisgICAgaWYgKCFvdGhlci5o
YW5kbGUoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRkKCkpIHx8CisgICAgICAgICFvdGhlci5o
YW5kbGUoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRoKCkpKSB7CiAJaWYgKCBpbXBsICkgaW1w
bC0+ZGVyZWYoKTsKIAlpbXBsID0gMDsKICAgICB9IGVsc2UgewpAQCAtMjk1LDkgKzI5NCw4IEBA
IEhUTUxUYWJsZUNvbEVsZW1lbnQ6OkhUTUxUYWJsZUNvbEVsZW1lbnQKIAogSFRNTFRhYmxlQ29s
RWxlbWVudCAmSFRNTFRhYmxlQ29sRWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3Ro
ZXIpCiB7Ci0gICAgaWYoIG90aGVyLmVsZW1lbnRJZCgpICE9IElEX0NPTCAmJgotCW90aGVyLmVs
ZW1lbnRJZCgpICE9IElEX0NPTEdST1VQICkKLSAgICB7CisgICAgaWYgKCFvdGhlci5oYW5kbGUo
KS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmNvbCgpKSAmJgorICAgICAgICAhb3RoZXIuaGFuZGxl
KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpjb2xncm91cCgpKSkgewogCWlmICggaW1wbCApIGlt
cGwtPmRlcmVmKCk7CiAJaW1wbCA9IDA7CiAgICAgfSBlbHNlIHsKQEAgLTQwMSw3ICszOTksNyBA
QCBIVE1MVGFibGVFbGVtZW50OjpIVE1MVGFibGVFbGVtZW50KEhUTUxUCiAKIEhUTUxUYWJsZUVs
ZW1lbnQgJkhUTUxUYWJsZUVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQog
ewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfVEFCTEUgKTsKKyAgICBhc3NpZ25PdGhlcigg
b3RoZXIsIEhUTUxOYW1lczo6dGFibGUoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAt
NjM4LDcgKzYzNiw3IEBAIEhUTUxUYWJsZVJvd0VsZW1lbnQ6OkhUTUxUYWJsZVJvd0VsZW1lbnQK
IAogSFRNTFRhYmxlUm93RWxlbWVudCAmSFRNTFRhYmxlUm93RWxlbWVudDo6b3BlcmF0b3IgPSAo
Y29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9UUiApOwor
ICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjp0cigpICk7CiAgICAgcmV0dXJuICp0
aGlzOwogfQogCkBAIC03NzUsMTAgKzc3Myw5IEBAIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50OjpI
VE1MVGFibGVTZWN0aW8KIAogSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQgJkhUTUxUYWJsZVNlY3Rp
b25FbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBpZihvdGhl
ci5lbGVtZW50SWQoKSAhPSBJRF9UQk9EWSAmJgotICAgICAgIG90aGVyLmVsZW1lbnRJZCgpICE9
IElEX1RIRUFEICYmCi0gICAgICAgb3RoZXIuZWxlbWVudElkKCkgIT0gSURfVEZPT1QgKQotICAg
IHsKKyAgICBpZiAoIW90aGVyLmhhbmRsZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGJvZHko
KSkgJiYKKyAgICAgICAgIW90aGVyLmhhbmRsZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGhl
YWQoKSkgJiYKKyAgICAgICAgIW90aGVyLmhhbmRsZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
dGZvb3QoKSkpIHsKIAlpZiAoIGltcGwgKSBpbXBsLT5kZXJlZigpOwogCWltcGwgPSAwOwogICAg
IH0gZWxzZSB7CkluZGV4OiBraHRtbC9lY21hL2tqc19jc3MuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VjbWEva2pzX2Nzcy5jcHAsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuMjMKZGlmZiAtdSAtcCAtcjEuMjMga2h0bWwvZWNtYS9ranNfY3NzLmNwcAot
LS0ga2h0bWwvZWNtYS9ranNfY3NzLmNwcAkxNiBNYXkgMjAwNSAxOToxOTozOCAtMDAwMAkxLjIz
CisrKyBraHRtbC9lY21hL2tqc19jc3MuY3BwCTIwIEp1biAyMDA1IDIwOjU1OjEzIC0wMDAwCkBA
IC0yOSw3ICsyOSw3IEBACiAjaW5jbHVkZSAieG1sL2RvbV9kb2NpbXBsLmgiCiAjaW5jbHVkZSAi
aHRtbC9odG1sX2hlYWRpbXBsLmgiIC8vIGZvciBIVE1MU3R5bGVFbGVtZW50CiAjaW5jbHVkZSAi
a2pzX2RvbS5oIgotI2luY2x1ZGUgIm1pc2MvaHRtbHRhZ3MuaCIKKyNpbmNsdWRlICJodG1sbmFt
ZXMuaCIKIAogI2luY2x1ZGUgPGtkZWJ1Zy5oPgogCkBAIC01NSw2ICs1NSw3IEBAIHVzaW5nIERP
TTo6Q291bnRlckltcGw7CiB1c2luZyBET006OkRvY3VtZW50SW1wbDsKIHVzaW5nIERPTTo6RE9N
U3RyaW5nOwogdXNpbmcgRE9NOjpFbGVtZW50SW1wbDsKK3VzaW5nIERPTTo6SFRNTE5hbWVzOwog
dXNpbmcgRE9NOjpIVE1MU3R5bGVFbGVtZW50SW1wbDsKIHVzaW5nIERPTTo6TWVkaWFMaXN0SW1w
bDsKIHVzaW5nIERPTTo6UmVjdEltcGw7CkBAIC0zOTUsNyArMzk2LDcgQEAgVmFsdWUgRE9NU3R5
bGVTaGVldExpc3Q6OnRyeUdldChFeGVjU3RhdAogICAvLyBhbmQgZG9lc24ndCBsb29rIGZvciBu
YW1lIGF0dHJpYnV0ZSAoc2VlIGltcGxlbWVudGF0aW9uIGFib3ZlKS4KICAgLy8gQnV0IHVuaWNp
dHkgb2Ygc3R5bGVzaGVldCBpZHMgaXMgZ29vZCBwcmFjdGljZSBhbnl3YXkgOykKICAgRWxlbWVu
dEltcGwgKmVsZW1lbnQgPSBtX2RvYy0+Z2V0RWxlbWVudEJ5SWQocC5zdHJpbmcoKSk7Ci0gIGlm
IChlbGVtZW50ICYmIGVsZW1lbnQtPmlkKCkgPT0gSURfU1RZTEUpCisgIGlmIChlbGVtZW50ICYm
IGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzdHlsZSgpKSkKICAgICByZXR1cm4gZ2V0
RE9NU3R5bGVTaGVldChleGVjLCBzdGF0aWNfY2FzdDxIVE1MU3R5bGVFbGVtZW50SW1wbCAqPihl
bGVtZW50KS0+c2hlZXQoKSk7CiAKICAgcmV0dXJuIERPTU9iamVjdDo6dHJ5R2V0KGV4ZWMsIHAp
OwpJbmRleDoga2h0bWwvZWNtYS9ranNfZG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvV2ViQ29yZS9raHRtbC9lY21hL2tqc19kb20uY3BwLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjc0CmRpZmYgLXUgLXAgLXIxLjc0IGtodG1sL2VjbWEva2pzX2RvbS5jcHAKLS0tIGtodG1s
L2VjbWEva2pzX2RvbS5jcHAJNyBKdW4gMjAwNSAyMjoxMjo1NyAtMDAwMAkxLjc0CisrKyBraHRt
bC9lY21hL2tqc19kb20uY3BwCTIwIEp1biAyMDA1IDIwOjU1OjE1IC0wMDAwCkBAIC00Nyw4ICs0
Nyw2IEBACiAKICNpbmNsdWRlICJodG1sX29iamVjdGltcGwuaCIKIAotI2luY2x1ZGUgIm1pc2Mv
aHRtbHRhZ3MuaCIKLQogI2lmIEFQUExFX0NIQU5HRVMKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9ydW50aW1lX29iamVjdC5oPgogI2VuZGlmCkBAIC02Nyw2ICs2NSw3IEBAIHVzaW5nIERPTTo6
SFRNTEFwcGxldEVsZW1lbnRJbXBsOwogdXNpbmcgRE9NOjpIVE1MRG9jdW1lbnRJbXBsOwogdXNp
bmcgRE9NOjpIVE1MRWxlbWVudEltcGw7CiB1c2luZyBET006OkhUTUxFbWJlZEVsZW1lbnRJbXBs
OwordXNpbmcgRE9NOjpIVE1MTmFtZXM7CiB1c2luZyBET006OkhUTUxPYmplY3RFbGVtZW50SW1w
bDsKIHVzaW5nIERPTTo6TmFtZWROb2RlTWFwSW1wbDsKIHVzaW5nIERPTTo6Tm9kZTsKQEAgLTQ2
Miw3ICs0NjEsNyBAQCB2b2lkIERPTU5vZGU6OnB1dFZhbHVlKEV4ZWNTdGF0ZSAqZXhlYywgCiAg
ICAgbm9kZS5zZXROb2RlVmFsdWUodmFsdWUudG9TdHJpbmcoZXhlYykuc3RyaW5nKCksIGV4Y2Vw
dGlvbik7CiAgICAgYnJlYWs7CiAgIGNhc2UgUHJlZml4OgotICAgIG5vZGUuc2V0UHJlZml4KHZh
bHVlLnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpLCBleGNlcHRpb24pOworICAgIG5vZGUuc2V0UHJl
Zml4KHZhbHVlLnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpLmltcGxlbWVudGF0aW9uKCksIGV4Y2Vw
dGlvbik7CiAgICAgYnJlYWs7CiAgIGNhc2UgT25BYm9ydDoKICAgICBzZXRMaXN0ZW5lcihleGVj
LERPTTo6RXZlbnRJbXBsOjpBQk9SVF9FVkVOVCx2YWx1ZSk7CkBAIC0xMTg3LDcgKzExODYsNyBA
QCBWYWx1ZSBET01FbGVtZW50Ojp0cnlHZXQoRXhlY1N0YXRlICpleGVjCiAgIHsKICAgICBzd2l0
Y2goIGVudHJ5LT52YWx1ZSApIHsKICAgICBjYXNlIFRhZ05hbWU6Ci0gICAgICByZXR1cm4gZ2V0
U3RyaW5nT3JOdWxsKGVsZW1lbnQudGFnTmFtZSgpKTsKKyAgICAgIHJldHVybiBnZXRTdHJpbmdP
ck51bGwoZWxlbWVudC5ub2RlTmFtZSgpKTsKICAgICBjYXNlIFN0eWxlOgogICAgICAgcmV0dXJu
IGdldERPTUNTU1N0eWxlRGVjbGFyYXRpb24oZXhlYyxlbGVtZW50LnN0eWxlKCkpOwogICAgIGRl
ZmF1bHQ6CkBAIC0xNzA5LDI2ICsxNzA4LDIxIEBAIFZhbHVlSW1wICpnZXRSdW50aW1lT2JqZWN0
KEV4ZWNTdGF0ZSAqZXgKICAgICBpZiAoIW4pCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgc3dp
dGNoIChuLT5pZCgpKSB7Ci0gICAgICAgIGNhc2UgSURfQVBQTEVUOiB7Ci0gICAgICAgICAgICBI
VE1MQXBwbGV0RWxlbWVudEltcGwgKmFwcGxldEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MQXBw
bGV0RWxlbWVudEltcGwgKj4obik7Ci0gICAgICAgICAgICBpZiAoYXBwbGV0RWxlbWVudC0+Z2V0
QXBwbGV0SW5zdGFuY2UoKSkKLSAgICAgICAgICAgICAgICAvLyBUaGUgaW5zdGFuY2UgaXMgb3du
ZWQgYnkgdGhlIGFwcGxldCBlbGVtZW50LgotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUnVu
dGltZU9iamVjdEltcChhcHBsZXRFbGVtZW50LT5nZXRBcHBsZXRJbnN0YW5jZSgpLCBmYWxzZSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIElEX0VNQkVEOiB7
Ci0gICAgICAgICAgICBIVE1MRW1iZWRFbGVtZW50SW1wbCAqZW1iZWRFbGVtZW50ID0gc3RhdGlj
X2Nhc3Q8SFRNTEVtYmVkRWxlbWVudEltcGwgKj4obik7Ci0gICAgICAgICAgICBpZiAoZW1iZWRF
bGVtZW50LT5nZXRFbWJlZEluc3RhbmNlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBS
dW50aW1lT2JqZWN0SW1wKGVtYmVkRWxlbWVudC0+Z2V0RW1iZWRJbnN0YW5jZSgpLCBmYWxzZSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIElEX09CSkVDVDog
ewotICAgICAgICAgICAgSFRNTE9iamVjdEVsZW1lbnRJbXBsICpvYmplY3RFbGVtZW50ID0gc3Rh
dGljX2Nhc3Q8SFRNTE9iamVjdEVsZW1lbnRJbXBsICo+KG4pOwotICAgICAgICAgICAgaWYgKG9i
amVjdEVsZW1lbnQtPmdldE9iamVjdEluc3RhbmNlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IG5ldyBSdW50aW1lT2JqZWN0SW1wKG9iamVjdEVsZW1lbnQtPmdldE9iamVjdEluc3RhbmNlKCks
IGZhbHNlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisgICAgaWYgKG4tPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjphcHBsZXQoKSkpIHsKKyAgICAgICAgSFRNTEFwcGxldEVsZW1lbnRJ
bXBsICphcHBsZXRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEFwcGxldEVsZW1lbnRJbXBsICo+
KG4pOworICAgICAgICBpZiAoYXBwbGV0RWxlbWVudC0+Z2V0QXBwbGV0SW5zdGFuY2UoKSkKKyAg
ICAgICAgICAgIC8vIFRoZSBpbnN0YW5jZSBpcyBvd25lZCBieSB0aGUgYXBwbGV0IGVsZW1lbnQu
CisgICAgICAgICAgICByZXR1cm4gbmV3IFJ1bnRpbWVPYmplY3RJbXAoYXBwbGV0RWxlbWVudC0+
Z2V0QXBwbGV0SW5zdGFuY2UoKSwgZmFsc2UpOworICAgIH0KKyAgICBlbHNlIGlmIChuLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6ZW1iZWQoKSkpIHsKKyAgICAgICAgSFRNTEVtYmVkRWxlbWVudElt
cGwgKmVtYmVkRWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxFbWJlZEVsZW1lbnRJbXBsICo+KG4p
OworICAgICAgICBpZiAoZW1iZWRFbGVtZW50LT5nZXRFbWJlZEluc3RhbmNlKCkpCisgICAgICAg
ICAgICByZXR1cm4gbmV3IFJ1bnRpbWVPYmplY3RJbXAoZW1iZWRFbGVtZW50LT5nZXRFbWJlZElu
c3RhbmNlKCksIGZhbHNlKTsKKyAgICB9CisgICAgZWxzZSBpZiAobi0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6Om9iamVjdCgpKSkgeworICAgICAgICBIVE1MT2JqZWN0RWxlbWVudEltcGwgKm9iamVj
dEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MT2JqZWN0RWxlbWVudEltcGwgKj4obik7CisgICAg
ICAgIGlmIChvYmplY3RFbGVtZW50LT5nZXRPYmplY3RJbnN0YW5jZSgpKQorICAgICAgICAgICAg
cmV0dXJuIG5ldyBSdW50aW1lT2JqZWN0SW1wKG9iamVjdEVsZW1lbnQtPmdldE9iamVjdEluc3Rh
bmNlKCksIGZhbHNlKTsKICAgICB9CiAgICAgCiAgICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhIHJ1
bnRpbWUgb2JqZWN0IHJldHVybiAwLgpJbmRleDoga2h0bWwvZWNtYS9ranNfaHRtbC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWNtYS9ranNfaHRtbC5j
cHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTE0CmRpZmYgLXUgLXAgLXIxLjExNCBraHRtbC9l
Y21hL2tqc19odG1sLmNwcAotLS0ga2h0bWwvZWNtYS9ranNfaHRtbC5jcHAJMjMgTWF5IDIwMDUg
MDA6NTc6NDIgLTAwMDAJMS4xMTQKKysrIGtodG1sL2VjbWEva2pzX2h0bWwuY3BwCTIwIEp1biAy
MDA1IDIwOjU1OjIwIC0wMDAwCkBAIC00Niw4ICs0Niw2IEBACiAjaW5jbHVkZSAia2pzX2V2ZW50
cy5oIgogI2luY2x1ZGUgImtqc19wcm94eS5oIgogCi0jaW5jbHVkZSAibWlzYy9odG1sdGFncy5o
IgotCiAjaW5jbHVkZSAicmVuZGVyaW5nL3JlbmRlcl9jYW52YXNpbWFnZS5oIgogI2luY2x1ZGUg
InJlbmRlcmluZy9yZW5kZXJfb2JqZWN0LmgiCiAjaW5jbHVkZSAicmVuZGVyaW5nL3JlbmRlcl9s
YXllci5oIgpAQCAtMTA5LDYgKzEwNyw3IEBAIHVzaW5nIERPTTo6SFRNTE1hcEVsZW1lbnRJbXBs
OwogdXNpbmcgRE9NOjpIVE1MTWVudUVsZW1lbnRJbXBsOwogdXNpbmcgRE9NOjpIVE1MTWV0YUVs
ZW1lbnRJbXBsOwogdXNpbmcgRE9NOjpIVE1MTW9kRWxlbWVudEltcGw7Cit1c2luZyBET006OkhU
TUxOYW1lczsKIHVzaW5nIERPTTo6SFRNTE9MaXN0RWxlbWVudEltcGw7CiB1c2luZyBET006OkhU
TUxPYmplY3RFbGVtZW50SW1wbDsKIHVzaW5nIERPTTo6SFRNTE9wdEdyb3VwRWxlbWVudEltcGw7
CkBAIC0zNTMsNyArMzUyLDcgQEAgVmFsdWUgSFRNTERvY3VtZW50Ojp0cnlHZXQoRXhlY1N0YXRl
ICpleAogICBpZiAodmFsKQogICAgIHJldHVybiBWYWx1ZSh2YWwpOwogCi0gIEhUTUxCb2R5RWxl
bWVudEltcGwgKmJvZHlFbGVtZW50ID0gKGJvZHkgJiYgYm9keS0+aWQoKSA9PSBJRF9CT0RZKSA/
IHN0YXRpY19jYXN0PEhUTUxCb2R5RWxlbWVudEltcGwgKj4oYm9keSkgOiAwOworICBIVE1MQm9k
eUVsZW1lbnRJbXBsICpib2R5RWxlbWVudCA9IChib2R5ICYmIGJvZHktPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjpib2R5KCkpKSA/IHN0YXRpY19jYXN0PEhUTUxCb2R5RWxlbWVudEltcGwgKj4oYm9k
eSkgOiAwOwogCiAgIGlmIChlbnRyeSkgewogICAgIHN3aXRjaCAoZW50cnktPnZhbHVlKSB7CkBA
IC00MjgsNyArNDI3LDcgQEAgdm9pZCBLSlM6OkhUTUxEb2N1bWVudDo6cHV0VmFsdWUoRXhlY1N0
YQogICBET01FeGNlcHRpb25UcmFuc2xhdG9yIGV4Y2VwdGlvbihleGVjKTsKICAgSFRNTERvY3Vt
ZW50SW1wbCAmZG9jID0gKnN0YXRpY19jYXN0PEhUTUxEb2N1bWVudEltcGwgKj4oaW1wbCgpKTsK
ICAgSFRNTEVsZW1lbnRJbXBsICpib2R5ID0gZG9jLmJvZHkoKTsKLSAgSFRNTEJvZHlFbGVtZW50
SW1wbCAqYm9keUVsZW1lbnQgPSAoYm9keSAmJiBib2R5LT5pZCgpID09IElEX0JPRFkpID8gc3Rh
dGljX2Nhc3Q8SFRNTEJvZHlFbGVtZW50SW1wbCAqPihib2R5KSA6IDA7CisgIEhUTUxCb2R5RWxl
bWVudEltcGwgKmJvZHlFbGVtZW50ID0gKGJvZHkgJiYgYm9keS0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OmJvZHkoKSkpID8gc3RhdGljX2Nhc3Q8SFRNTEJvZHlFbGVtZW50SW1wbCAqPihib2R5KSA6
IDA7CiAKICAgc3dpdGNoICh0b2tlbikgewogICBjYXNlIFRpdGxlOgpAQCAtNTgyLDEzMyArNTgx
LDIxOCBAQCBjb25zdCBDbGFzc0luZm8gS0pTOjpIVE1MRWxlbWVudDo6bWFycXVlCiAKIGNvbnN0
IENsYXNzSW5mbyogS0pTOjpIVE1MRWxlbWVudDo6Y2xhc3NJbmZvKCkgY29uc3QKIHsKLSAgc3dp
dGNoIChpbXBsKCktPmlkKCkpIHsKLSAgY2FzZSBJRF9IVE1MOgotICAgIHJldHVybiAmaHRtbF9p
bmZvOwotICBjYXNlIElEX0hFQUQ6Ci0gICAgcmV0dXJuICZoZWFkX2luZm87Ci0gIGNhc2UgSURf
TElOSzoKLSAgICByZXR1cm4gJmxpbmtfaW5mbzsKLSAgY2FzZSBJRF9USVRMRToKLSAgICByZXR1
cm4gJnRpdGxlX2luZm87Ci0gIGNhc2UgSURfTUVUQToKLSAgICByZXR1cm4gJm1ldGFfaW5mbzsK
LSAgY2FzZSBJRF9CQVNFOgotICAgIHJldHVybiAmYmFzZV9pbmZvOwotICBjYXNlIElEX0lTSU5E
RVg6Ci0gICAgcmV0dXJuICZpc0luZGV4X2luZm87Ci0gIGNhc2UgSURfU1RZTEU6Ci0gICAgcmV0
dXJuICZzdHlsZV9pbmZvOwotICBjYXNlIElEX0JPRFk6Ci0gICAgcmV0dXJuICZib2R5X2luZm87
Ci0gIGNhc2UgSURfRk9STToKLSAgICByZXR1cm4gJmZvcm1faW5mbzsKLSAgY2FzZSBJRF9TRUxF
Q1Q6Ci0gICAgcmV0dXJuICZzZWxlY3RfaW5mbzsKLSAgY2FzZSBJRF9PUFRHUk9VUDoKLSAgICBy
ZXR1cm4gJm9wdEdyb3VwX2luZm87Ci0gIGNhc2UgSURfT1BUSU9OOgotICAgIHJldHVybiAmb3B0
aW9uX2luZm87Ci0gIGNhc2UgSURfSU5QVVQ6Ci0gICAgcmV0dXJuICZpbnB1dF9pbmZvOwotICBj
YXNlIElEX1RFWFRBUkVBOgotICAgIHJldHVybiAmdGV4dEFyZWFfaW5mbzsKLSAgY2FzZSBJRF9C
VVRUT046Ci0gICAgcmV0dXJuICZidXR0b25faW5mbzsKLSAgY2FzZSBJRF9MQUJFTDoKLSAgICBy
ZXR1cm4gJmxhYmVsX2luZm87Ci0gIGNhc2UgSURfRklFTERTRVQ6Ci0gICAgcmV0dXJuICZmaWVs
ZFNldF9pbmZvOwotICBjYXNlIElEX0xFR0VORDoKLSAgICByZXR1cm4gJmxlZ2VuZF9pbmZvOwot
ICBjYXNlIElEX1VMOgotICAgIHJldHVybiAmdWxfaW5mbzsKLSAgY2FzZSBJRF9PTDoKLSAgICBy
ZXR1cm4gJm9sX2luZm87Ci0gIGNhc2UgSURfREw6Ci0gICAgcmV0dXJuICZkbF9pbmZvOwotICBj
YXNlIElEX0RJUjoKLSAgICByZXR1cm4gJmRpcl9pbmZvOwotICBjYXNlIElEX01FTlU6Ci0gICAg
cmV0dXJuICZtZW51X2luZm87Ci0gIGNhc2UgSURfTEk6Ci0gICAgcmV0dXJuICZsaV9pbmZvOwot
ICBjYXNlIElEX0RJVjoKLSAgICByZXR1cm4gJmRpdl9pbmZvOwotICBjYXNlIElEX1A6Ci0gICAg
cmV0dXJuICZwX2luZm87Ci0gIGNhc2UgSURfSDE6Ci0gIGNhc2UgSURfSDI6Ci0gIGNhc2UgSURf
SDM6Ci0gIGNhc2UgSURfSDQ6Ci0gIGNhc2UgSURfSDU6Ci0gIGNhc2UgSURfSDY6Ci0gICAgcmV0
dXJuICZoZWFkaW5nX2luZm87Ci0gIGNhc2UgSURfQkxPQ0tRVU9URToKLSAgICByZXR1cm4gJmJs
b2NrUXVvdGVfaW5mbzsKLSAgY2FzZSBJRF9ROgotICAgIHJldHVybiAmcV9pbmZvOwotICBjYXNl
IElEX1BSRToKLSAgICByZXR1cm4gJnByZV9pbmZvOwotICBjYXNlIElEX0JSOgotICAgIHJldHVy
biAmYnJfaW5mbzsKLSAgY2FzZSBJRF9CQVNFRk9OVDoKLSAgICByZXR1cm4gJmJhc2VGb250X2lu
Zm87Ci0gIGNhc2UgSURfRk9OVDoKLSAgICByZXR1cm4gJmZvbnRfaW5mbzsKLSAgY2FzZSBJRF9I
UjoKLSAgICByZXR1cm4gJmhyX2luZm87Ci0gIGNhc2UgSURfSU5TOgotICBjYXNlIElEX0RFTDoK
LSAgICByZXR1cm4gJm1vZF9pbmZvOwotICBjYXNlIElEX0E6Ci0gICAgcmV0dXJuICZhX2luZm87
Ci0gIGNhc2UgSURfQ0FOVkFTOgotICAgIHJldHVybiAmY2FudmFzX2luZm87Ci0gIGNhc2UgSURf
SU1HOgotICAgIHJldHVybiAmaW1nX2luZm87Ci0gIGNhc2UgSURfT0JKRUNUOgotICAgIHJldHVy
biAmb2JqZWN0X2luZm87Ci0gIGNhc2UgSURfUEFSQU06Ci0gICAgcmV0dXJuICZwYXJhbV9pbmZv
OwotICBjYXNlIElEX0FQUExFVDoKLSAgICByZXR1cm4gJmFwcGxldF9pbmZvOwotICBjYXNlIElE
X01BUDoKLSAgICByZXR1cm4gJm1hcF9pbmZvOwotICBjYXNlIElEX0FSRUE6Ci0gICAgcmV0dXJu
ICZhcmVhX2luZm87Ci0gIGNhc2UgSURfU0NSSVBUOgotICAgIHJldHVybiAmc2NyaXB0X2luZm87
Ci0gIGNhc2UgSURfVEFCTEU6Ci0gICAgcmV0dXJuICZ0YWJsZV9pbmZvOwotICBjYXNlIElEX0NB
UFRJT046Ci0gICAgcmV0dXJuICZjYXB0aW9uX2luZm87Ci0gIGNhc2UgSURfQ09MOgotICAgIHJl
dHVybiAmY29sX2luZm87Ci0gIGNhc2UgSURfVEhFQUQ6Ci0gICAgcmV0dXJuICZ0YWJsZXNlY3Rp
b25faW5mbzsKLSAgY2FzZSBJRF9UQk9EWToKLSAgICByZXR1cm4gJnRhYmxlc2VjdGlvbl9pbmZv
OwotICBjYXNlIElEX1RGT09UOgotICAgIHJldHVybiAmdGFibGVzZWN0aW9uX2luZm87Ci0gIGNh
c2UgSURfVFI6Ci0gICAgcmV0dXJuICZ0cl9pbmZvOwotICBjYXNlIElEX1RIOgotICAgIHJldHVy
biAmdGFibGVjZWxsX2luZm87Ci0gIGNhc2UgSURfVEQ6Ci0gICAgcmV0dXJuICZ0YWJsZWNlbGxf
aW5mbzsKLSAgY2FzZSBJRF9GUkFNRVNFVDoKLSAgICByZXR1cm4gJmZyYW1lU2V0X2luZm87Ci0g
IGNhc2UgSURfRlJBTUU6Ci0gICAgcmV0dXJuICZmcmFtZV9pbmZvOwotICBjYXNlIElEX0lGUkFN
RToKLSAgICByZXR1cm4gJmlGcmFtZV9pbmZvOwotICBjYXNlIElEX01BUlFVRUU6Ci0gICAgcmV0
dXJuICZtYXJxdWVlX2luZm87Ci0gIGRlZmF1bHQ6CisgICAgLy8gV2UgYWxyZWFkeSBrbm93IHdl
IGhhdmUgYW4gSFRNTCBlbGVtZW50LCBzbyB3ZSBvbmx5IG5lZWQgdG8gY29tcGFyZSB0aGUgbG9j
YWxOYW1lIGNvbXBvbmVudCBvZiB0aGUgcXVhbGlmaWVkIG5hbWUuCisgICAgc3RhdGljIFFQdHJE
aWN0PGNvbnN0IENsYXNzSW5mbz4gY2xhc3NJbmZvRGljdDsKKyAgICBpZiAoY2xhc3NJbmZvRGlj
dC5pc0VtcHR5KCkpIHsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjph
KCkubG9jYWxOYW1lUHRyKCksICZhX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2Vy
dChIVE1MTmFtZXM6OmFwcGxldCgpLmxvY2FsTmFtZVB0cigpLCAmYXBwbGV0X2luZm8pOworICAg
ICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmFyZWEoKS5sb2NhbE5hbWVQdHIo
KSwgJmFyZWFfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6
YmFzZSgpLmxvY2FsTmFtZVB0cigpLCAmYmFzZV9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGlj
dC5pbnNlcnQoSFRNTE5hbWVzOjpiYXNlZm9udCgpLmxvY2FsTmFtZVB0cigpLCAmYmFzZUZvbnRf
aW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6YmxvY2txdW90
ZSgpLmxvY2FsTmFtZVB0cigpLCAmYmxvY2tRdW90ZV9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZv
RGljdC5pbnNlcnQoSFRNTE5hbWVzOjpib2R5KCkubG9jYWxOYW1lUHRyKCksICZib2R5X2luZm8p
OworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmJyKCkubG9jYWxOYW1l
UHRyKCksICZicl9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVz
OjpidXR0b24oKS5sb2NhbE5hbWVQdHIoKSwgJmJ1dHRvbl9pbmZvKTsKKyAgICAgICAgY2xhc3NJ
bmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpjYW52YXMoKS5sb2NhbE5hbWVQdHIoKSwgJmNhbnZh
c19pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpjYXB0aW9u
KCkubG9jYWxOYW1lUHRyKCksICZjYXB0aW9uX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0
Lmluc2VydChIVE1MTmFtZXM6OmNvbCgpLmxvY2FsTmFtZVB0cigpLCAmY29sX2luZm8pOworICAg
ICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmNvbGdyb3VwKCkubG9jYWxOYW1l
UHRyKCksICZjb2xfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1l
czo6ZGVsKCkubG9jYWxOYW1lUHRyKCksICZtb2RfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0Rp
Y3QuaW5zZXJ0KEhUTUxOYW1lczo6ZGlyKCkubG9jYWxOYW1lUHRyKCksICZkaXJfaW5mbyk7Cisg
ICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6ZGl2KCkubG9jYWxOYW1lUHRy
KCksICZkaXZfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6
ZGwoKS5sb2NhbE5hbWVQdHIoKSwgJmRsX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmlu
c2VydChIVE1MTmFtZXM6OmZpZWxkc2V0KCkubG9jYWxOYW1lUHRyKCksICZmaWVsZFNldF9pbmZv
KTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpmb250KCkubG9jYWxO
YW1lUHRyKCksICZmb250X2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1M
TmFtZXM6OmZvcm0oKS5sb2NhbE5hbWVQdHIoKSwgJmZvcm1faW5mbyk7CisgICAgICAgIGNsYXNz
SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6ZnJhbWUoKS5sb2NhbE5hbWVQdHIoKSwgJmZyYW1l
X2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmZyYW1lc2V0
KCkubG9jYWxOYW1lUHRyKCksICZmcmFtZVNldF9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGlj
dC5pbnNlcnQoSFRNTE5hbWVzOjpoMSgpLmxvY2FsTmFtZVB0cigpLCAmaGVhZGluZ19pbmZvKTsK
KyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpoMigpLmxvY2FsTmFtZVB0
cigpLCAmaGVhZGluZ19pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5h
bWVzOjpoMygpLmxvY2FsTmFtZVB0cigpLCAmaGVhZGluZ19pbmZvKTsKKyAgICAgICAgY2xhc3NJ
bmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpoNCgpLmxvY2FsTmFtZVB0cigpLCAmaGVhZGluZ19p
bmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpoNSgpLmxvY2Fs
TmFtZVB0cigpLCAmaGVhZGluZ19pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQo
SFRNTE5hbWVzOjpoNigpLmxvY2FsTmFtZVB0cigpLCAmaGVhZGluZ19pbmZvKTsKKyAgICAgICAg
Y2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpoZWFkKCkubG9jYWxOYW1lUHRyKCksICZo
ZWFkX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmhyKCku
bG9jYWxOYW1lUHRyKCksICZocl9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQo
SFRNTE5hbWVzOjpodG1sKCkubG9jYWxOYW1lUHRyKCksICZodG1sX2luZm8pOworICAgICAgICBj
bGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmlmcmFtZSgpLmxvY2FsTmFtZVB0cigpLCAm
aUZyYW1lX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Omlt
ZygpLmxvY2FsTmFtZVB0cigpLCAmaW1nX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmlu
c2VydChIVE1MTmFtZXM6OmlucHV0KCkubG9jYWxOYW1lUHRyKCksICZpbnB1dF9pbmZvKTsKKyAg
ICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjppbnMoKS5sb2NhbE5hbWVQdHIo
KSwgJm1vZF9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpp
c2luZGV4KCkubG9jYWxOYW1lUHRyKCksICZpc0luZGV4X2luZm8pOworICAgICAgICBjbGFzc0lu
Zm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmxhYmVsKCkubG9jYWxOYW1lUHRyKCksICZsYWJlbF9p
bmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpsZWdlbmQoKS5s
b2NhbE5hbWVQdHIoKSwgJmxlZ2VuZF9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNl
cnQoSFRNTE5hbWVzOjpsaSgpLmxvY2FsTmFtZVB0cigpLCAmbGlfaW5mbyk7CisgICAgICAgIGNs
YXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6bGluaygpLmxvY2FsTmFtZVB0cigpLCAmbGlu
a19pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjptYXAoKS5s
b2NhbE5hbWVQdHIoKSwgJm1hcF9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQo
SFRNTE5hbWVzOjptYXJxdWVlKCkubG9jYWxOYW1lUHRyKCksICZtYXJxdWVlX2luZm8pOworICAg
ICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Om1lbnUoKS5sb2NhbE5hbWVQdHIo
KSwgJm1lbnVfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6
bWV0YSgpLmxvY2FsTmFtZVB0cigpLCAmbWV0YV9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGlj
dC5pbnNlcnQoSFRNTE5hbWVzOjpvYmplY3QoKS5sb2NhbE5hbWVQdHIoKSwgJm9iamVjdF9pbmZv
KTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpvbCgpLmxvY2FsTmFt
ZVB0cigpLCAmb2xfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1l
czo6b3B0aW9uKCkubG9jYWxOYW1lUHRyKCksICZvcHRpb25faW5mbyk7CisgICAgICAgIGNsYXNz
SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6b3B0Z3JvdXAoKS5sb2NhbE5hbWVQdHIoKSwgJm9w
dEdyb3VwX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OnAo
KS5sb2NhbE5hbWVQdHIoKSwgJnBfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0
KEhUTUxOYW1lczo6cGFyYW0oKS5sb2NhbE5hbWVQdHIoKSwgJnBhcmFtX2luZm8pOworICAgICAg
ICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OnByZSgpLmxvY2FsTmFtZVB0cigpLCAm
cHJlX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OnEoKS5s
b2NhbE5hbWVQdHIoKSwgJnFfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhU
TUxOYW1lczo6c2NyaXB0KCkubG9jYWxOYW1lUHRyKCksICZzY3JpcHRfaW5mbyk7CisgICAgICAg
IGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6c2VsZWN0KCkubG9jYWxOYW1lUHRyKCks
ICZzZWxlY3RfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6
c3R5bGUoKS5sb2NhbE5hbWVQdHIoKSwgJnN0eWxlX2luZm8pOworICAgICAgICBjbGFzc0luZm9E
aWN0Lmluc2VydChIVE1MTmFtZXM6OnRhYmxlKCkubG9jYWxOYW1lUHRyKCksICZ0YWJsZV9pbmZv
KTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjp0Ym9keSgpLmxvY2Fs
TmFtZVB0cigpLCAmdGFibGVzZWN0aW9uX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmlu
c2VydChIVE1MTmFtZXM6OnRkKCkubG9jYWxOYW1lUHRyKCksICZ0YWJsZWNlbGxfaW5mbyk7Cisg
ICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6dGV4dGFyZWEoKS5sb2NhbE5h
bWVQdHIoKSwgJnRleHRBcmVhX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChI
VE1MTmFtZXM6OnRoKCkubG9jYWxOYW1lUHRyKCksICZ0YWJsZWNlbGxfaW5mbyk7CisgICAgICAg
IGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6dGhlYWQoKS5sb2NhbE5hbWVQdHIoKSwg
JnRhYmxlc2VjdGlvbl9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5h
bWVzOjp0Zm9vdCgpLmxvY2FsTmFtZVB0cigpLCAmdGFibGVzZWN0aW9uX2luZm8pOworICAgICAg
ICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OnRpdGxlKCkubG9jYWxOYW1lUHRyKCks
ICZ0aXRsZV9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjp0
cigpLmxvY2FsTmFtZVB0cigpLCAmdHJfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5z
ZXJ0KEhUTUxOYW1lczo6dWwoKS5sb2NhbE5hbWVQdHIoKSwgJnVsX2luZm8pOworICAgIH0KKyAg
ICAKKyAgICBIVE1MRWxlbWVudEltcGwqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVu
dEltcGwqPihpbXBsKCkpOworICAgIGNvbnN0IENsYXNzSW5mbyogcmVzdWx0ID0gY2xhc3NJbmZv
RGljdC5maW5kKGVsZW1lbnQtPmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCkpOworICAgIGlm
IChyZXN1bHQpCisgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgcmV0dXJuICZpbmZvOwotICB9
CiB9CisKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjpodG1sX2dl
dHNldCA9IHsgJkhUTUxFbGVtZW50OjpodG1sR2V0dGVyLCAmSFRNTEVsZW1lbnQ6Omh0bWxTZXR0
ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjpoZWFkX2dl
dHNldCA9IHsgJkhUTUxFbGVtZW50OjpoZWFkR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmhlYWRTZXR0
ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjpsaW5rX2dl
dHNldCA9IHsgJkhUTUxFbGVtZW50OjpsaW5rR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmxpbmtTZXR0
ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50Ojp0aXRsZV9n
ZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6dGl0bGVHZXR0ZXIsICZIVE1MRWxlbWVudDo6dGl0bGVT
ZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjptZXRh
X2dldHNldCA9IHsgJkhUTUxFbGVtZW50OjptZXRhR2V0dGVyLCAmSFRNTEVsZW1lbnQ6Om1ldGFT
ZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjpiYXNl
X2dldHNldCA9IHsgJkhUTUxFbGVtZW50OjpiYXNlR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmJhc2VT
ZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50Ojppc0lu
ZGV4X2dldHNldCA9IHsgJkhUTUxFbGVtZW50Ojppc0luZGV4R2V0dGVyLCAmSFRNTEVsZW1lbnQ6
OmlzSW5kZXhTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVt
ZW50OjpzdHlsZV9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6c3R5bGVHZXR0ZXIsICZIVE1MRWxl
bWVudDo6c3R5bGVTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxF
bGVtZW50Ojpib2R5X2dldHNldCA9IHsgJkhUTUxFbGVtZW50Ojpib2R5R2V0dGVyLCAmSFRNTEVs
ZW1lbnQ6OmJvZHlTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxF
bGVtZW50Ojpmb3JtX2dldHNldCA9IHsgJkhUTUxFbGVtZW50Ojpmb3JtR2V0dGVyLCAmSFRNTEVs
ZW1lbnQ6OmZvcm1TZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxF
bGVtZW50OjpzZWxlY3RfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OnNlbGVjdEdldHRlciwgJkhU
TUxFbGVtZW50OjpzZWxlY3RTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZv
IEhUTUxFbGVtZW50OjpvcHRHcm91cF9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6b3B0R3JvdXBH
ZXR0ZXIsICZIVE1MRWxlbWVudDo6b3B0R3JvdXBTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50
OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjpvcHRpb25fZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6
Om9wdGlvbkdldHRlciwgJkhUTUxFbGVtZW50OjpvcHRpb25TZXR0ZXIgfTsKK2NvbnN0IEhUTUxF
bGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjppbnB1dF9nZXRzZXQgPSB7ICZIVE1MRWxl
bWVudDo6aW5wdXRHZXR0ZXIsICZIVE1MRWxlbWVudDo6aW5wdXRTZXR0ZXIgfTsKK2NvbnN0IEhU
TUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50Ojp0ZXh0QXJlYV9nZXRzZXQgPSB7ICZI
VE1MRWxlbWVudDo6dGV4dEFyZWFHZXR0ZXIsICZIVE1MRWxlbWVudDo6dGV4dEFyZWFTZXR0ZXIg
fTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjpidXR0b25fZ2V0
c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmJ1dHRvbkdldHRlciwgJkhUTUxFbGVtZW50OjpidXR0b25T
ZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjpsYWJl
bF9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6bGFiZWxHZXR0ZXIsICZIVE1MRWxlbWVudDo6bGFi
ZWxTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50Ojpm
aWVsZFNldF9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6ZmllbGRTZXRHZXR0ZXIsICZIVE1MRWxl
bWVudDo6ZmllbGRTZXRTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhU
TUxFbGVtZW50OjpsZWdlbmRfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmxlZ2VuZEdldHRlciwg
JkhUTUxFbGVtZW50OjpsZWdlbmRTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJ
bmZvIEhUTUxFbGVtZW50Ojp1bF9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6dUxpc3RHZXR0ZXIs
ICZIVE1MRWxlbWVudDo6dUxpc3RTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJ
bmZvIEhUTUxFbGVtZW50OjpvbF9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6b0xpc3RHZXR0ZXIs
ICZIVE1MRWxlbWVudDo6b0xpc3RTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJ
bmZvIEhUTUxFbGVtZW50OjpkbF9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6ZExpc3RHZXR0ZXIs
ICZIVE1MRWxlbWVudDo6ZExpc3RTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJ
bmZvIEhUTUxFbGVtZW50OjpkaXJfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmRpckdldHRlciwg
JkhUTUxFbGVtZW50OjpkaXJTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZv
IEhUTUxFbGVtZW50OjptZW51X2dldHNldCA9IHsgJkhUTUxFbGVtZW50OjptZW51R2V0dGVyLCAm
SFRNTEVsZW1lbnQ6Om1lbnVTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZv
IEhUTUxFbGVtZW50OjpsaV9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6bGlHZXR0ZXIsICZIVE1M
RWxlbWVudDo6bGlTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxF
bGVtZW50OjpkaXZfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmRpdkdldHRlciwgJkhUTUxFbGVt
ZW50OjpkaXZTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVt
ZW50OjpwX2dldHNldCA9IHsgJkhUTUxFbGVtZW50OjpwYXJhZ3JhcGhHZXR0ZXIsICZIVE1MRWxl
bWVudDo6cGFyYWdyYXBoU2V0dGVyIH07Citjb25zdCBIVE1MRWxlbWVudDo6R2V0U2V0SW5mbyBI
VE1MRWxlbWVudDo6aGVhZGluZ19nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6aGVhZGluZ0dldHRl
ciwgJkhUTUxFbGVtZW50OjpoZWFkaW5nU2V0dGVyIH07Citjb25zdCBIVE1MRWxlbWVudDo6R2V0
U2V0SW5mbyBIVE1MRWxlbWVudDo6YmxvY2tRdW90ZV9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6
YmxvY2tRdW90ZUdldHRlciwgJkhUTUxFbGVtZW50OjpibG9ja1F1b3RlU2V0dGVyIH07Citjb25z
dCBIVE1MRWxlbWVudDo6R2V0U2V0SW5mbyBIVE1MRWxlbWVudDo6cV9nZXRzZXQgPSB7ICZIVE1M
RWxlbWVudDo6cXVvdGVHZXR0ZXIsICZIVE1MRWxlbWVudDo6cXVvdGVTZXR0ZXIgfTsKK2NvbnN0
IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjpwcmVfZ2V0c2V0ID0geyAmSFRN
TEVsZW1lbnQ6OnByZUdldHRlciwgJkhUTUxFbGVtZW50OjpwcmVTZXR0ZXIgfTsKK2NvbnN0IEhU
TUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50Ojpicl9nZXRzZXQgPSB7ICZIVE1MRWxl
bWVudDo6YnJHZXR0ZXIsICZIVE1MRWxlbWVudDo6YnJTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVt
ZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjpiYXNlRm9udF9nZXRzZXQgPSB7ICZIVE1MRWxl
bWVudDo6YmFzZUZvbnRHZXR0ZXIsICZIVE1MRWxlbWVudDo6YmFzZUZvbnRTZXR0ZXIgfTsKK2Nv
bnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50Ojpmb250X2dldHNldCA9IHsg
JkhUTUxFbGVtZW50Ojpmb250R2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmZvbnRTZXR0ZXIgfTsKK2Nv
bnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50Ojpocl9nZXRzZXQgPSB7ICZI
VE1MRWxlbWVudDo6aHJHZXR0ZXIsICZIVE1MRWxlbWVudDo6aHJTZXR0ZXIgfTsKK2NvbnN0IEhU
TUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50Ojptb2RfZ2V0c2V0ID0geyAmSFRNTEVs
ZW1lbnQ6Om1vZEdldHRlciwgJkhUTUxFbGVtZW50Ojptb2RTZXR0ZXIgfTsKK2NvbnN0IEhUTUxF
bGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjphX2dldHNldCA9IHsgJkhUTUxFbGVtZW50
OjphbmNob3JHZXR0ZXIsICZIVE1MRWxlbWVudDo6YW5jaG9yU2V0dGVyIH07Citjb25zdCBIVE1M
RWxlbWVudDo6R2V0U2V0SW5mbyBIVE1MRWxlbWVudDo6Y2FudmFzX2dldHNldCA9IHsgJkhUTUxF
bGVtZW50OjppbWFnZUdldHRlciwgJkhUTUxFbGVtZW50OjppbWFnZVNldHRlciB9OworY29uc3Qg
SFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmltZ19nZXRzZXQgPSB7ICZIVE1M
RWxlbWVudDo6aW1hZ2VHZXR0ZXIsICZIVE1MRWxlbWVudDo6aW1hZ2VTZXR0ZXIgfTsKK2NvbnN0
IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjpvYmplY3RfZ2V0c2V0ID0geyAm
SFRNTEVsZW1lbnQ6Om9iamVjdEdldHRlciwgJkhUTUxFbGVtZW50OjpvYmplY3RTZXR0ZXIgfTsK
K2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjpwYXJhbV9nZXRzZXQg
PSB7ICZIVE1MRWxlbWVudDo6cGFyYW1HZXR0ZXIsICZIVE1MRWxlbWVudDo6cGFyYW1TZXR0ZXIg
fTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjphcHBsZXRfZ2V0
c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmFwcGxldEdldHRlciwgJkhUTUxFbGVtZW50OjphcHBsZXRT
ZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjptYXBf
Z2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6Om1hcEdldHRlciwgJkhUTUxFbGVtZW50OjptYXBTZXR0
ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjphcmVhX2dl
dHNldCA9IHsgJkhUTUxFbGVtZW50OjphcmVhR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmFyZWFTZXR0
ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjpzY3JpcHRf
Z2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OnNjcmlwdEdldHRlciwgJkhUTUxFbGVtZW50OjpzY3Jp
cHRTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50Ojp0
YWJsZV9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6dGFibGVHZXR0ZXIsICZIVE1MRWxlbWVudDo6
dGFibGVTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50
OjpjYXB0aW9uX2dldHNldCA9IHsgJkhUTUxFbGVtZW50Ojp0YWJsZUNhcHRpb25HZXR0ZXIsICZI
VE1MRWxlbWVudDo6dGFibGVDYXB0aW9uU2V0dGVyIH07Citjb25zdCBIVE1MRWxlbWVudDo6R2V0
U2V0SW5mbyBIVE1MRWxlbWVudDo6Y29sX2dldHNldCA9IHsgJkhUTUxFbGVtZW50Ojp0YWJsZUNv
bEdldHRlciwgJkhUTUxFbGVtZW50Ojp0YWJsZUNvbFNldHRlciB9OworY29uc3QgSFRNTEVsZW1l
bnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OnRhYmxlc2VjdGlvbl9nZXRzZXQgPSB7ICZIVE1M
RWxlbWVudDo6dGFibGVTZWN0aW9uR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OnRhYmxlU2VjdGlvblNl
dHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OnRyX2dl
dHNldCA9IHsgJkhUTUxFbGVtZW50Ojp0YWJsZVJvd0dldHRlciwgJkhUTUxFbGVtZW50Ojp0YWJs
ZVJvd1NldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6
OnRhYmxlY2VsbF9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6dGFibGVDZWxsR2V0dGVyLCAmSFRN
TEVsZW1lbnQ6OnRhYmxlQ2VsbFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldElu
Zm8gSFRNTEVsZW1lbnQ6OmZyYW1lU2V0X2dldHNldCA9IHsgJkhUTUxFbGVtZW50OjpmcmFtZVNl
dEdldHRlciwgJkhUTUxFbGVtZW50OjpmcmFtZVNldFNldHRlciB9OworY29uc3QgSFRNTEVsZW1l
bnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmZyYW1lX2dldHNldCA9IHsgJkhUTUxFbGVtZW50
OjpmcmFtZUdldHRlciwgJkhUTUxFbGVtZW50OjpmcmFtZVNldHRlciB9OworY29uc3QgSFRNTEVs
ZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmlGcmFtZV9nZXRzZXQgPSB7ICZIVE1MRWxl
bWVudDo6aUZyYW1lR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmlGcmFtZVNldHRlciB9OworY29uc3Qg
SFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6Om1hcnF1ZWVfZ2V0c2V0ID0geyAm
SFRNTEVsZW1lbnQ6Om1hcnF1ZWVHZXR0ZXIsICZIVE1MRWxlbWVudDo6bWFycXVlZVNldHRlciB9
OworCitjb25zdCBIVE1MRWxlbWVudDo6R2V0U2V0SW5mbyogSFRNTEVsZW1lbnQ6OmdldFNldElu
Zm8oKSBjb25zdAoreworICAgIC8vIFdlIGFscmVhZHkga25vdyB3ZSBoYXZlIGFuIEhUTUwgZWxl
bWVudCwgc28gd2Ugb25seSBuZWVkIHRvIGNvbXBhcmUgdGhlIGxvY2FsTmFtZSBjb21wb25lbnQg
b2YgdGhlIHF1YWxpZmllZCBuYW1lLgorICAgIHN0YXRpYyBRUHRyRGljdDxjb25zdCBIVE1MRWxl
bWVudDo6R2V0U2V0SW5mbz4gZ2V0U2V0SW5mb0RpY3Q7CisgICAgaWYgKGdldFNldEluZm9EaWN0
LmlzRW1wdHkoKSkgeworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjph
KCkubG9jYWxOYW1lUHRyKCksICZhX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmlu
c2VydChIVE1MTmFtZXM6OmFwcGxldCgpLmxvY2FsTmFtZVB0cigpLCAmYXBwbGV0X2dldHNldCk7
CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmFyZWEoKS5sb2NhbE5h
bWVQdHIoKSwgJmFyZWFfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhU
TUxOYW1lczo6YmFzZSgpLmxvY2FsTmFtZVB0cigpLCAmYmFzZV9nZXRzZXQpOworICAgICAgICBn
ZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpiYXNlZm9udCgpLmxvY2FsTmFtZVB0cigp
LCAmYmFzZUZvbnRfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxO
YW1lczo6YmxvY2txdW90ZSgpLmxvY2FsTmFtZVB0cigpLCAmYmxvY2tRdW90ZV9nZXRzZXQpOyAK
KyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6Ym9keSgpLmxvY2FsTmFt
ZVB0cigpLCAmYm9keV9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRN
TE5hbWVzOjpicigpLmxvY2FsTmFtZVB0cigpLCAmYnJfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0
SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6YnV0dG9uKCkubG9jYWxOYW1lUHRyKCksICZidXR0
b25fZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6Y2Fu
dmFzKCkubG9jYWxOYW1lUHRyKCksICZjYW52YXNfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5m
b0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6Y2FwdGlvbigpLmxvY2FsTmFtZVB0cigpLCAmY2FwdGlv
bl9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpjb2wo
KS5sb2NhbE5hbWVQdHIoKSwgJmNvbF9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5p
bnNlcnQoSFRNTE5hbWVzOjpjb2xncm91cCgpLmxvY2FsTmFtZVB0cigpLCAmY29sX2dldHNldCk7
CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmRlbCgpLmxvY2FsTmFt
ZVB0cigpLCAmbW9kX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1M
TmFtZXM6OmRpcigpLmxvY2FsTmFtZVB0cigpLCAmZGlyX2dldHNldCk7CisgICAgICAgIGdldFNl
dEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmRpdigpLmxvY2FsTmFtZVB0cigpLCAmZGl2X2dl
dHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmRsKCkubG9j
YWxOYW1lUHRyKCksICZkbF9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQo
SFRNTE5hbWVzOjpmaWVsZHNldCgpLmxvY2FsTmFtZVB0cigpLCAmZmllbGRTZXRfZ2V0c2V0KTsK
KyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6Zm9udCgpLmxvY2FsTmFt
ZVB0cigpLCAmZm9udF9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRN
TE5hbWVzOjpmb3JtKCkubG9jYWxOYW1lUHRyKCksICZmb3JtX2dldHNldCk7CisgICAgICAgIGdl
dFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmZyYW1lKCkubG9jYWxOYW1lUHRyKCksICZm
cmFtZV9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpm
cmFtZXNldCgpLmxvY2FsTmFtZVB0cigpLCAmZnJhbWVTZXRfZ2V0c2V0KTsKKyAgICAgICAgZ2V0
U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6aDEoKS5sb2NhbE5hbWVQdHIoKSwgJmhlYWRp
bmdfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6aDIo
KS5sb2NhbE5hbWVQdHIoKSwgJmhlYWRpbmdfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0Rp
Y3QuaW5zZXJ0KEhUTUxOYW1lczo6aDMoKS5sb2NhbE5hbWVQdHIoKSwgJmhlYWRpbmdfZ2V0c2V0
KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6aDQoKS5sb2NhbE5h
bWVQdHIoKSwgJmhlYWRpbmdfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0
KEhUTUxOYW1lczo6aDUoKS5sb2NhbE5hbWVQdHIoKSwgJmhlYWRpbmdfZ2V0c2V0KTsKKyAgICAg
ICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6aDYoKS5sb2NhbE5hbWVQdHIoKSwg
JmhlYWRpbmdfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1l
czo6aGVhZCgpLmxvY2FsTmFtZVB0cigpLCAmaGVhZF9nZXRzZXQpOworICAgICAgICBnZXRTZXRJ
bmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpocigpLmxvY2FsTmFtZVB0cigpLCAmaHJfZ2V0c2V0
KTsgCisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Omh0bWwoKS5sb2Nh
bE5hbWVQdHIoKSwgJmh0bWxfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0
KEhUTUxOYW1lczo6aWZyYW1lKCkubG9jYWxOYW1lUHRyKCksICZpRnJhbWVfZ2V0c2V0KTsKKyAg
ICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6aW1nKCkubG9jYWxOYW1lUHRy
KCksICZpbWdfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1l
czo6aW5wdXQoKS5sb2NhbE5hbWVQdHIoKSwgJmlucHV0X2dldHNldCk7CisgICAgICAgIGdldFNl
dEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmlucygpLmxvY2FsTmFtZVB0cigpLCAmbW9kX2dl
dHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmlzaW5kZXgo
KS5sb2NhbE5hbWVQdHIoKSwgJmlzSW5kZXhfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0Rp
Y3QuaW5zZXJ0KEhUTUxOYW1lczo6bGFiZWwoKS5sb2NhbE5hbWVQdHIoKSwgJmxhYmVsX2dldHNl
dCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmxlZ2VuZCgpLmxv
Y2FsTmFtZVB0cigpLCAmbGVnZW5kX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmlu
c2VydChIVE1MTmFtZXM6OmxpKCkubG9jYWxOYW1lUHRyKCksICZsaV9nZXRzZXQpOworICAgICAg
ICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpsaW5rKCkubG9jYWxOYW1lUHRyKCks
ICZsaW5rX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6
Om1hcCgpLmxvY2FsTmFtZVB0cigpLCAmbWFwX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9E
aWN0Lmluc2VydChIVE1MTmFtZXM6Om1hcnF1ZWUoKS5sb2NhbE5hbWVQdHIoKSwgJm1hcnF1ZWVf
Z2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6bWVudSgp
LmxvY2FsTmFtZVB0cigpLCAmbWVudV9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5p
bnNlcnQoSFRNTE5hbWVzOjptZXRhKCkubG9jYWxOYW1lUHRyKCksICZtZXRhX2dldHNldCk7Cisg
ICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Om9iamVjdCgpLmxvY2FsTmFt
ZVB0cigpLCAmb2JqZWN0X2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChI
VE1MTmFtZXM6Om9sKCkubG9jYWxOYW1lUHRyKCksICZvbF9nZXRzZXQpOworICAgICAgICBnZXRT
ZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpvcHRpb24oKS5sb2NhbE5hbWVQdHIoKSwgJm9w
dGlvbl9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpv
cHRncm91cCgpLmxvY2FsTmFtZVB0cigpLCAmb3B0R3JvdXBfZ2V0c2V0KTsKKyAgICAgICAgZ2V0
U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6cCgpLmxvY2FsTmFtZVB0cigpLCAmcF9nZXRz
ZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpwYXJhbSgpLmxv
Y2FsTmFtZVB0cigpLCAmcGFyYW1fZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5z
ZXJ0KEhUTUxOYW1lczo6cHJlKCkubG9jYWxOYW1lUHRyKCksICZwcmVfZ2V0c2V0KTsKKyAgICAg
ICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6cSgpLmxvY2FsTmFtZVB0cigpLCAm
cV9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpzY3Jp
cHQoKS5sb2NhbE5hbWVQdHIoKSwgJnNjcmlwdF9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZv
RGljdC5pbnNlcnQoSFRNTE5hbWVzOjpzZWxlY3QoKS5sb2NhbE5hbWVQdHIoKSwgJnNlbGVjdF9n
ZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpzdHlsZSgp
LmxvY2FsTmFtZVB0cigpLCAmc3R5bGVfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3Qu
aW5zZXJ0KEhUTUxOYW1lczo6dGFibGUoKS5sb2NhbE5hbWVQdHIoKSwgJnRhYmxlX2dldHNldCk7
CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OnRib2R5KCkubG9jYWxO
YW1lUHRyKCksICZ0YWJsZXNlY3Rpb25fZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3Qu
aW5zZXJ0KEhUTUxOYW1lczo6dGQoKS5sb2NhbE5hbWVQdHIoKSwgJnRhYmxlY2VsbF9nZXRzZXQp
OworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjp0ZXh0YXJlYSgpLmxv
Y2FsTmFtZVB0cigpLCAmdGV4dEFyZWFfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3Qu
aW5zZXJ0KEhUTUxOYW1lczo6dGgoKS5sb2NhbE5hbWVQdHIoKSwgJnRhYmxlY2VsbF9nZXRzZXQp
OworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjp0aGVhZCgpLmxvY2Fs
TmFtZVB0cigpLCAmdGFibGVzZWN0aW9uX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0
Lmluc2VydChIVE1MTmFtZXM6OnRmb290KCkubG9jYWxOYW1lUHRyKCksICZ0YWJsZXNlY3Rpb25f
Z2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6dGl0bGUo
KS5sb2NhbE5hbWVQdHIoKSwgJnRpdGxlX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0
Lmluc2VydChIVE1MTmFtZXM6OnRyKCkubG9jYWxOYW1lUHRyKCksICZ0cl9nZXRzZXQpOworICAg
ICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjp1bCgpLmxvY2FsTmFtZVB0cigp
LCAmdWxfZ2V0c2V0KTsKKyAgICB9CisgICAgCisgICAgSFRNTEVsZW1lbnRJbXBsKiBlbGVtZW50
ID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBjb25zdCBIVE1M
RWxlbWVudDo6R2V0U2V0SW5mbyogcmVzdWx0ID0gZ2V0U2V0SW5mb0RpY3QuZmluZChlbGVtZW50
LT5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpKTsKKyAgICBpZiAocmVzdWx0KQorICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiAwOworfQorCiAvKgogQGJlZ2luIEhUTUxFbGVt
ZW50VGFibGUgMTQKICAgaWQJCUtKUzo6SFRNTEVsZW1lbnQ6OkVsZW1lbnRJZAlEb250RGVsZXRl
CkBAIC0xMTg2LDM1ICsxMjcwLDMyIEBAIEhUTUxFbGVtZW50OjpIVE1MRWxlbWVudChFeGVjU3Rh
dGUgKmV4ZWMKIAogVmFsdWUgS0pTOjpIVE1MRWxlbWVudDo6dHJ5R2V0KEV4ZWNTdGF0ZSAqZXhl
YywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lKSBjb25zdAogewotICBIVE1MRWxlbWVu
dEltcGwgJmVsZW1lbnQgPSAqc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KGltcGwoKSk7
CisgICAgSFRNTEVsZW1lbnRJbXBsICZlbGVtZW50ID0gKnN0YXRpY19jYXN0PEhUTUxFbGVtZW50
SW1wbCAqPihpbXBsKCkpOwogI2lmZGVmIEtKU19WRVJCT1NFCi0gIGtkRGVidWcoNjA3MCkgPDwg
IktKUzo6SFRNTEVsZW1lbnQ6OnRyeUdldCAiIDw8IHByb3BlcnR5TmFtZS5xc3RyaW5nKCkgPDwg
IiB0aGlzVGFnPSIgPDwgZWxlbWVudC50YWdOYW1lKCkuc3RyaW5nKCkgPDwgZW5kbDsKKyAgICBr
ZERlYnVnKDYwNzApIDw8ICJLSlM6OkhUTUxFbGVtZW50Ojp0cnlHZXQgIiA8PCBwcm9wZXJ0eU5h
bWUucXN0cmluZygpIDw8ICIgdGhpc1RhZz0iIDw8IGVsZW1lbnQudGFnTmFtZSgpLnN0cmluZygp
IDw8IGVuZGw7CiAjZW5kaWYKLSAgLy8gRmlyc3QgbG9vayBhdCBkeW5hbWljIHByb3BlcnRpZXMK
LSAgc3dpdGNoIChlbGVtZW50LmlkKCkpIHsKLSAgICBjYXNlIElEX0ZPUk06IHsKLSAgICAgIEhU
TUxGb3JtRWxlbWVudEltcGwgJmZvcm0gPSBzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnRJbXBs
ICY+KGVsZW1lbnQpOwotICAgICAgLy8gQ2hlY2sgaWYgd2UncmUgcmV0cmlldmluZyBhbiBlbGVt
ZW50IChieSBpbmRleCBvciBieSBuYW1lKQotICAgICAgYm9vbCBvazsKLSAgICAgIHVpbnQgdSA9
IHByb3BlcnR5TmFtZS50b1VMb25nKCZvayk7Ci0gICAgICBpZiAob2spCi0gICAgICAgIHJldHVy
biBnZXRET01Ob2RlKGV4ZWMsIGZvcm0uZWxlbWVudHMoKS0+aXRlbSh1KSk7Ci0gICAgICBWYWx1
ZUltcCAqbmFtZWRJdGVtcyA9IEhUTUxDb2xsZWN0aW9uKGV4ZWMsIGZvcm0uZWxlbWVudHMoKS5n
ZXQoKSkuZ2V0TmFtZWRJdGVtcyhleGVjLCBwcm9wZXJ0eU5hbWUpOwotICAgICAgaWYgKCFuYW1l
ZEl0ZW1zLT5pc1VuZGVmaW5lZCgpKQotICAgICAgICByZXR1cm4gbmFtZWRJdGVtczsKLSAgICB9
Ci0gICAgICBicmVhazsKLSAgICBjYXNlIElEX1NFTEVDVDogewotICAgICAgSFRNTFNlbGVjdEVs
ZW1lbnRJbXBsICZzZWxlY3QgPSBzdGF0aWNfY2FzdDxIVE1MU2VsZWN0RWxlbWVudEltcGwgJj4o
ZWxlbWVudCk7Ci0gICAgICBib29sIG9rOwotICAgICAgdWludCB1ID0gcHJvcGVydHlOYW1lLnRv
VUxvbmcoJm9rKTsKLSAgICAgIGlmIChvaykKLSAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhl
Yywgc2VsZWN0Lm9wdGlvbnNIVE1MQ29sbGVjdGlvbigpLT5pdGVtKHUpKTsgLy8gbm90IHNwZWNp
ZmllZCBieSBET00oPykgYnV0IHN1cHBvcnRlZCBpbiBuZXRzY2FwZS9JRQorICAgIC8vIEZpcnN0
IGxvb2sgYXQgZHluYW1pYyBwcm9wZXJ0aWVzCisgICAgaWYgKGVsZW1lbnQuaGFzTG9jYWxOYW1l
KEhUTUxOYW1lczo6Zm9ybSgpKSkgeworICAgICAgICBIVE1MRm9ybUVsZW1lbnRJbXBsICZmb3Jt
ID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICAgICAg
Ly8gQ2hlY2sgaWYgd2UncmUgcmV0cmlldmluZyBhbiBlbGVtZW50IChieSBpbmRleCBvciBieSBu
YW1lKQorICAgICAgICBib29sIG9rOworICAgICAgICB1aW50IHUgPSBwcm9wZXJ0eU5hbWUudG9V
TG9uZygmb2spOworICAgICAgICBpZiAob2spCisgICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9k
ZShleGVjLCBmb3JtLmVsZW1lbnRzKCktPml0ZW0odSkpOworICAgICAgICBWYWx1ZUltcCAqbmFt
ZWRJdGVtcyA9IEhUTUxDb2xsZWN0aW9uKGV4ZWMsIGZvcm0uZWxlbWVudHMoKS5nZXQoKSkuZ2V0
TmFtZWRJdGVtcyhleGVjLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICBpZiAoIW5hbWVkSXRlbXMt
PmlzVW5kZWZpbmVkKCkpCisgICAgICAgICAgICByZXR1cm4gbmFtZWRJdGVtczsKKyAgICB9Cisg
ICAgZWxzZSBpZiAoZWxlbWVudC5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpzZWxlY3QoKSkpIHsK
KyAgICAgICAgSFRNTFNlbGVjdEVsZW1lbnRJbXBsICZzZWxlY3QgPSBzdGF0aWNfY2FzdDxIVE1M
U2VsZWN0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgICAgIGJvb2wgb2s7CisgICAgICAg
IHVpbnQgdSA9IHByb3BlcnR5TmFtZS50b1VMb25nKCZvayk7CisgICAgICAgIGlmIChvaykKKyAg
ICAgICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsIHNlbGVjdC5vcHRpb25zSFRNTENvbGxl
Y3Rpb24oKS0+aXRlbSh1KSk7IC8vIG5vdCBzcGVjaWZpZWQgYnkgRE9NKD8pIGJ1dCBzdXBwb3J0
ZWQgaW4gbmV0c2NhcGUvSUUKICAgICB9Ci0gICAgICBicmVhazsKLSAgICBjYXNlIElEX0ZSQU1F
U0VUOiB7CisgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpmcmFt
ZXNldCgpKSkgewogICAgICAgICBOb2RlSW1wbCAqZnJhbWUgPSBlbGVtZW50LmNoaWxkcmVuKCkt
Pm5hbWVkSXRlbShwcm9wZXJ0eU5hbWUuc3RyaW5nKCkpOwotICAgICAgICBpZiAoZnJhbWUgJiYg
ZnJhbWUtPmlkKCkgPT0gSURfRlJBTUUpIHsKKyAgICAgICAgaWYgKGZyYW1lICYmIGZyYW1lLT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6ZnJhbWUoKSkpIHsKICAgICAgICAgICAgIERvY3VtZW50SW1w
bCogZG9jID0gc3RhdGljX2Nhc3Q8SFRNTEZyYW1lRWxlbWVudEltcGwgKj4oZnJhbWUpLT5jb250
ZW50RG9jdW1lbnQoKTsKICAgICAgICAgICAgIGlmIChkb2MpIHsKICAgICAgICAgICAgICAgICBL
SFRNTFBhcnQqIHBhcnQgPSBkb2MtPnBhcnQoKTsKQEAgLTEyMjcsNzMgKzEzMDgsNTcgQEAgVmFs
dWUgS0pTOjpIVE1MRWxlbWVudDo6dHJ5R2V0KEV4ZWNTdGF0ZQogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIElEX0ZSQU1FOgotICAgIGNh
c2UgSURfSUZSQU1FOiB7CisgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNMb2NhbE5hbWUoSFRNTE5h
bWVzOjpmcmFtZSgpKSB8fCBlbGVtZW50Lmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmlmcmFtZSgp
KSkgewogICAgICAgICBEb2N1bWVudEltcGwqIGRvYyA9IHN0YXRpY19jYXN0PEhUTUxGcmFtZUVs
ZW1lbnRJbXBsICY+KGVsZW1lbnQpLmNvbnRlbnREb2N1bWVudCgpOwotICAgICAgICBpZiAoIGRv
YyApIHsKKyAgICAgICAgaWYgKGRvYykgewogICAgICAgICAgICAgS0hUTUxQYXJ0KiBwYXJ0ID0g
ZG9jLT5wYXJ0KCk7Ci0gICAgICAgICAgICBpZiAoIHBhcnQgKSB7CisgICAgICAgICAgICBpZiAo
cGFydCkgewogICAgICAgICAgICAgICBXaW5kb3cgKndpbmRvdyA9IFdpbmRvdzo6cmV0cmlldmVX
aW5kb3cocGFydCk7CiAJICAgICAgaWYgKHdpbmRvdyAmJiB3aW5kb3ctPmhhc1Byb3BlcnR5KGV4
ZWMsIHByb3BlcnR5TmFtZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy0+Z2V0KGV4
ZWMsIHByb3BlcnR5TmFtZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAg
ICBicmVhazsKICNpZiBBUFBMRV9DSEFOR0VTCi0gICAgY2FzZSBJRF9FTUJFRDoKLSAgICBjYXNl
IElEX09CSkVDVDoKLSAgICBjYXNlIElEX0FQUExFVDogewotCWlmIChwcm9wZXJ0eU5hbWUgPT0g
Il9fYXBwbGVfcnVudGltZV9vYmplY3QiKSB7CisgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNMb2Nh
bE5hbWUoSFRNTE5hbWVzOjplbWJlZCgpKSB8fCBlbGVtZW50Lmhhc0xvY2FsTmFtZShIVE1MTmFt
ZXM6Om9iamVjdCgpKSB8fAorICAgICAgICAgICAgIGVsZW1lbnQuaGFzTG9jYWxOYW1lKEhUTUxO
YW1lczo6YXBwbGV0KCkpKSB7CisJaWYgKHByb3BlcnR5TmFtZSA9PSAiX19hcHBsZV9ydW50aW1l
X29iamVjdCIpCiAJICAgIHJldHVybiBnZXRSdW50aW1lT2JqZWN0KGV4ZWMsJmVsZW1lbnQpOwot
CX0KLQogCVZhbHVlIHJ1bnRpbWVPYmplY3QgPSBnZXRSdW50aW1lT2JqZWN0KGV4ZWMsJmVsZW1l
bnQpOwogCWlmICghcnVudGltZU9iamVjdC5pc051bGwoKSkgewogCSAgICBPYmplY3RJbXAgKmlt
cCA9IHN0YXRpY19jYXN0PE9iamVjdEltcCAqPihydW50aW1lT2JqZWN0LmltcCgpKTsKLQkgICAg
aWYgKGltcC0+aGFzUHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lKSkgeworCSAgICBpZiAoaW1w
LT5oYXNQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUpKQogCQlyZXR1cm4gaW1wLT5nZXQgKGV4
ZWMsIHByb3BlcnR5TmFtZSk7Ci0JICAgIH0KIAl9CiAgICAgfQotICAgICAgYnJlYWs7CiAjZW5k
aWYKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9CiAKLSAgY29uc3QgSGFzaFRh
YmxlKiB0YWJsZSA9IGNsYXNzSW5mbygpLT5wcm9wSGFzaFRhYmxlOyAvLyBnZXQgdGhlIHJpZ2h0
IGhhc2h0YWJsZQotICBjb25zdCBIYXNoRW50cnkqIGVudHJ5ID0gTG9va3VwOjpmaW5kRW50cnko
dGFibGUsIHByb3BlcnR5TmFtZSk7Ci0gIGlmIChlbnRyeSkgewotICAgIGlmIChlbnRyeS0+YXR0
ciAmIEZ1bmN0aW9uKQotICAgICAgcmV0dXJuIGxvb2t1cE9yQ3JlYXRlRnVuY3Rpb248S0pTOjpI
VE1MRWxlbWVudEZ1bmN0aW9uPihleGVjLCBwcm9wZXJ0eU5hbWUsIHRoaXMsIGVudHJ5LT52YWx1
ZSwgZW50cnktPnBhcmFtcywgZW50cnktPmF0dHIpOwotICAgIHJldHVybiBnZXRWYWx1ZVByb3Bl
cnR5KGV4ZWMsIGVudHJ5LT52YWx1ZSk7Ci0gIH0KKyAgICBjb25zdCBIYXNoVGFibGUqIHRhYmxl
ID0gY2xhc3NJbmZvKCktPnByb3BIYXNoVGFibGU7IC8vIGdldCB0aGUgcmlnaHQgaGFzaHRhYmxl
CisgICAgY29uc3QgSGFzaEVudHJ5KiBlbnRyeSA9IExvb2t1cDo6ZmluZEVudHJ5KHRhYmxlLCBw
cm9wZXJ0eU5hbWUpOworICAgIGlmIChlbnRyeSkgeworICAgICAgICBpZiAoZW50cnktPmF0dHIg
JiBGdW5jdGlvbikKKyAgICAgICAgICAgIHJldHVybiBsb29rdXBPckNyZWF0ZUZ1bmN0aW9uPEtK
Uzo6SFRNTEVsZW1lbnRGdW5jdGlvbj4oZXhlYywgcHJvcGVydHlOYW1lLCB0aGlzLCBlbnRyeS0+
dmFsdWUsIGVudHJ5LT5wYXJhbXMsIGVudHJ5LT5hdHRyKTsKKyAgICAgICAgcmV0dXJuIGdldFZh
bHVlUHJvcGVydHkoZXhlYywgZW50cnktPnZhbHVlKTsKKyAgICB9CiAKLSAgLy8gQmFzZSBIVE1M
RWxlbWVudCBzdHVmZiBvciBwYXJlbnQgY2xhc3MgZm9yd2FyZCwgYXMgdXN1YWwKLSAgcmV0dXJu
IERPTU9iamVjdExvb2t1cEdldDxLSlM6OkhUTUxFbGVtZW50RnVuY3Rpb24sIEtKUzo6SFRNTEVs
ZW1lbnQsIERPTUVsZW1lbnQ+KGV4ZWMsIHByb3BlcnR5TmFtZSwgJkhUTUxFbGVtZW50VGFibGUs
IHRoaXMpOworICAgIC8vIEJhc2UgSFRNTEVsZW1lbnQgc3R1ZmYgb3IgcGFyZW50IGNsYXNzIGZv
cndhcmQsIGFzIHVzdWFsCisgICAgcmV0dXJuIERPTU9iamVjdExvb2t1cEdldDxLSlM6OkhUTUxF
bGVtZW50RnVuY3Rpb24sIEtKUzo6SFRNTEVsZW1lbnQsIERPTUVsZW1lbnQ+KGV4ZWMsIHByb3Bl
cnR5TmFtZSwgJkhUTUxFbGVtZW50VGFibGUsIHRoaXMpOwogfQogCiBib29sIEtKUzo6SFRNTEVs
ZW1lbnQ6OmltcGxlbWVudHNDYWxsKCkgY29uc3QKIHsKICAgICBIVE1MRWxlbWVudEltcGwgKmVs
ZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwgKj4oaW1wbCgpKTsKLSAgICBzd2l0
Y2ggKGVsZW1lbnQtPmlkKCkpIHsKLQljYXNlIElEX0VNQkVEOgotCWNhc2UgSURfT0JKRUNUOgot
CWNhc2UgSURfQVBQTEVUOiB7Ci0JCURvY3VtZW50SW1wbCogZG9jID0gZWxlbWVudC0+Z2V0RG9j
dW1lbnQoKTsKLQkJS0pTUHJveHkgKnByb3h5ID0gS0pTUHJveHk6OnByb3h5KGRvYy0+cGFydCgp
KTsKLQkJRXhlY1N0YXRlICpleGVjID0gcHJveHktPmludGVycHJldGVyKCktPmdsb2JhbEV4ZWMo
KTsKLQkJVmFsdWUgcnVudGltZU9iamVjdCA9IGdldFJ1bnRpbWVPYmplY3QoZXhlYyxlbGVtZW50
KTsKLQkJaWYgKCFydW50aW1lT2JqZWN0LmlzTnVsbCgpKSB7Ci0JCSAgICBPYmplY3RJbXAgKmlt
cCA9IHN0YXRpY19jYXN0PE9iamVjdEltcCAqPihydW50aW1lT2JqZWN0LmltcCgpKTsKLQkJICAg
IHJldHVybiBpbXAtPmltcGxlbWVudHNDYWxsICgpOwotCQl9Ci0JICAgIH0KLQkgICAgYnJlYWs7
Ci0JZGVmYXVsdDoKLQkgICAgYnJlYWs7CisgICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjplbWJlZCgpKSB8fAorICAgICAgICBlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6b2JqZWN0KCkpIHx8CisgICAgICAgIGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjph
cHBsZXQoKSkpIHsKKyAgIAlEb2N1bWVudEltcGwqIGRvYyA9IGVsZW1lbnQtPmdldERvY3VtZW50
KCk7CisgICAgICAgIEtKU1Byb3h5ICpwcm94eSA9IEtKU1Byb3h5Ojpwcm94eShkb2MtPnBhcnQo
KSk7CisgICAgICAgIEV4ZWNTdGF0ZSAqZXhlYyA9IHByb3h5LT5pbnRlcnByZXRlcigpLT5nbG9i
YWxFeGVjKCk7CisgICAgICAgIFZhbHVlIHJ1bnRpbWVPYmplY3QgPSBnZXRSdW50aW1lT2JqZWN0
KGV4ZWMsZWxlbWVudCk7CisgICAgICAgIGlmICghcnVudGltZU9iamVjdC5pc051bGwoKSkgewor
ICAgICAgICAgICAgT2JqZWN0SW1wICppbXAgPSBzdGF0aWNfY2FzdDxPYmplY3RJbXAgKj4ocnVu
dGltZU9iamVjdC5pbXAoKSk7CisgICAgICAgICAgICByZXR1cm4gaW1wLT5pbXBsZW1lbnRzQ2Fs
bCAoKTsKKyAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CiB9CkBAIC0xMzAxLDc4
NiArMTM2Niw4NzcgQEAgYm9vbCBLSlM6OkhUTUxFbGVtZW50OjppbXBsZW1lbnRzQ2FsbCgpIAog
VmFsdWUgS0pTOjpIVE1MRWxlbWVudDo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhp
c09iaiwgY29uc3QgTGlzdCZhcmdzKQogewogICAgIEhUTUxFbGVtZW50SW1wbCAqZWxlbWVudCA9
IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCAqPihpbXBsKCkpOwotICAgIHN3aXRjaCAoZWxl
bWVudC0+aWQoKSkgewotCWNhc2UgSURfRU1CRUQ6Ci0JY2FzZSBJRF9PQkpFQ1Q6Ci0JY2FzZSBJ
RF9BUFBMRVQ6IHsKLQkJVmFsdWUgcnVudGltZU9iamVjdCA9IGdldFJ1bnRpbWVPYmplY3QoZXhl
YyxlbGVtZW50KTsKLQkJaWYgKCFydW50aW1lT2JqZWN0LmlzTnVsbCgpKSB7Ci0JCSAgICBPYmpl
Y3RJbXAgKmltcCA9IHN0YXRpY19jYXN0PE9iamVjdEltcCAqPihydW50aW1lT2JqZWN0LmltcCgp
KTsKLQkJICAgIHJldHVybiBpbXAtPmNhbGwgKGV4ZWMsIHRoaXNPYmosIGFyZ3MpOwotCQl9Ci0J
ICAgIH0KLQkgICAgYnJlYWs7Ci0JZGVmYXVsdDoKLQkgICAgYnJlYWs7CisgICAgaWYgKGVsZW1l
bnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjplbWJlZCgpKSB8fAorICAgICAgICBlbGVtZW50LT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6b2JqZWN0KCkpIHx8CisgICAgICAgIGVsZW1lbnQtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjphcHBsZXQoKSkpIHsKKyAgICAgICAgVmFsdWUgcnVudGltZU9iamVj
dCA9IGdldFJ1bnRpbWVPYmplY3QoZXhlYyxlbGVtZW50KTsKKyAgICAgICAgaWYgKCFydW50aW1l
T2JqZWN0LmlzTnVsbCgpKSB7CisgICAgICAgICAgICBPYmplY3RJbXAgKmltcCA9IHN0YXRpY19j
YXN0PE9iamVjdEltcCAqPihydW50aW1lT2JqZWN0LmltcCgpKTsKKyAgICAgICAgICAgIHJldHVy
biBpbXAtPmNhbGwgKGV4ZWMsIHRoaXNPYmosIGFyZ3MpOworICAgICAgICB9CiAgICAgfQogICAg
IHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotVmFsdWUgS0pTOjpIVE1MRWxlbWVudDo6Z2V0VmFs
dWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKLXsKLSAgSFRNTEVs
ZW1lbnRJbXBsICZlbGVtZW50ID0gKnN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCAqPihpbXBs
KCkpOwotICBzd2l0Y2ggKGVsZW1lbnQuaWQoKSkgewotICBjYXNlIElEX0hUTUw6IHsKLSAgICBI
VE1MSHRtbEVsZW1lbnRJbXBsICZodG1sID0gc3RhdGljX2Nhc3Q8SFRNTEh0bWxFbGVtZW50SW1w
bCAmPihlbGVtZW50KTsKLSAgICBpZiAgICAgICh0b2tlbiA9PSBIdG1sVmVyc2lvbikgICAgICAg
ICByZXR1cm4gU3RyaW5nKGh0bWwudmVyc2lvbigpKTsKLSAgfQotICBicmVhazsKLSAgY2FzZSBJ
RF9IRUFEOiB7Ci0gICAgSFRNTEhlYWRFbGVtZW50SW1wbCAmaGVhZCA9IHN0YXRpY19jYXN0PEhU
TUxIZWFkRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgaWYgICAgICAodG9rZW4gPT0gSGVh
ZFByb2ZpbGUpICAgICAgICAgcmV0dXJuIFN0cmluZyhoZWFkLnByb2ZpbGUoKSk7Ci0gIH0KLSAg
YnJlYWs7Ci0gIGNhc2UgSURfTElOSzogewotICAgIEhUTUxMaW5rRWxlbWVudEltcGwgJmxpbmsg
PSBzdGF0aWNfY2FzdDxIVE1MTGlua0VsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgIHN3aXRj
aCAodG9rZW4pIHsKLSAgICBjYXNlIExpbmtEaXNhYmxlZDogICAgICAgIHJldHVybiBCb29sZWFu
KGxpbmsuZGlzYWJsZWQoKSk7Ci0gICAgY2FzZSBMaW5rQ2hhcnNldDogICAgICAgICByZXR1cm4g
U3RyaW5nKGxpbmsuY2hhcnNldCgpKTsKLSAgICBjYXNlIExpbmtIcmVmOiAgICAgICAgICAgIHJl
dHVybiBTdHJpbmcobGluay5ocmVmKCkpOwotICAgIGNhc2UgTGlua0hyZWZMYW5nOiAgICAgICAg
cmV0dXJuIFN0cmluZyhsaW5rLmhyZWZsYW5nKCkpOwotICAgIGNhc2UgTGlua01lZGlhOiAgICAg
ICAgICAgcmV0dXJuIFN0cmluZyhsaW5rLm1lZGlhKCkpOwotICAgIGNhc2UgTGlua1JlbDogICAg
ICAgICAgICAgcmV0dXJuIFN0cmluZyhsaW5rLnJlbCgpKTsKLSAgICBjYXNlIExpbmtSZXY6ICAg
ICAgICAgICAgIHJldHVybiBTdHJpbmcobGluay5yZXYoKSk7Ci0gICAgY2FzZSBMaW5rVGFyZ2V0
OiAgICAgICAgICByZXR1cm4gU3RyaW5nKGxpbmsudGFyZ2V0KCkpOwotICAgIGNhc2UgTGlua1R5
cGU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhsaW5rLnR5cGUoKSk7Ci0gICAgY2FzZSBMaW5r
U2hlZXQ6ICAgICAgICAgICByZXR1cm4gZ2V0RE9NU3R5bGVTaGVldChleGVjLCBsaW5rLnNoZWV0
KCkpOwotICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9USVRMRTogewotICAgIEhUTUxU
aXRsZUVsZW1lbnRJbXBsICZ0aXRsZSA9IHN0YXRpY19jYXN0PEhUTUxUaXRsZUVsZW1lbnRJbXBs
ICY+KGVsZW1lbnQpOwotICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIFRpdGxlVGV4dDog
ICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcodGl0bGUudGV4dCgpKTsKLSAgICB9Ci0gIH0K
LSAgYnJlYWs7Ci0gIGNhc2UgSURfTUVUQTogewotICAgIEhUTUxNZXRhRWxlbWVudEltcGwgJm1l
dGEgPSBzdGF0aWNfY2FzdDxIVE1MTWV0YUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgIHN3
aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIE1ldGFDb250ZW50OiAgICAgICAgIHJldHVybiBTdHJp
bmcobWV0YS5jb250ZW50KCkpOwotICAgIGNhc2UgTWV0YUh0dHBFcXVpdjogICAgICAgcmV0dXJu
IFN0cmluZyhtZXRhLmh0dHBFcXVpdigpKTsKLSAgICBjYXNlIE1ldGFOYW1lOiAgICAgICAgICAg
IHJldHVybiBTdHJpbmcobWV0YS5uYW1lKCkpOwotICAgIGNhc2UgTWV0YVNjaGVtZTogICAgICAg
ICAgcmV0dXJuIFN0cmluZyhtZXRhLnNjaGVtZSgpKTsKLSAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0g
IGNhc2UgSURfQkFTRTogewotICAgIEhUTUxCYXNlRWxlbWVudEltcGwgJmJhc2UgPSBzdGF0aWNf
Y2FzdDxIVE1MQmFzZUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgIHN3aXRjaCAodG9rZW4p
IHsKLSAgICBjYXNlIEJhc2VIcmVmOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYmFzZS5ocmVm
KCkpOwotICAgIGNhc2UgQmFzZVRhcmdldDogICAgICAgICAgcmV0dXJuIFN0cmluZyhiYXNlLnRh
cmdldCgpKTsKLSAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfSVNJTkRFWDogewotICAg
IEhUTUxJc0luZGV4RWxlbWVudEltcGwgJmlzaW5kZXggPSBzdGF0aWNfY2FzdDxIVE1MSXNJbmRl
eEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNl
IElzSW5kZXhGb3JtOiAgICAgICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsIGlzaW5kZXgu
Zm9ybSgpKTsgLy8gdHlwZSBIVE1MRm9ybUVsZW1lbnQKLSAgICBjYXNlIElzSW5kZXhQcm9tcHQ6
ICAgICAgICAgIHJldHVybiBTdHJpbmcoaXNpbmRleC5wcm9tcHQoKSk7Ci0gICAgfQotICB9Ci0g
IGJyZWFrOwotICBjYXNlIElEX1NUWUxFOiB7Ci0gICAgSFRNTFN0eWxlRWxlbWVudEltcGwgJnN0
eWxlID0gc3RhdGljX2Nhc3Q8SFRNTFN0eWxlRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAg
c3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgU3R5bGVEaXNhYmxlZDogICAgICAgIHJldHVybiBC
b29sZWFuKHN0eWxlLmRpc2FibGVkKCkpOwotICAgIGNhc2UgU3R5bGVNZWRpYTogICAgICAgICAg
IHJldHVybiBTdHJpbmcoc3R5bGUubWVkaWEoKSk7Ci0gICAgY2FzZSBTdHlsZVR5cGU6ICAgICAg
ICAgICAgcmV0dXJuIFN0cmluZyhzdHlsZS50eXBlKCkpOwotICAgIGNhc2UgU3R5bGVTaGVldDog
ICAgICAgICAgIHJldHVybiBnZXRET01TdHlsZVNoZWV0KGV4ZWMsIHN0eWxlLnNoZWV0KCkpOwot
ICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9CT0RZOiB7Ci0gICAgSFRNTEJvZHlFbGVt
ZW50SW1wbCAmYm9keSA9IHN0YXRpY19jYXN0PEhUTUxCb2R5RWxlbWVudEltcGwgJj4oZWxlbWVu
dCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgQm9keUFMaW5rOiAgICAgICAgICAg
cmV0dXJuIFN0cmluZyhib2R5LmFMaW5rKCkpOwotICAgIGNhc2UgQm9keUJhY2tncm91bmQ6ICAg
ICAgcmV0dXJuIFN0cmluZyhib2R5LmJhY2tncm91bmQoKSk7Ci0gICAgY2FzZSBCb2R5QmdDb2xv
cjogICAgICAgICByZXR1cm4gU3RyaW5nKGJvZHkuYmdDb2xvcigpKTsKLSAgICBjYXNlIEJvZHlM
aW5rOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYm9keS5saW5rKCkpOwotICAgIGNhc2UgQm9k
eVRleHQ6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhib2R5LnRleHQoKSk7Ci0gICAgY2FzZSBC
b2R5Vkxpbms6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGJvZHkudkxpbmsoKSk7Ci0gICAgZGVm
YXVsdDoKLSAgICAgIC8vIFVwZGF0ZSB0aGUgZG9jdW1lbnQncyBsYXlvdXQgYmVmb3JlIHdlIGNv
bXB1dGUgdGhlc2UgYXR0cmlidXRlcy4KLSAgICAgIERvY3VtZW50SW1wbCAqZG9jID0gYm9keS5n
ZXREb2N1bWVudCgpOwotICAgICAgaWYgKGRvYykKLSAgICAgICAgZG9jLT51cGRhdGVMYXlvdXRJ
Z25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKLSAgICAgIEtIVE1MVmlldyAqdmlldyA9IGRvYyA/
IGRvYy0+dmlldygpIDogMDsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgICAgY2FzZSBC
b2R5U2Nyb2xsTGVmdDoKLSAgICAgICAgICAgIHJldHVybiBOdW1iZXIodmlldyA/IHZpZXctPmNv
bnRlbnRzWCgpIDogMCk7Ci0gICAgICAgIGNhc2UgQm9keVNjcm9sbFRvcDoKLSAgICAgICAgICAg
IHJldHVybiBOdW1iZXIodmlldyA/IHZpZXctPmNvbnRlbnRzWSgpIDogMCk7Ci0gICAgICAgIGNh
c2UgQm9keVNjcm9sbEhlaWdodDogICByZXR1cm4gTnVtYmVyKHZpZXcgPyB2aWV3LT5jb250ZW50
c0hlaWdodCgpIDogMCk7Ci0gICAgICAgIGNhc2UgQm9keVNjcm9sbFdpZHRoOiAgICByZXR1cm4g
TnVtYmVyKHZpZXcgPyB2aWV3LT5jb250ZW50c1dpZHRoKCkgOiAwKTsKLSAgICAgIH0KLSAgICB9
Ci0gIH0KLSAgYnJlYWs7CitWYWx1ZSBIVE1MRWxlbWVudDo6aHRtbEdldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MSHRtbEVsZW1lbnRJbXBsJiBodG1s
ID0gKnN0YXRpY19jYXN0PEhUTUxIdG1sRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIGlmICh0
b2tlbiA9PSBIdG1sVmVyc2lvbikKKyAgICAgICAgcmV0dXJuIFN0cmluZyhodG1sLnZlcnNpb24o
KSk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQogCi0gIGNhc2UgSURfRk9STTogewotICAg
IEhUTUxGb3JtRWxlbWVudEltcGwgJmZvcm0gPSBzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnRJ
bXBsICY+KGVsZW1lbnQpOwotICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIEZvcm1FbGVt
ZW50czogICAgICAgIHJldHVybiBnZXRIVE1MQ29sbGVjdGlvbihleGVjLCBmb3JtLmVsZW1lbnRz
KCkuZ2V0KCkpOwotICAgIGNhc2UgRm9ybUxlbmd0aDogICAgICAgICAgcmV0dXJuIE51bWJlcihm
b3JtLmxlbmd0aCgpKTsKLSAgICBjYXNlIEZvcm1OYW1lOiAgICAgICAgICAgIHJldHVybiBTdHJp
bmcoZm9ybS5uYW1lKCkpOwotICAgIGNhc2UgRm9ybUFjY2VwdENoYXJzZXQ6ICAgcmV0dXJuIFN0
cmluZyhmb3JtLmFjY2VwdENoYXJzZXQoKSk7Ci0gICAgY2FzZSBGb3JtQWN0aW9uOiAgICAgICAg
ICByZXR1cm4gU3RyaW5nKGZvcm0uYWN0aW9uKCkpOwotICAgIGNhc2UgRm9ybUVuY1R5cGU6ICAg
ICAgICAgcmV0dXJuIFN0cmluZyhmb3JtLmVuY3R5cGUoKSk7Ci0gICAgY2FzZSBGb3JtTWV0aG9k
OiAgICAgICAgICByZXR1cm4gU3RyaW5nKGZvcm0ubWV0aG9kKCkpOwotICAgIGNhc2UgRm9ybVRh
cmdldDogICAgICAgICAgcmV0dXJuIFN0cmluZyhmb3JtLnRhcmdldCgpKTsKLSAgICB9Ci0gIH0K
LSAgYnJlYWs7Ci0gIGNhc2UgSURfU0VMRUNUOiB7Ci0gICAgSFRNTFNlbGVjdEVsZW1lbnRJbXBs
ICZzZWxlY3QgPSBzdGF0aWNfY2FzdDxIVE1MU2VsZWN0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7
Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgU2VsZWN0VHlwZTogICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKHNlbGVjdC50eXBlKCkpOwotICAgIGNhc2UgU2VsZWN0U2VsZWN0ZWRJbmRl
eDogICByZXR1cm4gTnVtYmVyKHNlbGVjdC5zZWxlY3RlZEluZGV4KCkpOwotICAgIGNhc2UgU2Vs
ZWN0VmFsdWU6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHNlbGVjdC52YWx1ZSgpKTsKLSAgICBj
YXNlIFNlbGVjdExlbmd0aDogICAgICAgICAgcmV0dXJuIE51bWJlcihzZWxlY3QubGVuZ3RoKCkp
OwotICAgIGNhc2UgU2VsZWN0Rm9ybTogICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVj
LCBzZWxlY3QuZm9ybSgpKTsgLy8gdHlwZSBIVE1MRm9ybUVsZW1lbnQKLSAgICBjYXNlIFNlbGVj
dE9wdGlvbnM6ICAgICAgICAgcmV0dXJuIGdldFNlbGVjdEhUTUxDb2xsZWN0aW9uKGV4ZWMsIHNl
bGVjdC5vcHRpb25zSFRNTENvbGxlY3Rpb24oKS5nZXQoKSwgJnNlbGVjdCk7IC8vIHR5cGUgSFRN
TENvbGxlY3Rpb24KLSAgICBjYXNlIFNlbGVjdERpc2FibGVkOiAgICAgICAgcmV0dXJuIEJvb2xl
YW4oc2VsZWN0LmRpc2FibGVkKCkpOwotICAgIGNhc2UgU2VsZWN0TXVsdGlwbGU6ICAgICAgICBy
ZXR1cm4gQm9vbGVhbihzZWxlY3QubXVsdGlwbGUoKSk7Ci0gICAgY2FzZSBTZWxlY3ROYW1lOiAg
ICAgICAgICAgIHJldHVybiBTdHJpbmcoc2VsZWN0Lm5hbWUoKSk7Ci0gICAgY2FzZSBTZWxlY3RT
aXplOiAgICAgICAgICAgIHJldHVybiBOdW1iZXIoc2VsZWN0LnNpemUoKSk7Ci0gICAgY2FzZSBT
ZWxlY3RUYWJJbmRleDogICAgICAgIHJldHVybiBOdW1iZXIoc2VsZWN0LnRhYkluZGV4KCkpOwot
ICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9PUFRHUk9VUDogewotICAgIEhUTUxPcHRH
cm91cEVsZW1lbnRJbXBsICZvcHRncm91cCA9IHN0YXRpY19jYXN0PEhUTUxPcHRHcm91cEVsZW1l
bnRJbXBsICY+KGVsZW1lbnQpOwotICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIE9wdEdy
b3VwRGlzYWJsZWQ6ICAgICAgICByZXR1cm4gQm9vbGVhbihvcHRncm91cC5kaXNhYmxlZCgpKTsK
LSAgICBjYXNlIE9wdEdyb3VwTGFiZWw6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKG9wdGdyb3Vw
LmxhYmVsKCkpOwotICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9PUFRJT046IHsKLSAg
ICBIVE1MT3B0aW9uRWxlbWVudEltcGwgJm9wdGlvbiA9IHN0YXRpY19jYXN0PEhUTUxPcHRpb25F
bGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBP
cHRpb25Gb3JtOiAgICAgICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsb3B0aW9uLmZvcm0o
KSk7IC8vIHR5cGUgSFRNTEZvcm1FbGVtZW50Ci0gICAgY2FzZSBPcHRpb25EZWZhdWx0U2VsZWN0
ZWQ6IHJldHVybiBCb29sZWFuKG9wdGlvbi5kZWZhdWx0U2VsZWN0ZWQoKSk7Ci0gICAgY2FzZSBP
cHRpb25UZXh0OiAgICAgICAgICAgIHJldHVybiBTdHJpbmcob3B0aW9uLnRleHQoKSk7Ci0gICAg
Y2FzZSBPcHRpb25JbmRleDogICAgICAgICAgIHJldHVybiBOdW1iZXIob3B0aW9uLmluZGV4KCkp
OwotICAgIGNhc2UgT3B0aW9uRGlzYWJsZWQ6ICAgICAgICByZXR1cm4gQm9vbGVhbihvcHRpb24u
ZGlzYWJsZWQoKSk7Ci0gICAgY2FzZSBPcHRpb25MYWJlbDogICAgICAgICAgIHJldHVybiBTdHJp
bmcob3B0aW9uLmxhYmVsKCkpOwotICAgIGNhc2UgT3B0aW9uU2VsZWN0ZWQ6ICAgICAgICByZXR1
cm4gQm9vbGVhbihvcHRpb24uc2VsZWN0ZWQoKSk7Ci0gICAgY2FzZSBPcHRpb25WYWx1ZTogICAg
ICAgICAgIHJldHVybiBTdHJpbmcob3B0aW9uLnZhbHVlKCkpOwotICAgIH0KLSAgfQotICBicmVh
azsKLSAgY2FzZSBJRF9JTlBVVDogewotICAgIEhUTUxJbnB1dEVsZW1lbnRJbXBsICZpbnB1dCA9
IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgIHN3aXRj
aCAodG9rZW4pIHsKLSAgICBjYXNlIElucHV0RGVmYXVsdFZhbHVlOiAgICByZXR1cm4gU3RyaW5n
KGlucHV0LmRlZmF1bHRWYWx1ZSgpKTsKLSAgICBjYXNlIElucHV0RGVmYXVsdENoZWNrZWQ6ICBy
ZXR1cm4gQm9vbGVhbihpbnB1dC5kZWZhdWx0Q2hlY2tlZCgpKTsKLSAgICBjYXNlIElucHV0Rm9y
bTogICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLGlucHV0LmZvcm0oKSk7IC8vIHR5
cGUgSFRNTEZvcm1FbGVtZW50Ci0gICAgY2FzZSBJbnB1dEFjY2VwdDogICAgICAgICAgcmV0dXJu
IFN0cmluZyhpbnB1dC5hY2NlcHQoKSk7Ci0gICAgY2FzZSBJbnB1dEFjY2Vzc0tleTogICAgICAg
cmV0dXJuIFN0cmluZyhpbnB1dC5hY2Nlc3NLZXkoKSk7Ci0gICAgY2FzZSBJbnB1dEFsaWduOiAg
ICAgICAgICAgcmV0dXJuIFN0cmluZyhpbnB1dC5hbGlnbigpKTsKLSAgICBjYXNlIElucHV0QWx0
OiAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGlucHV0LmFsdCgpKTsKLSAgICBjYXNlIElucHV0
Q2hlY2tlZDogICAgICAgICByZXR1cm4gQm9vbGVhbihpbnB1dC5jaGVja2VkKCkpOwotICAgIGNh
c2UgSW5wdXREaXNhYmxlZDogICAgICAgIHJldHVybiBCb29sZWFuKGlucHV0LmRpc2FibGVkKCkp
OwotICAgIGNhc2UgSW5wdXRNYXhMZW5ndGg6ICAgICAgIHJldHVybiBOdW1iZXIoaW5wdXQubWF4
TGVuZ3RoKCkpOwotICAgIGNhc2UgSW5wdXROYW1lOiAgICAgICAgICAgIHJldHVybiBTdHJpbmco
aW5wdXQubmFtZSgpKTsKLSAgICBjYXNlIElucHV0UmVhZE9ubHk6ICAgICAgICByZXR1cm4gQm9v
bGVhbihpbnB1dC5yZWFkT25seSgpKTsKLSAgICBjYXNlIElucHV0U2l6ZTogICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKGlucHV0LnNpemVET00oKSk7Ci0gICAgY2FzZSBJbnB1dFNyYzogICAgICAg
ICAgICAgcmV0dXJuIFN0cmluZyhpbnB1dC5zcmMoKSk7Ci0gICAgY2FzZSBJbnB1dFRhYkluZGV4
OiAgICAgICAgcmV0dXJuIE51bWJlcihpbnB1dC50YWJJbmRleCgpKTsKLSAgICBjYXNlIElucHV0
VHlwZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGlucHV0LnR5cGUoKSk7Ci0gICAgY2FzZSBJ
bnB1dFVzZU1hcDogICAgICAgICAgcmV0dXJuIFN0cmluZyhpbnB1dC51c2VNYXAoKSk7Ci0gICAg
Y2FzZSBJbnB1dFZhbHVlOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpbnB1dC52YWx1ZSgpKTsK
LSAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfVEVYVEFSRUE6IHsKLSAgICBIVE1MVGV4
dEFyZWFFbGVtZW50SW1wbCAmdGV4dGFyZWEgPSBzdGF0aWNfY2FzdDxIVE1MVGV4dEFyZWFFbGVt
ZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBUZXh0
QXJlYURlZmF1bHRWYWx1ZTogICAgcmV0dXJuIFN0cmluZyh0ZXh0YXJlYS5kZWZhdWx0VmFsdWUo
KSk7Ci0gICAgY2FzZSBUZXh0QXJlYUZvcm06ICAgICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUo
ZXhlYyx0ZXh0YXJlYS5mb3JtKCkpOyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVudAotICAgIGNhc2Ug
VGV4dEFyZWFBY2Nlc3NLZXk6ICAgICAgIHJldHVybiBTdHJpbmcodGV4dGFyZWEuYWNjZXNzS2V5
KCkpOwotICAgIGNhc2UgVGV4dEFyZWFDb2xzOiAgICAgICAgICAgIHJldHVybiBOdW1iZXIodGV4
dGFyZWEuY29scygpKTsKLSAgICBjYXNlIFRleHRBcmVhRGlzYWJsZWQ6ICAgICAgICByZXR1cm4g
Qm9vbGVhbih0ZXh0YXJlYS5kaXNhYmxlZCgpKTsKLSAgICBjYXNlIFRleHRBcmVhTmFtZTogICAg
ICAgICAgICByZXR1cm4gU3RyaW5nKHRleHRhcmVhLm5hbWUoKSk7Ci0gICAgY2FzZSBUZXh0QXJl
YVJlYWRPbmx5OiAgICAgICAgcmV0dXJuIEJvb2xlYW4odGV4dGFyZWEucmVhZE9ubHkoKSk7Ci0g
ICAgY2FzZSBUZXh0QXJlYVJvd3M6ICAgICAgICAgICAgcmV0dXJuIE51bWJlcih0ZXh0YXJlYS5y
b3dzKCkpOwotICAgIGNhc2UgVGV4dEFyZWFUYWJJbmRleDogICAgICAgIHJldHVybiBOdW1iZXIo
dGV4dGFyZWEudGFiSW5kZXgoKSk7Ci0gICAgY2FzZSBUZXh0QXJlYVR5cGU6ICAgICAgICAgICAg
cmV0dXJuIFN0cmluZyh0ZXh0YXJlYS50eXBlKCkpOwotICAgIGNhc2UgVGV4dEFyZWFWYWx1ZTog
ICAgICAgICAgIHJldHVybiBTdHJpbmcodGV4dGFyZWEudmFsdWUoKSk7Ci0gICAgfQotICB9Ci0g
IGJyZWFrOwotICBjYXNlIElEX0JVVFRPTjogewotICAgIEhUTUxCdXR0b25FbGVtZW50SW1wbCAm
YnV0dG9uID0gc3RhdGljX2Nhc3Q8SFRNTEJ1dHRvbkVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwot
ICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIEJ1dHRvbkZvcm06ICAgICAgICAgICAgcmV0
dXJuIGdldERPTU5vZGUoZXhlYyxidXR0b24uZm9ybSgpKTsgLy8gdHlwZSBIVE1MRm9ybUVsZW1l
bnQKLSAgICBjYXNlIEJ1dHRvbkFjY2Vzc0tleTogICAgICAgcmV0dXJuIFN0cmluZyhidXR0b24u
YWNjZXNzS2V5KCkpOwotICAgIGNhc2UgQnV0dG9uRGlzYWJsZWQ6ICAgICAgICByZXR1cm4gQm9v
bGVhbihidXR0b24uZGlzYWJsZWQoKSk7Ci0gICAgY2FzZSBCdXR0b25OYW1lOiAgICAgICAgICAg
IHJldHVybiBTdHJpbmcoYnV0dG9uLm5hbWUoKSk7Ci0gICAgY2FzZSBCdXR0b25UYWJJbmRleDog
ICAgICAgIHJldHVybiBOdW1iZXIoYnV0dG9uLnRhYkluZGV4KCkpOwotICAgIGNhc2UgQnV0dG9u
VHlwZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGJ1dHRvbi50eXBlKCkpOwotICAgIGNhc2Ug
QnV0dG9uVmFsdWU6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGJ1dHRvbi52YWx1ZSgpKTsKLSAg
ICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfTEFCRUw6IHsKLSAgICBIVE1MTGFiZWxFbGVt
ZW50SW1wbCAmbGFiZWwgPSBzdGF0aWNfY2FzdDxIVE1MTGFiZWxFbGVtZW50SW1wbCAmPihlbGVt
ZW50KTsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBMYWJlbEZvcm06ICAgICAgICAg
ICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyxsYWJlbC5mb3JtKCkpOyAvLyB0eXBlIEhUTUxGb3Jt
RWxlbWVudAotICAgIGNhc2UgTGFiZWxBY2Nlc3NLZXk6ICAgICAgIHJldHVybiBTdHJpbmcobGFi
ZWwuYWNjZXNzS2V5KCkpOwotICAgIGNhc2UgTGFiZWxIdG1sRm9yOiAgICAgICAgIHJldHVybiBT
dHJpbmcobGFiZWwuaHRtbEZvcigpKTsKLSAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURf
RklFTERTRVQ6IHsKLSAgICBIVE1MRmllbGRTZXRFbGVtZW50SW1wbCAmZmllbGRTZXQgPSBzdGF0
aWNfY2FzdDxIVE1MRmllbGRTZXRFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKK1ZhbHVlIEhUTUxF
bGVtZW50OjpoZWFkR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAorewor
ICAgIEhUTUxIZWFkRWxlbWVudEltcGwgJmhlYWQgPSAqc3RhdGljX2Nhc3Q8SFRNTEhlYWRFbGVt
ZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IEhlYWRQcm9maWxlKQorICAgICAg
ICByZXR1cm4gU3RyaW5nKGhlYWQucHJvZmlsZSgpKTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7
Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50OjpsaW5rR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50
IHRva2VuKSBjb25zdAoreworICAgIEhUTUxMaW5rRWxlbWVudEltcGwgJmxpbmsgPSAqc3RhdGlj
X2Nhc3Q8SFRNTExpbmtFbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tlbikg
ewotICAgIGNhc2UgRmllbGRTZXRGb3JtOiAgICAgICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4
ZWMsZmllbGRTZXQuZm9ybSgpKTsgLy8gdHlwZSBIVE1MRm9ybUVsZW1lbnQKLSAgICB9Ci0gIH0K
LSAgYnJlYWs7Ci0gIGNhc2UgSURfTEVHRU5EOiB7Ci0gICAgSFRNTExlZ2VuZEVsZW1lbnRJbXBs
ICZsZWdlbmQgPSBzdGF0aWNfY2FzdDxIVE1MTGVnZW5kRWxlbWVudEltcGwgJj4oZWxlbWVudCk7
Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgTGVnZW5kRm9ybTogICAgICAgICAgICBy
ZXR1cm4gZ2V0RE9NTm9kZShleGVjLGxlZ2VuZC5mb3JtKCkpOyAvLyB0eXBlIEhUTUxGb3JtRWxl
bWVudAotICAgIGNhc2UgTGVnZW5kQWNjZXNzS2V5OiAgICAgICByZXR1cm4gU3RyaW5nKGxlZ2Vu
ZC5hY2Nlc3NLZXkoKSk7Ci0gICAgY2FzZSBMZWdlbmRBbGlnbjogICAgICAgICAgIHJldHVybiBT
dHJpbmcobGVnZW5kLmFsaWduKCkpOworICAgICAgICBjYXNlIExpbmtEaXNhYmxlZDoKKyAgICAg
ICAgICAgIHJldHVybiBCb29sZWFuKGxpbmsuZGlzYWJsZWQoKSk7CisgICAgICAgIGNhc2UgTGlu
a0NoYXJzZXQ6CisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGxpbmsuY2hhcnNldCgpKTsKKyAg
ICAgICAgY2FzZSBMaW5rSHJlZjoKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcobGluay5ocmVm
KCkpOworICAgICAgICBjYXNlIExpbmtIcmVmTGFuZzoKKyAgICAgICAgICAgIHJldHVybiBTdHJp
bmcobGluay5ocmVmbGFuZygpKTsKKyAgICAgICAgY2FzZSBMaW5rTWVkaWE6ICAgICAgICAgICAK
KyAgICAgICAgICAgIHJldHVybiBTdHJpbmcobGluay5tZWRpYSgpKTsKKyAgICAgICAgY2FzZSBM
aW5rUmVsOiAgICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcobGluay5yZWwo
KSk7CisgICAgICAgIGNhc2UgTGlua1JldjogICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVy
biBTdHJpbmcobGluay5yZXYoKSk7CisgICAgICAgIGNhc2UgTGlua1RhcmdldDogICAgICAgICAg
CisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGxpbmsudGFyZ2V0KCkpOworICAgICAgICBjYXNl
IExpbmtUeXBlOiAgICAgICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhsaW5rLnR5
cGUoKSk7CisgICAgICAgIGNhc2UgTGlua1NoZWV0OiAgICAgICAgICAgCisgICAgICAgICAgICBy
ZXR1cm4gZ2V0RE9NU3R5bGVTaGVldChleGVjLCBsaW5rLnNoZWV0KCkpOwogICAgIH0KLSAgfQot
ICBicmVhazsKLSAgY2FzZSBJRF9VTDogewotICAgIEhUTUxVTGlzdEVsZW1lbnRJbXBsICZ1TGlz
dCA9IHN0YXRpY19jYXN0PEhUTUxVTGlzdEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgIHJl
dHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OnRpdGxlR2V0dGVyKEV4
ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxUaXRsZUVsZW1lbnRJ
bXBsJiB0aXRsZSA9ICpzdGF0aWNfY2FzdDxIVE1MVGl0bGVFbGVtZW50SW1wbCo+KGltcGwoKSk7
CisgICAgaWYgKHRva2VuID09IFRpdGxlVGV4dCkKKyAgICAgICAgcmV0dXJuIFN0cmluZyh0aXRs
ZS50ZXh0KCkpOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1l
bnQ6Om1ldGFHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAg
SFRNTE1ldGFFbGVtZW50SW1wbCYgbWV0YSA9ICpzdGF0aWNfY2FzdDxIVE1MTWV0YUVsZW1lbnRJ
bXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBVTGlzdENvbXBh
Y3Q6ICAgICAgICAgcmV0dXJuIEJvb2xlYW4odUxpc3QuY29tcGFjdCgpKTsKLSAgICBjYXNlIFVM
aXN0VHlwZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKHVMaXN0LnR5cGUoKSk7Ci0gICAgfQot
ICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX09MOiB7Ci0gICAgSFRNTE9MaXN0RWxlbWVudEltcGwg
Jm9MaXN0ID0gc3RhdGljX2Nhc3Q8SFRNTE9MaXN0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0g
ICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgT0xpc3RDb21wYWN0OiAgICAgICAgIHJldHVy
biBCb29sZWFuKG9MaXN0LmNvbXBhY3QoKSk7Ci0gICAgY2FzZSBPTGlzdFN0YXJ0OiAgICAgICAg
ICAgcmV0dXJuIE51bWJlcihvTGlzdC5zdGFydCgpKTsKLSAgICBjYXNlIE9MaXN0VHlwZTogICAg
ICAgICAgICByZXR1cm4gU3RyaW5nKG9MaXN0LnR5cGUoKSk7CisgICAgICAgIGNhc2UgTWV0YUNv
bnRlbnQ6ICAgICAgICAgcmV0dXJuIFN0cmluZyhtZXRhLmNvbnRlbnQoKSk7CisgICAgICAgIGNh
c2UgTWV0YUh0dHBFcXVpdjogICAgICAgcmV0dXJuIFN0cmluZyhtZXRhLmh0dHBFcXVpdigpKTsK
KyAgICAgICAgY2FzZSBNZXRhTmFtZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKG1ldGEubmFt
ZSgpKTsKKyAgICAgICAgY2FzZSBNZXRhU2NoZW1lOiAgICAgICAgICByZXR1cm4gU3RyaW5nKG1l
dGEuc2NoZW1lKCkpOwogICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9ETDogewotICAg
IEhUTUxETGlzdEVsZW1lbnRJbXBsICZkTGlzdCA9IHN0YXRpY19jYXN0PEhUTUxETGlzdEVsZW1l
bnRJbXBsICY+KGVsZW1lbnQpOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUg
SFRNTEVsZW1lbnQ6OmJhc2VHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0
Cit7CisgICAgSFRNTEJhc2VFbGVtZW50SW1wbCYgYmFzZSA9ICpzdGF0aWNfY2FzdDxIVE1MQmFz
ZUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBE
TGlzdENvbXBhY3Q6ICAgICAgICAgcmV0dXJuIEJvb2xlYW4oZExpc3QuY29tcGFjdCgpKTsKKyAg
ICAgICAgY2FzZSBCYXNlSHJlZjogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGJhc2UuaHJlZigp
KTsKKyAgICAgICAgY2FzZSBCYXNlVGFyZ2V0OiAgICAgICAgICByZXR1cm4gU3RyaW5nKGJhc2Uu
dGFyZ2V0KCkpOwogICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9ESVI6IHsKLSAgICBI
VE1MRGlyZWN0b3J5RWxlbWVudEltcGwgJmRpcmVjdG9yeSA9IHN0YXRpY19jYXN0PEhUTUxEaXJl
Y3RvcnlFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9
CisKK1ZhbHVlIEhUTUxFbGVtZW50Ojppc0luZGV4R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50
IHRva2VuKSBjb25zdAoreworICAgIEhUTUxJc0luZGV4RWxlbWVudEltcGwmIGlzaW5kZXggPSAq
c3RhdGljX2Nhc3Q8SFRNTElzSW5kZXhFbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNo
ICh0b2tlbikgewotICAgIGNhc2UgRGlyZWN0b3J5Q29tcGFjdDogICAgICAgICByZXR1cm4gQm9v
bGVhbihkaXJlY3RvcnkuY29tcGFjdCgpKTsKKyAgICAgICAgY2FzZSBJc0luZGV4Rm9ybTogICAg
ICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLCBpc2luZGV4LmZvcm0oKSk7IC8vIHR5cGUg
SFRNTEZvcm1FbGVtZW50CisgICAgICAgIGNhc2UgSXNJbmRleFByb21wdDogICAgICAgICAgcmV0
dXJuIFN0cmluZyhpc2luZGV4LnByb21wdCgpKTsKICAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNh
c2UgSURfTUVOVTogewotICAgIEhUTUxNZW51RWxlbWVudEltcGwgJm1lbnUgPSBzdGF0aWNfY2Fz
dDxIVE1MTWVudUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgIHJldHVybiBVbmRlZmluZWQo
KTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OnN0eWxlR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywg
aW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxTdHlsZUVsZW1lbnRJbXBsJiBzdHlsZSA9ICpz
dGF0aWNfY2FzdDxIVE1MU3R5bGVFbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0
b2tlbikgewotICAgIGNhc2UgTWVudUNvbXBhY3Q6ICAgICAgICAgcmV0dXJuIEJvb2xlYW4obWVu
dS5jb21wYWN0KCkpOworICAgICAgICBjYXNlIFN0eWxlRGlzYWJsZWQ6ICAgICAgICByZXR1cm4g
Qm9vbGVhbihzdHlsZS5kaXNhYmxlZCgpKTsKKyAgICAgICAgY2FzZSBTdHlsZU1lZGlhOiAgICAg
ICAgICAgcmV0dXJuIFN0cmluZyhzdHlsZS5tZWRpYSgpKTsKKyAgICAgICAgY2FzZSBTdHlsZVR5
cGU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhzdHlsZS50eXBlKCkpOworICAgICAgICBjYXNl
IFN0eWxlU2hlZXQ6ICAgICAgICAgICByZXR1cm4gZ2V0RE9NU3R5bGVTaGVldChleGVjLCBzdHls
ZS5zaGVldCgpKTsKICAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfTEk6IHsKLSAgICBI
VE1MTElFbGVtZW50SW1wbCAmbGkgPSBzdGF0aWNfY2FzdDxIVE1MTElFbGVtZW50SW1wbCAmPihl
bGVtZW50KTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50
Ojpib2R5R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAgIEhU
TUxCb2R5RWxlbWVudEltcGwmIGJvZHkgPSAqc3RhdGljX2Nhc3Q8SFRNTEJvZHlFbGVtZW50SW1w
bCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgTElUeXBlOiAgICAg
ICAgICAgIHJldHVybiBTdHJpbmcobGkudHlwZSgpKTsKLSAgICBjYXNlIExJVmFsdWU6ICAgICAg
ICAgICByZXR1cm4gTnVtYmVyKGxpLnZhbHVlKCkpOworICAgICAgICBjYXNlIEJvZHlBTGluazog
ICAgICAgICAgIHJldHVybiBTdHJpbmcoYm9keS5hTGluaygpKTsKKyAgICAgICAgY2FzZSBCb2R5
QmFja2dyb3VuZDogICAgICByZXR1cm4gU3RyaW5nKGJvZHkuYmFja2dyb3VuZCgpKTsKKyAgICAg
ICAgY2FzZSBCb2R5QmdDb2xvcjogICAgICAgICByZXR1cm4gU3RyaW5nKGJvZHkuYmdDb2xvcigp
KTsKKyAgICAgICAgY2FzZSBCb2R5TGluazogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGJvZHku
bGluaygpKTsKKyAgICAgICAgY2FzZSBCb2R5VGV4dDogICAgICAgICAgICByZXR1cm4gU3RyaW5n
KGJvZHkudGV4dCgpKTsKKyAgICAgICAgY2FzZSBCb2R5Vkxpbms6ICAgICAgICAgICByZXR1cm4g
U3RyaW5nKGJvZHkudkxpbmsoKSk7CisgICAgICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgICAgIC8v
IFVwZGF0ZSB0aGUgZG9jdW1lbnQncyBsYXlvdXQgYmVmb3JlIHdlIGNvbXB1dGUgdGhlc2UgYXR0
cmlidXRlcy4KKyAgICAgICAgICAgIERvY3VtZW50SW1wbCAqZG9jID0gYm9keS5nZXREb2N1bWVu
dCgpOworICAgICAgICAgICAgaWYgKGRvYykKKyAgICAgICAgICAgICAgICBkb2MtPnVwZGF0ZUxh
eW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOworICAgICAgICAgICAgS0hUTUxWaWV3ICp2
aWV3ID0gZG9jID8gZG9jLT52aWV3KCkgOiAwOworICAgICAgICAgICAgc3dpdGNoICh0b2tlbikg
eworICAgICAgICAgICAgICAgIGNhc2UgQm9keVNjcm9sbExlZnQ6CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBOdW1iZXIodmlldyA/IHZpZXctPmNvbnRlbnRzWCgpIDogMCk7CisgICAgICAg
ICAgICAgICAgY2FzZSBCb2R5U2Nyb2xsVG9wOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
TnVtYmVyKHZpZXcgPyB2aWV3LT5jb250ZW50c1koKSA6IDApOworICAgICAgICAgICAgICAgIGNh
c2UgQm9keVNjcm9sbEhlaWdodDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE51bWJlcih2
aWV3ID8gdmlldy0+Y29udGVudHNIZWlnaHQoKSA6IDApOworICAgICAgICAgICAgICAgIGNhc2Ug
Qm9keVNjcm9sbFdpZHRoOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTnVtYmVyKHZpZXcg
PyB2aWV3LT5jb250ZW50c1dpZHRoKCkgOiAwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQog
ICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9ESVY6IHsKLSAgICBIVE1MRGl2RWxlbWVu
dEltcGwgJmRpdiA9IHN0YXRpY19jYXN0PEhUTUxEaXZFbGVtZW50SW1wbCAmPihlbGVtZW50KTsK
KyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50Ojpmb3JtR2V0
dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxGb3JtRWxl
bWVudEltcGwmIGZvcm0gPSAqc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50SW1wbCo+KGltcGwo
KSk7CiAgICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgRGl2QWxpZ246ICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKGRpdi5hbGlnbigpKTsKKyAgICAgICAgY2FzZSBGb3JtRWxlbWVudHM6ICAg
ICAgICByZXR1cm4gZ2V0SFRNTENvbGxlY3Rpb24oZXhlYywgZm9ybS5lbGVtZW50cygpLmdldCgp
KTsKKyAgICAgICAgY2FzZSBGb3JtTGVuZ3RoOiAgICAgICAgICByZXR1cm4gTnVtYmVyKGZvcm0u
bGVuZ3RoKCkpOworICAgICAgICBjYXNlIEZvcm1OYW1lOiAgICAgICAgICAgIHJldHVybiBTdHJp
bmcoZm9ybS5uYW1lKCkpOworICAgICAgICBjYXNlIEZvcm1BY2NlcHRDaGFyc2V0OiAgIHJldHVy
biBTdHJpbmcoZm9ybS5hY2NlcHRDaGFyc2V0KCkpOworICAgICAgICBjYXNlIEZvcm1BY3Rpb246
ICAgICAgICAgIHJldHVybiBTdHJpbmcoZm9ybS5hY3Rpb24oKSk7CisgICAgICAgIGNhc2UgRm9y
bUVuY1R5cGU6ICAgICAgICAgcmV0dXJuIFN0cmluZyhmb3JtLmVuY3R5cGUoKSk7CisgICAgICAg
IGNhc2UgRm9ybU1ldGhvZDogICAgICAgICAgcmV0dXJuIFN0cmluZyhmb3JtLm1ldGhvZCgpKTsK
KyAgICAgICAgY2FzZSBGb3JtVGFyZ2V0OiAgICAgICAgICByZXR1cm4gU3RyaW5nKGZvcm0udGFy
Z2V0KCkpOwogICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9QOiB7Ci0gICAgSFRNTFBh
cmFncmFwaEVsZW1lbnRJbXBsICZwYXJhZ3JhcGggPSBzdGF0aWNfY2FzdDxIVE1MUGFyYWdyYXBo
RWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitW
YWx1ZSBIVE1MRWxlbWVudDo6c2VsZWN0R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2Vu
KSBjb25zdAoreworICAgIEhUTUxTZWxlY3RFbGVtZW50SW1wbCYgc2VsZWN0ID0gKnN0YXRpY19j
YXN0PEhUTUxTZWxlY3RFbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tlbikg
ewotICAgIGNhc2UgUGFyYWdyYXBoQWxpZ246ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHBhcmFn
cmFwaC5hbGlnbigpKTsKKyAgICAgICAgY2FzZSBTZWxlY3RUeXBlOiAgICAgICAgICAgIHJldHVy
biBTdHJpbmcoc2VsZWN0LnR5cGUoKSk7CisgICAgICAgIGNhc2UgU2VsZWN0U2VsZWN0ZWRJbmRl
eDogICByZXR1cm4gTnVtYmVyKHNlbGVjdC5zZWxlY3RlZEluZGV4KCkpOworICAgICAgICBjYXNl
IFNlbGVjdFZhbHVlOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhzZWxlY3QudmFsdWUoKSk7Cisg
ICAgICAgIGNhc2UgU2VsZWN0TGVuZ3RoOiAgICAgICAgICByZXR1cm4gTnVtYmVyKHNlbGVjdC5s
ZW5ndGgoKSk7CisgICAgICAgIGNhc2UgU2VsZWN0Rm9ybTogICAgICAgICAgICByZXR1cm4gZ2V0
RE9NTm9kZShleGVjLCBzZWxlY3QuZm9ybSgpKTsgLy8gdHlwZSBIVE1MRm9ybUVsZW1lbnQKKyAg
ICAgICAgY2FzZSBTZWxlY3RPcHRpb25zOiAgICAgICAgIHJldHVybiBnZXRTZWxlY3RIVE1MQ29s
bGVjdGlvbihleGVjLCBzZWxlY3Qub3B0aW9uc0hUTUxDb2xsZWN0aW9uKCkuZ2V0KCksICZzZWxl
Y3QpOyAvLyB0eXBlIEhUTUxDb2xsZWN0aW9uCisgICAgICAgIGNhc2UgU2VsZWN0RGlzYWJsZWQ6
ICAgICAgICByZXR1cm4gQm9vbGVhbihzZWxlY3QuZGlzYWJsZWQoKSk7CisgICAgICAgIGNhc2Ug
U2VsZWN0TXVsdGlwbGU6ICAgICAgICByZXR1cm4gQm9vbGVhbihzZWxlY3QubXVsdGlwbGUoKSk7
CisgICAgICAgIGNhc2UgU2VsZWN0TmFtZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKHNlbGVj
dC5uYW1lKCkpOworICAgICAgICBjYXNlIFNlbGVjdFNpemU6ICAgICAgICAgICAgcmV0dXJuIE51
bWJlcihzZWxlY3Quc2l6ZSgpKTsKKyAgICAgICAgY2FzZSBTZWxlY3RUYWJJbmRleDogICAgICAg
IHJldHVybiBOdW1iZXIoc2VsZWN0LnRhYkluZGV4KCkpOwogICAgIH0KLSAgfQotICBicmVhazsK
LSAgY2FzZSBJRF9IMToKLSAgY2FzZSBJRF9IMjoKLSAgY2FzZSBJRF9IMzoKLSAgY2FzZSBJRF9I
NDoKLSAgY2FzZSBJRF9INToKLSAgY2FzZSBJRF9INjogewotICAgIEhUTUxIZWFkaW5nRWxlbWVu
dEltcGwgJmhlYWRpbmcgPSBzdGF0aWNfY2FzdDxIVE1MSGVhZGluZ0VsZW1lbnRJbXBsICY+KGVs
ZW1lbnQpOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6
Om9wdEdyb3VwR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAg
IEhUTUxPcHRHcm91cEVsZW1lbnRJbXBsJiBvcHRncm91cCA9ICpzdGF0aWNfY2FzdDxIVE1MT3B0
R3JvdXBFbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tlbikgewotICAgIGNh
c2UgSGVhZGluZ0FsaWduOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhoZWFkaW5nLmFsaWduKCkp
OworICAgICAgICBjYXNlIE9wdEdyb3VwRGlzYWJsZWQ6ICAgICAgICByZXR1cm4gQm9vbGVhbihv
cHRncm91cC5kaXNhYmxlZCgpKTsKKyAgICAgICAgY2FzZSBPcHRHcm91cExhYmVsOiAgICAgICAg
ICAgcmV0dXJuIFN0cmluZyhvcHRncm91cC5sYWJlbCgpKTsKICAgICB9Ci0gIH0KLSAgYnJlYWs7
Ci0gIGNhc2UgSURfQkxPQ0tRVU9URTogewotICAgIEhUTUxCbG9ja3F1b3RlRWxlbWVudEltcGwg
JmJsb2NrcXVvdGUgPSBzdGF0aWNfY2FzdDxIVE1MQmxvY2txdW90ZUVsZW1lbnRJbXBsICY+KGVs
ZW1lbnQpOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6
Om9wdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBI
VE1MT3B0aW9uRWxlbWVudEltcGwmIG9wdGlvbiA9ICpzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxl
bWVudEltcGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIEJsb2Nr
UXVvdGVDaXRlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYmxvY2txdW90ZS5jaXRlKCkpOwor
ICAgICAgICBjYXNlIE9wdGlvbkZvcm06ICAgICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhl
YyxvcHRpb24uZm9ybSgpKTsgLy8gdHlwZSBIVE1MRm9ybUVsZW1lbnQKKyAgICAgICAgY2FzZSBP
cHRpb25EZWZhdWx0U2VsZWN0ZWQ6IHJldHVybiBCb29sZWFuKG9wdGlvbi5kZWZhdWx0U2VsZWN0
ZWQoKSk7CisgICAgICAgIGNhc2UgT3B0aW9uVGV4dDogICAgICAgICAgICByZXR1cm4gU3RyaW5n
KG9wdGlvbi50ZXh0KCkpOworICAgICAgICBjYXNlIE9wdGlvbkluZGV4OiAgICAgICAgICAgcmV0
dXJuIE51bWJlcihvcHRpb24uaW5kZXgoKSk7CisgICAgICAgIGNhc2UgT3B0aW9uRGlzYWJsZWQ6
ICAgICAgICByZXR1cm4gQm9vbGVhbihvcHRpb24uZGlzYWJsZWQoKSk7CisgICAgICAgIGNhc2Ug
T3B0aW9uTGFiZWw6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKG9wdGlvbi5sYWJlbCgpKTsKKyAg
ICAgICAgY2FzZSBPcHRpb25TZWxlY3RlZDogICAgICAgIHJldHVybiBCb29sZWFuKG9wdGlvbi5z
ZWxlY3RlZCgpKTsKKyAgICAgICAgY2FzZSBPcHRpb25WYWx1ZTogICAgICAgICAgIHJldHVybiBT
dHJpbmcob3B0aW9uLnZhbHVlKCkpOwogICAgIH0KLSAgfQotICBjYXNlIElEX1E6IHsKLSAgICBI
VE1MUXVvdGVFbGVtZW50SW1wbCAmcXVvdGUgPSBzdGF0aWNfY2FzdDxIVE1MUXVvdGVFbGVtZW50
SW1wbCAmPihlbGVtZW50KTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhU
TUxFbGVtZW50OjppbnB1dEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QK
K3sKKyAgICBIVE1MSW5wdXRFbGVtZW50SW1wbCYgaW5wdXQgPSAqc3RhdGljX2Nhc3Q8SFRNTElu
cHV0RWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNl
IFF1b3RlQ2l0ZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKHF1b3RlLmNpdGUoKSk7CisgICAg
ICAgIGNhc2UgSW5wdXREZWZhdWx0VmFsdWU6ICAgIHJldHVybiBTdHJpbmcoaW5wdXQuZGVmYXVs
dFZhbHVlKCkpOworICAgICAgICBjYXNlIElucHV0RGVmYXVsdENoZWNrZWQ6ICByZXR1cm4gQm9v
bGVhbihpbnB1dC5kZWZhdWx0Q2hlY2tlZCgpKTsKKyAgICAgICAgY2FzZSBJbnB1dEZvcm06ICAg
ICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyxpbnB1dC5mb3JtKCkpOyAvLyB0eXBlIEhU
TUxGb3JtRWxlbWVudAorICAgICAgICBjYXNlIElucHV0QWNjZXB0OiAgICAgICAgICByZXR1cm4g
U3RyaW5nKGlucHV0LmFjY2VwdCgpKTsKKyAgICAgICAgY2FzZSBJbnB1dEFjY2Vzc0tleTogICAg
ICAgcmV0dXJuIFN0cmluZyhpbnB1dC5hY2Nlc3NLZXkoKSk7CisgICAgICAgIGNhc2UgSW5wdXRB
bGlnbjogICAgICAgICAgIHJldHVybiBTdHJpbmcoaW5wdXQuYWxpZ24oKSk7CisgICAgICAgIGNh
c2UgSW5wdXRBbHQ6ICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoaW5wdXQuYWx0KCkpOworICAg
ICAgICBjYXNlIElucHV0Q2hlY2tlZDogICAgICAgICByZXR1cm4gQm9vbGVhbihpbnB1dC5jaGVj
a2VkKCkpOworICAgICAgICBjYXNlIElucHV0RGlzYWJsZWQ6ICAgICAgICByZXR1cm4gQm9vbGVh
bihpbnB1dC5kaXNhYmxlZCgpKTsKKyAgICAgICAgY2FzZSBJbnB1dE1heExlbmd0aDogICAgICAg
cmV0dXJuIE51bWJlcihpbnB1dC5tYXhMZW5ndGgoKSk7CisgICAgICAgIGNhc2UgSW5wdXROYW1l
OiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoaW5wdXQubmFtZSgpKTsKKyAgICAgICAgY2FzZSBJ
bnB1dFJlYWRPbmx5OiAgICAgICAgcmV0dXJuIEJvb2xlYW4oaW5wdXQucmVhZE9ubHkoKSk7Cisg
ICAgICAgIGNhc2UgSW5wdXRTaXplOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoaW5wdXQuc2l6
ZURPTSgpKTsKKyAgICAgICAgY2FzZSBJbnB1dFNyYzogICAgICAgICAgICAgcmV0dXJuIFN0cmlu
ZyhpbnB1dC5zcmMoKSk7CisgICAgICAgIGNhc2UgSW5wdXRUYWJJbmRleDogICAgICAgIHJldHVy
biBOdW1iZXIoaW5wdXQudGFiSW5kZXgoKSk7CisgICAgICAgIGNhc2UgSW5wdXRUeXBlOiAgICAg
ICAgICAgIHJldHVybiBTdHJpbmcoaW5wdXQudHlwZSgpKTsKKyAgICAgICAgY2FzZSBJbnB1dFVz
ZU1hcDogICAgICAgICAgcmV0dXJuIFN0cmluZyhpbnB1dC51c2VNYXAoKSk7CisgICAgICAgIGNh
c2UgSW5wdXRWYWx1ZTogICAgICAgICAgIHJldHVybiBTdHJpbmcoaW5wdXQudmFsdWUoKSk7CiAg
ICAgfQotICB9Ci0gIGNhc2UgSURfUFJFOiB7Ci0gICAgSFRNTFByZUVsZW1lbnRJbXBsICZwcmUg
PSBzdGF0aWNfY2FzdDxIVE1MUHJlRWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgcmV0dXJu
IFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6dGV4dEFyZWFHZXR0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTFRleHRBcmVhRWxlbWVu
dEltcGwmIHRleHRhcmVhID0gKnN0YXRpY19jYXN0PEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBsKj4o
aW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBQcmVXaWR0aDogICAgICAg
ICAgIHJldHVybiBOdW1iZXIocHJlLndpZHRoKCkpOworICAgICAgICBjYXNlIFRleHRBcmVhRGVm
YXVsdFZhbHVlOiAgICByZXR1cm4gU3RyaW5nKHRleHRhcmVhLmRlZmF1bHRWYWx1ZSgpKTsKKyAg
ICAgICAgY2FzZSBUZXh0QXJlYUZvcm06ICAgICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhl
Yyx0ZXh0YXJlYS5mb3JtKCkpOyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVudAorICAgICAgICBjYXNl
IFRleHRBcmVhQWNjZXNzS2V5OiAgICAgICByZXR1cm4gU3RyaW5nKHRleHRhcmVhLmFjY2Vzc0tl
eSgpKTsKKyAgICAgICAgY2FzZSBUZXh0QXJlYUNvbHM6ICAgICAgICAgICAgcmV0dXJuIE51bWJl
cih0ZXh0YXJlYS5jb2xzKCkpOworICAgICAgICBjYXNlIFRleHRBcmVhRGlzYWJsZWQ6ICAgICAg
ICByZXR1cm4gQm9vbGVhbih0ZXh0YXJlYS5kaXNhYmxlZCgpKTsKKyAgICAgICAgY2FzZSBUZXh0
QXJlYU5hbWU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0ZXh0YXJlYS5uYW1lKCkpOworICAg
ICAgICBjYXNlIFRleHRBcmVhUmVhZE9ubHk6ICAgICAgICByZXR1cm4gQm9vbGVhbih0ZXh0YXJl
YS5yZWFkT25seSgpKTsKKyAgICAgICAgY2FzZSBUZXh0QXJlYVJvd3M6ICAgICAgICAgICAgcmV0
dXJuIE51bWJlcih0ZXh0YXJlYS5yb3dzKCkpOworICAgICAgICBjYXNlIFRleHRBcmVhVGFiSW5k
ZXg6ICAgICAgICByZXR1cm4gTnVtYmVyKHRleHRhcmVhLnRhYkluZGV4KCkpOworICAgICAgICBj
YXNlIFRleHRBcmVhVHlwZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRleHRhcmVhLnR5cGUo
KSk7CisgICAgICAgIGNhc2UgVGV4dEFyZWFWYWx1ZTogICAgICAgICAgIHJldHVybiBTdHJpbmco
dGV4dGFyZWEudmFsdWUoKSk7CiAgICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX0JSOiB7
Ci0gICAgSFRNTEJSRWxlbWVudEltcGwgJmJyID0gc3RhdGljX2Nhc3Q8SFRNTEJSRWxlbWVudElt
cGwgJj4oZWxlbWVudCk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1M
RWxlbWVudDo6YnV0dG9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAor
eworICAgIEhUTUxCdXR0b25FbGVtZW50SW1wbCYgYnV0dG9uID0gKnN0YXRpY19jYXN0PEhUTUxC
dXR0b25FbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tlbikgewotICAgIGNh
c2UgQlJDbGVhcjogICAgICAgICAgIHJldHVybiBTdHJpbmcoYnIuY2xlYXIoKSk7Ci0gICAgfQot
ICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX0JBU0VGT05UOiB7Ci0gICAgSFRNTEJhc2VGb250RWxl
bWVudEltcGwgJmJhc2VGb250ID0gc3RhdGljX2Nhc3Q8SFRNTEJhc2VGb250RWxlbWVudEltcGwg
Jj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgQmFzZUZvbnRDb2xv
cjogICAgICAgICAgIHJldHVybiBTdHJpbmcoYmFzZUZvbnQuY29sb3IoKSk7Ci0gICAgY2FzZSBC
YXNlRm9udEZhY2U6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhiYXNlRm9udC5mYWNlKCkpOwot
ICAgIGNhc2UgQmFzZUZvbnRTaXplOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYmFzZUZvbnQu
c2l6ZSgpKTsKLSAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfRk9OVDogewotICAgIEhU
TUxGb250RWxlbWVudEltcGwgJmZvbnQgPSBzdGF0aWNfY2FzdDxIVE1MRm9udEVsZW1lbnRJbXBs
ICY+KGVsZW1lbnQpOwotICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIEZvbnRDb2xvcjog
ICAgICAgICAgIHJldHVybiBTdHJpbmcoZm9udC5jb2xvcigpKTsKLSAgICBjYXNlIEZvbnRGYWNl
OiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoZm9udC5mYWNlKCkpOwotICAgIGNhc2UgRm9udFNp
emU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhmb250LnNpemUoKSk7Ci0gICAgfQotICB9Ci0g
IGJyZWFrOwotICBjYXNlIElEX0hSOiB7Ci0gICAgSFRNTEhSRWxlbWVudEltcGwgJmhyID0gc3Rh
dGljX2Nhc3Q8SFRNTEhSRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tl
bikgewotICAgIGNhc2UgSFJBbGlnbjogICAgICAgICAgIHJldHVybiBTdHJpbmcoaHIuYWxpZ24o
KSk7Ci0gICAgY2FzZSBIUk5vU2hhZGU6ICAgICAgICAgcmV0dXJuIEJvb2xlYW4oaHIubm9TaGFk
ZSgpKTsKLSAgICBjYXNlIEhSU2l6ZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGhyLnNpemUo
KSk7Ci0gICAgY2FzZSBIUldpZHRoOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhoci53aWR0aCgp
KTsKKyAgICAgICAgY2FzZSBCdXR0b25Gb3JtOiAgICAgICAgICAgIHJldHVybiBnZXRET01Ob2Rl
KGV4ZWMsYnV0dG9uLmZvcm0oKSk7IC8vIHR5cGUgSFRNTEZvcm1FbGVtZW50CisgICAgICAgIGNh
c2UgQnV0dG9uQWNjZXNzS2V5OiAgICAgICByZXR1cm4gU3RyaW5nKGJ1dHRvbi5hY2Nlc3NLZXko
KSk7CisgICAgICAgIGNhc2UgQnV0dG9uRGlzYWJsZWQ6ICAgICAgICByZXR1cm4gQm9vbGVhbihi
dXR0b24uZGlzYWJsZWQoKSk7CisgICAgICAgIGNhc2UgQnV0dG9uTmFtZTogICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKGJ1dHRvbi5uYW1lKCkpOworICAgICAgICBjYXNlIEJ1dHRvblRhYkluZGV4
OiAgICAgICAgcmV0dXJuIE51bWJlcihidXR0b24udGFiSW5kZXgoKSk7CisgICAgICAgIGNhc2Ug
QnV0dG9uVHlwZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGJ1dHRvbi50eXBlKCkpOworICAg
ICAgICBjYXNlIEJ1dHRvblZhbHVlOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhidXR0b24udmFs
dWUoKSk7CiAgICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX0lOUzoKLSAgY2FzZSBJRF9E
RUw6IHsKLSAgICBIVE1MTW9kRWxlbWVudEltcGwgJm1vZCA9IHN0YXRpY19jYXN0PEhUTUxNb2RF
bGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1Zh
bHVlIEhUTUxFbGVtZW50OjpsYWJlbEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikg
Y29uc3QKK3sKKyAgICBIVE1MTGFiZWxFbGVtZW50SW1wbCYgbGFiZWwgPSAqc3RhdGljX2Nhc3Q8
SFRNTExhYmVsRWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAodG9rZW4pIHsKLSAg
ICBjYXNlIE1vZENpdGU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhtb2QuY2l0ZSgpKTsKLSAg
ICBjYXNlIE1vZERhdGVUaW1lOiAgICAgICAgcmV0dXJuIFN0cmluZyhtb2QuZGF0ZVRpbWUoKSk7
CisgICAgICAgIGNhc2UgTGFiZWxGb3JtOiAgICAgICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4
ZWMsbGFiZWwuZm9ybSgpKTsgLy8gdHlwZSBIVE1MRm9ybUVsZW1lbnQKKyAgICAgICAgY2FzZSBM
YWJlbEFjY2Vzc0tleTogICAgICAgcmV0dXJuIFN0cmluZyhsYWJlbC5hY2Nlc3NLZXkoKSk7Cisg
ICAgICAgIGNhc2UgTGFiZWxIdG1sRm9yOiAgICAgICAgIHJldHVybiBTdHJpbmcobGFiZWwuaHRt
bEZvcigpKTsKICAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfQTogewotICAgIEhUTUxB
bmNob3JFbGVtZW50SW1wbCAmYW5jaG9yID0gc3RhdGljX2Nhc3Q8SFRNTEFuY2hvckVsZW1lbnRJ
bXBsICY+KGVsZW1lbnQpOwotICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIEFuY2hvckFj
Y2Vzc0tleTogICAgICAgcmV0dXJuIFN0cmluZyhhbmNob3IuYWNjZXNzS2V5KCkpOwotICAgIGNh
c2UgQW5jaG9yQ2hhcnNldDogICAgICAgICByZXR1cm4gU3RyaW5nKGFuY2hvci5jaGFyc2V0KCkp
OwotICAgIGNhc2UgQW5jaG9yQ29vcmRzOiAgICAgICAgICByZXR1cm4gU3RyaW5nKGFuY2hvci5j
b29yZHMoKSk7Ci0gICAgY2FzZSBBbmNob3JIcmVmOiAgICAgICAgICAgIHJldHVybiBTdHJpbmco
YW5jaG9yLmhyZWYoKSk7Ci0gICAgY2FzZSBBbmNob3JIcmVmTGFuZzogICAgICAgIHJldHVybiBT
dHJpbmcoYW5jaG9yLmhyZWZsYW5nKCkpOwotICAgIGNhc2UgQW5jaG9ySGFzaDogICAgICAgICAg
ICByZXR1cm4gU3RyaW5nKCcjJytLVVJMKGFuY2hvci5ocmVmKCkuc3RyaW5nKCkpLnJlZigpKTsK
LSAgICBjYXNlIEFuY2hvckhvc3Q6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhLVVJMKGFuY2hv
ci5ocmVmKCkuc3RyaW5nKCkpLmhvc3QoKSk7Ci0gICAgY2FzZSBBbmNob3JIb3N0bmFtZTogewot
ICAgICAgS1VSTCB1cmwoYW5jaG9yLmhyZWYoKS5zdHJpbmcoKSk7Ci0gICAgICBrZERlYnVnKDYw
NzApIDw8ICJhbmNob3I6Omhvc3RuYW1lIHVzZXM6IiA8PHVybC51cmwoKTw8ZW5kbDsKLSAgICAg
IGlmICh1cmwucG9ydCgpPT0wKQotICAgICAgICByZXR1cm4gU3RyaW5nKHVybC5ob3N0KCkpOwot
ICAgICAgZWxzZQotICAgICAgICByZXR1cm4gU3RyaW5nKHVybC5ob3N0KCkgKyAiOiIgKyBRU3Ry
aW5nOjpudW1iZXIodXJsLnBvcnQoKSkpOwotICAgIH0KLSAgICBjYXNlIEFuY2hvclBhdGhOYW1l
OiAgICAgICAgcmV0dXJuIFN0cmluZyhLVVJMKGFuY2hvci5ocmVmKCkuc3RyaW5nKCkpLnBhdGgo
KSk7Ci0gICAgY2FzZSBBbmNob3JQb3J0OiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoUVN0cmlu
Zzo6bnVtYmVyKEtVUkwoYW5jaG9yLmhyZWYoKS5zdHJpbmcoKSkucG9ydCgpKSk7Ci0gICAgY2Fz
ZSBBbmNob3JQcm90b2NvbDogICAgICAgIHJldHVybiBTdHJpbmcoS1VSTChhbmNob3IuaHJlZigp
LnN0cmluZygpKS5wcm90b2NvbCgpKyI6Iik7Ci0gICAgY2FzZSBBbmNob3JTZWFyY2g6ICAgICAg
ICAgIHJldHVybiBTdHJpbmcoS1VSTChhbmNob3IuaHJlZigpLnN0cmluZygpKS5xdWVyeSgpKTsK
LSAgICBjYXNlIEFuY2hvck5hbWU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhhbmNob3IubmFt
ZSgpKTsKLSAgICBjYXNlIEFuY2hvclJlbDogICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhhbmNo
b3IucmVsKCkpOwotICAgIGNhc2UgQW5jaG9yUmV2OiAgICAgICAgICAgICByZXR1cm4gU3RyaW5n
KGFuY2hvci5yZXYoKSk7Ci0gICAgY2FzZSBBbmNob3JTaGFwZTogICAgICAgICAgIHJldHVybiBT
dHJpbmcoYW5jaG9yLnNoYXBlKCkpOwotICAgIGNhc2UgQW5jaG9yVGFiSW5kZXg6ICAgICAgICBy
ZXR1cm4gTnVtYmVyKGFuY2hvci50YWJJbmRleCgpKTsKLSAgICBjYXNlIEFuY2hvclRhcmdldDog
ICAgICAgICAgcmV0dXJuIFN0cmluZyhhbmNob3IudGFyZ2V0KCkpOwotICAgIGNhc2UgQW5jaG9y
VHlwZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGFuY2hvci50eXBlKCkpOwotICAgIGNhc2Ug
QW5jaG9yVGV4dDoKLSAgICAgIGlmIChEb2N1bWVudEltcGwqIGRvYyA9IGFuY2hvci5nZXREb2N1
bWVudCgpKQotICAgICAgICBkb2MtPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0
cygpOwotICAgICAgcmV0dXJuIFN0cmluZyhhbmNob3IuaW5uZXJUZXh0KCkpOwotICAgIH0KLSAg
fQotICBicmVhazsKLSAgY2FzZSBJRF9JTUc6IHsKLSAgICBIVE1MSW1hZ2VFbGVtZW50SW1wbCAm
aW1hZ2UgPSBzdGF0aWNfY2FzdDxIVE1MSW1hZ2VFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAg
ICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBJbWFnZU5hbWU6ICAgICAgICAgICAgcmV0dXJu
IFN0cmluZyhpbWFnZS5uYW1lKCkpOwotICAgIGNhc2UgSW1hZ2VBbGlnbjogICAgICAgICAgIHJl
dHVybiBTdHJpbmcoaW1hZ2UuYWxpZ24oKSk7Ci0gICAgY2FzZSBJbWFnZUFsdDogICAgICAgICAg
ICAgcmV0dXJuIFN0cmluZyhpbWFnZS5hbHQoKSk7Ci0gICAgY2FzZSBJbWFnZUJvcmRlcjogICAg
ICAgICAgcmV0dXJuIE51bWJlcihpbWFnZS5ib3JkZXIoKSk7Ci0gICAgY2FzZSBJbWFnZUhlaWdo
dDogICAgICAgICAgcmV0dXJuIE51bWJlcihpbWFnZS5oZWlnaHQodHJ1ZSkpOwotICAgIGNhc2Ug
SW1hZ2VIc3BhY2U6ICAgICAgICAgIHJldHVybiBOdW1iZXIoaW1hZ2UuaHNwYWNlKCkpOwotICAg
IGNhc2UgSW1hZ2VJc01hcDogICAgICAgICAgIHJldHVybiBCb29sZWFuKGltYWdlLmlzTWFwKCkp
OwotICAgIGNhc2UgSW1hZ2VMb25nRGVzYzogICAgICAgIHJldHVybiBTdHJpbmcoaW1hZ2UubG9u
Z0Rlc2MoKSk7Ci0gICAgY2FzZSBJbWFnZVNyYzogICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhp
bWFnZS5zcmMoKSk7Ci0gICAgY2FzZSBJbWFnZVVzZU1hcDogICAgICAgICAgcmV0dXJuIFN0cmlu
ZyhpbWFnZS51c2VNYXAoKSk7Ci0gICAgY2FzZSBJbWFnZVZzcGFjZTogICAgICAgICAgcmV0dXJu
IE51bWJlcihpbWFnZS52c3BhY2UoKSk7Ci0gICAgY2FzZSBJbWFnZVdpZHRoOiAgICAgICAgICAg
cmV0dXJuIE51bWJlcihpbWFnZS53aWR0aCh0cnVlKSk7Ci0gICAgY2FzZSBJbWFnZVg6ICAgICAg
ICAgICAgICAgcmV0dXJuIE51bWJlcihpbWFnZS54KCkpOwotICAgIGNhc2UgSW1hZ2VZOiAgICAg
ICAgICAgICAgIHJldHVybiBOdW1iZXIoaW1hZ2UueSgpKTsKLSAgICB9Ci0gIH0KLSAgYnJlYWs7
Ci0gIGNhc2UgSURfT0JKRUNUOiB7Ci0gICAgSFRNTE9iamVjdEVsZW1lbnRJbXBsICZvYmplY3Qg
PSBzdGF0aWNfY2FzdDxIVE1MT2JqZWN0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgc3dp
dGNoICh0b2tlbikgewotICAgIGNhc2UgT2JqZWN0Rm9ybTogICAgICAgICAgICByZXR1cm4gZ2V0
RE9NTm9kZShleGVjLG9iamVjdC5mb3JtKCkpOyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVudAotICAg
IGNhc2UgT2JqZWN0Q29kZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKG9iamVjdC5jb2RlKCkp
OwotICAgIGNhc2UgT2JqZWN0QWxpZ246ICAgICAgICAgICByZXR1cm4gU3RyaW5nKG9iamVjdC5h
bGlnbigpKTsKLSAgICBjYXNlIE9iamVjdEFyY2hpdmU6ICAgICAgICAgcmV0dXJuIFN0cmluZyhv
YmplY3QuYXJjaGl2ZSgpKTsKLSAgICBjYXNlIE9iamVjdEJvcmRlcjogICAgICAgICAgcmV0dXJu
IFN0cmluZyhvYmplY3QuYm9yZGVyKCkpOwotICAgIGNhc2UgT2JqZWN0Q29kZUJhc2U6ICAgICAg
ICByZXR1cm4gU3RyaW5nKG9iamVjdC5jb2RlQmFzZSgpKTsKLSAgICBjYXNlIE9iamVjdENvZGVU
eXBlOiAgICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3QuY29kZVR5cGUoKSk7Ci0gICAgY2FzZSBP
YmplY3RDb250ZW50RG9jdW1lbnQ6IHJldHVybiBjaGVja05vZGVTZWN1cml0eShleGVjLG9iamVj
dC5jb250ZW50RG9jdW1lbnQoKSkgPyAKLQkJCQkgICAgICAgZ2V0RE9NTm9kZShleGVjLCBvYmpl
Y3QuY29udGVudERvY3VtZW50KCkpIDogVW5kZWZpbmVkKCk7Ci0gICAgY2FzZSBPYmplY3REYXRh
OiAgICAgICAgICAgIHJldHVybiBTdHJpbmcob2JqZWN0LmRhdGEoKSk7Ci0gICAgY2FzZSBPYmpl
Y3REZWNsYXJlOiAgICAgICAgIHJldHVybiBCb29sZWFuKG9iamVjdC5kZWNsYXJlKCkpOwotICAg
IGNhc2UgT2JqZWN0SGVpZ2h0OiAgICAgICAgICByZXR1cm4gU3RyaW5nKG9iamVjdC5oZWlnaHQo
KSk7Ci0gICAgY2FzZSBPYmplY3RIc3BhY2U6ICAgICAgICAgIHJldHVybiBTdHJpbmcob2JqZWN0
LmhzcGFjZSgpKTsKLSAgICBjYXNlIE9iamVjdE5hbWU6ICAgICAgICAgICAgcmV0dXJuIFN0cmlu
ZyhvYmplY3QubmFtZSgpKTsKLSAgICBjYXNlIE9iamVjdFN0YW5kYnk6ICAgICAgICAgcmV0dXJu
IFN0cmluZyhvYmplY3Quc3RhbmRieSgpKTsKLSAgICBjYXNlIE9iamVjdFRhYkluZGV4OiAgICAg
ICAgcmV0dXJuIE51bWJlcihvYmplY3QudGFiSW5kZXgoKSk7Ci0gICAgY2FzZSBPYmplY3RUeXBl
OiAgICAgICAgICAgIHJldHVybiBTdHJpbmcob2JqZWN0LnR5cGUoKSk7Ci0gICAgY2FzZSBPYmpl
Y3RVc2VNYXA6ICAgICAgICAgIHJldHVybiBTdHJpbmcob2JqZWN0LnVzZU1hcCgpKTsKLSAgICBj
YXNlIE9iamVjdFZzcGFjZTogICAgICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3QudnNwYWNlKCkp
OwotICAgIGNhc2UgT2JqZWN0V2lkdGg6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKG9iamVjdC53
aWR0aCgpKTsKLSAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfUEFSQU06IHsKLSAgICBI
VE1MUGFyYW1FbGVtZW50SW1wbCAmcGFyYW0gPSBzdGF0aWNfY2FzdDxIVE1MUGFyYW1FbGVtZW50
SW1wbCAmPihlbGVtZW50KTsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBQYXJhbU5h
bWU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhwYXJhbS5uYW1lKCkpOwotICAgIGNhc2UgUGFy
YW1UeXBlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcocGFyYW0udHlwZSgpKTsKLSAgICBjYXNl
IFBhcmFtVmFsdWU6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHBhcmFtLnZhbHVlKCkpOwotICAg
IGNhc2UgUGFyYW1WYWx1ZVR5cGU6ICAgICAgIHJldHVybiBTdHJpbmcocGFyYW0udmFsdWVUeXBl
KCkpOwotICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9BUFBMRVQ6IHsKLSAgICBIVE1M
QXBwbGV0RWxlbWVudEltcGwgJmFwcGxldCA9IHN0YXRpY19jYXN0PEhUTUxBcHBsZXRFbGVtZW50
SW1wbCAmPihlbGVtZW50KTsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBBcHBsZXRB
bGlnbjogICAgICAgICAgIHJldHVybiBTdHJpbmcoYXBwbGV0LmFsaWduKCkpOwotICAgIGNhc2Ug
QXBwbGV0QWx0OiAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGFwcGxldC5hbHQoKSk7Ci0gICAg
Y2FzZSBBcHBsZXRBcmNoaXZlOiAgICAgICAgIHJldHVybiBTdHJpbmcoYXBwbGV0LmFyY2hpdmUo
KSk7Ci0gICAgY2FzZSBBcHBsZXRDb2RlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYXBwbGV0
LmNvZGUoKSk7Ci0gICAgY2FzZSBBcHBsZXRDb2RlQmFzZTogICAgICAgIHJldHVybiBTdHJpbmco
YXBwbGV0LmNvZGVCYXNlKCkpOwotICAgIGNhc2UgQXBwbGV0SGVpZ2h0OiAgICAgICAgICByZXR1
cm4gU3RyaW5nKGFwcGxldC5oZWlnaHQoKSk7Ci0gICAgY2FzZSBBcHBsZXRIc3BhY2U6ICAgICAg
ICAgIHJldHVybiBTdHJpbmcoYXBwbGV0LmhzcGFjZSgpKTsKLSAgICBjYXNlIEFwcGxldE5hbWU6
ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhhcHBsZXQubmFtZSgpKTsKLSAgICBjYXNlIEFwcGxl
dE9iamVjdDogICAgICAgICAgcmV0dXJuIFN0cmluZyhhcHBsZXQub2JqZWN0KCkpOwotICAgIGNh
c2UgQXBwbGV0VnNwYWNlOiAgICAgICAgICByZXR1cm4gU3RyaW5nKGFwcGxldC52c3BhY2UoKSk7
Ci0gICAgY2FzZSBBcHBsZXRXaWR0aDogICAgICAgICAgIHJldHVybiBTdHJpbmcoYXBwbGV0Lndp
ZHRoKCkpOwotICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9NQVA6IHsKLSAgICBIVE1M
TWFwRWxlbWVudEltcGwgJm1hcCA9IHN0YXRpY19jYXN0PEhUTUxNYXBFbGVtZW50SW1wbCAmPihl
bGVtZW50KTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50
OjpmaWVsZFNldEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAg
ICBIVE1MRmllbGRTZXRFbGVtZW50SW1wbCYgZmllbGRTZXQgPSAqc3RhdGljX2Nhc3Q8SFRNTEZp
ZWxkU2V0RWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIGlmICh0b2tlbiA9PSBGaWVsZFNldEZv
cm0pCisgICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsZmllbGRTZXQuZm9ybSgpKTsgLy8g
dHlwZSBIVE1MRm9ybUVsZW1lbnQKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVl
IEhUTUxFbGVtZW50OjpsZWdlbmRHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNv
bnN0Cit7CisgICAgSFRNTExlZ2VuZEVsZW1lbnRJbXBsJiBsZWdlbmQgPSAqc3RhdGljX2Nhc3Q8
SFRNTExlZ2VuZEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0g
ICAgY2FzZSBNYXBBcmVhczogICAgICAgICAgIHJldHVybiBnZXRIVE1MQ29sbGVjdGlvbihleGVj
LCBtYXAuYXJlYXMoKS5nZXQoKSk7IC8vIHR5cGUgSFRNTENvbGxlY3Rpb24KLSAgICBjYXNlIE1h
cE5hbWU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhtYXAubmFtZSgpKTsKLSAgICB9Ci0gIH0K
LSAgYnJlYWs7Ci0gIGNhc2UgSURfQVJFQTogewotICAgIEhUTUxBcmVhRWxlbWVudEltcGwgJmFy
ZWEgPSBzdGF0aWNfY2FzdDxIVE1MQXJlYUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgIHN3
aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIEFyZWFBY2Nlc3NLZXk6ICAgICAgIHJldHVybiBTdHJp
bmcoYXJlYS5hY2Nlc3NLZXkoKSk7Ci0gICAgY2FzZSBBcmVhQWx0OiAgICAgICAgICAgICByZXR1
cm4gU3RyaW5nKGFyZWEuYWx0KCkpOwotICAgIGNhc2UgQXJlYUNvb3JkczogICAgICAgICAgcmV0
dXJuIFN0cmluZyhhcmVhLmNvb3JkcygpKTsKLSAgICBjYXNlIEFyZWFIcmVmOiAgICAgICAgICAg
IHJldHVybiBTdHJpbmcoYXJlYS5ocmVmKCkpOwotICAgIGNhc2UgQXJlYUhhc2g6ICAgICAgICAg
ICAgcmV0dXJuIFN0cmluZygnIycrS1VSTChhcmVhLmhyZWYoKS5zdHJpbmcoKSkucmVmKCkpOwot
ICAgIGNhc2UgQXJlYUhvc3Q6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhLVVJMKGFyZWEuaHJl
ZigpLnN0cmluZygpKS5ob3N0KCkpOwotICAgIGNhc2UgQXJlYUhvc3ROYW1lOiB7Ci0gICAgICBL
VVJMIHVybChhcmVhLmhyZWYoKS5zdHJpbmcoKSk7Ci0gICAgICBrZERlYnVnKDYwNzApIDw8ICJs
aW5rOjpob3N0bmFtZSB1c2VzOiIgPDx1cmwudXJsKCk8PGVuZGw7Ci0gICAgICBpZiAodXJsLnBv
cnQoKT09MCkKLSAgICAgICAgcmV0dXJuIFN0cmluZyh1cmwuaG9zdCgpKTsKLSAgICAgIGVsc2UK
LSAgICAgICAgcmV0dXJuIFN0cmluZyh1cmwuaG9zdCgpICsgIjoiICsgUVN0cmluZzo6bnVtYmVy
KHVybC5wb3J0KCkpKTsKKyAgICAgICAgY2FzZSBMZWdlbmRGb3JtOiAgICAgICAgICAgIHJldHVy
biBnZXRET01Ob2RlKGV4ZWMsbGVnZW5kLmZvcm0oKSk7IC8vIHR5cGUgSFRNTEZvcm1FbGVtZW50
CisgICAgICAgIGNhc2UgTGVnZW5kQWNjZXNzS2V5OiAgICAgICByZXR1cm4gU3RyaW5nKGxlZ2Vu
ZC5hY2Nlc3NLZXkoKSk7CisgICAgICAgIGNhc2UgTGVnZW5kQWxpZ246ICAgICAgICAgICByZXR1
cm4gU3RyaW5nKGxlZ2VuZC5hbGlnbigpKTsKICAgICB9Ci0gICAgY2FzZSBBcmVhUGF0aE5hbWU6
ICAgICAgICByZXR1cm4gU3RyaW5nKEtVUkwoYXJlYS5ocmVmKCkuc3RyaW5nKCkpLnBhdGgoKSk7
Ci0gICAgY2FzZSBBcmVhUG9ydDogICAgICAgICAgICByZXR1cm4gU3RyaW5nKFFTdHJpbmc6Om51
bWJlcihLVVJMKGFyZWEuaHJlZigpLnN0cmluZygpKS5wb3J0KCkpKTsKLSAgICBjYXNlIEFyZWFQ
cm90b2NvbDogICAgICAgIHJldHVybiBTdHJpbmcoS1VSTChhcmVhLmhyZWYoKS5zdHJpbmcoKSku
cHJvdG9jb2woKSsiOiIpOwotICAgIGNhc2UgQXJlYVNlYXJjaDogICAgICAgICAgcmV0dXJuIFN0
cmluZyhLVVJMKGFyZWEuaHJlZigpLnN0cmluZygpKS5xdWVyeSgpKTsKLSAgICBjYXNlIEFyZWFO
b0hyZWY6ICAgICAgICAgIHJldHVybiBCb29sZWFuKGFyZWEubm9IcmVmKCkpOwotICAgIGNhc2Ug
QXJlYVNoYXBlOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhhcmVhLnNoYXBlKCkpOwotICAgIGNh
c2UgQXJlYVRhYkluZGV4OiAgICAgICAgcmV0dXJuIE51bWJlcihhcmVhLnRhYkluZGV4KCkpOwot
ICAgIGNhc2UgQXJlYVRhcmdldDogICAgICAgICAgcmV0dXJuIFN0cmluZyhhcmVhLnRhcmdldCgp
KTsKLSAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfU0NSSVBUOiB7Ci0gICAgSFRNTFNj
cmlwdEVsZW1lbnRJbXBsICZzY3JpcHQgPSBzdGF0aWNfY2FzdDxIVE1MU2NyaXB0RWxlbWVudElt
cGwgJj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgU2NyaXB0VGV4
dDogICAgICAgICAgICByZXR1cm4gU3RyaW5nKHNjcmlwdC50ZXh0KCkpOwotICAgIGNhc2UgU2Ny
aXB0SHRtbEZvcjogICAgICAgICByZXR1cm4gU3RyaW5nKHNjcmlwdC5odG1sRm9yKCkpOwotICAg
IGNhc2UgU2NyaXB0RXZlbnQ6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHNjcmlwdC5ldmVudCgp
KTsKLSAgICBjYXNlIFNjcmlwdENoYXJzZXQ6ICAgICAgICAgcmV0dXJuIFN0cmluZyhzY3JpcHQu
Y2hhcnNldCgpKTsKLSAgICBjYXNlIFNjcmlwdERlZmVyOiAgICAgICAgICAgcmV0dXJuIEJvb2xl
YW4oc2NyaXB0LmRlZmVyKCkpOwotICAgIGNhc2UgU2NyaXB0U3JjOiAgICAgICAgICAgICByZXR1
cm4gU3RyaW5nKHNjcmlwdC5zcmMoKSk7Ci0gICAgY2FzZSBTY3JpcHRUeXBlOiAgICAgICAgICAg
IHJldHVybiBTdHJpbmcoc2NyaXB0LnR5cGUoKSk7Ci0gICAgfQotICB9Ci0gIGJyZWFrOwotICBj
YXNlIElEX1RBQkxFOiB7Ci0gICAgSFRNTFRhYmxlRWxlbWVudEltcGwgJnRhYmxlID0gc3RhdGlj
X2Nhc3Q8SFRNTFRhYmxlRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tl
bikgewotICAgIGNhc2UgVGFibGVDYXB0aW9uOiAgICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4
ZWMsdGFibGUuY2FwdGlvbigpKTsgLy8gdHlwZSBIVE1MVGFibGVDYXB0aW9uRWxlbWVudAotICAg
IGNhc2UgVGFibGVUSGVhZDogICAgICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsdGFibGUu
dEhlYWQoKSk7IC8vIHR5cGUgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQKLSAgICBjYXNlIFRhYmxl
VEZvb3Q6ICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLHRhYmxlLnRGb290KCkpOyAv
LyB0eXBlIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50Ci0gICAgY2FzZSBUYWJsZVJvd3M6ICAgICAg
ICAgICAgcmV0dXJuIGdldEhUTUxDb2xsZWN0aW9uKGV4ZWMsIHRhYmxlLnJvd3MoKS5nZXQoKSk7
IC8vIHR5cGUgSFRNTENvbGxlY3Rpb24KLSAgICBjYXNlIFRhYmxlVEJvZGllczogICAgICAgICBy
ZXR1cm4gZ2V0SFRNTENvbGxlY3Rpb24oZXhlYywgdGFibGUudEJvZGllcygpLmdldCgpKTsgLy8g
dHlwZSBIVE1MQ29sbGVjdGlvbgotICAgIGNhc2UgVGFibGVBbGlnbjogICAgICAgICAgIHJldHVy
biBTdHJpbmcodGFibGUuYWxpZ24oKSk7Ci0gICAgY2FzZSBUYWJsZUJnQ29sb3I6ICAgICAgICAg
cmV0dXJuIFN0cmluZyh0YWJsZS5iZ0NvbG9yKCkpOwotICAgIGNhc2UgVGFibGVCb3JkZXI6ICAg
ICAgICAgIHJldHVybiBTdHJpbmcodGFibGUuYm9yZGVyKCkpOwotICAgIGNhc2UgVGFibGVDZWxs
UGFkZGluZzogICAgIHJldHVybiBTdHJpbmcodGFibGUuY2VsbFBhZGRpbmcoKSk7Ci0gICAgY2Fz
ZSBUYWJsZUNlbGxTcGFjaW5nOiAgICAgcmV0dXJuIFN0cmluZyh0YWJsZS5jZWxsU3BhY2luZygp
KTsKLSAgICBjYXNlIFRhYmxlRnJhbWU6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlLmZy
YW1lKCkpOwotICAgIGNhc2UgVGFibGVSdWxlczogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFi
bGUucnVsZXMoKSk7Ci0gICAgY2FzZSBUYWJsZVN1bW1hcnk6ICAgICAgICAgcmV0dXJuIFN0cmlu
Zyh0YWJsZS5zdW1tYXJ5KCkpOwotICAgIGNhc2UgVGFibGVXaWR0aDogICAgICAgICAgIHJldHVy
biBTdHJpbmcodGFibGUud2lkdGgoKSk7Ci0gICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElE
X0NBUFRJT046IHsKLSAgICBIVE1MVGFibGVDYXB0aW9uRWxlbWVudEltcGwgJnRhYmxlQ2FwdGlv
biA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZUNhcHRpb25FbGVtZW50SW1wbCAmPihlbGVtZW50KTsK
KyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50Ojp1TGlzdEdl
dHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MVUxpc3RF
bGVtZW50SW1wbCYgdUxpc3QgPSAqc3RhdGljX2Nhc3Q8SFRNTFVMaXN0RWxlbWVudEltcGwqPihp
bXBsKCkpOwogICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIFRhYmxlQ2FwdGlvbkFsaWdu
OiAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ2FwdGlvbi5hbGlnbigpKTsKLSAgICB9Ci0gIH0K
LSAgYnJlYWs7Ci0gIGNhc2UgSURfQ09MOiB7Ci0gICAgSFRNTFRhYmxlQ29sRWxlbWVudEltcGwg
JnRhYmxlQ29sID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ29sRWxlbWVudEltcGwgJj4oZWxlbWVu
dCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgVGFibGVDb2xBbGlnbjogICAgICAg
ICAgIHJldHVybiBTdHJpbmcodGFibGVDb2wuYWxpZ24oKSk7Ci0gICAgY2FzZSBUYWJsZUNvbENo
OiAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNvbC5jaCgpKTsKLSAgICBjYXNlIFRh
YmxlQ29sQ2hPZmY6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ29sLmNoT2ZmKCkpOwot
ICAgIGNhc2UgVGFibGVDb2xTcGFuOiAgICAgICAgICAgIHJldHVybiBOdW1iZXIodGFibGVDb2wu
c3BhbigpKTsKLSAgICBjYXNlIFRhYmxlQ29sVkFsaWduOiAgICAgICAgICByZXR1cm4gU3RyaW5n
KHRhYmxlQ29sLnZBbGlnbigpKTsKLSAgICBjYXNlIFRhYmxlQ29sV2lkdGg6ICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKHRhYmxlQ29sLndpZHRoKCkpOwotICAgIH0KLSAgfQotICBicmVhazsKLSAg
Y2FzZSBJRF9USEVBRDoKLSAgY2FzZSBJRF9UQk9EWToKLSAgY2FzZSBJRF9URk9PVDogewotICAg
IEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbCAmdGFibGVTZWN0aW9uID0gc3RhdGljX2Nhc3Q8
SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgIHN3aXRjaCAodG9r
ZW4pIHsKLSAgICBjYXNlIFRhYmxlU2VjdGlvbkFsaWduOiAgICAgICAgICAgcmV0dXJuIFN0cmlu
Zyh0YWJsZVNlY3Rpb24uYWxpZ24oKSk7Ci0gICAgY2FzZSBUYWJsZVNlY3Rpb25DaDogICAgICAg
ICAgICAgIHJldHVybiBTdHJpbmcodGFibGVTZWN0aW9uLmNoKCkpOwotICAgIGNhc2UgVGFibGVT
ZWN0aW9uQ2hPZmY6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlU2VjdGlvbi5jaE9mZigp
KTsKLSAgICBjYXNlIFRhYmxlU2VjdGlvblZBbGlnbjogICAgICAgICAgcmV0dXJuIFN0cmluZyh0
YWJsZVNlY3Rpb24udkFsaWduKCkpOwotICAgIGNhc2UgVGFibGVTZWN0aW9uUm93czogICAgICAg
ICAgICByZXR1cm4gZ2V0SFRNTENvbGxlY3Rpb24oZXhlYywgdGFibGVTZWN0aW9uLnJvd3MoKS5n
ZXQoKSk7IC8vIHR5cGUgSFRNTENvbGxlY3Rpb24KLSAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNh
c2UgSURfVFI6IHsKLSAgIEhUTUxUYWJsZVJvd0VsZW1lbnRJbXBsICZ0YWJsZVJvdyA9IHN0YXRp
Y19jYXN0PEhUTUxUYWJsZVJvd0VsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgc3dpdGNoICh0
b2tlbikgewotICAgY2FzZSBUYWJsZVJvd1Jvd0luZGV4OiAgICAgICAgcmV0dXJuIE51bWJlcih0
YWJsZVJvdy5yb3dJbmRleCgpKTsKLSAgIGNhc2UgVGFibGVSb3dTZWN0aW9uUm93SW5kZXg6IHJl
dHVybiBOdW1iZXIodGFibGVSb3cuc2VjdGlvblJvd0luZGV4KCkpOwotICAgY2FzZSBUYWJsZVJv
d0NlbGxzOiAgICAgICAgICAgcmV0dXJuIGdldEhUTUxDb2xsZWN0aW9uKGV4ZWMsIHRhYmxlUm93
LmNlbGxzKCkuZ2V0KCkpOyAvLyB0eXBlIEhUTUxDb2xsZWN0aW9uCi0gICBjYXNlIFRhYmxlUm93
QWxpZ246ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlUm93LmFsaWduKCkpOwotICAgY2Fz
ZSBUYWJsZVJvd0JnQ29sb3I6ICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZVJvdy5iZ0NvbG9y
KCkpOwotICAgY2FzZSBUYWJsZVJvd0NoOiAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJs
ZVJvdy5jaCgpKTsKLSAgIGNhc2UgVGFibGVSb3dDaE9mZjogICAgICAgICAgIHJldHVybiBTdHJp
bmcodGFibGVSb3cuY2hPZmYoKSk7Ci0gICBjYXNlIFRhYmxlUm93VkFsaWduOiAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKHRhYmxlUm93LnZBbGlnbigpKTsKLSAgIH0KLSAgfQotICBicmVhazsKLSAg
Y2FzZSBJRF9USDoKLSAgY2FzZSBJRF9URDogewotICAgIEhUTUxUYWJsZUNlbGxFbGVtZW50SW1w
bCAmdGFibGVDZWxsID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsICY+KGVs
ZW1lbnQpOwotICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIFRhYmxlQ2VsbENlbGxJbmRl
eDogICAgICAgcmV0dXJuIE51bWJlcih0YWJsZUNlbGwuY2VsbEluZGV4KCkpOwotICAgIGNhc2Ug
VGFibGVDZWxsQWJicjogICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ2VsbC5hYmJyKCkp
OwotICAgIGNhc2UgVGFibGVDZWxsQWxpZ246ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxl
Q2VsbC5hbGlnbigpKTsKLSAgICBjYXNlIFRhYmxlQ2VsbEF4aXM6ICAgICAgICAgICAgcmV0dXJu
IFN0cmluZyh0YWJsZUNlbGwuYXhpcygpKTsKLSAgICBjYXNlIFRhYmxlQ2VsbEJnQ29sb3I6ICAg
ICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNlbGwuYmdDb2xvcigpKTsKLSAgICBjYXNlIFRhYmxl
Q2VsbENoOiAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNlbGwuY2goKSk7Ci0gICAg
Y2FzZSBUYWJsZUNlbGxDaE9mZjogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVDZWxsLmNo
T2ZmKCkpOwotICAgIGNhc2UgVGFibGVDZWxsQ29sU3BhbjogICAgICAgICByZXR1cm4gTnVtYmVy
KHRhYmxlQ2VsbC5jb2xTcGFuKCkpOwotICAgIGNhc2UgVGFibGVDZWxsSGVhZGVyczogICAgICAg
ICByZXR1cm4gU3RyaW5nKHRhYmxlQ2VsbC5oZWFkZXJzKCkpOwotICAgIGNhc2UgVGFibGVDZWxs
SGVpZ2h0OiAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ2VsbC5oZWlnaHQoKSk7Ci0gICAg
Y2FzZSBUYWJsZUNlbGxOb1dyYXA6ICAgICAgICAgIHJldHVybiBCb29sZWFuKHRhYmxlQ2VsbC5u
b1dyYXAoKSk7Ci0gICAgY2FzZSBUYWJsZUNlbGxSb3dTcGFuOiAgICAgICAgIHJldHVybiBOdW1i
ZXIodGFibGVDZWxsLnJvd1NwYW4oKSk7Ci0gICAgY2FzZSBUYWJsZUNlbGxTY29wZTogICAgICAg
ICAgIHJldHVybiBTdHJpbmcodGFibGVDZWxsLnNjb3BlKCkpOwotICAgIGNhc2UgVGFibGVDZWxs
VkFsaWduOiAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ2VsbC52QWxpZ24oKSk7Ci0gICAg
Y2FzZSBUYWJsZUNlbGxXaWR0aDogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVDZWxsLndp
ZHRoKCkpOworICAgICAgICBjYXNlIFVMaXN0Q29tcGFjdDogICAgICAgICByZXR1cm4gQm9vbGVh
bih1TGlzdC5jb21wYWN0KCkpOworICAgICAgICBjYXNlIFVMaXN0VHlwZTogICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKHVMaXN0LnR5cGUoKSk7CiAgICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNl
IElEX0ZSQU1FU0VUOiB7Ci0gICAgSFRNTEZyYW1lU2V0RWxlbWVudEltcGwgJmZyYW1lU2V0ID0g
c3RhdGljX2Nhc3Q8SFRNTEZyYW1lU2V0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgcmV0
dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6b0xpc3RHZXR0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTE9MaXN0RWxlbWVudElt
cGwmIG9MaXN0ID0gKnN0YXRpY19jYXN0PEhUTUxPTGlzdEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsK
ICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBGcmFtZVNldENvbHM6ICAgICAgICAgICAg
cmV0dXJuIFN0cmluZyhmcmFtZVNldC5jb2xzKCkpOwotICAgIGNhc2UgRnJhbWVTZXRSb3dzOiAg
ICAgICAgICAgIHJldHVybiBTdHJpbmcoZnJhbWVTZXQucm93cygpKTsKLSAgICB9Ci0gIH0KLSAg
YnJlYWs7Ci0gIGNhc2UgSURfRlJBTUU6IHsKLSAgICBIVE1MRnJhbWVFbGVtZW50SW1wbCAmZnJh
bWVFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEZyYW1lRWxlbWVudEltcGwgJj4oZWxlbWVudCk7
Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgRnJhbWVDb250ZW50RG9jdW1lbnQ6IHJl
dHVybiBjaGVja05vZGVTZWN1cml0eShleGVjLGZyYW1lRWxlbWVudC5jb250ZW50RG9jdW1lbnQo
KSkgPyAKLQkJCQkgICAgICBnZXRET01Ob2RlKGV4ZWMsIGZyYW1lRWxlbWVudC5jb250ZW50RG9j
dW1lbnQoKSkgOiBVbmRlZmluZWQoKTsKLSAgICBjYXNlIEZyYW1lQ29udGVudFdpbmRvdzogICBy
ZXR1cm4gY2hlY2tOb2RlU2VjdXJpdHkoZXhlYyxmcmFtZUVsZW1lbnQuY29udGVudERvY3VtZW50
KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFdpbmRvdzo6cmV0cmll
dmUoZnJhbWVFbGVtZW50LmNvbnRlbnRQYXJ0KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA6IFVuZGVmaW5lZCgpOwotICAgIGNhc2UgRnJhbWVGcmFtZUJvcmRlcjogICAg
IHJldHVybiBTdHJpbmcoZnJhbWVFbGVtZW50LmZyYW1lQm9yZGVyKCkpOwotICAgIGNhc2UgRnJh
bWVMb25nRGVzYzogICAgICAgIHJldHVybiBTdHJpbmcoZnJhbWVFbGVtZW50LmxvbmdEZXNjKCkp
OwotICAgIGNhc2UgRnJhbWVNYXJnaW5IZWlnaHQ6ICAgIHJldHVybiBTdHJpbmcoZnJhbWVFbGVt
ZW50Lm1hcmdpbkhlaWdodCgpKTsKLSAgICBjYXNlIEZyYW1lTWFyZ2luV2lkdGg6ICAgICByZXR1
cm4gU3RyaW5nKGZyYW1lRWxlbWVudC5tYXJnaW5XaWR0aCgpKTsKLSAgICBjYXNlIEZyYW1lTmFt
ZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGZyYW1lRWxlbWVudC5uYW1lKCkpOwotICAgIGNh
c2UgRnJhbWVOb1Jlc2l6ZTogICAgICAgIHJldHVybiBCb29sZWFuKGZyYW1lRWxlbWVudC5ub1Jl
c2l6ZSgpKTsKLSAgICBjYXNlIEZyYW1lU2Nyb2xsaW5nOiAgICAgICByZXR1cm4gU3RyaW5nKGZy
YW1lRWxlbWVudC5zY3JvbGxpbmcoKSk7Ci0gICAgY2FzZSBGcmFtZVNyYzoKLSAgICBjYXNlIEZy
YW1lTG9jYXRpb246ICAgICAgICByZXR1cm4gU3RyaW5nKGZyYW1lRWxlbWVudC5zcmMoKSk7Cisg
ICAgICAgIGNhc2UgT0xpc3RDb21wYWN0OiAgICAgICAgIHJldHVybiBCb29sZWFuKG9MaXN0LmNv
bXBhY3QoKSk7CisgICAgICAgIGNhc2UgT0xpc3RTdGFydDogICAgICAgICAgIHJldHVybiBOdW1i
ZXIob0xpc3Quc3RhcnQoKSk7CisgICAgICAgIGNhc2UgT0xpc3RUeXBlOiAgICAgICAgICAgIHJl
dHVybiBTdHJpbmcob0xpc3QudHlwZSgpKTsKICAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2Ug
SURfSUZSQU1FOiB7Ci0gICAgSFRNTElGcmFtZUVsZW1lbnRJbXBsICZpRnJhbWUgPSBzdGF0aWNf
Y2FzdDxIVE1MSUZyYW1lRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tl
bikgewotICAgIGNhc2UgSUZyYW1lQWxpZ246ICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmco
aUZyYW1lLmFsaWduKCkpOwotICAgICAgLy8gIyMjIHNlY3VyaXR5IGNoZWNrID8KLSAgICBjYXNl
IElGcmFtZURvY3VtZW50OiAvLyBub24tc3RhbmRhcmQsIG1hcHBlZCB0byBjb250ZW50RG9jdW1l
bnQKLSAgICBjYXNlIElGcmFtZUNvbnRlbnREb2N1bWVudDogcmV0dXJuIGNoZWNrTm9kZVNlY3Vy
aXR5KGV4ZWMsaUZyYW1lLmNvbnRlbnREb2N1bWVudCgpKSA/IAotCQkJCSAgZ2V0RE9NTm9kZShl
eGVjLCBpRnJhbWUuY29udGVudERvY3VtZW50KCkpIDogVW5kZWZpbmVkKCk7Ci0gICAgY2FzZSBJ
RnJhbWVDb250ZW50V2luZG93OglyZXR1cm4gY2hlY2tOb2RlU2VjdXJpdHkoZXhlYyxpRnJhbWUu
Y29udGVudERvY3VtZW50KCkpIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
PyBXaW5kb3c6OnJldHJpZXZlKGlGcmFtZS5jb250ZW50UGFydCgpKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOiBVbmRlZmluZWQoKTsKLSAgICBjYXNlIElGcmFtZUZyYW1l
Qm9yZGVyOiAgICAgcmV0dXJuIFN0cmluZyhpRnJhbWUuZnJhbWVCb3JkZXIoKSk7Ci0gICAgY2Fz
ZSBJRnJhbWVIZWlnaHQ6ICAgICAgICAgIHJldHVybiBTdHJpbmcoaUZyYW1lLmhlaWdodCgpKTsK
LSAgICBjYXNlIElGcmFtZUxvbmdEZXNjOiAgICAgICAgcmV0dXJuIFN0cmluZyhpRnJhbWUubG9u
Z0Rlc2MoKSk7Ci0gICAgY2FzZSBJRnJhbWVNYXJnaW5IZWlnaHQ6ICAgIHJldHVybiBTdHJpbmco
aUZyYW1lLm1hcmdpbkhlaWdodCgpKTsKLSAgICBjYXNlIElGcmFtZU1hcmdpbldpZHRoOiAgICAg
cmV0dXJuIFN0cmluZyhpRnJhbWUubWFyZ2luV2lkdGgoKSk7Ci0gICAgY2FzZSBJRnJhbWVOYW1l
OiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoaUZyYW1lLm5hbWUoKSk7Ci0gICAgY2FzZSBJRnJh
bWVTY3JvbGxpbmc6ICAgICAgIHJldHVybiBTdHJpbmcoaUZyYW1lLnNjcm9sbGluZygpKTsKLSAg
ICBjYXNlIElGcmFtZVNyYzogICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpRnJhbWUuc3JjKCkp
OwotICAgIGNhc2UgSUZyYW1lV2lkdGg6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGlGcmFtZS53
aWR0aCgpKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0gIH0KLSAgfSAvLyB4ZW1hY3MgKG9yIGFybnQp
IGNvdWxkIGJlIGEgYml0IHNtYXJ0ZXIgd2hlbiBpdCBjb21lcyB0byBpbmRlbnRpbmcgc3dpdGNo
KCllcyA7KQotICAvLyBpdHMgbm90IGFybnQgdG8gYmxhbWUgLSBpdHMgdGhlIG9yaWdpbmFsIFN0
cm91c3RydXAgc3R5bGUgd2UgbGlrZSA6KSAoRGlyaykKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7
Cit9CiAKLSAgLy8gZ2VuZXJpYyBwcm9wZXJ0aWVzCi0gIHN3aXRjaCAodG9rZW4pIHsKLSAgY2Fz
ZSBFbGVtZW50SWQ6Ci0gICAgICAvLyBpaHQuY29tIHJlbGllcyBvbiB0aGlzIHZhbHVlIGJlaW5n
ICIiIHdoZW4gbm8gaWQgaXMgcHJlc2VudC4gIE90aGVyIGJyb3dzZXJzIGRvIHRoaXMgYXMgd2Vs
bC4KLSAgICAgIC8vIFNvIHdlIHVzZSBTdHJpbmcoKSBpbnN0ZWFkIG9mIFN0cmluZygpIGhlcmUu
Ci0gICAgcmV0dXJuIFN0cmluZyhlbGVtZW50LmlkRE9NKCkpOwotICBjYXNlIEVsZW1lbnRUaXRs
ZToKLSAgICByZXR1cm4gU3RyaW5nKGVsZW1lbnQudGl0bGUoKSk7Ci0gIGNhc2UgRWxlbWVudExh
bmc6Ci0gICAgcmV0dXJuIFN0cmluZyhlbGVtZW50LmxhbmcoKSk7Ci0gIGNhc2UgRWxlbWVudERp
cjoKLSAgICByZXR1cm4gU3RyaW5nKGVsZW1lbnQuZGlyKCkpOwotICBjYXNlIEVsZW1lbnRDbGFz
c05hbWU6Ci0gICAgcmV0dXJuIFN0cmluZyhlbGVtZW50LmNsYXNzTmFtZSgpKTsKLSAgY2FzZSBF
bGVtZW50SW5uZXJIVE1MOgotICAgIHJldHVybiBTdHJpbmcoZWxlbWVudC5pbm5lckhUTUwoKSk7
Ci0gIGNhc2UgRWxlbWVudElubmVyVGV4dDoKLSAgICBpZiAoRG9jdW1lbnRJbXBsKiBkb2MgPSBp
bXBsKCktPmdldERvY3VtZW50KCkpCi0gICAgICBkb2MtPnVwZGF0ZUxheW91dElnbm9yZVBlbmRp
bmdTdHlsZXNoZWV0cygpOwotICAgIHJldHVybiBTdHJpbmcoZWxlbWVudC5pbm5lclRleHQoKSk7
Ci0gIGNhc2UgRWxlbWVudE91dGVySFRNTDoKLSAgICByZXR1cm4gU3RyaW5nKGVsZW1lbnQub3V0
ZXJIVE1MKCkpOwotICBjYXNlIEVsZW1lbnRPdXRlclRleHQ6Ci0gICAgcmV0dXJuIFN0cmluZyhl
bGVtZW50Lm91dGVyVGV4dCgpKTsKLSAgY2FzZSBFbGVtZW50RG9jdW1lbnQ6Ci0gICAgcmV0dXJu
IGdldERPTU5vZGUoZXhlYyxlbGVtZW50Lm93bmVyRG9jdW1lbnQoKSk7Ci0gIGNhc2UgRWxlbWVu
dENoaWxkcmVuOgotICAgIHJldHVybiBnZXRIVE1MQ29sbGVjdGlvbihleGVjLCBlbGVtZW50LmNo
aWxkcmVuKCkuZ2V0KCkpOwotICBjYXNlIEVsZW1lbnRDb250ZW50RWRpdGFibGU6Ci0gICAgcmV0
dXJuIFN0cmluZyhlbGVtZW50LmNvbnRlbnRFZGl0YWJsZSgpKTsKLSAgY2FzZSBFbGVtZW50SXND
b250ZW50RWRpdGFibGU6Ci0gICAgcmV0dXJuIEJvb2xlYW4oZWxlbWVudC5pc0NvbnRlbnRFZGl0
YWJsZSgpKTsKLSAgLy8gIyMjIHdoYXQgYWJvdXQgc3R5bGU/IG9yIGlzIHRoaXMgdXNlZCBpbnN0
ZWFkIGZvciBET00yIHN0eWxlc2hlZXRzPwotICB9Ci0gIGtkV2FybmluZygpIDw8ICJIVE1MRWxl
bWVudDo6Z2V0VmFsdWVQcm9wZXJ0eSB1bmhhbmRsZWQgdG9rZW4gIiA8PCB0b2tlbiA8PCBlbmRs
OwotICByZXR1cm4gVW5kZWZpbmVkKCk7CitWYWx1ZSBIVE1MRWxlbWVudDo6ZExpc3RHZXR0ZXIo
RXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTERMaXN0RWxlbWVu
dEltcGwmIGRMaXN0ID0gKnN0YXRpY19jYXN0PEhUTUxETGlzdEVsZW1lbnRJbXBsKj4oaW1wbCgp
KTsKKyAgICBpZiAodG9rZW4gPT0gRExpc3RDb21wYWN0KQorICAgICAgICByZXR1cm4gQm9vbGVh
bihkTGlzdC5jb21wYWN0KCkpOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotYm9vbCBL
SlM6OkhUTUxFbGVtZW50OjpoYXNQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50
aWZpZXIgJnByb3BlcnR5TmFtZSkgY29uc3QKK1ZhbHVlIEhUTUxFbGVtZW50OjpkaXJHZXR0ZXIo
RXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7Ci0jaWZkZWYgS0pTX1ZFUkJPU0UK
LSAgLy9rZERlYnVnKDYwNzApIDw8ICJIVE1MRWxlbWVudDo6aGFzUHJvcGVydHkgIiA8PCBwcm9w
ZXJ0eU5hbWUucXN0cmluZygpIDw8IGVuZGw7Ci0jZW5kaWYKLSAgSFRNTEVsZW1lbnRJbXBsICZl
bGVtZW50ID0gKnN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCAqPihpbXBsKCkpOwotICAvLyBG
aXJzdCBsb29rIGF0IGR5bmFtaWMgcHJvcGVydGllcyAtIGtlZXAgdGhpcyBpbiBzeW5jIHdpdGgg
dHJ5R2V0Ci0gIHN3aXRjaCAoZWxlbWVudC5pZCgpKSB7Ci0gICAgY2FzZSBJRF9GT1JNOiB7Ci0g
ICAgICBIVE1MRm9ybUVsZW1lbnRJbXBsICZmb3JtID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVt
ZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIC8vIENoZWNrIGlmIHdlJ3JlIHJldHJpZXZpbmcg
YW4gZWxlbWVudCAoYnkgaW5kZXggb3IgYnkgbmFtZSkKLSAgICAgIGJvb2wgb2s7Ci0gICAgICB1
aW50IHUgPSBwcm9wZXJ0eU5hbWUudG9VTG9uZygmb2spOwotICAgICAgaWYgKG9rICYmIGZvcm0u
ZWxlbWVudHMoKS0+aXRlbSh1KSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICBpZiAoZm9y
bS5lbGVtZW50cygpLT5uYW1lZEl0ZW0ocHJvcGVydHlOYW1lLnN0cmluZygpKSkKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBJRF9TRUxFQ1Q6IHsK
LSAgICAgIEhUTUxTZWxlY3RFbGVtZW50SW1wbCAmc2VsZWN0ID0gc3RhdGljX2Nhc3Q8SFRNTFNl
bGVjdEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgYm9vbCBvazsKLSAgICAgIHVpbnQg
dSA9IHByb3BlcnR5TmFtZS50b1VMb25nKCZvayk7Ci0gICAgICBpZiAob2sgJiYgc2VsZWN0Lm9w
dGlvbnNIVE1MQ29sbGVjdGlvbigpLT5pdGVtKHUpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KKyAgICBI
VE1MRGlyZWN0b3J5RWxlbWVudEltcGwmIGRpciA9ICpzdGF0aWNfY2FzdDxIVE1MRGlyZWN0b3J5
RWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIGlmICh0b2tlbiA9PSBEaXJlY3RvcnlDb21wYWN0
KQorICAgICAgICByZXR1cm4gQm9vbGVhbihkaXIuY29tcGFjdCgpKTsKKyAgICByZXR1cm4gVW5k
ZWZpbmVkKCk7Cit9CiAKLSAgcmV0dXJuIERPTUVsZW1lbnQ6Omhhc1Byb3BlcnR5KGV4ZWMsIHBy
b3BlcnR5TmFtZSk7CitWYWx1ZSBIVE1MRWxlbWVudDo6bWVudUdldHRlcihFeGVjU3RhdGUqIGV4
ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MTWVudUVsZW1lbnRJbXBsJiBtZW51ID0g
KnN0YXRpY19jYXN0PEhUTUxNZW51RWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIGlmICh0b2tl
biA9PSBNZW51Q29tcGFjdCkKKyAgICAgICAgcmV0dXJuIEJvb2xlYW4obWVudS5jb21wYWN0KCkp
OworICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotVVN0cmluZyBLSlM6OkhUTUxFbGVtZW50
Ojp0b1N0cmluZyhFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0CitWYWx1ZSBIVE1MRWxlbWVudDo6bGlH
ZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7Ci0gIGlmIChpbXBsKCkt
PmlkKCkgPT0gSURfQSkKLSAgICByZXR1cm4gVVN0cmluZyhzdGF0aWNfY2FzdDxjb25zdCBIVE1M
QW5jaG9yRWxlbWVudEltcGwgKj4oaW1wbCgpKS0+aHJlZigpKTsKLSAgZWxzZQotICAgIHJldHVy
biBET01FbGVtZW50Ojp0b1N0cmluZyhleGVjKTsKKyAgICBIVE1MTElFbGVtZW50SW1wbCYgbGkg
PSAqc3RhdGljX2Nhc3Q8SFRNTExJRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAo
dG9rZW4pIHsKKyAgICAgICAgY2FzZSBMSVR5cGU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhs
aS50eXBlKCkpOworICAgICAgICBjYXNlIExJVmFsdWU6ICAgICAgICAgICByZXR1cm4gTnVtYmVy
KGxpLnZhbHVlKCkpOworICAgIH0KKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRp
YyBIVE1MRm9ybUVsZW1lbnRJbXBsICpnZXRGb3JtKEhUTUxFbGVtZW50SW1wbCAqZWxlbWVudCkK
K1ZhbHVlIEhUTUxFbGVtZW50OjpkaXZHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4p
IGNvbnN0CiB7Ci0gIGlmIChlbGVtZW50LT5pc0dlbmVyaWNGb3JtRWxlbWVudCgpKQotICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbCAqPihlbGVtZW50KS0+
Zm9ybSgpOworICAgIEhUTUxEaXZFbGVtZW50SW1wbCYgZGl2ID0gKnN0YXRpY19jYXN0PEhUTUxE
aXZFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IERpdkFsaWduKQorICAg
ICAgICByZXR1cm4gU3RyaW5nKGRpdi5hbGlnbigpKTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7
Cit9CiAKLSAgc3dpdGNoIChlbGVtZW50LT5pZCgpKSB7Ci0gICAgY2FzZSBJRF9MQUJFTDoKLSAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MTGFiZWxFbGVtZW50SW1wbCAqPihlbGVtZW50KS0+
Zm9ybSgpOwotICAgIGNhc2UgSURfT0JKRUNUOgotICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhU
TUxPYmplY3RFbGVtZW50SW1wbCAqPihlbGVtZW50KS0+Zm9ybSgpOwotICB9CitWYWx1ZSBIVE1M
RWxlbWVudDo6cGFyYWdyYXBoR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25z
dAoreworICAgIEhUTUxQYXJhZ3JhcGhFbGVtZW50SW1wbCYgcCA9ICpzdGF0aWNfY2FzdDxIVE1M
UGFyYWdyYXBoRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIGlmICh0b2tlbiA9PSBQYXJhZ3Jh
cGhBbGlnbikKKyAgICAgICAgcmV0dXJuIFN0cmluZyhwLmFsaWduKCkpOworICAgIHJldHVybiBV
bmRlZmluZWQoKTsKK30KIAotICByZXR1cm4gMDsKK1ZhbHVlIEhUTUxFbGVtZW50OjpoZWFkaW5n
R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxIZWFk
aW5nRWxlbWVudEltcGwmIGggPSAqc3RhdGljX2Nhc3Q8SFRNTEhlYWRpbmdFbGVtZW50SW1wbCo+
KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IEhlYWRpbmdBbGlnbikKKyAgICAgICAgcmV0dXJu
IFN0cmluZyhoLmFsaWduKCkpOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotdm9pZCBL
SlM6OkhUTUxFbGVtZW50OjpwdXNoRXZlbnRIYW5kbGVyU2NvcGUoRXhlY1N0YXRlICpleGVjLCBT
Y29wZUNoYWluICZzY29wZSkgY29uc3QKK1ZhbHVlIEhUTUxFbGVtZW50OjpibG9ja1F1b3RlR2V0
dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxCbG9ja3F1
b3RlRWxlbWVudEltcGwmIGJsb2NrUXVvdGUgPSAqc3RhdGljX2Nhc3Q8SFRNTEJsb2NrcXVvdGVF
bGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IEJsb2NrUXVvdGVDaXRlKQor
ICAgICAgICByZXR1cm4gU3RyaW5nKGJsb2NrUXVvdGUuY2l0ZSgpKTsKKyAgICByZXR1cm4gVW5k
ZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50OjpxdW90ZUdldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MUXVvdGVFbGVtZW50SW1wbCYgcXVv
dGUgPSAqc3RhdGljX2Nhc3Q8SFRNTFF1b3RlRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIGlm
ICh0b2tlbiA9PSBRdW90ZUNpdGUpCisgICAgICAgIHJldHVybiBTdHJpbmcocXVvdGUuY2l0ZSgp
KTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50OjpwcmVH
ZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgLy8gRklYTUU6
IEFkZCBzdXBwb3J0IGZvciAnd3JhcCcgd2hlbiB3aGl0ZS1zcGFjZTogcHJlLXdyYXAgaXMgaW1w
bGVtZW50ZWQuCisgICAgSFRNTFByZUVsZW1lbnRJbXBsJiBwcmUgPSAqc3RhdGljX2Nhc3Q8SFRN
TFByZUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBpZiAodG9rZW4gPT0gUHJlV2lkdGgpCisg
ICAgICAgIHJldHVybiBOdW1iZXIocHJlLndpZHRoKCkpOworICAgIHJldHVybiBVbmRlZmluZWQo
KTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OmJyR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50
IHRva2VuKSBjb25zdAoreworICAgIEhUTUxCUkVsZW1lbnRJbXBsJiBiciA9ICpzdGF0aWNfY2Fz
dDxIVE1MQlJFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IEJSQ2xlYXIp
CisgICAgICAgIHJldHVybiBTdHJpbmcoYnIuY2xlYXIoKSk7CisgICAgcmV0dXJuIFVuZGVmaW5l
ZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6YmFzZUZvbnRHZXR0ZXIoRXhlY1N0YXRlKiBl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTEJhc2VGb250RWxlbWVudEltcGwmIGJh
c2VGb250ID0gKnN0YXRpY19jYXN0PEhUTUxCYXNlRm9udEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsK
KyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgQmFzZUZvbnRDb2xvcjogICAgICAg
ICAgIHJldHVybiBTdHJpbmcoYmFzZUZvbnQuY29sb3IoKSk7CisgICAgICAgIGNhc2UgQmFzZUZv
bnRGYWNlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYmFzZUZvbnQuZmFjZSgpKTsKKyAgICAg
ICAgY2FzZSBCYXNlRm9udFNpemU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhiYXNlRm9udC5z
aXplKCkpOworICAgIH0KKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxF
bGVtZW50Ojpmb250R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAorewor
ICAgIEhUTUxGb250RWxlbWVudEltcGwmIGZvbnQgPSAqc3RhdGljX2Nhc3Q8SFRNTEZvbnRFbGVt
ZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNlIEZv
bnRDb2xvcjogICAgICAgICAgIHJldHVybiBTdHJpbmcoZm9udC5jb2xvcigpKTsKKyAgICAgICAg
Y2FzZSBGb250RmFjZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGZvbnQuZmFjZSgpKTsKKyAg
ICAgICAgY2FzZSBGb250U2l6ZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGZvbnQuc2l6ZSgp
KTsKKyAgICB9CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVu
dDo6aHJHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRN
TEhSRWxlbWVudEltcGwmIGhyID0gKnN0YXRpY19jYXN0PEhUTUxIUkVsZW1lbnRJbXBsKj4oaW1w
bCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgSFJBbGlnbjogICAgICAg
ICAgIHJldHVybiBTdHJpbmcoaHIuYWxpZ24oKSk7CisgICAgICAgIGNhc2UgSFJOb1NoYWRlOiAg
ICAgICAgIHJldHVybiBCb29sZWFuKGhyLm5vU2hhZGUoKSk7CisgICAgICAgIGNhc2UgSFJTaXpl
OiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoaHIuc2l6ZSgpKTsKKyAgICAgICAgY2FzZSBIUldp
ZHRoOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhoci53aWR0aCgpKTsKKyAgICB9CisgICAgcmV0
dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6bW9kR2V0dGVyKEV4ZWNT
dGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxNb2RFbGVtZW50SW1wbCYg
bW9kID0gKnN0YXRpY19jYXN0PEhUTUxNb2RFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dp
dGNoICh0b2tlbikgeworICAgICAgICBjYXNlIE1vZENpdGU6ICAgICAgICAgICAgcmV0dXJuIFN0
cmluZyhtb2QuY2l0ZSgpKTsKKyAgICAgICAgY2FzZSBNb2REYXRlVGltZTogICAgICAgIHJldHVy
biBTdHJpbmcobW9kLmRhdGVUaW1lKCkpOworICAgIH0KKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7
Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50OjphbmNob3JHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBp
bnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTEFuY2hvckVsZW1lbnRJbXBsJiBhbmNob3IgPSAq
c3RhdGljX2Nhc3Q8SFRNTEFuY2hvckVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2gg
KHRva2VuKSB7CisgICAgICAgIGNhc2UgQW5jaG9yQWNjZXNzS2V5OiAgICAgICByZXR1cm4gU3Ry
aW5nKGFuY2hvci5hY2Nlc3NLZXkoKSk7CisgICAgICAgIGNhc2UgQW5jaG9yQ2hhcnNldDogICAg
ICAgICByZXR1cm4gU3RyaW5nKGFuY2hvci5jaGFyc2V0KCkpOworICAgICAgICBjYXNlIEFuY2hv
ckNvb3JkczogICAgICAgICAgcmV0dXJuIFN0cmluZyhhbmNob3IuY29vcmRzKCkpOworICAgICAg
ICBjYXNlIEFuY2hvckhyZWY6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhhbmNob3IuaHJlZigp
KTsKKyAgICAgICAgY2FzZSBBbmNob3JIcmVmTGFuZzogICAgICAgIHJldHVybiBTdHJpbmcoYW5j
aG9yLmhyZWZsYW5nKCkpOworICAgICAgICBjYXNlIEFuY2hvckhhc2g6ICAgICAgICAgICAgcmV0
dXJuIFN0cmluZygnIycrS1VSTChhbmNob3IuaHJlZigpLnN0cmluZygpKS5yZWYoKSk7CisgICAg
ICAgIGNhc2UgQW5jaG9ySG9zdDogICAgICAgICAgICByZXR1cm4gU3RyaW5nKEtVUkwoYW5jaG9y
LmhyZWYoKS5zdHJpbmcoKSkuaG9zdCgpKTsKKyAgICAgICAgY2FzZSBBbmNob3JIb3N0bmFtZTog
eworICAgICAgICAgICAgS1VSTCB1cmwoYW5jaG9yLmhyZWYoKS5zdHJpbmcoKSk7CisgICAgICAg
ICAgICBrZERlYnVnKDYwNzApIDw8ICJhbmNob3I6Omhvc3RuYW1lIHVzZXM6IiA8PHVybC51cmwo
KTw8ZW5kbDsKKyAgICAgICAgICAgIGlmICh1cmwucG9ydCgpPT0wKQorICAgICAgICAgICAgICAg
IHJldHVybiBTdHJpbmcodXJsLmhvc3QoKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgcmV0dXJuIFN0cmluZyh1cmwuaG9zdCgpICsgIjoiICsgUVN0cmluZzo6bnVtYmVyKHVy
bC5wb3J0KCkpKTsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEFuY2hvclBhdGhOYW1lOiAgICAg
ICAgcmV0dXJuIFN0cmluZyhLVVJMKGFuY2hvci5ocmVmKCkuc3RyaW5nKCkpLnBhdGgoKSk7Cisg
ICAgICAgIGNhc2UgQW5jaG9yUG9ydDogICAgICAgICAgICByZXR1cm4gU3RyaW5nKFFTdHJpbmc6
Om51bWJlcihLVVJMKGFuY2hvci5ocmVmKCkuc3RyaW5nKCkpLnBvcnQoKSkpOworICAgICAgICBj
YXNlIEFuY2hvclByb3RvY29sOiAgICAgICAgcmV0dXJuIFN0cmluZyhLVVJMKGFuY2hvci5ocmVm
KCkuc3RyaW5nKCkpLnByb3RvY29sKCkrIjoiKTsKKyAgICAgICAgY2FzZSBBbmNob3JTZWFyY2g6
ICAgICAgICAgIHJldHVybiBTdHJpbmcoS1VSTChhbmNob3IuaHJlZigpLnN0cmluZygpKS5xdWVy
eSgpKTsKKyAgICAgICAgY2FzZSBBbmNob3JOYW1lOiAgICAgICAgICAgIHJldHVybiBTdHJpbmco
YW5jaG9yLm5hbWUoKSk7CisgICAgICAgIGNhc2UgQW5jaG9yUmVsOiAgICAgICAgICAgICByZXR1
cm4gU3RyaW5nKGFuY2hvci5yZWwoKSk7CisgICAgICAgIGNhc2UgQW5jaG9yUmV2OiAgICAgICAg
ICAgICByZXR1cm4gU3RyaW5nKGFuY2hvci5yZXYoKSk7CisgICAgICAgIGNhc2UgQW5jaG9yU2hh
cGU6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGFuY2hvci5zaGFwZSgpKTsKKyAgICAgICAgY2Fz
ZSBBbmNob3JUYWJJbmRleDogICAgICAgIHJldHVybiBOdW1iZXIoYW5jaG9yLnRhYkluZGV4KCkp
OworICAgICAgICBjYXNlIEFuY2hvclRhcmdldDogICAgICAgICAgcmV0dXJuIFN0cmluZyhhbmNo
b3IudGFyZ2V0KCkpOworICAgICAgICBjYXNlIEFuY2hvclR5cGU6ICAgICAgICAgICAgcmV0dXJu
IFN0cmluZyhhbmNob3IudHlwZSgpKTsKKyAgICAgICAgY2FzZSBBbmNob3JUZXh0OgorICAgICAg
ICAgICAgaWYgKERvY3VtZW50SW1wbCogZG9jID0gYW5jaG9yLmdldERvY3VtZW50KCkpCisgICAg
ICAgICAgICAgICAgZG9jLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsK
KyAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYW5jaG9yLmlubmVyVGV4dCgpKTsKKyAgICB9Cisg
ICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6aW1hZ2VHZXR0
ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTEltYWdlRWxl
bWVudEltcGwmIGltYWdlID0gKnN0YXRpY19jYXN0PEhUTUxJbWFnZUVsZW1lbnRJbXBsKj4oaW1w
bCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgSW1hZ2VOYW1lOiAgICAg
ICAgICAgIHJldHVybiBTdHJpbmcoaW1hZ2UubmFtZSgpKTsKKyAgICAgICAgY2FzZSBJbWFnZUFs
aWduOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpbWFnZS5hbGlnbigpKTsKKyAgICAgICAgY2Fz
ZSBJbWFnZUFsdDogICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpbWFnZS5hbHQoKSk7CisgICAg
ICAgIGNhc2UgSW1hZ2VCb3JkZXI6ICAgICAgICAgIHJldHVybiBOdW1iZXIoaW1hZ2UuYm9yZGVy
KCkpOworICAgICAgICBjYXNlIEltYWdlSGVpZ2h0OiAgICAgICAgICByZXR1cm4gTnVtYmVyKGlt
YWdlLmhlaWdodCh0cnVlKSk7CisgICAgICAgIGNhc2UgSW1hZ2VIc3BhY2U6ICAgICAgICAgIHJl
dHVybiBOdW1iZXIoaW1hZ2UuaHNwYWNlKCkpOworICAgICAgICBjYXNlIEltYWdlSXNNYXA6ICAg
ICAgICAgICByZXR1cm4gQm9vbGVhbihpbWFnZS5pc01hcCgpKTsKKyAgICAgICAgY2FzZSBJbWFn
ZUxvbmdEZXNjOiAgICAgICAgcmV0dXJuIFN0cmluZyhpbWFnZS5sb25nRGVzYygpKTsKKyAgICAg
ICAgY2FzZSBJbWFnZVNyYzogICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpbWFnZS5zcmMoKSk7
CisgICAgICAgIGNhc2UgSW1hZ2VVc2VNYXA6ICAgICAgICAgIHJldHVybiBTdHJpbmcoaW1hZ2Uu
dXNlTWFwKCkpOworICAgICAgICBjYXNlIEltYWdlVnNwYWNlOiAgICAgICAgICByZXR1cm4gTnVt
YmVyKGltYWdlLnZzcGFjZSgpKTsKKyAgICAgICAgY2FzZSBJbWFnZVdpZHRoOiAgICAgICAgICAg
cmV0dXJuIE51bWJlcihpbWFnZS53aWR0aCh0cnVlKSk7CisgICAgICAgIGNhc2UgSW1hZ2VYOiAg
ICAgICAgICAgICAgIHJldHVybiBOdW1iZXIoaW1hZ2UueCgpKTsKKyAgICAgICAgY2FzZSBJbWFn
ZVk6ICAgICAgICAgICAgICAgcmV0dXJuIE51bWJlcihpbWFnZS55KCkpOworICAgIH0KKyAgICBy
ZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50OjpvYmplY3RHZXR0ZXIo
RXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTE9iamVjdEVsZW1l
bnRJbXBsJiBvYmplY3QgPSAqc3RhdGljX2Nhc3Q8SFRNTE9iamVjdEVsZW1lbnRJbXBsKj4oaW1w
bCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgT2JqZWN0Rm9ybTogICAg
ICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLG9iamVjdC5mb3JtKCkpOyAvLyB0eXBlIEhU
TUxGb3JtRWxlbWVudAorICAgICAgICBjYXNlIE9iamVjdENvZGU6ICAgICAgICAgICAgcmV0dXJu
IFN0cmluZyhvYmplY3QuY29kZSgpKTsKKyAgICAgICAgY2FzZSBPYmplY3RBbGlnbjogICAgICAg
ICAgIHJldHVybiBTdHJpbmcob2JqZWN0LmFsaWduKCkpOworICAgICAgICBjYXNlIE9iamVjdEFy
Y2hpdmU6ICAgICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3QuYXJjaGl2ZSgpKTsKKyAgICAgICAg
Y2FzZSBPYmplY3RCb3JkZXI6ICAgICAgICAgIHJldHVybiBTdHJpbmcob2JqZWN0LmJvcmRlcigp
KTsKKyAgICAgICAgY2FzZSBPYmplY3RDb2RlQmFzZTogICAgICAgIHJldHVybiBTdHJpbmcob2Jq
ZWN0LmNvZGVCYXNlKCkpOworICAgICAgICBjYXNlIE9iamVjdENvZGVUeXBlOiAgICAgICAgcmV0
dXJuIFN0cmluZyhvYmplY3QuY29kZVR5cGUoKSk7CisgICAgICAgIGNhc2UgT2JqZWN0Q29udGVu
dERvY3VtZW50OiByZXR1cm4gY2hlY2tOb2RlU2VjdXJpdHkoZXhlYyxvYmplY3QuY29udGVudERv
Y3VtZW50KCkpID8gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z2V0RE9NTm9kZShleGVjLCBvYmplY3QuY29udGVudERvY3VtZW50KCkpIDogVW5kZWZpbmVkKCk7
CisgICAgICAgIGNhc2UgT2JqZWN0RGF0YTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKG9iamVj
dC5kYXRhKCkpOworICAgICAgICBjYXNlIE9iamVjdERlY2xhcmU6ICAgICAgICAgcmV0dXJuIEJv
b2xlYW4ob2JqZWN0LmRlY2xhcmUoKSk7CisgICAgICAgIGNhc2UgT2JqZWN0SGVpZ2h0OiAgICAg
ICAgICByZXR1cm4gU3RyaW5nKG9iamVjdC5oZWlnaHQoKSk7CisgICAgICAgIGNhc2UgT2JqZWN0
SHNwYWNlOiAgICAgICAgICByZXR1cm4gU3RyaW5nKG9iamVjdC5oc3BhY2UoKSk7CisgICAgICAg
IGNhc2UgT2JqZWN0TmFtZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKG9iamVjdC5uYW1lKCkp
OworICAgICAgICBjYXNlIE9iamVjdFN0YW5kYnk6ICAgICAgICAgcmV0dXJuIFN0cmluZyhvYmpl
Y3Quc3RhbmRieSgpKTsKKyAgICAgICAgY2FzZSBPYmplY3RUYWJJbmRleDogICAgICAgIHJldHVy
biBOdW1iZXIob2JqZWN0LnRhYkluZGV4KCkpOworICAgICAgICBjYXNlIE9iamVjdFR5cGU6ICAg
ICAgICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3QudHlwZSgpKTsKKyAgICAgICAgY2FzZSBPYmpl
Y3RVc2VNYXA6ICAgICAgICAgIHJldHVybiBTdHJpbmcob2JqZWN0LnVzZU1hcCgpKTsKKyAgICAg
ICAgY2FzZSBPYmplY3RWc3BhY2U6ICAgICAgICAgIHJldHVybiBTdHJpbmcob2JqZWN0LnZzcGFj
ZSgpKTsKKyAgICAgICAgY2FzZSBPYmplY3RXaWR0aDogICAgICAgICAgIHJldHVybiBTdHJpbmco
b2JqZWN0LndpZHRoKCkpOworICAgIH0KKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1Zh
bHVlIEhUTUxFbGVtZW50OjpwYXJhbUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikg
Y29uc3QKK3sKKyAgICBIVE1MUGFyYW1FbGVtZW50SW1wbCYgcGFyYW0gPSAqc3RhdGljX2Nhc3Q8
SFRNTFBhcmFtRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAg
ICAgICAgY2FzZSBQYXJhbU5hbWU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhwYXJhbS5uYW1l
KCkpOworICAgICAgICBjYXNlIFBhcmFtVHlwZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKHBh
cmFtLnR5cGUoKSk7CisgICAgICAgIGNhc2UgUGFyYW1WYWx1ZTogICAgICAgICAgIHJldHVybiBT
dHJpbmcocGFyYW0udmFsdWUoKSk7CisgICAgICAgIGNhc2UgUGFyYW1WYWx1ZVR5cGU6ICAgICAg
IHJldHVybiBTdHJpbmcocGFyYW0udmFsdWVUeXBlKCkpOworICAgIH0KKyAgICByZXR1cm4gVW5k
ZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50OjphcHBsZXRHZXR0ZXIoRXhlY1N0YXRl
KiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTEFwcGxldEVsZW1lbnRJbXBsJiBh
cHBsZXQgPSAqc3RhdGljX2Nhc3Q8SFRNTEFwcGxldEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAg
ICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgQXBwbGV0QWxpZ246ICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKGFwcGxldC5hbGlnbigpKTsKKyAgICAgICAgY2FzZSBBcHBsZXRBbHQ6ICAg
ICAgICAgICAgIHJldHVybiBTdHJpbmcoYXBwbGV0LmFsdCgpKTsKKyAgICAgICAgY2FzZSBBcHBs
ZXRBcmNoaXZlOiAgICAgICAgIHJldHVybiBTdHJpbmcoYXBwbGV0LmFyY2hpdmUoKSk7CisgICAg
ICAgIGNhc2UgQXBwbGV0Q29kZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGFwcGxldC5jb2Rl
KCkpOworICAgICAgICBjYXNlIEFwcGxldENvZGVCYXNlOiAgICAgICAgcmV0dXJuIFN0cmluZyhh
cHBsZXQuY29kZUJhc2UoKSk7CisgICAgICAgIGNhc2UgQXBwbGV0SGVpZ2h0OiAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKGFwcGxldC5oZWlnaHQoKSk7CisgICAgICAgIGNhc2UgQXBwbGV0SHNwYWNl
OiAgICAgICAgICByZXR1cm4gU3RyaW5nKGFwcGxldC5oc3BhY2UoKSk7CisgICAgICAgIGNhc2Ug
QXBwbGV0TmFtZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGFwcGxldC5uYW1lKCkpOworICAg
ICAgICBjYXNlIEFwcGxldE9iamVjdDogICAgICAgICAgcmV0dXJuIFN0cmluZyhhcHBsZXQub2Jq
ZWN0KCkpOworICAgICAgICBjYXNlIEFwcGxldFZzcGFjZTogICAgICAgICAgcmV0dXJuIFN0cmlu
ZyhhcHBsZXQudnNwYWNlKCkpOworICAgICAgICBjYXNlIEFwcGxldFdpZHRoOiAgICAgICAgICAg
cmV0dXJuIFN0cmluZyhhcHBsZXQud2lkdGgoKSk7CisgICAgfQorICAgIHJldHVybiBVbmRlZmlu
ZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6Om1hcEdldHRlcihFeGVjU3RhdGUqIGV4ZWMs
IGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MTWFwRWxlbWVudEltcGwmIG1hcCA9ICpzdGF0
aWNfY2FzdDxIVE1MTWFwRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4p
IHsKKyAgICAgICAgY2FzZSBNYXBBcmVhczogICAgICAgICAgIHJldHVybiBnZXRIVE1MQ29sbGVj
dGlvbihleGVjLCBtYXAuYXJlYXMoKS5nZXQoKSk7IC8vIHR5cGUgSFRNTENvbGxlY3Rpb24KKyAg
ICAgICAgY2FzZSBNYXBOYW1lOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcobWFwLm5hbWUoKSk7
CisgICAgfQorICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6
OmFyZWFHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRN
TEFyZWFFbGVtZW50SW1wbCYgYXJlYSA9ICpzdGF0aWNfY2FzdDxIVE1MQXJlYUVsZW1lbnRJbXBs
Kj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgQXJlYUFjY2Vz
c0tleTogICAgICAgcmV0dXJuIFN0cmluZyhhcmVhLmFjY2Vzc0tleSgpKTsKKyAgICAgICAgY2Fz
ZSBBcmVhQWx0OiAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGFyZWEuYWx0KCkpOworICAgICAg
ICBjYXNlIEFyZWFDb29yZHM6ICAgICAgICAgIHJldHVybiBTdHJpbmcoYXJlYS5jb29yZHMoKSk7
CisgICAgICAgIGNhc2UgQXJlYUhyZWY6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhhcmVhLmhy
ZWYoKSk7CisgICAgICAgIGNhc2UgQXJlYUhhc2g6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZygn
IycrS1VSTChhcmVhLmhyZWYoKS5zdHJpbmcoKSkucmVmKCkpOworICAgICAgICBjYXNlIEFyZWFI
b3N0OiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoS1VSTChhcmVhLmhyZWYoKS5zdHJpbmcoKSku
aG9zdCgpKTsKKyAgICAgICAgY2FzZSBBcmVhSG9zdE5hbWU6IHsKKyAgICAgICAgICAgIEtVUkwg
dXJsKGFyZWEuaHJlZigpLnN0cmluZygpKTsKKyAgICAgICAgICAgIGtkRGVidWcoNjA3MCkgPDwg
Imxpbms6Omhvc3RuYW1lIHVzZXM6IiA8PHVybC51cmwoKTw8ZW5kbDsKKyAgICAgICAgICAgIGlm
ICh1cmwucG9ydCgpPT0wKQorICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcodXJsLmhvc3Qo
KSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh1cmwu
aG9zdCgpICsgIjoiICsgUVN0cmluZzo6bnVtYmVyKHVybC5wb3J0KCkpKTsKKyAgICAgICAgfQor
ICAgICAgICBjYXNlIEFyZWFQYXRoTmFtZTogICAgICAgIHJldHVybiBTdHJpbmcoS1VSTChhcmVh
LmhyZWYoKS5zdHJpbmcoKSkucGF0aCgpKTsKKyAgICAgICAgY2FzZSBBcmVhUG9ydDogICAgICAg
ICAgICByZXR1cm4gU3RyaW5nKFFTdHJpbmc6Om51bWJlcihLVVJMKGFyZWEuaHJlZigpLnN0cmlu
ZygpKS5wb3J0KCkpKTsKKyAgICAgICAgY2FzZSBBcmVhUHJvdG9jb2w6ICAgICAgICByZXR1cm4g
U3RyaW5nKEtVUkwoYXJlYS5ocmVmKCkuc3RyaW5nKCkpLnByb3RvY29sKCkrIjoiKTsKKyAgICAg
ICAgY2FzZSBBcmVhU2VhcmNoOiAgICAgICAgICByZXR1cm4gU3RyaW5nKEtVUkwoYXJlYS5ocmVm
KCkuc3RyaW5nKCkpLnF1ZXJ5KCkpOworICAgICAgICBjYXNlIEFyZWFOb0hyZWY6ICAgICAgICAg
IHJldHVybiBCb29sZWFuKGFyZWEubm9IcmVmKCkpOworICAgICAgICBjYXNlIEFyZWFTaGFwZTog
ICAgICAgICAgIHJldHVybiBTdHJpbmcoYXJlYS5zaGFwZSgpKTsKKyAgICAgICAgY2FzZSBBcmVh
VGFiSW5kZXg6ICAgICAgICByZXR1cm4gTnVtYmVyKGFyZWEudGFiSW5kZXgoKSk7CisgICAgICAg
IGNhc2UgQXJlYVRhcmdldDogICAgICAgICAgcmV0dXJuIFN0cmluZyhhcmVhLnRhcmdldCgpKTsK
KyAgICB9CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6
c2NyaXB0R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAgIEhU
TUxTY3JpcHRFbGVtZW50SW1wbCYgc2NyaXB0ID0gKnN0YXRpY19jYXN0PEhUTUxTY3JpcHRFbGVt
ZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNlIFNj
cmlwdFRleHQ6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhzY3JpcHQudGV4dCgpKTsKKyAgICAg
ICAgY2FzZSBTY3JpcHRIdG1sRm9yOiAgICAgICAgIHJldHVybiBTdHJpbmcoc2NyaXB0Lmh0bWxG
b3IoKSk7CisgICAgICAgIGNhc2UgU2NyaXB0RXZlbnQ6ICAgICAgICAgICByZXR1cm4gU3RyaW5n
KHNjcmlwdC5ldmVudCgpKTsKKyAgICAgICAgY2FzZSBTY3JpcHRDaGFyc2V0OiAgICAgICAgIHJl
dHVybiBTdHJpbmcoc2NyaXB0LmNoYXJzZXQoKSk7CisgICAgICAgIGNhc2UgU2NyaXB0RGVmZXI6
ICAgICAgICAgICByZXR1cm4gQm9vbGVhbihzY3JpcHQuZGVmZXIoKSk7CisgICAgICAgIGNhc2Ug
U2NyaXB0U3JjOiAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKHNjcmlwdC5zcmMoKSk7CisgICAg
ICAgIGNhc2UgU2NyaXB0VHlwZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKHNjcmlwdC50eXBl
KCkpOworICAgIH0KKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVt
ZW50Ojp0YWJsZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAg
ICBIVE1MVGFibGVFbGVtZW50SW1wbCYgdGFibGUgPSAqc3RhdGljX2Nhc3Q8SFRNTFRhYmxlRWxl
bWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBU
YWJsZUNhcHRpb246ICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyx0YWJsZS5jYXB0aW9u
KCkpOyAvLyB0eXBlIEhUTUxUYWJsZUNhcHRpb25FbGVtZW50CisgICAgICAgIGNhc2UgVGFibGVU
SGVhZDogICAgICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsdGFibGUudEhlYWQoKSk7IC8v
IHR5cGUgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQKKyAgICAgICAgY2FzZSBUYWJsZVRGb290OiAg
ICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyx0YWJsZS50Rm9vdCgpKTsgLy8gdHlwZSBI
VE1MVGFibGVTZWN0aW9uRWxlbWVudAorICAgICAgICBjYXNlIFRhYmxlUm93czogICAgICAgICAg
ICByZXR1cm4gZ2V0SFRNTENvbGxlY3Rpb24oZXhlYywgdGFibGUucm93cygpLmdldCgpKTsgLy8g
dHlwZSBIVE1MQ29sbGVjdGlvbgorICAgICAgICBjYXNlIFRhYmxlVEJvZGllczogICAgICAgICBy
ZXR1cm4gZ2V0SFRNTENvbGxlY3Rpb24oZXhlYywgdGFibGUudEJvZGllcygpLmdldCgpKTsgLy8g
dHlwZSBIVE1MQ29sbGVjdGlvbgorICAgICAgICBjYXNlIFRhYmxlQWxpZ246ICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKHRhYmxlLmFsaWduKCkpOworICAgICAgICBjYXNlIFRhYmxlQmdDb2xvcjog
ICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlLmJnQ29sb3IoKSk7CisgICAgICAgIGNhc2UgVGFi
bGVCb3JkZXI6ICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGUuYm9yZGVyKCkpOworICAgICAg
ICBjYXNlIFRhYmxlQ2VsbFBhZGRpbmc6ICAgICByZXR1cm4gU3RyaW5nKHRhYmxlLmNlbGxQYWRk
aW5nKCkpOworICAgICAgICBjYXNlIFRhYmxlQ2VsbFNwYWNpbmc6ICAgICByZXR1cm4gU3RyaW5n
KHRhYmxlLmNlbGxTcGFjaW5nKCkpOworICAgICAgICBjYXNlIFRhYmxlRnJhbWU6ICAgICAgICAg
ICByZXR1cm4gU3RyaW5nKHRhYmxlLmZyYW1lKCkpOworICAgICAgICBjYXNlIFRhYmxlUnVsZXM6
ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlLnJ1bGVzKCkpOworICAgICAgICBjYXNlIFRh
YmxlU3VtbWFyeTogICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlLnN1bW1hcnkoKSk7CisgICAg
ICAgIGNhc2UgVGFibGVXaWR0aDogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGUud2lkdGgo
KSk7CisgICAgfQorICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1l
bnQ6OnRhYmxlQ2FwdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QK
K3sKKyAgICBIVE1MVGFibGVDYXB0aW9uRWxlbWVudEltcGwmIHRhYmxlQ2FwdGlvbiA9ICpzdGF0
aWNfY2FzdDxIVE1MVGFibGVDYXB0aW9uRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIGlmICh0
b2tlbiA9PSBUYWJsZUNhcHRpb25BbGlnbikKKyAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNh
cHRpb24uYWxpZ24oKSk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1M
RWxlbWVudDo6dGFibGVDb2xHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0
Cit7CisgICAgSFRNTFRhYmxlQ29sRWxlbWVudEltcGwmIHRhYmxlQ29sID0gKnN0YXRpY19jYXN0
PEhUTUxUYWJsZUNvbEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7
CisgICAgICAgIGNhc2UgVGFibGVDb2xBbGlnbjogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFi
bGVDb2wuYWxpZ24oKSk7CisgICAgICAgIGNhc2UgVGFibGVDb2xDaDogICAgICAgICAgICAgIHJl
dHVybiBTdHJpbmcodGFibGVDb2wuY2goKSk7CisgICAgICAgIGNhc2UgVGFibGVDb2xDaE9mZjog
ICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVDb2wuY2hPZmYoKSk7CisgICAgICAgIGNhc2Ug
VGFibGVDb2xTcGFuOiAgICAgICAgICAgIHJldHVybiBOdW1iZXIodGFibGVDb2wuc3BhbigpKTsK
KyAgICAgICAgY2FzZSBUYWJsZUNvbFZBbGlnbjogICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJs
ZUNvbC52QWxpZ24oKSk7CisgICAgICAgIGNhc2UgVGFibGVDb2xXaWR0aDogICAgICAgICAgIHJl
dHVybiBTdHJpbmcodGFibGVDb2wud2lkdGgoKSk7CisgICAgfQorICAgIHJldHVybiBVbmRlZmlu
ZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OnRhYmxlU2VjdGlvbkdldHRlcihFeGVjU3Rh
dGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MVGFibGVTZWN0aW9uRWxlbWVu
dEltcGwmIHRhYmxlU2VjdGlvbiA9ICpzdGF0aWNfY2FzdDxIVE1MVGFibGVTZWN0aW9uRWxlbWVu
dEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBUYWJs
ZVNlY3Rpb25BbGlnbjogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVTZWN0aW9uLmFsaWdu
KCkpOworICAgICAgICBjYXNlIFRhYmxlU2VjdGlvbkNoOiAgICAgICAgICAgICAgcmV0dXJuIFN0
cmluZyh0YWJsZVNlY3Rpb24uY2goKSk7CisgICAgICAgIGNhc2UgVGFibGVTZWN0aW9uQ2hPZmY6
ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlU2VjdGlvbi5jaE9mZigpKTsKKyAgICAgICAg
Y2FzZSBUYWJsZVNlY3Rpb25WQWxpZ246ICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVTZWN0
aW9uLnZBbGlnbigpKTsKKyAgICAgICAgY2FzZSBUYWJsZVNlY3Rpb25Sb3dzOiAgICAgICAgICAg
IHJldHVybiBnZXRIVE1MQ29sbGVjdGlvbihleGVjLCB0YWJsZVNlY3Rpb24ucm93cygpLmdldCgp
KTsgLy8gdHlwZSBIVE1MQ29sbGVjdGlvbgorICAgIH0KKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7
Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50Ojp0YWJsZVJvd0dldHRlcihFeGVjU3RhdGUqIGV4ZWMs
IGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MVGFibGVSb3dFbGVtZW50SW1wbCYgdGFibGVS
b3cgPSAqc3RhdGljX2Nhc3Q8SFRNTFRhYmxlUm93RWxlbWVudEltcGwqPihpbXBsKCkpOworICAg
IHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBUYWJsZVJvd1Jvd0luZGV4OiAgICAgICAg
cmV0dXJuIE51bWJlcih0YWJsZVJvdy5yb3dJbmRleCgpKTsKKyAgICAgICAgY2FzZSBUYWJsZVJv
d1NlY3Rpb25Sb3dJbmRleDogcmV0dXJuIE51bWJlcih0YWJsZVJvdy5zZWN0aW9uUm93SW5kZXgo
KSk7CisgICAgICAgIGNhc2UgVGFibGVSb3dDZWxsczogICAgICAgICAgIHJldHVybiBnZXRIVE1M
Q29sbGVjdGlvbihleGVjLCB0YWJsZVJvdy5jZWxscygpLmdldCgpKTsgLy8gdHlwZSBIVE1MQ29s
bGVjdGlvbgorICAgICAgICBjYXNlIFRhYmxlUm93QWxpZ246ICAgICAgICAgICByZXR1cm4gU3Ry
aW5nKHRhYmxlUm93LmFsaWduKCkpOworICAgICAgICBjYXNlIFRhYmxlUm93QmdDb2xvcjogICAg
ICAgICByZXR1cm4gU3RyaW5nKHRhYmxlUm93LmJnQ29sb3IoKSk7CisgICAgICAgIGNhc2UgVGFi
bGVSb3dDaDogICAgICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVSb3cuY2goKSk7CisgICAg
ICAgIGNhc2UgVGFibGVSb3dDaE9mZjogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVSb3cu
Y2hPZmYoKSk7CisgICAgICAgIGNhc2UgVGFibGVSb3dWQWxpZ246ICAgICAgICAgIHJldHVybiBT
dHJpbmcodGFibGVSb3cudkFsaWduKCkpOworICAgIH0KKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7
Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50Ojp0YWJsZUNlbGxHZXR0ZXIoRXhlY1N0YXRlKiBleGVj
LCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsJiB0YWJs
ZUNlbGwgPSAqc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsK
KyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgVGFibGVDZWxsQ2VsbEluZGV4OiAg
ICAgICByZXR1cm4gTnVtYmVyKHRhYmxlQ2VsbC5jZWxsSW5kZXgoKSk7CisgICAgICAgIGNhc2Ug
VGFibGVDZWxsQWJicjogICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ2VsbC5hYmJyKCkp
OworICAgICAgICBjYXNlIFRhYmxlQ2VsbEFsaWduOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0
YWJsZUNlbGwuYWxpZ24oKSk7CisgICAgICAgIGNhc2UgVGFibGVDZWxsQXhpczogICAgICAgICAg
ICByZXR1cm4gU3RyaW5nKHRhYmxlQ2VsbC5heGlzKCkpOworICAgICAgICBjYXNlIFRhYmxlQ2Vs
bEJnQ29sb3I6ICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNlbGwuYmdDb2xvcigpKTsKKyAg
ICAgICAgY2FzZSBUYWJsZUNlbGxDaDogICAgICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVD
ZWxsLmNoKCkpOworICAgICAgICBjYXNlIFRhYmxlQ2VsbENoT2ZmOiAgICAgICAgICAgcmV0dXJu
IFN0cmluZyh0YWJsZUNlbGwuY2hPZmYoKSk7CisgICAgICAgIGNhc2UgVGFibGVDZWxsQ29sU3Bh
bjogICAgICAgICByZXR1cm4gTnVtYmVyKHRhYmxlQ2VsbC5jb2xTcGFuKCkpOworICAgICAgICBj
YXNlIFRhYmxlQ2VsbEhlYWRlcnM6ICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNlbGwuaGVh
ZGVycygpKTsKKyAgICAgICAgY2FzZSBUYWJsZUNlbGxIZWlnaHQ6ICAgICAgICAgIHJldHVybiBT
dHJpbmcodGFibGVDZWxsLmhlaWdodCgpKTsKKyAgICAgICAgY2FzZSBUYWJsZUNlbGxOb1dyYXA6
ICAgICAgICAgIHJldHVybiBCb29sZWFuKHRhYmxlQ2VsbC5ub1dyYXAoKSk7CisgICAgICAgIGNh
c2UgVGFibGVDZWxsUm93U3BhbjogICAgICAgICByZXR1cm4gTnVtYmVyKHRhYmxlQ2VsbC5yb3dT
cGFuKCkpOworICAgICAgICBjYXNlIFRhYmxlQ2VsbFNjb3BlOiAgICAgICAgICAgcmV0dXJuIFN0
cmluZyh0YWJsZUNlbGwuc2NvcGUoKSk7CisgICAgICAgIGNhc2UgVGFibGVDZWxsVkFsaWduOiAg
ICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ2VsbC52QWxpZ24oKSk7CisgICAgICAgIGNhc2Ug
VGFibGVDZWxsV2lkdGg6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ2VsbC53aWR0aCgp
KTsKKyAgICB9CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVu
dDo6ZnJhbWVTZXRHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7Cisg
ICAgSFRNTEZyYW1lU2V0RWxlbWVudEltcGwmIGZyYW1lU2V0ID0gKnN0YXRpY19jYXN0PEhUTUxG
cmFtZVNldEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAg
ICAgIGNhc2UgRnJhbWVTZXRDb2xzOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoZnJhbWVTZXQu
Y29scygpKTsKKyAgICAgICAgY2FzZSBGcmFtZVNldFJvd3M6ICAgICAgICAgICAgcmV0dXJuIFN0
cmluZyhmcmFtZVNldC5yb3dzKCkpOworICAgIH0KKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9
CisKK1ZhbHVlIEhUTUxFbGVtZW50OjpmcmFtZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0
b2tlbikgY29uc3QKK3sKKyAgICBIVE1MRnJhbWVFbGVtZW50SW1wbCYgZnJhbWVFbGVtZW50ID0g
KnN0YXRpY19jYXN0PEhUTUxGcmFtZUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2gg
KHRva2VuKSB7CisgICAgICAgIGNhc2UgRnJhbWVDb250ZW50RG9jdW1lbnQ6IHJldHVybiBjaGVj
a05vZGVTZWN1cml0eShleGVjLGZyYW1lRWxlbWVudC5jb250ZW50RG9jdW1lbnQoKSkgPyAKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldERPTU5vZGUoZXhlYywg
ZnJhbWVFbGVtZW50LmNvbnRlbnREb2N1bWVudCgpKSA6IFVuZGVmaW5lZCgpOworICAgICAgICBj
YXNlIEZyYW1lQ29udGVudFdpbmRvdzogICByZXR1cm4gY2hlY2tOb2RlU2VjdXJpdHkoZXhlYyxm
cmFtZUVsZW1lbnQuY29udGVudERvY3VtZW50KCkpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgPyBXaW5kb3c6OnJldHJpZXZlKGZyYW1lRWxlbWVudC5jb250ZW50UGFy
dCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogVW5kZWZpbmVk
KCk7CisgICAgICAgIGNhc2UgRnJhbWVGcmFtZUJvcmRlcjogICAgIHJldHVybiBTdHJpbmcoZnJh
bWVFbGVtZW50LmZyYW1lQm9yZGVyKCkpOworICAgICAgICBjYXNlIEZyYW1lTG9uZ0Rlc2M6ICAg
ICAgICByZXR1cm4gU3RyaW5nKGZyYW1lRWxlbWVudC5sb25nRGVzYygpKTsKKyAgICAgICAgY2Fz
ZSBGcmFtZU1hcmdpbkhlaWdodDogICAgcmV0dXJuIFN0cmluZyhmcmFtZUVsZW1lbnQubWFyZ2lu
SGVpZ2h0KCkpOworICAgICAgICBjYXNlIEZyYW1lTWFyZ2luV2lkdGg6ICAgICByZXR1cm4gU3Ry
aW5nKGZyYW1lRWxlbWVudC5tYXJnaW5XaWR0aCgpKTsKKyAgICAgICAgY2FzZSBGcmFtZU5hbWU6
ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhmcmFtZUVsZW1lbnQubmFtZSgpKTsKKyAgICAgICAg
Y2FzZSBGcmFtZU5vUmVzaXplOiAgICAgICAgcmV0dXJuIEJvb2xlYW4oZnJhbWVFbGVtZW50Lm5v
UmVzaXplKCkpOworICAgICAgICBjYXNlIEZyYW1lU2Nyb2xsaW5nOiAgICAgICByZXR1cm4gU3Ry
aW5nKGZyYW1lRWxlbWVudC5zY3JvbGxpbmcoKSk7CisgICAgICAgIGNhc2UgRnJhbWVTcmM6Cisg
ICAgICAgIGNhc2UgRnJhbWVMb2NhdGlvbjogICAgICAgIHJldHVybiBTdHJpbmcoZnJhbWVFbGVt
ZW50LnNyYygpKTsKKyAgICB9CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBI
VE1MRWxlbWVudDo6aUZyYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25z
dAoreworICAgIEhUTUxJRnJhbWVFbGVtZW50SW1wbCYgaUZyYW1lID0gKnN0YXRpY19jYXN0PEhU
TUxJRnJhbWVFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAg
ICAgICBjYXNlIElGcmFtZUFsaWduOiAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGlGcmFt
ZS5hbGlnbigpKTsKKyAgICAgICAgICAvLyAjIyMgc2VjdXJpdHkgY2hlY2sgPworICAgICAgICBj
YXNlIElGcmFtZURvY3VtZW50OiAvLyBub24tc3RhbmRhcmQsIG1hcHBlZCB0byBjb250ZW50RG9j
dW1lbnQKKyAgICAgICAgY2FzZSBJRnJhbWVDb250ZW50RG9jdW1lbnQ6IHJldHVybiBjaGVja05v
ZGVTZWN1cml0eShleGVjLGlGcmFtZS5jb250ZW50RG9jdW1lbnQoKSkgPyAKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0RE9NTm9kZShleGVjLCBpRnJhbWUuY29udGVu
dERvY3VtZW50KCkpIDogVW5kZWZpbmVkKCk7CisgICAgICAgIGNhc2UgSUZyYW1lQ29udGVudFdp
bmRvdzoJcmV0dXJuIGNoZWNrTm9kZVNlY3VyaXR5KGV4ZWMsaUZyYW1lLmNvbnRlbnREb2N1bWVu
dCgpKSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFdpbmRvdzo6
cmV0cmlldmUoaUZyYW1lLmNvbnRlbnRQYXJ0KCkpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOiBVbmRlZmluZWQoKTsKKyAgICAgICAgY2FzZSBJRnJhbWVGcmFtZUJv
cmRlcjogICAgIHJldHVybiBTdHJpbmcoaUZyYW1lLmZyYW1lQm9yZGVyKCkpOworICAgICAgICBj
YXNlIElGcmFtZUhlaWdodDogICAgICAgICAgcmV0dXJuIFN0cmluZyhpRnJhbWUuaGVpZ2h0KCkp
OworICAgICAgICBjYXNlIElGcmFtZUxvbmdEZXNjOiAgICAgICAgcmV0dXJuIFN0cmluZyhpRnJh
bWUubG9uZ0Rlc2MoKSk7CisgICAgICAgIGNhc2UgSUZyYW1lTWFyZ2luSGVpZ2h0OiAgICByZXR1
cm4gU3RyaW5nKGlGcmFtZS5tYXJnaW5IZWlnaHQoKSk7CisgICAgICAgIGNhc2UgSUZyYW1lTWFy
Z2luV2lkdGg6ICAgICByZXR1cm4gU3RyaW5nKGlGcmFtZS5tYXJnaW5XaWR0aCgpKTsKKyAgICAg
ICAgY2FzZSBJRnJhbWVOYW1lOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoaUZyYW1lLm5hbWUo
KSk7CisgICAgICAgIGNhc2UgSUZyYW1lU2Nyb2xsaW5nOiAgICAgICByZXR1cm4gU3RyaW5nKGlG
cmFtZS5zY3JvbGxpbmcoKSk7CisgICAgICAgIGNhc2UgSUZyYW1lU3JjOiAgICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKGlGcmFtZS5zcmMoKSk7CisgICAgICAgIGNhc2UgSUZyYW1lV2lkdGg6ICAg
ICAgICAgICByZXR1cm4gU3RyaW5nKGlGcmFtZS53aWR0aCgpKTsKKyAgICB9CisgICAgcmV0dXJu
IFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6bWFycXVlZUdldHRlcihFeGVj
U3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogRmluZCBvdXQg
d2hhdCBXaW5JRSBleHBvc2VzIGFzIHByb3BlcnRpZXMgYW5kIGltcGxlbWVudCB0aGlzLgorICAg
IHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OmdldFZhbHVlUHJv
cGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgLy8gQ2hlY2sg
b3VyIHNldCBvZiBnZW5lcmljIHByb3BlcnRpZXMgZmlyc3QuCisgICAgSFRNTEVsZW1lbnRJbXBs
ICZlbGVtZW50ID0gKnN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCAqPihpbXBsKCkpOworICAg
IHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBFbGVtZW50SWQ6CisgICAgICAgIC8vIGlo
dC5jb20gcmVsaWVzIG9uIHRoaXMgdmFsdWUgYmVpbmcgIiIgd2hlbiBubyBpZCBpcyBwcmVzZW50
LiAgT3RoZXIgYnJvd3NlcnMgZG8gdGhpcyBhcyB3ZWxsLgorICAgICAgICAvLyBTbyB3ZSB1c2Ug
U3RyaW5nKCkgaW5zdGVhZCBvZiBTdHJpbmcoKSBoZXJlLgorICAgICAgICByZXR1cm4gU3RyaW5n
KGVsZW1lbnQuaWQoKSk7CisgICAgICAgIGNhc2UgRWxlbWVudFRpdGxlOgorICAgICAgICAgICAg
cmV0dXJuIFN0cmluZyhlbGVtZW50LnRpdGxlKCkpOworICAgICAgICBjYXNlIEVsZW1lbnRMYW5n
OgorICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhlbGVtZW50LmxhbmcoKSk7CisgICAgICAgIGNh
c2UgRWxlbWVudERpcjoKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcoZWxlbWVudC5kaXIoKSk7
CisgICAgICAgIGNhc2UgRWxlbWVudENsYXNzTmFtZToKKyAgICAgICAgICAgIHJldHVybiBTdHJp
bmcoZWxlbWVudC5jbGFzc05hbWUoKSk7CisgICAgICAgIGNhc2UgRWxlbWVudElubmVySFRNTDoK
KyAgICAgICAgICAgIHJldHVybiBTdHJpbmcoZWxlbWVudC5pbm5lckhUTUwoKSk7CisgICAgICAg
IGNhc2UgRWxlbWVudElubmVyVGV4dDoKKyAgICAgICAgICAgIGlmIChEb2N1bWVudEltcGwqIGRv
YyA9IGltcGwoKS0+Z2V0RG9jdW1lbnQoKSkKKyAgICAgICAgICAgICAgICBkb2MtPnVwZGF0ZUxh
eW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOworICAgICAgICAgICAgcmV0dXJuIFN0cmlu
ZyhlbGVtZW50LmlubmVyVGV4dCgpKTsKKyAgICAgICAgY2FzZSBFbGVtZW50T3V0ZXJIVE1MOgor
ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhlbGVtZW50Lm91dGVySFRNTCgpKTsKKyAgICAgICAg
Y2FzZSBFbGVtZW50T3V0ZXJUZXh0OgorICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhlbGVtZW50
Lm91dGVyVGV4dCgpKTsKKyAgICAgICAgY2FzZSBFbGVtZW50RG9jdW1lbnQ6CisgICAgICAgICAg
ICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLGVsZW1lbnQub3duZXJEb2N1bWVudCgpKTsKKyAgICAg
ICAgY2FzZSBFbGVtZW50Q2hpbGRyZW46CisgICAgICAgICAgICByZXR1cm4gZ2V0SFRNTENvbGxl
Y3Rpb24oZXhlYywgZWxlbWVudC5jaGlsZHJlbigpLmdldCgpKTsKKyAgICAgICAgY2FzZSBFbGVt
ZW50Q29udGVudEVkaXRhYmxlOgorICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhlbGVtZW50LmNv
bnRlbnRFZGl0YWJsZSgpKTsKKyAgICAgICAgY2FzZSBFbGVtZW50SXNDb250ZW50RWRpdGFibGU6
CisgICAgICAgICAgICByZXR1cm4gQm9vbGVhbihlbGVtZW50LmlzQ29udGVudEVkaXRhYmxlKCkp
OworICAgIH0KKworICAgIC8vIE5vdyBjaGVjayB0aGUgcHJvcGVydGllcyBzcGVjaWZpYyB0byBv
dXIgZWxlbWVudCB0eXBlLgorICAgIGNvbnN0IEdldFNldEluZm8qIGluZm8gPSBnZXRTZXRJbmZv
KCk7CisgICAgaWYgKGluZm8gJiYgaW5mby0+bV9nZXR0ZXIpCisgICAgICAgIHJldHVybiAodGhp
cy0+KihpbmZvLT5tX2dldHRlcikpKGV4ZWMsIHRva2VuKTsKKyAgICByZXR1cm4gVW5kZWZpbmVk
KCk7Cit9CisKK2Jvb2wgS0pTOjpIVE1MRWxlbWVudDo6aGFzUHJvcGVydHkoRXhlY1N0YXRlICpl
eGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUpIGNvbnN0Cit7CisjaWZkZWYgS0pT
X1ZFUkJPU0UKKyAgICAvL2tkRGVidWcoNjA3MCkgPDwgIkhUTUxFbGVtZW50OjpoYXNQcm9wZXJ0
eSAiIDw8IHByb3BlcnR5TmFtZS5xc3RyaW5nKCkgPDwgZW5kbDsKKyNlbmRpZgorICAgIEhUTUxF
bGVtZW50SW1wbCAmZWxlbWVudCA9ICpzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwgKj4oaW1w
bCgpKTsKKyAgICAvLyBGaXJzdCBsb29rIGF0IGR5bmFtaWMgcHJvcGVydGllcyAtIGtlZXAgdGhp
cyBpbiBzeW5jIHdpdGggdHJ5R2V0CisgICAgaWYgKGVsZW1lbnQuaGFzTG9jYWxOYW1lKEhUTUxO
YW1lczo6Zm9ybSgpKSkgeworICAgICAgICBIVE1MRm9ybUVsZW1lbnRJbXBsICZmb3JtID0gc3Rh
dGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICAgICAgLy8gQ2hl
Y2sgaWYgd2UncmUgcmV0cmlldmluZyBhbiBlbGVtZW50IChieSBpbmRleCBvciBieSBuYW1lKQor
ICAgICAgICBib29sIG9rOworICAgICAgICB1aW50IHUgPSBwcm9wZXJ0eU5hbWUudG9VTG9uZygm
b2spOworICAgICAgICBpZiAob2sgJiYgZm9ybS5lbGVtZW50cygpLT5pdGVtKHUpKQorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChmb3JtLmVsZW1lbnRzKCktPm5hbWVkSXRl
bShwcm9wZXJ0eU5hbWUuc3RyaW5nKCkpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6c2VsZWN0KCkp
KSB7CisgICAgICAgIEhUTUxTZWxlY3RFbGVtZW50SW1wbCAmc2VsZWN0ID0gc3RhdGljX2Nhc3Q8
SFRNTFNlbGVjdEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgICAgICBib29sIG9rOworICAg
ICAgICB1aW50IHUgPSBwcm9wZXJ0eU5hbWUudG9VTG9uZygmb2spOworICAgICAgICBpZiAob2sg
JiYgc2VsZWN0Lm9wdGlvbnNIVE1MQ29sbGVjdGlvbigpLT5pdGVtKHUpKQorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBET01FbGVtZW50OjpoYXNQcm9wZXJ0eShl
eGVjLCBwcm9wZXJ0eU5hbWUpOworfQorCitVU3RyaW5nIEtKUzo6SFRNTEVsZW1lbnQ6OnRvU3Ry
aW5nKEV4ZWNTdGF0ZSAqZXhlYykgY29uc3QKK3sKKyAgaWYgKGltcGwoKS0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OmEoKSkpCisgICAgcmV0dXJuIFVTdHJpbmcoc3RhdGljX2Nhc3Q8Y29uc3QgSFRN
TEFuY2hvckVsZW1lbnRJbXBsICo+KGltcGwoKSktPmhyZWYoKSk7CisgIGVsc2UKKyAgICByZXR1
cm4gRE9NRWxlbWVudDo6dG9TdHJpbmcoZXhlYyk7Cit9CisKK3N0YXRpYyBIVE1MRm9ybUVsZW1l
bnRJbXBsICpnZXRGb3JtKEhUTUxFbGVtZW50SW1wbCAqZWxlbWVudCkKK3sKKyAgaWYgKGVsZW1l
bnQtPmlzR2VuZXJpY0Zvcm1FbGVtZW50KCkpCisgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRN
TEdlbmVyaWNGb3JtRWxlbWVudEltcGwgKj4oZWxlbWVudCktPmZvcm0oKTsKKyAgaWYgKGVsZW1l
bnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpsYWJlbCgpKSkKKyAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxIVE1MTGFiZWxFbGVtZW50SW1wbCAqPihlbGVtZW50KS0+Zm9ybSgpOworICBpZiAoZWxl
bWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9iamVjdCgpKSkKKyAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxIVE1MT2JqZWN0RWxlbWVudEltcGwgKj4oZWxlbWVudCktPmZvcm0oKTsKKworICBy
ZXR1cm4gMDsKK30KKwordm9pZCBLSlM6OkhUTUxFbGVtZW50OjpwdXNoRXZlbnRIYW5kbGVyU2Nv
cGUoRXhlY1N0YXRlICpleGVjLCBTY29wZUNoYWluICZzY29wZSkgY29uc3QKIHsKICAgSFRNTEVs
ZW1lbnRJbXBsICplbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KGltcGwo
KSk7CiAKQEAgLTIwOTcsNyArMjI1Myw3IEBAIHZvaWQgS0pTOjpIVE1MRWxlbWVudDo6cHVzaEV2
ZW50SGFuZGxlclMKICAgICBzY29wZS5wdXNoKHN0YXRpY19jYXN0PE9iamVjdEltcCAqPihnZXRE
T01Ob2RlKGV4ZWMsIGZvcm0pKSk7CiAgIGVsc2UgewogICAgIE5vZGVJbXBsICpmb3JtID0gZWxl
bWVudC0+cGFyZW50Tm9kZSgpOwotICAgIHdoaWxlIChmb3JtICYmIGZvcm0tPmlkKCkgIT0gSURf
Rk9STSkKKyAgICB3aGlsZSAoZm9ybSAmJiAhZm9ybS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZv
cm0oKSkpCiAgICAgICBmb3JtID0gZm9ybS0+cGFyZW50Tm9kZSgpOwogICAgIAogICAgIGlmIChm
b3JtKQpAQCAtMjExNywxNjIgKzIyNzMsMTUxIEBAIEhUTUxFbGVtZW50RnVuY3Rpb246OkhUTUxF
bGVtZW50RnVuY3Rpb24KIAogVmFsdWUgS0pTOjpIVE1MRWxlbWVudEZ1bmN0aW9uOjp0cnlDYWxs
KEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQogewot
ICBpZiAoIXRoaXNPYmouaW5oZXJpdHMoJktKUzo6SFRNTEVsZW1lbnQ6OmluZm8pKSB7Ci0gICAg
T2JqZWN0IGVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBlRXJyb3IpOwotICAgIGV4ZWMtPnNl
dEV4Y2VwdGlvbihlcnIpOwotICAgIHJldHVybiBlcnI7Ci0gIH0KLSAga2REZWJ1ZygpIDw8ICJL
SlM6OkhUTUxFbGVtZW50RnVuY3Rpb246OnRyeUNhbGwgIiA8PCBlbmRsOwotICBET01FeGNlcHRp
b25UcmFuc2xhdG9yIGV4Y2VwdGlvbihleGVjKTsKLSAgSFRNTEVsZW1lbnRJbXBsICZlbGVtZW50
ID0gKnN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCAqPihzdGF0aWNfY2FzdDxIVE1MRWxlbWVu
dCAqPih0aGlzT2JqLmltcCgpKS0+aW1wbCgpKTsKLQotICBzd2l0Y2ggKGVsZW1lbnQuaWQoKSkg
ewotICAgIGNhc2UgSURfRk9STTogewotICAgICAgSFRNTEZvcm1FbGVtZW50SW1wbCAmZm9ybSA9
IHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBpZiAo
aWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6Rm9ybVN1Ym1pdCkgewotICAgICAgICBmb3JtLnN1Ym1p
dCgpOwotICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlm
IChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpGb3JtUmVzZXQpIHsKLSAgICAgICAgZm9ybS5yZXNl
dCgpOwotICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9CisgICAgaWYgKCF0aGlz
T2JqLmluaGVyaXRzKCZLSlM6OkhUTUxFbGVtZW50OjppbmZvKSkgeworICAgICAgICBPYmplY3Qg
ZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5cGVFcnJvcik7CisgICAgICAgIGV4ZWMtPnNldEV4
Y2VwdGlvbihlcnIpOworICAgICAgICByZXR1cm4gZXJyOwogICAgIH0KLSAgICBicmVhazsKLSAg
ICBjYXNlIElEX1NFTEVDVDogewotICAgICAgSFRNTFNlbGVjdEVsZW1lbnRJbXBsICZzZWxlY3Qg
PSBzdGF0aWNfY2FzdDxIVE1MU2VsZWN0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBp
ZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6U2VsZWN0QWRkKSB7Ci0gICAgICAgIHNlbGVjdC5h
ZGQodG9IVE1MRWxlbWVudChhcmdzWzBdKSwgdG9IVE1MRWxlbWVudChhcmdzWzFdKSk7Ci0gICAg
ICAgIHJldHVybiBVbmRlZmluZWQoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGlkID09IEtK
Uzo6SFRNTEVsZW1lbnQ6OlNlbGVjdFJlbW92ZSkgewotICAgICAgICBzZWxlY3QucmVtb3ZlKGlu
dChhcmdzWzBdLnRvTnVtYmVyKGV4ZWMpKSk7Ci0gICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsK
LSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlNlbGVjdEJs
dXIpIHsKLSAgICAgICAgc2VsZWN0LmJsdXIoKTsKLSAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgp
OwotICAgICAgfQotICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6U2VsZWN0
Rm9jdXMpIHsKLSAgICAgICAgc2VsZWN0LmZvY3VzKCk7Ci0gICAgICAgIHJldHVybiBVbmRlZmlu
ZWQoKTsKLSAgICAgIH0KKyAgICBrZERlYnVnKCkgPDwgIktKUzo6SFRNTEVsZW1lbnRGdW5jdGlv
bjo6dHJ5Q2FsbCAiIDw8IGVuZGw7CisgICAgRE9NRXhjZXB0aW9uVHJhbnNsYXRvciBleGNlcHRp
b24oZXhlYyk7CisgICAgSFRNTEVsZW1lbnRJbXBsICZlbGVtZW50ID0gKnN0YXRpY19jYXN0PEhU
TUxFbGVtZW50SW1wbCAqPihzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCAqPih0aGlzT2JqLmltcCgp
KS0+aW1wbCgpKTsKKworICAgIGlmIChlbGVtZW50Lmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmZv
cm0oKSkpIHsKKyAgICAgICAgSFRNTEZvcm1FbGVtZW50SW1wbCAmZm9ybSA9IHN0YXRpY19jYXN0
PEhUTUxGb3JtRWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgICAgIGlmIChpZCA9PSBLSlM6
OkhUTUxFbGVtZW50OjpGb3JtU3VibWl0KSB7CisgICAgICAgICAgICBmb3JtLnN1Ym1pdCgpOwor
ICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAgICAgICB9CisgICAgICAgIGVsc2Ug
aWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OkZvcm1SZXNldCkgeworICAgICAgICAgICAgZm9y
bS5yZXNldCgpOworICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAgICAgICB9CiAg
ICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfSU5QVVQ6IHsKLSAgICAgIEhUTUxJbnB1dEVs
ZW1lbnRJbXBsICZpbnB1dCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnRJbXBsICY+KGVs
ZW1lbnQpOwotICAgICAgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OklucHV0Qmx1cikgewot
ICAgICAgICBpbnB1dC5ibHVyKCk7Ci0gICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKLSAgICAg
IH0KLSAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OklucHV0Rm9jdXMpIHsK
LSAgICAgICAgaW5wdXQuZm9jdXMoKTsKLSAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwotICAg
ICAgfQotICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6SW5wdXRTZWxlY3Qp
IHsKLSAgICAgICAgaW5wdXQuc2VsZWN0KCk7Ci0gICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsK
LSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OklucHV0Q2xp
Y2spIHsKLSAgICAgICAgaW5wdXQuY2xpY2soKTsKLSAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgp
OwotICAgICAgfQorICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6
c2VsZWN0KCkpKSB7CisgICAgICAgIEhUTUxTZWxlY3RFbGVtZW50SW1wbCAmc2VsZWN0ID0gc3Rh
dGljX2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgICAgICBpZiAo
aWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6U2VsZWN0QWRkKSB7CisgICAgICAgICAgICBzZWxlY3Qu
YWRkKHRvSFRNTEVsZW1lbnQoYXJnc1swXSksIHRvSFRNTEVsZW1lbnQoYXJnc1sxXSkpOworICAg
ICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYg
KGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlNlbGVjdFJlbW92ZSkgeworICAgICAgICAgICAgc2Vs
ZWN0LnJlbW92ZShpbnQoYXJnc1swXS50b051bWJlcihleGVjKSkpOworICAgICAgICAgICAgcmV0
dXJuIFVuZGVmaW5lZCgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6
SFRNTEVsZW1lbnQ6OlNlbGVjdEJsdXIpIHsKKyAgICAgICAgICAgIHNlbGVjdC5ibHVyKCk7Cisg
ICAgICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBp
ZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6U2VsZWN0Rm9jdXMpIHsKKyAgICAgICAgICAgIHNl
bGVjdC5mb2N1cygpOworICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAgICAgICB9
CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfQlVUVE9OOiB7Ci0gICAgICBIVE1MQnV0
dG9uRWxlbWVudEltcGwgJmJ1dHRvbiA9IHN0YXRpY19jYXN0PEhUTUxCdXR0b25FbGVtZW50SW1w
bCAmPihlbGVtZW50KTsKLSAgICAgIAotICAgICAgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6
OkJ1dHRvbkJsdXIpIHsKLSAgICAgICAgYnV0dG9uLmJsdXIoKTsKLSAgICAgICAgcmV0dXJuIFVu
ZGVmaW5lZCgpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVu
dDo6QnV0dG9uRm9jdXMpIHsKLSAgICAgICAgYnV0dG9uLmZvY3VzKCk7Ci0gICAgICAgIHJldHVy
biBVbmRlZmluZWQoKTsKLSAgICAgIH0KKyAgICBlbHNlIGlmIChlbGVtZW50Lmhhc0xvY2FsTmFt
ZShIVE1MTmFtZXM6OmlucHV0KCkpKSB7CisgICAgICAgIEhUTUxJbnB1dEVsZW1lbnRJbXBsICZp
bnB1dCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAg
ICAgICBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6SW5wdXRCbHVyKSB7CisgICAgICAgICAg
ICBpbnB1dC5ibHVyKCk7CisgICAgICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CisgICAgICAg
IH0KKyAgICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6SW5wdXRGb2N1cykg
eworICAgICAgICAgICAgaW5wdXQuZm9jdXMoKTsKKyAgICAgICAgICAgIHJldHVybiBVbmRlZmlu
ZWQoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50
OjpJbnB1dFNlbGVjdCkgeworICAgICAgICAgICAgaW5wdXQuc2VsZWN0KCk7CisgICAgICAgICAg
ICByZXR1cm4gVW5kZWZpbmVkKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoaWQgPT0g
S0pTOjpIVE1MRWxlbWVudDo6SW5wdXRDbGljaykgeworICAgICAgICAgICAgaW5wdXQuY2xpY2so
KTsKKyAgICAgICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKKyAgICAgICAgfQogICAgIH0KLSAg
ICBicmVhazsKLSAgICBjYXNlIElEX1RFWFRBUkVBOiB7Ci0gICAgICBIVE1MVGV4dEFyZWFFbGVt
ZW50SW1wbCAmdGV4dGFyZWEgPSBzdGF0aWNfY2FzdDxIVE1MVGV4dEFyZWFFbGVtZW50SW1wbCAm
PihlbGVtZW50KTsKLSAgICAgIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUZXh0QXJlYUJs
dXIpIHsKLSAgICAgICAgdGV4dGFyZWEuYmx1cigpOwotICAgICAgICByZXR1cm4gVW5kZWZpbmVk
KCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUZXh0
QXJlYUZvY3VzKSB7Ci0gICAgICAgIHRleHRhcmVhLmZvY3VzKCk7Ci0gICAgICAgIHJldHVybiBV
bmRlZmluZWQoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1l
bnQ6OlRleHRBcmVhU2VsZWN0KSB7Ci0gICAgICAgIHRleHRhcmVhLnNlbGVjdCgpOwotICAgICAg
ICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9CisgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNM
b2NhbE5hbWUoSFRNTE5hbWVzOjpidXR0b24oKSkpIHsKKyAgICAgICAgSFRNTEJ1dHRvbkVsZW1l
bnRJbXBsICZidXR0b24gPSBzdGF0aWNfY2FzdDxIVE1MQnV0dG9uRWxlbWVudEltcGwgJj4oZWxl
bWVudCk7CisgICAgICAgIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpCdXR0b25CbHVyKSB7
CisgICAgICAgICAgICBidXR0b24uYmx1cigpOworICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5l
ZCgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6
OkJ1dHRvbkZvY3VzKSB7CisgICAgICAgICAgICBidXR0b24uZm9jdXMoKTsKKyAgICAgICAgICAg
IHJldHVybiBVbmRlZmluZWQoKTsKKyAgICAgICAgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBj
YXNlIElEX0E6IHsKLSAgICAgIEhUTUxBbmNob3JFbGVtZW50SW1wbCAmYW5jaG9yID0gc3RhdGlj
X2Nhc3Q8SFRNTEFuY2hvckVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgaWYgKGlkID09
IEtKUzo6SFRNTEVsZW1lbnQ6OkFuY2hvckJsdXIpIHsKLSAgICAgICAgYW5jaG9yLmJsdXIoKTsK
LSAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoaWQg
PT0gS0pTOjpIVE1MRWxlbWVudDo6QW5jaG9yRm9jdXMpIHsKLSAgICAgICAgYW5jaG9yLmZvY3Vz
KCk7Ci0gICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKLSAgICAgIH0gCi0gICAgICBlbHNlIGlm
IChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpBbmNob3JUb1N0cmluZykgewotCXJldHVybiBTdHJp
bmcodGhpc09iai50b1N0cmluZyhleGVjKSk7Ci0gICAgICB9CisgICAgZWxzZSBpZiAoZWxlbWVu
dC5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0ZXh0YXJlYSgpKSkgeworICAgICAgICBIVE1MVGV4
dEFyZWFFbGVtZW50SW1wbCAmdGV4dGFyZWEgPSBzdGF0aWNfY2FzdDxIVE1MVGV4dEFyZWFFbGVt
ZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICAgICAgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6
OlRleHRBcmVhQmx1cikgeworICAgICAgICAgICAgdGV4dGFyZWEuYmx1cigpOworICAgICAgICAg
ICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGlkID09
IEtKUzo6SFRNTEVsZW1lbnQ6OlRleHRBcmVhRm9jdXMpIHsKKyAgICAgICAgICAgIHRleHRhcmVh
LmZvY3VzKCk7CisgICAgICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6VGV4dEFyZWFTZWxlY3QpIHsK
KyAgICAgICAgICAgIHRleHRhcmVhLnNlbGVjdCgpOworICAgICAgICAgICAgcmV0dXJuIFVuZGVm
aW5lZCgpOworICAgICAgICB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfVEFCTEU6
IHsKLSAgICAgIEhUTUxUYWJsZUVsZW1lbnRJbXBsICZ0YWJsZSA9IHN0YXRpY19jYXN0PEhUTUxU
YWJsZUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgaWYgKGlkID09IEtKUzo6SFRNTEVs
ZW1lbnQ6OlRhYmxlQ3JlYXRlVEhlYWQpCi0gICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMs
dGFibGUuY3JlYXRlVEhlYWQoKSk7Ci0gICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVt
ZW50OjpUYWJsZURlbGV0ZVRIZWFkKSB7Ci0gICAgICAgIHRhYmxlLmRlbGV0ZVRIZWFkKCk7Ci0g
ICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGlkID09
IEtKUzo6SFRNTEVsZW1lbnQ6OlRhYmxlQ3JlYXRlVEZvb3QpCi0gICAgICAgIHJldHVybiBnZXRE
T01Ob2RlKGV4ZWMsdGFibGUuY3JlYXRlVEZvb3QoKSk7Ci0gICAgICBlbHNlIGlmIChpZCA9PSBL
SlM6OkhUTUxFbGVtZW50OjpUYWJsZURlbGV0ZVRGb290KSB7Ci0gICAgICAgIHRhYmxlLmRlbGV0
ZVRGb290KCk7Ci0gICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKLSAgICAgIH0KLSAgICAgIGVs
c2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRhYmxlQ3JlYXRlQ2FwdGlvbikKLSAgICAg
ICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyx0YWJsZS5jcmVhdGVDYXB0aW9uKCkpOwotICAgICAg
ZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6VGFibGVEZWxldGVDYXB0aW9uKSB7Ci0g
ICAgICAgIHRhYmxlLmRlbGV0ZUNhcHRpb24oKTsKLSAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgp
OwotICAgICAgfQotICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6VGFibGVJ
bnNlcnRSb3cpCi0gICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsdGFibGUuaW5zZXJ0Um93
KGFyZ3NbMF0udG9JbnQzMihleGVjKSwgZXhjZXB0aW9uKSk7Ci0gICAgICBlbHNlIGlmIChpZCA9
PSBLSlM6OkhUTUxFbGVtZW50OjpUYWJsZURlbGV0ZVJvdykgewotICAgICAgICB0YWJsZS5kZWxl
dGVSb3coYXJnc1swXS50b0ludDMyKGV4ZWMpLCBleGNlcHRpb24pOwotICAgICAgICByZXR1cm4g
VW5kZWZpbmVkKCk7Ci0gICAgICB9CisgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNMb2NhbE5hbWUo
SFRNTE5hbWVzOjphKCkpKSB7CisgICAgICAgIEhUTUxBbmNob3JFbGVtZW50SW1wbCAmYW5jaG9y
ID0gc3RhdGljX2Nhc3Q8SFRNTEFuY2hvckVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgICAg
ICBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6QW5jaG9yQmx1cikgeworICAgICAgICAgICAg
YW5jaG9yLmJsdXIoKTsKKyAgICAgICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKKyAgICAgICAg
fQorICAgICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpBbmNob3JGb2N1cykg
eworICAgICAgICAgICAgYW5jaG9yLmZvY3VzKCk7CisgICAgICAgICAgICByZXR1cm4gVW5kZWZp
bmVkKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVu
dDo6QW5jaG9yVG9TdHJpbmcpCisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRoaXNPYmoudG9T
dHJpbmcoZXhlYykpOwogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX1RIRUFEOgotICAg
IGNhc2UgSURfVEJPRFk6Ci0gICAgY2FzZSBJRF9URk9PVDogewotICAgICAgSFRNTFRhYmxlU2Vj
dGlvbkVsZW1lbnRJbXBsICZ0YWJsZVNlY3Rpb24gPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVTZWN0
aW9uRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBpZiAoaWQgPT0gS0pTOjpIVE1MRWxl
bWVudDo6VGFibGVTZWN0aW9uSW5zZXJ0Um93KQotICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShl
eGVjLCB0YWJsZVNlY3Rpb24uaW5zZXJ0Um93KGFyZ3NbMF0udG9JbnQzMihleGVjKSwgZXhjZXB0
aW9uKSk7Ci0gICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUYWJsZVNlY3Rp
b25EZWxldGVSb3cpIHsKLSAgICAgICAgdGFibGVTZWN0aW9uLmRlbGV0ZVJvdyhhcmdzWzBdLnRv
SW50MzIoZXhlYyksIGV4Y2VwdGlvbik7Ci0gICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKLSAg
ICAgIH0KKyAgICBlbHNlIGlmIChlbGVtZW50Lmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnRhYmxl
KCkpKSB7CisgICAgICAgIEhUTUxUYWJsZUVsZW1lbnRJbXBsICZ0YWJsZSA9IHN0YXRpY19jYXN0
PEhUTUxUYWJsZUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgICAgICBpZiAoaWQgPT0gS0pT
OjpIVE1MRWxlbWVudDo6VGFibGVDcmVhdGVUSGVhZCkKKyAgICAgICAgICAgIHJldHVybiBnZXRE
T01Ob2RlKGV4ZWMsdGFibGUuY3JlYXRlVEhlYWQoKSk7CisgICAgICAgIGVsc2UgaWYgKGlkID09
IEtKUzo6SFRNTEVsZW1lbnQ6OlRhYmxlRGVsZXRlVEhlYWQpIHsKKyAgICAgICAgICAgIHRhYmxl
LmRlbGV0ZVRIZWFkKCk7CisgICAgICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CisgICAgICAg
IH0KKyAgICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6VGFibGVDcmVhdGVU
Rm9vdCkKKyAgICAgICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsdGFibGUuY3JlYXRlVEZv
b3QoKSk7CisgICAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRhYmxlRGVs
ZXRlVEZvb3QpIHsKKyAgICAgICAgICAgIHRhYmxlLmRlbGV0ZVRGb290KCk7CisgICAgICAgICAg
ICByZXR1cm4gVW5kZWZpbmVkKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoaWQgPT0g
S0pTOjpIVE1MRWxlbWVudDo6VGFibGVDcmVhdGVDYXB0aW9uKQorICAgICAgICAgICAgcmV0dXJu
IGdldERPTU5vZGUoZXhlYyx0YWJsZS5jcmVhdGVDYXB0aW9uKCkpOworICAgICAgICBlbHNlIGlm
IChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUYWJsZURlbGV0ZUNhcHRpb24pIHsKKyAgICAgICAg
ICAgIHRhYmxlLmRlbGV0ZUNhcHRpb24oKTsKKyAgICAgICAgICAgIHJldHVybiBVbmRlZmluZWQo
KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpU
YWJsZUluc2VydFJvdykKKyAgICAgICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsdGFibGUu
aW5zZXJ0Um93KGFyZ3NbMF0udG9JbnQzMihleGVjKSwgZXhjZXB0aW9uKSk7CisgICAgICAgIGVs
c2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRhYmxlRGVsZXRlUm93KSB7CisgICAgICAg
ICAgICB0YWJsZS5kZWxldGVSb3coYXJnc1swXS50b0ludDMyKGV4ZWMpLCBleGNlcHRpb24pOwor
ICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAgICAgICB9CiAgICAgfQotICAgIGJy
ZWFrOwotICAgIGNhc2UgSURfVFI6IHsKLSAgICAgIEhUTUxUYWJsZVJvd0VsZW1lbnRJbXBsICZ0
YWJsZVJvdyA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZVJvd0VsZW1lbnRJbXBsICY+KGVsZW1lbnQp
OwotICAgICAgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRhYmxlUm93SW5zZXJ0Q2VsbCkK
LSAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyx0YWJsZVJvdy5pbnNlcnRDZWxsKGFyZ3Nb
MF0udG9JbnQzMihleGVjKSwgZXhjZXB0aW9uKSk7Ci0gICAgICBlbHNlIGlmIChpZCA9PSBLSlM6
OkhUTUxFbGVtZW50OjpUYWJsZVJvd0RlbGV0ZUNlbGwpIHsKLSAgICAgICAgdGFibGVSb3cuZGVs
ZXRlQ2VsbChhcmdzWzBdLnRvSW50MzIoZXhlYyksIGV4Y2VwdGlvbik7Ci0gICAgICAgIHJldHVy
biBVbmRlZmluZWQoKTsKLSAgICAgIH0KKyAgICBlbHNlIGlmIChlbGVtZW50Lmhhc0xvY2FsTmFt
ZShIVE1MTmFtZXM6OnRoZWFkKCkpIHx8CisgICAgICAgICAgICAgZWxlbWVudC5oYXNMb2NhbE5h
bWUoSFRNTE5hbWVzOjp0Ym9keSgpKSB8fAorICAgICAgICAgICAgIGVsZW1lbnQuaGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6dGZvb3QoKSkpIHsKKyAgICAgICAgSFRNTFRhYmxlU2VjdGlvbkVsZW1l
bnRJbXBsICZ0YWJsZVNlY3Rpb24gPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVTZWN0aW9uRWxlbWVu
dEltcGwgJj4oZWxlbWVudCk7CisgICAgICAgIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpU
YWJsZVNlY3Rpb25JbnNlcnRSb3cpCisgICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVj
LCB0YWJsZVNlY3Rpb24uaW5zZXJ0Um93KGFyZ3NbMF0udG9JbnQzMihleGVjKSwgZXhjZXB0aW9u
KSk7CisgICAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRhYmxlU2VjdGlv
bkRlbGV0ZVJvdykgeworICAgICAgICAgICAgdGFibGVTZWN0aW9uLmRlbGV0ZVJvdyhhcmdzWzBd
LnRvSW50MzIoZXhlYyksIGV4Y2VwdGlvbik7CisgICAgICAgICAgICByZXR1cm4gVW5kZWZpbmVk
KCk7CisgICAgICAgIH0KICAgICB9Ci0gICAgY2FzZSBJRF9NQVJRVUVFOiB7CisgICAgZWxzZSBp
ZiAoZWxlbWVudC5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0cigpKSkgeworICAgICAgICBIVE1M
VGFibGVSb3dFbGVtZW50SW1wbCAmdGFibGVSb3cgPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVSb3dF
bGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICAgICAgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1l
bnQ6OlRhYmxlUm93SW5zZXJ0Q2VsbCkKKyAgICAgICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4
ZWMsdGFibGVSb3cuaW5zZXJ0Q2VsbChhcmdzWzBdLnRvSW50MzIoZXhlYyksIGV4Y2VwdGlvbikp
OworICAgICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUYWJsZVJvd0RlbGV0
ZUNlbGwpIHsKKyAgICAgICAgICAgIHRhYmxlUm93LmRlbGV0ZUNlbGwoYXJnc1swXS50b0ludDMy
KGV4ZWMpLCBleGNlcHRpb24pOworICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAg
ICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFzTG9jYWxOYW1lKEhUTUxOYW1l
czo6bWFycXVlZSgpKSkgewogICAgICAgICBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6TWFy
cXVlZVN0YXJ0ICYmIGVsZW1lbnQucmVuZGVyZXIoKSAmJiAKICAgICAgICAgICAgIGVsZW1lbnQu
cmVuZGVyZXIoKS0+bGF5ZXIoKSAmJgogICAgICAgICAgICAgZWxlbWVudC5yZW5kZXJlcigpLT5s
YXllcigpLT5tYXJxdWVlKCkpIHsKQEAgLTIyODUsOSArMjQzMCw5IEBAIFZhbHVlIEtKUzo6SFRN
TEVsZW1lbnRGdW5jdGlvbjo6dHJ5Q2FsbCgKICAgICAgICAgICAgIGVsZW1lbnQucmVuZGVyZXIo
KS0+bGF5ZXIoKS0+bWFycXVlZSgpLT5zdG9wKCk7CiAgICAgICAgICAgICByZXR1cm4gVW5kZWZp
bmVkKCk7CiAgICAgICAgIH0KLSAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGNhc2UgSURfQ0FO
VkFTOiB7CisjaWYgQVBQTEVfQ0hBTkdFUworICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6Y2FudmFzKCkpKSB7CiAgICAgICAgIGlmIChpZCA9PSBLSlM6OkhUTUxF
bGVtZW50OjpHZXRDb250ZXh0KSB7CiAgICAgICAgICAgICBpZiAoYXJncy5zaXplKCkgPT0gMCB8
fCAoYXJncy5zaXplKCkgPT0gMSAmJiBhcmdzWzBdLnRvU3RyaW5nKGV4ZWMpLnFzdHJpbmcoKS5s
b3dlcigpID09ICIyZCIpKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdChuZXcgQ29u
dGV4dDJEKCZlbGVtZW50KSk7CkBAIC0yMjk1LDczOCArMjQ0MCw3NTYgQEAgVmFsdWUgS0pTOjpI
VE1MRWxlbWVudEZ1bmN0aW9uOjp0cnlDYWxsKAogICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5l
ZCgpOwogICAgICAgICB9CiAgICAgfQotICAgIAotICAgIGJyZWFrOwotICB9CisjZW5kaWYKIAot
ICByZXR1cm4gVW5kZWZpbmVkKCk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCiB2b2lk
IEtKUzo6SFRNTEVsZW1lbnQ6OnRyeVB1dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZp
ZXIgJnByb3BlcnR5TmFtZSwgY29uc3QgVmFsdWUmIHZhbHVlLCBpbnQgYXR0cikKIHsKICNpZmRl
ZiBLSlNfVkVSQk9TRQotICBET006OkRPTVN0cmluZyBzdHIgPSB2YWx1ZS5pc0EoTnVsbFR5cGUp
ID8gRE9NOjpET01TdHJpbmcoKSA6IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpOworICAg
IERPTTo6RE9NU3RyaW5nIHN0ciA9IHZhbHVlLmlzQShOdWxsVHlwZSkgPyBET006OkRPTVN0cmlu
ZygpIDogdmFsdWUudG9TdHJpbmcoZXhlYykuc3RyaW5nKCk7CiAjZW5kaWYKLSAgSFRNTEVsZW1l
bnRJbXBsICZlbGVtZW50ID0gKnN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCAqPihpbXBsKCkp
OworICAgIEhUTUxFbGVtZW50SW1wbCAmZWxlbWVudCA9ICpzdGF0aWNfY2FzdDxIVE1MRWxlbWVu
dEltcGwgKj4oaW1wbCgpKTsKICNpZmRlZiBLSlNfVkVSQk9TRQotICBrZERlYnVnKDYwNzApIDw8
ICJLSlM6OkhUTUxFbGVtZW50Ojp0cnlQdXQgIiA8PCBwcm9wZXJ0eU5hbWUucXN0cmluZygpCi0g
ICAgICAgICAgICAgICAgPDwgIiB0aGlzVGFnPSIgPDwgZWxlbWVudC50YWdOYW1lKCkuc3RyaW5n
KCkKLSAgICAgICAgICAgICAgICA8PCAiIHN0cj0iIDw8IHN0ci5zdHJpbmcoKSA8PCBlbmRsOwor
ICAgIGtkRGVidWcoNjA3MCkgPDwgIktKUzo6SFRNTEVsZW1lbnQ6OnRyeVB1dCAiIDw8IHByb3Bl
cnR5TmFtZS5xc3RyaW5nKCkKKyAgICAgICAgICAgICAgICAgIDw8ICIgdGhpc1RhZz0iIDw8IGVs
ZW1lbnQudGFnTmFtZSgpLnN0cmluZygpCisgICAgICAgICAgICAgICAgICA8PCAiIHN0cj0iIDw8
IHN0ci5zdHJpbmcoKSA8PCBlbmRsOwogI2VuZGlmCi0gIC8vIEZpcnN0IGxvb2sgYXQgZHluYW1p
YyBwcm9wZXJ0aWVzCi0gIHN3aXRjaCAoZWxlbWVudC5pZCgpKSB7Ci0gICAgY2FzZSBJRF9TRUxF
Q1Q6IHsKLSAgICAgIEhUTUxTZWxlY3RFbGVtZW50SW1wbCAmc2VsZWN0ID0gc3RhdGljX2Nhc3Q8
SFRNTFNlbGVjdEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgYm9vbCBvazsKLSAgICAg
IC8qdWludCB1ID0qLyBwcm9wZXJ0eU5hbWUudG9VTG9uZygmb2spOwotICAgICAgaWYgKG9rKSB7
Ci0gICAgICAgIE9iamVjdCBjb2xsID0gT2JqZWN0OjpkeW5hbWljQ2FzdCggZ2V0U2VsZWN0SFRN
TENvbGxlY3Rpb24oZXhlYywgc2VsZWN0Lm9wdGlvbnNIVE1MQ29sbGVjdGlvbigpLmdldCgpLCAm
c2VsZWN0KSApOwotICAgICAgICBpZiAoICFjb2xsLmlzTnVsbCgpICkKLSAgICAgICAgICBjb2xs
LnB1dChleGVjLHByb3BlcnR5TmFtZSx2YWx1ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0K
KyAgICAvLyBGaXJzdCBsb29rIGF0IGR5bmFtaWMgcHJvcGVydGllcworICAgIGlmIChlbGVtZW50
Lmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnNlbGVjdCgpKSkgeworICAgICAgICBIVE1MU2VsZWN0
RWxlbWVudEltcGwgJnNlbGVjdCA9IHN0YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50SW1wbCAm
PihlbGVtZW50KTsKKyAgICAgICAgYm9vbCBvazsKKyAgICAgICAgLyp1aW50IHUgPSovIHByb3Bl
cnR5TmFtZS50b1VMb25nKCZvayk7CisgICAgICAgIGlmIChvaykgeworICAgICAgICAgICAgT2Jq
ZWN0IGNvbGwgPSBPYmplY3Q6OmR5bmFtaWNDYXN0KCBnZXRTZWxlY3RIVE1MQ29sbGVjdGlvbihl
eGVjLCBzZWxlY3Qub3B0aW9uc0hUTUxDb2xsZWN0aW9uKCkuZ2V0KCksICZzZWxlY3QpICk7Cisg
ICAgICAgICAgICBpZiAoIWNvbGwuaXNOdWxsKCkpCisgICAgICAgICAgICAgICAgY29sbC5wdXQo
ZXhlYyxwcm9wZXJ0eU5hbWUsdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CiAgICAgfQogI2lmIEFQUExFX0NIQU5HRVMKLSAgICBjYXNlIElEX0VNQkVEOgotICAgIGNhc2Ug
SURfT0JKRUNUOgotICAgIGNhc2UgSURfQVBQTEVUOiB7CisgICAgZWxzZSBpZiAoZWxlbWVudC5o
YXNMb2NhbE5hbWUoSFRNTE5hbWVzOjplbWJlZCgpKSB8fAorICAgICAgICAgICAgIGVsZW1lbnQu
aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b2JqZWN0KCkpIHx8CisgICAgICAgICAgICAgZWxlbWVu
dC5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjphcHBsZXQoKSkpIHsKIAlWYWx1ZSBydW50aW1lT2Jq
ZWN0ID0gZ2V0UnVudGltZU9iamVjdChleGVjLCZlbGVtZW50KTsKIAlpZiAoIXJ1bnRpbWVPYmpl
Y3QuaXNOdWxsKCkpIHsKIAkgICAgT2JqZWN0SW1wICppbXAgPSBzdGF0aWNfY2FzdDxPYmplY3RJ
bXAgKj4ocnVudGltZU9iamVjdC5pbXAoKSk7Ci0JICAgIGlmIChpbXAtPmNhblB1dChleGVjLCBw
cm9wZXJ0eU5hbWUpKSB7CisJICAgIGlmIChpbXAtPmNhblB1dChleGVjLCBwcm9wZXJ0eU5hbWUp
KQogCQlyZXR1cm4gaW1wLT5wdXQgKGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUpOwotCSAgICB9
CiAJfQogICAgIH0KLSAgICAgIGJyZWFrOwogI2VuZGlmCi0gICAgYnJlYWs7Ci0gIGRlZmF1bHQ6
Ci0gICAgICBicmVhazsKLSAgfQogCi0gIGNvbnN0IEhhc2hUYWJsZSogdGFibGUgPSBjbGFzc0lu
Zm8oKS0+cHJvcEhhc2hUYWJsZTsgLy8gZ2V0IHRoZSByaWdodCBoYXNodGFibGUKLSAgY29uc3Qg
SGFzaEVudHJ5KiBlbnRyeSA9IExvb2t1cDo6ZmluZEVudHJ5KHRhYmxlLCBwcm9wZXJ0eU5hbWUp
OwotICBpZiAoZW50cnkpIHsKLSAgICBpZiAoZW50cnktPmF0dHIgJiBGdW5jdGlvbikgLy8gZnVu
Y3Rpb246IHB1dCBhcyBvdmVycmlkZSBwcm9wZXJ0eQotICAgIHsKLSAgICAgIE9iamVjdEltcDo6
cHV0KGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIGF0dHIpOwotICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICBlbHNlIGlmICgoZW50cnktPmF0dHIgJiBSZWFkT25seSkgPT0gMCkgLy8gbGV0IERP
TU9iamVjdExvb2t1cFB1dCBwcmludCB0aGUgd2FybmluZyBpZiBub3QKLSAgICB7Ci0gICAgICBw
dXRWYWx1ZShleGVjLCBlbnRyeS0+dmFsdWUsIHZhbHVlLCBhdHRyKTsKLSAgICAgIHJldHVybjsK
KyAgICBjb25zdCBIYXNoVGFibGUqIHRhYmxlID0gY2xhc3NJbmZvKCktPnByb3BIYXNoVGFibGU7
IC8vIGdldCB0aGUgcmlnaHQgaGFzaHRhYmxlCisgICAgY29uc3QgSGFzaEVudHJ5KiBlbnRyeSA9
IExvb2t1cDo6ZmluZEVudHJ5KHRhYmxlLCBwcm9wZXJ0eU5hbWUpOworICAgIGlmIChlbnRyeSkg
eworICAgICAgICBpZiAoZW50cnktPmF0dHIgJiBGdW5jdGlvbikgeyAvLyBmdW5jdGlvbjogcHV0
IGFzIG92ZXJyaWRlIHByb3BlcnR5CisgICAgICAgICAgICBPYmplY3RJbXA6OnB1dChleGVjLCBw
cm9wZXJ0eU5hbWUsIHZhbHVlLCBhdHRyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICBlbHNlIGlmICgoZW50cnktPmF0dHIgJiBSZWFkT25seSkgPT0gMCkgeyAvLyBs
ZXQgRE9NT2JqZWN0TG9va3VwUHV0IHByaW50IHRoZSB3YXJuaW5nIGlmIG5vdAorICAgICAgICAg
ICAgcHV0VmFsdWUoZXhlYywgZW50cnktPnZhbHVlLCB2YWx1ZSwgYXR0cik7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KICAgICB9Ci0gIH0KLSAgRE9NT2JqZWN0TG9va3VwUHV0PEtK
Uzo6SFRNTEVsZW1lbnQsIERPTUVsZW1lbnQ+KGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIGF0
dHIsICZIVE1MRWxlbWVudFRhYmxlLCB0aGlzKTsKKworICAgIERPTU9iamVjdExvb2t1cFB1dDxL
SlM6OkhUTUxFbGVtZW50LCBET01FbGVtZW50PihleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBh
dHRyLCAmSFRNTEVsZW1lbnRUYWJsZSwgdGhpcyk7CiB9CiAKLXZvaWQgSFRNTEVsZW1lbnQ6OnB1
dFZhbHVlKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGlu
dCkKK3ZvaWQgSFRNTEVsZW1lbnQ6Omh0bWxTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKIHsKLSAg
RE9NRXhjZXB0aW9uVHJhbnNsYXRvciBleGNlcHRpb24oZXhlYyk7Ci0gIERPTTo6RE9NU3RyaW5n
IHN0ciA9IHZhbHVlLmlzQShOdWxsVHlwZSkgPyBET006OkRPTVN0cmluZygpIDogdmFsdWUudG9T
dHJpbmcoZXhlYykuc3RyaW5nKCk7Ci0gIEhUTUxFbGVtZW50SW1wbCAmZWxlbWVudCA9ICpzdGF0
aWNfY2FzdDxIVE1MRWxlbWVudEltcGwgKj4oaW1wbCgpKTsKLSNpZmRlZiBLSlNfVkVSQk9TRQot
ICBrZERlYnVnKDYwNzApIDw8ICJLSlM6OkhUTUxFbGVtZW50OjpwdXRWYWx1ZSAiCi0gICAgICAg
ICAgICAgICAgPDwgIiB0aGlzVGFnPSIgPDwgZWxlbWVudC50YWdOYW1lKCkuc3RyaW5nKCkKLSAg
ICAgICAgICAgICAgICA8PCAiIHRva2VuPSIgPDwgdG9rZW4gPDwgZW5kbDsKLSNlbmRpZgorICAg
IEhUTUxIZWFkRWxlbWVudEltcGwgJmhlYWQgPSAqc3RhdGljX2Nhc3Q8SFRNTEhlYWRFbGVtZW50
SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IEhlYWRQcm9maWxlKSAKKyAgICAgICAg
aGVhZC5zZXRQcm9maWxlKHN0cik7Cit9CiAKLSAgc3dpdGNoIChlbGVtZW50LmlkKCkpIHsKLSAg
Y2FzZSBJRF9IVE1MOiB7Ci0gICAgICBIVE1MSHRtbEVsZW1lbnRJbXBsICZodG1sID0gc3RhdGlj
X2Nhc3Q8SFRNTEh0bWxFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9r
ZW4pIHsKLSAgICAgIGNhc2UgSHRtbFZlcnNpb246ICAgICAgICAgeyBodG1sLnNldFZlcnNpb24o
c3RyKTsgcmV0dXJuOyB9Ci0gICAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfSEVBRDog
ewotICAgIEhUTUxIZWFkRWxlbWVudEltcGwgJmhlYWQgPSBzdGF0aWNfY2FzdDxIVE1MSGVhZEVs
ZW1lbnRJbXBsICY+KGVsZW1lbnQpOwordm9pZCBIVE1MRWxlbWVudDo6aGVhZFNldHRlcihFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRP
TVN0cmluZyYgc3RyKQoreworICAgIEhUTUxIZWFkRWxlbWVudEltcGwgJmhlYWQgPSAqc3RhdGlj
X2Nhc3Q8SFRNTEhlYWRFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IEhl
YWRQcm9maWxlKSAKKyAgICAgICAgaGVhZC5zZXRQcm9maWxlKHN0cik7Cit9CisKK3ZvaWQgSFRN
TEVsZW1lbnQ6OmxpbmtTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZh
bHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MTGlua0Vs
ZW1lbnRJbXBsICZsaW5rID0gKnN0YXRpY19jYXN0PEhUTUxMaW5rRWxlbWVudEltcGwqPihpbXBs
KCkpOwogICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIEhlYWRQcm9maWxlOiAgICAgICAg
IHsgaGVhZC5zZXRQcm9maWxlKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIExpbmtEaXNh
YmxlZDogICAgICAgIHsgbGluay5zZXREaXNhYmxlZCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyBy
ZXR1cm47IH0KKyAgICAgICAgY2FzZSBMaW5rQ2hhcnNldDogICAgICAgICB7IGxpbmsuc2V0Q2hh
cnNldChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBMaW5rSHJlZjogICAgICAgICAgICB7
IGxpbmsuc2V0SHJlZihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBMaW5rSHJlZkxhbmc6
ICAgICAgICB7IGxpbmsuc2V0SHJlZmxhbmcoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2Ug
TGlua01lZGlhOiAgICAgICAgICAgeyBsaW5rLnNldE1lZGlhKHN0cik7IHJldHVybjsgfQorICAg
ICAgICBjYXNlIExpbmtSZWw6ICAgICAgICAgICAgIHsgbGluay5zZXRSZWwoc3RyKTsgcmV0dXJu
OyB9CisgICAgICAgIGNhc2UgTGlua1JldjogICAgICAgICAgICAgeyBsaW5rLnNldFJldihzdHIp
OyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBMaW5rVGFyZ2V0OiAgICAgICAgICB7IGxpbmsuc2V0
VGFyZ2V0KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIExpbmtUeXBlOiAgICAgICAgICAg
IHsgbGluay5zZXRUeXBlKHN0cik7IHJldHVybjsgfQogICAgIH0KLSAgfQotICBicmVhazsKLSAg
Y2FzZSBJRF9MSU5LOiB7Ci0gICAgSFRNTExpbmtFbGVtZW50SW1wbCAmbGluayA9IHN0YXRpY19j
YXN0PEhUTUxMaW5rRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikg
ewotICAgICAgY2FzZSBMaW5rRGlzYWJsZWQ6ICAgICAgICB7IGxpbmsuc2V0RGlzYWJsZWQodmFs
dWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIExpbmtDaGFyc2V0OiAg
ICAgICAgIHsgbGluay5zZXRDaGFyc2V0KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBMaW5r
SHJlZjogICAgICAgICAgICB7IGxpbmsuc2V0SHJlZihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNh
c2UgTGlua0hyZWZMYW5nOiAgICAgICAgeyBsaW5rLnNldEhyZWZsYW5nKHN0cik7IHJldHVybjsg
fQotICAgICAgY2FzZSBMaW5rTWVkaWE6ICAgICAgICAgICB7IGxpbmsuc2V0TWVkaWEoc3RyKTsg
cmV0dXJuOyB9Ci0gICAgICBjYXNlIExpbmtSZWw6ICAgICAgICAgICAgIHsgbGluay5zZXRSZWwo
c3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIExpbmtSZXY6ICAgICAgICAgICAgIHsgbGluay5z
ZXRSZXYoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIExpbmtUYXJnZXQ6ICAgICAgICAgIHsg
bGluay5zZXRUYXJnZXQoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIExpbmtUeXBlOiAgICAg
ICAgICAgIHsgbGluay5zZXRUeXBlKHN0cik7IHJldHVybjsgfQotICAgICAgfQotICAgIH0KLSAg
ICBicmVhazsKLSAgICBjYXNlIElEX1RJVExFOiB7Ci0gICAgICBIVE1MVGl0bGVFbGVtZW50SW1w
bCAmdGl0bGUgPSBzdGF0aWNfY2FzdDxIVE1MVGl0bGVFbGVtZW50SW1wbCAmPihlbGVtZW50KTsK
LSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgVGl0bGVUZXh0OiAgICAgICAgICAg
ICAgICAgeyB0aXRsZS5zZXRUZXh0KHN0cik7IHJldHVybjsgfQotICAgICAgfQotICAgIH0KLSAg
ICBicmVhazsKLSAgICBjYXNlIElEX01FVEE6IHsKLSAgICAgIEhUTUxNZXRhRWxlbWVudEltcGwg
Jm1ldGEgPSBzdGF0aWNfY2FzdDxIVE1MTWV0YUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAg
ICAgc3dpdGNoICh0b2tlbikgewotICAgICAgY2FzZSBNZXRhQ29udGVudDogICAgICAgICB7IG1l
dGEuc2V0Q29udGVudChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgTWV0YUh0dHBFcXVpdjog
ICAgICAgeyBtZXRhLnNldEh0dHBFcXVpdihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgTWV0
YU5hbWU6ICAgICAgICAgICAgeyBtZXRhLnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBj
YXNlIE1ldGFTY2hlbWU6ICAgICAgICAgIHsgbWV0YS5zZXRTY2hlbWUoc3RyKTsgcmV0dXJuOyB9
Ci0gICAgICB9Ci0gICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfQkFTRTogewotICAgICAg
SFRNTEJhc2VFbGVtZW50SW1wbCAmYmFzZSA9IHN0YXRpY19jYXN0PEhUTUxCYXNlRWxlbWVudElt
cGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIEJhc2VI
cmVmOiAgICAgICAgICAgIHsgYmFzZS5zZXRIcmVmKHN0cik7IHJldHVybjsgfQotICAgICAgY2Fz
ZSBCYXNlVGFyZ2V0OiAgICAgICAgICB7IGJhc2Uuc2V0VGFyZ2V0KHN0cik7IHJldHVybjsgfQot
ICAgICAgfQotICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0lTSU5ERVg6IHsKLSAgICAg
IEhUTUxJc0luZGV4RWxlbWVudEltcGwgJmlzaW5kZXggPSBzdGF0aWNfY2FzdDxIVE1MSXNJbmRl
eEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAg
Ly8gcmVhZC1vbmx5OiBmb3JtCi0gICAgICBjYXNlIElzSW5kZXhQcm9tcHQ6ICAgICAgICAgICAg
ICAgeyBpc2luZGV4LnNldFByb21wdChzdHIpOyByZXR1cm47IH0KLSAgICAgIH0KLSAgICB9Ci0g
ICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9TVFlMRTogewotICAgICAgSFRNTFN0eWxlRWxlbWVudElt
cGwgJnN0eWxlID0gc3RhdGljX2Nhc3Q8SFRNTFN0eWxlRWxlbWVudEltcGwgJj4oZWxlbWVudCk7
Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIFN0eWxlRGlzYWJsZWQ6ICAgICAg
ICB7IHN0eWxlLnNldERpc2FibGVkKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQot
ICAgICAgY2FzZSBTdHlsZU1lZGlhOiAgICAgICAgICAgeyBzdHlsZS5zZXRNZWRpYShzdHIpOyBy
ZXR1cm47IH0KLSAgICAgIGNhc2UgU3R5bGVUeXBlOiAgICAgICAgICAgIHsgc3R5bGUuc2V0VHlw
ZShzdHIpOyByZXR1cm47IH0KLSAgICAgIH0KLSAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJ
RF9CT0RZOiB7Ci0gICAgICBIVE1MQm9keUVsZW1lbnRJbXBsICZib2R5ID0gc3RhdGljX2Nhc3Q8
SFRNTEJvZHlFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsK
LSAgICAgIGNhc2UgQm9keUFMaW5rOiAgICAgICAgICAgeyBib2R5LnNldEFMaW5rKHN0cik7IHJl
dHVybjsgfQotICAgICAgY2FzZSBCb2R5QmFja2dyb3VuZDogICAgICB7IGJvZHkuc2V0QmFja2dy
b3VuZChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQm9keUJnQ29sb3I6ICAgICAgICAgeyBi
b2R5LnNldEJnQ29sb3Ioc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEJvZHlMaW5rOiAgICAg
ICAgICAgIHsgYm9keS5zZXRMaW5rKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBCb2R5VGV4
dDogICAgICAgICAgICB7IGJvZHkuc2V0VGV4dChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2Ug
Qm9keVZMaW5rOiAgICAgICAgICAgeyBib2R5LnNldFZMaW5rKHN0cik7IHJldHVybjsgfQotICAg
ICAgY2FzZSBCb2R5U2Nyb2xsTGVmdDoKLSAgICAgIGNhc2UgQm9keVNjcm9sbFRvcDogewotICAg
ICAgICAgIFFTY3JvbGxWaWV3KiBzdmlldyA9IGJvZHkub3duZXJEb2N1bWVudCgpLT52aWV3KCk7
Ci0gICAgICAgICAgaWYgKHN2aWV3KSB7Ci0gICAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgZG9j
dW1lbnQncyBsYXlvdXQgYmVmb3JlIHdlIGNvbXB1dGUgdGhlc2UgYXR0cmlidXRlcy4KLSAgICAg
ICAgICAgICAgaWYgKERvY3VtZW50SW1wbCogZG9jID0gYm9keS5nZXREb2N1bWVudCgpKQotICAg
ICAgICAgICAgICAgICAgZG9jLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMo
KTsKLSAgICAgICAgICAgICAgaWYgKHRva2VuID09IEJvZHlTY3JvbGxMZWZ0KQotICAgICAgICAg
ICAgICAgICAgc3ZpZXctPnNldENvbnRlbnRzUG9zKHZhbHVlLnRvSW50MzIoZXhlYyksIHN2aWV3
LT5jb250ZW50c1koKSk7Ci0gICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgIHN2
aWV3LT5zZXRDb250ZW50c1Bvcyhzdmlldy0+Y29udGVudHNYKCksIHZhbHVlLnRvSW50MzIoZXhl
YykpOwotICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgIH0K
LSAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9GT1JNOiB7Ci0gICAgICBIVE1MRm9ybUVs
ZW1lbnRJbXBsICZmb3JtID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50SW1wbCAmPihlbGVt
ZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIC8vIHJlYWQtb25seTogZWxlbWVu
dHMKLSAgICAgIC8vIHJlYWQtb25seTogbGVuZ3RoCi0gICAgICBjYXNlIEZvcm1OYW1lOiAgICAg
ICAgICAgIHsgZm9ybS5zZXROYW1lKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBGb3JtQWNj
ZXB0Q2hhcnNldDogICB7IGZvcm0uc2V0QWNjZXB0Q2hhcnNldChzdHIpOyByZXR1cm47IH0KLSAg
ICAgIGNhc2UgRm9ybUFjdGlvbjogICAgICAgICAgeyBmb3JtLnNldEFjdGlvbihzdHIpOyByZXR1
cm47IH0KLSAgICAgIGNhc2UgRm9ybUVuY1R5cGU6ICAgICAgICAgeyBmb3JtLnNldEVuY3R5cGUo
c3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEZvcm1NZXRob2Q6ICAgICAgICAgIHsgZm9ybS5z
ZXRNZXRob2Qoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEZvcm1UYXJnZXQ6ICAgICAgICAg
IHsgZm9ybS5zZXRUYXJnZXQoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICB9Ci0gICAgfQotICAgIGJy
ZWFrOwotICAgIGNhc2UgSURfU0VMRUNUOiB7Ci0gICAgICBIVE1MU2VsZWN0RWxlbWVudEltcGwg
JnNlbGVjdCA9IHN0YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50SW1wbCAmPihlbGVtZW50KTsK
LSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIC8vIHJlYWQtb25seTogdHlwZQotICAgICAg
Y2FzZSBTZWxlY3RTZWxlY3RlZEluZGV4OiAgIHsgc2VsZWN0LnNldFNlbGVjdGVkSW5kZXgodmFs
dWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBTZWxlY3RWYWx1ZTogICAg
ICAgICAgIHsgc2VsZWN0LnNldFZhbHVlKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBTZWxl
Y3RMZW5ndGg6ICAgICAgICAgIHsgLy8gcmVhZC1vbmx5IGFjY29yZGluZyB0byB0aGUgTlMgc3Bl
YywgYnV0IHdlYnBhZ2VzIG5lZWQgaXQgd3JpdGVhYmxlCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIE9iamVjdCBjb2xsID0gT2JqZWN0OjpkeW5hbWljQ2FzdCggZ2V0
U2VsZWN0SFRNTENvbGxlY3Rpb24oZXhlYywgc2VsZWN0Lm9wdGlvbnNIVE1MQ29sbGVjdGlvbigp
LmdldCgpLCAmc2VsZWN0KSApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoICFjb2xsLmlzTnVsbCgpICkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb2xsLnB1dChleGVjLGxlbmd0aFByb3BlcnR5TmFtZSx2YWx1ZSk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgIC8vIHJlYWQtb25seTogZm9y
bQotICAgICAgLy8gcmVhZC1vbmx5OiBvcHRpb25zCi0gICAgICBjYXNlIFNlbGVjdERpc2FibGVk
OiAgICAgICAgeyBzZWxlY3Quc2V0RGlzYWJsZWQodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0
dXJuOyB9Ci0gICAgICBjYXNlIFNlbGVjdE11bHRpcGxlOiAgICAgICAgeyBzZWxlY3Quc2V0TXVs
dGlwbGUodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFNlbGVj
dE5hbWU6ICAgICAgICAgICAgeyBzZWxlY3Quc2V0TmFtZShzdHIpOyByZXR1cm47IH0KLSAgICAg
IGNhc2UgU2VsZWN0U2l6ZTogICAgICAgICAgICB7IHNlbGVjdC5zZXRTaXplKHZhbHVlLnRvSW50
MzIoZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgU2VsZWN0VGFiSW5kZXg6ICAgICAgICB7
IHNlbGVjdC5zZXRUYWJJbmRleCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAg
ICB9Ci0gICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfT1BUR1JPVVA6IHsKLSAgICAgIEhU
TUxPcHRHcm91cEVsZW1lbnRJbXBsICZvcHRncm91cCA9IHN0YXRpY19jYXN0PEhUTUxPcHRHcm91
cEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAg
Y2FzZSBPcHRHcm91cERpc2FibGVkOiAgICAgICAgeyBvcHRncm91cC5zZXREaXNhYmxlZCh2YWx1
ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgT3B0R3JvdXBMYWJlbDog
ICAgICAgICAgIHsgb3B0Z3JvdXAuc2V0TGFiZWwoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICB9Ci0g
ICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfT1BUSU9OOiB7Ci0gICAgICBIVE1MT3B0aW9u
RWxlbWVudEltcGwgJm9wdGlvbiA9IHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50SW1wbCAm
PihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIC8vIHJlYWQtb25seTog
Zm9ybQotICAgICAgY2FzZSBPcHRpb25EZWZhdWx0U2VsZWN0ZWQ6IHsgb3B0aW9uLnNldERlZmF1
bHRTZWxlY3RlZCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2Ug
T3B0aW9uVGV4dDogICAgICAgICAgICB7IG9wdGlvbi5zZXRUZXh0KHN0ciwgZXhjZXB0aW9uKTsg
cmV0dXJuOyB9Ci0gICAgICAvLyByZWFkLW9ubHk6IGluZGV4Ci0gICAgICBjYXNlIE9wdGlvbkRp
c2FibGVkOiAgICAgICAgeyBvcHRpb24uc2V0RGlzYWJsZWQodmFsdWUudG9Cb29sZWFuKGV4ZWMp
KTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIE9wdGlvbkxhYmVsOiAgICAgICAgICAgeyBvcHRpb24u
c2V0TGFiZWwoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIE9wdGlvblNlbGVjdGVkOiAgICAg
ICAgeyBvcHRpb24uc2V0U2VsZWN0ZWQodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9
Ci0gICAgICBjYXNlIE9wdGlvblZhbHVlOiAgICAgICAgICAgeyBvcHRpb24uc2V0VmFsdWUoc3Ry
KTsgcmV0dXJuOyB9Ci0gICAgICB9Ci0gICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfSU5Q
VVQ6IHsKLSAgICAgIEhUTUxJbnB1dEVsZW1lbnRJbXBsICZpbnB1dCA9IHN0YXRpY19jYXN0PEhU
TUxJbnB1dEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewot
ICAgICAgY2FzZSBJbnB1dERlZmF1bHRWYWx1ZTogICAgeyBpbnB1dC5zZXREZWZhdWx0VmFsdWUo
c3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElucHV0RGVmYXVsdENoZWNrZWQ6ICB7IGlucHV0
LnNldERlZmF1bHRDaGVja2VkKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQotICAg
ICAgLy8gcmVhZC1vbmx5OiBmb3JtCi0gICAgICBjYXNlIElucHV0QWNjZXB0OiAgICAgICAgICB7
IGlucHV0LnNldEFjY2VwdChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSW5wdXRBY2Nlc3NL
ZXk6ICAgICAgIHsgaW5wdXQuc2V0QWNjZXNzS2V5KHN0cik7IHJldHVybjsgfQotICAgICAgY2Fz
ZSBJbnB1dEFsaWduOiAgICAgICAgICAgeyBpbnB1dC5zZXRBbGlnbihzdHIpOyByZXR1cm47IH0K
LSAgICAgIGNhc2UgSW5wdXRBbHQ6ICAgICAgICAgICAgIHsgaW5wdXQuc2V0QWx0KHN0cik7IHJl
dHVybjsgfQotICAgICAgY2FzZSBJbnB1dENoZWNrZWQ6ICAgICAgICAgeyBpbnB1dC5zZXRDaGVj
a2VkKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBJbnB1dERp
c2FibGVkOiAgICAgICAgeyBpbnB1dC5zZXREaXNhYmxlZCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykp
OyByZXR1cm47IH0KLSAgICAgIGNhc2UgSW5wdXRNYXhMZW5ndGg6ICAgICAgIHsgaW5wdXQuc2V0
TWF4TGVuZ3RoKHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSW5w
dXROYW1lOiAgICAgICAgICAgIHsgaW5wdXQuc2V0TmFtZShzdHIpOyByZXR1cm47IH0KLSAgICAg
IGNhc2UgSW5wdXRSZWFkT25seTogICAgICAgIHsgaW5wdXQuc2V0UmVhZE9ubHkodmFsdWUudG9C
b29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElucHV0U2l6ZTogICAgICAgICAg
ICB7IGlucHV0LnNldFNpemUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElucHV0U3JjOiAg
ICAgICAgICAgICB7IGlucHV0LnNldFNyYyhzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSW5w
dXRUYWJJbmRleDogICAgICAgIHsgaW5wdXQuc2V0VGFiSW5kZXgodmFsdWUudG9JbnQzMihleGVj
KSk7IHJldHVybjsgfQotICAgICAgY2FzZSBJbnB1dFR5cGU6ICAgICAgICAgICAgeyBpbnB1dC5z
ZXRUeXBlKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBJbnB1dFVzZU1hcDogICAgICAgICAg
eyBpbnB1dC5zZXRVc2VNYXAoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElucHV0VmFsdWU6
ICAgICAgICAgICB7IGlucHV0LnNldFZhbHVlKHN0cik7IHJldHVybjsgfQotICAgICAgfQotICAg
IH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX1RFWFRBUkVBOiB7Ci0gICAgICBIVE1MVGV4dEFy
ZWFFbGVtZW50SW1wbCAmdGV4dGFyZWEgPSBzdGF0aWNfY2FzdDxIVE1MVGV4dEFyZWFFbGVtZW50
SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgVGV4
dEFyZWFEZWZhdWx0VmFsdWU6ICAgIHsgdGV4dGFyZWEuc2V0RGVmYXVsdFZhbHVlKHN0cik7IHJl
dHVybjsgfQotICAgICAgLy8gcmVhZC1vbmx5OiBmb3JtCi0gICAgICBjYXNlIFRleHRBcmVhQWNj
ZXNzS2V5OiAgICAgICB7IHRleHRhcmVhLnNldEFjY2Vzc0tleShzdHIpOyByZXR1cm47IH0KLSAg
ICAgIGNhc2UgVGV4dEFyZWFDb2xzOiAgICAgICAgICAgIHsgdGV4dGFyZWEuc2V0Q29scyh2YWx1
ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRleHRBcmVhRGlzYWJsZWQ6
ICAgICAgICB7IHRleHRhcmVhLnNldERpc2FibGVkKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJl
dHVybjsgfQotICAgICAgY2FzZSBUZXh0QXJlYU5hbWU6ICAgICAgICAgICAgeyB0ZXh0YXJlYS5z
ZXROYW1lKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBUZXh0QXJlYVJlYWRPbmx5OiAgICAg
ICAgeyB0ZXh0YXJlYS5zZXRSZWFkT25seSh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47
IH0KLSAgICAgIGNhc2UgVGV4dEFyZWFSb3dzOiAgICAgICAgICAgIHsgdGV4dGFyZWEuc2V0Um93
cyh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRleHRBcmVhVGFi
SW5kZXg6ICAgICAgICB7IHRleHRhcmVhLnNldFRhYkluZGV4KHZhbHVlLnRvSW50MzIoZXhlYykp
OyByZXR1cm47IH0KLSAgICAgIC8vIHJlYWQtb25seTogdHlwZQotICAgICAgY2FzZSBUZXh0QXJl
YVZhbHVlOiAgICAgICAgICAgeyB0ZXh0YXJlYS5zZXRWYWx1ZShzdHIpOyByZXR1cm47IH0KLSAg
ICAgIH0KLSAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9CVVRUT046IHsKLSAgICAgIEhU
TUxCdXR0b25FbGVtZW50SW1wbCAmYnV0dG9uID0gc3RhdGljX2Nhc3Q8SFRNTEJ1dHRvbkVsZW1l
bnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgLy8gcmVh
ZC1vbmx5OiBmb3JtCi0gICAgICBjYXNlIEJ1dHRvbkFjY2Vzc0tleTogICAgICAgeyBidXR0b24u
c2V0QWNjZXNzS2V5KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBCdXR0b25EaXNhYmxlZDog
ICAgICAgIHsgYnV0dG9uLnNldERpc2FibGVkKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVy
bjsgfQotICAgICAgY2FzZSBCdXR0b25OYW1lOiAgICAgICAgICAgIHsgYnV0dG9uLnNldE5hbWUo
c3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEJ1dHRvblRhYkluZGV4OiAgICAgICAgeyBidXR0
b24uc2V0VGFiSW5kZXgodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQotICAgICAgLy8g
cmVhZC1vbmx5OiB0eXBlCi0gICAgICBjYXNlIEJ1dHRvblZhbHVlOiAgICAgICAgICAgeyBidXR0
b24uc2V0VmFsdWUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICB9Ci0gICAgfQotICAgIGJyZWFrOwot
ICAgIGNhc2UgSURfTEFCRUw6IHsKLSAgICAgIEhUTUxMYWJlbEVsZW1lbnRJbXBsICZsYWJlbCA9
IHN0YXRpY19jYXN0PEhUTUxMYWJlbEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dp
dGNoICh0b2tlbikgewotICAgICAgLy8gcmVhZC1vbmx5OiBmb3JtCi0gICAgICBjYXNlIExhYmVs
QWNjZXNzS2V5OiAgICAgICB7IGxhYmVsLnNldEFjY2Vzc0tleShzdHIpOyByZXR1cm47IH0KLSAg
ICAgIGNhc2UgTGFiZWxIdG1sRm9yOiAgICAgICAgIHsgbGFiZWwuc2V0SHRtbEZvcihzdHIpOyBy
ZXR1cm47IH0KLSAgICAgIH0KLSAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9MRUdFTkQ6
IHsKLSAgICAgIEhUTUxMZWdlbmRFbGVtZW50SW1wbCAmbGVnZW5kID0gc3RhdGljX2Nhc3Q8SFRN
TExlZ2VuZEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewot
ICAgICAgLy8gcmVhZC1vbmx5OiBmb3JtCi0gICAgICBjYXNlIExlZ2VuZEFjY2Vzc0tleTogICAg
ICAgeyBsZWdlbmQuc2V0QWNjZXNzS2V5KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBMZWdl
bmRBbGlnbjogICAgICAgICAgIHsgbGVnZW5kLnNldEFsaWduKHN0cik7IHJldHVybjsgfQotICAg
ICAgfQorfQorCit2b2lkIEhUTUxFbGVtZW50Ojp0aXRsZVNldHRlcihFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3Ry
KQoreworICAgICBIVE1MVGl0bGVFbGVtZW50SW1wbCYgdGl0bGUgPSAqc3RhdGljX2Nhc3Q8SFRN
TFRpdGxlRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgICBpZiAodG9rZW4gPT0gVGl0bGVUZXh0
KQorICAgICAgICB0aXRsZS5zZXRUZXh0KHN0cik7Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6Om1l
dGFTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwg
Y29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MTWV0YUVsZW1lbnRJbXBsJiBt
ZXRhID0gKnN0YXRpY19jYXN0PEhUTUxNZXRhRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3
aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBNZXRhQ29udGVudDogICAgICAgICB7IG1ldGEu
c2V0Q29udGVudChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBNZXRhSHR0cEVxdWl2OiAg
ICAgICB7IG1ldGEuc2V0SHR0cEVxdWl2KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIE1l
dGFOYW1lOiAgICAgICAgICAgIHsgbWV0YS5zZXROYW1lKHN0cik7IHJldHVybjsgfQorICAgICAg
ICBjYXNlIE1ldGFTY2hlbWU6ICAgICAgICAgIHsgbWV0YS5zZXRTY2hlbWUoc3RyKTsgcmV0dXJu
OyB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfVUw6IHsKLSAgICAgIEhUTUxVTGlz
dEVsZW1lbnRJbXBsICZ1TGlzdCA9IHN0YXRpY19jYXN0PEhUTUxVTGlzdEVsZW1lbnRJbXBsICY+
KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgY2FzZSBVTGlzdENvbXBh
Y3Q6ICAgICAgICAgeyB1TGlzdC5zZXRDb21wYWN0KHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJl
dHVybjsgfQotICAgICAgY2FzZSBVTGlzdFR5cGU6ICAgICAgICAgICAgeyB1TGlzdC5zZXRUeXBl
KHN0cik7IHJldHVybjsgfQotICAgICAgfQorfQorCit2b2lkIEhUTUxFbGVtZW50OjpiYXNlU2V0
dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0
IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTEJhc2VFbGVtZW50SW1wbCYgYmFzZSA9
ICpzdGF0aWNfY2FzdDxIVE1MQmFzZUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2gg
KHRva2VuKSB7CisgICAgICAgIGNhc2UgQmFzZUhyZWY6ICAgICAgICAgICAgeyBiYXNlLnNldEhy
ZWYoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQmFzZVRhcmdldDogICAgICAgICAgeyBi
YXNlLnNldFRhcmdldChzdHIpOyByZXR1cm47IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2Fz
ZSBJRF9PTDogewotICAgICAgSFRNTE9MaXN0RWxlbWVudEltcGwgJm9MaXN0ID0gc3RhdGljX2Nh
c3Q8SFRNTE9MaXN0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2Vu
KSB7Ci0gICAgICBjYXNlIE9MaXN0Q29tcGFjdDogICAgICAgICB7IG9MaXN0LnNldENvbXBhY3Qo
dmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIE9MaXN0U3RhcnQ6
ICAgICAgICAgICB7IG9MaXN0LnNldFN0YXJ0KHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47
IH0KLSAgICAgIGNhc2UgT0xpc3RUeXBlOiAgICAgICAgICAgIHsgb0xpc3Quc2V0VHlwZShzdHIp
OyByZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6aXNJbmRleFNldHRl
cihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBE
T006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxJc0luZGV4RWxlbWVudEltcGwmIGlzaW5k
ZXggPSAqc3RhdGljX2Nhc3Q8SFRNTElzSW5kZXhFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAg
aWYgKHRva2VuID09IElzSW5kZXhQcm9tcHQpCisgICAgICAgIGlzaW5kZXguc2V0UHJvbXB0KHN0
cik7Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OnN0eWxlU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIp
Cit7CisgICAgSFRNTFN0eWxlRWxlbWVudEltcGwmIHN0eWxlID0gKnN0YXRpY19jYXN0PEhUTUxT
dHlsZUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAg
IGNhc2UgU3R5bGVEaXNhYmxlZDogICAgICAgIHsgc3R5bGUuc2V0RGlzYWJsZWQodmFsdWUudG9C
b29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgU3R5bGVNZWRpYTogICAgICAg
ICAgIHsgc3R5bGUuc2V0TWVkaWEoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgU3R5bGVU
eXBlOiAgICAgICAgICAgIHsgc3R5bGUuc2V0VHlwZShzdHIpOyByZXR1cm47IH0KICAgICB9Ci0g
ICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9ETDogewotICAgICAgSFRNTERMaXN0RWxlbWVudEltcGwg
JmRMaXN0ID0gc3RhdGljX2Nhc3Q8SFRNTERMaXN0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0g
ICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIERMaXN0Q29tcGFjdDogICAgICAgICB7
IGRMaXN0LnNldENvbXBhY3QodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAg
ICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OmJvZHlTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikK
K3sKKyAgICBIVE1MQm9keUVsZW1lbnRJbXBsJiBib2R5ID0gKnN0YXRpY19jYXN0PEhUTUxCb2R5
RWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2Fz
ZSBCb2R5QUxpbms6ICAgICAgICAgICB7IGJvZHkuc2V0QUxpbmsoc3RyKTsgcmV0dXJuOyB9Cisg
ICAgICAgIGNhc2UgQm9keUJhY2tncm91bmQ6ICAgICAgeyBib2R5LnNldEJhY2tncm91bmQoc3Ry
KTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQm9keUJnQ29sb3I6ICAgICAgICAgeyBib2R5LnNl
dEJnQ29sb3Ioc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQm9keUxpbms6ICAgICAgICAg
ICAgeyBib2R5LnNldExpbmsoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQm9keVRleHQ6
ICAgICAgICAgICAgeyBib2R5LnNldFRleHQoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2Ug
Qm9keVZMaW5rOiAgICAgICAgICAgeyBib2R5LnNldFZMaW5rKHN0cik7IHJldHVybjsgfQorICAg
ICAgICBjYXNlIEJvZHlTY3JvbGxMZWZ0OgorICAgICAgICBjYXNlIEJvZHlTY3JvbGxUb3A6IHsK
KyAgICAgICAgICAgIFFTY3JvbGxWaWV3KiBzdmlldyA9IGJvZHkub3duZXJEb2N1bWVudCgpLT52
aWV3KCk7CisgICAgICAgICAgICBpZiAoc3ZpZXcpIHsKKyAgICAgICAgICAgICAgICAvLyBVcGRh
dGUgdGhlIGRvY3VtZW50J3MgbGF5b3V0IGJlZm9yZSB3ZSBjb21wdXRlIHRoZXNlIGF0dHJpYnV0
ZXMuCisgICAgICAgICAgICAgICAgaWYgKERvY3VtZW50SW1wbCogZG9jID0gYm9keS5nZXREb2N1
bWVudCgpKQorICAgICAgICAgICAgICAgICAgICBkb2MtPnVwZGF0ZUxheW91dElnbm9yZVBlbmRp
bmdTdHlsZXNoZWV0cygpOworICAgICAgICAgICAgICAgIGlmICh0b2tlbiA9PSBCb2R5U2Nyb2xs
TGVmdCkKKyAgICAgICAgICAgICAgICAgICAgc3ZpZXctPnNldENvbnRlbnRzUG9zKHZhbHVlLnRv
SW50MzIoZXhlYyksIHN2aWV3LT5jb250ZW50c1koKSk7CisgICAgICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgICAgICBzdmlldy0+c2V0Q29udGVudHNQb3Moc3ZpZXctPmNvbnRlbnRz
WCgpLCB2YWx1ZS50b0ludDMyKGV4ZWMpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0RJUjogewot
ICAgICAgSFRNTERpcmVjdG9yeUVsZW1lbnRJbXBsICZkaXJlY3RvcnkgPSBzdGF0aWNfY2FzdDxI
VE1MRGlyZWN0b3J5RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2Vu
KSB7Ci0gICAgICBjYXNlIERpcmVjdG9yeUNvbXBhY3Q6ICAgICB7IGRpcmVjdG9yeS5zZXRDb21w
YWN0KHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQotICAgICAgfQorfQorCit2b2lk
IEhUTUxFbGVtZW50Ojpmb3JtU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25z
dCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTEZv
cm1FbGVtZW50SW1wbCYgZm9ybSA9ICpzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnRJbXBsKj4o
aW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIC8vIHJlYWQtb25seTogZWxl
bWVudHMKKyAgICAgICAgLy8gcmVhZC1vbmx5OiBsZW5ndGgKKyAgICAgICAgY2FzZSBGb3JtTmFt
ZTogICAgICAgICAgICB7IGZvcm0uc2V0TmFtZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2Fz
ZSBGb3JtQWNjZXB0Q2hhcnNldDogICB7IGZvcm0uc2V0QWNjZXB0Q2hhcnNldChzdHIpOyByZXR1
cm47IH0KKyAgICAgICAgY2FzZSBGb3JtQWN0aW9uOiAgICAgICAgICB7IGZvcm0uc2V0QWN0aW9u
KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEZvcm1FbmNUeXBlOiAgICAgICAgIHsgZm9y
bS5zZXRFbmN0eXBlKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEZvcm1NZXRob2Q6ICAg
ICAgICAgIHsgZm9ybS5zZXRNZXRob2Qoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgRm9y
bVRhcmdldDogICAgICAgICAgeyBmb3JtLnNldFRhcmdldChzdHIpOyByZXR1cm47IH0KICAgICB9
Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9NRU5VOiB7Ci0gICAgICBIVE1MTWVudUVsZW1lbnRJ
bXBsICZtZW51ID0gc3RhdGljX2Nhc3Q8SFRNTE1lbnVFbGVtZW50SW1wbCAmPihlbGVtZW50KTsK
LSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgTWVudUNvbXBhY3Q6ICAgICAgICAg
eyBtZW51LnNldENvbXBhY3QodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAg
ICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OnNlbGVjdFNldHRlcihFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3Ry
KQoreworICAgIEhUTUxTZWxlY3RFbGVtZW50SW1wbCYgc2VsZWN0ID0gKnN0YXRpY19jYXN0PEhU
TUxTZWxlY3RFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAg
ICAgICAvLyByZWFkLW9ubHk6IHR5cGUKKyAgICAgICAgY2FzZSBTZWxlY3RTZWxlY3RlZEluZGV4
OiAgIHsgc2VsZWN0LnNldFNlbGVjdGVkSW5kZXgodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVy
bjsgfQorICAgICAgICBjYXNlIFNlbGVjdFZhbHVlOiAgICAgICAgICAgeyBzZWxlY3Quc2V0VmFs
dWUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgU2VsZWN0TGVuZ3RoOiAgICAgICAgICB7
IC8vIHJlYWQtb25seSBhY2NvcmRpbmcgdG8gdGhlIE5TIHNwZWMsIGJ1dCB3ZWJwYWdlcyBuZWVk
IGl0IHdyaXRlYWJsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBP
YmplY3QgY29sbCA9IE9iamVjdDo6ZHluYW1pY0Nhc3QoIGdldFNlbGVjdEhUTUxDb2xsZWN0aW9u
KGV4ZWMsIHNlbGVjdC5vcHRpb25zSFRNTENvbGxlY3Rpb24oKS5nZXQoKSwgJnNlbGVjdCkgKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhY29sbC5pc051
bGwoKSApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbC5w
dXQoZXhlYyxsZW5ndGhQcm9wZXJ0eU5hbWUsdmFsdWUpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgIC8vIHJlYWQtb25seTogZm9ybQorICAgICAgICAvLyByZWFkLW9u
bHk6IG9wdGlvbnMKKyAgICAgICAgY2FzZSBTZWxlY3REaXNhYmxlZDogICAgICAgIHsgc2VsZWN0
LnNldERpc2FibGVkKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBj
YXNlIFNlbGVjdE11bHRpcGxlOiAgICAgICAgeyBzZWxlY3Quc2V0TXVsdGlwbGUodmFsdWUudG9C
b29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgU2VsZWN0TmFtZTogICAgICAg
ICAgICB7IHNlbGVjdC5zZXROYW1lKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFNlbGVj
dFNpemU6ICAgICAgICAgICAgeyBzZWxlY3Quc2V0U2l6ZSh2YWx1ZS50b0ludDMyKGV4ZWMpKTsg
cmV0dXJuOyB9CisgICAgICAgIGNhc2UgU2VsZWN0VGFiSW5kZXg6ICAgICAgICB7IHNlbGVjdC5z
ZXRUYWJJbmRleCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CiAgICAgfQotICAgIGJy
ZWFrOwotICAgIGNhc2UgSURfTEk6IHsKLSAgICAgIEhUTUxMSUVsZW1lbnRJbXBsICZsaSA9IHN0
YXRpY19jYXN0PEhUTUxMSUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0
b2tlbikgewotICAgICAgY2FzZSBMSVR5cGU6ICAgICAgICAgICAgeyBsaS5zZXRUeXBlKHN0cik7
IHJldHVybjsgfQotICAgICAgY2FzZSBMSVZhbHVlOiAgICAgICAgICAgeyBsaS5zZXRWYWx1ZSh2
YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICB9Cit9CisKK3ZvaWQgSFRNTEVs
ZW1lbnQ6Om9wdEdyb3VwU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBW
YWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTE9wdEdy
b3VwRWxlbWVudEltcGwmIG9wdGdyb3VwID0gKnN0YXRpY19jYXN0PEhUTUxPcHRHcm91cEVsZW1l
bnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgT3B0
R3JvdXBEaXNhYmxlZDogICAgICAgIHsgb3B0Z3JvdXAuc2V0RGlzYWJsZWQodmFsdWUudG9Cb29s
ZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgT3B0R3JvdXBMYWJlbDogICAgICAg
ICAgIHsgb3B0Z3JvdXAuc2V0TGFiZWwoc3RyKTsgcmV0dXJuOyB9CiAgICAgfQotICAgIGJyZWFr
OwotICAgIGNhc2UgSURfRElWOiB7Ci0gICAgICBIVE1MRGl2RWxlbWVudEltcGwgJmRpdiA9IHN0
YXRpY19jYXN0PEhUTUxEaXZFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAo
dG9rZW4pIHsKLSAgICAgIGNhc2UgRGl2QWxpZ246ICAgICAgICAgICB7IGRpdi5zZXRBbGlnbihz
dHIpOyByZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6b3B0aW9uU2V0
dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0
IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgRE9NRXhjZXB0aW9uVHJhbnNsYXRvciBleGNl
cHRpb24oZXhlYyk7CisgICAgSFRNTE9wdGlvbkVsZW1lbnRJbXBsJiBvcHRpb24gPSAqc3RhdGlj
X2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2Vu
KSB7CisgICAgICAgIC8vIHJlYWQtb25seTogZm9ybQorICAgICAgICBjYXNlIE9wdGlvbkRlZmF1
bHRTZWxlY3RlZDogeyBvcHRpb24uc2V0RGVmYXVsdFNlbGVjdGVkKHZhbHVlLnRvQm9vbGVhbihl
eGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIE9wdGlvblRleHQ6ICAgICAgICAgICAgeyBv
cHRpb24uc2V0VGV4dChzdHIsIGV4Y2VwdGlvbik7IHJldHVybjsgfQorICAgICAgICAvLyByZWFk
LW9ubHk6IGluZGV4CisgICAgICAgIGNhc2UgT3B0aW9uRGlzYWJsZWQ6ICAgICAgICB7IG9wdGlv
bi5zZXREaXNhYmxlZCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAg
Y2FzZSBPcHRpb25MYWJlbDogICAgICAgICAgIHsgb3B0aW9uLnNldExhYmVsKHN0cik7IHJldHVy
bjsgfQorICAgICAgICBjYXNlIE9wdGlvblNlbGVjdGVkOiAgICAgICAgeyBvcHRpb24uc2V0U2Vs
ZWN0ZWQodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgT3B0
aW9uVmFsdWU6ICAgICAgICAgICB7IG9wdGlvbi5zZXRWYWx1ZShzdHIpOyByZXR1cm47IH0KICAg
ICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9QOiB7Ci0gICAgICBIVE1MUGFyYWdyYXBoRWxl
bWVudEltcGwgJnBhcmFncmFwaCA9IHN0YXRpY19jYXN0PEhUTUxQYXJhZ3JhcGhFbGVtZW50SW1w
bCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgUGFyYWdy
YXBoQWxpZ246ICAgICB7IHBhcmFncmFwaC5zZXRBbGlnbihzdHIpOyByZXR1cm47IH0KLSAgICAg
IH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6aW5wdXRTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikK
K3sKKyAgICBIVE1MSW5wdXRFbGVtZW50SW1wbCYgaW5wdXQgPSAqc3RhdGljX2Nhc3Q8SFRNTElu
cHV0RWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAg
Y2FzZSBJbnB1dERlZmF1bHRWYWx1ZTogICAgeyBpbnB1dC5zZXREZWZhdWx0VmFsdWUoc3RyKTsg
cmV0dXJuOyB9CisgICAgICAgIGNhc2UgSW5wdXREZWZhdWx0Q2hlY2tlZDogIHsgaW5wdXQuc2V0
RGVmYXVsdENoZWNrZWQodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAg
IC8vIHJlYWQtb25seTogZm9ybQorICAgICAgICBjYXNlIElucHV0QWNjZXB0OiAgICAgICAgICB7
IGlucHV0LnNldEFjY2VwdChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJbnB1dEFjY2Vz
c0tleTogICAgICAgeyBpbnB1dC5zZXRBY2Nlc3NLZXkoc3RyKTsgcmV0dXJuOyB9CisgICAgICAg
IGNhc2UgSW5wdXRBbGlnbjogICAgICAgICAgIHsgaW5wdXQuc2V0QWxpZ24oc3RyKTsgcmV0dXJu
OyB9CisgICAgICAgIGNhc2UgSW5wdXRBbHQ6ICAgICAgICAgICAgIHsgaW5wdXQuc2V0QWx0KHN0
cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIElucHV0Q2hlY2tlZDogICAgICAgICB7IGlucHV0
LnNldENoZWNrZWQodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNh
c2UgSW5wdXREaXNhYmxlZDogICAgICAgIHsgaW5wdXQuc2V0RGlzYWJsZWQodmFsdWUudG9Cb29s
ZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgSW5wdXRNYXhMZW5ndGg6ICAgICAg
IHsgaW5wdXQuc2V0TWF4TGVuZ3RoKHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KKyAg
ICAgICAgY2FzZSBJbnB1dE5hbWU6ICAgICAgICAgICAgeyBpbnB1dC5zZXROYW1lKHN0cik7IHJl
dHVybjsgfQorICAgICAgICBjYXNlIElucHV0UmVhZE9ubHk6ICAgICAgICB7IGlucHV0LnNldFJl
YWRPbmx5KHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIElu
cHV0U2l6ZTogICAgICAgICAgICB7IGlucHV0LnNldFNpemUoc3RyKTsgcmV0dXJuOyB9CisgICAg
ICAgIGNhc2UgSW5wdXRTcmM6ICAgICAgICAgICAgIHsgaW5wdXQuc2V0U3JjKHN0cik7IHJldHVy
bjsgfQorICAgICAgICBjYXNlIElucHV0VGFiSW5kZXg6ICAgICAgICB7IGlucHV0LnNldFRhYklu
ZGV4KHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJbnB1dFR5
cGU6ICAgICAgICAgICAgeyBpbnB1dC5zZXRUeXBlKHN0cik7IHJldHVybjsgfQorICAgICAgICBj
YXNlIElucHV0VXNlTWFwOiAgICAgICAgICB7IGlucHV0LnNldFVzZU1hcChzdHIpOyByZXR1cm47
IH0KKyAgICAgICAgY2FzZSBJbnB1dFZhbHVlOiAgICAgICAgICAgeyBpbnB1dC5zZXRWYWx1ZShz
dHIpOyByZXR1cm47IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9IMToKLSAgICBj
YXNlIElEX0gyOgotICAgIGNhc2UgSURfSDM6Ci0gICAgY2FzZSBJRF9INDoKLSAgICBjYXNlIElE
X0g1OgotICAgIGNhc2UgSURfSDY6IHsKLSAgICAgIEhUTUxIZWFkaW5nRWxlbWVudEltcGwgJmhl
YWRpbmcgPSBzdGF0aWNfY2FzdDxIVE1MSGVhZGluZ0VsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwot
ICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgY2FzZSBIZWFkaW5nQWxpZ246ICAgICAgICAg
eyBoZWFkaW5nLnNldEFsaWduKHN0cik7IHJldHVybjsgfQotICAgICAgfQorfQorCit2b2lkIEhU
TUxFbGVtZW50Ojp0ZXh0QXJlYVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29u
c3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxU
ZXh0QXJlYUVsZW1lbnRJbXBsJiB0ZXh0YXJlYSA9ICpzdGF0aWNfY2FzdDxIVE1MVGV4dEFyZWFF
bGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNl
IFRleHRBcmVhRGVmYXVsdFZhbHVlOiAgICB7IHRleHRhcmVhLnNldERlZmF1bHRWYWx1ZShzdHIp
OyByZXR1cm47IH0KKyAgICAgICAgLy8gcmVhZC1vbmx5OiBmb3JtCisgICAgICAgIGNhc2UgVGV4
dEFyZWFBY2Nlc3NLZXk6ICAgICAgIHsgdGV4dGFyZWEuc2V0QWNjZXNzS2V5KHN0cik7IHJldHVy
bjsgfQorICAgICAgICBjYXNlIFRleHRBcmVhQ29sczogICAgICAgICAgICB7IHRleHRhcmVhLnNl
dENvbHModmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRleHRB
cmVhRGlzYWJsZWQ6ICAgICAgICB7IHRleHRhcmVhLnNldERpc2FibGVkKHZhbHVlLnRvQm9vbGVh
bihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRleHRBcmVhTmFtZTogICAgICAgICAg
ICB7IHRleHRhcmVhLnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGV4dEFy
ZWFSZWFkT25seTogICAgICAgIHsgdGV4dGFyZWEuc2V0UmVhZE9ubHkodmFsdWUudG9Cb29sZWFu
KGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGV4dEFyZWFSb3dzOiAgICAgICAgICAg
IHsgdGV4dGFyZWEuc2V0Um93cyh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAg
ICAgIGNhc2UgVGV4dEFyZWFUYWJJbmRleDogICAgICAgIHsgdGV4dGFyZWEuc2V0VGFiSW5kZXgo
dmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQorICAgICAgICAvLyByZWFkLW9ubHk6IHR5
cGUKKyAgICAgICAgY2FzZSBUZXh0QXJlYVZhbHVlOiAgICAgICAgICAgeyB0ZXh0YXJlYS5zZXRW
YWx1ZShzdHIpOyByZXR1cm47IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9CTE9D
S1FVT1RFOiB7Ci0gICAgICBIVE1MQmxvY2txdW90ZUVsZW1lbnRJbXBsICZibG9ja3F1b3RlID0g
c3RhdGljX2Nhc3Q8SFRNTEJsb2NrcXVvdGVFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAg
IHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgQmxvY2tRdW90ZUNpdGU6ICAgICAgIHsgYmxv
Y2txdW90ZS5zZXRDaXRlKHN0cik7IHJldHVybjsgfQotICAgICAgfQorfQorCit2b2lkIEhUTUxF
bGVtZW50OjpidXR0b25TZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZh
bHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MQnV0dG9u
RWxlbWVudEltcGwmIGJ1dHRvbiA9ICpzdGF0aWNfY2FzdDxIVE1MQnV0dG9uRWxlbWVudEltcGwq
PihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgLy8gcmVhZC1vbmx5OiBm
b3JtCisgICAgICAgIGNhc2UgQnV0dG9uQWNjZXNzS2V5OiAgICAgICB7IGJ1dHRvbi5zZXRBY2Nl
c3NLZXkoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQnV0dG9uRGlzYWJsZWQ6ICAgICAg
ICB7IGJ1dHRvbi5zZXREaXNhYmxlZCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0K
KyAgICAgICAgY2FzZSBCdXR0b25OYW1lOiAgICAgICAgICAgIHsgYnV0dG9uLnNldE5hbWUoc3Ry
KTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQnV0dG9uVGFiSW5kZXg6ICAgICAgICB7IGJ1dHRv
bi5zZXRUYWJJbmRleCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIC8v
IHJlYWQtb25seTogdHlwZQorICAgICAgICBjYXNlIEJ1dHRvblZhbHVlOiAgICAgICAgICAgeyBi
dXR0b24uc2V0VmFsdWUoc3RyKTsgcmV0dXJuOyB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNh
c2UgSURfUTogewotICAgICAgSFRNTFF1b3RlRWxlbWVudEltcGwgJnF1b3RlID0gc3RhdGljX2Nh
c3Q8SFRNTFF1b3RlRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2Vu
KSB7Ci0gICAgICBjYXNlIFF1b3RlQ2l0ZTogICAgICAgICAgICB7IHF1b3RlLnNldENpdGUoc3Ry
KTsgcmV0dXJuOyB9Ci0gICAgICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OmxhYmVsU2V0dGVy
KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERP
TTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTExhYmVsRWxlbWVudEltcGwmIGxhYmVsID0g
KnN0YXRpY19jYXN0PEhUTUxMYWJlbEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2gg
KHRva2VuKSB7CisgICAgICAgIC8vIHJlYWQtb25seTogZm9ybQorICAgICAgICBjYXNlIExhYmVs
QWNjZXNzS2V5OiAgICAgICB7IGxhYmVsLnNldEFjY2Vzc0tleShzdHIpOyByZXR1cm47IH0KKyAg
ICAgICAgY2FzZSBMYWJlbEh0bWxGb3I6ICAgICAgICAgeyBsYWJlbC5zZXRIdG1sRm9yKHN0cik7
IHJldHVybjsgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX1BSRTogewotICAgICAg
SFRNTFByZUVsZW1lbnRJbXBsICZwcmUgPSBzdGF0aWNfY2FzdDxIVE1MUHJlRWxlbWVudEltcGwg
Jj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIFByZVdpZHRo
OiAgICAgICAgICAgeyBwcmUuc2V0V2lkdGgodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsg
fQotICAgICAgfQorfQorCit2b2lkIEhUTUxFbGVtZW50OjpsZWdlbmRTZXR0ZXIoRXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJp
bmcmIHN0cikKK3sKKyAgICBIVE1MTGVnZW5kRWxlbWVudEltcGwmIGxlZ2VuZCA9ICpzdGF0aWNf
Y2FzdDxIVE1MTGVnZW5kRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4p
IHsKKyAgICAgICAgLy8gcmVhZC1vbmx5OiBmb3JtCisgICAgICAgIGNhc2UgTGVnZW5kQWNjZXNz
S2V5OiAgICAgICB7IGxlZ2VuZC5zZXRBY2Nlc3NLZXkoc3RyKTsgcmV0dXJuOyB9CisgICAgICAg
IGNhc2UgTGVnZW5kQWxpZ246ICAgICAgICAgICB7IGxlZ2VuZC5zZXRBbGlnbihzdHIpOyByZXR1
cm47IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9CUjogewotICAgICAgSFRNTEJS
RWxlbWVudEltcGwgJmJyID0gc3RhdGljX2Nhc3Q8SFRNTEJSRWxlbWVudEltcGwgJj4oZWxlbWVu
dCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIEJSQ2xlYXI6ICAgICAgICAg
ICB7IGJyLnNldENsZWFyKHN0cik7IHJldHVybjsgfQotICAgICAgfQorfQorCit2b2lkIEhUTUxF
bGVtZW50Ojp1TGlzdFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFs
dWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxVTGlzdEVs
ZW1lbnRJbXBsJiB1TGlzdCA9ICpzdGF0aWNfY2FzdDxIVE1MVUxpc3RFbGVtZW50SW1wbCo+KGlt
cGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNlIFVMaXN0Q29tcGFjdDog
ICAgICAgICB7IHVMaXN0LnNldENvbXBhY3QodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJu
OyB9CisgICAgICAgIGNhc2UgVUxpc3RUeXBlOiAgICAgICAgICAgIHsgdUxpc3Quc2V0VHlwZShz
dHIpOyByZXR1cm47IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9CQVNFRk9OVDog
ewotICAgICAgSFRNTEJhc2VGb250RWxlbWVudEltcGwgJmJhc2VGb250ID0gc3RhdGljX2Nhc3Q8
SFRNTEJhc2VGb250RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2Vu
KSB7Ci0gICAgICBjYXNlIEJhc2VGb250Q29sb3I6ICAgICAgICAgICB7IGJhc2VGb250LnNldENv
bG9yKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBCYXNlRm9udEZhY2U6ICAgICAgICAgICAg
eyBiYXNlRm9udC5zZXRGYWNlKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBCYXNlRm9udFNp
emU6ICAgICAgICAgICAgeyBiYXNlRm9udC5zZXRTaXplKHN0cik7IHJldHVybjsgfQotICAgICAg
fQorfQorCit2b2lkIEhUTUxFbGVtZW50OjpvTGlzdFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQor
eworICAgIEhUTUxPTGlzdEVsZW1lbnRJbXBsJiBvTGlzdCA9ICpzdGF0aWNfY2FzdDxIVE1MT0xp
c3RFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICBj
YXNlIE9MaXN0Q29tcGFjdDogICAgICAgICB7IG9MaXN0LnNldENvbXBhY3QodmFsdWUudG9Cb29s
ZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgT0xpc3RTdGFydDogICAgICAgICAg
IHsgb0xpc3Quc2V0U3RhcnQodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQorICAgICAg
ICBjYXNlIE9MaXN0VHlwZTogICAgICAgICAgICB7IG9MaXN0LnNldFR5cGUoc3RyKTsgcmV0dXJu
OyB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfRk9OVDogewotICAgICAgSFRNTEZv
bnRFbGVtZW50SW1wbCAmZm9udCA9IHN0YXRpY19jYXN0PEhUTUxGb250RWxlbWVudEltcGwgJj4o
ZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIEZvbnRDb2xvcjog
ICAgICAgICAgIHsgZm9udC5zZXRDb2xvcihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgRm9u
dEZhY2U6ICAgICAgICAgICAgeyBmb250LnNldEZhY2Uoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBj
YXNlIEZvbnRTaXplOiAgICAgICAgICAgIHsgZm9udC5zZXRTaXplKHN0cik7IHJldHVybjsgfQot
ICAgICAgfQorfQorCit2b2lkIEhUTUxFbGVtZW50OjpkTGlzdFNldHRlcihFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYg
c3RyKQoreworICAgIEhUTUxETGlzdEVsZW1lbnRJbXBsJiBkTGlzdCA9ICpzdGF0aWNfY2FzdDxI
VE1MRExpc3RFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IERMaXN0Q29t
cGFjdCkKKyAgICAgICAgZExpc3Quc2V0Q29tcGFjdCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOwor
fQorCit2b2lkIEhUTUxFbGVtZW50OjpkaXJTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAg
ICBIVE1MRGlyZWN0b3J5RWxlbWVudEltcGwmIGRpcmVjdG9yeSA9ICpzdGF0aWNfY2FzdDxIVE1M
RGlyZWN0b3J5RWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIGlmICh0b2tlbiA9PSBEaXJlY3Rv
cnlDb21wYWN0KQorICAgICAgICBkaXJlY3Rvcnkuc2V0Q29tcGFjdCh2YWx1ZS50b0Jvb2xlYW4o
ZXhlYykpOworfQorCit2b2lkIEhUTUxFbGVtZW50OjptZW51U2V0dGVyKEV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBz
dHIpCit7CisgICAgSFRNTE1lbnVFbGVtZW50SW1wbCYgbWVudSA9ICpzdGF0aWNfY2FzdDxIVE1M
TWVudUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBpZiAodG9rZW4gPT0gTWVudUNvbXBhY3Qp
CisgICAgICAgIG1lbnUuc2V0Q29tcGFjdCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOworfQorCit2
b2lkIEhUTUxFbGVtZW50OjpsaVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29u
c3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxM
SUVsZW1lbnRJbXBsJiBsaSA9ICpzdGF0aWNfY2FzdDxIVE1MTElFbGVtZW50SW1wbCo+KGltcGwo
KSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNlIExJVHlwZTogICAgICAgICAg
ICB7IGxpLnNldFR5cGUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgTElWYWx1ZTogICAg
ICAgICAgIHsgbGkuc2V0VmFsdWUodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQogICAg
IH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0hSOiB7Ci0gICAgICBIVE1MSFJFbGVtZW50SW1w
bCAmaHIgPSBzdGF0aWNfY2FzdDxIVE1MSFJFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAg
IHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgSFJBbGlnbjogICAgICAgICAgIHsgaHIuc2V0
QWxpZ24oc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEhSTm9TaGFkZTogICAgICAgICB7IGhy
LnNldE5vU2hhZGUodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNl
IEhSU2l6ZTogICAgICAgICAgICB7IGhyLnNldFNpemUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBj
YXNlIEhSV2lkdGg6ICAgICAgICAgICB7IGhyLnNldFdpZHRoKHN0cik7IHJldHVybjsgfQotICAg
ICAgfQorfQorCit2b2lkIEhUTUxFbGVtZW50OjpkaXZTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikK
K3sKKyAgICBIVE1MRGl2RWxlbWVudEltcGwmIGRpdiA9ICpzdGF0aWNfY2FzdDxIVE1MRGl2RWxl
bWVudEltcGwqPihpbXBsKCkpOworICAgIGlmICh0b2tlbiA9PSBEaXZBbGlnbikKKyAgICAgICAg
ZGl2LnNldEFsaWduKHN0cik7Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OnBhcmFncmFwaFNldHRl
cihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBE
T006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxQYXJhZ3JhcGhFbGVtZW50SW1wbCYgcGFy
YWdyYXBoID0gKnN0YXRpY19jYXN0PEhUTUxQYXJhZ3JhcGhFbGVtZW50SW1wbCo+KGltcGwoKSk7
CisgICAgaWYgKHRva2VuID09IFBhcmFncmFwaEFsaWduKQorICAgICAgICBwYXJhZ3JhcGguc2V0
QWxpZ24oc3RyKTsKK30KKwordm9pZCBIVE1MRWxlbWVudDo6aGVhZGluZ1NldHRlcihFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0
cmluZyYgc3RyKQoreworICAgIEhUTUxIZWFkaW5nRWxlbWVudEltcGwmIGhlYWRpbmcgPSAqc3Rh
dGljX2Nhc3Q8SFRNTEhlYWRpbmdFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2Vu
ID09IEhlYWRpbmdBbGlnbikKKyAgICAgICAgaGVhZGluZy5zZXRBbGlnbihzdHIpOworfQorCit2
b2lkIEhUTUxFbGVtZW50OjpibG9ja1F1b3RlU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7Cisg
ICAgSFRNTEJsb2NrcXVvdGVFbGVtZW50SW1wbCYgYmxvY2tRdW90ZSA9ICpzdGF0aWNfY2FzdDxI
VE1MQmxvY2txdW90ZUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBpZiAodG9rZW4gPT0gQmxv
Y2tRdW90ZUNpdGUpCisgICAgICAgIGJsb2NrUXVvdGUuc2V0Q2l0ZShzdHIpOworfQorCit2b2lk
IEhUTUxFbGVtZW50OjpxdW90ZVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29u
c3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxR
dW90ZUVsZW1lbnRJbXBsJiBxdW90ZSA9ICpzdGF0aWNfY2FzdDxIVE1MUXVvdGVFbGVtZW50SW1w
bCo+KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IFF1b3RlQ2l0ZSkKKyAgICAgICAgcXVvdGUu
c2V0Q2l0ZShzdHIpOworfQorCit2b2lkIEhUTUxFbGVtZW50OjpwcmVTZXR0ZXIoRXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJp
bmcmIHN0cikKK3sKKyAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yICd3cmFwJyB3aGVuIHdo
aXRlLXNwYWNlOiBwcmUtd3JhcCBpcyBpbXBsZW1lbnRlZC4KKyAgICBIVE1MUHJlRWxlbWVudElt
cGwmIHByZSA9ICpzdGF0aWNfY2FzdDxIVE1MUHJlRWxlbWVudEltcGwqPihpbXBsKCkpOworICAg
IGlmICh0b2tlbiA9PSBQcmVXaWR0aCkKKyAgICAgICAgcHJlLnNldFdpZHRoKHZhbHVlLnRvSW50
MzIoZXhlYykpOworfQorCit2b2lkIEhUTUxFbGVtZW50OjpiclNldHRlcihFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYg
c3RyKQoreworICAgIEhUTUxCUkVsZW1lbnRJbXBsJiBiciA9ICpzdGF0aWNfY2FzdDxIVE1MQlJF
bGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IEJSQ2xlYXIpCisgICAgICAg
IGJyLnNldENsZWFyKHN0cik7Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OmJhc2VGb250U2V0dGVy
KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERP
TTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTEJhc2VGb250RWxlbWVudEltcGwmIGJhc2VG
b250ID0gKnN0YXRpY19jYXN0PEhUTUxCYXNlRm9udEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAg
ICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgQmFzZUZvbnRDb2xvcjogICAgICAgICAg
IHsgYmFzZUZvbnQuc2V0Q29sb3Ioc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQmFzZUZv
bnRGYWNlOiAgICAgICAgICAgIHsgYmFzZUZvbnQuc2V0RmFjZShzdHIpOyByZXR1cm47IH0KKyAg
ICAgICAgY2FzZSBCYXNlRm9udFNpemU6ICAgICAgICAgICAgeyBiYXNlRm9udC5zZXRTaXplKHN0
cik7IHJldHVybjsgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0lOUzoKLSAgICBj
YXNlIElEX0RFTDogewotICAgICAgSFRNTE1vZEVsZW1lbnRJbXBsICZtb2QgPSBzdGF0aWNfY2Fz
dDxIVE1MTW9kRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7
Ci0gICAgICBjYXNlIE1vZENpdGU6ICAgICAgICAgICAgeyBtb2Quc2V0Q2l0ZShzdHIpOyByZXR1
cm47IH0KLSAgICAgIGNhc2UgTW9kRGF0ZVRpbWU6ICAgICAgICB7IG1vZC5zZXREYXRlVGltZShz
dHIpOyByZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6Zm9udFNldHRl
cihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBE
T006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxGb250RWxlbWVudEltcGwmIGZvbnQgPSAq
c3RhdGljX2Nhc3Q8SFRNTEZvbnRFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0
b2tlbikgeworICAgICAgICBjYXNlIEZvbnRDb2xvcjogICAgICAgICAgIHsgZm9udC5zZXRDb2xv
cihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBGb250RmFjZTogICAgICAgICAgICB7IGZv
bnQuc2V0RmFjZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBGb250U2l6ZTogICAgICAg
ICAgICB7IGZvbnQuc2V0U2l6ZShzdHIpOyByZXR1cm47IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0g
ICAgY2FzZSBJRF9BOiB7Ci0gICAgICBIVE1MQW5jaG9yRWxlbWVudEltcGwgJmFuY2hvciA9IHN0
YXRpY19jYXN0PEhUTUxBbmNob3JFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRj
aCAodG9rZW4pIHsKLSAgICAgIGNhc2UgQW5jaG9yQWNjZXNzS2V5OiAgICAgICB7IGFuY2hvci5z
ZXRBY2Nlc3NLZXkoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEFuY2hvckNoYXJzZXQ6ICAg
ICAgICAgeyBhbmNob3Iuc2V0Q2hhcnNldChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQW5j
aG9yQ29vcmRzOiAgICAgICAgICB7IGFuY2hvci5zZXRDb29yZHMoc3RyKTsgcmV0dXJuOyB9Ci0g
ICAgICBjYXNlIEFuY2hvckhyZWY6ICAgICAgICAgICAgeyBhbmNob3Iuc2V0SHJlZihzdHIpOyBy
ZXR1cm47IH0KLSAgICAgIGNhc2UgQW5jaG9ySHJlZkxhbmc6ICAgICAgICB7IGFuY2hvci5zZXRI
cmVmbGFuZyhzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQW5jaG9yTmFtZTogICAgICAgICAg
ICB7IGFuY2hvci5zZXROYW1lKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBBbmNob3JSZWw6
ICAgICAgICAgICAgIHsgYW5jaG9yLnNldFJlbChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2Ug
QW5jaG9yUmV2OiAgICAgICAgICAgICB7IGFuY2hvci5zZXRSZXYoc3RyKTsgcmV0dXJuOyB9Ci0g
ICAgICBjYXNlIEFuY2hvclNoYXBlOiAgICAgICAgICAgeyBhbmNob3Iuc2V0U2hhcGUoc3RyKTsg
cmV0dXJuOyB9Ci0gICAgICBjYXNlIEFuY2hvclRhYkluZGV4OiAgICAgICAgeyBhbmNob3Iuc2V0
VGFiSW5kZXgodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBBbmNo
b3JUYXJnZXQ6ICAgICAgICAgIHsgYW5jaG9yLnNldFRhcmdldChzdHIpOyByZXR1cm47IH0KLSAg
ICAgIGNhc2UgQW5jaG9yVHlwZTogICAgICAgICAgICB7IGFuY2hvci5zZXRUeXBlKHN0cik7IHJl
dHVybjsgfQotICAgICAgfQorfQorCit2b2lkIEhUTUxFbGVtZW50OjpoclNldHRlcihFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0
cmluZyYgc3RyKQoreworICAgIEhUTUxIUkVsZW1lbnRJbXBsJiBociA9ICpzdGF0aWNfY2FzdDxI
VE1MSFJFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAg
ICBjYXNlIEhSQWxpZ246ICAgICAgICAgICB7IGhyLnNldEFsaWduKHN0cik7IHJldHVybjsgfQor
ICAgICAgICBjYXNlIEhSTm9TaGFkZTogICAgICAgICB7IGhyLnNldE5vU2hhZGUodmFsdWUudG9C
b29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgSFJTaXplOiAgICAgICAgICAg
IHsgaHIuc2V0U2l6ZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBIUldpZHRoOiAgICAg
ICAgICAgeyBoci5zZXRXaWR0aChzdHIpOyByZXR1cm47IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0g
ICAgY2FzZSBJRF9JTUc6IHsKLSAgICAgIEhUTUxJbWFnZUVsZW1lbnRJbXBsICZpbWFnZSA9IHN0
YXRpY19jYXN0PEhUTUxJbWFnZUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNo
ICh0b2tlbikgewotICAgICAgY2FzZSBJbWFnZU5hbWU6ICAgICAgICAgICAgeyBpbWFnZS5zZXRO
YW1lKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBJbWFnZUFsaWduOiAgICAgICAgICAgeyBp
bWFnZS5zZXRBbGlnbihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSW1hZ2VBbHQ6ICAgICAg
ICAgICAgIHsgaW1hZ2Uuc2V0QWx0KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBJbWFnZUJv
cmRlcjogICAgICAgICAgeyBpbWFnZS5zZXRCb3JkZXIodmFsdWUudG9JbnQzMihleGVjKSk7IHJl
dHVybjsgfQotICAgICAgY2FzZSBJbWFnZUhlaWdodDogICAgICAgICAgeyBpbWFnZS5zZXRIZWln
aHQodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBJbWFnZUhzcGFj
ZTogICAgICAgICAgeyBpbWFnZS5zZXRIc3BhY2UodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVy
bjsgfQotICAgICAgY2FzZSBJbWFnZUlzTWFwOiAgICAgICAgICAgeyBpbWFnZS5zZXRJc01hcCh2
YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSW1hZ2VMb25nRGVz
YzogICAgICAgIHsgaW1hZ2Uuc2V0TG9uZ0Rlc2Moc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNl
IEltYWdlU3JjOiAgICAgICAgICAgICB7IGltYWdlLnNldFNyYyhzdHIpOyByZXR1cm47IH0KLSAg
ICAgIGNhc2UgSW1hZ2VVc2VNYXA6ICAgICAgICAgIHsgaW1hZ2Uuc2V0VXNlTWFwKHN0cik7IHJl
dHVybjsgfQotICAgICAgY2FzZSBJbWFnZVZzcGFjZTogICAgICAgICAgeyBpbWFnZS5zZXRWc3Bh
Y2UodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBJbWFnZVdpZHRo
OiAgICAgICAgICAgeyBpbWFnZS5zZXRXaWR0aCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJu
OyB9Ci0gICAgICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6Om1vZFNldHRlcihFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmlu
ZyYgc3RyKQoreworICAgIEhUTUxNb2RFbGVtZW50SW1wbCYgbW9kID0gKnN0YXRpY19jYXN0PEhU
TUxNb2RFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAg
ICBjYXNlIE1vZENpdGU6ICAgICAgICAgICAgeyBtb2Quc2V0Q2l0ZShzdHIpOyByZXR1cm47IH0K
KyAgICAgICAgY2FzZSBNb2REYXRlVGltZTogICAgICAgIHsgbW9kLnNldERhdGVUaW1lKHN0cik7
IHJldHVybjsgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX09CSkVDVDogewotICAg
ICAgSFRNTE9iamVjdEVsZW1lbnRJbXBsICZvYmplY3QgPSBzdGF0aWNfY2FzdDxIVE1MT2JqZWN0
RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICAv
LyByZWFkLW9ubHk6IGZvcm0KLSAgICAgIGNhc2UgT2JqZWN0Q29kZTogICAgICAgICAgICAgICAg
IHsgb2JqZWN0LnNldENvZGUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIE9iamVjdEFsaWdu
OiAgICAgICAgICAgeyBvYmplY3Quc2V0QWxpZ24oc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNl
IE9iamVjdEFyY2hpdmU6ICAgICAgICAgeyBvYmplY3Quc2V0QXJjaGl2ZShzdHIpOyByZXR1cm47
IH0KLSAgICAgIGNhc2UgT2JqZWN0Qm9yZGVyOiAgICAgICAgICB7IG9iamVjdC5zZXRCb3JkZXIo
c3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIE9iamVjdENvZGVCYXNlOiAgICAgICAgeyBvYmpl
Y3Quc2V0Q29kZUJhc2Uoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIE9iamVjdENvZGVUeXBl
OiAgICAgICAgeyBvYmplY3Quc2V0Q29kZVR5cGUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICAvLyBy
ZWFkLW9ubHk6IE9iamVjdENvbnRlbnREb2N1bWVudAotICAgICAgY2FzZSBPYmplY3REYXRhOiAg
ICAgICAgICAgIHsgb2JqZWN0LnNldERhdGEoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIE9i
amVjdERlY2xhcmU6ICAgICAgICAgeyBvYmplY3Quc2V0RGVjbGFyZSh2YWx1ZS50b0Jvb2xlYW4o
ZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgT2JqZWN0SGVpZ2h0OiAgICAgICAgICB7IG9i
amVjdC5zZXRIZWlnaHQoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIE9iamVjdEhzcGFjZTog
ICAgICAgICAgeyBvYmplY3Quc2V0SHNwYWNlKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBP
YmplY3ROYW1lOiAgICAgICAgICAgIHsgb2JqZWN0LnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9Ci0g
ICAgICBjYXNlIE9iamVjdFN0YW5kYnk6ICAgICAgICAgeyBvYmplY3Quc2V0U3RhbmRieShzdHIp
OyByZXR1cm47IH0KLSAgICAgIGNhc2UgT2JqZWN0VGFiSW5kZXg6ICAgICAgICB7IG9iamVjdC5z
ZXRUYWJJbmRleCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIE9i
amVjdFR5cGU6ICAgICAgICAgICAgeyBvYmplY3Quc2V0VHlwZShzdHIpOyByZXR1cm47IH0KLSAg
ICAgIGNhc2UgT2JqZWN0VXNlTWFwOiAgICAgICAgICB7IG9iamVjdC5zZXRVc2VNYXAoc3RyKTsg
cmV0dXJuOyB9Ci0gICAgICBjYXNlIE9iamVjdFZzcGFjZTogICAgICAgICAgeyBvYmplY3Quc2V0
VnNwYWNlKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBPYmplY3RXaWR0aDogICAgICAgICAg
IHsgb2JqZWN0LnNldFdpZHRoKHN0cik7IHJldHVybjsgfQotICAgICAgfQorfQorCit2b2lkIEhU
TUxFbGVtZW50OjphbmNob3JTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0
IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MQW5j
aG9yRWxlbWVudEltcGwmIGFuY2hvciA9ICpzdGF0aWNfY2FzdDxIVE1MQW5jaG9yRWxlbWVudElt
cGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBBbmNob3JB
Y2Nlc3NLZXk6ICAgICAgIHsgYW5jaG9yLnNldEFjY2Vzc0tleShzdHIpOyByZXR1cm47IH0KKyAg
ICAgICAgY2FzZSBBbmNob3JDaGFyc2V0OiAgICAgICAgIHsgYW5jaG9yLnNldENoYXJzZXQoc3Ry
KTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQW5jaG9yQ29vcmRzOiAgICAgICAgICB7IGFuY2hv
ci5zZXRDb29yZHMoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQW5jaG9ySHJlZjogICAg
ICAgICAgICB7IGFuY2hvci5zZXRIcmVmKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEFu
Y2hvckhyZWZMYW5nOiAgICAgICAgeyBhbmNob3Iuc2V0SHJlZmxhbmcoc3RyKTsgcmV0dXJuOyB9
CisgICAgICAgIGNhc2UgQW5jaG9yTmFtZTogICAgICAgICAgICB7IGFuY2hvci5zZXROYW1lKHN0
cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEFuY2hvclJlbDogICAgICAgICAgICAgeyBhbmNo
b3Iuc2V0UmVsKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEFuY2hvclJldjogICAgICAg
ICAgICAgeyBhbmNob3Iuc2V0UmV2KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEFuY2hv
clNoYXBlOiAgICAgICAgICAgeyBhbmNob3Iuc2V0U2hhcGUoc3RyKTsgcmV0dXJuOyB9CisgICAg
ICAgIGNhc2UgQW5jaG9yVGFiSW5kZXg6ICAgICAgICB7IGFuY2hvci5zZXRUYWJJbmRleCh2YWx1
ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQW5jaG9yVGFyZ2V0OiAg
ICAgICAgICB7IGFuY2hvci5zZXRUYXJnZXQoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2Ug
QW5jaG9yVHlwZTogICAgICAgICAgICB7IGFuY2hvci5zZXRUeXBlKHN0cik7IHJldHVybjsgfQog
ICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX1BBUkFNOiB7Ci0gICAgICBIVE1MUGFyYW1F
bGVtZW50SW1wbCAmcGFyYW0gPSBzdGF0aWNfY2FzdDxIVE1MUGFyYW1FbGVtZW50SW1wbCAmPihl
bGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgUGFyYW1OYW1lOiAg
ICAgICAgICAgIHsgcGFyYW0uc2V0TmFtZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgUGFy
YW1UeXBlOiAgICAgICAgICAgIHsgcGFyYW0uc2V0VHlwZShzdHIpOyByZXR1cm47IH0KLSAgICAg
IGNhc2UgUGFyYW1WYWx1ZTogICAgICAgICAgIHsgcGFyYW0uc2V0VmFsdWUoc3RyKTsgcmV0dXJu
OyB9Ci0gICAgICBjYXNlIFBhcmFtVmFsdWVUeXBlOiAgICAgICB7IHBhcmFtLnNldFZhbHVlVHlw
ZShzdHIpOyByZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6aW1hZ2VT
ZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29u
c3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MSW1hZ2VFbGVtZW50SW1wbCYgaW1h
Z2UgPSAqc3RhdGljX2Nhc3Q8SFRNTEltYWdlRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3
aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBJbWFnZU5hbWU6ICAgICAgICAgICAgeyBpbWFn
ZS5zZXROYW1lKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEltYWdlQWxpZ246ICAgICAg
ICAgICB7IGltYWdlLnNldEFsaWduKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEltYWdl
QWx0OiAgICAgICAgICAgICB7IGltYWdlLnNldEFsdChzdHIpOyByZXR1cm47IH0KKyAgICAgICAg
Y2FzZSBJbWFnZUJvcmRlcjogICAgICAgICAgeyBpbWFnZS5zZXRCb3JkZXIodmFsdWUudG9JbnQz
MihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIEltYWdlSGVpZ2h0OiAgICAgICAgICB7
IGltYWdlLnNldEhlaWdodCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAg
IGNhc2UgSW1hZ2VIc3BhY2U6ICAgICAgICAgIHsgaW1hZ2Uuc2V0SHNwYWNlKHZhbHVlLnRvSW50
MzIoZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJbWFnZUlzTWFwOiAgICAgICAgICAg
eyBpbWFnZS5zZXRJc01hcCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KKyAgICAg
ICAgY2FzZSBJbWFnZUxvbmdEZXNjOiAgICAgICAgeyBpbWFnZS5zZXRMb25nRGVzYyhzdHIpOyBy
ZXR1cm47IH0KKyAgICAgICAgY2FzZSBJbWFnZVNyYzogICAgICAgICAgICAgeyBpbWFnZS5zZXRT
cmMoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgSW1hZ2VVc2VNYXA6ICAgICAgICAgIHsg
aW1hZ2Uuc2V0VXNlTWFwKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEltYWdlVnNwYWNl
OiAgICAgICAgICB7IGltYWdlLnNldFZzcGFjZSh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJu
OyB9CisgICAgICAgIGNhc2UgSW1hZ2VXaWR0aDogICAgICAgICAgIHsgaW1hZ2Uuc2V0V2lkdGgo
dmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBj
YXNlIElEX0FQUExFVDogewotICAgICAgSFRNTEFwcGxldEVsZW1lbnRJbXBsICZhcHBsZXQgPSBz
dGF0aWNfY2FzdDxIVE1MQXBwbGV0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0
Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIEFwcGxldEFsaWduOiAgICAgICAgICAgeyBhcHBsZXQu
c2V0QWxpZ24oc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEFwcGxldEFsdDogICAgICAgICAg
ICAgeyBhcHBsZXQuc2V0QWx0KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBBcHBsZXRBcmNo
aXZlOiAgICAgICAgIHsgYXBwbGV0LnNldEFyY2hpdmUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBj
YXNlIEFwcGxldENvZGU6ICAgICAgICAgICAgeyBhcHBsZXQuc2V0Q29kZShzdHIpOyByZXR1cm47
IH0KLSAgICAgIGNhc2UgQXBwbGV0Q29kZUJhc2U6ICAgICAgICB7IGFwcGxldC5zZXRDb2RlQmFz
ZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQXBwbGV0SGVpZ2h0OiAgICAgICAgICB7IGFw
cGxldC5zZXRIZWlnaHQoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEFwcGxldEhzcGFjZTog
ICAgICAgICAgeyBhcHBsZXQuc2V0SHNwYWNlKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBB
cHBsZXROYW1lOiAgICAgICAgICAgIHsgYXBwbGV0LnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9Ci0g
ICAgICBjYXNlIEFwcGxldE9iamVjdDogICAgICAgICAgeyBhcHBsZXQuc2V0T2JqZWN0KHN0cik7
IHJldHVybjsgfQotICAgICAgY2FzZSBBcHBsZXRWc3BhY2U6ICAgICAgICAgIHsgYXBwbGV0LnNl
dFZzcGFjZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQXBwbGV0V2lkdGg6ICAgICAgICAg
ICB7IGFwcGxldC5zZXRXaWR0aChzdHIpOyByZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBI
VE1MRWxlbWVudDo6b2JqZWN0U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25z
dCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTE9i
amVjdEVsZW1lbnRJbXBsJiBvYmplY3QgPSAqc3RhdGljX2Nhc3Q8SFRNTE9iamVjdEVsZW1lbnRJ
bXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIC8vIHJlYWQtb25s
eTogZm9ybQorICAgICAgICBjYXNlIE9iamVjdENvZGU6ICAgICAgICAgICAgeyBvYmplY3Quc2V0
Q29kZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBPYmplY3RBbGlnbjogICAgICAgICAg
IHsgb2JqZWN0LnNldEFsaWduKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIE9iamVjdEFy
Y2hpdmU6ICAgICAgICAgeyBvYmplY3Quc2V0QXJjaGl2ZShzdHIpOyByZXR1cm47IH0KKyAgICAg
ICAgY2FzZSBPYmplY3RCb3JkZXI6ICAgICAgICAgIHsgb2JqZWN0LnNldEJvcmRlcihzdHIpOyBy
ZXR1cm47IH0KKyAgICAgICAgY2FzZSBPYmplY3RDb2RlQmFzZTogICAgICAgIHsgb2JqZWN0LnNl
dENvZGVCYXNlKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIE9iamVjdENvZGVUeXBlOiAg
ICAgICAgeyBvYmplY3Quc2V0Q29kZVR5cGUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIC8vIHJl
YWQtb25seTogT2JqZWN0Q29udGVudERvY3VtZW50CisgICAgICAgIGNhc2UgT2JqZWN0RGF0YTog
ICAgICAgICAgICB7IG9iamVjdC5zZXREYXRhKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNl
IE9iamVjdERlY2xhcmU6ICAgICAgICAgeyBvYmplY3Quc2V0RGVjbGFyZSh2YWx1ZS50b0Jvb2xl
YW4oZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBPYmplY3RIZWlnaHQ6ICAgICAgICAg
IHsgb2JqZWN0LnNldEhlaWdodChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBPYmplY3RI
c3BhY2U6ICAgICAgICAgIHsgb2JqZWN0LnNldEhzcGFjZShzdHIpOyByZXR1cm47IH0KKyAgICAg
ICAgY2FzZSBPYmplY3ROYW1lOiAgICAgICAgICAgIHsgb2JqZWN0LnNldE5hbWUoc3RyKTsgcmV0
dXJuOyB9CisgICAgICAgIGNhc2UgT2JqZWN0U3RhbmRieTogICAgICAgICB7IG9iamVjdC5zZXRT
dGFuZGJ5KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIE9iamVjdFRhYkluZGV4OiAgICAg
ICAgeyBvYmplY3Quc2V0VGFiSW5kZXgodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQor
ICAgICAgICBjYXNlIE9iamVjdFR5cGU6ICAgICAgICAgICAgeyBvYmplY3Quc2V0VHlwZShzdHIp
OyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBPYmplY3RVc2VNYXA6ICAgICAgICAgIHsgb2JqZWN0
LnNldFVzZU1hcChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBPYmplY3RWc3BhY2U6ICAg
ICAgICAgIHsgb2JqZWN0LnNldFZzcGFjZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBP
YmplY3RXaWR0aDogICAgICAgICAgIHsgb2JqZWN0LnNldFdpZHRoKHN0cik7IHJldHVybjsgfQog
ICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX01BUDogewotICAgICAgSFRNTE1hcEVsZW1l
bnRJbXBsICZtYXAgPSBzdGF0aWNfY2FzdDxIVE1MTWFwRWxlbWVudEltcGwgJj4oZWxlbWVudCk7
Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICAvLyByZWFkLW9ubHk6IGFyZWFzCi0gICAg
ICBjYXNlIE1hcE5hbWU6ICAgICAgICAgICAgICAgICB7IG1hcC5zZXROYW1lKHN0cik7IHJldHVy
bjsgfQotICAgICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OnBhcmFtU2V0dGVyKEV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3Ry
aW5nJiBzdHIpCit7CisgICAgSFRNTFBhcmFtRWxlbWVudEltcGwmIHBhcmFtID0gKnN0YXRpY19j
YXN0PEhUTUxQYXJhbUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7
CisgICAgICAgIGNhc2UgUGFyYW1OYW1lOiAgICAgICAgICAgIHsgcGFyYW0uc2V0TmFtZShzdHIp
OyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBQYXJhbVR5cGU6ICAgICAgICAgICAgeyBwYXJhbS5z
ZXRUeXBlKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFBhcmFtVmFsdWU6ICAgICAgICAg
ICB7IHBhcmFtLnNldFZhbHVlKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFBhcmFtVmFs
dWVUeXBlOiAgICAgICB7IHBhcmFtLnNldFZhbHVlVHlwZShzdHIpOyByZXR1cm47IH0KICAgICB9
Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9BUkVBOiB7Ci0gICAgICBIVE1MQXJlYUVsZW1lbnRJ
bXBsICZhcmVhID0gc3RhdGljX2Nhc3Q8SFRNTEFyZWFFbGVtZW50SW1wbCAmPihlbGVtZW50KTsK
LSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgQXJlYUFjY2Vzc0tleTogICAgICAg
eyBhcmVhLnNldEFjY2Vzc0tleShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQXJlYUFsdDog
ICAgICAgICAgICAgeyBhcmVhLnNldEFsdChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQXJl
YUNvb3JkczogICAgICAgICAgeyBhcmVhLnNldENvb3JkcyhzdHIpOyByZXR1cm47IH0KLSAgICAg
IGNhc2UgQXJlYUhyZWY6ICAgICAgICAgICAgeyBhcmVhLnNldEhyZWYoc3RyKTsgcmV0dXJuOyB9
Ci0gICAgICBjYXNlIEFyZWFOb0hyZWY6ICAgICAgICAgIHsgYXJlYS5zZXROb0hyZWYodmFsdWUu
dG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEFyZWFTaGFwZTogICAgICAg
ICAgIHsgYXJlYS5zZXRTaGFwZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQXJlYVRhYklu
ZGV4OiAgICAgICAgeyBhcmVhLnNldFRhYkluZGV4KHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1
cm47IH0KLSAgICAgIGNhc2UgQXJlYVRhcmdldDogICAgICAgICAgeyBhcmVhLnNldFRhcmdldChz
dHIpOyByZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6YXBwbGV0U2V0
dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0
IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTEFwcGxldEVsZW1lbnRJbXBsJiBhcHBs
ZXQgPSAqc3RhdGljX2Nhc3Q8SFRNTEFwcGxldEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBz
d2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgQXBwbGV0QWxpZ246ICAgICAgICAgICB7IGFw
cGxldC5zZXRBbGlnbihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBBcHBsZXRBbHQ6ICAg
ICAgICAgICAgIHsgYXBwbGV0LnNldEFsdChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBB
cHBsZXRBcmNoaXZlOiAgICAgICAgIHsgYXBwbGV0LnNldEFyY2hpdmUoc3RyKTsgcmV0dXJuOyB9
CisgICAgICAgIGNhc2UgQXBwbGV0Q29kZTogICAgICAgICAgICB7IGFwcGxldC5zZXRDb2RlKHN0
cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEFwcGxldENvZGVCYXNlOiAgICAgICAgeyBhcHBs
ZXQuc2V0Q29kZUJhc2Uoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQXBwbGV0SGVpZ2h0
OiAgICAgICAgICB7IGFwcGxldC5zZXRIZWlnaHQoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNh
c2UgQXBwbGV0SHNwYWNlOiAgICAgICAgICB7IGFwcGxldC5zZXRIc3BhY2Uoc3RyKTsgcmV0dXJu
OyB9CisgICAgICAgIGNhc2UgQXBwbGV0TmFtZTogICAgICAgICAgICB7IGFwcGxldC5zZXROYW1l
KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEFwcGxldE9iamVjdDogICAgICAgICAgeyBh
cHBsZXQuc2V0T2JqZWN0KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEFwcGxldFZzcGFj
ZTogICAgICAgICAgeyBhcHBsZXQuc2V0VnNwYWNlKHN0cik7IHJldHVybjsgfQorICAgICAgICBj
YXNlIEFwcGxldFdpZHRoOiAgICAgICAgICAgeyBhcHBsZXQuc2V0V2lkdGgoc3RyKTsgcmV0dXJu
OyB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfU0NSSVBUOiB7Ci0gICAgICBIVE1M
U2NyaXB0RWxlbWVudEltcGwgJnNjcmlwdCA9IHN0YXRpY19jYXN0PEhUTUxTY3JpcHRFbGVtZW50
SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgU2Ny
aXB0VGV4dDogICAgICAgICAgICB7IHNjcmlwdC5zZXRUZXh0KHN0cik7IHJldHVybjsgfQotICAg
ICAgY2FzZSBTY3JpcHRIdG1sRm9yOiAgICAgICAgIHsgc2NyaXB0LnNldEh0bWxGb3Ioc3RyKTsg
cmV0dXJuOyB9Ci0gICAgICBjYXNlIFNjcmlwdEV2ZW50OiAgICAgICAgICAgeyBzY3JpcHQuc2V0
RXZlbnQoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFNjcmlwdENoYXJzZXQ6ICAgICAgICAg
eyBzY3JpcHQuc2V0Q2hhcnNldChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgU2NyaXB0RGVm
ZXI6ICAgICAgICAgICB7IHNjcmlwdC5zZXREZWZlcih2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyBy
ZXR1cm47IH0KLSAgICAgIGNhc2UgU2NyaXB0U3JjOiAgICAgICAgICAgICB7IHNjcmlwdC5zZXRT
cmMoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFNjcmlwdFR5cGU6ICAgICAgICAgICAgeyBz
Y3JpcHQuc2V0VHlwZShzdHIpOyByZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxl
bWVudDo6bWFwU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYg
dmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTE1hcEVsZW1lbnRJ
bXBsJiBtYXAgPSAqc3RhdGljX2Nhc3Q8SFRNTE1hcEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAg
ICBpZiAodG9rZW4gPT0gTWFwTmFtZSkKKyAgICAgICAgLy8gcmVhZC1vbmx5OiBhcmVhcworICAg
ICAgICBtYXAuc2V0TmFtZShzdHIpOworfQorCit2b2lkIEhUTUxFbGVtZW50OjphcmVhU2V0dGVy
KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERP
TTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTEFyZWFFbGVtZW50SW1wbCYgYXJlYSA9ICpz
dGF0aWNfY2FzdDxIVE1MQXJlYUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRv
a2VuKSB7CisgICAgICAgIGNhc2UgQXJlYUFjY2Vzc0tleTogICAgICAgeyBhcmVhLnNldEFjY2Vz
c0tleShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBBcmVhQWx0OiAgICAgICAgICAgICB7
IGFyZWEuc2V0QWx0KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEFyZWFDb29yZHM6ICAg
ICAgICAgIHsgYXJlYS5zZXRDb29yZHMoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQXJl
YUhyZWY6ICAgICAgICAgICAgeyBhcmVhLnNldEhyZWYoc3RyKTsgcmV0dXJuOyB9CisgICAgICAg
IGNhc2UgQXJlYU5vSHJlZjogICAgICAgICAgeyBhcmVhLnNldE5vSHJlZih2YWx1ZS50b0Jvb2xl
YW4oZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBBcmVhU2hhcGU6ICAgICAgICAgICB7
IGFyZWEuc2V0U2hhcGUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQXJlYVRhYkluZGV4
OiAgICAgICAgeyBhcmVhLnNldFRhYkluZGV4KHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47
IH0KKyAgICAgICAgY2FzZSBBcmVhVGFyZ2V0OiAgICAgICAgICB7IGFyZWEuc2V0VGFyZ2V0KHN0
cik7IHJldHVybjsgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX1RBQkxFOiB7Ci0g
ICAgICBIVE1MVGFibGVFbGVtZW50SW1wbCAmdGFibGUgPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVF
bGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNh
c2UgVGFibGVDYXB0aW9uOiAgICAgICAgIHsgdGFibGUuc2V0Q2FwdGlvbih0b0hUTUxUYWJsZUNh
cHRpb25FbGVtZW50KHZhbHVlKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJsZVRIZWFkOiAg
ICAgICAgICAgeyB0YWJsZS5zZXRUSGVhZCh0b0hUTUxUYWJsZVNlY3Rpb25FbGVtZW50KHZhbHVl
KSk7IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJsZVRGb290OiAgICAgICAgICAgeyB0YWJsZS5z
ZXRURm9vdCh0b0hUTUxUYWJsZVNlY3Rpb25FbGVtZW50KHZhbHVlKSk7IHJldHVybjsgfQotICAg
ICAgLy8gcmVhZC1vbmx5OiByb3dzCi0gICAgICAvLyByZWFkLW9ubHk6IHRib2RpZXMKLSAgICAg
IGNhc2UgVGFibGVBbGlnbjogICAgICAgICAgIHsgdGFibGUuc2V0QWxpZ24oc3RyKTsgcmV0dXJu
OyB9Ci0gICAgICBjYXNlIFRhYmxlQmdDb2xvcjogICAgICAgICB7IHRhYmxlLnNldEJnQ29sb3Io
c3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlQm9yZGVyOiAgICAgICAgICB7IHRhYmxl
LnNldEJvcmRlcihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVDZWxsUGFkZGluZzog
ICAgIHsgdGFibGUuc2V0Q2VsbFBhZGRpbmcoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRh
YmxlQ2VsbFNwYWNpbmc6ICAgICB7IHRhYmxlLnNldENlbGxTcGFjaW5nKHN0cik7IHJldHVybjsg
fQotICAgICAgY2FzZSBUYWJsZUZyYW1lOiAgICAgICAgICAgeyB0YWJsZS5zZXRGcmFtZShzdHIp
OyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVSdWxlczogICAgICAgICAgIHsgdGFibGUuc2V0
UnVsZXMoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlU3VtbWFyeTogICAgICAgICB7
IHRhYmxlLnNldFN1bW1hcnkoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlV2lkdGg6
ICAgICAgICAgICB7IHRhYmxlLnNldFdpZHRoKHN0cik7IHJldHVybjsgfQotICAgICAgfQorfQor
Cit2b2lkIEhUTUxFbGVtZW50OjpzY3JpcHRTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAg
ICBIVE1MU2NyaXB0RWxlbWVudEltcGwmIHNjcmlwdCA9ICpzdGF0aWNfY2FzdDxIVE1MU2NyaXB0
RWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2Fz
ZSBTY3JpcHRUZXh0OiAgICAgICAgICAgIHsgc2NyaXB0LnNldFRleHQoc3RyKTsgcmV0dXJuOyB9
CisgICAgICAgIGNhc2UgU2NyaXB0SHRtbEZvcjogICAgICAgICB7IHNjcmlwdC5zZXRIdG1sRm9y
KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFNjcmlwdEV2ZW50OiAgICAgICAgICAgeyBz
Y3JpcHQuc2V0RXZlbnQoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgU2NyaXB0Q2hhcnNl
dDogICAgICAgICB7IHNjcmlwdC5zZXRDaGFyc2V0KHN0cik7IHJldHVybjsgfQorICAgICAgICBj
YXNlIFNjcmlwdERlZmVyOiAgICAgICAgICAgeyBzY3JpcHQuc2V0RGVmZXIodmFsdWUudG9Cb29s
ZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgU2NyaXB0U3JjOiAgICAgICAgICAg
ICB7IHNjcmlwdC5zZXRTcmMoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgU2NyaXB0VHlw
ZTogICAgICAgICAgICB7IHNjcmlwdC5zZXRUeXBlKHN0cik7IHJldHVybjsgfQogICAgIH0KLSAg
ICBicmVhazsKLSAgICBjYXNlIElEX0NBUFRJT046IHsKLSAgICAgIEhUTUxUYWJsZUNhcHRpb25F
bGVtZW50SW1wbCAmdGFibGVDYXB0aW9uID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ2FwdGlvbkVs
ZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgY2Fz
ZSBUYWJsZUFsaWduOiAgICAgICAgICAgeyB0YWJsZUNhcHRpb24uc2V0QWxpZ24oc3RyKTsgcmV0
dXJuOyB9Ci0gICAgICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OnRhYmxlU2V0dGVyKEV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9N
U3RyaW5nJiBzdHIpCit7CisgICAgSFRNTFRhYmxlRWxlbWVudEltcGwmIHRhYmxlID0gKnN0YXRp
Y19jYXN0PEhUTUxUYWJsZUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2Vu
KSB7CisgICAgICAgIGNhc2UgVGFibGVDYXB0aW9uOiAgICAgICAgIHsgdGFibGUuc2V0Q2FwdGlv
bih0b0hUTUxUYWJsZUNhcHRpb25FbGVtZW50KHZhbHVlKSk7IHJldHVybjsgfQorICAgICAgICBj
YXNlIFRhYmxlVEhlYWQ6ICAgICAgICAgICB7IHRhYmxlLnNldFRIZWFkKHRvSFRNTFRhYmxlU2Vj
dGlvbkVsZW1lbnQodmFsdWUpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGFibGVURm9vdDog
ICAgICAgICAgIHsgdGFibGUuc2V0VEZvb3QodG9IVE1MVGFibGVTZWN0aW9uRWxlbWVudCh2YWx1
ZSkpOyByZXR1cm47IH0KKyAgICAgICAgLy8gcmVhZC1vbmx5OiByb3dzCisgICAgICAgIC8vIHJl
YWQtb25seTogdGJvZGllcworICAgICAgICBjYXNlIFRhYmxlQWxpZ246ICAgICAgICAgICB7IHRh
YmxlLnNldEFsaWduKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxlQmdDb2xvcjog
ICAgICAgICB7IHRhYmxlLnNldEJnQ29sb3Ioc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2Ug
VGFibGVCb3JkZXI6ICAgICAgICAgIHsgdGFibGUuc2V0Qm9yZGVyKHN0cik7IHJldHVybjsgfQor
ICAgICAgICBjYXNlIFRhYmxlQ2VsbFBhZGRpbmc6ICAgICB7IHRhYmxlLnNldENlbGxQYWRkaW5n
KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxlQ2VsbFNwYWNpbmc6ICAgICB7IHRh
YmxlLnNldENlbGxTcGFjaW5nKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxlRnJh
bWU6ICAgICAgICAgICB7IHRhYmxlLnNldEZyYW1lKHN0cik7IHJldHVybjsgfQorICAgICAgICBj
YXNlIFRhYmxlUnVsZXM6ICAgICAgICAgICB7IHRhYmxlLnNldFJ1bGVzKHN0cik7IHJldHVybjsg
fQorICAgICAgICBjYXNlIFRhYmxlU3VtbWFyeTogICAgICAgICB7IHRhYmxlLnNldFN1bW1hcnko
c3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGFibGVXaWR0aDogICAgICAgICAgIHsgdGFi
bGUuc2V0V2lkdGgoc3RyKTsgcmV0dXJuOyB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2Ug
SURfQ09MOiB7Ci0gICAgICBIVE1MVGFibGVDb2xFbGVtZW50SW1wbCAmdGFibGVDb2wgPSBzdGF0
aWNfY2FzdDxIVE1MVGFibGVDb2xFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRj
aCAodG9rZW4pIHsKLSAgICAgIGNhc2UgVGFibGVDb2xBbGlnbjogICAgICAgICAgIHsgdGFibGVD
b2wuc2V0QWxpZ24oc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlQ29sQ2g6ICAgICAg
ICAgICAgICB7IHRhYmxlQ29sLnNldENoKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJs
ZUNvbENoT2ZmOiAgICAgICAgICAgeyB0YWJsZUNvbC5zZXRDaE9mZihzdHIpOyByZXR1cm47IH0K
LSAgICAgIGNhc2UgVGFibGVDb2xTcGFuOiAgICAgICAgICAgIHsgdGFibGVDb2wuc2V0U3Bhbih2
YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlQ29sVkFsaWdu
OiAgICAgICAgICB7IHRhYmxlQ29sLnNldFZBbGlnbihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNh
c2UgVGFibGVDb2xXaWR0aDogICAgICAgICAgIHsgdGFibGVDb2wuc2V0V2lkdGgoc3RyKTsgcmV0
dXJuOyB9Ci0gICAgICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OnRhYmxlQ2FwdGlvblNldHRl
cihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBE
T006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxUYWJsZUNhcHRpb25FbGVtZW50SW1wbCYg
dGFibGVDYXB0aW9uID0gKnN0YXRpY19jYXN0PEhUTUxUYWJsZUNhcHRpb25FbGVtZW50SW1wbCo+
KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IFRhYmxlQ2FwdGlvbkFsaWduKQorICAgICAgICB0
YWJsZUNhcHRpb24uc2V0QWxpZ24oc3RyKTsKK30KKwordm9pZCBIVE1MRWxlbWVudDo6dGFibGVD
b2xTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwg
Y29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MVGFibGVDb2xFbGVtZW50SW1w
bCYgdGFibGVDb2wgPSAqc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ29sRWxlbWVudEltcGwqPihpbXBs
KCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBUYWJsZUNvbEFsaWduOiAg
ICAgICAgICAgeyB0YWJsZUNvbC5zZXRBbGlnbihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2Fz
ZSBUYWJsZUNvbENoOiAgICAgICAgICAgICAgeyB0YWJsZUNvbC5zZXRDaChzdHIpOyByZXR1cm47
IH0KKyAgICAgICAgY2FzZSBUYWJsZUNvbENoT2ZmOiAgICAgICAgICAgeyB0YWJsZUNvbC5zZXRD
aE9mZihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZUNvbFNwYW46ICAgICAgICAg
ICAgeyB0YWJsZUNvbC5zZXRTcGFuKHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KKyAg
ICAgICAgY2FzZSBUYWJsZUNvbFZBbGlnbjogICAgICAgICAgeyB0YWJsZUNvbC5zZXRWQWxpZ24o
c3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGFibGVDb2xXaWR0aDogICAgICAgICAgIHsg
dGFibGVDb2wuc2V0V2lkdGgoc3RyKTsgcmV0dXJuOyB9CiAgICAgfQotICAgIGJyZWFrOwotICAg
IGNhc2UgSURfVEhFQUQ6Ci0gICAgY2FzZSBJRF9UQk9EWToKLSAgICBjYXNlIElEX1RGT09UOiB7
Ci0gICAgICBIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGwgJnRhYmxlU2VjdGlvbiA9IHN0YXRp
Y19jYXN0PEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3
aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgVGFibGVTZWN0aW9uQWxpZ246ICAgICAgICAgICB7
IHRhYmxlU2VjdGlvbi5zZXRBbGlnbihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVT
ZWN0aW9uQ2g6ICAgICAgICAgICAgICB7IHRhYmxlU2VjdGlvbi5zZXRDaChzdHIpOyByZXR1cm47
IH0KLSAgICAgIGNhc2UgVGFibGVTZWN0aW9uQ2hPZmY6ICAgICAgICAgICB7IHRhYmxlU2VjdGlv
bi5zZXRDaE9mZihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVTZWN0aW9uVkFsaWdu
OiAgICAgICAgICB7IHRhYmxlU2VjdGlvbi5zZXRWQWxpZ24oc3RyKTsgcmV0dXJuOyB9Ci0gICAg
ICAvLyByZWFkLW9ubHk6IHJvd3MKLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6dGFi
bGVTZWN0aW9uU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYg
dmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTFRhYmxlU2VjdGlv
bkVsZW1lbnRJbXBsJiB0YWJsZVNlY3Rpb24gPSAqc3RhdGljX2Nhc3Q8SFRNTFRhYmxlU2VjdGlv
bkVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNh
c2UgVGFibGVTZWN0aW9uQWxpZ246ICAgICAgICAgICB7IHRhYmxlU2VjdGlvbi5zZXRBbGlnbihz
dHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZVNlY3Rpb25DaDogICAgICAgICAgICAg
IHsgdGFibGVTZWN0aW9uLnNldENoKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxl
U2VjdGlvbkNoT2ZmOiAgICAgICAgICAgeyB0YWJsZVNlY3Rpb24uc2V0Q2hPZmYoc3RyKTsgcmV0
dXJuOyB9CisgICAgICAgIGNhc2UgVGFibGVTZWN0aW9uVkFsaWduOiAgICAgICAgICB7IHRhYmxl
U2VjdGlvbi5zZXRWQWxpZ24oc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIC8vIHJlYWQtb25seTog
cm93cwogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX1RSOiB7Ci0gICAgICBIVE1MVGFi
bGVSb3dFbGVtZW50SW1wbCAmdGFibGVSb3cgPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVSb3dFbGVt
ZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIC8vIHJl
YWQtb25seTogcm93SW5kZXgKLSAgICAgIC8vIHJlYWQtb25seTogc2VjdGlvblJvd0luZGV4Ci0g
ICAgICAvLyByZWFkLW9ubHk6IGNlbGxzCi0gICAgICBjYXNlIFRhYmxlUm93QWxpZ246ICAgICAg
ICAgICB7IHRhYmxlUm93LnNldEFsaWduKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJs
ZVJvd0JnQ29sb3I6ICAgICAgICAgeyB0YWJsZVJvdy5zZXRCZ0NvbG9yKHN0cik7IHJldHVybjsg
fQotICAgICAgY2FzZSBUYWJsZVJvd0NoOiAgICAgICAgICAgICAgeyB0YWJsZVJvdy5zZXRDaChz
dHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVSb3dDaE9mZjogICAgICAgICAgIHsgdGFi
bGVSb3cuc2V0Q2hPZmYoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlUm93VkFsaWdu
OiAgICAgICAgICB7IHRhYmxlUm93LnNldFZBbGlnbihzdHIpOyByZXR1cm47IH0KLSAgICAgIH0K
K30KKwordm9pZCBIVE1MRWxlbWVudDo6dGFibGVSb3dTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikK
K3sKKyAgICBIVE1MVGFibGVSb3dFbGVtZW50SW1wbCYgdGFibGVSb3cgPSAqc3RhdGljX2Nhc3Q8
SFRNTFRhYmxlUm93RWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsK
KyAgICAgICAgLy8gcmVhZC1vbmx5OiByb3dJbmRleAorICAgICAgICAvLyByZWFkLW9ubHk6IHNl
Y3Rpb25Sb3dJbmRleAorICAgICAgICAvLyByZWFkLW9ubHk6IGNlbGxzCisgICAgICAgIGNhc2Ug
VGFibGVSb3dBbGlnbjogICAgICAgICAgIHsgdGFibGVSb3cuc2V0QWxpZ24oc3RyKTsgcmV0dXJu
OyB9CisgICAgICAgIGNhc2UgVGFibGVSb3dCZ0NvbG9yOiAgICAgICAgIHsgdGFibGVSb3cuc2V0
QmdDb2xvcihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZVJvd0NoOiAgICAgICAg
ICAgICAgeyB0YWJsZVJvdy5zZXRDaChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJs
ZVJvd0NoT2ZmOiAgICAgICAgICAgeyB0YWJsZVJvdy5zZXRDaE9mZihzdHIpOyByZXR1cm47IH0K
KyAgICAgICAgY2FzZSBUYWJsZVJvd1ZBbGlnbjogICAgICAgICAgeyB0YWJsZVJvdy5zZXRWQWxp
Z24oc3RyKTsgcmV0dXJuOyB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfVEg6Ci0g
ICAgY2FzZSBJRF9URDogewotICAgICAgSFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsICZ0YWJsZUNl
bGwgPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVDZWxsRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0g
ICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICAvLyByZWFkLW9ubHk6IGNlbGxJbmRleAotICAg
ICAgY2FzZSBUYWJsZUNlbGxBYmJyOiAgICAgICAgICAgIHsgdGFibGVDZWxsLnNldEFiYnIoc3Ry
KTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlQ2VsbEFsaWduOiAgICAgICAgICAgeyB0YWJs
ZUNlbGwuc2V0QWxpZ24oc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlQ2VsbEF4aXM6
ICAgICAgICAgICAgeyB0YWJsZUNlbGwuc2V0QXhpcyhzdHIpOyByZXR1cm47IH0KLSAgICAgIGNh
c2UgVGFibGVDZWxsQmdDb2xvcjogICAgICAgICB7IHRhYmxlQ2VsbC5zZXRCZ0NvbG9yKHN0cik7
IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJsZUNlbGxDaDogICAgICAgICAgICAgIHsgdGFibGVD
ZWxsLnNldENoKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJsZUNlbGxDaE9mZjogICAg
ICAgICAgIHsgdGFibGVDZWxsLnNldENoT2ZmKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBU
YWJsZUNlbGxDb2xTcGFuOiAgICAgICAgIHsgdGFibGVDZWxsLnNldENvbFNwYW4odmFsdWUudG9J
bnQzMihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJsZUNlbGxIZWFkZXJzOiAgICAg
ICAgIHsgdGFibGVDZWxsLnNldEhlYWRlcnMoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRh
YmxlQ2VsbEhlaWdodDogICAgICAgICAgeyB0YWJsZUNlbGwuc2V0SGVpZ2h0KHN0cik7IHJldHVy
bjsgfQotICAgICAgY2FzZSBUYWJsZUNlbGxOb1dyYXA6ICAgICAgICAgIHsgdGFibGVDZWxsLnNl
dE5vV3JhcCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFi
bGVDZWxsUm93U3BhbjogICAgICAgICB7IHRhYmxlQ2VsbC5zZXRSb3dTcGFuKHZhbHVlLnRvSW50
MzIoZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVDZWxsU2NvcGU6ICAgICAgICAg
ICB7IHRhYmxlQ2VsbC5zZXRTY29wZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVD
ZWxsVkFsaWduOiAgICAgICAgICB7IHRhYmxlQ2VsbC5zZXRWQWxpZ24oc3RyKTsgcmV0dXJuOyB9
Ci0gICAgICBjYXNlIFRhYmxlQ2VsbFdpZHRoOiAgICAgICAgICAgeyB0YWJsZUNlbGwuc2V0V2lk
dGgoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OnRhYmxl
Q2VsbFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVl
LCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxUYWJsZUNlbGxFbGVtZW50
SW1wbCYgdGFibGVDZWxsID0gKnN0YXRpY19jYXN0PEhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbCo+
KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICAvLyByZWFkLW9ubHk6IGNl
bGxJbmRleAorICAgICAgICBjYXNlIFRhYmxlQ2VsbEFiYnI6ICAgICAgICAgICAgeyB0YWJsZUNl
bGwuc2V0QWJicihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZUNlbGxBbGlnbjog
ICAgICAgICAgIHsgdGFibGVDZWxsLnNldEFsaWduKHN0cik7IHJldHVybjsgfQorICAgICAgICBj
YXNlIFRhYmxlQ2VsbEF4aXM6ICAgICAgICAgICAgeyB0YWJsZUNlbGwuc2V0QXhpcyhzdHIpOyBy
ZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZUNlbGxCZ0NvbG9yOiAgICAgICAgIHsgdGFibGVD
ZWxsLnNldEJnQ29sb3Ioc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGFibGVDZWxsQ2g6
ICAgICAgICAgICAgICB7IHRhYmxlQ2VsbC5zZXRDaChzdHIpOyByZXR1cm47IH0KKyAgICAgICAg
Y2FzZSBUYWJsZUNlbGxDaE9mZjogICAgICAgICAgIHsgdGFibGVDZWxsLnNldENoT2ZmKHN0cik7
IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxlQ2VsbENvbFNwYW46ICAgICAgICAgeyB0YWJs
ZUNlbGwuc2V0Q29sU3Bhbih2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAg
IGNhc2UgVGFibGVDZWxsSGVhZGVyczogICAgICAgICB7IHRhYmxlQ2VsbC5zZXRIZWFkZXJzKHN0
cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxlQ2VsbEhlaWdodDogICAgICAgICAgeyB0
YWJsZUNlbGwuc2V0SGVpZ2h0KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxlQ2Vs
bE5vV3JhcDogICAgICAgICAgeyB0YWJsZUNlbGwuc2V0Tm9XcmFwKHZhbHVlLnRvQm9vbGVhbihl
eGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxlQ2VsbFJvd1NwYW46ICAgICAgICAg
eyB0YWJsZUNlbGwuc2V0Um93U3Bhbih2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9Cisg
ICAgICAgIGNhc2UgVGFibGVDZWxsU2NvcGU6ICAgICAgICAgICB7IHRhYmxlQ2VsbC5zZXRTY29w
ZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZUNlbGxWQWxpZ246ICAgICAgICAg
IHsgdGFibGVDZWxsLnNldFZBbGlnbihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJs
ZUNlbGxXaWR0aDogICAgICAgICAgIHsgdGFibGVDZWxsLnNldFdpZHRoKHN0cik7IHJldHVybjsg
fQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0ZSQU1FU0VUOiB7Ci0gICAgICBIVE1M
RnJhbWVTZXRFbGVtZW50SW1wbCAmZnJhbWVTZXQgPSBzdGF0aWNfY2FzdDxIVE1MRnJhbWVTZXRF
bGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNh
c2UgRnJhbWVTZXRDb2xzOiAgICAgICAgICAgIHsgZnJhbWVTZXQuc2V0Q29scyhzdHIpOyByZXR1
cm47IH0KLSAgICAgIGNhc2UgRnJhbWVTZXRSb3dzOiAgICAgICAgICAgIHsgZnJhbWVTZXQuc2V0
Um93cyhzdHIpOyByZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6ZnJh
bWVTZXRTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1
ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MRnJhbWVTZXRFbGVtZW50
SW1wbCYgZnJhbWVTZXQgPSAqc3RhdGljX2Nhc3Q8SFRNTEZyYW1lU2V0RWxlbWVudEltcGwqPihp
bXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBGcmFtZVNldENvbHM6
ICAgICAgICAgICAgeyBmcmFtZVNldC5zZXRDb2xzKHN0cik7IHJldHVybjsgfQorICAgICAgICBj
YXNlIEZyYW1lU2V0Um93czogICAgICAgICAgICB7IGZyYW1lU2V0LnNldFJvd3Moc3RyKTsgcmV0
dXJuOyB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfRlJBTUU6IHsKLSAgICAgIEhU
TUxGcmFtZUVsZW1lbnRJbXBsICZmcmFtZUVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRnJhbWVF
bGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgICAv
LyByZWFkLW9ubHk6IEZyYW1lQ29udGVudERvY3VtZW50OgotICAgICAgY2FzZSBGcmFtZUZyYW1l
Qm9yZGVyOiAgICAgeyBmcmFtZUVsZW1lbnQuc2V0RnJhbWVCb3JkZXIoc3RyKTsgcmV0dXJuOyB9
Ci0gICAgICBjYXNlIEZyYW1lTG9uZ0Rlc2M6ICAgICAgICB7IGZyYW1lRWxlbWVudC5zZXRMb25n
RGVzYyhzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgRnJhbWVNYXJnaW5IZWlnaHQ6ICAgIHsg
ZnJhbWVFbGVtZW50LnNldE1hcmdpbkhlaWdodChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2Ug
RnJhbWVNYXJnaW5XaWR0aDogICAgIHsgZnJhbWVFbGVtZW50LnNldE1hcmdpbldpZHRoKHN0cik7
IHJldHVybjsgfQotICAgICAgY2FzZSBGcmFtZU5hbWU6ICAgICAgICAgICAgeyBmcmFtZUVsZW1l
bnQuc2V0TmFtZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgRnJhbWVOb1Jlc2l6ZTogICAg
ICAgIHsgZnJhbWVFbGVtZW50LnNldE5vUmVzaXplKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJl
dHVybjsgfQotICAgICAgY2FzZSBGcmFtZVNjcm9sbGluZzogICAgICAgeyBmcmFtZUVsZW1lbnQu
c2V0U2Nyb2xsaW5nKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBGcmFtZVNyYzogICAgICAg
ICAgICAgeyBmcmFtZUVsZW1lbnQuc2V0U3JjKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBG
cmFtZUxvY2F0aW9uOiAgICAgICAgeyBmcmFtZUVsZW1lbnQuc2V0TG9jYXRpb24oc3RyKTsgcmV0
dXJuOyB9Ci0gICAgICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OmZyYW1lU2V0dGVyKEV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9N
U3RyaW5nJiBzdHIpCit7CisgICAgSFRNTEZyYW1lRWxlbWVudEltcGwmIGZyYW1lRWxlbWVudCA9
ICpzdGF0aWNfY2FzdDxIVE1MRnJhbWVFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNo
ICh0b2tlbikgeworICAgICAgICAvLyByZWFkLW9ubHk6IEZyYW1lQ29udGVudERvY3VtZW50Ogor
ICAgICAgICBjYXNlIEZyYW1lRnJhbWVCb3JkZXI6ICAgICB7IGZyYW1lRWxlbWVudC5zZXRGcmFt
ZUJvcmRlcihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBGcmFtZUxvbmdEZXNjOiAgICAg
ICAgeyBmcmFtZUVsZW1lbnQuc2V0TG9uZ0Rlc2Moc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNh
c2UgRnJhbWVNYXJnaW5IZWlnaHQ6ICAgIHsgZnJhbWVFbGVtZW50LnNldE1hcmdpbkhlaWdodChz
dHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBGcmFtZU1hcmdpbldpZHRoOiAgICAgeyBmcmFt
ZUVsZW1lbnQuc2V0TWFyZ2luV2lkdGgoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgRnJh
bWVOYW1lOiAgICAgICAgICAgIHsgZnJhbWVFbGVtZW50LnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9
CisgICAgICAgIGNhc2UgRnJhbWVOb1Jlc2l6ZTogICAgICAgIHsgZnJhbWVFbGVtZW50LnNldE5v
UmVzaXplKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIEZy
YW1lU2Nyb2xsaW5nOiAgICAgICB7IGZyYW1lRWxlbWVudC5zZXRTY3JvbGxpbmcoc3RyKTsgcmV0
dXJuOyB9CisgICAgICAgIGNhc2UgRnJhbWVTcmM6ICAgICAgICAgICAgIHsgZnJhbWVFbGVtZW50
LnNldFNyYyhzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBGcmFtZUxvY2F0aW9uOiAgICAg
ICAgeyBmcmFtZUVsZW1lbnQuc2V0TG9jYXRpb24oc3RyKTsgcmV0dXJuOyB9CiAgICAgfQotICAg
IGJyZWFrOwotICAgIGNhc2UgSURfSUZSQU1FOiB7Ci0gICAgICBIVE1MSUZyYW1lRWxlbWVudElt
cGwgJmlGcmFtZSA9IHN0YXRpY19jYXN0PEhUTUxJRnJhbWVFbGVtZW50SW1wbCAmPihlbGVtZW50
KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgSUZyYW1lQWxpZ246ICAgICAg
ICAgICB7IGlGcmFtZS5zZXRBbGlnbihzdHIpOyByZXR1cm47IH0KLSAgICAgIC8vIHJlYWQtb25s
eTogSUZyYW1lQ29udGVudERvY3VtZW50Ci0gICAgICBjYXNlIElGcmFtZUZyYW1lQm9yZGVyOiAg
ICAgeyBpRnJhbWUuc2V0RnJhbWVCb3JkZXIoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElG
cmFtZUhlaWdodDogICAgICAgICAgeyBpRnJhbWUuc2V0SGVpZ2h0KHN0cik7IHJldHVybjsgfQot
ICAgICAgY2FzZSBJRnJhbWVMb25nRGVzYzogICAgICAgIHsgaUZyYW1lLnNldExvbmdEZXNjKHN0
cik7IHJldHVybjsgfQotICAgICAgY2FzZSBJRnJhbWVNYXJnaW5IZWlnaHQ6ICAgIHsgaUZyYW1l
LnNldE1hcmdpbkhlaWdodChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSUZyYW1lTWFyZ2lu
V2lkdGg6ICAgICB7IGlGcmFtZS5zZXRNYXJnaW5XaWR0aChzdHIpOyByZXR1cm47IH0KLSAgICAg
IGNhc2UgSUZyYW1lTmFtZTogICAgICAgICAgICB7IGlGcmFtZS5zZXROYW1lKHN0cik7IHJldHVy
bjsgfQotICAgICAgY2FzZSBJRnJhbWVTY3JvbGxpbmc6ICAgICAgIHsgaUZyYW1lLnNldFNjcm9s
bGluZyhzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSUZyYW1lU3JjOiAgICAgICAgICAgICB7
IGlGcmFtZS5zZXRTcmMoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElGcmFtZVdpZHRoOiAg
ICAgICAgICAgeyBpRnJhbWUuc2V0V2lkdGgoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICB9Ci0gICAg
ICBicmVhazsKK30KKwordm9pZCBIVE1MRWxlbWVudDo6aUZyYW1lU2V0dGVyKEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5n
JiBzdHIpCit7CisgICAgSFRNTElGcmFtZUVsZW1lbnRJbXBsJiBpRnJhbWUgPSAqc3RhdGljX2Nh
c3Q8SFRNTElGcmFtZUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7
CisgICAgICAgIGNhc2UgSUZyYW1lQWxpZ246ICAgICAgICAgICB7IGlGcmFtZS5zZXRBbGlnbihz
dHIpOyByZXR1cm47IH0KKyAgICAgICAgLy8gcmVhZC1vbmx5OiBJRnJhbWVDb250ZW50RG9jdW1l
bnQKKyAgICAgICAgY2FzZSBJRnJhbWVGcmFtZUJvcmRlcjogICAgIHsgaUZyYW1lLnNldEZyYW1l
Qm9yZGVyKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIElGcmFtZUhlaWdodDogICAgICAg
ICAgeyBpRnJhbWUuc2V0SGVpZ2h0KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIElGcmFt
ZUxvbmdEZXNjOiAgICAgICAgeyBpRnJhbWUuc2V0TG9uZ0Rlc2Moc3RyKTsgcmV0dXJuOyB9Cisg
ICAgICAgIGNhc2UgSUZyYW1lTWFyZ2luSGVpZ2h0OiAgICB7IGlGcmFtZS5zZXRNYXJnaW5IZWln
aHQoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgSUZyYW1lTWFyZ2luV2lkdGg6ICAgICB7
IGlGcmFtZS5zZXRNYXJnaW5XaWR0aChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJRnJh
bWVOYW1lOiAgICAgICAgICAgIHsgaUZyYW1lLnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9CisgICAg
ICAgIGNhc2UgSUZyYW1lU2Nyb2xsaW5nOiAgICAgICB7IGlGcmFtZS5zZXRTY3JvbGxpbmcoc3Ry
KTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgSUZyYW1lU3JjOiAgICAgICAgICAgICB7IGlGcmFt
ZS5zZXRTcmMoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgSUZyYW1lV2lkdGg6ICAgICAg
ICAgICB7IGlGcmFtZS5zZXRXaWR0aChzdHIpOyByZXR1cm47IH0KICAgICB9Ci0gIH0KK30KIAot
ICAvLyBnZW5lcmljIHByb3BlcnRpZXMKLSAgc3dpdGNoICh0b2tlbikgewotICBjYXNlIEVsZW1l
bnRJZDoKLSAgICBlbGVtZW50LnNldElkKHN0cik7Ci0gICAgcmV0dXJuOwotICBjYXNlIEVsZW1l
bnRUaXRsZToKLSAgICBlbGVtZW50LnNldFRpdGxlKHN0cik7Ci0gICAgcmV0dXJuOwotICBjYXNl
IEVsZW1lbnRMYW5nOgotICAgIGVsZW1lbnQuc2V0TGFuZyhzdHIpOwotICAgIHJldHVybjsKLSAg
Y2FzZSBFbGVtZW50RGlyOgotICAgIGVsZW1lbnQuc2V0RGlyKHN0cik7Ci0gICAgcmV0dXJuOwot
ICBjYXNlIEVsZW1lbnRDbGFzc05hbWU6Ci0gICAgZWxlbWVudC5zZXRDbGFzc05hbWUoc3RyKTsK
LSAgICByZXR1cm47Ci0gIGNhc2UgRWxlbWVudElubmVySFRNTDoKLSAgICBlbGVtZW50LnNldElu
bmVySFRNTChzdHIsIGV4Y2VwdGlvbik7Ci0gICAgcmV0dXJuOwotICBjYXNlIEVsZW1lbnRJbm5l
clRleHQ6Ci0gICAgZWxlbWVudC5zZXRJbm5lclRleHQoc3RyLCBleGNlcHRpb24pOwotICAgIHJl
dHVybjsKLSAgY2FzZSBFbGVtZW50T3V0ZXJIVE1MOgotICAgIGVsZW1lbnQuc2V0T3V0ZXJIVE1M
KHN0ciwgZXhjZXB0aW9uKTsKLSAgICByZXR1cm47Ci0gIGNhc2UgRWxlbWVudE91dGVyVGV4dDoK
LSAgICBlbGVtZW50LnNldE91dGVyVGV4dChzdHIsIGV4Y2VwdGlvbik7Ci0gICAgcmV0dXJuOwot
ICBjYXNlIEVsZW1lbnRDb250ZW50RWRpdGFibGU6Ci0gICAgZWxlbWVudC5zZXRDb250ZW50RWRp
dGFibGUoc3RyKTsKLSAgICByZXR1cm47Ci0gIGRlZmF1bHQ6Ci0gICAga2RXYXJuaW5nKCkgPDwg
IktKUzo6SFRNTEVsZW1lbnQ6OnB1dFZhbHVlIHVuaGFuZGxlZCB0b2tlbiAiIDw8IHRva2VuIDw8
ICIgdGhpc1RhZz0iIDw8IGVsZW1lbnQudGFnTmFtZSgpLnN0cmluZygpIDw8ICIgc3RyPSIgPDwg
c3RyLnN0cmluZygpIDw8IGVuZGw7Ci0gIH0KK3ZvaWQgSFRNTEVsZW1lbnQ6Om1hcnF1ZWVTZXR0
ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3Qg
RE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICAvLyBGSVhNRTogRmluZCBvdXQgd2hhdCBXaW5J
RSBzdXBwb3J0cyBhbmQgaW1wbGVtZW50IGl0LgorfQorCit2b2lkIEhUTUxFbGVtZW50OjpwdXRW
YWx1ZShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBpbnQp
Cit7CisgICAgRE9NRXhjZXB0aW9uVHJhbnNsYXRvciBleGNlcHRpb24oZXhlYyk7CisgICAgRE9N
OjpET01TdHJpbmcgc3RyID0gdmFsdWUuaXNBKE51bGxUeXBlKSA/IERPTTo6RE9NU3RyaW5nKCkg
OiB2YWx1ZS50b1N0cmluZyhleGVjKS5zdHJpbmcoKTsKKyAKKyAgICAvLyBDaGVjayBvdXIgc2V0
IG9mIGdlbmVyaWMgcHJvcGVydGllcyBmaXJzdC4KKyAgICBIVE1MRWxlbWVudEltcGwgJmVsZW1l
bnQgPSAqc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KGltcGwoKSk7CisgICAgc3dpdGNo
ICh0b2tlbikgeworICAgICAgICBjYXNlIEVsZW1lbnRJZDoKKyAgICAgICAgICAgIGVsZW1lbnQu
c2V0SWQoc3RyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBFbGVtZW50VGl0
bGU6CisgICAgICAgICAgICBlbGVtZW50LnNldFRpdGxlKHN0cik7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIGNhc2UgRWxlbWVudExhbmc6CisgICAgICAgICAgICBlbGVtZW50LnNldExh
bmcoc3RyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBFbGVtZW50RGlyOgor
ICAgICAgICAgICAgZWxlbWVudC5zZXREaXIoc3RyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgY2FzZSBFbGVtZW50Q2xhc3NOYW1lOgorICAgICAgICAgICAgZWxlbWVudC5zZXRDbGFz
c05hbWUoc3RyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBFbGVtZW50SW5u
ZXJIVE1MOgorICAgICAgICAgICAgZWxlbWVudC5zZXRJbm5lckhUTUwoc3RyLCBleGNlcHRpb24p
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIEVsZW1lbnRJbm5lclRleHQ6Cisg
ICAgICAgICAgICBlbGVtZW50LnNldElubmVyVGV4dChzdHIsIGV4Y2VwdGlvbik7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIGNhc2UgRWxlbWVudE91dGVySFRNTDoKKyAgICAgICAgICAg
IGVsZW1lbnQuc2V0T3V0ZXJIVE1MKHN0ciwgZXhjZXB0aW9uKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgY2FzZSBFbGVtZW50T3V0ZXJUZXh0OgorICAgICAgICAgICAgZWxlbWVudC5z
ZXRPdXRlclRleHQoc3RyLCBleGNlcHRpb24pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICBjYXNlIEVsZW1lbnRDb250ZW50RWRpdGFibGU6CisgICAgICAgICAgICBlbGVtZW50LnNldENv
bnRlbnRFZGl0YWJsZShzdHIpOworICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8v
IE5vdyBjaGVjayBmb3IgcHJvcGVydGllcyB0aGF0IGFwcGx5IHRvIGEgc3BlY2lmaWMgZWxlbWVu
dCB0eXBlLgorICAgIGNvbnN0IEdldFNldEluZm8qIGluZm8gPSBnZXRTZXRJbmZvKCk7CisgICAg
aWYgKGluZm8gJiYgaW5mby0+bV9zZXR0ZXIpCisgICAgICAgIHJldHVybiAodGhpcy0+KihpbmZv
LT5tX3NldHRlcikpKGV4ZWMsIHRva2VuLCB2YWx1ZSwgc3RyKTsgIAogfQogCiBIVE1MRWxlbWVu
dEltcGwgKnRvSFRNTEVsZW1lbnQoVmFsdWVJbXAgKnZhbCkKQEAgLTMwMzgsMjMgKzMyMDEsMTcg
QEAgSFRNTEVsZW1lbnRJbXBsICp0b0hUTUxFbGVtZW50KFZhbHVlSW1wIAogCiBIVE1MVGFibGVD
YXB0aW9uRWxlbWVudEltcGwgKnRvSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQoVmFsdWVJbXAgKnZh
bCkKIHsKLSAgICBpZiAoSFRNTEVsZW1lbnRJbXBsICplID0gdG9IVE1MRWxlbWVudCh2YWwpKQot
ICAgICAgICBzd2l0Y2ggKGUtPmlkKCkpIHsKLSAgICAgICAgICAgIGNhc2UgSURfQ0FQVElPTjoK
LSAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ2FwdGlvbkVsZW1l
bnRJbXBsICo+KGUpOwotICAgICAgICB9CisgICAgSFRNTEVsZW1lbnRJbXBsICplID0gdG9IVE1M
RWxlbWVudCh2YWwpOworICAgIGlmIChlICYmIGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpjYXB0
aW9uKCkpKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ2FwdGlvbkVsZW1l
bnRJbXBsICo+KGUpOwogICAgIHJldHVybiAwOwogfQogCiBIVE1MVGFibGVTZWN0aW9uRWxlbWVu
dEltcGwgKnRvSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQoVmFsdWVJbXAgKnZhbCkKIHsKLSAgICBp
ZiAoSFRNTEVsZW1lbnRJbXBsICplID0gdG9IVE1MRWxlbWVudCh2YWwpKQotICAgICAgICBzd2l0
Y2ggKGUtPmlkKCkpIHsKLSAgICAgICAgICAgIGNhc2UgSURfVEhFQUQ6Ci0gICAgICAgICAgICBj
YXNlIElEX1RCT0RZOgotICAgICAgICAgICAgY2FzZSBJRF9URk9PVDoKLSAgICAgICAgICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsICo+KGUpOwot
ICAgICAgICB9CisgICAgSFRNTEVsZW1lbnRJbXBsICplID0gdG9IVE1MRWxlbWVudCh2YWwpOwor
ICAgIGlmIChlICYmIChlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGhlYWQoKSkgfHwgZS0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OnRib2R5KCkpIHx8IGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0
Zm9vdCgpKSkpCisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MVGFibGVTZWN0aW9uRWxl
bWVudEltcGwgKj4oZSk7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTMxMDMsMTAgKzMyNjAsMTAg
QEAgVmFsdWUgS0pTOjpIVE1MQ29sbGVjdGlvbjo6dHJ5R2V0KEV4ZWNTdAogICBlbHNlIGlmIChw
cm9wZXJ0eU5hbWUgPT0gInNlbGVjdGVkSW5kZXgiKSB7CiAgICAgLy8gTk9OLVNUQU5EQVJEIG9w
dGlvbnMuc2VsZWN0ZWRJbmRleAogICAgIE5vZGVJbXBsICpvcHRpb24gPSBjb2xsZWN0aW9uLml0
ZW0oMCk7Ci0gICAgaWYgKG9wdGlvbi0+aWQoKSA9PSBJRF9PUFRJT04pIHsKKyAgICBpZiAob3B0
aW9uLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpKSB7CiAgICAgICBOb2RlSW1wbCAq
c2VsZWN0ID0gb3B0aW9uOwogICAgICAgd2hpbGUgKChzZWxlY3QgPSBzZWxlY3QtPnBhcmVudE5v
ZGUoKSkpCi0gICAgICAgIGlmIChzZWxlY3QtPmlkKCkgPT0gSURfU0VMRUNUKQorICAgICAgICBp
ZiAoc2VsZWN0LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c2VsZWN0KCkpKQogCSAgcmV0dXJuIE51
bWJlcihzdGF0aWNfY2FzdDxIVE1MU2VsZWN0RWxlbWVudEltcGwgKj4oc2VsZWN0KS0+c2VsZWN0
ZWRJbmRleCgpKTsKICAgICB9CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwpAQCAtMzI5NCw3ICsz
NDUxLDcgQEAgdm9pZCBLSlM6OkhUTUxTZWxlY3RDb2xsZWN0aW9uOjp0cnlQdXQoRQogCiAgIC8v
IGlzIHYgYW4gb3B0aW9uIGVsZW1lbnQgPwogICBOb2RlSW1wbCAqb3B0aW9uID0gdG9Ob2RlKHZh
bHVlKTsKLSAgaWYgKCFvcHRpb24gfHwgb3B0aW9uLT5pZCgpICE9IElEX09QVElPTikKKyAgaWYg
KCFvcHRpb24gfHwgIW9wdGlvbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9wdGlvbigpKSkKICAg
ICByZXR1cm47CiAKICAgaW50IGV4Y2VwdGlvbiA9IDA7CkluZGV4OiBraHRtbC9lY21hL2tqc19o
dG1sLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWNtYS9r
anNfaHRtbC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjQ0CmRpZmYgLXUgLXAgLXIxLjQ0IGto
dG1sL2VjbWEva2pzX2h0bWwuaAotLS0ga2h0bWwvZWNtYS9ranNfaHRtbC5oCTEyIE1heSAyMDA1
IDE3OjExOjIxIC0wMDAwCTEuNDQKKysrIGtodG1sL2VjbWEva2pzX2h0bWwuaAkyMCBKdW4gMjAw
NSAyMDo1NToyMSAtMDAwMApAQCAtODUsNiArODUsMTMxIEBAIG5hbWVzcGFjZSBLSlMgewogICAg
ICAgY2FwdGlvbl9pbmZvLCBjb2xfaW5mbywgdGFibGVzZWN0aW9uX2luZm8sIHRyX2luZm8sCiAg
ICAgICB0YWJsZWNlbGxfaW5mbywgZnJhbWVTZXRfaW5mbywgZnJhbWVfaW5mbywgaUZyYW1lX2lu
Zm8sIG1hcnF1ZWVfaW5mbzsKIAorICAgIC8vIEZJWE1FOiBNaWdodCBtYWtlIHNlbnNlIHRvIGNv
bWJpbmUgdGhpcyB3aXRoIENsYXNzSW5mbyBzb21lIGRheS4KKyAgICB0eXBlZGVmIFZhbHVlIChI
VE1MRWxlbWVudDo6KkdldHRlckZ1bmN0aW9uKShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikg
Y29uc3Q7CisgICAgdHlwZWRlZiB2b2lkIChIVE1MRWxlbWVudDo6KlNldHRlckZ1bmN0aW9uKShF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006
OkRPTVN0cmluZyYgc3RyKTsKKyAgICBzdHJ1Y3QgR2V0U2V0SW5mbyB7IEdldHRlckZ1bmN0aW9u
IG1fZ2V0dGVyOyBTZXR0ZXJGdW5jdGlvbiBtX3NldHRlcjsgfTsKKyAgICBjb25zdCBHZXRTZXRJ
bmZvKiBnZXRTZXRJbmZvKCkgY29uc3Q7CisgICAgc3RhdGljIGNvbnN0IEdldFNldEluZm8gaHRt
bF9nZXRzZXQsIGhlYWRfZ2V0c2V0LCBsaW5rX2dldHNldCwgdGl0bGVfZ2V0c2V0LAorICAgICAg
bWV0YV9nZXRzZXQsIGJhc2VfZ2V0c2V0LCBpc0luZGV4X2dldHNldCwgc3R5bGVfZ2V0c2V0LCBi
b2R5X2dldHNldCwgZm9ybV9nZXRzZXQsCisgICAgICBzZWxlY3RfZ2V0c2V0LCBvcHRHcm91cF9n
ZXRzZXQsIG9wdGlvbl9nZXRzZXQsIGlucHV0X2dldHNldCwgdGV4dEFyZWFfZ2V0c2V0LAorICAg
ICAgYnV0dG9uX2dldHNldCwgbGFiZWxfZ2V0c2V0LCBmaWVsZFNldF9nZXRzZXQsIGxlZ2VuZF9n
ZXRzZXQsIHVsX2dldHNldCwgb2xfZ2V0c2V0LAorICAgICAgZGxfZ2V0c2V0LCBkaXJfZ2V0c2V0
LCBtZW51X2dldHNldCwgbGlfZ2V0c2V0LCBkaXZfZ2V0c2V0LCBwX2dldHNldCwgaGVhZGluZ19n
ZXRzZXQsCisgICAgICBibG9ja1F1b3RlX2dldHNldCwgcV9nZXRzZXQsIHByZV9nZXRzZXQsIGJy
X2dldHNldCwgYmFzZUZvbnRfZ2V0c2V0LCBmb250X2dldHNldCwKKyAgICAgIGhyX2dldHNldCwg
bW9kX2dldHNldCwgYV9nZXRzZXQsIGNhbnZhc19nZXRzZXQsIGltZ19nZXRzZXQsIG9iamVjdF9n
ZXRzZXQsIHBhcmFtX2dldHNldCwKKyAgICAgIGFwcGxldF9nZXRzZXQsIG1hcF9nZXRzZXQsIGFy
ZWFfZ2V0c2V0LCBzY3JpcHRfZ2V0c2V0LCB0YWJsZV9nZXRzZXQsCisgICAgICBjYXB0aW9uX2dl
dHNldCwgY29sX2dldHNldCwgdGFibGVzZWN0aW9uX2dldHNldCwgdHJfZ2V0c2V0LAorICAgICAg
dGFibGVjZWxsX2dldHNldCwgZnJhbWVTZXRfZ2V0c2V0LCBmcmFtZV9nZXRzZXQsIGlGcmFtZV9n
ZXRzZXQsIG1hcnF1ZWVfZ2V0c2V0OworCisgICAgVmFsdWUgaHRtbEdldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgaHRtbFNldHRlcihFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmlu
ZyYgc3RyKTsKKyAgICBWYWx1ZSBoZWFkR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2Vu
KSBjb25zdDsKKyAgICB2b2lkICBoZWFkU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
LCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZh
bHVlIGxpbmtHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZv
aWQgIGxpbmtTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2
YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgdGl0bGVHZXR0ZXIo
RXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIHRpdGxlU2V0dGVy
KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERP
TTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIG1ldGFHZXR0ZXIoRXhlY1N0YXRlKiBleGVj
LCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIG1ldGFTZXR0ZXIoRXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0
cik7CisgICAgVmFsdWUgYmFzZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29u
c3Q7CisgICAgdm9pZCAgYmFzZVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29u
c3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBp
c0luZGV4R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lk
ICBpc0luZGV4U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYg
dmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIHN0eWxlR2V0dGVy
KEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBzdHlsZVNldHRl
cihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBE
T006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBib2R5R2V0dGVyKEV4ZWNTdGF0ZSogZXhl
YywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBib2R5U2V0dGVyKEV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBz
dHIpOworICAgIFZhbHVlIGZvcm1HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNv
bnN0OworICAgIHZvaWQgIGZvcm1TZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNv
bnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUg
c2VsZWN0R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lk
ICBzZWxlY3RTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2
YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgb3B0R3JvdXBHZXR0
ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIG9wdEdyb3Vw
U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNv
bnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIG9wdGlvbkdldHRlcihFeGVjU3Rh
dGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgb3B0aW9uU2V0dGVyKEV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9N
U3RyaW5nJiBzdHIpOworICAgIFZhbHVlIGlucHV0R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50
IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBpbnB1dFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsK
KyAgICBWYWx1ZSB0ZXh0QXJlYUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29u
c3Q7CisgICAgdm9pZCAgdGV4dEFyZWFTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4s
IGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFs
dWUgYnV0dG9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2
b2lkICBidXR0b25TZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVl
JiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgbGFiZWxHZXR0
ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGxhYmVsU2V0
dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0
IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIGZpZWxkU2V0R2V0dGVyKEV4ZWNTdGF0
ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBmaWVsZFNldFNldHRlcihFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRP
TVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBsZWdlbmRHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBp
bnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGxlZ2VuZFNldHRlcihFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3Ry
KTsKKyAgICBWYWx1ZSB1TGlzdEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29u
c3Q7CisgICAgdm9pZCAgdUxpc3RTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNv
bnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUg
b0xpc3RHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQg
IG9MaXN0U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFs
dWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIGRMaXN0R2V0dGVyKEV4
ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBkTGlzdFNldHRlcihF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006
OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBkaXJHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBp
bnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGRpclNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsK
KyAgICBWYWx1ZSBtZW51R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsK
KyAgICB2b2lkICBtZW51U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBW
YWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIGxpR2V0
dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBsaVNldHRl
cihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBE
T006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBkaXZHZXR0ZXIoRXhlY1N0YXRlKiBleGVj
LCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGRpdlNldHRlcihFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3Ry
KTsKKyAgICBWYWx1ZSBwYXJhZ3JhcGhHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4p
IGNvbnN0OworICAgIHZvaWQgIHBhcmFncmFwaFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAg
ICBWYWx1ZSBoZWFkaW5nR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsK
KyAgICB2b2lkICBoZWFkaW5nU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25z
dCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIGJs
b2NrUXVvdGVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZv
aWQgIGJsb2NrUXVvdGVTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZh
bHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgcXVvdGVH
ZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIHF1b3Rl
U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNv
bnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIHByZUdldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgcHJlU2V0dGVyKEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5n
JiBzdHIpOworICAgIFZhbHVlIGJyR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBj
b25zdDsKKyAgICB2b2lkICBiclNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29u
c3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBi
YXNlRm9udEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9p
ZCAgYmFzZUZvbnRTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVl
JiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgZm9udEdldHRl
cihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgZm9udFNldHRl
cihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBE
T006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBockdldHRlcihFeGVjU3RhdGUqIGV4ZWMs
IGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgaHJTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7
CisgICAgVmFsdWUgbW9kR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsK
KyAgICB2b2lkICBtb2RTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZh
bHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgYW5jaG9y
R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBhbmNo
b3JTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwg
Y29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgaW1hZ2VHZXR0ZXIoRXhlY1N0
YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGltYWdlU2V0dGVyKEV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9N
U3RyaW5nJiBzdHIpOworICAgIFZhbHVlIG9iamVjdEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGlu
dCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgb2JqZWN0U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIp
OworICAgIFZhbHVlIHBhcmFtR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25z
dDsKKyAgICB2b2lkICBwYXJhbVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29u
c3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBh
cHBsZXRHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQg
IGFwcGxldFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZh
bHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBtYXBHZXR0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIG1hcFNldHRlcihFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRP
TVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBhcmVhR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50
IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBhcmVhU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOwor
ICAgIFZhbHVlIHNjcmlwdEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7
CisgICAgdm9pZCAgc2NyaXB0U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25z
dCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIHRh
YmxlR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICB0
YWJsZVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVl
LCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSB0YWJsZUNhcHRpb25HZXR0
ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIHRhYmxlQ2Fw
dGlvblNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVl
LCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSB0YWJsZUNvbEdldHRlcihF
eGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgdGFibGVDb2xTZXR0
ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3Qg
RE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgdGFibGVTZWN0aW9uR2V0dGVyKEV4ZWNT
dGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICB0YWJsZVNlY3Rpb25TZXR0
ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3Qg
RE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgdGFibGVSb3dHZXR0ZXIoRXhlY1N0YXRl
KiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIHRhYmxlUm93U2V0dGVyKEV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9N
U3RyaW5nJiBzdHIpOworICAgIFZhbHVlIHRhYmxlQ2VsbEdldHRlcihFeGVjU3RhdGUqIGV4ZWMs
IGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgdGFibGVDZWxsU2V0dGVyKEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5n
JiBzdHIpOworICAgIFZhbHVlIGZyYW1lU2V0R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRv
a2VuKSBjb25zdDsKKyAgICB2b2lkICBmcmFtZVNldFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsK
KyAgICBWYWx1ZSBmcmFtZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7
CisgICAgdm9pZCAgZnJhbWVTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0
IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgaUZy
YW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBp
RnJhbWVTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1
ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgbWFycXVlZUdldHRlcihF
eGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgbWFycXVlZVNldHRl
cihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBE
T006OkRPTVN0cmluZyYgc3RyKTsKKwogICAgIGVudW0geyBIdG1sVmVyc2lvbiwgSGVhZFByb2Zp
bGUsIExpbmtIcmVmLCBMaW5rUmVsLCBMaW5rTWVkaWEsCiAgICAgICAgICAgIExpbmtDaGFyc2V0
LCBMaW5rRGlzYWJsZWQsIExpbmtIcmVmTGFuZywgTGlua1JldiwgTGlua1RhcmdldCwgTGlua1R5
cGUsCiAgICAgICAgICAgIExpbmtTaGVldCwgVGl0bGVUZXh0LCBNZXRhTmFtZSwgTWV0YUh0dHBF
cXVpdiwgTWV0YUNvbnRlbnQsIE1ldGFTY2hlbWUsCkluZGV4OiBraHRtbC9lY21hL2tqc193aW5k
b3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VjbWEv
a2pzX3dpbmRvdy5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTU5CmRpZmYgLXUgLXAgLXIx
LjE1OSBraHRtbC9lY21hL2tqc193aW5kb3cuY3BwCi0tLSBraHRtbC9lY21hL2tqc193aW5kb3cu
Y3BwCTE0IEp1biAyMDA1IDAwOjI5OjQwIC0wMDAwCTEuMTU5CisrKyBraHRtbC9lY21hL2tqc193
aW5kb3cuY3BwCTIwIEp1biAyMDA1IDIwOjU1OjIzIC0wMDAwCkBAIC02OCw3ICs2OCw2IEBACiAj
aW5jbHVkZSAiaHRtbC9odG1sX2RvY3VtZW50aW1wbC5oIgogI2luY2x1ZGUgImNzcy9jc3NfcnVs
ZWltcGwuaCIKICNpbmNsdWRlICJjc3MvY3NzX3N0eWxlc2hlZXRpbXBsLmgiCi0jaW5jbHVkZSAi
bWlzYy9odG1sdGFncy5oIgogCiAvLyBNdXN0IGluY2x1ZGUgPGNtYXRoPiBpbnN0ZWFkIG9mIDxt
YXRoLmg+IGJlY2F1c2Ugb2YgYSBidWcgaW4gdGhlCiAvLyBnY2MgMy4zIGxpYnJhcnkgdmVyc2lv
biBvZiA8bWF0aC5oPiB3aGVyZSBpZiB5b3UgaW5jbHVkZSBib3RoCkluZGV4OiBraHRtbC9lZGl0
aW5nL2FwcGx5X3N0eWxlX2NvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9XZWJDb3JlL2todG1sL2VkaXRpbmcvYXBwbHlfc3R5bGVfY29tbWFuZC5jcHAsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuMgpkaWZmIC11IC1wIC1yMS4yIGtodG1sL2VkaXRpbmcvYXBwbHlfc3R5
bGVfY29tbWFuZC5jcHAKLS0tIGtodG1sL2VkaXRpbmcvYXBwbHlfc3R5bGVfY29tbWFuZC5jcHAJ
MjQgTWF5IDIwMDUgMDc6MjE6NDcgLTAwMDAJMS4yCisrKyBraHRtbC9lZGl0aW5nL2FwcGx5X3N0
eWxlX2NvbW1hbmQuY3BwCTIwIEp1biAyMDA1IDIwOjU1OjI1IC0wMDAwCkBAIC0zMyw3ICszMyw3
IEBACiAjaW5jbHVkZSAiY3NzL2Nzc3Byb3BlcnRpZXMuaCIKICNpbmNsdWRlICJkb20vZG9tX3N0
cmluZy5oIgogI2luY2x1ZGUgImh0bWwvaHRtbF9lbGVtZW50aW1wbC5oIgotI2luY2x1ZGUgIm1p
c2MvaHRtbHRhZ3MuaCIKKyNpbmNsdWRlICJodG1sbmFtZXMuaCIKICNpbmNsdWRlICJtaXNjL2h0
bWxhdHRycy5oIgogI2luY2x1ZGUgInJlbmRlcmluZy9yZW5kZXJfb2JqZWN0LmgiCiAjaW5jbHVk
ZSAieG1sL2RvbV9kb2NpbXBsLmgiCkBAIC02NSw2ICs2NSw3IEBAIHVzaW5nIERPTTo6Tm9kZUlt
cGw7CiB1c2luZyBET006OlBvc2l0aW9uOwogdXNpbmcgRE9NOjpSYW5nZUltcGw7CiB1c2luZyBE
T006OlRleHRJbXBsOwordXNpbmcgRE9NOjpIVE1MTmFtZXM7CiAKIG5hbWVzcGFjZSBraHRtbCB7
CiAKQEAgLTI0OSwxMiArMjUwLDEyIEBAIGJvb2wgaXNTdHlsZVNwYW4oY29uc3QgTm9kZUltcGwg
Km5vZGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGNvbnN0IEhUTUxFbGVtZW50SW1w
bCAqZWxlbSA9IHN0YXRpY19jYXN0PGNvbnN0IEhUTUxFbGVtZW50SW1wbCAqPihub2RlKTsKLSAg
ICByZXR1cm4gZWxlbS0+aWQoKSA9PSBJRF9TUEFOICYmIGVsZW0tPmdldEF0dHJpYnV0ZShBVFRS
X0NMQVNTKSA9PSBzdHlsZVNwYW5DbGFzc1N0cmluZygpOworICAgIHJldHVybiBlbGVtLT5oYXNM
b2NhbE5hbWUoSFRNTE5hbWVzOjpzcGFuKCkpICYmIGVsZW0tPmdldEF0dHJpYnV0ZShBVFRSX0NM
QVNTKSA9PSBzdHlsZVNwYW5DbGFzc1N0cmluZygpOwogfQogCiBzdGF0aWMgYm9vbCBpc0VtcHR5
U3R5bGVTcGFuKGNvbnN0IE5vZGVJbXBsICpub2RlKQogewotICAgIGlmICghbm9kZSB8fCAhbm9k
ZS0+aXNIVE1MRWxlbWVudCgpIHx8IG5vZGUtPmlkKCkgIT0gSURfU1BBTikKKyAgICBpZiAoIW5v
ZGUgfHwgIW5vZGUtPmlzSFRNTEVsZW1lbnQoKSB8fCAhbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OnNwYW4oKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGNvbnN0IEhUTUxFbGVt
ZW50SW1wbCAqZWxlbSA9IHN0YXRpY19jYXN0PGNvbnN0IEhUTUxFbGVtZW50SW1wbCAqPihub2Rl
KTsKQEAgLTI2NCw3ICsyNjUsNyBAQCBzdGF0aWMgYm9vbCBpc0VtcHR5U3R5bGVTcGFuKGNvbnN0
IE5vZGVJCiAKIHN0YXRpYyBib29sIGlzRW1wdHlGb250VGFnKGNvbnN0IE5vZGVJbXBsICpub2Rl
KQogewotICAgIGlmICghbm9kZSB8fCBub2RlLT5pZCgpICE9IElEX0ZPTlQpCisgICAgaWYgKCFu
b2RlIHx8ICFub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Zm9udCgpKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgY29uc3QgRWxlbWVudEltcGwgKmVsZW0gPSBzdGF0aWNfY2FzdDxj
b25zdCBFbGVtZW50SW1wbCAqPihub2RlKTsKQEAgLTU4Niw3ICs1ODcsNyBAQCB2b2lkIEFwcGx5
U3R5bGVDb21tYW5kOjphcHBseUlubGluZVN0eWxlCiAgICAgICAgICAgICAgICAgICAgIC8vIHRo
ZSBjdXJyZW50IGdyb3VwLgogICAgICAgICAgICAgICAgICAgICBpZiAobm9kZSA9PSBlbmQubm9k
ZSgpIHx8IAogICAgICAgICAgICAgICAgICAgICAgICAgcnVuU3RhcnQtPnBhcmVudE5vZGUoKSAh
PSBuZXh0LT5wYXJlbnROb2RlKCkgfHwgCi0gICAgICAgICAgICAgICAgICAgICAgICAobmV4dC0+
aXNIVE1MRWxlbWVudCgpICYmIG5leHQtPmlkKCkgIT0gSURfQlIpIHx8IAorICAgICAgICAgICAg
ICAgICAgICAgICAgIW5leHQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpicigpKSB8fCAKICAgICAg
ICAgICAgICAgICAgICAgICAgIChuZXh0LT5yZW5kZXJlcigpICYmICFuZXh0LT5yZW5kZXJlcigp
LT5pc0lubGluZSgpKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgICAgICBub2RlID0gbmV4dDsKQEAgLTYxMSwxMSArNjEyLDExIEBAIGJvb2wgQXBwbHlT
dHlsZUNvbW1hbmQ6OmlzSFRNTFN0eWxlTm9kZSgKICAgICBmb3IgKFFWYWx1ZUxpc3RDb25zdEl0
ZXJhdG9yPENTU1Byb3BlcnR5PiBpdCA9IHN0eWxlLT52YWx1ZXNJdGVyYXRvcigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKICAgICAgICAgc3dpdGNoICgoKml0KS5pZCgpKSB7CiAgICAgICAgICAgICBj
YXNlIENTU19QUk9QX0ZPTlRfV0VJR0hUOgotICAgICAgICAgICAgICAgIGlmIChlbGVtLT5pZCgp
ID09IElEX0IpCisgICAgICAgICAgICAgICAgaWYgKGVsZW0tPmhhc0xvY2FsTmFtZShIVE1MTmFt
ZXM6OmIoKSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDU1NfUFJPUF9GT05UX1NUWUxFOgotICAgICAg
ICAgICAgICAgIGlmIChlbGVtLT5pZCgpID09IElEX0kpCisgICAgICAgICAgICAgICAgaWYgKGVs
ZW0tPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmkoKSkpCiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQpAQCAtNjM4LDcgKzYzOSw3IEBAIHZvaWQgQXBw
bHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUhUTUxGb250U3QKICAgICBBU1NFUlQoc3R5bGUpOwogICAg
IEFTU0VSVChlbGVtKTsKIAotICAgIGlmIChlbGVtLT5pZCgpICE9IElEX0ZPTlQpCisgICAgaWYg
KCFlbGVtLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpmb250KCkpKQogICAgICAgICByZXR1cm47
CiAKICAgICBpbnQgZXhjZXB0aW9uQ29kZSA9IDA7CkBAIC0xMDQ3LDcgKzEwNDgsNyBAQCBzdGF0
aWMgYm9vbCBhcmVJZGVudGljYWxFbGVtZW50cyhOb2RlSW1wCiAgICAgRWxlbWVudEltcGwgKmZp
cnN0RWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsICo+KGZpcnN0KTsKICAgICBFbGVt
ZW50SW1wbCAqc2Vjb25kRWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsICo+KHNlY29u
ZCk7CiAgICAgCi0gICAgaWYgKGZpcnN0RWxlbWVudC0+aWQoKSAhPSBzZWNvbmRFbGVtZW50LT5p
ZCgpKQorICAgIGlmIChmaXJzdEVsZW1lbnQtPnRhZ05hbWUoKSAhPSBzZWNvbmRFbGVtZW50LT50
YWdOYW1lKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIE5hbWVkQXR0ck1hcEltcGwg
KmZpcnN0TWFwID0gZmlyc3RFbGVtZW50LT5hdHRyaWJ1dGVzKCk7CkBAIC0xMTI5LDcgKzExMzAs
NyBAQCBib29sIEFwcGx5U3R5bGVDb21tYW5kOjptZXJnZUVuZFdpdGhOZXh0CiAgICAgICAgIGVu
ZE9mZnNldCA9IHBhcmVudExhc3RPZmZzZXQ7CiAgICAgfQogCi0gICAgaWYgKCFlbmROb2RlLT5p
c0VsZW1lbnROb2RlKCkgfHwgZW5kTm9kZS0+aWQoKSA9PSBJRF9CUikKKyAgICBpZiAoIWVuZE5v
ZGUtPmlzRWxlbWVudE5vZGUoKSB8fCBlbmROb2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YnIo
KSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIE5vZGVJbXBsICpuZXh0U2libGluZyA9
IGVuZE5vZGUtPm5leHRTaWJsaW5nKCk7CkluZGV4OiBraHRtbC9lZGl0aW5nL2JyZWFrX2Jsb2Nr
cXVvdGVfY29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUv
a2h0bWwvZWRpdGluZy9icmVha19ibG9ja3F1b3RlX2NvbW1hbmQuY3BwLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjEKZGlmZiAtdSAtcCAtcjEuMSBraHRtbC9lZGl0aW5nL2JyZWFrX2Jsb2NrcXVv
dGVfY29tbWFuZC5jcHAKLS0tIGtodG1sL2VkaXRpbmcvYnJlYWtfYmxvY2txdW90ZV9jb21tYW5k
LmNwcAkyNCBNYXkgMjAwNSAwNzoyMTo0NyAtMDAwMAkxLjEKKysrIGtodG1sL2VkaXRpbmcvYnJl
YWtfYmxvY2txdW90ZV9jb21tYW5kLmNwcAkyMCBKdW4gMjAwNSAyMDo1NToyNSAtMDAwMApAQCAt
MjgsNyArMjgsNyBAQAogI2luY2x1ZGUgImh0bWxlZGl0aW5nLmgiCiAjaW5jbHVkZSAidmlzaWJs
ZV9wb3NpdGlvbi5oIgogCi0jaW5jbHVkZSAibWlzYy9odG1sdGFncy5oIgorI2luY2x1ZGUgImh0
bWxuYW1lcy5oIgogI2luY2x1ZGUgInhtbC9kb21fZWxlbWVudGltcGwuaCIKICNpbmNsdWRlICJ4
bWwvZG9tX3RleHRpbXBsLmgiCiAKQEAgLTQzLDYgKzQzLDcgQEAgdXNpbmcgRE9NOjpFbGVtZW50
SW1wbDsKIHVzaW5nIERPTTo6Tm9kZUltcGw7CiB1c2luZyBET006OlBvc2l0aW9uOwogdXNpbmcg
RE9NOjpUZXh0SW1wbDsKK3VzaW5nIERPTTo6SFRNTE5hbWVzOwogCiBuYW1lc3BhY2Uga2h0bWwg
ewogCkBAIC0xNDYsNyArMTQ3LDcgQEAgdm9pZCBCcmVha0Jsb2NrcXVvdGVDb21tYW5kOjpkb0Fw
cGx5KCkKICAgICAgICAgYm9vbCBzdGFydElzQlIgPSBmYWxzZTsKICAgICAgICAgaWYgKHN0YXJ0
Tm9kZSAhPSB0b3BCbG9ja3F1b3RlKSB7CiAgICAgICAgICAgICBOb2RlSW1wbCAqbiA9IHN0YXJ0
Tm9kZTsKLSAgICAgICAgICAgIHN0YXJ0SXNCUiA9IG4tPmlkKCkgPT0gSURfQlI7CisgICAgICAg
ICAgICBzdGFydElzQlIgPSBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YnIoKSk7CiAgICAgICAg
ICAgICBpZiAoc3RhcnRJc0JSKQogICAgICAgICAgICAgICAgIG4gPSBuLT5uZXh0U2libGluZygp
OwogICAgICAgICAgICAgd2hpbGUgKG4pIHsKSW5kZXg6IGtodG1sL2VkaXRpbmcvY29tcG9zaXRl
X2VkaXRfY29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUv
a2h0bWwvZWRpdGluZy9jb21wb3NpdGVfZWRpdF9jb21tYW5kLmNwcCx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS4zCmRpZmYgLXUgLXAgLXIxLjMga2h0bWwvZWRpdGluZy9jb21wb3NpdGVfZWRpdF9j
b21tYW5kLmNwcAotLS0ga2h0bWwvZWRpdGluZy9jb21wb3NpdGVfZWRpdF9jb21tYW5kLmNwcAky
NCBNYXkgMjAwNSAwNzoyMTo0NyAtMDAwMAkxLjMKKysrIGtodG1sL2VkaXRpbmcvY29tcG9zaXRl
X2VkaXRfY29tbWFuZC5jcHAJMjAgSnVuIDIwMDUgMjA6NTU6MjUgLTAwMDAKQEAgLTQ3LDcgKzQ3
LDcgQEAKICNpbmNsdWRlICJ3cmFwX2NvbnRlbnRzX2luX2R1bW15X3NwYW5fY29tbWFuZC5oIgog
CiAjaW5jbHVkZSAibWlzYy9odG1sYXR0cnMuaCIKLSNpbmNsdWRlICJtaXNjL2h0bWx0YWdzLmgi
CisjaW5jbHVkZSAiaHRtbG5hbWVzLmgiCiAjaW5jbHVkZSAicmVuZGVyaW5nL3JlbmRlcl90ZXh0
LmgiCiAjaW5jbHVkZSAieG1sL2RvbTJfcmFuZ2VpbXBsLmgiCiAjaW5jbHVkZSAieG1sL2RvbV90
ZXh0aW1wbC5oIgpAQCAtNjcsNiArNjcsNyBAQCB1c2luZyBET006Ok5vZGVJbXBsOwogdXNpbmcg
RE9NOjpQb3NpdGlvbjsKIHVzaW5nIERPTTo6UmFuZ2VJbXBsOwogdXNpbmcgRE9NOjpUZXh0SW1w
bDsKK3VzaW5nIERPTTo6SFRNTE5hbWVzOwogCiBuYW1lc3BhY2Uga2h0bWwgewogCkBAIC0xMjcs
MTQgKzEyOCwxNCBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjppbnNlcnRQYXJhZ3JhCiAK
IHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6Omluc2VydE5vZGVCZWZvcmUoTm9kZUltcGwgKmlu
c2VydENoaWxkLCBOb2RlSW1wbCAqcmVmQ2hpbGQpCiB7Ci0gICAgQVNTRVJUKHJlZkNoaWxkLT5p
ZCgpICE9IElEX0JPRFkpOworICAgIEFTU0VSVCghcmVmQ2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjpib2R5KCkpKTsKICAgICBFZGl0Q29tbWFuZFB0ciBjbWQobmV3IEluc2VydE5vZGVCZWZv
cmVDb21tYW5kKGRvY3VtZW50KCksIGluc2VydENoaWxkLCByZWZDaGlsZCkpOwogICAgIGFwcGx5
Q29tbWFuZFRvQ29tcG9zaXRlKGNtZCk7CiB9CiAKIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6
Omluc2VydE5vZGVBZnRlcihOb2RlSW1wbCAqaW5zZXJ0Q2hpbGQsIE5vZGVJbXBsICpyZWZDaGls
ZCkKIHsKLSAgICBBU1NFUlQocmVmQ2hpbGQtPmlkKCkgIT0gSURfQk9EWSk7CisgICAgQVNTRVJU
KCFyZWZDaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJvZHkoKSkpOwogICAgIGlmIChyZWZD
aGlsZC0+cGFyZW50Tm9kZSgpLT5sYXN0Q2hpbGQoKSA9PSByZWZDaGlsZCkgewogICAgICAgICBh
cHBlbmROb2RlKGluc2VydENoaWxkLCByZWZDaGlsZC0+cGFyZW50Tm9kZSgpKTsKICAgICB9CkBA
IC01NDUsNyArNTQ2LDcgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6bW92ZVBhcmFncmFw
aAogICAgIC8vICAgICAgIGFkZGl0aW9uYWwgbGV2ZWwgb2YgcXVvdGluZy4KICAgICBOb2RlSW1w
bCAqc3RhcnRCbG9jayA9IHBhcmFncmFwaFN0YXJ0Lm5vZGUoKS0+ZW5jbG9zaW5nQmxvY2tGbG93
RWxlbWVudCgpOwogICAgIE5vZGVJbXBsICpuZXdCbG9jayA9IDA7Ci0gICAgaWYgKHN0YXJ0Qmxv
Y2stPmlkKCkgPT0gSURfQk9EWSB8fCAoaXNNYWlsQmxvY2txdW90ZShzdGFydEJsb2NrKSAmJiBw
YXJhZ3JhcGhTdGFydC5ub2RlKCkgIT0gc3RhcnRCbG9jaykpCisgICAgaWYgKHN0YXJ0QmxvY2st
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpib2R5KCkpIHx8IChpc01haWxCbG9ja3F1b3RlKHN0YXJ0
QmxvY2spICYmIHBhcmFncmFwaFN0YXJ0Lm5vZGUoKSAhPSBzdGFydEJsb2NrKSkKICAgICAgICAg
bmV3QmxvY2sgPSBjcmVhdGVEZWZhdWx0UGFyYWdyYXBoRWxlbWVudChkb2N1bWVudCgpKTsKICAg
ICBlbHNlCiAgICAgICAgIG5ld0Jsb2NrID0gc3RhcnRCbG9jay0+Y2xvbmVOb2RlKGZhbHNlKTsK
QEAgLTU1NSwxMCArNTU2LDEwIEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6Om1vdmVQYXJh
Z3JhcGgKICAgICAgICAgbW92ZU5vZGUgPSBtb3ZlTm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpOwog
ICAgIE5vZGVJbXBsICplbmROb2RlID0gcGFyYWdyYXBoRW5kLm5vZGUoKTsKIAotICAgIGlmIChw
YXJhZ3JhcGhTdGFydC5ub2RlKCktPmlkKCkgPT0gSURfQk9EWSkgeworICAgIGlmIChwYXJhZ3Jh
cGhTdGFydC5ub2RlKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpib2R5KCkpKSB7CiAgICAgICAg
IGluc2VydE5vZGVBdChuZXdCbG9jaywgcGFyYWdyYXBoU3RhcnQubm9kZSgpLCAwKTsKICAgICB9
Ci0gICAgZWxzZSBpZiAocGFyYWdyYXBoU3RhcnQubm9kZSgpLT5pZCgpID09IElEX0JSKSB7Cisg
ICAgZWxzZSBpZiAocGFyYWdyYXBoU3RhcnQubm9kZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
YnIoKSkpIHsKICAgICAgICAgaW5zZXJ0Tm9kZUFmdGVyKG5ld0Jsb2NrLCBwYXJhZ3JhcGhTdGFy
dC5ub2RlKCkpOwogICAgIH0KICAgICBlbHNlIHsKSW5kZXg6IGtodG1sL2VkaXRpbmcvZGVsZXRl
X3NlbGVjdGlvbl9jb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2Vi
Q29yZS9raHRtbC9lZGl0aW5nL2RlbGV0ZV9zZWxlY3Rpb25fY29tbWFuZC5jcHAsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuMgpkaWZmIC11IC1wIC1yMS4yIGtodG1sL2VkaXRpbmcvZGVsZXRlX3Nl
bGVjdGlvbl9jb21tYW5kLmNwcAotLS0ga2h0bWwvZWRpdGluZy9kZWxldGVfc2VsZWN0aW9uX2Nv
bW1hbmQuY3BwCTI0IE1heSAyMDA1IDA3OjIxOjQ3IC0wMDAwCTEuMgorKysga2h0bWwvZWRpdGlu
Zy9kZWxldGVfc2VsZWN0aW9uX2NvbW1hbmQuY3BwCTIwIEp1biAyMDA1IDIwOjU1OjI2IC0wMDAw
CkBAIC0yOCw3ICsyOCw3IEBACiAjaW5jbHVkZSAiY3NzL2Nzc19jb21wdXRlZHN0eWxlLmgiCiAj
aW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKICNpbmNsdWRlICJraHRtbF9wYXJ0LmgiCi0jaW5jbHVk
ZSAibWlzYy9odG1sdGFncy5oIgorI2luY2x1ZGUgImh0bWxuYW1lcy5oIgogI2luY2x1ZGUgInJl
bmRlcmluZy9yZW5kZXJfbGluZS5oIgogI2luY2x1ZGUgInJlbmRlcmluZy9yZW5kZXJfb2JqZWN0
LmgiCiAjaW5jbHVkZSAidmlzaWJsZV90ZXh0LmgiCkBAIC01Myw2ICs1Myw3IEBAIHVzaW5nIERP
TTo6Tm9kZUltcGw7CiB1c2luZyBET006OlBvc2l0aW9uOwogdXNpbmcgRE9NOjpSYW5nZUltcGw7
CiB1c2luZyBET006OlRleHRJbXBsOwordXNpbmcgRE9NOjpIVE1MTmFtZXM7CiAKIG5hbWVzcGFj
ZSBraHRtbCB7CiAKQEAgLTYxLDkgKzYyLDEzIEBAIHN0YXRpYyBib29sIGlzTGlzdFN0cnVjdHVy
ZU5vZGUoY29uc3QgTm8KICAgICAvLyBGSVhNRTogSXJyaXRhdGluZyB0aGF0IHdlIGNhbiBnZXQg
YXdheSB3aXRoIGp1c3QgZ29pbmcgYXQgdGhlIHJlbmRlciB0cmVlIGZvciBpc1RhYmxlU3RydWN0
dXJlTm9kZSwKICAgICAvLyBidXQgaGVyZSB3ZSBhbHNvIGhhdmUgdG8gcGVlayBhdCB0aGUgdHlw
ZSBvZiBET00gbm9kZT8KICAgICBSZW5kZXJPYmplY3QgKnIgPSBub2RlLT5yZW5kZXJlcigpOwot
ICAgIE5vZGVJbXBsOjpJZCBub2RlSUQgPSBub2RlLT5pZCgpOwogICAgIHJldHVybiAociAmJiBy
LT5pc0xpc3RJdGVtKCkpCi0gICAgICAgIHx8IChub2RlSUQgPT0gSURfT0wgfHwgbm9kZUlEID09
IElEX1VMIHx8IG5vZGVJRCA9PSBJRF9ERCB8fCBub2RlSUQgPT0gSURfRFQgfHwgbm9kZUlEID09
IElEX0RJUiB8fCBub2RlSUQgPT0gSURfTUVOVSk7CisgICAgICAgIHx8IG5vZGUtPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjpvbCgpKQorICAgICAgICB8fCBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6dWwoKSkKKyAgICAgICAgfHwgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmRkKCkpCisg
ICAgICAgIHx8IG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpkdCgpKQorICAgICAgICB8fCBu
b2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZGlyKCkpCisgICAgICAgIHx8IG5vZGUtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjptZW51KCkpOwogfQogCiBzdGF0aWMgaW50IG1heERlZXBPZmZzZXQo
Tm9kZUltcGwgKm4pCkBAIC0yNzcsOCArMjgyLDggQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21t
YW5kOjpzYXZlVHlwaW5nUwogYm9vbCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpoYW5kbGVTcGVj
aWFsQ2FzZUJSRGVsZXRlKCkKIHsKICAgICAvLyBDaGVjayBmb3Igc3BlY2lhbC1jYXNlIHdoZXJl
IHRoZSBzZWxlY3Rpb24gY29udGFpbnMgb25seSBhIEJSIG9uIGEgbGluZSBieSBpdHNlbGYgYWZ0
ZXIgYW5vdGhlciBCUi4KLSAgICBib29sIHVwc3RyZWFtU3RhcnRJc0JSID0gbV9zdGFydE5vZGUt
PmlkKCkgPT0gSURfQlI7Ci0gICAgYm9vbCBkb3duc3RyZWFtU3RhcnRJc0JSID0gbV9kb3duc3Ry
ZWFtU3RhcnQubm9kZSgpLT5pZCgpID09IElEX0JSOworICAgIGJvb2wgdXBzdHJlYW1TdGFydElz
QlIgPSBtX3N0YXJ0Tm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJyKCkpOworICAgIGJvb2wg
ZG93bnN0cmVhbVN0YXJ0SXNCUiA9IG1fZG93bnN0cmVhbVN0YXJ0Lm5vZGUoKS0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OmJyKCkpOwogICAgIGJvb2wgaXNCUk9uTGluZUJ5SXRzZWxmID0gdXBzdHJl
YW1TdGFydElzQlIgJiYgZG93bnN0cmVhbVN0YXJ0SXNCUiAmJiBtX2Rvd25zdHJlYW1TdGFydC5u
b2RlKCkgPT0gbV91cHN0cmVhbUVuZC5ub2RlKCk7CiAgICAgaWYgKGlzQlJPbkxpbmVCeUl0c2Vs
ZikgewogICAgICAgICByZW1vdmVOb2RlKG1fZG93bnN0cmVhbVN0YXJ0Lm5vZGUoKSk7CkBAIC0z
MjYsMTEgKzMzMSwxMSBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmhhbmRsZUdlbmVy
CiAgICAgLy8gZW5kIG9mIGEgYmxvY2sgb3RoZXIgdGhhbiB0aGUgYmxvY2sgY29udGFpbmluZyB0
aGUgc2VsZWN0aW9uIHN0YXJ0LCB0aGVuIGRvIG5vdCBkZWxldGUgdGhlIAogICAgIC8vIHN0YXJ0
IGJsb2NrLCBvdGhlcndpc2UgZGVsZXRlIHRoZSBzdGFydCBibG9jay4KICAgICAvLyBBIHNpbWls
YXIgY2FzZSBpcyBwcm92aWRlZCB0byBjb3ZlciBzZWxlY3Rpb25zIHN0YXJ0aW5nIGluIEJSIGVs
ZW1lbnRzLgotICAgIGlmIChzdGFydE9mZnNldCA9PSAxICYmIG1fc3RhcnROb2RlICYmIG1fc3Rh
cnROb2RlLT5pZCgpID09IElEX0JSKSB7CisgICAgaWYgKHN0YXJ0T2Zmc2V0ID09IDEgJiYgbV9z
dGFydE5vZGUgJiYgbV9zdGFydE5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpicigpKSkgewog
ICAgICAgICBzZXRTdGFydE5vZGUobV9zdGFydE5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKSk7CiAg
ICAgICAgIHN0YXJ0T2Zmc2V0ID0gMDsKICAgICB9Ci0gICAgaWYgKG1fc3RhcnRCbG9jayAhPSBt
X2VuZEJsb2NrICYmIHN0YXJ0T2Zmc2V0ID09IDAgJiYgbV9zdGFydE5vZGUgJiYgbV9zdGFydE5v
ZGUtPmlkKCkgPT0gSURfQlIgJiYgZW5kQXRFbmRPZkJsb2NrKSB7CisgICAgaWYgKG1fc3RhcnRC
bG9jayAhPSBtX2VuZEJsb2NrICYmIHN0YXJ0T2Zmc2V0ID09IDAgJiYgbV9zdGFydE5vZGUgJiYg
bV9zdGFydE5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpicigpKSAmJiBlbmRBdEVuZE9mQmxv
Y2spIHsKICAgICAgICAgLy8gRG9uJ3QgZGVsZXRlIHRoZSBCUiBlbGVtZW50CiAgICAgICAgIHNl
dFN0YXJ0Tm9kZShtX3N0YXJ0Tm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpKTsKICAgICB9CkBAIC01
NTIsNyArNTU3LDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjptb3ZlTm9kZXNBZgog
ICAgICAgICBOb2RlSW1wbCAqbW92ZU5vZGUgPSBub2RlOwogICAgICAgICBub2RlID0gbm9kZS0+
bmV4dFNpYmxpbmcoKTsKICAgICAgICAgcmVtb3ZlTm9kZShtb3ZlTm9kZSk7Ci0gICAgICAgIGlm
IChtb3ZlTm9kZS0+aWQoKSA9PSBJRF9CUiAmJiAhbW92ZU5vZGUtPnJlbmRlcmVyKCkpIHsKKyAg
ICAgICAgaWYgKG1vdmVOb2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YnIoKSkgJiYgIW1vdmVO
b2RlLT5yZW5kZXJlcigpKSB7CiAgICAgICAgICAgICAvLyBKdXN0IHJlbW92ZSB0aGlzIG5vZGUs
IGFuZCBkb24ndCBwdXQgaXQgYmFjay4KICAgICAgICAgICAgIC8vIElmIHRoZSBCUiB3YXMgbm90
IHJlbmRlcmVkIChzaW5jZSBpdCB3YXMgYXQgdGhlIGVuZCBvZiBhIGJsb2NrLCBmb3IgaW5zdGFu
Y2UpLCAKICAgICAgICAgICAgIC8vIHB1dHRpbmcgaXQgYmFjayBpbiB0aGUgZG9jdW1lbnQgbWln
aHQgbWFrZSBpdCBhcHBlYXIsIGFuZCB0aGF0IGlzIG5vdCBkZXNpcmFibGUuCkBAIC01NjMsNyAr
NTY4LDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjptb3ZlTm9kZXNBZgogICAgICAg
ICBlbHNlCiAgICAgICAgICAgICBpbnNlcnROb2RlQWZ0ZXIobW92ZU5vZGUsIHJlZk5vZGUpOwog
ICAgICAgICByZWZOb2RlID0gbW92ZU5vZGU7Ci0gICAgICAgIGlmIChtb3ZlTm9kZS0+aWQoKSA9
PSBJRF9CUikKKyAgICAgICAgaWYgKG1vdmVOb2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YnIo
KSkpCiAgICAgICAgICAgICBicmVhazsKICAgICB9CiAKSW5kZXg6IGtodG1sL2VkaXRpbmcvaHRt
bGVkaXRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1s
L2VkaXRpbmcvaHRtbGVkaXRpbmcuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjI0NwpkaWZm
IC11IC1wIC1yMS4yNDcga2h0bWwvZWRpdGluZy9odG1sZWRpdGluZy5jcHAKLS0tIGtodG1sL2Vk
aXRpbmcvaHRtbGVkaXRpbmcuY3BwCTI0IE1heSAyMDA1IDA3OjIxOjQ3IC0wMDAwCTEuMjQ3Cisr
KyBraHRtbC9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAkyMCBKdW4gMjAwNSAyMDo1NToyNiAtMDAw
MApAQCAtNDIsNyArNDIsNyBAQAogI2luY2x1ZGUgImh0bWxfaW1hZ2VpbXBsLmgiCiAjaW5jbHVk
ZSAiaHRtbF9pbnRlcmNoYW5nZS5oIgogI2luY2x1ZGUgImh0bWxhdHRycy5oIgotI2luY2x1ZGUg
Imh0bWx0YWdzLmgiCisjaW5jbHVkZSAiaHRtbG5hbWVzLmgiCiAjaW5jbHVkZSAia2h0bWxfcGFy
dC5oIgogI2luY2x1ZGUgImtodG1sX3BhcnQuaCIKICNpbmNsdWRlICJraHRtbHZpZXcuaCIKQEAg
LTgxLDYgKzgxLDcgQEAgdXNpbmcgRE9NOjpQb3NpdGlvbjsKIHVzaW5nIERPTTo6UmFuZ2VJbXBs
OwogdXNpbmcgRE9NOjpUZXh0SW1wbDsKIHVzaW5nIERPTTo6VHJlZVdhbGtlckltcGw7Cit1c2lu
ZyBET006OkhUTUxOYW1lczsKIAogI2lmIEFQUExFX0NIQU5HRVMKICNpbmNsdWRlICJLV1FBc3Nl
cnRpb25zLmgiCkBAIC0xMzEsMTAgKzEzMiwxMCBAQCBib29sIGlzU3BlY2lhbEVsZW1lbnQoTm9k
ZUltcGwgKm4pCiAgICAgaWYgKCFuLT5pc0hUTUxFbGVtZW50KCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIGlmIChuLT5pZCgpID09IElEX0EgJiYgbi0+aXNMaW5rKCkpCisgICAgaWYg
KG4tPmlzTGluaygpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGlmIChuLT5pZCgpID09
IElEX1VMIHx8IG4tPmlkKCkgPT0gSURfT0wgfHwgbi0+aWQoKSA9PSBJRF9ETCkKKyAgICBpZiAo
bi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnVsKCkpIHx8IG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjpvbCgpKSB8fCBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZGwoKSkpCiAgICAgICAgIHJldHVy
biB0cnVlOwogCiAgICAgUmVuZGVyT2JqZWN0ICpyZW5kZXJlciA9IG4tPnJlbmRlcmVyKCk7CkBA
IC0zMDMsNyArMzA0LDcgQEAgTm9kZUltcGwgKm5lYXJlc3RNYWlsQmxvY2txdW90ZShjb25zdCBO
bwogCiBib29sIGlzTWFpbEJsb2NrcXVvdGUoY29uc3QgTm9kZUltcGwgKm5vZGUpCiB7Ci0gICAg
aWYgKCFub2RlIHx8ICFub2RlLT5yZW5kZXJlcigpIHx8ICFub2RlLT5pc0VsZW1lbnROb2RlKCkg
JiYgbm9kZS0+aWQoKSAhPSBJRF9CTE9DS1FVT1RFKQorICAgIGlmICghbm9kZSB8fCAhbm9kZS0+
cmVuZGVyZXIoKSB8fCAhbm9kZS0+aXNFbGVtZW50Tm9kZSgpICYmICFub2RlLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6YmxvY2txdW90ZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICAKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgRWxlbWVudEltcGwgKj4obm9kZSktPmdl
dEF0dHJpYnV0ZSgidHlwZSIpID09ICJjaXRlIjsKSW5kZXg6IGtodG1sL2VkaXRpbmcvaW5zZXJ0
X2xpbmVfYnJlYWtfY29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dl
YkNvcmUva2h0bWwvZWRpdGluZy9pbnNlcnRfbGluZV9icmVha19jb21tYW5kLmNwcCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXUgLXAgLXIxLjEga2h0bWwvZWRpdGluZy9pbnNlcnRf
bGluZV9icmVha19jb21tYW5kLmNwcAotLS0ga2h0bWwvZWRpdGluZy9pbnNlcnRfbGluZV9icmVh
a19jb21tYW5kLmNwcAkyNCBNYXkgMjAwNSAwNzoyMTo0NyAtMDAwMAkxLjEKKysrIGtodG1sL2Vk
aXRpbmcvaW5zZXJ0X2xpbmVfYnJlYWtfY29tbWFuZC5jcHAJMjAgSnVuIDIwMDUgMjA6NTU6MjYg
LTAwMDAKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlICJ2aXNpYmxlX3Bvc2l0aW9uLmgiCiAj
aW5jbHVkZSAidmlzaWJsZV91bml0cy5oIgogCi0jaW5jbHVkZSAibWlzYy9odG1sdGFncy5oIgor
I2luY2x1ZGUgImh0bWxuYW1lcy5oIgogI2luY2x1ZGUgInhtbC9kb21fZG9jaW1wbC5oIgogI2lu
Y2x1ZGUgInhtbC9kb21fZWxlbWVudGltcGwuaCIKICNpbmNsdWRlICJ4bWwvZG9tMl9yYW5nZWlt
cGwuaCIKQEAgLTUwLDYgKzUwLDcgQEAgdXNpbmcgRE9NOjpOb2RlSW1wbDsKIHVzaW5nIERPTTo6
UG9zaXRpb247CiB1c2luZyBET006OlRleHRJbXBsOwogdXNpbmcgRE9NOjpDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbkltcGw7Cit1c2luZyBET006OkhUTUxOYW1lczsKIAogbmFtZXNwYWNlIGto
dG1sIHsKIApAQCAtMTExLDEzICsxMTIsMTMgQEAgdm9pZCBJbnNlcnRMaW5lQnJlYWtDb21tYW5k
Ojpkb0FwcGx5KCkKICAgICAgICAgLy8gVGhpcyBtYWtlcyB0aGUgInJlYWwiIEJSIHdlIHdhbnQg
dG8gaW5zZXJ0IGFwcGVhciBpbiB0aGUgcmVuZGVyaW5nIHdpdGhvdXQgYW55IAogICAgICAgICAv
LyBzaWduaWZpY2FudCBzaWRlIGVmZmVjdHMgKGFuZCBubyByZWFsIHdvcnJpZXMgZWl0aGVyIHNp
bmNlIHlvdSBjYW4ndCBhcnJvdyBwYXN0IAogICAgICAgICAvLyB0aGlzIGV4dHJhIG9uZS4KLSAg
ICAgICAgaWYgKHBvcy5ub2RlKCktPmlkKCkgPT0gSURfQlIgJiYgcG9zLm9mZnNldCgpID09IDAp
IHsKKyAgICAgICAgaWYgKHBvcy5ub2RlKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpicigpKSAm
JiBwb3Mub2Zmc2V0KCkgPT0gMCkgewogICAgICAgICAgICAgLy8gQWxyZWFkeSBwbGFjZWQgaW4g
YSB0cmFpbGluZyBCUi4gSW5zZXJ0ICJyZWFsIiBCUiBiZWZvcmUgaXQgYW5kIGxlYXZlIHRoZSBz
ZWxlY3Rpb24gYWxvbmUuCiAgICAgICAgICAgICBpbnNlcnROb2RlQmVmb3JlKG5vZGVUb0luc2Vy
dCwgcG9zLm5vZGUoKSk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBO
b2RlSW1wbCAqbmV4dCA9IHBvcy5ub2RlKCktPnRyYXZlcnNlTmV4dE5vZGUoKTsKLSAgICAgICAg
ICAgIGJvb2wgaGFzVHJhaWxpbmdCUiA9IG5leHQgJiYgbmV4dC0+aWQoKSA9PSBJRF9CUiAmJiBw
b3Mubm9kZSgpLT5lbmNsb3NpbmdCbG9ja0Zsb3dFbGVtZW50KCkgPT0gbmV4dC0+ZW5jbG9zaW5n
QmxvY2tGbG93RWxlbWVudCgpOworICAgICAgICAgICAgYm9vbCBoYXNUcmFpbGluZ0JSID0gbmV4
dCAmJiBuZXh0LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YnIoKSkgJiYgcG9zLm5vZGUoKS0+ZW5j
bG9zaW5nQmxvY2tGbG93RWxlbWVudCgpID09IG5leHQtPmVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1l
bnQoKTsKICAgICAgICAgICAgIGluc2VydE5vZGVBZnRlclBvc2l0aW9uKG5vZGVUb0luc2VydCwg
cG9zKTsKICAgICAgICAgICAgIGlmIChoYXNUcmFpbGluZ0JSKSB7CiAgICAgICAgICAgICAgICAg
c2V0RW5kaW5nU2VsZWN0aW9uKFNlbGVjdGlvbihQb3NpdGlvbihuZXh0LCAwKSwgRE9XTlNUUkVB
TSkpOwpJbmRleDoga2h0bWwvZWRpdGluZy9pbnNlcnRfcGFyYWdyYXBoX3NlcGFyYXRvcl9jb21t
YW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0
aW5nL2luc2VydF9wYXJhZ3JhcGhfc2VwYXJhdG9yX2NvbW1hbmQuY3BwLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjEKZGlmZiAtdSAtcCAtcjEuMSBraHRtbC9lZGl0aW5nL2luc2VydF9wYXJhZ3Jh
cGhfc2VwYXJhdG9yX2NvbW1hbmQuY3BwCi0tLSBraHRtbC9lZGl0aW5nL2luc2VydF9wYXJhZ3Jh
cGhfc2VwYXJhdG9yX2NvbW1hbmQuY3BwCTI0IE1heSAyMDA1IDA3OjIxOjQ3IC0wMDAwCTEuMQor
Kysga2h0bWwvZWRpdGluZy9pbnNlcnRfcGFyYWdyYXBoX3NlcGFyYXRvcl9jb21tYW5kLmNwcAky
MCBKdW4gMjAwNSAyMDo1NToyNyAtMDAwMApAQCAtMzEsNyArMzEsNyBAQAogCiAjaW5jbHVkZSAi
Y3NzL2Nzc19jb21wdXRlZHN0eWxlLmgiCiAjaW5jbHVkZSAiY3NzL2Nzc192YWx1ZWltcGwuaCIK
LSNpbmNsdWRlICJtaXNjL2h0bWx0YWdzLmgiCisjaW5jbHVkZSAiaHRtbG5hbWVzLmgiCiAjaW5j
bHVkZSAieG1sL2RvbV9kb2NpbXBsLmgiCiAjaW5jbHVkZSAieG1sL2RvbV9lbGVtZW50aW1wbC5o
IgogI2luY2x1ZGUgInhtbC9kb21fdGV4dGltcGwuaCIKQEAgLTUwLDYgKzUwLDcgQEAgdXNpbmcg
RE9NOjpFbGVtZW50SW1wbDsKIHVzaW5nIERPTTo6Tm9kZUltcGw7CiB1c2luZyBET006OlBvc2l0
aW9uOwogdXNpbmcgRE9NOjpUZXh0SW1wbDsKK3VzaW5nIERPTTo6SFRNTE5hbWVzOwogCiBuYW1l
c3BhY2Uga2h0bWwgewogCkBAIC0yMTMsNyArMjE0LDcgQEAgdm9pZCBJbnNlcnRQYXJhZ3JhcGhT
ZXBhcmF0b3JDb21tYW5kOjpkbwogICAgIC8vIHRoZW4gdGhpcyA8YnI+IHdpbGwgY29sbGFwc2Ug
YXdheSB3aGVuIHdlIGFkZCBhIGJsb2NrIGFmdGVyIGl0LiBBZGQgYW4gZXh0cmEgPGJyPi4KICAg
ICBpZiAoIWRvY3VtZW50KCktPmluU3RyaWN0TW9kZSgpKSB7CiAgICAgICAgIFBvc2l0aW9uIHVw
c3RyZWFtUG9zID0gcG9zLnVwc3RyZWFtKCk7Ci0gICAgICAgIGlmICh1cHN0cmVhbVBvcy5ub2Rl
KCktPmlkKCkgPT0gSURfQlIpCisgICAgICAgIGlmICh1cHN0cmVhbVBvcy5ub2RlKCktPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjpicigpKSkKICAgICAgICAgICAgIGluc2VydE5vZGVBZnRlcihjcmVh
dGVCcmVha0VsZW1lbnQoZG9jdW1lbnQoKSksIHVwc3RyZWFtUG9zLm5vZGUoKSk7CiAgICAgfQog
ICAgIApJbmRleDoga2h0bWwvZWRpdGluZy9tYXJrdXAuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VkaXRpbmcvbWFya3VwLmNwcCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS4yMApkaWZmIC11IC1wIC1yMS4yMCBraHRtbC9lZGl0aW5nL21hcmt1cC5jcHAK
LS0tIGtodG1sL2VkaXRpbmcvbWFya3VwLmNwcAkxMCBNYXkgMjAwNSAwNDowMzozNCAtMDAwMAkx
LjIwCisrKyBraHRtbC9lZGl0aW5nL21hcmt1cC5jcHAJMjAgSnVuIDIwMDUgMjA6NTU6MjcgLTAw
MDAKQEAgLTM2LDcgKzM2LDcgQEAKICNpbmNsdWRlICJ4bWwvZG9tMl9yYW5nZWltcGwuaCIKICNp
bmNsdWRlICJyZW5kZXJpbmcvcmVuZGVyX3RleHQuaCIKICNpbmNsdWRlICJtaXNjL2h0bWxhdHRy
cy5oIgotI2luY2x1ZGUgIm1pc2MvaHRtbHRhZ3MuaCIKKyNpbmNsdWRlICJodG1sbmFtZXMuaCIK
ICNpbmNsdWRlICJodG1sL2R0ZC5oIgogCiB1c2luZyBET006OkF0dHJpYnV0ZUltcGw7CkBAIC00
OCw4ICs0OCw4IEBAIHVzaW5nIERPTTo6RG9jdW1lbnRJbXBsOwogdXNpbmcgRE9NOjpET01TdHJp
bmc7CiB1c2luZyBET006OkVsZW1lbnRJbXBsOwogdXNpbmcgRE9NOjpGT1JCSURERU47Ci11c2lu
ZyBET006OmVuZFRhZ1JlcXVpcmVtZW50OwogdXNpbmcgRE9NOjpIVE1MRWxlbWVudEltcGw7Cit1
c2luZyBET006OkhUTUxOYW1lczsKIHVzaW5nIERPTTo6TmFtZWRBdHRyTWFwSW1wbDsKIHVzaW5n
IERPTTo6Tm9kZTsKIHVzaW5nIERPTTo6Tm9kZUltcGw7CkBAIC0xNzcsMTMgKzE3NywxMSBAQCBz
dGF0aWMgUVN0cmluZyBzdGFydE1hcmt1cChjb25zdCBOb2RlSW1wCiAgICAgc3dpdGNoICh0eXBl
KSB7CiAgICAgICAgIGNhc2UgTm9kZTo6VEVYVF9OT0RFOiB7CiAgICAgICAgICAgICBpZiAobm9k
ZS0+cGFyZW50Tm9kZSgpKSB7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5wYXJlbnRO
b2RlKCktPmlkKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9QUkU6Ci0gICAgICAg
ICAgICAgICAgICAgIGNhc2UgSURfU0NSSVBUOgotICAgICAgICAgICAgICAgICAgICBjYXNlIElE
X1NUWUxFOgotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX1RFWFRBUkVBOgotICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHN0cmluZ1ZhbHVlRm9yUmFuZ2Uobm9kZSwgcmFuZ2UpOwot
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+cGFyZW50Tm9kZSgp
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6cHJlKCkpIHx8CisgICAgICAgICAgICAgICAgICAgIG5v
ZGUtPnBhcmVudE5vZGUoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnNjcmlwdCgpKSB8fAorICAg
ICAgICAgICAgICAgICAgICBub2RlLT5wYXJlbnROb2RlKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjpzdHlsZSgpKSB8fAorICAgICAgICAgICAgICAgICAgICBub2RlLT5wYXJlbnROb2RlKCktPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjp0ZXh0YXJlYSgpKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHN0cmluZ1ZhbHVlRm9yUmFuZ2Uobm9kZSwgcmFuZ2UpOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgUVN0cmluZyBtYXJrdXAgPSBhbm5vdGF0ZSA/IGVzY2FwZUhUTUwocmVuZGVyZWRU
ZXh0KG5vZGUsIHJhbmdlKSkgOiBlc2NhcGVIVE1MKHN0cmluZ1ZhbHVlRm9yUmFuZ2Uobm9kZSwg
cmFuZ2UpKTsgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChkZWZhdWx0U3R5bGUpIHsKQEAg
LTI0OCw5ICsyNDYsMTMgQEAgc3RhdGljIFFTdHJpbmcgc3RhcnRNYXJrdXAoY29uc3QgTm9kZUlt
cAogCiBzdGF0aWMgUVN0cmluZyBlbmRNYXJrdXAoY29uc3QgTm9kZUltcGwgKm5vZGUpCiB7Ci0g
ICAgaWYgKCghbm9kZS0+aXNIVE1MRWxlbWVudCgpIHx8IGVuZFRhZ1JlcXVpcmVtZW50KG5vZGUt
PmlkKCkpICE9IEZPUkJJRERFTikgJiYgbm9kZS0+bm9kZVR5cGUoKSAhPSBOb2RlOjpURVhUX05P
REUgJiYgbm9kZS0+bm9kZVR5cGUoKSAhPSBOb2RlOjpET0NVTUVOVF9OT0RFKSB7Ci0gICAgICAg
IHJldHVybiAiPC8iICsgbm9kZS0+bm9kZU5hbWUoKS5zdHJpbmcoKSArICI+IjsKKyAgICBib29s
IGhhc0VuZFRhZyA9IHRydWU7CisgICAgaWYgKG5vZGUtPmlzSFRNTEVsZW1lbnQoKSkgeworICAg
ICAgICBjb25zdCBIVE1MRWxlbWVudEltcGwqIGh0bWxFbHQgPSBzdGF0aWNfY2FzdDxjb25zdCBI
VE1MRWxlbWVudEltcGwqPihub2RlKTsKKyAgICAgICAgaGFzRW5kVGFnID0gKGh0bWxFbHQtPmVu
ZFRhZ1JlcXVpcmVtZW50KCkgIT0gRk9SQklEREVOKTsKICAgICB9CisgICAgaWYgKGhhc0VuZFRh
ZykKKyAgICAgICAgcmV0dXJuICI8LyIgKyBub2RlLT5ub2RlTmFtZSgpLnN0cmluZygpICsgIj4i
OwogICAgIHJldHVybiAiIjsKIH0KIApAQCAtMjY1LDggKzI2NywxNCBAQCBzdGF0aWMgUVN0cmlu
ZyBtYXJrdXAoY29uc3QgTm9kZUltcGwgKnN0CiAgICAgICAgICAgICAgICAgbm9kZXMtPmFwcGVu
ZChjdXJyZW50KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1lICs9IHN0YXJ0TWFya3Vw
KGN1cnJlbnQsIDAsIERvTm90QW5ub3RhdGVGb3JJbnRlcmNoYW5nZSwgMCk7Ci0gICAgICAgIH0g
ICAgICAgIAotICAgICAgICBpZiAoIWN1cnJlbnQtPmlzSFRNTEVsZW1lbnQoKSB8fCBlbmRUYWdS
ZXF1aXJlbWVudChjdXJyZW50LT5pZCgpKSAhPSBGT1JCSURERU4pIHsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgYm9vbCBjb250YWluZXIgPSB0cnVlOworICAgICAgICBpZiAoY3VycmVu
dC0+aXNIVE1MRWxlbWVudCgpKSB7CisgICAgICAgICAgICBjb25zdCBIVE1MRWxlbWVudEltcGwq
IGggPSBzdGF0aWNfY2FzdDxjb25zdCBIVE1MRWxlbWVudEltcGwqPihjdXJyZW50KTsKKyAgICAg
ICAgICAgIGNvbnRhaW5lciA9IGgtPmVuZFRhZ1JlcXVpcmVtZW50KCkgIT0gRk9SQklEREVOOwor
ICAgICAgICB9CisgICAgICAgIGlmIChjb250YWluZXIpIHsKICAgICAgICAgICAgIC8vIHByaW50
IGNoaWxkcmVuCiAgICAgICAgICAgICBpZiAoTm9kZUltcGwgKm4gPSBjdXJyZW50LT5maXJzdENo
aWxkKCkpIHsKICAgICAgICAgICAgICAgICBtZSArPSBtYXJrdXAobiwgZmFsc2UsIHRydWUsIG5v
ZGVzKTsKQEAgLTQxNCw5ICs0MjIsOSBAQCBRU3RyaW5nIGNyZWF0ZU1hcmt1cChjb25zdCBSYW5n
ZUltcGwgKnJhCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBib29sIGJyZWFrQXRFbmQgPSBm
YWxzZTsKICAgICAgICAgICAgIGlmIChjb21tb25BbmNlc3RvckJsb2NrID09IGFuY2VzdG9yKSB7
Ci0gICAgICAgICAgICAgICAgTm9kZUltcGw6OklkIGlkID0gYW5jZXN0b3ItPmlkKCk7CiAgICAg
ICAgICAgICAgICAgLy8gSW5jbHVkZSBhbmNlc3RvcnMgdGhhdCBhcmUgcmVxdWlyZWQgdG8gcmV0
YWluIHRoZSBhcHBlYXJhbmNlIG9mIHRoZSBjb3BpZWQgbWFya3VwLgotICAgICAgICAgICAgICAg
IGlmIChpZCA9PSBJRF9QUkUgfHwgaWQgPT0gSURfVEFCTEUgfHwgaWQgPT0gSURfT0wgfHwgaWQg
PT0gSURfVUwpIHsKKyAgICAgICAgICAgICAgICBpZiAoYW5jZXN0b3ItPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjpwcmUoKSkgfHwgYW5jZXN0b3ItPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0YWJsZSgp
KSB8fAorICAgICAgICAgICAgICAgICAgICBhbmNlc3Rvci0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
Om9sKCkpIHx8IGFuY2VzdG9yLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dWwoKSkpIHsKICAgICAg
ICAgICAgICAgICAgICAgYnJlYWtBdEVuZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBraHRtbC9lZGl0aW5nL3JlcGxh
Y2Vfc2VsZWN0aW9uX2NvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9X
ZWJDb3JlL2todG1sL2VkaXRpbmcvcmVwbGFjZV9zZWxlY3Rpb25fY29tbWFuZC5jcHAsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC11IC1wIC1yMS4xIGtodG1sL2VkaXRpbmcvcmVwbGFj
ZV9zZWxlY3Rpb25fY29tbWFuZC5jcHAKLS0tIGtodG1sL2VkaXRpbmcvcmVwbGFjZV9zZWxlY3Rp
b25fY29tbWFuZC5jcHAJMjQgTWF5IDIwMDUgMDc6MjE6NDcgLTAwMDAJMS4xCisrKyBraHRtbC9l
ZGl0aW5nL3JlcGxhY2Vfc2VsZWN0aW9uX2NvbW1hbmQuY3BwCTIwIEp1biAyMDA1IDIwOjU1OjI4
IC0wMDAwCkBAIC0yNyw3ICsyNyw3IEBACiAKICNpbmNsdWRlICJ2aXNpYmxlX3Bvc2l0aW9uLmgi
CiAjaW5jbHVkZSAibWlzYy9odG1sYXR0cnMuaCIKLSNpbmNsdWRlICJtaXNjL2h0bWx0YWdzLmgi
CisjaW5jbHVkZSAiaHRtbG5hbWVzLmgiCiAjaW5jbHVkZSAieG1sL2RvbV9kb2NpbXBsLmgiCiAj
aW5jbHVkZSAiaHRtbF9pbnRlcmNoYW5nZS5oIgogI2luY2x1ZGUgInhtbC9kb21fdGV4dGltcGwu
aCIKQEAgLTU4LDYgKzU4LDcgQEAgdXNpbmcgRE9NOjpET01TdHJpbmc7CiB1c2luZyBET006OkhU
TUxFbGVtZW50SW1wbDsKIHVzaW5nIERPTTo6Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25JbXBs
OwogdXNpbmcgRE9NOjpQb3NpdGlvbjsKK3VzaW5nIERPTTo6SFRNTE5hbWVzOwogCiBuYW1lc3Bh
Y2Uga2h0bWwgewogCkBAIC0xNjcsMzAgKzE2OCwxNCBAQCBzdGF0aWMgYm9vbCBpc1Byb2JhYmx5
QmxvY2soY29uc3QgTm9kZUltCiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgCi0gICAgc3dpdGNoIChub2RlLT5pZCgpKSB7Ci0gICAgICAgIGNhc2UgSURfQkxPQ0tR
VU9URToKLSAgICAgICAgY2FzZSBJRF9ERDoKLSAgICAgICAgY2FzZSBJRF9ESVY6Ci0gICAgICAg
IGNhc2UgSURfREw6Ci0gICAgICAgIGNhc2UgSURfRFQ6Ci0gICAgICAgIGNhc2UgSURfSDE6Ci0g
ICAgICAgIGNhc2UgSURfSDI6Ci0gICAgICAgIGNhc2UgSURfSDM6Ci0gICAgICAgIGNhc2UgSURf
SDQ6Ci0gICAgICAgIGNhc2UgSURfSDU6Ci0gICAgICAgIGNhc2UgSURfSDY6Ci0gICAgICAgIGNh
c2UgSURfSFI6Ci0gICAgICAgIGNhc2UgSURfTEk6Ci0gICAgICAgIGNhc2UgSURfT0w6Ci0gICAg
ICAgIGNhc2UgSURfUDoKLSAgICAgICAgY2FzZSBJRF9QUkU6Ci0gICAgICAgIGNhc2UgSURfVEQ6
Ci0gICAgICAgIGNhc2UgSURfVEg6Ci0gICAgICAgIGNhc2UgSURfVUw6Ci0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGZhbHNlOworICAgIC8vIEZJWE1F
OiBUaGlzIGZ1bmN0aW9uIHNlZW1zIHJlYWxseSBicm9rZW4gdG8gbWUuICBJdCBpc24ndCBldmVu
IGluY2x1ZGluZyBhbGwgdGhlIGJsb2NrLWxldmVsIGVsZW1lbnRzLgorICAgIHJldHVybiAobm9k
ZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJsb2NrcXVvdGUoKSkgfHwgbm9kZS0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OmRkKCkpIHx8IG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpkaXYoKSkg
fHwKKyAgICAgICAgICAgIG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpkbCgpKSB8fCBub2Rl
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZHQoKSkgfHwgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OmgxKCkpIHx8CisgICAgICAgICAgICBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDIo
KSkgfHwgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmgzKCkpIHx8IG5vZGUtPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjpoNCgpKSB8fAorICAgICAgICAgICAgbm9kZS0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6Omg1KCkpIHx8IG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoNigpKSB8fCBub2Rl
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aHIoKSkgfHwKKyAgICAgICAgICAgIG5vZGUtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjpsaSgpKSB8fCBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b2wo
KSkgfHwgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnAoKSkgfHwKKyAgICAgICAgICAgIG5v
ZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpwcmUoKSkgfHwgbm9kZS0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OnRkKCkpIHx8IG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0aCgpKSB8fAorICAg
ICAgICAgICAgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnVsKCkpKTsKIH0KIAogc3RhdGlj
IGJvb2wgaXNNYWlsUGFzdGVBc1F1b3RhdGlvbk5vZGUoY29uc3QgTm9kZUltcGwgKm5vZGUpCkBA
IC0yMTQsMTYgKzE5OSw4IEBAIHN0YXRpYyBib29sIGlzUHJvYmFibHlUYWJsZVN0cnVjdHVyZU5v
ZGUKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBzd2l0
Y2ggKG5vZGUtPmlkKCkpIHsKLSAgICAgICAgY2FzZSBJRF9UQUJMRToKLSAgICAgICAgY2FzZSBJ
RF9UQk9EWToKLSAgICAgICAgY2FzZSBJRF9URDoKLSAgICAgICAgY2FzZSBJRF9URk9PVDoKLSAg
ICAgICAgY2FzZSBJRF9USEVBRDoKLSAgICAgICAgY2FzZSBJRF9UUjoKLSAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIChub2RlLT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6dGFibGUoKSkgfHwgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OnRib2R5KCkpIHx8IG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0ZCgpKSB8fAorICAg
ICAgICAgICAgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRmb290KCkpIHx8IG5vZGUtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjp0aGVhZCgpKSB8fCBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6dHIoKSkpOwogfQogCiB2b2lkIFJlcGxhY2VtZW50RnJhZ21lbnQ6OnBydW5lRW1wdHlOb2Rl
cygpCkBAIC0yNTAsNyArMjI3LDcgQEAgdm9pZCBSZXBsYWNlbWVudEZyYWdtZW50OjpwcnVuZUVt
cHR5Tm9kZQogYm9vbCBSZXBsYWNlbWVudEZyYWdtZW50Ojppc0ludGVyY2hhbmdlTmV3bGluZU5v
ZGUoY29uc3QgTm9kZUltcGwgKm5vZGUpCiB7CiAgICAgc3RhdGljIERPTVN0cmluZyBpbnRlcmNo
YW5nZU5ld2xpbmVDbGFzc1N0cmluZyhBcHBsZUludGVyY2hhbmdlTmV3bGluZSk7Ci0gICAgcmV0
dXJuIG5vZGUgJiYgbm9kZS0+aWQoKSA9PSBJRF9CUiAmJiBzdGF0aWNfY2FzdDxjb25zdCBFbGVt
ZW50SW1wbCAqPihub2RlKS0+Z2V0QXR0cmlidXRlKEFUVFJfQ0xBU1MpID09IGludGVyY2hhbmdl
TmV3bGluZUNsYXNzU3RyaW5nOworICAgIHJldHVybiBub2RlICYmIG5vZGUtPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjpicigpKSAmJiBzdGF0aWNfY2FzdDxjb25zdCBFbGVtZW50SW1wbCAqPihub2Rl
KS0+Z2V0QXR0cmlidXRlKEFUVFJfQ0xBU1MpID09IGludGVyY2hhbmdlTmV3bGluZUNsYXNzU3Ry
aW5nOwogfQogCiBib29sIFJlcGxhY2VtZW50RnJhZ21lbnQ6OmlzSW50ZXJjaGFuZ2VDb252ZXJ0
ZWRTcGFjZVNwYW4oY29uc3QgTm9kZUltcGwgKm5vZGUpCkBAIC01MDcsMTggKzQ4NCwxOSBAQCB2
b2lkIFJlcGxhY2VtZW50RnJhZ21lbnQ6OnJlbW92ZVN0eWxlTm9kCiAgICAgICAgIE5vZGVJbXBs
ICpuZXh0ID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpOwogICAgICAgICAvLyBUaGlzIGxpc3Qg
b2YgdGFncyBjaGFuZ2UgdGhlIGFwcGVhcmFuY2Ugb2YgY29udGVudAogICAgICAgICAvLyBpbiB3
YXlzIHdlIGNhbiBhZGQgYmFjayBvbiBsYXRlciB3aXRoIENTUywgaWYgbmVjZXNzYXJ5LgotICAg
ICAgICBpZiAobm9kZS0+aWQoKSA9PSBJRF9CIHx8IAotICAgICAgICAgICAgbm9kZS0+aWQoKSA9
PSBJRF9CSUcgfHwgCi0gICAgICAgICAgICBub2RlLT5pZCgpID09IElEX0NFTlRFUiB8fCAKLSAg
ICAgICAgICAgIG5vZGUtPmlkKCkgPT0gSURfRk9OVCB8fCAKLSAgICAgICAgICAgIG5vZGUtPmlk
KCkgPT0gSURfSSB8fCAKLSAgICAgICAgICAgIG5vZGUtPmlkKCkgPT0gSURfUyB8fCAKLSAgICAg
ICAgICAgIG5vZGUtPmlkKCkgPT0gSURfU01BTEwgfHwgCi0gICAgICAgICAgICBub2RlLT5pZCgp
ID09IElEX1NUUklLRSB8fCAKLSAgICAgICAgICAgIG5vZGUtPmlkKCkgPT0gSURfU1VCIHx8IAot
ICAgICAgICAgICAgbm9kZS0+aWQoKSA9PSBJRF9TVVAgfHwgCi0gICAgICAgICAgICBub2RlLT5p
ZCgpID09IElEX1RUIHx8IAotICAgICAgICAgICAgbm9kZS0+aWQoKSA9PSBJRF9VIHx8IAorICAg
ICAgICAvLyAgRklYTUU6IFRoaXMgbGlzdCBpcyBpbmNvbXBsZXRlCisgICAgICAgIGlmIChub2Rl
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YigpKSB8fCAKKyAgICAgICAgICAgIG5vZGUtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjpiaWcoKSkgfHwgCisgICAgICAgICAgICBub2RlLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6Y2VudGVyKCkpIHx8IAorICAgICAgICAgICAgbm9kZS0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OmZvbnQoKSkgfHwgCisgICAgICAgICAgICBub2RlLT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6aSgpKSB8fCAKKyAgICAgICAgICAgIG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpz
KCkpIHx8IAorICAgICAgICAgICAgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnNtYWxsKCkp
IHx8IAorICAgICAgICAgICAgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnN0cmlrZSgpKSB8
fCAKKyAgICAgICAgICAgIG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzdWIoKSkgfHwgCisg
ICAgICAgICAgICBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c3VwKCkpIHx8IAorICAgICAg
ICAgICAgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnR0KCkpIHx8IAorICAgICAgICAgICAg
bm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnUoKSkgfHwgCiAgICAgICAgICAgICBpc1N0eWxl
U3Bhbihub2RlKSkgewogICAgICAgICAgICAgcmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbihu
b2RlKTsKICAgICAgICAgfQpAQCAtNzQ0LDcgKzcyMiw3IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlv
bkNvbW1hbmQ6OmRvQXBwbHkoKQogICAgIGlmICghbGluZVBsYWNlaG9sZGVyKSB7CiAgICAgICAg
IFBvc2l0aW9uIGRvd25zdHJlYW0gPSBzdGFydFBvcy5kb3duc3RyZWFtKCk7CiAgICAgICAgIGRv
d25zdHJlYW0gPSBwb3NpdGlvbk91dHNpZGVDb250YWluaW5nU3BlY2lhbEVsZW1lbnQoZG93bnN0
cmVhbSk7Ci0gICAgICAgIGlmIChkb3duc3RyZWFtLm5vZGUoKS0+aWQoKSA9PSBJRF9CUiAmJiBk
b3duc3RyZWFtLm9mZnNldCgpID09IDAgJiYgCisgICAgICAgIGlmIChkb3duc3RyZWFtLm5vZGUo
KS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJyKCkpICYmIGRvd25zdHJlYW0ub2Zmc2V0KCkgPT0g
MCAmJiAKICAgICAgICAgICAgIG1fZnJhZ21lbnQuaGFzSW50ZXJjaGFuZ2VOZXdsaW5lQXRFbmQo
KSAmJgogICAgICAgICAgICAgaXNTdGFydE9mTGluZShWaXNpYmxlUG9zaXRpb24oZG93bnN0cmVh
bSwgVlBfREVGQVVMVF9BRkZJTklUWSkpKQogICAgICAgICAgICAgbGluZVBsYWNlaG9sZGVyID0g
ZG93bnN0cmVhbS5ub2RlKCk7CkBAIC05MDUsMTIgKzg4MywxMiBAQCB2b2lkIFJlcGxhY2VTZWxl
Y3Rpb25Db21tYW5kOjpkb0FwcGx5KCkKICAgICAgICAgfQogICAgIH0gCiAgICAgZWxzZSB7Ci0g
ICAgICAgIGlmIChtX2xhc3ROb2RlSW5zZXJ0ZWQgJiYgbV9sYXN0Tm9kZUluc2VydGVkLT5pZCgp
ID09IElEX0JSICYmICFkb2N1bWVudCgpLT5pblN0cmljdE1vZGUoKSkgeworICAgICAgICBpZiAo
bV9sYXN0Tm9kZUluc2VydGVkICYmIG1fbGFzdE5vZGVJbnNlcnRlZC0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OmJyKCkpICYmICFkb2N1bWVudCgpLT5pblN0cmljdE1vZGUoKSkgewogICAgICAgICAg
ICAgZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0KCk7CiAgICAgICAgICAgICBWaXNpYmxlUG9zaXRp
b24gcG9zKFBvc2l0aW9uKG1fbGFzdE5vZGVJbnNlcnRlZCwgMSksIERPV05TVFJFQU0pOwogICAg
ICAgICAgICAgaWYgKGlzRW5kT2ZCbG9jayhwb3MpKSB7CiAgICAgICAgICAgICAgICAgTm9kZUlt
cGwgKm5leHQgPSBtX2xhc3ROb2RlSW5zZXJ0ZWQtPnRyYXZlcnNlTmV4dE5vZGUoKTsKLSAgICAg
ICAgICAgICAgICBib29sIGhhc1RyYWlsaW5nQlIgPSBuZXh0ICYmIG5leHQtPmlkKCkgPT0gSURf
QlIgJiYgbV9sYXN0Tm9kZUluc2VydGVkLT5lbmNsb3NpbmdCbG9ja0Zsb3dFbGVtZW50KCkgPT0g
bmV4dC0+ZW5jbG9zaW5nQmxvY2tGbG93RWxlbWVudCgpOworICAgICAgICAgICAgICAgIGJvb2wg
aGFzVHJhaWxpbmdCUiA9IG5leHQgJiYgbmV4dC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJyKCkp
ICYmIG1fbGFzdE5vZGVJbnNlcnRlZC0+ZW5jbG9zaW5nQmxvY2tGbG93RWxlbWVudCgpID09IG5l
eHQtPmVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQoKTsKICAgICAgICAgICAgICAgICBpZiAoIWhh
c1RyYWlsaW5nQlIpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gSW5zZXJ0IGFuICJleHRyYSIg
QlIgYXQgdGhlIGVuZCBvZiB0aGUgYmxvY2suIAogICAgICAgICAgICAgICAgICAgICBpbnNlcnRO
b2RlQmVmb3JlKGNyZWF0ZUJyZWFrRWxlbWVudChkb2N1bWVudCgpKSwgbV9sYXN0Tm9kZUluc2Vy
dGVkKTsKQEAgLTkzNyw3ICs5MTUsNyBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpk
b0FwcGx5KCkKICAgICAgICAgICAgICAgICBpbnNlcnROb2RlQWZ0ZXIobm9kZSwgcmVmTm9kZSk7
CiAgICAgICAgICAgICAgICAgcmVmTm9kZSA9IG5vZGU7CiAgICAgICAgICAgICAgICAgLy8gV2Ug
d2FudCB0byBtb3ZlIHRoZSBmaXJzdCBCUiB3ZSBzZWUsIHNvIGNoZWNrIGZvciB0aGF0IGhlcmUu
Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPmlkKCkgPT0gSURfQlIpCisgICAgICAgICAgICAg
ICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpicigpKSkKICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgbm9kZSA9IG5leHQ7CiAgICAgICAgICAgICB9
CkBAIC0xMDg1LDcgKzEwNjMsNyBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjp1cGRh
dGVOb2RlCiAgICAgCiAgICAgLy8gdXBkYXRlIG1fbGFzdE5vZGVJbnNlcnRlZAogICAgIE5vZGVJ
bXBsICpvbGQgPSBtX2xhc3ROb2RlSW5zZXJ0ZWQ7Ci0gICAgbV9sYXN0Tm9kZUluc2VydGVkID0g
bm9kZS0+bGFzdERlc2NlbmRlbnQoKTsKKyAgICBtX2xhc3ROb2RlSW5zZXJ0ZWQgPSBub2RlLT5s
YXN0RGVzY2VuZGFudCgpOwogICAgIG1fbGFzdE5vZGVJbnNlcnRlZC0+cmVmKCk7CiAgICAgaWYg
KG9sZCkKICAgICAgICAgb2xkLT5kZXJlZigpOwpJbmRleDoga2h0bWwvZWRpdGluZy9zZWxlY3Rp
b24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VkaXRp
bmcvc2VsZWN0aW9uLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS44NwpkaWZmIC11IC1wIC1y
MS44NyBraHRtbC9lZGl0aW5nL3NlbGVjdGlvbi5jcHAKLS0tIGtodG1sL2VkaXRpbmcvc2VsZWN0
aW9uLmNwcAkxNyBKdW4gMjAwNSAwMjoxMzoxMSAtMDAwMAkxLjg3CisrKyBraHRtbC9lZGl0aW5n
L3NlbGVjdGlvbi5jcHAJMjAgSnVuIDIwMDUgMjA6NTU6MjkgLTAwMDAKQEAgLTMzLDcgKzMzLDYg
QEAKICNpbmNsdWRlICJkb20vZG9tX3N0cmluZy5oIgogI2luY2x1ZGUgImtodG1sX3BhcnQuaCIK
ICNpbmNsdWRlICJraHRtbHZpZXcuaCIKLSNpbmNsdWRlICJtaXNjL2h0bWx0YWdzLmgiCiAjaW5j
bHVkZSAicmVuZGVyaW5nL3JlbmRlcl9vYmplY3QuaCIKICNpbmNsdWRlICJyZW5kZXJpbmcvcmVu
ZGVyX3N0eWxlLmgiCiAjaW5jbHVkZSAicmVuZGVyaW5nL3JlbmRlcl90ZXh0LmgiCkBAIC05Mzgs
NyArOTM3LDcgQEAgdm9pZCBTZWxlY3Rpb246OmRlYnVnUmVuZGVyZXIoUmVuZGVyT2JqZQogewog
ICAgIGlmIChyLT5ub2RlKCktPmlzRWxlbWVudE5vZGUoKSkgewogICAgICAgICBFbGVtZW50SW1w
bCAqZWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsICo+KHItPm5vZGUoKSk7Ci0gICAg
ICAgIGZwcmludGYoc3RkZXJyLCAiJXMlc1xuIiwgc2VsZWN0ZWQgPyAiPT0+ICIgOiAiICAgICIs
IGVsZW1lbnQtPnRhZ05hbWUoKS5zdHJpbmcoKS5sYXRpbjEoKSk7CisgICAgICAgIGZwcmludGYo
c3RkZXJyLCAiJXMlc1xuIiwgc2VsZWN0ZWQgPyAiPT0+ICIgOiAiICAgICIsIGVsZW1lbnQtPmxv
Y2FsTmFtZSgpLnN0cmluZygpLmxhdGluMSgpKTsKICAgICB9CiAgICAgZWxzZSBpZiAoci0+aXNU
ZXh0KCkpIHsKICAgICAgICAgUmVuZGVyVGV4dCAqdGV4dFJlbmRlcmVyID0gc3RhdGljX2Nhc3Q8
UmVuZGVyVGV4dCAqPihyKTsKSW5kZXg6IGtodG1sL2VkaXRpbmcvdmlzaWJsZV9wb3NpdGlvbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWRpdGluZy92
aXNpYmxlX3Bvc2l0aW9uLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40OQpkaWZmIC11IC1w
IC1yMS40OSBraHRtbC9lZGl0aW5nL3Zpc2libGVfcG9zaXRpb24uY3BwCi0tLSBraHRtbC9lZGl0
aW5nL3Zpc2libGVfcG9zaXRpb24uY3BwCTE3IEp1biAyMDA1IDAyOjEzOjExIC0wMDAwCTEuNDkK
KysrIGtodG1sL2VkaXRpbmcvdmlzaWJsZV9wb3NpdGlvbi5jcHAJMjAgSnVuIDIwMDUgMjA6NTU6
MzAgLTAwMDAKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlICJ2aXNpYmxlX3Bvc2l0aW9uLmgi
CiAjaW5jbHVkZSAidmlzaWJsZV91bml0cy5oIgogCi0jaW5jbHVkZSAibWlzYy9odG1sdGFncy5o
IgorI2luY2x1ZGUgImh0bWxuYW1lcy5oIgogI2luY2x1ZGUgInJlbmRlcmluZy9yZW5kZXJfbGlu
ZS5oIgogI2luY2x1ZGUgInJlbmRlcmluZy9yZW5kZXJfb2JqZWN0LmgiCiAjaW5jbHVkZSAicmVu
ZGVyaW5nL3JlbmRlcl90ZXh0LmgiCkBAIC01MCw2ICs1MCw3IEBAIHVzaW5nIERPTTo6UG9zaXRp
b247CiB1c2luZyBET006OlJhbmdlOwogdXNpbmcgRE9NOjpSYW5nZUltcGw7CiB1c2luZyBET006
OlRleHRJbXBsOwordXNpbmcgRE9NOjpIVE1MTmFtZXM7CiAKIG5hbWVzcGFjZSBraHRtbCB7CiAK
QEAgLTc0LDcgKzc1LDcgQEAgdm9pZCBWaXNpYmxlUG9zaXRpb246OmluaXQoY29uc3QgUG9zaXRp
bwogICAgIG1fYWZmaW5pdHkgPSBhZmZpbml0eTsKIAogICAgIC8vIEZvciA8YnI+IDAsIGl0J3Mg
aW1wb3J0YW50IG5vdCB0byBtb3ZlIHBhc3QgdGhlIDxicj4uCi0gICAgaWYgKHBvcy5ub2RlKCkg
JiYgcG9zLm5vZGUoKS0+aWQoKSA9PSBJRF9CUiAmJiBwb3Mub2Zmc2V0KCkgPT0gMCkKKyAgICBp
ZiAocG9zLm5vZGUoKSAmJiBwb3Mubm9kZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YnIoKSkg
JiYgcG9zLm9mZnNldCgpID09IDApCiAgICAgICAgIGluaXRVcHN0cmVhbShwb3MpOwogICAgIGVs
c2UKICAgICAgICAgaW5pdERvd25zdHJlYW0ocG9zKTsKQEAgLTI3MSw3ICsyNzIsNyBAQCBib29s
IFZpc2libGVQb3NpdGlvbjo6aXNDYW5kaWRhdGUoY29uc3QgCiAgICAgfQogICAgIAogICAgIGlm
IChyZW5kZXJlci0+aXNCbG9ja0Zsb3coKSAmJiAoIXJlbmRlcmVyLT5maXJzdENoaWxkKCkgfHwg
IXBvcy5ub2RlKCktPmZpcnN0Q2hpbGQoKSkgJiYgCi0gICAgICAgKHJlbmRlcmVyLT5oZWlnaHQo
KSB8fCBwb3Mubm9kZSgpLT5pZCgpID09IElEX0JPRFkpKSB7CisgICAgICAgKHJlbmRlcmVyLT5o
ZWlnaHQoKSB8fCBwb3Mubm9kZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Ym9keSgpKSkpIHsK
ICAgICAgICAgLy8gcmV0dXJuIHRydWUgZm9yIG9mZnNldCAwIGludG8gcmVuZGVyZWQgYmxvY2tz
IHRoYXQgYXJlIGVtcHR5IG9mIHJlbmRlcmVkIGtpZHMsIGJ1dCBoYXZlIGEgaGVpZ2h0CiAgICAg
ICAgIHJldHVybiBwb3Mub2Zmc2V0KCkgPT0gMDsKICAgICB9CkBAIC0zNTYsNyArMzU3LDcgQEAg
bG9uZyBWaXNpYmxlUG9zaXRpb246Om1heE9mZnNldChjb25zdCBObwogCiBib29sIFZpc2libGVQ
b3NpdGlvbjo6aXNBdG9taWNOb2RlKGNvbnN0IE5vZGVJbXBsICpub2RlKQogewotICAgIHJldHVy
biBub2RlICYmICghbm9kZS0+aGFzQ2hpbGROb2RlcygpIHx8IChub2RlLT5pZCgpID09IElEX09C
SkVDVCAmJiBub2RlLT5yZW5kZXJlcigpICYmIG5vZGUtPnJlbmRlcmVyKCktPmlzUmVwbGFjZWQo
KSkpOworICAgIHJldHVybiBub2RlICYmICghbm9kZS0+aGFzQ2hpbGROb2RlcygpIHx8IChub2Rl
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b2JqZWN0KCkpICYmIG5vZGUtPnJlbmRlcmVyKCkgJiYg
bm9kZS0+cmVuZGVyZXIoKS0+aXNSZXBsYWNlZCgpKSk7CiB9CiAKIFFDaGFyIFZpc2libGVQb3Np
dGlvbjo6Y2hhcmFjdGVyKCkgY29uc3QKSW5kZXg6IGtodG1sL2VkaXRpbmcvdmlzaWJsZV90ZXh0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5n
L3Zpc2libGVfdGV4dC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjcKZGlmZiAtdSAtcCAt
cjEuMjcga2h0bWwvZWRpdGluZy92aXNpYmxlX3RleHQuY3BwCi0tLSBraHRtbC9lZGl0aW5nL3Zp
c2libGVfdGV4dC5jcHAJMTMgTWF5IDIwMDUgMTY6NDg6NTEgLTAwMDAJMS4yNworKysga2h0bWwv
ZWRpdGluZy92aXNpYmxlX3RleHQuY3BwCTIwIEp1biAyMDA1IDIwOjU1OjMxIC0wMDAwCkBAIC0y
NSw3ICsyNSw3IEBACiAKICNpbmNsdWRlICJ2aXNpYmxlX3RleHQuaCIKIAotI2luY2x1ZGUgIm1p
c2MvaHRtbHRhZ3MuaCIKKyNpbmNsdWRlICJodG1sbmFtZXMuaCIKICNpbmNsdWRlICJyZW5kZXJp
bmcvcmVuZGVyX3RleHQuaCIKICNpbmNsdWRlICJ4bWwvZG9tX25vZGVpbXBsLmgiCiAjaW5jbHVk
ZSAieG1sL2RvbV9wb3NpdGlvbi5oIgpAQCAtMzcsNiArMzcsNyBAQCB1c2luZyBET006Ok5vZGU7
CiB1c2luZyBET006Ok5vZGVJbXBsOwogdXNpbmcgRE9NOjpvZmZzZXRJbkNoYXJhY3RlcnM7CiB1
c2luZyBET006OlJhbmdlSW1wbDsKK3VzaW5nIERPTTo6SFRNTE5hbWVzOwogCiAvLyBGSVhNRTog
VGhlc2UgY2xhc3NlcyBzaG91bGQgcHJvYmFibHkgdXNlIHRoZSByZW5kZXIgdHJlZSBhbmQgbm90
IHRoZSBET00gdHJlZSwgc2luY2UgZWxlbWVudHMgY291bGQKIC8vIGJlIGhpZGRlbiB1c2luZyBD
U1MsIG9yIGFkZGl0aW9uYWwgZ2VuZXJhdGVkIGNvbnRlbnQgY291bGQgYmUgYWRkZWQuICBGb3Ig
bm93LCB3ZSBqdXN0IG1ha2Ugc3VyZQpAQCAtMzM2LDQxICszMzcsMjUgQEAgYm9vbCBUZXh0SXRl
cmF0b3I6OmhhbmRsZVJlcGxhY2VkRWxlbWVudAogCiBib29sIFRleHRJdGVyYXRvcjo6aGFuZGxl
Tm9uVGV4dE5vZGUoKQogewotICAgIHN3aXRjaCAobV9ub2RlLT5pZCgpKSB7Ci0gICAgICAgIGNh
c2UgSURfQlI6IHsKLSAgICAgICAgICAgIGVtaXRDaGFyYWN0ZXIoJ1xuJywgbV9ub2RlLT5wYXJl
bnROb2RlKCksIG1fbm9kZSwgMCwgMSk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICBpZiAobV9u
b2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YnIoKSkpIHsKKyAgICAgICAgZW1pdENoYXJhY3Rl
cignXG4nLCBtX25vZGUtPnBhcmVudE5vZGUoKSwgbV9ub2RlLCAwLCAxKTsKKyAgICB9IGVsc2Ug
aWYgKG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRkKCkpIHx8IG1fbm9kZS0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OnRoKCkpKSB7CisgICAgICAgIGlmIChtX2xhc3RDaGFyYWN0ZXIgIT0g
J1xuJyAmJiBtX2xhc3RUZXh0Tm9kZSkgeworICAgICAgICAgICAgZW1pdENoYXJhY3RlcignXHQn
LCBtX2xhc3RUZXh0Tm9kZS0+cGFyZW50Tm9kZSgpLCBtX2xhc3RUZXh0Tm9kZSwgMCwgMSk7Cisg
ICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJs
b2NrcXVvdGUoKSkgfHwgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZGQoKSkgfHwKKyAg
ICAgICAgICAgICAgIG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmRpdigpKSB8fAorICAg
ICAgICAgICAgICAgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZGwoKSkgfHwgbV9ub2Rl
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZHQoKSkgfHwgCisgICAgICAgICAgICAgICBtX25vZGUt
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoMSgpKSB8fCBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjpoMigpKSB8fAorICAgICAgICAgICAgICAgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6aDMoKSkgfHwgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDQoKSkgfHwKKyAgICAg
ICAgICAgICAgIG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omg1KCkpIHx8IG1fbm9kZS0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6Omg2KCkpIHx8CisgICAgICAgICAgICAgICBtX25vZGUtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjpocigpKSB8fCBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjpsaSgpKSB8fAorICAgICAgICAgICAgICAgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
b2woKSkgfHwgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6cCgpKSB8fAorICAgICAgICAg
ICAgICAgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6cHJlKCkpIHx8IG1fbm9kZS0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OnRyKCkpIHx8CisgICAgICAgICAgICAgICBtX25vZGUtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjp1bCgpKSkgeworICAgICAgICBpZiAobV9sYXN0Q2hhcmFjdGVyICE9
ICdcbicgJiYgbV9sYXN0VGV4dE5vZGUpIHsKKyAgICAgICAgICAgIGVtaXRDaGFyYWN0ZXIoJ1xu
JywgbV9sYXN0VGV4dE5vZGUtPnBhcmVudE5vZGUoKSwgbV9sYXN0VGV4dE5vZGUsIDAsIDEpOwog
ICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBJRF9URDoKLSAgICAgICAgY2FzZSBJRF9USDoKLSAg
ICAgICAgICAgIGlmIChtX2xhc3RDaGFyYWN0ZXIgIT0gJ1xuJyAmJiBtX2xhc3RUZXh0Tm9kZSkg
ewotICAgICAgICAgICAgICAgIGVtaXRDaGFyYWN0ZXIoJ1x0JywgbV9sYXN0VGV4dE5vZGUtPnBh
cmVudE5vZGUoKSwgbV9sYXN0VGV4dE5vZGUsIDAsIDEpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBJRF9CTE9DS1FVT1RFOgotICAgICAgICBjYXNl
IElEX0REOgotICAgICAgICBjYXNlIElEX0RJVjoKLSAgICAgICAgY2FzZSBJRF9ETDoKLSAgICAg
ICAgY2FzZSBJRF9EVDoKLSAgICAgICAgY2FzZSBJRF9IMToKLSAgICAgICAgY2FzZSBJRF9IMjoK
LSAgICAgICAgY2FzZSBJRF9IMzoKLSAgICAgICAgY2FzZSBJRF9INDoKLSAgICAgICAgY2FzZSBJ
RF9INToKLSAgICAgICAgY2FzZSBJRF9INjoKLSAgICAgICAgY2FzZSBJRF9IUjoKLSAgICAgICAg
Y2FzZSBJRF9MSToKLSAgICAgICAgY2FzZSBJRF9PTDoKLSAgICAgICAgY2FzZSBJRF9QOgotICAg
ICAgICBjYXNlIElEX1BSRToKLSAgICAgICAgY2FzZSBJRF9UUjoKLSAgICAgICAgY2FzZSBJRF9V
TDoKLSAgICAgICAgICAgIGlmIChtX2xhc3RDaGFyYWN0ZXIgIT0gJ1xuJyAmJiBtX2xhc3RUZXh0
Tm9kZSkgewotICAgICAgICAgICAgICAgIGVtaXRDaGFyYWN0ZXIoJ1xuJywgbV9sYXN0VGV4dE5v
ZGUtPnBhcmVudE5vZGUoKSwgbV9sYXN0VGV4dE5vZGUsIDAsIDEpOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgcmV0dXJuIHRydWU7CkBAIC0zODEsNDkg
KzM2NiwzNiBAQCB2b2lkIFRleHRJdGVyYXRvcjo6ZXhpdE5vZGUoKQogICAgIGJvb2wgZW5kTGlu
ZSA9IGZhbHNlOwogICAgIGJvb2wgYWRkTmV3bGluZSA9IGZhbHNlOwogCi0gICAgc3dpdGNoICht
X25vZGUtPmlkKCkpIHsKLSAgICAgICAgY2FzZSBJRF9CTE9DS1FVT1RFOgotICAgICAgICBjYXNl
IElEX0REOgotICAgICAgICBjYXNlIElEX0RJVjoKLSAgICAgICAgY2FzZSBJRF9ETDoKLSAgICAg
ICAgY2FzZSBJRF9EVDoKLSAgICAgICAgY2FzZSBJRF9IUjoKLSAgICAgICAgY2FzZSBJRF9MSToK
LSAgICAgICAgY2FzZSBJRF9PTDoKLSAgICAgICAgY2FzZSBJRF9QUkU6Ci0gICAgICAgIGNhc2Ug
SURfVFI6Ci0gICAgICAgIGNhc2UgSURfVUw6Ci0gICAgICAgICAgICBlbmRMaW5lID0gdHJ1ZTsK
LSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgSURfSDE6Ci0gICAgICAgIGNhc2Ug
SURfSDI6Ci0gICAgICAgIGNhc2UgSURfSDM6Ci0gICAgICAgIGNhc2UgSURfSDQ6Ci0gICAgICAg
IGNhc2UgSURfSDU6Ci0gICAgICAgIGNhc2UgSURfSDY6Ci0gICAgICAgIGNhc2UgSURfUDogewot
ICAgICAgICAgICAgZW5kTGluZSA9IHRydWU7Ci0KLSAgICAgICAgICAgIC8vIEluIGNlcnRhaW4g
Y2FzZXMsIGVtaXQgYSBuZXcgbmV3bGluZSBjaGFyYWN0ZXIgZm9yIHRoaXMgbm9kZQotICAgICAg
ICAgICAgLy8gcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHdlIGVtaXQgYW5vdGhlciBvbmUuCi0gICAg
ICAgICAgICAvLyBGSVhNRTogU29tZSBkYXkgd2UgY291bGQgZG8gdGhpcyBmb3Igb3RoZXIgdGFn
cy4KLSAgICAgICAgICAgIC8vIEhvd2V2ZXIsIGRvaW5nIGl0IGp1c3QgZm9yIHRoZSB0YWdzIGFi
b3ZlIG1ha2VzIGl0IG1vcmUgbGlrZWx5Ci0gICAgICAgICAgICAvLyB3ZSdsbCBlbmQgdXAgZ2V0
dGluZyB0aGUgcmlnaHQgcmVzdWx0IHdpdGhvdXQgbWFyZ2luIGNvbGxhcHNpbmcuCi0gICAgICAg
ICAgICAvLyBGb3IgZXhhbXBsZTogPGRpdj48cD50ZXh0PC9wPjwvZGl2PiB3aWxsIHdvcmsgcmln
aHQgZXZlbiBpZiBib3RoCi0gICAgICAgICAgICAvLyB0aGUgPGRpdj4gYW5kIHRoZSA8cD4gaGF2
ZSBib3R0b20gbWFyZ2lucy4KLSAgICAgICAgICAgIFJlbmRlck9iamVjdCAqcmVuZGVyZXIgPSBt
X25vZGUtPnJlbmRlcmVyKCk7Ci0gICAgICAgICAgICBpZiAocmVuZGVyZXIpIHsKLSAgICAgICAg
ICAgICAgICBSZW5kZXJTdHlsZSAqc3R5bGUgPSByZW5kZXJlci0+c3R5bGUoKTsKLSAgICAgICAg
ICAgICAgICBpZiAoc3R5bGUpIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IGJvdHRvbU1hcmdp
biA9IHJlbmRlcmVyLT5jb2xsYXBzZWRNYXJnaW5Cb3R0b20oKTsKLSAgICAgICAgICAgICAgICAg
ICAgaW50IGZvbnRTaXplID0gc3R5bGUtPmh0bWxGb250KCkuZ2V0Rm9udERlZigpLmNvbXB1dGVk
UGl4ZWxTaXplKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChib3R0b21NYXJnaW4gKiAyID49
IGZvbnRTaXplKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhZGROZXdsaW5lID0gdHJ1ZTsK
LSAgICAgICAgICAgICAgICAgICAgfQorICAgIGlmIChtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjpibG9ja3F1b3RlKCkpIHx8IG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmRkKCkp
IHx8CisgICAgICAgICAgICAgICBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpkaXYoKSkg
fHwKKyAgICAgICAgICAgICAgIG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmRsKCkpIHx8
IG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmR0KCkpIHx8IAorICAgICAgICAgICAgICAg
bV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aHIoKSkgfHwgbV9ub2RlLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6bGkoKSkgfHwKKyAgICAgICAgICAgICAgIG1fbm9kZS0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6Om9sKCkpIHx8CisgICAgICAgICAgICAgICBtX25vZGUtPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjpwcmUoKSkgfHwgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dHIoKSkgfHwK
KyAgICAgICAgICAgICAgIG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnVsKCkpKQorICAg
ICAgICBlbmRMaW5lID0gdHJ1ZTsKKyAgICBlbHNlIGlmIChtX25vZGUtPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjpoMSgpKSB8fCBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoMigpKSB8fAor
ICAgICAgICAgICAgIG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmgzKCkpIHx8IG1fbm9k
ZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omg0KCkpIHx8CisgICAgICAgICAgICAgbV9ub2RlLT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6aDUoKSkgfHwgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6aDYoKSkpIHsKKyAgICAgICAgZW5kTGluZSA9IHRydWU7CisKKyAgICAgICAgLy8gSW4gY2Vy
dGFpbiBjYXNlcywgZW1pdCBhIG5ldyBuZXdsaW5lIGNoYXJhY3RlciBmb3IgdGhpcyBub2RlCisg
ICAgICAgIC8vIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB3ZSBlbWl0IGFub3RoZXIgb25lLgorICAg
ICAgICAvLyBGSVhNRTogU29tZSBkYXkgd2UgY291bGQgZG8gdGhpcyBmb3Igb3RoZXIgdGFncy4K
KyAgICAgICAgLy8gSG93ZXZlciwgZG9pbmcgaXQganVzdCBmb3IgdGhlIHRhZ3MgYWJvdmUgbWFr
ZXMgaXQgbW9yZSBsaWtlbHkKKyAgICAgICAgLy8gd2UnbGwgZW5kIHVwIGdldHRpbmcgdGhlIHJp
Z2h0IHJlc3VsdCB3aXRob3V0IG1hcmdpbiBjb2xsYXBzaW5nLgorICAgICAgICAvLyBGb3IgZXhh
bXBsZTogPGRpdj48cD50ZXh0PC9wPjwvZGl2PiB3aWxsIHdvcmsgcmlnaHQgZXZlbiBpZiBib3Ro
CisgICAgICAgIC8vIHRoZSA8ZGl2PiBhbmQgdGhlIDxwPiBoYXZlIGJvdHRvbSBtYXJnaW5zLgor
ICAgICAgICBSZW5kZXJPYmplY3QgKnJlbmRlcmVyID0gbV9ub2RlLT5yZW5kZXJlcigpOworICAg
ICAgICBpZiAocmVuZGVyZXIpIHsKKyAgICAgICAgICAgIFJlbmRlclN0eWxlICpzdHlsZSA9IHJl
bmRlcmVyLT5zdHlsZSgpOworICAgICAgICAgICAgaWYgKHN0eWxlKSB7CisgICAgICAgICAgICAg
ICAgaW50IGJvdHRvbU1hcmdpbiA9IHJlbmRlcmVyLT5jb2xsYXBzZWRNYXJnaW5Cb3R0b20oKTsK
KyAgICAgICAgICAgICAgICBpbnQgZm9udFNpemUgPSBzdHlsZS0+aHRtbEZvbnQoKS5nZXRGb250
RGVmKCkuY29tcHV0ZWRQaXhlbFNpemUoKTsKKyAgICAgICAgICAgICAgICBpZiAoYm90dG9tTWFy
Z2luICogMiA+PSBmb250U2l6ZSkgeworICAgICAgICAgICAgICAgICAgICBhZGROZXdsaW5lID0g
dHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgIH0KIApAQCAtNjYwLDM0ICs2MzIsMjIgQEAgYm9vbCBTaW1wbGlm
aWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yOjpoYQogCiBib29sIFNpbXBsaWZpZWRCYWNrd2FyZHNU
ZXh0SXRlcmF0b3I6OmhhbmRsZU5vblRleHROb2RlKCkKIHsKLSAgICBzd2l0Y2ggKG1fbm9kZS0+
aWQoKSkgewotICAgICAgICBjYXNlIElEX0JSOgotICAgICAgICAgICAgZW1pdE5ld2xpbmVGb3JC
Uk9yVGV4dCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSURfVEQ6Ci0gICAg
ICAgIGNhc2UgSURfVEg6Ci0gICAgICAgIGNhc2UgSURfQkxPQ0tRVU9URToKLSAgICAgICAgY2Fz
ZSBJRF9ERDoKLSAgICAgICAgY2FzZSBJRF9ESVY6Ci0gICAgICAgIGNhc2UgSURfREw6Ci0gICAg
ICAgIGNhc2UgSURfRFQ6Ci0gICAgICAgIGNhc2UgSURfSDE6Ci0gICAgICAgIGNhc2UgSURfSDI6
Ci0gICAgICAgIGNhc2UgSURfSDM6Ci0gICAgICAgIGNhc2UgSURfSDQ6Ci0gICAgICAgIGNhc2Ug
SURfSDU6Ci0gICAgICAgIGNhc2UgSURfSDY6Ci0gICAgICAgIGNhc2UgSURfSFI6Ci0gICAgICAg
IGNhc2UgSURfUDoKLSAgICAgICAgY2FzZSBJRF9QUkU6Ci0gICAgICAgIGNhc2UgSURfVFI6Ci0g
ICAgICAgIGNhc2UgSURfT0w6Ci0gICAgICAgIGNhc2UgSURfVUw6Ci0gICAgICAgIGNhc2UgSURf
TEk6Ci0gICAgICAgICAgICAvLyBFbWl0IGEgc3BhY2UgdG8gImJyZWFrIHVwIiBjb250ZW50LiBB
bnkgd29yZCBicmVhawotICAgICAgICAgICAgLy8gY2hhcmFjdGVyIHdpbGwgZG8uCi0gICAgICAg
ICAgICBlbWl0Q2hhcmFjdGVyKCcgJywgbV9ub2RlLCAwLCAwKTsKLSAgICAgICAgICAgIGJyZWFr
OworICAgIGlmIChtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpicigpKSkKKyAgICAgICAg
ZW1pdE5ld2xpbmVGb3JCUk9yVGV4dCgpOworICAgIGVsc2UgaWYgKG1fbm9kZS0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OnRkICgpKSB8fCBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0aCgp
KSB8fAorICAgICAgICAgICAgIG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJsb2NrcXVv
dGUoKSkgfHwgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZGQoKSkgfHwKKyAgICAgICAg
ICAgICBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpkaXYoKSkgfHwKKyAgICAgICAgICAg
ICBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpkbCgpKSB8fCBtX25vZGUtPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjpkdCgpKSB8fCAKKyAgICAgICAgICAgICBtX25vZGUtPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjpoMSgpKSB8fCBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoMigpKSB8
fAorICAgICAgICAgICAgIG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmgzKCkpIHx8IG1f
bm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omg0KCkpIHx8CisgICAgICAgICAgICAgbV9ub2Rl
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDUoKSkgfHwgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6aDYoKSkgfHwKKyAgICAgICAgICAgICBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjpocigpKSB8fCBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpsaSgpKSB8fAorICAgICAg
ICAgICAgIG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9sKCkpIHx8IG1fbm9kZS0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OnAoKSkgfHwKKyAgICAgICAgICAgICBtX25vZGUtPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjpwcmUoKSkgfHwgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dHIo
KSkgfHwKKyAgICAgICAgICAgICBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp1bCgpKSkg
eworICAgICAgICAvLyBFbWl0IGEgc3BhY2UgdG8gImJyZWFrIHVwIiBjb250ZW50LiBBbnkgd29y
ZCBicmVhaworICAgICAgICAvLyBjaGFyYWN0ZXIgd2lsbCBkby4KKyAgICAgICAgZW1pdENoYXJh
Y3RlcignICcsIG1fbm9kZSwgMCwgMCk7CiAgICAgfQogCiAgICAgcmV0dXJuIHRydWU7CkluZGV4
OiBraHRtbC9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9XZWJDb3JlL2todG1sL2VkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuMzQKZGlmZiAtdSAtcCAtcjEuMzQga2h0bWwvZWRpdGluZy92aXNpYmxl
X3VuaXRzLmNwcAotLS0ga2h0bWwvZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcAkyNiBNYXkgMjAw
NSAyMDozMDoxMiAtMDAwMAkxLjM0CisrKyBraHRtbC9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3Bw
CTIwIEp1biAyMDA1IDIwOjU1OjMxIC0wMDAwCkBAIC0yNyw3ICsyNyw3IEBACiAKICNpbmNsdWRl
IDxxc3RyaW5nLmg+CiAKLSNpbmNsdWRlICJodG1sdGFncy5oIgorI2luY2x1ZGUgImh0bWxuYW1l
cy5oIgogI2luY2x1ZGUgIm1pc2MvaGVscGVyLmgiCiAjaW5jbHVkZSAicmVuZGVyaW5nL3JlbmRl
cl90ZXh0LmgiCiAjaW5jbHVkZSAicmVuZGVyaW5nL3JlbmRlcl9ibG9jay5oIgpAQCAtNDEsNiAr
NDEsNyBAQCB1c2luZyBET006OkVsZW1lbnRJbXBsOwogdXNpbmcgRE9NOjpOb2RlSW1wbDsKIHVz
aW5nIERPTTo6UG9zaXRpb247CiB1c2luZyBET006OlJhbmdlSW1wbDsKK3VzaW5nIERPTTo6SFRN
TE5hbWVzOwogCiBuYW1lc3BhY2Uga2h0bWwgewogCkBAIC0zMzIsNyArMzMzLDcgQEAgVmlzaWJs
ZVBvc2l0aW9uIGVuZE9mTGluZShjb25zdCBWaXNpYmxlUAogICAgICAgICByZXR1cm4gVmlzaWJs
ZVBvc2l0aW9uKCk7CiAKICAgICBsb25nIGVuZE9mZnNldCA9IDE7Ci0gICAgaWYgKGVuZE5vZGUt
PmlkKCkgPT0gSURfQlIpIHsKKyAgICBpZiAoZW5kTm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
OmJyKCkpKSB7CiAgICAgICAgIGVuZE9mZnNldCA9IDA7CiAgICAgfSBlbHNlIGlmIChlbmRCb3gt
PmlzSW5saW5lVGV4dEJveCgpKSB7CiAgICAgICAgIElubGluZVRleHRCb3ggKmVuZFRleHRCb3gg
PSBzdGF0aWNfY2FzdDxJbmxpbmVUZXh0Qm94ICo+KGVuZEJveCk7CkluZGV4OiBraHRtbC9odG1s
L2R0ZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRt
bC9kdGQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjM4CmRpZmYgLXUgLXAgLXIxLjM4IGto
dG1sL2h0bWwvZHRkLmNwcAotLS0ga2h0bWwvaHRtbC9kdGQuY3BwCTEyIEFwciAyMDA1IDIyOjQ5
OjQxIC0wMDAwCTEuMzgKKysrIGtodG1sL2h0bWwvZHRkLmNwcAkyMCBKdW4gMjAwNSAyMDo1NToz
MiAtMDAwMApAQCAtNDQsNiArNDQsNyBAQCB1c2luZyBuYW1lc3BhY2UgRE9NOwogLy8gOCB0YWJs
ZQogLy8gOSBib2R5IGZyYW1lc2V0CiAvLyAxMCBodG1sCisvKgogY29uc3QgdW5zaWduZWQgc2hv
cnQgRE9NOjp0YWdQcmlvcml0eUFycmF5W10gPSB7CiAgICAgMCwgLy8gMAogICAgIDEsIC8vIElE
X0EgPT0gMQpAQCAtNTcsOCArNTgsNiBAQCBjb25zdCB1bnNpZ25lZCBzaG9ydCBET006OnRhZ1By
aW9yaXR5QXJyCiAgICAgMCwgLy8gSURfQkFTRUZPTlQKICAgICAxLCAvLyBJRF9CRE8KICAgICAx
LCAvLyBJRF9CSUcKLSAgICA1LCAvLyBJRF9CTE9DS1FVT1RFCi0gICAxMCwgLy8gSURfQk9EWQog
ICAgIDAsIC8vIElEX0JSCiAgICAgMSwgLy8gSURfQlVUVE9OCiAgICAgMCwgLy8gSURfQ0FOVkFT
CkBAIC03Miw3ICs3MSw2IEBAIGNvbnN0IHVuc2lnbmVkIHNob3J0IERPTTo6dGFnUHJpb3JpdHlB
cnIKICAgICAxLCAvLyBJRF9ERUwKICAgICAxLCAvLyBJRF9ERk4KICAgICA1LCAvLyBJRF9ESVIK
LSAgICA1LCAvLyBJRF9ESVYKICAgICA1LCAvLyBJRF9ETAogICAgIDMsIC8vIElEX0RUCiAgICAg
MSwgLy8gSURfRU0KQEAgLTgwLDE5ICs3OCw3IEBAIGNvbnN0IHVuc2lnbmVkIHNob3J0IERPTTo6
dGFnUHJpb3JpdHlBcnIKICAgICAzLCAvLyBJRF9GSUVMRFNFVAogICAgIDEsIC8vIElEX0ZPTlQK
ICAgICAzLCAvLyBJRF9GT1JNCi0gICAgMCwgLy8gSURfRlJBTUUKLSAgIDEwLC8vIElEX0ZSQU1F
U0VUCi0gICAgNSwgLy8gSURfSDEKLSAgICA1LCAvLyBJRF9IMgotICAgIDUsIC8vIElEX0gzCi0g
ICAgNSwgLy8gSURfSDQKLSAgICA1LCAvLyBJRF9INQotICAgIDUsIC8vIElEX0g2Ci0gICAxMCwv
LyBJRF9IRUFECi0gICAgMCwgLy8gSURfSFIKLSAgIDExLC8vIElEX0hUTUwKICAgICAxLCAvLyBJ
RF9JCi0gICAgMSwgLy8gSURfSUZSQU1FCiAgICAgMCwgLy8gSURfSU1HCiAgICAgMCwgLy8gSURf
SU5QVVQKICAgICAxLCAvLyBJRF9JTlMKQEAgLTExNyw3ICsxMDMsNiBAQCBjb25zdCB1bnNpZ25l
ZCBzaG9ydCBET006OnRhZ1ByaW9yaXR5QXJyCiAgICAgNSwgLy8gSURfT0wKICAgICAxLCAvLyBJ
RF9PUFRHUk9VUAogICAgIDIsIC8vIElEX09QVElPTgotICAgIDMsIC8vIElEX1AKICAgICAwLCAv
LyBJRF9QQVJBTQogICAgIDUsIC8vIElEX1BMQUlOVEVYVAogICAgIDUsIC8vIElEX1BSRQpAQCAt
MTI3LDcgKzExMiw2IEBAIGNvbnN0IHVuc2lnbmVkIHNob3J0IERPTTo6dGFnUHJpb3JpdHlBcnIK
ICAgICAxLCAvLyBJRF9TQ1JJUFQKICAgICA2LCAvLyBJRF9TRUxFQ1QKICAgICAxLCAvLyBJRF9T
TUFMTAotICAgIDEsIC8vIElEX1NQQU4KICAgICAxLCAvLyBJRF9TVFJJS0UKICAgICAxLCAvLyBJ
RF9TVFJPTkcKICAgICAxLCAvLyBJRF9TVFlMRQpAQCAtMTY0LDggKzE0OCw2IEBAIGNvbnN0IHRh
Z1N0YXR1cyBET006OmVuZFRhZ0FycmF5W10gPSB7CiAgICAgRk9SQklEREVOLCAvLyBJRF9CQVNF
Rk9OVAogICAgIFJFUVVJUkVELCAgLy8gSURfQkRPCiAgICAgUkVRVUlSRUQsICAvLyBJRF9CSUcK
LSAgICBSRVFVSVJFRCwgIC8vIElEX0JMT0NLUVVPVEUKLSAgICBSRVFVSVJFRCwgIC8vIElEX0JP
RFkKICAgICBGT1JCSURERU4sIC8vIElEX0JSCiAgICAgUkVRVUlSRUQsICAvLyBJRF9CVVRUT04K
ICAgICBGT1JCSURERU4sIC8vIElEX0NBTlZBUwpAQCAtMTc5LDcgKzE2MSw2IEBAIGNvbnN0IHRh
Z1N0YXR1cyBET006OmVuZFRhZ0FycmF5W10gPSB7CiAgICAgUkVRVUlSRUQsICAvLyBJRF9ERUwK
ICAgICBSRVFVSVJFRCwgIC8vIElEX0RGTgogICAgIFJFUVVJUkVELCAgLy8gSURfRElSCi0gICAg
UkVRVUlSRUQsICAvLyBJRF9ESVYKICAgICBSRVFVSVJFRCwgIC8vIElEX0RMCiAgICAgT1BUSU9O
QUwsICAvLyBJRF9EVAogICAgIFJFUVVJUkVELCAgLy8gSURfRU0KQEAgLTE4NywxOSArMTY4LDgg
QEAgY29uc3QgdGFnU3RhdHVzIERPTTo6ZW5kVGFnQXJyYXlbXSA9IHsKICAgICBSRVFVSVJFRCwg
IC8vIElEX0ZJRUxEU0VUCiAgICAgUkVRVUlSRUQsICAvLyBJRF9GT05UCiAgICAgUkVRVUlSRUQs
ICAvLyBJRF9GT1JNCi0gICAgRk9SQklEREVOLCAvLyBJRF9GUkFNRQogICAgIFJFUVVJUkVELCAg
Ly8gSURfRlJBTUVTRVQKLSAgICBSRVFVSVJFRCwgIC8vIElEX0gxCi0gICAgUkVRVUlSRUQsICAv
LyBJRF9IMgotICAgIFJFUVVJUkVELCAgLy8gSURfSDMKLSAgICBSRVFVSVJFRCwgIC8vIElEX0g0
Ci0gICAgUkVRVUlSRUQsICAvLyBJRF9INQotICAgIFJFUVVJUkVELCAgLy8gSURfSDYKLSAgICBP
UFRJT05BTCwgIC8vIElEX0hFQUQKLSAgICBGT1JCSURERU4sIC8vIElEX0hSCi0gICAgUkVRVUlS
RUQsICAvLyBJRF9IVE1MCi0gICAgUkVRVUlSRUQsICAvLyBJRF9JCi0gICAgUkVRVUlSRUQsICAv
LyBJRF9JRlJBTUUKKyAgICAgIFJFUVVJUkVELCAgLy8gSURfSQogICAgIEZPUkJJRERFTiwgLy8g
SURfSU1HCiAgICAgRk9SQklEREVOLCAvLyBJRF9JTlBVVAogICAgIFJFUVVJUkVELCAgLy8gSURf
SU5TCkBAIC0yMjQsNyArMTk0LDYgQEAgY29uc3QgdGFnU3RhdHVzIERPTTo6ZW5kVGFnQXJyYXlb
XSA9IHsKICAgICBSRVFVSVJFRCwgIC8vIElEX09MCiAgICAgUkVRVUlSRUQsICAvLyBJRF9PUFRH
Uk9VUAogICAgIE9QVElPTkFMLCAgLy8gSURfT1BUSU9OCi0gICAgT1BUSU9OQUwsICAvLyBJRF9Q
CiAgICAgRk9SQklEREVOLCAvLyBJRF9QQVJBTQogICAgIFJFUVVJUkVELCAgLy8gSURfUExBSU5U
RVhUCiAgICAgUkVRVUlSRUQsICAvLyBJRF9QUkUKQEAgLTIzNCw3ICsyMDMsNiBAQCBjb25zdCB0
YWdTdGF0dXMgRE9NOjplbmRUYWdBcnJheVtdID0gewogICAgIFJFUVVJUkVELCAgLy8gSURfU0NS
SVBUCiAgICAgUkVRVUlSRUQsICAvLyBJRF9TRUxFQ1QKICAgICBSRVFVSVJFRCwgIC8vIElEX1NN
QUxMCi0gICAgUkVRVUlSRUQsICAvLyBJRF9TUEFOCiAgICAgUkVRVUlSRUQsICAvLyBJRF9TVFJJ
S0UKICAgICBSRVFVSVJFRCwgIC8vIElEX1NUUk9ORwogICAgIFJFUVVJUkVELCAgLy8gSURfU1RZ
TEUKQEAgLTI1OCw2ICsyMjYsNyBAQCBjb25zdCB0YWdTdGF0dXMgRE9NOjplbmRUYWdBcnJheVtd
ID0gewogICAgIFJFUVVJUkVEICAgLy8gSURfVEVYVAogfTsKIAorKi8KIAogc3RhdGljIGNvbnN0
IHVzaG9ydCB0YWdfbGlzdF8wW10gPSB7CiAgICAgSURfVEVYVCwKQEAgLTc2NywyMjMgKzczNiwz
IEBAIGJvb2wgRE9NOjpjaGVja0NoaWxkKHVzaG9ydCB0YWdJRCwgdXNob3IKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KIH0KLQotdm9pZCBET006OmFkZEZvcmJpZGRlbihpbnQgdGFnSWQs
IHVzaG9ydCAqZm9yYmlkZGVuVGFncykKLXsKLSAgICBzd2l0Y2godGFnSWQpCi0gICAgewotICAg
IGNhc2UgSURfTEFCRUw6Ci0gICAgICAgIGZvcmJpZGRlblRhZ3NbSURfTEFCRUxdKys7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgSURfQlVUVE9OOgotICAgICAgICBmb3JiaWRkZW5UYWdzW0lE
X0FdKys7Ci0gICAgICAgIGZvcmJpZGRlblRhZ3NbSURfSU5QVVRdKys7Ci0gICAgICAgIGZvcmJp
ZGRlblRhZ3NbSURfU0VMRUNUXSsrOwotICAgICAgICBmb3JiaWRkZW5UYWdzW0lEX1RFWFRBUkVB
XSsrOwotICAgICAgICBmb3JiaWRkZW5UYWdzW0lEX0xBQkVMXSsrOwotICAgICAgICBmb3JiaWRk
ZW5UYWdzW0lEX0JVVFRPTl0rKzsKLSAgICAgICAgZm9yYmlkZGVuVGFnc1tJRF9GT1JNXSsrOwot
ICAgICAgICBmb3JiaWRkZW5UYWdzW0lEX0lTSU5ERVhdKys7Ci0gICAgICAgIGZvcmJpZGRlblRh
Z3NbSURfRklFTERTRVRdKys7Ci0gICAgICAgIGZvcmJpZGRlblRhZ3NbSURfSUZSQU1FXSsrOwot
ICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0K
LXZvaWQgRE9NOjpyZW1vdmVGb3JiaWRkZW4oaW50IHRhZ0lkLCB1c2hvcnQgKmZvcmJpZGRlblRh
Z3MpCi17Ci0gICAgc3dpdGNoKHRhZ0lkKQotICAgIHsKLSAgICBjYXNlIElEX0xBQkVMOgotICAg
ICAgICBmb3JiaWRkZW5UYWdzW0lEX0xBQkVMXS0tOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IElEX0JVVFRPTjoKLSAgICAgICAgZm9yYmlkZGVuVGFnc1tJRF9BXS0tOwotICAgICAgICBmb3Ji
aWRkZW5UYWdzW0lEX0lOUFVUXS0tOwotICAgICAgICBmb3JiaWRkZW5UYWdzW0lEX1NFTEVDVF0t
LTsKLSAgICAgICAgZm9yYmlkZGVuVGFnc1tJRF9URVhUQVJFQV0tLTsKLSAgICAgICAgZm9yYmlk
ZGVuVGFnc1tJRF9MQUJFTF0tLTsKLSAgICAgICAgZm9yYmlkZGVuVGFnc1tJRF9CVVRUT05dLS07
Ci0gICAgICAgIGZvcmJpZGRlblRhZ3NbSURfRk9STV0tLTsKLSAgICAgICAgZm9yYmlkZGVuVGFn
c1tJRF9JU0lOREVYXS0tOwotICAgICAgICBmb3JiaWRkZW5UYWdzW0lEX0ZJRUxEU0VUXS0tOwot
ICAgICAgICBmb3JiaWRkZW5UYWdzW0lEX0lGUkFNRV0tLTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
ZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi0KLSNpZiAwCi0KLQotc3RydWN0
IGF0dHJfcHJpdiB7Ci0gICAgYXR0cl9wcml2KCkgeyBpZCA9IGxlbiA9IDAsIHZhbCA9IDA7IH0K
LSAgICBhdHRyX3ByaXYodXNob3J0IGksIGNvbnN0IFFDaGFyICp2LCB1c2hvcnQgbCkKLSAgICB7
IGlkID1pOyBsZW4gPSBsLCB2YWwgPSB2OyB9Ci0gICAgdXNob3J0IGlkOwotICAgIGNvbnN0IFFD
aGFyICp2YWw7Ci0gICAgdXNob3J0IGxlbjsKLX07Ci0KLURPTVN0cmluZyBmaW5kX2F0dHIodXNo
b3J0IGlkLCBjb25zdCBhdHRyX3ByaXYgKmF0dHJzKQotewotICAgIGludCBpID0gMDsKLSAgICB3
aGlsZShhdHRyc1tpXS5pZCAhPSAwKQotICAgIHsKLSAgICAgICAgaWYoYXR0cnNbaV0uaWQgPT0g
aWQpCi0gICAgICAgICAgICByZXR1cm4gRE9NU3RyaW5nKGF0dHJzW2ldLnZhbCwgYXR0cnNbaV0u
bGVuKTsKLSAgICAgICAgaSsrOwotICAgIH0KLSAgICByZXR1cm4gRE9NU3RyaW5nKCk7Ci19Ci0K
LXN0YXRpYyBjb25zdCBRQ2hhciB2YWx1ZV8xXzAgW10gPSB7ICdOJywnTycsJ04nLCdFJyB9Owot
Ci1hdHRyX3ByaXYgYXR0cl9saXN0XzFbXSA9IHsKLSAgICBhdHRyX3ByaXYoQVRUUl9DTEVBUiwg
dmFsdWVfMV8wLCA0KQotfTsKLQotc3RhdGljIGNvbnN0IFFDaGFyIHZhbHVlXzJfMCBbXSA9IHsg
J1InLCdFJywnQycsJ1QnIH07Ci0KLWF0dHJfcHJpdiBhdHRyX2xpc3RfMltdID0gewotICAgIGF0
dHJfcHJpdihBVFRSX1NIQVBFLCB2YWx1ZV8yXzAsIDQpCi19OwotCi1zdGF0aWMgY29uc3QgUUNo
YXIgdmFsdWVfM18wIFtdID0geyAnUicsJ0UnLCdDJywnVCcgfTsKLQotYXR0cl9wcml2IGF0dHJf
bGlzdF8zW10gPSB7Ci0gICAgYXR0cl9wcml2KEFUVFJfU0hBUEUsIHZhbHVlXzNfMCwgNCkKLX07
Ci0KLXN0YXRpYyBjb25zdCBRQ2hhciB2YWx1ZV80XzAgW10gPSB7ICdEJywnQScsJ1QnLCdBJyB9
OwotCi1hdHRyX3ByaXYgYXR0cl9saXN0XzRbXSA9IHsKLSAgICBhdHRyX3ByaXYoQVRUUl9WQUxV
RVRZUEUsIHZhbHVlXzRfMCwgNCkKLX07Ci0KLXN0YXRpYyBjb25zdCBRQ2hhciB2YWx1ZV81XzAg
W10gPSB7ICdHJywnRScsJ1QnIH07Ci1zdGF0aWMgY29uc3QgUUNoYXIgdmFsdWVfNV8xIFtdID0g
eyAnQScsJ1AnLCdQJywnTCcsJ0knLCdDJywnQScsJ1QnLCdJJywnTycsJ04nLCcvJywnWCcsJy0n
LCdXJywnVycsJ1cnLCctJywnRicsJ08nLCdSJywnTScsJy0nLCdVJywnUicsJ0wnLCdFJywnTics
J0MnLCdPJywnRCcsJ0UnLCdEJyB9OwotCi1hdHRyX3ByaXYgYXR0cl9saXN0XzVbXSA9IHsKLSAg
ICBhdHRyX3ByaXYoQVRUUl9NRVRIT0QsIHZhbHVlXzVfMCwgMyksCi0gICAgYXR0cl9wcml2KEFU
VFJfRU5DVFlQRSwgdmFsdWVfNV8xLCAzMykKLX07Ci0KLXN0YXRpYyBjb25zdCBRQ2hhciB2YWx1
ZV82XzAgW10gPSB7ICdUJywnRScsJ1gnLCdUJyB9OwotCi1hdHRyX3ByaXYgYXR0cl9saXN0XzZb
XSA9IHsKLSAgICBhdHRyX3ByaXYoQVRUUl9UWVBFLCB2YWx1ZV82XzAsIDQpCi19OwotCi1zdGF0
aWMgY29uc3QgUUNoYXIgdmFsdWVfN18wIFtdID0geyAnUycsJ1UnLCdCJywnTScsJ0knLCdUJyB9
OwotCi1hdHRyX3ByaXYgYXR0cl9saXN0XzdbXSA9IHsKLSAgICBhdHRyX3ByaXYoQVRUUl9UWVBF
LCB2YWx1ZV83XzAsIDYpCi19OwotCi1zdGF0aWMgY29uc3QgUUNoYXIgdmFsdWVfOF8wIFtdID0g
eyAnMScgfTsKLQotYXR0cl9wcml2IGF0dHJfbGlzdF84W10gPSB7Ci0gICAgYXR0cl9wcml2KEFU
VFJfU1BBTiwgdmFsdWVfOF8wLCAxKQotfTsKLQotc3RhdGljIGNvbnN0IFFDaGFyIHZhbHVlXzlf
MCBbXSA9IHsgJzEnIH07Ci0KLWF0dHJfcHJpdiBhdHRyX2xpc3RfOVtdID0gewotICAgIGF0dHJf
cHJpdihBVFRSX1NQQU4sIHZhbHVlXzlfMCwgMSkKLX07Ci0KLXN0YXRpYyBjb25zdCBRQ2hhciB2
YWx1ZV8xMF8wIFtdID0geyAnMScgfTsKLXN0YXRpYyBjb25zdCBRQ2hhciB2YWx1ZV8xMF8xIFtd
ID0geyAnMScgfTsKLQotYXR0cl9wcml2IGF0dHJfbGlzdF8xMFtdID0gewotICAgIGF0dHJfcHJp
dihBVFRSX1JPV1NQQU4sIHZhbHVlXzEwXzAsIDEpLAotICAgIGF0dHJfcHJpdihBVFRSX0NPTFNQ
QU4sIHZhbHVlXzEwXzEsIDEpCi19OwotCi1zdGF0aWMgY29uc3QgUUNoYXIgdmFsdWVfMTFfMCBb
XSA9IHsgJzEnIH07Ci1zdGF0aWMgY29uc3QgUUNoYXIgdmFsdWVfMTFfMSBbXSA9IHsgJ0EnLCdV
JywnVCcsJ08nIH07Ci0KLWF0dHJfcHJpdiBhdHRyX2xpc3RfMTFbXSA9IHsKLSAgICBhdHRyX3By
aXYoQVRUUl9GUkFNRUJPUkRFUiwgdmFsdWVfMTFfMCwgMSksCi0gICAgYXR0cl9wcml2KEFUVFJf
U0NST0xMSU5HLCB2YWx1ZV8xMV8xLCA0KQotfTsKLQotc3RhdGljIGNvbnN0IFFDaGFyIHZhbHVl
XzEyXzAgW10gPSB7ICcxJyB9Owotc3RhdGljIGNvbnN0IFFDaGFyIHZhbHVlXzEyXzEgW10gPSB7
ICdBJywnVScsJ1QnLCdPJyB9OwotCi1hdHRyX3ByaXYgYXR0cl9saXN0XzEyW10gPSB7Ci0gICAg
YXR0cl9wcml2KEFUVFJfRlJBTUVCT1JERVIsIHZhbHVlXzEyXzAsIDEpLAotICAgIGF0dHJfcHJp
dihBVFRSX1NDUk9MTElORywgdmFsdWVfMTJfMSwgNCkKLX07Ci0KLXN0YXRpYyBjb25zdCBRQ2hh
ciB2YWx1ZV8xM18wIFtdID0geyAnLScsJy8nLCcvJywnVycsJzMnLCdDJywnLycsJy8nLCdEJywn
VCcsJ0QnIH07Ci1zdGF0aWMgY29uc3QgUUNoYXIgdmFsdWVfMTNfMSBbXSA9IHsgJ1QnLCdSJywn
QScsJ04nLCdTJywnSScsJ1QnLCdJJywnTycsJ04nLCdBJywnTCcsJy8nLCcvJywnRScsJ04nIH07
Ci0KLWF0dHJfcHJpdiBhdHRyX2xpc3RfMTNbXSA9IHsKLSAgICBhdHRyX3ByaXYoQVRUUl9WRVJT
SU9OLCB2YWx1ZV8xM18wLCAxMSksCi0gICAgYXR0cl9wcml2KEFUVFJfSFRNTCwgdmFsdWVfMTNf
MSwgMTYpCi19OwotCi1ET01TdHJpbmcgRE9NOjpmaW5kRGVmQXR0ck5vbmUodXNob3J0KQotewot
ICAgIHJldHVybiBET01TdHJpbmcoKTsKLX07Ci1ET01TdHJpbmcgRE9NOjpmaW5kRGVmQXR0ckJS
KHVzaG9ydCBpZCkKLXsKLSAgICByZXR1cm4gZmluZF9hdHRyKGlkLCBhdHRyX2xpc3RfMSk7Ci19
Ci1ET01TdHJpbmcgRE9NOjpmaW5kRGVmQXR0ckEodXNob3J0IGlkKQotewotICAgIHJldHVybiBm
aW5kX2F0dHIoaWQsIGF0dHJfbGlzdF8yKTsKLX0KLURPTVN0cmluZyBET006OmZpbmREZWZBdHRy
QVJFQSh1c2hvcnQgaWQpCi17Ci0gICAgcmV0dXJuIGZpbmRfYXR0cihpZCwgYXR0cl9saXN0XzMp
OwotfQotRE9NU3RyaW5nIERPTTo6ZmluZERlZkF0dHJQQVJBTSh1c2hvcnQgaWQpCi17Ci0gICAg
cmV0dXJuIGZpbmRfYXR0cihpZCwgYXR0cl9saXN0XzQpOwotfQotRE9NU3RyaW5nIERPTTo6Zmlu
ZERlZkF0dHJGT1JNKHVzaG9ydCBpZCkKLXsKLSAgICByZXR1cm4gZmluZF9hdHRyKGlkLCBhdHRy
X2xpc3RfNSk7Ci19Ci1ET01TdHJpbmcgRE9NOjpmaW5kRGVmQXR0cklOUFVUKHVzaG9ydCBpZCkK
LXsKLSAgICByZXR1cm4gZmluZF9hdHRyKGlkLCBhdHRyX2xpc3RfNik7Ci19Ci1ET01TdHJpbmcg
RE9NOjpmaW5kRGVmQXR0ckJVVFRPTih1c2hvcnQgaWQpCi17Ci0gICAgcmV0dXJuIGZpbmRfYXR0
cihpZCwgYXR0cl9saXN0XzcpOwotfQotRE9NU3RyaW5nIERPTTo6ZmluZERlZkF0dHJDT0xHUk9V
UCh1c2hvcnQgaWQpCi17Ci0gICAgcmV0dXJuIGZpbmRfYXR0cihpZCwgYXR0cl9saXN0XzgpOwot
fQotRE9NU3RyaW5nIERPTTo6ZmluZERlZkF0dHJDT0wodXNob3J0IGlkKQotewotICAgIHJldHVy
biBmaW5kX2F0dHIoaWQsIGF0dHJfbGlzdF85KTsKLX0KLURPTVN0cmluZyBET006OmZpbmREZWZB
dHRyVEgodXNob3J0IGlkKQotewotICAgIHJldHVybiBmaW5kX2F0dHIoaWQsIGF0dHJfbGlzdF8x
MCk7Ci19Ci1ET01TdHJpbmcgRE9NOjpmaW5kRGVmQXR0ckZSQU1FKHVzaG9ydCBpZCkKLXsKLSAg
ICByZXR1cm4gZmluZF9hdHRyKGlkLCBhdHRyX2xpc3RfMTEpOwotfQotRE9NU3RyaW5nIERPTTo6
ZmluZERlZkF0dHJJRlJBTUUodXNob3J0IGlkKQotewotICAgIHJldHVybiBmaW5kX2F0dHIoaWQs
IGF0dHJfbGlzdF8xMik7Ci19Ci1ET01TdHJpbmcgRE9NOjpmaW5kRGVmQXR0ckhUTUwodXNob3J0
IGlkKQotewotICAgIHJldHVybiBmaW5kX2F0dHIoaWQsIGF0dHJfbGlzdF8xMyk7Ci19Ci0KLSNl
bmRpZgpJbmRleDoga2h0bWwvaHRtbC9kdGQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvV2ViQ29yZS9raHRtbC9odG1sL2R0ZC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjUKZGlm
ZiAtdSAtcCAtcjEuNSBraHRtbC9odG1sL2R0ZC5oCi0tLSBraHRtbC9odG1sL2R0ZC5oCTEyIEFw
ciAyMDA1IDIyOjQ5OjQxIC0wMDAwCTEuNQorKysga2h0bWwvaHRtbC9kdGQuaAkyMCBKdW4gMjAw
NSAyMDo1NTozMiAtMDAwMApAQCAtMjMsMzYgKzIzLDExIEBACiAjZGVmaW5lIF9ET01fZHRkX2hf
CiAKICNpbmNsdWRlICJkb20vZG9tX3N0cmluZy5oIgotI2luY2x1ZGUgIm1pc2MvaHRtbHRhZ3Mu
aCIKIAogbmFtZXNwYWNlIERPTQogewogCi12b2lkIGFkZEZvcmJpZGRlbihpbnQgdGFnSWQsIHVz
aG9ydCAqZm9yYmlkZGVuVGFncyk7Ci12b2lkIHJlbW92ZUZvcmJpZGRlbihpbnQgdGFnSWQsIHVz
aG9ydCAqZm9yYmlkZGVuVGFncyk7Ci0KLWVudW0gdGFnU3RhdHVzIHsgT1BUSU9OQUwsIFJFUVVJ
UkVELCBGT1JCSURERU4gfTsKLQogYm9vbCBjaGVja0NoaWxkKHVzaG9ydCB0YWdJRCwgdXNob3J0
IGNoaWxkSUQsIGJvb2wgc3RyaWN0KTsKIAotZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIHNob3J0IHRh
Z1ByaW9yaXR5QXJyYXlbXTsKLWV4dGVybiBjb25zdCB0YWdTdGF0dXMgZW5kVGFnQXJyYXlbXTsK
LQotaW5saW5lIHVuc2lnbmVkIHNob3J0IHRhZ1ByaW9yaXR5KFFfVUlOVDMyIHRhZ0lkKQotewot
ICAgIC8vIFRyZWF0IGN1c3RvbSBlbGVtZW50cyB0aGUgc2FtZSBhcyA8c3Bhbj47IGFsc28gZG9u
J3QgcmVhZCBwYXN0IHRoZSBlbmQgb2YgdGhlIGFycmF5LgotICAgIGlmICh0YWdJZCA+IElEX0xB
U1RfVEFHKQotICAgICAgICByZXR1cm4gdGFnUHJpb3JpdHlBcnJheVtJRF9TUEFOXTsKLSAgICBy
ZXR1cm4gdGFnUHJpb3JpdHlBcnJheVt0YWdJZF07Ci19Ci0KLWlubGluZSB0YWdTdGF0dXMgZW5k
VGFnUmVxdWlyZW1lbnQoUV9VSU5UMzIgdGFnSWQpCi17Ci0gICAgLy8gVHJlYXQgY3VzdG9tIGVs
ZW1lbnRzIHRoZSBzYW1lIGFzIDxzcGFuPjsgYWxzbyBkb24ndCByZWFkIHBhc3QgdGhlIGVuZCBv
ZiB0aGUgYXJyYXkuCi0gICAgaWYgKHRhZ0lkID4gSURfTEFTVF9UQUcpCi0gICAgICAgIHJldHVy
biBlbmRUYWdBcnJheVtJRF9TUEFOXTsKLSAgICByZXR1cm4gZW5kVGFnQXJyYXlbdGFnSWRdOwot
fQotCiB9IC8vbmFtZXNwYWNlIERPTQogI2VuZGlmCkluZGV4OiBraHRtbC9odG1sL2h0bWxfYmFz
ZWltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0
bWwvaHRtbF9iYXNlaW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNzIKZGlmZiAtdSAt
cCAtcjEuNzIga2h0bWwvaHRtbC9odG1sX2Jhc2VpbXBsLmNwcAotLS0ga2h0bWwvaHRtbC9odG1s
X2Jhc2VpbXBsLmNwcAkxMiBNYXkgMjAwNSAxNzoxMToyMSAtMDAwMAkxLjcyCisrKyBraHRtbC9o
dG1sL2h0bWxfYmFzZWltcGwuY3BwCTIwIEp1biAyMDA1IDIwOjU1OjMyIC0wMDAwCkBAIC00OCw3
ICs0OCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBET007CiB1c2luZyBuYW1lc3BhY2Uga2h0bWw7CiAK
IEhUTUxCb2R5RWxlbWVudEltcGw6OkhUTUxCb2R5RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRv
YykKLSAgICA6IEhUTUxFbGVtZW50SW1wbChkb2MpLCBtX2xpbmtEZWNsKDApCisgICAgOiBIVE1M
RWxlbWVudEltcGwoSFRNTE5hbWVzOjpib2R5KCksIGRvYyksIG1fbGlua0RlY2woMCkKIHsKIH0K
IApAQCAtNjEsMTEgKzYxLDYgQEAgSFRNTEJvZHlFbGVtZW50SW1wbDo6fkhUTUxCb2R5RWxlbWVu
dEltcAogICAgIH0KIH0KIAotTm9kZUltcGw6OklkIEhUTUxCb2R5RWxlbWVudEltcGw6OmlkKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gSURfQk9EWTsKLX0KLQogdm9pZCBIVE1MQm9keUVsZW1lbnRJ
bXBsOjpjcmVhdGVMaW5rRGVjbCgpCiB7CiAgICAgbV9saW5rRGVjbCA9IG5ldyBDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbkltcGw7CkBAIC0yODksNyArMjg0LDE4IEBAIHZvaWQgSFRNTEJvZHlF
bGVtZW50SW1wbDo6c2V0VkxpbmsoY29uc3QKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogSFRNTEZy
YW1lRWxlbWVudEltcGw6OkhUTUxGcmFtZUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0g
ICAgOiBIVE1MRWxlbWVudEltcGwoZG9jKQorICAgIDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1l
czo6ZnJhbWUoKSwgZG9jKQoreworICAgIGluaXQoKTsKK30KKworSFRNTEZyYW1lRWxlbWVudElt
cGw6OkhUTUxGcmFtZUVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERv
Y3VtZW50UHRyICpkb2MpCisgICAgOiBIVE1MRWxlbWVudEltcGwodGFnTmFtZSwgZG9jKQorewor
ICAgIGluaXQoKTsKK30KKwordm9pZCBIVE1MRnJhbWVFbGVtZW50SW1wbDo6aW5pdCgpCiB7CiAg
ICAgbV9mcmFtZUJvcmRlciA9IHRydWU7CiAgICAgbV9mcmFtZUJvcmRlclNldCA9IGZhbHNlOwpA
QCAtMzAzLDExICszMDksNiBAQCBIVE1MRnJhbWVFbGVtZW50SW1wbDo6fkhUTUxGcmFtZUVsZW1l
bnRJCiB7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MRnJhbWVFbGVtZW50SW1wbDo6aWQoKSBjb25z
dAotewotICAgIHJldHVybiBJRF9GUkFNRTsKLX0KLQogYm9vbCBIVE1MRnJhbWVFbGVtZW50SW1w
bDo6aXNVUkxBbGxvd2VkKGNvbnN0IEF0b21pY1N0cmluZyAmVVJMU3RyaW5nKSBjb25zdAogewog
ICAgIGlmIChVUkxTdHJpbmcuaXNFbXB0eSgpKSB7CkBAIC00ODIsNyArNDgzLDcgQEAgdm9pZCBI
VE1MRnJhbWVFbGVtZW50SW1wbDo6YXR0YWNoKCkKIAogICAgIC8vIGluaGVyaXQgZGVmYXVsdCBz
ZXR0aW5ncyBmcm9tIHBhcmVudCBmcmFtZXNldAogICAgIGZvciAoTm9kZUltcGwgKm5vZGUgPSBw
YXJlbnROb2RlKCk7IG5vZGU7IG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCkpCi0gICAgICAgIGlm
IChub2RlLT5pZCgpID09IElEX0ZSQU1FU0VUKSB7CisgICAgICAgIGlmIChub2RlLT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6ZnJhbWVzZXQoKSkpIHsKICAgICAgICAgICAgIEhUTUxGcmFtZVNldEVs
ZW1lbnRJbXBsKiBmcmFtZXNldCA9IHN0YXRpY19jYXN0PEhUTUxGcmFtZVNldEVsZW1lbnRJbXBs
Kj4obm9kZSk7CiAgICAgICAgICAgICBpZiAoIW1fZnJhbWVCb3JkZXJTZXQpCiAgICAgICAgICAg
ICAgICAgbV9mcmFtZUJvcmRlciA9IGZyYW1lc2V0LT5mcmFtZUJvcmRlcigpOwpAQCAtNjYxLDcg
KzY2Miw3IEBAIHZvaWQgSFRNTEZyYW1lRWxlbWVudEltcGw6OnNldFNyYyhjb25zdCAKIC8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KIAogSFRNTEZyYW1lU2V0RWxlbWVudEltcGw6OkhUTUxGcmFtZVNldEVs
ZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0gICAgOiBIVE1MRWxlbWVudEltcGwoZG9jKQor
ICAgIDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6ZnJhbWVzZXQoKSwgZG9jKQogewogICAg
IC8vIGRlZmF1bHQgdmFsdWUgZm9yIHJvd3MgYW5kIGNvbHMuLi4KICAgICBtX3RvdGFsUm93cyA9
IDE7CkBAIC02ODUsMTEgKzY4Niw2IEBAIEhUTUxGcmFtZVNldEVsZW1lbnRJbXBsOjp+SFRNTEZy
YW1lU2V0RWwKICAgICAgICAgZGVsZXRlIFtdIG1fY29sczsKIH0KIAotTm9kZUltcGw6OklkIEhU
TUxGcmFtZVNldEVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0ZSQU1F
U0VUOwotfQotCiB2b2lkIEhUTUxGcmFtZVNldEVsZW1lbnRJbXBsOjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICphdHRyKQogewogICAgIHN3aXRjaChhdHRyLT5pZCgp
KQpAQCAtNzUyLDggKzc0OCw3IEBAIHZvaWQgSFRNTEZyYW1lU2V0RWxlbWVudEltcGw6OmF0dGFj
aCgpCiAgICAgSFRNTEVsZW1lbnRJbXBsKiBub2RlID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJ
bXBsKj4ocGFyZW50Tm9kZSgpKTsKICAgICB3aGlsZShub2RlKQogICAgIHsKLSAgICAgICAgaWYo
bm9kZS0+aWQoKSA9PSBJRF9GUkFNRVNFVCkKLSAgICAgICAgeworICAgICAgICBpZiAobm9kZS0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZyYW1lc2V0KCkpKSB7CiAgICAgICAgICAgICBIVE1MRnJh
bWVTZXRFbGVtZW50SW1wbCogZnJhbWVzZXQgPSBzdGF0aWNfY2FzdDxIVE1MRnJhbWVTZXRFbGVt
ZW50SW1wbCo+KG5vZGUpOwogICAgICAgICAgICAgaWYoIWZyYW1lQm9yZGVyU2V0KSAgZnJhbWVi
b3JkZXIgPSBmcmFtZXNldC0+ZnJhbWVCb3JkZXIoKTsKICAgICAgICAgICAgIGlmKCFub3Jlc2l6
ZSkgIG5vcmVzaXplID0gZnJhbWVzZXQtPm5vUmVzaXplKCk7CkBAIC04MTcsNyArODEyLDcgQEAg
dm9pZCBIVE1MRnJhbWVTZXRFbGVtZW50SW1wbDo6c2V0Um93cyhjbwogLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQogCiBIVE1MSGVhZEVsZW1lbnRJbXBsOjpIVE1MSGVhZEVsZW1lbnRJbXBsKERvY3VtZW50
UHRyICpkb2MpCi0gICAgOiBIVE1MRWxlbWVudEltcGwoZG9jKQorICAgIDogSFRNTEVsZW1lbnRJ
bXBsKEhUTUxOYW1lczo6aGVhZCgpLCBkb2MpCiB7CiB9CiAKQEAgLTgyNSwxMSArODIwLDYgQEAg
SFRNTEhlYWRFbGVtZW50SW1wbDo6fkhUTUxIZWFkRWxlbWVudEltcAogewogfQogCi1Ob2RlSW1w
bDo6SWQgSFRNTEhlYWRFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9I
RUFEOwotfQotCiBET01TdHJpbmcgSFRNTEhlYWRFbGVtZW50SW1wbDo6cHJvZmlsZSgpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIGdldEF0dHJpYnV0ZShBVFRSX1BST0ZJTEUpOwpAQCAtODQzLDcgKzgz
Myw3IEBAIHZvaWQgSFRNTEhlYWRFbGVtZW50SW1wbDo6c2V0UHJvZmlsZShjb24KIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KIAogSFRNTEh0bWxFbGVtZW50SW1wbDo6SFRNTEh0bWxFbGVtZW50SW1wbChE
b2N1bWVudFB0ciAqZG9jKQotICAgIDogSFRNTEVsZW1lbnRJbXBsKGRvYykKKyAgICA6IEhUTUxF
bGVtZW50SW1wbChIVE1MTmFtZXM6Omh0bWwoKSwgZG9jKQogewogfQogCkBAIC04NTEsMTEgKzg0
MSw2IEBAIEhUTUxIdG1sRWxlbWVudEltcGw6On5IVE1MSHRtbEVsZW1lbnRJbXAKIHsKIH0KIAot
Tm9kZUltcGw6OklkIEhUTUxIdG1sRWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gSURfSFRNTDsKLX0KLQogRE9NU3RyaW5nIEhUTUxIdG1sRWxlbWVudEltcGw6OnZlcnNpb24o
KSBjb25zdAogewogICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoQVRUUl9WRVJTSU9OKTsKQEAgLTg2
OCw3ICs4NTMsNyBAQCB2b2lkIEhUTUxIdG1sRWxlbWVudEltcGw6OnNldFZlcnNpb24oY29uCiAK
IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSFRNTElGcmFtZUVsZW1lbnRJbXBsOjpIVE1MSUZyYW1l
RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykgOiBIVE1MRnJhbWVFbGVtZW50SW1wbChkb2Mp
CitIVE1MSUZyYW1lRWxlbWVudEltcGw6OkhUTUxJRnJhbWVFbGVtZW50SW1wbChEb2N1bWVudFB0
ciAqZG9jKSA6IEhUTUxGcmFtZUVsZW1lbnRJbXBsKEhUTUxOYW1lczo6aWZyYW1lKCksIGRvYykK
IHsKICAgICBtX2ZyYW1lQm9yZGVyID0gZmFsc2U7CiAgICAgbV9tYXJnaW5XaWR0aCA9IC0xOwpA
QCAtODgwLDExICs4NjUsNiBAQCBIVE1MSUZyYW1lRWxlbWVudEltcGw6On5IVE1MSUZyYW1lRWxl
bWVuCiB7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MSUZyYW1lRWxlbWVudEltcGw6OmlkKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gSURfSUZSQU1FOwotfQotCiBib29sIEhUTUxJRnJhbWVFbGVtZW50
SW1wbDo6bWFwVG9FbnRyeShOb2RlSW1wbDo6SWQgYXR0ciwgTWFwcGVkQXR0cmlidXRlRW50cnkm
IHJlc3VsdCkgY29uc3QKIHsKICAgICBzd2l0Y2ggKGF0dHIpIHsKSW5kZXg6IGtodG1sL2h0bWwv
aHRtbF9iYXNlaW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2to
dG1sL2h0bWwvaHRtbF9iYXNlaW1wbC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjI3CmRpZmYg
LXUgLXAgLXIxLjI3IGtodG1sL2h0bWwvaHRtbF9iYXNlaW1wbC5oCi0tLSBraHRtbC9odG1sL2h0
bWxfYmFzZWltcGwuaAkxMSBNYXkgMjAwNSAwNTo0OTozNCAtMDAwMAkxLjI3CisrKyBraHRtbC9o
dG1sL2h0bWxfYmFzZWltcGwuaAkyMCBKdW4gMjAwNSAyMDo1NTozMyAtMDAwMApAQCAtMjYsNyAr
MjYsNiBAQAogI2lmbmRlZiBIVE1MX0JBU0VJTVBMX0gKICNkZWZpbmUgSFRNTF9CQVNFSU1QTF9I
CiAKLSNpbmNsdWRlICJodG1sL2R0ZC5oIgogI2luY2x1ZGUgImh0bWwvaHRtbF9lbGVtZW50aW1w
bC5oIgogI2luY2x1ZGUgIm1pc2Mva2h0bWxsYXlvdXQuaCIKIApAQCAtNTUsOCArNTQsOCBAQCBw
dWJsaWM6CiAgICAgSFRNTEJvZHlFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKTsKICAgICB+
SFRNTEJvZHlFbGVtZW50SW1wbCgpOwogCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwotCisg
ICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAxMDsgfQorICAgCiAg
ICAgdmlydHVhbCBib29sIG1hcFRvRW50cnkoTm9kZUltcGw6OklkIGF0dHIsIE1hcHBlZEF0dHJp
YnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0
dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICopOwogCkBAIC05MiwxMSArOTEsMTQgQEAgY2xh
c3MgSFRNTEZyYW1lRWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTAogCiBwdWJsaWM6CiAgICAgSFRN
TEZyYW1lRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYyk7Ci0KKyAgICBIVE1MRnJhbWVFbGVt
ZW50SW1wbChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudFB0ciogZG9jKTsK
ICAgICB+SFRNTEZyYW1lRWxlbWVudEltcGwoKTsKIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25z
dDsKKyAgICB2b2lkIGluaXQoKTsKIAorICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdy
ZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIEZPUkJJRERFTjsgfQorICAgIHZpcnR1YWwgaW50
IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMDsgfQorICAKICAgICB2aXJ0dWFsIHZvaWQg
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqKTsKICAgICB2aXJ0dWFs
IHZvaWQgYXR0YWNoKCk7CiAgICAgdmlydHVhbCB2b2lkIGRldGFjaCgpOwpAQCAtMTcxLDcgKzE3
Myw3IEBAIHB1YmxpYzoKIAogICAgIH5IVE1MRnJhbWVTZXRFbGVtZW50SW1wbCgpOwogCi0gICAg
dmlydHVhbCBJZCBpZCgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29u
c3QgeyByZXR1cm4gMTA7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0
ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICopOwogICAgIHZpcnR1YWwgdm9pZCBhdHRhY2goKTsKQEAg
LTIxOSw3ICsyMjEsOCBAQCBwdWJsaWM6CiAKICAgICB+SFRNTEhlYWRFbGVtZW50SW1wbCgpOwog
Ci0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OworICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBl
bmRUYWdyZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIE9QVElPTkFMOyB9CisgICAgdmlydHVh
bCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAxMDsgfQogCiAgICAgRE9NU3RyaW5n
IHByb2ZpbGUoKSBjb25zdDsKICAgICB2b2lkIHNldFByb2ZpbGUoY29uc3QgRE9NU3RyaW5nICYp
OwpAQCAtMjMzLDcgKzIzNiw3IEBAIHB1YmxpYzoKICAgICBIVE1MSHRtbEVsZW1lbnRJbXBsKERv
Y3VtZW50UHRyICpkb2MpOwogICAgIH5IVE1MSHRtbEVsZW1lbnRJbXBsKCk7CiAKLSAgICB2aXJ0
dWFsIElkIGlkKCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7
IHJldHVybiAxMTsgfQogCiAgICAgRE9NU3RyaW5nIHZlcnNpb24oKSBjb25zdDsKICAgICB2b2lk
IHNldFZlcnNpb24oY29uc3QgRE9NU3RyaW5nICYpOwpAQCAtMjQ2LDExICsyNDksOCBAQCBjbGFz
cyBIVE1MSUZyYW1lRWxlbWVudEltcGwgOiBwdWJsaWMgSFRNCiB7CiBwdWJsaWM6CiAgICAgSFRN
TElGcmFtZUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpOwotCiAgICAgfkhUTUxJRnJhbWVF
bGVtZW50SW1wbCgpOwogCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwotCiAgICAgdmlydHVh
bCBib29sIG1hcFRvRW50cnkoTm9kZUltcGw6OklkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5
JiByZXN1bHQpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShN
YXBwZWRBdHRyaWJ1dGVJbXBsICphdHRyKTsKIApJbmRleDoga2h0bWwvaHRtbC9odG1sX2Jsb2Nr
aW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRt
bC9odG1sX2Jsb2NraW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTcKZGlmZiAtdSAt
cCAtcjEuMTcga2h0bWwvaHRtbC9odG1sX2Jsb2NraW1wbC5jcHAKLS0tIGtodG1sL2h0bWwvaHRt
bF9ibG9ja2ltcGwuY3BwCTExIE1heSAyMDA1IDA1OjQ5OjM0IC0wMDAwCTEuMTcKKysrIGtodG1s
L2h0bWwvaHRtbF9ibG9ja2ltcGwuY3BwCTIwIEp1biAyMDA1IDIwOjU1OjMzIC0wMDAwCkBAIC0z
Nyw3ICszNyw3IEBAIHVzaW5nIG5hbWVzcGFjZSBraHRtbDsKIHVzaW5nIG5hbWVzcGFjZSBET007
CiAKIEhUTUxCbG9ja3F1b3RlRWxlbWVudEltcGw6OkhUTUxCbG9ja3F1b3RlRWxlbWVudEltcGwo
RG9jdW1lbnRQdHIgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50SW1wbChkb2MpCisgICAgOiBIVE1M
RWxlbWVudEltcGwoSFRNTE5hbWVzOjpibG9ja3F1b3RlKCksIGRvYykKIHsKIH0KIApAQCAtNDUs
MTEgKzQ1LDYgQEAgSFRNTEJsb2NrcXVvdGVFbGVtZW50SW1wbDo6fkhUTUxCbG9ja3F1bwogewog
fQogCi1Ob2RlSW1wbDo6SWQgSFRNTEJsb2NrcXVvdGVFbGVtZW50SW1wbDo6aWQoKSBjb25zdAot
ewotICAgIHJldHVybiBJRF9CTE9DS1FVT1RFOwotfQotCiBET01TdHJpbmcgSFRNTEJsb2NrcXVv
dGVFbGVtZW50SW1wbDo6Y2l0ZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGdldEF0dHJpYnV0ZShB
VFRSX0NJVEUpOwpAQCAtNjMsNyArNTgsNyBAQCB2b2lkIEhUTUxCbG9ja3F1b3RlRWxlbWVudElt
cGw6OnNldENpdGUoCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxEaXZFbGVtZW50SW1wbDo6
SFRNTERpdkVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0gICAgOiBIVE1MRWxlbWVudElt
cGwoZG9jKQorICAgIDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6ZGl2KCksIGRvYykKIHsK
IH0KIApAQCAtNzEsMTEgKzY2LDYgQEAgSFRNTERpdkVsZW1lbnRJbXBsOjp+SFRNTERpdkVsZW1l
bnRJbXBsKAogewogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTERpdkVsZW1lbnRJbXBsOjppZCgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIElEX0RJVjsKLX0KLQogYm9vbCBIVE1MRGl2RWxlbWVudEltcGw6
Om1hcFRvRW50cnkoTm9kZUltcGw6OklkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1
bHQpIGNvbnN0CiB7CiAgICAgaWYgKGF0dHIgPT0gQVRUUl9BTElHTikgewpAQCAtMTIwLDcgKzEx
MCw3IEBAIHZvaWQgSFRNTERpdkVsZW1lbnRJbXBsOjpzZXRBbGlnbihjb25zdCAKIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KIAogSFRNTEhSRWxlbWVudEltcGw6OkhUTUxIUkVsZW1lbnRJbXBsKERvY3Vt
ZW50UHRyICpkb2MpCi0gICAgOiBIVE1MRWxlbWVudEltcGwoZG9jKQorICAgIDogSFRNTEVsZW1l
bnRJbXBsKEhUTUxOYW1lczo6aHIoKSwgZG9jKQogewogfQogCkBAIC0xMjgsMTEgKzExOCw2IEBA
IEhUTUxIUkVsZW1lbnRJbXBsOjp+SFRNTEhSRWxlbWVudEltcGwoKQogewogfQogCi1Ob2RlSW1w
bDo6SWQgSFRNTEhSRWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfSFI7
Ci19Ci0KIGJvb2wgSFRNTEhSRWxlbWVudEltcGw6Om1hcFRvRW50cnkoTm9kZUltcGw6OklkIGF0
dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChh
dHRyKSB7CkBAIC0yNTIsOCArMjM3LDggQEAgdm9pZCBIVE1MSFJFbGVtZW50SW1wbDo6c2V0V2lk
dGgoY29uc3QgRAogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUhUTUxIZWFkaW5nRWxlbWVudElt
cGw6OkhUTUxIZWFkaW5nRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgdXNob3J0IF90YWdp
ZCkKLSAgICA6IEhUTUxHZW5lcmljRWxlbWVudEltcGwoZG9jLCBfdGFnaWQpCitIVE1MSGVhZGlu
Z0VsZW1lbnRJbXBsOjpIVE1MSGVhZGluZ0VsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUm
IHRhZ05hbWUsIERvY3VtZW50UHRyICpkb2MpCisgICAgOiBIVE1MRWxlbWVudEltcGwodGFnTmFt
ZSwgZG9jKQogewogfQogCkBAIC0yNzAsMTMgKzI1NSw4IEBAIHZvaWQgSFRNTEhlYWRpbmdFbGVt
ZW50SW1wbDo6c2V0QWxpZ24oY28KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogSFRNTFBhcmFncmFw
aEVsZW1lbnRJbXBsOjpIVE1MUGFyYWdyYXBoRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykK
LSAgICA6IEhUTUxFbGVtZW50SW1wbChkb2MpCi17Ci19Ci0KLU5vZGVJbXBsOjpJZCBIVE1MUGFy
YWdyYXBoRWxlbWVudEltcGw6OmlkKCkgY29uc3QKKyAgICA6IEhUTUxFbGVtZW50SW1wbChIVE1M
TmFtZXM6OnAoKSwgZG9jKQogewotICAgIHJldHVybiBJRF9QOwogfQogCiBib29sIEhUTUxQYXJh
Z3JhcGhFbGVtZW50SW1wbDo6bWFwVG9FbnRyeShOb2RlSW1wbDo6SWQgYXR0ciwgTWFwcGVkQXR0
cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3QKQEAgLTMyMiw4ICszMDIsOCBAQCB2b2lkIEhUTUxQ
YXJhZ3JhcGhFbGVtZW50SW1wbDo6c2V0QWxpZ24oCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAot
SFRNTFByZUVsZW1lbnRJbXBsOjpIVE1MUHJlRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywg
dW5zaWduZWQgc2hvcnQgX3RhZ2lkKQotICAgIDogSFRNTEdlbmVyaWNFbGVtZW50SW1wbChkb2Ms
IF90YWdpZCkKK0hUTUxQcmVFbGVtZW50SW1wbDo6SFRNTFByZUVsZW1lbnRJbXBsKGNvbnN0IFF1
YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50UHRyICpkb2MpCisgICAgOiBIVE1MRWxlbWVu
dEltcGwodGFnTmFtZSwgZG9jKQogewogfQogCkBAIC0zNDMsMTYgKzMyMywxMSBAQCB2b2lkIEhU
TUxQcmVFbGVtZW50SW1wbDo6c2V0V2lkdGgobG9uZyB3CiBjb25zdCBpbnQgZGVmYXVsdE1pbmlt
dW1EZWxheSA9IDYwOwogCiBIVE1MTWFycXVlZUVsZW1lbnRJbXBsOjpIVE1MTWFycXVlZUVsZW1l
bnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi06IEhUTUxFbGVtZW50SW1wbChkb2MpLAorOiBIVE1M
RWxlbWVudEltcGwoSFRNTE5hbWVzOjptYXJxdWVlKCksIGRvYyksCiAgIG1fbWluaW11bURlbGF5
KGRlZmF1bHRNaW5pbXVtRGVsYXkpCiB7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MTWFycXVlZUVs
ZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX01BUlFVRUU7Ci19Ci0KIGJv
b2wgSFRNTE1hcnF1ZWVFbGVtZW50SW1wbDo6bWFwVG9FbnRyeShOb2RlSW1wbDo6SWQgYXR0ciwg
TWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3QKIHsKICAgICBzd2l0Y2ggKGF0dHIp
IHsKQEAgLTQzNCwxOSArNDA5LDMgQEAgdm9pZCBIVE1MTWFycXVlZUVsZW1lbnRJbXBsOjpwYXJz
ZU1hcHBlZAogICAgICAgICAgICAgSFRNTEVsZW1lbnRJbXBsOjpwYXJzZU1hcHBlZEF0dHJpYnV0
ZShhdHRyKTsKICAgICB9CiB9Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1IVE1MTGF5ZXJFbGVt
ZW50SW1wbDo6SFRNTExheWVyRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgICA6IEhU
TUxEaXZFbGVtZW50SW1wbCggZG9jICkKLXsKLX0KLQotSFRNTExheWVyRWxlbWVudEltcGw6On5I
VE1MTGF5ZXJFbGVtZW50SW1wbCgpCi17Ci19Ci0KLU5vZGVJbXBsOjpJZCBIVE1MTGF5ZXJFbGVt
ZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9MQVlFUjsKLX0KSW5kZXg6IGto
dG1sL2h0bWwvaHRtbF9ibG9ja2ltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3Qv
V2ViQ29yZS9raHRtbC9odG1sL2h0bWxfYmxvY2tpbXBsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuOQpkaWZmIC11IC1wIC1yMS45IGtodG1sL2h0bWwvaHRtbF9ibG9ja2ltcGwuaAotLS0ga2h0
bWwvaHRtbC9odG1sX2Jsb2NraW1wbC5oCTExIE1heSAyMDA1IDA1OjQ5OjM0IC0wMDAwCTEuOQor
Kysga2h0bWwvaHRtbC9odG1sX2Jsb2NraW1wbC5oCTIwIEp1biAyMDA1IDIwOjU1OjMzIC0wMDAw
CkBAIC0yNiw3ICsyNiw2IEBACiAjZGVmaW5lIEhUTUxfQkxPQ0tJTVBMX0gKIAogI2luY2x1ZGUg
Imh0bWxfZWxlbWVudGltcGwuaCIKLSNpbmNsdWRlICJkdGQuaCIKIAogbmFtZXNwYWNlIERPTSB7
CiAKQEAgLTQwLDggKzM5LDggQEAgcHVibGljOgogICAgIEhUTUxCbG9ja3F1b3RlRWxlbWVudElt
cGwoRG9jdW1lbnRQdHIgKmRvYyk7CiAgICAgfkhUTUxCbG9ja3F1b3RlRWxlbWVudEltcGwoKTsK
IAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKLQorICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9y
aXR5KCkgY29uc3QgeyByZXR1cm4gNTsgfQorICAgIAogICAgIERPTVN0cmluZyBjaXRlKCkgY29u
c3Q7CiAgICAgdm9pZCBzZXRDaXRlKGNvbnN0IERPTVN0cmluZyAmKTsKIH07CkBAIC01NSw4ICs1
NCw4IEBAIGNsYXNzIEhUTUxEaXZFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MRWwKIHB1YmxpYzoK
ICAgICBIVE1MRGl2RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYyk7CiAgICAgfkhUTUxEaXZF
bGVtZW50SW1wbCgpOwotCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OworICAgIAorICAgIHZp
cnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gNTsgfQogICAgIAogICAgIHZp
cnR1YWwgYm9vbCBtYXBUb0VudHJ5KElkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1
bHQpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRB
dHRyaWJ1dGVJbXBsICp0b2tlbik7CkBAIC03Miw4ICs3MSw5IEBAIGNsYXNzIEhUTUxIUkVsZW1l
bnRJbXBsIDogcHVibGljIEhUTUxFbGUKIHB1YmxpYzoKICAgICBIVE1MSFJFbGVtZW50SW1wbChE
b2N1bWVudFB0ciAqZG9jKTsKICAgICB+SFRNTEhSRWxlbWVudEltcGwoKTsKLQotICAgIHZpcnR1
YWwgSWQgaWQoKSBjb25zdDsKKyAgICAKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFn
UmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBGT1JCSURERU47IH0KKyAgICB2aXJ0dWFsIGlu
dCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KICAgICAKICAgICB2aXJ0dWFsIGJv
b2wgbWFwVG9FbnRyeShJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25z
dDsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRl
SW1wbCAqKTsKQEAgLTkzLDEwICs5MywxMiBAQCBwdWJsaWM6CiAKIC8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KIAotY2xhc3MgSFRNTEhlYWRpbmdFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MR2VuZXJpY0Vs
ZW1lbnRJbXBsCitjbGFzcyBIVE1MSGVhZGluZ0VsZW1lbnRJbXBsIDogcHVibGljIEhUTUxFbGVt
ZW50SW1wbAogewogcHVibGljOgotICAgIEhUTUxIZWFkaW5nRWxlbWVudEltcGwoRG9jdW1lbnRQ
dHIgKmRvYywgdXNob3J0IF90YWdpZCk7CisgICAgSFRNTEhlYWRpbmdFbGVtZW50SW1wbChjb25z
dCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudFB0ciAqZG9jKTsKKworICAgIHZpcnR1
YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gNTsgfQogCiAgICAgRE9NU3RyaW5n
IGFsaWduKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRBbGlnbihjb25zdCBET01TdHJpbmcgJik7CkBA
IC0xMDQsMjEgKzEwNiwxNiBAQCBwdWJsaWM6CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotLyoK
LSAqIHdlcmUgbm90IHVzaW5nIEhUTUxFbGVtZW50SW1wbCBhcyBwYXJlbnQgY2xhc3MsIHNpbmNl
IGEKLSAqIHBhcmFncmFwaCBzaG91bGQgYmUgYWJsZSB0byBmbG93IGFyb3VuZCBhbGlnbmVkIG9i
amVjdHMuIFRodXMKLSAqIGEgPHA+IGVsZW1lbnQgaGFzIHRvIGJlIGlubGluZSwgYW5kIGlzIHJl
bmRlcmVkIGJ5Ci0gKiBIVE1MQmxvY2tJbXBsOjpjYWxjUGFyYWdyYXBoCi0gKi8KIGNsYXNzIEhU
TUxQYXJhZ3JhcGhFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MRWxlbWVudEltcGwKIHsKIHB1Ymxp
YzoKICAgICBIVE1MUGFyYWdyYXBoRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYyk7CiAKKyAg
ICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVy
biBPUFRJT05BTDsgfQorICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1
cm4gMzsgfQorICAgIAogICAgIHZpcnR1YWwgYm9vbCBtYXBUb0VudHJ5KElkIGF0dHIsIE1hcHBl
ZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1h
cHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICphdHRyKTsKLSAgICAKLSAgICB2aXJ0
dWFsIElkIGlkKCkgY29uc3Q7CiAKICAgICBET01TdHJpbmcgYWxpZ24oKSBjb25zdDsKICAgICB2
b2lkIHNldEFsaWduKGNvbnN0IERPTVN0cmluZyAmKTsKQEAgLTEyNiwxMyArMTIzLDEzIEBAIHB1
YmxpYzoKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1jbGFzcyBIVE1MUHJlRWxlbWVudEltcGwg
OiBwdWJsaWMgSFRNTEdlbmVyaWNFbGVtZW50SW1wbAorY2xhc3MgSFRNTFByZUVsZW1lbnRJbXBs
IDogcHVibGljIEhUTUxFbGVtZW50SW1wbAogewogcHVibGljOgotICAgIEhUTUxQcmVFbGVtZW50
SW1wbChEb2N1bWVudFB0ciAqZG9jLCB1c2hvcnQgX3RhZ2lkKTsKKyAgICBIVE1MUHJlRWxlbWVu
dEltcGwoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnRQdHIgKmRvYyk7CiAK
ICAgICBsb25nIHdpZHRoKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRXaWR0aCggbG9uZyB3ICk7Cisg
ICAgdm9pZCBzZXRXaWR0aChsb25nIHcpOwogfTsKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAt
MTQxLDggKzEzOCw2IEBAIGNsYXNzIEhUTUxNYXJxdWVlRWxlbWVudEltcGwgOiBwdWJsaWMgSFQK
IHsKIHB1YmxpYzoKICAgICBIVE1MTWFycXVlZUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2Mp
OwotCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwogICAgIAogICAgIHZpcnR1YWwgYm9vbCBt
YXBUb0VudHJ5KElkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0Owog
ICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBs
ICp0b2tlbik7CkBAIC0xNTMsMTggKzE0OCw1IEBAIHByaXZhdGU6CiAgICAgaW50IG1fbWluaW11
bURlbGF5OwogfTsKIAotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBIVE1MTGF5ZXJFbGVt
ZW50SW1wbCA6IHB1YmxpYyBIVE1MRGl2RWxlbWVudEltcGwKLXsKLXB1YmxpYzoKLSAgICBIVE1M
TGF5ZXJFbGVtZW50SW1wbCggRG9jdW1lbnRQdHIgKmRvYyApOwotICAgIH5IVE1MTGF5ZXJFbGVt
ZW50SW1wbCgpOwotCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwotCi0gICAgYm9vbCBmaXhl
ZDsKLX07Ci0KIH07IC8vbmFtZXNwYWNlCiAjZW5kaWYKSW5kZXg6IGtodG1sL2h0bWwvaHRtbF9k
b2N1bWVudGltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2to
dG1sL2h0bWwvaHRtbF9kb2N1bWVudGltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjYw
CmRpZmYgLXUgLXAgLXIxLjYwIGtodG1sL2h0bWwvaHRtbF9kb2N1bWVudGltcGwuY3BwCi0tLSBr
aHRtbC9odG1sL2h0bWxfZG9jdW1lbnRpbXBsLmNwcAkxMSBNYXkgMjAwNSAwMDo1ODoyOCAtMDAw
MAkxLjYwCisrKyBraHRtbC9odG1sL2h0bWxfZG9jdW1lbnRpbXBsLmNwcAkyMCBKdW4gMjAwNSAy
MDo1NTozMyAtMDAwMApAQCAtMjQ2LDcgKzI0Niw3IEBAIFRva2VuaXplciAqSFRNTERvY3VtZW50
SW1wbDo6Y3JlYXRlVG9rZW4KIGJvb2wgSFRNTERvY3VtZW50SW1wbDo6Y2hpbGRBbGxvd2VkKCBO
b2RlSW1wbCAqbmV3Q2hpbGQgKQogewogICAgIC8vICMjIyBzdXBwb3J0IGNvbW1lbnRzLiBldGMg
YXMgYSBjaGlsZAotICAgIHJldHVybiAobmV3Q2hpbGQtPmlkKCkgPT0gSURfSFRNTCB8fCBuZXdD
aGlsZC0+aWQoKSA9PSBJRF9DT01NRU5UKTsKKyAgICByZXR1cm4gKG5ld0NoaWxkLT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6aHRtbCgpKSB8fCBuZXdDaGlsZC0+aXNDb21tZW50Tm9kZSgpKTsKIH0K
IAogRWxlbWVudEltcGwgKkhUTUxEb2N1bWVudEltcGw6OmNyZWF0ZUVsZW1lbnQoIGNvbnN0IERP
TVN0cmluZyAmbmFtZSwgaW50ICZleGNlcHRpb25jb2RlICkKSW5kZXg6IGtodG1sL2h0bWwvaHRt
bF9lbGVtZW50aW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUv
a2h0bWwvaHRtbC9odG1sX2VsZW1lbnRpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS44
NwpkaWZmIC11IC1wIC1yMS44NyBraHRtbC9odG1sL2h0bWxfZWxlbWVudGltcGwuY3BwCi0tLSBr
aHRtbC9odG1sL2h0bWxfZWxlbWVudGltcGwuY3BwCTEzIE1heSAyMDA1IDE2OjQ4OjUxIC0wMDAw
CTEuODcKKysrIGtodG1sL2h0bWwvaHRtbF9lbGVtZW50aW1wbC5jcHAJMjAgSnVuIDIwMDUgMjA6
NTU6MzQgLTAwMDAKQEAgLTI4LDcgKzI4LDYgQEAKIC8vI2RlZmluZSBFVkVOVF9ERUJVRwogLy8j
ZGVmaW5lIFVOU1VQUE9SVEVEX0FUVFIKIAotI2luY2x1ZGUgImh0bWwvZHRkLmgiCiAjaW5jbHVk
ZSAiaHRtbC9odG1sX2VsZW1lbnRpbXBsLmgiCiAjaW5jbHVkZSAiaHRtbC9odG1sX2RvY3VtZW50
aW1wbC5oIgogI2luY2x1ZGUgImh0bWwvaHRtbHRva2VuaXplci5oIgpAQCAtNTgsOCArNTcsOCBA
QCB1c2luZyBuYW1lc3BhY2Uga2h0bWw7CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1IVE1MRWxlbWVudElt
cGw6OkhUTUxFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAgIDogU3R5bGVkRWxlbWVu
dEltcGwoZG9jKQorSFRNTEVsZW1lbnRJbXBsOjpIVE1MRWxlbWVudEltcGwoY29uc3QgUXVhbGlm
aWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnRQdHIgKmRvYykKKyAgICA6IFN0eWxlZEVsZW1lbnRJ
bXBsKHRhZ05hbWUsIGRvYykKIHsKIH0KIApAQCAtNjcsNTEgKzY2LDkgQEAgSFRNTEVsZW1lbnRJ
bXBsOjp+SFRNTEVsZW1lbnRJbXBsKCkKIHsKIH0KIAotYm9vbCBIVE1MRWxlbWVudEltcGw6Omlz
SW5saW5lKCkgY29uc3QKLXsKLSAgICBpZiAocmVuZGVyZXIoKSkKLSAgICAgICAgcmV0dXJuIEVs
ZW1lbnRJbXBsOjppc0lubGluZSgpOwotICAgIAotICAgIHN3aXRjaChpZCgpKSB7Ci0gICAgICAg
IGNhc2UgSURfQToKLSAgICAgICAgY2FzZSBJRF9GT05UOgotICAgICAgICBjYXNlIElEX1RUOgot
ICAgICAgICBjYXNlIElEX1U6Ci0gICAgICAgIGNhc2UgSURfQjoKLSAgICAgICAgY2FzZSBJRF9J
OgotICAgICAgICBjYXNlIElEX1M6Ci0gICAgICAgIGNhc2UgSURfU1RSSUtFOgotICAgICAgICBj
YXNlIElEX0JJRzoKLSAgICAgICAgY2FzZSBJRF9TTUFMTDoKLSAgICAKLSAgICAgICAgICAgIC8v
ICVwaHJhc2UKLSAgICAgICAgY2FzZSBJRF9FTToKLSAgICAgICAgY2FzZSBJRF9TVFJPTkc6Ci0g
ICAgICAgIGNhc2UgSURfREZOOgotICAgICAgICBjYXNlIElEX0NPREU6Ci0gICAgICAgIGNhc2Ug
SURfU0FNUDoKLSAgICAgICAgY2FzZSBJRF9LQkQ6Ci0gICAgICAgIGNhc2UgSURfVkFSOgotICAg
ICAgICBjYXNlIElEX0NJVEU6Ci0gICAgICAgIGNhc2UgSURfQUJCUjoKLSAgICAgICAgY2FzZSBJ
RF9BQ1JPTllNOgotICAgIAotICAgICAgICAgICAgLy8gJXNwZWNpYWwKLSAgICAgICAgY2FzZSBJ
RF9TVUI6Ci0gICAgICAgIGNhc2UgSURfU1VQOgotICAgICAgICBjYXNlIElEX1NQQU46Ci0gICAg
ICAgIGNhc2UgSURfTk9CUjoKLSAgICAgICAgY2FzZSBJRF9XQlI6Ci0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgICAgIAotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0
dXJuIEVsZW1lbnRJbXBsOjppc0lubGluZSgpOwotICAgIH0KLX0KLQogTm9kZUltcGwgKkhUTUxF
bGVtZW50SW1wbDo6Y2xvbmVOb2RlKGJvb2wgZGVlcCkKIHsKLSAgICBIVE1MRWxlbWVudEltcGwg
KmNsb25lID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KGdldERvY3VtZW50KCktPmNy
ZWF0ZUhUTUxFbGVtZW50KGxvY2FsTmFtZVBhcnQoaWQoKSkpKTsKKyAgICBIVE1MRWxlbWVudElt
cGwgKmNsb25lID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KGdldERvY3VtZW50KCkt
PmNyZWF0ZUhUTUxFbGVtZW50KGxvY2FsTmFtZSgpKSk7CiAgICAgaWYgKCFjbG9uZSkKICAgICAg
ICAgcmV0dXJuIDA7CiAKQEAgLTMyNSwyNiArMjgyLDE3IEBAIERPTVN0cmluZyBIVE1MRWxlbWVu
dEltcGw6Om91dGVyVGV4dCgpIGMKIERvY3VtZW50RnJhZ21lbnRJbXBsICpIVE1MRWxlbWVudElt
cGw6OmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudChjb25zdCBET01TdHJpbmcgJmh0bWwpCiB7CiAg
ICAgLy8gdGhlIGZvbGxvd2luZyBpcyBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIGRlZmluaXRpb24g
YXMgdXNlZCBieSBJRQotICAgIGlmKCBlbmRUYWdSZXF1aXJlbWVudChpZCgpKSA9PSBGT1JCSURE
RU4gKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAvLyBJRSBkaXNhbGxvd3MgaW5uZXJIVE1M
IG9uIGlubGluZSBlbGVtZW50cy4gSSBkb24ndCBzZWUgd2h5IHdlIHNob3VsZCBoYXZlIHRoaXMg
cmVzdHJpY3Rpb24sIGFzIG91cgotICAgIC8vIGRodG1sIGVuZ2luZSBjYW4gY29wZSB3aXRoIGl0
LiBMYXJzCi0gICAgLy9pZiAoIGlzSW5saW5lKCkgKSByZXR1cm4gZmFsc2U7Ci0gICAgc3dpdGNo
KCBpZCgpICkgewotICAgICAgICBjYXNlIElEX0NPTDoKLSAgICAgICAgY2FzZSBJRF9DT0xHUk9V
UDoKLSAgICAgICAgY2FzZSBJRF9GUkFNRVNFVDoKLSAgICAgICAgY2FzZSBJRF9IRUFEOgotICAg
ICAgICBjYXNlIElEX1NUWUxFOgotICAgICAgICBjYXNlIElEX1RJVExFOgotICAgICAgICAgICAg
cmV0dXJuIE5VTEw7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9
Ci0gICAgaWYgKCAhZ2V0RG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSApCi0gICAgICAgIHJl
dHVybiBOVUxMOworICAgIGlmIChlbmRUYWdSZXF1aXJlbWVudCgpID09IEZPUkJJRERFTikKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6Y29sKCkp
IHx8IGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmNvbGdyb3VwKCkpIHx8IGhhc0xvY2FsTmFtZShI
VE1MTmFtZXM6OmZyYW1lc2V0KCkpIHx8CisgICAgICAgIGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6
OmhlYWQoKSkgfHwgaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6c3R5bGUoKSkgfHwgaGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6dGl0bGUoKSkpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKCFn
ZXREb2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpKQorICAgICAgICByZXR1cm4gMDsKIAotICAg
IERvY3VtZW50RnJhZ21lbnRJbXBsICpmcmFnbWVudCA9IG5ldyBEb2N1bWVudEZyYWdtZW50SW1w
bCggZG9jUHRyKCkgKTsKKyAgICBEb2N1bWVudEZyYWdtZW50SW1wbCAqZnJhZ21lbnQgPSBuZXcg
RG9jdW1lbnRGcmFnbWVudEltcGwoZG9jUHRyKCkpOwogICAgIGZyYWdtZW50LT5yZWYoKTsKICAg
ICB7CiAgICAgICAgIEhUTUxUb2tlbml6ZXIgdG9rKGRvY1B0cigpLCBmcmFnbWVudCk7CkBAIC0z
NTgsMTQgKzMwNiwxNCBAQCBEb2N1bWVudEZyYWdtZW50SW1wbCAqSFRNTEVsZW1lbnRJbXBsOjpj
CiAgICAgaW50IGlnbm9yZWRFeGNlcHRpb25Db2RlOwogCiAgICAgLy8gd2UgbmVlZCB0byBwb3Ag
PGh0bWw+IGFuZCA8Ym9keT4gZWxlbWVudHMgYW5kIHJlbW92ZSA8aGVhZD4gdG8KLSAgICAvLyBh
Y2NvbWFkYXRlIGZvbGtzIHBhc3NpbmcgY29tcGxldGUgSFRNTCBkb2N1bWVudHMgdG8gbWFrZSB0
aGUKKyAgICAvLyBhY2NvbW1vZGF0ZSBmb2xrcyBwYXNzaW5nIGNvbXBsZXRlIEhUTUwgZG9jdW1l
bnRzIHRvIG1ha2UgdGhlCiAgICAgLy8gY2hpbGQgb2YgYW4gZWxlbWVudC4KIAogICAgIE5vZGVJ
bXBsICpuZXh0Tm9kZTsKICAgICBmb3IgKE5vZGVJbXBsICpub2RlID0gZnJhZ21lbnQtPmZpcnN0
Q2hpbGQoKTsgbm9kZSAhPSBOVUxMOyBub2RlID0gbmV4dE5vZGUpIHsKICAgICAgICAgbmV4dE5v
ZGUgPSBub2RlLT5uZXh0U2libGluZygpOwogCW5vZGUtPnJlZigpOwotICAgICAgICBpZiAobm9k
ZS0+aWQoKSA9PSBJRF9IVE1MIHx8IG5vZGUtPmlkKCkgPT0gSURfQk9EWSkgeworICAgICAgICBp
ZiAobm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omh0bWwoKSkgfHwgbm9kZS0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OmJvZHkoKSkpIHsKIAkgICAgTm9kZUltcGwgKmZpcnN0Q2hpbGQgPSBub2Rl
LT5maXJzdENoaWxkKCk7CiAgICAgICAgICAgICBpZiAoZmlyc3RDaGlsZCAhPSBOVUxMKSB7CiAg
ICAgICAgICAgICAgICAgbmV4dE5vZGUgPSBmaXJzdENoaWxkOwpAQCAtMzc5LDkgKzMyNyw5IEBA
IERvY3VtZW50RnJhZ21lbnRJbXBsICpIVE1MRWxlbWVudEltcGw6OmMKICAgICAgICAgICAgICAg
ICBjaGlsZC0+ZGVyZWYoKTsKIAkgICAgfQogICAgICAgICAgICAgZnJhZ21lbnQtPnJlbW92ZUNo
aWxkKG5vZGUsIGlnbm9yZWRFeGNlcHRpb25Db2RlKTsKLQl9IGVsc2UgaWYgKG5vZGUtPmlkKCkg
PT0gSURfSEVBRCkgeworCX0gZWxzZSBpZiAobm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omhl
YWQoKSkpCiAJICAgIGZyYWdtZW50LT5yZW1vdmVDaGlsZChub2RlLCBpZ25vcmVkRXhjZXB0aW9u
Q29kZSk7Ci0JfQorCiAgICAgICAgIC8vIEltcG9ydGFudCB0byBkbyB0aGlzIGRlcmVmIGFmdGVy
IHJlbW92ZUNoaWxkLCBiZWNhdXNlIGlmIHRoZSBvbmx5IHRoaW5nCiAgICAgICAgIC8vIGtlZXBp
bmcgYSBub2RlIGFyb3VuZCBpcyBhIHBhcmVudCB0aGF0IGlzIG5vbi0wLCByZW1vdmVDaGlsZCB3
aWxsIG5vdAogICAgICAgICAvLyBkZWxldGUgdGhlIG5vZGUuIFRoaXMgd29ya3MgZmluZSBpbiBK
YXZhU2NyaXB0IGJlY2F1c2UgdGhlcmUncyBhbHdheXMKQEAgLTQwMCw3ICszNDgsNyBAQCBEb2N1
bWVudEZyYWdtZW50SW1wbCAqSFRNTEVsZW1lbnRJbXBsOjpjCiAKIHZvaWQgSFRNTEVsZW1lbnRJ
bXBsOjpzZXRJbm5lckhUTUwoY29uc3QgRE9NU3RyaW5nICZodG1sLCBpbnQgJmV4Y2VwdGlvbikK
IHsKLSAgICBEb2N1bWVudEZyYWdtZW50SW1wbCAqZnJhZ21lbnQgPSBjcmVhdGVDb250ZXh0dWFs
RnJhZ21lbnQoIGh0bWwgKTsKKyAgICBEb2N1bWVudEZyYWdtZW50SW1wbCAqZnJhZ21lbnQgPSBj
cmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoaHRtbCk7CiAgICAgaWYgKGZyYWdtZW50ID09IE5VTEwp
IHsKIAlleGNlcHRpb24gPSBET01FeGNlcHRpb246Ok5PX01PRElGSUNBVElPTl9BTExPV0VEX0VS
UjsKICAgICAgICAgcmV0dXJuOwpAQCAtNDE4LDcgKzM2Niw3IEBAIHZvaWQgSFRNTEVsZW1lbnRJ
bXBsOjpzZXRPdXRlckhUTUwoY29uc3QKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBIVE1M
RWxlbWVudEltcGwgKnBhcmVudCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCAqPihwKTsK
LSAgICBEb2N1bWVudEZyYWdtZW50SW1wbCAqZnJhZ21lbnQgPSBwYXJlbnQtPmNyZWF0ZUNvbnRl
eHR1YWxGcmFnbWVudCggaHRtbCApOworICAgIERvY3VtZW50RnJhZ21lbnRJbXBsICpmcmFnbWVu
dCA9IHBhcmVudC0+Y3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KGh0bWwpOwogCiAgICAgaWYgKCFm
cmFnbWVudCkgewogCWV4Y2VwdGlvbiA9IERPTUV4Y2VwdGlvbjo6Tk9fTU9ESUZJQ0FUSU9OX0FM
TE9XRURfRVJSOwpAQCAtNDM0LDI5ICszODIsMTcgQEAgdm9pZCBIVE1MRWxlbWVudEltcGw6OnNl
dE91dGVySFRNTChjb25zdAogdm9pZCBIVE1MRWxlbWVudEltcGw6OnNldElubmVyVGV4dChjb25z
dCBET01TdHJpbmcgJnRleHQsIGludCAmZXhjZXB0aW9uKQogewogICAgIC8vIGZvbGxvd2luZyB0
aGUgSUUgc3BlY3MuCi0gICAgaWYgKGVuZFRhZ1JlcXVpcmVtZW50KGlkKCkpID09IEZPUkJJRERF
TikgeworICAgIGlmIChlbmRUYWdSZXF1aXJlbWVudCgpID09IEZPUkJJRERFTikgewogCWV4Y2Vw
dGlvbiA9IERPTUV4Y2VwdGlvbjo6Tk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgLy8gSUUgZGlzYWxsb3dzIGlubmVyVGV4dCBvbiBpbmxp
bmUgZWxlbWVudHMuIEkgZG9uJ3Qgc2VlIHdoeSB3ZSBzaG91bGQgaGF2ZSB0aGlzIHJlc3RyaWN0
aW9uLCBhcyBvdXIKLSAgICAvLyBkaHRtbCBlbmdpbmUgY2FuIGNvcGUgd2l0aCBpdC4gTGFycwot
ICAgIC8vaWYgKCBpc0lubGluZSgpICkgcmV0dXJuIGZhbHNlOwotICAgIHN3aXRjaCggaWQoKSAp
IHsKLSAgICAgICAgY2FzZSBJRF9DT0w6Ci0gICAgICAgIGNhc2UgSURfQ09MR1JPVVA6Ci0gICAg
ICAgIGNhc2UgSURfRlJBTUVTRVQ6Ci0gICAgICAgIGNhc2UgSURfSEVBRDoKLSAgICAgICAgY2Fz
ZSBJRF9IVE1MOgotICAgICAgICBjYXNlIElEX1RBQkxFOgotICAgICAgICBjYXNlIElEX1RCT0RZ
OgotICAgICAgICBjYXNlIElEX1RGT09UOgotICAgICAgICBjYXNlIElEX1RIRUFEOgotICAgICAg
ICBjYXNlIElEX1RSOgotICAgICAgICAgICAgZXhjZXB0aW9uID0gRE9NRXhjZXB0aW9uOjpOT19N
T0RJRklDQVRJT05fQUxMT1dFRF9FUlI7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsKKyAgICBpZiAoaGFzTG9jYWxOYW1lKEhUTUxOYW1l
czo6Y29sKCkpIHx8IGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmNvbGdyb3VwKCkpIHx8IGhhc0xv
Y2FsTmFtZShIVE1MTmFtZXM6OmZyYW1lc2V0KCkpIHx8CisgICAgICAgIGhhc0xvY2FsTmFtZShI
VE1MTmFtZXM6OmhlYWQoKSkgfHwgaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6aHRtbCgpKSB8fCBo
YXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0YWJsZSgpKSB8fCAKKyAgICAgICAgaGFzTG9jYWxOYW1l
KEhUTUxOYW1lczo6dGJvZHkoKSkgfHwgaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dGZvb3QoKSkg
fHwgaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dGhlYWQoKSkgfHwKKyAgICAgICAgaGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6dHIoKSkpIHsKKyAgICAgICAgZXhjZXB0aW9uID0gRE9NRXhjZXB0aW9u
OjpOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI7CisgICAgICAgIHJldHVybjsKICAgICB9CiAK
ICAgICByZW1vdmVDaGlsZHJlbigpOwpAQCAtNDY2LDI1ICs0MDIsMTcgQEAgdm9pZCBIVE1MRWxl
bWVudEltcGw6OnNldElubmVyVGV4dChjb25zdAogdm9pZCBIVE1MRWxlbWVudEltcGw6OnNldE91
dGVyVGV4dChjb25zdCBET01TdHJpbmcgJnRleHQsIGludCAmZXhjZXB0aW9uKQogewogICAgIC8v
IGZvbGxvd2luZyB0aGUgSUUgc3BlY3MuCi0gICAgaWYoIGVuZFRhZ1JlcXVpcmVtZW50KGlkKCkp
ID09IEZPUkJJRERFTiApIHsKKyAgICBpZiAoZW5kVGFnUmVxdWlyZW1lbnQoKSA9PSBGT1JCSURE
RU4pIHsKIAlleGNlcHRpb24gPSBET01FeGNlcHRpb246Ok5PX01PRElGSUNBVElPTl9BTExPV0VE
X0VSUjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBzd2l0Y2goIGlkKCkgKSB7Ci0gICAg
ICAgIGNhc2UgSURfQ09MOgotICAgICAgICBjYXNlIElEX0NPTEdST1VQOgotICAgICAgICBjYXNl
IElEX0ZSQU1FU0VUOgotICAgICAgICBjYXNlIElEX0hFQUQ6Ci0gICAgICAgIGNhc2UgSURfSFRN
TDoKLSAgICAgICAgY2FzZSBJRF9UQUJMRToKLSAgICAgICAgY2FzZSBJRF9UQk9EWToKLSAgICAg
ICAgY2FzZSBJRF9URk9PVDoKLSAgICAgICAgY2FzZSBJRF9USEVBRDoKLSAgICAgICAgY2FzZSBJ
RF9UUjoKLSAgICAgICAgICAgIGV4Y2VwdGlvbiA9IERPTUV4Y2VwdGlvbjo6Tk9fTU9ESUZJQ0FU
SU9OX0FMTE9XRURfRVJSOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICBpZiAoaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6Y29s
KCkpIHx8IGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmNvbGdyb3VwKCkpIHx8IGhhc0xvY2FsTmFt
ZShIVE1MTmFtZXM6OmZyYW1lc2V0KCkpIHx8CisgICAgICAgIGhhc0xvY2FsTmFtZShIVE1MTmFt
ZXM6OmhlYWQoKSkgfHwgaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6aHRtbCgpKSB8fCBoYXNMb2Nh
bE5hbWUoSFRNTE5hbWVzOjp0YWJsZSgpKSB8fCAKKyAgICAgICAgaGFzTG9jYWxOYW1lKEhUTUxO
YW1lczo6dGJvZHkoKSkgfHwgaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dGZvb3QoKSkgfHwgaGFz
TG9jYWxOYW1lKEhUTUxOYW1lczo6dGhlYWQoKSkgfHwKKyAgICAgICAgaGFzTG9jYWxOYW1lKEhU
TUxOYW1lczo6dHIoKSkpIHsKKyAgICAgICAgZXhjZXB0aW9uID0gRE9NRXhjZXB0aW9uOjpOT19N
T0RJRklDQVRJT05fQUxMT1dFRF9FUlI7CisgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBO
b2RlSW1wbCAqcGFyZW50ID0gcGFyZW50Tm9kZSgpOwpAQCAtNTI1LDE3ICs0NTMsNiBAQCB2b2lk
IEhUTUxFbGVtZW50SW1wbDo6c2V0T3V0ZXJUZXh0KGNvbnN0CiAgICAgfQogfQogCi0KLURPTVN0
cmluZyBIVE1MRWxlbWVudEltcGw6Om5hbWVzcGFjZVVSSSgpIGNvbnN0Ci17Ci0gICAgLy8gRm9y
IEhUTUwgZG9jdW1lbnRzLCB3ZSB0cmVhdCBIVE1MIGVsZW1lbnRzIGFzIGhhdmluZyBubyBuYW1l
c3BhY2UuIEJ1dCBmb3IgWE1MIGRvY3VtZW50cwotICAgIC8vIHRoZSBlbGVtZW50cyBoYXZlIHRo
ZSBuYW1lc3BhY2UgZGVmaW5lZCBpbiB0aGUgWEhUTUwgc3BlYwotICAgIGlmIChnZXREb2N1bWVu
dCgpLT5pc0hUTUxEb2N1bWVudCgpKQotICAgICAgICByZXR1cm4gRE9NU3RyaW5nKCk7Ci0gICAg
ZWxzZQotICAgICAgICByZXR1cm4gWEhUTUxfTkFNRVNQQUNFOwotfQotCiB2b2lkIEhUTUxFbGVt
ZW50SW1wbDo6YWRkSFRNTEFsaWdubWVudChNYXBwZWRBdHRyaWJ1dGVJbXBsKiBhdHRyKQogewog
ICAgIC8vcURlYnVnKCJhbGlnbm1lbnQgaXMgJXMiLCBhbGlnbm1lbnQuc3RyaW5nKCkubGF0aW4x
KCkgKTsKQEAgLTY4Miw5ICs1OTksOSBAQCBET01TdHJpbmcgSFRNTEVsZW1lbnRJbXBsOjp0b1N0
cmluZygpIGNvCiAJRE9NU3RyaW5nIHJlc3VsdCA9IG9wZW5UYWdTdGFydFRvU3RyaW5nKCk7CiAJ
cmVzdWx0ICs9ICI+IjsKIAotCWlmIChlbmRUYWdSZXF1aXJlbWVudChpZCgpKSA9PSBSRVFVSVJF
RCkgeworCWlmIChlbmRUYWdSZXF1aXJlbWVudCgpID09IFJFUVVJUkVEKSB7CiAJICAgIHJlc3Vs
dCArPSAiPC8iOwotCSAgICByZXN1bHQgKz0gdGFnTmFtZSgpOworCSAgICByZXN1bHQgKz0gbm9k
ZU5hbWUoKTsKIAkgICAgcmVzdWx0ICs9ICI+IjsKIAl9CiAKQEAgLTY5NCw3ICs2MTEsNyBAQCBE
T01TdHJpbmcgSFRNTEVsZW1lbnRJbXBsOjp0b1N0cmluZygpIGNvCiAgICAgcmV0dXJuIEVsZW1l
bnRJbXBsOjp0b1N0cmluZygpOwogfQogCi1ET01TdHJpbmcgSFRNTEVsZW1lbnRJbXBsOjppZERP
TSgpIGNvbnN0CitET01TdHJpbmcgSFRNTEVsZW1lbnRJbXBsOjppZCgpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIGdldEF0dHJpYnV0ZShBVFRSX0lEKTsKIH0KQEAgLTc0OSwxNSArNjY2LDMgQEAgU2hh
cmVkUHRyPEhUTUxDb2xsZWN0aW9uSW1wbD4gSFRNTEVsZW1lbgogICAgIHJldHVybiBTaGFyZWRQ
dHI8SFRNTENvbGxlY3Rpb25JbXBsPihuZXcgSFRNTENvbGxlY3Rpb25JbXBsKHRoaXMsIEhUTUxD
b2xsZWN0aW9uSW1wbDo6Tk9ERV9DSElMRFJFTikpOwogfQogCi0vLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0KLUhUTUxHZW5lcmljRWxlbWVudEltcGw6OkhUTUxHZW5lcmljRWxlbWVudEltcGwoRG9jdW1l
bnRQdHIgKmRvYywgdXNob3J0IGkpCi0gICAgOiBIVE1MRWxlbWVudEltcGwoZG9jKQotewotICAg
IG1fZWxlbWVudElkID0gaTsKLX0KLQotTm9kZUltcGw6OklkIEhUTUxHZW5lcmljRWxlbWVudElt
cGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9lbGVtZW50SWQ7Ci19CkluZGV4OiBraHRt
bC9odG1sL2h0bWxfZWxlbWVudGltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3Qv
V2ViQ29yZS9raHRtbC9odG1sL2h0bWxfZWxlbWVudGltcGwuaCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS4zNQpkaWZmIC11IC1wIC1yMS4zNSBraHRtbC9odG1sL2h0bWxfZWxlbWVudGltcGwuaAot
LS0ga2h0bWwvaHRtbC9odG1sX2VsZW1lbnRpbXBsLmgJMTEgTWF5IDIwMDUgMDU6NDk6MzQgLTAw
MDAJMS4zNQorKysga2h0bWwvaHRtbC9odG1sX2VsZW1lbnRpbXBsLmgJMjAgSnVuIDIwMDUgMjA6
NTU6MzQgLTAwMDAKQEAgLTI1LDI3ICsyNSwyNCBAQAogI2RlZmluZSBIVE1MX0VMRU1FTlRJTVBM
X0gKIAogI2luY2x1ZGUgInhtbC9kb21fZWxlbWVudGltcGwuaCIKLSNpbmNsdWRlIDxxcHRyZGlj
dC5oPgorI2luY2x1ZGUgImh0bWxuYW1lcy5oIgogCiBuYW1lc3BhY2UgRE9NIHsKIAogY2xhc3Mg
RG9jdW1lbnRGcmFnbWVudEltcGw7CiBjbGFzcyBET01TdHJpbmc7CiBjbGFzcyBIVE1MQ29sbGVj
dGlvbkltcGw7Ci0gICAgCisKK2VudW0gSFRNTFRhZ1N0YXR1cyB7IE9QVElPTkFMLCBSRVFVSVJF
RCwgRk9SQklEREVOIH07CisKIGNsYXNzIEhUTUxFbGVtZW50SW1wbCA6IHB1YmxpYyBTdHlsZWRF
bGVtZW50SW1wbAogewogcHVibGljOgotICAgIEhUTUxFbGVtZW50SW1wbChEb2N1bWVudFB0ciAq
ZG9jKTsKLQorICAgIEhUTUxFbGVtZW50SW1wbChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1l
LCBEb2N1bWVudFB0ciAqZG9jKTsKICAgICB2aXJ0dWFsIH5IVE1MRWxlbWVudEltcGwoKTsKIAog
ICAgIHZpcnR1YWwgYm9vbCBpc0hUTUxFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQog
Ci0gICAgdmlydHVhbCBib29sIGlzSW5saW5lKCkgY29uc3Q7Ci0gICAgIAotICAgIHZpcnR1YWwg
SWQgaWQoKSBjb25zdCA9IDA7Ci0gICAgCiAgICAgdmlydHVhbCBib29sIG1hcFRvRW50cnkoSWQg
YXR0ciwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3Q7CiAgICAgdmlydHVhbCB2
b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwqIGF0dHIpOwogCkBA
IC01Myw3ICs1MCw3IEBAIHB1YmxpYzoKIAogICAgIFNoYXJlZFB0cjxIVE1MQ29sbGVjdGlvbklt
cGw+IGNoaWxkcmVuKCk7CiAgICAgCi0gICAgRE9NU3RyaW5nIGlkRE9NKCkgY29uc3Q7IC8vIHJl
bmFtZSB0byBpZCBhZnRlciBlbGltaW5hdGluZyBOb2RlSW1wbDo6aWQgc29tZSBkYXkKKyAgICBE
T01TdHJpbmcgaWQoKSBjb25zdDsKICAgICB2b2lkIHNldElkKGNvbnN0IERPTVN0cmluZyAmdmFs
dWUpOwogICAgIERPTVN0cmluZyB0aXRsZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0VGl0bGUoY29u
c3QgRE9NU3RyaW5nICZ2YWx1ZSk7CkBAIC03Myw4ICs3MCw2IEBAIHB1YmxpYzoKICAgICB2b2lk
IHNldE91dGVySFRNTChjb25zdCBET01TdHJpbmcgJmh0bWwsIGludCAmZXhjZXB0aW9uKTsKICAg
ICB2b2lkIHNldElubmVyVGV4dChjb25zdCBET01TdHJpbmcgJnRleHQsIGludCAmZXhjZXB0aW9u
KTsKICAgICB2b2lkIHNldE91dGVyVGV4dChjb25zdCBET01TdHJpbmcgJnRleHQsIGludCAmZXhj
ZXB0aW9uKTsKLQotICAgIHZpcnR1YWwgRE9NU3RyaW5nIG5hbWVzcGFjZVVSSSgpIGNvbnN0Owog
ICAgIAogICAgIHZpcnR1YWwgYm9vbCBpc0ZvY3VzYWJsZSgpIGNvbnN0OwogICAgIHZpcnR1YWwg
Ym9vbCBpc0NvbnRlbnRFZGl0YWJsZSgpIGNvbnN0OwpAQCAtODksMjIgKzg0LDE2IEBAIHB1Ymxp
YzoKIAogICAgIHZpcnR1YWwgRE9NU3RyaW5nIHRvU3RyaW5nKCkgY29uc3Q7CiAKKyAgICAvLyBT
YW1lIHZhbHVlcyBhcyA8c3Bhbj4uICBUaGlzIHdheSBjdXN0b20gdGFnIG5hbWUgZWxlbWVudHMg
d2lsbCBiZWhhdmUgbGlrZSBpbmxpbmUgc3BhbnMuCisgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVz
IGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gUkVRVUlSRUQ7IH0KKyAgICB2aXJ0
dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDE7IH0KKyAgICAKIHByb3RlY3Rl
ZDoKIAogICAgIC8vIGZvciBJTUcsIE9CSkVDVCBhbmQgQVBQTEVUCiAgICAgdm9pZCBhZGRIVE1M
QWxpZ25tZW50KE1hcHBlZEF0dHJpYnV0ZUltcGwqIGh0bWxBdHRyKTsKIH07CiAKLWNsYXNzIEhU
TUxHZW5lcmljRWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTEVsZW1lbnRJbXBsCi17Ci1wdWJsaWM6
Ci0gICAgSFRNTEdlbmVyaWNFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCB1c2hvcnQgZWxl
bWVudElkKTsKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7Ci0KLXByb3RlY3RlZDoKLSAgICB1
c2hvcnQgbV9lbGVtZW50SWQ7Ci19OwotCiB9IC8vbmFtZXNwYWNlCiAKICNlbmRpZgpJbmRleDog
a2h0bWwvaHRtbC9odG1sX2Zvcm1pbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfZm9ybWltcGwuY3BwLHYKcmV0cmlldmluZyByZXZp
c2lvbiAxLjE2MgpkaWZmIC11IC1wIC1yMS4xNjIga2h0bWwvaHRtbC9odG1sX2Zvcm1pbXBsLmNw
cAotLS0ga2h0bWwvaHRtbC9odG1sX2Zvcm1pbXBsLmNwcAkxNyBKdW4gMjAwNSAxODoxNDoyNyAt
MDAwMAkxLjE2MgorKysga2h0bWwvaHRtbC9odG1sX2Zvcm1pbXBsLmNwcAkyMCBKdW4gMjAwNSAy
MDo1NTozNyAtMDAwMApAQCAtMTAzLDcgKzEwMyw3IEBAIHByaXZhdGU6CiB9OwogCiBIVE1MRm9y
bUVsZW1lbnRJbXBsOjpIVE1MRm9ybUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0gICAg
OiBIVE1MRWxlbWVudEltcGwoZG9jKQorICAgIDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6
Zm9ybSgpLCBkb2MpCiB7CiAgICAgY29sbGVjdGlvbkluZm8gPSAwOwogICAgIG1fcG9zdCA9IGZh
bHNlOwpAQCAtMTMwLDExICsxMzAsNiBAQCBIVE1MRm9ybUVsZW1lbnRJbXBsOjp+SFRNTEZvcm1F
bGVtZW50SW1wCiAgICAgICAgIGltZ0VsZW1lbnRzW2ldLT5tX2Zvcm0gPSAwOwogfQogCi1Ob2Rl
SW1wbDo6SWQgSFRNTEZvcm1FbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJ
RF9GT1JNOwotfQotCiAjaWYgQVBQTEVfQ0hBTkdFUwogCiBib29sIEhUTUxGb3JtRWxlbWVudElt
cGw6OmZvcm1Xb3VsZEhhdmVTZWN1cmVTdWJtaXNzaW9uKGNvbnN0IERPTVN0cmluZyAmdXJsKQpA
QCAtMTkyLDcgKzE4Nyw3IEBAIHZvaWQgSFRNTEZvcm1FbGVtZW50SW1wbDo6c3VibWl0Q2xpY2so
KQogewogICAgIGJvb2wgc3VibWl0Rm91bmQgPSBmYWxzZTsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgZm9ybUVsZW1lbnRzLmNvdW50KCk7ICsraSkgewotICAgICAgICBpZiAoZm9ybUVs
ZW1lbnRzW2ldLT5pZCgpID09IElEX0lOUFVUKSB7CisgICAgICAgIGlmIChmb3JtRWxlbWVudHNb
aV0tPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmlucHV0KCkpKSB7CiAgICAgICAgICAgICBIVE1M
SW5wdXRFbGVtZW50SW1wbCAqZWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnRJ
bXBsICo+KGZvcm1FbGVtZW50c1tpXSk7CiAgICAgICAgICAgICBpZiAoZWxlbWVudC0+aXNTdWNj
ZXNzZnVsU3VibWl0QnV0dG9uKCkgJiYgZWxlbWVudC0+cmVuZGVyZXIoKSkgewogICAgICAgICAg
ICAgICAgIHN1Ym1pdEZvdW5kID0gdHJ1ZTsKQEAgLTM5OSw3ICszOTQsNyBAQCBib29sIEhUTUxG
b3JtRWxlbWVudEltcGw6OmZvcm1EYXRhKEZvcm1ECiAKICAgICAgICAgICAgICAgICAgICAgLy8g
aWYgdGhlIGN1cnJlbnQgdHlwZSBpcyBGSUxFLCB0aGVuIHdlIGFsc28gbmVlZCB0bwogICAgICAg
ICAgICAgICAgICAgICAvLyBpbmNsdWRlIHRoZSBmaWxlbmFtZQotICAgICAgICAgICAgICAgICAg
ICBpZiAoY3VycmVudC0+bm9kZVR5cGUoKSA9PSBOb2RlOjpFTEVNRU5UX05PREUgJiYgY3VycmVu
dC0+aWQoKSA9PSBJRF9JTlBVVCAmJgorICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudC0+
aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6aW5wdXQoKSkgJiYKICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnRJbXBsKj4oY3VycmVudCktPmlucHV0VHlw
ZSgpID09IEhUTUxJbnB1dEVsZW1lbnRJbXBsOjpGSUxFKQogICAgICAgICAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgICAgICAgICBRU3RyaW5nIHBhdGggPSBzdGF0aWNfY2FzdDxIVE1M
SW5wdXRFbGVtZW50SW1wbCo+KGN1cnJlbnQpLT52YWx1ZSgpLnN0cmluZygpOwpAQCAtNTQ3LDcg
KzU0Miw3IEBAIHZvaWQgSFRNTEZvcm1FbGVtZW50SW1wbDo6c3VibWl0KCBib29sIGEKICNpZiBB
UFBMRV9DSEFOR0VTCiAgICAgICAgIC8vIE91ciBhcHAgbmVlZHMgdG8gZ2V0IGZvcm0gdmFsdWVz
IGZvciBwYXNzd29yZCBmaWVsZHMgZm9yIGRvaW5nIHBhc3N3b3JkIGF1dG9jb21wbGV0ZSwKICAg
ICAgICAgLy8gc28gd2UgYXJlIG1vcmUgbGVuaWVudCBpbiBwdXNoaW5nIHZhbHVlcywgYW5kIGxl
dCB0aGUgYXBwIGRlY2lkZSB3aGF0IHRvIHNhdmUgd2hlbi4KLSAgICAgICAgaWYgKGN1cnJlbnQt
PmlkKCkgPT0gSURfSU5QVVQpIHsKKyAgICAgICAgaWYgKGN1cnJlbnQtPmhhc0xvY2FsTmFtZShI
VE1MTmFtZXM6OmlucHV0KCkpKSB7CiAgICAgICAgICAgICBIVE1MSW5wdXRFbGVtZW50SW1wbCAq
aW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50SW1wbCo+KGN1cnJlbnQpOwogICAg
ICAgICAgICAgaWYgKGlucHV0LT5pbnB1dFR5cGUoKSA9PSBIVE1MSW5wdXRFbGVtZW50SW1wbDo6
VEVYVAogICAgICAgICAgICAgICAgIHx8IGlucHV0LT5pbnB1dFR5cGUoKSA9PSAgSFRNTElucHV0
RWxlbWVudEltcGw6OlBBU1NXT1JECkBAIC03MDksNyArNzA0LDcgQEAgdm9pZCBIVE1MRm9ybUVs
ZW1lbnRJbXBsOjpyYWRpb0NsaWNrZWQoIAogewogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBmb3JtRWxlbWVudHMuY291bnQoKTsgKytpKSB7CiAgICAgICAgIEhUTUxHZW5lcmljRm9ybUVs
ZW1lbnRJbXBsICpjdXJyZW50ID0gZm9ybUVsZW1lbnRzW2ldOwotICAgICAgICBpZiAoY3VycmVu
dC0+aWQoKSA9PSBJRF9JTlBVVCAmJgorICAgICAgICBpZiAoY3VycmVudC0+aGFzTG9jYWxOYW1l
KEhUTUxOYW1lczo6aW5wdXQoKSkgJiYKICAgICAgICAgICAgIHN0YXRpY19jYXN0PEhUTUxJbnB1
dEVsZW1lbnRJbXBsKj4oY3VycmVudCktPmlucHV0VHlwZSgpID09IEhUTUxJbnB1dEVsZW1lbnRJ
bXBsOjpSQURJTyAmJgogICAgICAgICAgICAgY3VycmVudCAhPSBjYWxsZXIgJiYgY3VycmVudC0+
Zm9ybSgpID09IGNhbGxlci0+Zm9ybSgpICYmIGN1cnJlbnQtPm5hbWUoKSA9PSBjYWxsZXItPm5h
bWUoKSkgewogICAgICAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudEltcGwqPihj
dXJyZW50KS0+c2V0Q2hlY2tlZChmYWxzZSk7CkBAIC04MzUsOCArODMwLDggQEAgdm9pZCBIVE1M
Rm9ybUVsZW1lbnRJbXBsOjpzZXRUYXJnZXQoY29ucwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAK
LUhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsOjpIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbChE
b2N1bWVudFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmKQotICAgIDogSFRNTEVsZW1l
bnRJbXBsKGRvYykKK0hUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsOjpIVE1MR2VuZXJpY0Zvcm1F
bGVtZW50SW1wbChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudFB0ciAqZG9j
LCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmKQorICAgIDogSFRNTEVsZW1lbnRJbXBsKHRhZ05hbWUs
IGRvYykKIHsKICAgICBtX2Rpc2FibGVkID0gbV9yZWFkT25seSA9IGZhbHNlOwogICAgIG1fZG9y
bWFudCA9IGZhbHNlOwpAQCAtOTM4LDkgKzkzMyw4IEBAIHZvaWQgSFRNTEdlbmVyaWNGb3JtRWxl
bWVudEltcGw6OnJlbW92ZWQKIEhUTUxGb3JtRWxlbWVudEltcGwgKkhUTUxHZW5lcmljRm9ybUVs
ZW1lbnRJbXBsOjpnZXRGb3JtKCkgY29uc3QKIHsKICAgICBOb2RlSW1wbCAqcCA9IHBhcmVudE5v
ZGUoKTsKLSAgICB3aGlsZShwKQotICAgIHsKLSAgICAgICAgaWYoIHAtPmlkKCkgPT0gSURfRk9S
TSApCisgICAgd2hpbGUocCkgeworICAgICAgICBpZiAocC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
OmZvcm0oKSkpCiAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50
SW1wbCAqPihwKTsKICAgICAgICAgcCA9IHAtPnBhcmVudE5vZGUoKTsKICAgICB9CkBAIC0xMTYw
LDcgKzExNTQsNyBAQCB2b2lkIEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsOjpzZXRUYWJJCiAv
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxCdXR0b25FbGVtZW50SW1wbDo6SFRNTEJ1dHRvbkVs
ZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIEhUTUxGb3JtRWxlbWVudEltcGwgKmYpCi0gICAg
OiBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbChkb2MsIGYpCisgICAgOiBIVE1MR2VuZXJpY0Zv
cm1FbGVtZW50SW1wbChIVE1MTmFtZXM6OmJ1dHRvbigpLCBkb2MsIGYpCiB7CiAgICAgbV90eXBl
ID0gU1VCTUlUOwogICAgIG1fZGlydHkgPSB0cnVlOwpAQCAtMTE3MSwxMSArMTE2NSw2IEBAIEhU
TUxCdXR0b25FbGVtZW50SW1wbDo6fkhUTUxCdXR0b25FbGVtZW4KIHsKIH0KIAotTm9kZUltcGw6
OklkIEhUTUxCdXR0b25FbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9C
VVRUT047Ci19Ci0KIERPTVN0cmluZyBIVE1MQnV0dG9uRWxlbWVudEltcGw6OnR5cGUoKSBjb25z
dAogewogICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoQVRUUl9UWVBFKTsKQEAgLTEyOTcsNyArMTI4
Niw3IEBAIHZvaWQgSFRNTEJ1dHRvbkVsZW1lbnRJbXBsOjpzZXRWYWx1ZShjb24KIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KIAogSFRNTEZpZWxkU2V0RWxlbWVudEltcGw6OkhUTUxGaWVsZFNldEVsZW1l
bnRJbXBsKERvY3VtZW50UHRyICpkb2MsIEhUTUxGb3JtRWxlbWVudEltcGwgKmYpCi0gICA6IEhU
TUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKGRvYywgZikKKyAgIDogSFRNTEdlbmVyaWNGb3JtRWxl
bWVudEltcGwoSFRNTE5hbWVzOjpmaWVsZHNldCgpLCBkb2MsIGYpCiB7CiB9CiAKQEAgLTEzMTAs
MTEgKzEyOTksNiBAQCBib29sIEhUTUxGaWVsZFNldEVsZW1lbnRJbXBsOjppc0ZvY3VzYWJsCiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTEZpZWxkU2V0RWxlbWVudElt
cGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfRklFTERTRVQ7Ci19Ci0KIERPTVN0cmlu
ZyBIVE1MRmllbGRTZXRFbGVtZW50SW1wbDo6dHlwZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuICJm
aWVsZHNldCI7CkBAIC0xMzI4LDggKzEzMTIsMjEgQEAgUmVuZGVyT2JqZWN0KiBIVE1MRmllbGRT
ZXRFbGVtZW50SW1wbDo6YwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MSW5wdXRFbGVtZW50
SW1wbDo6SFRNTElucHV0RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgSFRNTEZvcm1FbGVt
ZW50SW1wbCAqZikKLSAgICA6IEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKGRvYywgZiksIG1f
aW1hZ2VMb2FkZXIoMCksIG1fdmFsdWVNYXRjaGVzUmVuZGVyZXIoZmFsc2UpCisgICAgOiBIVE1M
R2VuZXJpY0Zvcm1FbGVtZW50SW1wbChIVE1MTmFtZXM6OmlucHV0KCksIGRvYywgZikKK3sKKyAg
ICBpbml0KCk7Cit9CisKK0hUTUxJbnB1dEVsZW1lbnRJbXBsOjpIVE1MSW5wdXRFbGVtZW50SW1w
bChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudFB0ciAqZG9jLCBIVE1MRm9y
bUVsZW1lbnRJbXBsICpmKQorICAgIDogSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwodGFnTmFt
ZSwgZG9jLCBmKQogeworICAgIGluaXQoKTsKK30KKwordm9pZCBIVE1MSW5wdXRFbGVtZW50SW1w
bDo6aW5pdCgpCit7CisgICAgbV9pbWFnZUxvYWRlciA9IDA7CisgICAgbV92YWx1ZU1hdGNoZXNS
ZW5kZXJlciA9IGZhbHNlOwogICAgIG1fdHlwZSA9IFRFWFQ7CiAgICAgbV9tYXhMZW4gPSAtMTsK
ICAgICBtX3NpemUgPSAyMDsKQEAgLTEzNDcsOCArMTM0NCw4IEBAIEhUTUxJbnB1dEVsZW1lbnRJ
bXBsOjpIVE1MSW5wdXRFbGVtZW50SW0KIAogICAgIG1fbWF4UmVzdWx0cyA9IC0xOwogCi0gICAg
aWYgKCBtX2Zvcm0gKQotICAgICAgICBtX2F1dG9jb21wbGV0ZSA9IGYtPmF1dG9Db21wbGV0ZSgp
OworICAgIGlmIChtX2Zvcm0pCisgICAgICAgIG1fYXV0b2NvbXBsZXRlID0gbV9mb3JtLT5hdXRv
Q29tcGxldGUoKTsKIH0KIAogSFRNTElucHV0RWxlbWVudEltcGw6On5IVE1MSW5wdXRFbGVtZW50
SW1wbCgpCkBAIC0xMzU3LDExICsxMzU0LDYgQEAgSFRNTElucHV0RWxlbWVudEltcGw6On5IVE1M
SW5wdXRFbGVtZW50SQogICAgIGRlbGV0ZSBtX2ltYWdlTG9hZGVyOwogfQogCi1Ob2RlSW1wbDo6
SWQgSFRNTElucHV0RWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfSU5Q
VVQ7Ci19Ci0KIHZvaWQgSFRNTElucHV0RWxlbWVudEltcGw6OnNldFR5cGUoY29uc3QgRE9NU3Ry
aW5nJiB0KQogewogICAgIHR5cGVFbnVtIG5ld1R5cGU7CkBAIC0yMzM3LDcgKzIzMjksNyBAQCB2
b2lkIEhUTUxJbnB1dEVsZW1lbnRJbXBsOjpzZXRVc2VNYXAoY29uCiAvLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCiAKIEhUTUxMYWJlbEVsZW1lbnRJbXBsOjpIVE1MTGFiZWxFbGVtZW50SW1wbChEb2N1bWVu
dFB0ciAqZG9jKQotICAgIDogSFRNTEVsZW1lbnRJbXBsKGRvYykKKyAgICA6IEhUTUxFbGVtZW50
SW1wbChIVE1MTmFtZXM6OmxhYmVsKCksIGRvYykKIHsKIH0KIApAQCAtMjM1MCwxMSArMjM0Miw2
IEBAIGJvb2wgSFRNTExhYmVsRWxlbWVudEltcGw6OmlzRm9jdXNhYmxlKCkKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MTGFiZWxFbGVtZW50SW1wbDo6aWQoKSBjb25z
dAotewotICAgIHJldHVybiBJRF9MQUJFTDsKLX0KLQogdm9pZCBIVE1MTGFiZWxFbGVtZW50SW1w
bDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqYXR0cikKIHsKICAg
ICBzd2l0Y2goYXR0ci0+aWQoKSkKQEAgLTI0MzEsNyArMjQxOCw3IEBAIHZvaWQgSFRNTExhYmVs
RWxlbWVudEltcGw6OnNldEh0bWxGb3IoY28KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogSFRNTExl
Z2VuZEVsZW1lbnRJbXBsOjpIVE1MTGVnZW5kRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywg
SFRNTEZvcm1FbGVtZW50SW1wbCAqZikKLTogSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwoZG9j
LCBmKQorOiBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbChIVE1MTmFtZXM6OmxlZ2VuZCgpLCBk
b2MsIGYpCiB7CiB9CiAKQEAgLTI0NDQsMTEgKzI0MzEsNiBAQCBib29sIEhUTUxMZWdlbmRFbGVt
ZW50SW1wbDo6aXNGb2N1c2FibGUoCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1Ob2RlSW1wbDo6
SWQgSFRNTExlZ2VuZEVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0xF
R0VORDsKLX0KLQogUmVuZGVyT2JqZWN0KiBIVE1MTGVnZW5kRWxlbWVudEltcGw6OmNyZWF0ZVJl
bmRlcmVyKFJlbmRlckFyZW5hKiBhcmVuYSwgUmVuZGVyU3R5bGUqIHN0eWxlKQogewogICAgIHJl
dHVybiBuZXcgKGFyZW5hKSBSZW5kZXJMZWdlbmQodGhpcyk7CkBAIC0yNDgyLDggKzI0NjQsMjAg
QEAgdm9pZCBIVE1MTGVnZW5kRWxlbWVudEltcGw6OnNldEFsaWduKGNvbgogLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQogCiBIVE1MU2VsZWN0RWxlbWVudEltcGw6OkhUTUxTZWxlY3RFbGVtZW50SW1wbChE
b2N1bWVudFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmKQotICAgIDogSFRNTEdlbmVy
aWNGb3JtRWxlbWVudEltcGwoZG9jLCBmKSwgbV9vcHRpb25zKDApCisgICAgOiBIVE1MR2VuZXJp
Y0Zvcm1FbGVtZW50SW1wbChIVE1MTmFtZXM6OnNlbGVjdCgpLCBkb2MsIGYpLCBtX29wdGlvbnMo
MCkKK3sKKyAgICBpbml0KCk7Cit9CisKK0hUTUxTZWxlY3RFbGVtZW50SW1wbDo6SFRNTFNlbGVj
dEVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50UHRyICpk
b2MsIEhUTUxGb3JtRWxlbWVudEltcGwgKmYpCisgICAgOiBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50
SW1wbCh0YWdOYW1lLCBkb2MsIGYpLCBtX29wdGlvbnMoMCkKK3sKKyAgICBpbml0KCk7Cit9CisK
K3ZvaWQgSFRNTFNlbGVjdEVsZW1lbnRJbXBsOjppbml0KCkKIHsKKyAgICBtX29wdGlvbnMgPSAw
OwogICAgIG1fbXVsdGlwbGUgPSBmYWxzZTsKICAgICBtX3JlY2FsY0xpc3RJdGVtcyA9IGZhbHNl
OwogICAgIC8vIDAgbWVhbnMgaW52YWxpZCAoaS5lLiBub3Qgc2V0KQpAQCAtMjUwMCwxMSArMjQ5
NCw2IEBAIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6fkhUTUxTZWxlY3RFbGVtZW4KICAgICB9CiB9
CiAKLU5vZGVJbXBsOjpJZCBIVE1MU2VsZWN0RWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gSURfU0VMRUNUOwotfQotCiB2b2lkIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6cmVj
YWxjU3R5bGUoIFN0eWxlQ2hhbmdlIGNoICkKIHsKICAgICBpZiAoaGFzQ2hhbmdlZENoaWxkKCkg
JiYgbV9yZW5kZXIpIHsKQEAgLTI1MjYsNyArMjUxNSw3IEBAIGxvbmcgSFRNTFNlbGVjdEVsZW1l
bnRJbXBsOjpzZWxlY3RlZEluZGUKICAgICB1aW50IG8gPSAwOwogICAgIFFNZW1BcnJheTxIVE1M
R2VuZXJpY0Zvcm1FbGVtZW50SW1wbCo+IGl0ZW1zID0gbGlzdEl0ZW1zKCk7CiAgICAgZm9yICh1
bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBpdGVtcy5zaXplKCk7IGkrKykgewotICAgICAgICBpZiAo
aXRlbXNbaV0tPmlkKCkgPT0gSURfT1BUSU9OKSB7CisgICAgICAgIGlmIChpdGVtc1tpXS0+aGFz
TG9jYWxOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpKSB7CiAgICAgICAgICAgICBpZiAoc3RhdGlj
X2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnRJbXBsKj4oaXRlbXNbaV0pLT5zZWxlY3RlZCgpKQogICAg
ICAgICAgICAgICAgIHJldHVybiBvOwogICAgICAgICAgICAgbysrOwpAQCAtMjU0Miw3ICsyNTMx
LDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudEltcGw6OnNldFNlbGVjdGVkSQogICAgIFFNZW1B
cnJheTxIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbCo+IGl0ZW1zID0gbGlzdEl0ZW1zKCk7CiAg
ICAgaW50IGxpc3RJbmRleDsKICAgICBmb3IgKGxpc3RJbmRleCA9IDA7IGxpc3RJbmRleCA8IGlu
dChpdGVtcy5zaXplKCkpOyBsaXN0SW5kZXgrKykgewotICAgICAgICBpZiAoaXRlbXNbbGlzdElu
ZGV4XS0+aWQoKSA9PSBJRF9PUFRJT04pCisgICAgICAgIGlmIChpdGVtc1tsaXN0SW5kZXhdLT5o
YXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvcHRpb24oKSkpCiAgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxIVE1MT3B0aW9uRWxlbWVudEltcGwqPihpdGVtc1tsaXN0SW5kZXhdKS0+c2V0U2VsZWN0ZWQo
ZmFsc2UpOwogICAgIH0KICAgICBsaXN0SW5kZXggPSBvcHRpb25Ub0xpc3RJbmRleChpbmRleCk7
CkBAIC0yNTU4LDcgKzI1NDcsNyBAQCBsb25nIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6bGVuZ3Ro
KCkgY29uCiAgICAgdWludCBpOwogICAgIFFNZW1BcnJheTxIVE1MR2VuZXJpY0Zvcm1FbGVtZW50
SW1wbCo+IGl0ZW1zID0gbGlzdEl0ZW1zKCk7CiAgICAgZm9yIChpID0gMDsgaSA8IGl0ZW1zLnNp
emUoKTsgaSsrKSB7Ci0gICAgICAgIGlmIChpdGVtc1tpXS0+aWQoKSA9PSBJRF9PUFRJT04pCisg
ICAgICAgIGlmIChpdGVtc1tpXS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpKQog
ICAgICAgICAgICAgbGVuKys7CiAgICAgfQogICAgIHJldHVybiBsZW47CkBAIC0yNTY2LDcgKzI1
NTUsNyBAQCBsb25nIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6bGVuZ3RoKCkgY29uCiAKIHZvaWQg
SFRNTFNlbGVjdEVsZW1lbnRJbXBsOjphZGQoIEhUTUxFbGVtZW50SW1wbCAqZWxlbWVudCwgSFRN
TEVsZW1lbnRJbXBsICpiZWZvcmUgKQogewotICAgIGlmICghZWxlbWVudCB8fCBlbGVtZW50LT5p
ZCgpICE9IElEX09QVElPTikKKyAgICBpZiAoIWVsZW1lbnQgfHwgIWVsZW1lbnQtPmhhc0xvY2Fs
TmFtZShIVE1MTmFtZXM6Om9wdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaW50IGV4
Y2VwdGlvbmNvZGUgPSAwOwpAQCAtMjYwMCwxMyArMjU4OSwxMiBAQCB2b2lkIEhUTUxTZWxlY3RF
bGVtZW50SW1wbDo6Zm9jdXMoKQogICAgIGdldERvY3VtZW50KCktPnNldEZvY3VzTm9kZSh0aGlz
KTsKIH0KIAotRE9NU3RyaW5nIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6dmFsdWUoICkKK0RPTVN0
cmluZyBIVE1MU2VsZWN0RWxlbWVudEltcGw6OnZhbHVlKCkKIHsKICAgICB1aW50IGk7CiAgICAg
UU1lbUFycmF5PEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKj4gaXRlbXMgPSBsaXN0SXRlbXMo
KTsKICAgICBmb3IgKGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgaWYg
KCBpdGVtc1tpXS0+aWQoKSA9PSBJRF9PUFRJT04KLSAgICAgICAgICAgICYmIHN0YXRpY19jYXN0
PEhUTUxPcHRpb25FbGVtZW50SW1wbCo+KGl0ZW1zW2ldKS0+c2VsZWN0ZWQoKSkKKyAgICAgICAg
aWYgKGl0ZW1zW2ldLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvcHRpb24oKSkgJiYgc3RhdGlj
X2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnRJbXBsKj4oaXRlbXNbaV0pLT5zZWxlY3RlZCgpKQogICAg
ICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50SW1wbCo+KGl0ZW1z
W2ldKS0+dmFsdWUoKTsKICAgICB9CiAgICAgcmV0dXJuIERPTVN0cmluZygiIik7CkBAIC0yNjIw
LDEzICsyNjA4LDEzIEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnRJbXBsOjpzZXRWYWx1ZShjb24K
ICAgICAvLyBhbmQgbWFrZSBpdCB0aGUgY3VycmVudCBzZWxlY3Rpb24uCiAgICAgUU1lbUFycmF5
PEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKj4gaXRlbXMgPSBsaXN0SXRlbXMoKTsKICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyBpKyspCi0gICAgICAgIGlmIChp
dGVtc1tpXS0+aWQoKSA9PSBJRF9PUFRJT04gJiYgc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1l
bnRJbXBsKj4oaXRlbXNbaV0pLT52YWx1ZSgpID09IHZhbHVlKSB7CisgICAgICAgIGlmIChpdGVt
c1tpXS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpICYmIHN0YXRpY19jYXN0PEhU
TUxPcHRpb25FbGVtZW50SW1wbCo+KGl0ZW1zW2ldKS0+dmFsdWUoKSA9PSB2YWx1ZSkgewogICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnRJbXBsKj4oaXRlbXNbaV0pLT5z
ZXRTZWxlY3RlZCh0cnVlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogfQogCi1R
U3RyaW5nIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6c3RhdGUoICkKK1FTdHJpbmcgSFRNTFNlbGVj
dEVsZW1lbnRJbXBsOjpzdGF0ZSgpCiB7CiAjaWYgIUFQUExFX0NIQU5HRVMKICAgICBRU3RyaW5n
IHN0YXRlOwpAQCAtMjYzOSw3ICsyNjI3LDcgQEAgUVN0cmluZyBIVE1MU2VsZWN0RWxlbWVudElt
cGw6OnN0YXRlKCApCiAgICAgUUNoYXIgc3RhdGVDaGFyc1tsXTsKICAgICAKICAgICBmb3IoaW50
IGkgPSAwOyBpIDwgbDsgaSsrKQotICAgICAgICBpZihpdGVtc1tpXS0+aWQoKSA9PSBJRF9PUFRJ
T04gJiYgc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnRJbXBsKj4oaXRlbXNbaV0pLT5zZWxl
Y3RlZCgpKQorICAgICAgICBpZihpdGVtc1tpXS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b3B0
aW9uKCkpICYmIHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50SW1wbCo+KGl0ZW1zW2ldKS0+
c2VsZWN0ZWQoKSkKICAgICAgICAgICAgIHN0YXRlQ2hhcnNbaV0gPSAnWCc7CiAgICAgICAgIGVs
c2UKICAgICAgICAgICAgIHN0YXRlQ2hhcnNbaV0gPSAnLic7CkBAIC0yNjc2LDcgKzI2NjQsNyBA
QCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6cmVzdG9yZVN0YXRlCiAKICAgICBpbnQgbCA9
IGl0ZW1zLmNvdW50KCk7CiAgICAgZm9yKGludCBpID0gMDsgaSA8IGw7IGkrKykgewotICAgICAg
ICBpZihpdGVtc1tpXS0+aWQoKSA9PSBJRF9PUFRJT04pIHsKKyAgICAgICAgaWYoaXRlbXNbaV0t
Pmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9wdGlvbigpKSkgewogICAgICAgICAgICAgSFRNTE9w
dGlvbkVsZW1lbnRJbXBsKiBvZSA9IHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50SW1wbCo+
KGl0ZW1zW2ldKTsKICAgICAgICAgICAgIG9lLT5zZXRTZWxlY3RlZChzdGF0ZVtpXSA9PSAnWCcp
OwogICAgICAgICB9CkBAIC0yNzY4LDcgKzI3NTYsNyBAQCBib29sIEhUTUxTZWxlY3RFbGVtZW50
SW1wbDo6YXBwZW5kRm9ybURhCiAKICAgICB1aW50IGk7CiAgICAgZm9yIChpID0gMDsgaSA8IGl0
ZW1zLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIGlmIChpdGVtc1tpXS0+aWQoKSA9PSBJRF9PUFRJ
T04pIHsKKyAgICAgICAgaWYgKGl0ZW1zW2ldLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvcHRp
b24oKSkpIHsKICAgICAgICAgICAgIEhUTUxPcHRpb25FbGVtZW50SW1wbCAqb3B0aW9uID0gc3Rh
dGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnRJbXBsKj4oaXRlbXNbaV0pOwogICAgICAgICAgICAg
aWYgKG9wdGlvbi0+c2VsZWN0ZWQoKSkgewogICAgICAgICAgICAgICAgIGVuY29kZWRfdmFsdWVz
LmFwcGVuZERhdGEobmFtZSgpLCBvcHRpb24tPnZhbHVlKCkpOwpAQCAtMjc4MSw3ICsyNzY5LDcg
QEAgYm9vbCBIVE1MU2VsZWN0RWxlbWVudEltcGw6OmFwcGVuZEZvcm1EYQogICAgIC8vIGluIGFu
eSBjYXNlLiBvdGhlcndpc2Ugd2UgaGF2ZSBubyBjb25zaXN0ZW5jeSB3aXRoIHRoZSBET00gaW50
ZXJmYWNlLiBGSVhNRSEKICAgICAvLyB3ZSByZXR1cm4gdGhlIGZpcnN0IG9uZSBpZiBpdCB3YXMg
YSBjb21ib2JveCBzZWxlY3QKICAgICBpZiAoIXN1Y2Nlc3NmdWwgJiYgIW1fbXVsdGlwbGUgJiYg
bV9zaXplIDw9IDEgJiYgaXRlbXMuc2l6ZSgpICYmCi0gICAgICAgIChpdGVtc1swXS0+aWQoKSA9
PSBJRF9PUFRJT04pICkgeworICAgICAgICAoaXRlbXNbMF0tPmhhc0xvY2FsTmFtZShIVE1MTmFt
ZXM6Om9wdGlvbigpKSkpIHsKICAgICAgICAgSFRNTE9wdGlvbkVsZW1lbnRJbXBsICpvcHRpb24g
PSBzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudEltcGwqPihpdGVtc1swXSk7CiAgICAgICAg
IGlmIChvcHRpb24tPnZhbHVlKCkuaXNOdWxsKCkpCiAgICAgICAgICAgICBlbmNvZGVkX3ZhbHVl
cy5hcHBlbmREYXRhKG5hbWUoKSwgb3B0aW9uLT50ZXh0KCkuc3RyaW5nKCkuc3RyaXBXaGl0ZVNw
YWNlKCkpOwpAQCAtMjgwNCw3ICsyNzkyLDcgQEAgaW50IEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6
b3B0aW9uVG9MaXN0SQogICAgIGZvciAoOwogICAgICAgICAgb3B0aW9uSW5kZXgyIDwgaW50KGl0
ZW1zLnNpemUoKSkgJiYgb3B0aW9uSW5kZXgyIDw9IG9wdGlvbkluZGV4OwogICAgICAgICAgbGlz
dEluZGV4KyspIHsgLy8gbm90IGEgdHlwbyEKLSAgICAgICAgaWYgKGl0ZW1zW2xpc3RJbmRleF0t
PmlkKCkgPT0gSURfT1BUSU9OKQorICAgICAgICBpZiAoaXRlbXNbbGlzdEluZGV4XS0+aGFzTG9j
YWxOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpKQogICAgICAgICAgICAgb3B0aW9uSW5kZXgyKys7
CiAgICAgfQogICAgIGxpc3RJbmRleC0tOwpAQCAtMjgxNSwxMyArMjgwMywxMyBAQCBpbnQgSFRN
TFNlbGVjdEVsZW1lbnRJbXBsOjpsaXN0VG9PcHRpb25JCiB7CiAgICAgUU1lbUFycmF5PEhUTUxH
ZW5lcmljRm9ybUVsZW1lbnRJbXBsKj4gaXRlbXMgPSBsaXN0SXRlbXMoKTsKICAgICBpZiAobGlz
dEluZGV4IDwgMCB8fCBsaXN0SW5kZXggPj0gaW50KGl0ZW1zLnNpemUoKSkgfHwKLSAgICAgICAg
aXRlbXNbbGlzdEluZGV4XS0+aWQoKSAhPSBJRF9PUFRJT04pCisgICAgICAgICFpdGVtc1tsaXN0
SW5kZXhdLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biAtMTsKIAogICAgIGludCBvcHRpb25JbmRleCA9IDA7IC8vIGFjdHVhbCBpbmRleCBvZiBvcHRp
b24gbm90IGNvdW50aW5nIE9QVEdST1VQIGVudHJpZXMgdGhhdCBtYXkgYmUgaW4gbGlzdAogICAg
IGludCBpOwogICAgIGZvciAoaSA9IDA7IGkgPCBsaXN0SW5kZXg7IGkrKykKLSAgICAgICAgaWYg
KGl0ZW1zW2ldLT5pZCgpID09IElEX09QVElPTikKKyAgICAgICAgaWYgKGl0ZW1zW2ldLT5oYXNM
b2NhbE5hbWUoSFRNTE5hbWVzOjpvcHRpb24oKSkpCiAgICAgICAgICAgICBvcHRpb25JbmRleCsr
OwogICAgIHJldHVybiBvcHRpb25JbmRleDsKIH0KQEAgLTI4NDcsMTMgKzI4MzUsMTMgQEAgdm9p
ZCBIVE1MU2VsZWN0RWxlbWVudEltcGw6OnJlY2FsY0xpc3RJdAogICAgIG1fbGlzdEl0ZW1zLnJl
c2l6ZSgwKTsKICAgICBIVE1MT3B0aW9uRWxlbWVudEltcGwqIGZvdW5kU2VsZWN0ZWQgPSAwOwog
ICAgIHdoaWxlKGN1cnJlbnQpIHsKLSAgICAgICAgaWYgKGN1cnJlbnQtPmlkKCkgPT0gSURfT1BU
R1JPVVAgJiYgY3VycmVudC0+Zmlyc3RDaGlsZCgpKSB7CisgICAgICAgIGlmIChjdXJyZW50LT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6b3B0Z3JvdXAoKSkgJiYgY3VycmVudC0+Zmlyc3RDaGlsZCgp
KSB7CiAgICAgICAgICAgICAvLyAjIyMgd2hhdCBpZiBvcHRncm91cCBjb250YWlucyBqdXN0IGNv
bW1lbnRzPyBkb24ndCB3YW50IG9uZSBvZiBubyBvcHRpb25zIGluIGl0Li4uCiAgICAgICAgICAg
ICBtX2xpc3RJdGVtcy5yZXNpemUobV9saXN0SXRlbXMuc2l6ZSgpKzEpOwogICAgICAgICAgICAg
bV9saXN0SXRlbXNbbV9saXN0SXRlbXMuc2l6ZSgpLTFdID0gc3RhdGljX2Nhc3Q8SFRNTEdlbmVy
aWNGb3JtRWxlbWVudEltcGwqPihjdXJyZW50KTsKICAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJy
ZW50LT5maXJzdENoaWxkKCk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGN1cnJlbnQtPmlkKCkg
PT0gSURfT1BUSU9OKSB7CisgICAgICAgIGlmIChjdXJyZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6b3B0aW9uKCkpKSB7CiAgICAgICAgICAgICBtX2xpc3RJdGVtcy5yZXNpemUobV9saXN0SXRl
bXMuc2l6ZSgpKzEpOwogICAgICAgICAgICAgbV9saXN0SXRlbXNbbV9saXN0SXRlbXMuc2l6ZSgp
LTFdID0gc3RhdGljX2Nhc3Q8SFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwqPihjdXJyZW50KTsK
ICAgICAgICAgICAgIGlmICghZm91bmRTZWxlY3RlZCAmJiAhbV9tdWx0aXBsZSAmJiBtX3NpemUg
PD0gMSkgewpAQCAtMjg5NSw3ICsyODgzLDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudEltcGw6
OnJlc2V0KCkKICAgICBRTWVtQXJyYXk8SFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwqPiBpdGVt
cyA9IGxpc3RJdGVtcygpOwogICAgIHVpbnQgaTsKICAgICBmb3IgKGkgPSAwOyBpIDwgaXRlbXMu
c2l6ZSgpOyBpKyspIHsKLSAgICAgICAgaWYgKGl0ZW1zW2ldLT5pZCgpID09IElEX09QVElPTikg
eworICAgICAgICBpZiAoaXRlbXNbaV0tPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9wdGlvbigp
KSkgewogICAgICAgICAgICAgSFRNTE9wdGlvbkVsZW1lbnRJbXBsICpvcHRpb24gPSBzdGF0aWNf
Y2FzdDxIVE1MT3B0aW9uRWxlbWVudEltcGwqPihpdGVtc1tpXSk7CiAgICAgICAgICAgICBib29s
IHNlbGVjdGVkID0gKCFvcHRpb24tPmdldEF0dHJpYnV0ZShBVFRSX1NFTEVDVEVEKS5pc051bGwo
KSk7CiAgICAgICAgICAgICBvcHRpb24tPnNldFNlbGVjdGVkKHNlbGVjdGVkKTsKQEAgLTI5MTMs
NyArMjkwMSw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnRJbXBsOjpub3RpZnlPcHRpb24KICAg
ICAgICAgUU1lbUFycmF5PEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKj4gaXRlbXMgPSBsaXN0
SXRlbXMoKTsKICAgICAgICAgdWludCBpOwogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaXRlbXMu
c2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgIGlmIChpdGVtc1tpXS0+aWQoKSA9PSBJRF9PUFRJ
T04pCisgICAgICAgICAgICBpZiAoaXRlbXNbaV0tPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9w
dGlvbigpKSkKICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudElt
cGwqPihpdGVtc1tpXSktPm1fc2VsZWN0ZWQgPSAoaXRlbXNbaV0gPT0gc2VsZWN0ZWRPcHRpb24p
OwogICAgICAgICB9CiAgICAgfQpAQCAtMjk2MCw3ICsyOTQ4LDcgQEAgdm9pZCBIVE1MU2VsZWN0
RWxlbWVudEltcGw6OnNldFNpemUobG9uZwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MS2V5
Z2VuRWxlbWVudEltcGw6OkhUTUxLZXlnZW5FbGVtZW50SW1wbChEb2N1bWVudFB0ciogZG9jLCBI
VE1MRm9ybUVsZW1lbnRJbXBsKiBmKQotICAgIDogSFRNTFNlbGVjdEVsZW1lbnRJbXBsKGRvYywg
ZikKKyAgICA6IEhUTUxTZWxlY3RFbGVtZW50SW1wbChIVE1MTmFtZXM6OmtleWdlbigpLCBkb2Ms
IGYpCiB7CiAgICAgUVN0cmluZ0xpc3Qga2V5cyA9IEtTU0xLZXlHZW46OnN1cHBvcnRlZEtleVNp
emVzKCk7CiAgICAgZm9yIChRU3RyaW5nTGlzdDo6SXRlcmF0b3IgaSA9IGtleXMuYmVnaW4oKTsg
aSAhPSBrZXlzLmVuZCgpOyArK2kpIHsKQEAgLTI5NzAsMTEgKzI5NTgsNiBAQCBIVE1MS2V5Z2Vu
RWxlbWVudEltcGw6OkhUTUxLZXlnZW5FbGVtZW50CiAgICAgfQogfQogCi1Ob2RlSW1wbDo6SWQg
SFRNTEtleWdlbkVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0tFWUdF
TjsKLX0KLQogRE9NU3RyaW5nIEhUTUxLZXlnZW5FbGVtZW50SW1wbDo6dHlwZSgpIGNvbnN0CiB7
CiAgICAgcmV0dXJuICJrZXlnZW4iOwpAQCAtMzAyOSw3ICszMDEyLDcgQEAgYm9vbCBIVE1MS2V5
Z2VuRWxlbWVudEltcGw6OmFwcGVuZEZvcm1EYQogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBIVE1M
T3B0R3JvdXBFbGVtZW50SW1wbDo6SFRNTE9wdEdyb3VwRWxlbWVudEltcGwoRG9jdW1lbnRQdHIg
KmRvYywgSFRNTEZvcm1FbGVtZW50SW1wbCAqZikKLSAgICA6IEhUTUxHZW5lcmljRm9ybUVsZW1l
bnRJbXBsKGRvYywgZikKKyAgICA6IEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKEhUTUxOYW1l
czo6b3B0Z3JvdXAoKSwgZG9jLCBmKQogewogfQogCkBAIC0zMDQyLDExICszMDI1LDYgQEAgYm9v
bCBIVE1MT3B0R3JvdXBFbGVtZW50SW1wbDo6aXNGb2N1c2FibAogICAgIHJldHVybiBmYWxzZTsK
IH0KIAotTm9kZUltcGw6OklkIEhUTUxPcHRHcm91cEVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIElEX09QVEdST1VQOwotfQotCiBET01TdHJpbmcgSFRNTE9wdEdyb3VwRWxl
bWVudEltcGw6OnR5cGUoKSBjb25zdAogewogICAgIHJldHVybiAib3B0Z3JvdXAiOwpAQCAtMzEw
MCw3ICszMDc4LDcgQEAgdm9pZCBIVE1MT3B0R3JvdXBFbGVtZW50SW1wbDo6cGFyc2VNYXBwZQog
dm9pZCBIVE1MT3B0R3JvdXBFbGVtZW50SW1wbDo6cmVjYWxjU2VsZWN0T3B0aW9ucygpCiB7CiAg
ICAgTm9kZUltcGwgKnNlbGVjdCA9IHBhcmVudE5vZGUoKTsKLSAgICB3aGlsZSAoc2VsZWN0ICYm
IHNlbGVjdC0+aWQoKSAhPSBJRF9TRUxFQ1QpCisgICAgd2hpbGUgKHNlbGVjdCAmJiAhc2VsZWN0
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c2VsZWN0KCkpKQogICAgICAgICBzZWxlY3QgPSBzZWxl
Y3QtPnBhcmVudE5vZGUoKTsKICAgICBpZiAoc2VsZWN0KQogICAgICAgICBzdGF0aWNfY2FzdDxI
VE1MU2VsZWN0RWxlbWVudEltcGwqPihzZWxlY3QpLT5zZXRSZWNhbGNMaXN0SXRlbXMoKTsKQEAg
LTMxMTksNyArMzA5Nyw3IEBAIHZvaWQgSFRNTE9wdEdyb3VwRWxlbWVudEltcGw6OnNldExhYmVs
KGMKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogSFRNTE9wdGlvbkVsZW1lbnRJbXBsOjpIVE1MT3B0
aW9uRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgSFRNTEZvcm1FbGVtZW50SW1wbCAqZikK
LSAgICA6IEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKGRvYywgZikKKyAgICA6IEhUTUxHZW5l
cmljRm9ybUVsZW1lbnRJbXBsKEhUTUxOYW1lczo6b3B0aW9uKCksIGRvYywgZikKIHsKICAgICBt
X3NlbGVjdGVkID0gZmFsc2U7CiB9CkBAIC0zMTI5LDExICszMTA3LDYgQEAgYm9vbCBIVE1MT3B0
aW9uRWxlbWVudEltcGw6OmlzRm9jdXNhYmxlKAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotTm9k
ZUltcGw6OklkIEhUTUxPcHRpb25FbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVy
biBJRF9PUFRJT047Ci19Ci0KIERPTVN0cmluZyBIVE1MT3B0aW9uRWxlbWVudEltcGw6OnR5cGUo
KSBjb25zdAogewogICAgIHJldHVybiAib3B0aW9uIjsKQEAgLTMxODAsOCArMzE1Myw3IEBAIGxv
bmcgSFRNTE9wdGlvbkVsZW1lbnRJbXBsOjppbmRleCgpIGNvbnMKICAgICBpbnQgbCA9IGl0ZW1z
LmNvdW50KCk7CiAgICAgaW50IG9wdGlvbkluZGV4ID0gMDsKICAgICBmb3IoaW50IGkgPSAwOyBp
IDwgbDsgaSsrKSB7Ci0gICAgICAgIGlmKGl0ZW1zW2ldLT5pZCgpID09IElEX09QVElPTikKLSAg
ICAgICAgeworICAgICAgICBpZiAoaXRlbXNbaV0tPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9w
dGlvbigpKSkgewogICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50
SW1wbCo+KGl0ZW1zW2ldKSA9PSB0aGlzKQogICAgICAgICAgICAgICAgIHJldHVybiBvcHRpb25J
bmRleDsKICAgICAgICAgICAgIG9wdGlvbkluZGV4Kys7CkBAIC0zMjQ2LDcgKzMyMTgsNyBAQCB2
b2lkIEhUTUxPcHRpb25FbGVtZW50SW1wbDo6Y2hpbGRyZW5DaGFuCiBIVE1MU2VsZWN0RWxlbWVu
dEltcGwgKkhUTUxPcHRpb25FbGVtZW50SW1wbDo6Z2V0U2VsZWN0KCkgY29uc3QKIHsKICAgICBO
b2RlSW1wbCAqc2VsZWN0ID0gcGFyZW50Tm9kZSgpOwotICAgIHdoaWxlIChzZWxlY3QgJiYgc2Vs
ZWN0LT5pZCgpICE9IElEX1NFTEVDVCkKKyAgICB3aGlsZSAoc2VsZWN0ICYmICFzZWxlY3QtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjpzZWxlY3QoKSkpCiAgICAgICAgIHNlbGVjdCA9IHNlbGVjdC0+
cGFyZW50Tm9kZSgpOwogICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MU2VsZWN0RWxlbWVudElt
cGwqPihzZWxlY3QpOwogfQpAQCAtMzI3NCw3ICszMjQ2LDcgQEAgdm9pZCBIVE1MT3B0aW9uRWxl
bWVudEltcGw6OnNldExhYmVsKGNvbgogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MVGV4dEFy
ZWFFbGVtZW50SW1wbDo6SFRNTFRleHRBcmVhRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywg
SFRNTEZvcm1FbGVtZW50SW1wbCAqZikKLSAgICA6IEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBs
KGRvYywgZiksIG1fdmFsdWVJc1ZhbGlkKGZhbHNlKSwgbV92YWx1ZU1hdGNoZXNSZW5kZXJlcihm
YWxzZSkKKyAgICA6IEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKEhUTUxOYW1lczo6dGV4dGFy
ZWEoKSwgZG9jLCBmKSwgbV92YWx1ZUlzVmFsaWQoZmFsc2UpLCBtX3ZhbHVlTWF0Y2hlc1JlbmRl
cmVyKGZhbHNlKQogewogICAgIC8vIERURCByZXF1aXJlcyByb3dzICYgY29scyBiZSBzcGVjaWZp
ZWQsIGJ1dCB3ZSB3aWxsIHByb3ZpZGUgcmVhc29uYWJsZSBkZWZhdWx0cwogICAgIG1fcm93cyA9
IDI7CkBAIC0zMjg3LDExICszMjU5LDYgQEAgSFRNTFRleHRBcmVhRWxlbWVudEltcGw6On5IVE1M
VGV4dEFyZWFFbAogICAgIGlmIChnZXREb2N1bWVudCgpKSBnZXREb2N1bWVudCgpLT5kZXJlZ2lz
dGVyTWFpbnRhaW5zU3RhdGUodGhpcyk7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MVGV4dEFyZWFF
bGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9URVhUQVJFQTsKLX0KLQog
RE9NU3RyaW5nIEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBsOjp0eXBlKCkgY29uc3QKIHsKICAgICBy
ZXR1cm4gInRleHRhcmVhIjsKQEAgLTM1MDgsMTcgKzM0NzUsMTIgQEAgdm9pZCBIVE1MVGV4dEFy
ZWFFbGVtZW50SW1wbDo6c2V0Um93cyhsbwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MSXNJ
bmRleEVsZW1lbnRJbXBsOjpIVE1MSXNJbmRleEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2Ms
IEhUTUxGb3JtRWxlbWVudEltcGwgKmYpCi0gICAgOiBIVE1MSW5wdXRFbGVtZW50SW1wbChkb2Ms
IGYpCisgICAgOiBIVE1MSW5wdXRFbGVtZW50SW1wbChIVE1MTmFtZXM6OmlzaW5kZXgoKSwgZG9j
LCBmKQogewogICAgIG1fdHlwZSA9IFRFWFQ7CiAgICAgc2V0T3ZlcnJpZGVOYW1lKCJpc2luZGV4
Iik7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MSXNJbmRleEVsZW1lbnRJbXBsOjppZCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIElEX0lTSU5ERVg7Ci19Ci0KIHZvaWQgSFRNTElzSW5kZXhFbGVtZW50
SW1wbDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCogYXR0cikKIHsK
ICAgICBzd2l0Y2goYXR0ci0+aWQoKSkKSW5kZXg6IGtodG1sL2h0bWwvaHRtbF9mb3JtaW1wbC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbF9m
b3JtaW1wbC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjcyCmRpZmYgLXUgLXAgLXIxLjcyIGto
dG1sL2h0bWwvaHRtbF9mb3JtaW1wbC5oCi0tLSBraHRtbC9odG1sL2h0bWxfZm9ybWltcGwuaAkx
NyBKdW4gMjAwNSAxODoxNDoyNyAtMDAwMAkxLjcyCisrKyBraHRtbC9odG1sL2h0bWxfZm9ybWlt
cGwuaAkyMCBKdW4gMjAwNSAyMDo1NTozNyAtMDAwMApAQCAtNjcsOCArNjcsNiBAQCBwdWJsaWM6
CiAgICAgSFRNTEZvcm1FbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKTsKICAgICB2aXJ0dWFs
IH5IVE1MRm9ybUVsZW1lbnRJbXBsKCk7CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7Ci0K
ICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoKCk7CiAgICAgdmlydHVhbCB2b2lkIGRldGFjaCgpOwog
CkBAIC0xNTksNyArMTU3LDcgQEAgY2xhc3MgSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwgOiBw
dWJsaQogICAgIGZyaWVuZCBjbGFzcyBraHRtbDo6UmVuZGVyRm9ybUVsZW1lbnQ7CiAKIHB1Ymxp
YzoKLSAgICBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCBIVE1M
Rm9ybUVsZW1lbnRJbXBsICpmID0gMCk7CisgICAgSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnRQdHIgKmRvYywgSFRNTEZvcm1F
bGVtZW50SW1wbCAqZiA9IDApOwogICAgIHZpcnR1YWwgfkhUTUxHZW5lcmljRm9ybUVsZW1lbnRJ
bXBsKCk7CiAKICAgICBIVE1MRm9ybUVsZW1lbnRJbXBsICpmb3JtKCkgeyByZXR1cm4gbV9mb3Jt
OyB9CkBAIC0yNDIsNyArMjQwLDYgQEAgcHVibGljOgogICAgICAgICBCVVRUT04KICAgICB9Owog
Ci0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwogICAgIERPTVN0cmluZyB0eXBlKCkgY29uc3Q7
CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRl
SW1wbCAqYXR0cik7CkBAIC0yODAsOCArMjc3LDYgQEAgcHVibGljOgogICAgIEhUTUxGaWVsZFNl
dEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIEhUTUxGb3JtRWxlbWVudEltcGwgKmYgPSAw
KTsKIAogICAgIHZpcnR1YWwgfkhUTUxGaWVsZFNldEVsZW1lbnRJbXBsKCk7Ci0KLSAgICB2aXJ0
dWFsIElkIGlkKCkgY29uc3Q7CiAgICAgCiAgICAgdmlydHVhbCBib29sIGlzRm9jdXNhYmxlKCkg
Y29uc3Q7CiAgICAgCkBAIC0zMjQsOSArMzE5LDEwIEBAIHB1YmxpYzoKICAgICB9OwogCiAgICAg
SFRNTElucHV0RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgSFRNTEZvcm1FbGVtZW50SW1w
bCAqZiA9IDApOworICAgIEhUTUxJbnB1dEVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUm
IHRhZ05hbWUsIERvY3VtZW50UHRyICpkb2MsIEhUTUxGb3JtRWxlbWVudEltcGwgKmYgPSAwKTsK
ICAgICB2aXJ0dWFsIH5IVE1MSW5wdXRFbGVtZW50SW1wbCgpOwogCi0gICAgdmlydHVhbCBJZCBp
ZCgpIGNvbnN0OworICAgIHZvaWQgaW5pdCgpOwogCiAgICAgdmlydHVhbCBib29sIGlzRW51bWVy
YXRhYmxlKCkgY29uc3QgeyByZXR1cm4gaW5wdXRUeXBlKCkgIT0gSU1BR0U7IH0KIApAQCAtNDUw
LDggKzQ0Niw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5IVE1MTGFiZWxFbGVtZW50SW1wbCgp
OwogCiAgICAgdmlydHVhbCBib29sIGlzRm9jdXNhYmxlKCkgY29uc3Q7Ci0gICAgCi0gICAgdmly
dHVhbCBJZCBpZCgpIGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmli
dXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIpOwogCkBAIC00ODQsNyArNDc4LDYgQEAgcHVi
bGljOgogCiAgICAgdmlydHVhbCBib29sIGlzRm9jdXNhYmxlKCkgY29uc3Q7CiAgICAgCi0gICAg
dmlydHVhbCBJZCBpZCgpIGNvbnN0OwogICAgIHZpcnR1YWwga2h0bWw6OlJlbmRlck9iamVjdCAq
Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEgKiwga2h0bWw6OlJlbmRlclN0eWxlICopOwogCiAg
ICAgdmlydHVhbCBET01TdHJpbmcgdHlwZSgpIGNvbnN0OwpAQCAtNTA0LDkgKzQ5NywxMSBAQCBj
bGFzcyBIVE1MU2VsZWN0RWxlbWVudEltcGwgOiBwdWJsaWMgSFRNCiAKIHB1YmxpYzoKICAgICBI
VE1MU2VsZWN0RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgSFRNTEZvcm1FbGVtZW50SW1w
bCAqZiA9IDApOworICAgIEhUTUxTZWxlY3RFbGVtZW50SW1wbChjb25zdCBRdWFsaWZpZWROYW1l
JiB0YWdOYW1lLCBEb2N1bWVudFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmID0gMCk7
CiAgICAgfkhUTUxTZWxlY3RFbGVtZW50SW1wbCgpOwogCi0gICAgdmlydHVhbCBJZCBpZCgpIGNv
bnN0OworICAgIHZvaWQgaW5pdCgpOworCiAgICAgRE9NU3RyaW5nIHR5cGUoKSBjb25zdDsKIAog
ICAgIHZpcnR1YWwgdm9pZCByZWNhbGNTdHlsZSggU3R5bGVDaGFuZ2UgKTsKQEAgLTU5Myw4ICs1
ODgsNiBAQCBjbGFzcyBIVE1MS2V5Z2VuRWxlbWVudEltcGwgOiBwdWJsaWMgSFRNCiBwdWJsaWM6
CiAgICAgSFRNTEtleWdlbkVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIEhUTUxGb3JtRWxl
bWVudEltcGwgKmYgPSAwKTsKIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKLQogICAgIERP
TVN0cmluZyB0eXBlKCkgY29uc3Q7CiAKICAgICAvLyAjIyMgdGhpcyBpcyBqdXN0IGEgcm91Z2gg
Z3Vlc3MKQEAgLTYxNSw3ICs2MDgsNiBAQCBwdWJsaWM6CiAgICAgSFRNTE9wdEdyb3VwRWxlbWVu
dEltcGwoRG9jdW1lbnRQdHIgKmRvYywgSFRNTEZvcm1FbGVtZW50SW1wbCAqZiA9IDApOwogICAg
IHZpcnR1YWwgfkhUTUxPcHRHcm91cEVsZW1lbnRJbXBsKCk7CiAKLSAgICB2aXJ0dWFsIElkIGlk
KCkgY29uc3Q7CiAgICAgRE9NU3RyaW5nIHR5cGUoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgYm9v
bCBpc0ZvY3VzYWJsZSgpIGNvbnN0OwpAQCAtNjQ0LDggKzYzNiw3IEBAIHB1YmxpYzoKICAgICBI
VE1MT3B0aW9uRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgSFRNTEZvcm1FbGVtZW50SW1w
bCAqZiA9IDApOwogCiAgICAgdmlydHVhbCBib29sIGlzRm9jdXNhYmxlKCkgY29uc3Q7Ci0gICAg
Ci0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OworCiAgICAgRE9NU3RyaW5nIHR5cGUoKSBjb25z
dDsKIAogICAgIERPTVN0cmluZyB0ZXh0KCkgY29uc3Q7CkBAIC02OTMsOCArNjg0LDYgQEAgcHVi
bGljOgogICAgIEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIEhUTUxG
b3JtRWxlbWVudEltcGwgKmYgPSAwKTsKICAgICB+SFRNTFRleHRBcmVhRWxlbWVudEltcGwoKTsK
IAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKLQogICAgIGxvbmcgY29scygpIGNvbnN0IHsg
cmV0dXJuIG1fY29sczsgfQogCiAgICAgbG9uZyByb3dzKCkgY29uc3QgeyByZXR1cm4gbV9yb3dz
OyB9CkBAIC03NTcsOCArNzQ2LDYgQEAgY2xhc3MgSFRNTElzSW5kZXhFbGVtZW50SW1wbCA6IHB1
YmxpYyBIVAogcHVibGljOgogICAgIEhUTUxJc0luZGV4RWxlbWVudEltcGwoRG9jdW1lbnRQdHIg
KmRvYywgSFRNTEZvcm1FbGVtZW50SW1wbCAqZiA9IDApOwogCi0gICAgdmlydHVhbCBJZCBpZCgp
IGNvbnN0OwotCiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0
dHJpYnV0ZUltcGwgKmF0dHIpOwogCiAgICAgRE9NU3RyaW5nIHByb21wdCgpIGNvbnN0OwpJbmRl
eDoga2h0bWwvaHRtbC9odG1sX2hlYWRpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfaGVhZGltcGwuY3BwLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjQ4CmRpZmYgLXUgLXAgLXIxLjQ4IGtodG1sL2h0bWwvaHRtbF9oZWFkaW1wbC5j
cHAKLS0tIGtodG1sL2h0bWwvaHRtbF9oZWFkaW1wbC5jcHAJMTEgTWF5IDIwMDUgMDU6NDk6MzQg
LTAwMDAJMS40OAorKysga2h0bWwvaHRtbC9odG1sX2hlYWRpbXBsLmNwcAkyMCBKdW4gMjAwNSAy
MDo1NTozOCAtMDAwMApAQCAtNDYsNyArNDYsNyBAQCB1c2luZyBuYW1lc3BhY2UgRE9NOwogdXNp
bmcgbmFtZXNwYWNlIGtodG1sOwogCiBIVE1MQmFzZUVsZW1lbnRJbXBsOjpIVE1MQmFzZUVsZW1l
bnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0gICAgOiBIVE1MRWxlbWVudEltcGwoZG9jKQorICAg
IDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6YmFzZSgpLCBkb2MpCiB7CiB9CiAKQEAgLTU0
LDExICs1NCw2IEBAIEhUTUxCYXNlRWxlbWVudEltcGw6On5IVE1MQmFzZUVsZW1lbnRJbXAKIHsK
IH0KIAotTm9kZUltcGw6OklkIEhUTUxCYXNlRWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gSURfQkFTRTsKLX0KLQogdm9pZCBIVE1MQmFzZUVsZW1lbnRJbXBsOjpwYXJzZU1h
cHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICphdHRyKQogewogICAgIHN3aXRjaChh
dHRyLT5pZCgpKQpAQCAtMTE5LDcgKzExNCw3IEBAIHZvaWQgSFRNTEJhc2VFbGVtZW50SW1wbDo6
c2V0VGFyZ2V0KGNvbnMKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogSFRNTExpbmtFbGVtZW50SW1w
bDo6SFRNTExpbmtFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAgIDogSFRNTEVsZW1l
bnRJbXBsKGRvYykKKyAgICA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6OmxpbmsoKSwgZG9j
KQogewogICAgIG1fc2hlZXQgPSAwOwogICAgIG1fbG9hZGluZyA9IGZhbHNlOwpAQCAtMTM0LDEx
ICsxMjksNiBAQCBIVE1MTGlua0VsZW1lbnRJbXBsOjp+SFRNTExpbmtFbGVtZW50SW1wCiAgICAg
aWYobV9jYWNoZWRTaGVldCkgbV9jYWNoZWRTaGVldC0+ZGVyZWYodGhpcyk7CiB9CiAKLU5vZGVJ
bXBsOjpJZCBIVE1MTGlua0VsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElE
X0xJTks7Ci19Ci0KIHZvaWQgSFRNTExpbmtFbGVtZW50SW1wbDo6c2V0RGlzYWJsZWRTdGF0ZShi
b29sIF9kaXNhYmxlZCkKIHsKICAgICBpbnQgb2xkRGlzYWJsZWRTdGF0ZSA9IG1fZGlzYWJsZWRT
dGF0ZTsKQEAgLTQyMyw3ICs0MTMsNyBAQCB2b2lkIEhUTUxMaW5rRWxlbWVudEltcGw6OnNldFR5
cGUoY29uc3QgCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSFRNTE1ldGFFbGVtZW50SW1wbDo6
SFRNTE1ldGFFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKSA6IEhUTUxFbGVtZW50SW1wbChk
b2MpCitIVE1MTWV0YUVsZW1lbnRJbXBsOjpIVE1MTWV0YUVsZW1lbnRJbXBsKERvY3VtZW50UHRy
ICpkb2MpIDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6bWV0YSgpLCBkb2MpCiB7CiB9CiAK
QEAgLTQzMSwxMSArNDIxLDYgQEAgSFRNTE1ldGFFbGVtZW50SW1wbDo6fkhUTUxNZXRhRWxlbWVu
dEltcAogewogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTE1ldGFFbGVtZW50SW1wbDo6aWQoKSBjb25z
dAotewotICAgIHJldHVybiBJRF9NRVRBOwotfQotCiB2b2lkIEhUTUxNZXRhRWxlbWVudEltcGw6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIpCiB7CiAgICAg
c3dpdGNoKGF0dHItPmlkKCkpCkBAIC01MTIsNyArNDk3LDcgQEAgdm9pZCBIVE1MTWV0YUVsZW1l
bnRJbXBsOjpzZXRTY2hlbWUoY29ucwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MU2NyaXB0
RWxlbWVudEltcGw6OkhUTUxTY3JpcHRFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAg
IDogSFRNTEVsZW1lbnRJbXBsKGRvYyksIG1fY2FjaGVkU2NyaXB0KDApLCBtX2NyZWF0ZWRCeVBh
cnNlcihmYWxzZSkKKyAgICA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6OnNjcmlwdCgpLCBk
b2MpLCBtX2NhY2hlZFNjcmlwdCgwKSwgbV9jcmVhdGVkQnlQYXJzZXIoZmFsc2UpCiB7CiB9CiAK
QEAgLTUyMiwxMSArNTA3LDYgQEAgSFRNTFNjcmlwdEVsZW1lbnRJbXBsOjp+SFRNTFNjcmlwdEVs
ZW1lbgogICAgICAgICBtX2NhY2hlZFNjcmlwdC0+ZGVyZWYodGhpcyk7CiB9CiAKLU5vZGVJbXBs
OjpJZCBIVE1MU2NyaXB0RWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURf
U0NSSVBUOwotfQotCiBib29sIEhUTUxTY3JpcHRFbGVtZW50SW1wbDo6aXNVUkxBdHRyaWJ1dGUo
QXR0cmlidXRlSW1wbCAqYXR0cikgY29uc3QKIHsKICAgICByZXR1cm4gYXR0ci0+aWQoKSA9PSBB
VFRSX1NSQzsKQEAgLTY2OSw3ICs2NDksNyBAQCB2b2lkIEhUTUxTY3JpcHRFbGVtZW50SW1wbDo6
c2V0VHlwZShjb25zCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSFRNTFN0eWxlRWxlbWVudElt
cGw6OkhUTUxTdHlsZUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpIDogSFRNTEVsZW1lbnRJ
bXBsKGRvYykKK0hUTUxTdHlsZUVsZW1lbnRJbXBsOjpIVE1MU3R5bGVFbGVtZW50SW1wbChEb2N1
bWVudFB0ciAqZG9jKSA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6OnN0eWxlKCksIGRvYykK
IHsKICAgICBtX3NoZWV0ID0gMDsKICAgICBtX2xvYWRpbmcgPSBmYWxzZTsKQEAgLTY4MCwxMSAr
NjYwLDYgQEAgSFRNTFN0eWxlRWxlbWVudEltcGw6On5IVE1MU3R5bGVFbGVtZW50SQogICAgIGlm
KG1fc2hlZXQpIG1fc2hlZXQtPmRlcmVmKCk7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MU3R5bGVF
bGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9TVFlMRTsKLX0KLQogLy8g
b3RoZXIgc3R1ZmYuLi4KIHZvaWQgSFRNTFN0eWxlRWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXR0
cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIpCiB7CkBAIC03OTYsNyArNzcxLDcgQEAg
dm9pZCBIVE1MU3R5bGVFbGVtZW50SW1wbDo6c2V0VHlwZShjb25zdAogLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQogCiBIVE1MVGl0bGVFbGVtZW50SW1wbDo6SFRNTFRpdGxlRWxlbWVudEltcGwoRG9jdW1l
bnRQdHIgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50SW1wbChkb2MpCisgICAgOiBIVE1MRWxlbWVu
dEltcGwoSFRNTE5hbWVzOjp0aXRsZSgpLCBkb2MpCiB7CiB9CiAKQEAgLTgwNCwxMSArNzc5LDYg
QEAgSFRNTFRpdGxlRWxlbWVudEltcGw6On5IVE1MVGl0bGVFbGVtZW50SQogewogfQogCi1Ob2Rl
SW1wbDo6SWQgSFRNTFRpdGxlRWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
SURfVElUTEU7Ci19Ci0KIHZvaWQgSFRNTFRpdGxlRWxlbWVudEltcGw6Omluc2VydGVkSW50b0Rv
Y3VtZW50KCkKIHsKICAgICBIVE1MRWxlbWVudEltcGw6Omluc2VydGVkSW50b0RvY3VtZW50KCk7
CkluZGV4OiBraHRtbC9odG1sL2h0bWxfaGVhZGltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfaGVhZGltcGwuaCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS4xOQpkaWZmIC11IC1wIC1yMS4xOSBraHRtbC9odG1sL2h0bWxfaGVhZGltcGwu
aAotLS0ga2h0bWwvaHRtbC9odG1sX2hlYWRpbXBsLmgJMTEgTWF5IDIwMDUgMDU6NDk6MzQgLTAw
MDAJMS4xOQorKysga2h0bWwvaHRtbC9odG1sX2hlYWRpbXBsLmgJMjAgSnVuIDIwMDUgMjA6NTU6
MzggLTAwMDAKQEAgLTUyLDcgKzUyLDYgQEAgcHVibGljOgogICAgIERPTVN0cmluZyBocmVmKCkg
Y29uc3QgeyByZXR1cm4gbV9ocmVmOyB9CiAgICAgRE9NU3RyaW5nIHRhcmdldCgpIGNvbnN0IHsg
cmV0dXJuIG1fdGFyZ2V0OyB9CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CiAgICAgdmly
dHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIp
OwogICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9Eb2N1bWVudCgpOwogICAgIHZpcnR1YWwg
dm9pZCByZW1vdmVkRnJvbURvY3VtZW50KCk7CkBAIC03Nyw4ICs3Niw2IEBAIHB1YmxpYzoKICAg
ICBIVE1MTGlua0VsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpOwogICAgIH5IVE1MTGlua0Vs
ZW1lbnRJbXBsKCk7CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7Ci0KICAgICBib29sIGRp
c2FibGVkKCkgY29uc3Q7CiAgICAgdm9pZCBzZXREaXNhYmxlZChib29sKTsKIApAQCAtMTU1LDcg
KzE1Miw2IEBAIHB1YmxpYzoKIAogICAgIH5IVE1MTWV0YUVsZW1lbnRJbXBsKCk7CiAKLSAgICB2
aXJ0dWFsIElkIGlkKCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmli
dXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIpOwogICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRl
ZEludG9Eb2N1bWVudCgpOwogCkBAIC0xOTAsNyArMTg2LDYgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgdm9pZCByZW1vdmVkRnJvbURvY3VtZW50KCk7CiAgICAgdmlydHVhbCB2b2lkIG5vdGlmeUZp
bmlzaGVkKGtodG1sOjpDYWNoZWRPYmplY3QgKmZpbmlzaGVkT2JqKTsKIAotICAgIHZpcnR1YWwg
SWQgaWQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNVUkxBdHRyaWJ1dGUoQXR0cmlidXRl
SW1wbCAqYXR0cikgY29uc3Q7CiAKICAgICB2b2lkIHNldENyZWF0ZWRCeVBhcnNlcihib29sIGNy
ZWF0ZWRCeVBhcnNlcikgeyBtX2NyZWF0ZWRCeVBhcnNlciA9IGNyZWF0ZWRCeVBhcnNlcjsgfQpA
QCAtMjI5LDggKzIyNCw2IEBAIHB1YmxpYzoKICAgICBIVE1MU3R5bGVFbGVtZW50SW1wbChEb2N1
bWVudFB0ciAqZG9jKTsKICAgICB+SFRNTFN0eWxlRWxlbWVudEltcGwoKTsKIAotICAgIHZpcnR1
YWwgSWQgaWQoKSBjb25zdDsKLQogICAgIFN0eWxlU2hlZXRJbXBsICpzaGVldCgpIGNvbnN0IHsg
cmV0dXJuIG1fc2hlZXQ7IH0KIAogICAgIC8vIG92ZXJsb2FkIGZyb20gSFRNTEVsZW1lbnRJbXBs
CkBAIC0yNjcsOCArMjYwLDYgQEAgcHVibGljOgogCiAgICAgfkhUTUxUaXRsZUVsZW1lbnRJbXBs
KCk7CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7Ci0KICAgICB2aXJ0dWFsIHZvaWQgaW5z
ZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlZEZyb21Eb2N1bWVu
dCgpOwogICAgIHZpcnR1YWwgdm9pZCBjaGlsZHJlbkNoYW5nZWQoKTsKSW5kZXg6IGtodG1sL2h0
bWwvaHRtbF9pbWFnZWltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJD
b3JlL2todG1sL2h0bWwvaHRtbF9pbWFnZWltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjQyCmRpZmYgLXUgLXAgLXIxLjQyIGtodG1sL2h0bWwvaHRtbF9pbWFnZWltcGwuY3BwCi0tLSBr
aHRtbC9odG1sL2h0bWxfaW1hZ2VpbXBsLmNwcAkxMiBNYXkgMjAwNSAwMToxNjowMSAtMDAwMAkx
LjQyCisrKyBraHRtbC9odG1sL2h0bWxfaW1hZ2VpbXBsLmNwcAkyMCBKdW4gMjAwNSAyMDo1NToz
OCAtMDAwMApAQCAtNTEsNyArNTEsNyBAQAogdXNpbmcgbmFtZXNwYWNlIERPTTsKIHVzaW5nIG5h
bWVzcGFjZSBraHRtbDsKIAotLy8jZGVmaW5lIElOU1RSVU1FTlRfTEFZT1VUX1NDSEVEVUxJTkcg
MQorLy8gI2RlZmluZSBJTlNUUlVNRU5UX0xBWU9VVF9TQ0hFRFVMSU5HIDEKIAogSFRNTEltYWdl
TG9hZGVyOjpIVE1MSW1hZ2VMb2FkZXIoRWxlbWVudEltcGwqIGVsdCkKIDptX2VsZW1lbnQoZWx0
KSwgbV9pbWFnZSgwKSwgbV9maXJlZExvYWQodHJ1ZSksIG1faW1hZ2VDb21wbGV0ZSh0cnVlKQpA
QCAtNzUsNyArNzUsNyBAQCB2b2lkIEhUTUxJbWFnZUxvYWRlcjo6dXBkYXRlRnJvbUVsZW1lbnQo
CiAgICAgICAgIHJldHVybjsKIAogICAgIEF0b21pY1N0cmluZyBhdHRyOwotICAgIGlmIChlbGVt
ZW50KCktPmlkKCkgPT0gSURfT0JKRUNUKQorICAgIGlmIChlbGVtZW50KCktPmhhc0xvY2FsTmFt
ZShIVE1MTmFtZXM6Om9iamVjdCgpKSkKICAgICAgICAgYXR0ciA9IGVsZW1lbnQoKS0+Z2V0QXR0
cmlidXRlKEFUVFJfREFUQSk7CiAgICAgZWxzZQogICAgICAgICBhdHRyID0gZWxlbWVudCgpLT5n
ZXRBdHRyaWJ1dGUoQVRUUl9TUkMpOwpAQCAtODYsNiArODYsMTAgQEAgdm9pZCBIVE1MSW1hZ2VM
b2FkZXI6OnVwZGF0ZUZyb21FbGVtZW50KAogICAgICAgICBuZXdJbWFnZSA9IGVsZW1lbnQoKS0+
Z2V0RG9jdW1lbnQoKS0+ZG9jTG9hZGVyKCktPnJlcXVlc3RJbWFnZShraHRtbDo6cGFyc2VVUkwo
YXR0cikpOwogCiAgICAgaWYgKG5ld0ltYWdlICE9IG1faW1hZ2UpIHsKKyNpZmRlZiBJTlNUUlVN
RU5UX0xBWU9VVF9TQ0hFRFVMSU5HCisgICAgICAgIGlmICghZG9jdW1lbnQtPm93bmVyRWxlbWVu
dCgpICYmIG5ld0ltYWdlKQorICAgICAgICAgICAgcHJpbnRmKCJJbWFnZSByZXF1ZXN0ZWQgYXQg
JWRcbiIsIGVsZW1lbnQoKS0+Z2V0RG9jdW1lbnQoKS0+ZWxhcHNlZFRpbWUoKSk7CisjZW5kaWYK
ICAgICAgICAgbV9maXJlZExvYWQgPSBmYWxzZTsKICAgICAgICAgbV9pbWFnZUNvbXBsZXRlID0g
ZmFsc2U7CiAgICAgICAgIENhY2hlZEltYWdlKiBvbGRJbWFnZSA9IG1faW1hZ2U7CkBAIC0xMzMs
NyArMTM3LDcgQEAgdm9pZCBIVE1MSW1hZ2VMb2FkZXI6Om5vdGlmeUZpbmlzaGVkKENhYwogLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MSW1hZ2VFbGVtZW50SW1wbDo6SFRNTEltYWdlRWxlbWVu
dEltcGwoRG9jdW1lbnRQdHIgKmRvYywgSFRNTEZvcm1FbGVtZW50SW1wbCAqZikKLSAgICA6IEhU
TUxFbGVtZW50SW1wbChkb2MpLCBtX2ltYWdlTG9hZGVyKHRoaXMpLCBpc21hcChmYWxzZSksIG1f
Zm9ybShmKQorICAgIDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6aW1nKCksIGRvYyksIG1f
aW1hZ2VMb2FkZXIodGhpcyksIGlzbWFwKGZhbHNlKSwgbV9mb3JtKGYpCiB7CiAgICAgaWYgKG1f
Zm9ybSkKICAgICAgICAgbV9mb3JtLT5yZWdpc3RlckltZ0VsZW1lbnQodGhpcyk7CkBAIC0xNDUs
MTEgKzE0OSw2IEBAIEhUTUxJbWFnZUVsZW1lbnRJbXBsOjp+SFRNTEltYWdlRWxlbWVudEkKICAg
ICAgICAgbV9mb3JtLT5yZW1vdmVJbWdFbGVtZW50KHRoaXMpOwogfQogCi1Ob2RlSW1wbDo6SWQg
SFRNTEltYWdlRWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfSU1HOwot
fQotCiBib29sIEhUTUxJbWFnZUVsZW1lbnRJbXBsOjptYXBUb0VudHJ5KE5vZGVJbXBsOjpJZCBh
dHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdAogewogICAgIHN3aXRjaChh
dHRyKQpAQCAtNTI4LDcgKzUyNyw3IEBAIGxvbmcgSFRNTEltYWdlRWxlbWVudEltcGw6OnkoKSBj
b25zdAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MTWFwRWxlbWVudEltcGw6OkhUTUxNYXBF
bGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAgIDogSFRNTEVsZW1lbnRJbXBsKGRvYykK
KyAgICA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6Om1hcCgpLCBkb2MpCiB7CiB9CiAKQEAg
LTUzOCwxMSArNTM3LDYgQEAgSFRNTE1hcEVsZW1lbnRJbXBsOjp+SFRNTE1hcEVsZW1lbnRJbXBs
KAogICAgICAgICBnZXREb2N1bWVudCgpLT5yZW1vdmVJbWFnZU1hcCh0aGlzKTsKIH0KIAotTm9k
ZUltcGw6OklkIEhUTUxNYXBFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJ
RF9NQVA7Ci19Ci0KIGJvb2wKIEhUTUxNYXBFbGVtZW50SW1wbDo6bWFwTW91c2VFdmVudChpbnQg
eF8sIGludCB5XywgaW50IHdpZHRoXywgaW50IGhlaWdodF8sCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUmVuZGVyT2JqZWN0OjpOb2RlSW5mbyYgaW5mbykKQEAgLTU1MiwzMiAr
NTQ2LDI4IEBAIEhUTUxNYXBFbGVtZW50SW1wbDo6bWFwTW91c2VFdmVudChpbnQgeF8KICAgICBR
UHRyU3RhY2s8Tm9kZUltcGw+IG5vZGVTdGFjazsKIAogICAgIE5vZGVJbXBsICpjdXJyZW50ID0g
Zmlyc3RDaGlsZCgpOwotICAgIHdoaWxlKDEpCi0gICAgewotICAgICAgICBpZighY3VycmVudCkK
LSAgICAgICAgeworICAgIHdoaWxlICgxKSB7CisgICAgICAgIGlmICghY3VycmVudCkgewogICAg
ICAgICAgICAgaWYobm9kZVN0YWNrLmlzRW1wdHkoKSkgYnJlYWs7CiAgICAgICAgICAgICBjdXJy
ZW50ID0gbm9kZVN0YWNrLnBvcCgpOwogICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQtPm5l
eHRTaWJsaW5nKCk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICBp
ZihjdXJyZW50LT5pZCgpPT1JRF9BUkVBKQotICAgICAgICB7CisgICAgICAgIAorICAgICAgICBp
ZiAoY3VycmVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmFyZWEoKSkpIHsKICAgICAgICAgICAg
IC8vY291dCA8PCAiYXJlYSBmb3VuZCAiIDw8IGVuZGw7Ci0gICAgICAgICAgICBIVE1MQXJlYUVs
ZW1lbnRJbXBsKiBhcmVhPXN0YXRpY19jYXN0PEhUTUxBcmVhRWxlbWVudEltcGwqPihjdXJyZW50
KTsKKyAgICAgICAgICAgIEhUTUxBcmVhRWxlbWVudEltcGwqIGFyZWEgPSBzdGF0aWNfY2FzdDxI
VE1MQXJlYUVsZW1lbnRJbXBsKj4oY3VycmVudCk7CiAgICAgICAgICAgICBpZiAoYXJlYS0+bWFw
TW91c2VFdmVudCh4Xyx5Xyx3aWR0aF8saGVpZ2h0XywgaW5mbykpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIE5vZGVJbXBsICpjaGls
ZCA9IGN1cnJlbnQtPmZpcnN0Q2hpbGQoKTsKLSAgICAgICAgaWYoY2hpbGQpCi0gICAgICAgIHsK
KyAgICAgICAgaWYgKGNoaWxkKSB7CiAgICAgICAgICAgICBub2RlU3RhY2sucHVzaChjdXJyZW50
KTsKICAgICAgICAgICAgIGN1cnJlbnQgPSBjaGlsZDsKICAgICAgICAgfQogICAgICAgICBlbHNl
Ci0gICAgICAgIHsKICAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0U2libGluZygp
OwotICAgICAgICB9CiAgICAgfQogCiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNjM1LDExICs2MjUs
NiBAQCBIVE1MQXJlYUVsZW1lbnRJbXBsOjp+SFRNTEFyZWFFbGVtZW50SW1wCiAgICAgaWYgKG1f
Y29vcmRzKSBkZWxldGUgW10gbV9jb29yZHM7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MQXJlYUVs
ZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0FSRUE7Ci19Ci0KIHZvaWQg
SFRNTEFyZWFFbGVtZW50SW1wbDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRl
SW1wbCAqYXR0cikKIHsKICAgICBzd2l0Y2ggKGF0dHItPmlkKCkpCkluZGV4OiBraHRtbC9odG1s
L2h0bWxfaW1hZ2VpbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUv
a2h0bWwvaHRtbC9odG1sX2ltYWdlaW1wbC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIxCmRp
ZmYgLXUgLXAgLXIxLjIxIGtodG1sL2h0bWwvaHRtbF9pbWFnZWltcGwuaAotLS0ga2h0bWwvaHRt
bC9odG1sX2ltYWdlaW1wbC5oCTExIE1heSAyMDA1IDA1OjQ5OjM0IC0wMDAwCTEuMjEKKysrIGto
dG1sL2h0bWwvaHRtbF9pbWFnZWltcGwuaAkyMCBKdW4gMjAwNSAyMDo1NTozOSAtMDAwMApAQCAt
NzcsOCArNzcsNiBAQCBwdWJsaWM6CiAgICAgSFRNTEltYWdlRWxlbWVudEltcGwoRG9jdW1lbnRQ
dHIgKmRvYywgSFRNTEZvcm1FbGVtZW50SW1wbCAqZiA9IDApOwogICAgIH5IVE1MSW1hZ2VFbGVt
ZW50SW1wbCgpOwogCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwotCiAgICAgdmlydHVhbCBi
b29sIG1hcFRvRW50cnkoTm9kZUltcGw6OklkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiBy
ZXN1bHQpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBw
ZWRBdHRyaWJ1dGVJbXBsICopOwogCkBAIC0xNjEsOCArMTU5LDYgQEAgcHVibGljOgogICAgIEhU
TUxBcmVhRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYyk7CiAgICAgfkhUTUxBcmVhRWxlbWVu
dEltcGwoKTsKIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKLQogICAgIHZpcnR1YWwgdm9p
ZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICphdHRyKTsKIAogICAg
IGJvb2wgaXNEZWZhdWx0KCkgY29uc3QgeyByZXR1cm4gbV9zaGFwZSA9PSBEZWZhdWx0OyB9CkBA
IC0yMTIsMTEgKzIwOCw4IEBAIGNsYXNzIEhUTUxNYXBFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1M
RWwKIHsKIHB1YmxpYzoKICAgICBIVE1MTWFwRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYyk7
Ci0KICAgICB+SFRNTE1hcEVsZW1lbnRJbXBsKCk7CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29u
c3Q7Ci0KICAgICB2aXJ0dWFsIERPTVN0cmluZyBnZXROYW1lKCkgY29uc3QgeyByZXR1cm4gbV9u
YW1lOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0
cmlidXRlSW1wbCAqYXR0cik7CkluZGV4OiBraHRtbC9odG1sL2h0bWxfaW5saW5laW1wbC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sX2lu
bGluZWltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjQyCmRpZmYgLXUgLXAgLXIxLjQy
IGtodG1sL2h0bWwvaHRtbF9pbmxpbmVpbXBsLmNwcAotLS0ga2h0bWwvaHRtbC9odG1sX2lubGlu
ZWltcGwuY3BwCTExIE1heSAyMDA1IDA1OjQ5OjM0IC0wMDAwCTEuNDIKKysrIGtodG1sL2h0bWwv
aHRtbF9pbmxpbmVpbXBsLmNwcAkyMCBKdW4gMjAwNSAyMDo1NTozOSAtMDAwMApAQCAtNDUsNyAr
NDUsNyBAQCB1c2luZyBuYW1lc3BhY2Uga2h0bWw7CiBuYW1lc3BhY2UgRE9NIHsKIAogSFRNTEFu
Y2hvckVsZW1lbnRJbXBsOjpIVE1MQW5jaG9yRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykK
LSAgICA6IEhUTUxFbGVtZW50SW1wbChkb2MpCisgICAgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5h
bWVzOjphKCksIGRvYykKIHsKICAgICBtX2hhc1RhcmdldCA9IGZhbHNlOwogfQpAQCAtMTA0LDEx
ICsxMDQsNiBAQCBib29sIEhUTUxBbmNob3JFbGVtZW50SW1wbDo6aXNLZXlib2FyZEZvCiAgICAg
cmV0dXJuIGdldERvY3VtZW50KCktPnBhcnQoKS0+dGFic1RvTGlua3MoKTsKIH0KIAotTm9kZUlt
cGw6OklkIEhUTUxBbmNob3JFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJ
RF9BOwotfQotCiB2b2lkIEhUTUxBbmNob3JFbGVtZW50SW1wbDo6ZGVmYXVsdEV2ZW50SGFuZGxl
cihFdmVudEltcGwgKmV2dCkKIHsKICAgICAvLyBSZWFjdCBvbiBjbGlja3MgYW5kIG9uIGtleXBy
ZXNzZXMuCkBAIC0xNTIsNyArMTQ3LDcgQEAgdm9pZCBIVE1MQW5jaG9yRWxlbWVudEltcGw6OmRl
ZmF1bHRFdmVudAogICAgICAgICBpZiAoIGUgJiYgZS0+YnV0dG9uKCkgPT0gMSApCiAgICAgICAg
ICAgICB1dGFyZ2V0ID0gIl9ibGFuayI7CiAKLSAgICAgICAgaWYgKCBldnQtPnRhcmdldCgpLT5p
ZCgpID09IElEX0lNRyApIHsKKyAgICAgICAgaWYgKGV2dC0+dGFyZ2V0KCktPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjppbWcoKSkpIHsKICAgICAgICAgICAgIEhUTUxJbWFnZUVsZW1lbnRJbXBsKiBp
bWcgPSBzdGF0aWNfY2FzdDxIVE1MSW1hZ2VFbGVtZW50SW1wbCo+KCBldnQtPnRhcmdldCgpICk7
CiAgICAgICAgICAgICBpZiAoIGltZyAmJiBpbWctPmlzU2VydmVyTWFwKCkgKQogICAgICAgICAg
ICAgewpAQCAtMzgyLDcgKzM3Nyw3IEBAIHZvaWQgSFRNTEFuY2hvckVsZW1lbnRJbXBsOjpmb2N1
cygpCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSFRNTEJSRWxlbWVudEltcGw6OkhUTUxCUkVs
ZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpIDogSFRNTEVsZW1lbnRJbXBsKGRvYykKK0hUTUxC
UkVsZW1lbnRJbXBsOjpIVE1MQlJFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKSA6IEhUTUxF
bGVtZW50SW1wbChIVE1MTmFtZXM6OmJyKCksIGRvYykKIHsKIH0KIApAQCAtMzkwLDExICszODUs
NiBAQCBIVE1MQlJFbGVtZW50SW1wbDo6fkhUTUxCUkVsZW1lbnRJbXBsKCkKIHsKIH0KIAotTm9k
ZUltcGw6OklkIEhUTUxCUkVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElE
X0JSOwotfQotCiBib29sIEhUTUxCUkVsZW1lbnRJbXBsOjptYXBUb0VudHJ5KE5vZGVJbXBsOjpJ
ZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdAogewogICAgIGlmIChh
dHRyID09IEFUVFJfQ0xFQVIpIHsKQEAgLTQ0NSw3ICs0MzUsNyBAQCB2b2lkIEhUTUxCUkVsZW1l
bnRJbXBsOjpzZXRDbGVhcihjb25zdCBECiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxGb250
RWxlbWVudEltcGw6OkhUTUxGb250RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgICA6
IEhUTUxFbGVtZW50SW1wbChkb2MpCisgICAgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjpm
b250KCksIGRvYykKIHsKIH0KIApAQCAtNDUzLDExICs0NDMsNiBAQCBIVE1MRm9udEVsZW1lbnRJ
bXBsOjp+SFRNTEZvbnRFbGVtZW50SW1wCiB7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MRm9udEVs
ZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0ZPTlQ7Ci19Ci0KIC8vIEFs
bG93cyBsZWFkaW5nIHNwYWNlcy4KIC8vIEFsbG93cyB0cmFpbGluZyBub25udW1lcmljIGNoYXJh
Y3RlcnMuCiAvLyBSZXR1cm5zIDEwIGZvciBhbnkgc2l6ZSBncmVhdGVyIHRoYW4gOS4KQEAgLTU5
MCw4ICs1NzUsOCBAQCB2b2lkIEhUTUxGb250RWxlbWVudEltcGw6OnNldFNpemUoY29uc3QgCiAK
IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSFRNTE1vZEVsZW1lbnRJbXBsOjpIVE1MTW9kRWxlbWVu
dEltcGwoRG9jdW1lbnRQdHIgKmRvYywgdXNob3J0IGVsZW1lbnRJZCkKLSAgICA6IEhUTUxHZW5l
cmljRWxlbWVudEltcGwoZG9jLCBlbGVtZW50SWQpCitIVE1MTW9kRWxlbWVudEltcGw6OkhUTUxN
b2RFbGVtZW50SW1wbChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudFB0ciAq
ZG9jKQorICAgIDogSFRNTEVsZW1lbnRJbXBsKHRhZ05hbWUsIGRvYykKIHsKIH0KIApAQCAtNjE4
LDE1ICs2MDMsMTAgQEAgdm9pZCBIVE1MTW9kRWxlbWVudEltcGw6OnNldERhdGVUaW1lKGNvbgog
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MUXVvdGVFbGVtZW50SW1wbDo6SFRNTFF1b3RlRWxl
bWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50SW1wbChkb2MpCisg
ICAgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjpxKCksIGRvYykKIHsKIH0KIAotTm9kZUlt
cGw6OklkIEhUTUxRdW90ZUVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElE
X1E7Ci19Ci0gICAgCiBET01TdHJpbmcgSFRNTFF1b3RlRWxlbWVudEltcGw6OmNpdGUoKSBjb25z
dAogewogICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoQVRUUl9DSVRFKTsKSW5kZXg6IGtodG1sL2h0
bWwvaHRtbF9pbmxpbmVpbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNv
cmUva2h0bWwvaHRtbC9odG1sX2lubGluZWltcGwuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4x
OQpkaWZmIC11IC1wIC1yMS4xOSBraHRtbC9odG1sL2h0bWxfaW5saW5laW1wbC5oCi0tLSBraHRt
bC9odG1sL2h0bWxfaW5saW5laW1wbC5oCTExIE1heSAyMDA1IDA1OjQ5OjM0IC0wMDAwCTEuMTkK
KysrIGtodG1sL2h0bWwvaHRtbF9pbmxpbmVpbXBsLmgJMjAgSnVuIDIwMDUgMjA6NTU6MzkgLTAw
MDAKQEAgLTM5LDcgKzM5LDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpc01vdXNlRm9j
dXNhYmxlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlzS2V5Ym9hcmRGb2N1c2FibGUoKSBj
b25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNGb2N1c2FibGUoKSBjb25zdDsKLSAgICB2aXJ0dWFs
IElkIGlkKCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1h
cHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIpOwogICAgIHZpcnR1YWwgdm9pZCBkZWZhdWx0RXZlbnRI
YW5kbGVyKEV2ZW50SW1wbCAqZXZ0KTsKICAgICB2aXJ0dWFsIHZvaWQgYWNjZXNzS2V5QWN0aW9u
KGJvb2wgZnVsbEFjdGlvbik7CkBAIC05Nyw4ICs5Niw2IEBAIGNsYXNzIEhUTUxCUkVsZW1lbnRJ
bXBsIDogcHVibGljIEhUTUxFbGUKIHB1YmxpYzoKICAgICBIVE1MQlJFbGVtZW50SW1wbChEb2N1
bWVudFB0ciAqZG9jKTsKICAgICB+SFRNTEJSRWxlbWVudEltcGwoKTsKLQotICAgIHZpcnR1YWwg
SWQgaWQoKSBjb25zdDsKICAgICAKICAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShJZCBhdHRy
LCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQg
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqYXR0cik7CkBAIC0xMTYs
OCArMTEzLDYgQEAgY2xhc3MgSFRNTEZvbnRFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MRQogcHVi
bGljOgogICAgIEhUTUxGb250RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYyk7CiAgICAgfkhU
TUxGb250RWxlbWVudEltcGwoKTsKLQotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKICAgICAK
ICAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRy
eSYgcmVzdWx0KSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUo
TWFwcGVkQXR0cmlidXRlSW1wbCAqYXR0cik7CkBAIC0xMzQsMTAgKzEyOSwxMCBAQCBwdWJsaWM6
CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotY2xhc3MgSFRNTE1vZEVsZW1lbnRJbXBsIDogcHVi
bGljIEhUTUxHZW5lcmljRWxlbWVudEltcGwKK2NsYXNzIEhUTUxNb2RFbGVtZW50SW1wbCA6IHB1
YmxpYyBIVE1MRWxlbWVudEltcGwKIHsKIHB1YmxpYzoKLSAgICBIVE1MTW9kRWxlbWVudEltcGwo
RG9jdW1lbnRQdHIgKmRvYywgdXNob3J0IGVsZW1lbnRJZCk7CisgICAgSFRNTE1vZEVsZW1lbnRJ
bXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50UHRyICpkb2MpOwogCiAg
ICAgRE9NU3RyaW5nIGNpdGUoKSBjb25zdDsKICAgICB2b2lkIHNldENpdGUoY29uc3QgRE9NU3Ry
aW5nICYpOwpAQCAtMTUyLDggKzE0Nyw2IEBAIGNsYXNzIEhUTUxRdW90ZUVsZW1lbnRJbXBsIDog
cHVibGljIEhUTUwKIHsKIHB1YmxpYzoKICAgICBIVE1MUXVvdGVFbGVtZW50SW1wbChEb2N1bWVu
dFB0ciAqZG9jKTsKLQotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKICAgICAKICAgICBET01T
dHJpbmcgY2l0ZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0Q2l0ZShjb25zdCBET01TdHJpbmcgJik7
CkluZGV4OiBraHRtbC9odG1sL2h0bWxfbGlzdGltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbF9saXN0aW1wbC5jcHAsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuOQpkaWZmIC11IC1wIC1yMS45IGtodG1sL2h0bWwvaHRtbF9saXN0aW1w
bC5jcHAKLS0tIGtodG1sL2h0bWwvaHRtbF9saXN0aW1wbC5jcHAJMTEgTWF5IDIwMDUgMDU6NDk6
MzQgLTAwMDAJMS45CisrKyBraHRtbC9odG1sL2h0bWxfbGlzdGltcGwuY3BwCTIwIEp1biAyMDA1
IDIwOjU1OjM5IC0wMDAwCkBAIC0zMiwxMSArMzIsNiBAQCB1c2luZyBuYW1lc3BhY2Uga2h0bWw7
CiAKIG5hbWVzcGFjZSBET00gewogCi1Ob2RlSW1wbDo6SWQgSFRNTFVMaXN0RWxlbWVudEltcGw6
OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfVUw7Ci19Ci0KIGJvb2wgSFRNTFVMaXN0RWxl
bWVudEltcGw6Om1hcFRvRW50cnkoTm9kZUltcGw6OklkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVu
dHJ5JiByZXN1bHQpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChhdHRyKSB7CkBAIC04NCwxMSArNzks
NiBAQCB2b2lkIEhUTUxVTGlzdEVsZW1lbnRJbXBsOjpzZXRUeXBlKGNvbnN0CiAKIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KIAotTm9kZUltcGw6OklkIEhUTUxEaXJlY3RvcnlFbGVtZW50SW1wbDo6aWQo
KSBjb25zdAotewotICAgIHJldHVybiBJRF9ESVI7Ci19Ci0KIGJvb2wgSFRNTERpcmVjdG9yeUVs
ZW1lbnRJbXBsOjpjb21wYWN0KCkgY29uc3QKIHsKICAgICByZXR1cm4gIWdldEF0dHJpYnV0ZShB
VFRSX0NPTVBBQ1QpLmlzTnVsbCgpOwpAQCAtMTAxLDExICs5MSw2IEBAIHZvaWQgSFRNTERpcmVj
dG9yeUVsZW1lbnRJbXBsOjpzZXRDb21wYWMKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Ob2Rl
SW1wbDo6SWQgSFRNTE1lbnVFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJ
RF9NRU5VOwotfQotCiBib29sIEhUTUxNZW51RWxlbWVudEltcGw6OmNvbXBhY3QoKSBjb25zdAog
ewogICAgIHJldHVybiAhZ2V0QXR0cmlidXRlKEFUVFJfQ09NUEFDVCkuaXNOdWxsKCk7CkBAIC0x
MTgsMTEgKzEwMyw2IEBAIHZvaWQgSFRNTE1lbnVFbGVtZW50SW1wbDo6c2V0Q29tcGFjdChib28K
IAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Ob2RlSW1wbDo6SWQgSFRNTE9MaXN0RWxlbWVudElt
cGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfT0w7Ci19Ci0KIGJvb2wgSFRNTE9MaXN0
RWxlbWVudEltcGw6Om1hcFRvRW50cnkoTm9kZUltcGw6OklkIGF0dHIsIE1hcHBlZEF0dHJpYnV0
ZUVudHJ5JiByZXN1bHQpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChhdHRyKSB7CkBAIC0xNTUsNyAr
MTM1LDcgQEAgdm9pZCBIVE1MT0xpc3RFbGVtZW50SW1wbDo6cGFyc2VNYXBwZWRBdAogICAgIGNh
c2UgQVRUUl9TVEFSVDoKICAgICAgICAgICAgIF9zdGFydCA9ICFhdHRyLT5pc051bGwoKSA/IGF0
dHItPnZhbHVlKCkudG9JbnQoKSA6IDE7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgSFRNTFVMaXN0
RWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICBIVE1MRWxl
bWVudEltcGw6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwogICAgIH0KIH0KIApAQCAtMTg2
LDExICsxNjYsNiBAQCB2b2lkIEhUTUxPTGlzdEVsZW1lbnRJbXBsOjpzZXRUeXBlKGNvbnN0CiAK
IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotTm9kZUltcGw6OklkIEhUTUxMSUVsZW1lbnRJbXBsOjpp
ZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0xJOwotfQotCiBib29sIEhUTUxMSUVsZW1lbnRJ
bXBsOjptYXBUb0VudHJ5KE5vZGVJbXBsOjpJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYg
cmVzdWx0KSBjb25zdAogewogICAgIHN3aXRjaCAoYXR0cikgewpAQCAtMjUyLDExICsyMjcsOCBA
QCB2b2lkIEhUTUxMSUVsZW1lbnRJbXBsOjphdHRhY2goKQogICAgICAgICBOb2RlSW1wbCAqbGlz
dE5vZGUgPSAwOwogICAgICAgICBOb2RlSW1wbCAqbiA9IHRoaXM7CiAgICAgICAgIHdoaWxlICgh
bGlzdE5vZGUgJiYgKG4gPSBuLT5wYXJlbnROb2RlKCkpKSB7Ci0gICAgICAgICAgICBzd2l0Y2gg
KG4tPmlkKCkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIElEX1VMOgotICAgICAgICAgICAgICAg
IGNhc2UgSURfT0w6Ci0gICAgICAgICAgICAgICAgICAgIGxpc3ROb2RlID0gbjsKLSAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmIChuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dWwoKSkgfHwg
bi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9sKCkpKQorICAgICAgICAgICAgICAgIGxpc3ROb2Rl
ID0gbjsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8gSWYgd2UgYXJlIG5vdCBpbiBh
IGxpc3QsIHRlbGwgdGhlIHJlbmRlcmVyIHNvIGl0IGNhbiBwb3NpdGlvbiB1cyBpbnNpZGUuCkBA
IC0yNjUsNyArMjM3LDcgQEAgdm9pZCBIVE1MTElFbGVtZW50SW1wbDo6YXR0YWNoKCkKICAgICAg
ICAgICAgIHJlbmRlci0+c2V0Tm90SW5MaXN0KHRydWUpOwogCiAJLy8gSWYgd2UgYXJlIGZpcnN0
LCBhbmQgdGhlIE9MIGhhcyBhIHN0YXJ0IGF0dHIsIHNldCB0aGUgdmFsdWUuCi0JaWYgKGxpc3RO
b2RlICYmIGxpc3ROb2RlLT5pZCgpID09IElEX09MICYmICFtX3JlbmRlci0+cHJldmlvdXNTaWJs
aW5nKCkpIHsKKwlpZiAobGlzdE5vZGUgJiYgbGlzdE5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjpvbCgpKSAmJiAhbV9yZW5kZXItPnByZXZpb3VzU2libGluZygpKSB7CiAJICAgIEhUTUxPTGlz
dEVsZW1lbnRJbXBsICpvbCA9IHN0YXRpY19jYXN0PEhUTUxPTGlzdEVsZW1lbnRJbXBsICo+KGxp
c3ROb2RlKTsKICAgICAgICAgICAgIHJlbmRlci0+c2V0VmFsdWUob2wtPnN0YXJ0KCkpOwogCX0K
QEAgLTI5NSwxMiArMjY3LDggQEAgdm9pZCBIVE1MTElFbGVtZW50SW1wbDo6c2V0VmFsdWUobG9u
ZyB2YQogewogICAgIHNldEF0dHJpYnV0ZShBVFRSX1ZBTFVFLCBRU3RyaW5nOjpudW1iZXIodmFs
dWUpKTsKIH0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotTm9kZUltcGw6OklkIEhUTUxETGlzdEVs
ZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0RMOwotfQorLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQogCiBib29sIEhUTUxETGlzdEVsZW1lbnRJbXBsOjpjb21wYWN0KCkgY29uc3QK
IHsKSW5kZXg6IGtodG1sL2h0bWwvaHRtbF9saXN0aW1wbC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbF9saXN0aW1wbC5oLHYKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjcKZGlmZiAtdSAtcCAtcjEuNyBraHRtbC9odG1sL2h0bWxfbGlzdGltcGwu
aAotLS0ga2h0bWwvaHRtbC9odG1sX2xpc3RpbXBsLmgJMTEgTWF5IDIwMDUgMDU6NDk6MzQgLTAw
MDAJMS43CisrKyBraHRtbC9odG1sL2h0bWxfbGlzdGltcGwuaAkyMCBKdW4gMjAwNSAyMDo1NTo0
MCAtMDAwMApAQCAtMzUsMTEgKzM1LDkgQEAgbmFtZXNwYWNlIERPTQogY2xhc3MgSFRNTFVMaXN0
RWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTEVsZW1lbnRJbXBsCiB7CiBwdWJsaWM6Ci0gICAgSFRN
TFVMaXN0RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykgOiBIVE1MRWxlbWVudEltcGwoZG9j
KSB7fQorICAgIEhUTUxVTGlzdEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpIDogSFRNTEVs
ZW1lbnRJbXBsKEhUTUxOYW1lczo6dWwoKSwgZG9jKSB7fQogICAgIHZpcnR1YWwgfkhUTUxVTGlz
dEVsZW1lbnRJbXBsKCkge30KIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKLQogICAgIHZp
cnR1YWwgYm9vbCBtYXBUb0VudHJ5KElkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1
bHQpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRB
dHRyaWJ1dGVJbXBsICopOwogCkBAIC01Nyw5ICs1NSw3IEBAIHB1YmxpYzoKIGNsYXNzIEhUTUxE
aXJlY3RvcnlFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MRWxlbWVudEltcGwKIHsKIHB1YmxpYzoK
LSAgICBIVE1MRGlyZWN0b3J5RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykgOiBIVE1MRWxl
bWVudEltcGwoZG9jKSB7fQotCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OworICAgIEhUTUxE
aXJlY3RvcnlFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKSA6IEhUTUxFbGVtZW50SW1wbChI
VE1MTmFtZXM6OmRpcigpLCBkb2MpIHt9CiAKICAgICBib29sIGNvbXBhY3QoKSBjb25zdDsKICAg
ICB2b2lkIHNldENvbXBhY3QoYm9vbCk7CkBAIC03MCw5ICs2Niw3IEBAIHB1YmxpYzoKIGNsYXNz
IEhUTUxNZW51RWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTEVsZW1lbnRJbXBsCiB7CiBwdWJsaWM6
Ci0gICAgSFRNTE1lbnVFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKSA6IEhUTUxFbGVtZW50
SW1wbChkb2MpIHt9Ci0KLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CisgICAgSFRNTE1lbnVF
bGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKSA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6
Om1lbnUoKSwgZG9jKSB7fQogCiAgICAgYm9vbCBjb21wYWN0KCkgY29uc3Q7CiAgICAgdm9pZCBz
ZXRDb21wYWN0KGJvb2wpOwpAQCAtODAsMTMgKzc0LDExIEBAIHB1YmxpYzoKIAogLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQogCi1jbGFzcyBIVE1MT0xpc3RFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MVUxp
c3RFbGVtZW50SW1wbAorY2xhc3MgSFRNTE9MaXN0RWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTEVs
ZW1lbnRJbXBsCiB7CiBwdWJsaWM6CiAgICAgSFRNTE9MaXN0RWxlbWVudEltcGwoRG9jdW1lbnRQ
dHIgKmRvYykKLSAgICAgICAgOiBIVE1MVUxpc3RFbGVtZW50SW1wbChkb2MpIHsgX3N0YXJ0ID0g
MTsgfQotCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OworICAgICAgICA6IEhUTUxFbGVtZW50
SW1wbChIVE1MTmFtZXM6Om9sKCksIGRvYykgeyBfc3RhcnQgPSAxOyB9CiAgICAgCiAgICAgdmly
dHVhbCBib29sIG1hcFRvRW50cnkoSWQgYXR0ciwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3Vs
dCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0
dHJpYnV0ZUltcGwgKik7CkBAIC0xMTAsMTEgKzEwMiw5IEBAIGNsYXNzIEhUTUxMSUVsZW1lbnRJ
bXBsIDogcHVibGljIEhUTUxFbGUKIHsKIHB1YmxpYzoKICAgICBIVE1MTElFbGVtZW50SW1wbChE
b2N1bWVudFB0ciAqZG9jKQotICAgICAgICA6IEhUTUxFbGVtZW50SW1wbChkb2MpIHsgaXNWYWx1
ZWQgPSBmYWxzZTsgfQorICAgICAgICA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6OmxpKCks
IGRvYykgeyBpc1ZhbHVlZCA9IGZhbHNlOyB9CiAgICAgdmlydHVhbCB+SFRNTExJRWxlbWVudElt
cGwoKSB7fQogCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwotCiAgICAgdmlydHVhbCBib29s
IG1hcFRvRW50cnkoTm9kZUltcGw6OklkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1
bHQpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRB
dHRyaWJ1dGVJbXBsICphdHRyKTsKIApAQCAtMTM2LDExICsxMjYsOSBAQCBwcml2YXRlOgogY2xh
c3MgSFRNTERMaXN0RWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTEVsZW1lbnRJbXBsCiB7CiBwdWJs
aWM6Ci0gICAgSFRNTERMaXN0RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykgOiBIVE1MRWxl
bWVudEltcGwoZG9jKSB7fQorICAgIEhUTUxETGlzdEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpk
b2MpIDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6ZGwoKSwgZG9jKSB7fQogICAgIHZpcnR1
YWwgfkhUTUxETGlzdEVsZW1lbnRJbXBsKCkge30KIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25z
dDsKLQogICAgIGJvb2wgY29tcGFjdCgpIGNvbnN0OwogICAgIHZvaWQgc2V0Q29tcGFjdChib29s
KTsKIH07CkluZGV4OiBraHRtbC9odG1sL2h0bWxfbWlzY2ltcGwuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbF9taXNjaW1wbC5jcHAsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuMjYKZGlmZiAtdSAtcCAtcjEuMjYga2h0bWwvaHRtbC9odG1s
X21pc2NpbXBsLmNwcAotLS0ga2h0bWwvaHRtbC9odG1sX21pc2NpbXBsLmNwcAkxMSBKdW4gMjAw
NSAwOTo1MTowMSAtMDAwMAkxLjI2CisrKyBraHRtbC9odG1sL2h0bWxfbWlzY2ltcGwuY3BwCTIw
IEp1biAyMDA1IDIwOjU1OjQwIC0wMDAwCkBAIC0zNSwxNSArMzUsMTAgQEAKIG5hbWVzcGFjZSBE
T00gewogCiBIVE1MQmFzZUZvbnRFbGVtZW50SW1wbDo6SFRNTEJhc2VGb250RWxlbWVudEltcGwo
RG9jdW1lbnRQdHIgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50SW1wbChkb2MpCisgICAgOiBIVE1M
RWxlbWVudEltcGwoSFRNTE5hbWVzOjpiYXNlZm9udCgpLCBkb2MpCiB7CiB9CiAKLU5vZGVJbXBs
OjpJZCBIVE1MQmFzZUZvbnRFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJ
RF9CQVNFRk9OVDsKLX0KLQogRE9NU3RyaW5nIEhUTUxCYXNlRm9udEVsZW1lbnRJbXBsOjpjb2xv
cigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGdldEF0dHJpYnV0ZShBVFRSX0NPTE9SKTsKQEAgLTE0
MSw3MiArMTM2LDcyIEBAIE5vZGVJbXBsICpIVE1MQ29sbGVjdGlvbkltcGw6OnRyYXZlcnNlTmUK
ICAgICAgICAgICAgIEhUTUxFbGVtZW50SW1wbCAqZSA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50
SW1wbCAqPihjdXJyZW50KTsKICAgICAgICAgICAgIHN3aXRjaCh0eXBlKSB7CiAgICAgICAgICAg
ICBjYXNlIERPQ19JTUFHRVM6Ci0gICAgICAgICAgICAgICAgaWYoZS0+aWQoKSA9PSBJRF9JTUcp
CisgICAgICAgICAgICAgICAgaWYgKGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmltZygpKSkK
ICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgY2FzZSBET0NfRk9STVM6Ci0gICAgICAgICAgICAgICAgaWYoZS0+aWQo
KSA9PSBJRF9GT1JNKQorICAgICAgICAgICAgICAgIGlmKGUtPmhhc0xvY2FsTmFtZShIVE1MTmFt
ZXM6OmZvcm0oKSkpCiAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgRE9DX05BTUVBQkxFX0lURU1TOgotICAg
ICAgICAgICAgICAgIGlmKGUtPmlkKCkgPT0gSURfSU1HKQorICAgICAgICAgICAgICAgIGlmIChl
LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjppbWcoKSkpCiAgICAgICAgICAgICAgICAgICAgIGZv
dW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBpZihlLT5pZCgpID09IElEX0ZPUk0pCisgICAg
ICAgICAgICAgICAgaWYgKGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmZvcm0oKSkpCiAgICAg
ICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBpZihlLT5pZCgp
ID09IElEX0FQUExFVCkKKyAgICAgICAgICAgICAgICBpZiAoZS0+aGFzTG9jYWxOYW1lKEhUTUxO
YW1lczo6YXBwbGV0KCkpKQogICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAg
ICAgICAgICAgICAgaWYoZS0+aWQoKSA9PSBJRF9FTUJFRCkKKyAgICAgICAgICAgICAgICBpZiAo
ZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6ZW1iZWQoKSkpCiAgICAgICAgICAgICAgICAgICAg
IGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBpZihlLT5pZCgpID09IElEX09CSkVDVCkK
KyAgICAgICAgICAgICAgICBpZiAoZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b2JqZWN0KCkp
KQogICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICBjYXNlIFRBQkxFX1RCT0RJRVM6Ci0gICAgICAgICAgICAgICAgaWYo
ZS0+aWQoKSA9PSBJRF9UQk9EWSkKKyAgICAgICAgICAgICAgICBpZiAoZS0+aGFzTG9jYWxOYW1l
KEhUTUxOYW1lczo6dGJvZHkoKSkpCiAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsK
LSAgICAgICAgICAgICAgICBlbHNlIGlmKGUtPmlkKCkgPT0gSURfVEFCTEUpCisgICAgICAgICAg
ICAgICAgZWxzZSBpZiAoZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dGFibGUoKSkpCiAgICAg
ICAgICAgICAgICAgICAgIGRlZXAgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIGNhc2UgVFJfQ0VMTFM6Ci0gICAgICAgICAgICAgICAgaWYoZS0+aWQoKSA9PSBJ
RF9URCB8fCBlLT5pZCgpID09IElEX1RIKQorICAgICAgICAgICAgICAgIGlmIChlLT5oYXNMb2Nh
bE5hbWUoSFRNTE5hbWVzOjp0ZCgpKSB8fCBlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0aCgp
KSkKICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGVs
c2UgaWYoZS0+aWQoKSA9PSBJRF9UQUJMRSkKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChlLT5o
YXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0YWJsZSgpKSkKICAgICAgICAgICAgICAgICAgICAgZGVl
cCA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBUQUJM
RV9ST1dTOgogICAgICAgICAgICAgY2FzZSBUU0VDVElPTl9ST1dTOgotICAgICAgICAgICAgICAg
IGlmKGUtPmlkKCkgPT0gSURfVFIpCisgICAgICAgICAgICAgICAgaWYgKGUtPmhhc0xvY2FsTmFt
ZShIVE1MTmFtZXM6OnRyKCkpKQogICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7Ci0g
ICAgICAgICAgICAgICAgZWxzZSBpZihlLT5pZCgpID09IElEX1RBQkxFKQorICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnRhYmxlKCkpKQogICAgICAg
ICAgICAgICAgICAgICBkZWVwID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICBjYXNlIFNFTEVDVF9PUFRJT05TOgotICAgICAgICAgICAgICAgIGlmKGUtPmlkKCkg
PT0gSURfT1BUSU9OKQorICAgICAgICAgICAgICAgIGlmIChlLT5oYXNMb2NhbE5hbWUoSFRNTE5h
bWVzOjpvcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgTUFQX0FSRUFTOgotICAgICAgICAg
ICAgICAgIGlmKGUtPmlkKCkgPT0gSURfQVJFQSkKKyAgICAgICAgICAgICAgICBpZiAoZS0+aGFz
TG9jYWxOYW1lKEhUTUxOYW1lczo6YXJlYSgpKSkKICAgICAgICAgICAgICAgICAgICAgZm91bmQg
PSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBET0NfQVBQ
TEVUUzogICAvLyBhbGwgT0JKRUNUIGFuZCBBUFBMRVQgZWxlbWVudHMKLSAgICAgICAgICAgICAg
ICBpZihlLT5pZCgpID09IElEX09CSkVDVCB8fCBlLT5pZCgpID09IElEX0FQUExFVCkKKyAgICAg
ICAgICAgICAgICBpZiAoZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b2JqZWN0KCkpIHx8IGUt
Pmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmFwcGxldCgpKSkKICAgICAgICAgICAgICAgICAgICAg
Zm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBE
T0NfRU1CRURTOiAgIC8vIGFsbCBFTUJFRCBlbGVtZW50cwotICAgICAgICAgICAgICAgIGlmKGUt
PmlkKCkgPT0gSURfRU1CRUQpCisgICAgICAgICAgICAgICAgaWYgKGUtPmhhc0xvY2FsTmFtZShI
VE1MTmFtZXM6OmVtYmVkKCkpKQogICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIERPQ19PQkpFQ1RTOiAgIC8v
IGFsbCBPQkpFQ1QgZWxlbWVudHMKLSAgICAgICAgICAgICAgICBpZihlLT5pZCgpID09IElEX09C
SkVDVCkKKyAgICAgICAgICAgICAgICBpZiAoZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b2Jq
ZWN0KCkpKQogICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIERPQ19MSU5LUzogICAgIC8vIGFsbCBBIF9hbmRf
IEFSRUEgZWxlbWVudHMgd2l0aCBhIHZhbHVlIGZvciBocmVmCi0gICAgICAgICAgICAgICAgaWYo
ZS0+aWQoKSA9PSBJRF9BIHx8IGUtPmlkKCkgPT0gSURfQVJFQSkKLSAgICAgICAgICAgICAgICAg
ICAgaWYoIWUtPmdldEF0dHJpYnV0ZShBVFRSX0hSRUYpLmlzTnVsbCgpKQorICAgICAgICAgICAg
ICAgIGlmIChlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjphKCkpIHx8IGUtPmhhc0xvY2FsTmFt
ZShIVE1MTmFtZXM6OmFyZWEoKSkpCisgICAgICAgICAgICAgICAgICAgIGlmICghZS0+Z2V0QXR0
cmlidXRlKEFUVFJfSFJFRikuaXNOdWxsKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBmb3Vu
ZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIERPQ19B
TkNIT1JTOiAgICAgIC8vIGFsbCBBIGVsZW1lbnRzIHdpdGggYSB2YWx1ZSBmb3IgbmFtZSBvciBh
biBpZCBhdHRyaWJ1dGUKLSAgICAgICAgICAgICAgICBpZihlLT5pZCgpID09IElEX0EpCi0gICAg
ICAgICAgICAgICAgICAgIGlmKCFlLT5nZXRBdHRyaWJ1dGUoQVRUUl9OQU1FKS5pc051bGwoKSkK
KyAgICAgICAgICAgICAgICBpZiAoZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6YSgpKSkKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKCFlLT5nZXRBdHRyaWJ1dGUoQVRUUl9OQU1FKS5pc051bGwo
KSkKICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIGNhc2UgRE9DX0FMTDoKQEAgLTIxOSw5ICsyMTQsOSBAQCBO
b2RlSW1wbCAqSFRNTENvbGxlY3Rpb25JbXBsOjp0cmF2ZXJzZU5lCiAgICAgICAgICAgICBkZWZh
dWx0OgogICAgICAgICAgICAgICAgIGtkRGVidWcoIDYwMzAgKSA8PCAiRXJyb3IgaW4gSFRNTENv
bGxlY3Rpb24sIHdyb25nIHRhZ0lkISIgPDwgZW5kbDsKICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGlmIChmb3VuZCkgeworCisgICAgICAgICAgICBpZiAoZm91bmQpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGN1cnJlbnQ7Ci0gICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoZGVlcCkg
ewogICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT50cmF2ZXJzZU5leHROb2RlKG1f
YmFzZS5nZXQoKSk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC0yOTgsMjkgKzI5Mywz
MSBAQCBOb2RlSW1wbCAqSFRNTENvbGxlY3Rpb25JbXBsOjpuZXh0SXRlbSgpCiAKIGJvb2wgSFRN
TENvbGxlY3Rpb25JbXBsOjpjaGVja0Zvck5hbWVNYXRjaChOb2RlSW1wbCAqbm9kZSwgYm9vbCBj
aGVja05hbWUsIGNvbnN0IERPTVN0cmluZyAmbmFtZSwgYm9vbCBjYXNlU2Vuc2l0aXZlKSBjb25z
dAogewotICAgIEVsZW1lbnRJbXBsICplID0gc3RhdGljX2Nhc3Q8RWxlbWVudEltcGwgKj4obm9k
ZSk7CisgICAgaWYgKCFub2RlLT5pc0hUTUxFbGVtZW50KCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAKKyAgICBIVE1MRWxlbWVudEltcGwgKmUgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVu
dEltcGwqPihub2RlKTsKICAgICBpZiAoY2FzZVNlbnNpdGl2ZSkgewogICAgICAgICBpZiAoY2hl
Y2tOYW1lKSB7CiAgICAgICAgICAgICAvLyBkb2N1bWVudC5hbGwgcmV0dXJucyBvbmx5IGltYWdl
cywgZm9ybXMsIGFwcGxldHMsIG9iamVjdHMgYW5kIGVtYmVkcwogICAgICAgICAgICAgLy8gYnkg
bmFtZSAodGhvdWdoIGV2ZXJ5dGhpbmcgYnkgaWQpCiAgICAgICAgICAgICBpZiAodHlwZSA9PSBE
T0NfQUxMICYmIAotICAgICAgICAgICAgICAgICEoZS0+aWQoKSA9PSBJRF9JTUcgfHwgZS0+aWQo
KSA9PSBJRF9GT1JNIHx8Ci0gICAgICAgICAgICAgICAgICBlLT5pZCgpID09IElEX0FQUExFVCB8
fCBlLT5pZCgpID09IElEX09CSkVDVCB8fAotICAgICAgICAgICAgICAgICAgZS0+aWQoKSA9PSBJ
RF9FTUJFRCkpCisgICAgICAgICAgICAgICAgIShlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpp
bWcoKSkgfHwgZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6Zm9ybSgpKSB8fAorICAgICAgICAg
ICAgICAgICAgZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6YXBwbGV0KCkpIHx8IGUtPmhhc0xv
Y2FsTmFtZShIVE1MTmFtZXM6Om9iamVjdCgpKSB8fAorICAgICAgICAgICAgICAgICAgZS0+aGFz
TG9jYWxOYW1lKEhUTUxOYW1lczo6ZW1iZWQoKSkpKQogICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgICAgICAgICAgcmV0dXJuIGUtPmdldEF0dHJpYnV0ZShBVFRSX05BTUUpID09
IG5hbWUgJiYgZS0+Z2V0QXR0cmlidXRlKEFUVFJfSUQpICE9IG5hbWU7Ci0gICAgICAgIH0gZWxz
ZSB7CisgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgcmV0dXJuIGUtPmdldEF0dHJpYnV0ZShB
VFRSX0lEKSA9PSBuYW1lOwotICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKGNo
ZWNrTmFtZSkgewogICAgICAgICAgICAgLy8gZG9jdW1lbnQuYWxsIHJldHVybnMgb25seSBpbWFn
ZXMsIGZvcm1zLCBhcHBsZXRzLCBvYmplY3RzIGFuZCBlbWJlZHMKICAgICAgICAgICAgIC8vIGJ5
IG5hbWUgKHRob3VnaCBldmVyeXRoaW5nIGJ5IGlkKQogICAgICAgICAgICAgaWYgKHR5cGUgPT0g
RE9DX0FMTCAmJiAKLSAgICAgICAgICAgICAgICAhKGUtPmlkKCkgPT0gSURfSU1HIHx8IGUtPmlk
KCkgPT0gSURfRk9STSB8fAotICAgICAgICAgICAgICAgICAgZS0+aWQoKSA9PSBJRF9BUFBMRVQg
fHwgZS0+aWQoKSA9PSBJRF9PQkpFQ1QgfHwKLSAgICAgICAgICAgICAgICAgIGUtPmlkKCkgPT0g
SURfRU1CRUQpKQorICAgICAgICAgICAgICAgICEoZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6
aW1nKCkpIHx8IGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmZvcm0oKSkgfHwKKyAgICAgICAg
ICAgICAgICAgIGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmFwcGxldCgpKSB8fCBlLT5oYXNM
b2NhbE5hbWUoSFRNTE5hbWVzOjpvYmplY3QoKSkgfHwKKyAgICAgICAgICAgICAgICAgIGUtPmhh
c0xvY2FsTmFtZShIVE1MTmFtZXM6OmVtYmVkKCkpKSkKICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICAgICAgICAgIHJldHVybiBlLT5nZXRBdHRyaWJ1dGUoQVRUUl9OQU1FKS5k
b21TdHJpbmcoKS5sb3dlcigpID09IG5hbWUubG93ZXIoKSAmJgpAQCAtMzc5LDcgKzM3Niw5IEBA
IHZvaWQgSFRNTENvbGxlY3Rpb25JbXBsOjp1cGRhdGVOYW1lQ2FjaGUKICAgICAgICAgcmV0dXJu
OwogICAgIAogICAgIGZvciAoTm9kZUltcGwgKm4gPSB0cmF2ZXJzZU5leHRJdGVtKG1fYmFzZS5n
ZXQoKSk7IG47IG4gPSB0cmF2ZXJzZU5leHRJdGVtKG4pKSB7Ci0gICAgICAgIEVsZW1lbnRJbXBs
ICplID0gc3RhdGljX2Nhc3Q8RWxlbWVudEltcGwgKj4obik7CisgICAgICAgIGlmICghbi0+aXNI
VE1MRWxlbWVudCgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIEhUTUxFbGVtZW50
SW1wbCogZSA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCo+KG4pOwogICAgICAgICBRU3Ry
aW5nIGlkQXR0ciA9IGUtPmdldEF0dHJpYnV0ZShBVFRSX0lEKS5zdHJpbmcoKTsKICAgICAgICAg
UVN0cmluZyBuYW1lQXR0ciA9IGUtPmdldEF0dHJpYnV0ZShBVFRSX05BTUUpLnN0cmluZygpOwog
ICAgICAgICBpZiAoIWlkQXR0ci5pc0VtcHR5KCkpIHsKQEAgLTM5Myw5ICszOTIsOSBAQCB2b2lk
IEhUTUxDb2xsZWN0aW9uSW1wbDo6dXBkYXRlTmFtZUNhY2hlCiAgICAgICAgIH0KICAgICAgICAg
aWYgKCFuYW1lQXR0ci5pc0VtcHR5KCkgJiYgaWRBdHRyICE9IG5hbWVBdHRyCiAgICAgICAgICAg
ICAmJiAodHlwZSAhPSBET0NfQUxMIHx8IAotICAgICAgICAgICAgICAgIChlLT5pZCgpID09IElE
X0lNRyB8fCBlLT5pZCgpID09IElEX0ZPUk0gfHwKLSAgICAgICAgICAgICAgICAgZS0+aWQoKSA9
PSBJRF9BUFBMRVQgfHwgZS0+aWQoKSA9PSBJRF9PQkpFQ1QgfHwKLSAgICAgICAgICAgICAgICAg
ZS0+aWQoKSA9PSBJRF9FTUJFRCkpKSB7CisgICAgICAgICAgICAgICAgKGUtPmhhc0xvY2FsTmFt
ZShIVE1MTmFtZXM6OmltZygpKSB8fCBlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpmb3JtKCkp
IHx8CisgICAgICAgICAgICAgICAgIGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmFwcGxldCgp
KSB8fCBlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvYmplY3QoKSkgfHwKKyAgICAgICAgICAg
ICAgICAgZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6ZW1iZWQoKSkpKSkgewogICAgICAgICAg
ICAgLy8gYWRkIHRvIG5hbWUgY2FjaGUKICAgICAgICAgICAgIFFQdHJWZWN0b3I8Tm9kZUltcGw+
ICpuYW1lVmVjdG9yID0gaW5mby0+bmFtZUNhY2hlLmZpbmQobmFtZUF0dHIpOwogICAgICAgICAg
ICAgaWYgKCFuYW1lVmVjdG9yKSB7CkBAIC01MzIsMTIgKzUzMSwxMCBAQCBOb2RlSW1wbCogSFRN
TEZvcm1Db2xsZWN0aW9uSW1wbDo6Z2V0TmFtCiAKIE5vZGVJbXBsKiBIVE1MRm9ybUNvbGxlY3Rp
b25JbXBsOjpnZXROYW1lZEZvcm1JdGVtKGludCBhdHRyX2lkLCBjb25zdCBET01TdHJpbmcmIG5h
bWUsIGludCBkdXBsaWNhdGVOdW1iZXIsIGJvb2wgY2FzZVNlbnNpdGl2ZSkgY29uc3QKIHsKLSAg
ICBpZihtX2Jhc2UtPm5vZGVUeXBlKCkgPT0gTm9kZTo6RUxFTUVOVF9OT0RFKQotICAgIHsKKyAg
ICBpZiAobV9iYXNlLT5ub2RlVHlwZSgpID09IE5vZGU6OkVMRU1FTlRfTk9ERSkgewogICAgICAg
ICBIVE1MRWxlbWVudEltcGwqIGJhc2VFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJ
bXBsKj4obV9iYXNlLmdldCgpKTsKICAgICAgICAgYm9vbCBmb3VuZElucHV0RWxlbWVudHMgPSBm
YWxzZTsKLSAgICAgICAgaWYoYmFzZUVsZW1lbnQtPmlkKCkgPT0gSURfRk9STSkKLSAgICAgICAg
eworICAgICAgICBpZiAoYmFzZUVsZW1lbnQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmZvcm0o
KSkpIHsKICAgICAgICAgICAgIEhUTUxGb3JtRWxlbWVudEltcGwqIGYgPSBzdGF0aWNfY2FzdDxI
VE1MRm9ybUVsZW1lbnRJbXBsKj4oYmFzZUVsZW1lbnQpOwogICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGYtPmZvcm1FbGVtZW50cy5jb3VudCgpOyArK2kpIHsKICAgICAgICAg
ICAgICAgICBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbCogZSA9IGYtPmZvcm1FbGVtZW50c1tp
XTsKQEAgLTU1Nyw4ICs1NTQsNyBAQCBOb2RlSW1wbCogSFRNTEZvcm1Db2xsZWN0aW9uSW1wbDo6
Z2V0TmFtCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoICFmb3VuZElu
cHV0RWxlbWVudHMgKQotICAgICAgICB7CisgICAgICAgIGlmICghZm91bmRJbnB1dEVsZW1lbnRz
KSB7CiAgICAgICAgICAgICBIVE1MRm9ybUVsZW1lbnRJbXBsKiBmID0gc3RhdGljX2Nhc3Q8SFRN
TEZvcm1FbGVtZW50SW1wbCo+KGJhc2VFbGVtZW50KTsKIAogICAgICAgICAgICAgZm9yKHVuc2ln
bmVkIGkgPSAwOyBpIDwgZi0+aW1nRWxlbWVudHMuY291bnQoKTsgKytpKQpAQCAtNjUwLDcgKzY0
Niw3IEBAIHZvaWQgSFRNTEZvcm1Db2xsZWN0aW9uSW1wbDo6dXBkYXRlTmFtZUMKIAogICAgIFFE
aWN0PGNoYXI+IGZvdW5kSW5wdXRFbGVtZW50czsKIAotICAgIGlmIChtX2Jhc2UtPmlkKCkgIT0g
SURfRk9STSkgeworICAgIGlmICghbV9iYXNlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Zm9ybSgp
KSkgewogICAgICAgICBpbmZvLT5oYXNOYW1lQ2FjaGUgPSB0cnVlOwogICAgICAgICByZXR1cm47
CiAgICAgfQpJbmRleDoga2h0bWwvaHRtbC9odG1sX21pc2NpbXBsLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sX21pc2NpbXBsLmgsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuMTYKZGlmZiAtdSAtcCAtcjEuMTYga2h0bWwvaHRtbC9odG1sX21p
c2NpbXBsLmgKLS0tIGtodG1sL2h0bWwvaHRtbF9taXNjaW1wbC5oCTExIE1heSAyMDA1IDAwOjU4
OjI4IC0wMDAwCTEuMTYKKysrIGtodG1sL2h0bWwvaHRtbF9taXNjaW1wbC5oCTIwIEp1biAyMDA1
IDIwOjU1OjQwIC0wMDAwCkBAIC0zOSw4ICszOSw2IEBAIGNsYXNzIEhUTUxCYXNlRm9udEVsZW1l
bnRJbXBsIDogcHVibGljIEgKIHB1YmxpYzoKICAgICBIVE1MQmFzZUZvbnRFbGVtZW50SW1wbChE
b2N1bWVudFB0ciAqZG9jKTsKIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKLQogICAgIERP
TVN0cmluZyBjb2xvcigpIGNvbnN0OwogICAgIHZvaWQgc2V0Q29sb3IoY29uc3QgRE9NU3RyaW5n
ICYpOwogCkluZGV4OiBraHRtbC9odG1sL2h0bWxfb2JqZWN0aW1wbC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sX29iamVjdGltcGwuY3Bw
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjY0CmRpZmYgLXUgLXAgLXIxLjY0IGtodG1sL2h0bWwv
aHRtbF9vYmplY3RpbXBsLmNwcAotLS0ga2h0bWwvaHRtbC9odG1sX29iamVjdGltcGwuY3BwCTMx
IE1heSAyMDA1IDAwOjE1OjUyIC0wMDAwCTEuNjQKKysrIGtodG1sL2h0bWwvaHRtbF9vYmplY3Rp
bXBsLmNwcAkyMCBKdW4gMjAwNSAyMDo1NTo0MSAtMDAwMApAQCAtNTcsNyArNTcsNyBAQCBuYW1l
c3BhY2UgRE9NIHsKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogSFRNTEFwcGxldEVsZW1lbnRJbXBs
OjpIVE1MQXBwbGV0RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgOiBIVE1MRWxlbWVu
dEltcGwoZG9jKQorICA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6OmFwcGxldCgpLCBkb2Mp
CiB7CiAgICAgYXBwbGV0SW5zdGFuY2UgPSAwOwogICAgIG1fYWxsUGFyYW1zQXZhaWxhYmxlID0g
ZmFsc2U7CkBAIC02OCwxMSArNjgsNiBAQCBIVE1MQXBwbGV0RWxlbWVudEltcGw6On5IVE1MQXBw
bGV0RWxlbWVuCiAgICAgZGVsZXRlIGFwcGxldEluc3RhbmNlOwogfQogCi1Ob2RlSW1wbDo6SWQg
SFRNTEFwcGxldEVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0FQUExF
VDsKLX0KLQogYm9vbCBIVE1MQXBwbGV0RWxlbWVudEltcGw6Om1hcFRvRW50cnkoTm9kZUltcGw6
OklkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0CiB7CiAgICAgc3dp
dGNoIChhdHRyKSB7CkBAIC0zNDIsMTggKzMzNywxMyBAQCB2b2lkIEhUTUxBcHBsZXRFbGVtZW50
SW1wbDo6c2V0V2lkdGgoY29uCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxFbWJlZEVsZW1l
bnRJbXBsOjpIVE1MRW1iZWRFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAgIDogSFRN
TEVsZW1lbnRJbXBsKGRvYyksIGVtYmVkSW5zdGFuY2UoMCkKKyAgICA6IEhUTUxFbGVtZW50SW1w
bChIVE1MTmFtZXM6OmVtYmVkKCksIGRvYyksIGVtYmVkSW5zdGFuY2UoMCkKIHt9CiAKIEhUTUxF
bWJlZEVsZW1lbnRJbXBsOjp+SFRNTEVtYmVkRWxlbWVudEltcGwoKQogewogfQogCi1Ob2RlSW1w
bDo6SWQgSFRNTEVtYmVkRWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURf
RU1CRUQ7Ci19Ci0KICNpZiBBUFBMRV9DSEFOR0VTCiBLSlM6OkJpbmRpbmdzOjpJbnN0YW5jZSAq
SFRNTEVtYmVkRWxlbWVudEltcGw6OmdldEVtYmVkSW5zdGFuY2UoKSBjb25zdAogewpAQCAtNDY4
LDcgKzQ1OCw3IEBAIGJvb2wgSFRNTEVtYmVkRWxlbWVudEltcGw6OnJlbmRlcmVySXNOZWUKICAg
ICBLSFRNTFBhcnQgKnBhcnQgPSBnZXREb2N1bWVudCgpLT5wYXJ0KCk7CiAgICAgaWYgKCFwYXJ0
KQogCXJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gcGFydC0+cGx1Z2luc0VuYWJsZWQoKSAmJiBw
YXJlbnROb2RlKCktPmlkKCkgIT0gSURfT0JKRUNUOworICAgIHJldHVybiBwYXJ0LT5wbHVnaW5z
RW5hYmxlZCgpICYmICFwYXJlbnROb2RlKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvYmplY3Qo
KSk7CiB9CiAKIFJlbmRlck9iamVjdCAqSFRNTEVtYmVkRWxlbWVudEltcGw6OmNyZWF0ZVJlbmRl
cmVyKFJlbmRlckFyZW5hICphcmVuYSwgUmVuZGVyU3R5bGUgKnN0eWxlKQpAQCAtNDkzLDkgKzQ4
Myw5IEBAIGJvb2wgSFRNTEVtYmVkRWxlbWVudEltcGw6OmlzVVJMQXR0cmlidXQKIAogSFRNTE9i
amVjdEVsZW1lbnRJbXBsOjpIVE1MT2JqZWN0RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykg
CiAjaWYgQVBQTEVfQ0hBTkdFUwotOiBIVE1MRWxlbWVudEltcGwoZG9jKSwgbV9pbWFnZUxvYWRl
cigwKSwgb2JqZWN0SW5zdGFuY2UoMCkKKzogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6b2Jq
ZWN0KCksIGRvYyksIG1faW1hZ2VMb2FkZXIoMCksIG9iamVjdEluc3RhbmNlKDApCiAjZWxzZQot
OiBIVE1MRWxlbWVudEltcGwoZG9jKSwgbV9pbWFnZUxvYWRlcigwKQorOiBIVE1MRWxlbWVudElt
cGwoSFRNTE5hbWVzOjpvYmplY3QoKSwgZG9jKSwgbV9pbWFnZUxvYWRlcigwKQogI2VuZGlmCiB7
CiAgICAgbmVlZFdpZGdldFVwZGF0ZSA9IGZhbHNlOwpAQCAtNTA3LDExICs0OTcsNiBAQCBIVE1M
T2JqZWN0RWxlbWVudEltcGw6On5IVE1MT2JqZWN0RWxlbWVuCiAgICAgZGVsZXRlIG1faW1hZ2VM
b2FkZXI7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MT2JqZWN0RWxlbWVudEltcGw6OmlkKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gSURfT0JKRUNUOwotfQotCiAjaWYgQVBQTEVfQ0hBTkdFUwogS0pT
OjpCaW5kaW5nczo6SW5zdGFuY2UgKkhUTUxPYmplY3RFbGVtZW50SW1wbDo6Z2V0T2JqZWN0SW5z
dGFuY2UoKSBjb25zdAogewpAQCAtOTE4LDcgKzkwMyw3IEBAIHZvaWQgSFRNTE9iamVjdEVsZW1l
bnRJbXBsOjpzZXRXaWR0aChjb24KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogSFRNTFBhcmFtRWxl
bWVudEltcGw6OkhUTUxQYXJhbUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0gICAgOiBI
VE1MRWxlbWVudEltcGwoZG9jKQorICAgIDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6cGFy
YW0oKSwgZG9jKQogewogfQogCkBAIC05MjYsMTEgKzkxMSw2IEBAIEhUTUxQYXJhbUVsZW1lbnRJ
bXBsOjp+SFRNTFBhcmFtRWxlbWVudEkKIHsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxQYXJhbUVs
ZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX1BBUkFNOwotfQotCiB2b2lk
IEhUTUxQYXJhbUVsZW1lbnRJbXBsOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1
dGVJbXBsICphdHRyKQogewogICAgIHN3aXRjaCggYXR0ci0+aWQoKSApCkluZGV4OiBraHRtbC9o
dG1sL2h0bWxfb2JqZWN0aW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJD
b3JlL2todG1sL2h0bWwvaHRtbF9vYmplY3RpbXBsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
MzEKZGlmZiAtdSAtcCAtcjEuMzEga2h0bWwvaHRtbC9odG1sX29iamVjdGltcGwuaAotLS0ga2h0
bWwvaHRtbC9odG1sX29iamVjdGltcGwuaAkxMSBNYXkgMjAwNSAwNTo0OTozNCAtMDAwMAkxLjMx
CisrKyBraHRtbC9odG1sL2h0bWxfb2JqZWN0aW1wbC5oCTIwIEp1biAyMDA1IDIwOjU1OjQxIC0w
MDAwCkBAIC00MiwxMSArNDIsOCBAQCBjbGFzcyBIVE1MQXBwbGV0RWxlbWVudEltcGwgOiBwdWJs
aWMgSFRNCiB7CiBwdWJsaWM6CiAgICAgSFRNTEFwcGxldEVsZW1lbnRJbXBsKERvY3VtZW50UHRy
ICpkb2MpOwotCiAgICAgfkhUTUxBcHBsZXRFbGVtZW50SW1wbCgpOwogCi0gICAgdmlydHVhbCBJ
ZCBpZCgpIGNvbnN0OwotCiAgICAgdmlydHVhbCBib29sIG1hcFRvRW50cnkoSWQgYXR0ciwgTWFw
cGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNl
TWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKnRva2VuKTsKICAgICAKQEAgLTEx
MiwxMSArMTA5LDggQEAgY2xhc3MgSFRNTEVtYmVkRWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTAog
ewogcHVibGljOgogICAgIEhUTUxFbWJlZEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpOwot
CiAgICAgfkhUTUxFbWJlZEVsZW1lbnRJbXBsKCk7CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29u
c3Q7Ci0KICAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1
dGVFbnRyeSYgcmVzdWx0KSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRy
aWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqYXR0cik7CiAKQEAgLTE0NiwxMSArMTQwLDggQEAg
Y2xhc3MgSFRNTE9iamVjdEVsZW1lbnRJbXBsIDogcHVibGljIEhUTQogewogcHVibGljOgogICAg
IEhUTUxPYmplY3RFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKTsKLQogICAgIH5IVE1MT2Jq
ZWN0RWxlbWVudEltcGwoKTsKIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKLQogICAgIEhU
TUxGb3JtRWxlbWVudEltcGwgKmZvcm0oKSBjb25zdDsKIAogICAgIHZpcnR1YWwgYm9vbCBtYXBU
b0VudHJ5KElkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0OwpAQCAt
MjQ3LDExICsyMzgsOCBAQCBjbGFzcyBIVE1MUGFyYW1FbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1M
CiAgICAgZnJpZW5kIGNsYXNzIEhUTUxBcHBsZXRFbGVtZW50SW1wbDsKIHB1YmxpYzoKICAgICBI
VE1MUGFyYW1FbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKTsKLQogICAgIH5IVE1MUGFyYW1F
bGVtZW50SW1wbCgpOwogCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwotCiAgICAgdmlydHVh
bCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKnRva2VuKTsK
IAogICAgIHZpcnR1YWwgYm9vbCBpc1VSTEF0dHJpYnV0ZShBdHRyaWJ1dGVJbXBsICphdHRyKSBj
b25zdDsKSW5kZXg6IGtodG1sL2h0bWwvaHRtbF90YWJsZWltcGwuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbF90YWJsZWltcGwuY3BwLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjUzCmRpZmYgLXUgLXAgLXIxLjUzIGtodG1sL2h0bWwvaHRt
bF90YWJsZWltcGwuY3BwCi0tLSBraHRtbC9odG1sL2h0bWxfdGFibGVpbXBsLmNwcAkxNyBKdW4g
MjAwNSAyMTo1NTozOSAtMDAwMAkxLjUzCisrKyBraHRtbC9odG1sL2h0bWxfdGFibGVpbXBsLmNw
cAkyMCBKdW4gMjAwNSAyMDo1NTo0MiAtMDAwMApAQCAtNTEsNyArNTEsNyBAQCB1c2luZyBuYW1l
c3BhY2Uga2h0bWw7CiBuYW1lc3BhY2UgRE9NIHsKIAogSFRNTFRhYmxlRWxlbWVudEltcGw6OkhU
TUxUYWJsZUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0gIDogSFRNTEVsZW1lbnRJbXBs
KGRvYykKKyAgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjp0YWJsZSgpLCBkb2MpCiB7CiAg
ICAgdENhcHRpb24gPSAwOwogICAgIGhlYWQgPSAwOwpAQCAtNzMsMTEgKzczLDYgQEAgSFRNTFRh
YmxlRWxlbWVudEltcGw6On5IVE1MVGFibGVFbGVtZW50SQogewogfQogCi1Ob2RlSW1wbDo6SWQg
SFRNTFRhYmxlRWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfVEFCTEU7
Ci19Ci0KIE5vZGVJbXBsKiBIVE1MVGFibGVFbGVtZW50SW1wbDo6c2V0Q2FwdGlvbiggSFRNTFRh
YmxlQ2FwdGlvbkVsZW1lbnRJbXBsICpjICkKIHsKICAgICBpbnQgZXhjZXB0aW9uY29kZSA9IDA7
CkBAIC0xNDYsNyArMTQxLDcgQEAgSFRNTEVsZW1lbnRJbXBsICpIVE1MVGFibGVFbGVtZW50SW1w
bDo6YwogICAgIGlmKCFoZWFkKQogICAgIHsKICAgICAgICAgaW50IGV4Y2VwdGlvbmNvZGUgPSAw
OwotICAgICAgICBoZWFkID0gbmV3IEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbChkb2NQdHIo
KSwgSURfVEhFQUQsIHRydWUgLyogaW1wbGljaXQgKi8pOworICAgICAgICBoZWFkID0gbmV3IEhU
TUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbChIVE1MTmFtZXM6OnRoZWFkKCksIGRvY1B0cigpLCB0
cnVlIC8qIGltcGxpY2l0ICovKTsKICAgICAgICAgaWYoZm9vdCkKICAgICAgICAgICAgIGluc2Vy
dEJlZm9yZSggaGVhZCwgZm9vdCwgZXhjZXB0aW9uY29kZSApOwogICAgICAgICBlbHNlIGlmKGZp
cnN0Qm9keSkKQEAgLTE3MSw3ICsxNjYsNyBAQCBIVE1MRWxlbWVudEltcGwgKkhUTUxUYWJsZUVs
ZW1lbnRJbXBsOjpjCiAgICAgaWYoIWZvb3QpCiAgICAgewogICAgICAgICBpbnQgZXhjZXB0aW9u
Y29kZSA9IDA7Ci0gICAgICAgIGZvb3QgPSBuZXcgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBs
KGRvY1B0cigpLCBJRF9URk9PVCwgdHJ1ZSAvKmltcGxpY2l0ICovKTsKKyAgICAgICAgZm9vdCA9
IG5ldyBIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGwoSFRNTE5hbWVzOjp0Zm9vdCgpLCBkb2NQ
dHIoKSwgdHJ1ZSAvKmltcGxpY2l0ICovKTsKICAgICAgICAgaWYoZmlyc3RCb2R5KQogICAgICAg
ICAgICAgaW5zZXJ0QmVmb3JlKCBmb290LCBmaXJzdEJvZHksIGV4Y2VwdGlvbmNvZGUgKTsKICAg
ICAgICAgZWxzZQpAQCAtMjE2LDcgKzIxMSw3IEBAIEhUTUxFbGVtZW50SW1wbCAqSFRNTFRhYmxl
RWxlbWVudEltcGw6OmkKICAgICAvLyAobm90ZTogdGhpcyBpcyBkaWZmZXJlbnQgZnJvbSAiaWYg
dGhlIHRhYmxlIGhhcyBubyBzZWN0aW9ucyIsIHNpbmNlIHdlIGNhbiBoYXZlCiAgICAgLy8gPFRB
QkxFPjxUUj4pCiAgICAgaWYoIWZpcnN0Qm9keSAmJiAhaGVhZCAmJiAhZm9vdCAmJiAhaGFzQ2hp
bGROb2RlcygpKQotICAgICAgICBzZXRUQm9keSggbmV3IEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50
SW1wbChkb2NQdHIoKSwgSURfVEJPRFksIHRydWUgLyogaW1wbGljaXQgKi8pICk7CisgICAgICAg
IHNldFRCb2R5KCBuZXcgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsKEhUTUxOYW1lczo6dGJv
ZHkoKSwgZG9jUHRyKCksIHRydWUgLyogaW1wbGljaXQgKi8pICk7CiAKICAgICAvL2tkRGVidWco
NjAzMCkgPDwga19mdW5jaW5mbyA8PCBpbmRleCA8PCBlbmRsOwogICAgIC8vIElFIHRyZWF0cyBp
bmRleD0tMSBhcyBkZWZhdWx0IHZhbHVlIG1lYW5pbmcgJ2FwcGVuZCBhZnRlciBsYXN0JwpAQCAt
MjMwLDcgKzIyNSw4IEBAIEhUTUxFbGVtZW50SW1wbCAqSFRNTFRhYmxlRWxlbWVudEltcGw6OmkK
ICAgICB7CiAJLy8gdGhlcmUgY291bGQgYmUgMiB0Zm9vdCBlbGVtZW50cyBpbiB0aGUgdGFibGUu
IE9ubHkgdGhlIGZpcnN0IG9uZSBpcyB0aGUgImZvb3QiLCB0aGF0J3Mgd2h5IHdlIGhhdmUgdGhl
IG1vcmUKIAkvLyBjb21wbGljYXRlZCBpZiBzdGF0ZW1lbnQgYmVsb3cuCi0gICAgICAgIGlmICgg
bm9kZSAhPSBmb290ICYmIChub2RlLT5pZCgpID09IElEX1RIRUFEIHx8IG5vZGUtPmlkKCkgPT0g
SURfVEZPT1QgfHwgbm9kZS0+aWQoKSA9PSBJRF9UQk9EWSkgKQorICAgICAgICBpZiAobm9kZSAh
PSBmb290ICYmIChub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGhlYWQoKSkgfHwgbm9kZS0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRmb290KCkpIHx8IAorICAgICAgICAgICAgbm9kZS0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OnRib2R5KCkpKSkKICAgICAgICAgewogICAgICAgICAgICAgc2Vj
dGlvbiA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbCAqPihub2RlKTsK
ICAgICAgICAgICAgIGxhc3RTZWN0aW9uID0gc2VjdGlvbjsKQEAgLTI3Niw4ICsyNzIsOCBAQCB2
b2lkIEhUTUxUYWJsZUVsZW1lbnRJbXBsOjpkZWxldGVSb3coIGxvCiAgICAgYm9vbCBmb3VuZCA9
IGZhbHNlOwogICAgIGZvciAoIDsgbm9kZSA7IG5vZGUgPSBub2RlLT5uZXh0U2libGluZygpICkK
ICAgICB7Ci0gICAgICAgIGlmICggbm9kZSAhPSBmb290ICYmIChub2RlLT5pZCgpID09IElEX1RI
RUFEIHx8IG5vZGUtPmlkKCkgPT0gSURfVEZPT1QgfHwgbm9kZS0+aWQoKSA9PSBJRF9UQk9EWSkg
KQotICAgICAgICB7CisgICAgICAgIGlmIChub2RlICE9IGZvb3QgJiYgKG5vZGUtPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjp0aGVhZCgpKSB8fCBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGZv
b3QoKSkgfHwgCisgICAgICAgICAgICBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGJvZHko
KSkpKSB7CiAgICAgICAgICAgICBzZWN0aW9uID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlU2VjdGlv
bkVsZW1lbnRJbXBsICo+KG5vZGUpOwogICAgICAgICAgICAgbGFzdFNlY3Rpb24gPSBzZWN0aW9u
OwogICAgICAgICAgICAgaW50IHJvd3MgPSBzZWN0aW9uLT5udW1Sb3dzKCk7CkBAIC0zMDksNyAr
MzA1LDcgQEAgTm9kZUltcGwgKkhUTUxUYWJsZUVsZW1lbnRJbXBsOjphZGRDaGlsZAogICAgIGtk
RGVidWcoIDYwMzAgKSA8PCBub2RlTmFtZSgpLnN0cmluZygpIDw8ICIoVGFibGUpOjphZGRDaGls
ZCggIiA8PCBjaGlsZC0+bm9kZU5hbWUoKS5zdHJpbmcoKSA8PCAiICkiIDw8IGVuZGw7CiAjZW5k
aWYKIAotICAgIGlmIChjaGlsZC0+aWQoKSA9PSBJRF9GT1JNKSB7CisgICAgaWYgKGNoaWxkLT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6Zm9ybSgpKSkgewogICAgICAgICAvLyBGaXJzdCBhZGQgdGhl
IGNoaWxkLgogICAgICAgICBIVE1MRWxlbWVudEltcGw6OmFkZENoaWxkKGNoaWxkKTsKICAgICAg
ICAgLy8gTm93IHNpbXBseSByZXR1cm4gb3Vyc2VsdmVzIGFzIHRoZSBuZXdub2RlLiAgVGhpcyBo
YXMgdGhlIGVmZmVjdCBvZgpAQCAtMzM3LDI4ICszMzMsMTUgQEAgTm9kZUltcGwgKkhUTUxUYWJs
ZUVsZW1lbnRJbXBsOjphZGRDaGlsZAogCiAgICAgaW50IGV4Y2VwdGlvbmNvZGUgPSAwOwogICAg
IE5vZGVJbXBsICpyZXR2YWwgPSBhcHBlbmRDaGlsZCggY2hpbGQsIGV4Y2VwdGlvbmNvZGUgKTsK
LSAgICBpZiAoIHJldHZhbCApIHsKLQlzd2l0Y2goY2hpbGQtPmlkKCkpIHsKLQljYXNlIElEX0NB
UFRJT046Ci0JICAgIGlmICggIXRDYXB0aW9uICkKLQkJdENhcHRpb24gPSBzdGF0aWNfY2FzdDxI
VE1MVGFibGVDYXB0aW9uRWxlbWVudEltcGwgKj4oY2hpbGQpOwotCSAgICBicmVhazsKLQljYXNl
IElEX0NPTDoKLQljYXNlIElEX0NPTEdST1VQOgotCSAgICBicmVhazsKLQljYXNlIElEX1RIRUFE
OgotCSAgICBpZiAoICFoZWFkICkKLQkJaGVhZCA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZVNlY3Rp
b25FbGVtZW50SW1wbCAqPihjaGlsZCk7Ci0JICAgIGJyZWFrOwotCWNhc2UgSURfVEZPT1Q6Ci0J
ICAgIGlmICggIWZvb3QgKQotCQlmb290ID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlU2VjdGlvbkVs
ZW1lbnRJbXBsICo+KGNoaWxkKTsKLQkgICAgYnJlYWs7Ci0JY2FzZSBJRF9UQk9EWToKLQkgICAg
aWYgKCAhZmlyc3RCb2R5ICkKLQkJZmlyc3RCb2R5ID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlU2Vj
dGlvbkVsZW1lbnRJbXBsICo+KGNoaWxkKTsKLQkgICAgYnJlYWs7Ci0JfQorICAgIGlmIChyZXR2
YWwpIHsKKyAgICAgICAgaWYgKCF0Q2FwdGlvbiAmJiBjaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OmNhcHRpb24oKSkpCisgICAgICAgICAgICB0Q2FwdGlvbiA9IHN0YXRpY19jYXN0PEhUTUxU
YWJsZUNhcHRpb25FbGVtZW50SW1wbCAqPihjaGlsZCk7CisgICAgICAgIGVsc2UgaWYgKCFoZWFk
ICYmIGNoaWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGhlYWQoKSkpCisgICAgICAgICAgICBo
ZWFkID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsICo+KGNoaWxkKTsK
KyAgICAgICAgZWxzZSBpZiAoIWZvb3QgJiYgY2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0
Zm9vdCgpKSkKKyAgICAgICAgICAgIGZvb3QgPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVTZWN0aW9u
RWxlbWVudEltcGwgKj4oY2hpbGQpOworCWVsc2UgaWYgKCFmaXJzdEJvZHkgJiYgY2hpbGQtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjp0Ym9keSgpKSkKKwkgICAgZmlyc3RCb2R5ID0gc3RhdGljX2Nh
c3Q8SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsICo+KGNoaWxkKTsKICAgICB9CiAgICAgcmV0
dXJuIHJldHZhbDsKIH0KQEAgLTgwMiwyNiArNzg1LDE5IEBAIHZvaWQgSFRNTFRhYmxlUGFydEVs
ZW1lbnRJbXBsOjpwYXJzZU1hcHAKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1IVE1MVGFibGVT
ZWN0aW9uRWxlbWVudEltcGw6OkhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbChEb2N1bWVudFB0
ciAqZG9jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdXNob3J0IHRhZ2lkLCBib29sIGltcGxpY2l0KQotICAgIDogSFRNTFRhYmxlUGFy
dEVsZW1lbnRJbXBsKGRvYykKK0hUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbDo6SFRNTFRhYmxl
U2VjdGlvbkVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50
UHRyICpkb2MsIGJvb2wgaW1wbGljaXQpCisgICAgOiBIVE1MVGFibGVQYXJ0RWxlbWVudEltcGwo
dGFnTmFtZSwgZG9jKQogewotICAgIF9pZCA9IHRhZ2lkOwogICAgIG1faW1wbGljaXQgPSBpbXBs
aWNpdDsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbDo6aWQo
KSBjb25zdAotewotICAgIHJldHVybiBfaWQ7Ci19Ci0KIE5vZGVJbXBsICpIVE1MVGFibGVTZWN0
aW9uRWxlbWVudEltcGw6OmFkZENoaWxkKE5vZGVJbXBsICpjaGlsZCkKIHsKICNpZmRlZiBERUJV
R19MQVlPVVQKICAgICBrZERlYnVnKCA2MDMwICkgPDwgbm9kZU5hbWUoKS5zdHJpbmcoKSA8PCAi
KFRib2R5KTo6YWRkQ2hpbGQoICIgPDwgY2hpbGQtPm5vZGVOYW1lKCkuc3RyaW5nKCkgPDwgIiAp
IiA8PCBlbmRsOwogI2VuZGlmCiAKLSAgICBpZiAoY2hpbGQtPmlkKCkgPT0gSURfRk9STSkgewor
ICAgIGlmIChjaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZvcm0oKSkpIHsKICAgICAgICAg
Ly8gRmlyc3QgYWRkIHRoZSBjaGlsZC4KICAgICAgICAgSFRNTEVsZW1lbnRJbXBsOjphZGRDaGls
ZChjaGlsZCk7CiAgICAgICAgIC8vIE5vdyBzaW1wbHkgcmV0dXJuIG91cnNlbHZlcyBhcyB0aGUg
bmV3bm9kZS4gIFRoaXMgaGFzIHRoZSBlZmZlY3Qgb2YKQEAgLTg3Nyw3ICs4NTMsNyBAQCBpbnQg
SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsOjpudW1Sb3dzCiAgICAgaW50IHJvd3MgPSAwOwog
ICAgIGNvbnN0IE5vZGVJbXBsICpuID0gZmlyc3RDaGlsZCgpOwogICAgIHdoaWxlIChuKSB7Ci0g
ICAgICAgIGlmIChuLT5pZCgpID09IElEX1RSKQorICAgICAgICBpZiAobi0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OnRyKCkpKQogICAgICAgICAgICAgcm93cysrOwogICAgICAgICBuID0gbi0+bmV4
dFNpYmxpbmcoKTsKICAgICB9CkBAIC05MzIsMTggKzkwOCwxMyBAQCBTaGFyZWRQdHI8SFRNTENv
bGxlY3Rpb25JbXBsPiBIVE1MVGFibGVTCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotTm9kZUlt
cGw6OklkIEhUTUxUYWJsZVJvd0VsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IElEX1RSOwotfQotCiBOb2RlSW1wbCAqSFRNTFRhYmxlUm93RWxlbWVudEltcGw6OmFkZENoaWxk
KE5vZGVJbXBsICpjaGlsZCkKIHsKICNpZmRlZiBERUJVR19MQVlPVVQKICAgICBrZERlYnVnKCA2
MDMwICkgPDwgbm9kZU5hbWUoKS5zdHJpbmcoKSA8PCAiKFRyb3cpOjphZGRDaGlsZCggIiA8PCBj
aGlsZC0+bm9kZU5hbWUoKS5zdHJpbmcoKSA8PCAiICkiIDw8IGVuZGw7CiAjZW5kaWYKIAotICAg
IGlmIChjaGlsZC0+aWQoKSA9PSBJRF9GT1JNKSB7CisgICAgaWYgKGNoaWxkLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6Zm9ybSgpKSkgewogICAgICAgICAvLyBGaXJzdCBhZGQgdGhlIGNoaWxkLgog
ICAgICAgICBIVE1MRWxlbWVudEltcGw6OmFkZENoaWxkKGNoaWxkKTsKICAgICAgICAgLy8gTm93
IHNpbXBseSByZXR1cm4gb3Vyc2VsdmVzIGFzIHRoZSBuZXdub2RlLiAgVGhpcyBoYXMgdGhlIGVm
ZmVjdCBvZgpAQCAtOTU4LDE2ICs5MjksMTYgQEAgbG9uZyBIVE1MVGFibGVSb3dFbGVtZW50SW1w
bDo6cm93SW5kZXgoKQogICAgIGludCBySW5kZXggPSAwOwogCiAgICAgTm9kZUltcGwgKnRhYmxl
ID0gcGFyZW50Tm9kZSgpOwotICAgIGlmICggIXRhYmxlICkKKyAgICBpZiAoIXRhYmxlKQogCXJl
dHVybiAtMTsKICAgICB0YWJsZSA9IHRhYmxlLT5wYXJlbnROb2RlKCk7Ci0gICAgaWYgKCAhdGFi
bGUgfHwgdGFibGUtPmlkKCkgIT0gSURfVEFCTEUgKQorICAgIGlmICghdGFibGUgfHwgIXRhYmxl
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGFibGUoKSkpCiAJcmV0dXJuIC0xOwogCiAgICAgSFRN
TFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsICpmb290ID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlRWxl
bWVudEltcGwgKj4odGFibGUpLT50Rm9vdCgpOwogICAgIE5vZGVJbXBsICpub2RlID0gdGFibGUt
PmZpcnN0Q2hpbGQoKTsKLSAgICB3aGlsZSAoIG5vZGUgKSB7Ci0gICAgICAgIGlmICggbm9kZSAh
PSBmb290ICYmIChub2RlLT5pZCgpID09IElEX1RIRUFEIHx8IG5vZGUtPmlkKCkgPT0gSURfVEZP
T1QgfHwgbm9kZS0+aWQoKSA9PSBJRF9UQk9EWSkgKSB7CisgICAgd2hpbGUgKG5vZGUpIHsKKyAg
ICAgICAgaWYgKG5vZGUgIT0gZm9vdCAmJiAobm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRo
ZWFkKCkpIHx8IG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0Zm9vdCgpKSB8fCBub2RlLT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6dGJvZHkoKSkpKSB7CiAJICAgIEhUTUxUYWJsZVNlY3Rpb25F
bGVtZW50SW1wbCogc2VjdGlvbiA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50
SW1wbCAqPihub2RlKTsKIAkgICAgY29uc3QgTm9kZUltcGwgKnJvdyA9IHNlY3Rpb24tPmZpcnN0
Q2hpbGQoKTsKIAkgICAgd2hpbGUgKCByb3cgKSB7CkBAIC05OTYsNyArOTY3LDcgQEAgbG9uZyBI
VE1MVGFibGVSb3dFbGVtZW50SW1wbDo6c2VjdGlvblJvdwogICAgIGNvbnN0IE5vZGVJbXBsICpu
ID0gdGhpczsKICAgICBkbyB7CiAgICAgICAgIG4gPSBuLT5wcmV2aW91c1NpYmxpbmcoKTsKLSAg
ICAgICAgaWYgKG4gJiYgbi0+aXNFbGVtZW50Tm9kZSgpICYmIG4tPmlkKCkgPT0gSURfVFIpCisg
ICAgICAgIGlmIChuICYmIG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0cigpKSkKICAgICAgICAg
ICAgIHJJbmRleCsrOwogICAgIH0KICAgICB3aGlsZSAobik7CkBAIC0xMDEzLDcgKzk4NCw3IEBA
IEhUTUxFbGVtZW50SW1wbCAqSFRNTFRhYmxlUm93RWxlbWVudEltcGwKICAgICAgICAgZXhjZXB0
aW9uY29kZSA9IERPTUV4Y2VwdGlvbjo6SU5ERVhfU0laRV9FUlI7IC8vIHBlciB0aGUgRE9NCiAg
ICAgZWxzZQogICAgIHsKLSAgICAgICAgYyA9IG5ldyBIVE1MVGFibGVDZWxsRWxlbWVudEltcGwo
ZG9jUHRyKCksIElEX1REKTsKKyAgICAgICAgYyA9IG5ldyBIVE1MVGFibGVDZWxsRWxlbWVudElt
cGwoSFRNTE5hbWVzOjp0ZCgpLCBkb2NQdHIoKSk7CiAgICAgICAgIGlmKG51bUNlbGxzID09IGlu
ZGV4IHx8IGluZGV4ID09IC0xKQogICAgICAgICAgICAgYXBwZW5kQ2hpbGQoYywgZXhjZXB0aW9u
Y29kZSk7CiAgICAgICAgIGVsc2UgewpAQCAtMTEwMywxNSArMTA3NCwxNCBAQCB2b2lkIEhUTUxU
YWJsZVJvd0VsZW1lbnRJbXBsOjpzZXRWQWxpZ24oCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAot
SFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsOjpIVE1MVGFibGVDZWxsRWxlbWVudEltcGwoRG9jdW1l
bnRQdHIgKmRvYywgaW50IHRhZykKLSAgOiBIVE1MVGFibGVQYXJ0RWxlbWVudEltcGwoZG9jKQor
SFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsOjpIVE1MVGFibGVDZWxsRWxlbWVudEltcGwoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnRQdHIgKmRvYykKKyAgOiBIVE1MVGFibGVQ
YXJ0RWxlbWVudEltcGwodGFnTmFtZSwgZG9jKQogewotICBfY29sID0gLTE7Ci0gIF9yb3cgPSAt
MTsKLSAgY1NwYW4gPSByU3BhbiA9IDE7Ci0gIF9pZCA9IHRhZzsKLSAgcm93SGVpZ2h0ID0gMDsK
LSAgbV9zb2xpZCA9IGZhbHNlOworICAgIF9jb2wgPSAtMTsKKyAgICBfcm93ID0gLTE7CisgICAg
Y1NwYW4gPSByU3BhbiA9IDE7CisgICAgcm93SGVpZ2h0ID0gMDsKKyAgICBtX3NvbGlkID0gZmFs
c2U7CiB9CiAKIEhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbDo6fkhUTUxUYWJsZUNlbGxFbGVtZW50
SW1wbCgpCkBAIC0xMTIyLDcgKzEwOTIsNyBAQCBsb25nIEhUTUxUYWJsZUNlbGxFbGVtZW50SW1w
bDo6Y2VsbEluZGV4CiB7CiAgICAgaW50IGluZGV4ID0gMDsKICAgICBmb3IgKGNvbnN0IE5vZGVJ
bXBsICogbm9kZSA9IHByZXZpb3VzU2libGluZygpOyBub2RlOyBub2RlID0gbm9kZS0+cHJldmlv
dXNTaWJsaW5nKCkpIHsKLSAgICAgICAgaWYgKG5vZGUtPmlkKCkgPT0gSURfVEQgfHwgbm9kZS0+
aWQoKSA9PSBJRF9USCkKKyAgICAgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0
ZCgpKSB8fCBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGgoKSkpCiAgICAgICAgICAgICBp
bmRleCsrOwogICAgIH0KICAgICAKQEAgLTExODksOSArMTE1OSw5IEBAIHZvaWQgSFRNTFRhYmxl
Q2VsbEVsZW1lbnRJbXBsOjpwYXJzZU1hcHAKIC8vIHVzZWQgYnkgdGFibGUgY2VsbHMgdG8gc2hh
cmUgc3R5bGUgZGVjbHMgY3JlYXRlZCBieSB0aGUgZW5jbG9zaW5nIHRhYmxlLgogQ1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb25JbXBsKiBIVE1MVGFibGVDZWxsRWxlbWVudEltcGw6OmFkZGl0aW9u
YWxBdHRyaWJ1dGVTdHlsZURlY2woKQogewotICAgIEhUTUxFbGVtZW50SW1wbCogcCA9IHN0YXRp
Y19jYXN0PEhUTUxFbGVtZW50SW1wbCo+KHBhcmVudE5vZGUoKSk7Ci0gICAgd2hpbGUocCAmJiBw
LT5pZCgpICE9IElEX1RBQkxFKQotICAgICAgICBwID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJ
bXBsKj4ocC0+cGFyZW50Tm9kZSgpKTsKKyAgICBOb2RlSW1wbCogcCA9IHBhcmVudE5vZGUoKTsK
KyAgICB3aGlsZSAocCAmJiAhcC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRhYmxlKCkpKQorICAg
ICAgICBwID0gcC0+cGFyZW50Tm9kZSgpOwogCiAgICAgaWYgKHApIHsKICAgICAgICAgSFRNTFRh
YmxlRWxlbWVudEltcGwqIHRhYmxlID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlRWxlbWVudEltcGwq
PihwKTsKQEAgLTEyMDEsMTUgKzExNzEsNiBAQCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbklt
cGwqIEhUTUxUYWJsCiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgSFRNTFRhYmxlQ2VsbEVsZW1l
bnRJbXBsOjphdHRhY2goKQotewotICAgIEhUTUxFbGVtZW50SW1wbCogcCA9IHN0YXRpY19jYXN0
PEhUTUxFbGVtZW50SW1wbCo+KHBhcmVudE5vZGUoKSk7Ci0gICAgd2hpbGUocCAmJiBwLT5pZCgp
ICE9IElEX1RBQkxFKQotICAgICAgICBwID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsKj4o
cC0+cGFyZW50Tm9kZSgpKTsKLQotICAgIEhUTUxUYWJsZVBhcnRFbGVtZW50SW1wbDo6YXR0YWNo
KCk7Ci19Ci0KIGJvb2wgSFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsOjppc1VSTEF0dHJpYnV0ZShB
dHRyaWJ1dGVJbXBsICphdHRyKSBjb25zdAogewogICAgIHJldHVybiBhdHRyLT5pZCgpID09IEFU
VFJfQkFDS0dST1VORDsKQEAgLTEzNDcsMTYgKzEzMDgsMTAgQEAgdm9pZCBIVE1MVGFibGVDZWxs
RWxlbWVudEltcGw6OnNldFdpZHRoKAogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUhUTUxUYWJs
ZUNvbEVsZW1lbnRJbXBsOjpIVE1MVGFibGVDb2xFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9j
LCB1c2hvcnQgaSkKLSAgICA6IEhUTUxUYWJsZVBhcnRFbGVtZW50SW1wbChkb2MpCitIVE1MVGFi
bGVDb2xFbGVtZW50SW1wbDo6SFRNTFRhYmxlQ29sRWxlbWVudEltcGwoY29uc3QgUXVhbGlmaWVk
TmFtZSYgdGFnTmFtZSwgRG9jdW1lbnRQdHIgKmRvYykKKyAgICA6IEhUTUxUYWJsZVBhcnRFbGVt
ZW50SW1wbCh0YWdOYW1lLCBkb2MpCiB7Ci0gICAgX2lkID0gaTsKLSAgICBfc3BhbiA9IChfaWQg
PT0gSURfQ09MR1JPVVAgPyAwIDogMSk7Ci19Ci0KLU5vZGVJbXBsOjpJZCBIVE1MVGFibGVDb2xF
bGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBfaWQ7CisgICAgX3NwYW4gPSAo
dGFnTmFtZS5tYXRjaGVzKEhUTUxOYW1lczo6Y29sZ3JvdXAoKSkgPyAwIDogMSk7CiB9CiAKIGJv
b2wgSFRNTFRhYmxlQ29sRWxlbWVudEltcGw6Om1hcFRvRW50cnkoTm9kZUltcGw6OklkIGF0dHIs
IE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0CkBAIC0xNDQ3LDExICsxNDAyLDYg
QEAgdm9pZCBIVE1MVGFibGVDb2xFbGVtZW50SW1wbDo6c2V0V2lkdGgoYwogCiAvLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCiAKLU5vZGVJbXBsOjpJZCBIVE1MVGFibGVDYXB0aW9uRWxlbWVudEltcGw6Omlk
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfQ0FQVElPTjsKLX0KLQogYm9vbCBIVE1MVGFibGVD
YXB0aW9uRWxlbWVudEltcGw6Om1hcFRvRW50cnkoTm9kZUltcGw6OklkIGF0dHIsIE1hcHBlZEF0
dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0CiB7CiAgICAgaWYgKGF0dHIgPT0gQVRUUl9BTElH
TikgewpJbmRleDoga2h0bWwvaHRtbC9odG1sX3RhYmxlaW1wbC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbF90YWJsZWltcGwuaCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS4yMQpkaWZmIC11IC1wIC1yMS4yMSBraHRtbC9odG1sL2h0bWxfdGFi
bGVpbXBsLmgKLS0tIGtodG1sL2h0bWwvaHRtbF90YWJsZWltcGwuaAkxNyBKdW4gMjAwNSAyMTo1
NTozOSAtMDAwMAkxLjIxCisrKyBraHRtbC9odG1sL2h0bWxfdGFibGVpbXBsLmgJMjAgSnVuIDIw
MDUgMjA6NTU6NDIgLTAwMDAKQEAgLTYyLDggKzYyLDYgQEAgcHVibGljOgogICAgIEhUTUxUYWJs
ZUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpOwogICAgIH5IVE1MVGFibGVFbGVtZW50SW1w
bCgpOwogCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwotCiAgICAgSFRNTFRhYmxlQ2FwdGlv
bkVsZW1lbnRJbXBsICpjYXB0aW9uKCkgY29uc3QgeyByZXR1cm4gdENhcHRpb247IH0KICAgICBO
b2RlSW1wbCAqc2V0Q2FwdGlvbiggSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnRJbXBsICogKTsKIApA
QCAtMTQ3LDggKzE0NSw4IEBAIGNsYXNzIEhUTUxUYWJsZVBhcnRFbGVtZW50SW1wbCA6IHB1Ymxp
YyAKIAogewogcHVibGljOgotICAgIEhUTUxUYWJsZVBhcnRFbGVtZW50SW1wbChEb2N1bWVudFB0
ciAqZG9jKQotICAgICAgICA6IEhUTUxFbGVtZW50SW1wbChkb2MpCisgICAgSFRNTFRhYmxlUGFy
dEVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50UHRyICpk
b2MpCisgICAgICAgIDogSFRNTEVsZW1lbnRJbXBsKHRhZ05hbWUsIGRvYykKICAgICAgICAgeyB9
CiAKICAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShOb2RlSW1wbDo6SWQgYXR0ciwgTWFwcGVk
QXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3Q7CkBAIC0xNjAsOSArMTU4LDcgQEAgcHVibGlj
OgogY2xhc3MgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsIDogcHVibGljIEhUTUxUYWJsZVBh
cnRFbGVtZW50SW1wbAogewogcHVibGljOgotICAgIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1w
bChEb2N1bWVudFB0ciAqZG9jLCB1c2hvcnQgdGFnaWQsIGJvb2wgaW1wbGljaXQpOwotCi0gICAg
dmlydHVhbCBJZCBpZCgpIGNvbnN0OworICAgIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbChj
b25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudFB0ciAqZG9jLCBib29sIGltcGxp
Y2l0KTsKIAogICAgIHZpcnR1YWwgTm9kZUltcGwgKmFkZENoaWxkKE5vZGVJbXBsICpjaGlsZCk7
CiAgICAgCkBAIC0xODQsOSArMTgwLDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0VkFsaWduKCBj
b25zdCBET01TdHJpbmcgJiApOwogCiAgICAga2h0bWw6OlNoYXJlZFB0cjxIVE1MQ29sbGVjdGlv
bkltcGw+IHJvd3MoKTsKLQotcHJvdGVjdGVkOgotICAgIHVzaG9ydCBfaWQ7CiB9OwogCiAvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCkBAIC0xOTUsOSArMTg4LDcgQEAgY2xhc3MgSFRNTFRhYmxlUm93RWxl
bWVudEltcGwgOiBwdWJsaWMgSAogewogcHVibGljOgogICAgIEhUTUxUYWJsZVJvd0VsZW1lbnRJ
bXBsKERvY3VtZW50UHRyICpkb2MpCi0gICAgICAgIDogSFRNTFRhYmxlUGFydEVsZW1lbnRJbXBs
KGRvYykge30KLQotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKKyAgICAgICAgOiBIVE1MVGFi
bGVQYXJ0RWxlbWVudEltcGwoSFRNTE5hbWVzOjp0cigpLCBkb2MpIHt9CiAKICAgICB2aXJ0dWFs
IE5vZGVJbXBsICphZGRDaGlsZChOb2RlSW1wbCAqY2hpbGQpOwogICAgIApAQCAtMjM4LDcgKzIy
OSw3IEBAIHByb3RlY3RlZDoKIGNsYXNzIEhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbCA6IHB1Ymxp
YyBIVE1MVGFibGVQYXJ0RWxlbWVudEltcGwKIHsKIHB1YmxpYzoKLSAgICBIVE1MVGFibGVDZWxs
RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgaW50IHRhZ0lkKTsKKyAgICBIVE1MVGFibGVD
ZWxsRWxlbWVudEltcGwoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnRQdHIg
KmRvYyk7CiAgICAgfkhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbCgpOwogCiAgICAgLy8gIyMjIEZJ
WCB0aGVzZSB0d28uLi4KQEAgLTI1MSwxNCArMjQyLDEwIEBAIHB1YmxpYzoKIAogICAgIGludCBj
b2xTcGFuKCkgY29uc3QgeyByZXR1cm4gY1NwYW47IH0KICAgICBpbnQgcm93U3BhbigpIGNvbnN0
IHsgcmV0dXJuIHJTcGFuOyB9Ci0gICAgCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0IHsgcmV0
dXJuIF9pZDsgfQotICAgIAorCiAgICAgdmlydHVhbCBib29sIG1hcFRvRW50cnkoTm9kZUltcGw6
OklkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0OwogICAgIHZpcnR1
YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICphdHRyKTsK
IAotICAgIHZpcnR1YWwgdm9pZCBhdHRhY2goKTsKLQogICAgIC8vIHVzZWQgYnkgdGFibGUgY2Vs
bHMgdG8gc2hhcmUgc3R5bGUgZGVjbHMgY3JlYXRlZCBieSB0aGUgZW5jbG9zaW5nIHRhYmxlLgog
ICAgIHZpcnR1YWwgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25JbXBsKiBhZGRpdGlvbmFsQXR0
cmlidXRlU3R5bGVEZWNsKCk7CiAgICAgCkBAIC0zMTEsNyArMjk4LDYgQEAgcHJvdGVjdGVkOgog
ICAgIGludCBfY29sOwogICAgIGludCByU3BhbjsKICAgICBpbnQgY1NwYW47Ci0gICAgaW50IF9p
ZDsKICAgICBpbnQgcm93SGVpZ2h0OwogICAgIGJvb2wgbV9zb2xpZCAgICAgICAgOiAxOwogfTsK
QEAgLTMyMSw5ICszMDcsNyBAQCBwcm90ZWN0ZWQ6CiBjbGFzcyBIVE1MVGFibGVDb2xFbGVtZW50
SW1wbCA6IHB1YmxpYyBIVE1MVGFibGVQYXJ0RWxlbWVudEltcGwKIHsKIHB1YmxpYzoKLSAgICBI
VE1MVGFibGVDb2xFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCB1c2hvcnQgaSk7Ci0KLSAg
ICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CisgICAgSFRNTFRhYmxlQ29sRWxlbWVudEltcGwoY29u
c3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnRQdHIgKmRvYyk7CiAKICAgICB2b2lk
IHNldFRhYmxlKEhUTUxUYWJsZUVsZW1lbnRJbXBsICp0KSB7IHRhYmxlID0gdDsgfQogCkBAIC0z
NTEsMTAgKzMzNSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFdpZHRoKCBjb25zdCBET01TdHJp
bmcgJiApOwogCiBwcm90ZWN0ZWQ6Ci0gICAgLy8gY291bGQgYmUgSURfQ09MIG9yIElEX0NPTEdS
T1VQIC4uLiBUaGUgRE9NIGlzIG5vdCBxdWl0ZSBjbGVhciBvbgotICAgIC8vIHRoaXMsIGJ1dCBz
aW5jZSBib3RoIGVsZW1lbnRzIHdvcmsgcXVpdGUgc2ltaWxhciwgd2UgdXNlIG9uZQotICAgIC8v
IERPTUVsZW1lbnQgZm9yIHRoZW0uLi4KLSAgICB1c2hvcnQgX2lkOwogICAgIGludCBfc3BhbjsK
ICAgICBIVE1MVGFibGVFbGVtZW50SW1wbCAqdGFibGU7CiB9OwpAQCAtMzY1LDkgKzM0NSw3IEBA
IGNsYXNzIEhUTUxUYWJsZUNhcHRpb25FbGVtZW50SW1wbCA6IHB1YmwKIHsKIHB1YmxpYzoKICAg
ICBIVE1MVGFibGVDYXB0aW9uRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgICAgICAg
OiBIVE1MVGFibGVQYXJ0RWxlbWVudEltcGwoZG9jKSB7fQotCi0gICAgdmlydHVhbCBJZCBpZCgp
IGNvbnN0OworICAgICAgICA6IEhUTUxUYWJsZVBhcnRFbGVtZW50SW1wbChIVE1MTmFtZXM6OmNh
cHRpb24oKSwgZG9jKSB7fQogICAgIAogICAgIHZpcnR1YWwgYm9vbCBtYXBUb0VudHJ5KE5vZGVJ
bXBsOjpJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdDsKICAgICB2
aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqYXR0
cik7CkluZGV4OiBraHRtbC9odG1sL2h0bWxuYW1lcy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
L2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sbmFtZXMuY3BwLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjIKZGlmZiAtdSAtcCAtcjEuMiBraHRtbC9odG1sL2h0bWxuYW1lcy5jcHAKLS0t
IGtodG1sL2h0bWwvaHRtbG5hbWVzLmNwcAkxNiBKdW4gMjAwNSAyMDozMzo1NyAtMDAwMAkxLjIK
KysrIGtodG1sL2h0bWwvaHRtbG5hbWVzLmNwcAkyMCBKdW4gMjAwNSAyMDo1NTo0MyAtMDAwMApA
QCAtNDIzLDYgKzQyMywxMiBAQCBjb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OnBhcmFt
KCkKICAgICByZXR1cm4gcGFyYW07CiB9CiAKK2NvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1l
czo6cGxhaW50ZXh0KCkKK3sKKyAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBwbGFpbnRleHQobnVs
bEF0b20sICJwbGFpbnRleHQiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKKyAgICByZXR1cm4gcGxh
aW50ZXh0OworfQorCiBjb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OnByZSgpCiB7CiAg
ICAgc3RhdGljIFF1YWxpZmllZE5hbWUgcHJlKG51bGxBdG9tLCAicHJlIiwgeGh0bWxOYW1lc3Bh
Y2VVUkkoKSk7CkBAIC00NjUsNiArNDcxLDEyIEBAIGNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxO
YW1lczo6c21hbGwoKQogICAgIHJldHVybiBzbWFsbDsKIH0KIAorY29uc3QgUXVhbGlmaWVkTmFt
ZSYgSFRNTE5hbWVzOjpzcGFuKCkKK3sKKyAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBzcGFuKG51
bGxBdG9tLCAic3BhbiIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOworICAgIHJldHVybiBzcGFuOwor
fQorCiBjb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OnN0cmlrZSgpCiB7CiAgICAgc3Rh
dGljIFF1YWxpZmllZE5hbWUgc3RyaWtlKG51bGxBdG9tLCAic3RyaWtlIiwgeGh0bWxOYW1lc3Bh
Y2VVUkkoKSk7CkBAIC00ODMsNiArNDk1LDE4IEBAIGNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxO
YW1lczo6c3R5bGUoKQogICAgIHJldHVybiBzdHlsZTsKIH0KIAorY29uc3QgUXVhbGlmaWVkTmFt
ZSYgSFRNTE5hbWVzOjpzdWIoKQoreworICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIHN1YihudWxs
QXRvbSwgInN1YiIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOworICAgIHJldHVybiBzdHJpa2U7Cit9
CisKK2NvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6c3VwKCkKK3sKKyAgICBzdGF0aWMg
UXVhbGlmaWVkTmFtZSBzdXAobnVsbEF0b20sICJzdXAiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsK
KyAgICByZXR1cm4gc3VwOworfQorCiBjb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OnRh
YmxlKCkKIHsKICAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSB0YWJsZShudWxsQXRvbSwgInRhYmxl
IiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7CkluZGV4OiBraHRtbC9odG1sL2h0bWxuYW1lcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbG5hbWVz
LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMgpkaWZmIC11IC1wIC1yMS4yIGtodG1sL2h0bWwv
aHRtbG5hbWVzLmgKLS0tIGtodG1sL2h0bWwvaHRtbG5hbWVzLmgJMTYgSnVuIDIwMDUgMjA6MzM6
NTcgLTAwMDAJMS4yCisrKyBraHRtbC9odG1sL2h0bWxuYW1lcy5oCTIwIEp1biAyMDA1IDIwOjU1
OjQzIC0wMDAwCkBAIC0yMiw3ICsyMiw3IEBACiAjaWZuZGVmIEhUTUxOQU1FU19ICiAjZGVmaW5l
IEhUTUxOQU1FU19ICiAKLSNpbmNsdWRlICJ4bWwvZG9tX2VsZW1lbnRpbXBsLmgiCisjaW5jbHVk
ZSAiZG9tX3FuYW1lLmgiCiAKIG5hbWVzcGFjZSBET00KIHsKQEAgLTEwMiw2ICsxMDIsNyBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIG9wdGlvbigpOwogICAgIHN0
YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBwKCk7CiAgICAgc3RhdGljIGNvbnN0IFF1YWxpZmll
ZE5hbWUmIHBhcmFtKCk7CisgICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIHBsYWludGV4
dCgpOwogICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBwcmUoKTsKICAgICBzdGF0aWMg
Y29uc3QgUXVhbGlmaWVkTmFtZSYgcSgpOwogICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1l
JiBzKCk7CkBAIC0xMDksOSArMTEwLDEyIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgUXVh
bGlmaWVkTmFtZSYgc2NyaXB0KCk7CiAgICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIHNl
bGVjdCgpOwogICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBzbWFsbCgpOworICAgIHN0
YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBzcGFuKCk7CiAgICAgc3RhdGljIGNvbnN0IFF1YWxp
ZmllZE5hbWUmIHN0cmlrZSgpOwogICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBzdHJv
bmcoKTsKICAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgc3R5bGUoKTsKKyAgICBzdGF0
aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgc3ViKCk7CisgICAgc3RhdGljIGNvbnN0IFF1YWxpZmll
ZE5hbWUmIHN1cCgpOwogICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiB0YWJsZSgpOwog
ICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiB0Ym9keSgpOwogICAgIHN0YXRpYyBjb25z
dCBRdWFsaWZpZWROYW1lJiB0ZCgpOwpJbmRleDoga2h0bWwvaHRtbC9odG1scGFyc2VyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9odG1sL2h0bWxwYXJz
ZXIuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjk2CmRpZmYgLXUgLXAgLXIxLjk2IGtodG1s
L2h0bWwvaHRtbHBhcnNlci5jcHAKLS0tIGtodG1sL2h0bWwvaHRtbHBhcnNlci5jcHAJMTEgTWF5
IDIwMDUgMDA6NTg6MjggLTAwMDAJMS45NgorKysga2h0bWwvaHRtbC9odG1scGFyc2VyLmNwcAky
MCBKdW4gMjAwNSAyMDo1NTo0NCAtMDAwMApAQCAtNjksMjQgKzY5LDI0IEBAIHVzaW5nIG5hbWVz
cGFjZSBraHRtbDsKIGNsYXNzIEhUTUxTdGFja0VsZW0KIHsKIHB1YmxpYzoKLSAgICBIVE1MU3Rh
Y2tFbGVtKCBpbnQgX2lkLAotICAgICAgICAgICAgICAgICAgIGludCBfbGV2ZWwsCi0gICAgICAg
ICAgICAgICAgICAgRE9NOjpOb2RlSW1wbCAqX25vZGUsCi0gICAgICAgICAgICAgICAgICAgSFRN
TFN0YWNrRWxlbSAqIF9uZXh0CisgICAgSFRNTFN0YWNrRWxlbShjb25zdCBBdG9taWNTdHJpbmcm
IF90YWdOYW1lLAorICAgICAgICAgICAgICAgICAgaW50IF9sZXZlbCwKKyAgICAgICAgICAgICAg
ICAgIERPTTo6Tm9kZUltcGwgKl9ub2RlLAorICAgICAgICAgICAgICAgICAgSFRNTFN0YWNrRWxl
bSAqIF9uZXh0CiAgICAgICAgICkKICAgICAgICAgOgotICAgICAgICBpZChfaWQpLAorICAgICAg
ICB0YWdOYW1lKF90YWdOYW1lKSwKICAgICAgICAgbGV2ZWwoX2xldmVsKSwKICAgICAgICAgc3Ry
YXlUYWJsZUNvbnRlbnQoZmFsc2UpLAogICAgICAgICBub2RlKF9ub2RlKSwKICAgICAgICAgbmV4
dChfbmV4dCkKICAgICAgICAgeyB9CiAKLSAgICBpbnQgICAgICAgaWQ7Ci0gICAgaW50ICAgICAg
IGxldmVsOwotICAgIGJvb2wgICAgICBzdHJheVRhYmxlQ29udGVudDsKLSAgICBOb2RlSW1wbCAq
bm9kZTsKLSAgICBIVE1MU3RhY2tFbGVtICpuZXh0OworICAgIEF0b21pY1N0cmluZyB0YWdOYW1l
OworICAgIGludCBsZXZlbDsKKyAgICBib29sIHN0cmF5VGFibGVDb250ZW50OworICAgIE5vZGVJ
bXBsKiBub2RlOworICAgIEhUTUxTdGFja0VsZW0qIG5leHQ7CiB9OwogCiAvKioKQEAgLTExNSwx
MSArMTE1LDYgQEAgcHVibGljOgogS0hUTUxQYXJzZXI6OktIVE1MUGFyc2VyKEtIVE1MVmlldyAq
X3BhcmVudCwgRG9jdW1lbnRQdHIgKmRvYywgYm9vbCBpbmNsdWRlc0NvbW1lbnRzKSAKICAgICA6
IGN1cnJlbnQoMCksIGN1cnJlbnRJc1JlZmVyZW5jZWQoZmFsc2UpLCBpbmNsdWRlc0NvbW1lbnRz
SW5ET00oaW5jbHVkZXNDb21tZW50cykKIHsKLSAgICAvL2tkRGVidWcoIDYwMzUgKSA8PCAicGFy
c2VyIGNvbnN0cnVjdG9yIiA8PCBlbmRsOwotI2lmIFNQRUVEX0RFQlVHID4gMAotICAgIHF0LnN0
YXJ0KCk7Ci0jZW5kaWYKLQogICAgIEhUTUxXaWRnZXQgICAgPSBfcGFyZW50OwogICAgIGRvY3Vt
ZW50ICAgICAgPSBkb2M7CiAgICAgZG9jdW1lbnQtPnJlZigpOwpAQCAtMTQ1LDEwICsxNDAsNiBA
QCBLSFRNTFBhcnNlcjo6S0hUTUxQYXJzZXIoRE9NOjpEb2N1bWVudEZyCiAKIEtIVE1MUGFyc2Vy
Ojp+S0hUTUxQYXJzZXIoKQogewotI2lmIFNQRUVEX0RFQlVHID4gMAotICAgIGtkRGVidWcoICkg
PDwgIlRJTUU6IHBhcnNpbmcgdGltZSB3YXMgPSAiIDw8IHF0LmVsYXBzZWQoKSA8PCBlbmRsOwot
I2VuZGlmCi0KICAgICBmcmVlQmxvY2soKTsKIAogICAgIHNldEN1cnJlbnQoMCk7CkBAIC0xNjUs
OSArMTU2LDYgQEAgdm9pZCBLSFRNTFBhcnNlcjo6cmVzZXQoKQogCiAgICAgZnJlZUJsb2NrKCk7
CiAKLSAgICAvLyBiZWZvcmUgcGFyc2luZywgbm8gdGFncyBhcmUgZm9yYmlkZGVuCi0gICAgbWVt
c2V0KGZvcmJpZGRlblRhZywgMCwgc2l6ZW9mKGZvcmJpZGRlblRhZykpOwotCiAgICAgaW5Cb2R5
ID0gZmFsc2U7CiAgICAgaGF2ZUZyYW1lU2V0ID0gZmFsc2U7CiAgICAgaGF2ZUNvbnRlbnQgPSBm
YWxzZTsKQEAgLTE4MCw3ICsxNjgsNyBAQCB2b2lkIEtIVE1MUGFyc2VyOjpyZXNldCgpCiAgICAg
ZW5kID0gZmFsc2U7CiAgICAgaXNpbmRleCA9IDA7CiAgICAgCi0gICAgZGlzY2FyZF91bnRpbCA9
IDA7CisgICAgZGlzY2FyZF91bnRpbCA9IG51bGxBdG9tOwogfQogCiB2b2lkIEtIVE1MUGFyc2Vy
OjpzZXRDdXJyZW50KERPTTo6Tm9kZUltcGwgKm5ld0N1cnJlbnQpIApAQCAtMTk2LDQxICsxODQs
MjkgQEAgdm9pZCBLSFRNTFBhcnNlcjo6c2V0Q3VycmVudChET006Ok5vZGVJbQogCiB2b2lkIEtI
VE1MUGFyc2VyOjpwYXJzZVRva2VuKFRva2VuICp0KQogewotICAgIGlmKGRpc2NhcmRfdW50aWwp
IHsKLSAgICAgICAgaWYodC0+aWQgPT0gZGlzY2FyZF91bnRpbCkKLSAgICAgICAgICAgIGRpc2Nh
cmRfdW50aWwgPSAwOworICAgIGlmICghZGlzY2FyZF91bnRpbC5pc051bGwoKSkgeworICAgICAg
ICBpZiAodC0+dGFnTmFtZSA9PSBkaXNjYXJkX3VudGlsICYmICF0LT5iZWdpblRhZykKKyAgICAg
ICAgICAgIGRpc2NhcmRfdW50aWwgPSBudWxsQXRvbTsKIAogICAgICAgICAvLyBkbyBub3Qgc2tp
cCA8L2lmcmFtZT4KLSAgICAgICAgaWYgKCBkaXNjYXJkX3VudGlsIHx8IGN1cnJlbnQtPmlkKCkg
KyBJRF9DTE9TRV9UQUcgIT0gdC0+aWQgKQorICAgICAgICBpZiAoIWRpc2NhcmRfdW50aWwuaXNO
dWxsKCkgfHwgKGN1cnJlbnQtPmxvY2FsTmFtZSgpICE9IHQtPnRhZ05hbWUpKQogICAgICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotI2lmZGVmIFBBUlNFUl9ERUJVRwotICAgIGtkRGVidWcoIDYw
MzUgKSA8PCAiXG5cbj09PiBwYXJzZXI6IHByb2Nlc3NpbmcgdG9rZW4gIiA8PCBnZXRUYWdOYW1l
KHQtPmlkKS5zdHJpbmcoKSA8PCAiKCIgPDwgdC0+aWQgPDwgIikiCi0gICAgICAgICAgICAgICAg
ICAgIDw8ICIgY3VycmVudCA9ICIgPDwgZ2V0VGFnTmFtZShjdXJyZW50LT5pZCgpKS5zdHJpbmco
KSA8PCAiKCIgPDwgY3VycmVudC0+aWQoKSA8PCAiKSIgPDwgZW5kbDsKLSAgICBrZERlYnVnKDYw
MzUpIDw8ICIgaW5Cb2R5PSIgPDwgaW5Cb2R5IDw8ICIgaGF2ZUZyYW1lU2V0PSIgPDwgaGF2ZUZy
YW1lU2V0IDw8IGVuZGw7Ci0jZW5kaWYKLQotICAgIC8vIGhvbHkgc2hpdC4gYXBwYXJlbnRseSBz
b21lIHNpdGVzIHVzZSA8L2JyPiBpbnN0ZWFkIG9mIDxicj4KLSAgICAvLyBiZSBjb21wYXRpYmxl
IHdpdGggSUUgYW5kIE5TCi0gICAgaWYgKHQtPmlkID09IElEX0JSICsgSURfQ0xPU0VfVEFHICYm
IGRvYygpLT5pbkNvbXBhdE1vZGUoKSkKLSAgICAgICAgdC0+aWQgPSBJRF9CUjsKKyAgICAvLyBB
cHBhcmVudGx5IHNvbWUgc2l0ZXMgdXNlIDwvYnI+IGluc3RlYWQgb2YgPGJyPi4gIEJlIGNvbXBh
dGlibGUgd2l0aCBJRSBhbmQgRmlyZWZveCBhbmQgdHJlYXQgdGhpcyBsaWtlIDxicj4uCisgICAg
aWYgKHQtPmlzQ2xvc2VUYWcoSFRNTE5hbWVzOjpicigpKSAmJiBkb2MoKS0+aW5Db21wYXRNb2Rl
KCkpCisgICAgICAgIHQtPmJlZ2luVGFnID0gdHJ1ZTsKIAotICAgIGlmICh0LT5pZCA+IElEX0NM
T1NFX1RBRykKLSAgICB7CisgICAgaWYgKCF0LT5iZWdpblRhZykgewogICAgICAgICBwcm9jZXNz
Q2xvc2VUYWcodCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICAvLyBpZ25vcmUgc3Bh
Y2VzLCBpZiB3ZSdyZSBub3QgaW5zaWRlIGEgcGFyYWdyYXBoIG9yIG90aGVyIGlubGluZSBjb2Rl
Ci0gICAgaWYoIHQtPmlkID09IElEX1RFWFQgJiYgdC0+dGV4dCApIHsKLSAgICAgICAgaWYoaW5C
b2R5ICYmICFza2lwTW9kZSgpICYmIGN1cnJlbnQtPmlkKCkgIT0gSURfU1RZTEUgCi0gICAgICAg
ICAgICAmJiBjdXJyZW50LT5pZCgpICE9IElEX1RJVExFICYmIGN1cnJlbnQtPmlkKCkgIT0gSURf
U0NSSVBUICYmCi0gICAgICAgICAgICAhdC0+dGV4dC0+Y29udGFpbnNPbmx5V2hpdGVzcGFjZSgp
KSAKKyAgICBpZiAodC0+dGFnTmFtZSA9PSB0ZXh0QXRvbSAmJiB0LT50ZXh0KSB7CisgICAgICAg
IGlmIChpbkJvZHkgJiYgIXNraXBNb2RlKCkgJiYgY3VycmVudC0+bG9jYWxOYW1lKCkgIT0gSFRN
TE5hbWVzOjpzdHlsZSgpICYmIGN1cnJlbnQtPmxvY2FsTmFtZSgpICE9IEhUTUxOYW1lczo6dGl0
bGUoKSAmJiAKKyAgICAgICAgICAgIGN1cnJlbnQtPmxvY2FsTmFtZSgpICE9IEhUTUxOYW1lczo6
c2NyaXB0KCkgJiYgIXQtPnRleHQtPmNvbnRhaW5zT25seVdoaXRlc3BhY2UoKSkgCiAgICAgICAg
ICAgICBoYXZlQ29udGVudCA9IHRydWU7Ci0jaWZkZWYgUEFSU0VSX0RFQlVHCi0gICAgICAgIGtk
RGVidWcoNjAzNSkgPDwgImxlbmd0aD0iPDwgdC0+dGV4dC0+bCA8PCAiIHRleHQ9JyIgPDwgUUNv
bnN0U3RyaW5nKHQtPnRleHQtPnMsIHQtPnRleHQtPmwpLnN0cmluZygpIDw8ICInIiA8PCBlbmRs
OwotI2VuZGlmCiAgICAgfQogCiAgICAgTm9kZUltcGwgKm4gPSBnZXRFbGVtZW50KHQpOwpAQCAt
MjQxLDk3ICsyMTcsNzMgQEAgdm9pZCBLSFRNTFBhcnNlcjo6cGFyc2VUb2tlbihUb2tlbiAqdCkK
ICAgICBTaGFyZWRQdHI8Tm9kZUltcGw+IHByb3RlY3ROb2RlKG4pOwogCiAgICAgLy8gc2V0IGF0
dHJpYnV0ZXMKLSAgICBpZihuLT5pc0VsZW1lbnROb2RlKCkpCi0gICAgewotICAgICAgICBFbGVt
ZW50SW1wbCAqZSA9IHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsICo+KG4pOworICAgIGlmIChuLT5p
c0hUTUxFbGVtZW50KCkpIHsKKyAgICAgICAgSFRNTEVsZW1lbnRJbXBsICplID0gc3RhdGljX2Nh
c3Q8SFRNTEVsZW1lbnRJbXBsKj4obik7CiAgICAgICAgIGUtPnNldEF0dHJpYnV0ZU1hcCh0LT5h
dHRycyk7CiAKICAgICAgICAgLy8gdGFrZSBjYXJlIG9mIG9wdGlvbmFsIGNsb3NlIHRhZ3MKLSAg
ICAgICAgaWYoZW5kVGFnUmVxdWlyZW1lbnQoZS0+aWQoKSkgPT0gRE9NOjpPUFRJT05BTCkKLSAg
ICAgICAgICAgIHBvcEJsb2NrKHQtPmlkKTsKKyAgICAgICAgaWYgKGUtPmVuZFRhZ1JlcXVpcmVt
ZW50KCkgPT0gRE9NOjpPUFRJT05BTCkKKyAgICAgICAgICAgIHBvcEJsb2NrKHQtPnRhZ05hbWUp
OwogICAgICAgICAgICAgCi0gICAgICAgIGlmIChpc0hlYWRlclRhZyh0LT5pZCkpCisgICAgICAg
IGlmIChpc0hlYWRlclRhZyh0LT50YWdOYW1lKSkKICAgICAgICAgICAgIC8vIERvIG5vdCBhbGxv
dyB0d28gaGVhZGVyIHRhZ3MgdG8gYmUgbmVzdGVkIGlmIHRoZSBpbnRlcnZlbmluZyB0YWdzIGFy
ZSBpbmxpbmVzLgogICAgICAgICAgICAgcG9wTmVzdGVkSGVhZGVyVGFnKCk7CiAgICAgfQogCi0g
ICAgLy8gaWYgdGhpcyB0YWcgaXMgZm9yYmlkZGVuIGluc2lkZSB0aGUgY3VycmVudCBjb250ZXh0
LCBwb3AKLSAgICAvLyBibG9ja3MgdW50aWwgd2UgYXJlIGFsbG93ZWQgdG8gYWRkIGl0Li4uCi0g
ICAgd2hpbGUgKGJsb2NrU3RhY2sgJiYgdC0+aWQgPD0gSURfTEFTVF9UQUcgJiYgZm9yYmlkZGVu
VGFnW3QtPmlkXSkgewotI2lmZGVmIFBBUlNFUl9ERUJVRwotICAgICAgICBrZERlYnVnKCA2MDM1
ICkgPDwgInQtPmlkOiAiIDw8IHQtPmlkIDw8ICIgaXMgZm9yYmlkZGVuIDotKCAiIDw8IGVuZGw7
Ci0jZW5kaWYKLSAgICAgICAgcG9wT25lQmxvY2soKTsKLSAgICB9Ci0KLSAgICBpZiAoIWluc2Vy
dE5vZGUobiwgdC0+ZmxhdCkpIAotICAgIHsKKyAgICBpZiAoIWluc2VydE5vZGUobiwgdC0+Zmxh
dCkpIHsKICAgICAgICAgLy8gd2UgY291bGRuJ3QgaW5zZXJ0IHRoZSBub2RlLi4uCi0gICAgICAg
IAotICAgICAgICBpZihuLT5pc0VsZW1lbnROb2RlKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IEVsZW1lbnRJbXBsICplID0gc3RhdGljX2Nhc3Q8RWxlbWVudEltcGwgKj4obik7CisgICAgICAg
IGlmIChuLT5pc0VsZW1lbnROb2RlKCkpIHsKKyAgICAgICAgICAgIEVsZW1lbnRJbXBsKiBlID0g
c3RhdGljX2Nhc3Q8RWxlbWVudEltcGwqPihuKTsKICAgICAgICAgICAgIGUtPnNldEF0dHJpYnV0
ZU1hcCgwKTsKICAgICAgICAgfQogICAgICAgICAgICAgCi0jaWZkZWYgUEFSU0VSX0RFQlVHCi0g
ICAgICAgIGtkRGVidWcoIDYwMzUgKSA8PCAiaW5zZXJ0Tm9kZSBmYWlsZWQgY3VycmVudD0iIDw8
IGN1cnJlbnQtPmlkKCkgPDwgIiwgbmV3PSIgPDwgbi0+aWQoKSA8PCAiISIgPDwgZW5kbDsKLSNl
bmRpZgogICAgICAgICBpZiAobWFwID09IG4pCi0gICAgICAgIHsKLSNpZmRlZiBQQVJTRVJfREVC
VUcKLSAgICAgICAgICAgIGtkRGVidWcoIDYwMzUgKSA8PCAiICAtLT4gcmVzZXR0aW5nIG1hcCEi
IDw8IGVuZGw7Ci0jZW5kaWYKICAgICAgICAgICAgIG1hcCA9IDA7Ci0gICAgICAgIH0KKwogICAg
ICAgICBpZiAoZm9ybSA9PSBuKQotICAgICAgICB7Ci0jaWZkZWYgUEFSU0VSX0RFQlVHCi0gICAg
ICAgICAgICBrZERlYnVnKCA2MDM1ICkgPDwgIiAgIC0tPiByZXNldHRpbmcgZm9ybSEiIDw8IGVu
ZGw7Ci0jZW5kaWYKICAgICAgICAgICAgIGZvcm0gPSAwOwotICAgICAgICB9CiAgICAgfQogfQog
Ci1zdGF0aWMgYm9vbCBpc1RhYmxlUmVsYXRlZFRhZyhpbnQgaWQpCitzdGF0aWMgYm9vbCBpc1Rh
YmxlU2VjdGlvbihOb2RlSW1wbCogbikKK3sKKyAgICByZXR1cm4gbi0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OnRib2R5KCkpIHx8IG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0Zm9vdCgpKSB8fCBu
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGhlYWQoKSk7Cit9CisKK3N0YXRpYyBib29sIGlzVGFi
bGVQYXJ0KE5vZGVJbXBsKiBuKQogewotICAgIHJldHVybiAoaWQgPT0gSURfVFIgfHwgaWQgPT0g
SURfVEQgfHwgaWQgPT0gSURfVEFCTEUgfHwgaWQgPT0gSURfVEJPRFkgfHwgaWQgPT0gSURfVEZP
T1QgfHwgaWQgPT0gSURfVEhFQUQgfHwKLSAgICAgICAgICAgIGlkID09IElEX1RIKTsKKyAgICBy
ZXR1cm4gbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRyKCkpIHx8IG4tPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjp0ZCgpKSB8fCBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGgoKSkgfHwKKyAgICAg
ICAgICAgaXNUYWJsZVNlY3Rpb24obik7Cit9CisKK3N0YXRpYyBib29sIGlzVGFibGVSZWxhdGVk
KE5vZGVJbXBsKiBuKQoreworICAgIHJldHVybiBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGFi
bGUoKSkgfHwgaXNUYWJsZVBhcnQobik7CiB9CiAKIGJvb2wgS0hUTUxQYXJzZXI6Omluc2VydE5v
ZGUoTm9kZUltcGwgKm4sIGJvb2wgZmxhdCkKIHsKICAgICBTaGFyZWRQdHI8Tm9kZUltcGw+IHBy
b3RlY3ROb2RlKG4pOwogCi0gICAgaW50IGlkID0gbi0+aWQoKTsKLQorICAgIGNvbnN0IEF0b21p
Y1N0cmluZyYgbG9jYWxOYW1lID0gbi0+bG9jYWxOYW1lKCk7CisgICAgaW50IHRhZ1ByaW9yaXR5
ID0gbi0+aXNIVE1MRWxlbWVudCgpID8gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsKj4obikt
PnRhZ1ByaW9yaXR5KCkgOiAwOworICAgICAgICAKICAgICAvLyBsZXQncyBiZSBzdHVwaWQgYW5k
IGp1c3QgdHJ5IHRvIGluc2VydCBpdC4KLSAgICAvLyB0aGlzIHNob3VsZCB3b3JrIGlmIHRoZSBk
b2N1bWVudCBpcyB3ZWxsZm9ybWVkCi0jaWZkZWYgUEFSU0VSX0RFQlVHCi0gICAgTm9kZUltcGwg
KnRtcCA9IGN1cnJlbnQ7Ci0jZW5kaWYKKyAgICAvLyB0aGlzIHNob3VsZCB3b3JrIGlmIHRoZSBk
b2N1bWVudCBpcyB3ZWxsLWZvcm1lZAogICAgIE5vZGVJbXBsICpuZXdOb2RlID0gY3VycmVudC0+
YWRkQ2hpbGQobik7Ci0gICAgaWYgKCBuZXdOb2RlICkgewotI2lmZGVmIFBBUlNFUl9ERUJVRwot
ICAgICAgICBrZERlYnVnKCA2MDM1ICkgPDwgImFkZGVkICIgPDwgbi0+bm9kZU5hbWUoKS5zdHJp
bmcoKSA8PCAiIHRvICIgPDwgdG1wLT5ub2RlTmFtZSgpLnN0cmluZygpIDw8ICIsIG5ldyBjdXJy
ZW50PSIgPDwgbmV3Tm9kZS0+bm9kZU5hbWUoKS5zdHJpbmcoKSA8PCBlbmRsOwotI2VuZGlmCi0g
ICAgICAgIC8vIGRvbid0IHB1c2ggZWxlbWVudHMgd2l0aG91dCBlbmQgdGFnIG9uIHRoZSBzdGFj
awotICAgICAgICBpZih0YWdQcmlvcml0eShpZCkgIT0gMCAmJiAhZmxhdCkKLSAgICAgICAgewot
ICAgICAgICAgICAgcHVzaEJsb2NrKGlkLCB0YWdQcmlvcml0eShpZCkpOworICAgIGlmIChuZXdO
b2RlKSB7CisgICAgICAgIC8vIGRvbid0IHB1c2ggZWxlbWVudHMgd2l0aG91dCBlbmQgdGFncyAo
ZS5nLiwgPGltZz4pIG9uIHRoZSBzdGFjaworICAgICAgICBpZiAodGFnUHJpb3JpdHkgPiAwICYm
ICFmbGF0KSB7CisgICAgICAgICAgICBwdXNoQmxvY2sobG9jYWxOYW1lLCB0YWdQcmlvcml0eSk7
CiAgICAgICAgICAgICBpZiAobmV3Tm9kZSA9PSBjdXJyZW50KQotICAgICAgICAgICAgICAgIHBv
cEJsb2NrKGlkKTsKKyAgICAgICAgICAgICAgICBwb3BCbG9jayhsb2NhbE5hbWUpOwogICAgICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHNldEN1cnJlbnQobmV3Tm9kZSk7Ci0jaWYgU1BF
RURfREVCVUcgPCAyCi0gICAgICAgICAgICBpZighbi0+YXR0YWNoZWQoKSAmJiBIVE1MV2lkZ2V0
KQorICAgICAgICAgICAgaWYgKCFuLT5hdHRhY2hlZCgpICYmIEhUTUxXaWRnZXQpCiAgICAgICAg
ICAgICAgICAgbi0+YXR0YWNoKCk7Ci0jZW5kaWYKICAgICAgICAgfQogICAgICAgICBlbHNlIHsK
LSNpZiBTUEVFRF9ERUJVRyA8IDIKLSAgICAgICAgICAgIGlmKCFuLT5hdHRhY2hlZCgpICYmIEhU
TUxXaWRnZXQpCisgICAgICAgICAgICBpZiAoIW4tPmF0dGFjaGVkKCkgJiYgSFRNTFdpZGdldCkK
ICAgICAgICAgICAgICAgICBuLT5hdHRhY2goKTsKICAgICAgICAgICAgIGlmIChuLT5tYWludGFp
bnNTdGF0ZSgpKSB7CiAgICAgICAgICAgICAgICAgZG9jKCktPnJlZ2lzdGVyTWFpbnRhaW5zU3Rh
dGUobik7CkBAIC0zNDAsMTA0ICsyOTIsODYgQEAgYm9vbCBLSFRNTFBhcnNlcjo6aW5zZXJ0Tm9k
ZShOb2RlSW1wbCAqbgogICAgICAgICAgICAgICAgICAgICBuLT5yZXN0b3JlU3RhdGUoc3RhdGVz
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG4tPmNsb3NlUmVuZGVyZXIoKTsKLSNlbmRp
ZgogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSBlbHNlIHsKLSNpZmRl
ZiBQQVJTRVJfREVCVUcKLSAgICAgICAga2REZWJ1ZyggNjAzNSApIDw8ICJBRERJTkcgTk9ERSBG
QUlMRUQhISEhIGN1cnJlbnQgPSAiIDw8IGN1cnJlbnQtPm5vZGVOYW1lKCkuc3RyaW5nKCkgPDwg
IiwgbmV3ID0gIiA8PCBuLT5ub2RlTmFtZSgpLnN0cmluZygpIDw8IGVuZGw7Ci0jZW5kaWYKLSAg
ICAgICAgLy8gZXJyb3IgaGFuZGxpbmcuLi4KLSAgICAgICAgSFRNTEVsZW1lbnRJbXBsICplOwot
ICAgICAgICBib29sIGhhbmRsZWQgPSBmYWxzZTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmV0dXJu
IGhhbmRsZUVycm9yKG4sIGZsYXQsIGxvY2FsTmFtZSwgdGFnUHJpb3JpdHkpOyAvLyBUcnkgdG8g
aGFuZGxlIHRoZSBlcnJvci4KK30KIAotICAgICAgICAvLyBzd2l0Y2ggYWNjb3JkaW5nIHRvIHRo
ZSBlbGVtZW50IHRvIGluc2VydAotICAgICAgICBzd2l0Y2goaWQpCi0gICAgICAgIHsKLSAgICAg
ICAgY2FzZSBJRF9UUjoKLSAgICAgICAgY2FzZSBJRF9USDoKLSAgICAgICAgY2FzZSBJRF9URDoK
LSAgICAgICAgICAgIGlmIChpblN0cmF5VGFibGVDb250ZW50ICYmICFpc1RhYmxlUmVsYXRlZFRh
ZyhjdXJyZW50LT5pZCgpKSkgeworYm9vbCBLSFRNTFBhcnNlcjo6aGFuZGxlRXJyb3IoTm9kZUlt
cGwqIG4sIGJvb2wgZmxhdCwgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUsIGludCB0YWdQ
cmlvcml0eSkKK3sKKyAgICAvLyBFcnJvciBoYW5kbGluZyBjb2RlLiAgVGhpcyBpcyBqdXN0IGFk
IGhvYyBoYW5kbGluZyBvZiBzcGVjaWZpYyBwYXJlbnQvY2hpbGQgY29tYmluYXRpb25zLgorICAg
IEhUTUxFbGVtZW50SW1wbCAqZTsKKyAgICBib29sIGhhbmRsZWQgPSBmYWxzZTsKKworICAgIC8v
IDEuIENoZWNrIG91dCB0aGUgZWxlbWVudCdzIHRhZyBuYW1lIHRvIGRlY2lkZSBob3cgdG8gZGVh
bCB3aXRoIGVycm9ycy4KKyAgICBpZiAobi0+aXNUZXh0Tm9kZSgpKSB7CisgICAgICAgIGlmIChj
dXJyZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c2VsZWN0KCkpKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0gZWxzZSBpZiAobi0+aXNIVE1MRWxlbWVudCgpKSB7CisgICAgICAg
IEhUTUxFbGVtZW50SW1wbCogaCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCo+KG4pOwor
ICAgICAgICBpZiAoaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dHIoKSkgfHwgaC0+aGFzTG9j
YWxOYW1lKEhUTUxOYW1lczo6dGgoKSkgfHwKKyAgICAgICAgICAgIGgtPmhhc0xvY2FsTmFtZShI
VE1MTmFtZXM6OnRkKCkpKSB7CisgICAgICAgICAgICBpZiAoaW5TdHJheVRhYmxlQ29udGVudCAm
JiAhaXNUYWJsZVJlbGF0ZWQoY3VycmVudCkpIHsKICAgICAgICAgICAgICAgICAvLyBwb3Agb3V0
IHRvIHRoZSBuZWFyZXN0IGVuY2xvc2luZyB0YWJsZS1yZWxhdGVkIHRhZy4KLSAgICAgICAgICAg
ICAgICB3aGlsZSAoYmxvY2tTdGFjayAmJiAhaXNUYWJsZVJlbGF0ZWRUYWcoY3VycmVudC0+aWQo
KSkpCisgICAgICAgICAgICAgICAgd2hpbGUgKGJsb2NrU3RhY2sgJiYgIWlzVGFibGVSZWxhdGVk
KGN1cnJlbnQpKQogICAgICAgICAgICAgICAgICAgICBwb3BPbmVCbG9jaygpOwogICAgICAgICAg
ICAgICAgIHJldHVybiBpbnNlcnROb2RlKG4pOwogICAgICAgICAgICAgfQotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgSURfQ09NTUVOVDoKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIElEX0hFQUQ6Ci0gICAgICAgICAgICAvLyAjIyMgYWxsbG93IG5vdCBoYXZpbmcg
PEhUTUw+IGluIGF0IGFsbCwgYXMgcGVyIEhUTUwgc3BlYwotICAgICAgICAgICAgaWYgKCFjdXJy
ZW50LT5pc0RvY3VtZW50Tm9kZSgpICYmIGN1cnJlbnQtPmlkKCkgIT0gSURfSFRNTCApCisgICAg
ICAgIH0gZWxzZSBpZiAoaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6aGVhZCgpKSkgeworICAg
ICAgICAgICAgaWYgKCFjdXJyZW50LT5pc0RvY3VtZW50Tm9kZSgpICYmICFjdXJyZW50LT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6aHRtbCgpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIC8vIFdlIGNhbiBkZWFsIHdpdGggYSBi
YXNlLCBtZXRhIGFuZCBsaW5rIGVsZW1lbnQgaW4gdGhlIGJvZHksIGJ5IGp1c3QgYWRkaW5nIHRo
ZSBlbGVtZW50IHRvIGhlYWQuCi0gICAgICAgIGNhc2UgSURfTUVUQToKLSAgICAgICAgY2FzZSBJ
RF9MSU5LOgotICAgICAgICBjYXNlIElEX0JBU0U6Ci0gICAgICAgICAgICBpZiggIWhlYWQgKQor
ICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om1ldGEoKSkgfHwg
aC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6bGluaygpKSB8fCBoLT5oYXNMb2NhbE5hbWUoSFRN
TE5hbWVzOjpiYXNlKCkpKSB7CisgICAgICAgICAgICBpZiAoIWhlYWQpCiAgICAgICAgICAgICAg
ICAgY3JlYXRlSGVhZCgpOwotICAgICAgICAgICAgaWYoIGhlYWQgKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKCBoZWFkLT5hZGRDaGlsZChuKSApIHsKLSNpZiBTUEVFRF9ERUJVRyA8IDIKLSAgICAg
ICAgICAgICAgICAgICAgaWYoIW4tPmF0dGFjaGVkKCkgJiYgSFRNTFdpZGdldCkKKyAgICAgICAg
ICAgIGlmIChoZWFkKSB7CisgICAgICAgICAgICAgICAgaWYgKGhlYWQtPmFkZENoaWxkKG4pKSB7
CisgICAgICAgICAgICAgICAgICAgIGlmICghbi0+YXR0YWNoZWQoKSAmJiBIVE1MV2lkZ2V0KQog
ICAgICAgICAgICAgICAgICAgICAgICAgbi0+YXR0YWNoKCk7Ci0jZW5kaWYKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0JCX0gZWxzZSB7Ci0JCSAgICByZXR1cm4gZmFsc2U7Ci0J
CX0KKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSURf
SFRNTDoKKyAgICAgICAgfSBlbHNlIGlmIChoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpodG1s
KCkpKSB7CiAgICAgICAgICAgICBpZiAoIWN1cnJlbnQtPmlzRG9jdW1lbnROb2RlKCkgKSB7Ci0J
CWlmICggZG9jKCktPmZpcnN0Q2hpbGQoKS0+aWQoKSA9PSBJRF9IVE1MKSB7Ci0JCSAgICAvLyB3
ZSBoYXZlIGFub3RoZXIgPEhUTUw+IGVsZW1lbnQuLi4uIGFwcGx5IGF0dHJpYnV0ZXMgdG8gZXhp
c3Rpbmcgb25lCi0JCSAgICAvLyBtYWtlIHN1cmUgd2UgZG9uJ3Qgb3ZlcndyaXRlIGFscmVhZHkg
ZXhpc3RpbmcgYXR0cmlidXRlcwotCQkgICAgTmFtZWRBdHRyTWFwSW1wbCAqbWFwID0gc3RhdGlj
X2Nhc3Q8RWxlbWVudEltcGwqPihuKS0+YXR0cmlidXRlcyh0cnVlKTsKLQkJICAgIE5hbWVkQXR0
ck1hcEltcGwgKmJtYXAgPSBzdGF0aWNfY2FzdDxFbGVtZW50SW1wbCo+KGRvYygpLT5maXJzdENo
aWxkKCkpLT5hdHRyaWJ1dGVzKGZhbHNlKTsKLQkJICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwot
CQkgICAgZm9yICh1bnNpZ25lZCBsb25nIGwgPSAwOyBtYXAgJiYgbCA8IG1hcC0+bGVuZ3RoKCk7
ICsrbCkgewotCQkJQXR0cmlidXRlSW1wbCogaXQgPSBtYXAtPmF0dHJpYnV0ZUl0ZW0obCk7Ci0J
CQljaGFuZ2VkID0gIWJtYXAtPmdldEF0dHJpYnV0ZUl0ZW0oaXQtPmlkKCkpOwotCQkJYm1hcC0+
aW5zZXJ0QXR0cmlidXRlKGl0LT5jbG9uZShmYWxzZSkpOwotCQkgICAgfQotCQkgICAgaWYgKCBj
aGFuZ2VkICkKLQkJCWRvYygpLT5yZWNhbGNTdHlsZSggTm9kZUltcGw6OkluaGVyaXQgKTsKLQkJ
fQorICAgICAgICAgICAgICAgIGlmIChkb2MoKS0+Zmlyc3RDaGlsZCgpLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6aHRtbCgpKSkgeworICAgICAgICAgICAgICAgICAgICAvLyB3ZSBoYXZlIGFub3Ro
ZXIgPEhUTUw+IGVsZW1lbnQuLi4uIGFwcGx5IGF0dHJpYnV0ZXMgdG8gZXhpc3Rpbmcgb25lCisg
ICAgICAgICAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB3ZSBkb24ndCBvdmVyd3JpdGUgYWxyZWFk
eSBleGlzdGluZyBhdHRyaWJ1dGVzCisgICAgICAgICAgICAgICAgICAgIE5hbWVkQXR0ck1hcElt
cGwgKm1hcCA9IHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsKj4obiktPmF0dHJpYnV0ZXModHJ1ZSk7
CisgICAgICAgICAgICAgICAgICAgIE5hbWVkQXR0ck1hcEltcGwgKmJtYXAgPSBzdGF0aWNfY2Fz
dDxFbGVtZW50SW1wbCo+KGRvYygpLT5maXJzdENoaWxkKCkpLT5hdHRyaWJ1dGVzKGZhbHNlKTsK
KyAgICAgICAgICAgICAgICAgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgbG9uZyBsID0gMDsgbWFwICYmIGwgPCBtYXAtPmxlbmd0aCgp
OyArK2wpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEF0dHJpYnV0ZUltcGwqIGl0ID0gbWFw
LT5hdHRyaWJ1dGVJdGVtKGwpOworICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9ICFi
bWFwLT5nZXRBdHRyaWJ1dGVJdGVtKGl0LT5pZCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGJtYXAtPmluc2VydEF0dHJpYnV0ZShpdC0+Y2xvbmUoZmFsc2UpKTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoY2hhbmdlZCkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGRvYygpLT5yZWNhbGNTdHlsZShOb2RlSW1wbDo6SW5oZXJpdCk7CisgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQkgICAgfQotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSURfVElUTEU6Ci0gICAgICAgIGNhc2UgSURfU1RZ
TEU6Ci0gICAgICAgICAgICBpZiAoICFoZWFkICkKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBl
bHNlIGlmIChoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0aXRsZSgpKSB8fCBoLT5oYXNMb2Nh
bE5hbWUoSFRNTE5hbWVzOjpzdHlsZSgpKSkgeworICAgICAgICAgICAgaWYgKCFoZWFkKQogICAg
ICAgICAgICAgICAgIGNyZWF0ZUhlYWQoKTsKLSAgICAgICAgICAgIGlmICggaGVhZCApIHsKKyAg
ICAgICAgICAgIGlmIChoZWFkKSB7CiAgICAgICAgICAgICAgICAgRE9NOjpOb2RlSW1wbCAqbmV3
Tm9kZSA9IGhlYWQtPmFkZENoaWxkKG4pOwotICAgICAgICAgICAgICAgIGlmICggbmV3Tm9kZSAp
IHsKLSAgICAgICAgICAgICAgICAgICAgcHVzaEJsb2NrKGlkLCB0YWdQcmlvcml0eShpZCkpOwor
ICAgICAgICAgICAgICAgIGlmIChuZXdOb2RlKSB7CisgICAgICAgICAgICAgICAgICAgIHB1c2hC
bG9jayhsb2NhbE5hbWUsIHRhZ1ByaW9yaXR5KTsKICAgICAgICAgICAgICAgICAgICAgc2V0Q3Vy
cmVudChuZXdOb2RlKTsKLSNpZiBTUEVFRF9ERUJVRyA8IDIKLQkJICAgIGlmKCFuLT5hdHRhY2hl
ZCgpICYmIEhUTUxXaWRnZXQpCisgICAgICAgICAgICAgICAgICAgIGlmICghbi0+YXR0YWNoZWQo
KSAmJiBIVE1MV2lkZ2V0KQogICAgICAgICAgICAgICAgICAgICAgICAgbi0+YXR0YWNoKCk7Ci0j
ZW5kaWYKICAgICAgICAgICAgICAgICB9IGVsc2UgewotI2lmZGVmIFBBUlNFUl9ERUJVRwotICAg
ICAgICAgICAgICAgICAgICBrZERlYnVnKCA2MDM1ICkgPDwgImFkZGluZyBzdHlsZSBiZWZvcmUg
dG8gYm9keSBmYWlsZWQhISEhIiA8PCBlbmRsOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAg
IGRpc2NhcmRfdW50aWwgPSBJRF9TVFlMRSArIElEX0NMT1NFX1RBRzsKKyAgICAgICAgICAgICAg
ICAgICAgc2V0U2tpcE1vZGUoSFRNTE5hbWVzOjpzdHlsZSgpKTsKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICAgICAgIH0gZWxzZSBpZihpbkJvZHkpIHsKLSAgICAgICAgICAgICAg
ICBkaXNjYXJkX3VudGlsID0gSURfU1RZTEUgKyBJRF9DTE9TRV9UQUc7CisgICAgICAgICAgICAg
ICAgc2V0U2tpcE1vZGUoSFRNTE5hbWVzOjpzdHlsZSgpKTsKICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IC8vIFNDUklQVCBhbmQgT0JKRUNUIGFyZSBhbGxvd2VkIGluIHRoZSBib2R5LgotICAgICAgICBj
YXNlIElEX0JPRFk6Ci0gICAgICAgICAgICBpZihpbkJvZHkgJiYgZG9jKCktPmJvZHkoKSkgewor
ICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmJvZHkoKSkpIHsK
KyAgICAgICAgICAgIGlmIChpbkJvZHkgJiYgZG9jKCktPmJvZHkoKSkgewogICAgICAgICAgICAg
ICAgIC8vIHdlIGhhdmUgYW5vdGhlciA8Qk9EWT4gZWxlbWVudC4uLi4gYXBwbHkgYXR0cmlidXRl
cyB0byBleGlzdGluZyBvbmUKICAgICAgICAgICAgICAgICAvLyBtYWtlIHN1cmUgd2UgZG9uJ3Qg
b3ZlcndyaXRlIGFscmVhZHkgZXhpc3RpbmcgYXR0cmlidXRlcwogICAgICAgICAgICAgICAgIC8v
IHNvbWUgc2l0ZXMgdXNlIDxib2R5IGJnY29sb3I9cmlnaHRjb2xvcj4uLi48Ym9keSBiZ2NvbG9y
PXdyb25nY29sb3I+CkBAIC00NDksMzYwICszODMsMjU3IEBAIGJvb2wgS0hUTUxQYXJzZXI6Omlu
c2VydE5vZGUoTm9kZUltcGwgKm4KICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9ICFibWFw
LT5nZXRBdHRyaWJ1dGVJdGVtKGl0LT5pZCgpKTsKICAgICAgICAgICAgICAgICAgICAgYm1hcC0+
aW5zZXJ0QXR0cmlidXRlKGl0LT5jbG9uZShmYWxzZSkpOwogICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBpZiAoIGNoYW5nZWQgKQotICAgICAgICAgICAgICAgICAgICBkb2MoKS0+
cmVjYWxjU3R5bGUoIE5vZGVJbXBsOjpJbmhlcml0ICk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYg
KCBjdXJyZW50LT5pc0RvY3VtZW50Tm9kZSgpICkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAg
ICAvLyB0aGUgZm9sbG93aW5nIGlzIGEgaGFjayB0byBtb3ZlIG5vbiByZW5kZXJlZCBlbGVtZW50
cwotICAgICAgICAgICAgLy8gb3V0c2lkZSBvZiB0YWJsZXMuCi0gICAgICAgICAgICAvLyBuZWVk
ZWQgZm9yIGJyb2tlbiBjb25zdHJ1Y3RzIGxpa2UgPHRhYmxlPjxmb3JtIC4uLj48dHI+Li4uLgot
ICAgICAgICBjYXNlIElEX0lOUFVUOgotICAgICAgICB7Ci0gICAgICAgICAgICBFbGVtZW50SW1w
bCAqZSA9IHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsICo+KG4pOwotICAgICAgICAgICAgRE9NU3Ry
aW5nIHR5cGUgPSBlLT5nZXRBdHRyaWJ1dGUoQVRUUl9UWVBFKTsKLQotICAgICAgICAgICAgaWYg
KCBzdHJjYXNlY21wKCB0eXBlLCAiaGlkZGVuIiApID09IDAgJiYgZm9ybSkgeworICAgICAgICAg
ICAgICAgIGlmIChjaGFuZ2VkKQorICAgICAgICAgICAgICAgICAgICBkb2MoKS0+cmVjYWxjU3R5
bGUoTm9kZUltcGw6OkluaGVyaXQpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKCFjdXJyZW50LT5pc0RvY3VtZW50Tm9k
ZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfSBlbHNlIGlmICho
LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjppbnB1dCgpKSkgeworICAgICAgICAgICAgRE9NU3Ry
aW5nIHR5cGUgPSBoLT5nZXRBdHRyaWJ1dGUoQVRUUl9UWVBFKTsKKyAgICAgICAgICAgIGlmIChz
dHJjYXNlY21wKHR5cGUsICJoaWRkZW4iKSA9PSAwICYmIGZvcm0pIHsKICAgICAgICAgICAgICAg
ICBmb3JtLT5hZGRDaGlsZChuKTsKLSNpZiBTUEVFRF9ERUJVRyA8IDIKLSAgICAgICAgICAgICAg
ICBpZighbi0+YXR0YWNoZWQoKSAmJiBIVE1MV2lkZ2V0KQorICAgICAgICAgICAgICAgIGlmICgh
bi0+YXR0YWNoZWQoKSAmJiBIVE1MV2lkZ2V0KQogICAgICAgICAgICAgICAgICAgICBuLT5hdHRh
Y2goKTsKLSNlbmRpZgogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAg
fQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBJRF9URVhUOgot
ICAgICAgICAgICAgLy8gaWdub3JlIHRleHQgaW5zaWRlIHRoZSBmb2xsb3dpbmcgZWxlbWVudHMu
Ci0gICAgICAgICAgICBzd2l0Y2goY3VycmVudC0+aWQoKSkKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgIGNhc2UgSURfU0VMRUNUOgotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgOwotICAgICAgICAgICAgICAgIC8v
IGZhbGwgdGhyb3VnaCEhCi0gICAgICAgICAgICB9OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgSURfREQ6Ci0gICAgICAgIGNhc2UgSURfRFQ6CisgICAgICAgIH0gZWxzZSBpZiAo
aC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6ZGQoKSkgfHwgaC0+aGFzTG9jYWxOYW1lKEhUTUxO
YW1lczo6ZHQoKSkpIHsKICAgICAgICAgICAgIGUgPSBuZXcgSFRNTERMaXN0RWxlbWVudEltcGwo
ZG9jdW1lbnQpOwotICAgICAgICAgICAgaWYgKCBpbnNlcnROb2RlKGUpICkgeworICAgICAgICAg
ICAgaWYgKGluc2VydE5vZGUoZSkpIHsKICAgICAgICAgICAgICAgICBpbnNlcnROb2RlKG4pOwog
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgSURfQVJFQToKLSAgICAgICAgewotICAgICAgICAgICAgaWYo
bWFwKQotICAgICAgICAgICAgeworICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFtZShI
VE1MTmFtZXM6OmFyZWEoKSkpIHsKKyAgICAgICAgICAgIGlmIChtYXApIHsKICAgICAgICAgICAg
ICAgICBtYXAtPmFkZENoaWxkKG4pOwotI2lmIFNQRUVEX0RFQlVHIDwgMgotICAgICAgICAgICAg
ICAgIGlmKCFuLT5hdHRhY2hlZCgpICYmIEhUTUxXaWRnZXQpCisgICAgICAgICAgICAgICAgaWYg
KCFuLT5hdHRhY2hlZCgpICYmIEhUTUxXaWRnZXQpCiAgICAgICAgICAgICAgICAgICAgIG4tPmF0
dGFjaCgpOwotI2VuZGlmCiAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBJRF9DQVBU
SU9OOiB7Ci0gICAgICAgICAgICBzd2l0Y2ggKGN1cnJlbnQtPmlkKCkpIHsKLSAgICAgICAgICAg
ICAgICBjYXNlIElEX1RIRUFEOgotICAgICAgICAgICAgICAgIGNhc2UgSURfVEJPRFk6Ci0gICAg
ICAgICAgICAgICAgY2FzZSBJRF9URk9PVDoKLSAgICAgICAgICAgICAgICBjYXNlIElEX1RSOgot
ICAgICAgICAgICAgICAgIGNhc2UgSURfVEg6Ci0gICAgICAgICAgICAgICAgY2FzZSBJRF9URDog
ewotICAgICAgICAgICAgICAgICAgICBOb2RlSW1wbCogdHNlY3Rpb24gPSBjdXJyZW50OwotICAg
ICAgICAgICAgICAgICAgICBpZiAoY3VycmVudC0+aWQoKSA9PSBJRF9UUikKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHRzZWN0aW9uID0gY3VycmVudC0+cGFyZW50KCk7Ci0gICAgICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKGN1cnJlbnQtPmlkKCkgPT0gSURfVEQgfHwgY3VycmVudC0+aWQoKSA9
PSBJRF9USCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHRzZWN0aW9uID0gY3VycmVudC0+cGFy
ZW50KCktPnBhcmVudCgpOwotICAgICAgICAgICAgICAgICAgICBOb2RlSW1wbCogdGFibGUgPSB0
c2VjdGlvbi0+cGFyZW50KCk7Ci0gICAgICAgICAgICAgICAgICAgIGludCBleGNlcHRpb25jb2Rl
ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgdGFibGUtPmluc2VydEJlZm9yZShuLCB0c2VjdGlv
biwgZXhjZXB0aW9uY29kZSk7Ci0gICAgICAgICAgICAgICAgICAgIHB1c2hCbG9jayhpZCwgdGFn
UHJpb3JpdHkoaWQpKTsKLSAgICAgICAgICAgICAgICAgICAgc2V0Q3VycmVudChuKTsKLSAgICAg
ICAgICAgICAgICAgICAgaW5TdHJheVRhYmxlQ29udGVudCsrOwotICAgICAgICAgICAgICAgICAg
ICBibG9ja1N0YWNrLT5zdHJheVRhYmxlQ29udGVudCA9IHRydWU7Ci0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfSBlbHNlIGlmIChoLT5o
YXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpjYXB0aW9uKCkpKSB7CisgICAgICAgICAgICBpZiAoaXNU
YWJsZVBhcnQoY3VycmVudCkpIHsKKyAgICAgICAgICAgICAgICBOb2RlSW1wbCogdHNlY3Rpb24g
PSBjdXJyZW50OworICAgICAgICAgICAgICAgIGlmIChjdXJyZW50LT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6dHIoKSkpCisgICAgICAgICAgICAgICAgICAgIHRzZWN0aW9uID0gY3VycmVudC0+cGFy
ZW50KCk7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoY3VycmVudC0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OnRkKCkpIHx8IGN1cnJlbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0aCgpKSkKKyAg
ICAgICAgICAgICAgICAgICAgdHNlY3Rpb24gPSBjdXJyZW50LT5wYXJlbnQoKS0+cGFyZW50KCk7
CisgICAgICAgICAgICAgICAgTm9kZUltcGwqIHRhYmxlID0gdHNlY3Rpb24tPnBhcmVudCgpOwor
ICAgICAgICAgICAgICAgIGludCBleGNlcHRpb25jb2RlID0gMDsKKyAgICAgICAgICAgICAgICB0
YWJsZS0+aW5zZXJ0QmVmb3JlKG4sIHRzZWN0aW9uLCBleGNlcHRpb25jb2RlKTsKKyAgICAgICAg
ICAgICAgICBwdXNoQmxvY2sobG9jYWxOYW1lLCB0YWdQcmlvcml0eSk7CisgICAgICAgICAgICAg
ICAgc2V0Q3VycmVudChuKTsKKyAgICAgICAgICAgICAgICBpblN0cmF5VGFibGVDb250ZW50Kys7
CisgICAgICAgICAgICAgICAgYmxvY2tTdGFjay0+c3RyYXlUYWJsZUNvbnRlbnQgPSB0cnVlOwor
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBJRF9USEVBRDoKLSAgICAgICAgY2FzZSBJ
RF9UQk9EWToKLSAgICAgICAgY2FzZSBJRF9URk9PVDoKLSAgICAgICAgY2FzZSBJRF9DT0xHUk9V
UDogewotICAgICAgICAgICAgaWYgKGlzVGFibGVSZWxhdGVkVGFnKGN1cnJlbnQtPmlkKCkpKSB7
Ci0gICAgICAgICAgICAgICAgd2hpbGUgKGJsb2NrU3RhY2sgJiYgY3VycmVudC0+aWQoKSAhPSBJ
RF9UQUJMRSAmJiBpc1RhYmxlUmVsYXRlZFRhZyhjdXJyZW50LT5pZCgpKSkKKyAgICAgICAgfSBl
bHNlIGlmIChoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0aGVhZCgpKSB8fCBoLT5oYXNMb2Nh
bE5hbWUoSFRNTE5hbWVzOjp0Ym9keSgpKSB8fAorICAgICAgICAgICAgICAgICAgIGgtPmhhc0xv
Y2FsTmFtZShIVE1MTmFtZXM6OnRmb290KCkpIHx8IGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6
OmNvbGdyb3VwKCkpKSB7CisgICAgICAgICAgICBpZiAoaXNUYWJsZVJlbGF0ZWQoY3VycmVudCkp
IHsKKyAgICAgICAgICAgICAgICB3aGlsZSAoYmxvY2tTdGFjayAmJiBpc1RhYmxlUGFydChjdXJy
ZW50KSkKICAgICAgICAgICAgICAgICAgICAgcG9wT25lQmxvY2soKTsKICAgICAgICAgICAgICAg
ICByZXR1cm4gaW5zZXJ0Tm9kZShuKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBz
d2l0Y2ggb24gdGhlIGN1cnJlbnRseSBhY3RpdmUgZWxlbWVudAotICAgICAgICBzd2l0Y2goY3Vy
cmVudC0+aWQoKSkKLSAgICAgICAgewotICAgICAgICBjYXNlIElEX0hUTUw6Ci0gICAgICAgICAg
ICBzd2l0Y2goaWQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICBjYXNlIElEX1NDUklQVDoK
LSAgICAgICAgICAgIGNhc2UgSURfU1RZTEU6Ci0gICAgICAgICAgICBjYXNlIElEX01FVEE6Ci0g
ICAgICAgICAgICBjYXNlIElEX0xJTks6Ci0gICAgICAgICAgICBjYXNlIElEX09CSkVDVDoKLSAg
ICAgICAgICAgIGNhc2UgSURfRU1CRUQ6Ci0gICAgICAgICAgICBjYXNlIElEX1RJVExFOgotICAg
ICAgICAgICAgY2FzZSBJRF9JU0lOREVYOgotICAgICAgICAgICAgY2FzZSBJRF9CQVNFOgotICAg
ICAgICAgICAgICAgIGlmKCFoZWFkKSB7CisgICAgfQorICAgIAorICAgIC8vIDIuIE5leHQgd2Ug
ZXhhbWluZSBvdXIgY3VycmVudGx5IGFjdGl2ZSBlbGVtZW50IHRvIGRvIHNvbWUgZnVydGhlciBl
cnJvciBoYW5kbGluZy4KKyAgICBpZiAoY3VycmVudC0+aXNIVE1MRWxlbWVudCgpKSB7CisgICAg
ICAgIEhUTUxFbGVtZW50SW1wbCogaCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCo+KGN1
cnJlbnQpOworICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGN1cnJlbnRUYWdOYW1lID0gY3Vy
cmVudC0+bG9jYWxOYW1lKCk7CisgICAgICAgIGlmIChoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVz
OjpodG1sKCkpKSB7CisgICAgICAgICAgICBIVE1MRWxlbWVudEltcGwqIGVsdCA9IG4tPmlzSFRN
TEVsZW1lbnQoKSA/IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCo+KG4pIDogMDsKKyAgICAg
ICAgICAgIGlmIChlbHQgJiYgZWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpzY3JpcHQoKSkg
fHwgZWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpzdHlsZSgpKSB8fAorICAgICAgICAgICAg
ICAgIGVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6bWV0YSgpKSB8fCBlbHQtPmhhc0xvY2Fs
TmFtZShIVE1MTmFtZXM6OmxpbmsoKSkgfHwKKyAgICAgICAgICAgICAgICBlbHQtPmhhc0xvY2Fs
TmFtZShIVE1MTmFtZXM6Om9iamVjdCgpKSB8fCBlbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6
OmVtYmVkKCkpIHx8CisgICAgICAgICAgICAgICAgZWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVz
Ojp0aXRsZSgpKSB8fCBlbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmlzaW5kZXgoKSkgfHwK
KyAgICAgICAgICAgICAgICBlbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmJhc2UoKSkpIHsK
KyAgICAgICAgICAgICAgICBpZiAoIWhlYWQpIHsKICAgICAgICAgICAgICAgICAgICAgaGVhZCA9
IG5ldyBIVE1MSGVhZEVsZW1lbnRJbXBsKGRvY3VtZW50KTsKICAgICAgICAgICAgICAgICAgICAg
ZSA9IGhlYWQ7CiAgICAgICAgICAgICAgICAgICAgIGluc2VydE5vZGUoZSk7CiAgICAgICAgICAg
ICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgSURfVEVYVDogewotICAgICAgICAgICAgICAg
IFRleHRJbXBsICp0ID0gc3RhdGljX2Nhc3Q8VGV4dEltcGwgKj4obik7Ci0gICAgICAgICAgICAg
ICAgaWYgKHQtPmNvbnRhaW5zT25seVdoaXRlc3BhY2UoKSkKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIC8qIEZhbGwgdGhyb3VnaCB0byBkZWZhdWx0
ICovCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAg
IGlmICggaGF2ZUZyYW1lU2V0ICkgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZSA9IG5ldyBIVE1M
Qm9keUVsZW1lbnRJbXBsKGRvY3VtZW50KTsKLSAgICAgICAgICAgICAgICBzdGFydEJvZHkoKTsK
LSAgICAgICAgICAgICAgICBpbnNlcnROb2RlKGUpOwotICAgICAgICAgICAgICAgIGhhbmRsZWQg
PSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBpZiAobi0+aXNUZXh0Tm9kZSgpKSB7CisgICAgICAgICAgICAgICAgICAg
IFRleHRJbXBsICp0ID0gc3RhdGljX2Nhc3Q8VGV4dEltcGwgKj4obik7CisgICAgICAgICAgICAg
ICAgICAgIGlmICh0LT5jb250YWluc09ubHlXaGl0ZXNwYWNlKCkpCisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGlmICghaGF2ZUZyYW1l
U2V0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBlID0gbmV3IEhUTUxCb2R5RWxlbWVudElt
cGwoZG9jdW1lbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRCb2R5KCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpbnNlcnROb2RlKGUpOworICAgICAgICAgICAgICAgICAgICAg
ICAgaGFuZGxlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJRF9I
RUFEOgotICAgICAgICAgICAgLy8gd2UgY2FuIGdldCBoZXJlIG9ubHkgaWYgdGhlIGVsZW1lbnQg
aXMgbm90IGFsbG93ZWQgaW4gaGVhZC4KLSAgICAgICAgICAgIGlmIChpZCA9PSBJRF9IVE1MKQor
ICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmhlYWQoKSkpIHsK
KyAgICAgICAgICAgIGlmIChuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aHRtbCgpKSkKICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAg
ICAgICAvLyBUaGlzIG1lYW5zIHRoZSBib2R5IHN0YXJ0cyBoZXJlLi4uCi0gICAgICAgICAgICAg
ICAgaWYgKCBoYXZlRnJhbWVTZXQgKSBicmVhazsKLSAgICAgICAgICAgICAgICBwb3BCbG9jayhJ
RF9IRUFEKTsKLSAgICAgICAgICAgICAgICBlID0gbmV3IEhUTUxCb2R5RWxlbWVudEltcGwoZG9j
dW1lbnQpOwotICAgICAgICAgICAgICAgIHN0YXJ0Qm9keSgpOwotICAgICAgICAgICAgICAgIGlu
c2VydE5vZGUoZSk7Ci0gICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7CisgICAgICAgICAg
ICAgICAgaWYgKCFoYXZlRnJhbWVTZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgcG9wQmxvY2so
Y3VycmVudFRhZ05hbWUpOworICAgICAgICAgICAgICAgICAgICBlID0gbmV3IEhUTUxCb2R5RWxl
bWVudEltcGwoZG9jdW1lbnQpOworICAgICAgICAgICAgICAgICAgICBzdGFydEJvZHkoKTsKKyAg
ICAgICAgICAgICAgICAgICAgaW5zZXJ0Tm9kZShlKTsKKyAgICAgICAgICAgICAgICAgICAgaGFu
ZGxlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSURfQk9EWToKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIElEX0NBUFRJT046CisgICAgICAgIH0gZWxzZSBpZiAoaC0+aGFzTG9jYWxOYW1l
KEhUTUxOYW1lczo6Y2FwdGlvbigpKSkgewogICAgICAgICAgICAgLy8gSWxsZWdhbCBjb250ZW50
IGluIGEgY2FwdGlvbi4gQ2xvc2UgdGhlIGNhcHRpb24gYW5kIHRyeSBhZ2Fpbi4KLSAgICAgICAg
ICAgIHBvcEJsb2NrKElEX0NBUFRJT04pOwotICAgICAgICAgICAgc3dpdGNoKCBpZCApIHsKLSAg
ICAgICAgICAgIGNhc2UgSURfVEhFQUQ6Ci0gICAgICAgICAgICBjYXNlIElEX1RGT09UOgotICAg
ICAgICAgICAgY2FzZSBJRF9UQk9EWToKLSAgICAgICAgICAgIGNhc2UgSURfVFI6Ci0gICAgICAg
ICAgICBjYXNlIElEX1REOgotICAgICAgICAgICAgY2FzZSBJRF9USDoKKyAgICAgICAgICAgIHBv
cEJsb2NrKGN1cnJlbnRUYWdOYW1lKTsKKyAgICAgICAgICAgIGlmIChpc1RhYmxlUGFydChuKSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gaW5zZXJ0Tm9kZShuLCBmbGF0KTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElEX1RBQkxFOgotICAgICAgICBj
YXNlIElEX1RIRUFEOgotICAgICAgICBjYXNlIElEX1RGT09UOgotICAgICAgICBjYXNlIElEX1RC
T0RZOgotICAgICAgICBjYXNlIElEX1RSOgotICAgICAgICAgICAgc3dpdGNoKGlkKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgY2FzZSBJRF9UQUJMRToKLSAgICAgICAgICAgICAgICBwb3BC
bG9jayhJRF9UQUJMRSk7IC8vIGVuZCB0aGUgdGFibGUKKyAgICAgICAgfSBlbHNlIGlmIChoLT5o
YXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0YWJsZSgpKSB8fCBoLT5oYXNMb2NhbE5hbWUoSFRNTE5h
bWVzOjp0cigpKSB8fCBpc1RhYmxlU2VjdGlvbihoKSkgeworICAgICAgICAgICAgaWYgKG4tPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjp0YWJsZSgpKSkgeworICAgICAgICAgICAgICAgIHBvcEJsb2Nr
KGxvY2FsTmFtZSk7IC8vIGVuZCB0aGUgdGFibGUKICAgICAgICAgICAgICAgICBoYW5kbGVkID0g
dHJ1ZTsgICAgICAvLyAuLi5hbmQgc3RhcnQgYSBuZXcgb25lCi0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0JICAgIGNhc2UgSURfVEVYVDoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBU
ZXh0SW1wbCAqdCA9IHN0YXRpY19jYXN0PFRleHRJbXBsICo+KG4pOwotICAgICAgICAgICAgICAg
IGlmICh0LT5jb250YWluc09ubHlXaGl0ZXNwYWNlKCkpCi0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICBET01TdHJpbmdJbXBsICppID0gdC0+c3RyaW5n
KCk7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHBvcyA9IDA7Ci0gICAgICAgICAgICAg
ICAgd2hpbGUocG9zIDwgaS0+bCAmJiAoICooaS0+cytwb3MpID09IFFDaGFyKCcgJykgfHwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihpLT5zK3BvcykgPT0gUUNoYXIo
MHhhMCkpKSBwb3MrKzsKLSAgICAgICAgICAgICAgICBpZihwb3MgPT0gaS0+bCkKLSAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIE5vZGVJbXBsICpub2RlID0gY3VycmVudDsK
LSAgICAgICAgICAgICAgICBOb2RlSW1wbCAqcGFyZW50ID0gbm9kZS0+cGFyZW50Tm9kZSgpOwot
Ci0gICAgICAgICAgICAgICAgTm9kZUltcGwgKnBhcmVudHBhcmVudCA9IHBhcmVudC0+cGFyZW50
Tm9kZSgpOwotCi0gICAgICAgICAgICAgICAgaWYgKG4tPmlzVGV4dE5vZGUoKSB8fAotICAgICAg
ICAgICAgICAgICAgICAoIG5vZGUtPmlkKCkgPT0gSURfVFIgJiYKLSAgICAgICAgICAgICAgICAg
ICAgICggcGFyZW50LT5pZCgpID09IElEX1RIRUFEIHx8Ci0gICAgICAgICAgICAgICAgICAgICAg
cGFyZW50LT5pZCgpID09IElEX1RCT0RZIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgcGFyZW50
LT5pZCgpID09IElEX1RGT09UICkgJiYgcGFyZW50cGFyZW50LT5pZCgpID09IElEX1RBQkxFICkg
fHwKLSAgICAgICAgICAgICAgICAgICAgKCAhY2hlY2tDaGlsZChJRF9UUiwgaWQsICFkb2MoKS0+
aW5Db21wYXRNb2RlKCkpICYmICggbm9kZS0+aWQoKSA9PSBJRF9USEVBRCB8fCBub2RlLT5pZCgp
ID09IElEX1RCT0RZIHx8IG5vZGUtPmlkKCkgPT0gSURfVEZPT1QgKSAmJgotICAgICAgICAgICAg
ICAgICAgICAgcGFyZW50LT5pZCgpID09IElEX1RBQkxFICkpCi0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICBub2RlID0gKG5vZGUtPmlkKCkgPT0gSURfVEFCTEUpID8gbm9k
ZSA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKChub2RlLT5pZCgpID09IElEX1RSKSA/
IHBhcmVudHBhcmVudCA6IHBhcmVudCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgICAgICBib29sIHBvc3NpYmx5TW92ZVN0cmF5Q29udGVudCA9IHRydWU7
CisgICAgICAgICAgICAgICAgaW50IGV4Y2VwdGlvbkNvZGUgPSAwOworICAgICAgICAgICAgICAg
IGlmIChuLT5pc1RleHROb2RlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgVGV4dEltcGwgKnQg
PSBzdGF0aWNfY2FzdDxUZXh0SW1wbCAqPihuKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHQt
PmNvbnRhaW5zT25seVdoaXRlc3BhY2UoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgRE9NU3RyaW5nSW1wbCAqaSA9IHQtPnN0cmlu
ZygpOworICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcG9zID0gMDsKKyAgICAgICAg
ICAgICAgICAgICAgd2hpbGUgKHBvcyA8IGktPmwgJiYgKCooaS0+cytwb3MpID09IFFDaGFyKCcg
JykgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooaS0+cytw
b3MpID09IFFDaGFyKDB4YTApKSkgcG9zKys7CisgICAgICAgICAgICAgICAgICAgIGlmIChwb3Mg
PT0gaS0+bCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHBvc3NpYmx5TW92ZVN0cmF5Q29udGVu
dCA9IGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAocG9zc2li
bHlNb3ZlU3RyYXlDb250ZW50KSB7CisgICAgICAgICAgICAgICAgICAgIE5vZGVJbXBsICpub2Rl
ID0gY3VycmVudDsKICAgICAgICAgICAgICAgICAgICAgTm9kZUltcGwgKnBhcmVudCA9IG5vZGUt
PnBhcmVudE5vZGUoKTsKLSAgICAgICAgICAgICAgICAgICAgaW50IGV4Y2VwdGlvbmNvZGUgPSAw
OwotICAgICAgICAgICAgICAgICAgICBwYXJlbnQtPmluc2VydEJlZm9yZSggbiwgbm9kZSwgZXhj
ZXB0aW9uY29kZSApOwotICAgICAgICAgICAgICAgICAgICBpZiAoIGV4Y2VwdGlvbmNvZGUgKSB7
Ci0jaWZkZWYgUEFSU0VSX0RFQlVHCi0gICAgICAgICAgICAgICAgICAgICAgICBrZERlYnVnKCA2
MDM1ICkgPDwgImFkZGluZyBjb250ZW50IGJlZm9yZSB0YWJsZSBmYWlsZWQhIiA8PCBlbmRsOwot
I2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgTm9kZUltcGwgKmdyYW5kcGFyZW50ID0gcGFyZW50LT5wYXJlbnROb2RlKCk7CisKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKG4tPmlzVGV4dE5vZGUoKSB8fAorICAgICAgICAgICAgICAgICAg
ICAgICAgKGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnRyKCkpICYmCisgICAgICAgICAgICAg
ICAgICAgICAgICAgaXNUYWJsZVNlY3Rpb24ocGFyZW50KSAmJiBncmFuZHBhcmVudC0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OnRhYmxlKCkpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IEZJWE1FOiBEVEQgQ0hFQ0sgd2l0aCBubyBlbGVtZW50IQorICAgICAgICAgICAgICAgICAgICAg
ICAgKCAvKiFjaGVja0NoaWxkKElEX1RSLCBpZCwgIWRvYygpLT5pbkNvbXBhdE1vZGUoKSkgJiYq
LyBpc1RhYmxlU2VjdGlvbihub2RlKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVu
dC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRhYmxlKCkpKSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgbm9kZSA9IChub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGFibGUoKSkpID8gbm9k
ZSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgobm9kZS0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OnRyKCkpKSA/IGdyYW5kcGFyZW50IDogcGFyZW50KTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIE5vZGVJbXBsICpwYXJlbnQgPSBub2RlLT5wYXJlbnROb2RlKCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBwYXJlbnQtPmluc2VydEJlZm9yZShuLCBub2RlLCBleGNlcHRpb25D
b2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZXhjZXB0aW9uQ29kZSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuLT5pc0hUTUxFbGVtZW50KCkgJiYgdGFnUHJp
b3JpdHkgPiAwICYmIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhZmxhdCAmJiBz
dGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwqPihuKS0+ZW5kVGFnUmVxdWlyZW1lbnQoKSAhPSBE
T006OkZPUkJJRERFTikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHB1c2hCbG9jayhsb2NhbE5hbWUsIHRhZ1ByaW9yaXR5KTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q3VycmVudChuKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW5TdHJheVRhYmxlQ29udGVudCsrOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBibG9ja1N0YWNrLT5zdHJheVRhYmxlQ29udGVudCA9IHRy
dWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmIChuLT5pc0VsZW1lbnROb2RlKCkg
JiYgdGFnUHJpb3JpdHkoaWQpICE9IDAgJiYgCi0gICAgICAgICAgICAgICAgICAgICAgICAhZmxh
dCAmJiBlbmRUYWdSZXF1aXJlbWVudChpZCkgIT0gRE9NOjpGT1JCSURERU4pCi0gICAgICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHB1c2hCbG9jayhpZCwgdGFnUHJp
b3JpdHkoaWQpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldEN1cnJlbnQobik7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBpblN0cmF5VGFibGVDb250ZW50Kys7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBibG9ja1N0YWNrLT5zdHJheVRhYmxlQ29udGVudCA9IHRydWU7CisKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCFleGNlcHRpb25Db2RlKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoY3VycmVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRyKCkpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGUgPSBuZXcgSFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsKEhUTUxO
YW1lczo6dGQoKSwgZG9jdW1lbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAo
Y3VycmVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRhYmxlKCkpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGUgPSBuZXcgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsKEhUTUxOYW1l
czo6dGJvZHkoKSwgZG9jdW1lbnQsIHRydWUpOyAvLyBpbXBsaWNpdCAKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlID0gbmV3IEhUTUxU
YWJsZVJvd0VsZW1lbnRJbXBsKGRvY3VtZW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0Tm9kZShlKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGhhbmRsZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIGlmICggY3VycmVudC0+aWQoKSA9PSBJRF9UUiApCi0gICAgICAgICAgICAgICAgICAgIGUg
PSBuZXcgSFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsKGRvY3VtZW50LCBJRF9URCk7Ci0gICAgICAg
ICAgICAgICAgZWxzZSBpZiAoIGN1cnJlbnQtPmlkKCkgPT0gSURfVEFCTEUgKQotICAgICAgICAg
ICAgICAgICAgICBlID0gbmV3IEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbCggZG9jdW1lbnQs
IElEX1RCT0RZLCB0cnVlIC8qIGltcGxpY2l0ICovICk7Ci0gICAgICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgICAgICBlID0gbmV3IEhUTUxUYWJsZVJvd0VsZW1lbnRJbXBsKCBkb2N1
bWVudCApOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGluc2VydE5vZGUoZSk7
Ci0gICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICB9IC8vIGVuZCBkZWZhdWx0Ci0gICAgICAgICAgICB9IC8vIGVuZCBzd2l0
Y2gKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElEX09CSkVDVDoKLSAgICAgICAg
ICAgIGRpc2NhcmRfdW50aWwgPSBJRF9PQkpFQ1QgKyBJRF9DTE9TRV9UQUc7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1l
czo6b2JqZWN0KCkpKSB7CisgICAgICAgICAgICBzZXRTa2lwTW9kZShIVE1MTmFtZXM6Om9iamVj
dCgpKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgY2FzZSBJRF9VTDoKLSAg
ICAgICAgY2FzZSBJRF9PTDoKLSAgICAgICAgY2FzZSBJRF9ESVI6Ci0gICAgICAgIGNhc2UgSURf
TUVOVToKKyAgICAgICAgfSBlbHNlIGlmIChoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp1bCgp
KSB8fCBoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvbCgpKSB8fAorICAgICAgICAgICAgICAg
ICBoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpkaXIoKSkgfHwgaC0+aGFzTG9jYWxOYW1lKEhU
TUxOYW1lczo6bWVudSgpKSkgewogICAgICAgICAgICAgZSA9IG5ldyBIVE1MRGl2RWxlbWVudElt
cGwoZG9jdW1lbnQpOwogICAgICAgICAgICAgaW5zZXJ0Tm9kZShlKTsKICAgICAgICAgICAgIGhh
bmRsZWQgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIElEX0RM
OgotICAgICAgICAgICAgICAgIHBvcEJsb2NrKElEX0RMKTsKLSAgICAgICAgICAgICAgICBoYW5k
bGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgSURf
RFQ6Ci0gICAgICAgICAgICAgICAgcG9wQmxvY2soSURfRFQpOwotICAgICAgICAgICAgICAgIGhh
bmRsZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElEX1NF
TEVDVDoKLSAgICAgICAgICAgIGlmKCBuLT5pc0lubGluZSgpICkKKyAgICAgICAgfSBlbHNlIGlm
IChoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpkbCgpKSB8fCBoLT5oYXNMb2NhbE5hbWUoSFRN
TE5hbWVzOjpkdCgpKSkgeworICAgICAgICAgICAgcG9wQmxvY2soY3VycmVudFRhZ05hbWUpOwor
ICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7CisgICAgICAgIH0gZWxzZSBpZiAoaC0+aGFzTG9j
YWxOYW1lKEhUTUxOYW1lczo6c2VsZWN0KCkpKSB7CisgICAgICAgICAgICBpZiAoaXNJbmxpbmUo
bikpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgSURfUDoKLSAgICAgICAgY2FzZSBJRF9IMToKLSAgICAgICAgY2FzZSBJRF9I
MjoKLSAgICAgICAgY2FzZSBJRF9IMzoKLSAgICAgICAgY2FzZSBJRF9INDoKLSAgICAgICAgY2Fz
ZSBJRF9INToKLSAgICAgICAgY2FzZSBJRF9INjoKLSAgICAgICAgICAgIGlmKCFuLT5pc0lubGlu
ZSgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHBvcEJsb2NrKGN1cnJlbnQtPmlk
KCkpOworICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnAoKSkg
fHwgaXNIZWFkZXJUYWcoY3VycmVudFRhZ05hbWUpKSB7CisgICAgICAgICAgICBpZiAoaXNJbmxp
bmUobikpIHsKKyAgICAgICAgICAgICAgICBwb3BCbG9jayhjdXJyZW50VGFnTmFtZSk7CiAgICAg
ICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBJRF9PUFRJT046Ci0gICAgICAgIGNhc2UgSURfT1BUR1JPVVA6
Ci0gICAgICAgICAgICBpZiAoaWQgPT0gSURfT1BUR1JPVVApCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgcG9wQmxvY2soY3VycmVudC0+aWQoKSk7CisgICAgICAgIH0gZWxzZSBpZiAo
aC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpIHx8IGgtPmhhc0xvY2FsTmFtZShI
VE1MTmFtZXM6Om9wdGdyb3VwKCkpKSB7CisgICAgICAgICAgICBpZiAobG9jYWxOYW1lID09IEhU
TUxOYW1lczo6b3B0Z3JvdXAoKSkgeworICAgICAgICAgICAgICAgIHBvcEJsb2NrKGN1cnJlbnRU
YWdOYW1lKTsKICAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGVsc2UgaWYoaWQgPT0gSURfU0VMRUNUKQotICAgICAgICAgICAgeworICAg
ICAgICAgICAgZWxzZSBpZiAobG9jYWxOYW1lID09IEhUTUxOYW1lczo6c2VsZWN0KCkpIHsKICAg
ICAgICAgICAgICAgICAvLyBJRSB0cmVhdHMgYSBuZXN0ZWQgc2VsZWN0IGFzIDwvc2VsZWN0Pi4g
TGV0J3MgZG8gdGhlIHNhbWUKLSAgICAgICAgICAgICAgICBwb3BCbG9jayggSURfU0VMRUNUICk7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgcG9wQmxvY2sobG9jYWxO
YW1lKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgLy8g
aGVhZCBlbGVtZW50cyBpbiB0aGUgYm9keSBzaG91bGQgYmUgaWdub3JlZC4KLSAgICAgICAgY2Fz
ZSBJRF9BRERSRVNTOgotICAgICAgICAgICAgcG9wQmxvY2soSURfQUREUkVTUyk7CisgICAgICAg
IH0gZWxzZSBpZiAoaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6YWRkcmVzcygpKSkgeworICAg
ICAgICAgICAgcG9wQmxvY2soY3VycmVudFRhZ05hbWUpOwogICAgICAgICAgICAgaGFuZGxlZCA9
IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJRF9DT0xHUk9VUDoKLSAg
ICAgICAgICAgIGlmIChpZCAhPSBJRF9URVhUKSB7Ci0gICAgICAgICAgICAgICAgcG9wQmxvY2so
SURfQ09MR1JPVVApOworICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFtZShIVE1MTmFt
ZXM6OmNvbGdyb3VwKCkpKSB7CisgICAgICAgICAgICBpZiAobG9jYWxOYW1lICE9IHRleHRBdG9t
KSB7CisgICAgICAgICAgICAgICAgcG9wQmxvY2soY3VycmVudFRhZ05hbWUpOwogICAgICAgICAg
ICAgICAgIGhhbmRsZWQgPSB0cnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgSURfRk9OVDoKLSAgICAgICAgICAgIHBvcEJsb2NrKElEX0ZPTlQpOwor
ICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmZvbnQoKSkpIHsK
KyAgICAgICAgICAgIHBvcEJsb2NrKGN1cnJlbnRUYWdOYW1lKTsKICAgICAgICAgICAgIGhhbmRs
ZWQgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICBpZihjdXJyZW50LT5pc0RvY3VtZW50Tm9kZSgpKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIGlmKGN1cnJlbnQtPmZpcnN0Q2hpbGQoKSA9PSAwKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGUgPSBuZXcgSFRNTEh0bWxFbGVtZW50SW1wbChkb2N1bWVudCk7Ci0gICAgICAgICAg
ICAgICAgICAgIGluc2VydE5vZGUoZSk7Ci0gICAgICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0
cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2Ug
aWYoY3VycmVudC0+aXNJbmxpbmUoKSkKLSAgICAgICAgICAgIHsKKyAgICAgICAgfSBlbHNlIGlm
ICghaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6Ym9keSgpKSkgeworICAgICAgICAgICAgaWYg
KGlzSW5saW5lKGN1cnJlbnQpKSB7CiAgICAgICAgICAgICAgICAgcG9wSW5saW5lQmxvY2tzKCk7
CiAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KLQotICAgICAgICAvLyBpZiB3ZSBjb3VsZG4ndCBoYW5kbGUgdGhlIGVycm9yLCBqdXN0IHJl
dGhyb3cgdGhlIGV4Y2VwdGlvbi4uLgotICAgICAgICBpZighaGFuZGxlZCkKLSAgICAgICAgewot
ICAgICAgICAgICAgLy9rZERlYnVnKCA2MDM1ICkgPDwgIkV4Y2VwdGlvbiBoYW5kbGVyIGZhaWxl
ZCBpbiBIVE1MUEFyc2VyOjppbnNlcnROb2RlKCkiIDw8IGVuZGw7Ci0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorICAgIGVsc2UgaWYgKGN1cnJlbnQtPmlzRG9jdW1lbnROb2RlKCkp
IHsKKyAgICAgICAgaWYgKGN1cnJlbnQtPmZpcnN0Q2hpbGQoKSA9PSAwKSB7CisgICAgICAgICAg
ICBlID0gbmV3IEhUTUxIdG1sRWxlbWVudEltcGwoZG9jdW1lbnQpOworICAgICAgICAgICAgaW5z
ZXJ0Tm9kZShlKTsKKyAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwogICAgICAgICB9Ci0KLSAg
ICAgICAgcmV0dXJuIGluc2VydE5vZGUobik7CiAgICAgfQorCisgICAgLy8gMy4gSWYgd2UgY291
bGRuJ3QgaGFuZGxlIHRoZSBlcnJvciwganVzdCByZXR1cm4gZmFsc2UgYW5kIGF0dGVtcHQgdG8g
ZXJyb3ItY29ycmVjdCBhZ2Fpbi4KKyAgICBpZiAoIWhhbmRsZWQpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICByZXR1cm4gaW5zZXJ0Tm9kZShuKTsKIH0KIAogTm9kZUltcGwgKktIVE1MUGFy
c2VyOjpnZXRFbGVtZW50KFRva2VuKiB0KQogewotICAgIHN3aXRjaCAodC0+aWQpCi0gICAgewot
ICAgIGNhc2UgSURfSEVBRDoKLSAgICAgICAgaWYgKCFoZWFkICYmIGN1cnJlbnQtPmlkKCkgPT0g
SURfSFRNTCkgeworICAgIGlmICh0LT50YWdOYW1lID09IEhUTUxOYW1lczo6aGVhZCgpKSB7Cisg
ICAgICAgIGlmICghaGVhZCAmJiBjdXJyZW50LT5sb2NhbE5hbWUoKSA9PSBIVE1MTmFtZXM6Omh0
bWwoKSkgewogICAgICAgICAgICAgaGVhZCA9IG5ldyBIVE1MSGVhZEVsZW1lbnRJbXBsKGRvY3Vt
ZW50KTsKICAgICAgICAgICAgIHJldHVybiBoZWFkOwogICAgICAgICB9CiAgICAgICAgIHJldHVy
biAwOworICAgIH0KKworLyoKKyAgICBzd2l0Y2ggKHQtPmlkKQorICAgIHsKICAgICBjYXNlIElE
X0JPRFk6CiAgICAgICAgIC8vIGJvZHkgbm8gbG9uZ2VyIGFsbG93ZWQgaWYgd2UgaGF2ZSBhIGZy
YW1lc2V0CiAgICAgICAgIGlmIChoYXZlRnJhbWVTZXQpCiAgICAgICAgICAgICByZXR1cm4gMDsK
LSAgICAgICAgcG9wQmxvY2soSURfSEVBRCk7CisgICAgICAgIHBvcEJsb2NrKEhUTUxOYW1lczo6
aGVhZCgpKTsKICAgICAgICAgc3RhcnRCb2R5KCk7CiAgICAgICAgIHJldHVybiBuZXcgSFRNTEJv
ZHlFbGVtZW50SW1wbChkb2N1bWVudCk7CiAKIC8vIGZyYW1lcwogICAgIGNhc2UgSURfRlJBTUVT
RVQ6Ci0gICAgICAgIHBvcEJsb2NrKElEX0hFQUQpOworICAgICAgICBwb3BCbG9jayhIVE1MTmFt
ZXM6OmhlYWQoKSk7CiAgICAgICAgIGlmIChpbkJvZHkgJiYgIWhhdmVGcmFtZVNldCAmJiAhaGF2
ZUNvbnRlbnQpIHsKLSAgICAgICAgICAgIHBvcEJsb2NrKElEX0JPRFkpOworICAgICAgICAgICAg
cG9wQmxvY2soSFRNTE5hbWVzOjpib2R5KCkpOwogICAgICAgICAgICAgLy8gIyMjIGFjdHVhbGx5
IGZvciBJRSBkb2N1bWVudC5ib2R5IHJldHVybnMgdGhlIG5vdyBoaWRkZW4gImJvZHkiIGVsZW1l
bnQKICAgICAgICAgICAgIC8vIHdlIGNhbid0IGltcGxlbWVudCB0aGF0IGJlaGF2aW91ciBub3cg
YmVjYXVzZSBpdCBjb3VsZCBjYXVzZSB0b28gbWFueQogICAgICAgICAgICAgLy8gcmVncmVzc2lv
bnMgYW5kIHRoZSBoZWFkYWNoZXMgYXJlIG5vdCB3b3J0aCB0aGUgd29yayBhcyBsb25nIGFzIHRo
ZXJlIGlzCkBAIC04MTEsNyArNjQyLDcgQEAgTm9kZUltcGwgKktIVE1MUGFyc2VyOjpnZXRFbGVt
ZW50KFRva2VuKgogICAgICAgICAgICAgICAgIGRvYygpLT5ib2R5KCktPnNldEF0dHJpYnV0ZShB
VFRSX1NUWUxFLCAiZGlzcGxheTpub25lIik7CiAgICAgICAgICAgICBpbkJvZHkgPSBmYWxzZTsK
ICAgICAgICAgfQotICAgICAgICBpZiAoKGhhdmVDb250ZW50IHx8IGhhdmVGcmFtZVNldCkgJiYg
Y3VycmVudC0+aWQoKSA9PSBJRF9IVE1MKQorICAgICAgICBpZiAoKGhhdmVDb250ZW50IHx8IGhh
dmVGcmFtZVNldCkgJiYgY3VycmVudC0+bG9jYWxOYW1lKCkgPT0gSFRNTE5hbWVzOjpodG1sKCkp
CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgaGF2ZUZyYW1lU2V0ID0gdHJ1ZTsKICAg
ICAgICAgc3RhcnRCb2R5KCk7CkBAIC04MTksNyArNjUwLDcgQEAgTm9kZUltcGwgKktIVE1MUGFy
c2VyOjpnZXRFbGVtZW50KFRva2VuKgogCiAgICAgLy8gYSBiaXQgb2YgYSBzcGVjaWFsIGNhc2Us
IHNpbmNlIHRoZSBmcmFtZSBpcyBpbmxpbmVkCiAgICAgY2FzZSBJRF9JRlJBTUU6Ci0gICAgICAg
IGRpc2NhcmRfdW50aWwgPSBJRF9JRlJBTUUgKyBJRF9DTE9TRV9UQUc7CisgICAgICAgIHNldFNr
aXBNb2RlKEhUTUxOYW1lczo6aWZyYW1lKCkpOwogICAgICAgICBicmVhazsKIAogLy8gZm9ybSBl
bGVtZW50cwpAQCAtODY0LDIxICs2OTUsMjEgQEAgTm9kZUltcGwgKktIVE1MUGFyc2VyOjpnZXRF
bGVtZW50KFRva2VuKgogCiAvLyBsaXN0cwogICAgIGNhc2UgSURfREQ6Ci0gICAgICAgIHBvcEJs
b2NrKElEX0RUKTsKLSAgICAgICAgcG9wQmxvY2soSURfREQpOworICAgICAgICBwb3BCbG9jayhI
VE1MTmFtZXM6OmR0KCkpOworICAgICAgICBwb3BCbG9jayhIVE1MTmFtZXM6OmRkKCkpOwogICAg
ICAgICBicmVhazsKICAgICBjYXNlIElEX0RUOgotICAgICAgICBwb3BCbG9jayhJRF9ERCk7Ci0g
ICAgICAgIHBvcEJsb2NrKElEX0RUKTsKKyAgICAgICAgcG9wQmxvY2soSFRNTE5hbWVzOjpkZCgp
KTsKKyAgICAgICAgcG9wQmxvY2soSFRNTE5hbWVzOjpkdCgpKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBJRF9MSToKLSAgICAgICAgcG9wQmxvY2soSURfTEkpOworICAgICAgICBwb3BCbG9j
ayh0LT50YWdOYW1lKTsKICAgICAgICAgYnJlYWs7CiAKIC8vIGFuY2hvcgogICAgIGNhc2UgSURf
QToKICAgICAgICAgLy8gTmV2ZXIgYWxsb3cgbmVzdGVkIDxhPnMuCi0gICAgICAgIHBvcEJsb2Nr
KElEX0EpOworICAgICAgICBwb3BCbG9jayh0LT50YWdOYW1lKTsKICAgICAgICAgYnJlYWs7CiAK
IC8vIGltYWdlcwpAQCAtODkwLDE5ICs3MjEsMTkgQEAgTm9kZUltcGwgKktIVE1MUGFyc2VyOjpn
ZXRFbGVtZW50KFRva2VuKgogCiAvLyB0YWJsZXMKICAgICBjYXNlIElEX1RSOgotICAgICAgICBw
b3BCbG9jayhJRF9UUik7CisgICAgICAgIHBvcEJsb2NrKHQtPnRhZ05hbWUpOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIElEX1REOgogICAgIGNhc2UgSURfVEg6Ci0gICAgICAgIHBvcEJsb2Nr
KElEX1RIKTsKLSAgICAgICAgcG9wQmxvY2soSURfVEQpOworICAgICAgICBwb3BCbG9jayhIVE1M
TmFtZXM6OnRoKCkpOworICAgICAgICBwb3BCbG9jayhIVE1MTmFtZXM6OnRkKCkpOwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIElEX1RCT0RZOgogICAgIGNhc2UgSURfVEhFQUQ6CiAgICAgY2Fz
ZSBJRF9URk9PVDoKLSAgICAgICAgcG9wQmxvY2soSURfVEhFQUQpOwotICAgICAgICBwb3BCbG9j
ayhJRF9UQk9EWSk7Ci0gICAgICAgIHBvcEJsb2NrKElEX1RGT09UKTsKKyAgICAgICAgcG9wQmxv
Y2soSFRNTE5hbWVzOjp0aGVhZCgpKTsKKyAgICAgICAgcG9wQmxvY2soSFRNTE5hbWVzOjp0Ym9k
eSgpKTsKKyAgICAgICAgcG9wQmxvY2soSFRNTE5hbWVzOjp0Zm9vdCgpKTsKICAgICAgICAgYnJl
YWs7CiAKIC8vIGVsZW1lbnRzIHdpdGggbm8gc3BlY2lhbCByZXByZXNlbnRhdGlvbiBpbiB0aGUg
RE9NCkBAIC05MTQsMjggKzc0NSwyNyBAQCBOb2RlSW1wbCAqS0hUTUxQYXJzZXI6OmdldEVsZW1l
bnQoVG9rZW4qCiAgICAgY2FzZSBJRF9TVFJJS0U6CiAgICAgY2FzZSBJRF9CSUc6CiAgICAgY2Fz
ZSBJRF9TTUFMTDoKLSAgICAgICAgaWYgKCFhbGxvd05lc3RlZFJlZHVuZGFudFRhZyh0LT5pZCkp
CisgICAgICAgIGlmICghYWxsb3dOZXN0ZWRSZWR1bmRhbnRUYWcodC0+dGFnTmFtZSkpCiAgICAg
ICAgICAgICByZXR1cm4gMDsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIElEX05PQlI6CiAg
ICAgY2FzZSBJRF9XQlI6Ci0gICAgICAgIHBvcEJsb2NrKHQtPmlkKTsgLy8gRG9uJ3QgYWxsb3cg
bmVzdGVkIDxub2JyPiBvciA8d2JyPgorICAgICAgICBwb3BCbG9jayh0LT50YWdOYW1lKTsgLy8g
RG9uJ3QgYWxsb3cgbmVzdGVkIDxub2JyPiBvciA8d2JyPgogICAgICAgICBicmVhazsKIAogLy8g
dGhlc2UgYXJlIHNwZWNpYWwsIGFuZCBub3JtYWxseSBub3QgcmVuZGVyZWQKICAgICBjYXNlIElE
X05PRU1CRUQ6Ci0gICAgICAgIGRpc2NhcmRfdW50aWwgPSBJRF9OT0VNQkVEICsgSURfQ0xPU0Vf
VEFHOworICAgICAgICBzZXRTa2lwTW9kZShIVE1MTmFtZXM6Om5vZW1iZWQoKSk7CiAgICAgICAg
IHJldHVybiAwOwogICAgIGNhc2UgSURfTk9GUkFNRVM6Ci0gICAgICAgIGRpc2NhcmRfdW50aWwg
PSBJRF9OT0ZSQU1FUyArIElEX0NMT1NFX1RBRzsKKyAgICAgICAgc2V0U2tpcE1vZGUoSFRNTE5h
bWVzOjpub2ZyYW1lcygpKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgY2FzZSBJRF9OT1NDUklQ
VDoKICAgICAgICAgaWYgKEhUTUxXaWRnZXQgJiYgSFRNTFdpZGdldC0+cGFydCgpLT5qU2NyaXB0
RW5hYmxlZCgpKQotICAgICAgICAgICAgZGlzY2FyZF91bnRpbCA9IElEX05PU0NSSVBUICsgSURf
Q0xPU0VfVEFHOworICAgICAgICAgICAgc2V0U2tpcE1vZGUoSFRNTE5hbWVzOjpub3NjcmlwdCgp
KTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgY2FzZSBJRF9OT0xBWUVSOgotICAgICAgICAvL2Rp
c2NhcmRfdW50aWwgPSBJRF9OT0xBWUVSICsgSURfQ0xPU0VfVEFHOwogICAgICAgICByZXR1cm4g
MDsKICAgICBjYXNlIElEX1RFWFQ6CiAgICAgICAgIHJldHVybiBuZXcgVGV4dEltcGwoZG9jdW1l
bnQsIHQtPnRleHQpOwpAQCAtOTUwLDg2ICs3ODAsNjMgQEAgTm9kZUltcGwgKktIVE1MUGFyc2Vy
OjpnZXRFbGVtZW50KFRva2VuKgogICAgICAgICAgICAgc2NyaXB0RWxlbWVudC0+c2V0Q3JlYXRl
ZEJ5UGFyc2VyKHRydWUpOwogICAgICAgICAgICAgcmV0dXJuIHNjcmlwdEVsZW1lbnQ7CiAgICAg
ICAgIH0KLSAgICB9CisgICAgfSovCiAKLSAgICByZXR1cm4gZG9jdW1lbnQtPmRvY3VtZW50KCkt
PmNyZWF0ZUhUTUxFbGVtZW50KHQtPmlkKTsKKyAgICByZXR1cm4gZG9jdW1lbnQtPmRvY3VtZW50
KCktPmNyZWF0ZUhUTUxFbGVtZW50KHQtPnRhZ05hbWUpOwogfQogCiAjZGVmaW5lIE1BWF9SRURV
TkRBTlQgMjAKIAotYm9vbCBLSFRNTFBhcnNlcjo6YWxsb3dOZXN0ZWRSZWR1bmRhbnRUYWcoaW50
IF9pZCkKK2Jvb2wgS0hUTUxQYXJzZXI6OmFsbG93TmVzdGVkUmVkdW5kYW50VGFnKGNvbnN0IEF0
b21pY1N0cmluZyYgX3RhZ05hbWUpCiB7CiAgICAgLy8gd3d3LmxpY2VvLmVkdS5teCBpcyBhbiBl
eGFtcGxlIG9mIGEgc2l0ZSB0aGF0IGFjaGlldmVzIGEgbGV2ZWwgb2YgbmVzdGluZyBvZgogICAg
IC8vIGFib3V0IDE1MDAgdGFncywgYWxsIGZyb20gYSBidW5jaCBvZiA8Yj5zLiAgV2Ugd2lsbCBv
bmx5IGFsbG93IGF0IG1vc3QgMjAKICAgICAvLyBuZXN0ZWQgdGFncyBvZiB0aGUgc2FtZSB0eXBl
IGJlZm9yZSBqdXN0IGlnbm9yaW5nIHRoZW0gYWxsIHRvZ2V0aGVyLgogICAgIGludCBpID0gMDsK
ICAgICBmb3IgKEhUTUxTdGFja0VsZW0qIGN1cnIgPSBibG9ja1N0YWNrOwotICAgICAgICAgaSA8
IE1BWF9SRURVTkRBTlQgJiYgY3VyciAmJiBjdXJyLT5pZCA9PSBfaWQ7CisgICAgICAgICBpIDwg
TUFYX1JFRFVOREFOVCAmJiBjdXJyICYmIGN1cnItPnRhZ05hbWUgPT0gX3RhZ05hbWU7CiAgICAg
ICAgICBjdXJyID0gY3Vyci0+bmV4dCwgaSsrKTsKICAgICByZXR1cm4gaSAhPSBNQVhfUkVEVU5E
QU5UOwogfQogCiB2b2lkIEtIVE1MUGFyc2VyOjpwcm9jZXNzQ2xvc2VUYWcoVG9rZW4gKnQpCiB7
Ci0gICAgLy8gc3VwcG9ydCBmb3IgcmVhbGx5IGJyb2tlbiBodG1sLiBDYW4ndCBiZWxpZXZlIEkn
bSBzdXBwb3J0aW5nIHN1Y2ggY3JhcCAobGFycykKLSAgICBzd2l0Y2godC0+aWQpCi0gICAgewot
ICAgIGNhc2UgSURfSFRNTCtJRF9DTE9TRV9UQUc6Ci0gICAgY2FzZSBJRF9CT0RZK0lEX0NMT1NF
X1RBRzoKLSAgICAgICAgLy8gd2UgbmV2ZXIgY2xvc2UgdGhlIGJvZHkgdGFnLCBzaW5jZSBzb21l
IHN0dXBpZCB3ZWIgcGFnZXMgY2xvc2UgaXQgYmVmb3JlIHRoZSBhY3R1YWwgZW5kIG9mIHRoZSBk
b2MuCi0gICAgICAgIC8vIGxldCdzIHJlbHkgb24gdGhlIGVuZCgpIGNhbGwgdG8gY2xvc2UgdGhp
bmdzLgorICAgIC8vIFN1cHBvcnQgZm9yIHJlYWxseSBicm9rZW4gaHRtbC4KKyAgICAvLyB3ZSBu
ZXZlciBjbG9zZSB0aGUgYm9keSB0YWcsIHNpbmNlIHNvbWUgc3R1cGlkIHdlYiBwYWdlcyBjbG9z
ZSBpdCBiZWZvcmUgdGhlIGFjdHVhbCBlbmQgb2YgdGhlIGRvYy4KKyAgICAvLyBsZXQncyByZWx5
IG9uIHRoZSBlbmQoKSBjYWxsIHRvIGNsb3NlIHRoaW5ncy4KKyAgICBpZiAodC0+dGFnTmFtZSA9
PSBIVE1MTmFtZXM6Omh0bWwoKSB8fCB0LT50YWdOYW1lID09IEhUTUxOYW1lczo6Ym9keSgpKQog
ICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBJRF9GT1JNK0lEX0NMT1NFX1RBRzoKKyAgICAKKyAg
ICBpZiAodC0+dGFnTmFtZSA9PSBIVE1MTmFtZXM6OmZvcm0oKSkKICAgICAgICAgZm9ybSA9IDA7
Ci0gICAgICAgIC8vIHRoaXMgb25lIGlzIHRvIGdldCB0aGUgcmlnaHQgc3R5bGUgb24gdGhlIGJv
ZHkgZWxlbWVudAotICAgICAgICBicmVhazsKLSAgICBjYXNlIElEX01BUCtJRF9DTE9TRV9UQUc6
CisgICAgZWxzZSBpZiAodC0+dGFnTmFtZSA9PSBIVE1MTmFtZXM6Om1hcCgpKQogICAgICAgICBt
YXAgPSAwOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIElEX1NFTEVDVCtJRF9DTE9TRV9UQUc6
CisgICAgZWxzZSBpZiAodC0+dGFnTmFtZSA9PSBIVE1MTmFtZXM6OnNlbGVjdCgpKQogICAgICAg
ICBpblNlbGVjdCA9IGZhbHNlOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAg
ICBicmVhazsKLSAgICB9Ci0KLSNpZmRlZiBQQVJTRVJfREVCVUcKLSAgICBrZERlYnVnKCA2MDM1
ICkgPDwgImFkZGVkIHRoZSBmb2xsb3dpbmcgY2hpbGRzIHRvICIgPDwgY3VycmVudC0+bm9kZU5h
bWUoKS5zdHJpbmcoKSA8PCBlbmRsOwotICAgIE5vZGVJbXBsICpjaGlsZCA9IGN1cnJlbnQtPmZp
cnN0Q2hpbGQoKTsKLSAgICB3aGlsZShjaGlsZCAhPSAwKQotICAgIHsKLSAgICAgICAga2REZWJ1
ZyggNjAzNSApIDw8ICIgICAgIiA8PCBjaGlsZC0+bm9kZU5hbWUoKS5zdHJpbmcoKSA8PCBlbmRs
OwotICAgICAgICBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpOwotICAgIH0KLSNlbmRpZgor
ICAgICAgICAKICAgICBIVE1MU3RhY2tFbGVtKiBvbGRFbGVtID0gYmxvY2tTdGFjazsKLSAgICBw
b3BCbG9jayh0LT5pZC1JRF9DTE9TRV9UQUcpOwotICAgIGlmIChvbGRFbGVtID09IGJsb2NrU3Rh
Y2sgJiYgdC0+aWQgPT0gSURfUCtJRF9DTE9TRV9UQUcpIHsKKyAgICBwb3BCbG9jayh0LT50YWdO
YW1lKTsKKyAgICBpZiAob2xkRWxlbSA9PSBibG9ja1N0YWNrICYmIHQtPnRhZ05hbWUgPT0gSFRN
TE5hbWVzOjpwKCkpIHsKICAgICAgICAgLy8gV2UgZW5jb3VudGVyZWQgYSBzdHJheSA8L3A+LiAg
QW1hemluZ2x5IEdlY2tvLCBXaW5JRSwgYW5kIE1hY0lFIGFsbCB0cmVhdAogICAgICAgICAvLyB0
aGlzIGFzIGEgdmFsaWQgYnJlYWssIGkuZS4sIDxwPjwvcD4uICBTbyBnbyBhaGVhZCBhbmQgbWFr
ZSB0aGUgZW1wdHkKICAgICAgICAgLy8gcGFyYWdyYXBoLgotICAgICAgICB0LT5pZC09SURfQ0xP
U0VfVEFHOworICAgICAgICB0LT5iZWdpblRhZyA9IHRydWU7CiAgICAgICAgIHBhcnNlVG9rZW4o
dCk7Ci0gICAgICAgIHBvcEJsb2NrKElEX1ApOworICAgICAgICBwb3BCbG9jayh0LT50YWdOYW1l
KTsKICAgICB9CiAjaWZkZWYgUEFSU0VSX0RFQlVHCiAgICAga2REZWJ1ZyggNjAzNSApIDw8ICJj
bG9zZVRhZyAtLT4gY3VycmVudCA9ICIgPDwgY3VycmVudC0+bm9kZU5hbWUoKS5zdHJpbmcoKSA8
PCBlbmRsOwogI2VuZGlmCiB9CiAKLWJvb2wgS0hUTUxQYXJzZXI6OmlzSGVhZGVyVGFnKGludCBf
aWQpCitib29sIEtIVE1MUGFyc2VyOjppc0hlYWRlclRhZyhjb25zdCBBdG9taWNTdHJpbmcmIHRh
Z05hbWUpCiB7Ci0gICAgc3dpdGNoIChfaWQpIHsKLSAgICAgICAgY2FzZSBJRF9IMToKLSAgICAg
ICAgY2FzZSBJRF9IMjoKLSAgICAgICAgY2FzZSBJRF9IMzoKLSAgICAgICAgY2FzZSBJRF9INDoK
LSAgICAgICAgY2FzZSBJRF9INToKLSAgICAgICAgY2FzZSBJRF9INjoKLSAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KKyAgICByZXR1cm4gdGFnTmFtZSA9PSBIVE1MTmFtZXM6OmgxKCkgfHwKKyAgICAgICAg
ICAgdGFnTmFtZSA9PSBIVE1MTmFtZXM6OmgyKCkgfHwKKyAgICAgICAgICAgdGFnTmFtZSA9PSBI
VE1MTmFtZXM6OmgzKCkgfHwKKyAgICAgICAgICAgdGFnTmFtZSA9PSBIVE1MTmFtZXM6Omg0KCkg
fHwKKyAgICAgICAgICAgdGFnTmFtZSA9PSBIVE1MTmFtZXM6Omg1KCkgfHwKKyAgICAgICAgICAg
dGFnTmFtZSA9PSBIVE1MTmFtZXM6Omg2KCk7CiB9CiAKIHZvaWQgS0hUTUxQYXJzZXI6OnBvcE5l
c3RlZEhlYWRlclRhZygpCkBAIC0xMDM3LDE5ICs4NDQsMjggQEAgdm9pZCBLSFRNTFBhcnNlcjo6
cG9wTmVzdGVkSGVhZGVyVGFnKCkKICAgICAvLyBUaGlzIGZ1bmN0aW9uIG9ubHkgY2FyZXMgYWJv
dXQgY2hlY2tpbmcgZm9yIG5lc3RlZCBoZWFkZXJzIHRoYXQgaGF2ZSBvbmx5IGlubGluZXMgaW4g
YmV0d2VlbiB0aGVtLgogICAgIE5vZGVJbXBsKiBjdXJyTm9kZSA9IGN1cnJlbnQ7CiAgICAgZm9y
IChIVE1MU3RhY2tFbGVtKiBjdXJyID0gYmxvY2tTdGFjazsgY3VycjsgY3VyciA9IGN1cnItPm5l
eHQpIHsKLSAgICAgICAgaWYgKGlzSGVhZGVyVGFnKGN1cnItPmlkKSkgewotICAgICAgICAgICAg
cG9wQmxvY2soY3Vyci0+aWQpOworICAgICAgICBpZiAoaXNIZWFkZXJUYWcoY3Vyci0+dGFnTmFt
ZSkpIHsKKyAgICAgICAgICAgIHBvcEJsb2NrKGN1cnItPnRhZ05hbWUpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGlmIChjdXJyTm9kZSAmJiAhY3Vyck5vZGUtPmlz
SW5saW5lKCkpCisgICAgICAgIGlmIChjdXJyTm9kZSAmJiAhaXNJbmxpbmUoY3Vyck5vZGUpKQog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBjdXJyTm9kZSA9IGN1cnItPm5vZGU7CiAgICAg
fQogfQogCi1ib29sIEtIVE1MUGFyc2VyOjppc1Jlc2lkdWFsU3R5bGVUYWcoaW50IF9pZCkKK2Jv
b2wgS0hUTUxQYXJzZXI6OmlzSW5saW5lKERPTTo6Tm9kZUltcGwqIG5vZGUpIGNvbnN0CiB7Ci0g
ICAgc3dpdGNoIChfaWQpIHsKKyAgICBpZiAobm9kZS0+aXNUZXh0Tm9kZSgpKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICBpZiAobm9kZS0+aXNIVE1MRWxlbWVudCgpKSB7CisgICAgICAgIC8v
SFRNTEVsZW1lbnRJbXBsKiBlID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsKj4obm9kZSk7
CisgICAgICAgIHJldHVybiBmYWxzZTsgLy8gRklYTUU6IFNob3VsZCBiZSBwb3NzaWJsZSB0byBp
bXBsZW1lbnQgdGhpcyBpbiB0ZXJtcyBvZiBwcmlvcml0eSBsZXZlbHMuCisgICAgfQorICAgIHJl
dHVybiBmYWxzZTsKKworLyoKKyAgICBzd2l0Y2goaWQoKSkgewogICAgICAgICBjYXNlIElEX0E6
CiAgICAgICAgIGNhc2UgSURfRk9OVDoKICAgICAgICAgY2FzZSBJRF9UVDoKQEAgLTEwNjAsNiAr
ODc2LDggQEAgYm9vbCBLSFRNTFBhcnNlcjo6aXNSZXNpZHVhbFN0eWxlVGFnKGludAogICAgICAg
ICBjYXNlIElEX1NUUklLRToKICAgICAgICAgY2FzZSBJRF9CSUc6CiAgICAgICAgIGNhc2UgSURf
U01BTEw6CisgICAgCisgICAgICAgICAgICAvLyAlcGhyYXNlCiAgICAgICAgIGNhc2UgSURfRU06
CiAgICAgICAgIGNhc2UgSURfU1RST05HOgogICAgICAgICBjYXNlIElEX0RGTjoKQEAgLTEwNjcs
NDAgKzg4NSw0NCBAQCBib29sIEtIVE1MUGFyc2VyOjppc1Jlc2lkdWFsU3R5bGVUYWcoaW50CiAg
ICAgICAgIGNhc2UgSURfU0FNUDoKICAgICAgICAgY2FzZSBJRF9LQkQ6CiAgICAgICAgIGNhc2Ug
SURfVkFSOgorICAgICAgICBjYXNlIElEX0NJVEU6CisgICAgICAgIGNhc2UgSURfQUJCUjoKKyAg
ICAgICAgY2FzZSBJRF9BQ1JPTllNOgorICAgIAorICAgICAgICAgICAgLy8gJXNwZWNpYWwKKyAg
ICAgICAgY2FzZSBJRF9TVUI6CisgICAgICAgIGNhc2UgSURfU1VQOgorICAgICAgICBjYXNlIElE
X1NQQU46CisgICAgICAgIGNhc2UgSURfTk9CUjoKKyAgICAgICAgY2FzZSBJRF9XQlI6CisgICAg
ICAgIAorICAgICAgICBjYXNlIElEX1RFWFQ6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgICAgIAogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KKyAgICB9Ki8KK30KKworYm9vbCBLSFRNTFBhcnNlcjo6aXNSZXNpZHVhbFN0eWxlVGFn
KGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSkKK3sKKyAgICByZXR1cm4gdGFnTmFtZSA9PSBI
VE1MTmFtZXM6OmEoKSB8fCB0YWdOYW1lID09IEhUTUxOYW1lczo6Zm9udCgpIHx8IHRhZ05hbWUg
PT0gSFRNTE5hbWVzOjp0dCgpIHx8CisgICAgICAgICAgIHRhZ05hbWUgPT0gSFRNTE5hbWVzOjp1
KCkgfHwgdGFnTmFtZSA9PSBIVE1MTmFtZXM6OmIoKSB8fCB0YWdOYW1lID09IEhUTUxOYW1lczo6
aSgpIHx8CisgICAgICAgICAgIHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpzKCkgfHwgdGFnTmFtZSA9
PSBIVE1MTmFtZXM6OnN0cmlrZSgpIHx8IHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpiaWcoKSB8fAor
ICAgICAgICAgICB0YWdOYW1lID09IEhUTUxOYW1lczo6c21hbGwoKSB8fCB0YWdOYW1lID09IEhU
TUxOYW1lczo6ZW0oKSB8fCB0YWdOYW1lID09IEhUTUxOYW1lczo6c3Ryb25nKCkgfHwKKyAgICAg
ICAgICAgdGFnTmFtZSA9PSBIVE1MTmFtZXM6OmRmbigpIHx8IHRhZ05hbWUgPT0gSFRNTE5hbWVz
Ojpjb2RlKCkgfHwgdGFnTmFtZSA9PSBIVE1MTmFtZXM6OnNhbXAoKSB8fAorICAgICAgICAgICB0
YWdOYW1lID09IEhUTUxOYW1lczo6a2JkKCkgfHwgdGFnTmFtZSA9PSBIVE1MTmFtZXM6OnZhcigp
OwogfQogCi1ib29sIEtIVE1MUGFyc2VyOjppc0FmZmVjdGVkQnlSZXNpZHVhbFN0eWxlKGludCBf
aWQpCitib29sIEtIVE1MUGFyc2VyOjppc0FmZmVjdGVkQnlSZXNpZHVhbFN0eWxlKGNvbnN0IEF0
b21pY1N0cmluZyYgdGFnTmFtZSkKIHsKLSAgICBpZiAoaXNSZXNpZHVhbFN0eWxlVGFnKF9pZCkp
CisgICAgaWYgKGlzUmVzaWR1YWxTdHlsZVRhZyh0YWdOYW1lKSB8fCBpc0hlYWRlclRhZyh0YWdO
YW1lKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgCi0gICAgc3dpdGNoIChfaWQpIHsKLSAg
ICAgICAgY2FzZSBJRF9QOgotICAgICAgICBjYXNlIElEX0RJVjoKLSAgICAgICAgY2FzZSBJRF9C
TE9DS1FVT1RFOgotICAgICAgICBjYXNlIElEX0FERFJFU1M6Ci0gICAgICAgIGNhc2UgSURfSDE6
Ci0gICAgICAgIGNhc2UgSURfSDI6Ci0gICAgICAgIGNhc2UgSURfSDM6Ci0gICAgICAgIGNhc2Ug
SURfSDQ6Ci0gICAgICAgIGNhc2UgSURfSDU6Ci0gICAgICAgIGNhc2UgSURfSDY6Ci0gICAgICAg
IGNhc2UgSURfQ0VOVEVSOgotICAgICAgICBjYXNlIElEX1VMOgotICAgICAgICBjYXNlIElEX09M
OgotICAgICAgICBjYXNlIElEX0xJOgotICAgICAgICBjYXNlIElEX0RMOgotICAgICAgICBjYXNl
IElEX0RUOgotICAgICAgICBjYXNlIElEX0REOgotICAgICAgICBjYXNlIElEX1BSRToKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KKyAgICByZXR1cm4gdGFnTmFtZSA9PSBIVE1MTmFtZXM6OnAoKSB8fCB0
YWdOYW1lID09IEhUTUxOYW1lczo6ZGl2KCkgfHwgdGFnTmFtZSA9PSBIVE1MTmFtZXM6OmJsb2Nr
cXVvdGUoKSB8fAorICAgICAgICAgICB0YWdOYW1lID09IEhUTUxOYW1lczo6YWRkcmVzcygpIHx8
IHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpjZW50ZXIoKSB8fCB0YWdOYW1lID09IEhUTUxOYW1lczo6
dWwoKSB8fAorICAgICAgICAgICB0YWdOYW1lID09IEhUTUxOYW1lczo6b2woKSB8fCB0YWdOYW1l
ID09IEhUTUxOYW1lczo6bGkoKSB8fCB0YWdOYW1lID09IEhUTUxOYW1lczo6ZGwoKSB8fAorICAg
ICAgICAgICB0YWdOYW1lID09IEhUTUxOYW1lczo6ZHQoKSB8fCB0YWdOYW1lID09IEhUTUxOYW1l
czo6ZGQoKSB8fCB0YWdOYW1lID09IEhUTUxOYW1lczo6cHJlKCk7CiB9CiAKIHZvaWQgS0hUTUxQ
YXJzZXI6OmhhbmRsZVJlc2lkdWFsU3R5bGVDbG9zZVRhZ0Fjcm9zc0Jsb2NrcyhIVE1MU3RhY2tF
bGVtKiBlbGVtKQpAQCAtMTEyNSw3ICs5NDcsNyBAQCB2b2lkIEtIVE1MUGFyc2VyOjpoYW5kbGVS
ZXNpZHVhbFN0eWxlQ2xvCiAgICAgICAgIGN1cnIgPSBjdXJyLT5uZXh0OwogICAgIH0KIAotICAg
IGlmICghY3VyciB8fCAhbWF4RWxlbSB8fCAhaXNBZmZlY3RlZEJ5UmVzaWR1YWxTdHlsZShtYXhF
bGVtLT5pZCkpIHJldHVybjsKKyAgICBpZiAoIWN1cnIgfHwgIW1heEVsZW0gfHwgIWlzQWZmZWN0
ZWRCeVJlc2lkdWFsU3R5bGUobWF4RWxlbS0+dGFnTmFtZSkpIHJldHVybjsKIAogICAgIE5vZGVJ
bXBsKiByZXNpZHVhbEVsZW0gPSBwcmV2LT5ub2RlOwogICAgIE5vZGVJbXBsKiBibG9ja0VsZW0g
PSBwcmV2TWF4RWxlbSA/IHByZXZNYXhFbGVtLT5ub2RlIDogY3VycmVudDsKQEAgLTExNDcsNyAr
OTY5LDcgQEAgdm9pZCBLSFRNTFBhcnNlcjo6aGFuZGxlUmVzaWR1YWxTdHlsZUNsbwogICAgICAg
ICBIVE1MU3RhY2tFbGVtKiBwcmV2RWxlbSA9IG1heEVsZW07CiAgICAgICAgIHdoaWxlIChjdXJy
RWxlbSAhPSBlbGVtKSB7CiAgICAgICAgICAgICBIVE1MU3RhY2tFbGVtKiBuZXh0RWxlbSA9IGN1
cnJFbGVtLT5uZXh0OwotICAgICAgICAgICAgaWYgKCFpc1Jlc2lkdWFsU3R5bGVUYWcoY3VyckVs
ZW0tPmlkKSkgeworICAgICAgICAgICAgaWYgKCFpc1Jlc2lkdWFsU3R5bGVUYWcoY3VyckVsZW0t
PnRhZ05hbWUpKSB7CiAgICAgICAgICAgICAgICAgcHJldkVsZW0tPm5leHQgPSBuZXh0RWxlbTsK
ICAgICAgICAgICAgICAgICBwcmV2RWxlbS0+bm9kZSA9IGN1cnJFbGVtLT5ub2RlOwogICAgICAg
ICAgICAgICAgIGRlbGV0ZSBjdXJyRWxlbTsKQEAgLTExNjksNyArOTkxLDcgQEAgdm9pZCBLSFRN
TFBhcnNlcjo6aGFuZGxlUmVzaWR1YWxTdHlsZUNsbwogICAgICAgICBOb2RlSW1wbCogY3Vyck5v
ZGUgPSAwOwogICAgICAgICBjdXJyRWxlbSA9IG1heEVsZW07CiAgICAgICAgIHdoaWxlIChjdXJy
RWxlbS0+bm9kZSAhPSByZXNpZHVhbEVsZW0pIHsKLSAgICAgICAgICAgIGlmIChpc1Jlc2lkdWFs
U3R5bGVUYWcoY3VyckVsZW0tPm5vZGUtPmlkKCkpKSB7CisgICAgICAgICAgICBpZiAoaXNSZXNp
ZHVhbFN0eWxlVGFnKGN1cnJFbGVtLT5ub2RlLT5sb2NhbE5hbWUoKSkpIHsKICAgICAgICAgICAg
ICAgICAvLyBDcmVhdGUgYSBjbG9uZSBvZiB0aGlzIGVsZW1lbnQuCiAgICAgICAgICAgICAgICAg
Y3Vyck5vZGUgPSBjdXJyRWxlbS0+bm9kZS0+Y2xvbmVOb2RlKGZhbHNlKTsKIApAQCAtMTI0NSw3
ICsxMDY3LDcgQEAgdm9pZCBLSFRNTFBhcnNlcjo6aGFuZGxlUmVzaWR1YWxTdHlsZUNsbwogICAg
ICAgICAvLyBXZSB3aWxsIGFjdHVhbGx5IHNjaGVkdWxlIHRoaXMgdGFnIGZvciByZW9wZW5pbmcK
ICAgICAgICAgLy8gYWZ0ZXIgd2UgY29tcGxldGUgdGhlIGNsb3NlIG9mIHRoaXMgZW50aXJlIGJs
b2NrLgogICAgICAgICBOb2RlSW1wbCogY3Vyck5vZGUgPSBjdXJyZW50OwotICAgICAgICBpZiAo
aXNSZXNpZHVhbFN0eWxlVGFnKGN1cnItPmlkKSkgeworICAgICAgICBpZiAoaXNSZXNpZHVhbFN0
eWxlVGFnKGN1cnItPnRhZ05hbWUpKSB7CiAgICAgICAgICAgICAvLyBXZSd2ZSBvdmVybG9hZGVk
IHRoZSB1c2Ugb2Ygc3RhY2sgZWxlbWVudHMgYW5kIGFyZSBqdXN0IHJldXNpbmcgdGhlCiAgICAg
ICAgICAgICAvLyBzdHJ1Y3Qgd2l0aCBhIHNsaWdodGx5IGRpZmZlcmVudCBtZWFuaW5nIHRvIHRo
ZSB2YXJpYWJsZXMuICBJbnN0ZWFkIG9mIGNoYWluaW5nCiAgICAgICAgICAgICAvLyBmcm9tIGlu
bmVybW9zdCB0byBvdXRlcm1vc3QsIHdlIGJ1aWxkIHVwIGEgbGlzdCBvZiBhbGwgdGhlIHRhZ3Mg
d2UgbmVlZCB0byByZW9wZW4KQEAgLTEyODYsNyArMTEwOCw3IEBAIHZvaWQgS0hUTUxQYXJzZXI6
OnJlb3BlblJlc2lkdWFsU3R5bGVUYWcKICAgICAgICAgLy8gRklYTUU6IElzIGl0IHJlYWxseSBP
SyB0byBpZ25vcmUgdGhlIGV4Y2VwdGlvbnMgaGVyZT8KIAogICAgICAgICAvLyBOb3cgcHVzaCBh
IG5ldyBzdGFjayBlbGVtZW50IGZvciB0aGlzIG5vZGUgd2UganVzdCBjcmVhdGVkLgotICAgICAg
ICBwdXNoQmxvY2soZWxlbS0+aWQsIGVsZW0tPmxldmVsKTsKKyAgICAgICAgcHVzaEJsb2NrKGVs
ZW0tPnRhZ05hbWUsIGVsZW0tPmxldmVsKTsKIAogICAgICAgICAvLyBTZXQgb3VyIHN0cmF5VGFi
bGVDb250ZW50IGJvb2xlYW4gaWYgbmVlZGVkLCBzbyB0aGF0IHRoZSByZW9wZW5lZCB0YWcgYWxz
byBrbm93cwogICAgICAgICAvLyB0aGF0IGl0IGlzIGluc2lkZSBhIG1hbGZvcm1lZCB0YWJsZS4K
QEAgLTEzMDcsMzUgKzExMjksMjEgQEAgdm9pZCBLSFRNTFBhcnNlcjo6cmVvcGVuUmVzaWR1YWxT
dHlsZVRhZwogICAgIH0KIH0KIAotdm9pZCBLSFRNTFBhcnNlcjo6cHVzaEJsb2NrKGludCBfaWQs
IGludCBfbGV2ZWwpCit2b2lkIEtIVE1MUGFyc2VyOjpwdXNoQmxvY2soY29uc3QgQXRvbWljU3Ry
aW5nJiB0YWdOYW1lLCBpbnQgX2xldmVsKQogewotICAgIEhUTUxTdGFja0VsZW0gKkVsZW0gPSBu
ZXcgSFRNTFN0YWNrRWxlbShfaWQsIF9sZXZlbCwgY3VycmVudCwgYmxvY2tTdGFjayk7Ci0KKyAg
ICBIVE1MU3RhY2tFbGVtICpFbGVtID0gbmV3IEhUTUxTdGFja0VsZW0odGFnTmFtZSwgX2xldmVs
LCBjdXJyZW50LCBibG9ja1N0YWNrKTsKICAgICBibG9ja1N0YWNrID0gRWxlbTsKLSAgICBhZGRG
b3JiaWRkZW4oX2lkLCBmb3JiaWRkZW5UYWcpOwogfQogCi12b2lkIEtIVE1MUGFyc2VyOjpwb3BC
bG9jayggaW50IF9pZCApCit2b2lkIEtIVE1MUGFyc2VyOjpwb3BCbG9jayhjb25zdCBBdG9taWNT
dHJpbmcmIF90YWdOYW1lKQogewogICAgIEhUTUxTdGFja0VsZW0gKkVsZW0gPSBibG9ja1N0YWNr
OwogICAgIAogICAgIGludCBtYXhMZXZlbCA9IDA7CiAKLSNpZmRlZiBQQVJTRVJfREVCVUcKLSAg
ICBrZERlYnVnKCA2MDM1ICkgPDwgInBvcEJsb2NrKCIgPDwgZ2V0VGFnTmFtZShfaWQpLnN0cmlu
ZygpIDw8ICIpIiA8PCBlbmRsOwotICAgIHdoaWxlKEVsZW0pIHsKLSAgICAgICAga2REZWJ1Zygg
NjAzNSkgPDwgIiAgID4gIiA8PCBnZXRUYWdOYW1lKEVsZW0tPmlkKS5zdHJpbmcoKSA8PCBlbmRs
OwotICAgICAgICBFbGVtID0gRWxlbS0+bmV4dDsKLSAgICB9Ci0gICAgRWxlbSA9IGJsb2NrU3Rh
Y2s7Ci0jZW5kaWYKLQotICAgIHdoaWxlKCBFbGVtICYmIChFbGVtLT5pZCAhPSBfaWQpKQotICAg
IHsKKyAgICB3aGlsZSAoRWxlbSAmJiAoRWxlbS0+dGFnTmFtZSAhPSBfdGFnTmFtZSkpIHsKICAg
ICAgICAgaWYgKG1heExldmVsIDwgRWxlbS0+bGV2ZWwpCi0gICAgICAgIHsKICAgICAgICAgICAg
IG1heExldmVsID0gRWxlbS0+bGV2ZWw7Ci0gICAgICAgIH0KICAgICAgICAgRWxlbSA9IEVsZW0t
Pm5leHQ7CiAgICAgfQogCkBAIC0xMzQ1LDIwICsxMTUzLDE4IEBAIHZvaWQgS0hUTUxQYXJzZXI6
OnBvcEJsb2NrKCBpbnQgX2lkICkKICAgICBpZiAobWF4TGV2ZWwgPiBFbGVtLT5sZXZlbCkgewog
ICAgICAgICAvLyBXZSBkaWRuJ3QgbWF0Y2ggYmVjYXVzZSB0aGUgdGFnIGlzIGluIGEgZGlmZmVy
ZW50IHNjb3BlLCBlLmcuLAogICAgICAgICAvLyA8Yj48cD5Gb288L2I+LiAgVHJ5IHRvIGNvcnJl
Y3QgdGhlIHByb2JsZW0uCi0gICAgICAgIGlmICghaXNSZXNpZHVhbFN0eWxlVGFnKF9pZCkpCisg
ICAgICAgIGlmICghaXNSZXNpZHVhbFN0eWxlVGFnKF90YWdOYW1lKSkKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgcmV0dXJuIGhhbmRsZVJlc2lkdWFsU3R5bGVDbG9zZVRhZ0Fjcm9zc0Js
b2NrcyhFbGVtKTsKICAgICB9CiAKLSAgICBib29sIGlzQWZmZWN0ZWRCeVN0eWxlID0gaXNBZmZl
Y3RlZEJ5UmVzaWR1YWxTdHlsZShFbGVtLT5pZCk7CisgICAgYm9vbCBpc0FmZmVjdGVkQnlTdHls
ZSA9IGlzQWZmZWN0ZWRCeVJlc2lkdWFsU3R5bGUoRWxlbS0+dGFnTmFtZSk7CiAgICAgSFRNTFN0
YWNrRWxlbSogcmVzaWR1YWxTdHlsZVN0YWNrID0gMDsKICAgICBOb2RlSW1wbCogbWFsZm9ybWVk
VGFibGVQYXJlbnQgPSAwOwogICAgIAogICAgIEVsZW0gPSBibG9ja1N0YWNrOwotICAgIHdoaWxl
IChFbGVtKQotICAgIHsKLSAgICAgICAgaWYgKEVsZW0tPmlkID09IF9pZCkKLSAgICAgICAgewor
ICAgIHdoaWxlIChFbGVtKSB7CisgICAgICAgIGlmIChFbGVtLT50YWdOYW1lID09IF90YWdOYW1l
KSB7CiAgICAgICAgICAgICBpbnQgc3RyYXlUYWJsZSA9IGluU3RyYXlUYWJsZUNvbnRlbnQ7CiAg
ICAgICAgICAgICBwb3BPbmVCbG9jaygpOwogICAgICAgICAgICAgRWxlbSA9IDA7CkBAIC0xMzY5
LDE0ICsxMTc1LDEzIEBAIHZvaWQgS0hUTUxQYXJzZXI6OnBvcEJsb2NrKCBpbnQgX2lkICkKICAg
ICAgICAgICAgIC8vIG11c3QgYWxzbyBrbm93IHRoYXQgaXQgaXMgdGhlIHJvb3Qgb2YgbWFsZm9y
bWVkIGNvbnRlbnQgaW5zaWRlIGEgPHRib2R5Pi88dHI+LgogICAgICAgICAgICAgaWYgKHN0cmF5
VGFibGUgJiYgKGluU3RyYXlUYWJsZUNvbnRlbnQgPCBzdHJheVRhYmxlKSAmJiByZXNpZHVhbFN0
eWxlU3RhY2spIHsKICAgICAgICAgICAgICAgICBOb2RlSW1wbCogY3VyciA9IGN1cnJlbnQ7Ci0g
ICAgICAgICAgICAgICAgd2hpbGUgKGN1cnIgJiYgY3Vyci0+aWQoKSAhPSBJRF9UQUJMRSkKKyAg
ICAgICAgICAgICAgICB3aGlsZSAoY3VyciAmJiAhY3Vyci0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
OnRhYmxlKCkpKQogICAgICAgICAgICAgICAgICAgICBjdXJyID0gY3Vyci0+cGFyZW50Tm9kZSgp
OwogICAgICAgICAgICAgICAgIG1hbGZvcm1lZFRhYmxlUGFyZW50ID0gY3VyciA/IGN1cnItPnBh
cmVudE5vZGUoKSA6IDA7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgZWxzZQot
ICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoRWxlbS0+aWQgPT0gSURfRk9STSAmJiBmb3JtKQor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmIChmb3JtICYmIEVsZW0tPnRhZ05hbWUgPT0g
SFRNTE5hbWVzOjpmb3JtKCkpCiAgICAgICAgICAgICAgICAgLy8gQSA8Zm9ybT4gaXMgYmVpbmcg
Y2xvc2VkIHByZW1hdHVyZWx5IChhbmQgdGhpcyBpcwogICAgICAgICAgICAgICAgIC8vIG1hbGZv
cm1lZCBIVE1MKS4gIFNldCBhbiBhdHRyaWJ1dGUgb24gdGhlIGZvcm0gdG8gY2xlYXIgb3V0IGl0
cwogICAgICAgICAgICAgICAgIC8vIGJvdHRvbSBtYXJnaW4uCkBAIC0xMzg1LDcgKzExOTAsNyBA
QCB2b2lkIEtIVE1MUGFyc2VyOjpwb3BCbG9jayggaW50IF9pZCApCiAgICAgICAgICAgICAvLyBT
Y2hlZHVsZSB0aGlzIHRhZyBmb3IgcmVvcGVuaW5nCiAgICAgICAgICAgICAvLyBhZnRlciB3ZSBj
b21wbGV0ZSB0aGUgY2xvc2Ugb2YgdGhpcyBlbnRpcmUgYmxvY2suCiAgICAgICAgICAgICBOb2Rl
SW1wbCogY3Vyck5vZGUgPSBjdXJyZW50OwotICAgICAgICAgICAgaWYgKGlzQWZmZWN0ZWRCeVN0
eWxlICYmIGlzUmVzaWR1YWxTdHlsZVRhZyhFbGVtLT5pZCkpIHsKKyAgICAgICAgICAgIGlmIChp
c0FmZmVjdGVkQnlTdHlsZSAmJiBpc1Jlc2lkdWFsU3R5bGVUYWcoRWxlbS0+dGFnTmFtZSkpIHsK
ICAgICAgICAgICAgICAgICAvLyBXZSd2ZSBvdmVybG9hZGVkIHRoZSB1c2Ugb2Ygc3RhY2sgZWxl
bWVudHMgYW5kIGFyZSBqdXN0IHJldXNpbmcgdGhlCiAgICAgICAgICAgICAgICAgLy8gc3RydWN0
IHdpdGggYSBzbGlnaHRseSBkaWZmZXJlbnQgbWVhbmluZyB0byB0aGUgdmFyaWFibGVzLiAgSW5z
dGVhZCBvZiBjaGFpbmluZwogICAgICAgICAgICAgICAgIC8vIGZyb20gaW5uZXJtb3N0IHRvIG91
dGVybW9zdCwgd2UgYnVpbGQgdXAgYSBsaXN0IG9mIGFsbCB0aGUgdGFncyB3ZSBuZWVkIHRvIHJl
b3BlbgpAQCAtMTQxMywxNCArMTIxOCw5IEBAIHZvaWQgS0hUTUxQYXJzZXI6OnBvcE9uZUJsb2Nr
KGJvb2wgZGVsQmwKICAgICBIVE1MU3RhY2tFbGVtICpFbGVtID0gYmxvY2tTdGFjazsKIAogICAg
IC8vIHdlIHNob3VsZCBuZXZlciBnZXQgaGVyZSwgYnV0IHNvbWUgYmFkIGh0bWwgbWlnaHQgY2F1
c2UgaXQuCi0jaWZuZGVmIFBBUlNFUl9ERUJVRwotICAgIGlmKCFFbGVtKSByZXR1cm47Ci0jZWxz
ZQotICAgIGtkRGVidWcoIDYwMzUgKSA8PCAicG9wcGluZyBibG9jazogIiA8PCBnZXRUYWdOYW1l
KEVsZW0tPmlkKS5zdHJpbmcoKSA8PCAiKCIgPDwgRWxlbS0+aWQgPDwgIikiIDw8IGVuZGw7Ci0j
ZW5kaWYKLQotI2lmIFNQRUVEX0RFQlVHIDwgMQotICAgIGlmKChFbGVtLT5ub2RlICE9IGN1cnJl
bnQpKSB7CisgICAgaWYgKCFFbGVtKSByZXR1cm47CisgICAgCisgICAgaWYgKChFbGVtLT5ub2Rl
ICE9IGN1cnJlbnQpKSB7CiAgICAgICAgIGlmIChjdXJyZW50LT5tYWludGFpbnNTdGF0ZSgpICYm
IGRvYygpKXsKICAgICAgICAgICAgIGRvYygpLT5yZWdpc3Rlck1haW50YWluc1N0YXRlKGN1cnJl
bnQpOwogICAgICAgICAgICAgUVN0cmluZ0xpc3QgJnN0YXRlcyA9IGRvYygpLT5yZXN0b3JlU3Rh
dGUoKTsKQEAgLTE0MzEsOSArMTIzMSw2IEBAIHZvaWQgS0hUTUxQYXJzZXI6OnBvcE9uZUJsb2Nr
KGJvb2wgZGVsQmwKICAgICAgICAgLy8gQSBmZXcgZWxlbWVudHMgKDxhcHBsZXQ+LCA8b2JqZWN0
PikgbmVlZCB0byBrbm93IHdoZW4gYWxsIGNoaWxkIGVsZW1lbnRzICg8cGFyYW0+cykgYXJlIGF2
YWlsYWJsZToKICAgICAgICAgY3VycmVudC0+Y2xvc2VSZW5kZXJlcigpOwogICAgIH0KLSNlbmRp
ZgotCi0gICAgcmVtb3ZlRm9yYmlkZGVuKEVsZW0tPmlkLCBmb3JiaWRkZW5UYWcpOwogCiAgICAg
YmxvY2tTdGFjayA9IEVsZW0tPm5leHQ7CiAgICAgc2V0Q3VycmVudChFbGVtLT5ub2RlKTsKQEAg
LTE0NDcsNyArMTI0NCw3IEBAIHZvaWQgS0hUTUxQYXJzZXI6OnBvcE9uZUJsb2NrKGJvb2wgZGVs
QmwKIAogdm9pZCBLSFRNTFBhcnNlcjo6cG9wSW5saW5lQmxvY2tzKCkKIHsKLSAgICB3aGlsZSAo
YmxvY2tTdGFjayAmJiBjdXJyZW50LT5pc0lubGluZSgpKQorICAgIHdoaWxlIChibG9ja1N0YWNr
ICYmIGlzSW5saW5lKGN1cnJlbnQpKQogICAgICAgICBwb3BPbmVCbG9jaygpOwogfQogCkluZGV4
OiBraHRtbC9odG1sL2h0bWxwYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3Qv
V2ViQ29yZS9raHRtbC9odG1sL2h0bWxwYXJzZXIuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4y
NwpkaWZmIC11IC1wIC1yMS4yNyBraHRtbC9odG1sL2h0bWxwYXJzZXIuaAotLS0ga2h0bWwvaHRt
bC9odG1scGFyc2VyLmgJNiBKYW4gMjAwNSAyMToxMzoxNiAtMDAwMAkxLjI3CisrKyBraHRtbC9o
dG1sL2h0bWxwYXJzZXIuaAkyMCBKdW4gMjAwNSAyMDo1NTo0NCAtMDAwMApAQCAtMjksMTkgKzI5
LDkgQEAKICNpZm5kZWYgSFRNTFBBUlNFUl9ICiAjZGVmaW5lIEhUTUxQQVJTRVJfSAogCi0vLyAw
IGFsbAotLy8gMSBkb210cmVlICsgcmVuZGVydHJlZSArIHN0eWxlRm9yRWxlbWVudCwgbm8gbGF5
b3V0aW5nCi0vLyAyIGRvbXRyZWUgb25seQotI2RlZmluZSBTUEVFRF9ERUJVRyAwCi0KLSNpZmRl
ZiBTUEVFRF9ERUJVRwotI2luY2x1ZGUgPHFkYXRldGltZS5oPgotI2VuZGlmCi0KICNpbmNsdWRl
ICJkb20vZG9tX3N0cmluZy5oIgogI2luY2x1ZGUgInhtbC9kb21fbm9kZWltcGwuaCIKICNpbmNs
dWRlICJodG1sL2h0bWxfZG9jdW1lbnRpbXBsLmgiCi0jaW5jbHVkZSAibWlzYy9odG1sdGFncy5o
IgogCiBjbGFzcyBLSFRNTFZpZXc7CiBjbGFzcyBIVE1MU3RhY2tFbGVtOwpAQCAtODksNyArNzks
NyBAQCBwdWJsaWM6CiAgICAgICovCiAgICAgdm9pZCByZXNldCgpOwogCi0gICAgYm9vbCBza2lw
TW9kZSgpIGNvbnN0IHsgcmV0dXJuIChkaXNjYXJkX3VudGlsICE9IDApOyB9CisgICAgYm9vbCBz
a2lwTW9kZSgpIGNvbnN0IHsgcmV0dXJuICFkaXNjYXJkX3VudGlsLmlzTnVsbCgpOyB9CiAgICAg
Ym9vbCBub1NwYWNlcygpIGNvbnN0IHsgcmV0dXJuICFpbkJvZHk7IH0KICAgICBib29sIHNlbGVj
dE1vZGUoKSBjb25zdCB7IHJldHVybiBpblNlbGVjdDsgfQogCkBAIC05Nyw3ICs4Nyw4IEBAIHB1
YmxpYzoKICAgICBET006OkRvY3VtZW50UHRyICpkb2NQdHIoKSBjb25zdCB7IHJldHVybiBkb2N1
bWVudDsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgdm9pZCBzZXRDdXJyZW50KERPTTo6Tm9kZUltcGwg
Km5ld0N1cnJlbnQpOworICAgIHZvaWQgc2V0Q3VycmVudChET006Ok5vZGVJbXBsKiBuZXdDdXJy
ZW50KTsKKyAgICB2b2lkIHNldFNraXBNb2RlKGNvbnN0IERPTTo6UXVhbGlmaWVkTmFtZSYgcU5h
bWUpIHsgZGlzY2FyZF91bnRpbCA9IHFOYW1lLmxvY2FsTmFtZSgpOyB9CiAKICAgICBLSFRNTFZp
ZXcgKkhUTUxXaWRnZXQ7CiAgICAgRE9NOjpEb2N1bWVudFB0ciAqZG9jdW1lbnQ7CkBAIC0xMTAs
MTggKzEwMSwxOCBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBwcm9jZXNzQ2xvc2VUYWcoa2h0bWw6
OlRva2VuICopOwogCiAgICAgYm9vbCBpbnNlcnROb2RlKERPTTo6Tm9kZUltcGwgKm4sIGJvb2wg
ZmxhdCA9IGZhbHNlKTsKKyAgICBib29sIGhhbmRsZUVycm9yKERPTTo6Tm9kZUltcGwqIG4sIGJv
b2wgZmxhdCwgY29uc3QgRE9NOjpBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSwgaW50IHRhZ1ByaW9y
aXR5KTsKKyAgICAKKyAgICAvLyBUaGUgY3VycmVudGx5IGFjdGl2ZSBlbGVtZW50ICh0aGUgb25l
IG5ldyBlbGVtZW50cyB3aWxsIGJlIGFkZGVkIHRvKS4gIENhbiBiZSBhIERvY3VtZW50RnJhZ21l
bnQsIGEgRG9jdW1lbnQgb3IgYW4gRWxlbWVudC4KKyAgICBET006Ok5vZGVJbXBsKiBjdXJyZW50
OwogCi0gICAgLyoKLSAgICAgKiBUaGUgY3VycmVudGx5IGFjdGl2ZSBlbGVtZW50ICh0aGUgb25l
IG5ldyBlbGVtZW50cyB3aWxsIGJlIGFkZGVkIHRvKQotICAgICAqLwotICAgIERPTTo6Tm9kZUlt
cGwgKmN1cnJlbnQ7CiAgICAgYm9vbCBjdXJyZW50SXNSZWZlcmVuY2VkOwogCiAgICAgSFRNTFN0
YWNrRWxlbSAqYmxvY2tTdGFjazsKIAotICAgIHZvaWQgcHVzaEJsb2NrKCBpbnQgX2lkLCBpbnQg
X2xldmVsKTsKLQotICAgIHZvaWQgcG9wQmxvY2soIGludCBfaWQgKTsKKyAgICB2b2lkIHB1c2hC
bG9jayhjb25zdCBET006OkF0b21pY1N0cmluZyYgdGFnTmFtZSwgaW50IF9sZXZlbCk7CisgICAg
dm9pZCBwb3BCbG9jayhjb25zdCBET006OkF0b21pY1N0cmluZyYgdGFnTmFtZSk7CisgICAgdm9p
ZCBwb3BCbG9jayhjb25zdCBET006OlF1YWxpZmllZE5hbWUmIHFOYW1lKSB7IHJldHVybiBwb3BC
bG9jayhxTmFtZS5sb2NhbE5hbWUoKSk7IH0gLy8gQ29udmVuaWVuY2UgZnVuY3Rpb24gZm9yIHJl
YWRhYmlsaXR5LgogICAgIHZvaWQgcG9wT25lQmxvY2soYm9vbCBkZWxCbG9jayA9IHRydWUpOwog
ICAgIHZvaWQgcG9wSW5saW5lQmxvY2tzKCk7CiAKQEAgLTEyOSwxNiArMTIwLDE4IEBAIHByb3Rl
Y3RlZDoKIAogICAgIHZvaWQgY3JlYXRlSGVhZCgpOwogCi0gICAgYm9vbCBpc1Jlc2lkdWFsU3R5
bGVUYWcoaW50IF9pZCk7Ci0gICAgYm9vbCBpc0FmZmVjdGVkQnlSZXNpZHVhbFN0eWxlKGludCBf
aWQpOworICAgIGJvb2wgaXNSZXNpZHVhbFN0eWxlVGFnKGNvbnN0IERPTTo6QXRvbWljU3RyaW5n
JiB0YWdOYW1lKTsKKyAgICBib29sIGlzQWZmZWN0ZWRCeVJlc2lkdWFsU3R5bGUoY29uc3QgRE9N
OjpBdG9taWNTdHJpbmcmIHRhZ05hbWUpOwogICAgIHZvaWQgaGFuZGxlUmVzaWR1YWxTdHlsZUNs
b3NlVGFnQWNyb3NzQmxvY2tzKEhUTUxTdGFja0VsZW0qIGVsZW0pOwogICAgIHZvaWQgcmVvcGVu
UmVzaWR1YWxTdHlsZVRhZ3MoSFRNTFN0YWNrRWxlbSogZWxlbSwgRE9NOjpOb2RlSW1wbCogbWFs
Zm9ybWVkVGFibGVQYXJlbnQpOwogCi0gICAgYm9vbCBhbGxvd05lc3RlZFJlZHVuZGFudFRhZyhp
bnQgX2lkKTsKKyAgICBib29sIGFsbG93TmVzdGVkUmVkdW5kYW50VGFnKGNvbnN0IERPTTo6QXRv
bWljU3RyaW5nJiB0YWdOYW1lKTsKICAgICAKLSAgICBzdGF0aWMgYm9vbCBpc0hlYWRlclRhZyhp
bnQgX2lkKTsKKyAgICBzdGF0aWMgYm9vbCBpc0hlYWRlclRhZyhjb25zdCBET006OkF0b21pY1N0
cmluZyYgdGFnTmFtZSk7CiAgICAgdm9pZCBwb3BOZXN0ZWRIZWFkZXJUYWcoKTsKIAorICAgIGJv
b2wgaXNJbmxpbmUoRE9NOjpOb2RlSW1wbCogbm9kZSkgY29uc3Q7CisgICAgCiAgICAgLyoKICAg
ICAgKiBjdXJyZW50bHkgYWN0aXZlIGZvcm0KICAgICAgKi8KQEAgLTE3NSwxOCArMTY4LDEyIEBA
IHByb3RlY3RlZDoKICAgICAvKgogICAgICAqIHRlbGxzIHRoZSBwYXJzZXIgdG8gZGlzY2FyZCBh
bGwgdGFncywgdW50aWwgaXQgcmVhY2hlcyB0aGUgb25lIHNwZWNpZmllZAogICAgICAqLwotICAg
IGludCBkaXNjYXJkX3VudGlsOworICAgIERPTTo6QXRvbWljU3RyaW5nIGRpc2NhcmRfdW50aWw7
CiAKICAgICBib29sIGhlYWRMb2FkZWQ7CiAgICAgaW50IGluU3RyYXlUYWJsZUNvbnRlbnQ7CiAK
ICAgICBib29sIGluY2x1ZGVzQ29tbWVudHNJbkRPTTsKLSAgICAKLSAgICB1c2hvcnQgZm9yYmlk
ZGVuVGFnW0lEX0xBU1RfVEFHICsgMV07Ci0gICAgCi0jaWYgU1BFRURfREVCVUcgPiAwCi0gICAg
UVRpbWUgcXQ7Ci0jZW5kaWYKIH07CiAKICNlbmRpZiAvLyBIVE1MUEFSU0VSX0gKSW5kZXg6IGto
dG1sL2h0bWwvaHRtbHRva2VuaXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sdG9rZW5pemVyLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS45MwpkaWZmIC11IC1wIC1yMS45MyBraHRtbC9odG1sL2h0bWx0b2tlbml6ZXIuY3BwCi0t
LSBraHRtbC9odG1sL2h0bWx0b2tlbml6ZXIuY3BwCTE3IEp1biAyMDA1IDIwOjAwOjEwIC0wMDAw
CTEuOTMKKysrIGtodG1sL2h0bWwvaHRtbHRva2VuaXplci5jcHAJMjAgSnVuIDIwMDUgMjA6NTU6
NDYgLTAwMDAKQEAgLTM5LDcgKzM5LDYgQEAKICNpbmNsdWRlICJodG1sL2h0bWx0b2tlbml6ZXIu
aCIKICNpbmNsdWRlICJodG1sL2h0bWxfZG9jdW1lbnRpbXBsLmgiCiAjaW5jbHVkZSAiaHRtbC9o
dG1scGFyc2VyLmgiCi0jaW5jbHVkZSAiaHRtbC9kdGQuaCIKIAogI2luY2x1ZGUgIm1pc2MvbG9h
ZGVyLmgiCiAjaW5jbHVkZSAibWlzYy9odG1saGFzaGVzLmgiCkBAIC02Myw3ICs2MiwxMCBAQCB1
c2luZyBET006OkRPTVN0cmluZzsKIHVzaW5nIERPTTo6RE9NU3RyaW5nSW1wbDsKIHVzaW5nIERP
TTo6RG9jdW1lbnRJbXBsOwogdXNpbmcgRE9NOjplbXB0eUF0b207Ci11c2luZyBET006OmVuZFRh
Z1JlcXVpcmVtZW50OwordXNpbmcgRE9NOjpjb21tZW50QXRvbTsKK3VzaW5nIERPTTo6bnVsbEF0
b207Cit1c2luZyBET006OnRleHRBdG9tOwordXNpbmcgRE9NOjpIVE1MTmFtZXM7CiAKIC8vIHR1
cm4gb2ZmIGlubGluaW5nIHRvIHZvaWQgd2FybmluZyB3aXRoIG5ld2VyIGdjYwogI3VuZGVmIF9f
aW5saW5lCkBAIC00NTEsMTAgKzQ1MywxMCBAQCB2b2lkIEhUTUxUb2tlbml6ZXI6OnBhcnNlU3Bl
Y2lhbChUb2tlbml6CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBwcm9jZXNz
TGlzdGluZyhUb2tlbml6ZXJTdHJpbmcoc2NyaXB0Q29kZSwgc2NyaXB0Q29kZVNpemUpKTsKICAg
ICAgICAgICAgICAgICBwcm9jZXNzVG9rZW4oKTsKLSAgICAgICAgICAgICAgICBpZiAoIHN0eWxl
ICkgICAgICAgICB7IGN1cnJUb2tlbi5pZCA9IElEX1NUWUxFICsgSURfQ0xPU0VfVEFHOyB9Ci0g
ICAgICAgICAgICAgICAgZWxzZSBpZiAoIHRleHRhcmVhICkgeyBjdXJyVG9rZW4uaWQgPSBJRF9U
RVhUQVJFQSArIElEX0NMT1NFX1RBRzsgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKCB0aXRs
ZSApIHsgY3VyclRva2VuLmlkID0gSURfVElUTEUgKyBJRF9DTE9TRV9UQUc7IH0KLSAgICAgICAg
ICAgICAgICBlbHNlIGlmICggeG1wICkgIHsgY3VyclRva2VuLmlkID0gSURfWE1QICsgSURfQ0xP
U0VfVEFHOyB9CisgICAgICAgICAgICAgICAgaWYgKCBzdHlsZSApICAgICAgICAgeyBjdXJyVG9r
ZW4udGFnTmFtZSA9IEhUTUxOYW1lczo6c3R5bGUoKS5sb2NhbE5hbWUoKTsgY3VyclRva2VuLmJl
Z2luVGFnID0gZmFsc2U7IH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmICggdGV4dGFyZWEgKSB7
IGN1cnJUb2tlbi50YWdOYW1lID0gSFRNTE5hbWVzOjp0ZXh0YXJlYSgpLmxvY2FsTmFtZSgpOyBj
dXJyVG9rZW4uYmVnaW5UYWcgPSBmYWxzZTsgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKCB0
aXRsZSApIHsgY3VyclRva2VuLnRhZ05hbWUgPSBIVE1MTmFtZXM6OnRpdGxlKCkubG9jYWxOYW1l
KCk7IGN1cnJUb2tlbi5iZWdpblRhZyA9IGZhbHNlOyB9CisgICAgICAgICAgICAgICAgZWxzZSBp
ZiAoIHhtcCApICB7IGN1cnJUb2tlbi50YWdOYW1lID0gSFRNTE5hbWVzOjp4bXAoKS5sb2NhbE5h
bWUoKTsgY3VyclRva2VuLmJlZ2luVGFnID0gZmFsc2U7IH0KICAgICAgICAgICAgICAgICBwcm9j
ZXNzVG9rZW4oKTsKICAgICAgICAgICAgICAgICBzdHlsZSA9IHNjcmlwdCA9IHN0eWxlID0gdGV4
dGFyZWEgPSB0aXRsZSA9IHhtcCA9IGZhbHNlOwogICAgICAgICAgICAgICAgIHRxdW90ZSA9IE5v
UXVvdGU7CkBAIC01MjQsNyArNTI2LDggQEAgdm9pZCBIVE1MVG9rZW5pemVyOjpzY3JpcHRIYW5k
bGVyKCkKICAgICBwcm9jZXNzTGlzdGluZyhUb2tlbml6ZXJTdHJpbmcoc2NyaXB0Q29kZSwgc2Ny
aXB0Q29kZVNpemUpKTsKICAgICBRU3RyaW5nIGV4U2NyaXB0KCBidWZmZXIsIGRlc3QtYnVmZmVy
ICk7CiAgICAgcHJvY2Vzc1Rva2VuKCk7Ci0gICAgY3VyclRva2VuLmlkID0gSURfU0NSSVBUICsg
SURfQ0xPU0VfVEFHOworICAgIGN1cnJUb2tlbi50YWdOYW1lID0gSFRNTE5hbWVzOjpzY3JpcHQo
KS5sb2NhbE5hbWUoKTsKKyAgICBjdXJyVG9rZW4uYmVnaW5UYWcgPSBmYWxzZTsKICAgICBwcm9j
ZXNzVG9rZW4oKTsKIAogICAgIFRva2VuaXplclN0cmluZyAqc2F2ZWRQcmVwZW5kaW5nU3JjID0g
Y3VycmVudFByZXBlbmRpbmdTcmM7CkBAIC03MDEsMTAgKzcwNCwxMSBAQCB2b2lkIEhUTUxUb2tl
bml6ZXI6OnBhcnNlQ29tbWVudChUb2tlbml6CiAgICAgICAgICAgICAgICAgICAgICAgICBjaGVj
a1NjcmlwdEJ1ZmZlcigpOwogICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0Q29kZVsgc2Ny
aXB0Q29kZVNpemUgXSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHRDb2RlWyBz
Y3JpcHRDb2RlU2l6ZSArIDEgXSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjdXJyVG9r
ZW4uaWQgPSBJRF9DT01NRU5UOworICAgICAgICAgICAgICAgICAgICAgICAgY3VyclRva2VuLnRh
Z05hbWUgPSBjb21tZW50QXRvbTsKICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NMaXN0
aW5nKFRva2VuaXplclN0cmluZyhzY3JpcHRDb2RlLCBzY3JpcHRDb2RlU2l6ZSAtIGVuZENoYXJz
Q291bnQpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NUb2tlbigpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgY3VyclRva2VuLmlkID0gSURfQ09NTUVOVCArIElEX0NMT1NFX1RB
RzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJUb2tlbi50YWdOYW1lID0gY29tbWVudEF0
b207CisgICAgICAgICAgICAgICAgICAgICAgICBjdXJyVG9rZW4uYmVnaW5UYWcgPSBmYWxzZTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NUb2tlbigpOwogICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgIHNjcmlwdENvZGVTaXplID0gMDsKQEAgLTEwNDcs
MjYgKzEwNTEsMTYgQEAgdm9pZCBIVE1MVG9rZW5pemVyOjpwYXJzZVRhZyhUb2tlbml6ZXJTdAog
ICAgICAgICAgICAgICAgICAgICAvLyBTdGFydCBUYWcKICAgICAgICAgICAgICAgICAgICAgYmVn
aW5UYWcgPSB0cnVlOwogCi0gICAgICAgICAgICAgICAgLy8gQWNjZXB0IGVtcHR5IHhtbCB0YWdz
IGxpa2UgPGJyLz4uICBXZSB0cmltIG9mZiB0aGUgIi8iIHNvIHRoYXQgd2hlbiB3ZSBjYWxsCi0g
ICAgICAgICAgICAgICAgLy8gZ2V0VGFnSUQsIHdlJ2xsIGxvb2sgdXAgImJyIiBhcyB0aGUgdGFn
IG5hbWUgYW5kIG5vdCAiYnIvIi4KKyAgICAgICAgICAgICAgICAvLyBJZ25vcmUgdGhlIC8gaW4g
ZmFrZSB4bWwgdGFncyBsaWtlIDxici8+LiAgV2UgdHJpbSBvZmYgdGhlICIvIiBzbyB0aGF0IHdl
J2xsIGdldCAiYnIiIGFzIHRoZSB0YWcgbmFtZSBhbmQgbm90ICJici8iLgogICAgICAgICAgICAg
ICAgIGlmKGxlbiA+IDEgJiYgcHRyW2xlbi0xXSA9PSAnLycgKQogICAgICAgICAgICAgICAgICAg
ICBwdHJbLS1sZW5dID0gJ1wwJzsKIAotICAgICAgICAgICAgICAgIC8vIExvb2sgdXAgdGhlIHRh
Z0lEIGZvciB0aGUgc3BlY2lmaWVkIHRhZyBuYW1lIChub3cgdGhhdCB3ZSd2ZSBzaGF2ZWQgb2Zm
IGFueQotICAgICAgICAgICAgICAgIC8vIGludmFsaWQgLyB0aGF0IG1pZ2h0IGhhdmUgZm9sbG93
ZWQgdGhlIG5hbWUpLgotICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHRhZ0lEID0gZ2V0
VGFnSUQocHRyLCBsZW4pOwotICAgICAgICAgICAgICAgIGlmICghdGFnSUQpIHsKLSAgICAgICAg
ICAgICAgICAgICAgRE9NU3RyaW5nIHRhZ05hbWUocHRyKTsKLSAgICAgICAgICAgICAgICAgICAg
RG9jdW1lbnRJbXBsICpkb2MgPSBwYXJzZXItPmRvY1B0cigpLT5kb2N1bWVudCgpOwotICAgICAg
ICAgICAgICAgICAgICBpZiAoZG9jLT5pc1ZhbGlkTmFtZSh0YWdOYW1lKSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHRhZ0lEID0gcGFyc2VyLT5kb2NQdHIoKS0+ZG9jdW1lbnQoKS0+dGFnSWQo
MCwgdGFnTmFtZS5pbXBsZW1lbnRhdGlvbigpLCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIGlmICh0YWdJRCkgewotI2lmZGVmIFRPS0VOX0RFQlVHCi0gICAgICAg
ICAgICAgICAgICAgIFFDU3RyaW5nIHRtcChwdHIsIGxlbisxKTsKLSAgICAgICAgICAgICAgICAg
ICAga2REZWJ1ZyggNjAzNiApIDw8ICJmb3VuZCB0YWcgaWQ9IiA8PCB0YWdJRCA8PCAiOiAiIDw8
IHRtcC5kYXRhKCkgPDwgZW5kbDsKLSNlbmRpZgotICAgICAgICAgICAgICAgICAgICBjdXJyVG9r
ZW4uaWQgPSBiZWdpblRhZyA/IHRhZ0lEIDogdGFnSUQgKyBJRF9DTE9TRV9UQUc7CisgICAgICAg
ICAgICAgICAgLy8gTm93IHRoYXQgd2UndmUgc2hhdmVkIG9mZiBhbnkgaW52YWxpZCAvIHRoYXQg
bWlnaHQgaGF2ZSBmb2xsb3dlZCB0aGUgbmFtZSksIG1ha2UgdGhlIHRhZy4KKyAgICAgICAgICAg
ICAgICBET01TdHJpbmcgdGFnTmFtZShwdHIpOworICAgICAgICAgICAgICAgIERvY3VtZW50SW1w
bCAqZG9jID0gcGFyc2VyLT5kb2NQdHIoKS0+ZG9jdW1lbnQoKTsKKyAgICAgICAgICAgICAgICBp
ZiAoZG9jLT5pc1ZhbGlkTmFtZSh0YWdOYW1lKSkgeworICAgICAgICAgICAgICAgICAgICBjdXJy
VG9rZW4udGFnTmFtZSA9IEF0b21pY1N0cmluZyh0YWdOYW1lLmxvd2VyKCkpOyAvLyBXZSBoYXZl
IHRvIGNhbm9uaWNhbGl6ZSBvbiBsb3dlci1jYXNlLgorICAgICAgICAgICAgICAgICAgICBjdXJy
VG9rZW4uYmVnaW5UYWcgPSBiZWdpblRhZzsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgZGVzdCA9IGJ1ZmZlcjsKICAgICAgICAgICAgICAgICB0YWcgPSBTZWFyY2hBdHRyaWJ1
dGU7CkBAIC0xMTE4LDE1ICsxMTEyLDYgQEAgdm9pZCBIVE1MVG9rZW5pemVyOjpwYXJzZVRhZyhU
b2tlbml6ZXJTdAogICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYXR0ck5hbWUgPSBRU3RyaW5nOjpmcm9tTGF0aW4xKFFDU3RyaW5nKGNC
dWZmZXIsIGNCdWZmZXJQb3MrMSkuZGF0YSgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBhdHRyTmFtZVByZXNlbnQgPSAhYXR0ck5hbWUuaXNFbXB0eSgpOwotCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIGRlbGliZXJhdGUgcXVpcmsgdG8gbWF0Y2ggTW96
aWxsYSBhbmQgT3BlcmEuICBXZSBoYXZlIHRvIGRvIHRoaXMKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBzaW5jZSBzaXRlcyB0aGF0IHVzZSB0aGUgInN0YW5kYXJkcy1jb21wbGlhbnQi
IHBhdGggc29tZXRpbWVzIHNlbmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyA8c2Ny
aXB0IHNyYz0iZm9vLmpzIi8+LiAgQm90aCBNb3ogYW5kIE9wZXJhIHdpbGwgaG9ub3IgdGhpcywg
ZGVzcGl0ZSBpdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJlaW5nIGJvZ3VzIEhU
TUwuICBUaGV5IGRvIG5vdCBob25vciB0aGUgIi8iIGZvciBvdGhlciB0YWdzLiAgVGhpcyBiZWhh
dmlvcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFsc28gZGV2aWF0ZXMgZnJvbSBX
aW5JRSwgYnV0IGluIHRoaXMgY2FzZSB3ZSdsbCBqdXN0IGNvcHkgTW96IGFuZCBPcGVyYS4KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VyclRva2VuLmlkID09IElEX1NDUklQVCAm
JiBjdXJjaGFyID09ICc+JyAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRy
TmFtZSA9PSAiLyIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJUb2tlbi5m
bGF0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgZGVzdCA9IGJ1ZmZlcjsKQEAgLTEzMjgs
MTggKzEzMTMsMTUgQEAgdm9pZCBIVE1MVG9rZW5pemVyOjpwYXJzZVRhZyhUb2tlbml6ZXJTdAog
ICAgICAgICAgICAgaWYgKCpzcmMgIT0gJzwnKQogICAgICAgICAgICAgICAgICsrc3JjOwogCi0g
ICAgICAgICAgICBpZiAoICFjdXJyVG9rZW4uaWQgKSAvL3N0b3AgaWYgdGFnIGlzIHVua25vd24K
KyAgICAgICAgICAgIGlmIChjdXJyVG9rZW4udGFnTmFtZSA9PSBudWxsQXRvbSkgLy9zdG9wIGlm
IHRhZyBpcyB1bmtub3duCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgICAgICB1
aW50IHRhZ0lEID0gY3VyclRva2VuLmlkOworICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5n
JiB0YWdOYW1lID0gY3VyclRva2VuLnRhZ05hbWU7CiAjaWYgZGVmaW5lZChUT0tFTl9ERUJVRykg
JiYgVE9LRU5fREVCVUcgPiAwCiAgICAgICAgICAgICBrZERlYnVnKCA2MDM2ICkgPDwgImFwcGVu
ZGluZyBUYWc6ICIgPDwgdGFnSUQgPDwgZW5kbDsKICNlbmRpZgotICAgICAgICAgICAgYm9vbCBi
ZWdpblRhZyA9ICFjdXJyVG9rZW4uZmxhdCAmJiAodGFnSUQgPD0gSURfQ0xPU0VfVEFHKTsKLQot
ICAgICAgICAgICAgaWYgKHRhZ0lEID4gSURfQ0xPU0VfVEFHKQotICAgICAgICAgICAgICAgIHRh
Z0lEIC09IElEX0NMT1NFX1RBRzsKLSAgICAgICAgICAgIGVsc2UgaWYgKHRhZ0lEID09IElEX1ND
UklQVCkgeworICAgICAgICAgICAgYm9vbCBiZWdpblRhZyA9ICFjdXJyVG9rZW4uZmxhdCAmJiBj
dXJyVG9rZW4uYmVnaW5UYWc7CisgICAgICAgICAgICBpZiAoYmVnaW5UYWcgJiYgY3VyclRva2Vu
LnRhZ05hbWUgPT0gSFRNTE5hbWVzOjpzY3JpcHQoKSkgewogICAgICAgICAgICAgICAgIEF0dHJp
YnV0ZUltcGwqIGEgPSAwOwogICAgICAgICAgICAgICAgIGJvb2wgZm91bmRUeXBlQXR0cmlidXRl
ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgc2NyaXB0U3JjID0gUVN0cmluZzo6bnVsbDsKQEAg
LTE0MTYsNzAgKzEzOTgsNTMgQEAgdm9pZCBIVE1MVG9rZW5pemVyOjpwYXJzZVRhZyhUb2tlbml6
ZXJTdAogCiAgICAgICAgICAgICAvLyB3ZSBoYXZlIHRvIHRha2UgY2FyZSB0byBjbG9zZSB0aGUg
cHJlIGJsb2NrIGluCiAgICAgICAgICAgICAvLyBjYXNlIHdlIGVuY291bnRlciBhbiB1bmFsbG93
ZWQgZWxlbWVudC4uLi4KLSAgICAgICAgICAgIGlmKHByZSAmJiBiZWdpblRhZyAmJiAhRE9NOjpj
aGVja0NoaWxkKElEX1BSRSwgdGFnSUQsICFwYXJzZXItPmRvYygpLT5pbkNvbXBhdE1vZGUoKSkp
IHsKLSAgICAgICAgICAgICAgICBrZERlYnVnKDYwMzYpIDw8ICIgbm90IGFsbG93ZWQgaW4gPHBy
ZT4gIiA8PCAoaW50KXRhZ0lEIDw8IGVuZGw7CisgICAgICAgICAgICBpZiAocHJlICYmIGJlZ2lu
VGFnIC8qIEZJWE1FOiBjaGVja0NoaWxkISEhICYmICFET006OmNoZWNrQ2hpbGQoSURfUFJFLCB0
YWdJRCwgIXBhcnNlci0+ZG9jKCktPmluQ29tcGF0TW9kZSgpKSovKQogICAgICAgICAgICAgICAg
IHByZSA9IGZhbHNlOwotICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBzd2l0Y2goIHRhZ0lE
ICkgewotICAgICAgICAgICAgY2FzZSBJRF9QUkU6CisgICAgICAgICAgICBpZiAodGFnTmFtZSA9
PSBIVE1MTmFtZXM6OnByZSgpKSB7CiAgICAgICAgICAgICAgICAgcHJlUG9zID0gMDsKICAgICAg
ICAgICAgICAgICBwcmUgPSBiZWdpblRhZzsKICAgICAgICAgICAgICAgICBkaXNjYXJkID0gTEZE
aXNjYXJkOyAvLyBEaXNjYXJkIHRoZSBmaXJzdCBMRiBhZnRlciB3ZSBvcGVuIGEgcHJlLgotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBJRF9TQ1JJUFQ6CisgICAgICAg
ICAgICB9IGVsc2UgaWYgKHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpzY3JpcHQoKSkgewogICAgICAg
ICAgICAgICAgIGlmIChiZWdpblRhZykgewogICAgICAgICAgICAgICAgICAgICBzZWFyY2hTdG9w
cGVyID0gc2NyaXB0RW5kOwogICAgICAgICAgICAgICAgICAgICBzZWFyY2hTdG9wcGVyTGVuID0g
ODsKICAgICAgICAgICAgICAgICAgICAgc2NyaXB0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAg
ICAgcGFyc2VTcGVjaWFsKHNyYyk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGVsc2UgaWYgKHRhZ0lEIDw9IElEX0NMT1NFX1RBRykgeyAvLyBIYW5kbGUgPHNjcmlwdCBzcmM9
ImZvbyIvPgotICAgICAgICAgICAgICAgICAgICBzY3JpcHQgPSB0cnVlOwotICAgICAgICAgICAg
ICAgICAgICBzY3JpcHRIYW5kbGVyKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBJRF9TVFlMRToKKyAgICAgICAgICAgIH0gZWxz
ZSBpZiAodGFnTmFtZSA9PSBIVE1MTmFtZXM6OnN0eWxlKCkpIHsKICAgICAgICAgICAgICAgICBp
ZiAoYmVnaW5UYWcpIHsKICAgICAgICAgICAgICAgICAgICAgc2VhcmNoU3RvcHBlciA9IHN0eWxl
RW5kOwogICAgICAgICAgICAgICAgICAgICBzZWFyY2hTdG9wcGVyTGVuID0gNzsKICAgICAgICAg
ICAgICAgICAgICAgc3R5bGUgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBwYXJzZVNwZWNp
YWwoc3JjKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBjYXNlIElEX1RFWFRBUkVBOgorICAgICAgICAgICAgfSBlbHNlIGlmICh0YWdOYW1l
ID09IEhUTUxOYW1lczo6dGV4dGFyZWEoKSkgewogICAgICAgICAgICAgICAgIGlmKGJlZ2luVGFn
KSB7CiAgICAgICAgICAgICAgICAgICAgIHNlYXJjaFN0b3BwZXIgPSB0ZXh0YXJlYUVuZDsKICAg
ICAgICAgICAgICAgICAgICAgc2VhcmNoU3RvcHBlckxlbiA9IDEwOwogICAgICAgICAgICAgICAg
ICAgICB0ZXh0YXJlYSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIHBhcnNlU3BlY2lhbChz
cmMpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIGNhc2UgSURfVElUTEU6Ci0gICAgICAgICAgICAgICAgaWYgKGJlZ2luVGFnKSB7CisgICAg
ICAgICAgICB9IGVsc2UgaWYgKHRhZ05hbWUgPT0gSFRNTE5hbWVzOjp0aXRsZSgpKSB7CisgICAg
ICAgICAgICAgICAgIGlmIChiZWdpblRhZykgewogICAgICAgICAgICAgICAgICAgICBzZWFyY2hT
dG9wcGVyID0gdGl0bGVFbmQ7CiAgICAgICAgICAgICAgICAgICAgIHNlYXJjaFN0b3BwZXJMZW4g
PSA3OwogICAgICAgICAgICAgICAgICAgICB0aXRsZSA9IHRydWU7CiAgICAgICAgICAgICAgICAg
ICAgIHBhcnNlU3BlY2lhbChzcmMpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgSURfWE1QOgorICAgICAgICAgICAgfSBlbHNlIGlm
ICh0YWdOYW1lID09IEhUTUxOYW1lczo6eG1wKCkpIHsKICAgICAgICAgICAgICAgICBpZiAoYmVn
aW5UYWcpIHsKICAgICAgICAgICAgICAgICAgICAgc2VhcmNoU3RvcHBlciA9IHhtcEVuZDsKICAg
ICAgICAgICAgICAgICAgICAgc2VhcmNoU3RvcHBlckxlbiA9IDU7CiAgICAgICAgICAgICAgICAg
ICAgIHhtcCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIHBhcnNlU3BlY2lhbChzcmMpOwog
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNh
c2UgSURfU0VMRUNUOgorICAgICAgICAgICAgfSBlbHNlIGlmICh0YWdOYW1lID09IEhUTUxOYW1l
czo6c2VsZWN0KCkpCiAgICAgICAgICAgICAgICAgc2VsZWN0ID0gYmVnaW5UYWc7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIElEX1BMQUlOVEVYVDoKKyAgICAgICAg
ICAgIGVsc2UgaWYgKHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpwbGFpbnRleHQoKSkKICAgICAgICAg
ICAgICAgICBwbGFpbnRleHQgPSBiZWdpblRhZzsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuOyAvLyBGaW5pc2hlZCBwYXJzaW5nIHRh
ZyEKKyAgICAgICAgICAgIHJldHVybjsgLy8gRmluaXNoZWQgcGFyc2luZyB0YWc7CiAgICAgICAg
IH0KICAgICAgICAgfSAvLyBlbmQgc3dpdGNoCiAgICAgfQpAQCAtMTk4OSwxMCArMTk1NCwxMCBA
QCB2b2lkIEhUTUxUb2tlbml6ZXI6OnByb2Nlc3NUb2tlbigpCiAjZW5kaWYKICAgICAgICAgY3Vy
clRva2VuLnRleHQgPSBuZXcgRE9NU3RyaW5nSW1wbCggYnVmZmVyLCBkZXN0IC0gYnVmZmVyICk7
CiAgICAgICAgIGN1cnJUb2tlbi50ZXh0LT5yZWYoKTsKLSAgICAgICAgaWYgKGN1cnJUb2tlbi5p
ZCAhPSBJRF9DT01NRU5UKQotICAgICAgICAgICAgY3VyclRva2VuLmlkID0gSURfVEVYVDsKKyAg
ICAgICAgaWYgKGN1cnJUb2tlbi50YWdOYW1lICE9IGNvbW1lbnRBdG9tKQorICAgICAgICAgICAg
Y3VyclRva2VuLnRhZ05hbWUgPSB0ZXh0QXRvbTsKICAgICB9Ci0gICAgZWxzZSBpZighY3VyclRv
a2VuLmlkKSB7CisgICAgZWxzZSBpZiAoY3VyclRva2VuLnRhZ05hbWUgPT0gbnVsbEF0b20pIHsK
ICAgICAgICAgY3VyclRva2VuLnJlc2V0KCk7CiAgICAgICAgIGlmIChqc1Byb3h5KQogICAgICAg
ICAgICAganNQcm94eS0+c2V0RXZlbnRIYW5kbGVyTGluZW5vKGxpbmVubytzcmMubGluZUNvdW50
KCkpOwpJbmRleDoga2h0bWwvaHRtbC9odG1sdG9rZW5pemVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sdG9rZW5pemVyLmgsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuMzQKZGlmZiAtdSAtcCAtcjEuMzQga2h0bWwvaHRtbC9odG1sdG9rZW5p
emVyLmgKLS0tIGtodG1sL2h0bWwvaHRtbHRva2VuaXplci5oCTExIE1heSAyMDA1IDA1OjQ5OjM0
IC0wMDAwCTEuMzQKKysrIGtodG1sL2h0bWwvaHRtbHRva2VuaXplci5oCTIwIEp1biAyMDA1IDIw
OjU1OjQ2IC0wMDAwCkBAIC0zNCw4ICszNCw2IEBACiAjaW5jbHVkZSA8cXB0cnF1ZXVlLmg+CiAK
ICNpbmNsdWRlICJtaXNjL2xvYWRlcl9jbGllbnQuaCIKLSNpbmNsdWRlICJtaXNjL2h0bWx0YWdz
LmgiCi0jaW5jbHVkZSAieG1sL2RvbV9zdHJpbmdpbXBsLmgiCiAjaW5jbHVkZSAieG1sL3htbF90
b2tlbml6ZXIuaCIKICNpbmNsdWRlICJodG1sL2h0bWxfZWxlbWVudGltcGwuaCIKICNpbmNsdWRl
ICJ4bWwvZG9tX2RvY2ltcGwuaCIKQEAgLTcwLDIyICs2OCwyNCBAQCBjbGFzcyBUb2tlbgogewog
cHVibGljOgogICAgIFRva2VuKCkgewotICAgICAgICBpZCA9IDA7CiAgICAgICAgIGF0dHJzID0g
MDsKICAgICAgICAgdGV4dCA9IDA7CisgICAgICAgIGJlZ2luVGFnID0gdHJ1ZTsKICAgICAgICAg
ZmxhdCA9IGZhbHNlOwogICAgICAgICAvL3FEZWJ1ZygibmV3IHRva2VuLCBjcmVhdGluZyAlMDhs
eCIsIGF0dHJzKTsKICAgICB9CisKICAgICB+VG9rZW4oKSB7Ci0gICAgICAgIGlmKGF0dHJzKSBh
dHRycy0+ZGVyZWYoKTsKLSAgICAgICAgaWYodGV4dCkgdGV4dC0+ZGVyZWYoKTsKKyAgICAgICAg
aWYgKGF0dHJzKSBhdHRycy0+ZGVyZWYoKTsKKyAgICAgICAgaWYgKHRleHQpIHRleHQtPmRlcmVm
KCk7CiAgICAgfQorCiAgICAgdm9pZCBhZGRBdHRyaWJ1dGUoRE9NOjpEb2N1bWVudEltcGwqIGRv
YywgUUNoYXIqIGJ1ZmZlciwgY29uc3QgUVN0cmluZyYgYXR0ck5hbWUsIGNvbnN0IERPTTo6QXRv
bWljU3RyaW5nJiB2KQogICAgIHsKICAgICAgICAgRE9NOjpBdHRyaWJ1dGVJbXBsKiBhID0gMDsK
LSAgICAgICAgaWYoYnVmZmVyLT51bmljb2RlKCkpCisgICAgICAgIGlmIChidWZmZXItPnVuaWNv
ZGUoKSkKICAgICAgICAgICAgIGEgPSBuZXcgRE9NOjpNYXBwZWRBdHRyaWJ1dGVJbXBsKGJ1ZmZl
ci0+dW5pY29kZSgpLCB2KTsKLSAgICAgICAgZWxzZSBpZiAoICFhdHRyTmFtZS5pc0VtcHR5KCkg
JiYgYXR0ck5hbWUgIT0gIi8iICkKKyAgICAgICAgZWxzZSBpZiAoIWF0dHJOYW1lLmlzRW1wdHko
KSAmJiBhdHRyTmFtZSAhPSAiLyIpCiAgICAgICAgICAgICBhID0gbmV3IERPTTo6TWFwcGVkQXR0
cmlidXRlSW1wbChkb2MtPmF0dHJJZCgwLCBET006OkRPTVN0cmluZyhhdHRyTmFtZSkuaW1wbGVt
ZW50YXRpb24oKSwgZmFsc2UpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdik7CiAKQEAgLTk3LDIzICs5NywzMyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBh
dHRycy0+aW5zZXJ0QXR0cmlidXRlKGEpOwogICAgICAgICB9CiAgICAgfQorCisgICAgYm9vbCBp
c09wZW5UYWcoY29uc3QgRE9NOjpRdWFsaWZpZWROYW1lJiBmdWxsTmFtZSkgY29uc3QgeyByZXR1
cm4gYmVnaW5UYWcgJiYgZnVsbE5hbWUubG9jYWxOYW1lKCkgPT0gdGFnTmFtZTsgfQorICAgIGJv
b2wgaXNDbG9zZVRhZyhjb25zdCBET006OlF1YWxpZmllZE5hbWUmIGZ1bGxOYW1lKSBjb25zdCB7
IHJldHVybiAhYmVnaW5UYWcgJiYgZnVsbE5hbWUubG9jYWxOYW1lKCkgPT0gdGFnTmFtZTsgfQor
CiAgICAgdm9pZCByZXNldCgpCiAgICAgewotICAgICAgICBpZihhdHRycykgeworICAgICAgICBp
ZiAoYXR0cnMpIHsKICAgICAgICAgICAgIGF0dHJzLT5kZXJlZigpOwogICAgICAgICAgICAgYXR0
cnMgPSAwOwogICAgICAgICB9Ci0gICAgICAgIGlkID0gMDsKLSAgICAgICAgaWYodGV4dCkgewor
ICAgICAgICAKKyAgICAgICAgdGFnTmFtZSA9IERPTTo6bnVsbEF0b207CisgICAgICAgIAorICAg
ICAgICBpZiAodGV4dCkgewogICAgICAgICAgICAgdGV4dC0+ZGVyZWYoKTsKICAgICAgICAgICAg
IHRleHQgPSAwOwogICAgICAgICB9CisgICAgICAgIAorICAgICAgICBiZWdpblRhZyA9IHRydWU7
CiAgICAgICAgIGZsYXQgPSBmYWxzZTsKICAgICB9CisKICAgICBET006Ok5hbWVkTWFwcGVkQXR0
ck1hcEltcGwqIGF0dHJzOwogICAgIERPTTo6RE9NU3RyaW5nSW1wbCogdGV4dDsKLSAgICB1c2hv
cnQgaWQ7Ci0gICAgYm9vbCBmbGF0OworICAgIERPTTo6QXRvbWljU3RyaW5nIHRhZ05hbWU7Cisg
ICAgYm9vbCBiZWdpblRhZyA6IDE7CisgICAgYm9vbCBmbGF0IDogMTsKIH07CiAKIC8vIFRoZSBj
b3VudCBvZiBzcGFjZXMgdXNlZCBmb3IgZWFjaCB0YWIuCkluZGV4OiBraHRtbC9taXNjL2RlY29k
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL21pc2Mv
ZGVjb2Rlci5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzQKZGlmZiAtdSAtcCAtcjEuMzQg
a2h0bWwvbWlzYy9kZWNvZGVyLmNwcAotLS0ga2h0bWwvbWlzYy9kZWNvZGVyLmNwcAkyIEp1bCAy
MDA0IDE3OjAzOjMyIC0wMDAwCTEuMzQKKysrIGtodG1sL21pc2MvZGVjb2Rlci5jcHAJMjAgSnVu
IDIwMDUgMjA6NTU6NDcgLTAwMDAKQEAgLTQxLDYgKzQxLDEyIEBAIHVzaW5nIG5hbWVzcGFjZSBr
aHRtbDsKICNpbmNsdWRlIDxrZGVidWcuaD4KICNpbmNsdWRlIDxrbG9jYWxlLmg+CiAKKyNpbmNs
dWRlICJodG1sbmFtZXMuaCIKKwordXNpbmcgRE9NOjpBdG9taWNTdHJpbmc7Cit1c2luZyBET006
OkhUTUxOYW1lczsKK3VzaW5nIERPTTo6bnVsbEF0b207CisKIGNsYXNzIEthbmppQ29kZQogewog
cHVibGljOgpAQCAtNTI2LDEyICs1MzIsOCBAQCBRU3RyaW5nIERlY29kZXI6OmRlY29kZShjb25z
dCBjaGFyICpkYXRhCiAgICAgICAgICAgICAgICAgICAgICAgICBsZW4rKzsKICAgICAgICAgICAg
ICAgICAgICAgfQogCQkgICAgdG1wW2xlbl0gPSAwOwotICAgICAgICAgICAgICAgICAgICBpbnQg
aWQgPSBraHRtbDo6Z2V0VGFnSUQodG1wLCBsZW4pOwotICAgICAgICAgICAgICAgICAgICBpZihl
bmQpIGlkICs9IElEX0NMT1NFX1RBRzsKLQotICAgICAgICAgICAgICAgICAgICBzd2l0Y2goIGlk
ICkgewotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX01FVEE6Ci0gICAgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgQXRvbWljU3RyaW5nIHRhZyh0bXApOworICAgICAg
ICAgICAgICAgICAgICBpZiAoIWVuZCAmJiB0YWcgPT0gSFRNTE5hbWVzOjptZXRhKCkpIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIGZvdW5kIGEgbWV0YSB0YWcuLi4KICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vcHRyICs9IDU7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj
aGFyICogZW5kID0gcHRyOwpAQCAtNTcwLDI4ICs1NzIsMTAgQEAgUVN0cmluZyBEZWNvZGVyOjpk
ZWNvZGUoY29uc3QgY2hhciAqZGF0YQogCiAJCQkgICAgcG9zID0gZW5kcG9zICsgMTsKIAkJCX0K
LQkJICAgIH0KLSAgICAgICAgICAgICAgICAgICAgY2FzZSAoSURfTUVUQStJRF9DTE9TRV9UQUcp
OgotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX1NDUklQVDoKLSAgICAgICAgICAgICAgICAg
ICAgY2FzZSAoSURfU0NSSVBUK0lEX0NMT1NFX1RBRyk6Ci0gICAgICAgICAgICAgICAgICAgIGNh
c2UgSURfTk9TQ1JJUFQ6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgKElEX05PU0NSSVBUK0lE
X0NMT1NFX1RBRyk6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfU1RZTEU6Ci0gICAgICAg
ICAgICAgICAgICAgIGNhc2UgKElEX1NUWUxFK0lEX0NMT1NFX1RBRyk6Ci0gICAgICAgICAgICAg
ICAgICAgIGNhc2UgSURfTElOSzoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAoSURfTElOSytJ
RF9DTE9TRV9UQUcpOgotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX09CSkVDVDoKLSAgICAg
ICAgICAgICAgICAgICAgY2FzZSAoSURfT0JKRUNUK0lEX0NMT1NFX1RBRyk6Ci0gICAgICAgICAg
ICAgICAgICAgIGNhc2UgSURfVElUTEU6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgKElEX1RJ
VExFK0lEX0NMT1NFX1RBRyk6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfQkFTRToKLSAg
ICAgICAgICAgICAgICAgICAgY2FzZSAoSURfQkFTRStJRF9DTE9TRV9UQUcpOgotICAgICAgICAg
ICAgICAgICAgICBjYXNlIElEX0hUTUw6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfSEVB
RDoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAgICAgICAgICBjYXNl
ICgwICsgSURfQ0xPU0VfVEFHICk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKwkJICAgIH0gZWxzZSBpZiAodGFnICE9IEhUTUxO
YW1lczo6c2NyaXB0KCkgJiYgdGFnICE9IEhUTUxOYW1lczo6bm9zY3JpcHQoKSAmJiB0YWcgIT0g
SFRNTE5hbWVzOjpzdHlsZSgpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFn
ICE9IEhUTUxOYW1lczo6bGluaygpICYmIHRhZyAhPSBIVE1MTmFtZXM6Om1ldGEoKSAmJiB0YWcg
IT0gSFRNTE5hbWVzOjpvYmplY3QoKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRhZyAhPSBIVE1MTmFtZXM6OnRpdGxlKCkgJiYgdGFnICE9IEhUTUxOYW1lczo6YmFzZSgpICYm
IHRhZyAhPSBIVE1MTmFtZXM6Omh0bWwoKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRhZyAhPSBIVE1MTmFtZXM6OmhlYWQoKSAmJiB0YWcgIT0gbnVsbEF0b20pIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvZHkgPSB0cnVlOwogI2lmZGVmIERFQ09ERV9ERUJVRwogCQkJ
a2REZWJ1ZyggNjAwNSApIDw8ICJEZWNvZGVyOiBubyBjaGFyc2V0IGZvdW5kLiBJZD0iIDw8IGlk
IDw8IGVuZGw7CkluZGV4OiBraHRtbC9taXNjL2h0bWxoYXNoZXMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL21pc2MvaHRtbGhhc2hlcy5jcHAsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuMTAKZGlmZiAtdSAtcCAtcjEuMTAga2h0bWwvbWlzYy9odG1saGFz
aGVzLmNwcAotLS0ga2h0bWwvbWlzYy9odG1saGFzaGVzLmNwcAk1IEphbiAyMDA1IDIyOjU2OjQ2
IC0wMDAwCTEuMTAKKysrIGtodG1sL21pc2MvaHRtbGhhc2hlcy5jcHAJMjAgSnVuIDIwMDUgMjA6
NTU6NDcgLTAwMDAKQEAgLTI1LDIyICsyNSwxMyBAQAogLy8gdHVybiBvZmYgaW5saW5pbmcgdG8g
dm9pZCB3YXJuaW5nIHdpdGggbmV3ZXIgZ2NjCiAjdW5kZWYgX19pbmxpbmUKICNkZWZpbmUgX19p
bmxpbmUKLSNpbmNsdWRlICJodG1sdGFncy5jIgogI2luY2x1ZGUgImh0bWxhdHRycy5jIgogI3Vu
ZGVmIF9faW5saW5lCiAKLXVuc2lnbmVkIHNob3J0IGtodG1sOjpnZXRUYWdJRChjb25zdCBjaGFy
ICp0YWdTdHIsIGludCBsZW4pCit1bnNpZ25lZCBzaG9ydCBraHRtbDo6Z2V0QXR0cklEKGNvbnN0
IGNoYXIgKmF0dHJTdHIsIGludCBsZW4pCiB7Ci0gICAgY29uc3Qgc3RydWN0IHRhZ3MgKnRhZ1B0
ciA9IGZpbmRUYWcodGFnU3RyLCBsZW4pOwotICAgIGlmICghdGFnUHRyKQorICAgIGNvbnN0IHN0
cnVjdCBhdHRycyAqYXR0clB0ciA9IGZpbmRBdHRyKGF0dHJTdHIsIGxlbik7CisgICAgaWYgKCFh
dHRyUHRyKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gdGFnUHRyLT5pZDsKLX0KLQot
dW5zaWduZWQgc2hvcnQga2h0bWw6OmdldEF0dHJJRChjb25zdCBjaGFyICp0YWdTdHIsIGludCBs
ZW4pCi17Ci0gICAgY29uc3Qgc3RydWN0IGF0dHJzICp0YWdQdHIgPSBmaW5kQXR0cih0YWdTdHIs
IGxlbik7Ci0gICAgaWYgKCF0YWdQdHIpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiB0
YWdQdHItPmlkOworICAgIHJldHVybiBhdHRyUHRyLT5pZDsKIH0KSW5kZXg6IGtodG1sL21pc2Mv
aHRtbGhhc2hlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1s
L21pc2MvaHRtbGhhc2hlcy5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjYKZGlmZiAtdSAtcCAt
cjEuNiBraHRtbC9taXNjL2h0bWxoYXNoZXMuaAotLS0ga2h0bWwvbWlzYy9odG1saGFzaGVzLmgJ
NSBKYW4gMjAwNSAyMjo1Njo0NiAtMDAwMAkxLjYKKysrIGtodG1sL21pc2MvaHRtbGhhc2hlcy5o
CTIwIEp1biAyMDA1IDIwOjU1OjQ3IC0wMDAwCkBAIC0yMywxMiArMjMsMTAgQEAKICNpZm5kZWYg
SFRNTEhBU0hFU19ICiAjZGVmaW5lIEhUTUxIQVNIRVNfSAogCi0jaW5jbHVkZSAiaHRtbHRhZ3Mu
aCIKICNpbmNsdWRlICJodG1sYXR0cnMuaCIKIAogbmFtZXNwYWNlIGtodG1sCiB7Ci0gIHVuc2ln
bmVkIHNob3J0IGdldFRhZ0lEKGNvbnN0IGNoYXIgKnRhZ1N0ciwgaW50IGxlbik7CiAgIHVuc2ln
bmVkIHNob3J0IGdldEF0dHJJRChjb25zdCBjaGFyICp0YWdTdHIsIGludCBsZW4pOwogfQogCklu
ZGV4OiBraHRtbC9taXNjL2h0bWx0YWdzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IGtodG1sL21p
c2MvaHRtbHRhZ3MuaW4KZGlmZiAtTiBraHRtbC9taXNjL2h0bWx0YWdzLmluCi0tLSBraHRtbC9t
aXNjL2h0bWx0YWdzLmluCTExIE1heSAyMDA1IDIzOjQ1OjI5IC0wMDAwCTEuNworKysgL2Rldi9u
dWxsCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKQEAgLTEsMTAyICswLDAgQEAKLWEKLWFiYnIK
LWFjcm9ueW0KLWFkZHJlc3MKLWFwcGxldAotYXJlYQotYgotYmFzZQotYmFzZWZvbnQKLWJkbwot
YmlnCi1ibG9ja3F1b3RlCi1ib2R5Ci1icgotYnV0dG9uCi1jYW52YXMKLWNhcHRpb24KLWNlbnRl
cgotY2l0ZQotY29kZQotY29sCi1jb2xncm91cAotZGQKLWRlbAotZGZuCi1kaXIKLWRpdgotZGwK
LWR0Ci1lbQotZW1iZWQKLWZpZWxkc2V0Ci1mb250Ci1mb3JtCi1mcmFtZQotZnJhbWVzZXQKLWgx
Ci1oMgotaDMKLWg0Ci1oNQotaDYKLWhlYWQKLWhyCi1odG1sCi1pCi1pZnJhbWUKLWltZwotaW5w
dXQKLWlucwotaXNpbmRleAota2JkCi1rZXlnZW4KLWxhYmVsCi1sYXllcgotbGVnZW5kCi1saQot
bGluawotbWFwCi1tYXJxdWVlCi1tZW51Ci1tZXRhCi1ub2JyCi1ub2VtYmVkCi1ub2ZyYW1lcwot
bm9zY3JpcHQKLW5vbGF5ZXIKLW9iamVjdAotb2wKLW9wdGdyb3VwCi1vcHRpb24KLXAKLXBhcmFt
Ci1wbGFpbnRleHQKLXByZQotcQotcwotc2FtcAotc2NyaXB0Ci1zZWxlY3QKLXNtYWxsCi1zcGFu
Ci1zdHJpa2UKLXN0cm9uZwotc3R5bGUKLXN1Ygotc3VwCi10YWJsZQotdGJvZHkKLXRkCi10ZXh0
YXJlYQotdGZvb3QKLXRoCi10aGVhZAotdGl0bGUKLXRyCi10dAotdQotdWwKLXZhcgotd2JyCi14
bXAKSW5kZXg6IGtodG1sL21pc2MvbWFrZXRhZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZToga2h0bWwv
bWlzYy9tYWtldGFncwpkaWZmIC1OIGtodG1sL21pc2MvbWFrZXRhZ3MKLS0tIGtodG1sL21pc2Mv
bWFrZXRhZ3MJNiBKYW4gMjAwNSAyMToxMzoxNiAtMDAwMAkxLjEzCisrKyAvZGV2L251bGwJMSBK
YW4gMTk3MCAwMDowMDowMCAtMDAwMApAQCAtMSwxMjEgKzAsMCBAQAotIyEvdXNyL2Jpbi9wZXJs
Ci0jICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBsaWJyYXJpZXMKLSMKLSMgICBDb3B5
cmlnaHQgKEMpIDE5OTggV2FsZG8gQmFzdGlhbiAoYmFzdGlhbkBrZGUub3JnKQotIyAgICAgICAg
ICAgICAgICAgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQotIyAgIENvcHlyaWdodCAo
QykgMjAwNCBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMg
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCi0jICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKLSMgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSMgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0jCi0jICAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jICAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKLSMgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQotIyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotIwotIyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSMgICBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bwotIyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFj
ZSAtIFN1aXRlIDMzMCwKLSMgICBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KLSMKLSMtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi0jCi0jICBLREUgSFRNTCBXaWRnZXQgLS0gU2NyaXB0IHRvIGdlbmVy
YXRlIGh0bWx0YWdzLmMgYW5kIGh0bWx0YWdzLmgKLSMKLQotdXNlIHN0cmljdDsKLQotb3BlbiBJ
TiwgImh0bWx0YWdzLmluIgotICBvciBkaWUgIkNhbid0IG9wZW4gaW5cbiI7Ci1vcGVuIGhlYWRl
ciwgIj5odG1sdGFncy5oIgotICBvciBkaWUgIkNhbid0IG9wZW4gaGVhZGVyXG4iOwotb3BlbiBv
dXQsICI+aHRtbHRhZ3MuZ3BlcmYiCi0gIG9yIGRpZSAiQ2FuJ3Qgb3BlbiBvdXRcbiI7Ci0KLXBy
aW50IG91dCAiJXtcbi8qIFRoaXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGh0bWx0YWdzLmluIGJ5IG1ha2V0YWdzLCBkbyBub3QgZWRpdCAqL1xuLyogQ29weXJpZ2h0IDE5
OTkgTGFycyBLbm9sbCAqL1xuI2luY2x1ZGUgXCJodG1sdGFncy5oXCJcbiV9XG4iOwotcHJpbnQg
b3V0ICJzdHJ1Y3QgdGFncyB7XG4gICAgY29uc3QgY2hhciAqbmFtZTtcbiAgICBpbnQgaWQ7XG59
O1xuJSVcbiI7Ci0KLXByaW50IGhlYWRlciAiLyogVGhpcyBmaWxlIGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20KLWh0bWx0YWdzLmluIGJ5IG1ha2V0YWdzLCBkbyBub3QgZWRpdCAqL1xu
LyogQ29weXJpZ2h0IDE5OTkgTGFycyBLbm9sbCAqL1xuLyogQ29weXJpZ2h0IDIwMDQgQXBwbGUg
Q29tcHV0ZXIsIEluYy4gKi9cblxuI2lmbmRlZiBLSFRNTF9UQUdTX0hcbiNkZWZpbmUgS0hUTUxf
VEFHU19IXG5cbiNpbmNsdWRlIFwiZG9tL2RvbV9zdHJpbmcuaFwiXG5cbiI7Ci0KLXByaW50IGhl
YWRlciAiRE9NOjpET01TdHJpbmcgZ2V0VGFnTmFtZSh1bnNpZ25lZCBzaG9ydCBpZCk7XG5cbiI7
Ci0KLW15ICRudW0gPSAwOwotbXkgJG9wZW5UYWdzID0gIiI7Ci1teSAkY2xvc2VUYWdzID0gIiI7
Ci13aGlsZSAoPElOPikgewotICAgIGNob21wOwotICAgIG15ICRhdHRyID0gJF87Ci0gICAgJG51
bSArPSAxOwotICAgIG15ICR1cCA9IHVjKCRhdHRyKTsKLSAgICAkb3BlblRhZ3MgLj0gIiAgICBc
IiR1cFwiLFxuIjsKLSAgICAkY2xvc2VUYWdzIC49ICIgICAgXCIvJHVwXCIsXG4iOwotICAgICR1
cCA9fiBzLy0vXy87Ci0gICAgcHJpbnQgb3V0ICRhdHRyIC4gIiwgSURfIiAuICR1cCAuICJcbiI7
Ci0gICAgcHJpbnQgaGVhZGVyICJjb25zdCB1bnNpZ25lZCBzaG9ydCBJRF8kdXAgPSAkbnVtO1xu
IjsKLX0KLXByaW50IG91dCAiYW5jaG9yLCBJRF9BXG4iOwotcHJpbnQgb3V0ICJpbWFnZSwgSURf
SU1HXG4iOwotcHJpbnQgb3V0ICJsaXN0aW5nLCBJRF9QUkVcbiI7Ci0kbnVtICs9IDE7Ci1wcmlu
dCBoZWFkZXIgImNvbnN0IHVuc2lnbmVkIHNob3J0IElEX1RFWFQgPSAkbnVtO1xuIjsKLSRudW0g
Kz0gMTsKLXByaW50IGhlYWRlciAiY29uc3QgdW5zaWduZWQgc2hvcnQgSURfQ09NTUVOVCA9ICRu
dW07XG4iOwotcHJpbnQgaGVhZGVyICJjb25zdCB1bnNpZ25lZCBzaG9ydCBJRF9MQVNUX1RBRyA9
ICRudW07XG4iOwotcHJpbnQgaGVhZGVyICJjb25zdCB1bnNpZ25lZCBzaG9ydCBJRF9DTE9TRV9U
QUcgPSAzMjAwMDtcbiI7Ci0KLXByaW50IG91dCAiJSVcbiI7Ci1jbG9zZSBvdXQ7Ci1wcmludCBo
ZWFkZXIgIlxuI2VuZGlmXG4iOwotY2xvc2UgaGVhZGVyOwotCi1teSAkcmVzdWx0ID0gc3lzdGVt
KCIvYmluL3NoIiwgIi1jIiwgImdwZXJmIC1hIC1MICdBTlNJLUMnIC1EIC1FIC1DIC1sIC1vIC10
IC1rICcqJyAtTmZpbmRUYWcgLUhoYXNoX3RhZyAtV3dvcmRsaXN0X3RhZyBodG1sdGFncy5ncGVy
ZiA+IGh0bWx0YWdzLmMiKTsKLWlmICgkcmVzdWx0KSB7Ci0gIHVubGluayAiaHRtbHRhZ3MuYyI7
Ci0gIGV4aXQgJHJlc3VsdDsKLX0KLQotb3BlbiBJTiwgImh0bWx0YWdzLmMiIG9yIGRpZTsKLQot
bXkgJG51bUxpbmVzID0gMDsKLXdoaWxlICg8SU4+KSB7Ci0gICAgJG51bUxpbmVzKys7Ci19Ci0k
bnVtTGluZXMgKz0gMjsKLQotY2hvbXAgJG9wZW5UYWdzOwotY2hvbXAgJGNsb3NlVGFnczsKLQot
b3BlbiBPVVQsICI+Pmh0bWx0YWdzLmMiIG9yIGRpZTsKLXByaW50IE9VVCA8PEVORAotI2xpbmUg
JG51bUxpbmVzICJodG1sdGFncy5jIgotCi11c2luZyBET006OkRPTVN0cmluZzsKLQotc3RhdGlj
IGNvbnN0IGNoYXIgKiBjb25zdCBvcGVuVGFnTmFtZXNbXSA9IHsKLSAgICAwLAotJG9wZW5UYWdz
Ci0gICAgIlRFWFQiLAotICAgICJDT01NRU5UIgotfTsKLQotc3RhdGljIGNvbnN0IGNoYXIgKiBj
b25zdCBjbG9zZVRhZ05hbWVzW10gPSB7Ci0gICAgMCwKLSRjbG9zZVRhZ3MKLX07Ci0KLURPTVN0
cmluZyBnZXRUYWdOYW1lKHVuc2lnbmVkIHNob3J0IGlkKQotewotICAgIGlmIChpZCA+IElEX0NM
T1NFX1RBRykgewotICAgICAgICBpbnQgaW5kZXggPSBpZCAtIElEX0NMT1NFX1RBRzsKLSAgICAg
ICAgaWYgKGluZGV4ID49IElEX1RFWFQpCi0gICAgICAgICAgICByZXR1cm4gRE9NU3RyaW5nKCk7
Ci0gICAgICAgIHJldHVybiBjbG9zZVRhZ05hbWVzW2luZGV4XTsKLSAgICB9Ci0gICAgaWYgKGlk
ID4gSURfTEFTVF9UQUcpCi0gICAgICAgIHJldHVybiBET01TdHJpbmcoKTsKLSAgICByZXR1cm4g
b3BlblRhZ05hbWVzW2lkXTsKLX0KLUVORApJbmRleDoga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9h
cHBsZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3Jl
bmRlcmluZy9yZW5kZXJfYXBwbGV0LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zMApkaWZm
IC11IC1wIC1yMS4zMCBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2FwcGxldC5jcHAKLS0tIGtodG1s
L3JlbmRlcmluZy9yZW5kZXJfYXBwbGV0LmNwcAkxMCBNYXkgMjAwNSAxODo0MjowMyAtMDAwMAkx
LjMwCisrKyBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2FwcGxldC5jcHAJMjAgSnVuIDIwMDUgMjA6
NTU6NDcgLTAwMDAKQEAgLTM2LDcgKzM2LDYgQEAKICNpZm5kZWYgUV9XU19RV1MgLy8gV2UgZG9u
J3QgaGF2ZSBKYXZhIGluIFF0IEVtYmVkZGVkCiAKICNpbmNsdWRlICJqYXZhL2tqYXZhYXBwbGV0
d2lkZ2V0LmgiCi0jaW5jbHVkZSAibWlzYy9odG1sdGFncy5oIgogI2luY2x1ZGUgImh0bWwvaHRt
bF9vYmplY3RpbXBsLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBraHRtbDsKQEAgLTEwMyw3ICsxMDIs
NyBAQCB2b2lkIFJlbmRlckFwcGxldDo6Y3JlYXRlV2lkZ2V0SWZOZWNlc3NhCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgbV9oZWlnaHQgLSBib3JkZXJUb3AoKSAtIGJvcmRlckJvdHRvbSgpIC0g
cGFkZGluZ1RvcCgpIC0gcGFkZGluZ0JvdHRvbSgpOwogICAgICAgICAgICAgTm9kZUltcGwgKmNo
aWxkID0gZWxlbWVudCgpLT5maXJzdENoaWxkKCk7CiAgICAgICAgICAgICB3aGlsZSAoY2hpbGQp
IHsKLSAgICAgICAgICAgICAgICBpZiAoY2hpbGQtPmlkKCkgPT0gSURfUEFSQU0pIHsKKyAgICAg
ICAgICAgICAgICBpZiAoY2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpwYXJhbSgpKSkgewog
ICAgICAgICAgICAgICAgICAgICBIVE1MUGFyYW1FbGVtZW50SW1wbCAqcCA9IHN0YXRpY19jYXN0
PEhUTUxQYXJhbUVsZW1lbnRJbXBsICo+KGNoaWxkKTsKICAgICAgICAgICAgICAgICAgICAgbV9h
cmdzLmluc2VydChwLT5uYW1lKCkuc3RyaW5nKCksIHAtPnZhbHVlKCkuc3RyaW5nKCkpOwogICAg
ICAgICAgICAgICAgIH0KSW5kZXg6IGtodG1sL3JlbmRlcmluZy9yZW5kZXJfYm94LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9yZW5kZXJpbmcvcmVuZGVy
X2JveC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTU0CmRpZmYgLXUgLXAgLXIxLjE1NCBr
aHRtbC9yZW5kZXJpbmcvcmVuZGVyX2JveC5jcHAKLS0tIGtodG1sL3JlbmRlcmluZy9yZW5kZXJf
Ym94LmNwcAkxMSBKdW4gMjAwNSAwNTowMToxNyAtMDAwMAkxLjE1NAorKysga2h0bWwvcmVuZGVy
aW5nL3JlbmRlcl9ib3guY3BwCTIwIEp1biAyMDA1IDIwOjU1OjQ4IC0wMDAwCkBAIC0yNTYsNyAr
MjU2LDcgQEAgdm9pZCBSZW5kZXJCb3g6OnBhaW50Um9vdEJveERlY29yYXRpb25zKAogICAgICAg
ICAvLyBhbm9ueW1vdXMgYmxvY2tzIGNyZWF0ZWQgYnkgaW5saW5lIDxib2R5PiB0YWdzIGV0Yy4g
IFdlIGNhbiBsb2NhdGUgdGhlIDxib2R5PgogICAgICAgICAvLyByZW5kZXIgb2JqZWN0IHZlcnkg
ZWFzaWx5IHZpYSB0aGUgRE9NLgogICAgICAgICBIVE1MRWxlbWVudEltcGwqIGJvZHkgPSBkb2N1
bWVudCgpLT5ib2R5KCk7Ci0gICAgICAgIFJlbmRlck9iamVjdCogYm9keU9iamVjdCA9IChib2R5
ICYmIGJvZHktPmlkKCkgPT0gSURfQk9EWSkgPyBib2R5LT5yZW5kZXJlcigpIDogMDsKKyAgICAg
ICAgUmVuZGVyT2JqZWN0KiBib2R5T2JqZWN0ID0gKGJvZHkgJiYgYm9keS0+aGFzTG9jYWxOYW1l
KEhUTUxOYW1lczo6Ym9keSgpKSkgPyBib2R5LT5yZW5kZXJlcigpIDogMDsKICAgICAgICAgaWYg
KGJvZHlPYmplY3QpIHsKICAgICAgICAgICAgIGJnTGF5ZXIgPSBib2R5T2JqZWN0LT5zdHlsZSgp
LT5iYWNrZ3JvdW5kTGF5ZXJzKCk7CiAgICAgICAgICAgICBiZ0NvbG9yID0gYm9keU9iamVjdC0+
c3R5bGUoKS0+YmFja2dyb3VuZENvbG9yKCk7CkBAIC0zNjksNyArMzY5LDcgQEAgdm9pZCBSZW5k
ZXJCb3g6OnBhaW50QmFja2dyb3VuZEV4dGVuZGVkKAogICAgICAgICBib29sIGlzVHJhbnNwYXJl
bnQ7CiAgICAgICAgIERPTTo6Tm9kZUltcGwqIGVsdCA9IGRvY3VtZW50KCktPm93bmVyRWxlbWVu
dCgpOwogICAgICAgICBpZiAoZWx0KSB7Ci0gICAgICAgICAgICBpZiAoZWx0LT5pZCgpID09IElE
X0ZSQU1FKQorICAgICAgICAgICAgaWYgKGVsdC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZyYW1l
KCkpKQogICAgICAgICAgICAgICAgIGlzVHJhbnNwYXJlbnQgPSBmYWxzZTsKICAgICAgICAgICAg
IGVsc2UgewogICAgICAgICAgICAgICAgIC8vIExvY2F0ZSB0aGUgPGJvZHk+IGVsZW1lbnQgdXNp
bmcgdGhlIERPTS4gIFRoaXMgaXMgZWFzaWVyIHRoYW4gdHJ5aW5nCkBAIC0zNzcsNyArMzc3LDcg
QEAgdm9pZCBSZW5kZXJCb3g6OnBhaW50QmFja2dyb3VuZEV4dGVuZGVkKAogICAgICAgICAgICAg
ICAgIC8vIGFub255bW91cyBibG9ja3MgY3JlYXRlZCBieSBpbmxpbmUgPGJvZHk+IHRhZ3MgZXRj
LiAgV2UgY2FuIGxvY2F0ZSB0aGUgPGJvZHk+CiAgICAgICAgICAgICAgICAgLy8gcmVuZGVyIG9i
amVjdCB2ZXJ5IGVhc2lseSB2aWEgdGhlIERPTS4KICAgICAgICAgICAgICAgICBIVE1MRWxlbWVu
dEltcGwqIGJvZHkgPSBkb2N1bWVudCgpLT5ib2R5KCk7Ci0gICAgICAgICAgICAgICAgaXNUcmFu
c3BhcmVudCA9ICFib2R5IHx8IGJvZHktPmlkKCkgIT0gSURfRlJBTUVTRVQ7IC8vIENhbid0IHNj
cm9sbCBhIGZyYW1lc2V0IGRvY3VtZW50IGFueXdheS4KKyAgICAgICAgICAgICAgICBpc1RyYW5z
cGFyZW50ID0gIWJvZHkgfHwgIWJvZHktPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmZyYW1lc2V0
KCkpOyAvLyBDYW4ndCBzY3JvbGwgYSBmcmFtZXNldCBkb2N1bWVudCBhbnl3YXkuCiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgaXNUcmFuc3BhcmVudCA9IGNhbnZh
cygpLT52aWV3KCktPmlzVHJhbnNwYXJlbnQoKTsKSW5kZXg6IGtodG1sL3JlbmRlcmluZy9yZW5k
ZXJfY2FudmFzaW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3Jl
L2todG1sL3JlbmRlcmluZy9yZW5kZXJfY2FudmFzaW1hZ2UuY3BwLHYKcmV0cmlldmluZyByZXZp
c2lvbiAxLjExCmRpZmYgLXUgLXAgLXIxLjExIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfY2FudmFz
aW1hZ2UuY3BwCi0tLSBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2NhbnZhc2ltYWdlLmNwcAkyNSBN
YXkgMjAwNSAwMTozMzoyMiAtMDAwMAkxLjExCisrKyBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2Nh
bnZhc2ltYWdlLmNwcAkyMCBKdW4gMjAwNSAyMDo1NTo0OSAtMDAwMApAQCAtMzcsMTAgKzM3LDgg
QEAKICNpbmNsdWRlICJjc3MvY3NzaGVscGVyLmgiCiAjaW5jbHVkZSAibWlzYy9oZWxwZXIuaCIK
ICNpbmNsdWRlICJtaXNjL2h0bWxhdHRycy5oIgotI2luY2x1ZGUgIm1pc2MvaHRtbHRhZ3MuaCIK
ICNpbmNsdWRlICJodG1sL2h0bWxfZm9ybWltcGwuaCIKICNpbmNsdWRlICJodG1sL2h0bWxfY2Fu
dmFzaW1wbC5oIgotI2luY2x1ZGUgImh0bWwvZHRkLmgiCiAjaW5jbHVkZSAieG1sL2RvbTJfZXZl
bnRzaW1wbC5oIgogI2luY2x1ZGUgImh0bWwvaHRtbF9kb2N1bWVudGltcGwuaCIKICNpbmNsdWRl
IDxtYXRoLmg+CkluZGV4OiBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2Zsb3cuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3JlbmRlcmluZy9yZW5kZXJfZmxv
dy5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTYwCmRpZmYgLXUgLXAgLXIxLjE2MCBraHRt
bC9yZW5kZXJpbmcvcmVuZGVyX2Zsb3cuY3BwCi0tLSBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2Zs
b3cuY3BwCTExIE1heSAyMDA1IDAyOjEwOjEwIC0wMDAwCTEuMTYwCisrKyBraHRtbC9yZW5kZXJp
bmcvcmVuZGVyX2Zsb3cuY3BwCTIwIEp1biAyMDA1IDIwOjU1OjQ5IC0wMDAwCkBAIC00MCw3ICs0
MCw2IEBACiAjaW5jbHVkZSAicmVuZGVyX2xpbmUuaCIKIAogI2luY2x1ZGUgImtodG1sdmlldy5o
IgotI2luY2x1ZGUgImh0bWx0YWdzLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBET007CiB1c2luZyBu
YW1lc3BhY2Uga2h0bWw7CkBAIC02NTQsNyArNjUzLDcgQEAgdm9pZCBSZW5kZXJGbG93OjphZGRG
b2N1c1JpbmdSZWN0cyhRUGFpbgogICAgIC8vIE9ubHkgcGFpbnQgZm9jdXMgcmluZyBhcm91bmQg
b3V0ZXJtb3N0IGNvbnRlbnRlZGl0YWJsZSBlbGVtZW50LgogICAgIC8vIEJ1dCBza2lwIHRoZSBi
b2R5IGVsZW1lbnQgaWYgaXQgaXMgb3V0ZXJtb3N0LgogICAgIGlmIChlbGVtZW50KCkgJiYgZWxl
bWVudCgpLT5pc0NvbnRlbnRFZGl0YWJsZSgpKSB7Ci0gICAgICAgIGlmIChlbGVtZW50KCktPnBh
cmVudE5vZGUoKSAmJiAhZWxlbWVudCgpLT5wYXJlbnROb2RlKCktPmlzQ29udGVudEVkaXRhYmxl
KCkgJiYgZWxlbWVudCgpLT5pZCgpICE9IElEX0JPRFkpCisgICAgICAgIGlmIChlbGVtZW50KCkt
PnBhcmVudE5vZGUoKSAmJiAhZWxlbWVudCgpLT5wYXJlbnROb2RlKCktPmlzQ29udGVudEVkaXRh
YmxlKCkgJiYgIWVsZW1lbnQoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJvZHkoKSkpCiAgICAg
ICAgICAgICBwLT5hZGRGb2N1c1JpbmdSZWN0KF90eCwgX3R5LCB3aWR0aCgpLCBoZWlnaHQoKSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4OiBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2Zv
cm0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3JlbmRl
cmluZy9yZW5kZXJfZm9ybS5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTA2CmRpZmYgLXUg
LXAgLXIxLjEwNiBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2Zvcm0uY3BwCi0tLSBraHRtbC9yZW5k
ZXJpbmcvcmVuZGVyX2Zvcm0uY3BwCTE3IEp1biAyMDA1IDIzOjAyOjQ4IC0wMDAwCTEuMTA2Cisr
KyBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2Zvcm0uY3BwCTIwIEp1biAyMDA1IDIwOjU1OjUxIC0w
MDAwCkBAIC03MzYsNyArNzM2LDcgQEAgUmVuZGVyT2JqZWN0KiBSZW5kZXJGaWVsZHNldDo6Zmlu
ZExlZ2VuZAogewogICAgIGZvciAoUmVuZGVyT2JqZWN0KiBsZWdlbmQgPSBmaXJzdENoaWxkKCk7
IGxlZ2VuZDsgbGVnZW5kID0gbGVnZW5kLT5uZXh0U2libGluZygpKSB7CiAgICAgICBpZiAoIWxl
Z2VuZC0+aXNGbG9hdGluZ09yUG9zaXRpb25lZCgpICYmIGxlZ2VuZC0+ZWxlbWVudCgpICYmCi0g
ICAgICAgICAgbGVnZW5kLT5lbGVtZW50KCktPmlkKCkgPT0gSURfTEVHRU5EKQorICAgICAgICAg
IGxlZ2VuZC0+ZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6bGVnZW5kKCkpKQogICAg
ICAgICByZXR1cm4gbGVnZW5kOwogICAgIH0KICAgICByZXR1cm4gMDsKQEAgLTExMzAsNyArMTEz
MCw3IEBAIHZvaWQgUmVuZGVyU2VsZWN0Ojp1cGRhdGVGcm9tRWxlbWVudCgpCiAgICAgICAgICAg
ICBzdGF0aWNfY2FzdDxLQ29tYm9Cb3gqPihtX3dpZGdldCktPmNsZWFyKCk7CiAKICAgICAgICAg
Zm9yIChsaXN0SW5kZXggPSAwOyBsaXN0SW5kZXggPCBpbnQobGlzdEl0ZW1zLnNpemUoKSk7IGxp
c3RJbmRleCsrKSB7Ci0gICAgICAgICAgICBpZiAobGlzdEl0ZW1zW2xpc3RJbmRleF0tPmlkKCkg
PT0gSURfT1BUR1JPVVApIHsKKyAgICAgICAgICAgIGlmIChsaXN0SXRlbXNbbGlzdEluZGV4XS0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9wdGdyb3VwKCkpKSB7CiAgICAgICAgICAgICAgICAgUVN0
cmluZyBsYWJlbCA9IGxpc3RJdGVtc1tsaXN0SW5kZXhdLT5nZXRBdHRyaWJ1dGUoQVRUUl9MQUJF
TCkuc3RyaW5nKCk7CiAgICAgICAgICAgICAgICAgbGFiZWwucmVwbGFjZShRQ2hhcignXFwnKSwg
YmFja3NsYXNoQXNDdXJyZW5jeVN5bWJvbCgpKTsKIApAQCAtMTE1NCwxNCArMTE1NCwxNCBAQCB2
b2lkIFJlbmRlclNlbGVjdDo6dXBkYXRlRnJvbUVsZW1lbnQoKQogICAgICAgICAgICAgICAgICAg
ICBzdGF0aWNfY2FzdDxLQ29tYm9Cb3gqPihtX3dpZGdldCktPmluc2VydEl0ZW0obGFiZWwsIGxp
c3RJbmRleCk7CiAjZW5kaWYKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGxp
c3RJdGVtc1tsaXN0SW5kZXhdLT5pZCgpID09IElEX09QVElPTikgeworICAgICAgICAgICAgZWxz
ZSBpZiAobGlzdEl0ZW1zW2xpc3RJbmRleF0tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvcHRpb24o
KSkpIHsKICAgICAgICAgICAgICAgICBRU3RyaW5nIGl0ZW1UZXh0ID0gc3RhdGljX2Nhc3Q8SFRN
TE9wdGlvbkVsZW1lbnRJbXBsKj4obGlzdEl0ZW1zW2xpc3RJbmRleF0pLT50ZXh0KCkuc3RyaW5n
KCk7CiAgICAgICAgICAgICAgICAgaXRlbVRleHQucmVwbGFjZShRQ2hhcignXFwnKSwgYmFja3Ns
YXNoQXNDdXJyZW5jeVN5bWJvbCgpKTsKIAogICAgICAgICAgICAgICAgIC8vIEluIFdpbklFLCBs
ZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlIGlzIGlnbm9yZWQgaW4gb3B0aW9ucy4gV2Ug
bWF0Y2ggdGhpcyBiZWhhdmlvci4KICAgICAgICAgICAgICAgICBpdGVtVGV4dCA9IGl0ZW1UZXh0
LnN0cmlwV2hpdGVTcGFjZSgpOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlm
IChsaXN0SXRlbXNbbGlzdEluZGV4XS0+cGFyZW50Tm9kZSgpLT5pZCgpID09IElEX09QVEdST1VQ
KQorICAgICAgICAgICAgICAgIGlmIChsaXN0SXRlbXNbbGlzdEluZGV4XS0+cGFyZW50Tm9kZSgp
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b3B0Z3JvdXAoKSkpCiAgICAgICAgICAgICAgICAgICAg
IGl0ZW1UZXh0LnByZXBlbmQoIiAgICAiKTsKIAogI2lmIEFQUExFX0NIQU5HRVMKQEAgLTEyODcs
NyArMTI4Nyw3IEBAIHZvaWQgUmVuZGVyU2VsZWN0OjpsYXlvdXQoICkKIAogICAgIGJvb2wgZm91
bmRPcHRpb24gPSBmYWxzZTsKICAgICBmb3IgKHVpbnQgaSA9IDA7IGkgPCBsaXN0SXRlbXMuc2l6
ZSgpICYmICFmb3VuZE9wdGlvbjsgaSsrKQotCWZvdW5kT3B0aW9uID0gKGxpc3RJdGVtc1tpXS0+
aWQoKSA9PSBJRF9PUFRJT04pOworCWZvdW5kT3B0aW9uID0gKGxpc3RJdGVtc1tpXS0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6Om9wdGlvbigpKSk7CiAKICAgICBtX3dpZGdldC0+c2V0RW5hYmxlZChm
b3VuZE9wdGlvbiAmJiAhIGVsZW1lbnQoKS0+ZGlzYWJsZWQoKSk7CiB9CkBAIC0xMzAxLDEyICsx
MzAxLDEyIEBAIHZvaWQgUmVuZGVyU2VsZWN0OjpzbG90U2VsZWN0ZWQoaW50IGluZGUKICAgICBR
TWVtQXJyYXk8SFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwqPiBsaXN0SXRlbXMgPSBlbGVtZW50
KCktPmxpc3RJdGVtcygpOwogICAgIGlmKGluZGV4ID49IDAgJiYgaW5kZXggPCBpbnQobGlzdEl0
ZW1zLnNpemUoKSkpCiAgICAgewotICAgICAgICBib29sIGZvdW5kID0gKCBsaXN0SXRlbXNbaW5k
ZXhdLT5pZCgpID09IElEX09QVElPTiApOworICAgICAgICBib29sIGZvdW5kID0gKGxpc3RJdGVt
c1tpbmRleF0tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvcHRpb24oKSkpOwogCiAgICAgICAgIGlm
ICggIWZvdW5kICkgewogICAgICAgICAgICAgLy8gdGhpcyBvbmUgaXMgbm90IHNlbGVjdGFibGUs
ICB3ZSBuZWVkIHRvIGZpbmQgYW4gb3B0aW9uIGVsZW1lbnQKICAgICAgICAgICAgIHdoaWxlICgg
KCB1bnNpZ25lZCApIGluZGV4IDwgbGlzdEl0ZW1zLnNpemUoKSApIHsKLSAgICAgICAgICAgICAg
ICBpZiAoIGxpc3RJdGVtc1tpbmRleF0tPmlkKCkgPT0gSURfT1BUSU9OICkgeworICAgICAgICAg
ICAgICAgIGlmIChsaXN0SXRlbXNbaW5kZXhdLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b3B0aW9u
KCkpKSB7CiAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQpAQCAtMTMxNSw3ICsxMzE1LDcgQEAgdm9p
ZCBSZW5kZXJTZWxlY3Q6OnNsb3RTZWxlY3RlZChpbnQgaW5kZQogCiAgICAgICAgICAgICBpZiAo
ICFmb3VuZCApIHsKICAgICAgICAgICAgICAgICB3aGlsZSAoIGluZGV4ID49IDAgKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmICggbGlzdEl0ZW1zW2luZGV4XS0+aWQoKSA9PSBJRF9PUFRJT04g
KSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChsaXN0SXRlbXNbaW5kZXhdLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6b3B0aW9uKCkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9
IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAg
ICAgfQpAQCAtMTMyOSw3ICsxMzI5LDcgQEAgdm9pZCBSZW5kZXJTZWxlY3Q6OnNsb3RTZWxlY3Rl
ZChpbnQgaW5kZQogICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PENvbWJvQm94V2lkZ2V0Kj4o
IG1fd2lkZ2V0ICktPnNldEN1cnJlbnRJdGVtKCBpbmRleCApOwogCiAgICAgICAgICAgICBmb3Ig
KCB1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBsaXN0SXRlbXMuc2l6ZSgpOyArK2kgKQotICAgICAg
ICAgICAgICAgIGlmICggbGlzdEl0ZW1zW2ldLT5pZCgpID09IElEX09QVElPTiAmJiBpICE9ICh1
bnNpZ25lZCBpbnQpIGluZGV4ICkKKyAgICAgICAgICAgICAgICBpZiAobGlzdEl0ZW1zW2ldLT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpICYmIGkgIT0gKHVuc2lnbmVkIGludCkgaW5k
ZXgpCiAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50SW1w
bCo+KCBsaXN0SXRlbXNbaV0gKS0+bV9zZWxlY3RlZCA9IGZhbHNlOwogCiAgICAgICAgICAgICBz
dGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudEltcGwqPihsaXN0SXRlbXNbaW5kZXhdKS0+bV9z
ZWxlY3RlZCA9IHRydWU7CkBAIC0xMzUwLDcgKzEzNTAsNyBAQCB2b2lkIFJlbmRlclNlbGVjdDo6
c2xvdFNlbGVjdGlvbkNoYW5nZWQoCiAgICAgZm9yICggdW5zaWduZWQgaSA9IDA7IGkgPCBsaXN0
SXRlbXMuY291bnQoKTsgaSsrICkKICAgICAgICAgLy8gZG9uJ3QgdXNlIHNldFNlbGVjdGVkKCkg
aGVyZSBiZWNhdXNlIGl0IHdpbGwgY2F1c2UgdXMgdG8gYmUgY2FsbGVkCiAgICAgICAgIC8vIGFn
YWluIHdpdGggdXBkYXRlU2VsZWN0aW9uLgotICAgICAgICBpZiAoIGxpc3RJdGVtc1tpXS0+aWQo
KSA9PSBJRF9PUFRJT04gKQorICAgICAgICBpZiAobGlzdEl0ZW1zW2ldLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6b3B0aW9uKCkpKQogICAgICAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVs
ZW1lbnRJbXBsKj4oIGxpc3RJdGVtc1tpXSApCiAgICAgICAgICAgICAgICAgLT5tX3NlbGVjdGVk
ID0gc3RhdGljX2Nhc3Q8S0xpc3RCb3gqPiggbV93aWRnZXQgKS0+aXNTZWxlY3RlZCggaSApOwog
CkBAIC0xMzkyLDcgKzEzOTIsNyBAQCB2b2lkIFJlbmRlclNlbGVjdDo6dXBkYXRlU2VsZWN0aW9u
KCkKICAgICAgICAgLy8gaWYgbXVsdGktc2VsZWN0LCB3ZSBzZWxlY3Qgb25seSB0aGUgbmV3IHNl
bGVjdGVkIGluZGV4CiAgICAgICAgIEtMaXN0Qm94ICpsaXN0Qm94ID0gc3RhdGljX2Nhc3Q8S0xp
c3RCb3gqPihtX3dpZGdldCk7CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBpbnQobGlzdEl0ZW1z
LnNpemUoKSk7IGkrKykKLSAgICAgICAgICAgIGxpc3RCb3gtPnNldFNlbGVjdGVkKGksbGlzdEl0
ZW1zW2ldLT5pZCgpID09IElEX09QVElPTiAmJgorICAgICAgICAgICAgbGlzdEJveC0+c2V0U2Vs
ZWN0ZWQoaSwgbGlzdEl0ZW1zW2ldLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpICYm
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEhUTUxPcHRpb25F
bGVtZW50SW1wbCo+KGxpc3RJdGVtc1tpXSktPnNlbGVjdGVkKCkpOwogICAgIH0KICAgICBlbHNl
IHsKQEAgLTE0MDAsNyArMTQwMCw3IEBAIHZvaWQgUmVuZGVyU2VsZWN0Ojp1cGRhdGVTZWxlY3Rp
b24oKQogICAgICAgICB1bnNpZ25lZCBmaXJzdE9wdGlvbiA9IGxpc3RJdGVtcy5zaXplKCk7CiAg
ICAgICAgIGkgPSBsaXN0SXRlbXMuc2l6ZSgpOwogICAgICAgICB3aGlsZSAoaS0tKQotICAgICAg
ICAgICAgaWYgKGxpc3RJdGVtc1tpXS0+aWQoKSA9PSBJRF9PUFRJT04pIHsKKyAgICAgICAgICAg
IGlmIChsaXN0SXRlbXNbaV0tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvcHRpb24oKSkpIHsKICAg
ICAgICAgICAgICAgICBpZiAoZm91bmQpCiAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0
PEhUTUxPcHRpb25FbGVtZW50SW1wbCo+KGxpc3RJdGVtc1tpXSktPm1fc2VsZWN0ZWQgPSBmYWxz
ZTsKICAgICAgICAgICAgICAgICBlbHNlIGlmIChzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVu
dEltcGwqPihsaXN0SXRlbXNbaV0pLT5zZWxlY3RlZCgpKSB7CkluZGV4OiBraHRtbC9yZW5kZXJp
bmcvcmVuZGVyX2ZyYW1lcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNv
cmUva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9mcmFtZXMuY3BwLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjY5CmRpZmYgLXUgLXAgLXIxLjY5IGtodG1sL3JlbmRlcmluZy9yZW5kZXJfZnJhbWVzLmNw
cAotLS0ga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9mcmFtZXMuY3BwCTEwIE1heSAyMDA1IDE4OjQy
OjA0IC0wMDAwCTEuNjkKKysrIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfZnJhbWVzLmNwcAkyMCBK
dW4gMjAwNSAyMDo1NTo1MSAtMDAwMApAQCAtMzQsNyArMzQsNiBAQAogI2luY2x1ZGUgIm1pc2Mv
aHRtbGF0dHJzLmgiCiAjaW5jbHVkZSAieG1sL2RvbTJfZXZlbnRzaW1wbC5oIgogI2luY2x1ZGUg
InhtbC9kb21fZG9jaW1wbC5oIgotI2luY2x1ZGUgIm1pc2MvaHRtbHRhZ3MuaCIKICNpbmNsdWRl
ICJraHRtbHZpZXcuaCIKICNpbmNsdWRlICJraHRtbF9wYXJ0LmgiCiAjaW5jbHVkZSAicmVuZGVy
X2FyZW5hLmgiCkBAIC02NjksMTcgKzY2OCwxNyBAQCB2b2lkIFJlbmRlclBhcnRPYmplY3Q6OnVw
ZGF0ZVdpZGdldCgpCiAKICAgc2V0TmVlZHNMYXlvdXRBbmRNaW5NYXhSZWNhbGMoKTsKIAotICBp
ZiAoZWxlbWVudCgpLT5pZCgpID09IElEX09CSkVDVCkgeworICBpZiAoZWxlbWVudCgpLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6b2JqZWN0KCkpKSB7CiAKICAgICAgIEhUTUxPYmplY3RFbGVtZW50
SW1wbCAqbyA9IHN0YXRpY19jYXN0PEhUTUxPYmplY3RFbGVtZW50SW1wbCAqPihlbGVtZW50KCkp
OwogCiAgICAgICAvLyBDaGVjayBmb3IgYSBjaGlsZCBFTUJFRCB0YWcuCiAgICAgICBIVE1MRW1i
ZWRFbGVtZW50SW1wbCAqZW1iZWQgPSAwOwogICAgICAgZm9yIChOb2RlSW1wbCAqY2hpbGQgPSBv
LT5maXJzdENoaWxkKCk7IGNoaWxkOyApIHsKLSAgICAgICAgICBpZiAoY2hpbGQtPmlkKCkgPT0g
SURfRU1CRUQpIHsKKyAgICAgICAgICBpZiAoY2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpl
bWJlZCgpKSkgewogICAgICAgICAgICAgICBlbWJlZCA9IHN0YXRpY19jYXN0PEhUTUxFbWJlZEVs
ZW1lbnRJbXBsICo+KCBjaGlsZCApOwogICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9
IGVsc2UgaWYgKGNoaWxkLT5pZCgpID09IElEX09CSkVDVCkgeworICAgICAgICAgIH0gZWxzZSBp
ZiAoY2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvYmplY3QoKSkpIHsKICAgICAgICAgICAg
ICAgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKTsgICAgICAgICAvLyBEb24ndCBkZXNjZW5k
IGludG8gbmVzdGVkIE9CSkVDVCB0YWdzCiAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
ICAgY2hpbGQgPSBjaGlsZC0+dHJhdmVyc2VOZXh0Tm9kZShvKTsgICAvLyBPdGhlcndpc2UgZGVz
Y2VuZCAoRU1CRURzIG1heSBiZSBpbnNpZGUgQ09NTUVOVCB0YWdzKQpAQCAtNzE5LDcgKzcxOCw3
IEBAIHZvaWQgUmVuZGVyUGFydE9iamVjdDo6dXBkYXRlV2lkZ2V0KCkKICAgICAgIC8vIEdldCB0
aGUgYXR0cmlidXRlcyBmcm9tIHRoZSBwYXJhbXMgaWYgdGhlcmUgaXMgbm8gRU1CRUQgdGFnLgog
ICAgICAgTm9kZUltcGwgKmNoaWxkID0gby0+Zmlyc3RDaGlsZCgpOwogICAgICAgd2hpbGUgKGNo
aWxkICYmICh1cmwuaXNFbXB0eSgpIHx8IHNlcnZpY2VUeXBlLmlzRW1wdHkoKSB8fCAhZW1iZWQp
KSB7Ci0gICAgICAgICAgaWYgKGNoaWxkLT5pZCgpID09IElEX1BBUkFNKSB7CisgICAgICAgICAg
aWYgKGNoaWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6cGFyYW0oKSkpIHsKICAgICAgICAgICAg
ICAgSFRNTFBhcmFtRWxlbWVudEltcGwgKnAgPSBzdGF0aWNfY2FzdDxIVE1MUGFyYW1FbGVtZW50
SW1wbCAqPiggY2hpbGQgKTsKICAgICAgICAgICAgICAgUVN0cmluZyBuYW1lID0gcC0+bmFtZSgp
LnN0cmluZygpLmxvd2VyKCk7CiAgICAgICAgICAgICAgIGlmICh1cmwuaXNFbXB0eSgpICYmIChu
YW1lID09ICJzcmMiIHx8IG5hbWUgPT0gIm1vdmllIiB8fCBuYW1lID09ICJjb2RlIiB8fCBuYW1l
ID09ICJ1cmwiKSkgewpAQCAtODEwLDE0ICs4MDksMTQgQEAgdm9pZCBSZW5kZXJQYXJ0T2JqZWN0
Ojp1cGRhdGVXaWRnZXQoKQogICAgICAgLy8gRmluZCBvdXQgaWYgd2Ugc3VwcG9ydCBmYWxsYmFj
ayBjb250ZW50LgogICAgICAgbV9oYXNGYWxsYmFja0NvbnRlbnQgPSBmYWxzZTsKICAgICAgIGZv
ciAoTm9kZUltcGwgKmNoaWxkID0gby0+Zmlyc3RDaGlsZCgpOyBjaGlsZCAmJiAhbV9oYXNGYWxs
YmFja0NvbnRlbnQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAgICBp
ZiAoKCFjaGlsZC0+aXNUZXh0Tm9kZSgpICYmIGNoaWxkLT5pZCgpICE9IElEX0VNQkVEICYmIGNo
aWxkLT5pZCgpICE9IElEX1BBUkFNKSB8fCAvLyBEaXNjb3VudCA8ZW1iZWQ+IGFuZCA8cGFyYW0+
CisgICAgICAgICAgaWYgKCghY2hpbGQtPmlzVGV4dE5vZGUoKSAmJiAhY2hpbGQtPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjplbWJlZCgpKSAmJiAhY2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpw
YXJhbSgpKSkgfHwgLy8gRGlzY291bnQgPGVtYmVkPiBhbmQgPHBhcmFtPgogICAgICAgICAgICAg
ICAoY2hpbGQtPmlzVGV4dE5vZGUoKSAmJiAhY2hpbGQtPmNvbnRhaW5zT25seVdoaXRlc3BhY2Uo
KSkpCiAgICAgICAgICAgICAgIG1faGFzRmFsbGJhY2tDb250ZW50ID0gdHJ1ZTsKICAgICAgIH0K
ICAgICAgIGJvb2wgc3VjY2VzcyA9IHBhcnQtPnJlcXVlc3RPYmplY3QoIHRoaXMsIHVybCwgc2Vy
dmljZVR5cGUsIHBhcmFtTmFtZXMsIHBhcmFtVmFsdWVzICk7CiAgICAgICBpZiAoIXN1Y2Nlc3Mg
JiYgbV9oYXNGYWxsYmFja0NvbnRlbnQpCiAgICAgICAgICAgby0+cmVuZGVyRmFsbGJhY2tDb250
ZW50KCk7Ci0gIH0gZWxzZSBpZiAoIGVsZW1lbnQoKS0+aWQoKSA9PSBJRF9FTUJFRCApIHsKKyAg
fSBlbHNlIGlmIChlbGVtZW50KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjplbWJlZCgpKSkgewog
CiAgICAgICBIVE1MRW1iZWRFbGVtZW50SW1wbCAqbyA9IHN0YXRpY19jYXN0PEhUTUxFbWJlZEVs
ZW1lbnRJbXBsICo+KGVsZW1lbnQoKSk7CiAgICAgICB1cmwgPSBvLT51cmw7CkBAIC04NDQsNyAr
ODQzLDcgQEAgdm9pZCBSZW5kZXJQYXJ0T2JqZWN0Ojp1cGRhdGVXaWRnZXQoKQogICAgICAgfQog
ICAgICAgcGFydC0+cmVxdWVzdE9iamVjdCggdGhpcywgdXJsLCBzZXJ2aWNlVHlwZSwgcGFyYW1O
YW1lcywgcGFyYW1WYWx1ZXMgKTsKICAgfSBlbHNlIHsKLSAgICAgIGFzc2VydChlbGVtZW50KCkt
PmlkKCkgPT0gSURfSUZSQU1FKTsKKyAgICAgIGFzc2VydChlbGVtZW50KCktPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjppZnJhbWUoKSkpOwogICAgICAgSFRNTElGcmFtZUVsZW1lbnRJbXBsICpvID0g
c3RhdGljX2Nhc3Q8SFRNTElGcmFtZUVsZW1lbnRJbXBsICo+KGVsZW1lbnQoKSk7CiAgICAgICB1
cmwgPSBvLT5tX1VSTC5zdHJpbmcoKTsKICAgICAgIGlmICh1cmwuaXNFbXB0eSgpKSB7CkBAIC04
OTAsNyArODg5LDcgQEAgdm9pZCBSZW5kZXJQYXJ0T2JqZWN0OjpzbG90Vmlld0NsZWFyZWQoKQog
ICAgICAgUVNjcm9sbFZpZXc6OlNjcm9sbEJhck1vZGUgc2Nyb2xsID0gUVNjcm9sbFZpZXc6OkF1
dG87CiAgICAgICBpbnQgbWFyZ2ludyA9IC0xOwogICAgICAgaW50IG1hcmdpbmggPSAtMTsKLSAg
ICAgIGlmICggZWxlbWVudCgpLT5pZCgpID09IElEX0lGUkFNRSkgeworICAgICAgaWYgKGVsZW1l
bnQoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmlmcmFtZSgpKSkgewogCSAgSFRNTElGcmFtZUVs
ZW1lbnRJbXBsICpmcmFtZSA9IHN0YXRpY19jYXN0PEhUTUxJRnJhbWVFbGVtZW50SW1wbCAqPihl
bGVtZW50KCkpOwogCSAgaWYoZnJhbWUtPm1fZnJhbWVCb3JkZXIpCiAJICAgICAgZnJhbWVTdHls
ZSA9IFFGcmFtZTo6Qm94OwpAQCAtOTEwLDcgKzkwOSw3IEBAIHZvaWQgUmVuZGVyUGFydE9iamVj
dDo6c2xvdFZpZXdDbGVhcmVkKCkKICAgICAgICAgICBrZERlYnVnKDYwMzEpIDw8ICJmcmFtZSBp
cyBhIEtIVE1MdmlldyEiIDw8IGVuZGw7CiAjZW5kaWYKICAgICAgICAgICBLSFRNTFZpZXcgKmh0
bWxWaWV3ID0gc3RhdGljX2Nhc3Q8S0hUTUxWaWV3ICo+KHZpZXcpOwotICAgICAgICAgIGh0bWxW
aWV3LT5zZXRJZ25vcmVXaGVlbEV2ZW50cyggZWxlbWVudCgpLT5pZCgpID09IElEX0lGUkFNRSAp
OworICAgICAgICAgIGh0bWxWaWV3LT5zZXRJZ25vcmVXaGVlbEV2ZW50cyhlbGVtZW50KCktPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjppZnJhbWUoKSkpOwogICAgICAgICAgIGlmKG1hcmdpbncgIT0g
LTEpIGh0bWxWaWV3LT5zZXRNYXJnaW5XaWR0aChtYXJnaW53KTsKICAgICAgICAgICBpZihtYXJn
aW5oICE9IC0xKSBodG1sVmlldy0+c2V0TWFyZ2luSGVpZ2h0KG1hcmdpbmgpOwogICAgICAgICB9
CkluZGV4OiBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2ltYWdlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9yZW5kZXJpbmcvcmVuZGVyX2ltYWdlLmNwcCx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS43NApkaWZmIC11IC1wIC1yMS43NCBraHRtbC9yZW5kZXJp
bmcvcmVuZGVyX2ltYWdlLmNwcAotLS0ga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9pbWFnZS5jcHAJ
MjUgRmViIDIwMDUgMDA6MjU6MTIgLTAwMDAJMS43NAorKysga2h0bWwvcmVuZGVyaW5nL3JlbmRl
cl9pbWFnZS5jcHAJMjAgSnVuIDIwMDUgMjA6NTU6NTIgLTAwMDAKQEAgLTM2LDEwICszNiw4IEBA
CiAjaW5jbHVkZSAiY3NzL2Nzc2hlbHBlci5oIgogI2luY2x1ZGUgIm1pc2MvaGVscGVyLmgiCiAj
aW5jbHVkZSAibWlzYy9odG1sYXR0cnMuaCIKLSNpbmNsdWRlICJtaXNjL2h0bWx0YWdzLmgiCiAj
aW5jbHVkZSAiaHRtbC9odG1sX2Zvcm1pbXBsLmgiCiAjaW5jbHVkZSAiaHRtbC9odG1sX2ltYWdl
aW1wbC5oIgotI2luY2x1ZGUgImh0bWwvZHRkLmgiCiAjaW5jbHVkZSAieG1sL2RvbTJfZXZlbnRz
aW1wbC5oIgogI2luY2x1ZGUgImh0bWwvaHRtbF9kb2N1bWVudGltcGwuaCIKICNpbmNsdWRlIDxt
YXRoLmg+CkBAIC00MTgsNyArNDE2LDcgQEAgdm9pZCBSZW5kZXJJbWFnZTo6cGFpbnQoUGFpbnRJ
bmZvJiBpLCBpbgogCiAKIC8vICAgICAgICAgICAgIHAtPmRyYXdQaXhtYXAoIG9mZnMueCgpLCB5
LCBwaXgsIHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpICk7
Ci0gICAgICAgICAgICAgSFRNTEltYWdlRWxlbWVudEltcGwqIGkgPSAoZWxlbWVudCgpICYmIGVs
ZW1lbnQoKS0+aWQoKSA9PSBJRF9JTUcpID8gc3RhdGljX2Nhc3Q8SFRNTEltYWdlRWxlbWVudElt
cGwqPihlbGVtZW50KCkpIDogMDsKKyAgICAgICAgICAgICBIVE1MSW1hZ2VFbGVtZW50SW1wbCog
aSA9IChlbGVtZW50KCkgJiYgZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW1nKCkp
KSA/IHN0YXRpY19jYXN0PEhUTUxJbWFnZUVsZW1lbnRJbXBsKj4oZWxlbWVudCgpKSA6IDA7CiAg
ICAgICAgICAgICAgaWYgKGkgJiYgIWktPmNvbXBvc2l0ZU9wZXJhdG9yKCkuaXNOdWxsKCkpewog
ICAgICAgICAgICAgICAgIHAtPmRyYXdQaXhtYXAgKG9mZnMsIHBpeCwgcmVjdCwgaS0+Y29tcG9z
aXRlT3BlcmF0b3IoKSk7CiAgICAgICAgICAgICAgfQpAQCAtNDg1LDcgKzQ4Myw3IEBAIHZvaWQg
UmVuZGVySW1hZ2U6OmxheW91dCgpCiAKIEhUTUxNYXBFbGVtZW50SW1wbCogUmVuZGVySW1hZ2U6
OmltYWdlTWFwKCkKIHsKLSAgICBIVE1MSW1hZ2VFbGVtZW50SW1wbCogaSA9IGVsZW1lbnQoKS0+
aWQoKSA9PSBJRF9JTUcgPyBzdGF0aWNfY2FzdDxIVE1MSW1hZ2VFbGVtZW50SW1wbCo+KGVsZW1l
bnQoKSkgOiAwOworICAgIEhUTUxJbWFnZUVsZW1lbnRJbXBsKiBpID0gZWxlbWVudCgpLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6aW1nKCkpID8gc3RhdGljX2Nhc3Q8SFRNTEltYWdlRWxlbWVudElt
cGwqPihlbGVtZW50KCkpIDogMDsKICAgICByZXR1cm4gaSA/IGktPmdldERvY3VtZW50KCktPmdl
dEltYWdlTWFwKGktPmltYWdlTWFwKCkpIDogMDsKIH0KIApAQCAtNTExLDkgKzUwOSw5IEBAIGJv
b2wgUmVuZGVySW1hZ2U6Om5vZGVBdFBvaW50KE5vZGVJbmZvJiAKIAogdm9pZCBSZW5kZXJJbWFn
ZTo6dXBkYXRlQWx0VGV4dCgpCiB7Ci0gICAgaWYgKGVsZW1lbnQoKS0+aWQoKSA9PSBJRF9JTlBV
VCkKKyAgICBpZiAoZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW5wdXQoKSkpCiAg
ICAgICAgIGFsdCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnRJbXBsKj4oZWxlbWVudCgp
KS0+YWx0VGV4dCgpOwotICAgIGVsc2UgaWYgKGVsZW1lbnQoKS0+aWQoKSA9PSBJRF9JTUcpCisg
ICAgZWxzZSBpZiAoZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW1nKCkpKQogICAg
ICAgICBhbHQgPSBzdGF0aWNfY2FzdDxIVE1MSW1hZ2VFbGVtZW50SW1wbCo+KGVsZW1lbnQoKSkt
PmFsdFRleHQoKTsKIH0KIApJbmRleDoga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9saXN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9yZW5kZXJpbmcvcmVu
ZGVyX2xpc3QuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjYwCmRpZmYgLXUgLXAgLXIxLjYw
IGtodG1sL3JlbmRlcmluZy9yZW5kZXJfbGlzdC5jcHAKLS0tIGtodG1sL3JlbmRlcmluZy9yZW5k
ZXJfbGlzdC5jcHAJMjUgRmViIDIwMDUgMDA6MjU6MTIgLTAwMDAJMS42MAorKysga2h0bWwvcmVu
ZGVyaW5nL3JlbmRlcl9saXN0LmNwcAkyMCBKdW4gMjAwNSAyMDo1NTo1MiAtMDAwMApAQCAtMjYs
NyArMjYsOCBAQAogI2luY2x1ZGUgInJlbmRlcmluZy9yZW5kZXJfY2FudmFzLmgiCiAKICNpbmNs
dWRlICJ4bWwvZG9tX2RvY2ltcGwuaCIKLSNpbmNsdWRlICJtaXNjL2h0bWx0YWdzLmgiCisKKyNp
bmNsdWRlICJodG1sbmFtZXMuaCIKIAogI2luY2x1ZGUgPHFwYWludGVyLmg+CiAKQEAgLTM3LDYg
KzM4LDcgQEAKIC8vI2RlZmluZSBCT1hfREVCVUcKIAogdXNpbmcgRE9NOjpEb2N1bWVudEltcGw7
Cit1c2luZyBET006OkhUTUxOYW1lczsKIHVzaW5nIG5hbWVzcGFjZSBraHRtbDsKIAogY29uc3Qg
aW50IGNNYXJrZXJQYWRkaW5nID0gNzsKQEAgLTIxMyw3ICsyMTUsNyBAQCBzdGF0aWMgUmVuZGVy
T2JqZWN0KiBnZXRQYXJlbnRPZkZpcnN0TGluCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
CiAgICAgICAgIGlmIChjdXJyQ2hpbGQtPnN0eWxlKCktPmh0bWxIYWNrcygpICYmIGN1cnJDaGls
ZC0+ZWxlbWVudCgpICYmCi0gICAgICAgICAgICAoY3VyckNoaWxkLT5lbGVtZW50KCktPmlkKCkg
PT0gSURfVUwgfHwgY3VyckNoaWxkLT5lbGVtZW50KCktPmlkKCkgPT0gSURfT0wpKQorICAgICAg
ICAgICAgKGN1cnJDaGlsZC0+ZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dWwoKSl8
fCBjdXJyQ2hpbGQtPmVsZW1lbnQoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9sKCkpKSkKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIFJlbmRlck9iamVjdCogbGlu
ZUJveCA9IGdldFBhcmVudE9mRmlyc3RMaW5lQm94KGN1cnJDaGlsZCwgbWFya2VyKTsKSW5kZXg6
IGtodG1sL3JlbmRlcmluZy9yZW5kZXJfb2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9yZW5kZXJpbmcvcmVuZGVyX29iamVjdC5jcHAsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuMTk0CmRpZmYgLXUgLXAgLXIxLjE5NCBraHRtbC9yZW5kZXJpbmcv
cmVuZGVyX29iamVjdC5jcHAKLS0tIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfb2JqZWN0LmNwcAkx
MSBNYXkgMjAwNSAwMjoxMDoxMCAtMDAwMAkxLjE5NAorKysga2h0bWwvcmVuZGVyaW5nL3JlbmRl
cl9vYmplY3QuY3BwCTIwIEp1biAyMDA1IDIwOjU1OjU0IC0wMDAwCkBAIC00Myw2ICs0Myw3IEBA
CiAjaW5jbHVkZSAicmVuZGVyX2lubGluZS5oIgogI2luY2x1ZGUgInJlbmRlcl9ibG9jay5oIgog
I2luY2x1ZGUgInJlbmRlcl9mbGV4Ym94LmgiCisjaW5jbHVkZSAiaHRtbG5hbWVzLmgiCiAKICNp
ZiBBUFBMRV9DSEFOR0VTCiAvLyBGb3IgYWNjZXNzaWJpbGl0eQpAQCAtMTc1LDE3ICsxNzYsMTcg
QEAgYm9vbCBSZW5kZXJPYmplY3Q6OmlzUm9vdCgpIGNvbnN0CiAKIGJvb2wgUmVuZGVyT2JqZWN0
Ojppc0JvZHkoKSBjb25zdAogewotICAgIHJldHVybiBlbGVtZW50KCkgJiYgZWxlbWVudCgpLT5y
ZW5kZXJlcigpID09IHRoaXMgJiYgZWxlbWVudCgpLT5pZCgpID09IElEX0JPRFk7CisgICAgcmV0
dXJuIGVsZW1lbnQoKSAmJiBlbGVtZW50KCktPnJlbmRlcmVyKCkgPT0gdGhpcyAmJiBlbGVtZW50
KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpib2R5KCkpOwogfQogCiBib29sIFJlbmRlck9iamVj
dDo6aXNIUigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGVsZW1lbnQoKSAmJiBlbGVtZW50KCktPmlk
KCkgPT0gSURfSFI7CisgICAgcmV0dXJuIGVsZW1lbnQoKSAmJiBlbGVtZW50KCktPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjpocigpKTsKIH0KIAogYm9vbCBSZW5kZXJPYmplY3Q6OmlzSFRNTE1hcnF1
ZWUoKSBjb25zdAogewotICAgIHJldHVybiBlbGVtZW50KCkgJiYgZWxlbWVudCgpLT5yZW5kZXJl
cigpID09IHRoaXMgJiYgZWxlbWVudCgpLT5pZCgpID09IElEX01BUlFVRUU7CisgICAgcmV0dXJu
IGVsZW1lbnQoKSAmJiBlbGVtZW50KCktPnJlbmRlcmVyKCkgPT0gdGhpcyAmJiBlbGVtZW50KCkt
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjptYXJxdWVlKCkpOwogfQogCiBib29sIFJlbmRlck9iamVj
dDo6Y2FuSGF2ZUNoaWxkcmVuKCkgY29uc3QKQEAgLTczNyw3ICs3MzgsNyBAQCBib29sIFJlbmRl
ck9iamVjdDo6c2l6ZXNUb01heFdpZHRoKCkgY29uCiAgICAgLy8gYnV0IHRoZXkgYWxsb3cgdGV4
dCB0byBzaXQgb24gdGhlIHNhbWUgbGluZSBhcyB0aGUgbWFycXVlZS4KICAgICBpZiAoaXNGbG9h
dGluZygpIHx8IChpc0NvbXBhY3QoKSAmJiBpc0lubGluZSgpKSB8fCAKICAgICAgICAgKGlzSW5s
aW5lQmxvY2tPcklubGluZVRhYmxlKCkgJiYgIWlzSFRNTE1hcnF1ZWUoKSkgfHwKLSAgICAgICAg
KGVsZW1lbnQoKSAmJiAoZWxlbWVudCgpLT5pZCgpID09IElEX0JVVFRPTiB8fCBlbGVtZW50KCkt
PmlkKCkgPT0gSURfTEVHRU5EKSkpCisgICAgICAgIChlbGVtZW50KCkgJiYgKGVsZW1lbnQoKS0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJ1dHRvbigpKSB8fCBlbGVtZW50KCktPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjpsZWdlbmQoKSkpKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgCiAgICAg
Ly8gQ2hpbGRyZW4gb2YgYSBob3Jpem9udGFsIG1hcnF1ZWUgZG8gbm90IGZpbGwgdGhlIGNvbnRh
aW5lciBieSBkZWZhdWx0LgpAQCAtMTMyNiw3ICsxMzI3LDcgQEAgUVN0cmluZyBSZW5kZXJPYmpl
Y3Q6OmluZm9ybWF0aW9uKCkgY29ucwogICAgIGlmIChlbGVtZW50KCkgJiYgZWxlbWVudCgpLT5h
Y3RpdmUoKSkgdHMgPDwgImFjdCAiOwogICAgIGlmIChlbGVtZW50KCkgJiYgZWxlbWVudCgpLT5p
c0xpbmsoKSkgdHMgPDwgImFuY2hvciAiOwogICAgIGlmIChlbGVtZW50KCkgJiYgZWxlbWVudCgp
LT5mb2N1c2VkKCkpIHRzIDw8ICJmb2N1cyAiOwotICAgIGlmIChlbGVtZW50KCkpIHRzIDw8ICIg
PCIgPDwgIGdldFRhZ05hbWUoZWxlbWVudCgpLT5pZCgpKS5zdHJpbmcoKSA8PCAiPiI7CisgICAg
aWYgKGVsZW1lbnQoKSkgdHMgPDwgIiA8IiA8PCAgZWxlbWVudCgpLT5sb2NhbE5hbWUoKS5zdHJp
bmcoKSA8PCAiPiI7CiAgICAgdHMgPDwgIiAoIiA8PCB4UG9zKCkgPDwgIiwiIDw8IHlQb3MoKSA8
PCAiLCIgPDwgd2lkdGgoKSA8PCAiLCIgPDwgaGVpZ2h0KCkgPDwgIikiCiAJPDwgKGlzVGFibGVD
ZWxsKCkgPwogCSAgICAoIFFTdHJpbmc6OmZyb21MYXRpbjEoIiBbcj0iKSArCkBAIC0xNTUwLDcg
KzE1NTEsNyBAQCB2b2lkIFJlbmRlck9iamVjdDo6c2V0U3R5bGUoUmVuZGVyU3R5bGUgCiAgICAg
ICAgIC8vIFRoZSBiYWNrZ3JvdW5kIG9mIHRoZSByb290IGVsZW1lbnQgb3IgdGhlIGJvZHkgZWxl
bWVudCBjb3VsZCBwcm9wYWdhdGUgdXAgdG8KICAgICAgICAgLy8gdGhlIGNhbnZhcy4gIEp1c3Qg
ZGlydHkgdGhlIGVudGlyZSBjYW52YXMgd2hlbiBvdXIgc3R5bGUgY2hhbmdlcyBzdWJzdGFudGlh
bGx5LgogICAgICAgICBpZiAoZCA+PSBSZW5kZXJTdHlsZTo6UmVwYWludCAmJiBlbGVtZW50KCkg
JiYKLSAgICAgICAgICAgIChlbGVtZW50KCktPmlkKCkgPT0gSURfSFRNTCB8fCBlbGVtZW50KCkt
PmlkKCkgPT0gSURfQk9EWSkpCisgICAgICAgICAgICAoZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6aHRtbCgpKSB8fCBlbGVtZW50KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpib2R5
KCkpKSkKICAgICAgICAgICAgIGNhbnZhcygpLT5yZXBhaW50KCk7CiAgICAgICAgIGVsc2UgaWYg
KG1fcGFyZW50ICYmICFpc1RleHQoKSkgewogICAgICAgICAgICAgLy8gRG8gYSByZXBhaW50IHdp
dGggdGhlIG9sZCBzdHlsZSBmaXJzdCwgZS5nLiwgZm9yIGV4YW1wbGUgaWYgd2UgZ28gZnJvbQpA
QCAtMjE4Miw3ICsyMTgzLDcgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OmdldFRleHREZWNvcmF0aW9u
Q29sbwogICAgICAgICBpZiAoY3VyciAmJiBjdXJyLT5pc1JlbmRlckJsb2NrKCkgJiYgY3Vyci0+
Y29udGludWF0aW9uKCkpCiAgICAgICAgICAgICBjdXJyID0gY3Vyci0+Y29udGludWF0aW9uKCk7
CiAgICAgfSB3aGlsZSAoY3VyciAmJiBkZWNvcmF0aW9ucyAmJiAoIXF1aXJrc01vZGUgfHwgIWN1
cnItPmVsZW1lbnQoKSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChj
dXJyLT5lbGVtZW50KCktPmlkKCkgIT0gSURfQSAmJiBjdXJyLT5lbGVtZW50KCktPmlkKCkgIT0g
SURfRk9OVCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIWN1cnIt
PmVsZW1lbnQoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmEoKSkgJiYgIWN1cnItPmVsZW1lbnQo
KS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZvbnQoKSkpKSk7CiAKICAgICAvLyBJZiB3ZSBiYWls
ZWQgb3V0LCB1c2UgdGhlIGVsZW1lbnQgd2UgYmFpbGVkIG91dCBhdCAodHlwaWNhbGx5IGEgPGZv
bnQ+IG9yIDxhPiBlbGVtZW50KS4KICAgICBpZiAoZGVjb3JhdGlvbnMgJiYgY3VycikgewpAQCAt
MjMxNiw3ICsyMzE3LDcgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OnNldFBpeG1hcChjb25zdCBRUGl4
bQogICAgIC8vIHdvdWxkIGF2b2lkIHB1dHRpbmcgdGhpcyBmdW5jdGlvbiBhbmQgdGhlIENhY2hl
ZE9iamVjdENsaWVudCBiYXNlIGNsYXNzIGludG8gUmVuZGVyT2JqZWN0LgogCiAgICAgaWYgKGlt
YWdlICYmIGltYWdlLT5waXhtYXBfc2l6ZSgpID09IGltYWdlLT52YWxpZF9yZWN0KCkuc2l6ZSgp
ICYmIHBhcmVudCgpKSB7Ci0gICAgICAgIGlmIChjYW52YXMoKSAmJiBlbGVtZW50KCkgJiYgKGVs
ZW1lbnQoKS0+aWQoKSA9PSBJRF9IVE1MIHx8IGVsZW1lbnQoKS0+aWQoKSA9PSBJRF9CT0RZKSkK
KyAgICAgICAgaWYgKGNhbnZhcygpICYmIGVsZW1lbnQoKSAmJiAoZWxlbWVudCgpLT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6aHRtbCgpKSB8fCBlbGVtZW50KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVz
Ojpib2R5KCkpKSkKICAgICAgICAgICAgIGNhbnZhcygpLT5yZXBhaW50KCk7ICAgIC8vIHJlcGFp
bnQgdGhlIGVudGlyZSBjYW52YXMgc2luY2UgdGhlIGJhY2tncm91bmQgZ2V0cyBwcm9wYWdhdGVk
IHVwCiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJlcGFpbnQoKTsgICAgICAgICAgICAgIC8v
IHJlcGFpbnQgb2JqZWN0LCB3aGljaCBpcyBhIGJveCBvciBhIGNvbnRhaW5lciB3aXRoIGJveGVz
IGluc2lkZSBpdApJbmRleDoga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl90YWJsZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl90
YWJsZS5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTI2CmRpZmYgLXUgLXAgLXIxLjEyNiBr
aHRtbC9yZW5kZXJpbmcvcmVuZGVyX3RhYmxlLmNwcAotLS0ga2h0bWwvcmVuZGVyaW5nL3JlbmRl
cl90YWJsZS5jcHAJMTEgTWF5IDIwMDUgMDI6MTA6MTAgLTAwMDAJMS4xMjYKKysrIGtodG1sL3Jl
bmRlcmluZy9yZW5kZXJfdGFibGUuY3BwCTIwIEp1biAyMDA1IDIwOjU1OjU2IC0wMDAwCkBAIC0z
MSw4ICszMSw4IEBACiAjaW5jbHVkZSAicmVuZGVyaW5nL3JlbmRlcl90YWJsZS5oIgogI2luY2x1
ZGUgInJlbmRlcmluZy90YWJsZV9sYXlvdXQuaCIKICNpbmNsdWRlICJodG1sL2h0bWxfdGFibGVp
bXBsLmgiCi0jaW5jbHVkZSAibWlzYy9odG1sdGFncy5oIgogI2luY2x1ZGUgIm1pc2MvaHRtbGF0
dHJzLmgiCisjaW5jbHVkZSAiaHRtbG5hbWVzLmgiCiAjaW5jbHVkZSAieG1sL2RvbV9kb2NpbXBs
LmgiCiAKICNpbmNsdWRlIDxrZ2xvYmFsLmg+CkBAIC0xMTIsNyArMTEyLDcgQEAgdm9pZCBSZW5k
ZXJUYWJsZTo6YWRkQ2hpbGQoUmVuZGVyT2JqZWN0IAogI2VuZGlmCiAgICAgUmVuZGVyT2JqZWN0
ICpvID0gY2hpbGQ7CiAKLSAgICBpZiAoY2hpbGQtPmVsZW1lbnQoKSAmJiBjaGlsZC0+ZWxlbWVu
dCgpLT5pZCgpID09IElEX0ZPUk0pIHsKKyAgICBpZiAoY2hpbGQtPmVsZW1lbnQoKSAmJiBjaGls
ZC0+ZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Zm9ybSgpKSkgewogICAgICAgICBS
ZW5kZXJDb250YWluZXI6OmFkZENoaWxkKGNoaWxkLGJlZm9yZUNoaWxkKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KQEAgLTI2Miw3ICsyNjIsNyBAQCB2b2lkIFJlbmRlclRhYmxlOjpsYXlvdXQo
KQogCiAgICAgUmVuZGVyT2JqZWN0ICpjaGlsZCA9IGZpcnN0Q2hpbGQoKTsKICAgICB3aGlsZSgg
Y2hpbGQgKSB7Ci0JaWYgKCBjaGlsZC0+bmVlZHNMYXlvdXQoKSAmJiAhKGNoaWxkLT5lbGVtZW50
KCkgJiYgY2hpbGQtPmVsZW1lbnQoKS0+aWQoKSA9PSBJRF9GT1JNKSkKKwlpZiAoIGNoaWxkLT5u
ZWVkc0xheW91dCgpICYmICEoY2hpbGQtPmVsZW1lbnQoKSAmJiBjaGlsZC0+ZWxlbWVudCgpLT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6Zm9ybSgpKSkpCiAJICAgIGNoaWxkLT5sYXlvdXQoKTsKIAlp
ZiAoIGNoaWxkLT5pc1RhYmxlU2VjdGlvbigpICkgewogCSAgICBzdGF0aWNfY2FzdDxSZW5kZXJU
YWJsZVNlY3Rpb24gKj4oY2hpbGQpLT5jYWxjUm93SGVpZ2h0KCk7CkBAIC04NDksNyArODQ5LDcg
QEAgdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OmFkZENoaWxkKFJlbmRlcgogI2VuZGlmCiAgICAg
UmVuZGVyT2JqZWN0ICpyb3cgPSBjaGlsZDsKIAotICAgIGlmIChjaGlsZC0+ZWxlbWVudCgpICYm
IGNoaWxkLT5lbGVtZW50KCktPmlkKCkgPT0gSURfRk9STSkgeworICAgIGlmIChjaGlsZC0+ZWxl
bWVudCgpICYmIGNoaWxkLT5lbGVtZW50KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpmb3JtKCkp
KSB7CiAgICAgICAgIFJlbmRlckNvbnRhaW5lcjo6YWRkQ2hpbGQoY2hpbGQsYmVmb3JlQ2hpbGQp
OwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTQ5NSw3ICsxNDk1LDcgQEAgdm9pZCBSZW5k
ZXJUYWJsZVJvdzo6YWRkQ2hpbGQoUmVuZGVyT2JqZQogICAgIGtkRGVidWcoIDYwNDAgKSA8PCBy
ZW5kZXJOYW1lKCkgPDwgIihUYWJsZVJvdyk6OmFkZENoaWxkKCAiIDw8IGNoaWxkLT5yZW5kZXJO
YW1lKCkgPDwgIiApIiAgPDwgIiwgIiA8PAogICAgICAgICAgICAgICAgICAgICAgICAoYmVmb3Jl
Q2hpbGQgPyBiZWZvcmVDaGlsZC0+cmVuZGVyTmFtZSgpIDogIjAiKSA8PCAiICkiIDw8IGVuZGw7
CiAjZW5kaWYKLSAgICBpZiAoY2hpbGQtPmVsZW1lbnQoKSAmJiBjaGlsZC0+ZWxlbWVudCgpLT5p
ZCgpID09IElEX0ZPUk0pIHsKKyAgICBpZiAoY2hpbGQtPmVsZW1lbnQoKSAmJiBjaGlsZC0+ZWxl
bWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Zm9ybSgpKSkgewogICAgICAgICBSZW5kZXJD
b250YWluZXI6OmFkZENoaWxkKGNoaWxkLGJlZm9yZUNoaWxkKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KQEAgLTE2MDYsNyArMTYwNiw3IEBAIHZvaWQgUmVuZGVyVGFibGVDZWxsOjp1cGRhdGVG
cm9tRWxlbWVudCgKICAgICBpbnQgb2xkUlNwYW4gPSByU3BhbjsKICAgICBpbnQgb2xkQ1NwYW4g
PSBjU3BhbjsKICAgICBET006Ok5vZGVJbXBsKiBub2RlID0gZWxlbWVudCgpOwotICAgIGlmIChu
b2RlICYmIChub2RlLT5pZCgpID09IElEX1REIHx8IG5vZGUtPmlkKCkgPT0gSURfVEgpKSB7Cisg
ICAgaWYgKG5vZGUgJiYgKG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0ZCgpKSB8fCBub2Rl
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGgoKSkpKSB7CiAgICAgICAgIERPTTo6SFRNTFRhYmxl
Q2VsbEVsZW1lbnRJbXBsICp0YyA9IHN0YXRpY19jYXN0PERPTTo6SFRNTFRhYmxlQ2VsbEVsZW1l
bnRJbXBsICo+KG5vZGUpOwogICAgICAgICBjU3BhbiA9IHRjLT5jb2xTcGFuKCk7CiAgICAgICAg
IHJTcGFuID0gdGMtPnJvd1NwYW4oKTsKQEAgLTIyOTAsNyArMjI5MCw3IEBAIHZvaWQgUmVuZGVy
VGFibGVDb2w6OnVwZGF0ZUZyb21FbGVtZW50KCkKIHsKICAgICBpbnQgb2xkU3BhbiA9IF9zcGFu
OwogICAgIERPTTo6Tm9kZUltcGwgKm5vZGUgPSBlbGVtZW50KCk7Ci0gICAgaWYgKG5vZGUgJiYg
KG5vZGUtPmlkKCkgPT0gSURfQ09MIHx8IG5vZGUtPmlkKCkgPT0gSURfQ09MR1JPVVApKSB7Cisg
ICAgaWYgKG5vZGUgJiYgKG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpjb2woKSkgfHwgbm9k
ZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmNvbGdyb3VwKCkpKSkgewogICAgICAgICBET006OkhU
TUxUYWJsZUNvbEVsZW1lbnRJbXBsICp0YyA9IHN0YXRpY19jYXN0PERPTTo6SFRNTFRhYmxlQ29s
RWxlbWVudEltcGwgKj4obm9kZSk7CiAgICAgICAgIF9zcGFuID0gdGMtPnNwYW4oKTsKICAgICB9
IApJbmRleDoga2h0bWwveG1sL2RvbV9hdG9taWNzdHJpbmcuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3htbC9kb21fYXRvbWljc3RyaW5nLmNwcCx2CnJl
dHJpZXZpbmcgcmV2aXNpb24gMS4zCmRpZmYgLXUgLXAgLXIxLjMga2h0bWwveG1sL2RvbV9hdG9t
aWNzdHJpbmcuY3BwCi0tLSBraHRtbC94bWwvZG9tX2F0b21pY3N0cmluZy5jcHAJNSBGZWIgMjAw
NCAwMTo0NToxNiAtMDAwMAkxLjMKKysrIGtodG1sL3htbC9kb21fYXRvbWljc3RyaW5nLmNwcAky
MCBKdW4gMjAwNSAyMDo1NTo1NiAtMDAwMApAQCAtMzA0LDYgKzMwNCw5IEBAIHZvaWQgQXRvbWlj
U3RyaW5nOjpyZWhhc2goaW50IG5ld1RhYmxlU2kKIAogICAgIGV4dGVybiBjb25zdCBBdG9taWNT
dHJpbmcgbnVsbEF0b207CiAgICAgZXh0ZXJuIGNvbnN0IEF0b21pY1N0cmluZyBlbXB0eUF0b207
CisgICAgZXh0ZXJuIGNvbnN0IEF0b21pY1N0cmluZyB0ZXh0QXRvbTsKKyAgICBleHRlcm4gY29u
c3QgQXRvbWljU3RyaW5nIGNvbW1lbnRBdG9tOworICAgIGV4dGVybiBjb25zdCBBdG9taWNTdHJp
bmcgc3RhckF0b207CiAjZWxzZQogICAgIC8vIERlZmluZSBhbiBBdG9taWNTdHJpbmctc2l6ZWQg
YXJyYXkgb2YgcG9pbnRlcnMgdG8gYXZvaWQgc3RhdGljIGluaXRpYWxpemF0aW9uLgogICAgIC8v
IFVzZSBhbiBhcnJheSBvZiBwb2ludGVycyBpbnN0ZWFkIG9mIGFuIGFycmF5IG9mIGNoYXIgaW4g
Y2FzZSB0aGVyZSBpcyBzb21lIGFsaWdubWVudCBpc3N1ZS4KQEAgLTMxMiw2ICszMTUsOSBAQCB2
b2lkIEF0b21pY1N0cmluZzo6cmVoYXNoKGludCBuZXdUYWJsZVNpCiAKICAgICBERUZJTkVfR0xP
QkFMKG51bGwsIGlnbm9yZWQpCiAgICAgREVGSU5FX0dMT0JBTChlbXB0eSwgaWdub3JlZCkKKyAg
ICBERUZJTkVfR0xPQkFMKHRleHQsIGlnbm9yZWQpCisgICAgREVGSU5FX0dMT0JBTChjb21tZW50
LCBpZ25vcmVkKQorICAgIERFRklORV9HTE9CQUwoc3RhciwgaWdub3JlZCkKICNlbmRpZgogCiAj
ZGVmaW5lIENBTExfREVGSU5FX0dMT0JBTChuYW1lKSBERUZJTkVfR0xPQkFMKG5hbWUsICNuYW1l
KQpAQCAtMzI1LDcgKzMzMSwxMCBAQCB2b2lkIEF0b21pY1N0cmluZzo6aW5pdCgpCiAgICAgICAg
IC8vIFVzZSBwbGFjZW1lbnQgbmV3IHRvIGluaXRpYWxpemUgdGhlIGdsb2JhbHMuCiAgICAgICAg
IG5ldyAoJm51bGxBdG9tKSBBdG9taWNTdHJpbmc7CiAgICAgICAgIG5ldyAoJmVtcHR5QXRvbSkg
QXRvbWljU3RyaW5nKCIiKTsKLSAgICAgICAgCisgICAgICAgIG5ldyAoJnRleHRBdG9tKSBBdG9t
aWNTdHJpbmcoIiN0ZXh0Iik7CisgICAgICAgIG5ldyAoJmNvbW1lbnRBdG9tKSBBdG9taWNTdHJp
bmcoIiNjb21tZW50Iik7CisgICAgICAgIG5ldyAoJnN0YXJBdG9tKSBBdG9taWNTdHJpbmcoIioi
KTsKKwogICAgICAgICAjZGVmaW5lIFBMQUNFTUVOVF9ORVdfR0xPQkFMKG5hbWUsIHN0cmluZykg
bmV3ICgmbmFtZSAjIyBQcm9wZXJ0eU5hbWUpIEF0b21pY1N0cmluZyhzdHJpbmcpOwogICAgICAg
ICAjZGVmaW5lIENBTExfUExBQ0VNRU5UX05FV19HTE9CQUwobmFtZSkgUExBQ0VNRU5UX05FV19H
TE9CQUwobmFtZSwgI25hbWUpCiAgICAgICAgIEtIVE1MX0FUT01JQ1NUUklOR19FQUNIX0dMT0JB
TChDQUxMX1BMQUNFTUVOVF9ORVdfR0xPQkFMKQpJbmRleDoga2h0bWwveG1sL2RvbV9hdG9taWNz
dHJpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC94bWwv
ZG9tX2F0b21pY3N0cmluZy5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIKZGlmZiAtdSAtcCAt
cjEuMiBraHRtbC94bWwvZG9tX2F0b21pY3N0cmluZy5oCi0tLSBraHRtbC94bWwvZG9tX2F0b21p
Y3N0cmluZy5oCTMgTWFyIDIwMDQgMDA6NDI6NDkgLTAwMDAJMS4yCisrKyBraHRtbC94bWwvZG9t
X2F0b21pY3N0cmluZy5oCTIwIEp1biAyMDA1IDIwOjU1OjU2IC0wMDAwCkBAIC0xMTUsNiArMTE1
LDkgQEAgaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBdG9taWNTdHJpbgogI2lmICFLSFRN
TF9BVE9NSUNTVFJJTkdfSElERV9HTE9CQUxTCiAgICAgZXh0ZXJuIGNvbnN0IEF0b21pY1N0cmlu
ZyBudWxsQXRvbTsKICAgICBleHRlcm4gY29uc3QgQXRvbWljU3RyaW5nIGVtcHR5QXRvbTsKKyAg
ICBleHRlcm4gY29uc3QgQXRvbWljU3RyaW5nIHRleHRBdG9tOworICAgIGV4dGVybiBjb25zdCBB
dG9taWNTdHJpbmcgY29tbWVudEF0b207CisgICAgZXh0ZXJuIGNvbnN0IEF0b21pY1N0cmluZyBz
dGFyQXRvbTsKICNkZWZpbmUgS0hUTUxfQVRPTUlDU1RSSU5HX0RFQ0xBUkVfR0xPQkFMKG5hbWUp
IGV4dGVybiBjb25zdCBBdG9taWNTdHJpbmcgbmFtZSAjIyBQcm9wZXJ0eU5hbWU7CiAgICAgS0hU
TUxfQVRPTUlDU1RSSU5HX0VBQ0hfR0xPQkFMKEtIVE1MX0FUT01JQ1NUUklOR19ERUNMQVJFX0dM
T0JBTCkKICAgICBLSFRNTF9BVE9NSUNTVFJJTkdfREVDTEFSRV9HTE9CQUwoc3BlY2lhbFByb3Rv
dHlwZSkKSW5kZXg6IGtodG1sL3htbC9kb21fZG9jaW1wbC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3htbC9kb21fZG9jaW1wbC5oLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjExNApkaWZmIC11IC1wIC1yMS4xMTQga2h0bWwveG1sL2RvbV9kb2NpbXBsLmgK
LS0tIGtodG1sL3htbC9kb21fZG9jaW1wbC5oCTEzIE1heSAyMDA1IDE2OjQ4OjUxIC0wMDAwCTEu
MTE0CisrKyBraHRtbC94bWwvZG9tX2RvY2ltcGwuaAkyMCBKdW4gMjAwNSAyMDo1NTo1NyAtMDAw
MApAQCAtMjE3LDggKzIxNyw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNEb2N1bWVu
dE5vZGUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBib29sIGlzSFRNTERv
Y3VtZW50KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIEVsZW1lbnRJbXBsICpjcmVh
dGVIVE1MRWxlbWVudChjb25zdCBET01TdHJpbmcgJnRhZ05hbWUsIGludCAmZXhjZXB0aW9uY29k
ZSk7Ci0gICAgRWxlbWVudEltcGwgKmNyZWF0ZUhUTUxFbGVtZW50KHVuc2lnbmVkIHNob3J0IHRh
Z0lEKTsKKyAgICBFbGVtZW50SW1wbCogY3JlYXRlSFRNTEVsZW1lbnQoY29uc3QgRE9NU3RyaW5n
ICZ0YWdOYW1lLCBpbnQgJmV4Y2VwdGlvbmNvZGUpOworICAgIEVsZW1lbnRJbXBsKiBjcmVhdGVI
VE1MRWxlbWVudChjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSk7CiAKICAgICBraHRtbDo6
Q1NTU3R5bGVTZWxlY3RvciAqc3R5bGVTZWxlY3RvcigpIHsgcmV0dXJuIG1fc3R5bGVTZWxlY3Rv
cjsgfQogCkBAIC0zOTgsOSArMzk4LDYgQEAgcHVibGljOgogICAgIC8vICMjIyB0aGluayBhYm91
dCBpbXBsZW1lbnRpbmcgcmVmJ2NvdW50aW5nIGZvciB0aGUgaWQncwogICAgIC8vIGluIG9yZGVy
IHRvIGJlIGFibGUgdG8gcmVhc3NpZ24gdGhvc2UgdGhhdCBhcmUgbm8gbG9uZ2VyIGluIHVzZQog
ICAgIC8vIChjb3VsZCBtYWtlIHByb2JsZW1zIHdoZW4gaXQgaXMgc3RpbGwga2VwdCBzb21ld2hl
cmUgYXJvdW5kLCBpLmUuIHN0eWxlc2VsZWN0b3IpCi0gICAgTm9kZUltcGw6OklkIHRhZ0lkKERP
TVN0cmluZ0ltcGwqIF9uYW1lc3BhY2VVUkksIERPTVN0cmluZ0ltcGwgKl9uYW1lLCBib29sIHJl
YWRvbmx5KTsKLSAgICBET01TdHJpbmcgdGFnTmFtZShOb2RlSW1wbDo6SWQgX2lkKSBjb25zdDsK
LQogICAgIE5vZGVJbXBsOjpJZCBhdHRySWQoRE9NU3RyaW5nSW1wbCogX25hbWVzcGFjZVVSSSwg
RE9NU3RyaW5nSW1wbCAqX25hbWUsIGJvb2wgcmVhZG9ubHkpOwogICAgIERPTVN0cmluZyBhdHRy
TmFtZShOb2RlSW1wbDo6SWQgX2lkKSBjb25zdDsKIApJbmRleDoga2h0bWwveG1sL2RvbV9lbGVt
ZW50aW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwv
eG1sL2RvbV9lbGVtZW50aW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNjcKZGlmZiAt
dSAtcCAtcjEuNjcga2h0bWwveG1sL2RvbV9lbGVtZW50aW1wbC5jcHAKLS0tIGtodG1sL3htbC9k
b21fZWxlbWVudGltcGwuY3BwCTExIE1heSAyMDA1IDA1OjQ5OjM1IC0wMDAwCTEuNjcKKysrIGto
dG1sL3htbC9kb21fZWxlbWVudGltcGwuY3BwCTIwIEp1biAyMDA1IDIwOjU1OjU4IC0wMDAwCkBA
IC05MCwxOCArOTAsMTggQEAgdW5zaWduZWQgc2hvcnQgQXR0ckltcGw6Om5vZGVUeXBlKCkgY29u
cwogICAgIHJldHVybiBOb2RlOjpBVFRSSUJVVEVfTk9ERTsKIH0KIAotRE9NU3RyaW5nIEF0dHJJ
bXBsOjpwcmVmaXgoKSBjb25zdAorY29uc3QgQXRvbWljU3RyaW5nJiBBdHRySW1wbDo6cHJlZml4
KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9hdHRyaWJ1dGUtPnByZWZpeCgpOwogfQogCi12b2lk
IEF0dHJJbXBsOjpzZXRQcmVmaXgoY29uc3QgRE9NU3RyaW5nICZfcHJlZml4LCBpbnQgJmV4Y2Vw
dGlvbmNvZGUgKQordm9pZCBBdHRySW1wbDo6c2V0UHJlZml4KGNvbnN0IEF0b21pY1N0cmluZyAm
X3ByZWZpeCwgaW50ICZleGNlcHRpb25jb2RlICkKIHsKICAgICBjaGVja1NldFByZWZpeChfcHJl
Zml4LCBleGNlcHRpb25jb2RlKTsKICAgICBpZiAoZXhjZXB0aW9uY29kZSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgbV9hdHRyaWJ1dGUtPnNldFByZWZpeChfcHJlZml4LmltcGxlbWVudGF0aW9u
KCkpOworICAgIG1fYXR0cmlidXRlLT5zZXRQcmVmaXgoX3ByZWZpeCk7CiB9CiAKIERPTVN0cmlu
ZyBBdHRySW1wbDo6bm9kZVZhbHVlKCkgY29uc3QKQEAgLTIwNiw3ICsyMDYsNiBAQCBFbGVtZW50
SW1wbDo6RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvCiAgICAgOiBDb250YWluZXJOb2RlSW1w
bChkb2MpCiB7CiAgICAgbmFtZWRBdHRyTWFwID0gMDsKLSAgICBtX3ByZWZpeCA9IDA7CiB9CiAK
IEVsZW1lbnRJbXBsOjp+RWxlbWVudEltcGwoKQpAQCAtMjE1LDkgKzIxNCw2IEBAIEVsZW1lbnRJ
bXBsOjp+RWxlbWVudEltcGwoKQogICAgICAgICBuYW1lZEF0dHJNYXAtPmRldGFjaEZyb21FbGVt
ZW50KCk7CiAgICAgICAgIG5hbWVkQXR0ck1hcC0+ZGVyZWYoKTsKICAgICB9Ci0KLSAgICBpZiAo
bV9wcmVmaXgpCi0gICAgICAgIG1fcHJlZml4LT5kZXJlZigpOwogfQogCiB2b2lkIEVsZW1lbnRJ
bXBsOjpyZW1vdmVBdHRyaWJ1dGUoIE5vZGVJbXBsOjpJZCBpZCwgaW50ICZleGNlcHRpb25jb2Rl
ICkKQEAgLTM1MSwzNiArMzQ3LDI1IEBAIHZvaWQgRWxlbWVudEltcGw6OnNldEF0dHJpYnV0ZU1h
cCggTmFtZWQKIGJvb2wgRWxlbWVudEltcGw6Omhhc0F0dHJpYnV0ZXMoKSBjb25zdAogewogICAg
IHVwZGF0ZVN0eWxlQXR0cmlidXRlSWZOZWVkZWQoKTsKLQogICAgIHJldHVybiBuYW1lZEF0dHJN
YXAgJiYgbmFtZWRBdHRyTWFwLT5sZW5ndGgoKSA+IDA7CiB9CiAKIERPTVN0cmluZyBFbGVtZW50
SW1wbDo6bm9kZU5hbWUoKSBjb25zdAogewotICAgIHJldHVybiB0YWdOYW1lKCk7Ci19Ci0KLURP
TVN0cmluZyBFbGVtZW50SW1wbDo6dGFnTmFtZSgpIGNvbnN0Ci17CiAgICAgRE9NU3RyaW5nIHRu
ID0gZ2V0RG9jdW1lbnQoKS0+dGFnTmFtZShpZCgpKTsKLQotICAgIGlmIChtX3ByZWZpeCkKLSAg
ICAgICAgcmV0dXJuIERPTVN0cmluZyhtX3ByZWZpeCkgKyAiOiIgKyB0bjsKLQorICAgIGlmICht
X3RhZ05hbWUuaGFzUHJlZml4KCkpCisgICAgICAgIHJldHVybiBET01TdHJpbmcobV90YWdOYW1l
LnByZWZpeCgpKSArICI6IiArIHRuOwogICAgIHJldHVybiB0bjsKIH0KIAotdm9pZCBFbGVtZW50
SW1wbDo6c2V0UHJlZml4KCBjb25zdCBET01TdHJpbmcgJl9wcmVmaXgsIGludCAmZXhjZXB0aW9u
Y29kZSApCit2b2lkIEVsZW1lbnRJbXBsOjpzZXRQcmVmaXgoY29uc3QgQXRvbWljU3RyaW5nICZf
cHJlZml4LCBpbnQgJmV4Y2VwdGlvbmNvZGUpCiB7CiAgICAgY2hlY2tTZXRQcmVmaXgoX3ByZWZp
eCwgZXhjZXB0aW9uY29kZSk7CiAgICAgaWYgKGV4Y2VwdGlvbmNvZGUpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGlmIChtX3ByZWZpeCkKLSAgICAgICAgbV9wcmVmaXgtPmRlcmVmKCk7Ci0gICAg
bV9wcmVmaXggPSBfcHJlZml4LmltcGxlbWVudGF0aW9uKCk7Ci0gICAgaWYgKG1fcHJlZml4KQot
ICAgICAgICBtX3ByZWZpeC0+cmVmKCk7CisgICAgLy8gRklYTUU6IFRoaXMgaXMganVzdCBhIGhh
Y2sgZm9yIHN0YWdlIG9uZSBvZiB0aGUgVGFnTmFtZSBwYXRjaC4gIEl0IHdpbGwgY2hhbmdlLgor
ICAgIG1fdGFnTmFtZS5zZXRQcmVmaXgoX3ByZWZpeCk7CiB9CiAKIHZvaWQgRWxlbWVudEltcGw6
OmNyZWF0ZUF0dHJpYnV0ZU1hcCgpIGNvbnN0CkBAIC03ODIsMTUgKzc2NywxOSBAQCBYTUxFbGVt
ZW50SW1wbDo6WE1MRWxlbWVudEltcGwoRG9jdW1lbnRQCiAgICAgICAgIGxvY2FsTmFtZS0+cmVt
b3ZlKDAsY29sb25wb3MrMSk7CiAgICAgICAgIG1faWQgPSBkb2MtPmRvY3VtZW50KCktPnRhZ0lk
KF9uYW1lc3BhY2VVUkksIGxvY2FsTmFtZSwgZmFsc2UgLyogYWxsb2NhdGUgKi8pOwogICAgICAg
ICBsb2NhbE5hbWUtPmRlcmVmKCk7Ci0gICAgICAgIG1fcHJlZml4ID0gX3F1YWxpZmllZE5hbWUt
PmNvcHkoKTsKLSAgICAgICAgbV9wcmVmaXgtPnJlZigpOwotICAgICAgICBtX3ByZWZpeC0+dHJ1
bmNhdGUoY29sb25wb3MpOworICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMgYSB0
ZW1wb3Jhcnkgc2l0dWF0aW9uIGZvciBzdGFnZSBvbmUgb2YgdGhlIFF1YWxpZmllZE5hbWUgcGF0
Y2guICBUaGlzIGlzIGFsc28gYSByZWFsbHkgc3R1cGlkIHdheSB0bworICAgICAgICAvLyBoYXZl
IHRvIGhhbmRsZSB0aGUgcHJlZml4LiAgV2F5IHRvbyBtdWNoIGNvcHlpbmcuICBXZSBzaG91bGQg
bWFrZSBzdXJlIHRoZSBYTUwgdG9rZW5pemVyIGhhcyBkb25lIHRoZSBzcGxpdAorICAgICAgICAv
LyBhbHJlYWR5IGludG8gcHJlZml4IGFuZCBsb2NhbE5hbWUuCisgICAgICAgIERPTVN0cmluZ0lt
cGwqIHByZWZpeCA9IF9xdWFsaWZpZWROYW1lLT5jb3B5KCk7CisgICAgICAgIHByZWZpeC0+cmVm
KCk7CisgICAgICAgIHByZWZpeC0+dHJ1bmNhdGUoY29sb25wb3MpOworICAgICAgICBtX3RhZ05h
bWUgPSBRdWFsaWZpZWROYW1lKHByZWZpeCwgbnVsbEF0b20sIG51bGxBdG9tKTsKKyAgICAgICAg
cHJlZml4LT5kZXJlZigpOwogICAgIH0KLSAgICBlbHNlIHsKKyAgICBlbHNlCiAgICAgICAgIC8v
IG5vIHByZWZpeAogICAgICAgICBtX2lkID0gZG9jLT5kb2N1bWVudCgpLT50YWdJZChfbmFtZXNw
YWNlVVJJLCBfcXVhbGlmaWVkTmFtZSwgZmFsc2UgLyogYWxsb2NhdGUgKi8pOwotICAgICAgICBt
X3ByZWZpeCA9IDA7Ci0gICAgfQogfQogCiBYTUxFbGVtZW50SW1wbDo6flhNTEVsZW1lbnRJbXBs
KCkKSW5kZXg6IGtodG1sL3htbC9kb21fZWxlbWVudGltcGwuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC94bWwvZG9tX2VsZW1lbnRpbXBsLmgsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuNDEKZGlmZiAtdSAtcCAtcjEuNDEga2h0bWwveG1sL2RvbV9lbGVtZW50
aW1wbC5oCi0tLSBraHRtbC94bWwvZG9tX2VsZW1lbnRpbXBsLmgJMTIgTWF5IDIwMDUgMTc6MTE6
MjIgLTAwMDAJMS40MQorKysga2h0bWwveG1sL2RvbV9lbGVtZW50aW1wbC5oCTIwIEp1biAyMDA1
IDIwOjU1OjU5IC0wMDAwCkBAIC0yMywxMyArMjMsMTQgQEAKICAqIEJvc3RvbiwgTUEgMDIxMTEt
MTMwNywgVVNBLgogICoKICAqLwotI2lmbmRlZiBfRE9NX0VMRU1FTlRJbXBsX2hfCi0jZGVmaW5l
IF9ET01fRUxFTUVOVEltcGxfaF8KKyNpZm5kZWYgX0RPTV9FTEVNRU5USU1QTF9oXworI2RlZmlu
ZSBfRE9NX0VMRU1FTlRJTVBMX2hfCiAKICNpbmNsdWRlICJkb21fbm9kZWltcGwuaCIKICNpbmNs
dWRlICJ4bWwvZG9tX3N0cmluZ2ltcGwuaCIKICNpbmNsdWRlICJtaXNjL3NoYXJlZC5oIgogI2lu
Y2x1ZGUgImNzcy9jc3NfdmFsdWVpbXBsLmgiCisjaW5jbHVkZSAiZG9tX3FuYW1lLmgiCiAKICNp
ZiBBUFBMRV9DSEFOR0VTCiAjaWZkZWYgX19PQkpDX18KQEAgLTEyOCw4ICsxMjksOCBAQCBwdWJs
aWM6CiAgICAgLy8gRE9NIG1ldGhvZHMgb3ZlcnJpZGRlbiBmcm9tICBwYXJlbnQgY2xhc3Nlcwog
ICAgIHZpcnR1YWwgRE9NU3RyaW5nIG5vZGVOYW1lKCkgY29uc3Q7CiAgICAgdmlydHVhbCB1bnNp
Z25lZCBzaG9ydCBub2RlVHlwZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgRE9NU3RyaW5nIHByZWZp
eCgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBzZXRQcmVmaXgoY29uc3QgRE9NU3RyaW5nICZf
cHJlZml4LCBpbnQgJmV4Y2VwdGlvbmNvZGUgKTsKKyAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0
cmluZyYgcHJlZml4KCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNldFByZWZpeChjb25zdCBB
dG9taWNTdHJpbmcgJl9wcmVmaXgsIGludCAmZXhjZXB0aW9uY29kZSApOwogCiAgICAgdmlydHVh
bCBET01TdHJpbmcgbm9kZVZhbHVlKCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHNldE5vZGVW
YWx1ZSggY29uc3QgRE9NU3RyaW5nICYsIGludCAmZXhjZXB0aW9uY29kZSApOwpAQCAtMTU2LDcg
KzE1Nyw3IEBAIGNsYXNzIEVsZW1lbnRJbXBsIDogcHVibGljIENvbnRhaW5lck5vZGUKICAgICBm
cmllbmQgY2xhc3MgTm9kZUltcGw7CiAgICAgZnJpZW5kIGNsYXNzIGtodG1sOjpDU1NTdHlsZVNl
bGVjdG9yOwogcHVibGljOgotICAgIEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpOworICAg
IEVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50UHRyICpk
b2MpOwogICAgIH5FbGVtZW50SW1wbCgpOwogCiAgICAgLy8gVXNlZCB0byBxdWlja2x5IGRldGVy
bWluZSB3aGV0aGVyIG9yIG5vdCBhbiBlbGVtZW50IGhhcyBhIGdpdmVuIENTUyBjbGFzcy4KQEAg
LTE4NiwxMyArMTg3LDIyIEBAIHB1YmxpYzoKICAgICBTaGFyZWRQdHI8QXR0ckltcGw+IHNldEF0
dHJpYnV0ZU5vZGVOUyhBdHRySW1wbCAqbmV3QXR0ciwgaW50ICZleGNlcHRpb24pIHsgcmV0dXJu
IHNldEF0dHJpYnV0ZU5vZGUobmV3QXR0ciwgZXhjZXB0aW9uKTsgfQogICAgIFNoYXJlZFB0cjxB
dHRySW1wbD4gcmVtb3ZlQXR0cmlidXRlTm9kZShBdHRySW1wbCAqb2xkQXR0ciwgaW50ICZleGNl
cHRpb24pOwogICAgIAotICAgIERPTVN0cmluZyBwcmVmaXgoKSBjb25zdCB7IHJldHVybiBtX3By
ZWZpeDsgfQotICAgIHZvaWQgc2V0UHJlZml4KGNvbnN0IERPTVN0cmluZyAmX3ByZWZpeCwgaW50
ICZleGNlcHRpb25jb2RlICk7Ci0KICAgICB2aXJ0dWFsIENTU1N0eWxlRGVjbGFyYXRpb25JbXBs
ICpzdHlsZSgpOwogCisgICAgdmlydHVhbCBjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lKCkg
Y29uc3QgeyByZXR1cm4gbV90YWdOYW1lOyB9CisgICAgdmlydHVhbCBib29sIGhhc1RhZ05hbWUo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSkgY29uc3QgeyByZXR1cm4gbV90YWdOYW1lLm1h
dGNoZXModGFnTmFtZSk7IH0KKyAgICAKKyAgICAvLyBBIG1vcmUgbGlnaHR3ZWlnaHQgY2hlY2sg
dGhhbiBoYXNUYWdOYW1lLiAgVXNlIHRoaXMgY2hlY2sgd2hlbiB5b3Uga25vdyB0aGUgbmFtZXNw
YWNlcyBvZiB0aGUgdHdvIFF1YWxpZmllZE5hbWVzIG1hdGNoLCBlLmcuLCB0aGF0IHRoZXkncmUK
KyAgICAvLyBib3RoIEhUTUwgbmFtZXMuCisgICAgYm9vbCBoYXNMb2NhbE5hbWUoY29uc3QgUXVh
bGlmaWVkTmFtZSYgdGFnTmFtZSkgY29uc3QgeyByZXR1cm4gbV90YWdOYW1lLmxvY2FsTmFtZSgp
ID09IHRhZ05hbWUubG9jYWxOYW1lKCk7IH0KKyAgICBib29sIGhhc0xvY2FsTmFtZShjb25zdCBB
dG9taWNTdHJpbmcmIGxvY2FsTmFtZSkgY29uc3QgeyByZXR1cm4gbV90YWdOYW1lLmxvY2FsTmFt
ZSgpID09IGxvY2FsTmFtZTsgfQorCisgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGxv
Y2FsTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFnTmFtZS5sb2NhbE5hbWUoKTsgfQorICAgIHZp
cnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgoKSBjb25zdCB7IHJldHVybiBtX3RhZ05h
bWUucHJlZml4KCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0UHJlZml4KGNvbnN0IEF0b21pY1N0
cmluZyAmX3ByZWZpeCwgaW50ICZleGNlcHRpb25jb2RlKTsKKyAgICB2aXJ0dWFsIGNvbnN0IEF0
b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJKCkgY29uc3QgeyByZXR1cm4gbV90YWdOYW1lLm5hbWVz
cGFjZVVSSSgpOyB9CisgICAgCiAgICAgLy8gRE9NIG1ldGhvZHMgb3ZlcnJpZGRlbiBmcm9tICBw
YXJlbnQgY2xhc3NlcwotICAgIHZpcnR1YWwgRE9NU3RyaW5nIHRhZ05hbWUoKSBjb25zdDsKICAg
ICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0IG5vZGVUeXBlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBO
b2RlSW1wbCAqY2xvbmVOb2RlICggYm9vbCBkZWVwICkgPSAwOwogICAgIHZpcnR1YWwgRE9NU3Ry
aW5nIG5vZGVOYW1lKCkgY29uc3Q7CkBAIC0yNTQsMjkgKzI2NCw3IEBAIHByaXZhdGU6CiAKIHBy
b3RlY3RlZDogLy8gbWVtYmVyIHZhcmlhYmxlcwogICAgIG11dGFibGUgTmFtZWRBdHRyTWFwSW1w
bCAqbmFtZWRBdHRyTWFwOwotICAgIERPTVN0cmluZ0ltcGwgKm1fcHJlZml4OwotfTsKLQotCi1j
bGFzcyBYTUxFbGVtZW50SW1wbCA6IHB1YmxpYyBFbGVtZW50SW1wbAotewotCi1wdWJsaWM6Ci0g
ICAgWE1MRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgRE9NU3RyaW5nSW1wbCAqX3RhZ05h
bWUpOwotICAgIFhNTEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIERPTVN0cmluZ0ltcGwg
Kl9xdWFsaWZpZWROYW1lLCBET01TdHJpbmdJbXBsICpfbmFtZXNwYWNlVVJJKTsKLSAgICB+WE1M
RWxlbWVudEltcGwoKTsKLQotICAgIC8vIERPTSBtZXRob2RzIG92ZXJyaWRkZW4gZnJvbSAgcGFy
ZW50IGNsYXNzZXMKLSAgICB2aXJ0dWFsIERPTVN0cmluZyBuYW1lc3BhY2VVUkkoKSBjb25zdDsK
LSAgICB2aXJ0dWFsIERPTVN0cmluZyBsb2NhbE5hbWUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIE5v
ZGVJbXBsICpjbG9uZU5vZGUgKCBib29sIGRlZXAgKTsKLQotICAgIC8vIE90aGVyIG1ldGhvZHMg
KG5vdCBwYXJ0IG9mIERPTSkKLSAgICB2aXJ0dWFsIGJvb2wgaXNYTUxFbGVtZW50Tm9kZSgpIGNv
bnN0IHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3QgeyByZXR1cm4g
bV9pZDsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgSWQgbV9pZDsKKyAgICBRdWFsaWZpZWROYW1lIG1f
dGFnTmFtZTsKIH07CiAKIC8vIHRoZSBtYXAgb2YgYXR0cmlidXRlcyBvZiBhbiBlbGVtZW50CkBA
IC00MTQsNyArNDAyLDcgQEAgcHJpdmF0ZToKIGNsYXNzIFN0eWxlZEVsZW1lbnRJbXBsIDogcHVi
bGljIEVsZW1lbnRJbXBsCiB7CiBwdWJsaWM6Ci0gICAgU3R5bGVkRWxlbWVudEltcGwoRG9jdW1l
bnRQdHIgKmRvYyk7CisgICAgU3R5bGVkRWxlbWVudEltcGwoY29uc3QgUXVhbGlmaWVkTmFtZSYg
dGFnTmFtZSwgRG9jdW1lbnRQdHIgKmRvYyk7CiAgICAgdmlydHVhbCB+U3R5bGVkRWxlbWVudElt
cGwoKTsKIAogICAgIHZpcnR1YWwgYm9vbCBpc1N0eWxlZEVsZW1lbnQoKSBjb25zdCB7IHJldHVy
biB0cnVlOyB9CkluZGV4OiBraHRtbC94bWwvZG9tX25vZGVpbXBsLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC94bWwvZG9tX25vZGVpbXBsLmNwcCx2CnJl
dHJpZXZpbmcgcmV2aXNpb24gMS4xNTQKZGlmZiAtdSAtcCAtcjEuMTU0IGtodG1sL3htbC9kb21f
bm9kZWltcGwuY3BwCi0tLSBraHRtbC94bWwvZG9tX25vZGVpbXBsLmNwcAkxNyBKdW4gMjAwNSAx
ODo1MDoyOSAtMDAwMAkxLjE1NAorKysga2h0bWwveG1sL2RvbV9ub2RlaW1wbC5jcHAJMjAgSnVu
IDIwMDUgMjA6NTY6MDEgLTAwMDAKQEAgLTE1NCw3ICsxNTQsNyBAQCBOb2RlSW1wbCAqTm9kZUlt
cGw6Omxhc3RDaGlsZCgpIGNvbnN0CiAgIHJldHVybiAwOwogfQogCi1Ob2RlSW1wbCAqTm9kZUlt
cGw6Omxhc3REZXNjZW5kZW50KCkgY29uc3QKK05vZGVJbXBsICpOb2RlSW1wbDo6bGFzdERlc2Nl
bmRhbnQoKSBjb25zdAogewogICAgIE5vZGVJbXBsICpuID0gY29uc3RfY2FzdDxOb2RlSW1wbCAq
Pih0aGlzKTsKICAgICB3aGlsZSAobiAmJiBuLT5sYXN0Q2hpbGQoKSkKQEAgLTIzOSwxMyArMjM5
LDEzIEBAIHZvaWQgTm9kZUltcGw6Om5vcm1hbGl6ZSAoKQogICAgIH0KIH0KIAotRE9NU3RyaW5n
IE5vZGVJbXBsOjpwcmVmaXgoKSBjb25zdAorY29uc3QgQXRvbWljU3RyaW5nJiBOb2RlSW1wbDo6
cHJlZml4KCkgY29uc3QKIHsKICAgICAvLyBGb3Igbm9kZXMgb3RoZXIgdGhhbiBlbGVtZW50cyBh
bmQgYXR0cmlidXRlcywgdGhlIHByZWZpeCBpcyBhbHdheXMgbnVsbAotICAgIHJldHVybiBET01T
dHJpbmcoKTsKKyAgICByZXR1cm4gbnVsbEF0b207CiB9CiAKLXZvaWQgTm9kZUltcGw6OnNldFBy
ZWZpeChjb25zdCBET01TdHJpbmcgJi8qX3ByZWZpeCovLCBpbnQgJmV4Y2VwdGlvbmNvZGUgKQor
dm9pZCBOb2RlSW1wbDo6c2V0UHJlZml4KGNvbnN0IEF0b21pY1N0cmluZyAmLypfcHJlZml4Ki8s
IGludCAmZXhjZXB0aW9uY29kZSApCiB7CiAgICAgLy8gVGhlIHNwZWMgc2F5cyB0aGF0IGZvciBu
b2RlcyBvdGhlciB0aGFuIGVsZW1lbnRzIGFuZCBhdHRyaWJ1dGVzLCBwcmVmaXggaXMgYWx3YXlz
IG51bGwuCiAgICAgLy8gSXQgZG9lcyBub3Qgc2F5IHdoYXQgdG8gZG8gd2hlbiB0aGUgdXNlciB0
cmllcyB0byBzZXQgdGhlIHByZWZpeCBvbiBhbm90aGVyIHR5cGUgb2YKQEAgLTEwMDYsMzkgKzEw
MDYsMjcgQEAgTm9kZUltcGwgKk5vZGVJbXBsOjp0cmF2ZXJzZVByZXZpb3VzTm9kZQogICAgIHJl
dHVybiAwOwogfQogCi12b2lkIE5vZGVJbXBsOjpjaGVja1NldFByZWZpeChjb25zdCBET01TdHJp
bmcgJl9wcmVmaXgsIGludCAmZXhjZXB0aW9uY29kZSkKK3ZvaWQgTm9kZUltcGw6OmNoZWNrU2V0
UHJlZml4KGNvbnN0IEF0b21pY1N0cmluZyAmX3ByZWZpeCwgaW50ICZleGNlcHRpb25jb2RlKQog
ewogICAgIC8vIFBlcmZvcm0gZXJyb3IgY2hlY2tpbmcgYXMgcmVxdWlyZWQgYnkgc3BlYyBmb3Ig
c2V0dGluZyBOb2RlLnByZWZpeC4gVXNlZCBieQogICAgIC8vIEVsZW1lbnRJbXBsOjpzZXRQcmVm
aXgoKSBhbmQgQXR0ckltcGw6OnNldFByZWZpeCgpCiAKLSNpZiAwCi0gICAgLy8gRklYTUU6IEFk
ZCB0aGlzIGNoZWNrIChidXQgbm90IGluIGEgd2F5IHRoYXQgZGVwZW5kcyBvbiB0aGUgQysrIERP
TSEpCi0gICAgLy8gSU5WQUxJRF9DSEFSQUNURVJfRVJSOiBSYWlzZWQgaWYgdGhlIHNwZWNpZmll
ZCBwcmVmaXggY29udGFpbnMgYW4gaWxsZWdhbCBjaGFyYWN0ZXIuCi0gICAgaWYgKCFFbGVtZW50
OjpraHRtbFZhbGlkUHJlZml4KF9wcmVmaXgpKSB7Ci0gICAgICAgIGV4Y2VwdGlvbmNvZGUgPSBE
T01FeGNlcHRpb246OklOVkFMSURfQ0hBUkFDVEVSX0VSUjsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSNlbmRpZgotCisgICAgLy8gRklYTUU6IEltcGxlbWVudCBzdXBwb3J0IGZvciBJTlZBTElE
X0NIQVJBQ1RFUl9FUlI6IFJhaXNlZCBpZiB0aGUgc3BlY2lmaWVkIHByZWZpeCBjb250YWlucyBh
biBpbGxlZ2FsIGNoYXJhY3Rlci4KKyAgICAKICAgICAvLyBOT19NT0RJRklDQVRJT05fQUxMT1dF
RF9FUlI6IFJhaXNlZCBpZiB0aGlzIG5vZGUgaXMgcmVhZG9ubHkuCiAgICAgaWYgKGlzUmVhZE9u
bHkoKSkgewogICAgICAgICBleGNlcHRpb25jb2RlID0gRE9NRXhjZXB0aW9uOjpOT19NT0RJRklD
QVRJT05fQUxMT1dFRF9FUlI7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICAvLyBOQU1F
U1BBQ0VfRVJSOiAtIFJhaXNlZCBpZiB0aGUgc3BlY2lmaWVkIHByZWZpeCBpcyBtYWxmb3JtZWQK
KyAgICAvLyBGSVhNRTogSW1wbGVtZW50IE5BTUVTUEFDRV9FUlI6IC0gUmFpc2VkIGlmIHRoZSBz
cGVjaWZpZWQgcHJlZml4IGlzIG1hbGZvcm1lZAogICAgIC8vIC0gaWYgdGhlIG5hbWVzcGFjZVVS
SSBvZiB0aGlzIG5vZGUgaXMgbnVsbCwKICAgICAvLyAtIGlmIHRoZSBzcGVjaWZpZWQgcHJlZml4
IGlzICJ4bWwiIGFuZCB0aGUgbmFtZXNwYWNlVVJJIG9mIHRoaXMgbm9kZSBpcyBkaWZmZXJlbnQg
ZnJvbQogICAgIC8vICAgImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIsCiAg
ICAgLy8gLSBpZiB0aGlzIG5vZGUgaXMgYW4gYXR0cmlidXRlIGFuZCB0aGUgc3BlY2lmaWVkIHBy
ZWZpeCBpcyAieG1sbnMiIGFuZAogICAgIC8vICAgdGhlIG5hbWVzcGFjZVVSSSBvZiB0aGlzIG5v
ZGUgaXMgZGlmZmVyZW50IGZyb20gImh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIiwKICAg
ICAvLyAtIG9yIGlmIHRoaXMgbm9kZSBpcyBhbiBhdHRyaWJ1dGUgYW5kIHRoZSBxdWFsaWZpZWRO
YW1lIG9mIHRoaXMgbm9kZSBpcyAieG1sbnMiIFtOYW1lc3BhY2VzXS4KLSAgICBpZiAoCi0jaWYg
MAotICAgICAgICAvLyBGSVhNRTogQWRkIHRoaXMgY2hlY2sgKGJ1dCBub3QgaW4gYSB3YXkgdGhh
dCBkZXBlbmRzIG9uIHRoZSBDKysgRE9NISkKLSAgICAgICAgRWxlbWVudDo6a2h0bWxNYWxmb3Jt
ZWRQcmVmaXgoX3ByZWZpeCkgfHwKLSNlbmRpZgotICAgICAgICAobmFtZXNwYWNlUGFydChpZCgp
KSA9PSBub05hbWVzcGFjZSAmJiBpZCgpID4gSURfTEFTVF9UQUcpIHx8CisgICAgaWYgKChuYW1l
c3BhY2VQYXJ0KGlkKCkpID09IG5vTmFtZXNwYWNlICYmIGlkKCkgPiBJRF9MQVNUX1RBRykgfHwK
ICAgICAgICAgKF9wcmVmaXggPT0gInhtbCIgJiYgRE9NU3RyaW5nKGdldERvY3VtZW50KCktPm5h
bWVzcGFjZVVSSShpZCgpKSkgIT0gImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFj
ZSIpKSB7CiAgICAgICAgIGV4Y2VwdGlvbmNvZGUgPSBET01FeGNlcHRpb246Ok5BTUVTUEFDRV9F
UlI7CiAgICAgICAgIHJldHVybjsKSW5kZXg6IGtodG1sL3htbC9kb21fbm9kZWltcGwuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC94bWwvZG9tX25vZGVpbXBs
LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuODYKZGlmZiAtdSAtcCAtcjEuODYga2h0bWwveG1s
L2RvbV9ub2RlaW1wbC5oCi0tLSBraHRtbC94bWwvZG9tX25vZGVpbXBsLmgJMTcgSnVuIDIwMDUg
MDI6MTM6MTIgLTAwMDAJMS44NgorKysga2h0bWwveG1sL2RvbV9ub2RlaW1wbC5oCTIwIEp1biAy
MDA1IDIwOjU2OjAxIC0wMDAwCkBAIC01OSw2ICs1OSw3IEBAIGNsYXNzIEV2ZW50SW1wbDsKIGNs
YXNzIEV2ZW50TGlzdGVuZXI7CiBjbGFzcyBOb2RlTGlzdEltcGw7CiBjbGFzcyBOYW1lZEF0dHJN
YXBJbXBsOworY2xhc3MgUXVhbGlmaWVkTmFtZTsKIGNsYXNzIFJlZ2lzdGVyZWRFdmVudExpc3Rl
bmVyOwogCiAvLyBUaGUgbmFtZXNwYWNlIHVzZWQgZm9yIFhIVE1MIGVsZW1lbnRzCkBAIC0xMDIs
NiArMTAzLDcgQEAgcHVibGljOgogICAgIE1BSU5fVEhSRUFEX0FMTE9DQVRFRDsKIAogICAgIC8v
IERPTSBtZXRob2RzICYgYXR0cmlidXRlcyBmb3IgTm9kZQorICAgIHZpcnR1YWwgYm9vbCBoYXNU
YWdOYW1lKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9CiAgICAgdmlydHVhbCBET01TdHJpbmcgbm9kZU5hbWUoKSBjb25zdCA9IDA7CiAgICAgdmly
dHVhbCBET01TdHJpbmcgbm9kZVZhbHVlKCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHNldE5v
ZGVWYWx1ZSggY29uc3QgRE9NU3RyaW5nICZfbm9kZVZhbHVlLCBpbnQgJmV4Y2VwdGlvbmNvZGUg
KTsKQEAgLTEyMiwxNCArMTI0LDE0IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3Zl
KGludCAmZXhjZXB0aW9uY29kZSk7CiAgICAgdmlydHVhbCBib29sIGhhc0NoaWxkTm9kZXMgKCAg
KSBjb25zdDsKICAgICB2aXJ0dWFsIE5vZGVJbXBsICpjbG9uZU5vZGUgKCBib29sIGRlZXAgKSA9
IDA7Ci0gICAgdmlydHVhbCBET01TdHJpbmcgbG9jYWxOYW1lKCkgY29uc3Q7Ci0gICAgdmlydHVh
bCBET01TdHJpbmcgbmFtZXNwYWNlVVJJKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBET01TdHJpbmcg
cHJlZml4KCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHNldFByZWZpeChjb25zdCBET01TdHJp
bmcgJl9wcmVmaXgsIGludCAmZXhjZXB0aW9uY29kZSApOworICAgIHZpcnR1YWwgY29uc3QgQXRv
bWljU3RyaW5nJiBsb2NhbE5hbWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0
cmluZyYgbmFtZXNwYWNlVVJJKCkgY29uc3Q7CisgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJp
bmcmIHByZWZpeCgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRQcmVmaXgoY29uc3QgQXRv
bWljU3RyaW5nICZfcHJlZml4LCBpbnQgJmV4Y2VwdGlvbmNvZGUpOwogICAgIHZvaWQgbm9ybWFs
aXplICgpOwogICAgIHN0YXRpYyBib29sIGlzU3VwcG9ydGVkKGNvbnN0IERPTVN0cmluZyAmZmVh
dHVyZSwgY29uc3QgRE9NU3RyaW5nICZ2ZXJzaW9uKTsKIAotICAgIE5vZGVJbXBsICpsYXN0RGVz
Y2VuZGVudCgpIGNvbnN0OworICAgIE5vZGVJbXBsICpsYXN0RGVzY2VuZGFudCgpIGNvbnN0Owog
CiAgICAgLy8gT3RoZXIgbWV0aG9kcyAobm90IHBhcnQgb2YgRE9NKQogICAgIHZpcnR1YWwgYm9v
bCBpc0VsZW1lbnROb2RlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTEzNyw2ICsxMzks
NyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlzU3R5bGVkRWxlbWVudCgpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzQXR0cmlidXRlTm9kZSgpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzVGV4dE5vZGUoKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0NvbW1lbnROb2RlKCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNEb2N1bWVudE5vZGUoKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1hNTEVsZW1lbnROb2RlKCkg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICBib29sIGlzQmxvY2tGbG93KCkgY29uc3Q7CkBA
IC0xOTgsMjUgKzIwMSw4IEBAIHB1YmxpYzoKICAgICAvLyB1bnRpbCB0aGV5IGtub3cgYWxsIG9m
IHRoZWlyIG5lc3RlZCA8cGFyYW0+cy4gWzM2MDMxOTEsIDQwNDA4NDhdCiAgICAgdmlydHVhbCB2
b2lkIGNsb3NlUmVuZGVyZXIoKSB7IH0KIAotICAgIHR5cGVkZWYgUV9VSU5UMzIgSWQ7Ci0gICAg
Ly8gaWQoKSBpcyB1c2VkIHRvIGVhc2lseSBhbmQgZXhhY3RseSBpZGVudGlmeSBhIG5vZGUuIEl0
Ci0gICAgLy8gaXMgb3B0aW1pemVkIGZvciBxdWljayBjb21wYXJpc29uIGFuZCBsb3cgbWVtb3J5
IGNvbnN1bXB0aW9uLgotICAgIC8vIGl0cyB2YWx1ZSBkZXBlbmRzIG9uIHRoZSBvd25lciBkb2N1
bWVudCBvZiB0aGUgbm9kZSBhbmQgaXMKLSAgICAvLyBjYXRlZ29yaXplZCBpbiB0aGUgZm9sbG93
aW5nIHdheToKLSAgICAvLyAxLi5JRF9MQVNUX1RBRzogdGhlIG5vZGUgaW5oZXJpdHMgSFRNTEVs
ZW1lbnRJbXBsIGFuZCBpcwotICAgIC8vICAgICAgICAgICAgICAgICBwYXJ0IG9mIHRoZSBIVE1M
IG5hbWVzcGFjZS4KLSAgICAvLyAgICAgICAgICAgICAgICAgVGhlIEhUTUwgbmFtZXNwYWNlIGlz
IGVpdGhlciB0aGUgZ2xvYmFsCi0gICAgLy8gICAgICAgICAgICAgICAgIG9uZSAobm8gbmFtZXNw
YWNlKSBvciB0aGUgWEhUTUwgbmFtZXNwYWNlCi0gICAgLy8gICAgICAgICAgICAgICAgIGRlcGVu
ZGluZyBvbiB0aGUgb3duZXIgZG9jdW1lbnQncyBkb2N0eXBlCi0gICAgLy8gSURfTEFTVF9UQUcr
MS4uMHhmZmZmOiBub24tSFRNTCBlbGVtZW50cyBpbiB0aGUgZ2xvYmFsIG5hbWVzcGFjZQotICAg
IC8vIG90aGVycyAgICAgICBub24tSFRNTCBlbGVtZW50cyBpbiBhIG5hbWVzcGFjZS4KLSAgICAv
LyAgICAgICAgICAgICAgICAgdGhlIHVwcGVyIDE2IGJpdCBpZGVudGlmeSB0aGUgbmFtZXNwYWNl
Ci0gICAgLy8gICAgICAgICAgICAgICAgIHRoZSBsb3dlciAxNiBiaXQgaWRlbnRpZnkgdGhlIGxv
Y2FsIHBhcnQgb2YgdGhlCi0gICAgLy8gICAgICAgICAgICAgICAgIHF1YWxpZmllZCBlbGVtZW50
IG5hbWUuCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0IHsgcmV0dXJuIDA7IH07Ci0jaWYgQVBQ
TEVfQ0hBTkdFUwotICAgIElkIGlkZW50aWZpZXIoKSBjb25zdDsKLSNlbmRpZgorICAgIHR5cGVk
ZWYgUV9VSU5UMzIgSWQ7IC8vIEZJWE1FOiBZYW5rIHRoaXMgb25jZSBhdHRyaWJ1dGVzIGFyZSBh
bHNvIHN3aXRjaGVkIG92ZXIuCisKICAgICBlbnVtIE1vdXNlRXZlbnRUeXBlIHsKICAgICAgICAg
TW91c2VQcmVzcywKICAgICAgICAgTW91c2VSZWxlYXNlLApAQCAtMjc4LDggKzI2NCw2IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNLZXlib2FyZEZvY3VzYWJsZSgpIGNvbnN0OwogICAg
IHZpcnR1YWwgYm9vbCBpc01vdXNlRm9jdXNhYmxlKCkgY29uc3Q7CiAgICAgCi0gICAgdmlydHVh
bCBib29sIGlzSW5saW5lKCkgY29uc3Q7Ci0gICAgCiAgICAgdmlydHVhbCBib29sIGlzQ29udGVu
dEVkaXRhYmxlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBRUmVjdCBnZXRSZWN0KCkgY29uc3Q7CiAK
QEAgLTM2OSw3ICszNTMsNyBAQCBwdWJsaWM6CiAgICAga2h0bWw6OlJlbmRlck9iamVjdCAqcHJl
dmlvdXNSZW5kZXJlcigpOwogICAgIHZvaWQgc2V0UmVuZGVyZXIoa2h0bWw6OlJlbmRlck9iamVj
dCogcmVuZGVyZXIpIHsgbV9yZW5kZXIgPSByZW5kZXJlcjsgfQogICAgIAotICAgIHZvaWQgY2hl
Y2tTZXRQcmVmaXgoY29uc3QgRE9NU3RyaW5nICZfcHJlZml4LCBpbnQgJmV4Y2VwdGlvbmNvZGUp
OworICAgIHZvaWQgY2hlY2tTZXRQcmVmaXgoY29uc3QgQXRvbWljU3RyaW5nICZfcHJlZml4LCBp
bnQgJmV4Y2VwdGlvbmNvZGUpOwogICAgIHZvaWQgY2hlY2tBZGRDaGlsZChOb2RlSW1wbCAqbmV3
Q2hpbGQsIGludCAmZXhjZXB0aW9uY29kZSk7CiAgICAgYm9vbCBpc0FuY2VzdG9yKGNvbnN0IE5v
ZGVJbXBsICopIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBjaGlsZEFsbG93ZWQoIE5vZGVJbXBs
ICpuZXdDaGlsZCApOwpJbmRleDoga2h0bWwveG1sL2RvbV9xbmFtZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwveG1sL2RvbV9xbmFtZS5jcHAsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuMgpkaWZmIC11IC1wIC1yMS4yIGtodG1sL3htbC9kb21fcW5hbWUu
Y3BwCi0tLSBraHRtbC94bWwvZG9tX3FuYW1lLmNwcAkxNiBKdW4gMjAwNSAyMTowNjo0NiAtMDAw
MAkxLjIKKysrIGtodG1sL3htbC9kb21fcW5hbWUuY3BwCTIwIEp1biAyMDA1IDIwOjU2OjAxIC0w
MDAwCkBAIC04OCw3ICs4OCw3IEBAIGNvbnN0IFF1YWxpZmllZE5hbWUmIFF1YWxpZmllZE5hbWU6
Om9wZXIKIAogdm9pZCBRdWFsaWZpZWROYW1lOjpkZXJlZigpCiB7Ci0gICAgaWYgKG1faW1wbC0+
cmVmQ291bnQoKSA9PSAxKSB7CisgICAgaWYgKG1faW1wbC0+aGFzT25lUmVmKCkpIHsKICAgICAg
ICAgLy8gQmVmb3JlIGRlY3JlbWVudGluZyB0aGUgcmVmIHRvIDAsIHJlbW92ZSBvdXJzZWx2ZXMg
ZnJvbSB0aGUgaGFzaCB0YWJsZS4KICAgICAgICAgUVB0ckRpY3Q8UVB0ckRpY3Q8UXVhbGlmaWVk
TmFtZUltcGw+ID4qIG5hbWVzcGFjZURpY3QgPSAwOwogICAgICAgICBRUHRyRGljdDxRdWFsaWZp
ZWROYW1lSW1wbD4qIHByZWZpeERpY3QgPSAwOwpJbmRleDoga2h0bWwveG1sL2RvbV90ZXh0aW1w
bC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3htbC9kb21f
dGV4dGltcGwuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNgpkaWZmIC11IC1wIC1yMS4xNiBr
aHRtbC94bWwvZG9tX3RleHRpbXBsLmgKLS0tIGtodG1sL3htbC9kb21fdGV4dGltcGwuaAkxMCBN
YXkgMjAwNSAyMTo1OToxNSAtMDAwMAkxLjE2CisrKyBraHRtbC94bWwvZG9tX3RleHRpbXBsLmgJ
MjAgSnVuIDIwMDUgMjA6NTY6MDIgLTAwMDAKQEAgLTEwMCw4ICsxMDAsNyBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCBOb2RlSW1wbCAqY2xvbmVOb2RlKGJvb2wgZGVlcCk7CiAKICAgICAvLyBPdGhl
ciBtZXRob2RzIChub3QgcGFydCBvZiBET00pCi0KLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7
CisgICAgdmlydHVhbCBib29sIGlzQ29tbWVudE5vZGUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9
CiAgICAgdmlydHVhbCBib29sIGNoaWxkVHlwZUFsbG93ZWQoIHVuc2lnbmVkIHNob3J0IHR5cGUg
KTsKIAogICAgIHZpcnR1YWwgRE9NU3RyaW5nIHRvU3RyaW5nKCkgY29uc3Q7CkBAIC0xMjgsNyAr
MTI3LDYgQEAgcHVibGljOgogICAgIC8vIE90aGVyIG1ldGhvZHMgKG5vdCBwYXJ0IG9mIERPTSkK
IAogICAgIHZpcnR1YWwgYm9vbCBpc1RleHROb2RlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQot
ICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoKCk7CiAg
ICAgdmlydHVhbCBib29sIHJlbmRlcmVySXNOZWVkZWQoa2h0bWw6OlJlbmRlclN0eWxlICopOwog
ICAgIHZpcnR1YWwga2h0bWw6OlJlbmRlck9iamVjdCAqY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJl
bmEgKiwga2h0bWw6OlJlbmRlclN0eWxlICopOwpJbmRleDoga3dxL0RPTS5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3EvRE9NLm1tLHYKcmV0cmlldmluZyByZXZp
c2lvbiAxLjM2CmRpZmYgLXUgLXAgLXIxLjM2IGt3cS9ET00ubW0KLS0tIGt3cS9ET00ubW0JMTkg
TWF5IDIwMDUgMTg6MzI6MjcgLTAwMDAJMS4zNgorKysga3dxL0RPTS5tbQkyMCBKdW4gMjAwNSAy
MDo1NjowMyAtMDAwMApAQCAtMzM4LDcgKzMzOCw4IEBAIHVzaW5nIGtodG1sOjpTaGFyZWRQdHI7
CiAgICAgQVNTRVJUKHByZWZpeCk7CiAKICAgICBpbnQgZXhjZXB0aW9uQ29kZSA9IDA7Ci0gICAg
W3NlbGYgX25vZGVJbXBsXS0+c2V0UHJlZml4KHByZWZpeCwgZXhjZXB0aW9uQ29kZSk7CisgICAg
RE9NU3RyaW5nIHByZWZpeFN0cihwcmVmaXgpOworICAgIFtzZWxmIF9ub2RlSW1wbF0tPnNldFBy
ZWZpeChwcmVmaXhTdHIuaW1wbGVtZW50YXRpb24oKSwgZXhjZXB0aW9uQ29kZSk7CiAgICAgcmFp
c2VPbkRPTUVycm9yKGV4Y2VwdGlvbkNvZGUpOwogfQogCkluZGV4OiBrd3EvS1dRRE9NTm9kZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZToga3dxL0tXUURPTU5vZGUuY3BwCmRpZmYgLU4ga3dxL0tX
UURPTU5vZGUuY3BwCi0tLSBrd3EvS1dRRE9NTm9kZS5jcHAJMTEgSnVsIDIwMDMgMTY6MjQ6Mzcg
LTAwMDAJMS45CisrKyAvZGV2L251bGwJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMApAQCAtMSwz
NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDAzIEFwcGxlIENvbXB1dGVyLCBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJLV1FET01Ob2RlLmgiCi0K
LXVzaW5nIERPTTo6Tm9kZUltcGw7Ci0KLS8vIFRoaXMgbmVlZHMgdG8gYmUgaW4gYSBDKysgc291
cmNlIGZpbGUgYmVjYXVzZSBpZCBpcyBhIHJlc2VydmVkIHdvcmQgaW4gT2JqZWN0aXZlLUMrKy4K
LU5vZGVJbXBsOjpJZCBpZEZyb21Ob2RlKE5vZGVJbXBsICpub2RlKQotewotICAgIHJldHVybiBu
b2RlLT5pZCgpOwotfQpJbmRleDoga3dxL0tXUURPTU5vZGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiBrd3EvS1dRRE9NTm9kZS5oCmRpZmYgLU4ga3dxL0tXUURPTU5vZGUuaAotLS0ga3dxL0tXUURP
TU5vZGUuaAkxMSBKdWwgMjAwMyAxNjoyNDozNyAtMDAwMAkxLjUKKysrIC9kZXYvbnVsbAkxIEph
biAxOTcwIDAwOjAwOjAwIC0wMDAwCkBAIC0xLDI4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDMgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2luY2x1ZGUgImRvbV9ub2RlaW1wbC5oIgotCi1ET006Ok5vZGVJbXBsOjpJZCBpZEZyb21O
b2RlKERPTTo6Tm9kZUltcGwgKik7CkluZGV4OiBrd3EvS1dRS0hUTUxQYXJ0Lm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9LV1FLSFRNTFBhcnQubW0sdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuNjQzCmRpZmYgLXUgLXAgLXIxLjY0MyBrd3EvS1dRS0hUTUxQYXJ0
Lm1tCi0tLSBrd3EvS1dRS0hUTUxQYXJ0Lm1tCTI2IE1heSAyMDA1IDIwOjMwOjEyIC0wMDAwCTEu
NjQzCisrKyBrd3EvS1dRS0hUTUxQYXJ0Lm1tCTIwIEp1biAyMDA1IDIwOjU2OjA3IC0wMDAwCkBA
IC0yOCw3ICsyOCw2IEBACiAjaW1wb3J0ICJET01JbnRlcm5hbC5oIgogCiAjaW1wb3J0ICJLV1FD
bGlwYm9hcmQuaCIKLSNpbXBvcnQgIktXUURPTU5vZGUuaCIKICNpbXBvcnQgIktXUUR1bW15Vmll
dy5oIgogI2ltcG9ydCAiS1dRRWRpdENvbW1hbmQuaCIKICNpbXBvcnQgIktXUUV4Y2VwdGlvbnMu
aCIKQEAgLTEwMCw2ICs5OSw3IEBAIHVzaW5nIERPTTo6SFRNTEVsZW1lbnRJbXBsOwogdXNpbmcg
RE9NOjpIVE1MRm9ybUVsZW1lbnRJbXBsOwogdXNpbmcgRE9NOjpIVE1MRnJhbWVFbGVtZW50SW1w
bDsKIHVzaW5nIERPTTo6SFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGw7Cit1c2luZyBET006OkhU
TUxOYW1lczsKIHVzaW5nIERPTTo6SFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsOwogdXNpbmcgRE9N
OjpOb2RlOwogdXNpbmcgRE9NOjpOb2RlSW1wbDsKQEAgLTM2MSwxMyArMzYxLDEyIEBAIHN0YXRp
YyBIVE1MRm9ybUVsZW1lbnRJbXBsICpzY2FuRm9yRm9ybSgKIHsKICAgICBOb2RlSW1wbCAqbjsK
ICAgICBmb3IgKG4gPSBzdGFydDsgbjsgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUoKSkgewotICAg
ICAgICBOb2RlSW1wbDo6SWQgbm9kZUlEID0gaWRGcm9tTm9kZShuKTsKLSAgICAgICAgaWYgKG5v
ZGVJRCA9PSBJRF9GT1JNKSB7CisgICAgICAgIGlmIChuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
Zm9ybSgpKSkgewogICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVu
dEltcGwgKj4obik7CiAgICAgICAgIH0gZWxzZSBpZiAobi0+aXNIVE1MRWxlbWVudCgpCiAgICAg
ICAgICAgICAgICAgICAgJiYgc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KG4pLT5pc0dl
bmVyaWNGb3JtRWxlbWVudCgpKSB7CiAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRN
TEdlbmVyaWNGb3JtRWxlbWVudEltcGwgKj4obiktPmZvcm0oKTsKLSAgICAgICAgfSBlbHNlIGlm
IChub2RlSUQgPT0gSURfRlJBTUUgfHwgbm9kZUlEID09IElEX0lGUkFNRSkgeworICAgICAgICB9
IGVsc2UgaWYgKG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpmcmFtZSgpKSB8fCBuLT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6aWZyYW1lKCkpKSB7CiAgICAgICAgICAgICBOb2RlSW1wbCAqY2hpbGRE
b2MgPSBzdGF0aWNfY2FzdDxIVE1MRnJhbWVFbGVtZW50SW1wbCAqPihuKS0+Y29udGVudERvY3Vt
ZW50KCk7CiAgICAgICAgICAgICBIVE1MRm9ybUVsZW1lbnRJbXBsICpmcmFtZVJlc3VsdCA9IHNj
YW5Gb3JGb3JtKGNoaWxkRG9jKTsKICAgICAgICAgICAgIGlmIChmcmFtZVJlc3VsdCkgewpAQCAt
MzkwLDcgKzM4OSw3IEBAIEhUTUxGb3JtRWxlbWVudEltcGwgKktXUUtIVE1MUGFydDo6Y3VycmUK
ICAgICAvLyB0cnkgd2Fsa2luZyB1cCB0aGUgbm9kZSB0cmVlIHRvIGZpbmQgYSBmb3JtIGVsZW1l
bnQKICAgICBOb2RlSW1wbCAqbjsKICAgICBmb3IgKG4gPSBzdGFydDsgbjsgbiA9IG4tPnBhcmVu
dE5vZGUoKSkgewotICAgICAgICBpZiAoaWRGcm9tTm9kZShuKSA9PSBJRF9GT1JNKSB7CisgICAg
ICAgIGlmIChuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Zm9ybSgpKSkgewogICAgICAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudEltcGwgKj4obik7CiAgICAgICAgIH0g
ZWxzZSBpZiAobi0+aXNIVE1MRWxlbWVudCgpCiAgICAgICAgICAgICAgICAgICAgJiYgc3RhdGlj
X2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KG4pLT5pc0dlbmVyaWNGb3JtRWxlbWVudCgpKSB7CkBA
IC00ODksOCArNDg4LDcgQEAgTlNTdHJpbmcgKktXUUtIVE1MUGFydDo6c2VhcmNoRm9yTGFiZWxz
QQogICAgICAgICBpZiAoYWJvdmVDZWxsKSB7CiAgICAgICAgICAgICAvLyBzZWFyY2ggd2l0aGlu
IHRoZSBhYm92ZSBjZWxsIHdlIGZvdW5kIGZvciBhIG1hdGNoCiAgICAgICAgICAgICBmb3IgKE5v
ZGVJbXBsICpuID0gYWJvdmVDZWxsLT5maXJzdENoaWxkKCk7IG47IG4gPSBuLT50cmF2ZXJzZU5l
eHROb2RlKGFib3ZlQ2VsbCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoaWRGcm9tTm9kZShuKSA9
PSBJRF9URVhUCi0gICAgICAgICAgICAgICAgICAgICYmIG4tPnJlbmRlcmVyKCkgJiYgbi0+cmVu
ZGVyZXIoKS0+c3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUpCisgICAgICAgICAgICAg
ICAgaWYgKG4tPmlzVGV4dE5vZGUoKSAmJiBuLT5yZW5kZXJlcigpICYmIG4tPnJlbmRlcmVyKCkt
PnN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFKQogICAgICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICAgICAgLy8gRm9yIGVhY2ggdGV4dCBjaHVuaywgcnVuIHRoZSByZWdleHAK
ICAgICAgICAgICAgICAgICAgICAgUVN0cmluZyBub2RlU3RyaW5nID0gbi0+bm9kZVZhbHVlKCku
c3RyaW5nKCk7CkBAIC01MjUsMjMgKzUyMywyMSBAQCBOU1N0cmluZyAqS1dRS0hUTUxQYXJ0Ojpz
ZWFyY2hGb3JMYWJlbHNCCiAgICAgICAgICBuICYmIGxlbmd0aFNlYXJjaGVkIDwgY2hhcnNTZWFy
Y2hlZFRocmVzaG9sZDsKICAgICAgICAgIG4gPSBuLT50cmF2ZXJzZVByZXZpb3VzTm9kZSgpKQog
ICAgIHsKLSAgICAgICAgTm9kZUltcGw6OklkIG5vZGVJRCA9IGlkRnJvbU5vZGUobik7Ci0gICAg
ICAgIGlmIChub2RlSUQgPT0gSURfRk9STQorICAgICAgICBpZiAobi0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OmZvcm0oKSkKICAgICAgICAgICAgIHx8IChuLT5pc0hUTUxFbGVtZW50KCkKICAgICAg
ICAgICAgICAgICAmJiBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwgKj4obiktPmlzR2VuZXJp
Y0Zvcm1FbGVtZW50KCkpKQogICAgICAgICB7CiAgICAgICAgICAgICAvLyBXZSBoaXQgYW5vdGhl
ciBmb3JtIGVsZW1lbnQgb3IgdGhlIHN0YXJ0IG9mIHRoZSBmb3JtIC0gYmFpbCBvdXQKICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9IGVsc2UgaWYgKG5vZGVJRCA9PSBJRF9URCAmJiAhc3Rh
cnRpbmdUYWJsZUNlbGwpIHsKKyAgICAgICAgfSBlbHNlIGlmIChuLT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6dGQoKSkgJiYgIXN0YXJ0aW5nVGFibGVDZWxsKSB7CiAgICAgICAgICAgICBzdGFydGlu
Z1RhYmxlQ2VsbCA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbCAqPihuKTsK
LSAgICAgICAgfSBlbHNlIGlmIChub2RlSUQgPT0gSURfVFIgJiYgc3RhcnRpbmdUYWJsZUNlbGwp
IHsKKyAgICAgICAgfSBlbHNlIGlmIChuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dHIoKSkgJiYg
c3RhcnRpbmdUYWJsZUNlbGwpIHsKICAgICAgICAgICAgIE5TU3RyaW5nICpyZXN1bHQgPSBzZWFy
Y2hGb3JMYWJlbHNBYm92ZUNlbGwocmVnRXhwLCBzdGFydGluZ1RhYmxlQ2VsbCk7CiAgICAgICAg
ICAgICBpZiAocmVzdWx0KSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIHNlYXJjaGVkQ2VsbEFib3ZlID0gdHJ1ZTsKLSAgICAgICAg
fSBlbHNlIGlmIChub2RlSUQgPT0gSURfVEVYVAotICAgICAgICAgICAgICAgICAgICYmIG4tPnJl
bmRlcmVyKCkgJiYgbi0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lC
TEUpCisgICAgICAgIH0gZWxzZSBpZiAobi0+aXNUZXh0Tm9kZSgpICYmIG4tPnJlbmRlcmVyKCkg
JiYgbi0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUpCiAgICAg
ICAgIHsKICAgICAgICAgICAgIC8vIEZvciBlYWNoIHRleHQgY2h1bmssIHJ1biB0aGUgcmVnZXhw
CiAgICAgICAgICAgICBRU3RyaW5nIG5vZGVTdHJpbmcgPSBuLT5ub2RlVmFsdWUoKS5zdHJpbmco
KTsKQEAgLTI4NDgsMTQgKzI4NDQsMTAgQEAgTlNGaWxlV3JhcHBlciAqS1dRS0hUTUxQYXJ0Ojpm
aWxlV3JhcHBlcgogCiBzdGF0aWMgRWxlbWVudEltcGwgKmxpc3RQYXJlbnQoRWxlbWVudEltcGwg
Kml0ZW0pCiB7Ci0gICAgLy8gSWNrISAgQXZvaWQgdXNlIG9mIGl0ZW0tPmlkKCkgd2hpY2ggY29u
ZnVzZXMgT2JqQysrLgotICAgIHVuc2lnbmVkIHNob3J0IF9pZCA9IGl0ZW0tPmlkZW50aWZpZXIo
KTsKLSAgICAKLSAgICB3aGlsZSAoX2lkICE9IElEX1VMICYmIF9pZCAhPSBJRF9PTCkgeworICAg
IHdoaWxlICghaXRlbS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnVsKCkpICYmICFpdGVtLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6b2woKSkpIHsKICAgICAgICAgaXRlbSA9IHN0YXRpY19jYXN0PEVs
ZW1lbnRJbXBsICo+KGl0ZW0tPnBhcmVudE5vZGUoKSk7CiAgICAgICAgIGlmICghaXRlbSkKICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBfaWQgPSBpdGVtLT5pZGVudGlmaWVyKCk7CiAgICAg
fQogICAgIHJldHVybiBpdGVtOwogfQpAQCAtMjg2OCw3ICsyODYwLDcgQEAgc3RhdGljIE5vZGVJ
bXBsKiBpc1RleHRGaXJzdEluTGlzdEl0ZW0oTgogICAgIHdoaWxlIChwYXIpIHsKICAgICAgICAg
aWYgKHBhci0+Zmlyc3RDaGlsZCgpICE9IGUpCiAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAg
ICAgaWYgKHBhci0+aWRlbnRpZmllcigpID09IElEX0xJKQorICAgICAgICBpZiAocGFyLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6bGkoKSkpCiAgICAgICAgICAgICByZXR1cm4gcGFyOwogICAgICAg
ICBlID0gcGFyOwogICAgICAgICBwYXIgPSBwYXItPnBhcmVudE5vZGUoKTsKQEAgLTMwMjIsMTA5
ICszMDE0LDk1IEBAIE5TQXR0cmlidXRlZFN0cmluZyAqS1dRS0hUTUxQYXJ0OjphdHRyaWIKICAg
ICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBvdXIgc2ltcGxl
IEhUTUwgLT4gQVNDSUkgdHJhbnNmb3JtYXRpb246CiAgICAgICAgICAgICAgICAgUVN0cmluZyB0
ZXh0OwotICAgICAgICAgICAgICAgIE5vZGVJbXBsOjpJZCBfaWQgPSBuLT5pZGVudGlmaWVyKCk7
Ci0gICAgICAgICAgICAgICAgc3dpdGNoKF9pZCkgewotICAgICAgICAgICAgICAgICAgICBjYXNl
IElEX0E6Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3RlIHRoZSBzdGFydCBvZiB0aGUg
PGE+IGVsZW1lbnQuICBXZSB3aWxsIGFkZCB0aGUgTlNMaW5rQXR0cmlidXRlTmFtZQotICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gYXR0cmlidXRlIHRvIHRoZSBhdHRyaWJ1dGVkIHN0cmluZyB3
aGVuIG5hdmlnYXRpbmcgdG8gdGhlIG5leHQgc2libGluZyAKLSAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIG9mIHRoaXMgbm9kZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtTdGFydExv
Y2F0aW9uID0gW3Jlc3VsdCBsZW5ndGhdOwotICAgICAgICAgICAgICAgICAgICAgICAgbGlua1N0
YXJ0Tm9kZSA9IHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsKj4obik7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0JSOgotICAgICAg
ICAgICAgICAgICAgICAgICAgdGV4dCArPSAiXG4iOwotICAgICAgICAgICAgICAgICAgICAgICAg
aGFzTmV3TGluZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAK
LSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9MSToKLSAgICAgICAgICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBRU3RyaW5nIGxpc3RUZXh0OwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEVsZW1lbnRJbXBsICppdGVtUGFyZW50ID0gbGlzdFBhcmVu
dChzdGF0aWNfY2FzdDxFbGVtZW50SW1wbCAqPihuKSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNOZXdMaW5lKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0VGV4dCArPSAnXG4nOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGhhc05ld0xpbmUgPSB0cnVlOwotICAgIAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGxpc3RJdGVtcy5hcHBlbmQoc3RhdGljX2Nhc3Q8RWxlbWVudEltcGwq
PihuKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdEl0ZW1JbmZvIGluZm87Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mby5zdGFydCA9IFtyZXN1bHQgbGVuZ3RoXTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLmVuZCA9IDA7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbGlzdEl0ZW1Mb2NhdGlvbnMuYXBwZW5kIChpbmZvKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0VGV4
dCArPSAnXHQnOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtUGFyZW50ICYm
IHJlbmRlcmVyLT5pc0xpc3RJdGVtKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgUmVuZGVyTGlzdEl0ZW0gKmxpc3RSZW5kZXJlciA9IHN0YXRpY19jYXN0PFJlbmRlckxpc3RJ
dGVtKj4ocmVuZGVyZXIpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heE1h
cmtlcldpZHRoID0gTUFYKFtmb250IHBvaW50U2l6ZV0sIG1heE1hcmtlcldpZHRoKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoKHN0eWxlLT5saXN0U3R5bGVUeXBlKCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Uga2h0bWw6OkRJU0M6
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdFRleHQgKz0gKChR
Q2hhcilCVUxMRVRfQ0hBUik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIGtodG1s
OjpDSVJDTEU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdFRl
eHQgKz0gKChRQ2hhcilDSVJDTEVfQ0hBUik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
YXNlIGtodG1sOjpTUVVBUkU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbGlzdFRleHQgKz0gKChRQ2hhcilTUVVBUkVfQ0hBUik7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjYXNlIGtodG1sOjpMTk9ORToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVN0cmluZyBt
YXJrZXIgPSBsaXN0UmVuZGVyZXItPm1hcmtlclN0cmluZ1ZhbHVlKCk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdFRleHQgKz0gbWFya2VyOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVzZSBBcHBLaXQgbWV0cmljcy4gIFdp
bGwgYmUgcmVuZGVyZWQgYnkgQXBwS2l0LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZsb2F0IG1hcmtlcldpZHRoID0gW2ZvbnQgd2lkdGhPZlN0cmluZzogbWFya2Vy
LmdldE5TU3RyaW5nKCldOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1heE1hcmtlcldpZHRoID0gTUFYKG1hcmtlcldpZHRoLCBtYXhNYXJrZXJXaWR0aCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAobi0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OmEoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gTm90ZSB0
aGUgc3RhcnQgb2YgdGhlIDxhPiBlbGVtZW50LiAgV2Ugd2lsbCBhZGQgdGhlIE5TTGlua0F0dHJp
YnV0ZU5hbWUKKyAgICAgICAgICAgICAgICAgICAgLy8gYXR0cmlidXRlIHRvIHRoZSBhdHRyaWJ1
dGVkIHN0cmluZyB3aGVuIG5hdmlnYXRpbmcgdG8gdGhlIG5leHQgc2libGluZyAKKyAgICAgICAg
ICAgICAgICAgICAgLy8gb2YgdGhpcyBub2RlLgorICAgICAgICAgICAgICAgICAgICBsaW5rU3Rh
cnRMb2NhdGlvbiA9IFtyZXN1bHQgbGVuZ3RoXTsKKyAgICAgICAgICAgICAgICAgICAgbGlua1N0
YXJ0Tm9kZSA9IHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsKj4obik7CisgICAgICAgICAgICAgICAg
fSBlbHNlIGlmIChuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YnIoKSkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgdGV4dCArPSAiXG4iOworICAgICAgICAgICAgICAgICAgICBoYXNOZXdMaW5lID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjpsaSgpKSkgeworICAgICAgICAgICAgICAgICAgICBRU3RyaW5nIGxpc3RUZXh0OworICAgICAg
ICAgICAgICAgICAgICBFbGVtZW50SW1wbCAqaXRlbVBhcmVudCA9IGxpc3RQYXJlbnQoc3RhdGlj
X2Nhc3Q8RWxlbWVudEltcGwgKj4obikpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCFoYXNOZXdMaW5lKQorICAgICAgICAgICAgICAgICAgICAgICAgbGlz
dFRleHQgKz0gJ1xuJzsKKyAgICAgICAgICAgICAgICAgICAgaGFzTmV3TGluZSA9IHRydWU7CiAK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdFRleHQgKz0gJyAnOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0VGV4dCArPSAnXHQnOwotICAgIAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBOU011dGFibGVEaWN0aW9uYXJ5ICphdHRyczsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRycyA9IFtbTlNN
dXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF07Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFthdHRycyBzZXRPYmplY3Q6Zm9udCBmb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHlsZSAmJiBzdHlsZS0+Y29s
b3IoKS5pc1ZhbGlkKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0
cnMgc2V0T2JqZWN0OnN0eWxlLT5jb2xvcigpLmdldE5TQ29sb3IoKSBmb3JLZXk6TlNGb3JlZ3Jv
dW5kQ29sb3JBdHRyaWJ1dGVOYW1lXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHN0eWxlICYmIHN0eWxlLT5iYWNrZ3JvdW5kQ29sb3IoKS5pc1ZhbGlkKCkpCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0cnMgc2V0T2JqZWN0OnN0eWxlLT5iYWNr
Z3JvdW5kQ29sb3IoKS5nZXROU0NvbG9yKCkgZm9yS2V5Ok5TQmFja2dyb3VuZENvbG9yQXR0cmli
dXRlTmFtZV07Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
TlNBdHRyaWJ1dGVkU3RyaW5nICpwYXJ0aWFsU3RyaW5nID0gW1tOU0F0dHJpYnV0ZWRTdHJpbmcg
YWxsb2NdIGluaXRXaXRoU3RyaW5nOmxpc3RUZXh0LmdldE5TU3RyaW5nKCkgYXR0cmlidXRlczph
dHRyc107Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRycyByZWxlYXNlXTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jlc3VsdCBhcHBlbmRBdHRyaWJ1dGVk
U3RyaW5nOiBwYXJ0aWFsU3RyaW5nXTsgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFtwYXJ0aWFsU3RyaW5nIHJlbGVhc2VdOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbGlzdEl0ZW1zLmFwcGVuZChzdGF0
aWNfY2FzdDxFbGVtZW50SW1wbCo+KG4pKTsKKyAgICAgICAgICAgICAgICAgICAgTGlzdEl0ZW1J
bmZvIGluZm87CisgICAgICAgICAgICAgICAgICAgIGluZm8uc3RhcnQgPSBbcmVzdWx0IGxlbmd0
aF07CisgICAgICAgICAgICAgICAgICAgIGluZm8uZW5kID0gMDsKKyAgICAgICAgICAgICAgICAg
ICAgbGlzdEl0ZW1Mb2NhdGlvbnMuYXBwZW5kIChpbmZvKTsKKyAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAgIGxpc3RUZXh0ICs9ICdcdCc7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChpdGVtUGFyZW50ICYmIHJlbmRlcmVyLT5pc0xpc3RJdGVtKCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIFJlbmRlckxpc3RJdGVtICpsaXN0UmVuZGVyZXIgPSBzdGF0aWNfY2Fz
dDxSZW5kZXJMaXN0SXRlbSo+KHJlbmRlcmVyKTsKKworICAgICAgICAgICAgICAgICAgICAgICAg
bWF4TWFya2VyV2lkdGggPSBNQVgoW2ZvbnQgcG9pbnRTaXplXSwgbWF4TWFya2VyV2lkdGgpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoKHN0eWxlLT5saXN0U3R5bGVUeXBlKCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIGtodG1sOjpESVNDOgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsaXN0VGV4dCArPSAoKFFDaGFyKUJVTExFVF9DSEFSKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2FzZSBraHRtbDo6Q0lSQ0xFOgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBsaXN0VGV4dCArPSAoKFFDaGFyKUNJUkNMRV9DSEFSKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBraHRtbDo6U1FVQVJFOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0VGV4
dCArPSAoKFFDaGFyKVNRVUFSRV9DSEFSKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBraHRtbDo6TE5PTkU6
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFT
dHJpbmcgbWFya2VyID0gbGlzdFJlbmRlcmVyLT5tYXJrZXJTdHJpbmdWYWx1ZSgpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0VGV4dCArPSBtYXJrZXI7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIFVzZSBBcHBLaXQgbWV0cmljcy4gIFdpbGwgYmUgcmVu
ZGVyZWQgYnkgQXBwS2l0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBt
YXJrZXJXaWR0aCA9IFtmb250IHdpZHRoT2ZTdHJpbmc6IG1hcmtlci5nZXROU1N0cmluZygpXTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4TWFya2VyV2lkdGggPSBNQVgobWFy
a2VyV2lkdGgsIG1heE1hcmtlcldpZHRoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICAgICAgICAgIGNhc2Ug
SURfT0w6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfVUw6CisgICAgICAgICAgICAgICAg
ICAgICAgICBsaXN0VGV4dCArPSAnICc7CisgICAgICAgICAgICAgICAgICAgICAgICBsaXN0VGV4
dCArPSAnXHQnOworCisgICAgICAgICAgICAgICAgICAgICAgICBOU011dGFibGVEaWN0aW9uYXJ5
ICphdHRyczsKKworICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnMgPSBbW05TTXV0YWJsZURp
Y3Rpb25hcnkgYWxsb2NdIGluaXRdOworICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHJzIHNl
dE9iamVjdDpmb250IGZvcktleTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChzdHlsZSAmJiBzdHlsZS0+Y29sb3IoKS5pc1ZhbGlkKCkpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgW2F0dHJzIHNldE9iamVjdDpzdHlsZS0+Y29sb3IoKS5nZXRO
U0NvbG9yKCkgZm9yS2V5Ok5TRm9yZWdyb3VuZENvbG9yQXR0cmlidXRlTmFtZV07CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoc3R5bGUgJiYgc3R5bGUtPmJhY2tncm91bmRDb2xvcigpLmlz
VmFsaWQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0cnMgc2V0T2JqZWN0OnN0
eWxlLT5iYWNrZ3JvdW5kQ29sb3IoKS5nZXROU0NvbG9yKCkgZm9yS2V5Ok5TQmFja2dyb3VuZENv
bG9yQXR0cmlidXRlTmFtZV07CisKKyAgICAgICAgICAgICAgICAgICAgICAgIE5TQXR0cmlidXRl
ZFN0cmluZyAqcGFydGlhbFN0cmluZyA9IFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0
V2l0aFN0cmluZzpsaXN0VGV4dC5nZXROU1N0cmluZygpIGF0dHJpYnV0ZXM6YXR0cnNdOworICAg
ICAgICAgICAgICAgICAgICAgICAgW2F0dHJzIHJlbGVhc2VdOworICAgICAgICAgICAgICAgICAg
ICAgICAgW3Jlc3VsdCBhcHBlbmRBdHRyaWJ1dGVkU3RyaW5nOiBwYXJ0aWFsU3RyaW5nXTsgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBbcGFydGlhbFN0cmluZyByZWxl
YXNlXTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIGlm
IChuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b2woKSkgfHwgbi0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OnVsKCkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWhhc05ld0xpbmUpCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCArPSAiXG4iOwogICAgICAgICAgICAgICAg
ICAgICAgICAgaGFzTmV3TGluZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKLQotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX1REOgotICAgICAgICAgICAgICAgICAg
ICBjYXNlIElEX1RIOgotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0hSOgotICAgICAgICAg
ICAgICAgICAgICBjYXNlIElEX0REOgotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0RMOgot
ICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0RUOgotICAgICAgICAgICAgICAgICAgICBjYXNl
IElEX1BSRToKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9CTE9DS1FVT1RFOgotICAgICAg
ICAgICAgICAgICAgICBjYXNlIElEX0RJVjoKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlm
IChuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGQoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGgoKSkgfHwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aHIoKSkgfHwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZGQo
KSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6ZGwoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6ZHQoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6cHJlKCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJsb2NrcXVvdGUoKSkgfHwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZGl2KCkp
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWhhc05ld0xpbmUpCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdGV4dCArPSAnXG4nOwogICAgICAgICAgICAgICAgICAgICAgICAg
aGFzTmV3TGluZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICAgICAgY2FzZSBJRF9QOgotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX1RS
OgotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0gxOgotICAgICAgICAgICAgICAgICAgICBj
YXNlIElEX0gyOgotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0gzOgotICAgICAgICAgICAg
ICAgICAgICBjYXNlIElEX0g0OgotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0g1OgotICAg
ICAgICAgICAgICAgICAgICBjYXNlIElEX0g2OiB7CisgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSBpZiAobi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnAoKSkgfHwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dHIoKSkgfHwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDEoKSkgfHwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
aDIoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6aDMoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6aDQoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDUoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDYoKSkpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICghaGFzTmV3TGluZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0ZXh0ICs9ICdcbic7CiAgICAgICAgICAgICAgICAgICAgICAgICAKQEAgLTMxMzksMTAgKzMx
MTcsOCBAQCBOU0F0dHJpYnV0ZWRTdHJpbmcgKktXUUtIVE1MUGFydDo6YXR0cmliCiAgICAgICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICAgICAgICAgIGhhc05ld0xpbmUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0lNRzoKKyAgICAgICAgICAgICAgICAgICAgZWxz
ZSBpZiAobi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmltZygpKSkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHBlbmRpbmdTdHlsZWRTcGFjZSAhPSBuaWwpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAobGlua1N0YXJ0TG9jYXRpb24gPT0gW3Jlc3VsdCBsZW5ndGhdKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrbGlua1N0YXJ0TG9jYXRpb247CkBA
IC0zMTU2LDggKzMxMzIsOSBAQCBOU0F0dHJpYnV0ZWRTdHJpbmcgKktXUUtIVE1MUGFydDo6YXR0
cmliCiAgICAgICAgICAgICAgICAgICAgICAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKmlTdHJpbmcg
PSBbTlNBdHRyaWJ1dGVkU3RyaW5nIGF0dHJpYnV0ZWRTdHJpbmdXaXRoQXR0YWNobWVudDphdHRh
Y2htZW50XTsKICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXN1bHQgYXBwZW5kQXR0cmlidXRl
ZFN0cmluZzogaVN0cmluZ107CiAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0YWNobWVudCBy
ZWxlYXNlXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAgICAgTlNBdHRyaWJ1dGVk
U3RyaW5nICpwYXJ0aWFsU3RyaW5nID0gW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRX
aXRoU3RyaW5nOnRleHQuZ2V0TlNTdHJpbmcoKV07CiAgICAgICAgICAgICAgICAgW3Jlc3VsdCBh
cHBlbmRBdHRyaWJ1dGVkU3RyaW5nOiBwYXJ0aWFsU3RyaW5nXTsKICAgICAgICAgICAgICAgICBb
cGFydGlhbFN0cmluZyByZWxlYXNlXTsKQEAgLTMxNzksNzEgKzMxNTYsNjAgQEAgTlNBdHRyaWJ1
dGVkU3RyaW5nICpLV1FLSFRNTFBhcnQ6OmF0dHJpYgogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgbmV4dCA9IG4tPm5leHRTaWJsaW5nKCk7CiAKLSAgICAgICAgICAgIE5vZGVJ
bXBsOjpJZCBfaWQgPSBuLT5pZGVudGlmaWVyKCk7Ci0gICAgICAgICAgICBzd2l0Y2goX2lkKSB7
Ci0gICAgICAgICAgICAgICAgY2FzZSBJRF9BOgotICAgICAgICAgICAgICAgICAgICAvLyBFbmQg
b2YgYSA8YT4gZWxlbWVudC4gIENyZWF0ZSBhbiBhdHRyaWJ1dGVkIHN0cmluZyBOU0xpbmtBdHRy
aWJ1dGVOYW1lIGF0dHJpYnV0ZQotICAgICAgICAgICAgICAgICAgICAvLyBmb3IgdGhlIHJhbmdl
IG9mIHRoZSBsaW5rLiAgTm90ZSB0aGF0IHdlIGNyZWF0ZSB0aGUgYXR0cmlidXRlZCBzdHJpbmcg
ZnJvbSB0aGUgRE9NLCB3aGljaAotICAgICAgICAgICAgICAgICAgICAvLyB3aWxsIGhhdmUgY29y
cmVjdGVkIGFueSBpbGxlZ2FsbHkgbmVzdGVkIDxhPiBlbGVtZW50cy4KLSAgICAgICAgICAgICAg
ICAgICAgaWYgKGxpbmtTdGFydE5vZGUgJiYgbiA9PSBsaW5rU3RhcnROb2RlKXsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIERPTVN0cmluZyBocmVmID0gcGFyc2VVUkwobGlua1N0YXJ0Tm9kZS0+
Z2V0QXR0cmlidXRlKEFUVFJfSFJFRikpOwotICAgICAgICAgICAgICAgICAgICAgICAgS1VSTCBr
VVJMID0gS1dRKGxpbmtTdGFydE5vZGUtPmdldERvY3VtZW50KCktPnBhcnQoKSktPmNvbXBsZXRl
VVJMKGhyZWYuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgICAgICAgICBOU1VSTCAqVVJMID0ga1VSTC5nZXROU1VSTCgpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgW3Jlc3VsdCBhZGRBdHRyaWJ1dGU6TlNMaW5rQXR0cmlidXRlTmFtZSB2YWx1
ZTpVUkwgcmFuZ2U6TlNNYWtlUmFuZ2UobGlua1N0YXJ0TG9jYXRpb24sIFtyZXN1bHQgbGVuZ3Ro
XS1saW5rU3RhcnRMb2NhdGlvbildOwotICAgICAgICAgICAgICAgICAgICAgICAgbGlua1N0YXJ0
Tm9kZSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBpZiAobi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmEoKSkpIHsKKyAg
ICAgICAgICAgICAgICAvLyBFbmQgb2YgYSA8YT4gZWxlbWVudC4gIENyZWF0ZSBhbiBhdHRyaWJ1
dGVkIHN0cmluZyBOU0xpbmtBdHRyaWJ1dGVOYW1lIGF0dHJpYnV0ZQorICAgICAgICAgICAgICAg
IC8vIGZvciB0aGUgcmFuZ2Ugb2YgdGhlIGxpbmsuICBOb3RlIHRoYXQgd2UgY3JlYXRlIHRoZSBh
dHRyaWJ1dGVkIHN0cmluZyBmcm9tIHRoZSBET00sIHdoaWNoCisgICAgICAgICAgICAgICAgLy8g
d2lsbCBoYXZlIGNvcnJlY3RlZCBhbnkgaWxsZWdhbGx5IG5lc3RlZCA8YT4gZWxlbWVudHMuCisg
ICAgICAgICAgICAgICAgaWYgKGxpbmtTdGFydE5vZGUgJiYgbiA9PSBsaW5rU3RhcnROb2RlKSB7
CisgICAgICAgICAgICAgICAgICAgIERPTVN0cmluZyBocmVmID0gcGFyc2VVUkwobGlua1N0YXJ0
Tm9kZS0+Z2V0QXR0cmlidXRlKEFUVFJfSFJFRikpOworICAgICAgICAgICAgICAgICAgICBLVVJM
IGtVUkwgPSBLV1EobGlua1N0YXJ0Tm9kZS0+Z2V0RG9jdW1lbnQoKS0+cGFydCgpKS0+Y29tcGxl
dGVVUkwoaHJlZi5zdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgICAgICBOU1VSTCAqVVJMID0ga1VSTC5nZXROU1VSTCgpOworICAgICAgICAgICAgICAgICAg
ICBbcmVzdWx0IGFkZEF0dHJpYnV0ZTpOU0xpbmtBdHRyaWJ1dGVOYW1lIHZhbHVlOlVSTCByYW5n
ZTpOU01ha2VSYW5nZShsaW5rU3RhcnRMb2NhdGlvbiwgW3Jlc3VsdCBsZW5ndGhdLWxpbmtTdGFy
dExvY2F0aW9uKV07CisgICAgICAgICAgICAgICAgICAgIGxpbmtTdGFydE5vZGUgPSAwOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKG4tPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjpvbCgpKSB8fCBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dWwo
KSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWhhc05ld0xpbmUpCisgICAgICAgICAgICAgICAg
ICAgIHRleHQgKz0gJ1xuJzsKKyAgICAgICAgICAgICAgICBoYXNOZXdMaW5lID0gdHJ1ZTsKKyAg
ICAgICAgICAgIH0gZWxzZSBpZiAobi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmxpKCkpKSB7CiAg
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgY2FzZSBJRF9PTDoKLSAgICAgICAgICAg
ICAgICBjYXNlIElEX1VMOgotICAgICAgICAgICAgICAgICAgICBpZiAoIWhhc05ld0xpbmUpCi0g
ICAgICAgICAgICAgICAgICAgICAgICB0ZXh0ICs9ICdcbic7Ci0gICAgICAgICAgICAgICAgICAg
IGhhc05ld0xpbmUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAg
ICAgICAgICAgIGNhc2UgSURfTEk6Ci0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBpLCBjb3VudCA9IGxpc3RJdGVtcy5jb3VudCgpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChsaXN0SXRlbXMuYXQoaSkgPT0gbil7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGxpc3RJdGVtTG9jYXRpb25zW2ldLmVuZCA9IFtyZXN1bHQgbGVu
Z3RoXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGludCBpLCBjb3VudCA9IGxpc3RJdGVtcy5jb3VudCgpOworICAgICAgICAgICAgICAg
IGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKXsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGxp
c3RJdGVtcy5hdChpKSA9PSBuKXsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RJdGVtTG9j
YXRpb25zW2ldLmVuZCA9IFtyZXN1bHQgbGVuZ3RoXTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmICgh
aGFzTmV3TGluZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHRleHQgKz0gJ1xuJzsKLSAgICAg
ICAgICAgICAgICAgICAgaGFzTmV3TGluZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotCi0gICAgICAgICAgICAgICAgY2FzZSBJRF9URDoKLSAgICAgICAgICAgICAgICBjYXNl
IElEX1RIOgotICAgICAgICAgICAgICAgIGNhc2UgSURfSFI6Ci0gICAgICAgICAgICAgICAgY2Fz
ZSBJRF9ERDoKLSAgICAgICAgICAgICAgICBjYXNlIElEX0RMOgotICAgICAgICAgICAgICAgIGNh
c2UgSURfRFQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBJRF9QUkU6Ci0gICAgICAgICAgICAgICAg
Y2FzZSBJRF9CTE9DS1FVT1RFOgotICAgICAgICAgICAgICAgIGNhc2UgSURfRElWOgotICAgICAg
ICAgICAgICAgICAgICBpZiAoIWhhc05ld0xpbmUpCi0gICAgICAgICAgICAgICAgICAgICAgICB0
ZXh0ICs9ICdcbic7Ci0gICAgICAgICAgICAgICAgICAgIGhhc05ld0xpbmUgPSB0cnVlOwotICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIElEX1A6Ci0gICAg
ICAgICAgICAgICAgY2FzZSBJRF9UUjoKLSAgICAgICAgICAgICAgICBjYXNlIElEX0gxOgotICAg
ICAgICAgICAgICAgIGNhc2UgSURfSDI6Ci0gICAgICAgICAgICAgICAgY2FzZSBJRF9IMzoKLSAg
ICAgICAgICAgICAgICBjYXNlIElEX0g0OgotICAgICAgICAgICAgICAgIGNhc2UgSURfSDU6Ci0g
ICAgICAgICAgICAgICAgY2FzZSBJRF9INjoKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNO
ZXdMaW5lKQotICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCArPSAnXG4nOwotICAgICAgICAg
ICAgICAgICAgICAvLyBBbiBleHRyYSBuZXdsaW5lIGlzIG5lZWRlZCBhdCB0aGUgc3RhcnQsIG5v
dCB0aGUgZW5kLCBvZiB0aGVzZSB0eXBlcyBvZiB0YWdzLAotICAgICAgICAgICAgICAgICAgICAv
LyBzbyBkb24ndCBhZGQgYW5vdGhlciBoZXJlLgotICAgICAgICAgICAgICAgICAgICBoYXNOZXdM
aW5lID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGlmICghaGFzTmV3TGluZSkKKyAgICAgICAgICAgICAgICAgICAg
dGV4dCArPSAnXG4nOworICAgICAgICAgICAgICAgIGhhc05ld0xpbmUgPSB0cnVlOworICAgICAg
ICAgICAgfSBlbHNlIGlmIChuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGQoKSkgfHwKKyAgICAg
ICAgICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRoKCkpIHx8CisgICAg
ICAgICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpocigpKSB8fAorICAg
ICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZGQoKSkgfHwKKyAg
ICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmRsKCkpIHx8Cisg
ICAgICAgICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpkdCgpKSB8fAor
ICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6cHJlKCkpIHx8
CisgICAgICAgICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpibG9ja3F1
b3RlKCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjpkaXYoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWhhc05ld0xpbmUpCisgICAgICAgICAg
ICAgICAgICAgIHRleHQgKz0gJ1xuJzsKKyAgICAgICAgICAgICAgICBoYXNOZXdMaW5lID0gdHJ1
ZTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnAoKSkg
fHwKKyAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRyKCkp
IHx8CisgICAgICAgICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoMSgp
KSB8fAorICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDIo
KSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omgz
KCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpo
NCgpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
aDUoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
Omg2KCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFoYXNOZXdMaW5lKQorICAgICAgICAgICAg
ICAgICAgICB0ZXh0ICs9ICdcbic7CisgICAgICAgICAgICAgICAgLy8gQW4gZXh0cmEgbmV3bGlu
ZSBpcyBuZWVkZWQgYXQgdGhlIHN0YXJ0LCBub3QgdGhlIGVuZCwgb2YgdGhlc2UgdHlwZXMgb2Yg
dGFncywKKyAgICAgICAgICAgICAgICAvLyBzbyBkb24ndCBhZGQgYW5vdGhlciBoZXJlLgorICAg
ICAgICAgICAgICAgIGhhc05ld0xpbmUgPSB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgCiAgICAgICAgICAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKnBhcnRpYWxTdHJpbmcgPSBbW05T
QXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6dGV4dC5nZXROU1N0cmluZygp
XTsKQEAgLTM3MDMsNyArMzY2OSw3IEBAIHZvaWQgS1dRS0hUTUxQYXJ0OjpzZXRTZWxlY3Rpb25G
cm9tTm9uZSgKICAgICAgICAgd2hpbGUgKG5vZGUpIHsKICAgICAgICAgICAgIC8vIExvb2sgZm9y
IGEgYmxvY2sgZmxvdywgYnV0IHNraXAgb3ZlciB0aGUgSFRNTCBlbGVtZW50LCBzaW5jZSB3ZSBy
ZWFsbHkKICAgICAgICAgICAgIC8vIHdhbnQgdG8gZ2V0IGF0IGxlYXN0IGFzIGZhciBhcyB0aGUg
dGhlIEJPRFkgZWxlbWVudCBpbiBhIGRvY3VtZW50LgotICAgICAgICAgICAgaWYgKG5vZGUtPmlz
QmxvY2tGbG93KCkgJiYgbm9kZS0+aWRlbnRpZmllcigpICE9IElEX0hUTUwpCisgICAgICAgICAg
ICBpZiAobm9kZS0+aXNCbG9ja0Zsb3coKSAmJiBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
aHRtbCgpKSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIG5vZGUgPSBub2Rl
LT50cmF2ZXJzZU5leHROb2RlKCk7CiAgICAgICAgIH0KSW5kZXg6IGt3cS9XZWJDb3JlQnJpZGdl
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9XZWJDb3JlQnJp
ZGdlLm1tLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjM5NgpkaWZmIC11IC1wIC1yMS4zOTYga3dx
L1dlYkNvcmVCcmlkZ2UubW0KLS0tIGt3cS9XZWJDb3JlQnJpZGdlLm1tCTE0IEp1biAyMDA1IDAw
OjIzOjQ1IC0wMDAwCTEuMzk2CisrKyBrd3EvV2ViQ29yZUJyaWRnZS5tbQkyMCBKdW4gMjAwNSAy
MDo1NjowOSAtMDAwMApAQCAtMzksNyArMzksNiBAQAogI2ltcG9ydCAiaHRtbF9pbWFnZWltcGwu
aCIKICNpbXBvcnQgImh0bWxhdHRycy5oIgogI2ltcG9ydCAiaHRtbGVkaXRpbmcuaCIKLSNpbXBv
cnQgImh0bWx0YWdzLmgiCiAjaW1wb3J0ICJraHRtbF9wYXJ0LmgiCiAjaW1wb3J0ICJraHRtbHZp
ZXcuaCIKICNpbXBvcnQgImtqc19wcm94eS5oIgpAQCAtNjcsNyArNjYsNiBAQAogI2ltcG9ydCAi
S1dRQXNzZXJ0aW9ucy5oIgogI2ltcG9ydCAiS1dRQ2hhcnNldHMuaCIKICNpbXBvcnQgIktXUUNs
aXBib2FyZC5oIgotI2ltcG9ydCAiS1dRRE9NTm9kZS5oIgogI2ltcG9ydCAiS1dRRWRpdENvbW1h
bmQuaCIKICNpbXBvcnQgIktXUUZvbnQuaCIKICNpbXBvcnQgIktXUUZvdW5kYXRpb25FeHRyYXMu
aCIKQEAgLTEwMCw2ICs5OCw3IEBAIHVzaW5nIERPTTo6SFRNTEZvcm1FbGVtZW50SW1wbDsKIHVz
aW5nIERPTTo6SFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGw7CiB1c2luZyBET006OkhUTUxJbWFn
ZUVsZW1lbnRJbXBsOwogdXNpbmcgRE9NOjpIVE1MSW5wdXRFbGVtZW50SW1wbDsKK3VzaW5nIERP
TTo6SFRNTE5hbWVzOwogdXNpbmcgRE9NOjpOb2RlSW1wbDsKIHVzaW5nIERPTTo6UG9zaXRpb247
CiB1c2luZyBET006OlJhbmdlSW1wbDsKQEAgLTkxMyw3ICs5MTIsNyBAQCBzdGF0aWMgTlNWaWV3
ICp2aWV3Rm9yRWxlbWVudChFbGVtZW50SW1wCiBzdGF0aWMgSFRNTElucHV0RWxlbWVudEltcGwg
KmlucHV0RWxlbWVudEZyb21ET01FbGVtZW50KERPTUVsZW1lbnQgKmVsZW1lbnQpCiB7CiAgICAg
Tm9kZUltcGwgKm5vZGUgPSBbZWxlbWVudCBfbm9kZUltcGxdOwotICAgIGlmIChub2RlICYmIGlk
RnJvbU5vZGUobm9kZSkgPT0gSURfSU5QVVQpIHsKKyAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OmlucHV0KCkpKSB7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MSW5w
dXRFbGVtZW50SW1wbCAqPihub2RlKTsKICAgICB9CiAgICAgcmV0dXJuIG5pbDsKQEAgLTkyNiw3
ICs5MjUsNyBAQCBzdGF0aWMgSFRNTEZvcm1FbGVtZW50SW1wbCAqZm9ybUVsZW1lbnRGCiAgICAg
Ly8gbWFwcy5nb29nbGUuY29tIGNyYXNoZXMgb3RoZXJ3aXNlIGJlY2F1c2UgaXQgaXMgYW4geHNs
dCBmaWxlCiAgICAgLy8gdGhhdCBjb250YWlucyA8Zm9ybT4gZWxlbWVudHMgdGhhdCBhcmVuJ3Qg
aW4gYW55IG5hbWVzcGFjZSwgc28KICAgICAvLyB0aGV5IGNvbWUgb3V0IGFzIGdlbmVyaWMgQ01M
IGVsZW1lbnRzCi0gICAgaWYgKG5vZGUgJiYgbm9kZS0+aXNIVE1MRWxlbWVudCgpICYmIGlkRnJv
bU5vZGUobm9kZSkgPT0gSURfRk9STSkgeworICAgIGlmIChub2RlICYmIG5vZGUtPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjpmb3JtKCkpKSB7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1M
Rm9ybUVsZW1lbnRJbXBsICo+KG5vZGUpOwogICAgIH0KICAgICByZXR1cm4gbmlsOwpAQCAtMTA5
Niw3ICsxMDk1LDcgQEAgc3RhdGljIEhUTUxGb3JtRWxlbWVudEltcGwgKmZvcm1FbGVtZW50Rgog
ICAgIAogICAgICAgICAgICAgLy8gRklYTUU6IENvZGUgY29waWVkIGZyb20gUmVuZGVySW1hZ2U6
OnVwZGF0ZUZyb21FbGVtZW50OyBzaG91bGQgc2hhcmUuCiAgICAgICAgICAgICBET01TdHJpbmcg
YXR0cjsKLSAgICAgICAgICAgIGlmIChpZEZyb21Ob2RlKGkpID09IElEX09CSkVDVCkgeworICAg
ICAgICAgICAgaWYgKGktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvYmplY3QoKSkpIHsKICAgICAg
ICAgICAgICAgICBhdHRyID0gaS0+Z2V0QXR0cmlidXRlKEFUVFJfREFUQSk7CiAgICAgICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGF0dHIgPSBpLT5nZXRBdHRyaWJ1dGUoQVRUUl9T
UkMpOwpAQCAtMTEwOCw5ICsxMTA3LDkgQEAgc3RhdGljIEhUTUxGb3JtRWxlbWVudEltcGwgKmZv
cm1FbGVtZW50RgogICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBGSVhNRTogQ29kZSBjb3Bp
ZWQgZnJvbSBSZW5kZXJJbWFnZTo6dXBkYXRlRnJvbUVsZW1lbnQ7IHNob3VsZCBzaGFyZS4KICAg
ICAgICAgICAgIERPTVN0cmluZyBhbHQ7Ci0gICAgICAgICAgICBpZiAoaWRGcm9tTm9kZShpKSA9
PSBJRF9JTlBVVCkKKyAgICAgICAgICAgIGlmIChpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW5w
dXQoKSkpCiAgICAgICAgICAgICAgICAgYWx0ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVu
dEltcGwgKj4oaSktPmFsdFRleHQoKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGlkRnJvbU5vZGUo
aSkgPT0gSURfSU1HKQorICAgICAgICAgICAgZWxzZSBpZiAoaS0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OmltZygpKSkKICAgICAgICAgICAgICAgICBhbHQgPSBzdGF0aWNfY2FzdDxIVE1MSW1hZ2VF
bGVtZW50SW1wbCAqPihpKS0+YWx0VGV4dCgpOwogICAgICAgICAgICAgaWYgKCFhbHQuaXNOdWxs
KCkpIHsKICAgICAgICAgICAgICAgICBRU3RyaW5nIGFsdFRleHQgPSBhbHQuc3RyaW5nKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>2558</attachid>
            <date>2005-06-22 16:41:39 -0700</date>
            <delta_ts>2005-06-22 18:27:50 -0700</delta_ts>
            <desc>Re-implement CSS namespace support to use QualifiedNames.  Finish the HTML parser (except for 2 remaining issues).</desc>
            <filename>patch-5.txt</filename>
            <type>text/plain</type>
            <size>592751</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUucGJwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvV2ViQ29yZS9XZWJDb3JlLnBicHJvai9wcm9qZWN0LnBieHByb2osdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuNTU2CmRpZmYgLXUgLXAgLXIxLjU1NiBXZWJDb3JlLnBicHJvai9w
cm9qZWN0LnBieHByb2oKLS0tIFdlYkNvcmUucGJwcm9qL3Byb2plY3QucGJ4cHJvagkyMiBKdW4g
MjAwNSAxNTozMTo1NyAtMDAwMAkxLjU1NgorKysgV2ViQ29yZS5wYnByb2ovcHJvamVjdC5wYnhw
cm9qCTIyIEp1biAyMDA1IDIzOjIyOjQ2IC0wMDAwCkBAIC0yMTQsMzIgKzIxNCw2IEBACiAvLzJE
MgogLy8yRDMKIC8vMkQ0Ci0vLzM1MAotLy8zNTEKLS8vMzUyCi0vLzM1MwotLy8zNTQKLQkJMzU0
RjI0ODkwMkVFMjg1OTBBQ0EyQUNBID0gewotCQkJZmlsZUVuY29kaW5nID0gMzA7Ci0JCQlpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOwotCQkJbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsKLQkJCXBhdGggPSBLV1FET01Ob2RlLmg7Ci0JCQlyZWZUeXBlID0gNDsKLQkJCXNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7Ci0JCX07Ci0JCTM1NEYyNDhBMDJFRTI4NTkwQUNBMkFDQSA9IHsKLQkJ
CWZpbGVFbmNvZGluZyA9IDMwOwotCQkJaXNhID0gUEJYRmlsZVJlZmVyZW5jZTsKLQkJCWxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOwotCQkJcGF0aCA9IEtXUURPTU5vZGUu
Y3BwOwotCQkJcmVmVHlwZSA9IDQ7Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwotCQl9Owot
Ly8zNTAKLS8vMzUxCi0vLzM1MgotLy8zNTMKLS8vMzU0CiAvLzUxMAogLy81MTEKIC8vNTEyCkBA
IC0xODcxLDI0ICsxODQ1LDYgQEAKIAkJCXNoZWxsUGF0aCA9IC9iaW4vc2g7CiAJCQlzaGVsbFNj
cmlwdCA9ICJcIiRDUkVBVEVfSEFTSF9UQUJMRVwiIGtodG1sL2VjbWEveG1sc2VyaWFsaXplci5j
cHAgPiBcIiRERVJJVkVEX0ZJTEVfRElSL3htbHNlcmlhbGl6ZXIubHV0LmhcIiI7CiAJCX07Ci0J
CTkzMkZDMUMwMDgyNEFCQjkwMDVCM0M3NSA9IHsKLQkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0
ODM2NDc7Ci0JCQlmaWxlcyA9ICgKLQkJCSk7Ci0JCQlpbnB1dFBhdGhzID0gKAotCQkJCWtodG1s
L21pc2MvbWFrZXRhZ3MsCi0JCQkJa2h0bWwvbWlzYy9odG1sdGFncy5pbiwKLQkJCSk7Ci0JCQlp
c2EgPSBQQlhTaGVsbFNjcmlwdEJ1aWxkUGhhc2U7Ci0JCQluYW1lID0gaHRtbHRhZ3MuYy9oOwot
CQkJb3V0cHV0UGF0aHMgPSAoCi0JCQkJIiQoREVSSVZFRF9GSUxFX0RJUikvaHRtbHRhZ3MuYyIs
Ci0JCQkJIiQoREVSSVZFRF9GSUxFX0RJUikvaHRtbHRhZ3MuaCIsCi0JCQkpOwotCQkJcnVuT25s
eUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7Ci0JCQlzaGVsbFBhdGggPSAvYmluL3No
OwotCQkJc2hlbGxTY3JpcHQgPSAiY2F0IGtodG1sL21pc2MvaHRtbHRhZ3MuaW4gPiBcIiRERVJJ
VkVEX0ZJTEVfRElSL2h0bWx0YWdzLmluXCJcbmNkIFwiJERFUklWRURfRklMRV9ESVJcIlxucGVy
bCBcIiRTUkNST09UL2todG1sL21pc2MvbWFrZXRhZ3NcIiI7Ci0JCX07CiAJCTkzMkZDMjk1MDgy
NEIzNDUwMDVCM0M3NSA9IHsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJCQlm
aWxlcyA9ICgKQEAgLTIzMDcsNyArMjI2Myw2IEBACiAJCQkJOTMyRkMyQkMwODI0QjQyMjAwNUIz
Qzc1LAogCQkJCTkzMkZDMEI3MDgyNEExNzUwMDVCM0M3NSwKIAkJCQk5MzJGQzI5NTA4MjRCMzQ1
MDA1QjNDNzUsCi0JCQkJOTMyRkMxQzAwODI0QUJCOTAwNUIzQzc1LAogCQkJCTkzRUE2ODZDMDgy
NDlBRjQwMDY4N0Y1NiwKIAkJCQk5MzJGQzEwQjA4MjRBNEQ0MDA1QjNDNzUsCiAJCQkJOTMyRkMx
NjEwODI0QThFMzAwNUIzQzc1LApAQCAtMjQxNSw3ICsyMzcwLDYgQEAKIAkJCQk5M0YxOThEQzA4
MjQ1RTU5MDAxRTlBQkMsCiAJCQkJOTNGMTk4REUwODI0NUU1OTAwMUU5QUJDLAogCQkJCTkzRjE5
OEUwMDgyNDVFNTkwMDFFOUFCQywKLQkJCQk5M0YxOThFMjA4MjQ1RTU5MDAxRTlBQkMsCiAJCQkJ
OTNGMTk4RTMwODI0NUU1OTAwMUU5QUJDLAogCQkJCTkzRjE5OEU0MDgyNDVFNTkwMDFFOUFCQywK
IAkJCQk5M0YxOThFNTA4MjQ1RTU5MDAxRTlBQkMsCkBAIC0yNDkyLDcgKzI0NDYsNiBAQAogCQkJ
CTkzRjE5OTJFMDgyNDVFNTkwMDFFOUFCQywKIAkJCQk5M0YxOTkyRjA4MjQ1RTU5MDAxRTlBQkMs
CiAJCQkJOTNGMTk5MzAwODI0NUU1OTAwMUU5QUJDLAotCQkJCTkzRjE5OTMxMDgyNDVFNTkwMDFF
OUFCQywKIAkJCQk5M0YxOTkzMjA4MjQ1RTU5MDAxRTlBQkMsCiAJCQkJOTNGMTk5MzMwODI0NUU1
OTAwMUU5QUJDLAogCQkJCTkzRjE5OTM0MDgyNDVFNTkwMDFFOUFCQywKQEAgLTI2NDcsNyArMjYw
MCw2IEBACiAJCQkJOTNGMTk5QzkwODI0NUU1OTAwMUU5QUJDLAogCQkJCTkzRjE5OUNBMDgyNDVF
NTkwMDFFOUFCQywKIAkJCQk5M0YxOTlDQjA4MjQ1RTU5MDAxRTlBQkMsCi0JCQkJOTNGMTk5Q0Mw
ODI0NUU1OTAwMUU5QUJDLAogCQkJCTkzRjE5OUNFMDgyNDVFNTkwMDFFOUFCQywKIAkJCQk5M0Yx
OTlDRjA4MjQ1RTU5MDAxRTlBQkMsCiAJCQkJOTNGMTk5RDAwODI0NUU1OTAwMUU5QUJDLApAQCAt
Mjk2OCwxMiArMjkyMCw2IEBACiAJCQlzZXR0aW5ncyA9IHsKIAkJCX07CiAJCX07Ci0JCTkzRjE5
OEUyMDgyNDVFNTkwMDFFOUFCQyA9IHsKLQkJCWZpbGVSZWYgPSBGNTIzRDIzNjAyREU0Mzk2MDE4
NjM1Q0E7Ci0JCQlpc2EgPSBQQlhCdWlsZEZpbGU7Ci0JCQlzZXR0aW5ncyA9IHsKLQkJCX07Ci0J
CX07CiAJCTkzRjE5OEUzMDgyNDVFNTkwMDFFOUFCQyA9IHsKIAkJCWZpbGVSZWYgPSBGNTIzRDIz
ODAyREU0Mzk2MDE4NjM1Q0E7CiAJCQlpc2EgPSBQQlhCdWlsZEZpbGU7CkBAIC0zNDMwLDEyICsz
Mzc2LDYgQEAKIAkJCXNldHRpbmdzID0gewogCQkJfTsKIAkJfTsKLQkJOTNGMTk5MzEwODI0NUU1
OTAwMUU5QUJDID0gewotCQkJZmlsZVJlZiA9IDM1NEYyNDg5MDJFRTI4NTkwQUNBMkFDQTsKLQkJ
CWlzYSA9IFBCWEJ1aWxkRmlsZTsKLQkJCXNldHRpbmdzID0gewotCQkJfTsKLQkJfTsKIAkJOTNG
MTk5MzIwODI0NUU1OTAwMUU5QUJDID0gewogCQkJZmlsZVJlZiA9IEY1ODc4Njg1MDJERTNCODYw
MUVBNDEyMjsKIAkJCWlzYSA9IFBCWEJ1aWxkRmlsZTsKQEAgLTQzOTgsMTIgKzQzMzgsNiBAQAog
CQkJc2V0dGluZ3MgPSB7CiAJCQl9OwogCQl9OwotCQk5M0YxOTlDQzA4MjQ1RTU5MDAxRTlBQkMg
PSB7Ci0JCQlmaWxlUmVmID0gQkM3RkRFMzIwNUMxRDlBQjAwNzBBOTAyOwotCQkJaXNhID0gUEJY
QnVpbGRGaWxlOwotCQkJc2V0dGluZ3MgPSB7Ci0JCQl9OwotCQl9OwogCQk5M0YxOTlDRTA4MjQ1
RTU5MDAxRTlBQkMgPSB7CiAJCQlmaWxlUmVmID0gQkMzQjM2NDYwNUM5RDVFMjAwRTQyOTAyOwog
CQkJaXNhID0gUEJYQnVpbGRGaWxlOwpAQCAtNDkzOCw3ICs0ODcyLDYgQEAKIAkJCQk5M0YxOUE4
QjA4MjQ1RTU5MDAxRTlBQkMsCiAJCQkJOTNGMTlBOEMwODI0NUU1OTAwMUU5QUJDLAogCQkJCTkz
RjE5QThEMDgyNDVFNTkwMDFFOUFCQywKLQkJCQk5M0YxOUE4RTA4MjQ1RTU5MDAxRTlBQkMsCiAJ
CQkJOTNGMTlBOEYwODI0NUU1OTAwMUU5QUJDLAogCQkJCTkzRjE5QTkwMDgyNDVFNTkwMDFFOUFC
QywKIAkJCQk5M0YxOUE5MTA4MjQ1RTU5MDAxRTlBQkMsCkBAIC00OTkxLDcgKzQ5MjQsNiBAQAog
CQkJCTkzRjE5QUMwMDgyNDVFNTkwMDFFOUFCQywKIAkJCQk5M0YxOUFDMTA4MjQ1RTU5MDAxRTlB
QkMsCiAJCQkJOTNGMTlBQzIwODI0NUU1OTAwMUU5QUJDLAotCQkJCTkzRjE5QUMzMDgyNDVFNTkw
MDFFOUFCQywKIAkJCQk5M0YxOUFDNDA4MjQ1RTU5MDAxRTlBQkMsCiAJCQkJOTNGMTlBQzUwODI0
NUU1OTAwMUU5QUJDLAogCQkJCTkzRjE5QUM2MDgyNDVFNTkwMDFFOUFCQywKQEAgLTUwMzMsNyAr
NDk2NSw2IEBACiAJCQkJOTNGMTlBRUMwODI0NUU1OTAwMUU5QUJDLAogCQkJCTkzRjE5QUVEMDgy
NDVFNTkwMDFFOUFCQywKIAkJCQk5M0YxOUFFRTA4MjQ1RTU5MDAxRTlBQkMsCi0JCQkJOTNGMTlB
RUYwODI0NUU1OTAwMUU5QUJDLAogCQkJCTkzRjE5QUYwMDgyNDVFNTkwMDFFOUFCQywKIAkJCQk5
M0YxOUFGMTA4MjQ1RTU5MDAxRTlBQkMsCiAJCQkJOTNGMTlBRjIwODI0NUU1OTAwMUU5QUJDLApA
QCAtNTczNywxMiArNTY2OCw2IEBACiAJCQlzZXR0aW5ncyA9IHsKIAkJCX07CiAJCX07Ci0JCTkz
RjE5QThFMDgyNDVFNTkwMDFFOUFCQyA9IHsKLQkJCWZpbGVSZWYgPSBGNTIzRDIzNTAyREU0Mzk2
MDE4NjM1Q0E7Ci0JCQlpc2EgPSBQQlhCdWlsZEZpbGU7Ci0JCQlzZXR0aW5ncyA9IHsKLQkJCX07
Ci0JCX07CiAJCTkzRjE5QThGMDgyNDVFNTkwMDFFOUFCQyA9IHsKIAkJCWZpbGVSZWYgPSBGNTIz
RDIzNzAyREU0Mzk2MDE4NjM1Q0E7CiAJCQlpc2EgPSBQQlhCdWlsZEZpbGU7CkBAIC02MDU1LDEy
ICs1OTgwLDYgQEAKIAkJCXNldHRpbmdzID0gewogCQkJfTsKIAkJfTsKLQkJOTNGMTlBQzMwODI0
NUU1OTAwMUU5QUJDID0gewotCQkJZmlsZVJlZiA9IDM1NEYyNDhBMDJFRTI4NTkwQUNBMkFDQTsK
LQkJCWlzYSA9IFBCWEJ1aWxkRmlsZTsKLQkJCXNldHRpbmdzID0gewotCQkJfTsKLQkJfTsKIAkJ
OTNGMTlBQzQwODI0NUU1OTAwMUU5QUJDID0gewogCQkJZmlsZVJlZiA9IEY1MTE3QkNBMDJGOUZG
RUYwMTg2MzVDRTsKIAkJCWlzYSA9IFBCWEJ1aWxkRmlsZTsKQEAgLTYzMDcsMTIgKzYyMjYsNiBA
QAogCQkJc2V0dGluZ3MgPSB7CiAJCQl9OwogCQl9OwotCQk5M0YxOUFFRjA4MjQ1RTU5MDAxRTlB
QkMgPSB7Ci0JCQlmaWxlUmVmID0gQkM3RkRFMzEwNUMxRDlBQjAwNzBBOTAyOwotCQkJaXNhID0g
UEJYQnVpbGRGaWxlOwotCQkJc2V0dGluZ3MgPSB7Ci0JCQl9OwotCQl9OwogCQk5M0YxOUFGMDA4
MjQ1RTU5MDAxRTlBQkMgPSB7CiAJCQlmaWxlUmVmID0gQkMzQjM2NDUwNUM5RDVFMjAwRTQyOTAy
OwogCQkJaXNhID0gUEJYQnVpbGRGaWxlOwpAQCAtNjg1NiwyMiArNjc2OSw2IEBACiAJCQlyZWZU
eXBlID0gNDsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07Ci0JCUJDN0ZERTMxMDVD
MUQ5QUIwMDcwQTkwMiA9IHsKLQkJCWZpbGVFbmNvZGluZyA9IDMwOwotCQkJaXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsKLQkJCWxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOwot
CQkJcGF0aCA9IHhtbF9uYW1lc3BhY2VfdGFibGUuY3BwOwotCQkJcmVmVHlwZSA9IDQ7Ci0JCQlz
b3VyY2VUcmVlID0gIjxncm91cD4iOwotCQl9OwotCQlCQzdGREUzMjA1QzFEOUFCMDA3MEE5MDIg
PSB7Ci0JCQlmaWxlRW5jb2RpbmcgPSAzMDsKLQkJCWlzYSA9IFBCWEZpbGVSZWZlcmVuY2U7Ci0J
CQlsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOwotCQkJcGF0aCA9IHhtbF9uYW1l
c3BhY2VfdGFibGUuaDsKLQkJCXJlZlR5cGUgPSA0OwotCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsKLQkJfTsKIAkJQkM4MEE2OTMwNDY4Qjc4MTAwREJDQzlDID0gewogCQkJZmlsZUVuY29kaW5n
ID0gMzA7CiAJCQlpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOwpAQCAtNzQzMiw4ICs3MzI5LDYgQEAK
IAkJCQkyRDkwNjYwQzA2NjVEOTM3MDA2QjZGMUEsCiAJCQkJRjU4Nzg0Q0QwMkRFMzc1OTAxRUE0
MTIyLAogCQkJCUY1ODc4NERBMDJERTM3NTkwMUVBNDEyMiwKLQkJCQkzNTRGMjQ4OTAyRUUyODU5
MEFDQTJBQ0EsCi0JCQkJMzU0RjI0OEEwMkVFMjg1OTBBQ0EyQUNBLAogCQkJCTkzMUM4QTE2MDM4
MDI4OEIwMDg2MzVDRSwKIAkJCQk5MzFDOEExNzAzODAyODhCMDA4NjM1Q0UsCiAJCQkJQkVGN0VF
QTAwNUZGOEYwRDAwOTcxN0VFLApAQCAtODQwMiwyMiArODI5Nyw2IEBACiAJCQlyZWZUeXBlID0g
NDsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07Ci0JCUY1MjNEMjM1MDJERTQzOTYw
MTg2MzVDQSA9IHsKLQkJCWZpbGVFbmNvZGluZyA9IDMwOwotCQkJaXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsKLQkJCWxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOwotCQkJcGF0
aCA9IGR0ZC5jcHA7Ci0JCQlyZWZUeXBlID0gNDsKLQkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
Ci0JCX07Ci0JCUY1MjNEMjM2MDJERTQzOTYwMTg2MzVDQSA9IHsKLQkJCWZpbGVFbmNvZGluZyA9
IDMwOwotCQkJaXNhID0gUEJYRmlsZVJlZmVyZW5jZTsKLQkJCWxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7Ci0JCQlwYXRoID0gZHRkLmg7Ci0JCQlyZWZUeXBlID0gNDsKLQkJCXNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7Ci0JCX07CiAJCUY1MjNEMjM3MDJERTQzOTYwMTg2MzVDQSA9
IHsKIAkJCWZpbGVFbmNvZGluZyA9IDMwOwogCQkJaXNhID0gUEJYRmlsZVJlZmVyZW5jZTsKQEAg
LTg2NDYsOCArODUyNSw2IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJCQk1NTBBMEJDQjA4NUY2MDRE
MDA3MzUzRDYsCiAJCQkJNTUwQTBCQ0MwODVGNjA0RDAwNzM1M0Q2LAotCQkJCUY1MjNEMjM1MDJE
RTQzOTYwMTg2MzVDQSwKLQkJCQlGNTIzRDIzNjAyREU0Mzk2MDE4NjM1Q0EsCiAJCQkJRjUyM0Qy
MzcwMkRFNDM5NjAxODYzNUNBLAogCQkJCUY1MjNEMjM4MDJERTQzOTYwMTg2MzVDQSwKIAkJCQlG
NTIzRDIzOTAyREU0Mzk2MDE4NjM1Q0EsCkBAIC05MzU0LDggKzkyMzEsNiBAQAogCQkJCUY1MjNE
MzA2MDJERTQ0NzYwMTg2MzVDQSwKIAkJCQlGNTIzRDMwNzAyREU0NDc2MDE4NjM1Q0EsCiAJCQkJ
RjUyM0QzMDgwMkRFNDQ3NjAxODYzNUNBLAotCQkJCUJDN0ZERTMxMDVDMUQ5QUIwMDcwQTkwMiwK
LQkJCQlCQzdGREUzMjA1QzFEOUFCMDA3MEE5MDIsCiAJCQkJRjUyM0QzMDkwMkRFNDQ3NjAxODYz
NUNBLAogCQkJCUY1MjNEMzBBMDJERTQ0NzYwMTg2MzVDQSwKIAkJCSk7CkluZGV4OiBraHRtbC9r
aHRtbHZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1s
L2todG1sdmlldy5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTMzCmRpZmYgLXUgLXAgLXIx
LjEzMyBraHRtbC9raHRtbHZpZXcuY3BwCi0tLSBraHRtbC9raHRtbHZpZXcuY3BwCTExIE1heSAy
MDA1IDAwOjU4OjI3IC0wMDAwCTEuMTMzCisrKyBraHRtbC9raHRtbHZpZXcuY3BwCTIyIEp1biAy
MDA1IDIzOjIyOjQ3IC0wMDAwCkBAIC02MDcsMTIgKzYwNywxMiBAQCB2b2lkIEtIVE1MVmlldzo6
bGF5b3V0KCkKICAgICBpZiAoZG9jdW1lbnQtPmlzSFRNTERvY3VtZW50KCkpIHsKICAgICAgICAg
Tm9kZUltcGwgKmJvZHkgPSBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnRJbXBsKj4oZG9jdW1lbnQp
LT5ib2R5KCk7CiAgICAgICAgIGlmIChib2R5ICYmIGJvZHktPnJlbmRlcmVyKCkpIHsKLSAgICAg
ICAgICAgIGlmIChib2R5LT5pZCgpID09IElEX0ZSQU1FU0VUKSB7CisgICAgICAgICAgICBpZiAo
Ym9keS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZyYW1lc2V0KCkpKSB7CiAgICAgICAgICAgICAg
ICAgYm9keS0+cmVuZGVyZXIoKS0+c2V0TmVlZHNMYXlvdXQodHJ1ZSk7CiAgICAgICAgICAgICAg
ICAgdk1vZGUgPSBBbHdheXNPZmY7CiAgICAgICAgICAgICAgICAgaE1vZGUgPSBBbHdheXNPZmY7
CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChib2R5LT5pZCgpID09IElEX0JP
RFkpIHsKKyAgICAgICAgICAgIGVsc2UgaWYgKGJvZHktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpi
b2R5KCkpKSB7CiAgICAgICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiBvID0gKHJvb3RSZW5kZXJl
ci0+c3R5bGUoKS0+b3ZlcmZsb3coKSA9PSBPVklTSUJMRSkgPyBib2R5LT5yZW5kZXJlcigpIDog
cm9vdFJlbmRlcmVyOwogICAgICAgICAgICAgICAgIGFwcGx5T3ZlcmZsb3dUb1ZpZXdwb3J0KG8s
IGhNb2RlLCB2TW9kZSk7IC8vIE9ubHkgYXBwbGllcyB0byBIVE1MIFVBcywgbm90IHRvIFhNTC9Y
SFRNTCBVQXMKICAgICAgICAgICAgIH0KQEAgLTg3NywxMCArODc3LDcgQEAgdm9pZCBLSFRNTFZp
ZXc6OnZpZXdwb3J0TW91c2VEb3VibGVDbGljawogCiBzdGF0aWMgYm9vbCBpc1N1Ym1pdEltYWdl
KERPTTo6Tm9kZUltcGwgKm5vZGUpCiB7Ci0gICAgcmV0dXJuIG5vZGUKLSAgICAgICAgJiYgbm9k
ZS0+aXNIVE1MRWxlbWVudCgpCi0gICAgICAgICYmIG5vZGUtPmlkKCkgPT0gSURfSU5QVVQKLSAg
ICAgICAgJiYgc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudEltcGwqPihub2RlKS0+aW5wdXRU
eXBlKCkgPT0gSFRNTElucHV0RWxlbWVudEltcGw6OklNQUdFOworICAgIHJldHVybiBub2RlICYm
IG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppbnB1dCgpKSAmJiBzdGF0aWNfY2FzdDxIVE1M
SW5wdXRFbGVtZW50SW1wbCo+KG5vZGUpLT5pbnB1dFR5cGUoKSA9PSBIVE1MSW5wdXRFbGVtZW50
SW1wbDo6SU1BR0U7CiB9CiAKIHZvaWQgS0hUTUxWaWV3Ojp2aWV3cG9ydE1vdXNlTW92ZUV2ZW50
KCBRTW91c2VFdmVudCAqIF9tb3VzZSApCkluZGV4OiBraHRtbC9jc3MvY3NzX2Jhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2Nzcy9jc3NfYmFzZS5j
cHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTUKZGlmZiAtdSAtcCAtcjEuMTUga2h0bWwvY3Nz
L2Nzc19iYXNlLmNwcAotLS0ga2h0bWwvY3NzL2Nzc19iYXNlLmNwcAkxMiBKdW4gMjAwNSAwNDow
NzozMCAtMDAwMAkxLjE1CisrKyBraHRtbC9jc3MvY3NzX2Jhc2UuY3BwCTIyIEp1biAyMDA1IDIz
OjIyOjQ4IC0wMDAwCkBAIC05Myw2ICs5MywxMiBAQCBTdHlsZUxpc3RJbXBsOjp+U3R5bGVMaXN0
SW1wbCgpCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK3N0YXRpYyBjb25zdCBRdWFs
aWZpZWROYW1lJiBhbnlUYWdOYW1lKCkKK3sKKyAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBhbnlO
YW1lKG51bGxBdG9tLCBzdGFyQXRvbSwgc3RhckF0b20pOworICAgIHJldHVybiBhbnlOYW1lOwor
fQorCiB2b2lkIENTU1NlbGVjdG9yOjpwcmludCh2b2lkKQogewogICAgIGtkRGVidWcoIDYwODAg
KSA8PCAiW1NlbGVjdG9yOiB0YWcgPSAiIDw8ICAgICAgIHRhZyA8PCAiLCBhdHRyID0gXCIiIDw8
IGF0dHIgPDwgIlwiLCBtYXRjaCA9IFwiIiA8PCBtYXRjaApJbmRleDoga2h0bWwvY3NzL2Nzc19i
YXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvY3NzL2Nz
c19iYXNlLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTIKZGlmZiAtdSAtcCAtcjEuMTIga2h0
bWwvY3NzL2Nzc19iYXNlLmgKLS0tIGtodG1sL2Nzcy9jc3NfYmFzZS5oCTEyIEp1biAyMDA1IDA0
OjA3OjMwIC0wMDAwCTEuMTIKKysrIGtodG1sL2Nzcy9jc3NfYmFzZS5oCTIyIEp1biAyMDA1IDIz
OjIyOjQ4IC0wMDAwCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiZG9tL2RvbV9zdHJpbmcu
aCIKICNpbmNsdWRlICJkb20vZG9tX21pc2MuaCIKICNpbmNsdWRlICJ4bWwvZG9tX25vZGVpbXBs
LmgiCisjaW5jbHVkZSAiZG9tX3FuYW1lLmgiCiAjaW5jbHVkZSAibWlzYy9zaGFyZWQuaCIKICNp
bmNsdWRlIDxxZGF0ZXRpbWUuaD4KICNpbmNsdWRlIDxxcHRybGlzdC5oPgpAQCAtNDYsMjAgKzQ3
LDIwIEBAIG5hbWVzcGFjZSBET00gewogICAgIGNsYXNzIERvY3VtZW50SW1wbDsKIAogICAgIHN0
cnVjdCBDU1NOYW1lc3BhY2UgewotICAgICAgICBET01TdHJpbmcgbV9wcmVmaXg7Ci0gICAgICAg
IERPTVN0cmluZyBtX3VyaTsKKyAgICAgICAgQXRvbWljU3RyaW5nIG1fcHJlZml4OworICAgICAg
ICBBdG9taWNTdHJpbmcgbV91cmk7CiAgICAgICAgIENTU05hbWVzcGFjZSogbV9wYXJlbnQ7CiAK
ICAgICAgICAgTUFJTl9USFJFQURfQUxMT0NBVEVEOwogCi0gICAgICAgIENTU05hbWVzcGFjZShj
b25zdCBET01TdHJpbmcmIHAsIGNvbnN0IERPTVN0cmluZyYgdSwgQ1NTTmFtZXNwYWNlKiBwYXJl
bnQpIAorICAgICAgICBDU1NOYW1lc3BhY2UoY29uc3QgQXRvbWljU3RyaW5nJiBwLCBjb25zdCBB
dG9taWNTdHJpbmcmIHUsIENTU05hbWVzcGFjZSogcGFyZW50KSAKICAgICAgICAgICAgIDptX3By
ZWZpeChwKSwgbV91cmkodSksIG1fcGFyZW50KHBhcmVudCkge30KICAgICAgICAgfkNTU05hbWVz
cGFjZSgpIHsgZGVsZXRlIG1fcGFyZW50OyB9CiAgICAgICAgIAotICAgICAgICBjb25zdCBET01T
dHJpbmcmIHVyaSgpIHsgcmV0dXJuIG1fdXJpOyB9Ci0gICAgICAgIGNvbnN0IERPTVN0cmluZyYg
cHJlZml4KCkgeyByZXR1cm4gbV9wcmVmaXg7IH0KKyAgICAgICAgY29uc3QgQXRvbWljU3RyaW5n
JiB1cmkoKSB7IHJldHVybiBtX3VyaTsgfQorICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHBy
ZWZpeCgpIHsgcmV0dXJuIG1fcHJlZml4OyB9CiAgICAgICAgIAotICAgICAgICBDU1NOYW1lc3Bh
Y2UqIG5hbWVzcGFjZUZvclByZWZpeChjb25zdCBET01TdHJpbmcmIHByZWZpeCkgeworICAgICAg
ICBDU1NOYW1lc3BhY2UqIG5hbWVzcGFjZUZvclByZWZpeChjb25zdCBBdG9taWNTdHJpbmcmIHBy
ZWZpeCkgewogICAgICAgICAgICAgaWYgKHByZWZpeCA9PSBtX3ByZWZpeCkKICAgICAgICAgICAg
ICAgICByZXR1cm4gdGhpczsKICAgICAgICAgICAgIGlmIChtX3BhcmVudCkKQEAgLTcyLDggKzcz
LDE0IEBAIG5hbWVzcGFjZSBET00gewogICAgIGNsYXNzIENTU1NlbGVjdG9yCiAgICAgewogICAg
IHB1YmxpYzoKLQlDU1NTZWxlY3RvcigpCi0JICAgIDogdGFnSGlzdG9yeSgwKSwgc2ltcGxlU2Vs
ZWN0b3IoMCksIG5leHRTZWxlY3RvcigwKSwgYXR0cigwKSwgdGFnKGFueVFOYW1lKSwKKyAgICAg
ICAgQ1NTU2VsZWN0b3IoKQorICAgICAgICAgICAgOiB0YWdIaXN0b3J5KDApLCBzaW1wbGVTZWxl
Y3RvcigwKSwgbmV4dFNlbGVjdG9yKDApLCBhdHRyKDApLCB0YWcoYW55VGFnTmFtZSgpKSwKKyAg
ICAgICAgICAgICAgcmVsYXRpb24oIERlc2NlbmRhbnQgKSwgbWF0Y2goIE5vbmUgKSwKKyAgICAg
ICAgICAgICAgcHNldWRvSWQoIDAgKSwgX3BzZXVkb1R5cGUoUHNldWRvTm90UGFyc2VkKQorICAg
ICAgICB7fQorICAgICAgICAKKwlDU1NTZWxlY3Rvcihjb25zdCBRdWFsaWZpZWROYW1lJiBxTmFt
ZSkKKwkgICAgOiB0YWdIaXN0b3J5KDApLCBzaW1wbGVTZWxlY3RvcigwKSwgbmV4dFNlbGVjdG9y
KDApLCBhdHRyKDApLCB0YWcocU5hbWUpLAogICAgICAgICAgICAgICByZWxhdGlvbiggRGVzY2Vu
ZGFudCApLCBtYXRjaCggTm9uZSApLAogICAgICAgICAgICAgICBwc2V1ZG9JZCggMCApLCBfcHNl
dWRvVHlwZShQc2V1ZG9Ob3RQYXJzZWQpCiAgICAgICAgIHt9CkBAIC0xNjcsMTIgKzE3NCwxNyBA
QCBuYW1lc3BhY2UgRE9NIHsKICAgICAgICAgICAgIHJldHVybiBfcHNldWRvVHlwZTsKICAgICAg
ICAgfQogCisgICAgICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBhbnlUYWdOYW1lKCk7
CisKKyAgICAgICAgYm9vbCBoYXNUYWcoKSBjb25zdCB7IHJldHVybiB0YWcgIT0gYW55VGFnTmFt
ZSgpOyB9CisKIAltdXRhYmxlIERPTTo6QXRvbWljU3RyaW5nIHZhbHVlOwogCUNTU1NlbGVjdG9y
KiB0YWdIaXN0b3J5OwogICAgICAgICBDU1NTZWxlY3Rvciogc2ltcGxlU2VsZWN0b3I7IC8vIFVz
ZWQgZm9yIDpub3QuCiAgICAgICAgIENTU1NlbGVjdG9yKiBuZXh0U2VsZWN0b3I7IC8vIHVzZWQg
Zm9yICwtY2hhaW5lZCBzZWxlY3RvcnMKIAlRX1VJTlQzMiAgICAgYXR0cjsKLQlRX1VJTlQzMiAg
ICAgdGFnOworCQorICAgICAgICBRdWFsaWZpZWROYW1lIHRhZzsKIAogICAgICAgICBSZWxhdGlv
biByZWxhdGlvbiAgICAgICAgICAgICAgOiAzOwogCW11dGFibGUgTWF0Y2ggIG1hdGNoICAgICAg
ICAgICA6IDQ7CkluZGV4OiBraHRtbC9jc3MvY3NzX3J1bGVpbXBsLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9jc3MvY3NzX3J1bGVpbXBsLmNwcCx2CnJl
dHJpZXZpbmcgcmV2aXNpb24gMS4xOApkaWZmIC11IC1wIC1yMS4xOCBraHRtbC9jc3MvY3NzX3J1
bGVpbXBsLmNwcAotLS0ga2h0bWwvY3NzL2Nzc19ydWxlaW1wbC5jcHAJMTEgTWF5IDIwMDUgMDU6
NDk6MzQgLTAwMDAJMS4xOAorKysga2h0bWwvY3NzL2Nzc19ydWxlaW1wbC5jcHAJMjIgSnVuIDIw
MDUgMjM6MjI6NDggLTAwMDAKQEAgLTMxLDcgKzMxLDYgQEAKICNpbmNsdWRlICJjc3MvY3NzX3J1
bGVpbXBsLmgiCiAKICNpbmNsdWRlICJtaXNjL2xvYWRlci5oIgotI2luY2x1ZGUgIm1pc2MvaHRt
bHRhZ3MuaCIKICNpbmNsdWRlICJtaXNjL2h0bWxhdHRycy5oIgogI2luY2x1ZGUgInhtbC9kb21f
ZG9jaW1wbC5oIgogCkluZGV4OiBraHRtbC9jc3MvY3NzX3N0eWxlc2hlZXRpbXBsLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9jc3MvY3NzX3N0eWxlc2hl
ZXRpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMgpkaWZmIC11IC1wIC1yMS4xMiBr
aHRtbC9jc3MvY3NzX3N0eWxlc2hlZXRpbXBsLmNwcAotLS0ga2h0bWwvY3NzL2Nzc19zdHlsZXNo
ZWV0aW1wbC5jcHAJMTEgTWF5IDIwMDUgMDA6NTg6MjcgLTAwMDAJMS4xMgorKysga2h0bWwvY3Nz
L2Nzc19zdHlsZXNoZWV0aW1wbC5jcHAJMjIgSnVuIDIwMDUgMjM6MjI6NDggLTAwMDAKQEAgLTM4
LDggKzM4LDYgQEAKICNpbmNsdWRlICJodG1sL2h0bWxfZG9jdW1lbnRpbXBsLmgiCiAjaW5jbHVk
ZSAibWlzYy9sb2FkZXIuaCIKIAotI2luY2x1ZGUgInhtbF9uYW1lc3BhY2VfdGFibGUuaCIKLQog
I2luY2x1ZGUgPGtkZWJ1Zy5oPgogCiB1c2luZyBuYW1lc3BhY2UgRE9NOwpAQCAtMjEwLDcgKzIw
OCw3IEBAIHZvaWQgQ1NTU3R5bGVTaGVldEltcGw6OmRlbGV0ZVJ1bGUoIHVuc2kKICAgICBiLT5k
ZXJlZigpOwogfQogCi12b2lkIENTU1N0eWxlU2hlZXRJbXBsOjphZGROYW1lc3BhY2UoQ1NTUGFy
c2VyKiBwLCBjb25zdCBET006OkRPTVN0cmluZyYgcHJlZml4LCBjb25zdCBET006OkRPTVN0cmlu
ZyYgdXJpKQordm9pZCBDU1NTdHlsZVNoZWV0SW1wbDo6YWRkTmFtZXNwYWNlKENTU1BhcnNlciog
cCwgY29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgsIGNvbnN0IEF0b21pY1N0cmluZyYgdXJpKQog
ewogICAgIGlmICh1cmkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CkBAIC0yMjAsMjYgKzIx
OCwyMSBAQCB2b2lkIENTU1N0eWxlU2hlZXRJbXBsOjphZGROYW1lc3BhY2UoQ1NTCiAgICAgaWYg
KHByZWZpeC5pc0VtcHR5KCkpCiAgICAgICAgIC8vIFNldCB0aGUgZGVmYXVsdCBuYW1lc3BhY2Ug
b24gdGhlIHBhcnNlciBzbyB0aGF0IHNlbGVjdG9ycyB0aGF0IG9taXQgbmFtZXNwYWNlIGluZm8g
d2lsbAogICAgICAgICAvLyBiZSBhYmxlIHRvIHBpY2sgaXQgdXAgZWFzaWx5LgotICAgICAgICBw
LT5kZWZhdWx0TmFtZXNwYWNlID0gWG1sTmFtZXNwYWNlVGFibGU6OmdldE5hbWVzcGFjZUlEKHVy
aSwgZmFsc2UpOworICAgICAgICBwLT5kZWZhdWx0TmFtZXNwYWNlID0gdXJpOwogfQogCi12b2lk
IENTU1N0eWxlU2hlZXRJbXBsOjpkZXRlcm1pbmVOYW1lc3BhY2UoUV9VSU5UMzImIGlkLCBjb25z
dCBET006OkRPTVN0cmluZyYgcHJlZml4KQorY29uc3QgQXRvbWljU3RyaW5nJiBDU1NTdHlsZVNo
ZWV0SW1wbDo6ZGV0ZXJtaW5lTmFtZXNwYWNlKGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4KQog
ewotICAgIC8vIElmIHRoZSBzdHlsZXNoZWV0IGhhcyBubyBuYW1lc3BhY2VzIHdlIGNhbiBqdXN0
IHJldHVybi4gIFRoZXJlIHdvbid0IGJlIGFueSBuZWVkIHRvIGV2ZXIgY2hlY2sKLSAgICAvLyBu
YW1lc3BhY2UgdmFsdWVzIGluIHNlbGVjdG9ycy4KLSAgICBpZiAoIW1fbmFtZXNwYWNlcykKLSAg
ICAgICAgcmV0dXJuOwotICAgIAogICAgIGlmIChwcmVmaXguaXNFbXB0eSgpKQotICAgICAgICBp
ZCA9IG1ha2VJZChub05hbWVzcGFjZSwgbG9jYWxOYW1lUGFydChpZCkpOyAvLyBObyBuYW1lc3Bh
Y2UuIElmIGFuIGVsZW1lbnQvYXR0cmlidXRlIGhhcyBhIG5hbWVzcGFjZSwgd2Ugd29uJ3QgbWF0
Y2ggaXQuCi0gICAgZWxzZSBpZiAocHJlZml4ID09ICIqIikKLSAgICAgICAgaWQgPSBtYWtlSWQo
YW55TmFtZXNwYWNlLCBsb2NhbE5hbWVQYXJ0KGlkKSk7IC8vIFdlJ2xsIG1hdGNoIGFueSBuYW1l
c3BhY2UuCi0gICAgZWxzZSB7CisgICAgICAgIHJldHVybiBlbXB0eUF0b207IC8vIE5vIG5hbWVz
cGFjZS4gSWYgYW4gZWxlbWVudC9hdHRyaWJ1dGUgaGFzIGEgbmFtZXNwYWNlLCB3ZSB3b24ndCBt
YXRjaCBpdC4KKyAgICBlbHNlIGlmIChwcmVmaXggPT0gc3RhckF0b20pCisgICAgICAgIHJldHVy
biBzdGFyQXRvbTsgLy8gV2UnbGwgbWF0Y2ggYW55IG5hbWVzcGFjZS4KKyAgICBlbHNlIGlmICht
X25hbWVzcGFjZXMpIHsKICAgICAgICAgQ1NTTmFtZXNwYWNlKiBucyA9IG1fbmFtZXNwYWNlcy0+
bmFtZXNwYWNlRm9yUHJlZml4KHByZWZpeCk7CiAgICAgICAgIGlmIChucykKLSAgICAgICAgICAg
IC8vIExvb2sgdXAgdGhlIGlkIGZvciB0aGlzIG5hbWVzcGFjZSBVUkkuCi0gICAgICAgICAgICBp
ZCA9IG1ha2VJZChYbWxOYW1lc3BhY2VUYWJsZTo6Z2V0TmFtZXNwYWNlSUQobnMtPnVyaSgpLCBm
YWxzZSksIGxvY2FsTmFtZVBhcnQoaWQpKTsKKyAgICAgICAgICAgIHJldHVybiBucy0+dXJpKCk7
CiAgICAgfQorICAgIHJldHVybiBlbXB0eUF0b207IC8vIEFzc3VtZSB3ZSB3b250IG1hdGNoIGFu
eSBuYW1lc3BhY2VzLgogfQogCiBib29sIENTU1N0eWxlU2hlZXRJbXBsOjpwYXJzZVN0cmluZyhj
b25zdCBET01TdHJpbmcgJnN0cmluZywgYm9vbCBzdHJpY3QpCkluZGV4OiBraHRtbC9jc3MvY3Nz
X3N0eWxlc2hlZXRpbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUv
a2h0bWwvY3NzL2Nzc19zdHlsZXNoZWV0aW1wbC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEx
CmRpZmYgLXUgLXAgLXIxLjExIGtodG1sL2Nzcy9jc3Nfc3R5bGVzaGVldGltcGwuaAotLS0ga2h0
bWwvY3NzL2Nzc19zdHlsZXNoZWV0aW1wbC5oCTExIE1heSAyMDA1IDAwOjU4OjI3IC0wMDAwCTEu
MTEKKysrIGtodG1sL2Nzcy9jc3Nfc3R5bGVzaGVldGltcGwuaAkyMiBKdW4gMjAwNSAyMzoyMjo0
OCAtMDAwMApAQCAtMTA0LDggKzEwNCw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGRlbGV0ZVJ1bGUg
KCB1bnNpZ25lZCBsb25nIGluZGV4LCBpbnQgJmV4Y2VwdGlvbmNvZGUgKTsKICAgICB1bnNpZ25l
ZCBsb25nIGFkZFJ1bGUgKCBjb25zdCBET01TdHJpbmcgJnNlbGVjdG9yLCBjb25zdCBET01TdHJp
bmcgJnN0eWxlLCBsb25nIGluZGV4LCBpbnQgJmV4Y2VwdGlvbmNvZGUgKTsKIAotICAgIHZvaWQg
YWRkTmFtZXNwYWNlKENTU1BhcnNlciogcCwgY29uc3QgRE9NOjpET01TdHJpbmcmIHByZWZpeCwg
Y29uc3QgRE9NOjpET01TdHJpbmcmIHVyaSk7Ci0gICAgdm9pZCBkZXRlcm1pbmVOYW1lc3BhY2Uo
UV9VSU5UMzImIGlkLCBjb25zdCBET006OkRPTVN0cmluZyYgcHJlZml4KTsKKyAgICB2b2lkIGFk
ZE5hbWVzcGFjZShDU1NQYXJzZXIqIHAsIGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4LCBjb25z
dCBBdG9taWNTdHJpbmcmIHVyaSk7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBkZXRlcm1pbmVO
YW1lc3BhY2UoY29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgpOwogICAgIAogICAgIHZpcnR1YWwg
Ym9vbCBwYXJzZVN0cmluZyggY29uc3QgRE9NU3RyaW5nICZzdHJpbmcsIGJvb2wgc3RyaWN0ID0g
dHJ1ZSApOwogCkluZGV4OiBraHRtbC9jc3MvY3NzcGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9jc3MvY3NzcGFyc2VyLmNwcCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS45OApkaWZmIC11IC1wIC1yMS45OCBraHRtbC9jc3MvY3NzcGFyc2VyLmNw
cAotLS0ga2h0bWwvY3NzL2Nzc3BhcnNlci5jcHAJMTEgTWF5IDIwMDUgMDI6MTA6MDkgLTAwMDAJ
MS45OAorKysga2h0bWwvY3NzL2Nzc3BhcnNlci5jcHAJMjIgSnVuIDIwMDUgMjM6MjI6NTEgLTAw
MDAKQEAgLTEwMiw3ICsxMDIsNyBAQCBDU1NQYXJzZXI6OkNTU1BhcnNlciggYm9vbCBzdHJpY3RQ
YXJzaW5nCiAgICAgaW1wb3J0YW50ID0gZmFsc2U7CiAgICAgaW5QYXJzZVNob3J0SGFuZCA9IGZh
bHNlOwogICAgIAotICAgIGRlZmF1bHROYW1lc3BhY2UgPSBhbnlOYW1lc3BhY2U7CisgICAgZGVm
YXVsdE5hbWVzcGFjZSA9IHN0YXJBdG9tOwogICAgIAogICAgIHl5X3N0YXJ0ID0gMTsKIApAQCAt
MTYxLDcgKzE2MSw3IEBAIHZvaWQgQ1NTUGFyc2VyOjpzZXR1cFBhcnNlcihjb25zdCBjaGFyICoK
IHZvaWQgQ1NTUGFyc2VyOjpwYXJzZVNoZWV0KCBDU1NTdHlsZVNoZWV0SW1wbCAqc2hlZXQsIGNv
bnN0IERPTVN0cmluZyAmc3RyaW5nICkKIHsKICAgICBzdHlsZUVsZW1lbnQgPSBzaGVldDsKLSAg
ICBkZWZhdWx0TmFtZXNwYWNlID0gYW55TmFtZXNwYWNlOyAvLyBSZXNldCB0aGUgZGVmYXVsdCBu
YW1lc3BhY2UuCisgICAgZGVmYXVsdE5hbWVzcGFjZSA9IHN0YXJBdG9tOyAvLyBSZXNldCB0aGUg
ZGVmYXVsdCBuYW1lc3BhY2UuCiAgICAgCiAgICAgc2V0dXBQYXJzZXIgKCIiLCBzdHJpbmcsICIi
KTsKIApJbmRleDoga2h0bWwvY3NzL2Nzc3BhcnNlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9XZWJDb3JlL2todG1sL2Nzcy9jc3NwYXJzZXIuaCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS4zMApkaWZmIC11IC1wIC1yMS4zMCBraHRtbC9jc3MvY3NzcGFyc2VyLmgKLS0tIGtodG1s
L2Nzcy9jc3NwYXJzZXIuaAkxOSBOb3YgMjAwNCAwMDoxMjoyMCAtMDAwMAkxLjMwCisrKyBraHRt
bC9jc3MvY3NzcGFyc2VyLmgJMjIgSnVuIDIwMDUgMjM6MjI6NTEgLTAwMDAKQEAgLTE2NCw3ICsx
NjQsNyBAQCBuYW1lc3BhY2UgRE9NIHsKIAlpbnQgbWF4UGFyc2VkUHJvcGVydGllczsKIAlib29s
IGluUGFyc2VTaG9ydEhhbmQ7CiAKLSAgICAgICAgUV9VSU5UMTYgZGVmYXVsdE5hbWVzcGFjZTsK
KyAgICAgICAgQXRvbWljU3RyaW5nIGRlZmF1bHROYW1lc3BhY2U7CiAgICAgICAgIAogCXN0YXRp
YyBDU1NQYXJzZXIgKmN1cnJlbnRQYXJzZXI7CiAKSW5kZXg6IGtodG1sL2Nzcy9jc3NzdHlsZXNl
bGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9j
c3MvY3Nzc3R5bGVzZWxlY3Rvci5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTg3CmRpZmYg
LXUgLXAgLXIxLjE4NyBraHRtbC9jc3MvY3Nzc3R5bGVzZWxlY3Rvci5jcHAKLS0tIGtodG1sL2Nz
cy9jc3NzdHlsZXNlbGVjdG9yLmNwcAkxMiBKdW4gMjAwNSAwNDowNzozMCAtMDAwMAkxLjE4Nwor
Kysga2h0bWwvY3NzL2Nzc3N0eWxlc2VsZWN0b3IuY3BwCTIyIEp1biAyMDA1IDIzOjIyOjU1IC0w
MDAwCkBAIC0zMzksNyArMzM5LDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXRjaFJ1bGVz
KENTU1J1bAogICAgICAgICAgICAgbWF0Y2hSdWxlc0Zvckxpc3QocnVsZXMtPmdldENsYXNzUnVs
ZXMoc2luZ2xlQ2xhc3MtPnN0cmluZygpLmltcGxlbWVudGF0aW9uKCkpLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RSdWxlSW5kZXgsIGxh
c3RSdWxlSW5kZXgpOwogICAgIH0KLSAgICBtYXRjaFJ1bGVzRm9yTGlzdChydWxlcy0+Z2V0VGFn
UnVsZXMoKHZvaWQqKShpbnQpbG9jYWxOYW1lUGFydChlbGVtZW50LT5pZCgpKSksCisgICAgbWF0
Y2hSdWxlc0Zvckxpc3QocnVsZXMtPmdldFRhZ1J1bGVzKGVsZW1lbnQtPmxvY2FsTmFtZSgpLmlt
cGxlbWVudGF0aW9uKCkpLAogICAgICAgICAgICAgICAgICAgICAgIGZpcnN0UnVsZUluZGV4LCBs
YXN0UnVsZUluZGV4KTsKICAgICBtYXRjaFJ1bGVzRm9yTGlzdChydWxlcy0+Z2V0VW5pdmVyc2Fs
UnVsZXMoKSwgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgpOwogICAgIApAQCAtMzYwLDkg
KzM2MCw5IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hSdWxlc0Zvckxpc3QKICAgICBp
ZiAoIXJ1bGVzKSByZXR1cm47CiAgICAgZm9yIChDU1NSdWxlRGF0YSogZCA9IHJ1bGVzLT5maXJz
dCgpOyBkOyBkID0gZC0+bmV4dCgpKSB7CiAgICAgICAgIENTU1N0eWxlUnVsZUltcGwqIHJ1bGUg
PSBkLT5ydWxlKCk7Ci0gICAgICAgIFFfVUlOVDE2IGNzc1RhZ0lkID0gbG9jYWxOYW1lUGFydChl
bGVtZW50LT5pZCgpKTsKLSAgICAgICAgUV9VSU5UMTYgdGFnID0gbG9jYWxOYW1lUGFydChkLT5z
ZWxlY3RvcigpLT50YWcpOwotICAgICAgICBpZiAoKGNzc1RhZ0lkID09IHRhZyB8fCB0YWcgPT0g
YW55TG9jYWxOYW1lKSAmJiBjaGVja1NlbGVjdG9yKGQtPnNlbGVjdG9yKCksIGVsZW1lbnQpKSB7
CisgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lID0gZWxlbWVudC0+bG9jYWxO
YW1lKCk7CisgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgc2VsZWN0b3JMb2NhbE5hbWUgPSBk
LT5zZWxlY3RvcigpLT50YWcubG9jYWxOYW1lKCk7CisgICAgICAgIGlmICgobG9jYWxOYW1lID09
IHNlbGVjdG9yTG9jYWxOYW1lIHx8IHNlbGVjdG9yTG9jYWxOYW1lID09IHN0YXJBdG9tKSAmJiBj
aGVja1NlbGVjdG9yKGQtPnNlbGVjdG9yKCksIGVsZW1lbnQpKSB7CiAgICAgICAgICAgICAvLyBJ
ZiB0aGUgcnVsZSBoYXMgbm8gcHJvcGVydGllcyB0byBhcHBseSwgdGhlbiBpZ25vcmUgaXQuCiAg
ICAgICAgICAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbkltcGwqIGRlY2wgPSBydWxlLT5k
ZWNsYXJhdGlvbigpOwogICAgICAgICAgICAgaWYgKCFkZWNsIHx8ICFkZWNsLT5sZW5ndGgoKSkg
Y29udGludWU7CkBAIC02MDksNyArNjA5LDcgQEAgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpjYW5T
aGFyZVN0eWxlV2l0aAogICAgIGlmIChuLT5pc1N0eWxlZEVsZW1lbnQoKSkgewogICAgICAgICBi
b29sIG1vdXNlSW5zaWRlID0gZWxlbWVudC0+cmVuZGVyZXIoKSA/IGVsZW1lbnQtPnJlbmRlcmVy
KCktPm1vdXNlSW5zaWRlKCkgOiBmYWxzZTsKICAgICAgICAgU3R5bGVkRWxlbWVudEltcGwqIHMg
PSBzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50SW1wbCo+KG4pOwotICAgICAgICBpZiAocy0+cmVu
ZGVyZXIoKSAmJiAocy0+aWQoKSA9PSBlbGVtZW50LT5pZCgpKSAmJiAhcy0+aGFzSUQoKSAmJgor
ICAgICAgICBpZiAocy0+cmVuZGVyZXIoKSAmJiAocy0+dGFnTmFtZSgpID09IGVsZW1lbnQtPnRh
Z05hbWUoKSkgJiYgIXMtPmhhc0lEKCkgJiYKICAgICAgICAgICAgIChzLT5oYXNDbGFzcygpID09
IGVsZW1lbnQtPmhhc0NsYXNzKCkpICYmICFzLT5pbmxpbmVTdHlsZURlY2woKSAmJgogICAgICAg
ICAgICAgKHMtPmhhc01hcHBlZEF0dHJpYnV0ZXMoKSA9PSBzdHlsZWRFbGVtZW50LT5oYXNNYXBw
ZWRBdHRyaWJ1dGVzKCkpICYmCiAgICAgICAgICAgICAocy0+aXNMaW5rKCkgPT0gZWxlbWVudC0+
aXNMaW5rKCkpICYmIApAQCAtODg1LDIzICs4ODUsMjMgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9y
OjphZGp1c3RSZW5kZXJTdHlsZQogICAgICAgICAvLyBTaXRlcyBhbHNvIGNvbW1vbmx5IHVzZSBk
aXNwbGF5OmlubGluZS9ibG9jayBvbiA8dGQ+cyBhbmQgPHRhYmxlPnMuICBJbiBxdWlya3MgbW9k
ZSB3ZSBmb3JjZQogICAgICAgICAvLyB0aGVzZSB0YWdzIHRvIHJldGFpbiB0aGVpciBkaXNwbGF5
IHR5cGVzLgogICAgICAgICBpZiAoIXN0cmljdFBhcnNpbmcgJiYgZSkgewotICAgICAgICAgICAg
aWYgKGUtPmlkKCkgPT0gSURfVEQpIHsKKyAgICAgICAgICAgIGlmIChlLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6dGQoKSkpIHsKICAgICAgICAgICAgICAgICBzdHlsZS0+c2V0RGlzcGxheShUQUJM
RV9DRUxMKTsKICAgICAgICAgICAgICAgICBzdHlsZS0+c2V0RmxvYXRpbmcoRk5PTkUpOwogICAg
ICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoZS0+aWQoKSA9PSBJRF9UQUJMRSkKKyAg
ICAgICAgICAgIGVsc2UgaWYgKGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0YWJsZSgpKSkKICAg
ICAgICAgICAgICAgICBzdHlsZS0+c2V0RGlzcGxheShzdHlsZS0+aXNEaXNwbGF5SW5saW5lVHlw
ZSgpID8gSU5MSU5FX1RBQkxFIDogVEFCTEUpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gRnJh
bWVzIGFuZCBmcmFtZXNldHMgbmV2ZXIgaG9ub3IgcG9zaXRpb246cmVsYXRpdmUgb3IgcG9zaXRp
b246YWJzb2x1dGUuICBUaGlzIGlzIG5lY2Vzc2FyeSB0bwogICAgICAgICAvLyBmaXggYSBjcmFz
aCB3aGVyZSBhIHNpdGUgdHJpZXMgdG8gcG9zaXRpb24gdGhlc2Ugb2JqZWN0cy4gIFRoZXkgYWxz
byBuZXZlciBob25vciBkaXNwbGF5LgotICAgICAgICBpZiAoZSAmJiAoZS0+aWQoKSA9PSBJRF9G
UkFNRSB8fCBlLT5pZCgpID09IElEX0ZSQU1FU0VUKSkgeworICAgICAgICBpZiAoZSAmJiAoZS0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZyYW1lKCkpIHx8IGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjpmcmFtZXNldCgpKSkpIHsKICAgICAgICAgICAgIHN0eWxlLT5zZXRQb3NpdGlvbihTVEFUSUMp
OwogICAgICAgICAgICAgc3R5bGUtPnNldERpc3BsYXkoQkxPQ0spOwogICAgICAgICB9CiAKICAg
ICAgICAgLy8gVGFibGUgaGVhZGVycyB3aXRoIGEgdGV4dC1hbGlnbiBvZiBhdXRvIHdpbGwgY2hh
bmdlIHRoZSB0ZXh0LWFsaWduIHRvIGNlbnRlci4KLSAgICAgICAgaWYgKGUgJiYgZS0+aWQoKSA9
PSBJRF9USCAmJiBzdHlsZS0+dGV4dEFsaWduKCkgPT0gVEFBVVRPKQorICAgICAgICBpZiAoZSAm
JiBlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGgoKSkgJiYgc3R5bGUtPnRleHRBbGlnbigpID09
IFRBQVVUTykKICAgICAgICAgICAgIHN0eWxlLT5zZXRUZXh0QWxpZ24oQ0VOVEVSKTsKICAgICAg
ICAgCiAgICAgICAgIC8vIE11dGF0ZSB0aGUgZGlzcGxheSB0byBCTE9DSyBvciBUQUJMRSBmb3Ig
Y2VydGFpbiBjYXNlcywgZS5nLiwgaWYgc29tZW9uZSBhdHRlbXB0cyB0bwpAQCAtOTc5LDcgKzk3
OSw3IEBAIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6Y2hlY2tTZWxlY3RvcihDU1MKICAgICAvLyBX
ZSB0cmFjayB3aGV0aGVyIG9yIG5vdCB0aGUgcnVsZSBjb250YWlucyBvbmx5IDpob3ZlciBhbmQg
OmFjdGl2ZSBpbiBhIHNpbXBsZSBzZWxlY3Rvci4gSWYKICAgICAvLyBzbywgd2UgY2FuJ3QgYWxs
b3cgdGhhdCB0byBhcHBseSB0byBldmVyeSBlbGVtZW50IG9uIHRoZSBwYWdlLiAgV2UgYXNzdW1l
IHRoZSBhdXRob3IgaW50ZW5kZWQKICAgICAvLyB0byBhcHBseSB0aGUgcnVsZXMgb25seSB0byBs
aW5rcy4KLSAgICBib29sIG9ubHlIb3ZlckFjdGl2ZSA9IChzZWwtPnRhZyA9PSBhbnlRTmFtZSAm
JgorICAgIGJvb2wgb25seUhvdmVyQWN0aXZlID0gKCFzZWwtPmhhc1RhZygpICYmCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKHNlbC0+bWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0Ns
YXNzICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsLT5wc2V1ZG9UeXBlKCkg
PT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0hvdmVyIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2VsLT5wc2V1ZG9UeXBlKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0FjdGl2ZSkpKTsK
QEAgLTEwOTYsMTkgKzEwOTYsMTQgQEAgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpjaGVja09uZVNl
bGVjdG9yKAogICAgIGlmKCFlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoc2Vs
LT50YWcgIT0gYW55UU5hbWUpIHsKLSAgICAgICAgaW50IGVsdElEID0gZS0+aWQoKTsKLSAgICAg
ICAgUV9VSU5UMTYgbG9jYWxOYW1lID0gbG9jYWxOYW1lUGFydChlbHRJRCk7Ci0gICAgICAgIFFf
VUlOVDE2IG5zID0gbmFtZXNwYWNlUGFydChlbHRJRCk7Ci0gICAgICAgIFFfVUlOVDE2IHNlbExv
Y2FsTmFtZSA9IGxvY2FsTmFtZVBhcnQoc2VsLT50YWcpOwotICAgICAgICBRX1VJTlQxNiBzZWxO
UyA9IG5hbWVzcGFjZVBhcnQoc2VsLT50YWcpOwotICAgICAgICAKLSAgICAgICAgaWYgKGxvY2Fs
TmFtZSA8PSBJRF9MQVNUX1RBRyAmJiBlLT5pc0hUTUxFbGVtZW50KCkpCi0gICAgICAgICAgICBu
cyA9IHhodG1sTmFtZXNwYWNlOyAvLyBGSVhNRTogUmVhbGx5IHdhbnQgdG8gbW92ZSBhd2F5IGZy
b20gdGhpcyBjb21wbGljYXRlZCBoYWNrZXJ5IGFuZCBqdXN0Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBzd2l0Y2ggdGFncyBhbmQgYXR0ciBuYW1lcyBvdmVyIHRvIEF0b21p
Y1N0cmluZ3MuCi0gICAgICAgIAotICAgICAgICBpZiAoKHNlbExvY2FsTmFtZSAhPSBhbnlMb2Nh
bE5hbWUgJiYgbG9jYWxOYW1lICE9IHNlbExvY2FsTmFtZSkgfHwKLSAgICAgICAgICAgIChzZWxO
UyAhPSBhbnlOYW1lc3BhY2UgJiYgbnMgIT0gc2VsTlMpKQorICAgIGlmIChzZWwtPmhhc1RhZygp
KSB7CisgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lID0gZS0+bG9jYWxOYW1l
KCk7CisgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbnMgPSBlLT5uYW1lc3BhY2VVUkkoKTsK
KyAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBzZWxMb2NhbE5hbWUgPSBzZWwtPnRhZy5sb2Nh
bE5hbWUoKTsKKyAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBzZWxOUyA9IHNlbC0+dGFnLm5h
bWVzcGFjZVVSSSgpOworICAgIAorICAgICAgICBpZiAoKHNlbExvY2FsTmFtZSAhPSBzdGFyQXRv
bSAmJiBsb2NhbE5hbWUgIT0gc2VsTG9jYWxOYW1lKSB8fAorICAgICAgICAgICAgKHNlbE5TICE9
IHN0YXJBdG9tICYmIG5zICE9IHNlbE5TKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9CiAKQEAgLTEyOTUsNyArMTI5MCw3IEBAIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6Y2hlY2tP
bmVTZWxlY3RvcigKICAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0hvdmVyOiB7
CiAgICAgICAgICAgICAgICAgLy8gSWYgd2UncmUgaW4gcXVpcmtzIG1vZGUsIHRoZW4gaG92ZXIg
c2hvdWxkIG5ldmVyIG1hdGNoIGFuY2hvcnMgd2l0aCBubwogICAgICAgICAgICAgICAgIC8vIGhy
ZWYuICBUaGlzIGlzIGltcG9ydGFudCBmb3Igc2l0ZXMgbGlrZSB3c2ouY29tLgotICAgICAgICAg
ICAgICAgIGlmIChzdHJpY3RQYXJzaW5nIHx8IGUtPmlkKCkgIT0gSURfQSB8fCBlLT5pc0xpbmso
KSkgeworICAgICAgICAgICAgICAgIGlmIChzdHJpY3RQYXJzaW5nIHx8ICFlLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6YSgpKSB8fCBlLT5pc0xpbmsoKSkgewogICAgICAgICAgICAgICAgICAgICBp
ZiAoZWxlbWVudCA9PSBlICYmIHN0eWxlKQogICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGUt
PnNldEFmZmVjdGVkQnlIb3ZlclJ1bGVzKHRydWUpOwogICAgICAgICAgICAgICAgICAgICBpZiAo
ZS0+cmVuZGVyZXIoKSkgewpAQCAtMTMyNiw3ICsxMzIxLDcgQEAgYm9vbCBDU1NTdHlsZVNlbGVj
dG9yOjpjaGVja09uZVNlbGVjdG9yKAogICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNl
dWRvQWN0aXZlOgogICAgICAgICAgICAgICAgIC8vIElmIHdlJ3JlIGluIHF1aXJrcyBtb2RlLCB0
aGVuIDphY3RpdmUgc2hvdWxkIG5ldmVyIG1hdGNoIGFuY2hvcnMgd2l0aCBubwogICAgICAgICAg
ICAgICAgIC8vIGhyZWYuIAotICAgICAgICAgICAgICAgIGlmIChzdHJpY3RQYXJzaW5nIHx8IGUt
PmlkKCkgIT0gSURfQSB8fCBlLT5pc0xpbmsoKSkgeworICAgICAgICAgICAgICAgIGlmIChzdHJp
Y3RQYXJzaW5nIHx8ICFlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YSgpKSB8fCBlLT5pc0xpbmso
KSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudCA9PSBlICYmIHN0eWxlKQogICAg
ICAgICAgICAgICAgICAgICAgICAgc3R5bGUtPnNldEFmZmVjdGVkQnlBY3RpdmVSdWxlcyh0cnVl
KTsKICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZS0+cmVuZGVyZXIoKSkKQEAgLTE0MjUs
OSArMTQyMCw5IEBAIHZvaWQgQ1NTUnVsZVNldDo6YWRkUnVsZShDU1NTdHlsZVJ1bGVJbXAKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KICAgICAgCi0gICAgUV9VSU5UMTYgbG9jYWxOYW1lID0gbG9j
YWxOYW1lUGFydChzZWwtPnRhZyk7Ci0gICAgaWYgKGxvY2FsTmFtZSAhPSBhbnlMb2NhbE5hbWUp
IHsKLSAgICAgICAgYWRkVG9SdWxlU2V0KCh2b2lkKikoaW50KWxvY2FsTmFtZSwgbV90YWdSdWxl
cywgcnVsZSwgc2VsKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSA9IHNlbC0+
dGFnLmxvY2FsTmFtZSgpOworICAgIGlmIChsb2NhbE5hbWUgIT0gc3RhckF0b20pIHsKKyAgICAg
ICAgYWRkVG9SdWxlU2V0KGxvY2FsTmFtZS5pbXBsZW1lbnRhdGlvbigpLCBtX3RhZ1J1bGVzLCBy
dWxlLCBzZWwpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIApJbmRleDoga2h0bWwvY3Nz
L3BhcnNlci55Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2Nz
cy9wYXJzZXIueSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zOApkaWZmIC11IC1wIC1yMS4zOCBr
aHRtbC9jc3MvcGFyc2VyLnkKLS0tIGtodG1sL2Nzcy9wYXJzZXIueQkxMiBKdW4gMjAwNSAwNDow
NzozMCAtMDAwMAkxLjM4CisrKyBraHRtbC9jc3MvcGFyc2VyLnkJMjIgSnVuIDIwMDUgMjM6MjI6
NTUgLTAwMDAKQEAgLTEzNCw3ICsxMzQsNiBAQCBzdGF0aWMgaW5saW5lIGludCBnZXRWYWx1ZUlE
KGNvbnN0IGNoYXIgCiAgICAgZmxvYXQgdmFsOwogICAgIGludCBwcm9wX2lkOwogICAgIGludCBh
dHRyaWJ1dGU7Ci0gICAgaW50IGVsZW1lbnQ7CiAgICAgQ1NTU2VsZWN0b3I6OlJlbGF0aW9uIHJl
bGF0aW9uOwogICAgIGJvb2wgYjsKICAgICBpbnQgaTsKQEAgLTE4MCw2ICsxNzksOCBAQCBzdGF0
aWMgaW50IGNzc3l5bGV4KCBZWVNUWVBFICp5eWx2YWwgKSB7CiAldG9rZW4gJy4nCiAldG9rZW4g
J1snCiAKKyV0b2tlbiA8c3RyaW5nPiAnKicKKwogJXRva2VuIElNUE9SVF9TWU0KICV0b2tlbiBQ
QUdFX1NZTQogJXRva2VuIE1FRElBX1NZTQpAQCAtMjY5LDcgKzI3MCw3IEBAIHN0YXRpYyBpbnQg
Y3NzeXlsZXgoIFlZU1RZUEUgKnl5bHZhbCApIHsKICV0eXBlIDx2YWx1ZT4gdW5hcnlfdGVybQog
JXR5cGUgPHZhbHVlPiBmdW5jdGlvbgogCi0ldHlwZSA8ZWxlbWVudD4gZWxlbWVudF9uYW1lCisl
dHlwZSA8c3RyaW5nPiBlbGVtZW50X25hbWUKIAogJXR5cGUgPGF0dHJpYnV0ZT4gYXR0cmliX2lk
CiAKQEAgLTQwOSw3ICs0MTAsNyBAQCBOQU1FU1BBQ0VfU1lNIG1heWJlX3NwYWNlIG1heWJlX25z
X3ByZWZpCiAjZW5kaWYKICAgICBDU1NQYXJzZXIgKnAgPSBzdGF0aWNfY2FzdDxDU1NQYXJzZXIg
Kj4ocGFyc2VyKTsKICAgICBpZiAocC0+c3R5bGVFbGVtZW50ICYmIHAtPnN0eWxlRWxlbWVudC0+
aXNDU1NTdHlsZVNoZWV0KCkpCi0gICAgICAgIHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXRJbXBs
Kj4ocC0+c3R5bGVFbGVtZW50KS0+YWRkTmFtZXNwYWNlKHAsIGRvbVN0cmluZygkMyksIGRvbVN0
cmluZygkNCkpOworICAgICAgICBzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0SW1wbCo+KHAtPnN0
eWxlRWxlbWVudCktPmFkZE5hbWVzcGFjZShwLCBhdG9taWNTdHJpbmcoJDMpLCBhdG9taWNTdHJp
bmcoJDQpKTsKIH0KIHwgTkFNRVNQQUNFX1NZTSBlcnJvciBpbnZhbGlkX2Jsb2NrCiB8IE5BTUVT
UEFDRV9TWU0gZXJyb3IgJzsnCkBAIC02MjgsNjUgKzYyOSw3MSBAQCBuYW1lc3BhY2Vfc2VsZWN0
b3I6CiAKIHNpbXBsZV9zZWxlY3RvcjoKICAgICBlbGVtZW50X25hbWUgbWF5YmVfc3BhY2Ugewot
CSQkID0gbmV3IENTU1NlbGVjdG9yKCk7Ci0JJCQtPnRhZyA9ICQxOworICAgICAgICBDU1NQYXJz
ZXIgKnAgPSBzdGF0aWNfY2FzdDxDU1NQYXJzZXIgKj4ocGFyc2VyKTsKKwkkJCA9IG5ldyBDU1NT
ZWxlY3RvcihRdWFsaWZpZWROYW1lKG51bGxBdG9tLCBhdG9taWNTdHJpbmcoJDEpLCBwLT5kZWZh
dWx0TmFtZXNwYWNlKSk7CiAgICAgfQogICAgIHwgZWxlbWVudF9uYW1lIHNwZWNpZmllcl9saXN0
IG1heWJlX3NwYWNlIHsKLQkkJCA9ICQyOwotCWlmICggJCQgKQotICAgICAgICAgICAgJCQtPnRh
ZyA9ICQxOworICAgICAgICAkJCA9ICQyOworCWlmICgkJCkgeworICAgICAgICAgICAgQ1NTUGFy
c2VyICpwID0gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyICo+KHBhcnNlcik7CisgICAgICAgICAgICAk
JC0+dGFnID0gUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgYXRvbWljU3RyaW5nKCQxKSwgcC0+ZGVm
YXVsdE5hbWVzcGFjZSk7CisgICAgICAgIH0KICAgICB9CiAgICAgfCBzcGVjaWZpZXJfbGlzdCBt
YXliZV9zcGFjZSB7CiAJJCQgPSAkMTsKLSAgICAgICAgaWYgKCQkKQotICAgICAgICAgICAgJCQt
PnRhZyA9IG1ha2VJZChzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJzZXIpLT5kZWZhdWx0TmFt
ZXNwYWNlLCBhbnlMb2NhbE5hbWUpOzsKKyAgICAgICAgQ1NTUGFyc2VyICpwID0gc3RhdGljX2Nh
c3Q8Q1NTUGFyc2VyICo+KHBhcnNlcik7CisgICAgICAgIGlmICgkJCAmJiBwLT5kZWZhdWx0TmFt
ZXNwYWNlICE9IHN0YXJBdG9tKQorICAgICAgICAgICAgJCQtPnRhZyA9IFF1YWxpZmllZE5hbWUo
bnVsbEF0b20sIHN0YXJBdG9tLCBwLT5kZWZhdWx0TmFtZXNwYWNlKTsKICAgICB9CiAgICAgfCBu
YW1lc3BhY2Vfc2VsZWN0b3IgJ3wnIGVsZW1lbnRfbmFtZSBtYXliZV9zcGFjZSB7Ci0gICAgICAg
ICQkID0gbmV3IENTU1NlbGVjdG9yKCk7Ci0gICAgICAgICQkLT50YWcgPSAkMzsKKyAgICAgICAg
QXRvbWljU3RyaW5nIG5hbWVzcGFjZVByZWZpeCA9IGF0b21pY1N0cmluZygkMSk7CiAgICAgICAg
IENTU1BhcnNlciAqcCA9IHN0YXRpY19jYXN0PENTU1BhcnNlciAqPihwYXJzZXIpOwogICAgICAg
ICBpZiAocC0+c3R5bGVFbGVtZW50ICYmIHAtPnN0eWxlRWxlbWVudC0+aXNDU1NTdHlsZVNoZWV0
KCkpCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0SW1wbCo+KHAtPnN0eWxl
RWxlbWVudCktPmRldGVybWluZU5hbWVzcGFjZSgkJC0+dGFnLCBkb21TdHJpbmcoJDEpKTsKKyAg
ICAgICAgICAgICQkID0gbmV3IENTU1NlbGVjdG9yKFF1YWxpZmllZE5hbWUobmFtZXNwYWNlUHJl
Zml4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdG9t
aWNTdHJpbmcoJDMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0SW1wbCo+KHAtPnN0eWxlRWxlbWVudCktPmRl
dGVybWluZU5hbWVzcGFjZShuYW1lc3BhY2VQcmVmaXgpKSk7CisgICAgICAgIGVsc2UgLy8gRklY
TUU6IFNob3VsZG4ndCB0aGlzIGNhc2UgYmUgYW4gZXJyb3I/CisgICAgICAgICAgICAkJCA9IG5l
dyBDU1NTZWxlY3RvcihRdWFsaWZpZWROYW1lKG51bGxBdG9tLCBhdG9taWNTdHJpbmcoJDMpLCBw
LT5kZWZhdWx0TmFtZXNwYWNlKSk7CiAgICAgfQogICAgIHwgbmFtZXNwYWNlX3NlbGVjdG9yICd8
JyBlbGVtZW50X25hbWUgc3BlY2lmaWVyX2xpc3QgbWF5YmVfc3BhY2UgewogICAgICAgICAkJCA9
ICQ0OwogICAgICAgICBpZiAoJCQpIHsKLSAgICAgICAgICAgICQkLT50YWcgPSAkMzsKKyAgICAg
ICAgICAgIEF0b21pY1N0cmluZyBuYW1lc3BhY2VQcmVmaXggPSBhdG9taWNTdHJpbmcoJDEpOwog
ICAgICAgICAgICAgQ1NTUGFyc2VyICpwID0gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyICo+KHBhcnNl
cik7CiAgICAgICAgICAgICBpZiAocC0+c3R5bGVFbGVtZW50ICYmIHAtPnN0eWxlRWxlbWVudC0+
aXNDU1NTdHlsZVNoZWV0KCkpCi0gICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTU3R5bGVT
aGVldEltcGwqPihwLT5zdHlsZUVsZW1lbnQpLT5kZXRlcm1pbmVOYW1lc3BhY2UoJCQtPnRhZywg
ZG9tU3RyaW5nKCQxKSk7CisgICAgICAgICAgICAgICAgJCQtPnRhZyA9IFF1YWxpZmllZE5hbWUo
bmFtZXNwYWNlUHJlZml4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGF0b21pY1N0cmluZygkMyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldEltcGwqPihwLT5zdHlsZUVsZW1lbnQpLT5kZXRl
cm1pbmVOYW1lc3BhY2UobmFtZXNwYWNlUHJlZml4KSk7CisgICAgICAgICAgICBlbHNlIC8vIEZJ
WE1FOiBTaG91bGRuJ3QgdGhpcyBjYXNlIGJlIGFuIGVycm9yPworICAgICAgICAgICAgICAgICQk
LT50YWcgPSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCBhdG9taWNTdHJpbmcoJDMpLCBwLT5kZWZh
dWx0TmFtZXNwYWNlKTsKICAgICAgICAgfQogICAgIH0KICAgICB8IG5hbWVzcGFjZV9zZWxlY3Rv
ciAnfCcgc3BlY2lmaWVyX2xpc3QgbWF5YmVfc3BhY2UgewogICAgICAgICAkJCA9ICQzOwogICAg
ICAgICBpZiAoJCQpIHsKLSAgICAgICAgICAgICQkLT50YWcgPSBtYWtlSWQoYW55TmFtZXNwYWNl
LCBhbnlMb2NhbE5hbWUpOworICAgICAgICAgICAgQXRvbWljU3RyaW5nIG5hbWVzcGFjZVByZWZp
eCA9IGF0b21pY1N0cmluZygkMSk7CiAgICAgICAgICAgICBDU1NQYXJzZXIgKnAgPSBzdGF0aWNf
Y2FzdDxDU1NQYXJzZXIgKj4ocGFyc2VyKTsKICAgICAgICAgICAgIGlmIChwLT5zdHlsZUVsZW1l
bnQgJiYgcC0+c3R5bGVFbGVtZW50LT5pc0NTU1N0eWxlU2hlZXQoKSkKLSAgICAgICAgICAgICAg
ICBzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0SW1wbCo+KHAtPnN0eWxlRWxlbWVudCktPmRldGVy
bWluZU5hbWVzcGFjZSgkJC0+dGFnLCBkb21TdHJpbmcoJDEpKTsKKyAgICAgICAgICAgICAgICAk
JC0+dGFnID0gUXVhbGlmaWVkTmFtZShuYW1lc3BhY2VQcmVmaXgsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RhckF0b20sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldEltcGwqPihwLT5zdHls
ZUVsZW1lbnQpLT5kZXRlcm1pbmVOYW1lc3BhY2UobmFtZXNwYWNlUHJlZml4KSk7CiAgICAgICAg
IH0KICAgICB9CiAgIDsKIAogZWxlbWVudF9uYW1lOgogICAgIElERU5UIHsKLQlDU1NQYXJzZXIg
KnAgPSBzdGF0aWNfY2FzdDxDU1NQYXJzZXIgKj4ocGFyc2VyKTsKKyAgICAgICAgUGFyc2VTdHJp
bmcmIHN0ciA9ICQxOworICAgICAgICBDU1NQYXJzZXIgKnAgPSBzdGF0aWNfY2FzdDxDU1NQYXJz
ZXIgKj4ocGFyc2VyKTsKIAlET006OkRvY3VtZW50SW1wbCAqZG9jID0gcC0+ZG9jdW1lbnQoKTsK
LQlRU3RyaW5nIHRhZyA9IHFTdHJpbmcoJDEpOwotCWlmICggZG9jICkgewotCSAgICBpZiAoZG9j
LT5pc0hUTUxEb2N1bWVudCgpKQotCQl0YWcgPSB0YWcubG93ZXIoKTsKLQkgICAgY29uc3QgRE9N
U3RyaW5nIGR0YWcodGFnKTsKLSAgICAgICAgICAgICQkID0gbWFrZUlkKHAtPmRlZmF1bHROYW1l
c3BhY2UsIGRvYy0+dGFnSWQoMCwgZHRhZy5pbXBsZW1lbnRhdGlvbigpLCBmYWxzZSkpOwotCX0g
ZWxzZSB7Ci0JICAgICQkID0gbWFrZUlkKHAtPmRlZmF1bHROYW1lc3BhY2UsIGtodG1sOjpnZXRU
YWdJRCh0YWcubG93ZXIoKS5hc2NpaSgpLCB0YWcubGVuZ3RoKCkpKTsKLQkgICAgLy8gdGhpcyBj
YXNlIHNob3VsZCBuZXZlciBoYXBwZW4gLSBvbmx5IHdoZW4gbG9hZGluZwotCSAgICAvLyB0aGUg
ZGVmYXVsdCBzdHlsZXNoZWV0IC0gd2hpY2ggbXVzdCBub3QgY29udGFpbiB1bmtub3duIHRhZ3MK
LS8vIAkgICAgYXNzZXJ0KCQkICE9IDApOwotCX0KKwlpZiAoZG9jICYmIGRvYy0+aXNIVE1MRG9j
dW1lbnQoKSkKKyAgICAgICAgICAgIHN0ci5sb3dlcigpOworICAgICAgICAkJCA9IHN0cjsKICAg
ICB9CiAgICAgfCAnKicgewotCSQkID0gbWFrZUlkKHN0YXRpY19jYXN0PENTU1BhcnNlcio+KHBh
cnNlciktPmRlZmF1bHROYW1lc3BhY2UsIGFueUxvY2FsTmFtZSk7CisJc3RhdGljIHVuc2lnbmVk
IHNob3J0IHN0YXIgPSAnKic7CisgICAgICAgICQkLnN0cmluZyA9ICZzdGFyOworICAgICAgICAk
JC5sZW5ndGggPSAxOwogICAgIH0KICAgOwogCkBAIC03NzMsMTggKzc4MCwyMiBAQCBhdHRyaWI6
CiAgICAgICAgICQkID0gbmV3IENTU1NlbGVjdG9yKCk7CiAgICAgICAgICQkLT5hdHRyID0gJDU7
CiAgICAgICAgICQkLT5tYXRjaCA9IENTU1NlbGVjdG9yOjpTZXQ7Ci0gICAgICAgIENTU1BhcnNl
ciAqcCA9IHN0YXRpY19jYXN0PENTU1BhcnNlciAqPihwYXJzZXIpOwotICAgICAgICBpZiAocC0+
c3R5bGVFbGVtZW50ICYmIHAtPnN0eWxlRWxlbWVudC0+aXNDU1NTdHlsZVNoZWV0KCkpCi0gICAg
ICAgICAgICBzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0SW1wbCo+KHAtPnN0eWxlRWxlbWVudCkt
PmRldGVybWluZU5hbWVzcGFjZSgkJC0+YXR0ciwgZG9tU3RyaW5nKCQzKSk7CisgICAgICAgIC8v
IEZJWE1FOiBGb3Igbm93IHdlJ3JlIGJyZWFraW5nIG5hbWVzcGFjZSBzdXBwb3J0IG9uIGF0dHJp
YnV0ZXMuICBXaGVuIHdlIHN3aXRjaCB0byBhdG9taWNzdHJpbmcsIHRoZW4gd2UgY2FuIG1ha2UK
KyAgICAgICAgLy8gaXQgd29yayBhZ2Fpbi4KKyAgICAgICAgLy9DU1NQYXJzZXIgKnAgPSBzdGF0
aWNfY2FzdDxDU1NQYXJzZXIgKj4ocGFyc2VyKTsKKyAgICAgICAgLy9pZiAocC0+c3R5bGVFbGVt
ZW50ICYmIHAtPnN0eWxlRWxlbWVudC0+aXNDU1NTdHlsZVNoZWV0KCkpCisgICAgICAgIC8vICAg
IHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXRJbXBsKj4ocC0+c3R5bGVFbGVtZW50KS0+ZGV0ZXJt
aW5lTmFtZXNwYWNlKCQkLT5hdHRyLCBkb21TdHJpbmcoJDMpKTsKICAgICB9CiAgICAgfCAnWycg
bWF5YmVfc3BhY2UgbmFtZXNwYWNlX3NlbGVjdG9yICd8JyBhdHRyaWJfaWQgbWF0Y2ggbWF5YmVf
c3BhY2UgaWRlbnRfb3Jfc3RyaW5nIG1heWJlX3NwYWNlICddJyB7CiAgICAgICAgICQkID0gbmV3
IENTU1NlbGVjdG9yKCk7CiAgICAgICAgICQkLT5hdHRyID0gJDU7CiAgICAgICAgICQkLT5tYXRj
aCA9IChDU1NTZWxlY3Rvcjo6TWF0Y2gpJDY7CiAgICAgICAgICQkLT52YWx1ZSA9IGF0b21pY1N0
cmluZygkOCk7Ci0gICAgICAgIENTU1BhcnNlciAqcCA9IHN0YXRpY19jYXN0PENTU1BhcnNlciAq
PihwYXJzZXIpOwotICAgICAgICBpZiAocC0+c3R5bGVFbGVtZW50ICYmIHAtPnN0eWxlRWxlbWVu
dC0+aXNDU1NTdHlsZVNoZWV0KCkpCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxDU1NTdHlsZVNo
ZWV0SW1wbCo+KHAtPnN0eWxlRWxlbWVudCktPmRldGVybWluZU5hbWVzcGFjZSgkJC0+YXR0ciwg
ZG9tU3RyaW5nKCQzKSk7CisgICAgICAgIC8vIEZJWE1FOiBGb3Igbm93IHdlJ3JlIGJyZWFraW5n
IG5hbWVzcGFjZSBzdXBwb3J0IG9uIGF0dHJpYnV0ZXMuICBXaGVuIHdlIHN3aXRjaCB0byBhdG9t
aWNzdHJpbmcsIHRoZW4gd2UgY2FuIG1ha2UKKyAgICAgICAgLy8gaXQgd29yayBhZ2Fpbi4KKyAg
ICAgICAgLy9DU1NQYXJzZXIgKnAgPSBzdGF0aWNfY2FzdDxDU1NQYXJzZXIgKj4ocGFyc2VyKTsK
KyAgICAgICAgLy9pZiAocC0+c3R5bGVFbGVtZW50ICYmIHAtPnN0eWxlRWxlbWVudC0+aXNDU1NT
dHlsZVNoZWV0KCkpCisgICAgICAgIC8vICAgIHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXRJbXBs
Kj4ocC0+c3R5bGVFbGVtZW50KS0+ZGV0ZXJtaW5lTmFtZXNwYWNlKCQkLT5hdHRyLCBkb21TdHJp
bmcoJDMpKTsKICAgICB9CiAgIDsKIApJbmRleDoga2h0bWwvZG9tL2Nzc19zdHlsZXNoZWV0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9kb20vY3NzX3N0
eWxlc2hlZXQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjgKZGlmZiAtdSAtcCAtcjEuOCBr
aHRtbC9kb20vY3NzX3N0eWxlc2hlZXQuY3BwCi0tLSBraHRtbC9kb20vY3NzX3N0eWxlc2hlZXQu
Y3BwCTIwIE1heSAyMDA0IDE1OjA5OjMyIC0wMDAwCTEuOAorKysga2h0bWwvZG9tL2Nzc19zdHls
ZXNoZWV0LmNwcAkyMiBKdW4gMjAwNSAyMzoyMjo1NiAtMDAwMApAQCAtMzg1LDcgKzM4NSw3IEBA
IExpbmtTdHlsZSAmIExpbmtTdHlsZTo6b3BlcmF0b3IgPSAoY29uc3QKIAogICAgIC8vICMjIyBj
aGVjayBsaW5rIGlzIHJlYWxseSBsaW5raW5nIGEgc3R5bGUgc2hlZXQKICAgICBpZiggbiAmJiBu
LT5pc0VsZW1lbnROb2RlKCkgJiYKLQkobi0+aWQoKSA9PSBJRF9TVFlMRSB8fCBuLT5pZCgpID09
IElEX0xJTkspICkgeworCShuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c3R5bGUoKSkgfHwgbi0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OmxpbmsoKSkpKSB7CiAgICAgbm9kZSA9IG47CiAgICAgaWYo
bm9kZSkgbm9kZS0+cmVmKCk7CiAgICAgfQpAQCAtMzk5LDEyICszOTksMTQgQEAgTGlua1N0eWxl
Ojp+TGlua1N0eWxlKCkKIAogU3R5bGVTaGVldCBMaW5rU3R5bGU6OnNoZWV0KCkKIHsKLSAgICBp
bnQgaWQgPSBub2RlID8gbm9kZS0+aWQoKSA6IDA7CisgICAgaWYgKCFub2RlKQorICAgICAgICBy
ZXR1cm4gU3R5bGVTaGVldCgpOworCiAgICAgLy8gIyMjIGFkZCBQSQogICAgIHJldHVybiAKLQko
IGlkID09IElEX1NUWUxFKSA/CisJKG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzdHlsZSgp
KSkgPwogCXN0YXRpY19jYXN0PEhUTUxTdHlsZUVsZW1lbnRJbXBsICo+KG5vZGUpLT5zaGVldCgp
Ci0JOiAoIChpZCA9PSBJRF9MSU5LKSA/CisJOiAoIG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjpsaW5rKCkpID8KIAkgICAgc3RhdGljX2Nhc3Q8SFRNTExpbmtFbGVtZW50SW1wbCAqPihub2Rl
KS0+c2hlZXQoKQogCSAgICA6IFN0eWxlU2hlZXQoKSApOwogfQpJbmRleDoga2h0bWwvZG9tL2Rv
bV9lbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRt
bC9kb20vZG9tX2VsZW1lbnQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEyCmRpZmYgLXUg
LXAgLXIxLjEyIGtodG1sL2RvbS9kb21fZWxlbWVudC5jcHAKLS0tIGtodG1sL2RvbS9kb21fZWxl
bWVudC5jcHAJMTIgTWF5IDIwMDUgMTc6MTE6MjEgLTAwMDAJMS4xMgorKysga2h0bWwvZG9tL2Rv
bV9lbGVtZW50LmNwcAkyMiBKdW4gMjAwNSAyMzoyMjo1NiAtMDAwMApAQCAtMTQxLDcgKzE0MSw3
IEBAIEVsZW1lbnQ6On5FbGVtZW50KCkKIERPTVN0cmluZyBFbGVtZW50Ojp0YWdOYW1lKCkgY29u
c3QKIHsKICAgICBpZiAoIWltcGwpIHRocm93IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb246Ok5P
VF9GT1VORF9FUlIpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxFbGVtZW50SW1wbCo+KGltcGwp
LT50YWdOYW1lKCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsKj4oaW1wbCkt
Pm5vZGVOYW1lKCk7CiB9CiAKIERPTVN0cmluZyBFbGVtZW50OjpnZXRBdHRyaWJ1dGUoIGNvbnN0
IERPTVN0cmluZyAmbmFtZSApCkluZGV4OiBraHRtbC9kb20vZG9tX25vZGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2RvbS9kb21fbm9kZS5jcHAsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuMTIKZGlmZiAtdSAtcCAtcjEuMTIga2h0bWwvZG9tL2RvbV9u
b2RlLmNwcAotLS0ga2h0bWwvZG9tL2RvbV9ub2RlLmNwcAkxMSBNYXkgMjAwNSAwMDo1ODoyOCAt
MDAwMAkxLjEyCisrKyBraHRtbC9kb20vZG9tX25vZGUuY3BwCTIyIEp1biAyMDA1IDIzOjIyOjU2
IC0wMDAwCkBAIC0zMjQsNyArMzI0LDcgQEAgYm9vbCBOb2RlOjppc1N1cHBvcnRlZCggY29uc3Qg
RE9NU3RyaW5nIAogRE9NU3RyaW5nIE5vZGU6Om5hbWVzcGFjZVVSSSggICkgY29uc3QKIHsKICAg
ICBpZiAoIWltcGwpIHJldHVybiBET01TdHJpbmcoKTsKLSAgICByZXR1cm4gaW1wbC0+Z2V0RG9j
dW1lbnQoKS0+bmFtZXNwYWNlVVJJKGltcGwtPmlkKCkpOworICAgIHJldHVybiBpbXBsLT5uYW1l
c3BhY2VVUkkoKTsKIH0KIAogRE9NU3RyaW5nIE5vZGU6OnByZWZpeCggICkgY29uc3QKQEAgLTMz
Nyw3ICszMzcsNyBAQCB2b2lkIE5vZGU6OnNldFByZWZpeChjb25zdCBET01TdHJpbmcgJnByCiB7
CiAgICAgaWYgKCFpbXBsKSB0aHJvdyBET01FeGNlcHRpb24oRE9NRXhjZXB0aW9uOjpOT1RfRk9V
TkRfRVJSKTsKICAgICBpbnQgZXhjZXB0aW9uY29kZSA9IDA7Ci0gICAgaW1wbC0+c2V0UHJlZml4
KHByZWZpeCxleGNlcHRpb25jb2RlKTsKKyAgICBpbXBsLT5zZXRQcmVmaXgocHJlZml4LmltcGxl
bWVudGF0aW9uKCksZXhjZXB0aW9uY29kZSk7CiAgICAgaWYgKGV4Y2VwdGlvbmNvZGUpCiAgICAg
ICAgIHRocm93IERPTUV4Y2VwdGlvbihleGNlcHRpb25jb2RlKTsKIH0KQEAgLTM3NiwxMyArMzc2
LDYgQEAgYm9vbCBOb2RlOjpkaXNwYXRjaEV2ZW50KGNvbnN0IEV2ZW50ICZldgogICAgIHJldHVy
biByOwogfQogCi0KLXVuc2lnbmVkIGludCBOb2RlOjplbGVtZW50SWQoKSBjb25zdAotewotICAg
IGlmICghaW1wbCkgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGltcGwtPmlkKCk7Ci19Ci0KIHVuc2ln
bmVkIGxvbmcgTm9kZTo6aW5kZXgoKSBjb25zdAogewogICAgIGlmICghaW1wbCkgcmV0dXJuIDA7
CkluZGV4OiBraHRtbC9kb20vZG9tX25vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvV2ViQ29yZS9raHRtbC9kb20vZG9tX25vZGUuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4x
MgpkaWZmIC11IC1wIC1yMS4xMiBraHRtbC9kb20vZG9tX25vZGUuaAotLS0ga2h0bWwvZG9tL2Rv
bV9ub2RlLmgJMTggTWF5IDIwMDUgMjE6MTA6MjQgLTAwMDAJMS4xMgorKysga2h0bWwvZG9tL2Rv
bV9ub2RlLmgJMjIgSnVuIDIwMDUgMjM6MjI6NTcgLTAwMDAKQEAgLTg1NSwxMyArODU1LDYgQEAg
cHVibGljOgogICAgIGJvb2wgZGlzcGF0Y2hFdmVudChjb25zdCBFdmVudCAmZXZ0KTsKIAogICAg
IC8qKgotICAgICAqIEBpbnRlcm5hbAotICAgICAqIG5vdCBwYXJ0IG9mIHRoZSBET00uCi0gICAg
ICogQHJldHVybnMgdGhlIGVsZW1lbnQgaWQsIGluIGNhc2UgdGhpcyBpcyBhbiBlbGVtZW50LCAw
IG90aGVyd2lzZQotICAgICAqLwotICAgIFFfVUlOVDMyIGVsZW1lbnRJZCgpIGNvbnN0OwotCi0g
ICAgLyoqCiAgICAgICogdGVzdHMgaWYgdGhpcyBOb2RlIGlzIDAuIFVzZWZ1bCBlc3BlY2lhbGx5
LCBpZiBjYXN0aW5nIHRvIGEgZGVyaXZlZAogICAgICAqIGNsYXNzOgogICAgICAqCkluZGV4OiBr
aHRtbC9kb20vaHRtbF9iYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2Vi
Q29yZS9raHRtbC9kb20vaHRtbF9iYXNlLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS42CmRp
ZmYgLXUgLXAgLXIxLjYga2h0bWwvZG9tL2h0bWxfYmFzZS5jcHAKLS0tIGtodG1sL2RvbS9odG1s
X2Jhc2UuY3BwCTMgTm92IDIwMDMgMDY6MzI6MDQgLTAwMDAJMS42CisrKyBraHRtbC9kb20vaHRt
bF9iYXNlLmNwcAkyMiBKdW4gMjAwNSAyMzoyMjo1NyAtMDAwMApAQCAtNDEsNyArNDEsNyBAQCBI
VE1MQm9keUVsZW1lbnQ6OkhUTUxCb2R5RWxlbWVudChIVE1MQm9kCiAKIEhUTUxCb2R5RWxlbWVu
dCAmSFRNTEJvZHlFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAg
ICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0JPRFkgKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIs
IEhUTUxOYW1lczo6Ym9keSgpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC0xMzUsNyAr
MTM1LDcgQEAgSFRNTEZyYW1lRWxlbWVudDo6SFRNTEZyYW1lRWxlbWVudChIVE1MRgogCiBIVE1M
RnJhbWVFbGVtZW50ICZIVE1MRnJhbWVFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZv
dGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0ZSQU1FICk7CisgICAgYXNzaWdu
T3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OmZyYW1lKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9
CiAKQEAgLTI2NSw3ICsyNjUsNyBAQCBIVE1MSUZyYW1lRWxlbWVudDo6SFRNTElGcmFtZUVsZW1l
bnQoSFRNCiAKIEhUTUxJRnJhbWVFbGVtZW50ICZIVE1MSUZyYW1lRWxlbWVudDo6b3BlcmF0b3Ig
PSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9JRlJB
TUUgKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6aWZyYW1lKCkgKTsKICAg
ICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTQxNCw3ICs0MTQsNyBAQCBIVE1MRnJhbWVTZXRFbGVt
ZW50OjpIVE1MRnJhbWVTZXRFbGVtZW50CiAKIEhUTUxGcmFtZVNldEVsZW1lbnQgJkhUTUxGcmFt
ZVNldEVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2ln
bk90aGVyKCBvdGhlciwgSURfRlJBTUVTRVQgKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhU
TUxOYW1lczo6ZnJhbWVzZXQoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtNDY2LDcg
KzQ2Niw3IEBAIEhUTUxIZWFkRWxlbWVudDo6SFRNTEhlYWRFbGVtZW50KEhUTUxIZWEKIAogSFRN
TEhlYWRFbGVtZW50ICZIVE1MSGVhZEVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90
aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfSEVBRCApOworICAgIGFzc2lnbk90
aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpoZWFkKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAK
QEAgLTUwNyw3ICs1MDcsNyBAQCBIVE1MSHRtbEVsZW1lbnQ6OkhUTUxIdG1sRWxlbWVudChIVE1M
SHRtCiAKIEhUTUxIdG1sRWxlbWVudCAmSFRNTEh0bWxFbGVtZW50OjpvcGVyYXRvciA9IChjb25z
dCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0hUTUwgKTsKKyAg
ICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6aHRtbCgpICk7CiAgICAgcmV0dXJuICp0
aGlzOwogfQogCkluZGV4OiBraHRtbC9kb20vaHRtbF9ibG9jay5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZG9tL2h0bWxfYmxvY2suY3BwLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjQKZGlmZiAtdSAtcCAtcjEuNCBraHRtbC9kb20vaHRtbF9ibG9jay5j
cHAKLS0tIGtodG1sL2RvbS9odG1sX2Jsb2NrLmNwcAkxMCBKdW4gMjAwMiAyMDowNzozNCAtMDAw
MAkxLjQKKysrIGtodG1sL2RvbS9odG1sX2Jsb2NrLmNwcAkyMiBKdW4gMjAwNSAyMzoyMjo1NyAt
MDAwMApAQCAtNDMsNyArNDMsNyBAQCBIVE1MQmxvY2txdW90ZUVsZW1lbnQ6OkhUTUxCbG9ja3F1
b3RlRWxlCiAKIEhUTUxCbG9ja3F1b3RlRWxlbWVudCAmSFRNTEJsb2NrcXVvdGVFbGVtZW50Ojpv
cGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIs
IElEX0JMT0NLUVVPVEUgKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6Ymxv
Y2txdW90ZSgpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC04NCw3ICs4NCw3IEBAIEhU
TUxEaXZFbGVtZW50OjpIVE1MRGl2RWxlbWVudChIVE1MRGl2RWwKIAogSFRNTERpdkVsZW1lbnQg
JkhUTUxEaXZFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBh
c3NpZ25PdGhlciggb3RoZXIsIElEX0RJViApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRN
TE5hbWVzOjpkaXYoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtMTI1LDcgKzEyNSw3
IEBAIEhUTUxIUkVsZW1lbnQ6OkhUTUxIUkVsZW1lbnQoSFRNTEhSRWxlbWUKIAogSFRNTEhSRWxl
bWVudCAmSFRNTEhSRWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0g
ICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9IUiApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwg
SFRNTE5hbWVzOjpocigpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC0yMDUsMTYgKzIw
NSwxNyBAQCBIVE1MSGVhZGluZ0VsZW1lbnQ6OkhUTUxIZWFkaW5nRWxlbWVudChICiAKIEhUTUxI
ZWFkaW5nRWxlbWVudCAmSFRNTEhlYWRpbmdFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2Rl
ICZvdGhlcikKIHsKLSAgICBpZihvdGhlci5lbGVtZW50SWQoKSAhPSBJRF9IMSB8fAotICAgICAg
IG90aGVyLmVsZW1lbnRJZCgpICE9IElEX0gyIHx8Ci0gICAgICAgb3RoZXIuZWxlbWVudElkKCkg
IT0gSURfSDMgfHwKLSAgICAgICBvdGhlci5lbGVtZW50SWQoKSAhPSBJRF9INCB8fAotICAgICAg
IG90aGVyLmVsZW1lbnRJZCgpICE9IElEX0g1IHx8Ci0gICAgICAgb3RoZXIuZWxlbWVudElkKCkg
IT0gSURfSDYgKQorICAgIGlmICghb3RoZXIuaGFuZGxlKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjpoMSgpKSAmJgorICAgICAgICAhb3RoZXIuaGFuZGxlKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjpoMigpKSAmJgorICAgICAgICAhb3RoZXIuaGFuZGxlKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjpoMygpKSAmJgorICAgICAgICAhb3RoZXIuaGFuZGxlKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjpoNCgpKSAmJgorICAgICAgICAhb3RoZXIuaGFuZGxlKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjpoNSgpKSAmJgorICAgICAgICAhb3RoZXIuaGFuZGxlKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjpoNigpKSkKICAgICB7CiAJaWYgKCBpbXBsICkgaW1wbC0+ZGVyZWYoKTsKIAlpbXBsID0gMDsK
ICAgICB9IGVsc2UgeworCiAgICAgTm9kZTo6b3BlcmF0b3IgPSAob3RoZXIpOwogICAgIH0KICAg
ICByZXR1cm4gKnRoaXM7CkBAIC0yNTcsNyArMjU4LDcgQEAgSFRNTFBhcmFncmFwaEVsZW1lbnQ6
OkhUTUxQYXJhZ3JhcGhFbGVtZQogCiBIVE1MUGFyYWdyYXBoRWxlbWVudCAmSFRNTFBhcmFncmFw
aEVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90
aGVyKCBvdGhlciwgSURfUCApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpw
KCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTI5OCw3ICsyOTksNyBAQCBIVE1MUHJl
RWxlbWVudDo6SFRNTFByZUVsZW1lbnQoSFRNTFByZUVsCiAKIEhUTUxQcmVFbGVtZW50ICZIVE1M
UHJlRWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWdu
T3RoZXIoIG90aGVyLCBJRF9QUkUgKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1l
czo6cHJlKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKSW5kZXg6IGtodG1sL2RvbS9odG1s
X2VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1s
L2RvbS9odG1sX2VsZW1lbnQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE0CmRpZmYgLXUg
LXAgLXIxLjE0IGtodG1sL2RvbS9odG1sX2VsZW1lbnQuY3BwCi0tLSBraHRtbC9kb20vaHRtbF9l
bGVtZW50LmNwcAkxMSBNYXkgMjAwNSAwMDo1ODoyOCAtMDAwMAkxLjE0CisrKyBraHRtbC9kb20v
aHRtbF9lbGVtZW50LmNwcAkyMiBKdW4gMjAwNSAyMzoyMjo1NyAtMDAwMApAQCAtMTgyLDkgKzE4
Miw5IEBAIEhUTUxDb2xsZWN0aW9uIEhUTUxFbGVtZW50OjpjaGlsZHJlbigpIGMKICAgICByZXR1
cm4gSFRNTENvbGxlY3Rpb24oaW1wbCwgSFRNTENvbGxlY3Rpb25JbXBsOjpOT0RFX0NISUxEUkVO
KTsKIH0KIAotdm9pZCBIVE1MRWxlbWVudDo6YXNzaWduT3RoZXIoIGNvbnN0IE5vZGUgJm90aGVy
LCBpbnQgZWxlbWVudElkICkKK3ZvaWQgSFRNTEVsZW1lbnQ6OmFzc2lnbk90aGVyKCBjb25zdCBO
b2RlICZvdGhlciwgY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSApCiB7Ci0gICAgaWYoKGlu
dClvdGhlci5lbGVtZW50SWQoKSAhPSBlbGVtZW50SWQpIHsKKyAgICBpZiAoIW90aGVyLmhhbmRs
ZSgpLT5oYXNUYWdOYW1lKHRhZ05hbWUpKSB7CiAJaWYgKCBpbXBsICkgaW1wbC0+ZGVyZWYoKTsK
IAlpbXBsID0gMDsKICAgICB9IGVsc2UgewpJbmRleDoga2h0bWwvZG9tL2h0bWxfZWxlbWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2RvbS9odG1sX2Vs
ZW1lbnQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS44CmRpZmYgLXUgLXAgLXIxLjgga2h0bWwv
ZG9tL2h0bWxfZWxlbWVudC5oCi0tLSBraHRtbC9kb20vaHRtbF9lbGVtZW50LmgJMjIgTWF5IDIw
MDQgMDE6NTA6NDggLTAwMDAJMS44CisrKyBraHRtbC9kb20vaHRtbF9lbGVtZW50LmgJMjIgSnVu
IDIwMDUgMjM6MjI6NTggLTAwMDAKQEAgLTMwLDYgKzMwLDggQEAKICNkZWZpbmUgSFRNTF9FTEVN
RU5UX0gKIAogI2luY2x1ZGUgPGRvbS9kb21fZWxlbWVudC5oPgorI2luY2x1ZGUgImRvbV9xbmFt
ZS5oIgorCiBjbGFzcyBLSFRNTFZpZXc7CiAKIG5hbWVzcGFjZSBET00gewpAQCAtMjI1LDcgKzIy
Nyw3IEBAIHByb3RlY3RlZDoKICAgICAvKgogICAgICAqIEBpbnRlcm5hbAogICAgICAqLwotICAg
IHZvaWQgYXNzaWduT3RoZXIoIGNvbnN0IE5vZGUgJm90aGVyLCBpbnQgZWxlbWVudElkICk7Cisg
ICAgdm9pZCBhc3NpZ25PdGhlciggY29uc3QgTm9kZSAmb3RoZXIsIGNvbnN0IFF1YWxpZmllZE5h
bWUmIHRhZ05hbWUgKTsKIH07CiAKIH07IC8vbmFtZXNwYWNlCkluZGV4OiBraHRtbC9kb20vaHRt
bF9mb3JtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9k
b20vaHRtbF9mb3JtLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMQpkaWZmIC11IC1wIC1y
MS4xMSBraHRtbC9kb20vaHRtbF9mb3JtLmNwcAotLS0ga2h0bWwvZG9tL2h0bWxfZm9ybS5jcHAJ
MTEgTWF5IDIwMDUgMDA6NTg6MjggLTAwMDAJMS4xMQorKysga2h0bWwvZG9tL2h0bWxfZm9ybS5j
cHAJMjIgSnVuIDIwMDUgMjM6MjI6NTggLTAwMDAKQEAgLTQ3LDcgKzQ3LDcgQEAgSFRNTEJ1dHRv
bkVsZW1lbnQ6OkhUTUxCdXR0b25FbGVtZW50KEhUTQogCiBIVE1MQnV0dG9uRWxlbWVudCAmSFRN
TEJ1dHRvbkVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFz
c2lnbk90aGVyKCBvdGhlciwgSURfQlVUVE9OICk7CQorICAgIGFzc2lnbk90aGVyKCBvdGhlciwg
SFRNTE5hbWVzOjpidXR0b24oKSApOwkKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTE1Nyw3
ICsxNTcsNyBAQCBIVE1MRmllbGRTZXRFbGVtZW50OjpIVE1MRmllbGRTZXRFbGVtZW50CiAKIEhU
TUxGaWVsZFNldEVsZW1lbnQgJkhUTUxGaWVsZFNldEVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0
IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfRklFTERTRVQgKTsK
KyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6ZmllbGRzZXQoKSApOwogICAgIHJl
dHVybiAqdGhpczsKIH0KIApAQCAtMTkzLDcgKzE5Myw3IEBAIEhUTUxGb3JtRWxlbWVudDo6SFRN
TEZvcm1FbGVtZW50KEhUTUxGb3IKIAogSFRNTEZvcm1FbGVtZW50ICZIVE1MRm9ybUVsZW1lbnQ6
Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhl
ciwgSURfRk9STSApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpmb3JtKCkg
KTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTMxMSw3ICszMTEsNyBAQCBIVE1MSW5wdXRF
bGVtZW50OjpIVE1MSW5wdXRFbGVtZW50KEhUTUxJCiAKIEhUTUxJbnB1dEVsZW1lbnQgJkhUTUxJ
bnB1dEVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2ln
bk90aGVyKCBvdGhlciwgSURfSU5QVVQgKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxO
YW1lczo6aW5wdXQoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtNTc0LDcgKzU3NCw3
IEBAIEhUTUxMYWJlbEVsZW1lbnQ6OkhUTUxMYWJlbEVsZW1lbnQoSFRNTEwKIAogSFRNTExhYmVs
RWxlbWVudCAmSFRNTExhYmVsRWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIp
CiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9MQUJFTCApOworICAgIGFzc2lnbk90aGVy
KCBvdGhlciwgSFRNTE5hbWVzOjpsYWJlbCgpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBA
IC02MzMsNyArNjMzLDcgQEAgSFRNTExlZ2VuZEVsZW1lbnQ6OkhUTUxMZWdlbmRFbGVtZW50KEhU
TQogCiBIVE1MTGVnZW5kRWxlbWVudCAmSFRNTExlZ2VuZEVsZW1lbnQ6Om9wZXJhdG9yID0gKGNv
bnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfTEVHRU5EICk7
CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OmxlZ2VuZCgpICk7CiAgICAgcmV0
dXJuICp0aGlzOwogfQogCkBAIC02OTEsNyArNjkxLDcgQEAgSFRNTE9wdEdyb3VwRWxlbWVudDo6
SFRNTE9wdEdyb3VwRWxlbWVudAogCiBIVE1MT3B0R3JvdXBFbGVtZW50ICZIVE1MT3B0R3JvdXBF
bGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhl
ciggb3RoZXIsIElEX09QVEdST1VQICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFt
ZXM6Om9wdGdyb3VwKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTc0NCw3ICs3NDQs
NyBAQCBIVE1MU2VsZWN0RWxlbWVudDo6SFRNTFNlbGVjdEVsZW1lbnQoSFRNCiAKIEhUTUxTZWxl
Y3RFbGVtZW50ICZIVE1MU2VsZWN0RWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3Ro
ZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9TRUxFQ1QgKTsKKyAgICBhc3NpZ25P
dGhlciggb3RoZXIsIEhUTUxOYW1lczo6c2VsZWN0KCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9
CiAKQEAgLTkwNiw3ICs5MDYsNyBAQCBIVE1MVGV4dEFyZWFFbGVtZW50OjpIVE1MVGV4dEFyZWFF
bGVtZW50CiAKIEhUTUxUZXh0QXJlYUVsZW1lbnQgJkhUTUxUZXh0QXJlYUVsZW1lbnQ6Om9wZXJh
dG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURf
VEVYVEFSRUEgKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6dGV4dGFyZWEo
KSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtMTA3NCw3ICsxMDc0LDcgQEAgSFRNTE9w
dGlvbkVsZW1lbnQ6OkhUTUxPcHRpb25FbGVtZW50KEhUTQogCiBIVE1MT3B0aW9uRWxlbWVudCAm
SFRNTE9wdGlvbkVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAg
IGFzc2lnbk90aGVyKCBvdGhlciwgSURfT1BUSU9OICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVy
LCBIVE1MTmFtZXM6Om9wdGlvbigpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC0xMTgy
LDcgKzExODIsNyBAQCBIVE1MSXNJbmRleEVsZW1lbnQ6OkhUTUxJc0luZGV4RWxlbWVudChICiAK
IEhUTUxJc0luZGV4RWxlbWVudCAmSFRNTElzSW5kZXhFbGVtZW50OjpvcGVyYXRvciA9IChjb25z
dCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0lTSU5ERVggKTsK
KyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6aXNpbmRleCgpICk7CiAgICAgcmV0
dXJuICp0aGlzOwogfQogCkluZGV4OiBraHRtbC9kb20vaHRtbF9oZWFkLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9kb20vaHRtbF9oZWFkLmNwcCx2CnJl
dHJpZXZpbmcgcmV2aXNpb24gMS4xMApkaWZmIC11IC1wIC1yMS4xMCBraHRtbC9kb20vaHRtbF9o
ZWFkLmNwcAotLS0ga2h0bWwvZG9tL2h0bWxfaGVhZC5jcHAJMjIgSnVuIDIwMDUgMTg6MjI6MDEg
LTAwMDAJMS4xMAorKysga2h0bWwvZG9tL2h0bWxfaGVhZC5jcHAJMjIgSnVuIDIwMDUgMjM6MjI6
NTkgLTAwMDAKQEAgLTQyLDcgKzQyLDcgQEAgSFRNTEJhc2VFbGVtZW50OjpIVE1MQmFzZUVsZW1l
bnQoSFRNTEJhcwogCiBIVE1MQmFzZUVsZW1lbnQgJkhUTUxCYXNlRWxlbWVudDo6b3BlcmF0b3Ig
PSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9CQVNF
ICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OmJhc2UoKSApOwogICAgIHJl
dHVybiAqdGhpczsKIH0KIApAQCAtOTcsNyArOTcsNyBAQCBIVE1MTGlua0VsZW1lbnQ6OkhUTUxM
aW5rRWxlbWVudChIVE1MTGluCiAKIEhUTUxMaW5rRWxlbWVudCAmSFRNTExpbmtFbGVtZW50Ojpv
cGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIs
IElEX0xJTksgKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6bGluaygpICk7
CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC0yMzgsNyArMjM4LDcgQEAgSFRNTE1ldGFFbGVt
ZW50OjpIVE1MTWV0YUVsZW1lbnQoSFRNTE1ldAogCiBIVE1MTWV0YUVsZW1lbnQgJkhUTUxNZXRh
RWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3Ro
ZXIoIG90aGVyLCBJRF9NRVRBICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6
Om1ldGEoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtMzEyLDcgKzMxMiw3IEBAIEhU
TUxTY3JpcHRFbGVtZW50OjpIVE1MU2NyaXB0RWxlbWVudChIVE0KIAogSFRNTFNjcmlwdEVsZW1l
bnQgJkhUTUxTY3JpcHRFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsK
LSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX1NDUklQVCApOworICAgIGFzc2lnbk90aGVyKCBv
dGhlciwgSFRNTE5hbWVzOjpzY3JpcHQoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAt
NDI0LDcgKzQyNCw3IEBAIEhUTUxTdHlsZUVsZW1lbnQ6OkhUTUxTdHlsZUVsZW1lbnQoSFRNTFMK
IAogSFRNTFN0eWxlRWxlbWVudCAmSFRNTFN0eWxlRWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3Qg
Tm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9TVFlMRSApOworICAg
IGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpzdHlsZSgpICk7CiAgICAgcmV0dXJuICp0
aGlzOwogfQogCkBAIC00OTYsNyArNDk2LDcgQEAgSFRNTFRpdGxlRWxlbWVudDo6SFRNTFRpdGxl
RWxlbWVudChIVE1MVAogCiBIVE1MVGl0bGVFbGVtZW50ICZIVE1MVGl0bGVFbGVtZW50OjpvcGVy
YXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElE
X1RJVExFICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OnRpdGxlKCkgKTsK
ICAgICByZXR1cm4gKnRoaXM7CiB9CiAKSW5kZXg6IGtodG1sL2RvbS9odG1sX2ltYWdlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9kb20vaHRtbF9pbWFn
ZS5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuOQpkaWZmIC11IC1wIC1yMS45IGtodG1sL2Rv
bS9odG1sX2ltYWdlLmNwcAotLS0ga2h0bWwvZG9tL2h0bWxfaW1hZ2UuY3BwCTMgTm92IDIwMDMg
MDY6MzI6MDQgLTAwMDAJMS45CisrKyBraHRtbC9kb20vaHRtbF9pbWFnZS5jcHAJMjIgSnVuIDIw
MDUgMjM6MjI6NTkgLTAwMDAKQEAgLTQ2LDcgKzQ2LDcgQEAgSFRNTEFyZWFFbGVtZW50OjpIVE1M
QXJlYUVsZW1lbnQoSFRNTEFyZQogCiBIVE1MQXJlYUVsZW1lbnQgJkhUTUxBcmVhRWxlbWVudDo6
b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVy
LCBJRF9BUkVBICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OmFyZWEoKSAp
OwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtMTc2LDcgKzE3Niw3IEBAIEhUTUxJbWFnZUVs
ZW1lbnQ6OkhUTUxJbWFnZUVsZW1lbnQoSFRNTEkKIAogSFRNTEltYWdlRWxlbWVudCAmSFRNTElt
YWdlRWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWdu
T3RoZXIoIG90aGVyLCBJRF9JTUcgKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1l
czo6aW1nKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTM3Miw3ICszNzIsNyBAQCBI
VE1MTWFwRWxlbWVudDo6SFRNTE1hcEVsZW1lbnQoSFRNTE1hcEVsCiAKIEhUTUxNYXBFbGVtZW50
ICZIVE1MTWFwRWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAg
YXNzaWduT3RoZXIoIG90aGVyLCBJRF9NQVAgKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhU
TUxOYW1lczo6bWFwKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKSW5kZXg6IGtodG1sL2Rv
bS9odG1sX2lubGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUv
a2h0bWwvZG9tL2h0bWxfaW5saW5lLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS43CmRpZmYg
LXUgLXAgLXIxLjcga2h0bWwvZG9tL2h0bWxfaW5saW5lLmNwcAotLS0ga2h0bWwvZG9tL2h0bWxf
aW5saW5lLmNwcAkxMSBNYXkgMjAwNSAwMDo1ODoyOCAtMDAwMAkxLjcKKysrIGtodG1sL2RvbS9o
dG1sX2lubGluZS5jcHAJMjIgSnVuIDIwMDUgMjM6MjI6NTkgLTAwMDAKQEAgLTQ1LDcgKzQ1LDcg
QEAgSFRNTEFuY2hvckVsZW1lbnQ6OkhUTUxBbmNob3JFbGVtZW50KEhUTQogCiBIVE1MQW5jaG9y
RWxlbWVudCAmSFRNTEFuY2hvckVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVy
KQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfQSApOworICAgIGFzc2lnbk90aGVyKCBv
dGhlciwgSFRNTE5hbWVzOjphKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTIxNyw3
ICsyMTcsNyBAQCBIVE1MQlJFbGVtZW50OjpIVE1MQlJFbGVtZW50KEhUTUxCUkVsZW1lCiAKIEhU
TUxCUkVsZW1lbnQgJkhUTUxCUkVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVy
KQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfQlIgKTsKKyAgICBhc3NpZ25PdGhlcigg
b3RoZXIsIEhUTUxOYW1lczo6YnIoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtMjU4
LDcgKzI1OCw3IEBAIEhUTUxGb250RWxlbWVudDo6SFRNTEZvbnRFbGVtZW50KEhUTUxGb24KIAog
SFRNTEZvbnRFbGVtZW50ICZIVE1MRm9udEVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUg
Jm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfRk9OVCApOworICAgIGFzc2ln
bk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpmb250KCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9
CiAKQEAgLTMxOSw3ICszMTksNyBAQCBIVE1MTW9kRWxlbWVudDo6SFRNTE1vZEVsZW1lbnQoY29u
c3QgSFRNCiBIVE1MTW9kRWxlbWVudDo6SFRNTE1vZEVsZW1lbnQoSFRNTEVsZW1lbnRJbXBsICpf
aW1wbCkKICAgICA6IEhUTUxFbGVtZW50KCkKIHsKLSAgICBpZiAoX2ltcGwgJiYgKF9pbXBsLT5p
ZCgpID09IElEX0lOUyB8fCBfaW1wbC0+aWQoKSA9PSBJRF9ERUwpKQorICAgIGlmIChfaW1wbCAm
JiAoX2ltcGwtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppbnMoKSkgfHwgX2ltcGwtPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjpkZWwoKSkpKQogICAgICAgICBpbXBsID0gX2ltcGw7CiAgICAgZWxzZQog
ICAgICAgICBpbXBsID0gMDsKQEAgLTMyOCw5ICszMjgsOCBAQCBIVE1MTW9kRWxlbWVudDo6SFRN
TE1vZEVsZW1lbnQoSFRNTEVsZW1lCiAKIEhUTUxNb2RFbGVtZW50ICZIVE1MTW9kRWxlbWVudDo6
b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgaWYoIG90aGVyLmVsZW1lbnRJ
ZCgpICE9IElEX0lOUyAmJgotCW90aGVyLmVsZW1lbnRJZCgpICE9IElEX0RFTCApCi0gICAgewor
ICAgIGlmICghb3RoZXIuaGFuZGxlKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppbnMoKSkgJiYK
KyAgICAgICAgIW90aGVyLmhhbmRsZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZGVsKCkpKSB7
CiAJaWYgKCBpbXBsICkgaW1wbC0+ZGVyZWYoKTsKIAlpbXBsID0gMDsKICAgICB9IGVsc2UgewpA
QCAtMzgxLDE5ICszODAsMTYgQEAgSFRNTFF1b3RlRWxlbWVudDo6SFRNTFF1b3RlRWxlbWVudChj
b25zdAogewogfQogCi1IVE1MUXVvdGVFbGVtZW50OjpIVE1MUXVvdGVFbGVtZW50KEhUTUxHZW5l
cmljRWxlbWVudEltcGwgKl9pbXBsKQorSFRNTFF1b3RlRWxlbWVudDo6SFRNTFF1b3RlRWxlbWVu
dChIVE1MUXVvdGVFbGVtZW50SW1wbCAqX2ltcGwpCiAgICAgOiBIVE1MRWxlbWVudCgpCiB7Ci0g
ICAgaWYgKF9pbXBsICYmIF9pbXBsLT5pZCgpID09IElEX1EpCi0gICAgICAgIGltcGwgPSBfaW1w
bDsKLSAgICBlbHNlCi0gICAgICAgIGltcGwgPSAwOworICAgIGltcGwgPSBfaW1wbDsKICAgICBp
ZiAoIGltcGwgKSBpbXBsLT5yZWYoKTsKIH0KIAogSFRNTFF1b3RlRWxlbWVudCAmSFRNTFF1b3Rl
RWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3Ro
ZXIoIG90aGVyLCBJRF9RICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OnEo
KSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApJbmRleDoga2h0bWwvZG9tL2h0bWxfaW5saW5l
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZG9tL2h0bWxf
aW5saW5lLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMwpkaWZmIC11IC1wIC1yMS4zIGtodG1s
L2RvbS9odG1sX2lubGluZS5oCi0tLSBraHRtbC9kb20vaHRtbF9pbmxpbmUuaAkxNSBBcHIgMjAw
MiAyMzo0MjowMSAtMDAwMAkxLjMKKysrIGtodG1sL2RvbS9odG1sX2lubGluZS5oCTIyIEp1biAy
MDA1IDIzOjIyOjU5IC0wMDAwCkBAIC00MjUsNyArNDI1LDcgQEAgcHVibGljOgogICAgIEhUTUxR
dW90ZUVsZW1lbnQoY29uc3QgTm9kZSAmb3RoZXIpIDogSFRNTEVsZW1lbnQoKQogICAgICAgICAg
eygqdGhpcyk9b3RoZXI7fQogcHJvdGVjdGVkOgotICAgIEhUTUxRdW90ZUVsZW1lbnQoSFRNTEdl
bmVyaWNFbGVtZW50SW1wbCAqaW1wbCk7CisgICAgSFRNTFF1b3RlRWxlbWVudChIVE1MUXVvdGVF
bGVtZW50SW1wbCAqaW1wbCk7CiBwdWJsaWM6CiAKICAgICBIVE1MUXVvdGVFbGVtZW50ICYgb3Bl
cmF0b3IgPSAoY29uc3QgSFRNTFF1b3RlRWxlbWVudCAmb3RoZXIpOwpJbmRleDoga2h0bWwvZG9t
L2h0bWxfbGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0
bWwvZG9tL2h0bWxfbGlzdC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNApkaWZmIC11IC1w
IC1yMS40IGtodG1sL2RvbS9odG1sX2xpc3QuY3BwCi0tLSBraHRtbC9kb20vaHRtbF9saXN0LmNw
cAkxMCBKdW4gMjAwMiAyMDowNzozNiAtMDAwMAkxLjQKKysrIGtodG1sL2RvbS9odG1sX2xpc3Qu
Y3BwCTIyIEp1biAyMDA1IDIzOjIzOjAwIC0wMDAwCkBAIC00MSw3ICs0MSw3IEBAIEhUTUxETGlz
dEVsZW1lbnQ6OkhUTUxETGlzdEVsZW1lbnQoSFRNTEQKIAogSFRNTERMaXN0RWxlbWVudCAmSFRN
TERMaXN0RWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNz
aWduT3RoZXIoIG90aGVyLCBJRF9ETCApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5h
bWVzOjpkbCgpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC04OCw3ICs4OCw3IEBAIEhU
TUxEaXJlY3RvcnlFbGVtZW50OjpIVE1MRGlyZWN0b3J5RWxlbWUKIAogSFRNTERpcmVjdG9yeUVs
ZW1lbnQgJkhUTUxEaXJlY3RvcnlFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhl
cikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0RJUiApOworICAgIGFzc2lnbk90aGVy
KCBvdGhlciwgSFRNTE5hbWVzOjpkaXIoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAt
MTM1LDcgKzEzNSw3IEBAIEhUTUxMSUVsZW1lbnQ6OkhUTUxMSUVsZW1lbnQoSFRNTExJRWxlbWUK
IAogSFRNTExJRWxlbWVudCAmSFRNTExJRWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAm
b3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9MSSApOworICAgIGFzc2lnbk90
aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpsaSgpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBA
IC0xOTAsNyArMTkwLDcgQEAgSFRNTE1lbnVFbGVtZW50OjpIVE1MTWVudUVsZW1lbnQoSFRNTE1l
bgogCiBIVE1MTWVudUVsZW1lbnQgJkhUTUxNZW51RWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3Qg
Tm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9NRU5VICk7CisgICAg
YXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6Om1lbnUoKSApOwogICAgIHJldHVybiAqdGhp
czsKIH0KIApAQCAtMjM3LDcgKzIzNyw3IEBAIEhUTUxPTGlzdEVsZW1lbnQ6OkhUTUxPTGlzdEVs
ZW1lbnQoSFRNTE8KIAogSFRNTE9MaXN0RWxlbWVudCAmSFRNTE9MaXN0RWxlbWVudDo6b3BlcmF0
b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9P
TCApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpvbCgpICk7CiAgICAgcmV0
dXJuICp0aGlzOwogfQogCkBAIC0zMTAsNyArMzEwLDcgQEAgSFRNTFVMaXN0RWxlbWVudDo6SFRN
TFVMaXN0RWxlbWVudChIVE1MVQogCiBIVE1MVUxpc3RFbGVtZW50ICZIVE1MVUxpc3RFbGVtZW50
OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3Ro
ZXIsIElEX1VMICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OnVsKCkgKTsK
ICAgICByZXR1cm4gKnRoaXM7CiB9CiAKSW5kZXg6IGtodG1sL2RvbS9odG1sX21pc2MuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2RvbS9odG1sX21pc2Mu
Y3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjcKZGlmZiAtdSAtcCAtcjEuNyBraHRtbC9kb20v
aHRtbF9taXNjLmNwcAotLS0ga2h0bWwvZG9tL2h0bWxfbWlzYy5jcHAJMTEgTWF5IDIwMDUgMDA6
NTg6MjggLTAwMDAJMS43CisrKyBraHRtbC9kb20vaHRtbF9taXNjLmNwcAkyMiBKdW4gMjAwNSAy
MzoyMzowMCAtMDAwMApAQCAtNDEsNyArNDEsNyBAQCBIVE1MQmFzZUZvbnRFbGVtZW50OjpIVE1M
QmFzZUZvbnRFbGVtZW50CiAKIEhUTUxCYXNlRm9udEVsZW1lbnQgJkhUTUxCYXNlRm9udEVsZW1l
bnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBv
dGhlciwgSURfQkFTRUZPTlQgKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6
YmFzZWZvbnQoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApJbmRleDoga2h0bWwvZG9tL2h0
bWxfb2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRt
bC9kb20vaHRtbF9vYmplY3QuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjUKZGlmZiAtdSAt
cCAtcjEuNSBraHRtbC9kb20vaHRtbF9vYmplY3QuY3BwCi0tLSBraHRtbC9kb20vaHRtbF9vYmpl
Y3QuY3BwCTEgTWFyIDIwMDQgMTc6MDQ6MjQgLTAwMDAJMS41CisrKyBraHRtbC9kb20vaHRtbF9v
YmplY3QuY3BwCTIyIEp1biAyMDA1IDIzOjIzOjAwIC0wMDAwCkBAIC00Myw3ICs0Myw3IEBAIEhU
TUxBcHBsZXRFbGVtZW50OjpIVE1MQXBwbGV0RWxlbWVudChIVE0KIAogSFRNTEFwcGxldEVsZW1l
bnQgJkhUTUxBcHBsZXRFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsK
LSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0FQUExFVCApOworICAgIGFzc2lnbk90aGVyKCBv
dGhlciwgSFRNTE5hbWVzOjphcHBsZXQoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAt
MTk0LDcgKzE5NCw3IEBAIEhUTUxPYmplY3RFbGVtZW50OjpIVE1MT2JqZWN0RWxlbWVudChIVE0K
IAogSFRNTE9iamVjdEVsZW1lbnQgJkhUTUxPYmplY3RFbGVtZW50OjpvcGVyYXRvciA9IChjb25z
dCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX09CSkVDVCApOwor
ICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpvYmplY3QoKSApOwogICAgIHJldHVy
biAqdGhpczsKIH0KIApAQCAtNDMyLDcgKzQzMiw3IEBAIEhUTUxQYXJhbUVsZW1lbnQ6OkhUTUxQ
YXJhbUVsZW1lbnQoSFRNTFAKIAogSFRNTFBhcmFtRWxlbWVudCAmSFRNTFBhcmFtRWxlbWVudDo6
b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVy
LCBJRF9QQVJBTSApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpwYXJhbSgp
ICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkluZGV4OiBraHRtbC9kb20vaHRtbF90YWJsZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZG9tL2h0bWxf
dGFibGUuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjYKZGlmZiAtdSAtcCAtcjEuNiBraHRt
bC9kb20vaHRtbF90YWJsZS5jcHAKLS0tIGtodG1sL2RvbS9odG1sX3RhYmxlLmNwcAkzMSBPY3Qg
MjAwMyAwMDo0NzoxNiAtMDAwMAkxLjYKKysrIGtodG1sL2RvbS9odG1sX3RhYmxlLmNwcAkyMiBK
dW4gMjAwNSAyMzoyMzowMSAtMDAwMApAQCAtNDUsNyArNDUsNyBAQCBIVE1MVGFibGVDYXB0aW9u
RWxlbWVudDo6SFRNTFRhYmxlQ2FwdGlvCiAKIEhUTUxUYWJsZUNhcHRpb25FbGVtZW50ICZIVE1M
VGFibGVDYXB0aW9uRWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0g
ICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9DQVBUSU9OICk7CisgICAgYXNzaWduT3RoZXIoIG90
aGVyLCBIVE1MTmFtZXM6OmNhcHRpb24oKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAt
ODYsOSArODYsOCBAQCBIVE1MVGFibGVDZWxsRWxlbWVudDo6SFRNTFRhYmxlQ2VsbEVsZW1lCiAK
IEhUTUxUYWJsZUNlbGxFbGVtZW50ICZIVE1MVGFibGVDZWxsRWxlbWVudDo6b3BlcmF0b3IgPSAo
Y29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgaWYoIG90aGVyLmVsZW1lbnRJZCgpICE9IElEX1RE
ICYmCi0Jb3RoZXIuZWxlbWVudElkKCkgIT0gSURfVEggKQotICAgIHsKKyAgICBpZiAoIW90aGVy
LmhhbmRsZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGQoKSkgfHwKKyAgICAgICAgIW90aGVy
LmhhbmRsZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGgoKSkpIHsKIAlpZiAoIGltcGwgKSBp
bXBsLT5kZXJlZigpOwogCWltcGwgPSAwOwogICAgIH0gZWxzZSB7CkBAIC0yOTUsOSArMjk0LDgg
QEAgSFRNTFRhYmxlQ29sRWxlbWVudDo6SFRNTFRhYmxlQ29sRWxlbWVudAogCiBIVE1MVGFibGVD
b2xFbGVtZW50ICZIVE1MVGFibGVDb2xFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZv
dGhlcikKIHsKLSAgICBpZiggb3RoZXIuZWxlbWVudElkKCkgIT0gSURfQ09MICYmCi0Jb3RoZXIu
ZWxlbWVudElkKCkgIT0gSURfQ09MR1JPVVAgKQotICAgIHsKKyAgICBpZiAoIW90aGVyLmhhbmRs
ZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Y29sKCkpICYmCisgICAgICAgICFvdGhlci5oYW5k
bGUoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmNvbGdyb3VwKCkpKSB7CiAJaWYgKCBpbXBsICkg
aW1wbC0+ZGVyZWYoKTsKIAlpbXBsID0gMDsKICAgICB9IGVsc2UgewpAQCAtNDAxLDcgKzM5OSw3
IEBAIEhUTUxUYWJsZUVsZW1lbnQ6OkhUTUxUYWJsZUVsZW1lbnQoSFRNTFQKIAogSFRNTFRhYmxl
RWxlbWVudCAmSFRNTFRhYmxlRWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIp
CiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9UQUJMRSApOworICAgIGFzc2lnbk90aGVy
KCBvdGhlciwgSFRNTE5hbWVzOjp0YWJsZSgpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBA
IC02MzgsNyArNjM2LDcgQEAgSFRNTFRhYmxlUm93RWxlbWVudDo6SFRNTFRhYmxlUm93RWxlbWVu
dAogCiBIVE1MVGFibGVSb3dFbGVtZW50ICZIVE1MVGFibGVSb3dFbGVtZW50OjpvcGVyYXRvciA9
IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX1RSICk7
CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OnRyKCkgKTsKICAgICByZXR1cm4g
KnRoaXM7CiB9CiAKQEAgLTc3NSwxMCArNzczLDkgQEAgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ6
OkhUTUxUYWJsZVNlY3RpbwogCiBIVE1MVGFibGVTZWN0aW9uRWxlbWVudCAmSFRNTFRhYmxlU2Vj
dGlvbkVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGlmKG90
aGVyLmVsZW1lbnRJZCgpICE9IElEX1RCT0RZICYmCi0gICAgICAgb3RoZXIuZWxlbWVudElkKCkg
IT0gSURfVEhFQUQgJiYKLSAgICAgICBvdGhlci5lbGVtZW50SWQoKSAhPSBJRF9URk9PVCApCi0g
ICAgeworICAgIGlmICghb3RoZXIuaGFuZGxlKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0Ym9k
eSgpKSAmJgorICAgICAgICAhb3RoZXIuaGFuZGxlKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0
aGVhZCgpKSAmJgorICAgICAgICAhb3RoZXIuaGFuZGxlKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVz
Ojp0Zm9vdCgpKSkgewogCWlmICggaW1wbCApIGltcGwtPmRlcmVmKCk7CiAJaW1wbCA9IDA7CiAg
ICAgfSBlbHNlIHsKSW5kZXg6IGtodG1sL2VjbWEva2pzX2Nzcy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWNtYS9ranNfY3NzLmNwcCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS4yNgpkaWZmIC11IC1wIC1yMS4yNiBraHRtbC9lY21hL2tqc19jc3MuY3Bw
Ci0tLSBraHRtbC9lY21hL2tqc19jc3MuY3BwCTIyIEp1biAyMDA1IDE2OjM4OjAyIC0wMDAwCTEu
MjYKKysrIGtodG1sL2VjbWEva2pzX2Nzcy5jcHAJMjIgSnVuIDIwMDUgMjM6MjM6MDIgLTAwMDAK
QEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlICJ4bWwvZG9tX2RvY2ltcGwuaCIKICNpbmNsdWRl
ICJodG1sL2h0bWxfaGVhZGltcGwuaCIgLy8gZm9yIEhUTUxTdHlsZUVsZW1lbnQKICNpbmNsdWRl
ICJranNfZG9tLmgiCi0jaW5jbHVkZSAibWlzYy9odG1sdGFncy5oIgorI2luY2x1ZGUgImh0bWxu
YW1lcy5oIgogCiAjaW5jbHVkZSA8a2RlYnVnLmg+CiAKQEAgLTU1LDYgKzU1LDcgQEAgdXNpbmcg
RE9NOjpDb3VudGVySW1wbDsKIHVzaW5nIERPTTo6RG9jdW1lbnRJbXBsOwogdXNpbmcgRE9NOjpE
T01TdHJpbmc7CiB1c2luZyBET006OkVsZW1lbnRJbXBsOwordXNpbmcgRE9NOjpIVE1MTmFtZXM7
CiB1c2luZyBET006OkhUTUxTdHlsZUVsZW1lbnRJbXBsOwogdXNpbmcgRE9NOjpNZWRpYUxpc3RJ
bXBsOwogdXNpbmcgRE9NOjpSZWN0SW1wbDsKQEAgLTQwNCw3ICs0MDUsNyBAQCBWYWx1ZSBET01T
dHlsZVNoZWV0TGlzdDo6dHJ5R2V0KEV4ZWNTdGF0CiAgIC8vIGFuZCBkb2Vzbid0IGxvb2sgZm9y
IG5hbWUgYXR0cmlidXRlIChzZWUgaW1wbGVtZW50YXRpb24gYWJvdmUpLgogICAvLyBCdXQgdW5p
Y2l0eSBvZiBzdHlsZXNoZWV0IGlkcyBpcyBnb29kIHByYWN0aWNlIGFueXdheSA7KQogICBFbGVt
ZW50SW1wbCAqZWxlbWVudCA9IG1fZG9jLT5nZXRFbGVtZW50QnlJZChwLnN0cmluZygpKTsKLSAg
aWYgKGVsZW1lbnQgJiYgZWxlbWVudC0+aWQoKSA9PSBJRF9TVFlMRSkKKyAgaWYgKGVsZW1lbnQg
JiYgZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnN0eWxlKCkpKQogICAgIHJldHVybiBn
ZXRET01TdHlsZVNoZWV0KGV4ZWMsIHN0YXRpY19jYXN0PEhUTUxTdHlsZUVsZW1lbnRJbXBsICo+
KGVsZW1lbnQpLT5zaGVldCgpKTsKIAogICByZXR1cm4gRE9NT2JqZWN0Ojp0cnlHZXQoZXhlYywg
cCk7CkluZGV4OiBraHRtbC9lY21hL2tqc19kb20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9XZWJDb3JlL2todG1sL2VjbWEva2pzX2RvbS5jcHAsdgpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuNzYKZGlmZiAtdSAtcCAtcjEuNzYga2h0bWwvZWNtYS9ranNfZG9tLmNwcAotLS0ga2h0
bWwvZWNtYS9ranNfZG9tLmNwcAkyMiBKdW4gMjAwNSAwMDo0ODo0NCAtMDAwMAkxLjc2CisrKyBr
aHRtbC9lY21hL2tqc19kb20uY3BwCTIyIEp1biAyMDA1IDIzOjIzOjA0IC0wMDAwCkBAIC00Nyw4
ICs0Nyw2IEBACiAKICNpbmNsdWRlICJodG1sX29iamVjdGltcGwuaCIKIAotI2luY2x1ZGUgIm1p
c2MvaHRtbHRhZ3MuaCIKLQogI2lmIEFQUExFX0NIQU5HRVMKICNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9ydW50aW1lX29iamVjdC5oPgogI2VuZGlmCkBAIC02Nyw2ICs2NSw3IEBAIHVzaW5nIERP
TTo6SFRNTEFwcGxldEVsZW1lbnRJbXBsOwogdXNpbmcgRE9NOjpIVE1MRG9jdW1lbnRJbXBsOwog
dXNpbmcgRE9NOjpIVE1MRWxlbWVudEltcGw7CiB1c2luZyBET006OkhUTUxFbWJlZEVsZW1lbnRJ
bXBsOwordXNpbmcgRE9NOjpIVE1MTmFtZXM7CiB1c2luZyBET006OkhUTUxPYmplY3RFbGVtZW50
SW1wbDsKIHVzaW5nIERPTTo6TmFtZWROb2RlTWFwSW1wbDsKIHVzaW5nIERPTTo6Tm9kZTsKQEAg
LTQ2Miw3ICs0NjEsNyBAQCB2b2lkIERPTU5vZGU6OnB1dFZhbHVlKEV4ZWNTdGF0ZSAqZXhlYywg
CiAgICAgbm9kZS5zZXROb2RlVmFsdWUodmFsdWUudG9TdHJpbmcoZXhlYykuc3RyaW5nKCksIGV4
Y2VwdGlvbik7CiAgICAgYnJlYWs7CiAgIGNhc2UgUHJlZml4OgotICAgIG5vZGUuc2V0UHJlZml4
KHZhbHVlLnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpLCBleGNlcHRpb24pOworICAgIG5vZGUuc2V0
UHJlZml4KHZhbHVlLnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpLmltcGxlbWVudGF0aW9uKCksIGV4
Y2VwdGlvbik7CiAgICAgYnJlYWs7CiAgIGNhc2UgT25BYm9ydDoKICAgICBzZXRMaXN0ZW5lcihl
eGVjLERPTTo6RXZlbnRJbXBsOjpBQk9SVF9FVkVOVCx2YWx1ZSk7CkBAIC0xMTg3LDcgKzExODYs
NyBAQCBWYWx1ZSBET01FbGVtZW50Ojp0cnlHZXQoRXhlY1N0YXRlICpleGVjCiAgIHsKICAgICBz
d2l0Y2goIGVudHJ5LT52YWx1ZSApIHsKICAgICBjYXNlIFRhZ05hbWU6Ci0gICAgICByZXR1cm4g
Z2V0U3RyaW5nT3JOdWxsKGVsZW1lbnQudGFnTmFtZSgpKTsKKyAgICAgIHJldHVybiBnZXRTdHJp
bmdPck51bGwoZWxlbWVudC5ub2RlTmFtZSgpKTsKICAgICBjYXNlIFN0eWxlOgogICAgICAgcmV0
dXJuIGdldERPTUNTU1N0eWxlRGVjbGFyYXRpb24oZXhlYyxlbGVtZW50LnN0eWxlKCkpOwogICAg
IGRlZmF1bHQ6CkBAIC0xNzA5LDI2ICsxNzA4LDIxIEBAIFZhbHVlSW1wICpnZXRSdW50aW1lT2Jq
ZWN0KEV4ZWNTdGF0ZSAqZXgKICAgICBpZiAoIW4pCiAgICAgICAgIHJldHVybiAwOwogCi0gICAg
c3dpdGNoIChuLT5pZCgpKSB7Ci0gICAgICAgIGNhc2UgSURfQVBQTEVUOiB7Ci0gICAgICAgICAg
ICBIVE1MQXBwbGV0RWxlbWVudEltcGwgKmFwcGxldEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1M
QXBwbGV0RWxlbWVudEltcGwgKj4obik7Ci0gICAgICAgICAgICBpZiAoYXBwbGV0RWxlbWVudC0+
Z2V0QXBwbGV0SW5zdGFuY2UoKSkKLSAgICAgICAgICAgICAgICAvLyBUaGUgaW5zdGFuY2UgaXMg
b3duZWQgYnkgdGhlIGFwcGxldCBlbGVtZW50LgotICAgICAgICAgICAgICAgIHJldHVybiBuZXcg
UnVudGltZU9iamVjdEltcChhcHBsZXRFbGVtZW50LT5nZXRBcHBsZXRJbnN0YW5jZSgpLCBmYWxz
ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIElEX0VNQkVE
OiB7Ci0gICAgICAgICAgICBIVE1MRW1iZWRFbGVtZW50SW1wbCAqZW1iZWRFbGVtZW50ID0gc3Rh
dGljX2Nhc3Q8SFRNTEVtYmVkRWxlbWVudEltcGwgKj4obik7Ci0gICAgICAgICAgICBpZiAoZW1i
ZWRFbGVtZW50LT5nZXRFbWJlZEluc3RhbmNlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG5l
dyBSdW50aW1lT2JqZWN0SW1wKGVtYmVkRWxlbWVudC0+Z2V0RW1iZWRJbnN0YW5jZSgpLCBmYWxz
ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIElEX09CSkVD
VDogewotICAgICAgICAgICAgSFRNTE9iamVjdEVsZW1lbnRJbXBsICpvYmplY3RFbGVtZW50ID0g
c3RhdGljX2Nhc3Q8SFRNTE9iamVjdEVsZW1lbnRJbXBsICo+KG4pOwotICAgICAgICAgICAgaWYg
KG9iamVjdEVsZW1lbnQtPmdldE9iamVjdEluc3RhbmNlKCkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIG5ldyBSdW50aW1lT2JqZWN0SW1wKG9iamVjdEVsZW1lbnQtPmdldE9iamVjdEluc3RhbmNl
KCksIGZhbHNlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisgICAgaWYgKG4tPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjphcHBsZXQoKSkpIHsKKyAgICAgICAgSFRNTEFwcGxldEVsZW1l
bnRJbXBsICphcHBsZXRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEFwcGxldEVsZW1lbnRJbXBs
ICo+KG4pOworICAgICAgICBpZiAoYXBwbGV0RWxlbWVudC0+Z2V0QXBwbGV0SW5zdGFuY2UoKSkK
KyAgICAgICAgICAgIC8vIFRoZSBpbnN0YW5jZSBpcyBvd25lZCBieSB0aGUgYXBwbGV0IGVsZW1l
bnQuCisgICAgICAgICAgICByZXR1cm4gbmV3IFJ1bnRpbWVPYmplY3RJbXAoYXBwbGV0RWxlbWVu
dC0+Z2V0QXBwbGV0SW5zdGFuY2UoKSwgZmFsc2UpOworICAgIH0KKyAgICBlbHNlIGlmIChuLT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6ZW1iZWQoKSkpIHsKKyAgICAgICAgSFRNTEVtYmVkRWxlbWVu
dEltcGwgKmVtYmVkRWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxFbWJlZEVsZW1lbnRJbXBsICo+
KG4pOworICAgICAgICBpZiAoZW1iZWRFbGVtZW50LT5nZXRFbWJlZEluc3RhbmNlKCkpCisgICAg
ICAgICAgICByZXR1cm4gbmV3IFJ1bnRpbWVPYmplY3RJbXAoZW1iZWRFbGVtZW50LT5nZXRFbWJl
ZEluc3RhbmNlKCksIGZhbHNlKTsKKyAgICB9CisgICAgZWxzZSBpZiAobi0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6Om9iamVjdCgpKSkgeworICAgICAgICBIVE1MT2JqZWN0RWxlbWVudEltcGwgKm9i
amVjdEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MT2JqZWN0RWxlbWVudEltcGwgKj4obik7Cisg
ICAgICAgIGlmIChvYmplY3RFbGVtZW50LT5nZXRPYmplY3RJbnN0YW5jZSgpKQorICAgICAgICAg
ICAgcmV0dXJuIG5ldyBSdW50aW1lT2JqZWN0SW1wKG9iamVjdEVsZW1lbnQtPmdldE9iamVjdElu
c3RhbmNlKCksIGZhbHNlKTsKICAgICB9CiAgICAgCiAgICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBh
IHJ1bnRpbWUgb2JqZWN0IHJldHVybiAwLgpJbmRleDoga2h0bWwvZWNtYS9ranNfaHRtbC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWNtYS9ranNfaHRt
bC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTE4CmRpZmYgLXUgLXAgLXIxLjExOCBraHRt
bC9lY21hL2tqc19odG1sLmNwcAotLS0ga2h0bWwvZWNtYS9ranNfaHRtbC5jcHAJMjIgSnVuIDIw
MDUgMDA6NDg6NDQgLTAwMDAJMS4xMTgKKysrIGtodG1sL2VjbWEva2pzX2h0bWwuY3BwCTIyIEp1
biAyMDA1IDIzOjIzOjA5IC0wMDAwCkBAIC00Niw4ICs0Niw2IEBACiAjaW5jbHVkZSAia2pzX2V2
ZW50cy5oIgogI2luY2x1ZGUgImtqc19wcm94eS5oIgogCi0jaW5jbHVkZSAibWlzYy9odG1sdGFn
cy5oIgotCiAjaW5jbHVkZSAicmVuZGVyaW5nL3JlbmRlcl9jYW52YXNpbWFnZS5oIgogI2luY2x1
ZGUgInJlbmRlcmluZy9yZW5kZXJfb2JqZWN0LmgiCiAjaW5jbHVkZSAicmVuZGVyaW5nL3JlbmRl
cl9sYXllci5oIgpAQCAtMTA5LDYgKzEwNyw3IEBAIHVzaW5nIERPTTo6SFRNTE1hcEVsZW1lbnRJ
bXBsOwogdXNpbmcgRE9NOjpIVE1MTWVudUVsZW1lbnRJbXBsOwogdXNpbmcgRE9NOjpIVE1MTWV0
YUVsZW1lbnRJbXBsOwogdXNpbmcgRE9NOjpIVE1MTW9kRWxlbWVudEltcGw7Cit1c2luZyBET006
OkhUTUxOYW1lczsKIHVzaW5nIERPTTo6SFRNTE9MaXN0RWxlbWVudEltcGw7CiB1c2luZyBET006
OkhUTUxPYmplY3RFbGVtZW50SW1wbDsKIHVzaW5nIERPTTo6SFRNTE9wdEdyb3VwRWxlbWVudElt
cGw7CkBAIC0zNTMsNyArMzUyLDcgQEAgVmFsdWUgSFRNTERvY3VtZW50Ojp0cnlHZXQoRXhlY1N0
YXRlICpleAogICBpZiAodmFsKQogICAgIHJldHVybiBWYWx1ZSh2YWwpOwogCi0gIEhUTUxCb2R5
RWxlbWVudEltcGwgKmJvZHlFbGVtZW50ID0gKGJvZHkgJiYgYm9keS0+aWQoKSA9PSBJRF9CT0RZ
KSA/IHN0YXRpY19jYXN0PEhUTUxCb2R5RWxlbWVudEltcGwgKj4oYm9keSkgOiAwOworICBIVE1M
Qm9keUVsZW1lbnRJbXBsICpib2R5RWxlbWVudCA9IChib2R5ICYmIGJvZHktPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjpib2R5KCkpKSA/IHN0YXRpY19jYXN0PEhUTUxCb2R5RWxlbWVudEltcGwgKj4o
Ym9keSkgOiAwOwogCiAgIGlmIChlbnRyeSkgewogICAgIHN3aXRjaCAoZW50cnktPnZhbHVlKSB7
CkBAIC00MjgsNyArNDI3LDcgQEAgdm9pZCBLSlM6OkhUTUxEb2N1bWVudDo6cHV0VmFsdWUoRXhl
Y1N0YQogICBET01FeGNlcHRpb25UcmFuc2xhdG9yIGV4Y2VwdGlvbihleGVjKTsKICAgSFRNTERv
Y3VtZW50SW1wbCAmZG9jID0gKnN0YXRpY19jYXN0PEhUTUxEb2N1bWVudEltcGwgKj4oaW1wbCgp
KTsKICAgSFRNTEVsZW1lbnRJbXBsICpib2R5ID0gZG9jLmJvZHkoKTsKLSAgSFRNTEJvZHlFbGVt
ZW50SW1wbCAqYm9keUVsZW1lbnQgPSAoYm9keSAmJiBib2R5LT5pZCgpID09IElEX0JPRFkpID8g
c3RhdGljX2Nhc3Q8SFRNTEJvZHlFbGVtZW50SW1wbCAqPihib2R5KSA6IDA7CisgIEhUTUxCb2R5
RWxlbWVudEltcGwgKmJvZHlFbGVtZW50ID0gKGJvZHkgJiYgYm9keS0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OmJvZHkoKSkpID8gc3RhdGljX2Nhc3Q8SFRNTEJvZHlFbGVtZW50SW1wbCAqPihib2R5
KSA6IDA7CiAKICAgc3dpdGNoICh0b2tlbikgewogICBjYXNlIFRpdGxlOgpAQCAtNTgyLDEzMyAr
NTgxLDIxOCBAQCBjb25zdCBDbGFzc0luZm8gS0pTOjpIVE1MRWxlbWVudDo6bWFycXVlCiAKIGNv
bnN0IENsYXNzSW5mbyogS0pTOjpIVE1MRWxlbWVudDo6Y2xhc3NJbmZvKCkgY29uc3QKIHsKLSAg
c3dpdGNoIChpbXBsKCktPmlkKCkpIHsKLSAgY2FzZSBJRF9IVE1MOgotICAgIHJldHVybiAmaHRt
bF9pbmZvOwotICBjYXNlIElEX0hFQUQ6Ci0gICAgcmV0dXJuICZoZWFkX2luZm87Ci0gIGNhc2Ug
SURfTElOSzoKLSAgICByZXR1cm4gJmxpbmtfaW5mbzsKLSAgY2FzZSBJRF9USVRMRToKLSAgICBy
ZXR1cm4gJnRpdGxlX2luZm87Ci0gIGNhc2UgSURfTUVUQToKLSAgICByZXR1cm4gJm1ldGFfaW5m
bzsKLSAgY2FzZSBJRF9CQVNFOgotICAgIHJldHVybiAmYmFzZV9pbmZvOwotICBjYXNlIElEX0lT
SU5ERVg6Ci0gICAgcmV0dXJuICZpc0luZGV4X2luZm87Ci0gIGNhc2UgSURfU1RZTEU6Ci0gICAg
cmV0dXJuICZzdHlsZV9pbmZvOwotICBjYXNlIElEX0JPRFk6Ci0gICAgcmV0dXJuICZib2R5X2lu
Zm87Ci0gIGNhc2UgSURfRk9STToKLSAgICByZXR1cm4gJmZvcm1faW5mbzsKLSAgY2FzZSBJRF9T
RUxFQ1Q6Ci0gICAgcmV0dXJuICZzZWxlY3RfaW5mbzsKLSAgY2FzZSBJRF9PUFRHUk9VUDoKLSAg
ICByZXR1cm4gJm9wdEdyb3VwX2luZm87Ci0gIGNhc2UgSURfT1BUSU9OOgotICAgIHJldHVybiAm
b3B0aW9uX2luZm87Ci0gIGNhc2UgSURfSU5QVVQ6Ci0gICAgcmV0dXJuICZpbnB1dF9pbmZvOwot
ICBjYXNlIElEX1RFWFRBUkVBOgotICAgIHJldHVybiAmdGV4dEFyZWFfaW5mbzsKLSAgY2FzZSBJ
RF9CVVRUT046Ci0gICAgcmV0dXJuICZidXR0b25faW5mbzsKLSAgY2FzZSBJRF9MQUJFTDoKLSAg
ICByZXR1cm4gJmxhYmVsX2luZm87Ci0gIGNhc2UgSURfRklFTERTRVQ6Ci0gICAgcmV0dXJuICZm
aWVsZFNldF9pbmZvOwotICBjYXNlIElEX0xFR0VORDoKLSAgICByZXR1cm4gJmxlZ2VuZF9pbmZv
OwotICBjYXNlIElEX1VMOgotICAgIHJldHVybiAmdWxfaW5mbzsKLSAgY2FzZSBJRF9PTDoKLSAg
ICByZXR1cm4gJm9sX2luZm87Ci0gIGNhc2UgSURfREw6Ci0gICAgcmV0dXJuICZkbF9pbmZvOwot
ICBjYXNlIElEX0RJUjoKLSAgICByZXR1cm4gJmRpcl9pbmZvOwotICBjYXNlIElEX01FTlU6Ci0g
ICAgcmV0dXJuICZtZW51X2luZm87Ci0gIGNhc2UgSURfTEk6Ci0gICAgcmV0dXJuICZsaV9pbmZv
OwotICBjYXNlIElEX0RJVjoKLSAgICByZXR1cm4gJmRpdl9pbmZvOwotICBjYXNlIElEX1A6Ci0g
ICAgcmV0dXJuICZwX2luZm87Ci0gIGNhc2UgSURfSDE6Ci0gIGNhc2UgSURfSDI6Ci0gIGNhc2Ug
SURfSDM6Ci0gIGNhc2UgSURfSDQ6Ci0gIGNhc2UgSURfSDU6Ci0gIGNhc2UgSURfSDY6Ci0gICAg
cmV0dXJuICZoZWFkaW5nX2luZm87Ci0gIGNhc2UgSURfQkxPQ0tRVU9URToKLSAgICByZXR1cm4g
JmJsb2NrUXVvdGVfaW5mbzsKLSAgY2FzZSBJRF9ROgotICAgIHJldHVybiAmcV9pbmZvOwotICBj
YXNlIElEX1BSRToKLSAgICByZXR1cm4gJnByZV9pbmZvOwotICBjYXNlIElEX0JSOgotICAgIHJl
dHVybiAmYnJfaW5mbzsKLSAgY2FzZSBJRF9CQVNFRk9OVDoKLSAgICByZXR1cm4gJmJhc2VGb250
X2luZm87Ci0gIGNhc2UgSURfRk9OVDoKLSAgICByZXR1cm4gJmZvbnRfaW5mbzsKLSAgY2FzZSBJ
RF9IUjoKLSAgICByZXR1cm4gJmhyX2luZm87Ci0gIGNhc2UgSURfSU5TOgotICBjYXNlIElEX0RF
TDoKLSAgICByZXR1cm4gJm1vZF9pbmZvOwotICBjYXNlIElEX0E6Ci0gICAgcmV0dXJuICZhX2lu
Zm87Ci0gIGNhc2UgSURfQ0FOVkFTOgotICAgIHJldHVybiAmY2FudmFzX2luZm87Ci0gIGNhc2Ug
SURfSU1HOgotICAgIHJldHVybiAmaW1nX2luZm87Ci0gIGNhc2UgSURfT0JKRUNUOgotICAgIHJl
dHVybiAmb2JqZWN0X2luZm87Ci0gIGNhc2UgSURfUEFSQU06Ci0gICAgcmV0dXJuICZwYXJhbV9p
bmZvOwotICBjYXNlIElEX0FQUExFVDoKLSAgICByZXR1cm4gJmFwcGxldF9pbmZvOwotICBjYXNl
IElEX01BUDoKLSAgICByZXR1cm4gJm1hcF9pbmZvOwotICBjYXNlIElEX0FSRUE6Ci0gICAgcmV0
dXJuICZhcmVhX2luZm87Ci0gIGNhc2UgSURfU0NSSVBUOgotICAgIHJldHVybiAmc2NyaXB0X2lu
Zm87Ci0gIGNhc2UgSURfVEFCTEU6Ci0gICAgcmV0dXJuICZ0YWJsZV9pbmZvOwotICBjYXNlIElE
X0NBUFRJT046Ci0gICAgcmV0dXJuICZjYXB0aW9uX2luZm87Ci0gIGNhc2UgSURfQ09MOgotICAg
IHJldHVybiAmY29sX2luZm87Ci0gIGNhc2UgSURfVEhFQUQ6Ci0gICAgcmV0dXJuICZ0YWJsZXNl
Y3Rpb25faW5mbzsKLSAgY2FzZSBJRF9UQk9EWToKLSAgICByZXR1cm4gJnRhYmxlc2VjdGlvbl9p
bmZvOwotICBjYXNlIElEX1RGT09UOgotICAgIHJldHVybiAmdGFibGVzZWN0aW9uX2luZm87Ci0g
IGNhc2UgSURfVFI6Ci0gICAgcmV0dXJuICZ0cl9pbmZvOwotICBjYXNlIElEX1RIOgotICAgIHJl
dHVybiAmdGFibGVjZWxsX2luZm87Ci0gIGNhc2UgSURfVEQ6Ci0gICAgcmV0dXJuICZ0YWJsZWNl
bGxfaW5mbzsKLSAgY2FzZSBJRF9GUkFNRVNFVDoKLSAgICByZXR1cm4gJmZyYW1lU2V0X2luZm87
Ci0gIGNhc2UgSURfRlJBTUU6Ci0gICAgcmV0dXJuICZmcmFtZV9pbmZvOwotICBjYXNlIElEX0lG
UkFNRToKLSAgICByZXR1cm4gJmlGcmFtZV9pbmZvOwotICBjYXNlIElEX01BUlFVRUU6Ci0gICAg
cmV0dXJuICZtYXJxdWVlX2luZm87Ci0gIGRlZmF1bHQ6CisgICAgLy8gV2UgYWxyZWFkeSBrbm93
IHdlIGhhdmUgYW4gSFRNTCBlbGVtZW50LCBzbyB3ZSBvbmx5IG5lZWQgdG8gY29tcGFyZSB0aGUg
bG9jYWxOYW1lIGNvbXBvbmVudCBvZiB0aGUgcXVhbGlmaWVkIG5hbWUuCisgICAgc3RhdGljIFFQ
dHJEaWN0PGNvbnN0IENsYXNzSW5mbz4gY2xhc3NJbmZvRGljdDsKKyAgICBpZiAoY2xhc3NJbmZv
RGljdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVz
OjphKCkubG9jYWxOYW1lUHRyKCksICZhX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmlu
c2VydChIVE1MTmFtZXM6OmFwcGxldCgpLmxvY2FsTmFtZVB0cigpLCAmYXBwbGV0X2luZm8pOwor
ICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmFyZWEoKS5sb2NhbE5hbWVQ
dHIoKSwgJmFyZWFfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1l
czo6YmFzZSgpLmxvY2FsTmFtZVB0cigpLCAmYmFzZV9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZv
RGljdC5pbnNlcnQoSFRNTE5hbWVzOjpiYXNlZm9udCgpLmxvY2FsTmFtZVB0cigpLCAmYmFzZUZv
bnRfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6YmxvY2tx
dW90ZSgpLmxvY2FsTmFtZVB0cigpLCAmYmxvY2tRdW90ZV9pbmZvKTsKKyAgICAgICAgY2xhc3NJ
bmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpib2R5KCkubG9jYWxOYW1lUHRyKCksICZib2R5X2lu
Zm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmJyKCkubG9jYWxO
YW1lUHRyKCksICZicl9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5h
bWVzOjpidXR0b24oKS5sb2NhbE5hbWVQdHIoKSwgJmJ1dHRvbl9pbmZvKTsKKyAgICAgICAgY2xh
c3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpjYW52YXMoKS5sb2NhbE5hbWVQdHIoKSwgJmNh
bnZhc19pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpjYXB0
aW9uKCkubG9jYWxOYW1lUHRyKCksICZjYXB0aW9uX2luZm8pOworICAgICAgICBjbGFzc0luZm9E
aWN0Lmluc2VydChIVE1MTmFtZXM6OmNvbCgpLmxvY2FsTmFtZVB0cigpLCAmY29sX2luZm8pOwor
ICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmNvbGdyb3VwKCkubG9jYWxO
YW1lUHRyKCksICZjb2xfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxO
YW1lczo6ZGVsKCkubG9jYWxOYW1lUHRyKCksICZtb2RfaW5mbyk7CisgICAgICAgIGNsYXNzSW5m
b0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6ZGlyKCkubG9jYWxOYW1lUHRyKCksICZkaXJfaW5mbyk7
CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6ZGl2KCkubG9jYWxOYW1l
UHRyKCksICZkaXZfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1l
czo6ZGwoKS5sb2NhbE5hbWVQdHIoKSwgJmRsX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0
Lmluc2VydChIVE1MTmFtZXM6OmZpZWxkc2V0KCkubG9jYWxOYW1lUHRyKCksICZmaWVsZFNldF9p
bmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpmb250KCkubG9j
YWxOYW1lUHRyKCksICZmb250X2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChI
VE1MTmFtZXM6OmZvcm0oKS5sb2NhbE5hbWVQdHIoKSwgJmZvcm1faW5mbyk7CisgICAgICAgIGNs
YXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6ZnJhbWUoKS5sb2NhbE5hbWVQdHIoKSwgJmZy
YW1lX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmZyYW1l
c2V0KCkubG9jYWxOYW1lUHRyKCksICZmcmFtZVNldF9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZv
RGljdC5pbnNlcnQoSFRNTE5hbWVzOjpoMSgpLmxvY2FsTmFtZVB0cigpLCAmaGVhZGluZ19pbmZv
KTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpoMigpLmxvY2FsTmFt
ZVB0cigpLCAmaGVhZGluZ19pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRN
TE5hbWVzOjpoMygpLmxvY2FsTmFtZVB0cigpLCAmaGVhZGluZ19pbmZvKTsKKyAgICAgICAgY2xh
c3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpoNCgpLmxvY2FsTmFtZVB0cigpLCAmaGVhZGlu
Z19pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpoNSgpLmxv
Y2FsTmFtZVB0cigpLCAmaGVhZGluZ19pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNl
cnQoSFRNTE5hbWVzOjpoNigpLmxvY2FsTmFtZVB0cigpLCAmaGVhZGluZ19pbmZvKTsKKyAgICAg
ICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpoZWFkKCkubG9jYWxOYW1lUHRyKCks
ICZoZWFkX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Omhy
KCkubG9jYWxOYW1lUHRyKCksICZocl9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNl
cnQoSFRNTE5hbWVzOjpodG1sKCkubG9jYWxOYW1lUHRyKCksICZodG1sX2luZm8pOworICAgICAg
ICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmlmcmFtZSgpLmxvY2FsTmFtZVB0cigp
LCAmaUZyYW1lX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6
OmltZygpLmxvY2FsTmFtZVB0cigpLCAmaW1nX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0
Lmluc2VydChIVE1MTmFtZXM6OmlucHV0KCkubG9jYWxOYW1lUHRyKCksICZpbnB1dF9pbmZvKTsK
KyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjppbnMoKS5sb2NhbE5hbWVQ
dHIoKSwgJm1vZF9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVz
Ojppc2luZGV4KCkubG9jYWxOYW1lUHRyKCksICZpc0luZGV4X2luZm8pOworICAgICAgICBjbGFz
c0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmxhYmVsKCkubG9jYWxOYW1lUHRyKCksICZsYWJl
bF9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpsZWdlbmQo
KS5sb2NhbE5hbWVQdHIoKSwgJmxlZ2VuZF9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5p
bnNlcnQoSFRNTE5hbWVzOjpsaSgpLmxvY2FsTmFtZVB0cigpLCAmbGlfaW5mbyk7CisgICAgICAg
IGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6bGluaygpLmxvY2FsTmFtZVB0cigpLCAm
bGlua19pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjptYXAo
KS5sb2NhbE5hbWVQdHIoKSwgJm1hcF9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNl
cnQoSFRNTE5hbWVzOjptYXJxdWVlKCkubG9jYWxOYW1lUHRyKCksICZtYXJxdWVlX2luZm8pOwor
ICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Om1lbnUoKS5sb2NhbE5hbWVQ
dHIoKSwgJm1lbnVfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1l
czo6bWV0YSgpLmxvY2FsTmFtZVB0cigpLCAmbWV0YV9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZv
RGljdC5pbnNlcnQoSFRNTE5hbWVzOjpvYmplY3QoKS5sb2NhbE5hbWVQdHIoKSwgJm9iamVjdF9p
bmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpvbCgpLmxvY2Fs
TmFtZVB0cigpLCAmb2xfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxO
YW1lczo6b3B0aW9uKCkubG9jYWxOYW1lUHRyKCksICZvcHRpb25faW5mbyk7CisgICAgICAgIGNs
YXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6b3B0Z3JvdXAoKS5sb2NhbE5hbWVQdHIoKSwg
Jm9wdEdyb3VwX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6
OnAoKS5sb2NhbE5hbWVQdHIoKSwgJnBfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5z
ZXJ0KEhUTUxOYW1lczo6cGFyYW0oKS5sb2NhbE5hbWVQdHIoKSwgJnBhcmFtX2luZm8pOworICAg
ICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OnByZSgpLmxvY2FsTmFtZVB0cigp
LCAmcHJlX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OnEo
KS5sb2NhbE5hbWVQdHIoKSwgJnFfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0
KEhUTUxOYW1lczo6c2NyaXB0KCkubG9jYWxOYW1lUHRyKCksICZzY3JpcHRfaW5mbyk7CisgICAg
ICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6c2VsZWN0KCkubG9jYWxOYW1lUHRy
KCksICZzZWxlY3RfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1l
czo6c3R5bGUoKS5sb2NhbE5hbWVQdHIoKSwgJnN0eWxlX2luZm8pOworICAgICAgICBjbGFzc0lu
Zm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OnRhYmxlKCkubG9jYWxOYW1lUHRyKCksICZ0YWJsZV9p
bmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjp0Ym9keSgpLmxv
Y2FsTmFtZVB0cigpLCAmdGFibGVzZWN0aW9uX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0
Lmluc2VydChIVE1MTmFtZXM6OnRkKCkubG9jYWxOYW1lUHRyKCksICZ0YWJsZWNlbGxfaW5mbyk7
CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6dGV4dGFyZWEoKS5sb2Nh
bE5hbWVQdHIoKSwgJnRleHRBcmVhX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2Vy
dChIVE1MTmFtZXM6OnRoKCkubG9jYWxOYW1lUHRyKCksICZ0YWJsZWNlbGxfaW5mbyk7CisgICAg
ICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6dGhlYWQoKS5sb2NhbE5hbWVQdHIo
KSwgJnRhYmxlc2VjdGlvbl9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRN
TE5hbWVzOjp0Zm9vdCgpLmxvY2FsTmFtZVB0cigpLCAmdGFibGVzZWN0aW9uX2luZm8pOworICAg
ICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OnRpdGxlKCkubG9jYWxOYW1lUHRy
KCksICZ0aXRsZV9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVz
Ojp0cigpLmxvY2FsTmFtZVB0cigpLCAmdHJfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3Qu
aW5zZXJ0KEhUTUxOYW1lczo6dWwoKS5sb2NhbE5hbWVQdHIoKSwgJnVsX2luZm8pOworICAgIH0K
KyAgICAKKyAgICBIVE1MRWxlbWVudEltcGwqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRWxl
bWVudEltcGwqPihpbXBsKCkpOworICAgIGNvbnN0IENsYXNzSW5mbyogcmVzdWx0ID0gY2xhc3NJ
bmZvRGljdC5maW5kKGVsZW1lbnQtPmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCkpOworICAg
IGlmIChyZXN1bHQpCisgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgcmV0dXJuICZpbmZvOwot
ICB9CiB9CisKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjpodG1s
X2dldHNldCA9IHsgJkhUTUxFbGVtZW50OjpodG1sR2V0dGVyLCAmSFRNTEVsZW1lbnQ6Omh0bWxT
ZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjpoZWFk
X2dldHNldCA9IHsgJkhUTUxFbGVtZW50OjpoZWFkR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmhlYWRT
ZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjpsaW5r
X2dldHNldCA9IHsgJkhUTUxFbGVtZW50OjpsaW5rR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmxpbmtT
ZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50Ojp0aXRs
ZV9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6dGl0bGVHZXR0ZXIsICZIVE1MRWxlbWVudDo6dGl0
bGVTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50Ojpt
ZXRhX2dldHNldCA9IHsgJkhUTUxFbGVtZW50OjptZXRhR2V0dGVyLCAmSFRNTEVsZW1lbnQ6Om1l
dGFTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50Ojpi
YXNlX2dldHNldCA9IHsgJkhUTUxFbGVtZW50OjpiYXNlR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmJh
c2VTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50Ojpp
c0luZGV4X2dldHNldCA9IHsgJkhUTUxFbGVtZW50Ojppc0luZGV4R2V0dGVyLCAmSFRNTEVsZW1l
bnQ6OmlzSW5kZXhTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxF
bGVtZW50OjpzdHlsZV9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6c3R5bGVHZXR0ZXIsICZIVE1M
RWxlbWVudDo6c3R5bGVTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhU
TUxFbGVtZW50Ojpib2R5X2dldHNldCA9IHsgJkhUTUxFbGVtZW50Ojpib2R5R2V0dGVyLCAmSFRN
TEVsZW1lbnQ6OmJvZHlTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhU
TUxFbGVtZW50Ojpmb3JtX2dldHNldCA9IHsgJkhUTUxFbGVtZW50Ojpmb3JtR2V0dGVyLCAmSFRN
TEVsZW1lbnQ6OmZvcm1TZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhU
TUxFbGVtZW50OjpzZWxlY3RfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OnNlbGVjdEdldHRlciwg
JkhUTUxFbGVtZW50OjpzZWxlY3RTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJ
bmZvIEhUTUxFbGVtZW50OjpvcHRHcm91cF9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6b3B0R3Jv
dXBHZXR0ZXIsICZIVE1MRWxlbWVudDo6b3B0R3JvdXBTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVt
ZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjpvcHRpb25fZ2V0c2V0ID0geyAmSFRNTEVsZW1l
bnQ6Om9wdGlvbkdldHRlciwgJkhUTUxFbGVtZW50OjpvcHRpb25TZXR0ZXIgfTsKK2NvbnN0IEhU
TUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjppbnB1dF9nZXRzZXQgPSB7ICZIVE1M
RWxlbWVudDo6aW5wdXRHZXR0ZXIsICZIVE1MRWxlbWVudDo6aW5wdXRTZXR0ZXIgfTsKK2NvbnN0
IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50Ojp0ZXh0QXJlYV9nZXRzZXQgPSB7
ICZIVE1MRWxlbWVudDo6dGV4dEFyZWFHZXR0ZXIsICZIVE1MRWxlbWVudDo6dGV4dEFyZWFTZXR0
ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjpidXR0b25f
Z2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmJ1dHRvbkdldHRlciwgJkhUTUxFbGVtZW50OjpidXR0
b25TZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50Ojps
YWJlbF9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6bGFiZWxHZXR0ZXIsICZIVE1MRWxlbWVudDo6
bGFiZWxTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50
OjpmaWVsZFNldF9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6ZmllbGRTZXRHZXR0ZXIsICZIVE1M
RWxlbWVudDo6ZmllbGRTZXRTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZv
IEhUTUxFbGVtZW50OjpsZWdlbmRfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmxlZ2VuZEdldHRl
ciwgJkhUTUxFbGVtZW50OjpsZWdlbmRTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRT
ZXRJbmZvIEhUTUxFbGVtZW50Ojp1bF9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6dUxpc3RHZXR0
ZXIsICZIVE1MRWxlbWVudDo6dUxpc3RTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRT
ZXRJbmZvIEhUTUxFbGVtZW50OjpvbF9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6b0xpc3RHZXR0
ZXIsICZIVE1MRWxlbWVudDo6b0xpc3RTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRT
ZXRJbmZvIEhUTUxFbGVtZW50OjpkbF9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6ZExpc3RHZXR0
ZXIsICZIVE1MRWxlbWVudDo6ZExpc3RTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRT
ZXRJbmZvIEhUTUxFbGVtZW50OjpkaXJfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmRpckdldHRl
ciwgJkhUTUxFbGVtZW50OjpkaXJTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJ
bmZvIEhUTUxFbGVtZW50OjptZW51X2dldHNldCA9IHsgJkhUTUxFbGVtZW50OjptZW51R2V0dGVy
LCAmSFRNTEVsZW1lbnQ6Om1lbnVTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJ
bmZvIEhUTUxFbGVtZW50OjpsaV9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6bGlHZXR0ZXIsICZI
VE1MRWxlbWVudDo6bGlTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhU
TUxFbGVtZW50OjpkaXZfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmRpdkdldHRlciwgJkhUTUxF
bGVtZW50OjpkaXZTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxF
bGVtZW50OjpwX2dldHNldCA9IHsgJkhUTUxFbGVtZW50OjpwYXJhZ3JhcGhHZXR0ZXIsICZIVE1M
RWxlbWVudDo6cGFyYWdyYXBoU2V0dGVyIH07Citjb25zdCBIVE1MRWxlbWVudDo6R2V0U2V0SW5m
byBIVE1MRWxlbWVudDo6aGVhZGluZ19nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6aGVhZGluZ0dl
dHRlciwgJkhUTUxFbGVtZW50OjpoZWFkaW5nU2V0dGVyIH07Citjb25zdCBIVE1MRWxlbWVudDo6
R2V0U2V0SW5mbyBIVE1MRWxlbWVudDo6YmxvY2tRdW90ZV9nZXRzZXQgPSB7ICZIVE1MRWxlbWVu
dDo6YmxvY2tRdW90ZUdldHRlciwgJkhUTUxFbGVtZW50OjpibG9ja1F1b3RlU2V0dGVyIH07Citj
b25zdCBIVE1MRWxlbWVudDo6R2V0U2V0SW5mbyBIVE1MRWxlbWVudDo6cV9nZXRzZXQgPSB7ICZI
VE1MRWxlbWVudDo6cXVvdGVHZXR0ZXIsICZIVE1MRWxlbWVudDo6cXVvdGVTZXR0ZXIgfTsKK2Nv
bnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjpwcmVfZ2V0c2V0ID0geyAm
SFRNTEVsZW1lbnQ6OnByZUdldHRlciwgJkhUTUxFbGVtZW50OjpwcmVTZXR0ZXIgfTsKK2NvbnN0
IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50Ojpicl9nZXRzZXQgPSB7ICZIVE1M
RWxlbWVudDo6YnJHZXR0ZXIsICZIVE1MRWxlbWVudDo6YnJTZXR0ZXIgfTsKK2NvbnN0IEhUTUxF
bGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjpiYXNlRm9udF9nZXRzZXQgPSB7ICZIVE1M
RWxlbWVudDo6YmFzZUZvbnRHZXR0ZXIsICZIVE1MRWxlbWVudDo6YmFzZUZvbnRTZXR0ZXIgfTsK
K2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50Ojpmb250X2dldHNldCA9
IHsgJkhUTUxFbGVtZW50Ojpmb250R2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmZvbnRTZXR0ZXIgfTsK
K2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50Ojpocl9nZXRzZXQgPSB7
ICZIVE1MRWxlbWVudDo6aHJHZXR0ZXIsICZIVE1MRWxlbWVudDo6aHJTZXR0ZXIgfTsKK2NvbnN0
IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50Ojptb2RfZ2V0c2V0ID0geyAmSFRN
TEVsZW1lbnQ6Om1vZEdldHRlciwgJkhUTUxFbGVtZW50Ojptb2RTZXR0ZXIgfTsKK2NvbnN0IEhU
TUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjphX2dldHNldCA9IHsgJkhUTUxFbGVt
ZW50OjphbmNob3JHZXR0ZXIsICZIVE1MRWxlbWVudDo6YW5jaG9yU2V0dGVyIH07Citjb25zdCBI
VE1MRWxlbWVudDo6R2V0U2V0SW5mbyBIVE1MRWxlbWVudDo6Y2FudmFzX2dldHNldCA9IHsgJkhU
TUxFbGVtZW50OjppbWFnZUdldHRlciwgJkhUTUxFbGVtZW50OjppbWFnZVNldHRlciB9OworY29u
c3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmltZ19nZXRzZXQgPSB7ICZI
VE1MRWxlbWVudDo6aW1hZ2VHZXR0ZXIsICZIVE1MRWxlbWVudDo6aW1hZ2VTZXR0ZXIgfTsKK2Nv
bnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjpvYmplY3RfZ2V0c2V0ID0g
eyAmSFRNTEVsZW1lbnQ6Om9iamVjdEdldHRlciwgJkhUTUxFbGVtZW50OjpvYmplY3RTZXR0ZXIg
fTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjpwYXJhbV9nZXRz
ZXQgPSB7ICZIVE1MRWxlbWVudDo6cGFyYW1HZXR0ZXIsICZIVE1MRWxlbWVudDo6cGFyYW1TZXR0
ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjphcHBsZXRf
Z2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmFwcGxldEdldHRlciwgJkhUTUxFbGVtZW50OjphcHBs
ZXRTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50Ojpt
YXBfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6Om1hcEdldHRlciwgJkhUTUxFbGVtZW50OjptYXBT
ZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjphcmVh
X2dldHNldCA9IHsgJkhUTUxFbGVtZW50OjphcmVhR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmFyZWFT
ZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjpzY3Jp
cHRfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OnNjcmlwdEdldHRlciwgJkhUTUxFbGVtZW50Ojpz
Y3JpcHRTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50
Ojp0YWJsZV9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6dGFibGVHZXR0ZXIsICZIVE1MRWxlbWVu
dDo6dGFibGVTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVt
ZW50OjpjYXB0aW9uX2dldHNldCA9IHsgJkhUTUxFbGVtZW50Ojp0YWJsZUNhcHRpb25HZXR0ZXIs
ICZIVE1MRWxlbWVudDo6dGFibGVDYXB0aW9uU2V0dGVyIH07Citjb25zdCBIVE1MRWxlbWVudDo6
R2V0U2V0SW5mbyBIVE1MRWxlbWVudDo6Y29sX2dldHNldCA9IHsgJkhUTUxFbGVtZW50Ojp0YWJs
ZUNvbEdldHRlciwgJkhUTUxFbGVtZW50Ojp0YWJsZUNvbFNldHRlciB9OworY29uc3QgSFRNTEVs
ZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OnRhYmxlc2VjdGlvbl9nZXRzZXQgPSB7ICZI
VE1MRWxlbWVudDo6dGFibGVTZWN0aW9uR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OnRhYmxlU2VjdGlv
blNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OnRy
X2dldHNldCA9IHsgJkhUTUxFbGVtZW50Ojp0YWJsZVJvd0dldHRlciwgJkhUTUxFbGVtZW50Ojp0
YWJsZVJvd1NldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1l
bnQ6OnRhYmxlY2VsbF9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6dGFibGVDZWxsR2V0dGVyLCAm
SFRNTEVsZW1lbnQ6OnRhYmxlQ2VsbFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNl
dEluZm8gSFRNTEVsZW1lbnQ6OmZyYW1lU2V0X2dldHNldCA9IHsgJkhUTUxFbGVtZW50OjpmcmFt
ZVNldEdldHRlciwgJkhUTUxFbGVtZW50OjpmcmFtZVNldFNldHRlciB9OworY29uc3QgSFRNTEVs
ZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmZyYW1lX2dldHNldCA9IHsgJkhUTUxFbGVt
ZW50OjpmcmFtZUdldHRlciwgJkhUTUxFbGVtZW50OjpmcmFtZVNldHRlciB9OworY29uc3QgSFRN
TEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmlGcmFtZV9nZXRzZXQgPSB7ICZIVE1M
RWxlbWVudDo6aUZyYW1lR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmlGcmFtZVNldHRlciB9OworY29u
c3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6Om1hcnF1ZWVfZ2V0c2V0ID0g
eyAmSFRNTEVsZW1lbnQ6Om1hcnF1ZWVHZXR0ZXIsICZIVE1MRWxlbWVudDo6bWFycXVlZVNldHRl
ciB9OworCitjb25zdCBIVE1MRWxlbWVudDo6R2V0U2V0SW5mbyogSFRNTEVsZW1lbnQ6OmdldFNl
dEluZm8oKSBjb25zdAoreworICAgIC8vIFdlIGFscmVhZHkga25vdyB3ZSBoYXZlIGFuIEhUTUwg
ZWxlbWVudCwgc28gd2Ugb25seSBuZWVkIHRvIGNvbXBhcmUgdGhlIGxvY2FsTmFtZSBjb21wb25l
bnQgb2YgdGhlIHF1YWxpZmllZCBuYW1lLgorICAgIHN0YXRpYyBRUHRyRGljdDxjb25zdCBIVE1M
RWxlbWVudDo6R2V0U2V0SW5mbz4gZ2V0U2V0SW5mb0RpY3Q7CisgICAgaWYgKGdldFNldEluZm9E
aWN0LmlzRW1wdHkoKSkgeworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVz
OjphKCkubG9jYWxOYW1lUHRyKCksICZhX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0
Lmluc2VydChIVE1MTmFtZXM6OmFwcGxldCgpLmxvY2FsTmFtZVB0cigpLCAmYXBwbGV0X2dldHNl
dCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmFyZWEoKS5sb2Nh
bE5hbWVQdHIoKSwgJmFyZWFfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0
KEhUTUxOYW1lczo6YmFzZSgpLmxvY2FsTmFtZVB0cigpLCAmYmFzZV9nZXRzZXQpOworICAgICAg
ICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpiYXNlZm9udCgpLmxvY2FsTmFtZVB0
cigpLCAmYmFzZUZvbnRfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhU
TUxOYW1lczo6YmxvY2txdW90ZSgpLmxvY2FsTmFtZVB0cigpLCAmYmxvY2tRdW90ZV9nZXRzZXQp
OyAKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6Ym9keSgpLmxvY2Fs
TmFtZVB0cigpLCAmYm9keV9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQo
SFRNTE5hbWVzOjpicigpLmxvY2FsTmFtZVB0cigpLCAmYnJfZ2V0c2V0KTsKKyAgICAgICAgZ2V0
U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6YnV0dG9uKCkubG9jYWxOYW1lUHRyKCksICZi
dXR0b25fZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6
Y2FudmFzKCkubG9jYWxOYW1lUHRyKCksICZjYW52YXNfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0
SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6Y2FwdGlvbigpLmxvY2FsTmFtZVB0cigpLCAmY2Fw
dGlvbl9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpj
b2woKS5sb2NhbE5hbWVQdHIoKSwgJmNvbF9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGlj
dC5pbnNlcnQoSFRNTE5hbWVzOjpjb2xncm91cCgpLmxvY2FsTmFtZVB0cigpLCAmY29sX2dldHNl
dCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmRlbCgpLmxvY2Fs
TmFtZVB0cigpLCAmbW9kX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChI
VE1MTmFtZXM6OmRpcigpLmxvY2FsTmFtZVB0cigpLCAmZGlyX2dldHNldCk7CisgICAgICAgIGdl
dFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmRpdigpLmxvY2FsTmFtZVB0cigpLCAmZGl2
X2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmRsKCku
bG9jYWxOYW1lUHRyKCksICZkbF9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNl
cnQoSFRNTE5hbWVzOjpmaWVsZHNldCgpLmxvY2FsTmFtZVB0cigpLCAmZmllbGRTZXRfZ2V0c2V0
KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6Zm9udCgpLmxvY2Fs
TmFtZVB0cigpLCAmZm9udF9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQo
SFRNTE5hbWVzOjpmb3JtKCkubG9jYWxOYW1lUHRyKCksICZmb3JtX2dldHNldCk7CisgICAgICAg
IGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmZyYW1lKCkubG9jYWxOYW1lUHRyKCks
ICZmcmFtZV9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVz
OjpmcmFtZXNldCgpLmxvY2FsTmFtZVB0cigpLCAmZnJhbWVTZXRfZ2V0c2V0KTsKKyAgICAgICAg
Z2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6aDEoKS5sb2NhbE5hbWVQdHIoKSwgJmhl
YWRpbmdfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6
aDIoKS5sb2NhbE5hbWVQdHIoKSwgJmhlYWRpbmdfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5m
b0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6aDMoKS5sb2NhbE5hbWVQdHIoKSwgJmhlYWRpbmdfZ2V0
c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6aDQoKS5sb2Nh
bE5hbWVQdHIoKSwgJmhlYWRpbmdfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5z
ZXJ0KEhUTUxOYW1lczo6aDUoKS5sb2NhbE5hbWVQdHIoKSwgJmhlYWRpbmdfZ2V0c2V0KTsKKyAg
ICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6aDYoKS5sb2NhbE5hbWVQdHIo
KSwgJmhlYWRpbmdfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxO
YW1lczo6aGVhZCgpLmxvY2FsTmFtZVB0cigpLCAmaGVhZF9nZXRzZXQpOworICAgICAgICBnZXRT
ZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpocigpLmxvY2FsTmFtZVB0cigpLCAmaHJfZ2V0
c2V0KTsgCisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Omh0bWwoKS5s
b2NhbE5hbWVQdHIoKSwgJmh0bWxfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5z
ZXJ0KEhUTUxOYW1lczo6aWZyYW1lKCkubG9jYWxOYW1lUHRyKCksICZpRnJhbWVfZ2V0c2V0KTsK
KyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6aW1nKCkubG9jYWxOYW1l
UHRyKCksICZpbWdfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxO
YW1lczo6aW5wdXQoKS5sb2NhbE5hbWVQdHIoKSwgJmlucHV0X2dldHNldCk7CisgICAgICAgIGdl
dFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmlucygpLmxvY2FsTmFtZVB0cigpLCAmbW9k
X2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmlzaW5k
ZXgoKS5sb2NhbE5hbWVQdHIoKSwgJmlzSW5kZXhfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5m
b0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6bGFiZWwoKS5sb2NhbE5hbWVQdHIoKSwgJmxhYmVsX2dl
dHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmxlZ2VuZCgp
LmxvY2FsTmFtZVB0cigpLCAmbGVnZW5kX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0
Lmluc2VydChIVE1MTmFtZXM6OmxpKCkubG9jYWxOYW1lUHRyKCksICZsaV9nZXRzZXQpOworICAg
ICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpsaW5rKCkubG9jYWxOYW1lUHRy
KCksICZsaW5rX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFt
ZXM6Om1hcCgpLmxvY2FsTmFtZVB0cigpLCAmbWFwX2dldHNldCk7CisgICAgICAgIGdldFNldElu
Zm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Om1hcnF1ZWUoKS5sb2NhbE5hbWVQdHIoKSwgJm1hcnF1
ZWVfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6bWVu
dSgpLmxvY2FsTmFtZVB0cigpLCAmbWVudV9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGlj
dC5pbnNlcnQoSFRNTE5hbWVzOjptZXRhKCkubG9jYWxOYW1lUHRyKCksICZtZXRhX2dldHNldCk7
CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Om9iamVjdCgpLmxvY2Fs
TmFtZVB0cigpLCAmb2JqZWN0X2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2Vy
dChIVE1MTmFtZXM6Om9sKCkubG9jYWxOYW1lUHRyKCksICZvbF9nZXRzZXQpOworICAgICAgICBn
ZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpvcHRpb24oKS5sb2NhbE5hbWVQdHIoKSwg
Jm9wdGlvbl9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVz
OjpvcHRncm91cCgpLmxvY2FsTmFtZVB0cigpLCAmb3B0R3JvdXBfZ2V0c2V0KTsKKyAgICAgICAg
Z2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6cCgpLmxvY2FsTmFtZVB0cigpLCAmcF9n
ZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpwYXJhbSgp
LmxvY2FsTmFtZVB0cigpLCAmcGFyYW1fZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3Qu
aW5zZXJ0KEhUTUxOYW1lczo6cHJlKCkubG9jYWxOYW1lUHRyKCksICZwcmVfZ2V0c2V0KTsKKyAg
ICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6cSgpLmxvY2FsTmFtZVB0cigp
LCAmcV9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpz
Y3JpcHQoKS5sb2NhbE5hbWVQdHIoKSwgJnNjcmlwdF9nZXRzZXQpOworICAgICAgICBnZXRTZXRJ
bmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpzZWxlY3QoKS5sb2NhbE5hbWVQdHIoKSwgJnNlbGVj
dF9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpzdHls
ZSgpLmxvY2FsTmFtZVB0cigpLCAmc3R5bGVfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0Rp
Y3QuaW5zZXJ0KEhUTUxOYW1lczo6dGFibGUoKS5sb2NhbE5hbWVQdHIoKSwgJnRhYmxlX2dldHNl
dCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OnRib2R5KCkubG9j
YWxOYW1lUHRyKCksICZ0YWJsZXNlY3Rpb25fZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0Rp
Y3QuaW5zZXJ0KEhUTUxOYW1lczo6dGQoKS5sb2NhbE5hbWVQdHIoKSwgJnRhYmxlY2VsbF9nZXRz
ZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjp0ZXh0YXJlYSgp
LmxvY2FsTmFtZVB0cigpLCAmdGV4dEFyZWFfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0Rp
Y3QuaW5zZXJ0KEhUTUxOYW1lczo6dGgoKS5sb2NhbE5hbWVQdHIoKSwgJnRhYmxlY2VsbF9nZXRz
ZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjp0aGVhZCgpLmxv
Y2FsTmFtZVB0cigpLCAmdGFibGVzZWN0aW9uX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9E
aWN0Lmluc2VydChIVE1MTmFtZXM6OnRmb290KCkubG9jYWxOYW1lUHRyKCksICZ0YWJsZXNlY3Rp
b25fZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6dGl0
bGUoKS5sb2NhbE5hbWVQdHIoKSwgJnRpdGxlX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9E
aWN0Lmluc2VydChIVE1MTmFtZXM6OnRyKCkubG9jYWxOYW1lUHRyKCksICZ0cl9nZXRzZXQpOwor
ICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjp1bCgpLmxvY2FsTmFtZVB0
cigpLCAmdWxfZ2V0c2V0KTsKKyAgICB9CisgICAgCisgICAgSFRNTEVsZW1lbnRJbXBsKiBlbGVt
ZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBjb25zdCBI
VE1MRWxlbWVudDo6R2V0U2V0SW5mbyogcmVzdWx0ID0gZ2V0U2V0SW5mb0RpY3QuZmluZChlbGVt
ZW50LT5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpKTsKKyAgICBpZiAocmVzdWx0KQorICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiAwOworfQorCiAvKgogQGJlZ2luIEhUTUxF
bGVtZW50VGFibGUgMTQKICAgaWQJCUtKUzo6SFRNTEVsZW1lbnQ6OkVsZW1lbnRJZAlEb250RGVs
ZXRlCkBAIC0xMTg4LDM1ICsxMjcyLDMyIEBAIEhUTUxFbGVtZW50OjpIVE1MRWxlbWVudChFeGVj
U3RhdGUgKmV4ZWMKIAogVmFsdWUgS0pTOjpIVE1MRWxlbWVudDo6dHJ5R2V0KEV4ZWNTdGF0ZSAq
ZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lKSBjb25zdAogewotICBIVE1MRWxl
bWVudEltcGwgJmVsZW1lbnQgPSAqc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KGltcGwo
KSk7CisgICAgSFRNTEVsZW1lbnRJbXBsICZlbGVtZW50ID0gKnN0YXRpY19jYXN0PEhUTUxFbGVt
ZW50SW1wbCAqPihpbXBsKCkpOwogI2lmZGVmIEtKU19WRVJCT1NFCi0gIGtkRGVidWcoNjA3MCkg
PDwgIktKUzo6SFRNTEVsZW1lbnQ6OnRyeUdldCAiIDw8IHByb3BlcnR5TmFtZS5xc3RyaW5nKCkg
PDwgIiB0aGlzVGFnPSIgPDwgZWxlbWVudC50YWdOYW1lKCkuc3RyaW5nKCkgPDwgZW5kbDsKKyAg
ICBrZERlYnVnKDYwNzApIDw8ICJLSlM6OkhUTUxFbGVtZW50Ojp0cnlHZXQgIiA8PCBwcm9wZXJ0
eU5hbWUucXN0cmluZygpIDw8ICIgdGhpc1RhZz0iIDw8IGVsZW1lbnQudGFnTmFtZSgpLnN0cmlu
ZygpIDw8IGVuZGw7CiAjZW5kaWYKLSAgLy8gRmlyc3QgbG9vayBhdCBkeW5hbWljIHByb3BlcnRp
ZXMKLSAgc3dpdGNoIChlbGVtZW50LmlkKCkpIHsKLSAgICBjYXNlIElEX0ZPUk06IHsKLSAgICAg
IEhUTUxGb3JtRWxlbWVudEltcGwgJmZvcm0gPSBzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnRJ
bXBsICY+KGVsZW1lbnQpOwotICAgICAgLy8gQ2hlY2sgaWYgd2UncmUgcmV0cmlldmluZyBhbiBl
bGVtZW50IChieSBpbmRleCBvciBieSBuYW1lKQotICAgICAgYm9vbCBvazsKLSAgICAgIHVpbnQg
dSA9IHByb3BlcnR5TmFtZS50b1VMb25nKCZvayk7Ci0gICAgICBpZiAob2spCi0gICAgICAgIHJl
dHVybiBnZXRET01Ob2RlKGV4ZWMsIGZvcm0uZWxlbWVudHMoKS0+aXRlbSh1KSk7Ci0gICAgICBW
YWx1ZUltcCAqbmFtZWRJdGVtcyA9IEhUTUxDb2xsZWN0aW9uKGV4ZWMsIGZvcm0uZWxlbWVudHMo
KS5nZXQoKSkuZ2V0TmFtZWRJdGVtcyhleGVjLCBwcm9wZXJ0eU5hbWUpOwotICAgICAgaWYgKCFu
YW1lZEl0ZW1zLT5pc1VuZGVmaW5lZCgpKQotICAgICAgICByZXR1cm4gbmFtZWRJdGVtczsKLSAg
ICB9Ci0gICAgICBicmVhazsKLSAgICBjYXNlIElEX1NFTEVDVDogewotICAgICAgSFRNTFNlbGVj
dEVsZW1lbnRJbXBsICZzZWxlY3QgPSBzdGF0aWNfY2FzdDxIVE1MU2VsZWN0RWxlbWVudEltcGwg
Jj4oZWxlbWVudCk7Ci0gICAgICBib29sIG9rOwotICAgICAgdWludCB1ID0gcHJvcGVydHlOYW1l
LnRvVUxvbmcoJm9rKTsKLSAgICAgIGlmIChvaykKLSAgICAgICAgcmV0dXJuIGdldERPTU5vZGUo
ZXhlYywgc2VsZWN0Lm9wdGlvbnNIVE1MQ29sbGVjdGlvbigpLT5pdGVtKHUpKTsgLy8gbm90IHNw
ZWNpZmllZCBieSBET00oPykgYnV0IHN1cHBvcnRlZCBpbiBuZXRzY2FwZS9JRQorICAgIC8vIEZp
cnN0IGxvb2sgYXQgZHluYW1pYyBwcm9wZXJ0aWVzCisgICAgaWYgKGVsZW1lbnQuaGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6Zm9ybSgpKSkgeworICAgICAgICBIVE1MRm9ybUVsZW1lbnRJbXBsICZm
b3JtID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICAg
ICAgLy8gQ2hlY2sgaWYgd2UncmUgcmV0cmlldmluZyBhbiBlbGVtZW50IChieSBpbmRleCBvciBi
eSBuYW1lKQorICAgICAgICBib29sIG9rOworICAgICAgICB1aW50IHUgPSBwcm9wZXJ0eU5hbWUu
dG9VTG9uZygmb2spOworICAgICAgICBpZiAob2spCisgICAgICAgICAgICByZXR1cm4gZ2V0RE9N
Tm9kZShleGVjLCBmb3JtLmVsZW1lbnRzKCktPml0ZW0odSkpOworICAgICAgICBWYWx1ZUltcCAq
bmFtZWRJdGVtcyA9IEhUTUxDb2xsZWN0aW9uKGV4ZWMsIGZvcm0uZWxlbWVudHMoKS5nZXQoKSku
Z2V0TmFtZWRJdGVtcyhleGVjLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICBpZiAoIW5hbWVkSXRl
bXMtPmlzVW5kZWZpbmVkKCkpCisgICAgICAgICAgICByZXR1cm4gbmFtZWRJdGVtczsKKyAgICB9
CisgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpzZWxlY3QoKSkp
IHsKKyAgICAgICAgSFRNTFNlbGVjdEVsZW1lbnRJbXBsICZzZWxlY3QgPSBzdGF0aWNfY2FzdDxI
VE1MU2VsZWN0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgICAgIGJvb2wgb2s7CisgICAg
ICAgIHVpbnQgdSA9IHByb3BlcnR5TmFtZS50b1VMb25nKCZvayk7CisgICAgICAgIGlmIChvaykK
KyAgICAgICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsIHNlbGVjdC5vcHRpb25zSFRNTENv
bGxlY3Rpb24oKS0+aXRlbSh1KSk7IC8vIG5vdCBzcGVjaWZpZWQgYnkgRE9NKD8pIGJ1dCBzdXBw
b3J0ZWQgaW4gbmV0c2NhcGUvSUUKICAgICB9Ci0gICAgICBicmVhazsKLSAgICBjYXNlIElEX0ZS
QU1FU0VUOiB7CisgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpm
cmFtZXNldCgpKSkgewogICAgICAgICBOb2RlSW1wbCAqZnJhbWUgPSBlbGVtZW50LmNoaWxkcmVu
KCktPm5hbWVkSXRlbShwcm9wZXJ0eU5hbWUuc3RyaW5nKCkpOwotICAgICAgICBpZiAoZnJhbWUg
JiYgZnJhbWUtPmlkKCkgPT0gSURfRlJBTUUpIHsKKyAgICAgICAgaWYgKGZyYW1lICYmIGZyYW1l
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZnJhbWUoKSkpIHsKICAgICAgICAgICAgIERvY3VtZW50
SW1wbCogZG9jID0gc3RhdGljX2Nhc3Q8SFRNTEZyYW1lRWxlbWVudEltcGwgKj4oZnJhbWUpLT5j
b250ZW50RG9jdW1lbnQoKTsKICAgICAgICAgICAgIGlmIChkb2MpIHsKICAgICAgICAgICAgICAg
ICBLSFRNTFBhcnQqIHBhcnQgPSBkb2MtPnBhcnQoKTsKQEAgLTEyMjksNzMgKzEzMTAsNTcgQEAg
VmFsdWUgS0pTOjpIVE1MRWxlbWVudDo6dHJ5R2V0KEV4ZWNTdGF0ZQogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIElEX0ZSQU1FOgotICAg
IGNhc2UgSURfSUZSQU1FOiB7CisgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNMb2NhbE5hbWUoSFRN
TE5hbWVzOjpmcmFtZSgpKSB8fCBlbGVtZW50Lmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmlmcmFt
ZSgpKSkgewogICAgICAgICBEb2N1bWVudEltcGwqIGRvYyA9IHN0YXRpY19jYXN0PEhUTUxGcmFt
ZUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpLmNvbnRlbnREb2N1bWVudCgpOwotICAgICAgICBpZiAo
IGRvYyApIHsKKyAgICAgICAgaWYgKGRvYykgewogICAgICAgICAgICAgS0hUTUxQYXJ0KiBwYXJ0
ID0gZG9jLT5wYXJ0KCk7Ci0gICAgICAgICAgICBpZiAoIHBhcnQgKSB7CisgICAgICAgICAgICBp
ZiAocGFydCkgewogICAgICAgICAgICAgICBXaW5kb3cgKndpbmRvdyA9IFdpbmRvdzo6cmV0cmll
dmVXaW5kb3cocGFydCk7CiAJICAgICAgaWYgKHdpbmRvdyAmJiB3aW5kb3ctPmhhc1Byb3BlcnR5
KGV4ZWMsIHByb3BlcnR5TmFtZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy0+Z2V0
KGV4ZWMsIHByb3BlcnR5TmFtZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0g
ICAgICBicmVhazsKICNpZiBBUFBMRV9DSEFOR0VTCi0gICAgY2FzZSBJRF9FTUJFRDoKLSAgICBj
YXNlIElEX09CSkVDVDoKLSAgICBjYXNlIElEX0FQUExFVDogewotCWlmIChwcm9wZXJ0eU5hbWUg
PT0gIl9fYXBwbGVfcnVudGltZV9vYmplY3QiKSB7CisgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNM
b2NhbE5hbWUoSFRNTE5hbWVzOjplbWJlZCgpKSB8fCBlbGVtZW50Lmhhc0xvY2FsTmFtZShIVE1M
TmFtZXM6Om9iamVjdCgpKSB8fAorICAgICAgICAgICAgIGVsZW1lbnQuaGFzTG9jYWxOYW1lKEhU
TUxOYW1lczo6YXBwbGV0KCkpKSB7CisJaWYgKHByb3BlcnR5TmFtZSA9PSAiX19hcHBsZV9ydW50
aW1lX29iamVjdCIpCiAJICAgIHJldHVybiBnZXRSdW50aW1lT2JqZWN0KGV4ZWMsJmVsZW1lbnQp
OwotCX0KLQogCVZhbHVlIHJ1bnRpbWVPYmplY3QgPSBnZXRSdW50aW1lT2JqZWN0KGV4ZWMsJmVs
ZW1lbnQpOwogCWlmICghcnVudGltZU9iamVjdC5pc051bGwoKSkgewogCSAgICBPYmplY3RJbXAg
KmltcCA9IHN0YXRpY19jYXN0PE9iamVjdEltcCAqPihydW50aW1lT2JqZWN0LmltcCgpKTsKLQkg
ICAgaWYgKGltcC0+aGFzUHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lKSkgeworCSAgICBpZiAo
aW1wLT5oYXNQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUpKQogCQlyZXR1cm4gaW1wLT5nZXQg
KGV4ZWMsIHByb3BlcnR5TmFtZSk7Ci0JICAgIH0KIAl9CiAgICAgfQotICAgICAgYnJlYWs7CiAj
ZW5kaWYKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9CiAKLSAgY29uc3QgSGFz
aFRhYmxlKiB0YWJsZSA9IGNsYXNzSW5mbygpLT5wcm9wSGFzaFRhYmxlOyAvLyBnZXQgdGhlIHJp
Z2h0IGhhc2h0YWJsZQotICBjb25zdCBIYXNoRW50cnkqIGVudHJ5ID0gTG9va3VwOjpmaW5kRW50
cnkodGFibGUsIHByb3BlcnR5TmFtZSk7Ci0gIGlmIChlbnRyeSkgewotICAgIGlmIChlbnRyeS0+
YXR0ciAmIEZ1bmN0aW9uKQotICAgICAgcmV0dXJuIGxvb2t1cE9yQ3JlYXRlRnVuY3Rpb248S0pT
OjpIVE1MRWxlbWVudEZ1bmN0aW9uPihleGVjLCBwcm9wZXJ0eU5hbWUsIHRoaXMsIGVudHJ5LT52
YWx1ZSwgZW50cnktPnBhcmFtcywgZW50cnktPmF0dHIpOwotICAgIHJldHVybiBnZXRWYWx1ZVBy
b3BlcnR5KGV4ZWMsIGVudHJ5LT52YWx1ZSk7Ci0gIH0KKyAgICBjb25zdCBIYXNoVGFibGUqIHRh
YmxlID0gY2xhc3NJbmZvKCktPnByb3BIYXNoVGFibGU7IC8vIGdldCB0aGUgcmlnaHQgaGFzaHRh
YmxlCisgICAgY29uc3QgSGFzaEVudHJ5KiBlbnRyeSA9IExvb2t1cDo6ZmluZEVudHJ5KHRhYmxl
LCBwcm9wZXJ0eU5hbWUpOworICAgIGlmIChlbnRyeSkgeworICAgICAgICBpZiAoZW50cnktPmF0
dHIgJiBGdW5jdGlvbikKKyAgICAgICAgICAgIHJldHVybiBsb29rdXBPckNyZWF0ZUZ1bmN0aW9u
PEtKUzo6SFRNTEVsZW1lbnRGdW5jdGlvbj4oZXhlYywgcHJvcGVydHlOYW1lLCB0aGlzLCBlbnRy
eS0+dmFsdWUsIGVudHJ5LT5wYXJhbXMsIGVudHJ5LT5hdHRyKTsKKyAgICAgICAgcmV0dXJuIGdl
dFZhbHVlUHJvcGVydHkoZXhlYywgZW50cnktPnZhbHVlKTsKKyAgICB9CiAKLSAgLy8gQmFzZSBI
VE1MRWxlbWVudCBzdHVmZiBvciBwYXJlbnQgY2xhc3MgZm9yd2FyZCwgYXMgdXN1YWwKLSAgcmV0
dXJuIERPTU9iamVjdExvb2t1cEdldDxLSlM6OkhUTUxFbGVtZW50RnVuY3Rpb24sIEtKUzo6SFRN
TEVsZW1lbnQsIERPTUVsZW1lbnQ+KGV4ZWMsIHByb3BlcnR5TmFtZSwgJkhUTUxFbGVtZW50VGFi
bGUsIHRoaXMpOworICAgIC8vIEJhc2UgSFRNTEVsZW1lbnQgc3R1ZmYgb3IgcGFyZW50IGNsYXNz
IGZvcndhcmQsIGFzIHVzdWFsCisgICAgcmV0dXJuIERPTU9iamVjdExvb2t1cEdldDxLSlM6OkhU
TUxFbGVtZW50RnVuY3Rpb24sIEtKUzo6SFRNTEVsZW1lbnQsIERPTUVsZW1lbnQ+KGV4ZWMsIHBy
b3BlcnR5TmFtZSwgJkhUTUxFbGVtZW50VGFibGUsIHRoaXMpOwogfQogCiBib29sIEtKUzo6SFRN
TEVsZW1lbnQ6OmltcGxlbWVudHNDYWxsKCkgY29uc3QKIHsKICAgICBIVE1MRWxlbWVudEltcGwg
KmVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwgKj4oaW1wbCgpKTsKLSAgICBz
d2l0Y2ggKGVsZW1lbnQtPmlkKCkpIHsKLQljYXNlIElEX0VNQkVEOgotCWNhc2UgSURfT0JKRUNU
OgotCWNhc2UgSURfQVBQTEVUOiB7Ci0JCURvY3VtZW50SW1wbCogZG9jID0gZWxlbWVudC0+Z2V0
RG9jdW1lbnQoKTsKLQkJS0pTUHJveHkgKnByb3h5ID0gS0pTUHJveHk6OnByb3h5KGRvYy0+cGFy
dCgpKTsKLQkJRXhlY1N0YXRlICpleGVjID0gcHJveHktPmludGVycHJldGVyKCktPmdsb2JhbEV4
ZWMoKTsKLQkJVmFsdWUgcnVudGltZU9iamVjdCA9IGdldFJ1bnRpbWVPYmplY3QoZXhlYyxlbGVt
ZW50KTsKLQkJaWYgKCFydW50aW1lT2JqZWN0LmlzTnVsbCgpKSB7Ci0JCSAgICBPYmplY3RJbXAg
KmltcCA9IHN0YXRpY19jYXN0PE9iamVjdEltcCAqPihydW50aW1lT2JqZWN0LmltcCgpKTsKLQkJ
ICAgIHJldHVybiBpbXAtPmltcGxlbWVudHNDYWxsICgpOwotCQl9Ci0JICAgIH0KLQkgICAgYnJl
YWs7Ci0JZGVmYXVsdDoKLQkgICAgYnJlYWs7CisgICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjplbWJlZCgpKSB8fAorICAgICAgICBlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6b2JqZWN0KCkpIHx8CisgICAgICAgIGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjphcHBsZXQoKSkpIHsKKyAgIAlEb2N1bWVudEltcGwqIGRvYyA9IGVsZW1lbnQtPmdldERvY3Vt
ZW50KCk7CisgICAgICAgIEtKU1Byb3h5ICpwcm94eSA9IEtKU1Byb3h5Ojpwcm94eShkb2MtPnBh
cnQoKSk7CisgICAgICAgIEV4ZWNTdGF0ZSAqZXhlYyA9IHByb3h5LT5pbnRlcnByZXRlcigpLT5n
bG9iYWxFeGVjKCk7CisgICAgICAgIFZhbHVlIHJ1bnRpbWVPYmplY3QgPSBnZXRSdW50aW1lT2Jq
ZWN0KGV4ZWMsZWxlbWVudCk7CisgICAgICAgIGlmICghcnVudGltZU9iamVjdC5pc051bGwoKSkg
eworICAgICAgICAgICAgT2JqZWN0SW1wICppbXAgPSBzdGF0aWNfY2FzdDxPYmplY3RJbXAgKj4o
cnVudGltZU9iamVjdC5pbXAoKSk7CisgICAgICAgICAgICByZXR1cm4gaW1wLT5pbXBsZW1lbnRz
Q2FsbCAoKTsKKyAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CiB9CkBAIC0xMzAz
LDc4NiArMTM2OCw4NzcgQEAgYm9vbCBLSlM6OkhUTUxFbGVtZW50OjppbXBsZW1lbnRzQ2FsbCgp
IAogVmFsdWUgS0pTOjpIVE1MRWxlbWVudDo6Y2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAm
dGhpc09iaiwgY29uc3QgTGlzdCZhcmdzKQogewogICAgIEhUTUxFbGVtZW50SW1wbCAqZWxlbWVu
dCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCAqPihpbXBsKCkpOwotICAgIHN3aXRjaCAo
ZWxlbWVudC0+aWQoKSkgewotCWNhc2UgSURfRU1CRUQ6Ci0JY2FzZSBJRF9PQkpFQ1Q6Ci0JY2Fz
ZSBJRF9BUFBMRVQ6IHsKLQkJVmFsdWUgcnVudGltZU9iamVjdCA9IGdldFJ1bnRpbWVPYmplY3Qo
ZXhlYyxlbGVtZW50KTsKLQkJaWYgKCFydW50aW1lT2JqZWN0LmlzTnVsbCgpKSB7Ci0JCSAgICBP
YmplY3RJbXAgKmltcCA9IHN0YXRpY19jYXN0PE9iamVjdEltcCAqPihydW50aW1lT2JqZWN0Lmlt
cCgpKTsKLQkJICAgIHJldHVybiBpbXAtPmNhbGwgKGV4ZWMsIHRoaXNPYmosIGFyZ3MpOwotCQl9
Ci0JICAgIH0KLQkgICAgYnJlYWs7Ci0JZGVmYXVsdDoKLQkgICAgYnJlYWs7CisgICAgaWYgKGVs
ZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjplbWJlZCgpKSB8fAorICAgICAgICBlbGVtZW50
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b2JqZWN0KCkpIHx8CisgICAgICAgIGVsZW1lbnQtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjphcHBsZXQoKSkpIHsKKyAgICAgICAgVmFsdWUgcnVudGltZU9i
amVjdCA9IGdldFJ1bnRpbWVPYmplY3QoZXhlYyxlbGVtZW50KTsKKyAgICAgICAgaWYgKCFydW50
aW1lT2JqZWN0LmlzTnVsbCgpKSB7CisgICAgICAgICAgICBPYmplY3RJbXAgKmltcCA9IHN0YXRp
Y19jYXN0PE9iamVjdEltcCAqPihydW50aW1lT2JqZWN0LmltcCgpKTsKKyAgICAgICAgICAgIHJl
dHVybiBpbXAtPmNhbGwgKGV4ZWMsIHRoaXNPYmosIGFyZ3MpOworICAgICAgICB9CiAgICAgfQog
ICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotVmFsdWUgS0pTOjpIVE1MRWxlbWVudDo6Z2V0
VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKLXsKLSAgSFRN
TEVsZW1lbnRJbXBsICZlbGVtZW50ID0gKnN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCAqPihp
bXBsKCkpOwotICBzd2l0Y2ggKGVsZW1lbnQuaWQoKSkgewotICBjYXNlIElEX0hUTUw6IHsKLSAg
ICBIVE1MSHRtbEVsZW1lbnRJbXBsICZodG1sID0gc3RhdGljX2Nhc3Q8SFRNTEh0bWxFbGVtZW50
SW1wbCAmPihlbGVtZW50KTsKLSAgICBpZiAgICAgICh0b2tlbiA9PSBIdG1sVmVyc2lvbikgICAg
ICAgICByZXR1cm4gU3RyaW5nKGh0bWwudmVyc2lvbigpKTsKLSAgfQotICBicmVhazsKLSAgY2Fz
ZSBJRF9IRUFEOiB7Ci0gICAgSFRNTEhlYWRFbGVtZW50SW1wbCAmaGVhZCA9IHN0YXRpY19jYXN0
PEhUTUxIZWFkRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgaWYgICAgICAodG9rZW4gPT0g
SGVhZFByb2ZpbGUpICAgICAgICAgcmV0dXJuIFN0cmluZyhoZWFkLnByb2ZpbGUoKSk7Ci0gIH0K
LSAgYnJlYWs7Ci0gIGNhc2UgSURfTElOSzogewotICAgIEhUTUxMaW5rRWxlbWVudEltcGwgJmxp
bmsgPSBzdGF0aWNfY2FzdDxIVE1MTGlua0VsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgIHN3
aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIExpbmtEaXNhYmxlZDogICAgICAgIHJldHVybiBCb29s
ZWFuKGxpbmsuZGlzYWJsZWQoKSk7Ci0gICAgY2FzZSBMaW5rQ2hhcnNldDogICAgICAgICByZXR1
cm4gU3RyaW5nKGxpbmsuY2hhcnNldCgpKTsKLSAgICBjYXNlIExpbmtIcmVmOiAgICAgICAgICAg
IHJldHVybiBTdHJpbmcobGluay5ocmVmKCkpOwotICAgIGNhc2UgTGlua0hyZWZMYW5nOiAgICAg
ICAgcmV0dXJuIFN0cmluZyhsaW5rLmhyZWZsYW5nKCkpOwotICAgIGNhc2UgTGlua01lZGlhOiAg
ICAgICAgICAgcmV0dXJuIFN0cmluZyhsaW5rLm1lZGlhKCkpOwotICAgIGNhc2UgTGlua1JlbDog
ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhsaW5rLnJlbCgpKTsKLSAgICBjYXNlIExpbmtSZXY6
ICAgICAgICAgICAgIHJldHVybiBTdHJpbmcobGluay5yZXYoKSk7Ci0gICAgY2FzZSBMaW5rVGFy
Z2V0OiAgICAgICAgICByZXR1cm4gU3RyaW5nKGxpbmsudGFyZ2V0KCkpOwotICAgIGNhc2UgTGlu
a1R5cGU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhsaW5rLnR5cGUoKSk7Ci0gICAgY2FzZSBM
aW5rU2hlZXQ6ICAgICAgICAgICByZXR1cm4gZ2V0RE9NU3R5bGVTaGVldChleGVjLCBsaW5rLnNo
ZWV0KCkpOwotICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9USVRMRTogewotICAgIEhU
TUxUaXRsZUVsZW1lbnRJbXBsICZ0aXRsZSA9IHN0YXRpY19jYXN0PEhUTUxUaXRsZUVsZW1lbnRJ
bXBsICY+KGVsZW1lbnQpOwotICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIFRpdGxlVGV4
dDogICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcodGl0bGUudGV4dCgpKTsKLSAgICB9Ci0g
IH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfTUVUQTogewotICAgIEhUTUxNZXRhRWxlbWVudEltcGwg
Jm1ldGEgPSBzdGF0aWNfY2FzdDxIVE1MTWV0YUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAg
IHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIE1ldGFDb250ZW50OiAgICAgICAgIHJldHVybiBT
dHJpbmcobWV0YS5jb250ZW50KCkpOwotICAgIGNhc2UgTWV0YUh0dHBFcXVpdjogICAgICAgcmV0
dXJuIFN0cmluZyhtZXRhLmh0dHBFcXVpdigpKTsKLSAgICBjYXNlIE1ldGFOYW1lOiAgICAgICAg
ICAgIHJldHVybiBTdHJpbmcobWV0YS5uYW1lKCkpOwotICAgIGNhc2UgTWV0YVNjaGVtZTogICAg
ICAgICAgcmV0dXJuIFN0cmluZyhtZXRhLnNjaGVtZSgpKTsKLSAgICB9Ci0gIH0KLSAgYnJlYWs7
Ci0gIGNhc2UgSURfQkFTRTogewotICAgIEhUTUxCYXNlRWxlbWVudEltcGwgJmJhc2UgPSBzdGF0
aWNfY2FzdDxIVE1MQmFzZUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgIHN3aXRjaCAodG9r
ZW4pIHsKLSAgICBjYXNlIEJhc2VIcmVmOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYmFzZS5o
cmVmKCkpOwotICAgIGNhc2UgQmFzZVRhcmdldDogICAgICAgICAgcmV0dXJuIFN0cmluZyhiYXNl
LnRhcmdldCgpKTsKLSAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfSVNJTkRFWDogewot
ICAgIEhUTUxJc0luZGV4RWxlbWVudEltcGwgJmlzaW5kZXggPSBzdGF0aWNfY2FzdDxIVE1MSXNJ
bmRleEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBj
YXNlIElzSW5kZXhGb3JtOiAgICAgICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsIGlzaW5k
ZXguZm9ybSgpKTsgLy8gdHlwZSBIVE1MRm9ybUVsZW1lbnQKLSAgICBjYXNlIElzSW5kZXhQcm9t
cHQ6ICAgICAgICAgIHJldHVybiBTdHJpbmcoaXNpbmRleC5wcm9tcHQoKSk7Ci0gICAgfQotICB9
Ci0gIGJyZWFrOwotICBjYXNlIElEX1NUWUxFOiB7Ci0gICAgSFRNTFN0eWxlRWxlbWVudEltcGwg
JnN0eWxlID0gc3RhdGljX2Nhc3Q8SFRNTFN0eWxlRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0g
ICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgU3R5bGVEaXNhYmxlZDogICAgICAgIHJldHVy
biBCb29sZWFuKHN0eWxlLmRpc2FibGVkKCkpOwotICAgIGNhc2UgU3R5bGVNZWRpYTogICAgICAg
ICAgIHJldHVybiBTdHJpbmcoc3R5bGUubWVkaWEoKSk7Ci0gICAgY2FzZSBTdHlsZVR5cGU6ICAg
ICAgICAgICAgcmV0dXJuIFN0cmluZyhzdHlsZS50eXBlKCkpOwotICAgIGNhc2UgU3R5bGVTaGVl
dDogICAgICAgICAgIHJldHVybiBnZXRET01TdHlsZVNoZWV0KGV4ZWMsIHN0eWxlLnNoZWV0KCkp
OwotICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9CT0RZOiB7Ci0gICAgSFRNTEJvZHlF
bGVtZW50SW1wbCAmYm9keSA9IHN0YXRpY19jYXN0PEhUTUxCb2R5RWxlbWVudEltcGwgJj4oZWxl
bWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgQm9keUFMaW5rOiAgICAgICAg
ICAgcmV0dXJuIFN0cmluZyhib2R5LmFMaW5rKCkpOwotICAgIGNhc2UgQm9keUJhY2tncm91bmQ6
ICAgICAgcmV0dXJuIFN0cmluZyhib2R5LmJhY2tncm91bmQoKSk7Ci0gICAgY2FzZSBCb2R5QmdD
b2xvcjogICAgICAgICByZXR1cm4gU3RyaW5nKGJvZHkuYmdDb2xvcigpKTsKLSAgICBjYXNlIEJv
ZHlMaW5rOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYm9keS5saW5rKCkpOwotICAgIGNhc2Ug
Qm9keVRleHQ6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhib2R5LnRleHQoKSk7Ci0gICAgY2Fz
ZSBCb2R5Vkxpbms6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGJvZHkudkxpbmsoKSk7Ci0gICAg
ZGVmYXVsdDoKLSAgICAgIC8vIFVwZGF0ZSB0aGUgZG9jdW1lbnQncyBsYXlvdXQgYmVmb3JlIHdl
IGNvbXB1dGUgdGhlc2UgYXR0cmlidXRlcy4KLSAgICAgIERvY3VtZW50SW1wbCAqZG9jID0gYm9k
eS5nZXREb2N1bWVudCgpOwotICAgICAgaWYgKGRvYykKLSAgICAgICAgZG9jLT51cGRhdGVMYXlv
dXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKLSAgICAgIEtIVE1MVmlldyAqdmlldyA9IGRv
YyA/IGRvYy0+dmlldygpIDogMDsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgICAgY2Fz
ZSBCb2R5U2Nyb2xsTGVmdDoKLSAgICAgICAgICAgIHJldHVybiBOdW1iZXIodmlldyA/IHZpZXct
PmNvbnRlbnRzWCgpIDogMCk7Ci0gICAgICAgIGNhc2UgQm9keVNjcm9sbFRvcDoKLSAgICAgICAg
ICAgIHJldHVybiBOdW1iZXIodmlldyA/IHZpZXctPmNvbnRlbnRzWSgpIDogMCk7Ci0gICAgICAg
IGNhc2UgQm9keVNjcm9sbEhlaWdodDogICByZXR1cm4gTnVtYmVyKHZpZXcgPyB2aWV3LT5jb250
ZW50c0hlaWdodCgpIDogMCk7Ci0gICAgICAgIGNhc2UgQm9keVNjcm9sbFdpZHRoOiAgICByZXR1
cm4gTnVtYmVyKHZpZXcgPyB2aWV3LT5jb250ZW50c1dpZHRoKCkgOiAwKTsKLSAgICAgIH0KLSAg
ICB9Ci0gIH0KLSAgYnJlYWs7CitWYWx1ZSBIVE1MRWxlbWVudDo6aHRtbEdldHRlcihFeGVjU3Rh
dGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MSHRtbEVsZW1lbnRJbXBsJiBo
dG1sID0gKnN0YXRpY19jYXN0PEhUTUxIdG1sRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIGlm
ICh0b2tlbiA9PSBIdG1sVmVyc2lvbikKKyAgICAgICAgcmV0dXJuIFN0cmluZyhodG1sLnZlcnNp
b24oKSk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQogCi0gIGNhc2UgSURfRk9STTogewot
ICAgIEhUTUxGb3JtRWxlbWVudEltcGwgJmZvcm0gPSBzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1l
bnRJbXBsICY+KGVsZW1lbnQpOwotICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIEZvcm1F
bGVtZW50czogICAgICAgIHJldHVybiBnZXRIVE1MQ29sbGVjdGlvbihleGVjLCBmb3JtLmVsZW1l
bnRzKCkuZ2V0KCkpOwotICAgIGNhc2UgRm9ybUxlbmd0aDogICAgICAgICAgcmV0dXJuIE51bWJl
cihmb3JtLmxlbmd0aCgpKTsKLSAgICBjYXNlIEZvcm1OYW1lOiAgICAgICAgICAgIHJldHVybiBT
dHJpbmcoZm9ybS5uYW1lKCkpOwotICAgIGNhc2UgRm9ybUFjY2VwdENoYXJzZXQ6ICAgcmV0dXJu
IFN0cmluZyhmb3JtLmFjY2VwdENoYXJzZXQoKSk7Ci0gICAgY2FzZSBGb3JtQWN0aW9uOiAgICAg
ICAgICByZXR1cm4gU3RyaW5nKGZvcm0uYWN0aW9uKCkpOwotICAgIGNhc2UgRm9ybUVuY1R5cGU6
ICAgICAgICAgcmV0dXJuIFN0cmluZyhmb3JtLmVuY3R5cGUoKSk7Ci0gICAgY2FzZSBGb3JtTWV0
aG9kOiAgICAgICAgICByZXR1cm4gU3RyaW5nKGZvcm0ubWV0aG9kKCkpOwotICAgIGNhc2UgRm9y
bVRhcmdldDogICAgICAgICAgcmV0dXJuIFN0cmluZyhmb3JtLnRhcmdldCgpKTsKLSAgICB9Ci0g
IH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfU0VMRUNUOiB7Ci0gICAgSFRNTFNlbGVjdEVsZW1lbnRJ
bXBsICZzZWxlY3QgPSBzdGF0aWNfY2FzdDxIVE1MU2VsZWN0RWxlbWVudEltcGwgJj4oZWxlbWVu
dCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgU2VsZWN0VHlwZTogICAgICAgICAg
ICByZXR1cm4gU3RyaW5nKHNlbGVjdC50eXBlKCkpOwotICAgIGNhc2UgU2VsZWN0U2VsZWN0ZWRJ
bmRleDogICByZXR1cm4gTnVtYmVyKHNlbGVjdC5zZWxlY3RlZEluZGV4KCkpOwotICAgIGNhc2Ug
U2VsZWN0VmFsdWU6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHNlbGVjdC52YWx1ZSgpKTsKLSAg
ICBjYXNlIFNlbGVjdExlbmd0aDogICAgICAgICAgcmV0dXJuIE51bWJlcihzZWxlY3QubGVuZ3Ro
KCkpOwotICAgIGNhc2UgU2VsZWN0Rm9ybTogICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShl
eGVjLCBzZWxlY3QuZm9ybSgpKTsgLy8gdHlwZSBIVE1MRm9ybUVsZW1lbnQKLSAgICBjYXNlIFNl
bGVjdE9wdGlvbnM6ICAgICAgICAgcmV0dXJuIGdldFNlbGVjdEhUTUxDb2xsZWN0aW9uKGV4ZWMs
IHNlbGVjdC5vcHRpb25zSFRNTENvbGxlY3Rpb24oKS5nZXQoKSwgJnNlbGVjdCk7IC8vIHR5cGUg
SFRNTENvbGxlY3Rpb24KLSAgICBjYXNlIFNlbGVjdERpc2FibGVkOiAgICAgICAgcmV0dXJuIEJv
b2xlYW4oc2VsZWN0LmRpc2FibGVkKCkpOwotICAgIGNhc2UgU2VsZWN0TXVsdGlwbGU6ICAgICAg
ICByZXR1cm4gQm9vbGVhbihzZWxlY3QubXVsdGlwbGUoKSk7Ci0gICAgY2FzZSBTZWxlY3ROYW1l
OiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoc2VsZWN0Lm5hbWUoKSk7Ci0gICAgY2FzZSBTZWxl
Y3RTaXplOiAgICAgICAgICAgIHJldHVybiBOdW1iZXIoc2VsZWN0LnNpemUoKSk7Ci0gICAgY2Fz
ZSBTZWxlY3RUYWJJbmRleDogICAgICAgIHJldHVybiBOdW1iZXIoc2VsZWN0LnRhYkluZGV4KCkp
OwotICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9PUFRHUk9VUDogewotICAgIEhUTUxP
cHRHcm91cEVsZW1lbnRJbXBsICZvcHRncm91cCA9IHN0YXRpY19jYXN0PEhUTUxPcHRHcm91cEVs
ZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIE9w
dEdyb3VwRGlzYWJsZWQ6ICAgICAgICByZXR1cm4gQm9vbGVhbihvcHRncm91cC5kaXNhYmxlZCgp
KTsKLSAgICBjYXNlIE9wdEdyb3VwTGFiZWw6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKG9wdGdy
b3VwLmxhYmVsKCkpOwotICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9PUFRJT046IHsK
LSAgICBIVE1MT3B0aW9uRWxlbWVudEltcGwgJm9wdGlvbiA9IHN0YXRpY19jYXN0PEhUTUxPcHRp
b25FbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2Fz
ZSBPcHRpb25Gb3JtOiAgICAgICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsb3B0aW9uLmZv
cm0oKSk7IC8vIHR5cGUgSFRNTEZvcm1FbGVtZW50Ci0gICAgY2FzZSBPcHRpb25EZWZhdWx0U2Vs
ZWN0ZWQ6IHJldHVybiBCb29sZWFuKG9wdGlvbi5kZWZhdWx0U2VsZWN0ZWQoKSk7Ci0gICAgY2Fz
ZSBPcHRpb25UZXh0OiAgICAgICAgICAgIHJldHVybiBTdHJpbmcob3B0aW9uLnRleHQoKSk7Ci0g
ICAgY2FzZSBPcHRpb25JbmRleDogICAgICAgICAgIHJldHVybiBOdW1iZXIob3B0aW9uLmluZGV4
KCkpOwotICAgIGNhc2UgT3B0aW9uRGlzYWJsZWQ6ICAgICAgICByZXR1cm4gQm9vbGVhbihvcHRp
b24uZGlzYWJsZWQoKSk7Ci0gICAgY2FzZSBPcHRpb25MYWJlbDogICAgICAgICAgIHJldHVybiBT
dHJpbmcob3B0aW9uLmxhYmVsKCkpOwotICAgIGNhc2UgT3B0aW9uU2VsZWN0ZWQ6ICAgICAgICBy
ZXR1cm4gQm9vbGVhbihvcHRpb24uc2VsZWN0ZWQoKSk7Ci0gICAgY2FzZSBPcHRpb25WYWx1ZTog
ICAgICAgICAgIHJldHVybiBTdHJpbmcob3B0aW9uLnZhbHVlKCkpOwotICAgIH0KLSAgfQotICBi
cmVhazsKLSAgY2FzZSBJRF9JTlBVVDogewotICAgIEhUTUxJbnB1dEVsZW1lbnRJbXBsICZpbnB1
dCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgIHN3
aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIElucHV0RGVmYXVsdFZhbHVlOiAgICByZXR1cm4gU3Ry
aW5nKGlucHV0LmRlZmF1bHRWYWx1ZSgpKTsKLSAgICBjYXNlIElucHV0RGVmYXVsdENoZWNrZWQ6
ICByZXR1cm4gQm9vbGVhbihpbnB1dC5kZWZhdWx0Q2hlY2tlZCgpKTsKLSAgICBjYXNlIElucHV0
Rm9ybTogICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLGlucHV0LmZvcm0oKSk7IC8v
IHR5cGUgSFRNTEZvcm1FbGVtZW50Ci0gICAgY2FzZSBJbnB1dEFjY2VwdDogICAgICAgICAgcmV0
dXJuIFN0cmluZyhpbnB1dC5hY2NlcHQoKSk7Ci0gICAgY2FzZSBJbnB1dEFjY2Vzc0tleTogICAg
ICAgcmV0dXJuIFN0cmluZyhpbnB1dC5hY2Nlc3NLZXkoKSk7Ci0gICAgY2FzZSBJbnB1dEFsaWdu
OiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpbnB1dC5hbGlnbigpKTsKLSAgICBjYXNlIElucHV0
QWx0OiAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGlucHV0LmFsdCgpKTsKLSAgICBjYXNlIElu
cHV0Q2hlY2tlZDogICAgICAgICByZXR1cm4gQm9vbGVhbihpbnB1dC5jaGVja2VkKCkpOwotICAg
IGNhc2UgSW5wdXREaXNhYmxlZDogICAgICAgIHJldHVybiBCb29sZWFuKGlucHV0LmRpc2FibGVk
KCkpOwotICAgIGNhc2UgSW5wdXRNYXhMZW5ndGg6ICAgICAgIHJldHVybiBOdW1iZXIoaW5wdXQu
bWF4TGVuZ3RoKCkpOwotICAgIGNhc2UgSW5wdXROYW1lOiAgICAgICAgICAgIHJldHVybiBTdHJp
bmcoaW5wdXQubmFtZSgpKTsKLSAgICBjYXNlIElucHV0UmVhZE9ubHk6ICAgICAgICByZXR1cm4g
Qm9vbGVhbihpbnB1dC5yZWFkT25seSgpKTsKLSAgICBjYXNlIElucHV0U2l6ZTogICAgICAgICAg
ICByZXR1cm4gU3RyaW5nKGlucHV0LnNpemVET00oKSk7Ci0gICAgY2FzZSBJbnB1dFNyYzogICAg
ICAgICAgICAgcmV0dXJuIFN0cmluZyhpbnB1dC5zcmMoKSk7Ci0gICAgY2FzZSBJbnB1dFRhYklu
ZGV4OiAgICAgICAgcmV0dXJuIE51bWJlcihpbnB1dC50YWJJbmRleCgpKTsKLSAgICBjYXNlIElu
cHV0VHlwZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGlucHV0LnR5cGUoKSk7Ci0gICAgY2Fz
ZSBJbnB1dFVzZU1hcDogICAgICAgICAgcmV0dXJuIFN0cmluZyhpbnB1dC51c2VNYXAoKSk7Ci0g
ICAgY2FzZSBJbnB1dFZhbHVlOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpbnB1dC52YWx1ZSgp
KTsKLSAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfVEVYVEFSRUE6IHsKLSAgICBIVE1M
VGV4dEFyZWFFbGVtZW50SW1wbCAmdGV4dGFyZWEgPSBzdGF0aWNfY2FzdDxIVE1MVGV4dEFyZWFF
bGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBU
ZXh0QXJlYURlZmF1bHRWYWx1ZTogICAgcmV0dXJuIFN0cmluZyh0ZXh0YXJlYS5kZWZhdWx0VmFs
dWUoKSk7Ci0gICAgY2FzZSBUZXh0QXJlYUZvcm06ICAgICAgICAgICAgcmV0dXJuIGdldERPTU5v
ZGUoZXhlYyx0ZXh0YXJlYS5mb3JtKCkpOyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVudAotICAgIGNh
c2UgVGV4dEFyZWFBY2Nlc3NLZXk6ICAgICAgIHJldHVybiBTdHJpbmcodGV4dGFyZWEuYWNjZXNz
S2V5KCkpOwotICAgIGNhc2UgVGV4dEFyZWFDb2xzOiAgICAgICAgICAgIHJldHVybiBOdW1iZXIo
dGV4dGFyZWEuY29scygpKTsKLSAgICBjYXNlIFRleHRBcmVhRGlzYWJsZWQ6ICAgICAgICByZXR1
cm4gQm9vbGVhbih0ZXh0YXJlYS5kaXNhYmxlZCgpKTsKLSAgICBjYXNlIFRleHRBcmVhTmFtZTog
ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRleHRhcmVhLm5hbWUoKSk7Ci0gICAgY2FzZSBUZXh0
QXJlYVJlYWRPbmx5OiAgICAgICAgcmV0dXJuIEJvb2xlYW4odGV4dGFyZWEucmVhZE9ubHkoKSk7
Ci0gICAgY2FzZSBUZXh0QXJlYVJvd3M6ICAgICAgICAgICAgcmV0dXJuIE51bWJlcih0ZXh0YXJl
YS5yb3dzKCkpOwotICAgIGNhc2UgVGV4dEFyZWFUYWJJbmRleDogICAgICAgIHJldHVybiBOdW1i
ZXIodGV4dGFyZWEudGFiSW5kZXgoKSk7Ci0gICAgY2FzZSBUZXh0QXJlYVR5cGU6ICAgICAgICAg
ICAgcmV0dXJuIFN0cmluZyh0ZXh0YXJlYS50eXBlKCkpOwotICAgIGNhc2UgVGV4dEFyZWFWYWx1
ZTogICAgICAgICAgIHJldHVybiBTdHJpbmcodGV4dGFyZWEudmFsdWUoKSk7Ci0gICAgfQotICB9
Ci0gIGJyZWFrOwotICBjYXNlIElEX0JVVFRPTjogewotICAgIEhUTUxCdXR0b25FbGVtZW50SW1w
bCAmYnV0dG9uID0gc3RhdGljX2Nhc3Q8SFRNTEJ1dHRvbkVsZW1lbnRJbXBsICY+KGVsZW1lbnQp
OwotICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIEJ1dHRvbkZvcm06ICAgICAgICAgICAg
cmV0dXJuIGdldERPTU5vZGUoZXhlYyxidXR0b24uZm9ybSgpKTsgLy8gdHlwZSBIVE1MRm9ybUVs
ZW1lbnQKLSAgICBjYXNlIEJ1dHRvbkFjY2Vzc0tleTogICAgICAgcmV0dXJuIFN0cmluZyhidXR0
b24uYWNjZXNzS2V5KCkpOwotICAgIGNhc2UgQnV0dG9uRGlzYWJsZWQ6ICAgICAgICByZXR1cm4g
Qm9vbGVhbihidXR0b24uZGlzYWJsZWQoKSk7Ci0gICAgY2FzZSBCdXR0b25OYW1lOiAgICAgICAg
ICAgIHJldHVybiBTdHJpbmcoYnV0dG9uLm5hbWUoKSk7Ci0gICAgY2FzZSBCdXR0b25UYWJJbmRl
eDogICAgICAgIHJldHVybiBOdW1iZXIoYnV0dG9uLnRhYkluZGV4KCkpOwotICAgIGNhc2UgQnV0
dG9uVHlwZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGJ1dHRvbi50eXBlKCkpOwotICAgIGNh
c2UgQnV0dG9uVmFsdWU6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGJ1dHRvbi52YWx1ZSgpKTsK
LSAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfTEFCRUw6IHsKLSAgICBIVE1MTGFiZWxF
bGVtZW50SW1wbCAmbGFiZWwgPSBzdGF0aWNfY2FzdDxIVE1MTGFiZWxFbGVtZW50SW1wbCAmPihl
bGVtZW50KTsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBMYWJlbEZvcm06ICAgICAg
ICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyxsYWJlbC5mb3JtKCkpOyAvLyB0eXBlIEhUTUxG
b3JtRWxlbWVudAotICAgIGNhc2UgTGFiZWxBY2Nlc3NLZXk6ICAgICAgIHJldHVybiBTdHJpbmco
bGFiZWwuYWNjZXNzS2V5KCkpOwotICAgIGNhc2UgTGFiZWxIdG1sRm9yOiAgICAgICAgIHJldHVy
biBTdHJpbmcobGFiZWwuaHRtbEZvcigpKTsKLSAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2Ug
SURfRklFTERTRVQ6IHsKLSAgICBIVE1MRmllbGRTZXRFbGVtZW50SW1wbCAmZmllbGRTZXQgPSBz
dGF0aWNfY2FzdDxIVE1MRmllbGRTZXRFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKK1ZhbHVlIEhU
TUxFbGVtZW50OjpoZWFkR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAor
eworICAgIEhUTUxIZWFkRWxlbWVudEltcGwgJmhlYWQgPSAqc3RhdGljX2Nhc3Q8SFRNTEhlYWRF
bGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IEhlYWRQcm9maWxlKQorICAg
ICAgICByZXR1cm4gU3RyaW5nKGhlYWQucHJvZmlsZSgpKTsKKyAgICByZXR1cm4gVW5kZWZpbmVk
KCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50OjpsaW5rR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywg
aW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxMaW5rRWxlbWVudEltcGwgJmxpbmsgPSAqc3Rh
dGljX2Nhc3Q8SFRNTExpbmtFbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tl
bikgewotICAgIGNhc2UgRmllbGRTZXRGb3JtOiAgICAgICAgICAgIHJldHVybiBnZXRET01Ob2Rl
KGV4ZWMsZmllbGRTZXQuZm9ybSgpKTsgLy8gdHlwZSBIVE1MRm9ybUVsZW1lbnQKLSAgICB9Ci0g
IH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfTEVHRU5EOiB7Ci0gICAgSFRNTExlZ2VuZEVsZW1lbnRJ
bXBsICZsZWdlbmQgPSBzdGF0aWNfY2FzdDxIVE1MTGVnZW5kRWxlbWVudEltcGwgJj4oZWxlbWVu
dCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgTGVnZW5kRm9ybTogICAgICAgICAg
ICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLGxlZ2VuZC5mb3JtKCkpOyAvLyB0eXBlIEhUTUxGb3Jt
RWxlbWVudAotICAgIGNhc2UgTGVnZW5kQWNjZXNzS2V5OiAgICAgICByZXR1cm4gU3RyaW5nKGxl
Z2VuZC5hY2Nlc3NLZXkoKSk7Ci0gICAgY2FzZSBMZWdlbmRBbGlnbjogICAgICAgICAgIHJldHVy
biBTdHJpbmcobGVnZW5kLmFsaWduKCkpOworICAgICAgICBjYXNlIExpbmtEaXNhYmxlZDoKKyAg
ICAgICAgICAgIHJldHVybiBCb29sZWFuKGxpbmsuZGlzYWJsZWQoKSk7CisgICAgICAgIGNhc2Ug
TGlua0NoYXJzZXQ6CisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGxpbmsuY2hhcnNldCgpKTsK
KyAgICAgICAgY2FzZSBMaW5rSHJlZjoKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcobGluay5o
cmVmKCkpOworICAgICAgICBjYXNlIExpbmtIcmVmTGFuZzoKKyAgICAgICAgICAgIHJldHVybiBT
dHJpbmcobGluay5ocmVmbGFuZygpKTsKKyAgICAgICAgY2FzZSBMaW5rTWVkaWE6ICAgICAgICAg
ICAKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcobGluay5tZWRpYSgpKTsKKyAgICAgICAgY2Fz
ZSBMaW5rUmVsOiAgICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcobGluay5y
ZWwoKSk7CisgICAgICAgIGNhc2UgTGlua1JldjogICAgICAgICAgICAKKyAgICAgICAgICAgIHJl
dHVybiBTdHJpbmcobGluay5yZXYoKSk7CisgICAgICAgIGNhc2UgTGlua1RhcmdldDogICAgICAg
ICAgCisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGxpbmsudGFyZ2V0KCkpOworICAgICAgICBj
YXNlIExpbmtUeXBlOiAgICAgICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhsaW5r
LnR5cGUoKSk7CisgICAgICAgIGNhc2UgTGlua1NoZWV0OiAgICAgICAgICAgCisgICAgICAgICAg
ICByZXR1cm4gZ2V0RE9NU3R5bGVTaGVldChleGVjLCBsaW5rLnNoZWV0KCkpOwogICAgIH0KLSAg
fQotICBicmVhazsKLSAgY2FzZSBJRF9VTDogewotICAgIEhUTUxVTGlzdEVsZW1lbnRJbXBsICZ1
TGlzdCA9IHN0YXRpY19jYXN0PEhUTUxVTGlzdEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAg
IHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OnRpdGxlR2V0dGVy
KEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxUaXRsZUVsZW1l
bnRJbXBsJiB0aXRsZSA9ICpzdGF0aWNfY2FzdDxIVE1MVGl0bGVFbGVtZW50SW1wbCo+KGltcGwo
KSk7CisgICAgaWYgKHRva2VuID09IFRpdGxlVGV4dCkKKyAgICAgICAgcmV0dXJuIFN0cmluZyh0
aXRsZS50ZXh0KCkpOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVs
ZW1lbnQ6Om1ldGFHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7Cisg
ICAgSFRNTE1ldGFFbGVtZW50SW1wbCYgbWV0YSA9ICpzdGF0aWNfY2FzdDxIVE1MTWV0YUVsZW1l
bnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBVTGlzdENv
bXBhY3Q6ICAgICAgICAgcmV0dXJuIEJvb2xlYW4odUxpc3QuY29tcGFjdCgpKTsKLSAgICBjYXNl
IFVMaXN0VHlwZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKHVMaXN0LnR5cGUoKSk7Ci0gICAg
fQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX09MOiB7Ci0gICAgSFRNTE9MaXN0RWxlbWVudElt
cGwgJm9MaXN0ID0gc3RhdGljX2Nhc3Q8SFRNTE9MaXN0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7
Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgT0xpc3RDb21wYWN0OiAgICAgICAgIHJl
dHVybiBCb29sZWFuKG9MaXN0LmNvbXBhY3QoKSk7Ci0gICAgY2FzZSBPTGlzdFN0YXJ0OiAgICAg
ICAgICAgcmV0dXJuIE51bWJlcihvTGlzdC5zdGFydCgpKTsKLSAgICBjYXNlIE9MaXN0VHlwZTog
ICAgICAgICAgICByZXR1cm4gU3RyaW5nKG9MaXN0LnR5cGUoKSk7CisgICAgICAgIGNhc2UgTWV0
YUNvbnRlbnQ6ICAgICAgICAgcmV0dXJuIFN0cmluZyhtZXRhLmNvbnRlbnQoKSk7CisgICAgICAg
IGNhc2UgTWV0YUh0dHBFcXVpdjogICAgICAgcmV0dXJuIFN0cmluZyhtZXRhLmh0dHBFcXVpdigp
KTsKKyAgICAgICAgY2FzZSBNZXRhTmFtZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKG1ldGEu
bmFtZSgpKTsKKyAgICAgICAgY2FzZSBNZXRhU2NoZW1lOiAgICAgICAgICByZXR1cm4gU3RyaW5n
KG1ldGEuc2NoZW1lKCkpOwogICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9ETDogewot
ICAgIEhUTUxETGlzdEVsZW1lbnRJbXBsICZkTGlzdCA9IHN0YXRpY19jYXN0PEhUTUxETGlzdEVs
ZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFs
dWUgSFRNTEVsZW1lbnQ6OmJhc2VHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNv
bnN0Cit7CisgICAgSFRNTEJhc2VFbGVtZW50SW1wbCYgYmFzZSA9ICpzdGF0aWNfY2FzdDxIVE1M
QmFzZUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2Fz
ZSBETGlzdENvbXBhY3Q6ICAgICAgICAgcmV0dXJuIEJvb2xlYW4oZExpc3QuY29tcGFjdCgpKTsK
KyAgICAgICAgY2FzZSBCYXNlSHJlZjogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGJhc2UuaHJl
ZigpKTsKKyAgICAgICAgY2FzZSBCYXNlVGFyZ2V0OiAgICAgICAgICByZXR1cm4gU3RyaW5nKGJh
c2UudGFyZ2V0KCkpOwogICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9ESVI6IHsKLSAg
ICBIVE1MRGlyZWN0b3J5RWxlbWVudEltcGwgJmRpcmVjdG9yeSA9IHN0YXRpY19jYXN0PEhUTUxE
aXJlY3RvcnlFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7
Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50Ojppc0luZGV4R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywg
aW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxJc0luZGV4RWxlbWVudEltcGwmIGlzaW5kZXgg
PSAqc3RhdGljX2Nhc3Q8SFRNTElzSW5kZXhFbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dp
dGNoICh0b2tlbikgewotICAgIGNhc2UgRGlyZWN0b3J5Q29tcGFjdDogICAgICAgICByZXR1cm4g
Qm9vbGVhbihkaXJlY3RvcnkuY29tcGFjdCgpKTsKKyAgICAgICAgY2FzZSBJc0luZGV4Rm9ybTog
ICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLCBpc2luZGV4LmZvcm0oKSk7IC8vIHR5
cGUgSFRNTEZvcm1FbGVtZW50CisgICAgICAgIGNhc2UgSXNJbmRleFByb21wdDogICAgICAgICAg
cmV0dXJuIFN0cmluZyhpc2luZGV4LnByb21wdCgpKTsKICAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0g
IGNhc2UgSURfTUVOVTogewotICAgIEhUTUxNZW51RWxlbWVudEltcGwgJm1lbnUgPSBzdGF0aWNf
Y2FzdDxIVE1MTWVudUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgIHJldHVybiBVbmRlZmlu
ZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OnN0eWxlR2V0dGVyKEV4ZWNTdGF0ZSogZXhl
YywgaW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxTdHlsZUVsZW1lbnRJbXBsJiBzdHlsZSA9
ICpzdGF0aWNfY2FzdDxIVE1MU3R5bGVFbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNo
ICh0b2tlbikgewotICAgIGNhc2UgTWVudUNvbXBhY3Q6ICAgICAgICAgcmV0dXJuIEJvb2xlYW4o
bWVudS5jb21wYWN0KCkpOworICAgICAgICBjYXNlIFN0eWxlRGlzYWJsZWQ6ICAgICAgICByZXR1
cm4gQm9vbGVhbihzdHlsZS5kaXNhYmxlZCgpKTsKKyAgICAgICAgY2FzZSBTdHlsZU1lZGlhOiAg
ICAgICAgICAgcmV0dXJuIFN0cmluZyhzdHlsZS5tZWRpYSgpKTsKKyAgICAgICAgY2FzZSBTdHls
ZVR5cGU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhzdHlsZS50eXBlKCkpOworICAgICAgICBj
YXNlIFN0eWxlU2hlZXQ6ICAgICAgICAgICByZXR1cm4gZ2V0RE9NU3R5bGVTaGVldChleGVjLCBz
dHlsZS5zaGVldCgpKTsKICAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfTEk6IHsKLSAg
ICBIVE1MTElFbGVtZW50SW1wbCAmbGkgPSBzdGF0aWNfY2FzdDxIVE1MTElFbGVtZW50SW1wbCAm
PihlbGVtZW50KTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVt
ZW50Ojpib2R5R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAg
IEhUTUxCb2R5RWxlbWVudEltcGwmIGJvZHkgPSAqc3RhdGljX2Nhc3Q8SFRNTEJvZHlFbGVtZW50
SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgTElUeXBlOiAg
ICAgICAgICAgIHJldHVybiBTdHJpbmcobGkudHlwZSgpKTsKLSAgICBjYXNlIExJVmFsdWU6ICAg
ICAgICAgICByZXR1cm4gTnVtYmVyKGxpLnZhbHVlKCkpOworICAgICAgICBjYXNlIEJvZHlBTGlu
azogICAgICAgICAgIHJldHVybiBTdHJpbmcoYm9keS5hTGluaygpKTsKKyAgICAgICAgY2FzZSBC
b2R5QmFja2dyb3VuZDogICAgICByZXR1cm4gU3RyaW5nKGJvZHkuYmFja2dyb3VuZCgpKTsKKyAg
ICAgICAgY2FzZSBCb2R5QmdDb2xvcjogICAgICAgICByZXR1cm4gU3RyaW5nKGJvZHkuYmdDb2xv
cigpKTsKKyAgICAgICAgY2FzZSBCb2R5TGluazogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGJv
ZHkubGluaygpKTsKKyAgICAgICAgY2FzZSBCb2R5VGV4dDogICAgICAgICAgICByZXR1cm4gU3Ry
aW5nKGJvZHkudGV4dCgpKTsKKyAgICAgICAgY2FzZSBCb2R5Vkxpbms6ICAgICAgICAgICByZXR1
cm4gU3RyaW5nKGJvZHkudkxpbmsoKSk7CisgICAgICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgICAg
IC8vIFVwZGF0ZSB0aGUgZG9jdW1lbnQncyBsYXlvdXQgYmVmb3JlIHdlIGNvbXB1dGUgdGhlc2Ug
YXR0cmlidXRlcy4KKyAgICAgICAgICAgIERvY3VtZW50SW1wbCAqZG9jID0gYm9keS5nZXREb2N1
bWVudCgpOworICAgICAgICAgICAgaWYgKGRvYykKKyAgICAgICAgICAgICAgICBkb2MtPnVwZGF0
ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOworICAgICAgICAgICAgS0hUTUxWaWV3
ICp2aWV3ID0gZG9jID8gZG9jLT52aWV3KCkgOiAwOworICAgICAgICAgICAgc3dpdGNoICh0b2tl
bikgeworICAgICAgICAgICAgICAgIGNhc2UgQm9keVNjcm9sbExlZnQ6CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBOdW1iZXIodmlldyA/IHZpZXctPmNvbnRlbnRzWCgpIDogMCk7CisgICAg
ICAgICAgICAgICAgY2FzZSBCb2R5U2Nyb2xsVG9wOgorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gTnVtYmVyKHZpZXcgPyB2aWV3LT5jb250ZW50c1koKSA6IDApOworICAgICAgICAgICAgICAg
IGNhc2UgQm9keVNjcm9sbEhlaWdodDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE51bWJl
cih2aWV3ID8gdmlldy0+Y29udGVudHNIZWlnaHQoKSA6IDApOworICAgICAgICAgICAgICAgIGNh
c2UgQm9keVNjcm9sbFdpZHRoOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTnVtYmVyKHZp
ZXcgPyB2aWV3LT5jb250ZW50c1dpZHRoKCkgOiAwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQogICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9ESVY6IHsKLSAgICBIVE1MRGl2RWxl
bWVudEltcGwgJmRpdiA9IHN0YXRpY19jYXN0PEhUTUxEaXZFbGVtZW50SW1wbCAmPihlbGVtZW50
KTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50Ojpmb3Jt
R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxGb3Jt
RWxlbWVudEltcGwmIGZvcm0gPSAqc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50SW1wbCo+KGlt
cGwoKSk7CiAgICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgRGl2QWxpZ246ICAgICAgICAg
ICByZXR1cm4gU3RyaW5nKGRpdi5hbGlnbigpKTsKKyAgICAgICAgY2FzZSBGb3JtRWxlbWVudHM6
ICAgICAgICByZXR1cm4gZ2V0SFRNTENvbGxlY3Rpb24oZXhlYywgZm9ybS5lbGVtZW50cygpLmdl
dCgpKTsKKyAgICAgICAgY2FzZSBGb3JtTGVuZ3RoOiAgICAgICAgICByZXR1cm4gTnVtYmVyKGZv
cm0ubGVuZ3RoKCkpOworICAgICAgICBjYXNlIEZvcm1OYW1lOiAgICAgICAgICAgIHJldHVybiBT
dHJpbmcoZm9ybS5uYW1lKCkpOworICAgICAgICBjYXNlIEZvcm1BY2NlcHRDaGFyc2V0OiAgIHJl
dHVybiBTdHJpbmcoZm9ybS5hY2NlcHRDaGFyc2V0KCkpOworICAgICAgICBjYXNlIEZvcm1BY3Rp
b246ICAgICAgICAgIHJldHVybiBTdHJpbmcoZm9ybS5hY3Rpb24oKSk7CisgICAgICAgIGNhc2Ug
Rm9ybUVuY1R5cGU6ICAgICAgICAgcmV0dXJuIFN0cmluZyhmb3JtLmVuY3R5cGUoKSk7CisgICAg
ICAgIGNhc2UgRm9ybU1ldGhvZDogICAgICAgICAgcmV0dXJuIFN0cmluZyhmb3JtLm1ldGhvZCgp
KTsKKyAgICAgICAgY2FzZSBGb3JtVGFyZ2V0OiAgICAgICAgICByZXR1cm4gU3RyaW5nKGZvcm0u
dGFyZ2V0KCkpOwogICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9QOiB7Ci0gICAgSFRN
TFBhcmFncmFwaEVsZW1lbnRJbXBsICZwYXJhZ3JhcGggPSBzdGF0aWNfY2FzdDxIVE1MUGFyYWdy
YXBoRWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQor
CitWYWx1ZSBIVE1MRWxlbWVudDo6c2VsZWN0R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRv
a2VuKSBjb25zdAoreworICAgIEhUTUxTZWxlY3RFbGVtZW50SW1wbCYgc2VsZWN0ID0gKnN0YXRp
Y19jYXN0PEhUTUxTZWxlY3RFbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tl
bikgewotICAgIGNhc2UgUGFyYWdyYXBoQWxpZ246ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHBh
cmFncmFwaC5hbGlnbigpKTsKKyAgICAgICAgY2FzZSBTZWxlY3RUeXBlOiAgICAgICAgICAgIHJl
dHVybiBTdHJpbmcoc2VsZWN0LnR5cGUoKSk7CisgICAgICAgIGNhc2UgU2VsZWN0U2VsZWN0ZWRJ
bmRleDogICByZXR1cm4gTnVtYmVyKHNlbGVjdC5zZWxlY3RlZEluZGV4KCkpOworICAgICAgICBj
YXNlIFNlbGVjdFZhbHVlOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhzZWxlY3QudmFsdWUoKSk7
CisgICAgICAgIGNhc2UgU2VsZWN0TGVuZ3RoOiAgICAgICAgICByZXR1cm4gTnVtYmVyKHNlbGVj
dC5sZW5ndGgoKSk7CisgICAgICAgIGNhc2UgU2VsZWN0Rm9ybTogICAgICAgICAgICByZXR1cm4g
Z2V0RE9NTm9kZShleGVjLCBzZWxlY3QuZm9ybSgpKTsgLy8gdHlwZSBIVE1MRm9ybUVsZW1lbnQK
KyAgICAgICAgY2FzZSBTZWxlY3RPcHRpb25zOiAgICAgICAgIHJldHVybiBnZXRTZWxlY3RIVE1M
Q29sbGVjdGlvbihleGVjLCBzZWxlY3Qub3B0aW9uc0hUTUxDb2xsZWN0aW9uKCkuZ2V0KCksICZz
ZWxlY3QpOyAvLyB0eXBlIEhUTUxDb2xsZWN0aW9uCisgICAgICAgIGNhc2UgU2VsZWN0RGlzYWJs
ZWQ6ICAgICAgICByZXR1cm4gQm9vbGVhbihzZWxlY3QuZGlzYWJsZWQoKSk7CisgICAgICAgIGNh
c2UgU2VsZWN0TXVsdGlwbGU6ICAgICAgICByZXR1cm4gQm9vbGVhbihzZWxlY3QubXVsdGlwbGUo
KSk7CisgICAgICAgIGNhc2UgU2VsZWN0TmFtZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKHNl
bGVjdC5uYW1lKCkpOworICAgICAgICBjYXNlIFNlbGVjdFNpemU6ICAgICAgICAgICAgcmV0dXJu
IE51bWJlcihzZWxlY3Quc2l6ZSgpKTsKKyAgICAgICAgY2FzZSBTZWxlY3RUYWJJbmRleDogICAg
ICAgIHJldHVybiBOdW1iZXIoc2VsZWN0LnRhYkluZGV4KCkpOwogICAgIH0KLSAgfQotICBicmVh
azsKLSAgY2FzZSBJRF9IMToKLSAgY2FzZSBJRF9IMjoKLSAgY2FzZSBJRF9IMzoKLSAgY2FzZSBJ
RF9INDoKLSAgY2FzZSBJRF9INToKLSAgY2FzZSBJRF9INjogewotICAgIEhUTUxIZWFkaW5nRWxl
bWVudEltcGwgJmhlYWRpbmcgPSBzdGF0aWNfY2FzdDxIVE1MSGVhZGluZ0VsZW1lbnRJbXBsICY+
KGVsZW1lbnQpOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1l
bnQ6Om9wdEdyb3VwR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAorewor
ICAgIEhUTUxPcHRHcm91cEVsZW1lbnRJbXBsJiBvcHRncm91cCA9ICpzdGF0aWNfY2FzdDxIVE1M
T3B0R3JvdXBFbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tlbikgewotICAg
IGNhc2UgSGVhZGluZ0FsaWduOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhoZWFkaW5nLmFsaWdu
KCkpOworICAgICAgICBjYXNlIE9wdEdyb3VwRGlzYWJsZWQ6ICAgICAgICByZXR1cm4gQm9vbGVh
bihvcHRncm91cC5kaXNhYmxlZCgpKTsKKyAgICAgICAgY2FzZSBPcHRHcm91cExhYmVsOiAgICAg
ICAgICAgcmV0dXJuIFN0cmluZyhvcHRncm91cC5sYWJlbCgpKTsKICAgICB9Ci0gIH0KLSAgYnJl
YWs7Ci0gIGNhc2UgSURfQkxPQ0tRVU9URTogewotICAgIEhUTUxCbG9ja3F1b3RlRWxlbWVudElt
cGwgJmJsb2NrcXVvdGUgPSBzdGF0aWNfY2FzdDxIVE1MQmxvY2txdW90ZUVsZW1lbnRJbXBsICY+
KGVsZW1lbnQpOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1l
bnQ6Om9wdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAg
ICBIVE1MT3B0aW9uRWxlbWVudEltcGwmIG9wdGlvbiA9ICpzdGF0aWNfY2FzdDxIVE1MT3B0aW9u
RWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIEJs
b2NrUXVvdGVDaXRlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYmxvY2txdW90ZS5jaXRlKCkp
OworICAgICAgICBjYXNlIE9wdGlvbkZvcm06ICAgICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUo
ZXhlYyxvcHRpb24uZm9ybSgpKTsgLy8gdHlwZSBIVE1MRm9ybUVsZW1lbnQKKyAgICAgICAgY2Fz
ZSBPcHRpb25EZWZhdWx0U2VsZWN0ZWQ6IHJldHVybiBCb29sZWFuKG9wdGlvbi5kZWZhdWx0U2Vs
ZWN0ZWQoKSk7CisgICAgICAgIGNhc2UgT3B0aW9uVGV4dDogICAgICAgICAgICByZXR1cm4gU3Ry
aW5nKG9wdGlvbi50ZXh0KCkpOworICAgICAgICBjYXNlIE9wdGlvbkluZGV4OiAgICAgICAgICAg
cmV0dXJuIE51bWJlcihvcHRpb24uaW5kZXgoKSk7CisgICAgICAgIGNhc2UgT3B0aW9uRGlzYWJs
ZWQ6ICAgICAgICByZXR1cm4gQm9vbGVhbihvcHRpb24uZGlzYWJsZWQoKSk7CisgICAgICAgIGNh
c2UgT3B0aW9uTGFiZWw6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKG9wdGlvbi5sYWJlbCgpKTsK
KyAgICAgICAgY2FzZSBPcHRpb25TZWxlY3RlZDogICAgICAgIHJldHVybiBCb29sZWFuKG9wdGlv
bi5zZWxlY3RlZCgpKTsKKyAgICAgICAgY2FzZSBPcHRpb25WYWx1ZTogICAgICAgICAgIHJldHVy
biBTdHJpbmcob3B0aW9uLnZhbHVlKCkpOwogICAgIH0KLSAgfQotICBjYXNlIElEX1E6IHsKLSAg
ICBIVE1MUXVvdGVFbGVtZW50SW1wbCAmcXVvdGUgPSBzdGF0aWNfY2FzdDxIVE1MUXVvdGVFbGVt
ZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVl
IEhUTUxFbGVtZW50OjppbnB1dEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29u
c3QKK3sKKyAgICBIVE1MSW5wdXRFbGVtZW50SW1wbCYgaW5wdXQgPSAqc3RhdGljX2Nhc3Q8SFRN
TElucHV0RWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBj
YXNlIFF1b3RlQ2l0ZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKHF1b3RlLmNpdGUoKSk7Cisg
ICAgICAgIGNhc2UgSW5wdXREZWZhdWx0VmFsdWU6ICAgIHJldHVybiBTdHJpbmcoaW5wdXQuZGVm
YXVsdFZhbHVlKCkpOworICAgICAgICBjYXNlIElucHV0RGVmYXVsdENoZWNrZWQ6ICByZXR1cm4g
Qm9vbGVhbihpbnB1dC5kZWZhdWx0Q2hlY2tlZCgpKTsKKyAgICAgICAgY2FzZSBJbnB1dEZvcm06
ICAgICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyxpbnB1dC5mb3JtKCkpOyAvLyB0eXBl
IEhUTUxGb3JtRWxlbWVudAorICAgICAgICBjYXNlIElucHV0QWNjZXB0OiAgICAgICAgICByZXR1
cm4gU3RyaW5nKGlucHV0LmFjY2VwdCgpKTsKKyAgICAgICAgY2FzZSBJbnB1dEFjY2Vzc0tleTog
ICAgICAgcmV0dXJuIFN0cmluZyhpbnB1dC5hY2Nlc3NLZXkoKSk7CisgICAgICAgIGNhc2UgSW5w
dXRBbGlnbjogICAgICAgICAgIHJldHVybiBTdHJpbmcoaW5wdXQuYWxpZ24oKSk7CisgICAgICAg
IGNhc2UgSW5wdXRBbHQ6ICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoaW5wdXQuYWx0KCkpOwor
ICAgICAgICBjYXNlIElucHV0Q2hlY2tlZDogICAgICAgICByZXR1cm4gQm9vbGVhbihpbnB1dC5j
aGVja2VkKCkpOworICAgICAgICBjYXNlIElucHV0RGlzYWJsZWQ6ICAgICAgICByZXR1cm4gQm9v
bGVhbihpbnB1dC5kaXNhYmxlZCgpKTsKKyAgICAgICAgY2FzZSBJbnB1dE1heExlbmd0aDogICAg
ICAgcmV0dXJuIE51bWJlcihpbnB1dC5tYXhMZW5ndGgoKSk7CisgICAgICAgIGNhc2UgSW5wdXRO
YW1lOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoaW5wdXQubmFtZSgpKTsKKyAgICAgICAgY2Fz
ZSBJbnB1dFJlYWRPbmx5OiAgICAgICAgcmV0dXJuIEJvb2xlYW4oaW5wdXQucmVhZE9ubHkoKSk7
CisgICAgICAgIGNhc2UgSW5wdXRTaXplOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoaW5wdXQu
c2l6ZURPTSgpKTsKKyAgICAgICAgY2FzZSBJbnB1dFNyYzogICAgICAgICAgICAgcmV0dXJuIFN0
cmluZyhpbnB1dC5zcmMoKSk7CisgICAgICAgIGNhc2UgSW5wdXRUYWJJbmRleDogICAgICAgIHJl
dHVybiBOdW1iZXIoaW5wdXQudGFiSW5kZXgoKSk7CisgICAgICAgIGNhc2UgSW5wdXRUeXBlOiAg
ICAgICAgICAgIHJldHVybiBTdHJpbmcoaW5wdXQudHlwZSgpKTsKKyAgICAgICAgY2FzZSBJbnB1
dFVzZU1hcDogICAgICAgICAgcmV0dXJuIFN0cmluZyhpbnB1dC51c2VNYXAoKSk7CisgICAgICAg
IGNhc2UgSW5wdXRWYWx1ZTogICAgICAgICAgIHJldHVybiBTdHJpbmcoaW5wdXQudmFsdWUoKSk7
CiAgICAgfQotICB9Ci0gIGNhc2UgSURfUFJFOiB7Ci0gICAgSFRNTFByZUVsZW1lbnRJbXBsICZw
cmUgPSBzdGF0aWNfY2FzdDxIVE1MUHJlRWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgcmV0
dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6dGV4dEFyZWFHZXR0ZXIo
RXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTFRleHRBcmVhRWxl
bWVudEltcGwmIHRleHRhcmVhID0gKnN0YXRpY19jYXN0PEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBs
Kj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBQcmVXaWR0aDogICAg
ICAgICAgIHJldHVybiBOdW1iZXIocHJlLndpZHRoKCkpOworICAgICAgICBjYXNlIFRleHRBcmVh
RGVmYXVsdFZhbHVlOiAgICByZXR1cm4gU3RyaW5nKHRleHRhcmVhLmRlZmF1bHRWYWx1ZSgpKTsK
KyAgICAgICAgY2FzZSBUZXh0QXJlYUZvcm06ICAgICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUo
ZXhlYyx0ZXh0YXJlYS5mb3JtKCkpOyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVudAorICAgICAgICBj
YXNlIFRleHRBcmVhQWNjZXNzS2V5OiAgICAgICByZXR1cm4gU3RyaW5nKHRleHRhcmVhLmFjY2Vz
c0tleSgpKTsKKyAgICAgICAgY2FzZSBUZXh0QXJlYUNvbHM6ICAgICAgICAgICAgcmV0dXJuIE51
bWJlcih0ZXh0YXJlYS5jb2xzKCkpOworICAgICAgICBjYXNlIFRleHRBcmVhRGlzYWJsZWQ6ICAg
ICAgICByZXR1cm4gQm9vbGVhbih0ZXh0YXJlYS5kaXNhYmxlZCgpKTsKKyAgICAgICAgY2FzZSBU
ZXh0QXJlYU5hbWU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0ZXh0YXJlYS5uYW1lKCkpOwor
ICAgICAgICBjYXNlIFRleHRBcmVhUmVhZE9ubHk6ICAgICAgICByZXR1cm4gQm9vbGVhbih0ZXh0
YXJlYS5yZWFkT25seSgpKTsKKyAgICAgICAgY2FzZSBUZXh0QXJlYVJvd3M6ICAgICAgICAgICAg
cmV0dXJuIE51bWJlcih0ZXh0YXJlYS5yb3dzKCkpOworICAgICAgICBjYXNlIFRleHRBcmVhVGFi
SW5kZXg6ICAgICAgICByZXR1cm4gTnVtYmVyKHRleHRhcmVhLnRhYkluZGV4KCkpOworICAgICAg
ICBjYXNlIFRleHRBcmVhVHlwZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRleHRhcmVhLnR5
cGUoKSk7CisgICAgICAgIGNhc2UgVGV4dEFyZWFWYWx1ZTogICAgICAgICAgIHJldHVybiBTdHJp
bmcodGV4dGFyZWEudmFsdWUoKSk7CiAgICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX0JS
OiB7Ci0gICAgSFRNTEJSRWxlbWVudEltcGwgJmJyID0gc3RhdGljX2Nhc3Q8SFRNTEJSRWxlbWVu
dEltcGwgJj4oZWxlbWVudCk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBI
VE1MRWxlbWVudDo6YnV0dG9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25z
dAoreworICAgIEhUTUxCdXR0b25FbGVtZW50SW1wbCYgYnV0dG9uID0gKnN0YXRpY19jYXN0PEhU
TUxCdXR0b25FbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tlbikgewotICAg
IGNhc2UgQlJDbGVhcjogICAgICAgICAgIHJldHVybiBTdHJpbmcoYnIuY2xlYXIoKSk7Ci0gICAg
fQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX0JBU0VGT05UOiB7Ci0gICAgSFRNTEJhc2VGb250
RWxlbWVudEltcGwgJmJhc2VGb250ID0gc3RhdGljX2Nhc3Q8SFRNTEJhc2VGb250RWxlbWVudElt
cGwgJj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgQmFzZUZvbnRD
b2xvcjogICAgICAgICAgIHJldHVybiBTdHJpbmcoYmFzZUZvbnQuY29sb3IoKSk7Ci0gICAgY2Fz
ZSBCYXNlRm9udEZhY2U6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhiYXNlRm9udC5mYWNlKCkp
OwotICAgIGNhc2UgQmFzZUZvbnRTaXplOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYmFzZUZv
bnQuc2l6ZSgpKTsKLSAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfRk9OVDogewotICAg
IEhUTUxGb250RWxlbWVudEltcGwgJmZvbnQgPSBzdGF0aWNfY2FzdDxIVE1MRm9udEVsZW1lbnRJ
bXBsICY+KGVsZW1lbnQpOwotICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIEZvbnRDb2xv
cjogICAgICAgICAgIHJldHVybiBTdHJpbmcoZm9udC5jb2xvcigpKTsKLSAgICBjYXNlIEZvbnRG
YWNlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoZm9udC5mYWNlKCkpOwotICAgIGNhc2UgRm9u
dFNpemU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhmb250LnNpemUoKSk7Ci0gICAgfQotICB9
Ci0gIGJyZWFrOwotICBjYXNlIElEX0hSOiB7Ci0gICAgSFRNTEhSRWxlbWVudEltcGwgJmhyID0g
c3RhdGljX2Nhc3Q8SFRNTEhSRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0
b2tlbikgewotICAgIGNhc2UgSFJBbGlnbjogICAgICAgICAgIHJldHVybiBTdHJpbmcoaHIuYWxp
Z24oKSk7Ci0gICAgY2FzZSBIUk5vU2hhZGU6ICAgICAgICAgcmV0dXJuIEJvb2xlYW4oaHIubm9T
aGFkZSgpKTsKLSAgICBjYXNlIEhSU2l6ZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGhyLnNp
emUoKSk7Ci0gICAgY2FzZSBIUldpZHRoOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhoci53aWR0
aCgpKTsKKyAgICAgICAgY2FzZSBCdXR0b25Gb3JtOiAgICAgICAgICAgIHJldHVybiBnZXRET01O
b2RlKGV4ZWMsYnV0dG9uLmZvcm0oKSk7IC8vIHR5cGUgSFRNTEZvcm1FbGVtZW50CisgICAgICAg
IGNhc2UgQnV0dG9uQWNjZXNzS2V5OiAgICAgICByZXR1cm4gU3RyaW5nKGJ1dHRvbi5hY2Nlc3NL
ZXkoKSk7CisgICAgICAgIGNhc2UgQnV0dG9uRGlzYWJsZWQ6ICAgICAgICByZXR1cm4gQm9vbGVh
bihidXR0b24uZGlzYWJsZWQoKSk7CisgICAgICAgIGNhc2UgQnV0dG9uTmFtZTogICAgICAgICAg
ICByZXR1cm4gU3RyaW5nKGJ1dHRvbi5uYW1lKCkpOworICAgICAgICBjYXNlIEJ1dHRvblRhYklu
ZGV4OiAgICAgICAgcmV0dXJuIE51bWJlcihidXR0b24udGFiSW5kZXgoKSk7CisgICAgICAgIGNh
c2UgQnV0dG9uVHlwZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGJ1dHRvbi50eXBlKCkpOwor
ICAgICAgICBjYXNlIEJ1dHRvblZhbHVlOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhidXR0b24u
dmFsdWUoKSk7CiAgICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX0lOUzoKLSAgY2FzZSBJ
RF9ERUw6IHsKLSAgICBIVE1MTW9kRWxlbWVudEltcGwgJm1vZCA9IHN0YXRpY19jYXN0PEhUTUxN
b2RFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisK
K1ZhbHVlIEhUTUxFbGVtZW50OjpsYWJlbEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tl
bikgY29uc3QKK3sKKyAgICBIVE1MTGFiZWxFbGVtZW50SW1wbCYgbGFiZWwgPSAqc3RhdGljX2Nh
c3Q8SFRNTExhYmVsRWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAodG9rZW4pIHsK
LSAgICBjYXNlIE1vZENpdGU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhtb2QuY2l0ZSgpKTsK
LSAgICBjYXNlIE1vZERhdGVUaW1lOiAgICAgICAgcmV0dXJuIFN0cmluZyhtb2QuZGF0ZVRpbWUo
KSk7CisgICAgICAgIGNhc2UgTGFiZWxGb3JtOiAgICAgICAgICAgIHJldHVybiBnZXRET01Ob2Rl
KGV4ZWMsbGFiZWwuZm9ybSgpKTsgLy8gdHlwZSBIVE1MRm9ybUVsZW1lbnQKKyAgICAgICAgY2Fz
ZSBMYWJlbEFjY2Vzc0tleTogICAgICAgcmV0dXJuIFN0cmluZyhsYWJlbC5hY2Nlc3NLZXkoKSk7
CisgICAgICAgIGNhc2UgTGFiZWxIdG1sRm9yOiAgICAgICAgIHJldHVybiBTdHJpbmcobGFiZWwu
aHRtbEZvcigpKTsKICAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfQTogewotICAgIEhU
TUxBbmNob3JFbGVtZW50SW1wbCAmYW5jaG9yID0gc3RhdGljX2Nhc3Q8SFRNTEFuY2hvckVsZW1l
bnRJbXBsICY+KGVsZW1lbnQpOwotICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIEFuY2hv
ckFjY2Vzc0tleTogICAgICAgcmV0dXJuIFN0cmluZyhhbmNob3IuYWNjZXNzS2V5KCkpOwotICAg
IGNhc2UgQW5jaG9yQ2hhcnNldDogICAgICAgICByZXR1cm4gU3RyaW5nKGFuY2hvci5jaGFyc2V0
KCkpOwotICAgIGNhc2UgQW5jaG9yQ29vcmRzOiAgICAgICAgICByZXR1cm4gU3RyaW5nKGFuY2hv
ci5jb29yZHMoKSk7Ci0gICAgY2FzZSBBbmNob3JIcmVmOiAgICAgICAgICAgIHJldHVybiBTdHJp
bmcoYW5jaG9yLmhyZWYoKSk7Ci0gICAgY2FzZSBBbmNob3JIcmVmTGFuZzogICAgICAgIHJldHVy
biBTdHJpbmcoYW5jaG9yLmhyZWZsYW5nKCkpOwotICAgIGNhc2UgQW5jaG9ySGFzaDogICAgICAg
ICAgICByZXR1cm4gU3RyaW5nKCcjJytLVVJMKGFuY2hvci5ocmVmKCkuc3RyaW5nKCkpLnJlZigp
KTsKLSAgICBjYXNlIEFuY2hvckhvc3Q6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhLVVJMKGFu
Y2hvci5ocmVmKCkuc3RyaW5nKCkpLmhvc3QoKSk7Ci0gICAgY2FzZSBBbmNob3JIb3N0bmFtZTog
ewotICAgICAgS1VSTCB1cmwoYW5jaG9yLmhyZWYoKS5zdHJpbmcoKSk7Ci0gICAgICBrZERlYnVn
KDYwNzApIDw8ICJhbmNob3I6Omhvc3RuYW1lIHVzZXM6IiA8PHVybC51cmwoKTw8ZW5kbDsKLSAg
ICAgIGlmICh1cmwucG9ydCgpPT0wKQotICAgICAgICByZXR1cm4gU3RyaW5nKHVybC5ob3N0KCkp
OwotICAgICAgZWxzZQotICAgICAgICByZXR1cm4gU3RyaW5nKHVybC5ob3N0KCkgKyAiOiIgKyBR
U3RyaW5nOjpudW1iZXIodXJsLnBvcnQoKSkpOwotICAgIH0KLSAgICBjYXNlIEFuY2hvclBhdGhO
YW1lOiAgICAgICAgcmV0dXJuIFN0cmluZyhLVVJMKGFuY2hvci5ocmVmKCkuc3RyaW5nKCkpLnBh
dGgoKSk7Ci0gICAgY2FzZSBBbmNob3JQb3J0OiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoUVN0
cmluZzo6bnVtYmVyKEtVUkwoYW5jaG9yLmhyZWYoKS5zdHJpbmcoKSkucG9ydCgpKSk7Ci0gICAg
Y2FzZSBBbmNob3JQcm90b2NvbDogICAgICAgIHJldHVybiBTdHJpbmcoS1VSTChhbmNob3IuaHJl
ZigpLnN0cmluZygpKS5wcm90b2NvbCgpKyI6Iik7Ci0gICAgY2FzZSBBbmNob3JTZWFyY2g6ICAg
ICAgICAgIHJldHVybiBTdHJpbmcoS1VSTChhbmNob3IuaHJlZigpLnN0cmluZygpKS5xdWVyeSgp
KTsKLSAgICBjYXNlIEFuY2hvck5hbWU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhhbmNob3Iu
bmFtZSgpKTsKLSAgICBjYXNlIEFuY2hvclJlbDogICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhh
bmNob3IucmVsKCkpOwotICAgIGNhc2UgQW5jaG9yUmV2OiAgICAgICAgICAgICByZXR1cm4gU3Ry
aW5nKGFuY2hvci5yZXYoKSk7Ci0gICAgY2FzZSBBbmNob3JTaGFwZTogICAgICAgICAgIHJldHVy
biBTdHJpbmcoYW5jaG9yLnNoYXBlKCkpOwotICAgIGNhc2UgQW5jaG9yVGFiSW5kZXg6ICAgICAg
ICByZXR1cm4gTnVtYmVyKGFuY2hvci50YWJJbmRleCgpKTsKLSAgICBjYXNlIEFuY2hvclRhcmdl
dDogICAgICAgICAgcmV0dXJuIFN0cmluZyhhbmNob3IudGFyZ2V0KCkpOwotICAgIGNhc2UgQW5j
aG9yVHlwZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGFuY2hvci50eXBlKCkpOwotICAgIGNh
c2UgQW5jaG9yVGV4dDoKLSAgICAgIGlmIChEb2N1bWVudEltcGwqIGRvYyA9IGFuY2hvci5nZXRE
b2N1bWVudCgpKQotICAgICAgICBkb2MtPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNo
ZWV0cygpOwotICAgICAgcmV0dXJuIFN0cmluZyhhbmNob3IuaW5uZXJUZXh0KCkpOwotICAgIH0K
LSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9JTUc6IHsKLSAgICBIVE1MSW1hZ2VFbGVtZW50SW1w
bCAmaW1hZ2UgPSBzdGF0aWNfY2FzdDxIVE1MSW1hZ2VFbGVtZW50SW1wbCAmPihlbGVtZW50KTsK
LSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBJbWFnZU5hbWU6ICAgICAgICAgICAgcmV0
dXJuIFN0cmluZyhpbWFnZS5uYW1lKCkpOwotICAgIGNhc2UgSW1hZ2VBbGlnbjogICAgICAgICAg
IHJldHVybiBTdHJpbmcoaW1hZ2UuYWxpZ24oKSk7Ci0gICAgY2FzZSBJbWFnZUFsdDogICAgICAg
ICAgICAgcmV0dXJuIFN0cmluZyhpbWFnZS5hbHQoKSk7Ci0gICAgY2FzZSBJbWFnZUJvcmRlcjog
ICAgICAgICAgcmV0dXJuIE51bWJlcihpbWFnZS5ib3JkZXIoKSk7Ci0gICAgY2FzZSBJbWFnZUhl
aWdodDogICAgICAgICAgcmV0dXJuIE51bWJlcihpbWFnZS5oZWlnaHQodHJ1ZSkpOwotICAgIGNh
c2UgSW1hZ2VIc3BhY2U6ICAgICAgICAgIHJldHVybiBOdW1iZXIoaW1hZ2UuaHNwYWNlKCkpOwot
ICAgIGNhc2UgSW1hZ2VJc01hcDogICAgICAgICAgIHJldHVybiBCb29sZWFuKGltYWdlLmlzTWFw
KCkpOwotICAgIGNhc2UgSW1hZ2VMb25nRGVzYzogICAgICAgIHJldHVybiBTdHJpbmcoaW1hZ2Uu
bG9uZ0Rlc2MoKSk7Ci0gICAgY2FzZSBJbWFnZVNyYzogICAgICAgICAgICAgcmV0dXJuIFN0cmlu
ZyhpbWFnZS5zcmMoKSk7Ci0gICAgY2FzZSBJbWFnZVVzZU1hcDogICAgICAgICAgcmV0dXJuIFN0
cmluZyhpbWFnZS51c2VNYXAoKSk7Ci0gICAgY2FzZSBJbWFnZVZzcGFjZTogICAgICAgICAgcmV0
dXJuIE51bWJlcihpbWFnZS52c3BhY2UoKSk7Ci0gICAgY2FzZSBJbWFnZVdpZHRoOiAgICAgICAg
ICAgcmV0dXJuIE51bWJlcihpbWFnZS53aWR0aCh0cnVlKSk7Ci0gICAgY2FzZSBJbWFnZVg6ICAg
ICAgICAgICAgICAgcmV0dXJuIE51bWJlcihpbWFnZS54KCkpOwotICAgIGNhc2UgSW1hZ2VZOiAg
ICAgICAgICAgICAgIHJldHVybiBOdW1iZXIoaW1hZ2UueSgpKTsKLSAgICB9Ci0gIH0KLSAgYnJl
YWs7Ci0gIGNhc2UgSURfT0JKRUNUOiB7Ci0gICAgSFRNTE9iamVjdEVsZW1lbnRJbXBsICZvYmpl
Y3QgPSBzdGF0aWNfY2FzdDxIVE1MT2JqZWN0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAg
c3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgT2JqZWN0Rm9ybTogICAgICAgICAgICByZXR1cm4g
Z2V0RE9NTm9kZShleGVjLG9iamVjdC5mb3JtKCkpOyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVudAot
ICAgIGNhc2UgT2JqZWN0Q29kZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKG9iamVjdC5jb2Rl
KCkpOwotICAgIGNhc2UgT2JqZWN0QWxpZ246ICAgICAgICAgICByZXR1cm4gU3RyaW5nKG9iamVj
dC5hbGlnbigpKTsKLSAgICBjYXNlIE9iamVjdEFyY2hpdmU6ICAgICAgICAgcmV0dXJuIFN0cmlu
ZyhvYmplY3QuYXJjaGl2ZSgpKTsKLSAgICBjYXNlIE9iamVjdEJvcmRlcjogICAgICAgICAgcmV0
dXJuIFN0cmluZyhvYmplY3QuYm9yZGVyKCkpOwotICAgIGNhc2UgT2JqZWN0Q29kZUJhc2U6ICAg
ICAgICByZXR1cm4gU3RyaW5nKG9iamVjdC5jb2RlQmFzZSgpKTsKLSAgICBjYXNlIE9iamVjdENv
ZGVUeXBlOiAgICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3QuY29kZVR5cGUoKSk7Ci0gICAgY2Fz
ZSBPYmplY3RDb250ZW50RG9jdW1lbnQ6IHJldHVybiBjaGVja05vZGVTZWN1cml0eShleGVjLG9i
amVjdC5jb250ZW50RG9jdW1lbnQoKSkgPyAKLQkJCQkgICAgICAgZ2V0RE9NTm9kZShleGVjLCBv
YmplY3QuY29udGVudERvY3VtZW50KCkpIDogVW5kZWZpbmVkKCk7Ci0gICAgY2FzZSBPYmplY3RE
YXRhOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcob2JqZWN0LmRhdGEoKSk7Ci0gICAgY2FzZSBP
YmplY3REZWNsYXJlOiAgICAgICAgIHJldHVybiBCb29sZWFuKG9iamVjdC5kZWNsYXJlKCkpOwot
ICAgIGNhc2UgT2JqZWN0SGVpZ2h0OiAgICAgICAgICByZXR1cm4gU3RyaW5nKG9iamVjdC5oZWln
aHQoKSk7Ci0gICAgY2FzZSBPYmplY3RIc3BhY2U6ICAgICAgICAgIHJldHVybiBTdHJpbmcob2Jq
ZWN0LmhzcGFjZSgpKTsKLSAgICBjYXNlIE9iamVjdE5hbWU6ICAgICAgICAgICAgcmV0dXJuIFN0
cmluZyhvYmplY3QubmFtZSgpKTsKLSAgICBjYXNlIE9iamVjdFN0YW5kYnk6ICAgICAgICAgcmV0
dXJuIFN0cmluZyhvYmplY3Quc3RhbmRieSgpKTsKLSAgICBjYXNlIE9iamVjdFRhYkluZGV4OiAg
ICAgICAgcmV0dXJuIE51bWJlcihvYmplY3QudGFiSW5kZXgoKSk7Ci0gICAgY2FzZSBPYmplY3RU
eXBlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcob2JqZWN0LnR5cGUoKSk7Ci0gICAgY2FzZSBP
YmplY3RVc2VNYXA6ICAgICAgICAgIHJldHVybiBTdHJpbmcob2JqZWN0LnVzZU1hcCgpKTsKLSAg
ICBjYXNlIE9iamVjdFZzcGFjZTogICAgICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3QudnNwYWNl
KCkpOwotICAgIGNhc2UgT2JqZWN0V2lkdGg6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKG9iamVj
dC53aWR0aCgpKTsKLSAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfUEFSQU06IHsKLSAg
ICBIVE1MUGFyYW1FbGVtZW50SW1wbCAmcGFyYW0gPSBzdGF0aWNfY2FzdDxIVE1MUGFyYW1FbGVt
ZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBQYXJh
bU5hbWU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhwYXJhbS5uYW1lKCkpOwotICAgIGNhc2Ug
UGFyYW1UeXBlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcocGFyYW0udHlwZSgpKTsKLSAgICBj
YXNlIFBhcmFtVmFsdWU6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHBhcmFtLnZhbHVlKCkpOwot
ICAgIGNhc2UgUGFyYW1WYWx1ZVR5cGU6ICAgICAgIHJldHVybiBTdHJpbmcocGFyYW0udmFsdWVU
eXBlKCkpOwotICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9BUFBMRVQ6IHsKLSAgICBI
VE1MQXBwbGV0RWxlbWVudEltcGwgJmFwcGxldCA9IHN0YXRpY19jYXN0PEhUTUxBcHBsZXRFbGVt
ZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBBcHBs
ZXRBbGlnbjogICAgICAgICAgIHJldHVybiBTdHJpbmcoYXBwbGV0LmFsaWduKCkpOwotICAgIGNh
c2UgQXBwbGV0QWx0OiAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGFwcGxldC5hbHQoKSk7Ci0g
ICAgY2FzZSBBcHBsZXRBcmNoaXZlOiAgICAgICAgIHJldHVybiBTdHJpbmcoYXBwbGV0LmFyY2hp
dmUoKSk7Ci0gICAgY2FzZSBBcHBsZXRDb2RlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYXBw
bGV0LmNvZGUoKSk7Ci0gICAgY2FzZSBBcHBsZXRDb2RlQmFzZTogICAgICAgIHJldHVybiBTdHJp
bmcoYXBwbGV0LmNvZGVCYXNlKCkpOwotICAgIGNhc2UgQXBwbGV0SGVpZ2h0OiAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKGFwcGxldC5oZWlnaHQoKSk7Ci0gICAgY2FzZSBBcHBsZXRIc3BhY2U6ICAg
ICAgICAgIHJldHVybiBTdHJpbmcoYXBwbGV0LmhzcGFjZSgpKTsKLSAgICBjYXNlIEFwcGxldE5h
bWU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhhcHBsZXQubmFtZSgpKTsKLSAgICBjYXNlIEFw
cGxldE9iamVjdDogICAgICAgICAgcmV0dXJuIFN0cmluZyhhcHBsZXQub2JqZWN0KCkpOwotICAg
IGNhc2UgQXBwbGV0VnNwYWNlOiAgICAgICAgICByZXR1cm4gU3RyaW5nKGFwcGxldC52c3BhY2Uo
KSk7Ci0gICAgY2FzZSBBcHBsZXRXaWR0aDogICAgICAgICAgIHJldHVybiBTdHJpbmcoYXBwbGV0
LndpZHRoKCkpOwotICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9NQVA6IHsKLSAgICBI
VE1MTWFwRWxlbWVudEltcGwgJm1hcCA9IHN0YXRpY19jYXN0PEhUTUxNYXBFbGVtZW50SW1wbCAm
PihlbGVtZW50KTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVt
ZW50OjpmaWVsZFNldEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sK
KyAgICBIVE1MRmllbGRTZXRFbGVtZW50SW1wbCYgZmllbGRTZXQgPSAqc3RhdGljX2Nhc3Q8SFRN
TEZpZWxkU2V0RWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIGlmICh0b2tlbiA9PSBGaWVsZFNl
dEZvcm0pCisgICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsZmllbGRTZXQuZm9ybSgpKTsg
Ly8gdHlwZSBIVE1MRm9ybUVsZW1lbnQKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1Zh
bHVlIEhUTUxFbGVtZW50OjpsZWdlbmRHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4p
IGNvbnN0Cit7CisgICAgSFRNTExlZ2VuZEVsZW1lbnRJbXBsJiBsZWdlbmQgPSAqc3RhdGljX2Nh
c3Q8SFRNTExlZ2VuZEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7
Ci0gICAgY2FzZSBNYXBBcmVhczogICAgICAgICAgIHJldHVybiBnZXRIVE1MQ29sbGVjdGlvbihl
eGVjLCBtYXAuYXJlYXMoKS5nZXQoKSk7IC8vIHR5cGUgSFRNTENvbGxlY3Rpb24KLSAgICBjYXNl
IE1hcE5hbWU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhtYXAubmFtZSgpKTsKLSAgICB9Ci0g
IH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfQVJFQTogewotICAgIEhUTUxBcmVhRWxlbWVudEltcGwg
JmFyZWEgPSBzdGF0aWNfY2FzdDxIVE1MQXJlYUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAg
IHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIEFyZWFBY2Nlc3NLZXk6ICAgICAgIHJldHVybiBT
dHJpbmcoYXJlYS5hY2Nlc3NLZXkoKSk7Ci0gICAgY2FzZSBBcmVhQWx0OiAgICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKGFyZWEuYWx0KCkpOwotICAgIGNhc2UgQXJlYUNvb3JkczogICAgICAgICAg
cmV0dXJuIFN0cmluZyhhcmVhLmNvb3JkcygpKTsKLSAgICBjYXNlIEFyZWFIcmVmOiAgICAgICAg
ICAgIHJldHVybiBTdHJpbmcoYXJlYS5ocmVmKCkpOwotICAgIGNhc2UgQXJlYUhhc2g6ICAgICAg
ICAgICAgcmV0dXJuIFN0cmluZygnIycrS1VSTChhcmVhLmhyZWYoKS5zdHJpbmcoKSkucmVmKCkp
OwotICAgIGNhc2UgQXJlYUhvc3Q6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhLVVJMKGFyZWEu
aHJlZigpLnN0cmluZygpKS5ob3N0KCkpOwotICAgIGNhc2UgQXJlYUhvc3ROYW1lOiB7Ci0gICAg
ICBLVVJMIHVybChhcmVhLmhyZWYoKS5zdHJpbmcoKSk7Ci0gICAgICBrZERlYnVnKDYwNzApIDw8
ICJsaW5rOjpob3N0bmFtZSB1c2VzOiIgPDx1cmwudXJsKCk8PGVuZGw7Ci0gICAgICBpZiAodXJs
LnBvcnQoKT09MCkKLSAgICAgICAgcmV0dXJuIFN0cmluZyh1cmwuaG9zdCgpKTsKLSAgICAgIGVs
c2UKLSAgICAgICAgcmV0dXJuIFN0cmluZyh1cmwuaG9zdCgpICsgIjoiICsgUVN0cmluZzo6bnVt
YmVyKHVybC5wb3J0KCkpKTsKKyAgICAgICAgY2FzZSBMZWdlbmRGb3JtOiAgICAgICAgICAgIHJl
dHVybiBnZXRET01Ob2RlKGV4ZWMsbGVnZW5kLmZvcm0oKSk7IC8vIHR5cGUgSFRNTEZvcm1FbGVt
ZW50CisgICAgICAgIGNhc2UgTGVnZW5kQWNjZXNzS2V5OiAgICAgICByZXR1cm4gU3RyaW5nKGxl
Z2VuZC5hY2Nlc3NLZXkoKSk7CisgICAgICAgIGNhc2UgTGVnZW5kQWxpZ246ICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKGxlZ2VuZC5hbGlnbigpKTsKICAgICB9Ci0gICAgY2FzZSBBcmVhUGF0aE5h
bWU6ICAgICAgICByZXR1cm4gU3RyaW5nKEtVUkwoYXJlYS5ocmVmKCkuc3RyaW5nKCkpLnBhdGgo
KSk7Ci0gICAgY2FzZSBBcmVhUG9ydDogICAgICAgICAgICByZXR1cm4gU3RyaW5nKFFTdHJpbmc6
Om51bWJlcihLVVJMKGFyZWEuaHJlZigpLnN0cmluZygpKS5wb3J0KCkpKTsKLSAgICBjYXNlIEFy
ZWFQcm90b2NvbDogICAgICAgIHJldHVybiBTdHJpbmcoS1VSTChhcmVhLmhyZWYoKS5zdHJpbmco
KSkucHJvdG9jb2woKSsiOiIpOwotICAgIGNhc2UgQXJlYVNlYXJjaDogICAgICAgICAgcmV0dXJu
IFN0cmluZyhLVVJMKGFyZWEuaHJlZigpLnN0cmluZygpKS5xdWVyeSgpKTsKLSAgICBjYXNlIEFy
ZWFOb0hyZWY6ICAgICAgICAgIHJldHVybiBCb29sZWFuKGFyZWEubm9IcmVmKCkpOwotICAgIGNh
c2UgQXJlYVNoYXBlOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhhcmVhLnNoYXBlKCkpOwotICAg
IGNhc2UgQXJlYVRhYkluZGV4OiAgICAgICAgcmV0dXJuIE51bWJlcihhcmVhLnRhYkluZGV4KCkp
OwotICAgIGNhc2UgQXJlYVRhcmdldDogICAgICAgICAgcmV0dXJuIFN0cmluZyhhcmVhLnRhcmdl
dCgpKTsKLSAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfU0NSSVBUOiB7Ci0gICAgSFRN
TFNjcmlwdEVsZW1lbnRJbXBsICZzY3JpcHQgPSBzdGF0aWNfY2FzdDxIVE1MU2NyaXB0RWxlbWVu
dEltcGwgJj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgU2NyaXB0
VGV4dDogICAgICAgICAgICByZXR1cm4gU3RyaW5nKHNjcmlwdC50ZXh0KCkpOwotICAgIGNhc2Ug
U2NyaXB0SHRtbEZvcjogICAgICAgICByZXR1cm4gU3RyaW5nKHNjcmlwdC5odG1sRm9yKCkpOwot
ICAgIGNhc2UgU2NyaXB0RXZlbnQ6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHNjcmlwdC5ldmVu
dCgpKTsKLSAgICBjYXNlIFNjcmlwdENoYXJzZXQ6ICAgICAgICAgcmV0dXJuIFN0cmluZyhzY3Jp
cHQuY2hhcnNldCgpKTsKLSAgICBjYXNlIFNjcmlwdERlZmVyOiAgICAgICAgICAgcmV0dXJuIEJv
b2xlYW4oc2NyaXB0LmRlZmVyKCkpOwotICAgIGNhc2UgU2NyaXB0U3JjOiAgICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKHNjcmlwdC5zcmMoKSk7Ci0gICAgY2FzZSBTY3JpcHRUeXBlOiAgICAgICAg
ICAgIHJldHVybiBTdHJpbmcoc2NyaXB0LnR5cGUoKSk7Ci0gICAgfQotICB9Ci0gIGJyZWFrOwot
ICBjYXNlIElEX1RBQkxFOiB7Ci0gICAgSFRNTFRhYmxlRWxlbWVudEltcGwgJnRhYmxlID0gc3Rh
dGljX2Nhc3Q8SFRNTFRhYmxlRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0
b2tlbikgewotICAgIGNhc2UgVGFibGVDYXB0aW9uOiAgICAgICAgIHJldHVybiBnZXRET01Ob2Rl
KGV4ZWMsdGFibGUuY2FwdGlvbigpKTsgLy8gdHlwZSBIVE1MVGFibGVDYXB0aW9uRWxlbWVudAot
ICAgIGNhc2UgVGFibGVUSGVhZDogICAgICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsdGFi
bGUudEhlYWQoKSk7IC8vIHR5cGUgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQKLSAgICBjYXNlIFRh
YmxlVEZvb3Q6ICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLHRhYmxlLnRGb290KCkp
OyAvLyB0eXBlIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50Ci0gICAgY2FzZSBUYWJsZVJvd3M6ICAg
ICAgICAgICAgcmV0dXJuIGdldEhUTUxDb2xsZWN0aW9uKGV4ZWMsIHRhYmxlLnJvd3MoKS5nZXQo
KSk7IC8vIHR5cGUgSFRNTENvbGxlY3Rpb24KLSAgICBjYXNlIFRhYmxlVEJvZGllczogICAgICAg
ICByZXR1cm4gZ2V0SFRNTENvbGxlY3Rpb24oZXhlYywgdGFibGUudEJvZGllcygpLmdldCgpKTsg
Ly8gdHlwZSBIVE1MQ29sbGVjdGlvbgotICAgIGNhc2UgVGFibGVBbGlnbjogICAgICAgICAgIHJl
dHVybiBTdHJpbmcodGFibGUuYWxpZ24oKSk7Ci0gICAgY2FzZSBUYWJsZUJnQ29sb3I6ICAgICAg
ICAgcmV0dXJuIFN0cmluZyh0YWJsZS5iZ0NvbG9yKCkpOwotICAgIGNhc2UgVGFibGVCb3JkZXI6
ICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGUuYm9yZGVyKCkpOwotICAgIGNhc2UgVGFibGVD
ZWxsUGFkZGluZzogICAgIHJldHVybiBTdHJpbmcodGFibGUuY2VsbFBhZGRpbmcoKSk7Ci0gICAg
Y2FzZSBUYWJsZUNlbGxTcGFjaW5nOiAgICAgcmV0dXJuIFN0cmluZyh0YWJsZS5jZWxsU3BhY2lu
ZygpKTsKLSAgICBjYXNlIFRhYmxlRnJhbWU6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxl
LmZyYW1lKCkpOwotICAgIGNhc2UgVGFibGVSdWxlczogICAgICAgICAgIHJldHVybiBTdHJpbmco
dGFibGUucnVsZXMoKSk7Ci0gICAgY2FzZSBUYWJsZVN1bW1hcnk6ICAgICAgICAgcmV0dXJuIFN0
cmluZyh0YWJsZS5zdW1tYXJ5KCkpOwotICAgIGNhc2UgVGFibGVXaWR0aDogICAgICAgICAgIHJl
dHVybiBTdHJpbmcodGFibGUud2lkdGgoKSk7Ci0gICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNl
IElEX0NBUFRJT046IHsKLSAgICBIVE1MVGFibGVDYXB0aW9uRWxlbWVudEltcGwgJnRhYmxlQ2Fw
dGlvbiA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZUNhcHRpb25FbGVtZW50SW1wbCAmPihlbGVtZW50
KTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50Ojp1TGlz
dEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MVUxp
c3RFbGVtZW50SW1wbCYgdUxpc3QgPSAqc3RhdGljX2Nhc3Q8SFRNTFVMaXN0RWxlbWVudEltcGwq
PihpbXBsKCkpOwogICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIFRhYmxlQ2FwdGlvbkFs
aWduOiAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ2FwdGlvbi5hbGlnbigpKTsKLSAgICB9Ci0g
IH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfQ09MOiB7Ci0gICAgSFRNTFRhYmxlQ29sRWxlbWVudElt
cGwgJnRhYmxlQ29sID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ29sRWxlbWVudEltcGwgJj4oZWxl
bWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgVGFibGVDb2xBbGlnbjogICAg
ICAgICAgIHJldHVybiBTdHJpbmcodGFibGVDb2wuYWxpZ24oKSk7Ci0gICAgY2FzZSBUYWJsZUNv
bENoOiAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNvbC5jaCgpKTsKLSAgICBjYXNl
IFRhYmxlQ29sQ2hPZmY6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ29sLmNoT2ZmKCkp
OwotICAgIGNhc2UgVGFibGVDb2xTcGFuOiAgICAgICAgICAgIHJldHVybiBOdW1iZXIodGFibGVD
b2wuc3BhbigpKTsKLSAgICBjYXNlIFRhYmxlQ29sVkFsaWduOiAgICAgICAgICByZXR1cm4gU3Ry
aW5nKHRhYmxlQ29sLnZBbGlnbigpKTsKLSAgICBjYXNlIFRhYmxlQ29sV2lkdGg6ICAgICAgICAg
ICByZXR1cm4gU3RyaW5nKHRhYmxlQ29sLndpZHRoKCkpOwotICAgIH0KLSAgfQotICBicmVhazsK
LSAgY2FzZSBJRF9USEVBRDoKLSAgY2FzZSBJRF9UQk9EWToKLSAgY2FzZSBJRF9URk9PVDogewot
ICAgIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbCAmdGFibGVTZWN0aW9uID0gc3RhdGljX2Nh
c3Q8SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgIHN3aXRjaCAo
dG9rZW4pIHsKLSAgICBjYXNlIFRhYmxlU2VjdGlvbkFsaWduOiAgICAgICAgICAgcmV0dXJuIFN0
cmluZyh0YWJsZVNlY3Rpb24uYWxpZ24oKSk7Ci0gICAgY2FzZSBUYWJsZVNlY3Rpb25DaDogICAg
ICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVTZWN0aW9uLmNoKCkpOwotICAgIGNhc2UgVGFi
bGVTZWN0aW9uQ2hPZmY6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlU2VjdGlvbi5jaE9m
ZigpKTsKLSAgICBjYXNlIFRhYmxlU2VjdGlvblZBbGlnbjogICAgICAgICAgcmV0dXJuIFN0cmlu
Zyh0YWJsZVNlY3Rpb24udkFsaWduKCkpOwotICAgIGNhc2UgVGFibGVTZWN0aW9uUm93czogICAg
ICAgICAgICByZXR1cm4gZ2V0SFRNTENvbGxlY3Rpb24oZXhlYywgdGFibGVTZWN0aW9uLnJvd3Mo
KS5nZXQoKSk7IC8vIHR5cGUgSFRNTENvbGxlY3Rpb24KLSAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0g
IGNhc2UgSURfVFI6IHsKLSAgIEhUTUxUYWJsZVJvd0VsZW1lbnRJbXBsICZ0YWJsZVJvdyA9IHN0
YXRpY19jYXN0PEhUTUxUYWJsZVJvd0VsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgc3dpdGNo
ICh0b2tlbikgewotICAgY2FzZSBUYWJsZVJvd1Jvd0luZGV4OiAgICAgICAgcmV0dXJuIE51bWJl
cih0YWJsZVJvdy5yb3dJbmRleCgpKTsKLSAgIGNhc2UgVGFibGVSb3dTZWN0aW9uUm93SW5kZXg6
IHJldHVybiBOdW1iZXIodGFibGVSb3cuc2VjdGlvblJvd0luZGV4KCkpOwotICAgY2FzZSBUYWJs
ZVJvd0NlbGxzOiAgICAgICAgICAgcmV0dXJuIGdldEhUTUxDb2xsZWN0aW9uKGV4ZWMsIHRhYmxl
Um93LmNlbGxzKCkuZ2V0KCkpOyAvLyB0eXBlIEhUTUxDb2xsZWN0aW9uCi0gICBjYXNlIFRhYmxl
Um93QWxpZ246ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlUm93LmFsaWduKCkpOwotICAg
Y2FzZSBUYWJsZVJvd0JnQ29sb3I6ICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZVJvdy5iZ0Nv
bG9yKCkpOwotICAgY2FzZSBUYWJsZVJvd0NoOiAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0
YWJsZVJvdy5jaCgpKTsKLSAgIGNhc2UgVGFibGVSb3dDaE9mZjogICAgICAgICAgIHJldHVybiBT
dHJpbmcodGFibGVSb3cuY2hPZmYoKSk7Ci0gICBjYXNlIFRhYmxlUm93VkFsaWduOiAgICAgICAg
ICByZXR1cm4gU3RyaW5nKHRhYmxlUm93LnZBbGlnbigpKTsKLSAgIH0KLSAgfQotICBicmVhazsK
LSAgY2FzZSBJRF9USDoKLSAgY2FzZSBJRF9URDogewotICAgIEhUTUxUYWJsZUNlbGxFbGVtZW50
SW1wbCAmdGFibGVDZWxsID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsICY+
KGVsZW1lbnQpOwotICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIFRhYmxlQ2VsbENlbGxJ
bmRleDogICAgICAgcmV0dXJuIE51bWJlcih0YWJsZUNlbGwuY2VsbEluZGV4KCkpOwotICAgIGNh
c2UgVGFibGVDZWxsQWJicjogICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ2VsbC5hYmJy
KCkpOwotICAgIGNhc2UgVGFibGVDZWxsQWxpZ246ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRh
YmxlQ2VsbC5hbGlnbigpKTsKLSAgICBjYXNlIFRhYmxlQ2VsbEF4aXM6ICAgICAgICAgICAgcmV0
dXJuIFN0cmluZyh0YWJsZUNlbGwuYXhpcygpKTsKLSAgICBjYXNlIFRhYmxlQ2VsbEJnQ29sb3I6
ICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNlbGwuYmdDb2xvcigpKTsKLSAgICBjYXNlIFRh
YmxlQ2VsbENoOiAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNlbGwuY2goKSk7Ci0g
ICAgY2FzZSBUYWJsZUNlbGxDaE9mZjogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVDZWxs
LmNoT2ZmKCkpOwotICAgIGNhc2UgVGFibGVDZWxsQ29sU3BhbjogICAgICAgICByZXR1cm4gTnVt
YmVyKHRhYmxlQ2VsbC5jb2xTcGFuKCkpOwotICAgIGNhc2UgVGFibGVDZWxsSGVhZGVyczogICAg
ICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ2VsbC5oZWFkZXJzKCkpOwotICAgIGNhc2UgVGFibGVD
ZWxsSGVpZ2h0OiAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ2VsbC5oZWlnaHQoKSk7Ci0g
ICAgY2FzZSBUYWJsZUNlbGxOb1dyYXA6ICAgICAgICAgIHJldHVybiBCb29sZWFuKHRhYmxlQ2Vs
bC5ub1dyYXAoKSk7Ci0gICAgY2FzZSBUYWJsZUNlbGxSb3dTcGFuOiAgICAgICAgIHJldHVybiBO
dW1iZXIodGFibGVDZWxsLnJvd1NwYW4oKSk7Ci0gICAgY2FzZSBUYWJsZUNlbGxTY29wZTogICAg
ICAgICAgIHJldHVybiBTdHJpbmcodGFibGVDZWxsLnNjb3BlKCkpOwotICAgIGNhc2UgVGFibGVD
ZWxsVkFsaWduOiAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ2VsbC52QWxpZ24oKSk7Ci0g
ICAgY2FzZSBUYWJsZUNlbGxXaWR0aDogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVDZWxs
LndpZHRoKCkpOworICAgICAgICBjYXNlIFVMaXN0Q29tcGFjdDogICAgICAgICByZXR1cm4gQm9v
bGVhbih1TGlzdC5jb21wYWN0KCkpOworICAgICAgICBjYXNlIFVMaXN0VHlwZTogICAgICAgICAg
ICByZXR1cm4gU3RyaW5nKHVMaXN0LnR5cGUoKSk7CiAgICAgfQotICB9Ci0gIGJyZWFrOwotICBj
YXNlIElEX0ZSQU1FU0VUOiB7Ci0gICAgSFRNTEZyYW1lU2V0RWxlbWVudEltcGwgJmZyYW1lU2V0
ID0gc3RhdGljX2Nhc3Q8SFRNTEZyYW1lU2V0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAg
cmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6b0xpc3RHZXR0ZXIo
RXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTE9MaXN0RWxlbWVu
dEltcGwmIG9MaXN0ID0gKnN0YXRpY19jYXN0PEhUTUxPTGlzdEVsZW1lbnRJbXBsKj4oaW1wbCgp
KTsKICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBGcmFtZVNldENvbHM6ICAgICAgICAg
ICAgcmV0dXJuIFN0cmluZyhmcmFtZVNldC5jb2xzKCkpOwotICAgIGNhc2UgRnJhbWVTZXRSb3dz
OiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoZnJhbWVTZXQucm93cygpKTsKLSAgICB9Ci0gIH0K
LSAgYnJlYWs7Ci0gIGNhc2UgSURfRlJBTUU6IHsKLSAgICBIVE1MRnJhbWVFbGVtZW50SW1wbCAm
ZnJhbWVFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEZyYW1lRWxlbWVudEltcGwgJj4oZWxlbWVu
dCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgRnJhbWVDb250ZW50RG9jdW1lbnQ6
IHJldHVybiBjaGVja05vZGVTZWN1cml0eShleGVjLGZyYW1lRWxlbWVudC5jb250ZW50RG9jdW1l
bnQoKSkgPyAKLQkJCQkgICAgICBnZXRET01Ob2RlKGV4ZWMsIGZyYW1lRWxlbWVudC5jb250ZW50
RG9jdW1lbnQoKSkgOiBVbmRlZmluZWQoKTsKLSAgICBjYXNlIEZyYW1lQ29udGVudFdpbmRvdzog
ICByZXR1cm4gY2hlY2tOb2RlU2VjdXJpdHkoZXhlYyxmcmFtZUVsZW1lbnQuY29udGVudERvY3Vt
ZW50KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFdpbmRvdzo6cmV0
cmlldmUoZnJhbWVFbGVtZW50LmNvbnRlbnRQYXJ0KCkpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA6IFVuZGVmaW5lZCgpOwotICAgIGNhc2UgRnJhbWVGcmFtZUJvcmRlcjog
ICAgIHJldHVybiBTdHJpbmcoZnJhbWVFbGVtZW50LmZyYW1lQm9yZGVyKCkpOwotICAgIGNhc2Ug
RnJhbWVMb25nRGVzYzogICAgICAgIHJldHVybiBTdHJpbmcoZnJhbWVFbGVtZW50LmxvbmdEZXNj
KCkpOwotICAgIGNhc2UgRnJhbWVNYXJnaW5IZWlnaHQ6ICAgIHJldHVybiBTdHJpbmcoZnJhbWVF
bGVtZW50Lm1hcmdpbkhlaWdodCgpKTsKLSAgICBjYXNlIEZyYW1lTWFyZ2luV2lkdGg6ICAgICBy
ZXR1cm4gU3RyaW5nKGZyYW1lRWxlbWVudC5tYXJnaW5XaWR0aCgpKTsKLSAgICBjYXNlIEZyYW1l
TmFtZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGZyYW1lRWxlbWVudC5uYW1lKCkpOwotICAg
IGNhc2UgRnJhbWVOb1Jlc2l6ZTogICAgICAgIHJldHVybiBCb29sZWFuKGZyYW1lRWxlbWVudC5u
b1Jlc2l6ZSgpKTsKLSAgICBjYXNlIEZyYW1lU2Nyb2xsaW5nOiAgICAgICByZXR1cm4gU3RyaW5n
KGZyYW1lRWxlbWVudC5zY3JvbGxpbmcoKSk7Ci0gICAgY2FzZSBGcmFtZVNyYzoKLSAgICBjYXNl
IEZyYW1lTG9jYXRpb246ICAgICAgICByZXR1cm4gU3RyaW5nKGZyYW1lRWxlbWVudC5zcmMoKSk7
CisgICAgICAgIGNhc2UgT0xpc3RDb21wYWN0OiAgICAgICAgIHJldHVybiBCb29sZWFuKG9MaXN0
LmNvbXBhY3QoKSk7CisgICAgICAgIGNhc2UgT0xpc3RTdGFydDogICAgICAgICAgIHJldHVybiBO
dW1iZXIob0xpc3Quc3RhcnQoKSk7CisgICAgICAgIGNhc2UgT0xpc3RUeXBlOiAgICAgICAgICAg
IHJldHVybiBTdHJpbmcob0xpc3QudHlwZSgpKTsKICAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNh
c2UgSURfSUZSQU1FOiB7Ci0gICAgSFRNTElGcmFtZUVsZW1lbnRJbXBsICZpRnJhbWUgPSBzdGF0
aWNfY2FzdDxIVE1MSUZyYW1lRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0
b2tlbikgewotICAgIGNhc2UgSUZyYW1lQWxpZ246ICAgICAgICAgICAgICAgIHJldHVybiBTdHJp
bmcoaUZyYW1lLmFsaWduKCkpOwotICAgICAgLy8gIyMjIHNlY3VyaXR5IGNoZWNrID8KLSAgICBj
YXNlIElGcmFtZURvY3VtZW50OiAvLyBub24tc3RhbmRhcmQsIG1hcHBlZCB0byBjb250ZW50RG9j
dW1lbnQKLSAgICBjYXNlIElGcmFtZUNvbnRlbnREb2N1bWVudDogcmV0dXJuIGNoZWNrTm9kZVNl
Y3VyaXR5KGV4ZWMsaUZyYW1lLmNvbnRlbnREb2N1bWVudCgpKSA/IAotCQkJCSAgZ2V0RE9NTm9k
ZShleGVjLCBpRnJhbWUuY29udGVudERvY3VtZW50KCkpIDogVW5kZWZpbmVkKCk7Ci0gICAgY2Fz
ZSBJRnJhbWVDb250ZW50V2luZG93OglyZXR1cm4gY2hlY2tOb2RlU2VjdXJpdHkoZXhlYyxpRnJh
bWUuY29udGVudERvY3VtZW50KCkpIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgPyBXaW5kb3c6OnJldHJpZXZlKGlGcmFtZS5jb250ZW50UGFydCgpKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOiBVbmRlZmluZWQoKTsKLSAgICBjYXNlIElGcmFtZUZy
YW1lQm9yZGVyOiAgICAgcmV0dXJuIFN0cmluZyhpRnJhbWUuZnJhbWVCb3JkZXIoKSk7Ci0gICAg
Y2FzZSBJRnJhbWVIZWlnaHQ6ICAgICAgICAgIHJldHVybiBTdHJpbmcoaUZyYW1lLmhlaWdodCgp
KTsKLSAgICBjYXNlIElGcmFtZUxvbmdEZXNjOiAgICAgICAgcmV0dXJuIFN0cmluZyhpRnJhbWUu
bG9uZ0Rlc2MoKSk7Ci0gICAgY2FzZSBJRnJhbWVNYXJnaW5IZWlnaHQ6ICAgIHJldHVybiBTdHJp
bmcoaUZyYW1lLm1hcmdpbkhlaWdodCgpKTsKLSAgICBjYXNlIElGcmFtZU1hcmdpbldpZHRoOiAg
ICAgcmV0dXJuIFN0cmluZyhpRnJhbWUubWFyZ2luV2lkdGgoKSk7Ci0gICAgY2FzZSBJRnJhbWVO
YW1lOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoaUZyYW1lLm5hbWUoKSk7Ci0gICAgY2FzZSBJ
RnJhbWVTY3JvbGxpbmc6ICAgICAgIHJldHVybiBTdHJpbmcoaUZyYW1lLnNjcm9sbGluZygpKTsK
LSAgICBjYXNlIElGcmFtZVNyYzogICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpRnJhbWUuc3Jj
KCkpOwotICAgIGNhc2UgSUZyYW1lV2lkdGg6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGlGcmFt
ZS53aWR0aCgpKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0gIH0KLSAgfSAvLyB4ZW1hY3MgKG9yIGFy
bnQpIGNvdWxkIGJlIGEgYml0IHNtYXJ0ZXIgd2hlbiBpdCBjb21lcyB0byBpbmRlbnRpbmcgc3dp
dGNoKCllcyA7KQotICAvLyBpdHMgbm90IGFybnQgdG8gYmxhbWUgLSBpdHMgdGhlIG9yaWdpbmFs
IFN0cm91c3RydXAgc3R5bGUgd2UgbGlrZSA6KSAoRGlyaykKKyAgICByZXR1cm4gVW5kZWZpbmVk
KCk7Cit9CiAKLSAgLy8gZ2VuZXJpYyBwcm9wZXJ0aWVzCi0gIHN3aXRjaCAodG9rZW4pIHsKLSAg
Y2FzZSBFbGVtZW50SWQ6Ci0gICAgICAvLyBpaHQuY29tIHJlbGllcyBvbiB0aGlzIHZhbHVlIGJl
aW5nICIiIHdoZW4gbm8gaWQgaXMgcHJlc2VudC4gIE90aGVyIGJyb3dzZXJzIGRvIHRoaXMgYXMg
d2VsbC4KLSAgICAgIC8vIFNvIHdlIHVzZSBTdHJpbmcoKSBpbnN0ZWFkIG9mIFN0cmluZygpIGhl
cmUuCi0gICAgcmV0dXJuIFN0cmluZyhlbGVtZW50LmlkRE9NKCkpOwotICBjYXNlIEVsZW1lbnRU
aXRsZToKLSAgICByZXR1cm4gU3RyaW5nKGVsZW1lbnQudGl0bGUoKSk7Ci0gIGNhc2UgRWxlbWVu
dExhbmc6Ci0gICAgcmV0dXJuIFN0cmluZyhlbGVtZW50LmxhbmcoKSk7Ci0gIGNhc2UgRWxlbWVu
dERpcjoKLSAgICByZXR1cm4gU3RyaW5nKGVsZW1lbnQuZGlyKCkpOwotICBjYXNlIEVsZW1lbnRD
bGFzc05hbWU6Ci0gICAgcmV0dXJuIFN0cmluZyhlbGVtZW50LmNsYXNzTmFtZSgpKTsKLSAgY2Fz
ZSBFbGVtZW50SW5uZXJIVE1MOgotICAgIHJldHVybiBTdHJpbmcoZWxlbWVudC5pbm5lckhUTUwo
KSk7Ci0gIGNhc2UgRWxlbWVudElubmVyVGV4dDoKLSAgICBpZiAoRG9jdW1lbnRJbXBsKiBkb2Mg
PSBpbXBsKCktPmdldERvY3VtZW50KCkpCi0gICAgICBkb2MtPnVwZGF0ZUxheW91dElnbm9yZVBl
bmRpbmdTdHlsZXNoZWV0cygpOwotICAgIHJldHVybiBTdHJpbmcoZWxlbWVudC5pbm5lclRleHQo
KSk7Ci0gIGNhc2UgRWxlbWVudE91dGVySFRNTDoKLSAgICByZXR1cm4gU3RyaW5nKGVsZW1lbnQu
b3V0ZXJIVE1MKCkpOwotICBjYXNlIEVsZW1lbnRPdXRlclRleHQ6Ci0gICAgcmV0dXJuIFN0cmlu
ZyhlbGVtZW50Lm91dGVyVGV4dCgpKTsKLSAgY2FzZSBFbGVtZW50RG9jdW1lbnQ6Ci0gICAgcmV0
dXJuIGdldERPTU5vZGUoZXhlYyxlbGVtZW50Lm93bmVyRG9jdW1lbnQoKSk7Ci0gIGNhc2UgRWxl
bWVudENoaWxkcmVuOgotICAgIHJldHVybiBnZXRIVE1MQ29sbGVjdGlvbihleGVjLCBlbGVtZW50
LmNoaWxkcmVuKCkuZ2V0KCkpOwotICBjYXNlIEVsZW1lbnRDb250ZW50RWRpdGFibGU6Ci0gICAg
cmV0dXJuIFN0cmluZyhlbGVtZW50LmNvbnRlbnRFZGl0YWJsZSgpKTsKLSAgY2FzZSBFbGVtZW50
SXNDb250ZW50RWRpdGFibGU6Ci0gICAgcmV0dXJuIEJvb2xlYW4oZWxlbWVudC5pc0NvbnRlbnRF
ZGl0YWJsZSgpKTsKLSAgLy8gIyMjIHdoYXQgYWJvdXQgc3R5bGU/IG9yIGlzIHRoaXMgdXNlZCBp
bnN0ZWFkIGZvciBET00yIHN0eWxlc2hlZXRzPwotICB9Ci0gIGtkV2FybmluZygpIDw8ICJIVE1M
RWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eSB1bmhhbmRsZWQgdG9rZW4gIiA8PCB0b2tlbiA8PCBl
bmRsOwotICByZXR1cm4gVW5kZWZpbmVkKCk7CitWYWx1ZSBIVE1MRWxlbWVudDo6ZExpc3RHZXR0
ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTERMaXN0RWxl
bWVudEltcGwmIGRMaXN0ID0gKnN0YXRpY19jYXN0PEhUTUxETGlzdEVsZW1lbnRJbXBsKj4oaW1w
bCgpKTsKKyAgICBpZiAodG9rZW4gPT0gRExpc3RDb21wYWN0KQorICAgICAgICByZXR1cm4gQm9v
bGVhbihkTGlzdC5jb21wYWN0KCkpOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotYm9v
bCBLSlM6OkhUTUxFbGVtZW50OjpoYXNQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElk
ZW50aWZpZXIgJnByb3BlcnR5TmFtZSkgY29uc3QKK1ZhbHVlIEhUTUxFbGVtZW50OjpkaXJHZXR0
ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7Ci0jaWZkZWYgS0pTX1ZFUkJP
U0UKLSAgLy9rZERlYnVnKDYwNzApIDw8ICJIVE1MRWxlbWVudDo6aGFzUHJvcGVydHkgIiA8PCBw
cm9wZXJ0eU5hbWUucXN0cmluZygpIDw8IGVuZGw7Ci0jZW5kaWYKLSAgSFRNTEVsZW1lbnRJbXBs
ICZlbGVtZW50ID0gKnN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCAqPihpbXBsKCkpOwotICAv
LyBGaXJzdCBsb29rIGF0IGR5bmFtaWMgcHJvcGVydGllcyAtIGtlZXAgdGhpcyBpbiBzeW5jIHdp
dGggdHJ5R2V0Ci0gIHN3aXRjaCAoZWxlbWVudC5pZCgpKSB7Ci0gICAgY2FzZSBJRF9GT1JNOiB7
Ci0gICAgICBIVE1MRm9ybUVsZW1lbnRJbXBsICZmb3JtID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1F
bGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIC8vIENoZWNrIGlmIHdlJ3JlIHJldHJpZXZp
bmcgYW4gZWxlbWVudCAoYnkgaW5kZXggb3IgYnkgbmFtZSkKLSAgICAgIGJvb2wgb2s7Ci0gICAg
ICB1aW50IHUgPSBwcm9wZXJ0eU5hbWUudG9VTG9uZygmb2spOwotICAgICAgaWYgKG9rICYmIGZv
cm0uZWxlbWVudHMoKS0+aXRlbSh1KSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICBpZiAo
Zm9ybS5lbGVtZW50cygpLT5uYW1lZEl0ZW0ocHJvcGVydHlOYW1lLnN0cmluZygpKSkKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBJRF9TRUxFQ1Q6
IHsKLSAgICAgIEhUTUxTZWxlY3RFbGVtZW50SW1wbCAmc2VsZWN0ID0gc3RhdGljX2Nhc3Q8SFRN
TFNlbGVjdEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgYm9vbCBvazsKLSAgICAgIHVp
bnQgdSA9IHByb3BlcnR5TmFtZS50b1VMb25nKCZvayk7Ci0gICAgICBpZiAob2sgJiYgc2VsZWN0
Lm9wdGlvbnNIVE1MQ29sbGVjdGlvbigpLT5pdGVtKHUpKQotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KKyAg
ICBIVE1MRGlyZWN0b3J5RWxlbWVudEltcGwmIGRpciA9ICpzdGF0aWNfY2FzdDxIVE1MRGlyZWN0
b3J5RWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIGlmICh0b2tlbiA9PSBEaXJlY3RvcnlDb21w
YWN0KQorICAgICAgICByZXR1cm4gQm9vbGVhbihkaXIuY29tcGFjdCgpKTsKKyAgICByZXR1cm4g
VW5kZWZpbmVkKCk7Cit9CiAKLSAgcmV0dXJuIERPTUVsZW1lbnQ6Omhhc1Byb3BlcnR5KGV4ZWMs
IHByb3BlcnR5TmFtZSk7CitWYWx1ZSBIVE1MRWxlbWVudDo6bWVudUdldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MTWVudUVsZW1lbnRJbXBsJiBtZW51
ID0gKnN0YXRpY19jYXN0PEhUTUxNZW51RWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIGlmICh0
b2tlbiA9PSBNZW51Q29tcGFjdCkKKyAgICAgICAgcmV0dXJuIEJvb2xlYW4obWVudS5jb21wYWN0
KCkpOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotVVN0cmluZyBLSlM6OkhUTUxFbGVt
ZW50Ojp0b1N0cmluZyhFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0CitWYWx1ZSBIVE1MRWxlbWVudDo6
bGlHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7Ci0gIGlmIChpbXBs
KCktPmlkKCkgPT0gSURfQSkKLSAgICByZXR1cm4gVVN0cmluZyhzdGF0aWNfY2FzdDxjb25zdCBI
VE1MQW5jaG9yRWxlbWVudEltcGwgKj4oaW1wbCgpKS0+aHJlZigpKTsKLSAgZWxzZQotICAgIHJl
dHVybiBET01FbGVtZW50Ojp0b1N0cmluZyhleGVjKTsKKyAgICBIVE1MTElFbGVtZW50SW1wbCYg
bGkgPSAqc3RhdGljX2Nhc3Q8SFRNTExJRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRj
aCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBMSVR5cGU6ICAgICAgICAgICAgcmV0dXJuIFN0cmlu
ZyhsaS50eXBlKCkpOworICAgICAgICBjYXNlIExJVmFsdWU6ICAgICAgICAgICByZXR1cm4gTnVt
YmVyKGxpLnZhbHVlKCkpOworICAgIH0KKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLXN0
YXRpYyBIVE1MRm9ybUVsZW1lbnRJbXBsICpnZXRGb3JtKEhUTUxFbGVtZW50SW1wbCAqZWxlbWVu
dCkKK1ZhbHVlIEhUTUxFbGVtZW50OjpkaXZHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0CiB7Ci0gIGlmIChlbGVtZW50LT5pc0dlbmVyaWNGb3JtRWxlbWVudCgpKQotICAg
IHJldHVybiBzdGF0aWNfY2FzdDxIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbCAqPihlbGVtZW50
KS0+Zm9ybSgpOworICAgIEhUTUxEaXZFbGVtZW50SW1wbCYgZGl2ID0gKnN0YXRpY19jYXN0PEhU
TUxEaXZFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IERpdkFsaWduKQor
ICAgICAgICByZXR1cm4gU3RyaW5nKGRpdi5hbGlnbigpKTsKKyAgICByZXR1cm4gVW5kZWZpbmVk
KCk7Cit9CiAKLSAgc3dpdGNoIChlbGVtZW50LT5pZCgpKSB7Ci0gICAgY2FzZSBJRF9MQUJFTDoK
LSAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MTGFiZWxFbGVtZW50SW1wbCAqPihlbGVtZW50
KS0+Zm9ybSgpOwotICAgIGNhc2UgSURfT0JKRUNUOgotICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PEhUTUxPYmplY3RFbGVtZW50SW1wbCAqPihlbGVtZW50KS0+Zm9ybSgpOwotICB9CitWYWx1ZSBI
VE1MRWxlbWVudDo6cGFyYWdyYXBoR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBj
b25zdAoreworICAgIEhUTUxQYXJhZ3JhcGhFbGVtZW50SW1wbCYgcCA9ICpzdGF0aWNfY2FzdDxI
VE1MUGFyYWdyYXBoRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIGlmICh0b2tlbiA9PSBQYXJh
Z3JhcGhBbGlnbikKKyAgICAgICAgcmV0dXJuIFN0cmluZyhwLmFsaWduKCkpOworICAgIHJldHVy
biBVbmRlZmluZWQoKTsKK30KIAotICByZXR1cm4gMDsKK1ZhbHVlIEhUTUxFbGVtZW50OjpoZWFk
aW5nR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxI
ZWFkaW5nRWxlbWVudEltcGwmIGggPSAqc3RhdGljX2Nhc3Q8SFRNTEhlYWRpbmdFbGVtZW50SW1w
bCo+KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IEhlYWRpbmdBbGlnbikKKyAgICAgICAgcmV0
dXJuIFN0cmluZyhoLmFsaWduKCkpOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotdm9p
ZCBLSlM6OkhUTUxFbGVtZW50OjpwdXNoRXZlbnRIYW5kbGVyU2NvcGUoRXhlY1N0YXRlICpleGVj
LCBTY29wZUNoYWluICZzY29wZSkgY29uc3QKK1ZhbHVlIEhUTUxFbGVtZW50OjpibG9ja1F1b3Rl
R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxCbG9j
a3F1b3RlRWxlbWVudEltcGwmIGJsb2NrUXVvdGUgPSAqc3RhdGljX2Nhc3Q8SFRNTEJsb2NrcXVv
dGVFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IEJsb2NrUXVvdGVDaXRl
KQorICAgICAgICByZXR1cm4gU3RyaW5nKGJsb2NrUXVvdGUuY2l0ZSgpKTsKKyAgICByZXR1cm4g
VW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50OjpxdW90ZUdldHRlcihFeGVjU3Rh
dGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MUXVvdGVFbGVtZW50SW1wbCYg
cXVvdGUgPSAqc3RhdGljX2Nhc3Q8SFRNTFF1b3RlRWxlbWVudEltcGwqPihpbXBsKCkpOworICAg
IGlmICh0b2tlbiA9PSBRdW90ZUNpdGUpCisgICAgICAgIHJldHVybiBTdHJpbmcocXVvdGUuY2l0
ZSgpKTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50Ojpw
cmVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgLy8gRklY
TUU6IEFkZCBzdXBwb3J0IGZvciAnd3JhcCcgd2hlbiB3aGl0ZS1zcGFjZTogcHJlLXdyYXAgaXMg
aW1wbGVtZW50ZWQuCisgICAgSFRNTFByZUVsZW1lbnRJbXBsJiBwcmUgPSAqc3RhdGljX2Nhc3Q8
SFRNTFByZUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBpZiAodG9rZW4gPT0gUHJlV2lkdGgp
CisgICAgICAgIHJldHVybiBOdW1iZXIocHJlLndpZHRoKCkpOworICAgIHJldHVybiBVbmRlZmlu
ZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OmJyR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywg
aW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxCUkVsZW1lbnRJbXBsJiBiciA9ICpzdGF0aWNf
Y2FzdDxIVE1MQlJFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IEJSQ2xl
YXIpCisgICAgICAgIHJldHVybiBTdHJpbmcoYnIuY2xlYXIoKSk7CisgICAgcmV0dXJuIFVuZGVm
aW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6YmFzZUZvbnRHZXR0ZXIoRXhlY1N0YXRl
KiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTEJhc2VGb250RWxlbWVudEltcGwm
IGJhc2VGb250ID0gKnN0YXRpY19jYXN0PEhUTUxCYXNlRm9udEVsZW1lbnRJbXBsKj4oaW1wbCgp
KTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgQmFzZUZvbnRDb2xvcjogICAg
ICAgICAgIHJldHVybiBTdHJpbmcoYmFzZUZvbnQuY29sb3IoKSk7CisgICAgICAgIGNhc2UgQmFz
ZUZvbnRGYWNlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYmFzZUZvbnQuZmFjZSgpKTsKKyAg
ICAgICAgY2FzZSBCYXNlRm9udFNpemU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhiYXNlRm9u
dC5zaXplKCkpOworICAgIH0KKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhU
TUxFbGVtZW50Ojpmb250R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAor
eworICAgIEhUTUxGb250RWxlbWVudEltcGwmIGZvbnQgPSAqc3RhdGljX2Nhc3Q8SFRNTEZvbnRF
bGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNl
IEZvbnRDb2xvcjogICAgICAgICAgIHJldHVybiBTdHJpbmcoZm9udC5jb2xvcigpKTsKKyAgICAg
ICAgY2FzZSBGb250RmFjZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGZvbnQuZmFjZSgpKTsK
KyAgICAgICAgY2FzZSBGb250U2l6ZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGZvbnQuc2l6
ZSgpKTsKKyAgICB9CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxl
bWVudDo6aHJHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAg
SFRNTEhSRWxlbWVudEltcGwmIGhyID0gKnN0YXRpY19jYXN0PEhUTUxIUkVsZW1lbnRJbXBsKj4o
aW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgSFJBbGlnbjogICAg
ICAgICAgIHJldHVybiBTdHJpbmcoaHIuYWxpZ24oKSk7CisgICAgICAgIGNhc2UgSFJOb1NoYWRl
OiAgICAgICAgIHJldHVybiBCb29sZWFuKGhyLm5vU2hhZGUoKSk7CisgICAgICAgIGNhc2UgSFJT
aXplOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoaHIuc2l6ZSgpKTsKKyAgICAgICAgY2FzZSBI
UldpZHRoOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhoci53aWR0aCgpKTsKKyAgICB9CisgICAg
cmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6bW9kR2V0dGVyKEV4
ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxNb2RFbGVtZW50SW1w
bCYgbW9kID0gKnN0YXRpY19jYXN0PEhUTUxNb2RFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAg
c3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNlIE1vZENpdGU6ICAgICAgICAgICAgcmV0dXJu
IFN0cmluZyhtb2QuY2l0ZSgpKTsKKyAgICAgICAgY2FzZSBNb2REYXRlVGltZTogICAgICAgIHJl
dHVybiBTdHJpbmcobW9kLmRhdGVUaW1lKCkpOworICAgIH0KKyAgICByZXR1cm4gVW5kZWZpbmVk
KCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50OjphbmNob3JHZXR0ZXIoRXhlY1N0YXRlKiBleGVj
LCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTEFuY2hvckVsZW1lbnRJbXBsJiBhbmNob3Ig
PSAqc3RhdGljX2Nhc3Q8SFRNTEFuY2hvckVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0
Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgQW5jaG9yQWNjZXNzS2V5OiAgICAgICByZXR1cm4g
U3RyaW5nKGFuY2hvci5hY2Nlc3NLZXkoKSk7CisgICAgICAgIGNhc2UgQW5jaG9yQ2hhcnNldDog
ICAgICAgICByZXR1cm4gU3RyaW5nKGFuY2hvci5jaGFyc2V0KCkpOworICAgICAgICBjYXNlIEFu
Y2hvckNvb3JkczogICAgICAgICAgcmV0dXJuIFN0cmluZyhhbmNob3IuY29vcmRzKCkpOworICAg
ICAgICBjYXNlIEFuY2hvckhyZWY6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhhbmNob3IuaHJl
ZigpKTsKKyAgICAgICAgY2FzZSBBbmNob3JIcmVmTGFuZzogICAgICAgIHJldHVybiBTdHJpbmco
YW5jaG9yLmhyZWZsYW5nKCkpOworICAgICAgICBjYXNlIEFuY2hvckhhc2g6ICAgICAgICAgICAg
cmV0dXJuIFN0cmluZygnIycrS1VSTChhbmNob3IuaHJlZigpLnN0cmluZygpKS5yZWYoKSk7Cisg
ICAgICAgIGNhc2UgQW5jaG9ySG9zdDogICAgICAgICAgICByZXR1cm4gU3RyaW5nKEtVUkwoYW5j
aG9yLmhyZWYoKS5zdHJpbmcoKSkuaG9zdCgpKTsKKyAgICAgICAgY2FzZSBBbmNob3JIb3N0bmFt
ZTogeworICAgICAgICAgICAgS1VSTCB1cmwoYW5jaG9yLmhyZWYoKS5zdHJpbmcoKSk7CisgICAg
ICAgICAgICBrZERlYnVnKDYwNzApIDw8ICJhbmNob3I6Omhvc3RuYW1lIHVzZXM6IiA8PHVybC51
cmwoKTw8ZW5kbDsKKyAgICAgICAgICAgIGlmICh1cmwucG9ydCgpPT0wKQorICAgICAgICAgICAg
ICAgIHJldHVybiBTdHJpbmcodXJsLmhvc3QoKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgcmV0dXJuIFN0cmluZyh1cmwuaG9zdCgpICsgIjoiICsgUVN0cmluZzo6bnVtYmVy
KHVybC5wb3J0KCkpKTsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEFuY2hvclBhdGhOYW1lOiAg
ICAgICAgcmV0dXJuIFN0cmluZyhLVVJMKGFuY2hvci5ocmVmKCkuc3RyaW5nKCkpLnBhdGgoKSk7
CisgICAgICAgIGNhc2UgQW5jaG9yUG9ydDogICAgICAgICAgICByZXR1cm4gU3RyaW5nKFFTdHJp
bmc6Om51bWJlcihLVVJMKGFuY2hvci5ocmVmKCkuc3RyaW5nKCkpLnBvcnQoKSkpOworICAgICAg
ICBjYXNlIEFuY2hvclByb3RvY29sOiAgICAgICAgcmV0dXJuIFN0cmluZyhLVVJMKGFuY2hvci5o
cmVmKCkuc3RyaW5nKCkpLnByb3RvY29sKCkrIjoiKTsKKyAgICAgICAgY2FzZSBBbmNob3JTZWFy
Y2g6ICAgICAgICAgIHJldHVybiBTdHJpbmcoS1VSTChhbmNob3IuaHJlZigpLnN0cmluZygpKS5x
dWVyeSgpKTsKKyAgICAgICAgY2FzZSBBbmNob3JOYW1lOiAgICAgICAgICAgIHJldHVybiBTdHJp
bmcoYW5jaG9yLm5hbWUoKSk7CisgICAgICAgIGNhc2UgQW5jaG9yUmVsOiAgICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKGFuY2hvci5yZWwoKSk7CisgICAgICAgIGNhc2UgQW5jaG9yUmV2OiAgICAg
ICAgICAgICByZXR1cm4gU3RyaW5nKGFuY2hvci5yZXYoKSk7CisgICAgICAgIGNhc2UgQW5jaG9y
U2hhcGU6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGFuY2hvci5zaGFwZSgpKTsKKyAgICAgICAg
Y2FzZSBBbmNob3JUYWJJbmRleDogICAgICAgIHJldHVybiBOdW1iZXIoYW5jaG9yLnRhYkluZGV4
KCkpOworICAgICAgICBjYXNlIEFuY2hvclRhcmdldDogICAgICAgICAgcmV0dXJuIFN0cmluZyhh
bmNob3IudGFyZ2V0KCkpOworICAgICAgICBjYXNlIEFuY2hvclR5cGU6ICAgICAgICAgICAgcmV0
dXJuIFN0cmluZyhhbmNob3IudHlwZSgpKTsKKyAgICAgICAgY2FzZSBBbmNob3JUZXh0OgorICAg
ICAgICAgICAgaWYgKERvY3VtZW50SW1wbCogZG9jID0gYW5jaG9yLmdldERvY3VtZW50KCkpCisg
ICAgICAgICAgICAgICAgZG9jLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMo
KTsKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYW5jaG9yLmlubmVyVGV4dCgpKTsKKyAgICB9
CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6aW1hZ2VH
ZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTEltYWdl
RWxlbWVudEltcGwmIGltYWdlID0gKnN0YXRpY19jYXN0PEhUTUxJbWFnZUVsZW1lbnRJbXBsKj4o
aW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgSW1hZ2VOYW1lOiAg
ICAgICAgICAgIHJldHVybiBTdHJpbmcoaW1hZ2UubmFtZSgpKTsKKyAgICAgICAgY2FzZSBJbWFn
ZUFsaWduOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpbWFnZS5hbGlnbigpKTsKKyAgICAgICAg
Y2FzZSBJbWFnZUFsdDogICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpbWFnZS5hbHQoKSk7Cisg
ICAgICAgIGNhc2UgSW1hZ2VCb3JkZXI6ICAgICAgICAgIHJldHVybiBOdW1iZXIoaW1hZ2UuYm9y
ZGVyKCkpOworICAgICAgICBjYXNlIEltYWdlSGVpZ2h0OiAgICAgICAgICByZXR1cm4gTnVtYmVy
KGltYWdlLmhlaWdodCh0cnVlKSk7CisgICAgICAgIGNhc2UgSW1hZ2VIc3BhY2U6ICAgICAgICAg
IHJldHVybiBOdW1iZXIoaW1hZ2UuaHNwYWNlKCkpOworICAgICAgICBjYXNlIEltYWdlSXNNYXA6
ICAgICAgICAgICByZXR1cm4gQm9vbGVhbihpbWFnZS5pc01hcCgpKTsKKyAgICAgICAgY2FzZSBJ
bWFnZUxvbmdEZXNjOiAgICAgICAgcmV0dXJuIFN0cmluZyhpbWFnZS5sb25nRGVzYygpKTsKKyAg
ICAgICAgY2FzZSBJbWFnZVNyYzogICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpbWFnZS5zcmMo
KSk7CisgICAgICAgIGNhc2UgSW1hZ2VVc2VNYXA6ICAgICAgICAgIHJldHVybiBTdHJpbmcoaW1h
Z2UudXNlTWFwKCkpOworICAgICAgICBjYXNlIEltYWdlVnNwYWNlOiAgICAgICAgICByZXR1cm4g
TnVtYmVyKGltYWdlLnZzcGFjZSgpKTsKKyAgICAgICAgY2FzZSBJbWFnZVdpZHRoOiAgICAgICAg
ICAgcmV0dXJuIE51bWJlcihpbWFnZS53aWR0aCh0cnVlKSk7CisgICAgICAgIGNhc2UgSW1hZ2VY
OiAgICAgICAgICAgICAgIHJldHVybiBOdW1iZXIoaW1hZ2UueCgpKTsKKyAgICAgICAgY2FzZSBJ
bWFnZVk6ICAgICAgICAgICAgICAgcmV0dXJuIE51bWJlcihpbWFnZS55KCkpOworICAgIH0KKyAg
ICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50OjpvYmplY3RHZXR0
ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTE9iamVjdEVs
ZW1lbnRJbXBsJiBvYmplY3QgPSAqc3RhdGljX2Nhc3Q8SFRNTE9iamVjdEVsZW1lbnRJbXBsKj4o
aW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgT2JqZWN0Rm9ybTog
ICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLG9iamVjdC5mb3JtKCkpOyAvLyB0eXBl
IEhUTUxGb3JtRWxlbWVudAorICAgICAgICBjYXNlIE9iamVjdENvZGU6ICAgICAgICAgICAgcmV0
dXJuIFN0cmluZyhvYmplY3QuY29kZSgpKTsKKyAgICAgICAgY2FzZSBPYmplY3RBbGlnbjogICAg
ICAgICAgIHJldHVybiBTdHJpbmcob2JqZWN0LmFsaWduKCkpOworICAgICAgICBjYXNlIE9iamVj
dEFyY2hpdmU6ICAgICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3QuYXJjaGl2ZSgpKTsKKyAgICAg
ICAgY2FzZSBPYmplY3RCb3JkZXI6ICAgICAgICAgIHJldHVybiBTdHJpbmcob2JqZWN0LmJvcmRl
cigpKTsKKyAgICAgICAgY2FzZSBPYmplY3RDb2RlQmFzZTogICAgICAgIHJldHVybiBTdHJpbmco
b2JqZWN0LmNvZGVCYXNlKCkpOworICAgICAgICBjYXNlIE9iamVjdENvZGVUeXBlOiAgICAgICAg
cmV0dXJuIFN0cmluZyhvYmplY3QuY29kZVR5cGUoKSk7CisgICAgICAgIGNhc2UgT2JqZWN0Q29u
dGVudERvY3VtZW50OiByZXR1cm4gY2hlY2tOb2RlU2VjdXJpdHkoZXhlYyxvYmplY3QuY29udGVu
dERvY3VtZW50KCkpID8gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ2V0RE9NTm9kZShleGVjLCBvYmplY3QuY29udGVudERvY3VtZW50KCkpIDogVW5kZWZpbmVk
KCk7CisgICAgICAgIGNhc2UgT2JqZWN0RGF0YTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKG9i
amVjdC5kYXRhKCkpOworICAgICAgICBjYXNlIE9iamVjdERlY2xhcmU6ICAgICAgICAgcmV0dXJu
IEJvb2xlYW4ob2JqZWN0LmRlY2xhcmUoKSk7CisgICAgICAgIGNhc2UgT2JqZWN0SGVpZ2h0OiAg
ICAgICAgICByZXR1cm4gU3RyaW5nKG9iamVjdC5oZWlnaHQoKSk7CisgICAgICAgIGNhc2UgT2Jq
ZWN0SHNwYWNlOiAgICAgICAgICByZXR1cm4gU3RyaW5nKG9iamVjdC5oc3BhY2UoKSk7CisgICAg
ICAgIGNhc2UgT2JqZWN0TmFtZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKG9iamVjdC5uYW1l
KCkpOworICAgICAgICBjYXNlIE9iamVjdFN0YW5kYnk6ICAgICAgICAgcmV0dXJuIFN0cmluZyhv
YmplY3Quc3RhbmRieSgpKTsKKyAgICAgICAgY2FzZSBPYmplY3RUYWJJbmRleDogICAgICAgIHJl
dHVybiBOdW1iZXIob2JqZWN0LnRhYkluZGV4KCkpOworICAgICAgICBjYXNlIE9iamVjdFR5cGU6
ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3QudHlwZSgpKTsKKyAgICAgICAgY2FzZSBP
YmplY3RVc2VNYXA6ICAgICAgICAgIHJldHVybiBTdHJpbmcob2JqZWN0LnVzZU1hcCgpKTsKKyAg
ICAgICAgY2FzZSBPYmplY3RWc3BhY2U6ICAgICAgICAgIHJldHVybiBTdHJpbmcob2JqZWN0LnZz
cGFjZSgpKTsKKyAgICAgICAgY2FzZSBPYmplY3RXaWR0aDogICAgICAgICAgIHJldHVybiBTdHJp
bmcob2JqZWN0LndpZHRoKCkpOworICAgIH0KKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisK
K1ZhbHVlIEhUTUxFbGVtZW50OjpwYXJhbUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tl
bikgY29uc3QKK3sKKyAgICBIVE1MUGFyYW1FbGVtZW50SW1wbCYgcGFyYW0gPSAqc3RhdGljX2Nh
c3Q8SFRNTFBhcmFtRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsK
KyAgICAgICAgY2FzZSBQYXJhbU5hbWU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhwYXJhbS5u
YW1lKCkpOworICAgICAgICBjYXNlIFBhcmFtVHlwZTogICAgICAgICAgICByZXR1cm4gU3RyaW5n
KHBhcmFtLnR5cGUoKSk7CisgICAgICAgIGNhc2UgUGFyYW1WYWx1ZTogICAgICAgICAgIHJldHVy
biBTdHJpbmcocGFyYW0udmFsdWUoKSk7CisgICAgICAgIGNhc2UgUGFyYW1WYWx1ZVR5cGU6ICAg
ICAgIHJldHVybiBTdHJpbmcocGFyYW0udmFsdWVUeXBlKCkpOworICAgIH0KKyAgICByZXR1cm4g
VW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50OjphcHBsZXRHZXR0ZXIoRXhlY1N0
YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTEFwcGxldEVsZW1lbnRJbXBs
JiBhcHBsZXQgPSAqc3RhdGljX2Nhc3Q8SFRNTEFwcGxldEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsK
KyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgQXBwbGV0QWxpZ246ICAgICAgICAg
ICByZXR1cm4gU3RyaW5nKGFwcGxldC5hbGlnbigpKTsKKyAgICAgICAgY2FzZSBBcHBsZXRBbHQ6
ICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYXBwbGV0LmFsdCgpKTsKKyAgICAgICAgY2FzZSBB
cHBsZXRBcmNoaXZlOiAgICAgICAgIHJldHVybiBTdHJpbmcoYXBwbGV0LmFyY2hpdmUoKSk7Cisg
ICAgICAgIGNhc2UgQXBwbGV0Q29kZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGFwcGxldC5j
b2RlKCkpOworICAgICAgICBjYXNlIEFwcGxldENvZGVCYXNlOiAgICAgICAgcmV0dXJuIFN0cmlu
ZyhhcHBsZXQuY29kZUJhc2UoKSk7CisgICAgICAgIGNhc2UgQXBwbGV0SGVpZ2h0OiAgICAgICAg
ICByZXR1cm4gU3RyaW5nKGFwcGxldC5oZWlnaHQoKSk7CisgICAgICAgIGNhc2UgQXBwbGV0SHNw
YWNlOiAgICAgICAgICByZXR1cm4gU3RyaW5nKGFwcGxldC5oc3BhY2UoKSk7CisgICAgICAgIGNh
c2UgQXBwbGV0TmFtZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGFwcGxldC5uYW1lKCkpOwor
ICAgICAgICBjYXNlIEFwcGxldE9iamVjdDogICAgICAgICAgcmV0dXJuIFN0cmluZyhhcHBsZXQu
b2JqZWN0KCkpOworICAgICAgICBjYXNlIEFwcGxldFZzcGFjZTogICAgICAgICAgcmV0dXJuIFN0
cmluZyhhcHBsZXQudnNwYWNlKCkpOworICAgICAgICBjYXNlIEFwcGxldFdpZHRoOiAgICAgICAg
ICAgcmV0dXJuIFN0cmluZyhhcHBsZXQud2lkdGgoKSk7CisgICAgfQorICAgIHJldHVybiBVbmRl
ZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6Om1hcEdldHRlcihFeGVjU3RhdGUqIGV4
ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MTWFwRWxlbWVudEltcGwmIG1hcCA9ICpz
dGF0aWNfY2FzdDxIVE1MTWFwRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9r
ZW4pIHsKKyAgICAgICAgY2FzZSBNYXBBcmVhczogICAgICAgICAgIHJldHVybiBnZXRIVE1MQ29s
bGVjdGlvbihleGVjLCBtYXAuYXJlYXMoKS5nZXQoKSk7IC8vIHR5cGUgSFRNTENvbGxlY3Rpb24K
KyAgICAgICAgY2FzZSBNYXBOYW1lOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcobWFwLm5hbWUo
KSk7CisgICAgfQorICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1l
bnQ6OmFyZWFHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAg
SFRNTEFyZWFFbGVtZW50SW1wbCYgYXJlYSA9ICpzdGF0aWNfY2FzdDxIVE1MQXJlYUVsZW1lbnRJ
bXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgQXJlYUFj
Y2Vzc0tleTogICAgICAgcmV0dXJuIFN0cmluZyhhcmVhLmFjY2Vzc0tleSgpKTsKKyAgICAgICAg
Y2FzZSBBcmVhQWx0OiAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGFyZWEuYWx0KCkpOworICAg
ICAgICBjYXNlIEFyZWFDb29yZHM6ICAgICAgICAgIHJldHVybiBTdHJpbmcoYXJlYS5jb29yZHMo
KSk7CisgICAgICAgIGNhc2UgQXJlYUhyZWY6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhhcmVh
LmhyZWYoKSk7CisgICAgICAgIGNhc2UgQXJlYUhhc2g6ICAgICAgICAgICAgcmV0dXJuIFN0cmlu
ZygnIycrS1VSTChhcmVhLmhyZWYoKS5zdHJpbmcoKSkucmVmKCkpOworICAgICAgICBjYXNlIEFy
ZWFIb3N0OiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoS1VSTChhcmVhLmhyZWYoKS5zdHJpbmco
KSkuaG9zdCgpKTsKKyAgICAgICAgY2FzZSBBcmVhSG9zdE5hbWU6IHsKKyAgICAgICAgICAgIEtV
UkwgdXJsKGFyZWEuaHJlZigpLnN0cmluZygpKTsKKyAgICAgICAgICAgIGtkRGVidWcoNjA3MCkg
PDwgImxpbms6Omhvc3RuYW1lIHVzZXM6IiA8PHVybC51cmwoKTw8ZW5kbDsKKyAgICAgICAgICAg
IGlmICh1cmwucG9ydCgpPT0wKQorICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcodXJsLmhv
c3QoKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh1
cmwuaG9zdCgpICsgIjoiICsgUVN0cmluZzo6bnVtYmVyKHVybC5wb3J0KCkpKTsKKyAgICAgICAg
fQorICAgICAgICBjYXNlIEFyZWFQYXRoTmFtZTogICAgICAgIHJldHVybiBTdHJpbmcoS1VSTChh
cmVhLmhyZWYoKS5zdHJpbmcoKSkucGF0aCgpKTsKKyAgICAgICAgY2FzZSBBcmVhUG9ydDogICAg
ICAgICAgICByZXR1cm4gU3RyaW5nKFFTdHJpbmc6Om51bWJlcihLVVJMKGFyZWEuaHJlZigpLnN0
cmluZygpKS5wb3J0KCkpKTsKKyAgICAgICAgY2FzZSBBcmVhUHJvdG9jb2w6ICAgICAgICByZXR1
cm4gU3RyaW5nKEtVUkwoYXJlYS5ocmVmKCkuc3RyaW5nKCkpLnByb3RvY29sKCkrIjoiKTsKKyAg
ICAgICAgY2FzZSBBcmVhU2VhcmNoOiAgICAgICAgICByZXR1cm4gU3RyaW5nKEtVUkwoYXJlYS5o
cmVmKCkuc3RyaW5nKCkpLnF1ZXJ5KCkpOworICAgICAgICBjYXNlIEFyZWFOb0hyZWY6ICAgICAg
ICAgIHJldHVybiBCb29sZWFuKGFyZWEubm9IcmVmKCkpOworICAgICAgICBjYXNlIEFyZWFTaGFw
ZTogICAgICAgICAgIHJldHVybiBTdHJpbmcoYXJlYS5zaGFwZSgpKTsKKyAgICAgICAgY2FzZSBB
cmVhVGFiSW5kZXg6ICAgICAgICByZXR1cm4gTnVtYmVyKGFyZWEudGFiSW5kZXgoKSk7CisgICAg
ICAgIGNhc2UgQXJlYVRhcmdldDogICAgICAgICAgcmV0dXJuIFN0cmluZyhhcmVhLnRhcmdldCgp
KTsKKyAgICB9CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVu
dDo6c2NyaXB0R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAg
IEhUTUxTY3JpcHRFbGVtZW50SW1wbCYgc2NyaXB0ID0gKnN0YXRpY19jYXN0PEhUTUxTY3JpcHRF
bGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNl
IFNjcmlwdFRleHQ6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhzY3JpcHQudGV4dCgpKTsKKyAg
ICAgICAgY2FzZSBTY3JpcHRIdG1sRm9yOiAgICAgICAgIHJldHVybiBTdHJpbmcoc2NyaXB0Lmh0
bWxGb3IoKSk7CisgICAgICAgIGNhc2UgU2NyaXB0RXZlbnQ6ICAgICAgICAgICByZXR1cm4gU3Ry
aW5nKHNjcmlwdC5ldmVudCgpKTsKKyAgICAgICAgY2FzZSBTY3JpcHRDaGFyc2V0OiAgICAgICAg
IHJldHVybiBTdHJpbmcoc2NyaXB0LmNoYXJzZXQoKSk7CisgICAgICAgIGNhc2UgU2NyaXB0RGVm
ZXI6ICAgICAgICAgICByZXR1cm4gQm9vbGVhbihzY3JpcHQuZGVmZXIoKSk7CisgICAgICAgIGNh
c2UgU2NyaXB0U3JjOiAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKHNjcmlwdC5zcmMoKSk7Cisg
ICAgICAgIGNhc2UgU2NyaXB0VHlwZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKHNjcmlwdC50
eXBlKCkpOworICAgIH0KKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxF
bGVtZW50Ojp0YWJsZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sK
KyAgICBIVE1MVGFibGVFbGVtZW50SW1wbCYgdGFibGUgPSAqc3RhdGljX2Nhc3Q8SFRNTFRhYmxl
RWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2Fz
ZSBUYWJsZUNhcHRpb246ICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyx0YWJsZS5jYXB0
aW9uKCkpOyAvLyB0eXBlIEhUTUxUYWJsZUNhcHRpb25FbGVtZW50CisgICAgICAgIGNhc2UgVGFi
bGVUSGVhZDogICAgICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsdGFibGUudEhlYWQoKSk7
IC8vIHR5cGUgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQKKyAgICAgICAgY2FzZSBUYWJsZVRGb290
OiAgICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyx0YWJsZS50Rm9vdCgpKTsgLy8gdHlw
ZSBIVE1MVGFibGVTZWN0aW9uRWxlbWVudAorICAgICAgICBjYXNlIFRhYmxlUm93czogICAgICAg
ICAgICByZXR1cm4gZ2V0SFRNTENvbGxlY3Rpb24oZXhlYywgdGFibGUucm93cygpLmdldCgpKTsg
Ly8gdHlwZSBIVE1MQ29sbGVjdGlvbgorICAgICAgICBjYXNlIFRhYmxlVEJvZGllczogICAgICAg
ICByZXR1cm4gZ2V0SFRNTENvbGxlY3Rpb24oZXhlYywgdGFibGUudEJvZGllcygpLmdldCgpKTsg
Ly8gdHlwZSBIVE1MQ29sbGVjdGlvbgorICAgICAgICBjYXNlIFRhYmxlQWxpZ246ICAgICAgICAg
ICByZXR1cm4gU3RyaW5nKHRhYmxlLmFsaWduKCkpOworICAgICAgICBjYXNlIFRhYmxlQmdDb2xv
cjogICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlLmJnQ29sb3IoKSk7CisgICAgICAgIGNhc2Ug
VGFibGVCb3JkZXI6ICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGUuYm9yZGVyKCkpOworICAg
ICAgICBjYXNlIFRhYmxlQ2VsbFBhZGRpbmc6ICAgICByZXR1cm4gU3RyaW5nKHRhYmxlLmNlbGxQ
YWRkaW5nKCkpOworICAgICAgICBjYXNlIFRhYmxlQ2VsbFNwYWNpbmc6ICAgICByZXR1cm4gU3Ry
aW5nKHRhYmxlLmNlbGxTcGFjaW5nKCkpOworICAgICAgICBjYXNlIFRhYmxlRnJhbWU6ICAgICAg
ICAgICByZXR1cm4gU3RyaW5nKHRhYmxlLmZyYW1lKCkpOworICAgICAgICBjYXNlIFRhYmxlUnVs
ZXM6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlLnJ1bGVzKCkpOworICAgICAgICBjYXNl
IFRhYmxlU3VtbWFyeTogICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlLnN1bW1hcnkoKSk7Cisg
ICAgICAgIGNhc2UgVGFibGVXaWR0aDogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGUud2lk
dGgoKSk7CisgICAgfQorICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVs
ZW1lbnQ6OnRhYmxlQ2FwdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29u
c3QKK3sKKyAgICBIVE1MVGFibGVDYXB0aW9uRWxlbWVudEltcGwmIHRhYmxlQ2FwdGlvbiA9ICpz
dGF0aWNfY2FzdDxIVE1MVGFibGVDYXB0aW9uRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIGlm
ICh0b2tlbiA9PSBUYWJsZUNhcHRpb25BbGlnbikKKyAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJs
ZUNhcHRpb24uYWxpZ24oKSk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBI
VE1MRWxlbWVudDo6dGFibGVDb2xHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNv
bnN0Cit7CisgICAgSFRNTFRhYmxlQ29sRWxlbWVudEltcGwmIHRhYmxlQ29sID0gKnN0YXRpY19j
YXN0PEhUTUxUYWJsZUNvbEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2Vu
KSB7CisgICAgICAgIGNhc2UgVGFibGVDb2xBbGlnbjogICAgICAgICAgIHJldHVybiBTdHJpbmco
dGFibGVDb2wuYWxpZ24oKSk7CisgICAgICAgIGNhc2UgVGFibGVDb2xDaDogICAgICAgICAgICAg
IHJldHVybiBTdHJpbmcodGFibGVDb2wuY2goKSk7CisgICAgICAgIGNhc2UgVGFibGVDb2xDaE9m
ZjogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVDb2wuY2hPZmYoKSk7CisgICAgICAgIGNh
c2UgVGFibGVDb2xTcGFuOiAgICAgICAgICAgIHJldHVybiBOdW1iZXIodGFibGVDb2wuc3Bhbigp
KTsKKyAgICAgICAgY2FzZSBUYWJsZUNvbFZBbGlnbjogICAgICAgICAgcmV0dXJuIFN0cmluZyh0
YWJsZUNvbC52QWxpZ24oKSk7CisgICAgICAgIGNhc2UgVGFibGVDb2xXaWR0aDogICAgICAgICAg
IHJldHVybiBTdHJpbmcodGFibGVDb2wud2lkdGgoKSk7CisgICAgfQorICAgIHJldHVybiBVbmRl
ZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OnRhYmxlU2VjdGlvbkdldHRlcihFeGVj
U3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MVGFibGVTZWN0aW9uRWxl
bWVudEltcGwmIHRhYmxlU2VjdGlvbiA9ICpzdGF0aWNfY2FzdDxIVE1MVGFibGVTZWN0aW9uRWxl
bWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBU
YWJsZVNlY3Rpb25BbGlnbjogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVTZWN0aW9uLmFs
aWduKCkpOworICAgICAgICBjYXNlIFRhYmxlU2VjdGlvbkNoOiAgICAgICAgICAgICAgcmV0dXJu
IFN0cmluZyh0YWJsZVNlY3Rpb24uY2goKSk7CisgICAgICAgIGNhc2UgVGFibGVTZWN0aW9uQ2hP
ZmY6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlU2VjdGlvbi5jaE9mZigpKTsKKyAgICAg
ICAgY2FzZSBUYWJsZVNlY3Rpb25WQWxpZ246ICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVT
ZWN0aW9uLnZBbGlnbigpKTsKKyAgICAgICAgY2FzZSBUYWJsZVNlY3Rpb25Sb3dzOiAgICAgICAg
ICAgIHJldHVybiBnZXRIVE1MQ29sbGVjdGlvbihleGVjLCB0YWJsZVNlY3Rpb24ucm93cygpLmdl
dCgpKTsgLy8gdHlwZSBIVE1MQ29sbGVjdGlvbgorICAgIH0KKyAgICByZXR1cm4gVW5kZWZpbmVk
KCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50Ojp0YWJsZVJvd0dldHRlcihFeGVjU3RhdGUqIGV4
ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MVGFibGVSb3dFbGVtZW50SW1wbCYgdGFi
bGVSb3cgPSAqc3RhdGljX2Nhc3Q8SFRNTFRhYmxlUm93RWxlbWVudEltcGwqPihpbXBsKCkpOwor
ICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBUYWJsZVJvd1Jvd0luZGV4OiAgICAg
ICAgcmV0dXJuIE51bWJlcih0YWJsZVJvdy5yb3dJbmRleCgpKTsKKyAgICAgICAgY2FzZSBUYWJs
ZVJvd1NlY3Rpb25Sb3dJbmRleDogcmV0dXJuIE51bWJlcih0YWJsZVJvdy5zZWN0aW9uUm93SW5k
ZXgoKSk7CisgICAgICAgIGNhc2UgVGFibGVSb3dDZWxsczogICAgICAgICAgIHJldHVybiBnZXRI
VE1MQ29sbGVjdGlvbihleGVjLCB0YWJsZVJvdy5jZWxscygpLmdldCgpKTsgLy8gdHlwZSBIVE1M
Q29sbGVjdGlvbgorICAgICAgICBjYXNlIFRhYmxlUm93QWxpZ246ICAgICAgICAgICByZXR1cm4g
U3RyaW5nKHRhYmxlUm93LmFsaWduKCkpOworICAgICAgICBjYXNlIFRhYmxlUm93QmdDb2xvcjog
ICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlUm93LmJnQ29sb3IoKSk7CisgICAgICAgIGNhc2Ug
VGFibGVSb3dDaDogICAgICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVSb3cuY2goKSk7Cisg
ICAgICAgIGNhc2UgVGFibGVSb3dDaE9mZjogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVS
b3cuY2hPZmYoKSk7CisgICAgICAgIGNhc2UgVGFibGVSb3dWQWxpZ246ICAgICAgICAgIHJldHVy
biBTdHJpbmcodGFibGVSb3cudkFsaWduKCkpOworICAgIH0KKyAgICByZXR1cm4gVW5kZWZpbmVk
KCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50Ojp0YWJsZUNlbGxHZXR0ZXIoRXhlY1N0YXRlKiBl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsJiB0
YWJsZUNlbGwgPSAqc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsKj4oaW1wbCgp
KTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgVGFibGVDZWxsQ2VsbEluZGV4
OiAgICAgICByZXR1cm4gTnVtYmVyKHRhYmxlQ2VsbC5jZWxsSW5kZXgoKSk7CisgICAgICAgIGNh
c2UgVGFibGVDZWxsQWJicjogICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ2VsbC5hYmJy
KCkpOworICAgICAgICBjYXNlIFRhYmxlQ2VsbEFsaWduOiAgICAgICAgICAgcmV0dXJuIFN0cmlu
Zyh0YWJsZUNlbGwuYWxpZ24oKSk7CisgICAgICAgIGNhc2UgVGFibGVDZWxsQXhpczogICAgICAg
ICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ2VsbC5heGlzKCkpOworICAgICAgICBjYXNlIFRhYmxl
Q2VsbEJnQ29sb3I6ICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNlbGwuYmdDb2xvcigpKTsK
KyAgICAgICAgY2FzZSBUYWJsZUNlbGxDaDogICAgICAgICAgICAgIHJldHVybiBTdHJpbmcodGFi
bGVDZWxsLmNoKCkpOworICAgICAgICBjYXNlIFRhYmxlQ2VsbENoT2ZmOiAgICAgICAgICAgcmV0
dXJuIFN0cmluZyh0YWJsZUNlbGwuY2hPZmYoKSk7CisgICAgICAgIGNhc2UgVGFibGVDZWxsQ29s
U3BhbjogICAgICAgICByZXR1cm4gTnVtYmVyKHRhYmxlQ2VsbC5jb2xTcGFuKCkpOworICAgICAg
ICBjYXNlIFRhYmxlQ2VsbEhlYWRlcnM6ICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNlbGwu
aGVhZGVycygpKTsKKyAgICAgICAgY2FzZSBUYWJsZUNlbGxIZWlnaHQ6ICAgICAgICAgIHJldHVy
biBTdHJpbmcodGFibGVDZWxsLmhlaWdodCgpKTsKKyAgICAgICAgY2FzZSBUYWJsZUNlbGxOb1dy
YXA6ICAgICAgICAgIHJldHVybiBCb29sZWFuKHRhYmxlQ2VsbC5ub1dyYXAoKSk7CisgICAgICAg
IGNhc2UgVGFibGVDZWxsUm93U3BhbjogICAgICAgICByZXR1cm4gTnVtYmVyKHRhYmxlQ2VsbC5y
b3dTcGFuKCkpOworICAgICAgICBjYXNlIFRhYmxlQ2VsbFNjb3BlOiAgICAgICAgICAgcmV0dXJu
IFN0cmluZyh0YWJsZUNlbGwuc2NvcGUoKSk7CisgICAgICAgIGNhc2UgVGFibGVDZWxsVkFsaWdu
OiAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ2VsbC52QWxpZ24oKSk7CisgICAgICAgIGNh
c2UgVGFibGVDZWxsV2lkdGg6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ2VsbC53aWR0
aCgpKTsKKyAgICB9CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxl
bWVudDo6ZnJhbWVTZXRHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7
CisgICAgSFRNTEZyYW1lU2V0RWxlbWVudEltcGwmIGZyYW1lU2V0ID0gKnN0YXRpY19jYXN0PEhU
TUxGcmFtZVNldEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7Cisg
ICAgICAgIGNhc2UgRnJhbWVTZXRDb2xzOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoZnJhbWVT
ZXQuY29scygpKTsKKyAgICAgICAgY2FzZSBGcmFtZVNldFJvd3M6ICAgICAgICAgICAgcmV0dXJu
IFN0cmluZyhmcmFtZVNldC5yb3dzKCkpOworICAgIH0KKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7
Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50OjpmcmFtZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGlu
dCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MRnJhbWVFbGVtZW50SW1wbCYgZnJhbWVFbGVtZW50
ID0gKnN0YXRpY19jYXN0PEhUTUxGcmFtZUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0
Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgRnJhbWVDb250ZW50RG9jdW1lbnQ6IHJldHVybiBj
aGVja05vZGVTZWN1cml0eShleGVjLGZyYW1lRWxlbWVudC5jb250ZW50RG9jdW1lbnQoKSkgPyAK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldERPTU5vZGUoZXhl
YywgZnJhbWVFbGVtZW50LmNvbnRlbnREb2N1bWVudCgpKSA6IFVuZGVmaW5lZCgpOworICAgICAg
ICBjYXNlIEZyYW1lQ29udGVudFdpbmRvdzogICByZXR1cm4gY2hlY2tOb2RlU2VjdXJpdHkoZXhl
YyxmcmFtZUVsZW1lbnQuY29udGVudERvY3VtZW50KCkpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgPyBXaW5kb3c6OnJldHJpZXZlKGZyYW1lRWxlbWVudC5jb250ZW50
UGFydCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogVW5kZWZp
bmVkKCk7CisgICAgICAgIGNhc2UgRnJhbWVGcmFtZUJvcmRlcjogICAgIHJldHVybiBTdHJpbmco
ZnJhbWVFbGVtZW50LmZyYW1lQm9yZGVyKCkpOworICAgICAgICBjYXNlIEZyYW1lTG9uZ0Rlc2M6
ICAgICAgICByZXR1cm4gU3RyaW5nKGZyYW1lRWxlbWVudC5sb25nRGVzYygpKTsKKyAgICAgICAg
Y2FzZSBGcmFtZU1hcmdpbkhlaWdodDogICAgcmV0dXJuIFN0cmluZyhmcmFtZUVsZW1lbnQubWFy
Z2luSGVpZ2h0KCkpOworICAgICAgICBjYXNlIEZyYW1lTWFyZ2luV2lkdGg6ICAgICByZXR1cm4g
U3RyaW5nKGZyYW1lRWxlbWVudC5tYXJnaW5XaWR0aCgpKTsKKyAgICAgICAgY2FzZSBGcmFtZU5h
bWU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhmcmFtZUVsZW1lbnQubmFtZSgpKTsKKyAgICAg
ICAgY2FzZSBGcmFtZU5vUmVzaXplOiAgICAgICAgcmV0dXJuIEJvb2xlYW4oZnJhbWVFbGVtZW50
Lm5vUmVzaXplKCkpOworICAgICAgICBjYXNlIEZyYW1lU2Nyb2xsaW5nOiAgICAgICByZXR1cm4g
U3RyaW5nKGZyYW1lRWxlbWVudC5zY3JvbGxpbmcoKSk7CisgICAgICAgIGNhc2UgRnJhbWVTcmM6
CisgICAgICAgIGNhc2UgRnJhbWVMb2NhdGlvbjogICAgICAgIHJldHVybiBTdHJpbmcoZnJhbWVF
bGVtZW50LnNyYygpKTsKKyAgICB9CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1
ZSBIVE1MRWxlbWVudDo6aUZyYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBj
b25zdAoreworICAgIEhUTUxJRnJhbWVFbGVtZW50SW1wbCYgaUZyYW1lID0gKnN0YXRpY19jYXN0
PEhUTUxJRnJhbWVFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgewor
ICAgICAgICBjYXNlIElGcmFtZUFsaWduOiAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGlG
cmFtZS5hbGlnbigpKTsKKyAgICAgICAgICAvLyAjIyMgc2VjdXJpdHkgY2hlY2sgPworICAgICAg
ICBjYXNlIElGcmFtZURvY3VtZW50OiAvLyBub24tc3RhbmRhcmQsIG1hcHBlZCB0byBjb250ZW50
RG9jdW1lbnQKKyAgICAgICAgY2FzZSBJRnJhbWVDb250ZW50RG9jdW1lbnQ6IHJldHVybiBjaGVj
a05vZGVTZWN1cml0eShleGVjLGlGcmFtZS5jb250ZW50RG9jdW1lbnQoKSkgPyAKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0RE9NTm9kZShleGVjLCBpRnJhbWUuY29u
dGVudERvY3VtZW50KCkpIDogVW5kZWZpbmVkKCk7CisgICAgICAgIGNhc2UgSUZyYW1lQ29udGVu
dFdpbmRvdzoJcmV0dXJuIGNoZWNrTm9kZVNlY3VyaXR5KGV4ZWMsaUZyYW1lLmNvbnRlbnREb2N1
bWVudCgpKSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFdpbmRv
dzo6cmV0cmlldmUoaUZyYW1lLmNvbnRlbnRQYXJ0KCkpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOiBVbmRlZmluZWQoKTsKKyAgICAgICAgY2FzZSBJRnJhbWVGcmFt
ZUJvcmRlcjogICAgIHJldHVybiBTdHJpbmcoaUZyYW1lLmZyYW1lQm9yZGVyKCkpOworICAgICAg
ICBjYXNlIElGcmFtZUhlaWdodDogICAgICAgICAgcmV0dXJuIFN0cmluZyhpRnJhbWUuaGVpZ2h0
KCkpOworICAgICAgICBjYXNlIElGcmFtZUxvbmdEZXNjOiAgICAgICAgcmV0dXJuIFN0cmluZyhp
RnJhbWUubG9uZ0Rlc2MoKSk7CisgICAgICAgIGNhc2UgSUZyYW1lTWFyZ2luSGVpZ2h0OiAgICBy
ZXR1cm4gU3RyaW5nKGlGcmFtZS5tYXJnaW5IZWlnaHQoKSk7CisgICAgICAgIGNhc2UgSUZyYW1l
TWFyZ2luV2lkdGg6ICAgICByZXR1cm4gU3RyaW5nKGlGcmFtZS5tYXJnaW5XaWR0aCgpKTsKKyAg
ICAgICAgY2FzZSBJRnJhbWVOYW1lOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoaUZyYW1lLm5h
bWUoKSk7CisgICAgICAgIGNhc2UgSUZyYW1lU2Nyb2xsaW5nOiAgICAgICByZXR1cm4gU3RyaW5n
KGlGcmFtZS5zY3JvbGxpbmcoKSk7CisgICAgICAgIGNhc2UgSUZyYW1lU3JjOiAgICAgICAgICAg
ICByZXR1cm4gU3RyaW5nKGlGcmFtZS5zcmMoKSk7CisgICAgICAgIGNhc2UgSUZyYW1lV2lkdGg6
ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGlGcmFtZS53aWR0aCgpKTsKKyAgICB9CisgICAgcmV0
dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6bWFycXVlZUdldHRlcihF
eGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogRmluZCBv
dXQgd2hhdCBXaW5JRSBleHBvc2VzIGFzIHByb3BlcnRpZXMgYW5kIGltcGxlbWVudCB0aGlzLgor
ICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OmdldFZhbHVl
UHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgLy8gQ2hl
Y2sgb3VyIHNldCBvZiBnZW5lcmljIHByb3BlcnRpZXMgZmlyc3QuCisgICAgSFRNTEVsZW1lbnRJ
bXBsICZlbGVtZW50ID0gKnN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCAqPihpbXBsKCkpOwor
ICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBFbGVtZW50SWQ6CisgICAgICAgIC8v
IGlodC5jb20gcmVsaWVzIG9uIHRoaXMgdmFsdWUgYmVpbmcgIiIgd2hlbiBubyBpZCBpcyBwcmVz
ZW50LiAgT3RoZXIgYnJvd3NlcnMgZG8gdGhpcyBhcyB3ZWxsLgorICAgICAgICAvLyBTbyB3ZSB1
c2UgU3RyaW5nKCkgaW5zdGVhZCBvZiBTdHJpbmcoKSBoZXJlLgorICAgICAgICByZXR1cm4gU3Ry
aW5nKGVsZW1lbnQuaWQoKSk7CisgICAgICAgIGNhc2UgRWxlbWVudFRpdGxlOgorICAgICAgICAg
ICAgcmV0dXJuIFN0cmluZyhlbGVtZW50LnRpdGxlKCkpOworICAgICAgICBjYXNlIEVsZW1lbnRM
YW5nOgorICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhlbGVtZW50LmxhbmcoKSk7CisgICAgICAg
IGNhc2UgRWxlbWVudERpcjoKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcoZWxlbWVudC5kaXIo
KSk7CisgICAgICAgIGNhc2UgRWxlbWVudENsYXNzTmFtZToKKyAgICAgICAgICAgIHJldHVybiBT
dHJpbmcoZWxlbWVudC5jbGFzc05hbWUoKSk7CisgICAgICAgIGNhc2UgRWxlbWVudElubmVySFRN
TDoKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcoZWxlbWVudC5pbm5lckhUTUwoKSk7CisgICAg
ICAgIGNhc2UgRWxlbWVudElubmVyVGV4dDoKKyAgICAgICAgICAgIGlmIChEb2N1bWVudEltcGwq
IGRvYyA9IGltcGwoKS0+Z2V0RG9jdW1lbnQoKSkKKyAgICAgICAgICAgICAgICBkb2MtPnVwZGF0
ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOworICAgICAgICAgICAgcmV0dXJuIFN0
cmluZyhlbGVtZW50LmlubmVyVGV4dCgpKTsKKyAgICAgICAgY2FzZSBFbGVtZW50T3V0ZXJIVE1M
OgorICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhlbGVtZW50Lm91dGVySFRNTCgpKTsKKyAgICAg
ICAgY2FzZSBFbGVtZW50T3V0ZXJUZXh0OgorICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhlbGVt
ZW50Lm91dGVyVGV4dCgpKTsKKyAgICAgICAgY2FzZSBFbGVtZW50RG9jdW1lbnQ6CisgICAgICAg
ICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLGVsZW1lbnQub3duZXJEb2N1bWVudCgpKTsKKyAg
ICAgICAgY2FzZSBFbGVtZW50Q2hpbGRyZW46CisgICAgICAgICAgICByZXR1cm4gZ2V0SFRNTENv
bGxlY3Rpb24oZXhlYywgZWxlbWVudC5jaGlsZHJlbigpLmdldCgpKTsKKyAgICAgICAgY2FzZSBF
bGVtZW50Q29udGVudEVkaXRhYmxlOgorICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhlbGVtZW50
LmNvbnRlbnRFZGl0YWJsZSgpKTsKKyAgICAgICAgY2FzZSBFbGVtZW50SXNDb250ZW50RWRpdGFi
bGU6CisgICAgICAgICAgICByZXR1cm4gQm9vbGVhbihlbGVtZW50LmlzQ29udGVudEVkaXRhYmxl
KCkpOworICAgIH0KKworICAgIC8vIE5vdyBjaGVjayB0aGUgcHJvcGVydGllcyBzcGVjaWZpYyB0
byBvdXIgZWxlbWVudCB0eXBlLgorICAgIGNvbnN0IEdldFNldEluZm8qIGluZm8gPSBnZXRTZXRJ
bmZvKCk7CisgICAgaWYgKGluZm8gJiYgaW5mby0+bV9nZXR0ZXIpCisgICAgICAgIHJldHVybiAo
dGhpcy0+KihpbmZvLT5tX2dldHRlcikpKGV4ZWMsIHRva2VuKTsKKyAgICByZXR1cm4gVW5kZWZp
bmVkKCk7Cit9CisKK2Jvb2wgS0pTOjpIVE1MRWxlbWVudDo6aGFzUHJvcGVydHkoRXhlY1N0YXRl
ICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUpIGNvbnN0Cit7CisjaWZkZWYg
S0pTX1ZFUkJPU0UKKyAgICAvL2tkRGVidWcoNjA3MCkgPDwgIkhUTUxFbGVtZW50OjpoYXNQcm9w
ZXJ0eSAiIDw8IHByb3BlcnR5TmFtZS5xc3RyaW5nKCkgPDwgZW5kbDsKKyNlbmRpZgorICAgIEhU
TUxFbGVtZW50SW1wbCAmZWxlbWVudCA9ICpzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwgKj4o
aW1wbCgpKTsKKyAgICAvLyBGaXJzdCBsb29rIGF0IGR5bmFtaWMgcHJvcGVydGllcyAtIGtlZXAg
dGhpcyBpbiBzeW5jIHdpdGggdHJ5R2V0CisgICAgaWYgKGVsZW1lbnQuaGFzTG9jYWxOYW1lKEhU
TUxOYW1lczo6Zm9ybSgpKSkgeworICAgICAgICBIVE1MRm9ybUVsZW1lbnRJbXBsICZmb3JtID0g
c3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICAgICAgLy8g
Q2hlY2sgaWYgd2UncmUgcmV0cmlldmluZyBhbiBlbGVtZW50IChieSBpbmRleCBvciBieSBuYW1l
KQorICAgICAgICBib29sIG9rOworICAgICAgICB1aW50IHUgPSBwcm9wZXJ0eU5hbWUudG9VTG9u
Zygmb2spOworICAgICAgICBpZiAob2sgJiYgZm9ybS5lbGVtZW50cygpLT5pdGVtKHUpKQorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChmb3JtLmVsZW1lbnRzKCktPm5hbWVk
SXRlbShwcm9wZXJ0eU5hbWUuc3RyaW5nKCkpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6c2VsZWN0
KCkpKSB7CisgICAgICAgIEhUTUxTZWxlY3RFbGVtZW50SW1wbCAmc2VsZWN0ID0gc3RhdGljX2Nh
c3Q8SFRNTFNlbGVjdEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgICAgICBib29sIG9rOwor
ICAgICAgICB1aW50IHUgPSBwcm9wZXJ0eU5hbWUudG9VTG9uZygmb2spOworICAgICAgICBpZiAo
b2sgJiYgc2VsZWN0Lm9wdGlvbnNIVE1MQ29sbGVjdGlvbigpLT5pdGVtKHUpKQorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBET01FbGVtZW50OjpoYXNQcm9wZXJ0
eShleGVjLCBwcm9wZXJ0eU5hbWUpOworfQorCitVU3RyaW5nIEtKUzo6SFRNTEVsZW1lbnQ6OnRv
U3RyaW5nKEV4ZWNTdGF0ZSAqZXhlYykgY29uc3QKK3sKKyAgaWYgKGltcGwoKS0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OmEoKSkpCisgICAgcmV0dXJuIFVTdHJpbmcoc3RhdGljX2Nhc3Q8Y29uc3Qg
SFRNTEFuY2hvckVsZW1lbnRJbXBsICo+KGltcGwoKSktPmhyZWYoKSk7CisgIGVsc2UKKyAgICBy
ZXR1cm4gRE9NRWxlbWVudDo6dG9TdHJpbmcoZXhlYyk7Cit9CisKK3N0YXRpYyBIVE1MRm9ybUVs
ZW1lbnRJbXBsICpnZXRGb3JtKEhUTUxFbGVtZW50SW1wbCAqZWxlbWVudCkKK3sKKyAgaWYgKGVs
ZW1lbnQtPmlzR2VuZXJpY0Zvcm1FbGVtZW50KCkpCisgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
SFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwgKj4oZWxlbWVudCktPmZvcm0oKTsKKyAgaWYgKGVs
ZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpsYWJlbCgpKSkKKyAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxIVE1MTGFiZWxFbGVtZW50SW1wbCAqPihlbGVtZW50KS0+Zm9ybSgpOworICBpZiAo
ZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9iamVjdCgpKSkKKyAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxIVE1MT2JqZWN0RWxlbWVudEltcGwgKj4oZWxlbWVudCktPmZvcm0oKTsKKwor
ICByZXR1cm4gMDsKK30KKwordm9pZCBLSlM6OkhUTUxFbGVtZW50OjpwdXNoRXZlbnRIYW5kbGVy
U2NvcGUoRXhlY1N0YXRlICpleGVjLCBTY29wZUNoYWluICZzY29wZSkgY29uc3QKIHsKICAgSFRN
TEVsZW1lbnRJbXBsICplbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KGlt
cGwoKSk7CiAKQEAgLTIwOTksNyArMjI1NSw3IEBAIHZvaWQgS0pTOjpIVE1MRWxlbWVudDo6cHVz
aEV2ZW50SGFuZGxlclMKICAgICBzY29wZS5wdXNoKHN0YXRpY19jYXN0PE9iamVjdEltcCAqPihn
ZXRET01Ob2RlKGV4ZWMsIGZvcm0pKSk7CiAgIGVsc2UgewogICAgIE5vZGVJbXBsICpmb3JtID0g
ZWxlbWVudC0+cGFyZW50Tm9kZSgpOwotICAgIHdoaWxlIChmb3JtICYmIGZvcm0tPmlkKCkgIT0g
SURfRk9STSkKKyAgICB3aGlsZSAoZm9ybSAmJiAhZm9ybS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
OmZvcm0oKSkpCiAgICAgICBmb3JtID0gZm9ybS0+cGFyZW50Tm9kZSgpOwogICAgIAogICAgIGlm
IChmb3JtKQpAQCAtMjExOSwxODAgKzIyNzUsMTY1IEBAIEhUTUxFbGVtZW50RnVuY3Rpb246OkhU
TUxFbGVtZW50RnVuY3Rpb24KIAogVmFsdWUgS0pTOjpIVE1MRWxlbWVudEZ1bmN0aW9uOjp0cnlD
YWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0ICZhcmdzKQog
ewotICBpZiAoIXRoaXNPYmouaW5oZXJpdHMoJktKUzo6SFRNTEVsZW1lbnQ6OmluZm8pKSB7Ci0g
ICAgT2JqZWN0IGVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBlRXJyb3IpOwotICAgIGV4ZWMt
PnNldEV4Y2VwdGlvbihlcnIpOwotICAgIHJldHVybiBlcnI7Ci0gIH0KLSAga2REZWJ1ZygpIDw8
ICJLSlM6OkhUTUxFbGVtZW50RnVuY3Rpb246OnRyeUNhbGwgIiA8PCBlbmRsOwotICBET01FeGNl
cHRpb25UcmFuc2xhdG9yIGV4Y2VwdGlvbihleGVjKTsKLSAgSFRNTEVsZW1lbnRJbXBsICZlbGVt
ZW50ID0gKnN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCAqPihzdGF0aWNfY2FzdDxIVE1MRWxl
bWVudCAqPih0aGlzT2JqLmltcCgpKS0+aW1wbCgpKTsKLQotICBzd2l0Y2ggKGVsZW1lbnQuaWQo
KSkgewotICAgIGNhc2UgSURfRk9STTogewotICAgICAgSFRNTEZvcm1FbGVtZW50SW1wbCAmZm9y
bSA9IHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBp
ZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6Rm9ybVN1Ym1pdCkgewotICAgICAgICBmb3JtLnN1
Ym1pdCgpOwotICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9Ci0gICAgICBlbHNl
IGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpGb3JtUmVzZXQpIHsKLSAgICAgICAgZm9ybS5y
ZXNldCgpOwotICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9CisgICAgaWYgKCF0
aGlzT2JqLmluaGVyaXRzKCZLSlM6OkhUTUxFbGVtZW50OjppbmZvKSkgeworICAgICAgICBPYmpl
Y3QgZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5cGVFcnJvcik7CisgICAgICAgIGV4ZWMtPnNl
dEV4Y2VwdGlvbihlcnIpOworICAgICAgICByZXR1cm4gZXJyOwogICAgIH0KLSAgICBicmVhazsK
LSAgICBjYXNlIElEX1NFTEVDVDogewotICAgICAgSFRNTFNlbGVjdEVsZW1lbnRJbXBsICZzZWxl
Y3QgPSBzdGF0aWNfY2FzdDxIVE1MU2VsZWN0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAg
ICBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6U2VsZWN0QWRkKSB7Ci0gICAgICAgIHNlbGVj
dC5hZGQodG9IVE1MRWxlbWVudChhcmdzWzBdKSwgdG9IVE1MRWxlbWVudChhcmdzWzFdKSk7Ci0g
ICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGlkID09
IEtKUzo6SFRNTEVsZW1lbnQ6OlNlbGVjdFJlbW92ZSkgewotICAgICAgICBzZWxlY3QucmVtb3Zl
KGludChhcmdzWzBdLnRvTnVtYmVyKGV4ZWMpKSk7Ci0gICAgICAgIHJldHVybiBVbmRlZmluZWQo
KTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlNlbGVj
dEJsdXIpIHsKLSAgICAgICAgc2VsZWN0LmJsdXIoKTsKLSAgICAgICAgcmV0dXJuIFVuZGVmaW5l
ZCgpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6U2Vs
ZWN0Rm9jdXMpIHsKLSAgICAgICAgc2VsZWN0LmZvY3VzKCk7Ci0gICAgICAgIHJldHVybiBVbmRl
ZmluZWQoKTsKLSAgICAgIH0KKyAgICBrZERlYnVnKCkgPDwgIktKUzo6SFRNTEVsZW1lbnRGdW5j
dGlvbjo6dHJ5Q2FsbCAiIDw8IGVuZGw7CisgICAgRE9NRXhjZXB0aW9uVHJhbnNsYXRvciBleGNl
cHRpb24oZXhlYyk7CisgICAgSFRNTEVsZW1lbnRJbXBsICZlbGVtZW50ID0gKnN0YXRpY19jYXN0
PEhUTUxFbGVtZW50SW1wbCAqPihzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCAqPih0aGlzT2JqLmlt
cCgpKS0+aW1wbCgpKTsKKworICAgIGlmIChlbGVtZW50Lmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6
OmZvcm0oKSkpIHsKKyAgICAgICAgSFRNTEZvcm1FbGVtZW50SW1wbCAmZm9ybSA9IHN0YXRpY19j
YXN0PEhUTUxGb3JtRWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgICAgIGlmIChpZCA9PSBL
SlM6OkhUTUxFbGVtZW50OjpGb3JtU3VibWl0KSB7CisgICAgICAgICAgICBmb3JtLnN1Ym1pdCgp
OworICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAgICAgICB9CisgICAgICAgIGVs
c2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OkZvcm1SZXNldCkgeworICAgICAgICAgICAg
Zm9ybS5yZXNldCgpOworICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAgICAgICB9
CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfSU5QVVQ6IHsKLSAgICAgIEhUTUxJbnB1
dEVsZW1lbnRJbXBsICZpbnB1dCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnRJbXBsICY+
KGVsZW1lbnQpOwotICAgICAgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OklucHV0Qmx1cikg
ewotICAgICAgICBpbnB1dC5ibHVyKCk7Ci0gICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKLSAg
ICAgIH0KLSAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OklucHV0Rm9jdXMp
IHsKLSAgICAgICAgaW5wdXQuZm9jdXMoKTsKLSAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwot
ICAgICAgfQotICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6SW5wdXRTZWxl
Y3QpIHsKLSAgICAgICAgaW5wdXQuc2VsZWN0KCk7Ci0gICAgICAgIHJldHVybiBVbmRlZmluZWQo
KTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OklucHV0
Q2xpY2spIHsKLSAgICAgICAgaW5wdXQuY2xpY2soKTsKLSAgICAgICAgcmV0dXJuIFVuZGVmaW5l
ZCgpOwotICAgICAgfQorICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFzTG9jYWxOYW1lKEhUTUxOYW1l
czo6c2VsZWN0KCkpKSB7CisgICAgICAgIEhUTUxTZWxlY3RFbGVtZW50SW1wbCAmc2VsZWN0ID0g
c3RhdGljX2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgICAgICBp
ZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6U2VsZWN0QWRkKSB7CisgICAgICAgICAgICBzZWxl
Y3QuYWRkKHRvSFRNTEVsZW1lbnQoYXJnc1swXSksIHRvSFRNTEVsZW1lbnQoYXJnc1sxXSkpOwor
ICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAgICAgICB9CisgICAgICAgIGVsc2Ug
aWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlNlbGVjdFJlbW92ZSkgeworICAgICAgICAgICAg
c2VsZWN0LnJlbW92ZShpbnQoYXJnc1swXS50b051bWJlcihleGVjKSkpOworICAgICAgICAgICAg
cmV0dXJuIFVuZGVmaW5lZCgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGlkID09IEtK
Uzo6SFRNTEVsZW1lbnQ6OlNlbGVjdEJsdXIpIHsKKyAgICAgICAgICAgIHNlbGVjdC5ibHVyKCk7
CisgICAgICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxz
ZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6U2VsZWN0Rm9jdXMpIHsKKyAgICAgICAgICAg
IHNlbGVjdC5mb2N1cygpOworICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAgICAg
ICB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfTEFCRUw6IHsKLSAgICAgIEhUTUxM
YWJlbEVsZW1lbnRJbXBsICZsYWJlbCA9IHN0YXRpY19jYXN0PEhUTUxMYWJlbEVsZW1lbnRJbXBs
ICY+KGVsZW1lbnQpOwotICAgICAgCi0gICAgICBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6
TGFiZWxGb2N1cykgewotICAgICAgICAgIGxhYmVsLmZvY3VzKCk7Ci0gICAgICAgICAgcmV0dXJu
IFVuZGVmaW5lZCgpOwotICAgICAgfQorICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFzTG9jYWxOYW1l
KEhUTUxOYW1lczo6aW5wdXQoKSkpIHsKKyAgICAgICAgSFRNTElucHV0RWxlbWVudEltcGwgJmlu
cHV0ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAg
ICAgIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpJbnB1dEJsdXIpIHsKKyAgICAgICAgICAg
IGlucHV0LmJsdXIoKTsKKyAgICAgICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKKyAgICAgICAg
fQorICAgICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpJbnB1dEZvY3VzKSB7
CisgICAgICAgICAgICBpbnB1dC5mb2N1cygpOworICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5l
ZCgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6
OklucHV0U2VsZWN0KSB7CisgICAgICAgICAgICBpbnB1dC5zZWxlY3QoKTsKKyAgICAgICAgICAg
IHJldHVybiBVbmRlZmluZWQoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChpZCA9PSBL
SlM6OkhUTUxFbGVtZW50OjpJbnB1dENsaWNrKSB7CisgICAgICAgICAgICBpbnB1dC5jbGljaygp
OworICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAgICAgICB9CiAgICAgfQotICAg
IGJyZWFrOwotICAgIGNhc2UgSURfTEVHRU5EOiB7Ci0gICAgICBIVE1MTGVnZW5kRWxlbWVudElt
cGwgJmxlZ2VuZCA9IHN0YXRpY19jYXN0PEhUTUxMZWdlbmRFbGVtZW50SW1wbCAmPihlbGVtZW50
KTsKLSAgICAgICAgCi0gICAgICBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6TGVnZW5kRm9j
dXMpIHsKLSAgICAgICAgICBsZWdlbmQuZm9jdXMoKTsKLSAgICAgICAgICByZXR1cm4gVW5kZWZp
bmVkKCk7Ci0gICAgICB9CisgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNMb2NhbE5hbWUoSFRNTE5h
bWVzOjpidXR0b24oKSkpIHsKKyAgICAgICAgSFRNTEJ1dHRvbkVsZW1lbnRJbXBsICZidXR0b24g
PSBzdGF0aWNfY2FzdDxIVE1MQnV0dG9uRWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgICAg
IGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpCdXR0b25CbHVyKSB7CisgICAgICAgICAgICBi
dXR0b24uYmx1cigpOworICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAgICAgICB9
CisgICAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OkJ1dHRvbkZvY3VzKSB7
CisgICAgICAgICAgICBidXR0b24uZm9jdXMoKTsKKyAgICAgICAgICAgIHJldHVybiBVbmRlZmlu
ZWQoKTsKKyAgICAgICAgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0JVVFRPTjog
ewotICAgICAgSFRNTEJ1dHRvbkVsZW1lbnRJbXBsICZidXR0b24gPSBzdGF0aWNfY2FzdDxIVE1M
QnV0dG9uRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICAKLSAgICAgIGlmIChpZCA9PSBL
SlM6OkhUTUxFbGVtZW50OjpCdXR0b25CbHVyKSB7Ci0gICAgICAgIGJ1dHRvbi5ibHVyKCk7Ci0g
ICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGlkID09
IEtKUzo6SFRNTEVsZW1lbnQ6OkJ1dHRvbkZvY3VzKSB7Ci0gICAgICAgIGJ1dHRvbi5mb2N1cygp
OwotICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9CisgICAgZWxzZSBpZiAoZWxl
bWVudC5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpsYWJlbCgpKSkgeworICAgICAgICBIVE1MTGFi
ZWxFbGVtZW50SW1wbCAmbGFiZWwgPSBzdGF0aWNfY2FzdDxIVE1MTGFiZWxFbGVtZW50SW1wbCAm
PihlbGVtZW50KTsKKyAgICAgICAgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OkxhYmVsRm9j
dXMpIHsKKyAgICAgICAgICAgIGxhYmVsLmZvY3VzKCk7CisgICAgICAgICAgICByZXR1cm4gVW5k
ZWZpbmVkKCk7CisgICAgICAgIH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9URVhU
QVJFQTogewotICAgICAgSFRNTFRleHRBcmVhRWxlbWVudEltcGwgJnRleHRhcmVhID0gc3RhdGlj
X2Nhc3Q8SFRNTFRleHRBcmVhRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBpZiAoaWQg
PT0gS0pTOjpIVE1MRWxlbWVudDo6VGV4dEFyZWFCbHVyKSB7Ci0gICAgICAgIHRleHRhcmVhLmJs
dXIoKTsKLSAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwotICAgICAgfQotICAgICAgZWxzZSBp
ZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6VGV4dEFyZWFGb2N1cykgewotICAgICAgICB0ZXh0
YXJlYS5mb2N1cygpOwotICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9Ci0gICAg
ICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUZXh0QXJlYVNlbGVjdCkgewotICAg
ICAgICB0ZXh0YXJlYS5zZWxlY3QoKTsKLSAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwotICAg
ICAgfQorICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6bGVnZW5k
KCkpKSB7CisgICAgICAgIEhUTUxMZWdlbmRFbGVtZW50SW1wbCAmbGVnZW5kID0gc3RhdGljX2Nh
c3Q8SFRNTExlZ2VuZEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgICAgICBpZiAoaWQgPT0g
S0pTOjpIVE1MRWxlbWVudDo6TGVnZW5kRm9jdXMpIHsKKyAgICAgICAgICAgIGxlZ2VuZC5mb2N1
cygpOworICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAgICAgICB9CiAgICAgfQot
ICAgIGJyZWFrOwotICAgIGNhc2UgSURfQTogewotICAgICAgSFRNTEFuY2hvckVsZW1lbnRJbXBs
ICZhbmNob3IgPSBzdGF0aWNfY2FzdDxIVE1MQW5jaG9yRWxlbWVudEltcGwgJj4oZWxlbWVudCk7
Ci0gICAgICBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6QW5jaG9yQmx1cikgewotICAgICAg
ICBhbmNob3IuYmx1cigpOwotICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9Ci0g
ICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpBbmNob3JGb2N1cykgewotICAg
ICAgICBhbmNob3IuZm9jdXMoKTsKLSAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwotICAgICAg
fSAKLSAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OkFuY2hvclRvU3RyaW5n
KSB7Ci0JcmV0dXJuIFN0cmluZyh0aGlzT2JqLnRvU3RyaW5nKGV4ZWMpKTsKLSAgICAgIH0KKyAg
ICBlbHNlIGlmIChlbGVtZW50Lmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnRleHRhcmVhKCkpKSB7
CisgICAgICAgIEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBsICZ0ZXh0YXJlYSA9IHN0YXRpY19jYXN0
PEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgICAgICBpZiAoaWQgPT0g
S0pTOjpIVE1MRWxlbWVudDo6VGV4dEFyZWFCbHVyKSB7CisgICAgICAgICAgICB0ZXh0YXJlYS5i
bHVyKCk7CisgICAgICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CisgICAgICAgIH0KKyAgICAg
ICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6VGV4dEFyZWFGb2N1cykgeworICAg
ICAgICAgICAgdGV4dGFyZWEuZm9jdXMoKTsKKyAgICAgICAgICAgIHJldHVybiBVbmRlZmluZWQo
KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpU
ZXh0QXJlYVNlbGVjdCkgeworICAgICAgICAgICAgdGV4dGFyZWEuc2VsZWN0KCk7CisgICAgICAg
ICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CisgICAgICAgIH0KICAgICB9Ci0gICAgYnJlYWs7Ci0g
ICAgY2FzZSBJRF9UQUJMRTogewotICAgICAgSFRNTFRhYmxlRWxlbWVudEltcGwgJnRhYmxlID0g
c3RhdGljX2Nhc3Q8SFRNTFRhYmxlRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBpZiAo
aWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6VGFibGVDcmVhdGVUSGVhZCkKLSAgICAgICAgcmV0dXJu
IGdldERPTU5vZGUoZXhlYyx0YWJsZS5jcmVhdGVUSGVhZCgpKTsKLSAgICAgIGVsc2UgaWYgKGlk
ID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRhYmxlRGVsZXRlVEhlYWQpIHsKLSAgICAgICAgdGFibGUu
ZGVsZXRlVEhlYWQoKTsKLSAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwotICAgICAgfQotICAg
ICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6VGFibGVDcmVhdGVURm9vdCkKLSAg
ICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyx0YWJsZS5jcmVhdGVURm9vdCgpKTsKLSAgICAg
IGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRhYmxlRGVsZXRlVEZvb3QpIHsKLSAg
ICAgICAgdGFibGUuZGVsZXRlVEZvb3QoKTsKLSAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwot
ICAgICAgfQotICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6VGFibGVDcmVh
dGVDYXB0aW9uKQotICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLHRhYmxlLmNyZWF0ZUNh
cHRpb24oKSk7Ci0gICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUYWJsZURl
bGV0ZUNhcHRpb24pIHsKLSAgICAgICAgdGFibGUuZGVsZXRlQ2FwdGlvbigpOwotICAgICAgICBy
ZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhU
TUxFbGVtZW50OjpUYWJsZUluc2VydFJvdykKLSAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhl
Yyx0YWJsZS5pbnNlcnRSb3coYXJnc1swXS50b0ludDMyKGV4ZWMpLCBleGNlcHRpb24pKTsKLSAg
ICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRhYmxlRGVsZXRlUm93KSB7Ci0g
ICAgICAgIHRhYmxlLmRlbGV0ZVJvdyhhcmdzWzBdLnRvSW50MzIoZXhlYyksIGV4Y2VwdGlvbik7
Ci0gICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKLSAgICAgIH0KKyAgICBlbHNlIGlmIChlbGVt
ZW50Lmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmEoKSkpIHsKKyAgICAgICAgSFRNTEFuY2hvckVs
ZW1lbnRJbXBsICZhbmNob3IgPSBzdGF0aWNfY2FzdDxIVE1MQW5jaG9yRWxlbWVudEltcGwgJj4o
ZWxlbWVudCk7CisgICAgICAgIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpBbmNob3JCbHVy
KSB7CisgICAgICAgICAgICBhbmNob3IuYmx1cigpOworICAgICAgICAgICAgcmV0dXJuIFVuZGVm
aW5lZCgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1l
bnQ6OkFuY2hvckZvY3VzKSB7CisgICAgICAgICAgICBhbmNob3IuZm9jdXMoKTsKKyAgICAgICAg
ICAgIHJldHVybiBVbmRlZmluZWQoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChpZCA9
PSBLSlM6OkhUTUxFbGVtZW50OjpBbmNob3JUb1N0cmluZykKKyAgICAgICAgICAgIHJldHVybiBT
dHJpbmcodGhpc09iai50b1N0cmluZyhleGVjKSk7CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNh
c2UgSURfVEhFQUQ6Ci0gICAgY2FzZSBJRF9UQk9EWToKLSAgICBjYXNlIElEX1RGT09UOiB7Ci0g
ICAgICBIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGwgJnRhYmxlU2VjdGlvbiA9IHN0YXRpY19j
YXN0PEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIGlmIChp
ZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUYWJsZVNlY3Rpb25JbnNlcnRSb3cpCi0gICAgICAgIHJl
dHVybiBnZXRET01Ob2RlKGV4ZWMsIHRhYmxlU2VjdGlvbi5pbnNlcnRSb3coYXJnc1swXS50b0lu
dDMyKGV4ZWMpLCBleGNlcHRpb24pKTsKLSAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVs
ZW1lbnQ6OlRhYmxlU2VjdGlvbkRlbGV0ZVJvdykgewotICAgICAgICB0YWJsZVNlY3Rpb24uZGVs
ZXRlUm93KGFyZ3NbMF0udG9JbnQzMihleGVjKSwgZXhjZXB0aW9uKTsKLSAgICAgICAgcmV0dXJu
IFVuZGVmaW5lZCgpOwotICAgICAgfQorICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFzTG9jYWxOYW1l
KEhUTUxOYW1lczo6dGFibGUoKSkpIHsKKyAgICAgICAgSFRNTFRhYmxlRWxlbWVudEltcGwgJnRh
YmxlID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlRWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAg
ICAgIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUYWJsZUNyZWF0ZVRIZWFkKQorICAgICAg
ICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyx0YWJsZS5jcmVhdGVUSGVhZCgpKTsKKyAgICAg
ICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6VGFibGVEZWxldGVUSGVhZCkgewor
ICAgICAgICAgICAgdGFibGUuZGVsZXRlVEhlYWQoKTsKKyAgICAgICAgICAgIHJldHVybiBVbmRl
ZmluZWQoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVt
ZW50OjpUYWJsZUNyZWF0ZVRGb290KQorICAgICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhl
Yyx0YWJsZS5jcmVhdGVURm9vdCgpKTsKKyAgICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1M
RWxlbWVudDo6VGFibGVEZWxldGVURm9vdCkgeworICAgICAgICAgICAgdGFibGUuZGVsZXRlVEZv
b3QoKTsKKyAgICAgICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKKyAgICAgICAgfQorICAgICAg
ICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUYWJsZUNyZWF0ZUNhcHRpb24pCisg
ICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLHRhYmxlLmNyZWF0ZUNhcHRpb24oKSk7
CisgICAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRhYmxlRGVsZXRlQ2Fw
dGlvbikgeworICAgICAgICAgICAgdGFibGUuZGVsZXRlQ2FwdGlvbigpOworICAgICAgICAgICAg
cmV0dXJuIFVuZGVmaW5lZCgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGlkID09IEtK
Uzo6SFRNTEVsZW1lbnQ6OlRhYmxlSW5zZXJ0Um93KQorICAgICAgICAgICAgcmV0dXJuIGdldERP
TU5vZGUoZXhlYyx0YWJsZS5pbnNlcnRSb3coYXJnc1swXS50b0ludDMyKGV4ZWMpLCBleGNlcHRp
b24pKTsKKyAgICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6VGFibGVEZWxl
dGVSb3cpIHsKKyAgICAgICAgICAgIHRhYmxlLmRlbGV0ZVJvdyhhcmdzWzBdLnRvSW50MzIoZXhl
YyksIGV4Y2VwdGlvbik7CisgICAgICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CisgICAgICAg
IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9UUjogewotICAgICAgSFRNTFRhYmxl
Um93RWxlbWVudEltcGwgJnRhYmxlUm93ID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlUm93RWxlbWVu
dEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6VGFi
bGVSb3dJbnNlcnRDZWxsKQotICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLHRhYmxlUm93
Lmluc2VydENlbGwoYXJnc1swXS50b0ludDMyKGV4ZWMpLCBleGNlcHRpb24pKTsKLSAgICAgIGVs
c2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRhYmxlUm93RGVsZXRlQ2VsbCkgewotICAg
ICAgICB0YWJsZVJvdy5kZWxldGVDZWxsKGFyZ3NbMF0udG9JbnQzMihleGVjKSwgZXhjZXB0aW9u
KTsKLSAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwotICAgICAgfQorICAgIGVsc2UgaWYgKGVs
ZW1lbnQuaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dGhlYWQoKSkgfHwKKyAgICAgICAgICAgICBl
bGVtZW50Lmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnRib2R5KCkpIHx8CisgICAgICAgICAgICAg
ZWxlbWVudC5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0Zm9vdCgpKSkgeworICAgICAgICBIVE1M
VGFibGVTZWN0aW9uRWxlbWVudEltcGwgJnRhYmxlU2VjdGlvbiA9IHN0YXRpY19jYXN0PEhUTUxU
YWJsZVNlY3Rpb25FbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICAgICAgaWYgKGlkID09IEtK
Uzo6SFRNTEVsZW1lbnQ6OlRhYmxlU2VjdGlvbkluc2VydFJvdykKKyAgICAgICAgICAgIHJldHVy
biBnZXRET01Ob2RlKGV4ZWMsIHRhYmxlU2VjdGlvbi5pbnNlcnRSb3coYXJnc1swXS50b0ludDMy
KGV4ZWMpLCBleGNlcHRpb24pKTsKKyAgICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxl
bWVudDo6VGFibGVTZWN0aW9uRGVsZXRlUm93KSB7CisgICAgICAgICAgICB0YWJsZVNlY3Rpb24u
ZGVsZXRlUm93KGFyZ3NbMF0udG9JbnQzMihleGVjKSwgZXhjZXB0aW9uKTsKKyAgICAgICAgICAg
IHJldHVybiBVbmRlZmluZWQoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmIChlbGVt
ZW50Lmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnRyKCkpKSB7CisgICAgICAgIEhUTUxUYWJsZVJv
d0VsZW1lbnRJbXBsICZ0YWJsZVJvdyA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZVJvd0VsZW1lbnRJ
bXBsICY+KGVsZW1lbnQpOworICAgICAgICBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6VGFi
bGVSb3dJbnNlcnRDZWxsKQorICAgICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyx0YWJs
ZVJvdy5pbnNlcnRDZWxsKGFyZ3NbMF0udG9JbnQzMihleGVjKSwgZXhjZXB0aW9uKSk7CisgICAg
ICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRhYmxlUm93RGVsZXRlQ2VsbCkg
eworICAgICAgICAgICAgdGFibGVSb3cuZGVsZXRlQ2VsbChhcmdzWzBdLnRvSW50MzIoZXhlYyks
IGV4Y2VwdGlvbik7CisgICAgICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CisgICAgICAgIH0K
ICAgICB9Ci0gICAgY2FzZSBJRF9NQVJRVUVFOiB7CisgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNM
b2NhbE5hbWUoSFRNTE5hbWVzOjptYXJxdWVlKCkpKSB7CiAgICAgICAgIGlmIChpZCA9PSBLSlM6
OkhUTUxFbGVtZW50OjpNYXJxdWVlU3RhcnQgJiYgZWxlbWVudC5yZW5kZXJlcigpICYmIAogICAg
ICAgICAgICAgZWxlbWVudC5yZW5kZXJlcigpLT5sYXllcigpICYmCiAgICAgICAgICAgICBlbGVt
ZW50LnJlbmRlcmVyKCktPmxheWVyKCktPm1hcnF1ZWUoKSkgewpAQCAtMjMwNSw5ICsyNDQ2LDkg
QEAgVmFsdWUgS0pTOjpIVE1MRWxlbWVudEZ1bmN0aW9uOjp0cnlDYWxsKAogICAgICAgICAgICAg
ZWxlbWVudC5yZW5kZXJlcigpLT5sYXllcigpLT5tYXJxdWVlKCktPnN0b3AoKTsKICAgICAgICAg
ICAgIHJldHVybiBVbmRlZmluZWQoKTsKICAgICAgICAgfQotICAgICAgICBicmVhazsKICAgICB9
Ci0gICAgY2FzZSBJRF9DQU5WQVM6IHsKKyNpZiBBUFBMRV9DSEFOR0VTCisgICAgZWxzZSBpZiAo
ZWxlbWVudC5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpjYW52YXMoKSkpIHsKICAgICAgICAgaWYg
KGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OkdldENvbnRleHQpIHsKICAgICAgICAgICAgIGlmIChh
cmdzLnNpemUoKSA9PSAwIHx8IChhcmdzLnNpemUoKSA9PSAxICYmIGFyZ3NbMF0udG9TdHJpbmco
ZXhlYykucXN0cmluZygpLmxvd2VyKCkgPT0gIjJkIikpIHsKICAgICAgICAgICAgICAgICByZXR1
cm4gT2JqZWN0KG5ldyBDb250ZXh0MkQoJmVsZW1lbnQpKTsKQEAgLTIzMTUsNzM4ICsyNDU2LDc1
NiBAQCBWYWx1ZSBLSlM6OkhUTUxFbGVtZW50RnVuY3Rpb246OnRyeUNhbGwoCiAgICAgICAgICAg
ICByZXR1cm4gVW5kZWZpbmVkKCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCi0gICAgYnJlYWs7
Ci0gIH0KKyNlbmRpZgogCi0gIHJldHVybiBVbmRlZmluZWQoKTsKKyAgICByZXR1cm4gVW5kZWZp
bmVkKCk7CiB9CiAKIHZvaWQgS0pTOjpIVE1MRWxlbWVudDo6dHJ5UHV0KEV4ZWNTdGF0ZSAqZXhl
YywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGlu
dCBhdHRyKQogewogI2lmZGVmIEtKU19WRVJCT1NFCi0gIERPTTo6RE9NU3RyaW5nIHN0ciA9IHZh
bHVlLmlzQShOdWxsVHlwZSkgPyBET006OkRPTVN0cmluZygpIDogdmFsdWUudG9TdHJpbmcoZXhl
Yykuc3RyaW5nKCk7CisgICAgRE9NOjpET01TdHJpbmcgc3RyID0gdmFsdWUuaXNBKE51bGxUeXBl
KSA/IERPTTo6RE9NU3RyaW5nKCkgOiB2YWx1ZS50b1N0cmluZyhleGVjKS5zdHJpbmcoKTsKICNl
bmRpZgotICBIVE1MRWxlbWVudEltcGwgJmVsZW1lbnQgPSAqc3RhdGljX2Nhc3Q8SFRNTEVsZW1l
bnRJbXBsICo+KGltcGwoKSk7CisgICAgSFRNTEVsZW1lbnRJbXBsICZlbGVtZW50ID0gKnN0YXRp
Y19jYXN0PEhUTUxFbGVtZW50SW1wbCAqPihpbXBsKCkpOwogI2lmZGVmIEtKU19WRVJCT1NFCi0g
IGtkRGVidWcoNjA3MCkgPDwgIktKUzo6SFRNTEVsZW1lbnQ6OnRyeVB1dCAiIDw8IHByb3BlcnR5
TmFtZS5xc3RyaW5nKCkKLSAgICAgICAgICAgICAgICA8PCAiIHRoaXNUYWc9IiA8PCBlbGVtZW50
LnRhZ05hbWUoKS5zdHJpbmcoKQotICAgICAgICAgICAgICAgIDw8ICIgc3RyPSIgPDwgc3RyLnN0
cmluZygpIDw8IGVuZGw7CisgICAga2REZWJ1Zyg2MDcwKSA8PCAiS0pTOjpIVE1MRWxlbWVudDo6
dHJ5UHV0ICIgPDwgcHJvcGVydHlOYW1lLnFzdHJpbmcoKQorICAgICAgICAgICAgICAgICAgPDwg
IiB0aGlzVGFnPSIgPDwgZWxlbWVudC50YWdOYW1lKCkuc3RyaW5nKCkKKyAgICAgICAgICAgICAg
ICAgIDw8ICIgc3RyPSIgPDwgc3RyLnN0cmluZygpIDw8IGVuZGw7CiAjZW5kaWYKLSAgLy8gRmly
c3QgbG9vayBhdCBkeW5hbWljIHByb3BlcnRpZXMKLSAgc3dpdGNoIChlbGVtZW50LmlkKCkpIHsK
LSAgICBjYXNlIElEX1NFTEVDVDogewotICAgICAgSFRNTFNlbGVjdEVsZW1lbnRJbXBsICZzZWxl
Y3QgPSBzdGF0aWNfY2FzdDxIVE1MU2VsZWN0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAg
ICBib29sIG9rOwotICAgICAgLyp1aW50IHUgPSovIHByb3BlcnR5TmFtZS50b1VMb25nKCZvayk7
Ci0gICAgICBpZiAob2spIHsKLSAgICAgICAgT2JqZWN0IGNvbGwgPSBPYmplY3Q6OmR5bmFtaWND
YXN0KCBnZXRTZWxlY3RIVE1MQ29sbGVjdGlvbihleGVjLCBzZWxlY3Qub3B0aW9uc0hUTUxDb2xs
ZWN0aW9uKCkuZ2V0KCksICZzZWxlY3QpICk7Ci0gICAgICAgIGlmICggIWNvbGwuaXNOdWxsKCkg
KQotICAgICAgICAgIGNvbGwucHV0KGV4ZWMscHJvcGVydHlOYW1lLHZhbHVlKTsKLSAgICAgICAg
cmV0dXJuOwotICAgICAgfQorICAgIC8vIEZpcnN0IGxvb2sgYXQgZHluYW1pYyBwcm9wZXJ0aWVz
CisgICAgaWYgKGVsZW1lbnQuaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6c2VsZWN0KCkpKSB7Cisg
ICAgICAgIEhUTUxTZWxlY3RFbGVtZW50SW1wbCAmc2VsZWN0ID0gc3RhdGljX2Nhc3Q8SFRNTFNl
bGVjdEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgICAgICBib29sIG9rOworICAgICAgICAv
KnVpbnQgdSA9Ki8gcHJvcGVydHlOYW1lLnRvVUxvbmcoJm9rKTsKKyAgICAgICAgaWYgKG9rKSB7
CisgICAgICAgICAgICBPYmplY3QgY29sbCA9IE9iamVjdDo6ZHluYW1pY0Nhc3QoIGdldFNlbGVj
dEhUTUxDb2xsZWN0aW9uKGV4ZWMsIHNlbGVjdC5vcHRpb25zSFRNTENvbGxlY3Rpb24oKS5nZXQo
KSwgJnNlbGVjdCkgKTsKKyAgICAgICAgICAgIGlmICghY29sbC5pc051bGwoKSkKKyAgICAgICAg
ICAgICAgICBjb2xsLnB1dChleGVjLHByb3BlcnR5TmFtZSx2YWx1ZSk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KICAgICB9CiAjaWYgQVBQTEVfQ0hBTkdFUwotICAgIGNhc2UgSURf
RU1CRUQ6Ci0gICAgY2FzZSBJRF9PQkpFQ1Q6Ci0gICAgY2FzZSBJRF9BUFBMRVQ6IHsKKyAgICBl
bHNlIGlmIChlbGVtZW50Lmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmVtYmVkKCkpIHx8CisgICAg
ICAgICAgICAgZWxlbWVudC5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvYmplY3QoKSkgfHwKKyAg
ICAgICAgICAgICBlbGVtZW50Lmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmFwcGxldCgpKSkgewog
CVZhbHVlIHJ1bnRpbWVPYmplY3QgPSBnZXRSdW50aW1lT2JqZWN0KGV4ZWMsJmVsZW1lbnQpOwog
CWlmICghcnVudGltZU9iamVjdC5pc051bGwoKSkgewogCSAgICBPYmplY3RJbXAgKmltcCA9IHN0
YXRpY19jYXN0PE9iamVjdEltcCAqPihydW50aW1lT2JqZWN0LmltcCgpKTsKLQkgICAgaWYgKGlt
cC0+Y2FuUHV0KGV4ZWMsIHByb3BlcnR5TmFtZSkpIHsKKwkgICAgaWYgKGltcC0+Y2FuUHV0KGV4
ZWMsIHByb3BlcnR5TmFtZSkpCiAJCXJldHVybiBpbXAtPnB1dCAoZXhlYywgcHJvcGVydHlOYW1l
LCB2YWx1ZSk7Ci0JICAgIH0KIAl9CiAgICAgfQotICAgICAgYnJlYWs7CiAjZW5kaWYKLSAgICBi
cmVhazsKLSAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwotICB9CiAKLSAgY29uc3QgSGFzaFRhYmxl
KiB0YWJsZSA9IGNsYXNzSW5mbygpLT5wcm9wSGFzaFRhYmxlOyAvLyBnZXQgdGhlIHJpZ2h0IGhh
c2h0YWJsZQotICBjb25zdCBIYXNoRW50cnkqIGVudHJ5ID0gTG9va3VwOjpmaW5kRW50cnkodGFi
bGUsIHByb3BlcnR5TmFtZSk7Ci0gIGlmIChlbnRyeSkgewotICAgIGlmIChlbnRyeS0+YXR0ciAm
IEZ1bmN0aW9uKSAvLyBmdW5jdGlvbjogcHV0IGFzIG92ZXJyaWRlIHByb3BlcnR5Ci0gICAgewot
ICAgICAgT2JqZWN0SW1wOjpwdXQoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgYXR0cik7Ci0g
ICAgICByZXR1cm47Ci0gICAgfQotICAgIGVsc2UgaWYgKChlbnRyeS0+YXR0ciAmIFJlYWRPbmx5
KSA9PSAwKSAvLyBsZXQgRE9NT2JqZWN0TG9va3VwUHV0IHByaW50IHRoZSB3YXJuaW5nIGlmIG5v
dAotICAgIHsKLSAgICAgIHB1dFZhbHVlKGV4ZWMsIGVudHJ5LT52YWx1ZSwgdmFsdWUsIGF0dHIp
OwotICAgICAgcmV0dXJuOworICAgIGNvbnN0IEhhc2hUYWJsZSogdGFibGUgPSBjbGFzc0luZm8o
KS0+cHJvcEhhc2hUYWJsZTsgLy8gZ2V0IHRoZSByaWdodCBoYXNodGFibGUKKyAgICBjb25zdCBI
YXNoRW50cnkqIGVudHJ5ID0gTG9va3VwOjpmaW5kRW50cnkodGFibGUsIHByb3BlcnR5TmFtZSk7
CisgICAgaWYgKGVudHJ5KSB7CisgICAgICAgIGlmIChlbnRyeS0+YXR0ciAmIEZ1bmN0aW9uKSB7
IC8vIGZ1bmN0aW9uOiBwdXQgYXMgb3ZlcnJpZGUgcHJvcGVydHkKKyAgICAgICAgICAgIE9iamVj
dEltcDo6cHV0KGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIGF0dHIpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKChlbnRyeS0+YXR0ciAmIFJlYWRP
bmx5KSA9PSAwKSB7IC8vIGxldCBET01PYmplY3RMb29rdXBQdXQgcHJpbnQgdGhlIHdhcm5pbmcg
aWYgbm90CisgICAgICAgICAgICBwdXRWYWx1ZShleGVjLCBlbnRyeS0+dmFsdWUsIHZhbHVlLCBh
dHRyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAgIH0KLSAgfQotICBET01P
YmplY3RMb29rdXBQdXQ8S0pTOjpIVE1MRWxlbWVudCwgRE9NRWxlbWVudD4oZXhlYywgcHJvcGVy
dHlOYW1lLCB2YWx1ZSwgYXR0ciwgJkhUTUxFbGVtZW50VGFibGUsIHRoaXMpOworCisgICAgRE9N
T2JqZWN0TG9va3VwUHV0PEtKUzo6SFRNTEVsZW1lbnQsIERPTUVsZW1lbnQ+KGV4ZWMsIHByb3Bl
cnR5TmFtZSwgdmFsdWUsIGF0dHIsICZIVE1MRWxlbWVudFRhYmxlLCB0aGlzKTsKIH0KIAotdm9p
ZCBIVE1MRWxlbWVudDo6cHV0VmFsdWUoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0
IFZhbHVlJiB2YWx1ZSwgaW50KQordm9pZCBIVE1MRWxlbWVudDo6aHRtbFNldHRlcihFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0
cmluZyYgc3RyKQogewotICBET01FeGNlcHRpb25UcmFuc2xhdG9yIGV4Y2VwdGlvbihleGVjKTsK
LSAgRE9NOjpET01TdHJpbmcgc3RyID0gdmFsdWUuaXNBKE51bGxUeXBlKSA/IERPTTo6RE9NU3Ry
aW5nKCkgOiB2YWx1ZS50b1N0cmluZyhleGVjKS5zdHJpbmcoKTsKLSAgSFRNTEVsZW1lbnRJbXBs
ICZlbGVtZW50ID0gKnN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCAqPihpbXBsKCkpOwotI2lm
ZGVmIEtKU19WRVJCT1NFCi0gIGtkRGVidWcoNjA3MCkgPDwgIktKUzo6SFRNTEVsZW1lbnQ6OnB1
dFZhbHVlICIKLSAgICAgICAgICAgICAgICA8PCAiIHRoaXNUYWc9IiA8PCBlbGVtZW50LnRhZ05h
bWUoKS5zdHJpbmcoKQotICAgICAgICAgICAgICAgIDw8ICIgdG9rZW49IiA8PCB0b2tlbiA8PCBl
bmRsOwotI2VuZGlmCisgICAgSFRNTEhlYWRFbGVtZW50SW1wbCAmaGVhZCA9ICpzdGF0aWNfY2Fz
dDxIVE1MSGVhZEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBpZiAodG9rZW4gPT0gSGVhZFBy
b2ZpbGUpIAorICAgICAgICBoZWFkLnNldFByb2ZpbGUoc3RyKTsKK30KIAotICBzd2l0Y2ggKGVs
ZW1lbnQuaWQoKSkgewotICBjYXNlIElEX0hUTUw6IHsKLSAgICAgIEhUTUxIdG1sRWxlbWVudElt
cGwgJmh0bWwgPSBzdGF0aWNfY2FzdDxIVE1MSHRtbEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwot
ICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgY2FzZSBIdG1sVmVyc2lvbjogICAgICAgICB7
IGh0bWwuc2V0VmVyc2lvbihzdHIpOyByZXR1cm47IH0KLSAgICAgIH0KLSAgfQotICBicmVhazsK
LSAgY2FzZSBJRF9IRUFEOiB7Ci0gICAgSFRNTEhlYWRFbGVtZW50SW1wbCAmaGVhZCA9IHN0YXRp
Y19jYXN0PEhUTUxIZWFkRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Cit2b2lkIEhUTUxFbGVtZW50
OjpoZWFkU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFs
dWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTEhlYWRFbGVtZW50SW1w
bCAmaGVhZCA9ICpzdGF0aWNfY2FzdDxIVE1MSGVhZEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAg
ICBpZiAodG9rZW4gPT0gSGVhZFByb2ZpbGUpIAorICAgICAgICBoZWFkLnNldFByb2ZpbGUoc3Ry
KTsKK30KKwordm9pZCBIVE1MRWxlbWVudDo6bGlua1NldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQor
eworICAgIEhUTUxMaW5rRWxlbWVudEltcGwgJmxpbmsgPSAqc3RhdGljX2Nhc3Q8SFRNTExpbmtF
bGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgSGVh
ZFByb2ZpbGU6ICAgICAgICAgeyBoZWFkLnNldFByb2ZpbGUoc3RyKTsgcmV0dXJuOyB9CisgICAg
ICAgIGNhc2UgTGlua0Rpc2FibGVkOiAgICAgICAgeyBsaW5rLnNldERpc2FibGVkKHZhbHVlLnRv
Qm9vbGVhbihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIExpbmtDaGFyc2V0OiAgICAg
ICAgIHsgbGluay5zZXRDaGFyc2V0KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIExpbmtI
cmVmOiAgICAgICAgICAgIHsgbGluay5zZXRIcmVmKHN0cik7IHJldHVybjsgfQorICAgICAgICBj
YXNlIExpbmtIcmVmTGFuZzogICAgICAgIHsgbGluay5zZXRIcmVmbGFuZyhzdHIpOyByZXR1cm47
IH0KKyAgICAgICAgY2FzZSBMaW5rTWVkaWE6ICAgICAgICAgICB7IGxpbmsuc2V0TWVkaWEoc3Ry
KTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgTGlua1JlbDogICAgICAgICAgICAgeyBsaW5rLnNl
dFJlbChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBMaW5rUmV2OiAgICAgICAgICAgICB7
IGxpbmsuc2V0UmV2KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIExpbmtUYXJnZXQ6ICAg
ICAgICAgIHsgbGluay5zZXRUYXJnZXQoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgTGlu
a1R5cGU6ICAgICAgICAgICAgeyBsaW5rLnNldFR5cGUoc3RyKTsgcmV0dXJuOyB9CiAgICAgfQot
ICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX0xJTks6IHsKLSAgICBIVE1MTGlua0VsZW1lbnRJbXBs
ICZsaW5rID0gc3RhdGljX2Nhc3Q8SFRNTExpbmtFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAg
ICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIExpbmtEaXNhYmxlZDogICAgICAgIHsgbGlu
ay5zZXREaXNhYmxlZCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNh
c2UgTGlua0NoYXJzZXQ6ICAgICAgICAgeyBsaW5rLnNldENoYXJzZXQoc3RyKTsgcmV0dXJuOyB9
Ci0gICAgICBjYXNlIExpbmtIcmVmOiAgICAgICAgICAgIHsgbGluay5zZXRIcmVmKHN0cik7IHJl
dHVybjsgfQotICAgICAgY2FzZSBMaW5rSHJlZkxhbmc6ICAgICAgICB7IGxpbmsuc2V0SHJlZmxh
bmcoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIExpbmtNZWRpYTogICAgICAgICAgIHsgbGlu
ay5zZXRNZWRpYShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgTGlua1JlbDogICAgICAgICAg
ICAgeyBsaW5rLnNldFJlbChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgTGlua1JldjogICAg
ICAgICAgICAgeyBsaW5rLnNldFJldihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgTGlua1Rh
cmdldDogICAgICAgICAgeyBsaW5rLnNldFRhcmdldChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNh
c2UgTGlua1R5cGU6ICAgICAgICAgICAgeyBsaW5rLnNldFR5cGUoc3RyKTsgcmV0dXJuOyB9Ci0g
ICAgICB9Ci0gICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfVElUTEU6IHsKLSAgICAgIEhU
TUxUaXRsZUVsZW1lbnRJbXBsICZ0aXRsZSA9IHN0YXRpY19jYXN0PEhUTUxUaXRsZUVsZW1lbnRJ
bXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgY2FzZSBUaXRs
ZVRleHQ6ICAgICAgICAgICAgICAgICB7IHRpdGxlLnNldFRleHQoc3RyKTsgcmV0dXJuOyB9Ci0g
ICAgICB9Ci0gICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfTUVUQTogewotICAgICAgSFRN
TE1ldGFFbGVtZW50SW1wbCAmbWV0YSA9IHN0YXRpY19jYXN0PEhUTUxNZXRhRWxlbWVudEltcGwg
Jj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIE1ldGFDb250
ZW50OiAgICAgICAgIHsgbWV0YS5zZXRDb250ZW50KHN0cik7IHJldHVybjsgfQotICAgICAgY2Fz
ZSBNZXRhSHR0cEVxdWl2OiAgICAgICB7IG1ldGEuc2V0SHR0cEVxdWl2KHN0cik7IHJldHVybjsg
fQotICAgICAgY2FzZSBNZXRhTmFtZTogICAgICAgICAgICB7IG1ldGEuc2V0TmFtZShzdHIpOyBy
ZXR1cm47IH0KLSAgICAgIGNhc2UgTWV0YVNjaGVtZTogICAgICAgICAgeyBtZXRhLnNldFNjaGVt
ZShzdHIpOyByZXR1cm47IH0KLSAgICAgIH0KLSAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJ
RF9CQVNFOiB7Ci0gICAgICBIVE1MQmFzZUVsZW1lbnRJbXBsICZiYXNlID0gc3RhdGljX2Nhc3Q8
SFRNTEJhc2VFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsK
LSAgICAgIGNhc2UgQmFzZUhyZWY6ICAgICAgICAgICAgeyBiYXNlLnNldEhyZWYoc3RyKTsgcmV0
dXJuOyB9Ci0gICAgICBjYXNlIEJhc2VUYXJnZXQ6ICAgICAgICAgIHsgYmFzZS5zZXRUYXJnZXQo
c3RyKTsgcmV0dXJuOyB9Ci0gICAgICB9Ci0gICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURf
SVNJTkRFWDogewotICAgICAgSFRNTElzSW5kZXhFbGVtZW50SW1wbCAmaXNpbmRleCA9IHN0YXRp
Y19jYXN0PEhUTUxJc0luZGV4RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2gg
KHRva2VuKSB7Ci0gICAgICAvLyByZWFkLW9ubHk6IGZvcm0KLSAgICAgIGNhc2UgSXNJbmRleFBy
b21wdDogICAgICAgICAgICAgICB7IGlzaW5kZXguc2V0UHJvbXB0KHN0cik7IHJldHVybjsgfQot
ICAgICAgfQotICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX1NUWUxFOiB7Ci0gICAgICBI
VE1MU3R5bGVFbGVtZW50SW1wbCAmc3R5bGUgPSBzdGF0aWNfY2FzdDxIVE1MU3R5bGVFbGVtZW50
SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgU3R5
bGVEaXNhYmxlZDogICAgICAgIHsgc3R5bGUuc2V0RGlzYWJsZWQodmFsdWUudG9Cb29sZWFuKGV4
ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFN0eWxlTWVkaWE6ICAgICAgICAgICB7IHN0eWxl
LnNldE1lZGlhKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBTdHlsZVR5cGU6ICAgICAgICAg
ICAgeyBzdHlsZS5zZXRUeXBlKHN0cik7IHJldHVybjsgfQotICAgICAgfQotICAgIH0KLSAgICBi
cmVhazsKLSAgICBjYXNlIElEX0JPRFk6IHsKLSAgICAgIEhUTUxCb2R5RWxlbWVudEltcGwgJmJv
ZHkgPSBzdGF0aWNfY2FzdDxIVE1MQm9keUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAg
c3dpdGNoICh0b2tlbikgewotICAgICAgY2FzZSBCb2R5QUxpbms6ICAgICAgICAgICB7IGJvZHku
c2V0QUxpbmsoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEJvZHlCYWNrZ3JvdW5kOiAgICAg
IHsgYm9keS5zZXRCYWNrZ3JvdW5kKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBCb2R5QmdD
b2xvcjogICAgICAgICB7IGJvZHkuc2V0QmdDb2xvcihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNh
c2UgQm9keUxpbms6ICAgICAgICAgICAgeyBib2R5LnNldExpbmsoc3RyKTsgcmV0dXJuOyB9Ci0g
ICAgICBjYXNlIEJvZHlUZXh0OiAgICAgICAgICAgIHsgYm9keS5zZXRUZXh0KHN0cik7IHJldHVy
bjsgfQotICAgICAgY2FzZSBCb2R5Vkxpbms6ICAgICAgICAgICB7IGJvZHkuc2V0Vkxpbmsoc3Ry
KTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEJvZHlTY3JvbGxMZWZ0OgotICAgICAgY2FzZSBCb2R5
U2Nyb2xsVG9wOiB7Ci0gICAgICAgICAgUVNjcm9sbFZpZXcqIHN2aWV3ID0gYm9keS5vd25lckRv
Y3VtZW50KCktPnZpZXcoKTsKLSAgICAgICAgICBpZiAoc3ZpZXcpIHsKLSAgICAgICAgICAgICAg
Ly8gVXBkYXRlIHRoZSBkb2N1bWVudCdzIGxheW91dCBiZWZvcmUgd2UgY29tcHV0ZSB0aGVzZSBh
dHRyaWJ1dGVzLgotICAgICAgICAgICAgICBpZiAoRG9jdW1lbnRJbXBsKiBkb2MgPSBib2R5Lmdl
dERvY3VtZW50KCkpCi0gICAgICAgICAgICAgICAgICBkb2MtPnVwZGF0ZUxheW91dElnbm9yZVBl
bmRpbmdTdHlsZXNoZWV0cygpOwotICAgICAgICAgICAgICBpZiAodG9rZW4gPT0gQm9keVNjcm9s
bExlZnQpCi0gICAgICAgICAgICAgICAgICBzdmlldy0+c2V0Q29udGVudHNQb3ModmFsdWUudG9J
bnQzMihleGVjKSwgc3ZpZXctPmNvbnRlbnRzWSgpKTsKLSAgICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgICAgc3ZpZXctPnNldENvbnRlbnRzUG9zKHN2aWV3LT5jb250ZW50c1goKSwg
dmFsdWUudG9JbnQzMihleGVjKSk7Ci0gICAgICAgICAgfQotICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0ZPUk06IHsK
LSAgICAgIEhUTUxGb3JtRWxlbWVudEltcGwgJmZvcm0gPSBzdGF0aWNfY2FzdDxIVE1MRm9ybUVs
ZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgLy8g
cmVhZC1vbmx5OiBlbGVtZW50cwotICAgICAgLy8gcmVhZC1vbmx5OiBsZW5ndGgKLSAgICAgIGNh
c2UgRm9ybU5hbWU6ICAgICAgICAgICAgeyBmb3JtLnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9Ci0g
ICAgICBjYXNlIEZvcm1BY2NlcHRDaGFyc2V0OiAgIHsgZm9ybS5zZXRBY2NlcHRDaGFyc2V0KHN0
cik7IHJldHVybjsgfQotICAgICAgY2FzZSBGb3JtQWN0aW9uOiAgICAgICAgICB7IGZvcm0uc2V0
QWN0aW9uKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBGb3JtRW5jVHlwZTogICAgICAgICB7
IGZvcm0uc2V0RW5jdHlwZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgRm9ybU1ldGhvZDog
ICAgICAgICAgeyBmb3JtLnNldE1ldGhvZChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgRm9y
bVRhcmdldDogICAgICAgICAgeyBmb3JtLnNldFRhcmdldChzdHIpOyByZXR1cm47IH0KLSAgICAg
IH0KLSAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9TRUxFQ1Q6IHsKLSAgICAgIEhUTUxT
ZWxlY3RFbGVtZW50SW1wbCAmc2VsZWN0ID0gc3RhdGljX2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnRJ
bXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgLy8gcmVhZC1v
bmx5OiB0eXBlCi0gICAgICBjYXNlIFNlbGVjdFNlbGVjdGVkSW5kZXg6ICAgeyBzZWxlY3Quc2V0
U2VsZWN0ZWRJbmRleCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNl
IFNlbGVjdFZhbHVlOiAgICAgICAgICAgeyBzZWxlY3Quc2V0VmFsdWUoc3RyKTsgcmV0dXJuOyB9
Ci0gICAgICBjYXNlIFNlbGVjdExlbmd0aDogICAgICAgICAgeyAvLyByZWFkLW9ubHkgYWNjb3Jk
aW5nIHRvIHRoZSBOUyBzcGVjLCBidXQgd2VicGFnZXMgbmVlZCBpdCB3cml0ZWFibGUKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0IGNvbGwgPSBPYmplY3Q6
OmR5bmFtaWNDYXN0KCBnZXRTZWxlY3RIVE1MQ29sbGVjdGlvbihleGVjLCBzZWxlY3Qub3B0aW9u
c0hUTUxDb2xsZWN0aW9uKCkuZ2V0KCksICZzZWxlY3QpICk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICggIWNvbGwuaXNOdWxsKCkgKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGwucHV0KGV4ZWMsbGVuZ3RoUHJvcGVy
dHlOYW1lLHZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
Ly8gcmVhZC1vbmx5OiBmb3JtCi0gICAgICAvLyByZWFkLW9ubHk6IG9wdGlvbnMKLSAgICAgIGNh
c2UgU2VsZWN0RGlzYWJsZWQ6ICAgICAgICB7IHNlbGVjdC5zZXREaXNhYmxlZCh2YWx1ZS50b0Jv
b2xlYW4oZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgU2VsZWN0TXVsdGlwbGU6ICAgICAg
ICB7IHNlbGVjdC5zZXRNdWx0aXBsZSh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0K
LSAgICAgIGNhc2UgU2VsZWN0TmFtZTogICAgICAgICAgICB7IHNlbGVjdC5zZXROYW1lKHN0cik7
IHJldHVybjsgfQotICAgICAgY2FzZSBTZWxlY3RTaXplOiAgICAgICAgICAgIHsgc2VsZWN0LnNl
dFNpemUodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBTZWxlY3RU
YWJJbmRleDogICAgICAgIHsgc2VsZWN0LnNldFRhYkluZGV4KHZhbHVlLnRvSW50MzIoZXhlYykp
OyByZXR1cm47IH0KLSAgICAgIH0KLSAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9PUFRH
Uk9VUDogewotICAgICAgSFRNTE9wdEdyb3VwRWxlbWVudEltcGwgJm9wdGdyb3VwID0gc3RhdGlj
X2Nhc3Q8SFRNTE9wdEdyb3VwRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2gg
KHRva2VuKSB7Ci0gICAgICBjYXNlIE9wdEdyb3VwRGlzYWJsZWQ6ICAgICAgICB7IG9wdGdyb3Vw
LnNldERpc2FibGVkKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2Fz
ZSBPcHRHcm91cExhYmVsOiAgICAgICAgICAgeyBvcHRncm91cC5zZXRMYWJlbChzdHIpOyByZXR1
cm47IH0KLSAgICAgIH0KLSAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9PUFRJT046IHsK
LSAgICAgIEhUTUxPcHRpb25FbGVtZW50SW1wbCAmb3B0aW9uID0gc3RhdGljX2Nhc3Q8SFRNTE9w
dGlvbkVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAg
ICAgLy8gcmVhZC1vbmx5OiBmb3JtCi0gICAgICBjYXNlIE9wdGlvbkRlZmF1bHRTZWxlY3RlZDog
eyBvcHRpb24uc2V0RGVmYXVsdFNlbGVjdGVkKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVy
bjsgfQotICAgICAgY2FzZSBPcHRpb25UZXh0OiAgICAgICAgICAgIHsgb3B0aW9uLnNldFRleHQo
c3RyLCBleGNlcHRpb24pOyByZXR1cm47IH0KLSAgICAgIC8vIHJlYWQtb25seTogaW5kZXgKLSAg
ICAgIGNhc2UgT3B0aW9uRGlzYWJsZWQ6ICAgICAgICB7IG9wdGlvbi5zZXREaXNhYmxlZCh2YWx1
ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgT3B0aW9uTGFiZWw6ICAg
ICAgICAgICB7IG9wdGlvbi5zZXRMYWJlbChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgT3B0
aW9uU2VsZWN0ZWQ6ICAgICAgICB7IG9wdGlvbi5zZXRTZWxlY3RlZCh2YWx1ZS50b0Jvb2xlYW4o
ZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgT3B0aW9uVmFsdWU6ICAgICAgICAgICB7IG9w
dGlvbi5zZXRWYWx1ZShzdHIpOyByZXR1cm47IH0KLSAgICAgIH0KLSAgICB9Ci0gICAgYnJlYWs7
Ci0gICAgY2FzZSBJRF9JTlBVVDogewotICAgICAgSFRNTElucHV0RWxlbWVudEltcGwgJmlucHV0
ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBz
d2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIElucHV0RGVmYXVsdFZhbHVlOiAgICB7IGlucHV0
LnNldERlZmF1bHRWYWx1ZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSW5wdXREZWZhdWx0
Q2hlY2tlZDogIHsgaW5wdXQuc2V0RGVmYXVsdENoZWNrZWQodmFsdWUudG9Cb29sZWFuKGV4ZWMp
KTsgcmV0dXJuOyB9Ci0gICAgICAvLyByZWFkLW9ubHk6IGZvcm0KLSAgICAgIGNhc2UgSW5wdXRB
Y2NlcHQ6ICAgICAgICAgIHsgaW5wdXQuc2V0QWNjZXB0KHN0cik7IHJldHVybjsgfQotICAgICAg
Y2FzZSBJbnB1dEFjY2Vzc0tleTogICAgICAgeyBpbnB1dC5zZXRBY2Nlc3NLZXkoc3RyKTsgcmV0
dXJuOyB9Ci0gICAgICBjYXNlIElucHV0QWxpZ246ICAgICAgICAgICB7IGlucHV0LnNldEFsaWdu
KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBJbnB1dEFsdDogICAgICAgICAgICAgeyBpbnB1
dC5zZXRBbHQoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElucHV0Q2hlY2tlZDogICAgICAg
ICB7IGlucHV0LnNldENoZWNrZWQodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9Ci0g
ICAgICBjYXNlIElucHV0RGlzYWJsZWQ6ICAgICAgICB7IGlucHV0LnNldERpc2FibGVkKHZhbHVl
LnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBJbnB1dE1heExlbmd0aDog
ICAgICAgeyBpbnB1dC5zZXRNYXhMZW5ndGgodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsg
fQotICAgICAgY2FzZSBJbnB1dE5hbWU6ICAgICAgICAgICAgeyBpbnB1dC5zZXROYW1lKHN0cik7
IHJldHVybjsgfQotICAgICAgY2FzZSBJbnB1dFJlYWRPbmx5OiAgICAgICAgeyBpbnB1dC5zZXRS
ZWFkT25seSh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSW5w
dXRTaXplOiAgICAgICAgICAgIHsgaW5wdXQuc2V0U2l6ZShzdHIpOyByZXR1cm47IH0KLSAgICAg
IGNhc2UgSW5wdXRTcmM6ICAgICAgICAgICAgIHsgaW5wdXQuc2V0U3JjKHN0cik7IHJldHVybjsg
fQotICAgICAgY2FzZSBJbnB1dFRhYkluZGV4OiAgICAgICAgeyBpbnB1dC5zZXRUYWJJbmRleCh2
YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElucHV0VHlwZTogICAg
ICAgICAgICB7IGlucHV0LnNldFR5cGUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElucHV0
VXNlTWFwOiAgICAgICAgICB7IGlucHV0LnNldFVzZU1hcChzdHIpOyByZXR1cm47IH0KLSAgICAg
IGNhc2UgSW5wdXRWYWx1ZTogICAgICAgICAgIHsgaW5wdXQuc2V0VmFsdWUoc3RyKTsgcmV0dXJu
OyB9Ci0gICAgICB9Ci0gICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfVEVYVEFSRUE6IHsK
LSAgICAgIEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBsICZ0ZXh0YXJlYSA9IHN0YXRpY19jYXN0PEhU
TUxUZXh0QXJlYUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikg
ewotICAgICAgY2FzZSBUZXh0QXJlYURlZmF1bHRWYWx1ZTogICAgeyB0ZXh0YXJlYS5zZXREZWZh
dWx0VmFsdWUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICAvLyByZWFkLW9ubHk6IGZvcm0KLSAgICAg
IGNhc2UgVGV4dEFyZWFBY2Nlc3NLZXk6ICAgICAgIHsgdGV4dGFyZWEuc2V0QWNjZXNzS2V5KHN0
cik7IHJldHVybjsgfQotICAgICAgY2FzZSBUZXh0QXJlYUNvbHM6ICAgICAgICAgICAgeyB0ZXh0
YXJlYS5zZXRDb2xzKHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2Ug
VGV4dEFyZWFEaXNhYmxlZDogICAgICAgIHsgdGV4dGFyZWEuc2V0RGlzYWJsZWQodmFsdWUudG9C
b29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRleHRBcmVhTmFtZTogICAgICAg
ICAgICB7IHRleHRhcmVhLnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRleHRB
cmVhUmVhZE9ubHk6ICAgICAgICB7IHRleHRhcmVhLnNldFJlYWRPbmx5KHZhbHVlLnRvQm9vbGVh
bihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBUZXh0QXJlYVJvd3M6ICAgICAgICAgICAg
eyB0ZXh0YXJlYS5zZXRSb3dzKHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KLSAgICAg
IGNhc2UgVGV4dEFyZWFUYWJJbmRleDogICAgICAgIHsgdGV4dGFyZWEuc2V0VGFiSW5kZXgodmFs
dWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQotICAgICAgLy8gcmVhZC1vbmx5OiB0eXBlCi0g
ICAgICBjYXNlIFRleHRBcmVhVmFsdWU6ICAgICAgICAgICB7IHRleHRhcmVhLnNldFZhbHVlKHN0
cik7IHJldHVybjsgfQotICAgICAgfQotICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0JV
VFRPTjogewotICAgICAgSFRNTEJ1dHRvbkVsZW1lbnRJbXBsICZidXR0b24gPSBzdGF0aWNfY2Fz
dDxIVE1MQnV0dG9uRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2Vu
KSB7Ci0gICAgICAvLyByZWFkLW9ubHk6IGZvcm0KLSAgICAgIGNhc2UgQnV0dG9uQWNjZXNzS2V5
OiAgICAgICB7IGJ1dHRvbi5zZXRBY2Nlc3NLZXkoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNl
IEJ1dHRvbkRpc2FibGVkOiAgICAgICAgeyBidXR0b24uc2V0RGlzYWJsZWQodmFsdWUudG9Cb29s
ZWFuKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEJ1dHRvbk5hbWU6ICAgICAgICAgICAg
eyBidXR0b24uc2V0TmFtZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQnV0dG9uVGFiSW5k
ZXg6ICAgICAgICB7IGJ1dHRvbi5zZXRUYWJJbmRleCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0
dXJuOyB9Ci0gICAgICAvLyByZWFkLW9ubHk6IHR5cGUKLSAgICAgIGNhc2UgQnV0dG9uVmFsdWU6
ICAgICAgICAgICB7IGJ1dHRvbi5zZXRWYWx1ZShzdHIpOyByZXR1cm47IH0KLSAgICAgIH0KLSAg
ICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9MQUJFTDogewotICAgICAgSFRNTExhYmVsRWxl
bWVudEltcGwgJmxhYmVsID0gc3RhdGljX2Nhc3Q8SFRNTExhYmVsRWxlbWVudEltcGwgJj4oZWxl
bWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICAvLyByZWFkLW9ubHk6IGZvcm0K
LSAgICAgIGNhc2UgTGFiZWxBY2Nlc3NLZXk6ICAgICAgIHsgbGFiZWwuc2V0QWNjZXNzS2V5KHN0
cik7IHJldHVybjsgfQotICAgICAgY2FzZSBMYWJlbEh0bWxGb3I6ICAgICAgICAgeyBsYWJlbC5z
ZXRIdG1sRm9yKHN0cik7IHJldHVybjsgfQotICAgICAgfQotICAgIH0KLSAgICBicmVhazsKLSAg
ICBjYXNlIElEX0xFR0VORDogewotICAgICAgSFRNTExlZ2VuZEVsZW1lbnRJbXBsICZsZWdlbmQg
PSBzdGF0aWNfY2FzdDxIVE1MTGVnZW5kRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBz
d2l0Y2ggKHRva2VuKSB7Ci0gICAgICAvLyByZWFkLW9ubHk6IGZvcm0KLSAgICAgIGNhc2UgTGVn
ZW5kQWNjZXNzS2V5OiAgICAgICB7IGxlZ2VuZC5zZXRBY2Nlc3NLZXkoc3RyKTsgcmV0dXJuOyB9
Ci0gICAgICBjYXNlIExlZ2VuZEFsaWduOiAgICAgICAgICAgeyBsZWdlbmQuc2V0QWxpZ24oc3Ry
KTsgcmV0dXJuOyB9Ci0gICAgICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OnRpdGxlU2V0dGVy
KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERP
TTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgIEhUTUxUaXRsZUVsZW1lbnRJbXBsJiB0aXRsZSA9
ICpzdGF0aWNfY2FzdDxIVE1MVGl0bGVFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgIGlmICh0
b2tlbiA9PSBUaXRsZVRleHQpCisgICAgICAgIHRpdGxlLnNldFRleHQoc3RyKTsKK30KKwordm9p
ZCBIVE1MRWxlbWVudDo6bWV0YVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29u
c3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxN
ZXRhRWxlbWVudEltcGwmIG1ldGEgPSAqc3RhdGljX2Nhc3Q8SFRNTE1ldGFFbGVtZW50SW1wbCo+
KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNlIE1ldGFDb250ZW50
OiAgICAgICAgIHsgbWV0YS5zZXRDb250ZW50KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNl
IE1ldGFIdHRwRXF1aXY6ICAgICAgIHsgbWV0YS5zZXRIdHRwRXF1aXYoc3RyKTsgcmV0dXJuOyB9
CisgICAgICAgIGNhc2UgTWV0YU5hbWU6ICAgICAgICAgICAgeyBtZXRhLnNldE5hbWUoc3RyKTsg
cmV0dXJuOyB9CisgICAgICAgIGNhc2UgTWV0YVNjaGVtZTogICAgICAgICAgeyBtZXRhLnNldFNj
aGVtZShzdHIpOyByZXR1cm47IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9VTDog
ewotICAgICAgSFRNTFVMaXN0RWxlbWVudEltcGwgJnVMaXN0ID0gc3RhdGljX2Nhc3Q8SFRNTFVM
aXN0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAg
ICBjYXNlIFVMaXN0Q29tcGFjdDogICAgICAgICB7IHVMaXN0LnNldENvbXBhY3QodmFsdWUudG9C
b29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFVMaXN0VHlwZTogICAgICAgICAg
ICB7IHVMaXN0LnNldFR5cGUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICB9Cit9CisKK3ZvaWQgSFRN
TEVsZW1lbnQ6OmJhc2VTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZh
bHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MQmFzZUVs
ZW1lbnRJbXBsJiBiYXNlID0gKnN0YXRpY19jYXN0PEhUTUxCYXNlRWxlbWVudEltcGwqPihpbXBs
KCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBCYXNlSHJlZjogICAgICAg
ICAgICB7IGJhc2Uuc2V0SHJlZihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBCYXNlVGFy
Z2V0OiAgICAgICAgICB7IGJhc2Uuc2V0VGFyZ2V0KHN0cik7IHJldHVybjsgfQogICAgIH0KLSAg
ICBicmVhazsKLSAgICBjYXNlIElEX09MOiB7Ci0gICAgICBIVE1MT0xpc3RFbGVtZW50SW1wbCAm
b0xpc3QgPSBzdGF0aWNfY2FzdDxIVE1MT0xpc3RFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAg
ICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgT0xpc3RDb21wYWN0OiAgICAgICAgIHsg
b0xpc3Quc2V0Q29tcGFjdCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KLSAgICAg
IGNhc2UgT0xpc3RTdGFydDogICAgICAgICAgIHsgb0xpc3Quc2V0U3RhcnQodmFsdWUudG9JbnQz
MihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBPTGlzdFR5cGU6ICAgICAgICAgICAgeyBv
TGlzdC5zZXRUeXBlKHN0cik7IHJldHVybjsgfQotICAgICAgfQorfQorCit2b2lkIEhUTUxFbGVt
ZW50Ojppc0luZGV4U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1
ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTElzSW5kZXhF
bGVtZW50SW1wbCYgaXNpbmRleCA9ICpzdGF0aWNfY2FzdDxIVE1MSXNJbmRleEVsZW1lbnRJbXBs
Kj4oaW1wbCgpKTsKKyAgICBpZiAodG9rZW4gPT0gSXNJbmRleFByb21wdCkKKyAgICAgICAgaXNp
bmRleC5zZXRQcm9tcHQoc3RyKTsKK30KKwordm9pZCBIVE1MRWxlbWVudDo6c3R5bGVTZXR0ZXIo
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9N
OjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MU3R5bGVFbGVtZW50SW1wbCYgc3R5bGUgPSAq
c3RhdGljX2Nhc3Q8SFRNTFN0eWxlRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAo
dG9rZW4pIHsKKyAgICAgICAgY2FzZSBTdHlsZURpc2FibGVkOiAgICAgICAgeyBzdHlsZS5zZXRE
aXNhYmxlZCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBT
dHlsZU1lZGlhOiAgICAgICAgICAgeyBzdHlsZS5zZXRNZWRpYShzdHIpOyByZXR1cm47IH0KKyAg
ICAgICAgY2FzZSBTdHlsZVR5cGU6ICAgICAgICAgICAgeyBzdHlsZS5zZXRUeXBlKHN0cik7IHJl
dHVybjsgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0RMOiB7Ci0gICAgICBIVE1M
RExpc3RFbGVtZW50SW1wbCAmZExpc3QgPSBzdGF0aWNfY2FzdDxIVE1MRExpc3RFbGVtZW50SW1w
bCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgRExpc3RD
b21wYWN0OiAgICAgICAgIHsgZExpc3Quc2V0Q29tcGFjdCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykp
OyByZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6Ym9keVNldHRlcihF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006
OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxCb2R5RWxlbWVudEltcGwmIGJvZHkgPSAqc3Rh
dGljX2Nhc3Q8SFRNTEJvZHlFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tl
bikgeworICAgICAgICBjYXNlIEJvZHlBTGluazogICAgICAgICAgIHsgYm9keS5zZXRBTGluayhz
dHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBCb2R5QmFja2dyb3VuZDogICAgICB7IGJvZHku
c2V0QmFja2dyb3VuZChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBCb2R5QmdDb2xvcjog
ICAgICAgICB7IGJvZHkuc2V0QmdDb2xvcihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBC
b2R5TGluazogICAgICAgICAgICB7IGJvZHkuc2V0TGluayhzdHIpOyByZXR1cm47IH0KKyAgICAg
ICAgY2FzZSBCb2R5VGV4dDogICAgICAgICAgICB7IGJvZHkuc2V0VGV4dChzdHIpOyByZXR1cm47
IH0KKyAgICAgICAgY2FzZSBCb2R5Vkxpbms6ICAgICAgICAgICB7IGJvZHkuc2V0Vkxpbmsoc3Ry
KTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQm9keVNjcm9sbExlZnQ6CisgICAgICAgIGNhc2Ug
Qm9keVNjcm9sbFRvcDogeworICAgICAgICAgICAgUVNjcm9sbFZpZXcqIHN2aWV3ID0gYm9keS5v
d25lckRvY3VtZW50KCktPnZpZXcoKTsKKyAgICAgICAgICAgIGlmIChzdmlldykgeworICAgICAg
ICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgZG9jdW1lbnQncyBsYXlvdXQgYmVmb3JlIHdlIGNvbXB1
dGUgdGhlc2UgYXR0cmlidXRlcy4KKyAgICAgICAgICAgICAgICBpZiAoRG9jdW1lbnRJbXBsKiBk
b2MgPSBib2R5LmdldERvY3VtZW50KCkpCisgICAgICAgICAgICAgICAgICAgIGRvYy0+dXBkYXRl
TGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CisgICAgICAgICAgICAgICAgaWYgKHRv
a2VuID09IEJvZHlTY3JvbGxMZWZ0KQorICAgICAgICAgICAgICAgICAgICBzdmlldy0+c2V0Q29u
dGVudHNQb3ModmFsdWUudG9JbnQzMihleGVjKSwgc3ZpZXctPmNvbnRlbnRzWSgpKTsKKyAgICAg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHN2aWV3LT5zZXRDb250ZW50c1Bv
cyhzdmlldy0+Y29udGVudHNYKCksIHZhbHVlLnRvSW50MzIoZXhlYykpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgfQotICAgIGJyZWFrOwotICAg
IGNhc2UgSURfRElSOiB7Ci0gICAgICBIVE1MRGlyZWN0b3J5RWxlbWVudEltcGwgJmRpcmVjdG9y
eSA9IHN0YXRpY19jYXN0PEhUTUxEaXJlY3RvcnlFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAg
ICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgRGlyZWN0b3J5Q29tcGFjdDogICAgIHsg
ZGlyZWN0b3J5LnNldENvbXBhY3QodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9Ci0g
ICAgICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OmZvcm1TZXR0ZXIoRXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0
cikKK3sKKyAgICBIVE1MRm9ybUVsZW1lbnRJbXBsJiBmb3JtID0gKnN0YXRpY19jYXN0PEhUTUxG
b3JtRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAg
Ly8gcmVhZC1vbmx5OiBlbGVtZW50cworICAgICAgICAvLyByZWFkLW9ubHk6IGxlbmd0aAorICAg
ICAgICBjYXNlIEZvcm1OYW1lOiAgICAgICAgICAgIHsgZm9ybS5zZXROYW1lKHN0cik7IHJldHVy
bjsgfQorICAgICAgICBjYXNlIEZvcm1BY2NlcHRDaGFyc2V0OiAgIHsgZm9ybS5zZXRBY2NlcHRD
aGFyc2V0KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEZvcm1BY3Rpb246ICAgICAgICAg
IHsgZm9ybS5zZXRBY3Rpb24oc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgRm9ybUVuY1R5
cGU6ICAgICAgICAgeyBmb3JtLnNldEVuY3R5cGUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNh
c2UgRm9ybU1ldGhvZDogICAgICAgICAgeyBmb3JtLnNldE1ldGhvZChzdHIpOyByZXR1cm47IH0K
KyAgICAgICAgY2FzZSBGb3JtVGFyZ2V0OiAgICAgICAgICB7IGZvcm0uc2V0VGFyZ2V0KHN0cik7
IHJldHVybjsgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX01FTlU6IHsKLSAgICAg
IEhUTUxNZW51RWxlbWVudEltcGwgJm1lbnUgPSBzdGF0aWNfY2FzdDxIVE1MTWVudUVsZW1lbnRJ
bXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgY2FzZSBNZW51
Q29tcGFjdDogICAgICAgICB7IG1lbnUuc2V0Q29tcGFjdCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykp
OyByZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6c2VsZWN0U2V0dGVy
KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERP
TTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTFNlbGVjdEVsZW1lbnRJbXBsJiBzZWxlY3Qg
PSAqc3RhdGljX2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0
Y2ggKHRva2VuKSB7CisgICAgICAgIC8vIHJlYWQtb25seTogdHlwZQorICAgICAgICBjYXNlIFNl
bGVjdFNlbGVjdGVkSW5kZXg6ICAgeyBzZWxlY3Quc2V0U2VsZWN0ZWRJbmRleCh2YWx1ZS50b0lu
dDMyKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgU2VsZWN0VmFsdWU6ICAgICAgICAg
ICB7IHNlbGVjdC5zZXRWYWx1ZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBTZWxlY3RM
ZW5ndGg6ICAgICAgICAgIHsgLy8gcmVhZC1vbmx5IGFjY29yZGluZyB0byB0aGUgTlMgc3BlYywg
YnV0IHdlYnBhZ2VzIG5lZWQgaXQgd3JpdGVhYmxlCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIE9iamVjdCBjb2xsID0gT2JqZWN0OjpkeW5hbWljQ2FzdCggZ2V0U2Vs
ZWN0SFRNTENvbGxlY3Rpb24oZXhlYywgc2VsZWN0Lm9wdGlvbnNIVE1MQ29sbGVjdGlvbigpLmdl
dCgpLCAmc2VsZWN0KSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoICFjb2xsLmlzTnVsbCgpICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb2xsLnB1dChleGVjLGxlbmd0aFByb3BlcnR5TmFtZSx2YWx1ZSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgLy8gcmVhZC1vbmx5OiBmb3JtCisg
ICAgICAgIC8vIHJlYWQtb25seTogb3B0aW9ucworICAgICAgICBjYXNlIFNlbGVjdERpc2FibGVk
OiAgICAgICAgeyBzZWxlY3Quc2V0RGlzYWJsZWQodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0
dXJuOyB9CisgICAgICAgIGNhc2UgU2VsZWN0TXVsdGlwbGU6ICAgICAgICB7IHNlbGVjdC5zZXRN
dWx0aXBsZSh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBT
ZWxlY3ROYW1lOiAgICAgICAgICAgIHsgc2VsZWN0LnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9Cisg
ICAgICAgIGNhc2UgU2VsZWN0U2l6ZTogICAgICAgICAgICB7IHNlbGVjdC5zZXRTaXplKHZhbHVl
LnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBTZWxlY3RUYWJJbmRleDog
ICAgICAgIHsgc2VsZWN0LnNldFRhYkluZGV4KHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47
IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9MSTogewotICAgICAgSFRNTExJRWxl
bWVudEltcGwgJmxpID0gc3RhdGljX2Nhc3Q8SFRNTExJRWxlbWVudEltcGwgJj4oZWxlbWVudCk7
Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIExJVHlwZTogICAgICAgICAgICB7
IGxpLnNldFR5cGUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIExJVmFsdWU6ICAgICAgICAg
ICB7IGxpLnNldFZhbHVlKHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KLSAgICAgIH0K
K30KKwordm9pZCBIVE1MRWxlbWVudDo6b3B0R3JvdXBTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikK
K3sKKyAgICBIVE1MT3B0R3JvdXBFbGVtZW50SW1wbCYgb3B0Z3JvdXAgPSAqc3RhdGljX2Nhc3Q8
SFRNTE9wdEdyb3VwRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsK
KyAgICAgICAgY2FzZSBPcHRHcm91cERpc2FibGVkOiAgICAgICAgeyBvcHRncm91cC5zZXREaXNh
YmxlZCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBPcHRH
cm91cExhYmVsOiAgICAgICAgICAgeyBvcHRncm91cC5zZXRMYWJlbChzdHIpOyByZXR1cm47IH0K
ICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9ESVY6IHsKLSAgICAgIEhUTUxEaXZFbGVt
ZW50SW1wbCAmZGl2ID0gc3RhdGljX2Nhc3Q8SFRNTERpdkVsZW1lbnRJbXBsICY+KGVsZW1lbnQp
OwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgY2FzZSBEaXZBbGlnbjogICAgICAgICAg
IHsgZGl2LnNldEFsaWduKHN0cik7IHJldHVybjsgfQotICAgICAgfQorfQorCit2b2lkIEhUTUxF
bGVtZW50OjpvcHRpb25TZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZh
bHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBET01FeGNlcHRp
b25UcmFuc2xhdG9yIGV4Y2VwdGlvbihleGVjKTsKKyAgICBIVE1MT3B0aW9uRWxlbWVudEltcGwm
IG9wdGlvbiA9ICpzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudEltcGwqPihpbXBsKCkpOwor
ICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgLy8gcmVhZC1vbmx5OiBmb3JtCisgICAgICAg
IGNhc2UgT3B0aW9uRGVmYXVsdFNlbGVjdGVkOiB7IG9wdGlvbi5zZXREZWZhdWx0U2VsZWN0ZWQo
dmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgT3B0aW9uVGV4
dDogICAgICAgICAgICB7IG9wdGlvbi5zZXRUZXh0KHN0ciwgZXhjZXB0aW9uKTsgcmV0dXJuOyB9
CisgICAgICAgIC8vIHJlYWQtb25seTogaW5kZXgKKyAgICAgICAgY2FzZSBPcHRpb25EaXNhYmxl
ZDogICAgICAgIHsgb3B0aW9uLnNldERpc2FibGVkKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJl
dHVybjsgfQorICAgICAgICBjYXNlIE9wdGlvbkxhYmVsOiAgICAgICAgICAgeyBvcHRpb24uc2V0
TGFiZWwoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgT3B0aW9uU2VsZWN0ZWQ6ICAgICAg
ICB7IG9wdGlvbi5zZXRTZWxlY3RlZCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0K
KyAgICAgICAgY2FzZSBPcHRpb25WYWx1ZTogICAgICAgICAgIHsgb3B0aW9uLnNldFZhbHVlKHN0
cik7IHJldHVybjsgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX1A6IHsKLSAgICAg
IEhUTUxQYXJhZ3JhcGhFbGVtZW50SW1wbCAmcGFyYWdyYXBoID0gc3RhdGljX2Nhc3Q8SFRNTFBh
cmFncmFwaEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewot
ICAgICAgY2FzZSBQYXJhZ3JhcGhBbGlnbjogICAgIHsgcGFyYWdyYXBoLnNldEFsaWduKHN0cik7
IHJldHVybjsgfQotICAgICAgfQorfQorCit2b2lkIEhUTUxFbGVtZW50OjppbnB1dFNldHRlcihF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006
OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxJbnB1dEVsZW1lbnRJbXBsJiBpbnB1dCA9ICpz
dGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0
b2tlbikgeworICAgICAgICBjYXNlIElucHV0RGVmYXVsdFZhbHVlOiAgICB7IGlucHV0LnNldERl
ZmF1bHRWYWx1ZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJbnB1dERlZmF1bHRDaGVj
a2VkOiAgeyBpbnB1dC5zZXREZWZhdWx0Q2hlY2tlZCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyBy
ZXR1cm47IH0KKyAgICAgICAgLy8gcmVhZC1vbmx5OiBmb3JtCisgICAgICAgIGNhc2UgSW5wdXRB
Y2NlcHQ6ICAgICAgICAgIHsgaW5wdXQuc2V0QWNjZXB0KHN0cik7IHJldHVybjsgfQorICAgICAg
ICBjYXNlIElucHV0QWNjZXNzS2V5OiAgICAgICB7IGlucHV0LnNldEFjY2Vzc0tleShzdHIpOyBy
ZXR1cm47IH0KKyAgICAgICAgY2FzZSBJbnB1dEFsaWduOiAgICAgICAgICAgeyBpbnB1dC5zZXRB
bGlnbihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJbnB1dEFsdDogICAgICAgICAgICAg
eyBpbnB1dC5zZXRBbHQoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgSW5wdXRDaGVja2Vk
OiAgICAgICAgIHsgaW5wdXQuc2V0Q2hlY2tlZCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1
cm47IH0KKyAgICAgICAgY2FzZSBJbnB1dERpc2FibGVkOiAgICAgICAgeyBpbnB1dC5zZXREaXNh
YmxlZCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJbnB1
dE1heExlbmd0aDogICAgICAgeyBpbnB1dC5zZXRNYXhMZW5ndGgodmFsdWUudG9JbnQzMihleGVj
KSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIElucHV0TmFtZTogICAgICAgICAgICB7IGlucHV0
LnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgSW5wdXRSZWFkT25seTogICAg
ICAgIHsgaW5wdXQuc2V0UmVhZE9ubHkodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9
CisgICAgICAgIGNhc2UgSW5wdXRTaXplOiAgICAgICAgICAgIHsgaW5wdXQuc2V0U2l6ZShzdHIp
OyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJbnB1dFNyYzogICAgICAgICAgICAgeyBpbnB1dC5z
ZXRTcmMoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgSW5wdXRUYWJJbmRleDogICAgICAg
IHsgaW5wdXQuc2V0VGFiSW5kZXgodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQorICAg
ICAgICBjYXNlIElucHV0VHlwZTogICAgICAgICAgICB7IGlucHV0LnNldFR5cGUoc3RyKTsgcmV0
dXJuOyB9CisgICAgICAgIGNhc2UgSW5wdXRVc2VNYXA6ICAgICAgICAgIHsgaW5wdXQuc2V0VXNl
TWFwKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIElucHV0VmFsdWU6ICAgICAgICAgICB7
IGlucHV0LnNldFZhbHVlKHN0cik7IHJldHVybjsgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBj
YXNlIElEX0gxOgotICAgIGNhc2UgSURfSDI6Ci0gICAgY2FzZSBJRF9IMzoKLSAgICBjYXNlIElE
X0g0OgotICAgIGNhc2UgSURfSDU6Ci0gICAgY2FzZSBJRF9INjogewotICAgICAgSFRNTEhlYWRp
bmdFbGVtZW50SW1wbCAmaGVhZGluZyA9IHN0YXRpY19jYXN0PEhUTUxIZWFkaW5nRWxlbWVudElt
cGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIEhlYWRp
bmdBbGlnbjogICAgICAgICB7IGhlYWRpbmcuc2V0QWxpZ24oc3RyKTsgcmV0dXJuOyB9Ci0gICAg
ICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OnRleHRBcmVhU2V0dGVyKEV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBz
dHIpCit7CisgICAgSFRNTFRleHRBcmVhRWxlbWVudEltcGwmIHRleHRhcmVhID0gKnN0YXRpY19j
YXN0PEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2Vu
KSB7CisgICAgICAgIGNhc2UgVGV4dEFyZWFEZWZhdWx0VmFsdWU6ICAgIHsgdGV4dGFyZWEuc2V0
RGVmYXVsdFZhbHVlKHN0cik7IHJldHVybjsgfQorICAgICAgICAvLyByZWFkLW9ubHk6IGZvcm0K
KyAgICAgICAgY2FzZSBUZXh0QXJlYUFjY2Vzc0tleTogICAgICAgeyB0ZXh0YXJlYS5zZXRBY2Nl
c3NLZXkoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGV4dEFyZWFDb2xzOiAgICAgICAg
ICAgIHsgdGV4dGFyZWEuc2V0Q29scyh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9Cisg
ICAgICAgIGNhc2UgVGV4dEFyZWFEaXNhYmxlZDogICAgICAgIHsgdGV4dGFyZWEuc2V0RGlzYWJs
ZWQodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGV4dEFy
ZWFOYW1lOiAgICAgICAgICAgIHsgdGV4dGFyZWEuc2V0TmFtZShzdHIpOyByZXR1cm47IH0KKyAg
ICAgICAgY2FzZSBUZXh0QXJlYVJlYWRPbmx5OiAgICAgICAgeyB0ZXh0YXJlYS5zZXRSZWFkT25s
eSh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUZXh0QXJl
YVJvd3M6ICAgICAgICAgICAgeyB0ZXh0YXJlYS5zZXRSb3dzKHZhbHVlLnRvSW50MzIoZXhlYykp
OyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUZXh0QXJlYVRhYkluZGV4OiAgICAgICAgeyB0ZXh0
YXJlYS5zZXRUYWJJbmRleCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAg
IC8vIHJlYWQtb25seTogdHlwZQorICAgICAgICBjYXNlIFRleHRBcmVhVmFsdWU6ICAgICAgICAg
ICB7IHRleHRhcmVhLnNldFZhbHVlKHN0cik7IHJldHVybjsgfQogICAgIH0KLSAgICBicmVhazsK
LSAgICBjYXNlIElEX0JMT0NLUVVPVEU6IHsKLSAgICAgIEhUTUxCbG9ja3F1b3RlRWxlbWVudElt
cGwgJmJsb2NrcXVvdGUgPSBzdGF0aWNfY2FzdDxIVE1MQmxvY2txdW90ZUVsZW1lbnRJbXBsICY+
KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgY2FzZSBCbG9ja1F1b3Rl
Q2l0ZTogICAgICAgeyBibG9ja3F1b3RlLnNldENpdGUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICB9
Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OmJ1dHRvblNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQor
eworICAgIEhUTUxCdXR0b25FbGVtZW50SW1wbCYgYnV0dG9uID0gKnN0YXRpY19jYXN0PEhUTUxC
dXR0b25FbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAg
ICAvLyByZWFkLW9ubHk6IGZvcm0KKyAgICAgICAgY2FzZSBCdXR0b25BY2Nlc3NLZXk6ICAgICAg
IHsgYnV0dG9uLnNldEFjY2Vzc0tleShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBCdXR0
b25EaXNhYmxlZDogICAgICAgIHsgYnV0dG9uLnNldERpc2FibGVkKHZhbHVlLnRvQm9vbGVhbihl
eGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIEJ1dHRvbk5hbWU6ICAgICAgICAgICAgeyBi
dXR0b24uc2V0TmFtZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBCdXR0b25UYWJJbmRl
eDogICAgICAgIHsgYnV0dG9uLnNldFRhYkluZGV4KHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1
cm47IH0KKyAgICAgICAgLy8gcmVhZC1vbmx5OiB0eXBlCisgICAgICAgIGNhc2UgQnV0dG9uVmFs
dWU6ICAgICAgICAgICB7IGJ1dHRvbi5zZXRWYWx1ZShzdHIpOyByZXR1cm47IH0KICAgICB9Ci0g
ICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9ROiB7Ci0gICAgICBIVE1MUXVvdGVFbGVtZW50SW1wbCAm
cXVvdGUgPSBzdGF0aWNfY2FzdDxIVE1MUXVvdGVFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAg
ICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgUXVvdGVDaXRlOiAgICAgICAgICAgIHsg
cXVvdGUuc2V0Q2l0ZShzdHIpOyByZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxl
bWVudDo6bGFiZWxTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVl
JiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MTGFiZWxFbGVt
ZW50SW1wbCYgbGFiZWwgPSAqc3RhdGljX2Nhc3Q8SFRNTExhYmVsRWxlbWVudEltcGwqPihpbXBs
KCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgLy8gcmVhZC1vbmx5OiBmb3JtCisg
ICAgICAgIGNhc2UgTGFiZWxBY2Nlc3NLZXk6ICAgICAgIHsgbGFiZWwuc2V0QWNjZXNzS2V5KHN0
cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIExhYmVsSHRtbEZvcjogICAgICAgICB7IGxhYmVs
LnNldEh0bWxGb3Ioc3RyKTsgcmV0dXJuOyB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2Ug
SURfUFJFOiB7Ci0gICAgICBIVE1MUHJlRWxlbWVudEltcGwgJnByZSA9IHN0YXRpY19jYXN0PEhU
TUxQcmVFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAg
ICAgIGNhc2UgUHJlV2lkdGg6ICAgICAgICAgICB7IHByZS5zZXRXaWR0aCh2YWx1ZS50b0ludDMy
KGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OmxlZ2Vu
ZFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBj
b25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxMZWdlbmRFbGVtZW50SW1wbCYg
bGVnZW5kID0gKnN0YXRpY19jYXN0PEhUTUxMZWdlbmRFbGVtZW50SW1wbCo+KGltcGwoKSk7Cisg
ICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICAvLyByZWFkLW9ubHk6IGZvcm0KKyAgICAgICAg
Y2FzZSBMZWdlbmRBY2Nlc3NLZXk6ICAgICAgIHsgbGVnZW5kLnNldEFjY2Vzc0tleShzdHIpOyBy
ZXR1cm47IH0KKyAgICAgICAgY2FzZSBMZWdlbmRBbGlnbjogICAgICAgICAgIHsgbGVnZW5kLnNl
dEFsaWduKHN0cik7IHJldHVybjsgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0JS
OiB7Ci0gICAgICBIVE1MQlJFbGVtZW50SW1wbCAmYnIgPSBzdGF0aWNfY2FzdDxIVE1MQlJFbGVt
ZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2Ug
QlJDbGVhcjogICAgICAgICAgIHsgYnIuc2V0Q2xlYXIoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICB9
Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OnVMaXN0U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7
CisgICAgSFRNTFVMaXN0RWxlbWVudEltcGwmIHVMaXN0ID0gKnN0YXRpY19jYXN0PEhUTUxVTGlz
dEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNh
c2UgVUxpc3RDb21wYWN0OiAgICAgICAgIHsgdUxpc3Quc2V0Q29tcGFjdCh2YWx1ZS50b0Jvb2xl
YW4oZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBVTGlzdFR5cGU6ICAgICAgICAgICAg
eyB1TGlzdC5zZXRUeXBlKHN0cik7IHJldHVybjsgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBj
YXNlIElEX0JBU0VGT05UOiB7Ci0gICAgICBIVE1MQmFzZUZvbnRFbGVtZW50SW1wbCAmYmFzZUZv
bnQgPSBzdGF0aWNfY2FzdDxIVE1MQmFzZUZvbnRFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAg
ICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgQmFzZUZvbnRDb2xvcjogICAgICAgICAg
IHsgYmFzZUZvbnQuc2V0Q29sb3Ioc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEJhc2VGb250
RmFjZTogICAgICAgICAgICB7IGJhc2VGb250LnNldEZhY2Uoc3RyKTsgcmV0dXJuOyB9Ci0gICAg
ICBjYXNlIEJhc2VGb250U2l6ZTogICAgICAgICAgICB7IGJhc2VGb250LnNldFNpemUoc3RyKTsg
cmV0dXJuOyB9Ci0gICAgICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6Om9MaXN0U2V0dGVyKEV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6
RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTE9MaXN0RWxlbWVudEltcGwmIG9MaXN0ID0gKnN0
YXRpY19jYXN0PEhUTUxPTGlzdEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRv
a2VuKSB7CisgICAgICAgIGNhc2UgT0xpc3RDb21wYWN0OiAgICAgICAgIHsgb0xpc3Quc2V0Q29t
cGFjdCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBPTGlz
dFN0YXJ0OiAgICAgICAgICAgeyBvTGlzdC5zZXRTdGFydCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsg
cmV0dXJuOyB9CisgICAgICAgIGNhc2UgT0xpc3RUeXBlOiAgICAgICAgICAgIHsgb0xpc3Quc2V0
VHlwZShzdHIpOyByZXR1cm47IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9GT05U
OiB7Ci0gICAgICBIVE1MRm9udEVsZW1lbnRJbXBsICZmb250ID0gc3RhdGljX2Nhc3Q8SFRNTEZv
bnRFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAg
IGNhc2UgRm9udENvbG9yOiAgICAgICAgICAgeyBmb250LnNldENvbG9yKHN0cik7IHJldHVybjsg
fQotICAgICAgY2FzZSBGb250RmFjZTogICAgICAgICAgICB7IGZvbnQuc2V0RmFjZShzdHIpOyBy
ZXR1cm47IH0KLSAgICAgIGNhc2UgRm9udFNpemU6ICAgICAgICAgICAgeyBmb250LnNldFNpemUo
c3RyKTsgcmV0dXJuOyB9Ci0gICAgICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OmRMaXN0U2V0
dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0
IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTERMaXN0RWxlbWVudEltcGwmIGRMaXN0
ID0gKnN0YXRpY19jYXN0PEhUTUxETGlzdEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBpZiAo
dG9rZW4gPT0gRExpc3RDb21wYWN0KQorICAgICAgICBkTGlzdC5zZXRDb21wYWN0KHZhbHVlLnRv
Qm9vbGVhbihleGVjKSk7Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OmRpclNldHRlcihFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0
cmluZyYgc3RyKQoreworICAgIEhUTUxEaXJlY3RvcnlFbGVtZW50SW1wbCYgZGlyZWN0b3J5ID0g
KnN0YXRpY19jYXN0PEhUTUxEaXJlY3RvcnlFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYg
KHRva2VuID09IERpcmVjdG9yeUNvbXBhY3QpCisgICAgICAgIGRpcmVjdG9yeS5zZXRDb21wYWN0
KHZhbHVlLnRvQm9vbGVhbihleGVjKSk7Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6Om1lbnVTZXR0
ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3Qg
RE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MTWVudUVsZW1lbnRJbXBsJiBtZW51ID0g
KnN0YXRpY19jYXN0PEhUTUxNZW51RWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIGlmICh0b2tl
biA9PSBNZW51Q29tcGFjdCkKKyAgICAgICAgbWVudS5zZXRDb21wYWN0KHZhbHVlLnRvQm9vbGVh
bihleGVjKSk7Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OmxpU2V0dGVyKEV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBz
dHIpCit7CisgICAgSFRNTExJRWxlbWVudEltcGwmIGxpID0gKnN0YXRpY19jYXN0PEhUTUxMSUVs
ZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2Ug
TElUeXBlOiAgICAgICAgICAgIHsgbGkuc2V0VHlwZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAg
Y2FzZSBMSVZhbHVlOiAgICAgICAgICAgeyBsaS5zZXRWYWx1ZSh2YWx1ZS50b0ludDMyKGV4ZWMp
KTsgcmV0dXJuOyB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfSFI6IHsKLSAgICAg
IEhUTUxIUkVsZW1lbnRJbXBsICZociA9IHN0YXRpY19jYXN0PEhUTUxIUkVsZW1lbnRJbXBsICY+
KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgY2FzZSBIUkFsaWduOiAg
ICAgICAgICAgeyBoci5zZXRBbGlnbihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSFJOb1No
YWRlOiAgICAgICAgIHsgaHIuc2V0Tm9TaGFkZSh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1
cm47IH0KLSAgICAgIGNhc2UgSFJTaXplOiAgICAgICAgICAgIHsgaHIuc2V0U2l6ZShzdHIpOyBy
ZXR1cm47IH0KLSAgICAgIGNhc2UgSFJXaWR0aDogICAgICAgICAgIHsgaHIuc2V0V2lkdGgoc3Ry
KTsgcmV0dXJuOyB9Ci0gICAgICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OmRpdlNldHRlcihF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006
OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxEaXZFbGVtZW50SW1wbCYgZGl2ID0gKnN0YXRp
Y19jYXN0PEhUTUxEaXZFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IERp
dkFsaWduKQorICAgICAgICBkaXYuc2V0QWxpZ24oc3RyKTsKK30KKwordm9pZCBIVE1MRWxlbWVu
dDo6cGFyYWdyYXBoU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1
ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTFBhcmFncmFw
aEVsZW1lbnRJbXBsJiBwYXJhZ3JhcGggPSAqc3RhdGljX2Nhc3Q8SFRNTFBhcmFncmFwaEVsZW1l
bnRJbXBsKj4oaW1wbCgpKTsKKyAgICBpZiAodG9rZW4gPT0gUGFyYWdyYXBoQWxpZ24pCisgICAg
ICAgIHBhcmFncmFwaC5zZXRBbGlnbihzdHIpOworfQorCit2b2lkIEhUTUxFbGVtZW50OjpoZWFk
aW5nU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUs
IGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTEhlYWRpbmdFbGVtZW50SW1w
bCYgaGVhZGluZyA9ICpzdGF0aWNfY2FzdDxIVE1MSGVhZGluZ0VsZW1lbnRJbXBsKj4oaW1wbCgp
KTsKKyAgICBpZiAodG9rZW4gPT0gSGVhZGluZ0FsaWduKQorICAgICAgICBoZWFkaW5nLnNldEFs
aWduKHN0cik7Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OmJsb2NrUXVvdGVTZXR0ZXIoRXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01T
dHJpbmcmIHN0cikKK3sKKyAgICBIVE1MQmxvY2txdW90ZUVsZW1lbnRJbXBsJiBibG9ja1F1b3Rl
ID0gKnN0YXRpY19jYXN0PEhUTUxCbG9ja3F1b3RlRWxlbWVudEltcGwqPihpbXBsKCkpOworICAg
IGlmICh0b2tlbiA9PSBCbG9ja1F1b3RlQ2l0ZSkKKyAgICAgICAgYmxvY2tRdW90ZS5zZXRDaXRl
KHN0cik7Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OnF1b3RlU2V0dGVyKEV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBz
dHIpCit7CisgICAgSFRNTFF1b3RlRWxlbWVudEltcGwmIHF1b3RlID0gKnN0YXRpY19jYXN0PEhU
TUxRdW90ZUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBpZiAodG9rZW4gPT0gUXVvdGVDaXRl
KQorICAgICAgICBxdW90ZS5zZXRDaXRlKHN0cik7Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OnBy
ZVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBj
b25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBm
b3IgJ3dyYXAnIHdoZW4gd2hpdGUtc3BhY2U6IHByZS13cmFwIGlzIGltcGxlbWVudGVkLgorICAg
IEhUTUxQcmVFbGVtZW50SW1wbCYgcHJlID0gKnN0YXRpY19jYXN0PEhUTUxQcmVFbGVtZW50SW1w
bCo+KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IFByZVdpZHRoKQorICAgICAgICBwcmUuc2V0
V2lkdGgodmFsdWUudG9JbnQzMihleGVjKSk7Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OmJyU2V0
dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0
IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTEJSRWxlbWVudEltcGwmIGJyID0gKnN0
YXRpY19jYXN0PEhUTUxCUkVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBpZiAodG9rZW4gPT0g
QlJDbGVhcikKKyAgICAgICAgYnIuc2V0Q2xlYXIoc3RyKTsKK30KKwordm9pZCBIVE1MRWxlbWVu
dDo6YmFzZUZvbnRTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVl
JiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MQmFzZUZvbnRF
bGVtZW50SW1wbCYgYmFzZUZvbnQgPSAqc3RhdGljX2Nhc3Q8SFRNTEJhc2VGb250RWxlbWVudElt
cGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBCYXNlRm9u
dENvbG9yOiAgICAgICAgICAgeyBiYXNlRm9udC5zZXRDb2xvcihzdHIpOyByZXR1cm47IH0KKyAg
ICAgICAgY2FzZSBCYXNlRm9udEZhY2U6ICAgICAgICAgICAgeyBiYXNlRm9udC5zZXRGYWNlKHN0
cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEJhc2VGb250U2l6ZTogICAgICAgICAgICB7IGJh
c2VGb250LnNldFNpemUoc3RyKTsgcmV0dXJuOyB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNh
c2UgSURfSU5TOgotICAgIGNhc2UgSURfREVMOiB7Ci0gICAgICBIVE1MTW9kRWxlbWVudEltcGwg
Jm1vZCA9IHN0YXRpY19jYXN0PEhUTUxNb2RFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAg
IHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgTW9kQ2l0ZTogICAgICAgICAgICB7IG1vZC5z
ZXRDaXRlKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBNb2REYXRlVGltZTogICAgICAgIHsg
bW9kLnNldERhdGVUaW1lKHN0cik7IHJldHVybjsgfQotICAgICAgfQorfQorCit2b2lkIEhUTUxF
bGVtZW50Ojpmb250U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1
ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTEZvbnRFbGVt
ZW50SW1wbCYgZm9udCA9ICpzdGF0aWNfY2FzdDxIVE1MRm9udEVsZW1lbnRJbXBsKj4oaW1wbCgp
KTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgRm9udENvbG9yOiAgICAgICAg
ICAgeyBmb250LnNldENvbG9yKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEZvbnRGYWNl
OiAgICAgICAgICAgIHsgZm9udC5zZXRGYWNlKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNl
IEZvbnRTaXplOiAgICAgICAgICAgIHsgZm9udC5zZXRTaXplKHN0cik7IHJldHVybjsgfQogICAg
IH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0E6IHsKLSAgICAgIEhUTUxBbmNob3JFbGVtZW50
SW1wbCAmYW5jaG9yID0gc3RhdGljX2Nhc3Q8SFRNTEFuY2hvckVsZW1lbnRJbXBsICY+KGVsZW1l
bnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgY2FzZSBBbmNob3JBY2Nlc3NLZXk6
ICAgICAgIHsgYW5jaG9yLnNldEFjY2Vzc0tleShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2Ug
QW5jaG9yQ2hhcnNldDogICAgICAgICB7IGFuY2hvci5zZXRDaGFyc2V0KHN0cik7IHJldHVybjsg
fQotICAgICAgY2FzZSBBbmNob3JDb29yZHM6ICAgICAgICAgIHsgYW5jaG9yLnNldENvb3Jkcyhz
dHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQW5jaG9ySHJlZjogICAgICAgICAgICB7IGFuY2hv
ci5zZXRIcmVmKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBBbmNob3JIcmVmTGFuZzogICAg
ICAgIHsgYW5jaG9yLnNldEhyZWZsYW5nKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBBbmNo
b3JOYW1lOiAgICAgICAgICAgIHsgYW5jaG9yLnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9Ci0gICAg
ICBjYXNlIEFuY2hvclJlbDogICAgICAgICAgICAgeyBhbmNob3Iuc2V0UmVsKHN0cik7IHJldHVy
bjsgfQotICAgICAgY2FzZSBBbmNob3JSZXY6ICAgICAgICAgICAgIHsgYW5jaG9yLnNldFJldihz
dHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQW5jaG9yU2hhcGU6ICAgICAgICAgICB7IGFuY2hv
ci5zZXRTaGFwZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQW5jaG9yVGFiSW5kZXg6ICAg
ICAgICB7IGFuY2hvci5zZXRUYWJJbmRleCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9
Ci0gICAgICBjYXNlIEFuY2hvclRhcmdldDogICAgICAgICAgeyBhbmNob3Iuc2V0VGFyZ2V0KHN0
cik7IHJldHVybjsgfQotICAgICAgY2FzZSBBbmNob3JUeXBlOiAgICAgICAgICAgIHsgYW5jaG9y
LnNldFR5cGUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6
OmhyU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUs
IGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTEhSRWxlbWVudEltcGwmIGhy
ID0gKnN0YXRpY19jYXN0PEhUTUxIUkVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2gg
KHRva2VuKSB7CisgICAgICAgIGNhc2UgSFJBbGlnbjogICAgICAgICAgIHsgaHIuc2V0QWxpZ24o
c3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgSFJOb1NoYWRlOiAgICAgICAgIHsgaHIuc2V0
Tm9TaGFkZSh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBI
UlNpemU6ICAgICAgICAgICAgeyBoci5zZXRTaXplKHN0cik7IHJldHVybjsgfQorICAgICAgICBj
YXNlIEhSV2lkdGg6ICAgICAgICAgICB7IGhyLnNldFdpZHRoKHN0cik7IHJldHVybjsgfQogICAg
IH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0lNRzogewotICAgICAgSFRNTEltYWdlRWxlbWVu
dEltcGwgJmltYWdlID0gc3RhdGljX2Nhc3Q8SFRNTEltYWdlRWxlbWVudEltcGwgJj4oZWxlbWVu
dCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIEltYWdlTmFtZTogICAgICAg
ICAgICB7IGltYWdlLnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEltYWdlQWxp
Z246ICAgICAgICAgICB7IGltYWdlLnNldEFsaWduKHN0cik7IHJldHVybjsgfQotICAgICAgY2Fz
ZSBJbWFnZUFsdDogICAgICAgICAgICAgeyBpbWFnZS5zZXRBbHQoc3RyKTsgcmV0dXJuOyB9Ci0g
ICAgICBjYXNlIEltYWdlQm9yZGVyOiAgICAgICAgICB7IGltYWdlLnNldEJvcmRlcih2YWx1ZS50
b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEltYWdlSGVpZ2h0OiAgICAgICAg
ICB7IGltYWdlLnNldEhlaWdodCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAg
ICBjYXNlIEltYWdlSHNwYWNlOiAgICAgICAgICB7IGltYWdlLnNldEhzcGFjZSh2YWx1ZS50b0lu
dDMyKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEltYWdlSXNNYXA6ICAgICAgICAgICB7
IGltYWdlLnNldElzTWFwKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQotICAgICAg
Y2FzZSBJbWFnZUxvbmdEZXNjOiAgICAgICAgeyBpbWFnZS5zZXRMb25nRGVzYyhzdHIpOyByZXR1
cm47IH0KLSAgICAgIGNhc2UgSW1hZ2VTcmM6ICAgICAgICAgICAgIHsgaW1hZ2Uuc2V0U3JjKHN0
cik7IHJldHVybjsgfQotICAgICAgY2FzZSBJbWFnZVVzZU1hcDogICAgICAgICAgeyBpbWFnZS5z
ZXRVc2VNYXAoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEltYWdlVnNwYWNlOiAgICAgICAg
ICB7IGltYWdlLnNldFZzcGFjZSh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAg
ICBjYXNlIEltYWdlV2lkdGg6ICAgICAgICAgICB7IGltYWdlLnNldFdpZHRoKHZhbHVlLnRvSW50
MzIoZXhlYykpOyByZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6bW9k
U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNv
bnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTE1vZEVsZW1lbnRJbXBsJiBtb2Qg
PSAqc3RhdGljX2Nhc3Q8SFRNTE1vZEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2gg
KHRva2VuKSB7CisgICAgICAgIGNhc2UgTW9kQ2l0ZTogICAgICAgICAgICB7IG1vZC5zZXRDaXRl
KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIE1vZERhdGVUaW1lOiAgICAgICAgeyBtb2Qu
c2V0RGF0ZVRpbWUoc3RyKTsgcmV0dXJuOyB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2Ug
SURfT0JKRUNUOiB7Ci0gICAgICBIVE1MT2JqZWN0RWxlbWVudEltcGwgJm9iamVjdCA9IHN0YXRp
Y19jYXN0PEhUTUxPYmplY3RFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAo
dG9rZW4pIHsKLSAgICAgIC8vIHJlYWQtb25seTogZm9ybQotICAgICAgY2FzZSBPYmplY3RDb2Rl
OiAgICAgICAgICAgICAgICAgeyBvYmplY3Quc2V0Q29kZShzdHIpOyByZXR1cm47IH0KLSAgICAg
IGNhc2UgT2JqZWN0QWxpZ246ICAgICAgICAgICB7IG9iamVjdC5zZXRBbGlnbihzdHIpOyByZXR1
cm47IH0KLSAgICAgIGNhc2UgT2JqZWN0QXJjaGl2ZTogICAgICAgICB7IG9iamVjdC5zZXRBcmNo
aXZlKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBPYmplY3RCb3JkZXI6ICAgICAgICAgIHsg
b2JqZWN0LnNldEJvcmRlcihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgT2JqZWN0Q29kZUJh
c2U6ICAgICAgICB7IG9iamVjdC5zZXRDb2RlQmFzZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNh
c2UgT2JqZWN0Q29kZVR5cGU6ICAgICAgICB7IG9iamVjdC5zZXRDb2RlVHlwZShzdHIpOyByZXR1
cm47IH0KLSAgICAgIC8vIHJlYWQtb25seTogT2JqZWN0Q29udGVudERvY3VtZW50Ci0gICAgICBj
YXNlIE9iamVjdERhdGE6ICAgICAgICAgICAgeyBvYmplY3Quc2V0RGF0YShzdHIpOyByZXR1cm47
IH0KLSAgICAgIGNhc2UgT2JqZWN0RGVjbGFyZTogICAgICAgICB7IG9iamVjdC5zZXREZWNsYXJl
KHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBPYmplY3RIZWln
aHQ6ICAgICAgICAgIHsgb2JqZWN0LnNldEhlaWdodChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNh
c2UgT2JqZWN0SHNwYWNlOiAgICAgICAgICB7IG9iamVjdC5zZXRIc3BhY2Uoc3RyKTsgcmV0dXJu
OyB9Ci0gICAgICBjYXNlIE9iamVjdE5hbWU6ICAgICAgICAgICAgeyBvYmplY3Quc2V0TmFtZShz
dHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgT2JqZWN0U3RhbmRieTogICAgICAgICB7IG9iamVj
dC5zZXRTdGFuZGJ5KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBPYmplY3RUYWJJbmRleDog
ICAgICAgIHsgb2JqZWN0LnNldFRhYkluZGV4KHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47
IH0KLSAgICAgIGNhc2UgT2JqZWN0VHlwZTogICAgICAgICAgICB7IG9iamVjdC5zZXRUeXBlKHN0
cik7IHJldHVybjsgfQotICAgICAgY2FzZSBPYmplY3RVc2VNYXA6ICAgICAgICAgIHsgb2JqZWN0
LnNldFVzZU1hcChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgT2JqZWN0VnNwYWNlOiAgICAg
ICAgICB7IG9iamVjdC5zZXRWc3BhY2Uoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIE9iamVj
dFdpZHRoOiAgICAgICAgICAgeyBvYmplY3Quc2V0V2lkdGgoc3RyKTsgcmV0dXJuOyB9Ci0gICAg
ICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OmFuY2hvclNldHRlcihFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3Ry
KQoreworICAgIEhUTUxBbmNob3JFbGVtZW50SW1wbCYgYW5jaG9yID0gKnN0YXRpY19jYXN0PEhU
TUxBbmNob3JFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAg
ICAgICBjYXNlIEFuY2hvckFjY2Vzc0tleTogICAgICAgeyBhbmNob3Iuc2V0QWNjZXNzS2V5KHN0
cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEFuY2hvckNoYXJzZXQ6ICAgICAgICAgeyBhbmNo
b3Iuc2V0Q2hhcnNldChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBBbmNob3JDb29yZHM6
ICAgICAgICAgIHsgYW5jaG9yLnNldENvb3JkcyhzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2Fz
ZSBBbmNob3JIcmVmOiAgICAgICAgICAgIHsgYW5jaG9yLnNldEhyZWYoc3RyKTsgcmV0dXJuOyB9
CisgICAgICAgIGNhc2UgQW5jaG9ySHJlZkxhbmc6ICAgICAgICB7IGFuY2hvci5zZXRIcmVmbGFu
ZyhzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBBbmNob3JOYW1lOiAgICAgICAgICAgIHsg
YW5jaG9yLnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQW5jaG9yUmVsOiAg
ICAgICAgICAgICB7IGFuY2hvci5zZXRSZWwoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2Ug
QW5jaG9yUmV2OiAgICAgICAgICAgICB7IGFuY2hvci5zZXRSZXYoc3RyKTsgcmV0dXJuOyB9Cisg
ICAgICAgIGNhc2UgQW5jaG9yU2hhcGU6ICAgICAgICAgICB7IGFuY2hvci5zZXRTaGFwZShzdHIp
OyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBBbmNob3JUYWJJbmRleDogICAgICAgIHsgYW5jaG9y
LnNldFRhYkluZGV4KHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2Fz
ZSBBbmNob3JUYXJnZXQ6ICAgICAgICAgIHsgYW5jaG9yLnNldFRhcmdldChzdHIpOyByZXR1cm47
IH0KKyAgICAgICAgY2FzZSBBbmNob3JUeXBlOiAgICAgICAgICAgIHsgYW5jaG9yLnNldFR5cGUo
c3RyKTsgcmV0dXJuOyB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfUEFSQU06IHsK
LSAgICAgIEhUTUxQYXJhbUVsZW1lbnRJbXBsICZwYXJhbSA9IHN0YXRpY19jYXN0PEhUTUxQYXJh
bUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAg
Y2FzZSBQYXJhbU5hbWU6ICAgICAgICAgICAgeyBwYXJhbS5zZXROYW1lKHN0cik7IHJldHVybjsg
fQotICAgICAgY2FzZSBQYXJhbVR5cGU6ICAgICAgICAgICAgeyBwYXJhbS5zZXRUeXBlKHN0cik7
IHJldHVybjsgfQotICAgICAgY2FzZSBQYXJhbVZhbHVlOiAgICAgICAgICAgeyBwYXJhbS5zZXRW
YWx1ZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgUGFyYW1WYWx1ZVR5cGU6ICAgICAgIHsg
cGFyYW0uc2V0VmFsdWVUeXBlKHN0cik7IHJldHVybjsgfQotICAgICAgfQorfQorCit2b2lkIEhU
TUxFbGVtZW50OjppbWFnZVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3Qg
VmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxJbWFn
ZUVsZW1lbnRJbXBsJiBpbWFnZSA9ICpzdGF0aWNfY2FzdDxIVE1MSW1hZ2VFbGVtZW50SW1wbCo+
KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNlIEltYWdlTmFtZTog
ICAgICAgICAgICB7IGltYWdlLnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2Ug
SW1hZ2VBbGlnbjogICAgICAgICAgIHsgaW1hZ2Uuc2V0QWxpZ24oc3RyKTsgcmV0dXJuOyB9Cisg
ICAgICAgIGNhc2UgSW1hZ2VBbHQ6ICAgICAgICAgICAgIHsgaW1hZ2Uuc2V0QWx0KHN0cik7IHJl
dHVybjsgfQorICAgICAgICBjYXNlIEltYWdlQm9yZGVyOiAgICAgICAgICB7IGltYWdlLnNldEJv
cmRlcih2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgSW1hZ2VI
ZWlnaHQ6ICAgICAgICAgIHsgaW1hZ2Uuc2V0SGVpZ2h0KHZhbHVlLnRvSW50MzIoZXhlYykpOyBy
ZXR1cm47IH0KKyAgICAgICAgY2FzZSBJbWFnZUhzcGFjZTogICAgICAgICAgeyBpbWFnZS5zZXRI
c3BhY2UodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIEltYWdl
SXNNYXA6ICAgICAgICAgICB7IGltYWdlLnNldElzTWFwKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7
IHJldHVybjsgfQorICAgICAgICBjYXNlIEltYWdlTG9uZ0Rlc2M6ICAgICAgICB7IGltYWdlLnNl
dExvbmdEZXNjKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEltYWdlU3JjOiAgICAgICAg
ICAgICB7IGltYWdlLnNldFNyYyhzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJbWFnZVVz
ZU1hcDogICAgICAgICAgeyBpbWFnZS5zZXRVc2VNYXAoc3RyKTsgcmV0dXJuOyB9CisgICAgICAg
IGNhc2UgSW1hZ2VWc3BhY2U6ICAgICAgICAgIHsgaW1hZ2Uuc2V0VnNwYWNlKHZhbHVlLnRvSW50
MzIoZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJbWFnZVdpZHRoOiAgICAgICAgICAg
eyBpbWFnZS5zZXRXaWR0aCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CiAgICAgfQot
ICAgIGJyZWFrOwotICAgIGNhc2UgSURfQVBQTEVUOiB7Ci0gICAgICBIVE1MQXBwbGV0RWxlbWVu
dEltcGwgJmFwcGxldCA9IHN0YXRpY19jYXN0PEhUTUxBcHBsZXRFbGVtZW50SW1wbCAmPihlbGVt
ZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgQXBwbGV0QWxpZ246ICAg
ICAgICAgICB7IGFwcGxldC5zZXRBbGlnbihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQXBw
bGV0QWx0OiAgICAgICAgICAgICB7IGFwcGxldC5zZXRBbHQoc3RyKTsgcmV0dXJuOyB9Ci0gICAg
ICBjYXNlIEFwcGxldEFyY2hpdmU6ICAgICAgICAgeyBhcHBsZXQuc2V0QXJjaGl2ZShzdHIpOyBy
ZXR1cm47IH0KLSAgICAgIGNhc2UgQXBwbGV0Q29kZTogICAgICAgICAgICB7IGFwcGxldC5zZXRD
b2RlKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBBcHBsZXRDb2RlQmFzZTogICAgICAgIHsg
YXBwbGV0LnNldENvZGVCYXNlKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBBcHBsZXRIZWln
aHQ6ICAgICAgICAgIHsgYXBwbGV0LnNldEhlaWdodChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNh
c2UgQXBwbGV0SHNwYWNlOiAgICAgICAgICB7IGFwcGxldC5zZXRIc3BhY2Uoc3RyKTsgcmV0dXJu
OyB9Ci0gICAgICBjYXNlIEFwcGxldE5hbWU6ICAgICAgICAgICAgeyBhcHBsZXQuc2V0TmFtZShz
dHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQXBwbGV0T2JqZWN0OiAgICAgICAgICB7IGFwcGxl
dC5zZXRPYmplY3Qoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEFwcGxldFZzcGFjZTogICAg
ICAgICAgeyBhcHBsZXQuc2V0VnNwYWNlKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBBcHBs
ZXRXaWR0aDogICAgICAgICAgIHsgYXBwbGV0LnNldFdpZHRoKHN0cik7IHJldHVybjsgfQotICAg
ICAgfQorfQorCit2b2lkIEhUTUxFbGVtZW50OjpvYmplY3RTZXR0ZXIoRXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0
cikKK3sKKyAgICBIVE1MT2JqZWN0RWxlbWVudEltcGwmIG9iamVjdCA9ICpzdGF0aWNfY2FzdDxI
VE1MT2JqZWN0RWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAg
ICAgICAgLy8gcmVhZC1vbmx5OiBmb3JtCisgICAgICAgIGNhc2UgT2JqZWN0Q29kZTogICAgICAg
ICAgICB7IG9iamVjdC5zZXRDb2RlKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIE9iamVj
dEFsaWduOiAgICAgICAgICAgeyBvYmplY3Quc2V0QWxpZ24oc3RyKTsgcmV0dXJuOyB9CisgICAg
ICAgIGNhc2UgT2JqZWN0QXJjaGl2ZTogICAgICAgICB7IG9iamVjdC5zZXRBcmNoaXZlKHN0cik7
IHJldHVybjsgfQorICAgICAgICBjYXNlIE9iamVjdEJvcmRlcjogICAgICAgICAgeyBvYmplY3Qu
c2V0Qm9yZGVyKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIE9iamVjdENvZGVCYXNlOiAg
ICAgICAgeyBvYmplY3Quc2V0Q29kZUJhc2Uoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2Ug
T2JqZWN0Q29kZVR5cGU6ICAgICAgICB7IG9iamVjdC5zZXRDb2RlVHlwZShzdHIpOyByZXR1cm47
IH0KKyAgICAgICAgLy8gcmVhZC1vbmx5OiBPYmplY3RDb250ZW50RG9jdW1lbnQKKyAgICAgICAg
Y2FzZSBPYmplY3REYXRhOiAgICAgICAgICAgIHsgb2JqZWN0LnNldERhdGEoc3RyKTsgcmV0dXJu
OyB9CisgICAgICAgIGNhc2UgT2JqZWN0RGVjbGFyZTogICAgICAgICB7IG9iamVjdC5zZXREZWNs
YXJlKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIE9iamVj
dEhlaWdodDogICAgICAgICAgeyBvYmplY3Quc2V0SGVpZ2h0KHN0cik7IHJldHVybjsgfQorICAg
ICAgICBjYXNlIE9iamVjdEhzcGFjZTogICAgICAgICAgeyBvYmplY3Quc2V0SHNwYWNlKHN0cik7
IHJldHVybjsgfQorICAgICAgICBjYXNlIE9iamVjdE5hbWU6ICAgICAgICAgICAgeyBvYmplY3Qu
c2V0TmFtZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBPYmplY3RTdGFuZGJ5OiAgICAg
ICAgIHsgb2JqZWN0LnNldFN0YW5kYnkoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgT2Jq
ZWN0VGFiSW5kZXg6ICAgICAgICB7IG9iamVjdC5zZXRUYWJJbmRleCh2YWx1ZS50b0ludDMyKGV4
ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgT2JqZWN0VHlwZTogICAgICAgICAgICB7IG9i
amVjdC5zZXRUeXBlKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIE9iamVjdFVzZU1hcDog
ICAgICAgICAgeyBvYmplY3Quc2V0VXNlTWFwKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNl
IE9iamVjdFZzcGFjZTogICAgICAgICAgeyBvYmplY3Quc2V0VnNwYWNlKHN0cik7IHJldHVybjsg
fQorICAgICAgICBjYXNlIE9iamVjdFdpZHRoOiAgICAgICAgICAgeyBvYmplY3Quc2V0V2lkdGgo
c3RyKTsgcmV0dXJuOyB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfTUFQOiB7Ci0g
ICAgICBIVE1MTWFwRWxlbWVudEltcGwgJm1hcCA9IHN0YXRpY19jYXN0PEhUTUxNYXBFbGVtZW50
SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIC8vIHJlYWQt
b25seTogYXJlYXMKLSAgICAgIGNhc2UgTWFwTmFtZTogICAgICAgICAgICAgICAgIHsgbWFwLnNl
dE5hbWUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6cGFy
YW1TZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwg
Y29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MUGFyYW1FbGVtZW50SW1wbCYg
cGFyYW0gPSAqc3RhdGljX2Nhc3Q8SFRNTFBhcmFtRWxlbWVudEltcGwqPihpbXBsKCkpOworICAg
IHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBQYXJhbU5hbWU6ICAgICAgICAgICAgeyBw
YXJhbS5zZXROYW1lKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFBhcmFtVHlwZTogICAg
ICAgICAgICB7IHBhcmFtLnNldFR5cGUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgUGFy
YW1WYWx1ZTogICAgICAgICAgIHsgcGFyYW0uc2V0VmFsdWUoc3RyKTsgcmV0dXJuOyB9CisgICAg
ICAgIGNhc2UgUGFyYW1WYWx1ZVR5cGU6ICAgICAgIHsgcGFyYW0uc2V0VmFsdWVUeXBlKHN0cik7
IHJldHVybjsgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0FSRUE6IHsKLSAgICAg
IEhUTUxBcmVhRWxlbWVudEltcGwgJmFyZWEgPSBzdGF0aWNfY2FzdDxIVE1MQXJlYUVsZW1lbnRJ
bXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgY2FzZSBBcmVh
QWNjZXNzS2V5OiAgICAgICB7IGFyZWEuc2V0QWNjZXNzS2V5KHN0cik7IHJldHVybjsgfQotICAg
ICAgY2FzZSBBcmVhQWx0OiAgICAgICAgICAgICB7IGFyZWEuc2V0QWx0KHN0cik7IHJldHVybjsg
fQotICAgICAgY2FzZSBBcmVhQ29vcmRzOiAgICAgICAgICB7IGFyZWEuc2V0Q29vcmRzKHN0cik7
IHJldHVybjsgfQotICAgICAgY2FzZSBBcmVhSHJlZjogICAgICAgICAgICB7IGFyZWEuc2V0SHJl
ZihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQXJlYU5vSHJlZjogICAgICAgICAgeyBhcmVh
LnNldE5vSHJlZih2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2Ug
QXJlYVNoYXBlOiAgICAgICAgICAgeyBhcmVhLnNldFNoYXBlKHN0cik7IHJldHVybjsgfQotICAg
ICAgY2FzZSBBcmVhVGFiSW5kZXg6ICAgICAgICB7IGFyZWEuc2V0VGFiSW5kZXgodmFsdWUudG9J
bnQzMihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBBcmVhVGFyZ2V0OiAgICAgICAgICB7
IGFyZWEuc2V0VGFyZ2V0KHN0cik7IHJldHVybjsgfQotICAgICAgfQorfQorCit2b2lkIEhUTUxF
bGVtZW50OjphcHBsZXRTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZh
bHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MQXBwbGV0
RWxlbWVudEltcGwmIGFwcGxldCA9ICpzdGF0aWNfY2FzdDxIVE1MQXBwbGV0RWxlbWVudEltcGwq
PihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBBcHBsZXRBbGln
bjogICAgICAgICAgIHsgYXBwbGV0LnNldEFsaWduKHN0cik7IHJldHVybjsgfQorICAgICAgICBj
YXNlIEFwcGxldEFsdDogICAgICAgICAgICAgeyBhcHBsZXQuc2V0QWx0KHN0cik7IHJldHVybjsg
fQorICAgICAgICBjYXNlIEFwcGxldEFyY2hpdmU6ICAgICAgICAgeyBhcHBsZXQuc2V0QXJjaGl2
ZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBBcHBsZXRDb2RlOiAgICAgICAgICAgIHsg
YXBwbGV0LnNldENvZGUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQXBwbGV0Q29kZUJh
c2U6ICAgICAgICB7IGFwcGxldC5zZXRDb2RlQmFzZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAg
Y2FzZSBBcHBsZXRIZWlnaHQ6ICAgICAgICAgIHsgYXBwbGV0LnNldEhlaWdodChzdHIpOyByZXR1
cm47IH0KKyAgICAgICAgY2FzZSBBcHBsZXRIc3BhY2U6ICAgICAgICAgIHsgYXBwbGV0LnNldEhz
cGFjZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBBcHBsZXROYW1lOiAgICAgICAgICAg
IHsgYXBwbGV0LnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQXBwbGV0T2Jq
ZWN0OiAgICAgICAgICB7IGFwcGxldC5zZXRPYmplY3Qoc3RyKTsgcmV0dXJuOyB9CisgICAgICAg
IGNhc2UgQXBwbGV0VnNwYWNlOiAgICAgICAgICB7IGFwcGxldC5zZXRWc3BhY2Uoc3RyKTsgcmV0
dXJuOyB9CisgICAgICAgIGNhc2UgQXBwbGV0V2lkdGg6ICAgICAgICAgICB7IGFwcGxldC5zZXRX
aWR0aChzdHIpOyByZXR1cm47IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9TQ1JJ
UFQ6IHsKLSAgICAgIEhUTUxTY3JpcHRFbGVtZW50SW1wbCAmc2NyaXB0ID0gc3RhdGljX2Nhc3Q8
SFRNTFNjcmlwdEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikg
ewotICAgICAgY2FzZSBTY3JpcHRUZXh0OiAgICAgICAgICAgIHsgc2NyaXB0LnNldFRleHQoc3Ry
KTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFNjcmlwdEh0bWxGb3I6ICAgICAgICAgeyBzY3JpcHQu
c2V0SHRtbEZvcihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgU2NyaXB0RXZlbnQ6ICAgICAg
ICAgICB7IHNjcmlwdC5zZXRFdmVudChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgU2NyaXB0
Q2hhcnNldDogICAgICAgICB7IHNjcmlwdC5zZXRDaGFyc2V0KHN0cik7IHJldHVybjsgfQotICAg
ICAgY2FzZSBTY3JpcHREZWZlcjogICAgICAgICAgIHsgc2NyaXB0LnNldERlZmVyKHZhbHVlLnRv
Qm9vbGVhbihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBTY3JpcHRTcmM6ICAgICAgICAg
ICAgIHsgc2NyaXB0LnNldFNyYyhzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgU2NyaXB0VHlw
ZTogICAgICAgICAgICB7IHNjcmlwdC5zZXRUeXBlKHN0cik7IHJldHVybjsgfQotICAgICAgfQor
fQorCit2b2lkIEhUTUxFbGVtZW50OjptYXBTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAg
ICBIVE1MTWFwRWxlbWVudEltcGwmIG1hcCA9ICpzdGF0aWNfY2FzdDxIVE1MTWFwRWxlbWVudElt
cGwqPihpbXBsKCkpOworICAgIGlmICh0b2tlbiA9PSBNYXBOYW1lKQorICAgICAgICAvLyByZWFk
LW9ubHk6IGFyZWFzCisgICAgICAgIG1hcC5zZXROYW1lKHN0cik7Cit9CisKK3ZvaWQgSFRNTEVs
ZW1lbnQ6OmFyZWFTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVl
JiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MQXJlYUVsZW1l
bnRJbXBsJiBhcmVhID0gKnN0YXRpY19jYXN0PEhUTUxBcmVhRWxlbWVudEltcGwqPihpbXBsKCkp
OworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBBcmVhQWNjZXNzS2V5OiAgICAg
ICB7IGFyZWEuc2V0QWNjZXNzS2V5KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEFyZWFB
bHQ6ICAgICAgICAgICAgIHsgYXJlYS5zZXRBbHQoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNh
c2UgQXJlYUNvb3JkczogICAgICAgICAgeyBhcmVhLnNldENvb3JkcyhzdHIpOyByZXR1cm47IH0K
KyAgICAgICAgY2FzZSBBcmVhSHJlZjogICAgICAgICAgICB7IGFyZWEuc2V0SHJlZihzdHIpOyBy
ZXR1cm47IH0KKyAgICAgICAgY2FzZSBBcmVhTm9IcmVmOiAgICAgICAgICB7IGFyZWEuc2V0Tm9I
cmVmKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIEFyZWFT
aGFwZTogICAgICAgICAgIHsgYXJlYS5zZXRTaGFwZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAg
Y2FzZSBBcmVhVGFiSW5kZXg6ICAgICAgICB7IGFyZWEuc2V0VGFiSW5kZXgodmFsdWUudG9JbnQz
MihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIEFyZWFUYXJnZXQ6ICAgICAgICAgIHsg
YXJlYS5zZXRUYXJnZXQoc3RyKTsgcmV0dXJuOyB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNh
c2UgSURfVEFCTEU6IHsKLSAgICAgIEhUTUxUYWJsZUVsZW1lbnRJbXBsICZ0YWJsZSA9IHN0YXRp
Y19jYXN0PEhUTUxUYWJsZUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0
b2tlbikgewotICAgICAgY2FzZSBUYWJsZUNhcHRpb246ICAgICAgICAgeyB0YWJsZS5zZXRDYXB0
aW9uKHRvSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQodmFsdWUpKTsgcmV0dXJuOyB9Ci0gICAgICBj
YXNlIFRhYmxlVEhlYWQ6ICAgICAgICAgICB7IHRhYmxlLnNldFRIZWFkKHRvSFRNTFRhYmxlU2Vj
dGlvbkVsZW1lbnQodmFsdWUpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlVEZvb3Q6ICAg
ICAgICAgICB7IHRhYmxlLnNldFRGb290KHRvSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQodmFsdWUp
KTsgcmV0dXJuOyB9Ci0gICAgICAvLyByZWFkLW9ubHk6IHJvd3MKLSAgICAgIC8vIHJlYWQtb25s
eTogdGJvZGllcwotICAgICAgY2FzZSBUYWJsZUFsaWduOiAgICAgICAgICAgeyB0YWJsZS5zZXRB
bGlnbihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVCZ0NvbG9yOiAgICAgICAgIHsg
dGFibGUuc2V0QmdDb2xvcihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVCb3JkZXI6
ICAgICAgICAgIHsgdGFibGUuc2V0Qm9yZGVyKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBU
YWJsZUNlbGxQYWRkaW5nOiAgICAgeyB0YWJsZS5zZXRDZWxsUGFkZGluZyhzdHIpOyByZXR1cm47
IH0KLSAgICAgIGNhc2UgVGFibGVDZWxsU3BhY2luZzogICAgIHsgdGFibGUuc2V0Q2VsbFNwYWNp
bmcoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlRnJhbWU6ICAgICAgICAgICB7IHRh
YmxlLnNldEZyYW1lKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJsZVJ1bGVzOiAgICAg
ICAgICAgeyB0YWJsZS5zZXRSdWxlcyhzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVT
dW1tYXJ5OiAgICAgICAgIHsgdGFibGUuc2V0U3VtbWFyeShzdHIpOyByZXR1cm47IH0KLSAgICAg
IGNhc2UgVGFibGVXaWR0aDogICAgICAgICAgIHsgdGFibGUuc2V0V2lkdGgoc3RyKTsgcmV0dXJu
OyB9Ci0gICAgICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OnNjcmlwdFNldHRlcihFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0
cmluZyYgc3RyKQoreworICAgIEhUTUxTY3JpcHRFbGVtZW50SW1wbCYgc2NyaXB0ID0gKnN0YXRp
Y19jYXN0PEhUTUxTY3JpcHRFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tl
bikgeworICAgICAgICBjYXNlIFNjcmlwdFRleHQ6ICAgICAgICAgICAgeyBzY3JpcHQuc2V0VGV4
dChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBTY3JpcHRIdG1sRm9yOiAgICAgICAgIHsg
c2NyaXB0LnNldEh0bWxGb3Ioc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgU2NyaXB0RXZl
bnQ6ICAgICAgICAgICB7IHNjcmlwdC5zZXRFdmVudChzdHIpOyByZXR1cm47IH0KKyAgICAgICAg
Y2FzZSBTY3JpcHRDaGFyc2V0OiAgICAgICAgIHsgc2NyaXB0LnNldENoYXJzZXQoc3RyKTsgcmV0
dXJuOyB9CisgICAgICAgIGNhc2UgU2NyaXB0RGVmZXI6ICAgICAgICAgICB7IHNjcmlwdC5zZXRE
ZWZlcih2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBTY3Jp
cHRTcmM6ICAgICAgICAgICAgIHsgc2NyaXB0LnNldFNyYyhzdHIpOyByZXR1cm47IH0KKyAgICAg
ICAgY2FzZSBTY3JpcHRUeXBlOiAgICAgICAgICAgIHsgc2NyaXB0LnNldFR5cGUoc3RyKTsgcmV0
dXJuOyB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfQ0FQVElPTjogewotICAgICAg
SFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnRJbXBsICZ0YWJsZUNhcHRpb24gPSBzdGF0aWNfY2FzdDxI
VE1MVGFibGVDYXB0aW9uRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRv
a2VuKSB7Ci0gICAgICBjYXNlIFRhYmxlQWxpZ246ICAgICAgICAgICB7IHRhYmxlQ2FwdGlvbi5z
ZXRBbGlnbihzdHIpOyByZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6
dGFibGVTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1
ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MVGFibGVFbGVtZW50SW1w
bCYgdGFibGUgPSAqc3RhdGljX2Nhc3Q8SFRNTFRhYmxlRWxlbWVudEltcGwqPihpbXBsKCkpOwor
ICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBUYWJsZUNhcHRpb246ICAgICAgICAg
eyB0YWJsZS5zZXRDYXB0aW9uKHRvSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQodmFsdWUpKTsgcmV0
dXJuOyB9CisgICAgICAgIGNhc2UgVGFibGVUSGVhZDogICAgICAgICAgIHsgdGFibGUuc2V0VEhl
YWQodG9IVE1MVGFibGVTZWN0aW9uRWxlbWVudCh2YWx1ZSkpOyByZXR1cm47IH0KKyAgICAgICAg
Y2FzZSBUYWJsZVRGb290OiAgICAgICAgICAgeyB0YWJsZS5zZXRURm9vdCh0b0hUTUxUYWJsZVNl
Y3Rpb25FbGVtZW50KHZhbHVlKSk7IHJldHVybjsgfQorICAgICAgICAvLyByZWFkLW9ubHk6IHJv
d3MKKyAgICAgICAgLy8gcmVhZC1vbmx5OiB0Ym9kaWVzCisgICAgICAgIGNhc2UgVGFibGVBbGln
bjogICAgICAgICAgIHsgdGFibGUuc2V0QWxpZ24oc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNh
c2UgVGFibGVCZ0NvbG9yOiAgICAgICAgIHsgdGFibGUuc2V0QmdDb2xvcihzdHIpOyByZXR1cm47
IH0KKyAgICAgICAgY2FzZSBUYWJsZUJvcmRlcjogICAgICAgICAgeyB0YWJsZS5zZXRCb3JkZXIo
c3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGFibGVDZWxsUGFkZGluZzogICAgIHsgdGFi
bGUuc2V0Q2VsbFBhZGRpbmcoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGFibGVDZWxs
U3BhY2luZzogICAgIHsgdGFibGUuc2V0Q2VsbFNwYWNpbmcoc3RyKTsgcmV0dXJuOyB9CisgICAg
ICAgIGNhc2UgVGFibGVGcmFtZTogICAgICAgICAgIHsgdGFibGUuc2V0RnJhbWUoc3RyKTsgcmV0
dXJuOyB9CisgICAgICAgIGNhc2UgVGFibGVSdWxlczogICAgICAgICAgIHsgdGFibGUuc2V0UnVs
ZXMoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGFibGVTdW1tYXJ5OiAgICAgICAgIHsg
dGFibGUuc2V0U3VtbWFyeShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZVdpZHRo
OiAgICAgICAgICAgeyB0YWJsZS5zZXRXaWR0aChzdHIpOyByZXR1cm47IH0KICAgICB9Ci0gICAg
YnJlYWs7Ci0gICAgY2FzZSBJRF9DT0w6IHsKLSAgICAgIEhUTUxUYWJsZUNvbEVsZW1lbnRJbXBs
ICZ0YWJsZUNvbCA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZUNvbEVsZW1lbnRJbXBsICY+KGVsZW1l
bnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgY2FzZSBUYWJsZUNvbEFsaWduOiAg
ICAgICAgICAgeyB0YWJsZUNvbC5zZXRBbGlnbihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2Ug
VGFibGVDb2xDaDogICAgICAgICAgICAgIHsgdGFibGVDb2wuc2V0Q2goc3RyKTsgcmV0dXJuOyB9
Ci0gICAgICBjYXNlIFRhYmxlQ29sQ2hPZmY6ICAgICAgICAgICB7IHRhYmxlQ29sLnNldENoT2Zm
KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJsZUNvbFNwYW46ICAgICAgICAgICAgeyB0
YWJsZUNvbC5zZXRTcGFuKHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNh
c2UgVGFibGVDb2xWQWxpZ246ICAgICAgICAgIHsgdGFibGVDb2wuc2V0VkFsaWduKHN0cik7IHJl
dHVybjsgfQotICAgICAgY2FzZSBUYWJsZUNvbFdpZHRoOiAgICAgICAgICAgeyB0YWJsZUNvbC5z
ZXRXaWR0aChzdHIpOyByZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6
dGFibGVDYXB0aW9uU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1
ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTFRhYmxlQ2Fw
dGlvbkVsZW1lbnRJbXBsJiB0YWJsZUNhcHRpb24gPSAqc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ2Fw
dGlvbkVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBpZiAodG9rZW4gPT0gVGFibGVDYXB0aW9u
QWxpZ24pCisgICAgICAgIHRhYmxlQ2FwdGlvbi5zZXRBbGlnbihzdHIpOworfQorCit2b2lkIEhU
TUxFbGVtZW50Ojp0YWJsZUNvbFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29u
c3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxU
YWJsZUNvbEVsZW1lbnRJbXBsJiB0YWJsZUNvbCA9ICpzdGF0aWNfY2FzdDxIVE1MVGFibGVDb2xF
bGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNl
IFRhYmxlQ29sQWxpZ246ICAgICAgICAgICB7IHRhYmxlQ29sLnNldEFsaWduKHN0cik7IHJldHVy
bjsgfQorICAgICAgICBjYXNlIFRhYmxlQ29sQ2g6ICAgICAgICAgICAgICB7IHRhYmxlQ29sLnNl
dENoKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxlQ29sQ2hPZmY6ICAgICAgICAg
ICB7IHRhYmxlQ29sLnNldENoT2ZmKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxl
Q29sU3BhbjogICAgICAgICAgICB7IHRhYmxlQ29sLnNldFNwYW4odmFsdWUudG9JbnQzMihleGVj
KSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxlQ29sVkFsaWduOiAgICAgICAgICB7IHRh
YmxlQ29sLnNldFZBbGlnbihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZUNvbFdp
ZHRoOiAgICAgICAgICAgeyB0YWJsZUNvbC5zZXRXaWR0aChzdHIpOyByZXR1cm47IH0KICAgICB9
Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9USEVBRDoKLSAgICBjYXNlIElEX1RCT0RZOgotICAg
IGNhc2UgSURfVEZPT1Q6IHsKLSAgICAgIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbCAmdGFi
bGVTZWN0aW9uID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsICY+KGVs
ZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgY2FzZSBUYWJsZVNlY3Rpb25B
bGlnbjogICAgICAgICAgIHsgdGFibGVTZWN0aW9uLnNldEFsaWduKHN0cik7IHJldHVybjsgfQot
ICAgICAgY2FzZSBUYWJsZVNlY3Rpb25DaDogICAgICAgICAgICAgIHsgdGFibGVTZWN0aW9uLnNl
dENoKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJsZVNlY3Rpb25DaE9mZjogICAgICAg
ICAgIHsgdGFibGVTZWN0aW9uLnNldENoT2ZmKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBU
YWJsZVNlY3Rpb25WQWxpZ246ICAgICAgICAgIHsgdGFibGVTZWN0aW9uLnNldFZBbGlnbihzdHIp
OyByZXR1cm47IH0KLSAgICAgIC8vIHJlYWQtb25seTogcm93cwotICAgICAgfQorfQorCit2b2lk
IEhUTUxFbGVtZW50Ojp0YWJsZVNlY3Rpb25TZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAg
ICBIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGwmIHRhYmxlU2VjdGlvbiA9ICpzdGF0aWNfY2Fz
dDxIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9r
ZW4pIHsKKyAgICAgICAgY2FzZSBUYWJsZVNlY3Rpb25BbGlnbjogICAgICAgICAgIHsgdGFibGVT
ZWN0aW9uLnNldEFsaWduKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxlU2VjdGlv
bkNoOiAgICAgICAgICAgICAgeyB0YWJsZVNlY3Rpb24uc2V0Q2goc3RyKTsgcmV0dXJuOyB9Cisg
ICAgICAgIGNhc2UgVGFibGVTZWN0aW9uQ2hPZmY6ICAgICAgICAgICB7IHRhYmxlU2VjdGlvbi5z
ZXRDaE9mZihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZVNlY3Rpb25WQWxpZ246
ICAgICAgICAgIHsgdGFibGVTZWN0aW9uLnNldFZBbGlnbihzdHIpOyByZXR1cm47IH0KKyAgICAg
ICAgLy8gcmVhZC1vbmx5OiByb3dzCiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfVFI6
IHsKLSAgICAgIEhUTUxUYWJsZVJvd0VsZW1lbnRJbXBsICZ0YWJsZVJvdyA9IHN0YXRpY19jYXN0
PEhUTUxUYWJsZVJvd0VsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tl
bikgewotICAgICAgLy8gcmVhZC1vbmx5OiByb3dJbmRleAotICAgICAgLy8gcmVhZC1vbmx5OiBz
ZWN0aW9uUm93SW5kZXgKLSAgICAgIC8vIHJlYWQtb25seTogY2VsbHMKLSAgICAgIGNhc2UgVGFi
bGVSb3dBbGlnbjogICAgICAgICAgIHsgdGFibGVSb3cuc2V0QWxpZ24oc3RyKTsgcmV0dXJuOyB9
Ci0gICAgICBjYXNlIFRhYmxlUm93QmdDb2xvcjogICAgICAgICB7IHRhYmxlUm93LnNldEJnQ29s
b3Ioc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlUm93Q2g6ICAgICAgICAgICAgICB7
IHRhYmxlUm93LnNldENoKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJsZVJvd0NoT2Zm
OiAgICAgICAgICAgeyB0YWJsZVJvdy5zZXRDaE9mZihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNh
c2UgVGFibGVSb3dWQWxpZ246ICAgICAgICAgIHsgdGFibGVSb3cuc2V0VkFsaWduKHN0cik7IHJl
dHVybjsgfQotICAgICAgfQorfQorCit2b2lkIEhUTUxFbGVtZW50Ojp0YWJsZVJvd1NldHRlcihF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006
OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxUYWJsZVJvd0VsZW1lbnRJbXBsJiB0YWJsZVJv
dyA9ICpzdGF0aWNfY2FzdDxIVE1MVGFibGVSb3dFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAg
c3dpdGNoICh0b2tlbikgeworICAgICAgICAvLyByZWFkLW9ubHk6IHJvd0luZGV4CisgICAgICAg
IC8vIHJlYWQtb25seTogc2VjdGlvblJvd0luZGV4CisgICAgICAgIC8vIHJlYWQtb25seTogY2Vs
bHMKKyAgICAgICAgY2FzZSBUYWJsZVJvd0FsaWduOiAgICAgICAgICAgeyB0YWJsZVJvdy5zZXRB
bGlnbihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZVJvd0JnQ29sb3I6ICAgICAg
ICAgeyB0YWJsZVJvdy5zZXRCZ0NvbG9yKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRh
YmxlUm93Q2g6ICAgICAgICAgICAgICB7IHRhYmxlUm93LnNldENoKHN0cik7IHJldHVybjsgfQor
ICAgICAgICBjYXNlIFRhYmxlUm93Q2hPZmY6ICAgICAgICAgICB7IHRhYmxlUm93LnNldENoT2Zm
KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxlUm93VkFsaWduOiAgICAgICAgICB7
IHRhYmxlUm93LnNldFZBbGlnbihzdHIpOyByZXR1cm47IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0g
ICAgY2FzZSBJRF9USDoKLSAgICBjYXNlIElEX1REOiB7Ci0gICAgICBIVE1MVGFibGVDZWxsRWxl
bWVudEltcGwgJnRhYmxlQ2VsbCA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZUNlbGxFbGVtZW50SW1w
bCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIC8vIHJlYWQtb25s
eTogY2VsbEluZGV4Ci0gICAgICBjYXNlIFRhYmxlQ2VsbEFiYnI6ICAgICAgICAgICAgeyB0YWJs
ZUNlbGwuc2V0QWJicihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVDZWxsQWxpZ246
ICAgICAgICAgICB7IHRhYmxlQ2VsbC5zZXRBbGlnbihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNh
c2UgVGFibGVDZWxsQXhpczogICAgICAgICAgICB7IHRhYmxlQ2VsbC5zZXRBeGlzKHN0cik7IHJl
dHVybjsgfQotICAgICAgY2FzZSBUYWJsZUNlbGxCZ0NvbG9yOiAgICAgICAgIHsgdGFibGVDZWxs
LnNldEJnQ29sb3Ioc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlQ2VsbENoOiAgICAg
ICAgICAgICAgeyB0YWJsZUNlbGwuc2V0Q2goc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRh
YmxlQ2VsbENoT2ZmOiAgICAgICAgICAgeyB0YWJsZUNlbGwuc2V0Q2hPZmYoc3RyKTsgcmV0dXJu
OyB9Ci0gICAgICBjYXNlIFRhYmxlQ2VsbENvbFNwYW46ICAgICAgICAgeyB0YWJsZUNlbGwuc2V0
Q29sU3Bhbih2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxl
Q2VsbEhlYWRlcnM6ICAgICAgICAgeyB0YWJsZUNlbGwuc2V0SGVhZGVycyhzdHIpOyByZXR1cm47
IH0KLSAgICAgIGNhc2UgVGFibGVDZWxsSGVpZ2h0OiAgICAgICAgICB7IHRhYmxlQ2VsbC5zZXRI
ZWlnaHQoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlQ2VsbE5vV3JhcDogICAgICAg
ICAgeyB0YWJsZUNlbGwuc2V0Tm9XcmFwKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsg
fQotICAgICAgY2FzZSBUYWJsZUNlbGxSb3dTcGFuOiAgICAgICAgIHsgdGFibGVDZWxsLnNldFJv
d1NwYW4odmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJsZUNl
bGxTY29wZTogICAgICAgICAgIHsgdGFibGVDZWxsLnNldFNjb3BlKHN0cik7IHJldHVybjsgfQot
ICAgICAgY2FzZSBUYWJsZUNlbGxWQWxpZ246ICAgICAgICAgIHsgdGFibGVDZWxsLnNldFZBbGln
bihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVDZWxsV2lkdGg6ICAgICAgICAgICB7
IHRhYmxlQ2VsbC5zZXRXaWR0aChzdHIpOyByZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBI
VE1MRWxlbWVudDo6dGFibGVDZWxsU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBj
b25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRN
TFRhYmxlQ2VsbEVsZW1lbnRJbXBsJiB0YWJsZUNlbGwgPSAqc3RhdGljX2Nhc3Q8SFRNTFRhYmxl
Q2VsbEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAg
IC8vIHJlYWQtb25seTogY2VsbEluZGV4CisgICAgICAgIGNhc2UgVGFibGVDZWxsQWJicjogICAg
ICAgICAgICB7IHRhYmxlQ2VsbC5zZXRBYmJyKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNl
IFRhYmxlQ2VsbEFsaWduOiAgICAgICAgICAgeyB0YWJsZUNlbGwuc2V0QWxpZ24oc3RyKTsgcmV0
dXJuOyB9CisgICAgICAgIGNhc2UgVGFibGVDZWxsQXhpczogICAgICAgICAgICB7IHRhYmxlQ2Vs
bC5zZXRBeGlzKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxlQ2VsbEJnQ29sb3I6
ICAgICAgICAgeyB0YWJsZUNlbGwuc2V0QmdDb2xvcihzdHIpOyByZXR1cm47IH0KKyAgICAgICAg
Y2FzZSBUYWJsZUNlbGxDaDogICAgICAgICAgICAgIHsgdGFibGVDZWxsLnNldENoKHN0cik7IHJl
dHVybjsgfQorICAgICAgICBjYXNlIFRhYmxlQ2VsbENoT2ZmOiAgICAgICAgICAgeyB0YWJsZUNl
bGwuc2V0Q2hPZmYoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGFibGVDZWxsQ29sU3Bh
bjogICAgICAgICB7IHRhYmxlQ2VsbC5zZXRDb2xTcGFuKHZhbHVlLnRvSW50MzIoZXhlYykpOyBy
ZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZUNlbGxIZWFkZXJzOiAgICAgICAgIHsgdGFibGVD
ZWxsLnNldEhlYWRlcnMoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGFibGVDZWxsSGVp
Z2h0OiAgICAgICAgICB7IHRhYmxlQ2VsbC5zZXRIZWlnaHQoc3RyKTsgcmV0dXJuOyB9CisgICAg
ICAgIGNhc2UgVGFibGVDZWxsTm9XcmFwOiAgICAgICAgICB7IHRhYmxlQ2VsbC5zZXROb1dyYXAo
dmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGFibGVDZWxs
Um93U3BhbjogICAgICAgICB7IHRhYmxlQ2VsbC5zZXRSb3dTcGFuKHZhbHVlLnRvSW50MzIoZXhl
YykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZUNlbGxTY29wZTogICAgICAgICAgIHsg
dGFibGVDZWxsLnNldFNjb3BlKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxlQ2Vs
bFZBbGlnbjogICAgICAgICAgeyB0YWJsZUNlbGwuc2V0VkFsaWduKHN0cik7IHJldHVybjsgfQor
ICAgICAgICBjYXNlIFRhYmxlQ2VsbFdpZHRoOiAgICAgICAgICAgeyB0YWJsZUNlbGwuc2V0V2lk
dGgoc3RyKTsgcmV0dXJuOyB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfRlJBTUVT
RVQ6IHsKLSAgICAgIEhUTUxGcmFtZVNldEVsZW1lbnRJbXBsICZmcmFtZVNldCA9IHN0YXRpY19j
YXN0PEhUTUxGcmFtZVNldEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0
b2tlbikgewotICAgICAgY2FzZSBGcmFtZVNldENvbHM6ICAgICAgICAgICAgeyBmcmFtZVNldC5z
ZXRDb2xzKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBGcmFtZVNldFJvd3M6ICAgICAgICAg
ICAgeyBmcmFtZVNldC5zZXRSb3dzKHN0cik7IHJldHVybjsgfQotICAgICAgfQorfQorCit2b2lk
IEhUTUxFbGVtZW50OjpmcmFtZVNldFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwg
Y29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhU
TUxGcmFtZVNldEVsZW1lbnRJbXBsJiBmcmFtZVNldCA9ICpzdGF0aWNfY2FzdDxIVE1MRnJhbWVT
ZXRFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICBj
YXNlIEZyYW1lU2V0Q29sczogICAgICAgICAgICB7IGZyYW1lU2V0LnNldENvbHMoc3RyKTsgcmV0
dXJuOyB9CisgICAgICAgIGNhc2UgRnJhbWVTZXRSb3dzOiAgICAgICAgICAgIHsgZnJhbWVTZXQu
c2V0Um93cyhzdHIpOyByZXR1cm47IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9G
UkFNRTogewotICAgICAgSFRNTEZyYW1lRWxlbWVudEltcGwgJmZyYW1lRWxlbWVudCA9IHN0YXRp
Y19jYXN0PEhUTUxGcmFtZUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0
b2tlbikgewotICAgICAgIC8vIHJlYWQtb25seTogRnJhbWVDb250ZW50RG9jdW1lbnQ6Ci0gICAg
ICBjYXNlIEZyYW1lRnJhbWVCb3JkZXI6ICAgICB7IGZyYW1lRWxlbWVudC5zZXRGcmFtZUJvcmRl
cihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgRnJhbWVMb25nRGVzYzogICAgICAgIHsgZnJh
bWVFbGVtZW50LnNldExvbmdEZXNjKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBGcmFtZU1h
cmdpbkhlaWdodDogICAgeyBmcmFtZUVsZW1lbnQuc2V0TWFyZ2luSGVpZ2h0KHN0cik7IHJldHVy
bjsgfQotICAgICAgY2FzZSBGcmFtZU1hcmdpbldpZHRoOiAgICAgeyBmcmFtZUVsZW1lbnQuc2V0
TWFyZ2luV2lkdGgoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEZyYW1lTmFtZTogICAgICAg
ICAgICB7IGZyYW1lRWxlbWVudC5zZXROYW1lKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBG
cmFtZU5vUmVzaXplOiAgICAgICAgeyBmcmFtZUVsZW1lbnQuc2V0Tm9SZXNpemUodmFsdWUudG9C
b29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEZyYW1lU2Nyb2xsaW5nOiAgICAg
ICB7IGZyYW1lRWxlbWVudC5zZXRTY3JvbGxpbmcoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNl
IEZyYW1lU3JjOiAgICAgICAgICAgICB7IGZyYW1lRWxlbWVudC5zZXRTcmMoc3RyKTsgcmV0dXJu
OyB9Ci0gICAgICBjYXNlIEZyYW1lTG9jYXRpb246ICAgICAgICB7IGZyYW1lRWxlbWVudC5zZXRM
b2NhdGlvbihzdHIpOyByZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6
ZnJhbWVTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1
ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MRnJhbWVFbGVtZW50SW1w
bCYgZnJhbWVFbGVtZW50ID0gKnN0YXRpY19jYXN0PEhUTUxGcmFtZUVsZW1lbnRJbXBsKj4oaW1w
bCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIC8vIHJlYWQtb25seTogRnJhbWVD
b250ZW50RG9jdW1lbnQ6CisgICAgICAgIGNhc2UgRnJhbWVGcmFtZUJvcmRlcjogICAgIHsgZnJh
bWVFbGVtZW50LnNldEZyYW1lQm9yZGVyKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEZy
YW1lTG9uZ0Rlc2M6ICAgICAgICB7IGZyYW1lRWxlbWVudC5zZXRMb25nRGVzYyhzdHIpOyByZXR1
cm47IH0KKyAgICAgICAgY2FzZSBGcmFtZU1hcmdpbkhlaWdodDogICAgeyBmcmFtZUVsZW1lbnQu
c2V0TWFyZ2luSGVpZ2h0KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEZyYW1lTWFyZ2lu
V2lkdGg6ICAgICB7IGZyYW1lRWxlbWVudC5zZXRNYXJnaW5XaWR0aChzdHIpOyByZXR1cm47IH0K
KyAgICAgICAgY2FzZSBGcmFtZU5hbWU6ICAgICAgICAgICAgeyBmcmFtZUVsZW1lbnQuc2V0TmFt
ZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBGcmFtZU5vUmVzaXplOiAgICAgICAgeyBm
cmFtZUVsZW1lbnQuc2V0Tm9SZXNpemUodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9
CisgICAgICAgIGNhc2UgRnJhbWVTY3JvbGxpbmc6ICAgICAgIHsgZnJhbWVFbGVtZW50LnNldFNj
cm9sbGluZyhzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBGcmFtZVNyYzogICAgICAgICAg
ICAgeyBmcmFtZUVsZW1lbnQuc2V0U3JjKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEZy
YW1lTG9jYXRpb246ICAgICAgICB7IGZyYW1lRWxlbWVudC5zZXRMb2NhdGlvbihzdHIpOyByZXR1
cm47IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9JRlJBTUU6IHsKLSAgICAgIEhU
TUxJRnJhbWVFbGVtZW50SW1wbCAmaUZyYW1lID0gc3RhdGljX2Nhc3Q8SFRNTElGcmFtZUVsZW1l
bnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgY2FzZSBJ
RnJhbWVBbGlnbjogICAgICAgICAgIHsgaUZyYW1lLnNldEFsaWduKHN0cik7IHJldHVybjsgfQot
ICAgICAgLy8gcmVhZC1vbmx5OiBJRnJhbWVDb250ZW50RG9jdW1lbnQKLSAgICAgIGNhc2UgSUZy
YW1lRnJhbWVCb3JkZXI6ICAgICB7IGlGcmFtZS5zZXRGcmFtZUJvcmRlcihzdHIpOyByZXR1cm47
IH0KLSAgICAgIGNhc2UgSUZyYW1lSGVpZ2h0OiAgICAgICAgICB7IGlGcmFtZS5zZXRIZWlnaHQo
c3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElGcmFtZUxvbmdEZXNjOiAgICAgICAgeyBpRnJh
bWUuc2V0TG9uZ0Rlc2Moc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElGcmFtZU1hcmdpbkhl
aWdodDogICAgeyBpRnJhbWUuc2V0TWFyZ2luSGVpZ2h0KHN0cik7IHJldHVybjsgfQotICAgICAg
Y2FzZSBJRnJhbWVNYXJnaW5XaWR0aDogICAgIHsgaUZyYW1lLnNldE1hcmdpbldpZHRoKHN0cik7
IHJldHVybjsgfQotICAgICAgY2FzZSBJRnJhbWVOYW1lOiAgICAgICAgICAgIHsgaUZyYW1lLnNl
dE5hbWUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElGcmFtZVNjcm9sbGluZzogICAgICAg
eyBpRnJhbWUuc2V0U2Nyb2xsaW5nKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBJRnJhbWVT
cmM6ICAgICAgICAgICAgIHsgaUZyYW1lLnNldFNyYyhzdHIpOyByZXR1cm47IH0KLSAgICAgIGNh
c2UgSUZyYW1lV2lkdGg6ICAgICAgICAgICB7IGlGcmFtZS5zZXRXaWR0aChzdHIpOyByZXR1cm47
IH0KLSAgICAgIH0KLSAgICAgIGJyZWFrOworfQorCit2b2lkIEhUTUxFbGVtZW50OjppRnJhbWVT
ZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29u
c3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MSUZyYW1lRWxlbWVudEltcGwmIGlG
cmFtZSA9ICpzdGF0aWNfY2FzdDxIVE1MSUZyYW1lRWxlbWVudEltcGwqPihpbXBsKCkpOworICAg
IHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBJRnJhbWVBbGlnbjogICAgICAgICAgIHsg
aUZyYW1lLnNldEFsaWduKHN0cik7IHJldHVybjsgfQorICAgICAgICAvLyByZWFkLW9ubHk6IElG
cmFtZUNvbnRlbnREb2N1bWVudAorICAgICAgICBjYXNlIElGcmFtZUZyYW1lQm9yZGVyOiAgICAg
eyBpRnJhbWUuc2V0RnJhbWVCb3JkZXIoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgSUZy
YW1lSGVpZ2h0OiAgICAgICAgICB7IGlGcmFtZS5zZXRIZWlnaHQoc3RyKTsgcmV0dXJuOyB9Cisg
ICAgICAgIGNhc2UgSUZyYW1lTG9uZ0Rlc2M6ICAgICAgICB7IGlGcmFtZS5zZXRMb25nRGVzYyhz
dHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJRnJhbWVNYXJnaW5IZWlnaHQ6ICAgIHsgaUZy
YW1lLnNldE1hcmdpbkhlaWdodChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJRnJhbWVN
YXJnaW5XaWR0aDogICAgIHsgaUZyYW1lLnNldE1hcmdpbldpZHRoKHN0cik7IHJldHVybjsgfQor
ICAgICAgICBjYXNlIElGcmFtZU5hbWU6ICAgICAgICAgICAgeyBpRnJhbWUuc2V0TmFtZShzdHIp
OyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJRnJhbWVTY3JvbGxpbmc6ICAgICAgIHsgaUZyYW1l
LnNldFNjcm9sbGluZyhzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJRnJhbWVTcmM6ICAg
ICAgICAgICAgIHsgaUZyYW1lLnNldFNyYyhzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJ
RnJhbWVXaWR0aDogICAgICAgICAgIHsgaUZyYW1lLnNldFdpZHRoKHN0cik7IHJldHVybjsgfQog
ICAgIH0KLSAgfQorfQogCi0gIC8vIGdlbmVyaWMgcHJvcGVydGllcwotICBzd2l0Y2ggKHRva2Vu
KSB7Ci0gIGNhc2UgRWxlbWVudElkOgotICAgIGVsZW1lbnQuc2V0SWQoc3RyKTsKLSAgICByZXR1
cm47Ci0gIGNhc2UgRWxlbWVudFRpdGxlOgotICAgIGVsZW1lbnQuc2V0VGl0bGUoc3RyKTsKLSAg
ICByZXR1cm47Ci0gIGNhc2UgRWxlbWVudExhbmc6Ci0gICAgZWxlbWVudC5zZXRMYW5nKHN0cik7
Ci0gICAgcmV0dXJuOwotICBjYXNlIEVsZW1lbnREaXI6Ci0gICAgZWxlbWVudC5zZXREaXIoc3Ry
KTsKLSAgICByZXR1cm47Ci0gIGNhc2UgRWxlbWVudENsYXNzTmFtZToKLSAgICBlbGVtZW50LnNl
dENsYXNzTmFtZShzdHIpOwotICAgIHJldHVybjsKLSAgY2FzZSBFbGVtZW50SW5uZXJIVE1MOgot
ICAgIGVsZW1lbnQuc2V0SW5uZXJIVE1MKHN0ciwgZXhjZXB0aW9uKTsKLSAgICByZXR1cm47Ci0g
IGNhc2UgRWxlbWVudElubmVyVGV4dDoKLSAgICBlbGVtZW50LnNldElubmVyVGV4dChzdHIsIGV4
Y2VwdGlvbik7Ci0gICAgcmV0dXJuOwotICBjYXNlIEVsZW1lbnRPdXRlckhUTUw6Ci0gICAgZWxl
bWVudC5zZXRPdXRlckhUTUwoc3RyLCBleGNlcHRpb24pOwotICAgIHJldHVybjsKLSAgY2FzZSBF
bGVtZW50T3V0ZXJUZXh0OgotICAgIGVsZW1lbnQuc2V0T3V0ZXJUZXh0KHN0ciwgZXhjZXB0aW9u
KTsKLSAgICByZXR1cm47Ci0gIGNhc2UgRWxlbWVudENvbnRlbnRFZGl0YWJsZToKLSAgICBlbGVt
ZW50LnNldENvbnRlbnRFZGl0YWJsZShzdHIpOwotICAgIHJldHVybjsKLSAgZGVmYXVsdDoKLSAg
ICBrZFdhcm5pbmcoKSA8PCAiS0pTOjpIVE1MRWxlbWVudDo6cHV0VmFsdWUgdW5oYW5kbGVkIHRv
a2VuICIgPDwgdG9rZW4gPDwgIiB0aGlzVGFnPSIgPDwgZWxlbWVudC50YWdOYW1lKCkuc3RyaW5n
KCkgPDwgIiBzdHI9IiA8PCBzdHIuc3RyaW5nKCkgPDwgZW5kbDsKLSAgfQordm9pZCBIVE1MRWxl
bWVudDo6bWFycXVlZVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFs
dWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIC8vIEZJWE1FOiBG
aW5kIG91dCB3aGF0IFdpbklFIHN1cHBvcnRzIGFuZCBpbXBsZW1lbnQgaXQuCit9CisKK3ZvaWQg
SFRNTEVsZW1lbnQ6OnB1dFZhbHVlKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBW
YWx1ZSYgdmFsdWUsIGludCkKK3sKKyAgICBET01FeGNlcHRpb25UcmFuc2xhdG9yIGV4Y2VwdGlv
bihleGVjKTsKKyAgICBET006OkRPTVN0cmluZyBzdHIgPSB2YWx1ZS5pc0EoTnVsbFR5cGUpID8g
RE9NOjpET01TdHJpbmcoKSA6IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpOworIAorICAg
IC8vIENoZWNrIG91ciBzZXQgb2YgZ2VuZXJpYyBwcm9wZXJ0aWVzIGZpcnN0LgorICAgIEhUTUxF
bGVtZW50SW1wbCAmZWxlbWVudCA9ICpzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwgKj4oaW1w
bCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgRWxlbWVudElkOgorICAg
ICAgICAgICAgZWxlbWVudC5zZXRJZChzdHIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICBjYXNlIEVsZW1lbnRUaXRsZToKKyAgICAgICAgICAgIGVsZW1lbnQuc2V0VGl0bGUoc3RyKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBFbGVtZW50TGFuZzoKKyAgICAgICAg
ICAgIGVsZW1lbnQuc2V0TGFuZyhzdHIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBj
YXNlIEVsZW1lbnREaXI6CisgICAgICAgICAgICBlbGVtZW50LnNldERpcihzdHIpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIEVsZW1lbnRDbGFzc05hbWU6CisgICAgICAgICAg
ICBlbGVtZW50LnNldENsYXNzTmFtZShzdHIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICBjYXNlIEVsZW1lbnRJbm5lckhUTUw6CisgICAgICAgICAgICBlbGVtZW50LnNldElubmVySFRN
TChzdHIsIGV4Y2VwdGlvbik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgRWxl
bWVudElubmVyVGV4dDoKKyAgICAgICAgICAgIGVsZW1lbnQuc2V0SW5uZXJUZXh0KHN0ciwgZXhj
ZXB0aW9uKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBFbGVtZW50T3V0ZXJI
VE1MOgorICAgICAgICAgICAgZWxlbWVudC5zZXRPdXRlckhUTUwoc3RyLCBleGNlcHRpb24pOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIEVsZW1lbnRPdXRlclRleHQ6CisgICAg
ICAgICAgICBlbGVtZW50LnNldE91dGVyVGV4dChzdHIsIGV4Y2VwdGlvbik7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIGNhc2UgRWxlbWVudENvbnRlbnRFZGl0YWJsZToKKyAgICAgICAg
ICAgIGVsZW1lbnQuc2V0Q29udGVudEVkaXRhYmxlKHN0cik7CisgICAgICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgLy8gTm93IGNoZWNrIGZvciBwcm9wZXJ0aWVzIHRoYXQgYXBwbHkgdG8g
YSBzcGVjaWZpYyBlbGVtZW50IHR5cGUuCisgICAgY29uc3QgR2V0U2V0SW5mbyogaW5mbyA9IGdl
dFNldEluZm8oKTsKKyAgICBpZiAoaW5mbyAmJiBpbmZvLT5tX3NldHRlcikKKyAgICAgICAgcmV0
dXJuICh0aGlzLT4qKGluZm8tPm1fc2V0dGVyKSkoZXhlYywgdG9rZW4sIHZhbHVlLCBzdHIpOyAg
CiB9CiAKIEhUTUxFbGVtZW50SW1wbCAqdG9IVE1MRWxlbWVudChWYWx1ZUltcCAqdmFsKQpAQCAt
MzA1OCwyMyArMzIxNywxNyBAQCBIVE1MRWxlbWVudEltcGwgKnRvSFRNTEVsZW1lbnQoVmFsdWVJ
bXAgCiAKIEhUTUxUYWJsZUNhcHRpb25FbGVtZW50SW1wbCAqdG9IVE1MVGFibGVDYXB0aW9uRWxl
bWVudChWYWx1ZUltcCAqdmFsKQogewotICAgIGlmIChIVE1MRWxlbWVudEltcGwgKmUgPSB0b0hU
TUxFbGVtZW50KHZhbCkpCi0gICAgICAgIHN3aXRjaCAoZS0+aWQoKSkgewotICAgICAgICAgICAg
Y2FzZSBJRF9DQVBUSU9OOgotICAgICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1M
VGFibGVDYXB0aW9uRWxlbWVudEltcGwgKj4oZSk7Ci0gICAgICAgIH0KKyAgICBIVE1MRWxlbWVu
dEltcGwgKmUgPSB0b0hUTUxFbGVtZW50KHZhbCk7CisgICAgaWYgKGUgJiYgZS0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OmNhcHRpb24oKSkpCisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1M
VGFibGVDYXB0aW9uRWxlbWVudEltcGwgKj4oZSk7CiAgICAgcmV0dXJuIDA7CiB9CiAKIEhUTUxU
YWJsZVNlY3Rpb25FbGVtZW50SW1wbCAqdG9IVE1MVGFibGVTZWN0aW9uRWxlbWVudChWYWx1ZUlt
cCAqdmFsKQogewotICAgIGlmIChIVE1MRWxlbWVudEltcGwgKmUgPSB0b0hUTUxFbGVtZW50KHZh
bCkpCi0gICAgICAgIHN3aXRjaCAoZS0+aWQoKSkgewotICAgICAgICAgICAgY2FzZSBJRF9USEVB
RDoKLSAgICAgICAgICAgIGNhc2UgSURfVEJPRFk6Ci0gICAgICAgICAgICBjYXNlIElEX1RGT09U
OgotICAgICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MVGFibGVTZWN0aW9uRWxl
bWVudEltcGwgKj4oZSk7Ci0gICAgICAgIH0KKyAgICBIVE1MRWxlbWVudEltcGwgKmUgPSB0b0hU
TUxFbGVtZW50KHZhbCk7CisgICAgaWYgKGUgJiYgKGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0
aGVhZCgpKSB8fCBlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGJvZHkoKSkgfHwgZS0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OnRmb290KCkpKSkKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhU
TUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbCAqPihlKTsKICAgICByZXR1cm4gMDsKIH0KIApAQCAt
MzEyMywxMCArMzI3NiwxMCBAQCBWYWx1ZSBLSlM6OkhUTUxDb2xsZWN0aW9uOjp0cnlHZXQoRXhl
Y1N0CiAgIGVsc2UgaWYgKHByb3BlcnR5TmFtZSA9PSAic2VsZWN0ZWRJbmRleCIpIHsKICAgICAv
LyBOT04tU1RBTkRBUkQgb3B0aW9ucy5zZWxlY3RlZEluZGV4CiAgICAgTm9kZUltcGwgKm9wdGlv
biA9IGNvbGxlY3Rpb24uaXRlbSgwKTsKLSAgICBpZiAob3B0aW9uLT5pZCgpID09IElEX09QVElP
TikgeworICAgIGlmIChvcHRpb24tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvcHRpb24oKSkpIHsK
ICAgICAgIE5vZGVJbXBsICpzZWxlY3QgPSBvcHRpb247CiAgICAgICB3aGlsZSAoKHNlbGVjdCA9
IHNlbGVjdC0+cGFyZW50Tm9kZSgpKSkKLSAgICAgICAgaWYgKHNlbGVjdC0+aWQoKSA9PSBJRF9T
RUxFQ1QpCisgICAgICAgIGlmIChzZWxlY3QtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzZWxlY3Qo
KSkpCiAJICByZXR1cm4gTnVtYmVyKHN0YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50SW1wbCAq
PihzZWxlY3QpLT5zZWxlY3RlZEluZGV4KCkpOwogICAgIH0KICAgICByZXR1cm4gVW5kZWZpbmVk
KCk7CkBAIC0zMzE0LDcgKzM0NjcsNyBAQCB2b2lkIEtKUzo6SFRNTFNlbGVjdENvbGxlY3Rpb246
OnRyeVB1dChFCiAKICAgLy8gaXMgdiBhbiBvcHRpb24gZWxlbWVudCA/CiAgIE5vZGVJbXBsICpv
cHRpb24gPSB0b05vZGUodmFsdWUpOwotICBpZiAoIW9wdGlvbiB8fCBvcHRpb24tPmlkKCkgIT0g
SURfT1BUSU9OKQorICBpZiAoIW9wdGlvbiB8fCAhb3B0aW9uLT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6b3B0aW9uKCkpKQogICAgIHJldHVybjsKIAogICBpbnQgZXhjZXB0aW9uID0gMDsKSW5kZXg6
IGtodG1sL2VjbWEva2pzX2h0bWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2Vi
Q29yZS9raHRtbC9lY21hL2tqc19odG1sLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNDcKZGlm
ZiAtdSAtcCAtcjEuNDcga2h0bWwvZWNtYS9ranNfaHRtbC5oCi0tLSBraHRtbC9lY21hL2tqc19o
dG1sLmgJMjIgSnVuIDIwMDUgMDA6NDg6NDQgLTAwMDAJMS40NworKysga2h0bWwvZWNtYS9ranNf
aHRtbC5oCTIyIEp1biAyMDA1IDIzOjIzOjEwIC0wMDAwCkBAIC04NSw2ICs4NSwxMzEgQEAgbmFt
ZXNwYWNlIEtKUyB7CiAgICAgICBjYXB0aW9uX2luZm8sIGNvbF9pbmZvLCB0YWJsZXNlY3Rpb25f
aW5mbywgdHJfaW5mbywKICAgICAgIHRhYmxlY2VsbF9pbmZvLCBmcmFtZVNldF9pbmZvLCBmcmFt
ZV9pbmZvLCBpRnJhbWVfaW5mbywgbWFycXVlZV9pbmZvOwogCisgICAgLy8gRklYTUU6IE1pZ2h0
IG1ha2Ugc2Vuc2UgdG8gY29tYmluZSB0aGlzIHdpdGggQ2xhc3NJbmZvIHNvbWUgZGF5LgorICAg
IHR5cGVkZWYgVmFsdWUgKEhUTUxFbGVtZW50OjoqR2V0dGVyRnVuY3Rpb24pKEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB0eXBlZGVmIHZvaWQgKEhUTUxFbGVtZW50Ojoq
U2V0dGVyRnVuY3Rpb24pKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYg
dmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIHN0cnVjdCBHZXRTZXRJbmZv
IHsgR2V0dGVyRnVuY3Rpb24gbV9nZXR0ZXI7IFNldHRlckZ1bmN0aW9uIG1fc2V0dGVyOyB9Owor
ICAgIGNvbnN0IEdldFNldEluZm8qIGdldFNldEluZm8oKSBjb25zdDsKKyAgICBzdGF0aWMgY29u
c3QgR2V0U2V0SW5mbyBodG1sX2dldHNldCwgaGVhZF9nZXRzZXQsIGxpbmtfZ2V0c2V0LCB0aXRs
ZV9nZXRzZXQsCisgICAgICBtZXRhX2dldHNldCwgYmFzZV9nZXRzZXQsIGlzSW5kZXhfZ2V0c2V0
LCBzdHlsZV9nZXRzZXQsIGJvZHlfZ2V0c2V0LCBmb3JtX2dldHNldCwKKyAgICAgIHNlbGVjdF9n
ZXRzZXQsIG9wdEdyb3VwX2dldHNldCwgb3B0aW9uX2dldHNldCwgaW5wdXRfZ2V0c2V0LCB0ZXh0
QXJlYV9nZXRzZXQsCisgICAgICBidXR0b25fZ2V0c2V0LCBsYWJlbF9nZXRzZXQsIGZpZWxkU2V0
X2dldHNldCwgbGVnZW5kX2dldHNldCwgdWxfZ2V0c2V0LCBvbF9nZXRzZXQsCisgICAgICBkbF9n
ZXRzZXQsIGRpcl9nZXRzZXQsIG1lbnVfZ2V0c2V0LCBsaV9nZXRzZXQsIGRpdl9nZXRzZXQsIHBf
Z2V0c2V0LCBoZWFkaW5nX2dldHNldCwKKyAgICAgIGJsb2NrUXVvdGVfZ2V0c2V0LCBxX2dldHNl
dCwgcHJlX2dldHNldCwgYnJfZ2V0c2V0LCBiYXNlRm9udF9nZXRzZXQsIGZvbnRfZ2V0c2V0LAor
ICAgICAgaHJfZ2V0c2V0LCBtb2RfZ2V0c2V0LCBhX2dldHNldCwgY2FudmFzX2dldHNldCwgaW1n
X2dldHNldCwgb2JqZWN0X2dldHNldCwgcGFyYW1fZ2V0c2V0LAorICAgICAgYXBwbGV0X2dldHNl
dCwgbWFwX2dldHNldCwgYXJlYV9nZXRzZXQsIHNjcmlwdF9nZXRzZXQsIHRhYmxlX2dldHNldCwK
KyAgICAgIGNhcHRpb25fZ2V0c2V0LCBjb2xfZ2V0c2V0LCB0YWJsZXNlY3Rpb25fZ2V0c2V0LCB0
cl9nZXRzZXQsCisgICAgICB0YWJsZWNlbGxfZ2V0c2V0LCBmcmFtZVNldF9nZXRzZXQsIGZyYW1l
X2dldHNldCwgaUZyYW1lX2dldHNldCwgbWFycXVlZV9nZXRzZXQ7CisKKyAgICBWYWx1ZSBodG1s
R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBodG1s
U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNv
bnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIGhlYWRHZXR0ZXIoRXhlY1N0YXRl
KiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGhlYWRTZXR0ZXIoRXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJp
bmcmIHN0cik7CisgICAgVmFsdWUgbGlua0dldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tl
bikgY29uc3Q7CisgICAgdm9pZCAgbGlua1NldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
biwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBW
YWx1ZSB0aXRsZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAg
dm9pZCAgdGl0bGVTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVl
JiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgbWV0YUdldHRl
cihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgbWV0YVNldHRl
cihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBE
T006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBiYXNlR2V0dGVyKEV4ZWNTdGF0ZSogZXhl
YywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBiYXNlU2V0dGVyKEV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBz
dHIpOworICAgIFZhbHVlIGlzSW5kZXhHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4p
IGNvbnN0OworICAgIHZvaWQgIGlzSW5kZXhTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAg
VmFsdWUgc3R5bGVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAg
IHZvaWQgIHN0eWxlU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1
ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIGJvZHlHZXR0
ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGJvZHlTZXR0
ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3Qg
RE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgZm9ybUdldHRlcihFeGVjU3RhdGUqIGV4
ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgZm9ybVNldHRlcihFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYg
c3RyKTsKKyAgICBWYWx1ZSBzZWxlY3RHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4p
IGNvbnN0OworICAgIHZvaWQgIHNlbGVjdFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
biwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBW
YWx1ZSBvcHRHcm91cEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7Cisg
ICAgdm9pZCAgb3B0R3JvdXBTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0
IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgb3B0
aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBv
cHRpb25TZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1
ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgaW5wdXRHZXR0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGlucHV0U2V0dGVyKEV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6
RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIHRleHRBcmVhR2V0dGVyKEV4ZWNTdGF0ZSogZXhl
YywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICB0ZXh0QXJlYVNldHRlcihFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmlu
ZyYgc3RyKTsKKyAgICBWYWx1ZSBidXR0b25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0OworICAgIHZvaWQgIGJ1dHRvblNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAg
ICBWYWx1ZSBsYWJlbEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7Cisg
ICAgdm9pZCAgbGFiZWxTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZh
bHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgZmllbGRT
ZXRHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGZp
ZWxkU2V0U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFs
dWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIGxlZ2VuZEdldHRlcihF
eGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgbGVnZW5kU2V0dGVy
KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERP
TTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIHVMaXN0R2V0dGVyKEV4ZWNTdGF0ZSogZXhl
YywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICB1TGlzdFNldHRlcihFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYg
c3RyKTsKKyAgICBWYWx1ZSBvTGlzdEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikg
Y29uc3Q7CisgICAgdm9pZCAgb0xpc3RTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4s
IGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFs
dWUgZExpc3RHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZv
aWQgIGRMaXN0U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYg
dmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIGRpckdldHRlcihF
eGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgZGlyU2V0dGVyKEV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6
RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIG1lbnVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBp
bnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIG1lbnVTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7
CisgICAgVmFsdWUgbGlHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Owor
ICAgIHZvaWQgIGxpU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1
ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIGRpdkdldHRl
cihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgZGl2U2V0dGVy
KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERP
TTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIHBhcmFncmFwaEdldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgcGFyYWdyYXBoU2V0dGVyKEV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9N
U3RyaW5nJiBzdHIpOworICAgIFZhbHVlIGhlYWRpbmdHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBp
bnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGhlYWRpbmdTZXR0ZXIoRXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0
cik7CisgICAgVmFsdWUgYmxvY2tRdW90ZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tl
bikgY29uc3Q7CisgICAgdm9pZCAgYmxvY2tRdW90ZVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsK
KyAgICBWYWx1ZSBxdW90ZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7
CisgICAgdm9pZCAgcXVvdGVTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0
IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgcHJl
R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBwcmVT
ZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29u
c3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgYnJHZXR0ZXIoRXhlY1N0YXRlKiBl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGJyU2V0dGVyKEV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBz
dHIpOworICAgIFZhbHVlIGJhc2VGb250R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2Vu
KSBjb25zdDsKKyAgICB2b2lkICBiYXNlRm9udFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAg
ICBWYWx1ZSBmb250R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAg
ICB2b2lkICBmb250U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1
ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIGhyR2V0dGVy
KEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBoclNldHRlcihF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006
OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBtb2RHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBp
bnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIG1vZFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsK
KyAgICBWYWx1ZSBhbmNob3JHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0
OworICAgIHZvaWQgIGFuY2hvclNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29u
c3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBp
bWFnZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAg
aW1hZ2VTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1
ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgb2JqZWN0R2V0dGVyKEV4
ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBvYmplY3RTZXR0ZXIo
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9N
OjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgcGFyYW1HZXR0ZXIoRXhlY1N0YXRlKiBleGVj
LCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIHBhcmFtU2V0dGVyKEV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBz
dHIpOworICAgIFZhbHVlIGFwcGxldEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikg
Y29uc3Q7CisgICAgdm9pZCAgYXBwbGV0U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
LCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZh
bHVlIG1hcEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9p
ZCAgbWFwU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFs
dWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIGFyZWFHZXR0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGFyZWFTZXR0ZXIoRXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpE
T01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgc2NyaXB0R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywg
aW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBzY3JpcHRTZXR0ZXIoRXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0
cik7CisgICAgVmFsdWUgdGFibGVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNv
bnN0OworICAgIHZvaWQgIHRhYmxlU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBj
b25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVl
IHRhYmxlQ2FwdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7Cisg
ICAgdm9pZCAgdGFibGVDYXB0aW9uU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBj
b25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVl
IHRhYmxlQ29sR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2
b2lkICB0YWJsZUNvbFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFs
dWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSB0YWJsZVNl
Y3Rpb25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQg
IHRhYmxlU2VjdGlvblNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFs
dWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSB0YWJsZVJv
d0dldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgdGFi
bGVSb3dTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1
ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgdGFibGVDZWxsR2V0dGVy
KEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICB0YWJsZUNlbGxT
ZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29u
c3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgZnJhbWVTZXRHZXR0ZXIoRXhlY1N0
YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGZyYW1lU2V0U2V0dGVyKEV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6
RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIGZyYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywg
aW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBmcmFtZVNldHRlcihFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3Ry
KTsKKyAgICBWYWx1ZSBpRnJhbWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNv
bnN0OworICAgIHZvaWQgIGlGcmFtZVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwg
Y29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1
ZSBtYXJxdWVlR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2
b2lkICBtYXJxdWVlU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1
ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworCiAgICAgZW51bSB7IEh0bWxW
ZXJzaW9uLCBIZWFkUHJvZmlsZSwgTGlua0hyZWYsIExpbmtSZWwsIExpbmtNZWRpYSwKICAgICAg
ICAgICAgTGlua0NoYXJzZXQsIExpbmtEaXNhYmxlZCwgTGlua0hyZWZMYW5nLCBMaW5rUmV2LCBM
aW5rVGFyZ2V0LCBMaW5rVHlwZSwKICAgICAgICAgICAgTGlua1NoZWV0LCBUaXRsZVRleHQsIE1l
dGFOYW1lLCBNZXRhSHR0cEVxdWl2LCBNZXRhQ29udGVudCwgTWV0YVNjaGVtZSwKSW5kZXg6IGto
dG1sL2VjbWEva2pzX3dpbmRvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dl
YkNvcmUva2h0bWwvZWNtYS9ranNfd2luZG93LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4x
NjEKZGlmZiAtdSAtcCAtcjEuMTYxIGtodG1sL2VjbWEva2pzX3dpbmRvdy5jcHAKLS0tIGtodG1s
L2VjbWEva2pzX3dpbmRvdy5jcHAJMjIgSnVuIDIwMDUgMDA6NDg6NDQgLTAwMDAJMS4xNjEKKysr
IGtodG1sL2VjbWEva2pzX3dpbmRvdy5jcHAJMjIgSnVuIDIwMDUgMjM6MjM6MTIgLTAwMDAKQEAg
LTY4LDcgKzY4LDYgQEAKICNpbmNsdWRlICJodG1sL2h0bWxfZG9jdW1lbnRpbXBsLmgiCiAjaW5j
bHVkZSAiY3NzL2Nzc19ydWxlaW1wbC5oIgogI2luY2x1ZGUgImNzcy9jc3Nfc3R5bGVzaGVldGlt
cGwuaCIKLSNpbmNsdWRlICJtaXNjL2h0bWx0YWdzLmgiCiAKIC8vIE11c3QgaW5jbHVkZSA8Y21h
dGg+IGluc3RlYWQgb2YgPG1hdGguaD4gYmVjYXVzZSBvZiBhIGJ1ZyBpbiB0aGUKIC8vIGdjYyAz
LjMgbGlicmFyeSB2ZXJzaW9uIG9mIDxtYXRoLmg+IHdoZXJlIGlmIHlvdSBpbmNsdWRlIGJvdGgK
SW5kZXg6IGtodG1sL2VkaXRpbmcvYXBwbHlfc3R5bGVfY29tbWFuZC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWRpdGluZy9hcHBseV9zdHlsZV9jb21t
YW5kLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yCmRpZmYgLXUgLXAgLXIxLjIga2h0bWwv
ZWRpdGluZy9hcHBseV9zdHlsZV9jb21tYW5kLmNwcAotLS0ga2h0bWwvZWRpdGluZy9hcHBseV9z
dHlsZV9jb21tYW5kLmNwcAkyNCBNYXkgMjAwNSAwNzoyMTo0NyAtMDAwMAkxLjIKKysrIGtodG1s
L2VkaXRpbmcvYXBwbHlfc3R5bGVfY29tbWFuZC5jcHAJMjIgSnVuIDIwMDUgMjM6MjM6MTQgLTAw
MDAKQEAgLTMzLDcgKzMzLDcgQEAKICNpbmNsdWRlICJjc3MvY3NzcHJvcGVydGllcy5oIgogI2lu
Y2x1ZGUgImRvbS9kb21fc3RyaW5nLmgiCiAjaW5jbHVkZSAiaHRtbC9odG1sX2VsZW1lbnRpbXBs
LmgiCi0jaW5jbHVkZSAibWlzYy9odG1sdGFncy5oIgorI2luY2x1ZGUgImh0bWxuYW1lcy5oIgog
I2luY2x1ZGUgIm1pc2MvaHRtbGF0dHJzLmgiCiAjaW5jbHVkZSAicmVuZGVyaW5nL3JlbmRlcl9v
YmplY3QuaCIKICNpbmNsdWRlICJ4bWwvZG9tX2RvY2ltcGwuaCIKQEAgLTY1LDYgKzY1LDcgQEAg
dXNpbmcgRE9NOjpOb2RlSW1wbDsKIHVzaW5nIERPTTo6UG9zaXRpb247CiB1c2luZyBET006OlJh
bmdlSW1wbDsKIHVzaW5nIERPTTo6VGV4dEltcGw7Cit1c2luZyBET006OkhUTUxOYW1lczsKIAog
bmFtZXNwYWNlIGtodG1sIHsKIApAQCAtMjQ5LDEyICsyNTAsMTIgQEAgYm9vbCBpc1N0eWxlU3Bh
bihjb25zdCBOb2RlSW1wbCAqbm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgY29u
c3QgSFRNTEVsZW1lbnRJbXBsICplbGVtID0gc3RhdGljX2Nhc3Q8Y29uc3QgSFRNTEVsZW1lbnRJ
bXBsICo+KG5vZGUpOwotICAgIHJldHVybiBlbGVtLT5pZCgpID09IElEX1NQQU4gJiYgZWxlbS0+
Z2V0QXR0cmlidXRlKEFUVFJfQ0xBU1MpID09IHN0eWxlU3BhbkNsYXNzU3RyaW5nKCk7CisgICAg
cmV0dXJuIGVsZW0tPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnNwYW4oKSkgJiYgZWxlbS0+Z2V0
QXR0cmlidXRlKEFUVFJfQ0xBU1MpID09IHN0eWxlU3BhbkNsYXNzU3RyaW5nKCk7CiB9CiAKIHN0
YXRpYyBib29sIGlzRW1wdHlTdHlsZVNwYW4oY29uc3QgTm9kZUltcGwgKm5vZGUpCiB7Ci0gICAg
aWYgKCFub2RlIHx8ICFub2RlLT5pc0hUTUxFbGVtZW50KCkgfHwgbm9kZS0+aWQoKSAhPSBJRF9T
UEFOKQorICAgIGlmICghbm9kZSB8fCAhbm9kZS0+aXNIVE1MRWxlbWVudCgpIHx8ICFub2RlLT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6c3BhbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgY29uc3QgSFRNTEVsZW1lbnRJbXBsICplbGVtID0gc3RhdGljX2Nhc3Q8Y29uc3QgSFRNTEVs
ZW1lbnRJbXBsICo+KG5vZGUpOwpAQCAtMjY0LDcgKzI2NSw3IEBAIHN0YXRpYyBib29sIGlzRW1w
dHlTdHlsZVNwYW4oY29uc3QgTm9kZUkKIAogc3RhdGljIGJvb2wgaXNFbXB0eUZvbnRUYWcoY29u
c3QgTm9kZUltcGwgKm5vZGUpCiB7Ci0gICAgaWYgKCFub2RlIHx8IG5vZGUtPmlkKCkgIT0gSURf
Rk9OVCkKKyAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpmb250
KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBjb25zdCBFbGVtZW50SW1wbCAqZWxl
bSA9IHN0YXRpY19jYXN0PGNvbnN0IEVsZW1lbnRJbXBsICo+KG5vZGUpOwpAQCAtNTg2LDcgKzU4
Nyw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5SW5saW5lU3R5bGUKICAgICAgICAg
ICAgICAgICAgICAgLy8gdGhlIGN1cnJlbnQgZ3JvdXAuCiAgICAgICAgICAgICAgICAgICAgIGlm
IChub2RlID09IGVuZC5ub2RlKCkgfHwgCiAgICAgICAgICAgICAgICAgICAgICAgICBydW5TdGFy
dC0+cGFyZW50Tm9kZSgpICE9IG5leHQtPnBhcmVudE5vZGUoKSB8fCAKLSAgICAgICAgICAgICAg
ICAgICAgICAgIChuZXh0LT5pc0hUTUxFbGVtZW50KCkgJiYgbmV4dC0+aWQoKSAhPSBJRF9CUikg
fHwgCisgICAgICAgICAgICAgICAgICAgICAgICAhbmV4dC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
OmJyKCkpIHx8IAogICAgICAgICAgICAgICAgICAgICAgICAgKG5leHQtPnJlbmRlcmVyKCkgJiYg
IW5leHQtPnJlbmRlcmVyKCktPmlzSW5saW5lKCkpKQogICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBuZXh0OwpAQCAtNjExLDExICs2MTIs
MTEgQEAgYm9vbCBBcHBseVN0eWxlQ29tbWFuZDo6aXNIVE1MU3R5bGVOb2RlKAogICAgIGZvciAo
UVZhbHVlTGlzdENvbnN0SXRlcmF0b3I8Q1NTUHJvcGVydHk+IGl0ID0gc3R5bGUtPnZhbHVlc0l0
ZXJhdG9yKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBzd2l0Y2ggKCgqaXQpLmlkKCkp
IHsKICAgICAgICAgICAgIGNhc2UgQ1NTX1BST1BfRk9OVF9XRUlHSFQ6Ci0gICAgICAgICAgICAg
ICAgaWYgKGVsZW0tPmlkKCkgPT0gSURfQikKKyAgICAgICAgICAgICAgICBpZiAoZWxlbS0+aGFz
TG9jYWxOYW1lKEhUTUxOYW1lczo6YigpKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIENTU19QUk9QX0ZP
TlRfU1RZTEU6Ci0gICAgICAgICAgICAgICAgaWYgKGVsZW0tPmlkKCkgPT0gSURfSSkKKyAgICAg
ICAgICAgICAgICBpZiAoZWxlbS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6aSgpKSkKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9CkBAIC02MzgsNyAr
NjM5LDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlSFRNTEZvbnRTdAogICAgIEFT
U0VSVChzdHlsZSk7CiAgICAgQVNTRVJUKGVsZW0pOwogCi0gICAgaWYgKGVsZW0tPmlkKCkgIT0g
SURfRk9OVCkKKyAgICBpZiAoIWVsZW0tPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmZvbnQoKSkp
CiAgICAgICAgIHJldHVybjsKIAogICAgIGludCBleGNlcHRpb25Db2RlID0gMDsKQEAgLTEwNDcs
NyArMTA0OCw3IEBAIHN0YXRpYyBib29sIGFyZUlkZW50aWNhbEVsZW1lbnRzKE5vZGVJbXAKICAg
ICBFbGVtZW50SW1wbCAqZmlyc3RFbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxlbWVudEltcGwgKj4o
Zmlyc3QpOwogICAgIEVsZW1lbnRJbXBsICpzZWNvbmRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxl
bWVudEltcGwgKj4oc2Vjb25kKTsKICAgICAKLSAgICBpZiAoZmlyc3RFbGVtZW50LT5pZCgpICE9
IHNlY29uZEVsZW1lbnQtPmlkKCkpCisgICAgaWYgKGZpcnN0RWxlbWVudC0+dGFnTmFtZSgpICE9
IHNlY29uZEVsZW1lbnQtPnRhZ05hbWUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
TmFtZWRBdHRyTWFwSW1wbCAqZmlyc3RNYXAgPSBmaXJzdEVsZW1lbnQtPmF0dHJpYnV0ZXMoKTsK
QEAgLTExMjksNyArMTEzMCw3IEBAIGJvb2wgQXBwbHlTdHlsZUNvbW1hbmQ6Om1lcmdlRW5kV2l0
aE5leHQKICAgICAgICAgZW5kT2Zmc2V0ID0gcGFyZW50TGFzdE9mZnNldDsKICAgICB9CiAKLSAg
ICBpZiAoIWVuZE5vZGUtPmlzRWxlbWVudE5vZGUoKSB8fCBlbmROb2RlLT5pZCgpID09IElEX0JS
KQorICAgIGlmICghZW5kTm9kZS0+aXNFbGVtZW50Tm9kZSgpIHx8IGVuZE5vZGUtPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjpicigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgTm9kZUlt
cGwgKm5leHRTaWJsaW5nID0gZW5kTm9kZS0+bmV4dFNpYmxpbmcoKTsKSW5kZXg6IGtodG1sL2Vk
aXRpbmcvYnJlYWtfYmxvY2txdW90ZV9jb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL2JyZWFrX2Jsb2NrcXVvdGVfY29tbWFuZC5j
cHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC11IC1wIC1yMS4xIGtodG1sL2VkaXRp
bmcvYnJlYWtfYmxvY2txdW90ZV9jb21tYW5kLmNwcAotLS0ga2h0bWwvZWRpdGluZy9icmVha19i
bG9ja3F1b3RlX2NvbW1hbmQuY3BwCTI0IE1heSAyMDA1IDA3OjIxOjQ3IC0wMDAwCTEuMQorKysg
a2h0bWwvZWRpdGluZy9icmVha19ibG9ja3F1b3RlX2NvbW1hbmQuY3BwCTIyIEp1biAyMDA1IDIz
OjIzOjE0IC0wMDAwCkBAIC0yOCw3ICsyOCw3IEBACiAjaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIK
ICNpbmNsdWRlICJ2aXNpYmxlX3Bvc2l0aW9uLmgiCiAKLSNpbmNsdWRlICJtaXNjL2h0bWx0YWdz
LmgiCisjaW5jbHVkZSAiaHRtbG5hbWVzLmgiCiAjaW5jbHVkZSAieG1sL2RvbV9lbGVtZW50aW1w
bC5oIgogI2luY2x1ZGUgInhtbC9kb21fdGV4dGltcGwuaCIKIApAQCAtNDMsNiArNDMsNyBAQCB1
c2luZyBET006OkVsZW1lbnRJbXBsOwogdXNpbmcgRE9NOjpOb2RlSW1wbDsKIHVzaW5nIERPTTo6
UG9zaXRpb247CiB1c2luZyBET006OlRleHRJbXBsOwordXNpbmcgRE9NOjpIVE1MTmFtZXM7CiAK
IG5hbWVzcGFjZSBraHRtbCB7CiAKQEAgLTE0Niw3ICsxNDcsNyBAQCB2b2lkIEJyZWFrQmxvY2tx
dW90ZUNvbW1hbmQ6OmRvQXBwbHkoKQogICAgICAgICBib29sIHN0YXJ0SXNCUiA9IGZhbHNlOwog
ICAgICAgICBpZiAoc3RhcnROb2RlICE9IHRvcEJsb2NrcXVvdGUpIHsKICAgICAgICAgICAgIE5v
ZGVJbXBsICpuID0gc3RhcnROb2RlOwotICAgICAgICAgICAgc3RhcnRJc0JSID0gbi0+aWQoKSA9
PSBJRF9CUjsKKyAgICAgICAgICAgIHN0YXJ0SXNCUiA9IG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjpicigpKTsKICAgICAgICAgICAgIGlmIChzdGFydElzQlIpCiAgICAgICAgICAgICAgICAgbiA9
IG4tPm5leHRTaWJsaW5nKCk7CiAgICAgICAgICAgICB3aGlsZSAobikgewpJbmRleDoga2h0bWwv
ZWRpdGluZy9jb21wb3NpdGVfZWRpdF9jb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL2NvbXBvc2l0ZV9lZGl0X2NvbW1hbmQuY3Bw
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjMKZGlmZiAtdSAtcCAtcjEuMyBraHRtbC9lZGl0aW5n
L2NvbXBvc2l0ZV9lZGl0X2NvbW1hbmQuY3BwCi0tLSBraHRtbC9lZGl0aW5nL2NvbXBvc2l0ZV9l
ZGl0X2NvbW1hbmQuY3BwCTI0IE1heSAyMDA1IDA3OjIxOjQ3IC0wMDAwCTEuMworKysga2h0bWwv
ZWRpdGluZy9jb21wb3NpdGVfZWRpdF9jb21tYW5kLmNwcAkyMiBKdW4gMjAwNSAyMzoyMzoxNCAt
MDAwMApAQCAtNDcsNyArNDcsNyBAQAogI2luY2x1ZGUgIndyYXBfY29udGVudHNfaW5fZHVtbXlf
c3Bhbl9jb21tYW5kLmgiCiAKICNpbmNsdWRlICJtaXNjL2h0bWxhdHRycy5oIgotI2luY2x1ZGUg
Im1pc2MvaHRtbHRhZ3MuaCIKKyNpbmNsdWRlICJodG1sbmFtZXMuaCIKICNpbmNsdWRlICJyZW5k
ZXJpbmcvcmVuZGVyX3RleHQuaCIKICNpbmNsdWRlICJ4bWwvZG9tMl9yYW5nZWltcGwuaCIKICNp
bmNsdWRlICJ4bWwvZG9tX3RleHRpbXBsLmgiCkBAIC02Nyw2ICs2Nyw3IEBAIHVzaW5nIERPTTo6
Tm9kZUltcGw7CiB1c2luZyBET006OlBvc2l0aW9uOwogdXNpbmcgRE9NOjpSYW5nZUltcGw7CiB1
c2luZyBET006OlRleHRJbXBsOwordXNpbmcgRE9NOjpIVE1MTmFtZXM7CiAKIG5hbWVzcGFjZSBr
aHRtbCB7CiAKQEAgLTEyNywxNCArMTI4LDE0IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6
Omluc2VydFBhcmFncmEKIAogdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6aW5zZXJ0Tm9kZUJl
Zm9yZShOb2RlSW1wbCAqaW5zZXJ0Q2hpbGQsIE5vZGVJbXBsICpyZWZDaGlsZCkKIHsKLSAgICBB
U1NFUlQocmVmQ2hpbGQtPmlkKCkgIT0gSURfQk9EWSk7CisgICAgQVNTRVJUKCFyZWZDaGlsZC0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJvZHkoKSkpOwogICAgIEVkaXRDb21tYW5kUHRyIGNtZChu
ZXcgSW5zZXJ0Tm9kZUJlZm9yZUNvbW1hbmQoZG9jdW1lbnQoKSwgaW5zZXJ0Q2hpbGQsIHJlZkNo
aWxkKSk7CiAgICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoY21kKTsKIH0KIAogdm9pZCBDb21w
b3NpdGVFZGl0Q29tbWFuZDo6aW5zZXJ0Tm9kZUFmdGVyKE5vZGVJbXBsICppbnNlcnRDaGlsZCwg
Tm9kZUltcGwgKnJlZkNoaWxkKQogewotICAgIEFTU0VSVChyZWZDaGlsZC0+aWQoKSAhPSBJRF9C
T0RZKTsKKyAgICBBU1NFUlQoIXJlZkNoaWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Ym9keSgp
KSk7CiAgICAgaWYgKHJlZkNoaWxkLT5wYXJlbnROb2RlKCktPmxhc3RDaGlsZCgpID09IHJlZkNo
aWxkKSB7CiAgICAgICAgIGFwcGVuZE5vZGUoaW5zZXJ0Q2hpbGQsIHJlZkNoaWxkLT5wYXJlbnRO
b2RlKCkpOwogICAgIH0KQEAgLTU0NSw3ICs1NDYsNyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21t
YW5kOjptb3ZlUGFyYWdyYXBoCiAgICAgLy8gICAgICAgYWRkaXRpb25hbCBsZXZlbCBvZiBxdW90
aW5nLgogICAgIE5vZGVJbXBsICpzdGFydEJsb2NrID0gcGFyYWdyYXBoU3RhcnQubm9kZSgpLT5l
bmNsb3NpbmdCbG9ja0Zsb3dFbGVtZW50KCk7CiAgICAgTm9kZUltcGwgKm5ld0Jsb2NrID0gMDsK
LSAgICBpZiAoc3RhcnRCbG9jay0+aWQoKSA9PSBJRF9CT0RZIHx8IChpc01haWxCbG9ja3F1b3Rl
KHN0YXJ0QmxvY2spICYmIHBhcmFncmFwaFN0YXJ0Lm5vZGUoKSAhPSBzdGFydEJsb2NrKSkKKyAg
ICBpZiAoc3RhcnRCbG9jay0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJvZHkoKSkgfHwgKGlzTWFp
bEJsb2NrcXVvdGUoc3RhcnRCbG9jaykgJiYgcGFyYWdyYXBoU3RhcnQubm9kZSgpICE9IHN0YXJ0
QmxvY2spKQogICAgICAgICBuZXdCbG9jayA9IGNyZWF0ZURlZmF1bHRQYXJhZ3JhcGhFbGVtZW50
KGRvY3VtZW50KCkpOwogICAgIGVsc2UKICAgICAgICAgbmV3QmxvY2sgPSBzdGFydEJsb2NrLT5j
bG9uZU5vZGUoZmFsc2UpOwpAQCAtNTU1LDEwICs1NTYsMTAgQEAgdm9pZCBDb21wb3NpdGVFZGl0
Q29tbWFuZDo6bW92ZVBhcmFncmFwaAogICAgICAgICBtb3ZlTm9kZSA9IG1vdmVOb2RlLT50cmF2
ZXJzZU5leHROb2RlKCk7CiAgICAgTm9kZUltcGwgKmVuZE5vZGUgPSBwYXJhZ3JhcGhFbmQubm9k
ZSgpOwogCi0gICAgaWYgKHBhcmFncmFwaFN0YXJ0Lm5vZGUoKS0+aWQoKSA9PSBJRF9CT0RZKSB7
CisgICAgaWYgKHBhcmFncmFwaFN0YXJ0Lm5vZGUoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJv
ZHkoKSkpIHsKICAgICAgICAgaW5zZXJ0Tm9kZUF0KG5ld0Jsb2NrLCBwYXJhZ3JhcGhTdGFydC5u
b2RlKCksIDApOwogICAgIH0KLSAgICBlbHNlIGlmIChwYXJhZ3JhcGhTdGFydC5ub2RlKCktPmlk
KCkgPT0gSURfQlIpIHsKKyAgICBlbHNlIGlmIChwYXJhZ3JhcGhTdGFydC5ub2RlKCktPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjpicigpKSkgewogICAgICAgICBpbnNlcnROb2RlQWZ0ZXIobmV3Qmxv
Y2ssIHBhcmFncmFwaFN0YXJ0Lm5vZGUoKSk7CiAgICAgfQogICAgIGVsc2UgewpJbmRleDoga2h0
bWwvZWRpdGluZy9kZWxldGVfc2VsZWN0aW9uX2NvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VkaXRpbmcvZGVsZXRlX3NlbGVjdGlvbl9jb21t
YW5kLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yCmRpZmYgLXUgLXAgLXIxLjIga2h0bWwv
ZWRpdGluZy9kZWxldGVfc2VsZWN0aW9uX2NvbW1hbmQuY3BwCi0tLSBraHRtbC9lZGl0aW5nL2Rl
bGV0ZV9zZWxlY3Rpb25fY29tbWFuZC5jcHAJMjQgTWF5IDIwMDUgMDc6MjE6NDcgLTAwMDAJMS4y
CisrKyBraHRtbC9lZGl0aW5nL2RlbGV0ZV9zZWxlY3Rpb25fY29tbWFuZC5jcHAJMjIgSnVuIDIw
MDUgMjM6MjM6MTUgLTAwMDAKQEAgLTI4LDcgKzI4LDcgQEAKICNpbmNsdWRlICJjc3MvY3NzX2Nv
bXB1dGVkc3R5bGUuaCIKICNpbmNsdWRlICJodG1sZWRpdGluZy5oIgogI2luY2x1ZGUgImtodG1s
X3BhcnQuaCIKLSNpbmNsdWRlICJtaXNjL2h0bWx0YWdzLmgiCisjaW5jbHVkZSAiaHRtbG5hbWVz
LmgiCiAjaW5jbHVkZSAicmVuZGVyaW5nL3JlbmRlcl9saW5lLmgiCiAjaW5jbHVkZSAicmVuZGVy
aW5nL3JlbmRlcl9vYmplY3QuaCIKICNpbmNsdWRlICJ2aXNpYmxlX3RleHQuaCIKQEAgLTUzLDYg
KzUzLDcgQEAgdXNpbmcgRE9NOjpOb2RlSW1wbDsKIHVzaW5nIERPTTo6UG9zaXRpb247CiB1c2lu
ZyBET006OlJhbmdlSW1wbDsKIHVzaW5nIERPTTo6VGV4dEltcGw7Cit1c2luZyBET006OkhUTUxO
YW1lczsKIAogbmFtZXNwYWNlIGtodG1sIHsKIApAQCAtNjEsOSArNjIsMTMgQEAgc3RhdGljIGJv
b2wgaXNMaXN0U3RydWN0dXJlTm9kZShjb25zdCBObwogICAgIC8vIEZJWE1FOiBJcnJpdGF0aW5n
IHRoYXQgd2UgY2FuIGdldCBhd2F5IHdpdGgganVzdCBnb2luZyBhdCB0aGUgcmVuZGVyIHRyZWUg
Zm9yIGlzVGFibGVTdHJ1Y3R1cmVOb2RlLAogICAgIC8vIGJ1dCBoZXJlIHdlIGFsc28gaGF2ZSB0
byBwZWVrIGF0IHRoZSB0eXBlIG9mIERPTSBub2RlPwogICAgIFJlbmRlck9iamVjdCAqciA9IG5v
ZGUtPnJlbmRlcmVyKCk7Ci0gICAgTm9kZUltcGw6OklkIG5vZGVJRCA9IG5vZGUtPmlkKCk7CiAg
ICAgcmV0dXJuIChyICYmIHItPmlzTGlzdEl0ZW0oKSkKLSAgICAgICAgfHwgKG5vZGVJRCA9PSBJ
RF9PTCB8fCBub2RlSUQgPT0gSURfVUwgfHwgbm9kZUlEID09IElEX0REIHx8IG5vZGVJRCA9PSBJ
RF9EVCB8fCBub2RlSUQgPT0gSURfRElSIHx8IG5vZGVJRCA9PSBJRF9NRU5VKTsKKyAgICAgICAg
fHwgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9sKCkpCisgICAgICAgIHx8IG5vZGUtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjp1bCgpKQorICAgICAgICB8fCBub2RlLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6ZGQoKSkKKyAgICAgICAgfHwgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmR0
KCkpCisgICAgICAgIHx8IG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpkaXIoKSkKKyAgICAg
ICAgfHwgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om1lbnUoKSk7CiB9CiAKIHN0YXRpYyBp
bnQgbWF4RGVlcE9mZnNldChOb2RlSW1wbCAqbikKQEAgLTI3Nyw4ICsyODIsOCBAQCB2b2lkIERl
bGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OnNhdmVUeXBpbmdTCiBib29sIERlbGV0ZVNlbGVjdGlvbkNv
bW1hbmQ6OmhhbmRsZVNwZWNpYWxDYXNlQlJEZWxldGUoKQogewogICAgIC8vIENoZWNrIGZvciBz
cGVjaWFsLWNhc2Ugd2hlcmUgdGhlIHNlbGVjdGlvbiBjb250YWlucyBvbmx5IGEgQlIgb24gYSBs
aW5lIGJ5IGl0c2VsZiBhZnRlciBhbm90aGVyIEJSLgotICAgIGJvb2wgdXBzdHJlYW1TdGFydElz
QlIgPSBtX3N0YXJ0Tm9kZS0+aWQoKSA9PSBJRF9CUjsKLSAgICBib29sIGRvd25zdHJlYW1TdGFy
dElzQlIgPSBtX2Rvd25zdHJlYW1TdGFydC5ub2RlKCktPmlkKCkgPT0gSURfQlI7CisgICAgYm9v
bCB1cHN0cmVhbVN0YXJ0SXNCUiA9IG1fc3RhcnROb2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
YnIoKSk7CisgICAgYm9vbCBkb3duc3RyZWFtU3RhcnRJc0JSID0gbV9kb3duc3RyZWFtU3RhcnQu
bm9kZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YnIoKSk7CiAgICAgYm9vbCBpc0JST25MaW5l
QnlJdHNlbGYgPSB1cHN0cmVhbVN0YXJ0SXNCUiAmJiBkb3duc3RyZWFtU3RhcnRJc0JSICYmIG1f
ZG93bnN0cmVhbVN0YXJ0Lm5vZGUoKSA9PSBtX3Vwc3RyZWFtRW5kLm5vZGUoKTsKICAgICBpZiAo
aXNCUk9uTGluZUJ5SXRzZWxmKSB7CiAgICAgICAgIHJlbW92ZU5vZGUobV9kb3duc3RyZWFtU3Rh
cnQubm9kZSgpKTsKQEAgLTMyNiwxMSArMzMxLDExIEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29t
bWFuZDo6aGFuZGxlR2VuZXIKICAgICAvLyBlbmQgb2YgYSBibG9jayBvdGhlciB0aGFuIHRoZSBi
bG9jayBjb250YWluaW5nIHRoZSBzZWxlY3Rpb24gc3RhcnQsIHRoZW4gZG8gbm90IGRlbGV0ZSB0
aGUgCiAgICAgLy8gc3RhcnQgYmxvY2ssIG90aGVyd2lzZSBkZWxldGUgdGhlIHN0YXJ0IGJsb2Nr
LgogICAgIC8vIEEgc2ltaWxhciBjYXNlIGlzIHByb3ZpZGVkIHRvIGNvdmVyIHNlbGVjdGlvbnMg
c3RhcnRpbmcgaW4gQlIgZWxlbWVudHMuCi0gICAgaWYgKHN0YXJ0T2Zmc2V0ID09IDEgJiYgbV9z
dGFydE5vZGUgJiYgbV9zdGFydE5vZGUtPmlkKCkgPT0gSURfQlIpIHsKKyAgICBpZiAoc3RhcnRP
ZmZzZXQgPT0gMSAmJiBtX3N0YXJ0Tm9kZSAmJiBtX3N0YXJ0Tm9kZS0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OmJyKCkpKSB7CiAgICAgICAgIHNldFN0YXJ0Tm9kZShtX3N0YXJ0Tm9kZS0+dHJhdmVy
c2VOZXh0Tm9kZSgpKTsKICAgICAgICAgc3RhcnRPZmZzZXQgPSAwOwogICAgIH0KLSAgICBpZiAo
bV9zdGFydEJsb2NrICE9IG1fZW5kQmxvY2sgJiYgc3RhcnRPZmZzZXQgPT0gMCAmJiBtX3N0YXJ0
Tm9kZSAmJiBtX3N0YXJ0Tm9kZS0+aWQoKSA9PSBJRF9CUiAmJiBlbmRBdEVuZE9mQmxvY2spIHsK
KyAgICBpZiAobV9zdGFydEJsb2NrICE9IG1fZW5kQmxvY2sgJiYgc3RhcnRPZmZzZXQgPT0gMCAm
JiBtX3N0YXJ0Tm9kZSAmJiBtX3N0YXJ0Tm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJyKCkp
ICYmIGVuZEF0RW5kT2ZCbG9jaykgewogICAgICAgICAvLyBEb24ndCBkZWxldGUgdGhlIEJSIGVs
ZW1lbnQKICAgICAgICAgc2V0U3RhcnROb2RlKG1fc3RhcnROb2RlLT50cmF2ZXJzZU5leHROb2Rl
KCkpOwogICAgIH0KQEAgLTU1Miw3ICs1NTcsNyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1h
bmQ6Om1vdmVOb2Rlc0FmCiAgICAgICAgIE5vZGVJbXBsICptb3ZlTm9kZSA9IG5vZGU7CiAgICAg
ICAgIG5vZGUgPSBub2RlLT5uZXh0U2libGluZygpOwogICAgICAgICByZW1vdmVOb2RlKG1vdmVO
b2RlKTsKLSAgICAgICAgaWYgKG1vdmVOb2RlLT5pZCgpID09IElEX0JSICYmICFtb3ZlTm9kZS0+
cmVuZGVyZXIoKSkgeworICAgICAgICBpZiAobW92ZU5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjpicigpKSAmJiAhbW92ZU5vZGUtPnJlbmRlcmVyKCkpIHsKICAgICAgICAgICAgIC8vIEp1c3Qg
cmVtb3ZlIHRoaXMgbm9kZSwgYW5kIGRvbid0IHB1dCBpdCBiYWNrLgogICAgICAgICAgICAgLy8g
SWYgdGhlIEJSIHdhcyBub3QgcmVuZGVyZWQgKHNpbmNlIGl0IHdhcyBhdCB0aGUgZW5kIG9mIGEg
YmxvY2ssIGZvciBpbnN0YW5jZSksIAogICAgICAgICAgICAgLy8gcHV0dGluZyBpdCBiYWNrIGlu
IHRoZSBkb2N1bWVudCBtaWdodCBtYWtlIGl0IGFwcGVhciwgYW5kIHRoYXQgaXMgbm90IGRlc2ly
YWJsZS4KQEAgLTU2Myw3ICs1NjgsNyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6Om1v
dmVOb2Rlc0FmCiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGluc2VydE5vZGVBZnRlcihtb3Zl
Tm9kZSwgcmVmTm9kZSk7CiAgICAgICAgIHJlZk5vZGUgPSBtb3ZlTm9kZTsKLSAgICAgICAgaWYg
KG1vdmVOb2RlLT5pZCgpID09IElEX0JSKQorICAgICAgICBpZiAobW92ZU5vZGUtPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjpicigpKSkKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KIApJbmRleDog
a2h0bWwvZWRpdGluZy9odG1sZWRpdGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L1dlYkNvcmUva2h0bWwvZWRpdGluZy9odG1sZWRpdGluZy5jcHAsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuMjQ3CmRpZmYgLXUgLXAgLXIxLjI0NyBraHRtbC9lZGl0aW5nL2h0bWxlZGl0aW5n
LmNwcAotLS0ga2h0bWwvZWRpdGluZy9odG1sZWRpdGluZy5jcHAJMjQgTWF5IDIwMDUgMDc6MjE6
NDcgLTAwMDAJMS4yNDcKKysrIGtodG1sL2VkaXRpbmcvaHRtbGVkaXRpbmcuY3BwCTIyIEp1biAy
MDA1IDIzOjIzOjE1IC0wMDAwCkBAIC00Miw3ICs0Miw3IEBACiAjaW5jbHVkZSAiaHRtbF9pbWFn
ZWltcGwuaCIKICNpbmNsdWRlICJodG1sX2ludGVyY2hhbmdlLmgiCiAjaW5jbHVkZSAiaHRtbGF0
dHJzLmgiCi0jaW5jbHVkZSAiaHRtbHRhZ3MuaCIKKyNpbmNsdWRlICJodG1sbmFtZXMuaCIKICNp
bmNsdWRlICJraHRtbF9wYXJ0LmgiCiAjaW5jbHVkZSAia2h0bWxfcGFydC5oIgogI2luY2x1ZGUg
ImtodG1sdmlldy5oIgpAQCAtODEsNiArODEsNyBAQCB1c2luZyBET006OlBvc2l0aW9uOwogdXNp
bmcgRE9NOjpSYW5nZUltcGw7CiB1c2luZyBET006OlRleHRJbXBsOwogdXNpbmcgRE9NOjpUcmVl
V2Fsa2VySW1wbDsKK3VzaW5nIERPTTo6SFRNTE5hbWVzOwogCiAjaWYgQVBQTEVfQ0hBTkdFUwog
I2luY2x1ZGUgIktXUUFzc2VydGlvbnMuaCIKQEAgLTEzMSwxMCArMTMyLDEwIEBAIGJvb2wgaXNT
cGVjaWFsRWxlbWVudChOb2RlSW1wbCAqbikKICAgICBpZiAoIW4tPmlzSFRNTEVsZW1lbnQoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKG4tPmlkKCkgPT0gSURfQSAmJiBuLT5p
c0xpbmsoKSkKKyAgICBpZiAobi0+aXNMaW5rKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0g
ICAgaWYgKG4tPmlkKCkgPT0gSURfVUwgfHwgbi0+aWQoKSA9PSBJRF9PTCB8fCBuLT5pZCgpID09
IElEX0RMKQorICAgIGlmIChuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dWwoKSkgfHwgbi0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6Om9sKCkpIHx8IG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpkbCgp
KSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBSZW5kZXJPYmplY3QgKnJlbmRlcmVyID0g
bi0+cmVuZGVyZXIoKTsKQEAgLTMwMyw3ICszMDQsNyBAQCBOb2RlSW1wbCAqbmVhcmVzdE1haWxC
bG9ja3F1b3RlKGNvbnN0IE5vCiAKIGJvb2wgaXNNYWlsQmxvY2txdW90ZShjb25zdCBOb2RlSW1w
bCAqbm9kZSkKIHsKLSAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPnJlbmRlcmVyKCkgfHwgIW5vZGUt
PmlzRWxlbWVudE5vZGUoKSAmJiBub2RlLT5pZCgpICE9IElEX0JMT0NLUVVPVEUpCisgICAgaWYg
KCFub2RlIHx8ICFub2RlLT5yZW5kZXJlcigpIHx8ICFub2RlLT5pc0VsZW1lbnROb2RlKCkgJiYg
IW5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpibG9ja3F1b3RlKCkpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIAogICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBFbGVtZW50
SW1wbCAqPihub2RlKS0+Z2V0QXR0cmlidXRlKCJ0eXBlIikgPT0gImNpdGUiOwpJbmRleDoga2h0
bWwvZWRpdGluZy9pbnNlcnRfbGluZV9icmVha19jb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL2luc2VydF9saW5lX2JyZWFrX2Nv
bW1hbmQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtdSAtcCAtcjEuMSBraHRt
bC9lZGl0aW5nL2luc2VydF9saW5lX2JyZWFrX2NvbW1hbmQuY3BwCi0tLSBraHRtbC9lZGl0aW5n
L2luc2VydF9saW5lX2JyZWFrX2NvbW1hbmQuY3BwCTI0IE1heSAyMDA1IDA3OjIxOjQ3IC0wMDAw
CTEuMQorKysga2h0bWwvZWRpdGluZy9pbnNlcnRfbGluZV9icmVha19jb21tYW5kLmNwcAkyMiBK
dW4gMjAwNSAyMzoyMzoxNiAtMDAwMApAQCAtMjksNyArMjksNyBAQAogI2luY2x1ZGUgInZpc2li
bGVfcG9zaXRpb24uaCIKICNpbmNsdWRlICJ2aXNpYmxlX3VuaXRzLmgiCiAKLSNpbmNsdWRlICJt
aXNjL2h0bWx0YWdzLmgiCisjaW5jbHVkZSAiaHRtbG5hbWVzLmgiCiAjaW5jbHVkZSAieG1sL2Rv
bV9kb2NpbXBsLmgiCiAjaW5jbHVkZSAieG1sL2RvbV9lbGVtZW50aW1wbC5oIgogI2luY2x1ZGUg
InhtbC9kb20yX3JhbmdlaW1wbC5oIgpAQCAtNTAsNiArNTAsNyBAQCB1c2luZyBET006Ok5vZGVJ
bXBsOwogdXNpbmcgRE9NOjpQb3NpdGlvbjsKIHVzaW5nIERPTTo6VGV4dEltcGw7CiB1c2luZyBE
T006OkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uSW1wbDsKK3VzaW5nIERPTTo6SFRNTE5hbWVz
OwogCiBuYW1lc3BhY2Uga2h0bWwgewogCkBAIC0xMTEsMTMgKzExMiwxMyBAQCB2b2lkIEluc2Vy
dExpbmVCcmVha0NvbW1hbmQ6OmRvQXBwbHkoKQogICAgICAgICAvLyBUaGlzIG1ha2VzIHRoZSAi
cmVhbCIgQlIgd2Ugd2FudCB0byBpbnNlcnQgYXBwZWFyIGluIHRoZSByZW5kZXJpbmcgd2l0aG91
dCBhbnkgCiAgICAgICAgIC8vIHNpZ25pZmljYW50IHNpZGUgZWZmZWN0cyAoYW5kIG5vIHJlYWwg
d29ycmllcyBlaXRoZXIgc2luY2UgeW91IGNhbid0IGFycm93IHBhc3QgCiAgICAgICAgIC8vIHRo
aXMgZXh0cmEgb25lLgotICAgICAgICBpZiAocG9zLm5vZGUoKS0+aWQoKSA9PSBJRF9CUiAmJiBw
b3Mub2Zmc2V0KCkgPT0gMCkgeworICAgICAgICBpZiAocG9zLm5vZGUoKS0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OmJyKCkpICYmIHBvcy5vZmZzZXQoKSA9PSAwKSB7CiAgICAgICAgICAgICAvLyBB
bHJlYWR5IHBsYWNlZCBpbiBhIHRyYWlsaW5nIEJSLiBJbnNlcnQgInJlYWwiIEJSIGJlZm9yZSBp
dCBhbmQgbGVhdmUgdGhlIHNlbGVjdGlvbiBhbG9uZS4KICAgICAgICAgICAgIGluc2VydE5vZGVC
ZWZvcmUobm9kZVRvSW5zZXJ0LCBwb3Mubm9kZSgpKTsKICAgICAgICAgfQogICAgICAgICBlbHNl
IHsKICAgICAgICAgICAgIE5vZGVJbXBsICpuZXh0ID0gcG9zLm5vZGUoKS0+dHJhdmVyc2VOZXh0
Tm9kZSgpOwotICAgICAgICAgICAgYm9vbCBoYXNUcmFpbGluZ0JSID0gbmV4dCAmJiBuZXh0LT5p
ZCgpID09IElEX0JSICYmIHBvcy5ub2RlKCktPmVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQoKSA9
PSBuZXh0LT5lbmNsb3NpbmdCbG9ja0Zsb3dFbGVtZW50KCk7CisgICAgICAgICAgICBib29sIGhh
c1RyYWlsaW5nQlIgPSBuZXh0ICYmIG5leHQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpicigpKSAm
JiBwb3Mubm9kZSgpLT5lbmNsb3NpbmdCbG9ja0Zsb3dFbGVtZW50KCkgPT0gbmV4dC0+ZW5jbG9z
aW5nQmxvY2tGbG93RWxlbWVudCgpOwogICAgICAgICAgICAgaW5zZXJ0Tm9kZUFmdGVyUG9zaXRp
b24obm9kZVRvSW5zZXJ0LCBwb3MpOwogICAgICAgICAgICAgaWYgKGhhc1RyYWlsaW5nQlIpIHsK
ICAgICAgICAgICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oU2VsZWN0aW9uKFBvc2l0aW9uKG5l
eHQsIDApLCBET1dOU1RSRUFNKSk7CkluZGV4OiBraHRtbC9lZGl0aW5nL2luc2VydF9wYXJhZ3Jh
cGhfc2VwYXJhdG9yX2NvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9X
ZWJDb3JlL2todG1sL2VkaXRpbmcvaW5zZXJ0X3BhcmFncmFwaF9zZXBhcmF0b3JfY29tbWFuZC5j
cHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC11IC1wIC1yMS4xIGtodG1sL2VkaXRp
bmcvaW5zZXJ0X3BhcmFncmFwaF9zZXBhcmF0b3JfY29tbWFuZC5jcHAKLS0tIGtodG1sL2VkaXRp
bmcvaW5zZXJ0X3BhcmFncmFwaF9zZXBhcmF0b3JfY29tbWFuZC5jcHAJMjQgTWF5IDIwMDUgMDc6
MjE6NDcgLTAwMDAJMS4xCisrKyBraHRtbC9lZGl0aW5nL2luc2VydF9wYXJhZ3JhcGhfc2VwYXJh
dG9yX2NvbW1hbmQuY3BwCTIyIEp1biAyMDA1IDIzOjIzOjE2IC0wMDAwCkBAIC0zMSw3ICszMSw3
IEBACiAKICNpbmNsdWRlICJjc3MvY3NzX2NvbXB1dGVkc3R5bGUuaCIKICNpbmNsdWRlICJjc3Mv
Y3NzX3ZhbHVlaW1wbC5oIgotI2luY2x1ZGUgIm1pc2MvaHRtbHRhZ3MuaCIKKyNpbmNsdWRlICJo
dG1sbmFtZXMuaCIKICNpbmNsdWRlICJ4bWwvZG9tX2RvY2ltcGwuaCIKICNpbmNsdWRlICJ4bWwv
ZG9tX2VsZW1lbnRpbXBsLmgiCiAjaW5jbHVkZSAieG1sL2RvbV90ZXh0aW1wbC5oIgpAQCAtNTAs
NiArNTAsNyBAQCB1c2luZyBET006OkVsZW1lbnRJbXBsOwogdXNpbmcgRE9NOjpOb2RlSW1wbDsK
IHVzaW5nIERPTTo6UG9zaXRpb247CiB1c2luZyBET006OlRleHRJbXBsOwordXNpbmcgRE9NOjpI
VE1MTmFtZXM7CiAKIG5hbWVzcGFjZSBraHRtbCB7CiAKQEAgLTIxMyw3ICsyMTQsNyBAQCB2b2lk
IEluc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQ6OmRvCiAgICAgLy8gdGhlbiB0aGlzIDxi
cj4gd2lsbCBjb2xsYXBzZSBhd2F5IHdoZW4gd2UgYWRkIGEgYmxvY2sgYWZ0ZXIgaXQuIEFkZCBh
biBleHRyYSA8YnI+LgogICAgIGlmICghZG9jdW1lbnQoKS0+aW5TdHJpY3RNb2RlKCkpIHsKICAg
ICAgICAgUG9zaXRpb24gdXBzdHJlYW1Qb3MgPSBwb3MudXBzdHJlYW0oKTsKLSAgICAgICAgaWYg
KHVwc3RyZWFtUG9zLm5vZGUoKS0+aWQoKSA9PSBJRF9CUikKKyAgICAgICAgaWYgKHVwc3RyZWFt
UG9zLm5vZGUoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJyKCkpKQogICAgICAgICAgICAgaW5z
ZXJ0Tm9kZUFmdGVyKGNyZWF0ZUJyZWFrRWxlbWVudChkb2N1bWVudCgpKSwgdXBzdHJlYW1Qb3Mu
bm9kZSgpKTsKICAgICB9CiAgICAgCkluZGV4OiBraHRtbC9lZGl0aW5nL21hcmt1cC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWRpdGluZy9tYXJrdXAu
Y3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIwCmRpZmYgLXUgLXAgLXIxLjIwIGtodG1sL2Vk
aXRpbmcvbWFya3VwLmNwcAotLS0ga2h0bWwvZWRpdGluZy9tYXJrdXAuY3BwCTEwIE1heSAyMDA1
IDA0OjAzOjM0IC0wMDAwCTEuMjAKKysrIGtodG1sL2VkaXRpbmcvbWFya3VwLmNwcAkyMiBKdW4g
MjAwNSAyMzoyMzoxNiAtMDAwMApAQCAtMzYsNyArMzYsNyBAQAogI2luY2x1ZGUgInhtbC9kb20y
X3JhbmdlaW1wbC5oIgogI2luY2x1ZGUgInJlbmRlcmluZy9yZW5kZXJfdGV4dC5oIgogI2luY2x1
ZGUgIm1pc2MvaHRtbGF0dHJzLmgiCi0jaW5jbHVkZSAibWlzYy9odG1sdGFncy5oIgorI2luY2x1
ZGUgImh0bWxuYW1lcy5oIgogI2luY2x1ZGUgImh0bWwvZHRkLmgiCiAKIHVzaW5nIERPTTo6QXR0
cmlidXRlSW1wbDsKQEAgLTQ4LDggKzQ4LDggQEAgdXNpbmcgRE9NOjpEb2N1bWVudEltcGw7CiB1
c2luZyBET006OkRPTVN0cmluZzsKIHVzaW5nIERPTTo6RWxlbWVudEltcGw7CiB1c2luZyBET006
OkZPUkJJRERFTjsKLXVzaW5nIERPTTo6ZW5kVGFnUmVxdWlyZW1lbnQ7CiB1c2luZyBET006OkhU
TUxFbGVtZW50SW1wbDsKK3VzaW5nIERPTTo6SFRNTE5hbWVzOwogdXNpbmcgRE9NOjpOYW1lZEF0
dHJNYXBJbXBsOwogdXNpbmcgRE9NOjpOb2RlOwogdXNpbmcgRE9NOjpOb2RlSW1wbDsKQEAgLTE3
NywxMyArMTc3LDExIEBAIHN0YXRpYyBRU3RyaW5nIHN0YXJ0TWFya3VwKGNvbnN0IE5vZGVJbXAK
ICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICAgY2FzZSBOb2RlOjpURVhUX05PREU6IHsKICAg
ICAgICAgICAgIGlmIChub2RlLT5wYXJlbnROb2RlKCkpIHsKLSAgICAgICAgICAgICAgICBzd2l0
Y2ggKG5vZGUtPnBhcmVudE5vZGUoKS0+aWQoKSkgewotICAgICAgICAgICAgICAgICAgICBjYXNl
IElEX1BSRToKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9TQ1JJUFQ6Ci0gICAgICAgICAg
ICAgICAgICAgIGNhc2UgSURfU1RZTEU6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfVEVY
VEFSRUE6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RyaW5nVmFsdWVGb3JSYW5n
ZShub2RlLCByYW5nZSk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChu
b2RlLT5wYXJlbnROb2RlKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpwcmUoKSkgfHwKKyAgICAg
ICAgICAgICAgICAgICAgbm9kZS0+cGFyZW50Tm9kZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
c2NyaXB0KCkpIHx8CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnBhcmVudE5vZGUoKS0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OnN0eWxlKCkpIHx8CisgICAgICAgICAgICAgICAgICAgIG5vZGUt
PnBhcmVudE5vZGUoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRleHRhcmVhKCkpKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gc3RyaW5nVmFsdWVGb3JSYW5nZShub2RlLCByYW5nZSk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBRU3RyaW5nIG1hcmt1cCA9IGFubm90YXRlID8gZXNj
YXBlSFRNTChyZW5kZXJlZFRleHQobm9kZSwgcmFuZ2UpKSA6IGVzY2FwZUhUTUwoc3RyaW5nVmFs
dWVGb3JSYW5nZShub2RlLCByYW5nZSkpOyAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKGRl
ZmF1bHRTdHlsZSkgewpAQCAtMjQ4LDkgKzI0NiwxMyBAQCBzdGF0aWMgUVN0cmluZyBzdGFydE1h
cmt1cChjb25zdCBOb2RlSW1wCiAKIHN0YXRpYyBRU3RyaW5nIGVuZE1hcmt1cChjb25zdCBOb2Rl
SW1wbCAqbm9kZSkKIHsKLSAgICBpZiAoKCFub2RlLT5pc0hUTUxFbGVtZW50KCkgfHwgZW5kVGFn
UmVxdWlyZW1lbnQobm9kZS0+aWQoKSkgIT0gRk9SQklEREVOKSAmJiBub2RlLT5ub2RlVHlwZSgp
ICE9IE5vZGU6OlRFWFRfTk9ERSAmJiBub2RlLT5ub2RlVHlwZSgpICE9IE5vZGU6OkRPQ1VNRU5U
X05PREUpIHsKLSAgICAgICAgcmV0dXJuICI8LyIgKyBub2RlLT5ub2RlTmFtZSgpLnN0cmluZygp
ICsgIj4iOworICAgIGJvb2wgaGFzRW5kVGFnID0gdHJ1ZTsKKyAgICBpZiAobm9kZS0+aXNIVE1M
RWxlbWVudCgpKSB7CisgICAgICAgIGNvbnN0IEhUTUxFbGVtZW50SW1wbCogaHRtbEVsdCA9IHN0
YXRpY19jYXN0PGNvbnN0IEhUTUxFbGVtZW50SW1wbCo+KG5vZGUpOworICAgICAgICBoYXNFbmRU
YWcgPSAoaHRtbEVsdC0+ZW5kVGFnUmVxdWlyZW1lbnQoKSAhPSBGT1JCSURERU4pOwogICAgIH0K
KyAgICBpZiAoaGFzRW5kVGFnKQorICAgICAgICByZXR1cm4gIjwvIiArIG5vZGUtPm5vZGVOYW1l
KCkuc3RyaW5nKCkgKyAiPiI7CiAgICAgcmV0dXJuICIiOwogfQogCkBAIC0yNjUsOCArMjY3LDE0
IEBAIHN0YXRpYyBRU3RyaW5nIG1hcmt1cChjb25zdCBOb2RlSW1wbCAqc3QKICAgICAgICAgICAg
ICAgICBub2Rlcy0+YXBwZW5kKGN1cnJlbnQpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
bWUgKz0gc3RhcnRNYXJrdXAoY3VycmVudCwgMCwgRG9Ob3RBbm5vdGF0ZUZvckludGVyY2hhbmdl
LCAwKTsKLSAgICAgICAgfSAgICAgICAgCi0gICAgICAgIGlmICghY3VycmVudC0+aXNIVE1MRWxl
bWVudCgpIHx8IGVuZFRhZ1JlcXVpcmVtZW50KGN1cnJlbnQtPmlkKCkpICE9IEZPUkJJRERFTikg
eworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIGNvbnRhaW5lciA9IHRydWU7Cisg
ICAgICAgIGlmIChjdXJyZW50LT5pc0hUTUxFbGVtZW50KCkpIHsKKyAgICAgICAgICAgIGNvbnN0
IEhUTUxFbGVtZW50SW1wbCogaCA9IHN0YXRpY19jYXN0PGNvbnN0IEhUTUxFbGVtZW50SW1wbCo+
KGN1cnJlbnQpOworICAgICAgICAgICAgY29udGFpbmVyID0gaC0+ZW5kVGFnUmVxdWlyZW1lbnQo
KSAhPSBGT1JCSURERU47CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvbnRhaW5lcikgewogICAg
ICAgICAgICAgLy8gcHJpbnQgY2hpbGRyZW4KICAgICAgICAgICAgIGlmIChOb2RlSW1wbCAqbiA9
IGN1cnJlbnQtPmZpcnN0Q2hpbGQoKSkgewogICAgICAgICAgICAgICAgIG1lICs9IG1hcmt1cChu
LCBmYWxzZSwgdHJ1ZSwgbm9kZXMpOwpAQCAtNDE0LDkgKzQyMiw5IEBAIFFTdHJpbmcgY3JlYXRl
TWFya3VwKGNvbnN0IFJhbmdlSW1wbCAqcmEKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJv
b2wgYnJlYWtBdEVuZCA9IGZhbHNlOwogICAgICAgICAgICAgaWYgKGNvbW1vbkFuY2VzdG9yQmxv
Y2sgPT0gYW5jZXN0b3IpIHsKLSAgICAgICAgICAgICAgICBOb2RlSW1wbDo6SWQgaWQgPSBhbmNl
c3Rvci0+aWQoKTsKICAgICAgICAgICAgICAgICAvLyBJbmNsdWRlIGFuY2VzdG9ycyB0aGF0IGFy
ZSByZXF1aXJlZCB0byByZXRhaW4gdGhlIGFwcGVhcmFuY2Ugb2YgdGhlIGNvcGllZCBtYXJrdXAu
Ci0gICAgICAgICAgICAgICAgaWYgKGlkID09IElEX1BSRSB8fCBpZCA9PSBJRF9UQUJMRSB8fCBp
ZCA9PSBJRF9PTCB8fCBpZCA9PSBJRF9VTCkgeworICAgICAgICAgICAgICAgIGlmIChhbmNlc3Rv
ci0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnByZSgpKSB8fCBhbmNlc3Rvci0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OnRhYmxlKCkpIHx8CisgICAgICAgICAgICAgICAgICAgIGFuY2VzdG9yLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6b2woKSkgfHwgYW5jZXN0b3ItPmhhc1RhZ05hbWUoSFRNTE5hbWVz
Ojp1bCgpKSkgewogICAgICAgICAgICAgICAgICAgICBicmVha0F0RW5kID0gdHJ1ZTsKICAgICAg
ICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBicmVhazsKSW5kZXg6IGto
dG1sL2VkaXRpbmcvcmVwbGFjZV9zZWxlY3Rpb25fY29tbWFuZC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWRpdGluZy9yZXBsYWNlX3NlbGVjdGlvbl9j
b21tYW5kLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yCmRpZmYgLXUgLXAgLXIxLjIga2h0
bWwvZWRpdGluZy9yZXBsYWNlX3NlbGVjdGlvbl9jb21tYW5kLmNwcAotLS0ga2h0bWwvZWRpdGlu
Zy9yZXBsYWNlX3NlbGVjdGlvbl9jb21tYW5kLmNwcAkyMiBKdW4gMjAwNSAwMToxNTo0MyAtMDAw
MAkxLjIKKysrIGtodG1sL2VkaXRpbmcvcmVwbGFjZV9zZWxlY3Rpb25fY29tbWFuZC5jcHAJMjIg
SnVuIDIwMDUgMjM6MjM6MTcgLTAwMDAKQEAgLTI3LDcgKzI3LDcgQEAKIAogI2luY2x1ZGUgInZp
c2libGVfcG9zaXRpb24uaCIKICNpbmNsdWRlICJtaXNjL2h0bWxhdHRycy5oIgotI2luY2x1ZGUg
Im1pc2MvaHRtbHRhZ3MuaCIKKyNpbmNsdWRlICJodG1sbmFtZXMuaCIKICNpbmNsdWRlICJ4bWwv
ZG9tX2RvY2ltcGwuaCIKICNpbmNsdWRlICJodG1sX2ludGVyY2hhbmdlLmgiCiAjaW5jbHVkZSAi
eG1sL2RvbV90ZXh0aW1wbC5oIgpAQCAtNTgsNiArNTgsNyBAQCB1c2luZyBET006OkRPTVN0cmlu
ZzsKIHVzaW5nIERPTTo6SFRNTEVsZW1lbnRJbXBsOwogdXNpbmcgRE9NOjpDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbkltcGw7CiB1c2luZyBET006OlBvc2l0aW9uOwordXNpbmcgRE9NOjpIVE1M
TmFtZXM7CiAKIG5hbWVzcGFjZSBraHRtbCB7CiAKQEAgLTE2NywzMCArMTY4LDE0IEBAIHN0YXRp
YyBib29sIGlzUHJvYmFibHlCbG9jayhjb25zdCBOb2RlSW0KICAgICBpZiAoIW5vZGUpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBzd2l0Y2ggKG5vZGUtPmlkKCkpIHsKLSAgICAg
ICAgY2FzZSBJRF9CTE9DS1FVT1RFOgotICAgICAgICBjYXNlIElEX0REOgotICAgICAgICBjYXNl
IElEX0RJVjoKLSAgICAgICAgY2FzZSBJRF9ETDoKLSAgICAgICAgY2FzZSBJRF9EVDoKLSAgICAg
ICAgY2FzZSBJRF9IMToKLSAgICAgICAgY2FzZSBJRF9IMjoKLSAgICAgICAgY2FzZSBJRF9IMzoK
LSAgICAgICAgY2FzZSBJRF9INDoKLSAgICAgICAgY2FzZSBJRF9INToKLSAgICAgICAgY2FzZSBJ
RF9INjoKLSAgICAgICAgY2FzZSBJRF9IUjoKLSAgICAgICAgY2FzZSBJRF9MSToKLSAgICAgICAg
Y2FzZSBJRF9PTDoKLSAgICAgICAgY2FzZSBJRF9QOgotICAgICAgICBjYXNlIElEX1BSRToKLSAg
ICAgICAgY2FzZSBJRF9URDoKLSAgICAgICAgY2FzZSBJRF9USDoKLSAgICAgICAgY2FzZSBJRF9V
TDoKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gZmFs
c2U7CisgICAgLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24gc2VlbXMgcmVhbGx5IGJyb2tlbiB0byBt
ZS4gIEl0IGlzbid0IGV2ZW4gaW5jbHVkaW5nIGFsbCB0aGUgYmxvY2stbGV2ZWwgZWxlbWVudHMu
CisgICAgcmV0dXJuIChub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YmxvY2txdW90ZSgpKSB8
fCBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZGQoKSkgfHwgbm9kZS0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OmRpdigpKSB8fAorICAgICAgICAgICAgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OmRsKCkpIHx8IG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpkdCgpKSB8fCBub2RlLT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6aDEoKSkgfHwKKyAgICAgICAgICAgIG5vZGUtPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjpoMigpKSB8fCBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDMoKSkg
fHwgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omg0KCkpIHx8CisgICAgICAgICAgICBub2Rl
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDUoKSkgfHwgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6Omg2KCkpIHx8IG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpocigpKSB8fAorICAgICAg
ICAgICAgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmxpKCkpIHx8IG5vZGUtPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjpvbCgpKSB8fCBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6cCgpKSB8
fAorICAgICAgICAgICAgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnByZSgpKSB8fCBub2Rl
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGQoKSkgfHwgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OnRoKCkpIHx8CisgICAgICAgICAgICBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dWwo
KSkpOwogfQogCiBzdGF0aWMgYm9vbCBpc01haWxQYXN0ZUFzUXVvdGF0aW9uTm9kZShjb25zdCBO
b2RlSW1wbCAqbm9kZSkKQEAgLTIxNCwxNiArMTk5LDggQEAgc3RhdGljIGJvb2wgaXNQcm9iYWJs
eVRhYmxlU3RydWN0dXJlTm9kZQogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIAotICAgIHN3aXRjaCAobm9kZS0+aWQoKSkgewotICAgICAgICBjYXNlIElEX1RBQkxF
OgotICAgICAgICBjYXNlIElEX1RCT0RZOgotICAgICAgICBjYXNlIElEX1REOgotICAgICAgICBj
YXNlIElEX1RGT09UOgotICAgICAgICBjYXNlIElEX1RIRUFEOgotICAgICAgICBjYXNlIElEX1RS
OgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKKyAg
ICByZXR1cm4gKG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0YWJsZSgpKSB8fCBub2RlLT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6dGJvZHkoKSkgfHwgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OnRkKCkpIHx8CisgICAgICAgICAgICBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGZv
b3QoKSkgfHwgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRoZWFkKCkpIHx8IG5vZGUtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjp0cigpKSk7CiB9CiAKIHZvaWQgUmVwbGFjZW1lbnRGcmFnbWVu
dDo6cHJ1bmVFbXB0eU5vZGVzKCkKQEAgLTI1MCw3ICsyMjcsNyBAQCB2b2lkIFJlcGxhY2VtZW50
RnJhZ21lbnQ6OnBydW5lRW1wdHlOb2RlCiBib29sIFJlcGxhY2VtZW50RnJhZ21lbnQ6OmlzSW50
ZXJjaGFuZ2VOZXdsaW5lTm9kZShjb25zdCBOb2RlSW1wbCAqbm9kZSkKIHsKICAgICBzdGF0aWMg
RE9NU3RyaW5nIGludGVyY2hhbmdlTmV3bGluZUNsYXNzU3RyaW5nKEFwcGxlSW50ZXJjaGFuZ2VO
ZXdsaW5lKTsKLSAgICByZXR1cm4gbm9kZSAmJiBub2RlLT5pZCgpID09IElEX0JSICYmIHN0YXRp
Y19jYXN0PGNvbnN0IEVsZW1lbnRJbXBsICo+KG5vZGUpLT5nZXRBdHRyaWJ1dGUoQVRUUl9DTEFT
UykgPT0gaW50ZXJjaGFuZ2VOZXdsaW5lQ2xhc3NTdHJpbmc7CisgICAgcmV0dXJuIG5vZGUgJiYg
bm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJyKCkpICYmIHN0YXRpY19jYXN0PGNvbnN0IEVs
ZW1lbnRJbXBsICo+KG5vZGUpLT5nZXRBdHRyaWJ1dGUoQVRUUl9DTEFTUykgPT0gaW50ZXJjaGFu
Z2VOZXdsaW5lQ2xhc3NTdHJpbmc7CiB9CiAKIGJvb2wgUmVwbGFjZW1lbnRGcmFnbWVudDo6aXNJ
bnRlcmNoYW5nZUNvbnZlcnRlZFNwYWNlU3Bhbihjb25zdCBOb2RlSW1wbCAqbm9kZSkKQEAgLTUw
NywxOCArNDg0LDE5IEBAIHZvaWQgUmVwbGFjZW1lbnRGcmFnbWVudDo6cmVtb3ZlU3R5bGVOb2QK
ICAgICAgICAgTm9kZUltcGwgKm5leHQgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCk7CiAgICAg
ICAgIC8vIFRoaXMgbGlzdCBvZiB0YWdzIGNoYW5nZSB0aGUgYXBwZWFyYW5jZSBvZiBjb250ZW50
CiAgICAgICAgIC8vIGluIHdheXMgd2UgY2FuIGFkZCBiYWNrIG9uIGxhdGVyIHdpdGggQ1NTLCBp
ZiBuZWNlc3NhcnkuCi0gICAgICAgIGlmIChub2RlLT5pZCgpID09IElEX0IgfHwgCi0gICAgICAg
ICAgICBub2RlLT5pZCgpID09IElEX0JJRyB8fCAKLSAgICAgICAgICAgIG5vZGUtPmlkKCkgPT0g
SURfQ0VOVEVSIHx8IAotICAgICAgICAgICAgbm9kZS0+aWQoKSA9PSBJRF9GT05UIHx8IAotICAg
ICAgICAgICAgbm9kZS0+aWQoKSA9PSBJRF9JIHx8IAotICAgICAgICAgICAgbm9kZS0+aWQoKSA9
PSBJRF9TIHx8IAotICAgICAgICAgICAgbm9kZS0+aWQoKSA9PSBJRF9TTUFMTCB8fCAKLSAgICAg
ICAgICAgIG5vZGUtPmlkKCkgPT0gSURfU1RSSUtFIHx8IAotICAgICAgICAgICAgbm9kZS0+aWQo
KSA9PSBJRF9TVUIgfHwgCi0gICAgICAgICAgICBub2RlLT5pZCgpID09IElEX1NVUCB8fCAKLSAg
ICAgICAgICAgIG5vZGUtPmlkKCkgPT0gSURfVFQgfHwgCi0gICAgICAgICAgICBub2RlLT5pZCgp
ID09IElEX1UgfHwgCisgICAgICAgIC8vICBGSVhNRTogVGhpcyBsaXN0IGlzIGluY29tcGxldGUK
KyAgICAgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpiKCkpIHx8IAorICAgICAg
ICAgICAgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJpZygpKSB8fCAKKyAgICAgICAgICAg
IG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpjZW50ZXIoKSkgfHwgCisgICAgICAgICAgICBu
b2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Zm9udCgpKSB8fCAKKyAgICAgICAgICAgIG5vZGUt
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppKCkpIHx8IAorICAgICAgICAgICAgbm9kZS0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OnMoKSkgfHwgCisgICAgICAgICAgICBub2RlLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6c21hbGwoKSkgfHwgCisgICAgICAgICAgICBub2RlLT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6c3RyaWtlKCkpIHx8IAorICAgICAgICAgICAgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OnN1YigpKSB8fCAKKyAgICAgICAgICAgIG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpz
dXAoKSkgfHwgCisgICAgICAgICAgICBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dHQoKSkg
fHwgCisgICAgICAgICAgICBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dSgpKSB8fCAKICAg
ICAgICAgICAgIGlzU3R5bGVTcGFuKG5vZGUpKSB7CiAgICAgICAgICAgICByZW1vdmVOb2RlUHJl
c2VydmluZ0NoaWxkcmVuKG5vZGUpOwogICAgICAgICB9CkBAIC03NDQsNyArNzIyLDcgQEAgdm9p
ZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgaWYgKCFsaW5lUGxhY2Vo
b2xkZXIpIHsKICAgICAgICAgUG9zaXRpb24gZG93bnN0cmVhbSA9IHN0YXJ0UG9zLmRvd25zdHJl
YW0oKTsKICAgICAgICAgZG93bnN0cmVhbSA9IHBvc2l0aW9uT3V0c2lkZUNvbnRhaW5pbmdTcGVj
aWFsRWxlbWVudChkb3duc3RyZWFtKTsKLSAgICAgICAgaWYgKGRvd25zdHJlYW0ubm9kZSgpLT5p
ZCgpID09IElEX0JSICYmIGRvd25zdHJlYW0ub2Zmc2V0KCkgPT0gMCAmJiAKKyAgICAgICAgaWYg
KGRvd25zdHJlYW0ubm9kZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YnIoKSkgJiYgZG93bnN0
cmVhbS5vZmZzZXQoKSA9PSAwICYmIAogICAgICAgICAgICAgbV9mcmFnbWVudC5oYXNJbnRlcmNo
YW5nZU5ld2xpbmVBdEVuZCgpICYmCiAgICAgICAgICAgICBpc1N0YXJ0T2ZMaW5lKFZpc2libGVQ
b3NpdGlvbihkb3duc3RyZWFtLCBWUF9ERUZBVUxUX0FGRklOSVRZKSkpCiAgICAgICAgICAgICBs
aW5lUGxhY2Vob2xkZXIgPSBkb3duc3RyZWFtLm5vZGUoKTsKQEAgLTkwNiwxMiArODg0LDEyIEBA
IHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkoKQogICAgICAgICB9CiAgICAg
fSAKICAgICBlbHNlIHsKLSAgICAgICAgaWYgKG1fbGFzdE5vZGVJbnNlcnRlZCAmJiBtX2xhc3RO
b2RlSW5zZXJ0ZWQtPmlkKCkgPT0gSURfQlIgJiYgIWRvY3VtZW50KCktPmluU3RyaWN0TW9kZSgp
KSB7CisgICAgICAgIGlmIChtX2xhc3ROb2RlSW5zZXJ0ZWQgJiYgbV9sYXN0Tm9kZUluc2VydGVk
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YnIoKSkgJiYgIWRvY3VtZW50KCktPmluU3RyaWN0TW9k
ZSgpKSB7CiAgICAgICAgICAgICBkb2N1bWVudCgpLT51cGRhdGVMYXlvdXQoKTsKICAgICAgICAg
ICAgIFZpc2libGVQb3NpdGlvbiBwb3MoUG9zaXRpb24obV9sYXN0Tm9kZUluc2VydGVkLCAxKSwg
RE9XTlNUUkVBTSk7CiAgICAgICAgICAgICBpZiAoaXNFbmRPZkJsb2NrKHBvcykpIHsKICAgICAg
ICAgICAgICAgICBOb2RlSW1wbCAqbmV4dCA9IG1fbGFzdE5vZGVJbnNlcnRlZC0+dHJhdmVyc2VO
ZXh0Tm9kZSgpOwotICAgICAgICAgICAgICAgIGJvb2wgaGFzVHJhaWxpbmdCUiA9IG5leHQgJiYg
bmV4dC0+aWQoKSA9PSBJRF9CUiAmJiBtX2xhc3ROb2RlSW5zZXJ0ZWQtPmVuY2xvc2luZ0Jsb2Nr
Rmxvd0VsZW1lbnQoKSA9PSBuZXh0LT5lbmNsb3NpbmdCbG9ja0Zsb3dFbGVtZW50KCk7CisgICAg
ICAgICAgICAgICAgYm9vbCBoYXNUcmFpbGluZ0JSID0gbmV4dCAmJiBuZXh0LT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6YnIoKSkgJiYgbV9sYXN0Tm9kZUluc2VydGVkLT5lbmNsb3NpbmdCbG9ja0Zs
b3dFbGVtZW50KCkgPT0gbmV4dC0+ZW5jbG9zaW5nQmxvY2tGbG93RWxlbWVudCgpOwogICAgICAg
ICAgICAgICAgIGlmICghaGFzVHJhaWxpbmdCUikgewogICAgICAgICAgICAgICAgICAgICAvLyBJ
bnNlcnQgYW4gImV4dHJhIiBCUiBhdCB0aGUgZW5kIG9mIHRoZSBibG9jay4gCiAgICAgICAgICAg
ICAgICAgICAgIGluc2VydE5vZGVCZWZvcmUoY3JlYXRlQnJlYWtFbGVtZW50KGRvY3VtZW50KCkp
LCBtX2xhc3ROb2RlSW5zZXJ0ZWQpOwpAQCAtOTM4LDcgKzkxNiw3IEBAIHZvaWQgUmVwbGFjZVNl
bGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkoKQogICAgICAgICAgICAgICAgIGluc2VydE5vZGVBZnRl
cihub2RlLCByZWZOb2RlKTsKICAgICAgICAgICAgICAgICByZWZOb2RlID0gbm9kZTsKICAgICAg
ICAgICAgICAgICAvLyBXZSB3YW50IHRvIG1vdmUgdGhlIGZpcnN0IEJSIHdlIHNlZSwgc28gY2hl
Y2sgZm9yIHRoYXQgaGVyZS4KLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+aWQoKSA9PSBJRF9C
UikKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJyKCkp
KQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBub2RlID0gbmV4
dDsKICAgICAgICAgICAgIH0KQEAgLTEwODYsNyArMTA2NCw3IEBAIHZvaWQgUmVwbGFjZVNlbGVj
dGlvbkNvbW1hbmQ6OnVwZGF0ZU5vZGUKICAgICAKICAgICAvLyB1cGRhdGUgbV9sYXN0Tm9kZUlu
c2VydGVkCiAgICAgTm9kZUltcGwgKm9sZCA9IG1fbGFzdE5vZGVJbnNlcnRlZDsKLSAgICBtX2xh
c3ROb2RlSW5zZXJ0ZWQgPSBub2RlLT5sYXN0RGVzY2VuZGVudCgpOworICAgIG1fbGFzdE5vZGVJ
bnNlcnRlZCA9IG5vZGUtPmxhc3REZXNjZW5kYW50KCk7CiAgICAgbV9sYXN0Tm9kZUluc2VydGVk
LT5yZWYoKTsKICAgICBpZiAob2xkKQogICAgICAgICBvbGQtPmRlcmVmKCk7CkluZGV4OiBraHRt
bC9lZGl0aW5nL3NlbGVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dl
YkNvcmUva2h0bWwvZWRpdGluZy9zZWxlY3Rpb24uY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
Ljg4CmRpZmYgLXUgLXAgLXIxLjg4IGtodG1sL2VkaXRpbmcvc2VsZWN0aW9uLmNwcAotLS0ga2h0
bWwvZWRpdGluZy9zZWxlY3Rpb24uY3BwCTIxIEp1biAyMDA1IDE4OjExOjEwIC0wMDAwCTEuODgK
KysrIGtodG1sL2VkaXRpbmcvc2VsZWN0aW9uLmNwcAkyMiBKdW4gMjAwNSAyMzoyMzoxOCAtMDAw
MApAQCAtMzMsNyArMzMsNiBAQAogI2luY2x1ZGUgImRvbS9kb21fc3RyaW5nLmgiCiAjaW5jbHVk
ZSAia2h0bWxfcGFydC5oIgogI2luY2x1ZGUgImtodG1sdmlldy5oIgotI2luY2x1ZGUgIm1pc2Mv
aHRtbHRhZ3MuaCIKICNpbmNsdWRlICJyZW5kZXJpbmcvcmVuZGVyX29iamVjdC5oIgogI2luY2x1
ZGUgInJlbmRlcmluZy9yZW5kZXJfc3R5bGUuaCIKICNpbmNsdWRlICJyZW5kZXJpbmcvcmVuZGVy
X3RleHQuaCIKQEAgLTkzOCw3ICs5MzcsNyBAQCB2b2lkIFNlbGVjdGlvbjo6ZGVidWdSZW5kZXJl
cihSZW5kZXJPYmplCiB7CiAgICAgaWYgKHItPm5vZGUoKS0+aXNFbGVtZW50Tm9kZSgpKSB7CiAg
ICAgICAgIEVsZW1lbnRJbXBsICplbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxlbWVudEltcGwgKj4o
ci0+bm9kZSgpKTsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICIlcyVzXG4iLCBzZWxlY3RlZCA/
ICI9PT4gIiA6ICIgICAgIiwgZWxlbWVudC0+dGFnTmFtZSgpLnN0cmluZygpLmxhdGluMSgpKTsK
KyAgICAgICAgZnByaW50ZihzdGRlcnIsICIlcyVzXG4iLCBzZWxlY3RlZCA/ICI9PT4gIiA6ICIg
ICAgIiwgZWxlbWVudC0+bG9jYWxOYW1lKCkuc3RyaW5nKCkubGF0aW4xKCkpOwogICAgIH0KICAg
ICBlbHNlIGlmIChyLT5pc1RleHQoKSkgewogICAgICAgICBSZW5kZXJUZXh0ICp0ZXh0UmVuZGVy
ZXIgPSBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0ICo+KHIpOwpJbmRleDoga2h0bWwvZWRpdGluZy92
aXNpYmxlX3Bvc2l0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29y
ZS9raHRtbC9lZGl0aW5nL3Zpc2libGVfcG9zaXRpb24uY3BwLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjUwCmRpZmYgLXUgLXAgLXIxLjUwIGtodG1sL2VkaXRpbmcvdmlzaWJsZV9wb3NpdGlvbi5j
cHAKLS0tIGtodG1sL2VkaXRpbmcvdmlzaWJsZV9wb3NpdGlvbi5jcHAJMjEgSnVuIDIwMDUgMTg6
MTE6MTAgLTAwMDAJMS41MAorKysga2h0bWwvZWRpdGluZy92aXNpYmxlX3Bvc2l0aW9uLmNwcAky
MiBKdW4gMjAwNSAyMzoyMzoxOSAtMDAwMApAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgInZp
c2libGVfcG9zaXRpb24uaCIKICNpbmNsdWRlICJ2aXNpYmxlX3VuaXRzLmgiCiAKLSNpbmNsdWRl
ICJtaXNjL2h0bWx0YWdzLmgiCisjaW5jbHVkZSAiaHRtbG5hbWVzLmgiCiAjaW5jbHVkZSAicmVu
ZGVyaW5nL3JlbmRlcl9saW5lLmgiCiAjaW5jbHVkZSAicmVuZGVyaW5nL3JlbmRlcl9vYmplY3Qu
aCIKICNpbmNsdWRlICJyZW5kZXJpbmcvcmVuZGVyX3RleHQuaCIKQEAgLTUwLDYgKzUwLDcgQEAg
dXNpbmcgRE9NOjpQb3NpdGlvbjsKIHVzaW5nIERPTTo6UmFuZ2U7CiB1c2luZyBET006OlJhbmdl
SW1wbDsKIHVzaW5nIERPTTo6VGV4dEltcGw7Cit1c2luZyBET006OkhUTUxOYW1lczsKIAogbmFt
ZXNwYWNlIGtodG1sIHsKIApAQCAtNzQsNyArNzUsNyBAQCB2b2lkIFZpc2libGVQb3NpdGlvbjo6
aW5pdChjb25zdCBQb3NpdGlvCiAgICAgbV9hZmZpbml0eSA9IGFmZmluaXR5OwogCiAgICAgLy8g
Rm9yIDxicj4gMCwgaXQncyBpbXBvcnRhbnQgbm90IHRvIG1vdmUgcGFzdCB0aGUgPGJyPi4KLSAg
ICBpZiAocG9zLm5vZGUoKSAmJiBwb3Mubm9kZSgpLT5pZCgpID09IElEX0JSICYmIHBvcy5vZmZz
ZXQoKSA9PSAwKQorICAgIGlmIChwb3Mubm9kZSgpICYmIHBvcy5ub2RlKCktPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjpicigpKSAmJiBwb3Mub2Zmc2V0KCkgPT0gMCkKICAgICAgICAgaW5pdFVwc3Ry
ZWFtKHBvcyk7CiAgICAgZWxzZQogICAgICAgICBpbml0RG93bnN0cmVhbShwb3MpOwpAQCAtMjc0
LDcgKzI3NSw3IEBAIGJvb2wgVmlzaWJsZVBvc2l0aW9uOjppc0NhbmRpZGF0ZShjb25zdCAKICAg
ICB9CiAgICAgCiAgICAgaWYgKHJlbmRlcmVyLT5pc0Jsb2NrRmxvdygpICYmICghcmVuZGVyZXIt
PmZpcnN0Q2hpbGQoKSB8fCAhcG9zLm5vZGUoKS0+Zmlyc3RDaGlsZCgpKSAmJiAKLSAgICAgICAo
cmVuZGVyZXItPmhlaWdodCgpIHx8IHBvcy5ub2RlKCktPmlkKCkgPT0gSURfQk9EWSkpIHsKKyAg
ICAgICAocmVuZGVyZXItPmhlaWdodCgpIHx8IHBvcy5ub2RlKCktPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjpib2R5KCkpKSkgewogICAgICAgICAvLyByZXR1cm4gdHJ1ZSBmb3Igb2Zmc2V0IDAgaW50
byByZW5kZXJlZCBibG9ja3MgdGhhdCBhcmUgZW1wdHkgb2YgcmVuZGVyZWQga2lkcywgYnV0IGhh
dmUgYSBoZWlnaHQKICAgICAgICAgcmV0dXJuIHBvcy5vZmZzZXQoKSA9PSAwOwogICAgIH0KQEAg
LTM1OSw3ICszNjAsNyBAQCBsb25nIFZpc2libGVQb3NpdGlvbjo6bWF4T2Zmc2V0KGNvbnN0IE5v
CiAKIGJvb2wgVmlzaWJsZVBvc2l0aW9uOjppc0F0b21pY05vZGUoY29uc3QgTm9kZUltcGwgKm5v
ZGUpCiB7Ci0gICAgcmV0dXJuIG5vZGUgJiYgKCFub2RlLT5oYXNDaGlsZE5vZGVzKCkgfHwgKG5v
ZGUtPmlkKCkgPT0gSURfT0JKRUNUICYmIG5vZGUtPnJlbmRlcmVyKCkgJiYgbm9kZS0+cmVuZGVy
ZXIoKS0+aXNSZXBsYWNlZCgpKSk7CisgICAgcmV0dXJuIG5vZGUgJiYgKCFub2RlLT5oYXNDaGls
ZE5vZGVzKCkgfHwgKG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvYmplY3QoKSkgJiYgbm9k
ZS0+cmVuZGVyZXIoKSAmJiBub2RlLT5yZW5kZXJlcigpLT5pc1JlcGxhY2VkKCkpKTsKIH0KIAog
UUNoYXIgVmlzaWJsZVBvc2l0aW9uOjpjaGFyYWN0ZXIoKSBjb25zdApJbmRleDoga2h0bWwvZWRp
dGluZy92aXNpYmxlX3RleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJD
b3JlL2todG1sL2VkaXRpbmcvdmlzaWJsZV90ZXh0LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS4yNwpkaWZmIC11IC1wIC1yMS4yNyBraHRtbC9lZGl0aW5nL3Zpc2libGVfdGV4dC5jcHAKLS0t
IGtodG1sL2VkaXRpbmcvdmlzaWJsZV90ZXh0LmNwcAkxMyBNYXkgMjAwNSAxNjo0ODo1MSAtMDAw
MAkxLjI3CisrKyBraHRtbC9lZGl0aW5nL3Zpc2libGVfdGV4dC5jcHAJMjIgSnVuIDIwMDUgMjM6
MjM6MjAgLTAwMDAKQEAgLTI1LDcgKzI1LDcgQEAKIAogI2luY2x1ZGUgInZpc2libGVfdGV4dC5o
IgogCi0jaW5jbHVkZSAibWlzYy9odG1sdGFncy5oIgorI2luY2x1ZGUgImh0bWxuYW1lcy5oIgog
I2luY2x1ZGUgInJlbmRlcmluZy9yZW5kZXJfdGV4dC5oIgogI2luY2x1ZGUgInhtbC9kb21fbm9k
ZWltcGwuaCIKICNpbmNsdWRlICJ4bWwvZG9tX3Bvc2l0aW9uLmgiCkBAIC0zNyw2ICszNyw3IEBA
IHVzaW5nIERPTTo6Tm9kZTsKIHVzaW5nIERPTTo6Tm9kZUltcGw7CiB1c2luZyBET006Om9mZnNl
dEluQ2hhcmFjdGVyczsKIHVzaW5nIERPTTo6UmFuZ2VJbXBsOwordXNpbmcgRE9NOjpIVE1MTmFt
ZXM7CiAKIC8vIEZJWE1FOiBUaGVzZSBjbGFzc2VzIHNob3VsZCBwcm9iYWJseSB1c2UgdGhlIHJl
bmRlciB0cmVlIGFuZCBub3QgdGhlIERPTSB0cmVlLCBzaW5jZSBlbGVtZW50cyBjb3VsZAogLy8g
YmUgaGlkZGVuIHVzaW5nIENTUywgb3IgYWRkaXRpb25hbCBnZW5lcmF0ZWQgY29udGVudCBjb3Vs
ZCBiZSBhZGRlZC4gIEZvciBub3csIHdlIGp1c3QgbWFrZSBzdXJlCkBAIC0zMzYsNDEgKzMzNywy
NSBAQCBib29sIFRleHRJdGVyYXRvcjo6aGFuZGxlUmVwbGFjZWRFbGVtZW50CiAKIGJvb2wgVGV4
dEl0ZXJhdG9yOjpoYW5kbGVOb25UZXh0Tm9kZSgpCiB7Ci0gICAgc3dpdGNoIChtX25vZGUtPmlk
KCkpIHsKLSAgICAgICAgY2FzZSBJRF9CUjogewotICAgICAgICAgICAgZW1pdENoYXJhY3Rlcign
XG4nLCBtX25vZGUtPnBhcmVudE5vZGUoKSwgbV9ub2RlLCAwLCAxKTsKLSAgICAgICAgICAgIGJy
ZWFrOworICAgIGlmIChtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpicigpKSkgeworICAg
ICAgICBlbWl0Q2hhcmFjdGVyKCdcbicsIG1fbm9kZS0+cGFyZW50Tm9kZSgpLCBtX25vZGUsIDAs
IDEpOworICAgIH0gZWxzZSBpZiAobV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGQoKSkg
fHwgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGgoKSkpIHsKKyAgICAgICAgaWYgKG1f
bGFzdENoYXJhY3RlciAhPSAnXG4nICYmIG1fbGFzdFRleHROb2RlKSB7CisgICAgICAgICAgICBl
bWl0Q2hhcmFjdGVyKCdcdCcsIG1fbGFzdFRleHROb2RlLT5wYXJlbnROb2RlKCksIG1fbGFzdFRl
eHROb2RlLCAwLCAxKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAobV9ub2RlLT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6YmxvY2txdW90ZSgpKSB8fCBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjpkZCgpKSB8fAorICAgICAgICAgICAgICAgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6ZGl2KCkpIHx8CisgICAgICAgICAgICAgICBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjpkbCgpKSB8fCBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpkdCgpKSB8fCAKKyAgICAg
ICAgICAgICAgIG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmgxKCkpIHx8IG1fbm9kZS0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OmgyKCkpIHx8CisgICAgICAgICAgICAgICBtX25vZGUtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjpoMygpKSB8fCBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjpoNCgpKSB8fAorICAgICAgICAgICAgICAgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
aDUoKSkgfHwgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDYoKSkgfHwKKyAgICAgICAg
ICAgICAgIG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmhyKCkpIHx8IG1fbm9kZS0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OmxpKCkpIHx8CisgICAgICAgICAgICAgICBtX25vZGUtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjpvbCgpKSB8fCBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpw
KCkpIHx8CisgICAgICAgICAgICAgICBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpwcmUo
KSkgfHwgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dHIoKSkgfHwKKyAgICAgICAgICAg
ICAgIG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnVsKCkpKSB7CisgICAgICAgIGlmICht
X2xhc3RDaGFyYWN0ZXIgIT0gJ1xuJyAmJiBtX2xhc3RUZXh0Tm9kZSkgeworICAgICAgICAgICAg
ZW1pdENoYXJhY3RlcignXG4nLCBtX2xhc3RUZXh0Tm9kZS0+cGFyZW50Tm9kZSgpLCBtX2xhc3RU
ZXh0Tm9kZSwgMCwgMSk7CiAgICAgICAgIH0KLQotICAgICAgICBjYXNlIElEX1REOgotICAgICAg
ICBjYXNlIElEX1RIOgotICAgICAgICAgICAgaWYgKG1fbGFzdENoYXJhY3RlciAhPSAnXG4nICYm
IG1fbGFzdFRleHROb2RlKSB7Ci0gICAgICAgICAgICAgICAgZW1pdENoYXJhY3RlcignXHQnLCBt
X2xhc3RUZXh0Tm9kZS0+cGFyZW50Tm9kZSgpLCBtX2xhc3RUZXh0Tm9kZSwgMCwgMSk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIElEX0JMT0NLUVVP
VEU6Ci0gICAgICAgIGNhc2UgSURfREQ6Ci0gICAgICAgIGNhc2UgSURfRElWOgotICAgICAgICBj
YXNlIElEX0RMOgotICAgICAgICBjYXNlIElEX0RUOgotICAgICAgICBjYXNlIElEX0gxOgotICAg
ICAgICBjYXNlIElEX0gyOgotICAgICAgICBjYXNlIElEX0gzOgotICAgICAgICBjYXNlIElEX0g0
OgotICAgICAgICBjYXNlIElEX0g1OgotICAgICAgICBjYXNlIElEX0g2OgotICAgICAgICBjYXNl
IElEX0hSOgotICAgICAgICBjYXNlIElEX0xJOgotICAgICAgICBjYXNlIElEX09MOgotICAgICAg
ICBjYXNlIElEX1A6Ci0gICAgICAgIGNhc2UgSURfUFJFOgotICAgICAgICBjYXNlIElEX1RSOgot
ICAgICAgICBjYXNlIElEX1VMOgotICAgICAgICAgICAgaWYgKG1fbGFzdENoYXJhY3RlciAhPSAn
XG4nICYmIG1fbGFzdFRleHROb2RlKSB7Ci0gICAgICAgICAgICAgICAgZW1pdENoYXJhY3Rlcign
XG4nLCBtX2xhc3RUZXh0Tm9kZS0+cGFyZW50Tm9kZSgpLCBtX2xhc3RUZXh0Tm9kZSwgMCwgMSk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKICAgICB9CiAKICAgICByZXR1cm4g
dHJ1ZTsKQEAgLTM4MSw0OSArMzY2LDM2IEBAIHZvaWQgVGV4dEl0ZXJhdG9yOjpleGl0Tm9kZSgp
CiAgICAgYm9vbCBlbmRMaW5lID0gZmFsc2U7CiAgICAgYm9vbCBhZGROZXdsaW5lID0gZmFsc2U7
CiAKLSAgICBzd2l0Y2ggKG1fbm9kZS0+aWQoKSkgewotICAgICAgICBjYXNlIElEX0JMT0NLUVVP
VEU6Ci0gICAgICAgIGNhc2UgSURfREQ6Ci0gICAgICAgIGNhc2UgSURfRElWOgotICAgICAgICBj
YXNlIElEX0RMOgotICAgICAgICBjYXNlIElEX0RUOgotICAgICAgICBjYXNlIElEX0hSOgotICAg
ICAgICBjYXNlIElEX0xJOgotICAgICAgICBjYXNlIElEX09MOgotICAgICAgICBjYXNlIElEX1BS
RToKLSAgICAgICAgY2FzZSBJRF9UUjoKLSAgICAgICAgY2FzZSBJRF9VTDoKLSAgICAgICAgICAg
IGVuZExpbmUgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBJRF9I
MToKLSAgICAgICAgY2FzZSBJRF9IMjoKLSAgICAgICAgY2FzZSBJRF9IMzoKLSAgICAgICAgY2Fz
ZSBJRF9INDoKLSAgICAgICAgY2FzZSBJRF9INToKLSAgICAgICAgY2FzZSBJRF9INjoKLSAgICAg
ICAgY2FzZSBJRF9QOiB7Ci0gICAgICAgICAgICBlbmRMaW5lID0gdHJ1ZTsKLQotICAgICAgICAg
ICAgLy8gSW4gY2VydGFpbiBjYXNlcywgZW1pdCBhIG5ldyBuZXdsaW5lIGNoYXJhY3RlciBmb3Ig
dGhpcyBub2RlCi0gICAgICAgICAgICAvLyByZWdhcmRsZXNzIG9mIHdoZXRoZXIgd2UgZW1pdCBh
bm90aGVyIG9uZS4KLSAgICAgICAgICAgIC8vIEZJWE1FOiBTb21lIGRheSB3ZSBjb3VsZCBkbyB0
aGlzIGZvciBvdGhlciB0YWdzLgotICAgICAgICAgICAgLy8gSG93ZXZlciwgZG9pbmcgaXQganVz
dCBmb3IgdGhlIHRhZ3MgYWJvdmUgbWFrZXMgaXQgbW9yZSBsaWtlbHkKLSAgICAgICAgICAgIC8v
IHdlJ2xsIGVuZCB1cCBnZXR0aW5nIHRoZSByaWdodCByZXN1bHQgd2l0aG91dCBtYXJnaW4gY29s
bGFwc2luZy4KLSAgICAgICAgICAgIC8vIEZvciBleGFtcGxlOiA8ZGl2PjxwPnRleHQ8L3A+PC9k
aXY+IHdpbGwgd29yayByaWdodCBldmVuIGlmIGJvdGgKLSAgICAgICAgICAgIC8vIHRoZSA8ZGl2
PiBhbmQgdGhlIDxwPiBoYXZlIGJvdHRvbSBtYXJnaW5zLgotICAgICAgICAgICAgUmVuZGVyT2Jq
ZWN0ICpyZW5kZXJlciA9IG1fbm9kZS0+cmVuZGVyZXIoKTsKLSAgICAgICAgICAgIGlmIChyZW5k
ZXJlcikgewotICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlICpzdHlsZSA9IHJlbmRlcmVyLT5z
dHlsZSgpOwotICAgICAgICAgICAgICAgIGlmIChzdHlsZSkgewotICAgICAgICAgICAgICAgICAg
ICBpbnQgYm90dG9tTWFyZ2luID0gcmVuZGVyZXItPmNvbGxhcHNlZE1hcmdpbkJvdHRvbSgpOwot
ICAgICAgICAgICAgICAgICAgICBpbnQgZm9udFNpemUgPSBzdHlsZS0+aHRtbEZvbnQoKS5nZXRG
b250RGVmKCkuY29tcHV0ZWRQaXhlbFNpemUoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGJv
dHRvbU1hcmdpbiAqIDIgPj0gZm9udFNpemUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFk
ZE5ld2xpbmUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICB9CisgICAgaWYgKG1fbm9kZS0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJsb2NrcXVvdGUoKSkgfHwgbV9ub2RlLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6ZGQoKSkgfHwKKyAgICAgICAgICAgICAgIG1fbm9kZS0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OmRpdigpKSB8fAorICAgICAgICAgICAgICAgbV9ub2RlLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6ZGwoKSkgfHwgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZHQoKSkgfHwg
CisgICAgICAgICAgICAgICBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpocigpKSB8fCBt
X25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpsaSgpKSB8fAorICAgICAgICAgICAgICAgbV9u
b2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b2woKSkgfHwKKyAgICAgICAgICAgICAgIG1fbm9k
ZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnByZSgpKSB8fCBtX25vZGUtPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjp0cigpKSB8fAorICAgICAgICAgICAgICAgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6dWwoKSkpCisgICAgICAgIGVuZExpbmUgPSB0cnVlOworICAgIGVsc2UgaWYgKG1fbm9k
ZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmgxKCkpIHx8IG1fbm9kZS0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OmgyKCkpIHx8CisgICAgICAgICAgICAgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6aDMoKSkgfHwgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDQoKSkgfHwKKyAgICAg
ICAgICAgICBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoNSgpKSB8fCBtX25vZGUtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjpoNigpKSkgeworICAgICAgICBlbmRMaW5lID0gdHJ1ZTsKKwor
ICAgICAgICAvLyBJbiBjZXJ0YWluIGNhc2VzLCBlbWl0IGEgbmV3IG5ld2xpbmUgY2hhcmFjdGVy
IGZvciB0aGlzIG5vZGUKKyAgICAgICAgLy8gcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHdlIGVtaXQg
YW5vdGhlciBvbmUuCisgICAgICAgIC8vIEZJWE1FOiBTb21lIGRheSB3ZSBjb3VsZCBkbyB0aGlz
IGZvciBvdGhlciB0YWdzLgorICAgICAgICAvLyBIb3dldmVyLCBkb2luZyBpdCBqdXN0IGZvciB0
aGUgdGFncyBhYm92ZSBtYWtlcyBpdCBtb3JlIGxpa2VseQorICAgICAgICAvLyB3ZSdsbCBlbmQg
dXAgZ2V0dGluZyB0aGUgcmlnaHQgcmVzdWx0IHdpdGhvdXQgbWFyZ2luIGNvbGxhcHNpbmcuCisg
ICAgICAgIC8vIEZvciBleGFtcGxlOiA8ZGl2PjxwPnRleHQ8L3A+PC9kaXY+IHdpbGwgd29yayBy
aWdodCBldmVuIGlmIGJvdGgKKyAgICAgICAgLy8gdGhlIDxkaXY+IGFuZCB0aGUgPHA+IGhhdmUg
Ym90dG9tIG1hcmdpbnMuCisgICAgICAgIFJlbmRlck9iamVjdCAqcmVuZGVyZXIgPSBtX25vZGUt
PnJlbmRlcmVyKCk7CisgICAgICAgIGlmIChyZW5kZXJlcikgeworICAgICAgICAgICAgUmVuZGVy
U3R5bGUgKnN0eWxlID0gcmVuZGVyZXItPnN0eWxlKCk7CisgICAgICAgICAgICBpZiAoc3R5bGUp
IHsKKyAgICAgICAgICAgICAgICBpbnQgYm90dG9tTWFyZ2luID0gcmVuZGVyZXItPmNvbGxhcHNl
ZE1hcmdpbkJvdHRvbSgpOworICAgICAgICAgICAgICAgIGludCBmb250U2l6ZSA9IHN0eWxlLT5o
dG1sRm9udCgpLmdldEZvbnREZWYoKS5jb21wdXRlZFBpeGVsU2l6ZSgpOworICAgICAgICAgICAg
ICAgIGlmIChib3R0b21NYXJnaW4gKiAyID49IGZvbnRTaXplKSB7CisgICAgICAgICAgICAgICAg
ICAgIGFkZE5ld2xpbmUgPSB0cnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQogCkBAIC02NjAsMzQgKzYzMiwy
MiBAQCBib29sIFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3I6OmhhCiAKIGJvb2wgU2lt
cGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvcjo6aGFuZGxlTm9uVGV4dE5vZGUoKQogewotICAg
IHN3aXRjaCAobV9ub2RlLT5pZCgpKSB7Ci0gICAgICAgIGNhc2UgSURfQlI6Ci0gICAgICAgICAg
ICBlbWl0TmV3bGluZUZvckJST3JUZXh0KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBJRF9URDoKLSAgICAgICAgY2FzZSBJRF9USDoKLSAgICAgICAgY2FzZSBJRF9CTE9DS1FV
T1RFOgotICAgICAgICBjYXNlIElEX0REOgotICAgICAgICBjYXNlIElEX0RJVjoKLSAgICAgICAg
Y2FzZSBJRF9ETDoKLSAgICAgICAgY2FzZSBJRF9EVDoKLSAgICAgICAgY2FzZSBJRF9IMToKLSAg
ICAgICAgY2FzZSBJRF9IMjoKLSAgICAgICAgY2FzZSBJRF9IMzoKLSAgICAgICAgY2FzZSBJRF9I
NDoKLSAgICAgICAgY2FzZSBJRF9INToKLSAgICAgICAgY2FzZSBJRF9INjoKLSAgICAgICAgY2Fz
ZSBJRF9IUjoKLSAgICAgICAgY2FzZSBJRF9QOgotICAgICAgICBjYXNlIElEX1BSRToKLSAgICAg
ICAgY2FzZSBJRF9UUjoKLSAgICAgICAgY2FzZSBJRF9PTDoKLSAgICAgICAgY2FzZSBJRF9VTDoK
LSAgICAgICAgY2FzZSBJRF9MSToKLSAgICAgICAgICAgIC8vIEVtaXQgYSBzcGFjZSB0byAiYnJl
YWsgdXAiIGNvbnRlbnQuIEFueSB3b3JkIGJyZWFrCi0gICAgICAgICAgICAvLyBjaGFyYWN0ZXIg
d2lsbCBkby4KLSAgICAgICAgICAgIGVtaXRDaGFyYWN0ZXIoJyAnLCBtX25vZGUsIDAsIDApOwot
ICAgICAgICAgICAgYnJlYWs7CisgICAgaWYgKG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
OmJyKCkpKQorICAgICAgICBlbWl0TmV3bGluZUZvckJST3JUZXh0KCk7CisgICAgZWxzZSBpZiAo
bV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGQgKCkpIHx8IG1fbm9kZS0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OnRoKCkpIHx8CisgICAgICAgICAgICAgbV9ub2RlLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6YmxvY2txdW90ZSgpKSB8fCBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpk
ZCgpKSB8fAorICAgICAgICAgICAgIG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmRpdigp
KSB8fAorICAgICAgICAgICAgIG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmRsKCkpIHx8
IG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmR0KCkpIHx8IAorICAgICAgICAgICAgIG1f
bm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmgxKCkpIHx8IG1fbm9kZS0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OmgyKCkpIHx8CisgICAgICAgICAgICAgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6aDMoKSkgfHwgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDQoKSkgfHwKKyAg
ICAgICAgICAgICBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoNSgpKSB8fCBtX25vZGUt
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoNigpKSB8fAorICAgICAgICAgICAgIG1fbm9kZS0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OmhyKCkpIHx8IG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
OmxpKCkpIHx8CisgICAgICAgICAgICAgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b2wo
KSkgfHwgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6cCgpKSB8fAorICAgICAgICAgICAg
IG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnByZSgpKSB8fCBtX25vZGUtPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjp0cigpKSB8fAorICAgICAgICAgICAgIG1fbm9kZS0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OnVsKCkpKSB7CisgICAgICAgIC8vIEVtaXQgYSBzcGFjZSB0byAiYnJlYWsgdXAi
IGNvbnRlbnQuIEFueSB3b3JkIGJyZWFrCisgICAgICAgIC8vIGNoYXJhY3RlciB3aWxsIGRvLgor
ICAgICAgICBlbWl0Q2hhcmFjdGVyKCcgJywgbV9ub2RlLCAwLCAwKTsKICAgICB9CiAKICAgICBy
ZXR1cm4gdHJ1ZTsKSW5kZXg6IGtodG1sL2VkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWRpdGluZy92aXNpYmxlX3Vu
aXRzLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zNApkaWZmIC11IC1wIC1yMS4zNCBraHRt
bC9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwCi0tLSBraHRtbC9lZGl0aW5nL3Zpc2libGVfdW5p
dHMuY3BwCTI2IE1heSAyMDA1IDIwOjMwOjEyIC0wMDAwCTEuMzQKKysrIGtodG1sL2VkaXRpbmcv
dmlzaWJsZV91bml0cy5jcHAJMjIgSnVuIDIwMDUgMjM6MjM6MjAgLTAwMDAKQEAgLTI3LDcgKzI3
LDcgQEAKIAogI2luY2x1ZGUgPHFzdHJpbmcuaD4KIAotI2luY2x1ZGUgImh0bWx0YWdzLmgiCisj
aW5jbHVkZSAiaHRtbG5hbWVzLmgiCiAjaW5jbHVkZSAibWlzYy9oZWxwZXIuaCIKICNpbmNsdWRl
ICJyZW5kZXJpbmcvcmVuZGVyX3RleHQuaCIKICNpbmNsdWRlICJyZW5kZXJpbmcvcmVuZGVyX2Js
b2NrLmgiCkBAIC00MSw2ICs0MSw3IEBAIHVzaW5nIERPTTo6RWxlbWVudEltcGw7CiB1c2luZyBE
T006Ok5vZGVJbXBsOwogdXNpbmcgRE9NOjpQb3NpdGlvbjsKIHVzaW5nIERPTTo6UmFuZ2VJbXBs
OwordXNpbmcgRE9NOjpIVE1MTmFtZXM7CiAKIG5hbWVzcGFjZSBraHRtbCB7CiAKQEAgLTMzMiw3
ICszMzMsNyBAQCBWaXNpYmxlUG9zaXRpb24gZW5kT2ZMaW5lKGNvbnN0IFZpc2libGVQCiAgICAg
ICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKIAogICAgIGxvbmcgZW5kT2Zmc2V0ID0gMTsK
LSAgICBpZiAoZW5kTm9kZS0+aWQoKSA9PSBJRF9CUikgeworICAgIGlmIChlbmROb2RlLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6YnIoKSkpIHsKICAgICAgICAgZW5kT2Zmc2V0ID0gMDsKICAgICB9
IGVsc2UgaWYgKGVuZEJveC0+aXNJbmxpbmVUZXh0Qm94KCkpIHsKICAgICAgICAgSW5saW5lVGV4
dEJveCAqZW5kVGV4dEJveCA9IHN0YXRpY19jYXN0PElubGluZVRleHRCb3ggKj4oZW5kQm94KTsK
SW5kZXg6IGtodG1sL2h0bWwvZHRkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3Qv
V2ViQ29yZS9raHRtbC9odG1sL2R0ZC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzgKZGlm
ZiAtdSAtcCAtcjEuMzgga2h0bWwvaHRtbC9kdGQuY3BwCi0tLSBraHRtbC9odG1sL2R0ZC5jcHAJ
MTIgQXByIDIwMDUgMjI6NDk6NDEgLTAwMDAJMS4zOAorKysga2h0bWwvaHRtbC9kdGQuY3BwCTIy
IEp1biAyMDA1IDIzOjIzOjIxIC0wMDAwCkBAIC00NCw2ICs0NCw3IEBAIHVzaW5nIG5hbWVzcGFj
ZSBET007CiAvLyA4IHRhYmxlCiAvLyA5IGJvZHkgZnJhbWVzZXQKIC8vIDEwIGh0bWwKKy8qCiBj
b25zdCB1bnNpZ25lZCBzaG9ydCBET006OnRhZ1ByaW9yaXR5QXJyYXlbXSA9IHsKICAgICAwLCAv
LyAwCiAgICAgMSwgLy8gSURfQSA9PSAxCkBAIC01Nyw4ICs1OCw2IEBAIGNvbnN0IHVuc2lnbmVk
IHNob3J0IERPTTo6dGFnUHJpb3JpdHlBcnIKICAgICAwLCAvLyBJRF9CQVNFRk9OVAogICAgIDEs
IC8vIElEX0JETwogICAgIDEsIC8vIElEX0JJRwotICAgIDUsIC8vIElEX0JMT0NLUVVPVEUKLSAg
IDEwLCAvLyBJRF9CT0RZCiAgICAgMCwgLy8gSURfQlIKICAgICAxLCAvLyBJRF9CVVRUT04KICAg
ICAwLCAvLyBJRF9DQU5WQVMKQEAgLTcyLDcgKzcxLDYgQEAgY29uc3QgdW5zaWduZWQgc2hvcnQg
RE9NOjp0YWdQcmlvcml0eUFycgogICAgIDEsIC8vIElEX0RFTAogICAgIDEsIC8vIElEX0RGTgog
ICAgIDUsIC8vIElEX0RJUgotICAgIDUsIC8vIElEX0RJVgogICAgIDUsIC8vIElEX0RMCiAgICAg
MywgLy8gSURfRFQKICAgICAxLCAvLyBJRF9FTQpAQCAtODAsMTkgKzc4LDcgQEAgY29uc3QgdW5z
aWduZWQgc2hvcnQgRE9NOjp0YWdQcmlvcml0eUFycgogICAgIDMsIC8vIElEX0ZJRUxEU0VUCiAg
ICAgMSwgLy8gSURfRk9OVAogICAgIDMsIC8vIElEX0ZPUk0KLSAgICAwLCAvLyBJRF9GUkFNRQot
ICAgMTAsLy8gSURfRlJBTUVTRVQKLSAgICA1LCAvLyBJRF9IMQotICAgIDUsIC8vIElEX0gyCi0g
ICAgNSwgLy8gSURfSDMKLSAgICA1LCAvLyBJRF9INAotICAgIDUsIC8vIElEX0g1Ci0gICAgNSwg
Ly8gSURfSDYKLSAgIDEwLC8vIElEX0hFQUQKLSAgICAwLCAvLyBJRF9IUgotICAgMTEsLy8gSURf
SFRNTAogICAgIDEsIC8vIElEX0kKLSAgICAxLCAvLyBJRF9JRlJBTUUKICAgICAwLCAvLyBJRF9J
TUcKICAgICAwLCAvLyBJRF9JTlBVVAogICAgIDEsIC8vIElEX0lOUwpAQCAtMTE3LDcgKzEwMyw2
IEBAIGNvbnN0IHVuc2lnbmVkIHNob3J0IERPTTo6dGFnUHJpb3JpdHlBcnIKICAgICA1LCAvLyBJ
RF9PTAogICAgIDEsIC8vIElEX09QVEdST1VQCiAgICAgMiwgLy8gSURfT1BUSU9OCi0gICAgMywg
Ly8gSURfUAogICAgIDAsIC8vIElEX1BBUkFNCiAgICAgNSwgLy8gSURfUExBSU5URVhUCiAgICAg
NSwgLy8gSURfUFJFCkBAIC0xMjcsNyArMTEyLDYgQEAgY29uc3QgdW5zaWduZWQgc2hvcnQgRE9N
Ojp0YWdQcmlvcml0eUFycgogICAgIDEsIC8vIElEX1NDUklQVAogICAgIDYsIC8vIElEX1NFTEVD
VAogICAgIDEsIC8vIElEX1NNQUxMCi0gICAgMSwgLy8gSURfU1BBTgogICAgIDEsIC8vIElEX1NU
UklLRQogICAgIDEsIC8vIElEX1NUUk9ORwogICAgIDEsIC8vIElEX1NUWUxFCkBAIC0xNjQsOCAr
MTQ4LDYgQEAgY29uc3QgdGFnU3RhdHVzIERPTTo6ZW5kVGFnQXJyYXlbXSA9IHsKICAgICBGT1JC
SURERU4sIC8vIElEX0JBU0VGT05UCiAgICAgUkVRVUlSRUQsICAvLyBJRF9CRE8KICAgICBSRVFV
SVJFRCwgIC8vIElEX0JJRwotICAgIFJFUVVJUkVELCAgLy8gSURfQkxPQ0tRVU9URQotICAgIFJF
UVVJUkVELCAgLy8gSURfQk9EWQogICAgIEZPUkJJRERFTiwgLy8gSURfQlIKICAgICBSRVFVSVJF
RCwgIC8vIElEX0JVVFRPTgogICAgIEZPUkJJRERFTiwgLy8gSURfQ0FOVkFTCkBAIC0xNzksNyAr
MTYxLDYgQEAgY29uc3QgdGFnU3RhdHVzIERPTTo6ZW5kVGFnQXJyYXlbXSA9IHsKICAgICBSRVFV
SVJFRCwgIC8vIElEX0RFTAogICAgIFJFUVVJUkVELCAgLy8gSURfREZOCiAgICAgUkVRVUlSRUQs
ICAvLyBJRF9ESVIKLSAgICBSRVFVSVJFRCwgIC8vIElEX0RJVgogICAgIFJFUVVJUkVELCAgLy8g
SURfREwKICAgICBPUFRJT05BTCwgIC8vIElEX0RUCiAgICAgUkVRVUlSRUQsICAvLyBJRF9FTQpA
QCAtMTg3LDE5ICsxNjgsOCBAQCBjb25zdCB0YWdTdGF0dXMgRE9NOjplbmRUYWdBcnJheVtdID0g
ewogICAgIFJFUVVJUkVELCAgLy8gSURfRklFTERTRVQKICAgICBSRVFVSVJFRCwgIC8vIElEX0ZP
TlQKICAgICBSRVFVSVJFRCwgIC8vIElEX0ZPUk0KLSAgICBGT1JCSURERU4sIC8vIElEX0ZSQU1F
CiAgICAgUkVRVUlSRUQsICAvLyBJRF9GUkFNRVNFVAotICAgIFJFUVVJUkVELCAgLy8gSURfSDEK
LSAgICBSRVFVSVJFRCwgIC8vIElEX0gyCi0gICAgUkVRVUlSRUQsICAvLyBJRF9IMwotICAgIFJF
UVVJUkVELCAgLy8gSURfSDQKLSAgICBSRVFVSVJFRCwgIC8vIElEX0g1Ci0gICAgUkVRVUlSRUQs
ICAvLyBJRF9INgotICAgIE9QVElPTkFMLCAgLy8gSURfSEVBRAotICAgIEZPUkJJRERFTiwgLy8g
SURfSFIKLSAgICBSRVFVSVJFRCwgIC8vIElEX0hUTUwKLSAgICBSRVFVSVJFRCwgIC8vIElEX0kK
LSAgICBSRVFVSVJFRCwgIC8vIElEX0lGUkFNRQorICAgICAgUkVRVUlSRUQsICAvLyBJRF9JCiAg
ICAgRk9SQklEREVOLCAvLyBJRF9JTUcKICAgICBGT1JCSURERU4sIC8vIElEX0lOUFVUCiAgICAg
UkVRVUlSRUQsICAvLyBJRF9JTlMKQEAgLTIyNCw3ICsxOTQsNiBAQCBjb25zdCB0YWdTdGF0dXMg
RE9NOjplbmRUYWdBcnJheVtdID0gewogICAgIFJFUVVJUkVELCAgLy8gSURfT0wKICAgICBSRVFV
SVJFRCwgIC8vIElEX09QVEdST1VQCiAgICAgT1BUSU9OQUwsICAvLyBJRF9PUFRJT04KLSAgICBP
UFRJT05BTCwgIC8vIElEX1AKICAgICBGT1JCSURERU4sIC8vIElEX1BBUkFNCiAgICAgUkVRVUlS
RUQsICAvLyBJRF9QTEFJTlRFWFQKICAgICBSRVFVSVJFRCwgIC8vIElEX1BSRQpAQCAtMjM0LDcg
KzIwMyw2IEBAIGNvbnN0IHRhZ1N0YXR1cyBET006OmVuZFRhZ0FycmF5W10gPSB7CiAgICAgUkVR
VUlSRUQsICAvLyBJRF9TQ1JJUFQKICAgICBSRVFVSVJFRCwgIC8vIElEX1NFTEVDVAogICAgIFJF
UVVJUkVELCAgLy8gSURfU01BTEwKLSAgICBSRVFVSVJFRCwgIC8vIElEX1NQQU4KICAgICBSRVFV
SVJFRCwgIC8vIElEX1NUUklLRQogICAgIFJFUVVJUkVELCAgLy8gSURfU1RST05HCiAgICAgUkVR
VUlSRUQsICAvLyBJRF9TVFlMRQpAQCAtMjU4LDYgKzIyNiw3IEBAIGNvbnN0IHRhZ1N0YXR1cyBE
T006OmVuZFRhZ0FycmF5W10gPSB7CiAgICAgUkVRVUlSRUQgICAvLyBJRF9URVhUCiB9OwogCisq
LwogCiBzdGF0aWMgY29uc3QgdXNob3J0IHRhZ19saXN0XzBbXSA9IHsKICAgICBJRF9URVhULApA
QCAtNzY3LDIyMyArNzM2LDMgQEAgYm9vbCBET006OmNoZWNrQ2hpbGQodXNob3J0IHRhZ0lELCB1
c2hvcgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogfQotCi12b2lkIERPTTo6YWRkRm9y
YmlkZGVuKGludCB0YWdJZCwgdXNob3J0ICpmb3JiaWRkZW5UYWdzKQotewotICAgIHN3aXRjaCh0
YWdJZCkKLSAgICB7Ci0gICAgY2FzZSBJRF9MQUJFTDoKLSAgICAgICAgZm9yYmlkZGVuVGFnc1tJ
RF9MQUJFTF0rKzsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9CVVRUT046Ci0gICAgICAg
IGZvcmJpZGRlblRhZ3NbSURfQV0rKzsKLSAgICAgICAgZm9yYmlkZGVuVGFnc1tJRF9JTlBVVF0r
KzsKLSAgICAgICAgZm9yYmlkZGVuVGFnc1tJRF9TRUxFQ1RdKys7Ci0gICAgICAgIGZvcmJpZGRl
blRhZ3NbSURfVEVYVEFSRUFdKys7Ci0gICAgICAgIGZvcmJpZGRlblRhZ3NbSURfTEFCRUxdKys7
Ci0gICAgICAgIGZvcmJpZGRlblRhZ3NbSURfQlVUVE9OXSsrOwotICAgICAgICBmb3JiaWRkZW5U
YWdzW0lEX0ZPUk1dKys7Ci0gICAgICAgIGZvcmJpZGRlblRhZ3NbSURfSVNJTkRFWF0rKzsKLSAg
ICAgICAgZm9yYmlkZGVuVGFnc1tJRF9GSUVMRFNFVF0rKzsKLSAgICAgICAgZm9yYmlkZGVuVGFn
c1tJRF9JRlJBTUVdKys7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLX0KLQotdm9pZCBET006OnJlbW92ZUZvcmJpZGRlbihpbnQgdGFnSWQsIHVz
aG9ydCAqZm9yYmlkZGVuVGFncykKLXsKLSAgICBzd2l0Y2godGFnSWQpCi0gICAgewotICAgIGNh
c2UgSURfTEFCRUw6Ci0gICAgICAgIGZvcmJpZGRlblRhZ3NbSURfTEFCRUxdLS07Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgSURfQlVUVE9OOgotICAgICAgICBmb3JiaWRkZW5UYWdzW0lEX0Fd
LS07Ci0gICAgICAgIGZvcmJpZGRlblRhZ3NbSURfSU5QVVRdLS07Ci0gICAgICAgIGZvcmJpZGRl
blRhZ3NbSURfU0VMRUNUXS0tOwotICAgICAgICBmb3JiaWRkZW5UYWdzW0lEX1RFWFRBUkVBXS0t
OwotICAgICAgICBmb3JiaWRkZW5UYWdzW0lEX0xBQkVMXS0tOwotICAgICAgICBmb3JiaWRkZW5U
YWdzW0lEX0JVVFRPTl0tLTsKLSAgICAgICAgZm9yYmlkZGVuVGFnc1tJRF9GT1JNXS0tOwotICAg
ICAgICBmb3JiaWRkZW5UYWdzW0lEX0lTSU5ERVhdLS07Ci0gICAgICAgIGZvcmJpZGRlblRhZ3Nb
SURfRklFTERTRVRdLS07Ci0gICAgICAgIGZvcmJpZGRlblRhZ3NbSURfSUZSQU1FXS0tOwotICAg
ICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLQot
I2lmIDAKLQotCi1zdHJ1Y3QgYXR0cl9wcml2IHsKLSAgICBhdHRyX3ByaXYoKSB7IGlkID0gbGVu
ID0gMCwgdmFsID0gMDsgfQotICAgIGF0dHJfcHJpdih1c2hvcnQgaSwgY29uc3QgUUNoYXIgKnYs
IHVzaG9ydCBsKQotICAgIHsgaWQgPWk7IGxlbiA9IGwsIHZhbCA9IHY7IH0KLSAgICB1c2hvcnQg
aWQ7Ci0gICAgY29uc3QgUUNoYXIgKnZhbDsKLSAgICB1c2hvcnQgbGVuOwotfTsKLQotRE9NU3Ry
aW5nIGZpbmRfYXR0cih1c2hvcnQgaWQsIGNvbnN0IGF0dHJfcHJpdiAqYXR0cnMpCi17Ci0gICAg
aW50IGkgPSAwOwotICAgIHdoaWxlKGF0dHJzW2ldLmlkICE9IDApCi0gICAgewotICAgICAgICBp
ZihhdHRyc1tpXS5pZCA9PSBpZCkKLSAgICAgICAgICAgIHJldHVybiBET01TdHJpbmcoYXR0cnNb
aV0udmFsLCBhdHRyc1tpXS5sZW4pOwotICAgICAgICBpKys7Ci0gICAgfQotICAgIHJldHVybiBE
T01TdHJpbmcoKTsKLX0KLQotc3RhdGljIGNvbnN0IFFDaGFyIHZhbHVlXzFfMCBbXSA9IHsgJ04n
LCdPJywnTicsJ0UnIH07Ci0KLWF0dHJfcHJpdiBhdHRyX2xpc3RfMVtdID0gewotICAgIGF0dHJf
cHJpdihBVFRSX0NMRUFSLCB2YWx1ZV8xXzAsIDQpCi19OwotCi1zdGF0aWMgY29uc3QgUUNoYXIg
dmFsdWVfMl8wIFtdID0geyAnUicsJ0UnLCdDJywnVCcgfTsKLQotYXR0cl9wcml2IGF0dHJfbGlz
dF8yW10gPSB7Ci0gICAgYXR0cl9wcml2KEFUVFJfU0hBUEUsIHZhbHVlXzJfMCwgNCkKLX07Ci0K
LXN0YXRpYyBjb25zdCBRQ2hhciB2YWx1ZV8zXzAgW10gPSB7ICdSJywnRScsJ0MnLCdUJyB9Owot
Ci1hdHRyX3ByaXYgYXR0cl9saXN0XzNbXSA9IHsKLSAgICBhdHRyX3ByaXYoQVRUUl9TSEFQRSwg
dmFsdWVfM18wLCA0KQotfTsKLQotc3RhdGljIGNvbnN0IFFDaGFyIHZhbHVlXzRfMCBbXSA9IHsg
J0QnLCdBJywnVCcsJ0EnIH07Ci0KLWF0dHJfcHJpdiBhdHRyX2xpc3RfNFtdID0gewotICAgIGF0
dHJfcHJpdihBVFRSX1ZBTFVFVFlQRSwgdmFsdWVfNF8wLCA0KQotfTsKLQotc3RhdGljIGNvbnN0
IFFDaGFyIHZhbHVlXzVfMCBbXSA9IHsgJ0cnLCdFJywnVCcgfTsKLXN0YXRpYyBjb25zdCBRQ2hh
ciB2YWx1ZV81XzEgW10gPSB7ICdBJywnUCcsJ1AnLCdMJywnSScsJ0MnLCdBJywnVCcsJ0knLCdP
JywnTicsJy8nLCdYJywnLScsJ1cnLCdXJywnVycsJy0nLCdGJywnTycsJ1InLCdNJywnLScsJ1Un
LCdSJywnTCcsJ0UnLCdOJywnQycsJ08nLCdEJywnRScsJ0QnIH07Ci0KLWF0dHJfcHJpdiBhdHRy
X2xpc3RfNVtdID0gewotICAgIGF0dHJfcHJpdihBVFRSX01FVEhPRCwgdmFsdWVfNV8wLCAzKSwK
LSAgICBhdHRyX3ByaXYoQVRUUl9FTkNUWVBFLCB2YWx1ZV81XzEsIDMzKQotfTsKLQotc3RhdGlj
IGNvbnN0IFFDaGFyIHZhbHVlXzZfMCBbXSA9IHsgJ1QnLCdFJywnWCcsJ1QnIH07Ci0KLWF0dHJf
cHJpdiBhdHRyX2xpc3RfNltdID0gewotICAgIGF0dHJfcHJpdihBVFRSX1RZUEUsIHZhbHVlXzZf
MCwgNCkKLX07Ci0KLXN0YXRpYyBjb25zdCBRQ2hhciB2YWx1ZV83XzAgW10gPSB7ICdTJywnVScs
J0InLCdNJywnSScsJ1QnIH07Ci0KLWF0dHJfcHJpdiBhdHRyX2xpc3RfN1tdID0gewotICAgIGF0
dHJfcHJpdihBVFRSX1RZUEUsIHZhbHVlXzdfMCwgNikKLX07Ci0KLXN0YXRpYyBjb25zdCBRQ2hh
ciB2YWx1ZV84XzAgW10gPSB7ICcxJyB9OwotCi1hdHRyX3ByaXYgYXR0cl9saXN0XzhbXSA9IHsK
LSAgICBhdHRyX3ByaXYoQVRUUl9TUEFOLCB2YWx1ZV84XzAsIDEpCi19OwotCi1zdGF0aWMgY29u
c3QgUUNoYXIgdmFsdWVfOV8wIFtdID0geyAnMScgfTsKLQotYXR0cl9wcml2IGF0dHJfbGlzdF85
W10gPSB7Ci0gICAgYXR0cl9wcml2KEFUVFJfU1BBTiwgdmFsdWVfOV8wLCAxKQotfTsKLQotc3Rh
dGljIGNvbnN0IFFDaGFyIHZhbHVlXzEwXzAgW10gPSB7ICcxJyB9Owotc3RhdGljIGNvbnN0IFFD
aGFyIHZhbHVlXzEwXzEgW10gPSB7ICcxJyB9OwotCi1hdHRyX3ByaXYgYXR0cl9saXN0XzEwW10g
PSB7Ci0gICAgYXR0cl9wcml2KEFUVFJfUk9XU1BBTiwgdmFsdWVfMTBfMCwgMSksCi0gICAgYXR0
cl9wcml2KEFUVFJfQ09MU1BBTiwgdmFsdWVfMTBfMSwgMSkKLX07Ci0KLXN0YXRpYyBjb25zdCBR
Q2hhciB2YWx1ZV8xMV8wIFtdID0geyAnMScgfTsKLXN0YXRpYyBjb25zdCBRQ2hhciB2YWx1ZV8x
MV8xIFtdID0geyAnQScsJ1UnLCdUJywnTycgfTsKLQotYXR0cl9wcml2IGF0dHJfbGlzdF8xMVtd
ID0gewotICAgIGF0dHJfcHJpdihBVFRSX0ZSQU1FQk9SREVSLCB2YWx1ZV8xMV8wLCAxKSwKLSAg
ICBhdHRyX3ByaXYoQVRUUl9TQ1JPTExJTkcsIHZhbHVlXzExXzEsIDQpCi19OwotCi1zdGF0aWMg
Y29uc3QgUUNoYXIgdmFsdWVfMTJfMCBbXSA9IHsgJzEnIH07Ci1zdGF0aWMgY29uc3QgUUNoYXIg
dmFsdWVfMTJfMSBbXSA9IHsgJ0EnLCdVJywnVCcsJ08nIH07Ci0KLWF0dHJfcHJpdiBhdHRyX2xp
c3RfMTJbXSA9IHsKLSAgICBhdHRyX3ByaXYoQVRUUl9GUkFNRUJPUkRFUiwgdmFsdWVfMTJfMCwg
MSksCi0gICAgYXR0cl9wcml2KEFUVFJfU0NST0xMSU5HLCB2YWx1ZV8xMl8xLCA0KQotfTsKLQot
c3RhdGljIGNvbnN0IFFDaGFyIHZhbHVlXzEzXzAgW10gPSB7ICctJywnLycsJy8nLCdXJywnMycs
J0MnLCcvJywnLycsJ0QnLCdUJywnRCcgfTsKLXN0YXRpYyBjb25zdCBRQ2hhciB2YWx1ZV8xM18x
IFtdID0geyAnVCcsJ1InLCdBJywnTicsJ1MnLCdJJywnVCcsJ0knLCdPJywnTicsJ0EnLCdMJywn
LycsJy8nLCdFJywnTicgfTsKLQotYXR0cl9wcml2IGF0dHJfbGlzdF8xM1tdID0gewotICAgIGF0
dHJfcHJpdihBVFRSX1ZFUlNJT04sIHZhbHVlXzEzXzAsIDExKSwKLSAgICBhdHRyX3ByaXYoQVRU
Ul9IVE1MLCB2YWx1ZV8xM18xLCAxNikKLX07Ci0KLURPTVN0cmluZyBET006OmZpbmREZWZBdHRy
Tm9uZSh1c2hvcnQpCi17Ci0gICAgcmV0dXJuIERPTVN0cmluZygpOwotfTsKLURPTVN0cmluZyBE
T006OmZpbmREZWZBdHRyQlIodXNob3J0IGlkKQotewotICAgIHJldHVybiBmaW5kX2F0dHIoaWQs
IGF0dHJfbGlzdF8xKTsKLX0KLURPTVN0cmluZyBET006OmZpbmREZWZBdHRyQSh1c2hvcnQgaWQp
Ci17Ci0gICAgcmV0dXJuIGZpbmRfYXR0cihpZCwgYXR0cl9saXN0XzIpOwotfQotRE9NU3RyaW5n
IERPTTo6ZmluZERlZkF0dHJBUkVBKHVzaG9ydCBpZCkKLXsKLSAgICByZXR1cm4gZmluZF9hdHRy
KGlkLCBhdHRyX2xpc3RfMyk7Ci19Ci1ET01TdHJpbmcgRE9NOjpmaW5kRGVmQXR0clBBUkFNKHVz
aG9ydCBpZCkKLXsKLSAgICByZXR1cm4gZmluZF9hdHRyKGlkLCBhdHRyX2xpc3RfNCk7Ci19Ci1E
T01TdHJpbmcgRE9NOjpmaW5kRGVmQXR0ckZPUk0odXNob3J0IGlkKQotewotICAgIHJldHVybiBm
aW5kX2F0dHIoaWQsIGF0dHJfbGlzdF81KTsKLX0KLURPTVN0cmluZyBET006OmZpbmREZWZBdHRy
SU5QVVQodXNob3J0IGlkKQotewotICAgIHJldHVybiBmaW5kX2F0dHIoaWQsIGF0dHJfbGlzdF82
KTsKLX0KLURPTVN0cmluZyBET006OmZpbmREZWZBdHRyQlVUVE9OKHVzaG9ydCBpZCkKLXsKLSAg
ICByZXR1cm4gZmluZF9hdHRyKGlkLCBhdHRyX2xpc3RfNyk7Ci19Ci1ET01TdHJpbmcgRE9NOjpm
aW5kRGVmQXR0ckNPTEdST1VQKHVzaG9ydCBpZCkKLXsKLSAgICByZXR1cm4gZmluZF9hdHRyKGlk
LCBhdHRyX2xpc3RfOCk7Ci19Ci1ET01TdHJpbmcgRE9NOjpmaW5kRGVmQXR0ckNPTCh1c2hvcnQg
aWQpCi17Ci0gICAgcmV0dXJuIGZpbmRfYXR0cihpZCwgYXR0cl9saXN0XzkpOwotfQotRE9NU3Ry
aW5nIERPTTo6ZmluZERlZkF0dHJUSCh1c2hvcnQgaWQpCi17Ci0gICAgcmV0dXJuIGZpbmRfYXR0
cihpZCwgYXR0cl9saXN0XzEwKTsKLX0KLURPTVN0cmluZyBET006OmZpbmREZWZBdHRyRlJBTUUo
dXNob3J0IGlkKQotewotICAgIHJldHVybiBmaW5kX2F0dHIoaWQsIGF0dHJfbGlzdF8xMSk7Ci19
Ci1ET01TdHJpbmcgRE9NOjpmaW5kRGVmQXR0cklGUkFNRSh1c2hvcnQgaWQpCi17Ci0gICAgcmV0
dXJuIGZpbmRfYXR0cihpZCwgYXR0cl9saXN0XzEyKTsKLX0KLURPTVN0cmluZyBET006OmZpbmRE
ZWZBdHRySFRNTCh1c2hvcnQgaWQpCi17Ci0gICAgcmV0dXJuIGZpbmRfYXR0cihpZCwgYXR0cl9s
aXN0XzEzKTsKLX0KLQotI2VuZGlmCkluZGV4OiBraHRtbC9odG1sL2R0ZC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwvZHRkLmgsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuNQpkaWZmIC11IC1wIC1yMS41IGtodG1sL2h0bWwvZHRkLmgKLS0tIGtodG1s
L2h0bWwvZHRkLmgJMTIgQXByIDIwMDUgMjI6NDk6NDEgLTAwMDAJMS41CisrKyBraHRtbC9odG1s
L2R0ZC5oCTIyIEp1biAyMDA1IDIzOjIzOjIxIC0wMDAwCkBAIC0yMywzNiArMjMsMTEgQEAKICNk
ZWZpbmUgX0RPTV9kdGRfaF8KIAogI2luY2x1ZGUgImRvbS9kb21fc3RyaW5nLmgiCi0jaW5jbHVk
ZSAibWlzYy9odG1sdGFncy5oIgogCiBuYW1lc3BhY2UgRE9NCiB7CiAKLXZvaWQgYWRkRm9yYmlk
ZGVuKGludCB0YWdJZCwgdXNob3J0ICpmb3JiaWRkZW5UYWdzKTsKLXZvaWQgcmVtb3ZlRm9yYmlk
ZGVuKGludCB0YWdJZCwgdXNob3J0ICpmb3JiaWRkZW5UYWdzKTsKLQotZW51bSB0YWdTdGF0dXMg
eyBPUFRJT05BTCwgUkVRVUlSRUQsIEZPUkJJRERFTiB9OwotCiBib29sIGNoZWNrQ2hpbGQodXNo
b3J0IHRhZ0lELCB1c2hvcnQgY2hpbGRJRCwgYm9vbCBzdHJpY3QpOwogCi1leHRlcm4gY29uc3Qg
dW5zaWduZWQgc2hvcnQgdGFnUHJpb3JpdHlBcnJheVtdOwotZXh0ZXJuIGNvbnN0IHRhZ1N0YXR1
cyBlbmRUYWdBcnJheVtdOwotCi1pbmxpbmUgdW5zaWduZWQgc2hvcnQgdGFnUHJpb3JpdHkoUV9V
SU5UMzIgdGFnSWQpCi17Ci0gICAgLy8gVHJlYXQgY3VzdG9tIGVsZW1lbnRzIHRoZSBzYW1lIGFz
IDxzcGFuPjsgYWxzbyBkb24ndCByZWFkIHBhc3QgdGhlIGVuZCBvZiB0aGUgYXJyYXkuCi0gICAg
aWYgKHRhZ0lkID4gSURfTEFTVF9UQUcpCi0gICAgICAgIHJldHVybiB0YWdQcmlvcml0eUFycmF5
W0lEX1NQQU5dOwotICAgIHJldHVybiB0YWdQcmlvcml0eUFycmF5W3RhZ0lkXTsKLX0KLQotaW5s
aW5lIHRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudChRX1VJTlQzMiB0YWdJZCkKLXsKLSAgICAv
LyBUcmVhdCBjdXN0b20gZWxlbWVudHMgdGhlIHNhbWUgYXMgPHNwYW4+OyBhbHNvIGRvbid0IHJl
YWQgcGFzdCB0aGUgZW5kIG9mIHRoZSBhcnJheS4KLSAgICBpZiAodGFnSWQgPiBJRF9MQVNUX1RB
RykKLSAgICAgICAgcmV0dXJuIGVuZFRhZ0FycmF5W0lEX1NQQU5dOwotICAgIHJldHVybiBlbmRU
YWdBcnJheVt0YWdJZF07Ci19Ci0KIH0gLy9uYW1lc3BhY2UgRE9NCiAjZW5kaWYKSW5kZXg6IGto
dG1sL2h0bWwvaHRtbF9iYXNlaW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sX2Jhc2VpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS43MgpkaWZmIC11IC1wIC1yMS43MiBraHRtbC9odG1sL2h0bWxfYmFzZWltcGwuY3BwCi0t
LSBraHRtbC9odG1sL2h0bWxfYmFzZWltcGwuY3BwCTEyIE1heSAyMDA1IDE3OjExOjIxIC0wMDAw
CTEuNzIKKysrIGtodG1sL2h0bWwvaHRtbF9iYXNlaW1wbC5jcHAJMjIgSnVuIDIwMDUgMjM6MjM6
MjEgLTAwMDAKQEAgLTQ4LDcgKzQ4LDcgQEAgdXNpbmcgbmFtZXNwYWNlIERPTTsKIHVzaW5nIG5h
bWVzcGFjZSBraHRtbDsKIAogSFRNTEJvZHlFbGVtZW50SW1wbDo6SFRNTEJvZHlFbGVtZW50SW1w
bChEb2N1bWVudFB0ciAqZG9jKQotICAgIDogSFRNTEVsZW1lbnRJbXBsKGRvYyksIG1fbGlua0Rl
Y2woMCkKKyAgICA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6OmJvZHkoKSwgZG9jKSwgbV9s
aW5rRGVjbCgwKQogewogfQogCkBAIC02MSwxMSArNjEsNiBAQCBIVE1MQm9keUVsZW1lbnRJbXBs
Ojp+SFRNTEJvZHlFbGVtZW50SW1wCiAgICAgfQogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTEJvZHlF
bGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9CT0RZOwotfQotCiB2b2lk
IEhUTUxCb2R5RWxlbWVudEltcGw6OmNyZWF0ZUxpbmtEZWNsKCkKIHsKICAgICBtX2xpbmtEZWNs
ID0gbmV3IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uSW1wbDsKQEAgLTI4OSw3ICsyODQsMTgg
QEAgdm9pZCBIVE1MQm9keUVsZW1lbnRJbXBsOjpzZXRWTGluayhjb25zdAogLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQogCiBIVE1MRnJhbWVFbGVtZW50SW1wbDo6SFRNTEZyYW1lRWxlbWVudEltcGwoRG9j
dW1lbnRQdHIgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50SW1wbChkb2MpCisgICAgOiBIVE1MRWxl
bWVudEltcGwoSFRNTE5hbWVzOjpmcmFtZSgpLCBkb2MpCit7CisgICAgaW5pdCgpOworfQorCitI
VE1MRnJhbWVFbGVtZW50SW1wbDo6SFRNTEZyYW1lRWxlbWVudEltcGwoY29uc3QgUXVhbGlmaWVk
TmFtZSYgdGFnTmFtZSwgRG9jdW1lbnRQdHIgKmRvYykKKyAgICA6IEhUTUxFbGVtZW50SW1wbCh0
YWdOYW1lLCBkb2MpCit7CisgICAgaW5pdCgpOworfQorCit2b2lkIEhUTUxGcmFtZUVsZW1lbnRJ
bXBsOjppbml0KCkKIHsKICAgICBtX2ZyYW1lQm9yZGVyID0gdHJ1ZTsKICAgICBtX2ZyYW1lQm9y
ZGVyU2V0ID0gZmFsc2U7CkBAIC0zMDMsMTEgKzMwOSw2IEBAIEhUTUxGcmFtZUVsZW1lbnRJbXBs
Ojp+SFRNTEZyYW1lRWxlbWVudEkKIHsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxGcmFtZUVsZW1l
bnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0ZSQU1FOwotfQotCiBib29sIEhU
TUxGcmFtZUVsZW1lbnRJbXBsOjppc1VSTEFsbG93ZWQoY29uc3QgQXRvbWljU3RyaW5nICZVUkxT
dHJpbmcpIGNvbnN0CiB7CiAgICAgaWYgKFVSTFN0cmluZy5pc0VtcHR5KCkpIHsKQEAgLTQ4Miw3
ICs0ODMsNyBAQCB2b2lkIEhUTUxGcmFtZUVsZW1lbnRJbXBsOjphdHRhY2goKQogCiAgICAgLy8g
aW5oZXJpdCBkZWZhdWx0IHNldHRpbmdzIGZyb20gcGFyZW50IGZyYW1lc2V0CiAgICAgZm9yIChO
b2RlSW1wbCAqbm9kZSA9IHBhcmVudE5vZGUoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPnBhcmVudE5v
ZGUoKSkKLSAgICAgICAgaWYgKG5vZGUtPmlkKCkgPT0gSURfRlJBTUVTRVQpIHsKKyAgICAgICAg
aWYgKG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpmcmFtZXNldCgpKSkgewogICAgICAgICAg
ICAgSFRNTEZyYW1lU2V0RWxlbWVudEltcGwqIGZyYW1lc2V0ID0gc3RhdGljX2Nhc3Q8SFRNTEZy
YW1lU2V0RWxlbWVudEltcGwqPihub2RlKTsKICAgICAgICAgICAgIGlmICghbV9mcmFtZUJvcmRl
clNldCkKICAgICAgICAgICAgICAgICBtX2ZyYW1lQm9yZGVyID0gZnJhbWVzZXQtPmZyYW1lQm9y
ZGVyKCk7CkBAIC02NjEsNyArNjYyLDcgQEAgdm9pZCBIVE1MRnJhbWVFbGVtZW50SW1wbDo6c2V0
U3JjKGNvbnN0IAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MRnJhbWVTZXRFbGVtZW50SW1w
bDo6SFRNTEZyYW1lU2V0RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgICA6IEhUTUxF
bGVtZW50SW1wbChkb2MpCisgICAgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjpmcmFtZXNl
dCgpLCBkb2MpCiB7CiAgICAgLy8gZGVmYXVsdCB2YWx1ZSBmb3Igcm93cyBhbmQgY29scy4uLgog
ICAgIG1fdG90YWxSb3dzID0gMTsKQEAgLTY4NSwxMSArNjg2LDYgQEAgSFRNTEZyYW1lU2V0RWxl
bWVudEltcGw6On5IVE1MRnJhbWVTZXRFbAogICAgICAgICBkZWxldGUgW10gbV9jb2xzOwogfQog
Ci1Ob2RlSW1wbDo6SWQgSFRNTEZyYW1lU2V0RWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gSURfRlJBTUVTRVQ7Ci19Ci0KIHZvaWQgSFRNTEZyYW1lU2V0RWxlbWVudEltcGw6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIpCiB7CiAgICAg
c3dpdGNoKGF0dHItPmlkKCkpCkBAIC03NTIsOCArNzQ4LDcgQEAgdm9pZCBIVE1MRnJhbWVTZXRF
bGVtZW50SW1wbDo6YXR0YWNoKCkKICAgICBIVE1MRWxlbWVudEltcGwqIG5vZGUgPSBzdGF0aWNf
Y2FzdDxIVE1MRWxlbWVudEltcGwqPihwYXJlbnROb2RlKCkpOwogICAgIHdoaWxlKG5vZGUpCiAg
ICAgewotICAgICAgICBpZihub2RlLT5pZCgpID09IElEX0ZSQU1FU0VUKQotICAgICAgICB7Cisg
ICAgICAgIGlmIChub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZnJhbWVzZXQoKSkpIHsKICAg
ICAgICAgICAgIEhUTUxGcmFtZVNldEVsZW1lbnRJbXBsKiBmcmFtZXNldCA9IHN0YXRpY19jYXN0
PEhUTUxGcmFtZVNldEVsZW1lbnRJbXBsKj4obm9kZSk7CiAgICAgICAgICAgICBpZighZnJhbWVC
b3JkZXJTZXQpICBmcmFtZWJvcmRlciA9IGZyYW1lc2V0LT5mcmFtZUJvcmRlcigpOwogICAgICAg
ICAgICAgaWYoIW5vcmVzaXplKSAgbm9yZXNpemUgPSBmcmFtZXNldC0+bm9SZXNpemUoKTsKQEAg
LTgxNyw3ICs4MTIsNyBAQCB2b2lkIEhUTUxGcmFtZVNldEVsZW1lbnRJbXBsOjpzZXRSb3dzKGNv
CiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxIZWFkRWxlbWVudEltcGw6OkhUTUxIZWFkRWxl
bWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50SW1wbChkb2MpCisg
ICAgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjpoZWFkKCksIGRvYykKIHsKIH0KIApAQCAt
ODI1LDExICs4MjAsNiBAQCBIVE1MSGVhZEVsZW1lbnRJbXBsOjp+SFRNTEhlYWRFbGVtZW50SW1w
CiB7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MSGVhZEVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIElEX0hFQUQ7Ci19Ci0KIERPTVN0cmluZyBIVE1MSGVhZEVsZW1lbnRJbXBs
Ojpwcm9maWxlKCkgY29uc3QKIHsKICAgICByZXR1cm4gZ2V0QXR0cmlidXRlKEFUVFJfUFJPRklM
RSk7CkBAIC04NDMsNyArODMzLDcgQEAgdm9pZCBIVE1MSGVhZEVsZW1lbnRJbXBsOjpzZXRQcm9m
aWxlKGNvbgogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MSHRtbEVsZW1lbnRJbXBsOjpIVE1M
SHRtbEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0gICAgOiBIVE1MRWxlbWVudEltcGwo
ZG9jKQorICAgIDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6aHRtbCgpLCBkb2MpCiB7CiB9
CiAKQEAgLTg1MSwxMSArODQxLDYgQEAgSFRNTEh0bWxFbGVtZW50SW1wbDo6fkhUTUxIdG1sRWxl
bWVudEltcAogewogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTEh0bWxFbGVtZW50SW1wbDo6aWQoKSBj
b25zdAotewotICAgIHJldHVybiBJRF9IVE1MOwotfQotCiBET01TdHJpbmcgSFRNTEh0bWxFbGVt
ZW50SW1wbDo6dmVyc2lvbigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGdldEF0dHJpYnV0ZShBVFRS
X1ZFUlNJT04pOwpAQCAtODY4LDcgKzg1Myw3IEBAIHZvaWQgSFRNTEh0bWxFbGVtZW50SW1wbDo6
c2V0VmVyc2lvbihjb24KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1IVE1MSUZyYW1lRWxlbWVu
dEltcGw6OkhUTUxJRnJhbWVFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKSA6IEhUTUxGcmFt
ZUVsZW1lbnRJbXBsKGRvYykKK0hUTUxJRnJhbWVFbGVtZW50SW1wbDo6SFRNTElGcmFtZUVsZW1l
bnRJbXBsKERvY3VtZW50UHRyICpkb2MpIDogSFRNTEZyYW1lRWxlbWVudEltcGwoSFRNTE5hbWVz
OjppZnJhbWUoKSwgZG9jKQogewogICAgIG1fZnJhbWVCb3JkZXIgPSBmYWxzZTsKICAgICBtX21h
cmdpbldpZHRoID0gLTE7CkBAIC04ODAsMTEgKzg2NSw2IEBAIEhUTUxJRnJhbWVFbGVtZW50SW1w
bDo6fkhUTUxJRnJhbWVFbGVtZW4KIHsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxJRnJhbWVFbGVt
ZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9JRlJBTUU7Ci19Ci0KIGJvb2wg
SFRNTElGcmFtZUVsZW1lbnRJbXBsOjptYXBUb0VudHJ5KE5vZGVJbXBsOjpJZCBhdHRyLCBNYXBw
ZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdAogewogICAgIHN3aXRjaCAoYXR0cikgewpJ
bmRleDoga2h0bWwvaHRtbC9odG1sX2Jhc2VpbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sX2Jhc2VpbXBsLmgsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuMjcKZGlmZiAtdSAtcCAtcjEuMjcga2h0bWwvaHRtbC9odG1sX2Jhc2VpbXBsLmgK
LS0tIGtodG1sL2h0bWwvaHRtbF9iYXNlaW1wbC5oCTExIE1heSAyMDA1IDA1OjQ5OjM0IC0wMDAw
CTEuMjcKKysrIGtodG1sL2h0bWwvaHRtbF9iYXNlaW1wbC5oCTIyIEp1biAyMDA1IDIzOjIzOjIy
IC0wMDAwCkBAIC0yNiw3ICsyNiw2IEBACiAjaWZuZGVmIEhUTUxfQkFTRUlNUExfSAogI2RlZmlu
ZSBIVE1MX0JBU0VJTVBMX0gKIAotI2luY2x1ZGUgImh0bWwvZHRkLmgiCiAjaW5jbHVkZSAiaHRt
bC9odG1sX2VsZW1lbnRpbXBsLmgiCiAjaW5jbHVkZSAibWlzYy9raHRtbGxheW91dC5oIgogCkBA
IC01NSw4ICs1NCw4IEBAIHB1YmxpYzoKICAgICBIVE1MQm9keUVsZW1lbnRJbXBsKERvY3VtZW50
UHRyICpkb2MpOwogICAgIH5IVE1MQm9keUVsZW1lbnRJbXBsKCk7CiAKLSAgICB2aXJ0dWFsIElk
IGlkKCkgY29uc3Q7Ci0KKyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0
dXJuIDEwOyB9CisgICAKICAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShOb2RlSW1wbDo6SWQg
YXR0ciwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3Q7CiAgICAgdmlydHVhbCB2
b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKik7CiAKQEAgLTky
LDExICs5MSwxNCBAQCBjbGFzcyBIVE1MRnJhbWVFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MCiAK
IHB1YmxpYzoKICAgICBIVE1MRnJhbWVFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKTsKLQor
ICAgIEhUTUxGcmFtZUVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERv
Y3VtZW50UHRyKiBkb2MpOwogICAgIH5IVE1MRnJhbWVFbGVtZW50SW1wbCgpOwogCi0gICAgdmly
dHVhbCBJZCBpZCgpIGNvbnN0OworICAgIHZvaWQgaW5pdCgpOwogCisgICAgdmlydHVhbCBIVE1M
VGFnU3RhdHVzIGVuZFRhZ3JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gRk9SQklEREVOOyB9
CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAwOyB9CisgIAog
ICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBs
ICopOwogICAgIHZpcnR1YWwgdm9pZCBhdHRhY2goKTsKICAgICB2aXJ0dWFsIHZvaWQgZGV0YWNo
KCk7CkBAIC0xNzEsNyArMTczLDcgQEAgcHVibGljOgogCiAgICAgfkhUTUxGcmFtZVNldEVsZW1l
bnRJbXBsKCk7CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQg
dGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAxMDsgfQogCiAgICAgdmlydHVhbCB2b2lkIHBh
cnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKik7CiAgICAgdmlydHVhbCB2
b2lkIGF0dGFjaCgpOwpAQCAtMjE5LDcgKzIyMSw4IEBAIHB1YmxpYzoKIAogICAgIH5IVE1MSGVh
ZEVsZW1lbnRJbXBsKCk7CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CisgICAgdmlydHVh
bCBIVE1MVGFnU3RhdHVzIGVuZFRhZ3JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gT1BUSU9O
QUw7IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDEwOyB9
CiAKICAgICBET01TdHJpbmcgcHJvZmlsZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0UHJvZmlsZShj
b25zdCBET01TdHJpbmcgJik7CkBAIC0yMzMsNyArMjM2LDcgQEAgcHVibGljOgogICAgIEhUTUxI
dG1sRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYyk7CiAgICAgfkhUTUxIdG1sRWxlbWVudElt
cGwoKTsKIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCB0YWdQ
cmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDExOyB9CiAKICAgICBET01TdHJpbmcgdmVyc2lvbigp
IGNvbnN0OwogICAgIHZvaWQgc2V0VmVyc2lvbihjb25zdCBET01TdHJpbmcgJik7CkBAIC0yNDYs
MTEgKzI0OSw4IEBAIGNsYXNzIEhUTUxJRnJhbWVFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE0KIHsK
IHB1YmxpYzoKICAgICBIVE1MSUZyYW1lRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYyk7Ci0K
ICAgICB+SFRNTElGcmFtZUVsZW1lbnRJbXBsKCk7CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29u
c3Q7Ci0KICAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShOb2RlSW1wbDo6SWQgYXR0ciwgTWFw
cGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNl
TWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIpOwogCkluZGV4OiBraHRt
bC9odG1sL2h0bWxfYmxvY2tpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3Qv
V2ViQ29yZS9raHRtbC9odG1sL2h0bWxfYmxvY2tpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS4xNwpkaWZmIC11IC1wIC1yMS4xNyBraHRtbC9odG1sL2h0bWxfYmxvY2tpbXBsLmNwcAot
LS0ga2h0bWwvaHRtbC9odG1sX2Jsb2NraW1wbC5jcHAJMTEgTWF5IDIwMDUgMDU6NDk6MzQgLTAw
MDAJMS4xNworKysga2h0bWwvaHRtbC9odG1sX2Jsb2NraW1wbC5jcHAJMjIgSnVuIDIwMDUgMjM6
MjM6MjIgLTAwMDAKQEAgLTM3LDcgKzM3LDcgQEAgdXNpbmcgbmFtZXNwYWNlIGtodG1sOwogdXNp
bmcgbmFtZXNwYWNlIERPTTsKIAogSFRNTEJsb2NrcXVvdGVFbGVtZW50SW1wbDo6SFRNTEJsb2Nr
cXVvdGVFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAgIDogSFRNTEVsZW1lbnRJbXBs
KGRvYykKKyAgICA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6OmJsb2NrcXVvdGUoKSwgZG9j
KQogewogfQogCkBAIC00NSwxMSArNDUsNiBAQCBIVE1MQmxvY2txdW90ZUVsZW1lbnRJbXBsOjp+
SFRNTEJsb2NrcXVvCiB7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MQmxvY2txdW90ZUVsZW1lbnRJ
bXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0JMT0NLUVVPVEU7Ci19Ci0KIERPTVN0
cmluZyBIVE1MQmxvY2txdW90ZUVsZW1lbnRJbXBsOjpjaXRlKCkgY29uc3QKIHsKICAgICByZXR1
cm4gZ2V0QXR0cmlidXRlKEFUVFJfQ0lURSk7CkBAIC02Myw3ICs1OCw3IEBAIHZvaWQgSFRNTEJs
b2NrcXVvdGVFbGVtZW50SW1wbDo6c2V0Q2l0ZSgKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogSFRN
TERpdkVsZW1lbnRJbXBsOjpIVE1MRGl2RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAg
ICA6IEhUTUxFbGVtZW50SW1wbChkb2MpCisgICAgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVz
OjpkaXYoKSwgZG9jKQogewogfQogCkBAIC03MSwxMSArNjYsNiBAQCBIVE1MRGl2RWxlbWVudElt
cGw6On5IVE1MRGl2RWxlbWVudEltcGwoCiB7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MRGl2RWxl
bWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfRElWOwotfQotCiBib29sIEhU
TUxEaXZFbGVtZW50SW1wbDo6bWFwVG9FbnRyeShOb2RlSW1wbDo6SWQgYXR0ciwgTWFwcGVkQXR0
cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3QKIHsKICAgICBpZiAoYXR0ciA9PSBBVFRSX0FMSUdO
KSB7CkBAIC0xMjAsNyArMTEwLDcgQEAgdm9pZCBIVE1MRGl2RWxlbWVudEltcGw6OnNldEFsaWdu
KGNvbnN0IAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MSFJFbGVtZW50SW1wbDo6SFRNTEhS
RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50SW1wbChkb2Mp
CisgICAgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjpocigpLCBkb2MpCiB7CiB9CiAKQEAg
LTEyOCwxMSArMTE4LDYgQEAgSFRNTEhSRWxlbWVudEltcGw6On5IVE1MSFJFbGVtZW50SW1wbCgp
CiB7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MSFJFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewot
ICAgIHJldHVybiBJRF9IUjsKLX0KLQogYm9vbCBIVE1MSFJFbGVtZW50SW1wbDo6bWFwVG9FbnRy
eShOb2RlSW1wbDo6SWQgYXR0ciwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3QK
IHsKICAgICBzd2l0Y2ggKGF0dHIpIHsKQEAgLTI1Miw4ICsyMzcsOCBAQCB2b2lkIEhUTUxIUkVs
ZW1lbnRJbXBsOjpzZXRXaWR0aChjb25zdCBECiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSFRN
TEhlYWRpbmdFbGVtZW50SW1wbDo6SFRNTEhlYWRpbmdFbGVtZW50SW1wbChEb2N1bWVudFB0ciAq
ZG9jLCB1c2hvcnQgX3RhZ2lkKQotICAgIDogSFRNTEdlbmVyaWNFbGVtZW50SW1wbChkb2MsIF90
YWdpZCkKK0hUTUxIZWFkaW5nRWxlbWVudEltcGw6OkhUTUxIZWFkaW5nRWxlbWVudEltcGwoY29u
c3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnRQdHIgKmRvYykKKyAgICA6IEhUTUxF
bGVtZW50SW1wbCh0YWdOYW1lLCBkb2MpCiB7CiB9CiAKQEAgLTI3MCwxMyArMjU1LDggQEAgdm9p
ZCBIVE1MSGVhZGluZ0VsZW1lbnRJbXBsOjpzZXRBbGlnbihjbwogLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQogCiBIVE1MUGFyYWdyYXBoRWxlbWVudEltcGw6OkhUTUxQYXJhZ3JhcGhFbGVtZW50SW1wbChE
b2N1bWVudFB0ciAqZG9jKQotICAgIDogSFRNTEVsZW1lbnRJbXBsKGRvYykKLXsKLX0KLQotTm9k
ZUltcGw6OklkIEhUTUxQYXJhZ3JhcGhFbGVtZW50SW1wbDo6aWQoKSBjb25zdAorICAgIDogSFRN
TEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6cCgpLCBkb2MpCiB7Ci0gICAgcmV0dXJuIElEX1A7CiB9
CiAKIGJvb2wgSFRNTFBhcmFncmFwaEVsZW1lbnRJbXBsOjptYXBUb0VudHJ5KE5vZGVJbXBsOjpJ
ZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdApAQCAtMzIyLDggKzMw
Miw4IEBAIHZvaWQgSFRNTFBhcmFncmFwaEVsZW1lbnRJbXBsOjpzZXRBbGlnbigKIAogLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQogCi1IVE1MUHJlRWxlbWVudEltcGw6OkhUTUxQcmVFbGVtZW50SW1wbChE
b2N1bWVudFB0ciAqZG9jLCB1bnNpZ25lZCBzaG9ydCBfdGFnaWQpCi0gICAgOiBIVE1MR2VuZXJp
Y0VsZW1lbnRJbXBsKGRvYywgX3RhZ2lkKQorSFRNTFByZUVsZW1lbnRJbXBsOjpIVE1MUHJlRWxl
bWVudEltcGwoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnRQdHIgKmRvYykK
KyAgICA6IEhUTUxFbGVtZW50SW1wbCh0YWdOYW1lLCBkb2MpCiB7CiB9CiAKQEAgLTM0MywxNiAr
MzIzLDExIEBAIHZvaWQgSFRNTFByZUVsZW1lbnRJbXBsOjpzZXRXaWR0aChsb25nIHcKIGNvbnN0
IGludCBkZWZhdWx0TWluaW11bURlbGF5ID0gNjA7CiAKIEhUTUxNYXJxdWVlRWxlbWVudEltcGw6
OkhUTUxNYXJxdWVlRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLTogSFRNTEVsZW1lbnRJ
bXBsKGRvYyksCis6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6Om1hcnF1ZWUoKSwgZG9jKSwK
ICAgbV9taW5pbXVtRGVsYXkoZGVmYXVsdE1pbmltdW1EZWxheSkKIHsKIH0KIAotTm9kZUltcGw6
OklkIEhUTUxNYXJxdWVlRWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURf
TUFSUVVFRTsKLX0KLQogYm9vbCBIVE1MTWFycXVlZUVsZW1lbnRJbXBsOjptYXBUb0VudHJ5KE5v
ZGVJbXBsOjpJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdAogewog
ICAgIHN3aXRjaCAoYXR0cikgewpAQCAtNDM0LDE5ICs0MDksMyBAQCB2b2lkIEhUTUxNYXJxdWVl
RWxlbWVudEltcGw6OnBhcnNlTWFwcGVkCiAgICAgICAgICAgICBIVE1MRWxlbWVudEltcGw6OnBh
cnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwogICAgIH0KIH0KLQotLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0KLUhUTUxMYXllckVsZW1lbnRJbXBsOjpIVE1MTGF5ZXJFbGVtZW50SW1wbChEb2N1bWVudFB0
ciAqZG9jKQotICAgIDogSFRNTERpdkVsZW1lbnRJbXBsKCBkb2MgKQotewotfQotCi1IVE1MTGF5
ZXJFbGVtZW50SW1wbDo6fkhUTUxMYXllckVsZW1lbnRJbXBsKCkKLXsKLX0KLQotTm9kZUltcGw6
OklkIEhUTUxMYXllckVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0xB
WUVSOwotfQpJbmRleDoga2h0bWwvaHRtbC9odG1sX2Jsb2NraW1wbC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbF9ibG9ja2ltcGwuaCx2CnJl
dHJpZXZpbmcgcmV2aXNpb24gMS45CmRpZmYgLXUgLXAgLXIxLjkga2h0bWwvaHRtbC9odG1sX2Js
b2NraW1wbC5oCi0tLSBraHRtbC9odG1sL2h0bWxfYmxvY2tpbXBsLmgJMTEgTWF5IDIwMDUgMDU6
NDk6MzQgLTAwMDAJMS45CisrKyBraHRtbC9odG1sL2h0bWxfYmxvY2tpbXBsLmgJMjIgSnVuIDIw
MDUgMjM6MjM6MjIgLTAwMDAKQEAgLTI2LDcgKzI2LDYgQEAKICNkZWZpbmUgSFRNTF9CTE9DS0lN
UExfSAogCiAjaW5jbHVkZSAiaHRtbF9lbGVtZW50aW1wbC5oIgotI2luY2x1ZGUgImR0ZC5oIgog
CiBuYW1lc3BhY2UgRE9NIHsKIApAQCAtNDAsOCArMzksOCBAQCBwdWJsaWM6CiAgICAgSFRNTEJs
b2NrcXVvdGVFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKTsKICAgICB+SFRNTEJsb2NrcXVv
dGVFbGVtZW50SW1wbCgpOwogCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwotCisgICAgdmly
dHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiA1OyB9CisgICAgCiAgICAgRE9N
U3RyaW5nIGNpdGUoKSBjb25zdDsKICAgICB2b2lkIHNldENpdGUoY29uc3QgRE9NU3RyaW5nICYp
OwogfTsKQEAgLTU1LDggKzU0LDggQEAgY2xhc3MgSFRNTERpdkVsZW1lbnRJbXBsIDogcHVibGlj
IEhUTUxFbAogcHVibGljOgogICAgIEhUTUxEaXZFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9j
KTsKICAgICB+SFRNTERpdkVsZW1lbnRJbXBsKCk7Ci0KLSAgICB2aXJ0dWFsIElkIGlkKCkgY29u
c3Q7CisgICAgCisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiA1
OyB9CiAgICAgCiAgICAgdmlydHVhbCBib29sIG1hcFRvRW50cnkoSWQgYXR0ciwgTWFwcGVkQXR0
cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVk
QXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKnRva2VuKTsKQEAgLTcyLDggKzcxLDkgQEAg
Y2xhc3MgSFRNTEhSRWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTEVsZQogcHVibGljOgogICAgIEhU
TUxIUkVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpOwogICAgIH5IVE1MSFJFbGVtZW50SW1w
bCgpOwotCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OworICAgIAorICAgIHZpcnR1YWwgSFRN
TFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIEZPUkJJRERFTjsg
fQorICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMDsgfQogICAg
IAogICAgIHZpcnR1YWwgYm9vbCBtYXBUb0VudHJ5KElkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVu
dHJ5JiByZXN1bHQpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0
ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICopOwpAQCAtOTMsMTAgKzkzLDEyIEBAIHB1YmxpYzoKIAog
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogCi1jbGFzcyBIVE1MSGVhZGluZ0VsZW1lbnRJbXBsIDogcHVi
bGljIEhUTUxHZW5lcmljRWxlbWVudEltcGwKK2NsYXNzIEhUTUxIZWFkaW5nRWxlbWVudEltcGwg
OiBwdWJsaWMgSFRNTEVsZW1lbnRJbXBsCiB7CiBwdWJsaWM6Ci0gICAgSFRNTEhlYWRpbmdFbGVt
ZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCB1c2hvcnQgX3RhZ2lkKTsKKyAgICBIVE1MSGVhZGlu
Z0VsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50UHRyICpk
b2MpOworCisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiA1OyB9
CiAKICAgICBET01TdHJpbmcgYWxpZ24oKSBjb25zdDsKICAgICB2b2lkIHNldEFsaWduKGNvbnN0
IERPTVN0cmluZyAmKTsKQEAgLTEwNCwyMSArMTA2LDE2IEBAIHB1YmxpYzoKIAogLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQogCi0vKgotICogd2VyZSBub3QgdXNpbmcgSFRNTEVsZW1lbnRJbXBsIGFzIHBh
cmVudCBjbGFzcywgc2luY2UgYQotICogcGFyYWdyYXBoIHNob3VsZCBiZSBhYmxlIHRvIGZsb3cg
YXJvdW5kIGFsaWduZWQgb2JqZWN0cy4gVGh1cwotICogYSA8cD4gZWxlbWVudCBoYXMgdG8gYmUg
aW5saW5lLCBhbmQgaXMgcmVuZGVyZWQgYnkKLSAqIEhUTUxCbG9ja0ltcGw6OmNhbGNQYXJhZ3Jh
cGgKLSAqLwogY2xhc3MgSFRNTFBhcmFncmFwaEVsZW1lbnRJbXBsIDogcHVibGljIEhUTUxFbGVt
ZW50SW1wbAogewogcHVibGljOgogICAgIEhUTUxQYXJhZ3JhcGhFbGVtZW50SW1wbChEb2N1bWVu
dFB0ciAqZG9jKTsKIAorICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVu
dCgpIGNvbnN0IHsgcmV0dXJuIE9QVElPTkFMOyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3Jp
dHkoKSBjb25zdCB7IHJldHVybiAzOyB9CisgICAgCiAgICAgdmlydHVhbCBib29sIG1hcFRvRW50
cnkoSWQgYXR0ciwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3Q7CiAgICAgdmly
dHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIp
OwotICAgIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKIAogICAgIERPTVN0cmluZyBhbGln
bigpIGNvbnN0OwogICAgIHZvaWQgc2V0QWxpZ24oY29uc3QgRE9NU3RyaW5nICYpOwpAQCAtMTI2
LDEzICsxMjMsMTMgQEAgcHVibGljOgogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLWNsYXNzIEhU
TUxQcmVFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MR2VuZXJpY0VsZW1lbnRJbXBsCitjbGFzcyBI
VE1MUHJlRWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTEVsZW1lbnRJbXBsCiB7CiBwdWJsaWM6Ci0g
ICAgSFRNTFByZUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIHVzaG9ydCBfdGFnaWQpOwor
ICAgIEhUTUxQcmVFbGVtZW50SW1wbChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1
bWVudFB0ciAqZG9jKTsKIAogICAgIGxvbmcgd2lkdGgoKSBjb25zdDsKLSAgICB2b2lkIHNldFdp
ZHRoKCBsb25nIHcgKTsKKyAgICB2b2lkIHNldFdpZHRoKGxvbmcgdyk7CiB9OwogCiAvLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCkBAIC0xNDEsOCArMTM4LDYgQEAgY2xhc3MgSFRNTE1hcnF1ZWVFbGVtZW50
SW1wbCA6IHB1YmxpYyBIVAogewogcHVibGljOgogICAgIEhUTUxNYXJxdWVlRWxlbWVudEltcGwo
RG9jdW1lbnRQdHIgKmRvYyk7Ci0KLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CiAgICAgCiAg
ICAgdmlydHVhbCBib29sIG1hcFRvRW50cnkoSWQgYXR0ciwgTWFwcGVkQXR0cmlidXRlRW50cnkm
IHJlc3VsdCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1h
cHBlZEF0dHJpYnV0ZUltcGwgKnRva2VuKTsKQEAgLTE1MywxOCArMTQ4LDUgQEAgcHJpdmF0ZToK
ICAgICBpbnQgbV9taW5pbXVtRGVsYXk7CiB9OwogCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNs
YXNzIEhUTUxMYXllckVsZW1lbnRJbXBsIDogcHVibGljIEhUTUxEaXZFbGVtZW50SW1wbAotewot
cHVibGljOgotICAgIEhUTUxMYXllckVsZW1lbnRJbXBsKCBEb2N1bWVudFB0ciAqZG9jICk7Ci0g
ICAgfkhUTUxMYXllckVsZW1lbnRJbXBsKCk7Ci0KLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7
Ci0KLSAgICBib29sIGZpeGVkOwotfTsKLQogfTsgLy9uYW1lc3BhY2UKICNlbmRpZgpJbmRleDog
a2h0bWwvaHRtbC9odG1sX2RvY3VtZW50aW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sX2RvY3VtZW50aW1wbC5jcHAsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuNjAKZGlmZiAtdSAtcCAtcjEuNjAga2h0bWwvaHRtbC9odG1sX2RvY3Vt
ZW50aW1wbC5jcHAKLS0tIGtodG1sL2h0bWwvaHRtbF9kb2N1bWVudGltcGwuY3BwCTExIE1heSAy
MDA1IDAwOjU4OjI4IC0wMDAwCTEuNjAKKysrIGtodG1sL2h0bWwvaHRtbF9kb2N1bWVudGltcGwu
Y3BwCTIyIEp1biAyMDA1IDIzOjIzOjIyIC0wMDAwCkBAIC0yNDYsNyArMjQ2LDcgQEAgVG9rZW5p
emVyICpIVE1MRG9jdW1lbnRJbXBsOjpjcmVhdGVUb2tlbgogYm9vbCBIVE1MRG9jdW1lbnRJbXBs
OjpjaGlsZEFsbG93ZWQoIE5vZGVJbXBsICpuZXdDaGlsZCApCiB7CiAgICAgLy8gIyMjIHN1cHBv
cnQgY29tbWVudHMuIGV0YyBhcyBhIGNoaWxkCi0gICAgcmV0dXJuIChuZXdDaGlsZC0+aWQoKSA9
PSBJRF9IVE1MIHx8IG5ld0NoaWxkLT5pZCgpID09IElEX0NPTU1FTlQpOworICAgIHJldHVybiAo
bmV3Q2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpodG1sKCkpIHx8IG5ld0NoaWxkLT5pc0Nv
bW1lbnROb2RlKCkpOwogfQogCiBFbGVtZW50SW1wbCAqSFRNTERvY3VtZW50SW1wbDo6Y3JlYXRl
RWxlbWVudCggY29uc3QgRE9NU3RyaW5nICZuYW1lLCBpbnQgJmV4Y2VwdGlvbmNvZGUgKQpJbmRl
eDoga2h0bWwvaHRtbC9odG1sX2VsZW1lbnRpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfZWxlbWVudGltcGwuY3BwLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjg3CmRpZmYgLXUgLXAgLXIxLjg3IGtodG1sL2h0bWwvaHRtbF9lbGVt
ZW50aW1wbC5jcHAKLS0tIGtodG1sL2h0bWwvaHRtbF9lbGVtZW50aW1wbC5jcHAJMTMgTWF5IDIw
MDUgMTY6NDg6NTEgLTAwMDAJMS44NworKysga2h0bWwvaHRtbC9odG1sX2VsZW1lbnRpbXBsLmNw
cAkyMiBKdW4gMjAwNSAyMzoyMzoyMyAtMDAwMApAQCAtMjgsNyArMjgsNiBAQAogLy8jZGVmaW5l
IEVWRU5UX0RFQlVHCiAvLyNkZWZpbmUgVU5TVVBQT1JURURfQVRUUgogCi0jaW5jbHVkZSAiaHRt
bC9kdGQuaCIKICNpbmNsdWRlICJodG1sL2h0bWxfZWxlbWVudGltcGwuaCIKICNpbmNsdWRlICJo
dG1sL2h0bWxfZG9jdW1lbnRpbXBsLmgiCiAjaW5jbHVkZSAiaHRtbC9odG1sdG9rZW5pemVyLmgi
CkBAIC01OCw4ICs1Nyw4IEBAIHVzaW5nIG5hbWVzcGFjZSBraHRtbDsKIAogLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CiAKLUhUTUxFbGVtZW50SW1wbDo6SFRNTEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0g
ICAgOiBTdHlsZWRFbGVtZW50SW1wbChkb2MpCitIVE1MRWxlbWVudEltcGw6OkhUTUxFbGVtZW50
SW1wbChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudFB0ciAqZG9jKQorICAg
IDogU3R5bGVkRWxlbWVudEltcGwodGFnTmFtZSwgZG9jKQogewogfQogCkBAIC02Nyw1MSArNjYs
OSBAQCBIVE1MRWxlbWVudEltcGw6On5IVE1MRWxlbWVudEltcGwoKQogewogfQogCi1ib29sIEhU
TUxFbGVtZW50SW1wbDo6aXNJbmxpbmUoKSBjb25zdAotewotICAgIGlmIChyZW5kZXJlcigpKQot
ICAgICAgICByZXR1cm4gRWxlbWVudEltcGw6OmlzSW5saW5lKCk7Ci0gICAgCi0gICAgc3dpdGNo
KGlkKCkpIHsKLSAgICAgICAgY2FzZSBJRF9BOgotICAgICAgICBjYXNlIElEX0ZPTlQ6Ci0gICAg
ICAgIGNhc2UgSURfVFQ6Ci0gICAgICAgIGNhc2UgSURfVToKLSAgICAgICAgY2FzZSBJRF9COgot
ICAgICAgICBjYXNlIElEX0k6Ci0gICAgICAgIGNhc2UgSURfUzoKLSAgICAgICAgY2FzZSBJRF9T
VFJJS0U6Ci0gICAgICAgIGNhc2UgSURfQklHOgotICAgICAgICBjYXNlIElEX1NNQUxMOgotICAg
IAotICAgICAgICAgICAgLy8gJXBocmFzZQotICAgICAgICBjYXNlIElEX0VNOgotICAgICAgICBj
YXNlIElEX1NUUk9ORzoKLSAgICAgICAgY2FzZSBJRF9ERk46Ci0gICAgICAgIGNhc2UgSURfQ09E
RToKLSAgICAgICAgY2FzZSBJRF9TQU1QOgotICAgICAgICBjYXNlIElEX0tCRDoKLSAgICAgICAg
Y2FzZSBJRF9WQVI6Ci0gICAgICAgIGNhc2UgSURfQ0lURToKLSAgICAgICAgY2FzZSBJRF9BQkJS
OgotICAgICAgICBjYXNlIElEX0FDUk9OWU06Ci0gICAgCi0gICAgICAgICAgICAvLyAlc3BlY2lh
bAotICAgICAgICBjYXNlIElEX1NVQjoKLSAgICAgICAgY2FzZSBJRF9TVVA6Ci0gICAgICAgIGNh
c2UgSURfU1BBTjoKLSAgICAgICAgY2FzZSBJRF9OT0JSOgotICAgICAgICBjYXNlIElEX1dCUjoK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICByZXR1cm4gRWxlbWVudEltcGw6OmlzSW5saW5lKCk7Ci0gICAgfQotfQot
CiBOb2RlSW1wbCAqSFRNTEVsZW1lbnRJbXBsOjpjbG9uZU5vZGUoYm9vbCBkZWVwKQogewotICAg
IEhUTUxFbGVtZW50SW1wbCAqY2xvbmUgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwgKj4o
Z2V0RG9jdW1lbnQoKS0+Y3JlYXRlSFRNTEVsZW1lbnQobG9jYWxOYW1lUGFydChpZCgpKSkpOwor
ICAgIEhUTUxFbGVtZW50SW1wbCAqY2xvbmUgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwg
Kj4oZ2V0RG9jdW1lbnQoKS0+Y3JlYXRlSFRNTEVsZW1lbnQobG9jYWxOYW1lKCkpKTsKICAgICBp
ZiAoIWNsb25lKQogICAgICAgICByZXR1cm4gMDsKIApAQCAtMzI1LDI2ICsyODIsMTcgQEAgRE9N
U3RyaW5nIEhUTUxFbGVtZW50SW1wbDo6b3V0ZXJUZXh0KCkgYwogRG9jdW1lbnRGcmFnbWVudElt
cGwgKkhUTUxFbGVtZW50SW1wbDo6Y3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KGNvbnN0IERPTVN0
cmluZyAmaHRtbCkKIHsKICAgICAvLyB0aGUgZm9sbG93aW5nIGlzIGluIGFjY29yZGFuY2Ugd2l0
aCB0aGUgZGVmaW5pdGlvbiBhcyB1c2VkIGJ5IElFCi0gICAgaWYoIGVuZFRhZ1JlcXVpcmVtZW50
KGlkKCkpID09IEZPUkJJRERFTiApCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIC8vIElFIGRp
c2FsbG93cyBpbm5lckhUTUwgb24gaW5saW5lIGVsZW1lbnRzLiBJIGRvbid0IHNlZSB3aHkgd2Ug
c2hvdWxkIGhhdmUgdGhpcyByZXN0cmljdGlvbiwgYXMgb3VyCi0gICAgLy8gZGh0bWwgZW5naW5l
IGNhbiBjb3BlIHdpdGggaXQuIExhcnMKLSAgICAvL2lmICggaXNJbmxpbmUoKSApIHJldHVybiBm
YWxzZTsKLSAgICBzd2l0Y2goIGlkKCkgKSB7Ci0gICAgICAgIGNhc2UgSURfQ09MOgotICAgICAg
ICBjYXNlIElEX0NPTEdST1VQOgotICAgICAgICBjYXNlIElEX0ZSQU1FU0VUOgotICAgICAgICBj
YXNlIElEX0hFQUQ6Ci0gICAgICAgIGNhc2UgSURfU1RZTEU6Ci0gICAgICAgIGNhc2UgSURfVElU
TEU6Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgIH0KLSAgICBpZiAoICFnZXREb2N1bWVudCgpLT5pc0hUTUxEb2N1bWVu
dCgpICkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKGVuZFRhZ1JlcXVpcmVtZW50KCkg
PT0gRk9SQklEREVOKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChoYXNMb2NhbE5hbWUo
SFRNTE5hbWVzOjpjb2woKSkgfHwgaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6Y29sZ3JvdXAoKSkg
fHwgaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6ZnJhbWVzZXQoKSkgfHwKKyAgICAgICAgaGFzTG9j
YWxOYW1lKEhUTUxOYW1lczo6aGVhZCgpKSB8fCBoYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpzdHls
ZSgpKSB8fCBoYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0aXRsZSgpKSkKKyAgICAgICAgcmV0dXJu
IDA7CisKKyAgICBpZiAoIWdldERvY3VtZW50KCktPmlzSFRNTERvY3VtZW50KCkpCisgICAgICAg
IHJldHVybiAwOwogCi0gICAgRG9jdW1lbnRGcmFnbWVudEltcGwgKmZyYWdtZW50ID0gbmV3IERv
Y3VtZW50RnJhZ21lbnRJbXBsKCBkb2NQdHIoKSApOworICAgIERvY3VtZW50RnJhZ21lbnRJbXBs
ICpmcmFnbWVudCA9IG5ldyBEb2N1bWVudEZyYWdtZW50SW1wbChkb2NQdHIoKSk7CiAgICAgZnJh
Z21lbnQtPnJlZigpOwogICAgIHsKICAgICAgICAgSFRNTFRva2VuaXplciB0b2soZG9jUHRyKCks
IGZyYWdtZW50KTsKQEAgLTM1OCwxNCArMzA2LDE0IEBAIERvY3VtZW50RnJhZ21lbnRJbXBsICpI
VE1MRWxlbWVudEltcGw6OmMKICAgICBpbnQgaWdub3JlZEV4Y2VwdGlvbkNvZGU7CiAKICAgICAv
LyB3ZSBuZWVkIHRvIHBvcCA8aHRtbD4gYW5kIDxib2R5PiBlbGVtZW50cyBhbmQgcmVtb3ZlIDxo
ZWFkPiB0bwotICAgIC8vIGFjY29tYWRhdGUgZm9sa3MgcGFzc2luZyBjb21wbGV0ZSBIVE1MIGRv
Y3VtZW50cyB0byBtYWtlIHRoZQorICAgIC8vIGFjY29tbW9kYXRlIGZvbGtzIHBhc3NpbmcgY29t
cGxldGUgSFRNTCBkb2N1bWVudHMgdG8gbWFrZSB0aGUKICAgICAvLyBjaGlsZCBvZiBhbiBlbGVt
ZW50LgogCiAgICAgTm9kZUltcGwgKm5leHROb2RlOwogICAgIGZvciAoTm9kZUltcGwgKm5vZGUg
PSBmcmFnbWVudC0+Zmlyc3RDaGlsZCgpOyBub2RlICE9IE5VTEw7IG5vZGUgPSBuZXh0Tm9kZSkg
ewogICAgICAgICBuZXh0Tm9kZSA9IG5vZGUtPm5leHRTaWJsaW5nKCk7CiAJbm9kZS0+cmVmKCk7
Ci0gICAgICAgIGlmIChub2RlLT5pZCgpID09IElEX0hUTUwgfHwgbm9kZS0+aWQoKSA9PSBJRF9C
T0RZKSB7CisgICAgICAgIGlmIChub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aHRtbCgpKSB8
fCBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Ym9keSgpKSkgewogCSAgICBOb2RlSW1wbCAq
Zmlyc3RDaGlsZCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsKICAgICAgICAgICAgIGlmIChmaXJzdENo
aWxkICE9IE5VTEwpIHsKICAgICAgICAgICAgICAgICBuZXh0Tm9kZSA9IGZpcnN0Q2hpbGQ7CkBA
IC0zNzksOSArMzI3LDkgQEAgRG9jdW1lbnRGcmFnbWVudEltcGwgKkhUTUxFbGVtZW50SW1wbDo6
YwogICAgICAgICAgICAgICAgIGNoaWxkLT5kZXJlZigpOwogCSAgICB9CiAgICAgICAgICAgICBm
cmFnbWVudC0+cmVtb3ZlQ2hpbGQobm9kZSwgaWdub3JlZEV4Y2VwdGlvbkNvZGUpOwotCX0gZWxz
ZSBpZiAobm9kZS0+aWQoKSA9PSBJRF9IRUFEKSB7CisJfSBlbHNlIGlmIChub2RlLT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6aGVhZCgpKSkKIAkgICAgZnJhZ21lbnQtPnJlbW92ZUNoaWxkKG5vZGUs
IGlnbm9yZWRFeGNlcHRpb25Db2RlKTsKLQl9CisKICAgICAgICAgLy8gSW1wb3J0YW50IHRvIGRv
IHRoaXMgZGVyZWYgYWZ0ZXIgcmVtb3ZlQ2hpbGQsIGJlY2F1c2UgaWYgdGhlIG9ubHkgdGhpbmcK
ICAgICAgICAgLy8ga2VlcGluZyBhIG5vZGUgYXJvdW5kIGlzIGEgcGFyZW50IHRoYXQgaXMgbm9u
LTAsIHJlbW92ZUNoaWxkIHdpbGwgbm90CiAgICAgICAgIC8vIGRlbGV0ZSB0aGUgbm9kZS4gVGhp
cyB3b3JrcyBmaW5lIGluIEphdmFTY3JpcHQgYmVjYXVzZSB0aGVyZSdzIGFsd2F5cwpAQCAtNDAw
LDcgKzM0OCw3IEBAIERvY3VtZW50RnJhZ21lbnRJbXBsICpIVE1MRWxlbWVudEltcGw6OmMKIAog
dm9pZCBIVE1MRWxlbWVudEltcGw6OnNldElubmVySFRNTChjb25zdCBET01TdHJpbmcgJmh0bWws
IGludCAmZXhjZXB0aW9uKQogewotICAgIERvY3VtZW50RnJhZ21lbnRJbXBsICpmcmFnbWVudCA9
IGNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCggaHRtbCApOworICAgIERvY3VtZW50RnJhZ21lbnRJ
bXBsICpmcmFnbWVudCA9IGNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudChodG1sKTsKICAgICBpZiAo
ZnJhZ21lbnQgPT0gTlVMTCkgewogCWV4Y2VwdGlvbiA9IERPTUV4Y2VwdGlvbjo6Tk9fTU9ESUZJ
Q0FUSU9OX0FMTE9XRURfRVJSOwogICAgICAgICByZXR1cm47CkBAIC00MTgsNyArMzY2LDcgQEAg
dm9pZCBIVE1MRWxlbWVudEltcGw6OnNldE91dGVySFRNTChjb25zdAogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgIEhUTUxFbGVtZW50SW1wbCAqcGFyZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEVs
ZW1lbnRJbXBsICo+KHApOwotICAgIERvY3VtZW50RnJhZ21lbnRJbXBsICpmcmFnbWVudCA9IHBh
cmVudC0+Y3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KCBodG1sICk7CisgICAgRG9jdW1lbnRGcmFn
bWVudEltcGwgKmZyYWdtZW50ID0gcGFyZW50LT5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoaHRt
bCk7CiAKICAgICBpZiAoIWZyYWdtZW50KSB7CiAJZXhjZXB0aW9uID0gRE9NRXhjZXB0aW9uOjpO
T19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI7CkBAIC00MzQsMjkgKzM4MiwxNyBAQCB2b2lkIEhU
TUxFbGVtZW50SW1wbDo6c2V0T3V0ZXJIVE1MKGNvbnN0CiB2b2lkIEhUTUxFbGVtZW50SW1wbDo6
c2V0SW5uZXJUZXh0KGNvbnN0IERPTVN0cmluZyAmdGV4dCwgaW50ICZleGNlcHRpb24pCiB7CiAg
ICAgLy8gZm9sbG93aW5nIHRoZSBJRSBzcGVjcy4KLSAgICBpZiAoZW5kVGFnUmVxdWlyZW1lbnQo
aWQoKSkgPT0gRk9SQklEREVOKSB7CisgICAgaWYgKGVuZFRhZ1JlcXVpcmVtZW50KCkgPT0gRk9S
QklEREVOKSB7CiAJZXhjZXB0aW9uID0gRE9NRXhjZXB0aW9uOjpOT19NT0RJRklDQVRJT05fQUxM
T1dFRF9FUlI7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICAvLyBJRSBkaXNhbGxvd3Mg
aW5uZXJUZXh0IG9uIGlubGluZSBlbGVtZW50cy4gSSBkb24ndCBzZWUgd2h5IHdlIHNob3VsZCBo
YXZlIHRoaXMgcmVzdHJpY3Rpb24sIGFzIG91cgotICAgIC8vIGRodG1sIGVuZ2luZSBjYW4gY29w
ZSB3aXRoIGl0LiBMYXJzCi0gICAgLy9pZiAoIGlzSW5saW5lKCkgKSByZXR1cm4gZmFsc2U7Ci0g
ICAgc3dpdGNoKCBpZCgpICkgewotICAgICAgICBjYXNlIElEX0NPTDoKLSAgICAgICAgY2FzZSBJ
RF9DT0xHUk9VUDoKLSAgICAgICAgY2FzZSBJRF9GUkFNRVNFVDoKLSAgICAgICAgY2FzZSBJRF9I
RUFEOgotICAgICAgICBjYXNlIElEX0hUTUw6Ci0gICAgICAgIGNhc2UgSURfVEFCTEU6Ci0gICAg
ICAgIGNhc2UgSURfVEJPRFk6Ci0gICAgICAgIGNhc2UgSURfVEZPT1Q6Ci0gICAgICAgIGNhc2Ug
SURfVEhFQUQ6Ci0gICAgICAgIGNhc2UgSURfVFI6Ci0gICAgICAgICAgICBleGNlcHRpb24gPSBE
T01FeGNlcHRpb246Ok5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUjsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOworICAgIGlmIChoYXNM
b2NhbE5hbWUoSFRNTE5hbWVzOjpjb2woKSkgfHwgaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6Y29s
Z3JvdXAoKSkgfHwgaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6ZnJhbWVzZXQoKSkgfHwKKyAgICAg
ICAgaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6aGVhZCgpKSB8fCBoYXNMb2NhbE5hbWUoSFRNTE5h
bWVzOjpodG1sKCkpIHx8IGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnRhYmxlKCkpIHx8IAorICAg
ICAgICBoYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0Ym9keSgpKSB8fCBoYXNMb2NhbE5hbWUoSFRN
TE5hbWVzOjp0Zm9vdCgpKSB8fCBoYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0aGVhZCgpKSB8fAor
ICAgICAgICBoYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0cigpKSkgeworICAgICAgICBleGNlcHRp
b24gPSBET01FeGNlcHRpb246Ok5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUjsKKyAgICAgICAg
cmV0dXJuOwogICAgIH0KIAogICAgIHJlbW92ZUNoaWxkcmVuKCk7CkBAIC00NjYsMjUgKzQwMiwx
NyBAQCB2b2lkIEhUTUxFbGVtZW50SW1wbDo6c2V0SW5uZXJUZXh0KGNvbnN0CiB2b2lkIEhUTUxF
bGVtZW50SW1wbDo6c2V0T3V0ZXJUZXh0KGNvbnN0IERPTVN0cmluZyAmdGV4dCwgaW50ICZleGNl
cHRpb24pCiB7CiAgICAgLy8gZm9sbG93aW5nIHRoZSBJRSBzcGVjcy4KLSAgICBpZiggZW5kVGFn
UmVxdWlyZW1lbnQoaWQoKSkgPT0gRk9SQklEREVOICkgeworICAgIGlmIChlbmRUYWdSZXF1aXJl
bWVudCgpID09IEZPUkJJRERFTikgewogCWV4Y2VwdGlvbiA9IERPTUV4Y2VwdGlvbjo6Tk9fTU9E
SUZJQ0FUSU9OX0FMTE9XRURfRVJSOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIHN3aXRj
aCggaWQoKSApIHsKLSAgICAgICAgY2FzZSBJRF9DT0w6Ci0gICAgICAgIGNhc2UgSURfQ09MR1JP
VVA6Ci0gICAgICAgIGNhc2UgSURfRlJBTUVTRVQ6Ci0gICAgICAgIGNhc2UgSURfSEVBRDoKLSAg
ICAgICAgY2FzZSBJRF9IVE1MOgotICAgICAgICBjYXNlIElEX1RBQkxFOgotICAgICAgICBjYXNl
IElEX1RCT0RZOgotICAgICAgICBjYXNlIElEX1RGT09UOgotICAgICAgICBjYXNlIElEX1RIRUFE
OgotICAgICAgICBjYXNlIElEX1RSOgotICAgICAgICAgICAgZXhjZXB0aW9uID0gRE9NRXhjZXB0
aW9uOjpOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsKKworICAgIGlmIChoYXNMb2NhbE5h
bWUoSFRNTE5hbWVzOjpjb2woKSkgfHwgaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6Y29sZ3JvdXAo
KSkgfHwgaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6ZnJhbWVzZXQoKSkgfHwKKyAgICAgICAgaGFz
TG9jYWxOYW1lKEhUTUxOYW1lczo6aGVhZCgpKSB8fCBoYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpo
dG1sKCkpIHx8IGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnRhYmxlKCkpIHx8IAorICAgICAgICBo
YXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0Ym9keSgpKSB8fCBoYXNMb2NhbE5hbWUoSFRNTE5hbWVz
Ojp0Zm9vdCgpKSB8fCBoYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0aGVhZCgpKSB8fAorICAgICAg
ICBoYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0cigpKSkgeworICAgICAgICBleGNlcHRpb24gPSBE
T01FeGNlcHRpb246Ok5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUjsKKyAgICAgICAgcmV0dXJu
OwogICAgIH0KIAogICAgIE5vZGVJbXBsICpwYXJlbnQgPSBwYXJlbnROb2RlKCk7CkBAIC01MjUs
MTcgKzQ1Myw2IEBAIHZvaWQgSFRNTEVsZW1lbnRJbXBsOjpzZXRPdXRlclRleHQoY29uc3QKICAg
ICB9CiB9CiAKLQotRE9NU3RyaW5nIEhUTUxFbGVtZW50SW1wbDo6bmFtZXNwYWNlVVJJKCkgY29u
c3QKLXsKLSAgICAvLyBGb3IgSFRNTCBkb2N1bWVudHMsIHdlIHRyZWF0IEhUTUwgZWxlbWVudHMg
YXMgaGF2aW5nIG5vIG5hbWVzcGFjZS4gQnV0IGZvciBYTUwgZG9jdW1lbnRzCi0gICAgLy8gdGhl
IGVsZW1lbnRzIGhhdmUgdGhlIG5hbWVzcGFjZSBkZWZpbmVkIGluIHRoZSBYSFRNTCBzcGVjCi0g
ICAgaWYgKGdldERvY3VtZW50KCktPmlzSFRNTERvY3VtZW50KCkpCi0gICAgICAgIHJldHVybiBE
T01TdHJpbmcoKTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiBYSFRNTF9OQU1FU1BBQ0U7Ci19
Ci0KIHZvaWQgSFRNTEVsZW1lbnRJbXBsOjphZGRIVE1MQWxpZ25tZW50KE1hcHBlZEF0dHJpYnV0
ZUltcGwqIGF0dHIpCiB7CiAgICAgLy9xRGVidWcoImFsaWdubWVudCBpcyAlcyIsIGFsaWdubWVu
dC5zdHJpbmcoKS5sYXRpbjEoKSApOwpAQCAtNjgyLDkgKzU5OSw5IEBAIERPTVN0cmluZyBIVE1M
RWxlbWVudEltcGw6OnRvU3RyaW5nKCkgY28KIAlET01TdHJpbmcgcmVzdWx0ID0gb3BlblRhZ1N0
YXJ0VG9TdHJpbmcoKTsKIAlyZXN1bHQgKz0gIj4iOwogCi0JaWYgKGVuZFRhZ1JlcXVpcmVtZW50
KGlkKCkpID09IFJFUVVJUkVEKSB7CisJaWYgKGVuZFRhZ1JlcXVpcmVtZW50KCkgPT0gUkVRVUlS
RUQpIHsKIAkgICAgcmVzdWx0ICs9ICI8LyI7Ci0JICAgIHJlc3VsdCArPSB0YWdOYW1lKCk7CisJ
ICAgIHJlc3VsdCArPSBub2RlTmFtZSgpOwogCSAgICByZXN1bHQgKz0gIj4iOwogCX0KIApAQCAt
Njk0LDcgKzYxMSw3IEBAIERPTVN0cmluZyBIVE1MRWxlbWVudEltcGw6OnRvU3RyaW5nKCkgY28K
ICAgICByZXR1cm4gRWxlbWVudEltcGw6OnRvU3RyaW5nKCk7CiB9CiAKLURPTVN0cmluZyBIVE1M
RWxlbWVudEltcGw6OmlkRE9NKCkgY29uc3QKK0RPTVN0cmluZyBIVE1MRWxlbWVudEltcGw6Omlk
KCkgY29uc3QKIHsKICAgICByZXR1cm4gZ2V0QXR0cmlidXRlKEFUVFJfSUQpOwogfQpAQCAtNzQ5
LDE1ICs2NjYsMyBAQCBTaGFyZWRQdHI8SFRNTENvbGxlY3Rpb25JbXBsPiBIVE1MRWxlbWVuCiAg
ICAgcmV0dXJuIFNoYXJlZFB0cjxIVE1MQ29sbGVjdGlvbkltcGw+KG5ldyBIVE1MQ29sbGVjdGlv
bkltcGwodGhpcywgSFRNTENvbGxlY3Rpb25JbXBsOjpOT0RFX0NISUxEUkVOKSk7CiB9CiAKLS8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLQotSFRNTEdlbmVyaWNFbGVtZW50SW1wbDo6SFRNTEdlbmVyaWNF
bGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCB1c2hvcnQgaSkKLSAgICA6IEhUTUxFbGVtZW50
SW1wbChkb2MpCi17Ci0gICAgbV9lbGVtZW50SWQgPSBpOwotfQotCi1Ob2RlSW1wbDo6SWQgSFRN
TEdlbmVyaWNFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBtX2VsZW1lbnRJ
ZDsKLX0KSW5kZXg6IGtodG1sL2h0bWwvaHRtbF9lbGVtZW50aW1wbC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbF9lbGVtZW50aW1wbC5oLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjM1CmRpZmYgLXUgLXAgLXIxLjM1IGtodG1sL2h0bWwvaHRt
bF9lbGVtZW50aW1wbC5oCi0tLSBraHRtbC9odG1sL2h0bWxfZWxlbWVudGltcGwuaAkxMSBNYXkg
MjAwNSAwNTo0OTozNCAtMDAwMAkxLjM1CisrKyBraHRtbC9odG1sL2h0bWxfZWxlbWVudGltcGwu
aAkyMiBKdW4gMjAwNSAyMzoyMzoyMyAtMDAwMApAQCAtMjUsMjcgKzI1LDI0IEBACiAjZGVmaW5l
IEhUTUxfRUxFTUVOVElNUExfSAogCiAjaW5jbHVkZSAieG1sL2RvbV9lbGVtZW50aW1wbC5oIgot
I2luY2x1ZGUgPHFwdHJkaWN0Lmg+CisjaW5jbHVkZSAiaHRtbG5hbWVzLmgiCiAKIG5hbWVzcGFj
ZSBET00gewogCiBjbGFzcyBEb2N1bWVudEZyYWdtZW50SW1wbDsKIGNsYXNzIERPTVN0cmluZzsK
IGNsYXNzIEhUTUxDb2xsZWN0aW9uSW1wbDsKLSAgICAKKworZW51bSBIVE1MVGFnU3RhdHVzIHsg
T1BUSU9OQUwsIFJFUVVJUkVELCBGT1JCSURERU4gfTsKKwogY2xhc3MgSFRNTEVsZW1lbnRJbXBs
IDogcHVibGljIFN0eWxlZEVsZW1lbnRJbXBsCiB7CiBwdWJsaWM6Ci0gICAgSFRNTEVsZW1lbnRJ
bXBsKERvY3VtZW50UHRyICpkb2MpOwotCisgICAgSFRNTEVsZW1lbnRJbXBsKGNvbnN0IFF1YWxp
ZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50UHRyICpkb2MpOwogICAgIHZpcnR1YWwgfkhUTUxF
bGVtZW50SW1wbCgpOwogCiAgICAgdmlydHVhbCBib29sIGlzSFRNTEVsZW1lbnQoKSBjb25zdCB7
IHJldHVybiB0cnVlOyB9CiAKLSAgICB2aXJ0dWFsIGJvb2wgaXNJbmxpbmUoKSBjb25zdDsKLSAg
ICAgCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0ID0gMDsKLSAgICAKICAgICB2aXJ0dWFsIGJv
b2wgbWFwVG9FbnRyeShJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25z
dDsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRl
SW1wbCogYXR0cik7CiAKQEAgLTUzLDcgKzUwLDcgQEAgcHVibGljOgogCiAgICAgU2hhcmVkUHRy
PEhUTUxDb2xsZWN0aW9uSW1wbD4gY2hpbGRyZW4oKTsKICAgICAKLSAgICBET01TdHJpbmcgaWRE
T00oKSBjb25zdDsgLy8gcmVuYW1lIHRvIGlkIGFmdGVyIGVsaW1pbmF0aW5nIE5vZGVJbXBsOjpp
ZCBzb21lIGRheQorICAgIERPTVN0cmluZyBpZCgpIGNvbnN0OwogICAgIHZvaWQgc2V0SWQoY29u
c3QgRE9NU3RyaW5nICZ2YWx1ZSk7CiAgICAgRE9NU3RyaW5nIHRpdGxlKCkgY29uc3Q7CiAgICAg
dm9pZCBzZXRUaXRsZShjb25zdCBET01TdHJpbmcgJnZhbHVlKTsKQEAgLTczLDggKzcwLDYgQEAg
cHVibGljOgogICAgIHZvaWQgc2V0T3V0ZXJIVE1MKGNvbnN0IERPTVN0cmluZyAmaHRtbCwgaW50
ICZleGNlcHRpb24pOwogICAgIHZvaWQgc2V0SW5uZXJUZXh0KGNvbnN0IERPTVN0cmluZyAmdGV4
dCwgaW50ICZleGNlcHRpb24pOwogICAgIHZvaWQgc2V0T3V0ZXJUZXh0KGNvbnN0IERPTVN0cmlu
ZyAmdGV4dCwgaW50ICZleGNlcHRpb24pOwotCi0gICAgdmlydHVhbCBET01TdHJpbmcgbmFtZXNw
YWNlVVJJKCkgY29uc3Q7CiAgICAgCiAgICAgdmlydHVhbCBib29sIGlzRm9jdXNhYmxlKCkgY29u
c3Q7CiAgICAgdmlydHVhbCBib29sIGlzQ29udGVudEVkaXRhYmxlKCkgY29uc3Q7CkBAIC04OSwy
MiArODQsMTYgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBET01TdHJpbmcgdG9TdHJpbmcoKSBj
b25zdDsKIAorICAgIC8vIFNhbWUgdmFsdWVzIGFzIDxzcGFuPi4gIFRoaXMgd2F5IGN1c3RvbSB0
YWcgbmFtZSBlbGVtZW50cyB3aWxsIGJlaGF2ZSBsaWtlIGlubGluZSBzcGFucy4KKyAgICB2aXJ0
dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBSRVFV
SVJFRDsgfQorICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMTsg
fQorICAgIAogcHJvdGVjdGVkOgogCiAgICAgLy8gZm9yIElNRywgT0JKRUNUIGFuZCBBUFBMRVQK
ICAgICB2b2lkIGFkZEhUTUxBbGlnbm1lbnQoTWFwcGVkQXR0cmlidXRlSW1wbCogaHRtbEF0dHIp
OwogfTsKIAotY2xhc3MgSFRNTEdlbmVyaWNFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MRWxlbWVu
dEltcGwKLXsKLXB1YmxpYzoKLSAgICBIVE1MR2VuZXJpY0VsZW1lbnRJbXBsKERvY3VtZW50UHRy
ICpkb2MsIHVzaG9ydCBlbGVtZW50SWQpOwotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKLQot
cHJvdGVjdGVkOgotICAgIHVzaG9ydCBtX2VsZW1lbnRJZDsKLX07Ci0KIH0gLy9uYW1lc3BhY2UK
IAogI2VuZGlmCkluZGV4OiBraHRtbC9odG1sL2h0bWxfZm9ybWltcGwuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbF9mb3JtaW1wbC5jcHAs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTY3CmRpZmYgLXUgLXAgLXIxLjE2NyBraHRtbC9odG1s
L2h0bWxfZm9ybWltcGwuY3BwCi0tLSBraHRtbC9odG1sL2h0bWxfZm9ybWltcGwuY3BwCTIwIEp1
biAyMDA1IDA1OjUyOjE2IC0wMDAwCTEuMTY3CisrKyBraHRtbC9odG1sL2h0bWxfZm9ybWltcGwu
Y3BwCTIyIEp1biAyMDA1IDIzOjIzOjI2IC0wMDAwCkBAIC0xMDMsNyArMTAzLDcgQEAgcHJpdmF0
ZToKIH07CiAKIEhUTUxGb3JtRWxlbWVudEltcGw6OkhUTUxGb3JtRWxlbWVudEltcGwoRG9jdW1l
bnRQdHIgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50SW1wbChkb2MpCisgICAgOiBIVE1MRWxlbWVu
dEltcGwoSFRNTE5hbWVzOjpmb3JtKCksIGRvYykKIHsKICAgICBjb2xsZWN0aW9uSW5mbyA9IDA7
CiAgICAgbV9wb3N0ID0gZmFsc2U7CkBAIC0xMzAsMTEgKzEzMCw2IEBAIEhUTUxGb3JtRWxlbWVu
dEltcGw6On5IVE1MRm9ybUVsZW1lbnRJbXAKICAgICAgICAgaW1nRWxlbWVudHNbaV0tPm1fZm9y
bSA9IDA7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MRm9ybUVsZW1lbnRJbXBsOjppZCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIElEX0ZPUk07Ci19Ci0KICNpZiBBUFBMRV9DSEFOR0VTCiAKIGJvb2wg
SFRNTEZvcm1FbGVtZW50SW1wbDo6Zm9ybVdvdWxkSGF2ZVNlY3VyZVN1Ym1pc3Npb24oY29uc3Qg
RE9NU3RyaW5nICZ1cmwpCkBAIC0xOTIsNyArMTg3LDcgQEAgdm9pZCBIVE1MRm9ybUVsZW1lbnRJ
bXBsOjpzdWJtaXRDbGljaygpCiB7CiAgICAgYm9vbCBzdWJtaXRGb3VuZCA9IGZhbHNlOwogICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmb3JtRWxlbWVudHMuY291bnQoKTsgKytpKSB7Ci0g
ICAgICAgIGlmIChmb3JtRWxlbWVudHNbaV0tPmlkKCkgPT0gSURfSU5QVVQpIHsKKyAgICAgICAg
aWYgKGZvcm1FbGVtZW50c1tpXS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6aW5wdXQoKSkpIHsK
ICAgICAgICAgICAgIEhUTUxJbnB1dEVsZW1lbnRJbXBsICplbGVtZW50ID0gc3RhdGljX2Nhc3Q8
SFRNTElucHV0RWxlbWVudEltcGwgKj4oZm9ybUVsZW1lbnRzW2ldKTsKICAgICAgICAgICAgIGlm
IChlbGVtZW50LT5pc1N1Y2Nlc3NmdWxTdWJtaXRCdXR0b24oKSAmJiBlbGVtZW50LT5yZW5kZXJl
cigpKSB7CiAgICAgICAgICAgICAgICAgc3VibWl0Rm91bmQgPSB0cnVlOwpAQCAtMzk5LDcgKzM5
NCw3IEBAIGJvb2wgSFRNTEZvcm1FbGVtZW50SW1wbDo6Zm9ybURhdGEoRm9ybUQKIAogICAgICAg
ICAgICAgICAgICAgICAvLyBpZiB0aGUgY3VycmVudCB0eXBlIGlzIEZJTEUsIHRoZW4gd2UgYWxz
byBuZWVkIHRvCiAgICAgICAgICAgICAgICAgICAgIC8vIGluY2x1ZGUgdGhlIGZpbGVuYW1lCi0g
ICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50LT5ub2RlVHlwZSgpID09IE5vZGU6OkVMRU1F
TlRfTk9ERSAmJiBjdXJyZW50LT5pZCgpID09IElEX0lOUFVUICYmCisgICAgICAgICAgICAgICAg
ICAgIGlmIChjdXJyZW50LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjppbnB1dCgpKSAmJgogICAg
ICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudEltcGwqPihj
dXJyZW50KS0+aW5wdXRUeXBlKCkgPT0gSFRNTElucHV0RWxlbWVudEltcGw6OkZJTEUpCiAgICAg
ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgIFFTdHJpbmcgcGF0aCA9
IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnRJbXBsKj4oY3VycmVudCktPnZhbHVlKCkuc3Ry
aW5nKCk7CkBAIC01NDcsNyArNTQyLDcgQEAgdm9pZCBIVE1MRm9ybUVsZW1lbnRJbXBsOjpzdWJt
aXQoIGJvb2wgYQogI2lmIEFQUExFX0NIQU5HRVMKICAgICAgICAgLy8gT3VyIGFwcCBuZWVkcyB0
byBnZXQgZm9ybSB2YWx1ZXMgZm9yIHBhc3N3b3JkIGZpZWxkcyBmb3IgZG9pbmcgcGFzc3dvcmQg
YXV0b2NvbXBsZXRlLAogICAgICAgICAvLyBzbyB3ZSBhcmUgbW9yZSBsZW5pZW50IGluIHB1c2hp
bmcgdmFsdWVzLCBhbmQgbGV0IHRoZSBhcHAgZGVjaWRlIHdoYXQgdG8gc2F2ZSB3aGVuLgotICAg
ICAgICBpZiAoY3VycmVudC0+aWQoKSA9PSBJRF9JTlBVVCkgeworICAgICAgICBpZiAoY3VycmVu
dC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6aW5wdXQoKSkpIHsKICAgICAgICAgICAgIEhUTUxJ
bnB1dEVsZW1lbnRJbXBsICppbnB1dCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnRJbXBs
Kj4oY3VycmVudCk7CiAgICAgICAgICAgICBpZiAoaW5wdXQtPmlucHV0VHlwZSgpID09IEhUTUxJ
bnB1dEVsZW1lbnRJbXBsOjpURVhUCiAgICAgICAgICAgICAgICAgfHwgaW5wdXQtPmlucHV0VHlw
ZSgpID09ICBIVE1MSW5wdXRFbGVtZW50SW1wbDo6UEFTU1dPUkQKQEAgLTcwOSw3ICs3MDQsNyBA
QCB2b2lkIEhUTUxGb3JtRWxlbWVudEltcGw6OnJhZGlvQ2xpY2tlZCggCiB7CiAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGZvcm1FbGVtZW50cy5jb3VudCgpOyArK2kpIHsKICAgICAgICAg
SFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwgKmN1cnJlbnQgPSBmb3JtRWxlbWVudHNbaV07Ci0g
ICAgICAgIGlmIChjdXJyZW50LT5pZCgpID09IElEX0lOUFVUICYmCisgICAgICAgIGlmIChjdXJy
ZW50LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjppbnB1dCgpKSAmJgogICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudEltcGwqPihjdXJyZW50KS0+aW5wdXRUeXBlKCkgPT0g
SFRNTElucHV0RWxlbWVudEltcGw6OlJBRElPICYmCiAgICAgICAgICAgICBjdXJyZW50ICE9IGNh
bGxlciAmJiBjdXJyZW50LT5mb3JtKCkgPT0gY2FsbGVyLT5mb3JtKCkgJiYgY3VycmVudC0+bmFt
ZSgpID09IGNhbGxlci0+bmFtZSgpKSB7CiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxIVE1MSW5w
dXRFbGVtZW50SW1wbCo+KGN1cnJlbnQpLT5zZXRDaGVja2VkKGZhbHNlKTsKQEAgLTg2NCw4ICs4
NTksOCBAQCB2b2lkIEhUTUxGb3JtRWxlbWVudEltcGw6OnNldFRhcmdldChjb25zCiAKIC8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KIAotSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGw6OkhUTUxHZW5lcmlj
Rm9ybUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIEhUTUxGb3JtRWxlbWVudEltcGwgKmYp
Ci0gICAgOiBIVE1MRWxlbWVudEltcGwoZG9jKQorSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGw6
OkhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUs
IERvY3VtZW50UHRyICpkb2MsIEhUTUxGb3JtRWxlbWVudEltcGwgKmYpCisgICAgOiBIVE1MRWxl
bWVudEltcGwodGFnTmFtZSwgZG9jKQogewogICAgIG1fZGlzYWJsZWQgPSBtX3JlYWRPbmx5ID0g
ZmFsc2U7CiAgICAgbV9kb3JtYW50ID0gZmFsc2U7CkBAIC05NjcsOSArOTYyLDggQEAgdm9pZCBI
VE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbDo6cmVtb3ZlZAogSFRNTEZvcm1FbGVtZW50SW1wbCAq
SFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGw6OmdldEZvcm0oKSBjb25zdAogewogICAgIE5vZGVJ
bXBsICpwID0gcGFyZW50Tm9kZSgpOwotICAgIHdoaWxlKHApCi0gICAgewotICAgICAgICBpZigg
cC0+aWQoKSA9PSBJRF9GT1JNICkKKyAgICB3aGlsZShwKSB7CisgICAgICAgIGlmIChwLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6Zm9ybSgpKSkKICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxIVE1MRm9ybUVsZW1lbnRJbXBsICo+KHApOwogICAgICAgICBwID0gcC0+cGFyZW50Tm9kZSgp
OwogICAgIH0KQEAgLTExODksNyArMTE4Myw3IEBAIHZvaWQgSFRNTEdlbmVyaWNGb3JtRWxlbWVu
dEltcGw6OnNldFRhYkkKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogSFRNTEJ1dHRvbkVsZW1lbnRJ
bXBsOjpIVE1MQnV0dG9uRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgSFRNTEZvcm1FbGVt
ZW50SW1wbCAqZikKLSAgICA6IEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKGRvYywgZikKKyAg
ICA6IEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKEhUTUxOYW1lczo6YnV0dG9uKCksIGRvYywg
ZikKIHsKICAgICBtX3R5cGUgPSBTVUJNSVQ7CiAgICAgbV9kaXJ0eSA9IHRydWU7CkBAIC0xMjAw
LDExICsxMTk0LDYgQEAgSFRNTEJ1dHRvbkVsZW1lbnRJbXBsOjp+SFRNTEJ1dHRvbkVsZW1lbgog
ewogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTEJ1dHRvbkVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIElEX0JVVFRPTjsKLX0KLQogRE9NU3RyaW5nIEhUTUxCdXR0b25FbGVtZW50
SW1wbDo6dHlwZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGdldEF0dHJpYnV0ZShBVFRSX1RZUEUp
OwpAQCAtMTMyNiw3ICsxMzE1LDcgQEAgdm9pZCBIVE1MQnV0dG9uRWxlbWVudEltcGw6OnNldFZh
bHVlKGNvbgogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MRmllbGRTZXRFbGVtZW50SW1wbDo6
SFRNTEZpZWxkU2V0RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgSFRNTEZvcm1FbGVtZW50
SW1wbCAqZikKLSAgIDogSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwoZG9jLCBmKQorICAgOiBI
VE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbChIVE1MTmFtZXM6OmZpZWxkc2V0KCksIGRvYywgZikK
IHsKIH0KIApAQCAtMTMzOSwxMSArMTMyOCw2IEBAIGJvb2wgSFRNTEZpZWxkU2V0RWxlbWVudElt
cGw6OmlzRm9jdXNhYmwKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1M
RmllbGRTZXRFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9GSUVMRFNF
VDsKLX0KLQogRE9NU3RyaW5nIEhUTUxGaWVsZFNldEVsZW1lbnRJbXBsOjp0eXBlKCkgY29uc3QK
IHsKICAgICByZXR1cm4gImZpZWxkc2V0IjsKQEAgLTEzNTcsOCArMTM0MSwyMSBAQCBSZW5kZXJP
YmplY3QqIEhUTUxGaWVsZFNldEVsZW1lbnRJbXBsOjpjCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAK
IEhUTUxJbnB1dEVsZW1lbnRJbXBsOjpIVE1MSW5wdXRFbGVtZW50SW1wbChEb2N1bWVudFB0ciAq
ZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmKQotICAgIDogSFRNTEdlbmVyaWNGb3JtRWxlbWVu
dEltcGwoZG9jLCBmKSwgbV9pbWFnZUxvYWRlcigwKSwgbV92YWx1ZU1hdGNoZXNSZW5kZXJlcihm
YWxzZSkKKyAgICA6IEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKEhUTUxOYW1lczo6aW5wdXQo
KSwgZG9jLCBmKQoreworICAgIGluaXQoKTsKK30KKworSFRNTElucHV0RWxlbWVudEltcGw6OkhU
TUxJbnB1dEVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50
UHRyICpkb2MsIEhUTUxGb3JtRWxlbWVudEltcGwgKmYpCisgICAgOiBIVE1MR2VuZXJpY0Zvcm1F
bGVtZW50SW1wbCh0YWdOYW1lLCBkb2MsIGYpCiB7CisgICAgaW5pdCgpOworfQorCit2b2lkIEhU
TUxJbnB1dEVsZW1lbnRJbXBsOjppbml0KCkKK3sKKyAgICBtX2ltYWdlTG9hZGVyID0gMDsKKyAg
ICBtX3ZhbHVlTWF0Y2hlc1JlbmRlcmVyID0gZmFsc2U7CiAgICAgbV90eXBlID0gVEVYVDsKICAg
ICBtX21heExlbiA9IC0xOwogICAgIG1fc2l6ZSA9IDIwOwpAQCAtMTM3Niw4ICsxMzczLDggQEAg
SFRNTElucHV0RWxlbWVudEltcGw6OkhUTUxJbnB1dEVsZW1lbnRJbQogCiAgICAgbV9tYXhSZXN1
bHRzID0gLTE7CiAKLSAgICBpZiAoIG1fZm9ybSApCi0gICAgICAgIG1fYXV0b2NvbXBsZXRlID0g
Zi0+YXV0b0NvbXBsZXRlKCk7CisgICAgaWYgKG1fZm9ybSkKKyAgICAgICAgbV9hdXRvY29tcGxl
dGUgPSBtX2Zvcm0tPmF1dG9Db21wbGV0ZSgpOwogfQogCiBIVE1MSW5wdXRFbGVtZW50SW1wbDo6
fkhUTUxJbnB1dEVsZW1lbnRJbXBsKCkKQEAgLTEzODYsMTEgKzEzODMsNiBAQCBIVE1MSW5wdXRF
bGVtZW50SW1wbDo6fkhUTUxJbnB1dEVsZW1lbnRJCiAgICAgZGVsZXRlIG1faW1hZ2VMb2FkZXI7
CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MSW5wdXRFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewot
ICAgIHJldHVybiBJRF9JTlBVVDsKLX0KLQogdm9pZCBIVE1MSW5wdXRFbGVtZW50SW1wbDo6c2V0
VHlwZShjb25zdCBET01TdHJpbmcmIHQpCiB7CiAgICAgdHlwZUVudW0gbmV3VHlwZTsKQEAgLTIz
NjYsNyArMjM1OCw3IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudEltcGw6OnNldFVzZU1hcChjb24K
IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogSFRNTExhYmVsRWxlbWVudEltcGw6OkhUTUxMYWJlbEVs
ZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0gICAgOiBIVE1MRWxlbWVudEltcGwoZG9jKQor
ICAgIDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6bGFiZWwoKSwgZG9jKQogewogfQogCkBA
IC0yMzc5LDExICsyMzcxLDYgQEAgYm9vbCBIVE1MTGFiZWxFbGVtZW50SW1wbDo6aXNGb2N1c2Fi
bGUoKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxMYWJlbEVsZW1l
bnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0xBQkVMOwotfQotCiB2b2lkIEhU
TUxMYWJlbEVsZW1lbnRJbXBsOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJ
bXBsICphdHRyKQogewogICAgIHN3aXRjaChhdHRyLT5pZCgpKQpAQCAtMjQ2NSw3ICsyNDUyLDcg
QEAgdm9pZCBIVE1MTGFiZWxFbGVtZW50SW1wbDo6c2V0SHRtbEZvcihjbwogLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQogCiBIVE1MTGVnZW5kRWxlbWVudEltcGw6OkhUTUxMZWdlbmRFbGVtZW50SW1wbChE
b2N1bWVudFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmKQotOiBIVE1MR2VuZXJpY0Zv
cm1FbGVtZW50SW1wbChkb2MsIGYpCis6IEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKEhUTUxO
YW1lczo6bGVnZW5kKCksIGRvYywgZikKIHsKIH0KIApAQCAtMjQ3OCwxMSArMjQ2NSw2IEBAIGJv
b2wgSFRNTExlZ2VuZEVsZW1lbnRJbXBsOjppc0ZvY3VzYWJsZSgKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MTGVnZW5kRWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gSURfTEVHRU5EOwotfQotCiBSZW5kZXJPYmplY3QqIEhUTUxMZWdlbmRFbGVt
ZW50SW1wbDo6Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqIGFyZW5hLCBSZW5kZXJTdHlsZSog
c3R5bGUpCiB7CiAgICAgcmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRlckxlZ2VuZCh0aGlzKTsKQEAg
LTI1MTcsNyArMjQ5OSw3IEBAIEVsZW1lbnRJbXBsICpIVE1MTGVnZW5kRWxlbWVudEltcGw6OmZv
cm0KIHsKICAgICAvLyBDaGVjayBpZiB0aGVyZSdzIGEgZmllbGRzZXQgYmVsb25naW5nIHRvIHRo
aXMgbGVnZW5kLgogICAgIE5vZGVJbXBsICpmaWVsZHNldCA9IHBhcmVudE5vZGUoKTsKLSAgICB3
aGlsZSAoZmllbGRzZXQgJiYgZmllbGRzZXQtPmlkKCkgIT0gSURfRklFTERTRVQpCisgICAgd2hp
bGUgKGZpZWxkc2V0ICYmICFmaWVsZHNldC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZpZWxkc2V0
KCkpKQogICAgICAgICBmaWVsZHNldCA9IGZpZWxkc2V0LT5wYXJlbnROb2RlKCk7CiAgICAgaWYg
KCFmaWVsZHNldCkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0yNTI4LDcgKzI1MTAsNyBAQCBFbGVt
ZW50SW1wbCAqSFRNTExlZ2VuZEVsZW1lbnRJbXBsOjpmb3JtCiAgICAgd2hpbGUgKChub2RlID0g
bm9kZS0+dHJhdmVyc2VOZXh0Tm9kZShmaWVsZHNldCkpKSB7CiAgICAgICAgIGlmIChub2RlLT5p
c0hUTUxFbGVtZW50KCkpIHsKICAgICAgICAgICAgIEhUTUxFbGVtZW50SW1wbCAqZWxlbWVudCA9
IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCAqPihub2RlKTsKLSAgICAgICAgICAgIGlmIChl
bGVtZW50LT5pZCgpICE9IElEX0xFR0VORCAmJiBlbGVtZW50LT5pc0dlbmVyaWNGb3JtRWxlbWVu
dCgpKQorICAgICAgICAgICAgaWYgKCFlbGVtZW50LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjps
ZWdlbmQoKSkgJiYgZWxlbWVudC0+aXNHZW5lcmljRm9ybUVsZW1lbnQoKSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gZWxlbWVudDsKICAgICAgICAgfQogICAgIH0KQEAgLTI1NTEsOCArMjUzMywy
MCBAQCB2b2lkIEhUTUxMZWdlbmRFbGVtZW50SW1wbDo6YWNjZXNzS2V5QWN0CiAvLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCiAKIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6SFRNTFNlbGVjdEVsZW1lbnRJbXBs
KERvY3VtZW50UHRyICpkb2MsIEhUTUxGb3JtRWxlbWVudEltcGwgKmYpCi0gICAgOiBIVE1MR2Vu
ZXJpY0Zvcm1FbGVtZW50SW1wbChkb2MsIGYpLCBtX29wdGlvbnMoMCkKKyAgICA6IEhUTUxHZW5l
cmljRm9ybUVsZW1lbnRJbXBsKEhUTUxOYW1lczo6c2VsZWN0KCksIGRvYywgZiksIG1fb3B0aW9u
cygwKQoreworICAgIGluaXQoKTsKK30KKworSFRNTFNlbGVjdEVsZW1lbnRJbXBsOjpIVE1MU2Vs
ZWN0RWxlbWVudEltcGwoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnRQdHIg
KmRvYywgSFRNTEZvcm1FbGVtZW50SW1wbCAqZikKKyAgICA6IEhUTUxHZW5lcmljRm9ybUVsZW1l
bnRJbXBsKHRhZ05hbWUsIGRvYywgZiksIG1fb3B0aW9ucygwKQoreworICAgIGluaXQoKTsKK30K
Kwordm9pZCBIVE1MU2VsZWN0RWxlbWVudEltcGw6OmluaXQoKQogeworICAgIG1fb3B0aW9ucyA9
IDA7CiAgICAgbV9tdWx0aXBsZSA9IGZhbHNlOwogICAgIG1fcmVjYWxjTGlzdEl0ZW1zID0gZmFs
c2U7CiAgICAgLy8gMCBtZWFucyBpbnZhbGlkIChpLmUuIG5vdCBzZXQpCkBAIC0yNTY5LDExICsy
NTYzLDYgQEAgSFRNTFNlbGVjdEVsZW1lbnRJbXBsOjp+SFRNTFNlbGVjdEVsZW1lbgogICAgIH0K
IH0KIAotTm9kZUltcGw6OklkIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewot
ICAgIHJldHVybiBJRF9TRUxFQ1Q7Ci19Ci0KIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnRJbXBsOjpy
ZWNhbGNTdHlsZSggU3R5bGVDaGFuZ2UgY2ggKQogewogICAgIGlmIChoYXNDaGFuZ2VkQ2hpbGQo
KSAmJiBtX3JlbmRlcikgewpAQCAtMjU5NSw3ICsyNTg0LDcgQEAgbG9uZyBIVE1MU2VsZWN0RWxl
bWVudEltcGw6OnNlbGVjdGVkSW5kZQogICAgIHVpbnQgbyA9IDA7CiAgICAgUU1lbUFycmF5PEhU
TUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKj4gaXRlbXMgPSBsaXN0SXRlbXMoKTsKICAgICBmb3Ig
KHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGl0ZW1zLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIGlm
IChpdGVtc1tpXS0+aWQoKSA9PSBJRF9PUFRJT04pIHsKKyAgICAgICAgaWYgKGl0ZW1zW2ldLT5o
YXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvcHRpb24oKSkpIHsKICAgICAgICAgICAgIGlmIChzdGF0
aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudEltcGwqPihpdGVtc1tpXSktPnNlbGVjdGVkKCkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIG87CiAgICAgICAgICAgICBvKys7CkBAIC0yNjExLDcgKzI2
MDAsNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6c2V0U2VsZWN0ZWRJCiAgICAgUU1l
bUFycmF5PEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKj4gaXRlbXMgPSBsaXN0SXRlbXMoKTsK
ICAgICBpbnQgbGlzdEluZGV4OwogICAgIGZvciAobGlzdEluZGV4ID0gMDsgbGlzdEluZGV4IDwg
aW50KGl0ZW1zLnNpemUoKSk7IGxpc3RJbmRleCsrKSB7Ci0gICAgICAgIGlmIChpdGVtc1tsaXN0
SW5kZXhdLT5pZCgpID09IElEX09QVElPTikKKyAgICAgICAgaWYgKGl0ZW1zW2xpc3RJbmRleF0t
Pmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9wdGlvbigpKSkKICAgICAgICAgICAgIHN0YXRpY19j
YXN0PEhUTUxPcHRpb25FbGVtZW50SW1wbCo+KGl0ZW1zW2xpc3RJbmRleF0pLT5zZXRTZWxlY3Rl
ZChmYWxzZSk7CiAgICAgfQogICAgIGxpc3RJbmRleCA9IG9wdGlvblRvTGlzdEluZGV4KGluZGV4
KTsKQEAgLTI2MjcsNyArMjYxNiw3IEBAIGxvbmcgSFRNTFNlbGVjdEVsZW1lbnRJbXBsOjpsZW5n
dGgoKSBjb24KICAgICB1aW50IGk7CiAgICAgUU1lbUFycmF5PEhUTUxHZW5lcmljRm9ybUVsZW1l
bnRJbXBsKj4gaXRlbXMgPSBsaXN0SXRlbXMoKTsKICAgICBmb3IgKGkgPSAwOyBpIDwgaXRlbXMu
c2l6ZSgpOyBpKyspIHsKLSAgICAgICAgaWYgKGl0ZW1zW2ldLT5pZCgpID09IElEX09QVElPTikK
KyAgICAgICAgaWYgKGl0ZW1zW2ldLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvcHRpb24oKSkp
CiAgICAgICAgICAgICBsZW4rKzsKICAgICB9CiAgICAgcmV0dXJuIGxlbjsKQEAgLTI2MzUsNyAr
MjYyNCw3IEBAIGxvbmcgSFRNTFNlbGVjdEVsZW1lbnRJbXBsOjpsZW5ndGgoKSBjb24KIAogdm9p
ZCBIVE1MU2VsZWN0RWxlbWVudEltcGw6OmFkZCggSFRNTEVsZW1lbnRJbXBsICplbGVtZW50LCBI
VE1MRWxlbWVudEltcGwgKmJlZm9yZSApCiB7Ci0gICAgaWYgKCFlbGVtZW50IHx8IGVsZW1lbnQt
PmlkKCkgIT0gSURfT1BUSU9OKQorICAgIGlmICghZWxlbWVudCB8fCAhZWxlbWVudC0+aGFzTG9j
YWxOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBpbnQg
ZXhjZXB0aW9uY29kZSA9IDA7CkBAIC0yNjY5LDEzICsyNjU4LDEyIEBAIHZvaWQgSFRNTFNlbGVj
dEVsZW1lbnRJbXBsOjpmb2N1cygpCiAgICAgZ2V0RG9jdW1lbnQoKS0+c2V0Rm9jdXNOb2RlKHRo
aXMpOwogfQogCi1ET01TdHJpbmcgSFRNTFNlbGVjdEVsZW1lbnRJbXBsOjp2YWx1ZSggKQorRE9N
U3RyaW5nIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6dmFsdWUoKQogewogICAgIHVpbnQgaTsKICAg
ICBRTWVtQXJyYXk8SFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwqPiBpdGVtcyA9IGxpc3RJdGVt
cygpOwogICAgIGZvciAoaSA9IDA7IGkgPCBpdGVtcy5zaXplKCk7IGkrKykgewotICAgICAgICBp
ZiAoIGl0ZW1zW2ldLT5pZCgpID09IElEX09QVElPTgotICAgICAgICAgICAgJiYgc3RhdGljX2Nh
c3Q8SFRNTE9wdGlvbkVsZW1lbnRJbXBsKj4oaXRlbXNbaV0pLT5zZWxlY3RlZCgpKQorICAgICAg
ICBpZiAoaXRlbXNbaV0tPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9wdGlvbigpKSAmJiBzdGF0
aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudEltcGwqPihpdGVtc1tpXSktPnNlbGVjdGVkKCkpCiAg
ICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnRJbXBsKj4oaXRl
bXNbaV0pLT52YWx1ZSgpOwogICAgIH0KICAgICByZXR1cm4gRE9NU3RyaW5nKCIiKTsKQEAgLTI2
ODksMTMgKzI2NzcsMTMgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudEltcGw6OnNldFZhbHVlKGNv
bgogICAgIC8vIGFuZCBtYWtlIGl0IHRoZSBjdXJyZW50IHNlbGVjdGlvbi4KICAgICBRTWVtQXJy
YXk8SFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwqPiBpdGVtcyA9IGxpc3RJdGVtcygpOwogICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpdGVtcy5zaXplKCk7IGkrKykKLSAgICAgICAgaWYg
KGl0ZW1zW2ldLT5pZCgpID09IElEX09QVElPTiAmJiBzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxl
bWVudEltcGwqPihpdGVtc1tpXSktPnZhbHVlKCkgPT0gdmFsdWUpIHsKKyAgICAgICAgaWYgKGl0
ZW1zW2ldLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvcHRpb24oKSkgJiYgc3RhdGljX2Nhc3Q8
SFRNTE9wdGlvbkVsZW1lbnRJbXBsKj4oaXRlbXNbaV0pLT52YWx1ZSgpID09IHZhbHVlKSB7CiAg
ICAgICAgICAgICBzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudEltcGwqPihpdGVtc1tpXSkt
PnNldFNlbGVjdGVkKHRydWUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiB9CiAK
LVFTdHJpbmcgSFRNTFNlbGVjdEVsZW1lbnRJbXBsOjpzdGF0ZSggKQorUVN0cmluZyBIVE1MU2Vs
ZWN0RWxlbWVudEltcGw6OnN0YXRlKCkKIHsKICNpZiAhQVBQTEVfQ0hBTkdFUwogICAgIFFTdHJp
bmcgc3RhdGU7CkBAIC0yNzA4LDcgKzI2OTYsNyBAQCBRU3RyaW5nIEhUTUxTZWxlY3RFbGVtZW50
SW1wbDo6c3RhdGUoICkKICAgICBRQ2hhciBzdGF0ZUNoYXJzW2xdOwogICAgIAogICAgIGZvcihp
bnQgaSA9IDA7IGkgPCBsOyBpKyspCi0gICAgICAgIGlmKGl0ZW1zW2ldLT5pZCgpID09IElEX09Q
VElPTiAmJiBzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudEltcGwqPihpdGVtc1tpXSktPnNl
bGVjdGVkKCkpCisgICAgICAgIGlmKGl0ZW1zW2ldLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpv
cHRpb24oKSkgJiYgc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnRJbXBsKj4oaXRlbXNbaV0p
LT5zZWxlY3RlZCgpKQogICAgICAgICAgICAgc3RhdGVDaGFyc1tpXSA9ICdYJzsKICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgc3RhdGVDaGFyc1tpXSA9ICcuJzsKQEAgLTI3NDUsNyArMjczMyw3
IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnRJbXBsOjpyZXN0b3JlU3RhdGUKIAogICAgIGludCBs
ID0gaXRlbXMuY291bnQoKTsKICAgICBmb3IoaW50IGkgPSAwOyBpIDwgbDsgaSsrKSB7Ci0gICAg
ICAgIGlmKGl0ZW1zW2ldLT5pZCgpID09IElEX09QVElPTikgeworICAgICAgICBpZihpdGVtc1tp
XS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpKSB7CiAgICAgICAgICAgICBIVE1M
T3B0aW9uRWxlbWVudEltcGwqIG9lID0gc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnRJbXBs
Kj4oaXRlbXNbaV0pOwogICAgICAgICAgICAgb2UtPnNldFNlbGVjdGVkKHN0YXRlW2ldID09ICdY
Jyk7CiAgICAgICAgIH0KQEAgLTI4MzcsNyArMjgyNSw3IEBAIGJvb2wgSFRNTFNlbGVjdEVsZW1l
bnRJbXBsOjphcHBlbmRGb3JtRGEKIAogICAgIHVpbnQgaTsKICAgICBmb3IgKGkgPSAwOyBpIDwg
aXRlbXMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgaWYgKGl0ZW1zW2ldLT5pZCgpID09IElEX09Q
VElPTikgeworICAgICAgICBpZiAoaXRlbXNbaV0tPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9w
dGlvbigpKSkgewogICAgICAgICAgICAgSFRNTE9wdGlvbkVsZW1lbnRJbXBsICpvcHRpb24gPSBz
dGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudEltcGwqPihpdGVtc1tpXSk7CiAgICAgICAgICAg
ICBpZiAob3B0aW9uLT5zZWxlY3RlZCgpKSB7CiAgICAgICAgICAgICAgICAgZW5jb2RlZF92YWx1
ZXMuYXBwZW5kRGF0YShuYW1lKCksIG9wdGlvbi0+dmFsdWUoKSk7CkBAIC0yODUwLDcgKzI4Mzgs
NyBAQCBib29sIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6YXBwZW5kRm9ybURhCiAgICAgLy8gaW4g
YW55IGNhc2UuIG90aGVyd2lzZSB3ZSBoYXZlIG5vIGNvbnNpc3RlbmN5IHdpdGggdGhlIERPTSBp
bnRlcmZhY2UuIEZJWE1FIQogICAgIC8vIHdlIHJldHVybiB0aGUgZmlyc3Qgb25lIGlmIGl0IHdh
cyBhIGNvbWJvYm94IHNlbGVjdAogICAgIGlmICghc3VjY2Vzc2Z1bCAmJiAhbV9tdWx0aXBsZSAm
JiBtX3NpemUgPD0gMSAmJiBpdGVtcy5zaXplKCkgJiYKLSAgICAgICAgKGl0ZW1zWzBdLT5pZCgp
ID09IElEX09QVElPTikgKSB7CisgICAgICAgIChpdGVtc1swXS0+aGFzTG9jYWxOYW1lKEhUTUxO
YW1lczo6b3B0aW9uKCkpKSkgewogICAgICAgICBIVE1MT3B0aW9uRWxlbWVudEltcGwgKm9wdGlv
biA9IHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50SW1wbCo+KGl0ZW1zWzBdKTsKICAgICAg
ICAgaWYgKG9wdGlvbi0+dmFsdWUoKS5pc051bGwoKSkKICAgICAgICAgICAgIGVuY29kZWRfdmFs
dWVzLmFwcGVuZERhdGEobmFtZSgpLCBvcHRpb24tPnRleHQoKS5zdHJpbmcoKS5zdHJpcFdoaXRl
U3BhY2UoKSk7CkBAIC0yODczLDcgKzI4NjEsNyBAQCBpbnQgSFRNTFNlbGVjdEVsZW1lbnRJbXBs
OjpvcHRpb25Ub0xpc3RJCiAgICAgZm9yICg7CiAgICAgICAgICBvcHRpb25JbmRleDIgPCBpbnQo
aXRlbXMuc2l6ZSgpKSAmJiBvcHRpb25JbmRleDIgPD0gb3B0aW9uSW5kZXg7CiAgICAgICAgICBs
aXN0SW5kZXgrKykgeyAvLyBub3QgYSB0eXBvIQotICAgICAgICBpZiAoaXRlbXNbbGlzdEluZGV4
XS0+aWQoKSA9PSBJRF9PUFRJT04pCisgICAgICAgIGlmIChpdGVtc1tsaXN0SW5kZXhdLT5oYXNM
b2NhbE5hbWUoSFRNTE5hbWVzOjpvcHRpb24oKSkpCiAgICAgICAgICAgICBvcHRpb25JbmRleDIr
KzsKICAgICB9CiAgICAgbGlzdEluZGV4LS07CkBAIC0yODg0LDEzICsyODcyLDEzIEBAIGludCBI
VE1MU2VsZWN0RWxlbWVudEltcGw6Omxpc3RUb09wdGlvbkkKIHsKICAgICBRTWVtQXJyYXk8SFRN
TEdlbmVyaWNGb3JtRWxlbWVudEltcGwqPiBpdGVtcyA9IGxpc3RJdGVtcygpOwogICAgIGlmIChs
aXN0SW5kZXggPCAwIHx8IGxpc3RJbmRleCA+PSBpbnQoaXRlbXMuc2l6ZSgpKSB8fAotICAgICAg
ICBpdGVtc1tsaXN0SW5kZXhdLT5pZCgpICE9IElEX09QVElPTikKKyAgICAgICAgIWl0ZW1zW2xp
c3RJbmRleF0tPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9wdGlvbigpKSkKICAgICAgICAgcmV0
dXJuIC0xOwogCiAgICAgaW50IG9wdGlvbkluZGV4ID0gMDsgLy8gYWN0dWFsIGluZGV4IG9mIG9w
dGlvbiBub3QgY291bnRpbmcgT1BUR1JPVVAgZW50cmllcyB0aGF0IG1heSBiZSBpbiBsaXN0CiAg
ICAgaW50IGk7CiAgICAgZm9yIChpID0gMDsgaSA8IGxpc3RJbmRleDsgaSsrKQotICAgICAgICBp
ZiAoaXRlbXNbaV0tPmlkKCkgPT0gSURfT1BUSU9OKQorICAgICAgICBpZiAoaXRlbXNbaV0tPmhh
c0xvY2FsTmFtZShIVE1MTmFtZXM6Om9wdGlvbigpKSkKICAgICAgICAgICAgIG9wdGlvbkluZGV4
Kys7CiAgICAgcmV0dXJuIG9wdGlvbkluZGV4OwogfQpAQCAtMjkxNiwxMyArMjkwNCwxMyBAQCB2
b2lkIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6cmVjYWxjTGlzdEl0CiAgICAgbV9saXN0SXRlbXMu
cmVzaXplKDApOwogICAgIEhUTUxPcHRpb25FbGVtZW50SW1wbCogZm91bmRTZWxlY3RlZCA9IDA7
CiAgICAgd2hpbGUoY3VycmVudCkgewotICAgICAgICBpZiAoY3VycmVudC0+aWQoKSA9PSBJRF9P
UFRHUk9VUCAmJiBjdXJyZW50LT5maXJzdENoaWxkKCkpIHsKKyAgICAgICAgaWYgKGN1cnJlbnQt
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvcHRncm91cCgpKSAmJiBjdXJyZW50LT5maXJzdENoaWxk
KCkpIHsKICAgICAgICAgICAgIC8vICMjIyB3aGF0IGlmIG9wdGdyb3VwIGNvbnRhaW5zIGp1c3Qg
Y29tbWVudHM/IGRvbid0IHdhbnQgb25lIG9mIG5vIG9wdGlvbnMgaW4gaXQuLi4KICAgICAgICAg
ICAgIG1fbGlzdEl0ZW1zLnJlc2l6ZShtX2xpc3RJdGVtcy5zaXplKCkrMSk7CiAgICAgICAgICAg
ICBtX2xpc3RJdGVtc1ttX2xpc3RJdGVtcy5zaXplKCktMV0gPSBzdGF0aWNfY2FzdDxIVE1MR2Vu
ZXJpY0Zvcm1FbGVtZW50SW1wbCo+KGN1cnJlbnQpOwogICAgICAgICAgICAgY3VycmVudCA9IGN1
cnJlbnQtPmZpcnN0Q2hpbGQoKTsKICAgICAgICAgfQotICAgICAgICBpZiAoY3VycmVudC0+aWQo
KSA9PSBJRF9PUFRJT04pIHsKKyAgICAgICAgaWYgKGN1cnJlbnQtPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjpvcHRpb24oKSkpIHsKICAgICAgICAgICAgIG1fbGlzdEl0ZW1zLnJlc2l6ZShtX2xpc3RJ
dGVtcy5zaXplKCkrMSk7CiAgICAgICAgICAgICBtX2xpc3RJdGVtc1ttX2xpc3RJdGVtcy5zaXpl
KCktMV0gPSBzdGF0aWNfY2FzdDxIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbCo+KGN1cnJlbnQp
OwogICAgICAgICAgICAgaWYgKCFmb3VuZFNlbGVjdGVkICYmICFtX211bHRpcGxlICYmIG1fc2l6
ZSA8PSAxKSB7CkBAIC0yOTY0LDcgKzI5NTIsNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50SW1w
bDo6cmVzZXQoKQogICAgIFFNZW1BcnJheTxIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbCo+IGl0
ZW1zID0gbGlzdEl0ZW1zKCk7CiAgICAgdWludCBpOwogICAgIGZvciAoaSA9IDA7IGkgPCBpdGVt
cy5zaXplKCk7IGkrKykgewotICAgICAgICBpZiAoaXRlbXNbaV0tPmlkKCkgPT0gSURfT1BUSU9O
KSB7CisgICAgICAgIGlmIChpdGVtc1tpXS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b3B0aW9u
KCkpKSB7CiAgICAgICAgICAgICBIVE1MT3B0aW9uRWxlbWVudEltcGwgKm9wdGlvbiA9IHN0YXRp
Y19jYXN0PEhUTUxPcHRpb25FbGVtZW50SW1wbCo+KGl0ZW1zW2ldKTsKICAgICAgICAgICAgIGJv
b2wgc2VsZWN0ZWQgPSAoIW9wdGlvbi0+Z2V0QXR0cmlidXRlKEFUVFJfU0VMRUNURUQpLmlzTnVs
bCgpKTsKICAgICAgICAgICAgIG9wdGlvbi0+c2V0U2VsZWN0ZWQoc2VsZWN0ZWQpOwpAQCAtMjk4
Miw3ICsyOTcwLDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudEltcGw6Om5vdGlmeU9wdGlvbgog
ICAgICAgICBRTWVtQXJyYXk8SFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwqPiBpdGVtcyA9IGxp
c3RJdGVtcygpOwogICAgICAgICB1aW50IGk7CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBpdGVt
cy5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgaWYgKGl0ZW1zW2ldLT5pZCgpID09IElEX09Q
VElPTikKKyAgICAgICAgICAgIGlmIChpdGVtc1tpXS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6
b3B0aW9uKCkpKQogICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50
SW1wbCo+KGl0ZW1zW2ldKS0+bV9zZWxlY3RlZCA9IChpdGVtc1tpXSA9PSBzZWxlY3RlZE9wdGlv
bik7CiAgICAgICAgIH0KICAgICB9CkBAIC0zMDI5LDcgKzMwMTcsNyBAQCB2b2lkIEhUTUxTZWxl
Y3RFbGVtZW50SW1wbDo6c2V0U2l6ZShsb25nCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxL
ZXlnZW5FbGVtZW50SW1wbDo6SFRNTEtleWdlbkVsZW1lbnRJbXBsKERvY3VtZW50UHRyKiBkb2Ms
IEhUTUxGb3JtRWxlbWVudEltcGwqIGYpCi0gICAgOiBIVE1MU2VsZWN0RWxlbWVudEltcGwoZG9j
LCBmKQorICAgIDogSFRNTFNlbGVjdEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6a2V5Z2VuKCksIGRv
YywgZikKIHsKICAgICBRU3RyaW5nTGlzdCBrZXlzID0gS1NTTEtleUdlbjo6c3VwcG9ydGVkS2V5
U2l6ZXMoKTsKICAgICBmb3IgKFFTdHJpbmdMaXN0OjpJdGVyYXRvciBpID0ga2V5cy5iZWdpbigp
OyBpICE9IGtleXMuZW5kKCk7ICsraSkgewpAQCAtMzAzOSwxMSArMzAyNyw2IEBAIEhUTUxLZXln
ZW5FbGVtZW50SW1wbDo6SFRNTEtleWdlbkVsZW1lbnQKICAgICB9CiB9CiAKLU5vZGVJbXBsOjpJ
ZCBIVE1MS2V5Z2VuRWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfS0VZ
R0VOOwotfQotCiBET01TdHJpbmcgSFRNTEtleWdlbkVsZW1lbnRJbXBsOjp0eXBlKCkgY29uc3QK
IHsKICAgICByZXR1cm4gImtleWdlbiI7CkBAIC0zMDk4LDcgKzMwODEsNyBAQCBib29sIEhUTUxL
ZXlnZW5FbGVtZW50SW1wbDo6YXBwZW5kRm9ybURhCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhU
TUxPcHRHcm91cEVsZW1lbnRJbXBsOjpIVE1MT3B0R3JvdXBFbGVtZW50SW1wbChEb2N1bWVudFB0
ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmKQotICAgIDogSFRNTEdlbmVyaWNGb3JtRWxl
bWVudEltcGwoZG9jLCBmKQorICAgIDogSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwoSFRNTE5h
bWVzOjpvcHRncm91cCgpLCBkb2MsIGYpCiB7CiB9CiAKQEAgLTMxMTEsMTEgKzMwOTQsNiBAQCBi
b29sIEhUTUxPcHRHcm91cEVsZW1lbnRJbXBsOjppc0ZvY3VzYWJsCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTE9wdEdyb3VwRWxlbWVudEltcGw6OmlkKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gSURfT1BUR1JPVVA7Ci19Ci0KIERPTVN0cmluZyBIVE1MT3B0R3JvdXBF
bGVtZW50SW1wbDo6dHlwZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuICJvcHRncm91cCI7CkBAIC0z
MTY5LDcgKzMxNDcsNyBAQCB2b2lkIEhUTUxPcHRHcm91cEVsZW1lbnRJbXBsOjpwYXJzZU1hcHBl
CiB2b2lkIEhUTUxPcHRHcm91cEVsZW1lbnRJbXBsOjpyZWNhbGNTZWxlY3RPcHRpb25zKCkKIHsK
ICAgICBOb2RlSW1wbCAqc2VsZWN0ID0gcGFyZW50Tm9kZSgpOwotICAgIHdoaWxlIChzZWxlY3Qg
JiYgc2VsZWN0LT5pZCgpICE9IElEX1NFTEVDVCkKKyAgICB3aGlsZSAoc2VsZWN0ICYmICFzZWxl
Y3QtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzZWxlY3QoKSkpCiAgICAgICAgIHNlbGVjdCA9IHNl
bGVjdC0+cGFyZW50Tm9kZSgpOwogICAgIGlmIChzZWxlY3QpCiAgICAgICAgIHN0YXRpY19jYXN0
PEhUTUxTZWxlY3RFbGVtZW50SW1wbCo+KHNlbGVjdCktPnNldFJlY2FsY0xpc3RJdGVtcygpOwpA
QCAtMzE4OCw3ICszMTY2LDcgQEAgdm9pZCBIVE1MT3B0R3JvdXBFbGVtZW50SW1wbDo6c2V0TGFi
ZWwoYwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MT3B0aW9uRWxlbWVudEltcGw6OkhUTUxP
cHRpb25FbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpm
KQotICAgIDogSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwoZG9jLCBmKQorICAgIDogSFRNTEdl
bmVyaWNGb3JtRWxlbWVudEltcGwoSFRNTE5hbWVzOjpvcHRpb24oKSwgZG9jLCBmKQogewogICAg
IG1fc2VsZWN0ZWQgPSBmYWxzZTsKIH0KQEAgLTMxOTgsMTEgKzMxNzYsNiBAQCBib29sIEhUTUxP
cHRpb25FbGVtZW50SW1wbDo6aXNGb2N1c2FibGUoCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1O
b2RlSW1wbDo6SWQgSFRNTE9wdGlvbkVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIElEX09QVElPTjsKLX0KLQogRE9NU3RyaW5nIEhUTUxPcHRpb25FbGVtZW50SW1wbDo6dHlw
ZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuICJvcHRpb24iOwpAQCAtMzI0OSw4ICszMjIyLDcgQEAg
bG9uZyBIVE1MT3B0aW9uRWxlbWVudEltcGw6OmluZGV4KCkgY29ucwogICAgIGludCBsID0gaXRl
bXMuY291bnQoKTsKICAgICBpbnQgb3B0aW9uSW5kZXggPSAwOwogICAgIGZvcihpbnQgaSA9IDA7
IGkgPCBsOyBpKyspIHsKLSAgICAgICAgaWYoaXRlbXNbaV0tPmlkKCkgPT0gSURfT1BUSU9OKQot
ICAgICAgICB7CisgICAgICAgIGlmIChpdGVtc1tpXS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6
b3B0aW9uKCkpKSB7CiAgICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1l
bnRJbXBsKj4oaXRlbXNbaV0pID09IHRoaXMpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG9wdGlv
bkluZGV4OwogICAgICAgICAgICAgb3B0aW9uSW5kZXgrKzsKQEAgLTMzMTUsNyArMzI4Nyw3IEBA
IHZvaWQgSFRNTE9wdGlvbkVsZW1lbnRJbXBsOjpjaGlsZHJlbkNoYW4KIEhUTUxTZWxlY3RFbGVt
ZW50SW1wbCAqSFRNTE9wdGlvbkVsZW1lbnRJbXBsOjpnZXRTZWxlY3QoKSBjb25zdAogewogICAg
IE5vZGVJbXBsICpzZWxlY3QgPSBwYXJlbnROb2RlKCk7Ci0gICAgd2hpbGUgKHNlbGVjdCAmJiBz
ZWxlY3QtPmlkKCkgIT0gSURfU0VMRUNUKQorICAgIHdoaWxlIChzZWxlY3QgJiYgIXNlbGVjdC0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OnNlbGVjdCgpKSkKICAgICAgICAgc2VsZWN0ID0gc2VsZWN0
LT5wYXJlbnROb2RlKCk7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50
SW1wbCo+KHNlbGVjdCk7CiB9CkBAIC0zMzQzLDcgKzMzMTUsNyBAQCB2b2lkIEhUTUxPcHRpb25F
bGVtZW50SW1wbDo6c2V0TGFiZWwoY29uCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxUZXh0
QXJlYUVsZW1lbnRJbXBsOjpIVE1MVGV4dEFyZWFFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9j
LCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmKQotICAgIDogSFRNTEdlbmVyaWNGb3JtRWxlbWVudElt
cGwoZG9jLCBmKSwgbV92YWx1ZUlzVmFsaWQoZmFsc2UpLCBtX3ZhbHVlTWF0Y2hlc1JlbmRlcmVy
KGZhbHNlKQorICAgIDogSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwoSFRNTE5hbWVzOjp0ZXh0
YXJlYSgpLCBkb2MsIGYpLCBtX3ZhbHVlSXNWYWxpZChmYWxzZSksIG1fdmFsdWVNYXRjaGVzUmVu
ZGVyZXIoZmFsc2UpCiB7CiAgICAgLy8gRFREIHJlcXVpcmVzIHJvd3MgJiBjb2xzIGJlIHNwZWNp
ZmllZCwgYnV0IHdlIHdpbGwgcHJvdmlkZSByZWFzb25hYmxlIGRlZmF1bHRzCiAgICAgbV9yb3dz
ID0gMjsKQEAgLTMzNTYsMTEgKzMzMjgsNiBAQCBIVE1MVGV4dEFyZWFFbGVtZW50SW1wbDo6fkhU
TUxUZXh0QXJlYUVsCiAgICAgaWYgKGdldERvY3VtZW50KCkpIGdldERvY3VtZW50KCktPmRlcmVn
aXN0ZXJNYWludGFpbnNTdGF0ZSh0aGlzKTsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxUZXh0QXJl
YUVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX1RFWFRBUkVBOwotfQot
CiBET01TdHJpbmcgSFRNTFRleHRBcmVhRWxlbWVudEltcGw6OnR5cGUoKSBjb25zdAogewogICAg
IHJldHVybiAidGV4dGFyZWEiOwpAQCAtMzU3NiwxNyArMzU0MywxMiBAQCB2b2lkIEhUTUxUZXh0
QXJlYUVsZW1lbnRJbXBsOjpzZXRSb3dzKGxvCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxJ
c0luZGV4RWxlbWVudEltcGw6OkhUTUxJc0luZGV4RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRv
YywgSFRNTEZvcm1FbGVtZW50SW1wbCAqZikKLSAgICA6IEhUTUxJbnB1dEVsZW1lbnRJbXBsKGRv
YywgZikKKyAgICA6IEhUTUxJbnB1dEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6aXNpbmRleCgpLCBk
b2MsIGYpCiB7CiAgICAgbV90eXBlID0gVEVYVDsKICAgICBzZXRPdmVycmlkZU5hbWUoImlzaW5k
ZXgiKTsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxJc0luZGV4RWxlbWVudEltcGw6OmlkKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gSURfSVNJTkRFWDsKLX0KLQogdm9pZCBIVE1MSXNJbmRleEVsZW1l
bnRJbXBsOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsKiBhdHRyKQog
ewogICAgIHN3aXRjaChhdHRyLT5pZCgpKQpJbmRleDoga2h0bWwvaHRtbC9odG1sX2Zvcm1pbXBs
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1s
X2Zvcm1pbXBsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNzQKZGlmZiAtdSAtcCAtcjEuNzQg
a2h0bWwvaHRtbC9odG1sX2Zvcm1pbXBsLmgKLS0tIGtodG1sL2h0bWwvaHRtbF9mb3JtaW1wbC5o
CTIwIEp1biAyMDA1IDA1OjUyOjE2IC0wMDAwCTEuNzQKKysrIGtodG1sL2h0bWwvaHRtbF9mb3Jt
aW1wbC5oCTIyIEp1biAyMDA1IDIzOjIzOjI2IC0wMDAwCkBAIC02Nyw4ICs2Nyw2IEBAIHB1Ymxp
YzoKICAgICBIVE1MRm9ybUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpOwogICAgIHZpcnR1
YWwgfkhUTUxGb3JtRWxlbWVudEltcGwoKTsKIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsK
LQogICAgIHZpcnR1YWwgdm9pZCBhdHRhY2goKTsKICAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoKCk7
CiAKQEAgLTE2MSw3ICsxNTksNyBAQCBjbGFzcyBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbCA6
IHB1YmxpCiAgICAgZnJpZW5kIGNsYXNzIGtodG1sOjpSZW5kZXJGb3JtRWxlbWVudDsKIAogcHVi
bGljOgotICAgIEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIEhU
TUxGb3JtRWxlbWVudEltcGwgKmYgPSAwKTsKKyAgICBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1w
bChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudFB0ciAqZG9jLCBIVE1MRm9y
bUVsZW1lbnRJbXBsICpmID0gMCk7CiAgICAgdmlydHVhbCB+SFRNTEdlbmVyaWNGb3JtRWxlbWVu
dEltcGwoKTsKIAogICAgIEhUTUxGb3JtRWxlbWVudEltcGwgKmZvcm0oKSB7IHJldHVybiBtX2Zv
cm07IH0KQEAgLTI0NCw3ICsyNDIsNiBAQCBwdWJsaWM6CiAgICAgICAgIEJVVFRPTgogICAgIH07
CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CiAgICAgRE9NU3RyaW5nIHR5cGUoKSBjb25z
dDsKIAogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1
dGVJbXBsICphdHRyKTsKQEAgLTI4Miw4ICsyNzksNiBAQCBwdWJsaWM6CiAgICAgSFRNTEZpZWxk
U2V0RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgSFRNTEZvcm1FbGVtZW50SW1wbCAqZiA9
IDApOwogCiAgICAgdmlydHVhbCB+SFRNTEZpZWxkU2V0RWxlbWVudEltcGwoKTsKLQotICAgIHZp
cnR1YWwgSWQgaWQoKSBjb25zdDsKICAgICAKICAgICB2aXJ0dWFsIGJvb2wgaXNGb2N1c2FibGUo
KSBjb25zdDsKICAgICAKQEAgLTMyNiw5ICszMjEsMTAgQEAgcHVibGljOgogICAgIH07CiAKICAg
ICBIVE1MSW5wdXRFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJ
bXBsICpmID0gMCk7CisgICAgSFRNTElucHV0RWxlbWVudEltcGwoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgdGFnTmFtZSwgRG9jdW1lbnRQdHIgKmRvYywgSFRNTEZvcm1FbGVtZW50SW1wbCAqZiA9IDAp
OwogICAgIHZpcnR1YWwgfkhUTUxJbnB1dEVsZW1lbnRJbXBsKCk7CiAKLSAgICB2aXJ0dWFsIElk
IGlkKCkgY29uc3Q7CisgICAgdm9pZCBpbml0KCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNFbnVt
ZXJhdGFibGUoKSBjb25zdCB7IHJldHVybiBpbnB1dFR5cGUoKSAhPSBJTUFHRTsgfQogCkBAIC00
NTIsOCArNDQ4LDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgfkhUTUxMYWJlbEVsZW1lbnRJbXBs
KCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNGb2N1c2FibGUoKSBjb25zdDsKLSAgICAKLSAgICB2
aXJ0dWFsIElkIGlkKCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRy
aWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqYXR0cik7CiAKQEAgLTQ4OCw3ICs0ODIsNiBAQCBw
dWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNGb2N1c2FibGUoKSBjb25zdDsKICAgICAKLSAg
ICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CiAgICAgdmlydHVhbCBraHRtbDo6UmVuZGVyT2JqZWN0
ICpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSAqLCBraHRtbDo6UmVuZGVyU3R5bGUgKik7CiAK
ICAgICB2aXJ0dWFsIERPTVN0cmluZyB0eXBlKCkgY29uc3Q7CkBAIC01MTcsOSArNTEwLDExIEBA
IGNsYXNzIEhUTUxTZWxlY3RFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE0KIAogcHVibGljOgogICAg
IEhUTUxTZWxlY3RFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJ
bXBsICpmID0gMCk7CisgICAgSFRNTFNlbGVjdEVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5h
bWUmIHRhZ05hbWUsIERvY3VtZW50UHRyICpkb2MsIEhUTUxGb3JtRWxlbWVudEltcGwgKmYgPSAw
KTsKICAgICB+SFRNTFNlbGVjdEVsZW1lbnRJbXBsKCk7CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkg
Y29uc3Q7CisgICAgdm9pZCBpbml0KCk7CisKICAgICBET01TdHJpbmcgdHlwZSgpIGNvbnN0Owog
CiAgICAgdmlydHVhbCB2b2lkIHJlY2FsY1N0eWxlKCBTdHlsZUNoYW5nZSApOwpAQCAtNjA2LDgg
KzYwMSw2IEBAIGNsYXNzIEhUTUxLZXlnZW5FbGVtZW50SW1wbCA6IHB1YmxpYyBIVE0KIHB1Ymxp
YzoKICAgICBIVE1MS2V5Z2VuRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgSFRNTEZvcm1F
bGVtZW50SW1wbCAqZiA9IDApOwogCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwotCiAgICAg
RE9NU3RyaW5nIHR5cGUoKSBjb25zdDsKIAogICAgIC8vICMjIyB0aGlzIGlzIGp1c3QgYSByb3Vn
aCBndWVzcwpAQCAtNjI4LDcgKzYyMSw2IEBAIHB1YmxpYzoKICAgICBIVE1MT3B0R3JvdXBFbGVt
ZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmID0gMCk7CiAg
ICAgdmlydHVhbCB+SFRNTE9wdEdyb3VwRWxlbWVudEltcGwoKTsKIAotICAgIHZpcnR1YWwgSWQg
aWQoKSBjb25zdDsKICAgICBET01TdHJpbmcgdHlwZSgpIGNvbnN0OwogCiAgICAgdmlydHVhbCBi
b29sIGlzRm9jdXNhYmxlKCkgY29uc3Q7CkBAIC02NTcsOCArNjQ5LDcgQEAgcHVibGljOgogICAg
IEhUTUxPcHRpb25FbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJ
bXBsICpmID0gMCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNGb2N1c2FibGUoKSBjb25zdDsKLSAg
ICAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CisKICAgICBET01TdHJpbmcgdHlwZSgpIGNv
bnN0OwogCiAgICAgRE9NU3RyaW5nIHRleHQoKSBjb25zdDsKQEAgLTcwNiw4ICs2OTcsNiBAQCBw
dWJsaWM6CiAgICAgSFRNTFRleHRBcmVhRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgSFRN
TEZvcm1FbGVtZW50SW1wbCAqZiA9IDApOwogICAgIH5IVE1MVGV4dEFyZWFFbGVtZW50SW1wbCgp
OwogCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwotCiAgICAgbG9uZyBjb2xzKCkgY29uc3Qg
eyByZXR1cm4gbV9jb2xzOyB9CiAKICAgICBsb25nIHJvd3MoKSBjb25zdCB7IHJldHVybiBtX3Jv
d3M7IH0KQEAgLTc3MCw4ICs3NTksNiBAQCBjbGFzcyBIVE1MSXNJbmRleEVsZW1lbnRJbXBsIDog
cHVibGljIEhUCiBwdWJsaWM6CiAgICAgSFRNTElzSW5kZXhFbGVtZW50SW1wbChEb2N1bWVudFB0
ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmID0gMCk7CiAKLSAgICB2aXJ0dWFsIElkIGlk
KCkgY29uc3Q7Ci0KICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVk
QXR0cmlidXRlSW1wbCAqYXR0cik7CiAKICAgICBET01TdHJpbmcgcHJvbXB0KCkgY29uc3Q7Cklu
ZGV4OiBraHRtbC9odG1sL2h0bWxfaGVhZGltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbF9oZWFkaW1wbC5jcHAsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuNTAKZGlmZiAtdSAtcCAtcjEuNTAga2h0bWwvaHRtbC9odG1sX2hlYWRpbXBs
LmNwcAotLS0ga2h0bWwvaHRtbC9odG1sX2hlYWRpbXBsLmNwcAkyMiBKdW4gMjAwNSAxODoyMjow
MSAtMDAwMAkxLjUwCisrKyBraHRtbC9odG1sL2h0bWxfaGVhZGltcGwuY3BwCTIyIEp1biAyMDA1
IDIzOjIzOjI3IC0wMDAwCkBAIC00Niw3ICs0Niw3IEBAIHVzaW5nIG5hbWVzcGFjZSBET007CiB1
c2luZyBuYW1lc3BhY2Uga2h0bWw7CiAKIEhUTUxCYXNlRWxlbWVudEltcGw6OkhUTUxCYXNlRWxl
bWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50SW1wbChkb2MpCisg
ICAgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjpiYXNlKCksIGRvYykKIHsKIH0KIApAQCAt
NTQsMTEgKzU0LDYgQEAgSFRNTEJhc2VFbGVtZW50SW1wbDo6fkhUTUxCYXNlRWxlbWVudEltcAog
ewogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTEJhc2VFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewot
ICAgIHJldHVybiBJRF9CQVNFOwotfQotCiB2b2lkIEhUTUxCYXNlRWxlbWVudEltcGw6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIpCiB7CiAgICAgc3dpdGNo
KGF0dHItPmlkKCkpCkBAIC0xMTksNyArMTE0LDcgQEAgdm9pZCBIVE1MQmFzZUVsZW1lbnRJbXBs
OjpzZXRUYXJnZXQoY29ucwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MTGlua0VsZW1lbnRJ
bXBsOjpIVE1MTGlua0VsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0gICAgOiBIVE1MRWxl
bWVudEltcGwoZG9jKQorICAgIDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6bGluaygpLCBk
b2MpCiB7CiAgICAgbV9zaGVldCA9IDA7CiAgICAgbV9sb2FkaW5nID0gZmFsc2U7CkBAIC0xMzQs
MTEgKzEyOSw2IEBAIEhUTUxMaW5rRWxlbWVudEltcGw6On5IVE1MTGlua0VsZW1lbnRJbXAKICAg
ICBpZihtX2NhY2hlZFNoZWV0KSBtX2NhY2hlZFNoZWV0LT5kZXJlZih0aGlzKTsKIH0KIAotTm9k
ZUltcGw6OklkIEhUTUxMaW5rRWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
SURfTElOSzsKLX0KLQogdm9pZCBIVE1MTGlua0VsZW1lbnRJbXBsOjpzZXREaXNhYmxlZFN0YXRl
KGJvb2wgX2Rpc2FibGVkKQogewogICAgIGludCBvbGREaXNhYmxlZFN0YXRlID0gbV9kaXNhYmxl
ZFN0YXRlOwpAQCAtNDIzLDcgKzQxMyw3IEBAIHZvaWQgSFRNTExpbmtFbGVtZW50SW1wbDo6c2V0
VHlwZShjb25zdCAKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1IVE1MTWV0YUVsZW1lbnRJbXBs
OjpIVE1MTWV0YUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpIDogSFRNTEVsZW1lbnRJbXBs
KGRvYykKK0hUTUxNZXRhRWxlbWVudEltcGw6OkhUTUxNZXRhRWxlbWVudEltcGwoRG9jdW1lbnRQ
dHIgKmRvYykgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjptZXRhKCksIGRvYykKIHsKIH0K
IApAQCAtNDMxLDExICs0MjEsNiBAQCBIVE1MTWV0YUVsZW1lbnRJbXBsOjp+SFRNTE1ldGFFbGVt
ZW50SW1wCiB7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MTWV0YUVsZW1lbnRJbXBsOjppZCgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIElEX01FVEE7Ci19Ci0KIHZvaWQgSFRNTE1ldGFFbGVtZW50SW1w
bDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqYXR0cikKIHsKICAg
ICBzd2l0Y2goYXR0ci0+aWQoKSkKQEAgLTUxMiw3ICs0OTcsNyBAQCB2b2lkIEhUTUxNZXRhRWxl
bWVudEltcGw6OnNldFNjaGVtZShjb25zCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxTY3Jp
cHRFbGVtZW50SW1wbDo6SFRNTFNjcmlwdEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0g
ICAgOiBIVE1MRWxlbWVudEltcGwoZG9jKSwgbV9jYWNoZWRTY3JpcHQoMCksIG1fY3JlYXRlZEJ5
UGFyc2VyKGZhbHNlKSwgbV9ldmFsdWF0ZWQoZmFsc2UpCisgICAgOiBIVE1MRWxlbWVudEltcGwo
SFRNTE5hbWVzOjpzY3JpcHQoKSwgZG9jKSwgbV9jYWNoZWRTY3JpcHQoMCksIG1fY3JlYXRlZEJ5
UGFyc2VyKGZhbHNlKSwgbV9ldmFsdWF0ZWQoZmFsc2UpCiB7CiB9CiAKQEAgLTUyMiwxMSArNTA3
LDYgQEAgSFRNTFNjcmlwdEVsZW1lbnRJbXBsOjp+SFRNTFNjcmlwdEVsZW1lbgogICAgICAgICBt
X2NhY2hlZFNjcmlwdC0+ZGVyZWYodGhpcyk7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MU2NyaXB0
RWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfU0NSSVBUOwotfQotCiBi
b29sIEhUTUxTY3JpcHRFbGVtZW50SW1wbDo6aXNVUkxBdHRyaWJ1dGUoQXR0cmlidXRlSW1wbCAq
YXR0cikgY29uc3QKIHsKICAgICByZXR1cm4gYXR0ci0+aWQoKSA9PSBBVFRSX1NSQzsKQEAgLTY5
Nyw3ICs2NzcsNyBAQCB2b2lkIEhUTUxTY3JpcHRFbGVtZW50SW1wbDo6c2V0VHlwZShjb25zCiAK
IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSFRNTFN0eWxlRWxlbWVudEltcGw6OkhUTUxTdHlsZUVs
ZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpIDogSFRNTEVsZW1lbnRJbXBsKGRvYykKK0hUTUxT
dHlsZUVsZW1lbnRJbXBsOjpIVE1MU3R5bGVFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKSA6
IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6OnN0eWxlKCksIGRvYykKIHsKICAgICBtX3NoZWV0
ID0gMDsKICAgICBtX2xvYWRpbmcgPSBmYWxzZTsKQEAgLTcwOCwxMSArNjg4LDYgQEAgSFRNTFN0
eWxlRWxlbWVudEltcGw6On5IVE1MU3R5bGVFbGVtZW50SQogICAgIGlmKG1fc2hlZXQpIG1fc2hl
ZXQtPmRlcmVmKCk7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MU3R5bGVFbGVtZW50SW1wbDo6aWQo
KSBjb25zdAotewotICAgIHJldHVybiBJRF9TVFlMRTsKLX0KLQogLy8gb3RoZXIgc3R1ZmYuLi4K
IHZvaWQgSFRNTFN0eWxlRWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0
dHJpYnV0ZUltcGwgKmF0dHIpCiB7CkBAIC04MjQsNyArNzk5LDcgQEAgdm9pZCBIVE1MU3R5bGVF
bGVtZW50SW1wbDo6c2V0VHlwZShjb25zdAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MVGl0
bGVFbGVtZW50SW1wbDo6SFRNTFRpdGxlRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAg
ICA6IEhUTUxFbGVtZW50SW1wbChkb2MpLCBtX3RpdGxlKCIiKQorICAgIDogSFRNTEVsZW1lbnRJ
bXBsKEhUTUxOYW1lczo6dGl0bGUoKSwgZG9jKSwgbV90aXRsZSgiIikKIHsKIH0KIApAQCAtODMy
LDExICs4MDcsNiBAQCBIVE1MVGl0bGVFbGVtZW50SW1wbDo6fkhUTUxUaXRsZUVsZW1lbnRJCiB7
CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MVGl0bGVFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewot
ICAgIHJldHVybiBJRF9USVRMRTsKLX0KLQogdm9pZCBIVE1MVGl0bGVFbGVtZW50SW1wbDo6aW5z
ZXJ0ZWRJbnRvRG9jdW1lbnQoKQogewogICAgIEhUTUxFbGVtZW50SW1wbDo6aW5zZXJ0ZWRJbnRv
RG9jdW1lbnQoKTsKSW5kZXg6IGtodG1sL2h0bWwvaHRtbF9oZWFkaW1wbC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbF9oZWFkaW1wbC5oLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjIwCmRpZmYgLXUgLXAgLXIxLjIwIGtodG1sL2h0bWwvaHRt
bF9oZWFkaW1wbC5oCi0tLSBraHRtbC9odG1sL2h0bWxfaGVhZGltcGwuaAkxOSBKdW4gMjAwNSAw
NTo0NDoyOCAtMDAwMAkxLjIwCisrKyBraHRtbC9odG1sL2h0bWxfaGVhZGltcGwuaAkyMiBKdW4g
MjAwNSAyMzoyMzoyNyAtMDAwMApAQCAtNTIsNyArNTIsNiBAQCBwdWJsaWM6CiAgICAgRE9NU3Ry
aW5nIGhyZWYoKSBjb25zdCB7IHJldHVybiBtX2hyZWY7IH0KICAgICBET01TdHJpbmcgdGFyZ2V0
KCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXQ7IH0KIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25z
dDsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRl
SW1wbCAqYXR0cik7CiAgICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b0RvY3VtZW50KCk7CiAg
ICAgdmlydHVhbCB2b2lkIHJlbW92ZWRGcm9tRG9jdW1lbnQoKTsKQEAgLTc3LDggKzc2LDYgQEAg
cHVibGljOgogICAgIEhUTUxMaW5rRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYyk7CiAgICAg
fkhUTUxMaW5rRWxlbWVudEltcGwoKTsKIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKLQog
ICAgIGJvb2wgZGlzYWJsZWQoKSBjb25zdDsKICAgICB2b2lkIHNldERpc2FibGVkKGJvb2wpOwog
CkBAIC0xNTUsNyArMTUyLDYgQEAgcHVibGljOgogCiAgICAgfkhUTUxNZXRhRWxlbWVudEltcGwo
KTsKIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VN
YXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqYXR0cik7CiAgICAgdmlydHVhbCB2
b2lkIGluc2VydGVkSW50b0RvY3VtZW50KCk7CiAKQEAgLTE4OSw5ICsxODUsOSBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b0RvY3VtZW50KCk7CiAgICAgdmlydHVhbCB2
b2lkIHJlbW92ZWRGcm9tRG9jdW1lbnQoKTsKICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5RmluaXNo
ZWQoa2h0bWw6OkNhY2hlZE9iamVjdCAqZmluaXNoZWRPYmopOworCiAgICAgdmlydHVhbCB2b2lk
IGNoaWxkcmVuQ2hhbmdlZCgpOwotICAgIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKKwog
ICAgIHZpcnR1YWwgYm9vbCBpc1VSTEF0dHJpYnV0ZShBdHRyaWJ1dGVJbXBsICphdHRyKSBjb25z
dDsKIAogICAgIHZvaWQgc2V0Q3JlYXRlZEJ5UGFyc2VyKGJvb2wgY3JlYXRlZEJ5UGFyc2VyKSB7
IG1fY3JlYXRlZEJ5UGFyc2VyID0gY3JlYXRlZEJ5UGFyc2VyOyB9CkBAIC0yMzMsOCArMjI5LDYg
QEAgcHVibGljOgogICAgIEhUTUxTdHlsZUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpOwog
ICAgIH5IVE1MU3R5bGVFbGVtZW50SW1wbCgpOwogCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0
OwotCiAgICAgU3R5bGVTaGVldEltcGwgKnNoZWV0KCkgY29uc3QgeyByZXR1cm4gbV9zaGVldDsg
fQogCiAgICAgLy8gb3ZlcmxvYWQgZnJvbSBIVE1MRWxlbWVudEltcGwKQEAgLTI3MSw4ICsyNjUs
NiBAQCBwdWJsaWM6CiAKICAgICB+SFRNTFRpdGxlRWxlbWVudEltcGwoKTsKIAotICAgIHZpcnR1
YWwgSWQgaWQoKSBjb25zdDsKLQogICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9Eb2N1bWVu
dCgpOwogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkRnJvbURvY3VtZW50KCk7CiAgICAgdmlydHVh
bCB2b2lkIGNoaWxkcmVuQ2hhbmdlZCgpOwpJbmRleDoga2h0bWwvaHRtbC9odG1sX2ltYWdlaW1w
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9o
dG1sX2ltYWdlaW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNDMKZGlmZiAtdSAtcCAt
cjEuNDMga2h0bWwvaHRtbC9odG1sX2ltYWdlaW1wbC5jcHAKLS0tIGtodG1sL2h0bWwvaHRtbF9p
bWFnZWltcGwuY3BwCTIxIEp1biAyMDA1IDIyOjI3OjU1IC0wMDAwCTEuNDMKKysrIGtodG1sL2h0
bWwvaHRtbF9pbWFnZWltcGwuY3BwCTIyIEp1biAyMDA1IDIzOjIzOjI4IC0wMDAwCkBAIC01MSw3
ICs1MSw3IEBACiB1c2luZyBuYW1lc3BhY2UgRE9NOwogdXNpbmcgbmFtZXNwYWNlIGtodG1sOwog
Ci0vLyNkZWZpbmUgSU5TVFJVTUVOVF9MQVlPVVRfU0NIRURVTElORyAxCisvLyAjZGVmaW5lIElO
U1RSVU1FTlRfTEFZT1VUX1NDSEVEVUxJTkcgMQogCiBIVE1MSW1hZ2VMb2FkZXI6OkhUTUxJbWFn
ZUxvYWRlcihFbGVtZW50SW1wbCogZWx0KQogOm1fZWxlbWVudChlbHQpLCBtX2ltYWdlKDApLCBt
X2ZpcmVkTG9hZCh0cnVlKSwgbV9pbWFnZUNvbXBsZXRlKHRydWUpCkBAIC03NSw3ICs3NSw3IEBA
IHZvaWQgSFRNTEltYWdlTG9hZGVyOjp1cGRhdGVGcm9tRWxlbWVudCgKICAgICAgICAgcmV0dXJu
OwogCiAgICAgQXRvbWljU3RyaW5nIGF0dHI7Ci0gICAgaWYgKGVsZW1lbnQoKS0+aWQoKSA9PSBJ
RF9PQkpFQ1QpCisgICAgaWYgKGVsZW1lbnQoKS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b2Jq
ZWN0KCkpKQogICAgICAgICBhdHRyID0gZWxlbWVudCgpLT5nZXRBdHRyaWJ1dGUoQVRUUl9EQVRB
KTsKICAgICBlbHNlCiAgICAgICAgIGF0dHIgPSBlbGVtZW50KCktPmdldEF0dHJpYnV0ZShBVFRS
X1NSQyk7CkBAIC04Niw2ICs4NiwxMCBAQCB2b2lkIEhUTUxJbWFnZUxvYWRlcjo6dXBkYXRlRnJv
bUVsZW1lbnQoCiAgICAgICAgIG5ld0ltYWdlID0gZWxlbWVudCgpLT5nZXREb2N1bWVudCgpLT5k
b2NMb2FkZXIoKS0+cmVxdWVzdEltYWdlKGtodG1sOjpwYXJzZVVSTChhdHRyKSk7CiAKICAgICBp
ZiAobmV3SW1hZ2UgIT0gbV9pbWFnZSkgeworI2lmZGVmIElOU1RSVU1FTlRfTEFZT1VUX1NDSEVE
VUxJTkcKKyAgICAgICAgaWYgKCFkb2N1bWVudC0+b3duZXJFbGVtZW50KCkgJiYgbmV3SW1hZ2Up
CisgICAgICAgICAgICBwcmludGYoIkltYWdlIHJlcXVlc3RlZCBhdCAlZFxuIiwgZWxlbWVudCgp
LT5nZXREb2N1bWVudCgpLT5lbGFwc2VkVGltZSgpKTsKKyNlbmRpZgogICAgICAgICBtX2ZpcmVk
TG9hZCA9IGZhbHNlOwogICAgICAgICBtX2ltYWdlQ29tcGxldGUgPSBmYWxzZTsKICAgICAgICAg
Q2FjaGVkSW1hZ2UqIG9sZEltYWdlID0gbV9pbWFnZTsKQEAgLTEzMyw3ICsxMzcsNyBAQCB2b2lk
IEhUTUxJbWFnZUxvYWRlcjo6bm90aWZ5RmluaXNoZWQoQ2FjCiAvLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CiAKIEhUTUxJbWFnZUVsZW1lbnRJbXBsOjpIVE1MSW1hZ2VFbGVtZW50SW1wbChEb2N1bWVudFB0
ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmKQotICAgIDogSFRNTEVsZW1lbnRJbXBsKGRv
YyksIG1faW1hZ2VMb2FkZXIodGhpcyksIGlzbWFwKGZhbHNlKSwgbV9mb3JtKGYpCisgICAgOiBI
VE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjppbWcoKSwgZG9jKSwgbV9pbWFnZUxvYWRlcih0aGlz
KSwgaXNtYXAoZmFsc2UpLCBtX2Zvcm0oZikKIHsKICAgICBpZiAobV9mb3JtKQogICAgICAgICBt
X2Zvcm0tPnJlZ2lzdGVySW1nRWxlbWVudCh0aGlzKTsKQEAgLTE0NSwxMSArMTQ5LDYgQEAgSFRN
TEltYWdlRWxlbWVudEltcGw6On5IVE1MSW1hZ2VFbGVtZW50SQogICAgICAgICBtX2Zvcm0tPnJl
bW92ZUltZ0VsZW1lbnQodGhpcyk7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MSW1hZ2VFbGVtZW50
SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9JTUc7Ci19Ci0KIGJvb2wgSFRNTElt
YWdlRWxlbWVudEltcGw6Om1hcFRvRW50cnkoTm9kZUltcGw6OklkIGF0dHIsIE1hcHBlZEF0dHJp
YnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0CiB7CiAgICAgc3dpdGNoKGF0dHIpCkBAIC01MjgsNyAr
NTI3LDcgQEAgbG9uZyBIVE1MSW1hZ2VFbGVtZW50SW1wbDo6eSgpIGNvbnN0CiAvLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCiAKIEhUTUxNYXBFbGVtZW50SW1wbDo6SFRNTE1hcEVsZW1lbnRJbXBsKERvY3Vt
ZW50UHRyICpkb2MpCi0gICAgOiBIVE1MRWxlbWVudEltcGwoZG9jKQorICAgIDogSFRNTEVsZW1l
bnRJbXBsKEhUTUxOYW1lczo6bWFwKCksIGRvYykKIHsKIH0KIApAQCAtNTM4LDExICs1MzcsNiBA
QCBIVE1MTWFwRWxlbWVudEltcGw6On5IVE1MTWFwRWxlbWVudEltcGwoCiAgICAgICAgIGdldERv
Y3VtZW50KCktPnJlbW92ZUltYWdlTWFwKHRoaXMpOwogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTE1h
cEVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX01BUDsKLX0KLQogYm9v
bAogSFRNTE1hcEVsZW1lbnRJbXBsOjptYXBNb3VzZUV2ZW50KGludCB4XywgaW50IHlfLCBpbnQg
d2lkdGhfLCBpbnQgaGVpZ2h0XywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBS
ZW5kZXJPYmplY3Q6Ok5vZGVJbmZvJiBpbmZvKQpAQCAtNTUyLDMyICs1NDYsMjggQEAgSFRNTE1h
cEVsZW1lbnRJbXBsOjptYXBNb3VzZUV2ZW50KGludCB4XwogICAgIFFQdHJTdGFjazxOb2RlSW1w
bD4gbm9kZVN0YWNrOwogCiAgICAgTm9kZUltcGwgKmN1cnJlbnQgPSBmaXJzdENoaWxkKCk7Ci0g
ICAgd2hpbGUoMSkKLSAgICB7Ci0gICAgICAgIGlmKCFjdXJyZW50KQotICAgICAgICB7CisgICAg
d2hpbGUgKDEpIHsKKyAgICAgICAgaWYgKCFjdXJyZW50KSB7CiAgICAgICAgICAgICBpZihub2Rl
U3RhY2suaXNFbXB0eSgpKSBicmVhazsKICAgICAgICAgICAgIGN1cnJlbnQgPSBub2RlU3RhY2su
cG9wKCk7CiAgICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC0+bmV4dFNpYmxpbmcoKTsKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIGlmKGN1cnJlbnQtPmlkKCk9
PUlEX0FSRUEpCi0gICAgICAgIHsKKyAgICAgICAgCisgICAgICAgIGlmIChjdXJyZW50LT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6YXJlYSgpKSkgewogICAgICAgICAgICAgLy9jb3V0IDw8ICJhcmVh
IGZvdW5kICIgPDwgZW5kbDsKLSAgICAgICAgICAgIEhUTUxBcmVhRWxlbWVudEltcGwqIGFyZWE9
c3RhdGljX2Nhc3Q8SFRNTEFyZWFFbGVtZW50SW1wbCo+KGN1cnJlbnQpOworICAgICAgICAgICAg
SFRNTEFyZWFFbGVtZW50SW1wbCogYXJlYSA9IHN0YXRpY19jYXN0PEhUTUxBcmVhRWxlbWVudElt
cGwqPihjdXJyZW50KTsKICAgICAgICAgICAgIGlmIChhcmVhLT5tYXBNb3VzZUV2ZW50KHhfLHlf
LHdpZHRoXyxoZWlnaHRfLCBpbmZvKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgICAgfQorICAgICAgICAKICAgICAgICAgTm9kZUltcGwgKmNoaWxkID0gY3VycmVudC0+Zmly
c3RDaGlsZCgpOwotICAgICAgICBpZihjaGlsZCkKLSAgICAgICAgeworICAgICAgICBpZiAoY2hp
bGQpIHsKICAgICAgICAgICAgIG5vZGVTdGFjay5wdXNoKGN1cnJlbnQpOwogICAgICAgICAgICAg
Y3VycmVudCA9IGNoaWxkOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKLSAgICAgICAgewogICAg
ICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQtPm5leHRTaWJsaW5nKCk7Ci0gICAgICAgIH0KICAg
ICB9CiAKICAgICByZXR1cm4gZmFsc2U7CkBAIC02MzUsMTEgKzYyNSw2IEBAIEhUTUxBcmVhRWxl
bWVudEltcGw6On5IVE1MQXJlYUVsZW1lbnRJbXAKICAgICBpZiAobV9jb29yZHMpIGRlbGV0ZSBb
XSBtX2Nvb3JkczsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxBcmVhRWxlbWVudEltcGw6OmlkKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gSURfQVJFQTsKLX0KLQogdm9pZCBIVE1MQXJlYUVsZW1lbnRJ
bXBsOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICphdHRyKQogewog
ICAgIHN3aXRjaCAoYXR0ci0+aWQoKSkKSW5kZXg6IGtodG1sL2h0bWwvaHRtbF9pbWFnZWltcGwu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9odG1sL2h0bWxf
aW1hZ2VpbXBsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjEKZGlmZiAtdSAtcCAtcjEuMjEg
a2h0bWwvaHRtbC9odG1sX2ltYWdlaW1wbC5oCi0tLSBraHRtbC9odG1sL2h0bWxfaW1hZ2VpbXBs
LmgJMTEgTWF5IDIwMDUgMDU6NDk6MzQgLTAwMDAJMS4yMQorKysga2h0bWwvaHRtbC9odG1sX2lt
YWdlaW1wbC5oCTIyIEp1biAyMDA1IDIzOjIzOjI4IC0wMDAwCkBAIC03Nyw4ICs3Nyw2IEBAIHB1
YmxpYzoKICAgICBIVE1MSW1hZ2VFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCBIVE1MRm9y
bUVsZW1lbnRJbXBsICpmID0gMCk7CiAgICAgfkhUTUxJbWFnZUVsZW1lbnRJbXBsKCk7CiAKLSAg
ICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7Ci0KICAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShO
b2RlSW1wbDo6SWQgYXR0ciwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3Q7CiAg
ICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwg
Kik7CiAKQEAgLTE2MSw4ICsxNTksNiBAQCBwdWJsaWM6CiAgICAgSFRNTEFyZWFFbGVtZW50SW1w
bChEb2N1bWVudFB0ciAqZG9jKTsKICAgICB+SFRNTEFyZWFFbGVtZW50SW1wbCgpOwogCi0gICAg
dmlydHVhbCBJZCBpZCgpIGNvbnN0OwotCiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0
cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIpOwogCiAgICAgYm9vbCBpc0RlZmF1bHQo
KSBjb25zdCB7IHJldHVybiBtX3NoYXBlID09IERlZmF1bHQ7IH0KQEAgLTIxMiwxMSArMjA4LDgg
QEAgY2xhc3MgSFRNTE1hcEVsZW1lbnRJbXBsIDogcHVibGljIEhUTUxFbAogewogcHVibGljOgog
ICAgIEhUTUxNYXBFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKTsKLQogICAgIH5IVE1MTWFw
RWxlbWVudEltcGwoKTsKIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKLQogICAgIHZpcnR1
YWwgRE9NU3RyaW5nIGdldE5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KIAogICAgIHZp
cnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICphdHRy
KTsKSW5kZXg6IGtodG1sL2h0bWwvaHRtbF9pbmxpbmVpbXBsLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfaW5saW5laW1wbC5jcHAsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuNDIKZGlmZiAtdSAtcCAtcjEuNDIga2h0bWwvaHRtbC9odG1s
X2lubGluZWltcGwuY3BwCi0tLSBraHRtbC9odG1sL2h0bWxfaW5saW5laW1wbC5jcHAJMTEgTWF5
IDIwMDUgMDU6NDk6MzQgLTAwMDAJMS40MgorKysga2h0bWwvaHRtbC9odG1sX2lubGluZWltcGwu
Y3BwCTIyIEp1biAyMDA1IDIzOjIzOjI4IC0wMDAwCkBAIC00NSw3ICs0NSw3IEBAIHVzaW5nIG5h
bWVzcGFjZSBraHRtbDsKIG5hbWVzcGFjZSBET00gewogCiBIVE1MQW5jaG9yRWxlbWVudEltcGw6
OkhUTUxBbmNob3JFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAgIDogSFRNTEVsZW1l
bnRJbXBsKGRvYykKKyAgICA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6OmEoKSwgZG9jKQog
ewogICAgIG1faGFzVGFyZ2V0ID0gZmFsc2U7CiB9CkBAIC0xMDQsMTEgKzEwNCw2IEBAIGJvb2wg
SFRNTEFuY2hvckVsZW1lbnRJbXBsOjppc0tleWJvYXJkRm8KICAgICByZXR1cm4gZ2V0RG9jdW1l
bnQoKS0+cGFydCgpLT50YWJzVG9MaW5rcygpOwogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTEFuY2hv
ckVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0E7Ci19Ci0KIHZvaWQg
SFRNTEFuY2hvckVsZW1lbnRJbXBsOjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50SW1wbCAqZXZ0
KQogewogICAgIC8vIFJlYWN0IG9uIGNsaWNrcyBhbmQgb24ga2V5cHJlc3Nlcy4KQEAgLTE1Miw3
ICsxNDcsNyBAQCB2b2lkIEhUTUxBbmNob3JFbGVtZW50SW1wbDo6ZGVmYXVsdEV2ZW50CiAgICAg
ICAgIGlmICggZSAmJiBlLT5idXR0b24oKSA9PSAxICkKICAgICAgICAgICAgIHV0YXJnZXQgPSAi
X2JsYW5rIjsKIAotICAgICAgICBpZiAoIGV2dC0+dGFyZ2V0KCktPmlkKCkgPT0gSURfSU1HICkg
eworICAgICAgICBpZiAoZXZ0LT50YXJnZXQoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmltZygp
KSkgewogICAgICAgICAgICAgSFRNTEltYWdlRWxlbWVudEltcGwqIGltZyA9IHN0YXRpY19jYXN0
PEhUTUxJbWFnZUVsZW1lbnRJbXBsKj4oIGV2dC0+dGFyZ2V0KCkgKTsKICAgICAgICAgICAgIGlm
ICggaW1nICYmIGltZy0+aXNTZXJ2ZXJNYXAoKSApCiAgICAgICAgICAgICB7CkBAIC0zODIsNyAr
Mzc3LDcgQEAgdm9pZCBIVE1MQW5jaG9yRWxlbWVudEltcGw6OmZvY3VzKCkKIAogLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQogCi1IVE1MQlJFbGVtZW50SW1wbDo6SFRNTEJSRWxlbWVudEltcGwoRG9jdW1l
bnRQdHIgKmRvYykgOiBIVE1MRWxlbWVudEltcGwoZG9jKQorSFRNTEJSRWxlbWVudEltcGw6OkhU
TUxCUkVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpIDogSFRNTEVsZW1lbnRJbXBsKEhUTUxO
YW1lczo6YnIoKSwgZG9jKQogewogfQogCkBAIC0zOTAsMTEgKzM4NSw2IEBAIEhUTUxCUkVsZW1l
bnRJbXBsOjp+SFRNTEJSRWxlbWVudEltcGwoKQogewogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTEJS
RWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfQlI7Ci19Ci0KIGJvb2wg
SFRNTEJSRWxlbWVudEltcGw6Om1hcFRvRW50cnkoTm9kZUltcGw6OklkIGF0dHIsIE1hcHBlZEF0
dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0CiB7CiAgICAgaWYgKGF0dHIgPT0gQVRUUl9DTEVB
UikgewpAQCAtNDQ1LDcgKzQzNSw3IEBAIHZvaWQgSFRNTEJSRWxlbWVudEltcGw6OnNldENsZWFy
KGNvbnN0IEQKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogSFRNTEZvbnRFbGVtZW50SW1wbDo6SFRN
TEZvbnRFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAgIDogSFRNTEVsZW1lbnRJbXBs
KGRvYykKKyAgICA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6OmZvbnQoKSwgZG9jKQogewog
fQogCkBAIC00NTMsMTEgKzQ0Myw2IEBAIEhUTUxGb250RWxlbWVudEltcGw6On5IVE1MRm9udEVs
ZW1lbnRJbXAKIHsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxGb250RWxlbWVudEltcGw6OmlkKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gSURfRk9OVDsKLX0KLQogLy8gQWxsb3dzIGxlYWRpbmcgc3Bh
Y2VzLgogLy8gQWxsb3dzIHRyYWlsaW5nIG5vbm51bWVyaWMgY2hhcmFjdGVycy4KIC8vIFJldHVy
bnMgMTAgZm9yIGFueSBzaXplIGdyZWF0ZXIgdGhhbiA5LgpAQCAtNTkwLDggKzU3NSw4IEBAIHZv
aWQgSFRNTEZvbnRFbGVtZW50SW1wbDo6c2V0U2l6ZShjb25zdCAKIAogLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQogCi1IVE1MTW9kRWxlbWVudEltcGw6OkhUTUxNb2RFbGVtZW50SW1wbChEb2N1bWVudFB0
ciAqZG9jLCB1c2hvcnQgZWxlbWVudElkKQotICAgIDogSFRNTEdlbmVyaWNFbGVtZW50SW1wbChk
b2MsIGVsZW1lbnRJZCkKK0hUTUxNb2RFbGVtZW50SW1wbDo6SFRNTE1vZEVsZW1lbnRJbXBsKGNv
bnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50UHRyICpkb2MpCisgICAgOiBIVE1M
RWxlbWVudEltcGwodGFnTmFtZSwgZG9jKQogewogfQogCkBAIC02MTgsMTUgKzYwMywxMCBAQCB2
b2lkIEhUTUxNb2RFbGVtZW50SW1wbDo6c2V0RGF0ZVRpbWUoY29uCiAvLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCiAKIEhUTUxRdW90ZUVsZW1lbnRJbXBsOjpIVE1MUXVvdGVFbGVtZW50SW1wbChEb2N1bWVu
dFB0ciAqZG9jKQotICAgIDogSFRNTEVsZW1lbnRJbXBsKGRvYykKKyAgICA6IEhUTUxFbGVtZW50
SW1wbChIVE1MTmFtZXM6OnEoKSwgZG9jKQogewogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTFF1b3Rl
RWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfUTsKLX0KLSAgICAKIERP
TVN0cmluZyBIVE1MUXVvdGVFbGVtZW50SW1wbDo6Y2l0ZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IGdldEF0dHJpYnV0ZShBVFRSX0NJVEUpOwpJbmRleDoga2h0bWwvaHRtbC9odG1sX2lubGluZWlt
cGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9odG1sL2h0
bWxfaW5saW5laW1wbC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE5CmRpZmYgLXUgLXAgLXIx
LjE5IGtodG1sL2h0bWwvaHRtbF9pbmxpbmVpbXBsLmgKLS0tIGtodG1sL2h0bWwvaHRtbF9pbmxp
bmVpbXBsLmgJMTEgTWF5IDIwMDUgMDU6NDk6MzQgLTAwMDAJMS4xOQorKysga2h0bWwvaHRtbC9o
dG1sX2lubGluZWltcGwuaAkyMiBKdW4gMjAwNSAyMzoyMzoyOCAtMDAwMApAQCAtMzksNyArMzks
NiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlzTW91c2VGb2N1c2FibGUoKSBjb25zdDsK
ICAgICB2aXJ0dWFsIGJvb2wgaXNLZXlib2FyZEZvY3VzYWJsZSgpIGNvbnN0OwogICAgIHZpcnR1
YWwgYm9vbCBpc0ZvY3VzYWJsZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsK
ICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1w
bCAqYXR0cik7CiAgICAgdmlydHVhbCB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnRJbXBs
ICpldnQpOwogICAgIHZpcnR1YWwgdm9pZCBhY2Nlc3NLZXlBY3Rpb24oYm9vbCBmdWxsQWN0aW9u
KTsKQEAgLTk3LDggKzk2LDYgQEAgY2xhc3MgSFRNTEJSRWxlbWVudEltcGwgOiBwdWJsaWMgSFRN
TEVsZQogcHVibGljOgogICAgIEhUTUxCUkVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpOwog
ICAgIH5IVE1MQlJFbGVtZW50SW1wbCgpOwotCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0Owog
ICAgIAogICAgIHZpcnR1YWwgYm9vbCBtYXBUb0VudHJ5KElkIGF0dHIsIE1hcHBlZEF0dHJpYnV0
ZUVudHJ5JiByZXN1bHQpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJp
YnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICphdHRyKTsKQEAgLTExNiw4ICsxMTMsNiBAQCBjbGFz
cyBIVE1MRm9udEVsZW1lbnRJbXBsIDogcHVibGljIEhUTUxFCiBwdWJsaWM6CiAgICAgSFRNTEZv
bnRFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKTsKICAgICB+SFRNTEZvbnRFbGVtZW50SW1w
bCgpOwotCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwogICAgIAogICAgIHZpcnR1YWwgYm9v
bCBtYXBUb0VudHJ5KElkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0
OwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJ
bXBsICphdHRyKTsKQEAgLTEzNCwxMCArMTI5LDEwIEBAIHB1YmxpYzoKIAogLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQogCi1jbGFzcyBIVE1MTW9kRWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTEdlbmVyaWNF
bGVtZW50SW1wbAorY2xhc3MgSFRNTE1vZEVsZW1lbnRJbXBsIDogcHVibGljIEhUTUxFbGVtZW50
SW1wbAogewogcHVibGljOgotICAgIEhUTUxNb2RFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9j
LCB1c2hvcnQgZWxlbWVudElkKTsKKyAgICBIVE1MTW9kRWxlbWVudEltcGwoY29uc3QgUXVhbGlm
aWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnRQdHIgKmRvYyk7CiAKICAgICBET01TdHJpbmcgY2l0
ZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0Q2l0ZShjb25zdCBET01TdHJpbmcgJik7CkBAIC0xNTIs
OCArMTQ3LDYgQEAgY2xhc3MgSFRNTFF1b3RlRWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTAogewog
cHVibGljOgogICAgIEhUTUxRdW90ZUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpOwotCi0g
ICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwogICAgIAogICAgIERPTVN0cmluZyBjaXRlKCkgY29u
c3Q7CiAgICAgdm9pZCBzZXRDaXRlKGNvbnN0IERPTVN0cmluZyAmKTsKSW5kZXg6IGtodG1sL2h0
bWwvaHRtbF9saXN0aW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNv
cmUva2h0bWwvaHRtbC9odG1sX2xpc3RpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS45
CmRpZmYgLXUgLXAgLXIxLjkga2h0bWwvaHRtbC9odG1sX2xpc3RpbXBsLmNwcAotLS0ga2h0bWwv
aHRtbC9odG1sX2xpc3RpbXBsLmNwcAkxMSBNYXkgMjAwNSAwNTo0OTozNCAtMDAwMAkxLjkKKysr
IGtodG1sL2h0bWwvaHRtbF9saXN0aW1wbC5jcHAJMjIgSnVuIDIwMDUgMjM6MjM6MjggLTAwMDAK
QEAgLTMyLDExICszMiw2IEBAIHVzaW5nIG5hbWVzcGFjZSBraHRtbDsKIAogbmFtZXNwYWNlIERP
TSB7CiAKLU5vZGVJbXBsOjpJZCBIVE1MVUxpc3RFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewot
ICAgIHJldHVybiBJRF9VTDsKLX0KLQogYm9vbCBIVE1MVUxpc3RFbGVtZW50SW1wbDo6bWFwVG9F
bnRyeShOb2RlSW1wbDo6SWQgYXR0ciwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29u
c3QKIHsKICAgICBzd2l0Y2ggKGF0dHIpIHsKQEAgLTg0LDExICs3OSw2IEBAIHZvaWQgSFRNTFVM
aXN0RWxlbWVudEltcGw6OnNldFR5cGUoY29uc3QKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1O
b2RlSW1wbDo6SWQgSFRNTERpcmVjdG9yeUVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIElEX0RJUjsKLX0KLQogYm9vbCBIVE1MRGlyZWN0b3J5RWxlbWVudEltcGw6OmNvbXBh
Y3QoKSBjb25zdAogewogICAgIHJldHVybiAhZ2V0QXR0cmlidXRlKEFUVFJfQ09NUEFDVCkuaXNO
dWxsKCk7CkBAIC0xMDEsMTEgKzkxLDYgQEAgdm9pZCBIVE1MRGlyZWN0b3J5RWxlbWVudEltcGw6
OnNldENvbXBhYwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLU5vZGVJbXBsOjpJZCBIVE1MTWVu
dUVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX01FTlU7Ci19Ci0KIGJv
b2wgSFRNTE1lbnVFbGVtZW50SW1wbDo6Y29tcGFjdCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuICFn
ZXRBdHRyaWJ1dGUoQVRUUl9DT01QQUNUKS5pc051bGwoKTsKQEAgLTExOCwxMSArMTAzLDYgQEAg
dm9pZCBIVE1MTWVudUVsZW1lbnRJbXBsOjpzZXRDb21wYWN0KGJvbwogCiAvLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCiAKLU5vZGVJbXBsOjpJZCBIVE1MT0xpc3RFbGVtZW50SW1wbDo6aWQoKSBjb25zdAot
ewotICAgIHJldHVybiBJRF9PTDsKLX0KLQogYm9vbCBIVE1MT0xpc3RFbGVtZW50SW1wbDo6bWFw
VG9FbnRyeShOb2RlSW1wbDo6SWQgYXR0ciwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkg
Y29uc3QKIHsKICAgICBzd2l0Y2ggKGF0dHIpIHsKQEAgLTE1NSw3ICsxMzUsNyBAQCB2b2lkIEhU
TUxPTGlzdEVsZW1lbnRJbXBsOjpwYXJzZU1hcHBlZEF0CiAgICAgY2FzZSBBVFRSX1NUQVJUOgog
ICAgICAgICAgICAgX3N0YXJ0ID0gIWF0dHItPmlzTnVsbCgpID8gYXR0ci0+dmFsdWUoKS50b0lu
dCgpIDogMTsKICAgICBkZWZhdWx0OgotICAgICAgICBIVE1MVUxpc3RFbGVtZW50SW1wbDo6cGFy
c2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgIEhUTUxFbGVtZW50SW1wbDo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUoYXR0cik7CiAgICAgfQogfQogCkBAIC0xODYsMTEgKzE2Niw2IEBAIHZv
aWQgSFRNTE9MaXN0RWxlbWVudEltcGw6OnNldFR5cGUoY29uc3QKIAogLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQogCi1Ob2RlSW1wbDo6SWQgSFRNTExJRWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gSURfTEk7Ci19Ci0KIGJvb2wgSFRNTExJRWxlbWVudEltcGw6Om1hcFRvRW50cnko
Tm9kZUltcGw6OklkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0CiB7
CiAgICAgc3dpdGNoIChhdHRyKSB7CkBAIC0yNTIsMTEgKzIyNyw4IEBAIHZvaWQgSFRNTExJRWxl
bWVudEltcGw6OmF0dGFjaCgpCiAgICAgICAgIE5vZGVJbXBsICpsaXN0Tm9kZSA9IDA7CiAgICAg
ICAgIE5vZGVJbXBsICpuID0gdGhpczsKICAgICAgICAgd2hpbGUgKCFsaXN0Tm9kZSAmJiAobiA9
IG4tPnBhcmVudE5vZGUoKSkpIHsKLSAgICAgICAgICAgIHN3aXRjaCAobi0+aWQoKSkgewotICAg
ICAgICAgICAgICAgIGNhc2UgSURfVUw6Ci0gICAgICAgICAgICAgICAgY2FzZSBJRF9PTDoKLSAg
ICAgICAgICAgICAgICAgICAgbGlzdE5vZGUgPSBuOwotICAgICAgICAgICAgfQorICAgICAgICAg
ICAgaWYgKG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp1bCgpKSB8fCBuLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6b2woKSkpCisgICAgICAgICAgICAgICAgbGlzdE5vZGUgPSBuOwogICAgICAgICB9
CiAgICAgICAgIAogICAgICAgICAvLyBJZiB3ZSBhcmUgbm90IGluIGEgbGlzdCwgdGVsbCB0aGUg
cmVuZGVyZXIgc28gaXQgY2FuIHBvc2l0aW9uIHVzIGluc2lkZS4KQEAgLTI2NSw3ICsyMzcsNyBA
QCB2b2lkIEhUTUxMSUVsZW1lbnRJbXBsOjphdHRhY2goKQogICAgICAgICAgICAgcmVuZGVyLT5z
ZXROb3RJbkxpc3QodHJ1ZSk7CiAKIAkvLyBJZiB3ZSBhcmUgZmlyc3QsIGFuZCB0aGUgT0wgaGFz
IGEgc3RhcnQgYXR0ciwgc2V0IHRoZSB2YWx1ZS4KLQlpZiAobGlzdE5vZGUgJiYgbGlzdE5vZGUt
PmlkKCkgPT0gSURfT0wgJiYgIW1fcmVuZGVyLT5wcmV2aW91c1NpYmxpbmcoKSkgeworCWlmIChs
aXN0Tm9kZSAmJiBsaXN0Tm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9sKCkpICYmICFtX3Jl
bmRlci0+cHJldmlvdXNTaWJsaW5nKCkpIHsKIAkgICAgSFRNTE9MaXN0RWxlbWVudEltcGwgKm9s
ID0gc3RhdGljX2Nhc3Q8SFRNTE9MaXN0RWxlbWVudEltcGwgKj4obGlzdE5vZGUpOwogICAgICAg
ICAgICAgcmVuZGVyLT5zZXRWYWx1ZShvbC0+c3RhcnQoKSk7CiAJfQpAQCAtMjk1LDEyICsyNjcs
OCBAQCB2b2lkIEhUTUxMSUVsZW1lbnRJbXBsOjpzZXRWYWx1ZShsb25nIHZhCiB7CiAgICAgc2V0
QXR0cmlidXRlKEFUVFJfVkFMVUUsIFFTdHJpbmc6Om51bWJlcih2YWx1ZSkpOwogfQotLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQogCi1Ob2RlSW1wbDo6SWQgSFRNTERMaXN0RWxlbWVudEltcGw6OmlkKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gSURfREw7Ci19CisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIGJv
b2wgSFRNTERMaXN0RWxlbWVudEltcGw6OmNvbXBhY3QoKSBjb25zdAogewpJbmRleDoga2h0bWwv
aHRtbC9odG1sX2xpc3RpbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNv
cmUva2h0bWwvaHRtbC9odG1sX2xpc3RpbXBsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNwpk
aWZmIC11IC1wIC1yMS43IGtodG1sL2h0bWwvaHRtbF9saXN0aW1wbC5oCi0tLSBraHRtbC9odG1s
L2h0bWxfbGlzdGltcGwuaAkxMSBNYXkgMjAwNSAwNTo0OTozNCAtMDAwMAkxLjcKKysrIGtodG1s
L2h0bWwvaHRtbF9saXN0aW1wbC5oCTIyIEp1biAyMDA1IDIzOjIzOjI4IC0wMDAwCkBAIC0zNSwx
MSArMzUsOSBAQCBuYW1lc3BhY2UgRE9NCiBjbGFzcyBIVE1MVUxpc3RFbGVtZW50SW1wbCA6IHB1
YmxpYyBIVE1MRWxlbWVudEltcGwKIHsKIHB1YmxpYzoKLSAgICBIVE1MVUxpc3RFbGVtZW50SW1w
bChEb2N1bWVudFB0ciAqZG9jKSA6IEhUTUxFbGVtZW50SW1wbChkb2MpIHt9CisgICAgSFRNTFVM
aXN0RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5h
bWVzOjp1bCgpLCBkb2MpIHt9CiAgICAgdmlydHVhbCB+SFRNTFVMaXN0RWxlbWVudEltcGwoKSB7
fQogCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwotCiAgICAgdmlydHVhbCBib29sIG1hcFRv
RW50cnkoSWQgYXR0ciwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3Q7CiAgICAg
dmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKik7
CiAKQEAgLTU3LDkgKzU1LDcgQEAgcHVibGljOgogY2xhc3MgSFRNTERpcmVjdG9yeUVsZW1lbnRJ
bXBsIDogcHVibGljIEhUTUxFbGVtZW50SW1wbAogewogcHVibGljOgotICAgIEhUTUxEaXJlY3Rv
cnlFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKSA6IEhUTUxFbGVtZW50SW1wbChkb2MpIHt9
Ci0KLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CisgICAgSFRNTERpcmVjdG9yeUVsZW1lbnRJ
bXBsKERvY3VtZW50UHRyICpkb2MpIDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6ZGlyKCks
IGRvYykge30KIAogICAgIGJvb2wgY29tcGFjdCgpIGNvbnN0OwogICAgIHZvaWQgc2V0Q29tcGFj
dChib29sKTsKQEAgLTcwLDkgKzY2LDcgQEAgcHVibGljOgogY2xhc3MgSFRNTE1lbnVFbGVtZW50
SW1wbCA6IHB1YmxpYyBIVE1MRWxlbWVudEltcGwKIHsKIHB1YmxpYzoKLSAgICBIVE1MTWVudUVs
ZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpIDogSFRNTEVsZW1lbnRJbXBsKGRvYykge30KLQot
ICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKKyAgICBIVE1MTWVudUVsZW1lbnRJbXBsKERvY3Vt
ZW50UHRyICpkb2MpIDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6bWVudSgpLCBkb2MpIHt9
CiAKICAgICBib29sIGNvbXBhY3QoKSBjb25zdDsKICAgICB2b2lkIHNldENvbXBhY3QoYm9vbCk7
CkBAIC04MCwxMyArNzQsMTEgQEAgcHVibGljOgogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLWNs
YXNzIEhUTUxPTGlzdEVsZW1lbnRJbXBsIDogcHVibGljIEhUTUxVTGlzdEVsZW1lbnRJbXBsCitj
bGFzcyBIVE1MT0xpc3RFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MRWxlbWVudEltcGwKIHsKIHB1
YmxpYzoKICAgICBIVE1MT0xpc3RFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAgICAg
ICA6IEhUTUxVTGlzdEVsZW1lbnRJbXBsKGRvYykgeyBfc3RhcnQgPSAxOyB9Ci0KLSAgICB2aXJ0
dWFsIElkIGlkKCkgY29uc3Q7CisgICAgICAgIDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6
b2woKSwgZG9jKSB7IF9zdGFydCA9IDE7IH0KICAgICAKICAgICB2aXJ0dWFsIGJvb2wgbWFwVG9F
bnRyeShJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdDsKICAgICB2
aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqKTsK
QEAgLTExMCwxMSArMTAyLDkgQEAgY2xhc3MgSFRNTExJRWxlbWVudEltcGwgOiBwdWJsaWMgSFRN
TEVsZQogewogcHVibGljOgogICAgIEhUTUxMSUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2Mp
Ci0gICAgICAgIDogSFRNTEVsZW1lbnRJbXBsKGRvYykgeyBpc1ZhbHVlZCA9IGZhbHNlOyB9Cisg
ICAgICAgIDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6bGkoKSwgZG9jKSB7IGlzVmFsdWVk
ID0gZmFsc2U7IH0KICAgICB2aXJ0dWFsIH5IVE1MTElFbGVtZW50SW1wbCgpIHt9CiAKLSAgICB2
aXJ0dWFsIElkIGlkKCkgY29uc3Q7Ci0KICAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShOb2Rl
SW1wbDo6SWQgYXR0ciwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3Q7CiAgICAg
dmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0
dHIpOwogCkBAIC0xMzYsMTEgKzEyNiw5IEBAIHByaXZhdGU6CiBjbGFzcyBIVE1MRExpc3RFbGVt
ZW50SW1wbCA6IHB1YmxpYyBIVE1MRWxlbWVudEltcGwKIHsKIHB1YmxpYzoKLSAgICBIVE1MRExp
c3RFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKSA6IEhUTUxFbGVtZW50SW1wbChkb2MpIHt9
CisgICAgSFRNTERMaXN0RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykgOiBIVE1MRWxlbWVu
dEltcGwoSFRNTE5hbWVzOjpkbCgpLCBkb2MpIHt9CiAgICAgdmlydHVhbCB+SFRNTERMaXN0RWxl
bWVudEltcGwoKSB7fQogCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwotCiAgICAgYm9vbCBj
b21wYWN0KCkgY29uc3Q7CiAgICAgdm9pZCBzZXRDb21wYWN0KGJvb2wpOwogfTsKSW5kZXg6IGto
dG1sL2h0bWwvaHRtbF9taXNjaW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sX21pc2NpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS4yNgpkaWZmIC11IC1wIC1yMS4yNiBraHRtbC9odG1sL2h0bWxfbWlzY2ltcGwuY3BwCi0t
LSBraHRtbC9odG1sL2h0bWxfbWlzY2ltcGwuY3BwCTExIEp1biAyMDA1IDA5OjUxOjAxIC0wMDAw
CTEuMjYKKysrIGtodG1sL2h0bWwvaHRtbF9taXNjaW1wbC5jcHAJMjIgSnVuIDIwMDUgMjM6MjM6
MjkgLTAwMDAKQEAgLTM1LDE1ICszNSwxMCBAQAogbmFtZXNwYWNlIERPTSB7CiAKIEhUTUxCYXNl
Rm9udEVsZW1lbnRJbXBsOjpIVE1MQmFzZUZvbnRFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9j
KQotICAgIDogSFRNTEVsZW1lbnRJbXBsKGRvYykKKyAgICA6IEhUTUxFbGVtZW50SW1wbChIVE1M
TmFtZXM6OmJhc2Vmb250KCksIGRvYykKIHsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxCYXNlRm9u
dEVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0JBU0VGT05UOwotfQot
CiBET01TdHJpbmcgSFRNTEJhc2VGb250RWxlbWVudEltcGw6OmNvbG9yKCkgY29uc3QKIHsKICAg
ICByZXR1cm4gZ2V0QXR0cmlidXRlKEFUVFJfQ09MT1IpOwpAQCAtMTQxLDcyICsxMzYsNzIgQEAg
Tm9kZUltcGwgKkhUTUxDb2xsZWN0aW9uSW1wbDo6dHJhdmVyc2VOZQogICAgICAgICAgICAgSFRN
TEVsZW1lbnRJbXBsICplID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KGN1cnJlbnQp
OwogICAgICAgICAgICAgc3dpdGNoKHR5cGUpIHsKICAgICAgICAgICAgIGNhc2UgRE9DX0lNQUdF
UzoKLSAgICAgICAgICAgICAgICBpZihlLT5pZCgpID09IElEX0lNRykKKyAgICAgICAgICAgICAg
ICBpZiAoZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6aW1nKCkpKQogICAgICAgICAgICAgICAg
ICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBj
YXNlIERPQ19GT1JNUzoKLSAgICAgICAgICAgICAgICBpZihlLT5pZCgpID09IElEX0ZPUk0pCisg
ICAgICAgICAgICAgICAgaWYoZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6Zm9ybSgpKSkKICAg
ICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgY2FzZSBET0NfTkFNRUFCTEVfSVRFTVM6Ci0gICAgICAgICAgICAgICAgaWYo
ZS0+aWQoKSA9PSBJRF9JTUcpCisgICAgICAgICAgICAgICAgaWYgKGUtPmhhc0xvY2FsTmFtZShI
VE1MTmFtZXM6OmltZygpKSkKICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwotICAg
ICAgICAgICAgICAgIGlmKGUtPmlkKCkgPT0gSURfRk9STSkKKyAgICAgICAgICAgICAgICBpZiAo
ZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6Zm9ybSgpKSkKICAgICAgICAgICAgICAgICAgICAg
Zm91bmQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGlmKGUtPmlkKCkgPT0gSURfQVBQTEVUKQor
ICAgICAgICAgICAgICAgIGlmIChlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjphcHBsZXQoKSkp
CiAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBpZihl
LT5pZCgpID09IElEX0VNQkVEKQorICAgICAgICAgICAgICAgIGlmIChlLT5oYXNMb2NhbE5hbWUo
SFRNTE5hbWVzOjplbWJlZCgpKSkKICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwot
ICAgICAgICAgICAgICAgIGlmKGUtPmlkKCkgPT0gSURfT0JKRUNUKQorICAgICAgICAgICAgICAg
IGlmIChlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvYmplY3QoKSkpCiAgICAgICAgICAgICAg
ICAgICAgIGZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IGNhc2UgVEFCTEVfVEJPRElFUzoKLSAgICAgICAgICAgICAgICBpZihlLT5pZCgpID09IElEX1RC
T0RZKQorICAgICAgICAgICAgICAgIGlmIChlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0Ym9k
eSgpKSkKICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwotICAgICAgICAgICAgICAg
IGVsc2UgaWYoZS0+aWQoKSA9PSBJRF9UQUJMRSkKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChl
LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0YWJsZSgpKSkKICAgICAgICAgICAgICAgICAgICAg
ZGVlcCA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBU
Ul9DRUxMUzoKLSAgICAgICAgICAgICAgICBpZihlLT5pZCgpID09IElEX1REIHx8IGUtPmlkKCkg
PT0gSURfVEgpCisgICAgICAgICAgICAgICAgaWYgKGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6
OnRkKCkpIHx8IGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnRoKCkpKQogICAgICAgICAgICAg
ICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZihlLT5pZCgpID09
IElEX1RBQkxFKQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKGUtPmhhc0xvY2FsTmFtZShIVE1M
TmFtZXM6OnRhYmxlKCkpKQogICAgICAgICAgICAgICAgICAgICBkZWVwID0gZmFsc2U7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFRBQkxFX1JPV1M6CiAgICAgICAg
ICAgICBjYXNlIFRTRUNUSU9OX1JPV1M6Ci0gICAgICAgICAgICAgICAgaWYoZS0+aWQoKSA9PSBJ
RF9UUikKKyAgICAgICAgICAgICAgICBpZiAoZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dHIo
KSkpCiAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBl
bHNlIGlmKGUtPmlkKCkgPT0gSURfVEFCTEUpCisgICAgICAgICAgICAgICAgZWxzZSBpZiAoZS0+
aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dGFibGUoKSkpCiAgICAgICAgICAgICAgICAgICAgIGRl
ZXAgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgU0VM
RUNUX09QVElPTlM6Ci0gICAgICAgICAgICAgICAgaWYoZS0+aWQoKSA9PSBJRF9PUFRJT04pCisg
ICAgICAgICAgICAgICAgaWYgKGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9wdGlvbigpKSkK
ICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgY2FzZSBNQVBfQVJFQVM6Ci0gICAgICAgICAgICAgICAgaWYoZS0+aWQo
KSA9PSBJRF9BUkVBKQorICAgICAgICAgICAgICAgIGlmIChlLT5oYXNMb2NhbE5hbWUoSFRNTE5h
bWVzOjphcmVhKCkpKQogICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIERPQ19BUFBMRVRTOiAgIC8vIGFsbCBP
QkpFQ1QgYW5kIEFQUExFVCBlbGVtZW50cwotICAgICAgICAgICAgICAgIGlmKGUtPmlkKCkgPT0g
SURfT0JKRUNUIHx8IGUtPmlkKCkgPT0gSURfQVBQTEVUKQorICAgICAgICAgICAgICAgIGlmIChl
LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvYmplY3QoKSkgfHwgZS0+aGFzTG9jYWxOYW1lKEhU
TUxOYW1lczo6YXBwbGV0KCkpKQogICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIERPQ19FTUJFRFM6ICAgLy8g
YWxsIEVNQkVEIGVsZW1lbnRzCi0gICAgICAgICAgICAgICAgaWYoZS0+aWQoKSA9PSBJRF9FTUJF
RCkKKyAgICAgICAgICAgICAgICBpZiAoZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6ZW1iZWQo
KSkpCiAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIGNhc2UgRE9DX09CSkVDVFM6ICAgLy8gYWxsIE9CSkVDVCBlbGVt
ZW50cwotICAgICAgICAgICAgICAgIGlmKGUtPmlkKCkgPT0gSURfT0JKRUNUKQorICAgICAgICAg
ICAgICAgIGlmIChlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvYmplY3QoKSkpCiAgICAgICAg
ICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIGNhc2UgRE9DX0xJTktTOiAgICAgLy8gYWxsIEEgX2FuZF8gQVJFQSBlbGVtZW50cyB3
aXRoIGEgdmFsdWUgZm9yIGhyZWYKLSAgICAgICAgICAgICAgICBpZihlLT5pZCgpID09IElEX0Eg
fHwgZS0+aWQoKSA9PSBJRF9BUkVBKQotICAgICAgICAgICAgICAgICAgICBpZighZS0+Z2V0QXR0
cmlidXRlKEFUVFJfSFJFRikuaXNOdWxsKCkpCisgICAgICAgICAgICAgICAgaWYgKGUtPmhhc0xv
Y2FsTmFtZShIVE1MTmFtZXM6OmEoKSkgfHwgZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6YXJl
YSgpKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFlLT5nZXRBdHRyaWJ1dGUoQVRUUl9IUkVG
KS5pc051bGwoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgRE9DX0FOQ0hPUlM6ICAgICAgLy8g
YWxsIEEgZWxlbWVudHMgd2l0aCBhIHZhbHVlIGZvciBuYW1lIG9yIGFuIGlkIGF0dHJpYnV0ZQot
ICAgICAgICAgICAgICAgIGlmKGUtPmlkKCkgPT0gSURfQSkKLSAgICAgICAgICAgICAgICAgICAg
aWYoIWUtPmdldEF0dHJpYnV0ZShBVFRSX05BTUUpLmlzTnVsbCgpKQorICAgICAgICAgICAgICAg
IGlmIChlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjphKCkpKQorICAgICAgICAgICAgICAgICAg
ICBpZiAoIWUtPmdldEF0dHJpYnV0ZShBVFRSX05BTUUpLmlzTnVsbCgpKQogICAgICAgICAgICAg
ICAgICAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgY2FzZSBET0NfQUxMOgpAQCAtMjE5LDkgKzIxNCw5IEBAIE5vZGVJbXBsICpIVE1MQ29s
bGVjdGlvbkltcGw6OnRyYXZlcnNlTmUKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAg
ICAgICAga2REZWJ1ZyggNjAzMCApIDw8ICJFcnJvciBpbiBIVE1MQ29sbGVjdGlvbiwgd3Jvbmcg
dGFnSWQhIiA8PCBlbmRsOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGZvdW5kKSB7
CisKKyAgICAgICAgICAgIGlmIChmb3VuZCkKICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVu
dDsKLSAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChkZWVwKSB7CiAgICAgICAgICAgICAg
ICAgY3VycmVudCA9IGN1cnJlbnQtPnRyYXZlcnNlTmV4dE5vZGUobV9iYXNlLmdldCgpKTsKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTI5OCwyOSArMjkzLDMxIEBAIE5vZGVJbXBsICpI
VE1MQ29sbGVjdGlvbkltcGw6Om5leHRJdGVtKCkKIAogYm9vbCBIVE1MQ29sbGVjdGlvbkltcGw6
OmNoZWNrRm9yTmFtZU1hdGNoKE5vZGVJbXBsICpub2RlLCBib29sIGNoZWNrTmFtZSwgY29uc3Qg
RE9NU3RyaW5nICZuYW1lLCBib29sIGNhc2VTZW5zaXRpdmUpIGNvbnN0CiB7Ci0gICAgRWxlbWVu
dEltcGwgKmUgPSBzdGF0aWNfY2FzdDxFbGVtZW50SW1wbCAqPihub2RlKTsKKyAgICBpZiAoIW5v
ZGUtPmlzSFRNTEVsZW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIEhU
TUxFbGVtZW50SW1wbCAqZSA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCo+KG5vZGUpOwog
ICAgIGlmIChjYXNlU2Vuc2l0aXZlKSB7CiAgICAgICAgIGlmIChjaGVja05hbWUpIHsKICAgICAg
ICAgICAgIC8vIGRvY3VtZW50LmFsbCByZXR1cm5zIG9ubHkgaW1hZ2VzLCBmb3JtcywgYXBwbGV0
cywgb2JqZWN0cyBhbmQgZW1iZWRzCiAgICAgICAgICAgICAvLyBieSBuYW1lICh0aG91Z2ggZXZl
cnl0aGluZyBieSBpZCkKICAgICAgICAgICAgIGlmICh0eXBlID09IERPQ19BTEwgJiYgCi0gICAg
ICAgICAgICAgICAgIShlLT5pZCgpID09IElEX0lNRyB8fCBlLT5pZCgpID09IElEX0ZPUk0gfHwK
LSAgICAgICAgICAgICAgICAgIGUtPmlkKCkgPT0gSURfQVBQTEVUIHx8IGUtPmlkKCkgPT0gSURf
T0JKRUNUIHx8Ci0gICAgICAgICAgICAgICAgICBlLT5pZCgpID09IElEX0VNQkVEKSkKKyAgICAg
ICAgICAgICAgICAhKGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmltZygpKSB8fCBlLT5oYXNM
b2NhbE5hbWUoSFRNTE5hbWVzOjpmb3JtKCkpIHx8CisgICAgICAgICAgICAgICAgICBlLT5oYXNM
b2NhbE5hbWUoSFRNTE5hbWVzOjphcHBsZXQoKSkgfHwgZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1l
czo6b2JqZWN0KCkpIHx8CisgICAgICAgICAgICAgICAgICBlLT5oYXNMb2NhbE5hbWUoSFRNTE5h
bWVzOjplbWJlZCgpKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAg
ICAgICByZXR1cm4gZS0+Z2V0QXR0cmlidXRlKEFUVFJfTkFNRSkgPT0gbmFtZSAmJiBlLT5nZXRB
dHRyaWJ1dGUoQVRUUl9JRCkgIT0gbmFtZTsKLSAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgfSBl
bHNlCiAgICAgICAgICAgICByZXR1cm4gZS0+Z2V0QXR0cmlidXRlKEFUVFJfSUQpID09IG5hbWU7
Ci0gICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICBpZiAoY2hlY2tOYW1lKSB7CiAgICAg
ICAgICAgICAvLyBkb2N1bWVudC5hbGwgcmV0dXJucyBvbmx5IGltYWdlcywgZm9ybXMsIGFwcGxl
dHMsIG9iamVjdHMgYW5kIGVtYmVkcwogICAgICAgICAgICAgLy8gYnkgbmFtZSAodGhvdWdoIGV2
ZXJ5dGhpbmcgYnkgaWQpCiAgICAgICAgICAgICBpZiAodHlwZSA9PSBET0NfQUxMICYmIAotICAg
ICAgICAgICAgICAgICEoZS0+aWQoKSA9PSBJRF9JTUcgfHwgZS0+aWQoKSA9PSBJRF9GT1JNIHx8
Ci0gICAgICAgICAgICAgICAgICBlLT5pZCgpID09IElEX0FQUExFVCB8fCBlLT5pZCgpID09IElE
X09CSkVDVCB8fAotICAgICAgICAgICAgICAgICAgZS0+aWQoKSA9PSBJRF9FTUJFRCkpCisgICAg
ICAgICAgICAgICAgIShlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjppbWcoKSkgfHwgZS0+aGFz
TG9jYWxOYW1lKEhUTUxOYW1lczo6Zm9ybSgpKSB8fAorICAgICAgICAgICAgICAgICAgZS0+aGFz
TG9jYWxOYW1lKEhUTUxOYW1lczo6YXBwbGV0KCkpIHx8IGUtPmhhc0xvY2FsTmFtZShIVE1MTmFt
ZXM6Om9iamVjdCgpKSB8fAorICAgICAgICAgICAgICAgICAgZS0+aGFzTG9jYWxOYW1lKEhUTUxO
YW1lczo6ZW1iZWQoKSkpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAg
ICAgICAgcmV0dXJuIGUtPmdldEF0dHJpYnV0ZShBVFRSX05BTUUpLmRvbVN0cmluZygpLmxvd2Vy
KCkgPT0gbmFtZS5sb3dlcigpICYmCkBAIC0zNzksNyArMzc2LDkgQEAgdm9pZCBIVE1MQ29sbGVj
dGlvbkltcGw6OnVwZGF0ZU5hbWVDYWNoZQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgZm9y
IChOb2RlSW1wbCAqbiA9IHRyYXZlcnNlTmV4dEl0ZW0obV9iYXNlLmdldCgpKTsgbjsgbiA9IHRy
YXZlcnNlTmV4dEl0ZW0obikpIHsKLSAgICAgICAgRWxlbWVudEltcGwgKmUgPSBzdGF0aWNfY2Fz
dDxFbGVtZW50SW1wbCAqPihuKTsKKyAgICAgICAgaWYgKCFuLT5pc0hUTUxFbGVtZW50KCkpCisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgSFRNTEVsZW1lbnRJbXBsKiBlID0gc3RhdGlj
X2Nhc3Q8SFRNTEVsZW1lbnRJbXBsKj4obik7CiAgICAgICAgIFFTdHJpbmcgaWRBdHRyID0gZS0+
Z2V0QXR0cmlidXRlKEFUVFJfSUQpLnN0cmluZygpOwogICAgICAgICBRU3RyaW5nIG5hbWVBdHRy
ID0gZS0+Z2V0QXR0cmlidXRlKEFUVFJfTkFNRSkuc3RyaW5nKCk7CiAgICAgICAgIGlmICghaWRB
dHRyLmlzRW1wdHkoKSkgewpAQCAtMzkzLDkgKzM5Miw5IEBAIHZvaWQgSFRNTENvbGxlY3Rpb25J
bXBsOjp1cGRhdGVOYW1lQ2FjaGUKICAgICAgICAgfQogICAgICAgICBpZiAoIW5hbWVBdHRyLmlz
RW1wdHkoKSAmJiBpZEF0dHIgIT0gbmFtZUF0dHIKICAgICAgICAgICAgICYmICh0eXBlICE9IERP
Q19BTEwgfHwgCi0gICAgICAgICAgICAgICAgKGUtPmlkKCkgPT0gSURfSU1HIHx8IGUtPmlkKCkg
PT0gSURfRk9STSB8fAotICAgICAgICAgICAgICAgICBlLT5pZCgpID09IElEX0FQUExFVCB8fCBl
LT5pZCgpID09IElEX09CSkVDVCB8fAotICAgICAgICAgICAgICAgICBlLT5pZCgpID09IElEX0VN
QkVEKSkpIHsKKyAgICAgICAgICAgICAgICAoZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6aW1n
KCkpIHx8IGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmZvcm0oKSkgfHwKKyAgICAgICAgICAg
ICAgICAgZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6YXBwbGV0KCkpIHx8IGUtPmhhc0xvY2Fs
TmFtZShIVE1MTmFtZXM6Om9iamVjdCgpKSB8fAorICAgICAgICAgICAgICAgICBlLT5oYXNMb2Nh
bE5hbWUoSFRNTE5hbWVzOjplbWJlZCgpKSkpKSB7CiAgICAgICAgICAgICAvLyBhZGQgdG8gbmFt
ZSBjYWNoZQogICAgICAgICAgICAgUVB0clZlY3RvcjxOb2RlSW1wbD4gKm5hbWVWZWN0b3IgPSBp
bmZvLT5uYW1lQ2FjaGUuZmluZChuYW1lQXR0cik7CiAgICAgICAgICAgICBpZiAoIW5hbWVWZWN0
b3IpIHsKQEAgLTUzMiwxMiArNTMxLDEwIEBAIE5vZGVJbXBsKiBIVE1MRm9ybUNvbGxlY3Rpb25J
bXBsOjpnZXROYW0KIAogTm9kZUltcGwqIEhUTUxGb3JtQ29sbGVjdGlvbkltcGw6OmdldE5hbWVk
Rm9ybUl0ZW0oaW50IGF0dHJfaWQsIGNvbnN0IERPTVN0cmluZyYgbmFtZSwgaW50IGR1cGxpY2F0
ZU51bWJlciwgYm9vbCBjYXNlU2Vuc2l0aXZlKSBjb25zdAogewotICAgIGlmKG1fYmFzZS0+bm9k
ZVR5cGUoKSA9PSBOb2RlOjpFTEVNRU5UX05PREUpCi0gICAgeworICAgIGlmIChtX2Jhc2UtPm5v
ZGVUeXBlKCkgPT0gTm9kZTo6RUxFTUVOVF9OT0RFKSB7CiAgICAgICAgIEhUTUxFbGVtZW50SW1w
bCogYmFzZUVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwqPihtX2Jhc2UuZ2V0
KCkpOwogICAgICAgICBib29sIGZvdW5kSW5wdXRFbGVtZW50cyA9IGZhbHNlOwotICAgICAgICBp
ZihiYXNlRWxlbWVudC0+aWQoKSA9PSBJRF9GT1JNKQotICAgICAgICB7CisgICAgICAgIGlmIChi
YXNlRWxlbWVudC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6Zm9ybSgpKSkgewogICAgICAgICAg
ICAgSFRNTEZvcm1FbGVtZW50SW1wbCogZiA9IHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudElt
cGwqPihiYXNlRWxlbWVudCk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
Zi0+Zm9ybUVsZW1lbnRzLmNvdW50KCk7ICsraSkgewogICAgICAgICAgICAgICAgIEhUTUxHZW5l
cmljRm9ybUVsZW1lbnRJbXBsKiBlID0gZi0+Zm9ybUVsZW1lbnRzW2ldOwpAQCAtNTU3LDggKzU1
NCw3IEBAIE5vZGVJbXBsKiBIVE1MRm9ybUNvbGxlY3Rpb25JbXBsOjpnZXROYW0KICAgICAgICAg
ICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIGlmICggIWZvdW5kSW5wdXRFbGVtZW50cyApCi0g
ICAgICAgIHsKKyAgICAgICAgaWYgKCFmb3VuZElucHV0RWxlbWVudHMpIHsKICAgICAgICAgICAg
IEhUTUxGb3JtRWxlbWVudEltcGwqIGYgPSBzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnRJbXBs
Kj4oYmFzZUVsZW1lbnQpOwogCiAgICAgICAgICAgICBmb3IodW5zaWduZWQgaSA9IDA7IGkgPCBm
LT5pbWdFbGVtZW50cy5jb3VudCgpOyArK2kpCkBAIC02NTAsNyArNjQ2LDcgQEAgdm9pZCBIVE1M
Rm9ybUNvbGxlY3Rpb25JbXBsOjp1cGRhdGVOYW1lQwogCiAgICAgUURpY3Q8Y2hhcj4gZm91bmRJ
bnB1dEVsZW1lbnRzOwogCi0gICAgaWYgKG1fYmFzZS0+aWQoKSAhPSBJRF9GT1JNKSB7CisgICAg
aWYgKCFtX2Jhc2UtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpmb3JtKCkpKSB7CiAgICAgICAgIGlu
Zm8tPmhhc05hbWVDYWNoZSA9IHRydWU7CiAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4OiBr
aHRtbC9odG1sL2h0bWxfbWlzY2ltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3Qv
V2ViQ29yZS9raHRtbC9odG1sL2h0bWxfbWlzY2ltcGwuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS4xNgpkaWZmIC11IC1wIC1yMS4xNiBraHRtbC9odG1sL2h0bWxfbWlzY2ltcGwuaAotLS0ga2h0
bWwvaHRtbC9odG1sX21pc2NpbXBsLmgJMTEgTWF5IDIwMDUgMDA6NTg6MjggLTAwMDAJMS4xNgor
Kysga2h0bWwvaHRtbC9odG1sX21pc2NpbXBsLmgJMjIgSnVuIDIwMDUgMjM6MjM6MjkgLTAwMDAK
QEAgLTM5LDggKzM5LDYgQEAgY2xhc3MgSFRNTEJhc2VGb250RWxlbWVudEltcGwgOiBwdWJsaWMg
SAogcHVibGljOgogICAgIEhUTUxCYXNlRm9udEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2Mp
OwogCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwotCiAgICAgRE9NU3RyaW5nIGNvbG9yKCkg
Y29uc3Q7CiAgICAgdm9pZCBzZXRDb2xvcihjb25zdCBET01TdHJpbmcgJik7CiAKSW5kZXg6IGto
dG1sL2h0bWwvaHRtbF9vYmplY3RpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfb2JqZWN0aW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuNjYKZGlmZiAtdSAtcCAtcjEuNjYga2h0bWwvaHRtbC9odG1sX29iamVjdGltcGwu
Y3BwCi0tLSBraHRtbC9odG1sL2h0bWxfb2JqZWN0aW1wbC5jcHAJMTkgSnVuIDIwMDUgMDM6Mzk6
NTYgLTAwMDAJMS42NgorKysga2h0bWwvaHRtbC9odG1sX29iamVjdGltcGwuY3BwCTIyIEp1biAy
MDA1IDIzOjIzOjMwIC0wMDAwCkBAIC01Nyw3ICs1Nyw3IEBAIG5hbWVzcGFjZSBET00gewogLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MQXBwbGV0RWxlbWVudEltcGw6OkhUTUxBcHBsZXRFbGVt
ZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICA6IEhUTUxFbGVtZW50SW1wbChkb2MpCisgIDog
SFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6YXBwbGV0KCksIGRvYykKIHsKICAgICBhcHBsZXRJ
bnN0YW5jZSA9IDA7CiAgICAgbV9hbGxQYXJhbXNBdmFpbGFibGUgPSBmYWxzZTsKQEAgLTY4LDEx
ICs2OCw2IEBAIEhUTUxBcHBsZXRFbGVtZW50SW1wbDo6fkhUTUxBcHBsZXRFbGVtZW4KICAgICBk
ZWxldGUgYXBwbGV0SW5zdGFuY2U7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MQXBwbGV0RWxlbWVu
dEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfQVBQTEVUOwotfQotCiBib29sIEhU
TUxBcHBsZXRFbGVtZW50SW1wbDo6bWFwVG9FbnRyeShOb2RlSW1wbDo6SWQgYXR0ciwgTWFwcGVk
QXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3QKIHsKICAgICBzd2l0Y2ggKGF0dHIpIHsKQEAg
LTM1MiwxOCArMzQ3LDEzIEBAIHZvaWQgSFRNTEFwcGxldEVsZW1lbnRJbXBsOjpzZXRXaWR0aChj
b24KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogSFRNTEVtYmVkRWxlbWVudEltcGw6OkhUTUxFbWJl
ZEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0gICAgOiBIVE1MRWxlbWVudEltcGwoZG9j
KSwgZW1iZWRJbnN0YW5jZSgwKQorICAgIDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6ZW1i
ZWQoKSwgZG9jKSwgZW1iZWRJbnN0YW5jZSgwKQoge30KIAogSFRNTEVtYmVkRWxlbWVudEltcGw6
On5IVE1MRW1iZWRFbGVtZW50SW1wbCgpCiB7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MRW1iZWRF
bGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9FTUJFRDsKLX0KLQogI2lm
IEFQUExFX0NIQU5HRVMKIEtKUzo6QmluZGluZ3M6Okluc3RhbmNlICpIVE1MRW1iZWRFbGVtZW50
SW1wbDo6Z2V0RW1iZWRJbnN0YW5jZSgpIGNvbnN0CiB7CkBAIC00NzgsNyArNDY4LDcgQEAgYm9v
bCBIVE1MRW1iZWRFbGVtZW50SW1wbDo6cmVuZGVyZXJJc05lZQogICAgIEtIVE1MUGFydCAqcGFy
dCA9IGdldERvY3VtZW50KCktPnBhcnQoKTsKICAgICBpZiAoIXBhcnQpCiAJcmV0dXJuIGZhbHNl
OwotICAgIHJldHVybiBwYXJ0LT5wbHVnaW5zRW5hYmxlZCgpICYmIHBhcmVudE5vZGUoKS0+aWQo
KSAhPSBJRF9PQkpFQ1Q7CisgICAgcmV0dXJuIHBhcnQtPnBsdWdpbnNFbmFibGVkKCkgJiYgIXBh
cmVudE5vZGUoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9iamVjdCgpKTsKIH0KIAogUmVuZGVy
T2JqZWN0ICpIVE1MRW1iZWRFbGVtZW50SW1wbDo6Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEg
KmFyZW5hLCBSZW5kZXJTdHlsZSAqc3R5bGUpCkBAIC01MDMsOSArNDkzLDkgQEAgYm9vbCBIVE1M
RW1iZWRFbGVtZW50SW1wbDo6aXNVUkxBdHRyaWJ1dAogCiBIVE1MT2JqZWN0RWxlbWVudEltcGw6
OkhUTUxPYmplY3RFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKSAKICNpZiBBUFBMRV9DSEFO
R0VTCi06IEhUTUxFbGVtZW50SW1wbChkb2MpLCBtX2ltYWdlTG9hZGVyKDApLCBvYmplY3RJbnN0
YW5jZSgwKQorOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjpvYmplY3QoKSwgZG9jKSwgbV9p
bWFnZUxvYWRlcigwKSwgb2JqZWN0SW5zdGFuY2UoMCkKICNlbHNlCi06IEhUTUxFbGVtZW50SW1w
bChkb2MpLCBtX2ltYWdlTG9hZGVyKDApCis6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6Om9i
amVjdCgpLCBkb2MpLCBtX2ltYWdlTG9hZGVyKDApCiAjZW5kaWYKIHsKICAgICBuZWVkV2lkZ2V0
VXBkYXRlID0gZmFsc2U7CkBAIC01MTcsMTEgKzUwNyw2IEBAIEhUTUxPYmplY3RFbGVtZW50SW1w
bDo6fkhUTUxPYmplY3RFbGVtZW4KICAgICBkZWxldGUgbV9pbWFnZUxvYWRlcjsKIH0KIAotTm9k
ZUltcGw6OklkIEhUTUxPYmplY3RFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVy
biBJRF9PQkpFQ1Q7Ci19Ci0KICNpZiBBUFBMRV9DSEFOR0VTCiBLSlM6OkJpbmRpbmdzOjpJbnN0
YW5jZSAqSFRNTE9iamVjdEVsZW1lbnRJbXBsOjpnZXRPYmplY3RJbnN0YW5jZSgpIGNvbnN0CiB7
CkBAIC05NDQsNyArOTI5LDcgQEAgdm9pZCBIVE1MT2JqZWN0RWxlbWVudEltcGw6OnNldFdpZHRo
KGNvbgogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MUGFyYW1FbGVtZW50SW1wbDo6SFRNTFBh
cmFtRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50SW1wbChk
b2MpCisgICAgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjpwYXJhbSgpLCBkb2MpCiB7CiB9
CiAKQEAgLTk1MiwxMSArOTM3LDYgQEAgSFRNTFBhcmFtRWxlbWVudEltcGw6On5IVE1MUGFyYW1F
bGVtZW50SQogewogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTFBhcmFtRWxlbWVudEltcGw6OmlkKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gSURfUEFSQU07Ci19Ci0KIHZvaWQgSFRNTFBhcmFtRWxlbWVu
dEltcGw6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIpCiB7
CiAgICAgc3dpdGNoKCBhdHRyLT5pZCgpICkKSW5kZXg6IGtodG1sL2h0bWwvaHRtbF9vYmplY3Rp
bXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9o
dG1sX29iamVjdGltcGwuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zMQpkaWZmIC11IC1wIC1y
MS4zMSBraHRtbC9odG1sL2h0bWxfb2JqZWN0aW1wbC5oCi0tLSBraHRtbC9odG1sL2h0bWxfb2Jq
ZWN0aW1wbC5oCTExIE1heSAyMDA1IDA1OjQ5OjM0IC0wMDAwCTEuMzEKKysrIGtodG1sL2h0bWwv
aHRtbF9vYmplY3RpbXBsLmgJMjIgSnVuIDIwMDUgMjM6MjM6MzAgLTAwMDAKQEAgLTQyLDExICs0
Miw4IEBAIGNsYXNzIEhUTUxBcHBsZXRFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE0KIHsKIHB1Ymxp
YzoKICAgICBIVE1MQXBwbGV0RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYyk7Ci0KICAgICB+
SFRNTEFwcGxldEVsZW1lbnRJbXBsKCk7CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7Ci0K
ICAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRy
eSYgcmVzdWx0KSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUo
TWFwcGVkQXR0cmlidXRlSW1wbCAqdG9rZW4pOwogICAgIApAQCAtMTEyLDExICsxMDksOCBAQCBj
bGFzcyBIVE1MRW1iZWRFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MCiB7CiBwdWJsaWM6CiAgICAg
SFRNTEVtYmVkRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYyk7Ci0KICAgICB+SFRNTEVtYmVk
RWxlbWVudEltcGwoKTsKIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKLQogICAgIHZpcnR1
YWwgYm9vbCBtYXBUb0VudHJ5KElkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQp
IGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRy
aWJ1dGVJbXBsICphdHRyKTsKIApAQCAtMTQ2LDExICsxNDAsOCBAQCBjbGFzcyBIVE1MT2JqZWN0
RWxlbWVudEltcGwgOiBwdWJsaWMgSFRNCiB7CiBwdWJsaWM6CiAgICAgSFRNTE9iamVjdEVsZW1l
bnRJbXBsKERvY3VtZW50UHRyICpkb2MpOwotCiAgICAgfkhUTUxPYmplY3RFbGVtZW50SW1wbCgp
OwogCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwotCiAgICAgSFRNTEZvcm1FbGVtZW50SW1w
bCAqZm9ybSgpIGNvbnN0OwogCiAgICAgdmlydHVhbCBib29sIG1hcFRvRW50cnkoSWQgYXR0ciwg
TWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3Q7CkBAIC0yNDcsMTEgKzIzOCw4IEBA
IGNsYXNzIEhUTUxQYXJhbUVsZW1lbnRJbXBsIDogcHVibGljIEhUTUwKICAgICBmcmllbmQgY2xh
c3MgSFRNTEFwcGxldEVsZW1lbnRJbXBsOwogcHVibGljOgogICAgIEhUTUxQYXJhbUVsZW1lbnRJ
bXBsKERvY3VtZW50UHRyICpkb2MpOwotCiAgICAgfkhUTUxQYXJhbUVsZW1lbnRJbXBsKCk7CiAK
LSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7Ci0KICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqdG9rZW4pOwogCiAgICAgdmlydHVhbCBi
b29sIGlzVVJMQXR0cmlidXRlKEF0dHJpYnV0ZUltcGwgKmF0dHIpIGNvbnN0OwpJbmRleDoga2h0
bWwvaHRtbC9odG1sX3RhYmxlaW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sX3RhYmxlaW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuNTMKZGlmZiAtdSAtcCAtcjEuNTMga2h0bWwvaHRtbC9odG1sX3RhYmxlaW1wbC5jcHAK
LS0tIGtodG1sL2h0bWwvaHRtbF90YWJsZWltcGwuY3BwCTE3IEp1biAyMDA1IDIxOjU1OjM5IC0w
MDAwCTEuNTMKKysrIGtodG1sL2h0bWwvaHRtbF90YWJsZWltcGwuY3BwCTIyIEp1biAyMDA1IDIz
OjIzOjMxIC0wMDAwCkBAIC01MSw3ICs1MSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBraHRtbDsKIG5h
bWVzcGFjZSBET00gewogCiBIVE1MVGFibGVFbGVtZW50SW1wbDo6SFRNTFRhYmxlRWxlbWVudElt
cGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgOiBIVE1MRWxlbWVudEltcGwoZG9jKQorICA6IEhUTUxF
bGVtZW50SW1wbChIVE1MTmFtZXM6OnRhYmxlKCksIGRvYykKIHsKICAgICB0Q2FwdGlvbiA9IDA7
CiAgICAgaGVhZCA9IDA7CkBAIC03MywxMSArNzMsNiBAQCBIVE1MVGFibGVFbGVtZW50SW1wbDo6
fkhUTUxUYWJsZUVsZW1lbnRJCiB7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MVGFibGVFbGVtZW50
SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9UQUJMRTsKLX0KLQogTm9kZUltcGwq
IEhUTUxUYWJsZUVsZW1lbnRJbXBsOjpzZXRDYXB0aW9uKCBIVE1MVGFibGVDYXB0aW9uRWxlbWVu
dEltcGwgKmMgKQogewogICAgIGludCBleGNlcHRpb25jb2RlID0gMDsKQEAgLTE0Niw3ICsxNDEs
NyBAQCBIVE1MRWxlbWVudEltcGwgKkhUTUxUYWJsZUVsZW1lbnRJbXBsOjpjCiAgICAgaWYoIWhl
YWQpCiAgICAgewogICAgICAgICBpbnQgZXhjZXB0aW9uY29kZSA9IDA7Ci0gICAgICAgIGhlYWQg
PSBuZXcgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsKGRvY1B0cigpLCBJRF9USEVBRCwgdHJ1
ZSAvKiBpbXBsaWNpdCAqLyk7CisgICAgICAgIGhlYWQgPSBuZXcgSFRNTFRhYmxlU2VjdGlvbkVs
ZW1lbnRJbXBsKEhUTUxOYW1lczo6dGhlYWQoKSwgZG9jUHRyKCksIHRydWUgLyogaW1wbGljaXQg
Ki8pOwogICAgICAgICBpZihmb290KQogICAgICAgICAgICAgaW5zZXJ0QmVmb3JlKCBoZWFkLCBm
b290LCBleGNlcHRpb25jb2RlICk7CiAgICAgICAgIGVsc2UgaWYoZmlyc3RCb2R5KQpAQCAtMTcx
LDcgKzE2Niw3IEBAIEhUTUxFbGVtZW50SW1wbCAqSFRNTFRhYmxlRWxlbWVudEltcGw6OmMKICAg
ICBpZighZm9vdCkKICAgICB7CiAgICAgICAgIGludCBleGNlcHRpb25jb2RlID0gMDsKLSAgICAg
ICAgZm9vdCA9IG5ldyBIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGwoZG9jUHRyKCksIElEX1RG
T09ULCB0cnVlIC8qaW1wbGljaXQgKi8pOworICAgICAgICBmb290ID0gbmV3IEhUTUxUYWJsZVNl
Y3Rpb25FbGVtZW50SW1wbChIVE1MTmFtZXM6OnRmb290KCksIGRvY1B0cigpLCB0cnVlIC8qaW1w
bGljaXQgKi8pOwogICAgICAgICBpZihmaXJzdEJvZHkpCiAgICAgICAgICAgICBpbnNlcnRCZWZv
cmUoIGZvb3QsIGZpcnN0Qm9keSwgZXhjZXB0aW9uY29kZSApOwogICAgICAgICBlbHNlCkBAIC0y
MTYsNyArMjExLDcgQEAgSFRNTEVsZW1lbnRJbXBsICpIVE1MVGFibGVFbGVtZW50SW1wbDo6aQog
ICAgIC8vIChub3RlOiB0aGlzIGlzIGRpZmZlcmVudCBmcm9tICJpZiB0aGUgdGFibGUgaGFzIG5v
IHNlY3Rpb25zIiwgc2luY2Ugd2UgY2FuIGhhdmUKICAgICAvLyA8VEFCTEU+PFRSPikKICAgICBp
ZighZmlyc3RCb2R5ICYmICFoZWFkICYmICFmb290ICYmICFoYXNDaGlsZE5vZGVzKCkpCi0gICAg
ICAgIHNldFRCb2R5KCBuZXcgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsKGRvY1B0cigpLCBJ
RF9UQk9EWSwgdHJ1ZSAvKiBpbXBsaWNpdCAqLykgKTsKKyAgICAgICAgc2V0VEJvZHkoIG5ldyBI
VE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGwoSFRNTE5hbWVzOjp0Ym9keSgpLCBkb2NQdHIoKSwg
dHJ1ZSAvKiBpbXBsaWNpdCAqLykgKTsKIAogICAgIC8va2REZWJ1Zyg2MDMwKSA8PCBrX2Z1bmNp
bmZvIDw8IGluZGV4IDw8IGVuZGw7CiAgICAgLy8gSUUgdHJlYXRzIGluZGV4PS0xIGFzIGRlZmF1
bHQgdmFsdWUgbWVhbmluZyAnYXBwZW5kIGFmdGVyIGxhc3QnCkBAIC0yMzAsNyArMjI1LDggQEAg
SFRNTEVsZW1lbnRJbXBsICpIVE1MVGFibGVFbGVtZW50SW1wbDo6aQogICAgIHsKIAkvLyB0aGVy
ZSBjb3VsZCBiZSAyIHRmb290IGVsZW1lbnRzIGluIHRoZSB0YWJsZS4gT25seSB0aGUgZmlyc3Qg
b25lIGlzIHRoZSAiZm9vdCIsIHRoYXQncyB3aHkgd2UgaGF2ZSB0aGUgbW9yZQogCS8vIGNvbXBs
aWNhdGVkIGlmIHN0YXRlbWVudCBiZWxvdy4KLSAgICAgICAgaWYgKCBub2RlICE9IGZvb3QgJiYg
KG5vZGUtPmlkKCkgPT0gSURfVEhFQUQgfHwgbm9kZS0+aWQoKSA9PSBJRF9URk9PVCB8fCBub2Rl
LT5pZCgpID09IElEX1RCT0RZKSApCisgICAgICAgIGlmIChub2RlICE9IGZvb3QgJiYgKG5vZGUt
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0aGVhZCgpKSB8fCBub2RlLT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6dGZvb3QoKSkgfHwgCisgICAgICAgICAgICBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6dGJvZHkoKSkpKQogICAgICAgICB7CiAgICAgICAgICAgICBzZWN0aW9uID0gc3RhdGljX2Nh
c3Q8SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsICo+KG5vZGUpOwogICAgICAgICAgICAgbGFz
dFNlY3Rpb24gPSBzZWN0aW9uOwpAQCAtMjc2LDggKzI3Miw4IEBAIHZvaWQgSFRNTFRhYmxlRWxl
bWVudEltcGw6OmRlbGV0ZVJvdyggbG8KICAgICBib29sIGZvdW5kID0gZmFsc2U7CiAgICAgZm9y
ICggOyBub2RlIDsgbm9kZSA9IG5vZGUtPm5leHRTaWJsaW5nKCkgKQogICAgIHsKLSAgICAgICAg
aWYgKCBub2RlICE9IGZvb3QgJiYgKG5vZGUtPmlkKCkgPT0gSURfVEhFQUQgfHwgbm9kZS0+aWQo
KSA9PSBJRF9URk9PVCB8fCBub2RlLT5pZCgpID09IElEX1RCT0RZKSApCi0gICAgICAgIHsKKyAg
ICAgICAgaWYgKG5vZGUgIT0gZm9vdCAmJiAobm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRo
ZWFkKCkpIHx8IG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0Zm9vdCgpKSB8fCAKKyAgICAg
ICAgICAgIG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0Ym9keSgpKSkpIHsKICAgICAgICAg
ICAgIHNlY3Rpb24gPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGwgKj4o
bm9kZSk7CiAgICAgICAgICAgICBsYXN0U2VjdGlvbiA9IHNlY3Rpb247CiAgICAgICAgICAgICBp
bnQgcm93cyA9IHNlY3Rpb24tPm51bVJvd3MoKTsKQEAgLTMwOSw3ICszMDUsNyBAQCBOb2RlSW1w
bCAqSFRNTFRhYmxlRWxlbWVudEltcGw6OmFkZENoaWxkCiAgICAga2REZWJ1ZyggNjAzMCApIDw8
IG5vZGVOYW1lKCkuc3RyaW5nKCkgPDwgIihUYWJsZSk6OmFkZENoaWxkKCAiIDw8IGNoaWxkLT5u
b2RlTmFtZSgpLnN0cmluZygpIDw8ICIgKSIgPDwgZW5kbDsKICNlbmRpZgogCi0gICAgaWYgKGNo
aWxkLT5pZCgpID09IElEX0ZPUk0pIHsKKyAgICBpZiAoY2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjpmb3JtKCkpKSB7CiAgICAgICAgIC8vIEZpcnN0IGFkZCB0aGUgY2hpbGQuCiAgICAgICAg
IEhUTUxFbGVtZW50SW1wbDo6YWRkQ2hpbGQoY2hpbGQpOwogICAgICAgICAvLyBOb3cgc2ltcGx5
IHJldHVybiBvdXJzZWx2ZXMgYXMgdGhlIG5ld25vZGUuICBUaGlzIGhhcyB0aGUgZWZmZWN0IG9m
CkBAIC0zMzcsMjggKzMzMywxNSBAQCBOb2RlSW1wbCAqSFRNTFRhYmxlRWxlbWVudEltcGw6OmFk
ZENoaWxkCiAKICAgICBpbnQgZXhjZXB0aW9uY29kZSA9IDA7CiAgICAgTm9kZUltcGwgKnJldHZh
bCA9IGFwcGVuZENoaWxkKCBjaGlsZCwgZXhjZXB0aW9uY29kZSApOwotICAgIGlmICggcmV0dmFs
ICkgewotCXN3aXRjaChjaGlsZC0+aWQoKSkgewotCWNhc2UgSURfQ0FQVElPTjoKLQkgICAgaWYg
KCAhdENhcHRpb24gKQotCQl0Q2FwdGlvbiA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZUNhcHRpb25F
bGVtZW50SW1wbCAqPihjaGlsZCk7Ci0JICAgIGJyZWFrOwotCWNhc2UgSURfQ09MOgotCWNhc2Ug
SURfQ09MR1JPVVA6Ci0JICAgIGJyZWFrOwotCWNhc2UgSURfVEhFQUQ6Ci0JICAgIGlmICggIWhl
YWQgKQotCQloZWFkID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsICo+
KGNoaWxkKTsKLQkgICAgYnJlYWs7Ci0JY2FzZSBJRF9URk9PVDoKLQkgICAgaWYgKCAhZm9vdCAp
Ci0JCWZvb3QgPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGwgKj4oY2hp
bGQpOwotCSAgICBicmVhazsKLQljYXNlIElEX1RCT0RZOgotCSAgICBpZiAoICFmaXJzdEJvZHkg
KQotCQlmaXJzdEJvZHkgPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGwg
Kj4oY2hpbGQpOwotCSAgICBicmVhazsKLQl9CisgICAgaWYgKHJldHZhbCkgeworICAgICAgICBp
ZiAoIXRDYXB0aW9uICYmIGNoaWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Y2FwdGlvbigpKSkK
KyAgICAgICAgICAgIHRDYXB0aW9uID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ2FwdGlvbkVsZW1l
bnRJbXBsICo+KGNoaWxkKTsKKyAgICAgICAgZWxzZSBpZiAoIWhlYWQgJiYgY2hpbGQtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjp0aGVhZCgpKSkKKyAgICAgICAgICAgIGhlYWQgPSBzdGF0aWNfY2Fz
dDxIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGwgKj4oY2hpbGQpOworICAgICAgICBlbHNlIGlm
ICghZm9vdCAmJiBjaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRmb290KCkpKQorICAgICAg
ICAgICAgZm9vdCA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbCAqPihj
aGlsZCk7CisJZWxzZSBpZiAoIWZpcnN0Qm9keSAmJiBjaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OnRib2R5KCkpKQorCSAgICBmaXJzdEJvZHkgPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVTZWN0
aW9uRWxlbWVudEltcGwgKj4oY2hpbGQpOwogICAgIH0KICAgICByZXR1cm4gcmV0dmFsOwogfQpA
QCAtODAyLDI2ICs3ODUsMTkgQEAgdm9pZCBIVE1MVGFibGVQYXJ0RWxlbWVudEltcGw6OnBhcnNl
TWFwcAogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1w
bDo6SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2hvcnQg
dGFnaWQsIGJvb2wgaW1wbGljaXQpCi0gICAgOiBIVE1MVGFibGVQYXJ0RWxlbWVudEltcGwoZG9j
KQorSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsOjpIVE1MVGFibGVTZWN0aW9uRWxlbWVudElt
cGwoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnRQdHIgKmRvYywgYm9vbCBp
bXBsaWNpdCkKKyAgICA6IEhUTUxUYWJsZVBhcnRFbGVtZW50SW1wbCh0YWdOYW1lLCBkb2MpCiB7
Ci0gICAgX2lkID0gdGFnaWQ7CiAgICAgbV9pbXBsaWNpdCA9IGltcGxpY2l0OwogfQogCi1Ob2Rl
SW1wbDo6SWQgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIF9pZDsKLX0KLQogTm9kZUltcGwgKkhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbDo6
YWRkQ2hpbGQoTm9kZUltcGwgKmNoaWxkKQogewogI2lmZGVmIERFQlVHX0xBWU9VVAogICAgIGtk
RGVidWcoIDYwMzAgKSA8PCBub2RlTmFtZSgpLnN0cmluZygpIDw8ICIoVGJvZHkpOjphZGRDaGls
ZCggIiA8PCBjaGlsZC0+bm9kZU5hbWUoKS5zdHJpbmcoKSA8PCAiICkiIDw8IGVuZGw7CiAjZW5k
aWYKIAotICAgIGlmIChjaGlsZC0+aWQoKSA9PSBJRF9GT1JNKSB7CisgICAgaWYgKGNoaWxkLT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6Zm9ybSgpKSkgewogICAgICAgICAvLyBGaXJzdCBhZGQgdGhl
IGNoaWxkLgogICAgICAgICBIVE1MRWxlbWVudEltcGw6OmFkZENoaWxkKGNoaWxkKTsKICAgICAg
ICAgLy8gTm93IHNpbXBseSByZXR1cm4gb3Vyc2VsdmVzIGFzIHRoZSBuZXdub2RlLiAgVGhpcyBo
YXMgdGhlIGVmZmVjdCBvZgpAQCAtODc3LDcgKzg1Myw3IEBAIGludCBIVE1MVGFibGVTZWN0aW9u
RWxlbWVudEltcGw6Om51bVJvd3MKICAgICBpbnQgcm93cyA9IDA7CiAgICAgY29uc3QgTm9kZUlt
cGwgKm4gPSBmaXJzdENoaWxkKCk7CiAgICAgd2hpbGUgKG4pIHsKLSAgICAgICAgaWYgKG4tPmlk
KCkgPT0gSURfVFIpCisgICAgICAgIGlmIChuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dHIoKSkp
CiAgICAgICAgICAgICByb3dzKys7CiAgICAgICAgIG4gPSBuLT5uZXh0U2libGluZygpOwogICAg
IH0KQEAgLTkzMiwxOCArOTA4LDEzIEBAIFNoYXJlZFB0cjxIVE1MQ29sbGVjdGlvbkltcGw+IEhU
TUxUYWJsZVMKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Ob2RlSW1wbDo6SWQgSFRNTFRhYmxl
Um93RWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfVFI7Ci19Ci0KIE5v
ZGVJbXBsICpIVE1MVGFibGVSb3dFbGVtZW50SW1wbDo6YWRkQ2hpbGQoTm9kZUltcGwgKmNoaWxk
KQogewogI2lmZGVmIERFQlVHX0xBWU9VVAogICAgIGtkRGVidWcoIDYwMzAgKSA8PCBub2RlTmFt
ZSgpLnN0cmluZygpIDw8ICIoVHJvdyk6OmFkZENoaWxkKCAiIDw8IGNoaWxkLT5ub2RlTmFtZSgp
LnN0cmluZygpIDw8ICIgKSIgPDwgZW5kbDsKICNlbmRpZgogCi0gICAgaWYgKGNoaWxkLT5pZCgp
ID09IElEX0ZPUk0pIHsKKyAgICBpZiAoY2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpmb3Jt
KCkpKSB7CiAgICAgICAgIC8vIEZpcnN0IGFkZCB0aGUgY2hpbGQuCiAgICAgICAgIEhUTUxFbGVt
ZW50SW1wbDo6YWRkQ2hpbGQoY2hpbGQpOwogICAgICAgICAvLyBOb3cgc2ltcGx5IHJldHVybiBv
dXJzZWx2ZXMgYXMgdGhlIG5ld25vZGUuICBUaGlzIGhhcyB0aGUgZWZmZWN0IG9mCkBAIC05NTgs
MTYgKzkyOSwxNiBAQCBsb25nIEhUTUxUYWJsZVJvd0VsZW1lbnRJbXBsOjpyb3dJbmRleCgpCiAg
ICAgaW50IHJJbmRleCA9IDA7CiAKICAgICBOb2RlSW1wbCAqdGFibGUgPSBwYXJlbnROb2RlKCk7
Ci0gICAgaWYgKCAhdGFibGUgKQorICAgIGlmICghdGFibGUpCiAJcmV0dXJuIC0xOwogICAgIHRh
YmxlID0gdGFibGUtPnBhcmVudE5vZGUoKTsKLSAgICBpZiAoICF0YWJsZSB8fCB0YWJsZS0+aWQo
KSAhPSBJRF9UQUJMRSApCisgICAgaWYgKCF0YWJsZSB8fCAhdGFibGUtPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjp0YWJsZSgpKSkKIAlyZXR1cm4gLTE7CiAKICAgICBIVE1MVGFibGVTZWN0aW9uRWxl
bWVudEltcGwgKmZvb3QgPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVFbGVtZW50SW1wbCAqPih0YWJs
ZSktPnRGb290KCk7CiAgICAgTm9kZUltcGwgKm5vZGUgPSB0YWJsZS0+Zmlyc3RDaGlsZCgpOwot
ICAgIHdoaWxlICggbm9kZSApIHsKLSAgICAgICAgaWYgKCBub2RlICE9IGZvb3QgJiYgKG5vZGUt
PmlkKCkgPT0gSURfVEhFQUQgfHwgbm9kZS0+aWQoKSA9PSBJRF9URk9PVCB8fCBub2RlLT5pZCgp
ID09IElEX1RCT0RZKSApIHsKKyAgICB3aGlsZSAobm9kZSkgeworICAgICAgICBpZiAobm9kZSAh
PSBmb290ICYmIChub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGhlYWQoKSkgfHwgbm9kZS0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRmb290KCkpIHx8IG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjp0Ym9keSgpKSkpIHsKIAkgICAgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsKiBzZWN0
aW9uID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsICo+KG5vZGUpOwog
CSAgICBjb25zdCBOb2RlSW1wbCAqcm93ID0gc2VjdGlvbi0+Zmlyc3RDaGlsZCgpOwogCSAgICB3
aGlsZSAoIHJvdyApIHsKQEAgLTk5Niw3ICs5NjcsNyBAQCBsb25nIEhUTUxUYWJsZVJvd0VsZW1l
bnRJbXBsOjpzZWN0aW9uUm93CiAgICAgY29uc3QgTm9kZUltcGwgKm4gPSB0aGlzOwogICAgIGRv
IHsKICAgICAgICAgbiA9IG4tPnByZXZpb3VzU2libGluZygpOwotICAgICAgICBpZiAobiAmJiBu
LT5pc0VsZW1lbnROb2RlKCkgJiYgbi0+aWQoKSA9PSBJRF9UUikKKyAgICAgICAgaWYgKG4gJiYg
bi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRyKCkpKQogICAgICAgICAgICAgckluZGV4Kys7CiAg
ICAgfQogICAgIHdoaWxlIChuKTsKQEAgLTEwMTMsNyArOTg0LDcgQEAgSFRNTEVsZW1lbnRJbXBs
ICpIVE1MVGFibGVSb3dFbGVtZW50SW1wbAogICAgICAgICBleGNlcHRpb25jb2RlID0gRE9NRXhj
ZXB0aW9uOjpJTkRFWF9TSVpFX0VSUjsgLy8gcGVyIHRoZSBET00KICAgICBlbHNlCiAgICAgewot
ICAgICAgICBjID0gbmV3IEhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbChkb2NQdHIoKSwgSURfVEQp
OworICAgICAgICBjID0gbmV3IEhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbChIVE1MTmFtZXM6OnRk
KCksIGRvY1B0cigpKTsKICAgICAgICAgaWYobnVtQ2VsbHMgPT0gaW5kZXggfHwgaW5kZXggPT0g
LTEpCiAgICAgICAgICAgICBhcHBlbmRDaGlsZChjLCBleGNlcHRpb25jb2RlKTsKICAgICAgICAg
ZWxzZSB7CkBAIC0xMTAzLDE1ICsxMDc0LDE0IEBAIHZvaWQgSFRNTFRhYmxlUm93RWxlbWVudElt
cGw6OnNldFZBbGlnbigKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1IVE1MVGFibGVDZWxsRWxl
bWVudEltcGw6OkhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCBpbnQg
dGFnKQotICA6IEhUTUxUYWJsZVBhcnRFbGVtZW50SW1wbChkb2MpCitIVE1MVGFibGVDZWxsRWxl
bWVudEltcGw6OkhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbChjb25zdCBRdWFsaWZpZWROYW1lJiB0
YWdOYW1lLCBEb2N1bWVudFB0ciAqZG9jKQorICA6IEhUTUxUYWJsZVBhcnRFbGVtZW50SW1wbCh0
YWdOYW1lLCBkb2MpCiB7Ci0gIF9jb2wgPSAtMTsKLSAgX3JvdyA9IC0xOwotICBjU3BhbiA9IHJT
cGFuID0gMTsKLSAgX2lkID0gdGFnOwotICByb3dIZWlnaHQgPSAwOwotICBtX3NvbGlkID0gZmFs
c2U7CisgICAgX2NvbCA9IC0xOworICAgIF9yb3cgPSAtMTsKKyAgICBjU3BhbiA9IHJTcGFuID0g
MTsKKyAgICByb3dIZWlnaHQgPSAwOworICAgIG1fc29saWQgPSBmYWxzZTsKIH0KIAogSFRNTFRh
YmxlQ2VsbEVsZW1lbnRJbXBsOjp+SFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsKCkKQEAgLTExMjIs
NyArMTA5Miw3IEBAIGxvbmcgSFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsOjpjZWxsSW5kZXgKIHsK
ICAgICBpbnQgaW5kZXggPSAwOwogICAgIGZvciAoY29uc3QgTm9kZUltcGwgKiBub2RlID0gcHJl
dmlvdXNTaWJsaW5nKCk7IG5vZGU7IG5vZGUgPSBub2RlLT5wcmV2aW91c1NpYmxpbmcoKSkgewot
ICAgICAgICBpZiAobm9kZS0+aWQoKSA9PSBJRF9URCB8fCBub2RlLT5pZCgpID09IElEX1RIKQor
ICAgICAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRkKCkpIHx8IG5vZGUtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjp0aCgpKSkKICAgICAgICAgICAgIGluZGV4Kys7CiAgICAgfQog
ICAgIApAQCAtMTE4OSw5ICsxMTU5LDkgQEAgdm9pZCBIVE1MVGFibGVDZWxsRWxlbWVudEltcGw6
OnBhcnNlTWFwcAogLy8gdXNlZCBieSB0YWJsZSBjZWxscyB0byBzaGFyZSBzdHlsZSBkZWNscyBj
cmVhdGVkIGJ5IHRoZSBlbmNsb3NpbmcgdGFibGUuCiBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bkltcGwqIEhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbDo6YWRkaXRpb25hbEF0dHJpYnV0ZVN0eWxl
RGVjbCgpCiB7Ci0gICAgSFRNTEVsZW1lbnRJbXBsKiBwID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1l
bnRJbXBsKj4ocGFyZW50Tm9kZSgpKTsKLSAgICB3aGlsZShwICYmIHAtPmlkKCkgIT0gSURfVEFC
TEUpCi0gICAgICAgIHAgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwqPihwLT5wYXJlbnRO
b2RlKCkpOworICAgIE5vZGVJbXBsKiBwID0gcGFyZW50Tm9kZSgpOworICAgIHdoaWxlIChwICYm
ICFwLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGFibGUoKSkpCisgICAgICAgIHAgPSBwLT5wYXJl
bnROb2RlKCk7CiAKICAgICBpZiAocCkgewogICAgICAgICBIVE1MVGFibGVFbGVtZW50SW1wbCog
dGFibGUgPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVFbGVtZW50SW1wbCo+KHApOwpAQCAtMTIwMSwx
NSArMTE3MSw2IEBAIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uSW1wbCogSFRNTFRhYmwKICAg
ICByZXR1cm4gMDsKIH0KIAotdm9pZCBIVE1MVGFibGVDZWxsRWxlbWVudEltcGw6OmF0dGFjaCgp
Ci17Ci0gICAgSFRNTEVsZW1lbnRJbXBsKiBwID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBs
Kj4ocGFyZW50Tm9kZSgpKTsKLSAgICB3aGlsZShwICYmIHAtPmlkKCkgIT0gSURfVEFCTEUpCi0g
ICAgICAgIHAgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwqPihwLT5wYXJlbnROb2RlKCkp
OwotCi0gICAgSFRNTFRhYmxlUGFydEVsZW1lbnRJbXBsOjphdHRhY2goKTsKLX0KLQogYm9vbCBI
VE1MVGFibGVDZWxsRWxlbWVudEltcGw6OmlzVVJMQXR0cmlidXRlKEF0dHJpYnV0ZUltcGwgKmF0
dHIpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGF0dHItPmlkKCkgPT0gQVRUUl9CQUNLR1JPVU5EOwpA
QCAtMTM0NywxNiArMTMwOCwxMCBAQCB2b2lkIEhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbDo6c2V0
V2lkdGgoCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSFRNTFRhYmxlQ29sRWxlbWVudEltcGw6
OkhUTUxUYWJsZUNvbEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIHVzaG9ydCBpKQotICAg
IDogSFRNTFRhYmxlUGFydEVsZW1lbnRJbXBsKGRvYykKK0hUTUxUYWJsZUNvbEVsZW1lbnRJbXBs
OjpIVE1MVGFibGVDb2xFbGVtZW50SW1wbChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBE
b2N1bWVudFB0ciAqZG9jKQorICAgIDogSFRNTFRhYmxlUGFydEVsZW1lbnRJbXBsKHRhZ05hbWUs
IGRvYykKIHsKLSAgICBfaWQgPSBpOwotICAgIF9zcGFuID0gKF9pZCA9PSBJRF9DT0xHUk9VUCA/
IDAgOiAxKTsKLX0KLQotTm9kZUltcGw6OklkIEhUTUxUYWJsZUNvbEVsZW1lbnRJbXBsOjppZCgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIF9pZDsKKyAgICBfc3BhbiA9ICh0YWdOYW1lLm1hdGNoZXMo
SFRNTE5hbWVzOjpjb2xncm91cCgpKSA/IDAgOiAxKTsKIH0KIAogYm9vbCBIVE1MVGFibGVDb2xF
bGVtZW50SW1wbDo6bWFwVG9FbnRyeShOb2RlSW1wbDo6SWQgYXR0ciwgTWFwcGVkQXR0cmlidXRl
RW50cnkmIHJlc3VsdCkgY29uc3QKQEAgLTE0NDcsMTEgKzE0MDIsNiBAQCB2b2lkIEhUTUxUYWJs
ZUNvbEVsZW1lbnRJbXBsOjpzZXRXaWR0aChjCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotTm9k
ZUltcGw6OklkIEhUTUxUYWJsZUNhcHRpb25FbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAg
IHJldHVybiBJRF9DQVBUSU9OOwotfQotCiBib29sIEhUTUxUYWJsZUNhcHRpb25FbGVtZW50SW1w
bDo6bWFwVG9FbnRyeShOb2RlSW1wbDo6SWQgYXR0ciwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJl
c3VsdCkgY29uc3QKIHsKICAgICBpZiAoYXR0ciA9PSBBVFRSX0FMSUdOKSB7CkluZGV4OiBraHRt
bC9odG1sL2h0bWxfdGFibGVpbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dl
YkNvcmUva2h0bWwvaHRtbC9odG1sX3RhYmxlaW1wbC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjIxCmRpZmYgLXUgLXAgLXIxLjIxIGtodG1sL2h0bWwvaHRtbF90YWJsZWltcGwuaAotLS0ga2h0
bWwvaHRtbC9odG1sX3RhYmxlaW1wbC5oCTE3IEp1biAyMDA1IDIxOjU1OjM5IC0wMDAwCTEuMjEK
KysrIGtodG1sL2h0bWwvaHRtbF90YWJsZWltcGwuaAkyMiBKdW4gMjAwNSAyMzoyMzozMSAtMDAw
MApAQCAtNjIsOCArNjIsNiBAQCBwdWJsaWM6CiAgICAgSFRNTFRhYmxlRWxlbWVudEltcGwoRG9j
dW1lbnRQdHIgKmRvYyk7CiAgICAgfkhUTUxUYWJsZUVsZW1lbnRJbXBsKCk7CiAKLSAgICB2aXJ0
dWFsIElkIGlkKCkgY29uc3Q7Ci0KICAgICBIVE1MVGFibGVDYXB0aW9uRWxlbWVudEltcGwgKmNh
cHRpb24oKSBjb25zdCB7IHJldHVybiB0Q2FwdGlvbjsgfQogICAgIE5vZGVJbXBsICpzZXRDYXB0
aW9uKCBIVE1MVGFibGVDYXB0aW9uRWxlbWVudEltcGwgKiApOwogCkBAIC0xNDcsOCArMTQ1LDgg
QEAgY2xhc3MgSFRNTFRhYmxlUGFydEVsZW1lbnRJbXBsIDogcHVibGljIAogCiB7CiBwdWJsaWM6
Ci0gICAgSFRNTFRhYmxlUGFydEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0gICAgICAg
IDogSFRNTEVsZW1lbnRJbXBsKGRvYykKKyAgICBIVE1MVGFibGVQYXJ0RWxlbWVudEltcGwoY29u
c3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnRQdHIgKmRvYykKKyAgICAgICAgOiBI
VE1MRWxlbWVudEltcGwodGFnTmFtZSwgZG9jKQogICAgICAgICB7IH0KIAogICAgIHZpcnR1YWwg
Ym9vbCBtYXBUb0VudHJ5KE5vZGVJbXBsOjpJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYg
cmVzdWx0KSBjb25zdDsKQEAgLTE2MCw5ICsxNTgsNyBAQCBwdWJsaWM6CiBjbGFzcyBIVE1MVGFi
bGVTZWN0aW9uRWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTFRhYmxlUGFydEVsZW1lbnRJbXBsCiB7
CiBwdWJsaWM6Ci0gICAgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpk
b2MsIHVzaG9ydCB0YWdpZCwgYm9vbCBpbXBsaWNpdCk7Ci0KLSAgICB2aXJ0dWFsIElkIGlkKCkg
Y29uc3Q7CisgICAgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5h
bWUmIHRhZ05hbWUsIERvY3VtZW50UHRyICpkb2MsIGJvb2wgaW1wbGljaXQpOwogCiAgICAgdmly
dHVhbCBOb2RlSW1wbCAqYWRkQ2hpbGQoTm9kZUltcGwgKmNoaWxkKTsKICAgICAKQEAgLTE4NCw5
ICsxODAsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRWQWxpZ24oIGNvbnN0IERPTVN0cmluZyAm
ICk7CiAKICAgICBraHRtbDo6U2hhcmVkUHRyPEhUTUxDb2xsZWN0aW9uSW1wbD4gcm93cygpOwot
Ci1wcm90ZWN0ZWQ6Ci0gICAgdXNob3J0IF9pZDsKIH07CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
QEAgLTE5NSw5ICsxODgsNyBAQCBjbGFzcyBIVE1MVGFibGVSb3dFbGVtZW50SW1wbCA6IHB1Ymxp
YyBICiB7CiBwdWJsaWM6CiAgICAgSFRNTFRhYmxlUm93RWxlbWVudEltcGwoRG9jdW1lbnRQdHIg
KmRvYykKLSAgICAgICAgOiBIVE1MVGFibGVQYXJ0RWxlbWVudEltcGwoZG9jKSB7fQotCi0gICAg
dmlydHVhbCBJZCBpZCgpIGNvbnN0OworICAgICAgICA6IEhUTUxUYWJsZVBhcnRFbGVtZW50SW1w
bChIVE1MTmFtZXM6OnRyKCksIGRvYykge30KIAogICAgIHZpcnR1YWwgTm9kZUltcGwgKmFkZENo
aWxkKE5vZGVJbXBsICpjaGlsZCk7CiAgICAgCkBAIC0yMzgsNyArMjI5LDcgQEAgcHJvdGVjdGVk
OgogY2xhc3MgSFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsIDogcHVibGljIEhUTUxUYWJsZVBhcnRF
bGVtZW50SW1wbAogewogcHVibGljOgotICAgIEhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbChEb2N1
bWVudFB0ciAqZG9jLCBpbnQgdGFnSWQpOworICAgIEhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbChj
b25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudFB0ciAqZG9jKTsKICAgICB+SFRN
TFRhYmxlQ2VsbEVsZW1lbnRJbXBsKCk7CiAKICAgICAvLyAjIyMgRklYIHRoZXNlIHR3by4uLgpA
QCAtMjUxLDE0ICsyNDIsMTAgQEAgcHVibGljOgogCiAgICAgaW50IGNvbFNwYW4oKSBjb25zdCB7
IHJldHVybiBjU3BhbjsgfQogICAgIGludCByb3dTcGFuKCkgY29uc3QgeyByZXR1cm4gclNwYW47
IH0KLSAgICAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3QgeyByZXR1cm4gX2lkOyB9Ci0gICAg
CisKICAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShOb2RlSW1wbDo6SWQgYXR0ciwgTWFwcGVk
QXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFw
cGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIpOwogCi0gICAgdmlydHVhbCB2
b2lkIGF0dGFjaCgpOwotCiAgICAgLy8gdXNlZCBieSB0YWJsZSBjZWxscyB0byBzaGFyZSBzdHls
ZSBkZWNscyBjcmVhdGVkIGJ5IHRoZSBlbmNsb3NpbmcgdGFibGUuCiAgICAgdmlydHVhbCBDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbkltcGwqIGFkZGl0aW9uYWxBdHRyaWJ1dGVTdHlsZURlY2wo
KTsKICAgICAKQEAgLTMxMSw3ICsyOTgsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgaW50IF9jb2w7CiAg
ICAgaW50IHJTcGFuOwogICAgIGludCBjU3BhbjsKLSAgICBpbnQgX2lkOwogICAgIGludCByb3dI
ZWlnaHQ7CiAgICAgYm9vbCBtX3NvbGlkICAgICAgICA6IDE7CiB9OwpAQCAtMzIxLDkgKzMwNyw3
IEBAIHByb3RlY3RlZDoKIGNsYXNzIEhUTUxUYWJsZUNvbEVsZW1lbnRJbXBsIDogcHVibGljIEhU
TUxUYWJsZVBhcnRFbGVtZW50SW1wbAogewogcHVibGljOgotICAgIEhUTUxUYWJsZUNvbEVsZW1l
bnRJbXBsKERvY3VtZW50UHRyICpkb2MsIHVzaG9ydCBpKTsKLQotICAgIHZpcnR1YWwgSWQgaWQo
KSBjb25zdDsKKyAgICBIVE1MVGFibGVDb2xFbGVtZW50SW1wbChjb25zdCBRdWFsaWZpZWROYW1l
JiB0YWdOYW1lLCBEb2N1bWVudFB0ciAqZG9jKTsKIAogICAgIHZvaWQgc2V0VGFibGUoSFRNTFRh
YmxlRWxlbWVudEltcGwgKnQpIHsgdGFibGUgPSB0OyB9CiAKQEAgLTM1MSwxMCArMzM1LDYgQEAg
cHVibGljOgogICAgIHZvaWQgc2V0V2lkdGgoIGNvbnN0IERPTVN0cmluZyAmICk7CiAKIHByb3Rl
Y3RlZDoKLSAgICAvLyBjb3VsZCBiZSBJRF9DT0wgb3IgSURfQ09MR1JPVVAgLi4uIFRoZSBET00g
aXMgbm90IHF1aXRlIGNsZWFyIG9uCi0gICAgLy8gdGhpcywgYnV0IHNpbmNlIGJvdGggZWxlbWVu
dHMgd29yayBxdWl0ZSBzaW1pbGFyLCB3ZSB1c2Ugb25lCi0gICAgLy8gRE9NRWxlbWVudCBmb3Ig
dGhlbS4uLgotICAgIHVzaG9ydCBfaWQ7CiAgICAgaW50IF9zcGFuOwogICAgIEhUTUxUYWJsZUVs
ZW1lbnRJbXBsICp0YWJsZTsKIH07CkBAIC0zNjUsOSArMzQ1LDcgQEAgY2xhc3MgSFRNTFRhYmxl
Q2FwdGlvbkVsZW1lbnRJbXBsIDogcHVibAogewogcHVibGljOgogICAgIEhUTUxUYWJsZUNhcHRp
b25FbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAgICAgICA6IEhUTUxUYWJsZVBhcnRF
bGVtZW50SW1wbChkb2MpIHt9Ci0KLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CisgICAgICAg
IDogSFRNTFRhYmxlUGFydEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6Y2FwdGlvbigpLCBkb2MpIHt9
CiAgICAgCiAgICAgdmlydHVhbCBib29sIG1hcFRvRW50cnkoTm9kZUltcGw6OklkIGF0dHIsIE1h
cHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICphdHRyKTsKSW5kZXg6IGtodG1s
L2h0bWwvaHRtbG5hbWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29y
ZS9raHRtbC9odG1sL2h0bWxuYW1lcy5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMgpkaWZm
IC11IC1wIC1yMS4yIGtodG1sL2h0bWwvaHRtbG5hbWVzLmNwcAotLS0ga2h0bWwvaHRtbC9odG1s
bmFtZXMuY3BwCTE2IEp1biAyMDA1IDIwOjMzOjU3IC0wMDAwCTEuMgorKysga2h0bWwvaHRtbC9o
dG1sbmFtZXMuY3BwCTIyIEp1biAyMDA1IDIzOjIzOjMyIC0wMDAwCkBAIC0zNzUsNiArMzc1LDEy
IEBAIGNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6bWV0YSgpCiAgICAgcmV0dXJuIG1l
dGE7CiB9CiAKK2NvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6bm9icigpCit7CisgICAg
c3RhdGljIFF1YWxpZmllZE5hbWUgbm9icihudWxsQXRvbSwgIm5vYnIiLCB4aHRtbE5hbWVzcGFj
ZVVSSSgpKTsKKyAgICByZXR1cm4gbm9icjsKK30KKwogY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRN
TE5hbWVzOjpub2VtYmVkKCkKIHsKICAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBub2VtYmVkKG51
bGxBdG9tLCAibm9lbWJlZCIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwpAQCAtMzg3LDYgKzM5Mywx
MiBAQCBjb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6Om5vZnJhbWVzCiAgICAgcmV0dXJu
IG5vZnJhbWVzOwogfQogCitjb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6Om5vbGF5ZXIo
KQoreworICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIG5vZnJhbWVzKG51bGxBdG9tLCAibm9mcmFt
ZXMiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKKyAgICByZXR1cm4gbm9mcmFtZXM7Cit9CisKIGNv
bnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6bm9zY3JpcHQoKQogewogICAgIHN0YXRpYyBR
dWFsaWZpZWROYW1lIG5vc2NyaXB0KG51bGxBdG9tLCAibm9zY3JpcHQiLCB4aHRtbE5hbWVzcGFj
ZVVSSSgpKTsKQEAgLTQyMyw2ICs0MzUsMTIgQEAgY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5h
bWVzOjpwYXJhbSgpCiAgICAgcmV0dXJuIHBhcmFtOwogfQogCitjb25zdCBRdWFsaWZpZWROYW1l
JiBIVE1MTmFtZXM6OnBsYWludGV4dCgpCit7CisgICAgc3RhdGljIFF1YWxpZmllZE5hbWUgcGxh
aW50ZXh0KG51bGxBdG9tLCAicGxhaW50ZXh0IiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7CisgICAg
cmV0dXJuIHBsYWludGV4dDsKK30KKwogY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpw
cmUoKQogewogICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIHByZShudWxsQXRvbSwgInByZSIsIHho
dG1sTmFtZXNwYWNlVVJJKCkpOwpAQCAtNDY1LDYgKzQ4MywxMiBAQCBjb25zdCBRdWFsaWZpZWRO
YW1lJiBIVE1MTmFtZXM6OnNtYWxsKCkKICAgICByZXR1cm4gc21hbGw7CiB9CiAKK2NvbnN0IFF1
YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6c3BhbigpCit7CisgICAgc3RhdGljIFF1YWxpZmllZE5h
bWUgc3BhbihudWxsQXRvbSwgInNwYW4iLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKKyAgICByZXR1
cm4gc3BhbjsKK30KKwogY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpzdHJpa2UoKQog
ewogICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIHN0cmlrZShudWxsQXRvbSwgInN0cmlrZSIsIHho
dG1sTmFtZXNwYWNlVVJJKCkpOwpAQCAtNDgzLDYgKzUwNywxOCBAQCBjb25zdCBRdWFsaWZpZWRO
YW1lJiBIVE1MTmFtZXM6OnN0eWxlKCkKICAgICByZXR1cm4gc3R5bGU7CiB9CiAKK2NvbnN0IFF1
YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6c3ViKCkKK3sKKyAgICBzdGF0aWMgUXVhbGlmaWVkTmFt
ZSBzdWIobnVsbEF0b20sICJzdWIiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKKyAgICByZXR1cm4g
c3RyaWtlOworfQorCitjb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OnN1cCgpCit7Cisg
ICAgc3RhdGljIFF1YWxpZmllZE5hbWUgc3VwKG51bGxBdG9tLCAic3VwIiwgeGh0bWxOYW1lc3Bh
Y2VVUkkoKSk7CisgICAgcmV0dXJuIHN1cDsKK30KKwogY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRN
TE5hbWVzOjp0YWJsZSgpCiB7CiAgICAgc3RhdGljIFF1YWxpZmllZE5hbWUgdGFibGUobnVsbEF0
b20sICJ0YWJsZSIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwpAQCAtNTYxLDYgKzU5NywxMiBAQCBj
b25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OnZhcigpCiAgICAgcmV0dXJuIHZhcjsKIH0K
IAorY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjp3YnIoKQoreworICAgIHN0YXRpYyBR
dWFsaWZpZWROYW1lIHdicihudWxsQXRvbSwgIndiciIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwor
ICAgIHJldHVybiB3YnI7Cit9CisKIGNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6eG1w
KCkKIHsKICAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSB4bXAobnVsbEF0b20sICJ4bXAiLCB4aHRt
bE5hbWVzcGFjZVVSSSgpKTsKSW5kZXg6IGtodG1sL2h0bWwvaHRtbG5hbWVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sbmFtZXMuaCx2CnJl
dHJpZXZpbmcgcmV2aXNpb24gMS4yCmRpZmYgLXUgLXAgLXIxLjIga2h0bWwvaHRtbC9odG1sbmFt
ZXMuaAotLS0ga2h0bWwvaHRtbC9odG1sbmFtZXMuaAkxNiBKdW4gMjAwNSAyMDozMzo1NyAtMDAw
MAkxLjIKKysrIGtodG1sL2h0bWwvaHRtbG5hbWVzLmgJMjIgSnVuIDIwMDUgMjM6MjM6MzIgLTAw
MDAKQEAgLTIyLDcgKzIyLDcgQEAKICNpZm5kZWYgSFRNTE5BTUVTX0gKICNkZWZpbmUgSFRNTE5B
TUVTX0gKIAotI2luY2x1ZGUgInhtbC9kb21fZWxlbWVudGltcGwuaCIKKyNpbmNsdWRlICJkb21f
cW5hbWUuaCIKIAogbmFtZXNwYWNlIERPTQogewpAQCAtOTMsOCArOTMsMTAgQEAgcHVibGljOgog
ICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBtYXJxdWVlKCk7CiAgICAgc3RhdGljIGNv
bnN0IFF1YWxpZmllZE5hbWUmIG1lbnUoKTsKICAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFt
ZSYgbWV0YSgpOworICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBub2JyKCk7CiAgICAg
c3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIG5vZW1iZWQoKTsKICAgICBzdGF0aWMgY29uc3Qg
UXVhbGlmaWVkTmFtZSYgbm9mcmFtZXMoKTsKKyAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFt
ZSYgbm9sYXllcigpOwogICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBub3NjcmlwdCgp
OwogICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBvYmplY3QoKTsKICAgICBzdGF0aWMg
Y29uc3QgUXVhbGlmaWVkTmFtZSYgb2woKTsKQEAgLTEwMiw2ICsxMDQsNyBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIG9wdGlvbigpOwogICAgIHN0YXRpYyBjb25z
dCBRdWFsaWZpZWROYW1lJiBwKCk7CiAgICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIHBh
cmFtKCk7CisgICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIHBsYWludGV4dCgpOwogICAg
IHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBwcmUoKTsKICAgICBzdGF0aWMgY29uc3QgUXVh
bGlmaWVkTmFtZSYgcSgpOwogICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBzKCk7CkBA
IC0xMDksOSArMTEyLDEyIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFt
ZSYgc2NyaXB0KCk7CiAgICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIHNlbGVjdCgpOwog
ICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBzbWFsbCgpOworICAgIHN0YXRpYyBjb25z
dCBRdWFsaWZpZWROYW1lJiBzcGFuKCk7CiAgICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUm
IHN0cmlrZSgpOwogICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBzdHJvbmcoKTsKICAg
ICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgc3R5bGUoKTsKKyAgICBzdGF0aWMgY29uc3Qg
UXVhbGlmaWVkTmFtZSYgc3ViKCk7CisgICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIHN1
cCgpOwogICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiB0YWJsZSgpOwogICAgIHN0YXRp
YyBjb25zdCBRdWFsaWZpZWROYW1lJiB0Ym9keSgpOwogICAgIHN0YXRpYyBjb25zdCBRdWFsaWZp
ZWROYW1lJiB0ZCgpOwpAQCAtMTI1LDYgKzEzMSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29u
c3QgUXVhbGlmaWVkTmFtZSYgdSgpOwogICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiB1
bCgpOwogICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiB2YXIoKTsKKyAgICBzdGF0aWMg
Y29uc3QgUXVhbGlmaWVkTmFtZSYgd2JyKCk7CiAgICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5h
bWUmIHhtcCgpOwogCiAgICAgLy8gQXR0cmlidXRlIG5hbWVzLgpJbmRleDoga2h0bWwvaHRtbC9o
dG1scGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRt
bC9odG1sL2h0bWxwYXJzZXIuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjk2CmRpZmYgLXUg
LXAgLXIxLjk2IGtodG1sL2h0bWwvaHRtbHBhcnNlci5jcHAKLS0tIGtodG1sL2h0bWwvaHRtbHBh
cnNlci5jcHAJMTEgTWF5IDIwMDUgMDA6NTg6MjggLTAwMDAJMS45NgorKysga2h0bWwvaHRtbC9o
dG1scGFyc2VyLmNwcAkyMiBKdW4gMjAwNSAyMzoyMzozMyAtMDAwMApAQCAtNjksMjQgKzY5LDI0
IEBAIHVzaW5nIG5hbWVzcGFjZSBraHRtbDsKIGNsYXNzIEhUTUxTdGFja0VsZW0KIHsKIHB1Ymxp
YzoKLSAgICBIVE1MU3RhY2tFbGVtKCBpbnQgX2lkLAotICAgICAgICAgICAgICAgICAgIGludCBf
bGV2ZWwsCi0gICAgICAgICAgICAgICAgICAgRE9NOjpOb2RlSW1wbCAqX25vZGUsCi0gICAgICAg
ICAgICAgICAgICAgSFRNTFN0YWNrRWxlbSAqIF9uZXh0CisgICAgSFRNTFN0YWNrRWxlbShjb25z
dCBBdG9taWNTdHJpbmcmIF90YWdOYW1lLAorICAgICAgICAgICAgICAgICAgaW50IF9sZXZlbCwK
KyAgICAgICAgICAgICAgICAgIERPTTo6Tm9kZUltcGwgKl9ub2RlLAorICAgICAgICAgICAgICAg
ICAgSFRNTFN0YWNrRWxlbSAqIF9uZXh0CiAgICAgICAgICkKICAgICAgICAgOgotICAgICAgICBp
ZChfaWQpLAorICAgICAgICB0YWdOYW1lKF90YWdOYW1lKSwKICAgICAgICAgbGV2ZWwoX2xldmVs
KSwKICAgICAgICAgc3RyYXlUYWJsZUNvbnRlbnQoZmFsc2UpLAogICAgICAgICBub2RlKF9ub2Rl
KSwKICAgICAgICAgbmV4dChfbmV4dCkKICAgICAgICAgeyB9CiAKLSAgICBpbnQgICAgICAgaWQ7
Ci0gICAgaW50ICAgICAgIGxldmVsOwotICAgIGJvb2wgICAgICBzdHJheVRhYmxlQ29udGVudDsK
LSAgICBOb2RlSW1wbCAqbm9kZTsKLSAgICBIVE1MU3RhY2tFbGVtICpuZXh0OworICAgIEF0b21p
Y1N0cmluZyB0YWdOYW1lOworICAgIGludCBsZXZlbDsKKyAgICBib29sIHN0cmF5VGFibGVDb250
ZW50OworICAgIE5vZGVJbXBsKiBub2RlOworICAgIEhUTUxTdGFja0VsZW0qIG5leHQ7CiB9Owog
CiAvKioKQEAgLTExMiwxNCArMTEyLDkgQEAgcHVibGljOgogICogICAgZWxlbWVudCBvciBpZ25v
cmUgdGhlIHRhZy4KICAqCiAgKi8KLUtIVE1MUGFyc2VyOjpLSFRNTFBhcnNlcihLSFRNTFZpZXcg
Kl9wYXJlbnQsIERvY3VtZW50UHRyICpkb2MsIGJvb2wgaW5jbHVkZXNDb21tZW50cykgCitIVE1M
UGFyc2VyOjpIVE1MUGFyc2VyKEtIVE1MVmlldyAqX3BhcmVudCwgRG9jdW1lbnRQdHIgKmRvYywg
Ym9vbCBpbmNsdWRlc0NvbW1lbnRzKSAKICAgICA6IGN1cnJlbnQoMCksIGN1cnJlbnRJc1JlZmVy
ZW5jZWQoZmFsc2UpLCBpbmNsdWRlc0NvbW1lbnRzSW5ET00oaW5jbHVkZXNDb21tZW50cykKIHsK
LSAgICAvL2tkRGVidWcoIDYwMzUgKSA8PCAicGFyc2VyIGNvbnN0cnVjdG9yIiA8PCBlbmRsOwot
I2lmIFNQRUVEX0RFQlVHID4gMAotICAgIHF0LnN0YXJ0KCk7Ci0jZW5kaWYKLQogICAgIEhUTUxX
aWRnZXQgICAgPSBfcGFyZW50OwogICAgIGRvY3VtZW50ICAgICAgPSBkb2M7CiAgICAgZG9jdW1l
bnQtPnJlZigpOwpAQCAtMTI5LDcgKzEyNCw3IEBAIEtIVE1MUGFyc2VyOjpLSFRNTFBhcnNlcihL
SFRNTFZpZXcgKl9wYXIKICAgICByZXNldCgpOwogfQogCi1LSFRNTFBhcnNlcjo6S0hUTUxQYXJz
ZXIoRE9NOjpEb2N1bWVudEZyYWdtZW50SW1wbCAqaSwgRG9jdW1lbnRQdHIgKmRvYywgYm9vbCBp
bmNsdWRlc0NvbW1lbnRzKQorSFRNTFBhcnNlcjo6SFRNTFBhcnNlcihET006OkRvY3VtZW50RnJh
Z21lbnRJbXBsICppLCBEb2N1bWVudFB0ciAqZG9jLCBib29sIGluY2x1ZGVzQ29tbWVudHMpCiAg
ICAgOiBjdXJyZW50KDApLCBjdXJyZW50SXNSZWZlcmVuY2VkKGZhbHNlKSwgaW5jbHVkZXNDb21t
ZW50c0luRE9NKGluY2x1ZGVzQ29tbWVudHMpCiB7CiAgICAgSFRNTFdpZGdldCA9IDA7CkBAIC0x
NDMsMTIgKzEzOCw4IEBAIEtIVE1MUGFyc2VyOjpLSFRNTFBhcnNlcihET006OkRvY3VtZW50RnIK
ICAgICBpbkJvZHkgPSB0cnVlOwogfQogCi1LSFRNTFBhcnNlcjo6fktIVE1MUGFyc2VyKCkKK0hU
TUxQYXJzZXI6On5IVE1MUGFyc2VyKCkKIHsKLSNpZiBTUEVFRF9ERUJVRyA+IDAKLSAgICBrZERl
YnVnKCApIDw8ICJUSU1FOiBwYXJzaW5nIHRpbWUgd2FzID0gIiA8PCBxdC5lbGFwc2VkKCkgPDwg
ZW5kbDsKLSNlbmRpZgotCiAgICAgZnJlZUJsb2NrKCk7CiAKICAgICBzZXRDdXJyZW50KDApOwpA
QCAtMTU5LDE1ICsxNTAsMTIgQEAgS0hUTUxQYXJzZXI6On5LSFRNTFBhcnNlcigpCiAgICAgICAg
IGlzaW5kZXgtPmRlcmVmKCk7CiB9CiAKLXZvaWQgS0hUTUxQYXJzZXI6OnJlc2V0KCkKK3ZvaWQg
SFRNTFBhcnNlcjo6cmVzZXQoKQogewogICAgIHNldEN1cnJlbnQoZG9jKCkpOwogCiAgICAgZnJl
ZUJsb2NrKCk7CiAKLSAgICAvLyBiZWZvcmUgcGFyc2luZywgbm8gdGFncyBhcmUgZm9yYmlkZGVu
Ci0gICAgbWVtc2V0KGZvcmJpZGRlblRhZywgMCwgc2l6ZW9mKGZvcmJpZGRlblRhZykpOwotCiAg
ICAgaW5Cb2R5ID0gZmFsc2U7CiAgICAgaGF2ZUZyYW1lU2V0ID0gZmFsc2U7CiAgICAgaGF2ZUNv
bnRlbnQgPSBmYWxzZTsKQEAgLTE4MCwxMCArMTY4LDEwIEBAIHZvaWQgS0hUTUxQYXJzZXI6OnJl
c2V0KCkKICAgICBlbmQgPSBmYWxzZTsKICAgICBpc2luZGV4ID0gMDsKICAgICAKLSAgICBkaXNj
YXJkX3VudGlsID0gMDsKKyAgICBkaXNjYXJkX3VudGlsID0gbnVsbEF0b207CiB9CiAKLXZvaWQg
S0hUTUxQYXJzZXI6OnNldEN1cnJlbnQoRE9NOjpOb2RlSW1wbCAqbmV3Q3VycmVudCkgCit2b2lk
IEhUTUxQYXJzZXI6OnNldEN1cnJlbnQoRE9NOjpOb2RlSW1wbCAqbmV3Q3VycmVudCkgCiB7CiAg
ICAgYm9vbCBuZXdDdXJyZW50SXNSZWZlcmVuY2VkID0gbmV3Q3VycmVudCAmJiBuZXdDdXJyZW50
ICE9IGRvYygpOwogICAgIGlmIChuZXdDdXJyZW50SXNSZWZlcmVuY2VkKSAKQEAgLTE5NCwxNDQg
KzE4MiwxMDggQEAgdm9pZCBLSFRNTFBhcnNlcjo6c2V0Q3VycmVudChET006Ok5vZGVJbQogICAg
IGN1cnJlbnRJc1JlZmVyZW5jZWQgPSBuZXdDdXJyZW50SXNSZWZlcmVuY2VkOwogfQogCi12b2lk
IEtIVE1MUGFyc2VyOjpwYXJzZVRva2VuKFRva2VuICp0KQordm9pZCBIVE1MUGFyc2VyOjpwYXJz
ZVRva2VuKFRva2VuICp0KQogewotICAgIGlmKGRpc2NhcmRfdW50aWwpIHsKLSAgICAgICAgaWYo
dC0+aWQgPT0gZGlzY2FyZF91bnRpbCkKLSAgICAgICAgICAgIGRpc2NhcmRfdW50aWwgPSAwOwor
ICAgIGlmICghZGlzY2FyZF91bnRpbC5pc051bGwoKSkgeworICAgICAgICBpZiAodC0+dGFnTmFt
ZSA9PSBkaXNjYXJkX3VudGlsICYmICF0LT5iZWdpblRhZykKKyAgICAgICAgICAgIGRpc2NhcmRf
dW50aWwgPSBudWxsQXRvbTsKIAogICAgICAgICAvLyBkbyBub3Qgc2tpcCA8L2lmcmFtZT4KLSAg
ICAgICAgaWYgKCBkaXNjYXJkX3VudGlsIHx8IGN1cnJlbnQtPmlkKCkgKyBJRF9DTE9TRV9UQUcg
IT0gdC0+aWQgKQorICAgICAgICBpZiAoIWRpc2NhcmRfdW50aWwuaXNOdWxsKCkgfHwgKGN1cnJl
bnQtPmxvY2FsTmFtZSgpICE9IHQtPnRhZ05hbWUpKQogICAgICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotI2lmZGVmIFBBUlNFUl9ERUJVRwotICAgIGtkRGVidWcoIDYwMzUgKSA8PCAiXG5cbj09
PiBwYXJzZXI6IHByb2Nlc3NpbmcgdG9rZW4gIiA8PCBnZXRUYWdOYW1lKHQtPmlkKS5zdHJpbmco
KSA8PCAiKCIgPDwgdC0+aWQgPDwgIikiCi0gICAgICAgICAgICAgICAgICAgIDw8ICIgY3VycmVu
dCA9ICIgPDwgZ2V0VGFnTmFtZShjdXJyZW50LT5pZCgpKS5zdHJpbmcoKSA8PCAiKCIgPDwgY3Vy
cmVudC0+aWQoKSA8PCAiKSIgPDwgZW5kbDsKLSAgICBrZERlYnVnKDYwMzUpIDw8ICIgaW5Cb2R5
PSIgPDwgaW5Cb2R5IDw8ICIgaGF2ZUZyYW1lU2V0PSIgPDwgaGF2ZUZyYW1lU2V0IDw8IGVuZGw7
Ci0jZW5kaWYKLQotICAgIC8vIGhvbHkgc2hpdC4gYXBwYXJlbnRseSBzb21lIHNpdGVzIHVzZSA8
L2JyPiBpbnN0ZWFkIG9mIDxicj4KLSAgICAvLyBiZSBjb21wYXRpYmxlIHdpdGggSUUgYW5kIE5T
Ci0gICAgaWYgKHQtPmlkID09IElEX0JSICsgSURfQ0xPU0VfVEFHICYmIGRvYygpLT5pbkNvbXBh
dE1vZGUoKSkKLSAgICAgICAgdC0+aWQgPSBJRF9CUjsKKyAgICAvLyBBcHBhcmVudGx5IHNvbWUg
c2l0ZXMgdXNlIDwvYnI+IGluc3RlYWQgb2YgPGJyPi4gIEJlIGNvbXBhdGlibGUgd2l0aCBJRSBh
bmQgRmlyZWZveCBhbmQgdHJlYXQgdGhpcyBsaWtlIDxicj4uCisgICAgaWYgKHQtPmlzQ2xvc2VU
YWcoSFRNTE5hbWVzOjpicigpKSAmJiBkb2MoKS0+aW5Db21wYXRNb2RlKCkpCisgICAgICAgIHQt
PmJlZ2luVGFnID0gdHJ1ZTsKIAotICAgIGlmICh0LT5pZCA+IElEX0NMT1NFX1RBRykKLSAgICB7
CisgICAgaWYgKCF0LT5iZWdpblRhZykgewogICAgICAgICBwcm9jZXNzQ2xvc2VUYWcodCk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICAvLyBpZ25vcmUgc3BhY2VzLCBpZiB3ZSdyZSBu
b3QgaW5zaWRlIGEgcGFyYWdyYXBoIG9yIG90aGVyIGlubGluZSBjb2RlCi0gICAgaWYoIHQtPmlk
ID09IElEX1RFWFQgJiYgdC0+dGV4dCApIHsKLSAgICAgICAgaWYoaW5Cb2R5ICYmICFza2lwTW9k
ZSgpICYmIGN1cnJlbnQtPmlkKCkgIT0gSURfU1RZTEUgCi0gICAgICAgICAgICAmJiBjdXJyZW50
LT5pZCgpICE9IElEX1RJVExFICYmIGN1cnJlbnQtPmlkKCkgIT0gSURfU0NSSVBUICYmCi0gICAg
ICAgICAgICAhdC0+dGV4dC0+Y29udGFpbnNPbmx5V2hpdGVzcGFjZSgpKSAKKyAgICBpZiAodC0+
dGFnTmFtZSA9PSB0ZXh0QXRvbSAmJiB0LT50ZXh0KSB7CisgICAgICAgIGlmIChpbkJvZHkgJiYg
IXNraXBNb2RlKCkgJiYgY3VycmVudC0+bG9jYWxOYW1lKCkgIT0gSFRNTE5hbWVzOjpzdHlsZSgp
ICYmIGN1cnJlbnQtPmxvY2FsTmFtZSgpICE9IEhUTUxOYW1lczo6dGl0bGUoKSAmJiAKKyAgICAg
ICAgICAgIGN1cnJlbnQtPmxvY2FsTmFtZSgpICE9IEhUTUxOYW1lczo6c2NyaXB0KCkgJiYgIXQt
PnRleHQtPmNvbnRhaW5zT25seVdoaXRlc3BhY2UoKSkgCiAgICAgICAgICAgICBoYXZlQ29udGVu
dCA9IHRydWU7Ci0jaWZkZWYgUEFSU0VSX0RFQlVHCi0gICAgICAgIGtkRGVidWcoNjAzNSkgPDwg
Imxlbmd0aD0iPDwgdC0+dGV4dC0+bCA8PCAiIHRleHQ9JyIgPDwgUUNvbnN0U3RyaW5nKHQtPnRl
eHQtPnMsIHQtPnRleHQtPmwpLnN0cmluZygpIDw8ICInIiA8PCBlbmRsOwotI2VuZGlmCiAgICAg
fQogCi0gICAgTm9kZUltcGwgKm4gPSBnZXRFbGVtZW50KHQpOworICAgIE5vZGVJbXBsICpuID0g
Z2V0Tm9kZSh0KTsKICAgICAvLyBqdXN0IHRvIGJlIHN1cmUsIGFuZCB0byBjYXRjaCBjdXJyZW50
bHkgdW5pbXBsZW1lbnRlZCBzdHVmZgotICAgIGlmKCFuKQorICAgIGlmICghbikKICAgICAgICAg
cmV0dXJuOwogCiAgICAgU2hhcmVkUHRyPE5vZGVJbXBsPiBwcm90ZWN0Tm9kZShuKTsKIAogICAg
IC8vIHNldCBhdHRyaWJ1dGVzCi0gICAgaWYobi0+aXNFbGVtZW50Tm9kZSgpKQotICAgIHsKLSAg
ICAgICAgRWxlbWVudEltcGwgKmUgPSBzdGF0aWNfY2FzdDxFbGVtZW50SW1wbCAqPihuKTsKKyAg
ICBpZiAobi0+aXNIVE1MRWxlbWVudCgpKSB7CisgICAgICAgIEhUTUxFbGVtZW50SW1wbCAqZSA9
IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCo+KG4pOwogICAgICAgICBlLT5zZXRBdHRyaWJ1
dGVNYXAodC0+YXR0cnMpOwogCiAgICAgICAgIC8vIHRha2UgY2FyZSBvZiBvcHRpb25hbCBjbG9z
ZSB0YWdzCi0gICAgICAgIGlmKGVuZFRhZ1JlcXVpcmVtZW50KGUtPmlkKCkpID09IERPTTo6T1BU
SU9OQUwpCi0gICAgICAgICAgICBwb3BCbG9jayh0LT5pZCk7CisgICAgICAgIGlmIChlLT5lbmRU
YWdSZXF1aXJlbWVudCgpID09IERPTTo6T1BUSU9OQUwpCisgICAgICAgICAgICBwb3BCbG9jayh0
LT50YWdOYW1lKTsKICAgICAgICAgICAgIAotICAgICAgICBpZiAoaXNIZWFkZXJUYWcodC0+aWQp
KQorICAgICAgICBpZiAoaXNIZWFkZXJUYWcodC0+dGFnTmFtZSkpCiAgICAgICAgICAgICAvLyBE
byBub3QgYWxsb3cgdHdvIGhlYWRlciB0YWdzIHRvIGJlIG5lc3RlZCBpZiB0aGUgaW50ZXJ2ZW5p
bmcgdGFncyBhcmUgaW5saW5lcy4KICAgICAgICAgICAgIHBvcE5lc3RlZEhlYWRlclRhZygpOwog
ICAgIH0KIAotICAgIC8vIGlmIHRoaXMgdGFnIGlzIGZvcmJpZGRlbiBpbnNpZGUgdGhlIGN1cnJl
bnQgY29udGV4dCwgcG9wCi0gICAgLy8gYmxvY2tzIHVudGlsIHdlIGFyZSBhbGxvd2VkIHRvIGFk
ZCBpdC4uLgotICAgIHdoaWxlIChibG9ja1N0YWNrICYmIHQtPmlkIDw9IElEX0xBU1RfVEFHICYm
IGZvcmJpZGRlblRhZ1t0LT5pZF0pIHsKLSNpZmRlZiBQQVJTRVJfREVCVUcKLSAgICAgICAga2RE
ZWJ1ZyggNjAzNSApIDw8ICJ0LT5pZDogIiA8PCB0LT5pZCA8PCAiIGlzIGZvcmJpZGRlbiA6LSgg
IiA8PCBlbmRsOwotI2VuZGlmCi0gICAgICAgIHBvcE9uZUJsb2NrKCk7Ci0gICAgfQotCi0gICAg
aWYgKCFpbnNlcnROb2RlKG4sIHQtPmZsYXQpKSAKLSAgICB7CisgICAgaWYgKCFpbnNlcnROb2Rl
KG4sIHQtPmZsYXQpKSB7CiAgICAgICAgIC8vIHdlIGNvdWxkbid0IGluc2VydCB0aGUgbm9kZS4u
LgotICAgICAgICAKLSAgICAgICAgaWYobi0+aXNFbGVtZW50Tm9kZSgpKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBFbGVtZW50SW1wbCAqZSA9IHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsICo+KG4p
OworICAgICAgICBpZiAobi0+aXNFbGVtZW50Tm9kZSgpKSB7CisgICAgICAgICAgICBFbGVtZW50
SW1wbCogZSA9IHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsKj4obik7CiAgICAgICAgICAgICBlLT5z
ZXRBdHRyaWJ1dGVNYXAoMCk7CiAgICAgICAgIH0KICAgICAgICAgICAgIAotI2lmZGVmIFBBUlNF
Ul9ERUJVRwotICAgICAgICBrZERlYnVnKCA2MDM1ICkgPDwgImluc2VydE5vZGUgZmFpbGVkIGN1
cnJlbnQ9IiA8PCBjdXJyZW50LT5pZCgpIDw8ICIsIG5ldz0iIDw8IG4tPmlkKCkgPDwgIiEiIDw8
IGVuZGw7Ci0jZW5kaWYKICAgICAgICAgaWYgKG1hcCA9PSBuKQotICAgICAgICB7Ci0jaWZkZWYg
UEFSU0VSX0RFQlVHCi0gICAgICAgICAgICBrZERlYnVnKCA2MDM1ICkgPDwgIiAgLS0+IHJlc2V0
dGluZyBtYXAhIiA8PCBlbmRsOwotI2VuZGlmCiAgICAgICAgICAgICBtYXAgPSAwOwotICAgICAg
ICB9CisKICAgICAgICAgaWYgKGZvcm0gPT0gbikKLSAgICAgICAgewotI2lmZGVmIFBBUlNFUl9E
RUJVRwotICAgICAgICAgICAga2REZWJ1ZyggNjAzNSApIDw8ICIgICAtLT4gcmVzZXR0aW5nIGZv
cm0hIiA8PCBlbmRsOwotI2VuZGlmCiAgICAgICAgICAgICBmb3JtID0gMDsKLSAgICAgICAgfQog
ICAgIH0KIH0KIAotc3RhdGljIGJvb2wgaXNUYWJsZVJlbGF0ZWRUYWcoaW50IGlkKQorc3RhdGlj
IGJvb2wgaXNUYWJsZVNlY3Rpb24oTm9kZUltcGwqIG4pCiB7Ci0gICAgcmV0dXJuIChpZCA9PSBJ
RF9UUiB8fCBpZCA9PSBJRF9URCB8fCBpZCA9PSBJRF9UQUJMRSB8fCBpZCA9PSBJRF9UQk9EWSB8
fCBpZCA9PSBJRF9URk9PVCB8fCBpZCA9PSBJRF9USEVBRCB8fAotICAgICAgICAgICAgaWQgPT0g
SURfVEgpOworICAgIHJldHVybiBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGJvZHkoKSkgfHwg
bi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRmb290KCkpIHx8IG4tPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjp0aGVhZCgpKTsKIH0KIAotYm9vbCBLSFRNTFBhcnNlcjo6aW5zZXJ0Tm9kZShOb2RlSW1w
bCAqbiwgYm9vbCBmbGF0KQorc3RhdGljIGJvb2wgaXNUYWJsZVBhcnQoTm9kZUltcGwqIG4pCiB7
Ci0gICAgU2hhcmVkUHRyPE5vZGVJbXBsPiBwcm90ZWN0Tm9kZShuKTsKKyAgICByZXR1cm4gbi0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRyKCkpIHx8IG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0
ZCgpKSB8fCBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGgoKSkgfHwKKyAgICAgICAgICAgaXNU
YWJsZVNlY3Rpb24obik7Cit9CisKK3N0YXRpYyBib29sIGlzVGFibGVSZWxhdGVkKE5vZGVJbXBs
KiBuKQoreworICAgIHJldHVybiBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGFibGUoKSkgfHwg
aXNUYWJsZVBhcnQobik7Cit9CiAKLSAgICBpbnQgaWQgPSBuLT5pZCgpOworYm9vbCBIVE1MUGFy
c2VyOjppbnNlcnROb2RlKE5vZGVJbXBsICpuLCBib29sIGZsYXQpCit7CisgICAgU2hhcmVkUHRy
PE5vZGVJbXBsPiBwcm90ZWN0Tm9kZShuKTsKIAorICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbG9j
YWxOYW1lID0gbi0+bG9jYWxOYW1lKCk7CisgICAgaW50IHRhZ1ByaW9yaXR5ID0gbi0+aXNIVE1M
RWxlbWVudCgpID8gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsKj4obiktPnRhZ1ByaW9yaXR5
KCkgOiAwOworICAgICAgICAKICAgICAvLyBsZXQncyBiZSBzdHVwaWQgYW5kIGp1c3QgdHJ5IHRv
IGluc2VydCBpdC4KLSAgICAvLyB0aGlzIHNob3VsZCB3b3JrIGlmIHRoZSBkb2N1bWVudCBpcyB3
ZWxsZm9ybWVkCi0jaWZkZWYgUEFSU0VSX0RFQlVHCi0gICAgTm9kZUltcGwgKnRtcCA9IGN1cnJl
bnQ7Ci0jZW5kaWYKKyAgICAvLyB0aGlzIHNob3VsZCB3b3JrIGlmIHRoZSBkb2N1bWVudCBpcyB3
ZWxsLWZvcm1lZAogICAgIE5vZGVJbXBsICpuZXdOb2RlID0gY3VycmVudC0+YWRkQ2hpbGQobik7
Ci0gICAgaWYgKCBuZXdOb2RlICkgewotI2lmZGVmIFBBUlNFUl9ERUJVRwotICAgICAgICBrZERl
YnVnKCA2MDM1ICkgPDwgImFkZGVkICIgPDwgbi0+bm9kZU5hbWUoKS5zdHJpbmcoKSA8PCAiIHRv
ICIgPDwgdG1wLT5ub2RlTmFtZSgpLnN0cmluZygpIDw8ICIsIG5ldyBjdXJyZW50PSIgPDwgbmV3
Tm9kZS0+bm9kZU5hbWUoKS5zdHJpbmcoKSA8PCBlbmRsOwotI2VuZGlmCi0gICAgICAgIC8vIGRv
bid0IHB1c2ggZWxlbWVudHMgd2l0aG91dCBlbmQgdGFnIG9uIHRoZSBzdGFjawotICAgICAgICBp
Zih0YWdQcmlvcml0eShpZCkgIT0gMCAmJiAhZmxhdCkKLSAgICAgICAgewotICAgICAgICAgICAg
cHVzaEJsb2NrKGlkLCB0YWdQcmlvcml0eShpZCkpOworICAgIGlmIChuZXdOb2RlKSB7CisgICAg
ICAgIC8vIGRvbid0IHB1c2ggZWxlbWVudHMgd2l0aG91dCBlbmQgdGFncyAoZS5nLiwgPGltZz4p
IG9uIHRoZSBzdGFjaworICAgICAgICBpZiAodGFnUHJpb3JpdHkgPiAwICYmICFmbGF0KSB7Cisg
ICAgICAgICAgICBwdXNoQmxvY2sobG9jYWxOYW1lLCB0YWdQcmlvcml0eSk7CiAgICAgICAgICAg
ICBpZiAobmV3Tm9kZSA9PSBjdXJyZW50KQotICAgICAgICAgICAgICAgIHBvcEJsb2NrKGlkKTsK
KyAgICAgICAgICAgICAgICBwb3BCbG9jayhsb2NhbE5hbWUpOwogICAgICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgICAgIHNldEN1cnJlbnQobmV3Tm9kZSk7Ci0jaWYgU1BFRURfREVCVUcgPCAy
Ci0gICAgICAgICAgICBpZighbi0+YXR0YWNoZWQoKSAmJiBIVE1MV2lkZ2V0KQorICAgICAgICAg
ICAgaWYgKCFuLT5hdHRhY2hlZCgpICYmIEhUTUxXaWRnZXQpCiAgICAgICAgICAgICAgICAgbi0+
YXR0YWNoKCk7Ci0jZW5kaWYKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKLSNpZiBTUEVFRF9E
RUJVRyA8IDIKLSAgICAgICAgICAgIGlmKCFuLT5hdHRhY2hlZCgpICYmIEhUTUxXaWRnZXQpCisg
ICAgICAgICAgICBpZiAoIW4tPmF0dGFjaGVkKCkgJiYgSFRNTFdpZGdldCkKICAgICAgICAgICAg
ICAgICBuLT5hdHRhY2goKTsKICAgICAgICAgICAgIGlmIChuLT5tYWludGFpbnNTdGF0ZSgpKSB7
CiAgICAgICAgICAgICAgICAgZG9jKCktPnJlZ2lzdGVyTWFpbnRhaW5zU3RhdGUobik7CkBAIC0z
NDAsMTA0ICsyOTIsODYgQEAgYm9vbCBLSFRNTFBhcnNlcjo6aW5zZXJ0Tm9kZShOb2RlSW1wbCAq
bgogICAgICAgICAgICAgICAgICAgICBuLT5yZXN0b3JlU3RhdGUoc3RhdGVzKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIG4tPmNsb3NlUmVuZGVyZXIoKTsKLSNlbmRpZgogICAgICAgICB9
CiAKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSBlbHNlIHsKLSNpZmRlZiBQQVJTRVJfREVC
VUcKLSAgICAgICAga2REZWJ1ZyggNjAzNSApIDw8ICJBRERJTkcgTk9ERSBGQUlMRUQhISEhIGN1
cnJlbnQgPSAiIDw8IGN1cnJlbnQtPm5vZGVOYW1lKCkuc3RyaW5nKCkgPDwgIiwgbmV3ID0gIiA8
PCBuLT5ub2RlTmFtZSgpLnN0cmluZygpIDw8IGVuZGw7Ci0jZW5kaWYKLSAgICAgICAgLy8gZXJy
b3IgaGFuZGxpbmcuLi4KLSAgICAgICAgSFRNTEVsZW1lbnRJbXBsICplOwotICAgICAgICBib29s
IGhhbmRsZWQgPSBmYWxzZTsKLQotICAgICAgICAvLyBzd2l0Y2ggYWNjb3JkaW5nIHRvIHRoZSBl
bGVtZW50IHRvIGluc2VydAotICAgICAgICBzd2l0Y2goaWQpCi0gICAgICAgIHsKLSAgICAgICAg
Y2FzZSBJRF9UUjoKLSAgICAgICAgY2FzZSBJRF9USDoKLSAgICAgICAgY2FzZSBJRF9URDoKLSAg
ICAgICAgICAgIGlmIChpblN0cmF5VGFibGVDb250ZW50ICYmICFpc1RhYmxlUmVsYXRlZFRhZyhj
dXJyZW50LT5pZCgpKSkgeworICAgIH0gZWxzZQorICAgICAgICByZXR1cm4gaGFuZGxlRXJyb3Io
biwgZmxhdCwgbG9jYWxOYW1lLCB0YWdQcmlvcml0eSk7IC8vIFRyeSB0byBoYW5kbGUgdGhlIGVy
cm9yLgorfQorCitib29sIEhUTUxQYXJzZXI6OmhhbmRsZUVycm9yKE5vZGVJbXBsKiBuLCBib29s
IGZsYXQsIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lLCBpbnQgdGFnUHJpb3JpdHkpCit7
CisgICAgLy8gRXJyb3IgaGFuZGxpbmcgY29kZS4gIFRoaXMgaXMganVzdCBhZCBob2MgaGFuZGxp
bmcgb2Ygc3BlY2lmaWMgcGFyZW50L2NoaWxkIGNvbWJpbmF0aW9ucy4KKyAgICBIVE1MRWxlbWVu
dEltcGwgKmU7CisgICAgYm9vbCBoYW5kbGVkID0gZmFsc2U7CisKKyAgICAvLyAxLiBDaGVjayBv
dXQgdGhlIGVsZW1lbnQncyB0YWcgbmFtZSB0byBkZWNpZGUgaG93IHRvIGRlYWwgd2l0aCBlcnJv
cnMuCisgICAgaWYgKG4tPmlzVGV4dE5vZGUoKSkgeworICAgICAgICBpZiAoY3VycmVudC0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OnNlbGVjdCgpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9IGVsc2UgaWYgKG4tPmlzSFRNTEVsZW1lbnQoKSkgeworICAgICAgICBIVE1MRWxlbWVu
dEltcGwqIGggPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwqPihuKTsKKyAgICAgICAgaWYg
KGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnRyKCkpIHx8IGgtPmhhc0xvY2FsTmFtZShIVE1M
TmFtZXM6OnRoKCkpIHx8CisgICAgICAgICAgICBoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0
ZCgpKSkgeworICAgICAgICAgICAgaWYgKGluU3RyYXlUYWJsZUNvbnRlbnQgJiYgIWlzVGFibGVS
ZWxhdGVkKGN1cnJlbnQpKSB7CiAgICAgICAgICAgICAgICAgLy8gcG9wIG91dCB0byB0aGUgbmVh
cmVzdCBlbmNsb3NpbmcgdGFibGUtcmVsYXRlZCB0YWcuCi0gICAgICAgICAgICAgICAgd2hpbGUg
KGJsb2NrU3RhY2sgJiYgIWlzVGFibGVSZWxhdGVkVGFnKGN1cnJlbnQtPmlkKCkpKQorICAgICAg
ICAgICAgICAgIHdoaWxlIChibG9ja1N0YWNrICYmICFpc1RhYmxlUmVsYXRlZChjdXJyZW50KSkK
ICAgICAgICAgICAgICAgICAgICAgcG9wT25lQmxvY2soKTsKICAgICAgICAgICAgICAgICByZXR1
cm4gaW5zZXJ0Tm9kZShuKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIElEX0NPTU1FTlQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJ
RF9IRUFEOgotICAgICAgICAgICAgLy8gIyMjIGFsbGxvdyBub3QgaGF2aW5nIDxIVE1MPiBpbiBh
dCBhbGwsIGFzIHBlciBIVE1MIHNwZWMKLSAgICAgICAgICAgIGlmICghY3VycmVudC0+aXNEb2N1
bWVudE5vZGUoKSAmJiBjdXJyZW50LT5pZCgpICE9IElEX0hUTUwgKQorICAgICAgICB9IGVsc2Ug
aWYgKGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmhlYWQoKSkpIHsKKyAgICAgICAgICAgIGlm
ICghY3VycmVudC0+aXNEb2N1bWVudE5vZGUoKSAmJiAhY3VycmVudC0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6Omh0bWwoKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAvLyBXZSBjYW4gZGVhbCB3aXRoIGEgYmFzZSwgbWV0YSBh
bmQgbGluayBlbGVtZW50IGluIHRoZSBib2R5LCBieSBqdXN0IGFkZGluZyB0aGUgZWxlbWVudCB0
byBoZWFkLgotICAgICAgICBjYXNlIElEX01FVEE6Ci0gICAgICAgIGNhc2UgSURfTElOSzoKLSAg
ICAgICAgY2FzZSBJRF9CQVNFOgotICAgICAgICAgICAgaWYoICFoZWFkICkKKyAgICAgICAgfSBl
bHNlIGlmIChoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjptZXRhKCkpIHx8IGgtPmhhc0xvY2Fs
TmFtZShIVE1MTmFtZXM6OmxpbmsoKSkgfHwgaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6YmFz
ZSgpKSkgeworICAgICAgICAgICAgaWYgKCFoZWFkKQogICAgICAgICAgICAgICAgIGNyZWF0ZUhl
YWQoKTsKLSAgICAgICAgICAgIGlmKCBoZWFkICkgewotICAgICAgICAgICAgICAgIGlmICggaGVh
ZC0+YWRkQ2hpbGQobikgKSB7Ci0jaWYgU1BFRURfREVCVUcgPCAyCi0gICAgICAgICAgICAgICAg
ICAgIGlmKCFuLT5hdHRhY2hlZCgpICYmIEhUTUxXaWRnZXQpCisgICAgICAgICAgICBpZiAoaGVh
ZCkgeworICAgICAgICAgICAgICAgIGlmIChoZWFkLT5hZGRDaGlsZChuKSkgeworICAgICAgICAg
ICAgICAgICAgICBpZiAoIW4tPmF0dGFjaGVkKCkgJiYgSFRNTFdpZGdldCkKICAgICAgICAgICAg
ICAgICAgICAgICAgIG4tPmF0dGFjaCgpOwotI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotCQl9IGVsc2UgewotCQkgICAgcmV0dXJuIGZhbHNlOwotCQl9CisgICAgICAg
ICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElEX0hUTUw6CisgICAg
ICAgIH0gZWxzZSBpZiAoaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6aHRtbCgpKSkgewogICAg
ICAgICAgICAgaWYgKCFjdXJyZW50LT5pc0RvY3VtZW50Tm9kZSgpICkgewotCQlpZiAoIGRvYygp
LT5maXJzdENoaWxkKCktPmlkKCkgPT0gSURfSFRNTCkgewotCQkgICAgLy8gd2UgaGF2ZSBhbm90
aGVyIDxIVE1MPiBlbGVtZW50Li4uLiBhcHBseSBhdHRyaWJ1dGVzIHRvIGV4aXN0aW5nIG9uZQot
CQkgICAgLy8gbWFrZSBzdXJlIHdlIGRvbid0IG92ZXJ3cml0ZSBhbHJlYWR5IGV4aXN0aW5nIGF0
dHJpYnV0ZXMKLQkJICAgIE5hbWVkQXR0ck1hcEltcGwgKm1hcCA9IHN0YXRpY19jYXN0PEVsZW1l
bnRJbXBsKj4obiktPmF0dHJpYnV0ZXModHJ1ZSk7Ci0JCSAgICBOYW1lZEF0dHJNYXBJbXBsICpi
bWFwID0gc3RhdGljX2Nhc3Q8RWxlbWVudEltcGwqPihkb2MoKS0+Zmlyc3RDaGlsZCgpKS0+YXR0
cmlidXRlcyhmYWxzZSk7Ci0JCSAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKLQkJICAgIGZvciAo
dW5zaWduZWQgbG9uZyBsID0gMDsgbWFwICYmIGwgPCBtYXAtPmxlbmd0aCgpOyArK2wpIHsKLQkJ
CUF0dHJpYnV0ZUltcGwqIGl0ID0gbWFwLT5hdHRyaWJ1dGVJdGVtKGwpOwotCQkJY2hhbmdlZCA9
ICFibWFwLT5nZXRBdHRyaWJ1dGVJdGVtKGl0LT5pZCgpKTsKLQkJCWJtYXAtPmluc2VydEF0dHJp
YnV0ZShpdC0+Y2xvbmUoZmFsc2UpKTsKLQkJICAgIH0KLQkJICAgIGlmICggY2hhbmdlZCApCi0J
CQlkb2MoKS0+cmVjYWxjU3R5bGUoIE5vZGVJbXBsOjpJbmhlcml0ICk7Ci0JCX0KKyAgICAgICAg
ICAgICAgICBpZiAoZG9jKCktPmZpcnN0Q2hpbGQoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omh0
bWwoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gd2UgaGF2ZSBhbm90aGVyIDxIVE1MPiBl
bGVtZW50Li4uLiBhcHBseSBhdHRyaWJ1dGVzIHRvIGV4aXN0aW5nIG9uZQorICAgICAgICAgICAg
ICAgICAgICAvLyBtYWtlIHN1cmUgd2UgZG9uJ3Qgb3ZlcndyaXRlIGFscmVhZHkgZXhpc3Rpbmcg
YXR0cmlidXRlcworICAgICAgICAgICAgICAgICAgICBOYW1lZEF0dHJNYXBJbXBsICptYXAgPSBz
dGF0aWNfY2FzdDxFbGVtZW50SW1wbCo+KG4pLT5hdHRyaWJ1dGVzKHRydWUpOworICAgICAgICAg
ICAgICAgICAgICBOYW1lZEF0dHJNYXBJbXBsICpibWFwID0gc3RhdGljX2Nhc3Q8RWxlbWVudElt
cGwqPihkb2MoKS0+Zmlyc3RDaGlsZCgpKS0+YXR0cmlidXRlcyhmYWxzZSk7CisgICAgICAgICAg
ICAgICAgICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGxvbmcgbCA9IDA7IG1hcCAmJiBsIDwgbWFwLT5sZW5ndGgoKTsgKytsKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBBdHRyaWJ1dGVJbXBsKiBpdCA9IG1hcC0+YXR0cmlidXRl
SXRlbShsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSAhYm1hcC0+Z2V0QXR0
cmlidXRlSXRlbShpdC0+aWQoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBibWFwLT5pbnNl
cnRBdHRyaWJ1dGUoaXQtPmNsb25lKGZhbHNlKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgaWYgKGNoYW5nZWQpCisgICAgICAgICAgICAgICAgICAgICAgICBk
b2MoKS0+cmVjYWxjU3R5bGUoTm9kZUltcGw6OkluaGVyaXQpOworICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0JICAgIH0KLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIElEX1RJVExFOgotICAgICAgICBjYXNlIElEX1NUWUxFOgotICAgICAg
ICAgICAgaWYgKCAhaGVhZCApCisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoaC0+
aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dGl0bGUoKSkgfHwgaC0+aGFzTG9jYWxOYW1lKEhUTUxO
YW1lczo6c3R5bGUoKSkpIHsKKyAgICAgICAgICAgIGlmICghaGVhZCkKICAgICAgICAgICAgICAg
ICBjcmVhdGVIZWFkKCk7Ci0gICAgICAgICAgICBpZiAoIGhlYWQgKSB7CisgICAgICAgICAgICBp
ZiAoaGVhZCkgewogICAgICAgICAgICAgICAgIERPTTo6Tm9kZUltcGwgKm5ld05vZGUgPSBoZWFk
LT5hZGRDaGlsZChuKTsKLSAgICAgICAgICAgICAgICBpZiAoIG5ld05vZGUgKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHB1c2hCbG9jayhpZCwgdGFnUHJpb3JpdHkoaWQpKTsKKyAgICAgICAgICAg
ICAgICBpZiAobmV3Tm9kZSkgeworICAgICAgICAgICAgICAgICAgICBwdXNoQmxvY2sobG9jYWxO
YW1lLCB0YWdQcmlvcml0eSk7CiAgICAgICAgICAgICAgICAgICAgIHNldEN1cnJlbnQobmV3Tm9k
ZSk7Ci0jaWYgU1BFRURfREVCVUcgPCAyCi0JCSAgICBpZighbi0+YXR0YWNoZWQoKSAmJiBIVE1M
V2lkZ2V0KQorICAgICAgICAgICAgICAgICAgICBpZiAoIW4tPmF0dGFjaGVkKCkgJiYgSFRNTFdp
ZGdldCkKICAgICAgICAgICAgICAgICAgICAgICAgIG4tPmF0dGFjaCgpOwotI2VuZGlmCiAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKLSNpZmRlZiBQQVJTRVJfREVCVUcKLSAgICAgICAgICAgICAg
ICAgICAga2REZWJ1ZyggNjAzNSApIDw8ICJhZGRpbmcgc3R5bGUgYmVmb3JlIHRvIGJvZHkgZmFp
bGVkISEhISIgPDwgZW5kbDsKLSNlbmRpZgotICAgICAgICAgICAgICAgICAgICBkaXNjYXJkX3Vu
dGlsID0gSURfU1RZTEUgKyBJRF9DTE9TRV9UQUc7CisgICAgICAgICAgICAgICAgICAgIHNldFNr
aXBNb2RlKEhUTUxOYW1lczo6c3R5bGUoKSk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgICAgICB9IGVsc2UgaWYoaW5Cb2R5KSB7Ci0gICAgICAgICAgICAgICAgZGlzY2FyZF91
bnRpbCA9IElEX1NUWUxFICsgSURfQ0xPU0VfVEFHOworICAgICAgICAgICAgICAgIHNldFNraXBN
b2RlKEhUTUxOYW1lczo6c3R5bGUoKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAvLyBTQ1JJUFQg
YW5kIE9CSkVDVCBhcmUgYWxsb3dlZCBpbiB0aGUgYm9keS4KLSAgICAgICAgY2FzZSBJRF9CT0RZ
OgotICAgICAgICAgICAgaWYoaW5Cb2R5ICYmIGRvYygpLT5ib2R5KCkpIHsKKyAgICAgICAgfSBl
bHNlIGlmIChoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpib2R5KCkpKSB7CisgICAgICAgICAg
ICBpZiAoaW5Cb2R5ICYmIGRvYygpLT5ib2R5KCkpIHsKICAgICAgICAgICAgICAgICAvLyB3ZSBo
YXZlIGFub3RoZXIgPEJPRFk+IGVsZW1lbnQuLi4uIGFwcGx5IGF0dHJpYnV0ZXMgdG8gZXhpc3Rp
bmcgb25lCiAgICAgICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHdlIGRvbid0IG92ZXJ3cml0ZSBh
bHJlYWR5IGV4aXN0aW5nIGF0dHJpYnV0ZXMKICAgICAgICAgICAgICAgICAvLyBzb21lIHNpdGVz
IHVzZSA8Ym9keSBiZ2NvbG9yPXJpZ2h0Y29sb3I+Li4uPGJvZHkgYmdjb2xvcj13cm9uZ2NvbG9y
PgpAQCAtNDQ5LDM2MCArMzgzLDI1OCBAQCBib29sIEtIVE1MUGFyc2VyOjppbnNlcnROb2RlKE5v
ZGVJbXBsICpuCiAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSAhYm1hcC0+Z2V0QXR0cmli
dXRlSXRlbShpdC0+aWQoKSk7CiAgICAgICAgICAgICAgICAgICAgIGJtYXAtPmluc2VydEF0dHJp
YnV0ZShpdC0+Y2xvbmUoZmFsc2UpKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgaWYgKCBjaGFuZ2VkICkKLSAgICAgICAgICAgICAgICAgICAgZG9jKCktPnJlY2FsY1N0eWxl
KCBOb2RlSW1wbDo6SW5oZXJpdCApOwotICAgICAgICAgICAgfSBlbHNlIGlmICggY3VycmVudC0+
aXNEb2N1bWVudE5vZGUoKSApCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgLy8gdGhlIGZv
bGxvd2luZyBpcyBhIGhhY2sgdG8gbW92ZSBub24gcmVuZGVyZWQgZWxlbWVudHMKLSAgICAgICAg
ICAgIC8vIG91dHNpZGUgb2YgdGFibGVzLgotICAgICAgICAgICAgLy8gbmVlZGVkIGZvciBicm9r
ZW4gY29uc3RydWN0cyBsaWtlIDx0YWJsZT48Zm9ybSAuLi4+PHRyPi4uLi4KLSAgICAgICAgY2Fz
ZSBJRF9JTlBVVDoKLSAgICAgICAgewotICAgICAgICAgICAgRWxlbWVudEltcGwgKmUgPSBzdGF0
aWNfY2FzdDxFbGVtZW50SW1wbCAqPihuKTsKLSAgICAgICAgICAgIERPTVN0cmluZyB0eXBlID0g
ZS0+Z2V0QXR0cmlidXRlKEFUVFJfVFlQRSk7Ci0KLSAgICAgICAgICAgIGlmICggc3RyY2FzZWNt
cCggdHlwZSwgImhpZGRlbiIgKSA9PSAwICYmIGZvcm0pIHsKKyAgICAgICAgICAgICAgICBpZiAo
Y2hhbmdlZCkKKyAgICAgICAgICAgICAgICAgICAgZG9jKCktPnJlY2FsY1N0eWxlKE5vZGVJbXBs
OjpJbmhlcml0KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBlbHNlIGlmICghY3VycmVudC0+aXNEb2N1bWVudE5vZGUoKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0gZWxzZSBpZiAoaC0+aGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6aW5wdXQoKSkpIHsKKyAgICAgICAgICAgIERPTVN0cmluZyB0eXBlID0g
aC0+Z2V0QXR0cmlidXRlKEFUVFJfVFlQRSk7CisgICAgICAgICAgICBpZiAoc3RyY2FzZWNtcCh0
eXBlLCAiaGlkZGVuIikgPT0gMCAmJiBmb3JtKSB7CiAgICAgICAgICAgICAgICAgZm9ybS0+YWRk
Q2hpbGQobik7Ci0jaWYgU1BFRURfREVCVUcgPCAyCi0gICAgICAgICAgICAgICAgaWYoIW4tPmF0
dGFjaGVkKCkgJiYgSFRNTFdpZGdldCkKKyAgICAgICAgICAgICAgICBpZiAoIW4tPmF0dGFjaGVk
KCkgJiYgSFRNTFdpZGdldCkKICAgICAgICAgICAgICAgICAgICAgbi0+YXR0YWNoKCk7Ci0jZW5k
aWYKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgSURfVEVYVDoKLSAgICAgICAgICAg
IC8vIGlnbm9yZSB0ZXh0IGluc2lkZSB0aGUgZm9sbG93aW5nIGVsZW1lbnRzLgotICAgICAgICAg
ICAgc3dpdGNoKGN1cnJlbnQtPmlkKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICBjYXNl
IElEX1NFTEVDVDoKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgICAgIDsKLSAgICAgICAgICAgICAgICAvLyBmYWxsIHRocm91
Z2ghIQotICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElE
X0REOgotICAgICAgICBjYXNlIElEX0RUOgorICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2Fs
TmFtZShIVE1MTmFtZXM6OmRkKCkpIHx8IGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmR0KCkp
KSB7CiAgICAgICAgICAgICBlID0gbmV3IEhUTUxETGlzdEVsZW1lbnRJbXBsKGRvY3VtZW50KTsK
LSAgICAgICAgICAgIGlmICggaW5zZXJ0Tm9kZShlKSApIHsKKyAgICAgICAgICAgIGlmIChpbnNl
cnROb2RlKGUpKSB7CiAgICAgICAgICAgICAgICAgaW5zZXJ0Tm9kZShuKTsKICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIElEX0FSRUE6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmKG1hcCkKLSAgICAg
ICAgICAgIHsKKyAgICAgICAgfSBlbHNlIGlmIChoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjph
cmVhKCkpKSB7CisgICAgICAgICAgICBpZiAobWFwKSB7CiAgICAgICAgICAgICAgICAgbWFwLT5h
ZGRDaGlsZChuKTsKLSNpZiBTUEVFRF9ERUJVRyA8IDIKLSAgICAgICAgICAgICAgICBpZighbi0+
YXR0YWNoZWQoKSAmJiBIVE1MV2lkZ2V0KQorICAgICAgICAgICAgICAgIGlmICghbi0+YXR0YWNo
ZWQoKSAmJiBIVE1MV2lkZ2V0KQogICAgICAgICAgICAgICAgICAgICBuLT5hdHRhY2goKTsKLSNl
bmRpZgogICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgSURfQ0FQVElPTjogewotICAg
ICAgICAgICAgc3dpdGNoIChjdXJyZW50LT5pZCgpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBJ
RF9USEVBRDoKLSAgICAgICAgICAgICAgICBjYXNlIElEX1RCT0RZOgotICAgICAgICAgICAgICAg
IGNhc2UgSURfVEZPT1Q6Ci0gICAgICAgICAgICAgICAgY2FzZSBJRF9UUjoKLSAgICAgICAgICAg
ICAgICBjYXNlIElEX1RIOgotICAgICAgICAgICAgICAgIGNhc2UgSURfVEQ6IHsKLSAgICAgICAg
ICAgICAgICAgICAgTm9kZUltcGwqIHRzZWN0aW9uID0gY3VycmVudDsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKGN1cnJlbnQtPmlkKCkgPT0gSURfVFIpCi0gICAgICAgICAgICAgICAgICAgICAg
ICB0c2VjdGlvbiA9IGN1cnJlbnQtPnBhcmVudCgpOwotICAgICAgICAgICAgICAgICAgICBlbHNl
IGlmIChjdXJyZW50LT5pZCgpID09IElEX1REIHx8IGN1cnJlbnQtPmlkKCkgPT0gSURfVEgpCi0g
ICAgICAgICAgICAgICAgICAgICAgICB0c2VjdGlvbiA9IGN1cnJlbnQtPnBhcmVudCgpLT5wYXJl
bnQoKTsKLSAgICAgICAgICAgICAgICAgICAgTm9kZUltcGwqIHRhYmxlID0gdHNlY3Rpb24tPnBh
cmVudCgpOwotICAgICAgICAgICAgICAgICAgICBpbnQgZXhjZXB0aW9uY29kZSA9IDA7Ci0gICAg
ICAgICAgICAgICAgICAgIHRhYmxlLT5pbnNlcnRCZWZvcmUobiwgdHNlY3Rpb24sIGV4Y2VwdGlv
bmNvZGUpOwotICAgICAgICAgICAgICAgICAgICBwdXNoQmxvY2soaWQsIHRhZ1ByaW9yaXR5KGlk
KSk7Ci0gICAgICAgICAgICAgICAgICAgIHNldEN1cnJlbnQobik7Ci0gICAgICAgICAgICAgICAg
ICAgIGluU3RyYXlUYWJsZUNvbnRlbnQrKzsKLSAgICAgICAgICAgICAgICAgICAgYmxvY2tTdGFj
ay0+c3RyYXlUYWJsZUNvbnRlbnQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0gZWxzZSBpZiAoaC0+aGFzTG9jYWxOYW1l
KEhUTUxOYW1lczo6Y2FwdGlvbigpKSkgeworICAgICAgICAgICAgaWYgKGlzVGFibGVQYXJ0KGN1
cnJlbnQpKSB7CisgICAgICAgICAgICAgICAgTm9kZUltcGwqIHRzZWN0aW9uID0gY3VycmVudDsK
KyAgICAgICAgICAgICAgICBpZiAoY3VycmVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRyKCkp
KQorICAgICAgICAgICAgICAgICAgICB0c2VjdGlvbiA9IGN1cnJlbnQtPnBhcmVudCgpOworICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKGN1cnJlbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0ZCgp
KSB8fCBjdXJyZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGgoKSkpCisgICAgICAgICAgICAg
ICAgICAgIHRzZWN0aW9uID0gY3VycmVudC0+cGFyZW50KCktPnBhcmVudCgpOworICAgICAgICAg
ICAgICAgIE5vZGVJbXBsKiB0YWJsZSA9IHRzZWN0aW9uLT5wYXJlbnQoKTsKKyAgICAgICAgICAg
ICAgICBpbnQgZXhjZXB0aW9uY29kZSA9IDA7CisgICAgICAgICAgICAgICAgdGFibGUtPmluc2Vy
dEJlZm9yZShuLCB0c2VjdGlvbiwgZXhjZXB0aW9uY29kZSk7CisgICAgICAgICAgICAgICAgcHVz
aEJsb2NrKGxvY2FsTmFtZSwgdGFnUHJpb3JpdHkpOworICAgICAgICAgICAgICAgIHNldEN1cnJl
bnQobik7CisgICAgICAgICAgICAgICAgaW5TdHJheVRhYmxlQ29udGVudCsrOworICAgICAgICAg
ICAgICAgIGJsb2NrU3RhY2stPnN0cmF5VGFibGVDb250ZW50ID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIGNhc2UgSURfVEhFQUQ6Ci0gICAgICAgIGNhc2UgSURfVEJPRFk6Ci0g
ICAgICAgIGNhc2UgSURfVEZPT1Q6Ci0gICAgICAgIGNhc2UgSURfQ09MR1JPVVA6IHsKLSAgICAg
ICAgICAgIGlmIChpc1RhYmxlUmVsYXRlZFRhZyhjdXJyZW50LT5pZCgpKSkgewotICAgICAgICAg
ICAgICAgIHdoaWxlIChibG9ja1N0YWNrICYmIGN1cnJlbnQtPmlkKCkgIT0gSURfVEFCTEUgJiYg
aXNUYWJsZVJlbGF0ZWRUYWcoY3VycmVudC0+aWQoKSkpCisgICAgICAgIH0gZWxzZSBpZiAoaC0+
aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dGhlYWQoKSkgfHwgaC0+aGFzTG9jYWxOYW1lKEhUTUxO
YW1lczo6dGJvZHkoKSkgfHwKKyAgICAgICAgICAgICAgICAgICBoLT5oYXNMb2NhbE5hbWUoSFRN
TE5hbWVzOjp0Zm9vdCgpKSB8fCBoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpjb2xncm91cCgp
KSkgeworICAgICAgICAgICAgaWYgKGlzVGFibGVSZWxhdGVkKGN1cnJlbnQpKSB7CisgICAgICAg
ICAgICAgICAgd2hpbGUgKGJsb2NrU3RhY2sgJiYgaXNUYWJsZVBhcnQoY3VycmVudCkpCiAgICAg
ICAgICAgICAgICAgICAgIHBvcE9uZUJsb2NrKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGlu
c2VydE5vZGUobik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gc3dpdGNoIG9uIHRo
ZSBjdXJyZW50bHkgYWN0aXZlIGVsZW1lbnQKLSAgICAgICAgc3dpdGNoKGN1cnJlbnQtPmlkKCkp
Ci0gICAgICAgIHsKLSAgICAgICAgY2FzZSBJRF9IVE1MOgotICAgICAgICAgICAgc3dpdGNoKGlk
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgY2FzZSBJRF9TQ1JJUFQ6Ci0gICAgICAgICAg
ICBjYXNlIElEX1NUWUxFOgotICAgICAgICAgICAgY2FzZSBJRF9NRVRBOgotICAgICAgICAgICAg
Y2FzZSBJRF9MSU5LOgotICAgICAgICAgICAgY2FzZSBJRF9PQkpFQ1Q6Ci0gICAgICAgICAgICBj
YXNlIElEX0VNQkVEOgotICAgICAgICAgICAgY2FzZSBJRF9USVRMRToKLSAgICAgICAgICAgIGNh
c2UgSURfSVNJTkRFWDoKLSAgICAgICAgICAgIGNhc2UgSURfQkFTRToKLSAgICAgICAgICAgICAg
ICBpZighaGVhZCkgeworICAgIH0KKyAgICAKKyAgICAvLyAyLiBOZXh0IHdlIGV4YW1pbmUgb3Vy
IGN1cnJlbnRseSBhY3RpdmUgZWxlbWVudCB0byBkbyBzb21lIGZ1cnRoZXIgZXJyb3IgaGFuZGxp
bmcuCisgICAgaWYgKGN1cnJlbnQtPmlzSFRNTEVsZW1lbnQoKSkgeworICAgICAgICBIVE1MRWxl
bWVudEltcGwqIGggPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwqPihjdXJyZW50KTsKKyAg
ICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBjdXJyZW50VGFnTmFtZSA9IGN1cnJlbnQtPmxvY2Fs
TmFtZSgpOworICAgICAgICBpZiAoaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6aHRtbCgpKSkg
eworICAgICAgICAgICAgSFRNTEVsZW1lbnRJbXBsKiBlbHQgPSBuLT5pc0hUTUxFbGVtZW50KCkg
PyBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwqPihuKSA6IDA7CisgICAgICAgICAgICBpZiAo
ZWx0ICYmIGVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6c2NyaXB0KCkpIHx8IGVsdC0+aGFz
TG9jYWxOYW1lKEhUTUxOYW1lczo6c3R5bGUoKSkgfHwKKyAgICAgICAgICAgICAgICBlbHQtPmhh
c0xvY2FsTmFtZShIVE1MTmFtZXM6Om1ldGEoKSkgfHwgZWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5h
bWVzOjpsaW5rKCkpIHx8CisgICAgICAgICAgICAgICAgZWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5h
bWVzOjpvYmplY3QoKSkgfHwgZWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjplbWJlZCgpKSB8
fAorICAgICAgICAgICAgICAgIGVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dGl0bGUoKSkg
fHwgZWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjppc2luZGV4KCkpIHx8CisgICAgICAgICAg
ICAgICAgZWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpiYXNlKCkpKSB7CisgICAgICAgICAg
ICAgICAgaWYgKCFoZWFkKSB7CiAgICAgICAgICAgICAgICAgICAgIGhlYWQgPSBuZXcgSFRNTEhl
YWRFbGVtZW50SW1wbChkb2N1bWVudCk7CiAgICAgICAgICAgICAgICAgICAgIGUgPSBoZWFkOwog
ICAgICAgICAgICAgICAgICAgICBpbnNlcnROb2RlKGUpOwogICAgICAgICAgICAgICAgICAgICBo
YW5kbGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBjYXNlIElEX1RFWFQ6IHsKLSAgICAgICAgICAgICAgICBUZXh0SW1wbCAq
dCA9IHN0YXRpY19jYXN0PFRleHRJbXBsICo+KG4pOwotICAgICAgICAgICAgICAgIGlmICh0LT5j
b250YWluc09ubHlXaGl0ZXNwYWNlKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICAgICAgICAvKiBGYWxsIHRocm91Z2ggdG8gZGVmYXVsdCAqLwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBpZiAoIGhhdmVG
cmFtZVNldCApIGJyZWFrOwotICAgICAgICAgICAgICAgIGUgPSBuZXcgSFRNTEJvZHlFbGVtZW50
SW1wbChkb2N1bWVudCk7Ci0gICAgICAgICAgICAgICAgc3RhcnRCb2R5KCk7Ci0gICAgICAgICAg
ICAgICAgaW5zZXJ0Tm9kZShlKTsKLSAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgaWYgKG4tPmlzVGV4dE5vZGUoKSkgeworICAgICAgICAgICAgICAgICAgICBUZXh0SW1wbCAq
dCA9IHN0YXRpY19jYXN0PFRleHRJbXBsICo+KG4pOworICAgICAgICAgICAgICAgICAgICBpZiAo
dC0+Y29udGFpbnNPbmx5V2hpdGVzcGFjZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICBpZiAoIWhhdmVGcmFtZVNldCkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgZSA9IG5ldyBIVE1MQm9keUVsZW1lbnRJbXBsKGRvY3VtZW50
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0Qm9keSgpOworICAgICAgICAgICAgICAg
ICAgICAgICAgaW5zZXJ0Tm9kZShlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZWQg
PSB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSURfSEVBRDoKLSAgICAg
ICAgICAgIC8vIHdlIGNhbiBnZXQgaGVyZSBvbmx5IGlmIHRoZSBlbGVtZW50IGlzIG5vdCBhbGxv
d2VkIGluIGhlYWQuCi0gICAgICAgICAgICBpZiAoaWQgPT0gSURfSFRNTCkKKyAgICAgICAgfSBl
bHNlIGlmIChoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpoZWFkKCkpKSB7CisgICAgICAgICAg
ICBpZiAobi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omh0bWwoKSkpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gVGhp
cyBtZWFucyB0aGUgYm9keSBzdGFydHMgaGVyZS4uLgotICAgICAgICAgICAgICAgIGlmICggaGF2
ZUZyYW1lU2V0ICkgYnJlYWs7Ci0gICAgICAgICAgICAgICAgcG9wQmxvY2soSURfSEVBRCk7Ci0g
ICAgICAgICAgICAgICAgZSA9IG5ldyBIVE1MQm9keUVsZW1lbnRJbXBsKGRvY3VtZW50KTsKLSAg
ICAgICAgICAgICAgICBzdGFydEJvZHkoKTsKLSAgICAgICAgICAgICAgICBpbnNlcnROb2RlKGUp
OwotICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIGlmICgh
aGF2ZUZyYW1lU2V0KSB7CisgICAgICAgICAgICAgICAgICAgIHBvcEJsb2NrKGN1cnJlbnRUYWdO
YW1lKTsKKyAgICAgICAgICAgICAgICAgICAgZSA9IG5ldyBIVE1MQm9keUVsZW1lbnRJbXBsKGRv
Y3VtZW50KTsKKyAgICAgICAgICAgICAgICAgICAgc3RhcnRCb2R5KCk7CisgICAgICAgICAgICAg
ICAgICAgIGluc2VydE5vZGUoZSk7CisgICAgICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVl
OworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIElEX0JPRFk6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJ
RF9DQVBUSU9OOgorICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6
OmNhcHRpb24oKSkpIHsKICAgICAgICAgICAgIC8vIElsbGVnYWwgY29udGVudCBpbiBhIGNhcHRp
b24uIENsb3NlIHRoZSBjYXB0aW9uIGFuZCB0cnkgYWdhaW4uCi0gICAgICAgICAgICBwb3BCbG9j
ayhJRF9DQVBUSU9OKTsKLSAgICAgICAgICAgIHN3aXRjaCggaWQgKSB7Ci0gICAgICAgICAgICBj
YXNlIElEX1RIRUFEOgotICAgICAgICAgICAgY2FzZSBJRF9URk9PVDoKLSAgICAgICAgICAgIGNh
c2UgSURfVEJPRFk6Ci0gICAgICAgICAgICBjYXNlIElEX1RSOgotICAgICAgICAgICAgY2FzZSBJ
RF9URDoKLSAgICAgICAgICAgIGNhc2UgSURfVEg6CisgICAgICAgICAgICBwb3BCbG9jayhjdXJy
ZW50VGFnTmFtZSk7CisgICAgICAgICAgICBpZiAoaXNUYWJsZVBhcnQobikpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGluc2VydE5vZGUobiwgZmxhdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJRF9UQUJMRToKLSAgICAgICAgY2FzZSBJRF9USEVB
RDoKLSAgICAgICAgY2FzZSBJRF9URk9PVDoKLSAgICAgICAgY2FzZSBJRF9UQk9EWToKLSAgICAg
ICAgY2FzZSBJRF9UUjoKLSAgICAgICAgICAgIHN3aXRjaChpZCkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgIGNhc2UgSURfVEFCTEU6Ci0gICAgICAgICAgICAgICAgcG9wQmxvY2soSURfVEFC
TEUpOyAvLyBlbmQgdGhlIHRhYmxlCisgICAgICAgIH0gZWxzZSBpZiAoaC0+aGFzTG9jYWxOYW1l
KEhUTUxOYW1lczo6dGFibGUoKSkgfHwgaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dHIoKSkg
fHwgaXNUYWJsZVNlY3Rpb24oaCkpIHsKKyAgICAgICAgICAgIGlmIChuLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6dGFibGUoKSkpIHsKKyAgICAgICAgICAgICAgICBwb3BCbG9jayhsb2NhbE5hbWUp
OyAvLyBlbmQgdGhlIHRhYmxlCiAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7ICAgICAg
Ly8gLi4uYW5kIHN0YXJ0IGEgbmV3IG9uZQotICAgICAgICAgICAgICAgIGJyZWFrOwotCSAgICBj
YXNlIElEX1RFWFQ6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgVGV4dEltcGwgKnQg
PSBzdGF0aWNfY2FzdDxUZXh0SW1wbCAqPihuKTsKLSAgICAgICAgICAgICAgICBpZiAodC0+Y29u
dGFpbnNPbmx5V2hpdGVzcGFjZSgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgICAgICAgICAgRE9NU3RyaW5nSW1wbCAqaSA9IHQtPnN0cmluZygpOwotICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGludCBwb3MgPSAwOwotICAgICAgICAgICAgICAgIHdoaWxlKHBv
cyA8IGktPmwgJiYgKCAqKGktPnMrcG9zKSA9PSBRQ2hhcignICcpIHx8Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICooaS0+cytwb3MpID09IFFDaGFyKDB4YTApKSkgcG9z
Kys7Ci0gICAgICAgICAgICAgICAgaWYocG9zID09IGktPmwpCi0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBOb2RlSW1wbCAqbm9kZSA9IGN1cnJlbnQ7Ci0gICAgICAgICAg
ICAgICAgTm9kZUltcGwgKnBhcmVudCA9IG5vZGUtPnBhcmVudE5vZGUoKTsKLQotICAgICAgICAg
ICAgICAgIE5vZGVJbXBsICpwYXJlbnRwYXJlbnQgPSBwYXJlbnQtPnBhcmVudE5vZGUoKTsKLQot
ICAgICAgICAgICAgICAgIGlmIChuLT5pc1RleHROb2RlKCkgfHwKLSAgICAgICAgICAgICAgICAg
ICAgKCBub2RlLT5pZCgpID09IElEX1RSICYmCi0gICAgICAgICAgICAgICAgICAgICAoIHBhcmVu
dC0+aWQoKSA9PSBJRF9USEVBRCB8fAotICAgICAgICAgICAgICAgICAgICAgIHBhcmVudC0+aWQo
KSA9PSBJRF9UQk9EWSB8fAotICAgICAgICAgICAgICAgICAgICAgIHBhcmVudC0+aWQoKSA9PSBJ
RF9URk9PVCApICYmIHBhcmVudHBhcmVudC0+aWQoKSA9PSBJRF9UQUJMRSApIHx8Ci0gICAgICAg
ICAgICAgICAgICAgICggIWNoZWNrQ2hpbGQoSURfVFIsIGlkLCAhZG9jKCktPmluQ29tcGF0TW9k
ZSgpKSAmJiAoIG5vZGUtPmlkKCkgPT0gSURfVEhFQUQgfHwgbm9kZS0+aWQoKSA9PSBJRF9UQk9E
WSB8fCBub2RlLT5pZCgpID09IElEX1RGT09UICkgJiYKLSAgICAgICAgICAgICAgICAgICAgIHBh
cmVudC0+aWQoKSA9PSBJRF9UQUJMRSApKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgbm9kZSA9IChub2RlLT5pZCgpID09IElEX1RBQkxFKSA/IG5vZGUgOgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICgobm9kZS0+aWQoKSA9PSBJRF9UUikgPyBwYXJlbnRwYXJl
bnQgOiBwYXJlbnQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICAgICAgYm9vbCBwb3NzaWJseU1vdmVTdHJheUNvbnRlbnQgPSB0cnVlOworICAgICAgICAg
ICAgICAgIGludCBleGNlcHRpb25Db2RlID0gMDsKKyAgICAgICAgICAgICAgICBpZiAobi0+aXNU
ZXh0Tm9kZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIFRleHRJbXBsICp0ID0gc3RhdGljX2Nh
c3Q8VGV4dEltcGwgKj4obik7CisgICAgICAgICAgICAgICAgICAgIGlmICh0LT5jb250YWluc09u
bHlXaGl0ZXNwYWNlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICAgICAgICAgIERPTVN0cmluZ0ltcGwgKmkgPSB0LT5zdHJpbmcoKTsKKyAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHBvcyA9IDA7CisgICAgICAgICAgICAgICAgICAg
IHdoaWxlIChwb3MgPCBpLT5sICYmICgqKGktPnMrcG9zKSA9PSBRQ2hhcignICcpIHx8CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKGktPnMrcG9zKSA9PSBRQ2hh
cigweGEwKSkpIHBvcysrOworICAgICAgICAgICAgICAgICAgICBpZiAocG9zID09IGktPmwpCisg
ICAgICAgICAgICAgICAgICAgICAgICBwb3NzaWJseU1vdmVTdHJheUNvbnRlbnQgPSBmYWxzZTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHBvc3NpYmx5TW92ZVN0cmF5
Q29udGVudCkgeworICAgICAgICAgICAgICAgICAgICBOb2RlSW1wbCAqbm9kZSA9IGN1cnJlbnQ7
CiAgICAgICAgICAgICAgICAgICAgIE5vZGVJbXBsICpwYXJlbnQgPSBub2RlLT5wYXJlbnROb2Rl
KCk7Ci0gICAgICAgICAgICAgICAgICAgIGludCBleGNlcHRpb25jb2RlID0gMDsKLSAgICAgICAg
ICAgICAgICAgICAgcGFyZW50LT5pbnNlcnRCZWZvcmUoIG4sIG5vZGUsIGV4Y2VwdGlvbmNvZGUg
KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCBleGNlcHRpb25jb2RlICkgewotI2lmZGVmIFBB
UlNFUl9ERUJVRwotICAgICAgICAgICAgICAgICAgICAgICAga2REZWJ1ZyggNjAzNSApIDw8ICJh
ZGRpbmcgY29udGVudCBiZWZvcmUgdGFibGUgZmFpbGVkISIgPDwgZW5kbDsKLSNlbmRpZgotICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIE5vZGVJbXBs
ICpncmFuZHBhcmVudCA9IHBhcmVudC0+cGFyZW50Tm9kZSgpOworCisgICAgICAgICAgICAgICAg
ICAgIGlmIChuLT5pc1RleHROb2RlKCkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgIChoLT5o
YXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0cigpKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAg
IGlzVGFibGVTZWN0aW9uKHBhcmVudCkgJiYgZ3JhbmRwYXJlbnQtPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjp0YWJsZSgpKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogRFRE
IENIRUNLIHdpdGggbm8gZWxlbWVudCEKKyAgICAgICAgICAgICAgICAgICAgICAgICggLyohY2hl
Y2tDaGlsZChJRF9UUiwgaWQsICFkb2MoKS0+aW5Db21wYXRNb2RlKCkpICYmKi8gaXNUYWJsZVNl
Y3Rpb24obm9kZSkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQtPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjp0YWJsZSgpKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUg
PSAobm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRhYmxlKCkpKSA/IG5vZGUgOgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoKG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0
cigpKSkgPyBncmFuZHBhcmVudCA6IHBhcmVudCk7CisgICAgICAgICAgICAgICAgICAgICAgICBO
b2RlSW1wbCAqcGFyZW50ID0gbm9kZS0+cGFyZW50Tm9kZSgpOworICAgICAgICAgICAgICAgICAg
ICAgICAgcGFyZW50LT5pbnNlcnRCZWZvcmUobiwgbm9kZSwgZXhjZXB0aW9uQ29kZSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIWV4Y2VwdGlvbkNvZGUpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAobi0+aXNIVE1MRWxlbWVudCgpICYmIHRhZ1ByaW9yaXR5ID4gMCAm
JiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWZsYXQgJiYgc3RhdGljX2Nhc3Q8
SFRNTEVsZW1lbnRJbXBsKj4obiktPmVuZFRhZ1JlcXVpcmVtZW50KCkgIT0gRE9NOjpGT1JCSURE
RU4pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwdXNoQmxvY2sobG9jYWxOYW1lLCB0YWdQcmlvcml0eSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNldEN1cnJlbnQobik7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGluU3RyYXlUYWJsZUNvbnRlbnQrKzsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYmxvY2tTdGFjay0+c3RyYXlUYWJsZUNvbnRlbnQgPSB0cnVlOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICBpZiAobi0+aXNFbGVtZW50Tm9kZSgpICYmIHRhZ1ByaW9y
aXR5KGlkKSAhPSAwICYmIAotICAgICAgICAgICAgICAgICAgICAgICAgIWZsYXQgJiYgZW5kVGFn
UmVxdWlyZW1lbnQoaWQpICE9IERPTTo6Rk9SQklEREVOKQotICAgICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBwdXNoQmxvY2soaWQsIHRhZ1ByaW9yaXR5KGlkKSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZXRDdXJyZW50KG4pOwotICAgICAgICAgICAgICAg
ICAgICAgICAgaW5TdHJheVRhYmxlQ29udGVudCsrOwotICAgICAgICAgICAgICAgICAgICAgICAg
YmxvY2tTdGFjay0+c3RyYXlUYWJsZUNvbnRlbnQgPSB0cnVlOworCisgICAgICAgICAgICAgICAg
ICAgIGlmICghZXhjZXB0aW9uQ29kZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1
cnJlbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0cigpKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlID0gbmV3IEhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbChIVE1MTmFtZXM6OnRkKCks
IGRvY3VtZW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGN1cnJlbnQtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjp0YWJsZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlID0gbmV3IEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbChIVE1MTmFtZXM6OnRib2R5KCks
IGRvY3VtZW50LCB0cnVlKTsgLy8gaW1wbGljaXQgCisgICAgICAgICAgICAgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZSA9IG5ldyBIVE1MVGFibGVSb3dFbGVt
ZW50SW1wbChkb2N1bWVudCk7CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGluc2VydE5vZGUoZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBoYW5k
bGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoIGN1
cnJlbnQtPmlkKCkgPT0gSURfVFIgKQotICAgICAgICAgICAgICAgICAgICBlID0gbmV3IEhUTUxU
YWJsZUNlbGxFbGVtZW50SW1wbChkb2N1bWVudCwgSURfVEQpOwotICAgICAgICAgICAgICAgIGVs
c2UgaWYgKCBjdXJyZW50LT5pZCgpID09IElEX1RBQkxFICkKLSAgICAgICAgICAgICAgICAgICAg
ZSA9IG5ldyBIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGwoIGRvY3VtZW50LCBJRF9UQk9EWSwg
dHJ1ZSAvKiBpbXBsaWNpdCAqLyApOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICAgICAgZSA9IG5ldyBIVE1MVGFibGVSb3dFbGVtZW50SW1wbCggZG9jdW1lbnQgKTsKLSAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpbnNlcnROb2RlKGUpOwotICAgICAgICAg
ICAgICAgIGhhbmRsZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgfSAvLyBlbmQgZGVmYXVsdAotICAgICAgICAgICAgfSAvLyBlbmQgc3dpdGNoCi0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJRF9PQkpFQ1Q6Ci0gICAgICAgICAgICBkaXNjYXJk
X3VudGlsID0gSURfT0JKRUNUICsgSURfQ0xPU0VfVEFHOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9iamVjdCgp
KSkgeworICAgICAgICAgICAgc2V0U2tpcE1vZGUoSFRNTE5hbWVzOjpvYmplY3QoKSk7CiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGNhc2UgSURfVUw6Ci0gICAgICAgIGNhc2Ug
SURfT0w6Ci0gICAgICAgIGNhc2UgSURfRElSOgotICAgICAgICBjYXNlIElEX01FTlU6CisgICAg
ICAgIH0gZWxzZSBpZiAoaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dWwoKSkgfHwgaC0+aGFz
TG9jYWxOYW1lKEhUTUxOYW1lczo6b2woKSkgfHwKKyAgICAgICAgICAgICAgICAgaC0+aGFzTG9j
YWxOYW1lKEhUTUxOYW1lczo6ZGlyKCkpIHx8IGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om1l
bnUoKSkpIHsKICAgICAgICAgICAgIGUgPSBuZXcgSFRNTERpdkVsZW1lbnRJbXBsKGRvY3VtZW50
KTsKICAgICAgICAgICAgIGluc2VydE5vZGUoZSk7CiAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1
ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBJRF9ETDoKLSAgICAgICAg
ICAgICAgICBwb3BCbG9jayhJRF9ETCk7Ci0gICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIElEX0RUOgotICAgICAg
ICAgICAgICAgIHBvcEJsb2NrKElEX0RUKTsKLSAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1
ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJRF9TRUxFQ1Q6Ci0gICAg
ICAgICAgICBpZiggbi0+aXNJbmxpbmUoKSApCisgICAgICAgIH0gZWxzZSBpZiAoaC0+aGFzTG9j
YWxOYW1lKEhUTUxOYW1lczo6ZGwoKSkgfHwgaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6ZHQo
KSkpIHsKKyAgICAgICAgICAgIHBvcEJsb2NrKGN1cnJlbnRUYWdOYW1lKTsKKyAgICAgICAgICAg
IGhhbmRsZWQgPSB0cnVlOworICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFtZShIVE1M
TmFtZXM6OnNlbGVjdCgpKSkgeworICAgICAgICAgICAgaWYgKGlzSW5saW5lKG4pKQogICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IElEX1A6Ci0gICAgICAgIGNhc2UgSURfSDE6Ci0gICAgICAgIGNhc2UgSURfSDI6Ci0gICAgICAg
IGNhc2UgSURfSDM6Ci0gICAgICAgIGNhc2UgSURfSDQ6Ci0gICAgICAgIGNhc2UgSURfSDU6Ci0g
ICAgICAgIGNhc2UgSURfSDY6Ci0gICAgICAgICAgICBpZighbi0+aXNJbmxpbmUoKSkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBwb3BCbG9jayhjdXJyZW50LT5pZCgpKTsKKyAgICAg
ICAgfSBlbHNlIGlmIChoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpwKCkpIHx8IGlzSGVhZGVy
VGFnKGN1cnJlbnRUYWdOYW1lKSkgeworICAgICAgICAgICAgaWYgKGlzSW5saW5lKG4pKSB7Cisg
ICAgICAgICAgICAgICAgcG9wQmxvY2soY3VycmVudFRhZ05hbWUpOwogICAgICAgICAgICAgICAg
IGhhbmRsZWQgPSB0cnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgSURfT1BUSU9OOgotICAgICAgICBjYXNlIElEX09QVEdST1VQOgotICAgICAgICAg
ICAgaWYgKGlkID09IElEX09QVEdST1VQKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IHBvcEJsb2NrKGN1cnJlbnQtPmlkKCkpOworICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2Fs
TmFtZShIVE1MTmFtZXM6Om9wdGlvbigpKSB8fCBoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpv
cHRncm91cCgpKSkgeworICAgICAgICAgICAgaWYgKGxvY2FsTmFtZSA9PSBIVE1MTmFtZXM6Om9w
dGdyb3VwKCkpIHsKKyAgICAgICAgICAgICAgICBwb3BCbG9jayhjdXJyZW50VGFnTmFtZSk7CiAg
ICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBlbHNlIGlmKGlkID09IElEX1NFTEVDVCkKLSAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGVs
c2UgaWYgKGxvY2FsTmFtZSA9PSBIVE1MTmFtZXM6OnNlbGVjdCgpKSB7CiAgICAgICAgICAgICAg
ICAgLy8gSUUgdHJlYXRzIGEgbmVzdGVkIHNlbGVjdCBhcyA8L3NlbGVjdD4uIExldCdzIGRvIHRo
ZSBzYW1lCi0gICAgICAgICAgICAgICAgcG9wQmxvY2soIElEX1NFTEVDVCApOwotICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIHBvcEJsb2NrKGxvY2FsTmFtZSk7CiAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIC8vIGhlYWQgZWxlbWVu
dHMgaW4gdGhlIGJvZHkgc2hvdWxkIGJlIGlnbm9yZWQuCi0gICAgICAgIGNhc2UgSURfQUREUkVT
UzoKLSAgICAgICAgICAgIHBvcEJsb2NrKElEX0FERFJFU1MpOworICAgICAgICB9IGVsc2UgaWYg
KGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmFkZHJlc3MoKSkpIHsKKyAgICAgICAgICAgIHBv
cEJsb2NrKGN1cnJlbnRUYWdOYW1lKTsKICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSURfQ09MR1JPVVA6Ci0gICAgICAgICAgICBp
ZiAoaWQgIT0gSURfVEVYVCkgewotICAgICAgICAgICAgICAgIHBvcEJsb2NrKElEX0NPTEdST1VQ
KTsKKyAgICAgICAgfSBlbHNlIGlmIChoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpjb2xncm91
cCgpKSkgeworICAgICAgICAgICAgaWYgKGxvY2FsTmFtZSAhPSB0ZXh0QXRvbSkgeworICAgICAg
ICAgICAgICAgIHBvcEJsb2NrKGN1cnJlbnRUYWdOYW1lKTsKICAgICAgICAgICAgICAgICBoYW5k
bGVkID0gdHJ1ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIElEX0ZPTlQ6Ci0gICAgICAgICAgICBwb3BCbG9jayhJRF9GT05UKTsKKyAgICAgICAgfSBl
bHNlIGlmIChoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpmb250KCkpKSB7CisgICAgICAgICAg
ICBwb3BCbG9jayhjdXJyZW50VGFnTmFtZSk7CiAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgaWYoY3Vy
cmVudC0+aXNEb2N1bWVudE5vZGUoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBp
ZihjdXJyZW50LT5maXJzdENoaWxkKCkgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICBlID0g
bmV3IEhUTUxIdG1sRWxlbWVudEltcGwoZG9jdW1lbnQpOwotICAgICAgICAgICAgICAgICAgICBp
bnNlcnROb2RlKGUpOwotICAgICAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmKGN1cnJlbnQt
PmlzSW5saW5lKCkpCi0gICAgICAgICAgICB7CisgICAgICAgIH0gZWxzZSBpZiAoIWgtPmhhc0xv
Y2FsTmFtZShIVE1MTmFtZXM6OmJvZHkoKSkpIHsKKyAgICAgICAgICAgIGlmIChpc0lubGluZShj
dXJyZW50KSkgewogICAgICAgICAgICAgICAgIHBvcElubGluZUJsb2NrcygpOwogICAgICAgICAg
ICAgICAgIGhhbmRsZWQgPSB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0KLSAgICAg
ICAgLy8gaWYgd2UgY291bGRuJ3QgaGFuZGxlIHRoZSBlcnJvciwganVzdCByZXRocm93IHRoZSBl
eGNlcHRpb24uLi4KLSAgICAgICAgaWYoIWhhbmRsZWQpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IC8va2REZWJ1ZyggNjAzNSApIDw8ICJFeGNlcHRpb24gaGFuZGxlciBmYWlsZWQgaW4gSFRNTFBB
cnNlcjo6aW5zZXJ0Tm9kZSgpIiA8PCBlbmRsOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKyAgICBlbHNlIGlmIChjdXJyZW50LT5pc0RvY3VtZW50Tm9kZSgpKSB7CisgICAgICAg
IGlmIChjdXJyZW50LT5maXJzdENoaWxkKCkgPT0gMCkgeworICAgICAgICAgICAgZSA9IG5ldyBI
VE1MSHRtbEVsZW1lbnRJbXBsKGRvY3VtZW50KTsKKyAgICAgICAgICAgIGluc2VydE5vZGUoZSk7
CisgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKICAgICAgICAgfQotCi0gICAgICAgIHJldHVy
biBpbnNlcnROb2RlKG4pOwogICAgIH0KKworICAgIC8vIDMuIElmIHdlIGNvdWxkbid0IGhhbmRs
ZSB0aGUgZXJyb3IsIGp1c3QgcmV0dXJuIGZhbHNlIGFuZCBhdHRlbXB0IHRvIGVycm9yLWNvcnJl
Y3QgYWdhaW4uCisgICAgaWYgKCFoYW5kbGVkKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
cmV0dXJuIGluc2VydE5vZGUobik7CiB9CiAKLU5vZGVJbXBsICpLSFRNTFBhcnNlcjo6Z2V0RWxl
bWVudChUb2tlbiogdCkKK05vZGVJbXBsICpIVE1MUGFyc2VyOjpnZXROb2RlKFRva2VuKiB0KQog
ewotICAgIHN3aXRjaCAodC0+aWQpCi0gICAgewotICAgIGNhc2UgSURfSEVBRDoKLSAgICAgICAg
aWYgKCFoZWFkICYmIGN1cnJlbnQtPmlkKCkgPT0gSURfSFRNTCkgewotICAgICAgICAgICAgaGVh
ZCA9IG5ldyBIVE1MSGVhZEVsZW1lbnRJbXBsKGRvY3VtZW50KTsKLSAgICAgICAgICAgIHJldHVy
biBoZWFkOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAwOwotICAgIGNhc2UgSURfQk9EWToK
KyAgICAvLyBIYW5kbGUgbm9uLWVsZW1lbnRzIGZpcnN0LgorICAgIGlmICh0LT50YWdOYW1lID09
IHRleHRBdG9tKQorICAgICAgICByZXR1cm4gbmV3IFRleHRJbXBsKGRvY3VtZW50LCB0LT50ZXh0
KTsKKyAgICBpZiAodC0+dGFnTmFtZSA9PSBjb21tZW50QXRvbSkgeworICAgICAgICBpZiAoIWlu
Y2x1ZGVzQ29tbWVudHNJbkRPTSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAg
IC8vIE5vdyBoYW5kbGUgZWxlbWVudHMuCisgICAgaWYgKHQtPnRhZ05hbWUgPT0gSFRNTE5hbWVz
OjpoZWFkKCkpIHsKKyAgICAgICAgaWYgKGhlYWQgfHwgY3VycmVudC0+bG9jYWxOYW1lKCkgIT0g
SFRNTE5hbWVzOjpodG1sKCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9IGVsc2UgaWYg
KHQtPnRhZ05hbWUgPT0gSFRNTE5hbWVzOjpib2R5KCkpIHsKICAgICAgICAgLy8gYm9keSBubyBs
b25nZXIgYWxsb3dlZCBpZiB3ZSBoYXZlIGEgZnJhbWVzZXQKICAgICAgICAgaWYgKGhhdmVGcmFt
ZVNldCkKICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBwb3BCbG9jayhJRF9IRUFEKTsK
KyAgICAgICAgcG9wQmxvY2soSFRNTE5hbWVzOjpoZWFkKCkpOwogICAgICAgICBzdGFydEJvZHko
KTsKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MQm9keUVsZW1lbnRJbXBsKGRvY3VtZW50KTsKKyAg
ICB9CiAKIC8vIGZyYW1lcwotICAgIGNhc2UgSURfRlJBTUVTRVQ6Ci0gICAgICAgIHBvcEJsb2Nr
KElEX0hFQUQpOworICAgIGVsc2UgaWYgKHQtPnRhZ05hbWUgPT0gSFRNTE5hbWVzOjpmcmFtZXNl
dCgpKSB7CisgICAgICAgIHBvcEJsb2NrKEhUTUxOYW1lczo6aGVhZCgpKTsKICAgICAgICAgaWYg
KGluQm9keSAmJiAhaGF2ZUZyYW1lU2V0ICYmICFoYXZlQ29udGVudCkgewotICAgICAgICAgICAg
cG9wQmxvY2soSURfQk9EWSk7CisgICAgICAgICAgICBwb3BCbG9jayhIVE1MTmFtZXM6OmJvZHko
KSk7CiAgICAgICAgICAgICAvLyAjIyMgYWN0dWFsbHkgZm9yIElFIGRvY3VtZW50LmJvZHkgcmV0
dXJucyB0aGUgbm93IGhpZGRlbiAiYm9keSIgZWxlbWVudAogICAgICAgICAgICAgLy8gd2UgY2Fu
J3QgaW1wbGVtZW50IHRoYXQgYmVoYXZpb3VyIG5vdyBiZWNhdXNlIGl0IGNvdWxkIGNhdXNlIHRv
byBtYW55CiAgICAgICAgICAgICAvLyByZWdyZXNzaW9ucyBhbmQgdGhlIGhlYWRhY2hlcyBhcmUg
bm90IHdvcnRoIHRoZSB3b3JrIGFzIGxvbmcgYXMgdGhlcmUgaXMKQEAgLTgxMSwzMiArNjQzLDI3
IEBAIE5vZGVJbXBsICpLSFRNTFBhcnNlcjo6Z2V0RWxlbWVudChUb2tlbioKICAgICAgICAgICAg
ICAgICBkb2MoKS0+Ym9keSgpLT5zZXRBdHRyaWJ1dGUoQVRUUl9TVFlMRSwgImRpc3BsYXk6bm9u
ZSIpOwogICAgICAgICAgICAgaW5Cb2R5ID0gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgaWYg
KChoYXZlQ29udGVudCB8fCBoYXZlRnJhbWVTZXQpICYmIGN1cnJlbnQtPmlkKCkgPT0gSURfSFRN
TCkKKyAgICAgICAgaWYgKChoYXZlQ29udGVudCB8fCBoYXZlRnJhbWVTZXQpICYmIGN1cnJlbnQt
PmxvY2FsTmFtZSgpID09IEhUTUxOYW1lczo6aHRtbCgpKQogICAgICAgICAgICAgcmV0dXJuIDA7
CiAgICAgICAgIGhhdmVGcmFtZVNldCA9IHRydWU7CiAgICAgICAgIHN0YXJ0Qm9keSgpOwotICAg
ICAgICByZXR1cm4gbmV3IEhUTUxGcmFtZVNldEVsZW1lbnRJbXBsKGRvY3VtZW50KTsKLQotICAg
IC8vIGEgYml0IG9mIGEgc3BlY2lhbCBjYXNlLCBzaW5jZSB0aGUgZnJhbWUgaXMgaW5saW5lZAot
ICAgIGNhc2UgSURfSUZSQU1FOgotICAgICAgICBkaXNjYXJkX3VudGlsID0gSURfSUZSQU1FICsg
SURfQ0xPU0VfVEFHOwotICAgICAgICBicmVhazsKLQorICAgIH0gZWxzZSBpZiAodC0+dGFnTmFt
ZSA9PSBIVE1MTmFtZXM6OmlmcmFtZSgpKQorICAgICAgICAvLyBhIGJpdCBvZiBhIHNwZWNpYWwg
Y2FzZSwgc2luY2UgdGhlIGZyYW1lIGlzIGlubGluZWQKKyAgICAgICAgc2V0U2tpcE1vZGUoSFRN
TE5hbWVzOjppZnJhbWUoKSk7CisgICAgICAgIAogLy8gZm9ybSBlbGVtZW50cwotICAgIGNhc2Ug
SURfRk9STToKKyAgICBlbHNlIGlmICh0LT50YWdOYW1lID09IEhUTUxOYW1lczo6Zm9ybSgpKSB7
CiAgICAgICAgIC8vIE9ubHkgY3JlYXRlIGEgbmV3IGZvcm0gaWYgd2UncmUgbm90IGFscmVhZHkg
aW5zaWRlIG9uZS4KICAgICAgICAgLy8gVGhpcyBpcyBjb25zaXN0ZW50IHdpdGggb3RoZXIgYnJv
d3NlcnMnIGJlaGF2aW9yLgogICAgICAgICBpZiAoZm9ybSkKICAgICAgICAgICAgIHJldHVybiAw
OwotICAgICAgICBmb3JtID0gbmV3IEhUTUxGb3JtRWxlbWVudEltcGwoZG9jdW1lbnQpOwotICAg
ICAgICByZXR1cm4gZm9ybTsKLSAgICBjYXNlIElEX0JVVFRPTjoKKyAgICB9IGVsc2UgaWYgKHQt
PnRhZ05hbWUgPT0gSFRNTE5hbWVzOjpidXR0b24oKSkKICAgICAgICAgcmV0dXJuIG5ldyBIVE1M
QnV0dG9uRWxlbWVudEltcGwoZG9jdW1lbnQsIGZvcm0pOwotICAgIGNhc2UgSURfRklFTERTRVQ6
CisgICAgZWxzZSBpZiAodC0+dGFnTmFtZSA9PSBIVE1MTmFtZXM6OmZpZWxkc2V0KCkpCiAgICAg
ICAgIHJldHVybiBuZXcgSFRNTEZpZWxkU2V0RWxlbWVudEltcGwoZG9jdW1lbnQsIGZvcm0pOwot
ICAgIGNhc2UgSURfSU5QVVQ6CisgICAgZWxzZSBpZiAodC0+dGFnTmFtZSA9PSBIVE1MTmFtZXM6
OmlucHV0KCkpCiAgICAgICAgIHJldHVybiBuZXcgSFRNTElucHV0RWxlbWVudEltcGwoZG9jdW1l
bnQsIGZvcm0pOwotICAgIGNhc2UgSURfSVNJTkRFWDogeworICAgIGVsc2UgaWYgKHQtPnRhZ05h
bWUgPT0gSFRNTE5hbWVzOjppc2luZGV4KCkpIHsKICAgICAgICAgTm9kZUltcGwgKm4gPSBoYW5k
bGVJc2luZGV4KHQpOwogICAgICAgICBpZiAoIWluQm9keSkgewogICAgICAgICAgICAgaWYgKGlz
aW5kZXgpCkBAIC04NDgsMjA4ICs2NzUsMTcyIEBAIE5vZGVJbXBsICpLSFRNTFBhcnNlcjo6Z2V0
RWxlbWVudChUb2tlbioKICAgICAgICAgdC0+ZmxhdCA9IHRydWU7CiAgICAgICAgIHJldHVybiBu
OwogICAgIH0KLSAgICBjYXNlIElEX0tFWUdFTjoKKyAgICBlbHNlIGlmICh0LT50YWdOYW1lID09
IEhUTUxOYW1lczo6a2V5Z2VuKCkpCiAgICAgICAgIHJldHVybiBuZXcgSFRNTEtleWdlbkVsZW1l
bnRJbXBsKGRvY3VtZW50LCBmb3JtKTsKLSAgICBjYXNlIElEX0xFR0VORDoKKyAgICBlbHNlIGlm
ICh0LT50YWdOYW1lID09IEhUTUxOYW1lczo6bGVnZW5kKCkpCiAgICAgICAgIHJldHVybiBuZXcg
SFRNTExlZ2VuZEVsZW1lbnRJbXBsKGRvY3VtZW50LCBmb3JtKTsKLSAgICBjYXNlIElEX09QVEdS
T1VQOgorICAgIGVsc2UgaWYgKHQtPnRhZ05hbWUgPT0gSFRNTE5hbWVzOjpvcHRncm91cCgpKQog
ICAgICAgICByZXR1cm4gbmV3IEhUTUxPcHRHcm91cEVsZW1lbnRJbXBsKGRvY3VtZW50LCBmb3Jt
KTsKLSAgICBjYXNlIElEX09QVElPTjoKKyAgICBlbHNlIGlmICh0LT50YWdOYW1lID09IEhUTUxO
YW1lczo6b3B0aW9uKCkpCiAgICAgICAgIHJldHVybiBuZXcgSFRNTE9wdGlvbkVsZW1lbnRJbXBs
KGRvY3VtZW50LCBmb3JtKTsKLSAgICBjYXNlIElEX1NFTEVDVDoKKyAgICBlbHNlIGlmICh0LT50
YWdOYW1lID09IEhUTUxOYW1lczo6c2VsZWN0KCkpIHsKICAgICAgICAgaW5TZWxlY3QgPSB0cnVl
OwogICAgICAgICByZXR1cm4gbmV3IEhUTUxTZWxlY3RFbGVtZW50SW1wbChkb2N1bWVudCwgZm9y
bSk7Ci0gICAgY2FzZSBJRF9URVhUQVJFQToKKyAgICB9CisgICAgZWxzZSBpZiAodC0+dGFnTmFt
ZSA9PSBIVE1MTmFtZXM6OnRleHRhcmVhKCkpCiAgICAgICAgIHJldHVybiBuZXcgSFRNTFRleHRB
cmVhRWxlbWVudEltcGwoZG9jdW1lbnQsIGZvcm0pOwogCiAvLyBsaXN0cwotICAgIGNhc2UgSURf
REQ6Ci0gICAgICAgIHBvcEJsb2NrKElEX0RUKTsKLSAgICAgICAgcG9wQmxvY2soSURfREQpOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIElEX0RUOgotICAgICAgICBwb3BCbG9jayhJRF9ERCk7
Ci0gICAgICAgIHBvcEJsb2NrKElEX0RUKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9M
SToKLSAgICAgICAgcG9wQmxvY2soSURfTEkpOwotICAgICAgICBicmVhazsKLQotLy8gYW5jaG9y
Ci0gICAgY2FzZSBJRF9BOgorICAgIGVsc2UgaWYgKHQtPnRhZ05hbWUgPT0gSFRNTE5hbWVzOjpk
ZCgpKSB7CisgICAgICAgIHBvcEJsb2NrKEhUTUxOYW1lczo6ZHQoKSk7CisgICAgICAgIHBvcEJs
b2NrKEhUTUxOYW1lczo6ZGQoKSk7CisgICAgfQorICAgIGVsc2UgaWYgKHQtPnRhZ05hbWUgPT0g
SFRNTE5hbWVzOjpkdCgpKSB7CisgICAgICAgIHBvcEJsb2NrKEhUTUxOYW1lczo6ZGQoKSk7Cisg
ICAgICAgIHBvcEJsb2NrKEhUTUxOYW1lczo6ZHQoKSk7CisgICAgfQorICAgIGVsc2UgaWYgKHQt
PnRhZ05hbWUgPT0gSFRNTE5hbWVzOjpsaSgpKQorICAgICAgICBwb3BCbG9jayh0LT50YWdOYW1l
KTsKKyAgICBlbHNlIGlmICh0LT50YWdOYW1lID09IEhUTUxOYW1lczo6YSgpKSAvLyBhbmNob3IK
ICAgICAgICAgLy8gTmV2ZXIgYWxsb3cgbmVzdGVkIDxhPnMuCi0gICAgICAgIHBvcEJsb2NrKElE
X0EpOwotICAgICAgICBicmVhazsKLQorICAgICAgICBwb3BCbG9jayh0LT50YWdOYW1lKTsKKyAg
IAogLy8gaW1hZ2VzCi0gICAgY2FzZSBJRF9JTUc6CisgICAgZWxzZSBpZiAodC0+dGFnTmFtZSA9
PSBIVE1MTmFtZXM6OmltZygpKQogICAgICAgICByZXR1cm4gbmV3IEhUTUxJbWFnZUVsZW1lbnRJ
bXBsKGRvY3VtZW50LCBmb3JtKTsKLSAgICBjYXNlIElEX01BUDoKKyAgICBlbHNlIGlmICh0LT50
YWdOYW1lID09IEhUTUxOYW1lczo6bWFwKCkpIHsKICAgICAgICAgbWFwID0gbmV3IEhUTUxNYXBF
bGVtZW50SW1wbChkb2N1bWVudCk7CiAgICAgICAgIHJldHVybiBtYXA7CisgICAgfQogCiAvLyB0
YWJsZXMKLSAgICBjYXNlIElEX1RSOgotICAgICAgICBwb3BCbG9jayhJRF9UUik7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgSURfVEQ6Ci0gICAgY2FzZSBJRF9USDoKLSAgICAgICAgcG9wQmxv
Y2soSURfVEgpOwotICAgICAgICBwb3BCbG9jayhJRF9URCk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgSURfVEJPRFk6Ci0gICAgY2FzZSBJRF9USEVBRDoKLSAgICBjYXNlIElEX1RGT09UOgot
ICAgICAgICBwb3BCbG9jayhJRF9USEVBRCk7Ci0gICAgICAgIHBvcEJsb2NrKElEX1RCT0RZKTsK
LSAgICAgICAgcG9wQmxvY2soSURfVEZPT1QpOwotICAgICAgICBicmVhazsKKyAgICBlbHNlIGlm
ICh0LT50YWdOYW1lID09IEhUTUxOYW1lczo6dHIoKSkKKyAgICAgICAgcG9wQmxvY2sodC0+dGFn
TmFtZSk7CisgICAgZWxzZSBpZiAodC0+dGFnTmFtZSA9PSBIVE1MTmFtZXM6OnRkKCkgfHwgdC0+
dGFnTmFtZSA9PSBIVE1MTmFtZXM6OnRoKCkpIHsKKyAgICAgICAgcG9wQmxvY2soSFRNTE5hbWVz
Ojp0aCgpKTsKKyAgICAgICAgcG9wQmxvY2soSFRNTE5hbWVzOjp0ZCgpKTsKKyAgICB9IGVsc2Ug
aWYgKHQtPnRhZ05hbWUgPT0gSFRNTE5hbWVzOjp0Ym9keSgpIHx8IHQtPnRhZ05hbWUgPT0gSFRN
TE5hbWVzOjp0aGVhZCgpIHx8IHQtPnRhZ05hbWUgPT0gSFRNTE5hbWVzOjp0Zm9vdCgpKSB7Cisg
ICAgICAgIHBvcEJsb2NrKEhUTUxOYW1lczo6dGhlYWQoKSk7CisgICAgICAgIHBvcEJsb2NrKEhU
TUxOYW1lczo6dGJvZHkoKSk7CisgICAgICAgIHBvcEJsb2NrKEhUTUxOYW1lczo6dGZvb3QoKSk7
CisgICAgfQogCiAvLyBlbGVtZW50cyB3aXRoIG5vIHNwZWNpYWwgcmVwcmVzZW50YXRpb24gaW4g
dGhlIERPTQotICAgIGNhc2UgSURfVFQ6Ci0gICAgY2FzZSBJRF9VOgotICAgIGNhc2UgSURfQjoK
LSAgICBjYXNlIElEX0k6Ci0gICAgY2FzZSBJRF9TOgotICAgIGNhc2UgSURfU1RSSUtFOgotICAg
IGNhc2UgSURfQklHOgotICAgIGNhc2UgSURfU01BTEw6Ci0gICAgICAgIGlmICghYWxsb3dOZXN0
ZWRSZWR1bmRhbnRUYWcodC0+aWQpKQorICAgIGVsc2UgaWYgKHQtPnRhZ05hbWUgPT0gSFRNTE5h
bWVzOjp0dCgpIHx8IHQtPnRhZ05hbWUgPT0gSFRNTE5hbWVzOjp1KCkgfHwgdC0+dGFnTmFtZSA9
PSBIVE1MTmFtZXM6OmIoKSB8fAorICAgICAgICAgICAgIHQtPnRhZ05hbWUgPT0gSFRNTE5hbWVz
OjppKCkgfHwgdC0+dGFnTmFtZSA9PSBIVE1MTmFtZXM6OnMoKSB8fCB0LT50YWdOYW1lID09IEhU
TUxOYW1lczo6c3RyaWtlKCkgfHwKKyAgICAgICAgICAgICB0LT50YWdOYW1lID09IEhUTUxOYW1l
czo6YmlnKCkgfHwgdC0+dGFnTmFtZSA9PSBIVE1MTmFtZXM6OnNtYWxsKCkpIHsKKyAgICAgICAg
aWYgKCFhbGxvd05lc3RlZFJlZHVuZGFudFRhZyh0LT50YWdOYW1lKSkKICAgICAgICAgICAgIHJl
dHVybiAwOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgSURfTk9CUjoKLSAgICBjYXNlIElE
X1dCUjoKLSAgICAgICAgcG9wQmxvY2sodC0+aWQpOyAvLyBEb24ndCBhbGxvdyBuZXN0ZWQgPG5v
YnI+IG9yIDx3YnI+Ci0gICAgICAgIGJyZWFrOworICAgIH0KKyAgICBlbHNlIGlmICh0LT50YWdO
YW1lID09IEhUTUxOYW1lczo6bm9icigpIHx8IHQtPnRhZ05hbWUgPT0gSFRNTE5hbWVzOjp3YnIo
KSkKKyAgICAgICAgcG9wQmxvY2sodC0+dGFnTmFtZSk7IC8vIERvbid0IGFsbG93IG5lc3RlZCA8
bm9icj4gb3IgPHdicj4KIAogLy8gdGhlc2UgYXJlIHNwZWNpYWwsIGFuZCBub3JtYWxseSBub3Qg
cmVuZGVyZWQKLSAgICBjYXNlIElEX05PRU1CRUQ6Ci0gICAgICAgIGRpc2NhcmRfdW50aWwgPSBJ
RF9OT0VNQkVEICsgSURfQ0xPU0VfVEFHOworICAgIGVsc2UgaWYgKHQtPnRhZ05hbWUgPT0gSFRN
TE5hbWVzOjpub2VtYmVkKCkpIHsKKyAgICAgICAgc2V0U2tpcE1vZGUoSFRNTE5hbWVzOjpub2Vt
YmVkKCkpOwogICAgICAgICByZXR1cm4gMDsKLSAgICBjYXNlIElEX05PRlJBTUVTOgotICAgICAg
ICBkaXNjYXJkX3VudGlsID0gSURfTk9GUkFNRVMgKyBJRF9DTE9TRV9UQUc7CisgICAgfQorICAg
IGVsc2UgaWYgKHQtPnRhZ05hbWUgPT0gSFRNTE5hbWVzOjpub2ZyYW1lcygpKSB7CisgICAgICAg
IHNldFNraXBNb2RlKEhUTUxOYW1lczo6bm9mcmFtZXMoKSk7CiAgICAgICAgIHJldHVybiAwOwot
ICAgIGNhc2UgSURfTk9TQ1JJUFQ6CisgICAgfQorICAgIGVsc2UgaWYgKHQtPnRhZ05hbWUgPT0g
SFRNTE5hbWVzOjpub3NjcmlwdCgpKSB7CiAgICAgICAgIGlmIChIVE1MV2lkZ2V0ICYmIEhUTUxX
aWRnZXQtPnBhcnQoKS0+alNjcmlwdEVuYWJsZWQoKSkKLSAgICAgICAgICAgIGRpc2NhcmRfdW50
aWwgPSBJRF9OT1NDUklQVCArIElEX0NMT1NFX1RBRzsKKyAgICAgICAgICAgIHNldFNraXBNb2Rl
KEhUTUxOYW1lczo6bm9zY3JpcHQoKSk7CiAgICAgICAgIHJldHVybiAwOwotICAgIGNhc2UgSURf
Tk9MQVlFUjoKLSAgICAgICAgLy9kaXNjYXJkX3VudGlsID0gSURfTk9MQVlFUiArIElEX0NMT1NF
X1RBRzsKKyAgICB9CisgICAgZWxzZSBpZiAodC0+dGFnTmFtZSA9PSBIVE1MTmFtZXM6Om5vbGF5
ZXIoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgY2FzZSBJRF9URVhUOgotICAgICAgICByZXR1
cm4gbmV3IFRleHRJbXBsKGRvY3VtZW50LCB0LT50ZXh0KTsKLSAgICBjYXNlIElEX0NPTU1FTlQ6
Ci0gICAgICAgIGlmICghaW5jbHVkZXNDb21tZW50c0luRE9NKQotICAgICAgICAgICAgcmV0dXJu
IDA7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBJRF9TQ1JJUFQ6Ci0gICAgICAgIHsKLSAg
ICAgICAgICAgIEhUTUxTY3JpcHRFbGVtZW50SW1wbCAqc2NyaXB0RWxlbWVudCA9IG5ldyBIVE1M
U2NyaXB0RWxlbWVudEltcGwoZG9jdW1lbnQpOwotICAgICAgICAgICAgc2NyaXB0RWxlbWVudC0+
c2V0Q3JlYXRlZEJ5UGFyc2VyKHRydWUpOwotICAgICAgICAgICAgcmV0dXJuIHNjcmlwdEVsZW1l
bnQ7Ci0gICAgICAgIH0KKyAgICBlbHNlIGlmICh0LT50YWdOYW1lID09IEhUTUxOYW1lczo6c2Ny
aXB0KCkpIHsKKyAgICAgICAgSFRNTFNjcmlwdEVsZW1lbnRJbXBsICpzY3JpcHRFbGVtZW50ID0g
bmV3IEhUTUxTY3JpcHRFbGVtZW50SW1wbChkb2N1bWVudCk7CisgICAgICAgIHNjcmlwdEVsZW1l
bnQtPnNldENyZWF0ZWRCeVBhcnNlcih0cnVlKTsKKyAgICAgICAgcmV0dXJuIHNjcmlwdEVsZW1l
bnQ7CiAgICAgfQogCi0gICAgcmV0dXJuIGRvY3VtZW50LT5kb2N1bWVudCgpLT5jcmVhdGVIVE1M
RWxlbWVudCh0LT5pZCk7CisgICAgcmV0dXJuIGRvY3VtZW50LT5kb2N1bWVudCgpLT5jcmVhdGVI
VE1MRWxlbWVudCh0LT50YWdOYW1lKTsKIH0KIAogI2RlZmluZSBNQVhfUkVEVU5EQU5UIDIwCiAK
LWJvb2wgS0hUTUxQYXJzZXI6OmFsbG93TmVzdGVkUmVkdW5kYW50VGFnKGludCBfaWQpCitib29s
IEhUTUxQYXJzZXI6OmFsbG93TmVzdGVkUmVkdW5kYW50VGFnKGNvbnN0IEF0b21pY1N0cmluZyYg
X3RhZ05hbWUpCiB7CiAgICAgLy8gd3d3LmxpY2VvLmVkdS5teCBpcyBhbiBleGFtcGxlIG9mIGEg
c2l0ZSB0aGF0IGFjaGlldmVzIGEgbGV2ZWwgb2YgbmVzdGluZyBvZgogICAgIC8vIGFib3V0IDE1
MDAgdGFncywgYWxsIGZyb20gYSBidW5jaCBvZiA8Yj5zLiAgV2Ugd2lsbCBvbmx5IGFsbG93IGF0
IG1vc3QgMjAKICAgICAvLyBuZXN0ZWQgdGFncyBvZiB0aGUgc2FtZSB0eXBlIGJlZm9yZSBqdXN0
IGlnbm9yaW5nIHRoZW0gYWxsIHRvZ2V0aGVyLgogICAgIGludCBpID0gMDsKICAgICBmb3IgKEhU
TUxTdGFja0VsZW0qIGN1cnIgPSBibG9ja1N0YWNrOwotICAgICAgICAgaSA8IE1BWF9SRURVTkRB
TlQgJiYgY3VyciAmJiBjdXJyLT5pZCA9PSBfaWQ7CisgICAgICAgICBpIDwgTUFYX1JFRFVOREFO
VCAmJiBjdXJyICYmIGN1cnItPnRhZ05hbWUgPT0gX3RhZ05hbWU7CiAgICAgICAgICBjdXJyID0g
Y3Vyci0+bmV4dCwgaSsrKTsKICAgICByZXR1cm4gaSAhPSBNQVhfUkVEVU5EQU5UOwogfQogCi12
b2lkIEtIVE1MUGFyc2VyOjpwcm9jZXNzQ2xvc2VUYWcoVG9rZW4gKnQpCit2b2lkIEhUTUxQYXJz
ZXI6OnByb2Nlc3NDbG9zZVRhZyhUb2tlbiAqdCkKIHsKLSAgICAvLyBzdXBwb3J0IGZvciByZWFs
bHkgYnJva2VuIGh0bWwuIENhbid0IGJlbGlldmUgSSdtIHN1cHBvcnRpbmcgc3VjaCBjcmFwIChs
YXJzKQotICAgIHN3aXRjaCh0LT5pZCkKLSAgICB7Ci0gICAgY2FzZSBJRF9IVE1MK0lEX0NMT1NF
X1RBRzoKLSAgICBjYXNlIElEX0JPRFkrSURfQ0xPU0VfVEFHOgotICAgICAgICAvLyB3ZSBuZXZl
ciBjbG9zZSB0aGUgYm9keSB0YWcsIHNpbmNlIHNvbWUgc3R1cGlkIHdlYiBwYWdlcyBjbG9zZSBp
dCBiZWZvcmUgdGhlIGFjdHVhbCBlbmQgb2YgdGhlIGRvYy4KLSAgICAgICAgLy8gbGV0J3MgcmVs
eSBvbiB0aGUgZW5kKCkgY2FsbCB0byBjbG9zZSB0aGluZ3MuCisgICAgLy8gU3VwcG9ydCBmb3Ig
cmVhbGx5IGJyb2tlbiBodG1sLgorICAgIC8vIHdlIG5ldmVyIGNsb3NlIHRoZSBib2R5IHRhZywg
c2luY2Ugc29tZSBzdHVwaWQgd2ViIHBhZ2VzIGNsb3NlIGl0IGJlZm9yZSB0aGUgYWN0dWFsIGVu
ZCBvZiB0aGUgZG9jLgorICAgIC8vIGxldCdzIHJlbHkgb24gdGhlIGVuZCgpIGNhbGwgdG8gY2xv
c2UgdGhpbmdzLgorICAgIGlmICh0LT50YWdOYW1lID09IEhUTUxOYW1lczo6aHRtbCgpIHx8IHQt
PnRhZ05hbWUgPT0gSFRNTE5hbWVzOjpib2R5KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBjYXNl
IElEX0ZPUk0rSURfQ0xPU0VfVEFHOgorICAgIAorICAgIGlmICh0LT50YWdOYW1lID09IEhUTUxO
YW1lczo6Zm9ybSgpKQogICAgICAgICBmb3JtID0gMDsKLSAgICAgICAgLy8gdGhpcyBvbmUgaXMg
dG8gZ2V0IHRoZSByaWdodCBzdHlsZSBvbiB0aGUgYm9keSBlbGVtZW50Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgSURfTUFQK0lEX0NMT1NFX1RBRzoKKyAgICBlbHNlIGlmICh0LT50YWdOYW1l
ID09IEhUTUxOYW1lczo6bWFwKCkpCiAgICAgICAgIG1hcCA9IDA7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgSURfU0VMRUNUK0lEX0NMT1NFX1RBRzoKKyAgICBlbHNlIGlmICh0LT50YWdOYW1l
ID09IEhUTUxOYW1lczo6c2VsZWN0KCkpCiAgICAgICAgIGluU2VsZWN0ID0gZmFsc2U7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotI2lmZGVm
IFBBUlNFUl9ERUJVRwotICAgIGtkRGVidWcoIDYwMzUgKSA8PCAiYWRkZWQgdGhlIGZvbGxvd2lu
ZyBjaGlsZHMgdG8gIiA8PCBjdXJyZW50LT5ub2RlTmFtZSgpLnN0cmluZygpIDw8IGVuZGw7Ci0g
ICAgTm9kZUltcGwgKmNoaWxkID0gY3VycmVudC0+Zmlyc3RDaGlsZCgpOwotICAgIHdoaWxlKGNo
aWxkICE9IDApCi0gICAgewotICAgICAgICBrZERlYnVnKCA2MDM1ICkgPDwgIiAgICAiIDw8IGNo
aWxkLT5ub2RlTmFtZSgpLnN0cmluZygpIDw8IGVuZGw7Ci0gICAgICAgIGNoaWxkID0gY2hpbGQt
Pm5leHRTaWJsaW5nKCk7Ci0gICAgfQotI2VuZGlmCisgICAgICAgIAogICAgIEhUTUxTdGFja0Vs
ZW0qIG9sZEVsZW0gPSBibG9ja1N0YWNrOwotICAgIHBvcEJsb2NrKHQtPmlkLUlEX0NMT1NFX1RB
Ryk7Ci0gICAgaWYgKG9sZEVsZW0gPT0gYmxvY2tTdGFjayAmJiB0LT5pZCA9PSBJRF9QK0lEX0NM
T1NFX1RBRykgeworICAgIHBvcEJsb2NrKHQtPnRhZ05hbWUpOworICAgIGlmIChvbGRFbGVtID09
IGJsb2NrU3RhY2sgJiYgdC0+dGFnTmFtZSA9PSBIVE1MTmFtZXM6OnAoKSkgewogICAgICAgICAv
LyBXZSBlbmNvdW50ZXJlZCBhIHN0cmF5IDwvcD4uICBBbWF6aW5nbHkgR2Vja28sIFdpbklFLCBh
bmQgTWFjSUUgYWxsIHRyZWF0CiAgICAgICAgIC8vIHRoaXMgYXMgYSB2YWxpZCBicmVhaywgaS5l
LiwgPHA+PC9wPi4gIFNvIGdvIGFoZWFkIGFuZCBtYWtlIHRoZSBlbXB0eQogICAgICAgICAvLyBw
YXJhZ3JhcGguCi0gICAgICAgIHQtPmlkLT1JRF9DTE9TRV9UQUc7CisgICAgICAgIHQtPmJlZ2lu
VGFnID0gdHJ1ZTsKICAgICAgICAgcGFyc2VUb2tlbih0KTsKLSAgICAgICAgcG9wQmxvY2soSURf
UCk7CisgICAgICAgIHBvcEJsb2NrKHQtPnRhZ05hbWUpOwogICAgIH0KICNpZmRlZiBQQVJTRVJf
REVCVUcKICAgICBrZERlYnVnKCA2MDM1ICkgPDwgImNsb3NlVGFnIC0tPiBjdXJyZW50ID0gIiA8
PCBjdXJyZW50LT5ub2RlTmFtZSgpLnN0cmluZygpIDw8IGVuZGw7CiAjZW5kaWYKIH0KIAotYm9v
bCBLSFRNTFBhcnNlcjo6aXNIZWFkZXJUYWcoaW50IF9pZCkKK2Jvb2wgSFRNTFBhcnNlcjo6aXNI
ZWFkZXJUYWcoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lKQogewotICAgIHN3aXRjaCAoX2lk
KSB7Ci0gICAgICAgIGNhc2UgSURfSDE6Ci0gICAgICAgIGNhc2UgSURfSDI6Ci0gICAgICAgIGNh
c2UgSURfSDM6Ci0gICAgICAgIGNhc2UgSURfSDQ6Ci0gICAgICAgIGNhc2UgSURfSDU6Ci0gICAg
ICAgIGNhc2UgSURfSDY6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgcmV0dXJuIHRhZ05hbWUg
PT0gSFRNTE5hbWVzOjpoMSgpIHx8CisgICAgICAgICAgIHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpo
MigpIHx8CisgICAgICAgICAgIHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpoMygpIHx8CisgICAgICAg
ICAgIHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpoNCgpIHx8CisgICAgICAgICAgIHRhZ05hbWUgPT0g
SFRNTE5hbWVzOjpoNSgpIHx8CisgICAgICAgICAgIHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpoNigp
OwogfQogCi12b2lkIEtIVE1MUGFyc2VyOjpwb3BOZXN0ZWRIZWFkZXJUYWcoKQordm9pZCBIVE1M
UGFyc2VyOjpwb3BOZXN0ZWRIZWFkZXJUYWcoKQogewogICAgIC8vIFRoaXMgZnVuY3Rpb24gb25s
eSBjYXJlcyBhYm91dCBjaGVja2luZyBmb3IgbmVzdGVkIGhlYWRlcnMgdGhhdCBoYXZlIG9ubHkg
aW5saW5lcyBpbiBiZXR3ZWVuIHRoZW0uCiAgICAgTm9kZUltcGwqIGN1cnJOb2RlID0gY3VycmVu
dDsKICAgICBmb3IgKEhUTUxTdGFja0VsZW0qIGN1cnIgPSBibG9ja1N0YWNrOyBjdXJyOyBjdXJy
ID0gY3Vyci0+bmV4dCkgewotICAgICAgICBpZiAoaXNIZWFkZXJUYWcoY3Vyci0+aWQpKSB7Ci0g
ICAgICAgICAgICBwb3BCbG9jayhjdXJyLT5pZCk7CisgICAgICAgIGlmIChpc0hlYWRlclRhZyhj
dXJyLT50YWdOYW1lKSkgeworICAgICAgICAgICAgcG9wQmxvY2soY3Vyci0+dGFnTmFtZSk7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGN1cnJOb2RlICYmICFj
dXJyTm9kZS0+aXNJbmxpbmUoKSkKKyAgICAgICAgaWYgKGN1cnJOb2RlICYmICFpc0lubGluZShj
dXJyTm9kZSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGN1cnJOb2RlID0gY3Vyci0+
bm9kZTsKICAgICB9CiB9CiAKLWJvb2wgS0hUTUxQYXJzZXI6OmlzUmVzaWR1YWxTdHlsZVRhZyhp
bnQgX2lkKQorYm9vbCBIVE1MUGFyc2VyOjppc0lubGluZShET006Ok5vZGVJbXBsKiBub2RlKSBj
b25zdAogewotICAgIHN3aXRjaCAoX2lkKSB7CisgICAgaWYgKG5vZGUtPmlzVGV4dE5vZGUoKSkK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKG5vZGUtPmlzSFRNTEVsZW1lbnQoKSkgewor
ICAgICAgICAvL0hUTUxFbGVtZW50SW1wbCogZSA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1w
bCo+KG5vZGUpOworICAgICAgICByZXR1cm4gZmFsc2U7IC8vIEZJWE1FOiBTaG91bGQgYmUgcG9z
c2libGUgdG8gaW1wbGVtZW50IHRoaXMgaW4gdGVybXMgb2YgcHJpb3JpdHkgbGV2ZWxzLgorICAg
IH0KKyAgICByZXR1cm4gZmFsc2U7CisKKy8qCisgICAgc3dpdGNoKGlkKCkpIHsKICAgICAgICAg
Y2FzZSBJRF9BOgogICAgICAgICBjYXNlIElEX0ZPTlQ6CiAgICAgICAgIGNhc2UgSURfVFQ6CkBA
IC0xMDYwLDYgKzg1MSw4IEBAIGJvb2wgS0hUTUxQYXJzZXI6OmlzUmVzaWR1YWxTdHlsZVRhZyhp
bnQKICAgICAgICAgY2FzZSBJRF9TVFJJS0U6CiAgICAgICAgIGNhc2UgSURfQklHOgogICAgICAg
ICBjYXNlIElEX1NNQUxMOgorICAgIAorICAgICAgICAgICAgLy8gJXBocmFzZQogICAgICAgICBj
YXNlIElEX0VNOgogICAgICAgICBjYXNlIElEX1NUUk9ORzoKICAgICAgICAgY2FzZSBJRF9ERk46
CkBAIC0xMDY3LDQzICs4NjAsNDcgQEAgYm9vbCBLSFRNTFBhcnNlcjo6aXNSZXNpZHVhbFN0eWxl
VGFnKGludAogICAgICAgICBjYXNlIElEX1NBTVA6CiAgICAgICAgIGNhc2UgSURfS0JEOgogICAg
ICAgICBjYXNlIElEX1ZBUjoKKyAgICAgICAgY2FzZSBJRF9DSVRFOgorICAgICAgICBjYXNlIElE
X0FCQlI6CisgICAgICAgIGNhc2UgSURfQUNST05ZTToKKyAgICAKKyAgICAgICAgICAgIC8vICVz
cGVjaWFsCisgICAgICAgIGNhc2UgSURfU1VCOgorICAgICAgICBjYXNlIElEX1NVUDoKKyAgICAg
ICAgY2FzZSBJRF9TUEFOOgorICAgICAgICBjYXNlIElEX05PQlI6CisgICAgICAgIGNhc2UgSURf
V0JSOgorICAgICAgICAKKyAgICAgICAgY2FzZSBJRF9URVhUOgogICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgICAgICAKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9CisgICAgfSovCiB9CiAKLWJvb2wgS0hUTUxQYXJzZXI6OmlzQWZmZWN0
ZWRCeVJlc2lkdWFsU3R5bGUoaW50IF9pZCkKK2Jvb2wgSFRNTFBhcnNlcjo6aXNSZXNpZHVhbFN0
eWxlVGFnKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSkKIHsKLSAgICBpZiAoaXNSZXNpZHVh
bFN0eWxlVGFnKF9pZCkpCisgICAgcmV0dXJuIHRhZ05hbWUgPT0gSFRNTE5hbWVzOjphKCkgfHwg
dGFnTmFtZSA9PSBIVE1MTmFtZXM6OmZvbnQoKSB8fCB0YWdOYW1lID09IEhUTUxOYW1lczo6dHQo
KSB8fAorICAgICAgICAgICB0YWdOYW1lID09IEhUTUxOYW1lczo6dSgpIHx8IHRhZ05hbWUgPT0g
SFRNTE5hbWVzOjpiKCkgfHwgdGFnTmFtZSA9PSBIVE1MTmFtZXM6OmkoKSB8fAorICAgICAgICAg
ICB0YWdOYW1lID09IEhUTUxOYW1lczo6cygpIHx8IHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpzdHJp
a2UoKSB8fCB0YWdOYW1lID09IEhUTUxOYW1lczo6YmlnKCkgfHwKKyAgICAgICAgICAgdGFnTmFt
ZSA9PSBIVE1MTmFtZXM6OnNtYWxsKCkgfHwgdGFnTmFtZSA9PSBIVE1MTmFtZXM6OmVtKCkgfHwg
dGFnTmFtZSA9PSBIVE1MTmFtZXM6OnN0cm9uZygpIHx8CisgICAgICAgICAgIHRhZ05hbWUgPT0g
SFRNTE5hbWVzOjpkZm4oKSB8fCB0YWdOYW1lID09IEhUTUxOYW1lczo6Y29kZSgpIHx8IHRhZ05h
bWUgPT0gSFRNTE5hbWVzOjpzYW1wKCkgfHwKKyAgICAgICAgICAgdGFnTmFtZSA9PSBIVE1MTmFt
ZXM6OmtiZCgpIHx8IHRhZ05hbWUgPT0gSFRNTE5hbWVzOjp2YXIoKTsKK30KKworYm9vbCBIVE1M
UGFyc2VyOjppc0FmZmVjdGVkQnlSZXNpZHVhbFN0eWxlKGNvbnN0IEF0b21pY1N0cmluZyYgdGFn
TmFtZSkKK3sKKyAgICBpZiAoaXNSZXNpZHVhbFN0eWxlVGFnKHRhZ05hbWUpIHx8IGlzSGVhZGVy
VGFnKHRhZ05hbWUpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAKLSAgICBzd2l0Y2ggKF9p
ZCkgewotICAgICAgICBjYXNlIElEX1A6Ci0gICAgICAgIGNhc2UgSURfRElWOgotICAgICAgICBj
YXNlIElEX0JMT0NLUVVPVEU6Ci0gICAgICAgIGNhc2UgSURfQUREUkVTUzoKLSAgICAgICAgY2Fz
ZSBJRF9IMToKLSAgICAgICAgY2FzZSBJRF9IMjoKLSAgICAgICAgY2FzZSBJRF9IMzoKLSAgICAg
ICAgY2FzZSBJRF9INDoKLSAgICAgICAgY2FzZSBJRF9INToKLSAgICAgICAgY2FzZSBJRF9INjoK
LSAgICAgICAgY2FzZSBJRF9DRU5URVI6Ci0gICAgICAgIGNhc2UgSURfVUw6Ci0gICAgICAgIGNh
c2UgSURfT0w6Ci0gICAgICAgIGNhc2UgSURfTEk6Ci0gICAgICAgIGNhc2UgSURfREw6Ci0gICAg
ICAgIGNhc2UgSURfRFQ6Ci0gICAgICAgIGNhc2UgSURfREQ6Ci0gICAgICAgIGNhc2UgSURfUFJF
OgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgIHJldHVybiB0YWdOYW1lID09IEhUTUxOYW1lczo6
cCgpIHx8IHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpkaXYoKSB8fCB0YWdOYW1lID09IEhUTUxOYW1l
czo6YmxvY2txdW90ZSgpIHx8CisgICAgICAgICAgIHRhZ05hbWUgPT0gSFRNTE5hbWVzOjphZGRy
ZXNzKCkgfHwgdGFnTmFtZSA9PSBIVE1MTmFtZXM6OmNlbnRlcigpIHx8IHRhZ05hbWUgPT0gSFRN
TE5hbWVzOjp1bCgpIHx8CisgICAgICAgICAgIHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpvbCgpIHx8
IHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpsaSgpIHx8IHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpkbCgp
IHx8CisgICAgICAgICAgIHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpkdCgpIHx8IHRhZ05hbWUgPT0g
SFRNTE5hbWVzOjpkZCgpIHx8IHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpwcmUoKTsKIH0KIAotdm9p
ZCBLSFRNTFBhcnNlcjo6aGFuZGxlUmVzaWR1YWxTdHlsZUNsb3NlVGFnQWNyb3NzQmxvY2tzKEhU
TUxTdGFja0VsZW0qIGVsZW0pCit2b2lkIEhUTUxQYXJzZXI6OmhhbmRsZVJlc2lkdWFsU3R5bGVD
bG9zZVRhZ0Fjcm9zc0Jsb2NrcyhIVE1MU3RhY2tFbGVtKiBlbGVtKQogewogICAgIC8vIEZpbmQg
dGhlIGVsZW1lbnQgdGhhdCBjcm9zc2VzIG92ZXIgdG8gYSBoaWdoZXIgbGV2ZWwuICAgRm9yIG5v
dywgaWYgdGhlcmUgaXMgbW9yZSB0aGFuCiAgICAgLy8gb25lLCB3ZSB3aWxsIGp1c3QgZ2l2ZSB1
cCBhbmQgbm90IGF0dGVtcHQgYW55IHNvcnQgb2YgY29ycmVjdGlvbi4gIEl0J3MgaGlnaGx5IHVu
bGlrZWx5IHRoYXQKQEAgLTExMjUsNyArOTIyLDcgQEAgdm9pZCBLSFRNTFBhcnNlcjo6aGFuZGxl
UmVzaWR1YWxTdHlsZUNsbwogICAgICAgICBjdXJyID0gY3Vyci0+bmV4dDsKICAgICB9CiAKLSAg
ICBpZiAoIWN1cnIgfHwgIW1heEVsZW0gfHwgIWlzQWZmZWN0ZWRCeVJlc2lkdWFsU3R5bGUobWF4
RWxlbS0+aWQpKSByZXR1cm47CisgICAgaWYgKCFjdXJyIHx8ICFtYXhFbGVtIHx8ICFpc0FmZmVj
dGVkQnlSZXNpZHVhbFN0eWxlKG1heEVsZW0tPnRhZ05hbWUpKSByZXR1cm47CiAKICAgICBOb2Rl
SW1wbCogcmVzaWR1YWxFbGVtID0gcHJldi0+bm9kZTsKICAgICBOb2RlSW1wbCogYmxvY2tFbGVt
ID0gcHJldk1heEVsZW0gPyBwcmV2TWF4RWxlbS0+bm9kZSA6IGN1cnJlbnQ7CkBAIC0xMTQ3LDcg
Kzk0NCw3IEBAIHZvaWQgS0hUTUxQYXJzZXI6OmhhbmRsZVJlc2lkdWFsU3R5bGVDbG8KICAgICAg
ICAgSFRNTFN0YWNrRWxlbSogcHJldkVsZW0gPSBtYXhFbGVtOwogICAgICAgICB3aGlsZSAoY3Vy
ckVsZW0gIT0gZWxlbSkgewogICAgICAgICAgICAgSFRNTFN0YWNrRWxlbSogbmV4dEVsZW0gPSBj
dXJyRWxlbS0+bmV4dDsKLSAgICAgICAgICAgIGlmICghaXNSZXNpZHVhbFN0eWxlVGFnKGN1cnJF
bGVtLT5pZCkpIHsKKyAgICAgICAgICAgIGlmICghaXNSZXNpZHVhbFN0eWxlVGFnKGN1cnJFbGVt
LT50YWdOYW1lKSkgewogICAgICAgICAgICAgICAgIHByZXZFbGVtLT5uZXh0ID0gbmV4dEVsZW07
CiAgICAgICAgICAgICAgICAgcHJldkVsZW0tPm5vZGUgPSBjdXJyRWxlbS0+bm9kZTsKICAgICAg
ICAgICAgICAgICBkZWxldGUgY3VyckVsZW07CkBAIC0xMTY5LDcgKzk2Niw3IEBAIHZvaWQgS0hU
TUxQYXJzZXI6OmhhbmRsZVJlc2lkdWFsU3R5bGVDbG8KICAgICAgICAgTm9kZUltcGwqIGN1cnJO
b2RlID0gMDsKICAgICAgICAgY3VyckVsZW0gPSBtYXhFbGVtOwogICAgICAgICB3aGlsZSAoY3Vy
ckVsZW0tPm5vZGUgIT0gcmVzaWR1YWxFbGVtKSB7Ci0gICAgICAgICAgICBpZiAoaXNSZXNpZHVh
bFN0eWxlVGFnKGN1cnJFbGVtLT5ub2RlLT5pZCgpKSkgeworICAgICAgICAgICAgaWYgKGlzUmVz
aWR1YWxTdHlsZVRhZyhjdXJyRWxlbS0+bm9kZS0+bG9jYWxOYW1lKCkpKSB7CiAgICAgICAgICAg
ICAgICAgLy8gQ3JlYXRlIGEgY2xvbmUgb2YgdGhpcyBlbGVtZW50LgogICAgICAgICAgICAgICAg
IGN1cnJOb2RlID0gY3VyckVsZW0tPm5vZGUtPmNsb25lTm9kZShmYWxzZSk7CiAKQEAgLTEyNDUs
NyArMTA0Miw3IEBAIHZvaWQgS0hUTUxQYXJzZXI6OmhhbmRsZVJlc2lkdWFsU3R5bGVDbG8KICAg
ICAgICAgLy8gV2Ugd2lsbCBhY3R1YWxseSBzY2hlZHVsZSB0aGlzIHRhZyBmb3IgcmVvcGVuaW5n
CiAgICAgICAgIC8vIGFmdGVyIHdlIGNvbXBsZXRlIHRoZSBjbG9zZSBvZiB0aGlzIGVudGlyZSBi
bG9jay4KICAgICAgICAgTm9kZUltcGwqIGN1cnJOb2RlID0gY3VycmVudDsKLSAgICAgICAgaWYg
KGlzUmVzaWR1YWxTdHlsZVRhZyhjdXJyLT5pZCkpIHsKKyAgICAgICAgaWYgKGlzUmVzaWR1YWxT
dHlsZVRhZyhjdXJyLT50YWdOYW1lKSkgewogICAgICAgICAgICAgLy8gV2UndmUgb3ZlcmxvYWRl
ZCB0aGUgdXNlIG9mIHN0YWNrIGVsZW1lbnRzIGFuZCBhcmUganVzdCByZXVzaW5nIHRoZQogICAg
ICAgICAgICAgLy8gc3RydWN0IHdpdGggYSBzbGlnaHRseSBkaWZmZXJlbnQgbWVhbmluZyB0byB0
aGUgdmFyaWFibGVzLiAgSW5zdGVhZCBvZiBjaGFpbmluZwogICAgICAgICAgICAgLy8gZnJvbSBp
bm5lcm1vc3QgdG8gb3V0ZXJtb3N0LCB3ZSBidWlsZCB1cCBhIGxpc3Qgb2YgYWxsIHRoZSB0YWdz
IHdlIG5lZWQgdG8gcmVvcGVuCkBAIC0xMjY5LDcgKzEwNjYsNyBAQCB2b2lkIEtIVE1MUGFyc2Vy
OjpoYW5kbGVSZXNpZHVhbFN0eWxlQ2xvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gaWYgaXQgYmVjb21lcyBuZWNlc3NhcnkgdG8gZG8gc28u
CiB9CiAKLXZvaWQgS0hUTUxQYXJzZXI6OnJlb3BlblJlc2lkdWFsU3R5bGVUYWdzKEhUTUxTdGFj
a0VsZW0qIGVsZW0sIERPTTo6Tm9kZUltcGwqIG1hbGZvcm1lZFRhYmxlUGFyZW50KQordm9pZCBI
VE1MUGFyc2VyOjpyZW9wZW5SZXNpZHVhbFN0eWxlVGFncyhIVE1MU3RhY2tFbGVtKiBlbGVtLCBE
T006Ok5vZGVJbXBsKiBtYWxmb3JtZWRUYWJsZVBhcmVudCkKIHsKICAgICAvLyBMb29wIGZvciBl
YWNoIHRhZyB0aGF0IG5lZWRzIHRvIGJlIHJlb3BlbmVkLgogICAgIHdoaWxlIChlbGVtKSB7CkBA
IC0xMjg2LDcgKzEwODMsNyBAQCB2b2lkIEtIVE1MUGFyc2VyOjpyZW9wZW5SZXNpZHVhbFN0eWxl
VGFnCiAgICAgICAgIC8vIEZJWE1FOiBJcyBpdCByZWFsbHkgT0sgdG8gaWdub3JlIHRoZSBleGNl
cHRpb25zIGhlcmU/CiAKICAgICAgICAgLy8gTm93IHB1c2ggYSBuZXcgc3RhY2sgZWxlbWVudCBm
b3IgdGhpcyBub2RlIHdlIGp1c3QgY3JlYXRlZC4KLSAgICAgICAgcHVzaEJsb2NrKGVsZW0tPmlk
LCBlbGVtLT5sZXZlbCk7CisgICAgICAgIHB1c2hCbG9jayhlbGVtLT50YWdOYW1lLCBlbGVtLT5s
ZXZlbCk7CiAKICAgICAgICAgLy8gU2V0IG91ciBzdHJheVRhYmxlQ29udGVudCBib29sZWFuIGlm
IG5lZWRlZCwgc28gdGhhdCB0aGUgcmVvcGVuZWQgdGFnIGFsc28ga25vd3MKICAgICAgICAgLy8g
dGhhdCBpdCBpcyBpbnNpZGUgYSBtYWxmb3JtZWQgdGFibGUuCkBAIC0xMzA3LDM1ICsxMTA0LDIx
IEBAIHZvaWQgS0hUTUxQYXJzZXI6OnJlb3BlblJlc2lkdWFsU3R5bGVUYWcKICAgICB9CiB9CiAK
LXZvaWQgS0hUTUxQYXJzZXI6OnB1c2hCbG9jayhpbnQgX2lkLCBpbnQgX2xldmVsKQordm9pZCBI
VE1MUGFyc2VyOjpwdXNoQmxvY2soY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lLCBpbnQgX2xl
dmVsKQogewotICAgIEhUTUxTdGFja0VsZW0gKkVsZW0gPSBuZXcgSFRNTFN0YWNrRWxlbShfaWQs
IF9sZXZlbCwgY3VycmVudCwgYmxvY2tTdGFjayk7Ci0KKyAgICBIVE1MU3RhY2tFbGVtICpFbGVt
ID0gbmV3IEhUTUxTdGFja0VsZW0odGFnTmFtZSwgX2xldmVsLCBjdXJyZW50LCBibG9ja1N0YWNr
KTsKICAgICBibG9ja1N0YWNrID0gRWxlbTsKLSAgICBhZGRGb3JiaWRkZW4oX2lkLCBmb3JiaWRk
ZW5UYWcpOwogfQogCi12b2lkIEtIVE1MUGFyc2VyOjpwb3BCbG9jayggaW50IF9pZCApCit2b2lk
IEhUTUxQYXJzZXI6OnBvcEJsb2NrKGNvbnN0IEF0b21pY1N0cmluZyYgX3RhZ05hbWUpCiB7CiAg
ICAgSFRNTFN0YWNrRWxlbSAqRWxlbSA9IGJsb2NrU3RhY2s7CiAgICAgCiAgICAgaW50IG1heExl
dmVsID0gMDsKIAotI2lmZGVmIFBBUlNFUl9ERUJVRwotICAgIGtkRGVidWcoIDYwMzUgKSA8PCAi
cG9wQmxvY2soIiA8PCBnZXRUYWdOYW1lKF9pZCkuc3RyaW5nKCkgPDwgIikiIDw8IGVuZGw7Ci0g
ICAgd2hpbGUoRWxlbSkgewotICAgICAgICBrZERlYnVnKCA2MDM1KSA8PCAiICAgPiAiIDw8IGdl
dFRhZ05hbWUoRWxlbS0+aWQpLnN0cmluZygpIDw8IGVuZGw7Ci0gICAgICAgIEVsZW0gPSBFbGVt
LT5uZXh0OwotICAgIH0KLSAgICBFbGVtID0gYmxvY2tTdGFjazsKLSNlbmRpZgotCi0gICAgd2hp
bGUoIEVsZW0gJiYgKEVsZW0tPmlkICE9IF9pZCkpCi0gICAgeworICAgIHdoaWxlIChFbGVtICYm
IChFbGVtLT50YWdOYW1lICE9IF90YWdOYW1lKSkgewogICAgICAgICBpZiAobWF4TGV2ZWwgPCBF
bGVtLT5sZXZlbCkKLSAgICAgICAgewogICAgICAgICAgICAgbWF4TGV2ZWwgPSBFbGVtLT5sZXZl
bDsKLSAgICAgICAgfQogICAgICAgICBFbGVtID0gRWxlbS0+bmV4dDsKICAgICB9CiAKQEAgLTEz
NDUsMjAgKzExMjgsMTggQEAgdm9pZCBLSFRNTFBhcnNlcjo6cG9wQmxvY2soIGludCBfaWQgKQog
ICAgIGlmIChtYXhMZXZlbCA+IEVsZW0tPmxldmVsKSB7CiAgICAgICAgIC8vIFdlIGRpZG4ndCBt
YXRjaCBiZWNhdXNlIHRoZSB0YWcgaXMgaW4gYSBkaWZmZXJlbnQgc2NvcGUsIGUuZy4sCiAgICAg
ICAgIC8vIDxiPjxwPkZvbzwvYj4uICBUcnkgdG8gY29ycmVjdCB0aGUgcHJvYmxlbS4KLSAgICAg
ICAgaWYgKCFpc1Jlc2lkdWFsU3R5bGVUYWcoX2lkKSkKKyAgICAgICAgaWYgKCFpc1Jlc2lkdWFs
U3R5bGVUYWcoX3RhZ05hbWUpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICByZXR1cm4g
aGFuZGxlUmVzaWR1YWxTdHlsZUNsb3NlVGFnQWNyb3NzQmxvY2tzKEVsZW0pOwogICAgIH0KIAot
ICAgIGJvb2wgaXNBZmZlY3RlZEJ5U3R5bGUgPSBpc0FmZmVjdGVkQnlSZXNpZHVhbFN0eWxlKEVs
ZW0tPmlkKTsKKyAgICBib29sIGlzQWZmZWN0ZWRCeVN0eWxlID0gaXNBZmZlY3RlZEJ5UmVzaWR1
YWxTdHlsZShFbGVtLT50YWdOYW1lKTsKICAgICBIVE1MU3RhY2tFbGVtKiByZXNpZHVhbFN0eWxl
U3RhY2sgPSAwOwogICAgIE5vZGVJbXBsKiBtYWxmb3JtZWRUYWJsZVBhcmVudCA9IDA7CiAgICAg
CiAgICAgRWxlbSA9IGJsb2NrU3RhY2s7Ci0gICAgd2hpbGUgKEVsZW0pCi0gICAgewotICAgICAg
ICBpZiAoRWxlbS0+aWQgPT0gX2lkKQotICAgICAgICB7CisgICAgd2hpbGUgKEVsZW0pIHsKKyAg
ICAgICAgaWYgKEVsZW0tPnRhZ05hbWUgPT0gX3RhZ05hbWUpIHsKICAgICAgICAgICAgIGludCBz
dHJheVRhYmxlID0gaW5TdHJheVRhYmxlQ29udGVudDsKICAgICAgICAgICAgIHBvcE9uZUJsb2Nr
KCk7CiAgICAgICAgICAgICBFbGVtID0gMDsKQEAgLTEzNjksMTQgKzExNTAsMTMgQEAgdm9pZCBL
SFRNTFBhcnNlcjo6cG9wQmxvY2soIGludCBfaWQgKQogICAgICAgICAgICAgLy8gbXVzdCBhbHNv
IGtub3cgdGhhdCBpdCBpcyB0aGUgcm9vdCBvZiBtYWxmb3JtZWQgY29udGVudCBpbnNpZGUgYSA8
dGJvZHk+Lzx0cj4uCiAgICAgICAgICAgICBpZiAoc3RyYXlUYWJsZSAmJiAoaW5TdHJheVRhYmxl
Q29udGVudCA8IHN0cmF5VGFibGUpICYmIHJlc2lkdWFsU3R5bGVTdGFjaykgewogICAgICAgICAg
ICAgICAgIE5vZGVJbXBsKiBjdXJyID0gY3VycmVudDsKLSAgICAgICAgICAgICAgICB3aGlsZSAo
Y3VyciAmJiBjdXJyLT5pZCgpICE9IElEX1RBQkxFKQorICAgICAgICAgICAgICAgIHdoaWxlIChj
dXJyICYmICFjdXJyLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGFibGUoKSkpCiAgICAgICAgICAg
ICAgICAgICAgIGN1cnIgPSBjdXJyLT5wYXJlbnROb2RlKCk7CiAgICAgICAgICAgICAgICAgbWFs
Zm9ybWVkVGFibGVQYXJlbnQgPSBjdXJyID8gY3Vyci0+cGFyZW50Tm9kZSgpIDogMDsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGlmIChFbGVtLT5pZCA9PSBJRF9GT1JNICYmIGZvcm0pCisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgaWYgKGZvcm0gJiYgRWxlbS0+dGFnTmFtZSA9PSBIVE1MTmFtZXM6OmZvcm0oKSkKICAg
ICAgICAgICAgICAgICAvLyBBIDxmb3JtPiBpcyBiZWluZyBjbG9zZWQgcHJlbWF0dXJlbHkgKGFu
ZCB0aGlzIGlzCiAgICAgICAgICAgICAgICAgLy8gbWFsZm9ybWVkIEhUTUwpLiAgU2V0IGFuIGF0
dHJpYnV0ZSBvbiB0aGUgZm9ybSB0byBjbGVhciBvdXQgaXRzCiAgICAgICAgICAgICAgICAgLy8g
Ym90dG9tIG1hcmdpbi4KQEAgLTEzODUsNyArMTE2NSw3IEBAIHZvaWQgS0hUTUxQYXJzZXI6OnBv
cEJsb2NrKCBpbnQgX2lkICkKICAgICAgICAgICAgIC8vIFNjaGVkdWxlIHRoaXMgdGFnIGZvciBy
ZW9wZW5pbmcKICAgICAgICAgICAgIC8vIGFmdGVyIHdlIGNvbXBsZXRlIHRoZSBjbG9zZSBvZiB0
aGlzIGVudGlyZSBibG9jay4KICAgICAgICAgICAgIE5vZGVJbXBsKiBjdXJyTm9kZSA9IGN1cnJl
bnQ7Ci0gICAgICAgICAgICBpZiAoaXNBZmZlY3RlZEJ5U3R5bGUgJiYgaXNSZXNpZHVhbFN0eWxl
VGFnKEVsZW0tPmlkKSkgeworICAgICAgICAgICAgaWYgKGlzQWZmZWN0ZWRCeVN0eWxlICYmIGlz
UmVzaWR1YWxTdHlsZVRhZyhFbGVtLT50YWdOYW1lKSkgewogICAgICAgICAgICAgICAgIC8vIFdl
J3ZlIG92ZXJsb2FkZWQgdGhlIHVzZSBvZiBzdGFjayBlbGVtZW50cyBhbmQgYXJlIGp1c3QgcmV1
c2luZyB0aGUKICAgICAgICAgICAgICAgICAvLyBzdHJ1Y3Qgd2l0aCBhIHNsaWdodGx5IGRpZmZl
cmVudCBtZWFuaW5nIHRvIHRoZSB2YXJpYWJsZXMuICBJbnN0ZWFkIG9mIGNoYWluaW5nCiAgICAg
ICAgICAgICAgICAgLy8gZnJvbSBpbm5lcm1vc3QgdG8gb3V0ZXJtb3N0LCB3ZSBidWlsZCB1cCBh
IGxpc3Qgb2YgYWxsIHRoZSB0YWdzIHdlIG5lZWQgdG8gcmVvcGVuCkBAIC0xNDA4LDE5ICsxMTg4
LDE0IEBAIHZvaWQgS0hUTUxQYXJzZXI6OnBvcEJsb2NrKCBpbnQgX2lkICkKICAgICByZW9wZW5S
ZXNpZHVhbFN0eWxlVGFncyhyZXNpZHVhbFN0eWxlU3RhY2ssIG1hbGZvcm1lZFRhYmxlUGFyZW50
KTsKIH0KIAotdm9pZCBLSFRNTFBhcnNlcjo6cG9wT25lQmxvY2soYm9vbCBkZWxCbG9jaykKK3Zv
aWQgSFRNTFBhcnNlcjo6cG9wT25lQmxvY2soYm9vbCBkZWxCbG9jaykKIHsKICAgICBIVE1MU3Rh
Y2tFbGVtICpFbGVtID0gYmxvY2tTdGFjazsKIAogICAgIC8vIHdlIHNob3VsZCBuZXZlciBnZXQg
aGVyZSwgYnV0IHNvbWUgYmFkIGh0bWwgbWlnaHQgY2F1c2UgaXQuCi0jaWZuZGVmIFBBUlNFUl9E
RUJVRwotICAgIGlmKCFFbGVtKSByZXR1cm47Ci0jZWxzZQotICAgIGtkRGVidWcoIDYwMzUgKSA8
PCAicG9wcGluZyBibG9jazogIiA8PCBnZXRUYWdOYW1lKEVsZW0tPmlkKS5zdHJpbmcoKSA8PCAi
KCIgPDwgRWxlbS0+aWQgPDwgIikiIDw8IGVuZGw7Ci0jZW5kaWYKLQotI2lmIFNQRUVEX0RFQlVH
IDwgMQotICAgIGlmKChFbGVtLT5ub2RlICE9IGN1cnJlbnQpKSB7CisgICAgaWYgKCFFbGVtKSBy
ZXR1cm47CisgICAgCisgICAgaWYgKChFbGVtLT5ub2RlICE9IGN1cnJlbnQpKSB7CiAgICAgICAg
IGlmIChjdXJyZW50LT5tYWludGFpbnNTdGF0ZSgpICYmIGRvYygpKXsKICAgICAgICAgICAgIGRv
YygpLT5yZWdpc3Rlck1haW50YWluc1N0YXRlKGN1cnJlbnQpOwogICAgICAgICAgICAgUVN0cmlu
Z0xpc3QgJnN0YXRlcyA9IGRvYygpLT5yZXN0b3JlU3RhdGUoKTsKQEAgLTE0MzEsOSArMTIwNiw2
IEBAIHZvaWQgS0hUTUxQYXJzZXI6OnBvcE9uZUJsb2NrKGJvb2wgZGVsQmwKICAgICAgICAgLy8g
QSBmZXcgZWxlbWVudHMgKDxhcHBsZXQ+LCA8b2JqZWN0PikgbmVlZCB0byBrbm93IHdoZW4gYWxs
IGNoaWxkIGVsZW1lbnRzICg8cGFyYW0+cykgYXJlIGF2YWlsYWJsZToKICAgICAgICAgY3VycmVu
dC0+Y2xvc2VSZW5kZXJlcigpOwogICAgIH0KLSNlbmRpZgotCi0gICAgcmVtb3ZlRm9yYmlkZGVu
KEVsZW0tPmlkLCBmb3JiaWRkZW5UYWcpOwogCiAgICAgYmxvY2tTdGFjayA9IEVsZW0tPm5leHQ7
CiAgICAgc2V0Q3VycmVudChFbGVtLT5ub2RlKTsKQEAgLTE0NDUsMTkgKzEyMTcsMTkgQEAgdm9p
ZCBLSFRNTFBhcnNlcjo6cG9wT25lQmxvY2soYm9vbCBkZWxCbAogICAgICAgICBkZWxldGUgRWxl
bTsKIH0KIAotdm9pZCBLSFRNTFBhcnNlcjo6cG9wSW5saW5lQmxvY2tzKCkKK3ZvaWQgSFRNTFBh
cnNlcjo6cG9wSW5saW5lQmxvY2tzKCkKIHsKLSAgICB3aGlsZSAoYmxvY2tTdGFjayAmJiBjdXJy
ZW50LT5pc0lubGluZSgpKQorICAgIHdoaWxlIChibG9ja1N0YWNrICYmIGlzSW5saW5lKGN1cnJl
bnQpKQogICAgICAgICBwb3BPbmVCbG9jaygpOwogfQogCi12b2lkIEtIVE1MUGFyc2VyOjpmcmVl
QmxvY2soKQordm9pZCBIVE1MUGFyc2VyOjpmcmVlQmxvY2soKQogewogICAgIHdoaWxlIChibG9j
a1N0YWNrKQogICAgICAgICBwb3BPbmVCbG9jaygpOwogfQogCi12b2lkIEtIVE1MUGFyc2VyOjpj
cmVhdGVIZWFkKCkKK3ZvaWQgSFRNTFBhcnNlcjo6Y3JlYXRlSGVhZCgpCiB7CiAgICAgaWYoaGVh
ZCB8fCAhZG9jKCktPmZpcnN0Q2hpbGQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTQ3NCw3ICsx
MjQ2LDcgQEAgdm9pZCBLSFRNTFBhcnNlcjo6Y3JlYXRlSGVhZCgpCiAgICAgfQogfQogCi1Ob2Rl
SW1wbCAqS0hUTUxQYXJzZXI6OmhhbmRsZUlzaW5kZXgoIFRva2VuICp0ICkKK05vZGVJbXBsICpI
VE1MUGFyc2VyOjpoYW5kbGVJc2luZGV4KCBUb2tlbiAqdCApCiB7CiAgICAgTm9kZUltcGwgKm47
CiAgICAgSFRNTEZvcm1FbGVtZW50SW1wbCAqbXlmb3JtID0gZm9ybTsKQEAgLTE1MDQsNyArMTI3
Niw3IEBAIE5vZGVJbXBsICpLSFRNTFBhcnNlcjo6aGFuZGxlSXNpbmRleCggVG8KICAgICByZXR1
cm4gbjsKIH0KIAotdm9pZCBLSFRNTFBhcnNlcjo6c3RhcnRCb2R5KCkKK3ZvaWQgSFRNTFBhcnNl
cjo6c3RhcnRCb2R5KCkKIHsKICAgICBpZihpbkJvZHkpIHJldHVybjsKIApAQCAtMTUxNiw3ICsx
Mjg4LDcgQEAgdm9pZCBLSFRNTFBhcnNlcjo6c3RhcnRCb2R5KCkKICAgICB9CiB9CiAKLXZvaWQg
S0hUTUxQYXJzZXI6OmZpbmlzaGVkKCkKK3ZvaWQgSFRNTFBhcnNlcjo6ZmluaXNoZWQoKQogewog
ICAgIC8vIEluIHRoZSBjYXNlIG9mIGEgY29tcGxldGVseSBlbXB0eSBkb2N1bWVudCwgaGVyZSdz
IHRoZSBwbGFjZSB0byBjcmVhdGUgdGhlIEhUTUwgZWxlbWVudC4KICAgICBpZiAoY3VycmVudC0+
aXNEb2N1bWVudE5vZGUoKSAmJiBjdXJyZW50LT5maXJzdENoaWxkKCkgPT0gMCkgewpJbmRleDog
a2h0bWwvaHRtbC9odG1scGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dl
YkNvcmUva2h0bWwvaHRtbC9odG1scGFyc2VyLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjcK
ZGlmZiAtdSAtcCAtcjEuMjcga2h0bWwvaHRtbC9odG1scGFyc2VyLmgKLS0tIGtodG1sL2h0bWwv
aHRtbHBhcnNlci5oCTYgSmFuIDIwMDUgMjE6MTM6MTYgLTAwMDAJMS4yNworKysga2h0bWwvaHRt
bC9odG1scGFyc2VyLmgJMjIgSnVuIDIwMDUgMjM6MjM6MzMgLTAwMDAKQEAgLTI5LDE5ICsyOSw5
IEBACiAjaWZuZGVmIEhUTUxQQVJTRVJfSAogI2RlZmluZSBIVE1MUEFSU0VSX0gKIAotLy8gMCBh
bGwKLS8vIDEgZG9tdHJlZSArIHJlbmRlcnRyZWUgKyBzdHlsZUZvckVsZW1lbnQsIG5vIGxheW91
dGluZwotLy8gMiBkb210cmVlIG9ubHkKLSNkZWZpbmUgU1BFRURfREVCVUcgMAotCi0jaWZkZWYg
U1BFRURfREVCVUcKLSNpbmNsdWRlIDxxZGF0ZXRpbWUuaD4KLSNlbmRpZgotCiAjaW5jbHVkZSAi
ZG9tL2RvbV9zdHJpbmcuaCIKICNpbmNsdWRlICJ4bWwvZG9tX25vZGVpbXBsLmgiCiAjaW5jbHVk
ZSAiaHRtbC9odG1sX2RvY3VtZW50aW1wbC5oIgotI2luY2x1ZGUgIm1pc2MvaHRtbHRhZ3MuaCIK
IAogY2xhc3MgS0hUTUxWaWV3OwogY2xhc3MgSFRNTFN0YWNrRWxlbTsKQEAgLTYxLDE4ICs1MSwx
NiBAQCBuYW1lc3BhY2Uga2h0bWwgewogICAgIGNsYXNzIFRva2VuOwogfTsKIAotY2xhc3MgS0hU
TUxQYXJzZXI7Ci0KIC8qKgogICogVGhlIHBhcnNlciBmb3IgaHRtbC4gSXQgcmVjZWl2ZXMgYSBz
dHJlYW0gb2YgdG9rZW5zIGZyb20gdGhlIEhUTUxUb2tlbml6ZXIsIGFuZAogICogYnVpbGRzIHVw
IHRoZSBEb2N1bWVudCBzdHJ1Y3R1cmUgZm9ybSBpdC4KICAqLwotY2xhc3MgS0hUTUxQYXJzZXIK
K2NsYXNzIEhUTUxQYXJzZXIKIHsKIHB1YmxpYzoKLSAgICBLSFRNTFBhcnNlcihLSFRNTFZpZXcg
KncsIERPTTo6RG9jdW1lbnRQdHIgKmksIGJvb2wgaW5jbHVkZXNDb21tZW50cz1mYWxzZSk7Ci0g
ICAgS0hUTUxQYXJzZXIoRE9NOjpEb2N1bWVudEZyYWdtZW50SW1wbCAqZnJhZywgRE9NOjpEb2N1
bWVudFB0ciAqZG9jLCBib29sIGluY2x1ZGVzQ29tbWVudHM9ZmFsc2UpOwotICAgIHZpcnR1YWwg
fktIVE1MUGFyc2VyKCk7CisgICAgSFRNTFBhcnNlcihLSFRNTFZpZXcgKncsIERPTTo6RG9jdW1l
bnRQdHIgKmksIGJvb2wgaW5jbHVkZXNDb21tZW50cz1mYWxzZSk7CisgICAgSFRNTFBhcnNlcihE
T006OkRvY3VtZW50RnJhZ21lbnRJbXBsICpmcmFnLCBET006OkRvY3VtZW50UHRyICpkb2MsIGJv
b2wgaW5jbHVkZXNDb21tZW50cz1mYWxzZSk7CisgICAgdmlydHVhbCB+SFRNTFBhcnNlcigpOwog
CiAgICAgLyoqCiAgICAgICogcGFyc2VzIG9uZSB0b2tlbiBkZWxpdmVyZWQgYnkgdGhlIHRva2Vu
aXplcgpAQCAtODksNyArNzcsNyBAQCBwdWJsaWM6CiAgICAgICovCiAgICAgdm9pZCByZXNldCgp
OwogCi0gICAgYm9vbCBza2lwTW9kZSgpIGNvbnN0IHsgcmV0dXJuIChkaXNjYXJkX3VudGlsICE9
IDApOyB9CisgICAgYm9vbCBza2lwTW9kZSgpIGNvbnN0IHsgcmV0dXJuICFkaXNjYXJkX3VudGls
LmlzTnVsbCgpOyB9CiAgICAgYm9vbCBub1NwYWNlcygpIGNvbnN0IHsgcmV0dXJuICFpbkJvZHk7
IH0KICAgICBib29sIHNlbGVjdE1vZGUoKSBjb25zdCB7IHJldHVybiBpblNlbGVjdDsgfQogCkBA
IC05NywzMSArODUsMzIgQEAgcHVibGljOgogICAgIERPTTo6RG9jdW1lbnRQdHIgKmRvY1B0cigp
IGNvbnN0IHsgcmV0dXJuIGRvY3VtZW50OyB9CiAKIHByb3RlY3RlZDoKLSAgICB2b2lkIHNldEN1
cnJlbnQoRE9NOjpOb2RlSW1wbCAqbmV3Q3VycmVudCk7CisgICAgdm9pZCBzZXRDdXJyZW50KERP
TTo6Tm9kZUltcGwqIG5ld0N1cnJlbnQpOworICAgIHZvaWQgc2V0U2tpcE1vZGUoY29uc3QgRE9N
OjpRdWFsaWZpZWROYW1lJiBxTmFtZSkgeyBkaXNjYXJkX3VudGlsID0gcU5hbWUubG9jYWxOYW1l
KCk7IH0KIAogICAgIEtIVE1MVmlldyAqSFRNTFdpZGdldDsKICAgICBET006OkRvY3VtZW50UHRy
ICpkb2N1bWVudDsKIAogICAgIC8qCi0gICAgICogZ2VuZXJhdGUgYW4gZWxlbWVudCBmcm9tIHRo
ZSB0b2tlbgorICAgICAqIGdlbmVyYXRlIGEgbm9kZSBmcm9tIHRoZSB0b2tlbgogICAgICAqLwot
ICAgIERPTTo6Tm9kZUltcGwgKmdldEVsZW1lbnQoa2h0bWw6OlRva2VuICopOworICAgIERPTTo6
Tm9kZUltcGwgKmdldE5vZGUoa2h0bWw6OlRva2VuICopOwogCiAgICAgdm9pZCBwcm9jZXNzQ2xv
c2VUYWcoa2h0bWw6OlRva2VuICopOwogCiAgICAgYm9vbCBpbnNlcnROb2RlKERPTTo6Tm9kZUlt
cGwgKm4sIGJvb2wgZmxhdCA9IGZhbHNlKTsKKyAgICBib29sIGhhbmRsZUVycm9yKERPTTo6Tm9k
ZUltcGwqIG4sIGJvb2wgZmxhdCwgY29uc3QgRE9NOjpBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSwg
aW50IHRhZ1ByaW9yaXR5KTsKKyAgICAKKyAgICAvLyBUaGUgY3VycmVudGx5IGFjdGl2ZSBlbGVt
ZW50ICh0aGUgb25lIG5ldyBlbGVtZW50cyB3aWxsIGJlIGFkZGVkIHRvKS4gIENhbiBiZSBhIERv
Y3VtZW50RnJhZ21lbnQsIGEgRG9jdW1lbnQgb3IgYW4gRWxlbWVudC4KKyAgICBET006Ok5vZGVJ
bXBsKiBjdXJyZW50OwogCi0gICAgLyoKLSAgICAgKiBUaGUgY3VycmVudGx5IGFjdGl2ZSBlbGVt
ZW50ICh0aGUgb25lIG5ldyBlbGVtZW50cyB3aWxsIGJlIGFkZGVkIHRvKQotICAgICAqLwotICAg
IERPTTo6Tm9kZUltcGwgKmN1cnJlbnQ7CiAgICAgYm9vbCBjdXJyZW50SXNSZWZlcmVuY2VkOwog
CiAgICAgSFRNTFN0YWNrRWxlbSAqYmxvY2tTdGFjazsKIAotICAgIHZvaWQgcHVzaEJsb2NrKCBp
bnQgX2lkLCBpbnQgX2xldmVsKTsKLQotICAgIHZvaWQgcG9wQmxvY2soIGludCBfaWQgKTsKKyAg
ICB2b2lkIHB1c2hCbG9jayhjb25zdCBET006OkF0b21pY1N0cmluZyYgdGFnTmFtZSwgaW50IF9s
ZXZlbCk7CisgICAgdm9pZCBwb3BCbG9jayhjb25zdCBET006OkF0b21pY1N0cmluZyYgdGFnTmFt
ZSk7CisgICAgdm9pZCBwb3BCbG9jayhjb25zdCBET006OlF1YWxpZmllZE5hbWUmIHFOYW1lKSB7
IHJldHVybiBwb3BCbG9jayhxTmFtZS5sb2NhbE5hbWUoKSk7IH0gLy8gQ29udmVuaWVuY2UgZnVu
Y3Rpb24gZm9yIHJlYWRhYmlsaXR5LgogICAgIHZvaWQgcG9wT25lQmxvY2soYm9vbCBkZWxCbG9j
ayA9IHRydWUpOwogICAgIHZvaWQgcG9wSW5saW5lQmxvY2tzKCk7CiAKQEAgLTEyOSwxNiArMTE4
LDE4IEBAIHByb3RlY3RlZDoKIAogICAgIHZvaWQgY3JlYXRlSGVhZCgpOwogCi0gICAgYm9vbCBp
c1Jlc2lkdWFsU3R5bGVUYWcoaW50IF9pZCk7Ci0gICAgYm9vbCBpc0FmZmVjdGVkQnlSZXNpZHVh
bFN0eWxlKGludCBfaWQpOworICAgIGJvb2wgaXNSZXNpZHVhbFN0eWxlVGFnKGNvbnN0IERPTTo6
QXRvbWljU3RyaW5nJiB0YWdOYW1lKTsKKyAgICBib29sIGlzQWZmZWN0ZWRCeVJlc2lkdWFsU3R5
bGUoY29uc3QgRE9NOjpBdG9taWNTdHJpbmcmIHRhZ05hbWUpOwogICAgIHZvaWQgaGFuZGxlUmVz
aWR1YWxTdHlsZUNsb3NlVGFnQWNyb3NzQmxvY2tzKEhUTUxTdGFja0VsZW0qIGVsZW0pOwogICAg
IHZvaWQgcmVvcGVuUmVzaWR1YWxTdHlsZVRhZ3MoSFRNTFN0YWNrRWxlbSogZWxlbSwgRE9NOjpO
b2RlSW1wbCogbWFsZm9ybWVkVGFibGVQYXJlbnQpOwogCi0gICAgYm9vbCBhbGxvd05lc3RlZFJl
ZHVuZGFudFRhZyhpbnQgX2lkKTsKKyAgICBib29sIGFsbG93TmVzdGVkUmVkdW5kYW50VGFnKGNv
bnN0IERPTTo6QXRvbWljU3RyaW5nJiB0YWdOYW1lKTsKICAgICAKLSAgICBzdGF0aWMgYm9vbCBp
c0hlYWRlclRhZyhpbnQgX2lkKTsKKyAgICBzdGF0aWMgYm9vbCBpc0hlYWRlclRhZyhjb25zdCBE
T006OkF0b21pY1N0cmluZyYgdGFnTmFtZSk7CiAgICAgdm9pZCBwb3BOZXN0ZWRIZWFkZXJUYWco
KTsKIAorICAgIGJvb2wgaXNJbmxpbmUoRE9NOjpOb2RlSW1wbCogbm9kZSkgY29uc3Q7CisgICAg
CiAgICAgLyoKICAgICAgKiBjdXJyZW50bHkgYWN0aXZlIGZvcm0KICAgICAgKi8KQEAgLTE3NSwx
OCArMTY2LDEyIEBAIHByb3RlY3RlZDoKICAgICAvKgogICAgICAqIHRlbGxzIHRoZSBwYXJzZXIg
dG8gZGlzY2FyZCBhbGwgdGFncywgdW50aWwgaXQgcmVhY2hlcyB0aGUgb25lIHNwZWNpZmllZAog
ICAgICAqLwotICAgIGludCBkaXNjYXJkX3VudGlsOworICAgIERPTTo6QXRvbWljU3RyaW5nIGRp
c2NhcmRfdW50aWw7CiAKICAgICBib29sIGhlYWRMb2FkZWQ7CiAgICAgaW50IGluU3RyYXlUYWJs
ZUNvbnRlbnQ7CiAKICAgICBib29sIGluY2x1ZGVzQ29tbWVudHNJbkRPTTsKLSAgICAKLSAgICB1
c2hvcnQgZm9yYmlkZGVuVGFnW0lEX0xBU1RfVEFHICsgMV07Ci0gICAgCi0jaWYgU1BFRURfREVC
VUcgPiAwCi0gICAgUVRpbWUgcXQ7Ci0jZW5kaWYKIH07CiAKICNlbmRpZiAvLyBIVE1MUEFSU0VS
X0gKSW5kZXg6IGtodG1sL2h0bWwvaHRtbHRva2VuaXplci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sdG9rZW5pemVyLmNwcCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS45MwpkaWZmIC11IC1wIC1yMS45MyBraHRtbC9odG1sL2h0bWx0b2tl
bml6ZXIuY3BwCi0tLSBraHRtbC9odG1sL2h0bWx0b2tlbml6ZXIuY3BwCTE3IEp1biAyMDA1IDIw
OjAwOjEwIC0wMDAwCTEuOTMKKysrIGtodG1sL2h0bWwvaHRtbHRva2VuaXplci5jcHAJMjIgSnVu
IDIwMDUgMjM6MjM6MzUgLTAwMDAKQEAgLTM5LDcgKzM5LDYgQEAKICNpbmNsdWRlICJodG1sL2h0
bWx0b2tlbml6ZXIuaCIKICNpbmNsdWRlICJodG1sL2h0bWxfZG9jdW1lbnRpbXBsLmgiCiAjaW5j
bHVkZSAiaHRtbC9odG1scGFyc2VyLmgiCi0jaW5jbHVkZSAiaHRtbC9kdGQuaCIKIAogI2luY2x1
ZGUgIm1pc2MvbG9hZGVyLmgiCiAjaW5jbHVkZSAibWlzYy9odG1saGFzaGVzLmgiCkBAIC02Myw3
ICs2MiwxMCBAQCB1c2luZyBET006OkRPTVN0cmluZzsKIHVzaW5nIERPTTo6RE9NU3RyaW5nSW1w
bDsKIHVzaW5nIERPTTo6RG9jdW1lbnRJbXBsOwogdXNpbmcgRE9NOjplbXB0eUF0b207Ci11c2lu
ZyBET006OmVuZFRhZ1JlcXVpcmVtZW50OwordXNpbmcgRE9NOjpjb21tZW50QXRvbTsKK3VzaW5n
IERPTTo6bnVsbEF0b207Cit1c2luZyBET006OnRleHRBdG9tOwordXNpbmcgRE9NOjpIVE1MTmFt
ZXM7CiAKIC8vIHR1cm4gb2ZmIGlubGluaW5nIHRvIHZvaWQgd2FybmluZyB3aXRoIG5ld2VyIGdj
YwogI3VuZGVmIF9faW5saW5lCkBAIC0yMzksNyArMjQxLDcgQEAgSFRNTFRva2VuaXplcjo6SFRN
TFRva2VuaXplcihET006OkRvY3VtZQogICAgIHNjcmlwdENvZGUgPSAwOwogICAgIHNjcmlwdENv
ZGVTaXplID0gc2NyaXB0Q29kZU1heFNpemUgPSBzY3JpcHRDb2RlUmVzeW5jID0gMDsKICAgICBj
aGFyc2V0cyA9IEtHbG9iYWw6OmNoYXJzZXRzKCk7Ci0gICAgcGFyc2VyID0gbmV3IEtIVE1MUGFy
c2VyKF92aWV3LCBfZG9jLCBpbmNsdWRlc0NvbW1lbnRzKTsKKyAgICBwYXJzZXIgPSBuZXcgSFRN
TFBhcnNlcihfdmlldywgX2RvYywgaW5jbHVkZXNDb21tZW50cyk7CiAgICAgbV9leGVjdXRpbmdT
Y3JpcHQgPSAwOwogICAgIGxvYWRpbmdFeHRTY3JpcHQgPSBmYWxzZTsKICAgICBvbkhvbGQgPSBm
YWxzZTsKQEAgLTI1OSw3ICsyNjEsNyBAQCBIVE1MVG9rZW5pemVyOjpIVE1MVG9rZW5pemVyKERP
TTo6RG9jdW1lCiAgICAgc2NyaXB0Q29kZSA9IDA7CiAgICAgc2NyaXB0Q29kZVNpemUgPSBzY3Jp
cHRDb2RlTWF4U2l6ZSA9IHNjcmlwdENvZGVSZXN5bmMgPSAwOwogICAgIGNoYXJzZXRzID0gS0ds
b2JhbDo6Y2hhcnNldHMoKTsKLSAgICBwYXJzZXIgPSBuZXcgS0hUTUxQYXJzZXIoaSwgX2RvYywg
aW5jbHVkZXNDb21tZW50cyk7CisgICAgcGFyc2VyID0gbmV3IEhUTUxQYXJzZXIoaSwgX2RvYywg
aW5jbHVkZXNDb21tZW50cyk7CiAgICAgbV9leGVjdXRpbmdTY3JpcHQgPSAwOwogICAgIGxvYWRp
bmdFeHRTY3JpcHQgPSBmYWxzZTsKICAgICBvbkhvbGQgPSBmYWxzZTsKQEAgLTQ1MSwxMCArNDUz
LDEwIEBAIHZvaWQgSFRNTFRva2VuaXplcjo6cGFyc2VTcGVjaWFsKFRva2VuaXoKICAgICAgICAg
ICAgIGVsc2UgewogICAgICAgICAgICAgICAgIHByb2Nlc3NMaXN0aW5nKFRva2VuaXplclN0cmlu
ZyhzY3JpcHRDb2RlLCBzY3JpcHRDb2RlU2l6ZSkpOwogICAgICAgICAgICAgICAgIHByb2Nlc3NU
b2tlbigpOwotICAgICAgICAgICAgICAgIGlmICggc3R5bGUgKSAgICAgICAgIHsgY3VyclRva2Vu
LmlkID0gSURfU1RZTEUgKyBJRF9DTE9TRV9UQUc7IH0KLSAgICAgICAgICAgICAgICBlbHNlIGlm
ICggdGV4dGFyZWEgKSB7IGN1cnJUb2tlbi5pZCA9IElEX1RFWFRBUkVBICsgSURfQ0xPU0VfVEFH
OyB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoIHRpdGxlICkgeyBjdXJyVG9rZW4uaWQgPSBJ
RF9USVRMRSArIElEX0NMT1NFX1RBRzsgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKCB4bXAg
KSAgeyBjdXJyVG9rZW4uaWQgPSBJRF9YTVAgKyBJRF9DTE9TRV9UQUc7IH0KKyAgICAgICAgICAg
ICAgICBpZiAoIHN0eWxlICkgICAgICAgICB7IGN1cnJUb2tlbi50YWdOYW1lID0gSFRNTE5hbWVz
OjpzdHlsZSgpLmxvY2FsTmFtZSgpOyBjdXJyVG9rZW4uYmVnaW5UYWcgPSBmYWxzZTsgfQorICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKCB0ZXh0YXJlYSApIHsgY3VyclRva2VuLnRhZ05hbWUgPSBI
VE1MTmFtZXM6OnRleHRhcmVhKCkubG9jYWxOYW1lKCk7IGN1cnJUb2tlbi5iZWdpblRhZyA9IGZh
bHNlOyB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoIHRpdGxlICkgeyBjdXJyVG9rZW4udGFn
TmFtZSA9IEhUTUxOYW1lczo6dGl0bGUoKS5sb2NhbE5hbWUoKTsgY3VyclRva2VuLmJlZ2luVGFn
ID0gZmFsc2U7IH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmICggeG1wICkgIHsgY3VyclRva2Vu
LnRhZ05hbWUgPSBIVE1MTmFtZXM6OnhtcCgpLmxvY2FsTmFtZSgpOyBjdXJyVG9rZW4uYmVnaW5U
YWcgPSBmYWxzZTsgfQogICAgICAgICAgICAgICAgIHByb2Nlc3NUb2tlbigpOwogICAgICAgICAg
ICAgICAgIHN0eWxlID0gc2NyaXB0ID0gc3R5bGUgPSB0ZXh0YXJlYSA9IHRpdGxlID0geG1wID0g
ZmFsc2U7CiAgICAgICAgICAgICAgICAgdHF1b3RlID0gTm9RdW90ZTsKQEAgLTUyNCw3ICs1MjYs
OCBAQCB2b2lkIEhUTUxUb2tlbml6ZXI6OnNjcmlwdEhhbmRsZXIoKQogICAgIHByb2Nlc3NMaXN0
aW5nKFRva2VuaXplclN0cmluZyhzY3JpcHRDb2RlLCBzY3JpcHRDb2RlU2l6ZSkpOwogICAgIFFT
dHJpbmcgZXhTY3JpcHQoIGJ1ZmZlciwgZGVzdC1idWZmZXIgKTsKICAgICBwcm9jZXNzVG9rZW4o
KTsKLSAgICBjdXJyVG9rZW4uaWQgPSBJRF9TQ1JJUFQgKyBJRF9DTE9TRV9UQUc7CisgICAgY3Vy
clRva2VuLnRhZ05hbWUgPSBIVE1MTmFtZXM6OnNjcmlwdCgpLmxvY2FsTmFtZSgpOworICAgIGN1
cnJUb2tlbi5iZWdpblRhZyA9IGZhbHNlOwogICAgIHByb2Nlc3NUb2tlbigpOwogCiAgICAgVG9r
ZW5pemVyU3RyaW5nICpzYXZlZFByZXBlbmRpbmdTcmMgPSBjdXJyZW50UHJlcGVuZGluZ1NyYzsK
QEAgLTcwMSwxMCArNzA0LDExIEBAIHZvaWQgSFRNTFRva2VuaXplcjo6cGFyc2VDb21tZW50KFRv
a2VuaXoKICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrU2NyaXB0QnVmZmVyKCk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBzY3JpcHRDb2RlWyBzY3JpcHRDb2RlU2l6ZSBdID0gMDsKICAg
ICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdENvZGVbIHNjcmlwdENvZGVTaXplICsgMSBdID0g
MDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJUb2tlbi5pZCA9IElEX0NPTU1FTlQ7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBjdXJyVG9rZW4udGFnTmFtZSA9IGNvbW1lbnRBdG9tOwog
ICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0xpc3RpbmcoVG9rZW5pemVyU3RyaW5nKHNj
cmlwdENvZGUsIHNjcmlwdENvZGVTaXplIC0gZW5kQ2hhcnNDb3VudCkpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgcHJvY2Vzc1Rva2VuKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjdXJy
VG9rZW4uaWQgPSBJRF9DT01NRU5UICsgSURfQ0xPU0VfVEFHOworICAgICAgICAgICAgICAgICAg
ICAgICAgY3VyclRva2VuLnRhZ05hbWUgPSBjb21tZW50QXRvbTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGN1cnJUb2tlbi5iZWdpblRhZyA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAg
ICAgcHJvY2Vzc1Rva2VuKCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgc2NyaXB0Q29kZVNpemUgPSAwOwpAQCAtMTA0NywyNiArMTA1MSwxNiBAQCB2b2lkIEhU
TUxUb2tlbml6ZXI6OnBhcnNlVGFnKFRva2VuaXplclN0CiAgICAgICAgICAgICAgICAgICAgIC8v
IFN0YXJ0IFRhZwogICAgICAgICAgICAgICAgICAgICBiZWdpblRhZyA9IHRydWU7CiAKLSAgICAg
ICAgICAgICAgICAvLyBBY2NlcHQgZW1wdHkgeG1sIHRhZ3MgbGlrZSA8YnIvPi4gIFdlIHRyaW0g
b2ZmIHRoZSAiLyIgc28gdGhhdCB3aGVuIHdlIGNhbGwKLSAgICAgICAgICAgICAgICAvLyBnZXRU
YWdJRCwgd2UnbGwgbG9vayB1cCAiYnIiIGFzIHRoZSB0YWcgbmFtZSBhbmQgbm90ICJici8iLgor
ICAgICAgICAgICAgICAgIC8vIElnbm9yZSB0aGUgLyBpbiBmYWtlIHhtbCB0YWdzIGxpa2UgPGJy
Lz4uICBXZSB0cmltIG9mZiB0aGUgIi8iIHNvIHRoYXQgd2UnbGwgZ2V0ICJiciIgYXMgdGhlIHRh
ZyBuYW1lIGFuZCBub3QgImJyLyIuCiAgICAgICAgICAgICAgICAgaWYobGVuID4gMSAmJiBwdHJb
bGVuLTFdID09ICcvJyApCiAgICAgICAgICAgICAgICAgICAgIHB0clstLWxlbl0gPSAnXDAnOwog
Ci0gICAgICAgICAgICAgICAgLy8gTG9vayB1cCB0aGUgdGFnSUQgZm9yIHRoZSBzcGVjaWZpZWQg
dGFnIG5hbWUgKG5vdyB0aGF0IHdlJ3ZlIHNoYXZlZCBvZmYgYW55Ci0gICAgICAgICAgICAgICAg
Ly8gaW52YWxpZCAvIHRoYXQgbWlnaHQgaGF2ZSBmb2xsb3dlZCB0aGUgbmFtZSkuCi0gICAgICAg
ICAgICAgICAgdW5zaWduZWQgc2hvcnQgdGFnSUQgPSBnZXRUYWdJRChwdHIsIGxlbik7Ci0gICAg
ICAgICAgICAgICAgaWYgKCF0YWdJRCkgewotICAgICAgICAgICAgICAgICAgICBET01TdHJpbmcg
dGFnTmFtZShwdHIpOwotICAgICAgICAgICAgICAgICAgICBEb2N1bWVudEltcGwgKmRvYyA9IHBh
cnNlci0+ZG9jUHRyKCktPmRvY3VtZW50KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChkb2Mt
PmlzVmFsaWROYW1lKHRhZ05hbWUpKQotICAgICAgICAgICAgICAgICAgICAgICAgdGFnSUQgPSBw
YXJzZXItPmRvY1B0cigpLT5kb2N1bWVudCgpLT50YWdJZCgwLCB0YWdOYW1lLmltcGxlbWVudGF0
aW9uKCksIGZhbHNlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHRh
Z0lEKSB7Ci0jaWZkZWYgVE9LRU5fREVCVUcKLSAgICAgICAgICAgICAgICAgICAgUUNTdHJpbmcg
dG1wKHB0ciwgbGVuKzEpOwotICAgICAgICAgICAgICAgICAgICBrZERlYnVnKCA2MDM2ICkgPDwg
ImZvdW5kIHRhZyBpZD0iIDw8IHRhZ0lEIDw8ICI6ICIgPDwgdG1wLmRhdGEoKSA8PCBlbmRsOwot
I2VuZGlmCi0gICAgICAgICAgICAgICAgICAgIGN1cnJUb2tlbi5pZCA9IGJlZ2luVGFnID8gdGFn
SUQgOiB0YWdJRCArIElEX0NMT1NFX1RBRzsKKyAgICAgICAgICAgICAgICAvLyBOb3cgdGhhdCB3
ZSd2ZSBzaGF2ZWQgb2ZmIGFueSBpbnZhbGlkIC8gdGhhdCBtaWdodCBoYXZlIGZvbGxvd2VkIHRo
ZSBuYW1lKSwgbWFrZSB0aGUgdGFnLgorICAgICAgICAgICAgICAgIERPTVN0cmluZyB0YWdOYW1l
KHB0cik7CisgICAgICAgICAgICAgICAgRG9jdW1lbnRJbXBsICpkb2MgPSBwYXJzZXItPmRvY1B0
cigpLT5kb2N1bWVudCgpOworICAgICAgICAgICAgICAgIGlmIChkb2MtPmlzVmFsaWROYW1lKHRh
Z05hbWUpKSB7CisgICAgICAgICAgICAgICAgICAgIGN1cnJUb2tlbi50YWdOYW1lID0gQXRvbWlj
U3RyaW5nKHRhZ05hbWUubG93ZXIoKSk7IC8vIFdlIGhhdmUgdG8gY2Fub25pY2FsaXplIG9uIGxv
d2VyLWNhc2UuCisgICAgICAgICAgICAgICAgICAgIGN1cnJUb2tlbi5iZWdpblRhZyA9IGJlZ2lu
VGFnOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBkZXN0ID0gYnVmZmVyOwog
ICAgICAgICAgICAgICAgIHRhZyA9IFNlYXJjaEF0dHJpYnV0ZTsKQEAgLTExMTgsMTUgKzExMTIs
NiBAQCB2b2lkIEhUTUxUb2tlbml6ZXI6OnBhcnNlVGFnKFRva2VuaXplclN0CiAgICAgICAgICAg
ICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyTmFt
ZSA9IFFTdHJpbmc6OmZyb21MYXRpbjEoUUNTdHJpbmcoY0J1ZmZlciwgY0J1ZmZlclBvcysxKS5k
YXRhKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJOYW1lUHJlc2VudCA9ICFh
dHRyTmFtZS5pc0VtcHR5KCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlz
IGlzIGEgZGVsaWJlcmF0ZSBxdWlyayB0byBtYXRjaCBNb3ppbGxhIGFuZCBPcGVyYS4gIFdlIGhh
dmUgdG8gZG8gdGhpcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNpbmNlIHNpdGVz
IHRoYXQgdXNlIHRoZSAic3RhbmRhcmRzLWNvbXBsaWFudCIgcGF0aCBzb21ldGltZXMgc2VuZAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDxzY3JpcHQgc3JjPSJmb28uanMiLz4uICBC
b3RoIE1veiBhbmQgT3BlcmEgd2lsbCBob25vciB0aGlzLCBkZXNwaXRlIGl0Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gYmVpbmcgYm9ndXMgSFRNTC4gIFRoZXkgZG8gbm90IGhvbm9y
IHRoZSAiLyIgZm9yIG90aGVyIHRhZ3MuICBUaGlzIGJlaGF2aW9yCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gYWxzbyBkZXZpYXRlcyBmcm9tIFdpbklFLCBidXQgaW4gdGhpcyBjYXNl
IHdlJ2xsIGp1c3QgY29weSBNb3ogYW5kIE9wZXJhLgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChjdXJyVG9rZW4uaWQgPT0gSURfU0NSSVBUICYmIGN1cmNoYXIgPT0gJz4nICYmCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJOYW1lID09ICIvIikKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY3VyclRva2VuLmZsYXQgPSB0cnVlOwogICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgICAgICAgICBkZXN0ID0gYnVmZmVyOwpAQCAtMTMyOCwxOCArMTMxMywxNSBAQCB2b2lkIEhU
TUxUb2tlbml6ZXI6OnBhcnNlVGFnKFRva2VuaXplclN0CiAgICAgICAgICAgICBpZiAoKnNyYyAh
PSAnPCcpCiAgICAgICAgICAgICAgICAgKytzcmM7CiAKLSAgICAgICAgICAgIGlmICggIWN1cnJU
b2tlbi5pZCApIC8vc3RvcCBpZiB0YWcgaXMgdW5rbm93bgorICAgICAgICAgICAgaWYgKGN1cnJU
b2tlbi50YWdOYW1lID09IG51bGxBdG9tKSAvL3N0b3AgaWYgdGFnIGlzIHVua25vd24KICAgICAg
ICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgICAgIHVpbnQgdGFnSUQgPSBjdXJyVG9rZW4u
aWQ7CisgICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUgPSBjdXJyVG9rZW4u
dGFnTmFtZTsKICNpZiBkZWZpbmVkKFRPS0VOX0RFQlVHKSAmJiBUT0tFTl9ERUJVRyA+IDAKICAg
ICAgICAgICAgIGtkRGVidWcoIDYwMzYgKSA8PCAiYXBwZW5kaW5nIFRhZzogIiA8PCB0YWdJRCA8
PCBlbmRsOwogI2VuZGlmCi0gICAgICAgICAgICBib29sIGJlZ2luVGFnID0gIWN1cnJUb2tlbi5m
bGF0ICYmICh0YWdJRCA8PSBJRF9DTE9TRV9UQUcpOwotCi0gICAgICAgICAgICBpZiAodGFnSUQg
PiBJRF9DTE9TRV9UQUcpCi0gICAgICAgICAgICAgICAgdGFnSUQgLT0gSURfQ0xPU0VfVEFHOwot
ICAgICAgICAgICAgZWxzZSBpZiAodGFnSUQgPT0gSURfU0NSSVBUKSB7CisgICAgICAgICAgICBi
b29sIGJlZ2luVGFnID0gIWN1cnJUb2tlbi5mbGF0ICYmIGN1cnJUb2tlbi5iZWdpblRhZzsKKyAg
ICAgICAgICAgIGlmIChiZWdpblRhZyAmJiBjdXJyVG9rZW4udGFnTmFtZSA9PSBIVE1MTmFtZXM6
OnNjcmlwdCgpKSB7CiAgICAgICAgICAgICAgICAgQXR0cmlidXRlSW1wbCogYSA9IDA7CiAgICAg
ICAgICAgICAgICAgYm9vbCBmb3VuZFR5cGVBdHRyaWJ1dGUgPSBmYWxzZTsKICAgICAgICAgICAg
ICAgICBzY3JpcHRTcmMgPSBRU3RyaW5nOjpudWxsOwpAQCAtMTQxNiw3MCArMTM5OCw1MyBAQCB2
b2lkIEhUTUxUb2tlbml6ZXI6OnBhcnNlVGFnKFRva2VuaXplclN0CiAKICAgICAgICAgICAgIC8v
IHdlIGhhdmUgdG8gdGFrZSBjYXJlIHRvIGNsb3NlIHRoZSBwcmUgYmxvY2sgaW4KICAgICAgICAg
ICAgIC8vIGNhc2Ugd2UgZW5jb3VudGVyIGFuIHVuYWxsb3dlZCBlbGVtZW50Li4uLgotICAgICAg
ICAgICAgaWYocHJlICYmIGJlZ2luVGFnICYmICFET006OmNoZWNrQ2hpbGQoSURfUFJFLCB0YWdJ
RCwgIXBhcnNlci0+ZG9jKCktPmluQ29tcGF0TW9kZSgpKSkgewotICAgICAgICAgICAgICAgIGtk
RGVidWcoNjAzNikgPDwgIiBub3QgYWxsb3dlZCBpbiA8cHJlPiAiIDw8IChpbnQpdGFnSUQgPDwg
ZW5kbDsKKyAgICAgICAgICAgIGlmIChwcmUgJiYgYmVnaW5UYWcgLyogRklYTUU6IGNoZWNrQ2hp
bGQhISEgJiYgIURPTTo6Y2hlY2tDaGlsZChJRF9QUkUsIHRhZ0lELCAhcGFyc2VyLT5kb2MoKS0+
aW5Db21wYXRNb2RlKCkpKi8pCiAgICAgICAgICAgICAgICAgcHJlID0gZmFsc2U7Ci0gICAgICAg
ICAgICB9CiAKLSAgICAgICAgICAgIHN3aXRjaCggdGFnSUQgKSB7Ci0gICAgICAgICAgICBjYXNl
IElEX1BSRToKKyAgICAgICAgICAgIGlmICh0YWdOYW1lID09IEhUTUxOYW1lczo6cHJlKCkpIHsK
ICAgICAgICAgICAgICAgICBwcmVQb3MgPSAwOwogICAgICAgICAgICAgICAgIHByZSA9IGJlZ2lu
VGFnOwogICAgICAgICAgICAgICAgIGRpc2NhcmQgPSBMRkRpc2NhcmQ7IC8vIERpc2NhcmQgdGhl
IGZpcnN0IExGIGFmdGVyIHdlIG9wZW4gYSBwcmUuCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICBjYXNlIElEX1NDUklQVDoKKyAgICAgICAgICAgIH0gZWxzZSBpZiAodGFnTmFt
ZSA9PSBIVE1MTmFtZXM6OnNjcmlwdCgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGJlZ2luVGFn
KSB7CiAgICAgICAgICAgICAgICAgICAgIHNlYXJjaFN0b3BwZXIgPSBzY3JpcHRFbmQ7CiAgICAg
ICAgICAgICAgICAgICAgIHNlYXJjaFN0b3BwZXJMZW4gPSA4OwogICAgICAgICAgICAgICAgICAg
ICBzY3JpcHQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBwYXJzZVNwZWNpYWwoc3JjKTsK
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAodGFnSUQgPD0gSURf
Q0xPU0VfVEFHKSB7IC8vIEhhbmRsZSA8c2NyaXB0IHNyYz0iZm9vIi8+Ci0gICAgICAgICAgICAg
ICAgICAgIHNjcmlwdCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIHNjcmlwdEhhbmRsZXIo
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBjYXNlIElEX1NUWUxFOgorICAgICAgICAgICAgfSBlbHNlIGlmICh0YWdOYW1lID09IEhUTUxO
YW1lczo6c3R5bGUoKSkgewogICAgICAgICAgICAgICAgIGlmIChiZWdpblRhZykgewogICAgICAg
ICAgICAgICAgICAgICBzZWFyY2hTdG9wcGVyID0gc3R5bGVFbmQ7CiAgICAgICAgICAgICAgICAg
ICAgIHNlYXJjaFN0b3BwZXJMZW4gPSA3OwogICAgICAgICAgICAgICAgICAgICBzdHlsZSA9IHRy
dWU7CiAgICAgICAgICAgICAgICAgICAgIHBhcnNlU3BlY2lhbChzcmMpOwogICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgSURfVEVYVEFS
RUE6CisgICAgICAgICAgICB9IGVsc2UgaWYgKHRhZ05hbWUgPT0gSFRNTE5hbWVzOjp0ZXh0YXJl
YSgpKSB7CiAgICAgICAgICAgICAgICAgaWYoYmVnaW5UYWcpIHsKICAgICAgICAgICAgICAgICAg
ICAgc2VhcmNoU3RvcHBlciA9IHRleHRhcmVhRW5kOwogICAgICAgICAgICAgICAgICAgICBzZWFy
Y2hTdG9wcGVyTGVuID0gMTA7CiAgICAgICAgICAgICAgICAgICAgIHRleHRhcmVhID0gdHJ1ZTsK
ICAgICAgICAgICAgICAgICAgICAgcGFyc2VTcGVjaWFsKHNyYyk7CiAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBJRF9USVRMRToKLSAg
ICAgICAgICAgICAgICBpZiAoYmVnaW5UYWcpIHsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAodGFn
TmFtZSA9PSBIVE1MTmFtZXM6OnRpdGxlKCkpIHsKKyAgICAgICAgICAgICAgICAgaWYgKGJlZ2lu
VGFnKSB7CiAgICAgICAgICAgICAgICAgICAgIHNlYXJjaFN0b3BwZXIgPSB0aXRsZUVuZDsKICAg
ICAgICAgICAgICAgICAgICAgc2VhcmNoU3RvcHBlckxlbiA9IDc7CiAgICAgICAgICAgICAgICAg
ICAgIHRpdGxlID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgcGFyc2VTcGVjaWFsKHNyYyk7
CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
Y2FzZSBJRF9YTVA6CisgICAgICAgICAgICB9IGVsc2UgaWYgKHRhZ05hbWUgPT0gSFRNTE5hbWVz
Ojp4bXAoKSkgewogICAgICAgICAgICAgICAgIGlmIChiZWdpblRhZykgewogICAgICAgICAgICAg
ICAgICAgICBzZWFyY2hTdG9wcGVyID0geG1wRW5kOwogICAgICAgICAgICAgICAgICAgICBzZWFy
Y2hTdG9wcGVyTGVuID0gNTsKICAgICAgICAgICAgICAgICAgICAgeG1wID0gdHJ1ZTsKICAgICAg
ICAgICAgICAgICAgICAgcGFyc2VTcGVjaWFsKHNyYyk7CiAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBJRF9TRUxFQ1Q6CisgICAgICAg
ICAgICB9IGVsc2UgaWYgKHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpzZWxlY3QoKSkKICAgICAgICAg
ICAgICAgICBzZWxlY3QgPSBiZWdpblRhZzsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIGNhc2UgSURfUExBSU5URVhUOgorICAgICAgICAgICAgZWxzZSBpZiAodGFnTmFtZSA9
PSBIVE1MTmFtZXM6OnBsYWludGV4dCgpKQogICAgICAgICAgICAgICAgIHBsYWludGV4dCA9IGJl
Z2luVGFnOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICByZXR1cm47IC8vIEZpbmlzaGVkIHBhcnNpbmcgdGFnIQorICAgICAgICAgICAgcmV0dXJu
OyAvLyBGaW5pc2hlZCBwYXJzaW5nIHRhZzsKICAgICAgICAgfQogICAgICAgICB9IC8vIGVuZCBz
d2l0Y2gKICAgICB9CkBAIC0xOTg5LDEwICsxOTU0LDEwIEBAIHZvaWQgSFRNTFRva2VuaXplcjo6
cHJvY2Vzc1Rva2VuKCkKICNlbmRpZgogICAgICAgICBjdXJyVG9rZW4udGV4dCA9IG5ldyBET01T
dHJpbmdJbXBsKCBidWZmZXIsIGRlc3QgLSBidWZmZXIgKTsKICAgICAgICAgY3VyclRva2VuLnRl
eHQtPnJlZigpOwotICAgICAgICBpZiAoY3VyclRva2VuLmlkICE9IElEX0NPTU1FTlQpCi0gICAg
ICAgICAgICBjdXJyVG9rZW4uaWQgPSBJRF9URVhUOworICAgICAgICBpZiAoY3VyclRva2VuLnRh
Z05hbWUgIT0gY29tbWVudEF0b20pCisgICAgICAgICAgICBjdXJyVG9rZW4udGFnTmFtZSA9IHRl
eHRBdG9tOwogICAgIH0KLSAgICBlbHNlIGlmKCFjdXJyVG9rZW4uaWQpIHsKKyAgICBlbHNlIGlm
IChjdXJyVG9rZW4udGFnTmFtZSA9PSBudWxsQXRvbSkgewogICAgICAgICBjdXJyVG9rZW4ucmVz
ZXQoKTsKICAgICAgICAgaWYgKGpzUHJveHkpCiAgICAgICAgICAgICBqc1Byb3h5LT5zZXRFdmVu
dEhhbmRsZXJMaW5lbm8obGluZW5vK3NyYy5saW5lQ291bnQoKSk7CkluZGV4OiBraHRtbC9odG1s
L2h0bWx0b2tlbml6ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9r
aHRtbC9odG1sL2h0bWx0b2tlbml6ZXIuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zNApkaWZm
IC11IC1wIC1yMS4zNCBraHRtbC9odG1sL2h0bWx0b2tlbml6ZXIuaAotLS0ga2h0bWwvaHRtbC9o
dG1sdG9rZW5pemVyLmgJMTEgTWF5IDIwMDUgMDU6NDk6MzQgLTAwMDAJMS4zNAorKysga2h0bWwv
aHRtbC9odG1sdG9rZW5pemVyLmgJMjIgSnVuIDIwMDUgMjM6MjM6MzUgLTAwMDAKQEAgLTM0LDgg
KzM0LDYgQEAKICNpbmNsdWRlIDxxcHRycXVldWUuaD4KIAogI2luY2x1ZGUgIm1pc2MvbG9hZGVy
X2NsaWVudC5oIgotI2luY2x1ZGUgIm1pc2MvaHRtbHRhZ3MuaCIKLSNpbmNsdWRlICJ4bWwvZG9t
X3N0cmluZ2ltcGwuaCIKICNpbmNsdWRlICJ4bWwveG1sX3Rva2VuaXplci5oIgogI2luY2x1ZGUg
Imh0bWwvaHRtbF9lbGVtZW50aW1wbC5oIgogI2luY2x1ZGUgInhtbC9kb21fZG9jaW1wbC5oIgpA
QCAtNDcsNyArNDUsNyBAQAogI2VuZGlmCiAKIGNsYXNzIEtDaGFyc2V0czsKLWNsYXNzIEtIVE1M
UGFyc2VyOworY2xhc3MgSFRNTFBhcnNlcjsKIGNsYXNzIEtIVE1MVmlldzsKIAogbmFtZXNwYWNl
IERPTSB7CkBAIC03MCwyMiArNjgsMjQgQEAgY2xhc3MgVG9rZW4KIHsKIHB1YmxpYzoKICAgICBU
b2tlbigpIHsKLSAgICAgICAgaWQgPSAwOwogICAgICAgICBhdHRycyA9IDA7CiAgICAgICAgIHRl
eHQgPSAwOworICAgICAgICBiZWdpblRhZyA9IHRydWU7CiAgICAgICAgIGZsYXQgPSBmYWxzZTsK
ICAgICAgICAgLy9xRGVidWcoIm5ldyB0b2tlbiwgY3JlYXRpbmcgJTA4bHgiLCBhdHRycyk7CiAg
ICAgfQorCiAgICAgflRva2VuKCkgewotICAgICAgICBpZihhdHRycykgYXR0cnMtPmRlcmVmKCk7
Ci0gICAgICAgIGlmKHRleHQpIHRleHQtPmRlcmVmKCk7CisgICAgICAgIGlmIChhdHRycykgYXR0
cnMtPmRlcmVmKCk7CisgICAgICAgIGlmICh0ZXh0KSB0ZXh0LT5kZXJlZigpOwogICAgIH0KKwog
ICAgIHZvaWQgYWRkQXR0cmlidXRlKERPTTo6RG9jdW1lbnRJbXBsKiBkb2MsIFFDaGFyKiBidWZm
ZXIsIGNvbnN0IFFTdHJpbmcmIGF0dHJOYW1lLCBjb25zdCBET006OkF0b21pY1N0cmluZyYgdikK
ICAgICB7CiAgICAgICAgIERPTTo6QXR0cmlidXRlSW1wbCogYSA9IDA7Ci0gICAgICAgIGlmKGJ1
ZmZlci0+dW5pY29kZSgpKQorICAgICAgICBpZiAoYnVmZmVyLT51bmljb2RlKCkpCiAgICAgICAg
ICAgICBhID0gbmV3IERPTTo6TWFwcGVkQXR0cmlidXRlSW1wbChidWZmZXItPnVuaWNvZGUoKSwg
dik7Ci0gICAgICAgIGVsc2UgaWYgKCAhYXR0ck5hbWUuaXNFbXB0eSgpICYmIGF0dHJOYW1lICE9
ICIvIiApCisgICAgICAgIGVsc2UgaWYgKCFhdHRyTmFtZS5pc0VtcHR5KCkgJiYgYXR0ck5hbWUg
IT0gIi8iKQogICAgICAgICAgICAgYSA9IG5ldyBET006Ok1hcHBlZEF0dHJpYnV0ZUltcGwoZG9j
LT5hdHRySWQoMCwgRE9NOjpET01TdHJpbmcoYXR0ck5hbWUpLmltcGxlbWVudGF0aW9uKCksIGZh
bHNlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYpOwog
CkBAIC05NywyMyArOTcsMzMgQEAgcHVibGljOgogICAgICAgICAgICAgYXR0cnMtPmluc2VydEF0
dHJpYnV0ZShhKTsKICAgICAgICAgfQogICAgIH0KKworICAgIGJvb2wgaXNPcGVuVGFnKGNvbnN0
IERPTTo6UXVhbGlmaWVkTmFtZSYgZnVsbE5hbWUpIGNvbnN0IHsgcmV0dXJuIGJlZ2luVGFnICYm
IGZ1bGxOYW1lLmxvY2FsTmFtZSgpID09IHRhZ05hbWU7IH0KKyAgICBib29sIGlzQ2xvc2VUYWco
Y29uc3QgRE9NOjpRdWFsaWZpZWROYW1lJiBmdWxsTmFtZSkgY29uc3QgeyByZXR1cm4gIWJlZ2lu
VGFnICYmIGZ1bGxOYW1lLmxvY2FsTmFtZSgpID09IHRhZ05hbWU7IH0KKwogICAgIHZvaWQgcmVz
ZXQoKQogICAgIHsKLSAgICAgICAgaWYoYXR0cnMpIHsKKyAgICAgICAgaWYgKGF0dHJzKSB7CiAg
ICAgICAgICAgICBhdHRycy0+ZGVyZWYoKTsKICAgICAgICAgICAgIGF0dHJzID0gMDsKICAgICAg
ICAgfQotICAgICAgICBpZCA9IDA7Ci0gICAgICAgIGlmKHRleHQpIHsKKyAgICAgICAgCisgICAg
ICAgIHRhZ05hbWUgPSBET006Om51bGxBdG9tOworICAgICAgICAKKyAgICAgICAgaWYgKHRleHQp
IHsKICAgICAgICAgICAgIHRleHQtPmRlcmVmKCk7CiAgICAgICAgICAgICB0ZXh0ID0gMDsKICAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgYmVnaW5UYWcgPSB0cnVlOwogICAgICAgICBmbGF0
ID0gZmFsc2U7CiAgICAgfQorCiAgICAgRE9NOjpOYW1lZE1hcHBlZEF0dHJNYXBJbXBsKiBhdHRy
czsKICAgICBET006OkRPTVN0cmluZ0ltcGwqIHRleHQ7Ci0gICAgdXNob3J0IGlkOwotICAgIGJv
b2wgZmxhdDsKKyAgICBET006OkF0b21pY1N0cmluZyB0YWdOYW1lOworICAgIGJvb2wgYmVnaW5U
YWcgOiAxOworICAgIGJvb2wgZmxhdCA6IDE7CiB9OwogCiAvLyBUaGUgY291bnQgb2Ygc3BhY2Vz
IHVzZWQgZm9yIGVhY2ggdGFiLgpAQCAtMzY4LDcgKzM3OCw3IEBAIHByb3RlY3RlZDoKICAgICBU
b2tlbml6ZXJTdHJpbmcgc3JjOwogCiAgICAgS0NoYXJzZXRzICpjaGFyc2V0czsKLSAgICBLSFRN
TFBhcnNlciAqcGFyc2VyOworICAgIEhUTUxQYXJzZXIgKnBhcnNlcjsKIAogICAgIFFHdWFyZGVk
UHRyPEtIVE1MVmlldz4gdmlldzsKICAgICAKSW5kZXg6IGtodG1sL21pc2MvZGVjb2Rlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvbWlzYy9kZWNvZGVy
LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zNApkaWZmIC11IC1wIC1yMS4zNCBraHRtbC9t
aXNjL2RlY29kZXIuY3BwCi0tLSBraHRtbC9taXNjL2RlY29kZXIuY3BwCTIgSnVsIDIwMDQgMTc6
MDM6MzIgLTAwMDAJMS4zNAorKysga2h0bWwvbWlzYy9kZWNvZGVyLmNwcAkyMiBKdW4gMjAwNSAy
MzoyMzozNiAtMDAwMApAQCAtNDEsNiArNDEsMTIgQEAgdXNpbmcgbmFtZXNwYWNlIGtodG1sOwog
I2luY2x1ZGUgPGtkZWJ1Zy5oPgogI2luY2x1ZGUgPGtsb2NhbGUuaD4KIAorI2luY2x1ZGUgImh0
bWxuYW1lcy5oIgorCit1c2luZyBET006OkF0b21pY1N0cmluZzsKK3VzaW5nIERPTTo6SFRNTE5h
bWVzOwordXNpbmcgRE9NOjpudWxsQXRvbTsKKwogY2xhc3MgS2FuamlDb2RlCiB7CiBwdWJsaWM6
CkBAIC01MjYsMTIgKzUzMiw4IEBAIFFTdHJpbmcgRGVjb2Rlcjo6ZGVjb2RlKGNvbnN0IGNoYXIg
KmRhdGEKICAgICAgICAgICAgICAgICAgICAgICAgIGxlbisrOwogICAgICAgICAgICAgICAgICAg
ICB9CiAJCSAgICB0bXBbbGVuXSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGludCBpZCA9IGto
dG1sOjpnZXRUYWdJRCh0bXAsIGxlbik7Ci0gICAgICAgICAgICAgICAgICAgIGlmKGVuZCkgaWQg
Kz0gSURfQ0xPU0VfVEFHOwotCi0gICAgICAgICAgICAgICAgICAgIHN3aXRjaCggaWQgKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGNhc2UgSURfTUVUQToKLSAgICAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICBBdG9taWNTdHJpbmcgdGFnKHRtcCk7CisgICAgICAgICAgICAg
ICAgICAgIGlmICghZW5kICYmIHRhZyA9PSBIVE1MTmFtZXM6Om1ldGEoKSkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gZm91bmQgYSBtZXRhIHRhZy4uLgogICAgICAgICAgICAgICAgICAg
ICAgICAgLy9wdHIgKz0gNTsKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiBl
bmQgPSBwdHI7CkBAIC01NzAsMjggKzU3MiwxMCBAQCBRU3RyaW5nIERlY29kZXI6OmRlY29kZShj
b25zdCBjaGFyICpkYXRhCiAKIAkJCSAgICBwb3MgPSBlbmRwb3MgKyAxOwogCQkJfQotCQkgICAg
fQotICAgICAgICAgICAgICAgICAgICBjYXNlIChJRF9NRVRBK0lEX0NMT1NFX1RBRyk6Ci0gICAg
ICAgICAgICAgICAgICAgIGNhc2UgSURfU0NSSVBUOgotICAgICAgICAgICAgICAgICAgICBjYXNl
IChJRF9TQ1JJUFQrSURfQ0xPU0VfVEFHKToKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9O
T1NDUklQVDoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAoSURfTk9TQ1JJUFQrSURfQ0xPU0Vf
VEFHKToKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9TVFlMRToKLSAgICAgICAgICAgICAg
ICAgICAgY2FzZSAoSURfU1RZTEUrSURfQ0xPU0VfVEFHKToKLSAgICAgICAgICAgICAgICAgICAg
Y2FzZSBJRF9MSU5LOgotICAgICAgICAgICAgICAgICAgICBjYXNlIChJRF9MSU5LK0lEX0NMT1NF
X1RBRyk6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfT0JKRUNUOgotICAgICAgICAgICAg
ICAgICAgICBjYXNlIChJRF9PQkpFQ1QrSURfQ0xPU0VfVEFHKToKLSAgICAgICAgICAgICAgICAg
ICAgY2FzZSBJRF9USVRMRToKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAoSURfVElUTEUrSURf
Q0xPU0VfVEFHKToKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9CQVNFOgotICAgICAgICAg
ICAgICAgICAgICBjYXNlIChJRF9CQVNFK0lEX0NMT1NFX1RBRyk6Ci0gICAgICAgICAgICAgICAg
ICAgIGNhc2UgSURfSFRNTDoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9IRUFEOgotICAg
ICAgICAgICAgICAgICAgICBjYXNlIDA6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgKDAgKyBJ
RF9DTE9TRV9UQUcgKToKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgICAgICBkZWZhdWx0OgorCQkgICAgfSBlbHNlIGlmICh0YWcgIT0gSFRNTE5hbWVzOjpz
Y3JpcHQoKSAmJiB0YWcgIT0gSFRNTE5hbWVzOjpub3NjcmlwdCgpICYmIHRhZyAhPSBIVE1MTmFt
ZXM6OnN0eWxlKCkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWcgIT0gSFRN
TE5hbWVzOjpsaW5rKCkgJiYgdGFnICE9IEhUTUxOYW1lczo6bWV0YSgpICYmIHRhZyAhPSBIVE1M
TmFtZXM6Om9iamVjdCgpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnICE9
IEhUTUxOYW1lczo6dGl0bGUoKSAmJiB0YWcgIT0gSFRNTE5hbWVzOjpiYXNlKCkgJiYgdGFnICE9
IEhUTUxOYW1lczo6aHRtbCgpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFn
ICE9IEhUTUxOYW1lczo6aGVhZCgpICYmIHRhZyAhPSBudWxsQXRvbSkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgYm9keSA9IHRydWU7CiAjaWZkZWYgREVDT0RFX0RFQlVHCiAJCQlrZERlYnVn
KCA2MDA1ICkgPDwgIkRlY29kZXI6IG5vIGNoYXJzZXQgZm91bmQuIElkPSIgPDwgaWQgPDwgZW5k
bDsKSW5kZXg6IGtodG1sL21pc2MvaHRtbGhhc2hlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
L2N2cy9yb290L1dlYkNvcmUva2h0bWwvbWlzYy9odG1saGFzaGVzLmNwcCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS4xMApkaWZmIC11IC1wIC1yMS4xMCBraHRtbC9taXNjL2h0bWxoYXNoZXMuY3Bw
Ci0tLSBraHRtbC9taXNjL2h0bWxoYXNoZXMuY3BwCTUgSmFuIDIwMDUgMjI6NTY6NDYgLTAwMDAJ
MS4xMAorKysga2h0bWwvbWlzYy9odG1saGFzaGVzLmNwcAkyMiBKdW4gMjAwNSAyMzoyMzozNiAt
MDAwMApAQCAtMjUsMjIgKzI1LDEzIEBACiAvLyB0dXJuIG9mZiBpbmxpbmluZyB0byB2b2lkIHdh
cm5pbmcgd2l0aCBuZXdlciBnY2MKICN1bmRlZiBfX2lubGluZQogI2RlZmluZSBfX2lubGluZQot
I2luY2x1ZGUgImh0bWx0YWdzLmMiCiAjaW5jbHVkZSAiaHRtbGF0dHJzLmMiCiAjdW5kZWYgX19p
bmxpbmUKIAotdW5zaWduZWQgc2hvcnQga2h0bWw6OmdldFRhZ0lEKGNvbnN0IGNoYXIgKnRhZ1N0
ciwgaW50IGxlbikKK3Vuc2lnbmVkIHNob3J0IGtodG1sOjpnZXRBdHRySUQoY29uc3QgY2hhciAq
YXR0clN0ciwgaW50IGxlbikKIHsKLSAgICBjb25zdCBzdHJ1Y3QgdGFncyAqdGFnUHRyID0gZmlu
ZFRhZyh0YWdTdHIsIGxlbik7Ci0gICAgaWYgKCF0YWdQdHIpCisgICAgY29uc3Qgc3RydWN0IGF0
dHJzICphdHRyUHRyID0gZmluZEF0dHIoYXR0clN0ciwgbGVuKTsKKyAgICBpZiAoIWF0dHJQdHIp
CiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiB0YWdQdHItPmlkOwotfQotCi11bnNpZ25l
ZCBzaG9ydCBraHRtbDo6Z2V0QXR0cklEKGNvbnN0IGNoYXIgKnRhZ1N0ciwgaW50IGxlbikKLXsK
LSAgICBjb25zdCBzdHJ1Y3QgYXR0cnMgKnRhZ1B0ciA9IGZpbmRBdHRyKHRhZ1N0ciwgbGVuKTsK
LSAgICBpZiAoIXRhZ1B0cikKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIHRhZ1B0ci0+
aWQ7CisgICAgcmV0dXJuIGF0dHJQdHItPmlkOwogfQpJbmRleDoga2h0bWwvbWlzYy9odG1saGFz
aGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvbWlzYy9o
dG1saGFzaGVzLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNgpkaWZmIC11IC1wIC1yMS42IGto
dG1sL21pc2MvaHRtbGhhc2hlcy5oCi0tLSBraHRtbC9taXNjL2h0bWxoYXNoZXMuaAk1IEphbiAy
MDA1IDIyOjU2OjQ2IC0wMDAwCTEuNgorKysga2h0bWwvbWlzYy9odG1saGFzaGVzLmgJMjIgSnVu
IDIwMDUgMjM6MjM6MzYgLTAwMDAKQEAgLTIzLDEyICsyMywxMCBAQAogI2lmbmRlZiBIVE1MSEFT
SEVTX0gKICNkZWZpbmUgSFRNTEhBU0hFU19ICiAKLSNpbmNsdWRlICJodG1sdGFncy5oIgogI2lu
Y2x1ZGUgImh0bWxhdHRycy5oIgogCiBuYW1lc3BhY2Uga2h0bWwKIHsKLSAgdW5zaWduZWQgc2hv
cnQgZ2V0VGFnSUQoY29uc3QgY2hhciAqdGFnU3RyLCBpbnQgbGVuKTsKICAgdW5zaWduZWQgc2hv
cnQgZ2V0QXR0cklEKGNvbnN0IGNoYXIgKnRhZ1N0ciwgaW50IGxlbik7CiB9CiAKSW5kZXg6IGto
dG1sL21pc2MvaHRtbHRhZ3MuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZToga2h0bWwvbWlzYy9odG1s
dGFncy5pbgpkaWZmIC1OIGtodG1sL21pc2MvaHRtbHRhZ3MuaW4KLS0tIGtodG1sL21pc2MvaHRt
bHRhZ3MuaW4JMTEgTWF5IDIwMDUgMjM6NDU6MjkgLTAwMDAJMS43CisrKyAvZGV2L251bGwJMSBK
YW4gMTk3MCAwMDowMDowMCAtMDAwMApAQCAtMSwxMDIgKzAsMCBAQAotYQotYWJicgotYWNyb255
bQotYWRkcmVzcwotYXBwbGV0Ci1hcmVhCi1iCi1iYXNlCi1iYXNlZm9udAotYmRvCi1iaWcKLWJs
b2NrcXVvdGUKLWJvZHkKLWJyCi1idXR0b24KLWNhbnZhcwotY2FwdGlvbgotY2VudGVyCi1jaXRl
Ci1jb2RlCi1jb2wKLWNvbGdyb3VwCi1kZAotZGVsCi1kZm4KLWRpcgotZGl2Ci1kbAotZHQKLWVt
Ci1lbWJlZAotZmllbGRzZXQKLWZvbnQKLWZvcm0KLWZyYW1lCi1mcmFtZXNldAotaDEKLWgyCi1o
MwotaDQKLWg1Ci1oNgotaGVhZAotaHIKLWh0bWwKLWkKLWlmcmFtZQotaW1nCi1pbnB1dAotaW5z
Ci1pc2luZGV4Ci1rYmQKLWtleWdlbgotbGFiZWwKLWxheWVyCi1sZWdlbmQKLWxpCi1saW5rCi1t
YXAKLW1hcnF1ZWUKLW1lbnUKLW1ldGEKLW5vYnIKLW5vZW1iZWQKLW5vZnJhbWVzCi1ub3Njcmlw
dAotbm9sYXllcgotb2JqZWN0Ci1vbAotb3B0Z3JvdXAKLW9wdGlvbgotcAotcGFyYW0KLXBsYWlu
dGV4dAotcHJlCi1xCi1zCi1zYW1wCi1zY3JpcHQKLXNlbGVjdAotc21hbGwKLXNwYW4KLXN0cmlr
ZQotc3Ryb25nCi1zdHlsZQotc3ViCi1zdXAKLXRhYmxlCi10Ym9keQotdGQKLXRleHRhcmVhCi10
Zm9vdAotdGgKLXRoZWFkCi10aXRsZQotdHIKLXR0Ci11Ci11bAotdmFyCi13YnIKLXhtcApJbmRl
eDoga2h0bWwvbWlzYy9tYWtldGFncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiBraHRtbC9taXNjL21h
a2V0YWdzCmRpZmYgLU4ga2h0bWwvbWlzYy9tYWtldGFncwotLS0ga2h0bWwvbWlzYy9tYWtldGFn
cwk2IEphbiAyMDA1IDIxOjEzOjE2IC0wMDAwCTEuMTMKKysrIC9kZXYvbnVsbAkxIEphbiAxOTcw
IDAwOjAwOjAwIC0wMDAwCkBAIC0xLDEyMSArMCwwIEBACi0jIS91c3IvYmluL3BlcmwKLSMgICBU
aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIGxpYnJhcmllcwotIwotIyAgIENvcHlyaWdodCAo
QykgMTk5OCBXYWxkbyBCYXN0aWFuIChiYXN0aWFuQGtkZS5vcmcpCi0jICAgICAgICAgICAgICAg
ICAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCi0jICAgQ29weXJpZ2h0IChDKSAyMDA0
IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyAgIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSMgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwotIyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgotIyAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSMKLSMgICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgot
IyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0jICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0jCi0jICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIyAgIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0jICAg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3Vp
dGUgMzMwLAotIyAgIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgotIwotIy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLSMKLSMgIEtERSBIVE1MIFdpZGdldCAtLSBTY3JpcHQgdG8gZ2VuZXJhdGUgaHRt
bHRhZ3MuYyBhbmQgaHRtbHRhZ3MuaAotIwotCi11c2Ugc3RyaWN0OwotCi1vcGVuIElOLCAiaHRt
bHRhZ3MuaW4iCi0gIG9yIGRpZSAiQ2FuJ3Qgb3BlbiBpblxuIjsKLW9wZW4gaGVhZGVyLCAiPmh0
bWx0YWdzLmgiCi0gIG9yIGRpZSAiQ2FuJ3Qgb3BlbiBoZWFkZXJcbiI7Ci1vcGVuIG91dCwgIj5o
dG1sdGFncy5ncGVyZiIKLSAgb3IgZGllICJDYW4ndCBvcGVuIG91dFxuIjsKLQotcHJpbnQgb3V0
ICIle1xuLyogVGhpcyBmaWxlIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gaHRtbHRh
Z3MuaW4gYnkgbWFrZXRhZ3MsIGRvIG5vdCBlZGl0ICovXG4vKiBDb3B5cmlnaHQgMTk5OSBMYXJz
IEtub2xsICovXG4jaW5jbHVkZSBcImh0bWx0YWdzLmhcIlxuJX1cbiI7Ci1wcmludCBvdXQgInN0
cnVjdCB0YWdzIHtcbiAgICBjb25zdCBjaGFyICpuYW1lO1xuICAgIGludCBpZDtcbn07XG4lJVxu
IjsKLQotcHJpbnQgaGVhZGVyICIvKiBUaGlzIGZpbGUgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbQotaHRtbHRhZ3MuaW4gYnkgbWFrZXRhZ3MsIGRvIG5vdCBlZGl0ICovXG4vKiBDb3B5
cmlnaHQgMTk5OSBMYXJzIEtub2xsICovXG4vKiBDb3B5cmlnaHQgMjAwNCBBcHBsZSBDb21wdXRl
ciwgSW5jLiAqL1xuXG4jaWZuZGVmIEtIVE1MX1RBR1NfSFxuI2RlZmluZSBLSFRNTF9UQUdTX0hc
blxuI2luY2x1ZGUgXCJkb20vZG9tX3N0cmluZy5oXCJcblxuIjsKLQotcHJpbnQgaGVhZGVyICJE
T006OkRPTVN0cmluZyBnZXRUYWdOYW1lKHVuc2lnbmVkIHNob3J0IGlkKTtcblxuIjsKLQotbXkg
JG51bSA9IDA7Ci1teSAkb3BlblRhZ3MgPSAiIjsKLW15ICRjbG9zZVRhZ3MgPSAiIjsKLXdoaWxl
ICg8SU4+KSB7Ci0gICAgY2hvbXA7Ci0gICAgbXkgJGF0dHIgPSAkXzsKLSAgICAkbnVtICs9IDE7
Ci0gICAgbXkgJHVwID0gdWMoJGF0dHIpOwotICAgICRvcGVuVGFncyAuPSAiICAgIFwiJHVwXCIs
XG4iOwotICAgICRjbG9zZVRhZ3MgLj0gIiAgICBcIi8kdXBcIixcbiI7Ci0gICAgJHVwID1+IHMv
LS9fLzsKLSAgICBwcmludCBvdXQgJGF0dHIgLiAiLCBJRF8iIC4gJHVwIC4gIlxuIjsKLSAgICBw
cmludCBoZWFkZXIgImNvbnN0IHVuc2lnbmVkIHNob3J0IElEXyR1cCA9ICRudW07XG4iOwotfQot
cHJpbnQgb3V0ICJhbmNob3IsIElEX0FcbiI7Ci1wcmludCBvdXQgImltYWdlLCBJRF9JTUdcbiI7
Ci1wcmludCBvdXQgImxpc3RpbmcsIElEX1BSRVxuIjsKLSRudW0gKz0gMTsKLXByaW50IGhlYWRl
ciAiY29uc3QgdW5zaWduZWQgc2hvcnQgSURfVEVYVCA9ICRudW07XG4iOwotJG51bSArPSAxOwot
cHJpbnQgaGVhZGVyICJjb25zdCB1bnNpZ25lZCBzaG9ydCBJRF9DT01NRU5UID0gJG51bTtcbiI7
Ci1wcmludCBoZWFkZXIgImNvbnN0IHVuc2lnbmVkIHNob3J0IElEX0xBU1RfVEFHID0gJG51bTtc
biI7Ci1wcmludCBoZWFkZXIgImNvbnN0IHVuc2lnbmVkIHNob3J0IElEX0NMT1NFX1RBRyA9IDMy
MDAwO1xuIjsKLQotcHJpbnQgb3V0ICIlJVxuIjsKLWNsb3NlIG91dDsKLXByaW50IGhlYWRlciAi
XG4jZW5kaWZcbiI7Ci1jbG9zZSBoZWFkZXI7Ci0KLW15ICRyZXN1bHQgPSBzeXN0ZW0oIi9iaW4v
c2giLCAiLWMiLCAiZ3BlcmYgLWEgLUwgJ0FOU0ktQycgLUQgLUUgLUMgLWwgLW8gLXQgLWsgJyon
IC1OZmluZFRhZyAtSGhhc2hfdGFnIC1Xd29yZGxpc3RfdGFnIGh0bWx0YWdzLmdwZXJmID4gaHRt
bHRhZ3MuYyIpOwotaWYgKCRyZXN1bHQpIHsKLSAgdW5saW5rICJodG1sdGFncy5jIjsKLSAgZXhp
dCAkcmVzdWx0OwotfQotCi1vcGVuIElOLCAiaHRtbHRhZ3MuYyIgb3IgZGllOwotCi1teSAkbnVt
TGluZXMgPSAwOwotd2hpbGUgKDxJTj4pIHsKLSAgICAkbnVtTGluZXMrKzsKLX0KLSRudW1MaW5l
cyArPSAyOwotCi1jaG9tcCAkb3BlblRhZ3M7Ci1jaG9tcCAkY2xvc2VUYWdzOwotCi1vcGVuIE9V
VCwgIj4+aHRtbHRhZ3MuYyIgb3IgZGllOwotcHJpbnQgT1VUIDw8RU5ECi0jbGluZSAkbnVtTGlu
ZXMgImh0bWx0YWdzLmMiCi0KLXVzaW5nIERPTTo6RE9NU3RyaW5nOwotCi1zdGF0aWMgY29uc3Qg
Y2hhciAqIGNvbnN0IG9wZW5UYWdOYW1lc1tdID0gewotICAgIDAsCi0kb3BlblRhZ3MKLSAgICAi
VEVYVCIsCi0gICAgIkNPTU1FTlQiCi19OwotCi1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGNs
b3NlVGFnTmFtZXNbXSA9IHsKLSAgICAwLAotJGNsb3NlVGFncwotfTsKLQotRE9NU3RyaW5nIGdl
dFRhZ05hbWUodW5zaWduZWQgc2hvcnQgaWQpCi17Ci0gICAgaWYgKGlkID4gSURfQ0xPU0VfVEFH
KSB7Ci0gICAgICAgIGludCBpbmRleCA9IGlkIC0gSURfQ0xPU0VfVEFHOwotICAgICAgICBpZiAo
aW5kZXggPj0gSURfVEVYVCkKLSAgICAgICAgICAgIHJldHVybiBET01TdHJpbmcoKTsKLSAgICAg
ICAgcmV0dXJuIGNsb3NlVGFnTmFtZXNbaW5kZXhdOwotICAgIH0KLSAgICBpZiAoaWQgPiBJRF9M
QVNUX1RBRykKLSAgICAgICAgcmV0dXJuIERPTVN0cmluZygpOwotICAgIHJldHVybiBvcGVuVGFn
TmFtZXNbaWRdOwotfQotRU5ECkluZGV4OiBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2FwcGxldC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvcmVuZGVyaW5n
L3JlbmRlcl9hcHBsZXQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjMwCmRpZmYgLXUgLXAg
LXIxLjMwIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfYXBwbGV0LmNwcAotLS0ga2h0bWwvcmVuZGVy
aW5nL3JlbmRlcl9hcHBsZXQuY3BwCTEwIE1heSAyMDA1IDE4OjQyOjAzIC0wMDAwCTEuMzAKKysr
IGtodG1sL3JlbmRlcmluZy9yZW5kZXJfYXBwbGV0LmNwcAkyMiBKdW4gMjAwNSAyMzoyMzozNiAt
MDAwMApAQCAtMzYsNyArMzYsNiBAQAogI2lmbmRlZiBRX1dTX1FXUyAvLyBXZSBkb24ndCBoYXZl
IEphdmEgaW4gUXQgRW1iZWRkZWQKIAogI2luY2x1ZGUgImphdmEva2phdmFhcHBsZXR3aWRnZXQu
aCIKLSNpbmNsdWRlICJtaXNjL2h0bWx0YWdzLmgiCiAjaW5jbHVkZSAiaHRtbC9odG1sX29iamVj
dGltcGwuaCIKIAogdXNpbmcgbmFtZXNwYWNlIGtodG1sOwpAQCAtMTAzLDcgKzEwMiw3IEBAIHZv
aWQgUmVuZGVyQXBwbGV0OjpjcmVhdGVXaWRnZXRJZk5lY2Vzc2EKICAgICAgICAgICAgICAgICAg
ICAgICAgICBtX2hlaWdodCAtIGJvcmRlclRvcCgpIC0gYm9yZGVyQm90dG9tKCkgLSBwYWRkaW5n
VG9wKCkgLSBwYWRkaW5nQm90dG9tKCk7CiAgICAgICAgICAgICBOb2RlSW1wbCAqY2hpbGQgPSBl
bGVtZW50KCktPmZpcnN0Q2hpbGQoKTsKICAgICAgICAgICAgIHdoaWxlIChjaGlsZCkgewotICAg
ICAgICAgICAgICAgIGlmIChjaGlsZC0+aWQoKSA9PSBJRF9QQVJBTSkgeworICAgICAgICAgICAg
ICAgIGlmIChjaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnBhcmFtKCkpKSB7CiAgICAgICAg
ICAgICAgICAgICAgIEhUTUxQYXJhbUVsZW1lbnRJbXBsICpwID0gc3RhdGljX2Nhc3Q8SFRNTFBh
cmFtRWxlbWVudEltcGwgKj4oY2hpbGQpOwogICAgICAgICAgICAgICAgICAgICBtX2FyZ3MuaW5z
ZXJ0KHAtPm5hbWUoKS5zdHJpbmcoKSwgcC0+dmFsdWUoKS5zdHJpbmcoKSk7CiAgICAgICAgICAg
ICAgICAgfQpJbmRleDoga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9ib3guY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3JlbmRlcmluZy9yZW5kZXJfYm94LmNw
cCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNTQKZGlmZiAtdSAtcCAtcjEuMTU0IGtodG1sL3Jl
bmRlcmluZy9yZW5kZXJfYm94LmNwcAotLS0ga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9ib3guY3Bw
CTExIEp1biAyMDA1IDA1OjAxOjE3IC0wMDAwCTEuMTU0CisrKyBraHRtbC9yZW5kZXJpbmcvcmVu
ZGVyX2JveC5jcHAJMjIgSnVuIDIwMDUgMjM6MjM6MzcgLTAwMDAKQEAgLTI1Niw3ICsyNTYsNyBA
QCB2b2lkIFJlbmRlckJveDo6cGFpbnRSb290Qm94RGVjb3JhdGlvbnMoCiAgICAgICAgIC8vIGFu
b255bW91cyBibG9ja3MgY3JlYXRlZCBieSBpbmxpbmUgPGJvZHk+IHRhZ3MgZXRjLiAgV2UgY2Fu
IGxvY2F0ZSB0aGUgPGJvZHk+CiAgICAgICAgIC8vIHJlbmRlciBvYmplY3QgdmVyeSBlYXNpbHkg
dmlhIHRoZSBET00uCiAgICAgICAgIEhUTUxFbGVtZW50SW1wbCogYm9keSA9IGRvY3VtZW50KCkt
PmJvZHkoKTsKLSAgICAgICAgUmVuZGVyT2JqZWN0KiBib2R5T2JqZWN0ID0gKGJvZHkgJiYgYm9k
eS0+aWQoKSA9PSBJRF9CT0RZKSA/IGJvZHktPnJlbmRlcmVyKCkgOiAwOworICAgICAgICBSZW5k
ZXJPYmplY3QqIGJvZHlPYmplY3QgPSAoYm9keSAmJiBib2R5LT5oYXNMb2NhbE5hbWUoSFRNTE5h
bWVzOjpib2R5KCkpKSA/IGJvZHktPnJlbmRlcmVyKCkgOiAwOwogICAgICAgICBpZiAoYm9keU9i
amVjdCkgewogICAgICAgICAgICAgYmdMYXllciA9IGJvZHlPYmplY3QtPnN0eWxlKCktPmJhY2tn
cm91bmRMYXllcnMoKTsKICAgICAgICAgICAgIGJnQ29sb3IgPSBib2R5T2JqZWN0LT5zdHlsZSgp
LT5iYWNrZ3JvdW5kQ29sb3IoKTsKQEAgLTM2OSw3ICszNjksNyBAQCB2b2lkIFJlbmRlckJveDo6
cGFpbnRCYWNrZ3JvdW5kRXh0ZW5kZWQoCiAgICAgICAgIGJvb2wgaXNUcmFuc3BhcmVudDsKICAg
ICAgICAgRE9NOjpOb2RlSW1wbCogZWx0ID0gZG9jdW1lbnQoKS0+b3duZXJFbGVtZW50KCk7CiAg
ICAgICAgIGlmIChlbHQpIHsKLSAgICAgICAgICAgIGlmIChlbHQtPmlkKCkgPT0gSURfRlJBTUUp
CisgICAgICAgICAgICBpZiAoZWx0LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZnJhbWUoKSkpCiAg
ICAgICAgICAgICAgICAgaXNUcmFuc3BhcmVudCA9IGZhbHNlOwogICAgICAgICAgICAgZWxzZSB7
CiAgICAgICAgICAgICAgICAgLy8gTG9jYXRlIHRoZSA8Ym9keT4gZWxlbWVudCB1c2luZyB0aGUg
RE9NLiAgVGhpcyBpcyBlYXNpZXIgdGhhbiB0cnlpbmcKQEAgLTM3Nyw3ICszNzcsNyBAQCB2b2lk
IFJlbmRlckJveDo6cGFpbnRCYWNrZ3JvdW5kRXh0ZW5kZWQoCiAgICAgICAgICAgICAgICAgLy8g
YW5vbnltb3VzIGJsb2NrcyBjcmVhdGVkIGJ5IGlubGluZSA8Ym9keT4gdGFncyBldGMuICBXZSBj
YW4gbG9jYXRlIHRoZSA8Ym9keT4KICAgICAgICAgICAgICAgICAvLyByZW5kZXIgb2JqZWN0IHZl
cnkgZWFzaWx5IHZpYSB0aGUgRE9NLgogICAgICAgICAgICAgICAgIEhUTUxFbGVtZW50SW1wbCog
Ym9keSA9IGRvY3VtZW50KCktPmJvZHkoKTsKLSAgICAgICAgICAgICAgICBpc1RyYW5zcGFyZW50
ID0gIWJvZHkgfHwgYm9keS0+aWQoKSAhPSBJRF9GUkFNRVNFVDsgLy8gQ2FuJ3Qgc2Nyb2xsIGEg
ZnJhbWVzZXQgZG9jdW1lbnQgYW55d2F5LgorICAgICAgICAgICAgICAgIGlzVHJhbnNwYXJlbnQg
PSAhYm9keSB8fCAhYm9keS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6ZnJhbWVzZXQoKSk7IC8v
IENhbid0IHNjcm9sbCBhIGZyYW1lc2V0IGRvY3VtZW50IGFueXdheS4KICAgICAgICAgICAgIH0K
ICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBpc1RyYW5zcGFyZW50ID0gY2FudmFzKCktPnZp
ZXcoKS0+aXNUcmFuc3BhcmVudCgpOwpJbmRleDoga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9jYW52
YXNpbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwv
cmVuZGVyaW5nL3JlbmRlcl9jYW52YXNpbWFnZS5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
MTEKZGlmZiAtdSAtcCAtcjEuMTEga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9jYW52YXNpbWFnZS5j
cHAKLS0tIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfY2FudmFzaW1hZ2UuY3BwCTI1IE1heSAyMDA1
IDAxOjMzOjIyIC0wMDAwCTEuMTEKKysrIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfY2FudmFzaW1h
Z2UuY3BwCTIyIEp1biAyMDA1IDIzOjIzOjM3IC0wMDAwCkBAIC0zNywxMCArMzcsOCBAQAogI2lu
Y2x1ZGUgImNzcy9jc3NoZWxwZXIuaCIKICNpbmNsdWRlICJtaXNjL2hlbHBlci5oIgogI2luY2x1
ZGUgIm1pc2MvaHRtbGF0dHJzLmgiCi0jaW5jbHVkZSAibWlzYy9odG1sdGFncy5oIgogI2luY2x1
ZGUgImh0bWwvaHRtbF9mb3JtaW1wbC5oIgogI2luY2x1ZGUgImh0bWwvaHRtbF9jYW52YXNpbXBs
LmgiCi0jaW5jbHVkZSAiaHRtbC9kdGQuaCIKICNpbmNsdWRlICJ4bWwvZG9tMl9ldmVudHNpbXBs
LmgiCiAjaW5jbHVkZSAiaHRtbC9odG1sX2RvY3VtZW50aW1wbC5oIgogI2luY2x1ZGUgPG1hdGgu
aD4KSW5kZXg6IGtodG1sL3JlbmRlcmluZy9yZW5kZXJfZmxvdy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9mbG93LmNwcCx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNjAKZGlmZiAtdSAtcCAtcjEuMTYwIGtodG1sL3JlbmRl
cmluZy9yZW5kZXJfZmxvdy5jcHAKLS0tIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfZmxvdy5jcHAJ
MTEgTWF5IDIwMDUgMDI6MTA6MTAgLTAwMDAJMS4xNjAKKysrIGtodG1sL3JlbmRlcmluZy9yZW5k
ZXJfZmxvdy5jcHAJMjIgSnVuIDIwMDUgMjM6MjM6MzggLTAwMDAKQEAgLTQwLDcgKzQwLDYgQEAK
ICNpbmNsdWRlICJyZW5kZXJfbGluZS5oIgogCiAjaW5jbHVkZSAia2h0bWx2aWV3LmgiCi0jaW5j
bHVkZSAiaHRtbHRhZ3MuaCIKIAogdXNpbmcgbmFtZXNwYWNlIERPTTsKIHVzaW5nIG5hbWVzcGFj
ZSBraHRtbDsKQEAgLTY1NCw3ICs2NTMsNyBAQCB2b2lkIFJlbmRlckZsb3c6OmFkZEZvY3VzUmlu
Z1JlY3RzKFFQYWluCiAgICAgLy8gT25seSBwYWludCBmb2N1cyByaW5nIGFyb3VuZCBvdXRlcm1v
c3QgY29udGVudGVkaXRhYmxlIGVsZW1lbnQuCiAgICAgLy8gQnV0IHNraXAgdGhlIGJvZHkgZWxl
bWVudCBpZiBpdCBpcyBvdXRlcm1vc3QuCiAgICAgaWYgKGVsZW1lbnQoKSAmJiBlbGVtZW50KCkt
PmlzQ29udGVudEVkaXRhYmxlKCkpIHsKLSAgICAgICAgaWYgKGVsZW1lbnQoKS0+cGFyZW50Tm9k
ZSgpICYmICFlbGVtZW50KCktPnBhcmVudE5vZGUoKS0+aXNDb250ZW50RWRpdGFibGUoKSAmJiBl
bGVtZW50KCktPmlkKCkgIT0gSURfQk9EWSkKKyAgICAgICAgaWYgKGVsZW1lbnQoKS0+cGFyZW50
Tm9kZSgpICYmICFlbGVtZW50KCktPnBhcmVudE5vZGUoKS0+aXNDb250ZW50RWRpdGFibGUoKSAm
JiAhZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Ym9keSgpKSkKICAgICAgICAgICAg
IHAtPmFkZEZvY3VzUmluZ1JlY3QoX3R4LCBfdHksIHdpZHRoKCksIGhlaWdodCgpKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KSW5kZXg6IGtodG1sL3JlbmRlcmluZy9yZW5kZXJfZm9ybS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvcmVuZGVyaW5nL3Jl
bmRlcl9mb3JtLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMDcKZGlmZiAtdSAtcCAtcjEu
MTA3IGtodG1sL3JlbmRlcmluZy9yZW5kZXJfZm9ybS5jcHAKLS0tIGtodG1sL3JlbmRlcmluZy9y
ZW5kZXJfZm9ybS5jcHAJMjAgSnVuIDIwMDUgMDU6MjQ6MjYgLTAwMDAJMS4xMDcKKysrIGtodG1s
L3JlbmRlcmluZy9yZW5kZXJfZm9ybS5jcHAJMjIgSnVuIDIwMDUgMjM6MjM6MzkgLTAwMDAKQEAg
LTc1Myw3ICs3NTMsNyBAQCBSZW5kZXJPYmplY3QqIFJlbmRlckZpZWxkc2V0OjpmaW5kTGVnZW5k
CiB7CiAgICAgZm9yIChSZW5kZXJPYmplY3QqIGxlZ2VuZCA9IGZpcnN0Q2hpbGQoKTsgbGVnZW5k
OyBsZWdlbmQgPSBsZWdlbmQtPm5leHRTaWJsaW5nKCkpIHsKICAgICAgIGlmICghbGVnZW5kLT5p
c0Zsb2F0aW5nT3JQb3NpdGlvbmVkKCkgJiYgbGVnZW5kLT5lbGVtZW50KCkgJiYKLSAgICAgICAg
ICBsZWdlbmQtPmVsZW1lbnQoKS0+aWQoKSA9PSBJRF9MRUdFTkQpCisgICAgICAgICAgbGVnZW5k
LT5lbGVtZW50KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpsZWdlbmQoKSkpCiAgICAgICAgIHJl
dHVybiBsZWdlbmQ7CiAgICAgfQogICAgIHJldHVybiAwOwpAQCAtMTE0Nyw3ICsxMTQ3LDcgQEAg
dm9pZCBSZW5kZXJTZWxlY3Q6OnVwZGF0ZUZyb21FbGVtZW50KCkKICAgICAgICAgICAgIHN0YXRp
Y19jYXN0PEtDb21ib0JveCo+KG1fd2lkZ2V0KS0+Y2xlYXIoKTsKIAogICAgICAgICBmb3IgKGxp
c3RJbmRleCA9IDA7IGxpc3RJbmRleCA8IGludChsaXN0SXRlbXMuc2l6ZSgpKTsgbGlzdEluZGV4
KyspIHsKLSAgICAgICAgICAgIGlmIChsaXN0SXRlbXNbbGlzdEluZGV4XS0+aWQoKSA9PSBJRF9P
UFRHUk9VUCkgeworICAgICAgICAgICAgaWYgKGxpc3RJdGVtc1tsaXN0SW5kZXhdLT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6b3B0Z3JvdXAoKSkpIHsKICAgICAgICAgICAgICAgICBRU3RyaW5nIGxh
YmVsID0gbGlzdEl0ZW1zW2xpc3RJbmRleF0tPmdldEF0dHJpYnV0ZShBVFRSX0xBQkVMKS5zdHJp
bmcoKTsKICAgICAgICAgICAgICAgICBsYWJlbC5yZXBsYWNlKFFDaGFyKCdcXCcpLCBiYWNrc2xh
c2hBc0N1cnJlbmN5U3ltYm9sKCkpOwogCkBAIC0xMTcxLDE0ICsxMTcxLDE0IEBAIHZvaWQgUmVu
ZGVyU2VsZWN0Ojp1cGRhdGVGcm9tRWxlbWVudCgpCiAgICAgICAgICAgICAgICAgICAgIHN0YXRp
Y19jYXN0PEtDb21ib0JveCo+KG1fd2lkZ2V0KS0+aW5zZXJ0SXRlbShsYWJlbCwgbGlzdEluZGV4
KTsKICNlbmRpZgogICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAobGlzdEl0ZW1z
W2xpc3RJbmRleF0tPmlkKCkgPT0gSURfT1BUSU9OKSB7CisgICAgICAgICAgICBlbHNlIGlmIChs
aXN0SXRlbXNbbGlzdEluZGV4XS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9wdGlvbigpKSkgewog
ICAgICAgICAgICAgICAgIFFTdHJpbmcgaXRlbVRleHQgPSBzdGF0aWNfY2FzdDxIVE1MT3B0aW9u
RWxlbWVudEltcGwqPihsaXN0SXRlbXNbbGlzdEluZGV4XSktPnRleHQoKS5zdHJpbmcoKTsKICAg
ICAgICAgICAgICAgICBpdGVtVGV4dC5yZXBsYWNlKFFDaGFyKCdcXCcpLCBiYWNrc2xhc2hBc0N1
cnJlbmN5U3ltYm9sKCkpOwogCiAgICAgICAgICAgICAgICAgLy8gSW4gV2luSUUsIGxlYWRpbmcg
YW5kIHRyYWlsaW5nIHdoaXRlc3BhY2UgaXMgaWdub3JlZCBpbiBvcHRpb25zLiBXZSBtYXRjaCB0
aGlzIGJlaGF2aW9yLgogICAgICAgICAgICAgICAgIGl0ZW1UZXh0ID0gaXRlbVRleHQuc3RyaXBX
aGl0ZVNwYWNlKCk7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKGxpc3RJ
dGVtc1tsaXN0SW5kZXhdLT5wYXJlbnROb2RlKCktPmlkKCkgPT0gSURfT1BUR1JPVVApCisgICAg
ICAgICAgICAgICAgaWYgKGxpc3RJdGVtc1tsaXN0SW5kZXhdLT5wYXJlbnROb2RlKCktPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjpvcHRncm91cCgpKSkKICAgICAgICAgICAgICAgICAgICAgaXRlbVRl
eHQucHJlcGVuZCgiICAgICIpOwogCiAjaWYgQVBQTEVfQ0hBTkdFUwpAQCAtMTMwNCw3ICsxMzA0
LDcgQEAgdm9pZCBSZW5kZXJTZWxlY3Q6OmxheW91dCggKQogCiAgICAgYm9vbCBmb3VuZE9wdGlv
biA9IGZhbHNlOwogICAgIGZvciAodWludCBpID0gMDsgaSA8IGxpc3RJdGVtcy5zaXplKCkgJiYg
IWZvdW5kT3B0aW9uOyBpKyspCi0JZm91bmRPcHRpb24gPSAobGlzdEl0ZW1zW2ldLT5pZCgpID09
IElEX09QVElPTik7CisJZm91bmRPcHRpb24gPSAobGlzdEl0ZW1zW2ldLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6b3B0aW9uKCkpKTsKIAogICAgIG1fd2lkZ2V0LT5zZXRFbmFibGVkKGZvdW5kT3B0
aW9uICYmICEgZWxlbWVudCgpLT5kaXNhYmxlZCgpKTsKIH0KQEAgLTEzMTgsMTIgKzEzMTgsMTIg
QEAgdm9pZCBSZW5kZXJTZWxlY3Q6OnNsb3RTZWxlY3RlZChpbnQgaW5kZQogICAgIFFNZW1BcnJh
eTxIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbCo+IGxpc3RJdGVtcyA9IGVsZW1lbnQoKS0+bGlz
dEl0ZW1zKCk7CiAgICAgaWYoaW5kZXggPj0gMCAmJiBpbmRleCA8IGludChsaXN0SXRlbXMuc2l6
ZSgpKSkKICAgICB7Ci0gICAgICAgIGJvb2wgZm91bmQgPSAoIGxpc3RJdGVtc1tpbmRleF0tPmlk
KCkgPT0gSURfT1BUSU9OICk7CisgICAgICAgIGJvb2wgZm91bmQgPSAobGlzdEl0ZW1zW2luZGV4
XS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9wdGlvbigpKSk7CiAKICAgICAgICAgaWYgKCAhZm91
bmQgKSB7CiAgICAgICAgICAgICAvLyB0aGlzIG9uZSBpcyBub3Qgc2VsZWN0YWJsZSwgIHdlIG5l
ZWQgdG8gZmluZCBhbiBvcHRpb24gZWxlbWVudAogICAgICAgICAgICAgd2hpbGUgKCAoIHVuc2ln
bmVkICkgaW5kZXggPCBsaXN0SXRlbXMuc2l6ZSgpICkgewotICAgICAgICAgICAgICAgIGlmICgg
bGlzdEl0ZW1zW2luZGV4XS0+aWQoKSA9PSBJRF9PUFRJT04gKSB7CisgICAgICAgICAgICAgICAg
aWYgKGxpc3RJdGVtc1tpbmRleF0tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvcHRpb24oKSkpIHsK
ICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICB9CkBAIC0xMzMyLDcgKzEzMzIsNyBAQCB2b2lkIFJlbmRl
clNlbGVjdDo6c2xvdFNlbGVjdGVkKGludCBpbmRlCiAKICAgICAgICAgICAgIGlmICggIWZvdW5k
ICkgewogICAgICAgICAgICAgICAgIHdoaWxlICggaW5kZXggPj0gMCApIHsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKCBsaXN0SXRlbXNbaW5kZXhdLT5pZCgpID09IElEX09QVElPTiApIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKGxpc3RJdGVtc1tpbmRleF0tPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjpvcHRpb24oKSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9CkBA
IC0xMzQ2LDcgKzEzNDYsNyBAQCB2b2lkIFJlbmRlclNlbGVjdDo6c2xvdFNlbGVjdGVkKGludCBp
bmRlCiAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q29tYm9Cb3hXaWRnZXQqPiggbV93aWRn
ZXQgKS0+c2V0Q3VycmVudEl0ZW0oIGluZGV4ICk7CiAKICAgICAgICAgICAgIGZvciAoIHVuc2ln
bmVkIGludCBpID0gMDsgaSA8IGxpc3RJdGVtcy5zaXplKCk7ICsraSApCi0gICAgICAgICAgICAg
ICAgaWYgKCBsaXN0SXRlbXNbaV0tPmlkKCkgPT0gSURfT1BUSU9OICYmIGkgIT0gKHVuc2lnbmVk
IGludCkgaW5kZXggKQorICAgICAgICAgICAgICAgIGlmIChsaXN0SXRlbXNbaV0tPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjpvcHRpb24oKSkgJiYgaSAhPSAodW5zaWduZWQgaW50KSBpbmRleCkKICAg
ICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnRJbXBsKj4oIGxp
c3RJdGVtc1tpXSApLT5tX3NlbGVjdGVkID0gZmFsc2U7CiAKICAgICAgICAgICAgIHN0YXRpY19j
YXN0PEhUTUxPcHRpb25FbGVtZW50SW1wbCo+KGxpc3RJdGVtc1tpbmRleF0pLT5tX3NlbGVjdGVk
ID0gdHJ1ZTsKQEAgLTEzNjcsNyArMTM2Nyw3IEBAIHZvaWQgUmVuZGVyU2VsZWN0OjpzbG90U2Vs
ZWN0aW9uQ2hhbmdlZCgKICAgICBmb3IgKCB1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3RJdGVtcy5j
b3VudCgpOyBpKysgKQogICAgICAgICAvLyBkb24ndCB1c2Ugc2V0U2VsZWN0ZWQoKSBoZXJlIGJl
Y2F1c2UgaXQgd2lsbCBjYXVzZSB1cyB0byBiZSBjYWxsZWQKICAgICAgICAgLy8gYWdhaW4gd2l0
aCB1cGRhdGVTZWxlY3Rpb24uCi0gICAgICAgIGlmICggbGlzdEl0ZW1zW2ldLT5pZCgpID09IElE
X09QVElPTiApCisgICAgICAgIGlmIChsaXN0SXRlbXNbaV0tPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjpvcHRpb24oKSkpCiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudElt
cGwqPiggbGlzdEl0ZW1zW2ldICkKICAgICAgICAgICAgICAgICAtPm1fc2VsZWN0ZWQgPSBzdGF0
aWNfY2FzdDxLTGlzdEJveCo+KCBtX3dpZGdldCApLT5pc1NlbGVjdGVkKCBpICk7CiAKQEAgLTE0
MDksNyArMTQwOSw3IEBAIHZvaWQgUmVuZGVyU2VsZWN0Ojp1cGRhdGVTZWxlY3Rpb24oKQogICAg
ICAgICAvLyBpZiBtdWx0aS1zZWxlY3QsIHdlIHNlbGVjdCBvbmx5IHRoZSBuZXcgc2VsZWN0ZWQg
aW5kZXgKICAgICAgICAgS0xpc3RCb3ggKmxpc3RCb3ggPSBzdGF0aWNfY2FzdDxLTGlzdEJveCo+
KG1fd2lkZ2V0KTsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IGludChsaXN0SXRlbXMuc2l6ZSgp
KTsgaSsrKQotICAgICAgICAgICAgbGlzdEJveC0+c2V0U2VsZWN0ZWQoaSxsaXN0SXRlbXNbaV0t
PmlkKCkgPT0gSURfT1BUSU9OICYmCisgICAgICAgICAgICBsaXN0Qm94LT5zZXRTZWxlY3RlZChp
LCBsaXN0SXRlbXNbaV0tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvcHRpb24oKSkgJiYKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnRJ
bXBsKj4obGlzdEl0ZW1zW2ldKS0+c2VsZWN0ZWQoKSk7CiAgICAgfQogICAgIGVsc2UgewpAQCAt
MTQxNyw3ICsxNDE3LDcgQEAgdm9pZCBSZW5kZXJTZWxlY3Q6OnVwZGF0ZVNlbGVjdGlvbigpCiAg
ICAgICAgIHVuc2lnbmVkIGZpcnN0T3B0aW9uID0gbGlzdEl0ZW1zLnNpemUoKTsKICAgICAgICAg
aSA9IGxpc3RJdGVtcy5zaXplKCk7CiAgICAgICAgIHdoaWxlIChpLS0pCi0gICAgICAgICAgICBp
ZiAobGlzdEl0ZW1zW2ldLT5pZCgpID09IElEX09QVElPTikgeworICAgICAgICAgICAgaWYgKGxp
c3RJdGVtc1tpXS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9wdGlvbigpKSkgewogICAgICAgICAg
ICAgICAgIGlmIChmb3VuZCkKICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTE9w
dGlvbkVsZW1lbnRJbXBsKj4obGlzdEl0ZW1zW2ldKS0+bV9zZWxlY3RlZCA9IGZhbHNlOwogICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50SW1wbCo+
KGxpc3RJdGVtc1tpXSktPnNlbGVjdGVkKCkpIHsKSW5kZXg6IGtodG1sL3JlbmRlcmluZy9yZW5k
ZXJfZnJhbWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRt
bC9yZW5kZXJpbmcvcmVuZGVyX2ZyYW1lcy5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNjkK
ZGlmZiAtdSAtcCAtcjEuNjkga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9mcmFtZXMuY3BwCi0tLSBr
aHRtbC9yZW5kZXJpbmcvcmVuZGVyX2ZyYW1lcy5jcHAJMTAgTWF5IDIwMDUgMTg6NDI6MDQgLTAw
MDAJMS42OQorKysga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9mcmFtZXMuY3BwCTIyIEp1biAyMDA1
IDIzOjIzOjQwIC0wMDAwCkBAIC0zNCw3ICszNCw2IEBACiAjaW5jbHVkZSAibWlzYy9odG1sYXR0
cnMuaCIKICNpbmNsdWRlICJ4bWwvZG9tMl9ldmVudHNpbXBsLmgiCiAjaW5jbHVkZSAieG1sL2Rv
bV9kb2NpbXBsLmgiCi0jaW5jbHVkZSAibWlzYy9odG1sdGFncy5oIgogI2luY2x1ZGUgImtodG1s
dmlldy5oIgogI2luY2x1ZGUgImtodG1sX3BhcnQuaCIKICNpbmNsdWRlICJyZW5kZXJfYXJlbmEu
aCIKQEAgLTY2OSwxNyArNjY4LDE3IEBAIHZvaWQgUmVuZGVyUGFydE9iamVjdDo6dXBkYXRlV2lk
Z2V0KCkKIAogICBzZXROZWVkc0xheW91dEFuZE1pbk1heFJlY2FsYygpOwogCi0gIGlmIChlbGVt
ZW50KCktPmlkKCkgPT0gSURfT0JKRUNUKSB7CisgIGlmIChlbGVtZW50KCktPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjpvYmplY3QoKSkpIHsKIAogICAgICAgSFRNTE9iamVjdEVsZW1lbnRJbXBsICpv
ID0gc3RhdGljX2Nhc3Q8SFRNTE9iamVjdEVsZW1lbnRJbXBsICo+KGVsZW1lbnQoKSk7CiAKICAg
ICAgIC8vIENoZWNrIGZvciBhIGNoaWxkIEVNQkVEIHRhZy4KICAgICAgIEhUTUxFbWJlZEVsZW1l
bnRJbXBsICplbWJlZCA9IDA7CiAgICAgICBmb3IgKE5vZGVJbXBsICpjaGlsZCA9IG8tPmZpcnN0
Q2hpbGQoKTsgY2hpbGQ7ICkgewotICAgICAgICAgIGlmIChjaGlsZC0+aWQoKSA9PSBJRF9FTUJF
RCkgeworICAgICAgICAgIGlmIChjaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmVtYmVkKCkp
KSB7CiAgICAgICAgICAgICAgIGVtYmVkID0gc3RhdGljX2Nhc3Q8SFRNTEVtYmVkRWxlbWVudElt
cGwgKj4oIGNoaWxkICk7CiAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0gZWxzZSBp
ZiAoY2hpbGQtPmlkKCkgPT0gSURfT0JKRUNUKSB7CisgICAgICAgICAgfSBlbHNlIGlmIChjaGls
ZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9iamVjdCgpKSkgewogICAgICAgICAgICAgICBjaGls
ZCA9IGNoaWxkLT5uZXh0U2libGluZygpOyAgICAgICAgIC8vIERvbid0IGRlc2NlbmQgaW50byBu
ZXN0ZWQgT0JKRUNUIHRhZ3MKICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICBjaGls
ZCA9IGNoaWxkLT50cmF2ZXJzZU5leHROb2RlKG8pOyAgIC8vIE90aGVyd2lzZSBkZXNjZW5kIChF
TUJFRHMgbWF5IGJlIGluc2lkZSBDT01NRU5UIHRhZ3MpCkBAIC03MTksNyArNzE4LDcgQEAgdm9p
ZCBSZW5kZXJQYXJ0T2JqZWN0Ojp1cGRhdGVXaWRnZXQoKQogICAgICAgLy8gR2V0IHRoZSBhdHRy
aWJ1dGVzIGZyb20gdGhlIHBhcmFtcyBpZiB0aGVyZSBpcyBubyBFTUJFRCB0YWcuCiAgICAgICBO
b2RlSW1wbCAqY2hpbGQgPSBvLT5maXJzdENoaWxkKCk7CiAgICAgICB3aGlsZSAoY2hpbGQgJiYg
KHVybC5pc0VtcHR5KCkgfHwgc2VydmljZVR5cGUuaXNFbXB0eSgpIHx8ICFlbWJlZCkpIHsKLSAg
ICAgICAgICBpZiAoY2hpbGQtPmlkKCkgPT0gSURfUEFSQU0pIHsKKyAgICAgICAgICBpZiAoY2hp
bGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpwYXJhbSgpKSkgewogICAgICAgICAgICAgICBIVE1M
UGFyYW1FbGVtZW50SW1wbCAqcCA9IHN0YXRpY19jYXN0PEhUTUxQYXJhbUVsZW1lbnRJbXBsICo+
KCBjaGlsZCApOwogICAgICAgICAgICAgICBRU3RyaW5nIG5hbWUgPSBwLT5uYW1lKCkuc3RyaW5n
KCkubG93ZXIoKTsKICAgICAgICAgICAgICAgaWYgKHVybC5pc0VtcHR5KCkgJiYgKG5hbWUgPT0g
InNyYyIgfHwgbmFtZSA9PSAibW92aWUiIHx8IG5hbWUgPT0gImNvZGUiIHx8IG5hbWUgPT0gInVy
bCIpKSB7CkBAIC04MTAsMTQgKzgwOSwxNCBAQCB2b2lkIFJlbmRlclBhcnRPYmplY3Q6OnVwZGF0
ZVdpZGdldCgpCiAgICAgICAvLyBGaW5kIG91dCBpZiB3ZSBzdXBwb3J0IGZhbGxiYWNrIGNvbnRl
bnQuCiAgICAgICBtX2hhc0ZhbGxiYWNrQ29udGVudCA9IGZhbHNlOwogICAgICAgZm9yIChOb2Rl
SW1wbCAqY2hpbGQgPSBvLT5maXJzdENoaWxkKCk7IGNoaWxkICYmICFtX2hhc0ZhbGxiYWNrQ29u
dGVudDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgewotICAgICAgICAgIGlmICgoIWNo
aWxkLT5pc1RleHROb2RlKCkgJiYgY2hpbGQtPmlkKCkgIT0gSURfRU1CRUQgJiYgY2hpbGQtPmlk
KCkgIT0gSURfUEFSQU0pIHx8IC8vIERpc2NvdW50IDxlbWJlZD4gYW5kIDxwYXJhbT4KKyAgICAg
ICAgICBpZiAoKCFjaGlsZC0+aXNUZXh0Tm9kZSgpICYmICFjaGlsZC0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OmVtYmVkKCkpICYmICFjaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnBhcmFtKCkp
KSB8fCAvLyBEaXNjb3VudCA8ZW1iZWQ+IGFuZCA8cGFyYW0+CiAgICAgICAgICAgICAgIChjaGls
ZC0+aXNUZXh0Tm9kZSgpICYmICFjaGlsZC0+Y29udGFpbnNPbmx5V2hpdGVzcGFjZSgpKSkKICAg
ICAgICAgICAgICAgbV9oYXNGYWxsYmFja0NvbnRlbnQgPSB0cnVlOwogICAgICAgfQogICAgICAg
Ym9vbCBzdWNjZXNzID0gcGFydC0+cmVxdWVzdE9iamVjdCggdGhpcywgdXJsLCBzZXJ2aWNlVHlw
ZSwgcGFyYW1OYW1lcywgcGFyYW1WYWx1ZXMgKTsKICAgICAgIGlmICghc3VjY2VzcyAmJiBtX2hh
c0ZhbGxiYWNrQ29udGVudCkKICAgICAgICAgICBvLT5yZW5kZXJGYWxsYmFja0NvbnRlbnQoKTsK
LSAgfSBlbHNlIGlmICggZWxlbWVudCgpLT5pZCgpID09IElEX0VNQkVEICkgeworICB9IGVsc2Ug
aWYgKGVsZW1lbnQoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmVtYmVkKCkpKSB7CiAKICAgICAg
IEhUTUxFbWJlZEVsZW1lbnRJbXBsICpvID0gc3RhdGljX2Nhc3Q8SFRNTEVtYmVkRWxlbWVudElt
cGwgKj4oZWxlbWVudCgpKTsKICAgICAgIHVybCA9IG8tPnVybDsKQEAgLTg0NCw3ICs4NDMsNyBA
QCB2b2lkIFJlbmRlclBhcnRPYmplY3Q6OnVwZGF0ZVdpZGdldCgpCiAgICAgICB9CiAgICAgICBw
YXJ0LT5yZXF1ZXN0T2JqZWN0KCB0aGlzLCB1cmwsIHNlcnZpY2VUeXBlLCBwYXJhbU5hbWVzLCBw
YXJhbVZhbHVlcyApOwogICB9IGVsc2UgewotICAgICAgYXNzZXJ0KGVsZW1lbnQoKS0+aWQoKSA9
PSBJRF9JRlJBTUUpOworICAgICAgYXNzZXJ0KGVsZW1lbnQoKS0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OmlmcmFtZSgpKSk7CiAgICAgICBIVE1MSUZyYW1lRWxlbWVudEltcGwgKm8gPSBzdGF0aWNf
Y2FzdDxIVE1MSUZyYW1lRWxlbWVudEltcGwgKj4oZWxlbWVudCgpKTsKICAgICAgIHVybCA9IG8t
Pm1fVVJMLnN0cmluZygpOwogICAgICAgaWYgKHVybC5pc0VtcHR5KCkpIHsKQEAgLTg5MCw3ICs4
ODksNyBAQCB2b2lkIFJlbmRlclBhcnRPYmplY3Q6OnNsb3RWaWV3Q2xlYXJlZCgpCiAgICAgICBR
U2Nyb2xsVmlldzo6U2Nyb2xsQmFyTW9kZSBzY3JvbGwgPSBRU2Nyb2xsVmlldzo6QXV0bzsKICAg
ICAgIGludCBtYXJnaW53ID0gLTE7CiAgICAgICBpbnQgbWFyZ2luaCA9IC0xOwotICAgICAgaWYg
KCBlbGVtZW50KCktPmlkKCkgPT0gSURfSUZSQU1FKSB7CisgICAgICBpZiAoZWxlbWVudCgpLT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6aWZyYW1lKCkpKSB7CiAJICBIVE1MSUZyYW1lRWxlbWVudElt
cGwgKmZyYW1lID0gc3RhdGljX2Nhc3Q8SFRNTElGcmFtZUVsZW1lbnRJbXBsICo+KGVsZW1lbnQo
KSk7CiAJICBpZihmcmFtZS0+bV9mcmFtZUJvcmRlcikKIAkgICAgICBmcmFtZVN0eWxlID0gUUZy
YW1lOjpCb3g7CkBAIC05MTAsNyArOTA5LDcgQEAgdm9pZCBSZW5kZXJQYXJ0T2JqZWN0OjpzbG90
Vmlld0NsZWFyZWQoKQogICAgICAgICAgIGtkRGVidWcoNjAzMSkgPDwgImZyYW1lIGlzIGEgS0hU
TUx2aWV3ISIgPDwgZW5kbDsKICNlbmRpZgogICAgICAgICAgIEtIVE1MVmlldyAqaHRtbFZpZXcg
PSBzdGF0aWNfY2FzdDxLSFRNTFZpZXcgKj4odmlldyk7Ci0gICAgICAgICAgaHRtbFZpZXctPnNl
dElnbm9yZVdoZWVsRXZlbnRzKCBlbGVtZW50KCktPmlkKCkgPT0gSURfSUZSQU1FICk7CisgICAg
ICAgICAgaHRtbFZpZXctPnNldElnbm9yZVdoZWVsRXZlbnRzKGVsZW1lbnQoKS0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OmlmcmFtZSgpKSk7CiAgICAgICAgICAgaWYobWFyZ2ludyAhPSAtMSkgaHRt
bFZpZXctPnNldE1hcmdpbldpZHRoKG1hcmdpbncpOwogICAgICAgICAgIGlmKG1hcmdpbmggIT0g
LTEpIGh0bWxWaWV3LT5zZXRNYXJnaW5IZWlnaHQobWFyZ2luaCk7CiAgICAgICAgIH0KSW5kZXg6
IGtodG1sL3JlbmRlcmluZy9yZW5kZXJfaW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9XZWJDb3JlL2todG1sL3JlbmRlcmluZy9yZW5kZXJfaW1hZ2UuY3BwLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjc0CmRpZmYgLXUgLXAgLXIxLjc0IGtodG1sL3JlbmRlcmluZy9yZW5k
ZXJfaW1hZ2UuY3BwCi0tLSBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2ltYWdlLmNwcAkyNSBGZWIg
MjAwNSAwMDoyNToxMiAtMDAwMAkxLjc0CisrKyBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2ltYWdl
LmNwcAkyMiBKdW4gMjAwNSAyMzoyMzo0MSAtMDAwMApAQCAtMzYsMTAgKzM2LDggQEAKICNpbmNs
dWRlICJjc3MvY3NzaGVscGVyLmgiCiAjaW5jbHVkZSAibWlzYy9oZWxwZXIuaCIKICNpbmNsdWRl
ICJtaXNjL2h0bWxhdHRycy5oIgotI2luY2x1ZGUgIm1pc2MvaHRtbHRhZ3MuaCIKICNpbmNsdWRl
ICJodG1sL2h0bWxfZm9ybWltcGwuaCIKICNpbmNsdWRlICJodG1sL2h0bWxfaW1hZ2VpbXBsLmgi
Ci0jaW5jbHVkZSAiaHRtbC9kdGQuaCIKICNpbmNsdWRlICJ4bWwvZG9tMl9ldmVudHNpbXBsLmgi
CiAjaW5jbHVkZSAiaHRtbC9odG1sX2RvY3VtZW50aW1wbC5oIgogI2luY2x1ZGUgPG1hdGguaD4K
QEAgLTQxOCw3ICs0MTYsNyBAQCB2b2lkIFJlbmRlckltYWdlOjpwYWludChQYWludEluZm8mIGks
IGluCiAKIAogLy8gICAgICAgICAgICAgcC0+ZHJhd1BpeG1hcCggb2Zmcy54KCksIHksIHBpeCwg
cmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkgKTsKLSAgICAg
ICAgICAgICBIVE1MSW1hZ2VFbGVtZW50SW1wbCogaSA9IChlbGVtZW50KCkgJiYgZWxlbWVudCgp
LT5pZCgpID09IElEX0lNRykgPyBzdGF0aWNfY2FzdDxIVE1MSW1hZ2VFbGVtZW50SW1wbCo+KGVs
ZW1lbnQoKSkgOiAwOworICAgICAgICAgICAgIEhUTUxJbWFnZUVsZW1lbnRJbXBsKiBpID0gKGVs
ZW1lbnQoKSAmJiBlbGVtZW50KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppbWcoKSkpID8gc3Rh
dGljX2Nhc3Q8SFRNTEltYWdlRWxlbWVudEltcGwqPihlbGVtZW50KCkpIDogMDsKICAgICAgICAg
ICAgICBpZiAoaSAmJiAhaS0+Y29tcG9zaXRlT3BlcmF0b3IoKS5pc051bGwoKSl7CiAgICAgICAg
ICAgICAgICAgcC0+ZHJhd1BpeG1hcCAob2ZmcywgcGl4LCByZWN0LCBpLT5jb21wb3NpdGVPcGVy
YXRvcigpKTsKICAgICAgICAgICAgICB9CkBAIC00ODUsNyArNDgzLDcgQEAgdm9pZCBSZW5kZXJJ
bWFnZTo6bGF5b3V0KCkKIAogSFRNTE1hcEVsZW1lbnRJbXBsKiBSZW5kZXJJbWFnZTo6aW1hZ2VN
YXAoKQogewotICAgIEhUTUxJbWFnZUVsZW1lbnRJbXBsKiBpID0gZWxlbWVudCgpLT5pZCgpID09
IElEX0lNRyA/IHN0YXRpY19jYXN0PEhUTUxJbWFnZUVsZW1lbnRJbXBsKj4oZWxlbWVudCgpKSA6
IDA7CisgICAgSFRNTEltYWdlRWxlbWVudEltcGwqIGkgPSBlbGVtZW50KCktPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjppbWcoKSkgPyBzdGF0aWNfY2FzdDxIVE1MSW1hZ2VFbGVtZW50SW1wbCo+KGVs
ZW1lbnQoKSkgOiAwOwogICAgIHJldHVybiBpID8gaS0+Z2V0RG9jdW1lbnQoKS0+Z2V0SW1hZ2VN
YXAoaS0+aW1hZ2VNYXAoKSkgOiAwOwogfQogCkBAIC01MTEsOSArNTA5LDkgQEAgYm9vbCBSZW5k
ZXJJbWFnZTo6bm9kZUF0UG9pbnQoTm9kZUluZm8mIAogCiB2b2lkIFJlbmRlckltYWdlOjp1cGRh
dGVBbHRUZXh0KCkKIHsKLSAgICBpZiAoZWxlbWVudCgpLT5pZCgpID09IElEX0lOUFVUKQorICAg
IGlmIChlbGVtZW50KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppbnB1dCgpKSkKICAgICAgICAg
YWx0ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudEltcGwqPihlbGVtZW50KCkpLT5hbHRU
ZXh0KCk7Ci0gICAgZWxzZSBpZiAoZWxlbWVudCgpLT5pZCgpID09IElEX0lNRykKKyAgICBlbHNl
IGlmIChlbGVtZW50KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppbWcoKSkpCiAgICAgICAgIGFs
dCA9IHN0YXRpY19jYXN0PEhUTUxJbWFnZUVsZW1lbnRJbXBsKj4oZWxlbWVudCgpKS0+YWx0VGV4
dCgpOwogfQogCkluZGV4OiBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2xpc3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3JlbmRlcmluZy9yZW5kZXJfbGlz
dC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNjAKZGlmZiAtdSAtcCAtcjEuNjAga2h0bWwv
cmVuZGVyaW5nL3JlbmRlcl9saXN0LmNwcAotLS0ga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9saXN0
LmNwcAkyNSBGZWIgMjAwNSAwMDoyNToxMiAtMDAwMAkxLjYwCisrKyBraHRtbC9yZW5kZXJpbmcv
cmVuZGVyX2xpc3QuY3BwCTIyIEp1biAyMDA1IDIzOjIzOjQxIC0wMDAwCkBAIC0yNiw3ICsyNiw4
IEBACiAjaW5jbHVkZSAicmVuZGVyaW5nL3JlbmRlcl9jYW52YXMuaCIKIAogI2luY2x1ZGUgInht
bC9kb21fZG9jaW1wbC5oIgotI2luY2x1ZGUgIm1pc2MvaHRtbHRhZ3MuaCIKKworI2luY2x1ZGUg
Imh0bWxuYW1lcy5oIgogCiAjaW5jbHVkZSA8cXBhaW50ZXIuaD4KIApAQCAtMzcsNiArMzgsNyBA
QAogLy8jZGVmaW5lIEJPWF9ERUJVRwogCiB1c2luZyBET006OkRvY3VtZW50SW1wbDsKK3VzaW5n
IERPTTo6SFRNTE5hbWVzOwogdXNpbmcgbmFtZXNwYWNlIGtodG1sOwogCiBjb25zdCBpbnQgY01h
cmtlclBhZGRpbmcgPSA3OwpAQCAtMjEzLDcgKzIxNSw3IEBAIHN0YXRpYyBSZW5kZXJPYmplY3Qq
IGdldFBhcmVudE9mRmlyc3RMaW4KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICAg
ICAgaWYgKGN1cnJDaGlsZC0+c3R5bGUoKS0+aHRtbEhhY2tzKCkgJiYgY3VyckNoaWxkLT5lbGVt
ZW50KCkgJiYKLSAgICAgICAgICAgIChjdXJyQ2hpbGQtPmVsZW1lbnQoKS0+aWQoKSA9PSBJRF9V
TCB8fCBjdXJyQ2hpbGQtPmVsZW1lbnQoKS0+aWQoKSA9PSBJRF9PTCkpCisgICAgICAgICAgICAo
Y3VyckNoaWxkLT5lbGVtZW50KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp1bCgpKXx8IGN1cnJD
aGlsZC0+ZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b2woKSkpKQogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgUmVuZGVyT2JqZWN0KiBsaW5lQm94ID0g
Z2V0UGFyZW50T2ZGaXJzdExpbmVCb3goY3VyckNoaWxkLCBtYXJrZXIpOwpJbmRleDoga2h0bWwv
cmVuZGVyaW5nL3JlbmRlcl9vYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9XZWJDb3JlL2todG1sL3JlbmRlcmluZy9yZW5kZXJfb2JqZWN0LmNwcCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS4xOTQKZGlmZiAtdSAtcCAtcjEuMTk0IGtodG1sL3JlbmRlcmluZy9yZW5kZXJf
b2JqZWN0LmNwcAotLS0ga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9vYmplY3QuY3BwCTExIE1heSAy
MDA1IDAyOjEwOjEwIC0wMDAwCTEuMTk0CisrKyBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX29iamVj
dC5jcHAJMjIgSnVuIDIwMDUgMjM6MjM6NDMgLTAwMDAKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNs
dWRlICJyZW5kZXJfaW5saW5lLmgiCiAjaW5jbHVkZSAicmVuZGVyX2Jsb2NrLmgiCiAjaW5jbHVk
ZSAicmVuZGVyX2ZsZXhib3guaCIKKyNpbmNsdWRlICJodG1sbmFtZXMuaCIKIAogI2lmIEFQUExF
X0NIQU5HRVMKIC8vIEZvciBhY2Nlc3NpYmlsaXR5CkBAIC0xNzUsMTcgKzE3NiwxNyBAQCBib29s
IFJlbmRlck9iamVjdDo6aXNSb290KCkgY29uc3QKIAogYm9vbCBSZW5kZXJPYmplY3Q6OmlzQm9k
eSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGVsZW1lbnQoKSAmJiBlbGVtZW50KCktPnJlbmRlcmVy
KCkgPT0gdGhpcyAmJiBlbGVtZW50KCktPmlkKCkgPT0gSURfQk9EWTsKKyAgICByZXR1cm4gZWxl
bWVudCgpICYmIGVsZW1lbnQoKS0+cmVuZGVyZXIoKSA9PSB0aGlzICYmIGVsZW1lbnQoKS0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OmJvZHkoKSk7CiB9CiAKIGJvb2wgUmVuZGVyT2JqZWN0Ojppc0hS
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gZWxlbWVudCgpICYmIGVsZW1lbnQoKS0+aWQoKSA9PSBJ
RF9IUjsKKyAgICByZXR1cm4gZWxlbWVudCgpICYmIGVsZW1lbnQoKS0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OmhyKCkpOwogfQogCiBib29sIFJlbmRlck9iamVjdDo6aXNIVE1MTWFycXVlZSgpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIGVsZW1lbnQoKSAmJiBlbGVtZW50KCktPnJlbmRlcmVyKCkgPT0g
dGhpcyAmJiBlbGVtZW50KCktPmlkKCkgPT0gSURfTUFSUVVFRTsKKyAgICByZXR1cm4gZWxlbWVu
dCgpICYmIGVsZW1lbnQoKS0+cmVuZGVyZXIoKSA9PSB0aGlzICYmIGVsZW1lbnQoKS0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6Om1hcnF1ZWUoKSk7CiB9CiAKIGJvb2wgUmVuZGVyT2JqZWN0OjpjYW5I
YXZlQ2hpbGRyZW4oKSBjb25zdApAQCAtNzM3LDcgKzczOCw3IEBAIGJvb2wgUmVuZGVyT2JqZWN0
OjpzaXplc1RvTWF4V2lkdGgoKSBjb24KICAgICAvLyBidXQgdGhleSBhbGxvdyB0ZXh0IHRvIHNp
dCBvbiB0aGUgc2FtZSBsaW5lIGFzIHRoZSBtYXJxdWVlLgogICAgIGlmIChpc0Zsb2F0aW5nKCkg
fHwgKGlzQ29tcGFjdCgpICYmIGlzSW5saW5lKCkpIHx8IAogICAgICAgICAoaXNJbmxpbmVCbG9j
a09ySW5saW5lVGFibGUoKSAmJiAhaXNIVE1MTWFycXVlZSgpKSB8fAotICAgICAgICAoZWxlbWVu
dCgpICYmIChlbGVtZW50KCktPmlkKCkgPT0gSURfQlVUVE9OIHx8IGVsZW1lbnQoKS0+aWQoKSA9
PSBJRF9MRUdFTkQpKSkKKyAgICAgICAgKGVsZW1lbnQoKSAmJiAoZWxlbWVudCgpLT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6YnV0dG9uKCkpIHx8IGVsZW1lbnQoKS0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OmxlZ2VuZCgpKSkpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAKICAgICAvLyBDaGls
ZHJlbiBvZiBhIGhvcml6b250YWwgbWFycXVlZSBkbyBub3QgZmlsbCB0aGUgY29udGFpbmVyIGJ5
IGRlZmF1bHQuCkBAIC0xMzI2LDcgKzEzMjcsNyBAQCBRU3RyaW5nIFJlbmRlck9iamVjdDo6aW5m
b3JtYXRpb24oKSBjb25zCiAgICAgaWYgKGVsZW1lbnQoKSAmJiBlbGVtZW50KCktPmFjdGl2ZSgp
KSB0cyA8PCAiYWN0ICI7CiAgICAgaWYgKGVsZW1lbnQoKSAmJiBlbGVtZW50KCktPmlzTGluaygp
KSB0cyA8PCAiYW5jaG9yICI7CiAgICAgaWYgKGVsZW1lbnQoKSAmJiBlbGVtZW50KCktPmZvY3Vz
ZWQoKSkgdHMgPDwgImZvY3VzICI7Ci0gICAgaWYgKGVsZW1lbnQoKSkgdHMgPDwgIiA8IiA8PCAg
Z2V0VGFnTmFtZShlbGVtZW50KCktPmlkKCkpLnN0cmluZygpIDw8ICI+IjsKKyAgICBpZiAoZWxl
bWVudCgpKSB0cyA8PCAiIDwiIDw8ICBlbGVtZW50KCktPmxvY2FsTmFtZSgpLnN0cmluZygpIDw8
ICI+IjsKICAgICB0cyA8PCAiICgiIDw8IHhQb3MoKSA8PCAiLCIgPDwgeVBvcygpIDw8ICIsIiA8
PCB3aWR0aCgpIDw8ICIsIiA8PCBoZWlnaHQoKSA8PCAiKSIKIAk8PCAoaXNUYWJsZUNlbGwoKSA/
CiAJICAgICggUVN0cmluZzo6ZnJvbUxhdGluMSgiIFtyPSIpICsKQEAgLTE1NTAsNyArMTU1MSw3
IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpzZXRTdHlsZShSZW5kZXJTdHlsZSAKICAgICAgICAgLy8g
VGhlIGJhY2tncm91bmQgb2YgdGhlIHJvb3QgZWxlbWVudCBvciB0aGUgYm9keSBlbGVtZW50IGNv
dWxkIHByb3BhZ2F0ZSB1cCB0bwogICAgICAgICAvLyB0aGUgY2FudmFzLiAgSnVzdCBkaXJ0eSB0
aGUgZW50aXJlIGNhbnZhcyB3aGVuIG91ciBzdHlsZSBjaGFuZ2VzIHN1YnN0YW50aWFsbHkuCiAg
ICAgICAgIGlmIChkID49IFJlbmRlclN0eWxlOjpSZXBhaW50ICYmIGVsZW1lbnQoKSAmJgotICAg
ICAgICAgICAgKGVsZW1lbnQoKS0+aWQoKSA9PSBJRF9IVE1MIHx8IGVsZW1lbnQoKS0+aWQoKSA9
PSBJRF9CT0RZKSkKKyAgICAgICAgICAgIChlbGVtZW50KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjpodG1sKCkpIHx8IGVsZW1lbnQoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJvZHkoKSkpKQog
ICAgICAgICAgICAgY2FudmFzKCktPnJlcGFpbnQoKTsKICAgICAgICAgZWxzZSBpZiAobV9wYXJl
bnQgJiYgIWlzVGV4dCgpKSB7CiAgICAgICAgICAgICAvLyBEbyBhIHJlcGFpbnQgd2l0aCB0aGUg
b2xkIHN0eWxlIGZpcnN0LCBlLmcuLCBmb3IgZXhhbXBsZSBpZiB3ZSBnbyBmcm9tCkBAIC0yMTgy
LDcgKzIxODMsNyBAQCB2b2lkIFJlbmRlck9iamVjdDo6Z2V0VGV4dERlY29yYXRpb25Db2xvCiAg
ICAgICAgIGlmIChjdXJyICYmIGN1cnItPmlzUmVuZGVyQmxvY2soKSAmJiBjdXJyLT5jb250aW51
YXRpb24oKSkKICAgICAgICAgICAgIGN1cnIgPSBjdXJyLT5jb250aW51YXRpb24oKTsKICAgICB9
IHdoaWxlIChjdXJyICYmIGRlY29yYXRpb25zICYmICghcXVpcmtzTW9kZSB8fCAhY3Vyci0+ZWxl
bWVudCgpIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGN1cnItPmVs
ZW1lbnQoKS0+aWQoKSAhPSBJRF9BICYmIGN1cnItPmVsZW1lbnQoKS0+aWQoKSAhPSBJRF9GT05U
KSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICghY3Vyci0+ZWxlbWVu
dCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YSgpKSAmJiAhY3Vyci0+ZWxlbWVudCgpLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6Zm9udCgpKSkpKTsKIAogICAgIC8vIElmIHdlIGJhaWxlZCBvdXQs
IHVzZSB0aGUgZWxlbWVudCB3ZSBiYWlsZWQgb3V0IGF0ICh0eXBpY2FsbHkgYSA8Zm9udD4gb3Ig
PGE+IGVsZW1lbnQpLgogICAgIGlmIChkZWNvcmF0aW9ucyAmJiBjdXJyKSB7CkBAIC0yMzE2LDcg
KzIzMTcsNyBAQCB2b2lkIFJlbmRlck9iamVjdDo6c2V0UGl4bWFwKGNvbnN0IFFQaXhtCiAgICAg
Ly8gd291bGQgYXZvaWQgcHV0dGluZyB0aGlzIGZ1bmN0aW9uIGFuZCB0aGUgQ2FjaGVkT2JqZWN0
Q2xpZW50IGJhc2UgY2xhc3MgaW50byBSZW5kZXJPYmplY3QuCiAKICAgICBpZiAoaW1hZ2UgJiYg
aW1hZ2UtPnBpeG1hcF9zaXplKCkgPT0gaW1hZ2UtPnZhbGlkX3JlY3QoKS5zaXplKCkgJiYgcGFy
ZW50KCkpIHsKLSAgICAgICAgaWYgKGNhbnZhcygpICYmIGVsZW1lbnQoKSAmJiAoZWxlbWVudCgp
LT5pZCgpID09IElEX0hUTUwgfHwgZWxlbWVudCgpLT5pZCgpID09IElEX0JPRFkpKQorICAgICAg
ICBpZiAoY2FudmFzKCkgJiYgZWxlbWVudCgpICYmIChlbGVtZW50KCktPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjpodG1sKCkpIHx8IGVsZW1lbnQoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJvZHko
KSkpKQogICAgICAgICAgICAgY2FudmFzKCktPnJlcGFpbnQoKTsgICAgLy8gcmVwYWludCB0aGUg
ZW50aXJlIGNhbnZhcyBzaW5jZSB0aGUgYmFja2dyb3VuZCBnZXRzIHByb3BhZ2F0ZWQgdXAKICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgcmVwYWludCgpOyAgICAgICAgICAgICAgLy8gcmVwYWlu
dCBvYmplY3QsIHdoaWNoIGlzIGEgYm94IG9yIGEgY29udGFpbmVyIHdpdGggYm94ZXMgaW5zaWRl
IGl0CkluZGV4OiBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX3RhYmxlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9yZW5kZXJpbmcvcmVuZGVyX3RhYmxlLmNw
cCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMjYKZGlmZiAtdSAtcCAtcjEuMTI2IGtodG1sL3Jl
bmRlcmluZy9yZW5kZXJfdGFibGUuY3BwCi0tLSBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX3RhYmxl
LmNwcAkxMSBNYXkgMjAwNSAwMjoxMDoxMCAtMDAwMAkxLjEyNgorKysga2h0bWwvcmVuZGVyaW5n
L3JlbmRlcl90YWJsZS5jcHAJMjIgSnVuIDIwMDUgMjM6MjM6NDUgLTAwMDAKQEAgLTMxLDggKzMx
LDggQEAKICNpbmNsdWRlICJyZW5kZXJpbmcvcmVuZGVyX3RhYmxlLmgiCiAjaW5jbHVkZSAicmVu
ZGVyaW5nL3RhYmxlX2xheW91dC5oIgogI2luY2x1ZGUgImh0bWwvaHRtbF90YWJsZWltcGwuaCIK
LSNpbmNsdWRlICJtaXNjL2h0bWx0YWdzLmgiCiAjaW5jbHVkZSAibWlzYy9odG1sYXR0cnMuaCIK
KyNpbmNsdWRlICJodG1sbmFtZXMuaCIKICNpbmNsdWRlICJ4bWwvZG9tX2RvY2ltcGwuaCIKIAog
I2luY2x1ZGUgPGtnbG9iYWwuaD4KQEAgLTExMiw3ICsxMTIsNyBAQCB2b2lkIFJlbmRlclRhYmxl
OjphZGRDaGlsZChSZW5kZXJPYmplY3QgCiAjZW5kaWYKICAgICBSZW5kZXJPYmplY3QgKm8gPSBj
aGlsZDsKIAotICAgIGlmIChjaGlsZC0+ZWxlbWVudCgpICYmIGNoaWxkLT5lbGVtZW50KCktPmlk
KCkgPT0gSURfRk9STSkgeworICAgIGlmIChjaGlsZC0+ZWxlbWVudCgpICYmIGNoaWxkLT5lbGVt
ZW50KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpmb3JtKCkpKSB7CiAgICAgICAgIFJlbmRlckNv
bnRhaW5lcjo6YWRkQ2hpbGQoY2hpbGQsYmVmb3JlQ2hpbGQpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQpAQCAtMjYyLDcgKzI2Miw3IEBAIHZvaWQgUmVuZGVyVGFibGU6OmxheW91dCgpCiAKICAg
ICBSZW5kZXJPYmplY3QgKmNoaWxkID0gZmlyc3RDaGlsZCgpOwogICAgIHdoaWxlKCBjaGlsZCAp
IHsKLQlpZiAoIGNoaWxkLT5uZWVkc0xheW91dCgpICYmICEoY2hpbGQtPmVsZW1lbnQoKSAmJiBj
aGlsZC0+ZWxlbWVudCgpLT5pZCgpID09IElEX0ZPUk0pKQorCWlmICggY2hpbGQtPm5lZWRzTGF5
b3V0KCkgJiYgIShjaGlsZC0+ZWxlbWVudCgpICYmIGNoaWxkLT5lbGVtZW50KCktPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjpmb3JtKCkpKSkKIAkgICAgY2hpbGQtPmxheW91dCgpOwogCWlmICggY2hp
bGQtPmlzVGFibGVTZWN0aW9uKCkgKSB7CiAJICAgIHN0YXRpY19jYXN0PFJlbmRlclRhYmxlU2Vj
dGlvbiAqPihjaGlsZCktPmNhbGNSb3dIZWlnaHQoKTsKQEAgLTg0OSw3ICs4NDksNyBAQCB2b2lk
IFJlbmRlclRhYmxlU2VjdGlvbjo6YWRkQ2hpbGQoUmVuZGVyCiAjZW5kaWYKICAgICBSZW5kZXJP
YmplY3QgKnJvdyA9IGNoaWxkOwogCi0gICAgaWYgKGNoaWxkLT5lbGVtZW50KCkgJiYgY2hpbGQt
PmVsZW1lbnQoKS0+aWQoKSA9PSBJRF9GT1JNKSB7CisgICAgaWYgKGNoaWxkLT5lbGVtZW50KCkg
JiYgY2hpbGQtPmVsZW1lbnQoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZvcm0oKSkpIHsKICAg
ICAgICAgUmVuZGVyQ29udGFpbmVyOjphZGRDaGlsZChjaGlsZCxiZWZvcmVDaGlsZCk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CkBAIC0xNDk1LDcgKzE0OTUsNyBAQCB2b2lkIFJlbmRlclRhYmxl
Um93OjphZGRDaGlsZChSZW5kZXJPYmplCiAgICAga2REZWJ1ZyggNjA0MCApIDw8IHJlbmRlck5h
bWUoKSA8PCAiKFRhYmxlUm93KTo6YWRkQ2hpbGQoICIgPDwgY2hpbGQtPnJlbmRlck5hbWUoKSA8
PCAiICkiICA8PCAiLCAiIDw8CiAgICAgICAgICAgICAgICAgICAgICAgIChiZWZvcmVDaGlsZCA/
IGJlZm9yZUNoaWxkLT5yZW5kZXJOYW1lKCkgOiAiMCIpIDw8ICIgKSIgPDwgZW5kbDsKICNlbmRp
ZgotICAgIGlmIChjaGlsZC0+ZWxlbWVudCgpICYmIGNoaWxkLT5lbGVtZW50KCktPmlkKCkgPT0g
SURfRk9STSkgeworICAgIGlmIChjaGlsZC0+ZWxlbWVudCgpICYmIGNoaWxkLT5lbGVtZW50KCkt
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpmb3JtKCkpKSB7CiAgICAgICAgIFJlbmRlckNvbnRhaW5l
cjo6YWRkQ2hpbGQoY2hpbGQsYmVmb3JlQ2hpbGQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpA
QCAtMTYwNiw3ICsxNjA2LDcgQEAgdm9pZCBSZW5kZXJUYWJsZUNlbGw6OnVwZGF0ZUZyb21FbGVt
ZW50KAogICAgIGludCBvbGRSU3BhbiA9IHJTcGFuOwogICAgIGludCBvbGRDU3BhbiA9IGNTcGFu
OwogICAgIERPTTo6Tm9kZUltcGwqIG5vZGUgPSBlbGVtZW50KCk7Ci0gICAgaWYgKG5vZGUgJiYg
KG5vZGUtPmlkKCkgPT0gSURfVEQgfHwgbm9kZS0+aWQoKSA9PSBJRF9USCkpIHsKKyAgICBpZiAo
bm9kZSAmJiAobm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRkKCkpIHx8IG5vZGUtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjp0aCgpKSkpIHsKICAgICAgICAgRE9NOjpIVE1MVGFibGVDZWxsRWxl
bWVudEltcGwgKnRjID0gc3RhdGljX2Nhc3Q8RE9NOjpIVE1MVGFibGVDZWxsRWxlbWVudEltcGwg
Kj4obm9kZSk7CiAgICAgICAgIGNTcGFuID0gdGMtPmNvbFNwYW4oKTsKICAgICAgICAgclNwYW4g
PSB0Yy0+cm93U3BhbigpOwpAQCAtMjI5MCw3ICsyMjkwLDcgQEAgdm9pZCBSZW5kZXJUYWJsZUNv
bDo6dXBkYXRlRnJvbUVsZW1lbnQoKQogewogICAgIGludCBvbGRTcGFuID0gX3NwYW47CiAgICAg
RE9NOjpOb2RlSW1wbCAqbm9kZSA9IGVsZW1lbnQoKTsKLSAgICBpZiAobm9kZSAmJiAobm9kZS0+
aWQoKSA9PSBJRF9DT0wgfHwgbm9kZS0+aWQoKSA9PSBJRF9DT0xHUk9VUCkpIHsKKyAgICBpZiAo
bm9kZSAmJiAobm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmNvbCgpKSB8fCBub2RlLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6Y29sZ3JvdXAoKSkpKSB7CiAgICAgICAgIERPTTo6SFRNTFRhYmxl
Q29sRWxlbWVudEltcGwgKnRjID0gc3RhdGljX2Nhc3Q8RE9NOjpIVE1MVGFibGVDb2xFbGVtZW50
SW1wbCAqPihub2RlKTsKICAgICAgICAgX3NwYW4gPSB0Yy0+c3BhbigpOwogICAgIH0gCkluZGV4
OiBraHRtbC94bWwvZG9tX2F0b21pY3N0cmluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1dlYkNvcmUva2h0bWwveG1sL2RvbV9hdG9taWNzdHJpbmcuY3BwLHYKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjMKZGlmZiAtdSAtcCAtcjEuMyBraHRtbC94bWwvZG9tX2F0b21pY3N0cmlu
Zy5jcHAKLS0tIGtodG1sL3htbC9kb21fYXRvbWljc3RyaW5nLmNwcAk1IEZlYiAyMDA0IDAxOjQ1
OjE2IC0wMDAwCTEuMworKysga2h0bWwveG1sL2RvbV9hdG9taWNzdHJpbmcuY3BwCTIyIEp1biAy
MDA1IDIzOjIzOjQ1IC0wMDAwCkBAIC0zMDQsNiArMzA0LDkgQEAgdm9pZCBBdG9taWNTdHJpbmc6
OnJlaGFzaChpbnQgbmV3VGFibGVTaQogCiAgICAgZXh0ZXJuIGNvbnN0IEF0b21pY1N0cmluZyBu
dWxsQXRvbTsKICAgICBleHRlcm4gY29uc3QgQXRvbWljU3RyaW5nIGVtcHR5QXRvbTsKKyAgICBl
eHRlcm4gY29uc3QgQXRvbWljU3RyaW5nIHRleHRBdG9tOworICAgIGV4dGVybiBjb25zdCBBdG9t
aWNTdHJpbmcgY29tbWVudEF0b207CisgICAgZXh0ZXJuIGNvbnN0IEF0b21pY1N0cmluZyBzdGFy
QXRvbTsKICNlbHNlCiAgICAgLy8gRGVmaW5lIGFuIEF0b21pY1N0cmluZy1zaXplZCBhcnJheSBv
ZiBwb2ludGVycyB0byBhdm9pZCBzdGF0aWMgaW5pdGlhbGl6YXRpb24uCiAgICAgLy8gVXNlIGFu
IGFycmF5IG9mIHBvaW50ZXJzIGluc3RlYWQgb2YgYW4gYXJyYXkgb2YgY2hhciBpbiBjYXNlIHRo
ZXJlIGlzIHNvbWUgYWxpZ25tZW50IGlzc3VlLgpAQCAtMzEyLDYgKzMxNSw5IEBAIHZvaWQgQXRv
bWljU3RyaW5nOjpyZWhhc2goaW50IG5ld1RhYmxlU2kKIAogICAgIERFRklORV9HTE9CQUwobnVs
bCwgaWdub3JlZCkKICAgICBERUZJTkVfR0xPQkFMKGVtcHR5LCBpZ25vcmVkKQorICAgIERFRklO
RV9HTE9CQUwodGV4dCwgaWdub3JlZCkKKyAgICBERUZJTkVfR0xPQkFMKGNvbW1lbnQsIGlnbm9y
ZWQpCisgICAgREVGSU5FX0dMT0JBTChzdGFyLCBpZ25vcmVkKQogI2VuZGlmCiAKICNkZWZpbmUg
Q0FMTF9ERUZJTkVfR0xPQkFMKG5hbWUpIERFRklORV9HTE9CQUwobmFtZSwgI25hbWUpCkBAIC0z
MjUsNyArMzMxLDEwIEBAIHZvaWQgQXRvbWljU3RyaW5nOjppbml0KCkKICAgICAgICAgLy8gVXNl
IHBsYWNlbWVudCBuZXcgdG8gaW5pdGlhbGl6ZSB0aGUgZ2xvYmFscy4KICAgICAgICAgbmV3ICgm
bnVsbEF0b20pIEF0b21pY1N0cmluZzsKICAgICAgICAgbmV3ICgmZW1wdHlBdG9tKSBBdG9taWNT
dHJpbmcoIiIpOwotICAgICAgICAKKyAgICAgICAgbmV3ICgmdGV4dEF0b20pIEF0b21pY1N0cmlu
ZygiI3RleHQiKTsKKyAgICAgICAgbmV3ICgmY29tbWVudEF0b20pIEF0b21pY1N0cmluZygiI2Nv
bW1lbnQiKTsKKyAgICAgICAgbmV3ICgmc3RhckF0b20pIEF0b21pY1N0cmluZygiKiIpOworCiAg
ICAgICAgICNkZWZpbmUgUExBQ0VNRU5UX05FV19HTE9CQUwobmFtZSwgc3RyaW5nKSBuZXcgKCZu
YW1lICMjIFByb3BlcnR5TmFtZSkgQXRvbWljU3RyaW5nKHN0cmluZyk7CiAgICAgICAgICNkZWZp
bmUgQ0FMTF9QTEFDRU1FTlRfTkVXX0dMT0JBTChuYW1lKSBQTEFDRU1FTlRfTkVXX0dMT0JBTChu
YW1lLCAjbmFtZSkKICAgICAgICAgS0hUTUxfQVRPTUlDU1RSSU5HX0VBQ0hfR0xPQkFMKENBTExf
UExBQ0VNRU5UX05FV19HTE9CQUwpCkluZGV4OiBraHRtbC94bWwvZG9tX2F0b21pY3N0cmluZy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3htbC9kb21fYXRv
bWljc3RyaW5nLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMwpkaWZmIC11IC1wIC1yMS4zIGto
dG1sL3htbC9kb21fYXRvbWljc3RyaW5nLmgKLS0tIGtodG1sL3htbC9kb21fYXRvbWljc3RyaW5n
LmgJMjEgSnVuIDIwMDUgMjI6Mjc6NTUgLTAwMDAJMS4zCisrKyBraHRtbC94bWwvZG9tX2F0b21p
Y3N0cmluZy5oCTIyIEp1biAyMDA1IDIzOjIzOjQ1IC0wMDAwCkBAIC0xMTYsNiArMTE2LDkgQEAg
aW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBdG9taWNTdHJpbgogI2lmICFLSFRNTF9BVE9N
SUNTVFJJTkdfSElERV9HTE9CQUxTCiAgICAgZXh0ZXJuIGNvbnN0IEF0b21pY1N0cmluZyBudWxs
QXRvbTsKICAgICBleHRlcm4gY29uc3QgQXRvbWljU3RyaW5nIGVtcHR5QXRvbTsKKyAgICBleHRl
cm4gY29uc3QgQXRvbWljU3RyaW5nIHRleHRBdG9tOworICAgIGV4dGVybiBjb25zdCBBdG9taWNT
dHJpbmcgY29tbWVudEF0b207CisgICAgZXh0ZXJuIGNvbnN0IEF0b21pY1N0cmluZyBzdGFyQXRv
bTsKICNkZWZpbmUgS0hUTUxfQVRPTUlDU1RSSU5HX0RFQ0xBUkVfR0xPQkFMKG5hbWUpIGV4dGVy
biBjb25zdCBBdG9taWNTdHJpbmcgbmFtZSAjIyBQcm9wZXJ0eU5hbWU7CiAgICAgS0hUTUxfQVRP
TUlDU1RSSU5HX0VBQ0hfR0xPQkFMKEtIVE1MX0FUT01JQ1NUUklOR19ERUNMQVJFX0dMT0JBTCkK
ICAgICBLSFRNTF9BVE9NSUNTVFJJTkdfREVDTEFSRV9HTE9CQUwoc3BlY2lhbFByb3RvdHlwZSkK
SW5kZXg6IGtodG1sL3htbC9kb21fZG9jaW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1dlYkNvcmUva2h0bWwveG1sL2RvbV9kb2NpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS4yMzAKZGlmZiAtdSAtcCAtcjEuMjMwIGtodG1sL3htbC9kb21fZG9jaW1wbC5jcHAK
LS0tIGtodG1sL3htbC9kb21fZG9jaW1wbC5jcHAJMjIgSnVuIDIwMDUgMTg6MjI6MDIgLTAwMDAJ
MS4yMzAKKysrIGtodG1sL3htbC9kb21fZG9jaW1wbC5jcHAJMjIgSnVuIDIwMDUgMjM6MjM6NDgg
LTAwMDAKQEAgLTM0LDggKzM0LDYgQEAKICNpbmNsdWRlICJ4bWwvZG9tMl92aWV3c2ltcGwuaCIK
ICNpbmNsdWRlICJ4bWwveG1sX3Rva2VuaXplci5oIgogCi0jaW5jbHVkZSAieG1sX25hbWVzcGFj
ZV90YWJsZS5oIgotCiAjaW5jbHVkZSAiY3NzL2Nzc2hlbHBlci5oIgogI2luY2x1ZGUgImNzcy9j
c3NzdHlsZXNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiY3NzL2Nzc19zdHlsZXNoZWV0aW1wbC5oIgpJ
bmRleDoga2h0bWwveG1sL2RvbV9kb2NpbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L1dlYkNvcmUva2h0bWwveG1sL2RvbV9kb2NpbXBsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuMTE1CmRpZmYgLXUgLXAgLXIxLjExNSBraHRtbC94bWwvZG9tX2RvY2ltcGwuaAotLS0ga2h0
bWwveG1sL2RvbV9kb2NpbXBsLmgJMjIgSnVuIDIwMDUgMTg6MjI6MDIgLTAwMDAJMS4xMTUKKysr
IGtodG1sL3htbC9kb21fZG9jaW1wbC5oCTIyIEp1biAyMDA1IDIzOjIzOjQ5IC0wMDAwCkBAIC0y
MTgsOCArMjE4LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpc0RvY3VtZW50Tm9kZSgp
IGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNIVE1MRG9jdW1lbnQo
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCi0gICAgRWxlbWVudEltcGwgKmNyZWF0ZUhUTUxF
bGVtZW50KGNvbnN0IERPTVN0cmluZyAmdGFnTmFtZSwgaW50ICZleGNlcHRpb25jb2RlKTsKLSAg
ICBFbGVtZW50SW1wbCAqY3JlYXRlSFRNTEVsZW1lbnQodW5zaWduZWQgc2hvcnQgdGFnSUQpOwor
ICAgIEVsZW1lbnRJbXBsKiBjcmVhdGVIVE1MRWxlbWVudChjb25zdCBET01TdHJpbmcgJnRhZ05h
bWUsIGludCAmZXhjZXB0aW9uY29kZSk7CisgICAgRWxlbWVudEltcGwqIGNyZWF0ZUhUTUxFbGVt
ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lKTsKIAogICAgIGtodG1sOjpDU1NTdHls
ZVNlbGVjdG9yICpzdHlsZVNlbGVjdG9yKCkgeyByZXR1cm4gbV9zdHlsZVNlbGVjdG9yOyB9CiAK
QEAgLTM5OSw5ICszOTksNiBAQCBwdWJsaWM6CiAgICAgLy8gIyMjIHRoaW5rIGFib3V0IGltcGxl
bWVudGluZyByZWYnY291bnRpbmcgZm9yIHRoZSBpZCdzCiAgICAgLy8gaW4gb3JkZXIgdG8gYmUg
YWJsZSB0byByZWFzc2lnbiB0aG9zZSB0aGF0IGFyZSBubyBsb25nZXIgaW4gdXNlCiAgICAgLy8g
KGNvdWxkIG1ha2UgcHJvYmxlbXMgd2hlbiBpdCBpcyBzdGlsbCBrZXB0IHNvbWV3aGVyZSBhcm91
bmQsIGkuZS4gc3R5bGVzZWxlY3RvcikKLSAgICBOb2RlSW1wbDo6SWQgdGFnSWQoRE9NU3RyaW5n
SW1wbCogX25hbWVzcGFjZVVSSSwgRE9NU3RyaW5nSW1wbCAqX25hbWUsIGJvb2wgcmVhZG9ubHkp
OwotICAgIERPTVN0cmluZyB0YWdOYW1lKE5vZGVJbXBsOjpJZCBfaWQpIGNvbnN0OwotCiAgICAg
Tm9kZUltcGw6OklkIGF0dHJJZChET01TdHJpbmdJbXBsKiBfbmFtZXNwYWNlVVJJLCBET01TdHJp
bmdJbXBsICpfbmFtZSwgYm9vbCByZWFkb25seSk7CiAgICAgRE9NU3RyaW5nIGF0dHJOYW1lKE5v
ZGVJbXBsOjpJZCBfaWQpIGNvbnN0OwogCkluZGV4OiBraHRtbC94bWwvZG9tX2VsZW1lbnRpbXBs
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC94bWwvZG9t
X2VsZW1lbnRpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS42NwpkaWZmIC11IC1wIC1y
MS42NyBraHRtbC94bWwvZG9tX2VsZW1lbnRpbXBsLmNwcAotLS0ga2h0bWwveG1sL2RvbV9lbGVt
ZW50aW1wbC5jcHAJMTEgTWF5IDIwMDUgMDU6NDk6MzUgLTAwMDAJMS42NworKysga2h0bWwveG1s
L2RvbV9lbGVtZW50aW1wbC5jcHAJMjIgSnVuIDIwMDUgMjM6MjM6NTAgLTAwMDAKQEAgLTkwLDE4
ICs5MCwxOCBAQCB1bnNpZ25lZCBzaG9ydCBBdHRySW1wbDo6bm9kZVR5cGUoKSBjb25zCiAgICAg
cmV0dXJuIE5vZGU6OkFUVFJJQlVURV9OT0RFOwogfQogCi1ET01TdHJpbmcgQXR0ckltcGw6OnBy
ZWZpeCgpIGNvbnN0Citjb25zdCBBdG9taWNTdHJpbmcmIEF0dHJJbXBsOjpwcmVmaXgoKSBjb25z
dAogewogICAgIHJldHVybiBtX2F0dHJpYnV0ZS0+cHJlZml4KCk7CiB9CiAKLXZvaWQgQXR0cklt
cGw6OnNldFByZWZpeChjb25zdCBET01TdHJpbmcgJl9wcmVmaXgsIGludCAmZXhjZXB0aW9uY29k
ZSApCit2b2lkIEF0dHJJbXBsOjpzZXRQcmVmaXgoY29uc3QgQXRvbWljU3RyaW5nICZfcHJlZml4
LCBpbnQgJmV4Y2VwdGlvbmNvZGUgKQogewogICAgIGNoZWNrU2V0UHJlZml4KF9wcmVmaXgsIGV4
Y2VwdGlvbmNvZGUpOwogICAgIGlmIChleGNlcHRpb25jb2RlKQogICAgICAgICByZXR1cm47CiAK
LSAgICBtX2F0dHJpYnV0ZS0+c2V0UHJlZml4KF9wcmVmaXguaW1wbGVtZW50YXRpb24oKSk7Cisg
ICAgbV9hdHRyaWJ1dGUtPnNldFByZWZpeChfcHJlZml4KTsKIH0KIAogRE9NU3RyaW5nIEF0dHJJ
bXBsOjpub2RlVmFsdWUoKSBjb25zdApAQCAtMjA2LDcgKzIwNiw2IEBAIEVsZW1lbnRJbXBsOjpF
bGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG8KICAgICA6IENvbnRhaW5lck5vZGVJbXBsKGRvYykK
IHsKICAgICBuYW1lZEF0dHJNYXAgPSAwOwotICAgIG1fcHJlZml4ID0gMDsKIH0KIAogRWxlbWVu
dEltcGw6On5FbGVtZW50SW1wbCgpCkBAIC0yMTUsOSArMjE0LDYgQEAgRWxlbWVudEltcGw6On5F
bGVtZW50SW1wbCgpCiAgICAgICAgIG5hbWVkQXR0ck1hcC0+ZGV0YWNoRnJvbUVsZW1lbnQoKTsK
ICAgICAgICAgbmFtZWRBdHRyTWFwLT5kZXJlZigpOwogICAgIH0KLQotICAgIGlmIChtX3ByZWZp
eCkKLSAgICAgICAgbV9wcmVmaXgtPmRlcmVmKCk7CiB9CiAKIHZvaWQgRWxlbWVudEltcGw6OnJl
bW92ZUF0dHJpYnV0ZSggTm9kZUltcGw6OklkIGlkLCBpbnQgJmV4Y2VwdGlvbmNvZGUgKQpAQCAt
MzUxLDM2ICszNDcsMjUgQEAgdm9pZCBFbGVtZW50SW1wbDo6c2V0QXR0cmlidXRlTWFwKCBOYW1l
ZAogYm9vbCBFbGVtZW50SW1wbDo6aGFzQXR0cmlidXRlcygpIGNvbnN0CiB7CiAgICAgdXBkYXRl
U3R5bGVBdHRyaWJ1dGVJZk5lZWRlZCgpOwotCiAgICAgcmV0dXJuIG5hbWVkQXR0ck1hcCAmJiBu
YW1lZEF0dHJNYXAtPmxlbmd0aCgpID4gMDsKIH0KIAogRE9NU3RyaW5nIEVsZW1lbnRJbXBsOjpu
b2RlTmFtZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHRhZ05hbWUoKTsKLX0KLQotRE9NU3RyaW5n
IEVsZW1lbnRJbXBsOjp0YWdOYW1lKCkgY29uc3QKLXsKICAgICBET01TdHJpbmcgdG4gPSBnZXRE
b2N1bWVudCgpLT50YWdOYW1lKGlkKCkpOwotCi0gICAgaWYgKG1fcHJlZml4KQotICAgICAgICBy
ZXR1cm4gRE9NU3RyaW5nKG1fcHJlZml4KSArICI6IiArIHRuOwotCisgICAgaWYgKG1fdGFnTmFt
ZS5oYXNQcmVmaXgoKSkKKyAgICAgICAgcmV0dXJuIERPTVN0cmluZyhtX3RhZ05hbWUucHJlZml4
KCkpICsgIjoiICsgdG47CiAgICAgcmV0dXJuIHRuOwogfQogCi12b2lkIEVsZW1lbnRJbXBsOjpz
ZXRQcmVmaXgoIGNvbnN0IERPTVN0cmluZyAmX3ByZWZpeCwgaW50ICZleGNlcHRpb25jb2RlICkK
K3ZvaWQgRWxlbWVudEltcGw6OnNldFByZWZpeChjb25zdCBBdG9taWNTdHJpbmcgJl9wcmVmaXgs
IGludCAmZXhjZXB0aW9uY29kZSkKIHsKICAgICBjaGVja1NldFByZWZpeChfcHJlZml4LCBleGNl
cHRpb25jb2RlKTsKICAgICBpZiAoZXhjZXB0aW9uY29kZSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgaWYgKG1fcHJlZml4KQotICAgICAgICBtX3ByZWZpeC0+ZGVyZWYoKTsKLSAgICBtX3ByZWZp
eCA9IF9wcmVmaXguaW1wbGVtZW50YXRpb24oKTsKLSAgICBpZiAobV9wcmVmaXgpCi0gICAgICAg
IG1fcHJlZml4LT5yZWYoKTsKKyAgICAvLyBGSVhNRTogVGhpcyBpcyBqdXN0IGEgaGFjayBmb3Ig
c3RhZ2Ugb25lIG9mIHRoZSBUYWdOYW1lIHBhdGNoLiAgSXQgd2lsbCBjaGFuZ2UuCisgICAgbV90
YWdOYW1lLnNldFByZWZpeChfcHJlZml4KTsKIH0KIAogdm9pZCBFbGVtZW50SW1wbDo6Y3JlYXRl
QXR0cmlidXRlTWFwKCkgY29uc3QKQEAgLTc4MiwxNSArNzY3LDE5IEBAIFhNTEVsZW1lbnRJbXBs
OjpYTUxFbGVtZW50SW1wbChEb2N1bWVudFAKICAgICAgICAgbG9jYWxOYW1lLT5yZW1vdmUoMCxj
b2xvbnBvcysxKTsKICAgICAgICAgbV9pZCA9IGRvYy0+ZG9jdW1lbnQoKS0+dGFnSWQoX25hbWVz
cGFjZVVSSSwgbG9jYWxOYW1lLCBmYWxzZSAvKiBhbGxvY2F0ZSAqLyk7CiAgICAgICAgIGxvY2Fs
TmFtZS0+ZGVyZWYoKTsKLSAgICAgICAgbV9wcmVmaXggPSBfcXVhbGlmaWVkTmFtZS0+Y29weSgp
OwotICAgICAgICBtX3ByZWZpeC0+cmVmKCk7Ci0gICAgICAgIG1fcHJlZml4LT50cnVuY2F0ZShj
b2xvbnBvcyk7CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyBhIHRlbXBvcmFy
eSBzaXR1YXRpb24gZm9yIHN0YWdlIG9uZSBvZiB0aGUgUXVhbGlmaWVkTmFtZSBwYXRjaC4gIFRo
aXMgaXMgYWxzbyBhIHJlYWxseSBzdHVwaWQgd2F5IHRvCisgICAgICAgIC8vIGhhdmUgdG8gaGFu
ZGxlIHRoZSBwcmVmaXguICBXYXkgdG9vIG11Y2ggY29weWluZy4gIFdlIHNob3VsZCBtYWtlIHN1
cmUgdGhlIFhNTCB0b2tlbml6ZXIgaGFzIGRvbmUgdGhlIHNwbGl0CisgICAgICAgIC8vIGFscmVh
ZHkgaW50byBwcmVmaXggYW5kIGxvY2FsTmFtZS4KKyAgICAgICAgRE9NU3RyaW5nSW1wbCogcHJl
Zml4ID0gX3F1YWxpZmllZE5hbWUtPmNvcHkoKTsKKyAgICAgICAgcHJlZml4LT5yZWYoKTsKKyAg
ICAgICAgcHJlZml4LT50cnVuY2F0ZShjb2xvbnBvcyk7CisgICAgICAgIG1fdGFnTmFtZSA9IFF1
YWxpZmllZE5hbWUocHJlZml4LCBudWxsQXRvbSwgbnVsbEF0b20pOworICAgICAgICBwcmVmaXgt
PmRlcmVmKCk7CiAgICAgfQotICAgIGVsc2UgeworICAgIGVsc2UKICAgICAgICAgLy8gbm8gcHJl
Zml4CiAgICAgICAgIG1faWQgPSBkb2MtPmRvY3VtZW50KCktPnRhZ0lkKF9uYW1lc3BhY2VVUkks
IF9xdWFsaWZpZWROYW1lLCBmYWxzZSAvKiBhbGxvY2F0ZSAqLyk7Ci0gICAgICAgIG1fcHJlZml4
ID0gMDsKLSAgICB9CiB9CiAKIFhNTEVsZW1lbnRJbXBsOjp+WE1MRWxlbWVudEltcGwoKQpJbmRl
eDoga2h0bWwveG1sL2RvbV9lbGVtZW50aW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9XZWJDb3JlL2todG1sL3htbC9kb21fZWxlbWVudGltcGwuaCx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS40MQpkaWZmIC11IC1wIC1yMS40MSBraHRtbC94bWwvZG9tX2VsZW1lbnRpbXBsLmgK
LS0tIGtodG1sL3htbC9kb21fZWxlbWVudGltcGwuaAkxMiBNYXkgMjAwNSAxNzoxMToyMiAtMDAw
MAkxLjQxCisrKyBraHRtbC94bWwvZG9tX2VsZW1lbnRpbXBsLmgJMjIgSnVuIDIwMDUgMjM6MjM6
NTAgLTAwMDAKQEAgLTIzLDEzICsyMywxNCBAQAogICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBV
U0EuCiAgKgogICovCi0jaWZuZGVmIF9ET01fRUxFTUVOVEltcGxfaF8KLSNkZWZpbmUgX0RPTV9F
TEVNRU5USW1wbF9oXworI2lmbmRlZiBfRE9NX0VMRU1FTlRJTVBMX2hfCisjZGVmaW5lIF9ET01f
RUxFTUVOVElNUExfaF8KIAogI2luY2x1ZGUgImRvbV9ub2RlaW1wbC5oIgogI2luY2x1ZGUgInht
bC9kb21fc3RyaW5naW1wbC5oIgogI2luY2x1ZGUgIm1pc2Mvc2hhcmVkLmgiCiAjaW5jbHVkZSAi
Y3NzL2Nzc192YWx1ZWltcGwuaCIKKyNpbmNsdWRlICJkb21fcW5hbWUuaCIKIAogI2lmIEFQUExF
X0NIQU5HRVMKICNpZmRlZiBfX09CSkNfXwpAQCAtMTI4LDggKzEyOSw4IEBAIHB1YmxpYzoKICAg
ICAvLyBET00gbWV0aG9kcyBvdmVycmlkZGVuIGZyb20gIHBhcmVudCBjbGFzc2VzCiAgICAgdmly
dHVhbCBET01TdHJpbmcgbm9kZU5hbWUoKSBjb25zdDsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIHNo
b3J0IG5vZGVUeXBlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBET01TdHJpbmcgcHJlZml4KCkgY29u
c3Q7Ci0gICAgdmlydHVhbCB2b2lkIHNldFByZWZpeChjb25zdCBET01TdHJpbmcgJl9wcmVmaXgs
IGludCAmZXhjZXB0aW9uY29kZSApOworICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBw
cmVmaXgoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UHJlZml4KGNvbnN0IEF0b21pY1N0
cmluZyAmX3ByZWZpeCwgaW50ICZleGNlcHRpb25jb2RlICk7CiAKICAgICB2aXJ0dWFsIERPTVN0
cmluZyBub2RlVmFsdWUoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0Tm9kZVZhbHVlKCBj
b25zdCBET01TdHJpbmcgJiwgaW50ICZleGNlcHRpb25jb2RlICk7CkBAIC0xNTYsNyArMTU3LDcg
QEAgY2xhc3MgRWxlbWVudEltcGwgOiBwdWJsaWMgQ29udGFpbmVyTm9kZQogICAgIGZyaWVuZCBj
bGFzcyBOb2RlSW1wbDsKICAgICBmcmllbmQgY2xhc3Mga2h0bWw6OkNTU1N0eWxlU2VsZWN0b3I7
CiBwdWJsaWM6Ci0gICAgRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYyk7CisgICAgRWxlbWVu
dEltcGwoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnRQdHIgKmRvYyk7CiAg
ICAgfkVsZW1lbnRJbXBsKCk7CiAKICAgICAvLyBVc2VkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHdo
ZXRoZXIgb3Igbm90IGFuIGVsZW1lbnQgaGFzIGEgZ2l2ZW4gQ1NTIGNsYXNzLgpAQCAtMTg2LDEz
ICsxODcsMjIgQEAgcHVibGljOgogICAgIFNoYXJlZFB0cjxBdHRySW1wbD4gc2V0QXR0cmlidXRl
Tm9kZU5TKEF0dHJJbXBsICpuZXdBdHRyLCBpbnQgJmV4Y2VwdGlvbikgeyByZXR1cm4gc2V0QXR0
cmlidXRlTm9kZShuZXdBdHRyLCBleGNlcHRpb24pOyB9CiAgICAgU2hhcmVkUHRyPEF0dHJJbXBs
PiByZW1vdmVBdHRyaWJ1dGVOb2RlKEF0dHJJbXBsICpvbGRBdHRyLCBpbnQgJmV4Y2VwdGlvbik7
CiAgICAgCi0gICAgRE9NU3RyaW5nIHByZWZpeCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJlZml4OyB9
Ci0gICAgdm9pZCBzZXRQcmVmaXgoY29uc3QgRE9NU3RyaW5nICZfcHJlZml4LCBpbnQgJmV4Y2Vw
dGlvbmNvZGUgKTsKLQogICAgIHZpcnR1YWwgQ1NTU3R5bGVEZWNsYXJhdGlvbkltcGwgKnN0eWxl
KCk7CiAKKyAgICB2aXJ0dWFsIGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUoKSBjb25zdCB7
IHJldHVybiBtX3RhZ05hbWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaGFzVGFnTmFtZShjb25zdCBR
dWFsaWZpZWROYW1lJiB0YWdOYW1lKSBjb25zdCB7IHJldHVybiBtX3RhZ05hbWUubWF0Y2hlcyh0
YWdOYW1lKTsgfQorICAgIAorICAgIC8vIEEgbW9yZSBsaWdodHdlaWdodCBjaGVjayB0aGFuIGhh
c1RhZ05hbWUuICBVc2UgdGhpcyBjaGVjayB3aGVuIHlvdSBrbm93IHRoZSBuYW1lc3BhY2VzIG9m
IHRoZSB0d28gUXVhbGlmaWVkTmFtZXMgbWF0Y2gsIGUuZy4sIHRoYXQgdGhleSdyZQorICAgIC8v
IGJvdGggSFRNTCBuYW1lcy4KKyAgICBib29sIGhhc0xvY2FsTmFtZShjb25zdCBRdWFsaWZpZWRO
YW1lJiB0YWdOYW1lKSBjb25zdCB7IHJldHVybiBtX3RhZ05hbWUubG9jYWxOYW1lKCkgPT0gdGFn
TmFtZS5sb2NhbE5hbWUoKTsgfQorICAgIGJvb2wgaGFzTG9jYWxOYW1lKGNvbnN0IEF0b21pY1N0
cmluZyYgbG9jYWxOYW1lKSBjb25zdCB7IHJldHVybiBtX3RhZ05hbWUubG9jYWxOYW1lKCkgPT0g
bG9jYWxOYW1lOyB9CisKKyAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1l
KCkgY29uc3QgeyByZXR1cm4gbV90YWdOYW1lLmxvY2FsTmFtZSgpOyB9CisgICAgdmlydHVhbCBj
b25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCgpIGNvbnN0IHsgcmV0dXJuIG1fdGFnTmFtZS5wcmVm
aXgoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRQcmVmaXgoY29uc3QgQXRvbWljU3RyaW5nICZf
cHJlZml4LCBpbnQgJmV4Y2VwdGlvbmNvZGUpOworICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3Ry
aW5nJiBuYW1lc3BhY2VVUkkoKSBjb25zdCB7IHJldHVybiBtX3RhZ05hbWUubmFtZXNwYWNlVVJJ
KCk7IH0KKyAgICAKICAgICAvLyBET00gbWV0aG9kcyBvdmVycmlkZGVuIGZyb20gIHBhcmVudCBj
bGFzc2VzCi0gICAgdmlydHVhbCBET01TdHJpbmcgdGFnTmFtZSgpIGNvbnN0OwogICAgIHZpcnR1
YWwgdW5zaWduZWQgc2hvcnQgbm9kZVR5cGUoKSBjb25zdDsKICAgICB2aXJ0dWFsIE5vZGVJbXBs
ICpjbG9uZU5vZGUgKCBib29sIGRlZXAgKSA9IDA7CiAgICAgdmlydHVhbCBET01TdHJpbmcgbm9k
ZU5hbWUoKSBjb25zdDsKQEAgLTI1NCwyOSArMjY0LDcgQEAgcHJpdmF0ZToKIAogcHJvdGVjdGVk
OiAvLyBtZW1iZXIgdmFyaWFibGVzCiAgICAgbXV0YWJsZSBOYW1lZEF0dHJNYXBJbXBsICpuYW1l
ZEF0dHJNYXA7Ci0gICAgRE9NU3RyaW5nSW1wbCAqbV9wcmVmaXg7Ci19OwotCi0KLWNsYXNzIFhN
TEVsZW1lbnRJbXBsIDogcHVibGljIEVsZW1lbnRJbXBsCi17Ci0KLXB1YmxpYzoKLSAgICBYTUxF
bGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCBET01TdHJpbmdJbXBsICpfdGFnTmFtZSk7Ci0g
ICAgWE1MRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgRE9NU3RyaW5nSW1wbCAqX3F1YWxp
ZmllZE5hbWUsIERPTVN0cmluZ0ltcGwgKl9uYW1lc3BhY2VVUkkpOwotICAgIH5YTUxFbGVtZW50
SW1wbCgpOwotCi0gICAgLy8gRE9NIG1ldGhvZHMgb3ZlcnJpZGRlbiBmcm9tICBwYXJlbnQgY2xh
c3NlcwotICAgIHZpcnR1YWwgRE9NU3RyaW5nIG5hbWVzcGFjZVVSSSgpIGNvbnN0OwotICAgIHZp
cnR1YWwgRE9NU3RyaW5nIGxvY2FsTmFtZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgTm9kZUltcGwg
KmNsb25lTm9kZSAoIGJvb2wgZGVlcCApOwotCi0gICAgLy8gT3RoZXIgbWV0aG9kcyAobm90IHBh
cnQgb2YgRE9NKQotICAgIHZpcnR1YWwgYm9vbCBpc1hNTEVsZW1lbnROb2RlKCkgY29uc3QgeyBy
ZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9
Ci0KLXByb3RlY3RlZDoKLSAgICBJZCBtX2lkOworICAgIFF1YWxpZmllZE5hbWUgbV90YWdOYW1l
OwogfTsKIAogLy8gdGhlIG1hcCBvZiBhdHRyaWJ1dGVzIG9mIGFuIGVsZW1lbnQKQEAgLTQxNCw3
ICs0MDIsNyBAQCBwcml2YXRlOgogY2xhc3MgU3R5bGVkRWxlbWVudEltcGwgOiBwdWJsaWMgRWxl
bWVudEltcGwKIHsKIHB1YmxpYzoKLSAgICBTdHlsZWRFbGVtZW50SW1wbChEb2N1bWVudFB0ciAq
ZG9jKTsKKyAgICBTdHlsZWRFbGVtZW50SW1wbChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1l
LCBEb2N1bWVudFB0ciAqZG9jKTsKICAgICB2aXJ0dWFsIH5TdHlsZWRFbGVtZW50SW1wbCgpOwog
CiAgICAgdmlydHVhbCBib29sIGlzU3R5bGVkRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7
IH0KSW5kZXg6IGtodG1sL3htbC9kb21fbm9kZWltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3htbC9kb21fbm9kZWltcGwuY3BwLHYKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjE1NQpkaWZmIC11IC1wIC1yMS4xNTUga2h0bWwveG1sL2RvbV9ub2RlaW1w
bC5jcHAKLS0tIGtodG1sL3htbC9kb21fbm9kZWltcGwuY3BwCTIxIEp1biAyMDA1IDE4OjExOjEw
IC0wMDAwCTEuMTU1CisrKyBraHRtbC94bWwvZG9tX25vZGVpbXBsLmNwcAkyMiBKdW4gMjAwNSAy
MzoyMzo1MiAtMDAwMApAQCAtMTU0LDcgKzE1NCw3IEBAIE5vZGVJbXBsICpOb2RlSW1wbDo6bGFz
dENoaWxkKCkgY29uc3QKICAgcmV0dXJuIDA7CiB9CiAKLU5vZGVJbXBsICpOb2RlSW1wbDo6bGFz
dERlc2NlbmRlbnQoKSBjb25zdAorTm9kZUltcGwgKk5vZGVJbXBsOjpsYXN0RGVzY2VuZGFudCgp
IGNvbnN0CiB7CiAgICAgTm9kZUltcGwgKm4gPSBjb25zdF9jYXN0PE5vZGVJbXBsICo+KHRoaXMp
OwogICAgIHdoaWxlIChuICYmIG4tPmxhc3RDaGlsZCgpKQpAQCAtMjM5LDEzICsyMzksMTMgQEAg
dm9pZCBOb2RlSW1wbDo6bm9ybWFsaXplICgpCiAgICAgfQogfQogCi1ET01TdHJpbmcgTm9kZUlt
cGw6OnByZWZpeCgpIGNvbnN0Citjb25zdCBBdG9taWNTdHJpbmcmIE5vZGVJbXBsOjpwcmVmaXgo
KSBjb25zdAogewogICAgIC8vIEZvciBub2RlcyBvdGhlciB0aGFuIGVsZW1lbnRzIGFuZCBhdHRy
aWJ1dGVzLCB0aGUgcHJlZml4IGlzIGFsd2F5cyBudWxsCi0gICAgcmV0dXJuIERPTVN0cmluZygp
OworICAgIHJldHVybiBudWxsQXRvbTsKIH0KIAotdm9pZCBOb2RlSW1wbDo6c2V0UHJlZml4KGNv
bnN0IERPTVN0cmluZyAmLypfcHJlZml4Ki8sIGludCAmZXhjZXB0aW9uY29kZSApCit2b2lkIE5v
ZGVJbXBsOjpzZXRQcmVmaXgoY29uc3QgQXRvbWljU3RyaW5nICYvKl9wcmVmaXgqLywgaW50ICZl
eGNlcHRpb25jb2RlICkKIHsKICAgICAvLyBUaGUgc3BlYyBzYXlzIHRoYXQgZm9yIG5vZGVzIG90
aGVyIHRoYW4gZWxlbWVudHMgYW5kIGF0dHJpYnV0ZXMsIHByZWZpeCBpcyBhbHdheXMgbnVsbC4K
ICAgICAvLyBJdCBkb2VzIG5vdCBzYXkgd2hhdCB0byBkbyB3aGVuIHRoZSB1c2VyIHRyaWVzIHRv
IHNldCB0aGUgcHJlZml4IG9uIGFub3RoZXIgdHlwZSBvZgpAQCAtMTAwNiwzOSArMTAwNiwyNyBA
QCBOb2RlSW1wbCAqTm9kZUltcGw6OnRyYXZlcnNlUHJldmlvdXNOb2RlCiAgICAgcmV0dXJuIDA7
CiB9CiAKLXZvaWQgTm9kZUltcGw6OmNoZWNrU2V0UHJlZml4KGNvbnN0IERPTVN0cmluZyAmX3By
ZWZpeCwgaW50ICZleGNlcHRpb25jb2RlKQordm9pZCBOb2RlSW1wbDo6Y2hlY2tTZXRQcmVmaXgo
Y29uc3QgQXRvbWljU3RyaW5nICZfcHJlZml4LCBpbnQgJmV4Y2VwdGlvbmNvZGUpCiB7CiAgICAg
Ly8gUGVyZm9ybSBlcnJvciBjaGVja2luZyBhcyByZXF1aXJlZCBieSBzcGVjIGZvciBzZXR0aW5n
IE5vZGUucHJlZml4LiBVc2VkIGJ5CiAgICAgLy8gRWxlbWVudEltcGw6OnNldFByZWZpeCgpIGFu
ZCBBdHRySW1wbDo6c2V0UHJlZml4KCkKIAotI2lmIDAKLSAgICAvLyBGSVhNRTogQWRkIHRoaXMg
Y2hlY2sgKGJ1dCBub3QgaW4gYSB3YXkgdGhhdCBkZXBlbmRzIG9uIHRoZSBDKysgRE9NISkKLSAg
ICAvLyBJTlZBTElEX0NIQVJBQ1RFUl9FUlI6IFJhaXNlZCBpZiB0aGUgc3BlY2lmaWVkIHByZWZp
eCBjb250YWlucyBhbiBpbGxlZ2FsIGNoYXJhY3Rlci4KLSAgICBpZiAoIUVsZW1lbnQ6OmtodG1s
VmFsaWRQcmVmaXgoX3ByZWZpeCkpIHsKLSAgICAgICAgZXhjZXB0aW9uY29kZSA9IERPTUV4Y2Vw
dGlvbjo6SU5WQUxJRF9DSEFSQUNURVJfRVJSOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2Vu
ZGlmCi0KKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHN1cHBvcnQgZm9yIElOVkFMSURfQ0hBUkFD
VEVSX0VSUjogUmFpc2VkIGlmIHRoZSBzcGVjaWZpZWQgcHJlZml4IGNvbnRhaW5zIGFuIGlsbGVn
YWwgY2hhcmFjdGVyLgorICAgIAogICAgIC8vIE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUjog
UmFpc2VkIGlmIHRoaXMgbm9kZSBpcyByZWFkb25seS4KICAgICBpZiAoaXNSZWFkT25seSgpKSB7
CiAgICAgICAgIGV4Y2VwdGlvbmNvZGUgPSBET01FeGNlcHRpb246Ok5PX01PRElGSUNBVElPTl9B
TExPV0VEX0VSUjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIC8vIE5BTUVTUEFDRV9F
UlI6IC0gUmFpc2VkIGlmIHRoZSBzcGVjaWZpZWQgcHJlZml4IGlzIG1hbGZvcm1lZAorICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQgTkFNRVNQQUNFX0VSUjogLSBSYWlzZWQgaWYgdGhlIHNwZWNpZmll
ZCBwcmVmaXggaXMgbWFsZm9ybWVkCiAgICAgLy8gLSBpZiB0aGUgbmFtZXNwYWNlVVJJIG9mIHRo
aXMgbm9kZSBpcyBudWxsLAogICAgIC8vIC0gaWYgdGhlIHNwZWNpZmllZCBwcmVmaXggaXMgInht
bCIgYW5kIHRoZSBuYW1lc3BhY2VVUkkgb2YgdGhpcyBub2RlIGlzIGRpZmZlcmVudCBmcm9tCiAg
ICAgLy8gICAiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIiwKICAgICAvLyAt
IGlmIHRoaXMgbm9kZSBpcyBhbiBhdHRyaWJ1dGUgYW5kIHRoZSBzcGVjaWZpZWQgcHJlZml4IGlz
ICJ4bWxucyIgYW5kCiAgICAgLy8gICB0aGUgbmFtZXNwYWNlVVJJIG9mIHRoaXMgbm9kZSBpcyBk
aWZmZXJlbnQgZnJvbSAiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8iLAogICAgIC8vIC0g
b3IgaWYgdGhpcyBub2RlIGlzIGFuIGF0dHJpYnV0ZSBhbmQgdGhlIHF1YWxpZmllZE5hbWUgb2Yg
dGhpcyBub2RlIGlzICJ4bWxucyIgW05hbWVzcGFjZXNdLgotICAgIGlmICgKLSNpZiAwCi0gICAg
ICAgIC8vIEZJWE1FOiBBZGQgdGhpcyBjaGVjayAoYnV0IG5vdCBpbiBhIHdheSB0aGF0IGRlcGVu
ZHMgb24gdGhlIEMrKyBET00hKQotICAgICAgICBFbGVtZW50OjpraHRtbE1hbGZvcm1lZFByZWZp
eChfcHJlZml4KSB8fAotI2VuZGlmCi0gICAgICAgIChuYW1lc3BhY2VQYXJ0KGlkKCkpID09IG5v
TmFtZXNwYWNlICYmIGlkKCkgPiBJRF9MQVNUX1RBRykgfHwKKyAgICBpZiAoKG5hbWVzcGFjZVBh
cnQoaWQoKSkgPT0gbm9OYW1lc3BhY2UgJiYgaWQoKSA+IElEX0xBU1RfVEFHKSB8fAogICAgICAg
ICAoX3ByZWZpeCA9PSAieG1sIiAmJiBET01TdHJpbmcoZ2V0RG9jdW1lbnQoKS0+bmFtZXNwYWNl
VVJJKGlkKCkpKSAhPSAiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIikpIHsK
ICAgICAgICAgZXhjZXB0aW9uY29kZSA9IERPTUV4Y2VwdGlvbjo6TkFNRVNQQUNFX0VSUjsKICAg
ICAgICAgcmV0dXJuOwpJbmRleDoga2h0bWwveG1sL2RvbV9ub2RlaW1wbC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3htbC9kb21fbm9kZWltcGwuaCx2CnJl
dHJpZXZpbmcgcmV2aXNpb24gMS44NgpkaWZmIC11IC1wIC1yMS44NiBraHRtbC94bWwvZG9tX25v
ZGVpbXBsLmgKLS0tIGtodG1sL3htbC9kb21fbm9kZWltcGwuaAkxNyBKdW4gMjAwNSAwMjoxMzox
MiAtMDAwMAkxLjg2CisrKyBraHRtbC94bWwvZG9tX25vZGVpbXBsLmgJMjIgSnVuIDIwMDUgMjM6
MjM6NTMgLTAwMDAKQEAgLTU5LDYgKzU5LDcgQEAgY2xhc3MgRXZlbnRJbXBsOwogY2xhc3MgRXZl
bnRMaXN0ZW5lcjsKIGNsYXNzIE5vZGVMaXN0SW1wbDsKIGNsYXNzIE5hbWVkQXR0ck1hcEltcGw7
CitjbGFzcyBRdWFsaWZpZWROYW1lOwogY2xhc3MgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXI7CiAK
IC8vIFRoZSBuYW1lc3BhY2UgdXNlZCBmb3IgWEhUTUwgZWxlbWVudHMKQEAgLTEwMiw2ICsxMDMs
NyBAQCBwdWJsaWM6CiAgICAgTUFJTl9USFJFQURfQUxMT0NBVEVEOwogCiAgICAgLy8gRE9NIG1l
dGhvZHMgJiBhdHRyaWJ1dGVzIGZvciBOb2RlCisgICAgdmlydHVhbCBib29sIGhhc1RhZ05hbWUo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAg
ICB2aXJ0dWFsIERPTVN0cmluZyBub2RlTmFtZSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIERP
TVN0cmluZyBub2RlVmFsdWUoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0Tm9kZVZhbHVl
KCBjb25zdCBET01TdHJpbmcgJl9ub2RlVmFsdWUsIGludCAmZXhjZXB0aW9uY29kZSApOwpAQCAt
MTIyLDE0ICsxMjQsMTQgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCByZW1vdmUoaW50ICZl
eGNlcHRpb25jb2RlKTsKICAgICB2aXJ0dWFsIGJvb2wgaGFzQ2hpbGROb2RlcyAoICApIGNvbnN0
OwogICAgIHZpcnR1YWwgTm9kZUltcGwgKmNsb25lTm9kZSAoIGJvb2wgZGVlcCApID0gMDsKLSAg
ICB2aXJ0dWFsIERPTVN0cmluZyBsb2NhbE5hbWUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIERPTVN0
cmluZyBuYW1lc3BhY2VVUkkoKSBjb25zdDsKLSAgICB2aXJ0dWFsIERPTVN0cmluZyBwcmVmaXgo
KSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0UHJlZml4KGNvbnN0IERPTVN0cmluZyAmX3By
ZWZpeCwgaW50ICZleGNlcHRpb25jb2RlICk7CisgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJp
bmcmIGxvY2FsTmFtZSgpIGNvbnN0OworICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBu
YW1lc3BhY2VVUkkoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgcHJl
Zml4KCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNldFByZWZpeChjb25zdCBBdG9taWNTdHJp
bmcgJl9wcmVmaXgsIGludCAmZXhjZXB0aW9uY29kZSk7CiAgICAgdm9pZCBub3JtYWxpemUgKCk7
CiAgICAgc3RhdGljIGJvb2wgaXNTdXBwb3J0ZWQoY29uc3QgRE9NU3RyaW5nICZmZWF0dXJlLCBj
b25zdCBET01TdHJpbmcgJnZlcnNpb24pOwogCi0gICAgTm9kZUltcGwgKmxhc3REZXNjZW5kZW50
KCkgY29uc3Q7CisgICAgTm9kZUltcGwgKmxhc3REZXNjZW5kYW50KCkgY29uc3Q7CiAKICAgICAv
LyBPdGhlciBtZXRob2RzIChub3QgcGFydCBvZiBET00pCiAgICAgdmlydHVhbCBib29sIGlzRWxl
bWVudE5vZGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQpAQCAtMTM3LDYgKzEzOSw3IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNTdHlsZWRFbGVtZW50KCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNBdHRyaWJ1dGVOb2RlKCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNUZXh0Tm9kZSgpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzQ29tbWVudE5vZGUoKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0RvY3VtZW50Tm9kZSgpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzWE1MRWxlbWVudE5vZGUoKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQogICAgIGJvb2wgaXNCbG9ja0Zsb3coKSBjb25zdDsKQEAgLTE5OCwy
NSArMjAxLDggQEAgcHVibGljOgogICAgIC8vIHVudGlsIHRoZXkga25vdyBhbGwgb2YgdGhlaXIg
bmVzdGVkIDxwYXJhbT5zLiBbMzYwMzE5MSwgNDA0MDg0OF0KICAgICB2aXJ0dWFsIHZvaWQgY2xv
c2VSZW5kZXJlcigpIHsgfQogCi0gICAgdHlwZWRlZiBRX1VJTlQzMiBJZDsKLSAgICAvLyBpZCgp
IGlzIHVzZWQgdG8gZWFzaWx5IGFuZCBleGFjdGx5IGlkZW50aWZ5IGEgbm9kZS4gSXQKLSAgICAv
LyBpcyBvcHRpbWl6ZWQgZm9yIHF1aWNrIGNvbXBhcmlzb24gYW5kIGxvdyBtZW1vcnkgY29uc3Vt
cHRpb24uCi0gICAgLy8gaXRzIHZhbHVlIGRlcGVuZHMgb24gdGhlIG93bmVyIGRvY3VtZW50IG9m
IHRoZSBub2RlIGFuZCBpcwotICAgIC8vIGNhdGVnb3JpemVkIGluIHRoZSBmb2xsb3dpbmcgd2F5
OgotICAgIC8vIDEuLklEX0xBU1RfVEFHOiB0aGUgbm9kZSBpbmhlcml0cyBIVE1MRWxlbWVudElt
cGwgYW5kIGlzCi0gICAgLy8gICAgICAgICAgICAgICAgIHBhcnQgb2YgdGhlIEhUTUwgbmFtZXNw
YWNlLgotICAgIC8vICAgICAgICAgICAgICAgICBUaGUgSFRNTCBuYW1lc3BhY2UgaXMgZWl0aGVy
IHRoZSBnbG9iYWwKLSAgICAvLyAgICAgICAgICAgICAgICAgb25lIChubyBuYW1lc3BhY2UpIG9y
IHRoZSBYSFRNTCBuYW1lc3BhY2UKLSAgICAvLyAgICAgICAgICAgICAgICAgZGVwZW5kaW5nIG9u
IHRoZSBvd25lciBkb2N1bWVudCdzIGRvY3R5cGUKLSAgICAvLyBJRF9MQVNUX1RBRysxLi4weGZm
ZmY6IG5vbi1IVE1MIGVsZW1lbnRzIGluIHRoZSBnbG9iYWwgbmFtZXNwYWNlCi0gICAgLy8gb3Ro
ZXJzICAgICAgIG5vbi1IVE1MIGVsZW1lbnRzIGluIGEgbmFtZXNwYWNlLgotICAgIC8vICAgICAg
ICAgICAgICAgICB0aGUgdXBwZXIgMTYgYml0IGlkZW50aWZ5IHRoZSBuYW1lc3BhY2UKLSAgICAv
LyAgICAgICAgICAgICAgICAgdGhlIGxvd2VyIDE2IGJpdCBpZGVudGlmeSB0aGUgbG9jYWwgcGFy
dCBvZiB0aGUKLSAgICAvLyAgICAgICAgICAgICAgICAgcXVhbGlmaWVkIGVsZW1lbnQgbmFtZS4K
LSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3QgeyByZXR1cm4gMDsgfTsKLSNpZiBBUFBMRV9DSEFO
R0VTCi0gICAgSWQgaWRlbnRpZmllcigpIGNvbnN0OwotI2VuZGlmCisgICAgdHlwZWRlZiBRX1VJ
TlQzMiBJZDsgLy8gRklYTUU6IFlhbmsgdGhpcyBvbmNlIGF0dHJpYnV0ZXMgYXJlIGFsc28gc3dp
dGNoZWQgb3Zlci4KKwogICAgIGVudW0gTW91c2VFdmVudFR5cGUgewogICAgICAgICBNb3VzZVBy
ZXNzLAogICAgICAgICBNb3VzZVJlbGVhc2UsCkBAIC0yNzgsOCArMjY0LDYgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgYm9vbCBpc0tleWJvYXJkRm9jdXNhYmxlKCkgY29uc3Q7CiAgICAgdmlydHVh
bCBib29sIGlzTW91c2VGb2N1c2FibGUoKSBjb25zdDsKICAgICAKLSAgICB2aXJ0dWFsIGJvb2wg
aXNJbmxpbmUoKSBjb25zdDsKLSAgICAKICAgICB2aXJ0dWFsIGJvb2wgaXNDb250ZW50RWRpdGFi
bGUoKSBjb25zdDsKICAgICB2aXJ0dWFsIFFSZWN0IGdldFJlY3QoKSBjb25zdDsKIApAQCAtMzY5
LDcgKzM1Myw3IEBAIHB1YmxpYzoKICAgICBraHRtbDo6UmVuZGVyT2JqZWN0ICpwcmV2aW91c1Jl
bmRlcmVyKCk7CiAgICAgdm9pZCBzZXRSZW5kZXJlcihraHRtbDo6UmVuZGVyT2JqZWN0KiByZW5k
ZXJlcikgeyBtX3JlbmRlciA9IHJlbmRlcmVyOyB9CiAgICAgCi0gICAgdm9pZCBjaGVja1NldFBy
ZWZpeChjb25zdCBET01TdHJpbmcgJl9wcmVmaXgsIGludCAmZXhjZXB0aW9uY29kZSk7CisgICAg
dm9pZCBjaGVja1NldFByZWZpeChjb25zdCBBdG9taWNTdHJpbmcgJl9wcmVmaXgsIGludCAmZXhj
ZXB0aW9uY29kZSk7CiAgICAgdm9pZCBjaGVja0FkZENoaWxkKE5vZGVJbXBsICpuZXdDaGlsZCwg
aW50ICZleGNlcHRpb25jb2RlKTsKICAgICBib29sIGlzQW5jZXN0b3IoY29uc3QgTm9kZUltcGwg
KikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGNoaWxkQWxsb3dlZCggTm9kZUltcGwgKm5ld0No
aWxkICk7CkluZGV4OiBraHRtbC94bWwvZG9tX3FuYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC94bWwvZG9tX3FuYW1lLmNwcCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS4yCmRpZmYgLXUgLXAgLXIxLjIga2h0bWwveG1sL2RvbV9xbmFtZS5jcHAKLS0t
IGtodG1sL3htbC9kb21fcW5hbWUuY3BwCTE2IEp1biAyMDA1IDIxOjA2OjQ2IC0wMDAwCTEuMgor
Kysga2h0bWwveG1sL2RvbV9xbmFtZS5jcHAJMjIgSnVuIDIwMDUgMjM6MjM6NTMgLTAwMDAKQEAg
LTg4LDcgKzg4LDcgQEAgY29uc3QgUXVhbGlmaWVkTmFtZSYgUXVhbGlmaWVkTmFtZTo6b3Blcgog
CiB2b2lkIFF1YWxpZmllZE5hbWU6OmRlcmVmKCkKIHsKLSAgICBpZiAobV9pbXBsLT5yZWZDb3Vu
dCgpID09IDEpIHsKKyAgICBpZiAobV9pbXBsLT5oYXNPbmVSZWYoKSkgewogICAgICAgICAvLyBC
ZWZvcmUgZGVjcmVtZW50aW5nIHRoZSByZWYgdG8gMCwgcmVtb3ZlIG91cnNlbHZlcyBmcm9tIHRo
ZSBoYXNoIHRhYmxlLgogICAgICAgICBRUHRyRGljdDxRUHRyRGljdDxRdWFsaWZpZWROYW1lSW1w
bD4gPiogbmFtZXNwYWNlRGljdCA9IDA7CiAgICAgICAgIFFQdHJEaWN0PFF1YWxpZmllZE5hbWVJ
bXBsPiogcHJlZml4RGljdCA9IDA7CkluZGV4OiBraHRtbC94bWwvZG9tX3RleHRpbXBsLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwveG1sL2RvbV90ZXh0aW1w
bC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE2CmRpZmYgLXUgLXAgLXIxLjE2IGtodG1sL3ht
bC9kb21fdGV4dGltcGwuaAotLS0ga2h0bWwveG1sL2RvbV90ZXh0aW1wbC5oCTEwIE1heSAyMDA1
IDIxOjU5OjE1IC0wMDAwCTEuMTYKKysrIGtodG1sL3htbC9kb21fdGV4dGltcGwuaAkyMiBKdW4g
MjAwNSAyMzoyMzo1MyAtMDAwMApAQCAtMTAwLDggKzEwMCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIE5vZGVJbXBsICpjbG9uZU5vZGUoYm9vbCBkZWVwKTsKIAogICAgIC8vIE90aGVyIG1ldGhv
ZHMgKG5vdCBwYXJ0IG9mIERPTSkKLQotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKKyAgICB2
aXJ0dWFsIGJvb2wgaXNDb21tZW50Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICB2
aXJ0dWFsIGJvb2wgY2hpbGRUeXBlQWxsb3dlZCggdW5zaWduZWQgc2hvcnQgdHlwZSApOwogCiAg
ICAgdmlydHVhbCBET01TdHJpbmcgdG9TdHJpbmcoKSBjb25zdDsKQEAgLTEyOCw3ICsxMjcsNiBA
QCBwdWJsaWM6CiAgICAgLy8gT3RoZXIgbWV0aG9kcyAobm90IHBhcnQgb2YgRE9NKQogCiAgICAg
dmlydHVhbCBib29sIGlzVGV4dE5vZGUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmly
dHVhbCBJZCBpZCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBhdHRhY2goKTsKICAgICB2aXJ0
dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRlZChraHRtbDo6UmVuZGVyU3R5bGUgKik7CiAgICAgdmly
dHVhbCBraHRtbDo6UmVuZGVyT2JqZWN0ICpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSAqLCBr
aHRtbDo6UmVuZGVyU3R5bGUgKik7CkluZGV4OiBraHRtbC94bWwveG1sX25hbWVzcGFjZV90YWJs
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZToga2h0bWwveG1sL3htbF9uYW1lc3BhY2VfdGFibGUu
Y3BwCmRpZmYgLU4ga2h0bWwveG1sL3htbF9uYW1lc3BhY2VfdGFibGUuY3BwCi0tLSBraHRtbC94
bWwveG1sX25hbWVzcGFjZV90YWJsZS5jcHAJMjYgSmFuIDIwMDQgMjI6MzM6MTkgLTAwMDAJMS4x
CisrKyAvZGV2L251bGwJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMApAQCAtMSw3OSArMCwwIEBA
Ci0vKioKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9y
IEtERS4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQgQXBwbGUgQ29tcHV0ZXIsIEluYy4KLSAq
Ci0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0g
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBT
dWl0ZSAzMzAsCi0gKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KLSAqLwotCi0jaW5jbHVk
ZSAieG1sX25hbWVzcGFjZV90YWJsZS5oIgotI2luY2x1ZGUgImRvbV9ub2RlaW1wbC5oIgotCi1u
YW1lc3BhY2UgRE9NCi17Ci0KLVFEaWN0PFhtbE5hbWVzcGFjZUVudHJ5PiogWG1sTmFtZXNwYWNl
VGFibGU6OmdOYW1lc3BhY2VUYWJsZSA9IDA7Ci0KLWludCBYbWxOYW1lc3BhY2VUYWJsZTo6Z2V0
TmFtZXNwYWNlSUQoY29uc3QgRE9NU3RyaW5nJiB1cmksIGJvb2wgcmVhZG9ubHkpCi17Ci0gICAg
aWYgKHVyaSA9PSBYSFRNTF9OQU1FU1BBQ0UpCi0gICAgICAgIHJldHVybiB4aHRtbE5hbWVzcGFj
ZTsKLSAgICAKLSAgICBpZiAodXJpLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG5vTmFtZXNw
YWNlOwotICAgIAotICAgIFFTdHJpbmcgdXJpU3RyID0gdXJpLnN0cmluZygpOwotCi0gICAgaWYg
KCFnTmFtZXNwYWNlVGFibGUpIHsKLSAgICAgICAgZ05hbWVzcGFjZVRhYmxlID0gbmV3IFFEaWN0
PFhtbE5hbWVzcGFjZUVudHJ5PjsKLSAgICAgICAgZ05hbWVzcGFjZVRhYmxlLT5pbnNlcnQoWEhU
TUxfTkFNRVNQQUNFLCBuZXcgWG1sTmFtZXNwYWNlRW50cnkoeGh0bWxOYW1lc3BhY2UsIFhIVE1M
X05BTUVTUEFDRSkpOwotICAgIH0KLSAgICAKLSAgICBYbWxOYW1lc3BhY2VFbnRyeSogbnMgPSBn
TmFtZXNwYWNlVGFibGUtPmZpbmQodXJpU3RyKTsKLSAgICBpZiAobnMpIHJldHVybiBucy0+bV9p
ZDsKLSAgICAKLSAgICBpZiAoIXJlYWRvbmx5KSB7Ci0gICAgICAgIHN0YXRpYyBpbnQgaWQgPSB4
aHRtbE5hbWVzcGFjZSsxOwotICAgICAgICBucyA9IG5ldyBYbWxOYW1lc3BhY2VFbnRyeShpZCsr
LCB1cmkpOwotICAgICAgICBnTmFtZXNwYWNlVGFibGUtPmluc2VydCh1cmlTdHIsIG5zKTsKLSAg
ICAgICAgcmV0dXJuIG5zLT5tX2lkOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gLTE7Ci19Ci0K
LURPTVN0cmluZyBYbWxOYW1lc3BhY2VUYWJsZTo6Z2V0TmFtZXNwYWNlVVJJKGludCBpZCkKLXsK
LSAgICBpZiAoaWQgPT0gbm9OYW1lc3BhY2UgfHwgaWQgPT0gYW55TmFtZXNwYWNlIHx8ICFnTmFt
ZXNwYWNlVGFibGUpCi0gICAgICAgIHJldHVybiAiIjsKLQotICAgIGlmICghZ05hbWVzcGFjZVRh
YmxlKSB7Ci0gICAgICAgIGdOYW1lc3BhY2VUYWJsZSA9IG5ldyBRRGljdDxYbWxOYW1lc3BhY2VF
bnRyeT47Ci0gICAgICAgIGdOYW1lc3BhY2VUYWJsZS0+aW5zZXJ0KFhIVE1MX05BTUVTUEFDRSwg
bmV3IFhtbE5hbWVzcGFjZUVudHJ5KHhodG1sTmFtZXNwYWNlLCBYSFRNTF9OQU1FU1BBQ0UpKTsK
LSAgICB9Ci0gICAgCi0gICAgLy8gSGF2ZSB0byBpdGVyYXRlIG92ZXIgdGhlIGRpY3Rpb25hcnkg
ZW50cmllcyBsb29raW5nIGZvciBhIG1hdGNoLgotICAgIC8vIChUaGlzIHNob3VsZCBiZSBvaywg
c2luY2UgdGhpcyBpcyBub3QgdGhlIGNvbW1vbiBkaXJlY3Rpb24uKQotICAgIFFEaWN0SXRlcmF0
b3I8WG1sTmFtZXNwYWNlRW50cnk+IGl0KCpnTmFtZXNwYWNlVGFibGUpOwotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBpdC5jb3VudCgpOyBpKyssICsraXQpIHsKLSAgICAgICAgaWYgKGl0
LmN1cnJlbnQoKS0+bV9pZCA9PSBpZCkKLSAgICAgICAgICAgIHJldHVybiBpdC5jdXJyZW50KCkt
Pm1fdXJpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gIiI7Ci19Ci0KLX0KSW5kZXg6IGtodG1s
L3htbC94bWxfbmFtZXNwYWNlX3RhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZToga2h0bWwveG1s
L3htbF9uYW1lc3BhY2VfdGFibGUuaApkaWZmIC1OIGtodG1sL3htbC94bWxfbmFtZXNwYWNlX3Rh
YmxlLmgKLS0tIGtodG1sL3htbC94bWxfbmFtZXNwYWNlX3RhYmxlLmgJMjYgSmFuIDIwMDQgMjI6
MzM6MTkgLTAwMDAJMS4xCisrKyAvZGV2L251bGwJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMApA
QCAtMSw0NiArMCwwIEBACi0vKioKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1w
bGVtZW50YXRpb24gZm9yIEtERS4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQgQXBwbGUgQ29t
cHV0ZXIsIEluYy4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBU
ZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCi0gKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4K
LSAqLwotCi0jaW5jbHVkZSA8cWRpY3QuaD4KLSNpbmNsdWRlICJkb20vZG9tX3N0cmluZy5oIgot
Ci1uYW1lc3BhY2UgRE9NCi17ICAgIAotc3RydWN0IFhtbE5hbWVzcGFjZUVudHJ5OwotCi1jbGFz
cyBYbWxOYW1lc3BhY2VUYWJsZQotewotcHVibGljOgotICAgIHN0YXRpYyBpbnQgZ2V0TmFtZXNw
YWNlSUQoY29uc3QgRE9NU3RyaW5nJiB1cmksIGJvb2wgcmVhZG9ubHkgPSB0cnVlKTsKLSAgICBz
dGF0aWMgRE9NU3RyaW5nIGdldE5hbWVzcGFjZVVSSShpbnQgaWQpOwotICAgIAotICAgIHN0YXRp
YyBRRGljdDxYbWxOYW1lc3BhY2VFbnRyeT4qIGdOYW1lc3BhY2VUYWJsZTsKLX07Ci0KLXN0cnVj
dCBYbWxOYW1lc3BhY2VFbnRyeQotewotICAgIFhtbE5hbWVzcGFjZUVudHJ5KGludCBpZCwgY29u
c3QgRE9NU3RyaW5nJiB1cmkpIDptX2lkKGlkKSwgbV91cmkodXJpKSB7fQotICAgIAotICAgIGlu
dCBtX2lkOwotICAgIERPTVN0cmluZyBtX3VyaTsKLX07Ci0KLX0KSW5kZXg6IGt3cS9ET00ubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva3dxL0RPTS5tbSx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS4zNgpkaWZmIC11IC1wIC1yMS4zNiBrd3EvRE9NLm1tCi0tLSBrd3Ev
RE9NLm1tCTE5IE1heSAyMDA1IDE4OjMyOjI3IC0wMDAwCTEuMzYKKysrIGt3cS9ET00ubW0JMjIg
SnVuIDIwMDUgMjM6MjM6NTQgLTAwMDAKQEAgLTMzOCw3ICszMzgsOCBAQCB1c2luZyBraHRtbDo6
U2hhcmVkUHRyOwogICAgIEFTU0VSVChwcmVmaXgpOwogCiAgICAgaW50IGV4Y2VwdGlvbkNvZGUg
PSAwOwotICAgIFtzZWxmIF9ub2RlSW1wbF0tPnNldFByZWZpeChwcmVmaXgsIGV4Y2VwdGlvbkNv
ZGUpOworICAgIERPTVN0cmluZyBwcmVmaXhTdHIocHJlZml4KTsKKyAgICBbc2VsZiBfbm9kZUlt
cGxdLT5zZXRQcmVmaXgocHJlZml4U3RyLmltcGxlbWVudGF0aW9uKCksIGV4Y2VwdGlvbkNvZGUp
OwogICAgIHJhaXNlT25ET01FcnJvcihleGNlcHRpb25Db2RlKTsKIH0KIApJbmRleDoga3dxL0tX
UURPTU5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IGt3cS9LV1FET01Ob2RlLmNwcApkaWZm
IC1OIGt3cS9LV1FET01Ob2RlLmNwcAotLS0ga3dxL0tXUURPTU5vZGUuY3BwCTExIEp1bCAyMDAz
IDE2OjI0OjM3IC0wMDAwCTEuOQorKysgL2Rldi9udWxsCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAw
MDAKQEAgLTEsMzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMyBBcHBsZSBDb21w
dXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiS1dRRE9N
Tm9kZS5oIgotCi11c2luZyBET006Ok5vZGVJbXBsOwotCi0vLyBUaGlzIG5lZWRzIHRvIGJlIGlu
IGEgQysrIHNvdXJjZSBmaWxlIGJlY2F1c2UgaWQgaXMgYSByZXNlcnZlZCB3b3JkIGluIE9iamVj
dGl2ZS1DKysuCi1Ob2RlSW1wbDo6SWQgaWRGcm9tTm9kZShOb2RlSW1wbCAqbm9kZSkKLXsKLSAg
ICByZXR1cm4gbm9kZS0+aWQoKTsKLX0KSW5kZXg6IGt3cS9LV1FET01Ob2RlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZToga3dxL0tXUURPTU5vZGUuaApkaWZmIC1OIGt3cS9LV1FET01Ob2RlLmgKLS0t
IGt3cS9LV1FET01Ob2RlLmgJMTEgSnVsIDIwMDMgMTY6MjQ6MzcgLTAwMDAJMS41CisrKyAvZGV2
L251bGwJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMApAQCAtMSwyOCArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDAzIEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpbmNsdWRlICJkb21fbm9kZWltcGwuaCIKLQotRE9NOjpOb2RlSW1wbDo6
SWQgaWRGcm9tTm9kZShET006Ok5vZGVJbXBsICopOwpJbmRleDoga3dxL0tXUUtIVE1MUGFydC5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3EvS1dRS0hUTUxQYXJ0
Lm1tLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjY0MwpkaWZmIC11IC1wIC1yMS42NDMga3dxL0tX
UUtIVE1MUGFydC5tbQotLS0ga3dxL0tXUUtIVE1MUGFydC5tbQkyNiBNYXkgMjAwNSAyMDozMDox
MiAtMDAwMAkxLjY0MworKysga3dxL0tXUUtIVE1MUGFydC5tbQkyMiBKdW4gMjAwNSAyMzoyMzo1
OCAtMDAwMApAQCAtMjgsNyArMjgsNiBAQAogI2ltcG9ydCAiRE9NSW50ZXJuYWwuaCIKIAogI2lt
cG9ydCAiS1dRQ2xpcGJvYXJkLmgiCi0jaW1wb3J0ICJLV1FET01Ob2RlLmgiCiAjaW1wb3J0ICJL
V1FEdW1teVZpZXcuaCIKICNpbXBvcnQgIktXUUVkaXRDb21tYW5kLmgiCiAjaW1wb3J0ICJLV1FF
eGNlcHRpb25zLmgiCkBAIC0xMDAsNiArOTksNyBAQCB1c2luZyBET006OkhUTUxFbGVtZW50SW1w
bDsKIHVzaW5nIERPTTo6SFRNTEZvcm1FbGVtZW50SW1wbDsKIHVzaW5nIERPTTo6SFRNTEZyYW1l
RWxlbWVudEltcGw7CiB1c2luZyBET006OkhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsOwordXNp
bmcgRE9NOjpIVE1MTmFtZXM7CiB1c2luZyBET006OkhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbDsK
IHVzaW5nIERPTTo6Tm9kZTsKIHVzaW5nIERPTTo6Tm9kZUltcGw7CkBAIC0zNjEsMTMgKzM2MSwx
MiBAQCBzdGF0aWMgSFRNTEZvcm1FbGVtZW50SW1wbCAqc2NhbkZvckZvcm0oCiB7CiAgICAgTm9k
ZUltcGwgKm47CiAgICAgZm9yIChuID0gc3RhcnQ7IG47IG4gPSBuLT50cmF2ZXJzZU5leHROb2Rl
KCkpIHsKLSAgICAgICAgTm9kZUltcGw6OklkIG5vZGVJRCA9IGlkRnJvbU5vZGUobik7Ci0gICAg
ICAgIGlmIChub2RlSUQgPT0gSURfRk9STSkgeworICAgICAgICBpZiAobi0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OmZvcm0oKSkpIHsKICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1M
Rm9ybUVsZW1lbnRJbXBsICo+KG4pOwogICAgICAgICB9IGVsc2UgaWYgKG4tPmlzSFRNTEVsZW1l
bnQoKQogICAgICAgICAgICAgICAgICAgICYmIHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCAq
PihuKS0+aXNHZW5lcmljRm9ybUVsZW1lbnQoKSkgewogICAgICAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsICo+KG4pLT5mb3JtKCk7Ci0gICAgICAg
IH0gZWxzZSBpZiAobm9kZUlEID09IElEX0ZSQU1FIHx8IG5vZGVJRCA9PSBJRF9JRlJBTUUpIHsK
KyAgICAgICAgfSBlbHNlIGlmIChuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZnJhbWUoKSkgfHwg
bi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmlmcmFtZSgpKSkgewogICAgICAgICAgICAgTm9kZUlt
cGwgKmNoaWxkRG9jID0gc3RhdGljX2Nhc3Q8SFRNTEZyYW1lRWxlbWVudEltcGwgKj4obiktPmNv
bnRlbnREb2N1bWVudCgpOwogICAgICAgICAgICAgSFRNTEZvcm1FbGVtZW50SW1wbCAqZnJhbWVS
ZXN1bHQgPSBzY2FuRm9yRm9ybShjaGlsZERvYyk7CiAgICAgICAgICAgICBpZiAoZnJhbWVSZXN1
bHQpIHsKQEAgLTM5MCw3ICszODksNyBAQCBIVE1MRm9ybUVsZW1lbnRJbXBsICpLV1FLSFRNTFBh
cnQ6OmN1cnJlCiAgICAgLy8gdHJ5IHdhbGtpbmcgdXAgdGhlIG5vZGUgdHJlZSB0byBmaW5kIGEg
Zm9ybSBlbGVtZW50CiAgICAgTm9kZUltcGwgKm47CiAgICAgZm9yIChuID0gc3RhcnQ7IG47IG4g
PSBuLT5wYXJlbnROb2RlKCkpIHsKLSAgICAgICAgaWYgKGlkRnJvbU5vZGUobikgPT0gSURfRk9S
TSkgeworICAgICAgICBpZiAobi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZvcm0oKSkpIHsKICAg
ICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnRJbXBsICo+KG4pOwog
ICAgICAgICB9IGVsc2UgaWYgKG4tPmlzSFRNTEVsZW1lbnQoKQogICAgICAgICAgICAgICAgICAg
ICYmIHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCAqPihuKS0+aXNHZW5lcmljRm9ybUVsZW1l
bnQoKSkgewpAQCAtNDg5LDggKzQ4OCw3IEBAIE5TU3RyaW5nICpLV1FLSFRNTFBhcnQ6OnNlYXJj
aEZvckxhYmVsc0EKICAgICAgICAgaWYgKGFib3ZlQ2VsbCkgewogICAgICAgICAgICAgLy8gc2Vh
cmNoIHdpdGhpbiB0aGUgYWJvdmUgY2VsbCB3ZSBmb3VuZCBmb3IgYSBtYXRjaAogICAgICAgICAg
ICAgZm9yIChOb2RlSW1wbCAqbiA9IGFib3ZlQ2VsbC0+Zmlyc3RDaGlsZCgpOyBuOyBuID0gbi0+
dHJhdmVyc2VOZXh0Tm9kZShhYm92ZUNlbGwpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGlkRnJv
bU5vZGUobikgPT0gSURfVEVYVAotICAgICAgICAgICAgICAgICAgICAmJiBuLT5yZW5kZXJlcigp
ICYmIG4tPnJlbmRlcmVyKCktPnN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFKQorICAg
ICAgICAgICAgICAgIGlmIChuLT5pc1RleHROb2RlKCkgJiYgbi0+cmVuZGVyZXIoKSAmJiBuLT5y
ZW5kZXJlcigpLT5zdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0gVklTSUJMRSkKICAgICAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgICAgIC8vIEZvciBlYWNoIHRleHQgY2h1bmssIHJ1biB0
aGUgcmVnZXhwCiAgICAgICAgICAgICAgICAgICAgIFFTdHJpbmcgbm9kZVN0cmluZyA9IG4tPm5v
ZGVWYWx1ZSgpLnN0cmluZygpOwpAQCAtNTI1LDIzICs1MjMsMjEgQEAgTlNTdHJpbmcgKktXUUtI
VE1MUGFydDo6c2VhcmNoRm9yTGFiZWxzQgogICAgICAgICAgbiAmJiBsZW5ndGhTZWFyY2hlZCA8
IGNoYXJzU2VhcmNoZWRUaHJlc2hvbGQ7CiAgICAgICAgICBuID0gbi0+dHJhdmVyc2VQcmV2aW91
c05vZGUoKSkKICAgICB7Ci0gICAgICAgIE5vZGVJbXBsOjpJZCBub2RlSUQgPSBpZEZyb21Ob2Rl
KG4pOwotICAgICAgICBpZiAobm9kZUlEID09IElEX0ZPUk0KKyAgICAgICAgaWYgKG4tPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjpmb3JtKCkpCiAgICAgICAgICAgICB8fCAobi0+aXNIVE1MRWxlbWVu
dCgpCiAgICAgICAgICAgICAgICAgJiYgc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KG4p
LT5pc0dlbmVyaWNGb3JtRWxlbWVudCgpKSkKICAgICAgICAgewogICAgICAgICAgICAgLy8gV2Ug
aGl0IGFub3RoZXIgZm9ybSBlbGVtZW50IG9yIHRoZSBzdGFydCBvZiB0aGUgZm9ybSAtIGJhaWwg
b3V0CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfSBlbHNlIGlmIChub2RlSUQgPT0gSURf
VEQgJiYgIXN0YXJ0aW5nVGFibGVDZWxsKSB7CisgICAgICAgIH0gZWxzZSBpZiAobi0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OnRkKCkpICYmICFzdGFydGluZ1RhYmxlQ2VsbCkgewogICAgICAgICAg
ICAgc3RhcnRpbmdUYWJsZUNlbGwgPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVDZWxsRWxlbWVudElt
cGwgKj4obik7Ci0gICAgICAgIH0gZWxzZSBpZiAobm9kZUlEID09IElEX1RSICYmIHN0YXJ0aW5n
VGFibGVDZWxsKSB7CisgICAgICAgIH0gZWxzZSBpZiAobi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
OnRyKCkpICYmIHN0YXJ0aW5nVGFibGVDZWxsKSB7CiAgICAgICAgICAgICBOU1N0cmluZyAqcmVz
dWx0ID0gc2VhcmNoRm9yTGFiZWxzQWJvdmVDZWxsKHJlZ0V4cCwgc3RhcnRpbmdUYWJsZUNlbGwp
OwogICAgICAgICAgICAgaWYgKHJlc3VsdCkgewogICAgICAgICAgICAgICAgIHJldHVybiByZXN1
bHQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBzZWFyY2hlZENlbGxBYm92ZSA9IHRydWU7
Ci0gICAgICAgIH0gZWxzZSBpZiAobm9kZUlEID09IElEX1RFWFQKLSAgICAgICAgICAgICAgICAg
ICAmJiBuLT5yZW5kZXJlcigpICYmIG4tPnJlbmRlcmVyKCktPnN0eWxlKCktPnZpc2liaWxpdHko
KSA9PSBWSVNJQkxFKQorICAgICAgICB9IGVsc2UgaWYgKG4tPmlzVGV4dE5vZGUoKSAmJiBuLT5y
ZW5kZXJlcigpICYmIG4tPnJlbmRlcmVyKCktPnN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJ
QkxFKQogICAgICAgICB7CiAgICAgICAgICAgICAvLyBGb3IgZWFjaCB0ZXh0IGNodW5rLCBydW4g
dGhlIHJlZ2V4cAogICAgICAgICAgICAgUVN0cmluZyBub2RlU3RyaW5nID0gbi0+bm9kZVZhbHVl
KCkuc3RyaW5nKCk7CkBAIC0yODQ4LDE0ICsyODQ0LDEwIEBAIE5TRmlsZVdyYXBwZXIgKktXUUtI
VE1MUGFydDo6ZmlsZVdyYXBwZXIKIAogc3RhdGljIEVsZW1lbnRJbXBsICpsaXN0UGFyZW50KEVs
ZW1lbnRJbXBsICppdGVtKQogewotICAgIC8vIEljayEgIEF2b2lkIHVzZSBvZiBpdGVtLT5pZCgp
IHdoaWNoIGNvbmZ1c2VzIE9iakMrKy4KLSAgICB1bnNpZ25lZCBzaG9ydCBfaWQgPSBpdGVtLT5p
ZGVudGlmaWVyKCk7Ci0gICAgCi0gICAgd2hpbGUgKF9pZCAhPSBJRF9VTCAmJiBfaWQgIT0gSURf
T0wpIHsKKyAgICB3aGlsZSAoIWl0ZW0tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp1bCgpKSAmJiAh
aXRlbS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9sKCkpKSB7CiAgICAgICAgIGl0ZW0gPSBzdGF0
aWNfY2FzdDxFbGVtZW50SW1wbCAqPihpdGVtLT5wYXJlbnROb2RlKCkpOwogICAgICAgICBpZiAo
IWl0ZW0pCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgX2lkID0gaXRlbS0+aWRlbnRpZmll
cigpOwogICAgIH0KICAgICByZXR1cm4gaXRlbTsKIH0KQEAgLTI4NjgsNyArMjg2MCw3IEBAIHN0
YXRpYyBOb2RlSW1wbCogaXNUZXh0Rmlyc3RJbkxpc3RJdGVtKE4KICAgICB3aGlsZSAocGFyKSB7
CiAgICAgICAgIGlmIChwYXItPmZpcnN0Q2hpbGQoKSAhPSBlKQogICAgICAgICAgICAgcmV0dXJu
IDA7Ci0gICAgICAgIGlmIChwYXItPmlkZW50aWZpZXIoKSA9PSBJRF9MSSkKKyAgICAgICAgaWYg
KHBhci0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmxpKCkpKQogICAgICAgICAgICAgcmV0dXJuIHBh
cjsKICAgICAgICAgZSA9IHBhcjsKICAgICAgICAgcGFyID0gcGFyLT5wYXJlbnROb2RlKCk7CkBA
IC0zMDIyLDEwOSArMzAxNCw5NSBAQCBOU0F0dHJpYnV0ZWRTdHJpbmcgKktXUUtIVE1MUGFydDo6
YXR0cmliCiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMg
b3VyIHNpbXBsZSBIVE1MIC0+IEFTQ0lJIHRyYW5zZm9ybWF0aW9uOgogICAgICAgICAgICAgICAg
IFFTdHJpbmcgdGV4dDsKLSAgICAgICAgICAgICAgICBOb2RlSW1wbDo6SWQgX2lkID0gbi0+aWRl
bnRpZmllcigpOwotICAgICAgICAgICAgICAgIHN3aXRjaChfaWQpIHsKLSAgICAgICAgICAgICAg
ICAgICAgY2FzZSBJRF9BOgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm90ZSB0aGUgc3Rh
cnQgb2YgdGhlIDxhPiBlbGVtZW50LiAgV2Ugd2lsbCBhZGQgdGhlIE5TTGlua0F0dHJpYnV0ZU5h
bWUKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGF0dHJpYnV0ZSB0byB0aGUgYXR0cmlidXRl
ZCBzdHJpbmcgd2hlbiBuYXZpZ2F0aW5nIHRvIHRoZSBuZXh0IHNpYmxpbmcgCi0gICAgICAgICAg
ICAgICAgICAgICAgICAvLyBvZiB0aGlzIG5vZGUuCi0gICAgICAgICAgICAgICAgICAgICAgICBs
aW5rU3RhcnRMb2NhdGlvbiA9IFtyZXN1bHQgbGVuZ3RoXTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGxpbmtTdGFydE5vZGUgPSBzdGF0aWNfY2FzdDxFbGVtZW50SW1wbCo+KG4pOwotICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9C
UjoKLSAgICAgICAgICAgICAgICAgICAgICAgIHRleHQgKz0gIlxuIjsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGhhc05ld0xpbmUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfTEk6Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUVN0cmluZyBsaXN0VGV4
dDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbGVtZW50SW1wbCAqaXRlbVBhcmVudCA9
IGxpc3RQYXJlbnQoc3RhdGljX2Nhc3Q8RWxlbWVudEltcGwgKj4obikpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaGFzTmV3
TGluZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdFRleHQgKz0gJ1xuJzsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNOZXdMaW5lID0gdHJ1ZTsKLSAgICAKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0SXRlbXMuYXBwZW5kKHN0YXRpY19jYXN0PEVs
ZW1lbnRJbXBsKj4obikpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3RJdGVtSW5m
byBpbmZvOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8uc3RhcnQgPSBbcmVzdWx0
IGxlbmd0aF07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mby5lbmQgPSAwOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RJdGVtTG9jYXRpb25zLmFwcGVuZCAoaW5mbyk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbGlzdFRleHQgKz0gJ1x0JzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRl
bVBhcmVudCAmJiByZW5kZXJlci0+aXNMaXN0SXRlbSgpKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFJlbmRlckxpc3RJdGVtICpsaXN0UmVuZGVyZXIgPSBzdGF0aWNfY2FzdDxS
ZW5kZXJMaXN0SXRlbSo+KHJlbmRlcmVyKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtYXhNYXJrZXJXaWR0aCA9IE1BWChbZm9udCBwb2ludFNpemVdLCBtYXhNYXJrZXJXaWR0
aCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaChzdHlsZS0+bGlzdFN0
eWxlVHlwZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIGto
dG1sOjpESVNDOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RU
ZXh0ICs9ICgoUUNoYXIpQlVMTEVUX0NIQVIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSBraHRtbDo6Q0lSQ0xFOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGxpc3RUZXh0ICs9ICgoUUNoYXIpQ0lSQ0xFX0NIQVIpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2FzZSBraHRtbDo6U1FVQVJFOgotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxpc3RUZXh0ICs9ICgoUUNoYXIpU1FVQVJFX0NIQVIpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2FzZSBraHRtbDo6TE5PTkU6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFFTdHJpbmcgbWFya2VyID0gbGlzdFJlbmRlcmVyLT5tYXJrZXJTdHJpbmdWYWx1ZSgpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RUZXh0ICs9IG1hcmtlcjsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBVc2UgQXBwS2l0IG1l
dHJpY3MuICBXaWxsIGJlIHJlbmRlcmVkIGJ5IEFwcEtpdC4KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmbG9hdCBtYXJrZXJXaWR0aCA9IFtmb250IHdpZHRoT2ZTdHJp
bmc6IG1hcmtlci5nZXROU1N0cmluZygpXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtYXhNYXJrZXJXaWR0aCA9IE1BWChtYXJrZXJXaWR0aCwgbWF4TWFya2VyV2lk
dGgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
aWYgKG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjphKCkpKSB7CisgICAgICAgICAgICAgICAgICAg
IC8vIE5vdGUgdGhlIHN0YXJ0IG9mIHRoZSA8YT4gZWxlbWVudC4gIFdlIHdpbGwgYWRkIHRoZSBO
U0xpbmtBdHRyaWJ1dGVOYW1lCisgICAgICAgICAgICAgICAgICAgIC8vIGF0dHJpYnV0ZSB0byB0
aGUgYXR0cmlidXRlZCBzdHJpbmcgd2hlbiBuYXZpZ2F0aW5nIHRvIHRoZSBuZXh0IHNpYmxpbmcg
CisgICAgICAgICAgICAgICAgICAgIC8vIG9mIHRoaXMgbm9kZS4KKyAgICAgICAgICAgICAgICAg
ICAgbGlua1N0YXJ0TG9jYXRpb24gPSBbcmVzdWx0IGxlbmd0aF07CisgICAgICAgICAgICAgICAg
ICAgIGxpbmtTdGFydE5vZGUgPSBzdGF0aWNfY2FzdDxFbGVtZW50SW1wbCo+KG4pOworICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAobi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJyKCkpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHRleHQgKz0gIlxuIjsKKyAgICAgICAgICAgICAgICAgICAgaGFz
TmV3TGluZSA9IHRydWU7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6bGkoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgUVN0cmluZyBsaXN0VGV4
dDsKKyAgICAgICAgICAgICAgICAgICAgRWxlbWVudEltcGwgKml0ZW1QYXJlbnQgPSBsaXN0UGFy
ZW50KHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsICo+KG4pKTsKKyAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAgIGlmICghaGFzTmV3TGluZSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGxpc3RUZXh0ICs9ICdcbic7CisgICAgICAgICAgICAgICAgICAgIGhhc05ld0xpbmUg
PSB0cnVlOwogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RUZXh0ICs9ICcg
JzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdFRleHQgKz0gJ1x0JzsKLSAg
ICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlNNdXRhYmxlRGljdGlvbmFyeSAq
YXR0cnM7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0
cnMgPSBbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBbYXR0cnMgc2V0T2JqZWN0OmZvbnQgZm9yS2V5Ok5TRm9udEF0dHJp
YnV0ZU5hbWVdOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3R5bGUgJiYg
c3R5bGUtPmNvbG9yKCkuaXNWYWxpZCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgW2F0dHJzIHNldE9iamVjdDpzdHlsZS0+Y29sb3IoKS5nZXROU0NvbG9yKCkgZm9yS2V5
Ok5TRm9yZWdyb3VuZENvbG9yQXR0cmlidXRlTmFtZV07Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChzdHlsZSAmJiBzdHlsZS0+YmFja2dyb3VuZENvbG9yKCkuaXNWYWxpZCgp
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHJzIHNldE9iamVjdDpz
dHlsZS0+YmFja2dyb3VuZENvbG9yKCkuZ2V0TlNDb2xvcigpIGZvcktleTpOU0JhY2tncm91bmRD
b2xvckF0dHJpYnV0ZU5hbWVdOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIE5TQXR0cmlidXRlZFN0cmluZyAqcGFydGlhbFN0cmluZyA9IFtbTlNBdHRyaWJ1
dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzpsaXN0VGV4dC5nZXROU1N0cmluZygpIGF0
dHJpYnV0ZXM6YXR0cnNdOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0cnMg
cmVsZWFzZV07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXN1bHQgYXBwZW5k
QXR0cmlidXRlZFN0cmluZzogcGFydGlhbFN0cmluZ107ICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBbcGFydGlhbFN0cmluZyByZWxlYXNlXTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGxpc3RJdGVtcy5h
cHBlbmQoc3RhdGljX2Nhc3Q8RWxlbWVudEltcGwqPihuKSk7CisgICAgICAgICAgICAgICAgICAg
IExpc3RJdGVtSW5mbyBpbmZvOworICAgICAgICAgICAgICAgICAgICBpbmZvLnN0YXJ0ID0gW3Jl
c3VsdCBsZW5ndGhdOworICAgICAgICAgICAgICAgICAgICBpbmZvLmVuZCA9IDA7CisgICAgICAg
ICAgICAgICAgICAgIGxpc3RJdGVtTG9jYXRpb25zLmFwcGVuZCAoaW5mbyk7CisgICAgICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBsaXN0VGV4dCArPSAnXHQnOworICAgICAg
ICAgICAgICAgICAgICBpZiAoaXRlbVBhcmVudCAmJiByZW5kZXJlci0+aXNMaXN0SXRlbSgpKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJMaXN0SXRlbSAqbGlzdFJlbmRlcmVyID0g
c3RhdGljX2Nhc3Q8UmVuZGVyTGlzdEl0ZW0qPihyZW5kZXJlcik7CisKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG1heE1hcmtlcldpZHRoID0gTUFYKFtmb250IHBvaW50U2l6ZV0sIG1heE1hcmtl
cldpZHRoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaChzdHlsZS0+bGlzdFN0eWxl
VHlwZSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBraHRtbDo6RElTQzoK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdFRleHQgKz0gKChRQ2hhcilCVUxM
RVRfQ0hBUik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNhc2Uga2h0bWw6OkNJUkNMRToKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbGlzdFRleHQgKz0gKChRQ2hhcilDSVJDTEVfQ0hBUik7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNhc2Uga2h0bWw6OlNRVUFSRToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbGlzdFRleHQgKz0gKChRQ2hhcilTUVVBUkVfQ0hBUik7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Uga2h0
bWw6OkxOT05FOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBRU3RyaW5nIG1hcmtlciA9IGxpc3RSZW5kZXJlci0+bWFya2VyU3RyaW5nVmFsdWUo
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdFRleHQgKz0gbWFya2VyOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBVc2UgQXBwS2l0IG1ldHJpY3MuICBX
aWxsIGJlIHJlbmRlcmVkIGJ5IEFwcEtpdC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZmxvYXQgbWFya2VyV2lkdGggPSBbZm9udCB3aWR0aE9mU3RyaW5nOiBtYXJrZXIuZ2V0TlNT
dHJpbmcoKV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heE1hcmtlcldpZHRo
ID0gTUFYKG1hcmtlcldpZHRoLCBtYXhNYXJrZXJXaWR0aCk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgICAg
ICAgICBjYXNlIElEX09MOgotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX1VMOgorICAgICAg
ICAgICAgICAgICAgICAgICAgbGlzdFRleHQgKz0gJyAnOworICAgICAgICAgICAgICAgICAgICAg
ICAgbGlzdFRleHQgKz0gJ1x0JzsKKworICAgICAgICAgICAgICAgICAgICAgICAgTlNNdXRhYmxl
RGljdGlvbmFyeSAqYXR0cnM7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzID0gW1tO
U011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IFthdHRycyBzZXRPYmplY3Q6Zm9udCBmb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoc3R5bGUgJiYgc3R5bGUtPmNvbG9yKCkuaXNWYWxpZCgp
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRycyBzZXRPYmplY3Q6c3R5bGUtPmNv
bG9yKCkuZ2V0TlNDb2xvcigpIGZvcktleTpOU0ZvcmVncm91bmRDb2xvckF0dHJpYnV0ZU5hbWVd
OworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0eWxlICYmIHN0eWxlLT5iYWNrZ3JvdW5k
Q29sb3IoKS5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHJzIHNl
dE9iamVjdDpzdHlsZS0+YmFja2dyb3VuZENvbG9yKCkuZ2V0TlNDb2xvcigpIGZvcktleTpOU0Jh
Y2tncm91bmRDb2xvckF0dHJpYnV0ZU5hbWVdOworCisgICAgICAgICAgICAgICAgICAgICAgICBO
U0F0dHJpYnV0ZWRTdHJpbmcgKnBhcnRpYWxTdHJpbmcgPSBbW05TQXR0cmlidXRlZFN0cmluZyBh
bGxvY10gaW5pdFdpdGhTdHJpbmc6bGlzdFRleHQuZ2V0TlNTdHJpbmcoKSBhdHRyaWJ1dGVzOmF0
dHJzXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFthdHRycyByZWxlYXNlXTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIFtyZXN1bHQgYXBwZW5kQXR0cmlidXRlZFN0cmluZzogcGFydGlhbFN0
cmluZ107ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgW3BhcnRpYWxT
dHJpbmcgcmVsZWFzZV07CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgZWxzZSBpZiAobi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9sKCkpIHx8IG4tPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjp1bCgpKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNO
ZXdMaW5lKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQgKz0gIlxuIjsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGhhc05ld0xpbmUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9URDoKLSAgICAgICAg
ICAgICAgICAgICAgY2FzZSBJRF9USDoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9IUjoK
LSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9ERDoKLSAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBJRF9ETDoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9EVDoKLSAgICAgICAgICAgICAg
ICAgICAgY2FzZSBJRF9QUkU6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfQkxPQ0tRVU9U
RToKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9ESVY6CisgICAgICAgICAgICAgICAgICAg
IH0gZWxzZSBpZiAobi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRkKCkpIHx8CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRoKCkpIHx8Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omhy
KCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OmRkKCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OmRsKCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmR0KCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnByZSgpKSB8fAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpibG9ja3F1b3RlKCkp
IHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OmRpdigpKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNOZXdMaW5lKQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQgKz0gJ1xuJzsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGhhc05ld0xpbmUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfUDoKLSAgICAgICAgICAgICAgICAgICAg
Y2FzZSBJRF9UUjoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9IMToKLSAgICAgICAgICAg
ICAgICAgICAgY2FzZSBJRF9IMjoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9IMzoKLSAg
ICAgICAgICAgICAgICAgICAgY2FzZSBJRF9INDoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJ
RF9INToKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9INjogeworICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpwKCkpIHx8CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRyKCkpIHx8
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
OmgxKCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OmgyKCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OmgzKCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omg0KCkpIHx8CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omg1KCkpIHx8CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omg2KCkpKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWhhc05ld0xpbmUpCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGV4dCArPSAnXG4nOwogICAgICAgICAgICAgICAgICAgICAgICAgCkBAIC0z
MTM5LDEwICszMTE3LDggQEAgTlNBdHRyaWJ1dGVkU3RyaW5nICpLV1FLSFRNTFBhcnQ6OmF0dHJp
YgogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgICAgICAgICBoYXNOZXdMaW5lID0gdHJ1ZTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9JTUc6CisgICAgICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppbWcoKSkpIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChwZW5kaW5nU3R5bGVkU3BhY2UgIT0gbmlsKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpbmtTdGFydExvY2F0aW9uID09IFtyZXN1bHQg
bGVuZ3RoXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArK2xpbmtTdGFydExv
Y2F0aW9uOwpAQCAtMzE1Niw4ICszMTMyLDkgQEAgTlNBdHRyaWJ1dGVkU3RyaW5nICpLV1FLSFRN
TFBhcnQ6OmF0dHJpYgogICAgICAgICAgICAgICAgICAgICAgICAgTlNBdHRyaWJ1dGVkU3RyaW5n
ICppU3RyaW5nID0gW05TQXR0cmlidXRlZFN0cmluZyBhdHRyaWJ1dGVkU3RyaW5nV2l0aEF0dGFj
aG1lbnQ6YXR0YWNobWVudF07CiAgICAgICAgICAgICAgICAgICAgICAgICBbcmVzdWx0IGFwcGVu
ZEF0dHJpYnV0ZWRTdHJpbmc6IGlTdHJpbmddOwogICAgICAgICAgICAgICAgICAgICAgICAgW2F0
dGFjaG1lbnQgcmVsZWFzZV07Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgICAgIE5T
QXR0cmlidXRlZFN0cmluZyAqcGFydGlhbFN0cmluZyA9IFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFs
bG9jXSBpbml0V2l0aFN0cmluZzp0ZXh0LmdldE5TU3RyaW5nKCldOwogICAgICAgICAgICAgICAg
IFtyZXN1bHQgYXBwZW5kQXR0cmlidXRlZFN0cmluZzogcGFydGlhbFN0cmluZ107CiAgICAgICAg
ICAgICAgICAgW3BhcnRpYWxTdHJpbmcgcmVsZWFzZV07CkBAIC0zMTc5LDcxICszMTU2LDYwIEBA
IE5TQXR0cmlidXRlZFN0cmluZyAqS1dRS0hUTUxQYXJ0OjphdHRyaWIKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIG5leHQgPSBuLT5uZXh0U2libGluZygpOwogCi0gICAgICAg
ICAgICBOb2RlSW1wbDo6SWQgX2lkID0gbi0+aWRlbnRpZmllcigpOwotICAgICAgICAgICAgc3dp
dGNoKF9pZCkgewotICAgICAgICAgICAgICAgIGNhc2UgSURfQToKLSAgICAgICAgICAgICAgICAg
ICAgLy8gRW5kIG9mIGEgPGE+IGVsZW1lbnQuICBDcmVhdGUgYW4gYXR0cmlidXRlZCBzdHJpbmcg
TlNMaW5rQXR0cmlidXRlTmFtZSBhdHRyaWJ1dGUKLSAgICAgICAgICAgICAgICAgICAgLy8gZm9y
IHRoZSByYW5nZSBvZiB0aGUgbGluay4gIE5vdGUgdGhhdCB3ZSBjcmVhdGUgdGhlIGF0dHJpYnV0
ZWQgc3RyaW5nIGZyb20gdGhlIERPTSwgd2hpY2gKLSAgICAgICAgICAgICAgICAgICAgLy8gd2ls
bCBoYXZlIGNvcnJlY3RlZCBhbnkgaWxsZWdhbGx5IG5lc3RlZCA8YT4gZWxlbWVudHMuCi0gICAg
ICAgICAgICAgICAgICAgIGlmIChsaW5rU3RhcnROb2RlICYmIG4gPT0gbGlua1N0YXJ0Tm9kZSl7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBET01TdHJpbmcgaHJlZiA9IHBhcnNlVVJMKGxpbmtT
dGFydE5vZGUtPmdldEF0dHJpYnV0ZShBVFRSX0hSRUYpKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIEtVUkwga1VSTCA9IEtXUShsaW5rU3RhcnROb2RlLT5nZXREb2N1bWVudCgpLT5wYXJ0KCkp
LT5jb21wbGV0ZVVSTChocmVmLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgICAgICAgICAgTlNVUkwgKlVSTCA9IGtVUkwuZ2V0TlNVUkwoKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIFtyZXN1bHQgYWRkQXR0cmlidXRlOk5TTGlua0F0dHJpYnV0
ZU5hbWUgdmFsdWU6VVJMIHJhbmdlOk5TTWFrZVJhbmdlKGxpbmtTdGFydExvY2F0aW9uLCBbcmVz
dWx0IGxlbmd0aF0tbGlua1N0YXJ0TG9jYXRpb24pXTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGxpbmtTdGFydE5vZGUgPSAwOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjph
KCkpKSB7CisgICAgICAgICAgICAgICAgLy8gRW5kIG9mIGEgPGE+IGVsZW1lbnQuICBDcmVhdGUg
YW4gYXR0cmlidXRlZCBzdHJpbmcgTlNMaW5rQXR0cmlidXRlTmFtZSBhdHRyaWJ1dGUKKyAgICAg
ICAgICAgICAgICAvLyBmb3IgdGhlIHJhbmdlIG9mIHRoZSBsaW5rLiAgTm90ZSB0aGF0IHdlIGNy
ZWF0ZSB0aGUgYXR0cmlidXRlZCBzdHJpbmcgZnJvbSB0aGUgRE9NLCB3aGljaAorICAgICAgICAg
ICAgICAgIC8vIHdpbGwgaGF2ZSBjb3JyZWN0ZWQgYW55IGlsbGVnYWxseSBuZXN0ZWQgPGE+IGVs
ZW1lbnRzLgorICAgICAgICAgICAgICAgIGlmIChsaW5rU3RhcnROb2RlICYmIG4gPT0gbGlua1N0
YXJ0Tm9kZSkgeworICAgICAgICAgICAgICAgICAgICBET01TdHJpbmcgaHJlZiA9IHBhcnNlVVJM
KGxpbmtTdGFydE5vZGUtPmdldEF0dHJpYnV0ZShBVFRSX0hSRUYpKTsKKyAgICAgICAgICAgICAg
ICAgICAgS1VSTCBrVVJMID0gS1dRKGxpbmtTdGFydE5vZGUtPmdldERvY3VtZW50KCktPnBhcnQo
KSktPmNvbXBsZXRlVVJMKGhyZWYuc3RyaW5nKCkpOworICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICAgICAgTlNVUkwgKlVSTCA9IGtVUkwuZ2V0TlNVUkwoKTsKKyAgICAgICAg
ICAgICAgICAgICAgW3Jlc3VsdCBhZGRBdHRyaWJ1dGU6TlNMaW5rQXR0cmlidXRlTmFtZSB2YWx1
ZTpVUkwgcmFuZ2U6TlNNYWtlUmFuZ2UobGlua1N0YXJ0TG9jYXRpb24sIFtyZXN1bHQgbGVuZ3Ro
XS1saW5rU3RhcnRMb2NhdGlvbildOworICAgICAgICAgICAgICAgICAgICBsaW5rU3RhcnROb2Rl
ID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNl
IGlmIChuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b2woKSkgfHwgbi0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OnVsKCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFoYXNOZXdMaW5lKQorICAgICAg
ICAgICAgICAgICAgICB0ZXh0ICs9ICdcbic7CisgICAgICAgICAgICAgICAgaGFzTmV3TGluZSA9
IHRydWU7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjps
aSgpKSkgewogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGNhc2UgSURfT0w6Ci0g
ICAgICAgICAgICAgICAgY2FzZSBJRF9VTDoKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNO
ZXdMaW5lKQotICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCArPSAnXG4nOwotICAgICAgICAg
ICAgICAgICAgICBoYXNOZXdMaW5lID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0KLSAgICAgICAgICAgICAgICBjYXNlIElEX0xJOgotICAgICAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgaSwgY291bnQgPSBsaXN0SXRlbXMuY291bnQoKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKXsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGlzdEl0ZW1zLmF0KGkpID09IG4pewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0SXRlbUxvY2F0aW9uc1tpXS5lbmQgPSBb
cmVzdWx0IGxlbmd0aF07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBpbnQgaSwgY291bnQgPSBsaXN0SXRlbXMuY291bnQoKTsKKyAgICAg
ICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKyl7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChsaXN0SXRlbXMuYXQoaSkgPT0gbil7CisgICAgICAgICAgICAgICAgICAgICAgICBs
aXN0SXRlbUxvY2F0aW9uc1tpXS5lbmQgPSBbcmVzdWx0IGxlbmd0aF07CisgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICBpZiAoIWhhc05ld0xpbmUpCi0gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0ICs9ICdc
bic7Ci0gICAgICAgICAgICAgICAgICAgIGhhc05ld0xpbmUgPSB0cnVlOwotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgIGNhc2UgSURfVEQ6Ci0gICAgICAgICAg
ICAgICAgY2FzZSBJRF9USDoKLSAgICAgICAgICAgICAgICBjYXNlIElEX0hSOgotICAgICAgICAg
ICAgICAgIGNhc2UgSURfREQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBJRF9ETDoKLSAgICAgICAg
ICAgICAgICBjYXNlIElEX0RUOgotICAgICAgICAgICAgICAgIGNhc2UgSURfUFJFOgotICAgICAg
ICAgICAgICAgIGNhc2UgSURfQkxPQ0tRVU9URToKLSAgICAgICAgICAgICAgICBjYXNlIElEX0RJ
VjoKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNOZXdMaW5lKQotICAgICAgICAgICAgICAg
ICAgICAgICAgdGV4dCArPSAnXG4nOwotICAgICAgICAgICAgICAgICAgICBoYXNOZXdMaW5lID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBJ
RF9QOgotICAgICAgICAgICAgICAgIGNhc2UgSURfVFI6Ci0gICAgICAgICAgICAgICAgY2FzZSBJ
RF9IMToKLSAgICAgICAgICAgICAgICBjYXNlIElEX0gyOgotICAgICAgICAgICAgICAgIGNhc2Ug
SURfSDM6Ci0gICAgICAgICAgICAgICAgY2FzZSBJRF9INDoKLSAgICAgICAgICAgICAgICBjYXNl
IElEX0g1OgotICAgICAgICAgICAgICAgIGNhc2UgSURfSDY6Ci0gICAgICAgICAgICAgICAgICAg
IGlmICghaGFzTmV3TGluZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHRleHQgKz0gJ1xuJzsK
LSAgICAgICAgICAgICAgICAgICAgLy8gQW4gZXh0cmEgbmV3bGluZSBpcyBuZWVkZWQgYXQgdGhl
IHN0YXJ0LCBub3QgdGhlIGVuZCwgb2YgdGhlc2UgdHlwZXMgb2YgdGFncywKLSAgICAgICAgICAg
ICAgICAgICAgLy8gc28gZG9uJ3QgYWRkIGFub3RoZXIgaGVyZS4KLSAgICAgICAgICAgICAgICAg
ICAgaGFzTmV3TGluZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIWhhc05ld0xpbmUpCisgICAgICAgICAg
ICAgICAgICAgIHRleHQgKz0gJ1xuJzsKKyAgICAgICAgICAgICAgICBoYXNOZXdMaW5lID0gdHJ1
ZTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRkKCkp
IHx8CisgICAgICAgICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0aCgp
KSB8fAorICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aHIo
KSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmRk
KCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpk
bCgpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
ZHQoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
OnByZSgpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6YmxvY2txdW90ZSgpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6ZGl2KCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFoYXNOZXdMaW5lKQor
ICAgICAgICAgICAgICAgICAgICB0ZXh0ICs9ICdcbic7CisgICAgICAgICAgICAgICAgaGFzTmV3
TGluZSA9IHRydWU7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG4tPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjpwKCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjp0cigpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6aDEoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OmgyKCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjpoMygpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6aDQoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6Omg1KCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjpoNigpKSkgeworICAgICAgICAgICAgICAgIGlmICghaGFzTmV3TGluZSkKKyAg
ICAgICAgICAgICAgICAgICAgdGV4dCArPSAnXG4nOworICAgICAgICAgICAgICAgIC8vIEFuIGV4
dHJhIG5ld2xpbmUgaXMgbmVlZGVkIGF0IHRoZSBzdGFydCwgbm90IHRoZSBlbmQsIG9mIHRoZXNl
IHR5cGVzIG9mIHRhZ3MsCisgICAgICAgICAgICAgICAgLy8gc28gZG9uJ3QgYWRkIGFub3RoZXIg
aGVyZS4KKyAgICAgICAgICAgICAgICBoYXNOZXdMaW5lID0gdHJ1ZTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIAogICAgICAgICAgICAgTlNBdHRyaWJ1dGVkU3RyaW5nICpwYXJ0aWFsU3Ry
aW5nID0gW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOnRleHQuZ2V0
TlNTdHJpbmcoKV07CkBAIC0zNzAzLDcgKzM2NjksNyBAQCB2b2lkIEtXUUtIVE1MUGFydDo6c2V0
U2VsZWN0aW9uRnJvbU5vbmUoCiAgICAgICAgIHdoaWxlIChub2RlKSB7CiAgICAgICAgICAgICAv
LyBMb29rIGZvciBhIGJsb2NrIGZsb3csIGJ1dCBza2lwIG92ZXIgdGhlIEhUTUwgZWxlbWVudCwg
c2luY2Ugd2UgcmVhbGx5CiAgICAgICAgICAgICAvLyB3YW50IHRvIGdldCBhdCBsZWFzdCBhcyBm
YXIgYXMgdGhlIHRoZSBCT0RZIGVsZW1lbnQgaW4gYSBkb2N1bWVudC4KLSAgICAgICAgICAgIGlm
IChub2RlLT5pc0Jsb2NrRmxvdygpICYmIG5vZGUtPmlkZW50aWZpZXIoKSAhPSBJRF9IVE1MKQor
ICAgICAgICAgICAgaWYgKG5vZGUtPmlzQmxvY2tGbG93KCkgJiYgbm9kZS0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6Omh0bWwoKSkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBu
b2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpOwogICAgICAgICB9CkluZGV4OiBrd3EvV2Vi
Q29yZUJyaWRnZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3Ev
V2ViQ29yZUJyaWRnZS5tbSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zOTYKZGlmZiAtdSAtcCAt
cjEuMzk2IGt3cS9XZWJDb3JlQnJpZGdlLm1tCi0tLSBrd3EvV2ViQ29yZUJyaWRnZS5tbQkxNCBK
dW4gMjAwNSAwMDoyMzo0NSAtMDAwMAkxLjM5NgorKysga3dxL1dlYkNvcmVCcmlkZ2UubW0JMjIg
SnVuIDIwMDUgMjM6MjQ6MDAgLTAwMDAKQEAgLTM5LDcgKzM5LDYgQEAKICNpbXBvcnQgImh0bWxf
aW1hZ2VpbXBsLmgiCiAjaW1wb3J0ICJodG1sYXR0cnMuaCIKICNpbXBvcnQgImh0bWxlZGl0aW5n
LmgiCi0jaW1wb3J0ICJodG1sdGFncy5oIgogI2ltcG9ydCAia2h0bWxfcGFydC5oIgogI2ltcG9y
dCAia2h0bWx2aWV3LmgiCiAjaW1wb3J0ICJranNfcHJveHkuaCIKQEAgLTY3LDcgKzY2LDYgQEAK
ICNpbXBvcnQgIktXUUFzc2VydGlvbnMuaCIKICNpbXBvcnQgIktXUUNoYXJzZXRzLmgiCiAjaW1w
b3J0ICJLV1FDbGlwYm9hcmQuaCIKLSNpbXBvcnQgIktXUURPTU5vZGUuaCIKICNpbXBvcnQgIktX
UUVkaXRDb21tYW5kLmgiCiAjaW1wb3J0ICJLV1FGb250LmgiCiAjaW1wb3J0ICJLV1FGb3VuZGF0
aW9uRXh0cmFzLmgiCkBAIC0xMDAsNiArOTgsNyBAQCB1c2luZyBET006OkhUTUxGb3JtRWxlbWVu
dEltcGw7CiB1c2luZyBET006OkhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsOwogdXNpbmcgRE9N
OjpIVE1MSW1hZ2VFbGVtZW50SW1wbDsKIHVzaW5nIERPTTo6SFRNTElucHV0RWxlbWVudEltcGw7
Cit1c2luZyBET006OkhUTUxOYW1lczsKIHVzaW5nIERPTTo6Tm9kZUltcGw7CiB1c2luZyBET006
OlBvc2l0aW9uOwogdXNpbmcgRE9NOjpSYW5nZUltcGw7CkBAIC05MTMsNyArOTEyLDcgQEAgc3Rh
dGljIE5TVmlldyAqdmlld0ZvckVsZW1lbnQoRWxlbWVudEltcAogc3RhdGljIEhUTUxJbnB1dEVs
ZW1lbnRJbXBsICppbnB1dEVsZW1lbnRGcm9tRE9NRWxlbWVudChET01FbGVtZW50ICplbGVtZW50
KQogewogICAgIE5vZGVJbXBsICpub2RlID0gW2VsZW1lbnQgX25vZGVJbXBsXTsKLSAgICBpZiAo
bm9kZSAmJiBpZEZyb21Ob2RlKG5vZGUpID09IElEX0lOUFVUKSB7CisgICAgaWYgKG5vZGUtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjppbnB1dCgpKSkgewogICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8SFRNTElucHV0RWxlbWVudEltcGwgKj4obm9kZSk7CiAgICAgfQogICAgIHJldHVybiBuaWw7
CkBAIC05MjYsNyArOTI1LDcgQEAgc3RhdGljIEhUTUxGb3JtRWxlbWVudEltcGwgKmZvcm1FbGVt
ZW50RgogICAgIC8vIG1hcHMuZ29vZ2xlLmNvbSBjcmFzaGVzIG90aGVyd2lzZSBiZWNhdXNlIGl0
IGlzIGFuIHhzbHQgZmlsZQogICAgIC8vIHRoYXQgY29udGFpbnMgPGZvcm0+IGVsZW1lbnRzIHRo
YXQgYXJlbid0IGluIGFueSBuYW1lc3BhY2UsIHNvCiAgICAgLy8gdGhleSBjb21lIG91dCBhcyBn
ZW5lcmljIENNTCBlbGVtZW50cwotICAgIGlmIChub2RlICYmIG5vZGUtPmlzSFRNTEVsZW1lbnQo
KSAmJiBpZEZyb21Ob2RlKG5vZGUpID09IElEX0ZPUk0pIHsKKyAgICBpZiAobm9kZSAmJiBub2Rl
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Zm9ybSgpKSkgewogICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8SFRNTEZvcm1FbGVtZW50SW1wbCAqPihub2RlKTsKICAgICB9CiAgICAgcmV0dXJuIG5p
bDsKQEAgLTEwOTYsNyArMTA5NSw3IEBAIHN0YXRpYyBIVE1MRm9ybUVsZW1lbnRJbXBsICpmb3Jt
RWxlbWVudEYKICAgICAKICAgICAgICAgICAgIC8vIEZJWE1FOiBDb2RlIGNvcGllZCBmcm9tIFJl
bmRlckltYWdlOjp1cGRhdGVGcm9tRWxlbWVudDsgc2hvdWxkIHNoYXJlLgogICAgICAgICAgICAg
RE9NU3RyaW5nIGF0dHI7Ci0gICAgICAgICAgICBpZiAoaWRGcm9tTm9kZShpKSA9PSBJRF9PQkpF
Q1QpIHsKKyAgICAgICAgICAgIGlmIChpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b2JqZWN0KCkp
KSB7CiAgICAgICAgICAgICAgICAgYXR0ciA9IGktPmdldEF0dHJpYnV0ZShBVFRSX0RBVEEpOwog
ICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBhdHRyID0gaS0+Z2V0QXR0cmli
dXRlKEFUVFJfU1JDKTsKQEAgLTExMDgsOSArMTEwNyw5IEBAIHN0YXRpYyBIVE1MRm9ybUVsZW1l
bnRJbXBsICpmb3JtRWxlbWVudEYKICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gRklYTUU6
IENvZGUgY29waWVkIGZyb20gUmVuZGVySW1hZ2U6OnVwZGF0ZUZyb21FbGVtZW50OyBzaG91bGQg
c2hhcmUuCiAgICAgICAgICAgICBET01TdHJpbmcgYWx0OwotICAgICAgICAgICAgaWYgKGlkRnJv
bU5vZGUoaSkgPT0gSURfSU5QVVQpCisgICAgICAgICAgICBpZiAoaS0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OmlucHV0KCkpKQogICAgICAgICAgICAgICAgIGFsdCA9IHN0YXRpY19jYXN0PEhUTUxJ
bnB1dEVsZW1lbnRJbXBsICo+KGkpLT5hbHRUZXh0KCk7Ci0gICAgICAgICAgICBlbHNlIGlmIChp
ZEZyb21Ob2RlKGkpID09IElEX0lNRykKKyAgICAgICAgICAgIGVsc2UgaWYgKGktPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjppbWcoKSkpCiAgICAgICAgICAgICAgICAgYWx0ID0gc3RhdGljX2Nhc3Q8
SFRNTEltYWdlRWxlbWVudEltcGwgKj4oaSktPmFsdFRleHQoKTsKICAgICAgICAgICAgIGlmICgh
YWx0LmlzTnVsbCgpKSB7CiAgICAgICAgICAgICAgICAgUVN0cmluZyBhbHRUZXh0ID0gYWx0LnN0
cmluZygpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>2561</attachid>
            <date>2005-06-22 18:27:50 -0700</date>
            <delta_ts>2005-06-23 15:10:07 -0700</delta_ts>
            <desc>Factor out element creation code and get dom_docimpl.cpp compiling</desc>
            <filename>patch-6.txt</filename>
            <type>text/plain</type>
            <size>624556</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUucGJwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvV2ViQ29yZS9XZWJDb3JlLnBicHJvai9wcm9qZWN0LnBieHByb2osdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuNTU2CmRpZmYgLXUgLXAgLXIxLjU1NiBXZWJDb3JlLnBicHJvai9w
cm9qZWN0LnBieHByb2oKLS0tIFdlYkNvcmUucGJwcm9qL3Byb2plY3QucGJ4cHJvagkyMiBKdW4g
MjAwNSAxNTozMTo1NyAtMDAwMAkxLjU1NgorKysgV2ViQ29yZS5wYnByb2ovcHJvamVjdC5wYnhw
cm9qCTIzIEp1biAyMDA1IDAxOjEwOjA3IC0wMDAwCkBAIC0yMTQsMzIgKzIxNCw2IEBACiAvLzJE
MgogLy8yRDMKIC8vMkQ0Ci0vLzM1MAotLy8zNTEKLS8vMzUyCi0vLzM1MwotLy8zNTQKLQkJMzU0
RjI0ODkwMkVFMjg1OTBBQ0EyQUNBID0gewotCQkJZmlsZUVuY29kaW5nID0gMzA7Ci0JCQlpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOwotCQkJbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsKLQkJCXBhdGggPSBLV1FET01Ob2RlLmg7Ci0JCQlyZWZUeXBlID0gNDsKLQkJCXNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7Ci0JCX07Ci0JCTM1NEYyNDhBMDJFRTI4NTkwQUNBMkFDQSA9IHsKLQkJ
CWZpbGVFbmNvZGluZyA9IDMwOwotCQkJaXNhID0gUEJYRmlsZVJlZmVyZW5jZTsKLQkJCWxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOwotCQkJcGF0aCA9IEtXUURPTU5vZGUu
Y3BwOwotCQkJcmVmVHlwZSA9IDQ7Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwotCQl9Owot
Ly8zNTAKLS8vMzUxCi0vLzM1MgotLy8zNTMKLS8vMzU0CiAvLzUxMAogLy81MTEKIC8vNTEyCkBA
IC0zNjcsNiArMzQxLDM0IEBACiAJCQlzZXR0aW5ncyA9IHsKIAkJCX07CiAJCX07CisJCTU1Mzkw
MTBEMDg2QTJGNzMwMDFFRDdGRSA9IHsKKwkJCWZpbGVFbmNvZGluZyA9IDMwOworCQkJaXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsKKwkJCWxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
CisJCQlwYXRoID0gaHRtbGZhY3RvcnkuaDsKKwkJCXJlZlR5cGUgPSA0OworCQkJc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJNTUzOTAxMEUwODZBMkY3MzAwMUVEN0ZFID0geworCQkJ
ZmlsZVJlZiA9IDU1MzkwMTBEMDg2QTJGNzMwMDFFRDdGRTsKKwkJCWlzYSA9IFBCWEJ1aWxkRmls
ZTsKKwkJCXNldHRpbmdzID0geworCQkJfTsKKwkJfTsKKwkJNTUzOTAxNUYwODZBMzMyRTAwMUVE
N0ZFID0geworCQkJZmlsZUVuY29kaW5nID0gMzA7CisJCQlpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OworCQkJbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7CisJCQlwYXRoID0g
aHRtbGZhY3RvcnkuY3BwOworCQkJcmVmVHlwZSA9IDQ7CisJCQlzb3VyY2VUcmVlID0gIjxncm91
cD4iOworCQl9OworCQk1NTM5MDE2MDA4NkEzMzJFMDAxRUQ3RkUgPSB7CisJCQlmaWxlUmVmID0g
NTUzOTAxNUYwODZBMzMyRTAwMUVEN0ZFOworCQkJaXNhID0gUEJYQnVpbGRGaWxlOworCQkJc2V0
dGluZ3MgPSB7CisJCQl9OworCQl9OwogCQk1NTk5OEE1NzA1MkI1OThGMDAxN0E2QzEgPSB7CiAJ
CQljaGlsZHJlbiA9ICgKIAkJCQk1NTk5OEE1QTA1MkI1OUNDMDAxN0E2QzEsCkBAIC0xODcxLDI0
ICsxODczLDYgQEAKIAkJCXNoZWxsUGF0aCA9IC9iaW4vc2g7CiAJCQlzaGVsbFNjcmlwdCA9ICJc
IiRDUkVBVEVfSEFTSF9UQUJMRVwiIGtodG1sL2VjbWEveG1sc2VyaWFsaXplci5jcHAgPiBcIiRE
RVJJVkVEX0ZJTEVfRElSL3htbHNlcmlhbGl6ZXIubHV0LmhcIiI7CiAJCX07Ci0JCTkzMkZDMUMw
MDgyNEFCQjkwMDVCM0M3NSA9IHsKLQkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7Ci0J
CQlmaWxlcyA9ICgKLQkJCSk7Ci0JCQlpbnB1dFBhdGhzID0gKAotCQkJCWtodG1sL21pc2MvbWFr
ZXRhZ3MsCi0JCQkJa2h0bWwvbWlzYy9odG1sdGFncy5pbiwKLQkJCSk7Ci0JCQlpc2EgPSBQQlhT
aGVsbFNjcmlwdEJ1aWxkUGhhc2U7Ci0JCQluYW1lID0gaHRtbHRhZ3MuYy9oOwotCQkJb3V0cHV0
UGF0aHMgPSAoCi0JCQkJIiQoREVSSVZFRF9GSUxFX0RJUikvaHRtbHRhZ3MuYyIsCi0JCQkJIiQo
REVSSVZFRF9GSUxFX0RJUikvaHRtbHRhZ3MuaCIsCi0JCQkpOwotCQkJcnVuT25seUZvckRlcGxv
eW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7Ci0JCQlzaGVsbFBhdGggPSAvYmluL3NoOwotCQkJc2hl
bGxTY3JpcHQgPSAiY2F0IGtodG1sL21pc2MvaHRtbHRhZ3MuaW4gPiBcIiRERVJJVkVEX0ZJTEVf
RElSL2h0bWx0YWdzLmluXCJcbmNkIFwiJERFUklWRURfRklMRV9ESVJcIlxucGVybCBcIiRTUkNS
T09UL2todG1sL21pc2MvbWFrZXRhZ3NcIiI7Ci0JCX07CiAJCTkzMkZDMjk1MDgyNEIzNDUwMDVC
M0M3NSA9IHsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgK
QEAgLTIzMDcsNyArMjI5MSw2IEBACiAJCQkJOTMyRkMyQkMwODI0QjQyMjAwNUIzQzc1LAogCQkJ
CTkzMkZDMEI3MDgyNEExNzUwMDVCM0M3NSwKIAkJCQk5MzJGQzI5NTA4MjRCMzQ1MDA1QjNDNzUs
Ci0JCQkJOTMyRkMxQzAwODI0QUJCOTAwNUIzQzc1LAogCQkJCTkzRUE2ODZDMDgyNDlBRjQwMDY4
N0Y1NiwKIAkJCQk5MzJGQzEwQjA4MjRBNEQ0MDA1QjNDNzUsCiAJCQkJOTMyRkMxNjEwODI0QThF
MzAwNUIzQzc1LApAQCAtMjQxNSw3ICsyMzk4LDYgQEAKIAkJCQk5M0YxOThEQzA4MjQ1RTU5MDAx
RTlBQkMsCiAJCQkJOTNGMTk4REUwODI0NUU1OTAwMUU5QUJDLAogCQkJCTkzRjE5OEUwMDgyNDVF
NTkwMDFFOUFCQywKLQkJCQk5M0YxOThFMjA4MjQ1RTU5MDAxRTlBQkMsCiAJCQkJOTNGMTk4RTMw
ODI0NUU1OTAwMUU5QUJDLAogCQkJCTkzRjE5OEU0MDgyNDVFNTkwMDFFOUFCQywKIAkJCQk5M0Yx
OThFNTA4MjQ1RTU5MDAxRTlBQkMsCkBAIC0yNDkyLDcgKzI0NzQsNiBAQAogCQkJCTkzRjE5OTJF
MDgyNDVFNTkwMDFFOUFCQywKIAkJCQk5M0YxOTkyRjA4MjQ1RTU5MDAxRTlBQkMsCiAJCQkJOTNG
MTk5MzAwODI0NUU1OTAwMUU5QUJDLAotCQkJCTkzRjE5OTMxMDgyNDVFNTkwMDFFOUFCQywKIAkJ
CQk5M0YxOTkzMjA4MjQ1RTU5MDAxRTlBQkMsCiAJCQkJOTNGMTk5MzMwODI0NUU1OTAwMUU5QUJD
LAogCQkJCTkzRjE5OTM0MDgyNDVFNTkwMDFFOUFCQywKQEAgLTI2NDcsNyArMjYyOCw2IEBACiAJ
CQkJOTNGMTk5QzkwODI0NUU1OTAwMUU5QUJDLAogCQkJCTkzRjE5OUNBMDgyNDVFNTkwMDFFOUFC
QywKIAkJCQk5M0YxOTlDQjA4MjQ1RTU5MDAxRTlBQkMsCi0JCQkJOTNGMTk5Q0MwODI0NUU1OTAw
MUU5QUJDLAogCQkJCTkzRjE5OUNFMDgyNDVFNTkwMDFFOUFCQywKIAkJCQk5M0YxOTlDRjA4MjQ1
RTU5MDAxRTlBQkMsCiAJCQkJOTNGMTk5RDAwODI0NUU1OTAwMUU5QUJDLApAQCAtMjcyNCw2ICsy
NzA0LDcgQEAKIAkJCQkxQTY5RDM4MTA4NTYyNzQxMDAwOTg4MEQsCiAJCQkJNTUwQTBCQ0EwODVG
NjAzOTAwNzM1M0Q2LAogCQkJCTU1MEEwQkNFMDg1RjYwNEQwMDczNTNENiwKKwkJCQk1NTM5MDEw
RTA4NkEyRjczMDAxRUQ3RkUsCiAJCQkpOwogCQkJaXNhID0gUEJYSGVhZGVyc0J1aWxkUGhhc2U7
CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKQEAgLTI5NjgsMTIg
KzI5NDksNiBAQAogCQkJc2V0dGluZ3MgPSB7CiAJCQl9OwogCQl9OwotCQk5M0YxOThFMjA4MjQ1
RTU5MDAxRTlBQkMgPSB7Ci0JCQlmaWxlUmVmID0gRjUyM0QyMzYwMkRFNDM5NjAxODYzNUNBOwot
CQkJaXNhID0gUEJYQnVpbGRGaWxlOwotCQkJc2V0dGluZ3MgPSB7Ci0JCQl9OwotCQl9OwogCQk5
M0YxOThFMzA4MjQ1RTU5MDAxRTlBQkMgPSB7CiAJCQlmaWxlUmVmID0gRjUyM0QyMzgwMkRFNDM5
NjAxODYzNUNBOwogCQkJaXNhID0gUEJYQnVpbGRGaWxlOwpAQCAtMzQzMCwxMiArMzQwNSw2IEBA
CiAJCQlzZXR0aW5ncyA9IHsKIAkJCX07CiAJCX07Ci0JCTkzRjE5OTMxMDgyNDVFNTkwMDFFOUFC
QyA9IHsKLQkJCWZpbGVSZWYgPSAzNTRGMjQ4OTAyRUUyODU5MEFDQTJBQ0E7Ci0JCQlpc2EgPSBQ
QlhCdWlsZEZpbGU7Ci0JCQlzZXR0aW5ncyA9IHsKLQkJCX07Ci0JCX07CiAJCTkzRjE5OTMyMDgy
NDVFNTkwMDFFOUFCQyA9IHsKIAkJCWZpbGVSZWYgPSBGNTg3ODY4NTAyREUzQjg2MDFFQTQxMjI7
CiAJCQlpc2EgPSBQQlhCdWlsZEZpbGU7CkBAIC00Mzk4LDEyICs0MzY3LDYgQEAKIAkJCXNldHRp
bmdzID0gewogCQkJfTsKIAkJfTsKLQkJOTNGMTk5Q0MwODI0NUU1OTAwMUU5QUJDID0gewotCQkJ
ZmlsZVJlZiA9IEJDN0ZERTMyMDVDMUQ5QUIwMDcwQTkwMjsKLQkJCWlzYSA9IFBCWEJ1aWxkRmls
ZTsKLQkJCXNldHRpbmdzID0gewotCQkJfTsKLQkJfTsKIAkJOTNGMTk5Q0UwODI0NUU1OTAwMUU5
QUJDID0gewogCQkJZmlsZVJlZiA9IEJDM0IzNjQ2MDVDOUQ1RTIwMEU0MjkwMjsKIAkJCWlzYSA9
IFBCWEJ1aWxkRmlsZTsKQEAgLTQ5MzgsNyArNDkwMSw2IEBACiAJCQkJOTNGMTlBOEIwODI0NUU1
OTAwMUU5QUJDLAogCQkJCTkzRjE5QThDMDgyNDVFNTkwMDFFOUFCQywKIAkJCQk5M0YxOUE4RDA4
MjQ1RTU5MDAxRTlBQkMsCi0JCQkJOTNGMTlBOEUwODI0NUU1OTAwMUU5QUJDLAogCQkJCTkzRjE5
QThGMDgyNDVFNTkwMDFFOUFCQywKIAkJCQk5M0YxOUE5MDA4MjQ1RTU5MDAxRTlBQkMsCiAJCQkJ
OTNGMTlBOTEwODI0NUU1OTAwMUU5QUJDLApAQCAtNDk5MSw3ICs0OTUzLDYgQEAKIAkJCQk5M0Yx
OUFDMDA4MjQ1RTU5MDAxRTlBQkMsCiAJCQkJOTNGMTlBQzEwODI0NUU1OTAwMUU5QUJDLAogCQkJ
CTkzRjE5QUMyMDgyNDVFNTkwMDFFOUFCQywKLQkJCQk5M0YxOUFDMzA4MjQ1RTU5MDAxRTlBQkMs
CiAJCQkJOTNGMTlBQzQwODI0NUU1OTAwMUU5QUJDLAogCQkJCTkzRjE5QUM1MDgyNDVFNTkwMDFF
OUFCQywKIAkJCQk5M0YxOUFDNjA4MjQ1RTU5MDAxRTlBQkMsCkBAIC01MDMzLDcgKzQ5OTQsNiBA
QAogCQkJCTkzRjE5QUVDMDgyNDVFNTkwMDFFOUFCQywKIAkJCQk5M0YxOUFFRDA4MjQ1RTU5MDAx
RTlBQkMsCiAJCQkJOTNGMTlBRUUwODI0NUU1OTAwMUU5QUJDLAotCQkJCTkzRjE5QUVGMDgyNDVF
NTkwMDFFOUFCQywKIAkJCQk5M0YxOUFGMDA4MjQ1RTU5MDAxRTlBQkMsCiAJCQkJOTNGMTlBRjEw
ODI0NUU1OTAwMUU5QUJDLAogCQkJCTkzRjE5QUYyMDgyNDVFNTkwMDFFOUFCQywKQEAgLTUwOTcs
NiArNTA1Nyw3IEBACiAJCQkJMUE2OUQzODIwODU2Mjc0MTAwMDk4ODBELAogCQkJCTU1MEEwQkM5
MDg1RjYwMzkwMDczNTNENiwKIAkJCQk1NTBBMEJDRDA4NUY2MDREMDA3MzUzRDYsCisJCQkJNTUz
OTAxNjAwODZBMzMyRTAwMUVEN0ZFLAogCQkJKTsKIAkJCWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBo
YXNlOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CkBAIC01NzM3
LDEyICs1Njk4LDYgQEAKIAkJCXNldHRpbmdzID0gewogCQkJfTsKIAkJfTsKLQkJOTNGMTlBOEUw
ODI0NUU1OTAwMUU5QUJDID0gewotCQkJZmlsZVJlZiA9IEY1MjNEMjM1MDJERTQzOTYwMTg2MzVD
QTsKLQkJCWlzYSA9IFBCWEJ1aWxkRmlsZTsKLQkJCXNldHRpbmdzID0gewotCQkJfTsKLQkJfTsK
IAkJOTNGMTlBOEYwODI0NUU1OTAwMUU5QUJDID0gewogCQkJZmlsZVJlZiA9IEY1MjNEMjM3MDJE
RTQzOTYwMTg2MzVDQTsKIAkJCWlzYSA9IFBCWEJ1aWxkRmlsZTsKQEAgLTYwNTUsMTIgKzYwMTAs
NiBAQAogCQkJc2V0dGluZ3MgPSB7CiAJCQl9OwogCQl9OwotCQk5M0YxOUFDMzA4MjQ1RTU5MDAx
RTlBQkMgPSB7Ci0JCQlmaWxlUmVmID0gMzU0RjI0OEEwMkVFMjg1OTBBQ0EyQUNBOwotCQkJaXNh
ID0gUEJYQnVpbGRGaWxlOwotCQkJc2V0dGluZ3MgPSB7Ci0JCQl9OwotCQl9OwogCQk5M0YxOUFD
NDA4MjQ1RTU5MDAxRTlBQkMgPSB7CiAJCQlmaWxlUmVmID0gRjUxMTdCQ0EwMkY5RkZFRjAxODYz
NUNFOwogCQkJaXNhID0gUEJYQnVpbGRGaWxlOwpAQCAtNjMwNywxMiArNjI1Niw2IEBACiAJCQlz
ZXR0aW5ncyA9IHsKIAkJCX07CiAJCX07Ci0JCTkzRjE5QUVGMDgyNDVFNTkwMDFFOUFCQyA9IHsK
LQkJCWZpbGVSZWYgPSBCQzdGREUzMTA1QzFEOUFCMDA3MEE5MDI7Ci0JCQlpc2EgPSBQQlhCdWls
ZEZpbGU7Ci0JCQlzZXR0aW5ncyA9IHsKLQkJCX07Ci0JCX07CiAJCTkzRjE5QUYwMDgyNDVFNTkw
MDFFOUFCQyA9IHsKIAkJCWZpbGVSZWYgPSBCQzNCMzY0NTA1QzlENUUyMDBFNDI5MDI7CiAJCQlp
c2EgPSBQQlhCdWlsZEZpbGU7CkBAIC02ODU2LDIyICs2Nzk5LDYgQEAKIAkJCXJlZlR5cGUgPSA0
OwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKLQkJQkM3RkRFMzEwNUMxRDlBQjAw
NzBBOTAyID0gewotCQkJZmlsZUVuY29kaW5nID0gMzA7Ci0JCQlpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOwotCQkJbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7Ci0JCQlwYXRo
ID0geG1sX25hbWVzcGFjZV90YWJsZS5jcHA7Ci0JCQlyZWZUeXBlID0gNDsKLQkJCXNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7Ci0JCX07Ci0JCUJDN0ZERTMyMDVDMUQ5QUIwMDcwQTkwMiA9IHsKLQkJ
CWZpbGVFbmNvZGluZyA9IDMwOwotCQkJaXNhID0gUEJYRmlsZVJlZmVyZW5jZTsKLQkJCWxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7Ci0JCQlwYXRoID0geG1sX25hbWVzcGFjZV90
YWJsZS5oOwotCQkJcmVmVHlwZSA9IDQ7Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwotCQl9
OwogCQlCQzgwQTY5MzA0NjhCNzgxMDBEQkNDOUMgPSB7CiAJCQlmaWxlRW5jb2RpbmcgPSAzMDsK
IAkJCWlzYSA9IFBCWEZpbGVSZWZlcmVuY2U7CkBAIC03NDMyLDggKzczNTksNiBAQAogCQkJCTJE
OTA2NjBDMDY2NUQ5MzcwMDZCNkYxQSwKIAkJCQlGNTg3ODRDRDAyREUzNzU5MDFFQTQxMjIsCiAJ
CQkJRjU4Nzg0REEwMkRFMzc1OTAxRUE0MTIyLAotCQkJCTM1NEYyNDg5MDJFRTI4NTkwQUNBMkFD
QSwKLQkJCQkzNTRGMjQ4QTAyRUUyODU5MEFDQTJBQ0EsCiAJCQkJOTMxQzhBMTYwMzgwMjg4QjAw
ODYzNUNFLAogCQkJCTkzMUM4QTE3MDM4MDI4OEIwMDg2MzVDRSwKIAkJCQlCRUY3RUVBMDA1RkY4
RjBEMDA5NzE3RUUsCkBAIC04NDAyLDIyICs4MzI3LDYgQEAKIAkJCXJlZlR5cGUgPSA0OwogCQkJ
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKLQkJRjUyM0QyMzUwMkRFNDM5NjAxODYzNUNB
ID0gewotCQkJZmlsZUVuY29kaW5nID0gMzA7Ci0JCQlpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOwot
CQkJbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7Ci0JCQlwYXRoID0gZHRk
LmNwcDsKLQkJCXJlZlR5cGUgPSA0OwotCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsK
LQkJRjUyM0QyMzYwMkRFNDM5NjAxODYzNUNBID0gewotCQkJZmlsZUVuY29kaW5nID0gMzA7Ci0J
CQlpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOwotCQkJbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsKLQkJCXBhdGggPSBkdGQuaDsKLQkJCXJlZlR5cGUgPSA0OwotCQkJc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsKLQkJfTsKIAkJRjUyM0QyMzcwMkRFNDM5NjAxODYzNUNBID0gewogCQkJ
ZmlsZUVuY29kaW5nID0gMzA7CiAJCQlpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOwpAQCAtODY0Niw4
ICs4NTU1LDggQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCTU1MEEwQkNCMDg1RjYwNEQwMDczNTNE
NiwKIAkJCQk1NTBBMEJDQzA4NUY2MDREMDA3MzUzRDYsCi0JCQkJRjUyM0QyMzUwMkRFNDM5NjAx
ODYzNUNBLAotCQkJCUY1MjNEMjM2MDJERTQzOTYwMTg2MzVDQSwKKwkJCQk1NTM5MDEwRDA4NkEy
RjczMDAxRUQ3RkUsCisJCQkJNTUzOTAxNUYwODZBMzMyRTAwMUVEN0ZFLAogCQkJCUY1MjNEMjM3
MDJERTQzOTYwMTg2MzVDQSwKIAkJCQlGNTIzRDIzODAyREU0Mzk2MDE4NjM1Q0EsCiAJCQkJRjUy
M0QyMzkwMkRFNDM5NjAxODYzNUNBLApAQCAtOTM1NCw4ICs5MjYzLDYgQEAKIAkJCQlGNTIzRDMw
NjAyREU0NDc2MDE4NjM1Q0EsCiAJCQkJRjUyM0QzMDcwMkRFNDQ3NjAxODYzNUNBLAogCQkJCUY1
MjNEMzA4MDJERTQ0NzYwMTg2MzVDQSwKLQkJCQlCQzdGREUzMTA1QzFEOUFCMDA3MEE5MDIsCi0J
CQkJQkM3RkRFMzIwNUMxRDlBQjAwNzBBOTAyLAogCQkJCUY1MjNEMzA5MDJERTQ0NzYwMTg2MzVD
QSwKIAkJCQlGNTIzRDMwQTAyREU0NDc2MDE4NjM1Q0EsCiAJCQkpOwpJbmRleDoga2h0bWwva2h0
bWxfcGFydC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwv
a2h0bWxfcGFydC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzI0CmRpZmYgLXUgLXAgLXIx
LjMyNCBraHRtbC9raHRtbF9wYXJ0LmNwcAotLS0ga2h0bWwva2h0bWxfcGFydC5jcHAJMTQgSnVu
IDIwMDUgMDA6MjM6NDQgLTAwMDAJMS4zMjQKKysrIGtodG1sL2todG1sX3BhcnQuY3BwCTIzIEp1
biAyMDA1IDAxOjEwOjExIC0wMDAwCkBAIC01NzI2LDcgKzU3MjYsNyBAQCBDU1NDb21wdXRlZFN0
eWxlRGVjbGFyYXRpb25JbXBsICpLSFRNTFBhCiAgICAgaW50IGV4Y2VwdGlvbkNvZGUgPSAwOwog
CiAgICAgaWYgKGQtPm1fdHlwaW5nU3R5bGUpIHsKLSAgICAgICAgc3R5bGVFbGVtZW50ID0geG1s
RG9jSW1wbCgpLT5jcmVhdGVIVE1MRWxlbWVudCgic3BhbiIsIGV4Y2VwdGlvbkNvZGUpOworICAg
ICAgICBzdHlsZUVsZW1lbnQgPSB4bWxEb2NJbXBsKCktPmNyZWF0ZUVsZW1lbnROUyhYSFRNTF9O
QU1FU1BBQ0UsICJzcGFuIiwgZXhjZXB0aW9uQ29kZSk7CiAgICAgICAgIGFzc2VydChleGNlcHRp
b25Db2RlID09IDApOwogCiAgICAgICAgIHN0eWxlRWxlbWVudC0+cmVmKCk7CkluZGV4OiBraHRt
bC9raHRtbHZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2to
dG1sL2todG1sdmlldy5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTMzCmRpZmYgLXUgLXAg
LXIxLjEzMyBraHRtbC9raHRtbHZpZXcuY3BwCi0tLSBraHRtbC9raHRtbHZpZXcuY3BwCTExIE1h
eSAyMDA1IDAwOjU4OjI3IC0wMDAwCTEuMTMzCisrKyBraHRtbC9raHRtbHZpZXcuY3BwCTIzIEp1
biAyMDA1IDAxOjEwOjEzIC0wMDAwCkBAIC02MDcsMTIgKzYwNywxMiBAQCB2b2lkIEtIVE1MVmll
dzo6bGF5b3V0KCkKICAgICBpZiAoZG9jdW1lbnQtPmlzSFRNTERvY3VtZW50KCkpIHsKICAgICAg
ICAgTm9kZUltcGwgKmJvZHkgPSBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnRJbXBsKj4oZG9jdW1l
bnQpLT5ib2R5KCk7CiAgICAgICAgIGlmIChib2R5ICYmIGJvZHktPnJlbmRlcmVyKCkpIHsKLSAg
ICAgICAgICAgIGlmIChib2R5LT5pZCgpID09IElEX0ZSQU1FU0VUKSB7CisgICAgICAgICAgICBp
ZiAoYm9keS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZyYW1lc2V0KCkpKSB7CiAgICAgICAgICAg
ICAgICAgYm9keS0+cmVuZGVyZXIoKS0+c2V0TmVlZHNMYXlvdXQodHJ1ZSk7CiAgICAgICAgICAg
ICAgICAgdk1vZGUgPSBBbHdheXNPZmY7CiAgICAgICAgICAgICAgICAgaE1vZGUgPSBBbHdheXNP
ZmY7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChib2R5LT5pZCgpID09IElE
X0JPRFkpIHsKKyAgICAgICAgICAgIGVsc2UgaWYgKGJvZHktPmhhc1RhZ05hbWUoSFRNTE5hbWVz
Ojpib2R5KCkpKSB7CiAgICAgICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiBvID0gKHJvb3RSZW5k
ZXJlci0+c3R5bGUoKS0+b3ZlcmZsb3coKSA9PSBPVklTSUJMRSkgPyBib2R5LT5yZW5kZXJlcigp
IDogcm9vdFJlbmRlcmVyOwogICAgICAgICAgICAgICAgIGFwcGx5T3ZlcmZsb3dUb1ZpZXdwb3J0
KG8sIGhNb2RlLCB2TW9kZSk7IC8vIE9ubHkgYXBwbGllcyB0byBIVE1MIFVBcywgbm90IHRvIFhN
TC9YSFRNTCBVQXMKICAgICAgICAgICAgIH0KQEAgLTg3NywxMCArODc3LDcgQEAgdm9pZCBLSFRN
TFZpZXc6OnZpZXdwb3J0TW91c2VEb3VibGVDbGljawogCiBzdGF0aWMgYm9vbCBpc1N1Ym1pdElt
YWdlKERPTTo6Tm9kZUltcGwgKm5vZGUpCiB7Ci0gICAgcmV0dXJuIG5vZGUKLSAgICAgICAgJiYg
bm9kZS0+aXNIVE1MRWxlbWVudCgpCi0gICAgICAgICYmIG5vZGUtPmlkKCkgPT0gSURfSU5QVVQK
LSAgICAgICAgJiYgc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudEltcGwqPihub2RlKS0+aW5w
dXRUeXBlKCkgPT0gSFRNTElucHV0RWxlbWVudEltcGw6OklNQUdFOworICAgIHJldHVybiBub2Rl
ICYmIG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppbnB1dCgpKSAmJiBzdGF0aWNfY2FzdDxI
VE1MSW5wdXRFbGVtZW50SW1wbCo+KG5vZGUpLT5pbnB1dFR5cGUoKSA9PSBIVE1MSW5wdXRFbGVt
ZW50SW1wbDo6SU1BR0U7CiB9CiAKIHZvaWQgS0hUTUxWaWV3Ojp2aWV3cG9ydE1vdXNlTW92ZUV2
ZW50KCBRTW91c2VFdmVudCAqIF9tb3VzZSApCkluZGV4OiBraHRtbC9jc3MvY3NzX2Jhc2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2Nzcy9jc3NfYmFz
ZS5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTUKZGlmZiAtdSAtcCAtcjEuMTUga2h0bWwv
Y3NzL2Nzc19iYXNlLmNwcAotLS0ga2h0bWwvY3NzL2Nzc19iYXNlLmNwcAkxMiBKdW4gMjAwNSAw
NDowNzozMCAtMDAwMAkxLjE1CisrKyBraHRtbC9jc3MvY3NzX2Jhc2UuY3BwCTIzIEp1biAyMDA1
IDAxOjEwOjEzIC0wMDAwCkBAIC05Myw2ICs5MywxMiBAQCBTdHlsZUxpc3RJbXBsOjp+U3R5bGVM
aXN0SW1wbCgpCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK3N0YXRpYyBjb25zdCBR
dWFsaWZpZWROYW1lJiBhbnlUYWdOYW1lKCkKK3sKKyAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBh
bnlOYW1lKG51bGxBdG9tLCBzdGFyQXRvbSwgc3RhckF0b20pOworICAgIHJldHVybiBhbnlOYW1l
OworfQorCiB2b2lkIENTU1NlbGVjdG9yOjpwcmludCh2b2lkKQogewogICAgIGtkRGVidWcoIDYw
ODAgKSA8PCAiW1NlbGVjdG9yOiB0YWcgPSAiIDw8ICAgICAgIHRhZyA8PCAiLCBhdHRyID0gXCIi
IDw8IGF0dHIgPDwgIlwiLCBtYXRjaCA9IFwiIiA8PCBtYXRjaApJbmRleDoga2h0bWwvY3NzL2Nz
c19iYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvY3Nz
L2Nzc19iYXNlLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTIKZGlmZiAtdSAtcCAtcjEuMTIg
a2h0bWwvY3NzL2Nzc19iYXNlLmgKLS0tIGtodG1sL2Nzcy9jc3NfYmFzZS5oCTEyIEp1biAyMDA1
IDA0OjA3OjMwIC0wMDAwCTEuMTIKKysrIGtodG1sL2Nzcy9jc3NfYmFzZS5oCTIzIEp1biAyMDA1
IDAxOjEwOjEzIC0wMDAwCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiZG9tL2RvbV9zdHJp
bmcuaCIKICNpbmNsdWRlICJkb20vZG9tX21pc2MuaCIKICNpbmNsdWRlICJ4bWwvZG9tX25vZGVp
bXBsLmgiCisjaW5jbHVkZSAiZG9tX3FuYW1lLmgiCiAjaW5jbHVkZSAibWlzYy9zaGFyZWQuaCIK
ICNpbmNsdWRlIDxxZGF0ZXRpbWUuaD4KICNpbmNsdWRlIDxxcHRybGlzdC5oPgpAQCAtNDYsMjAg
KzQ3LDIwIEBAIG5hbWVzcGFjZSBET00gewogICAgIGNsYXNzIERvY3VtZW50SW1wbDsKIAogICAg
IHN0cnVjdCBDU1NOYW1lc3BhY2UgewotICAgICAgICBET01TdHJpbmcgbV9wcmVmaXg7Ci0gICAg
ICAgIERPTVN0cmluZyBtX3VyaTsKKyAgICAgICAgQXRvbWljU3RyaW5nIG1fcHJlZml4OworICAg
ICAgICBBdG9taWNTdHJpbmcgbV91cmk7CiAgICAgICAgIENTU05hbWVzcGFjZSogbV9wYXJlbnQ7
CiAKICAgICAgICAgTUFJTl9USFJFQURfQUxMT0NBVEVEOwogCi0gICAgICAgIENTU05hbWVzcGFj
ZShjb25zdCBET01TdHJpbmcmIHAsIGNvbnN0IERPTVN0cmluZyYgdSwgQ1NTTmFtZXNwYWNlKiBw
YXJlbnQpIAorICAgICAgICBDU1NOYW1lc3BhY2UoY29uc3QgQXRvbWljU3RyaW5nJiBwLCBjb25z
dCBBdG9taWNTdHJpbmcmIHUsIENTU05hbWVzcGFjZSogcGFyZW50KSAKICAgICAgICAgICAgIDpt
X3ByZWZpeChwKSwgbV91cmkodSksIG1fcGFyZW50KHBhcmVudCkge30KICAgICAgICAgfkNTU05h
bWVzcGFjZSgpIHsgZGVsZXRlIG1fcGFyZW50OyB9CiAgICAgICAgIAotICAgICAgICBjb25zdCBE
T01TdHJpbmcmIHVyaSgpIHsgcmV0dXJuIG1fdXJpOyB9Ci0gICAgICAgIGNvbnN0IERPTVN0cmlu
ZyYgcHJlZml4KCkgeyByZXR1cm4gbV9wcmVmaXg7IH0KKyAgICAgICAgY29uc3QgQXRvbWljU3Ry
aW5nJiB1cmkoKSB7IHJldHVybiBtX3VyaTsgfQorICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcm
IHByZWZpeCgpIHsgcmV0dXJuIG1fcHJlZml4OyB9CiAgICAgICAgIAotICAgICAgICBDU1NOYW1l
c3BhY2UqIG5hbWVzcGFjZUZvclByZWZpeChjb25zdCBET01TdHJpbmcmIHByZWZpeCkgeworICAg
ICAgICBDU1NOYW1lc3BhY2UqIG5hbWVzcGFjZUZvclByZWZpeChjb25zdCBBdG9taWNTdHJpbmcm
IHByZWZpeCkgewogICAgICAgICAgICAgaWYgKHByZWZpeCA9PSBtX3ByZWZpeCkKICAgICAgICAg
ICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICAgICAgIGlmIChtX3BhcmVudCkKQEAgLTcyLDgg
KzczLDE0IEBAIG5hbWVzcGFjZSBET00gewogICAgIGNsYXNzIENTU1NlbGVjdG9yCiAgICAgewog
ICAgIHB1YmxpYzoKLQlDU1NTZWxlY3RvcigpCi0JICAgIDogdGFnSGlzdG9yeSgwKSwgc2ltcGxl
U2VsZWN0b3IoMCksIG5leHRTZWxlY3RvcigwKSwgYXR0cigwKSwgdGFnKGFueVFOYW1lKSwKKyAg
ICAgICAgQ1NTU2VsZWN0b3IoKQorICAgICAgICAgICAgOiB0YWdIaXN0b3J5KDApLCBzaW1wbGVT
ZWxlY3RvcigwKSwgbmV4dFNlbGVjdG9yKDApLCBhdHRyKDApLCB0YWcoYW55VGFnTmFtZSgpKSwK
KyAgICAgICAgICAgICAgcmVsYXRpb24oIERlc2NlbmRhbnQgKSwgbWF0Y2goIE5vbmUgKSwKKyAg
ICAgICAgICAgICAgcHNldWRvSWQoIDAgKSwgX3BzZXVkb1R5cGUoUHNldWRvTm90UGFyc2VkKQor
ICAgICAgICB7fQorICAgICAgICAKKwlDU1NTZWxlY3Rvcihjb25zdCBRdWFsaWZpZWROYW1lJiBx
TmFtZSkKKwkgICAgOiB0YWdIaXN0b3J5KDApLCBzaW1wbGVTZWxlY3RvcigwKSwgbmV4dFNlbGVj
dG9yKDApLCBhdHRyKDApLCB0YWcocU5hbWUpLAogICAgICAgICAgICAgICByZWxhdGlvbiggRGVz
Y2VuZGFudCApLCBtYXRjaCggTm9uZSApLAogICAgICAgICAgICAgICBwc2V1ZG9JZCggMCApLCBf
cHNldWRvVHlwZShQc2V1ZG9Ob3RQYXJzZWQpCiAgICAgICAgIHt9CkBAIC0xNjcsMTIgKzE3NCwx
NyBAQCBuYW1lc3BhY2UgRE9NIHsKICAgICAgICAgICAgIHJldHVybiBfcHNldWRvVHlwZTsKICAg
ICAgICAgfQogCisgICAgICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBhbnlUYWdOYW1l
KCk7CisKKyAgICAgICAgYm9vbCBoYXNUYWcoKSBjb25zdCB7IHJldHVybiB0YWcgIT0gYW55VGFn
TmFtZSgpOyB9CisKIAltdXRhYmxlIERPTTo6QXRvbWljU3RyaW5nIHZhbHVlOwogCUNTU1NlbGVj
dG9yKiB0YWdIaXN0b3J5OwogICAgICAgICBDU1NTZWxlY3Rvciogc2ltcGxlU2VsZWN0b3I7IC8v
IFVzZWQgZm9yIDpub3QuCiAgICAgICAgIENTU1NlbGVjdG9yKiBuZXh0U2VsZWN0b3I7IC8vIHVz
ZWQgZm9yICwtY2hhaW5lZCBzZWxlY3RvcnMKIAlRX1VJTlQzMiAgICAgYXR0cjsKLQlRX1VJTlQz
MiAgICAgdGFnOworCQorICAgICAgICBRdWFsaWZpZWROYW1lIHRhZzsKIAogICAgICAgICBSZWxh
dGlvbiByZWxhdGlvbiAgICAgICAgICAgICAgOiAzOwogCW11dGFibGUgTWF0Y2ggIG1hdGNoICAg
ICAgICAgICA6IDQ7CkluZGV4OiBraHRtbC9jc3MvY3NzX3J1bGVpbXBsLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9jc3MvY3NzX3J1bGVpbXBsLmNwcCx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xOApkaWZmIC11IC1wIC1yMS4xOCBraHRtbC9jc3MvY3Nz
X3J1bGVpbXBsLmNwcAotLS0ga2h0bWwvY3NzL2Nzc19ydWxlaW1wbC5jcHAJMTEgTWF5IDIwMDUg
MDU6NDk6MzQgLTAwMDAJMS4xOAorKysga2h0bWwvY3NzL2Nzc19ydWxlaW1wbC5jcHAJMjMgSnVu
IDIwMDUgMDE6MTA6MTMgLTAwMDAKQEAgLTMxLDcgKzMxLDYgQEAKICNpbmNsdWRlICJjc3MvY3Nz
X3J1bGVpbXBsLmgiCiAKICNpbmNsdWRlICJtaXNjL2xvYWRlci5oIgotI2luY2x1ZGUgIm1pc2Mv
aHRtbHRhZ3MuaCIKICNpbmNsdWRlICJtaXNjL2h0bWxhdHRycy5oIgogI2luY2x1ZGUgInhtbC9k
b21fZG9jaW1wbC5oIgogCkluZGV4OiBraHRtbC9jc3MvY3NzX3N0eWxlc2hlZXRpbXBsLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9jc3MvY3NzX3N0eWxl
c2hlZXRpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMgpkaWZmIC11IC1wIC1yMS4x
MiBraHRtbC9jc3MvY3NzX3N0eWxlc2hlZXRpbXBsLmNwcAotLS0ga2h0bWwvY3NzL2Nzc19zdHls
ZXNoZWV0aW1wbC5jcHAJMTEgTWF5IDIwMDUgMDA6NTg6MjcgLTAwMDAJMS4xMgorKysga2h0bWwv
Y3NzL2Nzc19zdHlsZXNoZWV0aW1wbC5jcHAJMjMgSnVuIDIwMDUgMDE6MTA6MTQgLTAwMDAKQEAg
LTM4LDggKzM4LDYgQEAKICNpbmNsdWRlICJodG1sL2h0bWxfZG9jdW1lbnRpbXBsLmgiCiAjaW5j
bHVkZSAibWlzYy9sb2FkZXIuaCIKIAotI2luY2x1ZGUgInhtbF9uYW1lc3BhY2VfdGFibGUuaCIK
LQogI2luY2x1ZGUgPGtkZWJ1Zy5oPgogCiB1c2luZyBuYW1lc3BhY2UgRE9NOwpAQCAtMjEwLDcg
KzIwOCw3IEBAIHZvaWQgQ1NTU3R5bGVTaGVldEltcGw6OmRlbGV0ZVJ1bGUoIHVuc2kKICAgICBi
LT5kZXJlZigpOwogfQogCi12b2lkIENTU1N0eWxlU2hlZXRJbXBsOjphZGROYW1lc3BhY2UoQ1NT
UGFyc2VyKiBwLCBjb25zdCBET006OkRPTVN0cmluZyYgcHJlZml4LCBjb25zdCBET006OkRPTVN0
cmluZyYgdXJpKQordm9pZCBDU1NTdHlsZVNoZWV0SW1wbDo6YWRkTmFtZXNwYWNlKENTU1BhcnNl
ciogcCwgY29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgsIGNvbnN0IEF0b21pY1N0cmluZyYgdXJp
KQogewogICAgIGlmICh1cmkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CkBAIC0yMjAsMjYg
KzIxOCwyMSBAQCB2b2lkIENTU1N0eWxlU2hlZXRJbXBsOjphZGROYW1lc3BhY2UoQ1NTCiAgICAg
aWYgKHByZWZpeC5pc0VtcHR5KCkpCiAgICAgICAgIC8vIFNldCB0aGUgZGVmYXVsdCBuYW1lc3Bh
Y2Ugb24gdGhlIHBhcnNlciBzbyB0aGF0IHNlbGVjdG9ycyB0aGF0IG9taXQgbmFtZXNwYWNlIGlu
Zm8gd2lsbAogICAgICAgICAvLyBiZSBhYmxlIHRvIHBpY2sgaXQgdXAgZWFzaWx5LgotICAgICAg
ICBwLT5kZWZhdWx0TmFtZXNwYWNlID0gWG1sTmFtZXNwYWNlVGFibGU6OmdldE5hbWVzcGFjZUlE
KHVyaSwgZmFsc2UpOworICAgICAgICBwLT5kZWZhdWx0TmFtZXNwYWNlID0gdXJpOwogfQogCi12
b2lkIENTU1N0eWxlU2hlZXRJbXBsOjpkZXRlcm1pbmVOYW1lc3BhY2UoUV9VSU5UMzImIGlkLCBj
b25zdCBET006OkRPTVN0cmluZyYgcHJlZml4KQorY29uc3QgQXRvbWljU3RyaW5nJiBDU1NTdHls
ZVNoZWV0SW1wbDo6ZGV0ZXJtaW5lTmFtZXNwYWNlKGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4
KQogewotICAgIC8vIElmIHRoZSBzdHlsZXNoZWV0IGhhcyBubyBuYW1lc3BhY2VzIHdlIGNhbiBq
dXN0IHJldHVybi4gIFRoZXJlIHdvbid0IGJlIGFueSBuZWVkIHRvIGV2ZXIgY2hlY2sKLSAgICAv
LyBuYW1lc3BhY2UgdmFsdWVzIGluIHNlbGVjdG9ycy4KLSAgICBpZiAoIW1fbmFtZXNwYWNlcykK
LSAgICAgICAgcmV0dXJuOwotICAgIAogICAgIGlmIChwcmVmaXguaXNFbXB0eSgpKQotICAgICAg
ICBpZCA9IG1ha2VJZChub05hbWVzcGFjZSwgbG9jYWxOYW1lUGFydChpZCkpOyAvLyBObyBuYW1l
c3BhY2UuIElmIGFuIGVsZW1lbnQvYXR0cmlidXRlIGhhcyBhIG5hbWVzcGFjZSwgd2Ugd29uJ3Qg
bWF0Y2ggaXQuCi0gICAgZWxzZSBpZiAocHJlZml4ID09ICIqIikKLSAgICAgICAgaWQgPSBtYWtl
SWQoYW55TmFtZXNwYWNlLCBsb2NhbE5hbWVQYXJ0KGlkKSk7IC8vIFdlJ2xsIG1hdGNoIGFueSBu
YW1lc3BhY2UuCi0gICAgZWxzZSB7CisgICAgICAgIHJldHVybiBlbXB0eUF0b207IC8vIE5vIG5h
bWVzcGFjZS4gSWYgYW4gZWxlbWVudC9hdHRyaWJ1dGUgaGFzIGEgbmFtZXNwYWNlLCB3ZSB3b24n
dCBtYXRjaCBpdC4KKyAgICBlbHNlIGlmIChwcmVmaXggPT0gc3RhckF0b20pCisgICAgICAgIHJl
dHVybiBzdGFyQXRvbTsgLy8gV2UnbGwgbWF0Y2ggYW55IG5hbWVzcGFjZS4KKyAgICBlbHNlIGlm
IChtX25hbWVzcGFjZXMpIHsKICAgICAgICAgQ1NTTmFtZXNwYWNlKiBucyA9IG1fbmFtZXNwYWNl
cy0+bmFtZXNwYWNlRm9yUHJlZml4KHByZWZpeCk7CiAgICAgICAgIGlmIChucykKLSAgICAgICAg
ICAgIC8vIExvb2sgdXAgdGhlIGlkIGZvciB0aGlzIG5hbWVzcGFjZSBVUkkuCi0gICAgICAgICAg
ICBpZCA9IG1ha2VJZChYbWxOYW1lc3BhY2VUYWJsZTo6Z2V0TmFtZXNwYWNlSUQobnMtPnVyaSgp
LCBmYWxzZSksIGxvY2FsTmFtZVBhcnQoaWQpKTsKKyAgICAgICAgICAgIHJldHVybiBucy0+dXJp
KCk7CiAgICAgfQorICAgIHJldHVybiBlbXB0eUF0b207IC8vIEFzc3VtZSB3ZSB3b250IG1hdGNo
IGFueSBuYW1lc3BhY2VzLgogfQogCiBib29sIENTU1N0eWxlU2hlZXRJbXBsOjpwYXJzZVN0cmlu
Zyhjb25zdCBET01TdHJpbmcgJnN0cmluZywgYm9vbCBzdHJpY3QpCkluZGV4OiBraHRtbC9jc3Mv
Y3NzX3N0eWxlc2hlZXRpbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNv
cmUva2h0bWwvY3NzL2Nzc19zdHlsZXNoZWV0aW1wbC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjExCmRpZmYgLXUgLXAgLXIxLjExIGtodG1sL2Nzcy9jc3Nfc3R5bGVzaGVldGltcGwuaAotLS0g
a2h0bWwvY3NzL2Nzc19zdHlsZXNoZWV0aW1wbC5oCTExIE1heSAyMDA1IDAwOjU4OjI3IC0wMDAw
CTEuMTEKKysrIGtodG1sL2Nzcy9jc3Nfc3R5bGVzaGVldGltcGwuaAkyMyBKdW4gMjAwNSAwMTox
MDoxNCAtMDAwMApAQCAtMTA0LDggKzEwNCw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGRlbGV0ZVJ1
bGUgKCB1bnNpZ25lZCBsb25nIGluZGV4LCBpbnQgJmV4Y2VwdGlvbmNvZGUgKTsKICAgICB1bnNp
Z25lZCBsb25nIGFkZFJ1bGUgKCBjb25zdCBET01TdHJpbmcgJnNlbGVjdG9yLCBjb25zdCBET01T
dHJpbmcgJnN0eWxlLCBsb25nIGluZGV4LCBpbnQgJmV4Y2VwdGlvbmNvZGUgKTsKIAotICAgIHZv
aWQgYWRkTmFtZXNwYWNlKENTU1BhcnNlciogcCwgY29uc3QgRE9NOjpET01TdHJpbmcmIHByZWZp
eCwgY29uc3QgRE9NOjpET01TdHJpbmcmIHVyaSk7Ci0gICAgdm9pZCBkZXRlcm1pbmVOYW1lc3Bh
Y2UoUV9VSU5UMzImIGlkLCBjb25zdCBET006OkRPTVN0cmluZyYgcHJlZml4KTsKKyAgICB2b2lk
IGFkZE5hbWVzcGFjZShDU1NQYXJzZXIqIHAsIGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4LCBj
b25zdCBBdG9taWNTdHJpbmcmIHVyaSk7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBkZXRlcm1p
bmVOYW1lc3BhY2UoY29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgpOwogICAgIAogICAgIHZpcnR1
YWwgYm9vbCBwYXJzZVN0cmluZyggY29uc3QgRE9NU3RyaW5nICZzdHJpbmcsIGJvb2wgc3RyaWN0
ID0gdHJ1ZSApOwogCkluZGV4OiBraHRtbC9jc3MvY3NzcGFyc2VyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9jc3MvY3NzcGFyc2VyLmNwcCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS45OApkaWZmIC11IC1wIC1yMS45OCBraHRtbC9jc3MvY3NzcGFyc2Vy
LmNwcAotLS0ga2h0bWwvY3NzL2Nzc3BhcnNlci5jcHAJMTEgTWF5IDIwMDUgMDI6MTA6MDkgLTAw
MDAJMS45OAorKysga2h0bWwvY3NzL2Nzc3BhcnNlci5jcHAJMjMgSnVuIDIwMDUgMDE6MTA6MTYg
LTAwMDAKQEAgLTEwMiw3ICsxMDIsNyBAQCBDU1NQYXJzZXI6OkNTU1BhcnNlciggYm9vbCBzdHJp
Y3RQYXJzaW5nCiAgICAgaW1wb3J0YW50ID0gZmFsc2U7CiAgICAgaW5QYXJzZVNob3J0SGFuZCA9
IGZhbHNlOwogICAgIAotICAgIGRlZmF1bHROYW1lc3BhY2UgPSBhbnlOYW1lc3BhY2U7CisgICAg
ZGVmYXVsdE5hbWVzcGFjZSA9IHN0YXJBdG9tOwogICAgIAogICAgIHl5X3N0YXJ0ID0gMTsKIApA
QCAtMTYxLDcgKzE2MSw3IEBAIHZvaWQgQ1NTUGFyc2VyOjpzZXR1cFBhcnNlcihjb25zdCBjaGFy
ICoKIHZvaWQgQ1NTUGFyc2VyOjpwYXJzZVNoZWV0KCBDU1NTdHlsZVNoZWV0SW1wbCAqc2hlZXQs
IGNvbnN0IERPTVN0cmluZyAmc3RyaW5nICkKIHsKICAgICBzdHlsZUVsZW1lbnQgPSBzaGVldDsK
LSAgICBkZWZhdWx0TmFtZXNwYWNlID0gYW55TmFtZXNwYWNlOyAvLyBSZXNldCB0aGUgZGVmYXVs
dCBuYW1lc3BhY2UuCisgICAgZGVmYXVsdE5hbWVzcGFjZSA9IHN0YXJBdG9tOyAvLyBSZXNldCB0
aGUgZGVmYXVsdCBuYW1lc3BhY2UuCiAgICAgCiAgICAgc2V0dXBQYXJzZXIgKCIiLCBzdHJpbmcs
ICIiKTsKIApJbmRleDoga2h0bWwvY3NzL2Nzc3BhcnNlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2Nzcy9jc3NwYXJzZXIuaCx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS4zMApkaWZmIC11IC1wIC1yMS4zMCBraHRtbC9jc3MvY3NzcGFyc2VyLmgKLS0tIGto
dG1sL2Nzcy9jc3NwYXJzZXIuaAkxOSBOb3YgMjAwNCAwMDoxMjoyMCAtMDAwMAkxLjMwCisrKyBr
aHRtbC9jc3MvY3NzcGFyc2VyLmgJMjMgSnVuIDIwMDUgMDE6MTA6MTYgLTAwMDAKQEAgLTE2NCw3
ICsxNjQsNyBAQCBuYW1lc3BhY2UgRE9NIHsKIAlpbnQgbWF4UGFyc2VkUHJvcGVydGllczsKIAli
b29sIGluUGFyc2VTaG9ydEhhbmQ7CiAKLSAgICAgICAgUV9VSU5UMTYgZGVmYXVsdE5hbWVzcGFj
ZTsKKyAgICAgICAgQXRvbWljU3RyaW5nIGRlZmF1bHROYW1lc3BhY2U7CiAgICAgICAgIAogCXN0
YXRpYyBDU1NQYXJzZXIgKmN1cnJlbnRQYXJzZXI7CiAKSW5kZXg6IGtodG1sL2Nzcy9jc3NzdHls
ZXNlbGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRt
bC9jc3MvY3Nzc3R5bGVzZWxlY3Rvci5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTg3CmRp
ZmYgLXUgLXAgLXIxLjE4NyBraHRtbC9jc3MvY3Nzc3R5bGVzZWxlY3Rvci5jcHAKLS0tIGtodG1s
L2Nzcy9jc3NzdHlsZXNlbGVjdG9yLmNwcAkxMiBKdW4gMjAwNSAwNDowNzozMCAtMDAwMAkxLjE4
NworKysga2h0bWwvY3NzL2Nzc3N0eWxlc2VsZWN0b3IuY3BwCTIzIEp1biAyMDA1IDAxOjEwOjIw
IC0wMDAwCkBAIC0zMzksNyArMzM5LDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXRjaFJ1
bGVzKENTU1J1bAogICAgICAgICAgICAgbWF0Y2hSdWxlc0Zvckxpc3QocnVsZXMtPmdldENsYXNz
UnVsZXMoc2luZ2xlQ2xhc3MtPnN0cmluZygpLmltcGxlbWVudGF0aW9uKCkpLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RSdWxlSW5kZXgs
IGxhc3RSdWxlSW5kZXgpOwogICAgIH0KLSAgICBtYXRjaFJ1bGVzRm9yTGlzdChydWxlcy0+Z2V0
VGFnUnVsZXMoKHZvaWQqKShpbnQpbG9jYWxOYW1lUGFydChlbGVtZW50LT5pZCgpKSksCisgICAg
bWF0Y2hSdWxlc0Zvckxpc3QocnVsZXMtPmdldFRhZ1J1bGVzKGVsZW1lbnQtPmxvY2FsTmFtZSgp
LmltcGxlbWVudGF0aW9uKCkpLAogICAgICAgICAgICAgICAgICAgICAgIGZpcnN0UnVsZUluZGV4
LCBsYXN0UnVsZUluZGV4KTsKICAgICBtYXRjaFJ1bGVzRm9yTGlzdChydWxlcy0+Z2V0VW5pdmVy
c2FsUnVsZXMoKSwgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgpOwogICAgIApAQCAtMzYw
LDkgKzM2MCw5IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hSdWxlc0Zvckxpc3QKICAg
ICBpZiAoIXJ1bGVzKSByZXR1cm47CiAgICAgZm9yIChDU1NSdWxlRGF0YSogZCA9IHJ1bGVzLT5m
aXJzdCgpOyBkOyBkID0gZC0+bmV4dCgpKSB7CiAgICAgICAgIENTU1N0eWxlUnVsZUltcGwqIHJ1
bGUgPSBkLT5ydWxlKCk7Ci0gICAgICAgIFFfVUlOVDE2IGNzc1RhZ0lkID0gbG9jYWxOYW1lUGFy
dChlbGVtZW50LT5pZCgpKTsKLSAgICAgICAgUV9VSU5UMTYgdGFnID0gbG9jYWxOYW1lUGFydChk
LT5zZWxlY3RvcigpLT50YWcpOwotICAgICAgICBpZiAoKGNzc1RhZ0lkID09IHRhZyB8fCB0YWcg
PT0gYW55TG9jYWxOYW1lKSAmJiBjaGVja1NlbGVjdG9yKGQtPnNlbGVjdG9yKCksIGVsZW1lbnQp
KSB7CisgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lID0gZWxlbWVudC0+bG9j
YWxOYW1lKCk7CisgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgc2VsZWN0b3JMb2NhbE5hbWUg
PSBkLT5zZWxlY3RvcigpLT50YWcubG9jYWxOYW1lKCk7CisgICAgICAgIGlmICgobG9jYWxOYW1l
ID09IHNlbGVjdG9yTG9jYWxOYW1lIHx8IHNlbGVjdG9yTG9jYWxOYW1lID09IHN0YXJBdG9tKSAm
JiBjaGVja1NlbGVjdG9yKGQtPnNlbGVjdG9yKCksIGVsZW1lbnQpKSB7CiAgICAgICAgICAgICAv
LyBJZiB0aGUgcnVsZSBoYXMgbm8gcHJvcGVydGllcyB0byBhcHBseSwgdGhlbiBpZ25vcmUgaXQu
CiAgICAgICAgICAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbkltcGwqIGRlY2wgPSBydWxl
LT5kZWNsYXJhdGlvbigpOwogICAgICAgICAgICAgaWYgKCFkZWNsIHx8ICFkZWNsLT5sZW5ndGgo
KSkgY29udGludWU7CkBAIC02MDksNyArNjA5LDcgQEAgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpj
YW5TaGFyZVN0eWxlV2l0aAogICAgIGlmIChuLT5pc1N0eWxlZEVsZW1lbnQoKSkgewogICAgICAg
ICBib29sIG1vdXNlSW5zaWRlID0gZWxlbWVudC0+cmVuZGVyZXIoKSA/IGVsZW1lbnQtPnJlbmRl
cmVyKCktPm1vdXNlSW5zaWRlKCkgOiBmYWxzZTsKICAgICAgICAgU3R5bGVkRWxlbWVudEltcGwq
IHMgPSBzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50SW1wbCo+KG4pOwotICAgICAgICBpZiAocy0+
cmVuZGVyZXIoKSAmJiAocy0+aWQoKSA9PSBlbGVtZW50LT5pZCgpKSAmJiAhcy0+aGFzSUQoKSAm
JgorICAgICAgICBpZiAocy0+cmVuZGVyZXIoKSAmJiAocy0+dGFnTmFtZSgpID09IGVsZW1lbnQt
PnRhZ05hbWUoKSkgJiYgIXMtPmhhc0lEKCkgJiYKICAgICAgICAgICAgIChzLT5oYXNDbGFzcygp
ID09IGVsZW1lbnQtPmhhc0NsYXNzKCkpICYmICFzLT5pbmxpbmVTdHlsZURlY2woKSAmJgogICAg
ICAgICAgICAgKHMtPmhhc01hcHBlZEF0dHJpYnV0ZXMoKSA9PSBzdHlsZWRFbGVtZW50LT5oYXNN
YXBwZWRBdHRyaWJ1dGVzKCkpICYmCiAgICAgICAgICAgICAocy0+aXNMaW5rKCkgPT0gZWxlbWVu
dC0+aXNMaW5rKCkpICYmIApAQCAtODg1LDIzICs4ODUsMjMgQEAgdm9pZCBDU1NTdHlsZVNlbGVj
dG9yOjphZGp1c3RSZW5kZXJTdHlsZQogICAgICAgICAvLyBTaXRlcyBhbHNvIGNvbW1vbmx5IHVz
ZSBkaXNwbGF5OmlubGluZS9ibG9jayBvbiA8dGQ+cyBhbmQgPHRhYmxlPnMuICBJbiBxdWlya3Mg
bW9kZSB3ZSBmb3JjZQogICAgICAgICAvLyB0aGVzZSB0YWdzIHRvIHJldGFpbiB0aGVpciBkaXNw
bGF5IHR5cGVzLgogICAgICAgICBpZiAoIXN0cmljdFBhcnNpbmcgJiYgZSkgewotICAgICAgICAg
ICAgaWYgKGUtPmlkKCkgPT0gSURfVEQpIHsKKyAgICAgICAgICAgIGlmIChlLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6dGQoKSkpIHsKICAgICAgICAgICAgICAgICBzdHlsZS0+c2V0RGlzcGxheShU
QUJMRV9DRUxMKTsKICAgICAgICAgICAgICAgICBzdHlsZS0+c2V0RmxvYXRpbmcoRk5PTkUpOwog
ICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoZS0+aWQoKSA9PSBJRF9UQUJMRSkK
KyAgICAgICAgICAgIGVsc2UgaWYgKGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0YWJsZSgpKSkK
ICAgICAgICAgICAgICAgICBzdHlsZS0+c2V0RGlzcGxheShzdHlsZS0+aXNEaXNwbGF5SW5saW5l
VHlwZSgpID8gSU5MSU5FX1RBQkxFIDogVEFCTEUpOwogICAgICAgICB9CiAKICAgICAgICAgLy8g
RnJhbWVzIGFuZCBmcmFtZXNldHMgbmV2ZXIgaG9ub3IgcG9zaXRpb246cmVsYXRpdmUgb3IgcG9z
aXRpb246YWJzb2x1dGUuICBUaGlzIGlzIG5lY2Vzc2FyeSB0bwogICAgICAgICAvLyBmaXggYSBj
cmFzaCB3aGVyZSBhIHNpdGUgdHJpZXMgdG8gcG9zaXRpb24gdGhlc2Ugb2JqZWN0cy4gIFRoZXkg
YWxzbyBuZXZlciBob25vciBkaXNwbGF5LgotICAgICAgICBpZiAoZSAmJiAoZS0+aWQoKSA9PSBJ
RF9GUkFNRSB8fCBlLT5pZCgpID09IElEX0ZSQU1FU0VUKSkgeworICAgICAgICBpZiAoZSAmJiAo
ZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZyYW1lKCkpIHx8IGUtPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjpmcmFtZXNldCgpKSkpIHsKICAgICAgICAgICAgIHN0eWxlLT5zZXRQb3NpdGlvbihTVEFU
SUMpOwogICAgICAgICAgICAgc3R5bGUtPnNldERpc3BsYXkoQkxPQ0spOwogICAgICAgICB9CiAK
ICAgICAgICAgLy8gVGFibGUgaGVhZGVycyB3aXRoIGEgdGV4dC1hbGlnbiBvZiBhdXRvIHdpbGwg
Y2hhbmdlIHRoZSB0ZXh0LWFsaWduIHRvIGNlbnRlci4KLSAgICAgICAgaWYgKGUgJiYgZS0+aWQo
KSA9PSBJRF9USCAmJiBzdHlsZS0+dGV4dEFsaWduKCkgPT0gVEFBVVRPKQorICAgICAgICBpZiAo
ZSAmJiBlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGgoKSkgJiYgc3R5bGUtPnRleHRBbGlnbigp
ID09IFRBQVVUTykKICAgICAgICAgICAgIHN0eWxlLT5zZXRUZXh0QWxpZ24oQ0VOVEVSKTsKICAg
ICAgICAgCiAgICAgICAgIC8vIE11dGF0ZSB0aGUgZGlzcGxheSB0byBCTE9DSyBvciBUQUJMRSBm
b3IgY2VydGFpbiBjYXNlcywgZS5nLiwgaWYgc29tZW9uZSBhdHRlbXB0cyB0bwpAQCAtOTc5LDcg
Kzk3OSw3IEBAIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6Y2hlY2tTZWxlY3RvcihDU1MKICAgICAv
LyBXZSB0cmFjayB3aGV0aGVyIG9yIG5vdCB0aGUgcnVsZSBjb250YWlucyBvbmx5IDpob3ZlciBh
bmQgOmFjdGl2ZSBpbiBhIHNpbXBsZSBzZWxlY3Rvci4gSWYKICAgICAvLyBzbywgd2UgY2FuJ3Qg
YWxsb3cgdGhhdCB0byBhcHBseSB0byBldmVyeSBlbGVtZW50IG9uIHRoZSBwYWdlLiAgV2UgYXNz
dW1lIHRoZSBhdXRob3IgaW50ZW5kZWQKICAgICAvLyB0byBhcHBseSB0aGUgcnVsZXMgb25seSB0
byBsaW5rcy4KLSAgICBib29sIG9ubHlIb3ZlckFjdGl2ZSA9IChzZWwtPnRhZyA9PSBhbnlRTmFt
ZSAmJgorICAgIGJvb2wgb25seUhvdmVyQWN0aXZlID0gKCFzZWwtPmhhc1RhZygpICYmCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKHNlbC0+bWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OlBzZXVk
b0NsYXNzICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsLT5wc2V1ZG9UeXBl
KCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0hvdmVyIHx8CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2VsLT5wc2V1ZG9UeXBlKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0FjdGl2ZSkp
KTsKQEAgLTEwOTYsMTkgKzEwOTYsMTQgQEAgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpjaGVja09u
ZVNlbGVjdG9yKAogICAgIGlmKCFlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAo
c2VsLT50YWcgIT0gYW55UU5hbWUpIHsKLSAgICAgICAgaW50IGVsdElEID0gZS0+aWQoKTsKLSAg
ICAgICAgUV9VSU5UMTYgbG9jYWxOYW1lID0gbG9jYWxOYW1lUGFydChlbHRJRCk7Ci0gICAgICAg
IFFfVUlOVDE2IG5zID0gbmFtZXNwYWNlUGFydChlbHRJRCk7Ci0gICAgICAgIFFfVUlOVDE2IHNl
bExvY2FsTmFtZSA9IGxvY2FsTmFtZVBhcnQoc2VsLT50YWcpOwotICAgICAgICBRX1VJTlQxNiBz
ZWxOUyA9IG5hbWVzcGFjZVBhcnQoc2VsLT50YWcpOwotICAgICAgICAKLSAgICAgICAgaWYgKGxv
Y2FsTmFtZSA8PSBJRF9MQVNUX1RBRyAmJiBlLT5pc0hUTUxFbGVtZW50KCkpCi0gICAgICAgICAg
ICBucyA9IHhodG1sTmFtZXNwYWNlOyAvLyBGSVhNRTogUmVhbGx5IHdhbnQgdG8gbW92ZSBhd2F5
IGZyb20gdGhpcyBjb21wbGljYXRlZCBoYWNrZXJ5IGFuZCBqdXN0Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBzd2l0Y2ggdGFncyBhbmQgYXR0ciBuYW1lcyBvdmVyIHRvIEF0
b21pY1N0cmluZ3MuCi0gICAgICAgIAotICAgICAgICBpZiAoKHNlbExvY2FsTmFtZSAhPSBhbnlM
b2NhbE5hbWUgJiYgbG9jYWxOYW1lICE9IHNlbExvY2FsTmFtZSkgfHwKLSAgICAgICAgICAgIChz
ZWxOUyAhPSBhbnlOYW1lc3BhY2UgJiYgbnMgIT0gc2VsTlMpKQorICAgIGlmIChzZWwtPmhhc1Rh
ZygpKSB7CisgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lID0gZS0+bG9jYWxO
YW1lKCk7CisgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbnMgPSBlLT5uYW1lc3BhY2VVUkko
KTsKKyAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBzZWxMb2NhbE5hbWUgPSBzZWwtPnRhZy5s
b2NhbE5hbWUoKTsKKyAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBzZWxOUyA9IHNlbC0+dGFn
Lm5hbWVzcGFjZVVSSSgpOworICAgIAorICAgICAgICBpZiAoKHNlbExvY2FsTmFtZSAhPSBzdGFy
QXRvbSAmJiBsb2NhbE5hbWUgIT0gc2VsTG9jYWxOYW1lKSB8fAorICAgICAgICAgICAgKHNlbE5T
ICE9IHN0YXJBdG9tICYmIG5zICE9IHNlbE5TKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CiAKQEAgLTEyOTUsNyArMTI5MCw3IEBAIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6Y2hl
Y2tPbmVTZWxlY3RvcigKICAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0hvdmVy
OiB7CiAgICAgICAgICAgICAgICAgLy8gSWYgd2UncmUgaW4gcXVpcmtzIG1vZGUsIHRoZW4gaG92
ZXIgc2hvdWxkIG5ldmVyIG1hdGNoIGFuY2hvcnMgd2l0aCBubwogICAgICAgICAgICAgICAgIC8v
IGhyZWYuICBUaGlzIGlzIGltcG9ydGFudCBmb3Igc2l0ZXMgbGlrZSB3c2ouY29tLgotICAgICAg
ICAgICAgICAgIGlmIChzdHJpY3RQYXJzaW5nIHx8IGUtPmlkKCkgIT0gSURfQSB8fCBlLT5pc0xp
bmsoKSkgeworICAgICAgICAgICAgICAgIGlmIChzdHJpY3RQYXJzaW5nIHx8ICFlLT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6YSgpKSB8fCBlLT5pc0xpbmsoKSkgewogICAgICAgICAgICAgICAgICAg
ICBpZiAoZWxlbWVudCA9PSBlICYmIHN0eWxlKQogICAgICAgICAgICAgICAgICAgICAgICAgc3R5
bGUtPnNldEFmZmVjdGVkQnlIb3ZlclJ1bGVzKHRydWUpOwogICAgICAgICAgICAgICAgICAgICBp
ZiAoZS0+cmVuZGVyZXIoKSkgewpAQCAtMTMyNiw3ICsxMzIxLDcgQEAgYm9vbCBDU1NTdHlsZVNl
bGVjdG9yOjpjaGVja09uZVNlbGVjdG9yKAogICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6
UHNldWRvQWN0aXZlOgogICAgICAgICAgICAgICAgIC8vIElmIHdlJ3JlIGluIHF1aXJrcyBtb2Rl
LCB0aGVuIDphY3RpdmUgc2hvdWxkIG5ldmVyIG1hdGNoIGFuY2hvcnMgd2l0aCBubwogICAgICAg
ICAgICAgICAgIC8vIGhyZWYuIAotICAgICAgICAgICAgICAgIGlmIChzdHJpY3RQYXJzaW5nIHx8
IGUtPmlkKCkgIT0gSURfQSB8fCBlLT5pc0xpbmsoKSkgeworICAgICAgICAgICAgICAgIGlmIChz
dHJpY3RQYXJzaW5nIHx8ICFlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YSgpKSB8fCBlLT5pc0xp
bmsoKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudCA9PSBlICYmIHN0eWxlKQog
ICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGUtPnNldEFmZmVjdGVkQnlBY3RpdmVSdWxlcyh0
cnVlKTsKICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZS0+cmVuZGVyZXIoKSkKQEAgLTE0
MjUsOSArMTQyMCw5IEBAIHZvaWQgQ1NTUnVsZVNldDo6YWRkUnVsZShDU1NTdHlsZVJ1bGVJbXAK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAgCi0gICAgUV9VSU5UMTYgbG9jYWxOYW1lID0g
bG9jYWxOYW1lUGFydChzZWwtPnRhZyk7Ci0gICAgaWYgKGxvY2FsTmFtZSAhPSBhbnlMb2NhbE5h
bWUpIHsKLSAgICAgICAgYWRkVG9SdWxlU2V0KCh2b2lkKikoaW50KWxvY2FsTmFtZSwgbV90YWdS
dWxlcywgcnVsZSwgc2VsKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSA9IHNl
bC0+dGFnLmxvY2FsTmFtZSgpOworICAgIGlmIChsb2NhbE5hbWUgIT0gc3RhckF0b20pIHsKKyAg
ICAgICAgYWRkVG9SdWxlU2V0KGxvY2FsTmFtZS5pbXBsZW1lbnRhdGlvbigpLCBtX3RhZ1J1bGVz
LCBydWxlLCBzZWwpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIApJbmRleDoga2h0bWwv
Y3NzL3BhcnNlci55Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1s
L2Nzcy9wYXJzZXIueSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zOApkaWZmIC11IC1wIC1yMS4z
OCBraHRtbC9jc3MvcGFyc2VyLnkKLS0tIGtodG1sL2Nzcy9wYXJzZXIueQkxMiBKdW4gMjAwNSAw
NDowNzozMCAtMDAwMAkxLjM4CisrKyBraHRtbC9jc3MvcGFyc2VyLnkJMjMgSnVuIDIwMDUgMDE6
MTA6MjEgLTAwMDAKQEAgLTM0LDkgKzM0LDcgQEAKICNpbmNsdWRlIDxjc3MvY3NzX3ZhbHVlaW1w
bC5oPgogI2luY2x1ZGUgPG1pc2MvaHRtbGhhc2hlcy5oPgogI2luY2x1ZGUgImNzc3BhcnNlci5o
IgotCi0jaW5jbHVkZSAieG1sX25hbWVzcGFjZV90YWJsZS5oIgotICAgIAorICAgCiAjaW5jbHVk
ZSA8YXNzZXJ0Lmg+CiAjaW5jbHVkZSA8a2RlYnVnLmg+CiAvLyAjZGVmaW5lIENTU19ERUJVRwpA
QCAtMTM0LDcgKzEzMiw2IEBAIHN0YXRpYyBpbmxpbmUgaW50IGdldFZhbHVlSUQoY29uc3QgY2hh
ciAKICAgICBmbG9hdCB2YWw7CiAgICAgaW50IHByb3BfaWQ7CiAgICAgaW50IGF0dHJpYnV0ZTsK
LSAgICBpbnQgZWxlbWVudDsKICAgICBDU1NTZWxlY3Rvcjo6UmVsYXRpb24gcmVsYXRpb247CiAg
ICAgYm9vbCBiOwogICAgIGludCBpOwpAQCAtMTgwLDYgKzE3Nyw4IEBAIHN0YXRpYyBpbnQgY3Nz
eXlsZXgoIFlZU1RZUEUgKnl5bHZhbCApIHsKICV0b2tlbiAnLicKICV0b2tlbiAnWycKIAorJXRv
a2VuIDxzdHJpbmc+ICcqJworCiAldG9rZW4gSU1QT1JUX1NZTQogJXRva2VuIFBBR0VfU1lNCiAl
dG9rZW4gTUVESUFfU1lNCkBAIC0yNjksNyArMjY4LDcgQEAgc3RhdGljIGludCBjc3N5eWxleCgg
WVlTVFlQRSAqeXlsdmFsICkgewogJXR5cGUgPHZhbHVlPiB1bmFyeV90ZXJtCiAldHlwZSA8dmFs
dWU+IGZ1bmN0aW9uCiAKLSV0eXBlIDxlbGVtZW50PiBlbGVtZW50X25hbWUKKyV0eXBlIDxzdHJp
bmc+IGVsZW1lbnRfbmFtZQogCiAldHlwZSA8YXR0cmlidXRlPiBhdHRyaWJfaWQKIApAQCAtNDA5
LDcgKzQwOCw3IEBAIE5BTUVTUEFDRV9TWU0gbWF5YmVfc3BhY2UgbWF5YmVfbnNfcHJlZmkKICNl
bmRpZgogICAgIENTU1BhcnNlciAqcCA9IHN0YXRpY19jYXN0PENTU1BhcnNlciAqPihwYXJzZXIp
OwogICAgIGlmIChwLT5zdHlsZUVsZW1lbnQgJiYgcC0+c3R5bGVFbGVtZW50LT5pc0NTU1N0eWxl
U2hlZXQoKSkKLSAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldEltcGwqPihwLT5zdHls
ZUVsZW1lbnQpLT5hZGROYW1lc3BhY2UocCwgZG9tU3RyaW5nKCQzKSwgZG9tU3RyaW5nKCQ0KSk7
CisgICAgICAgIHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXRJbXBsKj4ocC0+c3R5bGVFbGVtZW50
KS0+YWRkTmFtZXNwYWNlKHAsIGF0b21pY1N0cmluZygkMyksIGF0b21pY1N0cmluZygkNCkpOwog
fQogfCBOQU1FU1BBQ0VfU1lNIGVycm9yIGludmFsaWRfYmxvY2sKIHwgTkFNRVNQQUNFX1NZTSBl
cnJvciAnOycKQEAgLTYyOCw2NSArNjI3LDcxIEBAIG5hbWVzcGFjZV9zZWxlY3RvcjoKIAogc2lt
cGxlX3NlbGVjdG9yOgogICAgIGVsZW1lbnRfbmFtZSBtYXliZV9zcGFjZSB7Ci0JJCQgPSBuZXcg
Q1NTU2VsZWN0b3IoKTsKLQkkJC0+dGFnID0gJDE7CisgICAgICAgIENTU1BhcnNlciAqcCA9IHN0
YXRpY19jYXN0PENTU1BhcnNlciAqPihwYXJzZXIpOworCSQkID0gbmV3IENTU1NlbGVjdG9yKFF1
YWxpZmllZE5hbWUobnVsbEF0b20sIGF0b21pY1N0cmluZygkMSksIHAtPmRlZmF1bHROYW1lc3Bh
Y2UpKTsKICAgICB9CiAgICAgfCBlbGVtZW50X25hbWUgc3BlY2lmaWVyX2xpc3QgbWF5YmVfc3Bh
Y2UgewotCSQkID0gJDI7Ci0JaWYgKCAkJCApCi0gICAgICAgICAgICAkJC0+dGFnID0gJDE7Cisg
ICAgICAgICQkID0gJDI7CisJaWYgKCQkKSB7CisgICAgICAgICAgICBDU1NQYXJzZXIgKnAgPSBz
dGF0aWNfY2FzdDxDU1NQYXJzZXIgKj4ocGFyc2VyKTsKKyAgICAgICAgICAgICQkLT50YWcgPSBR
dWFsaWZpZWROYW1lKG51bGxBdG9tLCBhdG9taWNTdHJpbmcoJDEpLCBwLT5kZWZhdWx0TmFtZXNw
YWNlKTsKKyAgICAgICAgfQogICAgIH0KICAgICB8IHNwZWNpZmllcl9saXN0IG1heWJlX3NwYWNl
IHsKIAkkJCA9ICQxOwotICAgICAgICBpZiAoJCQpCi0gICAgICAgICAgICAkJC0+dGFnID0gbWFr
ZUlkKHN0YXRpY19jYXN0PENTU1BhcnNlcio+KHBhcnNlciktPmRlZmF1bHROYW1lc3BhY2UsIGFu
eUxvY2FsTmFtZSk7OworICAgICAgICBDU1NQYXJzZXIgKnAgPSBzdGF0aWNfY2FzdDxDU1NQYXJz
ZXIgKj4ocGFyc2VyKTsKKyAgICAgICAgaWYgKCQkICYmIHAtPmRlZmF1bHROYW1lc3BhY2UgIT0g
c3RhckF0b20pCisgICAgICAgICAgICAkJC0+dGFnID0gUXVhbGlmaWVkTmFtZShudWxsQXRvbSwg
c3RhckF0b20sIHAtPmRlZmF1bHROYW1lc3BhY2UpOwogICAgIH0KICAgICB8IG5hbWVzcGFjZV9z
ZWxlY3RvciAnfCcgZWxlbWVudF9uYW1lIG1heWJlX3NwYWNlIHsKLSAgICAgICAgJCQgPSBuZXcg
Q1NTU2VsZWN0b3IoKTsKLSAgICAgICAgJCQtPnRhZyA9ICQzOworICAgICAgICBBdG9taWNTdHJp
bmcgbmFtZXNwYWNlUHJlZml4ID0gYXRvbWljU3RyaW5nKCQxKTsKICAgICAgICAgQ1NTUGFyc2Vy
ICpwID0gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyICo+KHBhcnNlcik7CiAgICAgICAgIGlmIChwLT5z
dHlsZUVsZW1lbnQgJiYgcC0+c3R5bGVFbGVtZW50LT5pc0NTU1N0eWxlU2hlZXQoKSkKLSAgICAg
ICAgICAgIHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXRJbXBsKj4ocC0+c3R5bGVFbGVtZW50KS0+
ZGV0ZXJtaW5lTmFtZXNwYWNlKCQkLT50YWcsIGRvbVN0cmluZygkMSkpOworICAgICAgICAgICAg
JCQgPSBuZXcgQ1NTU2VsZWN0b3IoUXVhbGlmaWVkTmFtZShuYW1lc3BhY2VQcmVmaXgsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0b21pY1N0cmluZygk
MyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRp
Y19jYXN0PENTU1N0eWxlU2hlZXRJbXBsKj4ocC0+c3R5bGVFbGVtZW50KS0+ZGV0ZXJtaW5lTmFt
ZXNwYWNlKG5hbWVzcGFjZVByZWZpeCkpKTsKKyAgICAgICAgZWxzZSAvLyBGSVhNRTogU2hvdWxk
bid0IHRoaXMgY2FzZSBiZSBhbiBlcnJvcj8KKyAgICAgICAgICAgICQkID0gbmV3IENTU1NlbGVj
dG9yKFF1YWxpZmllZE5hbWUobnVsbEF0b20sIGF0b21pY1N0cmluZygkMyksIHAtPmRlZmF1bHRO
YW1lc3BhY2UpKTsKICAgICB9CiAgICAgfCBuYW1lc3BhY2Vfc2VsZWN0b3IgJ3wnIGVsZW1lbnRf
bmFtZSBzcGVjaWZpZXJfbGlzdCBtYXliZV9zcGFjZSB7CiAgICAgICAgICQkID0gJDQ7CiAgICAg
ICAgIGlmICgkJCkgewotICAgICAgICAgICAgJCQtPnRhZyA9ICQzOworICAgICAgICAgICAgQXRv
bWljU3RyaW5nIG5hbWVzcGFjZVByZWZpeCA9IGF0b21pY1N0cmluZygkMSk7CiAgICAgICAgICAg
ICBDU1NQYXJzZXIgKnAgPSBzdGF0aWNfY2FzdDxDU1NQYXJzZXIgKj4ocGFyc2VyKTsKICAgICAg
ICAgICAgIGlmIChwLT5zdHlsZUVsZW1lbnQgJiYgcC0+c3R5bGVFbGVtZW50LT5pc0NTU1N0eWxl
U2hlZXQoKSkKLSAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0SW1wbCo+
KHAtPnN0eWxlRWxlbWVudCktPmRldGVybWluZU5hbWVzcGFjZSgkJC0+dGFnLCBkb21TdHJpbmco
JDEpKTsKKyAgICAgICAgICAgICAgICAkJC0+dGFnID0gUXVhbGlmaWVkTmFtZShuYW1lc3BhY2VQ
cmVmaXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXRvbWljU3Ry
aW5nKCQzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNf
Y2FzdDxDU1NTdHlsZVNoZWV0SW1wbCo+KHAtPnN0eWxlRWxlbWVudCktPmRldGVybWluZU5hbWVz
cGFjZShuYW1lc3BhY2VQcmVmaXgpKTsKKyAgICAgICAgICAgIGVsc2UgLy8gRklYTUU6IFNob3Vs
ZG4ndCB0aGlzIGNhc2UgYmUgYW4gZXJyb3I/CisgICAgICAgICAgICAgICAgJCQtPnRhZyA9IFF1
YWxpZmllZE5hbWUobnVsbEF0b20sIGF0b21pY1N0cmluZygkMyksIHAtPmRlZmF1bHROYW1lc3Bh
Y2UpOwogICAgICAgICB9CiAgICAgfQogICAgIHwgbmFtZXNwYWNlX3NlbGVjdG9yICd8JyBzcGVj
aWZpZXJfbGlzdCBtYXliZV9zcGFjZSB7CiAgICAgICAgICQkID0gJDM7CiAgICAgICAgIGlmICgk
JCkgewotICAgICAgICAgICAgJCQtPnRhZyA9IG1ha2VJZChhbnlOYW1lc3BhY2UsIGFueUxvY2Fs
TmFtZSk7CisgICAgICAgICAgICBBdG9taWNTdHJpbmcgbmFtZXNwYWNlUHJlZml4ID0gYXRvbWlj
U3RyaW5nKCQxKTsKICAgICAgICAgICAgIENTU1BhcnNlciAqcCA9IHN0YXRpY19jYXN0PENTU1Bh
cnNlciAqPihwYXJzZXIpOwogICAgICAgICAgICAgaWYgKHAtPnN0eWxlRWxlbWVudCAmJiBwLT5z
dHlsZUVsZW1lbnQtPmlzQ1NTU3R5bGVTaGVldCgpKQotICAgICAgICAgICAgICAgIHN0YXRpY19j
YXN0PENTU1N0eWxlU2hlZXRJbXBsKj4ocC0+c3R5bGVFbGVtZW50KS0+ZGV0ZXJtaW5lTmFtZXNw
YWNlKCQkLT50YWcsIGRvbVN0cmluZygkMSkpOworICAgICAgICAgICAgICAgICQkLT50YWcgPSBR
dWFsaWZpZWROYW1lKG5hbWVzcGFjZVByZWZpeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGFyQXRvbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0SW1wbCo+KHAtPnN0eWxlRWxlbWVudCkt
PmRldGVybWluZU5hbWVzcGFjZShuYW1lc3BhY2VQcmVmaXgpKTsKICAgICAgICAgfQogICAgIH0K
ICAgOwogCiBlbGVtZW50X25hbWU6CiAgICAgSURFTlQgewotCUNTU1BhcnNlciAqcCA9IHN0YXRp
Y19jYXN0PENTU1BhcnNlciAqPihwYXJzZXIpOworICAgICAgICBQYXJzZVN0cmluZyYgc3RyID0g
JDE7CisgICAgICAgIENTU1BhcnNlciAqcCA9IHN0YXRpY19jYXN0PENTU1BhcnNlciAqPihwYXJz
ZXIpOwogCURPTTo6RG9jdW1lbnRJbXBsICpkb2MgPSBwLT5kb2N1bWVudCgpOwotCVFTdHJpbmcg
dGFnID0gcVN0cmluZygkMSk7Ci0JaWYgKCBkb2MgKSB7Ci0JICAgIGlmIChkb2MtPmlzSFRNTERv
Y3VtZW50KCkpCi0JCXRhZyA9IHRhZy5sb3dlcigpOwotCSAgICBjb25zdCBET01TdHJpbmcgZHRh
Zyh0YWcpOwotICAgICAgICAgICAgJCQgPSBtYWtlSWQocC0+ZGVmYXVsdE5hbWVzcGFjZSwgZG9j
LT50YWdJZCgwLCBkdGFnLmltcGxlbWVudGF0aW9uKCksIGZhbHNlKSk7Ci0JfSBlbHNlIHsKLQkg
ICAgJCQgPSBtYWtlSWQocC0+ZGVmYXVsdE5hbWVzcGFjZSwga2h0bWw6OmdldFRhZ0lEKHRhZy5s
b3dlcigpLmFzY2lpKCksIHRhZy5sZW5ndGgoKSkpOwotCSAgICAvLyB0aGlzIGNhc2Ugc2hvdWxk
IG5ldmVyIGhhcHBlbiAtIG9ubHkgd2hlbiBsb2FkaW5nCi0JICAgIC8vIHRoZSBkZWZhdWx0IHN0
eWxlc2hlZXQgLSB3aGljaCBtdXN0IG5vdCBjb250YWluIHVua25vd24gdGFncwotLy8gCSAgICBh
c3NlcnQoJCQgIT0gMCk7Ci0JfQorCWlmIChkb2MgJiYgZG9jLT5pc0hUTUxEb2N1bWVudCgpKQor
ICAgICAgICAgICAgc3RyLmxvd2VyKCk7CisgICAgICAgICQkID0gc3RyOwogICAgIH0KICAgICB8
ICcqJyB7Ci0JJCQgPSBtYWtlSWQoc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyKj4ocGFyc2VyKS0+ZGVm
YXVsdE5hbWVzcGFjZSwgYW55TG9jYWxOYW1lKTsKKwlzdGF0aWMgdW5zaWduZWQgc2hvcnQgc3Rh
ciA9ICcqJzsKKyAgICAgICAgJCQuc3RyaW5nID0gJnN0YXI7CisgICAgICAgICQkLmxlbmd0aCA9
IDE7CiAgICAgfQogICA7CiAKQEAgLTc3MywxOCArNzc4LDIyIEBAIGF0dHJpYjoKICAgICAgICAg
JCQgPSBuZXcgQ1NTU2VsZWN0b3IoKTsKICAgICAgICAgJCQtPmF0dHIgPSAkNTsKICAgICAgICAg
JCQtPm1hdGNoID0gQ1NTU2VsZWN0b3I6OlNldDsKLSAgICAgICAgQ1NTUGFyc2VyICpwID0gc3Rh
dGljX2Nhc3Q8Q1NTUGFyc2VyICo+KHBhcnNlcik7Ci0gICAgICAgIGlmIChwLT5zdHlsZUVsZW1l
bnQgJiYgcC0+c3R5bGVFbGVtZW50LT5pc0NTU1N0eWxlU2hlZXQoKSkKLSAgICAgICAgICAgIHN0
YXRpY19jYXN0PENTU1N0eWxlU2hlZXRJbXBsKj4ocC0+c3R5bGVFbGVtZW50KS0+ZGV0ZXJtaW5l
TmFtZXNwYWNlKCQkLT5hdHRyLCBkb21TdHJpbmcoJDMpKTsKKyAgICAgICAgLy8gRklYTUU6IEZv
ciBub3cgd2UncmUgYnJlYWtpbmcgbmFtZXNwYWNlIHN1cHBvcnQgb24gYXR0cmlidXRlcy4gIFdo
ZW4gd2Ugc3dpdGNoIHRvIGF0b21pY3N0cmluZywgdGhlbiB3ZSBjYW4gbWFrZQorICAgICAgICAv
LyBpdCB3b3JrIGFnYWluLgorICAgICAgICAvL0NTU1BhcnNlciAqcCA9IHN0YXRpY19jYXN0PENT
U1BhcnNlciAqPihwYXJzZXIpOworICAgICAgICAvL2lmIChwLT5zdHlsZUVsZW1lbnQgJiYgcC0+
c3R5bGVFbGVtZW50LT5pc0NTU1N0eWxlU2hlZXQoKSkKKyAgICAgICAgLy8gICAgc3RhdGljX2Nh
c3Q8Q1NTU3R5bGVTaGVldEltcGwqPihwLT5zdHlsZUVsZW1lbnQpLT5kZXRlcm1pbmVOYW1lc3Bh
Y2UoJCQtPmF0dHIsIGRvbVN0cmluZygkMykpOwogICAgIH0KICAgICB8ICdbJyBtYXliZV9zcGFj
ZSBuYW1lc3BhY2Vfc2VsZWN0b3IgJ3wnIGF0dHJpYl9pZCBtYXRjaCBtYXliZV9zcGFjZSBpZGVu
dF9vcl9zdHJpbmcgbWF5YmVfc3BhY2UgJ10nIHsKICAgICAgICAgJCQgPSBuZXcgQ1NTU2VsZWN0
b3IoKTsKICAgICAgICAgJCQtPmF0dHIgPSAkNTsKICAgICAgICAgJCQtPm1hdGNoID0gKENTU1Nl
bGVjdG9yOjpNYXRjaCkkNjsKICAgICAgICAgJCQtPnZhbHVlID0gYXRvbWljU3RyaW5nKCQ4KTsK
LSAgICAgICAgQ1NTUGFyc2VyICpwID0gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyICo+KHBhcnNlcik7
Ci0gICAgICAgIGlmIChwLT5zdHlsZUVsZW1lbnQgJiYgcC0+c3R5bGVFbGVtZW50LT5pc0NTU1N0
eWxlU2hlZXQoKSkKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXRJbXBsKj4o
cC0+c3R5bGVFbGVtZW50KS0+ZGV0ZXJtaW5lTmFtZXNwYWNlKCQkLT5hdHRyLCBkb21TdHJpbmco
JDMpKTsKKyAgICAgICAgLy8gRklYTUU6IEZvciBub3cgd2UncmUgYnJlYWtpbmcgbmFtZXNwYWNl
IHN1cHBvcnQgb24gYXR0cmlidXRlcy4gIFdoZW4gd2Ugc3dpdGNoIHRvIGF0b21pY3N0cmluZywg
dGhlbiB3ZSBjYW4gbWFrZQorICAgICAgICAvLyBpdCB3b3JrIGFnYWluLgorICAgICAgICAvL0NT
U1BhcnNlciAqcCA9IHN0YXRpY19jYXN0PENTU1BhcnNlciAqPihwYXJzZXIpOworICAgICAgICAv
L2lmIChwLT5zdHlsZUVsZW1lbnQgJiYgcC0+c3R5bGVFbGVtZW50LT5pc0NTU1N0eWxlU2hlZXQo
KSkKKyAgICAgICAgLy8gICAgc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldEltcGwqPihwLT5zdHls
ZUVsZW1lbnQpLT5kZXRlcm1pbmVOYW1lc3BhY2UoJCQtPmF0dHIsIGRvbVN0cmluZygkMykpOwog
ICAgIH0KICAgOwogCkluZGV4OiBraHRtbC9kb20vY3NzX3N0eWxlc2hlZXQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2RvbS9jc3Nfc3R5bGVzaGVldC5j
cHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuOApkaWZmIC11IC1wIC1yMS44IGtodG1sL2RvbS9j
c3Nfc3R5bGVzaGVldC5jcHAKLS0tIGtodG1sL2RvbS9jc3Nfc3R5bGVzaGVldC5jcHAJMjAgTWF5
IDIwMDQgMTU6MDk6MzIgLTAwMDAJMS44CisrKyBraHRtbC9kb20vY3NzX3N0eWxlc2hlZXQuY3Bw
CTIzIEp1biAyMDA1IDAxOjEwOjIxIC0wMDAwCkBAIC0zODUsNyArMzg1LDcgQEAgTGlua1N0eWxl
ICYgTGlua1N0eWxlOjpvcGVyYXRvciA9IChjb25zdAogCiAgICAgLy8gIyMjIGNoZWNrIGxpbmsg
aXMgcmVhbGx5IGxpbmtpbmcgYSBzdHlsZSBzaGVldAogICAgIGlmKCBuICYmIG4tPmlzRWxlbWVu
dE5vZGUoKSAmJgotCShuLT5pZCgpID09IElEX1NUWUxFIHx8IG4tPmlkKCkgPT0gSURfTElOSykg
KSB7CisJKG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzdHlsZSgpKSB8fCBuLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6bGluaygpKSkpIHsKICAgICBub2RlID0gbjsKICAgICBpZihub2RlKSBub2Rl
LT5yZWYoKTsKICAgICB9CkBAIC0zOTksMTIgKzM5OSwxNCBAQCBMaW5rU3R5bGU6On5MaW5rU3R5
bGUoKQogCiBTdHlsZVNoZWV0IExpbmtTdHlsZTo6c2hlZXQoKQogewotICAgIGludCBpZCA9IG5v
ZGUgPyBub2RlLT5pZCgpIDogMDsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBTdHls
ZVNoZWV0KCk7CisKICAgICAvLyAjIyMgYWRkIFBJCiAgICAgcmV0dXJuIAotCSggaWQgPT0gSURf
U1RZTEUpID8KKwkobm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnN0eWxlKCkpKSA/CiAJc3Rh
dGljX2Nhc3Q8SFRNTFN0eWxlRWxlbWVudEltcGwgKj4obm9kZSktPnNoZWV0KCkKLQk6ICggKGlk
ID09IElEX0xJTkspID8KKwk6ICggbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmxpbmsoKSkg
PwogCSAgICBzdGF0aWNfY2FzdDxIVE1MTGlua0VsZW1lbnRJbXBsICo+KG5vZGUpLT5zaGVldCgp
CiAJICAgIDogU3R5bGVTaGVldCgpICk7CiB9CkluZGV4OiBraHRtbC9kb20vZG9tX2VsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2RvbS9kb21f
ZWxlbWVudC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTIKZGlmZiAtdSAtcCAtcjEuMTIg
a2h0bWwvZG9tL2RvbV9lbGVtZW50LmNwcAotLS0ga2h0bWwvZG9tL2RvbV9lbGVtZW50LmNwcAkx
MiBNYXkgMjAwNSAxNzoxMToyMSAtMDAwMAkxLjEyCisrKyBraHRtbC9kb20vZG9tX2VsZW1lbnQu
Y3BwCTIzIEp1biAyMDA1IDAxOjEwOjIxIC0wMDAwCkBAIC0xNDEsNyArMTQxLDcgQEAgRWxlbWVu
dDo6fkVsZW1lbnQoKQogRE9NU3RyaW5nIEVsZW1lbnQ6OnRhZ05hbWUoKSBjb25zdAogewogICAg
IGlmICghaW1wbCkgdGhyb3cgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbjo6Tk9UX0ZPVU5EX0VS
Uik7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsKj4oaW1wbCktPnRhZ05hbWUo
KTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RWxlbWVudEltcGwqPihpbXBsKS0+bm9kZU5hbWUo
KTsKIH0KIAogRE9NU3RyaW5nIEVsZW1lbnQ6OmdldEF0dHJpYnV0ZSggY29uc3QgRE9NU3RyaW5n
ICZuYW1lICkKSW5kZXg6IGtodG1sL2RvbS9kb21fbm9kZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZG9tL2RvbV9ub2RlLmNwcCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS4xMgpkaWZmIC11IC1wIC1yMS4xMiBraHRtbC9kb20vZG9tX25vZGUuY3BwCi0t
LSBraHRtbC9kb20vZG9tX25vZGUuY3BwCTExIE1heSAyMDA1IDAwOjU4OjI4IC0wMDAwCTEuMTIK
KysrIGtodG1sL2RvbS9kb21fbm9kZS5jcHAJMjMgSnVuIDIwMDUgMDE6MTA6MjEgLTAwMDAKQEAg
LTMyNCw3ICszMjQsNyBAQCBib29sIE5vZGU6OmlzU3VwcG9ydGVkKCBjb25zdCBET01TdHJpbmcg
CiBET01TdHJpbmcgTm9kZTo6bmFtZXNwYWNlVVJJKCAgKSBjb25zdAogewogICAgIGlmICghaW1w
bCkgcmV0dXJuIERPTVN0cmluZygpOwotICAgIHJldHVybiBpbXBsLT5nZXREb2N1bWVudCgpLT5u
YW1lc3BhY2VVUkkoaW1wbC0+aWQoKSk7CisgICAgcmV0dXJuIGltcGwtPm5hbWVzcGFjZVVSSSgp
OwogfQogCiBET01TdHJpbmcgTm9kZTo6cHJlZml4KCAgKSBjb25zdApAQCAtMzM3LDcgKzMzNyw3
IEBAIHZvaWQgTm9kZTo6c2V0UHJlZml4KGNvbnN0IERPTVN0cmluZyAmcHIKIHsKICAgICBpZiAo
IWltcGwpIHRocm93IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb246Ok5PVF9GT1VORF9FUlIpOwog
ICAgIGludCBleGNlcHRpb25jb2RlID0gMDsKLSAgICBpbXBsLT5zZXRQcmVmaXgocHJlZml4LGV4
Y2VwdGlvbmNvZGUpOworICAgIGltcGwtPnNldFByZWZpeChwcmVmaXguaW1wbGVtZW50YXRpb24o
KSxleGNlcHRpb25jb2RlKTsKICAgICBpZiAoZXhjZXB0aW9uY29kZSkKICAgICAgICAgdGhyb3cg
RE9NRXhjZXB0aW9uKGV4Y2VwdGlvbmNvZGUpOwogfQpAQCAtMzc2LDEzICszNzYsNiBAQCBib29s
IE5vZGU6OmRpc3BhdGNoRXZlbnQoY29uc3QgRXZlbnQgJmV2CiAgICAgcmV0dXJuIHI7CiB9CiAK
LQotdW5zaWduZWQgaW50IE5vZGU6OmVsZW1lbnRJZCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFpbXBs
KSByZXR1cm4gMDsKLSAgICByZXR1cm4gaW1wbC0+aWQoKTsKLX0KLQogdW5zaWduZWQgbG9uZyBO
b2RlOjppbmRleCgpIGNvbnN0CiB7CiAgICAgaWYgKCFpbXBsKSByZXR1cm4gMDsKSW5kZXg6IGto
dG1sL2RvbS9kb21fbm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3Jl
L2todG1sL2RvbS9kb21fbm9kZS5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEyCmRpZmYgLXUg
LXAgLXIxLjEyIGtodG1sL2RvbS9kb21fbm9kZS5oCi0tLSBraHRtbC9kb20vZG9tX25vZGUuaAkx
OCBNYXkgMjAwNSAyMToxMDoyNCAtMDAwMAkxLjEyCisrKyBraHRtbC9kb20vZG9tX25vZGUuaAky
MyBKdW4gMjAwNSAwMToxMDoyMiAtMDAwMApAQCAtODU1LDEzICs4NTUsNiBAQCBwdWJsaWM6CiAg
ICAgYm9vbCBkaXNwYXRjaEV2ZW50KGNvbnN0IEV2ZW50ICZldnQpOwogCiAgICAgLyoqCi0gICAg
ICogQGludGVybmFsCi0gICAgICogbm90IHBhcnQgb2YgdGhlIERPTS4KLSAgICAgKiBAcmV0dXJu
cyB0aGUgZWxlbWVudCBpZCwgaW4gY2FzZSB0aGlzIGlzIGFuIGVsZW1lbnQsIDAgb3RoZXJ3aXNl
Ci0gICAgICovCi0gICAgUV9VSU5UMzIgZWxlbWVudElkKCkgY29uc3Q7Ci0KLSAgICAvKioKICAg
ICAgKiB0ZXN0cyBpZiB0aGlzIE5vZGUgaXMgMC4gVXNlZnVsIGVzcGVjaWFsbHksIGlmIGNhc3Rp
bmcgdG8gYSBkZXJpdmVkCiAgICAgICogY2xhc3M6CiAgICAgICoKSW5kZXg6IGtodG1sL2RvbS9o
dG1sX2Jhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1s
L2RvbS9odG1sX2Jhc2UuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjYKZGlmZiAtdSAtcCAt
cjEuNiBraHRtbC9kb20vaHRtbF9iYXNlLmNwcAotLS0ga2h0bWwvZG9tL2h0bWxfYmFzZS5jcHAJ
MyBOb3YgMjAwMyAwNjozMjowNCAtMDAwMAkxLjYKKysrIGtodG1sL2RvbS9odG1sX2Jhc2UuY3Bw
CTIzIEp1biAyMDA1IDAxOjEwOjIyIC0wMDAwCkBAIC00MSw3ICs0MSw3IEBAIEhUTUxCb2R5RWxl
bWVudDo6SFRNTEJvZHlFbGVtZW50KEhUTUxCb2QKIAogSFRNTEJvZHlFbGVtZW50ICZIVE1MQm9k
eUVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90
aGVyKCBvdGhlciwgSURfQk9EWSApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVz
Ojpib2R5KCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTEzNSw3ICsxMzUsNyBAQCBI
VE1MRnJhbWVFbGVtZW50OjpIVE1MRnJhbWVFbGVtZW50KEhUTUxGCiAKIEhUTUxGcmFtZUVsZW1l
bnQgJkhUTUxGcmFtZUVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewot
ICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfRlJBTUUgKTsKKyAgICBhc3NpZ25PdGhlciggb3Ro
ZXIsIEhUTUxOYW1lczo6ZnJhbWUoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtMjY1
LDcgKzI2NSw3IEBAIEhUTUxJRnJhbWVFbGVtZW50OjpIVE1MSUZyYW1lRWxlbWVudChIVE0KIAog
SFRNTElGcmFtZUVsZW1lbnQgJkhUTUxJRnJhbWVFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBO
b2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0lGUkFNRSApOworICAg
IGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjppZnJhbWUoKSApOwogICAgIHJldHVybiAq
dGhpczsKIH0KIApAQCAtNDE0LDcgKzQxNCw3IEBAIEhUTUxGcmFtZVNldEVsZW1lbnQ6OkhUTUxG
cmFtZVNldEVsZW1lbnQKIAogSFRNTEZyYW1lU2V0RWxlbWVudCAmSFRNTEZyYW1lU2V0RWxlbWVu
dDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90
aGVyLCBJRF9GUkFNRVNFVCApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpm
cmFtZXNldCgpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC00NjYsNyArNDY2LDcgQEAg
SFRNTEhlYWRFbGVtZW50OjpIVE1MSGVhZEVsZW1lbnQoSFRNTEhlYQogCiBIVE1MSGVhZEVsZW1l
bnQgJkhUTUxIZWFkRWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0g
ICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9IRUFEICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVy
LCBIVE1MTmFtZXM6OmhlYWQoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtNTA3LDcg
KzUwNyw3IEBAIEhUTUxIdG1sRWxlbWVudDo6SFRNTEh0bWxFbGVtZW50KEhUTUxIdG0KIAogSFRN
TEh0bWxFbGVtZW50ICZIVE1MSHRtbEVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90
aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfSFRNTCApOworICAgIGFzc2lnbk90
aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpodG1sKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAK
SW5kZXg6IGtodG1sL2RvbS9odG1sX2Jsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvV2ViQ29yZS9raHRtbC9kb20vaHRtbF9ibG9jay5jcHAsdgpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuNApkaWZmIC11IC1wIC1yMS40IGtodG1sL2RvbS9odG1sX2Jsb2NrLmNwcAotLS0ga2h0
bWwvZG9tL2h0bWxfYmxvY2suY3BwCTEwIEp1biAyMDAyIDIwOjA3OjM0IC0wMDAwCTEuNAorKysg
a2h0bWwvZG9tL2h0bWxfYmxvY2suY3BwCTIzIEp1biAyMDA1IDAxOjEwOjIzIC0wMDAwCkBAIC00
Myw3ICs0Myw3IEBAIEhUTUxCbG9ja3F1b3RlRWxlbWVudDo6SFRNTEJsb2NrcXVvdGVFbGUKIAog
SFRNTEJsb2NrcXVvdGVFbGVtZW50ICZIVE1MQmxvY2txdW90ZUVsZW1lbnQ6Om9wZXJhdG9yID0g
KGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfQkxPQ0tR
VU9URSApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpibG9ja3F1b3RlKCkg
KTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTg0LDcgKzg0LDcgQEAgSFRNTERpdkVsZW1l
bnQ6OkhUTUxEaXZFbGVtZW50KEhUTUxEaXZFbAogCiBIVE1MRGl2RWxlbWVudCAmSFRNTERpdkVs
ZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVy
KCBvdGhlciwgSURfRElWICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OmRp
digpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC0xMjUsNyArMTI1LDcgQEAgSFRNTEhS
RWxlbWVudDo6SFRNTEhSRWxlbWVudChIVE1MSFJFbGVtZQogCiBIVE1MSFJFbGVtZW50ICZIVE1M
SFJFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25P
dGhlciggb3RoZXIsIElEX0hSICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6
OmhyKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTIwNSwxNiArMjA1LDE3IEBAIEhU
TUxIZWFkaW5nRWxlbWVudDo6SFRNTEhlYWRpbmdFbGVtZW50KEgKIAogSFRNTEhlYWRpbmdFbGVt
ZW50ICZIVE1MSGVhZGluZ0VsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQog
ewotICAgIGlmKG90aGVyLmVsZW1lbnRJZCgpICE9IElEX0gxIHx8Ci0gICAgICAgb3RoZXIuZWxl
bWVudElkKCkgIT0gSURfSDIgfHwKLSAgICAgICBvdGhlci5lbGVtZW50SWQoKSAhPSBJRF9IMyB8
fAotICAgICAgIG90aGVyLmVsZW1lbnRJZCgpICE9IElEX0g0IHx8Ci0gICAgICAgb3RoZXIuZWxl
bWVudElkKCkgIT0gSURfSDUgfHwKLSAgICAgICBvdGhlci5lbGVtZW50SWQoKSAhPSBJRF9INiAp
CisgICAgaWYgKCFvdGhlci5oYW5kbGUoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmgxKCkpICYm
CisgICAgICAgICFvdGhlci5oYW5kbGUoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmgyKCkpICYm
CisgICAgICAgICFvdGhlci5oYW5kbGUoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmgzKCkpICYm
CisgICAgICAgICFvdGhlci5oYW5kbGUoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omg0KCkpICYm
CisgICAgICAgICFvdGhlci5oYW5kbGUoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omg1KCkpICYm
CisgICAgICAgICFvdGhlci5oYW5kbGUoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omg2KCkpKQog
ICAgIHsKIAlpZiAoIGltcGwgKSBpbXBsLT5kZXJlZigpOwogCWltcGwgPSAwOwogICAgIH0gZWxz
ZSB7CisKICAgICBOb2RlOjpvcGVyYXRvciA9IChvdGhlcik7CiAgICAgfQogICAgIHJldHVybiAq
dGhpczsKQEAgLTI1Nyw3ICsyNTgsNyBAQCBIVE1MUGFyYWdyYXBoRWxlbWVudDo6SFRNTFBhcmFn
cmFwaEVsZW1lCiAKIEhUTUxQYXJhZ3JhcGhFbGVtZW50ICZIVE1MUGFyYWdyYXBoRWxlbWVudDo6
b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVy
LCBJRF9QICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OnAoKSApOwogICAg
IHJldHVybiAqdGhpczsKIH0KIApAQCAtMjk4LDcgKzI5OSw3IEBAIEhUTUxQcmVFbGVtZW50OjpI
VE1MUHJlRWxlbWVudChIVE1MUHJlRWwKIAogSFRNTFByZUVsZW1lbnQgJkhUTUxQcmVFbGVtZW50
OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3Ro
ZXIsIElEX1BSRSApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpwcmUoKSAp
OwogICAgIHJldHVybiAqdGhpczsKIH0KIApJbmRleDoga2h0bWwvZG9tL2h0bWxfZWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZG9tL2h0bWxf
ZWxlbWVudC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTQKZGlmZiAtdSAtcCAtcjEuMTQg
a2h0bWwvZG9tL2h0bWxfZWxlbWVudC5jcHAKLS0tIGtodG1sL2RvbS9odG1sX2VsZW1lbnQuY3Bw
CTExIE1heSAyMDA1IDAwOjU4OjI4IC0wMDAwCTEuMTQKKysrIGtodG1sL2RvbS9odG1sX2VsZW1l
bnQuY3BwCTIzIEp1biAyMDA1IDAxOjEwOjIzIC0wMDAwCkBAIC0xODIsOSArMTgyLDkgQEAgSFRN
TENvbGxlY3Rpb24gSFRNTEVsZW1lbnQ6OmNoaWxkcmVuKCkgYwogICAgIHJldHVybiBIVE1MQ29s
bGVjdGlvbihpbXBsLCBIVE1MQ29sbGVjdGlvbkltcGw6Ok5PREVfQ0hJTERSRU4pOwogfQogCi12
b2lkIEhUTUxFbGVtZW50Ojphc3NpZ25PdGhlciggY29uc3QgTm9kZSAmb3RoZXIsIGludCBlbGVt
ZW50SWQgKQordm9pZCBIVE1MRWxlbWVudDo6YXNzaWduT3RoZXIoIGNvbnN0IE5vZGUgJm90aGVy
LCBjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lICkKIHsKLSAgICBpZigoaW50KW90aGVyLmVs
ZW1lbnRJZCgpICE9IGVsZW1lbnRJZCkgeworICAgIGlmICghb3RoZXIuaGFuZGxlKCktPmhhc1Rh
Z05hbWUodGFnTmFtZSkpIHsKIAlpZiAoIGltcGwgKSBpbXBsLT5kZXJlZigpOwogCWltcGwgPSAw
OwogICAgIH0gZWxzZSB7CkluZGV4OiBraHRtbC9kb20vaHRtbF9lbGVtZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZG9tL2h0bWxfZWxlbWVudC5oLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjgKZGlmZiAtdSAtcCAtcjEuOCBraHRtbC9kb20vaHRtbF9l
bGVtZW50LmgKLS0tIGtodG1sL2RvbS9odG1sX2VsZW1lbnQuaAkyMiBNYXkgMjAwNCAwMTo1MDo0
OCAtMDAwMAkxLjgKKysrIGtodG1sL2RvbS9odG1sX2VsZW1lbnQuaAkyMyBKdW4gMjAwNSAwMTox
MDoyMyAtMDAwMApAQCAtMzAsNiArMzAsOCBAQAogI2RlZmluZSBIVE1MX0VMRU1FTlRfSAogCiAj
aW5jbHVkZSA8ZG9tL2RvbV9lbGVtZW50Lmg+CisjaW5jbHVkZSAiZG9tX3FuYW1lLmgiCisKIGNs
YXNzIEtIVE1MVmlldzsKIAogbmFtZXNwYWNlIERPTSB7CkBAIC0yMjUsNyArMjI3LDcgQEAgcHJv
dGVjdGVkOgogICAgIC8qCiAgICAgICogQGludGVybmFsCiAgICAgICovCi0gICAgdm9pZCBhc3Np
Z25PdGhlciggY29uc3QgTm9kZSAmb3RoZXIsIGludCBlbGVtZW50SWQgKTsKKyAgICB2b2lkIGFz
c2lnbk90aGVyKCBjb25zdCBOb2RlICZvdGhlciwgY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFt
ZSApOwogfTsKIAogfTsgLy9uYW1lc3BhY2UKSW5kZXg6IGtodG1sL2RvbS9odG1sX2Zvcm0uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2RvbS9odG1sX2Zv
cm0uY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjExCmRpZmYgLXUgLXAgLXIxLjExIGtodG1s
L2RvbS9odG1sX2Zvcm0uY3BwCi0tLSBraHRtbC9kb20vaHRtbF9mb3JtLmNwcAkxMSBNYXkgMjAw
NSAwMDo1ODoyOCAtMDAwMAkxLjExCisrKyBraHRtbC9kb20vaHRtbF9mb3JtLmNwcAkyMyBKdW4g
MjAwNSAwMToxMDoyNCAtMDAwMApAQCAtNDcsNyArNDcsNyBAQCBIVE1MQnV0dG9uRWxlbWVudDo6
SFRNTEJ1dHRvbkVsZW1lbnQoSFRNCiAKIEhUTUxCdXR0b25FbGVtZW50ICZIVE1MQnV0dG9uRWxl
bWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIo
IG90aGVyLCBJRF9CVVRUT04gKTsJCisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6
OmJ1dHRvbigpICk7CQogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtMTU3LDcgKzE1Nyw3IEBA
IEhUTUxGaWVsZFNldEVsZW1lbnQ6OkhUTUxGaWVsZFNldEVsZW1lbnQKIAogSFRNTEZpZWxkU2V0
RWxlbWVudCAmSFRNTEZpZWxkU2V0RWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3Ro
ZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9GSUVMRFNFVCApOworICAgIGFzc2ln
bk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpmaWVsZHNldCgpICk7CiAgICAgcmV0dXJuICp0aGlz
OwogfQogCkBAIC0xOTMsNyArMTkzLDcgQEAgSFRNTEZvcm1FbGVtZW50OjpIVE1MRm9ybUVsZW1l
bnQoSFRNTEZvcgogCiBIVE1MRm9ybUVsZW1lbnQgJkhUTUxGb3JtRWxlbWVudDo6b3BlcmF0b3Ig
PSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9GT1JN
ICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OmZvcm0oKSApOwogICAgIHJl
dHVybiAqdGhpczsKIH0KIApAQCAtMzExLDcgKzMxMSw3IEBAIEhUTUxJbnB1dEVsZW1lbnQ6OkhU
TUxJbnB1dEVsZW1lbnQoSFRNTEkKIAogSFRNTElucHV0RWxlbWVudCAmSFRNTElucHV0RWxlbWVu
dDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90
aGVyLCBJRF9JTlBVVCApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjppbnB1
dCgpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC01NzQsNyArNTc0LDcgQEAgSFRNTExh
YmVsRWxlbWVudDo6SFRNTExhYmVsRWxlbWVudChIVE1MTAogCiBIVE1MTGFiZWxFbGVtZW50ICZI
VE1MTGFiZWxFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBh
c3NpZ25PdGhlciggb3RoZXIsIElEX0xBQkVMICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBI
VE1MTmFtZXM6OmxhYmVsKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTYzMyw3ICs2
MzMsNyBAQCBIVE1MTGVnZW5kRWxlbWVudDo6SFRNTExlZ2VuZEVsZW1lbnQoSFRNCiAKIEhUTUxM
ZWdlbmRFbGVtZW50ICZIVE1MTGVnZW5kRWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAm
b3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9MRUdFTkQgKTsKKyAgICBhc3Np
Z25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6bGVnZW5kKCkgKTsKICAgICByZXR1cm4gKnRoaXM7
CiB9CiAKQEAgLTY5MSw3ICs2OTEsNyBAQCBIVE1MT3B0R3JvdXBFbGVtZW50OjpIVE1MT3B0R3Jv
dXBFbGVtZW50CiAKIEhUTUxPcHRHcm91cEVsZW1lbnQgJkhUTUxPcHRHcm91cEVsZW1lbnQ6Om9w
ZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwg
SURfT1BUR1JPVVAgKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6b3B0Z3Jv
dXAoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtNzQ0LDcgKzc0NCw3IEBAIEhUTUxT
ZWxlY3RFbGVtZW50OjpIVE1MU2VsZWN0RWxlbWVudChIVE0KIAogSFRNTFNlbGVjdEVsZW1lbnQg
JkhUTUxTZWxlY3RFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAg
ICBhc3NpZ25PdGhlciggb3RoZXIsIElEX1NFTEVDVCApOworICAgIGFzc2lnbk90aGVyKCBvdGhl
ciwgSFRNTE5hbWVzOjpzZWxlY3QoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtOTA2
LDcgKzkwNiw3IEBAIEhUTUxUZXh0QXJlYUVsZW1lbnQ6OkhUTUxUZXh0QXJlYUVsZW1lbnQKIAog
SFRNTFRleHRBcmVhRWxlbWVudCAmSFRNTFRleHRBcmVhRWxlbWVudDo6b3BlcmF0b3IgPSAoY29u
c3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9URVhUQVJFQSAp
OworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjp0ZXh0YXJlYSgpICk7CiAgICAg
cmV0dXJuICp0aGlzOwogfQogCkBAIC0xMDc0LDcgKzEwNzQsNyBAQCBIVE1MT3B0aW9uRWxlbWVu
dDo6SFRNTE9wdGlvbkVsZW1lbnQoSFRNCiAKIEhUTUxPcHRpb25FbGVtZW50ICZIVE1MT3B0aW9u
RWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3Ro
ZXIoIG90aGVyLCBJRF9PUFRJT04gKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1l
czo6b3B0aW9uKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTExODIsNyArMTE4Miw3
IEBAIEhUTUxJc0luZGV4RWxlbWVudDo6SFRNTElzSW5kZXhFbGVtZW50KEgKIAogSFRNTElzSW5k
ZXhFbGVtZW50ICZIVE1MSXNJbmRleEVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90
aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfSVNJTkRFWCApOworICAgIGFzc2ln
bk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjppc2luZGV4KCkgKTsKICAgICByZXR1cm4gKnRoaXM7
CiB9CiAKSW5kZXg6IGtodG1sL2RvbS9odG1sX2hlYWQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2RvbS9odG1sX2hlYWQuY3BwLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjEwCmRpZmYgLXUgLXAgLXIxLjEwIGtodG1sL2RvbS9odG1sX2hlYWQuY3BwCi0t
LSBraHRtbC9kb20vaHRtbF9oZWFkLmNwcAkyMiBKdW4gMjAwNSAxODoyMjowMSAtMDAwMAkxLjEw
CisrKyBraHRtbC9kb20vaHRtbF9oZWFkLmNwcAkyMyBKdW4gMjAwNSAwMToxMDoyNCAtMDAwMApA
QCAtNDIsNyArNDIsNyBAQCBIVE1MQmFzZUVsZW1lbnQ6OkhUTUxCYXNlRWxlbWVudChIVE1MQmFz
CiAKIEhUTUxCYXNlRWxlbWVudCAmSFRNTEJhc2VFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBO
b2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0JBU0UgKTsKKyAgICBh
c3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6YmFzZSgpICk7CiAgICAgcmV0dXJuICp0aGlz
OwogfQogCkBAIC05Nyw3ICs5Nyw3IEBAIEhUTUxMaW5rRWxlbWVudDo6SFRNTExpbmtFbGVtZW50
KEhUTUxMaW4KIAogSFRNTExpbmtFbGVtZW50ICZIVE1MTGlua0VsZW1lbnQ6Om9wZXJhdG9yID0g
KGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfTElOSyAp
OworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpsaW5rKCkgKTsKICAgICByZXR1
cm4gKnRoaXM7CiB9CiAKQEAgLTIzOCw3ICsyMzgsNyBAQCBIVE1MTWV0YUVsZW1lbnQ6OkhUTUxN
ZXRhRWxlbWVudChIVE1MTWV0CiAKIEhUTUxNZXRhRWxlbWVudCAmSFRNTE1ldGFFbGVtZW50Ojpv
cGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIs
IElEX01FVEEgKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6bWV0YSgpICk7
CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC0zMTIsNyArMzEyLDcgQEAgSFRNTFNjcmlwdEVs
ZW1lbnQ6OkhUTUxTY3JpcHRFbGVtZW50KEhUTQogCiBIVE1MU2NyaXB0RWxlbWVudCAmSFRNTFNj
cmlwdEVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2ln
bk90aGVyKCBvdGhlciwgSURfU0NSSVBUICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1M
TmFtZXM6OnNjcmlwdCgpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC00MjQsNyArNDI0
LDcgQEAgSFRNTFN0eWxlRWxlbWVudDo6SFRNTFN0eWxlRWxlbWVudChIVE1MUwogCiBIVE1MU3R5
bGVFbGVtZW50ICZIVE1MU3R5bGVFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhl
cikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX1NUWUxFICk7CisgICAgYXNzaWduT3Ro
ZXIoIG90aGVyLCBIVE1MTmFtZXM6OnN0eWxlKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAK
QEAgLTQ5Niw3ICs0OTYsNyBAQCBIVE1MVGl0bGVFbGVtZW50OjpIVE1MVGl0bGVFbGVtZW50KEhU
TUxUCiAKIEhUTUxUaXRsZUVsZW1lbnQgJkhUTUxUaXRsZUVsZW1lbnQ6Om9wZXJhdG9yID0gKGNv
bnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfVElUTEUgKTsK
KyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6dGl0bGUoKSApOwogICAgIHJldHVy
biAqdGhpczsKIH0KIApJbmRleDoga2h0bWwvZG9tL2h0bWxfaW1hZ2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2RvbS9odG1sX2ltYWdlLmNwcCx2CnJl
dHJpZXZpbmcgcmV2aXNpb24gMS45CmRpZmYgLXUgLXAgLXIxLjkga2h0bWwvZG9tL2h0bWxfaW1h
Z2UuY3BwCi0tLSBraHRtbC9kb20vaHRtbF9pbWFnZS5jcHAJMyBOb3YgMjAwMyAwNjozMjowNCAt
MDAwMAkxLjkKKysrIGtodG1sL2RvbS9odG1sX2ltYWdlLmNwcAkyMyBKdW4gMjAwNSAwMToxMDoy
NCAtMDAwMApAQCAtNDYsNyArNDYsNyBAQCBIVE1MQXJlYUVsZW1lbnQ6OkhUTUxBcmVhRWxlbWVu
dChIVE1MQXJlCiAKIEhUTUxBcmVhRWxlbWVudCAmSFRNTEFyZWFFbGVtZW50OjpvcGVyYXRvciA9
IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0FSRUEg
KTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6YXJlYSgpICk7CiAgICAgcmV0
dXJuICp0aGlzOwogfQogCkBAIC0xNzYsNyArMTc2LDcgQEAgSFRNTEltYWdlRWxlbWVudDo6SFRN
TEltYWdlRWxlbWVudChIVE1MSQogCiBIVE1MSW1hZ2VFbGVtZW50ICZIVE1MSW1hZ2VFbGVtZW50
OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3Ro
ZXIsIElEX0lNRyApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjppbWcoKSAp
OwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtMzcyLDcgKzM3Miw3IEBAIEhUTUxNYXBFbGVt
ZW50OjpIVE1MTWFwRWxlbWVudChIVE1MTWFwRWwKIAogSFRNTE1hcEVsZW1lbnQgJkhUTUxNYXBF
bGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhl
ciggb3RoZXIsIElEX01BUCApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpt
YXAoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApJbmRleDoga2h0bWwvZG9tL2h0bWxfaW5s
aW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9kb20v
aHRtbF9pbmxpbmUuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjcKZGlmZiAtdSAtcCAtcjEu
NyBraHRtbC9kb20vaHRtbF9pbmxpbmUuY3BwCi0tLSBraHRtbC9kb20vaHRtbF9pbmxpbmUuY3Bw
CTExIE1heSAyMDA1IDAwOjU4OjI4IC0wMDAwCTEuNworKysga2h0bWwvZG9tL2h0bWxfaW5saW5l
LmNwcAkyMyBKdW4gMjAwNSAwMToxMDoyNCAtMDAwMApAQCAtNDUsNyArNDUsNyBAQCBIVE1MQW5j
aG9yRWxlbWVudDo6SFRNTEFuY2hvckVsZW1lbnQoSFRNCiAKIEhUTUxBbmNob3JFbGVtZW50ICZI
VE1MQW5jaG9yRWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAg
YXNzaWduT3RoZXIoIG90aGVyLCBJRF9BICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1M
TmFtZXM6OmEoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtMjE3LDcgKzIxNyw3IEBA
IEhUTUxCUkVsZW1lbnQ6OkhUTUxCUkVsZW1lbnQoSFRNTEJSRWxlbWUKIAogSFRNTEJSRWxlbWVu
dCAmSFRNTEJSRWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAg
YXNzaWduT3RoZXIoIG90aGVyLCBJRF9CUiApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRN
TE5hbWVzOjpicigpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC0yNTgsNyArMjU4LDcg
QEAgSFRNTEZvbnRFbGVtZW50OjpIVE1MRm9udEVsZW1lbnQoSFRNTEZvbgogCiBIVE1MRm9udEVs
ZW1lbnQgJkhUTUxGb250RWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7
Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9GT05UICk7CisgICAgYXNzaWduT3RoZXIoIG90
aGVyLCBIVE1MTmFtZXM6OmZvbnQoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtMzE5
LDcgKzMxOSw3IEBAIEhUTUxNb2RFbGVtZW50OjpIVE1MTW9kRWxlbWVudChjb25zdCBIVE0KIEhU
TUxNb2RFbGVtZW50OjpIVE1MTW9kRWxlbWVudChIVE1MRWxlbWVudEltcGwgKl9pbXBsKQogICAg
IDogSFRNTEVsZW1lbnQoKQogewotICAgIGlmIChfaW1wbCAmJiAoX2ltcGwtPmlkKCkgPT0gSURf
SU5TIHx8IF9pbXBsLT5pZCgpID09IElEX0RFTCkpCisgICAgaWYgKF9pbXBsICYmIChfaW1wbC0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OmlucygpKSB8fCBfaW1wbC0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OmRlbCgpKSkpCiAgICAgICAgIGltcGwgPSBfaW1wbDsKICAgICBlbHNlCiAgICAgICAgIGlt
cGwgPSAwOwpAQCAtMzI4LDkgKzMyOCw4IEBAIEhUTUxNb2RFbGVtZW50OjpIVE1MTW9kRWxlbWVu
dChIVE1MRWxlbWUKIAogSFRNTE1vZEVsZW1lbnQgJkhUTUxNb2RFbGVtZW50OjpvcGVyYXRvciA9
IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBpZiggb3RoZXIuZWxlbWVudElkKCkgIT0gSURf
SU5TICYmCi0Jb3RoZXIuZWxlbWVudElkKCkgIT0gSURfREVMICkKLSAgICB7CisgICAgaWYgKCFv
dGhlci5oYW5kbGUoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmlucygpKSAmJgorICAgICAgICAh
b3RoZXIuaGFuZGxlKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpkZWwoKSkpIHsKIAlpZiAoIGlt
cGwgKSBpbXBsLT5kZXJlZigpOwogCWltcGwgPSAwOwogICAgIH0gZWxzZSB7CkBAIC0zODEsMTkg
KzM4MCwxNiBAQCBIVE1MUXVvdGVFbGVtZW50OjpIVE1MUXVvdGVFbGVtZW50KGNvbnN0CiB7CiB9
CiAKLUhUTUxRdW90ZUVsZW1lbnQ6OkhUTUxRdW90ZUVsZW1lbnQoSFRNTEdlbmVyaWNFbGVtZW50
SW1wbCAqX2ltcGwpCitIVE1MUXVvdGVFbGVtZW50OjpIVE1MUXVvdGVFbGVtZW50KEhUTUxRdW90
ZUVsZW1lbnRJbXBsICpfaW1wbCkKICAgICA6IEhUTUxFbGVtZW50KCkKIHsKLSAgICBpZiAoX2lt
cGwgJiYgX2ltcGwtPmlkKCkgPT0gSURfUSkKLSAgICAgICAgaW1wbCA9IF9pbXBsOwotICAgIGVs
c2UKLSAgICAgICAgaW1wbCA9IDA7CisgICAgaW1wbCA9IF9pbXBsOwogICAgIGlmICggaW1wbCAp
IGltcGwtPnJlZigpOwogfQogCiBIVE1MUXVvdGVFbGVtZW50ICZIVE1MUXVvdGVFbGVtZW50Ojpv
cGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIs
IElEX1EgKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6cSgpICk7CiAgICAg
cmV0dXJuICp0aGlzOwogfQogCkluZGV4OiBraHRtbC9kb20vaHRtbF9pbmxpbmUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9kb20vaHRtbF9pbmxpbmUuaCx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zCmRpZmYgLXUgLXAgLXIxLjMga2h0bWwvZG9tL2h0bWxf
aW5saW5lLmgKLS0tIGtodG1sL2RvbS9odG1sX2lubGluZS5oCTE1IEFwciAyMDAyIDIzOjQyOjAx
IC0wMDAwCTEuMworKysga2h0bWwvZG9tL2h0bWxfaW5saW5lLmgJMjMgSnVuIDIwMDUgMDE6MTA6
MjUgLTAwMDAKQEAgLTQyNSw3ICs0MjUsNyBAQCBwdWJsaWM6CiAgICAgSFRNTFF1b3RlRWxlbWVu
dChjb25zdCBOb2RlICZvdGhlcikgOiBIVE1MRWxlbWVudCgpCiAgICAgICAgICB7KCp0aGlzKT1v
dGhlcjt9CiBwcm90ZWN0ZWQ6Ci0gICAgSFRNTFF1b3RlRWxlbWVudChIVE1MR2VuZXJpY0VsZW1l
bnRJbXBsICppbXBsKTsKKyAgICBIVE1MUXVvdGVFbGVtZW50KEhUTUxRdW90ZUVsZW1lbnRJbXBs
ICppbXBsKTsKIHB1YmxpYzoKIAogICAgIEhUTUxRdW90ZUVsZW1lbnQgJiBvcGVyYXRvciA9IChj
b25zdCBIVE1MUXVvdGVFbGVtZW50ICZvdGhlcik7CkluZGV4OiBraHRtbC9kb20vaHRtbF9saXN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9kb20vaHRt
bF9saXN0LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40CmRpZmYgLXUgLXAgLXIxLjQga2h0
bWwvZG9tL2h0bWxfbGlzdC5jcHAKLS0tIGtodG1sL2RvbS9odG1sX2xpc3QuY3BwCTEwIEp1biAy
MDAyIDIwOjA3OjM2IC0wMDAwCTEuNAorKysga2h0bWwvZG9tL2h0bWxfbGlzdC5jcHAJMjMgSnVu
IDIwMDUgMDE6MTA6MjUgLTAwMDAKQEAgLTQxLDcgKzQxLDcgQEAgSFRNTERMaXN0RWxlbWVudDo6
SFRNTERMaXN0RWxlbWVudChIVE1MRAogCiBIVE1MRExpc3RFbGVtZW50ICZIVE1MRExpc3RFbGVt
ZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlcigg
b3RoZXIsIElEX0RMICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OmRsKCkg
KTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTg4LDcgKzg4LDcgQEAgSFRNTERpcmVjdG9y
eUVsZW1lbnQ6OkhUTUxEaXJlY3RvcnlFbGVtZQogCiBIVE1MRGlyZWN0b3J5RWxlbWVudCAmSFRN
TERpcmVjdG9yeUVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAg
IGFzc2lnbk90aGVyKCBvdGhlciwgSURfRElSICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBI
VE1MTmFtZXM6OmRpcigpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC0xMzUsNyArMTM1
LDcgQEAgSFRNTExJRWxlbWVudDo6SFRNTExJRWxlbWVudChIVE1MTElFbGVtZQogCiBIVE1MTElF
bGVtZW50ICZIVE1MTElFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsK
LSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0xJICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVy
LCBIVE1MTmFtZXM6OmxpKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTE5MCw3ICsx
OTAsNyBAQCBIVE1MTWVudUVsZW1lbnQ6OkhUTUxNZW51RWxlbWVudChIVE1MTWVuCiAKIEhUTUxN
ZW51RWxlbWVudCAmSFRNTE1lbnVFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhl
cikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX01FTlUgKTsKKyAgICBhc3NpZ25PdGhl
ciggb3RoZXIsIEhUTUxOYW1lczo6bWVudSgpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBA
IC0yMzcsNyArMjM3LDcgQEAgSFRNTE9MaXN0RWxlbWVudDo6SFRNTE9MaXN0RWxlbWVudChIVE1M
TwogCiBIVE1MT0xpc3RFbGVtZW50ICZIVE1MT0xpc3RFbGVtZW50OjpvcGVyYXRvciA9IChjb25z
dCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX09MICk7CisgICAg
YXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6Om9sKCkgKTsKICAgICByZXR1cm4gKnRoaXM7
CiB9CiAKQEAgLTMxMCw3ICszMTAsNyBAQCBIVE1MVUxpc3RFbGVtZW50OjpIVE1MVUxpc3RFbGVt
ZW50KEhUTUxVCiAKIEhUTUxVTGlzdEVsZW1lbnQgJkhUTUxVTGlzdEVsZW1lbnQ6Om9wZXJhdG9y
ID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfVUwg
KTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6dWwoKSApOwogICAgIHJldHVy
biAqdGhpczsKIH0KIApJbmRleDoga2h0bWwvZG9tL2h0bWxfbWlzYy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZG9tL2h0bWxfbWlzYy5jcHAsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuNwpkaWZmIC11IC1wIC1yMS43IGtodG1sL2RvbS9odG1sX21pc2Mu
Y3BwCi0tLSBraHRtbC9kb20vaHRtbF9taXNjLmNwcAkxMSBNYXkgMjAwNSAwMDo1ODoyOCAtMDAw
MAkxLjcKKysrIGtodG1sL2RvbS9odG1sX21pc2MuY3BwCTIzIEp1biAyMDA1IDAxOjEwOjI1IC0w
MDAwCkBAIC00MSw3ICs0MSw3IEBAIEhUTUxCYXNlRm9udEVsZW1lbnQ6OkhUTUxCYXNlRm9udEVs
ZW1lbnQKIAogSFRNTEJhc2VGb250RWxlbWVudCAmSFRNTEJhc2VGb250RWxlbWVudDo6b3BlcmF0
b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9C
QVNFRk9OVCApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpiYXNlZm9udCgp
ICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkluZGV4OiBraHRtbC9kb20vaHRtbF9vYmplY3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2RvbS9odG1s
X29iamVjdC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNQpkaWZmIC11IC1wIC1yMS41IGto
dG1sL2RvbS9odG1sX29iamVjdC5jcHAKLS0tIGtodG1sL2RvbS9odG1sX29iamVjdC5jcHAJMSBN
YXIgMjAwNCAxNzowNDoyNCAtMDAwMAkxLjUKKysrIGtodG1sL2RvbS9odG1sX29iamVjdC5jcHAJ
MjMgSnVuIDIwMDUgMDE6MTA6MjUgLTAwMDAKQEAgLTQzLDcgKzQzLDcgQEAgSFRNTEFwcGxldEVs
ZW1lbnQ6OkhUTUxBcHBsZXRFbGVtZW50KEhUTQogCiBIVE1MQXBwbGV0RWxlbWVudCAmSFRNTEFw
cGxldEVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2ln
bk90aGVyKCBvdGhlciwgSURfQVBQTEVUICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1M
TmFtZXM6OmFwcGxldCgpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC0xOTQsNyArMTk0
LDcgQEAgSFRNTE9iamVjdEVsZW1lbnQ6OkhUTUxPYmplY3RFbGVtZW50KEhUTQogCiBIVE1MT2Jq
ZWN0RWxlbWVudCAmSFRNTE9iamVjdEVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90
aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfT0JKRUNUICk7CisgICAgYXNzaWdu
T3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6Om9iamVjdCgpICk7CiAgICAgcmV0dXJuICp0aGlzOwog
fQogCkBAIC00MzIsNyArNDMyLDcgQEAgSFRNTFBhcmFtRWxlbWVudDo6SFRNTFBhcmFtRWxlbWVu
dChIVE1MUAogCiBIVE1MUGFyYW1FbGVtZW50ICZIVE1MUGFyYW1FbGVtZW50OjpvcGVyYXRvciA9
IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX1BBUkFN
ICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OnBhcmFtKCkgKTsKICAgICBy
ZXR1cm4gKnRoaXM7CiB9CiAKSW5kZXg6IGtodG1sL2RvbS9odG1sX3RhYmxlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9kb20vaHRtbF90YWJsZS5jcHAs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNgpkaWZmIC11IC1wIC1yMS42IGtodG1sL2RvbS9odG1s
X3RhYmxlLmNwcAotLS0ga2h0bWwvZG9tL2h0bWxfdGFibGUuY3BwCTMxIE9jdCAyMDAzIDAwOjQ3
OjE2IC0wMDAwCTEuNgorKysga2h0bWwvZG9tL2h0bWxfdGFibGUuY3BwCTIzIEp1biAyMDA1IDAx
OjEwOjI2IC0wMDAwCkBAIC00NSw3ICs0NSw3IEBAIEhUTUxUYWJsZUNhcHRpb25FbGVtZW50OjpI
VE1MVGFibGVDYXB0aW8KIAogSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQgJkhUTUxUYWJsZUNhcHRp
b25FbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25P
dGhlciggb3RoZXIsIElEX0NBUFRJT04gKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxO
YW1lczo6Y2FwdGlvbigpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC04Niw5ICs4Niw4
IEBAIEhUTUxUYWJsZUNlbGxFbGVtZW50OjpIVE1MVGFibGVDZWxsRWxlbWUKIAogSFRNTFRhYmxl
Q2VsbEVsZW1lbnQgJkhUTUxUYWJsZUNlbGxFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2Rl
ICZvdGhlcikKIHsKLSAgICBpZiggb3RoZXIuZWxlbWVudElkKCkgIT0gSURfVEQgJiYKLQlvdGhl
ci5lbGVtZW50SWQoKSAhPSBJRF9USCApCi0gICAgeworICAgIGlmICghb3RoZXIuaGFuZGxlKCkt
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0ZCgpKSB8fAorICAgICAgICAhb3RoZXIuaGFuZGxlKCkt
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0aCgpKSkgewogCWlmICggaW1wbCApIGltcGwtPmRlcmVm
KCk7CiAJaW1wbCA9IDA7CiAgICAgfSBlbHNlIHsKQEAgLTI5NSw5ICsyOTQsOCBAQCBIVE1MVGFi
bGVDb2xFbGVtZW50OjpIVE1MVGFibGVDb2xFbGVtZW50CiAKIEhUTUxUYWJsZUNvbEVsZW1lbnQg
JkhUTUxUYWJsZUNvbEVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewot
ICAgIGlmKCBvdGhlci5lbGVtZW50SWQoKSAhPSBJRF9DT0wgJiYKLQlvdGhlci5lbGVtZW50SWQo
KSAhPSBJRF9DT0xHUk9VUCApCi0gICAgeworICAgIGlmICghb3RoZXIuaGFuZGxlKCktPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjpjb2woKSkgJiYKKyAgICAgICAgIW90aGVyLmhhbmRsZSgpLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6Y29sZ3JvdXAoKSkpIHsKIAlpZiAoIGltcGwgKSBpbXBsLT5kZXJl
ZigpOwogCWltcGwgPSAwOwogICAgIH0gZWxzZSB7CkBAIC00MDEsNyArMzk5LDcgQEAgSFRNTFRh
YmxlRWxlbWVudDo6SFRNTFRhYmxlRWxlbWVudChIVE1MVAogCiBIVE1MVGFibGVFbGVtZW50ICZI
VE1MVGFibGVFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBh
c3NpZ25PdGhlciggb3RoZXIsIElEX1RBQkxFICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBI
VE1MTmFtZXM6OnRhYmxlKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTYzOCw3ICs2
MzYsNyBAQCBIVE1MVGFibGVSb3dFbGVtZW50OjpIVE1MVGFibGVSb3dFbGVtZW50CiAKIEhUTUxU
YWJsZVJvd0VsZW1lbnQgJkhUTUxUYWJsZVJvd0VsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5v
ZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfVFIgKTsKKyAgICBhc3Np
Z25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6dHIoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0K
IApAQCAtNzc1LDEwICs3NzMsOSBAQCBIVE1MVGFibGVTZWN0aW9uRWxlbWVudDo6SFRNTFRhYmxl
U2VjdGlvCiAKIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50ICZIVE1MVGFibGVTZWN0aW9uRWxlbWVu
dDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgaWYob3RoZXIuZWxlbWVu
dElkKCkgIT0gSURfVEJPRFkgJiYKLSAgICAgICBvdGhlci5lbGVtZW50SWQoKSAhPSBJRF9USEVB
RCAmJgotICAgICAgIG90aGVyLmVsZW1lbnRJZCgpICE9IElEX1RGT09UICkKLSAgICB7CisgICAg
aWYgKCFvdGhlci5oYW5kbGUoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRib2R5KCkpICYmCisg
ICAgICAgICFvdGhlci5oYW5kbGUoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRoZWFkKCkpICYm
CisgICAgICAgICFvdGhlci5oYW5kbGUoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRmb290KCkp
KSB7CiAJaWYgKCBpbXBsICkgaW1wbC0+ZGVyZWYoKTsKIAlpbXBsID0gMDsKICAgICB9IGVsc2Ug
ewpJbmRleDoga2h0bWwvZWNtYS9ranNfY3NzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvV2ViQ29yZS9raHRtbC9lY21hL2tqc19jc3MuY3BwLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjI2CmRpZmYgLXUgLXAgLXIxLjI2IGtodG1sL2VjbWEva2pzX2Nzcy5jcHAKLS0tIGtodG1s
L2VjbWEva2pzX2Nzcy5jcHAJMjIgSnVuIDIwMDUgMTY6Mzg6MDIgLTAwMDAJMS4yNgorKysga2h0
bWwvZWNtYS9ranNfY3NzLmNwcAkyMyBKdW4gMjAwNSAwMToxMDoyNyAtMDAwMApAQCAtMjksNyAr
MjksNyBAQAogI2luY2x1ZGUgInhtbC9kb21fZG9jaW1wbC5oIgogI2luY2x1ZGUgImh0bWwvaHRt
bF9oZWFkaW1wbC5oIiAvLyBmb3IgSFRNTFN0eWxlRWxlbWVudAogI2luY2x1ZGUgImtqc19kb20u
aCIKLSNpbmNsdWRlICJtaXNjL2h0bWx0YWdzLmgiCisjaW5jbHVkZSAiaHRtbG5hbWVzLmgiCiAK
ICNpbmNsdWRlIDxrZGVidWcuaD4KIApAQCAtNTUsNiArNTUsNyBAQCB1c2luZyBET006OkNvdW50
ZXJJbXBsOwogdXNpbmcgRE9NOjpEb2N1bWVudEltcGw7CiB1c2luZyBET006OkRPTVN0cmluZzsK
IHVzaW5nIERPTTo6RWxlbWVudEltcGw7Cit1c2luZyBET006OkhUTUxOYW1lczsKIHVzaW5nIERP
TTo6SFRNTFN0eWxlRWxlbWVudEltcGw7CiB1c2luZyBET006Ok1lZGlhTGlzdEltcGw7CiB1c2lu
ZyBET006OlJlY3RJbXBsOwpAQCAtNDA0LDcgKzQwNSw3IEBAIFZhbHVlIERPTVN0eWxlU2hlZXRM
aXN0Ojp0cnlHZXQoRXhlY1N0YXQKICAgLy8gYW5kIGRvZXNuJ3QgbG9vayBmb3IgbmFtZSBhdHRy
aWJ1dGUgKHNlZSBpbXBsZW1lbnRhdGlvbiBhYm92ZSkuCiAgIC8vIEJ1dCB1bmljaXR5IG9mIHN0
eWxlc2hlZXQgaWRzIGlzIGdvb2QgcHJhY3RpY2UgYW55d2F5IDspCiAgIEVsZW1lbnRJbXBsICpl
bGVtZW50ID0gbV9kb2MtPmdldEVsZW1lbnRCeUlkKHAuc3RyaW5nKCkpOwotICBpZiAoZWxlbWVu
dCAmJiBlbGVtZW50LT5pZCgpID09IElEX1NUWUxFKQorICBpZiAoZWxlbWVudCAmJiBlbGVtZW50
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c3R5bGUoKSkpCiAgICAgcmV0dXJuIGdldERPTVN0eWxl
U2hlZXQoZXhlYywgc3RhdGljX2Nhc3Q8SFRNTFN0eWxlRWxlbWVudEltcGwgKj4oZWxlbWVudCkt
PnNoZWV0KCkpOwogCiAgIHJldHVybiBET01PYmplY3Q6OnRyeUdldChleGVjLCBwKTsKSW5kZXg6
IGtodG1sL2VjbWEva2pzX2RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dl
YkNvcmUva2h0bWwvZWNtYS9ranNfZG9tLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS43Ngpk
aWZmIC11IC1wIC1yMS43NiBraHRtbC9lY21hL2tqc19kb20uY3BwCi0tLSBraHRtbC9lY21hL2tq
c19kb20uY3BwCTIyIEp1biAyMDA1IDAwOjQ4OjQ0IC0wMDAwCTEuNzYKKysrIGtodG1sL2VjbWEv
a2pzX2RvbS5jcHAJMjMgSnVuIDIwMDUgMDE6MTA6MjkgLTAwMDAKQEAgLTQ3LDggKzQ3LDYgQEAK
IAogI2luY2x1ZGUgImh0bWxfb2JqZWN0aW1wbC5oIgogCi0jaW5jbHVkZSAibWlzYy9odG1sdGFn
cy5oIgotCiAjaWYgQVBQTEVfQ0hBTkdFUwogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL3J1bnRp
bWVfb2JqZWN0Lmg+CiAjZW5kaWYKQEAgLTY3LDYgKzY1LDcgQEAgdXNpbmcgRE9NOjpIVE1MQXBw
bGV0RWxlbWVudEltcGw7CiB1c2luZyBET006OkhUTUxEb2N1bWVudEltcGw7CiB1c2luZyBET006
OkhUTUxFbGVtZW50SW1wbDsKIHVzaW5nIERPTTo6SFRNTEVtYmVkRWxlbWVudEltcGw7Cit1c2lu
ZyBET006OkhUTUxOYW1lczsKIHVzaW5nIERPTTo6SFRNTE9iamVjdEVsZW1lbnRJbXBsOwogdXNp
bmcgRE9NOjpOYW1lZE5vZGVNYXBJbXBsOwogdXNpbmcgRE9NOjpOb2RlOwpAQCAtNDYyLDcgKzQ2
MSw3IEBAIHZvaWQgRE9NTm9kZTo6cHV0VmFsdWUoRXhlY1N0YXRlICpleGVjLCAKICAgICBub2Rl
LnNldE5vZGVWYWx1ZSh2YWx1ZS50b1N0cmluZyhleGVjKS5zdHJpbmcoKSwgZXhjZXB0aW9uKTsK
ICAgICBicmVhazsKICAgY2FzZSBQcmVmaXg6Ci0gICAgbm9kZS5zZXRQcmVmaXgodmFsdWUudG9T
dHJpbmcoZXhlYykuc3RyaW5nKCksIGV4Y2VwdGlvbik7CisgICAgbm9kZS5zZXRQcmVmaXgodmFs
dWUudG9TdHJpbmcoZXhlYykuc3RyaW5nKCkuaW1wbGVtZW50YXRpb24oKSwgZXhjZXB0aW9uKTsK
ICAgICBicmVhazsKICAgY2FzZSBPbkFib3J0OgogICAgIHNldExpc3RlbmVyKGV4ZWMsRE9NOjpF
dmVudEltcGw6OkFCT1JUX0VWRU5ULHZhbHVlKTsKQEAgLTExODcsNyArMTE4Niw3IEBAIFZhbHVl
IERPTUVsZW1lbnQ6OnRyeUdldChFeGVjU3RhdGUgKmV4ZWMKICAgewogICAgIHN3aXRjaCggZW50
cnktPnZhbHVlICkgewogICAgIGNhc2UgVGFnTmFtZToKLSAgICAgIHJldHVybiBnZXRTdHJpbmdP
ck51bGwoZWxlbWVudC50YWdOYW1lKCkpOworICAgICAgcmV0dXJuIGdldFN0cmluZ09yTnVsbChl
bGVtZW50Lm5vZGVOYW1lKCkpOwogICAgIGNhc2UgU3R5bGU6CiAgICAgICByZXR1cm4gZ2V0RE9N
Q1NTU3R5bGVEZWNsYXJhdGlvbihleGVjLGVsZW1lbnQuc3R5bGUoKSk7CiAgICAgZGVmYXVsdDoK
QEAgLTE3MDksMjYgKzE3MDgsMjEgQEAgVmFsdWVJbXAgKmdldFJ1bnRpbWVPYmplY3QoRXhlY1N0
YXRlICpleAogICAgIGlmICghbikKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBzd2l0Y2ggKG4t
PmlkKCkpIHsKLSAgICAgICAgY2FzZSBJRF9BUFBMRVQ6IHsKLSAgICAgICAgICAgIEhUTUxBcHBs
ZXRFbGVtZW50SW1wbCAqYXBwbGV0RWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxBcHBsZXRFbGVt
ZW50SW1wbCAqPihuKTsKLSAgICAgICAgICAgIGlmIChhcHBsZXRFbGVtZW50LT5nZXRBcHBsZXRJ
bnN0YW5jZSgpKQotICAgICAgICAgICAgICAgIC8vIFRoZSBpbnN0YW5jZSBpcyBvd25lZCBieSB0
aGUgYXBwbGV0IGVsZW1lbnQuCi0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBSdW50aW1lT2Jq
ZWN0SW1wKGFwcGxldEVsZW1lbnQtPmdldEFwcGxldEluc3RhbmNlKCksIGZhbHNlKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgSURfRU1CRUQ6IHsKLSAgICAg
ICAgICAgIEhUTUxFbWJlZEVsZW1lbnRJbXBsICplbWJlZEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxI
VE1MRW1iZWRFbGVtZW50SW1wbCAqPihuKTsKLSAgICAgICAgICAgIGlmIChlbWJlZEVsZW1lbnQt
PmdldEVtYmVkSW5zdGFuY2UoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFJ1bnRpbWVP
YmplY3RJbXAoZW1iZWRFbGVtZW50LT5nZXRFbWJlZEluc3RhbmNlKCksIGZhbHNlKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgSURfT0JKRUNUOiB7Ci0gICAg
ICAgICAgICBIVE1MT2JqZWN0RWxlbWVudEltcGwgKm9iamVjdEVsZW1lbnQgPSBzdGF0aWNfY2Fz
dDxIVE1MT2JqZWN0RWxlbWVudEltcGwgKj4obik7Ci0gICAgICAgICAgICBpZiAob2JqZWN0RWxl
bWVudC0+Z2V0T2JqZWN0SW5zdGFuY2UoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFJ1
bnRpbWVPYmplY3RJbXAob2JqZWN0RWxlbWVudC0+Z2V0T2JqZWN0SW5zdGFuY2UoKSwgZmFsc2Up
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKyAgICBpZiAobi0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OmFwcGxldCgpKSkgeworICAgICAgICBIVE1MQXBwbGV0RWxlbWVudEltcGwgKmFw
cGxldEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MQXBwbGV0RWxlbWVudEltcGwgKj4obik7Cisg
ICAgICAgIGlmIChhcHBsZXRFbGVtZW50LT5nZXRBcHBsZXRJbnN0YW5jZSgpKQorICAgICAgICAg
ICAgLy8gVGhlIGluc3RhbmNlIGlzIG93bmVkIGJ5IHRoZSBhcHBsZXQgZWxlbWVudC4KKyAgICAg
ICAgICAgIHJldHVybiBuZXcgUnVudGltZU9iamVjdEltcChhcHBsZXRFbGVtZW50LT5nZXRBcHBs
ZXRJbnN0YW5jZSgpLCBmYWxzZSk7CisgICAgfQorICAgIGVsc2UgaWYgKG4tPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjplbWJlZCgpKSkgeworICAgICAgICBIVE1MRW1iZWRFbGVtZW50SW1wbCAqZW1i
ZWRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEVtYmVkRWxlbWVudEltcGwgKj4obik7CisgICAg
ICAgIGlmIChlbWJlZEVsZW1lbnQtPmdldEVtYmVkSW5zdGFuY2UoKSkKKyAgICAgICAgICAgIHJl
dHVybiBuZXcgUnVudGltZU9iamVjdEltcChlbWJlZEVsZW1lbnQtPmdldEVtYmVkSW5zdGFuY2Uo
KSwgZmFsc2UpOworICAgIH0KKyAgICBlbHNlIGlmIChuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
b2JqZWN0KCkpKSB7CisgICAgICAgIEhUTUxPYmplY3RFbGVtZW50SW1wbCAqb2JqZWN0RWxlbWVu
dCA9IHN0YXRpY19jYXN0PEhUTUxPYmplY3RFbGVtZW50SW1wbCAqPihuKTsKKyAgICAgICAgaWYg
KG9iamVjdEVsZW1lbnQtPmdldE9iamVjdEluc3RhbmNlKCkpCisgICAgICAgICAgICByZXR1cm4g
bmV3IFJ1bnRpbWVPYmplY3RJbXAob2JqZWN0RWxlbWVudC0+Z2V0T2JqZWN0SW5zdGFuY2UoKSwg
ZmFsc2UpOwogICAgIH0KICAgICAKICAgICAvLyBJZiB3ZSBkb24ndCBoYXZlIGEgcnVudGltZSBv
YmplY3QgcmV0dXJuIDAuCkluZGV4OiBraHRtbC9lY21hL2tqc19odG1sLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lY21hL2tqc19odG1sLmNwcCx2CnJl
dHJpZXZpbmcgcmV2aXNpb24gMS4xMTgKZGlmZiAtdSAtcCAtcjEuMTE4IGtodG1sL2VjbWEva2pz
X2h0bWwuY3BwCi0tLSBraHRtbC9lY21hL2tqc19odG1sLmNwcAkyMiBKdW4gMjAwNSAwMDo0ODo0
NCAtMDAwMAkxLjExOAorKysga2h0bWwvZWNtYS9ranNfaHRtbC5jcHAJMjMgSnVuIDIwMDUgMDE6
MTA6MzQgLTAwMDAKQEAgLTQ2LDggKzQ2LDYgQEAKICNpbmNsdWRlICJranNfZXZlbnRzLmgiCiAj
aW5jbHVkZSAia2pzX3Byb3h5LmgiCiAKLSNpbmNsdWRlICJtaXNjL2h0bWx0YWdzLmgiCi0KICNp
bmNsdWRlICJyZW5kZXJpbmcvcmVuZGVyX2NhbnZhc2ltYWdlLmgiCiAjaW5jbHVkZSAicmVuZGVy
aW5nL3JlbmRlcl9vYmplY3QuaCIKICNpbmNsdWRlICJyZW5kZXJpbmcvcmVuZGVyX2xheWVyLmgi
CkBAIC0xMDksNiArMTA3LDcgQEAgdXNpbmcgRE9NOjpIVE1MTWFwRWxlbWVudEltcGw7CiB1c2lu
ZyBET006OkhUTUxNZW51RWxlbWVudEltcGw7CiB1c2luZyBET006OkhUTUxNZXRhRWxlbWVudElt
cGw7CiB1c2luZyBET006OkhUTUxNb2RFbGVtZW50SW1wbDsKK3VzaW5nIERPTTo6SFRNTE5hbWVz
OwogdXNpbmcgRE9NOjpIVE1MT0xpc3RFbGVtZW50SW1wbDsKIHVzaW5nIERPTTo6SFRNTE9iamVj
dEVsZW1lbnRJbXBsOwogdXNpbmcgRE9NOjpIVE1MT3B0R3JvdXBFbGVtZW50SW1wbDsKQEAgLTM1
Myw3ICszNTIsNyBAQCBWYWx1ZSBIVE1MRG9jdW1lbnQ6OnRyeUdldChFeGVjU3RhdGUgKmV4CiAg
IGlmICh2YWwpCiAgICAgcmV0dXJuIFZhbHVlKHZhbCk7CiAKLSAgSFRNTEJvZHlFbGVtZW50SW1w
bCAqYm9keUVsZW1lbnQgPSAoYm9keSAmJiBib2R5LT5pZCgpID09IElEX0JPRFkpID8gc3RhdGlj
X2Nhc3Q8SFRNTEJvZHlFbGVtZW50SW1wbCAqPihib2R5KSA6IDA7CisgIEhUTUxCb2R5RWxlbWVu
dEltcGwgKmJvZHlFbGVtZW50ID0gKGJvZHkgJiYgYm9keS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
OmJvZHkoKSkpID8gc3RhdGljX2Nhc3Q8SFRNTEJvZHlFbGVtZW50SW1wbCAqPihib2R5KSA6IDA7
CiAKICAgaWYgKGVudHJ5KSB7CiAgICAgc3dpdGNoIChlbnRyeS0+dmFsdWUpIHsKQEAgLTQyOCw3
ICs0MjcsNyBAQCB2b2lkIEtKUzo6SFRNTERvY3VtZW50OjpwdXRWYWx1ZShFeGVjU3RhCiAgIERP
TUV4Y2VwdGlvblRyYW5zbGF0b3IgZXhjZXB0aW9uKGV4ZWMpOwogICBIVE1MRG9jdW1lbnRJbXBs
ICZkb2MgPSAqc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50SW1wbCAqPihpbXBsKCkpOwogICBIVE1M
RWxlbWVudEltcGwgKmJvZHkgPSBkb2MuYm9keSgpOwotICBIVE1MQm9keUVsZW1lbnRJbXBsICpi
b2R5RWxlbWVudCA9IChib2R5ICYmIGJvZHktPmlkKCkgPT0gSURfQk9EWSkgPyBzdGF0aWNfY2Fz
dDxIVE1MQm9keUVsZW1lbnRJbXBsICo+KGJvZHkpIDogMDsKKyAgSFRNTEJvZHlFbGVtZW50SW1w
bCAqYm9keUVsZW1lbnQgPSAoYm9keSAmJiBib2R5LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Ym9k
eSgpKSkgPyBzdGF0aWNfY2FzdDxIVE1MQm9keUVsZW1lbnRJbXBsICo+KGJvZHkpIDogMDsKIAog
ICBzd2l0Y2ggKHRva2VuKSB7CiAgIGNhc2UgVGl0bGU6CkBAIC01ODIsMTMzICs1ODEsMjE4IEBA
IGNvbnN0IENsYXNzSW5mbyBLSlM6OkhUTUxFbGVtZW50OjptYXJxdWUKIAogY29uc3QgQ2xhc3NJ
bmZvKiBLSlM6OkhUTUxFbGVtZW50OjpjbGFzc0luZm8oKSBjb25zdAogewotICBzd2l0Y2ggKGlt
cGwoKS0+aWQoKSkgewotICBjYXNlIElEX0hUTUw6Ci0gICAgcmV0dXJuICZodG1sX2luZm87Ci0g
IGNhc2UgSURfSEVBRDoKLSAgICByZXR1cm4gJmhlYWRfaW5mbzsKLSAgY2FzZSBJRF9MSU5LOgot
ICAgIHJldHVybiAmbGlua19pbmZvOwotICBjYXNlIElEX1RJVExFOgotICAgIHJldHVybiAmdGl0
bGVfaW5mbzsKLSAgY2FzZSBJRF9NRVRBOgotICAgIHJldHVybiAmbWV0YV9pbmZvOwotICBjYXNl
IElEX0JBU0U6Ci0gICAgcmV0dXJuICZiYXNlX2luZm87Ci0gIGNhc2UgSURfSVNJTkRFWDoKLSAg
ICByZXR1cm4gJmlzSW5kZXhfaW5mbzsKLSAgY2FzZSBJRF9TVFlMRToKLSAgICByZXR1cm4gJnN0
eWxlX2luZm87Ci0gIGNhc2UgSURfQk9EWToKLSAgICByZXR1cm4gJmJvZHlfaW5mbzsKLSAgY2Fz
ZSBJRF9GT1JNOgotICAgIHJldHVybiAmZm9ybV9pbmZvOwotICBjYXNlIElEX1NFTEVDVDoKLSAg
ICByZXR1cm4gJnNlbGVjdF9pbmZvOwotICBjYXNlIElEX09QVEdST1VQOgotICAgIHJldHVybiAm
b3B0R3JvdXBfaW5mbzsKLSAgY2FzZSBJRF9PUFRJT046Ci0gICAgcmV0dXJuICZvcHRpb25faW5m
bzsKLSAgY2FzZSBJRF9JTlBVVDoKLSAgICByZXR1cm4gJmlucHV0X2luZm87Ci0gIGNhc2UgSURf
VEVYVEFSRUE6Ci0gICAgcmV0dXJuICZ0ZXh0QXJlYV9pbmZvOwotICBjYXNlIElEX0JVVFRPTjoK
LSAgICByZXR1cm4gJmJ1dHRvbl9pbmZvOwotICBjYXNlIElEX0xBQkVMOgotICAgIHJldHVybiAm
bGFiZWxfaW5mbzsKLSAgY2FzZSBJRF9GSUVMRFNFVDoKLSAgICByZXR1cm4gJmZpZWxkU2V0X2lu
Zm87Ci0gIGNhc2UgSURfTEVHRU5EOgotICAgIHJldHVybiAmbGVnZW5kX2luZm87Ci0gIGNhc2Ug
SURfVUw6Ci0gICAgcmV0dXJuICZ1bF9pbmZvOwotICBjYXNlIElEX09MOgotICAgIHJldHVybiAm
b2xfaW5mbzsKLSAgY2FzZSBJRF9ETDoKLSAgICByZXR1cm4gJmRsX2luZm87Ci0gIGNhc2UgSURf
RElSOgotICAgIHJldHVybiAmZGlyX2luZm87Ci0gIGNhc2UgSURfTUVOVToKLSAgICByZXR1cm4g
Jm1lbnVfaW5mbzsKLSAgY2FzZSBJRF9MSToKLSAgICByZXR1cm4gJmxpX2luZm87Ci0gIGNhc2Ug
SURfRElWOgotICAgIHJldHVybiAmZGl2X2luZm87Ci0gIGNhc2UgSURfUDoKLSAgICByZXR1cm4g
JnBfaW5mbzsKLSAgY2FzZSBJRF9IMToKLSAgY2FzZSBJRF9IMjoKLSAgY2FzZSBJRF9IMzoKLSAg
Y2FzZSBJRF9INDoKLSAgY2FzZSBJRF9INToKLSAgY2FzZSBJRF9INjoKLSAgICByZXR1cm4gJmhl
YWRpbmdfaW5mbzsKLSAgY2FzZSBJRF9CTE9DS1FVT1RFOgotICAgIHJldHVybiAmYmxvY2tRdW90
ZV9pbmZvOwotICBjYXNlIElEX1E6Ci0gICAgcmV0dXJuICZxX2luZm87Ci0gIGNhc2UgSURfUFJF
OgotICAgIHJldHVybiAmcHJlX2luZm87Ci0gIGNhc2UgSURfQlI6Ci0gICAgcmV0dXJuICZicl9p
bmZvOwotICBjYXNlIElEX0JBU0VGT05UOgotICAgIHJldHVybiAmYmFzZUZvbnRfaW5mbzsKLSAg
Y2FzZSBJRF9GT05UOgotICAgIHJldHVybiAmZm9udF9pbmZvOwotICBjYXNlIElEX0hSOgotICAg
IHJldHVybiAmaHJfaW5mbzsKLSAgY2FzZSBJRF9JTlM6Ci0gIGNhc2UgSURfREVMOgotICAgIHJl
dHVybiAmbW9kX2luZm87Ci0gIGNhc2UgSURfQToKLSAgICByZXR1cm4gJmFfaW5mbzsKLSAgY2Fz
ZSBJRF9DQU5WQVM6Ci0gICAgcmV0dXJuICZjYW52YXNfaW5mbzsKLSAgY2FzZSBJRF9JTUc6Ci0g
ICAgcmV0dXJuICZpbWdfaW5mbzsKLSAgY2FzZSBJRF9PQkpFQ1Q6Ci0gICAgcmV0dXJuICZvYmpl
Y3RfaW5mbzsKLSAgY2FzZSBJRF9QQVJBTToKLSAgICByZXR1cm4gJnBhcmFtX2luZm87Ci0gIGNh
c2UgSURfQVBQTEVUOgotICAgIHJldHVybiAmYXBwbGV0X2luZm87Ci0gIGNhc2UgSURfTUFQOgot
ICAgIHJldHVybiAmbWFwX2luZm87Ci0gIGNhc2UgSURfQVJFQToKLSAgICByZXR1cm4gJmFyZWFf
aW5mbzsKLSAgY2FzZSBJRF9TQ1JJUFQ6Ci0gICAgcmV0dXJuICZzY3JpcHRfaW5mbzsKLSAgY2Fz
ZSBJRF9UQUJMRToKLSAgICByZXR1cm4gJnRhYmxlX2luZm87Ci0gIGNhc2UgSURfQ0FQVElPTjoK
LSAgICByZXR1cm4gJmNhcHRpb25faW5mbzsKLSAgY2FzZSBJRF9DT0w6Ci0gICAgcmV0dXJuICZj
b2xfaW5mbzsKLSAgY2FzZSBJRF9USEVBRDoKLSAgICByZXR1cm4gJnRhYmxlc2VjdGlvbl9pbmZv
OwotICBjYXNlIElEX1RCT0RZOgotICAgIHJldHVybiAmdGFibGVzZWN0aW9uX2luZm87Ci0gIGNh
c2UgSURfVEZPT1Q6Ci0gICAgcmV0dXJuICZ0YWJsZXNlY3Rpb25faW5mbzsKLSAgY2FzZSBJRF9U
UjoKLSAgICByZXR1cm4gJnRyX2luZm87Ci0gIGNhc2UgSURfVEg6Ci0gICAgcmV0dXJuICZ0YWJs
ZWNlbGxfaW5mbzsKLSAgY2FzZSBJRF9URDoKLSAgICByZXR1cm4gJnRhYmxlY2VsbF9pbmZvOwot
ICBjYXNlIElEX0ZSQU1FU0VUOgotICAgIHJldHVybiAmZnJhbWVTZXRfaW5mbzsKLSAgY2FzZSBJ
RF9GUkFNRToKLSAgICByZXR1cm4gJmZyYW1lX2luZm87Ci0gIGNhc2UgSURfSUZSQU1FOgotICAg
IHJldHVybiAmaUZyYW1lX2luZm87Ci0gIGNhc2UgSURfTUFSUVVFRToKLSAgICByZXR1cm4gJm1h
cnF1ZWVfaW5mbzsKLSAgZGVmYXVsdDoKKyAgICAvLyBXZSBhbHJlYWR5IGtub3cgd2UgaGF2ZSBh
biBIVE1MIGVsZW1lbnQsIHNvIHdlIG9ubHkgbmVlZCB0byBjb21wYXJlIHRoZSBsb2NhbE5hbWUg
Y29tcG9uZW50IG9mIHRoZSBxdWFsaWZpZWQgbmFtZS4KKyAgICBzdGF0aWMgUVB0ckRpY3Q8Y29u
c3QgQ2xhc3NJbmZvPiBjbGFzc0luZm9EaWN0OworICAgIGlmIChjbGFzc0luZm9EaWN0LmlzRW1w
dHkoKSkgeworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmEoKS5sb2Nh
bE5hbWVQdHIoKSwgJmFfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxO
YW1lczo6YXBwbGV0KCkubG9jYWxOYW1lUHRyKCksICZhcHBsZXRfaW5mbyk7CisgICAgICAgIGNs
YXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6YXJlYSgpLmxvY2FsTmFtZVB0cigpLCAmYXJl
YV9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpiYXNlKCku
bG9jYWxOYW1lUHRyKCksICZiYXNlX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2Vy
dChIVE1MTmFtZXM6OmJhc2Vmb250KCkubG9jYWxOYW1lUHRyKCksICZiYXNlRm9udF9pbmZvKTsK
KyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpibG9ja3F1b3RlKCkubG9j
YWxOYW1lUHRyKCksICZibG9ja1F1b3RlX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmlu
c2VydChIVE1MTmFtZXM6OmJvZHkoKS5sb2NhbE5hbWVQdHIoKSwgJmJvZHlfaW5mbyk7CisgICAg
ICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6YnIoKS5sb2NhbE5hbWVQdHIoKSwg
JmJyX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmJ1dHRv
bigpLmxvY2FsTmFtZVB0cigpLCAmYnV0dG9uX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0
Lmluc2VydChIVE1MTmFtZXM6OmNhbnZhcygpLmxvY2FsTmFtZVB0cigpLCAmY2FudmFzX2luZm8p
OworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmNhcHRpb24oKS5sb2Nh
bE5hbWVQdHIoKSwgJmNhcHRpb25faW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0
KEhUTUxOYW1lczo6Y29sKCkubG9jYWxOYW1lUHRyKCksICZjb2xfaW5mbyk7CisgICAgICAgIGNs
YXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6Y29sZ3JvdXAoKS5sb2NhbE5hbWVQdHIoKSwg
JmNvbF9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpkZWwo
KS5sb2NhbE5hbWVQdHIoKSwgJm1vZF9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNl
cnQoSFRNTE5hbWVzOjpkaXIoKS5sb2NhbE5hbWVQdHIoKSwgJmRpcl9pbmZvKTsKKyAgICAgICAg
Y2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpkaXYoKS5sb2NhbE5hbWVQdHIoKSwgJmRp
dl9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpkbCgpLmxv
Y2FsTmFtZVB0cigpLCAmZGxfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhU
TUxOYW1lczo6ZmllbGRzZXQoKS5sb2NhbE5hbWVQdHIoKSwgJmZpZWxkU2V0X2luZm8pOworICAg
ICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmZvbnQoKS5sb2NhbE5hbWVQdHIo
KSwgJmZvbnRfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6
Zm9ybSgpLmxvY2FsTmFtZVB0cigpLCAmZm9ybV9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGlj
dC5pbnNlcnQoSFRNTE5hbWVzOjpmcmFtZSgpLmxvY2FsTmFtZVB0cigpLCAmZnJhbWVfaW5mbyk7
CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6ZnJhbWVzZXQoKS5sb2Nh
bE5hbWVQdHIoKSwgJmZyYW1lU2V0X2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2Vy
dChIVE1MTmFtZXM6OmgxKCkubG9jYWxOYW1lUHRyKCksICZoZWFkaW5nX2luZm8pOworICAgICAg
ICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmgyKCkubG9jYWxOYW1lUHRyKCksICZo
ZWFkaW5nX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Omgz
KCkubG9jYWxOYW1lUHRyKCksICZoZWFkaW5nX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0
Lmluc2VydChIVE1MTmFtZXM6Omg0KCkubG9jYWxOYW1lUHRyKCksICZoZWFkaW5nX2luZm8pOwor
ICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Omg1KCkubG9jYWxOYW1lUHRy
KCksICZoZWFkaW5nX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFt
ZXM6Omg2KCkubG9jYWxOYW1lUHRyKCksICZoZWFkaW5nX2luZm8pOworICAgICAgICBjbGFzc0lu
Zm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmhlYWQoKS5sb2NhbE5hbWVQdHIoKSwgJmhlYWRfaW5m
byk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6aHIoKS5sb2NhbE5h
bWVQdHIoKSwgJmhyX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFt
ZXM6Omh0bWwoKS5sb2NhbE5hbWVQdHIoKSwgJmh0bWxfaW5mbyk7CisgICAgICAgIGNsYXNzSW5m
b0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6aWZyYW1lKCkubG9jYWxOYW1lUHRyKCksICZpRnJhbWVf
aW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6aW1nKCkubG9j
YWxOYW1lUHRyKCksICZpbWdfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhU
TUxOYW1lczo6aW5wdXQoKS5sb2NhbE5hbWVQdHIoKSwgJmlucHV0X2luZm8pOworICAgICAgICBj
bGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmlucygpLmxvY2FsTmFtZVB0cigpLCAmbW9k
X2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmlzaW5kZXgo
KS5sb2NhbE5hbWVQdHIoKSwgJmlzSW5kZXhfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3Qu
aW5zZXJ0KEhUTUxOYW1lczo6bGFiZWwoKS5sb2NhbE5hbWVQdHIoKSwgJmxhYmVsX2luZm8pOwor
ICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmxlZ2VuZCgpLmxvY2FsTmFt
ZVB0cigpLCAmbGVnZW5kX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1M
TmFtZXM6OmxpKCkubG9jYWxOYW1lUHRyKCksICZsaV9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZv
RGljdC5pbnNlcnQoSFRNTE5hbWVzOjpsaW5rKCkubG9jYWxOYW1lUHRyKCksICZsaW5rX2luZm8p
OworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Om1hcCgpLmxvY2FsTmFt
ZVB0cigpLCAmbWFwX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFt
ZXM6Om1hcnF1ZWUoKS5sb2NhbE5hbWVQdHIoKSwgJm1hcnF1ZWVfaW5mbyk7CisgICAgICAgIGNs
YXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6bWVudSgpLmxvY2FsTmFtZVB0cigpLCAmbWVu
dV9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjptZXRhKCku
bG9jYWxOYW1lUHRyKCksICZtZXRhX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2Vy
dChIVE1MTmFtZXM6Om9iamVjdCgpLmxvY2FsTmFtZVB0cigpLCAmb2JqZWN0X2luZm8pOworICAg
ICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Om9sKCkubG9jYWxOYW1lUHRyKCks
ICZvbF9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpvcHRp
b24oKS5sb2NhbE5hbWVQdHIoKSwgJm9wdGlvbl9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGlj
dC5pbnNlcnQoSFRNTE5hbWVzOjpvcHRncm91cCgpLmxvY2FsTmFtZVB0cigpLCAmb3B0R3JvdXBf
aW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6cCgpLmxvY2Fs
TmFtZVB0cigpLCAmcF9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5h
bWVzOjpwYXJhbSgpLmxvY2FsTmFtZVB0cigpLCAmcGFyYW1faW5mbyk7CisgICAgICAgIGNsYXNz
SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6cHJlKCkubG9jYWxOYW1lUHRyKCksICZwcmVfaW5m
byk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6cSgpLmxvY2FsTmFt
ZVB0cigpLCAmcV9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVz
OjpzY3JpcHQoKS5sb2NhbE5hbWVQdHIoKSwgJnNjcmlwdF9pbmZvKTsKKyAgICAgICAgY2xhc3NJ
bmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpzZWxlY3QoKS5sb2NhbE5hbWVQdHIoKSwgJnNlbGVj
dF9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpzdHlsZSgp
LmxvY2FsTmFtZVB0cigpLCAmc3R5bGVfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5z
ZXJ0KEhUTUxOYW1lczo6dGFibGUoKS5sb2NhbE5hbWVQdHIoKSwgJnRhYmxlX2luZm8pOworICAg
ICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OnRib2R5KCkubG9jYWxOYW1lUHRy
KCksICZ0YWJsZXNlY3Rpb25faW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhU
TUxOYW1lczo6dGQoKS5sb2NhbE5hbWVQdHIoKSwgJnRhYmxlY2VsbF9pbmZvKTsKKyAgICAgICAg
Y2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjp0ZXh0YXJlYSgpLmxvY2FsTmFtZVB0cigp
LCAmdGV4dEFyZWFfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1l
czo6dGgoKS5sb2NhbE5hbWVQdHIoKSwgJnRhYmxlY2VsbF9pbmZvKTsKKyAgICAgICAgY2xhc3NJ
bmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjp0aGVhZCgpLmxvY2FsTmFtZVB0cigpLCAmdGFibGVz
ZWN0aW9uX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OnRm
b290KCkubG9jYWxOYW1lUHRyKCksICZ0YWJsZXNlY3Rpb25faW5mbyk7CisgICAgICAgIGNsYXNz
SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6dGl0bGUoKS5sb2NhbE5hbWVQdHIoKSwgJnRpdGxl
X2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OnRyKCkubG9j
YWxOYW1lUHRyKCksICZ0cl9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRN
TE5hbWVzOjp1bCgpLmxvY2FsTmFtZVB0cigpLCAmdWxfaW5mbyk7CisgICAgfQorICAgIAorICAg
IEhUTUxFbGVtZW50SW1wbCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCo+
KGltcGwoKSk7CisgICAgY29uc3QgQ2xhc3NJbmZvKiByZXN1bHQgPSBjbGFzc0luZm9EaWN0LmZp
bmQoZWxlbWVudC0+bG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSk7CisgICAgaWYgKHJlc3Vs
dCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICByZXR1cm4gJmluZm87Ci0gIH0KIH0KKwor
Y29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6Omh0bWxfZ2V0c2V0ID0g
eyAmSFRNTEVsZW1lbnQ6Omh0bWxHZXR0ZXIsICZIVE1MRWxlbWVudDo6aHRtbFNldHRlciB9Owor
Y29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmhlYWRfZ2V0c2V0ID0g
eyAmSFRNTEVsZW1lbnQ6OmhlYWRHZXR0ZXIsICZIVE1MRWxlbWVudDo6aGVhZFNldHRlciB9Owor
Y29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmxpbmtfZ2V0c2V0ID0g
eyAmSFRNTEVsZW1lbnQ6OmxpbmtHZXR0ZXIsICZIVE1MRWxlbWVudDo6bGlua1NldHRlciB9Owor
Y29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OnRpdGxlX2dldHNldCA9
IHsgJkhUTUxFbGVtZW50Ojp0aXRsZUdldHRlciwgJkhUTUxFbGVtZW50Ojp0aXRsZVNldHRlciB9
OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6Om1ldGFfZ2V0c2V0
ID0geyAmSFRNTEVsZW1lbnQ6Om1ldGFHZXR0ZXIsICZIVE1MRWxlbWVudDo6bWV0YVNldHRlciB9
OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmJhc2VfZ2V0c2V0
ID0geyAmSFRNTEVsZW1lbnQ6OmJhc2VHZXR0ZXIsICZIVE1MRWxlbWVudDo6YmFzZVNldHRlciB9
OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmlzSW5kZXhfZ2V0
c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmlzSW5kZXhHZXR0ZXIsICZIVE1MRWxlbWVudDo6aXNJbmRl
eFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OnN0
eWxlX2dldHNldCA9IHsgJkhUTUxFbGVtZW50OjpzdHlsZUdldHRlciwgJkhUTUxFbGVtZW50Ojpz
dHlsZVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6
OmJvZHlfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmJvZHlHZXR0ZXIsICZIVE1MRWxlbWVudDo6
Ym9keVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6
OmZvcm1fZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmZvcm1HZXR0ZXIsICZIVE1MRWxlbWVudDo6
Zm9ybVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6
OnNlbGVjdF9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6c2VsZWN0R2V0dGVyLCAmSFRNTEVsZW1l
bnQ6OnNlbGVjdFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVs
ZW1lbnQ6Om9wdEdyb3VwX2dldHNldCA9IHsgJkhUTUxFbGVtZW50OjpvcHRHcm91cEdldHRlciwg
JkhUTUxFbGVtZW50OjpvcHRHcm91cFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNl
dEluZm8gSFRNTEVsZW1lbnQ6Om9wdGlvbl9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6b3B0aW9u
R2V0dGVyLCAmSFRNTEVsZW1lbnQ6Om9wdGlvblNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6
OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmlucHV0X2dldHNldCA9IHsgJkhUTUxFbGVtZW50Ojpp
bnB1dEdldHRlciwgJkhUTUxFbGVtZW50OjppbnB1dFNldHRlciB9OworY29uc3QgSFRNTEVsZW1l
bnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OnRleHRBcmVhX2dldHNldCA9IHsgJkhUTUxFbGVt
ZW50Ojp0ZXh0QXJlYUdldHRlciwgJkhUTUxFbGVtZW50Ojp0ZXh0QXJlYVNldHRlciB9OworY29u
c3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmJ1dHRvbl9nZXRzZXQgPSB7
ICZIVE1MRWxlbWVudDo6YnV0dG9uR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmJ1dHRvblNldHRlciB9
OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmxhYmVsX2dldHNl
dCA9IHsgJkhUTUxFbGVtZW50OjpsYWJlbEdldHRlciwgJkhUTUxFbGVtZW50OjpsYWJlbFNldHRl
ciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmZpZWxkU2V0
X2dldHNldCA9IHsgJkhUTUxFbGVtZW50OjpmaWVsZFNldEdldHRlciwgJkhUTUxFbGVtZW50Ojpm
aWVsZFNldFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1l
bnQ6OmxlZ2VuZF9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6bGVnZW5kR2V0dGVyLCAmSFRNTEVs
ZW1lbnQ6OmxlZ2VuZFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRN
TEVsZW1lbnQ6OnVsX2dldHNldCA9IHsgJkhUTUxFbGVtZW50Ojp1TGlzdEdldHRlciwgJkhUTUxF
bGVtZW50Ojp1TGlzdFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRN
TEVsZW1lbnQ6Om9sX2dldHNldCA9IHsgJkhUTUxFbGVtZW50OjpvTGlzdEdldHRlciwgJkhUTUxF
bGVtZW50OjpvTGlzdFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRN
TEVsZW1lbnQ6OmRsX2dldHNldCA9IHsgJkhUTUxFbGVtZW50OjpkTGlzdEdldHRlciwgJkhUTUxF
bGVtZW50OjpkTGlzdFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRN
TEVsZW1lbnQ6OmRpcl9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6ZGlyR2V0dGVyLCAmSFRNTEVs
ZW1lbnQ6OmRpclNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVs
ZW1lbnQ6Om1lbnVfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6Om1lbnVHZXR0ZXIsICZIVE1MRWxl
bWVudDo6bWVudVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVs
ZW1lbnQ6OmxpX2dldHNldCA9IHsgJkhUTUxFbGVtZW50OjpsaUdldHRlciwgJkhUTUxFbGVtZW50
OjpsaVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6
OmRpdl9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6ZGl2R2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmRp
dlNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OnBf
Z2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OnBhcmFncmFwaEdldHRlciwgJkhUTUxFbGVtZW50Ojpw
YXJhZ3JhcGhTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVt
ZW50OjpoZWFkaW5nX2dldHNldCA9IHsgJkhUTUxFbGVtZW50OjpoZWFkaW5nR2V0dGVyLCAmSFRN
TEVsZW1lbnQ6OmhlYWRpbmdTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZv
IEhUTUxFbGVtZW50OjpibG9ja1F1b3RlX2dldHNldCA9IHsgJkhUTUxFbGVtZW50OjpibG9ja1F1
b3RlR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmJsb2NrUXVvdGVTZXR0ZXIgfTsKK2NvbnN0IEhUTUxF
bGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjpxX2dldHNldCA9IHsgJkhUTUxFbGVtZW50
OjpxdW90ZUdldHRlciwgJkhUTUxFbGVtZW50OjpxdW90ZVNldHRlciB9OworY29uc3QgSFRNTEVs
ZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OnByZV9nZXRzZXQgPSB7ICZIVE1MRWxlbWVu
dDo6cHJlR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OnByZVNldHRlciB9OworY29uc3QgSFRNTEVsZW1l
bnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmJyX2dldHNldCA9IHsgJkhUTUxFbGVtZW50Ojpi
ckdldHRlciwgJkhUTUxFbGVtZW50OjpiclNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6Okdl
dFNldEluZm8gSFRNTEVsZW1lbnQ6OmJhc2VGb250X2dldHNldCA9IHsgJkhUTUxFbGVtZW50Ojpi
YXNlRm9udEdldHRlciwgJkhUTUxFbGVtZW50OjpiYXNlRm9udFNldHRlciB9OworY29uc3QgSFRN
TEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmZvbnRfZ2V0c2V0ID0geyAmSFRNTEVs
ZW1lbnQ6OmZvbnRHZXR0ZXIsICZIVE1MRWxlbWVudDo6Zm9udFNldHRlciB9OworY29uc3QgSFRN
TEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmhyX2dldHNldCA9IHsgJkhUTUxFbGVt
ZW50OjpockdldHRlciwgJkhUTUxFbGVtZW50OjpoclNldHRlciB9OworY29uc3QgSFRNTEVsZW1l
bnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6Om1vZF9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6
bW9kR2V0dGVyLCAmSFRNTEVsZW1lbnQ6Om1vZFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6
OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmFfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmFuY2hv
ckdldHRlciwgJkhUTUxFbGVtZW50OjphbmNob3JTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50
OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjpjYW52YXNfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6
OmltYWdlR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmltYWdlU2V0dGVyIH07Citjb25zdCBIVE1MRWxl
bWVudDo6R2V0U2V0SW5mbyBIVE1MRWxlbWVudDo6aW1nX2dldHNldCA9IHsgJkhUTUxFbGVtZW50
OjppbWFnZUdldHRlciwgJkhUTUxFbGVtZW50OjppbWFnZVNldHRlciB9OworY29uc3QgSFRNTEVs
ZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6Om9iamVjdF9nZXRzZXQgPSB7ICZIVE1MRWxl
bWVudDo6b2JqZWN0R2V0dGVyLCAmSFRNTEVsZW1lbnQ6Om9iamVjdFNldHRlciB9OworY29uc3Qg
SFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OnBhcmFtX2dldHNldCA9IHsgJkhU
TUxFbGVtZW50OjpwYXJhbUdldHRlciwgJkhUTUxFbGVtZW50OjpwYXJhbVNldHRlciB9OworY29u
c3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmFwcGxldF9nZXRzZXQgPSB7
ICZIVE1MRWxlbWVudDo6YXBwbGV0R2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmFwcGxldFNldHRlciB9
OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6Om1hcF9nZXRzZXQg
PSB7ICZIVE1MRWxlbWVudDo6bWFwR2V0dGVyLCAmSFRNTEVsZW1lbnQ6Om1hcFNldHRlciB9Owor
Y29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmFyZWFfZ2V0c2V0ID0g
eyAmSFRNTEVsZW1lbnQ6OmFyZWFHZXR0ZXIsICZIVE1MRWxlbWVudDo6YXJlYVNldHRlciB9Owor
Y29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OnNjcmlwdF9nZXRzZXQg
PSB7ICZIVE1MRWxlbWVudDo6c2NyaXB0R2V0dGVyLCAmSFRNTEVsZW1lbnQ6OnNjcmlwdFNldHRl
ciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OnRhYmxlX2dl
dHNldCA9IHsgJkhUTUxFbGVtZW50Ojp0YWJsZUdldHRlciwgJkhUTUxFbGVtZW50Ojp0YWJsZVNl
dHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmNhcHRp
b25fZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OnRhYmxlQ2FwdGlvbkdldHRlciwgJkhUTUxFbGVt
ZW50Ojp0YWJsZUNhcHRpb25TZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZv
IEhUTUxFbGVtZW50Ojpjb2xfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OnRhYmxlQ29sR2V0dGVy
LCAmSFRNTEVsZW1lbnQ6OnRhYmxlQ29sU2V0dGVyIH07Citjb25zdCBIVE1MRWxlbWVudDo6R2V0
U2V0SW5mbyBIVE1MRWxlbWVudDo6dGFibGVzZWN0aW9uX2dldHNldCA9IHsgJkhUTUxFbGVtZW50
Ojp0YWJsZVNlY3Rpb25HZXR0ZXIsICZIVE1MRWxlbWVudDo6dGFibGVTZWN0aW9uU2V0dGVyIH07
Citjb25zdCBIVE1MRWxlbWVudDo6R2V0U2V0SW5mbyBIVE1MRWxlbWVudDo6dHJfZ2V0c2V0ID0g
eyAmSFRNTEVsZW1lbnQ6OnRhYmxlUm93R2V0dGVyLCAmSFRNTEVsZW1lbnQ6OnRhYmxlUm93U2V0
dGVyIH07Citjb25zdCBIVE1MRWxlbWVudDo6R2V0U2V0SW5mbyBIVE1MRWxlbWVudDo6dGFibGVj
ZWxsX2dldHNldCA9IHsgJkhUTUxFbGVtZW50Ojp0YWJsZUNlbGxHZXR0ZXIsICZIVE1MRWxlbWVu
dDo6dGFibGVDZWxsU2V0dGVyIH07Citjb25zdCBIVE1MRWxlbWVudDo6R2V0U2V0SW5mbyBIVE1M
RWxlbWVudDo6ZnJhbWVTZXRfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmZyYW1lU2V0R2V0dGVy
LCAmSFRNTEVsZW1lbnQ6OmZyYW1lU2V0U2V0dGVyIH07Citjb25zdCBIVE1MRWxlbWVudDo6R2V0
U2V0SW5mbyBIVE1MRWxlbWVudDo6ZnJhbWVfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmZyYW1l
R2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmZyYW1lU2V0dGVyIH07Citjb25zdCBIVE1MRWxlbWVudDo6
R2V0U2V0SW5mbyBIVE1MRWxlbWVudDo6aUZyYW1lX2dldHNldCA9IHsgJkhUTUxFbGVtZW50Ojpp
RnJhbWVHZXR0ZXIsICZIVE1MRWxlbWVudDo6aUZyYW1lU2V0dGVyIH07Citjb25zdCBIVE1MRWxl
bWVudDo6R2V0U2V0SW5mbyBIVE1MRWxlbWVudDo6bWFycXVlZV9nZXRzZXQgPSB7ICZIVE1MRWxl
bWVudDo6bWFycXVlZUdldHRlciwgJkhUTUxFbGVtZW50OjptYXJxdWVlU2V0dGVyIH07CisKK2Nv
bnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvKiBIVE1MRWxlbWVudDo6Z2V0U2V0SW5mbygpIGNv
bnN0Cit7CisgICAgLy8gV2UgYWxyZWFkeSBrbm93IHdlIGhhdmUgYW4gSFRNTCBlbGVtZW50LCBz
byB3ZSBvbmx5IG5lZWQgdG8gY29tcGFyZSB0aGUgbG9jYWxOYW1lIGNvbXBvbmVudCBvZiB0aGUg
cXVhbGlmaWVkIG5hbWUuCisgICAgc3RhdGljIFFQdHJEaWN0PGNvbnN0IEhUTUxFbGVtZW50OjpH
ZXRTZXRJbmZvPiBnZXRTZXRJbmZvRGljdDsKKyAgICBpZiAoZ2V0U2V0SW5mb0RpY3QuaXNFbXB0
eSgpKSB7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmEoKS5sb2Nh
bE5hbWVQdHIoKSwgJmFfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhU
TUxOYW1lczo6YXBwbGV0KCkubG9jYWxOYW1lUHRyKCksICZhcHBsZXRfZ2V0c2V0KTsKKyAgICAg
ICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6YXJlYSgpLmxvY2FsTmFtZVB0cigp
LCAmYXJlYV9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVz
OjpiYXNlKCkubG9jYWxOYW1lUHRyKCksICZiYXNlX2dldHNldCk7CisgICAgICAgIGdldFNldElu
Zm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmJhc2Vmb250KCkubG9jYWxOYW1lUHRyKCksICZiYXNl
Rm9udF9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpi
bG9ja3F1b3RlKCkubG9jYWxOYW1lUHRyKCksICZibG9ja1F1b3RlX2dldHNldCk7IAorICAgICAg
ICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpib2R5KCkubG9jYWxOYW1lUHRyKCks
ICZib2R5X2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6
OmJyKCkubG9jYWxOYW1lUHRyKCksICZicl9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGlj
dC5pbnNlcnQoSFRNTE5hbWVzOjpidXR0b24oKS5sb2NhbE5hbWVQdHIoKSwgJmJ1dHRvbl9nZXRz
ZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpjYW52YXMoKS5s
b2NhbE5hbWVQdHIoKSwgJmNhbnZhc19nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5p
bnNlcnQoSFRNTE5hbWVzOjpjYXB0aW9uKCkubG9jYWxOYW1lUHRyKCksICZjYXB0aW9uX2dldHNl
dCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmNvbCgpLmxvY2Fs
TmFtZVB0cigpLCAmY29sX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChI
VE1MTmFtZXM6OmNvbGdyb3VwKCkubG9jYWxOYW1lUHRyKCksICZjb2xfZ2V0c2V0KTsKKyAgICAg
ICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6ZGVsKCkubG9jYWxOYW1lUHRyKCks
ICZtb2RfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6
ZGlyKCkubG9jYWxOYW1lUHRyKCksICZkaXJfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0Rp
Y3QuaW5zZXJ0KEhUTUxOYW1lczo6ZGl2KCkubG9jYWxOYW1lUHRyKCksICZkaXZfZ2V0c2V0KTsK
KyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6ZGwoKS5sb2NhbE5hbWVQ
dHIoKSwgJmRsX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFt
ZXM6OmZpZWxkc2V0KCkubG9jYWxOYW1lUHRyKCksICZmaWVsZFNldF9nZXRzZXQpOworICAgICAg
ICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpmb250KCkubG9jYWxOYW1lUHRyKCks
ICZmb250X2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6
OmZvcm0oKS5sb2NhbE5hbWVQdHIoKSwgJmZvcm1fZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5m
b0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6ZnJhbWUoKS5sb2NhbE5hbWVQdHIoKSwgJmZyYW1lX2dl
dHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmZyYW1lc2V0
KCkubG9jYWxOYW1lUHRyKCksICZmcmFtZVNldF9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZv
RGljdC5pbnNlcnQoSFRNTE5hbWVzOjpoMSgpLmxvY2FsTmFtZVB0cigpLCAmaGVhZGluZ19nZXRz
ZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpoMigpLmxvY2Fs
TmFtZVB0cigpLCAmaGVhZGluZ19nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNl
cnQoSFRNTE5hbWVzOjpoMygpLmxvY2FsTmFtZVB0cigpLCAmaGVhZGluZ19nZXRzZXQpOworICAg
ICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpoNCgpLmxvY2FsTmFtZVB0cigp
LCAmaGVhZGluZ19nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5h
bWVzOjpoNSgpLmxvY2FsTmFtZVB0cigpLCAmaGVhZGluZ19nZXRzZXQpOworICAgICAgICBnZXRT
ZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpoNigpLmxvY2FsTmFtZVB0cigpLCAmaGVhZGlu
Z19nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpoZWFk
KCkubG9jYWxOYW1lUHRyKCksICZoZWFkX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0
Lmluc2VydChIVE1MTmFtZXM6OmhyKCkubG9jYWxOYW1lUHRyKCksICZocl9nZXRzZXQpOyAKKyAg
ICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6aHRtbCgpLmxvY2FsTmFtZVB0
cigpLCAmaHRtbF9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5h
bWVzOjppZnJhbWUoKS5sb2NhbE5hbWVQdHIoKSwgJmlGcmFtZV9nZXRzZXQpOworICAgICAgICBn
ZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjppbWcoKS5sb2NhbE5hbWVQdHIoKSwgJmlt
Z19nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjppbnB1
dCgpLmxvY2FsTmFtZVB0cigpLCAmaW5wdXRfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0Rp
Y3QuaW5zZXJ0KEhUTUxOYW1lczo6aW5zKCkubG9jYWxOYW1lUHRyKCksICZtb2RfZ2V0c2V0KTsK
KyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6aXNpbmRleCgpLmxvY2Fs
TmFtZVB0cigpLCAmaXNJbmRleF9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNl
cnQoSFRNTE5hbWVzOjpsYWJlbCgpLmxvY2FsTmFtZVB0cigpLCAmbGFiZWxfZ2V0c2V0KTsKKyAg
ICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6bGVnZW5kKCkubG9jYWxOYW1l
UHRyKCksICZsZWdlbmRfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhU
TUxOYW1lczo6bGkoKS5sb2NhbE5hbWVQdHIoKSwgJmxpX2dldHNldCk7CisgICAgICAgIGdldFNl
dEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmxpbmsoKS5sb2NhbE5hbWVQdHIoKSwgJmxpbmtf
Z2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6bWFwKCku
bG9jYWxOYW1lUHRyKCksICZtYXBfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5z
ZXJ0KEhUTUxOYW1lczo6bWFycXVlZSgpLmxvY2FsTmFtZVB0cigpLCAmbWFycXVlZV9nZXRzZXQp
OworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjptZW51KCkubG9jYWxO
YW1lUHRyKCksICZtZW51X2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChI
VE1MTmFtZXM6Om1ldGEoKS5sb2NhbE5hbWVQdHIoKSwgJm1ldGFfZ2V0c2V0KTsKKyAgICAgICAg
Z2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6b2JqZWN0KCkubG9jYWxOYW1lUHRyKCks
ICZvYmplY3RfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1l
czo6b2woKS5sb2NhbE5hbWVQdHIoKSwgJm9sX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9E
aWN0Lmluc2VydChIVE1MTmFtZXM6Om9wdGlvbigpLmxvY2FsTmFtZVB0cigpLCAmb3B0aW9uX2dl
dHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Om9wdGdyb3Vw
KCkubG9jYWxOYW1lUHRyKCksICZvcHRHcm91cF9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZv
RGljdC5pbnNlcnQoSFRNTE5hbWVzOjpwKCkubG9jYWxOYW1lUHRyKCksICZwX2dldHNldCk7Cisg
ICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OnBhcmFtKCkubG9jYWxOYW1l
UHRyKCksICZwYXJhbV9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRN
TE5hbWVzOjpwcmUoKS5sb2NhbE5hbWVQdHIoKSwgJnByZV9nZXRzZXQpOworICAgICAgICBnZXRT
ZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpxKCkubG9jYWxOYW1lUHRyKCksICZxX2dldHNl
dCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OnNjcmlwdCgpLmxv
Y2FsTmFtZVB0cigpLCAmc2NyaXB0X2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmlu
c2VydChIVE1MTmFtZXM6OnNlbGVjdCgpLmxvY2FsTmFtZVB0cigpLCAmc2VsZWN0X2dldHNldCk7
CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OnN0eWxlKCkubG9jYWxO
YW1lUHRyKCksICZzdHlsZV9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQo
SFRNTE5hbWVzOjp0YWJsZSgpLmxvY2FsTmFtZVB0cigpLCAmdGFibGVfZ2V0c2V0KTsKKyAgICAg
ICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6dGJvZHkoKS5sb2NhbE5hbWVQdHIo
KSwgJnRhYmxlc2VjdGlvbl9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQo
SFRNTE5hbWVzOjp0ZCgpLmxvY2FsTmFtZVB0cigpLCAmdGFibGVjZWxsX2dldHNldCk7CisgICAg
ICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OnRleHRhcmVhKCkubG9jYWxOYW1l
UHRyKCksICZ0ZXh0QXJlYV9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQo
SFRNTE5hbWVzOjp0aCgpLmxvY2FsTmFtZVB0cigpLCAmdGFibGVjZWxsX2dldHNldCk7CisgICAg
ICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OnRoZWFkKCkubG9jYWxOYW1lUHRy
KCksICZ0YWJsZXNlY3Rpb25fZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0
KEhUTUxOYW1lczo6dGZvb3QoKS5sb2NhbE5hbWVQdHIoKSwgJnRhYmxlc2VjdGlvbl9nZXRzZXQp
OworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjp0aXRsZSgpLmxvY2Fs
TmFtZVB0cigpLCAmdGl0bGVfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0
KEhUTUxOYW1lczo6dHIoKS5sb2NhbE5hbWVQdHIoKSwgJnRyX2dldHNldCk7CisgICAgICAgIGdl
dFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OnVsKCkubG9jYWxOYW1lUHRyKCksICZ1bF9n
ZXRzZXQpOworICAgIH0KKyAgICAKKyAgICBIVE1MRWxlbWVudEltcGwqIGVsZW1lbnQgPSBzdGF0
aWNfY2FzdDxIVE1MRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIGNvbnN0IEhUTUxFbGVtZW50
OjpHZXRTZXRJbmZvKiByZXN1bHQgPSBnZXRTZXRJbmZvRGljdC5maW5kKGVsZW1lbnQtPmxvY2Fs
TmFtZSgpLmltcGxlbWVudGF0aW9uKCkpOworICAgIGlmIChyZXN1bHQpCisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgcmV0dXJuIDA7Cit9CisKIC8qCiBAYmVnaW4gSFRNTEVsZW1lbnRUYWJs
ZSAxNAogICBpZAkJS0pTOjpIVE1MRWxlbWVudDo6RWxlbWVudElkCURvbnREZWxldGUKQEAgLTEx
ODgsMzUgKzEyNzIsMzIgQEAgSFRNTEVsZW1lbnQ6OkhUTUxFbGVtZW50KEV4ZWNTdGF0ZSAqZXhl
YwogCiBWYWx1ZSBLSlM6OkhUTUxFbGVtZW50Ojp0cnlHZXQoRXhlY1N0YXRlICpleGVjLCBjb25z
dCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUpIGNvbnN0CiB7Ci0gIEhUTUxFbGVtZW50SW1wbCAm
ZWxlbWVudCA9ICpzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwgKj4oaW1wbCgpKTsKKyAgICBI
VE1MRWxlbWVudEltcGwgJmVsZW1lbnQgPSAqc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+
KGltcGwoKSk7CiAjaWZkZWYgS0pTX1ZFUkJPU0UKLSAga2REZWJ1Zyg2MDcwKSA8PCAiS0pTOjpI
VE1MRWxlbWVudDo6dHJ5R2V0ICIgPDwgcHJvcGVydHlOYW1lLnFzdHJpbmcoKSA8PCAiIHRoaXNU
YWc9IiA8PCBlbGVtZW50LnRhZ05hbWUoKS5zdHJpbmcoKSA8PCBlbmRsOworICAgIGtkRGVidWco
NjA3MCkgPDwgIktKUzo6SFRNTEVsZW1lbnQ6OnRyeUdldCAiIDw8IHByb3BlcnR5TmFtZS5xc3Ry
aW5nKCkgPDwgIiB0aGlzVGFnPSIgPDwgZWxlbWVudC50YWdOYW1lKCkuc3RyaW5nKCkgPDwgZW5k
bDsKICNlbmRpZgotICAvLyBGaXJzdCBsb29rIGF0IGR5bmFtaWMgcHJvcGVydGllcwotICBzd2l0
Y2ggKGVsZW1lbnQuaWQoKSkgewotICAgIGNhc2UgSURfRk9STTogewotICAgICAgSFRNTEZvcm1F
bGVtZW50SW1wbCAmZm9ybSA9IHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudEltcGwgJj4oZWxl
bWVudCk7Ci0gICAgICAvLyBDaGVjayBpZiB3ZSdyZSByZXRyaWV2aW5nIGFuIGVsZW1lbnQgKGJ5
IGluZGV4IG9yIGJ5IG5hbWUpCi0gICAgICBib29sIG9rOwotICAgICAgdWludCB1ID0gcHJvcGVy
dHlOYW1lLnRvVUxvbmcoJm9rKTsKLSAgICAgIGlmIChvaykKLSAgICAgICAgcmV0dXJuIGdldERP
TU5vZGUoZXhlYywgZm9ybS5lbGVtZW50cygpLT5pdGVtKHUpKTsKLSAgICAgIFZhbHVlSW1wICpu
YW1lZEl0ZW1zID0gSFRNTENvbGxlY3Rpb24oZXhlYywgZm9ybS5lbGVtZW50cygpLmdldCgpKS5n
ZXROYW1lZEl0ZW1zKGV4ZWMsIHByb3BlcnR5TmFtZSk7Ci0gICAgICBpZiAoIW5hbWVkSXRlbXMt
PmlzVW5kZWZpbmVkKCkpCi0gICAgICAgIHJldHVybiBuYW1lZEl0ZW1zOwotICAgIH0KLSAgICAg
IGJyZWFrOwotICAgIGNhc2UgSURfU0VMRUNUOiB7Ci0gICAgICBIVE1MU2VsZWN0RWxlbWVudElt
cGwgJnNlbGVjdCA9IHN0YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50SW1wbCAmPihlbGVtZW50
KTsKLSAgICAgIGJvb2wgb2s7Ci0gICAgICB1aW50IHUgPSBwcm9wZXJ0eU5hbWUudG9VTG9uZygm
b2spOwotICAgICAgaWYgKG9rKQotICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLCBzZWxl
Y3Qub3B0aW9uc0hUTUxDb2xsZWN0aW9uKCktPml0ZW0odSkpOyAvLyBub3Qgc3BlY2lmaWVkIGJ5
IERPTSg/KSBidXQgc3VwcG9ydGVkIGluIG5ldHNjYXBlL0lFCisgICAgLy8gRmlyc3QgbG9vayBh
dCBkeW5hbWljIHByb3BlcnRpZXMKKyAgICBpZiAoZWxlbWVudC5oYXNMb2NhbE5hbWUoSFRNTE5h
bWVzOjpmb3JtKCkpKSB7CisgICAgICAgIEhUTUxGb3JtRWxlbWVudEltcGwgJmZvcm0gPSBzdGF0
aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgICAgICAvLyBDaGVj
ayBpZiB3ZSdyZSByZXRyaWV2aW5nIGFuIGVsZW1lbnQgKGJ5IGluZGV4IG9yIGJ5IG5hbWUpCisg
ICAgICAgIGJvb2wgb2s7CisgICAgICAgIHVpbnQgdSA9IHByb3BlcnR5TmFtZS50b1VMb25nKCZv
ayk7CisgICAgICAgIGlmIChvaykKKyAgICAgICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMs
IGZvcm0uZWxlbWVudHMoKS0+aXRlbSh1KSk7CisgICAgICAgIFZhbHVlSW1wICpuYW1lZEl0ZW1z
ID0gSFRNTENvbGxlY3Rpb24oZXhlYywgZm9ybS5lbGVtZW50cygpLmdldCgpKS5nZXROYW1lZEl0
ZW1zKGV4ZWMsIHByb3BlcnR5TmFtZSk7CisgICAgICAgIGlmICghbmFtZWRJdGVtcy0+aXNVbmRl
ZmluZWQoKSkKKyAgICAgICAgICAgIHJldHVybiBuYW1lZEl0ZW1zOworICAgIH0KKyAgICBlbHNl
IGlmIChlbGVtZW50Lmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnNlbGVjdCgpKSkgeworICAgICAg
ICBIVE1MU2VsZWN0RWxlbWVudEltcGwgJnNlbGVjdCA9IHN0YXRpY19jYXN0PEhUTUxTZWxlY3RF
bGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICAgICAgYm9vbCBvazsKKyAgICAgICAgdWludCB1
ID0gcHJvcGVydHlOYW1lLnRvVUxvbmcoJm9rKTsKKyAgICAgICAgaWYgKG9rKQorICAgICAgICAg
ICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYywgc2VsZWN0Lm9wdGlvbnNIVE1MQ29sbGVjdGlvbigp
LT5pdGVtKHUpKTsgLy8gbm90IHNwZWNpZmllZCBieSBET00oPykgYnV0IHN1cHBvcnRlZCBpbiBu
ZXRzY2FwZS9JRQogICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgSURfRlJBTUVTRVQ6IHsK
KyAgICBlbHNlIGlmIChlbGVtZW50Lmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmZyYW1lc2V0KCkp
KSB7CiAgICAgICAgIE5vZGVJbXBsICpmcmFtZSA9IGVsZW1lbnQuY2hpbGRyZW4oKS0+bmFtZWRJ
dGVtKHByb3BlcnR5TmFtZS5zdHJpbmcoKSk7Ci0gICAgICAgIGlmIChmcmFtZSAmJiBmcmFtZS0+
aWQoKSA9PSBJRF9GUkFNRSkgeworICAgICAgICBpZiAoZnJhbWUgJiYgZnJhbWUtPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjpmcmFtZSgpKSkgewogICAgICAgICAgICAgRG9jdW1lbnRJbXBsKiBkb2Mg
PSBzdGF0aWNfY2FzdDxIVE1MRnJhbWVFbGVtZW50SW1wbCAqPihmcmFtZSktPmNvbnRlbnREb2N1
bWVudCgpOwogICAgICAgICAgICAgaWYgKGRvYykgewogICAgICAgICAgICAgICAgIEtIVE1MUGFy
dCogcGFydCA9IGRvYy0+cGFydCgpOwpAQCAtMTIyOSw3MyArMTMxMCw1NyBAQCBWYWx1ZSBLSlM6
OkhUTUxFbGVtZW50Ojp0cnlHZXQoRXhlY1N0YXRlCiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
ICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSURfRlJBTUU6Ci0gICAgY2FzZSBJRF9J
RlJBTUU6IHsKKyAgICBlbHNlIGlmIChlbGVtZW50Lmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmZy
YW1lKCkpIHx8IGVsZW1lbnQuaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6aWZyYW1lKCkpKSB7CiAg
ICAgICAgIERvY3VtZW50SW1wbCogZG9jID0gc3RhdGljX2Nhc3Q8SFRNTEZyYW1lRWxlbWVudElt
cGwgJj4oZWxlbWVudCkuY29udGVudERvY3VtZW50KCk7Ci0gICAgICAgIGlmICggZG9jICkgewor
ICAgICAgICBpZiAoZG9jKSB7CiAgICAgICAgICAgICBLSFRNTFBhcnQqIHBhcnQgPSBkb2MtPnBh
cnQoKTsKLSAgICAgICAgICAgIGlmICggcGFydCApIHsKKyAgICAgICAgICAgIGlmIChwYXJ0KSB7
CiAgICAgICAgICAgICAgIFdpbmRvdyAqd2luZG93ID0gV2luZG93OjpyZXRyaWV2ZVdpbmRvdyhw
YXJ0KTsKIAkgICAgICBpZiAod2luZG93ICYmIHdpbmRvdy0+aGFzUHJvcGVydHkoZXhlYywgcHJv
cGVydHlOYW1lKSkKICAgICAgICAgICAgICAgICByZXR1cm4gd2luZG93LT5nZXQoZXhlYywgcHJv
cGVydHlOYW1lKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICAgIGJyZWFr
OwogI2lmIEFQUExFX0NIQU5HRVMKLSAgICBjYXNlIElEX0VNQkVEOgotICAgIGNhc2UgSURfT0JK
RUNUOgotICAgIGNhc2UgSURfQVBQTEVUOiB7Ci0JaWYgKHByb3BlcnR5TmFtZSA9PSAiX19hcHBs
ZV9ydW50aW1lX29iamVjdCIpIHsKKyAgICBlbHNlIGlmIChlbGVtZW50Lmhhc0xvY2FsTmFtZShI
VE1MTmFtZXM6OmVtYmVkKCkpIHx8IGVsZW1lbnQuaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b2Jq
ZWN0KCkpIHx8CisgICAgICAgICAgICAgZWxlbWVudC5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjph
cHBsZXQoKSkpIHsKKwlpZiAocHJvcGVydHlOYW1lID09ICJfX2FwcGxlX3J1bnRpbWVfb2JqZWN0
IikKIAkgICAgcmV0dXJuIGdldFJ1bnRpbWVPYmplY3QoZXhlYywmZWxlbWVudCk7Ci0JfQotCiAJ
VmFsdWUgcnVudGltZU9iamVjdCA9IGdldFJ1bnRpbWVPYmplY3QoZXhlYywmZWxlbWVudCk7CiAJ
aWYgKCFydW50aW1lT2JqZWN0LmlzTnVsbCgpKSB7CiAJICAgIE9iamVjdEltcCAqaW1wID0gc3Rh
dGljX2Nhc3Q8T2JqZWN0SW1wICo+KHJ1bnRpbWVPYmplY3QuaW1wKCkpOwotCSAgICBpZiAoaW1w
LT5oYXNQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUpKSB7CisJICAgIGlmIChpbXAtPmhhc1By
b3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFtZSkpCiAJCXJldHVybiBpbXAtPmdldCAoZXhlYywgcHJv
cGVydHlOYW1lKTsKLQkgICAgfQogCX0KICAgICB9Ci0gICAgICBicmVhazsKICNlbmRpZgotICAg
IGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KIAotICBjb25zdCBIYXNoVGFibGUqIHRh
YmxlID0gY2xhc3NJbmZvKCktPnByb3BIYXNoVGFibGU7IC8vIGdldCB0aGUgcmlnaHQgaGFzaHRh
YmxlCi0gIGNvbnN0IEhhc2hFbnRyeSogZW50cnkgPSBMb29rdXA6OmZpbmRFbnRyeSh0YWJsZSwg
cHJvcGVydHlOYW1lKTsKLSAgaWYgKGVudHJ5KSB7Ci0gICAgaWYgKGVudHJ5LT5hdHRyICYgRnVu
Y3Rpb24pCi0gICAgICByZXR1cm4gbG9va3VwT3JDcmVhdGVGdW5jdGlvbjxLSlM6OkhUTUxFbGVt
ZW50RnVuY3Rpb24+KGV4ZWMsIHByb3BlcnR5TmFtZSwgdGhpcywgZW50cnktPnZhbHVlLCBlbnRy
eS0+cGFyYW1zLCBlbnRyeS0+YXR0cik7Ci0gICAgcmV0dXJuIGdldFZhbHVlUHJvcGVydHkoZXhl
YywgZW50cnktPnZhbHVlKTsKLSAgfQorICAgIGNvbnN0IEhhc2hUYWJsZSogdGFibGUgPSBjbGFz
c0luZm8oKS0+cHJvcEhhc2hUYWJsZTsgLy8gZ2V0IHRoZSByaWdodCBoYXNodGFibGUKKyAgICBj
b25zdCBIYXNoRW50cnkqIGVudHJ5ID0gTG9va3VwOjpmaW5kRW50cnkodGFibGUsIHByb3BlcnR5
TmFtZSk7CisgICAgaWYgKGVudHJ5KSB7CisgICAgICAgIGlmIChlbnRyeS0+YXR0ciAmIEZ1bmN0
aW9uKQorICAgICAgICAgICAgcmV0dXJuIGxvb2t1cE9yQ3JlYXRlRnVuY3Rpb248S0pTOjpIVE1M
RWxlbWVudEZ1bmN0aW9uPihleGVjLCBwcm9wZXJ0eU5hbWUsIHRoaXMsIGVudHJ5LT52YWx1ZSwg
ZW50cnktPnBhcmFtcywgZW50cnktPmF0dHIpOworICAgICAgICByZXR1cm4gZ2V0VmFsdWVQcm9w
ZXJ0eShleGVjLCBlbnRyeS0+dmFsdWUpOworICAgIH0KIAotICAvLyBCYXNlIEhUTUxFbGVtZW50
IHN0dWZmIG9yIHBhcmVudCBjbGFzcyBmb3J3YXJkLCBhcyB1c3VhbAotICByZXR1cm4gRE9NT2Jq
ZWN0TG9va3VwR2V0PEtKUzo6SFRNTEVsZW1lbnRGdW5jdGlvbiwgS0pTOjpIVE1MRWxlbWVudCwg
RE9NRWxlbWVudD4oZXhlYywgcHJvcGVydHlOYW1lLCAmSFRNTEVsZW1lbnRUYWJsZSwgdGhpcyk7
CisgICAgLy8gQmFzZSBIVE1MRWxlbWVudCBzdHVmZiBvciBwYXJlbnQgY2xhc3MgZm9yd2FyZCwg
YXMgdXN1YWwKKyAgICByZXR1cm4gRE9NT2JqZWN0TG9va3VwR2V0PEtKUzo6SFRNTEVsZW1lbnRG
dW5jdGlvbiwgS0pTOjpIVE1MRWxlbWVudCwgRE9NRWxlbWVudD4oZXhlYywgcHJvcGVydHlOYW1l
LCAmSFRNTEVsZW1lbnRUYWJsZSwgdGhpcyk7CiB9CiAKIGJvb2wgS0pTOjpIVE1MRWxlbWVudDo6
aW1wbGVtZW50c0NhbGwoKSBjb25zdAogewogICAgIEhUTUxFbGVtZW50SW1wbCAqZWxlbWVudCA9
IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCAqPihpbXBsKCkpOwotICAgIHN3aXRjaCAoZWxl
bWVudC0+aWQoKSkgewotCWNhc2UgSURfRU1CRUQ6Ci0JY2FzZSBJRF9PQkpFQ1Q6Ci0JY2FzZSBJ
RF9BUFBMRVQ6IHsKLQkJRG9jdW1lbnRJbXBsKiBkb2MgPSBlbGVtZW50LT5nZXREb2N1bWVudCgp
OwotCQlLSlNQcm94eSAqcHJveHkgPSBLSlNQcm94eTo6cHJveHkoZG9jLT5wYXJ0KCkpOwotCQlF
eGVjU3RhdGUgKmV4ZWMgPSBwcm94eS0+aW50ZXJwcmV0ZXIoKS0+Z2xvYmFsRXhlYygpOwotCQlW
YWx1ZSBydW50aW1lT2JqZWN0ID0gZ2V0UnVudGltZU9iamVjdChleGVjLGVsZW1lbnQpOwotCQlp
ZiAoIXJ1bnRpbWVPYmplY3QuaXNOdWxsKCkpIHsKLQkJICAgIE9iamVjdEltcCAqaW1wID0gc3Rh
dGljX2Nhc3Q8T2JqZWN0SW1wICo+KHJ1bnRpbWVPYmplY3QuaW1wKCkpOwotCQkgICAgcmV0dXJu
IGltcC0+aW1wbGVtZW50c0NhbGwgKCk7Ci0JCX0KLQkgICAgfQotCSAgICBicmVhazsKLQlkZWZh
dWx0OgotCSAgICBicmVhazsKKyAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
OmVtYmVkKCkpIHx8CisgICAgICAgIGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvYmpl
Y3QoKSkgfHwKKyAgICAgICAgZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmFwcGxldCgp
KSkgeworICAgCURvY3VtZW50SW1wbCogZG9jID0gZWxlbWVudC0+Z2V0RG9jdW1lbnQoKTsKKyAg
ICAgICAgS0pTUHJveHkgKnByb3h5ID0gS0pTUHJveHk6OnByb3h5KGRvYy0+cGFydCgpKTsKKyAg
ICAgICAgRXhlY1N0YXRlICpleGVjID0gcHJveHktPmludGVycHJldGVyKCktPmdsb2JhbEV4ZWMo
KTsKKyAgICAgICAgVmFsdWUgcnVudGltZU9iamVjdCA9IGdldFJ1bnRpbWVPYmplY3QoZXhlYyxl
bGVtZW50KTsKKyAgICAgICAgaWYgKCFydW50aW1lT2JqZWN0LmlzTnVsbCgpKSB7CisgICAgICAg
ICAgICBPYmplY3RJbXAgKmltcCA9IHN0YXRpY19jYXN0PE9iamVjdEltcCAqPihydW50aW1lT2Jq
ZWN0LmltcCgpKTsKKyAgICAgICAgICAgIHJldHVybiBpbXAtPmltcGxlbWVudHNDYWxsICgpOwor
ICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTEzMDMsNzg2ICsxMzY4
LDg3NyBAQCBib29sIEtKUzo6SFRNTEVsZW1lbnQ6OmltcGxlbWVudHNDYWxsKCkgCiBWYWx1ZSBL
SlM6OkhUTUxFbGVtZW50OjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBj
b25zdCBMaXN0JmFyZ3MpCiB7CiAgICAgSFRNTEVsZW1lbnRJbXBsICplbGVtZW50ID0gc3RhdGlj
X2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KGltcGwoKSk7Ci0gICAgc3dpdGNoIChlbGVtZW50LT5p
ZCgpKSB7Ci0JY2FzZSBJRF9FTUJFRDoKLQljYXNlIElEX09CSkVDVDoKLQljYXNlIElEX0FQUExF
VDogewotCQlWYWx1ZSBydW50aW1lT2JqZWN0ID0gZ2V0UnVudGltZU9iamVjdChleGVjLGVsZW1l
bnQpOwotCQlpZiAoIXJ1bnRpbWVPYmplY3QuaXNOdWxsKCkpIHsKLQkJICAgIE9iamVjdEltcCAq
aW1wID0gc3RhdGljX2Nhc3Q8T2JqZWN0SW1wICo+KHJ1bnRpbWVPYmplY3QuaW1wKCkpOwotCQkg
ICAgcmV0dXJuIGltcC0+Y2FsbCAoZXhlYywgdGhpc09iaiwgYXJncyk7Ci0JCX0KLQkgICAgfQot
CSAgICBicmVhazsKLQlkZWZhdWx0OgotCSAgICBicmVhazsKKyAgICBpZiAoZWxlbWVudC0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OmVtYmVkKCkpIHx8CisgICAgICAgIGVsZW1lbnQtPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjpvYmplY3QoKSkgfHwKKyAgICAgICAgZWxlbWVudC0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OmFwcGxldCgpKSkgeworICAgICAgICBWYWx1ZSBydW50aW1lT2JqZWN0ID0gZ2V0
UnVudGltZU9iamVjdChleGVjLGVsZW1lbnQpOworICAgICAgICBpZiAoIXJ1bnRpbWVPYmplY3Qu
aXNOdWxsKCkpIHsKKyAgICAgICAgICAgIE9iamVjdEltcCAqaW1wID0gc3RhdGljX2Nhc3Q8T2Jq
ZWN0SW1wICo+KHJ1bnRpbWVPYmplY3QuaW1wKCkpOworICAgICAgICAgICAgcmV0dXJuIGltcC0+
Y2FsbCAoZXhlYywgdGhpc09iaiwgYXJncyk7CisgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJu
IFVuZGVmaW5lZCgpOwogfQogCi1WYWx1ZSBLSlM6OkhUTUxFbGVtZW50OjpnZXRWYWx1ZVByb3Bl
cnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAotewotICBIVE1MRWxlbWVudElt
cGwgJmVsZW1lbnQgPSAqc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KGltcGwoKSk7Ci0g
IHN3aXRjaCAoZWxlbWVudC5pZCgpKSB7Ci0gIGNhc2UgSURfSFRNTDogewotICAgIEhUTUxIdG1s
RWxlbWVudEltcGwgJmh0bWwgPSBzdGF0aWNfY2FzdDxIVE1MSHRtbEVsZW1lbnRJbXBsICY+KGVs
ZW1lbnQpOwotICAgIGlmICAgICAgKHRva2VuID09IEh0bWxWZXJzaW9uKSAgICAgICAgIHJldHVy
biBTdHJpbmcoaHRtbC52ZXJzaW9uKCkpOwotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX0hFQUQ6
IHsKLSAgICBIVE1MSGVhZEVsZW1lbnRJbXBsICZoZWFkID0gc3RhdGljX2Nhc3Q8SFRNTEhlYWRF
bGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICBpZiAgICAgICh0b2tlbiA9PSBIZWFkUHJvZmls
ZSkgICAgICAgICByZXR1cm4gU3RyaW5nKGhlYWQucHJvZmlsZSgpKTsKLSAgfQotICBicmVhazsK
LSAgY2FzZSBJRF9MSU5LOiB7Ci0gICAgSFRNTExpbmtFbGVtZW50SW1wbCAmbGluayA9IHN0YXRp
Y19jYXN0PEhUTUxMaW5rRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tl
bikgewotICAgIGNhc2UgTGlua0Rpc2FibGVkOiAgICAgICAgcmV0dXJuIEJvb2xlYW4obGluay5k
aXNhYmxlZCgpKTsKLSAgICBjYXNlIExpbmtDaGFyc2V0OiAgICAgICAgIHJldHVybiBTdHJpbmco
bGluay5jaGFyc2V0KCkpOwotICAgIGNhc2UgTGlua0hyZWY6ICAgICAgICAgICAgcmV0dXJuIFN0
cmluZyhsaW5rLmhyZWYoKSk7Ci0gICAgY2FzZSBMaW5rSHJlZkxhbmc6ICAgICAgICByZXR1cm4g
U3RyaW5nKGxpbmsuaHJlZmxhbmcoKSk7Ci0gICAgY2FzZSBMaW5rTWVkaWE6ICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKGxpbmsubWVkaWEoKSk7Ci0gICAgY2FzZSBMaW5rUmVsOiAgICAgICAgICAg
ICByZXR1cm4gU3RyaW5nKGxpbmsucmVsKCkpOwotICAgIGNhc2UgTGlua1JldjogICAgICAgICAg
ICAgcmV0dXJuIFN0cmluZyhsaW5rLnJldigpKTsKLSAgICBjYXNlIExpbmtUYXJnZXQ6ICAgICAg
ICAgIHJldHVybiBTdHJpbmcobGluay50YXJnZXQoKSk7Ci0gICAgY2FzZSBMaW5rVHlwZTogICAg
ICAgICAgICByZXR1cm4gU3RyaW5nKGxpbmsudHlwZSgpKTsKLSAgICBjYXNlIExpbmtTaGVldDog
ICAgICAgICAgIHJldHVybiBnZXRET01TdHlsZVNoZWV0KGV4ZWMsIGxpbmsuc2hlZXQoKSk7Ci0g
ICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX1RJVExFOiB7Ci0gICAgSFRNTFRpdGxlRWxl
bWVudEltcGwgJnRpdGxlID0gc3RhdGljX2Nhc3Q8SFRNTFRpdGxlRWxlbWVudEltcGwgJj4oZWxl
bWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgVGl0bGVUZXh0OiAgICAgICAg
ICAgICAgICAgcmV0dXJuIFN0cmluZyh0aXRsZS50ZXh0KCkpOwotICAgIH0KLSAgfQotICBicmVh
azsKLSAgY2FzZSBJRF9NRVRBOiB7Ci0gICAgSFRNTE1ldGFFbGVtZW50SW1wbCAmbWV0YSA9IHN0
YXRpY19jYXN0PEhUTUxNZXRhRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0
b2tlbikgewotICAgIGNhc2UgTWV0YUNvbnRlbnQ6ICAgICAgICAgcmV0dXJuIFN0cmluZyhtZXRh
LmNvbnRlbnQoKSk7Ci0gICAgY2FzZSBNZXRhSHR0cEVxdWl2OiAgICAgICByZXR1cm4gU3RyaW5n
KG1ldGEuaHR0cEVxdWl2KCkpOwotICAgIGNhc2UgTWV0YU5hbWU6ICAgICAgICAgICAgcmV0dXJu
IFN0cmluZyhtZXRhLm5hbWUoKSk7Ci0gICAgY2FzZSBNZXRhU2NoZW1lOiAgICAgICAgICByZXR1
cm4gU3RyaW5nKG1ldGEuc2NoZW1lKCkpOwotICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJ
RF9CQVNFOiB7Ci0gICAgSFRNTEJhc2VFbGVtZW50SW1wbCAmYmFzZSA9IHN0YXRpY19jYXN0PEhU
TUxCYXNlRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAg
IGNhc2UgQmFzZUhyZWY6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhiYXNlLmhyZWYoKSk7Ci0g
ICAgY2FzZSBCYXNlVGFyZ2V0OiAgICAgICAgICByZXR1cm4gU3RyaW5nKGJhc2UudGFyZ2V0KCkp
OwotICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9JU0lOREVYOiB7Ci0gICAgSFRNTElz
SW5kZXhFbGVtZW50SW1wbCAmaXNpbmRleCA9IHN0YXRpY19jYXN0PEhUTUxJc0luZGV4RWxlbWVu
dEltcGwgJj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgSXNJbmRl
eEZvcm06ICAgICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYywgaXNpbmRleC5mb3JtKCkp
OyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVudAotICAgIGNhc2UgSXNJbmRleFByb21wdDogICAgICAg
ICAgcmV0dXJuIFN0cmluZyhpc2luZGV4LnByb21wdCgpKTsKLSAgICB9Ci0gIH0KLSAgYnJlYWs7
Ci0gIGNhc2UgSURfU1RZTEU6IHsKLSAgICBIVE1MU3R5bGVFbGVtZW50SW1wbCAmc3R5bGUgPSBz
dGF0aWNfY2FzdDxIVE1MU3R5bGVFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICBzd2l0Y2gg
KHRva2VuKSB7Ci0gICAgY2FzZSBTdHlsZURpc2FibGVkOiAgICAgICAgcmV0dXJuIEJvb2xlYW4o
c3R5bGUuZGlzYWJsZWQoKSk7Ci0gICAgY2FzZSBTdHlsZU1lZGlhOiAgICAgICAgICAgcmV0dXJu
IFN0cmluZyhzdHlsZS5tZWRpYSgpKTsKLSAgICBjYXNlIFN0eWxlVHlwZTogICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKHN0eWxlLnR5cGUoKSk7Ci0gICAgY2FzZSBTdHlsZVNoZWV0OiAgICAgICAg
ICAgcmV0dXJuIGdldERPTVN0eWxlU2hlZXQoZXhlYywgc3R5bGUuc2hlZXQoKSk7Ci0gICAgfQot
ICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX0JPRFk6IHsKLSAgICBIVE1MQm9keUVsZW1lbnRJbXBs
ICZib2R5ID0gc3RhdGljX2Nhc3Q8SFRNTEJvZHlFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAg
ICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBCb2R5QUxpbms6ICAgICAgICAgICByZXR1cm4g
U3RyaW5nKGJvZHkuYUxpbmsoKSk7Ci0gICAgY2FzZSBCb2R5QmFja2dyb3VuZDogICAgICByZXR1
cm4gU3RyaW5nKGJvZHkuYmFja2dyb3VuZCgpKTsKLSAgICBjYXNlIEJvZHlCZ0NvbG9yOiAgICAg
ICAgIHJldHVybiBTdHJpbmcoYm9keS5iZ0NvbG9yKCkpOwotICAgIGNhc2UgQm9keUxpbms6ICAg
ICAgICAgICAgcmV0dXJuIFN0cmluZyhib2R5LmxpbmsoKSk7Ci0gICAgY2FzZSBCb2R5VGV4dDog
ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGJvZHkudGV4dCgpKTsKLSAgICBjYXNlIEJvZHlWTGlu
azogICAgICAgICAgIHJldHVybiBTdHJpbmcoYm9keS52TGluaygpKTsKLSAgICBkZWZhdWx0Ogot
ICAgICAgLy8gVXBkYXRlIHRoZSBkb2N1bWVudCdzIGxheW91dCBiZWZvcmUgd2UgY29tcHV0ZSB0
aGVzZSBhdHRyaWJ1dGVzLgotICAgICAgRG9jdW1lbnRJbXBsICpkb2MgPSBib2R5LmdldERvY3Vt
ZW50KCk7Ci0gICAgICBpZiAoZG9jKQotICAgICAgICBkb2MtPnVwZGF0ZUxheW91dElnbm9yZVBl
bmRpbmdTdHlsZXNoZWV0cygpOwotICAgICAgS0hUTUxWaWV3ICp2aWV3ID0gZG9jID8gZG9jLT52
aWV3KCkgOiAwOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgICBjYXNlIEJvZHlTY3Jv
bGxMZWZ0OgotICAgICAgICAgICAgcmV0dXJuIE51bWJlcih2aWV3ID8gdmlldy0+Y29udGVudHNY
KCkgOiAwKTsKLSAgICAgICAgY2FzZSBCb2R5U2Nyb2xsVG9wOgotICAgICAgICAgICAgcmV0dXJu
IE51bWJlcih2aWV3ID8gdmlldy0+Y29udGVudHNZKCkgOiAwKTsKLSAgICAgICAgY2FzZSBCb2R5
U2Nyb2xsSGVpZ2h0OiAgIHJldHVybiBOdW1iZXIodmlldyA/IHZpZXctPmNvbnRlbnRzSGVpZ2h0
KCkgOiAwKTsKLSAgICAgICAgY2FzZSBCb2R5U2Nyb2xsV2lkdGg6ICAgIHJldHVybiBOdW1iZXIo
dmlldyA/IHZpZXctPmNvbnRlbnRzV2lkdGgoKSA6IDApOwotICAgICAgfQotICAgIH0KLSAgfQot
ICBicmVhazsKK1ZhbHVlIEhUTUxFbGVtZW50OjpodG1sR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywg
aW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxIdG1sRWxlbWVudEltcGwmIGh0bWwgPSAqc3Rh
dGljX2Nhc3Q8SFRNTEh0bWxFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09
IEh0bWxWZXJzaW9uKQorICAgICAgICByZXR1cm4gU3RyaW5nKGh0bWwudmVyc2lvbigpKTsKKyAg
ICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CiAKLSAgY2FzZSBJRF9GT1JNOiB7Ci0gICAgSFRNTEZv
cm1FbGVtZW50SW1wbCAmZm9ybSA9IHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudEltcGwgJj4o
ZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgRm9ybUVsZW1lbnRzOiAg
ICAgICAgcmV0dXJuIGdldEhUTUxDb2xsZWN0aW9uKGV4ZWMsIGZvcm0uZWxlbWVudHMoKS5nZXQo
KSk7Ci0gICAgY2FzZSBGb3JtTGVuZ3RoOiAgICAgICAgICByZXR1cm4gTnVtYmVyKGZvcm0ubGVu
Z3RoKCkpOwotICAgIGNhc2UgRm9ybU5hbWU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhmb3Jt
Lm5hbWUoKSk7Ci0gICAgY2FzZSBGb3JtQWNjZXB0Q2hhcnNldDogICByZXR1cm4gU3RyaW5nKGZv
cm0uYWNjZXB0Q2hhcnNldCgpKTsKLSAgICBjYXNlIEZvcm1BY3Rpb246ICAgICAgICAgIHJldHVy
biBTdHJpbmcoZm9ybS5hY3Rpb24oKSk7Ci0gICAgY2FzZSBGb3JtRW5jVHlwZTogICAgICAgICBy
ZXR1cm4gU3RyaW5nKGZvcm0uZW5jdHlwZSgpKTsKLSAgICBjYXNlIEZvcm1NZXRob2Q6ICAgICAg
ICAgIHJldHVybiBTdHJpbmcoZm9ybS5tZXRob2QoKSk7Ci0gICAgY2FzZSBGb3JtVGFyZ2V0OiAg
ICAgICAgICByZXR1cm4gU3RyaW5nKGZvcm0udGFyZ2V0KCkpOwotICAgIH0KLSAgfQotICBicmVh
azsKLSAgY2FzZSBJRF9TRUxFQ1Q6IHsKLSAgICBIVE1MU2VsZWN0RWxlbWVudEltcGwgJnNlbGVj
dCA9IHN0YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICBz
d2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBTZWxlY3RUeXBlOiAgICAgICAgICAgIHJldHVybiBT
dHJpbmcoc2VsZWN0LnR5cGUoKSk7Ci0gICAgY2FzZSBTZWxlY3RTZWxlY3RlZEluZGV4OiAgIHJl
dHVybiBOdW1iZXIoc2VsZWN0LnNlbGVjdGVkSW5kZXgoKSk7Ci0gICAgY2FzZSBTZWxlY3RWYWx1
ZTogICAgICAgICAgIHJldHVybiBTdHJpbmcoc2VsZWN0LnZhbHVlKCkpOwotICAgIGNhc2UgU2Vs
ZWN0TGVuZ3RoOiAgICAgICAgICByZXR1cm4gTnVtYmVyKHNlbGVjdC5sZW5ndGgoKSk7Ci0gICAg
Y2FzZSBTZWxlY3RGb3JtOiAgICAgICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsIHNlbGVj
dC5mb3JtKCkpOyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVudAotICAgIGNhc2UgU2VsZWN0T3B0aW9u
czogICAgICAgICByZXR1cm4gZ2V0U2VsZWN0SFRNTENvbGxlY3Rpb24oZXhlYywgc2VsZWN0Lm9w
dGlvbnNIVE1MQ29sbGVjdGlvbigpLmdldCgpLCAmc2VsZWN0KTsgLy8gdHlwZSBIVE1MQ29sbGVj
dGlvbgotICAgIGNhc2UgU2VsZWN0RGlzYWJsZWQ6ICAgICAgICByZXR1cm4gQm9vbGVhbihzZWxl
Y3QuZGlzYWJsZWQoKSk7Ci0gICAgY2FzZSBTZWxlY3RNdWx0aXBsZTogICAgICAgIHJldHVybiBC
b29sZWFuKHNlbGVjdC5tdWx0aXBsZSgpKTsKLSAgICBjYXNlIFNlbGVjdE5hbWU6ICAgICAgICAg
ICAgcmV0dXJuIFN0cmluZyhzZWxlY3QubmFtZSgpKTsKLSAgICBjYXNlIFNlbGVjdFNpemU6ICAg
ICAgICAgICAgcmV0dXJuIE51bWJlcihzZWxlY3Quc2l6ZSgpKTsKLSAgICBjYXNlIFNlbGVjdFRh
YkluZGV4OiAgICAgICAgcmV0dXJuIE51bWJlcihzZWxlY3QudGFiSW5kZXgoKSk7Ci0gICAgfQot
ICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX09QVEdST1VQOiB7Ci0gICAgSFRNTE9wdEdyb3VwRWxl
bWVudEltcGwgJm9wdGdyb3VwID0gc3RhdGljX2Nhc3Q8SFRNTE9wdEdyb3VwRWxlbWVudEltcGwg
Jj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgT3B0R3JvdXBEaXNh
YmxlZDogICAgICAgIHJldHVybiBCb29sZWFuKG9wdGdyb3VwLmRpc2FibGVkKCkpOwotICAgIGNh
c2UgT3B0R3JvdXBMYWJlbDogICAgICAgICAgIHJldHVybiBTdHJpbmcob3B0Z3JvdXAubGFiZWwo
KSk7Ci0gICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX09QVElPTjogewotICAgIEhUTUxP
cHRpb25FbGVtZW50SW1wbCAmb3B0aW9uID0gc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnRJ
bXBsICY+KGVsZW1lbnQpOwotICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIE9wdGlvbkZv
cm06ICAgICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyxvcHRpb24uZm9ybSgpKTsgLy8g
dHlwZSBIVE1MRm9ybUVsZW1lbnQKLSAgICBjYXNlIE9wdGlvbkRlZmF1bHRTZWxlY3RlZDogcmV0
dXJuIEJvb2xlYW4ob3B0aW9uLmRlZmF1bHRTZWxlY3RlZCgpKTsKLSAgICBjYXNlIE9wdGlvblRl
eHQ6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhvcHRpb24udGV4dCgpKTsKLSAgICBjYXNlIE9w
dGlvbkluZGV4OiAgICAgICAgICAgcmV0dXJuIE51bWJlcihvcHRpb24uaW5kZXgoKSk7Ci0gICAg
Y2FzZSBPcHRpb25EaXNhYmxlZDogICAgICAgIHJldHVybiBCb29sZWFuKG9wdGlvbi5kaXNhYmxl
ZCgpKTsKLSAgICBjYXNlIE9wdGlvbkxhYmVsOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhvcHRp
b24ubGFiZWwoKSk7Ci0gICAgY2FzZSBPcHRpb25TZWxlY3RlZDogICAgICAgIHJldHVybiBCb29s
ZWFuKG9wdGlvbi5zZWxlY3RlZCgpKTsKLSAgICBjYXNlIE9wdGlvblZhbHVlOiAgICAgICAgICAg
cmV0dXJuIFN0cmluZyhvcHRpb24udmFsdWUoKSk7Ci0gICAgfQotICB9Ci0gIGJyZWFrOwotICBj
YXNlIElEX0lOUFVUOiB7Ci0gICAgSFRNTElucHV0RWxlbWVudEltcGwgJmlucHV0ID0gc3RhdGlj
X2Nhc3Q8SFRNTElucHV0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tl
bikgewotICAgIGNhc2UgSW5wdXREZWZhdWx0VmFsdWU6ICAgIHJldHVybiBTdHJpbmcoaW5wdXQu
ZGVmYXVsdFZhbHVlKCkpOwotICAgIGNhc2UgSW5wdXREZWZhdWx0Q2hlY2tlZDogIHJldHVybiBC
b29sZWFuKGlucHV0LmRlZmF1bHRDaGVja2VkKCkpOwotICAgIGNhc2UgSW5wdXRGb3JtOiAgICAg
ICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsaW5wdXQuZm9ybSgpKTsgLy8gdHlwZSBIVE1M
Rm9ybUVsZW1lbnQKLSAgICBjYXNlIElucHV0QWNjZXB0OiAgICAgICAgICByZXR1cm4gU3RyaW5n
KGlucHV0LmFjY2VwdCgpKTsKLSAgICBjYXNlIElucHV0QWNjZXNzS2V5OiAgICAgICByZXR1cm4g
U3RyaW5nKGlucHV0LmFjY2Vzc0tleSgpKTsKLSAgICBjYXNlIElucHV0QWxpZ246ICAgICAgICAg
ICByZXR1cm4gU3RyaW5nKGlucHV0LmFsaWduKCkpOwotICAgIGNhc2UgSW5wdXRBbHQ6ICAgICAg
ICAgICAgIHJldHVybiBTdHJpbmcoaW5wdXQuYWx0KCkpOwotICAgIGNhc2UgSW5wdXRDaGVja2Vk
OiAgICAgICAgIHJldHVybiBCb29sZWFuKGlucHV0LmNoZWNrZWQoKSk7Ci0gICAgY2FzZSBJbnB1
dERpc2FibGVkOiAgICAgICAgcmV0dXJuIEJvb2xlYW4oaW5wdXQuZGlzYWJsZWQoKSk7Ci0gICAg
Y2FzZSBJbnB1dE1heExlbmd0aDogICAgICAgcmV0dXJuIE51bWJlcihpbnB1dC5tYXhMZW5ndGgo
KSk7Ci0gICAgY2FzZSBJbnB1dE5hbWU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpbnB1dC5u
YW1lKCkpOwotICAgIGNhc2UgSW5wdXRSZWFkT25seTogICAgICAgIHJldHVybiBCb29sZWFuKGlu
cHV0LnJlYWRPbmx5KCkpOwotICAgIGNhc2UgSW5wdXRTaXplOiAgICAgICAgICAgIHJldHVybiBT
dHJpbmcoaW5wdXQuc2l6ZURPTSgpKTsKLSAgICBjYXNlIElucHV0U3JjOiAgICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKGlucHV0LnNyYygpKTsKLSAgICBjYXNlIElucHV0VGFiSW5kZXg6ICAgICAg
ICByZXR1cm4gTnVtYmVyKGlucHV0LnRhYkluZGV4KCkpOwotICAgIGNhc2UgSW5wdXRUeXBlOiAg
ICAgICAgICAgIHJldHVybiBTdHJpbmcoaW5wdXQudHlwZSgpKTsKLSAgICBjYXNlIElucHV0VXNl
TWFwOiAgICAgICAgICByZXR1cm4gU3RyaW5nKGlucHV0LnVzZU1hcCgpKTsKLSAgICBjYXNlIElu
cHV0VmFsdWU6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGlucHV0LnZhbHVlKCkpOwotICAgIH0K
LSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9URVhUQVJFQTogewotICAgIEhUTUxUZXh0QXJlYUVs
ZW1lbnRJbXBsICZ0ZXh0YXJlYSA9IHN0YXRpY19jYXN0PEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBs
ICY+KGVsZW1lbnQpOwotICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIFRleHRBcmVhRGVm
YXVsdFZhbHVlOiAgICByZXR1cm4gU3RyaW5nKHRleHRhcmVhLmRlZmF1bHRWYWx1ZSgpKTsKLSAg
ICBjYXNlIFRleHRBcmVhRm9ybTogICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLHRl
eHRhcmVhLmZvcm0oKSk7IC8vIHR5cGUgSFRNTEZvcm1FbGVtZW50Ci0gICAgY2FzZSBUZXh0QXJl
YUFjY2Vzc0tleTogICAgICAgcmV0dXJuIFN0cmluZyh0ZXh0YXJlYS5hY2Nlc3NLZXkoKSk7Ci0g
ICAgY2FzZSBUZXh0QXJlYUNvbHM6ICAgICAgICAgICAgcmV0dXJuIE51bWJlcih0ZXh0YXJlYS5j
b2xzKCkpOwotICAgIGNhc2UgVGV4dEFyZWFEaXNhYmxlZDogICAgICAgIHJldHVybiBCb29sZWFu
KHRleHRhcmVhLmRpc2FibGVkKCkpOwotICAgIGNhc2UgVGV4dEFyZWFOYW1lOiAgICAgICAgICAg
IHJldHVybiBTdHJpbmcodGV4dGFyZWEubmFtZSgpKTsKLSAgICBjYXNlIFRleHRBcmVhUmVhZE9u
bHk6ICAgICAgICByZXR1cm4gQm9vbGVhbih0ZXh0YXJlYS5yZWFkT25seSgpKTsKLSAgICBjYXNl
IFRleHRBcmVhUm93czogICAgICAgICAgICByZXR1cm4gTnVtYmVyKHRleHRhcmVhLnJvd3MoKSk7
Ci0gICAgY2FzZSBUZXh0QXJlYVRhYkluZGV4OiAgICAgICAgcmV0dXJuIE51bWJlcih0ZXh0YXJl
YS50YWJJbmRleCgpKTsKLSAgICBjYXNlIFRleHRBcmVhVHlwZTogICAgICAgICAgICByZXR1cm4g
U3RyaW5nKHRleHRhcmVhLnR5cGUoKSk7Ci0gICAgY2FzZSBUZXh0QXJlYVZhbHVlOiAgICAgICAg
ICAgcmV0dXJuIFN0cmluZyh0ZXh0YXJlYS52YWx1ZSgpKTsKLSAgICB9Ci0gIH0KLSAgYnJlYWs7
Ci0gIGNhc2UgSURfQlVUVE9OOiB7Ci0gICAgSFRNTEJ1dHRvbkVsZW1lbnRJbXBsICZidXR0b24g
PSBzdGF0aWNfY2FzdDxIVE1MQnV0dG9uRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgc3dp
dGNoICh0b2tlbikgewotICAgIGNhc2UgQnV0dG9uRm9ybTogICAgICAgICAgICByZXR1cm4gZ2V0
RE9NTm9kZShleGVjLGJ1dHRvbi5mb3JtKCkpOyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVudAotICAg
IGNhc2UgQnV0dG9uQWNjZXNzS2V5OiAgICAgICByZXR1cm4gU3RyaW5nKGJ1dHRvbi5hY2Nlc3NL
ZXkoKSk7Ci0gICAgY2FzZSBCdXR0b25EaXNhYmxlZDogICAgICAgIHJldHVybiBCb29sZWFuKGJ1
dHRvbi5kaXNhYmxlZCgpKTsKLSAgICBjYXNlIEJ1dHRvbk5hbWU6ICAgICAgICAgICAgcmV0dXJu
IFN0cmluZyhidXR0b24ubmFtZSgpKTsKLSAgICBjYXNlIEJ1dHRvblRhYkluZGV4OiAgICAgICAg
cmV0dXJuIE51bWJlcihidXR0b24udGFiSW5kZXgoKSk7Ci0gICAgY2FzZSBCdXR0b25UeXBlOiAg
ICAgICAgICAgIHJldHVybiBTdHJpbmcoYnV0dG9uLnR5cGUoKSk7Ci0gICAgY2FzZSBCdXR0b25W
YWx1ZTogICAgICAgICAgIHJldHVybiBTdHJpbmcoYnV0dG9uLnZhbHVlKCkpOwotICAgIH0KLSAg
fQotICBicmVhazsKLSAgY2FzZSBJRF9MQUJFTDogewotICAgIEhUTUxMYWJlbEVsZW1lbnRJbXBs
ICZsYWJlbCA9IHN0YXRpY19jYXN0PEhUTUxMYWJlbEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwot
ICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIExhYmVsRm9ybTogICAgICAgICAgICByZXR1
cm4gZ2V0RE9NTm9kZShleGVjLGxhYmVsLmZvcm0oKSk7IC8vIHR5cGUgSFRNTEZvcm1FbGVtZW50
Ci0gICAgY2FzZSBMYWJlbEFjY2Vzc0tleTogICAgICAgcmV0dXJuIFN0cmluZyhsYWJlbC5hY2Nl
c3NLZXkoKSk7Ci0gICAgY2FzZSBMYWJlbEh0bWxGb3I6ICAgICAgICAgcmV0dXJuIFN0cmluZyhs
YWJlbC5odG1sRm9yKCkpOwotICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9GSUVMRFNF
VDogewotICAgIEhUTUxGaWVsZFNldEVsZW1lbnRJbXBsICZmaWVsZFNldCA9IHN0YXRpY19jYXN0
PEhUTUxGaWVsZFNldEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworVmFsdWUgSFRNTEVsZW1lbnQ6
OmhlYWRHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRN
TEhlYWRFbGVtZW50SW1wbCAmaGVhZCA9ICpzdGF0aWNfY2FzdDxIVE1MSGVhZEVsZW1lbnRJbXBs
Kj4oaW1wbCgpKTsKKyAgICBpZiAodG9rZW4gPT0gSGVhZFByb2ZpbGUpCisgICAgICAgIHJldHVy
biBTdHJpbmcoaGVhZC5wcm9maWxlKCkpOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKwor
VmFsdWUgSFRNTEVsZW1lbnQ6OmxpbmtHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4p
IGNvbnN0Cit7CisgICAgSFRNTExpbmtFbGVtZW50SW1wbCAmbGluayA9ICpzdGF0aWNfY2FzdDxI
VE1MTGlua0VsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAg
Y2FzZSBGaWVsZFNldEZvcm06ICAgICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyxmaWVs
ZFNldC5mb3JtKCkpOyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVudAotICAgIH0KLSAgfQotICBicmVh
azsKLSAgY2FzZSBJRF9MRUdFTkQ6IHsKLSAgICBIVE1MTGVnZW5kRWxlbWVudEltcGwgJmxlZ2Vu
ZCA9IHN0YXRpY19jYXN0PEhUTUxMZWdlbmRFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICBz
d2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBMZWdlbmRGb3JtOiAgICAgICAgICAgIHJldHVybiBn
ZXRET01Ob2RlKGV4ZWMsbGVnZW5kLmZvcm0oKSk7IC8vIHR5cGUgSFRNTEZvcm1FbGVtZW50Ci0g
ICAgY2FzZSBMZWdlbmRBY2Nlc3NLZXk6ICAgICAgIHJldHVybiBTdHJpbmcobGVnZW5kLmFjY2Vz
c0tleSgpKTsKLSAgICBjYXNlIExlZ2VuZEFsaWduOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhs
ZWdlbmQuYWxpZ24oKSk7CisgICAgICAgIGNhc2UgTGlua0Rpc2FibGVkOgorICAgICAgICAgICAg
cmV0dXJuIEJvb2xlYW4obGluay5kaXNhYmxlZCgpKTsKKyAgICAgICAgY2FzZSBMaW5rQ2hhcnNl
dDoKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcobGluay5jaGFyc2V0KCkpOworICAgICAgICBj
YXNlIExpbmtIcmVmOgorICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhsaW5rLmhyZWYoKSk7Cisg
ICAgICAgIGNhc2UgTGlua0hyZWZMYW5nOgorICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhsaW5r
LmhyZWZsYW5nKCkpOworICAgICAgICBjYXNlIExpbmtNZWRpYTogICAgICAgICAgIAorICAgICAg
ICAgICAgcmV0dXJuIFN0cmluZyhsaW5rLm1lZGlhKCkpOworICAgICAgICBjYXNlIExpbmtSZWw6
ICAgICAgICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhsaW5rLnJlbCgpKTsKKyAg
ICAgICAgY2FzZSBMaW5rUmV2OiAgICAgICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIFN0cmlu
ZyhsaW5rLnJldigpKTsKKyAgICAgICAgY2FzZSBMaW5rVGFyZ2V0OiAgICAgICAgICAKKyAgICAg
ICAgICAgIHJldHVybiBTdHJpbmcobGluay50YXJnZXQoKSk7CisgICAgICAgIGNhc2UgTGlua1R5
cGU6ICAgICAgICAgICAgCisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGxpbmsudHlwZSgpKTsK
KyAgICAgICAgY2FzZSBMaW5rU2hlZXQ6ICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiBn
ZXRET01TdHlsZVNoZWV0KGV4ZWMsIGxpbmsuc2hlZXQoKSk7CiAgICAgfQotICB9Ci0gIGJyZWFr
OwotICBjYXNlIElEX1VMOiB7Ci0gICAgSFRNTFVMaXN0RWxlbWVudEltcGwgJnVMaXN0ID0gc3Rh
dGljX2Nhc3Q8SFRNTFVMaXN0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgcmV0dXJuIFVu
ZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6dGl0bGVHZXR0ZXIoRXhlY1N0YXRl
KiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTFRpdGxlRWxlbWVudEltcGwmIHRp
dGxlID0gKnN0YXRpY19jYXN0PEhUTUxUaXRsZUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBp
ZiAodG9rZW4gPT0gVGl0bGVUZXh0KQorICAgICAgICByZXR1cm4gU3RyaW5nKHRpdGxlLnRleHQo
KSk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6bWV0
YUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MTWV0
YUVsZW1lbnRJbXBsJiBtZXRhID0gKnN0YXRpY19jYXN0PEhUTUxNZXRhRWxlbWVudEltcGwqPihp
bXBsKCkpOwogICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIFVMaXN0Q29tcGFjdDogICAg
ICAgICByZXR1cm4gQm9vbGVhbih1TGlzdC5jb21wYWN0KCkpOwotICAgIGNhc2UgVUxpc3RUeXBl
OiAgICAgICAgICAgIHJldHVybiBTdHJpbmcodUxpc3QudHlwZSgpKTsKLSAgICB9Ci0gIH0KLSAg
YnJlYWs7Ci0gIGNhc2UgSURfT0w6IHsKLSAgICBIVE1MT0xpc3RFbGVtZW50SW1wbCAmb0xpc3Qg
PSBzdGF0aWNfY2FzdDxIVE1MT0xpc3RFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICBzd2l0
Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBPTGlzdENvbXBhY3Q6ICAgICAgICAgcmV0dXJuIEJvb2xl
YW4ob0xpc3QuY29tcGFjdCgpKTsKLSAgICBjYXNlIE9MaXN0U3RhcnQ6ICAgICAgICAgICByZXR1
cm4gTnVtYmVyKG9MaXN0LnN0YXJ0KCkpOwotICAgIGNhc2UgT0xpc3RUeXBlOiAgICAgICAgICAg
IHJldHVybiBTdHJpbmcob0xpc3QudHlwZSgpKTsKKyAgICAgICAgY2FzZSBNZXRhQ29udGVudDog
ICAgICAgICByZXR1cm4gU3RyaW5nKG1ldGEuY29udGVudCgpKTsKKyAgICAgICAgY2FzZSBNZXRh
SHR0cEVxdWl2OiAgICAgICByZXR1cm4gU3RyaW5nKG1ldGEuaHR0cEVxdWl2KCkpOworICAgICAg
ICBjYXNlIE1ldGFOYW1lOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcobWV0YS5uYW1lKCkpOwor
ICAgICAgICBjYXNlIE1ldGFTY2hlbWU6ICAgICAgICAgIHJldHVybiBTdHJpbmcobWV0YS5zY2hl
bWUoKSk7CiAgICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX0RMOiB7Ci0gICAgSFRNTERM
aXN0RWxlbWVudEltcGwgJmRMaXN0ID0gc3RhdGljX2Nhc3Q8SFRNTERMaXN0RWxlbWVudEltcGwg
Jj4oZWxlbWVudCk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxl
bWVudDo6YmFzZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAg
ICBIVE1MQmFzZUVsZW1lbnRJbXBsJiBiYXNlID0gKnN0YXRpY19jYXN0PEhUTUxCYXNlRWxlbWVu
dEltcGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIERMaXN0Q29t
cGFjdDogICAgICAgICByZXR1cm4gQm9vbGVhbihkTGlzdC5jb21wYWN0KCkpOworICAgICAgICBj
YXNlIEJhc2VIcmVmOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYmFzZS5ocmVmKCkpOworICAg
ICAgICBjYXNlIEJhc2VUYXJnZXQ6ICAgICAgICAgIHJldHVybiBTdHJpbmcoYmFzZS50YXJnZXQo
KSk7CiAgICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX0RJUjogewotICAgIEhUTUxEaXJl
Y3RvcnlFbGVtZW50SW1wbCAmZGlyZWN0b3J5ID0gc3RhdGljX2Nhc3Q8SFRNTERpcmVjdG9yeUVs
ZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFs
dWUgSFRNTEVsZW1lbnQ6OmlzSW5kZXhHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4p
IGNvbnN0Cit7CisgICAgSFRNTElzSW5kZXhFbGVtZW50SW1wbCYgaXNpbmRleCA9ICpzdGF0aWNf
Y2FzdDxIVE1MSXNJbmRleEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2Vu
KSB7Ci0gICAgY2FzZSBEaXJlY3RvcnlDb21wYWN0OiAgICAgICAgIHJldHVybiBCb29sZWFuKGRp
cmVjdG9yeS5jb21wYWN0KCkpOworICAgICAgICBjYXNlIElzSW5kZXhGb3JtOiAgICAgICAgICAg
IHJldHVybiBnZXRET01Ob2RlKGV4ZWMsIGlzaW5kZXguZm9ybSgpKTsgLy8gdHlwZSBIVE1MRm9y
bUVsZW1lbnQKKyAgICAgICAgY2FzZSBJc0luZGV4UHJvbXB0OiAgICAgICAgICByZXR1cm4gU3Ry
aW5nKGlzaW5kZXgucHJvbXB0KCkpOwogICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9N
RU5VOiB7Ci0gICAgSFRNTE1lbnVFbGVtZW50SW1wbCAmbWVudSA9IHN0YXRpY19jYXN0PEhUTUxN
ZW51RWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQor
CitWYWx1ZSBIVE1MRWxlbWVudDo6c3R5bGVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0Cit7CisgICAgSFRNTFN0eWxlRWxlbWVudEltcGwmIHN0eWxlID0gKnN0YXRpY19j
YXN0PEhUTUxTdHlsZUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7
Ci0gICAgY2FzZSBNZW51Q29tcGFjdDogICAgICAgICByZXR1cm4gQm9vbGVhbihtZW51LmNvbXBh
Y3QoKSk7CisgICAgICAgIGNhc2UgU3R5bGVEaXNhYmxlZDogICAgICAgIHJldHVybiBCb29sZWFu
KHN0eWxlLmRpc2FibGVkKCkpOworICAgICAgICBjYXNlIFN0eWxlTWVkaWE6ICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKHN0eWxlLm1lZGlhKCkpOworICAgICAgICBjYXNlIFN0eWxlVHlwZTogICAg
ICAgICAgICByZXR1cm4gU3RyaW5nKHN0eWxlLnR5cGUoKSk7CisgICAgICAgIGNhc2UgU3R5bGVT
aGVldDogICAgICAgICAgIHJldHVybiBnZXRET01TdHlsZVNoZWV0KGV4ZWMsIHN0eWxlLnNoZWV0
KCkpOwogICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9MSTogewotICAgIEhUTUxMSUVs
ZW1lbnRJbXBsICZsaSA9IHN0YXRpY19jYXN0PEhUTUxMSUVsZW1lbnRJbXBsICY+KGVsZW1lbnQp
OworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OmJvZHlH
ZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTEJvZHlF
bGVtZW50SW1wbCYgYm9keSA9ICpzdGF0aWNfY2FzdDxIVE1MQm9keUVsZW1lbnRJbXBsKj4oaW1w
bCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBMSVR5cGU6ICAgICAgICAgICAg
cmV0dXJuIFN0cmluZyhsaS50eXBlKCkpOwotICAgIGNhc2UgTElWYWx1ZTogICAgICAgICAgIHJl
dHVybiBOdW1iZXIobGkudmFsdWUoKSk7CisgICAgICAgIGNhc2UgQm9keUFMaW5rOiAgICAgICAg
ICAgcmV0dXJuIFN0cmluZyhib2R5LmFMaW5rKCkpOworICAgICAgICBjYXNlIEJvZHlCYWNrZ3Jv
dW5kOiAgICAgIHJldHVybiBTdHJpbmcoYm9keS5iYWNrZ3JvdW5kKCkpOworICAgICAgICBjYXNl
IEJvZHlCZ0NvbG9yOiAgICAgICAgIHJldHVybiBTdHJpbmcoYm9keS5iZ0NvbG9yKCkpOworICAg
ICAgICBjYXNlIEJvZHlMaW5rOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYm9keS5saW5rKCkp
OworICAgICAgICBjYXNlIEJvZHlUZXh0OiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYm9keS50
ZXh0KCkpOworICAgICAgICBjYXNlIEJvZHlWTGluazogICAgICAgICAgIHJldHVybiBTdHJpbmco
Ym9keS52TGluaygpKTsKKyAgICAgICAgZGVmYXVsdDogeworICAgICAgICAgICAgLy8gVXBkYXRl
IHRoZSBkb2N1bWVudCdzIGxheW91dCBiZWZvcmUgd2UgY29tcHV0ZSB0aGVzZSBhdHRyaWJ1dGVz
LgorICAgICAgICAgICAgRG9jdW1lbnRJbXBsICpkb2MgPSBib2R5LmdldERvY3VtZW50KCk7Cisg
ICAgICAgICAgICBpZiAoZG9jKQorICAgICAgICAgICAgICAgIGRvYy0+dXBkYXRlTGF5b3V0SWdu
b3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CisgICAgICAgICAgICBLSFRNTFZpZXcgKnZpZXcgPSBk
b2MgPyBkb2MtPnZpZXcoKSA6IDA7CisgICAgICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAg
ICAgICAgICAgICAgY2FzZSBCb2R5U2Nyb2xsTGVmdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIE51bWJlcih2aWV3ID8gdmlldy0+Y29udGVudHNYKCkgOiAwKTsKKyAgICAgICAgICAgICAg
ICBjYXNlIEJvZHlTY3JvbGxUb3A6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOdW1iZXIo
dmlldyA/IHZpZXctPmNvbnRlbnRzWSgpIDogMCk7CisgICAgICAgICAgICAgICAgY2FzZSBCb2R5
U2Nyb2xsSGVpZ2h0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTnVtYmVyKHZpZXcgPyB2
aWV3LT5jb250ZW50c0hlaWdodCgpIDogMCk7CisgICAgICAgICAgICAgICAgY2FzZSBCb2R5U2Ny
b2xsV2lkdGg6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOdW1iZXIodmlldyA/IHZpZXct
PmNvbnRlbnRzV2lkdGgoKSA6IDApOworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQot
ICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX0RJVjogewotICAgIEhUTUxEaXZFbGVtZW50SW1wbCAm
ZGl2ID0gc3RhdGljX2Nhc3Q8SFRNTERpdkVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgIHJl
dHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OmZvcm1HZXR0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTEZvcm1FbGVtZW50SW1w
bCYgZm9ybSA9ICpzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAg
ICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBEaXZBbGlnbjogICAgICAgICAgIHJldHVybiBT
dHJpbmcoZGl2LmFsaWduKCkpOworICAgICAgICBjYXNlIEZvcm1FbGVtZW50czogICAgICAgIHJl
dHVybiBnZXRIVE1MQ29sbGVjdGlvbihleGVjLCBmb3JtLmVsZW1lbnRzKCkuZ2V0KCkpOworICAg
ICAgICBjYXNlIEZvcm1MZW5ndGg6ICAgICAgICAgIHJldHVybiBOdW1iZXIoZm9ybS5sZW5ndGgo
KSk7CisgICAgICAgIGNhc2UgRm9ybU5hbWU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhmb3Jt
Lm5hbWUoKSk7CisgICAgICAgIGNhc2UgRm9ybUFjY2VwdENoYXJzZXQ6ICAgcmV0dXJuIFN0cmlu
Zyhmb3JtLmFjY2VwdENoYXJzZXQoKSk7CisgICAgICAgIGNhc2UgRm9ybUFjdGlvbjogICAgICAg
ICAgcmV0dXJuIFN0cmluZyhmb3JtLmFjdGlvbigpKTsKKyAgICAgICAgY2FzZSBGb3JtRW5jVHlw
ZTogICAgICAgICByZXR1cm4gU3RyaW5nKGZvcm0uZW5jdHlwZSgpKTsKKyAgICAgICAgY2FzZSBG
b3JtTWV0aG9kOiAgICAgICAgICByZXR1cm4gU3RyaW5nKGZvcm0ubWV0aG9kKCkpOworICAgICAg
ICBjYXNlIEZvcm1UYXJnZXQ6ICAgICAgICAgIHJldHVybiBTdHJpbmcoZm9ybS50YXJnZXQoKSk7
CiAgICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX1A6IHsKLSAgICBIVE1MUGFyYWdyYXBo
RWxlbWVudEltcGwgJnBhcmFncmFwaCA9IHN0YXRpY19jYXN0PEhUTUxQYXJhZ3JhcGhFbGVtZW50
SW1wbCAmPihlbGVtZW50KTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhU
TUxFbGVtZW50OjpzZWxlY3RHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0
Cit7CisgICAgSFRNTFNlbGVjdEVsZW1lbnRJbXBsJiBzZWxlY3QgPSAqc3RhdGljX2Nhc3Q8SFRN
TFNlbGVjdEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAg
Y2FzZSBQYXJhZ3JhcGhBbGlnbjogICAgICAgICAgIHJldHVybiBTdHJpbmcocGFyYWdyYXBoLmFs
aWduKCkpOworICAgICAgICBjYXNlIFNlbGVjdFR5cGU6ICAgICAgICAgICAgcmV0dXJuIFN0cmlu
ZyhzZWxlY3QudHlwZSgpKTsKKyAgICAgICAgY2FzZSBTZWxlY3RTZWxlY3RlZEluZGV4OiAgIHJl
dHVybiBOdW1iZXIoc2VsZWN0LnNlbGVjdGVkSW5kZXgoKSk7CisgICAgICAgIGNhc2UgU2VsZWN0
VmFsdWU6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHNlbGVjdC52YWx1ZSgpKTsKKyAgICAgICAg
Y2FzZSBTZWxlY3RMZW5ndGg6ICAgICAgICAgIHJldHVybiBOdW1iZXIoc2VsZWN0Lmxlbmd0aCgp
KTsKKyAgICAgICAgY2FzZSBTZWxlY3RGb3JtOiAgICAgICAgICAgIHJldHVybiBnZXRET01Ob2Rl
KGV4ZWMsIHNlbGVjdC5mb3JtKCkpOyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVudAorICAgICAgICBj
YXNlIFNlbGVjdE9wdGlvbnM6ICAgICAgICAgcmV0dXJuIGdldFNlbGVjdEhUTUxDb2xsZWN0aW9u
KGV4ZWMsIHNlbGVjdC5vcHRpb25zSFRNTENvbGxlY3Rpb24oKS5nZXQoKSwgJnNlbGVjdCk7IC8v
IHR5cGUgSFRNTENvbGxlY3Rpb24KKyAgICAgICAgY2FzZSBTZWxlY3REaXNhYmxlZDogICAgICAg
IHJldHVybiBCb29sZWFuKHNlbGVjdC5kaXNhYmxlZCgpKTsKKyAgICAgICAgY2FzZSBTZWxlY3RN
dWx0aXBsZTogICAgICAgIHJldHVybiBCb29sZWFuKHNlbGVjdC5tdWx0aXBsZSgpKTsKKyAgICAg
ICAgY2FzZSBTZWxlY3ROYW1lOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoc2VsZWN0Lm5hbWUo
KSk7CisgICAgICAgIGNhc2UgU2VsZWN0U2l6ZTogICAgICAgICAgICByZXR1cm4gTnVtYmVyKHNl
bGVjdC5zaXplKCkpOworICAgICAgICBjYXNlIFNlbGVjdFRhYkluZGV4OiAgICAgICAgcmV0dXJu
IE51bWJlcihzZWxlY3QudGFiSW5kZXgoKSk7CiAgICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNl
IElEX0gxOgotICBjYXNlIElEX0gyOgotICBjYXNlIElEX0gzOgotICBjYXNlIElEX0g0OgotICBj
YXNlIElEX0g1OgotICBjYXNlIElEX0g2OiB7Ci0gICAgSFRNTEhlYWRpbmdFbGVtZW50SW1wbCAm
aGVhZGluZyA9IHN0YXRpY19jYXN0PEhUTUxIZWFkaW5nRWxlbWVudEltcGwgJj4oZWxlbWVudCk7
CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6b3B0R3Jv
dXBHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTE9w
dEdyb3VwRWxlbWVudEltcGwmIG9wdGdyb3VwID0gKnN0YXRpY19jYXN0PEhUTUxPcHRHcm91cEVs
ZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBIZWFk
aW5nQWxpZ246ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGhlYWRpbmcuYWxpZ24oKSk7CisgICAg
ICAgIGNhc2UgT3B0R3JvdXBEaXNhYmxlZDogICAgICAgIHJldHVybiBCb29sZWFuKG9wdGdyb3Vw
LmRpc2FibGVkKCkpOworICAgICAgICBjYXNlIE9wdEdyb3VwTGFiZWw6ICAgICAgICAgICByZXR1
cm4gU3RyaW5nKG9wdGdyb3VwLmxhYmVsKCkpOwogICAgIH0KLSAgfQotICBicmVhazsKLSAgY2Fz
ZSBJRF9CTE9DS1FVT1RFOiB7Ci0gICAgSFRNTEJsb2NrcXVvdGVFbGVtZW50SW1wbCAmYmxvY2tx
dW90ZSA9IHN0YXRpY19jYXN0PEhUTUxCbG9ja3F1b3RlRWxlbWVudEltcGwgJj4oZWxlbWVudCk7
CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6b3B0aW9u
R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxPcHRp
b25FbGVtZW50SW1wbCYgb3B0aW9uID0gKnN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50SW1w
bCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgQmxvY2tRdW90ZUNp
dGU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhibG9ja3F1b3RlLmNpdGUoKSk7CisgICAgICAg
IGNhc2UgT3B0aW9uRm9ybTogICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLG9wdGlv
bi5mb3JtKCkpOyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVudAorICAgICAgICBjYXNlIE9wdGlvbkRl
ZmF1bHRTZWxlY3RlZDogcmV0dXJuIEJvb2xlYW4ob3B0aW9uLmRlZmF1bHRTZWxlY3RlZCgpKTsK
KyAgICAgICAgY2FzZSBPcHRpb25UZXh0OiAgICAgICAgICAgIHJldHVybiBTdHJpbmcob3B0aW9u
LnRleHQoKSk7CisgICAgICAgIGNhc2UgT3B0aW9uSW5kZXg6ICAgICAgICAgICByZXR1cm4gTnVt
YmVyKG9wdGlvbi5pbmRleCgpKTsKKyAgICAgICAgY2FzZSBPcHRpb25EaXNhYmxlZDogICAgICAg
IHJldHVybiBCb29sZWFuKG9wdGlvbi5kaXNhYmxlZCgpKTsKKyAgICAgICAgY2FzZSBPcHRpb25M
YWJlbDogICAgICAgICAgIHJldHVybiBTdHJpbmcob3B0aW9uLmxhYmVsKCkpOworICAgICAgICBj
YXNlIE9wdGlvblNlbGVjdGVkOiAgICAgICAgcmV0dXJuIEJvb2xlYW4ob3B0aW9uLnNlbGVjdGVk
KCkpOworICAgICAgICBjYXNlIE9wdGlvblZhbHVlOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhv
cHRpb24udmFsdWUoKSk7CiAgICAgfQotICB9Ci0gIGNhc2UgSURfUTogewotICAgIEhUTUxRdW90
ZUVsZW1lbnRJbXBsICZxdW90ZSA9IHN0YXRpY19jYXN0PEhUTUxRdW90ZUVsZW1lbnRJbXBsICY+
KGVsZW1lbnQpOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1l
bnQ6OmlucHV0R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAg
IEhUTUxJbnB1dEVsZW1lbnRJbXBsJiBpbnB1dCA9ICpzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVt
ZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgUXVvdGVD
aXRlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcocXVvdGUuY2l0ZSgpKTsKKyAgICAgICAgY2Fz
ZSBJbnB1dERlZmF1bHRWYWx1ZTogICAgcmV0dXJuIFN0cmluZyhpbnB1dC5kZWZhdWx0VmFsdWUo
KSk7CisgICAgICAgIGNhc2UgSW5wdXREZWZhdWx0Q2hlY2tlZDogIHJldHVybiBCb29sZWFuKGlu
cHV0LmRlZmF1bHRDaGVja2VkKCkpOworICAgICAgICBjYXNlIElucHV0Rm9ybTogICAgICAgICAg
ICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLGlucHV0LmZvcm0oKSk7IC8vIHR5cGUgSFRNTEZvcm1F
bGVtZW50CisgICAgICAgIGNhc2UgSW5wdXRBY2NlcHQ6ICAgICAgICAgIHJldHVybiBTdHJpbmco
aW5wdXQuYWNjZXB0KCkpOworICAgICAgICBjYXNlIElucHV0QWNjZXNzS2V5OiAgICAgICByZXR1
cm4gU3RyaW5nKGlucHV0LmFjY2Vzc0tleSgpKTsKKyAgICAgICAgY2FzZSBJbnB1dEFsaWduOiAg
ICAgICAgICAgcmV0dXJuIFN0cmluZyhpbnB1dC5hbGlnbigpKTsKKyAgICAgICAgY2FzZSBJbnB1
dEFsdDogICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpbnB1dC5hbHQoKSk7CisgICAgICAgIGNh
c2UgSW5wdXRDaGVja2VkOiAgICAgICAgIHJldHVybiBCb29sZWFuKGlucHV0LmNoZWNrZWQoKSk7
CisgICAgICAgIGNhc2UgSW5wdXREaXNhYmxlZDogICAgICAgIHJldHVybiBCb29sZWFuKGlucHV0
LmRpc2FibGVkKCkpOworICAgICAgICBjYXNlIElucHV0TWF4TGVuZ3RoOiAgICAgICByZXR1cm4g
TnVtYmVyKGlucHV0Lm1heExlbmd0aCgpKTsKKyAgICAgICAgY2FzZSBJbnB1dE5hbWU6ICAgICAg
ICAgICAgcmV0dXJuIFN0cmluZyhpbnB1dC5uYW1lKCkpOworICAgICAgICBjYXNlIElucHV0UmVh
ZE9ubHk6ICAgICAgICByZXR1cm4gQm9vbGVhbihpbnB1dC5yZWFkT25seSgpKTsKKyAgICAgICAg
Y2FzZSBJbnB1dFNpemU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpbnB1dC5zaXplRE9NKCkp
OworICAgICAgICBjYXNlIElucHV0U3JjOiAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGlucHV0
LnNyYygpKTsKKyAgICAgICAgY2FzZSBJbnB1dFRhYkluZGV4OiAgICAgICAgcmV0dXJuIE51bWJl
cihpbnB1dC50YWJJbmRleCgpKTsKKyAgICAgICAgY2FzZSBJbnB1dFR5cGU6ICAgICAgICAgICAg
cmV0dXJuIFN0cmluZyhpbnB1dC50eXBlKCkpOworICAgICAgICBjYXNlIElucHV0VXNlTWFwOiAg
ICAgICAgICByZXR1cm4gU3RyaW5nKGlucHV0LnVzZU1hcCgpKTsKKyAgICAgICAgY2FzZSBJbnB1
dFZhbHVlOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpbnB1dC52YWx1ZSgpKTsKICAgICB9Ci0g
IH0KLSAgY2FzZSBJRF9QUkU6IHsKLSAgICBIVE1MUHJlRWxlbWVudEltcGwgJnByZSA9IHN0YXRp
Y19jYXN0PEhUTUxQcmVFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICByZXR1cm4gVW5kZWZp
bmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50Ojp0ZXh0QXJlYUdldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MVGV4dEFyZWFFbGVtZW50SW1wbCYg
dGV4dGFyZWEgPSAqc3RhdGljX2Nhc3Q8SFRNTFRleHRBcmVhRWxlbWVudEltcGwqPihpbXBsKCkp
OwogICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIFByZVdpZHRoOiAgICAgICAgICAgcmV0
dXJuIE51bWJlcihwcmUud2lkdGgoKSk7CisgICAgICAgIGNhc2UgVGV4dEFyZWFEZWZhdWx0VmFs
dWU6ICAgIHJldHVybiBTdHJpbmcodGV4dGFyZWEuZGVmYXVsdFZhbHVlKCkpOworICAgICAgICBj
YXNlIFRleHRBcmVhRm9ybTogICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLHRleHRh
cmVhLmZvcm0oKSk7IC8vIHR5cGUgSFRNTEZvcm1FbGVtZW50CisgICAgICAgIGNhc2UgVGV4dEFy
ZWFBY2Nlc3NLZXk6ICAgICAgIHJldHVybiBTdHJpbmcodGV4dGFyZWEuYWNjZXNzS2V5KCkpOwor
ICAgICAgICBjYXNlIFRleHRBcmVhQ29sczogICAgICAgICAgICByZXR1cm4gTnVtYmVyKHRleHRh
cmVhLmNvbHMoKSk7CisgICAgICAgIGNhc2UgVGV4dEFyZWFEaXNhYmxlZDogICAgICAgIHJldHVy
biBCb29sZWFuKHRleHRhcmVhLmRpc2FibGVkKCkpOworICAgICAgICBjYXNlIFRleHRBcmVhTmFt
ZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRleHRhcmVhLm5hbWUoKSk7CisgICAgICAgIGNh
c2UgVGV4dEFyZWFSZWFkT25seTogICAgICAgIHJldHVybiBCb29sZWFuKHRleHRhcmVhLnJlYWRP
bmx5KCkpOworICAgICAgICBjYXNlIFRleHRBcmVhUm93czogICAgICAgICAgICByZXR1cm4gTnVt
YmVyKHRleHRhcmVhLnJvd3MoKSk7CisgICAgICAgIGNhc2UgVGV4dEFyZWFUYWJJbmRleDogICAg
ICAgIHJldHVybiBOdW1iZXIodGV4dGFyZWEudGFiSW5kZXgoKSk7CisgICAgICAgIGNhc2UgVGV4
dEFyZWFUeXBlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcodGV4dGFyZWEudHlwZSgpKTsKKyAg
ICAgICAgY2FzZSBUZXh0QXJlYVZhbHVlOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0ZXh0YXJl
YS52YWx1ZSgpKTsKICAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfQlI6IHsKLSAgICBI
VE1MQlJFbGVtZW50SW1wbCAmYnIgPSBzdGF0aWNfY2FzdDxIVE1MQlJFbGVtZW50SW1wbCAmPihl
bGVtZW50KTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50
OjpidXR0b25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAg
SFRNTEJ1dHRvbkVsZW1lbnRJbXBsJiBidXR0b24gPSAqc3RhdGljX2Nhc3Q8SFRNTEJ1dHRvbkVs
ZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBCUkNs
ZWFyOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhici5jbGVhcigpKTsKLSAgICB9Ci0gIH0KLSAg
YnJlYWs7Ci0gIGNhc2UgSURfQkFTRUZPTlQ6IHsKLSAgICBIVE1MQmFzZUZvbnRFbGVtZW50SW1w
bCAmYmFzZUZvbnQgPSBzdGF0aWNfY2FzdDxIVE1MQmFzZUZvbnRFbGVtZW50SW1wbCAmPihlbGVt
ZW50KTsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBCYXNlRm9udENvbG9yOiAgICAg
ICAgICAgcmV0dXJuIFN0cmluZyhiYXNlRm9udC5jb2xvcigpKTsKLSAgICBjYXNlIEJhc2VGb250
RmFjZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGJhc2VGb250LmZhY2UoKSk7Ci0gICAgY2Fz
ZSBCYXNlRm9udFNpemU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhiYXNlRm9udC5zaXplKCkp
OwotICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9GT05UOiB7Ci0gICAgSFRNTEZvbnRF
bGVtZW50SW1wbCAmZm9udCA9IHN0YXRpY19jYXN0PEhUTUxGb250RWxlbWVudEltcGwgJj4oZWxl
bWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgRm9udENvbG9yOiAgICAgICAg
ICAgcmV0dXJuIFN0cmluZyhmb250LmNvbG9yKCkpOwotICAgIGNhc2UgRm9udEZhY2U6ICAgICAg
ICAgICAgcmV0dXJuIFN0cmluZyhmb250LmZhY2UoKSk7Ci0gICAgY2FzZSBGb250U2l6ZTogICAg
ICAgICAgICByZXR1cm4gU3RyaW5nKGZvbnQuc2l6ZSgpKTsKLSAgICB9Ci0gIH0KLSAgYnJlYWs7
Ci0gIGNhc2UgSURfSFI6IHsKLSAgICBIVE1MSFJFbGVtZW50SW1wbCAmaHIgPSBzdGF0aWNfY2Fz
dDxIVE1MSFJFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0g
ICAgY2FzZSBIUkFsaWduOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhoci5hbGlnbigpKTsKLSAg
ICBjYXNlIEhSTm9TaGFkZTogICAgICAgICByZXR1cm4gQm9vbGVhbihoci5ub1NoYWRlKCkpOwot
ICAgIGNhc2UgSFJTaXplOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoaHIuc2l6ZSgpKTsKLSAg
ICBjYXNlIEhSV2lkdGg6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGhyLndpZHRoKCkpOworICAg
ICAgICBjYXNlIEJ1dHRvbkZvcm06ICAgICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyxi
dXR0b24uZm9ybSgpKTsgLy8gdHlwZSBIVE1MRm9ybUVsZW1lbnQKKyAgICAgICAgY2FzZSBCdXR0
b25BY2Nlc3NLZXk6ICAgICAgIHJldHVybiBTdHJpbmcoYnV0dG9uLmFjY2Vzc0tleSgpKTsKKyAg
ICAgICAgY2FzZSBCdXR0b25EaXNhYmxlZDogICAgICAgIHJldHVybiBCb29sZWFuKGJ1dHRvbi5k
aXNhYmxlZCgpKTsKKyAgICAgICAgY2FzZSBCdXR0b25OYW1lOiAgICAgICAgICAgIHJldHVybiBT
dHJpbmcoYnV0dG9uLm5hbWUoKSk7CisgICAgICAgIGNhc2UgQnV0dG9uVGFiSW5kZXg6ICAgICAg
ICByZXR1cm4gTnVtYmVyKGJ1dHRvbi50YWJJbmRleCgpKTsKKyAgICAgICAgY2FzZSBCdXR0b25U
eXBlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYnV0dG9uLnR5cGUoKSk7CisgICAgICAgIGNh
c2UgQnV0dG9uVmFsdWU6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGJ1dHRvbi52YWx1ZSgpKTsK
ICAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfSU5TOgotICBjYXNlIElEX0RFTDogewot
ICAgIEhUTUxNb2RFbGVtZW50SW1wbCAmbW9kID0gc3RhdGljX2Nhc3Q8SFRNTE1vZEVsZW1lbnRJ
bXBsICY+KGVsZW1lbnQpOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRN
TEVsZW1lbnQ6OmxhYmVsR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAor
eworICAgIEhUTUxMYWJlbEVsZW1lbnRJbXBsJiBsYWJlbCA9ICpzdGF0aWNfY2FzdDxIVE1MTGFi
ZWxFbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2Ug
TW9kQ2l0ZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKG1vZC5jaXRlKCkpOwotICAgIGNhc2Ug
TW9kRGF0ZVRpbWU6ICAgICAgICByZXR1cm4gU3RyaW5nKG1vZC5kYXRlVGltZSgpKTsKKyAgICAg
ICAgY2FzZSBMYWJlbEZvcm06ICAgICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyxsYWJl
bC5mb3JtKCkpOyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVudAorICAgICAgICBjYXNlIExhYmVsQWNj
ZXNzS2V5OiAgICAgICByZXR1cm4gU3RyaW5nKGxhYmVsLmFjY2Vzc0tleSgpKTsKKyAgICAgICAg
Y2FzZSBMYWJlbEh0bWxGb3I6ICAgICAgICAgcmV0dXJuIFN0cmluZyhsYWJlbC5odG1sRm9yKCkp
OwogICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9BOiB7Ci0gICAgSFRNTEFuY2hvckVs
ZW1lbnRJbXBsICZhbmNob3IgPSBzdGF0aWNfY2FzdDxIVE1MQW5jaG9yRWxlbWVudEltcGwgJj4o
ZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgQW5jaG9yQWNjZXNzS2V5
OiAgICAgICByZXR1cm4gU3RyaW5nKGFuY2hvci5hY2Nlc3NLZXkoKSk7Ci0gICAgY2FzZSBBbmNo
b3JDaGFyc2V0OiAgICAgICAgIHJldHVybiBTdHJpbmcoYW5jaG9yLmNoYXJzZXQoKSk7Ci0gICAg
Y2FzZSBBbmNob3JDb29yZHM6ICAgICAgICAgIHJldHVybiBTdHJpbmcoYW5jaG9yLmNvb3Jkcygp
KTsKLSAgICBjYXNlIEFuY2hvckhyZWY6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhhbmNob3Iu
aHJlZigpKTsKLSAgICBjYXNlIEFuY2hvckhyZWZMYW5nOiAgICAgICAgcmV0dXJuIFN0cmluZyhh
bmNob3IuaHJlZmxhbmcoKSk7Ci0gICAgY2FzZSBBbmNob3JIYXNoOiAgICAgICAgICAgIHJldHVy
biBTdHJpbmcoJyMnK0tVUkwoYW5jaG9yLmhyZWYoKS5zdHJpbmcoKSkucmVmKCkpOwotICAgIGNh
c2UgQW5jaG9ySG9zdDogICAgICAgICAgICByZXR1cm4gU3RyaW5nKEtVUkwoYW5jaG9yLmhyZWYo
KS5zdHJpbmcoKSkuaG9zdCgpKTsKLSAgICBjYXNlIEFuY2hvckhvc3RuYW1lOiB7Ci0gICAgICBL
VVJMIHVybChhbmNob3IuaHJlZigpLnN0cmluZygpKTsKLSAgICAgIGtkRGVidWcoNjA3MCkgPDwg
ImFuY2hvcjo6aG9zdG5hbWUgdXNlczoiIDw8dXJsLnVybCgpPDxlbmRsOwotICAgICAgaWYgKHVy
bC5wb3J0KCk9PTApCi0gICAgICAgIHJldHVybiBTdHJpbmcodXJsLmhvc3QoKSk7Ci0gICAgICBl
bHNlCi0gICAgICAgIHJldHVybiBTdHJpbmcodXJsLmhvc3QoKSArICI6IiArIFFTdHJpbmc6Om51
bWJlcih1cmwucG9ydCgpKSk7Ci0gICAgfQotICAgIGNhc2UgQW5jaG9yUGF0aE5hbWU6ICAgICAg
ICByZXR1cm4gU3RyaW5nKEtVUkwoYW5jaG9yLmhyZWYoKS5zdHJpbmcoKSkucGF0aCgpKTsKLSAg
ICBjYXNlIEFuY2hvclBvcnQ6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhRU3RyaW5nOjpudW1i
ZXIoS1VSTChhbmNob3IuaHJlZigpLnN0cmluZygpKS5wb3J0KCkpKTsKLSAgICBjYXNlIEFuY2hv
clByb3RvY29sOiAgICAgICAgcmV0dXJuIFN0cmluZyhLVVJMKGFuY2hvci5ocmVmKCkuc3RyaW5n
KCkpLnByb3RvY29sKCkrIjoiKTsKLSAgICBjYXNlIEFuY2hvclNlYXJjaDogICAgICAgICAgcmV0
dXJuIFN0cmluZyhLVVJMKGFuY2hvci5ocmVmKCkuc3RyaW5nKCkpLnF1ZXJ5KCkpOwotICAgIGNh
c2UgQW5jaG9yTmFtZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGFuY2hvci5uYW1lKCkpOwot
ICAgIGNhc2UgQW5jaG9yUmVsOiAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGFuY2hvci5yZWwo
KSk7Ci0gICAgY2FzZSBBbmNob3JSZXY6ICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYW5jaG9y
LnJldigpKTsKLSAgICBjYXNlIEFuY2hvclNoYXBlOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhh
bmNob3Iuc2hhcGUoKSk7Ci0gICAgY2FzZSBBbmNob3JUYWJJbmRleDogICAgICAgIHJldHVybiBO
dW1iZXIoYW5jaG9yLnRhYkluZGV4KCkpOwotICAgIGNhc2UgQW5jaG9yVGFyZ2V0OiAgICAgICAg
ICByZXR1cm4gU3RyaW5nKGFuY2hvci50YXJnZXQoKSk7Ci0gICAgY2FzZSBBbmNob3JUeXBlOiAg
ICAgICAgICAgIHJldHVybiBTdHJpbmcoYW5jaG9yLnR5cGUoKSk7Ci0gICAgY2FzZSBBbmNob3JU
ZXh0OgotICAgICAgaWYgKERvY3VtZW50SW1wbCogZG9jID0gYW5jaG9yLmdldERvY3VtZW50KCkp
Ci0gICAgICAgIGRvYy0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7Ci0g
ICAgICByZXR1cm4gU3RyaW5nKGFuY2hvci5pbm5lclRleHQoKSk7Ci0gICAgfQotICB9Ci0gIGJy
ZWFrOwotICBjYXNlIElEX0lNRzogewotICAgIEhUTUxJbWFnZUVsZW1lbnRJbXBsICZpbWFnZSA9
IHN0YXRpY19jYXN0PEhUTUxJbWFnZUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgIHN3aXRj
aCAodG9rZW4pIHsKLSAgICBjYXNlIEltYWdlTmFtZTogICAgICAgICAgICByZXR1cm4gU3RyaW5n
KGltYWdlLm5hbWUoKSk7Ci0gICAgY2FzZSBJbWFnZUFsaWduOiAgICAgICAgICAgcmV0dXJuIFN0
cmluZyhpbWFnZS5hbGlnbigpKTsKLSAgICBjYXNlIEltYWdlQWx0OiAgICAgICAgICAgICByZXR1
cm4gU3RyaW5nKGltYWdlLmFsdCgpKTsKLSAgICBjYXNlIEltYWdlQm9yZGVyOiAgICAgICAgICBy
ZXR1cm4gTnVtYmVyKGltYWdlLmJvcmRlcigpKTsKLSAgICBjYXNlIEltYWdlSGVpZ2h0OiAgICAg
ICAgICByZXR1cm4gTnVtYmVyKGltYWdlLmhlaWdodCh0cnVlKSk7Ci0gICAgY2FzZSBJbWFnZUhz
cGFjZTogICAgICAgICAgcmV0dXJuIE51bWJlcihpbWFnZS5oc3BhY2UoKSk7Ci0gICAgY2FzZSBJ
bWFnZUlzTWFwOiAgICAgICAgICAgcmV0dXJuIEJvb2xlYW4oaW1hZ2UuaXNNYXAoKSk7Ci0gICAg
Y2FzZSBJbWFnZUxvbmdEZXNjOiAgICAgICAgcmV0dXJuIFN0cmluZyhpbWFnZS5sb25nRGVzYygp
KTsKLSAgICBjYXNlIEltYWdlU3JjOiAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGltYWdlLnNy
YygpKTsKLSAgICBjYXNlIEltYWdlVXNlTWFwOiAgICAgICAgICByZXR1cm4gU3RyaW5nKGltYWdl
LnVzZU1hcCgpKTsKLSAgICBjYXNlIEltYWdlVnNwYWNlOiAgICAgICAgICByZXR1cm4gTnVtYmVy
KGltYWdlLnZzcGFjZSgpKTsKLSAgICBjYXNlIEltYWdlV2lkdGg6ICAgICAgICAgICByZXR1cm4g
TnVtYmVyKGltYWdlLndpZHRoKHRydWUpKTsKLSAgICBjYXNlIEltYWdlWDogICAgICAgICAgICAg
ICByZXR1cm4gTnVtYmVyKGltYWdlLngoKSk7Ci0gICAgY2FzZSBJbWFnZVk6ICAgICAgICAgICAg
ICAgcmV0dXJuIE51bWJlcihpbWFnZS55KCkpOwotICAgIH0KLSAgfQotICBicmVhazsKLSAgY2Fz
ZSBJRF9PQkpFQ1Q6IHsKLSAgICBIVE1MT2JqZWN0RWxlbWVudEltcGwgJm9iamVjdCA9IHN0YXRp
Y19jYXN0PEhUTUxPYmplY3RFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICBzd2l0Y2ggKHRv
a2VuKSB7Ci0gICAgY2FzZSBPYmplY3RGb3JtOiAgICAgICAgICAgIHJldHVybiBnZXRET01Ob2Rl
KGV4ZWMsb2JqZWN0LmZvcm0oKSk7IC8vIHR5cGUgSFRNTEZvcm1FbGVtZW50Ci0gICAgY2FzZSBP
YmplY3RDb2RlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcob2JqZWN0LmNvZGUoKSk7Ci0gICAg
Y2FzZSBPYmplY3RBbGlnbjogICAgICAgICAgIHJldHVybiBTdHJpbmcob2JqZWN0LmFsaWduKCkp
OwotICAgIGNhc2UgT2JqZWN0QXJjaGl2ZTogICAgICAgICByZXR1cm4gU3RyaW5nKG9iamVjdC5h
cmNoaXZlKCkpOwotICAgIGNhc2UgT2JqZWN0Qm9yZGVyOiAgICAgICAgICByZXR1cm4gU3RyaW5n
KG9iamVjdC5ib3JkZXIoKSk7Ci0gICAgY2FzZSBPYmplY3RDb2RlQmFzZTogICAgICAgIHJldHVy
biBTdHJpbmcob2JqZWN0LmNvZGVCYXNlKCkpOwotICAgIGNhc2UgT2JqZWN0Q29kZVR5cGU6ICAg
ICAgICByZXR1cm4gU3RyaW5nKG9iamVjdC5jb2RlVHlwZSgpKTsKLSAgICBjYXNlIE9iamVjdENv
bnRlbnREb2N1bWVudDogcmV0dXJuIGNoZWNrTm9kZVNlY3VyaXR5KGV4ZWMsb2JqZWN0LmNvbnRl
bnREb2N1bWVudCgpKSA/IAotCQkJCSAgICAgICBnZXRET01Ob2RlKGV4ZWMsIG9iamVjdC5jb250
ZW50RG9jdW1lbnQoKSkgOiBVbmRlZmluZWQoKTsKLSAgICBjYXNlIE9iamVjdERhdGE6ICAgICAg
ICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3QuZGF0YSgpKTsKLSAgICBjYXNlIE9iamVjdERlY2xh
cmU6ICAgICAgICAgcmV0dXJuIEJvb2xlYW4ob2JqZWN0LmRlY2xhcmUoKSk7Ci0gICAgY2FzZSBP
YmplY3RIZWlnaHQ6ICAgICAgICAgIHJldHVybiBTdHJpbmcob2JqZWN0LmhlaWdodCgpKTsKLSAg
ICBjYXNlIE9iamVjdEhzcGFjZTogICAgICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3QuaHNwYWNl
KCkpOwotICAgIGNhc2UgT2JqZWN0TmFtZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKG9iamVj
dC5uYW1lKCkpOwotICAgIGNhc2UgT2JqZWN0U3RhbmRieTogICAgICAgICByZXR1cm4gU3RyaW5n
KG9iamVjdC5zdGFuZGJ5KCkpOwotICAgIGNhc2UgT2JqZWN0VGFiSW5kZXg6ICAgICAgICByZXR1
cm4gTnVtYmVyKG9iamVjdC50YWJJbmRleCgpKTsKLSAgICBjYXNlIE9iamVjdFR5cGU6ICAgICAg
ICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3QudHlwZSgpKTsKLSAgICBjYXNlIE9iamVjdFVzZU1h
cDogICAgICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3QudXNlTWFwKCkpOwotICAgIGNhc2UgT2Jq
ZWN0VnNwYWNlOiAgICAgICAgICByZXR1cm4gU3RyaW5nKG9iamVjdC52c3BhY2UoKSk7Ci0gICAg
Y2FzZSBPYmplY3RXaWR0aDogICAgICAgICAgIHJldHVybiBTdHJpbmcob2JqZWN0LndpZHRoKCkp
OwotICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9QQVJBTTogewotICAgIEhUTUxQYXJh
bUVsZW1lbnRJbXBsICZwYXJhbSA9IHN0YXRpY19jYXN0PEhUTUxQYXJhbUVsZW1lbnRJbXBsICY+
KGVsZW1lbnQpOwotICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIFBhcmFtTmFtZTogICAg
ICAgICAgICByZXR1cm4gU3RyaW5nKHBhcmFtLm5hbWUoKSk7Ci0gICAgY2FzZSBQYXJhbVR5cGU6
ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhwYXJhbS50eXBlKCkpOwotICAgIGNhc2UgUGFyYW1W
YWx1ZTogICAgICAgICAgIHJldHVybiBTdHJpbmcocGFyYW0udmFsdWUoKSk7Ci0gICAgY2FzZSBQ
YXJhbVZhbHVlVHlwZTogICAgICAgcmV0dXJuIFN0cmluZyhwYXJhbS52YWx1ZVR5cGUoKSk7Ci0g
ICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX0FQUExFVDogewotICAgIEhUTUxBcHBsZXRF
bGVtZW50SW1wbCAmYXBwbGV0ID0gc3RhdGljX2Nhc3Q8SFRNTEFwcGxldEVsZW1lbnRJbXBsICY+
KGVsZW1lbnQpOwotICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIEFwcGxldEFsaWduOiAg
ICAgICAgICAgcmV0dXJuIFN0cmluZyhhcHBsZXQuYWxpZ24oKSk7Ci0gICAgY2FzZSBBcHBsZXRB
bHQ6ICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYXBwbGV0LmFsdCgpKTsKLSAgICBjYXNlIEFw
cGxldEFyY2hpdmU6ICAgICAgICAgcmV0dXJuIFN0cmluZyhhcHBsZXQuYXJjaGl2ZSgpKTsKLSAg
ICBjYXNlIEFwcGxldENvZGU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhhcHBsZXQuY29kZSgp
KTsKLSAgICBjYXNlIEFwcGxldENvZGVCYXNlOiAgICAgICAgcmV0dXJuIFN0cmluZyhhcHBsZXQu
Y29kZUJhc2UoKSk7Ci0gICAgY2FzZSBBcHBsZXRIZWlnaHQ6ICAgICAgICAgIHJldHVybiBTdHJp
bmcoYXBwbGV0LmhlaWdodCgpKTsKLSAgICBjYXNlIEFwcGxldEhzcGFjZTogICAgICAgICAgcmV0
dXJuIFN0cmluZyhhcHBsZXQuaHNwYWNlKCkpOwotICAgIGNhc2UgQXBwbGV0TmFtZTogICAgICAg
ICAgICByZXR1cm4gU3RyaW5nKGFwcGxldC5uYW1lKCkpOwotICAgIGNhc2UgQXBwbGV0T2JqZWN0
OiAgICAgICAgICByZXR1cm4gU3RyaW5nKGFwcGxldC5vYmplY3QoKSk7Ci0gICAgY2FzZSBBcHBs
ZXRWc3BhY2U6ICAgICAgICAgIHJldHVybiBTdHJpbmcoYXBwbGV0LnZzcGFjZSgpKTsKLSAgICBj
YXNlIEFwcGxldFdpZHRoOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhhcHBsZXQud2lkdGgoKSk7
Ci0gICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX01BUDogewotICAgIEhUTUxNYXBFbGVt
ZW50SW1wbCAmbWFwID0gc3RhdGljX2Nhc3Q8SFRNTE1hcEVsZW1lbnRJbXBsICY+KGVsZW1lbnQp
OworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OmZpZWxk
U2V0R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxG
aWVsZFNldEVsZW1lbnRJbXBsJiBmaWVsZFNldCA9ICpzdGF0aWNfY2FzdDxIVE1MRmllbGRTZXRF
bGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IEZpZWxkU2V0Rm9ybSkKKyAg
ICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyxmaWVsZFNldC5mb3JtKCkpOyAvLyB0eXBlIEhU
TUxGb3JtRWxlbWVudAorICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVs
ZW1lbnQ6OmxlZ2VuZEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sK
KyAgICBIVE1MTGVnZW5kRWxlbWVudEltcGwmIGxlZ2VuZCA9ICpzdGF0aWNfY2FzdDxIVE1MTGVn
ZW5kRWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNl
IE1hcEFyZWFzOiAgICAgICAgICAgcmV0dXJuIGdldEhUTUxDb2xsZWN0aW9uKGV4ZWMsIG1hcC5h
cmVhcygpLmdldCgpKTsgLy8gdHlwZSBIVE1MQ29sbGVjdGlvbgotICAgIGNhc2UgTWFwTmFtZTog
ICAgICAgICAgICByZXR1cm4gU3RyaW5nKG1hcC5uYW1lKCkpOwotICAgIH0KLSAgfQotICBicmVh
azsKLSAgY2FzZSBJRF9BUkVBOiB7Ci0gICAgSFRNTEFyZWFFbGVtZW50SW1wbCAmYXJlYSA9IHN0
YXRpY19jYXN0PEhUTUxBcmVhRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0
b2tlbikgewotICAgIGNhc2UgQXJlYUFjY2Vzc0tleTogICAgICAgcmV0dXJuIFN0cmluZyhhcmVh
LmFjY2Vzc0tleSgpKTsKLSAgICBjYXNlIEFyZWFBbHQ6ICAgICAgICAgICAgIHJldHVybiBTdHJp
bmcoYXJlYS5hbHQoKSk7Ci0gICAgY2FzZSBBcmVhQ29vcmRzOiAgICAgICAgICByZXR1cm4gU3Ry
aW5nKGFyZWEuY29vcmRzKCkpOwotICAgIGNhc2UgQXJlYUhyZWY6ICAgICAgICAgICAgcmV0dXJu
IFN0cmluZyhhcmVhLmhyZWYoKSk7Ci0gICAgY2FzZSBBcmVhSGFzaDogICAgICAgICAgICByZXR1
cm4gU3RyaW5nKCcjJytLVVJMKGFyZWEuaHJlZigpLnN0cmluZygpKS5yZWYoKSk7Ci0gICAgY2Fz
ZSBBcmVhSG9zdDogICAgICAgICAgICByZXR1cm4gU3RyaW5nKEtVUkwoYXJlYS5ocmVmKCkuc3Ry
aW5nKCkpLmhvc3QoKSk7Ci0gICAgY2FzZSBBcmVhSG9zdE5hbWU6IHsKLSAgICAgIEtVUkwgdXJs
KGFyZWEuaHJlZigpLnN0cmluZygpKTsKLSAgICAgIGtkRGVidWcoNjA3MCkgPDwgImxpbms6Omhv
c3RuYW1lIHVzZXM6IiA8PHVybC51cmwoKTw8ZW5kbDsKLSAgICAgIGlmICh1cmwucG9ydCgpPT0w
KQotICAgICAgICByZXR1cm4gU3RyaW5nKHVybC5ob3N0KCkpOwotICAgICAgZWxzZQotICAgICAg
ICByZXR1cm4gU3RyaW5nKHVybC5ob3N0KCkgKyAiOiIgKyBRU3RyaW5nOjpudW1iZXIodXJsLnBv
cnQoKSkpOworICAgICAgICBjYXNlIExlZ2VuZEZvcm06ICAgICAgICAgICAgcmV0dXJuIGdldERP
TU5vZGUoZXhlYyxsZWdlbmQuZm9ybSgpKTsgLy8gdHlwZSBIVE1MRm9ybUVsZW1lbnQKKyAgICAg
ICAgY2FzZSBMZWdlbmRBY2Nlc3NLZXk6ICAgICAgIHJldHVybiBTdHJpbmcobGVnZW5kLmFjY2Vz
c0tleSgpKTsKKyAgICAgICAgY2FzZSBMZWdlbmRBbGlnbjogICAgICAgICAgIHJldHVybiBTdHJp
bmcobGVnZW5kLmFsaWduKCkpOwogICAgIH0KLSAgICBjYXNlIEFyZWFQYXRoTmFtZTogICAgICAg
IHJldHVybiBTdHJpbmcoS1VSTChhcmVhLmhyZWYoKS5zdHJpbmcoKSkucGF0aCgpKTsKLSAgICBj
YXNlIEFyZWFQb3J0OiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoUVN0cmluZzo6bnVtYmVyKEtV
UkwoYXJlYS5ocmVmKCkuc3RyaW5nKCkpLnBvcnQoKSkpOwotICAgIGNhc2UgQXJlYVByb3RvY29s
OiAgICAgICAgcmV0dXJuIFN0cmluZyhLVVJMKGFyZWEuaHJlZigpLnN0cmluZygpKS5wcm90b2Nv
bCgpKyI6Iik7Ci0gICAgY2FzZSBBcmVhU2VhcmNoOiAgICAgICAgICByZXR1cm4gU3RyaW5nKEtV
UkwoYXJlYS5ocmVmKCkuc3RyaW5nKCkpLnF1ZXJ5KCkpOwotICAgIGNhc2UgQXJlYU5vSHJlZjog
ICAgICAgICAgcmV0dXJuIEJvb2xlYW4oYXJlYS5ub0hyZWYoKSk7Ci0gICAgY2FzZSBBcmVhU2hh
cGU6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGFyZWEuc2hhcGUoKSk7Ci0gICAgY2FzZSBBcmVh
VGFiSW5kZXg6ICAgICAgICByZXR1cm4gTnVtYmVyKGFyZWEudGFiSW5kZXgoKSk7Ci0gICAgY2Fz
ZSBBcmVhVGFyZ2V0OiAgICAgICAgICByZXR1cm4gU3RyaW5nKGFyZWEudGFyZ2V0KCkpOwotICAg
IH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9TQ1JJUFQ6IHsKLSAgICBIVE1MU2NyaXB0RWxl
bWVudEltcGwgJnNjcmlwdCA9IHN0YXRpY19jYXN0PEhUTUxTY3JpcHRFbGVtZW50SW1wbCAmPihl
bGVtZW50KTsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBTY3JpcHRUZXh0OiAgICAg
ICAgICAgIHJldHVybiBTdHJpbmcoc2NyaXB0LnRleHQoKSk7Ci0gICAgY2FzZSBTY3JpcHRIdG1s
Rm9yOiAgICAgICAgIHJldHVybiBTdHJpbmcoc2NyaXB0Lmh0bWxGb3IoKSk7Ci0gICAgY2FzZSBT
Y3JpcHRFdmVudDogICAgICAgICAgIHJldHVybiBTdHJpbmcoc2NyaXB0LmV2ZW50KCkpOwotICAg
IGNhc2UgU2NyaXB0Q2hhcnNldDogICAgICAgICByZXR1cm4gU3RyaW5nKHNjcmlwdC5jaGFyc2V0
KCkpOwotICAgIGNhc2UgU2NyaXB0RGVmZXI6ICAgICAgICAgICByZXR1cm4gQm9vbGVhbihzY3Jp
cHQuZGVmZXIoKSk7Ci0gICAgY2FzZSBTY3JpcHRTcmM6ICAgICAgICAgICAgIHJldHVybiBTdHJp
bmcoc2NyaXB0LnNyYygpKTsKLSAgICBjYXNlIFNjcmlwdFR5cGU6ICAgICAgICAgICAgcmV0dXJu
IFN0cmluZyhzY3JpcHQudHlwZSgpKTsKLSAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURf
VEFCTEU6IHsKLSAgICBIVE1MVGFibGVFbGVtZW50SW1wbCAmdGFibGUgPSBzdGF0aWNfY2FzdDxI
VE1MVGFibGVFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0g
ICAgY2FzZSBUYWJsZUNhcHRpb246ICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyx0YWJs
ZS5jYXB0aW9uKCkpOyAvLyB0eXBlIEhUTUxUYWJsZUNhcHRpb25FbGVtZW50Ci0gICAgY2FzZSBU
YWJsZVRIZWFkOiAgICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyx0YWJsZS50SGVhZCgp
KTsgLy8gdHlwZSBIVE1MVGFibGVTZWN0aW9uRWxlbWVudAotICAgIGNhc2UgVGFibGVURm9vdDog
ICAgICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsdGFibGUudEZvb3QoKSk7IC8vIHR5cGUg
SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQKLSAgICBjYXNlIFRhYmxlUm93czogICAgICAgICAgICBy
ZXR1cm4gZ2V0SFRNTENvbGxlY3Rpb24oZXhlYywgdGFibGUucm93cygpLmdldCgpKTsgLy8gdHlw
ZSBIVE1MQ29sbGVjdGlvbgotICAgIGNhc2UgVGFibGVUQm9kaWVzOiAgICAgICAgIHJldHVybiBn
ZXRIVE1MQ29sbGVjdGlvbihleGVjLCB0YWJsZS50Qm9kaWVzKCkuZ2V0KCkpOyAvLyB0eXBlIEhU
TUxDb2xsZWN0aW9uCi0gICAgY2FzZSBUYWJsZUFsaWduOiAgICAgICAgICAgcmV0dXJuIFN0cmlu
Zyh0YWJsZS5hbGlnbigpKTsKLSAgICBjYXNlIFRhYmxlQmdDb2xvcjogICAgICAgICByZXR1cm4g
U3RyaW5nKHRhYmxlLmJnQ29sb3IoKSk7Ci0gICAgY2FzZSBUYWJsZUJvcmRlcjogICAgICAgICAg
cmV0dXJuIFN0cmluZyh0YWJsZS5ib3JkZXIoKSk7Ci0gICAgY2FzZSBUYWJsZUNlbGxQYWRkaW5n
OiAgICAgcmV0dXJuIFN0cmluZyh0YWJsZS5jZWxsUGFkZGluZygpKTsKLSAgICBjYXNlIFRhYmxl
Q2VsbFNwYWNpbmc6ICAgICByZXR1cm4gU3RyaW5nKHRhYmxlLmNlbGxTcGFjaW5nKCkpOwotICAg
IGNhc2UgVGFibGVGcmFtZTogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGUuZnJhbWUoKSk7
Ci0gICAgY2FzZSBUYWJsZVJ1bGVzOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZS5ydWxl
cygpKTsKLSAgICBjYXNlIFRhYmxlU3VtbWFyeTogICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxl
LnN1bW1hcnkoKSk7Ci0gICAgY2FzZSBUYWJsZVdpZHRoOiAgICAgICAgICAgcmV0dXJuIFN0cmlu
Zyh0YWJsZS53aWR0aCgpKTsKLSAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfQ0FQVElP
TjogewotICAgIEhUTUxUYWJsZUNhcHRpb25FbGVtZW50SW1wbCAmdGFibGVDYXB0aW9uID0gc3Rh
dGljX2Nhc3Q8SFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgIHJl
dHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OnVMaXN0R2V0dGVyKEV4
ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxVTGlzdEVsZW1lbnRJ
bXBsJiB1TGlzdCA9ICpzdGF0aWNfY2FzdDxIVE1MVUxpc3RFbGVtZW50SW1wbCo+KGltcGwoKSk7
CiAgICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgVGFibGVDYXB0aW9uQWxpZ246ICAgICAg
IHJldHVybiBTdHJpbmcodGFibGVDYXB0aW9uLmFsaWduKCkpOwotICAgIH0KLSAgfQotICBicmVh
azsKLSAgY2FzZSBJRF9DT0w6IHsKLSAgICBIVE1MVGFibGVDb2xFbGVtZW50SW1wbCAmdGFibGVD
b2wgPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVDb2xFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAg
ICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBUYWJsZUNvbEFsaWduOiAgICAgICAgICAgcmV0
dXJuIFN0cmluZyh0YWJsZUNvbC5hbGlnbigpKTsKLSAgICBjYXNlIFRhYmxlQ29sQ2g6ICAgICAg
ICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ29sLmNoKCkpOwotICAgIGNhc2UgVGFibGVDb2xD
aE9mZjogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVDb2wuY2hPZmYoKSk7Ci0gICAgY2Fz
ZSBUYWJsZUNvbFNwYW46ICAgICAgICAgICAgcmV0dXJuIE51bWJlcih0YWJsZUNvbC5zcGFuKCkp
OwotICAgIGNhc2UgVGFibGVDb2xWQWxpZ246ICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVD
b2wudkFsaWduKCkpOwotICAgIGNhc2UgVGFibGVDb2xXaWR0aDogICAgICAgICAgIHJldHVybiBT
dHJpbmcodGFibGVDb2wud2lkdGgoKSk7Ci0gICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElE
X1RIRUFEOgotICBjYXNlIElEX1RCT0RZOgotICBjYXNlIElEX1RGT09UOiB7Ci0gICAgSFRNTFRh
YmxlU2VjdGlvbkVsZW1lbnRJbXBsICZ0YWJsZVNlY3Rpb24gPSBzdGF0aWNfY2FzdDxIVE1MVGFi
bGVTZWN0aW9uRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewot
ICAgIGNhc2UgVGFibGVTZWN0aW9uQWxpZ246ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxl
U2VjdGlvbi5hbGlnbigpKTsKLSAgICBjYXNlIFRhYmxlU2VjdGlvbkNoOiAgICAgICAgICAgICAg
cmV0dXJuIFN0cmluZyh0YWJsZVNlY3Rpb24uY2goKSk7Ci0gICAgY2FzZSBUYWJsZVNlY3Rpb25D
aE9mZjogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVTZWN0aW9uLmNoT2ZmKCkpOwotICAg
IGNhc2UgVGFibGVTZWN0aW9uVkFsaWduOiAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlU2Vj
dGlvbi52QWxpZ24oKSk7Ci0gICAgY2FzZSBUYWJsZVNlY3Rpb25Sb3dzOiAgICAgICAgICAgIHJl
dHVybiBnZXRIVE1MQ29sbGVjdGlvbihleGVjLCB0YWJsZVNlY3Rpb24ucm93cygpLmdldCgpKTsg
Ly8gdHlwZSBIVE1MQ29sbGVjdGlvbgotICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9U
UjogewotICAgSFRNTFRhYmxlUm93RWxlbWVudEltcGwgJnRhYmxlUm93ID0gc3RhdGljX2Nhc3Q8
SFRNTFRhYmxlUm93RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICBzd2l0Y2ggKHRva2VuKSB7
Ci0gICBjYXNlIFRhYmxlUm93Um93SW5kZXg6ICAgICAgICByZXR1cm4gTnVtYmVyKHRhYmxlUm93
LnJvd0luZGV4KCkpOwotICAgY2FzZSBUYWJsZVJvd1NlY3Rpb25Sb3dJbmRleDogcmV0dXJuIE51
bWJlcih0YWJsZVJvdy5zZWN0aW9uUm93SW5kZXgoKSk7Ci0gICBjYXNlIFRhYmxlUm93Q2VsbHM6
ICAgICAgICAgICByZXR1cm4gZ2V0SFRNTENvbGxlY3Rpb24oZXhlYywgdGFibGVSb3cuY2VsbHMo
KS5nZXQoKSk7IC8vIHR5cGUgSFRNTENvbGxlY3Rpb24KLSAgIGNhc2UgVGFibGVSb3dBbGlnbjog
ICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVSb3cuYWxpZ24oKSk7Ci0gICBjYXNlIFRhYmxl
Um93QmdDb2xvcjogICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlUm93LmJnQ29sb3IoKSk7Ci0g
ICBjYXNlIFRhYmxlUm93Q2g6ICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlUm93LmNo
KCkpOwotICAgY2FzZSBUYWJsZVJvd0NoT2ZmOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJs
ZVJvdy5jaE9mZigpKTsKLSAgIGNhc2UgVGFibGVSb3dWQWxpZ246ICAgICAgICAgIHJldHVybiBT
dHJpbmcodGFibGVSb3cudkFsaWduKCkpOwotICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElE
X1RIOgotICBjYXNlIElEX1REOiB7Ci0gICAgSFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsICZ0YWJs
ZUNlbGwgPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVDZWxsRWxlbWVudEltcGwgJj4oZWxlbWVudCk7
Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgVGFibGVDZWxsQ2VsbEluZGV4OiAgICAg
ICByZXR1cm4gTnVtYmVyKHRhYmxlQ2VsbC5jZWxsSW5kZXgoKSk7Ci0gICAgY2FzZSBUYWJsZUNl
bGxBYmJyOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVDZWxsLmFiYnIoKSk7Ci0gICAg
Y2FzZSBUYWJsZUNlbGxBbGlnbjogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVDZWxsLmFs
aWduKCkpOwotICAgIGNhc2UgVGFibGVDZWxsQXhpczogICAgICAgICAgICByZXR1cm4gU3RyaW5n
KHRhYmxlQ2VsbC5heGlzKCkpOwotICAgIGNhc2UgVGFibGVDZWxsQmdDb2xvcjogICAgICAgICBy
ZXR1cm4gU3RyaW5nKHRhYmxlQ2VsbC5iZ0NvbG9yKCkpOwotICAgIGNhc2UgVGFibGVDZWxsQ2g6
ICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ2VsbC5jaCgpKTsKLSAgICBjYXNlIFRh
YmxlQ2VsbENoT2ZmOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNlbGwuY2hPZmYoKSk7
Ci0gICAgY2FzZSBUYWJsZUNlbGxDb2xTcGFuOiAgICAgICAgIHJldHVybiBOdW1iZXIodGFibGVD
ZWxsLmNvbFNwYW4oKSk7Ci0gICAgY2FzZSBUYWJsZUNlbGxIZWFkZXJzOiAgICAgICAgIHJldHVy
biBTdHJpbmcodGFibGVDZWxsLmhlYWRlcnMoKSk7Ci0gICAgY2FzZSBUYWJsZUNlbGxIZWlnaHQ6
ICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVDZWxsLmhlaWdodCgpKTsKLSAgICBjYXNlIFRh
YmxlQ2VsbE5vV3JhcDogICAgICAgICAgcmV0dXJuIEJvb2xlYW4odGFibGVDZWxsLm5vV3JhcCgp
KTsKLSAgICBjYXNlIFRhYmxlQ2VsbFJvd1NwYW46ICAgICAgICAgcmV0dXJuIE51bWJlcih0YWJs
ZUNlbGwucm93U3BhbigpKTsKLSAgICBjYXNlIFRhYmxlQ2VsbFNjb3BlOiAgICAgICAgICAgcmV0
dXJuIFN0cmluZyh0YWJsZUNlbGwuc2NvcGUoKSk7Ci0gICAgY2FzZSBUYWJsZUNlbGxWQWxpZ246
ICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVDZWxsLnZBbGlnbigpKTsKLSAgICBjYXNlIFRh
YmxlQ2VsbFdpZHRoOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNlbGwud2lkdGgoKSk7
CisgICAgICAgIGNhc2UgVUxpc3RDb21wYWN0OiAgICAgICAgIHJldHVybiBCb29sZWFuKHVMaXN0
LmNvbXBhY3QoKSk7CisgICAgICAgIGNhc2UgVUxpc3RUeXBlOiAgICAgICAgICAgIHJldHVybiBT
dHJpbmcodUxpc3QudHlwZSgpKTsKICAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfRlJB
TUVTRVQ6IHsKLSAgICBIVE1MRnJhbWVTZXRFbGVtZW50SW1wbCAmZnJhbWVTZXQgPSBzdGF0aWNf
Y2FzdDxIVE1MRnJhbWVTZXRFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICByZXR1cm4gVW5k
ZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50OjpvTGlzdEdldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MT0xpc3RFbGVtZW50SW1wbCYgb0xp
c3QgPSAqc3RhdGljX2Nhc3Q8SFRNTE9MaXN0RWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIHN3
aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIEZyYW1lU2V0Q29sczogICAgICAgICAgICByZXR1cm4g
U3RyaW5nKGZyYW1lU2V0LmNvbHMoKSk7Ci0gICAgY2FzZSBGcmFtZVNldFJvd3M6ICAgICAgICAg
ICAgcmV0dXJuIFN0cmluZyhmcmFtZVNldC5yb3dzKCkpOwotICAgIH0KLSAgfQotICBicmVhazsK
LSAgY2FzZSBJRF9GUkFNRTogewotICAgIEhUTUxGcmFtZUVsZW1lbnRJbXBsICZmcmFtZUVsZW1l
bnQgPSBzdGF0aWNfY2FzdDxIVE1MRnJhbWVFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICBz
d2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBGcmFtZUNvbnRlbnREb2N1bWVudDogcmV0dXJuIGNo
ZWNrTm9kZVNlY3VyaXR5KGV4ZWMsZnJhbWVFbGVtZW50LmNvbnRlbnREb2N1bWVudCgpKSA/IAot
CQkJCSAgICAgIGdldERPTU5vZGUoZXhlYywgZnJhbWVFbGVtZW50LmNvbnRlbnREb2N1bWVudCgp
KSA6IFVuZGVmaW5lZCgpOwotICAgIGNhc2UgRnJhbWVDb250ZW50V2luZG93OiAgIHJldHVybiBj
aGVja05vZGVTZWN1cml0eShleGVjLGZyYW1lRWxlbWVudC5jb250ZW50RG9jdW1lbnQoKSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gV2luZG93OjpyZXRyaWV2ZShmcmFt
ZUVsZW1lbnQuY29udGVudFBhcnQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDogVW5kZWZpbmVkKCk7Ci0gICAgY2FzZSBGcmFtZUZyYW1lQm9yZGVyOiAgICAgcmV0dXJu
IFN0cmluZyhmcmFtZUVsZW1lbnQuZnJhbWVCb3JkZXIoKSk7Ci0gICAgY2FzZSBGcmFtZUxvbmdE
ZXNjOiAgICAgICAgcmV0dXJuIFN0cmluZyhmcmFtZUVsZW1lbnQubG9uZ0Rlc2MoKSk7Ci0gICAg
Y2FzZSBGcmFtZU1hcmdpbkhlaWdodDogICAgcmV0dXJuIFN0cmluZyhmcmFtZUVsZW1lbnQubWFy
Z2luSGVpZ2h0KCkpOwotICAgIGNhc2UgRnJhbWVNYXJnaW5XaWR0aDogICAgIHJldHVybiBTdHJp
bmcoZnJhbWVFbGVtZW50Lm1hcmdpbldpZHRoKCkpOwotICAgIGNhc2UgRnJhbWVOYW1lOiAgICAg
ICAgICAgIHJldHVybiBTdHJpbmcoZnJhbWVFbGVtZW50Lm5hbWUoKSk7Ci0gICAgY2FzZSBGcmFt
ZU5vUmVzaXplOiAgICAgICAgcmV0dXJuIEJvb2xlYW4oZnJhbWVFbGVtZW50Lm5vUmVzaXplKCkp
OwotICAgIGNhc2UgRnJhbWVTY3JvbGxpbmc6ICAgICAgIHJldHVybiBTdHJpbmcoZnJhbWVFbGVt
ZW50LnNjcm9sbGluZygpKTsKLSAgICBjYXNlIEZyYW1lU3JjOgotICAgIGNhc2UgRnJhbWVMb2Nh
dGlvbjogICAgICAgIHJldHVybiBTdHJpbmcoZnJhbWVFbGVtZW50LnNyYygpKTsKKyAgICAgICAg
Y2FzZSBPTGlzdENvbXBhY3Q6ICAgICAgICAgcmV0dXJuIEJvb2xlYW4ob0xpc3QuY29tcGFjdCgp
KTsKKyAgICAgICAgY2FzZSBPTGlzdFN0YXJ0OiAgICAgICAgICAgcmV0dXJuIE51bWJlcihvTGlz
dC5zdGFydCgpKTsKKyAgICAgICAgY2FzZSBPTGlzdFR5cGU6ICAgICAgICAgICAgcmV0dXJuIFN0
cmluZyhvTGlzdC50eXBlKCkpOwogICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9JRlJB
TUU6IHsKLSAgICBIVE1MSUZyYW1lRWxlbWVudEltcGwgJmlGcmFtZSA9IHN0YXRpY19jYXN0PEhU
TUxJRnJhbWVFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0g
ICAgY2FzZSBJRnJhbWVBbGlnbjogICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpRnJhbWUu
YWxpZ24oKSk7Ci0gICAgICAvLyAjIyMgc2VjdXJpdHkgY2hlY2sgPwotICAgIGNhc2UgSUZyYW1l
RG9jdW1lbnQ6IC8vIG5vbi1zdGFuZGFyZCwgbWFwcGVkIHRvIGNvbnRlbnREb2N1bWVudAotICAg
IGNhc2UgSUZyYW1lQ29udGVudERvY3VtZW50OiByZXR1cm4gY2hlY2tOb2RlU2VjdXJpdHkoZXhl
YyxpRnJhbWUuY29udGVudERvY3VtZW50KCkpID8gCi0JCQkJICBnZXRET01Ob2RlKGV4ZWMsIGlG
cmFtZS5jb250ZW50RG9jdW1lbnQoKSkgOiBVbmRlZmluZWQoKTsKLSAgICBjYXNlIElGcmFtZUNv
bnRlbnRXaW5kb3c6CXJldHVybiBjaGVja05vZGVTZWN1cml0eShleGVjLGlGcmFtZS5jb250ZW50
RG9jdW1lbnQoKSkgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFdpbmRv
dzo6cmV0cmlldmUoaUZyYW1lLmNvbnRlbnRQYXJ0KCkpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA6IFVuZGVmaW5lZCgpOwotICAgIGNhc2UgSUZyYW1lRnJhbWVCb3JkZXI6
ICAgICByZXR1cm4gU3RyaW5nKGlGcmFtZS5mcmFtZUJvcmRlcigpKTsKLSAgICBjYXNlIElGcmFt
ZUhlaWdodDogICAgICAgICAgcmV0dXJuIFN0cmluZyhpRnJhbWUuaGVpZ2h0KCkpOwotICAgIGNh
c2UgSUZyYW1lTG9uZ0Rlc2M6ICAgICAgICByZXR1cm4gU3RyaW5nKGlGcmFtZS5sb25nRGVzYygp
KTsKLSAgICBjYXNlIElGcmFtZU1hcmdpbkhlaWdodDogICAgcmV0dXJuIFN0cmluZyhpRnJhbWUu
bWFyZ2luSGVpZ2h0KCkpOwotICAgIGNhc2UgSUZyYW1lTWFyZ2luV2lkdGg6ICAgICByZXR1cm4g
U3RyaW5nKGlGcmFtZS5tYXJnaW5XaWR0aCgpKTsKLSAgICBjYXNlIElGcmFtZU5hbWU6ICAgICAg
ICAgICAgcmV0dXJuIFN0cmluZyhpRnJhbWUubmFtZSgpKTsKLSAgICBjYXNlIElGcmFtZVNjcm9s
bGluZzogICAgICAgcmV0dXJuIFN0cmluZyhpRnJhbWUuc2Nyb2xsaW5nKCkpOwotICAgIGNhc2Ug
SUZyYW1lU3JjOiAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGlGcmFtZS5zcmMoKSk7Ci0gICAg
Y2FzZSBJRnJhbWVXaWR0aDogICAgICAgICAgIHJldHVybiBTdHJpbmcoaUZyYW1lLndpZHRoKCkp
OwotICAgIH0KLSAgICBicmVhazsKLSAgfQotICB9IC8vIHhlbWFjcyAob3IgYXJudCkgY291bGQg
YmUgYSBiaXQgc21hcnRlciB3aGVuIGl0IGNvbWVzIHRvIGluZGVudGluZyBzd2l0Y2goKWVzIDsp
Ci0gIC8vIGl0cyBub3QgYXJudCB0byBibGFtZSAtIGl0cyB0aGUgb3JpZ2luYWwgU3Ryb3VzdHJ1
cCBzdHlsZSB3ZSBsaWtlIDopIChEaXJrKQorICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KIAot
ICAvLyBnZW5lcmljIHByb3BlcnRpZXMKLSAgc3dpdGNoICh0b2tlbikgewotICBjYXNlIEVsZW1l
bnRJZDoKLSAgICAgIC8vIGlodC5jb20gcmVsaWVzIG9uIHRoaXMgdmFsdWUgYmVpbmcgIiIgd2hl
biBubyBpZCBpcyBwcmVzZW50LiAgT3RoZXIgYnJvd3NlcnMgZG8gdGhpcyBhcyB3ZWxsLgotICAg
ICAgLy8gU28gd2UgdXNlIFN0cmluZygpIGluc3RlYWQgb2YgU3RyaW5nKCkgaGVyZS4KLSAgICBy
ZXR1cm4gU3RyaW5nKGVsZW1lbnQuaWRET00oKSk7Ci0gIGNhc2UgRWxlbWVudFRpdGxlOgotICAg
IHJldHVybiBTdHJpbmcoZWxlbWVudC50aXRsZSgpKTsKLSAgY2FzZSBFbGVtZW50TGFuZzoKLSAg
ICByZXR1cm4gU3RyaW5nKGVsZW1lbnQubGFuZygpKTsKLSAgY2FzZSBFbGVtZW50RGlyOgotICAg
IHJldHVybiBTdHJpbmcoZWxlbWVudC5kaXIoKSk7Ci0gIGNhc2UgRWxlbWVudENsYXNzTmFtZToK
LSAgICByZXR1cm4gU3RyaW5nKGVsZW1lbnQuY2xhc3NOYW1lKCkpOwotICBjYXNlIEVsZW1lbnRJ
bm5lckhUTUw6Ci0gICAgcmV0dXJuIFN0cmluZyhlbGVtZW50LmlubmVySFRNTCgpKTsKLSAgY2Fz
ZSBFbGVtZW50SW5uZXJUZXh0OgotICAgIGlmIChEb2N1bWVudEltcGwqIGRvYyA9IGltcGwoKS0+
Z2V0RG9jdW1lbnQoKSkKLSAgICAgIGRvYy0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxl
c2hlZXRzKCk7Ci0gICAgcmV0dXJuIFN0cmluZyhlbGVtZW50LmlubmVyVGV4dCgpKTsKLSAgY2Fz
ZSBFbGVtZW50T3V0ZXJIVE1MOgotICAgIHJldHVybiBTdHJpbmcoZWxlbWVudC5vdXRlckhUTUwo
KSk7Ci0gIGNhc2UgRWxlbWVudE91dGVyVGV4dDoKLSAgICByZXR1cm4gU3RyaW5nKGVsZW1lbnQu
b3V0ZXJUZXh0KCkpOwotICBjYXNlIEVsZW1lbnREb2N1bWVudDoKLSAgICByZXR1cm4gZ2V0RE9N
Tm9kZShleGVjLGVsZW1lbnQub3duZXJEb2N1bWVudCgpKTsKLSAgY2FzZSBFbGVtZW50Q2hpbGRy
ZW46Ci0gICAgcmV0dXJuIGdldEhUTUxDb2xsZWN0aW9uKGV4ZWMsIGVsZW1lbnQuY2hpbGRyZW4o
KS5nZXQoKSk7Ci0gIGNhc2UgRWxlbWVudENvbnRlbnRFZGl0YWJsZToKLSAgICByZXR1cm4gU3Ry
aW5nKGVsZW1lbnQuY29udGVudEVkaXRhYmxlKCkpOwotICBjYXNlIEVsZW1lbnRJc0NvbnRlbnRF
ZGl0YWJsZToKLSAgICByZXR1cm4gQm9vbGVhbihlbGVtZW50LmlzQ29udGVudEVkaXRhYmxlKCkp
OwotICAvLyAjIyMgd2hhdCBhYm91dCBzdHlsZT8gb3IgaXMgdGhpcyB1c2VkIGluc3RlYWQgZm9y
IERPTTIgc3R5bGVzaGVldHM/Ci0gIH0KLSAga2RXYXJuaW5nKCkgPDwgIkhUTUxFbGVtZW50Ojpn
ZXRWYWx1ZVByb3BlcnR5IHVuaGFuZGxlZCB0b2tlbiAiIDw8IHRva2VuIDw8IGVuZGw7Ci0gIHJl
dHVybiBVbmRlZmluZWQoKTsKK1ZhbHVlIEhUTUxFbGVtZW50OjpkTGlzdEdldHRlcihFeGVjU3Rh
dGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MRExpc3RFbGVtZW50SW1wbCYg
ZExpc3QgPSAqc3RhdGljX2Nhc3Q8SFRNTERMaXN0RWxlbWVudEltcGwqPihpbXBsKCkpOworICAg
IGlmICh0b2tlbiA9PSBETGlzdENvbXBhY3QpCisgICAgICAgIHJldHVybiBCb29sZWFuKGRMaXN0
LmNvbXBhY3QoKSk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1ib29sIEtKUzo6SFRN
TEVsZW1lbnQ6Omhhc1Byb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAm
cHJvcGVydHlOYW1lKSBjb25zdAorVmFsdWUgSFRNTEVsZW1lbnQ6OmRpckdldHRlcihFeGVjU3Rh
dGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKLSNpZmRlZiBLSlNfVkVSQk9TRQotICAvL2tk
RGVidWcoNjA3MCkgPDwgIkhUTUxFbGVtZW50OjpoYXNQcm9wZXJ0eSAiIDw8IHByb3BlcnR5TmFt
ZS5xc3RyaW5nKCkgPDwgZW5kbDsKLSNlbmRpZgotICBIVE1MRWxlbWVudEltcGwgJmVsZW1lbnQg
PSAqc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KGltcGwoKSk7Ci0gIC8vIEZpcnN0IGxv
b2sgYXQgZHluYW1pYyBwcm9wZXJ0aWVzIC0ga2VlcCB0aGlzIGluIHN5bmMgd2l0aCB0cnlHZXQK
LSAgc3dpdGNoIChlbGVtZW50LmlkKCkpIHsKLSAgICBjYXNlIElEX0ZPUk06IHsKLSAgICAgIEhU
TUxGb3JtRWxlbWVudEltcGwgJmZvcm0gPSBzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnRJbXBs
ICY+KGVsZW1lbnQpOwotICAgICAgLy8gQ2hlY2sgaWYgd2UncmUgcmV0cmlldmluZyBhbiBlbGVt
ZW50IChieSBpbmRleCBvciBieSBuYW1lKQotICAgICAgYm9vbCBvazsKLSAgICAgIHVpbnQgdSA9
IHByb3BlcnR5TmFtZS50b1VMb25nKCZvayk7Ci0gICAgICBpZiAob2sgJiYgZm9ybS5lbGVtZW50
cygpLT5pdGVtKHUpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIGlmIChmb3JtLmVsZW1l
bnRzKCktPm5hbWVkSXRlbShwcm9wZXJ0eU5hbWUuc3RyaW5nKCkpKQotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIElEX1NFTEVDVDogewotICAgICAg
SFRNTFNlbGVjdEVsZW1lbnRJbXBsICZzZWxlY3QgPSBzdGF0aWNfY2FzdDxIVE1MU2VsZWN0RWxl
bWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBib29sIG9rOwotICAgICAgdWludCB1ID0gcHJv
cGVydHlOYW1lLnRvVUxvbmcoJm9rKTsKLSAgICAgIGlmIChvayAmJiBzZWxlY3Qub3B0aW9uc0hU
TUxDb2xsZWN0aW9uKCktPml0ZW0odSkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgYnJl
YWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQorICAgIEhUTUxEaXJl
Y3RvcnlFbGVtZW50SW1wbCYgZGlyID0gKnN0YXRpY19jYXN0PEhUTUxEaXJlY3RvcnlFbGVtZW50
SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IERpcmVjdG9yeUNvbXBhY3QpCisgICAg
ICAgIHJldHVybiBCb29sZWFuKGRpci5jb21wYWN0KCkpOworICAgIHJldHVybiBVbmRlZmluZWQo
KTsKK30KIAotICByZXR1cm4gRE9NRWxlbWVudDo6aGFzUHJvcGVydHkoZXhlYywgcHJvcGVydHlO
YW1lKTsKK1ZhbHVlIEhUTUxFbGVtZW50OjptZW51R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50
IHRva2VuKSBjb25zdAoreworICAgIEhUTUxNZW51RWxlbWVudEltcGwmIG1lbnUgPSAqc3RhdGlj
X2Nhc3Q8SFRNTE1lbnVFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IE1l
bnVDb21wYWN0KQorICAgICAgICByZXR1cm4gQm9vbGVhbihtZW51LmNvbXBhY3QoKSk7CisgICAg
cmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1VU3RyaW5nIEtKUzo6SFRNTEVsZW1lbnQ6OnRvU3Ry
aW5nKEV4ZWNTdGF0ZSAqZXhlYykgY29uc3QKK1ZhbHVlIEhUTUxFbGVtZW50OjpsaUdldHRlcihF
eGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKLSAgaWYgKGltcGwoKS0+aWQoKSA9
PSBJRF9BKQotICAgIHJldHVybiBVU3RyaW5nKHN0YXRpY19jYXN0PGNvbnN0IEhUTUxBbmNob3JF
bGVtZW50SW1wbCAqPihpbXBsKCkpLT5ocmVmKCkpOwotICBlbHNlCi0gICAgcmV0dXJuIERPTUVs
ZW1lbnQ6OnRvU3RyaW5nKGV4ZWMpOworICAgIEhUTUxMSUVsZW1lbnRJbXBsJiBsaSA9ICpzdGF0
aWNfY2FzdDxIVE1MTElFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikg
eworICAgICAgICBjYXNlIExJVHlwZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGxpLnR5cGUo
KSk7CisgICAgICAgIGNhc2UgTElWYWx1ZTogICAgICAgICAgIHJldHVybiBOdW1iZXIobGkudmFs
dWUoKSk7CisgICAgfQorICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIEhUTUxG
b3JtRWxlbWVudEltcGwgKmdldEZvcm0oSFRNTEVsZW1lbnRJbXBsICplbGVtZW50KQorVmFsdWUg
SFRNTEVsZW1lbnQ6OmRpdkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QK
IHsKLSAgaWYgKGVsZW1lbnQtPmlzR2VuZXJpY0Zvcm1FbGVtZW50KCkpCi0gICAgcmV0dXJuIHN0
YXRpY19jYXN0PEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsICo+KGVsZW1lbnQpLT5mb3JtKCk7
CisgICAgSFRNTERpdkVsZW1lbnRJbXBsJiBkaXYgPSAqc3RhdGljX2Nhc3Q8SFRNTERpdkVsZW1l
bnRJbXBsKj4oaW1wbCgpKTsKKyAgICBpZiAodG9rZW4gPT0gRGl2QWxpZ24pCisgICAgICAgIHJl
dHVybiBTdHJpbmcoZGl2LmFsaWduKCkpOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KIAot
ICBzd2l0Y2ggKGVsZW1lbnQtPmlkKCkpIHsKLSAgICBjYXNlIElEX0xBQkVMOgotICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PEhUTUxMYWJlbEVsZW1lbnRJbXBsICo+KGVsZW1lbnQpLT5mb3JtKCk7
Ci0gICAgY2FzZSBJRF9PQkpFQ1Q6Ci0gICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTE9iamVj
dEVsZW1lbnRJbXBsICo+KGVsZW1lbnQpLT5mb3JtKCk7Ci0gIH0KK1ZhbHVlIEhUTUxFbGVtZW50
OjpwYXJhZ3JhcGhHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7Cisg
ICAgSFRNTFBhcmFncmFwaEVsZW1lbnRJbXBsJiBwID0gKnN0YXRpY19jYXN0PEhUTUxQYXJhZ3Jh
cGhFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IFBhcmFncmFwaEFsaWdu
KQorICAgICAgICByZXR1cm4gU3RyaW5nKHAuYWxpZ24oKSk7CisgICAgcmV0dXJuIFVuZGVmaW5l
ZCgpOworfQogCi0gIHJldHVybiAwOworVmFsdWUgSFRNTEVsZW1lbnQ6OmhlYWRpbmdHZXR0ZXIo
RXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTEhlYWRpbmdFbGVt
ZW50SW1wbCYgaCA9ICpzdGF0aWNfY2FzdDxIVE1MSGVhZGluZ0VsZW1lbnRJbXBsKj4oaW1wbCgp
KTsKKyAgICBpZiAodG9rZW4gPT0gSGVhZGluZ0FsaWduKQorICAgICAgICByZXR1cm4gU3RyaW5n
KGguYWxpZ24oKSk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi12b2lkIEtKUzo6SFRN
TEVsZW1lbnQ6OnB1c2hFdmVudEhhbmRsZXJTY29wZShFeGVjU3RhdGUgKmV4ZWMsIFNjb3BlQ2hh
aW4gJnNjb3BlKSBjb25zdAorVmFsdWUgSFRNTEVsZW1lbnQ6OmJsb2NrUXVvdGVHZXR0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTEJsb2NrcXVvdGVFbGVt
ZW50SW1wbCYgYmxvY2tRdW90ZSA9ICpzdGF0aWNfY2FzdDxIVE1MQmxvY2txdW90ZUVsZW1lbnRJ
bXBsKj4oaW1wbCgpKTsKKyAgICBpZiAodG9rZW4gPT0gQmxvY2tRdW90ZUNpdGUpCisgICAgICAg
IHJldHVybiBTdHJpbmcoYmxvY2tRdW90ZS5jaXRlKCkpOworICAgIHJldHVybiBVbmRlZmluZWQo
KTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OnF1b3RlR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywg
aW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxRdW90ZUVsZW1lbnRJbXBsJiBxdW90ZSA9ICpz
dGF0aWNfY2FzdDxIVE1MUXVvdGVFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2Vu
ID09IFF1b3RlQ2l0ZSkKKyAgICAgICAgcmV0dXJuIFN0cmluZyhxdW90ZS5jaXRlKCkpOworICAg
IHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OnByZUdldHRlcihF
eGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogQWRkIHN1
cHBvcnQgZm9yICd3cmFwJyB3aGVuIHdoaXRlLXNwYWNlOiBwcmUtd3JhcCBpcyBpbXBsZW1lbnRl
ZC4KKyAgICBIVE1MUHJlRWxlbWVudEltcGwmIHByZSA9ICpzdGF0aWNfY2FzdDxIVE1MUHJlRWxl
bWVudEltcGwqPihpbXBsKCkpOworICAgIGlmICh0b2tlbiA9PSBQcmVXaWR0aCkKKyAgICAgICAg
cmV0dXJuIE51bWJlcihwcmUud2lkdGgoKSk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQor
CitWYWx1ZSBIVE1MRWxlbWVudDo6YnJHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4p
IGNvbnN0Cit7CisgICAgSFRNTEJSRWxlbWVudEltcGwmIGJyID0gKnN0YXRpY19jYXN0PEhUTUxC
UkVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBpZiAodG9rZW4gPT0gQlJDbGVhcikKKyAgICAg
ICAgcmV0dXJuIFN0cmluZyhici5jbGVhcigpKTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9
CisKK1ZhbHVlIEhUTUxFbGVtZW50OjpiYXNlRm9udEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGlu
dCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MQmFzZUZvbnRFbGVtZW50SW1wbCYgYmFzZUZvbnQg
PSAqc3RhdGljX2Nhc3Q8SFRNTEJhc2VGb250RWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3
aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBCYXNlRm9udENvbG9yOiAgICAgICAgICAgcmV0
dXJuIFN0cmluZyhiYXNlRm9udC5jb2xvcigpKTsKKyAgICAgICAgY2FzZSBCYXNlRm9udEZhY2U6
ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhiYXNlRm9udC5mYWNlKCkpOworICAgICAgICBjYXNl
IEJhc2VGb250U2l6ZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGJhc2VGb250LnNpemUoKSk7
CisgICAgfQorICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6
OmZvbnRHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRN
TEZvbnRFbGVtZW50SW1wbCYgZm9udCA9ICpzdGF0aWNfY2FzdDxIVE1MRm9udEVsZW1lbnRJbXBs
Kj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgRm9udENvbG9y
OiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhmb250LmNvbG9yKCkpOworICAgICAgICBjYXNlIEZv
bnRGYWNlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoZm9udC5mYWNlKCkpOworICAgICAgICBj
YXNlIEZvbnRTaXplOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoZm9udC5zaXplKCkpOworICAg
IH0KKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50Ojpockdl
dHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MSFJFbGVt
ZW50SW1wbCYgaHIgPSAqc3RhdGljX2Nhc3Q8SFRNTEhSRWxlbWVudEltcGwqPihpbXBsKCkpOwor
ICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBIUkFsaWduOiAgICAgICAgICAgcmV0
dXJuIFN0cmluZyhoci5hbGlnbigpKTsKKyAgICAgICAgY2FzZSBIUk5vU2hhZGU6ICAgICAgICAg
cmV0dXJuIEJvb2xlYW4oaHIubm9TaGFkZSgpKTsKKyAgICAgICAgY2FzZSBIUlNpemU6ICAgICAg
ICAgICAgcmV0dXJuIFN0cmluZyhoci5zaXplKCkpOworICAgICAgICBjYXNlIEhSV2lkdGg6ICAg
ICAgICAgICByZXR1cm4gU3RyaW5nKGhyLndpZHRoKCkpOworICAgIH0KKyAgICByZXR1cm4gVW5k
ZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50Ojptb2RHZXR0ZXIoRXhlY1N0YXRlKiBl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTE1vZEVsZW1lbnRJbXBsJiBtb2QgPSAq
c3RhdGljX2Nhc3Q8SFRNTE1vZEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRv
a2VuKSB7CisgICAgICAgIGNhc2UgTW9kQ2l0ZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKG1v
ZC5jaXRlKCkpOworICAgICAgICBjYXNlIE1vZERhdGVUaW1lOiAgICAgICAgcmV0dXJuIFN0cmlu
Zyhtb2QuZGF0ZVRpbWUoKSk7CisgICAgfQorICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKwor
VmFsdWUgSFRNTEVsZW1lbnQ6OmFuY2hvckdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tl
bikgY29uc3QKK3sKKyAgICBIVE1MQW5jaG9yRWxlbWVudEltcGwmIGFuY2hvciA9ICpzdGF0aWNf
Y2FzdDxIVE1MQW5jaG9yRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4p
IHsKKyAgICAgICAgY2FzZSBBbmNob3JBY2Nlc3NLZXk6ICAgICAgIHJldHVybiBTdHJpbmcoYW5j
aG9yLmFjY2Vzc0tleSgpKTsKKyAgICAgICAgY2FzZSBBbmNob3JDaGFyc2V0OiAgICAgICAgIHJl
dHVybiBTdHJpbmcoYW5jaG9yLmNoYXJzZXQoKSk7CisgICAgICAgIGNhc2UgQW5jaG9yQ29vcmRz
OiAgICAgICAgICByZXR1cm4gU3RyaW5nKGFuY2hvci5jb29yZHMoKSk7CisgICAgICAgIGNhc2Ug
QW5jaG9ySHJlZjogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGFuY2hvci5ocmVmKCkpOworICAg
ICAgICBjYXNlIEFuY2hvckhyZWZMYW5nOiAgICAgICAgcmV0dXJuIFN0cmluZyhhbmNob3IuaHJl
ZmxhbmcoKSk7CisgICAgICAgIGNhc2UgQW5jaG9ySGFzaDogICAgICAgICAgICByZXR1cm4gU3Ry
aW5nKCcjJytLVVJMKGFuY2hvci5ocmVmKCkuc3RyaW5nKCkpLnJlZigpKTsKKyAgICAgICAgY2Fz
ZSBBbmNob3JIb3N0OiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoS1VSTChhbmNob3IuaHJlZigp
LnN0cmluZygpKS5ob3N0KCkpOworICAgICAgICBjYXNlIEFuY2hvckhvc3RuYW1lOiB7CisgICAg
ICAgICAgICBLVVJMIHVybChhbmNob3IuaHJlZigpLnN0cmluZygpKTsKKyAgICAgICAgICAgIGtk
RGVidWcoNjA3MCkgPDwgImFuY2hvcjo6aG9zdG5hbWUgdXNlczoiIDw8dXJsLnVybCgpPDxlbmRs
OworICAgICAgICAgICAgaWYgKHVybC5wb3J0KCk9PTApCisgICAgICAgICAgICAgICAgcmV0dXJu
IFN0cmluZyh1cmwuaG9zdCgpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKHVybC5ob3N0KCkgKyAiOiIgKyBRU3RyaW5nOjpudW1iZXIodXJsLnBvcnQo
KSkpOworICAgICAgICB9CisgICAgICAgIGNhc2UgQW5jaG9yUGF0aE5hbWU6ICAgICAgICByZXR1
cm4gU3RyaW5nKEtVUkwoYW5jaG9yLmhyZWYoKS5zdHJpbmcoKSkucGF0aCgpKTsKKyAgICAgICAg
Y2FzZSBBbmNob3JQb3J0OiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoUVN0cmluZzo6bnVtYmVy
KEtVUkwoYW5jaG9yLmhyZWYoKS5zdHJpbmcoKSkucG9ydCgpKSk7CisgICAgICAgIGNhc2UgQW5j
aG9yUHJvdG9jb2w6ICAgICAgICByZXR1cm4gU3RyaW5nKEtVUkwoYW5jaG9yLmhyZWYoKS5zdHJp
bmcoKSkucHJvdG9jb2woKSsiOiIpOworICAgICAgICBjYXNlIEFuY2hvclNlYXJjaDogICAgICAg
ICAgcmV0dXJuIFN0cmluZyhLVVJMKGFuY2hvci5ocmVmKCkuc3RyaW5nKCkpLnF1ZXJ5KCkpOwor
ICAgICAgICBjYXNlIEFuY2hvck5hbWU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhhbmNob3Iu
bmFtZSgpKTsKKyAgICAgICAgY2FzZSBBbmNob3JSZWw6ICAgICAgICAgICAgIHJldHVybiBTdHJp
bmcoYW5jaG9yLnJlbCgpKTsKKyAgICAgICAgY2FzZSBBbmNob3JSZXY6ICAgICAgICAgICAgIHJl
dHVybiBTdHJpbmcoYW5jaG9yLnJldigpKTsKKyAgICAgICAgY2FzZSBBbmNob3JTaGFwZTogICAg
ICAgICAgIHJldHVybiBTdHJpbmcoYW5jaG9yLnNoYXBlKCkpOworICAgICAgICBjYXNlIEFuY2hv
clRhYkluZGV4OiAgICAgICAgcmV0dXJuIE51bWJlcihhbmNob3IudGFiSW5kZXgoKSk7CisgICAg
ICAgIGNhc2UgQW5jaG9yVGFyZ2V0OiAgICAgICAgICByZXR1cm4gU3RyaW5nKGFuY2hvci50YXJn
ZXQoKSk7CisgICAgICAgIGNhc2UgQW5jaG9yVHlwZTogICAgICAgICAgICByZXR1cm4gU3RyaW5n
KGFuY2hvci50eXBlKCkpOworICAgICAgICBjYXNlIEFuY2hvclRleHQ6CisgICAgICAgICAgICBp
ZiAoRG9jdW1lbnRJbXBsKiBkb2MgPSBhbmNob3IuZ2V0RG9jdW1lbnQoKSkKKyAgICAgICAgICAg
ICAgICBkb2MtPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOworICAgICAg
ICAgICAgcmV0dXJuIFN0cmluZyhhbmNob3IuaW5uZXJUZXh0KCkpOworICAgIH0KKyAgICByZXR1
cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50OjppbWFnZUdldHRlcihFeGVj
U3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MSW1hZ2VFbGVtZW50SW1w
bCYgaW1hZ2UgPSAqc3RhdGljX2Nhc3Q8SFRNTEltYWdlRWxlbWVudEltcGwqPihpbXBsKCkpOwor
ICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBJbWFnZU5hbWU6ICAgICAgICAgICAg
cmV0dXJuIFN0cmluZyhpbWFnZS5uYW1lKCkpOworICAgICAgICBjYXNlIEltYWdlQWxpZ246ICAg
ICAgICAgICByZXR1cm4gU3RyaW5nKGltYWdlLmFsaWduKCkpOworICAgICAgICBjYXNlIEltYWdl
QWx0OiAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGltYWdlLmFsdCgpKTsKKyAgICAgICAgY2Fz
ZSBJbWFnZUJvcmRlcjogICAgICAgICAgcmV0dXJuIE51bWJlcihpbWFnZS5ib3JkZXIoKSk7Cisg
ICAgICAgIGNhc2UgSW1hZ2VIZWlnaHQ6ICAgICAgICAgIHJldHVybiBOdW1iZXIoaW1hZ2UuaGVp
Z2h0KHRydWUpKTsKKyAgICAgICAgY2FzZSBJbWFnZUhzcGFjZTogICAgICAgICAgcmV0dXJuIE51
bWJlcihpbWFnZS5oc3BhY2UoKSk7CisgICAgICAgIGNhc2UgSW1hZ2VJc01hcDogICAgICAgICAg
IHJldHVybiBCb29sZWFuKGltYWdlLmlzTWFwKCkpOworICAgICAgICBjYXNlIEltYWdlTG9uZ0Rl
c2M6ICAgICAgICByZXR1cm4gU3RyaW5nKGltYWdlLmxvbmdEZXNjKCkpOworICAgICAgICBjYXNl
IEltYWdlU3JjOiAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGltYWdlLnNyYygpKTsKKyAgICAg
ICAgY2FzZSBJbWFnZVVzZU1hcDogICAgICAgICAgcmV0dXJuIFN0cmluZyhpbWFnZS51c2VNYXAo
KSk7CisgICAgICAgIGNhc2UgSW1hZ2VWc3BhY2U6ICAgICAgICAgIHJldHVybiBOdW1iZXIoaW1h
Z2UudnNwYWNlKCkpOworICAgICAgICBjYXNlIEltYWdlV2lkdGg6ICAgICAgICAgICByZXR1cm4g
TnVtYmVyKGltYWdlLndpZHRoKHRydWUpKTsKKyAgICAgICAgY2FzZSBJbWFnZVg6ICAgICAgICAg
ICAgICAgcmV0dXJuIE51bWJlcihpbWFnZS54KCkpOworICAgICAgICBjYXNlIEltYWdlWTogICAg
ICAgICAgICAgICByZXR1cm4gTnVtYmVyKGltYWdlLnkoKSk7CisgICAgfQorICAgIHJldHVybiBV
bmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6Om9iamVjdEdldHRlcihFeGVjU3Rh
dGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MT2JqZWN0RWxlbWVudEltcGwm
IG9iamVjdCA9ICpzdGF0aWNfY2FzdDxIVE1MT2JqZWN0RWxlbWVudEltcGwqPihpbXBsKCkpOwor
ICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBPYmplY3RGb3JtOiAgICAgICAgICAg
IHJldHVybiBnZXRET01Ob2RlKGV4ZWMsb2JqZWN0LmZvcm0oKSk7IC8vIHR5cGUgSFRNTEZvcm1F
bGVtZW50CisgICAgICAgIGNhc2UgT2JqZWN0Q29kZTogICAgICAgICAgICByZXR1cm4gU3RyaW5n
KG9iamVjdC5jb2RlKCkpOworICAgICAgICBjYXNlIE9iamVjdEFsaWduOiAgICAgICAgICAgcmV0
dXJuIFN0cmluZyhvYmplY3QuYWxpZ24oKSk7CisgICAgICAgIGNhc2UgT2JqZWN0QXJjaGl2ZTog
ICAgICAgICByZXR1cm4gU3RyaW5nKG9iamVjdC5hcmNoaXZlKCkpOworICAgICAgICBjYXNlIE9i
amVjdEJvcmRlcjogICAgICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3QuYm9yZGVyKCkpOworICAg
ICAgICBjYXNlIE9iamVjdENvZGVCYXNlOiAgICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3QuY29k
ZUJhc2UoKSk7CisgICAgICAgIGNhc2UgT2JqZWN0Q29kZVR5cGU6ICAgICAgICByZXR1cm4gU3Ry
aW5nKG9iamVjdC5jb2RlVHlwZSgpKTsKKyAgICAgICAgY2FzZSBPYmplY3RDb250ZW50RG9jdW1l
bnQ6IHJldHVybiBjaGVja05vZGVTZWN1cml0eShleGVjLG9iamVjdC5jb250ZW50RG9jdW1lbnQo
KSkgPyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRET01O
b2RlKGV4ZWMsIG9iamVjdC5jb250ZW50RG9jdW1lbnQoKSkgOiBVbmRlZmluZWQoKTsKKyAgICAg
ICAgY2FzZSBPYmplY3REYXRhOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcob2JqZWN0LmRhdGEo
KSk7CisgICAgICAgIGNhc2UgT2JqZWN0RGVjbGFyZTogICAgICAgICByZXR1cm4gQm9vbGVhbihv
YmplY3QuZGVjbGFyZSgpKTsKKyAgICAgICAgY2FzZSBPYmplY3RIZWlnaHQ6ICAgICAgICAgIHJl
dHVybiBTdHJpbmcob2JqZWN0LmhlaWdodCgpKTsKKyAgICAgICAgY2FzZSBPYmplY3RIc3BhY2U6
ICAgICAgICAgIHJldHVybiBTdHJpbmcob2JqZWN0LmhzcGFjZSgpKTsKKyAgICAgICAgY2FzZSBP
YmplY3ROYW1lOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcob2JqZWN0Lm5hbWUoKSk7CisgICAg
ICAgIGNhc2UgT2JqZWN0U3RhbmRieTogICAgICAgICByZXR1cm4gU3RyaW5nKG9iamVjdC5zdGFu
ZGJ5KCkpOworICAgICAgICBjYXNlIE9iamVjdFRhYkluZGV4OiAgICAgICAgcmV0dXJuIE51bWJl
cihvYmplY3QudGFiSW5kZXgoKSk7CisgICAgICAgIGNhc2UgT2JqZWN0VHlwZTogICAgICAgICAg
ICByZXR1cm4gU3RyaW5nKG9iamVjdC50eXBlKCkpOworICAgICAgICBjYXNlIE9iamVjdFVzZU1h
cDogICAgICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3QudXNlTWFwKCkpOworICAgICAgICBjYXNl
IE9iamVjdFZzcGFjZTogICAgICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3QudnNwYWNlKCkpOwor
ICAgICAgICBjYXNlIE9iamVjdFdpZHRoOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3Qu
d2lkdGgoKSk7CisgICAgfQorICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRN
TEVsZW1lbnQ6OnBhcmFtR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAor
eworICAgIEhUTUxQYXJhbUVsZW1lbnRJbXBsJiBwYXJhbSA9ICpzdGF0aWNfY2FzdDxIVE1MUGFy
YW1FbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICBj
YXNlIFBhcmFtTmFtZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKHBhcmFtLm5hbWUoKSk7Cisg
ICAgICAgIGNhc2UgUGFyYW1UeXBlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcocGFyYW0udHlw
ZSgpKTsKKyAgICAgICAgY2FzZSBQYXJhbVZhbHVlOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhw
YXJhbS52YWx1ZSgpKTsKKyAgICAgICAgY2FzZSBQYXJhbVZhbHVlVHlwZTogICAgICAgcmV0dXJu
IFN0cmluZyhwYXJhbS52YWx1ZVR5cGUoKSk7CisgICAgfQorICAgIHJldHVybiBVbmRlZmluZWQo
KTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OmFwcGxldEdldHRlcihFeGVjU3RhdGUqIGV4ZWMs
IGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MQXBwbGV0RWxlbWVudEltcGwmIGFwcGxldCA9
ICpzdGF0aWNfY2FzdDxIVE1MQXBwbGV0RWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRj
aCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBBcHBsZXRBbGlnbjogICAgICAgICAgIHJldHVybiBT
dHJpbmcoYXBwbGV0LmFsaWduKCkpOworICAgICAgICBjYXNlIEFwcGxldEFsdDogICAgICAgICAg
ICAgcmV0dXJuIFN0cmluZyhhcHBsZXQuYWx0KCkpOworICAgICAgICBjYXNlIEFwcGxldEFyY2hp
dmU6ICAgICAgICAgcmV0dXJuIFN0cmluZyhhcHBsZXQuYXJjaGl2ZSgpKTsKKyAgICAgICAgY2Fz
ZSBBcHBsZXRDb2RlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYXBwbGV0LmNvZGUoKSk7Cisg
ICAgICAgIGNhc2UgQXBwbGV0Q29kZUJhc2U6ICAgICAgICByZXR1cm4gU3RyaW5nKGFwcGxldC5j
b2RlQmFzZSgpKTsKKyAgICAgICAgY2FzZSBBcHBsZXRIZWlnaHQ6ICAgICAgICAgIHJldHVybiBT
dHJpbmcoYXBwbGV0LmhlaWdodCgpKTsKKyAgICAgICAgY2FzZSBBcHBsZXRIc3BhY2U6ICAgICAg
ICAgIHJldHVybiBTdHJpbmcoYXBwbGV0LmhzcGFjZSgpKTsKKyAgICAgICAgY2FzZSBBcHBsZXRO
YW1lOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYXBwbGV0Lm5hbWUoKSk7CisgICAgICAgIGNh
c2UgQXBwbGV0T2JqZWN0OiAgICAgICAgICByZXR1cm4gU3RyaW5nKGFwcGxldC5vYmplY3QoKSk7
CisgICAgICAgIGNhc2UgQXBwbGV0VnNwYWNlOiAgICAgICAgICByZXR1cm4gU3RyaW5nKGFwcGxl
dC52c3BhY2UoKSk7CisgICAgICAgIGNhc2UgQXBwbGV0V2lkdGg6ICAgICAgICAgICByZXR1cm4g
U3RyaW5nKGFwcGxldC53aWR0aCgpKTsKKyAgICB9CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwor
fQorCitWYWx1ZSBIVE1MRWxlbWVudDo6bWFwR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRv
a2VuKSBjb25zdAoreworICAgIEhUTUxNYXBFbGVtZW50SW1wbCYgbWFwID0gKnN0YXRpY19jYXN0
PEhUTUxNYXBFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAg
ICAgICBjYXNlIE1hcEFyZWFzOiAgICAgICAgICAgcmV0dXJuIGdldEhUTUxDb2xsZWN0aW9uKGV4
ZWMsIG1hcC5hcmVhcygpLmdldCgpKTsgLy8gdHlwZSBIVE1MQ29sbGVjdGlvbgorICAgICAgICBj
YXNlIE1hcE5hbWU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhtYXAubmFtZSgpKTsKKyAgICB9
CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6YXJlYUdl
dHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MQXJlYUVs
ZW1lbnRJbXBsJiBhcmVhID0gKnN0YXRpY19jYXN0PEhUTUxBcmVhRWxlbWVudEltcGwqPihpbXBs
KCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBBcmVhQWNjZXNzS2V5OiAg
ICAgICByZXR1cm4gU3RyaW5nKGFyZWEuYWNjZXNzS2V5KCkpOworICAgICAgICBjYXNlIEFyZWFB
bHQ6ICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYXJlYS5hbHQoKSk7CisgICAgICAgIGNhc2Ug
QXJlYUNvb3JkczogICAgICAgICAgcmV0dXJuIFN0cmluZyhhcmVhLmNvb3JkcygpKTsKKyAgICAg
ICAgY2FzZSBBcmVhSHJlZjogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGFyZWEuaHJlZigpKTsK
KyAgICAgICAgY2FzZSBBcmVhSGFzaDogICAgICAgICAgICByZXR1cm4gU3RyaW5nKCcjJytLVVJM
KGFyZWEuaHJlZigpLnN0cmluZygpKS5yZWYoKSk7CisgICAgICAgIGNhc2UgQXJlYUhvc3Q6ICAg
ICAgICAgICAgcmV0dXJuIFN0cmluZyhLVVJMKGFyZWEuaHJlZigpLnN0cmluZygpKS5ob3N0KCkp
OworICAgICAgICBjYXNlIEFyZWFIb3N0TmFtZTogeworICAgICAgICAgICAgS1VSTCB1cmwoYXJl
YS5ocmVmKCkuc3RyaW5nKCkpOworICAgICAgICAgICAga2REZWJ1Zyg2MDcwKSA8PCAibGluazo6
aG9zdG5hbWUgdXNlczoiIDw8dXJsLnVybCgpPDxlbmRsOworICAgICAgICAgICAgaWYgKHVybC5w
b3J0KCk9PTApCisgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh1cmwuaG9zdCgpKTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKHVybC5ob3N0KCkg
KyAiOiIgKyBRU3RyaW5nOjpudW1iZXIodXJsLnBvcnQoKSkpOworICAgICAgICB9CisgICAgICAg
IGNhc2UgQXJlYVBhdGhOYW1lOiAgICAgICAgcmV0dXJuIFN0cmluZyhLVVJMKGFyZWEuaHJlZigp
LnN0cmluZygpKS5wYXRoKCkpOworICAgICAgICBjYXNlIEFyZWFQb3J0OiAgICAgICAgICAgIHJl
dHVybiBTdHJpbmcoUVN0cmluZzo6bnVtYmVyKEtVUkwoYXJlYS5ocmVmKCkuc3RyaW5nKCkpLnBv
cnQoKSkpOworICAgICAgICBjYXNlIEFyZWFQcm90b2NvbDogICAgICAgIHJldHVybiBTdHJpbmco
S1VSTChhcmVhLmhyZWYoKS5zdHJpbmcoKSkucHJvdG9jb2woKSsiOiIpOworICAgICAgICBjYXNl
IEFyZWFTZWFyY2g6ICAgICAgICAgIHJldHVybiBTdHJpbmcoS1VSTChhcmVhLmhyZWYoKS5zdHJp
bmcoKSkucXVlcnkoKSk7CisgICAgICAgIGNhc2UgQXJlYU5vSHJlZjogICAgICAgICAgcmV0dXJu
IEJvb2xlYW4oYXJlYS5ub0hyZWYoKSk7CisgICAgICAgIGNhc2UgQXJlYVNoYXBlOiAgICAgICAg
ICAgcmV0dXJuIFN0cmluZyhhcmVhLnNoYXBlKCkpOworICAgICAgICBjYXNlIEFyZWFUYWJJbmRl
eDogICAgICAgIHJldHVybiBOdW1iZXIoYXJlYS50YWJJbmRleCgpKTsKKyAgICAgICAgY2FzZSBB
cmVhVGFyZ2V0OiAgICAgICAgICByZXR1cm4gU3RyaW5nKGFyZWEudGFyZ2V0KCkpOworICAgIH0K
KyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50OjpzY3JpcHRH
ZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTFNjcmlw
dEVsZW1lbnRJbXBsJiBzY3JpcHQgPSAqc3RhdGljX2Nhc3Q8SFRNTFNjcmlwdEVsZW1lbnRJbXBs
Kj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgU2NyaXB0VGV4
dDogICAgICAgICAgICByZXR1cm4gU3RyaW5nKHNjcmlwdC50ZXh0KCkpOworICAgICAgICBjYXNl
IFNjcmlwdEh0bWxGb3I6ICAgICAgICAgcmV0dXJuIFN0cmluZyhzY3JpcHQuaHRtbEZvcigpKTsK
KyAgICAgICAgY2FzZSBTY3JpcHRFdmVudDogICAgICAgICAgIHJldHVybiBTdHJpbmcoc2NyaXB0
LmV2ZW50KCkpOworICAgICAgICBjYXNlIFNjcmlwdENoYXJzZXQ6ICAgICAgICAgcmV0dXJuIFN0
cmluZyhzY3JpcHQuY2hhcnNldCgpKTsKKyAgICAgICAgY2FzZSBTY3JpcHREZWZlcjogICAgICAg
ICAgIHJldHVybiBCb29sZWFuKHNjcmlwdC5kZWZlcigpKTsKKyAgICAgICAgY2FzZSBTY3JpcHRT
cmM6ICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoc2NyaXB0LnNyYygpKTsKKyAgICAgICAgY2Fz
ZSBTY3JpcHRUeXBlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoc2NyaXB0LnR5cGUoKSk7Cisg
ICAgfQorICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OnRh
YmxlR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxU
YWJsZUVsZW1lbnRJbXBsJiB0YWJsZSA9ICpzdGF0aWNfY2FzdDxIVE1MVGFibGVFbGVtZW50SW1w
bCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNlIFRhYmxlQ2Fw
dGlvbjogICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLHRhYmxlLmNhcHRpb24oKSk7IC8v
IHR5cGUgSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQKKyAgICAgICAgY2FzZSBUYWJsZVRIZWFkOiAg
ICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyx0YWJsZS50SGVhZCgpKTsgLy8gdHlwZSBI
VE1MVGFibGVTZWN0aW9uRWxlbWVudAorICAgICAgICBjYXNlIFRhYmxlVEZvb3Q6ICAgICAgICAg
ICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLHRhYmxlLnRGb290KCkpOyAvLyB0eXBlIEhUTUxUYWJs
ZVNlY3Rpb25FbGVtZW50CisgICAgICAgIGNhc2UgVGFibGVSb3dzOiAgICAgICAgICAgIHJldHVy
biBnZXRIVE1MQ29sbGVjdGlvbihleGVjLCB0YWJsZS5yb3dzKCkuZ2V0KCkpOyAvLyB0eXBlIEhU
TUxDb2xsZWN0aW9uCisgICAgICAgIGNhc2UgVGFibGVUQm9kaWVzOiAgICAgICAgIHJldHVybiBn
ZXRIVE1MQ29sbGVjdGlvbihleGVjLCB0YWJsZS50Qm9kaWVzKCkuZ2V0KCkpOyAvLyB0eXBlIEhU
TUxDb2xsZWN0aW9uCisgICAgICAgIGNhc2UgVGFibGVBbGlnbjogICAgICAgICAgIHJldHVybiBT
dHJpbmcodGFibGUuYWxpZ24oKSk7CisgICAgICAgIGNhc2UgVGFibGVCZ0NvbG9yOiAgICAgICAg
IHJldHVybiBTdHJpbmcodGFibGUuYmdDb2xvcigpKTsKKyAgICAgICAgY2FzZSBUYWJsZUJvcmRl
cjogICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZS5ib3JkZXIoKSk7CisgICAgICAgIGNhc2Ug
VGFibGVDZWxsUGFkZGluZzogICAgIHJldHVybiBTdHJpbmcodGFibGUuY2VsbFBhZGRpbmcoKSk7
CisgICAgICAgIGNhc2UgVGFibGVDZWxsU3BhY2luZzogICAgIHJldHVybiBTdHJpbmcodGFibGUu
Y2VsbFNwYWNpbmcoKSk7CisgICAgICAgIGNhc2UgVGFibGVGcmFtZTogICAgICAgICAgIHJldHVy
biBTdHJpbmcodGFibGUuZnJhbWUoKSk7CisgICAgICAgIGNhc2UgVGFibGVSdWxlczogICAgICAg
ICAgIHJldHVybiBTdHJpbmcodGFibGUucnVsZXMoKSk7CisgICAgICAgIGNhc2UgVGFibGVTdW1t
YXJ5OiAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGUuc3VtbWFyeSgpKTsKKyAgICAgICAgY2Fz
ZSBUYWJsZVdpZHRoOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZS53aWR0aCgpKTsKKyAg
ICB9CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6dGFi
bGVDYXB0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAg
IEhUTUxUYWJsZUNhcHRpb25FbGVtZW50SW1wbCYgdGFibGVDYXB0aW9uID0gKnN0YXRpY19jYXN0
PEhUTUxUYWJsZUNhcHRpb25FbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09
IFRhYmxlQ2FwdGlvbkFsaWduKQorICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ2FwdGlvbi5h
bGlnbigpKTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50
Ojp0YWJsZUNvbEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAg
ICBIVE1MVGFibGVDb2xFbGVtZW50SW1wbCYgdGFibGVDb2wgPSAqc3RhdGljX2Nhc3Q8SFRNTFRh
YmxlQ29sRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAg
ICAgY2FzZSBUYWJsZUNvbEFsaWduOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNvbC5h
bGlnbigpKTsKKyAgICAgICAgY2FzZSBUYWJsZUNvbENoOiAgICAgICAgICAgICAgcmV0dXJuIFN0
cmluZyh0YWJsZUNvbC5jaCgpKTsKKyAgICAgICAgY2FzZSBUYWJsZUNvbENoT2ZmOiAgICAgICAg
ICAgcmV0dXJuIFN0cmluZyh0YWJsZUNvbC5jaE9mZigpKTsKKyAgICAgICAgY2FzZSBUYWJsZUNv
bFNwYW46ICAgICAgICAgICAgcmV0dXJuIE51bWJlcih0YWJsZUNvbC5zcGFuKCkpOworICAgICAg
ICBjYXNlIFRhYmxlQ29sVkFsaWduOiAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ29sLnZB
bGlnbigpKTsKKyAgICAgICAgY2FzZSBUYWJsZUNvbFdpZHRoOiAgICAgICAgICAgcmV0dXJuIFN0
cmluZyh0YWJsZUNvbC53aWR0aCgpKTsKKyAgICB9CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwor
fQorCitWYWx1ZSBIVE1MRWxlbWVudDo6dGFibGVTZWN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhl
YywgaW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbCYg
dGFibGVTZWN0aW9uID0gKnN0YXRpY19jYXN0PEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbCo+
KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNlIFRhYmxlU2VjdGlv
bkFsaWduOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZVNlY3Rpb24uYWxpZ24oKSk7Cisg
ICAgICAgIGNhc2UgVGFibGVTZWN0aW9uQ2g6ICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRh
YmxlU2VjdGlvbi5jaCgpKTsKKyAgICAgICAgY2FzZSBUYWJsZVNlY3Rpb25DaE9mZjogICAgICAg
ICAgIHJldHVybiBTdHJpbmcodGFibGVTZWN0aW9uLmNoT2ZmKCkpOworICAgICAgICBjYXNlIFRh
YmxlU2VjdGlvblZBbGlnbjogICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZVNlY3Rpb24udkFs
aWduKCkpOworICAgICAgICBjYXNlIFRhYmxlU2VjdGlvblJvd3M6ICAgICAgICAgICAgcmV0dXJu
IGdldEhUTUxDb2xsZWN0aW9uKGV4ZWMsIHRhYmxlU2VjdGlvbi5yb3dzKCkuZ2V0KCkpOyAvLyB0
eXBlIEhUTUxDb2xsZWN0aW9uCisgICAgfQorICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKwor
VmFsdWUgSFRNTEVsZW1lbnQ6OnRhYmxlUm93R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRv
a2VuKSBjb25zdAoreworICAgIEhUTUxUYWJsZVJvd0VsZW1lbnRJbXBsJiB0YWJsZVJvdyA9ICpz
dGF0aWNfY2FzdDxIVE1MVGFibGVSb3dFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNo
ICh0b2tlbikgeworICAgICAgICBjYXNlIFRhYmxlUm93Um93SW5kZXg6ICAgICAgICByZXR1cm4g
TnVtYmVyKHRhYmxlUm93LnJvd0luZGV4KCkpOworICAgICAgICBjYXNlIFRhYmxlUm93U2VjdGlv
blJvd0luZGV4OiByZXR1cm4gTnVtYmVyKHRhYmxlUm93LnNlY3Rpb25Sb3dJbmRleCgpKTsKKyAg
ICAgICAgY2FzZSBUYWJsZVJvd0NlbGxzOiAgICAgICAgICAgcmV0dXJuIGdldEhUTUxDb2xsZWN0
aW9uKGV4ZWMsIHRhYmxlUm93LmNlbGxzKCkuZ2V0KCkpOyAvLyB0eXBlIEhUTUxDb2xsZWN0aW9u
CisgICAgICAgIGNhc2UgVGFibGVSb3dBbGlnbjogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFi
bGVSb3cuYWxpZ24oKSk7CisgICAgICAgIGNhc2UgVGFibGVSb3dCZ0NvbG9yOiAgICAgICAgIHJl
dHVybiBTdHJpbmcodGFibGVSb3cuYmdDb2xvcigpKTsKKyAgICAgICAgY2FzZSBUYWJsZVJvd0No
OiAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZVJvdy5jaCgpKTsKKyAgICAgICAgY2Fz
ZSBUYWJsZVJvd0NoT2ZmOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZVJvdy5jaE9mZigp
KTsKKyAgICAgICAgY2FzZSBUYWJsZVJvd1ZBbGlnbjogICAgICAgICAgcmV0dXJuIFN0cmluZyh0
YWJsZVJvdy52QWxpZ24oKSk7CisgICAgfQorICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKwor
VmFsdWUgSFRNTEVsZW1lbnQ6OnRhYmxlQ2VsbEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0
b2tlbikgY29uc3QKK3sKKyAgICBIVE1MVGFibGVDZWxsRWxlbWVudEltcGwmIHRhYmxlQ2VsbCA9
ICpzdGF0aWNfY2FzdDxIVE1MVGFibGVDZWxsRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3
aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBUYWJsZUNlbGxDZWxsSW5kZXg6ICAgICAgIHJl
dHVybiBOdW1iZXIodGFibGVDZWxsLmNlbGxJbmRleCgpKTsKKyAgICAgICAgY2FzZSBUYWJsZUNl
bGxBYmJyOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVDZWxsLmFiYnIoKSk7CisgICAg
ICAgIGNhc2UgVGFibGVDZWxsQWxpZ246ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ2Vs
bC5hbGlnbigpKTsKKyAgICAgICAgY2FzZSBUYWJsZUNlbGxBeGlzOiAgICAgICAgICAgIHJldHVy
biBTdHJpbmcodGFibGVDZWxsLmF4aXMoKSk7CisgICAgICAgIGNhc2UgVGFibGVDZWxsQmdDb2xv
cjogICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ2VsbC5iZ0NvbG9yKCkpOworICAgICAgICBj
YXNlIFRhYmxlQ2VsbENoOiAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNlbGwuY2go
KSk7CisgICAgICAgIGNhc2UgVGFibGVDZWxsQ2hPZmY6ICAgICAgICAgICByZXR1cm4gU3RyaW5n
KHRhYmxlQ2VsbC5jaE9mZigpKTsKKyAgICAgICAgY2FzZSBUYWJsZUNlbGxDb2xTcGFuOiAgICAg
ICAgIHJldHVybiBOdW1iZXIodGFibGVDZWxsLmNvbFNwYW4oKSk7CisgICAgICAgIGNhc2UgVGFi
bGVDZWxsSGVhZGVyczogICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ2VsbC5oZWFkZXJzKCkp
OworICAgICAgICBjYXNlIFRhYmxlQ2VsbEhlaWdodDogICAgICAgICAgcmV0dXJuIFN0cmluZyh0
YWJsZUNlbGwuaGVpZ2h0KCkpOworICAgICAgICBjYXNlIFRhYmxlQ2VsbE5vV3JhcDogICAgICAg
ICAgcmV0dXJuIEJvb2xlYW4odGFibGVDZWxsLm5vV3JhcCgpKTsKKyAgICAgICAgY2FzZSBUYWJs
ZUNlbGxSb3dTcGFuOiAgICAgICAgIHJldHVybiBOdW1iZXIodGFibGVDZWxsLnJvd1NwYW4oKSk7
CisgICAgICAgIGNhc2UgVGFibGVDZWxsU2NvcGU6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRh
YmxlQ2VsbC5zY29wZSgpKTsKKyAgICAgICAgY2FzZSBUYWJsZUNlbGxWQWxpZ246ICAgICAgICAg
IHJldHVybiBTdHJpbmcodGFibGVDZWxsLnZBbGlnbigpKTsKKyAgICAgICAgY2FzZSBUYWJsZUNl
bGxXaWR0aDogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVDZWxsLndpZHRoKCkpOworICAg
IH0KKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50OjpmcmFt
ZVNldEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1M
RnJhbWVTZXRFbGVtZW50SW1wbCYgZnJhbWVTZXQgPSAqc3RhdGljX2Nhc3Q8SFRNTEZyYW1lU2V0
RWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2Fz
ZSBGcmFtZVNldENvbHM6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhmcmFtZVNldC5jb2xzKCkp
OworICAgICAgICBjYXNlIEZyYW1lU2V0Um93czogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGZy
YW1lU2V0LnJvd3MoKSk7CisgICAgfQorICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFs
dWUgSFRNTEVsZW1lbnQ6OmZyYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBj
b25zdAoreworICAgIEhUTUxGcmFtZUVsZW1lbnRJbXBsJiBmcmFtZUVsZW1lbnQgPSAqc3RhdGlj
X2Nhc3Q8SFRNTEZyYW1lRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4p
IHsKKyAgICAgICAgY2FzZSBGcmFtZUNvbnRlbnREb2N1bWVudDogcmV0dXJuIGNoZWNrTm9kZVNl
Y3VyaXR5KGV4ZWMsZnJhbWVFbGVtZW50LmNvbnRlbnREb2N1bWVudCgpKSA/IAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0RE9NTm9kZShleGVjLCBmcmFtZUVs
ZW1lbnQuY29udGVudERvY3VtZW50KCkpIDogVW5kZWZpbmVkKCk7CisgICAgICAgIGNhc2UgRnJh
bWVDb250ZW50V2luZG93OiAgIHJldHVybiBjaGVja05vZGVTZWN1cml0eShleGVjLGZyYW1lRWxl
bWVudC5jb250ZW50RG9jdW1lbnQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA/IFdpbmRvdzo6cmV0cmlldmUoZnJhbWVFbGVtZW50LmNvbnRlbnRQYXJ0KCkpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBVbmRlZmluZWQoKTsKKyAg
ICAgICAgY2FzZSBGcmFtZUZyYW1lQm9yZGVyOiAgICAgcmV0dXJuIFN0cmluZyhmcmFtZUVsZW1l
bnQuZnJhbWVCb3JkZXIoKSk7CisgICAgICAgIGNhc2UgRnJhbWVMb25nRGVzYzogICAgICAgIHJl
dHVybiBTdHJpbmcoZnJhbWVFbGVtZW50LmxvbmdEZXNjKCkpOworICAgICAgICBjYXNlIEZyYW1l
TWFyZ2luSGVpZ2h0OiAgICByZXR1cm4gU3RyaW5nKGZyYW1lRWxlbWVudC5tYXJnaW5IZWlnaHQo
KSk7CisgICAgICAgIGNhc2UgRnJhbWVNYXJnaW5XaWR0aDogICAgIHJldHVybiBTdHJpbmcoZnJh
bWVFbGVtZW50Lm1hcmdpbldpZHRoKCkpOworICAgICAgICBjYXNlIEZyYW1lTmFtZTogICAgICAg
ICAgICByZXR1cm4gU3RyaW5nKGZyYW1lRWxlbWVudC5uYW1lKCkpOworICAgICAgICBjYXNlIEZy
YW1lTm9SZXNpemU6ICAgICAgICByZXR1cm4gQm9vbGVhbihmcmFtZUVsZW1lbnQubm9SZXNpemUo
KSk7CisgICAgICAgIGNhc2UgRnJhbWVTY3JvbGxpbmc6ICAgICAgIHJldHVybiBTdHJpbmcoZnJh
bWVFbGVtZW50LnNjcm9sbGluZygpKTsKKyAgICAgICAgY2FzZSBGcmFtZVNyYzoKKyAgICAgICAg
Y2FzZSBGcmFtZUxvY2F0aW9uOiAgICAgICAgcmV0dXJuIFN0cmluZyhmcmFtZUVsZW1lbnQuc3Jj
KCkpOworICAgIH0KKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVt
ZW50OjppRnJhbWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7Cisg
ICAgSFRNTElGcmFtZUVsZW1lbnRJbXBsJiBpRnJhbWUgPSAqc3RhdGljX2Nhc3Q8SFRNTElGcmFt
ZUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNh
c2UgSUZyYW1lQWxpZ246ICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoaUZyYW1lLmFsaWdu
KCkpOworICAgICAgICAgIC8vICMjIyBzZWN1cml0eSBjaGVjayA/CisgICAgICAgIGNhc2UgSUZy
YW1lRG9jdW1lbnQ6IC8vIG5vbi1zdGFuZGFyZCwgbWFwcGVkIHRvIGNvbnRlbnREb2N1bWVudAor
ICAgICAgICBjYXNlIElGcmFtZUNvbnRlbnREb2N1bWVudDogcmV0dXJuIGNoZWNrTm9kZVNlY3Vy
aXR5KGV4ZWMsaUZyYW1lLmNvbnRlbnREb2N1bWVudCgpKSA/IAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBnZXRET01Ob2RlKGV4ZWMsIGlGcmFtZS5jb250ZW50RG9jdW1l
bnQoKSkgOiBVbmRlZmluZWQoKTsKKyAgICAgICAgY2FzZSBJRnJhbWVDb250ZW50V2luZG93Ogly
ZXR1cm4gY2hlY2tOb2RlU2VjdXJpdHkoZXhlYyxpRnJhbWUuY29udGVudERvY3VtZW50KCkpIAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gV2luZG93OjpyZXRyaWV2
ZShpRnJhbWUuY29udGVudFBhcnQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA6IFVuZGVmaW5lZCgpOworICAgICAgICBjYXNlIElGcmFtZUZyYW1lQm9yZGVyOiAg
ICAgcmV0dXJuIFN0cmluZyhpRnJhbWUuZnJhbWVCb3JkZXIoKSk7CisgICAgICAgIGNhc2UgSUZy
YW1lSGVpZ2h0OiAgICAgICAgICByZXR1cm4gU3RyaW5nKGlGcmFtZS5oZWlnaHQoKSk7CisgICAg
ICAgIGNhc2UgSUZyYW1lTG9uZ0Rlc2M6ICAgICAgICByZXR1cm4gU3RyaW5nKGlGcmFtZS5sb25n
RGVzYygpKTsKKyAgICAgICAgY2FzZSBJRnJhbWVNYXJnaW5IZWlnaHQ6ICAgIHJldHVybiBTdHJp
bmcoaUZyYW1lLm1hcmdpbkhlaWdodCgpKTsKKyAgICAgICAgY2FzZSBJRnJhbWVNYXJnaW5XaWR0
aDogICAgIHJldHVybiBTdHJpbmcoaUZyYW1lLm1hcmdpbldpZHRoKCkpOworICAgICAgICBjYXNl
IElGcmFtZU5hbWU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpRnJhbWUubmFtZSgpKTsKKyAg
ICAgICAgY2FzZSBJRnJhbWVTY3JvbGxpbmc6ICAgICAgIHJldHVybiBTdHJpbmcoaUZyYW1lLnNj
cm9sbGluZygpKTsKKyAgICAgICAgY2FzZSBJRnJhbWVTcmM6ICAgICAgICAgICAgIHJldHVybiBT
dHJpbmcoaUZyYW1lLnNyYygpKTsKKyAgICAgICAgY2FzZSBJRnJhbWVXaWR0aDogICAgICAgICAg
IHJldHVybiBTdHJpbmcoaUZyYW1lLndpZHRoKCkpOworICAgIH0KKyAgICByZXR1cm4gVW5kZWZp
bmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50OjptYXJxdWVlR2V0dGVyKEV4ZWNTdGF0ZSog
ZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBGaW5kIG91dCB3aGF0IFdp
bklFIGV4cG9zZXMgYXMgcHJvcGVydGllcyBhbmQgaW1wbGVtZW50IHRoaXMuCisgICAgcmV0dXJu
IFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICAvLyBDaGVjayBvdXIgc2V0
IG9mIGdlbmVyaWMgcHJvcGVydGllcyBmaXJzdC4KKyAgICBIVE1MRWxlbWVudEltcGwgJmVsZW1l
bnQgPSAqc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KGltcGwoKSk7CisgICAgc3dpdGNo
ICh0b2tlbikgeworICAgICAgICBjYXNlIEVsZW1lbnRJZDoKKyAgICAgICAgLy8gaWh0LmNvbSBy
ZWxpZXMgb24gdGhpcyB2YWx1ZSBiZWluZyAiIiB3aGVuIG5vIGlkIGlzIHByZXNlbnQuICBPdGhl
ciBicm93c2VycyBkbyB0aGlzIGFzIHdlbGwuCisgICAgICAgIC8vIFNvIHdlIHVzZSBTdHJpbmco
KSBpbnN0ZWFkIG9mIFN0cmluZygpIGhlcmUuCisgICAgICAgIHJldHVybiBTdHJpbmcoZWxlbWVu
dC5pZCgpKTsKKyAgICAgICAgY2FzZSBFbGVtZW50VGl0bGU6CisgICAgICAgICAgICByZXR1cm4g
U3RyaW5nKGVsZW1lbnQudGl0bGUoKSk7CisgICAgICAgIGNhc2UgRWxlbWVudExhbmc6CisgICAg
ICAgICAgICByZXR1cm4gU3RyaW5nKGVsZW1lbnQubGFuZygpKTsKKyAgICAgICAgY2FzZSBFbGVt
ZW50RGlyOgorICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhlbGVtZW50LmRpcigpKTsKKyAgICAg
ICAgY2FzZSBFbGVtZW50Q2xhc3NOYW1lOgorICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhlbGVt
ZW50LmNsYXNzTmFtZSgpKTsKKyAgICAgICAgY2FzZSBFbGVtZW50SW5uZXJIVE1MOgorICAgICAg
ICAgICAgcmV0dXJuIFN0cmluZyhlbGVtZW50LmlubmVySFRNTCgpKTsKKyAgICAgICAgY2FzZSBF
bGVtZW50SW5uZXJUZXh0OgorICAgICAgICAgICAgaWYgKERvY3VtZW50SW1wbCogZG9jID0gaW1w
bCgpLT5nZXREb2N1bWVudCgpKQorICAgICAgICAgICAgICAgIGRvYy0+dXBkYXRlTGF5b3V0SWdu
b3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGVsZW1l
bnQuaW5uZXJUZXh0KCkpOworICAgICAgICBjYXNlIEVsZW1lbnRPdXRlckhUTUw6CisgICAgICAg
ICAgICByZXR1cm4gU3RyaW5nKGVsZW1lbnQub3V0ZXJIVE1MKCkpOworICAgICAgICBjYXNlIEVs
ZW1lbnRPdXRlclRleHQ6CisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGVsZW1lbnQub3V0ZXJU
ZXh0KCkpOworICAgICAgICBjYXNlIEVsZW1lbnREb2N1bWVudDoKKyAgICAgICAgICAgIHJldHVy
biBnZXRET01Ob2RlKGV4ZWMsZWxlbWVudC5vd25lckRvY3VtZW50KCkpOworICAgICAgICBjYXNl
IEVsZW1lbnRDaGlsZHJlbjoKKyAgICAgICAgICAgIHJldHVybiBnZXRIVE1MQ29sbGVjdGlvbihl
eGVjLCBlbGVtZW50LmNoaWxkcmVuKCkuZ2V0KCkpOworICAgICAgICBjYXNlIEVsZW1lbnRDb250
ZW50RWRpdGFibGU6CisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGVsZW1lbnQuY29udGVudEVk
aXRhYmxlKCkpOworICAgICAgICBjYXNlIEVsZW1lbnRJc0NvbnRlbnRFZGl0YWJsZToKKyAgICAg
ICAgICAgIHJldHVybiBCb29sZWFuKGVsZW1lbnQuaXNDb250ZW50RWRpdGFibGUoKSk7CisgICAg
fQorCisgICAgLy8gTm93IGNoZWNrIHRoZSBwcm9wZXJ0aWVzIHNwZWNpZmljIHRvIG91ciBlbGVt
ZW50IHR5cGUuCisgICAgY29uc3QgR2V0U2V0SW5mbyogaW5mbyA9IGdldFNldEluZm8oKTsKKyAg
ICBpZiAoaW5mbyAmJiBpbmZvLT5tX2dldHRlcikKKyAgICAgICAgcmV0dXJuICh0aGlzLT4qKGlu
Zm8tPm1fZ2V0dGVyKSkoZXhlYywgdG9rZW4pOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30K
KworYm9vbCBLSlM6OkhUTUxFbGVtZW50OjpoYXNQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNv
bnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSkgY29uc3QKK3sKKyNpZmRlZiBLSlNfVkVSQk9T
RQorICAgIC8va2REZWJ1Zyg2MDcwKSA8PCAiSFRNTEVsZW1lbnQ6Omhhc1Byb3BlcnR5ICIgPDwg
cHJvcGVydHlOYW1lLnFzdHJpbmcoKSA8PCBlbmRsOworI2VuZGlmCisgICAgSFRNTEVsZW1lbnRJ
bXBsICZlbGVtZW50ID0gKnN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCAqPihpbXBsKCkpOwor
ICAgIC8vIEZpcnN0IGxvb2sgYXQgZHluYW1pYyBwcm9wZXJ0aWVzIC0ga2VlcCB0aGlzIGluIHN5
bmMgd2l0aCB0cnlHZXQKKyAgICBpZiAoZWxlbWVudC5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpm
b3JtKCkpKSB7CisgICAgICAgIEhUTUxGb3JtRWxlbWVudEltcGwgJmZvcm0gPSBzdGF0aWNfY2Fz
dDxIVE1MRm9ybUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgICAgICAvLyBDaGVjayBpZiB3
ZSdyZSByZXRyaWV2aW5nIGFuIGVsZW1lbnQgKGJ5IGluZGV4IG9yIGJ5IG5hbWUpCisgICAgICAg
IGJvb2wgb2s7CisgICAgICAgIHVpbnQgdSA9IHByb3BlcnR5TmFtZS50b1VMb25nKCZvayk7Cisg
ICAgICAgIGlmIChvayAmJiBmb3JtLmVsZW1lbnRzKCktPml0ZW0odSkpCisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKGZvcm0uZWxlbWVudHMoKS0+bmFtZWRJdGVtKHByb3Bl
cnR5TmFtZS5zdHJpbmcoKSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
ZWxzZSBpZiAoZWxlbWVudC5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpzZWxlY3QoKSkpIHsKKyAg
ICAgICAgSFRNTFNlbGVjdEVsZW1lbnRJbXBsICZzZWxlY3QgPSBzdGF0aWNfY2FzdDxIVE1MU2Vs
ZWN0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgICAgIGJvb2wgb2s7CisgICAgICAgIHVp
bnQgdSA9IHByb3BlcnR5TmFtZS50b1VMb25nKCZvayk7CisgICAgICAgIGlmIChvayAmJiBzZWxl
Y3Qub3B0aW9uc0hUTUxDb2xsZWN0aW9uKCktPml0ZW0odSkpCisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIERPTUVsZW1lbnQ6Omhhc1Byb3BlcnR5KGV4ZWMsIHBy
b3BlcnR5TmFtZSk7Cit9CisKK1VTdHJpbmcgS0pTOjpIVE1MRWxlbWVudDo6dG9TdHJpbmcoRXhl
Y1N0YXRlICpleGVjKSBjb25zdAoreworICBpZiAoaW1wbCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6YSgpKSkKKyAgICByZXR1cm4gVVN0cmluZyhzdGF0aWNfY2FzdDxjb25zdCBIVE1MQW5jaG9y
RWxlbWVudEltcGwgKj4oaW1wbCgpKS0+aHJlZigpKTsKKyAgZWxzZQorICAgIHJldHVybiBET01F
bGVtZW50Ojp0b1N0cmluZyhleGVjKTsKK30KKworc3RhdGljIEhUTUxGb3JtRWxlbWVudEltcGwg
KmdldEZvcm0oSFRNTEVsZW1lbnRJbXBsICplbGVtZW50KQoreworICBpZiAoZWxlbWVudC0+aXNH
ZW5lcmljRm9ybUVsZW1lbnQoKSkKKyAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MR2VuZXJp
Y0Zvcm1FbGVtZW50SW1wbCAqPihlbGVtZW50KS0+Zm9ybSgpOworICBpZiAoZWxlbWVudC0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OmxhYmVsKCkpKQorICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhU
TUxMYWJlbEVsZW1lbnRJbXBsICo+KGVsZW1lbnQpLT5mb3JtKCk7CisgIGlmIChlbGVtZW50LT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6b2JqZWN0KCkpKQorICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PEhUTUxPYmplY3RFbGVtZW50SW1wbCAqPihlbGVtZW50KS0+Zm9ybSgpOworCisgIHJldHVybiAw
OworfQorCit2b2lkIEtKUzo6SFRNTEVsZW1lbnQ6OnB1c2hFdmVudEhhbmRsZXJTY29wZShFeGVj
U3RhdGUgKmV4ZWMsIFNjb3BlQ2hhaW4gJnNjb3BlKSBjb25zdAogewogICBIVE1MRWxlbWVudElt
cGwgKmVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwgKj4oaW1wbCgpKTsKIApA
QCAtMjA5OSw3ICsyMjU1LDcgQEAgdm9pZCBLSlM6OkhUTUxFbGVtZW50OjpwdXNoRXZlbnRIYW5k
bGVyUwogICAgIHNjb3BlLnB1c2goc3RhdGljX2Nhc3Q8T2JqZWN0SW1wICo+KGdldERPTU5vZGUo
ZXhlYywgZm9ybSkpKTsKICAgZWxzZSB7CiAgICAgTm9kZUltcGwgKmZvcm0gPSBlbGVtZW50LT5w
YXJlbnROb2RlKCk7Ci0gICAgd2hpbGUgKGZvcm0gJiYgZm9ybS0+aWQoKSAhPSBJRF9GT1JNKQor
ICAgIHdoaWxlIChmb3JtICYmICFmb3JtLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Zm9ybSgpKSkK
ICAgICAgIGZvcm0gPSBmb3JtLT5wYXJlbnROb2RlKCk7CiAgICAgCiAgICAgaWYgKGZvcm0pCkBA
IC0yMTE5LDE4MCArMjI3NSwxNjUgQEAgSFRNTEVsZW1lbnRGdW5jdGlvbjo6SFRNTEVsZW1lbnRG
dW5jdGlvbgogCiBWYWx1ZSBLSlM6OkhUTUxFbGVtZW50RnVuY3Rpb246OnRyeUNhbGwoRXhlY1N0
YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7Ci0gIGlmICgh
dGhpc09iai5pbmhlcml0cygmS0pTOjpIVE1MRWxlbWVudDo6aW5mbykpIHsKLSAgICBPYmplY3Qg
ZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5cGVFcnJvcik7Ci0gICAgZXhlYy0+c2V0RXhjZXB0
aW9uKGVycik7Ci0gICAgcmV0dXJuIGVycjsKLSAgfQotICBrZERlYnVnKCkgPDwgIktKUzo6SFRN
TEVsZW1lbnRGdW5jdGlvbjo6dHJ5Q2FsbCAiIDw8IGVuZGw7Ci0gIERPTUV4Y2VwdGlvblRyYW5z
bGF0b3IgZXhjZXB0aW9uKGV4ZWMpOwotICBIVE1MRWxlbWVudEltcGwgJmVsZW1lbnQgPSAqc3Rh
dGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KHN0YXRpY19jYXN0PEhUTUxFbGVtZW50ICo+KHRo
aXNPYmouaW1wKCkpLT5pbXBsKCkpOwotCi0gIHN3aXRjaCAoZWxlbWVudC5pZCgpKSB7Ci0gICAg
Y2FzZSBJRF9GT1JNOiB7Ci0gICAgICBIVE1MRm9ybUVsZW1lbnRJbXBsICZmb3JtID0gc3RhdGlj
X2Nhc3Q8SFRNTEZvcm1FbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIGlmIChpZCA9PSBL
SlM6OkhUTUxFbGVtZW50OjpGb3JtU3VibWl0KSB7Ci0gICAgICAgIGZvcm0uc3VibWl0KCk7Ci0g
ICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGlkID09
IEtKUzo6SFRNTEVsZW1lbnQ6OkZvcm1SZXNldCkgewotICAgICAgICBmb3JtLnJlc2V0KCk7Ci0g
ICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKLSAgICAgIH0KKyAgICBpZiAoIXRoaXNPYmouaW5o
ZXJpdHMoJktKUzo6SFRNTEVsZW1lbnQ6OmluZm8pKSB7CisgICAgICAgIE9iamVjdCBlcnIgPSBF
cnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsKKyAgICAgICAgZXhlYy0+c2V0RXhjZXB0aW9u
KGVycik7CisgICAgICAgIHJldHVybiBlcnI7CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2Ug
SURfU0VMRUNUOiB7Ci0gICAgICBIVE1MU2VsZWN0RWxlbWVudEltcGwgJnNlbGVjdCA9IHN0YXRp
Y19jYXN0PEhUTUxTZWxlY3RFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIGlmIChpZCA9
PSBLSlM6OkhUTUxFbGVtZW50OjpTZWxlY3RBZGQpIHsKLSAgICAgICAgc2VsZWN0LmFkZCh0b0hU
TUxFbGVtZW50KGFyZ3NbMF0pLCB0b0hUTUxFbGVtZW50KGFyZ3NbMV0pKTsKLSAgICAgICAgcmV0
dXJuIFVuZGVmaW5lZCgpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1M
RWxlbWVudDo6U2VsZWN0UmVtb3ZlKSB7Ci0gICAgICAgIHNlbGVjdC5yZW1vdmUoaW50KGFyZ3Nb
MF0udG9OdW1iZXIoZXhlYykpKTsKLSAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwotICAgICAg
fQotICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6U2VsZWN0Qmx1cikgewot
ICAgICAgICBzZWxlY3QuYmx1cigpOwotICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAg
ICB9Ci0gICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpTZWxlY3RGb2N1cykg
ewotICAgICAgICBzZWxlY3QuZm9jdXMoKTsKLSAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwot
ICAgICAgfQorICAgIGtkRGVidWcoKSA8PCAiS0pTOjpIVE1MRWxlbWVudEZ1bmN0aW9uOjp0cnlD
YWxsICIgPDwgZW5kbDsKKyAgICBET01FeGNlcHRpb25UcmFuc2xhdG9yIGV4Y2VwdGlvbihleGVj
KTsKKyAgICBIVE1MRWxlbWVudEltcGwgJmVsZW1lbnQgPSAqc3RhdGljX2Nhc3Q8SFRNTEVsZW1l
bnRJbXBsICo+KHN0YXRpY19jYXN0PEhUTUxFbGVtZW50ICo+KHRoaXNPYmouaW1wKCkpLT5pbXBs
KCkpOworCisgICAgaWYgKGVsZW1lbnQuaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6Zm9ybSgpKSkg
eworICAgICAgICBIVE1MRm9ybUVsZW1lbnRJbXBsICZmb3JtID0gc3RhdGljX2Nhc3Q8SFRNTEZv
cm1FbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICAgICAgaWYgKGlkID09IEtKUzo6SFRNTEVs
ZW1lbnQ6OkZvcm1TdWJtaXQpIHsKKyAgICAgICAgICAgIGZvcm0uc3VibWl0KCk7CisgICAgICAg
ICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoaWQg
PT0gS0pTOjpIVE1MRWxlbWVudDo6Rm9ybVJlc2V0KSB7CisgICAgICAgICAgICBmb3JtLnJlc2V0
KCk7CisgICAgICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CisgICAgICAgIH0KICAgICB9Ci0g
ICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9JTlBVVDogewotICAgICAgSFRNTElucHV0RWxlbWVudElt
cGwgJmlucHV0ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7
Ci0gICAgICBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6SW5wdXRCbHVyKSB7Ci0gICAgICAg
IGlucHV0LmJsdXIoKTsKLSAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwotICAgICAgfQotICAg
ICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6SW5wdXRGb2N1cykgewotICAgICAg
ICBpbnB1dC5mb2N1cygpOwotICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9Ci0g
ICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpJbnB1dFNlbGVjdCkgewotICAg
ICAgICBpbnB1dC5zZWxlY3QoKTsKLSAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwotICAgICAg
fQotICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6SW5wdXRDbGljaykgewot
ICAgICAgICBpbnB1dC5jbGljaygpOwotICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAg
ICB9CisgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpzZWxlY3Qo
KSkpIHsKKyAgICAgICAgSFRNTFNlbGVjdEVsZW1lbnRJbXBsICZzZWxlY3QgPSBzdGF0aWNfY2Fz
dDxIVE1MU2VsZWN0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgICAgIGlmIChpZCA9PSBL
SlM6OkhUTUxFbGVtZW50OjpTZWxlY3RBZGQpIHsKKyAgICAgICAgICAgIHNlbGVjdC5hZGQodG9I
VE1MRWxlbWVudChhcmdzWzBdKSwgdG9IVE1MRWxlbWVudChhcmdzWzFdKSk7CisgICAgICAgICAg
ICByZXR1cm4gVW5kZWZpbmVkKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoaWQgPT0g
S0pTOjpIVE1MRWxlbWVudDo6U2VsZWN0UmVtb3ZlKSB7CisgICAgICAgICAgICBzZWxlY3QucmVt
b3ZlKGludChhcmdzWzBdLnRvTnVtYmVyKGV4ZWMpKSk7CisgICAgICAgICAgICByZXR1cm4gVW5k
ZWZpbmVkKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxl
bWVudDo6U2VsZWN0Qmx1cikgeworICAgICAgICAgICAgc2VsZWN0LmJsdXIoKTsKKyAgICAgICAg
ICAgIHJldHVybiBVbmRlZmluZWQoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChpZCA9
PSBLSlM6OkhUTUxFbGVtZW50OjpTZWxlY3RGb2N1cykgeworICAgICAgICAgICAgc2VsZWN0LmZv
Y3VzKCk7CisgICAgICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CisgICAgICAgIH0KICAgICB9
Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9MQUJFTDogewotICAgICAgSFRNTExhYmVsRWxlbWVu
dEltcGwgJmxhYmVsID0gc3RhdGljX2Nhc3Q8SFRNTExhYmVsRWxlbWVudEltcGwgJj4oZWxlbWVu
dCk7Ci0gICAgICAKLSAgICAgIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpMYWJlbEZvY3Vz
KSB7Ci0gICAgICAgICAgbGFiZWwuZm9jdXMoKTsKLSAgICAgICAgICByZXR1cm4gVW5kZWZpbmVk
KCk7Ci0gICAgICB9CisgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNMb2NhbE5hbWUoSFRNTE5hbWVz
OjppbnB1dCgpKSkgeworICAgICAgICBIVE1MSW5wdXRFbGVtZW50SW1wbCAmaW5wdXQgPSBzdGF0
aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICAgICAgaWYgKGlk
ID09IEtKUzo6SFRNTEVsZW1lbnQ6OklucHV0Qmx1cikgeworICAgICAgICAgICAgaW5wdXQuYmx1
cigpOworICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAgICAgICB9CisgICAgICAg
IGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OklucHV0Rm9jdXMpIHsKKyAgICAgICAg
ICAgIGlucHV0LmZvY3VzKCk7CisgICAgICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6SW5wdXRTZWxl
Y3QpIHsKKyAgICAgICAgICAgIGlucHV0LnNlbGVjdCgpOworICAgICAgICAgICAgcmV0dXJuIFVu
ZGVmaW5lZCgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVs
ZW1lbnQ6OklucHV0Q2xpY2spIHsKKyAgICAgICAgICAgIGlucHV0LmNsaWNrKCk7CisgICAgICAg
ICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CisgICAgICAgIH0KICAgICB9Ci0gICAgYnJlYWs7Ci0g
ICAgY2FzZSBJRF9MRUdFTkQ6IHsKLSAgICAgIEhUTUxMZWdlbmRFbGVtZW50SW1wbCAmbGVnZW5k
ID0gc3RhdGljX2Nhc3Q8SFRNTExlZ2VuZEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAg
ICAKLSAgICAgIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpMZWdlbmRGb2N1cykgewotICAg
ICAgICAgIGxlZ2VuZC5mb2N1cygpOwotICAgICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKLSAg
ICAgIH0KKyAgICBlbHNlIGlmIChlbGVtZW50Lmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmJ1dHRv
bigpKSkgeworICAgICAgICBIVE1MQnV0dG9uRWxlbWVudEltcGwgJmJ1dHRvbiA9IHN0YXRpY19j
YXN0PEhUTUxCdXR0b25FbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICAgICAgaWYgKGlkID09
IEtKUzo6SFRNTEVsZW1lbnQ6OkJ1dHRvbkJsdXIpIHsKKyAgICAgICAgICAgIGJ1dHRvbi5ibHVy
KCk7CisgICAgICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CisgICAgICAgIH0KKyAgICAgICAg
ZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6QnV0dG9uRm9jdXMpIHsKKyAgICAgICAg
ICAgIGJ1dHRvbi5mb2N1cygpOworICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAg
ICAgICB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfQlVUVE9OOiB7Ci0gICAgICBI
VE1MQnV0dG9uRWxlbWVudEltcGwgJmJ1dHRvbiA9IHN0YXRpY19jYXN0PEhUTUxCdXR0b25FbGVt
ZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIAotICAgICAgaWYgKGlkID09IEtKUzo6SFRNTEVs
ZW1lbnQ6OkJ1dHRvbkJsdXIpIHsKLSAgICAgICAgYnV0dG9uLmJsdXIoKTsKLSAgICAgICAgcmV0
dXJuIFVuZGVmaW5lZCgpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1M
RWxlbWVudDo6QnV0dG9uRm9jdXMpIHsKLSAgICAgICAgYnV0dG9uLmZvY3VzKCk7Ci0gICAgICAg
IHJldHVybiBVbmRlZmluZWQoKTsKLSAgICAgIH0KKyAgICBlbHNlIGlmIChlbGVtZW50Lmhhc0xv
Y2FsTmFtZShIVE1MTmFtZXM6OmxhYmVsKCkpKSB7CisgICAgICAgIEhUTUxMYWJlbEVsZW1lbnRJ
bXBsICZsYWJlbCA9IHN0YXRpY19jYXN0PEhUTUxMYWJlbEVsZW1lbnRJbXBsICY+KGVsZW1lbnQp
OworICAgICAgICBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6TGFiZWxGb2N1cykgeworICAg
ICAgICAgICAgbGFiZWwuZm9jdXMoKTsKKyAgICAgICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsK
KyAgICAgICAgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX1RFWFRBUkVBOiB7Ci0g
ICAgICBIVE1MVGV4dEFyZWFFbGVtZW50SW1wbCAmdGV4dGFyZWEgPSBzdGF0aWNfY2FzdDxIVE1M
VGV4dEFyZWFFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIGlmIChpZCA9PSBLSlM6OkhU
TUxFbGVtZW50OjpUZXh0QXJlYUJsdXIpIHsKLSAgICAgICAgdGV4dGFyZWEuYmx1cigpOwotICAg
ICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChpZCA9PSBL
SlM6OkhUTUxFbGVtZW50OjpUZXh0QXJlYUZvY3VzKSB7Ci0gICAgICAgIHRleHRhcmVhLmZvY3Vz
KCk7Ci0gICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYg
KGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRleHRBcmVhU2VsZWN0KSB7Ci0gICAgICAgIHRleHRh
cmVhLnNlbGVjdCgpOwotICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9CisgICAg
ZWxzZSBpZiAoZWxlbWVudC5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpsZWdlbmQoKSkpIHsKKyAg
ICAgICAgSFRNTExlZ2VuZEVsZW1lbnRJbXBsICZsZWdlbmQgPSBzdGF0aWNfY2FzdDxIVE1MTGVn
ZW5kRWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgICAgIGlmIChpZCA9PSBLSlM6OkhUTUxF
bGVtZW50OjpMZWdlbmRGb2N1cykgeworICAgICAgICAgICAgbGVnZW5kLmZvY3VzKCk7CisgICAg
ICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CisgICAgICAgIH0KICAgICB9Ci0gICAgYnJlYWs7
Ci0gICAgY2FzZSBJRF9BOiB7Ci0gICAgICBIVE1MQW5jaG9yRWxlbWVudEltcGwgJmFuY2hvciA9
IHN0YXRpY19jYXN0PEhUTUxBbmNob3JFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIGlm
IChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpBbmNob3JCbHVyKSB7Ci0gICAgICAgIGFuY2hvci5i
bHVyKCk7Ci0gICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKLSAgICAgIH0KLSAgICAgIGVsc2Ug
aWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OkFuY2hvckZvY3VzKSB7Ci0gICAgICAgIGFuY2hv
ci5mb2N1cygpOwotICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9IAotICAgICAg
ZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6QW5jaG9yVG9TdHJpbmcpIHsKLQlyZXR1
cm4gU3RyaW5nKHRoaXNPYmoudG9TdHJpbmcoZXhlYykpOwotICAgICAgfQorICAgIGVsc2UgaWYg
KGVsZW1lbnQuaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dGV4dGFyZWEoKSkpIHsKKyAgICAgICAg
SFRNTFRleHRBcmVhRWxlbWVudEltcGwgJnRleHRhcmVhID0gc3RhdGljX2Nhc3Q8SFRNTFRleHRB
cmVhRWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgICAgIGlmIChpZCA9PSBLSlM6OkhUTUxF
bGVtZW50OjpUZXh0QXJlYUJsdXIpIHsKKyAgICAgICAgICAgIHRleHRhcmVhLmJsdXIoKTsKKyAg
ICAgICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlm
IChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUZXh0QXJlYUZvY3VzKSB7CisgICAgICAgICAgICB0
ZXh0YXJlYS5mb2N1cygpOworICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAgICAg
ICB9CisgICAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRleHRBcmVhU2Vs
ZWN0KSB7CisgICAgICAgICAgICB0ZXh0YXJlYS5zZWxlY3QoKTsKKyAgICAgICAgICAgIHJldHVy
biBVbmRlZmluZWQoKTsKKyAgICAgICAgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElE
X1RBQkxFOiB7Ci0gICAgICBIVE1MVGFibGVFbGVtZW50SW1wbCAmdGFibGUgPSBzdGF0aWNfY2Fz
dDxIVE1MVGFibGVFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIGlmIChpZCA9PSBLSlM6
OkhUTUxFbGVtZW50OjpUYWJsZUNyZWF0ZVRIZWFkKQotICAgICAgICByZXR1cm4gZ2V0RE9NTm9k
ZShleGVjLHRhYmxlLmNyZWF0ZVRIZWFkKCkpOwotICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpI
VE1MRWxlbWVudDo6VGFibGVEZWxldGVUSGVhZCkgewotICAgICAgICB0YWJsZS5kZWxldGVUSGVh
ZCgpOwotICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlm
IChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUYWJsZUNyZWF0ZVRGb290KQotICAgICAgICByZXR1
cm4gZ2V0RE9NTm9kZShleGVjLHRhYmxlLmNyZWF0ZVRGb290KCkpOwotICAgICAgZWxzZSBpZiAo
aWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6VGFibGVEZWxldGVURm9vdCkgewotICAgICAgICB0YWJs
ZS5kZWxldGVURm9vdCgpOwotICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9Ci0g
ICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUYWJsZUNyZWF0ZUNhcHRpb24p
Ci0gICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsdGFibGUuY3JlYXRlQ2FwdGlvbigpKTsK
LSAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRhYmxlRGVsZXRlQ2FwdGlv
bikgewotICAgICAgICB0YWJsZS5kZWxldGVDYXB0aW9uKCk7Ci0gICAgICAgIHJldHVybiBVbmRl
ZmluZWQoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6
OlRhYmxlSW5zZXJ0Um93KQotICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLHRhYmxlLmlu
c2VydFJvdyhhcmdzWzBdLnRvSW50MzIoZXhlYyksIGV4Y2VwdGlvbikpOwotICAgICAgZWxzZSBp
ZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6VGFibGVEZWxldGVSb3cpIHsKLSAgICAgICAgdGFi
bGUuZGVsZXRlUm93KGFyZ3NbMF0udG9JbnQzMihleGVjKSwgZXhjZXB0aW9uKTsKLSAgICAgICAg
cmV0dXJuIFVuZGVmaW5lZCgpOwotICAgICAgfQorICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFzTG9j
YWxOYW1lKEhUTUxOYW1lczo6YSgpKSkgeworICAgICAgICBIVE1MQW5jaG9yRWxlbWVudEltcGwg
JmFuY2hvciA9IHN0YXRpY19jYXN0PEhUTUxBbmNob3JFbGVtZW50SW1wbCAmPihlbGVtZW50KTsK
KyAgICAgICAgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OkFuY2hvckJsdXIpIHsKKyAgICAg
ICAgICAgIGFuY2hvci5ibHVyKCk7CisgICAgICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6QW5jaG9y
Rm9jdXMpIHsKKyAgICAgICAgICAgIGFuY2hvci5mb2N1cygpOworICAgICAgICAgICAgcmV0dXJu
IFVuZGVmaW5lZCgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRN
TEVsZW1lbnQ6OkFuY2hvclRvU3RyaW5nKQorICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0aGlz
T2JqLnRvU3RyaW5nKGV4ZWMpKTsKICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9USEVB
RDoKLSAgICBjYXNlIElEX1RCT0RZOgotICAgIGNhc2UgSURfVEZPT1Q6IHsKLSAgICAgIEhUTUxU
YWJsZVNlY3Rpb25FbGVtZW50SW1wbCAmdGFibGVTZWN0aW9uID0gc3RhdGljX2Nhc3Q8SFRNTFRh
YmxlU2VjdGlvbkVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgaWYgKGlkID09IEtKUzo6
SFRNTEVsZW1lbnQ6OlRhYmxlU2VjdGlvbkluc2VydFJvdykKLSAgICAgICAgcmV0dXJuIGdldERP
TU5vZGUoZXhlYywgdGFibGVTZWN0aW9uLmluc2VydFJvdyhhcmdzWzBdLnRvSW50MzIoZXhlYyks
IGV4Y2VwdGlvbikpOwotICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6VGFi
bGVTZWN0aW9uRGVsZXRlUm93KSB7Ci0gICAgICAgIHRhYmxlU2VjdGlvbi5kZWxldGVSb3coYXJn
c1swXS50b0ludDMyKGV4ZWMpLCBleGNlcHRpb24pOwotICAgICAgICByZXR1cm4gVW5kZWZpbmVk
KCk7Ci0gICAgICB9CisgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNMb2NhbE5hbWUoSFRNTE5hbWVz
Ojp0YWJsZSgpKSkgeworICAgICAgICBIVE1MVGFibGVFbGVtZW50SW1wbCAmdGFibGUgPSBzdGF0
aWNfY2FzdDxIVE1MVGFibGVFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICAgICAgaWYgKGlk
ID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRhYmxlQ3JlYXRlVEhlYWQpCisgICAgICAgICAgICByZXR1
cm4gZ2V0RE9NTm9kZShleGVjLHRhYmxlLmNyZWF0ZVRIZWFkKCkpOworICAgICAgICBlbHNlIGlm
IChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUYWJsZURlbGV0ZVRIZWFkKSB7CisgICAgICAgICAg
ICB0YWJsZS5kZWxldGVUSGVhZCgpOworICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwor
ICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRhYmxl
Q3JlYXRlVEZvb3QpCisgICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLHRhYmxlLmNy
ZWF0ZVRGb290KCkpOworICAgICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpU
YWJsZURlbGV0ZVRGb290KSB7CisgICAgICAgICAgICB0YWJsZS5kZWxldGVURm9vdCgpOworICAg
ICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYg
KGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRhYmxlQ3JlYXRlQ2FwdGlvbikKKyAgICAgICAgICAg
IHJldHVybiBnZXRET01Ob2RlKGV4ZWMsdGFibGUuY3JlYXRlQ2FwdGlvbigpKTsKKyAgICAgICAg
ZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6VGFibGVEZWxldGVDYXB0aW9uKSB7Cisg
ICAgICAgICAgICB0YWJsZS5kZWxldGVDYXB0aW9uKCk7CisgICAgICAgICAgICByZXR1cm4gVW5k
ZWZpbmVkKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxl
bWVudDo6VGFibGVJbnNlcnRSb3cpCisgICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVj
LHRhYmxlLmluc2VydFJvdyhhcmdzWzBdLnRvSW50MzIoZXhlYyksIGV4Y2VwdGlvbikpOworICAg
ICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUYWJsZURlbGV0ZVJvdykgewor
ICAgICAgICAgICAgdGFibGUuZGVsZXRlUm93KGFyZ3NbMF0udG9JbnQzMihleGVjKSwgZXhjZXB0
aW9uKTsKKyAgICAgICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKKyAgICAgICAgfQogICAgIH0K
LSAgICBicmVhazsKLSAgICBjYXNlIElEX1RSOiB7Ci0gICAgICBIVE1MVGFibGVSb3dFbGVtZW50
SW1wbCAmdGFibGVSb3cgPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVSb3dFbGVtZW50SW1wbCAmPihl
bGVtZW50KTsKLSAgICAgIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUYWJsZVJvd0luc2Vy
dENlbGwpCi0gICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsdGFibGVSb3cuaW5zZXJ0Q2Vs
bChhcmdzWzBdLnRvSW50MzIoZXhlYyksIGV4Y2VwdGlvbikpOwotICAgICAgZWxzZSBpZiAoaWQg
PT0gS0pTOjpIVE1MRWxlbWVudDo6VGFibGVSb3dEZWxldGVDZWxsKSB7Ci0gICAgICAgIHRhYmxl
Um93LmRlbGV0ZUNlbGwoYXJnc1swXS50b0ludDMyKGV4ZWMpLCBleGNlcHRpb24pOwotICAgICAg
ICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9CisgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNM
b2NhbE5hbWUoSFRNTE5hbWVzOjp0aGVhZCgpKSB8fAorICAgICAgICAgICAgIGVsZW1lbnQuaGFz
TG9jYWxOYW1lKEhUTUxOYW1lczo6dGJvZHkoKSkgfHwKKyAgICAgICAgICAgICBlbGVtZW50Lmhh
c0xvY2FsTmFtZShIVE1MTmFtZXM6OnRmb290KCkpKSB7CisgICAgICAgIEhUTUxUYWJsZVNlY3Rp
b25FbGVtZW50SW1wbCAmdGFibGVTZWN0aW9uID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlU2VjdGlv
bkVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgICAgICBpZiAoaWQgPT0gS0pTOjpIVE1MRWxl
bWVudDo6VGFibGVTZWN0aW9uSW5zZXJ0Um93KQorICAgICAgICAgICAgcmV0dXJuIGdldERPTU5v
ZGUoZXhlYywgdGFibGVTZWN0aW9uLmluc2VydFJvdyhhcmdzWzBdLnRvSW50MzIoZXhlYyksIGV4
Y2VwdGlvbikpOworICAgICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUYWJs
ZVNlY3Rpb25EZWxldGVSb3cpIHsKKyAgICAgICAgICAgIHRhYmxlU2VjdGlvbi5kZWxldGVSb3co
YXJnc1swXS50b0ludDMyKGV4ZWMpLCBleGNlcHRpb24pOworICAgICAgICAgICAgcmV0dXJuIFVu
ZGVmaW5lZCgpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFzTG9j
YWxOYW1lKEhUTUxOYW1lczo6dHIoKSkpIHsKKyAgICAgICAgSFRNTFRhYmxlUm93RWxlbWVudElt
cGwgJnRhYmxlUm93ID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlUm93RWxlbWVudEltcGwgJj4oZWxl
bWVudCk7CisgICAgICAgIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUYWJsZVJvd0luc2Vy
dENlbGwpCisgICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLHRhYmxlUm93Lmluc2Vy
dENlbGwoYXJnc1swXS50b0ludDMyKGV4ZWMpLCBleGNlcHRpb24pKTsKKyAgICAgICAgZWxzZSBp
ZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6VGFibGVSb3dEZWxldGVDZWxsKSB7CisgICAgICAg
ICAgICB0YWJsZVJvdy5kZWxldGVDZWxsKGFyZ3NbMF0udG9JbnQzMihleGVjKSwgZXhjZXB0aW9u
KTsKKyAgICAgICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKKyAgICAgICAgfQogICAgIH0KLSAg
ICBjYXNlIElEX01BUlFVRUU6IHsKKyAgICBlbHNlIGlmIChlbGVtZW50Lmhhc0xvY2FsTmFtZShI
VE1MTmFtZXM6Om1hcnF1ZWUoKSkpIHsKICAgICAgICAgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1l
bnQ6Ok1hcnF1ZWVTdGFydCAmJiBlbGVtZW50LnJlbmRlcmVyKCkgJiYgCiAgICAgICAgICAgICBl
bGVtZW50LnJlbmRlcmVyKCktPmxheWVyKCkgJiYKICAgICAgICAgICAgIGVsZW1lbnQucmVuZGVy
ZXIoKS0+bGF5ZXIoKS0+bWFycXVlZSgpKSB7CkBAIC0yMzA1LDkgKzI0NDYsOSBAQCBWYWx1ZSBL
SlM6OkhUTUxFbGVtZW50RnVuY3Rpb246OnRyeUNhbGwoCiAgICAgICAgICAgICBlbGVtZW50LnJl
bmRlcmVyKCktPmxheWVyKCktPm1hcnF1ZWUoKS0+c3RvcCgpOwogICAgICAgICAgICAgcmV0dXJu
IFVuZGVmaW5lZCgpOwogICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBjYXNl
IElEX0NBTlZBUzogeworI2lmIEFQUExFX0NIQU5HRVMKKyAgICBlbHNlIGlmIChlbGVtZW50Lmhh
c0xvY2FsTmFtZShIVE1MTmFtZXM6OmNhbnZhcygpKSkgewogICAgICAgICBpZiAoaWQgPT0gS0pT
OjpIVE1MRWxlbWVudDo6R2V0Q29udGV4dCkgewogICAgICAgICAgICAgaWYgKGFyZ3Muc2l6ZSgp
ID09IDAgfHwgKGFyZ3Muc2l6ZSgpID09IDEgJiYgYXJnc1swXS50b1N0cmluZyhleGVjKS5xc3Ry
aW5nKCkubG93ZXIoKSA9PSAiMmQiKSkgewogICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3Qo
bmV3IENvbnRleHQyRCgmZWxlbWVudCkpOwpAQCAtMjMxNSw3MzggKzI0NTYsNzU2IEBAIFZhbHVl
IEtKUzo6SFRNTEVsZW1lbnRGdW5jdGlvbjo6dHJ5Q2FsbCgKICAgICAgICAgICAgIHJldHVybiBV
bmRlZmluZWQoKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKLSAgICBicmVhazsKLSAgfQorI2Vu
ZGlmCiAKLSAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0K
IAogdm9pZCBLSlM6OkhUTUxFbGVtZW50Ojp0cnlQdXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJ
ZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIGNvbnN0IFZhbHVlJiB2YWx1ZSwgaW50IGF0dHIpCiB7
CiAjaWZkZWYgS0pTX1ZFUkJPU0UKLSAgRE9NOjpET01TdHJpbmcgc3RyID0gdmFsdWUuaXNBKE51
bGxUeXBlKSA/IERPTTo6RE9NU3RyaW5nKCkgOiB2YWx1ZS50b1N0cmluZyhleGVjKS5zdHJpbmco
KTsKKyAgICBET006OkRPTVN0cmluZyBzdHIgPSB2YWx1ZS5pc0EoTnVsbFR5cGUpID8gRE9NOjpE
T01TdHJpbmcoKSA6IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpOwogI2VuZGlmCi0gIEhU
TUxFbGVtZW50SW1wbCAmZWxlbWVudCA9ICpzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwgKj4o
aW1wbCgpKTsKKyAgICBIVE1MRWxlbWVudEltcGwgJmVsZW1lbnQgPSAqc3RhdGljX2Nhc3Q8SFRN
TEVsZW1lbnRJbXBsICo+KGltcGwoKSk7CiAjaWZkZWYgS0pTX1ZFUkJPU0UKLSAga2REZWJ1Zyg2
MDcwKSA8PCAiS0pTOjpIVE1MRWxlbWVudDo6dHJ5UHV0ICIgPDwgcHJvcGVydHlOYW1lLnFzdHJp
bmcoKQotICAgICAgICAgICAgICAgIDw8ICIgdGhpc1RhZz0iIDw8IGVsZW1lbnQudGFnTmFtZSgp
LnN0cmluZygpCi0gICAgICAgICAgICAgICAgPDwgIiBzdHI9IiA8PCBzdHIuc3RyaW5nKCkgPDwg
ZW5kbDsKKyAgICBrZERlYnVnKDYwNzApIDw8ICJLSlM6OkhUTUxFbGVtZW50Ojp0cnlQdXQgIiA8
PCBwcm9wZXJ0eU5hbWUucXN0cmluZygpCisgICAgICAgICAgICAgICAgICA8PCAiIHRoaXNUYWc9
IiA8PCBlbGVtZW50LnRhZ05hbWUoKS5zdHJpbmcoKQorICAgICAgICAgICAgICAgICAgPDwgIiBz
dHI9IiA8PCBzdHIuc3RyaW5nKCkgPDwgZW5kbDsKICNlbmRpZgotICAvLyBGaXJzdCBsb29rIGF0
IGR5bmFtaWMgcHJvcGVydGllcwotICBzd2l0Y2ggKGVsZW1lbnQuaWQoKSkgewotICAgIGNhc2Ug
SURfU0VMRUNUOiB7Ci0gICAgICBIVE1MU2VsZWN0RWxlbWVudEltcGwgJnNlbGVjdCA9IHN0YXRp
Y19jYXN0PEhUTUxTZWxlY3RFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIGJvb2wgb2s7
Ci0gICAgICAvKnVpbnQgdSA9Ki8gcHJvcGVydHlOYW1lLnRvVUxvbmcoJm9rKTsKLSAgICAgIGlm
IChvaykgewotICAgICAgICBPYmplY3QgY29sbCA9IE9iamVjdDo6ZHluYW1pY0Nhc3QoIGdldFNl
bGVjdEhUTUxDb2xsZWN0aW9uKGV4ZWMsIHNlbGVjdC5vcHRpb25zSFRNTENvbGxlY3Rpb24oKS5n
ZXQoKSwgJnNlbGVjdCkgKTsKLSAgICAgICAgaWYgKCAhY29sbC5pc051bGwoKSApCi0gICAgICAg
ICAgY29sbC5wdXQoZXhlYyxwcm9wZXJ0eU5hbWUsdmFsdWUpOwotICAgICAgICByZXR1cm47Ci0g
ICAgICB9CisgICAgLy8gRmlyc3QgbG9vayBhdCBkeW5hbWljIHByb3BlcnRpZXMKKyAgICBpZiAo
ZWxlbWVudC5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpzZWxlY3QoKSkpIHsKKyAgICAgICAgSFRN
TFNlbGVjdEVsZW1lbnRJbXBsICZzZWxlY3QgPSBzdGF0aWNfY2FzdDxIVE1MU2VsZWN0RWxlbWVu
dEltcGwgJj4oZWxlbWVudCk7CisgICAgICAgIGJvb2wgb2s7CisgICAgICAgIC8qdWludCB1ID0q
LyBwcm9wZXJ0eU5hbWUudG9VTG9uZygmb2spOworICAgICAgICBpZiAob2spIHsKKyAgICAgICAg
ICAgIE9iamVjdCBjb2xsID0gT2JqZWN0OjpkeW5hbWljQ2FzdCggZ2V0U2VsZWN0SFRNTENvbGxl
Y3Rpb24oZXhlYywgc2VsZWN0Lm9wdGlvbnNIVE1MQ29sbGVjdGlvbigpLmdldCgpLCAmc2VsZWN0
KSApOworICAgICAgICAgICAgaWYgKCFjb2xsLmlzTnVsbCgpKQorICAgICAgICAgICAgICAgIGNv
bGwucHV0KGV4ZWMscHJvcGVydHlOYW1lLHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQogICAgIH0KICNpZiBBUFBMRV9DSEFOR0VTCi0gICAgY2FzZSBJRF9FTUJFRDoKLSAg
ICBjYXNlIElEX09CSkVDVDoKLSAgICBjYXNlIElEX0FQUExFVDogeworICAgIGVsc2UgaWYgKGVs
ZW1lbnQuaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6ZW1iZWQoKSkgfHwKKyAgICAgICAgICAgICBl
bGVtZW50Lmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9iamVjdCgpKSB8fAorICAgICAgICAgICAg
IGVsZW1lbnQuaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6YXBwbGV0KCkpKSB7CiAJVmFsdWUgcnVu
dGltZU9iamVjdCA9IGdldFJ1bnRpbWVPYmplY3QoZXhlYywmZWxlbWVudCk7CiAJaWYgKCFydW50
aW1lT2JqZWN0LmlzTnVsbCgpKSB7CiAJICAgIE9iamVjdEltcCAqaW1wID0gc3RhdGljX2Nhc3Q8
T2JqZWN0SW1wICo+KHJ1bnRpbWVPYmplY3QuaW1wKCkpOwotCSAgICBpZiAoaW1wLT5jYW5QdXQo
ZXhlYywgcHJvcGVydHlOYW1lKSkgeworCSAgICBpZiAoaW1wLT5jYW5QdXQoZXhlYywgcHJvcGVy
dHlOYW1lKSkKIAkJcmV0dXJuIGltcC0+cHV0IChleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKTsK
LQkgICAgfQogCX0KICAgICB9Ci0gICAgICBicmVhazsKICNlbmRpZgotICAgIGJyZWFrOwotICBk
ZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KIAotICBjb25zdCBIYXNoVGFibGUqIHRhYmxlID0g
Y2xhc3NJbmZvKCktPnByb3BIYXNoVGFibGU7IC8vIGdldCB0aGUgcmlnaHQgaGFzaHRhYmxlCi0g
IGNvbnN0IEhhc2hFbnRyeSogZW50cnkgPSBMb29rdXA6OmZpbmRFbnRyeSh0YWJsZSwgcHJvcGVy
dHlOYW1lKTsKLSAgaWYgKGVudHJ5KSB7Ci0gICAgaWYgKGVudHJ5LT5hdHRyICYgRnVuY3Rpb24p
IC8vIGZ1bmN0aW9uOiBwdXQgYXMgb3ZlcnJpZGUgcHJvcGVydHkKLSAgICB7Ci0gICAgICBPYmpl
Y3RJbXA6OnB1dChleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBhdHRyKTsKLSAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgZWxzZSBpZiAoKGVudHJ5LT5hdHRyICYgUmVhZE9ubHkpID09IDApIC8v
IGxldCBET01PYmplY3RMb29rdXBQdXQgcHJpbnQgdGhlIHdhcm5pbmcgaWYgbm90Ci0gICAgewot
ICAgICAgcHV0VmFsdWUoZXhlYywgZW50cnktPnZhbHVlLCB2YWx1ZSwgYXR0cik7Ci0gICAgICBy
ZXR1cm47CisgICAgY29uc3QgSGFzaFRhYmxlKiB0YWJsZSA9IGNsYXNzSW5mbygpLT5wcm9wSGFz
aFRhYmxlOyAvLyBnZXQgdGhlIHJpZ2h0IGhhc2h0YWJsZQorICAgIGNvbnN0IEhhc2hFbnRyeSog
ZW50cnkgPSBMb29rdXA6OmZpbmRFbnRyeSh0YWJsZSwgcHJvcGVydHlOYW1lKTsKKyAgICBpZiAo
ZW50cnkpIHsKKyAgICAgICAgaWYgKGVudHJ5LT5hdHRyICYgRnVuY3Rpb24pIHsgLy8gZnVuY3Rp
b246IHB1dCBhcyBvdmVycmlkZSBwcm9wZXJ0eQorICAgICAgICAgICAgT2JqZWN0SW1wOjpwdXQo
ZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgYXR0cik7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoKGVudHJ5LT5hdHRyICYgUmVhZE9ubHkpID09IDAp
IHsgLy8gbGV0IERPTU9iamVjdExvb2t1cFB1dCBwcmludCB0aGUgd2FybmluZyBpZiBub3QKKyAg
ICAgICAgICAgIHB1dFZhbHVlKGV4ZWMsIGVudHJ5LT52YWx1ZSwgdmFsdWUsIGF0dHIpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgfQotICB9Ci0gIERPTU9iamVjdExvb2t1
cFB1dDxLSlM6OkhUTUxFbGVtZW50LCBET01FbGVtZW50PihleGVjLCBwcm9wZXJ0eU5hbWUsIHZh
bHVlLCBhdHRyLCAmSFRNTEVsZW1lbnRUYWJsZSwgdGhpcyk7CisKKyAgICBET01PYmplY3RMb29r
dXBQdXQ8S0pTOjpIVE1MRWxlbWVudCwgRE9NRWxlbWVudD4oZXhlYywgcHJvcGVydHlOYW1lLCB2
YWx1ZSwgYXR0ciwgJkhUTUxFbGVtZW50VGFibGUsIHRoaXMpOwogfQogCi12b2lkIEhUTUxFbGVt
ZW50OjpwdXRWYWx1ZShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZh
bHVlLCBpbnQpCit2b2lkIEhUTUxFbGVtZW50OjpodG1sU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIp
CiB7Ci0gIERPTUV4Y2VwdGlvblRyYW5zbGF0b3IgZXhjZXB0aW9uKGV4ZWMpOwotICBET006OkRP
TVN0cmluZyBzdHIgPSB2YWx1ZS5pc0EoTnVsbFR5cGUpID8gRE9NOjpET01TdHJpbmcoKSA6IHZh
bHVlLnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpOwotICBIVE1MRWxlbWVudEltcGwgJmVsZW1lbnQg
PSAqc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KGltcGwoKSk7Ci0jaWZkZWYgS0pTX1ZF
UkJPU0UKLSAga2REZWJ1Zyg2MDcwKSA8PCAiS0pTOjpIVE1MRWxlbWVudDo6cHV0VmFsdWUgIgot
ICAgICAgICAgICAgICAgIDw8ICIgdGhpc1RhZz0iIDw8IGVsZW1lbnQudGFnTmFtZSgpLnN0cmlu
ZygpCi0gICAgICAgICAgICAgICAgPDwgIiB0b2tlbj0iIDw8IHRva2VuIDw8IGVuZGw7Ci0jZW5k
aWYKKyAgICBIVE1MSGVhZEVsZW1lbnRJbXBsICZoZWFkID0gKnN0YXRpY19jYXN0PEhUTUxIZWFk
RWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIGlmICh0b2tlbiA9PSBIZWFkUHJvZmlsZSkgCisg
ICAgICAgIGhlYWQuc2V0UHJvZmlsZShzdHIpOworfQogCi0gIHN3aXRjaCAoZWxlbWVudC5pZCgp
KSB7Ci0gIGNhc2UgSURfSFRNTDogewotICAgICAgSFRNTEh0bWxFbGVtZW50SW1wbCAmaHRtbCA9
IHN0YXRpY19jYXN0PEhUTUxIdG1sRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0
Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIEh0bWxWZXJzaW9uOiAgICAgICAgIHsgaHRtbC5zZXRW
ZXJzaW9uKHN0cik7IHJldHVybjsgfQotICAgICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElE
X0hFQUQ6IHsKLSAgICBIVE1MSGVhZEVsZW1lbnRJbXBsICZoZWFkID0gc3RhdGljX2Nhc3Q8SFRN
TEhlYWRFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKK3ZvaWQgSFRNTEVsZW1lbnQ6OmhlYWRTZXR0
ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3Qg
RE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MSGVhZEVsZW1lbnRJbXBsICZoZWFkID0g
KnN0YXRpY19jYXN0PEhUTUxIZWFkRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIGlmICh0b2tl
biA9PSBIZWFkUHJvZmlsZSkgCisgICAgICAgIGhlYWQuc2V0UHJvZmlsZShzdHIpOworfQorCit2
b2lkIEhUTUxFbGVtZW50OjpsaW5rU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBj
b25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRN
TExpbmtFbGVtZW50SW1wbCAmbGluayA9ICpzdGF0aWNfY2FzdDxIVE1MTGlua0VsZW1lbnRJbXBs
Kj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBIZWFkUHJvZmlsZTog
ICAgICAgICB7IGhlYWQuc2V0UHJvZmlsZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBM
aW5rRGlzYWJsZWQ6ICAgICAgICB7IGxpbmsuc2V0RGlzYWJsZWQodmFsdWUudG9Cb29sZWFuKGV4
ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgTGlua0NoYXJzZXQ6ICAgICAgICAgeyBsaW5r
LnNldENoYXJzZXQoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgTGlua0hyZWY6ICAgICAg
ICAgICAgeyBsaW5rLnNldEhyZWYoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgTGlua0hy
ZWZMYW5nOiAgICAgICAgeyBsaW5rLnNldEhyZWZsYW5nKHN0cik7IHJldHVybjsgfQorICAgICAg
ICBjYXNlIExpbmtNZWRpYTogICAgICAgICAgIHsgbGluay5zZXRNZWRpYShzdHIpOyByZXR1cm47
IH0KKyAgICAgICAgY2FzZSBMaW5rUmVsOiAgICAgICAgICAgICB7IGxpbmsuc2V0UmVsKHN0cik7
IHJldHVybjsgfQorICAgICAgICBjYXNlIExpbmtSZXY6ICAgICAgICAgICAgIHsgbGluay5zZXRS
ZXYoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgTGlua1RhcmdldDogICAgICAgICAgeyBs
aW5rLnNldFRhcmdldChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBMaW5rVHlwZTogICAg
ICAgICAgICB7IGxpbmsuc2V0VHlwZShzdHIpOyByZXR1cm47IH0KICAgICB9Ci0gIH0KLSAgYnJl
YWs7Ci0gIGNhc2UgSURfTElOSzogewotICAgIEhUTUxMaW5rRWxlbWVudEltcGwgJmxpbmsgPSBz
dGF0aWNfY2FzdDxIVE1MTGlua0VsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgIHN3aXRjaCAo
dG9rZW4pIHsKLSAgICAgIGNhc2UgTGlua0Rpc2FibGVkOiAgICAgICAgeyBsaW5rLnNldERpc2Fi
bGVkKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBMaW5rQ2hh
cnNldDogICAgICAgICB7IGxpbmsuc2V0Q2hhcnNldChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNh
c2UgTGlua0hyZWY6ICAgICAgICAgICAgeyBsaW5rLnNldEhyZWYoc3RyKTsgcmV0dXJuOyB9Ci0g
ICAgICBjYXNlIExpbmtIcmVmTGFuZzogICAgICAgIHsgbGluay5zZXRIcmVmbGFuZyhzdHIpOyBy
ZXR1cm47IH0KLSAgICAgIGNhc2UgTGlua01lZGlhOiAgICAgICAgICAgeyBsaW5rLnNldE1lZGlh
KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBMaW5rUmVsOiAgICAgICAgICAgICB7IGxpbmsu
c2V0UmVsKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBMaW5rUmV2OiAgICAgICAgICAgICB7
IGxpbmsuc2V0UmV2KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBMaW5rVGFyZ2V0OiAgICAg
ICAgICB7IGxpbmsuc2V0VGFyZ2V0KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBMaW5rVHlw
ZTogICAgICAgICAgICB7IGxpbmsuc2V0VHlwZShzdHIpOyByZXR1cm47IH0KLSAgICAgIH0KLSAg
ICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9USVRMRTogewotICAgICAgSFRNTFRpdGxlRWxl
bWVudEltcGwgJnRpdGxlID0gc3RhdGljX2Nhc3Q8SFRNTFRpdGxlRWxlbWVudEltcGwgJj4oZWxl
bWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIFRpdGxlVGV4dDogICAg
ICAgICAgICAgICAgIHsgdGl0bGUuc2V0VGV4dChzdHIpOyByZXR1cm47IH0KLSAgICAgIH0KLSAg
ICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9NRVRBOiB7Ci0gICAgICBIVE1MTWV0YUVsZW1l
bnRJbXBsICZtZXRhID0gc3RhdGljX2Nhc3Q8SFRNTE1ldGFFbGVtZW50SW1wbCAmPihlbGVtZW50
KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgTWV0YUNvbnRlbnQ6ICAgICAg
ICAgeyBtZXRhLnNldENvbnRlbnQoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIE1ldGFIdHRw
RXF1aXY6ICAgICAgIHsgbWV0YS5zZXRIdHRwRXF1aXYoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBj
YXNlIE1ldGFOYW1lOiAgICAgICAgICAgIHsgbWV0YS5zZXROYW1lKHN0cik7IHJldHVybjsgfQot
ICAgICAgY2FzZSBNZXRhU2NoZW1lOiAgICAgICAgICB7IG1ldGEuc2V0U2NoZW1lKHN0cik7IHJl
dHVybjsgfQotICAgICAgfQotICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0JBU0U6IHsK
LSAgICAgIEhUTUxCYXNlRWxlbWVudEltcGwgJmJhc2UgPSBzdGF0aWNfY2FzdDxIVE1MQmFzZUVs
ZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgY2Fz
ZSBCYXNlSHJlZjogICAgICAgICAgICB7IGJhc2Uuc2V0SHJlZihzdHIpOyByZXR1cm47IH0KLSAg
ICAgIGNhc2UgQmFzZVRhcmdldDogICAgICAgICAgeyBiYXNlLnNldFRhcmdldChzdHIpOyByZXR1
cm47IH0KLSAgICAgIH0KLSAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9JU0lOREVYOiB7
Ci0gICAgICBIVE1MSXNJbmRleEVsZW1lbnRJbXBsICZpc2luZGV4ID0gc3RhdGljX2Nhc3Q8SFRN
TElzSW5kZXhFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsK
LSAgICAgIC8vIHJlYWQtb25seTogZm9ybQotICAgICAgY2FzZSBJc0luZGV4UHJvbXB0OiAgICAg
ICAgICAgICAgIHsgaXNpbmRleC5zZXRQcm9tcHQoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICB9Ci0g
ICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfU1RZTEU6IHsKLSAgICAgIEhUTUxTdHlsZUVs
ZW1lbnRJbXBsICZzdHlsZSA9IHN0YXRpY19jYXN0PEhUTUxTdHlsZUVsZW1lbnRJbXBsICY+KGVs
ZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgY2FzZSBTdHlsZURpc2FibGVk
OiAgICAgICAgeyBzdHlsZS5zZXREaXNhYmxlZCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1
cm47IH0KLSAgICAgIGNhc2UgU3R5bGVNZWRpYTogICAgICAgICAgIHsgc3R5bGUuc2V0TWVkaWEo
c3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFN0eWxlVHlwZTogICAgICAgICAgICB7IHN0eWxl
LnNldFR5cGUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICB9Ci0gICAgfQotICAgIGJyZWFrOwotICAg
IGNhc2UgSURfQk9EWTogewotICAgICAgSFRNTEJvZHlFbGVtZW50SW1wbCAmYm9keSA9IHN0YXRp
Y19jYXN0PEhUTUxCb2R5RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRv
a2VuKSB7Ci0gICAgICBjYXNlIEJvZHlBTGluazogICAgICAgICAgIHsgYm9keS5zZXRBTGluayhz
dHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQm9keUJhY2tncm91bmQ6ICAgICAgeyBib2R5LnNl
dEJhY2tncm91bmQoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEJvZHlCZ0NvbG9yOiAgICAg
ICAgIHsgYm9keS5zZXRCZ0NvbG9yKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBCb2R5TGlu
azogICAgICAgICAgICB7IGJvZHkuc2V0TGluayhzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2Ug
Qm9keVRleHQ6ICAgICAgICAgICAgeyBib2R5LnNldFRleHQoc3RyKTsgcmV0dXJuOyB9Ci0gICAg
ICBjYXNlIEJvZHlWTGluazogICAgICAgICAgIHsgYm9keS5zZXRWTGluayhzdHIpOyByZXR1cm47
IH0KLSAgICAgIGNhc2UgQm9keVNjcm9sbExlZnQ6Ci0gICAgICBjYXNlIEJvZHlTY3JvbGxUb3A6
IHsKLSAgICAgICAgICBRU2Nyb2xsVmlldyogc3ZpZXcgPSBib2R5Lm93bmVyRG9jdW1lbnQoKS0+
dmlldygpOwotICAgICAgICAgIGlmIChzdmlldykgewotICAgICAgICAgICAgICAvLyBVcGRhdGUg
dGhlIGRvY3VtZW50J3MgbGF5b3V0IGJlZm9yZSB3ZSBjb21wdXRlIHRoZXNlIGF0dHJpYnV0ZXMu
Ci0gICAgICAgICAgICAgIGlmIChEb2N1bWVudEltcGwqIGRvYyA9IGJvZHkuZ2V0RG9jdW1lbnQo
KSkKLSAgICAgICAgICAgICAgICAgIGRvYy0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxl
c2hlZXRzKCk7Ci0gICAgICAgICAgICAgIGlmICh0b2tlbiA9PSBCb2R5U2Nyb2xsTGVmdCkKLSAg
ICAgICAgICAgICAgICAgIHN2aWV3LT5zZXRDb250ZW50c1Bvcyh2YWx1ZS50b0ludDMyKGV4ZWMp
LCBzdmlldy0+Y29udGVudHNZKCkpOwotICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgICBzdmlldy0+c2V0Q29udGVudHNQb3Moc3ZpZXctPmNvbnRlbnRzWCgpLCB2YWx1ZS50b0lu
dDMyKGV4ZWMpKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0g
ICAgICB9Ci0gICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfRk9STTogewotICAgICAgSFRN
TEZvcm1FbGVtZW50SW1wbCAmZm9ybSA9IHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudEltcGwg
Jj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICAvLyByZWFkLW9ubHk6
IGVsZW1lbnRzCi0gICAgICAvLyByZWFkLW9ubHk6IGxlbmd0aAotICAgICAgY2FzZSBGb3JtTmFt
ZTogICAgICAgICAgICB7IGZvcm0uc2V0TmFtZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2Ug
Rm9ybUFjY2VwdENoYXJzZXQ6ICAgeyBmb3JtLnNldEFjY2VwdENoYXJzZXQoc3RyKTsgcmV0dXJu
OyB9Ci0gICAgICBjYXNlIEZvcm1BY3Rpb246ICAgICAgICAgIHsgZm9ybS5zZXRBY3Rpb24oc3Ry
KTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEZvcm1FbmNUeXBlOiAgICAgICAgIHsgZm9ybS5zZXRF
bmN0eXBlKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBGb3JtTWV0aG9kOiAgICAgICAgICB7
IGZvcm0uc2V0TWV0aG9kKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBGb3JtVGFyZ2V0OiAg
ICAgICAgICB7IGZvcm0uc2V0VGFyZ2V0KHN0cik7IHJldHVybjsgfQotICAgICAgfQotICAgIH0K
LSAgICBicmVhazsKLSAgICBjYXNlIElEX1NFTEVDVDogewotICAgICAgSFRNTFNlbGVjdEVsZW1l
bnRJbXBsICZzZWxlY3QgPSBzdGF0aWNfY2FzdDxIVE1MU2VsZWN0RWxlbWVudEltcGwgJj4oZWxl
bWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICAvLyByZWFkLW9ubHk6IHR5cGUK
LSAgICAgIGNhc2UgU2VsZWN0U2VsZWN0ZWRJbmRleDogICB7IHNlbGVjdC5zZXRTZWxlY3RlZElu
ZGV4KHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgU2VsZWN0VmFs
dWU6ICAgICAgICAgICB7IHNlbGVjdC5zZXRWYWx1ZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNh
c2UgU2VsZWN0TGVuZ3RoOiAgICAgICAgICB7IC8vIHJlYWQtb25seSBhY2NvcmRpbmcgdG8gdGhl
IE5TIHNwZWMsIGJ1dCB3ZWJwYWdlcyBuZWVkIGl0IHdyaXRlYWJsZQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QgY29sbCA9IE9iamVjdDo6ZHluYW1pY0Nh
c3QoIGdldFNlbGVjdEhUTUxDb2xsZWN0aW9uKGV4ZWMsIHNlbGVjdC5vcHRpb25zSFRNTENvbGxl
Y3Rpb24oKS5nZXQoKSwgJnNlbGVjdCkgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCAhY29sbC5pc051bGwoKSApCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29sbC5wdXQoZXhlYyxsZW5ndGhQcm9wZXJ0eU5hbWUsdmFs
dWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAvLyByZWFkLW9u
bHk6IGZvcm0KLSAgICAgIC8vIHJlYWQtb25seTogb3B0aW9ucwotICAgICAgY2FzZSBTZWxlY3RE
aXNhYmxlZDogICAgICAgIHsgc2VsZWN0LnNldERpc2FibGVkKHZhbHVlLnRvQm9vbGVhbihleGVj
KSk7IHJldHVybjsgfQotICAgICAgY2FzZSBTZWxlY3RNdWx0aXBsZTogICAgICAgIHsgc2VsZWN0
LnNldE11bHRpcGxlKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2Fz
ZSBTZWxlY3ROYW1lOiAgICAgICAgICAgIHsgc2VsZWN0LnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9
Ci0gICAgICBjYXNlIFNlbGVjdFNpemU6ICAgICAgICAgICAgeyBzZWxlY3Quc2V0U2l6ZSh2YWx1
ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFNlbGVjdFRhYkluZGV4OiAg
ICAgICAgeyBzZWxlY3Quc2V0VGFiSW5kZXgodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsg
fQotICAgICAgfQotICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX09QVEdST1VQOiB7Ci0g
ICAgICBIVE1MT3B0R3JvdXBFbGVtZW50SW1wbCAmb3B0Z3JvdXAgPSBzdGF0aWNfY2FzdDxIVE1M
T3B0R3JvdXBFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsK
LSAgICAgIGNhc2UgT3B0R3JvdXBEaXNhYmxlZDogICAgICAgIHsgb3B0Z3JvdXAuc2V0RGlzYWJs
ZWQodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIE9wdEdyb3Vw
TGFiZWw6ICAgICAgICAgICB7IG9wdGdyb3VwLnNldExhYmVsKHN0cik7IHJldHVybjsgfQotICAg
ICAgfQotICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX09QVElPTjogewotICAgICAgSFRN
TE9wdGlvbkVsZW1lbnRJbXBsICZvcHRpb24gPSBzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVu
dEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICAvLyByZWFk
LW9ubHk6IGZvcm0KLSAgICAgIGNhc2UgT3B0aW9uRGVmYXVsdFNlbGVjdGVkOiB7IG9wdGlvbi5z
ZXREZWZhdWx0U2VsZWN0ZWQodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAg
ICBjYXNlIE9wdGlvblRleHQ6ICAgICAgICAgICAgeyBvcHRpb24uc2V0VGV4dChzdHIsIGV4Y2Vw
dGlvbik7IHJldHVybjsgfQotICAgICAgLy8gcmVhZC1vbmx5OiBpbmRleAotICAgICAgY2FzZSBP
cHRpb25EaXNhYmxlZDogICAgICAgIHsgb3B0aW9uLnNldERpc2FibGVkKHZhbHVlLnRvQm9vbGVh
bihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBPcHRpb25MYWJlbDogICAgICAgICAgIHsg
b3B0aW9uLnNldExhYmVsKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBPcHRpb25TZWxlY3Rl
ZDogICAgICAgIHsgb3B0aW9uLnNldFNlbGVjdGVkKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJl
dHVybjsgfQotICAgICAgY2FzZSBPcHRpb25WYWx1ZTogICAgICAgICAgIHsgb3B0aW9uLnNldFZh
bHVlKHN0cik7IHJldHVybjsgfQotICAgICAgfQotICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNl
IElEX0lOUFVUOiB7Ci0gICAgICBIVE1MSW5wdXRFbGVtZW50SW1wbCAmaW5wdXQgPSBzdGF0aWNf
Y2FzdDxIVE1MSW5wdXRFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9r
ZW4pIHsKLSAgICAgIGNhc2UgSW5wdXREZWZhdWx0VmFsdWU6ICAgIHsgaW5wdXQuc2V0RGVmYXVs
dFZhbHVlKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBJbnB1dERlZmF1bHRDaGVja2VkOiAg
eyBpbnB1dC5zZXREZWZhdWx0Q2hlY2tlZCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47
IH0KLSAgICAgIC8vIHJlYWQtb25seTogZm9ybQotICAgICAgY2FzZSBJbnB1dEFjY2VwdDogICAg
ICAgICAgeyBpbnB1dC5zZXRBY2NlcHQoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElucHV0
QWNjZXNzS2V5OiAgICAgICB7IGlucHV0LnNldEFjY2Vzc0tleShzdHIpOyByZXR1cm47IH0KLSAg
ICAgIGNhc2UgSW5wdXRBbGlnbjogICAgICAgICAgIHsgaW5wdXQuc2V0QWxpZ24oc3RyKTsgcmV0
dXJuOyB9Ci0gICAgICBjYXNlIElucHV0QWx0OiAgICAgICAgICAgICB7IGlucHV0LnNldEFsdChz
dHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSW5wdXRDaGVja2VkOiAgICAgICAgIHsgaW5wdXQu
c2V0Q2hlY2tlZCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2Ug
SW5wdXREaXNhYmxlZDogICAgICAgIHsgaW5wdXQuc2V0RGlzYWJsZWQodmFsdWUudG9Cb29sZWFu
KGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElucHV0TWF4TGVuZ3RoOiAgICAgICB7IGlu
cHV0LnNldE1heExlbmd0aCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBj
YXNlIElucHV0TmFtZTogICAgICAgICAgICB7IGlucHV0LnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9
Ci0gICAgICBjYXNlIElucHV0UmVhZE9ubHk6ICAgICAgICB7IGlucHV0LnNldFJlYWRPbmx5KHZh
bHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBJbnB1dFNpemU6ICAg
ICAgICAgICAgeyBpbnB1dC5zZXRTaXplKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBJbnB1
dFNyYzogICAgICAgICAgICAgeyBpbnB1dC5zZXRTcmMoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBj
YXNlIElucHV0VGFiSW5kZXg6ICAgICAgICB7IGlucHV0LnNldFRhYkluZGV4KHZhbHVlLnRvSW50
MzIoZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSW5wdXRUeXBlOiAgICAgICAgICAgIHsg
aW5wdXQuc2V0VHlwZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSW5wdXRVc2VNYXA6ICAg
ICAgICAgIHsgaW5wdXQuc2V0VXNlTWFwKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBJbnB1
dFZhbHVlOiAgICAgICAgICAgeyBpbnB1dC5zZXRWYWx1ZShzdHIpOyByZXR1cm47IH0KLSAgICAg
IH0KLSAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9URVhUQVJFQTogewotICAgICAgSFRN
TFRleHRBcmVhRWxlbWVudEltcGwgJnRleHRhcmVhID0gc3RhdGljX2Nhc3Q8SFRNTFRleHRBcmVh
RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBj
YXNlIFRleHRBcmVhRGVmYXVsdFZhbHVlOiAgICB7IHRleHRhcmVhLnNldERlZmF1bHRWYWx1ZShz
dHIpOyByZXR1cm47IH0KLSAgICAgIC8vIHJlYWQtb25seTogZm9ybQotICAgICAgY2FzZSBUZXh0
QXJlYUFjY2Vzc0tleTogICAgICAgeyB0ZXh0YXJlYS5zZXRBY2Nlc3NLZXkoc3RyKTsgcmV0dXJu
OyB9Ci0gICAgICBjYXNlIFRleHRBcmVhQ29sczogICAgICAgICAgICB7IHRleHRhcmVhLnNldENv
bHModmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBUZXh0QXJlYURp
c2FibGVkOiAgICAgICAgeyB0ZXh0YXJlYS5zZXREaXNhYmxlZCh2YWx1ZS50b0Jvb2xlYW4oZXhl
YykpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGV4dEFyZWFOYW1lOiAgICAgICAgICAgIHsgdGV4
dGFyZWEuc2V0TmFtZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGV4dEFyZWFSZWFkT25s
eTogICAgICAgIHsgdGV4dGFyZWEuc2V0UmVhZE9ubHkodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsg
cmV0dXJuOyB9Ci0gICAgICBjYXNlIFRleHRBcmVhUm93czogICAgICAgICAgICB7IHRleHRhcmVh
LnNldFJvd3ModmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBUZXh0
QXJlYVRhYkluZGV4OiAgICAgICAgeyB0ZXh0YXJlYS5zZXRUYWJJbmRleCh2YWx1ZS50b0ludDMy
KGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICAvLyByZWFkLW9ubHk6IHR5cGUKLSAgICAgIGNhc2Ug
VGV4dEFyZWFWYWx1ZTogICAgICAgICAgIHsgdGV4dGFyZWEuc2V0VmFsdWUoc3RyKTsgcmV0dXJu
OyB9Ci0gICAgICB9Ci0gICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfQlVUVE9OOiB7Ci0g
ICAgICBIVE1MQnV0dG9uRWxlbWVudEltcGwgJmJ1dHRvbiA9IHN0YXRpY19jYXN0PEhUTUxCdXR0
b25FbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAg
IC8vIHJlYWQtb25seTogZm9ybQotICAgICAgY2FzZSBCdXR0b25BY2Nlc3NLZXk6ICAgICAgIHsg
YnV0dG9uLnNldEFjY2Vzc0tleShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQnV0dG9uRGlz
YWJsZWQ6ICAgICAgICB7IGJ1dHRvbi5zZXREaXNhYmxlZCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykp
OyByZXR1cm47IH0KLSAgICAgIGNhc2UgQnV0dG9uTmFtZTogICAgICAgICAgICB7IGJ1dHRvbi5z
ZXROYW1lKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBCdXR0b25UYWJJbmRleDogICAgICAg
IHsgYnV0dG9uLnNldFRhYkluZGV4KHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KLSAg
ICAgIC8vIHJlYWQtb25seTogdHlwZQotICAgICAgY2FzZSBCdXR0b25WYWx1ZTogICAgICAgICAg
IHsgYnV0dG9uLnNldFZhbHVlKHN0cik7IHJldHVybjsgfQotICAgICAgfQotICAgIH0KLSAgICBi
cmVhazsKLSAgICBjYXNlIElEX0xBQkVMOiB7Ci0gICAgICBIVE1MTGFiZWxFbGVtZW50SW1wbCAm
bGFiZWwgPSBzdGF0aWNfY2FzdDxIVE1MTGFiZWxFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAg
ICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIC8vIHJlYWQtb25seTogZm9ybQotICAgICAgY2Fz
ZSBMYWJlbEFjY2Vzc0tleTogICAgICAgeyBsYWJlbC5zZXRBY2Nlc3NLZXkoc3RyKTsgcmV0dXJu
OyB9Ci0gICAgICBjYXNlIExhYmVsSHRtbEZvcjogICAgICAgICB7IGxhYmVsLnNldEh0bWxGb3Io
c3RyKTsgcmV0dXJuOyB9Ci0gICAgICB9Ci0gICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURf
TEVHRU5EOiB7Ci0gICAgICBIVE1MTGVnZW5kRWxlbWVudEltcGwgJmxlZ2VuZCA9IHN0YXRpY19j
YXN0PEhUTUxMZWdlbmRFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9r
ZW4pIHsKLSAgICAgIC8vIHJlYWQtb25seTogZm9ybQotICAgICAgY2FzZSBMZWdlbmRBY2Nlc3NL
ZXk6ICAgICAgIHsgbGVnZW5kLnNldEFjY2Vzc0tleShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNh
c2UgTGVnZW5kQWxpZ246ICAgICAgICAgICB7IGxlZ2VuZC5zZXRBbGlnbihzdHIpOyByZXR1cm47
IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6dGl0bGVTZXR0ZXIoRXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJp
bmcmIHN0cikKK3sKKyAgICAgSFRNTFRpdGxlRWxlbWVudEltcGwmIHRpdGxlID0gKnN0YXRpY19j
YXN0PEhUTUxUaXRsZUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICAgaWYgKHRva2VuID09IFRp
dGxlVGV4dCkKKyAgICAgICAgdGl0bGUuc2V0VGV4dChzdHIpOworfQorCit2b2lkIEhUTUxFbGVt
ZW50OjptZXRhU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYg
dmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTE1ldGFFbGVtZW50
SW1wbCYgbWV0YSA9ICpzdGF0aWNfY2FzdDxIVE1MTWV0YUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsK
KyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgTWV0YUNvbnRlbnQ6ICAgICAgICAg
eyBtZXRhLnNldENvbnRlbnQoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgTWV0YUh0dHBF
cXVpdjogICAgICAgeyBtZXRhLnNldEh0dHBFcXVpdihzdHIpOyByZXR1cm47IH0KKyAgICAgICAg
Y2FzZSBNZXRhTmFtZTogICAgICAgICAgICB7IG1ldGEuc2V0TmFtZShzdHIpOyByZXR1cm47IH0K
KyAgICAgICAgY2FzZSBNZXRhU2NoZW1lOiAgICAgICAgICB7IG1ldGEuc2V0U2NoZW1lKHN0cik7
IHJldHVybjsgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX1VMOiB7Ci0gICAgICBI
VE1MVUxpc3RFbGVtZW50SW1wbCAmdUxpc3QgPSBzdGF0aWNfY2FzdDxIVE1MVUxpc3RFbGVtZW50
SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgVUxp
c3RDb21wYWN0OiAgICAgICAgIHsgdUxpc3Quc2V0Q29tcGFjdCh2YWx1ZS50b0Jvb2xlYW4oZXhl
YykpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVUxpc3RUeXBlOiAgICAgICAgICAgIHsgdUxpc3Qu
c2V0VHlwZShzdHIpOyByZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6
YmFzZVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVl
LCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxCYXNlRWxlbWVudEltcGwm
IGJhc2UgPSAqc3RhdGljX2Nhc3Q8SFRNTEJhc2VFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAg
c3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNlIEJhc2VIcmVmOiAgICAgICAgICAgIHsgYmFz
ZS5zZXRIcmVmKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEJhc2VUYXJnZXQ6ICAgICAg
ICAgIHsgYmFzZS5zZXRUYXJnZXQoc3RyKTsgcmV0dXJuOyB9CiAgICAgfQotICAgIGJyZWFrOwot
ICAgIGNhc2UgSURfT0w6IHsKLSAgICAgIEhUTUxPTGlzdEVsZW1lbnRJbXBsICZvTGlzdCA9IHN0
YXRpY19jYXN0PEhUTUxPTGlzdEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNo
ICh0b2tlbikgewotICAgICAgY2FzZSBPTGlzdENvbXBhY3Q6ICAgICAgICAgeyBvTGlzdC5zZXRD
b21wYWN0KHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBPTGlz
dFN0YXJ0OiAgICAgICAgICAgeyBvTGlzdC5zZXRTdGFydCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsg
cmV0dXJuOyB9Ci0gICAgICBjYXNlIE9MaXN0VHlwZTogICAgICAgICAgICB7IG9MaXN0LnNldFR5
cGUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OmlzSW5k
ZXhTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwg
Y29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MSXNJbmRleEVsZW1lbnRJbXBs
JiBpc2luZGV4ID0gKnN0YXRpY19jYXN0PEhUTUxJc0luZGV4RWxlbWVudEltcGwqPihpbXBsKCkp
OworICAgIGlmICh0b2tlbiA9PSBJc0luZGV4UHJvbXB0KQorICAgICAgICBpc2luZGV4LnNldFBy
b21wdChzdHIpOworfQorCit2b2lkIEhUTUxFbGVtZW50OjpzdHlsZVNldHRlcihFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmlu
ZyYgc3RyKQoreworICAgIEhUTUxTdHlsZUVsZW1lbnRJbXBsJiBzdHlsZSA9ICpzdGF0aWNfY2Fz
dDxIVE1MU3R5bGVFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgewor
ICAgICAgICBjYXNlIFN0eWxlRGlzYWJsZWQ6ICAgICAgICB7IHN0eWxlLnNldERpc2FibGVkKHZh
bHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIFN0eWxlTWVkaWE6
ICAgICAgICAgICB7IHN0eWxlLnNldE1lZGlhKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNl
IFN0eWxlVHlwZTogICAgICAgICAgICB7IHN0eWxlLnNldFR5cGUoc3RyKTsgcmV0dXJuOyB9CiAg
ICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfREw6IHsKLSAgICAgIEhUTUxETGlzdEVsZW1l
bnRJbXBsICZkTGlzdCA9IHN0YXRpY19jYXN0PEhUTUxETGlzdEVsZW1lbnRJbXBsICY+KGVsZW1l
bnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgY2FzZSBETGlzdENvbXBhY3Q6ICAg
ICAgICAgeyBkTGlzdC5zZXRDb21wYWN0KHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsg
fQotICAgICAgfQorfQorCit2b2lkIEhUTUxFbGVtZW50Ojpib2R5U2V0dGVyKEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5n
JiBzdHIpCit7CisgICAgSFRNTEJvZHlFbGVtZW50SW1wbCYgYm9keSA9ICpzdGF0aWNfY2FzdDxI
VE1MQm9keUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAg
ICAgIGNhc2UgQm9keUFMaW5rOiAgICAgICAgICAgeyBib2R5LnNldEFMaW5rKHN0cik7IHJldHVy
bjsgfQorICAgICAgICBjYXNlIEJvZHlCYWNrZ3JvdW5kOiAgICAgIHsgYm9keS5zZXRCYWNrZ3Jv
dW5kKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEJvZHlCZ0NvbG9yOiAgICAgICAgIHsg
Ym9keS5zZXRCZ0NvbG9yKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEJvZHlMaW5rOiAg
ICAgICAgICAgIHsgYm9keS5zZXRMaW5rKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEJv
ZHlUZXh0OiAgICAgICAgICAgIHsgYm9keS5zZXRUZXh0KHN0cik7IHJldHVybjsgfQorICAgICAg
ICBjYXNlIEJvZHlWTGluazogICAgICAgICAgIHsgYm9keS5zZXRWTGluayhzdHIpOyByZXR1cm47
IH0KKyAgICAgICAgY2FzZSBCb2R5U2Nyb2xsTGVmdDoKKyAgICAgICAgY2FzZSBCb2R5U2Nyb2xs
VG9wOiB7CisgICAgICAgICAgICBRU2Nyb2xsVmlldyogc3ZpZXcgPSBib2R5Lm93bmVyRG9jdW1l
bnQoKS0+dmlldygpOworICAgICAgICAgICAgaWYgKHN2aWV3KSB7CisgICAgICAgICAgICAgICAg
Ly8gVXBkYXRlIHRoZSBkb2N1bWVudCdzIGxheW91dCBiZWZvcmUgd2UgY29tcHV0ZSB0aGVzZSBh
dHRyaWJ1dGVzLgorICAgICAgICAgICAgICAgIGlmIChEb2N1bWVudEltcGwqIGRvYyA9IGJvZHku
Z2V0RG9jdW1lbnQoKSkKKyAgICAgICAgICAgICAgICAgICAgZG9jLT51cGRhdGVMYXlvdXRJZ25v
cmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKKyAgICAgICAgICAgICAgICBpZiAodG9rZW4gPT0gQm9k
eVNjcm9sbExlZnQpCisgICAgICAgICAgICAgICAgICAgIHN2aWV3LT5zZXRDb250ZW50c1Bvcyh2
YWx1ZS50b0ludDMyKGV4ZWMpLCBzdmlldy0+Y29udGVudHNZKCkpOworICAgICAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgc3ZpZXctPnNldENvbnRlbnRzUG9zKHN2aWV3LT5j
b250ZW50c1goKSwgdmFsdWUudG9JbnQzMihleGVjKSk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9E
SVI6IHsKLSAgICAgIEhUTUxEaXJlY3RvcnlFbGVtZW50SW1wbCAmZGlyZWN0b3J5ID0gc3RhdGlj
X2Nhc3Q8SFRNTERpcmVjdG9yeUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNo
ICh0b2tlbikgewotICAgICAgY2FzZSBEaXJlY3RvcnlDb21wYWN0OiAgICAgeyBkaXJlY3Rvcnku
c2V0Q29tcGFjdCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KLSAgICAgIH0KK30K
Kwordm9pZCBIVE1MRWxlbWVudDo6Zm9ybVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
biwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAg
IEhUTUxGb3JtRWxlbWVudEltcGwmIGZvcm0gPSAqc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50
SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICAvLyByZWFkLW9u
bHk6IGVsZW1lbnRzCisgICAgICAgIC8vIHJlYWQtb25seTogbGVuZ3RoCisgICAgICAgIGNhc2Ug
Rm9ybU5hbWU6ICAgICAgICAgICAgeyBmb3JtLnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9CisgICAg
ICAgIGNhc2UgRm9ybUFjY2VwdENoYXJzZXQ6ICAgeyBmb3JtLnNldEFjY2VwdENoYXJzZXQoc3Ry
KTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgRm9ybUFjdGlvbjogICAgICAgICAgeyBmb3JtLnNl
dEFjdGlvbihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBGb3JtRW5jVHlwZTogICAgICAg
ICB7IGZvcm0uc2V0RW5jdHlwZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBGb3JtTWV0
aG9kOiAgICAgICAgICB7IGZvcm0uc2V0TWV0aG9kKHN0cik7IHJldHVybjsgfQorICAgICAgICBj
YXNlIEZvcm1UYXJnZXQ6ICAgICAgICAgIHsgZm9ybS5zZXRUYXJnZXQoc3RyKTsgcmV0dXJuOyB9
CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfTUVOVTogewotICAgICAgSFRNTE1lbnVF
bGVtZW50SW1wbCAmbWVudSA9IHN0YXRpY19jYXN0PEhUTUxNZW51RWxlbWVudEltcGwgJj4oZWxl
bWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIE1lbnVDb21wYWN0OiAg
ICAgICAgIHsgbWVudS5zZXRDb21wYWN0KHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsg
fQotICAgICAgfQorfQorCit2b2lkIEhUTUxFbGVtZW50OjpzZWxlY3RTZXR0ZXIoRXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJp
bmcmIHN0cikKK3sKKyAgICBIVE1MU2VsZWN0RWxlbWVudEltcGwmIHNlbGVjdCA9ICpzdGF0aWNf
Y2FzdDxIVE1MU2VsZWN0RWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4p
IHsKKyAgICAgICAgLy8gcmVhZC1vbmx5OiB0eXBlCisgICAgICAgIGNhc2UgU2VsZWN0U2VsZWN0
ZWRJbmRleDogICB7IHNlbGVjdC5zZXRTZWxlY3RlZEluZGV4KHZhbHVlLnRvSW50MzIoZXhlYykp
OyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBTZWxlY3RWYWx1ZTogICAgICAgICAgIHsgc2VsZWN0
LnNldFZhbHVlKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFNlbGVjdExlbmd0aDogICAg
ICAgICAgeyAvLyByZWFkLW9ubHkgYWNjb3JkaW5nIHRvIHRoZSBOUyBzcGVjLCBidXQgd2VicGFn
ZXMgbmVlZCBpdCB3cml0ZWFibGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgT2JqZWN0IGNvbGwgPSBPYmplY3Q6OmR5bmFtaWNDYXN0KCBnZXRTZWxlY3RIVE1MQ29s
bGVjdGlvbihleGVjLCBzZWxlY3Qub3B0aW9uc0hUTUxDb2xsZWN0aW9uKCkuZ2V0KCksICZzZWxl
Y3QpICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIWNv
bGwuaXNOdWxsKCkgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbGwucHV0KGV4ZWMsbGVuZ3RoUHJvcGVydHlOYW1lLHZhbHVlKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAvLyByZWFkLW9ubHk6IGZvcm0KKyAgICAgICAgLy8g
cmVhZC1vbmx5OiBvcHRpb25zCisgICAgICAgIGNhc2UgU2VsZWN0RGlzYWJsZWQ6ICAgICAgICB7
IHNlbGVjdC5zZXREaXNhYmxlZCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KKyAg
ICAgICAgY2FzZSBTZWxlY3RNdWx0aXBsZTogICAgICAgIHsgc2VsZWN0LnNldE11bHRpcGxlKHZh
bHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIFNlbGVjdE5hbWU6
ICAgICAgICAgICAgeyBzZWxlY3Quc2V0TmFtZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2Fz
ZSBTZWxlY3RTaXplOiAgICAgICAgICAgIHsgc2VsZWN0LnNldFNpemUodmFsdWUudG9JbnQzMihl
eGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIFNlbGVjdFRhYkluZGV4OiAgICAgICAgeyBz
ZWxlY3Quc2V0VGFiSW5kZXgodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQogICAgIH0K
LSAgICBicmVhazsKLSAgICBjYXNlIElEX0xJOiB7Ci0gICAgICBIVE1MTElFbGVtZW50SW1wbCAm
bGkgPSBzdGF0aWNfY2FzdDxIVE1MTElFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3
aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgTElUeXBlOiAgICAgICAgICAgIHsgbGkuc2V0VHlw
ZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgTElWYWx1ZTogICAgICAgICAgIHsgbGkuc2V0
VmFsdWUodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQotICAgICAgfQorfQorCit2b2lk
IEhUTUxFbGVtZW50OjpvcHRHcm91cFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwg
Y29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhU
TUxPcHRHcm91cEVsZW1lbnRJbXBsJiBvcHRncm91cCA9ICpzdGF0aWNfY2FzdDxIVE1MT3B0R3Jv
dXBFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICBj
YXNlIE9wdEdyb3VwRGlzYWJsZWQ6ICAgICAgICB7IG9wdGdyb3VwLnNldERpc2FibGVkKHZhbHVl
LnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIE9wdEdyb3VwTGFiZWw6
ICAgICAgICAgICB7IG9wdGdyb3VwLnNldExhYmVsKHN0cik7IHJldHVybjsgfQogICAgIH0KLSAg
ICBicmVhazsKLSAgICBjYXNlIElEX0RJVjogewotICAgICAgSFRNTERpdkVsZW1lbnRJbXBsICZk
aXYgPSBzdGF0aWNfY2FzdDxIVE1MRGl2RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBz
d2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIERpdkFsaWduOiAgICAgICAgICAgeyBkaXYuc2V0
QWxpZ24oc3RyKTsgcmV0dXJuOyB9Ci0gICAgICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6Om9w
dGlvblNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVl
LCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIERPTUV4Y2VwdGlvblRyYW5zbGF0
b3IgZXhjZXB0aW9uKGV4ZWMpOworICAgIEhUTUxPcHRpb25FbGVtZW50SW1wbCYgb3B0aW9uID0g
KnN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNo
ICh0b2tlbikgeworICAgICAgICAvLyByZWFkLW9ubHk6IGZvcm0KKyAgICAgICAgY2FzZSBPcHRp
b25EZWZhdWx0U2VsZWN0ZWQ6IHsgb3B0aW9uLnNldERlZmF1bHRTZWxlY3RlZCh2YWx1ZS50b0Jv
b2xlYW4oZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBPcHRpb25UZXh0OiAgICAgICAg
ICAgIHsgb3B0aW9uLnNldFRleHQoc3RyLCBleGNlcHRpb24pOyByZXR1cm47IH0KKyAgICAgICAg
Ly8gcmVhZC1vbmx5OiBpbmRleAorICAgICAgICBjYXNlIE9wdGlvbkRpc2FibGVkOiAgICAgICAg
eyBvcHRpb24uc2V0RGlzYWJsZWQodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9Cisg
ICAgICAgIGNhc2UgT3B0aW9uTGFiZWw6ICAgICAgICAgICB7IG9wdGlvbi5zZXRMYWJlbChzdHIp
OyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBPcHRpb25TZWxlY3RlZDogICAgICAgIHsgb3B0aW9u
LnNldFNlbGVjdGVkKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBj
YXNlIE9wdGlvblZhbHVlOiAgICAgICAgICAgeyBvcHRpb24uc2V0VmFsdWUoc3RyKTsgcmV0dXJu
OyB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfUDogewotICAgICAgSFRNTFBhcmFn
cmFwaEVsZW1lbnRJbXBsICZwYXJhZ3JhcGggPSBzdGF0aWNfY2FzdDxIVE1MUGFyYWdyYXBoRWxl
bWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNl
IFBhcmFncmFwaEFsaWduOiAgICAgeyBwYXJhZ3JhcGguc2V0QWxpZ24oc3RyKTsgcmV0dXJuOyB9
Ci0gICAgICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OmlucHV0U2V0dGVyKEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5n
JiBzdHIpCit7CisgICAgSFRNTElucHV0RWxlbWVudEltcGwmIGlucHV0ID0gKnN0YXRpY19jYXN0
PEhUTUxJbnB1dEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7Cisg
ICAgICAgIGNhc2UgSW5wdXREZWZhdWx0VmFsdWU6ICAgIHsgaW5wdXQuc2V0RGVmYXVsdFZhbHVl
KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIElucHV0RGVmYXVsdENoZWNrZWQ6ICB7IGlu
cHV0LnNldERlZmF1bHRDaGVja2VkKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQor
ICAgICAgICAvLyByZWFkLW9ubHk6IGZvcm0KKyAgICAgICAgY2FzZSBJbnB1dEFjY2VwdDogICAg
ICAgICAgeyBpbnB1dC5zZXRBY2NlcHQoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgSW5w
dXRBY2Nlc3NLZXk6ICAgICAgIHsgaW5wdXQuc2V0QWNjZXNzS2V5KHN0cik7IHJldHVybjsgfQor
ICAgICAgICBjYXNlIElucHV0QWxpZ246ICAgICAgICAgICB7IGlucHV0LnNldEFsaWduKHN0cik7
IHJldHVybjsgfQorICAgICAgICBjYXNlIElucHV0QWx0OiAgICAgICAgICAgICB7IGlucHV0LnNl
dEFsdChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJbnB1dENoZWNrZWQ6ICAgICAgICAg
eyBpbnB1dC5zZXRDaGVja2VkKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQorICAg
ICAgICBjYXNlIElucHV0RGlzYWJsZWQ6ICAgICAgICB7IGlucHV0LnNldERpc2FibGVkKHZhbHVl
LnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIElucHV0TWF4TGVuZ3Ro
OiAgICAgICB7IGlucHV0LnNldE1heExlbmd0aCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJu
OyB9CisgICAgICAgIGNhc2UgSW5wdXROYW1lOiAgICAgICAgICAgIHsgaW5wdXQuc2V0TmFtZShz
dHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJbnB1dFJlYWRPbmx5OiAgICAgICAgeyBpbnB1
dC5zZXRSZWFkT25seSh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAg
Y2FzZSBJbnB1dFNpemU6ICAgICAgICAgICAgeyBpbnB1dC5zZXRTaXplKHN0cik7IHJldHVybjsg
fQorICAgICAgICBjYXNlIElucHV0U3JjOiAgICAgICAgICAgICB7IGlucHV0LnNldFNyYyhzdHIp
OyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJbnB1dFRhYkluZGV4OiAgICAgICAgeyBpbnB1dC5z
ZXRUYWJJbmRleCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2Ug
SW5wdXRUeXBlOiAgICAgICAgICAgIHsgaW5wdXQuc2V0VHlwZShzdHIpOyByZXR1cm47IH0KKyAg
ICAgICAgY2FzZSBJbnB1dFVzZU1hcDogICAgICAgICAgeyBpbnB1dC5zZXRVc2VNYXAoc3RyKTsg
cmV0dXJuOyB9CisgICAgICAgIGNhc2UgSW5wdXRWYWx1ZTogICAgICAgICAgIHsgaW5wdXQuc2V0
VmFsdWUoc3RyKTsgcmV0dXJuOyB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfSDE6
Ci0gICAgY2FzZSBJRF9IMjoKLSAgICBjYXNlIElEX0gzOgotICAgIGNhc2UgSURfSDQ6Ci0gICAg
Y2FzZSBJRF9INToKLSAgICBjYXNlIElEX0g2OiB7Ci0gICAgICBIVE1MSGVhZGluZ0VsZW1lbnRJ
bXBsICZoZWFkaW5nID0gc3RhdGljX2Nhc3Q8SFRNTEhlYWRpbmdFbGVtZW50SW1wbCAmPihlbGVt
ZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgSGVhZGluZ0FsaWduOiAg
ICAgICAgIHsgaGVhZGluZy5zZXRBbGlnbihzdHIpOyByZXR1cm47IH0KLSAgICAgIH0KK30KKwor
dm9pZCBIVE1MRWxlbWVudDo6dGV4dEFyZWFTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAg
ICBIVE1MVGV4dEFyZWFFbGVtZW50SW1wbCYgdGV4dGFyZWEgPSAqc3RhdGljX2Nhc3Q8SFRNTFRl
eHRBcmVhRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAg
ICAgY2FzZSBUZXh0QXJlYURlZmF1bHRWYWx1ZTogICAgeyB0ZXh0YXJlYS5zZXREZWZhdWx0VmFs
dWUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIC8vIHJlYWQtb25seTogZm9ybQorICAgICAgICBj
YXNlIFRleHRBcmVhQWNjZXNzS2V5OiAgICAgICB7IHRleHRhcmVhLnNldEFjY2Vzc0tleShzdHIp
OyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUZXh0QXJlYUNvbHM6ICAgICAgICAgICAgeyB0ZXh0
YXJlYS5zZXRDb2xzKHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2Fz
ZSBUZXh0QXJlYURpc2FibGVkOiAgICAgICAgeyB0ZXh0YXJlYS5zZXREaXNhYmxlZCh2YWx1ZS50
b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUZXh0QXJlYU5hbWU6ICAg
ICAgICAgICAgeyB0ZXh0YXJlYS5zZXROYW1lKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNl
IFRleHRBcmVhUmVhZE9ubHk6ICAgICAgICB7IHRleHRhcmVhLnNldFJlYWRPbmx5KHZhbHVlLnRv
Qm9vbGVhbihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRleHRBcmVhUm93czogICAg
ICAgICAgICB7IHRleHRhcmVhLnNldFJvd3ModmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsg
fQorICAgICAgICBjYXNlIFRleHRBcmVhVGFiSW5kZXg6ICAgICAgICB7IHRleHRhcmVhLnNldFRh
YkluZGV4KHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgLy8gcmVhZC1v
bmx5OiB0eXBlCisgICAgICAgIGNhc2UgVGV4dEFyZWFWYWx1ZTogICAgICAgICAgIHsgdGV4dGFy
ZWEuc2V0VmFsdWUoc3RyKTsgcmV0dXJuOyB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2Ug
SURfQkxPQ0tRVU9URTogewotICAgICAgSFRNTEJsb2NrcXVvdGVFbGVtZW50SW1wbCAmYmxvY2tx
dW90ZSA9IHN0YXRpY19jYXN0PEhUTUxCbG9ja3F1b3RlRWxlbWVudEltcGwgJj4oZWxlbWVudCk7
Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIEJsb2NrUXVvdGVDaXRlOiAgICAg
ICB7IGJsb2NrcXVvdGUuc2V0Q2l0ZShzdHIpOyByZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9p
ZCBIVE1MRWxlbWVudDo6YnV0dG9uU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBj
b25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRN
TEJ1dHRvbkVsZW1lbnRJbXBsJiBidXR0b24gPSAqc3RhdGljX2Nhc3Q8SFRNTEJ1dHRvbkVsZW1l
bnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIC8vIHJlYWQt
b25seTogZm9ybQorICAgICAgICBjYXNlIEJ1dHRvbkFjY2Vzc0tleTogICAgICAgeyBidXR0b24u
c2V0QWNjZXNzS2V5KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEJ1dHRvbkRpc2FibGVk
OiAgICAgICAgeyBidXR0b24uc2V0RGlzYWJsZWQodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0
dXJuOyB9CisgICAgICAgIGNhc2UgQnV0dG9uTmFtZTogICAgICAgICAgICB7IGJ1dHRvbi5zZXRO
YW1lKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEJ1dHRvblRhYkluZGV4OiAgICAgICAg
eyBidXR0b24uc2V0VGFiSW5kZXgodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQorICAg
ICAgICAvLyByZWFkLW9ubHk6IHR5cGUKKyAgICAgICAgY2FzZSBCdXR0b25WYWx1ZTogICAgICAg
ICAgIHsgYnV0dG9uLnNldFZhbHVlKHN0cik7IHJldHVybjsgfQogICAgIH0KLSAgICBicmVhazsK
LSAgICBjYXNlIElEX1E6IHsKLSAgICAgIEhUTUxRdW90ZUVsZW1lbnRJbXBsICZxdW90ZSA9IHN0
YXRpY19jYXN0PEhUTUxRdW90ZUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNo
ICh0b2tlbikgewotICAgICAgY2FzZSBRdW90ZUNpdGU6ICAgICAgICAgICAgeyBxdW90ZS5zZXRD
aXRlKHN0cik7IHJldHVybjsgfQotICAgICAgfQorfQorCit2b2lkIEhUTUxFbGVtZW50OjpsYWJl
bFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBj
b25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxMYWJlbEVsZW1lbnRJbXBsJiBs
YWJlbCA9ICpzdGF0aWNfY2FzdDxIVE1MTGFiZWxFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAg
c3dpdGNoICh0b2tlbikgeworICAgICAgICAvLyByZWFkLW9ubHk6IGZvcm0KKyAgICAgICAgY2Fz
ZSBMYWJlbEFjY2Vzc0tleTogICAgICAgeyBsYWJlbC5zZXRBY2Nlc3NLZXkoc3RyKTsgcmV0dXJu
OyB9CisgICAgICAgIGNhc2UgTGFiZWxIdG1sRm9yOiAgICAgICAgIHsgbGFiZWwuc2V0SHRtbEZv
cihzdHIpOyByZXR1cm47IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9QUkU6IHsK
LSAgICAgIEhUTUxQcmVFbGVtZW50SW1wbCAmcHJlID0gc3RhdGljX2Nhc3Q8SFRNTFByZUVsZW1l
bnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgY2FzZSBQ
cmVXaWR0aDogICAgICAgICAgIHsgcHJlLnNldFdpZHRoKHZhbHVlLnRvSW50MzIoZXhlYykpOyBy
ZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6bGVnZW5kU2V0dGVyKEV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6
RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTExlZ2VuZEVsZW1lbnRJbXBsJiBsZWdlbmQgPSAq
c3RhdGljX2Nhc3Q8SFRNTExlZ2VuZEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2gg
KHRva2VuKSB7CisgICAgICAgIC8vIHJlYWQtb25seTogZm9ybQorICAgICAgICBjYXNlIExlZ2Vu
ZEFjY2Vzc0tleTogICAgICAgeyBsZWdlbmQuc2V0QWNjZXNzS2V5KHN0cik7IHJldHVybjsgfQor
ICAgICAgICBjYXNlIExlZ2VuZEFsaWduOiAgICAgICAgICAgeyBsZWdlbmQuc2V0QWxpZ24oc3Ry
KTsgcmV0dXJuOyB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfQlI6IHsKLSAgICAg
IEhUTUxCUkVsZW1lbnRJbXBsICZiciA9IHN0YXRpY19jYXN0PEhUTUxCUkVsZW1lbnRJbXBsICY+
KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgY2FzZSBCUkNsZWFyOiAg
ICAgICAgICAgeyBici5zZXRDbGVhcihzdHIpOyByZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9p
ZCBIVE1MRWxlbWVudDo6dUxpc3RTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNv
bnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1M
VUxpc3RFbGVtZW50SW1wbCYgdUxpc3QgPSAqc3RhdGljX2Nhc3Q8SFRNTFVMaXN0RWxlbWVudElt
cGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBVTGlzdENv
bXBhY3Q6ICAgICAgICAgeyB1TGlzdC5zZXRDb21wYWN0KHZhbHVlLnRvQm9vbGVhbihleGVjKSk7
IHJldHVybjsgfQorICAgICAgICBjYXNlIFVMaXN0VHlwZTogICAgICAgICAgICB7IHVMaXN0LnNl
dFR5cGUoc3RyKTsgcmV0dXJuOyB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfQkFT
RUZPTlQ6IHsKLSAgICAgIEhUTUxCYXNlRm9udEVsZW1lbnRJbXBsICZiYXNlRm9udCA9IHN0YXRp
Y19jYXN0PEhUTUxCYXNlRm9udEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNo
ICh0b2tlbikgewotICAgICAgY2FzZSBCYXNlRm9udENvbG9yOiAgICAgICAgICAgeyBiYXNlRm9u
dC5zZXRDb2xvcihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQmFzZUZvbnRGYWNlOiAgICAg
ICAgICAgIHsgYmFzZUZvbnQuc2V0RmFjZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQmFz
ZUZvbnRTaXplOiAgICAgICAgICAgIHsgYmFzZUZvbnQuc2V0U2l6ZShzdHIpOyByZXR1cm47IH0K
LSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6b0xpc3RTZXR0ZXIoRXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcm
IHN0cikKK3sKKyAgICBIVE1MT0xpc3RFbGVtZW50SW1wbCYgb0xpc3QgPSAqc3RhdGljX2Nhc3Q8
SFRNTE9MaXN0RWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAg
ICAgICAgY2FzZSBPTGlzdENvbXBhY3Q6ICAgICAgICAgeyBvTGlzdC5zZXRDb21wYWN0KHZhbHVl
LnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIE9MaXN0U3RhcnQ6ICAg
ICAgICAgICB7IG9MaXN0LnNldFN0YXJ0KHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0K
KyAgICAgICAgY2FzZSBPTGlzdFR5cGU6ICAgICAgICAgICAgeyBvTGlzdC5zZXRUeXBlKHN0cik7
IHJldHVybjsgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0ZPTlQ6IHsKLSAgICAg
IEhUTUxGb250RWxlbWVudEltcGwgJmZvbnQgPSBzdGF0aWNfY2FzdDxIVE1MRm9udEVsZW1lbnRJ
bXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgY2FzZSBGb250
Q29sb3I6ICAgICAgICAgICB7IGZvbnQuc2V0Q29sb3Ioc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBj
YXNlIEZvbnRGYWNlOiAgICAgICAgICAgIHsgZm9udC5zZXRGYWNlKHN0cik7IHJldHVybjsgfQot
ICAgICAgY2FzZSBGb250U2l6ZTogICAgICAgICAgICB7IGZvbnQuc2V0U2l6ZShzdHIpOyByZXR1
cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6ZExpc3RTZXR0ZXIoRXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01T
dHJpbmcmIHN0cikKK3sKKyAgICBIVE1MRExpc3RFbGVtZW50SW1wbCYgZExpc3QgPSAqc3RhdGlj
X2Nhc3Q8SFRNTERMaXN0RWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIGlmICh0b2tlbiA9PSBE
TGlzdENvbXBhY3QpCisgICAgICAgIGRMaXN0LnNldENvbXBhY3QodmFsdWUudG9Cb29sZWFuKGV4
ZWMpKTsKK30KKwordm9pZCBIVE1MRWxlbWVudDo6ZGlyU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIp
Cit7CisgICAgSFRNTERpcmVjdG9yeUVsZW1lbnRJbXBsJiBkaXJlY3RvcnkgPSAqc3RhdGljX2Nh
c3Q8SFRNTERpcmVjdG9yeUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBpZiAodG9rZW4gPT0g
RGlyZWN0b3J5Q29tcGFjdCkKKyAgICAgICAgZGlyZWN0b3J5LnNldENvbXBhY3QodmFsdWUudG9C
b29sZWFuKGV4ZWMpKTsKK30KKwordm9pZCBIVE1MRWxlbWVudDo6bWVudVNldHRlcihFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0
cmluZyYgc3RyKQoreworICAgIEhUTUxNZW51RWxlbWVudEltcGwmIG1lbnUgPSAqc3RhdGljX2Nh
c3Q8SFRNTE1lbnVFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IE1lbnVD
b21wYWN0KQorICAgICAgICBtZW51LnNldENvbXBhY3QodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsK
K30KKwordm9pZCBIVE1MRWxlbWVudDo6bGlTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAg
ICBIVE1MTElFbGVtZW50SW1wbCYgbGkgPSAqc3RhdGljX2Nhc3Q8SFRNTExJRWxlbWVudEltcGwq
PihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBMSVR5cGU6ICAg
ICAgICAgICAgeyBsaS5zZXRUeXBlKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIExJVmFs
dWU6ICAgICAgICAgICB7IGxpLnNldFZhbHVlKHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47
IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9IUjogewotICAgICAgSFRNTEhSRWxl
bWVudEltcGwgJmhyID0gc3RhdGljX2Nhc3Q8SFRNTEhSRWxlbWVudEltcGwgJj4oZWxlbWVudCk7
Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIEhSQWxpZ246ICAgICAgICAgICB7
IGhyLnNldEFsaWduKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBIUk5vU2hhZGU6ICAgICAg
ICAgeyBoci5zZXROb1NoYWRlKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQotICAg
ICAgY2FzZSBIUlNpemU6ICAgICAgICAgICAgeyBoci5zZXRTaXplKHN0cik7IHJldHVybjsgfQot
ICAgICAgY2FzZSBIUldpZHRoOiAgICAgICAgICAgeyBoci5zZXRXaWR0aChzdHIpOyByZXR1cm47
IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6ZGl2U2V0dGVyKEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5n
JiBzdHIpCit7CisgICAgSFRNTERpdkVsZW1lbnRJbXBsJiBkaXYgPSAqc3RhdGljX2Nhc3Q8SFRN
TERpdkVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBpZiAodG9rZW4gPT0gRGl2QWxpZ24pCisg
ICAgICAgIGRpdi5zZXRBbGlnbihzdHIpOworfQorCit2b2lkIEhUTUxFbGVtZW50OjpwYXJhZ3Jh
cGhTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwg
Y29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MUGFyYWdyYXBoRWxlbWVudElt
cGwmIHBhcmFncmFwaCA9ICpzdGF0aWNfY2FzdDxIVE1MUGFyYWdyYXBoRWxlbWVudEltcGwqPihp
bXBsKCkpOworICAgIGlmICh0b2tlbiA9PSBQYXJhZ3JhcGhBbGlnbikKKyAgICAgICAgcGFyYWdy
YXBoLnNldEFsaWduKHN0cik7Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OmhlYWRpbmdTZXR0ZXIo
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9N
OjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MSGVhZGluZ0VsZW1lbnRJbXBsJiBoZWFkaW5n
ID0gKnN0YXRpY19jYXN0PEhUTUxIZWFkaW5nRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIGlm
ICh0b2tlbiA9PSBIZWFkaW5nQWxpZ24pCisgICAgICAgIGhlYWRpbmcuc2V0QWxpZ24oc3RyKTsK
K30KKwordm9pZCBIVE1MRWxlbWVudDo6YmxvY2tRdW90ZVNldHRlcihFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3Ry
KQoreworICAgIEhUTUxCbG9ja3F1b3RlRWxlbWVudEltcGwmIGJsb2NrUXVvdGUgPSAqc3RhdGlj
X2Nhc3Q8SFRNTEJsb2NrcXVvdGVFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2Vu
ID09IEJsb2NrUXVvdGVDaXRlKQorICAgICAgICBibG9ja1F1b3RlLnNldENpdGUoc3RyKTsKK30K
Kwordm9pZCBIVE1MRWxlbWVudDo6cXVvdGVTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAg
ICBIVE1MUXVvdGVFbGVtZW50SW1wbCYgcXVvdGUgPSAqc3RhdGljX2Nhc3Q8SFRNTFF1b3RlRWxl
bWVudEltcGwqPihpbXBsKCkpOworICAgIGlmICh0b2tlbiA9PSBRdW90ZUNpdGUpCisgICAgICAg
IHF1b3RlLnNldENpdGUoc3RyKTsKK30KKwordm9pZCBIVE1MRWxlbWVudDo6cHJlU2V0dGVyKEV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6
RE9NU3RyaW5nJiBzdHIpCit7CisgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciAnd3JhcCcg
d2hlbiB3aGl0ZS1zcGFjZTogcHJlLXdyYXAgaXMgaW1wbGVtZW50ZWQuCisgICAgSFRNTFByZUVs
ZW1lbnRJbXBsJiBwcmUgPSAqc3RhdGljX2Nhc3Q8SFRNTFByZUVsZW1lbnRJbXBsKj4oaW1wbCgp
KTsKKyAgICBpZiAodG9rZW4gPT0gUHJlV2lkdGgpCisgICAgICAgIHByZS5zZXRXaWR0aCh2YWx1
ZS50b0ludDMyKGV4ZWMpKTsKK30KKwordm9pZCBIVE1MRWxlbWVudDo6YnJTZXR0ZXIoRXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01T
dHJpbmcmIHN0cikKK3sKKyAgICBIVE1MQlJFbGVtZW50SW1wbCYgYnIgPSAqc3RhdGljX2Nhc3Q8
SFRNTEJSRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIGlmICh0b2tlbiA9PSBCUkNsZWFyKQor
ICAgICAgICBici5zZXRDbGVhcihzdHIpOworfQorCit2b2lkIEhUTUxFbGVtZW50OjpiYXNlRm9u
dFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBj
b25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxCYXNlRm9udEVsZW1lbnRJbXBs
JiBiYXNlRm9udCA9ICpzdGF0aWNfY2FzdDxIVE1MQmFzZUZvbnRFbGVtZW50SW1wbCo+KGltcGwo
KSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNlIEJhc2VGb250Q29sb3I6ICAg
ICAgICAgICB7IGJhc2VGb250LnNldENvbG9yKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNl
IEJhc2VGb250RmFjZTogICAgICAgICAgICB7IGJhc2VGb250LnNldEZhY2Uoc3RyKTsgcmV0dXJu
OyB9CisgICAgICAgIGNhc2UgQmFzZUZvbnRTaXplOiAgICAgICAgICAgIHsgYmFzZUZvbnQuc2V0
U2l6ZShzdHIpOyByZXR1cm47IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9JTlM6
Ci0gICAgY2FzZSBJRF9ERUw6IHsKLSAgICAgIEhUTUxNb2RFbGVtZW50SW1wbCAmbW9kID0gc3Rh
dGljX2Nhc3Q8SFRNTE1vZEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0
b2tlbikgewotICAgICAgY2FzZSBNb2RDaXRlOiAgICAgICAgICAgIHsgbW9kLnNldENpdGUoc3Ry
KTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIE1vZERhdGVUaW1lOiAgICAgICAgeyBtb2Quc2V0RGF0
ZVRpbWUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OmZv
bnRTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwg
Y29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MRm9udEVsZW1lbnRJbXBsJiBm
b250ID0gKnN0YXRpY19jYXN0PEhUTUxGb250RWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3
aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBGb250Q29sb3I6ICAgICAgICAgICB7IGZvbnQu
c2V0Q29sb3Ioc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgRm9udEZhY2U6ICAgICAgICAg
ICAgeyBmb250LnNldEZhY2Uoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgRm9udFNpemU6
ICAgICAgICAgICAgeyBmb250LnNldFNpemUoc3RyKTsgcmV0dXJuOyB9CiAgICAgfQotICAgIGJy
ZWFrOwotICAgIGNhc2UgSURfQTogewotICAgICAgSFRNTEFuY2hvckVsZW1lbnRJbXBsICZhbmNo
b3IgPSBzdGF0aWNfY2FzdDxIVE1MQW5jaG9yRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAg
ICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIEFuY2hvckFjY2Vzc0tleTogICAgICAgeyBh
bmNob3Iuc2V0QWNjZXNzS2V5KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBBbmNob3JDaGFy
c2V0OiAgICAgICAgIHsgYW5jaG9yLnNldENoYXJzZXQoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBj
YXNlIEFuY2hvckNvb3JkczogICAgICAgICAgeyBhbmNob3Iuc2V0Q29vcmRzKHN0cik7IHJldHVy
bjsgfQotICAgICAgY2FzZSBBbmNob3JIcmVmOiAgICAgICAgICAgIHsgYW5jaG9yLnNldEhyZWYo
c3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEFuY2hvckhyZWZMYW5nOiAgICAgICAgeyBhbmNo
b3Iuc2V0SHJlZmxhbmcoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEFuY2hvck5hbWU6ICAg
ICAgICAgICAgeyBhbmNob3Iuc2V0TmFtZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQW5j
aG9yUmVsOiAgICAgICAgICAgICB7IGFuY2hvci5zZXRSZWwoc3RyKTsgcmV0dXJuOyB9Ci0gICAg
ICBjYXNlIEFuY2hvclJldjogICAgICAgICAgICAgeyBhbmNob3Iuc2V0UmV2KHN0cik7IHJldHVy
bjsgfQotICAgICAgY2FzZSBBbmNob3JTaGFwZTogICAgICAgICAgIHsgYW5jaG9yLnNldFNoYXBl
KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBBbmNob3JUYWJJbmRleDogICAgICAgIHsgYW5j
aG9yLnNldFRhYkluZGV4KHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNh
c2UgQW5jaG9yVGFyZ2V0OiAgICAgICAgICB7IGFuY2hvci5zZXRUYXJnZXQoc3RyKTsgcmV0dXJu
OyB9Ci0gICAgICBjYXNlIEFuY2hvclR5cGU6ICAgICAgICAgICAgeyBhbmNob3Iuc2V0VHlwZShz
dHIpOyByZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6aHJTZXR0ZXIo
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9N
OjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MSFJFbGVtZW50SW1wbCYgaHIgPSAqc3RhdGlj
X2Nhc3Q8SFRNTEhSRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsK
KyAgICAgICAgY2FzZSBIUkFsaWduOiAgICAgICAgICAgeyBoci5zZXRBbGlnbihzdHIpOyByZXR1
cm47IH0KKyAgICAgICAgY2FzZSBIUk5vU2hhZGU6ICAgICAgICAgeyBoci5zZXROb1NoYWRlKHZh
bHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIEhSU2l6ZTogICAg
ICAgICAgICB7IGhyLnNldFNpemUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgSFJXaWR0
aDogICAgICAgICAgIHsgaHIuc2V0V2lkdGgoc3RyKTsgcmV0dXJuOyB9CiAgICAgfQotICAgIGJy
ZWFrOwotICAgIGNhc2UgSURfSU1HOiB7Ci0gICAgICBIVE1MSW1hZ2VFbGVtZW50SW1wbCAmaW1h
Z2UgPSBzdGF0aWNfY2FzdDxIVE1MSW1hZ2VFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAg
IHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgSW1hZ2VOYW1lOiAgICAgICAgICAgIHsgaW1h
Z2Uuc2V0TmFtZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSW1hZ2VBbGlnbjogICAgICAg
ICAgIHsgaW1hZ2Uuc2V0QWxpZ24oc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEltYWdlQWx0
OiAgICAgICAgICAgICB7IGltYWdlLnNldEFsdChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2Ug
SW1hZ2VCb3JkZXI6ICAgICAgICAgIHsgaW1hZ2Uuc2V0Qm9yZGVyKHZhbHVlLnRvSW50MzIoZXhl
YykpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSW1hZ2VIZWlnaHQ6ICAgICAgICAgIHsgaW1hZ2Uu
c2V0SGVpZ2h0KHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSW1h
Z2VIc3BhY2U6ICAgICAgICAgIHsgaW1hZ2Uuc2V0SHNwYWNlKHZhbHVlLnRvSW50MzIoZXhlYykp
OyByZXR1cm47IH0KLSAgICAgIGNhc2UgSW1hZ2VJc01hcDogICAgICAgICAgIHsgaW1hZ2Uuc2V0
SXNNYXAodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEltYWdl
TG9uZ0Rlc2M6ICAgICAgICB7IGltYWdlLnNldExvbmdEZXNjKHN0cik7IHJldHVybjsgfQotICAg
ICAgY2FzZSBJbWFnZVNyYzogICAgICAgICAgICAgeyBpbWFnZS5zZXRTcmMoc3RyKTsgcmV0dXJu
OyB9Ci0gICAgICBjYXNlIEltYWdlVXNlTWFwOiAgICAgICAgICB7IGltYWdlLnNldFVzZU1hcChz
dHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSW1hZ2VWc3BhY2U6ICAgICAgICAgIHsgaW1hZ2Uu
c2V0VnNwYWNlKHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSW1h
Z2VXaWR0aDogICAgICAgICAgIHsgaW1hZ2Uuc2V0V2lkdGgodmFsdWUudG9JbnQzMihleGVjKSk7
IHJldHVybjsgfQotICAgICAgfQorfQorCit2b2lkIEhUTUxFbGVtZW50Ojptb2RTZXR0ZXIoRXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpE
T01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MTW9kRWxlbWVudEltcGwmIG1vZCA9ICpzdGF0aWNf
Y2FzdDxIVE1MTW9kRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsK
KyAgICAgICAgY2FzZSBNb2RDaXRlOiAgICAgICAgICAgIHsgbW9kLnNldENpdGUoc3RyKTsgcmV0
dXJuOyB9CisgICAgICAgIGNhc2UgTW9kRGF0ZVRpbWU6ICAgICAgICB7IG1vZC5zZXREYXRlVGlt
ZShzdHIpOyByZXR1cm47IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9PQkpFQ1Q6
IHsKLSAgICAgIEhUTUxPYmplY3RFbGVtZW50SW1wbCAmb2JqZWN0ID0gc3RhdGljX2Nhc3Q8SFRN
TE9iamVjdEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewot
ICAgICAgLy8gcmVhZC1vbmx5OiBmb3JtCi0gICAgICBjYXNlIE9iamVjdENvZGU6ICAgICAgICAg
ICAgICAgICB7IG9iamVjdC5zZXRDb2RlKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBPYmpl
Y3RBbGlnbjogICAgICAgICAgIHsgb2JqZWN0LnNldEFsaWduKHN0cik7IHJldHVybjsgfQotICAg
ICAgY2FzZSBPYmplY3RBcmNoaXZlOiAgICAgICAgIHsgb2JqZWN0LnNldEFyY2hpdmUoc3RyKTsg
cmV0dXJuOyB9Ci0gICAgICBjYXNlIE9iamVjdEJvcmRlcjogICAgICAgICAgeyBvYmplY3Quc2V0
Qm9yZGVyKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBPYmplY3RDb2RlQmFzZTogICAgICAg
IHsgb2JqZWN0LnNldENvZGVCYXNlKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBPYmplY3RD
b2RlVHlwZTogICAgICAgIHsgb2JqZWN0LnNldENvZGVUeXBlKHN0cik7IHJldHVybjsgfQotICAg
ICAgLy8gcmVhZC1vbmx5OiBPYmplY3RDb250ZW50RG9jdW1lbnQKLSAgICAgIGNhc2UgT2JqZWN0
RGF0YTogICAgICAgICAgICB7IG9iamVjdC5zZXREYXRhKHN0cik7IHJldHVybjsgfQotICAgICAg
Y2FzZSBPYmplY3REZWNsYXJlOiAgICAgICAgIHsgb2JqZWN0LnNldERlY2xhcmUodmFsdWUudG9C
b29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIE9iamVjdEhlaWdodDogICAgICAg
ICAgeyBvYmplY3Quc2V0SGVpZ2h0KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBPYmplY3RI
c3BhY2U6ICAgICAgICAgIHsgb2JqZWN0LnNldEhzcGFjZShzdHIpOyByZXR1cm47IH0KLSAgICAg
IGNhc2UgT2JqZWN0TmFtZTogICAgICAgICAgICB7IG9iamVjdC5zZXROYW1lKHN0cik7IHJldHVy
bjsgfQotICAgICAgY2FzZSBPYmplY3RTdGFuZGJ5OiAgICAgICAgIHsgb2JqZWN0LnNldFN0YW5k
Ynkoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIE9iamVjdFRhYkluZGV4OiAgICAgICAgeyBv
YmplY3Quc2V0VGFiSW5kZXgodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQotICAgICAg
Y2FzZSBPYmplY3RUeXBlOiAgICAgICAgICAgIHsgb2JqZWN0LnNldFR5cGUoc3RyKTsgcmV0dXJu
OyB9Ci0gICAgICBjYXNlIE9iamVjdFVzZU1hcDogICAgICAgICAgeyBvYmplY3Quc2V0VXNlTWFw
KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBPYmplY3RWc3BhY2U6ICAgICAgICAgIHsgb2Jq
ZWN0LnNldFZzcGFjZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgT2JqZWN0V2lkdGg6ICAg
ICAgICAgICB7IG9iamVjdC5zZXRXaWR0aChzdHIpOyByZXR1cm47IH0KLSAgICAgIH0KK30KKwor
dm9pZCBIVE1MRWxlbWVudDo6YW5jaG9yU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
LCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAg
SFRNTEFuY2hvckVsZW1lbnRJbXBsJiBhbmNob3IgPSAqc3RhdGljX2Nhc3Q8SFRNTEFuY2hvckVs
ZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2Ug
QW5jaG9yQWNjZXNzS2V5OiAgICAgICB7IGFuY2hvci5zZXRBY2Nlc3NLZXkoc3RyKTsgcmV0dXJu
OyB9CisgICAgICAgIGNhc2UgQW5jaG9yQ2hhcnNldDogICAgICAgICB7IGFuY2hvci5zZXRDaGFy
c2V0KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEFuY2hvckNvb3JkczogICAgICAgICAg
eyBhbmNob3Iuc2V0Q29vcmRzKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEFuY2hvckhy
ZWY6ICAgICAgICAgICAgeyBhbmNob3Iuc2V0SHJlZihzdHIpOyByZXR1cm47IH0KKyAgICAgICAg
Y2FzZSBBbmNob3JIcmVmTGFuZzogICAgICAgIHsgYW5jaG9yLnNldEhyZWZsYW5nKHN0cik7IHJl
dHVybjsgfQorICAgICAgICBjYXNlIEFuY2hvck5hbWU6ICAgICAgICAgICAgeyBhbmNob3Iuc2V0
TmFtZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBBbmNob3JSZWw6ICAgICAgICAgICAg
IHsgYW5jaG9yLnNldFJlbChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBBbmNob3JSZXY6
ICAgICAgICAgICAgIHsgYW5jaG9yLnNldFJldihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2Fz
ZSBBbmNob3JTaGFwZTogICAgICAgICAgIHsgYW5jaG9yLnNldFNoYXBlKHN0cik7IHJldHVybjsg
fQorICAgICAgICBjYXNlIEFuY2hvclRhYkluZGV4OiAgICAgICAgeyBhbmNob3Iuc2V0VGFiSW5k
ZXgodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIEFuY2hvclRh
cmdldDogICAgICAgICAgeyBhbmNob3Iuc2V0VGFyZ2V0KHN0cik7IHJldHVybjsgfQorICAgICAg
ICBjYXNlIEFuY2hvclR5cGU6ICAgICAgICAgICAgeyBhbmNob3Iuc2V0VHlwZShzdHIpOyByZXR1
cm47IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9QQVJBTTogewotICAgICAgSFRN
TFBhcmFtRWxlbWVudEltcGwgJnBhcmFtID0gc3RhdGljX2Nhc3Q8SFRNTFBhcmFtRWxlbWVudElt
cGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIFBhcmFt
TmFtZTogICAgICAgICAgICB7IHBhcmFtLnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBj
YXNlIFBhcmFtVHlwZTogICAgICAgICAgICB7IHBhcmFtLnNldFR5cGUoc3RyKTsgcmV0dXJuOyB9
Ci0gICAgICBjYXNlIFBhcmFtVmFsdWU6ICAgICAgICAgICB7IHBhcmFtLnNldFZhbHVlKHN0cik7
IHJldHVybjsgfQotICAgICAgY2FzZSBQYXJhbVZhbHVlVHlwZTogICAgICAgeyBwYXJhbS5zZXRW
YWx1ZVR5cGUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6
OmltYWdlU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFs
dWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTEltYWdlRWxlbWVudElt
cGwmIGltYWdlID0gKnN0YXRpY19jYXN0PEhUTUxJbWFnZUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsK
KyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgSW1hZ2VOYW1lOiAgICAgICAgICAg
IHsgaW1hZ2Uuc2V0TmFtZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJbWFnZUFsaWdu
OiAgICAgICAgICAgeyBpbWFnZS5zZXRBbGlnbihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2Fz
ZSBJbWFnZUFsdDogICAgICAgICAgICAgeyBpbWFnZS5zZXRBbHQoc3RyKTsgcmV0dXJuOyB9Cisg
ICAgICAgIGNhc2UgSW1hZ2VCb3JkZXI6ICAgICAgICAgIHsgaW1hZ2Uuc2V0Qm9yZGVyKHZhbHVl
LnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJbWFnZUhlaWdodDogICAg
ICAgICAgeyBpbWFnZS5zZXRIZWlnaHQodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQor
ICAgICAgICBjYXNlIEltYWdlSHNwYWNlOiAgICAgICAgICB7IGltYWdlLnNldEhzcGFjZSh2YWx1
ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgSW1hZ2VJc01hcDogICAg
ICAgICAgIHsgaW1hZ2Uuc2V0SXNNYXAodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9
CisgICAgICAgIGNhc2UgSW1hZ2VMb25nRGVzYzogICAgICAgIHsgaW1hZ2Uuc2V0TG9uZ0Rlc2Mo
c3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgSW1hZ2VTcmM6ICAgICAgICAgICAgIHsgaW1h
Z2Uuc2V0U3JjKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEltYWdlVXNlTWFwOiAgICAg
ICAgICB7IGltYWdlLnNldFVzZU1hcChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJbWFn
ZVZzcGFjZTogICAgICAgICAgeyBpbWFnZS5zZXRWc3BhY2UodmFsdWUudG9JbnQzMihleGVjKSk7
IHJldHVybjsgfQorICAgICAgICBjYXNlIEltYWdlV2lkdGg6ICAgICAgICAgICB7IGltYWdlLnNl
dFdpZHRoKHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KICAgICB9Ci0gICAgYnJlYWs7
Ci0gICAgY2FzZSBJRF9BUFBMRVQ6IHsKLSAgICAgIEhUTUxBcHBsZXRFbGVtZW50SW1wbCAmYXBw
bGV0ID0gc3RhdGljX2Nhc3Q8SFRNTEFwcGxldEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAg
ICAgc3dpdGNoICh0b2tlbikgewotICAgICAgY2FzZSBBcHBsZXRBbGlnbjogICAgICAgICAgIHsg
YXBwbGV0LnNldEFsaWduKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBBcHBsZXRBbHQ6ICAg
ICAgICAgICAgIHsgYXBwbGV0LnNldEFsdChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQXBw
bGV0QXJjaGl2ZTogICAgICAgICB7IGFwcGxldC5zZXRBcmNoaXZlKHN0cik7IHJldHVybjsgfQot
ICAgICAgY2FzZSBBcHBsZXRDb2RlOiAgICAgICAgICAgIHsgYXBwbGV0LnNldENvZGUoc3RyKTsg
cmV0dXJuOyB9Ci0gICAgICBjYXNlIEFwcGxldENvZGVCYXNlOiAgICAgICAgeyBhcHBsZXQuc2V0
Q29kZUJhc2Uoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEFwcGxldEhlaWdodDogICAgICAg
ICAgeyBhcHBsZXQuc2V0SGVpZ2h0KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBBcHBsZXRI
c3BhY2U6ICAgICAgICAgIHsgYXBwbGV0LnNldEhzcGFjZShzdHIpOyByZXR1cm47IH0KLSAgICAg
IGNhc2UgQXBwbGV0TmFtZTogICAgICAgICAgICB7IGFwcGxldC5zZXROYW1lKHN0cik7IHJldHVy
bjsgfQotICAgICAgY2FzZSBBcHBsZXRPYmplY3Q6ICAgICAgICAgIHsgYXBwbGV0LnNldE9iamVj
dChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQXBwbGV0VnNwYWNlOiAgICAgICAgICB7IGFw
cGxldC5zZXRWc3BhY2Uoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEFwcGxldFdpZHRoOiAg
ICAgICAgICAgeyBhcHBsZXQuc2V0V2lkdGgoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICB9Cit9CisK
K3ZvaWQgSFRNTEVsZW1lbnQ6Om9iamVjdFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
biwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAg
IEhUTUxPYmplY3RFbGVtZW50SW1wbCYgb2JqZWN0ID0gKnN0YXRpY19jYXN0PEhUTUxPYmplY3RF
bGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICAvLyBy
ZWFkLW9ubHk6IGZvcm0KKyAgICAgICAgY2FzZSBPYmplY3RDb2RlOiAgICAgICAgICAgIHsgb2Jq
ZWN0LnNldENvZGUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgT2JqZWN0QWxpZ246ICAg
ICAgICAgICB7IG9iamVjdC5zZXRBbGlnbihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBP
YmplY3RBcmNoaXZlOiAgICAgICAgIHsgb2JqZWN0LnNldEFyY2hpdmUoc3RyKTsgcmV0dXJuOyB9
CisgICAgICAgIGNhc2UgT2JqZWN0Qm9yZGVyOiAgICAgICAgICB7IG9iamVjdC5zZXRCb3JkZXIo
c3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgT2JqZWN0Q29kZUJhc2U6ICAgICAgICB7IG9i
amVjdC5zZXRDb2RlQmFzZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBPYmplY3RDb2Rl
VHlwZTogICAgICAgIHsgb2JqZWN0LnNldENvZGVUeXBlKHN0cik7IHJldHVybjsgfQorICAgICAg
ICAvLyByZWFkLW9ubHk6IE9iamVjdENvbnRlbnREb2N1bWVudAorICAgICAgICBjYXNlIE9iamVj
dERhdGE6ICAgICAgICAgICAgeyBvYmplY3Quc2V0RGF0YShzdHIpOyByZXR1cm47IH0KKyAgICAg
ICAgY2FzZSBPYmplY3REZWNsYXJlOiAgICAgICAgIHsgb2JqZWN0LnNldERlY2xhcmUodmFsdWUu
dG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgT2JqZWN0SGVpZ2h0OiAg
ICAgICAgICB7IG9iamVjdC5zZXRIZWlnaHQoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2Ug
T2JqZWN0SHNwYWNlOiAgICAgICAgICB7IG9iamVjdC5zZXRIc3BhY2Uoc3RyKTsgcmV0dXJuOyB9
CisgICAgICAgIGNhc2UgT2JqZWN0TmFtZTogICAgICAgICAgICB7IG9iamVjdC5zZXROYW1lKHN0
cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIE9iamVjdFN0YW5kYnk6ICAgICAgICAgeyBvYmpl
Y3Quc2V0U3RhbmRieShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBPYmplY3RUYWJJbmRl
eDogICAgICAgIHsgb2JqZWN0LnNldFRhYkluZGV4KHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1
cm47IH0KKyAgICAgICAgY2FzZSBPYmplY3RUeXBlOiAgICAgICAgICAgIHsgb2JqZWN0LnNldFR5
cGUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgT2JqZWN0VXNlTWFwOiAgICAgICAgICB7
IG9iamVjdC5zZXRVc2VNYXAoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgT2JqZWN0VnNw
YWNlOiAgICAgICAgICB7IG9iamVjdC5zZXRWc3BhY2Uoc3RyKTsgcmV0dXJuOyB9CisgICAgICAg
IGNhc2UgT2JqZWN0V2lkdGg6ICAgICAgICAgICB7IG9iamVjdC5zZXRXaWR0aChzdHIpOyByZXR1
cm47IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9NQVA6IHsKLSAgICAgIEhUTUxN
YXBFbGVtZW50SW1wbCAmbWFwID0gc3RhdGljX2Nhc3Q8SFRNTE1hcEVsZW1lbnRJbXBsICY+KGVs
ZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgLy8gcmVhZC1vbmx5OiBhcmVh
cwotICAgICAgY2FzZSBNYXBOYW1lOiAgICAgICAgICAgICAgICAgeyBtYXAuc2V0TmFtZShzdHIp
OyByZXR1cm47IH0KLSAgICAgfQorfQorCit2b2lkIEhUTUxFbGVtZW50OjpwYXJhbVNldHRlcihF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006
OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxQYXJhbUVsZW1lbnRJbXBsJiBwYXJhbSA9ICpz
dGF0aWNfY2FzdDxIVE1MUGFyYW1FbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0
b2tlbikgeworICAgICAgICBjYXNlIFBhcmFtTmFtZTogICAgICAgICAgICB7IHBhcmFtLnNldE5h
bWUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgUGFyYW1UeXBlOiAgICAgICAgICAgIHsg
cGFyYW0uc2V0VHlwZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBQYXJhbVZhbHVlOiAg
ICAgICAgICAgeyBwYXJhbS5zZXRWYWx1ZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBQ
YXJhbVZhbHVlVHlwZTogICAgICAgeyBwYXJhbS5zZXRWYWx1ZVR5cGUoc3RyKTsgcmV0dXJuOyB9
CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfQVJFQTogewotICAgICAgSFRNTEFyZWFF
bGVtZW50SW1wbCAmYXJlYSA9IHN0YXRpY19jYXN0PEhUTUxBcmVhRWxlbWVudEltcGwgJj4oZWxl
bWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIEFyZWFBY2Nlc3NLZXk6
ICAgICAgIHsgYXJlYS5zZXRBY2Nlc3NLZXkoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEFy
ZWFBbHQ6ICAgICAgICAgICAgIHsgYXJlYS5zZXRBbHQoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBj
YXNlIEFyZWFDb29yZHM6ICAgICAgICAgIHsgYXJlYS5zZXRDb29yZHMoc3RyKTsgcmV0dXJuOyB9
Ci0gICAgICBjYXNlIEFyZWFIcmVmOiAgICAgICAgICAgIHsgYXJlYS5zZXRIcmVmKHN0cik7IHJl
dHVybjsgfQotICAgICAgY2FzZSBBcmVhTm9IcmVmOiAgICAgICAgICB7IGFyZWEuc2V0Tm9IcmVm
KHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBBcmVhU2hhcGU6
ICAgICAgICAgICB7IGFyZWEuc2V0U2hhcGUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEFy
ZWFUYWJJbmRleDogICAgICAgIHsgYXJlYS5zZXRUYWJJbmRleCh2YWx1ZS50b0ludDMyKGV4ZWMp
KTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEFyZWFUYXJnZXQ6ICAgICAgICAgIHsgYXJlYS5zZXRU
YXJnZXQoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OmFw
cGxldFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVl
LCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxBcHBsZXRFbGVtZW50SW1w
bCYgYXBwbGV0ID0gKnN0YXRpY19jYXN0PEhUTUxBcHBsZXRFbGVtZW50SW1wbCo+KGltcGwoKSk7
CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNlIEFwcGxldEFsaWduOiAgICAgICAg
ICAgeyBhcHBsZXQuc2V0QWxpZ24oc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQXBwbGV0
QWx0OiAgICAgICAgICAgICB7IGFwcGxldC5zZXRBbHQoc3RyKTsgcmV0dXJuOyB9CisgICAgICAg
IGNhc2UgQXBwbGV0QXJjaGl2ZTogICAgICAgICB7IGFwcGxldC5zZXRBcmNoaXZlKHN0cik7IHJl
dHVybjsgfQorICAgICAgICBjYXNlIEFwcGxldENvZGU6ICAgICAgICAgICAgeyBhcHBsZXQuc2V0
Q29kZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBBcHBsZXRDb2RlQmFzZTogICAgICAg
IHsgYXBwbGV0LnNldENvZGVCYXNlKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEFwcGxl
dEhlaWdodDogICAgICAgICAgeyBhcHBsZXQuc2V0SGVpZ2h0KHN0cik7IHJldHVybjsgfQorICAg
ICAgICBjYXNlIEFwcGxldEhzcGFjZTogICAgICAgICAgeyBhcHBsZXQuc2V0SHNwYWNlKHN0cik7
IHJldHVybjsgfQorICAgICAgICBjYXNlIEFwcGxldE5hbWU6ICAgICAgICAgICAgeyBhcHBsZXQu
c2V0TmFtZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBBcHBsZXRPYmplY3Q6ICAgICAg
ICAgIHsgYXBwbGV0LnNldE9iamVjdChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBBcHBs
ZXRWc3BhY2U6ICAgICAgICAgIHsgYXBwbGV0LnNldFZzcGFjZShzdHIpOyByZXR1cm47IH0KKyAg
ICAgICAgY2FzZSBBcHBsZXRXaWR0aDogICAgICAgICAgIHsgYXBwbGV0LnNldFdpZHRoKHN0cik7
IHJldHVybjsgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX1NDUklQVDogewotICAg
ICAgSFRNTFNjcmlwdEVsZW1lbnRJbXBsICZzY3JpcHQgPSBzdGF0aWNfY2FzdDxIVE1MU2NyaXB0
RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBj
YXNlIFNjcmlwdFRleHQ6ICAgICAgICAgICAgeyBzY3JpcHQuc2V0VGV4dChzdHIpOyByZXR1cm47
IH0KLSAgICAgIGNhc2UgU2NyaXB0SHRtbEZvcjogICAgICAgICB7IHNjcmlwdC5zZXRIdG1sRm9y
KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBTY3JpcHRFdmVudDogICAgICAgICAgIHsgc2Ny
aXB0LnNldEV2ZW50KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBTY3JpcHRDaGFyc2V0OiAg
ICAgICAgIHsgc2NyaXB0LnNldENoYXJzZXQoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFNj
cmlwdERlZmVyOiAgICAgICAgICAgeyBzY3JpcHQuc2V0RGVmZXIodmFsdWUudG9Cb29sZWFuKGV4
ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFNjcmlwdFNyYzogICAgICAgICAgICAgeyBzY3Jp
cHQuc2V0U3JjKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBTY3JpcHRUeXBlOiAgICAgICAg
ICAgIHsgc2NyaXB0LnNldFR5cGUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICB9Cit9CisKK3ZvaWQg
SFRNTEVsZW1lbnQ6Om1hcFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3Qg
VmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxNYXBF
bGVtZW50SW1wbCYgbWFwID0gKnN0YXRpY19jYXN0PEhUTUxNYXBFbGVtZW50SW1wbCo+KGltcGwo
KSk7CisgICAgaWYgKHRva2VuID09IE1hcE5hbWUpCisgICAgICAgIC8vIHJlYWQtb25seTogYXJl
YXMKKyAgICAgICAgbWFwLnNldE5hbWUoc3RyKTsKK30KKwordm9pZCBIVE1MRWxlbWVudDo6YXJl
YVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBj
b25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxBcmVhRWxlbWVudEltcGwmIGFy
ZWEgPSAqc3RhdGljX2Nhc3Q8SFRNTEFyZWFFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dp
dGNoICh0b2tlbikgeworICAgICAgICBjYXNlIEFyZWFBY2Nlc3NLZXk6ICAgICAgIHsgYXJlYS5z
ZXRBY2Nlc3NLZXkoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQXJlYUFsdDogICAgICAg
ICAgICAgeyBhcmVhLnNldEFsdChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBBcmVhQ29v
cmRzOiAgICAgICAgICB7IGFyZWEuc2V0Q29vcmRzKHN0cik7IHJldHVybjsgfQorICAgICAgICBj
YXNlIEFyZWFIcmVmOiAgICAgICAgICAgIHsgYXJlYS5zZXRIcmVmKHN0cik7IHJldHVybjsgfQor
ICAgICAgICBjYXNlIEFyZWFOb0hyZWY6ICAgICAgICAgIHsgYXJlYS5zZXROb0hyZWYodmFsdWUu
dG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQXJlYVNoYXBlOiAgICAg
ICAgICAgeyBhcmVhLnNldFNoYXBlKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEFyZWFU
YWJJbmRleDogICAgICAgIHsgYXJlYS5zZXRUYWJJbmRleCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsg
cmV0dXJuOyB9CisgICAgICAgIGNhc2UgQXJlYVRhcmdldDogICAgICAgICAgeyBhcmVhLnNldFRh
cmdldChzdHIpOyByZXR1cm47IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9UQUJM
RTogewotICAgICAgSFRNTFRhYmxlRWxlbWVudEltcGwgJnRhYmxlID0gc3RhdGljX2Nhc3Q8SFRN
TFRhYmxlRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0g
ICAgICBjYXNlIFRhYmxlQ2FwdGlvbjogICAgICAgICB7IHRhYmxlLnNldENhcHRpb24odG9IVE1M
VGFibGVDYXB0aW9uRWxlbWVudCh2YWx1ZSkpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVU
SGVhZDogICAgICAgICAgIHsgdGFibGUuc2V0VEhlYWQodG9IVE1MVGFibGVTZWN0aW9uRWxlbWVu
dCh2YWx1ZSkpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVURm9vdDogICAgICAgICAgIHsg
dGFibGUuc2V0VEZvb3QodG9IVE1MVGFibGVTZWN0aW9uRWxlbWVudCh2YWx1ZSkpOyByZXR1cm47
IH0KLSAgICAgIC8vIHJlYWQtb25seTogcm93cwotICAgICAgLy8gcmVhZC1vbmx5OiB0Ym9kaWVz
Ci0gICAgICBjYXNlIFRhYmxlQWxpZ246ICAgICAgICAgICB7IHRhYmxlLnNldEFsaWduKHN0cik7
IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJsZUJnQ29sb3I6ICAgICAgICAgeyB0YWJsZS5zZXRC
Z0NvbG9yKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJsZUJvcmRlcjogICAgICAgICAg
eyB0YWJsZS5zZXRCb3JkZXIoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlQ2VsbFBh
ZGRpbmc6ICAgICB7IHRhYmxlLnNldENlbGxQYWRkaW5nKHN0cik7IHJldHVybjsgfQotICAgICAg
Y2FzZSBUYWJsZUNlbGxTcGFjaW5nOiAgICAgeyB0YWJsZS5zZXRDZWxsU3BhY2luZyhzdHIpOyBy
ZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVGcmFtZTogICAgICAgICAgIHsgdGFibGUuc2V0RnJh
bWUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlUnVsZXM6ICAgICAgICAgICB7IHRh
YmxlLnNldFJ1bGVzKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJsZVN1bW1hcnk6ICAg
ICAgICAgeyB0YWJsZS5zZXRTdW1tYXJ5KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJs
ZVdpZHRoOiAgICAgICAgICAgeyB0YWJsZS5zZXRXaWR0aChzdHIpOyByZXR1cm47IH0KLSAgICAg
IH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6c2NyaXB0U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIp
Cit7CisgICAgSFRNTFNjcmlwdEVsZW1lbnRJbXBsJiBzY3JpcHQgPSAqc3RhdGljX2Nhc3Q8SFRN
TFNjcmlwdEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAg
ICAgIGNhc2UgU2NyaXB0VGV4dDogICAgICAgICAgICB7IHNjcmlwdC5zZXRUZXh0KHN0cik7IHJl
dHVybjsgfQorICAgICAgICBjYXNlIFNjcmlwdEh0bWxGb3I6ICAgICAgICAgeyBzY3JpcHQuc2V0
SHRtbEZvcihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBTY3JpcHRFdmVudDogICAgICAg
ICAgIHsgc2NyaXB0LnNldEV2ZW50KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFNjcmlw
dENoYXJzZXQ6ICAgICAgICAgeyBzY3JpcHQuc2V0Q2hhcnNldChzdHIpOyByZXR1cm47IH0KKyAg
ICAgICAgY2FzZSBTY3JpcHREZWZlcjogICAgICAgICAgIHsgc2NyaXB0LnNldERlZmVyKHZhbHVl
LnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIFNjcmlwdFNyYzogICAg
ICAgICAgICAgeyBzY3JpcHQuc2V0U3JjKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFNj
cmlwdFR5cGU6ICAgICAgICAgICAgeyBzY3JpcHQuc2V0VHlwZShzdHIpOyByZXR1cm47IH0KICAg
ICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9DQVBUSU9OOiB7Ci0gICAgICBIVE1MVGFibGVD
YXB0aW9uRWxlbWVudEltcGwgJnRhYmxlQ2FwdGlvbiA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZUNh
cHRpb25FbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAg
ICAgIGNhc2UgVGFibGVBbGlnbjogICAgICAgICAgIHsgdGFibGVDYXB0aW9uLnNldEFsaWduKHN0
cik7IHJldHVybjsgfQotICAgICAgfQorfQorCit2b2lkIEhUTUxFbGVtZW50Ojp0YWJsZVNldHRl
cihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBE
T006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxUYWJsZUVsZW1lbnRJbXBsJiB0YWJsZSA9
ICpzdGF0aWNfY2FzdDxIVE1MVGFibGVFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNo
ICh0b2tlbikgeworICAgICAgICBjYXNlIFRhYmxlQ2FwdGlvbjogICAgICAgICB7IHRhYmxlLnNl
dENhcHRpb24odG9IVE1MVGFibGVDYXB0aW9uRWxlbWVudCh2YWx1ZSkpOyByZXR1cm47IH0KKyAg
ICAgICAgY2FzZSBUYWJsZVRIZWFkOiAgICAgICAgICAgeyB0YWJsZS5zZXRUSGVhZCh0b0hUTUxU
YWJsZVNlY3Rpb25FbGVtZW50KHZhbHVlKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxl
VEZvb3Q6ICAgICAgICAgICB7IHRhYmxlLnNldFRGb290KHRvSFRNTFRhYmxlU2VjdGlvbkVsZW1l
bnQodmFsdWUpKTsgcmV0dXJuOyB9CisgICAgICAgIC8vIHJlYWQtb25seTogcm93cworICAgICAg
ICAvLyByZWFkLW9ubHk6IHRib2RpZXMKKyAgICAgICAgY2FzZSBUYWJsZUFsaWduOiAgICAgICAg
ICAgeyB0YWJsZS5zZXRBbGlnbihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZUJn
Q29sb3I6ICAgICAgICAgeyB0YWJsZS5zZXRCZ0NvbG9yKHN0cik7IHJldHVybjsgfQorICAgICAg
ICBjYXNlIFRhYmxlQm9yZGVyOiAgICAgICAgICB7IHRhYmxlLnNldEJvcmRlcihzdHIpOyByZXR1
cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZUNlbGxQYWRkaW5nOiAgICAgeyB0YWJsZS5zZXRDZWxs
UGFkZGluZyhzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZUNlbGxTcGFjaW5nOiAg
ICAgeyB0YWJsZS5zZXRDZWxsU3BhY2luZyhzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBU
YWJsZUZyYW1lOiAgICAgICAgICAgeyB0YWJsZS5zZXRGcmFtZShzdHIpOyByZXR1cm47IH0KKyAg
ICAgICAgY2FzZSBUYWJsZVJ1bGVzOiAgICAgICAgICAgeyB0YWJsZS5zZXRSdWxlcyhzdHIpOyBy
ZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZVN1bW1hcnk6ICAgICAgICAgeyB0YWJsZS5zZXRT
dW1tYXJ5KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxlV2lkdGg6ICAgICAgICAg
ICB7IHRhYmxlLnNldFdpZHRoKHN0cik7IHJldHVybjsgfQogICAgIH0KLSAgICBicmVhazsKLSAg
ICBjYXNlIElEX0NPTDogewotICAgICAgSFRNTFRhYmxlQ29sRWxlbWVudEltcGwgJnRhYmxlQ29s
ID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ29sRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAg
ICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIFRhYmxlQ29sQWxpZ246ICAgICAgICAgICB7
IHRhYmxlQ29sLnNldEFsaWduKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJsZUNvbENo
OiAgICAgICAgICAgICAgeyB0YWJsZUNvbC5zZXRDaChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNh
c2UgVGFibGVDb2xDaE9mZjogICAgICAgICAgIHsgdGFibGVDb2wuc2V0Q2hPZmYoc3RyKTsgcmV0
dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlQ29sU3BhbjogICAgICAgICAgICB7IHRhYmxlQ29sLnNl
dFNwYW4odmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJsZUNv
bFZBbGlnbjogICAgICAgICAgeyB0YWJsZUNvbC5zZXRWQWxpZ24oc3RyKTsgcmV0dXJuOyB9Ci0g
ICAgICBjYXNlIFRhYmxlQ29sV2lkdGg6ICAgICAgICAgICB7IHRhYmxlQ29sLnNldFdpZHRoKHN0
cik7IHJldHVybjsgfQotICAgICAgfQorfQorCit2b2lkIEhUTUxFbGVtZW50Ojp0YWJsZUNhcHRp
b25TZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwg
Y29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MVGFibGVDYXB0aW9uRWxlbWVu
dEltcGwmIHRhYmxlQ2FwdGlvbiA9ICpzdGF0aWNfY2FzdDxIVE1MVGFibGVDYXB0aW9uRWxlbWVu
dEltcGwqPihpbXBsKCkpOworICAgIGlmICh0b2tlbiA9PSBUYWJsZUNhcHRpb25BbGlnbikKKyAg
ICAgICAgdGFibGVDYXB0aW9uLnNldEFsaWduKHN0cik7Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6
OnRhYmxlQ29sU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYg
dmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTFRhYmxlQ29sRWxl
bWVudEltcGwmIHRhYmxlQ29sID0gKnN0YXRpY19jYXN0PEhUTUxUYWJsZUNvbEVsZW1lbnRJbXBs
Kj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgVGFibGVDb2xB
bGlnbjogICAgICAgICAgIHsgdGFibGVDb2wuc2V0QWxpZ24oc3RyKTsgcmV0dXJuOyB9CisgICAg
ICAgIGNhc2UgVGFibGVDb2xDaDogICAgICAgICAgICAgIHsgdGFibGVDb2wuc2V0Q2goc3RyKTsg
cmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGFibGVDb2xDaE9mZjogICAgICAgICAgIHsgdGFibGVD
b2wuc2V0Q2hPZmYoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGFibGVDb2xTcGFuOiAg
ICAgICAgICAgIHsgdGFibGVDb2wuc2V0U3Bhbih2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJu
OyB9CisgICAgICAgIGNhc2UgVGFibGVDb2xWQWxpZ246ICAgICAgICAgIHsgdGFibGVDb2wuc2V0
VkFsaWduKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxlQ29sV2lkdGg6ICAgICAg
ICAgICB7IHRhYmxlQ29sLnNldFdpZHRoKHN0cik7IHJldHVybjsgfQogICAgIH0KLSAgICBicmVh
azsKLSAgICBjYXNlIElEX1RIRUFEOgotICAgIGNhc2UgSURfVEJPRFk6Ci0gICAgY2FzZSBJRF9U
Rk9PVDogewotICAgICAgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsICZ0YWJsZVNlY3Rpb24g
PSBzdGF0aWNfY2FzdDxIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0g
ICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIFRhYmxlU2VjdGlvbkFsaWduOiAgICAg
ICAgICAgeyB0YWJsZVNlY3Rpb24uc2V0QWxpZ24oc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNl
IFRhYmxlU2VjdGlvbkNoOiAgICAgICAgICAgICAgeyB0YWJsZVNlY3Rpb24uc2V0Q2goc3RyKTsg
cmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlU2VjdGlvbkNoT2ZmOiAgICAgICAgICAgeyB0YWJs
ZVNlY3Rpb24uc2V0Q2hPZmYoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlU2VjdGlv
blZBbGlnbjogICAgICAgICAgeyB0YWJsZVNlY3Rpb24uc2V0VkFsaWduKHN0cik7IHJldHVybjsg
fQotICAgICAgLy8gcmVhZC1vbmx5OiByb3dzCi0gICAgICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1l
bnQ6OnRhYmxlU2VjdGlvblNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3Qg
VmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxUYWJs
ZVNlY3Rpb25FbGVtZW50SW1wbCYgdGFibGVTZWN0aW9uID0gKnN0YXRpY19jYXN0PEhUTUxUYWJs
ZVNlY3Rpb25FbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAg
ICAgICBjYXNlIFRhYmxlU2VjdGlvbkFsaWduOiAgICAgICAgICAgeyB0YWJsZVNlY3Rpb24uc2V0
QWxpZ24oc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGFibGVTZWN0aW9uQ2g6ICAgICAg
ICAgICAgICB7IHRhYmxlU2VjdGlvbi5zZXRDaChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2Fz
ZSBUYWJsZVNlY3Rpb25DaE9mZjogICAgICAgICAgIHsgdGFibGVTZWN0aW9uLnNldENoT2ZmKHN0
cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxlU2VjdGlvblZBbGlnbjogICAgICAgICAg
eyB0YWJsZVNlY3Rpb24uc2V0VkFsaWduKHN0cik7IHJldHVybjsgfQorICAgICAgICAvLyByZWFk
LW9ubHk6IHJvd3MKICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9UUjogewotICAgICAg
SFRNTFRhYmxlUm93RWxlbWVudEltcGwgJnRhYmxlUm93ID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxl
Um93RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAg
ICAvLyByZWFkLW9ubHk6IHJvd0luZGV4Ci0gICAgICAvLyByZWFkLW9ubHk6IHNlY3Rpb25Sb3dJ
bmRleAotICAgICAgLy8gcmVhZC1vbmx5OiBjZWxscwotICAgICAgY2FzZSBUYWJsZVJvd0FsaWdu
OiAgICAgICAgICAgeyB0YWJsZVJvdy5zZXRBbGlnbihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNh
c2UgVGFibGVSb3dCZ0NvbG9yOiAgICAgICAgIHsgdGFibGVSb3cuc2V0QmdDb2xvcihzdHIpOyBy
ZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVSb3dDaDogICAgICAgICAgICAgIHsgdGFibGVSb3cu
c2V0Q2goc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlUm93Q2hPZmY6ICAgICAgICAg
ICB7IHRhYmxlUm93LnNldENoT2ZmKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJsZVJv
d1ZBbGlnbjogICAgICAgICAgeyB0YWJsZVJvdy5zZXRWQWxpZ24oc3RyKTsgcmV0dXJuOyB9Ci0g
ICAgICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OnRhYmxlUm93U2V0dGVyKEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5n
JiBzdHIpCit7CisgICAgSFRNTFRhYmxlUm93RWxlbWVudEltcGwmIHRhYmxlUm93ID0gKnN0YXRp
Y19jYXN0PEhUTUxUYWJsZVJvd0VsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRv
a2VuKSB7CisgICAgICAgIC8vIHJlYWQtb25seTogcm93SW5kZXgKKyAgICAgICAgLy8gcmVhZC1v
bmx5OiBzZWN0aW9uUm93SW5kZXgKKyAgICAgICAgLy8gcmVhZC1vbmx5OiBjZWxscworICAgICAg
ICBjYXNlIFRhYmxlUm93QWxpZ246ICAgICAgICAgICB7IHRhYmxlUm93LnNldEFsaWduKHN0cik7
IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxlUm93QmdDb2xvcjogICAgICAgICB7IHRhYmxl
Um93LnNldEJnQ29sb3Ioc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGFibGVSb3dDaDog
ICAgICAgICAgICAgIHsgdGFibGVSb3cuc2V0Q2goc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNh
c2UgVGFibGVSb3dDaE9mZjogICAgICAgICAgIHsgdGFibGVSb3cuc2V0Q2hPZmYoc3RyKTsgcmV0
dXJuOyB9CisgICAgICAgIGNhc2UgVGFibGVSb3dWQWxpZ246ICAgICAgICAgIHsgdGFibGVSb3cu
c2V0VkFsaWduKHN0cik7IHJldHVybjsgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElE
X1RIOgotICAgIGNhc2UgSURfVEQ6IHsKLSAgICAgIEhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbCAm
dGFibGVDZWxsID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsICY+KGVsZW1l
bnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgLy8gcmVhZC1vbmx5OiBjZWxsSW5k
ZXgKLSAgICAgIGNhc2UgVGFibGVDZWxsQWJicjogICAgICAgICAgICB7IHRhYmxlQ2VsbC5zZXRB
YmJyKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJsZUNlbGxBbGlnbjogICAgICAgICAg
IHsgdGFibGVDZWxsLnNldEFsaWduKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJsZUNl
bGxBeGlzOiAgICAgICAgICAgIHsgdGFibGVDZWxsLnNldEF4aXMoc3RyKTsgcmV0dXJuOyB9Ci0g
ICAgICBjYXNlIFRhYmxlQ2VsbEJnQ29sb3I6ICAgICAgICAgeyB0YWJsZUNlbGwuc2V0QmdDb2xv
cihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVDZWxsQ2g6ICAgICAgICAgICAgICB7
IHRhYmxlQ2VsbC5zZXRDaChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVDZWxsQ2hP
ZmY6ICAgICAgICAgICB7IHRhYmxlQ2VsbC5zZXRDaE9mZihzdHIpOyByZXR1cm47IH0KLSAgICAg
IGNhc2UgVGFibGVDZWxsQ29sU3BhbjogICAgICAgICB7IHRhYmxlQ2VsbC5zZXRDb2xTcGFuKHZh
bHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVDZWxsSGVhZGVy
czogICAgICAgICB7IHRhYmxlQ2VsbC5zZXRIZWFkZXJzKHN0cik7IHJldHVybjsgfQotICAgICAg
Y2FzZSBUYWJsZUNlbGxIZWlnaHQ6ICAgICAgICAgIHsgdGFibGVDZWxsLnNldEhlaWdodChzdHIp
OyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVDZWxsTm9XcmFwOiAgICAgICAgICB7IHRhYmxl
Q2VsbC5zZXROb1dyYXAodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBj
YXNlIFRhYmxlQ2VsbFJvd1NwYW46ICAgICAgICAgeyB0YWJsZUNlbGwuc2V0Um93U3Bhbih2YWx1
ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlQ2VsbFNjb3BlOiAg
ICAgICAgICAgeyB0YWJsZUNlbGwuc2V0U2NvcGUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNl
IFRhYmxlQ2VsbFZBbGlnbjogICAgICAgICAgeyB0YWJsZUNlbGwuc2V0VkFsaWduKHN0cik7IHJl
dHVybjsgfQotICAgICAgY2FzZSBUYWJsZUNlbGxXaWR0aDogICAgICAgICAgIHsgdGFibGVDZWxs
LnNldFdpZHRoKHN0cik7IHJldHVybjsgfQotICAgICAgfQorfQorCit2b2lkIEhUTUxFbGVtZW50
Ojp0YWJsZUNlbGxTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVl
JiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MVGFibGVDZWxs
RWxlbWVudEltcGwmIHRhYmxlQ2VsbCA9ICpzdGF0aWNfY2FzdDxIVE1MVGFibGVDZWxsRWxlbWVu
dEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgLy8gcmVhZC1v
bmx5OiBjZWxsSW5kZXgKKyAgICAgICAgY2FzZSBUYWJsZUNlbGxBYmJyOiAgICAgICAgICAgIHsg
dGFibGVDZWxsLnNldEFiYnIoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGFibGVDZWxs
QWxpZ246ICAgICAgICAgICB7IHRhYmxlQ2VsbC5zZXRBbGlnbihzdHIpOyByZXR1cm47IH0KKyAg
ICAgICAgY2FzZSBUYWJsZUNlbGxBeGlzOiAgICAgICAgICAgIHsgdGFibGVDZWxsLnNldEF4aXMo
c3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGFibGVDZWxsQmdDb2xvcjogICAgICAgICB7
IHRhYmxlQ2VsbC5zZXRCZ0NvbG9yKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxl
Q2VsbENoOiAgICAgICAgICAgICAgeyB0YWJsZUNlbGwuc2V0Q2goc3RyKTsgcmV0dXJuOyB9Cisg
ICAgICAgIGNhc2UgVGFibGVDZWxsQ2hPZmY6ICAgICAgICAgICB7IHRhYmxlQ2VsbC5zZXRDaE9m
ZihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZUNlbGxDb2xTcGFuOiAgICAgICAg
IHsgdGFibGVDZWxsLnNldENvbFNwYW4odmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQor
ICAgICAgICBjYXNlIFRhYmxlQ2VsbEhlYWRlcnM6ICAgICAgICAgeyB0YWJsZUNlbGwuc2V0SGVh
ZGVycyhzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZUNlbGxIZWlnaHQ6ICAgICAg
ICAgIHsgdGFibGVDZWxsLnNldEhlaWdodChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBU
YWJsZUNlbGxOb1dyYXA6ICAgICAgICAgIHsgdGFibGVDZWxsLnNldE5vV3JhcCh2YWx1ZS50b0Jv
b2xlYW4oZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZUNlbGxSb3dTcGFuOiAg
ICAgICAgIHsgdGFibGVDZWxsLnNldFJvd1NwYW4odmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVy
bjsgfQorICAgICAgICBjYXNlIFRhYmxlQ2VsbFNjb3BlOiAgICAgICAgICAgeyB0YWJsZUNlbGwu
c2V0U2NvcGUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGFibGVDZWxsVkFsaWduOiAg
ICAgICAgICB7IHRhYmxlQ2VsbC5zZXRWQWxpZ24oc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNh
c2UgVGFibGVDZWxsV2lkdGg6ICAgICAgICAgICB7IHRhYmxlQ2VsbC5zZXRXaWR0aChzdHIpOyBy
ZXR1cm47IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9GUkFNRVNFVDogewotICAg
ICAgSFRNTEZyYW1lU2V0RWxlbWVudEltcGwgJmZyYW1lU2V0ID0gc3RhdGljX2Nhc3Q8SFRNTEZy
YW1lU2V0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0g
ICAgICBjYXNlIEZyYW1lU2V0Q29sczogICAgICAgICAgICB7IGZyYW1lU2V0LnNldENvbHMoc3Ry
KTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEZyYW1lU2V0Um93czogICAgICAgICAgICB7IGZyYW1l
U2V0LnNldFJvd3Moc3RyKTsgcmV0dXJuOyB9Ci0gICAgICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1l
bnQ6OmZyYW1lU2V0U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1
ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTEZyYW1lU2V0
RWxlbWVudEltcGwmIGZyYW1lU2V0ID0gKnN0YXRpY19jYXN0PEhUTUxGcmFtZVNldEVsZW1lbnRJ
bXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgRnJhbWVT
ZXRDb2xzOiAgICAgICAgICAgIHsgZnJhbWVTZXQuc2V0Q29scyhzdHIpOyByZXR1cm47IH0KKyAg
ICAgICAgY2FzZSBGcmFtZVNldFJvd3M6ICAgICAgICAgICAgeyBmcmFtZVNldC5zZXRSb3dzKHN0
cik7IHJldHVybjsgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0ZSQU1FOiB7Ci0g
ICAgICBIVE1MRnJhbWVFbGVtZW50SW1wbCAmZnJhbWVFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRN
TEZyYW1lRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0g
ICAgICAgLy8gcmVhZC1vbmx5OiBGcmFtZUNvbnRlbnREb2N1bWVudDoKLSAgICAgIGNhc2UgRnJh
bWVGcmFtZUJvcmRlcjogICAgIHsgZnJhbWVFbGVtZW50LnNldEZyYW1lQm9yZGVyKHN0cik7IHJl
dHVybjsgfQotICAgICAgY2FzZSBGcmFtZUxvbmdEZXNjOiAgICAgICAgeyBmcmFtZUVsZW1lbnQu
c2V0TG9uZ0Rlc2Moc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEZyYW1lTWFyZ2luSGVpZ2h0
OiAgICB7IGZyYW1lRWxlbWVudC5zZXRNYXJnaW5IZWlnaHQoc3RyKTsgcmV0dXJuOyB9Ci0gICAg
ICBjYXNlIEZyYW1lTWFyZ2luV2lkdGg6ICAgICB7IGZyYW1lRWxlbWVudC5zZXRNYXJnaW5XaWR0
aChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgRnJhbWVOYW1lOiAgICAgICAgICAgIHsgZnJh
bWVFbGVtZW50LnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEZyYW1lTm9SZXNp
emU6ICAgICAgICB7IGZyYW1lRWxlbWVudC5zZXROb1Jlc2l6ZSh2YWx1ZS50b0Jvb2xlYW4oZXhl
YykpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgRnJhbWVTY3JvbGxpbmc6ICAgICAgIHsgZnJhbWVF
bGVtZW50LnNldFNjcm9sbGluZyhzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgRnJhbWVTcmM6
ICAgICAgICAgICAgIHsgZnJhbWVFbGVtZW50LnNldFNyYyhzdHIpOyByZXR1cm47IH0KLSAgICAg
IGNhc2UgRnJhbWVMb2NhdGlvbjogICAgICAgIHsgZnJhbWVFbGVtZW50LnNldExvY2F0aW9uKHN0
cik7IHJldHVybjsgfQotICAgICAgfQorfQorCit2b2lkIEhUTUxFbGVtZW50OjpmcmFtZVNldHRl
cihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBE
T006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxGcmFtZUVsZW1lbnRJbXBsJiBmcmFtZUVs
ZW1lbnQgPSAqc3RhdGljX2Nhc3Q8SFRNTEZyYW1lRWxlbWVudEltcGwqPihpbXBsKCkpOworICAg
IHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgLy8gcmVhZC1vbmx5OiBGcmFtZUNvbnRlbnREb2N1
bWVudDoKKyAgICAgICAgY2FzZSBGcmFtZUZyYW1lQm9yZGVyOiAgICAgeyBmcmFtZUVsZW1lbnQu
c2V0RnJhbWVCb3JkZXIoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgRnJhbWVMb25nRGVz
YzogICAgICAgIHsgZnJhbWVFbGVtZW50LnNldExvbmdEZXNjKHN0cik7IHJldHVybjsgfQorICAg
ICAgICBjYXNlIEZyYW1lTWFyZ2luSGVpZ2h0OiAgICB7IGZyYW1lRWxlbWVudC5zZXRNYXJnaW5I
ZWlnaHQoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgRnJhbWVNYXJnaW5XaWR0aDogICAg
IHsgZnJhbWVFbGVtZW50LnNldE1hcmdpbldpZHRoKHN0cik7IHJldHVybjsgfQorICAgICAgICBj
YXNlIEZyYW1lTmFtZTogICAgICAgICAgICB7IGZyYW1lRWxlbWVudC5zZXROYW1lKHN0cik7IHJl
dHVybjsgfQorICAgICAgICBjYXNlIEZyYW1lTm9SZXNpemU6ICAgICAgICB7IGZyYW1lRWxlbWVu
dC5zZXROb1Jlc2l6ZSh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAg
Y2FzZSBGcmFtZVNjcm9sbGluZzogICAgICAgeyBmcmFtZUVsZW1lbnQuc2V0U2Nyb2xsaW5nKHN0
cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEZyYW1lU3JjOiAgICAgICAgICAgICB7IGZyYW1l
RWxlbWVudC5zZXRTcmMoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgRnJhbWVMb2NhdGlv
bjogICAgICAgIHsgZnJhbWVFbGVtZW50LnNldExvY2F0aW9uKHN0cik7IHJldHVybjsgfQogICAg
IH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0lGUkFNRTogewotICAgICAgSFRNTElGcmFtZUVs
ZW1lbnRJbXBsICZpRnJhbWUgPSBzdGF0aWNfY2FzdDxIVE1MSUZyYW1lRWxlbWVudEltcGwgJj4o
ZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIElGcmFtZUFsaWdu
OiAgICAgICAgICAgeyBpRnJhbWUuc2V0QWxpZ24oc3RyKTsgcmV0dXJuOyB9Ci0gICAgICAvLyBy
ZWFkLW9ubHk6IElGcmFtZUNvbnRlbnREb2N1bWVudAotICAgICAgY2FzZSBJRnJhbWVGcmFtZUJv
cmRlcjogICAgIHsgaUZyYW1lLnNldEZyYW1lQm9yZGVyKHN0cik7IHJldHVybjsgfQotICAgICAg
Y2FzZSBJRnJhbWVIZWlnaHQ6ICAgICAgICAgIHsgaUZyYW1lLnNldEhlaWdodChzdHIpOyByZXR1
cm47IH0KLSAgICAgIGNhc2UgSUZyYW1lTG9uZ0Rlc2M6ICAgICAgICB7IGlGcmFtZS5zZXRMb25n
RGVzYyhzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSUZyYW1lTWFyZ2luSGVpZ2h0OiAgICB7
IGlGcmFtZS5zZXRNYXJnaW5IZWlnaHQoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElGcmFt
ZU1hcmdpbldpZHRoOiAgICAgeyBpRnJhbWUuc2V0TWFyZ2luV2lkdGgoc3RyKTsgcmV0dXJuOyB9
Ci0gICAgICBjYXNlIElGcmFtZU5hbWU6ICAgICAgICAgICAgeyBpRnJhbWUuc2V0TmFtZShzdHIp
OyByZXR1cm47IH0KLSAgICAgIGNhc2UgSUZyYW1lU2Nyb2xsaW5nOiAgICAgICB7IGlGcmFtZS5z
ZXRTY3JvbGxpbmcoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElGcmFtZVNyYzogICAgICAg
ICAgICAgeyBpRnJhbWUuc2V0U3JjKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBJRnJhbWVX
aWR0aDogICAgICAgICAgIHsgaUZyYW1lLnNldFdpZHRoKHN0cik7IHJldHVybjsgfQotICAgICAg
fQotICAgICAgYnJlYWs7Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OmlGcmFtZVNldHRlcihFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRP
TVN0cmluZyYgc3RyKQoreworICAgIEhUTUxJRnJhbWVFbGVtZW50SW1wbCYgaUZyYW1lID0gKnN0
YXRpY19jYXN0PEhUTUxJRnJhbWVFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0
b2tlbikgeworICAgICAgICBjYXNlIElGcmFtZUFsaWduOiAgICAgICAgICAgeyBpRnJhbWUuc2V0
QWxpZ24oc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIC8vIHJlYWQtb25seTogSUZyYW1lQ29udGVu
dERvY3VtZW50CisgICAgICAgIGNhc2UgSUZyYW1lRnJhbWVCb3JkZXI6ICAgICB7IGlGcmFtZS5z
ZXRGcmFtZUJvcmRlcihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJRnJhbWVIZWlnaHQ6
ICAgICAgICAgIHsgaUZyYW1lLnNldEhlaWdodChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2Fz
ZSBJRnJhbWVMb25nRGVzYzogICAgICAgIHsgaUZyYW1lLnNldExvbmdEZXNjKHN0cik7IHJldHVy
bjsgfQorICAgICAgICBjYXNlIElGcmFtZU1hcmdpbkhlaWdodDogICAgeyBpRnJhbWUuc2V0TWFy
Z2luSGVpZ2h0KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIElGcmFtZU1hcmdpbldpZHRo
OiAgICAgeyBpRnJhbWUuc2V0TWFyZ2luV2lkdGgoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNh
c2UgSUZyYW1lTmFtZTogICAgICAgICAgICB7IGlGcmFtZS5zZXROYW1lKHN0cik7IHJldHVybjsg
fQorICAgICAgICBjYXNlIElGcmFtZVNjcm9sbGluZzogICAgICAgeyBpRnJhbWUuc2V0U2Nyb2xs
aW5nKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIElGcmFtZVNyYzogICAgICAgICAgICAg
eyBpRnJhbWUuc2V0U3JjKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIElGcmFtZVdpZHRo
OiAgICAgICAgICAgeyBpRnJhbWUuc2V0V2lkdGgoc3RyKTsgcmV0dXJuOyB9CiAgICAgfQotICB9
Cit9CiAKLSAgLy8gZ2VuZXJpYyBwcm9wZXJ0aWVzCi0gIHN3aXRjaCAodG9rZW4pIHsKLSAgY2Fz
ZSBFbGVtZW50SWQ6Ci0gICAgZWxlbWVudC5zZXRJZChzdHIpOwotICAgIHJldHVybjsKLSAgY2Fz
ZSBFbGVtZW50VGl0bGU6Ci0gICAgZWxlbWVudC5zZXRUaXRsZShzdHIpOwotICAgIHJldHVybjsK
LSAgY2FzZSBFbGVtZW50TGFuZzoKLSAgICBlbGVtZW50LnNldExhbmcoc3RyKTsKLSAgICByZXR1
cm47Ci0gIGNhc2UgRWxlbWVudERpcjoKLSAgICBlbGVtZW50LnNldERpcihzdHIpOwotICAgIHJl
dHVybjsKLSAgY2FzZSBFbGVtZW50Q2xhc3NOYW1lOgotICAgIGVsZW1lbnQuc2V0Q2xhc3NOYW1l
KHN0cik7Ci0gICAgcmV0dXJuOwotICBjYXNlIEVsZW1lbnRJbm5lckhUTUw6Ci0gICAgZWxlbWVu
dC5zZXRJbm5lckhUTUwoc3RyLCBleGNlcHRpb24pOwotICAgIHJldHVybjsKLSAgY2FzZSBFbGVt
ZW50SW5uZXJUZXh0OgotICAgIGVsZW1lbnQuc2V0SW5uZXJUZXh0KHN0ciwgZXhjZXB0aW9uKTsK
LSAgICByZXR1cm47Ci0gIGNhc2UgRWxlbWVudE91dGVySFRNTDoKLSAgICBlbGVtZW50LnNldE91
dGVySFRNTChzdHIsIGV4Y2VwdGlvbik7Ci0gICAgcmV0dXJuOwotICBjYXNlIEVsZW1lbnRPdXRl
clRleHQ6Ci0gICAgZWxlbWVudC5zZXRPdXRlclRleHQoc3RyLCBleGNlcHRpb24pOwotICAgIHJl
dHVybjsKLSAgY2FzZSBFbGVtZW50Q29udGVudEVkaXRhYmxlOgotICAgIGVsZW1lbnQuc2V0Q29u
dGVudEVkaXRhYmxlKHN0cik7Ci0gICAgcmV0dXJuOwotICBkZWZhdWx0OgotICAgIGtkV2Fybmlu
ZygpIDw8ICJLSlM6OkhUTUxFbGVtZW50OjpwdXRWYWx1ZSB1bmhhbmRsZWQgdG9rZW4gIiA8PCB0
b2tlbiA8PCAiIHRoaXNUYWc9IiA8PCBlbGVtZW50LnRhZ05hbWUoKS5zdHJpbmcoKSA8PCAiIHN0
cj0iIDw8IHN0ci5zdHJpbmcoKSA8PCBlbmRsOwotICB9Cit2b2lkIEhUTUxFbGVtZW50OjptYXJx
dWVlU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUs
IGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgLy8gRklYTUU6IEZpbmQgb3V0IHdo
YXQgV2luSUUgc3VwcG9ydHMgYW5kIGltcGxlbWVudCBpdC4KK30KKwordm9pZCBIVE1MRWxlbWVu
dDo6cHV0VmFsdWUoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1
ZSwgaW50KQoreworICAgIERPTUV4Y2VwdGlvblRyYW5zbGF0b3IgZXhjZXB0aW9uKGV4ZWMpOwor
ICAgIERPTTo6RE9NU3RyaW5nIHN0ciA9IHZhbHVlLmlzQShOdWxsVHlwZSkgPyBET006OkRPTVN0
cmluZygpIDogdmFsdWUudG9TdHJpbmcoZXhlYykuc3RyaW5nKCk7CisgCisgICAgLy8gQ2hlY2sg
b3VyIHNldCBvZiBnZW5lcmljIHByb3BlcnRpZXMgZmlyc3QuCisgICAgSFRNTEVsZW1lbnRJbXBs
ICZlbGVtZW50ID0gKnN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCAqPihpbXBsKCkpOworICAg
IHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBFbGVtZW50SWQ6CisgICAgICAgICAgICBl
bGVtZW50LnNldElkKHN0cik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgRWxl
bWVudFRpdGxlOgorICAgICAgICAgICAgZWxlbWVudC5zZXRUaXRsZShzdHIpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICBjYXNlIEVsZW1lbnRMYW5nOgorICAgICAgICAgICAgZWxlbWVu
dC5zZXRMYW5nKHN0cik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgRWxlbWVu
dERpcjoKKyAgICAgICAgICAgIGVsZW1lbnQuc2V0RGlyKHN0cik7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIGNhc2UgRWxlbWVudENsYXNzTmFtZToKKyAgICAgICAgICAgIGVsZW1lbnQu
c2V0Q2xhc3NOYW1lKHN0cik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgRWxl
bWVudElubmVySFRNTDoKKyAgICAgICAgICAgIGVsZW1lbnQuc2V0SW5uZXJIVE1MKHN0ciwgZXhj
ZXB0aW9uKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBFbGVtZW50SW5uZXJU
ZXh0OgorICAgICAgICAgICAgZWxlbWVudC5zZXRJbm5lclRleHQoc3RyLCBleGNlcHRpb24pOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIEVsZW1lbnRPdXRlckhUTUw6CisgICAg
ICAgICAgICBlbGVtZW50LnNldE91dGVySFRNTChzdHIsIGV4Y2VwdGlvbik7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIGNhc2UgRWxlbWVudE91dGVyVGV4dDoKKyAgICAgICAgICAgIGVs
ZW1lbnQuc2V0T3V0ZXJUZXh0KHN0ciwgZXhjZXB0aW9uKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgY2FzZSBFbGVtZW50Q29udGVudEVkaXRhYmxlOgorICAgICAgICAgICAgZWxlbWVu
dC5zZXRDb250ZW50RWRpdGFibGUoc3RyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICAvLyBOb3cgY2hlY2sgZm9yIHByb3BlcnRpZXMgdGhhdCBhcHBseSB0byBhIHNwZWNpZmlj
IGVsZW1lbnQgdHlwZS4KKyAgICBjb25zdCBHZXRTZXRJbmZvKiBpbmZvID0gZ2V0U2V0SW5mbygp
OworICAgIGlmIChpbmZvICYmIGluZm8tPm1fc2V0dGVyKQorICAgICAgICByZXR1cm4gKHRoaXMt
PiooaW5mby0+bV9zZXR0ZXIpKShleGVjLCB0b2tlbiwgdmFsdWUsIHN0cik7ICAKIH0KIAogSFRN
TEVsZW1lbnRJbXBsICp0b0hUTUxFbGVtZW50KFZhbHVlSW1wICp2YWwpCkBAIC0zMDU4LDIzICsz
MjE3LDE3IEBAIEhUTUxFbGVtZW50SW1wbCAqdG9IVE1MRWxlbWVudChWYWx1ZUltcCAKIAogSFRN
TFRhYmxlQ2FwdGlvbkVsZW1lbnRJbXBsICp0b0hUTUxUYWJsZUNhcHRpb25FbGVtZW50KFZhbHVl
SW1wICp2YWwpCiB7Ci0gICAgaWYgKEhUTUxFbGVtZW50SW1wbCAqZSA9IHRvSFRNTEVsZW1lbnQo
dmFsKSkKLSAgICAgICAgc3dpdGNoIChlLT5pZCgpKSB7Ci0gICAgICAgICAgICBjYXNlIElEX0NB
UFRJT046Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxUYWJsZUNhcHRp
b25FbGVtZW50SW1wbCAqPihlKTsKLSAgICAgICAgfQorICAgIEhUTUxFbGVtZW50SW1wbCAqZSA9
IHRvSFRNTEVsZW1lbnQodmFsKTsKKyAgICBpZiAoZSAmJiBlLT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6Y2FwdGlvbigpKSkKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxUYWJsZUNhcHRp
b25FbGVtZW50SW1wbCAqPihlKTsKICAgICByZXR1cm4gMDsKIH0KIAogSFRNTFRhYmxlU2VjdGlv
bkVsZW1lbnRJbXBsICp0b0hUTUxUYWJsZVNlY3Rpb25FbGVtZW50KFZhbHVlSW1wICp2YWwpCiB7
Ci0gICAgaWYgKEhUTUxFbGVtZW50SW1wbCAqZSA9IHRvSFRNTEVsZW1lbnQodmFsKSkKLSAgICAg
ICAgc3dpdGNoIChlLT5pZCgpKSB7Ci0gICAgICAgICAgICBjYXNlIElEX1RIRUFEOgotICAgICAg
ICAgICAgY2FzZSBJRF9UQk9EWToKLSAgICAgICAgICAgIGNhc2UgSURfVEZPT1Q6Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbCAq
PihlKTsKLSAgICAgICAgfQorICAgIEhUTUxFbGVtZW50SW1wbCAqZSA9IHRvSFRNTEVsZW1lbnQo
dmFsKTsKKyAgICBpZiAoZSAmJiAoZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRoZWFkKCkpIHx8
IGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0Ym9keSgpKSB8fCBlLT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6dGZvb3QoKSkpKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlU2Vj
dGlvbkVsZW1lbnRJbXBsICo+KGUpOwogICAgIHJldHVybiAwOwogfQogCkBAIC0zMTIzLDEwICsz
Mjc2LDEwIEBAIFZhbHVlIEtKUzo6SFRNTENvbGxlY3Rpb246OnRyeUdldChFeGVjU3QKICAgZWxz
ZSBpZiAocHJvcGVydHlOYW1lID09ICJzZWxlY3RlZEluZGV4IikgewogICAgIC8vIE5PTi1TVEFO
REFSRCBvcHRpb25zLnNlbGVjdGVkSW5kZXgKICAgICBOb2RlSW1wbCAqb3B0aW9uID0gY29sbGVj
dGlvbi5pdGVtKDApOwotICAgIGlmIChvcHRpb24tPmlkKCkgPT0gSURfT1BUSU9OKSB7CisgICAg
aWYgKG9wdGlvbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9wdGlvbigpKSkgewogICAgICAgTm9k
ZUltcGwgKnNlbGVjdCA9IG9wdGlvbjsKICAgICAgIHdoaWxlICgoc2VsZWN0ID0gc2VsZWN0LT5w
YXJlbnROb2RlKCkpKQotICAgICAgICBpZiAoc2VsZWN0LT5pZCgpID09IElEX1NFTEVDVCkKKyAg
ICAgICAgaWYgKHNlbGVjdC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnNlbGVjdCgpKSkKIAkgIHJl
dHVybiBOdW1iZXIoc3RhdGljX2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnRJbXBsICo+KHNlbGVjdCkt
PnNlbGVjdGVkSW5kZXgoKSk7CiAgICAgfQogICAgIHJldHVybiBVbmRlZmluZWQoKTsKQEAgLTMz
MTQsNyArMzQ2Nyw3IEBAIHZvaWQgS0pTOjpIVE1MU2VsZWN0Q29sbGVjdGlvbjo6dHJ5UHV0KEUK
IAogICAvLyBpcyB2IGFuIG9wdGlvbiBlbGVtZW50ID8KICAgTm9kZUltcGwgKm9wdGlvbiA9IHRv
Tm9kZSh2YWx1ZSk7Ci0gIGlmICghb3B0aW9uIHx8IG9wdGlvbi0+aWQoKSAhPSBJRF9PUFRJT04p
CisgIGlmICghb3B0aW9uIHx8ICFvcHRpb24tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvcHRpb24o
KSkpCiAgICAgcmV0dXJuOwogCiAgIGludCBleGNlcHRpb24gPSAwOwpJbmRleDoga2h0bWwvZWNt
YS9ranNfaHRtbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1s
L2VjbWEva2pzX2h0bWwuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40NwpkaWZmIC11IC1wIC1y
MS40NyBraHRtbC9lY21hL2tqc19odG1sLmgKLS0tIGtodG1sL2VjbWEva2pzX2h0bWwuaAkyMiBK
dW4gMjAwNSAwMDo0ODo0NCAtMDAwMAkxLjQ3CisrKyBraHRtbC9lY21hL2tqc19odG1sLmgJMjMg
SnVuIDIwMDUgMDE6MTA6MzUgLTAwMDAKQEAgLTg1LDYgKzg1LDEzMSBAQCBuYW1lc3BhY2UgS0pT
IHsKICAgICAgIGNhcHRpb25faW5mbywgY29sX2luZm8sIHRhYmxlc2VjdGlvbl9pbmZvLCB0cl9p
bmZvLAogICAgICAgdGFibGVjZWxsX2luZm8sIGZyYW1lU2V0X2luZm8sIGZyYW1lX2luZm8sIGlG
cmFtZV9pbmZvLCBtYXJxdWVlX2luZm87CiAKKyAgICAvLyBGSVhNRTogTWlnaHQgbWFrZSBzZW5z
ZSB0byBjb21iaW5lIHRoaXMgd2l0aCBDbGFzc0luZm8gc29tZSBkYXkuCisgICAgdHlwZWRlZiBW
YWx1ZSAoSFRNTEVsZW1lbnQ6OipHZXR0ZXJGdW5jdGlvbikoRXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4pIGNvbnN0OworICAgIHR5cGVkZWYgdm9pZCAoSFRNTEVsZW1lbnQ6OipTZXR0ZXJGdW5j
dGlvbikoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29u
c3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgc3RydWN0IEdldFNldEluZm8geyBHZXR0ZXJG
dW5jdGlvbiBtX2dldHRlcjsgU2V0dGVyRnVuY3Rpb24gbV9zZXR0ZXI7IH07CisgICAgY29uc3Qg
R2V0U2V0SW5mbyogZ2V0U2V0SW5mbygpIGNvbnN0OworICAgIHN0YXRpYyBjb25zdCBHZXRTZXRJ
bmZvIGh0bWxfZ2V0c2V0LCBoZWFkX2dldHNldCwgbGlua19nZXRzZXQsIHRpdGxlX2dldHNldCwK
KyAgICAgIG1ldGFfZ2V0c2V0LCBiYXNlX2dldHNldCwgaXNJbmRleF9nZXRzZXQsIHN0eWxlX2dl
dHNldCwgYm9keV9nZXRzZXQsIGZvcm1fZ2V0c2V0LAorICAgICAgc2VsZWN0X2dldHNldCwgb3B0
R3JvdXBfZ2V0c2V0LCBvcHRpb25fZ2V0c2V0LCBpbnB1dF9nZXRzZXQsIHRleHRBcmVhX2dldHNl
dCwKKyAgICAgIGJ1dHRvbl9nZXRzZXQsIGxhYmVsX2dldHNldCwgZmllbGRTZXRfZ2V0c2V0LCBs
ZWdlbmRfZ2V0c2V0LCB1bF9nZXRzZXQsIG9sX2dldHNldCwKKyAgICAgIGRsX2dldHNldCwgZGly
X2dldHNldCwgbWVudV9nZXRzZXQsIGxpX2dldHNldCwgZGl2X2dldHNldCwgcF9nZXRzZXQsIGhl
YWRpbmdfZ2V0c2V0LAorICAgICAgYmxvY2tRdW90ZV9nZXRzZXQsIHFfZ2V0c2V0LCBwcmVfZ2V0
c2V0LCBicl9nZXRzZXQsIGJhc2VGb250X2dldHNldCwgZm9udF9nZXRzZXQsCisgICAgICBocl9n
ZXRzZXQsIG1vZF9nZXRzZXQsIGFfZ2V0c2V0LCBjYW52YXNfZ2V0c2V0LCBpbWdfZ2V0c2V0LCBv
YmplY3RfZ2V0c2V0LCBwYXJhbV9nZXRzZXQsCisgICAgICBhcHBsZXRfZ2V0c2V0LCBtYXBfZ2V0
c2V0LCBhcmVhX2dldHNldCwgc2NyaXB0X2dldHNldCwgdGFibGVfZ2V0c2V0LAorICAgICAgY2Fw
dGlvbl9nZXRzZXQsIGNvbF9nZXRzZXQsIHRhYmxlc2VjdGlvbl9nZXRzZXQsIHRyX2dldHNldCwK
KyAgICAgIHRhYmxlY2VsbF9nZXRzZXQsIGZyYW1lU2V0X2dldHNldCwgZnJhbWVfZ2V0c2V0LCBp
RnJhbWVfZ2V0c2V0LCBtYXJxdWVlX2dldHNldDsKKworICAgIFZhbHVlIGh0bWxHZXR0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGh0bWxTZXR0ZXIoRXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpE
T01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgaGVhZEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGlu
dCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgaGVhZFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsK
KyAgICBWYWx1ZSBsaW5rR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsK
KyAgICB2b2lkICBsaW5rU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBW
YWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIHRpdGxl
R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICB0aXRs
ZVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBj
b25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBtZXRhR2V0dGVyKEV4ZWNTdGF0
ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBtZXRhU2V0dGVyKEV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3Ry
aW5nJiBzdHIpOworICAgIFZhbHVlIGJhc2VHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0OworICAgIHZvaWQgIGJhc2VTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAg
VmFsdWUgaXNJbmRleEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7Cisg
ICAgdm9pZCAgaXNJbmRleFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3Qg
VmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBzdHls
ZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgc3R5
bGVTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwg
Y29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgYm9keUdldHRlcihFeGVjU3Rh
dGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgYm9keVNldHRlcihFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0
cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBmb3JtR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRv
a2VuKSBjb25zdDsKKyAgICB2b2lkICBmb3JtU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAg
IFZhbHVlIHNlbGVjdEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7Cisg
ICAgdm9pZCAgc2VsZWN0U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBW
YWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIG9wdEdy
b3VwR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBv
cHRHcm91cFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZh
bHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBvcHRpb25HZXR0ZXIo
RXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIG9wdGlvblNldHRl
cihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBE
T006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBpbnB1dEdldHRlcihFeGVjU3RhdGUqIGV4
ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgaW5wdXRTZXR0ZXIoRXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcm
IHN0cik7CisgICAgVmFsdWUgdGV4dEFyZWFHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0OworICAgIHZvaWQgIHRleHRBcmVhU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOwor
ICAgIFZhbHVlIGJ1dHRvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7
CisgICAgdm9pZCAgYnV0dG9uU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25z
dCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIGxh
YmVsR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBs
YWJlbFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVl
LCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBmaWVsZFNldEdldHRlcihF
eGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgZmllbGRTZXRTZXR0
ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3Qg
RE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgbGVnZW5kR2V0dGVyKEV4ZWNTdGF0ZSog
ZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBsZWdlbmRTZXR0ZXIoRXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJp
bmcmIHN0cik7CisgICAgVmFsdWUgdUxpc3RHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0OworICAgIHZvaWQgIHVMaXN0U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAg
IFZhbHVlIG9MaXN0R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAg
ICB2b2lkICBvTGlzdFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFs
dWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBkTGlzdEdl
dHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgZExpc3RT
ZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29u
c3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgZGlyR2V0dGVyKEV4ZWNTdGF0ZSog
ZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBkaXJTZXR0ZXIoRXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcm
IHN0cik7CisgICAgVmFsdWUgbWVudUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikg
Y29uc3Q7CisgICAgdm9pZCAgbWVudVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwg
Y29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1
ZSBsaUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAg
bGlTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwg
Y29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgZGl2R2V0dGVyKEV4ZWNTdGF0
ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBkaXZTZXR0ZXIoRXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJp
bmcmIHN0cik7CisgICAgVmFsdWUgcGFyYWdyYXBoR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50
IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBwYXJhZ3JhcGhTZXR0ZXIoRXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0
cik7CisgICAgVmFsdWUgaGVhZGluZ0dldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikg
Y29uc3Q7CisgICAgdm9pZCAgaGVhZGluZ1NldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
biwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBW
YWx1ZSBibG9ja1F1b3RlR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsK
KyAgICB2b2lkICBibG9ja1F1b3RlU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBj
b25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVl
IHF1b3RlR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lk
ICBxdW90ZVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZh
bHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBwcmVHZXR0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIHByZVNldHRlcihFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRP
TVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBickdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0
b2tlbikgY29uc3Q7CisgICAgdm9pZCAgYnJTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAg
VmFsdWUgYmFzZUZvbnRHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Owor
ICAgIHZvaWQgIGJhc2VGb250U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25z
dCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIGZv
bnRHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGZv
bnRTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwg
Y29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgaHJHZXR0ZXIoRXhlY1N0YXRl
KiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGhyU2V0dGVyKEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5n
JiBzdHIpOworICAgIFZhbHVlIG1vZEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikg
Y29uc3Q7CisgICAgdm9pZCAgbW9kU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBj
b25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVl
IGFuY2hvckdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9p
ZCAgYW5jaG9yU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYg
dmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIGltYWdlR2V0dGVy
KEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBpbWFnZVNldHRl
cihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBE
T006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBvYmplY3RHZXR0ZXIoRXhlY1N0YXRlKiBl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIG9iamVjdFNldHRlcihFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmlu
ZyYgc3RyKTsKKyAgICBWYWx1ZSBwYXJhbUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tl
bikgY29uc3Q7CisgICAgdm9pZCAgcGFyYW1TZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAg
VmFsdWUgYXBwbGV0R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAg
ICB2b2lkICBhcHBsZXRTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZh
bHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgbWFwR2V0
dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBtYXBTZXR0
ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3Qg
RE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgYXJlYUdldHRlcihFeGVjU3RhdGUqIGV4
ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgYXJlYVNldHRlcihFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYg
c3RyKTsKKyAgICBWYWx1ZSBzY3JpcHRHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4p
IGNvbnN0OworICAgIHZvaWQgIHNjcmlwdFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
biwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBW
YWx1ZSB0YWJsZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAg
dm9pZCAgdGFibGVTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVl
JiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgdGFibGVDYXB0
aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICB0
YWJsZUNhcHRpb25TZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVl
JiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgdGFibGVDb2xH
ZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIHRhYmxl
Q29sU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUs
IGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIHRhYmxlU2VjdGlvbkdldHRl
cihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgdGFibGVTZWN0
aW9uU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUs
IGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIHRhYmxlUm93R2V0dGVyKEV4
ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICB0YWJsZVJvd1NldHRl
cihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBE
T006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSB0YWJsZUNlbGxHZXR0ZXIoRXhlY1N0YXRl
KiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIHRhYmxlQ2VsbFNldHRlcihFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRP
TVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBmcmFtZVNldEdldHRlcihFeGVjU3RhdGUqIGV4ZWMs
IGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgZnJhbWVTZXRTZXR0ZXIoRXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcm
IHN0cik7CisgICAgVmFsdWUgZnJhbWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4p
IGNvbnN0OworICAgIHZvaWQgIGZyYW1lU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
LCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZh
bHVlIGlGcmFtZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAg
dm9pZCAgaUZyYW1lU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1
ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIG1hcnF1ZWVH
ZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIG1hcnF1
ZWVTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwg
Y29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisKICAgICBlbnVtIHsgSHRtbFZlcnNpb24sIEhl
YWRQcm9maWxlLCBMaW5rSHJlZiwgTGlua1JlbCwgTGlua01lZGlhLAogICAgICAgICAgICBMaW5r
Q2hhcnNldCwgTGlua0Rpc2FibGVkLCBMaW5rSHJlZkxhbmcsIExpbmtSZXYsIExpbmtUYXJnZXQs
IExpbmtUeXBlLAogICAgICAgICAgICBMaW5rU2hlZXQsIFRpdGxlVGV4dCwgTWV0YU5hbWUsIE1l
dGFIdHRwRXF1aXYsIE1ldGFDb250ZW50LCBNZXRhU2NoZW1lLApJbmRleDoga2h0bWwvZWNtYS9r
anNfd2luZG93LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRt
bC9lY21hL2tqc193aW5kb3cuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE2MQpkaWZmIC11
IC1wIC1yMS4xNjEga2h0bWwvZWNtYS9ranNfd2luZG93LmNwcAotLS0ga2h0bWwvZWNtYS9ranNf
d2luZG93LmNwcAkyMiBKdW4gMjAwNSAwMDo0ODo0NCAtMDAwMAkxLjE2MQorKysga2h0bWwvZWNt
YS9ranNfd2luZG93LmNwcAkyMyBKdW4gMjAwNSAwMToxMDo0MCAtMDAwMApAQCAtNjgsNyArNjgs
NiBAQAogI2luY2x1ZGUgImh0bWwvaHRtbF9kb2N1bWVudGltcGwuaCIKICNpbmNsdWRlICJjc3Mv
Y3NzX3J1bGVpbXBsLmgiCiAjaW5jbHVkZSAiY3NzL2Nzc19zdHlsZXNoZWV0aW1wbC5oIgotI2lu
Y2x1ZGUgIm1pc2MvaHRtbHRhZ3MuaCIKIAogLy8gTXVzdCBpbmNsdWRlIDxjbWF0aD4gaW5zdGVh
ZCBvZiA8bWF0aC5oPiBiZWNhdXNlIG9mIGEgYnVnIGluIHRoZQogLy8gZ2NjIDMuMyBsaWJyYXJ5
IHZlcnNpb24gb2YgPG1hdGguaD4gd2hlcmUgaWYgeW91IGluY2x1ZGUgYm90aApJbmRleDoga2h0
bWwvZWRpdGluZy9hcHBseV9zdHlsZV9jb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL2FwcGx5X3N0eWxlX2NvbW1hbmQuY3BwLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjIKZGlmZiAtdSAtcCAtcjEuMiBraHRtbC9lZGl0aW5nL2Fw
cGx5X3N0eWxlX2NvbW1hbmQuY3BwCi0tLSBraHRtbC9lZGl0aW5nL2FwcGx5X3N0eWxlX2NvbW1h
bmQuY3BwCTI0IE1heSAyMDA1IDA3OjIxOjQ3IC0wMDAwCTEuMgorKysga2h0bWwvZWRpdGluZy9h
cHBseV9zdHlsZV9jb21tYW5kLmNwcAkyMyBKdW4gMjAwNSAwMToxMDo0MSAtMDAwMApAQCAtMzMs
NyArMzMsNyBAQAogI2luY2x1ZGUgImNzcy9jc3Nwcm9wZXJ0aWVzLmgiCiAjaW5jbHVkZSAiZG9t
L2RvbV9zdHJpbmcuaCIKICNpbmNsdWRlICJodG1sL2h0bWxfZWxlbWVudGltcGwuaCIKLSNpbmNs
dWRlICJtaXNjL2h0bWx0YWdzLmgiCisjaW5jbHVkZSAiaHRtbG5hbWVzLmgiCiAjaW5jbHVkZSAi
bWlzYy9odG1sYXR0cnMuaCIKICNpbmNsdWRlICJyZW5kZXJpbmcvcmVuZGVyX29iamVjdC5oIgog
I2luY2x1ZGUgInhtbC9kb21fZG9jaW1wbC5oIgpAQCAtNjUsNiArNjUsNyBAQCB1c2luZyBET006
Ok5vZGVJbXBsOwogdXNpbmcgRE9NOjpQb3NpdGlvbjsKIHVzaW5nIERPTTo6UmFuZ2VJbXBsOwog
dXNpbmcgRE9NOjpUZXh0SW1wbDsKK3VzaW5nIERPTTo6SFRNTE5hbWVzOwogCiBuYW1lc3BhY2Ug
a2h0bWwgewogCkBAIC0yNDksMTIgKzI1MCwxMiBAQCBib29sIGlzU3R5bGVTcGFuKGNvbnN0IE5v
ZGVJbXBsICpub2RlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBjb25zdCBIVE1MRWxl
bWVudEltcGwgKmVsZW0gPSBzdGF0aWNfY2FzdDxjb25zdCBIVE1MRWxlbWVudEltcGwgKj4obm9k
ZSk7Ci0gICAgcmV0dXJuIGVsZW0tPmlkKCkgPT0gSURfU1BBTiAmJiBlbGVtLT5nZXRBdHRyaWJ1
dGUoQVRUUl9DTEFTUykgPT0gc3R5bGVTcGFuQ2xhc3NTdHJpbmcoKTsKKyAgICByZXR1cm4gZWxl
bS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6c3BhbigpKSAmJiBlbGVtLT5nZXRBdHRyaWJ1dGUo
QVRUUl9DTEFTUykgPT0gc3R5bGVTcGFuQ2xhc3NTdHJpbmcoKTsKIH0KIAogc3RhdGljIGJvb2wg
aXNFbXB0eVN0eWxlU3Bhbihjb25zdCBOb2RlSW1wbCAqbm9kZSkKIHsKLSAgICBpZiAoIW5vZGUg
fHwgIW5vZGUtPmlzSFRNTEVsZW1lbnQoKSB8fCBub2RlLT5pZCgpICE9IElEX1NQQU4pCisgICAg
aWYgKCFub2RlIHx8ICFub2RlLT5pc0hUTUxFbGVtZW50KCkgfHwgIW5vZGUtPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjpzcGFuKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBjb25zdCBI
VE1MRWxlbWVudEltcGwgKmVsZW0gPSBzdGF0aWNfY2FzdDxjb25zdCBIVE1MRWxlbWVudEltcGwg
Kj4obm9kZSk7CkBAIC0yNjQsNyArMjY1LDcgQEAgc3RhdGljIGJvb2wgaXNFbXB0eVN0eWxlU3Bh
bihjb25zdCBOb2RlSQogCiBzdGF0aWMgYm9vbCBpc0VtcHR5Rm9udFRhZyhjb25zdCBOb2RlSW1w
bCAqbm9kZSkKIHsKLSAgICBpZiAoIW5vZGUgfHwgbm9kZS0+aWQoKSAhPSBJRF9GT05UKQorICAg
IGlmICghbm9kZSB8fCAhbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZvbnQoKSkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIGNvbnN0IEVsZW1lbnRJbXBsICplbGVtID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgRWxlbWVudEltcGwgKj4obm9kZSk7CkBAIC01ODYsNyArNTg3LDcgQEAgdm9p
ZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJbmxpbmVTdHlsZQogICAgICAgICAgICAgICAgICAg
ICAvLyB0aGUgY3VycmVudCBncm91cC4KICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUgPT0g
ZW5kLm5vZGUoKSB8fCAKICAgICAgICAgICAgICAgICAgICAgICAgIHJ1blN0YXJ0LT5wYXJlbnRO
b2RlKCkgIT0gbmV4dC0+cGFyZW50Tm9kZSgpIHx8IAotICAgICAgICAgICAgICAgICAgICAgICAg
KG5leHQtPmlzSFRNTEVsZW1lbnQoKSAmJiBuZXh0LT5pZCgpICE9IElEX0JSKSB8fCAKKyAgICAg
ICAgICAgICAgICAgICAgICAgICFuZXh0LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YnIoKSkgfHwg
CiAgICAgICAgICAgICAgICAgICAgICAgICAobmV4dC0+cmVuZGVyZXIoKSAmJiAhbmV4dC0+cmVu
ZGVyZXIoKS0+aXNJbmxpbmUoKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICAgICAgbm9kZSA9IG5leHQ7CkBAIC02MTEsMTEgKzYxMiwxMSBAQCBib29s
IEFwcGx5U3R5bGVDb21tYW5kOjppc0hUTUxTdHlsZU5vZGUoCiAgICAgZm9yIChRVmFsdWVMaXN0
Q29uc3RJdGVyYXRvcjxDU1NQcm9wZXJ0eT4gaXQgPSBzdHlsZS0+dmFsdWVzSXRlcmF0b3IoKTsg
aXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIHN3aXRjaCAoKCppdCkuaWQoKSkgewogICAgICAg
ICAgICAgY2FzZSBDU1NfUFJPUF9GT05UX1dFSUdIVDoKLSAgICAgICAgICAgICAgICBpZiAoZWxl
bS0+aWQoKSA9PSBJRF9CKQorICAgICAgICAgICAgICAgIGlmIChlbGVtLT5oYXNMb2NhbE5hbWUo
SFRNTE5hbWVzOjpiKCkpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQ1NTX1BST1BfRk9OVF9TVFlMRToK
LSAgICAgICAgICAgICAgICBpZiAoZWxlbS0+aWQoKSA9PSBJRF9JKQorICAgICAgICAgICAgICAg
IGlmIChlbGVtLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjppKCkpKQogICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KQEAgLTYzOCw3ICs2MzksNyBAQCB2
b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVIVE1MRm9udFN0CiAgICAgQVNTRVJUKHN0eWxl
KTsKICAgICBBU1NFUlQoZWxlbSk7CiAKLSAgICBpZiAoZWxlbS0+aWQoKSAhPSBJRF9GT05UKQor
ICAgIGlmICghZWxlbS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6Zm9udCgpKSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgaW50IGV4Y2VwdGlvbkNvZGUgPSAwOwpAQCAtMTA0Nyw3ICsxMDQ4LDcg
QEAgc3RhdGljIGJvb2wgYXJlSWRlbnRpY2FsRWxlbWVudHMoTm9kZUltcAogICAgIEVsZW1lbnRJ
bXBsICpmaXJzdEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50SW1wbCAqPihmaXJzdCk7CiAg
ICAgRWxlbWVudEltcGwgKnNlY29uZEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50SW1wbCAq
PihzZWNvbmQpOwogICAgIAotICAgIGlmIChmaXJzdEVsZW1lbnQtPmlkKCkgIT0gc2Vjb25kRWxl
bWVudC0+aWQoKSkKKyAgICBpZiAoZmlyc3RFbGVtZW50LT50YWdOYW1lKCkgIT0gc2Vjb25kRWxl
bWVudC0+dGFnTmFtZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBOYW1lZEF0dHJN
YXBJbXBsICpmaXJzdE1hcCA9IGZpcnN0RWxlbWVudC0+YXR0cmlidXRlcygpOwpAQCAtMTEyOSw3
ICsxMTMwLDcgQEAgYm9vbCBBcHBseVN0eWxlQ29tbWFuZDo6bWVyZ2VFbmRXaXRoTmV4dAogICAg
ICAgICBlbmRPZmZzZXQgPSBwYXJlbnRMYXN0T2Zmc2V0OwogICAgIH0KIAotICAgIGlmICghZW5k
Tm9kZS0+aXNFbGVtZW50Tm9kZSgpIHx8IGVuZE5vZGUtPmlkKCkgPT0gSURfQlIpCisgICAgaWYg
KCFlbmROb2RlLT5pc0VsZW1lbnROb2RlKCkgfHwgZW5kTm9kZS0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OmJyKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBOb2RlSW1wbCAqbmV4dFNp
YmxpbmcgPSBlbmROb2RlLT5uZXh0U2libGluZygpOwpJbmRleDoga2h0bWwvZWRpdGluZy9icmVh
a19ibG9ja3F1b3RlX2NvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9X
ZWJDb3JlL2todG1sL2VkaXRpbmcvYnJlYWtfYmxvY2txdW90ZV9jb21tYW5kLmNwcCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXUgLXAgLXIxLjEga2h0bWwvZWRpdGluZy9icmVha19i
bG9ja3F1b3RlX2NvbW1hbmQuY3BwCi0tLSBraHRtbC9lZGl0aW5nL2JyZWFrX2Jsb2NrcXVvdGVf
Y29tbWFuZC5jcHAJMjQgTWF5IDIwMDUgMDc6MjE6NDcgLTAwMDAJMS4xCisrKyBraHRtbC9lZGl0
aW5nL2JyZWFrX2Jsb2NrcXVvdGVfY29tbWFuZC5jcHAJMjMgSnVuIDIwMDUgMDE6MTA6NDEgLTAw
MDAKQEAgLTI4LDcgKzI4LDcgQEAKICNpbmNsdWRlICJodG1sZWRpdGluZy5oIgogI2luY2x1ZGUg
InZpc2libGVfcG9zaXRpb24uaCIKIAotI2luY2x1ZGUgIm1pc2MvaHRtbHRhZ3MuaCIKKyNpbmNs
dWRlICJodG1sbmFtZXMuaCIKICNpbmNsdWRlICJ4bWwvZG9tX2VsZW1lbnRpbXBsLmgiCiAjaW5j
bHVkZSAieG1sL2RvbV90ZXh0aW1wbC5oIgogCkBAIC00Myw2ICs0Myw3IEBAIHVzaW5nIERPTTo6
RWxlbWVudEltcGw7CiB1c2luZyBET006Ok5vZGVJbXBsOwogdXNpbmcgRE9NOjpQb3NpdGlvbjsK
IHVzaW5nIERPTTo6VGV4dEltcGw7Cit1c2luZyBET006OkhUTUxOYW1lczsKIAogbmFtZXNwYWNl
IGtodG1sIHsKIApAQCAtMTQ2LDcgKzE0Nyw3IEBAIHZvaWQgQnJlYWtCbG9ja3F1b3RlQ29tbWFu
ZDo6ZG9BcHBseSgpCiAgICAgICAgIGJvb2wgc3RhcnRJc0JSID0gZmFsc2U7CiAgICAgICAgIGlm
IChzdGFydE5vZGUgIT0gdG9wQmxvY2txdW90ZSkgewogICAgICAgICAgICAgTm9kZUltcGwgKm4g
PSBzdGFydE5vZGU7Ci0gICAgICAgICAgICBzdGFydElzQlIgPSBuLT5pZCgpID09IElEX0JSOwor
ICAgICAgICAgICAgc3RhcnRJc0JSID0gbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJyKCkpOwog
ICAgICAgICAgICAgaWYgKHN0YXJ0SXNCUikKICAgICAgICAgICAgICAgICBuID0gbi0+bmV4dFNp
YmxpbmcoKTsKICAgICAgICAgICAgIHdoaWxlIChuKSB7CkluZGV4OiBraHRtbC9lZGl0aW5nL2Nv
bXBvc2l0ZV9lZGl0X2NvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9X
ZWJDb3JlL2todG1sL2VkaXRpbmcvY29tcG9zaXRlX2VkaXRfY29tbWFuZC5jcHAsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuMwpkaWZmIC11IC1wIC1yMS4zIGtodG1sL2VkaXRpbmcvY29tcG9zaXRl
X2VkaXRfY29tbWFuZC5jcHAKLS0tIGtodG1sL2VkaXRpbmcvY29tcG9zaXRlX2VkaXRfY29tbWFu
ZC5jcHAJMjQgTWF5IDIwMDUgMDc6MjE6NDcgLTAwMDAJMS4zCisrKyBraHRtbC9lZGl0aW5nL2Nv
bXBvc2l0ZV9lZGl0X2NvbW1hbmQuY3BwCTIzIEp1biAyMDA1IDAxOjEwOjQxIC0wMDAwCkBAIC00
Nyw3ICs0Nyw3IEBACiAjaW5jbHVkZSAid3JhcF9jb250ZW50c19pbl9kdW1teV9zcGFuX2NvbW1h
bmQuaCIKIAogI2luY2x1ZGUgIm1pc2MvaHRtbGF0dHJzLmgiCi0jaW5jbHVkZSAibWlzYy9odG1s
dGFncy5oIgorI2luY2x1ZGUgImh0bWxuYW1lcy5oIgogI2luY2x1ZGUgInJlbmRlcmluZy9yZW5k
ZXJfdGV4dC5oIgogI2luY2x1ZGUgInhtbC9kb20yX3JhbmdlaW1wbC5oIgogI2luY2x1ZGUgInht
bC9kb21fdGV4dGltcGwuaCIKQEAgLTY3LDYgKzY3LDcgQEAgdXNpbmcgRE9NOjpOb2RlSW1wbDsK
IHVzaW5nIERPTTo6UG9zaXRpb247CiB1c2luZyBET006OlJhbmdlSW1wbDsKIHVzaW5nIERPTTo6
VGV4dEltcGw7Cit1c2luZyBET006OkhUTUxOYW1lczsKIAogbmFtZXNwYWNlIGtodG1sIHsKIApA
QCAtMTI3LDE0ICsxMjgsMTQgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6aW5zZXJ0UGFy
YWdyYQogCiB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjppbnNlcnROb2RlQmVmb3JlKE5vZGVJ
bXBsICppbnNlcnRDaGlsZCwgTm9kZUltcGwgKnJlZkNoaWxkKQogewotICAgIEFTU0VSVChyZWZD
aGlsZC0+aWQoKSAhPSBJRF9CT0RZKTsKKyAgICBBU1NFUlQoIXJlZkNoaWxkLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6Ym9keSgpKSk7CiAgICAgRWRpdENvbW1hbmRQdHIgY21kKG5ldyBJbnNlcnRO
b2RlQmVmb3JlQ29tbWFuZChkb2N1bWVudCgpLCBpbnNlcnRDaGlsZCwgcmVmQ2hpbGQpKTsKICAg
ICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShjbWQpOwogfQogCiB2b2lkIENvbXBvc2l0ZUVkaXRD
b21tYW5kOjppbnNlcnROb2RlQWZ0ZXIoTm9kZUltcGwgKmluc2VydENoaWxkLCBOb2RlSW1wbCAq
cmVmQ2hpbGQpCiB7Ci0gICAgQVNTRVJUKHJlZkNoaWxkLT5pZCgpICE9IElEX0JPRFkpOworICAg
IEFTU0VSVCghcmVmQ2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpib2R5KCkpKTsKICAgICBp
ZiAocmVmQ2hpbGQtPnBhcmVudE5vZGUoKS0+bGFzdENoaWxkKCkgPT0gcmVmQ2hpbGQpIHsKICAg
ICAgICAgYXBwZW5kTm9kZShpbnNlcnRDaGlsZCwgcmVmQ2hpbGQtPnBhcmVudE5vZGUoKSk7CiAg
ICAgfQpAQCAtNTQ1LDcgKzU0Niw3IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6Om1vdmVQ
YXJhZ3JhcGgKICAgICAvLyAgICAgICBhZGRpdGlvbmFsIGxldmVsIG9mIHF1b3RpbmcuCiAgICAg
Tm9kZUltcGwgKnN0YXJ0QmxvY2sgPSBwYXJhZ3JhcGhTdGFydC5ub2RlKCktPmVuY2xvc2luZ0Js
b2NrRmxvd0VsZW1lbnQoKTsKICAgICBOb2RlSW1wbCAqbmV3QmxvY2sgPSAwOwotICAgIGlmIChz
dGFydEJsb2NrLT5pZCgpID09IElEX0JPRFkgfHwgKGlzTWFpbEJsb2NrcXVvdGUoc3RhcnRCbG9j
aykgJiYgcGFyYWdyYXBoU3RhcnQubm9kZSgpICE9IHN0YXJ0QmxvY2spKQorICAgIGlmIChzdGFy
dEJsb2NrLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Ym9keSgpKSB8fCAoaXNNYWlsQmxvY2txdW90
ZShzdGFydEJsb2NrKSAmJiBwYXJhZ3JhcGhTdGFydC5ub2RlKCkgIT0gc3RhcnRCbG9jaykpCiAg
ICAgICAgIG5ld0Jsb2NrID0gY3JlYXRlRGVmYXVsdFBhcmFncmFwaEVsZW1lbnQoZG9jdW1lbnQo
KSk7CiAgICAgZWxzZQogICAgICAgICBuZXdCbG9jayA9IHN0YXJ0QmxvY2stPmNsb25lTm9kZShm
YWxzZSk7CkBAIC01NTUsMTAgKzU1NiwxMCBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpt
b3ZlUGFyYWdyYXBoCiAgICAgICAgIG1vdmVOb2RlID0gbW92ZU5vZGUtPnRyYXZlcnNlTmV4dE5v
ZGUoKTsKICAgICBOb2RlSW1wbCAqZW5kTm9kZSA9IHBhcmFncmFwaEVuZC5ub2RlKCk7CiAKLSAg
ICBpZiAocGFyYWdyYXBoU3RhcnQubm9kZSgpLT5pZCgpID09IElEX0JPRFkpIHsKKyAgICBpZiAo
cGFyYWdyYXBoU3RhcnQubm9kZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Ym9keSgpKSkgewog
ICAgICAgICBpbnNlcnROb2RlQXQobmV3QmxvY2ssIHBhcmFncmFwaFN0YXJ0Lm5vZGUoKSwgMCk7
CiAgICAgfQotICAgIGVsc2UgaWYgKHBhcmFncmFwaFN0YXJ0Lm5vZGUoKS0+aWQoKSA9PSBJRF9C
UikgeworICAgIGVsc2UgaWYgKHBhcmFncmFwaFN0YXJ0Lm5vZGUoKS0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OmJyKCkpKSB7CiAgICAgICAgIGluc2VydE5vZGVBZnRlcihuZXdCbG9jaywgcGFyYWdy
YXBoU3RhcnQubm9kZSgpKTsKICAgICB9CiAgICAgZWxzZSB7CkluZGV4OiBraHRtbC9lZGl0aW5n
L2RlbGV0ZV9zZWxlY3Rpb25fY29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L1dlYkNvcmUva2h0bWwvZWRpdGluZy9kZWxldGVfc2VsZWN0aW9uX2NvbW1hbmQuY3BwLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjIKZGlmZiAtdSAtcCAtcjEuMiBraHRtbC9lZGl0aW5nL2Rl
bGV0ZV9zZWxlY3Rpb25fY29tbWFuZC5jcHAKLS0tIGtodG1sL2VkaXRpbmcvZGVsZXRlX3NlbGVj
dGlvbl9jb21tYW5kLmNwcAkyNCBNYXkgMjAwNSAwNzoyMTo0NyAtMDAwMAkxLjIKKysrIGtodG1s
L2VkaXRpbmcvZGVsZXRlX3NlbGVjdGlvbl9jb21tYW5kLmNwcAkyMyBKdW4gMjAwNSAwMToxMDo0
MiAtMDAwMApAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgImNzcy9jc3NfY29tcHV0ZWRzdHls
ZS5oIgogI2luY2x1ZGUgImh0bWxlZGl0aW5nLmgiCiAjaW5jbHVkZSAia2h0bWxfcGFydC5oIgot
I2luY2x1ZGUgIm1pc2MvaHRtbHRhZ3MuaCIKKyNpbmNsdWRlICJodG1sbmFtZXMuaCIKICNpbmNs
dWRlICJyZW5kZXJpbmcvcmVuZGVyX2xpbmUuaCIKICNpbmNsdWRlICJyZW5kZXJpbmcvcmVuZGVy
X29iamVjdC5oIgogI2luY2x1ZGUgInZpc2libGVfdGV4dC5oIgpAQCAtNTMsNiArNTMsNyBAQCB1
c2luZyBET006Ok5vZGVJbXBsOwogdXNpbmcgRE9NOjpQb3NpdGlvbjsKIHVzaW5nIERPTTo6UmFu
Z2VJbXBsOwogdXNpbmcgRE9NOjpUZXh0SW1wbDsKK3VzaW5nIERPTTo6SFRNTE5hbWVzOwogCiBu
YW1lc3BhY2Uga2h0bWwgewogCkBAIC02MSw5ICs2MiwxMyBAQCBzdGF0aWMgYm9vbCBpc0xpc3RT
dHJ1Y3R1cmVOb2RlKGNvbnN0IE5vCiAgICAgLy8gRklYTUU6IElycml0YXRpbmcgdGhhdCB3ZSBj
YW4gZ2V0IGF3YXkgd2l0aCBqdXN0IGdvaW5nIGF0IHRoZSByZW5kZXIgdHJlZSBmb3IgaXNUYWJs
ZVN0cnVjdHVyZU5vZGUsCiAgICAgLy8gYnV0IGhlcmUgd2UgYWxzbyBoYXZlIHRvIHBlZWsgYXQg
dGhlIHR5cGUgb2YgRE9NIG5vZGU/CiAgICAgUmVuZGVyT2JqZWN0ICpyID0gbm9kZS0+cmVuZGVy
ZXIoKTsKLSAgICBOb2RlSW1wbDo6SWQgbm9kZUlEID0gbm9kZS0+aWQoKTsKICAgICByZXR1cm4g
KHIgJiYgci0+aXNMaXN0SXRlbSgpKQotICAgICAgICB8fCAobm9kZUlEID09IElEX09MIHx8IG5v
ZGVJRCA9PSBJRF9VTCB8fCBub2RlSUQgPT0gSURfREQgfHwgbm9kZUlEID09IElEX0RUIHx8IG5v
ZGVJRCA9PSBJRF9ESVIgfHwgbm9kZUlEID09IElEX01FTlUpOworICAgICAgICB8fCBub2RlLT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6b2woKSkKKyAgICAgICAgfHwgbm9kZS0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OnVsKCkpCisgICAgICAgIHx8IG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpk
ZCgpKQorICAgICAgICB8fCBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZHQoKSkKKyAgICAg
ICAgfHwgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmRpcigpKQorICAgICAgICB8fCBub2Rl
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6bWVudSgpKTsKIH0KIAogc3RhdGljIGludCBtYXhEZWVw
T2Zmc2V0KE5vZGVJbXBsICpuKQpAQCAtMjc3LDggKzI4Miw4IEBAIHZvaWQgRGVsZXRlU2VsZWN0
aW9uQ29tbWFuZDo6c2F2ZVR5cGluZ1MKIGJvb2wgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6aGFu
ZGxlU3BlY2lhbENhc2VCUkRlbGV0ZSgpCiB7CiAgICAgLy8gQ2hlY2sgZm9yIHNwZWNpYWwtY2Fz
ZSB3aGVyZSB0aGUgc2VsZWN0aW9uIGNvbnRhaW5zIG9ubHkgYSBCUiBvbiBhIGxpbmUgYnkgaXRz
ZWxmIGFmdGVyIGFub3RoZXIgQlIuCi0gICAgYm9vbCB1cHN0cmVhbVN0YXJ0SXNCUiA9IG1fc3Rh
cnROb2RlLT5pZCgpID09IElEX0JSOwotICAgIGJvb2wgZG93bnN0cmVhbVN0YXJ0SXNCUiA9IG1f
ZG93bnN0cmVhbVN0YXJ0Lm5vZGUoKS0+aWQoKSA9PSBJRF9CUjsKKyAgICBib29sIHVwc3RyZWFt
U3RhcnRJc0JSID0gbV9zdGFydE5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpicigpKTsKKyAg
ICBib29sIGRvd25zdHJlYW1TdGFydElzQlIgPSBtX2Rvd25zdHJlYW1TdGFydC5ub2RlKCktPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjpicigpKTsKICAgICBib29sIGlzQlJPbkxpbmVCeUl0c2VsZiA9
IHVwc3RyZWFtU3RhcnRJc0JSICYmIGRvd25zdHJlYW1TdGFydElzQlIgJiYgbV9kb3duc3RyZWFt
U3RhcnQubm9kZSgpID09IG1fdXBzdHJlYW1FbmQubm9kZSgpOwogICAgIGlmIChpc0JST25MaW5l
QnlJdHNlbGYpIHsKICAgICAgICAgcmVtb3ZlTm9kZShtX2Rvd25zdHJlYW1TdGFydC5ub2RlKCkp
OwpAQCAtMzI2LDExICszMzEsMTEgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpoYW5k
bGVHZW5lcgogICAgIC8vIGVuZCBvZiBhIGJsb2NrIG90aGVyIHRoYW4gdGhlIGJsb2NrIGNvbnRh
aW5pbmcgdGhlIHNlbGVjdGlvbiBzdGFydCwgdGhlbiBkbyBub3QgZGVsZXRlIHRoZSAKICAgICAv
LyBzdGFydCBibG9jaywgb3RoZXJ3aXNlIGRlbGV0ZSB0aGUgc3RhcnQgYmxvY2suCiAgICAgLy8g
QSBzaW1pbGFyIGNhc2UgaXMgcHJvdmlkZWQgdG8gY292ZXIgc2VsZWN0aW9ucyBzdGFydGluZyBp
biBCUiBlbGVtZW50cy4KLSAgICBpZiAoc3RhcnRPZmZzZXQgPT0gMSAmJiBtX3N0YXJ0Tm9kZSAm
JiBtX3N0YXJ0Tm9kZS0+aWQoKSA9PSBJRF9CUikgeworICAgIGlmIChzdGFydE9mZnNldCA9PSAx
ICYmIG1fc3RhcnROb2RlICYmIG1fc3RhcnROb2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YnIo
KSkpIHsKICAgICAgICAgc2V0U3RhcnROb2RlKG1fc3RhcnROb2RlLT50cmF2ZXJzZU5leHROb2Rl
KCkpOwogICAgICAgICBzdGFydE9mZnNldCA9IDA7CiAgICAgfQotICAgIGlmIChtX3N0YXJ0Qmxv
Y2sgIT0gbV9lbmRCbG9jayAmJiBzdGFydE9mZnNldCA9PSAwICYmIG1fc3RhcnROb2RlICYmIG1f
c3RhcnROb2RlLT5pZCgpID09IElEX0JSICYmIGVuZEF0RW5kT2ZCbG9jaykgeworICAgIGlmICht
X3N0YXJ0QmxvY2sgIT0gbV9lbmRCbG9jayAmJiBzdGFydE9mZnNldCA9PSAwICYmIG1fc3RhcnRO
b2RlICYmIG1fc3RhcnROb2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YnIoKSkgJiYgZW5kQXRF
bmRPZkJsb2NrKSB7CiAgICAgICAgIC8vIERvbid0IGRlbGV0ZSB0aGUgQlIgZWxlbWVudAogICAg
ICAgICBzZXRTdGFydE5vZGUobV9zdGFydE5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKSk7CiAgICAg
fQpAQCAtNTUyLDcgKzU1Nyw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6bW92ZU5v
ZGVzQWYKICAgICAgICAgTm9kZUltcGwgKm1vdmVOb2RlID0gbm9kZTsKICAgICAgICAgbm9kZSA9
IG5vZGUtPm5leHRTaWJsaW5nKCk7CiAgICAgICAgIHJlbW92ZU5vZGUobW92ZU5vZGUpOwotICAg
ICAgICBpZiAobW92ZU5vZGUtPmlkKCkgPT0gSURfQlIgJiYgIW1vdmVOb2RlLT5yZW5kZXJlcigp
KSB7CisgICAgICAgIGlmIChtb3ZlTm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJyKCkpICYm
ICFtb3ZlTm9kZS0+cmVuZGVyZXIoKSkgewogICAgICAgICAgICAgLy8gSnVzdCByZW1vdmUgdGhp
cyBub2RlLCBhbmQgZG9uJ3QgcHV0IGl0IGJhY2suCiAgICAgICAgICAgICAvLyBJZiB0aGUgQlIg
d2FzIG5vdCByZW5kZXJlZCAoc2luY2UgaXQgd2FzIGF0IHRoZSBlbmQgb2YgYSBibG9jaywgZm9y
IGluc3RhbmNlKSwgCiAgICAgICAgICAgICAvLyBwdXR0aW5nIGl0IGJhY2sgaW4gdGhlIGRvY3Vt
ZW50IG1pZ2h0IG1ha2UgaXQgYXBwZWFyLCBhbmQgdGhhdCBpcyBub3QgZGVzaXJhYmxlLgpAQCAt
NTYzLDcgKzU2OCw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6bW92ZU5vZGVzQWYK
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgaW5zZXJ0Tm9kZUFmdGVyKG1vdmVOb2RlLCByZWZO
b2RlKTsKICAgICAgICAgcmVmTm9kZSA9IG1vdmVOb2RlOwotICAgICAgICBpZiAobW92ZU5vZGUt
PmlkKCkgPT0gSURfQlIpCisgICAgICAgIGlmIChtb3ZlTm9kZS0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OmJyKCkpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogCkluZGV4OiBraHRtbC9lZGl0
aW5nL2h0bWxlZGl0aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29y
ZS9raHRtbC9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4y
NDcKZGlmZiAtdSAtcCAtcjEuMjQ3IGtodG1sL2VkaXRpbmcvaHRtbGVkaXRpbmcuY3BwCi0tLSBr
aHRtbC9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAkyNCBNYXkgMjAwNSAwNzoyMTo0NyAtMDAwMAkx
LjI0NworKysga2h0bWwvZWRpdGluZy9odG1sZWRpdGluZy5jcHAJMjMgSnVuIDIwMDUgMDE6MTA6
NDIgLTAwMDAKQEAgLTQyLDcgKzQyLDcgQEAKICNpbmNsdWRlICJodG1sX2ltYWdlaW1wbC5oIgog
I2luY2x1ZGUgImh0bWxfaW50ZXJjaGFuZ2UuaCIKICNpbmNsdWRlICJodG1sYXR0cnMuaCIKLSNp
bmNsdWRlICJodG1sdGFncy5oIgorI2luY2x1ZGUgImh0bWxuYW1lcy5oIgogI2luY2x1ZGUgImto
dG1sX3BhcnQuaCIKICNpbmNsdWRlICJraHRtbF9wYXJ0LmgiCiAjaW5jbHVkZSAia2h0bWx2aWV3
LmgiCkBAIC04MSw2ICs4MSw3IEBAIHVzaW5nIERPTTo6UG9zaXRpb247CiB1c2luZyBET006OlJh
bmdlSW1wbDsKIHVzaW5nIERPTTo6VGV4dEltcGw7CiB1c2luZyBET006OlRyZWVXYWxrZXJJbXBs
OwordXNpbmcgRE9NOjpIVE1MTmFtZXM7CiAKICNpZiBBUFBMRV9DSEFOR0VTCiAjaW5jbHVkZSAi
S1dRQXNzZXJ0aW9ucy5oIgpAQCAtMTMxLDEwICsxMzIsMTAgQEAgYm9vbCBpc1NwZWNpYWxFbGVt
ZW50KE5vZGVJbXBsICpuKQogICAgIGlmICghbi0+aXNIVE1MRWxlbWVudCgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAobi0+aWQoKSA9PSBJRF9BICYmIG4tPmlzTGluaygpKQor
ICAgIGlmIChuLT5pc0xpbmsoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAobi0+
aWQoKSA9PSBJRF9VTCB8fCBuLT5pZCgpID09IElEX09MIHx8IG4tPmlkKCkgPT0gSURfREwpCisg
ICAgaWYgKG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp1bCgpKSB8fCBuLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6b2woKSkgfHwgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmRsKCkpKQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKIAogICAgIFJlbmRlck9iamVjdCAqcmVuZGVyZXIgPSBuLT5yZW5kZXJl
cigpOwpAQCAtMzAzLDcgKzMwNCw3IEBAIE5vZGVJbXBsICpuZWFyZXN0TWFpbEJsb2NrcXVvdGUo
Y29uc3QgTm8KIAogYm9vbCBpc01haWxCbG9ja3F1b3RlKGNvbnN0IE5vZGVJbXBsICpub2RlKQog
ewotICAgIGlmICghbm9kZSB8fCAhbm9kZS0+cmVuZGVyZXIoKSB8fCAhbm9kZS0+aXNFbGVtZW50
Tm9kZSgpICYmIG5vZGUtPmlkKCkgIT0gSURfQkxPQ0tRVU9URSkKKyAgICBpZiAoIW5vZGUgfHwg
IW5vZGUtPnJlbmRlcmVyKCkgfHwgIW5vZGUtPmlzRWxlbWVudE5vZGUoKSAmJiAhbm9kZS0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OmJsb2NrcXVvdGUoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IEVsZW1lbnRJbXBsICo+KG5v
ZGUpLT5nZXRBdHRyaWJ1dGUoInR5cGUiKSA9PSAiY2l0ZSI7CkluZGV4OiBraHRtbC9lZGl0aW5n
L2luc2VydF9saW5lX2JyZWFrX2NvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9XZWJDb3JlL2todG1sL2VkaXRpbmcvaW5zZXJ0X2xpbmVfYnJlYWtfY29tbWFuZC5jcHAs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC11IC1wIC1yMS4xIGtodG1sL2VkaXRpbmcv
aW5zZXJ0X2xpbmVfYnJlYWtfY29tbWFuZC5jcHAKLS0tIGtodG1sL2VkaXRpbmcvaW5zZXJ0X2xp
bmVfYnJlYWtfY29tbWFuZC5jcHAJMjQgTWF5IDIwMDUgMDc6MjE6NDcgLTAwMDAJMS4xCisrKyBr
aHRtbC9lZGl0aW5nL2luc2VydF9saW5lX2JyZWFrX2NvbW1hbmQuY3BwCTIzIEp1biAyMDA1IDAx
OjEwOjQzIC0wMDAwCkBAIC0yOSw3ICsyOSw3IEBACiAjaW5jbHVkZSAidmlzaWJsZV9wb3NpdGlv
bi5oIgogI2luY2x1ZGUgInZpc2libGVfdW5pdHMuaCIKIAotI2luY2x1ZGUgIm1pc2MvaHRtbHRh
Z3MuaCIKKyNpbmNsdWRlICJodG1sbmFtZXMuaCIKICNpbmNsdWRlICJ4bWwvZG9tX2RvY2ltcGwu
aCIKICNpbmNsdWRlICJ4bWwvZG9tX2VsZW1lbnRpbXBsLmgiCiAjaW5jbHVkZSAieG1sL2RvbTJf
cmFuZ2VpbXBsLmgiCkBAIC01MCw2ICs1MCw3IEBAIHVzaW5nIERPTTo6Tm9kZUltcGw7CiB1c2lu
ZyBET006OlBvc2l0aW9uOwogdXNpbmcgRE9NOjpUZXh0SW1wbDsKIHVzaW5nIERPTTo6Q1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb25JbXBsOwordXNpbmcgRE9NOjpIVE1MTmFtZXM7CiAKIG5hbWVz
cGFjZSBraHRtbCB7CiAKQEAgLTExMSwxMyArMTEyLDEzIEBAIHZvaWQgSW5zZXJ0TGluZUJyZWFr
Q29tbWFuZDo6ZG9BcHBseSgpCiAgICAgICAgIC8vIFRoaXMgbWFrZXMgdGhlICJyZWFsIiBCUiB3
ZSB3YW50IHRvIGluc2VydCBhcHBlYXIgaW4gdGhlIHJlbmRlcmluZyB3aXRob3V0IGFueSAKICAg
ICAgICAgLy8gc2lnbmlmaWNhbnQgc2lkZSBlZmZlY3RzIChhbmQgbm8gcmVhbCB3b3JyaWVzIGVp
dGhlciBzaW5jZSB5b3UgY2FuJ3QgYXJyb3cgcGFzdCAKICAgICAgICAgLy8gdGhpcyBleHRyYSBv
bmUuCi0gICAgICAgIGlmIChwb3Mubm9kZSgpLT5pZCgpID09IElEX0JSICYmIHBvcy5vZmZzZXQo
KSA9PSAwKSB7CisgICAgICAgIGlmIChwb3Mubm9kZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
YnIoKSkgJiYgcG9zLm9mZnNldCgpID09IDApIHsKICAgICAgICAgICAgIC8vIEFscmVhZHkgcGxh
Y2VkIGluIGEgdHJhaWxpbmcgQlIuIEluc2VydCAicmVhbCIgQlIgYmVmb3JlIGl0IGFuZCBsZWF2
ZSB0aGUgc2VsZWN0aW9uIGFsb25lLgogICAgICAgICAgICAgaW5zZXJ0Tm9kZUJlZm9yZShub2Rl
VG9JbnNlcnQsIHBvcy5ub2RlKCkpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewogICAgICAg
ICAgICAgTm9kZUltcGwgKm5leHQgPSBwb3Mubm9kZSgpLT50cmF2ZXJzZU5leHROb2RlKCk7Ci0g
ICAgICAgICAgICBib29sIGhhc1RyYWlsaW5nQlIgPSBuZXh0ICYmIG5leHQtPmlkKCkgPT0gSURf
QlIgJiYgcG9zLm5vZGUoKS0+ZW5jbG9zaW5nQmxvY2tGbG93RWxlbWVudCgpID09IG5leHQtPmVu
Y2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQoKTsKKyAgICAgICAgICAgIGJvb2wgaGFzVHJhaWxpbmdC
UiA9IG5leHQgJiYgbmV4dC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJyKCkpICYmIHBvcy5ub2Rl
KCktPmVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQoKSA9PSBuZXh0LT5lbmNsb3NpbmdCbG9ja0Zs
b3dFbGVtZW50KCk7CiAgICAgICAgICAgICBpbnNlcnROb2RlQWZ0ZXJQb3NpdGlvbihub2RlVG9J
bnNlcnQsIHBvcyk7CiAgICAgICAgICAgICBpZiAoaGFzVHJhaWxpbmdCUikgewogICAgICAgICAg
ICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihTZWxlY3Rpb24oUG9zaXRpb24obmV4dCwgMCksIERP
V05TVFJFQU0pKTsKSW5kZXg6IGtodG1sL2VkaXRpbmcvaW5zZXJ0X3BhcmFncmFwaF9zZXBhcmF0
b3JfY29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0
bWwvZWRpdGluZy9pbnNlcnRfcGFyYWdyYXBoX3NlcGFyYXRvcl9jb21tYW5kLmNwcCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXUgLXAgLXIxLjEga2h0bWwvZWRpdGluZy9pbnNlcnRf
cGFyYWdyYXBoX3NlcGFyYXRvcl9jb21tYW5kLmNwcAotLS0ga2h0bWwvZWRpdGluZy9pbnNlcnRf
cGFyYWdyYXBoX3NlcGFyYXRvcl9jb21tYW5kLmNwcAkyNCBNYXkgMjAwNSAwNzoyMTo0NyAtMDAw
MAkxLjEKKysrIGtodG1sL2VkaXRpbmcvaW5zZXJ0X3BhcmFncmFwaF9zZXBhcmF0b3JfY29tbWFu
ZC5jcHAJMjMgSnVuIDIwMDUgMDE6MTA6NDMgLTAwMDAKQEAgLTMxLDcgKzMxLDcgQEAKIAogI2lu
Y2x1ZGUgImNzcy9jc3NfY29tcHV0ZWRzdHlsZS5oIgogI2luY2x1ZGUgImNzcy9jc3NfdmFsdWVp
bXBsLmgiCi0jaW5jbHVkZSAibWlzYy9odG1sdGFncy5oIgorI2luY2x1ZGUgImh0bWxuYW1lcy5o
IgogI2luY2x1ZGUgInhtbC9kb21fZG9jaW1wbC5oIgogI2luY2x1ZGUgInhtbC9kb21fZWxlbWVu
dGltcGwuaCIKICNpbmNsdWRlICJ4bWwvZG9tX3RleHRpbXBsLmgiCkBAIC01MCw2ICs1MCw3IEBA
IHVzaW5nIERPTTo6RWxlbWVudEltcGw7CiB1c2luZyBET006Ok5vZGVJbXBsOwogdXNpbmcgRE9N
OjpQb3NpdGlvbjsKIHVzaW5nIERPTTo6VGV4dEltcGw7Cit1c2luZyBET006OkhUTUxOYW1lczsK
IAogbmFtZXNwYWNlIGtodG1sIHsKIApAQCAtMjEzLDcgKzIxNCw3IEBAIHZvaWQgSW5zZXJ0UGFy
YWdyYXBoU2VwYXJhdG9yQ29tbWFuZDo6ZG8KICAgICAvLyB0aGVuIHRoaXMgPGJyPiB3aWxsIGNv
bGxhcHNlIGF3YXkgd2hlbiB3ZSBhZGQgYSBibG9jayBhZnRlciBpdC4gQWRkIGFuIGV4dHJhIDxi
cj4uCiAgICAgaWYgKCFkb2N1bWVudCgpLT5pblN0cmljdE1vZGUoKSkgewogICAgICAgICBQb3Np
dGlvbiB1cHN0cmVhbVBvcyA9IHBvcy51cHN0cmVhbSgpOwotICAgICAgICBpZiAodXBzdHJlYW1Q
b3Mubm9kZSgpLT5pZCgpID09IElEX0JSKQorICAgICAgICBpZiAodXBzdHJlYW1Qb3Mubm9kZSgp
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YnIoKSkpCiAgICAgICAgICAgICBpbnNlcnROb2RlQWZ0
ZXIoY3JlYXRlQnJlYWtFbGVtZW50KGRvY3VtZW50KCkpLCB1cHN0cmVhbVBvcy5ub2RlKCkpOwog
ICAgIH0KICAgICAKSW5kZXg6IGtodG1sL2VkaXRpbmcvbWFya3VwLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL21hcmt1cC5jcHAsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuMjAKZGlmZiAtdSAtcCAtcjEuMjAga2h0bWwvZWRpdGluZy9tYXJr
dXAuY3BwCi0tLSBraHRtbC9lZGl0aW5nL21hcmt1cC5jcHAJMTAgTWF5IDIwMDUgMDQ6MDM6MzQg
LTAwMDAJMS4yMAorKysga2h0bWwvZWRpdGluZy9tYXJrdXAuY3BwCTIzIEp1biAyMDA1IDAxOjEw
OjQ0IC0wMDAwCkBAIC0zNiw3ICszNiw3IEBACiAjaW5jbHVkZSAieG1sL2RvbTJfcmFuZ2VpbXBs
LmgiCiAjaW5jbHVkZSAicmVuZGVyaW5nL3JlbmRlcl90ZXh0LmgiCiAjaW5jbHVkZSAibWlzYy9o
dG1sYXR0cnMuaCIKLSNpbmNsdWRlICJtaXNjL2h0bWx0YWdzLmgiCisjaW5jbHVkZSAiaHRtbG5h
bWVzLmgiCiAjaW5jbHVkZSAiaHRtbC9kdGQuaCIKIAogdXNpbmcgRE9NOjpBdHRyaWJ1dGVJbXBs
OwpAQCAtNDgsOCArNDgsOCBAQCB1c2luZyBET006OkRvY3VtZW50SW1wbDsKIHVzaW5nIERPTTo6
RE9NU3RyaW5nOwogdXNpbmcgRE9NOjpFbGVtZW50SW1wbDsKIHVzaW5nIERPTTo6Rk9SQklEREVO
OwotdXNpbmcgRE9NOjplbmRUYWdSZXF1aXJlbWVudDsKIHVzaW5nIERPTTo6SFRNTEVsZW1lbnRJ
bXBsOwordXNpbmcgRE9NOjpIVE1MTmFtZXM7CiB1c2luZyBET006Ok5hbWVkQXR0ck1hcEltcGw7
CiB1c2luZyBET006Ok5vZGU7CiB1c2luZyBET006Ok5vZGVJbXBsOwpAQCAtMTc3LDEzICsxNzcs
MTEgQEAgc3RhdGljIFFTdHJpbmcgc3RhcnRNYXJrdXAoY29uc3QgTm9kZUltcAogICAgIHN3aXRj
aCAodHlwZSkgewogICAgICAgICBjYXNlIE5vZGU6OlRFWFRfTk9ERTogewogICAgICAgICAgICAg
aWYgKG5vZGUtPnBhcmVudE5vZGUoKSkgewotICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+
cGFyZW50Tm9kZSgpLT5pZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfUFJFOgot
ICAgICAgICAgICAgICAgICAgICBjYXNlIElEX1NDUklQVDoKLSAgICAgICAgICAgICAgICAgICAg
Y2FzZSBJRF9TVFlMRToKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9URVhUQVJFQToKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdHJpbmdWYWx1ZUZvclJhbmdlKG5vZGUsIHJh
bmdlKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPnBhcmVu
dE5vZGUoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnByZSgpKSB8fAorICAgICAgICAgICAgICAg
ICAgICBub2RlLT5wYXJlbnROb2RlKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzY3JpcHQoKSkg
fHwKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+cGFyZW50Tm9kZSgpLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6c3R5bGUoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+cGFyZW50Tm9k
ZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGV4dGFyZWEoKSkpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBzdHJpbmdWYWx1ZUZvclJhbmdlKG5vZGUsIHJhbmdlKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIFFTdHJpbmcgbWFya3VwID0gYW5ub3RhdGUgPyBlc2NhcGVIVE1MKHJl
bmRlcmVkVGV4dChub2RlLCByYW5nZSkpIDogZXNjYXBlSFRNTChzdHJpbmdWYWx1ZUZvclJhbmdl
KG5vZGUsIHJhbmdlKSk7ICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoZGVmYXVsdFN0eWxl
KSB7CkBAIC0yNDgsOSArMjQ2LDEzIEBAIHN0YXRpYyBRU3RyaW5nIHN0YXJ0TWFya3VwKGNvbnN0
IE5vZGVJbXAKIAogc3RhdGljIFFTdHJpbmcgZW5kTWFya3VwKGNvbnN0IE5vZGVJbXBsICpub2Rl
KQogewotICAgIGlmICgoIW5vZGUtPmlzSFRNTEVsZW1lbnQoKSB8fCBlbmRUYWdSZXF1aXJlbWVu
dChub2RlLT5pZCgpKSAhPSBGT1JCSURERU4pICYmIG5vZGUtPm5vZGVUeXBlKCkgIT0gTm9kZTo6
VEVYVF9OT0RFICYmIG5vZGUtPm5vZGVUeXBlKCkgIT0gTm9kZTo6RE9DVU1FTlRfTk9ERSkgewot
ICAgICAgICByZXR1cm4gIjwvIiArIG5vZGUtPm5vZGVOYW1lKCkuc3RyaW5nKCkgKyAiPiI7Cisg
ICAgYm9vbCBoYXNFbmRUYWcgPSB0cnVlOworICAgIGlmIChub2RlLT5pc0hUTUxFbGVtZW50KCkp
IHsKKyAgICAgICAgY29uc3QgSFRNTEVsZW1lbnRJbXBsKiBodG1sRWx0ID0gc3RhdGljX2Nhc3Q8
Y29uc3QgSFRNTEVsZW1lbnRJbXBsKj4obm9kZSk7CisgICAgICAgIGhhc0VuZFRhZyA9IChodG1s
RWx0LT5lbmRUYWdSZXF1aXJlbWVudCgpICE9IEZPUkJJRERFTik7CiAgICAgfQorICAgIGlmICho
YXNFbmRUYWcpCisgICAgICAgIHJldHVybiAiPC8iICsgbm9kZS0+bm9kZU5hbWUoKS5zdHJpbmco
KSArICI+IjsKICAgICByZXR1cm4gIiI7CiB9CiAKQEAgLTI2NSw4ICsyNjcsMTQgQEAgc3RhdGlj
IFFTdHJpbmcgbWFya3VwKGNvbnN0IE5vZGVJbXBsICpzdAogICAgICAgICAgICAgICAgIG5vZGVz
LT5hcHBlbmQoY3VycmVudCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBtZSArPSBzdGFy
dE1hcmt1cChjdXJyZW50LCAwLCBEb05vdEFubm90YXRlRm9ySW50ZXJjaGFuZ2UsIDApOwotICAg
ICAgICB9ICAgICAgICAKLSAgICAgICAgaWYgKCFjdXJyZW50LT5pc0hUTUxFbGVtZW50KCkgfHwg
ZW5kVGFnUmVxdWlyZW1lbnQoY3VycmVudC0+aWQoKSkgIT0gRk9SQklEREVOKSB7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgY29udGFpbmVyID0gdHJ1ZTsKKyAgICAgICAgaWYg
KGN1cnJlbnQtPmlzSFRNTEVsZW1lbnQoKSkgeworICAgICAgICAgICAgY29uc3QgSFRNTEVsZW1l
bnRJbXBsKiBoID0gc3RhdGljX2Nhc3Q8Y29uc3QgSFRNTEVsZW1lbnRJbXBsKj4oY3VycmVudCk7
CisgICAgICAgICAgICBjb250YWluZXIgPSBoLT5lbmRUYWdSZXF1aXJlbWVudCgpICE9IEZPUkJJ
RERFTjsKKyAgICAgICAgfQorICAgICAgICBpZiAoY29udGFpbmVyKSB7CiAgICAgICAgICAgICAv
LyBwcmludCBjaGlsZHJlbgogICAgICAgICAgICAgaWYgKE5vZGVJbXBsICpuID0gY3VycmVudC0+
Zmlyc3RDaGlsZCgpKSB7CiAgICAgICAgICAgICAgICAgbWUgKz0gbWFya3VwKG4sIGZhbHNlLCB0
cnVlLCBub2Rlcyk7CkBAIC00MTQsOSArNDIyLDkgQEAgUVN0cmluZyBjcmVhdGVNYXJrdXAoY29u
c3QgUmFuZ2VJbXBsICpyYQogICAgICAgICAgICAgfQogICAgICAgICAgICAgYm9vbCBicmVha0F0
RW5kID0gZmFsc2U7CiAgICAgICAgICAgICBpZiAoY29tbW9uQW5jZXN0b3JCbG9jayA9PSBhbmNl
c3RvcikgewotICAgICAgICAgICAgICAgIE5vZGVJbXBsOjpJZCBpZCA9IGFuY2VzdG9yLT5pZCgp
OwogICAgICAgICAgICAgICAgIC8vIEluY2x1ZGUgYW5jZXN0b3JzIHRoYXQgYXJlIHJlcXVpcmVk
IHRvIHJldGFpbiB0aGUgYXBwZWFyYW5jZSBvZiB0aGUgY29waWVkIG1hcmt1cC4KLSAgICAgICAg
ICAgICAgICBpZiAoaWQgPT0gSURfUFJFIHx8IGlkID09IElEX1RBQkxFIHx8IGlkID09IElEX09M
IHx8IGlkID09IElEX1VMKSB7CisgICAgICAgICAgICAgICAgaWYgKGFuY2VzdG9yLT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6cHJlKCkpIHx8IGFuY2VzdG9yLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
dGFibGUoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgYW5jZXN0b3ItPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjpvbCgpKSB8fCBhbmNlc3Rvci0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnVsKCkpKSB7
CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrQXRFbmQgPSB0cnVlOwogICAgICAgICAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpJbmRleDoga2h0bWwvZWRpdGlu
Zy9yZXBsYWNlX3NlbGVjdGlvbl9jb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL3JlcGxhY2Vfc2VsZWN0aW9uX2NvbW1hbmQuY3Bw
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIKZGlmZiAtdSAtcCAtcjEuMiBraHRtbC9lZGl0aW5n
L3JlcGxhY2Vfc2VsZWN0aW9uX2NvbW1hbmQuY3BwCi0tLSBraHRtbC9lZGl0aW5nL3JlcGxhY2Vf
c2VsZWN0aW9uX2NvbW1hbmQuY3BwCTIyIEp1biAyMDA1IDAxOjE1OjQzIC0wMDAwCTEuMgorKysg
a2h0bWwvZWRpdGluZy9yZXBsYWNlX3NlbGVjdGlvbl9jb21tYW5kLmNwcAkyMyBKdW4gMjAwNSAw
MToxMDo0NSAtMDAwMApAQCAtMjcsNyArMjcsNyBAQAogCiAjaW5jbHVkZSAidmlzaWJsZV9wb3Np
dGlvbi5oIgogI2luY2x1ZGUgIm1pc2MvaHRtbGF0dHJzLmgiCi0jaW5jbHVkZSAibWlzYy9odG1s
dGFncy5oIgorI2luY2x1ZGUgImh0bWxuYW1lcy5oIgogI2luY2x1ZGUgInhtbC9kb21fZG9jaW1w
bC5oIgogI2luY2x1ZGUgImh0bWxfaW50ZXJjaGFuZ2UuaCIKICNpbmNsdWRlICJ4bWwvZG9tX3Rl
eHRpbXBsLmgiCkBAIC01OCw2ICs1OCw3IEBAIHVzaW5nIERPTTo6RE9NU3RyaW5nOwogdXNpbmcg
RE9NOjpIVE1MRWxlbWVudEltcGw7CiB1c2luZyBET006OkNTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uSW1wbDsKIHVzaW5nIERPTTo6UG9zaXRpb247Cit1c2luZyBET006OkhUTUxOYW1lczsKIAog
bmFtZXNwYWNlIGtodG1sIHsKIApAQCAtMTY3LDMwICsxNjgsMTQgQEAgc3RhdGljIGJvb2wgaXNQ
cm9iYWJseUJsb2NrKGNvbnN0IE5vZGVJbQogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIAotICAgIHN3aXRjaCAobm9kZS0+aWQoKSkgewotICAgICAgICBjYXNlIElE
X0JMT0NLUVVPVEU6Ci0gICAgICAgIGNhc2UgSURfREQ6Ci0gICAgICAgIGNhc2UgSURfRElWOgot
ICAgICAgICBjYXNlIElEX0RMOgotICAgICAgICBjYXNlIElEX0RUOgotICAgICAgICBjYXNlIElE
X0gxOgotICAgICAgICBjYXNlIElEX0gyOgotICAgICAgICBjYXNlIElEX0gzOgotICAgICAgICBj
YXNlIElEX0g0OgotICAgICAgICBjYXNlIElEX0g1OgotICAgICAgICBjYXNlIElEX0g2OgotICAg
ICAgICBjYXNlIElEX0hSOgotICAgICAgICBjYXNlIElEX0xJOgotICAgICAgICBjYXNlIElEX09M
OgotICAgICAgICBjYXNlIElEX1A6Ci0gICAgICAgIGNhc2UgSURfUFJFOgotICAgICAgICBjYXNl
IElEX1REOgotICAgICAgICBjYXNlIElEX1RIOgotICAgICAgICBjYXNlIElEX1VMOgotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBmYWxzZTsKKyAgICAv
LyBGSVhNRTogVGhpcyBmdW5jdGlvbiBzZWVtcyByZWFsbHkgYnJva2VuIHRvIG1lLiAgSXQgaXNu
J3QgZXZlbiBpbmNsdWRpbmcgYWxsIHRoZSBibG9jay1sZXZlbCBlbGVtZW50cy4KKyAgICByZXR1
cm4gKG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpibG9ja3F1b3RlKCkpIHx8IG5vZGUtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjpkZCgpKSB8fCBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
ZGl2KCkpIHx8CisgICAgICAgICAgICBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZGwoKSkg
fHwgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmR0KCkpIHx8IG5vZGUtPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjpoMSgpKSB8fAorICAgICAgICAgICAgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OmgyKCkpIHx8IG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoMygpKSB8fCBub2RlLT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6aDQoKSkgfHwKKyAgICAgICAgICAgIG5vZGUtPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjpoNSgpKSB8fCBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDYoKSkg
fHwgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmhyKCkpIHx8CisgICAgICAgICAgICBub2Rl
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6bGkoKSkgfHwgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6Om9sKCkpIHx8IG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpwKCkpIHx8CisgICAgICAg
ICAgICBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6cHJlKCkpIHx8IG5vZGUtPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjp0ZCgpKSB8fCBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGgoKSkg
fHwKKyAgICAgICAgICAgIG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp1bCgpKSk7CiB9CiAK
IHN0YXRpYyBib29sIGlzTWFpbFBhc3RlQXNRdW90YXRpb25Ob2RlKGNvbnN0IE5vZGVJbXBsICpu
b2RlKQpAQCAtMjE0LDE2ICsxOTksOCBAQCBzdGF0aWMgYm9vbCBpc1Byb2JhYmx5VGFibGVTdHJ1
Y3R1cmVOb2RlCiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0g
ICAgc3dpdGNoIChub2RlLT5pZCgpKSB7Ci0gICAgICAgIGNhc2UgSURfVEFCTEU6Ci0gICAgICAg
IGNhc2UgSURfVEJPRFk6Ci0gICAgICAgIGNhc2UgSURfVEQ6Ci0gICAgICAgIGNhc2UgSURfVEZP
T1Q6Ci0gICAgICAgIGNhc2UgSURfVEhFQUQ6Ci0gICAgICAgIGNhc2UgSURfVFI6Ci0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiAo
bm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRhYmxlKCkpIHx8IG5vZGUtPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjp0Ym9keSgpKSB8fCBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGQoKSkg
fHwKKyAgICAgICAgICAgIG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0Zm9vdCgpKSB8fCBu
b2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGhlYWQoKSkgfHwgbm9kZS0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OnRyKCkpKTsKIH0KIAogdm9pZCBSZXBsYWNlbWVudEZyYWdtZW50OjpwcnVuZUVt
cHR5Tm9kZXMoKQpAQCAtMjUwLDcgKzIyNyw3IEBAIHZvaWQgUmVwbGFjZW1lbnRGcmFnbWVudDo6
cHJ1bmVFbXB0eU5vZGUKIGJvb2wgUmVwbGFjZW1lbnRGcmFnbWVudDo6aXNJbnRlcmNoYW5nZU5l
d2xpbmVOb2RlKGNvbnN0IE5vZGVJbXBsICpub2RlKQogewogICAgIHN0YXRpYyBET01TdHJpbmcg
aW50ZXJjaGFuZ2VOZXdsaW5lQ2xhc3NTdHJpbmcoQXBwbGVJbnRlcmNoYW5nZU5ld2xpbmUpOwot
ICAgIHJldHVybiBub2RlICYmIG5vZGUtPmlkKCkgPT0gSURfQlIgJiYgc3RhdGljX2Nhc3Q8Y29u
c3QgRWxlbWVudEltcGwgKj4obm9kZSktPmdldEF0dHJpYnV0ZShBVFRSX0NMQVNTKSA9PSBpbnRl
cmNoYW5nZU5ld2xpbmVDbGFzc1N0cmluZzsKKyAgICByZXR1cm4gbm9kZSAmJiBub2RlLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6YnIoKSkgJiYgc3RhdGljX2Nhc3Q8Y29uc3QgRWxlbWVudEltcGwg
Kj4obm9kZSktPmdldEF0dHJpYnV0ZShBVFRSX0NMQVNTKSA9PSBpbnRlcmNoYW5nZU5ld2xpbmVD
bGFzc1N0cmluZzsKIH0KIAogYm9vbCBSZXBsYWNlbWVudEZyYWdtZW50Ojppc0ludGVyY2hhbmdl
Q29udmVydGVkU3BhY2VTcGFuKGNvbnN0IE5vZGVJbXBsICpub2RlKQpAQCAtNTA3LDE4ICs0ODQs
MTkgQEAgdm9pZCBSZXBsYWNlbWVudEZyYWdtZW50OjpyZW1vdmVTdHlsZU5vZAogICAgICAgICBO
b2RlSW1wbCAqbmV4dCA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKTsKICAgICAgICAgLy8gVGhp
cyBsaXN0IG9mIHRhZ3MgY2hhbmdlIHRoZSBhcHBlYXJhbmNlIG9mIGNvbnRlbnQKICAgICAgICAg
Ly8gaW4gd2F5cyB3ZSBjYW4gYWRkIGJhY2sgb24gbGF0ZXIgd2l0aCBDU1MsIGlmIG5lY2Vzc2Fy
eS4KLSAgICAgICAgaWYgKG5vZGUtPmlkKCkgPT0gSURfQiB8fCAKLSAgICAgICAgICAgIG5vZGUt
PmlkKCkgPT0gSURfQklHIHx8IAotICAgICAgICAgICAgbm9kZS0+aWQoKSA9PSBJRF9DRU5URVIg
fHwgCi0gICAgICAgICAgICBub2RlLT5pZCgpID09IElEX0ZPTlQgfHwgCi0gICAgICAgICAgICBu
b2RlLT5pZCgpID09IElEX0kgfHwgCi0gICAgICAgICAgICBub2RlLT5pZCgpID09IElEX1MgfHwg
Ci0gICAgICAgICAgICBub2RlLT5pZCgpID09IElEX1NNQUxMIHx8IAotICAgICAgICAgICAgbm9k
ZS0+aWQoKSA9PSBJRF9TVFJJS0UgfHwgCi0gICAgICAgICAgICBub2RlLT5pZCgpID09IElEX1NV
QiB8fCAKLSAgICAgICAgICAgIG5vZGUtPmlkKCkgPT0gSURfU1VQIHx8IAotICAgICAgICAgICAg
bm9kZS0+aWQoKSA9PSBJRF9UVCB8fCAKLSAgICAgICAgICAgIG5vZGUtPmlkKCkgPT0gSURfVSB8
fCAKKyAgICAgICAgLy8gIEZJWE1FOiBUaGlzIGxpc3QgaXMgaW5jb21wbGV0ZQorICAgICAgICBp
ZiAobm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmIoKSkgfHwgCisgICAgICAgICAgICBub2Rl
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YmlnKCkpIHx8IAorICAgICAgICAgICAgbm9kZS0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OmNlbnRlcigpKSB8fCAKKyAgICAgICAgICAgIG5vZGUtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjpmb250KCkpIHx8IAorICAgICAgICAgICAgbm9kZS0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OmkoKSkgfHwgCisgICAgICAgICAgICBub2RlLT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6cygpKSB8fCAKKyAgICAgICAgICAgIG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpz
bWFsbCgpKSB8fCAKKyAgICAgICAgICAgIG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzdHJp
a2UoKSkgfHwgCisgICAgICAgICAgICBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c3ViKCkp
IHx8IAorICAgICAgICAgICAgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnN1cCgpKSB8fCAK
KyAgICAgICAgICAgIG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0dCgpKSB8fCAKKyAgICAg
ICAgICAgIG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp1KCkpIHx8IAogICAgICAgICAgICAg
aXNTdHlsZVNwYW4obm9kZSkpIHsKICAgICAgICAgICAgIHJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hp
bGRyZW4obm9kZSk7CiAgICAgICAgIH0KQEAgLTc0NCw3ICs3MjIsNyBAQCB2b2lkIFJlcGxhY2VT
ZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KCkKICAgICBpZiAoIWxpbmVQbGFjZWhvbGRlcikgewog
ICAgICAgICBQb3NpdGlvbiBkb3duc3RyZWFtID0gc3RhcnRQb3MuZG93bnN0cmVhbSgpOwogICAg
ICAgICBkb3duc3RyZWFtID0gcG9zaXRpb25PdXRzaWRlQ29udGFpbmluZ1NwZWNpYWxFbGVtZW50
KGRvd25zdHJlYW0pOwotICAgICAgICBpZiAoZG93bnN0cmVhbS5ub2RlKCktPmlkKCkgPT0gSURf
QlIgJiYgZG93bnN0cmVhbS5vZmZzZXQoKSA9PSAwICYmIAorICAgICAgICBpZiAoZG93bnN0cmVh
bS5ub2RlKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpicigpKSAmJiBkb3duc3RyZWFtLm9mZnNl
dCgpID09IDAgJiYgCiAgICAgICAgICAgICBtX2ZyYWdtZW50Lmhhc0ludGVyY2hhbmdlTmV3bGlu
ZUF0RW5kKCkgJiYKICAgICAgICAgICAgIGlzU3RhcnRPZkxpbmUoVmlzaWJsZVBvc2l0aW9uKGRv
d25zdHJlYW0sIFZQX0RFRkFVTFRfQUZGSU5JVFkpKSkKICAgICAgICAgICAgIGxpbmVQbGFjZWhv
bGRlciA9IGRvd25zdHJlYW0ubm9kZSgpOwpAQCAtOTA2LDEyICs4ODQsMTIgQEAgdm9pZCBSZXBs
YWNlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgICAgIH0KICAgICB9IAogICAgIGVs
c2UgewotICAgICAgICBpZiAobV9sYXN0Tm9kZUluc2VydGVkICYmIG1fbGFzdE5vZGVJbnNlcnRl
ZC0+aWQoKSA9PSBJRF9CUiAmJiAhZG9jdW1lbnQoKS0+aW5TdHJpY3RNb2RlKCkpIHsKKyAgICAg
ICAgaWYgKG1fbGFzdE5vZGVJbnNlcnRlZCAmJiBtX2xhc3ROb2RlSW5zZXJ0ZWQtPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjpicigpKSAmJiAhZG9jdW1lbnQoKS0+aW5TdHJpY3RNb2RlKCkpIHsKICAg
ICAgICAgICAgIGRvY3VtZW50KCktPnVwZGF0ZUxheW91dCgpOwogICAgICAgICAgICAgVmlzaWJs
ZVBvc2l0aW9uIHBvcyhQb3NpdGlvbihtX2xhc3ROb2RlSW5zZXJ0ZWQsIDEpLCBET1dOU1RSRUFN
KTsKICAgICAgICAgICAgIGlmIChpc0VuZE9mQmxvY2socG9zKSkgewogICAgICAgICAgICAgICAg
IE5vZGVJbXBsICpuZXh0ID0gbV9sYXN0Tm9kZUluc2VydGVkLT50cmF2ZXJzZU5leHROb2RlKCk7
Ci0gICAgICAgICAgICAgICAgYm9vbCBoYXNUcmFpbGluZ0JSID0gbmV4dCAmJiBuZXh0LT5pZCgp
ID09IElEX0JSICYmIG1fbGFzdE5vZGVJbnNlcnRlZC0+ZW5jbG9zaW5nQmxvY2tGbG93RWxlbWVu
dCgpID09IG5leHQtPmVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQoKTsKKyAgICAgICAgICAgICAg
ICBib29sIGhhc1RyYWlsaW5nQlIgPSBuZXh0ICYmIG5leHQtPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjpicigpKSAmJiBtX2xhc3ROb2RlSW5zZXJ0ZWQtPmVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQo
KSA9PSBuZXh0LT5lbmNsb3NpbmdCbG9ja0Zsb3dFbGVtZW50KCk7CiAgICAgICAgICAgICAgICAg
aWYgKCFoYXNUcmFpbGluZ0JSKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIEluc2VydCBhbiAi
ZXh0cmEiIEJSIGF0IHRoZSBlbmQgb2YgdGhlIGJsb2NrLiAKICAgICAgICAgICAgICAgICAgICAg
aW5zZXJ0Tm9kZUJlZm9yZShjcmVhdGVCcmVha0VsZW1lbnQoZG9jdW1lbnQoKSksIG1fbGFzdE5v
ZGVJbnNlcnRlZCk7CkBAIC05MzgsNyArOTE2LDcgQEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29t
bWFuZDo6ZG9BcHBseSgpCiAgICAgICAgICAgICAgICAgaW5zZXJ0Tm9kZUFmdGVyKG5vZGUsIHJl
Zk5vZGUpOwogICAgICAgICAgICAgICAgIHJlZk5vZGUgPSBub2RlOwogICAgICAgICAgICAgICAg
IC8vIFdlIHdhbnQgdG8gbW92ZSB0aGUgZmlyc3QgQlIgd2Ugc2VlLCBzbyBjaGVjayBmb3IgdGhh
dCBoZXJlLgotICAgICAgICAgICAgICAgIGlmIChub2RlLT5pZCgpID09IElEX0JSKQorICAgICAg
ICAgICAgICAgIGlmIChub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YnIoKSkpCiAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIG5vZGUgPSBuZXh0OwogICAgICAg
ICAgICAgfQpAQCAtMTA4Niw3ICsxMDY0LDcgQEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFu
ZDo6dXBkYXRlTm9kZQogICAgIAogICAgIC8vIHVwZGF0ZSBtX2xhc3ROb2RlSW5zZXJ0ZWQKICAg
ICBOb2RlSW1wbCAqb2xkID0gbV9sYXN0Tm9kZUluc2VydGVkOwotICAgIG1fbGFzdE5vZGVJbnNl
cnRlZCA9IG5vZGUtPmxhc3REZXNjZW5kZW50KCk7CisgICAgbV9sYXN0Tm9kZUluc2VydGVkID0g
bm9kZS0+bGFzdERlc2NlbmRhbnQoKTsKICAgICBtX2xhc3ROb2RlSW5zZXJ0ZWQtPnJlZigpOwog
ICAgIGlmIChvbGQpCiAgICAgICAgIG9sZC0+ZGVyZWYoKTsKSW5kZXg6IGtodG1sL2VkaXRpbmcv
c2VsZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRt
bC9lZGl0aW5nL3NlbGVjdGlvbi5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuODgKZGlmZiAt
dSAtcCAtcjEuODgga2h0bWwvZWRpdGluZy9zZWxlY3Rpb24uY3BwCi0tLSBraHRtbC9lZGl0aW5n
L3NlbGVjdGlvbi5jcHAJMjEgSnVuIDIwMDUgMTg6MTE6MTAgLTAwMDAJMS44OAorKysga2h0bWwv
ZWRpdGluZy9zZWxlY3Rpb24uY3BwCTIzIEp1biAyMDA1IDAxOjEwOjQ1IC0wMDAwCkBAIC0zMyw3
ICszMyw2IEBACiAjaW5jbHVkZSAiZG9tL2RvbV9zdHJpbmcuaCIKICNpbmNsdWRlICJraHRtbF9w
YXJ0LmgiCiAjaW5jbHVkZSAia2h0bWx2aWV3LmgiCi0jaW5jbHVkZSAibWlzYy9odG1sdGFncy5o
IgogI2luY2x1ZGUgInJlbmRlcmluZy9yZW5kZXJfb2JqZWN0LmgiCiAjaW5jbHVkZSAicmVuZGVy
aW5nL3JlbmRlcl9zdHlsZS5oIgogI2luY2x1ZGUgInJlbmRlcmluZy9yZW5kZXJfdGV4dC5oIgpA
QCAtOTM4LDcgKzkzNyw3IEBAIHZvaWQgU2VsZWN0aW9uOjpkZWJ1Z1JlbmRlcmVyKFJlbmRlck9i
amUKIHsKICAgICBpZiAoci0+bm9kZSgpLT5pc0VsZW1lbnROb2RlKCkpIHsKICAgICAgICAgRWxl
bWVudEltcGwgKmVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50SW1wbCAqPihyLT5ub2RlKCkp
OwotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzJXNcbiIsIHNlbGVjdGVkID8gIj09PiAiIDog
IiAgICAiLCBlbGVtZW50LT50YWdOYW1lKCkuc3RyaW5nKCkubGF0aW4xKCkpOworICAgICAgICBm
cHJpbnRmKHN0ZGVyciwgIiVzJXNcbiIsIHNlbGVjdGVkID8gIj09PiAiIDogIiAgICAiLCBlbGVt
ZW50LT5sb2NhbE5hbWUoKS5zdHJpbmcoKS5sYXRpbjEoKSk7CiAgICAgfQogICAgIGVsc2UgaWYg
KHItPmlzVGV4dCgpKSB7CiAgICAgICAgIFJlbmRlclRleHQgKnRleHRSZW5kZXJlciA9IHN0YXRp
Y19jYXN0PFJlbmRlclRleHQgKj4ocik7CkluZGV4OiBraHRtbC9lZGl0aW5nL3Zpc2libGVfcG9z
aXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2Vk
aXRpbmcvdmlzaWJsZV9wb3NpdGlvbi5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNTAKZGlm
ZiAtdSAtcCAtcjEuNTAga2h0bWwvZWRpdGluZy92aXNpYmxlX3Bvc2l0aW9uLmNwcAotLS0ga2h0
bWwvZWRpdGluZy92aXNpYmxlX3Bvc2l0aW9uLmNwcAkyMSBKdW4gMjAwNSAxODoxMToxMCAtMDAw
MAkxLjUwCisrKyBraHRtbC9lZGl0aW5nL3Zpc2libGVfcG9zaXRpb24uY3BwCTIzIEp1biAyMDA1
IDAxOjEwOjQ2IC0wMDAwCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSAidmlzaWJsZV9wb3Np
dGlvbi5oIgogI2luY2x1ZGUgInZpc2libGVfdW5pdHMuaCIKIAotI2luY2x1ZGUgIm1pc2MvaHRt
bHRhZ3MuaCIKKyNpbmNsdWRlICJodG1sbmFtZXMuaCIKICNpbmNsdWRlICJyZW5kZXJpbmcvcmVu
ZGVyX2xpbmUuaCIKICNpbmNsdWRlICJyZW5kZXJpbmcvcmVuZGVyX29iamVjdC5oIgogI2luY2x1
ZGUgInJlbmRlcmluZy9yZW5kZXJfdGV4dC5oIgpAQCAtNTAsNiArNTAsNyBAQCB1c2luZyBET006
OlBvc2l0aW9uOwogdXNpbmcgRE9NOjpSYW5nZTsKIHVzaW5nIERPTTo6UmFuZ2VJbXBsOwogdXNp
bmcgRE9NOjpUZXh0SW1wbDsKK3VzaW5nIERPTTo6SFRNTE5hbWVzOwogCiBuYW1lc3BhY2Uga2h0
bWwgewogCkBAIC03NCw3ICs3NSw3IEBAIHZvaWQgVmlzaWJsZVBvc2l0aW9uOjppbml0KGNvbnN0
IFBvc2l0aW8KICAgICBtX2FmZmluaXR5ID0gYWZmaW5pdHk7CiAKICAgICAvLyBGb3IgPGJyPiAw
LCBpdCdzIGltcG9ydGFudCBub3QgdG8gbW92ZSBwYXN0IHRoZSA8YnI+LgotICAgIGlmIChwb3Mu
bm9kZSgpICYmIHBvcy5ub2RlKCktPmlkKCkgPT0gSURfQlIgJiYgcG9zLm9mZnNldCgpID09IDAp
CisgICAgaWYgKHBvcy5ub2RlKCkgJiYgcG9zLm5vZGUoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
OmJyKCkpICYmIHBvcy5vZmZzZXQoKSA9PSAwKQogICAgICAgICBpbml0VXBzdHJlYW0ocG9zKTsK
ICAgICBlbHNlCiAgICAgICAgIGluaXREb3duc3RyZWFtKHBvcyk7CkBAIC0yNzQsNyArMjc1LDcg
QEAgYm9vbCBWaXNpYmxlUG9zaXRpb246OmlzQ2FuZGlkYXRlKGNvbnN0IAogICAgIH0KICAgICAK
ICAgICBpZiAocmVuZGVyZXItPmlzQmxvY2tGbG93KCkgJiYgKCFyZW5kZXJlci0+Zmlyc3RDaGls
ZCgpIHx8ICFwb3Mubm9kZSgpLT5maXJzdENoaWxkKCkpICYmIAotICAgICAgIChyZW5kZXJlci0+
aGVpZ2h0KCkgfHwgcG9zLm5vZGUoKS0+aWQoKSA9PSBJRF9CT0RZKSkgeworICAgICAgIChyZW5k
ZXJlci0+aGVpZ2h0KCkgfHwgcG9zLm5vZGUoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJvZHko
KSkpKSB7CiAgICAgICAgIC8vIHJldHVybiB0cnVlIGZvciBvZmZzZXQgMCBpbnRvIHJlbmRlcmVk
IGJsb2NrcyB0aGF0IGFyZSBlbXB0eSBvZiByZW5kZXJlZCBraWRzLCBidXQgaGF2ZSBhIGhlaWdo
dAogICAgICAgICByZXR1cm4gcG9zLm9mZnNldCgpID09IDA7CiAgICAgfQpAQCAtMzU5LDcgKzM2
MCw3IEBAIGxvbmcgVmlzaWJsZVBvc2l0aW9uOjptYXhPZmZzZXQoY29uc3QgTm8KIAogYm9vbCBW
aXNpYmxlUG9zaXRpb246OmlzQXRvbWljTm9kZShjb25zdCBOb2RlSW1wbCAqbm9kZSkKIHsKLSAg
ICByZXR1cm4gbm9kZSAmJiAoIW5vZGUtPmhhc0NoaWxkTm9kZXMoKSB8fCAobm9kZS0+aWQoKSA9
PSBJRF9PQkpFQ1QgJiYgbm9kZS0+cmVuZGVyZXIoKSAmJiBub2RlLT5yZW5kZXJlcigpLT5pc1Jl
cGxhY2VkKCkpKTsKKyAgICByZXR1cm4gbm9kZSAmJiAoIW5vZGUtPmhhc0NoaWxkTm9kZXMoKSB8
fCAobm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9iamVjdCgpKSAmJiBub2RlLT5yZW5kZXJl
cigpICYmIG5vZGUtPnJlbmRlcmVyKCktPmlzUmVwbGFjZWQoKSkpOwogfQogCiBRQ2hhciBWaXNp
YmxlUG9zaXRpb246OmNoYXJhY3RlcigpIGNvbnN0CkluZGV4OiBraHRtbC9lZGl0aW5nL3Zpc2li
bGVfdGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwv
ZWRpdGluZy92aXNpYmxlX3RleHQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjI3CmRpZmYg
LXUgLXAgLXIxLjI3IGtodG1sL2VkaXRpbmcvdmlzaWJsZV90ZXh0LmNwcAotLS0ga2h0bWwvZWRp
dGluZy92aXNpYmxlX3RleHQuY3BwCTEzIE1heSAyMDA1IDE2OjQ4OjUxIC0wMDAwCTEuMjcKKysr
IGtodG1sL2VkaXRpbmcvdmlzaWJsZV90ZXh0LmNwcAkyMyBKdW4gMjAwNSAwMToxMDo0NyAtMDAw
MApAQCAtMjUsNyArMjUsNyBAQAogCiAjaW5jbHVkZSAidmlzaWJsZV90ZXh0LmgiCiAKLSNpbmNs
dWRlICJtaXNjL2h0bWx0YWdzLmgiCisjaW5jbHVkZSAiaHRtbG5hbWVzLmgiCiAjaW5jbHVkZSAi
cmVuZGVyaW5nL3JlbmRlcl90ZXh0LmgiCiAjaW5jbHVkZSAieG1sL2RvbV9ub2RlaW1wbC5oIgog
I2luY2x1ZGUgInhtbC9kb21fcG9zaXRpb24uaCIKQEAgLTM3LDYgKzM3LDcgQEAgdXNpbmcgRE9N
OjpOb2RlOwogdXNpbmcgRE9NOjpOb2RlSW1wbDsKIHVzaW5nIERPTTo6b2Zmc2V0SW5DaGFyYWN0
ZXJzOwogdXNpbmcgRE9NOjpSYW5nZUltcGw7Cit1c2luZyBET006OkhUTUxOYW1lczsKIAogLy8g
RklYTUU6IFRoZXNlIGNsYXNzZXMgc2hvdWxkIHByb2JhYmx5IHVzZSB0aGUgcmVuZGVyIHRyZWUg
YW5kIG5vdCB0aGUgRE9NIHRyZWUsIHNpbmNlIGVsZW1lbnRzIGNvdWxkCiAvLyBiZSBoaWRkZW4g
dXNpbmcgQ1NTLCBvciBhZGRpdGlvbmFsIGdlbmVyYXRlZCBjb250ZW50IGNvdWxkIGJlIGFkZGVk
LiAgRm9yIG5vdywgd2UganVzdCBtYWtlIHN1cmUKQEAgLTMzNiw0MSArMzM3LDI1IEBAIGJvb2wg
VGV4dEl0ZXJhdG9yOjpoYW5kbGVSZXBsYWNlZEVsZW1lbnQKIAogYm9vbCBUZXh0SXRlcmF0b3I6
OmhhbmRsZU5vblRleHROb2RlKCkKIHsKLSAgICBzd2l0Y2ggKG1fbm9kZS0+aWQoKSkgewotICAg
ICAgICBjYXNlIElEX0JSOiB7Ci0gICAgICAgICAgICBlbWl0Q2hhcmFjdGVyKCdcbicsIG1fbm9k
ZS0+cGFyZW50Tm9kZSgpLCBtX25vZGUsIDAsIDEpOwotICAgICAgICAgICAgYnJlYWs7CisgICAg
aWYgKG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJyKCkpKSB7CisgICAgICAgIGVtaXRD
aGFyYWN0ZXIoJ1xuJywgbV9ub2RlLT5wYXJlbnROb2RlKCksIG1fbm9kZSwgMCwgMSk7CisgICAg
fSBlbHNlIGlmIChtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0ZCgpKSB8fCBtX25vZGUt
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0aCgpKSkgeworICAgICAgICBpZiAobV9sYXN0Q2hhcmFj
dGVyICE9ICdcbicgJiYgbV9sYXN0VGV4dE5vZGUpIHsKKyAgICAgICAgICAgIGVtaXRDaGFyYWN0
ZXIoJ1x0JywgbV9sYXN0VGV4dE5vZGUtPnBhcmVudE5vZGUoKSwgbV9sYXN0VGV4dE5vZGUsIDAs
IDEpOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjpibG9ja3F1b3RlKCkpIHx8IG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmRkKCkp
IHx8CisgICAgICAgICAgICAgICBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpkaXYoKSkg
fHwKKyAgICAgICAgICAgICAgIG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmRsKCkpIHx8
IG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmR0KCkpIHx8IAorICAgICAgICAgICAgICAg
bV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDEoKSkgfHwgbV9ub2RlLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6aDIoKSkgfHwKKyAgICAgICAgICAgICAgIG1fbm9kZS0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OmgzKCkpIHx8IG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omg0KCkpIHx8
CisgICAgICAgICAgICAgICBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoNSgpKSB8fCBt
X25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoNigpKSB8fAorICAgICAgICAgICAgICAgbV9u
b2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aHIoKSkgfHwgbV9ub2RlLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6bGkoKSkgfHwKKyAgICAgICAgICAgICAgIG1fbm9kZS0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6Om9sKCkpIHx8IG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnAoKSkgfHwKKyAg
ICAgICAgICAgICAgIG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnByZSgpKSB8fCBtX25v
ZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0cigpKSB8fAorICAgICAgICAgICAgICAgbV9ub2Rl
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dWwoKSkpIHsKKyAgICAgICAgaWYgKG1fbGFzdENoYXJh
Y3RlciAhPSAnXG4nICYmIG1fbGFzdFRleHROb2RlKSB7CisgICAgICAgICAgICBlbWl0Q2hhcmFj
dGVyKCdcbicsIG1fbGFzdFRleHROb2RlLT5wYXJlbnROb2RlKCksIG1fbGFzdFRleHROb2RlLCAw
LCAxKTsKICAgICAgICAgfQotCi0gICAgICAgIGNhc2UgSURfVEQ6Ci0gICAgICAgIGNhc2UgSURf
VEg6Ci0gICAgICAgICAgICBpZiAobV9sYXN0Q2hhcmFjdGVyICE9ICdcbicgJiYgbV9sYXN0VGV4
dE5vZGUpIHsKLSAgICAgICAgICAgICAgICBlbWl0Q2hhcmFjdGVyKCdcdCcsIG1fbGFzdFRleHRO
b2RlLT5wYXJlbnROb2RlKCksIG1fbGFzdFRleHROb2RlLCAwLCAxKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgSURfQkxPQ0tRVU9URToKLSAgICAg
ICAgY2FzZSBJRF9ERDoKLSAgICAgICAgY2FzZSBJRF9ESVY6Ci0gICAgICAgIGNhc2UgSURfREw6
Ci0gICAgICAgIGNhc2UgSURfRFQ6Ci0gICAgICAgIGNhc2UgSURfSDE6Ci0gICAgICAgIGNhc2Ug
SURfSDI6Ci0gICAgICAgIGNhc2UgSURfSDM6Ci0gICAgICAgIGNhc2UgSURfSDQ6Ci0gICAgICAg
IGNhc2UgSURfSDU6Ci0gICAgICAgIGNhc2UgSURfSDY6Ci0gICAgICAgIGNhc2UgSURfSFI6Ci0g
ICAgICAgIGNhc2UgSURfTEk6Ci0gICAgICAgIGNhc2UgSURfT0w6Ci0gICAgICAgIGNhc2UgSURf
UDoKLSAgICAgICAgY2FzZSBJRF9QUkU6Ci0gICAgICAgIGNhc2UgSURfVFI6Ci0gICAgICAgIGNh
c2UgSURfVUw6Ci0gICAgICAgICAgICBpZiAobV9sYXN0Q2hhcmFjdGVyICE9ICdcbicgJiYgbV9s
YXN0VGV4dE5vZGUpIHsKLSAgICAgICAgICAgICAgICBlbWl0Q2hhcmFjdGVyKCdcbicsIG1fbGFz
dFRleHROb2RlLT5wYXJlbnROb2RlKCksIG1fbGFzdFRleHROb2RlLCAwLCAxKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIHJldHVybiB0cnVlOwpAQCAt
MzgxLDQ5ICszNjYsMzYgQEAgdm9pZCBUZXh0SXRlcmF0b3I6OmV4aXROb2RlKCkKICAgICBib29s
IGVuZExpbmUgPSBmYWxzZTsKICAgICBib29sIGFkZE5ld2xpbmUgPSBmYWxzZTsKIAotICAgIHN3
aXRjaCAobV9ub2RlLT5pZCgpKSB7Ci0gICAgICAgIGNhc2UgSURfQkxPQ0tRVU9URToKLSAgICAg
ICAgY2FzZSBJRF9ERDoKLSAgICAgICAgY2FzZSBJRF9ESVY6Ci0gICAgICAgIGNhc2UgSURfREw6
Ci0gICAgICAgIGNhc2UgSURfRFQ6Ci0gICAgICAgIGNhc2UgSURfSFI6Ci0gICAgICAgIGNhc2Ug
SURfTEk6Ci0gICAgICAgIGNhc2UgSURfT0w6Ci0gICAgICAgIGNhc2UgSURfUFJFOgotICAgICAg
ICBjYXNlIElEX1RSOgotICAgICAgICBjYXNlIElEX1VMOgotICAgICAgICAgICAgZW5kTGluZSA9
IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIElEX0gxOgotICAgICAg
ICBjYXNlIElEX0gyOgotICAgICAgICBjYXNlIElEX0gzOgotICAgICAgICBjYXNlIElEX0g0Ogot
ICAgICAgICBjYXNlIElEX0g1OgotICAgICAgICBjYXNlIElEX0g2OgotICAgICAgICBjYXNlIElE
X1A6IHsKLSAgICAgICAgICAgIGVuZExpbmUgPSB0cnVlOwotCi0gICAgICAgICAgICAvLyBJbiBj
ZXJ0YWluIGNhc2VzLCBlbWl0IGEgbmV3IG5ld2xpbmUgY2hhcmFjdGVyIGZvciB0aGlzIG5vZGUK
LSAgICAgICAgICAgIC8vIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB3ZSBlbWl0IGFub3RoZXIgb25l
LgotICAgICAgICAgICAgLy8gRklYTUU6IFNvbWUgZGF5IHdlIGNvdWxkIGRvIHRoaXMgZm9yIG90
aGVyIHRhZ3MuCi0gICAgICAgICAgICAvLyBIb3dldmVyLCBkb2luZyBpdCBqdXN0IGZvciB0aGUg
dGFncyBhYm92ZSBtYWtlcyBpdCBtb3JlIGxpa2VseQotICAgICAgICAgICAgLy8gd2UnbGwgZW5k
IHVwIGdldHRpbmcgdGhlIHJpZ2h0IHJlc3VsdCB3aXRob3V0IG1hcmdpbiBjb2xsYXBzaW5nLgot
ICAgICAgICAgICAgLy8gRm9yIGV4YW1wbGU6IDxkaXY+PHA+dGV4dDwvcD48L2Rpdj4gd2lsbCB3
b3JrIHJpZ2h0IGV2ZW4gaWYgYm90aAotICAgICAgICAgICAgLy8gdGhlIDxkaXY+IGFuZCB0aGUg
PHA+IGhhdmUgYm90dG9tIG1hcmdpbnMuCi0gICAgICAgICAgICBSZW5kZXJPYmplY3QgKnJlbmRl
cmVyID0gbV9ub2RlLT5yZW5kZXJlcigpOwotICAgICAgICAgICAgaWYgKHJlbmRlcmVyKSB7Ci0g
ICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUgKnN0eWxlID0gcmVuZGVyZXItPnN0eWxlKCk7Ci0g
ICAgICAgICAgICAgICAgaWYgKHN0eWxlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBib3R0
b21NYXJnaW4gPSByZW5kZXJlci0+Y29sbGFwc2VkTWFyZ2luQm90dG9tKCk7Ci0gICAgICAgICAg
ICAgICAgICAgIGludCBmb250U2l6ZSA9IHN0eWxlLT5odG1sRm9udCgpLmdldEZvbnREZWYoKS5j
b21wdXRlZFBpeGVsU2l6ZSgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoYm90dG9tTWFyZ2lu
ICogMiA+PSBmb250U2l6ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgYWRkTmV3bGluZSA9
IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KKyAgICBpZiAobV9ub2RlLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6YmxvY2txdW90ZSgpKSB8fCBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjpkZCgpKSB8fAorICAgICAgICAgICAgICAgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
ZGl2KCkpIHx8CisgICAgICAgICAgICAgICBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpk
bCgpKSB8fCBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpkdCgpKSB8fCAKKyAgICAgICAg
ICAgICAgIG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmhyKCkpIHx8IG1fbm9kZS0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OmxpKCkpIHx8CisgICAgICAgICAgICAgICBtX25vZGUtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjpvbCgpKSB8fAorICAgICAgICAgICAgICAgbV9ub2RlLT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6cHJlKCkpIHx8IG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRy
KCkpIHx8CisgICAgICAgICAgICAgICBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp1bCgp
KSkKKyAgICAgICAgZW5kTGluZSA9IHRydWU7CisgICAgZWxzZSBpZiAobV9ub2RlLT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6aDEoKSkgfHwgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDIo
KSkgfHwKKyAgICAgICAgICAgICBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoMygpKSB8
fCBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoNCgpKSB8fAorICAgICAgICAgICAgIG1f
bm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omg1KCkpIHx8IG1fbm9kZS0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6Omg2KCkpKSB7CisgICAgICAgIGVuZExpbmUgPSB0cnVlOworCisgICAgICAgIC8v
IEluIGNlcnRhaW4gY2FzZXMsIGVtaXQgYSBuZXcgbmV3bGluZSBjaGFyYWN0ZXIgZm9yIHRoaXMg
bm9kZQorICAgICAgICAvLyByZWdhcmRsZXNzIG9mIHdoZXRoZXIgd2UgZW1pdCBhbm90aGVyIG9u
ZS4KKyAgICAgICAgLy8gRklYTUU6IFNvbWUgZGF5IHdlIGNvdWxkIGRvIHRoaXMgZm9yIG90aGVy
IHRhZ3MuCisgICAgICAgIC8vIEhvd2V2ZXIsIGRvaW5nIGl0IGp1c3QgZm9yIHRoZSB0YWdzIGFi
b3ZlIG1ha2VzIGl0IG1vcmUgbGlrZWx5CisgICAgICAgIC8vIHdlJ2xsIGVuZCB1cCBnZXR0aW5n
IHRoZSByaWdodCByZXN1bHQgd2l0aG91dCBtYXJnaW4gY29sbGFwc2luZy4KKyAgICAgICAgLy8g
Rm9yIGV4YW1wbGU6IDxkaXY+PHA+dGV4dDwvcD48L2Rpdj4gd2lsbCB3b3JrIHJpZ2h0IGV2ZW4g
aWYgYm90aAorICAgICAgICAvLyB0aGUgPGRpdj4gYW5kIHRoZSA8cD4gaGF2ZSBib3R0b20gbWFy
Z2lucy4KKyAgICAgICAgUmVuZGVyT2JqZWN0ICpyZW5kZXJlciA9IG1fbm9kZS0+cmVuZGVyZXIo
KTsKKyAgICAgICAgaWYgKHJlbmRlcmVyKSB7CisgICAgICAgICAgICBSZW5kZXJTdHlsZSAqc3R5
bGUgPSByZW5kZXJlci0+c3R5bGUoKTsKKyAgICAgICAgICAgIGlmIChzdHlsZSkgeworICAgICAg
ICAgICAgICAgIGludCBib3R0b21NYXJnaW4gPSByZW5kZXJlci0+Y29sbGFwc2VkTWFyZ2luQm90
dG9tKCk7CisgICAgICAgICAgICAgICAgaW50IGZvbnRTaXplID0gc3R5bGUtPmh0bWxGb250KCku
Z2V0Rm9udERlZigpLmNvbXB1dGVkUGl4ZWxTaXplKCk7CisgICAgICAgICAgICAgICAgaWYgKGJv
dHRvbU1hcmdpbiAqIDIgPj0gZm9udFNpemUpIHsKKyAgICAgICAgICAgICAgICAgICAgYWRkTmV3
bGluZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTY2MCwzNCArNjMyLDIyIEBAIGJvb2wg
U2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvcjo6aGEKIAogYm9vbCBTaW1wbGlmaWVkQmFj
a3dhcmRzVGV4dEl0ZXJhdG9yOjpoYW5kbGVOb25UZXh0Tm9kZSgpCiB7Ci0gICAgc3dpdGNoICht
X25vZGUtPmlkKCkpIHsKLSAgICAgICAgY2FzZSBJRF9CUjoKLSAgICAgICAgICAgIGVtaXROZXds
aW5lRm9yQlJPclRleHQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElEX1RE
OgotICAgICAgICBjYXNlIElEX1RIOgotICAgICAgICBjYXNlIElEX0JMT0NLUVVPVEU6Ci0gICAg
ICAgIGNhc2UgSURfREQ6Ci0gICAgICAgIGNhc2UgSURfRElWOgotICAgICAgICBjYXNlIElEX0RM
OgotICAgICAgICBjYXNlIElEX0RUOgotICAgICAgICBjYXNlIElEX0gxOgotICAgICAgICBjYXNl
IElEX0gyOgotICAgICAgICBjYXNlIElEX0gzOgotICAgICAgICBjYXNlIElEX0g0OgotICAgICAg
ICBjYXNlIElEX0g1OgotICAgICAgICBjYXNlIElEX0g2OgotICAgICAgICBjYXNlIElEX0hSOgot
ICAgICAgICBjYXNlIElEX1A6Ci0gICAgICAgIGNhc2UgSURfUFJFOgotICAgICAgICBjYXNlIElE
X1RSOgotICAgICAgICBjYXNlIElEX09MOgotICAgICAgICBjYXNlIElEX1VMOgotICAgICAgICBj
YXNlIElEX0xJOgotICAgICAgICAgICAgLy8gRW1pdCBhIHNwYWNlIHRvICJicmVhayB1cCIgY29u
dGVudC4gQW55IHdvcmQgYnJlYWsKLSAgICAgICAgICAgIC8vIGNoYXJhY3RlciB3aWxsIGRvLgot
ICAgICAgICAgICAgZW1pdENoYXJhY3RlcignICcsIG1fbm9kZSwgMCwgMCk7Ci0gICAgICAgICAg
ICBicmVhazsKKyAgICBpZiAobV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YnIoKSkpCisg
ICAgICAgIGVtaXROZXdsaW5lRm9yQlJPclRleHQoKTsKKyAgICBlbHNlIGlmIChtX25vZGUtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjp0ZCAoKSkgfHwgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6dGgoKSkgfHwKKyAgICAgICAgICAgICBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpi
bG9ja3F1b3RlKCkpIHx8IG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmRkKCkpIHx8Cisg
ICAgICAgICAgICAgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZGl2KCkpIHx8CisgICAg
ICAgICAgICAgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZGwoKSkgfHwgbV9ub2RlLT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6ZHQoKSkgfHwgCisgICAgICAgICAgICAgbV9ub2RlLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6aDEoKSkgfHwgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
aDIoKSkgfHwKKyAgICAgICAgICAgICBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoMygp
KSB8fCBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoNCgpKSB8fAorICAgICAgICAgICAg
IG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omg1KCkpIHx8IG1fbm9kZS0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6Omg2KCkpIHx8CisgICAgICAgICAgICAgbV9ub2RlLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6aHIoKSkgfHwgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6bGkoKSkgfHwK
KyAgICAgICAgICAgICBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvbCgpKSB8fCBtX25v
ZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpwKCkpIHx8CisgICAgICAgICAgICAgbV9ub2RlLT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6cHJlKCkpIHx8IG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OnRyKCkpIHx8CisgICAgICAgICAgICAgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
dWwoKSkpIHsKKyAgICAgICAgLy8gRW1pdCBhIHNwYWNlIHRvICJicmVhayB1cCIgY29udGVudC4g
QW55IHdvcmQgYnJlYWsKKyAgICAgICAgLy8gY2hhcmFjdGVyIHdpbGwgZG8uCisgICAgICAgIGVt
aXRDaGFyYWN0ZXIoJyAnLCBtX25vZGUsIDAsIDApOwogICAgIH0KIAogICAgIHJldHVybiB0cnVl
OwpJbmRleDoga2h0bWwvZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjM0CmRpZmYgLXUgLXAgLXIxLjM0IGtodG1sL2VkaXRpbmcv
dmlzaWJsZV91bml0cy5jcHAKLS0tIGtodG1sL2VkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAJMjYg
TWF5IDIwMDUgMjA6MzA6MTIgLTAwMDAJMS4zNAorKysga2h0bWwvZWRpdGluZy92aXNpYmxlX3Vu
aXRzLmNwcAkyMyBKdW4gMjAwNSAwMToxMDo0NyAtMDAwMApAQCAtMjcsNyArMjcsNyBAQAogCiAj
aW5jbHVkZSA8cXN0cmluZy5oPgogCi0jaW5jbHVkZSAiaHRtbHRhZ3MuaCIKKyNpbmNsdWRlICJo
dG1sbmFtZXMuaCIKICNpbmNsdWRlICJtaXNjL2hlbHBlci5oIgogI2luY2x1ZGUgInJlbmRlcmlu
Zy9yZW5kZXJfdGV4dC5oIgogI2luY2x1ZGUgInJlbmRlcmluZy9yZW5kZXJfYmxvY2suaCIKQEAg
LTQxLDYgKzQxLDcgQEAgdXNpbmcgRE9NOjpFbGVtZW50SW1wbDsKIHVzaW5nIERPTTo6Tm9kZUlt
cGw7CiB1c2luZyBET006OlBvc2l0aW9uOwogdXNpbmcgRE9NOjpSYW5nZUltcGw7Cit1c2luZyBE
T006OkhUTUxOYW1lczsKIAogbmFtZXNwYWNlIGtodG1sIHsKIApAQCAtMzMyLDcgKzMzMyw3IEBA
IFZpc2libGVQb3NpdGlvbiBlbmRPZkxpbmUoY29uc3QgVmlzaWJsZVAKICAgICAgICAgcmV0dXJu
IFZpc2libGVQb3NpdGlvbigpOwogCiAgICAgbG9uZyBlbmRPZmZzZXQgPSAxOwotICAgIGlmIChl
bmROb2RlLT5pZCgpID09IElEX0JSKSB7CisgICAgaWYgKGVuZE5vZGUtPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjpicigpKSkgewogICAgICAgICBlbmRPZmZzZXQgPSAwOwogICAgIH0gZWxzZSBpZiAo
ZW5kQm94LT5pc0lubGluZVRleHRCb3goKSkgewogICAgICAgICBJbmxpbmVUZXh0Qm94ICplbmRU
ZXh0Qm94ID0gc3RhdGljX2Nhc3Q8SW5saW5lVGV4dEJveCAqPihlbmRCb3gpOwpJbmRleDoga2h0
bWwvaHRtbC9kdGQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2to
dG1sL2h0bWwvZHRkLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zOApkaWZmIC11IC1wIC1y
MS4zOCBraHRtbC9odG1sL2R0ZC5jcHAKLS0tIGtodG1sL2h0bWwvZHRkLmNwcAkxMiBBcHIgMjAw
NSAyMjo0OTo0MSAtMDAwMAkxLjM4CisrKyBraHRtbC9odG1sL2R0ZC5jcHAJMjMgSnVuIDIwMDUg
MDE6MTA6NDggLTAwMDAKQEAgLTQ0LDYgKzQ0LDcgQEAgdXNpbmcgbmFtZXNwYWNlIERPTTsKIC8v
IDggdGFibGUKIC8vIDkgYm9keSBmcmFtZXNldAogLy8gMTAgaHRtbAorLyoKIGNvbnN0IHVuc2ln
bmVkIHNob3J0IERPTTo6dGFnUHJpb3JpdHlBcnJheVtdID0gewogICAgIDAsIC8vIDAKICAgICAx
LCAvLyBJRF9BID09IDEKQEAgLTU3LDggKzU4LDYgQEAgY29uc3QgdW5zaWduZWQgc2hvcnQgRE9N
Ojp0YWdQcmlvcml0eUFycgogICAgIDAsIC8vIElEX0JBU0VGT05UCiAgICAgMSwgLy8gSURfQkRP
CiAgICAgMSwgLy8gSURfQklHCi0gICAgNSwgLy8gSURfQkxPQ0tRVU9URQotICAgMTAsIC8vIElE
X0JPRFkKICAgICAwLCAvLyBJRF9CUgogICAgIDEsIC8vIElEX0JVVFRPTgogICAgIDAsIC8vIElE
X0NBTlZBUwpAQCAtNzIsNyArNzEsNiBAQCBjb25zdCB1bnNpZ25lZCBzaG9ydCBET006OnRhZ1By
aW9yaXR5QXJyCiAgICAgMSwgLy8gSURfREVMCiAgICAgMSwgLy8gSURfREZOCiAgICAgNSwgLy8g
SURfRElSCi0gICAgNSwgLy8gSURfRElWCiAgICAgNSwgLy8gSURfREwKICAgICAzLCAvLyBJRF9E
VAogICAgIDEsIC8vIElEX0VNCkBAIC04MCwxOSArNzgsNyBAQCBjb25zdCB1bnNpZ25lZCBzaG9y
dCBET006OnRhZ1ByaW9yaXR5QXJyCiAgICAgMywgLy8gSURfRklFTERTRVQKICAgICAxLCAvLyBJ
RF9GT05UCiAgICAgMywgLy8gSURfRk9STQotICAgIDAsIC8vIElEX0ZSQU1FCi0gICAxMCwvLyBJ
RF9GUkFNRVNFVAotICAgIDUsIC8vIElEX0gxCi0gICAgNSwgLy8gSURfSDIKLSAgICA1LCAvLyBJ
RF9IMwotICAgIDUsIC8vIElEX0g0Ci0gICAgNSwgLy8gSURfSDUKLSAgICA1LCAvLyBJRF9INgot
ICAgMTAsLy8gSURfSEVBRAotICAgIDAsIC8vIElEX0hSCi0gICAxMSwvLyBJRF9IVE1MCiAgICAg
MSwgLy8gSURfSQotICAgIDEsIC8vIElEX0lGUkFNRQogICAgIDAsIC8vIElEX0lNRwogICAgIDAs
IC8vIElEX0lOUFVUCiAgICAgMSwgLy8gSURfSU5TCkBAIC0xMTcsNyArMTAzLDYgQEAgY29uc3Qg
dW5zaWduZWQgc2hvcnQgRE9NOjp0YWdQcmlvcml0eUFycgogICAgIDUsIC8vIElEX09MCiAgICAg
MSwgLy8gSURfT1BUR1JPVVAKICAgICAyLCAvLyBJRF9PUFRJT04KLSAgICAzLCAvLyBJRF9QCiAg
ICAgMCwgLy8gSURfUEFSQU0KICAgICA1LCAvLyBJRF9QTEFJTlRFWFQKICAgICA1LCAvLyBJRF9Q
UkUKQEAgLTEyNyw3ICsxMTIsNiBAQCBjb25zdCB1bnNpZ25lZCBzaG9ydCBET006OnRhZ1ByaW9y
aXR5QXJyCiAgICAgMSwgLy8gSURfU0NSSVBUCiAgICAgNiwgLy8gSURfU0VMRUNUCiAgICAgMSwg
Ly8gSURfU01BTEwKLSAgICAxLCAvLyBJRF9TUEFOCiAgICAgMSwgLy8gSURfU1RSSUtFCiAgICAg
MSwgLy8gSURfU1RST05HCiAgICAgMSwgLy8gSURfU1RZTEUKQEAgLTE2NCw4ICsxNDgsNiBAQCBj
b25zdCB0YWdTdGF0dXMgRE9NOjplbmRUYWdBcnJheVtdID0gewogICAgIEZPUkJJRERFTiwgLy8g
SURfQkFTRUZPTlQKICAgICBSRVFVSVJFRCwgIC8vIElEX0JETwogICAgIFJFUVVJUkVELCAgLy8g
SURfQklHCi0gICAgUkVRVUlSRUQsICAvLyBJRF9CTE9DS1FVT1RFCi0gICAgUkVRVUlSRUQsICAv
LyBJRF9CT0RZCiAgICAgRk9SQklEREVOLCAvLyBJRF9CUgogICAgIFJFUVVJUkVELCAgLy8gSURf
QlVUVE9OCiAgICAgRk9SQklEREVOLCAvLyBJRF9DQU5WQVMKQEAgLTE3OSw3ICsxNjEsNiBAQCBj
b25zdCB0YWdTdGF0dXMgRE9NOjplbmRUYWdBcnJheVtdID0gewogICAgIFJFUVVJUkVELCAgLy8g
SURfREVMCiAgICAgUkVRVUlSRUQsICAvLyBJRF9ERk4KICAgICBSRVFVSVJFRCwgIC8vIElEX0RJ
UgotICAgIFJFUVVJUkVELCAgLy8gSURfRElWCiAgICAgUkVRVUlSRUQsICAvLyBJRF9ETAogICAg
IE9QVElPTkFMLCAgLy8gSURfRFQKICAgICBSRVFVSVJFRCwgIC8vIElEX0VNCkBAIC0xODcsMTkg
KzE2OCw4IEBAIGNvbnN0IHRhZ1N0YXR1cyBET006OmVuZFRhZ0FycmF5W10gPSB7CiAgICAgUkVR
VUlSRUQsICAvLyBJRF9GSUVMRFNFVAogICAgIFJFUVVJUkVELCAgLy8gSURfRk9OVAogICAgIFJF
UVVJUkVELCAgLy8gSURfRk9STQotICAgIEZPUkJJRERFTiwgLy8gSURfRlJBTUUKICAgICBSRVFV
SVJFRCwgIC8vIElEX0ZSQU1FU0VUCi0gICAgUkVRVUlSRUQsICAvLyBJRF9IMQotICAgIFJFUVVJ
UkVELCAgLy8gSURfSDIKLSAgICBSRVFVSVJFRCwgIC8vIElEX0gzCi0gICAgUkVRVUlSRUQsICAv
LyBJRF9INAotICAgIFJFUVVJUkVELCAgLy8gSURfSDUKLSAgICBSRVFVSVJFRCwgIC8vIElEX0g2
Ci0gICAgT1BUSU9OQUwsICAvLyBJRF9IRUFECi0gICAgRk9SQklEREVOLCAvLyBJRF9IUgotICAg
IFJFUVVJUkVELCAgLy8gSURfSFRNTAotICAgIFJFUVVJUkVELCAgLy8gSURfSQotICAgIFJFUVVJ
UkVELCAgLy8gSURfSUZSQU1FCisgICAgICBSRVFVSVJFRCwgIC8vIElEX0kKICAgICBGT1JCSURE
RU4sIC8vIElEX0lNRwogICAgIEZPUkJJRERFTiwgLy8gSURfSU5QVVQKICAgICBSRVFVSVJFRCwg
IC8vIElEX0lOUwpAQCAtMjI0LDcgKzE5NCw2IEBAIGNvbnN0IHRhZ1N0YXR1cyBET006OmVuZFRh
Z0FycmF5W10gPSB7CiAgICAgUkVRVUlSRUQsICAvLyBJRF9PTAogICAgIFJFUVVJUkVELCAgLy8g
SURfT1BUR1JPVVAKICAgICBPUFRJT05BTCwgIC8vIElEX09QVElPTgotICAgIE9QVElPTkFMLCAg
Ly8gSURfUAogICAgIEZPUkJJRERFTiwgLy8gSURfUEFSQU0KICAgICBSRVFVSVJFRCwgIC8vIElE
X1BMQUlOVEVYVAogICAgIFJFUVVJUkVELCAgLy8gSURfUFJFCkBAIC0yMzQsNyArMjAzLDYgQEAg
Y29uc3QgdGFnU3RhdHVzIERPTTo6ZW5kVGFnQXJyYXlbXSA9IHsKICAgICBSRVFVSVJFRCwgIC8v
IElEX1NDUklQVAogICAgIFJFUVVJUkVELCAgLy8gSURfU0VMRUNUCiAgICAgUkVRVUlSRUQsICAv
LyBJRF9TTUFMTAotICAgIFJFUVVJUkVELCAgLy8gSURfU1BBTgogICAgIFJFUVVJUkVELCAgLy8g
SURfU1RSSUtFCiAgICAgUkVRVUlSRUQsICAvLyBJRF9TVFJPTkcKICAgICBSRVFVSVJFRCwgIC8v
IElEX1NUWUxFCkBAIC0yNTgsNiArMjI2LDcgQEAgY29uc3QgdGFnU3RhdHVzIERPTTo6ZW5kVGFn
QXJyYXlbXSA9IHsKICAgICBSRVFVSVJFRCAgIC8vIElEX1RFWFQKIH07CiAKKyovCiAKIHN0YXRp
YyBjb25zdCB1c2hvcnQgdGFnX2xpc3RfMFtdID0gewogICAgIElEX1RFWFQsCkBAIC03NjcsMjIz
ICs3MzYsMyBAQCBib29sIERPTTo6Y2hlY2tDaGlsZCh1c2hvcnQgdGFnSUQsIHVzaG9yCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9CiB9Ci0KLXZvaWQgRE9NOjphZGRGb3JiaWRkZW4oaW50
IHRhZ0lkLCB1c2hvcnQgKmZvcmJpZGRlblRhZ3MpCi17Ci0gICAgc3dpdGNoKHRhZ0lkKQotICAg
IHsKLSAgICBjYXNlIElEX0xBQkVMOgotICAgICAgICBmb3JiaWRkZW5UYWdzW0lEX0xBQkVMXSsr
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIElEX0JVVFRPTjoKLSAgICAgICAgZm9yYmlkZGVu
VGFnc1tJRF9BXSsrOwotICAgICAgICBmb3JiaWRkZW5UYWdzW0lEX0lOUFVUXSsrOwotICAgICAg
ICBmb3JiaWRkZW5UYWdzW0lEX1NFTEVDVF0rKzsKLSAgICAgICAgZm9yYmlkZGVuVGFnc1tJRF9U
RVhUQVJFQV0rKzsKLSAgICAgICAgZm9yYmlkZGVuVGFnc1tJRF9MQUJFTF0rKzsKLSAgICAgICAg
Zm9yYmlkZGVuVGFnc1tJRF9CVVRUT05dKys7Ci0gICAgICAgIGZvcmJpZGRlblRhZ3NbSURfRk9S
TV0rKzsKLSAgICAgICAgZm9yYmlkZGVuVGFnc1tJRF9JU0lOREVYXSsrOwotICAgICAgICBmb3Ji
aWRkZW5UYWdzW0lEX0ZJRUxEU0VUXSsrOwotICAgICAgICBmb3JiaWRkZW5UYWdzW0lEX0lGUkFN
RV0rKzsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotfQotCi12b2lkIERPTTo6cmVtb3ZlRm9yYmlkZGVuKGludCB0YWdJZCwgdXNob3J0ICpmb3Ji
aWRkZW5UYWdzKQotewotICAgIHN3aXRjaCh0YWdJZCkKLSAgICB7Ci0gICAgY2FzZSBJRF9MQUJF
TDoKLSAgICAgICAgZm9yYmlkZGVuVGFnc1tJRF9MQUJFTF0tLTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBJRF9CVVRUT046Ci0gICAgICAgIGZvcmJpZGRlblRhZ3NbSURfQV0tLTsKLSAgICAg
ICAgZm9yYmlkZGVuVGFnc1tJRF9JTlBVVF0tLTsKLSAgICAgICAgZm9yYmlkZGVuVGFnc1tJRF9T
RUxFQ1RdLS07Ci0gICAgICAgIGZvcmJpZGRlblRhZ3NbSURfVEVYVEFSRUFdLS07Ci0gICAgICAg
IGZvcmJpZGRlblRhZ3NbSURfTEFCRUxdLS07Ci0gICAgICAgIGZvcmJpZGRlblRhZ3NbSURfQlVU
VE9OXS0tOwotICAgICAgICBmb3JiaWRkZW5UYWdzW0lEX0ZPUk1dLS07Ci0gICAgICAgIGZvcmJp
ZGRlblRhZ3NbSURfSVNJTkRFWF0tLTsKLSAgICAgICAgZm9yYmlkZGVuVGFnc1tJRF9GSUVMRFNF
VF0tLTsKLSAgICAgICAgZm9yYmlkZGVuVGFnc1tJRF9JRlJBTUVdLS07Ci0gICAgICAgIGJyZWFr
OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotCi0jaWYgMAotCi0K
LXN0cnVjdCBhdHRyX3ByaXYgewotICAgIGF0dHJfcHJpdigpIHsgaWQgPSBsZW4gPSAwLCB2YWwg
PSAwOyB9Ci0gICAgYXR0cl9wcml2KHVzaG9ydCBpLCBjb25zdCBRQ2hhciAqdiwgdXNob3J0IGwp
Ci0gICAgeyBpZCA9aTsgbGVuID0gbCwgdmFsID0gdjsgfQotICAgIHVzaG9ydCBpZDsKLSAgICBj
b25zdCBRQ2hhciAqdmFsOwotICAgIHVzaG9ydCBsZW47Ci19OwotCi1ET01TdHJpbmcgZmluZF9h
dHRyKHVzaG9ydCBpZCwgY29uc3QgYXR0cl9wcml2ICphdHRycykKLXsKLSAgICBpbnQgaSA9IDA7
Ci0gICAgd2hpbGUoYXR0cnNbaV0uaWQgIT0gMCkKLSAgICB7Ci0gICAgICAgIGlmKGF0dHJzW2ld
LmlkID09IGlkKQotICAgICAgICAgICAgcmV0dXJuIERPTVN0cmluZyhhdHRyc1tpXS52YWwsIGF0
dHJzW2ldLmxlbik7Ci0gICAgICAgIGkrKzsKLSAgICB9Ci0gICAgcmV0dXJuIERPTVN0cmluZygp
OwotfQotCi1zdGF0aWMgY29uc3QgUUNoYXIgdmFsdWVfMV8wIFtdID0geyAnTicsJ08nLCdOJywn
RScgfTsKLQotYXR0cl9wcml2IGF0dHJfbGlzdF8xW10gPSB7Ci0gICAgYXR0cl9wcml2KEFUVFJf
Q0xFQVIsIHZhbHVlXzFfMCwgNCkKLX07Ci0KLXN0YXRpYyBjb25zdCBRQ2hhciB2YWx1ZV8yXzAg
W10gPSB7ICdSJywnRScsJ0MnLCdUJyB9OwotCi1hdHRyX3ByaXYgYXR0cl9saXN0XzJbXSA9IHsK
LSAgICBhdHRyX3ByaXYoQVRUUl9TSEFQRSwgdmFsdWVfMl8wLCA0KQotfTsKLQotc3RhdGljIGNv
bnN0IFFDaGFyIHZhbHVlXzNfMCBbXSA9IHsgJ1InLCdFJywnQycsJ1QnIH07Ci0KLWF0dHJfcHJp
diBhdHRyX2xpc3RfM1tdID0gewotICAgIGF0dHJfcHJpdihBVFRSX1NIQVBFLCB2YWx1ZV8zXzAs
IDQpCi19OwotCi1zdGF0aWMgY29uc3QgUUNoYXIgdmFsdWVfNF8wIFtdID0geyAnRCcsJ0EnLCdU
JywnQScgfTsKLQotYXR0cl9wcml2IGF0dHJfbGlzdF80W10gPSB7Ci0gICAgYXR0cl9wcml2KEFU
VFJfVkFMVUVUWVBFLCB2YWx1ZV80XzAsIDQpCi19OwotCi1zdGF0aWMgY29uc3QgUUNoYXIgdmFs
dWVfNV8wIFtdID0geyAnRycsJ0UnLCdUJyB9Owotc3RhdGljIGNvbnN0IFFDaGFyIHZhbHVlXzVf
MSBbXSA9IHsgJ0EnLCdQJywnUCcsJ0wnLCdJJywnQycsJ0EnLCdUJywnSScsJ08nLCdOJywnLycs
J1gnLCctJywnVycsJ1cnLCdXJywnLScsJ0YnLCdPJywnUicsJ00nLCctJywnVScsJ1InLCdMJywn
RScsJ04nLCdDJywnTycsJ0QnLCdFJywnRCcgfTsKLQotYXR0cl9wcml2IGF0dHJfbGlzdF81W10g
PSB7Ci0gICAgYXR0cl9wcml2KEFUVFJfTUVUSE9ELCB2YWx1ZV81XzAsIDMpLAotICAgIGF0dHJf
cHJpdihBVFRSX0VOQ1RZUEUsIHZhbHVlXzVfMSwgMzMpCi19OwotCi1zdGF0aWMgY29uc3QgUUNo
YXIgdmFsdWVfNl8wIFtdID0geyAnVCcsJ0UnLCdYJywnVCcgfTsKLQotYXR0cl9wcml2IGF0dHJf
bGlzdF82W10gPSB7Ci0gICAgYXR0cl9wcml2KEFUVFJfVFlQRSwgdmFsdWVfNl8wLCA0KQotfTsK
LQotc3RhdGljIGNvbnN0IFFDaGFyIHZhbHVlXzdfMCBbXSA9IHsgJ1MnLCdVJywnQicsJ00nLCdJ
JywnVCcgfTsKLQotYXR0cl9wcml2IGF0dHJfbGlzdF83W10gPSB7Ci0gICAgYXR0cl9wcml2KEFU
VFJfVFlQRSwgdmFsdWVfN18wLCA2KQotfTsKLQotc3RhdGljIGNvbnN0IFFDaGFyIHZhbHVlXzhf
MCBbXSA9IHsgJzEnIH07Ci0KLWF0dHJfcHJpdiBhdHRyX2xpc3RfOFtdID0gewotICAgIGF0dHJf
cHJpdihBVFRSX1NQQU4sIHZhbHVlXzhfMCwgMSkKLX07Ci0KLXN0YXRpYyBjb25zdCBRQ2hhciB2
YWx1ZV85XzAgW10gPSB7ICcxJyB9OwotCi1hdHRyX3ByaXYgYXR0cl9saXN0XzlbXSA9IHsKLSAg
ICBhdHRyX3ByaXYoQVRUUl9TUEFOLCB2YWx1ZV85XzAsIDEpCi19OwotCi1zdGF0aWMgY29uc3Qg
UUNoYXIgdmFsdWVfMTBfMCBbXSA9IHsgJzEnIH07Ci1zdGF0aWMgY29uc3QgUUNoYXIgdmFsdWVf
MTBfMSBbXSA9IHsgJzEnIH07Ci0KLWF0dHJfcHJpdiBhdHRyX2xpc3RfMTBbXSA9IHsKLSAgICBh
dHRyX3ByaXYoQVRUUl9ST1dTUEFOLCB2YWx1ZV8xMF8wLCAxKSwKLSAgICBhdHRyX3ByaXYoQVRU
Ul9DT0xTUEFOLCB2YWx1ZV8xMF8xLCAxKQotfTsKLQotc3RhdGljIGNvbnN0IFFDaGFyIHZhbHVl
XzExXzAgW10gPSB7ICcxJyB9Owotc3RhdGljIGNvbnN0IFFDaGFyIHZhbHVlXzExXzEgW10gPSB7
ICdBJywnVScsJ1QnLCdPJyB9OwotCi1hdHRyX3ByaXYgYXR0cl9saXN0XzExW10gPSB7Ci0gICAg
YXR0cl9wcml2KEFUVFJfRlJBTUVCT1JERVIsIHZhbHVlXzExXzAsIDEpLAotICAgIGF0dHJfcHJp
dihBVFRSX1NDUk9MTElORywgdmFsdWVfMTFfMSwgNCkKLX07Ci0KLXN0YXRpYyBjb25zdCBRQ2hh
ciB2YWx1ZV8xMl8wIFtdID0geyAnMScgfTsKLXN0YXRpYyBjb25zdCBRQ2hhciB2YWx1ZV8xMl8x
IFtdID0geyAnQScsJ1UnLCdUJywnTycgfTsKLQotYXR0cl9wcml2IGF0dHJfbGlzdF8xMltdID0g
ewotICAgIGF0dHJfcHJpdihBVFRSX0ZSQU1FQk9SREVSLCB2YWx1ZV8xMl8wLCAxKSwKLSAgICBh
dHRyX3ByaXYoQVRUUl9TQ1JPTExJTkcsIHZhbHVlXzEyXzEsIDQpCi19OwotCi1zdGF0aWMgY29u
c3QgUUNoYXIgdmFsdWVfMTNfMCBbXSA9IHsgJy0nLCcvJywnLycsJ1cnLCczJywnQycsJy8nLCcv
JywnRCcsJ1QnLCdEJyB9Owotc3RhdGljIGNvbnN0IFFDaGFyIHZhbHVlXzEzXzEgW10gPSB7ICdU
JywnUicsJ0EnLCdOJywnUycsJ0knLCdUJywnSScsJ08nLCdOJywnQScsJ0wnLCcvJywnLycsJ0Un
LCdOJyB9OwotCi1hdHRyX3ByaXYgYXR0cl9saXN0XzEzW10gPSB7Ci0gICAgYXR0cl9wcml2KEFU
VFJfVkVSU0lPTiwgdmFsdWVfMTNfMCwgMTEpLAotICAgIGF0dHJfcHJpdihBVFRSX0hUTUwsIHZh
bHVlXzEzXzEsIDE2KQotfTsKLQotRE9NU3RyaW5nIERPTTo6ZmluZERlZkF0dHJOb25lKHVzaG9y
dCkKLXsKLSAgICByZXR1cm4gRE9NU3RyaW5nKCk7Ci19OwotRE9NU3RyaW5nIERPTTo6ZmluZERl
ZkF0dHJCUih1c2hvcnQgaWQpCi17Ci0gICAgcmV0dXJuIGZpbmRfYXR0cihpZCwgYXR0cl9saXN0
XzEpOwotfQotRE9NU3RyaW5nIERPTTo6ZmluZERlZkF0dHJBKHVzaG9ydCBpZCkKLXsKLSAgICBy
ZXR1cm4gZmluZF9hdHRyKGlkLCBhdHRyX2xpc3RfMik7Ci19Ci1ET01TdHJpbmcgRE9NOjpmaW5k
RGVmQXR0ckFSRUEodXNob3J0IGlkKQotewotICAgIHJldHVybiBmaW5kX2F0dHIoaWQsIGF0dHJf
bGlzdF8zKTsKLX0KLURPTVN0cmluZyBET006OmZpbmREZWZBdHRyUEFSQU0odXNob3J0IGlkKQot
ewotICAgIHJldHVybiBmaW5kX2F0dHIoaWQsIGF0dHJfbGlzdF80KTsKLX0KLURPTVN0cmluZyBE
T006OmZpbmREZWZBdHRyRk9STSh1c2hvcnQgaWQpCi17Ci0gICAgcmV0dXJuIGZpbmRfYXR0cihp
ZCwgYXR0cl9saXN0XzUpOwotfQotRE9NU3RyaW5nIERPTTo6ZmluZERlZkF0dHJJTlBVVCh1c2hv
cnQgaWQpCi17Ci0gICAgcmV0dXJuIGZpbmRfYXR0cihpZCwgYXR0cl9saXN0XzYpOwotfQotRE9N
U3RyaW5nIERPTTo6ZmluZERlZkF0dHJCVVRUT04odXNob3J0IGlkKQotewotICAgIHJldHVybiBm
aW5kX2F0dHIoaWQsIGF0dHJfbGlzdF83KTsKLX0KLURPTVN0cmluZyBET006OmZpbmREZWZBdHRy
Q09MR1JPVVAodXNob3J0IGlkKQotewotICAgIHJldHVybiBmaW5kX2F0dHIoaWQsIGF0dHJfbGlz
dF84KTsKLX0KLURPTVN0cmluZyBET006OmZpbmREZWZBdHRyQ09MKHVzaG9ydCBpZCkKLXsKLSAg
ICByZXR1cm4gZmluZF9hdHRyKGlkLCBhdHRyX2xpc3RfOSk7Ci19Ci1ET01TdHJpbmcgRE9NOjpm
aW5kRGVmQXR0clRIKHVzaG9ydCBpZCkKLXsKLSAgICByZXR1cm4gZmluZF9hdHRyKGlkLCBhdHRy
X2xpc3RfMTApOwotfQotRE9NU3RyaW5nIERPTTo6ZmluZERlZkF0dHJGUkFNRSh1c2hvcnQgaWQp
Ci17Ci0gICAgcmV0dXJuIGZpbmRfYXR0cihpZCwgYXR0cl9saXN0XzExKTsKLX0KLURPTVN0cmlu
ZyBET006OmZpbmREZWZBdHRySUZSQU1FKHVzaG9ydCBpZCkKLXsKLSAgICByZXR1cm4gZmluZF9h
dHRyKGlkLCBhdHRyX2xpc3RfMTIpOwotfQotRE9NU3RyaW5nIERPTTo6ZmluZERlZkF0dHJIVE1M
KHVzaG9ydCBpZCkKLXsKLSAgICByZXR1cm4gZmluZF9hdHRyKGlkLCBhdHRyX2xpc3RfMTMpOwot
fQotCi0jZW5kaWYKSW5kZXg6IGtodG1sL2h0bWwvZHRkLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
L2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9kdGQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS41CmRpZmYgLXUgLXAgLXIxLjUga2h0bWwvaHRtbC9kdGQuaAotLS0ga2h0bWwvaHRtbC9kdGQu
aAkxMiBBcHIgMjAwNSAyMjo0OTo0MSAtMDAwMAkxLjUKKysrIGtodG1sL2h0bWwvZHRkLmgJMjMg
SnVuIDIwMDUgMDE6MTA6NDggLTAwMDAKQEAgLTIzLDM2ICsyMywxMSBAQAogI2RlZmluZSBfRE9N
X2R0ZF9oXwogCiAjaW5jbHVkZSAiZG9tL2RvbV9zdHJpbmcuaCIKLSNpbmNsdWRlICJtaXNjL2h0
bWx0YWdzLmgiCiAKIG5hbWVzcGFjZSBET00KIHsKIAotdm9pZCBhZGRGb3JiaWRkZW4oaW50IHRh
Z0lkLCB1c2hvcnQgKmZvcmJpZGRlblRhZ3MpOwotdm9pZCByZW1vdmVGb3JiaWRkZW4oaW50IHRh
Z0lkLCB1c2hvcnQgKmZvcmJpZGRlblRhZ3MpOwotCi1lbnVtIHRhZ1N0YXR1cyB7IE9QVElPTkFM
LCBSRVFVSVJFRCwgRk9SQklEREVOIH07Ci0KIGJvb2wgY2hlY2tDaGlsZCh1c2hvcnQgdGFnSUQs
IHVzaG9ydCBjaGlsZElELCBib29sIHN0cmljdCk7CiAKLWV4dGVybiBjb25zdCB1bnNpZ25lZCBz
aG9ydCB0YWdQcmlvcml0eUFycmF5W107Ci1leHRlcm4gY29uc3QgdGFnU3RhdHVzIGVuZFRhZ0Fy
cmF5W107Ci0KLWlubGluZSB1bnNpZ25lZCBzaG9ydCB0YWdQcmlvcml0eShRX1VJTlQzMiB0YWdJ
ZCkKLXsKLSAgICAvLyBUcmVhdCBjdXN0b20gZWxlbWVudHMgdGhlIHNhbWUgYXMgPHNwYW4+OyBh
bHNvIGRvbid0IHJlYWQgcGFzdCB0aGUgZW5kIG9mIHRoZSBhcnJheS4KLSAgICBpZiAodGFnSWQg
PiBJRF9MQVNUX1RBRykKLSAgICAgICAgcmV0dXJuIHRhZ1ByaW9yaXR5QXJyYXlbSURfU1BBTl07
Ci0gICAgcmV0dXJuIHRhZ1ByaW9yaXR5QXJyYXlbdGFnSWRdOwotfQotCi1pbmxpbmUgdGFnU3Rh
dHVzIGVuZFRhZ1JlcXVpcmVtZW50KFFfVUlOVDMyIHRhZ0lkKQotewotICAgIC8vIFRyZWF0IGN1
c3RvbSBlbGVtZW50cyB0aGUgc2FtZSBhcyA8c3Bhbj47IGFsc28gZG9uJ3QgcmVhZCBwYXN0IHRo
ZSBlbmQgb2YgdGhlIGFycmF5LgotICAgIGlmICh0YWdJZCA+IElEX0xBU1RfVEFHKQotICAgICAg
ICByZXR1cm4gZW5kVGFnQXJyYXlbSURfU1BBTl07Ci0gICAgcmV0dXJuIGVuZFRhZ0FycmF5W3Rh
Z0lkXTsKLX0KLQogfSAvL25hbWVzcGFjZSBET00KICNlbmRpZgpJbmRleDoga2h0bWwvaHRtbC9o
dG1sX2Jhc2VpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9r
aHRtbC9odG1sL2h0bWxfYmFzZWltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjcyCmRp
ZmYgLXUgLXAgLXIxLjcyIGtodG1sL2h0bWwvaHRtbF9iYXNlaW1wbC5jcHAKLS0tIGtodG1sL2h0
bWwvaHRtbF9iYXNlaW1wbC5jcHAJMTIgTWF5IDIwMDUgMTc6MTE6MjEgLTAwMDAJMS43MgorKysg
a2h0bWwvaHRtbC9odG1sX2Jhc2VpbXBsLmNwcAkyMyBKdW4gMjAwNSAwMToxMDo0OCAtMDAwMApA
QCAtNDgsNyArNDgsNyBAQCB1c2luZyBuYW1lc3BhY2UgRE9NOwogdXNpbmcgbmFtZXNwYWNlIGto
dG1sOwogCiBIVE1MQm9keUVsZW1lbnRJbXBsOjpIVE1MQm9keUVsZW1lbnRJbXBsKERvY3VtZW50
UHRyICpkb2MpCi0gICAgOiBIVE1MRWxlbWVudEltcGwoZG9jKSwgbV9saW5rRGVjbCgwKQorICAg
IDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6Ym9keSgpLCBkb2MpLCBtX2xpbmtEZWNsKDAp
CiB7CiB9CiAKQEAgLTYxLDExICs2MSw2IEBAIEhUTUxCb2R5RWxlbWVudEltcGw6On5IVE1MQm9k
eUVsZW1lbnRJbXAKICAgICB9CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MQm9keUVsZW1lbnRJbXBs
OjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0JPRFk7Ci19Ci0KIHZvaWQgSFRNTEJvZHlF
bGVtZW50SW1wbDo6Y3JlYXRlTGlua0RlY2woKQogewogICAgIG1fbGlua0RlY2wgPSBuZXcgQ1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb25JbXBsOwpAQCAtMjg5LDcgKzI4NCwxOCBAQCB2b2lkIEhU
TUxCb2R5RWxlbWVudEltcGw6OnNldFZMaW5rKGNvbnN0CiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAK
IEhUTUxGcmFtZUVsZW1lbnRJbXBsOjpIVE1MRnJhbWVFbGVtZW50SW1wbChEb2N1bWVudFB0ciAq
ZG9jKQotICAgIDogSFRNTEVsZW1lbnRJbXBsKGRvYykKKyAgICA6IEhUTUxFbGVtZW50SW1wbChI
VE1MTmFtZXM6OmZyYW1lKCksIGRvYykKK3sKKyAgICBpbml0KCk7Cit9CisKK0hUTUxGcmFtZUVs
ZW1lbnRJbXBsOjpIVE1MRnJhbWVFbGVtZW50SW1wbChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdO
YW1lLCBEb2N1bWVudFB0ciAqZG9jKQorICAgIDogSFRNTEVsZW1lbnRJbXBsKHRhZ05hbWUsIGRv
YykKK3sKKyAgICBpbml0KCk7Cit9CisKK3ZvaWQgSFRNTEZyYW1lRWxlbWVudEltcGw6OmluaXQo
KQogewogICAgIG1fZnJhbWVCb3JkZXIgPSB0cnVlOwogICAgIG1fZnJhbWVCb3JkZXJTZXQgPSBm
YWxzZTsKQEAgLTMwMywxMSArMzA5LDYgQEAgSFRNTEZyYW1lRWxlbWVudEltcGw6On5IVE1MRnJh
bWVFbGVtZW50SQogewogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTEZyYW1lRWxlbWVudEltcGw6Omlk
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfRlJBTUU7Ci19Ci0KIGJvb2wgSFRNTEZyYW1lRWxl
bWVudEltcGw6OmlzVVJMQWxsb3dlZChjb25zdCBBdG9taWNTdHJpbmcgJlVSTFN0cmluZykgY29u
c3QKIHsKICAgICBpZiAoVVJMU3RyaW5nLmlzRW1wdHkoKSkgewpAQCAtNDgyLDcgKzQ4Myw3IEBA
IHZvaWQgSFRNTEZyYW1lRWxlbWVudEltcGw6OmF0dGFjaCgpCiAKICAgICAvLyBpbmhlcml0IGRl
ZmF1bHQgc2V0dGluZ3MgZnJvbSBwYXJlbnQgZnJhbWVzZXQKICAgICBmb3IgKE5vZGVJbXBsICpu
b2RlID0gcGFyZW50Tm9kZSgpOyBub2RlOyBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpKQotICAg
ICAgICBpZiAobm9kZS0+aWQoKSA9PSBJRF9GUkFNRVNFVCkgeworICAgICAgICBpZiAobm9kZS0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZyYW1lc2V0KCkpKSB7CiAgICAgICAgICAgICBIVE1MRnJh
bWVTZXRFbGVtZW50SW1wbCogZnJhbWVzZXQgPSBzdGF0aWNfY2FzdDxIVE1MRnJhbWVTZXRFbGVt
ZW50SW1wbCo+KG5vZGUpOwogICAgICAgICAgICAgaWYgKCFtX2ZyYW1lQm9yZGVyU2V0KQogICAg
ICAgICAgICAgICAgIG1fZnJhbWVCb3JkZXIgPSBmcmFtZXNldC0+ZnJhbWVCb3JkZXIoKTsKQEAg
LTY2MSw3ICs2NjIsNyBAQCB2b2lkIEhUTUxGcmFtZUVsZW1lbnRJbXBsOjpzZXRTcmMoY29uc3Qg
CiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxGcmFtZVNldEVsZW1lbnRJbXBsOjpIVE1MRnJh
bWVTZXRFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAgIDogSFRNTEVsZW1lbnRJbXBs
KGRvYykKKyAgICA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6OmZyYW1lc2V0KCksIGRvYykK
IHsKICAgICAvLyBkZWZhdWx0IHZhbHVlIGZvciByb3dzIGFuZCBjb2xzLi4uCiAgICAgbV90b3Rh
bFJvd3MgPSAxOwpAQCAtNjg1LDExICs2ODYsNiBAQCBIVE1MRnJhbWVTZXRFbGVtZW50SW1wbDo6
fkhUTUxGcmFtZVNldEVsCiAgICAgICAgIGRlbGV0ZSBbXSBtX2NvbHM7CiB9CiAKLU5vZGVJbXBs
OjpJZCBIVE1MRnJhbWVTZXRFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJ
RF9GUkFNRVNFVDsKLX0KLQogdm9pZCBIVE1MRnJhbWVTZXRFbGVtZW50SW1wbDo6cGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqYXR0cikKIHsKICAgICBzd2l0Y2goYXR0
ci0+aWQoKSkKQEAgLTc1Miw4ICs3NDgsNyBAQCB2b2lkIEhUTUxGcmFtZVNldEVsZW1lbnRJbXBs
OjphdHRhY2goKQogICAgIEhUTUxFbGVtZW50SW1wbCogbm9kZSA9IHN0YXRpY19jYXN0PEhUTUxF
bGVtZW50SW1wbCo+KHBhcmVudE5vZGUoKSk7CiAgICAgd2hpbGUobm9kZSkKICAgICB7Ci0gICAg
ICAgIGlmKG5vZGUtPmlkKCkgPT0gSURfRlJBTUVTRVQpCi0gICAgICAgIHsKKyAgICAgICAgaWYg
KG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpmcmFtZXNldCgpKSkgewogICAgICAgICAgICAg
SFRNTEZyYW1lU2V0RWxlbWVudEltcGwqIGZyYW1lc2V0ID0gc3RhdGljX2Nhc3Q8SFRNTEZyYW1l
U2V0RWxlbWVudEltcGwqPihub2RlKTsKICAgICAgICAgICAgIGlmKCFmcmFtZUJvcmRlclNldCkg
IGZyYW1lYm9yZGVyID0gZnJhbWVzZXQtPmZyYW1lQm9yZGVyKCk7CiAgICAgICAgICAgICBpZigh
bm9yZXNpemUpICBub3Jlc2l6ZSA9IGZyYW1lc2V0LT5ub1Jlc2l6ZSgpOwpAQCAtODE3LDcgKzgx
Miw3IEBAIHZvaWQgSFRNTEZyYW1lU2V0RWxlbWVudEltcGw6OnNldFJvd3MoY28KIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KIAogSFRNTEhlYWRFbGVtZW50SW1wbDo6SFRNTEhlYWRFbGVtZW50SW1wbChE
b2N1bWVudFB0ciAqZG9jKQotICAgIDogSFRNTEVsZW1lbnRJbXBsKGRvYykKKyAgICA6IEhUTUxF
bGVtZW50SW1wbChIVE1MTmFtZXM6OmhlYWQoKSwgZG9jKQogewogfQogCkBAIC04MjUsMTEgKzgy
MCw2IEBAIEhUTUxIZWFkRWxlbWVudEltcGw6On5IVE1MSGVhZEVsZW1lbnRJbXAKIHsKIH0KIAot
Tm9kZUltcGw6OklkIEhUTUxIZWFkRWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gSURfSEVBRDsKLX0KLQogRE9NU3RyaW5nIEhUTUxIZWFkRWxlbWVudEltcGw6OnByb2ZpbGUo
KSBjb25zdAogewogICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoQVRUUl9QUk9GSUxFKTsKQEAgLTg0
Myw3ICs4MzMsNyBAQCB2b2lkIEhUTUxIZWFkRWxlbWVudEltcGw6OnNldFByb2ZpbGUoY29uCiAv
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxIdG1sRWxlbWVudEltcGw6OkhUTUxIdG1sRWxlbWVu
dEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50SW1wbChkb2MpCisgICAg
OiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjpodG1sKCksIGRvYykKIHsKIH0KIApAQCAtODUx
LDExICs4NDEsNiBAQCBIVE1MSHRtbEVsZW1lbnRJbXBsOjp+SFRNTEh0bWxFbGVtZW50SW1wCiB7
CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MSHRtbEVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIElEX0hUTUw7Ci19Ci0KIERPTVN0cmluZyBIVE1MSHRtbEVsZW1lbnRJbXBsOjp2
ZXJzaW9uKCkgY29uc3QKIHsKICAgICByZXR1cm4gZ2V0QXR0cmlidXRlKEFUVFJfVkVSU0lPTik7
CkBAIC04NjgsNyArODUzLDcgQEAgdm9pZCBIVE1MSHRtbEVsZW1lbnRJbXBsOjpzZXRWZXJzaW9u
KGNvbgogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUhUTUxJRnJhbWVFbGVtZW50SW1wbDo6SFRN
TElGcmFtZUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpIDogSFRNTEZyYW1lRWxlbWVudElt
cGwoZG9jKQorSFRNTElGcmFtZUVsZW1lbnRJbXBsOjpIVE1MSUZyYW1lRWxlbWVudEltcGwoRG9j
dW1lbnRQdHIgKmRvYykgOiBIVE1MRnJhbWVFbGVtZW50SW1wbChIVE1MTmFtZXM6OmlmcmFtZSgp
LCBkb2MpCiB7CiAgICAgbV9mcmFtZUJvcmRlciA9IGZhbHNlOwogICAgIG1fbWFyZ2luV2lkdGgg
PSAtMTsKQEAgLTg4MCwxMSArODY1LDYgQEAgSFRNTElGcmFtZUVsZW1lbnRJbXBsOjp+SFRNTElG
cmFtZUVsZW1lbgogewogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTElGcmFtZUVsZW1lbnRJbXBsOjpp
ZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0lGUkFNRTsKLX0KLQogYm9vbCBIVE1MSUZyYW1l
RWxlbWVudEltcGw6Om1hcFRvRW50cnkoTm9kZUltcGw6OklkIGF0dHIsIE1hcHBlZEF0dHJpYnV0
ZUVudHJ5JiByZXN1bHQpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChhdHRyKSB7CkluZGV4OiBraHRt
bC9odG1sL2h0bWxfYmFzZWltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2Vi
Q29yZS9raHRtbC9odG1sL2h0bWxfYmFzZWltcGwuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4y
NwpkaWZmIC11IC1wIC1yMS4yNyBraHRtbC9odG1sL2h0bWxfYmFzZWltcGwuaAotLS0ga2h0bWwv
aHRtbC9odG1sX2Jhc2VpbXBsLmgJMTEgTWF5IDIwMDUgMDU6NDk6MzQgLTAwMDAJMS4yNworKysg
a2h0bWwvaHRtbC9odG1sX2Jhc2VpbXBsLmgJMjMgSnVuIDIwMDUgMDE6MTA6NDkgLTAwMDAKQEAg
LTI2LDcgKzI2LDYgQEAKICNpZm5kZWYgSFRNTF9CQVNFSU1QTF9ICiAjZGVmaW5lIEhUTUxfQkFT
RUlNUExfSAogCi0jaW5jbHVkZSAiaHRtbC9kdGQuaCIKICNpbmNsdWRlICJodG1sL2h0bWxfZWxl
bWVudGltcGwuaCIKICNpbmNsdWRlICJtaXNjL2todG1sbGF5b3V0LmgiCiAKQEAgLTU1LDggKzU0
LDggQEAgcHVibGljOgogICAgIEhUTUxCb2R5RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYyk7
CiAgICAgfkhUTUxCb2R5RWxlbWVudEltcGwoKTsKIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25z
dDsKLQorICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMTA7IH0K
KyAgIAogICAgIHZpcnR1YWwgYm9vbCBtYXBUb0VudHJ5KE5vZGVJbXBsOjpJZCBhdHRyLCBNYXBw
ZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VN
YXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqKTsKIApAQCAtOTIsMTEgKzkxLDE0
IEBAIGNsYXNzIEhUTUxGcmFtZUVsZW1lbnRJbXBsIDogcHVibGljIEhUTUwKIAogcHVibGljOgog
ICAgIEhUTUxGcmFtZUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpOwotCisgICAgSFRNTEZy
YW1lRWxlbWVudEltcGwoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnRQdHIq
IGRvYyk7CiAgICAgfkhUTUxGcmFtZUVsZW1lbnRJbXBsKCk7CiAKLSAgICB2aXJ0dWFsIElkIGlk
KCkgY29uc3Q7CisgICAgdm9pZCBpbml0KCk7CiAKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMg
ZW5kVGFncmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBGT1JCSURERU47IH0KKyAgICB2aXJ0
dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgCiAgICAgdmlydHVh
bCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKik7CiAgICAg
dmlydHVhbCB2b2lkIGF0dGFjaCgpOwogICAgIHZpcnR1YWwgdm9pZCBkZXRhY2goKTsKQEAgLTE3
MSw3ICsxNzMsNyBAQCBwdWJsaWM6CiAKICAgICB+SFRNTEZyYW1lU2V0RWxlbWVudEltcGwoKTsK
IAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0
eSgpIGNvbnN0IHsgcmV0dXJuIDEwOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRB
dHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqKTsKICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNo
KCk7CkBAIC0yMTksNyArMjIxLDggQEAgcHVibGljOgogCiAgICAgfkhUTUxIZWFkRWxlbWVudElt
cGwoKTsKIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEhUTUxUYWdT
dGF0dXMgZW5kVGFncmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBPUFRJT05BTDsgfQorICAg
IHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMTA7IH0KIAogICAgIERP
TVN0cmluZyBwcm9maWxlKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRQcm9maWxlKGNvbnN0IERPTVN0
cmluZyAmKTsKQEAgLTIzMyw3ICsyMzYsNyBAQCBwdWJsaWM6CiAgICAgSFRNTEh0bWxFbGVtZW50
SW1wbChEb2N1bWVudFB0ciAqZG9jKTsKICAgICB+SFRNTEh0bWxFbGVtZW50SW1wbCgpOwogCi0g
ICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkg
Y29uc3QgeyByZXR1cm4gMTE7IH0KIAogICAgIERPTVN0cmluZyB2ZXJzaW9uKCkgY29uc3Q7CiAg
ICAgdm9pZCBzZXRWZXJzaW9uKGNvbnN0IERPTVN0cmluZyAmKTsKQEAgLTI0NiwxMSArMjQ5LDgg
QEAgY2xhc3MgSFRNTElGcmFtZUVsZW1lbnRJbXBsIDogcHVibGljIEhUTQogewogcHVibGljOgog
ICAgIEhUTUxJRnJhbWVFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKTsKLQogICAgIH5IVE1M
SUZyYW1lRWxlbWVudEltcGwoKTsKIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKLQogICAg
IHZpcnR1YWwgYm9vbCBtYXBUb0VudHJ5KE5vZGVJbXBsOjpJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1
dGVFbnRyeSYgcmVzdWx0KSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRy
aWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqYXR0cik7CiAKSW5kZXg6IGtodG1sL2h0bWwvaHRt
bF9ibG9ja2ltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2to
dG1sL2h0bWwvaHRtbF9ibG9ja2ltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE3CmRp
ZmYgLXUgLXAgLXIxLjE3IGtodG1sL2h0bWwvaHRtbF9ibG9ja2ltcGwuY3BwCi0tLSBraHRtbC9o
dG1sL2h0bWxfYmxvY2tpbXBsLmNwcAkxMSBNYXkgMjAwNSAwNTo0OTozNCAtMDAwMAkxLjE3Cisr
KyBraHRtbC9odG1sL2h0bWxfYmxvY2tpbXBsLmNwcAkyMyBKdW4gMjAwNSAwMToxMDo0OSAtMDAw
MApAQCAtMzcsNyArMzcsNyBAQCB1c2luZyBuYW1lc3BhY2Uga2h0bWw7CiB1c2luZyBuYW1lc3Bh
Y2UgRE9NOwogCiBIVE1MQmxvY2txdW90ZUVsZW1lbnRJbXBsOjpIVE1MQmxvY2txdW90ZUVsZW1l
bnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0gICAgOiBIVE1MRWxlbWVudEltcGwoZG9jKQorICAg
IDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6YmxvY2txdW90ZSgpLCBkb2MpCiB7CiB9CiAK
QEAgLTQ1LDExICs0NSw2IEBAIEhUTUxCbG9ja3F1b3RlRWxlbWVudEltcGw6On5IVE1MQmxvY2tx
dW8KIHsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxCbG9ja3F1b3RlRWxlbWVudEltcGw6OmlkKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gSURfQkxPQ0tRVU9URTsKLX0KLQogRE9NU3RyaW5nIEhUTUxC
bG9ja3F1b3RlRWxlbWVudEltcGw6OmNpdGUoKSBjb25zdAogewogICAgIHJldHVybiBnZXRBdHRy
aWJ1dGUoQVRUUl9DSVRFKTsKQEAgLTYzLDcgKzU4LDcgQEAgdm9pZCBIVE1MQmxvY2txdW90ZUVs
ZW1lbnRJbXBsOjpzZXRDaXRlKAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MRGl2RWxlbWVu
dEltcGw6OkhUTUxEaXZFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAgIDogSFRNTEVs
ZW1lbnRJbXBsKGRvYykKKyAgICA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6OmRpdigpLCBk
b2MpCiB7CiB9CiAKQEAgLTcxLDExICs2Niw2IEBAIEhUTUxEaXZFbGVtZW50SW1wbDo6fkhUTUxE
aXZFbGVtZW50SW1wbCgKIHsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxEaXZFbGVtZW50SW1wbDo6
aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9ESVY7Ci19Ci0KIGJvb2wgSFRNTERpdkVsZW1l
bnRJbXBsOjptYXBUb0VudHJ5KE5vZGVJbXBsOjpJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRy
eSYgcmVzdWx0KSBjb25zdAogewogICAgIGlmIChhdHRyID09IEFUVFJfQUxJR04pIHsKQEAgLTEy
MCw3ICsxMTAsNyBAQCB2b2lkIEhUTUxEaXZFbGVtZW50SW1wbDo6c2V0QWxpZ24oY29uc3QgCiAv
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxIUkVsZW1lbnRJbXBsOjpIVE1MSFJFbGVtZW50SW1w
bChEb2N1bWVudFB0ciAqZG9jKQotICAgIDogSFRNTEVsZW1lbnRJbXBsKGRvYykKKyAgICA6IEhU
TUxFbGVtZW50SW1wbChIVE1MTmFtZXM6OmhyKCksIGRvYykKIHsKIH0KIApAQCAtMTI4LDExICsx
MTgsNiBAQCBIVE1MSFJFbGVtZW50SW1wbDo6fkhUTUxIUkVsZW1lbnRJbXBsKCkKIHsKIH0KIAot
Tm9kZUltcGw6OklkIEhUTUxIUkVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IElEX0hSOwotfQotCiBib29sIEhUTUxIUkVsZW1lbnRJbXBsOjptYXBUb0VudHJ5KE5vZGVJbXBs
OjpJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdAogewogICAgIHN3
aXRjaCAoYXR0cikgewpAQCAtMjUyLDggKzIzNyw4IEBAIHZvaWQgSFRNTEhSRWxlbWVudEltcGw6
OnNldFdpZHRoKGNvbnN0IEQKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1IVE1MSGVhZGluZ0Vs
ZW1lbnRJbXBsOjpIVE1MSGVhZGluZ0VsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIHVzaG9y
dCBfdGFnaWQpCi0gICAgOiBIVE1MR2VuZXJpY0VsZW1lbnRJbXBsKGRvYywgX3RhZ2lkKQorSFRN
TEhlYWRpbmdFbGVtZW50SW1wbDo6SFRNTEhlYWRpbmdFbGVtZW50SW1wbChjb25zdCBRdWFsaWZp
ZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudFB0ciAqZG9jKQorICAgIDogSFRNTEVsZW1lbnRJbXBs
KHRhZ05hbWUsIGRvYykKIHsKIH0KIApAQCAtMjcwLDEzICsyNTUsOCBAQCB2b2lkIEhUTUxIZWFk
aW5nRWxlbWVudEltcGw6OnNldEFsaWduKGNvCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxQ
YXJhZ3JhcGhFbGVtZW50SW1wbDo6SFRNTFBhcmFncmFwaEVsZW1lbnRJbXBsKERvY3VtZW50UHRy
ICpkb2MpCi0gICAgOiBIVE1MRWxlbWVudEltcGwoZG9jKQotewotfQotCi1Ob2RlSW1wbDo6SWQg
SFRNTFBhcmFncmFwaEVsZW1lbnRJbXBsOjppZCgpIGNvbnN0CisgICAgOiBIVE1MRWxlbWVudElt
cGwoSFRNTE5hbWVzOjpwKCksIGRvYykKIHsKLSAgICByZXR1cm4gSURfUDsKIH0KIAogYm9vbCBI
VE1MUGFyYWdyYXBoRWxlbWVudEltcGw6Om1hcFRvRW50cnkoTm9kZUltcGw6OklkIGF0dHIsIE1h
cHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0CkBAIC0zMjIsOCArMzAyLDggQEAgdm9p
ZCBIVE1MUGFyYWdyYXBoRWxlbWVudEltcGw6OnNldEFsaWduKAogCiAvLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCiAKLUhUTUxQcmVFbGVtZW50SW1wbDo6SFRNTFByZUVsZW1lbnRJbXBsKERvY3VtZW50UHRy
ICpkb2MsIHVuc2lnbmVkIHNob3J0IF90YWdpZCkKLSAgICA6IEhUTUxHZW5lcmljRWxlbWVudElt
cGwoZG9jLCBfdGFnaWQpCitIVE1MUHJlRWxlbWVudEltcGw6OkhUTUxQcmVFbGVtZW50SW1wbChj
b25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudFB0ciAqZG9jKQorICAgIDogSFRN
TEVsZW1lbnRJbXBsKHRhZ05hbWUsIGRvYykKIHsKIH0KIApAQCAtMzQzLDE2ICszMjMsMTEgQEAg
dm9pZCBIVE1MUHJlRWxlbWVudEltcGw6OnNldFdpZHRoKGxvbmcgdwogY29uc3QgaW50IGRlZmF1
bHRNaW5pbXVtRGVsYXkgPSA2MDsKIAogSFRNTE1hcnF1ZWVFbGVtZW50SW1wbDo6SFRNTE1hcnF1
ZWVFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotOiBIVE1MRWxlbWVudEltcGwoZG9jKSwK
KzogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6bWFycXVlZSgpLCBkb2MpLAogICBtX21pbmlt
dW1EZWxheShkZWZhdWx0TWluaW11bURlbGF5KQogewogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTE1h
cnF1ZWVFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9NQVJRVUVFOwot
fQotCiBib29sIEhUTUxNYXJxdWVlRWxlbWVudEltcGw6Om1hcFRvRW50cnkoTm9kZUltcGw6Oklk
IGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0CiB7CiAgICAgc3dpdGNo
IChhdHRyKSB7CkBAIC00MzQsMTkgKzQwOSwzIEBAIHZvaWQgSFRNTE1hcnF1ZWVFbGVtZW50SW1w
bDo6cGFyc2VNYXBwZWQKICAgICAgICAgICAgIEhUTUxFbGVtZW50SW1wbDo6cGFyc2VNYXBwZWRB
dHRyaWJ1dGUoYXR0cik7CiAgICAgfQogfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotSFRNTExh
eWVyRWxlbWVudEltcGw6OkhUTUxMYXllckVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0g
ICAgOiBIVE1MRGl2RWxlbWVudEltcGwoIGRvYyApCi17Ci19Ci0KLUhUTUxMYXllckVsZW1lbnRJ
bXBsOjp+SFRNTExheWVyRWxlbWVudEltcGwoKQotewotfQotCi1Ob2RlSW1wbDo6SWQgSFRNTExh
eWVyRWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfTEFZRVI7Ci19Cklu
ZGV4OiBraHRtbC9odG1sL2h0bWxfYmxvY2tpbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sX2Jsb2NraW1wbC5oLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjkKZGlmZiAtdSAtcCAtcjEuOSBraHRtbC9odG1sL2h0bWxfYmxvY2tpbXBsLmgK
LS0tIGtodG1sL2h0bWwvaHRtbF9ibG9ja2ltcGwuaAkxMSBNYXkgMjAwNSAwNTo0OTozNCAtMDAw
MAkxLjkKKysrIGtodG1sL2h0bWwvaHRtbF9ibG9ja2ltcGwuaAkyMyBKdW4gMjAwNSAwMToxMDo0
OSAtMDAwMApAQCAtMjYsNyArMjYsNiBAQAogI2RlZmluZSBIVE1MX0JMT0NLSU1QTF9ICiAKICNp
bmNsdWRlICJodG1sX2VsZW1lbnRpbXBsLmgiCi0jaW5jbHVkZSAiZHRkLmgiCiAKIG5hbWVzcGFj
ZSBET00gewogCkBAIC00MCw4ICszOSw4IEBAIHB1YmxpYzoKICAgICBIVE1MQmxvY2txdW90ZUVs
ZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpOwogICAgIH5IVE1MQmxvY2txdW90ZUVsZW1lbnRJ
bXBsKCk7CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7Ci0KKyAgICB2aXJ0dWFsIGludCB0
YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDU7IH0KKyAgICAKICAgICBET01TdHJpbmcgY2l0
ZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0Q2l0ZShjb25zdCBET01TdHJpbmcgJik7CiB9OwpAQCAt
NTUsOCArNTQsOCBAQCBjbGFzcyBIVE1MRGl2RWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTEVsCiBw
dWJsaWM6CiAgICAgSFRNTERpdkVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpOwogICAgIH5I
VE1MRGl2RWxlbWVudEltcGwoKTsKLQotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKKyAgICAK
KyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDU7IH0KICAgICAK
ICAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRy
eSYgcmVzdWx0KSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUo
TWFwcGVkQXR0cmlidXRlSW1wbCAqdG9rZW4pOwpAQCAtNzIsOCArNzEsOSBAQCBjbGFzcyBIVE1M
SFJFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MRWxlCiBwdWJsaWM6CiAgICAgSFRNTEhSRWxlbWVu
dEltcGwoRG9jdW1lbnRQdHIgKmRvYyk7CiAgICAgfkhUTUxIUkVsZW1lbnRJbXBsKCk7Ci0KLSAg
ICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CisgICAgCisgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVz
IGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gRk9SQklEREVOOyB9CisgICAgdmly
dHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAwOyB9CiAgICAgCiAgICAgdmly
dHVhbCBib29sIG1hcFRvRW50cnkoSWQgYXR0ciwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3Vs
dCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0
dHJpYnV0ZUltcGwgKik7CkBAIC05MywxMCArOTMsMTIgQEAgcHVibGljOgogCiAvLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCiAKLWNsYXNzIEhUTUxIZWFkaW5nRWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTEdl
bmVyaWNFbGVtZW50SW1wbAorY2xhc3MgSFRNTEhlYWRpbmdFbGVtZW50SW1wbCA6IHB1YmxpYyBI
VE1MRWxlbWVudEltcGwKIHsKIHB1YmxpYzoKLSAgICBIVE1MSGVhZGluZ0VsZW1lbnRJbXBsKERv
Y3VtZW50UHRyICpkb2MsIHVzaG9ydCBfdGFnaWQpOworICAgIEhUTUxIZWFkaW5nRWxlbWVudElt
cGwoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnRQdHIgKmRvYyk7CisKKyAg
ICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDU7IH0KIAogICAgIERP
TVN0cmluZyBhbGlnbigpIGNvbnN0OwogICAgIHZvaWQgc2V0QWxpZ24oY29uc3QgRE9NU3RyaW5n
ICYpOwpAQCAtMTA0LDIxICsxMDYsMTYgQEAgcHVibGljOgogCiAvLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CiAKLS8qCi0gKiB3ZXJlIG5vdCB1c2luZyBIVE1MRWxlbWVudEltcGwgYXMgcGFyZW50IGNsYXNz
LCBzaW5jZSBhCi0gKiBwYXJhZ3JhcGggc2hvdWxkIGJlIGFibGUgdG8gZmxvdyBhcm91bmQgYWxp
Z25lZCBvYmplY3RzLiBUaHVzCi0gKiBhIDxwPiBlbGVtZW50IGhhcyB0byBiZSBpbmxpbmUsIGFu
ZCBpcyByZW5kZXJlZCBieQotICogSFRNTEJsb2NrSW1wbDo6Y2FsY1BhcmFncmFwaAotICovCiBj
bGFzcyBIVE1MUGFyYWdyYXBoRWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTEVsZW1lbnRJbXBsCiB7
CiBwdWJsaWM6CiAgICAgSFRNTFBhcmFncmFwaEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2Mp
OwogCisgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3Qg
eyByZXR1cm4gT1BUSU9OQUw7IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0
IHsgcmV0dXJuIDM7IH0KKyAgICAKICAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShJZCBhdHRy
LCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQg
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqYXR0cik7Ci0gICAgCi0g
ICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwogCiAgICAgRE9NU3RyaW5nIGFsaWduKCkgY29uc3Q7
CiAgICAgdm9pZCBzZXRBbGlnbihjb25zdCBET01TdHJpbmcgJik7CkBAIC0xMjYsMTMgKzEyMywx
MyBAQCBwdWJsaWM6CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotY2xhc3MgSFRNTFByZUVsZW1l
bnRJbXBsIDogcHVibGljIEhUTUxHZW5lcmljRWxlbWVudEltcGwKK2NsYXNzIEhUTUxQcmVFbGVt
ZW50SW1wbCA6IHB1YmxpYyBIVE1MRWxlbWVudEltcGwKIHsKIHB1YmxpYzoKLSAgICBIVE1MUHJl
RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgdXNob3J0IF90YWdpZCk7CisgICAgSFRNTFBy
ZUVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50UHRyICpk
b2MpOwogCiAgICAgbG9uZyB3aWR0aCgpIGNvbnN0OwotICAgIHZvaWQgc2V0V2lkdGgoIGxvbmcg
dyApOworICAgIHZvaWQgc2V0V2lkdGgobG9uZyB3KTsKIH07CiAKIC8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KQEAgLTE0MSw4ICsxMzgsNiBAQCBjbGFzcyBIVE1MTWFycXVlZUVsZW1lbnRJbXBsIDogcHVi
bGljIEhUCiB7CiBwdWJsaWM6CiAgICAgSFRNTE1hcnF1ZWVFbGVtZW50SW1wbChEb2N1bWVudFB0
ciAqZG9jKTsKLQotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKICAgICAKICAgICB2aXJ0dWFs
IGJvb2wgbWFwVG9FbnRyeShJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBj
b25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmli
dXRlSW1wbCAqdG9rZW4pOwpAQCAtMTUzLDE4ICsxNDgsNSBAQCBwcml2YXRlOgogICAgIGludCBt
X21pbmltdW1EZWxheTsKIH07CiAKLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotY2xhc3MgSFRNTExh
eWVyRWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTERpdkVsZW1lbnRJbXBsCi17Ci1wdWJsaWM6Ci0g
ICAgSFRNTExheWVyRWxlbWVudEltcGwoIERvY3VtZW50UHRyICpkb2MgKTsKLSAgICB+SFRNTExh
eWVyRWxlbWVudEltcGwoKTsKLQotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKLQotICAgIGJv
b2wgZml4ZWQ7Ci19OwotCiB9OyAvL25hbWVzcGFjZQogI2VuZGlmCkluZGV4OiBraHRtbC9odG1s
L2h0bWxfZG9jdW1lbnRpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2Vi
Q29yZS9raHRtbC9odG1sL2h0bWxfZG9jdW1lbnRpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS42MApkaWZmIC11IC1wIC1yMS42MCBraHRtbC9odG1sL2h0bWxfZG9jdW1lbnRpbXBsLmNw
cAotLS0ga2h0bWwvaHRtbC9odG1sX2RvY3VtZW50aW1wbC5jcHAJMTEgTWF5IDIwMDUgMDA6NTg6
MjggLTAwMDAJMS42MAorKysga2h0bWwvaHRtbC9odG1sX2RvY3VtZW50aW1wbC5jcHAJMjMgSnVu
IDIwMDUgMDE6MTA6NDkgLTAwMDAKQEAgLTYwLDYgKzYwLDcgQEAKICNpbmNsdWRlICJodG1sL2h0
bWxfbWlzY2ltcGwuaCIKICNpbmNsdWRlICJodG1sL2h0bWxfaW1hZ2VpbXBsLmgiCiAjaW5jbHVk
ZSAiaHRtbC9odG1sX2Zvcm1pbXBsLmgiCisjaW5jbHVkZSAiaHRtbGZhY3RvcnkuaCIKIAogI2lu
Y2x1ZGUgImtodG1sdmlldy5oIgogI2luY2x1ZGUgImtodG1sX3BhcnQuaCIKQEAgLTI0NiwxMiAr
MjQ3LDE3IEBAIFRva2VuaXplciAqSFRNTERvY3VtZW50SW1wbDo6Y3JlYXRlVG9rZW4KIGJvb2wg
SFRNTERvY3VtZW50SW1wbDo6Y2hpbGRBbGxvd2VkKCBOb2RlSW1wbCAqbmV3Q2hpbGQgKQogewog
ICAgIC8vICMjIyBzdXBwb3J0IGNvbW1lbnRzLiBldGMgYXMgYSBjaGlsZAotICAgIHJldHVybiAo
bmV3Q2hpbGQtPmlkKCkgPT0gSURfSFRNTCB8fCBuZXdDaGlsZC0+aWQoKSA9PSBJRF9DT01NRU5U
KTsKKyAgICByZXR1cm4gKG5ld0NoaWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aHRtbCgpKSB8
fCBuZXdDaGlsZC0+aXNDb21tZW50Tm9kZSgpKTsKIH0KIAogRWxlbWVudEltcGwgKkhUTUxEb2N1
bWVudEltcGw6OmNyZWF0ZUVsZW1lbnQoIGNvbnN0IERPTVN0cmluZyAmbmFtZSwgaW50ICZleGNl
cHRpb25jb2RlICkKIHsKLSAgICByZXR1cm4gY3JlYXRlSFRNTEVsZW1lbnQobmFtZSwgZXhjZXB0
aW9uY29kZSk7CisgICAgaWYgKCFpc1ZhbGlkTmFtZShuYW1lKSkgeworICAgICAgICBleGNlcHRp
b25jb2RlID0gRE9NRXhjZXB0aW9uOjpJTlZBTElEX0NIQVJBQ1RFUl9FUlI7CisgICAgICAgIHJl
dHVybiAwOworICAgIH0KKworICAgIHJldHVybiBIVE1MRWxlbWVudEZhY3Rvcnk6OmNyZWF0ZUhU
TUxFbGVtZW50KEF0b21pY1N0cmluZyhuYW1lKSwgdGhpcywgMCwgZmFsc2UpOwogfQogCiB2b2lk
IEhUTUxEb2N1bWVudEltcGw6OnNsb3RIaXN0b3J5Q2hhbmdlZCgpCkluZGV4OiBraHRtbC9odG1s
L2h0bWxfZG9jdW1lbnRpbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNv
cmUva2h0bWwvaHRtbC9odG1sX2RvY3VtZW50aW1wbC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjI5CmRpZmYgLXUgLXAgLXIxLjI5IGtodG1sL2h0bWwvaHRtbF9kb2N1bWVudGltcGwuaAotLS0g
a2h0bWwvaHRtbC9odG1sX2RvY3VtZW50aW1wbC5oCTExIE1heSAyMDA1IDAwOjU4OjI4IC0wMDAw
CTEuMjkKKysrIGtodG1sL2h0bWwvaHRtbF9kb2N1bWVudGltcGwuaAkyMyBKdW4gMjAwNSAwMTox
MDo1MCAtMDAwMApAQCAtMzQsNyArMzQsNyBAQCBjbGFzcyBRU3RyaW5nOwogCiBuYW1lc3BhY2Ug
RE9NIHsKIAotICAgIGNsYXNzIEhUTUxFbGVtZW50SW1wbDsKK2NsYXNzIEhUTUxFbGVtZW50SW1w
bDsKIAogY2xhc3MgSFRNTERvY3VtZW50SW1wbCA6IHB1YmxpYyBET006OkRvY3VtZW50SW1wbCwg
cHVibGljIGtodG1sOjpDYWNoZWRPYmplY3RDbGllbnQKIHsKSW5kZXg6IGtodG1sL2h0bWwvaHRt
bF9lbGVtZW50aW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUv
a2h0bWwvaHRtbC9odG1sX2VsZW1lbnRpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS44
NwpkaWZmIC11IC1wIC1yMS44NyBraHRtbC9odG1sL2h0bWxfZWxlbWVudGltcGwuY3BwCi0tLSBr
aHRtbC9odG1sL2h0bWxfZWxlbWVudGltcGwuY3BwCTEzIE1heSAyMDA1IDE2OjQ4OjUxIC0wMDAw
CTEuODcKKysrIGtodG1sL2h0bWwvaHRtbF9lbGVtZW50aW1wbC5jcHAJMjMgSnVuIDIwMDUgMDE6
MTA6NTAgLTAwMDAKQEAgLTI4LDEwICsyOCwxMCBAQAogLy8jZGVmaW5lIEVWRU5UX0RFQlVHCiAv
LyNkZWZpbmUgVU5TVVBQT1JURURfQVRUUgogCi0jaW5jbHVkZSAiaHRtbC9kdGQuaCIKICNpbmNs
dWRlICJodG1sL2h0bWxfZWxlbWVudGltcGwuaCIKICNpbmNsdWRlICJodG1sL2h0bWxfZG9jdW1l
bnRpbXBsLmgiCiAjaW5jbHVkZSAiaHRtbC9odG1sdG9rZW5pemVyLmgiCisjaW5jbHVkZSAiaHRt
bGZhY3RvcnkuaCIKIAogI2luY2x1ZGUgIm1pc2MvaHRtbGhhc2hlcy5oIgogI2luY2x1ZGUgImVk
aXRpbmcvdmlzaWJsZV90ZXh0LmgiCkBAIC01OCw4ICs1OCw4IEBAIHVzaW5nIG5hbWVzcGFjZSBr
aHRtbDsKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUhUTUxFbGVtZW50SW1wbDo6SFRNTEVsZW1lbnRJbXBs
KERvY3VtZW50UHRyICpkb2MpCi0gICAgOiBTdHlsZWRFbGVtZW50SW1wbChkb2MpCitIVE1MRWxl
bWVudEltcGw6OkhUTUxFbGVtZW50SW1wbChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBE
b2N1bWVudFB0ciAqZG9jKQorICAgIDogU3R5bGVkRWxlbWVudEltcGwodGFnTmFtZSwgZG9jKQog
ewogfQogCkBAIC02Nyw1MSArNjcsOSBAQCBIVE1MRWxlbWVudEltcGw6On5IVE1MRWxlbWVudElt
cGwoKQogewogfQogCi1ib29sIEhUTUxFbGVtZW50SW1wbDo6aXNJbmxpbmUoKSBjb25zdAotewot
ICAgIGlmIChyZW5kZXJlcigpKQotICAgICAgICByZXR1cm4gRWxlbWVudEltcGw6OmlzSW5saW5l
KCk7Ci0gICAgCi0gICAgc3dpdGNoKGlkKCkpIHsKLSAgICAgICAgY2FzZSBJRF9BOgotICAgICAg
ICBjYXNlIElEX0ZPTlQ6Ci0gICAgICAgIGNhc2UgSURfVFQ6Ci0gICAgICAgIGNhc2UgSURfVToK
LSAgICAgICAgY2FzZSBJRF9COgotICAgICAgICBjYXNlIElEX0k6Ci0gICAgICAgIGNhc2UgSURf
UzoKLSAgICAgICAgY2FzZSBJRF9TVFJJS0U6Ci0gICAgICAgIGNhc2UgSURfQklHOgotICAgICAg
ICBjYXNlIElEX1NNQUxMOgotICAgIAotICAgICAgICAgICAgLy8gJXBocmFzZQotICAgICAgICBj
YXNlIElEX0VNOgotICAgICAgICBjYXNlIElEX1NUUk9ORzoKLSAgICAgICAgY2FzZSBJRF9ERk46
Ci0gICAgICAgIGNhc2UgSURfQ09ERToKLSAgICAgICAgY2FzZSBJRF9TQU1QOgotICAgICAgICBj
YXNlIElEX0tCRDoKLSAgICAgICAgY2FzZSBJRF9WQVI6Ci0gICAgICAgIGNhc2UgSURfQ0lURToK
LSAgICAgICAgY2FzZSBJRF9BQkJSOgotICAgICAgICBjYXNlIElEX0FDUk9OWU06Ci0gICAgCi0g
ICAgICAgICAgICAvLyAlc3BlY2lhbAotICAgICAgICBjYXNlIElEX1NVQjoKLSAgICAgICAgY2Fz
ZSBJRF9TVVA6Ci0gICAgICAgIGNhc2UgSURfU1BBTjoKLSAgICAgICAgY2FzZSBJRF9OT0JSOgot
ICAgICAgICBjYXNlIElEX1dCUjoKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAg
ICAgCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gRWxlbWVudEltcGw6Omlz
SW5saW5lKCk7Ci0gICAgfQotfQotCiBOb2RlSW1wbCAqSFRNTEVsZW1lbnRJbXBsOjpjbG9uZU5v
ZGUoYm9vbCBkZWVwKQogewotICAgIEhUTUxFbGVtZW50SW1wbCAqY2xvbmUgPSBzdGF0aWNfY2Fz
dDxIVE1MRWxlbWVudEltcGwgKj4oZ2V0RG9jdW1lbnQoKS0+Y3JlYXRlSFRNTEVsZW1lbnQobG9j
YWxOYW1lUGFydChpZCgpKSkpOworICAgIEhUTUxFbGVtZW50SW1wbCAqY2xvbmUgPSBIVE1MRWxl
bWVudEZhY3Rvcnk6OmNyZWF0ZUhUTUxFbGVtZW50KGxvY2FsTmFtZSgpLCBnZXREb2N1bWVudCgp
LCAwLCBmYWxzZSk7CiAgICAgaWYgKCFjbG9uZSkKICAgICAgICAgcmV0dXJuIDA7CiAKQEAgLTMy
NSwyNiArMjgzLDE3IEBAIERPTVN0cmluZyBIVE1MRWxlbWVudEltcGw6Om91dGVyVGV4dCgpIGMK
IERvY3VtZW50RnJhZ21lbnRJbXBsICpIVE1MRWxlbWVudEltcGw6OmNyZWF0ZUNvbnRleHR1YWxG
cmFnbWVudChjb25zdCBET01TdHJpbmcgJmh0bWwpCiB7CiAgICAgLy8gdGhlIGZvbGxvd2luZyBp
cyBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIGRlZmluaXRpb24gYXMgdXNlZCBieSBJRQotICAgIGlm
KCBlbmRUYWdSZXF1aXJlbWVudChpZCgpKSA9PSBGT1JCSURERU4gKQotICAgICAgICByZXR1cm4g
TlVMTDsKLSAgICAvLyBJRSBkaXNhbGxvd3MgaW5uZXJIVE1MIG9uIGlubGluZSBlbGVtZW50cy4g
SSBkb24ndCBzZWUgd2h5IHdlIHNob3VsZCBoYXZlIHRoaXMgcmVzdHJpY3Rpb24sIGFzIG91cgot
ICAgIC8vIGRodG1sIGVuZ2luZSBjYW4gY29wZSB3aXRoIGl0LiBMYXJzCi0gICAgLy9pZiAoIGlz
SW5saW5lKCkgKSByZXR1cm4gZmFsc2U7Ci0gICAgc3dpdGNoKCBpZCgpICkgewotICAgICAgICBj
YXNlIElEX0NPTDoKLSAgICAgICAgY2FzZSBJRF9DT0xHUk9VUDoKLSAgICAgICAgY2FzZSBJRF9G
UkFNRVNFVDoKLSAgICAgICAgY2FzZSBJRF9IRUFEOgotICAgICAgICBjYXNlIElEX1NUWUxFOgot
ICAgICAgICBjYXNlIElEX1RJVExFOgotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgaWYgKCAhZ2V0RG9jdW1l
bnQoKS0+aXNIVE1MRG9jdW1lbnQoKSApCi0gICAgICAgIHJldHVybiBOVUxMOworICAgIGlmIChl
bmRUYWdSZXF1aXJlbWVudCgpID09IEZPUkJJRERFTikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICBpZiAoaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6Y29sKCkpIHx8IGhhc0xvY2FsTmFtZShIVE1M
TmFtZXM6OmNvbGdyb3VwKCkpIHx8IGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmZyYW1lc2V0KCkp
IHx8CisgICAgICAgIGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmhlYWQoKSkgfHwgaGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6c3R5bGUoKSkgfHwgaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dGl0bGUo
KSkpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKCFnZXREb2N1bWVudCgpLT5pc0hUTUxE
b2N1bWVudCgpKQorICAgICAgICByZXR1cm4gMDsKIAotICAgIERvY3VtZW50RnJhZ21lbnRJbXBs
ICpmcmFnbWVudCA9IG5ldyBEb2N1bWVudEZyYWdtZW50SW1wbCggZG9jUHRyKCkgKTsKKyAgICBE
b2N1bWVudEZyYWdtZW50SW1wbCAqZnJhZ21lbnQgPSBuZXcgRG9jdW1lbnRGcmFnbWVudEltcGwo
ZG9jUHRyKCkpOwogICAgIGZyYWdtZW50LT5yZWYoKTsKICAgICB7CiAgICAgICAgIEhUTUxUb2tl
bml6ZXIgdG9rKGRvY1B0cigpLCBmcmFnbWVudCk7CkBAIC0zNTgsMTQgKzMwNywxNCBAQCBEb2N1
bWVudEZyYWdtZW50SW1wbCAqSFRNTEVsZW1lbnRJbXBsOjpjCiAgICAgaW50IGlnbm9yZWRFeGNl
cHRpb25Db2RlOwogCiAgICAgLy8gd2UgbmVlZCB0byBwb3AgPGh0bWw+IGFuZCA8Ym9keT4gZWxl
bWVudHMgYW5kIHJlbW92ZSA8aGVhZD4gdG8KLSAgICAvLyBhY2NvbWFkYXRlIGZvbGtzIHBhc3Np
bmcgY29tcGxldGUgSFRNTCBkb2N1bWVudHMgdG8gbWFrZSB0aGUKKyAgICAvLyBhY2NvbW1vZGF0
ZSBmb2xrcyBwYXNzaW5nIGNvbXBsZXRlIEhUTUwgZG9jdW1lbnRzIHRvIG1ha2UgdGhlCiAgICAg
Ly8gY2hpbGQgb2YgYW4gZWxlbWVudC4KIAogICAgIE5vZGVJbXBsICpuZXh0Tm9kZTsKICAgICBm
b3IgKE5vZGVJbXBsICpub2RlID0gZnJhZ21lbnQtPmZpcnN0Q2hpbGQoKTsgbm9kZSAhPSBOVUxM
OyBub2RlID0gbmV4dE5vZGUpIHsKICAgICAgICAgbmV4dE5vZGUgPSBub2RlLT5uZXh0U2libGlu
ZygpOwogCW5vZGUtPnJlZigpOwotICAgICAgICBpZiAobm9kZS0+aWQoKSA9PSBJRF9IVE1MIHx8
IG5vZGUtPmlkKCkgPT0gSURfQk9EWSkgeworICAgICAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6Omh0bWwoKSkgfHwgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJvZHkoKSkp
IHsKIAkgICAgTm9kZUltcGwgKmZpcnN0Q2hpbGQgPSBub2RlLT5maXJzdENoaWxkKCk7CiAgICAg
ICAgICAgICBpZiAoZmlyc3RDaGlsZCAhPSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgbmV4dE5v
ZGUgPSBmaXJzdENoaWxkOwpAQCAtMzc5LDkgKzMyOCw5IEBAIERvY3VtZW50RnJhZ21lbnRJbXBs
ICpIVE1MRWxlbWVudEltcGw6OmMKICAgICAgICAgICAgICAgICBjaGlsZC0+ZGVyZWYoKTsKIAkg
ICAgfQogICAgICAgICAgICAgZnJhZ21lbnQtPnJlbW92ZUNoaWxkKG5vZGUsIGlnbm9yZWRFeGNl
cHRpb25Db2RlKTsKLQl9IGVsc2UgaWYgKG5vZGUtPmlkKCkgPT0gSURfSEVBRCkgeworCX0gZWxz
ZSBpZiAobm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmhlYWQoKSkpCiAJICAgIGZyYWdtZW50
LT5yZW1vdmVDaGlsZChub2RlLCBpZ25vcmVkRXhjZXB0aW9uQ29kZSk7Ci0JfQorCiAgICAgICAg
IC8vIEltcG9ydGFudCB0byBkbyB0aGlzIGRlcmVmIGFmdGVyIHJlbW92ZUNoaWxkLCBiZWNhdXNl
IGlmIHRoZSBvbmx5IHRoaW5nCiAgICAgICAgIC8vIGtlZXBpbmcgYSBub2RlIGFyb3VuZCBpcyBh
IHBhcmVudCB0aGF0IGlzIG5vbi0wLCByZW1vdmVDaGlsZCB3aWxsIG5vdAogICAgICAgICAvLyBk
ZWxldGUgdGhlIG5vZGUuIFRoaXMgd29ya3MgZmluZSBpbiBKYXZhU2NyaXB0IGJlY2F1c2UgdGhl
cmUncyBhbHdheXMKQEAgLTQwMCw3ICszNDksNyBAQCBEb2N1bWVudEZyYWdtZW50SW1wbCAqSFRN
TEVsZW1lbnRJbXBsOjpjCiAKIHZvaWQgSFRNTEVsZW1lbnRJbXBsOjpzZXRJbm5lckhUTUwoY29u
c3QgRE9NU3RyaW5nICZodG1sLCBpbnQgJmV4Y2VwdGlvbikKIHsKLSAgICBEb2N1bWVudEZyYWdt
ZW50SW1wbCAqZnJhZ21lbnQgPSBjcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoIGh0bWwgKTsKKyAg
ICBEb2N1bWVudEZyYWdtZW50SW1wbCAqZnJhZ21lbnQgPSBjcmVhdGVDb250ZXh0dWFsRnJhZ21l
bnQoaHRtbCk7CiAgICAgaWYgKGZyYWdtZW50ID09IE5VTEwpIHsKIAlleGNlcHRpb24gPSBET01F
eGNlcHRpb246Ok5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUjsKICAgICAgICAgcmV0dXJuOwpA
QCAtNDE4LDcgKzM2Nyw3IEBAIHZvaWQgSFRNTEVsZW1lbnRJbXBsOjpzZXRPdXRlckhUTUwoY29u
c3QKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBIVE1MRWxlbWVudEltcGwgKnBhcmVudCA9
IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCAqPihwKTsKLSAgICBEb2N1bWVudEZyYWdtZW50
SW1wbCAqZnJhZ21lbnQgPSBwYXJlbnQtPmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCggaHRtbCAp
OworICAgIERvY3VtZW50RnJhZ21lbnRJbXBsICpmcmFnbWVudCA9IHBhcmVudC0+Y3JlYXRlQ29u
dGV4dHVhbEZyYWdtZW50KGh0bWwpOwogCiAgICAgaWYgKCFmcmFnbWVudCkgewogCWV4Y2VwdGlv
biA9IERPTUV4Y2VwdGlvbjo6Tk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOwpAQCAtNDM0LDI5
ICszODMsMTcgQEAgdm9pZCBIVE1MRWxlbWVudEltcGw6OnNldE91dGVySFRNTChjb25zdAogdm9p
ZCBIVE1MRWxlbWVudEltcGw6OnNldElubmVyVGV4dChjb25zdCBET01TdHJpbmcgJnRleHQsIGlu
dCAmZXhjZXB0aW9uKQogewogICAgIC8vIGZvbGxvd2luZyB0aGUgSUUgc3BlY3MuCi0gICAgaWYg
KGVuZFRhZ1JlcXVpcmVtZW50KGlkKCkpID09IEZPUkJJRERFTikgeworICAgIGlmIChlbmRUYWdS
ZXF1aXJlbWVudCgpID09IEZPUkJJRERFTikgewogCWV4Y2VwdGlvbiA9IERPTUV4Y2VwdGlvbjo6
Tk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgLy8gSUUgZGlzYWxsb3dzIGlubmVyVGV4dCBvbiBpbmxpbmUgZWxlbWVudHMuIEkgZG9uJ3Qg
c2VlIHdoeSB3ZSBzaG91bGQgaGF2ZSB0aGlzIHJlc3RyaWN0aW9uLCBhcyBvdXIKLSAgICAvLyBk
aHRtbCBlbmdpbmUgY2FuIGNvcGUgd2l0aCBpdC4gTGFycwotICAgIC8vaWYgKCBpc0lubGluZSgp
ICkgcmV0dXJuIGZhbHNlOwotICAgIHN3aXRjaCggaWQoKSApIHsKLSAgICAgICAgY2FzZSBJRF9D
T0w6Ci0gICAgICAgIGNhc2UgSURfQ09MR1JPVVA6Ci0gICAgICAgIGNhc2UgSURfRlJBTUVTRVQ6
Ci0gICAgICAgIGNhc2UgSURfSEVBRDoKLSAgICAgICAgY2FzZSBJRF9IVE1MOgotICAgICAgICBj
YXNlIElEX1RBQkxFOgotICAgICAgICBjYXNlIElEX1RCT0RZOgotICAgICAgICBjYXNlIElEX1RG
T09UOgotICAgICAgICBjYXNlIElEX1RIRUFEOgotICAgICAgICBjYXNlIElEX1RSOgotICAgICAg
ICAgICAgZXhjZXB0aW9uID0gRE9NRXhjZXB0aW9uOjpOT19NT0RJRklDQVRJT05fQUxMT1dFRF9F
UlI7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBi
cmVhazsKKyAgICBpZiAoaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6Y29sKCkpIHx8IGhhc0xvY2Fs
TmFtZShIVE1MTmFtZXM6OmNvbGdyb3VwKCkpIHx8IGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmZy
YW1lc2V0KCkpIHx8CisgICAgICAgIGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmhlYWQoKSkgfHwg
aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6aHRtbCgpKSB8fCBoYXNMb2NhbE5hbWUoSFRNTE5hbWVz
Ojp0YWJsZSgpKSB8fCAKKyAgICAgICAgaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dGJvZHkoKSkg
fHwgaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dGZvb3QoKSkgfHwgaGFzTG9jYWxOYW1lKEhUTUxO
YW1lczo6dGhlYWQoKSkgfHwKKyAgICAgICAgaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dHIoKSkp
IHsKKyAgICAgICAgZXhjZXB0aW9uID0gRE9NRXhjZXB0aW9uOjpOT19NT0RJRklDQVRJT05fQUxM
T1dFRF9FUlI7CisgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICByZW1vdmVDaGlsZHJlbigp
OwpAQCAtNDY2LDI1ICs0MDMsMTcgQEAgdm9pZCBIVE1MRWxlbWVudEltcGw6OnNldElubmVyVGV4
dChjb25zdAogdm9pZCBIVE1MRWxlbWVudEltcGw6OnNldE91dGVyVGV4dChjb25zdCBET01TdHJp
bmcgJnRleHQsIGludCAmZXhjZXB0aW9uKQogewogICAgIC8vIGZvbGxvd2luZyB0aGUgSUUgc3Bl
Y3MuCi0gICAgaWYoIGVuZFRhZ1JlcXVpcmVtZW50KGlkKCkpID09IEZPUkJJRERFTiApIHsKKyAg
ICBpZiAoZW5kVGFnUmVxdWlyZW1lbnQoKSA9PSBGT1JCSURERU4pIHsKIAlleGNlcHRpb24gPSBE
T01FeGNlcHRpb246Ok5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUjsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KLSAgICBzd2l0Y2goIGlkKCkgKSB7Ci0gICAgICAgIGNhc2UgSURfQ09MOgotICAg
ICAgICBjYXNlIElEX0NPTEdST1VQOgotICAgICAgICBjYXNlIElEX0ZSQU1FU0VUOgotICAgICAg
ICBjYXNlIElEX0hFQUQ6Ci0gICAgICAgIGNhc2UgSURfSFRNTDoKLSAgICAgICAgY2FzZSBJRF9U
QUJMRToKLSAgICAgICAgY2FzZSBJRF9UQk9EWToKLSAgICAgICAgY2FzZSBJRF9URk9PVDoKLSAg
ICAgICAgY2FzZSBJRF9USEVBRDoKLSAgICAgICAgY2FzZSBJRF9UUjoKLSAgICAgICAgICAgIGV4
Y2VwdGlvbiA9IERPTUV4Y2VwdGlvbjo6Tk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7CisK
KyAgICBpZiAoaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6Y29sKCkpIHx8IGhhc0xvY2FsTmFtZShI
VE1MTmFtZXM6OmNvbGdyb3VwKCkpIHx8IGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmZyYW1lc2V0
KCkpIHx8CisgICAgICAgIGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmhlYWQoKSkgfHwgaGFzTG9j
YWxOYW1lKEhUTUxOYW1lczo6aHRtbCgpKSB8fCBoYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0YWJs
ZSgpKSB8fCAKKyAgICAgICAgaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dGJvZHkoKSkgfHwgaGFz
TG9jYWxOYW1lKEhUTUxOYW1lczo6dGZvb3QoKSkgfHwgaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6
dGhlYWQoKSkgfHwKKyAgICAgICAgaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dHIoKSkpIHsKKyAg
ICAgICAgZXhjZXB0aW9uID0gRE9NRXhjZXB0aW9uOjpOT19NT0RJRklDQVRJT05fQUxMT1dFRF9F
UlI7CisgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBOb2RlSW1wbCAqcGFyZW50ID0gcGFy
ZW50Tm9kZSgpOwpAQCAtNTI1LDE3ICs0NTQsNiBAQCB2b2lkIEhUTUxFbGVtZW50SW1wbDo6c2V0
T3V0ZXJUZXh0KGNvbnN0CiAgICAgfQogfQogCi0KLURPTVN0cmluZyBIVE1MRWxlbWVudEltcGw6
Om5hbWVzcGFjZVVSSSgpIGNvbnN0Ci17Ci0gICAgLy8gRm9yIEhUTUwgZG9jdW1lbnRzLCB3ZSB0
cmVhdCBIVE1MIGVsZW1lbnRzIGFzIGhhdmluZyBubyBuYW1lc3BhY2UuIEJ1dCBmb3IgWE1MIGRv
Y3VtZW50cwotICAgIC8vIHRoZSBlbGVtZW50cyBoYXZlIHRoZSBuYW1lc3BhY2UgZGVmaW5lZCBp
biB0aGUgWEhUTUwgc3BlYwotICAgIGlmIChnZXREb2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgp
KQotICAgICAgICByZXR1cm4gRE9NU3RyaW5nKCk7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4g
WEhUTUxfTkFNRVNQQUNFOwotfQotCiB2b2lkIEhUTUxFbGVtZW50SW1wbDo6YWRkSFRNTEFsaWdu
bWVudChNYXBwZWRBdHRyaWJ1dGVJbXBsKiBhdHRyKQogewogICAgIC8vcURlYnVnKCJhbGlnbm1l
bnQgaXMgJXMiLCBhbGlnbm1lbnQuc3RyaW5nKCkubGF0aW4xKCkgKTsKQEAgLTY4Miw5ICs2MDAs
OSBAQCBET01TdHJpbmcgSFRNTEVsZW1lbnRJbXBsOjp0b1N0cmluZygpIGNvCiAJRE9NU3RyaW5n
IHJlc3VsdCA9IG9wZW5UYWdTdGFydFRvU3RyaW5nKCk7CiAJcmVzdWx0ICs9ICI+IjsKIAotCWlm
IChlbmRUYWdSZXF1aXJlbWVudChpZCgpKSA9PSBSRVFVSVJFRCkgeworCWlmIChlbmRUYWdSZXF1
aXJlbWVudCgpID09IFJFUVVJUkVEKSB7CiAJICAgIHJlc3VsdCArPSAiPC8iOwotCSAgICByZXN1
bHQgKz0gdGFnTmFtZSgpOworCSAgICByZXN1bHQgKz0gbm9kZU5hbWUoKTsKIAkgICAgcmVzdWx0
ICs9ICI+IjsKIAl9CiAKQEAgLTY5NCw3ICs2MTIsNyBAQCBET01TdHJpbmcgSFRNTEVsZW1lbnRJ
bXBsOjp0b1N0cmluZygpIGNvCiAgICAgcmV0dXJuIEVsZW1lbnRJbXBsOjp0b1N0cmluZygpOwog
fQogCi1ET01TdHJpbmcgSFRNTEVsZW1lbnRJbXBsOjppZERPTSgpIGNvbnN0CitET01TdHJpbmcg
SFRNTEVsZW1lbnRJbXBsOjppZCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGdldEF0dHJpYnV0ZShB
VFRSX0lEKTsKIH0KQEAgLTc0OSwxNSArNjY3LDMgQEAgU2hhcmVkUHRyPEhUTUxDb2xsZWN0aW9u
SW1wbD4gSFRNTEVsZW1lbgogICAgIHJldHVybiBTaGFyZWRQdHI8SFRNTENvbGxlY3Rpb25JbXBs
PihuZXcgSFRNTENvbGxlY3Rpb25JbXBsKHRoaXMsIEhUTUxDb2xsZWN0aW9uSW1wbDo6Tk9ERV9D
SElMRFJFTikpOwogfQogCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUhUTUxHZW5lcmljRWxlbWVu
dEltcGw6OkhUTUxHZW5lcmljRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgdXNob3J0IGkp
Ci0gICAgOiBIVE1MRWxlbWVudEltcGwoZG9jKQotewotICAgIG1fZWxlbWVudElkID0gaTsKLX0K
LQotTm9kZUltcGw6OklkIEhUTUxHZW5lcmljRWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbV9lbGVtZW50SWQ7Ci19CkluZGV4OiBraHRtbC9odG1sL2h0bWxfZWxlbWVudGlt
cGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9odG1sL2h0
bWxfZWxlbWVudGltcGwuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zNQpkaWZmIC11IC1wIC1y
MS4zNSBraHRtbC9odG1sL2h0bWxfZWxlbWVudGltcGwuaAotLS0ga2h0bWwvaHRtbC9odG1sX2Vs
ZW1lbnRpbXBsLmgJMTEgTWF5IDIwMDUgMDU6NDk6MzQgLTAwMDAJMS4zNQorKysga2h0bWwvaHRt
bC9odG1sX2VsZW1lbnRpbXBsLmgJMjMgSnVuIDIwMDUgMDE6MTA6NTAgLTAwMDAKQEAgLTI1LDI3
ICsyNSwyNCBAQAogI2RlZmluZSBIVE1MX0VMRU1FTlRJTVBMX0gKIAogI2luY2x1ZGUgInhtbC9k
b21fZWxlbWVudGltcGwuaCIKLSNpbmNsdWRlIDxxcHRyZGljdC5oPgorI2luY2x1ZGUgImh0bWxu
YW1lcy5oIgogCiBuYW1lc3BhY2UgRE9NIHsKIAogY2xhc3MgRG9jdW1lbnRGcmFnbWVudEltcGw7
CiBjbGFzcyBET01TdHJpbmc7CiBjbGFzcyBIVE1MQ29sbGVjdGlvbkltcGw7Ci0gICAgCisKK2Vu
dW0gSFRNTFRhZ1N0YXR1cyB7IE9QVElPTkFMLCBSRVFVSVJFRCwgRk9SQklEREVOIH07CisKIGNs
YXNzIEhUTUxFbGVtZW50SW1wbCA6IHB1YmxpYyBTdHlsZWRFbGVtZW50SW1wbAogewogcHVibGlj
OgotICAgIEhUTUxFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKTsKLQorICAgIEhUTUxFbGVt
ZW50SW1wbChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudFB0ciAqZG9jKTsK
ICAgICB2aXJ0dWFsIH5IVE1MRWxlbWVudEltcGwoKTsKIAogICAgIHZpcnR1YWwgYm9vbCBpc0hU
TUxFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgdmlydHVhbCBib29sIGlz
SW5saW5lKCkgY29uc3Q7Ci0gICAgIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdCA9IDA7Ci0g
ICAgCiAgICAgdmlydHVhbCBib29sIG1hcFRvRW50cnkoSWQgYXR0ciwgTWFwcGVkQXR0cmlidXRl
RW50cnkmIHJlc3VsdCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmli
dXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwqIGF0dHIpOwogCkBAIC01Myw3ICs1MCw3IEBAIHB1Ymxp
YzoKIAogICAgIFNoYXJlZFB0cjxIVE1MQ29sbGVjdGlvbkltcGw+IGNoaWxkcmVuKCk7CiAgICAg
Ci0gICAgRE9NU3RyaW5nIGlkRE9NKCkgY29uc3Q7IC8vIHJlbmFtZSB0byBpZCBhZnRlciBlbGlt
aW5hdGluZyBOb2RlSW1wbDo6aWQgc29tZSBkYXkKKyAgICBET01TdHJpbmcgaWQoKSBjb25zdDsK
ICAgICB2b2lkIHNldElkKGNvbnN0IERPTVN0cmluZyAmdmFsdWUpOwogICAgIERPTVN0cmluZyB0
aXRsZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0VGl0bGUoY29uc3QgRE9NU3RyaW5nICZ2YWx1ZSk7
CkBAIC03Myw4ICs3MCw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldE91dGVySFRNTChjb25zdCBE
T01TdHJpbmcgJmh0bWwsIGludCAmZXhjZXB0aW9uKTsKICAgICB2b2lkIHNldElubmVyVGV4dChj
b25zdCBET01TdHJpbmcgJnRleHQsIGludCAmZXhjZXB0aW9uKTsKICAgICB2b2lkIHNldE91dGVy
VGV4dChjb25zdCBET01TdHJpbmcgJnRleHQsIGludCAmZXhjZXB0aW9uKTsKLQotICAgIHZpcnR1
YWwgRE9NU3RyaW5nIG5hbWVzcGFjZVVSSSgpIGNvbnN0OwogICAgIAogICAgIHZpcnR1YWwgYm9v
bCBpc0ZvY3VzYWJsZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBpc0NvbnRlbnRFZGl0YWJs
ZSgpIGNvbnN0OwpAQCAtODksMjIgKzg0LDE2IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgRE9N
U3RyaW5nIHRvU3RyaW5nKCkgY29uc3Q7CiAKKyAgICAvLyBTYW1lIHZhbHVlcyBhcyA8c3Bhbj4u
ICBUaGlzIHdheSBjdXN0b20gdGFnIG5hbWUgZWxlbWVudHMgd2lsbCBiZWhhdmUgbGlrZSBpbmxp
bmUgc3BhbnMuCisgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkg
Y29uc3QgeyByZXR1cm4gUkVRVUlSRUQ7IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgp
IGNvbnN0IHsgcmV0dXJuIDE7IH0KKyAgICAKIHByb3RlY3RlZDoKIAogICAgIC8vIGZvciBJTUcs
IE9CSkVDVCBhbmQgQVBQTEVUCiAgICAgdm9pZCBhZGRIVE1MQWxpZ25tZW50KE1hcHBlZEF0dHJp
YnV0ZUltcGwqIGh0bWxBdHRyKTsKIH07CiAKLWNsYXNzIEhUTUxHZW5lcmljRWxlbWVudEltcGwg
OiBwdWJsaWMgSFRNTEVsZW1lbnRJbXBsCi17Ci1wdWJsaWM6Ci0gICAgSFRNTEdlbmVyaWNFbGVt
ZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCB1c2hvcnQgZWxlbWVudElkKTsKLSAgICB2aXJ0dWFs
IElkIGlkKCkgY29uc3Q7Ci0KLXByb3RlY3RlZDoKLSAgICB1c2hvcnQgbV9lbGVtZW50SWQ7Ci19
OwotCiB9IC8vbmFtZXNwYWNlCiAKICNlbmRpZgpJbmRleDoga2h0bWwvaHRtbC9odG1sX2Zvcm1p
bXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9odG1s
L2h0bWxfZm9ybWltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE2NwpkaWZmIC11IC1w
IC1yMS4xNjcga2h0bWwvaHRtbC9odG1sX2Zvcm1pbXBsLmNwcAotLS0ga2h0bWwvaHRtbC9odG1s
X2Zvcm1pbXBsLmNwcAkyMCBKdW4gMjAwNSAwNTo1MjoxNiAtMDAwMAkxLjE2NworKysga2h0bWwv
aHRtbC9odG1sX2Zvcm1pbXBsLmNwcAkyMyBKdW4gMjAwNSAwMToxMDo1NSAtMDAwMApAQCAtMTAz
LDcgKzEwMyw3IEBAIHByaXZhdGU6CiB9OwogCiBIVE1MRm9ybUVsZW1lbnRJbXBsOjpIVE1MRm9y
bUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0gICAgOiBIVE1MRWxlbWVudEltcGwoZG9j
KQorICAgIDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6Zm9ybSgpLCBkb2MpCiB7CiAgICAg
Y29sbGVjdGlvbkluZm8gPSAwOwogICAgIG1fcG9zdCA9IGZhbHNlOwpAQCAtMTMwLDExICsxMzAs
NiBAQCBIVE1MRm9ybUVsZW1lbnRJbXBsOjp+SFRNTEZvcm1FbGVtZW50SW1wCiAgICAgICAgIGlt
Z0VsZW1lbnRzW2ldLT5tX2Zvcm0gPSAwOwogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTEZvcm1FbGVt
ZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9GT1JNOwotfQotCiAjaWYgQVBQ
TEVfQ0hBTkdFUwogCiBib29sIEhUTUxGb3JtRWxlbWVudEltcGw6OmZvcm1Xb3VsZEhhdmVTZWN1
cmVTdWJtaXNzaW9uKGNvbnN0IERPTVN0cmluZyAmdXJsKQpAQCAtMTkyLDcgKzE4Nyw3IEBAIHZv
aWQgSFRNTEZvcm1FbGVtZW50SW1wbDo6c3VibWl0Q2xpY2soKQogewogICAgIGJvb2wgc3VibWl0
Rm91bmQgPSBmYWxzZTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZm9ybUVsZW1lbnRz
LmNvdW50KCk7ICsraSkgewotICAgICAgICBpZiAoZm9ybUVsZW1lbnRzW2ldLT5pZCgpID09IElE
X0lOUFVUKSB7CisgICAgICAgIGlmIChmb3JtRWxlbWVudHNbaV0tPmhhc0xvY2FsTmFtZShIVE1M
TmFtZXM6OmlucHV0KCkpKSB7CiAgICAgICAgICAgICBIVE1MSW5wdXRFbGVtZW50SW1wbCAqZWxl
bWVudCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnRJbXBsICo+KGZvcm1FbGVtZW50c1tp
XSk7CiAgICAgICAgICAgICBpZiAoZWxlbWVudC0+aXNTdWNjZXNzZnVsU3VibWl0QnV0dG9uKCkg
JiYgZWxlbWVudC0+cmVuZGVyZXIoKSkgewogICAgICAgICAgICAgICAgIHN1Ym1pdEZvdW5kID0g
dHJ1ZTsKQEAgLTM5OSw3ICszOTQsNyBAQCBib29sIEhUTUxGb3JtRWxlbWVudEltcGw6OmZvcm1E
YXRhKEZvcm1ECiAKICAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGhlIGN1cnJlbnQgdHlwZSBp
cyBGSUxFLCB0aGVuIHdlIGFsc28gbmVlZCB0bwogICAgICAgICAgICAgICAgICAgICAvLyBpbmNs
dWRlIHRoZSBmaWxlbmFtZQotICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudC0+bm9kZVR5
cGUoKSA9PSBOb2RlOjpFTEVNRU5UX05PREUgJiYgY3VycmVudC0+aWQoKSA9PSBJRF9JTlBVVCAm
JgorICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1l
czo6aW5wdXQoKSkgJiYKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEhUTUxJ
bnB1dEVsZW1lbnRJbXBsKj4oY3VycmVudCktPmlucHV0VHlwZSgpID09IEhUTUxJbnB1dEVsZW1l
bnRJbXBsOjpGSUxFKQogICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBRU3RyaW5nIHBhdGggPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50SW1wbCo+KGN1
cnJlbnQpLT52YWx1ZSgpLnN0cmluZygpOwpAQCAtNTQ3LDcgKzU0Miw3IEBAIHZvaWQgSFRNTEZv
cm1FbGVtZW50SW1wbDo6c3VibWl0KCBib29sIGEKICNpZiBBUFBMRV9DSEFOR0VTCiAgICAgICAg
IC8vIE91ciBhcHAgbmVlZHMgdG8gZ2V0IGZvcm0gdmFsdWVzIGZvciBwYXNzd29yZCBmaWVsZHMg
Zm9yIGRvaW5nIHBhc3N3b3JkIGF1dG9jb21wbGV0ZSwKICAgICAgICAgLy8gc28gd2UgYXJlIG1v
cmUgbGVuaWVudCBpbiBwdXNoaW5nIHZhbHVlcywgYW5kIGxldCB0aGUgYXBwIGRlY2lkZSB3aGF0
IHRvIHNhdmUgd2hlbi4KLSAgICAgICAgaWYgKGN1cnJlbnQtPmlkKCkgPT0gSURfSU5QVVQpIHsK
KyAgICAgICAgaWYgKGN1cnJlbnQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmlucHV0KCkpKSB7
CiAgICAgICAgICAgICBIVE1MSW5wdXRFbGVtZW50SW1wbCAqaW5wdXQgPSBzdGF0aWNfY2FzdDxI
VE1MSW5wdXRFbGVtZW50SW1wbCo+KGN1cnJlbnQpOwogICAgICAgICAgICAgaWYgKGlucHV0LT5p
bnB1dFR5cGUoKSA9PSBIVE1MSW5wdXRFbGVtZW50SW1wbDo6VEVYVAogICAgICAgICAgICAgICAg
IHx8IGlucHV0LT5pbnB1dFR5cGUoKSA9PSAgSFRNTElucHV0RWxlbWVudEltcGw6OlBBU1NXT1JE
CkBAIC03MDksNyArNzA0LDcgQEAgdm9pZCBIVE1MRm9ybUVsZW1lbnRJbXBsOjpyYWRpb0NsaWNr
ZWQoIAogewogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmb3JtRWxlbWVudHMuY291bnQo
KTsgKytpKSB7CiAgICAgICAgIEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsICpjdXJyZW50ID0g
Zm9ybUVsZW1lbnRzW2ldOwotICAgICAgICBpZiAoY3VycmVudC0+aWQoKSA9PSBJRF9JTlBVVCAm
JgorICAgICAgICBpZiAoY3VycmVudC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6aW5wdXQoKSkg
JiYKICAgICAgICAgICAgIHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnRJbXBsKj4oY3VycmVu
dCktPmlucHV0VHlwZSgpID09IEhUTUxJbnB1dEVsZW1lbnRJbXBsOjpSQURJTyAmJgogICAgICAg
ICAgICAgY3VycmVudCAhPSBjYWxsZXIgJiYgY3VycmVudC0+Zm9ybSgpID09IGNhbGxlci0+Zm9y
bSgpICYmIGN1cnJlbnQtPm5hbWUoKSA9PSBjYWxsZXItPm5hbWUoKSkgewogICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudEltcGwqPihjdXJyZW50KS0+c2V0Q2hlY2tlZChm
YWxzZSk7CkBAIC04NjQsOCArODU5LDggQEAgdm9pZCBIVE1MRm9ybUVsZW1lbnRJbXBsOjpzZXRU
YXJnZXQoY29ucwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUhUTUxHZW5lcmljRm9ybUVsZW1l
bnRJbXBsOjpIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCBIVE1M
Rm9ybUVsZW1lbnRJbXBsICpmKQotICAgIDogSFRNTEVsZW1lbnRJbXBsKGRvYykKK0hUTUxHZW5l
cmljRm9ybUVsZW1lbnRJbXBsOjpIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbChjb25zdCBRdWFs
aWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBs
ICpmKQorICAgIDogSFRNTEVsZW1lbnRJbXBsKHRhZ05hbWUsIGRvYykKIHsKICAgICBtX2Rpc2Fi
bGVkID0gbV9yZWFkT25seSA9IGZhbHNlOwogICAgIG1fZG9ybWFudCA9IGZhbHNlOwpAQCAtOTY3
LDkgKzk2Miw4IEBAIHZvaWQgSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGw6OnJlbW92ZWQKIEhU
TUxGb3JtRWxlbWVudEltcGwgKkhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsOjpnZXRGb3JtKCkg
Y29uc3QKIHsKICAgICBOb2RlSW1wbCAqcCA9IHBhcmVudE5vZGUoKTsKLSAgICB3aGlsZShwKQot
ICAgIHsKLSAgICAgICAgaWYoIHAtPmlkKCkgPT0gSURfRk9STSApCisgICAgd2hpbGUocCkgewor
ICAgICAgICBpZiAocC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZvcm0oKSkpCiAgICAgICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50SW1wbCAqPihwKTsKICAgICAgICAg
cCA9IHAtPnBhcmVudE5vZGUoKTsKICAgICB9CkBAIC0xMTg5LDcgKzExODMsNyBAQCB2b2lkIEhU
TUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsOjpzZXRUYWJJCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAK
IEhUTUxCdXR0b25FbGVtZW50SW1wbDo6SFRNTEJ1dHRvbkVsZW1lbnRJbXBsKERvY3VtZW50UHRy
ICpkb2MsIEhUTUxGb3JtRWxlbWVudEltcGwgKmYpCi0gICAgOiBIVE1MR2VuZXJpY0Zvcm1FbGVt
ZW50SW1wbChkb2MsIGYpCisgICAgOiBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbChIVE1MTmFt
ZXM6OmJ1dHRvbigpLCBkb2MsIGYpCiB7CiAgICAgbV90eXBlID0gU1VCTUlUOwogICAgIG1fZGly
dHkgPSB0cnVlOwpAQCAtMTIwMCwxMSArMTE5NCw2IEBAIEhUTUxCdXR0b25FbGVtZW50SW1wbDo6
fkhUTUxCdXR0b25FbGVtZW4KIHsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxCdXR0b25FbGVtZW50
SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9CVVRUT047Ci19Ci0KIERPTVN0cmlu
ZyBIVE1MQnV0dG9uRWxlbWVudEltcGw6OnR5cGUoKSBjb25zdAogewogICAgIHJldHVybiBnZXRB
dHRyaWJ1dGUoQVRUUl9UWVBFKTsKQEAgLTEzMjYsNyArMTMxNSw3IEBAIHZvaWQgSFRNTEJ1dHRv
bkVsZW1lbnRJbXBsOjpzZXRWYWx1ZShjb24KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogSFRNTEZp
ZWxkU2V0RWxlbWVudEltcGw6OkhUTUxGaWVsZFNldEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpk
b2MsIEhUTUxGb3JtRWxlbWVudEltcGwgKmYpCi0gICA6IEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJ
bXBsKGRvYywgZikKKyAgIDogSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwoSFRNTE5hbWVzOjpm
aWVsZHNldCgpLCBkb2MsIGYpCiB7CiB9CiAKQEAgLTEzMzksMTEgKzEzMjgsNiBAQCBib29sIEhU
TUxGaWVsZFNldEVsZW1lbnRJbXBsOjppc0ZvY3VzYWJsCiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci1Ob2RlSW1wbDo6SWQgSFRNTEZpZWxkU2V0RWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gSURfRklFTERTRVQ7Ci19Ci0KIERPTVN0cmluZyBIVE1MRmllbGRTZXRFbGVtZW50
SW1wbDo6dHlwZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuICJmaWVsZHNldCI7CkBAIC0xMzU3LDgg
KzEzNDEsMjEgQEAgUmVuZGVyT2JqZWN0KiBIVE1MRmllbGRTZXRFbGVtZW50SW1wbDo6YwogLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MSW5wdXRFbGVtZW50SW1wbDo6SFRNTElucHV0RWxlbWVu
dEltcGwoRG9jdW1lbnRQdHIgKmRvYywgSFRNTEZvcm1FbGVtZW50SW1wbCAqZikKLSAgICA6IEhU
TUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKGRvYywgZiksIG1faW1hZ2VMb2FkZXIoMCksIG1fdmFs
dWVNYXRjaGVzUmVuZGVyZXIoZmFsc2UpCisgICAgOiBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1w
bChIVE1MTmFtZXM6OmlucHV0KCksIGRvYywgZikKK3sKKyAgICBpbml0KCk7Cit9CisKK0hUTUxJ
bnB1dEVsZW1lbnRJbXBsOjpIVE1MSW5wdXRFbGVtZW50SW1wbChjb25zdCBRdWFsaWZpZWROYW1l
JiB0YWdOYW1lLCBEb2N1bWVudFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmKQorICAg
IDogSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwodGFnTmFtZSwgZG9jLCBmKQogeworICAgIGlu
aXQoKTsKK30KKwordm9pZCBIVE1MSW5wdXRFbGVtZW50SW1wbDo6aW5pdCgpCit7CisgICAgbV9p
bWFnZUxvYWRlciA9IDA7CisgICAgbV92YWx1ZU1hdGNoZXNSZW5kZXJlciA9IGZhbHNlOwogICAg
IG1fdHlwZSA9IFRFWFQ7CiAgICAgbV9tYXhMZW4gPSAtMTsKICAgICBtX3NpemUgPSAyMDsKQEAg
LTEzNzYsOCArMTM3Myw4IEBAIEhUTUxJbnB1dEVsZW1lbnRJbXBsOjpIVE1MSW5wdXRFbGVtZW50
SW0KIAogICAgIG1fbWF4UmVzdWx0cyA9IC0xOwogCi0gICAgaWYgKCBtX2Zvcm0gKQotICAgICAg
ICBtX2F1dG9jb21wbGV0ZSA9IGYtPmF1dG9Db21wbGV0ZSgpOworICAgIGlmIChtX2Zvcm0pCisg
ICAgICAgIG1fYXV0b2NvbXBsZXRlID0gbV9mb3JtLT5hdXRvQ29tcGxldGUoKTsKIH0KIAogSFRN
TElucHV0RWxlbWVudEltcGw6On5IVE1MSW5wdXRFbGVtZW50SW1wbCgpCkBAIC0xMzg2LDExICsx
MzgzLDYgQEAgSFRNTElucHV0RWxlbWVudEltcGw6On5IVE1MSW5wdXRFbGVtZW50SQogICAgIGRl
bGV0ZSBtX2ltYWdlTG9hZGVyOwogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTElucHV0RWxlbWVudElt
cGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfSU5QVVQ7Ci19Ci0KIHZvaWQgSFRNTElu
cHV0RWxlbWVudEltcGw6OnNldFR5cGUoY29uc3QgRE9NU3RyaW5nJiB0KQogewogICAgIHR5cGVF
bnVtIG5ld1R5cGU7CkBAIC0yMzY2LDcgKzIzNTgsNyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnRJ
bXBsOjpzZXRVc2VNYXAoY29uCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxMYWJlbEVsZW1l
bnRJbXBsOjpIVE1MTGFiZWxFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAgIDogSFRN
TEVsZW1lbnRJbXBsKGRvYykKKyAgICA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6OmxhYmVs
KCksIGRvYykKIHsKIH0KIApAQCAtMjM3OSwxMSArMjM3MSw2IEBAIGJvb2wgSFRNTExhYmVsRWxl
bWVudEltcGw6OmlzRm9jdXNhYmxlKCkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU5vZGVJbXBs
OjpJZCBIVE1MTGFiZWxFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9M
QUJFTDsKLX0KLQogdm9pZCBIVE1MTGFiZWxFbGVtZW50SW1wbDo6cGFyc2VNYXBwZWRBdHRyaWJ1
dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqYXR0cikKIHsKICAgICBzd2l0Y2goYXR0ci0+aWQoKSkK
QEAgLTI0NjUsNyArMjQ1Miw3IEBAIHZvaWQgSFRNTExhYmVsRWxlbWVudEltcGw6OnNldEh0bWxG
b3IoY28KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogSFRNTExlZ2VuZEVsZW1lbnRJbXBsOjpIVE1M
TGVnZW5kRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgSFRNTEZvcm1FbGVtZW50SW1wbCAq
ZikKLTogSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwoZG9jLCBmKQorOiBIVE1MR2VuZXJpY0Zv
cm1FbGVtZW50SW1wbChIVE1MTmFtZXM6OmxlZ2VuZCgpLCBkb2MsIGYpCiB7CiB9CiAKQEAgLTI0
NzgsMTEgKzI0NjUsNiBAQCBib29sIEhUTUxMZWdlbmRFbGVtZW50SW1wbDo6aXNGb2N1c2FibGUo
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTExlZ2VuZEVsZW1lbnRJ
bXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0xFR0VORDsKLX0KLQogUmVuZGVyT2Jq
ZWN0KiBIVE1MTGVnZW5kRWxlbWVudEltcGw6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiBh
cmVuYSwgUmVuZGVyU3R5bGUqIHN0eWxlKQogewogICAgIHJldHVybiBuZXcgKGFyZW5hKSBSZW5k
ZXJMZWdlbmQodGhpcyk7CkBAIC0yNTE3LDcgKzI0OTksNyBAQCBFbGVtZW50SW1wbCAqSFRNTExl
Z2VuZEVsZW1lbnRJbXBsOjpmb3JtCiB7CiAgICAgLy8gQ2hlY2sgaWYgdGhlcmUncyBhIGZpZWxk
c2V0IGJlbG9uZ2luZyB0byB0aGlzIGxlZ2VuZC4KICAgICBOb2RlSW1wbCAqZmllbGRzZXQgPSBw
YXJlbnROb2RlKCk7Ci0gICAgd2hpbGUgKGZpZWxkc2V0ICYmIGZpZWxkc2V0LT5pZCgpICE9IElE
X0ZJRUxEU0VUKQorICAgIHdoaWxlIChmaWVsZHNldCAmJiAhZmllbGRzZXQtPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjpmaWVsZHNldCgpKSkKICAgICAgICAgZmllbGRzZXQgPSBmaWVsZHNldC0+cGFy
ZW50Tm9kZSgpOwogICAgIGlmICghZmllbGRzZXQpCiAgICAgICAgIHJldHVybiAwOwpAQCAtMjUy
OCw3ICsyNTEwLDcgQEAgRWxlbWVudEltcGwgKkhUTUxMZWdlbmRFbGVtZW50SW1wbDo6Zm9ybQog
ICAgIHdoaWxlICgobm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoZmllbGRzZXQpKSkgewog
ICAgICAgICBpZiAobm9kZS0+aXNIVE1MRWxlbWVudCgpKSB7CiAgICAgICAgICAgICBIVE1MRWxl
bWVudEltcGwgKmVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwgKj4obm9kZSk7
Ci0gICAgICAgICAgICBpZiAoZWxlbWVudC0+aWQoKSAhPSBJRF9MRUdFTkQgJiYgZWxlbWVudC0+
aXNHZW5lcmljRm9ybUVsZW1lbnQoKSkKKyAgICAgICAgICAgIGlmICghZWxlbWVudC0+aGFzTG9j
YWxOYW1lKEhUTUxOYW1lczo6bGVnZW5kKCkpICYmIGVsZW1lbnQtPmlzR2VuZXJpY0Zvcm1FbGVt
ZW50KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAgICAgICAgIH0KICAgICB9
CkBAIC0yNTUxLDggKzI1MzMsMjAgQEAgdm9pZCBIVE1MTGVnZW5kRWxlbWVudEltcGw6OmFjY2Vz
c0tleUFjdAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MU2VsZWN0RWxlbWVudEltcGw6OkhU
TUxTZWxlY3RFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBs
ICpmKQotICAgIDogSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwoZG9jLCBmKSwgbV9vcHRpb25z
KDApCisgICAgOiBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbChIVE1MTmFtZXM6OnNlbGVjdCgp
LCBkb2MsIGYpLCBtX29wdGlvbnMoMCkKK3sKKyAgICBpbml0KCk7Cit9CisKK0hUTUxTZWxlY3RF
bGVtZW50SW1wbDo6SFRNTFNlbGVjdEVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRh
Z05hbWUsIERvY3VtZW50UHRyICpkb2MsIEhUTUxGb3JtRWxlbWVudEltcGwgKmYpCisgICAgOiBI
VE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbCh0YWdOYW1lLCBkb2MsIGYpLCBtX29wdGlvbnMoMCkK
K3sKKyAgICBpbml0KCk7Cit9CisKK3ZvaWQgSFRNTFNlbGVjdEVsZW1lbnRJbXBsOjppbml0KCkK
IHsKKyAgICBtX29wdGlvbnMgPSAwOwogICAgIG1fbXVsdGlwbGUgPSBmYWxzZTsKICAgICBtX3Jl
Y2FsY0xpc3RJdGVtcyA9IGZhbHNlOwogICAgIC8vIDAgbWVhbnMgaW52YWxpZCAoaS5lLiBub3Qg
c2V0KQpAQCAtMjU2OSwxMSArMjU2Myw2IEBAIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6fkhUTUxT
ZWxlY3RFbGVtZW4KICAgICB9CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MU2VsZWN0RWxlbWVudElt
cGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfU0VMRUNUOwotfQotCiB2b2lkIEhUTUxT
ZWxlY3RFbGVtZW50SW1wbDo6cmVjYWxjU3R5bGUoIFN0eWxlQ2hhbmdlIGNoICkKIHsKICAgICBp
ZiAoaGFzQ2hhbmdlZENoaWxkKCkgJiYgbV9yZW5kZXIpIHsKQEAgLTI1OTUsNyArMjU4NCw3IEBA
IGxvbmcgSFRNTFNlbGVjdEVsZW1lbnRJbXBsOjpzZWxlY3RlZEluZGUKICAgICB1aW50IG8gPSAw
OwogICAgIFFNZW1BcnJheTxIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbCo+IGl0ZW1zID0gbGlz
dEl0ZW1zKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBpdGVtcy5zaXplKCk7
IGkrKykgewotICAgICAgICBpZiAoaXRlbXNbaV0tPmlkKCkgPT0gSURfT1BUSU9OKSB7CisgICAg
ICAgIGlmIChpdGVtc1tpXS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpKSB7CiAg
ICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnRJbXBsKj4oaXRlbXNb
aV0pLT5zZWxlY3RlZCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBvOwogICAgICAgICAgICAg
bysrOwpAQCAtMjYxMSw3ICsyNjAwLDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudEltcGw6OnNl
dFNlbGVjdGVkSQogICAgIFFNZW1BcnJheTxIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbCo+IGl0
ZW1zID0gbGlzdEl0ZW1zKCk7CiAgICAgaW50IGxpc3RJbmRleDsKICAgICBmb3IgKGxpc3RJbmRl
eCA9IDA7IGxpc3RJbmRleCA8IGludChpdGVtcy5zaXplKCkpOyBsaXN0SW5kZXgrKykgewotICAg
ICAgICBpZiAoaXRlbXNbbGlzdEluZGV4XS0+aWQoKSA9PSBJRF9PUFRJT04pCisgICAgICAgIGlm
IChpdGVtc1tsaXN0SW5kZXhdLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvcHRpb24oKSkpCiAg
ICAgICAgICAgICBzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudEltcGwqPihpdGVtc1tsaXN0
SW5kZXhdKS0+c2V0U2VsZWN0ZWQoZmFsc2UpOwogICAgIH0KICAgICBsaXN0SW5kZXggPSBvcHRp
b25Ub0xpc3RJbmRleChpbmRleCk7CkBAIC0yNjI3LDcgKzI2MTYsNyBAQCBsb25nIEhUTUxTZWxl
Y3RFbGVtZW50SW1wbDo6bGVuZ3RoKCkgY29uCiAgICAgdWludCBpOwogICAgIFFNZW1BcnJheTxI
VE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbCo+IGl0ZW1zID0gbGlzdEl0ZW1zKCk7CiAgICAgZm9y
IChpID0gMDsgaSA8IGl0ZW1zLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIGlmIChpdGVtc1tpXS0+
aWQoKSA9PSBJRF9PUFRJT04pCisgICAgICAgIGlmIChpdGVtc1tpXS0+aGFzTG9jYWxOYW1lKEhU
TUxOYW1lczo6b3B0aW9uKCkpKQogICAgICAgICAgICAgbGVuKys7CiAgICAgfQogICAgIHJldHVy
biBsZW47CkBAIC0yNjM1LDcgKzI2MjQsNyBAQCBsb25nIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6
bGVuZ3RoKCkgY29uCiAKIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnRJbXBsOjphZGQoIEhUTUxFbGVt
ZW50SW1wbCAqZWxlbWVudCwgSFRNTEVsZW1lbnRJbXBsICpiZWZvcmUgKQogewotICAgIGlmICgh
ZWxlbWVudCB8fCBlbGVtZW50LT5pZCgpICE9IElEX09QVElPTikKKyAgICBpZiAoIWVsZW1lbnQg
fHwgIWVsZW1lbnQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9wdGlvbigpKSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgaW50IGV4Y2VwdGlvbmNvZGUgPSAwOwpAQCAtMjY2OSwxMyArMjY1OCwx
MiBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6Zm9jdXMoKQogICAgIGdldERvY3VtZW50
KCktPnNldEZvY3VzTm9kZSh0aGlzKTsKIH0KIAotRE9NU3RyaW5nIEhUTUxTZWxlY3RFbGVtZW50
SW1wbDo6dmFsdWUoICkKK0RPTVN0cmluZyBIVE1MU2VsZWN0RWxlbWVudEltcGw6OnZhbHVlKCkK
IHsKICAgICB1aW50IGk7CiAgICAgUU1lbUFycmF5PEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBs
Kj4gaXRlbXMgPSBsaXN0SXRlbXMoKTsKICAgICBmb3IgKGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgp
OyBpKyspIHsKLSAgICAgICAgaWYgKCBpdGVtc1tpXS0+aWQoKSA9PSBJRF9PUFRJT04KLSAgICAg
ICAgICAgICYmIHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50SW1wbCo+KGl0ZW1zW2ldKS0+
c2VsZWN0ZWQoKSkKKyAgICAgICAgaWYgKGl0ZW1zW2ldLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVz
OjpvcHRpb24oKSkgJiYgc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnRJbXBsKj4oaXRlbXNb
aV0pLT5zZWxlY3RlZCgpKQogICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxPcHRp
b25FbGVtZW50SW1wbCo+KGl0ZW1zW2ldKS0+dmFsdWUoKTsKICAgICB9CiAgICAgcmV0dXJuIERP
TVN0cmluZygiIik7CkBAIC0yNjg5LDEzICsyNjc3LDEzIEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1l
bnRJbXBsOjpzZXRWYWx1ZShjb24KICAgICAvLyBhbmQgbWFrZSBpdCB0aGUgY3VycmVudCBzZWxl
Y3Rpb24uCiAgICAgUU1lbUFycmF5PEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKj4gaXRlbXMg
PSBsaXN0SXRlbXMoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgp
OyBpKyspCi0gICAgICAgIGlmIChpdGVtc1tpXS0+aWQoKSA9PSBJRF9PUFRJT04gJiYgc3RhdGlj
X2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnRJbXBsKj4oaXRlbXNbaV0pLT52YWx1ZSgpID09IHZhbHVl
KSB7CisgICAgICAgIGlmIChpdGVtc1tpXS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b3B0aW9u
KCkpICYmIHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50SW1wbCo+KGl0ZW1zW2ldKS0+dmFs
dWUoKSA9PSB2YWx1ZSkgewogICAgICAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1l
bnRJbXBsKj4oaXRlbXNbaV0pLT5zZXRTZWxlY3RlZCh0cnVlKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogfQogCi1RU3RyaW5nIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6c3RhdGUo
ICkKK1FTdHJpbmcgSFRNTFNlbGVjdEVsZW1lbnRJbXBsOjpzdGF0ZSgpCiB7CiAjaWYgIUFQUExF
X0NIQU5HRVMKICAgICBRU3RyaW5nIHN0YXRlOwpAQCAtMjcwOCw3ICsyNjk2LDcgQEAgUVN0cmlu
ZyBIVE1MU2VsZWN0RWxlbWVudEltcGw6OnN0YXRlKCApCiAgICAgUUNoYXIgc3RhdGVDaGFyc1ts
XTsKICAgICAKICAgICBmb3IoaW50IGkgPSAwOyBpIDwgbDsgaSsrKQotICAgICAgICBpZihpdGVt
c1tpXS0+aWQoKSA9PSBJRF9PUFRJT04gJiYgc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnRJ
bXBsKj4oaXRlbXNbaV0pLT5zZWxlY3RlZCgpKQorICAgICAgICBpZihpdGVtc1tpXS0+aGFzTG9j
YWxOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpICYmIHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVt
ZW50SW1wbCo+KGl0ZW1zW2ldKS0+c2VsZWN0ZWQoKSkKICAgICAgICAgICAgIHN0YXRlQ2hhcnNb
aV0gPSAnWCc7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHN0YXRlQ2hhcnNbaV0gPSAnLic7
CkBAIC0yNzQ1LDcgKzI3MzMsNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6cmVzdG9y
ZVN0YXRlCiAKICAgICBpbnQgbCA9IGl0ZW1zLmNvdW50KCk7CiAgICAgZm9yKGludCBpID0gMDsg
aSA8IGw7IGkrKykgewotICAgICAgICBpZihpdGVtc1tpXS0+aWQoKSA9PSBJRF9PUFRJT04pIHsK
KyAgICAgICAgaWYoaXRlbXNbaV0tPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9wdGlvbigpKSkg
ewogICAgICAgICAgICAgSFRNTE9wdGlvbkVsZW1lbnRJbXBsKiBvZSA9IHN0YXRpY19jYXN0PEhU
TUxPcHRpb25FbGVtZW50SW1wbCo+KGl0ZW1zW2ldKTsKICAgICAgICAgICAgIG9lLT5zZXRTZWxl
Y3RlZChzdGF0ZVtpXSA9PSAnWCcpOwogICAgICAgICB9CkBAIC0yODM3LDcgKzI4MjUsNyBAQCBi
b29sIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6YXBwZW5kRm9ybURhCiAKICAgICB1aW50IGk7CiAg
ICAgZm9yIChpID0gMDsgaSA8IGl0ZW1zLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIGlmIChpdGVt
c1tpXS0+aWQoKSA9PSBJRF9PUFRJT04pIHsKKyAgICAgICAgaWYgKGl0ZW1zW2ldLT5oYXNMb2Nh
bE5hbWUoSFRNTE5hbWVzOjpvcHRpb24oKSkpIHsKICAgICAgICAgICAgIEhUTUxPcHRpb25FbGVt
ZW50SW1wbCAqb3B0aW9uID0gc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnRJbXBsKj4oaXRl
bXNbaV0pOwogICAgICAgICAgICAgaWYgKG9wdGlvbi0+c2VsZWN0ZWQoKSkgewogICAgICAgICAg
ICAgICAgIGVuY29kZWRfdmFsdWVzLmFwcGVuZERhdGEobmFtZSgpLCBvcHRpb24tPnZhbHVlKCkp
OwpAQCAtMjg1MCw3ICsyODM4LDcgQEAgYm9vbCBIVE1MU2VsZWN0RWxlbWVudEltcGw6OmFwcGVu
ZEZvcm1EYQogICAgIC8vIGluIGFueSBjYXNlLiBvdGhlcndpc2Ugd2UgaGF2ZSBubyBjb25zaXN0
ZW5jeSB3aXRoIHRoZSBET00gaW50ZXJmYWNlLiBGSVhNRSEKICAgICAvLyB3ZSByZXR1cm4gdGhl
IGZpcnN0IG9uZSBpZiBpdCB3YXMgYSBjb21ib2JveCBzZWxlY3QKICAgICBpZiAoIXN1Y2Nlc3Nm
dWwgJiYgIW1fbXVsdGlwbGUgJiYgbV9zaXplIDw9IDEgJiYgaXRlbXMuc2l6ZSgpICYmCi0gICAg
ICAgIChpdGVtc1swXS0+aWQoKSA9PSBJRF9PUFRJT04pICkgeworICAgICAgICAoaXRlbXNbMF0t
Pmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9wdGlvbigpKSkpIHsKICAgICAgICAgSFRNTE9wdGlv
bkVsZW1lbnRJbXBsICpvcHRpb24gPSBzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudEltcGwq
PihpdGVtc1swXSk7CiAgICAgICAgIGlmIChvcHRpb24tPnZhbHVlKCkuaXNOdWxsKCkpCiAgICAg
ICAgICAgICBlbmNvZGVkX3ZhbHVlcy5hcHBlbmREYXRhKG5hbWUoKSwgb3B0aW9uLT50ZXh0KCku
c3RyaW5nKCkuc3RyaXBXaGl0ZVNwYWNlKCkpOwpAQCAtMjg3Myw3ICsyODYxLDcgQEAgaW50IEhU
TUxTZWxlY3RFbGVtZW50SW1wbDo6b3B0aW9uVG9MaXN0SQogICAgIGZvciAoOwogICAgICAgICAg
b3B0aW9uSW5kZXgyIDwgaW50KGl0ZW1zLnNpemUoKSkgJiYgb3B0aW9uSW5kZXgyIDw9IG9wdGlv
bkluZGV4OwogICAgICAgICAgbGlzdEluZGV4KyspIHsgLy8gbm90IGEgdHlwbyEKLSAgICAgICAg
aWYgKGl0ZW1zW2xpc3RJbmRleF0tPmlkKCkgPT0gSURfT1BUSU9OKQorICAgICAgICBpZiAoaXRl
bXNbbGlzdEluZGV4XS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpKQogICAgICAg
ICAgICAgb3B0aW9uSW5kZXgyKys7CiAgICAgfQogICAgIGxpc3RJbmRleC0tOwpAQCAtMjg4NCwx
MyArMjg3MiwxMyBAQCBpbnQgSFRNTFNlbGVjdEVsZW1lbnRJbXBsOjpsaXN0VG9PcHRpb25JCiB7
CiAgICAgUU1lbUFycmF5PEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKj4gaXRlbXMgPSBsaXN0
SXRlbXMoKTsKICAgICBpZiAobGlzdEluZGV4IDwgMCB8fCBsaXN0SW5kZXggPj0gaW50KGl0ZW1z
LnNpemUoKSkgfHwKLSAgICAgICAgaXRlbXNbbGlzdEluZGV4XS0+aWQoKSAhPSBJRF9PUFRJT04p
CisgICAgICAgICFpdGVtc1tsaXN0SW5kZXhdLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiAtMTsKIAogICAgIGludCBvcHRpb25JbmRleCA9IDA7IC8v
IGFjdHVhbCBpbmRleCBvZiBvcHRpb24gbm90IGNvdW50aW5nIE9QVEdST1VQIGVudHJpZXMgdGhh
dCBtYXkgYmUgaW4gbGlzdAogICAgIGludCBpOwogICAgIGZvciAoaSA9IDA7IGkgPCBsaXN0SW5k
ZXg7IGkrKykKLSAgICAgICAgaWYgKGl0ZW1zW2ldLT5pZCgpID09IElEX09QVElPTikKKyAgICAg
ICAgaWYgKGl0ZW1zW2ldLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvcHRpb24oKSkpCiAgICAg
ICAgICAgICBvcHRpb25JbmRleCsrOwogICAgIHJldHVybiBvcHRpb25JbmRleDsKIH0KQEAgLTI5
MTYsMTMgKzI5MDQsMTMgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudEltcGw6OnJlY2FsY0xpc3RJ
dAogICAgIG1fbGlzdEl0ZW1zLnJlc2l6ZSgwKTsKICAgICBIVE1MT3B0aW9uRWxlbWVudEltcGwq
IGZvdW5kU2VsZWN0ZWQgPSAwOwogICAgIHdoaWxlKGN1cnJlbnQpIHsKLSAgICAgICAgaWYgKGN1
cnJlbnQtPmlkKCkgPT0gSURfT1BUR1JPVVAgJiYgY3VycmVudC0+Zmlyc3RDaGlsZCgpKSB7Cisg
ICAgICAgIGlmIChjdXJyZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b3B0Z3JvdXAoKSkgJiYg
Y3VycmVudC0+Zmlyc3RDaGlsZCgpKSB7CiAgICAgICAgICAgICAvLyAjIyMgd2hhdCBpZiBvcHRn
cm91cCBjb250YWlucyBqdXN0IGNvbW1lbnRzPyBkb24ndCB3YW50IG9uZSBvZiBubyBvcHRpb25z
IGluIGl0Li4uCiAgICAgICAgICAgICBtX2xpc3RJdGVtcy5yZXNpemUobV9saXN0SXRlbXMuc2l6
ZSgpKzEpOwogICAgICAgICAgICAgbV9saXN0SXRlbXNbbV9saXN0SXRlbXMuc2l6ZSgpLTFdID0g
c3RhdGljX2Nhc3Q8SFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwqPihjdXJyZW50KTsKICAgICAg
ICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT5maXJzdENoaWxkKCk7CiAgICAgICAgIH0KLSAgICAg
ICAgaWYgKGN1cnJlbnQtPmlkKCkgPT0gSURfT1BUSU9OKSB7CisgICAgICAgIGlmIChjdXJyZW50
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpKSB7CiAgICAgICAgICAgICBtX2xpc3RJ
dGVtcy5yZXNpemUobV9saXN0SXRlbXMuc2l6ZSgpKzEpOwogICAgICAgICAgICAgbV9saXN0SXRl
bXNbbV9saXN0SXRlbXMuc2l6ZSgpLTFdID0gc3RhdGljX2Nhc3Q8SFRNTEdlbmVyaWNGb3JtRWxl
bWVudEltcGwqPihjdXJyZW50KTsKICAgICAgICAgICAgIGlmICghZm91bmRTZWxlY3RlZCAmJiAh
bV9tdWx0aXBsZSAmJiBtX3NpemUgPD0gMSkgewpAQCAtMjk2NCw3ICsyOTUyLDcgQEAgdm9pZCBI
VE1MU2VsZWN0RWxlbWVudEltcGw6OnJlc2V0KCkKICAgICBRTWVtQXJyYXk8SFRNTEdlbmVyaWNG
b3JtRWxlbWVudEltcGwqPiBpdGVtcyA9IGxpc3RJdGVtcygpOwogICAgIHVpbnQgaTsKICAgICBm
b3IgKGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgaWYgKGl0ZW1zW2ld
LT5pZCgpID09IElEX09QVElPTikgeworICAgICAgICBpZiAoaXRlbXNbaV0tPmhhc0xvY2FsTmFt
ZShIVE1MTmFtZXM6Om9wdGlvbigpKSkgewogICAgICAgICAgICAgSFRNTE9wdGlvbkVsZW1lbnRJ
bXBsICpvcHRpb24gPSBzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudEltcGwqPihpdGVtc1tp
XSk7CiAgICAgICAgICAgICBib29sIHNlbGVjdGVkID0gKCFvcHRpb24tPmdldEF0dHJpYnV0ZShB
VFRSX1NFTEVDVEVEKS5pc051bGwoKSk7CiAgICAgICAgICAgICBvcHRpb24tPnNldFNlbGVjdGVk
KHNlbGVjdGVkKTsKQEAgLTI5ODIsNyArMjk3MCw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnRJ
bXBsOjpub3RpZnlPcHRpb24KICAgICAgICAgUU1lbUFycmF5PEhUTUxHZW5lcmljRm9ybUVsZW1l
bnRJbXBsKj4gaXRlbXMgPSBsaXN0SXRlbXMoKTsKICAgICAgICAgdWludCBpOwogICAgICAgICBm
b3IgKGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAgIGlmIChpdGVt
c1tpXS0+aWQoKSA9PSBJRF9PUFRJT04pCisgICAgICAgICAgICBpZiAoaXRlbXNbaV0tPmhhc0xv
Y2FsTmFtZShIVE1MTmFtZXM6Om9wdGlvbigpKSkKICAgICAgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxIVE1MT3B0aW9uRWxlbWVudEltcGwqPihpdGVtc1tpXSktPm1fc2VsZWN0ZWQgPSAoaXRlbXNb
aV0gPT0gc2VsZWN0ZWRPcHRpb24pOwogICAgICAgICB9CiAgICAgfQpAQCAtMzAyOSw3ICszMDE3
LDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudEltcGw6OnNldFNpemUobG9uZwogLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQogCiBIVE1MS2V5Z2VuRWxlbWVudEltcGw6OkhUTUxLZXlnZW5FbGVtZW50SW1w
bChEb2N1bWVudFB0ciogZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsKiBmKQotICAgIDogSFRNTFNl
bGVjdEVsZW1lbnRJbXBsKGRvYywgZikKKyAgICA6IEhUTUxTZWxlY3RFbGVtZW50SW1wbChIVE1M
TmFtZXM6OmtleWdlbigpLCBkb2MsIGYpCiB7CiAgICAgUVN0cmluZ0xpc3Qga2V5cyA9IEtTU0xL
ZXlHZW46OnN1cHBvcnRlZEtleVNpemVzKCk7CiAgICAgZm9yIChRU3RyaW5nTGlzdDo6SXRlcmF0
b3IgaSA9IGtleXMuYmVnaW4oKTsgaSAhPSBrZXlzLmVuZCgpOyArK2kpIHsKQEAgLTMwMzksMTEg
KzMwMjcsNiBAQCBIVE1MS2V5Z2VuRWxlbWVudEltcGw6OkhUTUxLZXlnZW5FbGVtZW50CiAgICAg
fQogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTEtleWdlbkVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIElEX0tFWUdFTjsKLX0KLQogRE9NU3RyaW5nIEhUTUxLZXlnZW5FbGVtZW50
SW1wbDo6dHlwZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuICJrZXlnZW4iOwpAQCAtMzA5OCw3ICsz
MDgxLDcgQEAgYm9vbCBIVE1MS2V5Z2VuRWxlbWVudEltcGw6OmFwcGVuZEZvcm1EYQogLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQogCiBIVE1MT3B0R3JvdXBFbGVtZW50SW1wbDo6SFRNTE9wdEdyb3VwRWxl
bWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgSFRNTEZvcm1FbGVtZW50SW1wbCAqZikKLSAgICA6
IEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKGRvYywgZikKKyAgICA6IEhUTUxHZW5lcmljRm9y
bUVsZW1lbnRJbXBsKEhUTUxOYW1lczo6b3B0Z3JvdXAoKSwgZG9jLCBmKQogewogfQogCkBAIC0z
MTExLDExICszMDk0LDYgQEAgYm9vbCBIVE1MT3B0R3JvdXBFbGVtZW50SW1wbDo6aXNGb2N1c2Fi
bAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxPcHRHcm91cEVsZW1l
bnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX09QVEdST1VQOwotfQotCiBET01T
dHJpbmcgSFRNTE9wdEdyb3VwRWxlbWVudEltcGw6OnR5cGUoKSBjb25zdAogewogICAgIHJldHVy
biAib3B0Z3JvdXAiOwpAQCAtMzE2OSw3ICszMTQ3LDcgQEAgdm9pZCBIVE1MT3B0R3JvdXBFbGVt
ZW50SW1wbDo6cGFyc2VNYXBwZQogdm9pZCBIVE1MT3B0R3JvdXBFbGVtZW50SW1wbDo6cmVjYWxj
U2VsZWN0T3B0aW9ucygpCiB7CiAgICAgTm9kZUltcGwgKnNlbGVjdCA9IHBhcmVudE5vZGUoKTsK
LSAgICB3aGlsZSAoc2VsZWN0ICYmIHNlbGVjdC0+aWQoKSAhPSBJRF9TRUxFQ1QpCisgICAgd2hp
bGUgKHNlbGVjdCAmJiAhc2VsZWN0LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c2VsZWN0KCkpKQog
ICAgICAgICBzZWxlY3QgPSBzZWxlY3QtPnBhcmVudE5vZGUoKTsKICAgICBpZiAoc2VsZWN0KQog
ICAgICAgICBzdGF0aWNfY2FzdDxIVE1MU2VsZWN0RWxlbWVudEltcGwqPihzZWxlY3QpLT5zZXRS
ZWNhbGNMaXN0SXRlbXMoKTsKQEAgLTMxODgsNyArMzE2Niw3IEBAIHZvaWQgSFRNTE9wdEdyb3Vw
RWxlbWVudEltcGw6OnNldExhYmVsKGMKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogSFRNTE9wdGlv
bkVsZW1lbnRJbXBsOjpIVE1MT3B0aW9uRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgSFRN
TEZvcm1FbGVtZW50SW1wbCAqZikKLSAgICA6IEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKGRv
YywgZikKKyAgICA6IEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKEhUTUxOYW1lczo6b3B0aW9u
KCksIGRvYywgZikKIHsKICAgICBtX3NlbGVjdGVkID0gZmFsc2U7CiB9CkBAIC0zMTk4LDExICsz
MTc2LDYgQEAgYm9vbCBIVE1MT3B0aW9uRWxlbWVudEltcGw6OmlzRm9jdXNhYmxlKAogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxPcHRpb25FbGVtZW50SW1wbDo6aWQo
KSBjb25zdAotewotICAgIHJldHVybiBJRF9PUFRJT047Ci19Ci0KIERPTVN0cmluZyBIVE1MT3B0
aW9uRWxlbWVudEltcGw6OnR5cGUoKSBjb25zdAogewogICAgIHJldHVybiAib3B0aW9uIjsKQEAg
LTMyNDksOCArMzIyMiw3IEBAIGxvbmcgSFRNTE9wdGlvbkVsZW1lbnRJbXBsOjppbmRleCgpIGNv
bnMKICAgICBpbnQgbCA9IGl0ZW1zLmNvdW50KCk7CiAgICAgaW50IG9wdGlvbkluZGV4ID0gMDsK
ICAgICBmb3IoaW50IGkgPSAwOyBpIDwgbDsgaSsrKSB7Ci0gICAgICAgIGlmKGl0ZW1zW2ldLT5p
ZCgpID09IElEX09QVElPTikKLSAgICAgICAgeworICAgICAgICBpZiAoaXRlbXNbaV0tPmhhc0xv
Y2FsTmFtZShIVE1MTmFtZXM6Om9wdGlvbigpKSkgewogICAgICAgICAgICAgaWYgKHN0YXRpY19j
YXN0PEhUTUxPcHRpb25FbGVtZW50SW1wbCo+KGl0ZW1zW2ldKSA9PSB0aGlzKQogICAgICAgICAg
ICAgICAgIHJldHVybiBvcHRpb25JbmRleDsKICAgICAgICAgICAgIG9wdGlvbkluZGV4Kys7CkBA
IC0zMzE1LDcgKzMyODcsNyBAQCB2b2lkIEhUTUxPcHRpb25FbGVtZW50SW1wbDo6Y2hpbGRyZW5D
aGFuCiBIVE1MU2VsZWN0RWxlbWVudEltcGwgKkhUTUxPcHRpb25FbGVtZW50SW1wbDo6Z2V0U2Vs
ZWN0KCkgY29uc3QKIHsKICAgICBOb2RlSW1wbCAqc2VsZWN0ID0gcGFyZW50Tm9kZSgpOwotICAg
IHdoaWxlIChzZWxlY3QgJiYgc2VsZWN0LT5pZCgpICE9IElEX1NFTEVDVCkKKyAgICB3aGlsZSAo
c2VsZWN0ICYmICFzZWxlY3QtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzZWxlY3QoKSkpCiAgICAg
ICAgIHNlbGVjdCA9IHNlbGVjdC0+cGFyZW50Tm9kZSgpOwogICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxIVE1MU2VsZWN0RWxlbWVudEltcGwqPihzZWxlY3QpOwogfQpAQCAtMzM0Myw3ICszMzE1LDcg
QEAgdm9pZCBIVE1MT3B0aW9uRWxlbWVudEltcGw6OnNldExhYmVsKGNvbgogLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQogCiBIVE1MVGV4dEFyZWFFbGVtZW50SW1wbDo6SFRNTFRleHRBcmVhRWxlbWVudElt
cGwoRG9jdW1lbnRQdHIgKmRvYywgSFRNTEZvcm1FbGVtZW50SW1wbCAqZikKLSAgICA6IEhUTUxH
ZW5lcmljRm9ybUVsZW1lbnRJbXBsKGRvYywgZiksIG1fdmFsdWVJc1ZhbGlkKGZhbHNlKSwgbV92
YWx1ZU1hdGNoZXNSZW5kZXJlcihmYWxzZSkKKyAgICA6IEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJ
bXBsKEhUTUxOYW1lczo6dGV4dGFyZWEoKSwgZG9jLCBmKSwgbV92YWx1ZUlzVmFsaWQoZmFsc2Up
LCBtX3ZhbHVlTWF0Y2hlc1JlbmRlcmVyKGZhbHNlKQogewogICAgIC8vIERURCByZXF1aXJlcyBy
b3dzICYgY29scyBiZSBzcGVjaWZpZWQsIGJ1dCB3ZSB3aWxsIHByb3ZpZGUgcmVhc29uYWJsZSBk
ZWZhdWx0cwogICAgIG1fcm93cyA9IDI7CkBAIC0zMzU2LDExICszMzI4LDYgQEAgSFRNTFRleHRB
cmVhRWxlbWVudEltcGw6On5IVE1MVGV4dEFyZWFFbAogICAgIGlmIChnZXREb2N1bWVudCgpKSBn
ZXREb2N1bWVudCgpLT5kZXJlZ2lzdGVyTWFpbnRhaW5zU3RhdGUodGhpcyk7CiB9CiAKLU5vZGVJ
bXBsOjpJZCBIVE1MVGV4dEFyZWFFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVy
biBJRF9URVhUQVJFQTsKLX0KLQogRE9NU3RyaW5nIEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBsOjp0
eXBlKCkgY29uc3QKIHsKICAgICByZXR1cm4gInRleHRhcmVhIjsKQEAgLTM1NzYsMTcgKzM1NDMs
MTIgQEAgdm9pZCBIVE1MVGV4dEFyZWFFbGVtZW50SW1wbDo6c2V0Um93cyhsbwogLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQogCiBIVE1MSXNJbmRleEVsZW1lbnRJbXBsOjpIVE1MSXNJbmRleEVsZW1lbnRJ
bXBsKERvY3VtZW50UHRyICpkb2MsIEhUTUxGb3JtRWxlbWVudEltcGwgKmYpCi0gICAgOiBIVE1M
SW5wdXRFbGVtZW50SW1wbChkb2MsIGYpCisgICAgOiBIVE1MSW5wdXRFbGVtZW50SW1wbChIVE1M
TmFtZXM6OmlzaW5kZXgoKSwgZG9jLCBmKQogewogICAgIG1fdHlwZSA9IFRFWFQ7CiAgICAgc2V0
T3ZlcnJpZGVOYW1lKCJpc2luZGV4Iik7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MSXNJbmRleEVs
ZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0lTSU5ERVg7Ci19Ci0KIHZv
aWQgSFRNTElzSW5kZXhFbGVtZW50SW1wbDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0
cmlidXRlSW1wbCogYXR0cikKIHsKICAgICBzd2l0Y2goYXR0ci0+aWQoKSkKSW5kZXg6IGtodG1s
L2h0bWwvaHRtbF9mb3JtaW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJD
b3JlL2todG1sL2h0bWwvaHRtbF9mb3JtaW1wbC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjc0
CmRpZmYgLXUgLXAgLXIxLjc0IGtodG1sL2h0bWwvaHRtbF9mb3JtaW1wbC5oCi0tLSBraHRtbC9o
dG1sL2h0bWxfZm9ybWltcGwuaAkyMCBKdW4gMjAwNSAwNTo1MjoxNiAtMDAwMAkxLjc0CisrKyBr
aHRtbC9odG1sL2h0bWxfZm9ybWltcGwuaAkyMyBKdW4gMjAwNSAwMToxMDo1NSAtMDAwMApAQCAt
NjcsOCArNjcsNiBAQCBwdWJsaWM6CiAgICAgSFRNTEZvcm1FbGVtZW50SW1wbChEb2N1bWVudFB0
ciAqZG9jKTsKICAgICB2aXJ0dWFsIH5IVE1MRm9ybUVsZW1lbnRJbXBsKCk7CiAKLSAgICB2aXJ0
dWFsIElkIGlkKCkgY29uc3Q7Ci0KICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoKCk7CiAgICAgdmly
dHVhbCB2b2lkIGRldGFjaCgpOwogCkBAIC0xNjEsNyArMTU5LDcgQEAgY2xhc3MgSFRNTEdlbmVy
aWNGb3JtRWxlbWVudEltcGwgOiBwdWJsaQogICAgIGZyaWVuZCBjbGFzcyBraHRtbDo6UmVuZGVy
Rm9ybUVsZW1lbnQ7CiAKIHB1YmxpYzoKLSAgICBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbChE
b2N1bWVudFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmID0gMCk7CisgICAgSFRNTEdl
bmVyaWNGb3JtRWxlbWVudEltcGwoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1l
bnRQdHIgKmRvYywgSFRNTEZvcm1FbGVtZW50SW1wbCAqZiA9IDApOwogICAgIHZpcnR1YWwgfkhU
TUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKCk7CiAKICAgICBIVE1MRm9ybUVsZW1lbnRJbXBsICpm
b3JtKCkgeyByZXR1cm4gbV9mb3JtOyB9CkBAIC0yNDQsNyArMjQyLDYgQEAgcHVibGljOgogICAg
ICAgICBCVVRUT04KICAgICB9OwogCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwogICAgIERP
TVN0cmluZyB0eXBlKCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRy
aWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqYXR0cik7CkBAIC0yODIsOCArMjc5LDYgQEAgcHVi
bGljOgogICAgIEhUTUxGaWVsZFNldEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIEhUTUxG
b3JtRWxlbWVudEltcGwgKmYgPSAwKTsKIAogICAgIHZpcnR1YWwgfkhUTUxGaWVsZFNldEVsZW1l
bnRJbXBsKCk7Ci0KLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CiAgICAgCiAgICAgdmlydHVh
bCBib29sIGlzRm9jdXNhYmxlKCkgY29uc3Q7CiAgICAgCkBAIC0zMjYsOSArMzIxLDEwIEBAIHB1
YmxpYzoKICAgICB9OwogCiAgICAgSFRNTElucHV0RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRv
YywgSFRNTEZvcm1FbGVtZW50SW1wbCAqZiA9IDApOworICAgIEhUTUxJbnB1dEVsZW1lbnRJbXBs
KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50UHRyICpkb2MsIEhUTUxGb3Jt
RWxlbWVudEltcGwgKmYgPSAwKTsKICAgICB2aXJ0dWFsIH5IVE1MSW5wdXRFbGVtZW50SW1wbCgp
OwogCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OworICAgIHZvaWQgaW5pdCgpOwogCiAgICAg
dmlydHVhbCBib29sIGlzRW51bWVyYXRhYmxlKCkgY29uc3QgeyByZXR1cm4gaW5wdXRUeXBlKCkg
IT0gSU1BR0U7IH0KIApAQCAtNDUyLDggKzQ0OCw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5I
VE1MTGFiZWxFbGVtZW50SW1wbCgpOwogCiAgICAgdmlydHVhbCBib29sIGlzRm9jdXNhYmxlKCkg
Y29uc3Q7Ci0gICAgCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwogCiAgICAgdmlydHVhbCB2
b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIpOwogCkBA
IC00ODgsNyArNDgyLDYgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBib29sIGlzRm9jdXNhYmxl
KCkgY29uc3Q7CiAgICAgCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwogICAgIHZpcnR1YWwg
a2h0bWw6OlJlbmRlck9iamVjdCAqY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEgKiwga2h0bWw6
OlJlbmRlclN0eWxlICopOwogCiAgICAgdmlydHVhbCBET01TdHJpbmcgdHlwZSgpIGNvbnN0OwpA
QCAtNTE3LDkgKzUxMCwxMSBAQCBjbGFzcyBIVE1MU2VsZWN0RWxlbWVudEltcGwgOiBwdWJsaWMg
SFRNCiAKIHB1YmxpYzoKICAgICBIVE1MU2VsZWN0RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRv
YywgSFRNTEZvcm1FbGVtZW50SW1wbCAqZiA9IDApOworICAgIEhUTUxTZWxlY3RFbGVtZW50SW1w
bChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudFB0ciAqZG9jLCBIVE1MRm9y
bUVsZW1lbnRJbXBsICpmID0gMCk7CiAgICAgfkhUTUxTZWxlY3RFbGVtZW50SW1wbCgpOwogCi0g
ICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OworICAgIHZvaWQgaW5pdCgpOworCiAgICAgRE9NU3Ry
aW5nIHR5cGUoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9pZCByZWNhbGNTdHlsZSggU3R5bGVD
aGFuZ2UgKTsKQEAgLTYwNiw4ICs2MDEsNiBAQCBjbGFzcyBIVE1MS2V5Z2VuRWxlbWVudEltcGwg
OiBwdWJsaWMgSFRNCiBwdWJsaWM6CiAgICAgSFRNTEtleWdlbkVsZW1lbnRJbXBsKERvY3VtZW50
UHRyICpkb2MsIEhUTUxGb3JtRWxlbWVudEltcGwgKmYgPSAwKTsKIAotICAgIHZpcnR1YWwgSWQg
aWQoKSBjb25zdDsKLQogICAgIERPTVN0cmluZyB0eXBlKCkgY29uc3Q7CiAKICAgICAvLyAjIyMg
dGhpcyBpcyBqdXN0IGEgcm91Z2ggZ3Vlc3MKQEAgLTYyOCw3ICs2MjEsNiBAQCBwdWJsaWM6CiAg
ICAgSFRNTE9wdEdyb3VwRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgSFRNTEZvcm1FbGVt
ZW50SW1wbCAqZiA9IDApOwogICAgIHZpcnR1YWwgfkhUTUxPcHRHcm91cEVsZW1lbnRJbXBsKCk7
CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CiAgICAgRE9NU3RyaW5nIHR5cGUoKSBjb25z
dDsKIAogICAgIHZpcnR1YWwgYm9vbCBpc0ZvY3VzYWJsZSgpIGNvbnN0OwpAQCAtNjU3LDggKzY0
OSw3IEBAIHB1YmxpYzoKICAgICBIVE1MT3B0aW9uRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRv
YywgSFRNTEZvcm1FbGVtZW50SW1wbCAqZiA9IDApOwogCiAgICAgdmlydHVhbCBib29sIGlzRm9j
dXNhYmxlKCkgY29uc3Q7Ci0gICAgCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OworCiAgICAg
RE9NU3RyaW5nIHR5cGUoKSBjb25zdDsKIAogICAgIERPTVN0cmluZyB0ZXh0KCkgY29uc3Q7CkBA
IC03MDYsOCArNjk3LDYgQEAgcHVibGljOgogICAgIEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBsKERv
Y3VtZW50UHRyICpkb2MsIEhUTUxGb3JtRWxlbWVudEltcGwgKmYgPSAwKTsKICAgICB+SFRNTFRl
eHRBcmVhRWxlbWVudEltcGwoKTsKIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKLQogICAg
IGxvbmcgY29scygpIGNvbnN0IHsgcmV0dXJuIG1fY29sczsgfQogCiAgICAgbG9uZyByb3dzKCkg
Y29uc3QgeyByZXR1cm4gbV9yb3dzOyB9CkBAIC03NzAsOCArNzU5LDYgQEAgY2xhc3MgSFRNTElz
SW5kZXhFbGVtZW50SW1wbCA6IHB1YmxpYyBIVAogcHVibGljOgogICAgIEhUTUxJc0luZGV4RWxl
bWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgSFRNTEZvcm1FbGVtZW50SW1wbCAqZiA9IDApOwog
Ci0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwotCiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFw
cGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIpOwogCiAgICAgRE9NU3RyaW5n
IHByb21wdCgpIGNvbnN0OwpJbmRleDoga2h0bWwvaHRtbC9odG1sX2hlYWRpbXBsLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfaGVhZGlt
cGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjUwCmRpZmYgLXUgLXAgLXIxLjUwIGtodG1s
L2h0bWwvaHRtbF9oZWFkaW1wbC5jcHAKLS0tIGtodG1sL2h0bWwvaHRtbF9oZWFkaW1wbC5jcHAJ
MjIgSnVuIDIwMDUgMTg6MjI6MDEgLTAwMDAJMS41MAorKysga2h0bWwvaHRtbC9odG1sX2hlYWRp
bXBsLmNwcAkyMyBKdW4gMjAwNSAwMToxMDo1NiAtMDAwMApAQCAtNDYsNyArNDYsNyBAQCB1c2lu
ZyBuYW1lc3BhY2UgRE9NOwogdXNpbmcgbmFtZXNwYWNlIGtodG1sOwogCiBIVE1MQmFzZUVsZW1l
bnRJbXBsOjpIVE1MQmFzZUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0gICAgOiBIVE1M
RWxlbWVudEltcGwoZG9jKQorICAgIDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6YmFzZSgp
LCBkb2MpCiB7CiB9CiAKQEAgLTU0LDExICs1NCw2IEBAIEhUTUxCYXNlRWxlbWVudEltcGw6On5I
VE1MQmFzZUVsZW1lbnRJbXAKIHsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxCYXNlRWxlbWVudElt
cGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfQkFTRTsKLX0KLQogdm9pZCBIVE1MQmFz
ZUVsZW1lbnRJbXBsOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICph
dHRyKQogewogICAgIHN3aXRjaChhdHRyLT5pZCgpKQpAQCAtMTE5LDcgKzExNCw3IEBAIHZvaWQg
SFRNTEJhc2VFbGVtZW50SW1wbDo6c2V0VGFyZ2V0KGNvbnMKIC8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
IAogSFRNTExpbmtFbGVtZW50SW1wbDo6SFRNTExpbmtFbGVtZW50SW1wbChEb2N1bWVudFB0ciAq
ZG9jKQotICAgIDogSFRNTEVsZW1lbnRJbXBsKGRvYykKKyAgICA6IEhUTUxFbGVtZW50SW1wbChI
VE1MTmFtZXM6OmxpbmsoKSwgZG9jKQogewogICAgIG1fc2hlZXQgPSAwOwogICAgIG1fbG9hZGlu
ZyA9IGZhbHNlOwpAQCAtMTM0LDExICsxMjksNiBAQCBIVE1MTGlua0VsZW1lbnRJbXBsOjp+SFRN
TExpbmtFbGVtZW50SW1wCiAgICAgaWYobV9jYWNoZWRTaGVldCkgbV9jYWNoZWRTaGVldC0+ZGVy
ZWYodGhpcyk7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MTGlua0VsZW1lbnRJbXBsOjppZCgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIElEX0xJTks7Ci19Ci0KIHZvaWQgSFRNTExpbmtFbGVtZW50SW1w
bDo6c2V0RGlzYWJsZWRTdGF0ZShib29sIF9kaXNhYmxlZCkKIHsKICAgICBpbnQgb2xkRGlzYWJs
ZWRTdGF0ZSA9IG1fZGlzYWJsZWRTdGF0ZTsKQEAgLTQyMyw3ICs0MTMsNyBAQCB2b2lkIEhUTUxM
aW5rRWxlbWVudEltcGw6OnNldFR5cGUoY29uc3QgCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAot
SFRNTE1ldGFFbGVtZW50SW1wbDo6SFRNTE1ldGFFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9j
KSA6IEhUTUxFbGVtZW50SW1wbChkb2MpCitIVE1MTWV0YUVsZW1lbnRJbXBsOjpIVE1MTWV0YUVs
ZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpIDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6
bWV0YSgpLCBkb2MpCiB7CiB9CiAKQEAgLTQzMSwxMSArNDIxLDYgQEAgSFRNTE1ldGFFbGVtZW50
SW1wbDo6fkhUTUxNZXRhRWxlbWVudEltcAogewogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTE1ldGFF
bGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9NRVRBOwotfQotCiB2b2lk
IEhUTUxNZXRhRWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0
ZUltcGwgKmF0dHIpCiB7CiAgICAgc3dpdGNoKGF0dHItPmlkKCkpCkBAIC01MTIsNyArNDk3LDcg
QEAgdm9pZCBIVE1MTWV0YUVsZW1lbnRJbXBsOjpzZXRTY2hlbWUoY29ucwogLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQogCiBIVE1MU2NyaXB0RWxlbWVudEltcGw6OkhUTUxTY3JpcHRFbGVtZW50SW1wbChE
b2N1bWVudFB0ciAqZG9jKQotICAgIDogSFRNTEVsZW1lbnRJbXBsKGRvYyksIG1fY2FjaGVkU2Ny
aXB0KDApLCBtX2NyZWF0ZWRCeVBhcnNlcihmYWxzZSksIG1fZXZhbHVhdGVkKGZhbHNlKQorICAg
IDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6c2NyaXB0KCksIGRvYyksIG1fY2FjaGVkU2Ny
aXB0KDApLCBtX2NyZWF0ZWRCeVBhcnNlcihmYWxzZSksIG1fZXZhbHVhdGVkKGZhbHNlKQogewog
fQogCkBAIC01MjIsMTEgKzUwNyw2IEBAIEhUTUxTY3JpcHRFbGVtZW50SW1wbDo6fkhUTUxTY3Jp
cHRFbGVtZW4KICAgICAgICAgbV9jYWNoZWRTY3JpcHQtPmRlcmVmKHRoaXMpOwogfQogCi1Ob2Rl
SW1wbDo6SWQgSFRNTFNjcmlwdEVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IElEX1NDUklQVDsKLX0KLQogYm9vbCBIVE1MU2NyaXB0RWxlbWVudEltcGw6OmlzVVJMQXR0cmli
dXRlKEF0dHJpYnV0ZUltcGwgKmF0dHIpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGF0dHItPmlkKCkg
PT0gQVRUUl9TUkM7CkBAIC02OTcsNyArNjc3LDcgQEAgdm9pZCBIVE1MU2NyaXB0RWxlbWVudElt
cGw6OnNldFR5cGUoY29ucwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUhUTUxTdHlsZUVsZW1l
bnRJbXBsOjpIVE1MU3R5bGVFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKSA6IEhUTUxFbGVt
ZW50SW1wbChkb2MpCitIVE1MU3R5bGVFbGVtZW50SW1wbDo6SFRNTFN0eWxlRWxlbWVudEltcGwo
RG9jdW1lbnRQdHIgKmRvYykgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjpzdHlsZSgpLCBk
b2MpCiB7CiAgICAgbV9zaGVldCA9IDA7CiAgICAgbV9sb2FkaW5nID0gZmFsc2U7CkBAIC03MDgs
MTEgKzY4OCw2IEBAIEhUTUxTdHlsZUVsZW1lbnRJbXBsOjp+SFRNTFN0eWxlRWxlbWVudEkKICAg
ICBpZihtX3NoZWV0KSBtX3NoZWV0LT5kZXJlZigpOwogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTFN0
eWxlRWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfU1RZTEU7Ci19Ci0K
IC8vIG90aGVyIHN0dWZmLi4uCiB2b2lkIEhUTUxTdHlsZUVsZW1lbnRJbXBsOjpwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICphdHRyKQogewpAQCAtODI0LDcgKzc5OSw3
IEBAIHZvaWQgSFRNTFN0eWxlRWxlbWVudEltcGw6OnNldFR5cGUoY29uc3QKIC8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KIAogSFRNTFRpdGxlRWxlbWVudEltcGw6OkhUTUxUaXRsZUVsZW1lbnRJbXBsKERv
Y3VtZW50UHRyICpkb2MpCi0gICAgOiBIVE1MRWxlbWVudEltcGwoZG9jKSwgbV90aXRsZSgiIikK
KyAgICA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6OnRpdGxlKCksIGRvYyksIG1fdGl0bGUo
IiIpCiB7CiB9CiAKQEAgLTgzMiwxMSArODA3LDYgQEAgSFRNTFRpdGxlRWxlbWVudEltcGw6On5I
VE1MVGl0bGVFbGVtZW50SQogewogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTFRpdGxlRWxlbWVudElt
cGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfVElUTEU7Ci19Ci0KIHZvaWQgSFRNTFRp
dGxlRWxlbWVudEltcGw6Omluc2VydGVkSW50b0RvY3VtZW50KCkKIHsKICAgICBIVE1MRWxlbWVu
dEltcGw6Omluc2VydGVkSW50b0RvY3VtZW50KCk7CkluZGV4OiBraHRtbC9odG1sL2h0bWxfaGVh
ZGltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9odG1s
L2h0bWxfaGVhZGltcGwuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yMApkaWZmIC11IC1wIC1y
MS4yMCBraHRtbC9odG1sL2h0bWxfaGVhZGltcGwuaAotLS0ga2h0bWwvaHRtbC9odG1sX2hlYWRp
bXBsLmgJMTkgSnVuIDIwMDUgMDU6NDQ6MjggLTAwMDAJMS4yMAorKysga2h0bWwvaHRtbC9odG1s
X2hlYWRpbXBsLmgJMjMgSnVuIDIwMDUgMDE6MTA6NTYgLTAwMDAKQEAgLTUyLDcgKzUyLDYgQEAg
cHVibGljOgogICAgIERPTVN0cmluZyBocmVmKCkgY29uc3QgeyByZXR1cm4gbV9ocmVmOyB9CiAg
ICAgRE9NU3RyaW5nIHRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0OyB9CiAKLSAgICB2
aXJ0dWFsIElkIGlkKCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmli
dXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIpOwogICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRl
ZEludG9Eb2N1bWVudCgpOwogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkRnJvbURvY3VtZW50KCk7
CkBAIC03Nyw4ICs3Niw2IEBAIHB1YmxpYzoKICAgICBIVE1MTGlua0VsZW1lbnRJbXBsKERvY3Vt
ZW50UHRyICpkb2MpOwogICAgIH5IVE1MTGlua0VsZW1lbnRJbXBsKCk7CiAKLSAgICB2aXJ0dWFs
IElkIGlkKCkgY29uc3Q7Ci0KICAgICBib29sIGRpc2FibGVkKCkgY29uc3Q7CiAgICAgdm9pZCBz
ZXREaXNhYmxlZChib29sKTsKIApAQCAtMTU1LDcgKzE1Miw2IEBAIHB1YmxpYzoKIAogICAgIH5I
VE1MTWV0YUVsZW1lbnRJbXBsKCk7CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CiAgICAg
dmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0
dHIpOwogICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9Eb2N1bWVudCgpOwogCkBAIC0xODks
OSArMTg1LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9Eb2N1bWVu
dCgpOwogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkRnJvbURvY3VtZW50KCk7CiAgICAgdmlydHVh
bCB2b2lkIG5vdGlmeUZpbmlzaGVkKGtodG1sOjpDYWNoZWRPYmplY3QgKmZpbmlzaGVkT2JqKTsK
KwogICAgIHZpcnR1YWwgdm9pZCBjaGlsZHJlbkNoYW5nZWQoKTsKLSAgICAKLSAgICB2aXJ0dWFs
IElkIGlkKCkgY29uc3Q7CisKICAgICB2aXJ0dWFsIGJvb2wgaXNVUkxBdHRyaWJ1dGUoQXR0cmli
dXRlSW1wbCAqYXR0cikgY29uc3Q7CiAKICAgICB2b2lkIHNldENyZWF0ZWRCeVBhcnNlcihib29s
IGNyZWF0ZWRCeVBhcnNlcikgeyBtX2NyZWF0ZWRCeVBhcnNlciA9IGNyZWF0ZWRCeVBhcnNlcjsg
fQpAQCAtMjMzLDggKzIyOSw2IEBAIHB1YmxpYzoKICAgICBIVE1MU3R5bGVFbGVtZW50SW1wbChE
b2N1bWVudFB0ciAqZG9jKTsKICAgICB+SFRNTFN0eWxlRWxlbWVudEltcGwoKTsKIAotICAgIHZp
cnR1YWwgSWQgaWQoKSBjb25zdDsKLQogICAgIFN0eWxlU2hlZXRJbXBsICpzaGVldCgpIGNvbnN0
IHsgcmV0dXJuIG1fc2hlZXQ7IH0KIAogICAgIC8vIG92ZXJsb2FkIGZyb20gSFRNTEVsZW1lbnRJ
bXBsCkBAIC0yNzEsOCArMjY1LDYgQEAgcHVibGljOgogCiAgICAgfkhUTUxUaXRsZUVsZW1lbnRJ
bXBsKCk7CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7Ci0KICAgICB2aXJ0dWFsIHZvaWQg
aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlZEZyb21Eb2N1
bWVudCgpOwogICAgIHZpcnR1YWwgdm9pZCBjaGlsZHJlbkNoYW5nZWQoKTsKSW5kZXg6IGtodG1s
L2h0bWwvaHRtbF9pbWFnZWltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9X
ZWJDb3JlL2todG1sL2h0bWwvaHRtbF9pbWFnZWltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjQzCmRpZmYgLXUgLXAgLXIxLjQzIGtodG1sL2h0bWwvaHRtbF9pbWFnZWltcGwuY3BwCi0t
LSBraHRtbC9odG1sL2h0bWxfaW1hZ2VpbXBsLmNwcAkyMSBKdW4gMjAwNSAyMjoyNzo1NSAtMDAw
MAkxLjQzCisrKyBraHRtbC9odG1sL2h0bWxfaW1hZ2VpbXBsLmNwcAkyMyBKdW4gMjAwNSAwMTox
MDo1NyAtMDAwMApAQCAtNTEsNyArNTEsNyBAQAogdXNpbmcgbmFtZXNwYWNlIERPTTsKIHVzaW5n
IG5hbWVzcGFjZSBraHRtbDsKIAotLy8jZGVmaW5lIElOU1RSVU1FTlRfTEFZT1VUX1NDSEVEVUxJ
TkcgMQorLy8gI2RlZmluZSBJTlNUUlVNRU5UX0xBWU9VVF9TQ0hFRFVMSU5HIDEKIAogSFRNTElt
YWdlTG9hZGVyOjpIVE1MSW1hZ2VMb2FkZXIoRWxlbWVudEltcGwqIGVsdCkKIDptX2VsZW1lbnQo
ZWx0KSwgbV9pbWFnZSgwKSwgbV9maXJlZExvYWQodHJ1ZSksIG1faW1hZ2VDb21wbGV0ZSh0cnVl
KQpAQCAtNzUsNyArNzUsNyBAQCB2b2lkIEhUTUxJbWFnZUxvYWRlcjo6dXBkYXRlRnJvbUVsZW1l
bnQoCiAgICAgICAgIHJldHVybjsKIAogICAgIEF0b21pY1N0cmluZyBhdHRyOwotICAgIGlmIChl
bGVtZW50KCktPmlkKCkgPT0gSURfT0JKRUNUKQorICAgIGlmIChlbGVtZW50KCktPmhhc0xvY2Fs
TmFtZShIVE1MTmFtZXM6Om9iamVjdCgpKSkKICAgICAgICAgYXR0ciA9IGVsZW1lbnQoKS0+Z2V0
QXR0cmlidXRlKEFUVFJfREFUQSk7CiAgICAgZWxzZQogICAgICAgICBhdHRyID0gZWxlbWVudCgp
LT5nZXRBdHRyaWJ1dGUoQVRUUl9TUkMpOwpAQCAtODYsNiArODYsMTAgQEAgdm9pZCBIVE1MSW1h
Z2VMb2FkZXI6OnVwZGF0ZUZyb21FbGVtZW50KAogICAgICAgICBuZXdJbWFnZSA9IGVsZW1lbnQo
KS0+Z2V0RG9jdW1lbnQoKS0+ZG9jTG9hZGVyKCktPnJlcXVlc3RJbWFnZShraHRtbDo6cGFyc2VV
UkwoYXR0cikpOwogCiAgICAgaWYgKG5ld0ltYWdlICE9IG1faW1hZ2UpIHsKKyNpZmRlZiBJTlNU
UlVNRU5UX0xBWU9VVF9TQ0hFRFVMSU5HCisgICAgICAgIGlmICghZG9jdW1lbnQtPm93bmVyRWxl
bWVudCgpICYmIG5ld0ltYWdlKQorICAgICAgICAgICAgcHJpbnRmKCJJbWFnZSByZXF1ZXN0ZWQg
YXQgJWRcbiIsIGVsZW1lbnQoKS0+Z2V0RG9jdW1lbnQoKS0+ZWxhcHNlZFRpbWUoKSk7CisjZW5k
aWYKICAgICAgICAgbV9maXJlZExvYWQgPSBmYWxzZTsKICAgICAgICAgbV9pbWFnZUNvbXBsZXRl
ID0gZmFsc2U7CiAgICAgICAgIENhY2hlZEltYWdlKiBvbGRJbWFnZSA9IG1faW1hZ2U7CkBAIC0x
MzMsNyArMTM3LDcgQEAgdm9pZCBIVE1MSW1hZ2VMb2FkZXI6Om5vdGlmeUZpbmlzaGVkKENhYwog
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MSW1hZ2VFbGVtZW50SW1wbDo6SFRNTEltYWdlRWxl
bWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgSFRNTEZvcm1FbGVtZW50SW1wbCAqZikKLSAgICA6
IEhUTUxFbGVtZW50SW1wbChkb2MpLCBtX2ltYWdlTG9hZGVyKHRoaXMpLCBpc21hcChmYWxzZSks
IG1fZm9ybShmKQorICAgIDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6aW1nKCksIGRvYyks
IG1faW1hZ2VMb2FkZXIodGhpcyksIGlzbWFwKGZhbHNlKSwgbV9mb3JtKGYpCiB7CiAgICAgaWYg
KG1fZm9ybSkKICAgICAgICAgbV9mb3JtLT5yZWdpc3RlckltZ0VsZW1lbnQodGhpcyk7CkBAIC0x
NDUsMTEgKzE0OSw2IEBAIEhUTUxJbWFnZUVsZW1lbnRJbXBsOjp+SFRNTEltYWdlRWxlbWVudEkK
ICAgICAgICAgbV9mb3JtLT5yZW1vdmVJbWdFbGVtZW50KHRoaXMpOwogfQogCi1Ob2RlSW1wbDo6
SWQgSFRNTEltYWdlRWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfSU1H
OwotfQotCiBib29sIEhUTUxJbWFnZUVsZW1lbnRJbXBsOjptYXBUb0VudHJ5KE5vZGVJbXBsOjpJ
ZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdAogewogICAgIHN3aXRj
aChhdHRyKQpAQCAtNTI4LDcgKzUyNyw3IEBAIGxvbmcgSFRNTEltYWdlRWxlbWVudEltcGw6Onko
KSBjb25zdAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MTWFwRWxlbWVudEltcGw6OkhUTUxN
YXBFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAgIDogSFRNTEVsZW1lbnRJbXBsKGRv
YykKKyAgICA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6Om1hcCgpLCBkb2MpCiB7CiB9CiAK
QEAgLTUzOCwxMSArNTM3LDYgQEAgSFRNTE1hcEVsZW1lbnRJbXBsOjp+SFRNTE1hcEVsZW1lbnRJ
bXBsKAogICAgICAgICBnZXREb2N1bWVudCgpLT5yZW1vdmVJbWFnZU1hcCh0aGlzKTsKIH0KIAot
Tm9kZUltcGw6OklkIEhUTUxNYXBFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVy
biBJRF9NQVA7Ci19Ci0KIGJvb2wKIEhUTUxNYXBFbGVtZW50SW1wbDo6bWFwTW91c2VFdmVudChp
bnQgeF8sIGludCB5XywgaW50IHdpZHRoXywgaW50IGhlaWdodF8sCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUmVuZGVyT2JqZWN0OjpOb2RlSW5mbyYgaW5mbykKQEAgLTU1Miwz
MiArNTQ2LDI4IEBAIEhUTUxNYXBFbGVtZW50SW1wbDo6bWFwTW91c2VFdmVudChpbnQgeF8KICAg
ICBRUHRyU3RhY2s8Tm9kZUltcGw+IG5vZGVTdGFjazsKIAogICAgIE5vZGVJbXBsICpjdXJyZW50
ID0gZmlyc3RDaGlsZCgpOwotICAgIHdoaWxlKDEpCi0gICAgewotICAgICAgICBpZighY3VycmVu
dCkKLSAgICAgICAgeworICAgIHdoaWxlICgxKSB7CisgICAgICAgIGlmICghY3VycmVudCkgewog
ICAgICAgICAgICAgaWYobm9kZVN0YWNrLmlzRW1wdHkoKSkgYnJlYWs7CiAgICAgICAgICAgICBj
dXJyZW50ID0gbm9kZVN0YWNrLnBvcCgpOwogICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQt
Pm5leHRTaWJsaW5nKCk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAg
ICBpZihjdXJyZW50LT5pZCgpPT1JRF9BUkVBKQotICAgICAgICB7CisgICAgICAgIAorICAgICAg
ICBpZiAoY3VycmVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmFyZWEoKSkpIHsKICAgICAgICAg
ICAgIC8vY291dCA8PCAiYXJlYSBmb3VuZCAiIDw8IGVuZGw7Ci0gICAgICAgICAgICBIVE1MQXJl
YUVsZW1lbnRJbXBsKiBhcmVhPXN0YXRpY19jYXN0PEhUTUxBcmVhRWxlbWVudEltcGwqPihjdXJy
ZW50KTsKKyAgICAgICAgICAgIEhUTUxBcmVhRWxlbWVudEltcGwqIGFyZWEgPSBzdGF0aWNfY2Fz
dDxIVE1MQXJlYUVsZW1lbnRJbXBsKj4oY3VycmVudCk7CiAgICAgICAgICAgICBpZiAoYXJlYS0+
bWFwTW91c2VFdmVudCh4Xyx5Xyx3aWR0aF8saGVpZ2h0XywgaW5mbykpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIE5vZGVJbXBsICpj
aGlsZCA9IGN1cnJlbnQtPmZpcnN0Q2hpbGQoKTsKLSAgICAgICAgaWYoY2hpbGQpCi0gICAgICAg
IHsKKyAgICAgICAgaWYgKGNoaWxkKSB7CiAgICAgICAgICAgICBub2RlU3RhY2sucHVzaChjdXJy
ZW50KTsKICAgICAgICAgICAgIGN1cnJlbnQgPSBjaGlsZDsKICAgICAgICAgfQogICAgICAgICBl
bHNlCi0gICAgICAgIHsKICAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0U2libGlu
ZygpOwotICAgICAgICB9CiAgICAgfQogCiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNjM1LDExICs2
MjUsNiBAQCBIVE1MQXJlYUVsZW1lbnRJbXBsOjp+SFRNTEFyZWFFbGVtZW50SW1wCiAgICAgaWYg
KG1fY29vcmRzKSBkZWxldGUgW10gbV9jb29yZHM7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MQXJl
YUVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0FSRUE7Ci19Ci0KIHZv
aWQgSFRNTEFyZWFFbGVtZW50SW1wbDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmli
dXRlSW1wbCAqYXR0cikKIHsKICAgICBzd2l0Y2ggKGF0dHItPmlkKCkpCkluZGV4OiBraHRtbC9o
dG1sL2h0bWxfaW1hZ2VpbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNv
cmUva2h0bWwvaHRtbC9odG1sX2ltYWdlaW1wbC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIx
CmRpZmYgLXUgLXAgLXIxLjIxIGtodG1sL2h0bWwvaHRtbF9pbWFnZWltcGwuaAotLS0ga2h0bWwv
aHRtbC9odG1sX2ltYWdlaW1wbC5oCTExIE1heSAyMDA1IDA1OjQ5OjM0IC0wMDAwCTEuMjEKKysr
IGtodG1sL2h0bWwvaHRtbF9pbWFnZWltcGwuaAkyMyBKdW4gMjAwNSAwMToxMDo1NyAtMDAwMApA
QCAtNzcsOCArNzcsNiBAQCBwdWJsaWM6CiAgICAgSFRNTEltYWdlRWxlbWVudEltcGwoRG9jdW1l
bnRQdHIgKmRvYywgSFRNTEZvcm1FbGVtZW50SW1wbCAqZiA9IDApOwogICAgIH5IVE1MSW1hZ2VF
bGVtZW50SW1wbCgpOwogCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwotCiAgICAgdmlydHVh
bCBib29sIG1hcFRvRW50cnkoTm9kZUltcGw6OklkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5
JiByZXN1bHQpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShN
YXBwZWRBdHRyaWJ1dGVJbXBsICopOwogCkBAIC0xNjEsOCArMTU5LDYgQEAgcHVibGljOgogICAg
IEhUTUxBcmVhRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYyk7CiAgICAgfkhUTUxBcmVhRWxl
bWVudEltcGwoKTsKIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKLQogICAgIHZpcnR1YWwg
dm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICphdHRyKTsKIAog
ICAgIGJvb2wgaXNEZWZhdWx0KCkgY29uc3QgeyByZXR1cm4gbV9zaGFwZSA9PSBEZWZhdWx0OyB9
CkBAIC0yMTIsMTEgKzIwOCw4IEBAIGNsYXNzIEhUTUxNYXBFbGVtZW50SW1wbCA6IHB1YmxpYyBI
VE1MRWwKIHsKIHB1YmxpYzoKICAgICBIVE1MTWFwRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRv
Yyk7Ci0KICAgICB+SFRNTE1hcEVsZW1lbnRJbXBsKCk7CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkg
Y29uc3Q7Ci0KICAgICB2aXJ0dWFsIERPTVN0cmluZyBnZXROYW1lKCkgY29uc3QgeyByZXR1cm4g
bV9uYW1lOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVk
QXR0cmlidXRlSW1wbCAqYXR0cik7CkluZGV4OiBraHRtbC9odG1sL2h0bWxfaW5saW5laW1wbC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1s
X2lubGluZWltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjQyCmRpZmYgLXUgLXAgLXIx
LjQyIGtodG1sL2h0bWwvaHRtbF9pbmxpbmVpbXBsLmNwcAotLS0ga2h0bWwvaHRtbC9odG1sX2lu
bGluZWltcGwuY3BwCTExIE1heSAyMDA1IDA1OjQ5OjM0IC0wMDAwCTEuNDIKKysrIGtodG1sL2h0
bWwvaHRtbF9pbmxpbmVpbXBsLmNwcAkyMyBKdW4gMjAwNSAwMToxMDo1NyAtMDAwMApAQCAtNDUs
NyArNDUsNyBAQCB1c2luZyBuYW1lc3BhY2Uga2h0bWw7CiBuYW1lc3BhY2UgRE9NIHsKIAogSFRN
TEFuY2hvckVsZW1lbnRJbXBsOjpIVE1MQW5jaG9yRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRv
YykKLSAgICA6IEhUTUxFbGVtZW50SW1wbChkb2MpCisgICAgOiBIVE1MRWxlbWVudEltcGwoSFRN
TE5hbWVzOjphKCksIGRvYykKIHsKICAgICBtX2hhc1RhcmdldCA9IGZhbHNlOwogfQpAQCAtMTA0
LDExICsxMDQsNiBAQCBib29sIEhUTUxBbmNob3JFbGVtZW50SW1wbDo6aXNLZXlib2FyZEZvCiAg
ICAgcmV0dXJuIGdldERvY3VtZW50KCktPnBhcnQoKS0+dGFic1RvTGlua3MoKTsKIH0KIAotTm9k
ZUltcGw6OklkIEhUTUxBbmNob3JFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVy
biBJRF9BOwotfQotCiB2b2lkIEhUTUxBbmNob3JFbGVtZW50SW1wbDo6ZGVmYXVsdEV2ZW50SGFu
ZGxlcihFdmVudEltcGwgKmV2dCkKIHsKICAgICAvLyBSZWFjdCBvbiBjbGlja3MgYW5kIG9uIGtl
eXByZXNzZXMuCkBAIC0xNTIsNyArMTQ3LDcgQEAgdm9pZCBIVE1MQW5jaG9yRWxlbWVudEltcGw6
OmRlZmF1bHRFdmVudAogICAgICAgICBpZiAoIGUgJiYgZS0+YnV0dG9uKCkgPT0gMSApCiAgICAg
ICAgICAgICB1dGFyZ2V0ID0gIl9ibGFuayI7CiAKLSAgICAgICAgaWYgKCBldnQtPnRhcmdldCgp
LT5pZCgpID09IElEX0lNRyApIHsKKyAgICAgICAgaWYgKGV2dC0+dGFyZ2V0KCktPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjppbWcoKSkpIHsKICAgICAgICAgICAgIEhUTUxJbWFnZUVsZW1lbnRJbXBs
KiBpbWcgPSBzdGF0aWNfY2FzdDxIVE1MSW1hZ2VFbGVtZW50SW1wbCo+KCBldnQtPnRhcmdldCgp
ICk7CiAgICAgICAgICAgICBpZiAoIGltZyAmJiBpbWctPmlzU2VydmVyTWFwKCkgKQogICAgICAg
ICAgICAgewpAQCAtMzgyLDcgKzM3Nyw3IEBAIHZvaWQgSFRNTEFuY2hvckVsZW1lbnRJbXBsOjpm
b2N1cygpCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSFRNTEJSRWxlbWVudEltcGw6OkhUTUxC
UkVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpIDogSFRNTEVsZW1lbnRJbXBsKGRvYykKK0hU
TUxCUkVsZW1lbnRJbXBsOjpIVE1MQlJFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKSA6IEhU
TUxFbGVtZW50SW1wbChIVE1MTmFtZXM6OmJyKCksIGRvYykKIHsKIH0KIApAQCAtMzkwLDExICsz
ODUsNiBAQCBIVE1MQlJFbGVtZW50SW1wbDo6fkhUTUxCUkVsZW1lbnRJbXBsKCkKIHsKIH0KIAot
Tm9kZUltcGw6OklkIEhUTUxCUkVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IElEX0JSOwotfQotCiBib29sIEhUTUxCUkVsZW1lbnRJbXBsOjptYXBUb0VudHJ5KE5vZGVJbXBs
OjpJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdAogewogICAgIGlm
IChhdHRyID09IEFUVFJfQ0xFQVIpIHsKQEAgLTQ0NSw3ICs0MzUsNyBAQCB2b2lkIEhUTUxCUkVs
ZW1lbnRJbXBsOjpzZXRDbGVhcihjb25zdCBECiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxG
b250RWxlbWVudEltcGw6OkhUTUxGb250RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAg
ICA6IEhUTUxFbGVtZW50SW1wbChkb2MpCisgICAgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVz
Ojpmb250KCksIGRvYykKIHsKIH0KIApAQCAtNDUzLDExICs0NDMsNiBAQCBIVE1MRm9udEVsZW1l
bnRJbXBsOjp+SFRNTEZvbnRFbGVtZW50SW1wCiB7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MRm9u
dEVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0ZPTlQ7Ci19Ci0KIC8v
IEFsbG93cyBsZWFkaW5nIHNwYWNlcy4KIC8vIEFsbG93cyB0cmFpbGluZyBub25udW1lcmljIGNo
YXJhY3RlcnMuCiAvLyBSZXR1cm5zIDEwIGZvciBhbnkgc2l6ZSBncmVhdGVyIHRoYW4gOS4KQEAg
LTU5MCw4ICs1NzUsOCBAQCB2b2lkIEhUTUxGb250RWxlbWVudEltcGw6OnNldFNpemUoY29uc3Qg
CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSFRNTE1vZEVsZW1lbnRJbXBsOjpIVE1MTW9kRWxl
bWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgdXNob3J0IGVsZW1lbnRJZCkKLSAgICA6IEhUTUxH
ZW5lcmljRWxlbWVudEltcGwoZG9jLCBlbGVtZW50SWQpCitIVE1MTW9kRWxlbWVudEltcGw6OkhU
TUxNb2RFbGVtZW50SW1wbChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudFB0
ciAqZG9jKQorICAgIDogSFRNTEVsZW1lbnRJbXBsKHRhZ05hbWUsIGRvYykKIHsKIH0KIApAQCAt
NjE4LDE1ICs2MDMsMTAgQEAgdm9pZCBIVE1MTW9kRWxlbWVudEltcGw6OnNldERhdGVUaW1lKGNv
bgogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MUXVvdGVFbGVtZW50SW1wbDo6SFRNTFF1b3Rl
RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50SW1wbChkb2Mp
CisgICAgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjpxKCksIGRvYykKIHsKIH0KIAotTm9k
ZUltcGw6OklkIEhUTUxRdW90ZUVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IElEX1E7Ci19Ci0gICAgCiBET01TdHJpbmcgSFRNTFF1b3RlRWxlbWVudEltcGw6OmNpdGUoKSBj
b25zdAogewogICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoQVRUUl9DSVRFKTsKSW5kZXg6IGtodG1s
L2h0bWwvaHRtbF9pbmxpbmVpbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dl
YkNvcmUva2h0bWwvaHRtbC9odG1sX2lubGluZWltcGwuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS4xOQpkaWZmIC11IC1wIC1yMS4xOSBraHRtbC9odG1sL2h0bWxfaW5saW5laW1wbC5oCi0tLSBr
aHRtbC9odG1sL2h0bWxfaW5saW5laW1wbC5oCTExIE1heSAyMDA1IDA1OjQ5OjM0IC0wMDAwCTEu
MTkKKysrIGtodG1sL2h0bWwvaHRtbF9pbmxpbmVpbXBsLmgJMjMgSnVuIDIwMDUgMDE6MTA6NTcg
LTAwMDAKQEAgLTM5LDcgKzM5LDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpc01vdXNl
Rm9jdXNhYmxlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlzS2V5Ym9hcmRGb2N1c2FibGUo
KSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNGb2N1c2FibGUoKSBjb25zdDsKLSAgICB2aXJ0
dWFsIElkIGlkKCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRl
KE1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIpOwogICAgIHZpcnR1YWwgdm9pZCBkZWZhdWx0RXZl
bnRIYW5kbGVyKEV2ZW50SW1wbCAqZXZ0KTsKICAgICB2aXJ0dWFsIHZvaWQgYWNjZXNzS2V5QWN0
aW9uKGJvb2wgZnVsbEFjdGlvbik7CkBAIC05Nyw4ICs5Niw2IEBAIGNsYXNzIEhUTUxCUkVsZW1l
bnRJbXBsIDogcHVibGljIEhUTUxFbGUKIHB1YmxpYzoKICAgICBIVE1MQlJFbGVtZW50SW1wbChE
b2N1bWVudFB0ciAqZG9jKTsKICAgICB+SFRNTEJSRWxlbWVudEltcGwoKTsKLQotICAgIHZpcnR1
YWwgSWQgaWQoKSBjb25zdDsKICAgICAKICAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShJZCBh
dHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdDsKICAgICB2aXJ0dWFsIHZv
aWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqYXR0cik7CkBAIC0x
MTYsOCArMTEzLDYgQEAgY2xhc3MgSFRNTEZvbnRFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MRQog
cHVibGljOgogICAgIEhUTUxGb250RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYyk7CiAgICAg
fkhUTUxGb250RWxlbWVudEltcGwoKTsKLQotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKICAg
ICAKICAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVF
bnRyeSYgcmVzdWx0KSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1
dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqYXR0cik7CkBAIC0xMzQsMTAgKzEyOSwxMCBAQCBwdWJs
aWM6CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotY2xhc3MgSFRNTE1vZEVsZW1lbnRJbXBsIDog
cHVibGljIEhUTUxHZW5lcmljRWxlbWVudEltcGwKK2NsYXNzIEhUTUxNb2RFbGVtZW50SW1wbCA6
IHB1YmxpYyBIVE1MRWxlbWVudEltcGwKIHsKIHB1YmxpYzoKLSAgICBIVE1MTW9kRWxlbWVudElt
cGwoRG9jdW1lbnRQdHIgKmRvYywgdXNob3J0IGVsZW1lbnRJZCk7CisgICAgSFRNTE1vZEVsZW1l
bnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50UHRyICpkb2MpOwog
CiAgICAgRE9NU3RyaW5nIGNpdGUoKSBjb25zdDsKICAgICB2b2lkIHNldENpdGUoY29uc3QgRE9N
U3RyaW5nICYpOwpAQCAtMTUyLDggKzE0Nyw2IEBAIGNsYXNzIEhUTUxRdW90ZUVsZW1lbnRJbXBs
IDogcHVibGljIEhUTUwKIHsKIHB1YmxpYzoKICAgICBIVE1MUXVvdGVFbGVtZW50SW1wbChEb2N1
bWVudFB0ciAqZG9jKTsKLQotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKICAgICAKICAgICBE
T01TdHJpbmcgY2l0ZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0Q2l0ZShjb25zdCBET01TdHJpbmcg
Jik7CkluZGV4OiBraHRtbC9odG1sL2h0bWxfbGlzdGltcGwuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbF9saXN0aW1wbC5jcHAsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuOQpkaWZmIC11IC1wIC1yMS45IGtodG1sL2h0bWwvaHRtbF9saXN0
aW1wbC5jcHAKLS0tIGtodG1sL2h0bWwvaHRtbF9saXN0aW1wbC5jcHAJMTEgTWF5IDIwMDUgMDU6
NDk6MzQgLTAwMDAJMS45CisrKyBraHRtbC9odG1sL2h0bWxfbGlzdGltcGwuY3BwCTIzIEp1biAy
MDA1IDAxOjEwOjU3IC0wMDAwCkBAIC0zMiwxMSArMzIsNiBAQCB1c2luZyBuYW1lc3BhY2Uga2h0
bWw7CiAKIG5hbWVzcGFjZSBET00gewogCi1Ob2RlSW1wbDo6SWQgSFRNTFVMaXN0RWxlbWVudElt
cGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfVUw7Ci19Ci0KIGJvb2wgSFRNTFVMaXN0
RWxlbWVudEltcGw6Om1hcFRvRW50cnkoTm9kZUltcGw6OklkIGF0dHIsIE1hcHBlZEF0dHJpYnV0
ZUVudHJ5JiByZXN1bHQpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChhdHRyKSB7CkBAIC04NCwxMSAr
NzksNiBAQCB2b2lkIEhUTUxVTGlzdEVsZW1lbnRJbXBsOjpzZXRUeXBlKGNvbnN0CiAKIC8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KIAotTm9kZUltcGw6OklkIEhUTUxEaXJlY3RvcnlFbGVtZW50SW1wbDo6
aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9ESVI7Ci19Ci0KIGJvb2wgSFRNTERpcmVjdG9y
eUVsZW1lbnRJbXBsOjpjb21wYWN0KCkgY29uc3QKIHsKICAgICByZXR1cm4gIWdldEF0dHJpYnV0
ZShBVFRSX0NPTVBBQ1QpLmlzTnVsbCgpOwpAQCAtMTAxLDExICs5MSw2IEBAIHZvaWQgSFRNTERp
cmVjdG9yeUVsZW1lbnRJbXBsOjpzZXRDb21wYWMKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1O
b2RlSW1wbDo6SWQgSFRNTE1lbnVFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVy
biBJRF9NRU5VOwotfQotCiBib29sIEhUTUxNZW51RWxlbWVudEltcGw6OmNvbXBhY3QoKSBjb25z
dAogewogICAgIHJldHVybiAhZ2V0QXR0cmlidXRlKEFUVFJfQ09NUEFDVCkuaXNOdWxsKCk7CkBA
IC0xMTgsMTEgKzEwMyw2IEBAIHZvaWQgSFRNTE1lbnVFbGVtZW50SW1wbDo6c2V0Q29tcGFjdChi
b28KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Ob2RlSW1wbDo6SWQgSFRNTE9MaXN0RWxlbWVu
dEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfT0w7Ci19Ci0KIGJvb2wgSFRNTE9M
aXN0RWxlbWVudEltcGw6Om1hcFRvRW50cnkoTm9kZUltcGw6OklkIGF0dHIsIE1hcHBlZEF0dHJp
YnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChhdHRyKSB7CkBAIC0xNTUs
NyArMTM1LDcgQEAgdm9pZCBIVE1MT0xpc3RFbGVtZW50SW1wbDo6cGFyc2VNYXBwZWRBdAogICAg
IGNhc2UgQVRUUl9TVEFSVDoKICAgICAgICAgICAgIF9zdGFydCA9ICFhdHRyLT5pc051bGwoKSA/
IGF0dHItPnZhbHVlKCkudG9JbnQoKSA6IDE7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgSFRNTFVM
aXN0RWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAgICBIVE1M
RWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwogICAgIH0KIH0KIApAQCAt
MTg2LDExICsxNjYsNiBAQCB2b2lkIEhUTUxPTGlzdEVsZW1lbnRJbXBsOjpzZXRUeXBlKGNvbnN0
CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotTm9kZUltcGw6OklkIEhUTUxMSUVsZW1lbnRJbXBs
OjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0xJOwotfQotCiBib29sIEhUTUxMSUVsZW1l
bnRJbXBsOjptYXBUb0VudHJ5KE5vZGVJbXBsOjpJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRy
eSYgcmVzdWx0KSBjb25zdAogewogICAgIHN3aXRjaCAoYXR0cikgewpAQCAtMjUyLDExICsyMjcs
OCBAQCB2b2lkIEhUTUxMSUVsZW1lbnRJbXBsOjphdHRhY2goKQogICAgICAgICBOb2RlSW1wbCAq
bGlzdE5vZGUgPSAwOwogICAgICAgICBOb2RlSW1wbCAqbiA9IHRoaXM7CiAgICAgICAgIHdoaWxl
ICghbGlzdE5vZGUgJiYgKG4gPSBuLT5wYXJlbnROb2RlKCkpKSB7Ci0gICAgICAgICAgICBzd2l0
Y2ggKG4tPmlkKCkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIElEX1VMOgotICAgICAgICAgICAg
ICAgIGNhc2UgSURfT0w6Ci0gICAgICAgICAgICAgICAgICAgIGxpc3ROb2RlID0gbjsKLSAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmIChuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dWwoKSkg
fHwgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9sKCkpKQorICAgICAgICAgICAgICAgIGxpc3RO
b2RlID0gbjsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8gSWYgd2UgYXJlIG5vdCBp
biBhIGxpc3QsIHRlbGwgdGhlIHJlbmRlcmVyIHNvIGl0IGNhbiBwb3NpdGlvbiB1cyBpbnNpZGUu
CkBAIC0yNjUsNyArMjM3LDcgQEAgdm9pZCBIVE1MTElFbGVtZW50SW1wbDo6YXR0YWNoKCkKICAg
ICAgICAgICAgIHJlbmRlci0+c2V0Tm90SW5MaXN0KHRydWUpOwogCiAJLy8gSWYgd2UgYXJlIGZp
cnN0LCBhbmQgdGhlIE9MIGhhcyBhIHN0YXJ0IGF0dHIsIHNldCB0aGUgdmFsdWUuCi0JaWYgKGxp
c3ROb2RlICYmIGxpc3ROb2RlLT5pZCgpID09IElEX09MICYmICFtX3JlbmRlci0+cHJldmlvdXNT
aWJsaW5nKCkpIHsKKwlpZiAobGlzdE5vZGUgJiYgbGlzdE5vZGUtPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjpvbCgpKSAmJiAhbV9yZW5kZXItPnByZXZpb3VzU2libGluZygpKSB7CiAJICAgIEhUTUxP
TGlzdEVsZW1lbnRJbXBsICpvbCA9IHN0YXRpY19jYXN0PEhUTUxPTGlzdEVsZW1lbnRJbXBsICo+
KGxpc3ROb2RlKTsKICAgICAgICAgICAgIHJlbmRlci0+c2V0VmFsdWUob2wtPnN0YXJ0KCkpOwog
CX0KQEAgLTI5NSwxMiArMjY3LDggQEAgdm9pZCBIVE1MTElFbGVtZW50SW1wbDo6c2V0VmFsdWUo
bG9uZyB2YQogewogICAgIHNldEF0dHJpYnV0ZShBVFRSX1ZBTFVFLCBRU3RyaW5nOjpudW1iZXIo
dmFsdWUpKTsKIH0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotTm9kZUltcGw6OklkIEhUTUxETGlz
dEVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0RMOwotfQorLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQogCiBib29sIEhUTUxETGlzdEVsZW1lbnRJbXBsOjpjb21wYWN0KCkgY29u
c3QKIHsKSW5kZXg6IGtodG1sL2h0bWwvaHRtbF9saXN0aW1wbC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbF9saXN0aW1wbC5oLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjcKZGlmZiAtdSAtcCAtcjEuNyBraHRtbC9odG1sL2h0bWxfbGlzdGlt
cGwuaAotLS0ga2h0bWwvaHRtbC9odG1sX2xpc3RpbXBsLmgJMTEgTWF5IDIwMDUgMDU6NDk6MzQg
LTAwMDAJMS43CisrKyBraHRtbC9odG1sL2h0bWxfbGlzdGltcGwuaAkyMyBKdW4gMjAwNSAwMTox
MDo1NyAtMDAwMApAQCAtMzUsMTEgKzM1LDkgQEAgbmFtZXNwYWNlIERPTQogY2xhc3MgSFRNTFVM
aXN0RWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTEVsZW1lbnRJbXBsCiB7CiBwdWJsaWM6Ci0gICAg
SFRNTFVMaXN0RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykgOiBIVE1MRWxlbWVudEltcGwo
ZG9jKSB7fQorICAgIEhUTUxVTGlzdEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpIDogSFRN
TEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6dWwoKSwgZG9jKSB7fQogICAgIHZpcnR1YWwgfkhUTUxV
TGlzdEVsZW1lbnRJbXBsKCkge30KIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKLQogICAg
IHZpcnR1YWwgYm9vbCBtYXBUb0VudHJ5KElkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiBy
ZXN1bHQpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBw
ZWRBdHRyaWJ1dGVJbXBsICopOwogCkBAIC01Nyw5ICs1NSw3IEBAIHB1YmxpYzoKIGNsYXNzIEhU
TUxEaXJlY3RvcnlFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MRWxlbWVudEltcGwKIHsKIHB1Ymxp
YzoKLSAgICBIVE1MRGlyZWN0b3J5RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykgOiBIVE1M
RWxlbWVudEltcGwoZG9jKSB7fQotCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OworICAgIEhU
TUxEaXJlY3RvcnlFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKSA6IEhUTUxFbGVtZW50SW1w
bChIVE1MTmFtZXM6OmRpcigpLCBkb2MpIHt9CiAKICAgICBib29sIGNvbXBhY3QoKSBjb25zdDsK
ICAgICB2b2lkIHNldENvbXBhY3QoYm9vbCk7CkBAIC03MCw5ICs2Niw3IEBAIHB1YmxpYzoKIGNs
YXNzIEhUTUxNZW51RWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTEVsZW1lbnRJbXBsCiB7CiBwdWJs
aWM6Ci0gICAgSFRNTE1lbnVFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKSA6IEhUTUxFbGVt
ZW50SW1wbChkb2MpIHt9Ci0KLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CisgICAgSFRNTE1l
bnVFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKSA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFt
ZXM6Om1lbnUoKSwgZG9jKSB7fQogCiAgICAgYm9vbCBjb21wYWN0KCkgY29uc3Q7CiAgICAgdm9p
ZCBzZXRDb21wYWN0KGJvb2wpOwpAQCAtODAsMTMgKzc0LDExIEBAIHB1YmxpYzoKIAogLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQogCi1jbGFzcyBIVE1MT0xpc3RFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1M
VUxpc3RFbGVtZW50SW1wbAorY2xhc3MgSFRNTE9MaXN0RWxlbWVudEltcGwgOiBwdWJsaWMgSFRN
TEVsZW1lbnRJbXBsCiB7CiBwdWJsaWM6CiAgICAgSFRNTE9MaXN0RWxlbWVudEltcGwoRG9jdW1l
bnRQdHIgKmRvYykKLSAgICAgICAgOiBIVE1MVUxpc3RFbGVtZW50SW1wbChkb2MpIHsgX3N0YXJ0
ID0gMTsgfQotCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OworICAgICAgICA6IEhUTUxFbGVt
ZW50SW1wbChIVE1MTmFtZXM6Om9sKCksIGRvYykgeyBfc3RhcnQgPSAxOyB9CiAgICAgCiAgICAg
dmlydHVhbCBib29sIG1hcFRvRW50cnkoSWQgYXR0ciwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJl
c3VsdCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBl
ZEF0dHJpYnV0ZUltcGwgKik7CkBAIC0xMTAsMTEgKzEwMiw5IEBAIGNsYXNzIEhUTUxMSUVsZW1l
bnRJbXBsIDogcHVibGljIEhUTUxFbGUKIHsKIHB1YmxpYzoKICAgICBIVE1MTElFbGVtZW50SW1w
bChEb2N1bWVudFB0ciAqZG9jKQotICAgICAgICA6IEhUTUxFbGVtZW50SW1wbChkb2MpIHsgaXNW
YWx1ZWQgPSBmYWxzZTsgfQorICAgICAgICA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6Omxp
KCksIGRvYykgeyBpc1ZhbHVlZCA9IGZhbHNlOyB9CiAgICAgdmlydHVhbCB+SFRNTExJRWxlbWVu
dEltcGwoKSB7fQogCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwotCiAgICAgdmlydHVhbCBi
b29sIG1hcFRvRW50cnkoTm9kZUltcGw6OklkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiBy
ZXN1bHQpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBw
ZWRBdHRyaWJ1dGVJbXBsICphdHRyKTsKIApAQCAtMTM2LDExICsxMjYsOSBAQCBwcml2YXRlOgog
Y2xhc3MgSFRNTERMaXN0RWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTEVsZW1lbnRJbXBsCiB7CiBw
dWJsaWM6Ci0gICAgSFRNTERMaXN0RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykgOiBIVE1M
RWxlbWVudEltcGwoZG9jKSB7fQorICAgIEhUTUxETGlzdEVsZW1lbnRJbXBsKERvY3VtZW50UHRy
ICpkb2MpIDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6ZGwoKSwgZG9jKSB7fQogICAgIHZp
cnR1YWwgfkhUTUxETGlzdEVsZW1lbnRJbXBsKCkge30KIAotICAgIHZpcnR1YWwgSWQgaWQoKSBj
b25zdDsKLQogICAgIGJvb2wgY29tcGFjdCgpIGNvbnN0OwogICAgIHZvaWQgc2V0Q29tcGFjdChi
b29sKTsKIH07CkluZGV4OiBraHRtbC9odG1sL2h0bWxfbWlzY2ltcGwuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbF9taXNjaW1wbC5jcHAs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjYKZGlmZiAtdSAtcCAtcjEuMjYga2h0bWwvaHRtbC9o
dG1sX21pc2NpbXBsLmNwcAotLS0ga2h0bWwvaHRtbC9odG1sX21pc2NpbXBsLmNwcAkxMSBKdW4g
MjAwNSAwOTo1MTowMSAtMDAwMAkxLjI2CisrKyBraHRtbC9odG1sL2h0bWxfbWlzY2ltcGwuY3Bw
CTIzIEp1biAyMDA1IDAxOjEwOjU4IC0wMDAwCkBAIC0zNSwxNSArMzUsMTAgQEAKIG5hbWVzcGFj
ZSBET00gewogCiBIVE1MQmFzZUZvbnRFbGVtZW50SW1wbDo6SFRNTEJhc2VGb250RWxlbWVudElt
cGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50SW1wbChkb2MpCisgICAgOiBI
VE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjpiYXNlZm9udCgpLCBkb2MpCiB7CiB9CiAKLU5vZGVJ
bXBsOjpJZCBIVE1MQmFzZUZvbnRFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVy
biBJRF9CQVNFRk9OVDsKLX0KLQogRE9NU3RyaW5nIEhUTUxCYXNlRm9udEVsZW1lbnRJbXBsOjpj
b2xvcigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGdldEF0dHJpYnV0ZShBVFRSX0NPTE9SKTsKQEAg
LTE0MSw3MiArMTM2LDcyIEBAIE5vZGVJbXBsICpIVE1MQ29sbGVjdGlvbkltcGw6OnRyYXZlcnNl
TmUKICAgICAgICAgICAgIEhUTUxFbGVtZW50SW1wbCAqZSA9IHN0YXRpY19jYXN0PEhUTUxFbGVt
ZW50SW1wbCAqPihjdXJyZW50KTsKICAgICAgICAgICAgIHN3aXRjaCh0eXBlKSB7CiAgICAgICAg
ICAgICBjYXNlIERPQ19JTUFHRVM6Ci0gICAgICAgICAgICAgICAgaWYoZS0+aWQoKSA9PSBJRF9J
TUcpCisgICAgICAgICAgICAgICAgaWYgKGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmltZygp
KSkKICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgY2FzZSBET0NfRk9STVM6Ci0gICAgICAgICAgICAgICAgaWYoZS0+
aWQoKSA9PSBJRF9GT1JNKQorICAgICAgICAgICAgICAgIGlmKGUtPmhhc0xvY2FsTmFtZShIVE1M
TmFtZXM6OmZvcm0oKSkpCiAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgRE9DX05BTUVBQkxFX0lURU1TOgot
ICAgICAgICAgICAgICAgIGlmKGUtPmlkKCkgPT0gSURfSU1HKQorICAgICAgICAgICAgICAgIGlm
IChlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjppbWcoKSkpCiAgICAgICAgICAgICAgICAgICAg
IGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBpZihlLT5pZCgpID09IElEX0ZPUk0pCisg
ICAgICAgICAgICAgICAgaWYgKGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmZvcm0oKSkpCiAg
ICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBpZihlLT5p
ZCgpID09IElEX0FQUExFVCkKKyAgICAgICAgICAgICAgICBpZiAoZS0+aGFzTG9jYWxOYW1lKEhU
TUxOYW1lczo6YXBwbGV0KCkpKQogICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7Ci0g
ICAgICAgICAgICAgICAgaWYoZS0+aWQoKSA9PSBJRF9FTUJFRCkKKyAgICAgICAgICAgICAgICBp
ZiAoZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6ZW1iZWQoKSkpCiAgICAgICAgICAgICAgICAg
ICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBpZihlLT5pZCgpID09IElEX09CSkVD
VCkKKyAgICAgICAgICAgICAgICBpZiAoZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b2JqZWN0
KCkpKQogICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICBjYXNlIFRBQkxFX1RCT0RJRVM6Ci0gICAgICAgICAgICAgICAg
aWYoZS0+aWQoKSA9PSBJRF9UQk9EWSkKKyAgICAgICAgICAgICAgICBpZiAoZS0+aGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6dGJvZHkoKSkpCiAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1
ZTsKLSAgICAgICAgICAgICAgICBlbHNlIGlmKGUtPmlkKCkgPT0gSURfVEFCTEUpCisgICAgICAg
ICAgICAgICAgZWxzZSBpZiAoZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dGFibGUoKSkpCiAg
ICAgICAgICAgICAgICAgICAgIGRlZXAgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIGNhc2UgVFJfQ0VMTFM6Ci0gICAgICAgICAgICAgICAgaWYoZS0+aWQoKSA9
PSBJRF9URCB8fCBlLT5pZCgpID09IElEX1RIKQorICAgICAgICAgICAgICAgIGlmIChlLT5oYXNM
b2NhbE5hbWUoSFRNTE5hbWVzOjp0ZCgpKSB8fCBlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0
aCgpKSkKICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwotICAgICAgICAgICAgICAg
IGVsc2UgaWYoZS0+aWQoKSA9PSBJRF9UQUJMRSkKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChl
LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0YWJsZSgpKSkKICAgICAgICAgICAgICAgICAgICAg
ZGVlcCA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBU
QUJMRV9ST1dTOgogICAgICAgICAgICAgY2FzZSBUU0VDVElPTl9ST1dTOgotICAgICAgICAgICAg
ICAgIGlmKGUtPmlkKCkgPT0gSURfVFIpCisgICAgICAgICAgICAgICAgaWYgKGUtPmhhc0xvY2Fs
TmFtZShIVE1MTmFtZXM6OnRyKCkpKQogICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7
Ci0gICAgICAgICAgICAgICAgZWxzZSBpZihlLT5pZCgpID09IElEX1RBQkxFKQorICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnRhYmxlKCkpKQogICAg
ICAgICAgICAgICAgICAgICBkZWVwID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICBjYXNlIFNFTEVDVF9PUFRJT05TOgotICAgICAgICAgICAgICAgIGlmKGUtPmlk
KCkgPT0gSURfT1BUSU9OKQorICAgICAgICAgICAgICAgIGlmIChlLT5oYXNMb2NhbE5hbWUoSFRN
TE5hbWVzOjpvcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgTUFQX0FSRUFTOgotICAgICAg
ICAgICAgICAgIGlmKGUtPmlkKCkgPT0gSURfQVJFQSkKKyAgICAgICAgICAgICAgICBpZiAoZS0+
aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6YXJlYSgpKSkKICAgICAgICAgICAgICAgICAgICAgZm91
bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBET0Nf
QVBQTEVUUzogICAvLyBhbGwgT0JKRUNUIGFuZCBBUFBMRVQgZWxlbWVudHMKLSAgICAgICAgICAg
ICAgICBpZihlLT5pZCgpID09IElEX09CSkVDVCB8fCBlLT5pZCgpID09IElEX0FQUExFVCkKKyAg
ICAgICAgICAgICAgICBpZiAoZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b2JqZWN0KCkpIHx8
IGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmFwcGxldCgpKSkKICAgICAgICAgICAgICAgICAg
ICAgZm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2Fz
ZSBET0NfRU1CRURTOiAgIC8vIGFsbCBFTUJFRCBlbGVtZW50cwotICAgICAgICAgICAgICAgIGlm
KGUtPmlkKCkgPT0gSURfRU1CRUQpCisgICAgICAgICAgICAgICAgaWYgKGUtPmhhc0xvY2FsTmFt
ZShIVE1MTmFtZXM6OmVtYmVkKCkpKQogICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIERPQ19PQkpFQ1RTOiAg
IC8vIGFsbCBPQkpFQ1QgZWxlbWVudHMKLSAgICAgICAgICAgICAgICBpZihlLT5pZCgpID09IElE
X09CSkVDVCkKKyAgICAgICAgICAgICAgICBpZiAoZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6
b2JqZWN0KCkpKQogICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIERPQ19MSU5LUzogICAgIC8vIGFsbCBBIF9h
bmRfIEFSRUEgZWxlbWVudHMgd2l0aCBhIHZhbHVlIGZvciBocmVmCi0gICAgICAgICAgICAgICAg
aWYoZS0+aWQoKSA9PSBJRF9BIHx8IGUtPmlkKCkgPT0gSURfQVJFQSkKLSAgICAgICAgICAgICAg
ICAgICAgaWYoIWUtPmdldEF0dHJpYnV0ZShBVFRSX0hSRUYpLmlzTnVsbCgpKQorICAgICAgICAg
ICAgICAgIGlmIChlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjphKCkpIHx8IGUtPmhhc0xvY2Fs
TmFtZShIVE1MTmFtZXM6OmFyZWEoKSkpCisgICAgICAgICAgICAgICAgICAgIGlmICghZS0+Z2V0
QXR0cmlidXRlKEFUVFJfSFJFRikuaXNOdWxsKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBm
b3VuZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIERP
Q19BTkNIT1JTOiAgICAgIC8vIGFsbCBBIGVsZW1lbnRzIHdpdGggYSB2YWx1ZSBmb3IgbmFtZSBv
ciBhbiBpZCBhdHRyaWJ1dGUKLSAgICAgICAgICAgICAgICBpZihlLT5pZCgpID09IElEX0EpCi0g
ICAgICAgICAgICAgICAgICAgIGlmKCFlLT5nZXRBdHRyaWJ1dGUoQVRUUl9OQU1FKS5pc051bGwo
KSkKKyAgICAgICAgICAgICAgICBpZiAoZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6YSgpKSkK
KyAgICAgICAgICAgICAgICAgICAgaWYgKCFlLT5nZXRBdHRyaWJ1dGUoQVRUUl9OQU1FKS5pc051
bGwoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgRE9DX0FMTDoKQEAgLTIxOSw5ICsyMTQsOSBA
QCBOb2RlSW1wbCAqSFRNTENvbGxlY3Rpb25JbXBsOjp0cmF2ZXJzZU5lCiAgICAgICAgICAgICBk
ZWZhdWx0OgogICAgICAgICAgICAgICAgIGtkRGVidWcoIDYwMzAgKSA8PCAiRXJyb3IgaW4gSFRN
TENvbGxlY3Rpb24sIHdyb25nIHRhZ0lkISIgPDwgZW5kbDsKICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGlmIChmb3VuZCkgeworCisgICAgICAgICAgICBpZiAoZm91bmQpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGN1cnJlbnQ7Ci0gICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoZGVl
cCkgewogICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT50cmF2ZXJzZU5leHROb2Rl
KG1fYmFzZS5nZXQoKSk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC0yOTgsMjkgKzI5
MywzMSBAQCBOb2RlSW1wbCAqSFRNTENvbGxlY3Rpb25JbXBsOjpuZXh0SXRlbSgpCiAKIGJvb2wg
SFRNTENvbGxlY3Rpb25JbXBsOjpjaGVja0Zvck5hbWVNYXRjaChOb2RlSW1wbCAqbm9kZSwgYm9v
bCBjaGVja05hbWUsIGNvbnN0IERPTVN0cmluZyAmbmFtZSwgYm9vbCBjYXNlU2Vuc2l0aXZlKSBj
b25zdAogewotICAgIEVsZW1lbnRJbXBsICplID0gc3RhdGljX2Nhc3Q8RWxlbWVudEltcGwgKj4o
bm9kZSk7CisgICAgaWYgKCFub2RlLT5pc0hUTUxFbGVtZW50KCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAKKyAgICBIVE1MRWxlbWVudEltcGwgKmUgPSBzdGF0aWNfY2FzdDxIVE1MRWxl
bWVudEltcGwqPihub2RlKTsKICAgICBpZiAoY2FzZVNlbnNpdGl2ZSkgewogICAgICAgICBpZiAo
Y2hlY2tOYW1lKSB7CiAgICAgICAgICAgICAvLyBkb2N1bWVudC5hbGwgcmV0dXJucyBvbmx5IGlt
YWdlcywgZm9ybXMsIGFwcGxldHMsIG9iamVjdHMgYW5kIGVtYmVkcwogICAgICAgICAgICAgLy8g
YnkgbmFtZSAodGhvdWdoIGV2ZXJ5dGhpbmcgYnkgaWQpCiAgICAgICAgICAgICBpZiAodHlwZSA9
PSBET0NfQUxMICYmIAotICAgICAgICAgICAgICAgICEoZS0+aWQoKSA9PSBJRF9JTUcgfHwgZS0+
aWQoKSA9PSBJRF9GT1JNIHx8Ci0gICAgICAgICAgICAgICAgICBlLT5pZCgpID09IElEX0FQUExF
VCB8fCBlLT5pZCgpID09IElEX09CSkVDVCB8fAotICAgICAgICAgICAgICAgICAgZS0+aWQoKSA9
PSBJRF9FTUJFRCkpCisgICAgICAgICAgICAgICAgIShlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVz
OjppbWcoKSkgfHwgZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6Zm9ybSgpKSB8fAorICAgICAg
ICAgICAgICAgICAgZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6YXBwbGV0KCkpIHx8IGUtPmhh
c0xvY2FsTmFtZShIVE1MTmFtZXM6Om9iamVjdCgpKSB8fAorICAgICAgICAgICAgICAgICAgZS0+
aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6ZW1iZWQoKSkpKQogICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgICAgICAgICAgcmV0dXJuIGUtPmdldEF0dHJpYnV0ZShBVFRSX05BTUUp
ID09IG5hbWUgJiYgZS0+Z2V0QXR0cmlidXRlKEFUVFJfSUQpICE9IG5hbWU7Ci0gICAgICAgIH0g
ZWxzZSB7CisgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgcmV0dXJuIGUtPmdldEF0dHJpYnV0
ZShBVFRSX0lEKSA9PSBuYW1lOwotICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYg
KGNoZWNrTmFtZSkgewogICAgICAgICAgICAgLy8gZG9jdW1lbnQuYWxsIHJldHVybnMgb25seSBp
bWFnZXMsIGZvcm1zLCBhcHBsZXRzLCBvYmplY3RzIGFuZCBlbWJlZHMKICAgICAgICAgICAgIC8v
IGJ5IG5hbWUgKHRob3VnaCBldmVyeXRoaW5nIGJ5IGlkKQogICAgICAgICAgICAgaWYgKHR5cGUg
PT0gRE9DX0FMTCAmJiAKLSAgICAgICAgICAgICAgICAhKGUtPmlkKCkgPT0gSURfSU1HIHx8IGUt
PmlkKCkgPT0gSURfRk9STSB8fAotICAgICAgICAgICAgICAgICAgZS0+aWQoKSA9PSBJRF9BUFBM
RVQgfHwgZS0+aWQoKSA9PSBJRF9PQkpFQ1QgfHwKLSAgICAgICAgICAgICAgICAgIGUtPmlkKCkg
PT0gSURfRU1CRUQpKQorICAgICAgICAgICAgICAgICEoZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1l
czo6aW1nKCkpIHx8IGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmZvcm0oKSkgfHwKKyAgICAg
ICAgICAgICAgICAgIGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmFwcGxldCgpKSB8fCBlLT5o
YXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvYmplY3QoKSkgfHwKKyAgICAgICAgICAgICAgICAgIGUt
Pmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmVtYmVkKCkpKSkKICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICAgICAgICAgIHJldHVybiBlLT5nZXRBdHRyaWJ1dGUoQVRUUl9OQU1F
KS5kb21TdHJpbmcoKS5sb3dlcigpID09IG5hbWUubG93ZXIoKSAmJgpAQCAtMzc5LDcgKzM3Niw5
IEBAIHZvaWQgSFRNTENvbGxlY3Rpb25JbXBsOjp1cGRhdGVOYW1lQ2FjaGUKICAgICAgICAgcmV0
dXJuOwogICAgIAogICAgIGZvciAoTm9kZUltcGwgKm4gPSB0cmF2ZXJzZU5leHRJdGVtKG1fYmFz
ZS5nZXQoKSk7IG47IG4gPSB0cmF2ZXJzZU5leHRJdGVtKG4pKSB7Ci0gICAgICAgIEVsZW1lbnRJ
bXBsICplID0gc3RhdGljX2Nhc3Q8RWxlbWVudEltcGwgKj4obik7CisgICAgICAgIGlmICghbi0+
aXNIVE1MRWxlbWVudCgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIEhUTUxFbGVt
ZW50SW1wbCogZSA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCo+KG4pOwogICAgICAgICBR
U3RyaW5nIGlkQXR0ciA9IGUtPmdldEF0dHJpYnV0ZShBVFRSX0lEKS5zdHJpbmcoKTsKICAgICAg
ICAgUVN0cmluZyBuYW1lQXR0ciA9IGUtPmdldEF0dHJpYnV0ZShBVFRSX05BTUUpLnN0cmluZygp
OwogICAgICAgICBpZiAoIWlkQXR0ci5pc0VtcHR5KCkpIHsKQEAgLTM5Myw5ICszOTIsOSBAQCB2
b2lkIEhUTUxDb2xsZWN0aW9uSW1wbDo6dXBkYXRlTmFtZUNhY2hlCiAgICAgICAgIH0KICAgICAg
ICAgaWYgKCFuYW1lQXR0ci5pc0VtcHR5KCkgJiYgaWRBdHRyICE9IG5hbWVBdHRyCiAgICAgICAg
ICAgICAmJiAodHlwZSAhPSBET0NfQUxMIHx8IAotICAgICAgICAgICAgICAgIChlLT5pZCgpID09
IElEX0lNRyB8fCBlLT5pZCgpID09IElEX0ZPUk0gfHwKLSAgICAgICAgICAgICAgICAgZS0+aWQo
KSA9PSBJRF9BUFBMRVQgfHwgZS0+aWQoKSA9PSBJRF9PQkpFQ1QgfHwKLSAgICAgICAgICAgICAg
ICAgZS0+aWQoKSA9PSBJRF9FTUJFRCkpKSB7CisgICAgICAgICAgICAgICAgKGUtPmhhc0xvY2Fs
TmFtZShIVE1MTmFtZXM6OmltZygpKSB8fCBlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpmb3Jt
KCkpIHx8CisgICAgICAgICAgICAgICAgIGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmFwcGxl
dCgpKSB8fCBlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvYmplY3QoKSkgfHwKKyAgICAgICAg
ICAgICAgICAgZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6ZW1iZWQoKSkpKSkgewogICAgICAg
ICAgICAgLy8gYWRkIHRvIG5hbWUgY2FjaGUKICAgICAgICAgICAgIFFQdHJWZWN0b3I8Tm9kZUlt
cGw+ICpuYW1lVmVjdG9yID0gaW5mby0+bmFtZUNhY2hlLmZpbmQobmFtZUF0dHIpOwogICAgICAg
ICAgICAgaWYgKCFuYW1lVmVjdG9yKSB7CkBAIC01MzIsMTIgKzUzMSwxMCBAQCBOb2RlSW1wbCog
SFRNTEZvcm1Db2xsZWN0aW9uSW1wbDo6Z2V0TmFtCiAKIE5vZGVJbXBsKiBIVE1MRm9ybUNvbGxl
Y3Rpb25JbXBsOjpnZXROYW1lZEZvcm1JdGVtKGludCBhdHRyX2lkLCBjb25zdCBET01TdHJpbmcm
IG5hbWUsIGludCBkdXBsaWNhdGVOdW1iZXIsIGJvb2wgY2FzZVNlbnNpdGl2ZSkgY29uc3QKIHsK
LSAgICBpZihtX2Jhc2UtPm5vZGVUeXBlKCkgPT0gTm9kZTo6RUxFTUVOVF9OT0RFKQotICAgIHsK
KyAgICBpZiAobV9iYXNlLT5ub2RlVHlwZSgpID09IE5vZGU6OkVMRU1FTlRfTk9ERSkgewogICAg
ICAgICBIVE1MRWxlbWVudEltcGwqIGJhc2VFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1l
bnRJbXBsKj4obV9iYXNlLmdldCgpKTsKICAgICAgICAgYm9vbCBmb3VuZElucHV0RWxlbWVudHMg
PSBmYWxzZTsKLSAgICAgICAgaWYoYmFzZUVsZW1lbnQtPmlkKCkgPT0gSURfRk9STSkKLSAgICAg
ICAgeworICAgICAgICBpZiAoYmFzZUVsZW1lbnQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmZv
cm0oKSkpIHsKICAgICAgICAgICAgIEhUTUxGb3JtRWxlbWVudEltcGwqIGYgPSBzdGF0aWNfY2Fz
dDxIVE1MRm9ybUVsZW1lbnRJbXBsKj4oYmFzZUVsZW1lbnQpOwogICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGYtPmZvcm1FbGVtZW50cy5jb3VudCgpOyArK2kpIHsKICAgICAg
ICAgICAgICAgICBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbCogZSA9IGYtPmZvcm1FbGVtZW50
c1tpXTsKQEAgLTU1Nyw4ICs1NTQsNyBAQCBOb2RlSW1wbCogSFRNTEZvcm1Db2xsZWN0aW9uSW1w
bDo6Z2V0TmFtCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoICFmb3Vu
ZElucHV0RWxlbWVudHMgKQotICAgICAgICB7CisgICAgICAgIGlmICghZm91bmRJbnB1dEVsZW1l
bnRzKSB7CiAgICAgICAgICAgICBIVE1MRm9ybUVsZW1lbnRJbXBsKiBmID0gc3RhdGljX2Nhc3Q8
SFRNTEZvcm1FbGVtZW50SW1wbCo+KGJhc2VFbGVtZW50KTsKIAogICAgICAgICAgICAgZm9yKHVu
c2lnbmVkIGkgPSAwOyBpIDwgZi0+aW1nRWxlbWVudHMuY291bnQoKTsgKytpKQpAQCAtNjUwLDcg
KzY0Niw3IEBAIHZvaWQgSFRNTEZvcm1Db2xsZWN0aW9uSW1wbDo6dXBkYXRlTmFtZUMKIAogICAg
IFFEaWN0PGNoYXI+IGZvdW5kSW5wdXRFbGVtZW50czsKIAotICAgIGlmIChtX2Jhc2UtPmlkKCkg
IT0gSURfRk9STSkgeworICAgIGlmICghbV9iYXNlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Zm9y
bSgpKSkgewogICAgICAgICBpbmZvLT5oYXNOYW1lQ2FjaGUgPSB0cnVlOwogICAgICAgICByZXR1
cm47CiAgICAgfQpJbmRleDoga2h0bWwvaHRtbC9odG1sX21pc2NpbXBsLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sX21pc2NpbXBsLmgsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuMTYKZGlmZiAtdSAtcCAtcjEuMTYga2h0bWwvaHRtbC9odG1s
X21pc2NpbXBsLmgKLS0tIGtodG1sL2h0bWwvaHRtbF9taXNjaW1wbC5oCTExIE1heSAyMDA1IDAw
OjU4OjI4IC0wMDAwCTEuMTYKKysrIGtodG1sL2h0bWwvaHRtbF9taXNjaW1wbC5oCTIzIEp1biAy
MDA1IDAxOjEwOjU4IC0wMDAwCkBAIC0zOSw4ICszOSw2IEBAIGNsYXNzIEhUTUxCYXNlRm9udEVs
ZW1lbnRJbXBsIDogcHVibGljIEgKIHB1YmxpYzoKICAgICBIVE1MQmFzZUZvbnRFbGVtZW50SW1w
bChEb2N1bWVudFB0ciAqZG9jKTsKIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKLQogICAg
IERPTVN0cmluZyBjb2xvcigpIGNvbnN0OwogICAgIHZvaWQgc2V0Q29sb3IoY29uc3QgRE9NU3Ry
aW5nICYpOwogCkluZGV4OiBraHRtbC9odG1sL2h0bWxfb2JqZWN0aW1wbC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sX29iamVjdGltcGwu
Y3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjY2CmRpZmYgLXUgLXAgLXIxLjY2IGtodG1sL2h0
bWwvaHRtbF9vYmplY3RpbXBsLmNwcAotLS0ga2h0bWwvaHRtbC9odG1sX29iamVjdGltcGwuY3Bw
CTE5IEp1biAyMDA1IDAzOjM5OjU2IC0wMDAwCTEuNjYKKysrIGtodG1sL2h0bWwvaHRtbF9vYmpl
Y3RpbXBsLmNwcAkyMyBKdW4gMjAwNSAwMToxMDo1OSAtMDAwMApAQCAtNTcsNyArNTcsNyBAQCBu
YW1lc3BhY2UgRE9NIHsKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogSFRNTEFwcGxldEVsZW1lbnRJ
bXBsOjpIVE1MQXBwbGV0RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgOiBIVE1MRWxl
bWVudEltcGwoZG9jKQorICA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6OmFwcGxldCgpLCBk
b2MpCiB7CiAgICAgYXBwbGV0SW5zdGFuY2UgPSAwOwogICAgIG1fYWxsUGFyYW1zQXZhaWxhYmxl
ID0gZmFsc2U7CkBAIC02OCwxMSArNjgsNiBAQCBIVE1MQXBwbGV0RWxlbWVudEltcGw6On5IVE1M
QXBwbGV0RWxlbWVuCiAgICAgZGVsZXRlIGFwcGxldEluc3RhbmNlOwogfQogCi1Ob2RlSW1wbDo6
SWQgSFRNTEFwcGxldEVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0FQ
UExFVDsKLX0KLQogYm9vbCBIVE1MQXBwbGV0RWxlbWVudEltcGw6Om1hcFRvRW50cnkoTm9kZUlt
cGw6OklkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0CiB7CiAgICAg
c3dpdGNoIChhdHRyKSB7CkBAIC0zNTIsMTggKzM0NywxMyBAQCB2b2lkIEhUTUxBcHBsZXRFbGVt
ZW50SW1wbDo6c2V0V2lkdGgoY29uCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxFbWJlZEVs
ZW1lbnRJbXBsOjpIVE1MRW1iZWRFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAgIDog
SFRNTEVsZW1lbnRJbXBsKGRvYyksIGVtYmVkSW5zdGFuY2UoMCkKKyAgICA6IEhUTUxFbGVtZW50
SW1wbChIVE1MTmFtZXM6OmVtYmVkKCksIGRvYyksIGVtYmVkSW5zdGFuY2UoMCkKIHt9CiAKIEhU
TUxFbWJlZEVsZW1lbnRJbXBsOjp+SFRNTEVtYmVkRWxlbWVudEltcGwoKQogewogfQogCi1Ob2Rl
SW1wbDo6SWQgSFRNTEVtYmVkRWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
SURfRU1CRUQ7Ci19Ci0KICNpZiBBUFBMRV9DSEFOR0VTCiBLSlM6OkJpbmRpbmdzOjpJbnN0YW5j
ZSAqSFRNTEVtYmVkRWxlbWVudEltcGw6OmdldEVtYmVkSW5zdGFuY2UoKSBjb25zdAogewpAQCAt
NDc4LDcgKzQ2OCw3IEBAIGJvb2wgSFRNTEVtYmVkRWxlbWVudEltcGw6OnJlbmRlcmVySXNOZWUK
ICAgICBLSFRNTFBhcnQgKnBhcnQgPSBnZXREb2N1bWVudCgpLT5wYXJ0KCk7CiAgICAgaWYgKCFw
YXJ0KQogCXJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gcGFydC0+cGx1Z2luc0VuYWJsZWQoKSAm
JiBwYXJlbnROb2RlKCktPmlkKCkgIT0gSURfT0JKRUNUOworICAgIHJldHVybiBwYXJ0LT5wbHVn
aW5zRW5hYmxlZCgpICYmICFwYXJlbnROb2RlKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvYmpl
Y3QoKSk7CiB9CiAKIFJlbmRlck9iamVjdCAqSFRNTEVtYmVkRWxlbWVudEltcGw6OmNyZWF0ZVJl
bmRlcmVyKFJlbmRlckFyZW5hICphcmVuYSwgUmVuZGVyU3R5bGUgKnN0eWxlKQpAQCAtNTAzLDkg
KzQ5Myw5IEBAIGJvb2wgSFRNTEVtYmVkRWxlbWVudEltcGw6OmlzVVJMQXR0cmlidXQKIAogSFRN
TE9iamVjdEVsZW1lbnRJbXBsOjpIVE1MT2JqZWN0RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRv
YykgCiAjaWYgQVBQTEVfQ0hBTkdFUwotOiBIVE1MRWxlbWVudEltcGwoZG9jKSwgbV9pbWFnZUxv
YWRlcigwKSwgb2JqZWN0SW5zdGFuY2UoMCkKKzogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6
b2JqZWN0KCksIGRvYyksIG1faW1hZ2VMb2FkZXIoMCksIG9iamVjdEluc3RhbmNlKDApCiAjZWxz
ZQotOiBIVE1MRWxlbWVudEltcGwoZG9jKSwgbV9pbWFnZUxvYWRlcigwKQorOiBIVE1MRWxlbWVu
dEltcGwoSFRNTE5hbWVzOjpvYmplY3QoKSwgZG9jKSwgbV9pbWFnZUxvYWRlcigwKQogI2VuZGlm
CiB7CiAgICAgbmVlZFdpZGdldFVwZGF0ZSA9IGZhbHNlOwpAQCAtNTE3LDExICs1MDcsNiBAQCBI
VE1MT2JqZWN0RWxlbWVudEltcGw6On5IVE1MT2JqZWN0RWxlbWVuCiAgICAgZGVsZXRlIG1faW1h
Z2VMb2FkZXI7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MT2JqZWN0RWxlbWVudEltcGw6OmlkKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gSURfT0JKRUNUOwotfQotCiAjaWYgQVBQTEVfQ0hBTkdFUwog
S0pTOjpCaW5kaW5nczo6SW5zdGFuY2UgKkhUTUxPYmplY3RFbGVtZW50SW1wbDo6Z2V0T2JqZWN0
SW5zdGFuY2UoKSBjb25zdAogewpAQCAtOTQ0LDcgKzkyOSw3IEBAIHZvaWQgSFRNTE9iamVjdEVs
ZW1lbnRJbXBsOjpzZXRXaWR0aChjb24KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogSFRNTFBhcmFt
RWxlbWVudEltcGw6OkhUTUxQYXJhbUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0gICAg
OiBIVE1MRWxlbWVudEltcGwoZG9jKQorICAgIDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6
cGFyYW0oKSwgZG9jKQogewogfQogCkBAIC05NTIsMTEgKzkzNyw2IEBAIEhUTUxQYXJhbUVsZW1l
bnRJbXBsOjp+SFRNTFBhcmFtRWxlbWVudEkKIHsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxQYXJh
bUVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX1BBUkFNOwotfQotCiB2
b2lkIEhUTUxQYXJhbUVsZW1lbnRJbXBsOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRy
aWJ1dGVJbXBsICphdHRyKQogewogICAgIHN3aXRjaCggYXR0ci0+aWQoKSApCkluZGV4OiBraHRt
bC9odG1sL2h0bWxfb2JqZWN0aW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9X
ZWJDb3JlL2todG1sL2h0bWwvaHRtbF9vYmplY3RpbXBsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuMzEKZGlmZiAtdSAtcCAtcjEuMzEga2h0bWwvaHRtbC9odG1sX29iamVjdGltcGwuaAotLS0g
a2h0bWwvaHRtbC9odG1sX29iamVjdGltcGwuaAkxMSBNYXkgMjAwNSAwNTo0OTozNCAtMDAwMAkx
LjMxCisrKyBraHRtbC9odG1sL2h0bWxfb2JqZWN0aW1wbC5oCTIzIEp1biAyMDA1IDAxOjEwOjU5
IC0wMDAwCkBAIC00MiwxMSArNDIsOCBAQCBjbGFzcyBIVE1MQXBwbGV0RWxlbWVudEltcGwgOiBw
dWJsaWMgSFRNCiB7CiBwdWJsaWM6CiAgICAgSFRNTEFwcGxldEVsZW1lbnRJbXBsKERvY3VtZW50
UHRyICpkb2MpOwotCiAgICAgfkhUTUxBcHBsZXRFbGVtZW50SW1wbCgpOwogCi0gICAgdmlydHVh
bCBJZCBpZCgpIGNvbnN0OwotCiAgICAgdmlydHVhbCBib29sIG1hcFRvRW50cnkoSWQgYXR0ciwg
TWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHBh
cnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKnRva2VuKTsKICAgICAKQEAg
LTExMiwxMSArMTA5LDggQEAgY2xhc3MgSFRNTEVtYmVkRWxlbWVudEltcGwgOiBwdWJsaWMgSFRN
TAogewogcHVibGljOgogICAgIEhUTUxFbWJlZEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2Mp
OwotCiAgICAgfkhUTUxFbWJlZEVsZW1lbnRJbXBsKCk7CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkg
Y29uc3Q7Ci0KICAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShJZCBhdHRyLCBNYXBwZWRBdHRy
aWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRB
dHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqYXR0cik7CiAKQEAgLTE0NiwxMSArMTQwLDgg
QEAgY2xhc3MgSFRNTE9iamVjdEVsZW1lbnRJbXBsIDogcHVibGljIEhUTQogewogcHVibGljOgog
ICAgIEhUTUxPYmplY3RFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKTsKLQogICAgIH5IVE1M
T2JqZWN0RWxlbWVudEltcGwoKTsKIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKLQogICAg
IEhUTUxGb3JtRWxlbWVudEltcGwgKmZvcm0oKSBjb25zdDsKIAogICAgIHZpcnR1YWwgYm9vbCBt
YXBUb0VudHJ5KElkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0OwpA
QCAtMjQ3LDExICsyMzgsOCBAQCBjbGFzcyBIVE1MUGFyYW1FbGVtZW50SW1wbCA6IHB1YmxpYyBI
VE1MCiAgICAgZnJpZW5kIGNsYXNzIEhUTUxBcHBsZXRFbGVtZW50SW1wbDsKIHB1YmxpYzoKICAg
ICBIVE1MUGFyYW1FbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKTsKLQogICAgIH5IVE1MUGFy
YW1FbGVtZW50SW1wbCgpOwogCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwotCiAgICAgdmly
dHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKnRva2Vu
KTsKIAogICAgIHZpcnR1YWwgYm9vbCBpc1VSTEF0dHJpYnV0ZShBdHRyaWJ1dGVJbXBsICphdHRy
KSBjb25zdDsKSW5kZXg6IGtodG1sL2h0bWwvaHRtbF90YWJsZWltcGwuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbF90YWJsZWltcGwuY3Bw
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjUzCmRpZmYgLXUgLXAgLXIxLjUzIGtodG1sL2h0bWwv
aHRtbF90YWJsZWltcGwuY3BwCi0tLSBraHRtbC9odG1sL2h0bWxfdGFibGVpbXBsLmNwcAkxNyBK
dW4gMjAwNSAyMTo1NTozOSAtMDAwMAkxLjUzCisrKyBraHRtbC9odG1sL2h0bWxfdGFibGVpbXBs
LmNwcAkyMyBKdW4gMjAwNSAwMToxMTowMCAtMDAwMApAQCAtNTEsNyArNTEsNyBAQCB1c2luZyBu
YW1lc3BhY2Uga2h0bWw7CiBuYW1lc3BhY2UgRE9NIHsKIAogSFRNTFRhYmxlRWxlbWVudEltcGw6
OkhUTUxUYWJsZUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0gIDogSFRNTEVsZW1lbnRJ
bXBsKGRvYykKKyAgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjp0YWJsZSgpLCBkb2MpCiB7
CiAgICAgdENhcHRpb24gPSAwOwogICAgIGhlYWQgPSAwOwpAQCAtNzMsMTEgKzczLDYgQEAgSFRN
TFRhYmxlRWxlbWVudEltcGw6On5IVE1MVGFibGVFbGVtZW50SQogewogfQogCi1Ob2RlSW1wbDo6
SWQgSFRNTFRhYmxlRWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfVEFC
TEU7Ci19Ci0KIE5vZGVJbXBsKiBIVE1MVGFibGVFbGVtZW50SW1wbDo6c2V0Q2FwdGlvbiggSFRN
TFRhYmxlQ2FwdGlvbkVsZW1lbnRJbXBsICpjICkKIHsKICAgICBpbnQgZXhjZXB0aW9uY29kZSA9
IDA7CkBAIC0xNDYsNyArMTQxLDcgQEAgSFRNTEVsZW1lbnRJbXBsICpIVE1MVGFibGVFbGVtZW50
SW1wbDo6YwogICAgIGlmKCFoZWFkKQogICAgIHsKICAgICAgICAgaW50IGV4Y2VwdGlvbmNvZGUg
PSAwOwotICAgICAgICBoZWFkID0gbmV3IEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbChkb2NQ
dHIoKSwgSURfVEhFQUQsIHRydWUgLyogaW1wbGljaXQgKi8pOworICAgICAgICBoZWFkID0gbmV3
IEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbChIVE1MTmFtZXM6OnRoZWFkKCksIGRvY1B0cigp
LCB0cnVlIC8qIGltcGxpY2l0ICovKTsKICAgICAgICAgaWYoZm9vdCkKICAgICAgICAgICAgIGlu
c2VydEJlZm9yZSggaGVhZCwgZm9vdCwgZXhjZXB0aW9uY29kZSApOwogICAgICAgICBlbHNlIGlm
KGZpcnN0Qm9keSkKQEAgLTE3MSw3ICsxNjYsNyBAQCBIVE1MRWxlbWVudEltcGwgKkhUTUxUYWJs
ZUVsZW1lbnRJbXBsOjpjCiAgICAgaWYoIWZvb3QpCiAgICAgewogICAgICAgICBpbnQgZXhjZXB0
aW9uY29kZSA9IDA7Ci0gICAgICAgIGZvb3QgPSBuZXcgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJ
bXBsKGRvY1B0cigpLCBJRF9URk9PVCwgdHJ1ZSAvKmltcGxpY2l0ICovKTsKKyAgICAgICAgZm9v
dCA9IG5ldyBIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGwoSFRNTE5hbWVzOjp0Zm9vdCgpLCBk
b2NQdHIoKSwgdHJ1ZSAvKmltcGxpY2l0ICovKTsKICAgICAgICAgaWYoZmlyc3RCb2R5KQogICAg
ICAgICAgICAgaW5zZXJ0QmVmb3JlKCBmb290LCBmaXJzdEJvZHksIGV4Y2VwdGlvbmNvZGUgKTsK
ICAgICAgICAgZWxzZQpAQCAtMjE2LDcgKzIxMSw3IEBAIEhUTUxFbGVtZW50SW1wbCAqSFRNTFRh
YmxlRWxlbWVudEltcGw6OmkKICAgICAvLyAobm90ZTogdGhpcyBpcyBkaWZmZXJlbnQgZnJvbSAi
aWYgdGhlIHRhYmxlIGhhcyBubyBzZWN0aW9ucyIsIHNpbmNlIHdlIGNhbiBoYXZlCiAgICAgLy8g
PFRBQkxFPjxUUj4pCiAgICAgaWYoIWZpcnN0Qm9keSAmJiAhaGVhZCAmJiAhZm9vdCAmJiAhaGFz
Q2hpbGROb2RlcygpKQotICAgICAgICBzZXRUQm9keSggbmV3IEhUTUxUYWJsZVNlY3Rpb25FbGVt
ZW50SW1wbChkb2NQdHIoKSwgSURfVEJPRFksIHRydWUgLyogaW1wbGljaXQgKi8pICk7CisgICAg
ICAgIHNldFRCb2R5KCBuZXcgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsKEhUTUxOYW1lczo6
dGJvZHkoKSwgZG9jUHRyKCksIHRydWUgLyogaW1wbGljaXQgKi8pICk7CiAKICAgICAvL2tkRGVi
dWcoNjAzMCkgPDwga19mdW5jaW5mbyA8PCBpbmRleCA8PCBlbmRsOwogICAgIC8vIElFIHRyZWF0
cyBpbmRleD0tMSBhcyBkZWZhdWx0IHZhbHVlIG1lYW5pbmcgJ2FwcGVuZCBhZnRlciBsYXN0JwpA
QCAtMjMwLDcgKzIyNSw4IEBAIEhUTUxFbGVtZW50SW1wbCAqSFRNTFRhYmxlRWxlbWVudEltcGw6
OmkKICAgICB7CiAJLy8gdGhlcmUgY291bGQgYmUgMiB0Zm9vdCBlbGVtZW50cyBpbiB0aGUgdGFi
bGUuIE9ubHkgdGhlIGZpcnN0IG9uZSBpcyB0aGUgImZvb3QiLCB0aGF0J3Mgd2h5IHdlIGhhdmUg
dGhlIG1vcmUKIAkvLyBjb21wbGljYXRlZCBpZiBzdGF0ZW1lbnQgYmVsb3cuCi0gICAgICAgIGlm
ICggbm9kZSAhPSBmb290ICYmIChub2RlLT5pZCgpID09IElEX1RIRUFEIHx8IG5vZGUtPmlkKCkg
PT0gSURfVEZPT1QgfHwgbm9kZS0+aWQoKSA9PSBJRF9UQk9EWSkgKQorICAgICAgICBpZiAobm9k
ZSAhPSBmb290ICYmIChub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGhlYWQoKSkgfHwgbm9k
ZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRmb290KCkpIHx8IAorICAgICAgICAgICAgbm9kZS0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRib2R5KCkpKSkKICAgICAgICAgewogICAgICAgICAgICAg
c2VjdGlvbiA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbCAqPihub2Rl
KTsKICAgICAgICAgICAgIGxhc3RTZWN0aW9uID0gc2VjdGlvbjsKQEAgLTI3Niw4ICsyNzIsOCBA
QCB2b2lkIEhUTUxUYWJsZUVsZW1lbnRJbXBsOjpkZWxldGVSb3coIGxvCiAgICAgYm9vbCBmb3Vu
ZCA9IGZhbHNlOwogICAgIGZvciAoIDsgbm9kZSA7IG5vZGUgPSBub2RlLT5uZXh0U2libGluZygp
ICkKICAgICB7Ci0gICAgICAgIGlmICggbm9kZSAhPSBmb290ICYmIChub2RlLT5pZCgpID09IElE
X1RIRUFEIHx8IG5vZGUtPmlkKCkgPT0gSURfVEZPT1QgfHwgbm9kZS0+aWQoKSA9PSBJRF9UQk9E
WSkgKQotICAgICAgICB7CisgICAgICAgIGlmIChub2RlICE9IGZvb3QgJiYgKG5vZGUtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjp0aGVhZCgpKSB8fCBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
dGZvb3QoKSkgfHwgCisgICAgICAgICAgICBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGJv
ZHkoKSkpKSB7CiAgICAgICAgICAgICBzZWN0aW9uID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlU2Vj
dGlvbkVsZW1lbnRJbXBsICo+KG5vZGUpOwogICAgICAgICAgICAgbGFzdFNlY3Rpb24gPSBzZWN0
aW9uOwogICAgICAgICAgICAgaW50IHJvd3MgPSBzZWN0aW9uLT5udW1Sb3dzKCk7CkBAIC0zMDks
NyArMzA1LDcgQEAgTm9kZUltcGwgKkhUTUxUYWJsZUVsZW1lbnRJbXBsOjphZGRDaGlsZAogICAg
IGtkRGVidWcoIDYwMzAgKSA8PCBub2RlTmFtZSgpLnN0cmluZygpIDw8ICIoVGFibGUpOjphZGRD
aGlsZCggIiA8PCBjaGlsZC0+bm9kZU5hbWUoKS5zdHJpbmcoKSA8PCAiICkiIDw8IGVuZGw7CiAj
ZW5kaWYKIAotICAgIGlmIChjaGlsZC0+aWQoKSA9PSBJRF9GT1JNKSB7CisgICAgaWYgKGNoaWxk
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Zm9ybSgpKSkgewogICAgICAgICAvLyBGaXJzdCBhZGQg
dGhlIGNoaWxkLgogICAgICAgICBIVE1MRWxlbWVudEltcGw6OmFkZENoaWxkKGNoaWxkKTsKICAg
ICAgICAgLy8gTm93IHNpbXBseSByZXR1cm4gb3Vyc2VsdmVzIGFzIHRoZSBuZXdub2RlLiAgVGhp
cyBoYXMgdGhlIGVmZmVjdCBvZgpAQCAtMzM3LDI4ICszMzMsMTUgQEAgTm9kZUltcGwgKkhUTUxU
YWJsZUVsZW1lbnRJbXBsOjphZGRDaGlsZAogCiAgICAgaW50IGV4Y2VwdGlvbmNvZGUgPSAwOwog
ICAgIE5vZGVJbXBsICpyZXR2YWwgPSBhcHBlbmRDaGlsZCggY2hpbGQsIGV4Y2VwdGlvbmNvZGUg
KTsKLSAgICBpZiAoIHJldHZhbCApIHsKLQlzd2l0Y2goY2hpbGQtPmlkKCkpIHsKLQljYXNlIElE
X0NBUFRJT046Ci0JICAgIGlmICggIXRDYXB0aW9uICkKLQkJdENhcHRpb24gPSBzdGF0aWNfY2Fz
dDxIVE1MVGFibGVDYXB0aW9uRWxlbWVudEltcGwgKj4oY2hpbGQpOwotCSAgICBicmVhazsKLQlj
YXNlIElEX0NPTDoKLQljYXNlIElEX0NPTEdST1VQOgotCSAgICBicmVhazsKLQljYXNlIElEX1RI
RUFEOgotCSAgICBpZiAoICFoZWFkICkKLQkJaGVhZCA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZVNl
Y3Rpb25FbGVtZW50SW1wbCAqPihjaGlsZCk7Ci0JICAgIGJyZWFrOwotCWNhc2UgSURfVEZPT1Q6
Ci0JICAgIGlmICggIWZvb3QgKQotCQlmb290ID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlU2VjdGlv
bkVsZW1lbnRJbXBsICo+KGNoaWxkKTsKLQkgICAgYnJlYWs7Ci0JY2FzZSBJRF9UQk9EWToKLQkg
ICAgaWYgKCAhZmlyc3RCb2R5ICkKLQkJZmlyc3RCb2R5ID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxl
U2VjdGlvbkVsZW1lbnRJbXBsICo+KGNoaWxkKTsKLQkgICAgYnJlYWs7Ci0JfQorICAgIGlmIChy
ZXR2YWwpIHsKKyAgICAgICAgaWYgKCF0Q2FwdGlvbiAmJiBjaGlsZC0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OmNhcHRpb24oKSkpCisgICAgICAgICAgICB0Q2FwdGlvbiA9IHN0YXRpY19jYXN0PEhU
TUxUYWJsZUNhcHRpb25FbGVtZW50SW1wbCAqPihjaGlsZCk7CisgICAgICAgIGVsc2UgaWYgKCFo
ZWFkICYmIGNoaWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGhlYWQoKSkpCisgICAgICAgICAg
ICBoZWFkID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsICo+KGNoaWxk
KTsKKyAgICAgICAgZWxzZSBpZiAoIWZvb3QgJiYgY2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVz
Ojp0Zm9vdCgpKSkKKyAgICAgICAgICAgIGZvb3QgPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVTZWN0
aW9uRWxlbWVudEltcGwgKj4oY2hpbGQpOworCWVsc2UgaWYgKCFmaXJzdEJvZHkgJiYgY2hpbGQt
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0Ym9keSgpKSkKKwkgICAgZmlyc3RCb2R5ID0gc3RhdGlj
X2Nhc3Q8SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsICo+KGNoaWxkKTsKICAgICB9CiAgICAg
cmV0dXJuIHJldHZhbDsKIH0KQEAgLTgwMiwyNiArNzg1LDE5IEBAIHZvaWQgSFRNTFRhYmxlUGFy
dEVsZW1lbnRJbXBsOjpwYXJzZU1hcHAKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1IVE1MVGFi
bGVTZWN0aW9uRWxlbWVudEltcGw6OkhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbChEb2N1bWVu
dFB0ciAqZG9jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdXNob3J0IHRhZ2lkLCBib29sIGltcGxpY2l0KQotICAgIDogSFRNTFRhYmxl
UGFydEVsZW1lbnRJbXBsKGRvYykKK0hUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbDo6SFRNTFRh
YmxlU2VjdGlvbkVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3Vt
ZW50UHRyICpkb2MsIGJvb2wgaW1wbGljaXQpCisgICAgOiBIVE1MVGFibGVQYXJ0RWxlbWVudElt
cGwodGFnTmFtZSwgZG9jKQogewotICAgIF9pZCA9IHRhZ2lkOwogICAgIG1faW1wbGljaXQgPSBp
bXBsaWNpdDsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbDo6
aWQoKSBjb25zdAotewotICAgIHJldHVybiBfaWQ7Ci19Ci0KIE5vZGVJbXBsICpIVE1MVGFibGVT
ZWN0aW9uRWxlbWVudEltcGw6OmFkZENoaWxkKE5vZGVJbXBsICpjaGlsZCkKIHsKICNpZmRlZiBE
RUJVR19MQVlPVVQKICAgICBrZERlYnVnKCA2MDMwICkgPDwgbm9kZU5hbWUoKS5zdHJpbmcoKSA8
PCAiKFRib2R5KTo6YWRkQ2hpbGQoICIgPDwgY2hpbGQtPm5vZGVOYW1lKCkuc3RyaW5nKCkgPDwg
IiApIiA8PCBlbmRsOwogI2VuZGlmCiAKLSAgICBpZiAoY2hpbGQtPmlkKCkgPT0gSURfRk9STSkg
eworICAgIGlmIChjaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZvcm0oKSkpIHsKICAgICAg
ICAgLy8gRmlyc3QgYWRkIHRoZSBjaGlsZC4KICAgICAgICAgSFRNTEVsZW1lbnRJbXBsOjphZGRD
aGlsZChjaGlsZCk7CiAgICAgICAgIC8vIE5vdyBzaW1wbHkgcmV0dXJuIG91cnNlbHZlcyBhcyB0
aGUgbmV3bm9kZS4gIFRoaXMgaGFzIHRoZSBlZmZlY3Qgb2YKQEAgLTg3Nyw3ICs4NTMsNyBAQCBp
bnQgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsOjpudW1Sb3dzCiAgICAgaW50IHJvd3MgPSAw
OwogICAgIGNvbnN0IE5vZGVJbXBsICpuID0gZmlyc3RDaGlsZCgpOwogICAgIHdoaWxlIChuKSB7
Ci0gICAgICAgIGlmIChuLT5pZCgpID09IElEX1RSKQorICAgICAgICBpZiAobi0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OnRyKCkpKQogICAgICAgICAgICAgcm93cysrOwogICAgICAgICBuID0gbi0+
bmV4dFNpYmxpbmcoKTsKICAgICB9CkBAIC05MzIsMTggKzkwOCwxMyBAQCBTaGFyZWRQdHI8SFRN
TENvbGxlY3Rpb25JbXBsPiBIVE1MVGFibGVTCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotTm9k
ZUltcGw6OklkIEhUTUxUYWJsZVJvd0VsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIElEX1RSOwotfQotCiBOb2RlSW1wbCAqSFRNTFRhYmxlUm93RWxlbWVudEltcGw6OmFkZENo
aWxkKE5vZGVJbXBsICpjaGlsZCkKIHsKICNpZmRlZiBERUJVR19MQVlPVVQKICAgICBrZERlYnVn
KCA2MDMwICkgPDwgbm9kZU5hbWUoKS5zdHJpbmcoKSA8PCAiKFRyb3cpOjphZGRDaGlsZCggIiA8
PCBjaGlsZC0+bm9kZU5hbWUoKS5zdHJpbmcoKSA8PCAiICkiIDw8IGVuZGw7CiAjZW5kaWYKIAot
ICAgIGlmIChjaGlsZC0+aWQoKSA9PSBJRF9GT1JNKSB7CisgICAgaWYgKGNoaWxkLT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6Zm9ybSgpKSkgewogICAgICAgICAvLyBGaXJzdCBhZGQgdGhlIGNoaWxk
LgogICAgICAgICBIVE1MRWxlbWVudEltcGw6OmFkZENoaWxkKGNoaWxkKTsKICAgICAgICAgLy8g
Tm93IHNpbXBseSByZXR1cm4gb3Vyc2VsdmVzIGFzIHRoZSBuZXdub2RlLiAgVGhpcyBoYXMgdGhl
IGVmZmVjdCBvZgpAQCAtOTU4LDE2ICs5MjksMTYgQEAgbG9uZyBIVE1MVGFibGVSb3dFbGVtZW50
SW1wbDo6cm93SW5kZXgoKQogICAgIGludCBySW5kZXggPSAwOwogCiAgICAgTm9kZUltcGwgKnRh
YmxlID0gcGFyZW50Tm9kZSgpOwotICAgIGlmICggIXRhYmxlICkKKyAgICBpZiAoIXRhYmxlKQog
CXJldHVybiAtMTsKICAgICB0YWJsZSA9IHRhYmxlLT5wYXJlbnROb2RlKCk7Ci0gICAgaWYgKCAh
dGFibGUgfHwgdGFibGUtPmlkKCkgIT0gSURfVEFCTEUgKQorICAgIGlmICghdGFibGUgfHwgIXRh
YmxlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGFibGUoKSkpCiAJcmV0dXJuIC0xOwogCiAgICAg
SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsICpmb290ID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxl
RWxlbWVudEltcGwgKj4odGFibGUpLT50Rm9vdCgpOwogICAgIE5vZGVJbXBsICpub2RlID0gdGFi
bGUtPmZpcnN0Q2hpbGQoKTsKLSAgICB3aGlsZSAoIG5vZGUgKSB7Ci0gICAgICAgIGlmICggbm9k
ZSAhPSBmb290ICYmIChub2RlLT5pZCgpID09IElEX1RIRUFEIHx8IG5vZGUtPmlkKCkgPT0gSURf
VEZPT1QgfHwgbm9kZS0+aWQoKSA9PSBJRF9UQk9EWSkgKSB7CisgICAgd2hpbGUgKG5vZGUpIHsK
KyAgICAgICAgaWYgKG5vZGUgIT0gZm9vdCAmJiAobm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
OnRoZWFkKCkpIHx8IG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0Zm9vdCgpKSB8fCBub2Rl
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGJvZHkoKSkpKSB7CiAJICAgIEhUTUxUYWJsZVNlY3Rp
b25FbGVtZW50SW1wbCogc2VjdGlvbiA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZVNlY3Rpb25FbGVt
ZW50SW1wbCAqPihub2RlKTsKIAkgICAgY29uc3QgTm9kZUltcGwgKnJvdyA9IHNlY3Rpb24tPmZp
cnN0Q2hpbGQoKTsKIAkgICAgd2hpbGUgKCByb3cgKSB7CkBAIC05OTYsNyArOTY3LDcgQEAgbG9u
ZyBIVE1MVGFibGVSb3dFbGVtZW50SW1wbDo6c2VjdGlvblJvdwogICAgIGNvbnN0IE5vZGVJbXBs
ICpuID0gdGhpczsKICAgICBkbyB7CiAgICAgICAgIG4gPSBuLT5wcmV2aW91c1NpYmxpbmcoKTsK
LSAgICAgICAgaWYgKG4gJiYgbi0+aXNFbGVtZW50Tm9kZSgpICYmIG4tPmlkKCkgPT0gSURfVFIp
CisgICAgICAgIGlmIChuICYmIG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0cigpKSkKICAgICAg
ICAgICAgIHJJbmRleCsrOwogICAgIH0KICAgICB3aGlsZSAobik7CkBAIC0xMDEzLDcgKzk4NCw3
IEBAIEhUTUxFbGVtZW50SW1wbCAqSFRNTFRhYmxlUm93RWxlbWVudEltcGwKICAgICAgICAgZXhj
ZXB0aW9uY29kZSA9IERPTUV4Y2VwdGlvbjo6SU5ERVhfU0laRV9FUlI7IC8vIHBlciB0aGUgRE9N
CiAgICAgZWxzZQogICAgIHsKLSAgICAgICAgYyA9IG5ldyBIVE1MVGFibGVDZWxsRWxlbWVudElt
cGwoZG9jUHRyKCksIElEX1REKTsKKyAgICAgICAgYyA9IG5ldyBIVE1MVGFibGVDZWxsRWxlbWVu
dEltcGwoSFRNTE5hbWVzOjp0ZCgpLCBkb2NQdHIoKSk7CiAgICAgICAgIGlmKG51bUNlbGxzID09
IGluZGV4IHx8IGluZGV4ID09IC0xKQogICAgICAgICAgICAgYXBwZW5kQ2hpbGQoYywgZXhjZXB0
aW9uY29kZSk7CiAgICAgICAgIGVsc2UgewpAQCAtMTEwMywxNSArMTA3NCwxNCBAQCB2b2lkIEhU
TUxUYWJsZVJvd0VsZW1lbnRJbXBsOjpzZXRWQWxpZ24oCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
IAotSFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsOjpIVE1MVGFibGVDZWxsRWxlbWVudEltcGwoRG9j
dW1lbnRQdHIgKmRvYywgaW50IHRhZykKLSAgOiBIVE1MVGFibGVQYXJ0RWxlbWVudEltcGwoZG9j
KQorSFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsOjpIVE1MVGFibGVDZWxsRWxlbWVudEltcGwoY29u
c3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnRQdHIgKmRvYykKKyAgOiBIVE1MVGFi
bGVQYXJ0RWxlbWVudEltcGwodGFnTmFtZSwgZG9jKQogewotICBfY29sID0gLTE7Ci0gIF9yb3cg
PSAtMTsKLSAgY1NwYW4gPSByU3BhbiA9IDE7Ci0gIF9pZCA9IHRhZzsKLSAgcm93SGVpZ2h0ID0g
MDsKLSAgbV9zb2xpZCA9IGZhbHNlOworICAgIF9jb2wgPSAtMTsKKyAgICBfcm93ID0gLTE7Cisg
ICAgY1NwYW4gPSByU3BhbiA9IDE7CisgICAgcm93SGVpZ2h0ID0gMDsKKyAgICBtX3NvbGlkID0g
ZmFsc2U7CiB9CiAKIEhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbDo6fkhUTUxUYWJsZUNlbGxFbGVt
ZW50SW1wbCgpCkBAIC0xMTIyLDcgKzEwOTIsNyBAQCBsb25nIEhUTUxUYWJsZUNlbGxFbGVtZW50
SW1wbDo6Y2VsbEluZGV4CiB7CiAgICAgaW50IGluZGV4ID0gMDsKICAgICBmb3IgKGNvbnN0IE5v
ZGVJbXBsICogbm9kZSA9IHByZXZpb3VzU2libGluZygpOyBub2RlOyBub2RlID0gbm9kZS0+cHJl
dmlvdXNTaWJsaW5nKCkpIHsKLSAgICAgICAgaWYgKG5vZGUtPmlkKCkgPT0gSURfVEQgfHwgbm9k
ZS0+aWQoKSA9PSBJRF9USCkKKyAgICAgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVz
Ojp0ZCgpKSB8fCBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGgoKSkpCiAgICAgICAgICAg
ICBpbmRleCsrOwogICAgIH0KICAgICAKQEAgLTExODksOSArMTE1OSw5IEBAIHZvaWQgSFRNTFRh
YmxlQ2VsbEVsZW1lbnRJbXBsOjpwYXJzZU1hcHAKIC8vIHVzZWQgYnkgdGFibGUgY2VsbHMgdG8g
c2hhcmUgc3R5bGUgZGVjbHMgY3JlYXRlZCBieSB0aGUgZW5jbG9zaW5nIHRhYmxlLgogQ1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb25JbXBsKiBIVE1MVGFibGVDZWxsRWxlbWVudEltcGw6OmFkZGl0
aW9uYWxBdHRyaWJ1dGVTdHlsZURlY2woKQogewotICAgIEhUTUxFbGVtZW50SW1wbCogcCA9IHN0
YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCo+KHBhcmVudE5vZGUoKSk7Ci0gICAgd2hpbGUocCAm
JiBwLT5pZCgpICE9IElEX1RBQkxFKQotICAgICAgICBwID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1l
bnRJbXBsKj4ocC0+cGFyZW50Tm9kZSgpKTsKKyAgICBOb2RlSW1wbCogcCA9IHBhcmVudE5vZGUo
KTsKKyAgICB3aGlsZSAocCAmJiAhcC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRhYmxlKCkpKQor
ICAgICAgICBwID0gcC0+cGFyZW50Tm9kZSgpOwogCiAgICAgaWYgKHApIHsKICAgICAgICAgSFRN
TFRhYmxlRWxlbWVudEltcGwqIHRhYmxlID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlRWxlbWVudElt
cGwqPihwKTsKQEAgLTEyMDEsMTUgKzExNzEsNiBAQCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bkltcGwqIEhUTUxUYWJsCiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgSFRNTFRhYmxlQ2VsbEVs
ZW1lbnRJbXBsOjphdHRhY2goKQotewotICAgIEhUTUxFbGVtZW50SW1wbCogcCA9IHN0YXRpY19j
YXN0PEhUTUxFbGVtZW50SW1wbCo+KHBhcmVudE5vZGUoKSk7Ci0gICAgd2hpbGUocCAmJiBwLT5p
ZCgpICE9IElEX1RBQkxFKQotICAgICAgICBwID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBs
Kj4ocC0+cGFyZW50Tm9kZSgpKTsKLQotICAgIEhUTUxUYWJsZVBhcnRFbGVtZW50SW1wbDo6YXR0
YWNoKCk7Ci19Ci0KIGJvb2wgSFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsOjppc1VSTEF0dHJpYnV0
ZShBdHRyaWJ1dGVJbXBsICphdHRyKSBjb25zdAogewogICAgIHJldHVybiBhdHRyLT5pZCgpID09
IEFUVFJfQkFDS0dST1VORDsKQEAgLTEzNDcsMTYgKzEzMDgsMTAgQEAgdm9pZCBIVE1MVGFibGVD
ZWxsRWxlbWVudEltcGw6OnNldFdpZHRoKAogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUhUTUxU
YWJsZUNvbEVsZW1lbnRJbXBsOjpIVE1MVGFibGVDb2xFbGVtZW50SW1wbChEb2N1bWVudFB0ciAq
ZG9jLCB1c2hvcnQgaSkKLSAgICA6IEhUTUxUYWJsZVBhcnRFbGVtZW50SW1wbChkb2MpCitIVE1M
VGFibGVDb2xFbGVtZW50SW1wbDo6SFRNTFRhYmxlQ29sRWxlbWVudEltcGwoY29uc3QgUXVhbGlm
aWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnRQdHIgKmRvYykKKyAgICA6IEhUTUxUYWJsZVBhcnRF
bGVtZW50SW1wbCh0YWdOYW1lLCBkb2MpCiB7Ci0gICAgX2lkID0gaTsKLSAgICBfc3BhbiA9IChf
aWQgPT0gSURfQ09MR1JPVVAgPyAwIDogMSk7Ci19Ci0KLU5vZGVJbXBsOjpJZCBIVE1MVGFibGVD
b2xFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBfaWQ7CisgICAgX3NwYW4g
PSAodGFnTmFtZS5tYXRjaGVzKEhUTUxOYW1lczo6Y29sZ3JvdXAoKSkgPyAwIDogMSk7CiB9CiAK
IGJvb2wgSFRNTFRhYmxlQ29sRWxlbWVudEltcGw6Om1hcFRvRW50cnkoTm9kZUltcGw6OklkIGF0
dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0CkBAIC0xNDQ3LDExICsxNDAy
LDYgQEAgdm9pZCBIVE1MVGFibGVDb2xFbGVtZW50SW1wbDo6c2V0V2lkdGgoYwogCiAvLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCiAKLU5vZGVJbXBsOjpJZCBIVE1MVGFibGVDYXB0aW9uRWxlbWVudEltcGw6
OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfQ0FQVElPTjsKLX0KLQogYm9vbCBIVE1MVGFi
bGVDYXB0aW9uRWxlbWVudEltcGw6Om1hcFRvRW50cnkoTm9kZUltcGw6OklkIGF0dHIsIE1hcHBl
ZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0CiB7CiAgICAgaWYgKGF0dHIgPT0gQVRUUl9B
TElHTikgewpJbmRleDoga2h0bWwvaHRtbC9odG1sX3RhYmxlaW1wbC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbF90YWJsZWltcGwuaCx2CnJl
dHJpZXZpbmcgcmV2aXNpb24gMS4yMQpkaWZmIC11IC1wIC1yMS4yMSBraHRtbC9odG1sL2h0bWxf
dGFibGVpbXBsLmgKLS0tIGtodG1sL2h0bWwvaHRtbF90YWJsZWltcGwuaAkxNyBKdW4gMjAwNSAy
MTo1NTozOSAtMDAwMAkxLjIxCisrKyBraHRtbC9odG1sL2h0bWxfdGFibGVpbXBsLmgJMjMgSnVu
IDIwMDUgMDE6MTE6MDAgLTAwMDAKQEAgLTYyLDggKzYyLDYgQEAgcHVibGljOgogICAgIEhUTUxU
YWJsZUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpOwogICAgIH5IVE1MVGFibGVFbGVtZW50
SW1wbCgpOwogCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwotCiAgICAgSFRNTFRhYmxlQ2Fw
dGlvbkVsZW1lbnRJbXBsICpjYXB0aW9uKCkgY29uc3QgeyByZXR1cm4gdENhcHRpb247IH0KICAg
ICBOb2RlSW1wbCAqc2V0Q2FwdGlvbiggSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnRJbXBsICogKTsK
IApAQCAtMTQ3LDggKzE0NSw4IEBAIGNsYXNzIEhUTUxUYWJsZVBhcnRFbGVtZW50SW1wbCA6IHB1
YmxpYyAKIAogewogcHVibGljOgotICAgIEhUTUxUYWJsZVBhcnRFbGVtZW50SW1wbChEb2N1bWVu
dFB0ciAqZG9jKQotICAgICAgICA6IEhUTUxFbGVtZW50SW1wbChkb2MpCisgICAgSFRNTFRhYmxl
UGFydEVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50UHRy
ICpkb2MpCisgICAgICAgIDogSFRNTEVsZW1lbnRJbXBsKHRhZ05hbWUsIGRvYykKICAgICAgICAg
eyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShOb2RlSW1wbDo6SWQgYXR0ciwgTWFw
cGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3Q7CkBAIC0xNjAsOSArMTU4LDcgQEAgcHVi
bGljOgogY2xhc3MgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsIDogcHVibGljIEhUTUxUYWJs
ZVBhcnRFbGVtZW50SW1wbAogewogcHVibGljOgotICAgIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50
SW1wbChEb2N1bWVudFB0ciAqZG9jLCB1c2hvcnQgdGFnaWQsIGJvb2wgaW1wbGljaXQpOwotCi0g
ICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OworICAgIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1w
bChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudFB0ciAqZG9jLCBib29sIGlt
cGxpY2l0KTsKIAogICAgIHZpcnR1YWwgTm9kZUltcGwgKmFkZENoaWxkKE5vZGVJbXBsICpjaGls
ZCk7CiAgICAgCkBAIC0xODQsOSArMTgwLDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0VkFsaWdu
KCBjb25zdCBET01TdHJpbmcgJiApOwogCiAgICAga2h0bWw6OlNoYXJlZFB0cjxIVE1MQ29sbGVj
dGlvbkltcGw+IHJvd3MoKTsKLQotcHJvdGVjdGVkOgotICAgIHVzaG9ydCBfaWQ7CiB9OwogCiAv
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xOTUsOSArMTg4LDcgQEAgY2xhc3MgSFRNTFRhYmxlUm93
RWxlbWVudEltcGwgOiBwdWJsaWMgSAogewogcHVibGljOgogICAgIEhUTUxUYWJsZVJvd0VsZW1l
bnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0gICAgICAgIDogSFRNTFRhYmxlUGFydEVsZW1lbnRJ
bXBsKGRvYykge30KLQotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKKyAgICAgICAgOiBIVE1M
VGFibGVQYXJ0RWxlbWVudEltcGwoSFRNTE5hbWVzOjp0cigpLCBkb2MpIHt9CiAKICAgICB2aXJ0
dWFsIE5vZGVJbXBsICphZGRDaGlsZChOb2RlSW1wbCAqY2hpbGQpOwogICAgIApAQCAtMjM4LDcg
KzIyOSw3IEBAIHByb3RlY3RlZDoKIGNsYXNzIEhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbCA6IHB1
YmxpYyBIVE1MVGFibGVQYXJ0RWxlbWVudEltcGwKIHsKIHB1YmxpYzoKLSAgICBIVE1MVGFibGVD
ZWxsRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgaW50IHRhZ0lkKTsKKyAgICBIVE1MVGFi
bGVDZWxsRWxlbWVudEltcGwoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnRQ
dHIgKmRvYyk7CiAgICAgfkhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbCgpOwogCiAgICAgLy8gIyMj
IEZJWCB0aGVzZSB0d28uLi4KQEAgLTI1MSwxNCArMjQyLDEwIEBAIHB1YmxpYzoKIAogICAgIGlu
dCBjb2xTcGFuKCkgY29uc3QgeyByZXR1cm4gY1NwYW47IH0KICAgICBpbnQgcm93U3BhbigpIGNv
bnN0IHsgcmV0dXJuIHJTcGFuOyB9Ci0gICAgCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0IHsg
cmV0dXJuIF9pZDsgfQotICAgIAorCiAgICAgdmlydHVhbCBib29sIG1hcFRvRW50cnkoTm9kZUlt
cGw6OklkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0OwogICAgIHZp
cnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICphdHRy
KTsKIAotICAgIHZpcnR1YWwgdm9pZCBhdHRhY2goKTsKLQogICAgIC8vIHVzZWQgYnkgdGFibGUg
Y2VsbHMgdG8gc2hhcmUgc3R5bGUgZGVjbHMgY3JlYXRlZCBieSB0aGUgZW5jbG9zaW5nIHRhYmxl
LgogICAgIHZpcnR1YWwgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25JbXBsKiBhZGRpdGlvbmFs
QXR0cmlidXRlU3R5bGVEZWNsKCk7CiAgICAgCkBAIC0zMTEsNyArMjk4LDYgQEAgcHJvdGVjdGVk
OgogICAgIGludCBfY29sOwogICAgIGludCByU3BhbjsKICAgICBpbnQgY1NwYW47Ci0gICAgaW50
IF9pZDsKICAgICBpbnQgcm93SGVpZ2h0OwogICAgIGJvb2wgbV9zb2xpZCAgICAgICAgOiAxOwog
fTsKQEAgLTMyMSw5ICszMDcsNyBAQCBwcm90ZWN0ZWQ6CiBjbGFzcyBIVE1MVGFibGVDb2xFbGVt
ZW50SW1wbCA6IHB1YmxpYyBIVE1MVGFibGVQYXJ0RWxlbWVudEltcGwKIHsKIHB1YmxpYzoKLSAg
ICBIVE1MVGFibGVDb2xFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCB1c2hvcnQgaSk7Ci0K
LSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CisgICAgSFRNTFRhYmxlQ29sRWxlbWVudEltcGwo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnRQdHIgKmRvYyk7CiAKICAgICB2
b2lkIHNldFRhYmxlKEhUTUxUYWJsZUVsZW1lbnRJbXBsICp0KSB7IHRhYmxlID0gdDsgfQogCkBA
IC0zNTEsMTAgKzMzNSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFdpZHRoKCBjb25zdCBET01T
dHJpbmcgJiApOwogCiBwcm90ZWN0ZWQ6Ci0gICAgLy8gY291bGQgYmUgSURfQ09MIG9yIElEX0NP
TEdST1VQIC4uLiBUaGUgRE9NIGlzIG5vdCBxdWl0ZSBjbGVhciBvbgotICAgIC8vIHRoaXMsIGJ1
dCBzaW5jZSBib3RoIGVsZW1lbnRzIHdvcmsgcXVpdGUgc2ltaWxhciwgd2UgdXNlIG9uZQotICAg
IC8vIERPTUVsZW1lbnQgZm9yIHRoZW0uLi4KLSAgICB1c2hvcnQgX2lkOwogICAgIGludCBfc3Bh
bjsKICAgICBIVE1MVGFibGVFbGVtZW50SW1wbCAqdGFibGU7CiB9OwpAQCAtMzY1LDkgKzM0NSw3
IEBAIGNsYXNzIEhUTUxUYWJsZUNhcHRpb25FbGVtZW50SW1wbCA6IHB1YmwKIHsKIHB1YmxpYzoK
ICAgICBIVE1MVGFibGVDYXB0aW9uRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgICAg
ICAgOiBIVE1MVGFibGVQYXJ0RWxlbWVudEltcGwoZG9jKSB7fQotCi0gICAgdmlydHVhbCBJZCBp
ZCgpIGNvbnN0OworICAgICAgICA6IEhUTUxUYWJsZVBhcnRFbGVtZW50SW1wbChIVE1MTmFtZXM6
OmNhcHRpb24oKSwgZG9jKSB7fQogICAgIAogICAgIHZpcnR1YWwgYm9vbCBtYXBUb0VudHJ5KE5v
ZGVJbXBsOjpJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdDsKICAg
ICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAq
YXR0cik7CkluZGV4OiBraHRtbC9odG1sL2h0bWxmYWN0b3J5LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiBraHRtbC9odG1sL2h0bWxmYWN0b3J5LmNwcApkaWZmIC1OIGtodG1sL2h0bWwvaHRtbGZh
Y3RvcnkuY3BwCi0tLSAvZGV2L251bGwJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysga2h0
bWwvaHRtbC9odG1sZmFjdG9yeS5jcHAJMjMgSnVuIDIwMDUgMDE6MTE6MDAgLTAwMDAKQEAgLTAs
MCArMSwxOTcgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgSFRNTCBET00gaW1w
bGVtZW50YXRpb24gZm9yIEtERS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29t
cHV0ZXIsIEluYy4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBU
ZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4K
KyAqCisgKi8KKworI2luY2x1ZGUgImh0bWxmYWN0b3J5LmgiCisjaW5jbHVkZSAiZG9tX2RvY2lt
cGwuaCIKKworI2luY2x1ZGUgImh0bWwvaHRtbF9iYXNlaW1wbC5oIgorI2luY2x1ZGUgImh0bWwv
aHRtbF9ibG9ja2ltcGwuaCIKKyNpbmNsdWRlICJodG1sL2h0bWxfY2FudmFzaW1wbC5oIgorI2lu
Y2x1ZGUgImh0bWwvaHRtbF9kb2N1bWVudGltcGwuaCIKKyNpbmNsdWRlICJodG1sL2h0bWxfZm9y
bWltcGwuaCIKKyNpbmNsdWRlICJodG1sL2h0bWxfaGVhZGltcGwuaCIKKyNpbmNsdWRlICJodG1s
L2h0bWxfaW1hZ2VpbXBsLmgiCisjaW5jbHVkZSAiaHRtbC9odG1sX2xpc3RpbXBsLmgiCisjaW5j
bHVkZSAiaHRtbC9odG1sX21pc2NpbXBsLmgiCisjaW5jbHVkZSAiaHRtbC9odG1sX3RhYmxlaW1w
bC5oIgorI2luY2x1ZGUgImh0bWwvaHRtbF9vYmplY3RpbXBsLmgiCisKK25hbWVzcGFjZSBET00K
K3sKKworSFRNTEVsZW1lbnRJbXBsKiBIVE1MRWxlbWVudEZhY3Rvcnk6OmNyZWF0ZUhUTUxFbGVt
ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSwgRG9jdW1lbnRJbXBsKiBkb2MsIEhUTUxG
b3JtRWxlbWVudEltcGwqIGZvcm0sIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQoreworICAgIGlmICgh
ZG9jKQorICAgICAgICByZXR1cm4gMDsgLy8gRG9uJ3QgYWxsb3cgZWxlbWVudHMgdG8gZXZlciBi
ZSBtYWRlIHdpdGhvdXQgaGF2aW5nIGEgZG9jLgorCisgICAgRG9jdW1lbnRQdHIqIGRvY1B0ciA9
IGRvYy0+ZG9jUHRyKCk7CisgICAgCisgICAgaWYgKHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpodG1s
KCkpCisgICAgICAgIHJldHVybiBuZXcgSFRNTEh0bWxFbGVtZW50SW1wbChkb2NQdHIpOworICAg
IGVsc2UgaWYgKHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpoZWFkKCkpCisgICAgICAgIHJldHVybiBu
ZXcgSFRNTEhlYWRFbGVtZW50SW1wbChkb2NQdHIpOworICAgIGVsc2UgaWYgKHRhZ05hbWUgPT0g
SFRNTE5hbWVzOjpib2R5KCkpCisgICAgICAgIHJldHVybiBuZXcgSFRNTEJvZHlFbGVtZW50SW1w
bChkb2NQdHIpOworCisvLyBoZWFkIGVsZW1lbnRzCisgICAgZWxzZSBpZiAodGFnTmFtZSA9PSBI
VE1MTmFtZXM6OmJhc2UoKSkKKyAgICAgICAgcmV0dXJuIG5ldyBIVE1MQmFzZUVsZW1lbnRJbXBs
KGRvY1B0cik7CisgICAgZWxzZSBpZiAodGFnTmFtZSA9PSBIVE1MTmFtZXM6OmxpbmsoKSkKKyAg
ICAgICAgcmV0dXJuIG5ldyBIVE1MTGlua0VsZW1lbnRJbXBsKGRvY1B0cik7CisgICAgZWxzZSBp
ZiAodGFnTmFtZSA9PSBIVE1MTmFtZXM6Om1ldGEoKSkKKyAgICAgICAgcmV0dXJuIG5ldyBIVE1M
TWV0YUVsZW1lbnRJbXBsKGRvY1B0cik7CisgICAgZWxzZSBpZiAodGFnTmFtZSA9PSBIVE1MTmFt
ZXM6OnN0eWxlKCkpCisgICAgICAgIHJldHVybiBuZXcgSFRNTFN0eWxlRWxlbWVudEltcGwoZG9j
UHRyKTsKKyAgICBlbHNlIGlmICh0YWdOYW1lID09IEhUTUxOYW1lczo6dGl0bGUoKSkKKyAgICAg
ICAgcmV0dXJuIG5ldyBIVE1MVGl0bGVFbGVtZW50SW1wbChkb2NQdHIpOworCisvLyBmcmFtZXMK
KyAgICBlbHNlIGlmICh0YWdOYW1lID09IEhUTUxOYW1lczo6ZnJhbWUoKSkKKyAgICAgICAgcmV0
dXJuIG5ldyBIVE1MRnJhbWVFbGVtZW50SW1wbChkb2NQdHIpOworICAgIGVsc2UgaWYgKHRhZ05h
bWUgPT0gSFRNTE5hbWVzOjpmcmFtZXNldCgpKQorICAgICAgICByZXR1cm4gbmV3IEhUTUxGcmFt
ZVNldEVsZW1lbnRJbXBsKGRvY1B0cik7CisgICAgZWxzZSBpZiAodGFnTmFtZSA9PSBIVE1MTmFt
ZXM6OmlmcmFtZSgpKQorICAgICAgICByZXR1cm4gbmV3IEhUTUxJRnJhbWVFbGVtZW50SW1wbChk
b2NQdHIpOworCisvLyBmb3JtIGVsZW1lbnRzCisgICAgZWxzZSBpZiAodGFnTmFtZSA9PSBIVE1M
TmFtZXM6OmZvcm0oKSkKKyAgICAgICAgcmV0dXJuIG5ldyBIVE1MRm9ybUVsZW1lbnRJbXBsKGRv
Y1B0cik7CisgICAgZWxzZSBpZiAodGFnTmFtZSA9PSBIVE1MTmFtZXM6OmJ1dHRvbigpKQorICAg
ICAgICByZXR1cm4gbmV3IEhUTUxCdXR0b25FbGVtZW50SW1wbChkb2NQdHIsIGZvcm0pOworICAg
IGVsc2UgaWYgKHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpmaWVsZHNldCgpKQorICAgICAgICByZXR1
cm4gbmV3IEhUTUxGaWVsZFNldEVsZW1lbnRJbXBsKGRvY1B0ciwgZm9ybSk7CisgICAgZWxzZSBp
ZiAodGFnTmFtZSA9PSBIVE1MTmFtZXM6OmlucHV0KCkpCisgICAgICAgIHJldHVybiBuZXcgSFRN
TElucHV0RWxlbWVudEltcGwoZG9jUHRyLCBmb3JtKTsKKyAgICBlbHNlIGlmICh0YWdOYW1lID09
IEhUTUxOYW1lczo6aXNpbmRleCgpKQorICAgICAgICByZXR1cm4gbmV3IEhUTUxJc0luZGV4RWxl
bWVudEltcGwoZG9jUHRyLCBmb3JtKTsKKyAgICBlbHNlIGlmICh0YWdOYW1lID09IEhUTUxOYW1l
czo6bGFiZWwoKSkKKyAgICAgICAgcmV0dXJuIG5ldyBIVE1MTGFiZWxFbGVtZW50SW1wbChkb2NQ
dHIpOworICAgIGVsc2UgaWYgKHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpsZWdlbmQoKSkKKyAgICAg
ICAgcmV0dXJuIG5ldyBIVE1MTGVnZW5kRWxlbWVudEltcGwoZG9jUHRyLCBmb3JtKTsKKyAgICBl
bHNlIGlmICh0YWdOYW1lID09IEhUTUxOYW1lczo6b3B0Z3JvdXAoKSkKKyAgICAgICAgcmV0dXJu
IG5ldyBIVE1MT3B0R3JvdXBFbGVtZW50SW1wbChkb2NQdHIsIGZvcm0pOworICAgIGVsc2UgaWYg
KHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpvcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIG5ldyBIVE1M
T3B0aW9uRWxlbWVudEltcGwoZG9jUHRyLCBmb3JtKTsKKyAgICBlbHNlIGlmICh0YWdOYW1lID09
IEhUTUxOYW1lczo6c2VsZWN0KCkpCisgICAgICAgIHJldHVybiBuZXcgSFRNTFNlbGVjdEVsZW1l
bnRJbXBsKGRvY1B0ciwgZm9ybSk7CisgICAgZWxzZSBpZiAodGFnTmFtZSA9PSBIVE1MTmFtZXM6
OnRleHRhcmVhKCkpCisgICAgICAgIHJldHVybiBuZXcgSFRNTFRleHRBcmVhRWxlbWVudEltcGwo
ZG9jUHRyLCBmb3JtKTsKKworLy8gbGlzdHMKKyAgICBlbHNlIGlmICh0YWdOYW1lID09IEhUTUxO
YW1lczo6ZGwoKSkKKyAgICAgICAgcmV0dXJuIG5ldyBIVE1MRExpc3RFbGVtZW50SW1wbChkb2NQ
dHIpOworICAgIGVsc2UgaWYgKHRhZ05hbWUgPT0gSFRNTE5hbWVzOjp1bCgpKQorICAgICAgICBy
ZXR1cm4gbmV3IEhUTUxVTGlzdEVsZW1lbnRJbXBsKGRvY1B0cik7CisgICAgZWxzZSBpZiAodGFn
TmFtZSA9PSBIVE1MTmFtZXM6Om9sKCkpCisgICAgICAgIHJldHVybiBuZXcgSFRNTE9MaXN0RWxl
bWVudEltcGwoZG9jUHRyKTsKKyAgICBlbHNlIGlmICh0YWdOYW1lID09IEhUTUxOYW1lczo6ZGly
KCkpCisgICAgICAgIHJldHVybiBuZXcgSFRNTERpcmVjdG9yeUVsZW1lbnRJbXBsKGRvY1B0cik7
CisgICAgZWxzZSBpZiAodGFnTmFtZSA9PSBIVE1MTmFtZXM6Om1lbnUoKSkKKyAgICAgICAgcmV0
dXJuIG5ldyBIVE1MTWVudUVsZW1lbnRJbXBsKGRvY1B0cik7CisgICAgZWxzZSBpZiAodGFnTmFt
ZSA9PSBIVE1MTmFtZXM6OmxpKCkpCisgICAgICAgIHJldHVybiBuZXcgSFRNTExJRWxlbWVudElt
cGwoZG9jUHRyKTsKKworLy8gZm9ybWF0dGluZyBlbGVtZW50cyAoYmxvY2spCisgICAgZWxzZSBp
ZiAodGFnTmFtZSA9PSBIVE1MTmFtZXM6OmJsb2NrcXVvdGUoKSkKKyAgICAgICAgcmV0dXJuIG5l
dyBIVE1MQmxvY2txdW90ZUVsZW1lbnRJbXBsKGRvY1B0cik7CisgICAgZWxzZSBpZiAodGFnTmFt
ZSA9PSBIVE1MTmFtZXM6OmRpdigpKQorICAgICAgICByZXR1cm4gbmV3IEhUTUxEaXZFbGVtZW50
SW1wbChkb2NQdHIpOworICAgIGVsc2UgaWYgKHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpoMSgpIHx8
IHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpoMigpIHx8IHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpoMygp
IHx8CisgICAgICAgICAgICAgdGFnTmFtZSA9PSBIVE1MTmFtZXM6Omg0KCkgfHwgdGFnTmFtZSA9
PSBIVE1MTmFtZXM6Omg1KCkgfHwgdGFnTmFtZSA9PSBIVE1MTmFtZXM6Omg2KCkpCisgICAgICAg
IHJldHVybiBuZXcgSFRNTEhlYWRpbmdFbGVtZW50SW1wbChRdWFsaWZpZWROYW1lKG51bGxBdG9t
LCB0YWdOYW1lLCBIVE1MTmFtZXM6OnhodG1sTmFtZXNwYWNlVVJJKCkpLCBkb2NQdHIpOworICAg
IGVsc2UgaWYgKHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpocigpKQorICAgICAgICByZXR1cm4gbmV3
IEhUTUxIUkVsZW1lbnRJbXBsKGRvY1B0cik7CisgICAgZWxzZSBpZiAodGFnTmFtZSA9PSBIVE1M
TmFtZXM6OnAoKSkKKyAgICAgICAgcmV0dXJuIG5ldyBIVE1MUGFyYWdyYXBoRWxlbWVudEltcGwo
ZG9jUHRyKTsKKyAgICBlbHNlIGlmICh0YWdOYW1lID09IEhUTUxOYW1lczo6cHJlKCkgfHwgdGFn
TmFtZSA9PSBIVE1MTmFtZXM6OnhtcCgpIHx8IHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpwbGFpbnRl
eHQoKSkKKyAgICAgICAgcmV0dXJuIG5ldyBIVE1MUHJlRWxlbWVudEltcGwoUXVhbGlmaWVkTmFt
ZShudWxsQXRvbSwgdGFnTmFtZSwgSFRNTE5hbWVzOjp4aHRtbE5hbWVzcGFjZVVSSSgpKSwgZG9j
UHRyKTsKKworLy8gZm9udCBzdHVmZgorICAgIGVsc2UgaWYgKHRhZ05hbWUgPT0gSFRNTE5hbWVz
OjpiYXNlZm9udCgpKQorICAgICAgICByZXR1cm4gbmV3IEhUTUxCYXNlRm9udEVsZW1lbnRJbXBs
KGRvY1B0cik7CisgICAgZWxzZSBpZiAodGFnTmFtZSA9PSBIVE1MTmFtZXM6OmZvbnQoKSkKKyAg
ICAgICAgcmV0dXJuIG5ldyBIVE1MRm9udEVsZW1lbnRJbXBsKGRvY1B0cik7CisKKy8vIGlucy9k
ZWwKKyAgICBlbHNlIGlmICh0YWdOYW1lID09IEhUTUxOYW1lczo6ZGVsKCkgfHwgdGFnTmFtZSA9
PSBIVE1MTmFtZXM6OmlucygpKQorICAgICAgICByZXR1cm4gbmV3IEhUTUxNb2RFbGVtZW50SW1w
bChRdWFsaWZpZWROYW1lKG51bGxBdG9tLCB0YWdOYW1lLCBIVE1MTmFtZXM6OnhodG1sTmFtZXNw
YWNlVVJJKCkpLCBkb2NQdHIpOworCisvLyBhbmNob3IKKyAgICBlbHNlIGlmICh0YWdOYW1lID09
IEhUTUxOYW1lczo6YSgpKQorICAgICAgICByZXR1cm4gbmV3IEhUTUxBbmNob3JFbGVtZW50SW1w
bChkb2NQdHIpOworCisvLyBpbWFnZXMKKyAgICBlbHNlIGlmICh0YWdOYW1lID09IEhUTUxOYW1l
czo6aW1nKCkpCisgICAgICAgIHJldHVybiBuZXcgSFRNTEltYWdlRWxlbWVudEltcGwoZG9jUHRy
LCBmb3JtKTsKKyAgICBlbHNlIGlmICh0YWdOYW1lID09IEhUTUxOYW1lczo6bWFwKCkpCisgICAg
ICAgIHJldHVybiBuZXcgSFRNTE1hcEVsZW1lbnRJbXBsKGRvY1B0cik7CisgICAgZWxzZSBpZiAo
dGFnTmFtZSA9PSBIVE1MTmFtZXM6OmFyZWEoKSkKKyAgICAgICAgcmV0dXJuIG5ldyBIVE1MQXJl
YUVsZW1lbnRJbXBsKGRvY1B0cik7CisgICAgZWxzZSBpZiAodGFnTmFtZSA9PSBIVE1MTmFtZXM6
OmNhbnZhcygpKQorICAgICAgICByZXR1cm4gbmV3IEhUTUxDYW52YXNFbGVtZW50SW1wbChkb2NQ
dHIpOworCisvLyBvYmplY3RzLCBhcHBsZXRzIGFuZCBzY3JpcHRzCisgICAgZWxzZSBpZiAodGFn
TmFtZSA9PSBIVE1MTmFtZXM6OmFwcGxldCgpKQorICAgICAgICByZXR1cm4gbmV3IEhUTUxBcHBs
ZXRFbGVtZW50SW1wbChkb2NQdHIpOworICAgIGVsc2UgaWYgKHRhZ05hbWUgPT0gSFRNTE5hbWVz
OjplbWJlZCgpKQorICAgICAgICByZXR1cm4gbmV3IEhUTUxFbWJlZEVsZW1lbnRJbXBsKGRvY1B0
cik7CisgICAgZWxzZSBpZiAodGFnTmFtZSA9PSBIVE1MTmFtZXM6Om9iamVjdCgpKQorICAgICAg
ICByZXR1cm4gbmV3IEhUTUxPYmplY3RFbGVtZW50SW1wbChkb2NQdHIpOworICAgIGVsc2UgaWYg
KHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpwYXJhbSgpKQorICAgICAgICByZXR1cm4gbmV3IEhUTUxQ
YXJhbUVsZW1lbnRJbXBsKGRvY1B0cik7CisgICAgZWxzZSBpZiAodGFnTmFtZSA9PSBIVE1MTmFt
ZXM6OnNjcmlwdCgpKSB7CisgICAgICAgIEhUTUxTY3JpcHRFbGVtZW50SW1wbCogc2NyaXB0ID0g
bmV3IEhUTUxTY3JpcHRFbGVtZW50SW1wbChkb2NQdHIpOworICAgICAgICBzY3JpcHQtPnNldENy
ZWF0ZWRCeVBhcnNlcihjcmVhdGVkQnlQYXJzZXIpOworICAgICAgICByZXR1cm4gc2NyaXB0Owor
ICAgIH0KKworLy8gdGFibGVzCisgICAgZWxzZSBpZiAodGFnTmFtZSA9PSBIVE1MTmFtZXM6OnRh
YmxlKCkpCisgICAgICAgIHJldHVybiBuZXcgSFRNTFRhYmxlRWxlbWVudEltcGwoZG9jUHRyKTsK
KyAgICBlbHNlIGlmICh0YWdOYW1lID09IEhUTUxOYW1lczo6Y2FwdGlvbigpKQorICAgICAgICBy
ZXR1cm4gbmV3IEhUTUxUYWJsZUNhcHRpb25FbGVtZW50SW1wbChkb2NQdHIpOworICAgIGVsc2Ug
aWYgKHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpjb2xncm91cCgpIHx8IHRhZ05hbWUgPT0gSFRNTE5h
bWVzOjpjb2woKSkKKyAgICAgICAgcmV0dXJuIG5ldyBIVE1MVGFibGVDb2xFbGVtZW50SW1wbChR
dWFsaWZpZWROYW1lKG51bGxBdG9tLCB0YWdOYW1lLCBIVE1MTmFtZXM6OnhodG1sTmFtZXNwYWNl
VVJJKCkpLCBkb2NQdHIpOworICAgIGVsc2UgaWYgKHRhZ05hbWUgPT0gSFRNTE5hbWVzOjp0cigp
KQorICAgICAgICByZXR1cm4gbmV3IEhUTUxUYWJsZVJvd0VsZW1lbnRJbXBsKGRvY1B0cik7Cisg
ICAgZWxzZSBpZiAodGFnTmFtZSA9PSBIVE1MTmFtZXM6OnRkKCkgfHwgdGFnTmFtZSA9PSBIVE1M
TmFtZXM6OnRoKCkpCisgICAgICAgIHJldHVybiBuZXcgSFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBs
KFF1YWxpZmllZE5hbWUobnVsbEF0b20sIHRhZ05hbWUsIEhUTUxOYW1lczo6eGh0bWxOYW1lc3Bh
Y2VVUkkoKSksIGRvY1B0cik7CisgICAgZWxzZSBpZiAodGFnTmFtZSA9PSBIVE1MTmFtZXM6OnRo
ZWFkKCkgfHwgdGFnTmFtZSA9PSBIVE1MTmFtZXM6OnRib2R5KCkgfHwgdGFnTmFtZSA9PSBIVE1M
TmFtZXM6OnRmb290KCkpCisgICAgICAgIHJldHVybiBuZXcgSFRNTFRhYmxlU2VjdGlvbkVsZW1l
bnRJbXBsKFF1YWxpZmllZE5hbWUobnVsbEF0b20sIHRhZ05hbWUsIEhUTUxOYW1lczo6eGh0bWxO
YW1lc3BhY2VVUkkoKSksIGRvY1B0ciwgZmFsc2UpOworCisvLyBpbmxpbmUgZWxlbWVudHMKKyAg
ICBlbHNlIGlmICh0YWdOYW1lID09IEhUTUxOYW1lczo6YnIoKSkKKyAgICAgICAgcmV0dXJuIG5l
dyBIVE1MQlJFbGVtZW50SW1wbChkb2NQdHIpOworICAgIGVsc2UgaWYgKHRhZ05hbWUgPT0gSFRN
TE5hbWVzOjpxKCkpCisgICAgICAgIHJldHVybiBuZXcgSFRNTFF1b3RlRWxlbWVudEltcGwoZG9j
UHRyKTsKKyAgICAgICAgCisvLyBtYXJxdWVlCisgICAgZWxzZSBpZiAodGFnTmFtZSA9PSBIVE1M
TmFtZXM6Om1hcnF1ZWUoKSkKKyAgICAgICAgcmV0dXJuIG5ldyBIVE1MTWFycXVlZUVsZW1lbnRJ
bXBsKGRvY1B0cik7CisgICAKKy8vIGVsZW1lbnRzIHdpdGggbm8gc3BlY2lhbCByZXByZXNlbnRh
dGlvbiBpbiB0aGUgRE9NCisgICAgcmV0dXJuIG5ldyBIVE1MRWxlbWVudEltcGwoUXVhbGlmaWVk
TmFtZShudWxsQXRvbSwgdGFnTmFtZSwgSFRNTE5hbWVzOjp4aHRtbE5hbWVzcGFjZVVSSSgpKSwg
ZG9jUHRyKTsKKworfQorCit9CisKSW5kZXg6IGtodG1sL2h0bWwvaHRtbGZhY3RvcnkuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiBraHRtbC9odG1sL2h0bWxmYWN0b3J5LmgKZGlmZiAtTiBraHRtbC9o
dG1sL2h0bWxmYWN0b3J5LmgKLS0tIC9kZXYvbnVsbAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAw
CisrKyBraHRtbC9odG1sL2h0bWxmYWN0b3J5LmgJMjMgSnVuIDIwMDUgMDE6MTE6MDAgLTAwMDAK
QEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBIVE1MIERP
TSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBBcHBs
ZSBDb21wdXRlciwgSW5jLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywg
VVNBLgorICoKKyAqLworI2lmbmRlZiBIVE1MRUxFTUVOVEZBQ1RPUllfSAorI2RlZmluZSBIVE1M
RUxFTUVOVEZBQ1RPUllfSAorCituYW1lc3BhY2UgRE9NCit7CisKK2NsYXNzIEVsZW1lbnRJbXBs
OworY2xhc3MgRG9jdW1lbnRJbXBsOworY2xhc3MgSFRNTEVsZW1lbnRJbXBsOworY2xhc3MgSFRN
TEZvcm1FbGVtZW50SW1wbDsKK2NsYXNzIFF1YWxpZmllZE5hbWU7CitjbGFzcyBBdG9taWNTdHJp
bmc7CisKKy8vIFRoZSBpZGVhIGJlaGluZCB0aGlzIGNsYXNzIGlzIHRoYXQgdGhlcmUgd2lsbCBl
dmVudHVhbGx5IGJlIGEgbWFwcGluZyBmcm9tIG5hbWVzcGFjZSBVUklzIHRvIEVsZW1lbnRGYWN0
b3JpZXMgdGhhdCBjYW4gZGlzcGVuc2UKKy8vIGVsZW1lbnRzLiAgSW4gYSBjb21wb3VuZCBkb2N1
bWVudCB3b3JsZCwgdGhlIGdlbmVyaWMgY3JlYXRlRWxlbWVudCBmdW5jdGlvbiAod2lsbCBlbmQg
dXAgYmVpbmcgdmlydHVhbCkgd2lsbCBiZSBjYWxsZWQuCitjbGFzcyBIVE1MRWxlbWVudEZhY3Rv
cnkKK3sKK3B1YmxpYzoKKyAgICBFbGVtZW50SW1wbCogY3JlYXRlRWxlbWVudChjb25zdCBRdWFs
aWZpZWROYW1lJiBxTmFtZSwgRG9jdW1lbnRJbXBsKiBkb2MsIGJvb2wgY3JlYXRlZEJ5UGFyc2Vy
ID0gdHJ1ZSk7CisgICAgc3RhdGljIEhUTUxFbGVtZW50SW1wbCogY3JlYXRlSFRNTEVsZW1lbnQo
Y29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lLCBEb2N1bWVudEltcGwqIGRvYywgSFRNTEZvcm1F
bGVtZW50SW1wbCogZm9ybSA9IDAsIGJvb2wgY3JlYXRlZEJ5UGFyc2VyID0gdHJ1ZSk7Cit9Owor
Cit9CisKKyNlbmRpZgpJbmRleDoga2h0bWwvaHRtbC9odG1sbmFtZXMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbG5hbWVzLmNwcCx2CnJl
dHJpZXZpbmcgcmV2aXNpb24gMS4yCmRpZmYgLXUgLXAgLXIxLjIga2h0bWwvaHRtbC9odG1sbmFt
ZXMuY3BwCi0tLSBraHRtbC9odG1sL2h0bWxuYW1lcy5jcHAJMTYgSnVuIDIwMDUgMjA6MzM6NTcg
LTAwMDAJMS4yCisrKyBraHRtbC9odG1sL2h0bWxuYW1lcy5jcHAJMjMgSnVuIDIwMDUgMDE6MTE6
MDEgLTAwMDAKQEAgLTMzMyw2ICszMzMsMTIgQEAgY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5h
bWVzOjpsYWJlbCgpCiAgICAgcmV0dXJuIGxhYmVsOwogfQogCitjb25zdCBRdWFsaWZpZWROYW1l
JiBIVE1MTmFtZXM6OmxheWVyKCkKK3sKKyAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBsYXllcihu
dWxsQXRvbSwgImxheWVyIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7CisgICAgcmV0dXJuIGxheWVy
OworfQorCiBjb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OmxlZ2VuZCgpCiB7CiAgICAg
c3RhdGljIFF1YWxpZmllZE5hbWUgbGVnZW5kKG51bGxBdG9tLCAibGVnZW5kIiwgeGh0bWxOYW1l
c3BhY2VVUkkoKSk7CkBAIC0zNzUsNiArMzgxLDEyIEBAIGNvbnN0IFF1YWxpZmllZE5hbWUmIEhU
TUxOYW1lczo6bWV0YSgpCiAgICAgcmV0dXJuIG1ldGE7CiB9CiAKK2NvbnN0IFF1YWxpZmllZE5h
bWUmIEhUTUxOYW1lczo6bm9icigpCit7CisgICAgc3RhdGljIFF1YWxpZmllZE5hbWUgbm9icihu
dWxsQXRvbSwgIm5vYnIiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKKyAgICByZXR1cm4gbm9icjsK
K30KKwogY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpub2VtYmVkKCkKIHsKICAgICBz
dGF0aWMgUXVhbGlmaWVkTmFtZSBub2VtYmVkKG51bGxBdG9tLCAibm9lbWJlZCIsIHhodG1sTmFt
ZXNwYWNlVVJJKCkpOwpAQCAtMzg3LDYgKzM5OSwxMiBAQCBjb25zdCBRdWFsaWZpZWROYW1lJiBI
VE1MTmFtZXM6Om5vZnJhbWVzCiAgICAgcmV0dXJuIG5vZnJhbWVzOwogfQogCitjb25zdCBRdWFs
aWZpZWROYW1lJiBIVE1MTmFtZXM6Om5vbGF5ZXIoKQoreworICAgIHN0YXRpYyBRdWFsaWZpZWRO
YW1lIG5vZnJhbWVzKG51bGxBdG9tLCAibm9mcmFtZXMiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsK
KyAgICByZXR1cm4gbm9mcmFtZXM7Cit9CisKIGNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1l
czo6bm9zY3JpcHQoKQogewogICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIG5vc2NyaXB0KG51bGxB
dG9tLCAibm9zY3JpcHQiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKQEAgLTQyMyw2ICs0NDEsMTIg
QEAgY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpwYXJhbSgpCiAgICAgcmV0dXJuIHBh
cmFtOwogfQogCitjb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OnBsYWludGV4dCgpCit7
CisgICAgc3RhdGljIFF1YWxpZmllZE5hbWUgcGxhaW50ZXh0KG51bGxBdG9tLCAicGxhaW50ZXh0
IiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7CisgICAgcmV0dXJuIHBsYWludGV4dDsKK30KKwogY29u
c3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpwcmUoKQogewogICAgIHN0YXRpYyBRdWFsaWZp
ZWROYW1lIHByZShudWxsQXRvbSwgInByZSIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwpAQCAtNDY1
LDYgKzQ4OSwxMiBAQCBjb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OnNtYWxsKCkKICAg
ICByZXR1cm4gc21hbGw7CiB9CiAKK2NvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6c3Bh
bigpCit7CisgICAgc3RhdGljIFF1YWxpZmllZE5hbWUgc3BhbihudWxsQXRvbSwgInNwYW4iLCB4
aHRtbE5hbWVzcGFjZVVSSSgpKTsKKyAgICByZXR1cm4gc3BhbjsKK30KKwogY29uc3QgUXVhbGlm
aWVkTmFtZSYgSFRNTE5hbWVzOjpzdHJpa2UoKQogewogICAgIHN0YXRpYyBRdWFsaWZpZWROYW1l
IHN0cmlrZShudWxsQXRvbSwgInN0cmlrZSIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwpAQCAtNDgz
LDYgKzUxMywxOCBAQCBjb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OnN0eWxlKCkKICAg
ICByZXR1cm4gc3R5bGU7CiB9CiAKK2NvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6c3Vi
KCkKK3sKKyAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBzdWIobnVsbEF0b20sICJzdWIiLCB4aHRt
bE5hbWVzcGFjZVVSSSgpKTsKKyAgICByZXR1cm4gc3RyaWtlOworfQorCitjb25zdCBRdWFsaWZp
ZWROYW1lJiBIVE1MTmFtZXM6OnN1cCgpCit7CisgICAgc3RhdGljIFF1YWxpZmllZE5hbWUgc3Vw
KG51bGxBdG9tLCAic3VwIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7CisgICAgcmV0dXJuIHN1cDsK
K30KKwogY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjp0YWJsZSgpCiB7CiAgICAgc3Rh
dGljIFF1YWxpZmllZE5hbWUgdGFibGUobnVsbEF0b20sICJ0YWJsZSIsIHhodG1sTmFtZXNwYWNl
VVJJKCkpOwpAQCAtNTYxLDYgKzYwMywxMiBAQCBjb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFt
ZXM6OnZhcigpCiAgICAgcmV0dXJuIHZhcjsKIH0KIAorY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRN
TE5hbWVzOjp3YnIoKQoreworICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIHdicihudWxsQXRvbSwg
IndiciIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOworICAgIHJldHVybiB3YnI7Cit9CisKIGNvbnN0
IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6eG1wKCkKIHsKICAgICBzdGF0aWMgUXVhbGlmaWVk
TmFtZSB4bXAobnVsbEF0b20sICJ4bXAiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKSW5kZXg6IGto
dG1sL2h0bWwvaHRtbG5hbWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNv
cmUva2h0bWwvaHRtbC9odG1sbmFtZXMuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yCmRpZmYg
LXUgLXAgLXIxLjIga2h0bWwvaHRtbC9odG1sbmFtZXMuaAotLS0ga2h0bWwvaHRtbC9odG1sbmFt
ZXMuaAkxNiBKdW4gMjAwNSAyMDozMzo1NyAtMDAwMAkxLjIKKysrIGtodG1sL2h0bWwvaHRtbG5h
bWVzLmgJMjMgSnVuIDIwMDUgMDE6MTE6MDEgLTAwMDAKQEAgLTIyLDcgKzIyLDcgQEAKICNpZm5k
ZWYgSFRNTE5BTUVTX0gKICNkZWZpbmUgSFRNTE5BTUVTX0gKIAotI2luY2x1ZGUgInhtbC9kb21f
ZWxlbWVudGltcGwuaCIKKyNpbmNsdWRlICJkb21fcW5hbWUuaCIKIAogbmFtZXNwYWNlIERPTQog
ewpAQCAtODYsNiArODYsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5h
bWUmIGtiZCgpOwogICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBrZXlnZW4oKTsKICAg
ICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgbGFiZWwoKTsKKyAgICBzdGF0aWMgY29uc3Qg
UXVhbGlmaWVkTmFtZSYgbGF5ZXIoKTsKICAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYg
bGVnZW5kKCk7CiAgICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGxpKCk7CiAgICAgc3Rh
dGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGxpbmsoKTsKQEAgLTkzLDggKzk0LDEwIEBAIHB1Ymxp
YzoKICAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgbWFycXVlZSgpOwogICAgIHN0YXRp
YyBjb25zdCBRdWFsaWZpZWROYW1lJiBtZW51KCk7CiAgICAgc3RhdGljIGNvbnN0IFF1YWxpZmll
ZE5hbWUmIG1ldGEoKTsKKyAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgbm9icigpOwog
ICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBub2VtYmVkKCk7CiAgICAgc3RhdGljIGNv
bnN0IFF1YWxpZmllZE5hbWUmIG5vZnJhbWVzKCk7CisgICAgc3RhdGljIGNvbnN0IFF1YWxpZmll
ZE5hbWUmIG5vbGF5ZXIoKTsKICAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgbm9zY3Jp
cHQoKTsKICAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgb2JqZWN0KCk7CiAgICAgc3Rh
dGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIG9sKCk7CkBAIC0xMDIsNiArMTA1LDcgQEAgcHVibGlj
OgogICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBvcHRpb24oKTsKICAgICBzdGF0aWMg
Y29uc3QgUXVhbGlmaWVkTmFtZSYgcCgpOwogICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1l
JiBwYXJhbSgpOworICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBwbGFpbnRleHQoKTsK
ICAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgcHJlKCk7CiAgICAgc3RhdGljIGNvbnN0
IFF1YWxpZmllZE5hbWUmIHEoKTsKICAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgcygp
OwpAQCAtMTA5LDkgKzExMywxMiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IFF1YWxpZmll
ZE5hbWUmIHNjcmlwdCgpOwogICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBzZWxlY3Qo
KTsKICAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgc21hbGwoKTsKKyAgICBzdGF0aWMg
Y29uc3QgUXVhbGlmaWVkTmFtZSYgc3BhbigpOwogICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWRO
YW1lJiBzdHJpa2UoKTsKICAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgc3Ryb25nKCk7
CiAgICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIHN0eWxlKCk7CisgICAgc3RhdGljIGNv
bnN0IFF1YWxpZmllZE5hbWUmIHN1YigpOworICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1l
JiBzdXAoKTsKICAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFibGUoKTsKICAgICBz
dGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgdGJvZHkoKTsKICAgICBzdGF0aWMgY29uc3QgUXVh
bGlmaWVkTmFtZSYgdGQoKTsKQEAgLTEyNSw2ICsxMzIsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IGNvbnN0IFF1YWxpZmllZE5hbWUmIHUoKTsKICAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFt
ZSYgdWwoKTsKICAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgdmFyKCk7CisgICAgc3Rh
dGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIHdicigpOwogICAgIHN0YXRpYyBjb25zdCBRdWFsaWZp
ZWROYW1lJiB4bXAoKTsKIAogICAgIC8vIEF0dHJpYnV0ZSBuYW1lcy4KSW5kZXg6IGtodG1sL2h0
bWwvaHRtbHBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUv
a2h0bWwvaHRtbC9odG1scGFyc2VyLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS45NgpkaWZm
IC11IC1wIC1yMS45NiBraHRtbC9odG1sL2h0bWxwYXJzZXIuY3BwCi0tLSBraHRtbC9odG1sL2h0
bWxwYXJzZXIuY3BwCTExIE1heSAyMDA1IDAwOjU4OjI4IC0wMDAwCTEuOTYKKysrIGtodG1sL2h0
bWwvaHRtbHBhcnNlci5jcHAJMjMgSnVuIDIwMDUgMDE6MTE6MDIgLTAwMDAKQEAgLTQ0LDYgKzQ0
LDcgQEAKICNpbmNsdWRlICJodG1sL2h0bWxfbWlzY2ltcGwuaCIKICNpbmNsdWRlICJodG1sL2h0
bWxfdGFibGVpbXBsLmgiCiAjaW5jbHVkZSAiaHRtbC9odG1sX29iamVjdGltcGwuaCIKKyNpbmNs
dWRlICJodG1sZmFjdG9yeS5oIgogI2luY2x1ZGUgInhtbC9kb21fdGV4dGltcGwuaCIKICNpbmNs
dWRlICJ4bWwvZG9tX25vZGVpbXBsLmgiCiAjaW5jbHVkZSAibWlzYy9odG1saGFzaGVzLmgiCkBA
IC02OSwyNCArNzAsMjQgQEAgdXNpbmcgbmFtZXNwYWNlIGtodG1sOwogY2xhc3MgSFRNTFN0YWNr
RWxlbQogewogcHVibGljOgotICAgIEhUTUxTdGFja0VsZW0oIGludCBfaWQsCi0gICAgICAgICAg
ICAgICAgICAgaW50IF9sZXZlbCwKLSAgICAgICAgICAgICAgICAgICBET006Ok5vZGVJbXBsICpf
bm9kZSwKLSAgICAgICAgICAgICAgICAgICBIVE1MU3RhY2tFbGVtICogX25leHQKKyAgICBIVE1M
U3RhY2tFbGVtKGNvbnN0IEF0b21pY1N0cmluZyYgX3RhZ05hbWUsCisgICAgICAgICAgICAgICAg
ICBpbnQgX2xldmVsLAorICAgICAgICAgICAgICAgICAgRE9NOjpOb2RlSW1wbCAqX25vZGUsCisg
ICAgICAgICAgICAgICAgICBIVE1MU3RhY2tFbGVtICogX25leHQKICAgICAgICAgKQogICAgICAg
ICA6Ci0gICAgICAgIGlkKF9pZCksCisgICAgICAgIHRhZ05hbWUoX3RhZ05hbWUpLAogICAgICAg
ICBsZXZlbChfbGV2ZWwpLAogICAgICAgICBzdHJheVRhYmxlQ29udGVudChmYWxzZSksCiAgICAg
ICAgIG5vZGUoX25vZGUpLAogICAgICAgICBuZXh0KF9uZXh0KQogICAgICAgICB7IH0KIAotICAg
IGludCAgICAgICBpZDsKLSAgICBpbnQgICAgICAgbGV2ZWw7Ci0gICAgYm9vbCAgICAgIHN0cmF5
VGFibGVDb250ZW50OwotICAgIE5vZGVJbXBsICpub2RlOwotICAgIEhUTUxTdGFja0VsZW0gKm5l
eHQ7CisgICAgQXRvbWljU3RyaW5nIHRhZ05hbWU7CisgICAgaW50IGxldmVsOworICAgIGJvb2wg
c3RyYXlUYWJsZUNvbnRlbnQ7CisgICAgTm9kZUltcGwqIG5vZGU7CisgICAgSFRNTFN0YWNrRWxl
bSogbmV4dDsKIH07CiAKIC8qKgpAQCAtMTEyLDE0ICsxMTMsOSBAQCBwdWJsaWM6CiAgKiAgICBl
bGVtZW50IG9yIGlnbm9yZSB0aGUgdGFnLgogICoKICAqLwotS0hUTUxQYXJzZXI6OktIVE1MUGFy
c2VyKEtIVE1MVmlldyAqX3BhcmVudCwgRG9jdW1lbnRQdHIgKmRvYywgYm9vbCBpbmNsdWRlc0Nv
bW1lbnRzKSAKK0hUTUxQYXJzZXI6OkhUTUxQYXJzZXIoS0hUTUxWaWV3ICpfcGFyZW50LCBEb2N1
bWVudFB0ciAqZG9jLCBib29sIGluY2x1ZGVzQ29tbWVudHMpIAogICAgIDogY3VycmVudCgwKSwg
Y3VycmVudElzUmVmZXJlbmNlZChmYWxzZSksIGluY2x1ZGVzQ29tbWVudHNJbkRPTShpbmNsdWRl
c0NvbW1lbnRzKQogewotICAgIC8va2REZWJ1ZyggNjAzNSApIDw8ICJwYXJzZXIgY29uc3RydWN0
b3IiIDw8IGVuZGw7Ci0jaWYgU1BFRURfREVCVUcgPiAwCi0gICAgcXQuc3RhcnQoKTsKLSNlbmRp
ZgotCiAgICAgSFRNTFdpZGdldCAgICA9IF9wYXJlbnQ7CiAgICAgZG9jdW1lbnQgICAgICA9IGRv
YzsKICAgICBkb2N1bWVudC0+cmVmKCk7CkBAIC0xMjksNyArMTI1LDcgQEAgS0hUTUxQYXJzZXI6
OktIVE1MUGFyc2VyKEtIVE1MVmlldyAqX3BhcgogICAgIHJlc2V0KCk7CiB9CiAKLUtIVE1MUGFy
c2VyOjpLSFRNTFBhcnNlcihET006OkRvY3VtZW50RnJhZ21lbnRJbXBsICppLCBEb2N1bWVudFB0
ciAqZG9jLCBib29sIGluY2x1ZGVzQ29tbWVudHMpCitIVE1MUGFyc2VyOjpIVE1MUGFyc2VyKERP
TTo6RG9jdW1lbnRGcmFnbWVudEltcGwgKmksIERvY3VtZW50UHRyICpkb2MsIGJvb2wgaW5jbHVk
ZXNDb21tZW50cykKICAgICA6IGN1cnJlbnQoMCksIGN1cnJlbnRJc1JlZmVyZW5jZWQoZmFsc2Up
LCBpbmNsdWRlc0NvbW1lbnRzSW5ET00oaW5jbHVkZXNDb21tZW50cykKIHsKICAgICBIVE1MV2lk
Z2V0ID0gMDsKQEAgLTE0MywxMiArMTM5LDggQEAgS0hUTUxQYXJzZXI6OktIVE1MUGFyc2VyKERP
TTo6RG9jdW1lbnRGcgogICAgIGluQm9keSA9IHRydWU7CiB9CiAKLUtIVE1MUGFyc2VyOjp+S0hU
TUxQYXJzZXIoKQorSFRNTFBhcnNlcjo6fkhUTUxQYXJzZXIoKQogewotI2lmIFNQRUVEX0RFQlVH
ID4gMAotICAgIGtkRGVidWcoICkgPDwgIlRJTUU6IHBhcnNpbmcgdGltZSB3YXMgPSAiIDw8IHF0
LmVsYXBzZWQoKSA8PCBlbmRsOwotI2VuZGlmCi0KICAgICBmcmVlQmxvY2soKTsKIAogICAgIHNl
dEN1cnJlbnQoMCk7CkBAIC0xNTksMTUgKzE1MSwxMiBAQCBLSFRNTFBhcnNlcjo6fktIVE1MUGFy
c2VyKCkKICAgICAgICAgaXNpbmRleC0+ZGVyZWYoKTsKIH0KIAotdm9pZCBLSFRNTFBhcnNlcjo6
cmVzZXQoKQordm9pZCBIVE1MUGFyc2VyOjpyZXNldCgpCiB7CiAgICAgc2V0Q3VycmVudChkb2Mo
KSk7CiAKICAgICBmcmVlQmxvY2soKTsKIAotICAgIC8vIGJlZm9yZSBwYXJzaW5nLCBubyB0YWdz
IGFyZSBmb3JiaWRkZW4KLSAgICBtZW1zZXQoZm9yYmlkZGVuVGFnLCAwLCBzaXplb2YoZm9yYmlk
ZGVuVGFnKSk7Ci0KICAgICBpbkJvZHkgPSBmYWxzZTsKICAgICBoYXZlRnJhbWVTZXQgPSBmYWxz
ZTsKICAgICBoYXZlQ29udGVudCA9IGZhbHNlOwpAQCAtMTgwLDEwICsxNjksMTAgQEAgdm9pZCBL
SFRNTFBhcnNlcjo6cmVzZXQoKQogICAgIGVuZCA9IGZhbHNlOwogICAgIGlzaW5kZXggPSAwOwog
ICAgIAotICAgIGRpc2NhcmRfdW50aWwgPSAwOworICAgIGRpc2NhcmRfdW50aWwgPSBudWxsQXRv
bTsKIH0KIAotdm9pZCBLSFRNTFBhcnNlcjo6c2V0Q3VycmVudChET006Ok5vZGVJbXBsICpuZXdD
dXJyZW50KSAKK3ZvaWQgSFRNTFBhcnNlcjo6c2V0Q3VycmVudChET006Ok5vZGVJbXBsICpuZXdD
dXJyZW50KSAKIHsKICAgICBib29sIG5ld0N1cnJlbnRJc1JlZmVyZW5jZWQgPSBuZXdDdXJyZW50
ICYmIG5ld0N1cnJlbnQgIT0gZG9jKCk7CiAgICAgaWYgKG5ld0N1cnJlbnRJc1JlZmVyZW5jZWQp
IApAQCAtMTk0LDE0NCArMTgzLDEwOCBAQCB2b2lkIEtIVE1MUGFyc2VyOjpzZXRDdXJyZW50KERP
TTo6Tm9kZUltCiAgICAgY3VycmVudElzUmVmZXJlbmNlZCA9IG5ld0N1cnJlbnRJc1JlZmVyZW5j
ZWQ7CiB9CiAKLXZvaWQgS0hUTUxQYXJzZXI6OnBhcnNlVG9rZW4oVG9rZW4gKnQpCit2b2lkIEhU
TUxQYXJzZXI6OnBhcnNlVG9rZW4oVG9rZW4gKnQpCiB7Ci0gICAgaWYoZGlzY2FyZF91bnRpbCkg
ewotICAgICAgICBpZih0LT5pZCA9PSBkaXNjYXJkX3VudGlsKQotICAgICAgICAgICAgZGlzY2Fy
ZF91bnRpbCA9IDA7CisgICAgaWYgKCFkaXNjYXJkX3VudGlsLmlzTnVsbCgpKSB7CisgICAgICAg
IGlmICh0LT50YWdOYW1lID09IGRpc2NhcmRfdW50aWwgJiYgIXQtPmJlZ2luVGFnKQorICAgICAg
ICAgICAgZGlzY2FyZF91bnRpbCA9IG51bGxBdG9tOwogCiAgICAgICAgIC8vIGRvIG5vdCBza2lw
IDwvaWZyYW1lPgotICAgICAgICBpZiAoIGRpc2NhcmRfdW50aWwgfHwgY3VycmVudC0+aWQoKSAr
IElEX0NMT1NFX1RBRyAhPSB0LT5pZCApCisgICAgICAgIGlmICghZGlzY2FyZF91bnRpbC5pc051
bGwoKSB8fCAoY3VycmVudC0+bG9jYWxOYW1lKCkgIT0gdC0+dGFnTmFtZSkpCiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0jaWZkZWYgUEFSU0VSX0RFQlVHCi0gICAga2REZWJ1ZyggNjAz
NSApIDw8ICJcblxuPT0+IHBhcnNlcjogcHJvY2Vzc2luZyB0b2tlbiAiIDw8IGdldFRhZ05hbWUo
dC0+aWQpLnN0cmluZygpIDw8ICIoIiA8PCB0LT5pZCA8PCAiKSIKLSAgICAgICAgICAgICAgICAg
ICAgPDwgIiBjdXJyZW50ID0gIiA8PCBnZXRUYWdOYW1lKGN1cnJlbnQtPmlkKCkpLnN0cmluZygp
IDw8ICIoIiA8PCBjdXJyZW50LT5pZCgpIDw8ICIpIiA8PCBlbmRsOwotICAgIGtkRGVidWcoNjAz
NSkgPDwgIiBpbkJvZHk9IiA8PCBpbkJvZHkgPDwgIiBoYXZlRnJhbWVTZXQ9IiA8PCBoYXZlRnJh
bWVTZXQgPDwgZW5kbDsKLSNlbmRpZgotCi0gICAgLy8gaG9seSBzaGl0LiBhcHBhcmVudGx5IHNv
bWUgc2l0ZXMgdXNlIDwvYnI+IGluc3RlYWQgb2YgPGJyPgotICAgIC8vIGJlIGNvbXBhdGlibGUg
d2l0aCBJRSBhbmQgTlMKLSAgICBpZiAodC0+aWQgPT0gSURfQlIgKyBJRF9DTE9TRV9UQUcgJiYg
ZG9jKCktPmluQ29tcGF0TW9kZSgpKQotICAgICAgICB0LT5pZCA9IElEX0JSOworICAgIC8vIEFw
cGFyZW50bHkgc29tZSBzaXRlcyB1c2UgPC9icj4gaW5zdGVhZCBvZiA8YnI+LiAgQmUgY29tcGF0
aWJsZSB3aXRoIElFIGFuZCBGaXJlZm94IGFuZCB0cmVhdCB0aGlzIGxpa2UgPGJyPi4KKyAgICBp
ZiAodC0+aXNDbG9zZVRhZyhIVE1MTmFtZXM6OmJyKCkpICYmIGRvYygpLT5pbkNvbXBhdE1vZGUo
KSkKKyAgICAgICAgdC0+YmVnaW5UYWcgPSB0cnVlOwogCi0gICAgaWYgKHQtPmlkID4gSURfQ0xP
U0VfVEFHKQotICAgIHsKKyAgICBpZiAoIXQtPmJlZ2luVGFnKSB7CiAgICAgICAgIHByb2Nlc3ND
bG9zZVRhZyh0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIC8vIGlnbm9yZSBzcGFj
ZXMsIGlmIHdlJ3JlIG5vdCBpbnNpZGUgYSBwYXJhZ3JhcGggb3Igb3RoZXIgaW5saW5lIGNvZGUK
LSAgICBpZiggdC0+aWQgPT0gSURfVEVYVCAmJiB0LT50ZXh0ICkgewotICAgICAgICBpZihpbkJv
ZHkgJiYgIXNraXBNb2RlKCkgJiYgY3VycmVudC0+aWQoKSAhPSBJRF9TVFlMRSAKLSAgICAgICAg
ICAgICYmIGN1cnJlbnQtPmlkKCkgIT0gSURfVElUTEUgJiYgY3VycmVudC0+aWQoKSAhPSBJRF9T
Q1JJUFQgJiYKLSAgICAgICAgICAgICF0LT50ZXh0LT5jb250YWluc09ubHlXaGl0ZXNwYWNlKCkp
IAorICAgIGlmICh0LT50YWdOYW1lID09IHRleHRBdG9tICYmIHQtPnRleHQpIHsKKyAgICAgICAg
aWYgKGluQm9keSAmJiAhc2tpcE1vZGUoKSAmJiBjdXJyZW50LT5sb2NhbE5hbWUoKSAhPSBIVE1M
TmFtZXM6OnN0eWxlKCkgJiYgY3VycmVudC0+bG9jYWxOYW1lKCkgIT0gSFRNTE5hbWVzOjp0aXRs
ZSgpICYmIAorICAgICAgICAgICAgY3VycmVudC0+bG9jYWxOYW1lKCkgIT0gSFRNTE5hbWVzOjpz
Y3JpcHQoKSAmJiAhdC0+dGV4dC0+Y29udGFpbnNPbmx5V2hpdGVzcGFjZSgpKSAKICAgICAgICAg
ICAgIGhhdmVDb250ZW50ID0gdHJ1ZTsKLSNpZmRlZiBQQVJTRVJfREVCVUcKLSAgICAgICAga2RE
ZWJ1Zyg2MDM1KSA8PCAibGVuZ3RoPSI8PCB0LT50ZXh0LT5sIDw8ICIgdGV4dD0nIiA8PCBRQ29u
c3RTdHJpbmcodC0+dGV4dC0+cywgdC0+dGV4dC0+bCkuc3RyaW5nKCkgPDwgIiciIDw8IGVuZGw7
Ci0jZW5kaWYKICAgICB9CiAKLSAgICBOb2RlSW1wbCAqbiA9IGdldEVsZW1lbnQodCk7CisgICAg
Tm9kZUltcGwgKm4gPSBnZXROb2RlKHQpOwogICAgIC8vIGp1c3QgdG8gYmUgc3VyZSwgYW5kIHRv
IGNhdGNoIGN1cnJlbnRseSB1bmltcGxlbWVudGVkIHN0dWZmCi0gICAgaWYoIW4pCisgICAgaWYg
KCFuKQogICAgICAgICByZXR1cm47CiAKICAgICBTaGFyZWRQdHI8Tm9kZUltcGw+IHByb3RlY3RO
b2RlKG4pOwogCiAgICAgLy8gc2V0IGF0dHJpYnV0ZXMKLSAgICBpZihuLT5pc0VsZW1lbnROb2Rl
KCkpCi0gICAgewotICAgICAgICBFbGVtZW50SW1wbCAqZSA9IHN0YXRpY19jYXN0PEVsZW1lbnRJ
bXBsICo+KG4pOworICAgIGlmIChuLT5pc0hUTUxFbGVtZW50KCkpIHsKKyAgICAgICAgSFRNTEVs
ZW1lbnRJbXBsICplID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsKj4obik7CiAgICAgICAg
IGUtPnNldEF0dHJpYnV0ZU1hcCh0LT5hdHRycyk7CiAKICAgICAgICAgLy8gdGFrZSBjYXJlIG9m
IG9wdGlvbmFsIGNsb3NlIHRhZ3MKLSAgICAgICAgaWYoZW5kVGFnUmVxdWlyZW1lbnQoZS0+aWQo
KSkgPT0gRE9NOjpPUFRJT05BTCkKLSAgICAgICAgICAgIHBvcEJsb2NrKHQtPmlkKTsKKyAgICAg
ICAgaWYgKGUtPmVuZFRhZ1JlcXVpcmVtZW50KCkgPT0gRE9NOjpPUFRJT05BTCkKKyAgICAgICAg
ICAgIHBvcEJsb2NrKHQtPnRhZ05hbWUpOwogICAgICAgICAgICAgCi0gICAgICAgIGlmIChpc0hl
YWRlclRhZyh0LT5pZCkpCisgICAgICAgIGlmIChpc0hlYWRlclRhZyh0LT50YWdOYW1lKSkKICAg
ICAgICAgICAgIC8vIERvIG5vdCBhbGxvdyB0d28gaGVhZGVyIHRhZ3MgdG8gYmUgbmVzdGVkIGlm
IHRoZSBpbnRlcnZlbmluZyB0YWdzIGFyZSBpbmxpbmVzLgogICAgICAgICAgICAgcG9wTmVzdGVk
SGVhZGVyVGFnKCk7CiAgICAgfQogCi0gICAgLy8gaWYgdGhpcyB0YWcgaXMgZm9yYmlkZGVuIGlu
c2lkZSB0aGUgY3VycmVudCBjb250ZXh0LCBwb3AKLSAgICAvLyBibG9ja3MgdW50aWwgd2UgYXJl
IGFsbG93ZWQgdG8gYWRkIGl0Li4uCi0gICAgd2hpbGUgKGJsb2NrU3RhY2sgJiYgdC0+aWQgPD0g
SURfTEFTVF9UQUcgJiYgZm9yYmlkZGVuVGFnW3QtPmlkXSkgewotI2lmZGVmIFBBUlNFUl9ERUJV
RwotICAgICAgICBrZERlYnVnKCA2MDM1ICkgPDwgInQtPmlkOiAiIDw8IHQtPmlkIDw8ICIgaXMg
Zm9yYmlkZGVuIDotKCAiIDw8IGVuZGw7Ci0jZW5kaWYKLSAgICAgICAgcG9wT25lQmxvY2soKTsK
LSAgICB9Ci0KLSAgICBpZiAoIWluc2VydE5vZGUobiwgdC0+ZmxhdCkpIAotICAgIHsKKyAgICBp
ZiAoIWluc2VydE5vZGUobiwgdC0+ZmxhdCkpIHsKICAgICAgICAgLy8gd2UgY291bGRuJ3QgaW5z
ZXJ0IHRoZSBub2RlLi4uCi0gICAgICAgIAotICAgICAgICBpZihuLT5pc0VsZW1lbnROb2RlKCkp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEVsZW1lbnRJbXBsICplID0gc3RhdGljX2Nhc3Q8RWxl
bWVudEltcGwgKj4obik7CisgICAgICAgIGlmIChuLT5pc0VsZW1lbnROb2RlKCkpIHsKKyAgICAg
ICAgICAgIEVsZW1lbnRJbXBsKiBlID0gc3RhdGljX2Nhc3Q8RWxlbWVudEltcGwqPihuKTsKICAg
ICAgICAgICAgIGUtPnNldEF0dHJpYnV0ZU1hcCgwKTsKICAgICAgICAgfQogICAgICAgICAgICAg
Ci0jaWZkZWYgUEFSU0VSX0RFQlVHCi0gICAgICAgIGtkRGVidWcoIDYwMzUgKSA8PCAiaW5zZXJ0
Tm9kZSBmYWlsZWQgY3VycmVudD0iIDw8IGN1cnJlbnQtPmlkKCkgPDwgIiwgbmV3PSIgPDwgbi0+
aWQoKSA8PCAiISIgPDwgZW5kbDsKLSNlbmRpZgogICAgICAgICBpZiAobWFwID09IG4pCi0gICAg
ICAgIHsKLSNpZmRlZiBQQVJTRVJfREVCVUcKLSAgICAgICAgICAgIGtkRGVidWcoIDYwMzUgKSA8
PCAiICAtLT4gcmVzZXR0aW5nIG1hcCEiIDw8IGVuZGw7Ci0jZW5kaWYKICAgICAgICAgICAgIG1h
cCA9IDA7Ci0gICAgICAgIH0KKwogICAgICAgICBpZiAoZm9ybSA9PSBuKQotICAgICAgICB7Ci0j
aWZkZWYgUEFSU0VSX0RFQlVHCi0gICAgICAgICAgICBrZERlYnVnKCA2MDM1ICkgPDwgIiAgIC0t
PiByZXNldHRpbmcgZm9ybSEiIDw8IGVuZGw7Ci0jZW5kaWYKICAgICAgICAgICAgIGZvcm0gPSAw
OwotICAgICAgICB9CiAgICAgfQogfQogCi1zdGF0aWMgYm9vbCBpc1RhYmxlUmVsYXRlZFRhZyhp
bnQgaWQpCitzdGF0aWMgYm9vbCBpc1RhYmxlU2VjdGlvbihOb2RlSW1wbCogbikKIHsKLSAgICBy
ZXR1cm4gKGlkID09IElEX1RSIHx8IGlkID09IElEX1REIHx8IGlkID09IElEX1RBQkxFIHx8IGlk
ID09IElEX1RCT0RZIHx8IGlkID09IElEX1RGT09UIHx8IGlkID09IElEX1RIRUFEIHx8Ci0gICAg
ICAgICAgICBpZCA9PSBJRF9USCk7CisgICAgcmV0dXJuIG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVz
Ojp0Ym9keSgpKSB8fCBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGZvb3QoKSkgfHwgbi0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OnRoZWFkKCkpOwogfQogCi1ib29sIEtIVE1MUGFyc2VyOjppbnNl
cnROb2RlKE5vZGVJbXBsICpuLCBib29sIGZsYXQpCitzdGF0aWMgYm9vbCBpc1RhYmxlUGFydChO
b2RlSW1wbCogbikKIHsKLSAgICBTaGFyZWRQdHI8Tm9kZUltcGw+IHByb3RlY3ROb2RlKG4pOwor
ICAgIHJldHVybiBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dHIoKSkgfHwgbi0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OnRkKCkpIHx8IG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0aCgpKSB8fAor
ICAgICAgICAgICBpc1RhYmxlU2VjdGlvbihuKTsKK30KKworc3RhdGljIGJvb2wgaXNUYWJsZVJl
bGF0ZWQoTm9kZUltcGwqIG4pCit7CisgICAgcmV0dXJuIG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVz
Ojp0YWJsZSgpKSB8fCBpc1RhYmxlUGFydChuKTsKK30KIAotICAgIGludCBpZCA9IG4tPmlkKCk7
Citib29sIEhUTUxQYXJzZXI6Omluc2VydE5vZGUoTm9kZUltcGwgKm4sIGJvb2wgZmxhdCkKK3sK
KyAgICBTaGFyZWRQdHI8Tm9kZUltcGw+IHByb3RlY3ROb2RlKG4pOwogCisgICAgY29uc3QgQXRv
bWljU3RyaW5nJiBsb2NhbE5hbWUgPSBuLT5sb2NhbE5hbWUoKTsKKyAgICBpbnQgdGFnUHJpb3Jp
dHkgPSBuLT5pc0hUTUxFbGVtZW50KCkgPyBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwqPihu
KS0+dGFnUHJpb3JpdHkoKSA6IDA7CisgICAgICAgIAogICAgIC8vIGxldCdzIGJlIHN0dXBpZCBh
bmQganVzdCB0cnkgdG8gaW5zZXJ0IGl0LgotICAgIC8vIHRoaXMgc2hvdWxkIHdvcmsgaWYgdGhl
IGRvY3VtZW50IGlzIHdlbGxmb3JtZWQKLSNpZmRlZiBQQVJTRVJfREVCVUcKLSAgICBOb2RlSW1w
bCAqdG1wID0gY3VycmVudDsKLSNlbmRpZgorICAgIC8vIHRoaXMgc2hvdWxkIHdvcmsgaWYgdGhl
IGRvY3VtZW50IGlzIHdlbGwtZm9ybWVkCiAgICAgTm9kZUltcGwgKm5ld05vZGUgPSBjdXJyZW50
LT5hZGRDaGlsZChuKTsKLSAgICBpZiAoIG5ld05vZGUgKSB7Ci0jaWZkZWYgUEFSU0VSX0RFQlVH
Ci0gICAgICAgIGtkRGVidWcoIDYwMzUgKSA8PCAiYWRkZWQgIiA8PCBuLT5ub2RlTmFtZSgpLnN0
cmluZygpIDw8ICIgdG8gIiA8PCB0bXAtPm5vZGVOYW1lKCkuc3RyaW5nKCkgPDwgIiwgbmV3IGN1
cnJlbnQ9IiA8PCBuZXdOb2RlLT5ub2RlTmFtZSgpLnN0cmluZygpIDw8IGVuZGw7Ci0jZW5kaWYK
LSAgICAgICAgLy8gZG9uJ3QgcHVzaCBlbGVtZW50cyB3aXRob3V0IGVuZCB0YWcgb24gdGhlIHN0
YWNrCi0gICAgICAgIGlmKHRhZ1ByaW9yaXR5KGlkKSAhPSAwICYmICFmbGF0KQotICAgICAgICB7
Ci0gICAgICAgICAgICBwdXNoQmxvY2soaWQsIHRhZ1ByaW9yaXR5KGlkKSk7CisgICAgaWYgKG5l
d05vZGUpIHsKKyAgICAgICAgLy8gZG9uJ3QgcHVzaCBlbGVtZW50cyB3aXRob3V0IGVuZCB0YWdz
IChlLmcuLCA8aW1nPikgb24gdGhlIHN0YWNrCisgICAgICAgIGlmICh0YWdQcmlvcml0eSA+IDAg
JiYgIWZsYXQpIHsKKyAgICAgICAgICAgIHB1c2hCbG9jayhsb2NhbE5hbWUsIHRhZ1ByaW9yaXR5
KTsKICAgICAgICAgICAgIGlmIChuZXdOb2RlID09IGN1cnJlbnQpCi0gICAgICAgICAgICAgICAg
cG9wQmxvY2soaWQpOworICAgICAgICAgICAgICAgIHBvcEJsb2NrKGxvY2FsTmFtZSk7CiAgICAg
ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgc2V0Q3VycmVudChuZXdOb2RlKTsKLSNpZiBT
UEVFRF9ERUJVRyA8IDIKLSAgICAgICAgICAgIGlmKCFuLT5hdHRhY2hlZCgpICYmIEhUTUxXaWRn
ZXQpCisgICAgICAgICAgICBpZiAoIW4tPmF0dGFjaGVkKCkgJiYgSFRNTFdpZGdldCkKICAgICAg
ICAgICAgICAgICBuLT5hdHRhY2goKTsKLSNlbmRpZgogICAgICAgICB9CiAgICAgICAgIGVsc2Ug
ewotI2lmIFNQRUVEX0RFQlVHIDwgMgotICAgICAgICAgICAgaWYoIW4tPmF0dGFjaGVkKCkgJiYg
SFRNTFdpZGdldCkKKyAgICAgICAgICAgIGlmICghbi0+YXR0YWNoZWQoKSAmJiBIVE1MV2lkZ2V0
KQogICAgICAgICAgICAgICAgIG4tPmF0dGFjaCgpOwogICAgICAgICAgICAgaWYgKG4tPm1haW50
YWluc1N0YXRlKCkpIHsKICAgICAgICAgICAgICAgICBkb2MoKS0+cmVnaXN0ZXJNYWludGFpbnNT
dGF0ZShuKTsKQEAgLTM0MCwxMDQgKzI5Myw4NiBAQCBib29sIEtIVE1MUGFyc2VyOjppbnNlcnRO
b2RlKE5vZGVJbXBsICpuCiAgICAgICAgICAgICAgICAgICAgIG4tPnJlc3RvcmVTdGF0ZShzdGF0
ZXMpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbi0+Y2xvc2VSZW5kZXJlcigpOwotI2Vu
ZGlmCiAgICAgICAgIH0KIAogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IGVsc2UgewotI2lm
ZGVmIFBBUlNFUl9ERUJVRwotICAgICAgICBrZERlYnVnKCA2MDM1ICkgPDwgIkFERElORyBOT0RF
IEZBSUxFRCEhISEgY3VycmVudCA9ICIgPDwgY3VycmVudC0+bm9kZU5hbWUoKS5zdHJpbmcoKSA8
PCAiLCBuZXcgPSAiIDw8IG4tPm5vZGVOYW1lKCkuc3RyaW5nKCkgPDwgZW5kbDsKLSNlbmRpZgot
ICAgICAgICAvLyBlcnJvciBoYW5kbGluZy4uLgotICAgICAgICBIVE1MRWxlbWVudEltcGwgKmU7
Ci0gICAgICAgIGJvb2wgaGFuZGxlZCA9IGZhbHNlOwotCi0gICAgICAgIC8vIHN3aXRjaCBhY2Nv
cmRpbmcgdG8gdGhlIGVsZW1lbnQgdG8gaW5zZXJ0Ci0gICAgICAgIHN3aXRjaChpZCkKLSAgICAg
ICAgewotICAgICAgICBjYXNlIElEX1RSOgotICAgICAgICBjYXNlIElEX1RIOgotICAgICAgICBj
YXNlIElEX1REOgotICAgICAgICAgICAgaWYgKGluU3RyYXlUYWJsZUNvbnRlbnQgJiYgIWlzVGFi
bGVSZWxhdGVkVGFnKGN1cnJlbnQtPmlkKCkpKSB7CisgICAgfSBlbHNlCisgICAgICAgIHJldHVy
biBoYW5kbGVFcnJvcihuLCBmbGF0LCBsb2NhbE5hbWUsIHRhZ1ByaW9yaXR5KTsgLy8gVHJ5IHRv
IGhhbmRsZSB0aGUgZXJyb3IuCit9CisKK2Jvb2wgSFRNTFBhcnNlcjo6aGFuZGxlRXJyb3IoTm9k
ZUltcGwqIG4sIGJvb2wgZmxhdCwgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUsIGludCB0
YWdQcmlvcml0eSkKK3sKKyAgICAvLyBFcnJvciBoYW5kbGluZyBjb2RlLiAgVGhpcyBpcyBqdXN0
IGFkIGhvYyBoYW5kbGluZyBvZiBzcGVjaWZpYyBwYXJlbnQvY2hpbGQgY29tYmluYXRpb25zLgor
ICAgIEhUTUxFbGVtZW50SW1wbCAqZTsKKyAgICBib29sIGhhbmRsZWQgPSBmYWxzZTsKKworICAg
IC8vIDEuIENoZWNrIG91dCB0aGUgZWxlbWVudCdzIHRhZyBuYW1lIHRvIGRlY2lkZSBob3cgdG8g
ZGVhbCB3aXRoIGVycm9ycy4KKyAgICBpZiAobi0+aXNUZXh0Tm9kZSgpKSB7CisgICAgICAgIGlm
IChjdXJyZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c2VsZWN0KCkpKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0gZWxzZSBpZiAobi0+aXNIVE1MRWxlbWVudCgpKSB7CisgICAg
ICAgIEhUTUxFbGVtZW50SW1wbCogaCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCo+KG4p
OworICAgICAgICBpZiAoaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dHIoKSkgfHwgaC0+aGFz
TG9jYWxOYW1lKEhUTUxOYW1lczo6dGgoKSkgfHwKKyAgICAgICAgICAgIGgtPmhhc0xvY2FsTmFt
ZShIVE1MTmFtZXM6OnRkKCkpKSB7CisgICAgICAgICAgICBpZiAoaW5TdHJheVRhYmxlQ29udGVu
dCAmJiAhaXNUYWJsZVJlbGF0ZWQoY3VycmVudCkpIHsKICAgICAgICAgICAgICAgICAvLyBwb3Ag
b3V0IHRvIHRoZSBuZWFyZXN0IGVuY2xvc2luZyB0YWJsZS1yZWxhdGVkIHRhZy4KLSAgICAgICAg
ICAgICAgICB3aGlsZSAoYmxvY2tTdGFjayAmJiAhaXNUYWJsZVJlbGF0ZWRUYWcoY3VycmVudC0+
aWQoKSkpCisgICAgICAgICAgICAgICAgd2hpbGUgKGJsb2NrU3RhY2sgJiYgIWlzVGFibGVSZWxh
dGVkKGN1cnJlbnQpKQogICAgICAgICAgICAgICAgICAgICBwb3BPbmVCbG9jaygpOwogICAgICAg
ICAgICAgICAgIHJldHVybiBpbnNlcnROb2RlKG4pOwogICAgICAgICAgICAgfQotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSURfQ09NTUVOVDoKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIElEX0hFQUQ6Ci0gICAgICAgICAgICAvLyAjIyMgYWxsbG93IG5vdCBoYXZp
bmcgPEhUTUw+IGluIGF0IGFsbCwgYXMgcGVyIEhUTUwgc3BlYwotICAgICAgICAgICAgaWYgKCFj
dXJyZW50LT5pc0RvY3VtZW50Tm9kZSgpICYmIGN1cnJlbnQtPmlkKCkgIT0gSURfSFRNTCApCisg
ICAgICAgIH0gZWxzZSBpZiAoaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6aGVhZCgpKSkgewor
ICAgICAgICAgICAgaWYgKCFjdXJyZW50LT5pc0RvY3VtZW50Tm9kZSgpICYmICFjdXJyZW50LT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6aHRtbCgpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIC8vIFdlIGNhbiBkZWFsIHdpdGgg
YSBiYXNlLCBtZXRhIGFuZCBsaW5rIGVsZW1lbnQgaW4gdGhlIGJvZHksIGJ5IGp1c3QgYWRkaW5n
IHRoZSBlbGVtZW50IHRvIGhlYWQuCi0gICAgICAgIGNhc2UgSURfTUVUQToKLSAgICAgICAgY2Fz
ZSBJRF9MSU5LOgotICAgICAgICBjYXNlIElEX0JBU0U6Ci0gICAgICAgICAgICBpZiggIWhlYWQg
KQorICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om1ldGEoKSkg
fHwgaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6bGluaygpKSB8fCBoLT5oYXNMb2NhbE5hbWUo
SFRNTE5hbWVzOjpiYXNlKCkpKSB7CisgICAgICAgICAgICBpZiAoIWhlYWQpCiAgICAgICAgICAg
ICAgICAgY3JlYXRlSGVhZCgpOwotICAgICAgICAgICAgaWYoIGhlYWQgKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKCBoZWFkLT5hZGRDaGlsZChuKSApIHsKLSNpZiBTUEVFRF9ERUJVRyA8IDIKLSAg
ICAgICAgICAgICAgICAgICAgaWYoIW4tPmF0dGFjaGVkKCkgJiYgSFRNTFdpZGdldCkKKyAgICAg
ICAgICAgIGlmIChoZWFkKSB7CisgICAgICAgICAgICAgICAgaWYgKGhlYWQtPmFkZENoaWxkKG4p
KSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghbi0+YXR0YWNoZWQoKSAmJiBIVE1MV2lkZ2V0
KQogICAgICAgICAgICAgICAgICAgICAgICAgbi0+YXR0YWNoKCk7Ci0jZW5kaWYKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0JCX0gZWxzZSB7Ci0JCSAgICByZXR1cm4gZmFsc2U7
Ci0JCX0KKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
SURfSFRNTDoKKyAgICAgICAgfSBlbHNlIGlmIChoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpo
dG1sKCkpKSB7CiAgICAgICAgICAgICBpZiAoIWN1cnJlbnQtPmlzRG9jdW1lbnROb2RlKCkgKSB7
Ci0JCWlmICggZG9jKCktPmZpcnN0Q2hpbGQoKS0+aWQoKSA9PSBJRF9IVE1MKSB7Ci0JCSAgICAv
LyB3ZSBoYXZlIGFub3RoZXIgPEhUTUw+IGVsZW1lbnQuLi4uIGFwcGx5IGF0dHJpYnV0ZXMgdG8g
ZXhpc3Rpbmcgb25lCi0JCSAgICAvLyBtYWtlIHN1cmUgd2UgZG9uJ3Qgb3ZlcndyaXRlIGFscmVh
ZHkgZXhpc3RpbmcgYXR0cmlidXRlcwotCQkgICAgTmFtZWRBdHRyTWFwSW1wbCAqbWFwID0gc3Rh
dGljX2Nhc3Q8RWxlbWVudEltcGwqPihuKS0+YXR0cmlidXRlcyh0cnVlKTsKLQkJICAgIE5hbWVk
QXR0ck1hcEltcGwgKmJtYXAgPSBzdGF0aWNfY2FzdDxFbGVtZW50SW1wbCo+KGRvYygpLT5maXJz
dENoaWxkKCkpLT5hdHRyaWJ1dGVzKGZhbHNlKTsKLQkJICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNl
OwotCQkgICAgZm9yICh1bnNpZ25lZCBsb25nIGwgPSAwOyBtYXAgJiYgbCA8IG1hcC0+bGVuZ3Ro
KCk7ICsrbCkgewotCQkJQXR0cmlidXRlSW1wbCogaXQgPSBtYXAtPmF0dHJpYnV0ZUl0ZW0obCk7
Ci0JCQljaGFuZ2VkID0gIWJtYXAtPmdldEF0dHJpYnV0ZUl0ZW0oaXQtPmlkKCkpOwotCQkJYm1h
cC0+aW5zZXJ0QXR0cmlidXRlKGl0LT5jbG9uZShmYWxzZSkpOwotCQkgICAgfQotCQkgICAgaWYg
KCBjaGFuZ2VkICkKLQkJCWRvYygpLT5yZWNhbGNTdHlsZSggTm9kZUltcGw6OkluaGVyaXQgKTsK
LQkJfQorICAgICAgICAgICAgICAgIGlmIChkb2MoKS0+Zmlyc3RDaGlsZCgpLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6aHRtbCgpKSkgeworICAgICAgICAgICAgICAgICAgICAvLyB3ZSBoYXZlIGFu
b3RoZXIgPEhUTUw+IGVsZW1lbnQuLi4uIGFwcGx5IGF0dHJpYnV0ZXMgdG8gZXhpc3Rpbmcgb25l
CisgICAgICAgICAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB3ZSBkb24ndCBvdmVyd3JpdGUgYWxy
ZWFkeSBleGlzdGluZyBhdHRyaWJ1dGVzCisgICAgICAgICAgICAgICAgICAgIE5hbWVkQXR0ck1h
cEltcGwgKm1hcCA9IHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsKj4obiktPmF0dHJpYnV0ZXModHJ1
ZSk7CisgICAgICAgICAgICAgICAgICAgIE5hbWVkQXR0ck1hcEltcGwgKmJtYXAgPSBzdGF0aWNf
Y2FzdDxFbGVtZW50SW1wbCo+KGRvYygpLT5maXJzdENoaWxkKCkpLT5hdHRyaWJ1dGVzKGZhbHNl
KTsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgbG9uZyBsID0gMDsgbWFwICYmIGwgPCBtYXAtPmxlbmd0
aCgpOyArK2wpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEF0dHJpYnV0ZUltcGwqIGl0ID0g
bWFwLT5hdHRyaWJ1dGVJdGVtKGwpOworICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9
ICFibWFwLT5nZXRBdHRyaWJ1dGVJdGVtKGl0LT5pZCgpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGJtYXAtPmluc2VydEF0dHJpYnV0ZShpdC0+Y2xvbmUoZmFsc2UpKTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoY2hhbmdlZCkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGRvYygpLT5yZWNhbGNTdHlsZShOb2RlSW1wbDo6SW5oZXJpdCk7CisgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQkgICAgfQotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSURfVElUTEU6Ci0gICAgICAgIGNhc2UgSURf
U1RZTEU6Ci0gICAgICAgICAgICBpZiAoICFoZWFkICkKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fSBlbHNlIGlmIChoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0aXRsZSgpKSB8fCBoLT5oYXNM
b2NhbE5hbWUoSFRNTE5hbWVzOjpzdHlsZSgpKSkgeworICAgICAgICAgICAgaWYgKCFoZWFkKQog
ICAgICAgICAgICAgICAgIGNyZWF0ZUhlYWQoKTsKLSAgICAgICAgICAgIGlmICggaGVhZCApIHsK
KyAgICAgICAgICAgIGlmIChoZWFkKSB7CiAgICAgICAgICAgICAgICAgRE9NOjpOb2RlSW1wbCAq
bmV3Tm9kZSA9IGhlYWQtPmFkZENoaWxkKG4pOwotICAgICAgICAgICAgICAgIGlmICggbmV3Tm9k
ZSApIHsKLSAgICAgICAgICAgICAgICAgICAgcHVzaEJsb2NrKGlkLCB0YWdQcmlvcml0eShpZCkp
OworICAgICAgICAgICAgICAgIGlmIChuZXdOb2RlKSB7CisgICAgICAgICAgICAgICAgICAgIHB1
c2hCbG9jayhsb2NhbE5hbWUsIHRhZ1ByaW9yaXR5KTsKICAgICAgICAgICAgICAgICAgICAgc2V0
Q3VycmVudChuZXdOb2RlKTsKLSNpZiBTUEVFRF9ERUJVRyA8IDIKLQkJICAgIGlmKCFuLT5hdHRh
Y2hlZCgpICYmIEhUTUxXaWRnZXQpCisgICAgICAgICAgICAgICAgICAgIGlmICghbi0+YXR0YWNo
ZWQoKSAmJiBIVE1MV2lkZ2V0KQogICAgICAgICAgICAgICAgICAgICAgICAgbi0+YXR0YWNoKCk7
Ci0jZW5kaWYKICAgICAgICAgICAgICAgICB9IGVsc2UgewotI2lmZGVmIFBBUlNFUl9ERUJVRwot
ICAgICAgICAgICAgICAgICAgICBrZERlYnVnKCA2MDM1ICkgPDwgImFkZGluZyBzdHlsZSBiZWZv
cmUgdG8gYm9keSBmYWlsZWQhISEhIiA8PCBlbmRsOwotI2VuZGlmCi0gICAgICAgICAgICAgICAg
ICAgIGRpc2NhcmRfdW50aWwgPSBJRF9TVFlMRSArIElEX0NMT1NFX1RBRzsKKyAgICAgICAgICAg
ICAgICAgICAgc2V0U2tpcE1vZGUoSFRNTE5hbWVzOjpzdHlsZSgpKTsKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0gZWxzZSBpZihpbkJvZHkpIHsKLSAgICAgICAgICAg
ICAgICBkaXNjYXJkX3VudGlsID0gSURfU1RZTEUgKyBJRF9DTE9TRV9UQUc7CisgICAgICAgICAg
ICAgICAgc2V0U2tpcE1vZGUoSFRNTE5hbWVzOjpzdHlsZSgpKTsKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIC8vIFNDUklQVCBhbmQgT0JKRUNUIGFyZSBhbGxvd2VkIGluIHRoZSBib2R5LgotICAgICAg
ICBjYXNlIElEX0JPRFk6Ci0gICAgICAgICAgICBpZihpbkJvZHkgJiYgZG9jKCktPmJvZHkoKSkg
eworICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmJvZHkoKSkp
IHsKKyAgICAgICAgICAgIGlmIChpbkJvZHkgJiYgZG9jKCktPmJvZHkoKSkgewogICAgICAgICAg
ICAgICAgIC8vIHdlIGhhdmUgYW5vdGhlciA8Qk9EWT4gZWxlbWVudC4uLi4gYXBwbHkgYXR0cmli
dXRlcyB0byBleGlzdGluZyBvbmUKICAgICAgICAgICAgICAgICAvLyBtYWtlIHN1cmUgd2UgZG9u
J3Qgb3ZlcndyaXRlIGFscmVhZHkgZXhpc3RpbmcgYXR0cmlidXRlcwogICAgICAgICAgICAgICAg
IC8vIHNvbWUgc2l0ZXMgdXNlIDxib2R5IGJnY29sb3I9cmlnaHRjb2xvcj4uLi48Ym9keSBiZ2Nv
bG9yPXdyb25nY29sb3I+CkBAIC00NDksMzYwICszODQsMjU5IEBAIGJvb2wgS0hUTUxQYXJzZXI6
Omluc2VydE5vZGUoTm9kZUltcGwgKm4KICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9ICFi
bWFwLT5nZXRBdHRyaWJ1dGVJdGVtKGl0LT5pZCgpKTsKICAgICAgICAgICAgICAgICAgICAgYm1h
cC0+aW5zZXJ0QXR0cmlidXRlKGl0LT5jbG9uZShmYWxzZSkpOwogICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBpZiAoIGNoYW5nZWQgKQotICAgICAgICAgICAgICAgICAgICBkb2Mo
KS0+cmVjYWxjU3R5bGUoIE5vZGVJbXBsOjpJbmhlcml0ICk7Ci0gICAgICAgICAgICB9IGVsc2Ug
aWYgKCBjdXJyZW50LT5pc0RvY3VtZW50Tm9kZSgpICkKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAg
ICAgICAvLyB0aGUgZm9sbG93aW5nIGlzIGEgaGFjayB0byBtb3ZlIG5vbiByZW5kZXJlZCBlbGVt
ZW50cwotICAgICAgICAgICAgLy8gb3V0c2lkZSBvZiB0YWJsZXMuCi0gICAgICAgICAgICAvLyBu
ZWVkZWQgZm9yIGJyb2tlbiBjb25zdHJ1Y3RzIGxpa2UgPHRhYmxlPjxmb3JtIC4uLj48dHI+Li4u
LgotICAgICAgICBjYXNlIElEX0lOUFVUOgotICAgICAgICB7Ci0gICAgICAgICAgICBFbGVtZW50
SW1wbCAqZSA9IHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsICo+KG4pOwotICAgICAgICAgICAgRE9N
U3RyaW5nIHR5cGUgPSBlLT5nZXRBdHRyaWJ1dGUoQVRUUl9UWVBFKTsKLQotICAgICAgICAgICAg
aWYgKCBzdHJjYXNlY21wKCB0eXBlLCAiaGlkZGVuIiApID09IDAgJiYgZm9ybSkgeworICAgICAg
ICAgICAgICAgIGlmIChjaGFuZ2VkKQorICAgICAgICAgICAgICAgICAgICBkb2MoKS0+cmVjYWxj
U3R5bGUoTm9kZUltcGw6OkluaGVyaXQpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKCFjdXJyZW50LT5pc0RvY3VtZW50
Tm9kZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfSBlbHNlIGlm
IChoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjppbnB1dCgpKSkgeworICAgICAgICAgICAgRE9N
U3RyaW5nIHR5cGUgPSBoLT5nZXRBdHRyaWJ1dGUoQVRUUl9UWVBFKTsKKyAgICAgICAgICAgIGlm
IChzdHJjYXNlY21wKHR5cGUsICJoaWRkZW4iKSA9PSAwICYmIGZvcm0pIHsKICAgICAgICAgICAg
ICAgICBmb3JtLT5hZGRDaGlsZChuKTsKLSNpZiBTUEVFRF9ERUJVRyA8IDIKLSAgICAgICAgICAg
ICAgICBpZighbi0+YXR0YWNoZWQoKSAmJiBIVE1MV2lkZ2V0KQorICAgICAgICAgICAgICAgIGlm
ICghbi0+YXR0YWNoZWQoKSAmJiBIVE1MV2lkZ2V0KQogICAgICAgICAgICAgICAgICAgICBuLT5h
dHRhY2goKTsKLSNlbmRpZgogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAg
ICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBJRF9URVhU
OgotICAgICAgICAgICAgLy8gaWdub3JlIHRleHQgaW5zaWRlIHRoZSBmb2xsb3dpbmcgZWxlbWVu
dHMuCi0gICAgICAgICAgICBzd2l0Y2goY3VycmVudC0+aWQoKSkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgIGNhc2UgSURfU0VMRUNUOgotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgOwotICAgICAgICAgICAgICAg
IC8vIGZhbGwgdGhyb3VnaCEhCi0gICAgICAgICAgICB9OwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgSURfREQ6Ci0gICAgICAgIGNhc2UgSURfRFQ6CisgICAgICAgIH0gZWxzZSBp
ZiAoaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6ZGQoKSkgfHwgaC0+aGFzTG9jYWxOYW1lKEhU
TUxOYW1lczo6ZHQoKSkpIHsKICAgICAgICAgICAgIGUgPSBuZXcgSFRNTERMaXN0RWxlbWVudElt
cGwoZG9jdW1lbnQpOwotICAgICAgICAgICAgaWYgKCBpbnNlcnROb2RlKGUpICkgeworICAgICAg
ICAgICAgaWYgKGluc2VydE5vZGUoZSkpIHsKICAgICAgICAgICAgICAgICBpbnNlcnROb2RlKG4p
OwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSURfQVJFQToKLSAgICAgICAgewotICAgICAgICAgICAg
aWYobWFwKQotICAgICAgICAgICAgeworICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFt
ZShIVE1MTmFtZXM6OmFyZWEoKSkpIHsKKyAgICAgICAgICAgIGlmIChtYXApIHsKICAgICAgICAg
ICAgICAgICBtYXAtPmFkZENoaWxkKG4pOwotI2lmIFNQRUVEX0RFQlVHIDwgMgotICAgICAgICAg
ICAgICAgIGlmKCFuLT5hdHRhY2hlZCgpICYmIEhUTUxXaWRnZXQpCisgICAgICAgICAgICAgICAg
aWYgKCFuLT5hdHRhY2hlZCgpICYmIEhUTUxXaWRnZXQpCiAgICAgICAgICAgICAgICAgICAgIG4t
PmF0dGFjaCgpOwotI2VuZGlmCiAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBJRF9D
QVBUSU9OOiB7Ci0gICAgICAgICAgICBzd2l0Y2ggKGN1cnJlbnQtPmlkKCkpIHsKLSAgICAgICAg
ICAgICAgICBjYXNlIElEX1RIRUFEOgotICAgICAgICAgICAgICAgIGNhc2UgSURfVEJPRFk6Ci0g
ICAgICAgICAgICAgICAgY2FzZSBJRF9URk9PVDoKLSAgICAgICAgICAgICAgICBjYXNlIElEX1RS
OgotICAgICAgICAgICAgICAgIGNhc2UgSURfVEg6Ci0gICAgICAgICAgICAgICAgY2FzZSBJRF9U
RDogewotICAgICAgICAgICAgICAgICAgICBOb2RlSW1wbCogdHNlY3Rpb24gPSBjdXJyZW50Owot
ICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudC0+aWQoKSA9PSBJRF9UUikKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHRzZWN0aW9uID0gY3VycmVudC0+cGFyZW50KCk7Ci0gICAgICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKGN1cnJlbnQtPmlkKCkgPT0gSURfVEQgfHwgY3VycmVudC0+aWQo
KSA9PSBJRF9USCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHRzZWN0aW9uID0gY3VycmVudC0+
cGFyZW50KCktPnBhcmVudCgpOwotICAgICAgICAgICAgICAgICAgICBOb2RlSW1wbCogdGFibGUg
PSB0c2VjdGlvbi0+cGFyZW50KCk7Ci0gICAgICAgICAgICAgICAgICAgIGludCBleGNlcHRpb25j
b2RlID0gMDsKLSAgICAgICAgICAgICAgICAgICAgdGFibGUtPmluc2VydEJlZm9yZShuLCB0c2Vj
dGlvbiwgZXhjZXB0aW9uY29kZSk7Ci0gICAgICAgICAgICAgICAgICAgIHB1c2hCbG9jayhpZCwg
dGFnUHJpb3JpdHkoaWQpKTsKLSAgICAgICAgICAgICAgICAgICAgc2V0Q3VycmVudChuKTsKLSAg
ICAgICAgICAgICAgICAgICAgaW5TdHJheVRhYmxlQ29udGVudCsrOwotICAgICAgICAgICAgICAg
ICAgICBibG9ja1N0YWNrLT5zdHJheVRhYmxlQ29udGVudCA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfSBlbHNlIGlmICho
LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpjYXB0aW9uKCkpKSB7CisgICAgICAgICAgICBpZiAo
aXNUYWJsZVBhcnQoY3VycmVudCkpIHsKKyAgICAgICAgICAgICAgICBOb2RlSW1wbCogdHNlY3Rp
b24gPSBjdXJyZW50OworICAgICAgICAgICAgICAgIGlmIChjdXJyZW50LT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6dHIoKSkpCisgICAgICAgICAgICAgICAgICAgIHRzZWN0aW9uID0gY3VycmVudC0+
cGFyZW50KCk7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoY3VycmVudC0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OnRkKCkpIHx8IGN1cnJlbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0aCgpKSkK
KyAgICAgICAgICAgICAgICAgICAgdHNlY3Rpb24gPSBjdXJyZW50LT5wYXJlbnQoKS0+cGFyZW50
KCk7CisgICAgICAgICAgICAgICAgTm9kZUltcGwqIHRhYmxlID0gdHNlY3Rpb24tPnBhcmVudCgp
OworICAgICAgICAgICAgICAgIGludCBleGNlcHRpb25jb2RlID0gMDsKKyAgICAgICAgICAgICAg
ICB0YWJsZS0+aW5zZXJ0QmVmb3JlKG4sIHRzZWN0aW9uLCBleGNlcHRpb25jb2RlKTsKKyAgICAg
ICAgICAgICAgICBwdXNoQmxvY2sobG9jYWxOYW1lLCB0YWdQcmlvcml0eSk7CisgICAgICAgICAg
ICAgICAgc2V0Q3VycmVudChuKTsKKyAgICAgICAgICAgICAgICBpblN0cmF5VGFibGVDb250ZW50
Kys7CisgICAgICAgICAgICAgICAgYmxvY2tTdGFjay0+c3RyYXlUYWJsZUNvbnRlbnQgPSB0cnVl
OworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBJRF9USEVBRDoKLSAgICAgICAgY2Fz
ZSBJRF9UQk9EWToKLSAgICAgICAgY2FzZSBJRF9URk9PVDoKLSAgICAgICAgY2FzZSBJRF9DT0xH
Uk9VUDogewotICAgICAgICAgICAgaWYgKGlzVGFibGVSZWxhdGVkVGFnKGN1cnJlbnQtPmlkKCkp
KSB7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKGJsb2NrU3RhY2sgJiYgY3VycmVudC0+aWQoKSAh
PSBJRF9UQUJMRSAmJiBpc1RhYmxlUmVsYXRlZFRhZyhjdXJyZW50LT5pZCgpKSkKKyAgICAgICAg
fSBlbHNlIGlmIChoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0aGVhZCgpKSB8fCBoLT5oYXNM
b2NhbE5hbWUoSFRNTE5hbWVzOjp0Ym9keSgpKSB8fAorICAgICAgICAgICAgICAgICAgIGgtPmhh
c0xvY2FsTmFtZShIVE1MTmFtZXM6OnRmb290KCkpIHx8IGgtPmhhc0xvY2FsTmFtZShIVE1MTmFt
ZXM6OmNvbGdyb3VwKCkpKSB7CisgICAgICAgICAgICBpZiAoaXNUYWJsZVJlbGF0ZWQoY3VycmVu
dCkpIHsKKyAgICAgICAgICAgICAgICB3aGlsZSAoYmxvY2tTdGFjayAmJiBpc1RhYmxlUGFydChj
dXJyZW50KSkKICAgICAgICAgICAgICAgICAgICAgcG9wT25lQmxvY2soKTsKICAgICAgICAgICAg
ICAgICByZXR1cm4gaW5zZXJ0Tm9kZShuKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICAv
LyBzd2l0Y2ggb24gdGhlIGN1cnJlbnRseSBhY3RpdmUgZWxlbWVudAotICAgICAgICBzd2l0Y2go
Y3VycmVudC0+aWQoKSkKLSAgICAgICAgewotICAgICAgICBjYXNlIElEX0hUTUw6Ci0gICAgICAg
ICAgICBzd2l0Y2goaWQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICBjYXNlIElEX1NDUklQ
VDoKLSAgICAgICAgICAgIGNhc2UgSURfU1RZTEU6Ci0gICAgICAgICAgICBjYXNlIElEX01FVEE6
Ci0gICAgICAgICAgICBjYXNlIElEX0xJTks6Ci0gICAgICAgICAgICBjYXNlIElEX09CSkVDVDoK
LSAgICAgICAgICAgIGNhc2UgSURfRU1CRUQ6Ci0gICAgICAgICAgICBjYXNlIElEX1RJVExFOgot
ICAgICAgICAgICAgY2FzZSBJRF9JU0lOREVYOgotICAgICAgICAgICAgY2FzZSBJRF9CQVNFOgot
ICAgICAgICAgICAgICAgIGlmKCFoZWFkKSB7CisgICAgfQorICAgIAorICAgIC8vIDIuIE5leHQg
d2UgZXhhbWluZSBvdXIgY3VycmVudGx5IGFjdGl2ZSBlbGVtZW50IHRvIGRvIHNvbWUgZnVydGhl
ciBlcnJvciBoYW5kbGluZy4KKyAgICBpZiAoY3VycmVudC0+aXNIVE1MRWxlbWVudCgpKSB7Cisg
ICAgICAgIEhUTUxFbGVtZW50SW1wbCogaCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCo+
KGN1cnJlbnQpOworICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGN1cnJlbnRUYWdOYW1lID0g
Y3VycmVudC0+bG9jYWxOYW1lKCk7CisgICAgICAgIGlmIChoLT5oYXNMb2NhbE5hbWUoSFRNTE5h
bWVzOjpodG1sKCkpKSB7CisgICAgICAgICAgICBIVE1MRWxlbWVudEltcGwqIGVsdCA9IG4tPmlz
SFRNTEVsZW1lbnQoKSA/IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCo+KG4pIDogMDsKKyAg
ICAgICAgICAgIGlmIChlbHQgJiYgZWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpzY3JpcHQo
KSkgfHwgZWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpzdHlsZSgpKSB8fAorICAgICAgICAg
ICAgICAgIGVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6bWV0YSgpKSB8fCBlbHQtPmhhc0xv
Y2FsTmFtZShIVE1MTmFtZXM6OmxpbmsoKSkgfHwKKyAgICAgICAgICAgICAgICBlbHQtPmhhc0xv
Y2FsTmFtZShIVE1MTmFtZXM6Om9iamVjdCgpKSB8fCBlbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFt
ZXM6OmVtYmVkKCkpIHx8CisgICAgICAgICAgICAgICAgZWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5h
bWVzOjp0aXRsZSgpKSB8fCBlbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmlzaW5kZXgoKSkg
fHwKKyAgICAgICAgICAgICAgICBlbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmJhc2UoKSkp
IHsKKyAgICAgICAgICAgICAgICBpZiAoIWhlYWQpIHsKICAgICAgICAgICAgICAgICAgICAgaGVh
ZCA9IG5ldyBIVE1MSGVhZEVsZW1lbnRJbXBsKGRvY3VtZW50KTsKICAgICAgICAgICAgICAgICAg
ICAgZSA9IGhlYWQ7CiAgICAgICAgICAgICAgICAgICAgIGluc2VydE5vZGUoZSk7CiAgICAgICAg
ICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgSURfVEVYVDogewotICAgICAgICAgICAg
ICAgIFRleHRJbXBsICp0ID0gc3RhdGljX2Nhc3Q8VGV4dEltcGwgKj4obik7Ci0gICAgICAgICAg
ICAgICAgaWYgKHQtPmNvbnRhaW5zT25seVdoaXRlc3BhY2UoKSkKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIC8qIEZhbGwgdGhyb3VnaCB0byBkZWZh
dWx0ICovCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
ICAgIGlmICggaGF2ZUZyYW1lU2V0ICkgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZSA9IG5ldyBI
VE1MQm9keUVsZW1lbnRJbXBsKGRvY3VtZW50KTsKLSAgICAgICAgICAgICAgICBzdGFydEJvZHko
KTsKLSAgICAgICAgICAgICAgICBpbnNlcnROb2RlKGUpOwotICAgICAgICAgICAgICAgIGhhbmRs
ZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICBpZiAobi0+aXNUZXh0Tm9kZSgpKSB7CisgICAgICAgICAgICAgICAg
ICAgIFRleHRJbXBsICp0ID0gc3RhdGljX2Nhc3Q8VGV4dEltcGwgKj4obik7CisgICAgICAgICAg
ICAgICAgICAgIGlmICh0LT5jb250YWluc09ubHlXaGl0ZXNwYWNlKCkpCisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGlmICghaGF2ZUZy
YW1lU2V0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBlID0gbmV3IEhUTUxCb2R5RWxlbWVu
dEltcGwoZG9jdW1lbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRCb2R5KCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnROb2RlKGUpOworICAgICAgICAgICAgICAgICAg
ICAgICAgaGFuZGxlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJ
RF9IRUFEOgotICAgICAgICAgICAgLy8gd2UgY2FuIGdldCBoZXJlIG9ubHkgaWYgdGhlIGVsZW1l
bnQgaXMgbm90IGFsbG93ZWQgaW4gaGVhZC4KLSAgICAgICAgICAgIGlmIChpZCA9PSBJRF9IVE1M
KQorICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmhlYWQoKSkp
IHsKKyAgICAgICAgICAgIGlmIChuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aHRtbCgpKSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAg
ICAgICAgICAvLyBUaGlzIG1lYW5zIHRoZSBib2R5IHN0YXJ0cyBoZXJlLi4uCi0gICAgICAgICAg
ICAgICAgaWYgKCBoYXZlRnJhbWVTZXQgKSBicmVhazsKLSAgICAgICAgICAgICAgICBwb3BCbG9j
ayhJRF9IRUFEKTsKLSAgICAgICAgICAgICAgICBlID0gbmV3IEhUTUxCb2R5RWxlbWVudEltcGwo
ZG9jdW1lbnQpOwotICAgICAgICAgICAgICAgIHN0YXJ0Qm9keSgpOwotICAgICAgICAgICAgICAg
IGluc2VydE5vZGUoZSk7Ci0gICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7CisgICAgICAg
ICAgICAgICAgaWYgKCFoYXZlRnJhbWVTZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgcG9wQmxv
Y2soY3VycmVudFRhZ05hbWUpOworICAgICAgICAgICAgICAgICAgICBlID0gbmV3IEhUTUxCb2R5
RWxlbWVudEltcGwoZG9jdW1lbnQpOworICAgICAgICAgICAgICAgICAgICBzdGFydEJvZHkoKTsK
KyAgICAgICAgICAgICAgICAgICAgaW5zZXJ0Tm9kZShlKTsKKyAgICAgICAgICAgICAgICAgICAg
aGFuZGxlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSURfQk9EWToKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIElEX0NBUFRJT046CisgICAgICAgIH0gZWxzZSBpZiAoaC0+aGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6Y2FwdGlvbigpKSkgewogICAgICAgICAgICAgLy8gSWxsZWdhbCBjb250
ZW50IGluIGEgY2FwdGlvbi4gQ2xvc2UgdGhlIGNhcHRpb24gYW5kIHRyeSBhZ2Fpbi4KLSAgICAg
ICAgICAgIHBvcEJsb2NrKElEX0NBUFRJT04pOwotICAgICAgICAgICAgc3dpdGNoKCBpZCApIHsK
LSAgICAgICAgICAgIGNhc2UgSURfVEhFQUQ6Ci0gICAgICAgICAgICBjYXNlIElEX1RGT09UOgot
ICAgICAgICAgICAgY2FzZSBJRF9UQk9EWToKLSAgICAgICAgICAgIGNhc2UgSURfVFI6Ci0gICAg
ICAgICAgICBjYXNlIElEX1REOgotICAgICAgICAgICAgY2FzZSBJRF9USDoKKyAgICAgICAgICAg
IHBvcEJsb2NrKGN1cnJlbnRUYWdOYW1lKTsKKyAgICAgICAgICAgIGlmIChpc1RhYmxlUGFydChu
KSkKICAgICAgICAgICAgICAgICByZXR1cm4gaW5zZXJ0Tm9kZShuLCBmbGF0KTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElEX1RBQkxFOgotICAgICAg
ICBjYXNlIElEX1RIRUFEOgotICAgICAgICBjYXNlIElEX1RGT09UOgotICAgICAgICBjYXNlIElE
X1RCT0RZOgotICAgICAgICBjYXNlIElEX1RSOgotICAgICAgICAgICAgc3dpdGNoKGlkKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgY2FzZSBJRF9UQUJMRToKLSAgICAgICAgICAgICAgICBw
b3BCbG9jayhJRF9UQUJMRSk7IC8vIGVuZCB0aGUgdGFibGUKKyAgICAgICAgfSBlbHNlIGlmICho
LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0YWJsZSgpKSB8fCBoLT5oYXNMb2NhbE5hbWUoSFRN
TE5hbWVzOjp0cigpKSB8fCBpc1RhYmxlU2VjdGlvbihoKSkgeworICAgICAgICAgICAgaWYgKG4t
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0YWJsZSgpKSkgeworICAgICAgICAgICAgICAgIHBvcEJs
b2NrKGxvY2FsTmFtZSk7IC8vIGVuZCB0aGUgdGFibGUKICAgICAgICAgICAgICAgICBoYW5kbGVk
ID0gdHJ1ZTsgICAgICAvLyAuLi5hbmQgc3RhcnQgYSBuZXcgb25lCi0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0JICAgIGNhc2UgSURfVEVYVDoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBUZXh0SW1wbCAqdCA9IHN0YXRpY19jYXN0PFRleHRJbXBsICo+KG4pOwotICAgICAgICAgICAg
ICAgIGlmICh0LT5jb250YWluc09ubHlXaGl0ZXNwYWNlKCkpCi0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICBET01TdHJpbmdJbXBsICppID0gdC0+c3Ry
aW5nKCk7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHBvcyA9IDA7Ci0gICAgICAgICAg
ICAgICAgd2hpbGUocG9zIDwgaS0+bCAmJiAoICooaS0+cytwb3MpID09IFFDaGFyKCcgJykgfHwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihpLT5zK3BvcykgPT0gUUNo
YXIoMHhhMCkpKSBwb3MrKzsKLSAgICAgICAgICAgICAgICBpZihwb3MgPT0gaS0+bCkKLSAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIE5vZGVJbXBsICpub2RlID0gY3VycmVu
dDsKLSAgICAgICAgICAgICAgICBOb2RlSW1wbCAqcGFyZW50ID0gbm9kZS0+cGFyZW50Tm9kZSgp
OwotCi0gICAgICAgICAgICAgICAgTm9kZUltcGwgKnBhcmVudHBhcmVudCA9IHBhcmVudC0+cGFy
ZW50Tm9kZSgpOwotCi0gICAgICAgICAgICAgICAgaWYgKG4tPmlzVGV4dE5vZGUoKSB8fAotICAg
ICAgICAgICAgICAgICAgICAoIG5vZGUtPmlkKCkgPT0gSURfVFIgJiYKLSAgICAgICAgICAgICAg
ICAgICAgICggcGFyZW50LT5pZCgpID09IElEX1RIRUFEIHx8Ci0gICAgICAgICAgICAgICAgICAg
ICAgcGFyZW50LT5pZCgpID09IElEX1RCT0RZIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgcGFy
ZW50LT5pZCgpID09IElEX1RGT09UICkgJiYgcGFyZW50cGFyZW50LT5pZCgpID09IElEX1RBQkxF
ICkgfHwKLSAgICAgICAgICAgICAgICAgICAgKCAhY2hlY2tDaGlsZChJRF9UUiwgaWQsICFkb2Mo
KS0+aW5Db21wYXRNb2RlKCkpICYmICggbm9kZS0+aWQoKSA9PSBJRF9USEVBRCB8fCBub2RlLT5p
ZCgpID09IElEX1RCT0RZIHx8IG5vZGUtPmlkKCkgPT0gSURfVEZPT1QgKSAmJgotICAgICAgICAg
ICAgICAgICAgICAgcGFyZW50LT5pZCgpID09IElEX1RBQkxFICkpCi0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICBub2RlID0gKG5vZGUtPmlkKCkgPT0gSURfVEFCTEUpID8g
bm9kZSA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKChub2RlLT5pZCgpID09IElEX1RS
KSA/IHBhcmVudHBhcmVudCA6IHBhcmVudCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgICAgICBib29sIHBvc3NpYmx5TW92ZVN0cmF5Q29udGVudCA9IHRy
dWU7CisgICAgICAgICAgICAgICAgaW50IGV4Y2VwdGlvbkNvZGUgPSAwOworICAgICAgICAgICAg
ICAgIGlmIChuLT5pc1RleHROb2RlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgVGV4dEltcGwg
KnQgPSBzdGF0aWNfY2FzdDxUZXh0SW1wbCAqPihuKTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHQtPmNvbnRhaW5zT25seVdoaXRlc3BhY2UoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgRE9NU3RyaW5nSW1wbCAqaSA9IHQtPnN0
cmluZygpOworICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcG9zID0gMDsKKyAgICAg
ICAgICAgICAgICAgICAgd2hpbGUgKHBvcyA8IGktPmwgJiYgKCooaS0+cytwb3MpID09IFFDaGFy
KCcgJykgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooaS0+
cytwb3MpID09IFFDaGFyKDB4YTApKSkgcG9zKys7CisgICAgICAgICAgICAgICAgICAgIGlmIChw
b3MgPT0gaS0+bCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHBvc3NpYmx5TW92ZVN0cmF5Q29u
dGVudCA9IGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAocG9z
c2libHlNb3ZlU3RyYXlDb250ZW50KSB7CisgICAgICAgICAgICAgICAgICAgIE5vZGVJbXBsICpu
b2RlID0gY3VycmVudDsKICAgICAgICAgICAgICAgICAgICAgTm9kZUltcGwgKnBhcmVudCA9IG5v
ZGUtPnBhcmVudE5vZGUoKTsKLSAgICAgICAgICAgICAgICAgICAgaW50IGV4Y2VwdGlvbmNvZGUg
PSAwOwotICAgICAgICAgICAgICAgICAgICBwYXJlbnQtPmluc2VydEJlZm9yZSggbiwgbm9kZSwg
ZXhjZXB0aW9uY29kZSApOwotICAgICAgICAgICAgICAgICAgICBpZiAoIGV4Y2VwdGlvbmNvZGUg
KSB7Ci0jaWZkZWYgUEFSU0VSX0RFQlVHCi0gICAgICAgICAgICAgICAgICAgICAgICBrZERlYnVn
KCA2MDM1ICkgPDwgImFkZGluZyBjb250ZW50IGJlZm9yZSB0YWJsZSBmYWlsZWQhIiA8PCBlbmRs
OwotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgTm9kZUltcGwgKmdyYW5kcGFyZW50ID0gcGFyZW50LT5wYXJlbnROb2RlKCk7CisKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKG4tPmlzVGV4dE5vZGUoKSB8fAorICAgICAgICAgICAgICAg
ICAgICAgICAgKGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnRyKCkpICYmCisgICAgICAgICAg
ICAgICAgICAgICAgICAgaXNUYWJsZVNlY3Rpb24ocGFyZW50KSAmJiBncmFuZHBhcmVudC0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OnRhYmxlKCkpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIEZJWE1FOiBEVEQgQ0hFQ0sgd2l0aCBubyBlbGVtZW50IQorICAgICAgICAgICAgICAgICAg
ICAgICAgKCAvKiFjaGVja0NoaWxkKElEX1RSLCBpZCwgIWRvYygpLT5pbkNvbXBhdE1vZGUoKSkg
JiYqLyBpc1RhYmxlU2VjdGlvbihub2RlKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgIHBh
cmVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRhYmxlKCkpKSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgbm9kZSA9IChub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGFibGUoKSkpID8g
bm9kZSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgobm9kZS0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OnRyKCkpKSA/IGdyYW5kcGFyZW50IDogcGFyZW50KTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIE5vZGVJbXBsICpwYXJlbnQgPSBub2RlLT5wYXJlbnROb2RlKCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBwYXJlbnQtPmluc2VydEJlZm9yZShuLCBub2RlLCBleGNlcHRp
b25Db2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZXhjZXB0aW9uQ29kZSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuLT5pc0hUTUxFbGVtZW50KCkgJiYgdGFn
UHJpb3JpdHkgPiAwICYmIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhZmxhdCAm
JiBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwqPihuKS0+ZW5kVGFnUmVxdWlyZW1lbnQoKSAh
PSBET006OkZPUkJJRERFTikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2hCbG9jayhsb2NhbE5hbWUsIHRhZ1ByaW9yaXR5
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q3VycmVudChuKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5TdHJheVRhYmxlQ29udGVudCsrOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBibG9ja1N0YWNrLT5zdHJheVRhYmxlQ29udGVudCA9
IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmIChuLT5pc0VsZW1lbnROb2Rl
KCkgJiYgdGFnUHJpb3JpdHkoaWQpICE9IDAgJiYgCi0gICAgICAgICAgICAgICAgICAgICAgICAh
ZmxhdCAmJiBlbmRUYWdSZXF1aXJlbWVudChpZCkgIT0gRE9NOjpGT1JCSURERU4pCi0gICAgICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHB1c2hCbG9jayhpZCwgdGFn
UHJpb3JpdHkoaWQpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldEN1cnJlbnQobik7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBpblN0cmF5VGFibGVDb250ZW50Kys7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBibG9ja1N0YWNrLT5zdHJheVRhYmxlQ29udGVudCA9IHRydWU7CisKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKCFleGNlcHRpb25Db2RlKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoY3VycmVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRyKCkpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGUgPSBuZXcgSFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsKEhU
TUxOYW1lczo6dGQoKSwgZG9jdW1lbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBp
ZiAoY3VycmVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRhYmxlKCkpKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGUgPSBuZXcgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsKEhUTUxO
YW1lczo6dGJvZHkoKSwgZG9jdW1lbnQsIHRydWUpOyAvLyBpbXBsaWNpdCAKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlID0gbmV3IEhU
TUxUYWJsZVJvd0VsZW1lbnRJbXBsKGRvY3VtZW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0Tm9kZShlKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgIGlmICggY3VycmVudC0+aWQoKSA9PSBJRF9UUiApCi0gICAgICAgICAgICAgICAgICAg
IGUgPSBuZXcgSFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsKGRvY3VtZW50LCBJRF9URCk7Ci0gICAg
ICAgICAgICAgICAgZWxzZSBpZiAoIGN1cnJlbnQtPmlkKCkgPT0gSURfVEFCTEUgKQotICAgICAg
ICAgICAgICAgICAgICBlID0gbmV3IEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbCggZG9jdW1l
bnQsIElEX1RCT0RZLCB0cnVlIC8qIGltcGxpY2l0ICovICk7Ci0gICAgICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgICAgICBlID0gbmV3IEhUTUxUYWJsZVJvd0VsZW1lbnRJbXBsKCBk
b2N1bWVudCApOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGluc2VydE5vZGUo
ZSk7Ci0gICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICB9IC8vIGVuZCBkZWZhdWx0Ci0gICAgICAgICAgICB9IC8vIGVuZCBz
d2l0Y2gKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElEX09CSkVDVDoKLSAgICAg
ICAgICAgIGRpc2NhcmRfdW50aWwgPSBJRF9PQkpFQ1QgKyBJRF9DTE9TRV9UQUc7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoaC0+aGFzTG9jYWxOYW1lKEhUTUxO
YW1lczo6b2JqZWN0KCkpKSB7CisgICAgICAgICAgICBzZXRTa2lwTW9kZShIVE1MTmFtZXM6Om9i
amVjdCgpKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgY2FzZSBJRF9VTDoK
LSAgICAgICAgY2FzZSBJRF9PTDoKLSAgICAgICAgY2FzZSBJRF9ESVI6Ci0gICAgICAgIGNhc2Ug
SURfTUVOVToKKyAgICAgICAgfSBlbHNlIGlmIChoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp1
bCgpKSB8fCBoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvbCgpKSB8fAorICAgICAgICAgICAg
ICAgICBoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpkaXIoKSkgfHwgaC0+aGFzTG9jYWxOYW1l
KEhUTUxOYW1lczo6bWVudSgpKSkgewogICAgICAgICAgICAgZSA9IG5ldyBIVE1MRGl2RWxlbWVu
dEltcGwoZG9jdW1lbnQpOwogICAgICAgICAgICAgaW5zZXJ0Tm9kZShlKTsKICAgICAgICAgICAg
IGhhbmRsZWQgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIElE
X0RMOgotICAgICAgICAgICAgICAgIHBvcEJsb2NrKElEX0RMKTsKLSAgICAgICAgICAgICAgICBo
YW5kbGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2Ug
SURfRFQ6Ci0gICAgICAgICAgICAgICAgcG9wQmxvY2soSURfRFQpOwotICAgICAgICAgICAgICAg
IGhhbmRsZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElE
X1NFTEVDVDoKLSAgICAgICAgICAgIGlmKCBuLT5pc0lubGluZSgpICkKKyAgICAgICAgfSBlbHNl
IGlmIChoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpkbCgpKSB8fCBoLT5oYXNMb2NhbE5hbWUo
SFRNTE5hbWVzOjpkdCgpKSkgeworICAgICAgICAgICAgcG9wQmxvY2soY3VycmVudFRhZ05hbWUp
OworICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7CisgICAgICAgIH0gZWxzZSBpZiAoaC0+aGFz
TG9jYWxOYW1lKEhUTUxOYW1lczo6c2VsZWN0KCkpKSB7CisgICAgICAgICAgICBpZiAoaXNJbmxp
bmUobikpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgSURfUDoKLSAgICAgICAgY2FzZSBJRF9IMToKLSAgICAgICAgY2FzZSBJ
RF9IMjoKLSAgICAgICAgY2FzZSBJRF9IMzoKLSAgICAgICAgY2FzZSBJRF9INDoKLSAgICAgICAg
Y2FzZSBJRF9INToKLSAgICAgICAgY2FzZSBJRF9INjoKLSAgICAgICAgICAgIGlmKCFuLT5pc0lu
bGluZSgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHBvcEJsb2NrKGN1cnJlbnQt
PmlkKCkpOworICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnAo
KSkgfHwgaXNIZWFkZXJUYWcoY3VycmVudFRhZ05hbWUpKSB7CisgICAgICAgICAgICBpZiAoaXNJ
bmxpbmUobikpIHsKKyAgICAgICAgICAgICAgICBwb3BCbG9jayhjdXJyZW50VGFnTmFtZSk7CiAg
ICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBJRF9PUFRJT046Ci0gICAgICAgIGNhc2UgSURfT1BUR1JP
VVA6Ci0gICAgICAgICAgICBpZiAoaWQgPT0gSURfT1BUR1JPVVApCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgcG9wQmxvY2soY3VycmVudC0+aWQoKSk7CisgICAgICAgIH0gZWxzZSBp
ZiAoaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpIHx8IGgtPmhhc0xvY2FsTmFt
ZShIVE1MTmFtZXM6Om9wdGdyb3VwKCkpKSB7CisgICAgICAgICAgICBpZiAobG9jYWxOYW1lID09
IEhUTUxOYW1lczo6b3B0Z3JvdXAoKSkgeworICAgICAgICAgICAgICAgIHBvcEJsb2NrKGN1cnJl
bnRUYWdOYW1lKTsKICAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGVsc2UgaWYoaWQgPT0gSURfU0VMRUNUKQotICAgICAgICAgICAgewor
ICAgICAgICAgICAgZWxzZSBpZiAobG9jYWxOYW1lID09IEhUTUxOYW1lczo6c2VsZWN0KCkpIHsK
ICAgICAgICAgICAgICAgICAvLyBJRSB0cmVhdHMgYSBuZXN0ZWQgc2VsZWN0IGFzIDwvc2VsZWN0
Pi4gTGV0J3MgZG8gdGhlIHNhbWUKLSAgICAgICAgICAgICAgICBwb3BCbG9jayggSURfU0VMRUNU
ICk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgcG9wQmxvY2sobG9j
YWxOYW1lKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
Ly8gaGVhZCBlbGVtZW50cyBpbiB0aGUgYm9keSBzaG91bGQgYmUgaWdub3JlZC4KLSAgICAgICAg
Y2FzZSBJRF9BRERSRVNTOgotICAgICAgICAgICAgcG9wQmxvY2soSURfQUREUkVTUyk7CisgICAg
ICAgIH0gZWxzZSBpZiAoaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6YWRkcmVzcygpKSkgewor
ICAgICAgICAgICAgcG9wQmxvY2soY3VycmVudFRhZ05hbWUpOwogICAgICAgICAgICAgaGFuZGxl
ZCA9IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJRF9DT0xHUk9VUDoK
LSAgICAgICAgICAgIGlmIChpZCAhPSBJRF9URVhUKSB7Ci0gICAgICAgICAgICAgICAgcG9wQmxv
Y2soSURfQ09MR1JPVVApOworICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFtZShIVE1M
TmFtZXM6OmNvbGdyb3VwKCkpKSB7CisgICAgICAgICAgICBpZiAobG9jYWxOYW1lICE9IHRleHRB
dG9tKSB7CisgICAgICAgICAgICAgICAgcG9wQmxvY2soY3VycmVudFRhZ05hbWUpOwogICAgICAg
ICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgSURfRk9OVDoKLSAgICAgICAgICAgIHBvcEJsb2NrKElEX0ZPTlQp
OworICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmZvbnQoKSkp
IHsKKyAgICAgICAgICAgIHBvcEJsb2NrKGN1cnJlbnRUYWdOYW1lKTsKICAgICAgICAgICAgIGhh
bmRsZWQgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICBpZihjdXJyZW50LT5pc0RvY3VtZW50Tm9kZSgpKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIGlmKGN1cnJlbnQtPmZpcnN0Q2hpbGQoKSA9PSAwKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGUgPSBuZXcgSFRNTEh0bWxFbGVtZW50SW1wbChkb2N1bWVudCk7Ci0gICAgICAg
ICAgICAgICAgICAgIGluc2VydE5vZGUoZSk7Ci0gICAgICAgICAgICAgICAgICAgIGhhbmRsZWQg
PSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVs
c2UgaWYoY3VycmVudC0+aXNJbmxpbmUoKSkKLSAgICAgICAgICAgIHsKKyAgICAgICAgfSBlbHNl
IGlmICghaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6Ym9keSgpKSkgeworICAgICAgICAgICAg
aWYgKGlzSW5saW5lKGN1cnJlbnQpKSB7CiAgICAgICAgICAgICAgICAgcG9wSW5saW5lQmxvY2tz
KCk7CiAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KLQotICAgICAgICAvLyBpZiB3ZSBjb3VsZG4ndCBoYW5kbGUgdGhlIGVycm9yLCBqdXN0
IHJldGhyb3cgdGhlIGV4Y2VwdGlvbi4uLgotICAgICAgICBpZighaGFuZGxlZCkKLSAgICAgICAg
ewotICAgICAgICAgICAgLy9rZERlYnVnKCA2MDM1ICkgPDwgIkV4Y2VwdGlvbiBoYW5kbGVyIGZh
aWxlZCBpbiBIVE1MUEFyc2VyOjppbnNlcnROb2RlKCkiIDw8IGVuZGw7Ci0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGVsc2UgaWYgKGN1cnJlbnQtPmlzRG9jdW1lbnROb2Rl
KCkpIHsKKyAgICAgICAgaWYgKGN1cnJlbnQtPmZpcnN0Q2hpbGQoKSA9PSAwKSB7CisgICAgICAg
ICAgICBlID0gbmV3IEhUTUxIdG1sRWxlbWVudEltcGwoZG9jdW1lbnQpOworICAgICAgICAgICAg
aW5zZXJ0Tm9kZShlKTsKKyAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwogICAgICAgICB9Ci0K
LSAgICAgICAgcmV0dXJuIGluc2VydE5vZGUobik7CiAgICAgfQorCisgICAgLy8gMy4gSWYgd2Ug
Y291bGRuJ3QgaGFuZGxlIHRoZSBlcnJvciwganVzdCByZXR1cm4gZmFsc2UgYW5kIGF0dGVtcHQg
dG8gZXJyb3ItY29ycmVjdCBhZ2Fpbi4KKyAgICBpZiAoIWhhbmRsZWQpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICByZXR1cm4gaW5zZXJ0Tm9kZShuKTsKIH0KIAotTm9kZUltcGwgKktIVE1M
UGFyc2VyOjpnZXRFbGVtZW50KFRva2VuKiB0KQorTm9kZUltcGwgKkhUTUxQYXJzZXI6OmdldE5v
ZGUoVG9rZW4qIHQpCiB7Ci0gICAgc3dpdGNoICh0LT5pZCkKLSAgICB7Ci0gICAgY2FzZSBJRF9I
RUFEOgotICAgICAgICBpZiAoIWhlYWQgJiYgY3VycmVudC0+aWQoKSA9PSBJRF9IVE1MKSB7Ci0g
ICAgICAgICAgICBoZWFkID0gbmV3IEhUTUxIZWFkRWxlbWVudEltcGwoZG9jdW1lbnQpOwotICAg
ICAgICAgICAgcmV0dXJuIGhlYWQ7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
Y2FzZSBJRF9CT0RZOgorICAgIC8vIEhhbmRsZSBub24tZWxlbWVudHMgZmlyc3QuCisgICAgaWYg
KHQtPnRhZ05hbWUgPT0gdGV4dEF0b20pCisgICAgICAgIHJldHVybiBuZXcgVGV4dEltcGwoZG9j
dW1lbnQsIHQtPnRleHQpOworICAgIGlmICh0LT50YWdOYW1lID09IGNvbW1lbnRBdG9tKSB7Cisg
ICAgICAgIGlmICghaW5jbHVkZXNDb21tZW50c0luRE9NKQorICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgIHJldHVybiBuZXcgQ29tbWVudEltcGwoZG9jdW1lbnQsIHQtPnRleHQpOworICAg
IH0KKworICAgIC8vIE5vdyBoYW5kbGUgZWxlbWVudHMuCisgICAgaWYgKHQtPnRhZ05hbWUgPT0g
SFRNTE5hbWVzOjpoZWFkKCkpIHsKKyAgICAgICAgaWYgKGhlYWQgfHwgY3VycmVudC0+bG9jYWxO
YW1lKCkgIT0gSFRNTE5hbWVzOjpodG1sKCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9
IGVsc2UgaWYgKHQtPnRhZ05hbWUgPT0gSFRNTE5hbWVzOjpib2R5KCkpIHsKICAgICAgICAgLy8g
Ym9keSBubyBsb25nZXIgYWxsb3dlZCBpZiB3ZSBoYXZlIGEgZnJhbWVzZXQKICAgICAgICAgaWYg
KGhhdmVGcmFtZVNldCkKICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBwb3BCbG9jayhJ
RF9IRUFEKTsKKyAgICAgICAgcG9wQmxvY2soSFRNTE5hbWVzOjpoZWFkKCkpOwogICAgICAgICBz
dGFydEJvZHkoKTsKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MQm9keUVsZW1lbnRJbXBsKGRvY3Vt
ZW50KTsKKyAgICB9CiAKIC8vIGZyYW1lcwotICAgIGNhc2UgSURfRlJBTUVTRVQ6Ci0gICAgICAg
IHBvcEJsb2NrKElEX0hFQUQpOworICAgIGVsc2UgaWYgKHQtPnRhZ05hbWUgPT0gSFRNTE5hbWVz
OjpmcmFtZXNldCgpKSB7CisgICAgICAgIHBvcEJsb2NrKEhUTUxOYW1lczo6aGVhZCgpKTsKICAg
ICAgICAgaWYgKGluQm9keSAmJiAhaGF2ZUZyYW1lU2V0ICYmICFoYXZlQ29udGVudCkgewotICAg
ICAgICAgICAgcG9wQmxvY2soSURfQk9EWSk7CisgICAgICAgICAgICBwb3BCbG9jayhIVE1MTmFt
ZXM6OmJvZHkoKSk7CiAgICAgICAgICAgICAvLyAjIyMgYWN0dWFsbHkgZm9yIElFIGRvY3VtZW50
LmJvZHkgcmV0dXJucyB0aGUgbm93IGhpZGRlbiAiYm9keSIgZWxlbWVudAogICAgICAgICAgICAg
Ly8gd2UgY2FuJ3QgaW1wbGVtZW50IHRoYXQgYmVoYXZpb3VyIG5vdyBiZWNhdXNlIGl0IGNvdWxk
IGNhdXNlIHRvbyBtYW55CiAgICAgICAgICAgICAvLyByZWdyZXNzaW9ucyBhbmQgdGhlIGhlYWRh
Y2hlcyBhcmUgbm90IHdvcnRoIHRoZSB3b3JrIGFzIGxvbmcgYXMgdGhlcmUgaXMKQEAgLTgxMSwz
MiArNjQ1LDIxIEBAIE5vZGVJbXBsICpLSFRNTFBhcnNlcjo6Z2V0RWxlbWVudChUb2tlbioKICAg
ICAgICAgICAgICAgICBkb2MoKS0+Ym9keSgpLT5zZXRBdHRyaWJ1dGUoQVRUUl9TVFlMRSwgImRp
c3BsYXk6bm9uZSIpOwogICAgICAgICAgICAgaW5Cb2R5ID0gZmFsc2U7CiAgICAgICAgIH0KLSAg
ICAgICAgaWYgKChoYXZlQ29udGVudCB8fCBoYXZlRnJhbWVTZXQpICYmIGN1cnJlbnQtPmlkKCkg
PT0gSURfSFRNTCkKKyAgICAgICAgaWYgKChoYXZlQ29udGVudCB8fCBoYXZlRnJhbWVTZXQpICYm
IGN1cnJlbnQtPmxvY2FsTmFtZSgpID09IEhUTUxOYW1lczo6aHRtbCgpKQogICAgICAgICAgICAg
cmV0dXJuIDA7CiAgICAgICAgIGhhdmVGcmFtZVNldCA9IHRydWU7CiAgICAgICAgIHN0YXJ0Qm9k
eSgpOwotICAgICAgICByZXR1cm4gbmV3IEhUTUxGcmFtZVNldEVsZW1lbnRJbXBsKGRvY3VtZW50
KTsKLQotICAgIC8vIGEgYml0IG9mIGEgc3BlY2lhbCBjYXNlLCBzaW5jZSB0aGUgZnJhbWUgaXMg
aW5saW5lZAotICAgIGNhc2UgSURfSUZSQU1FOgotICAgICAgICBkaXNjYXJkX3VudGlsID0gSURf
SUZSQU1FICsgSURfQ0xPU0VfVEFHOwotICAgICAgICBicmVhazsKLQorICAgIH0gZWxzZSBpZiAo
dC0+dGFnTmFtZSA9PSBIVE1MTmFtZXM6OmlmcmFtZSgpKQorICAgICAgICAvLyBhIGJpdCBvZiBh
IHNwZWNpYWwgY2FzZSwgc2luY2UgdGhlIGZyYW1lIGlzIGlubGluZWQKKyAgICAgICAgc2V0U2tp
cE1vZGUoSFRNTE5hbWVzOjppZnJhbWUoKSk7CisgICAgICAgIAogLy8gZm9ybSBlbGVtZW50cwot
ICAgIGNhc2UgSURfRk9STToKKyAgICBlbHNlIGlmICh0LT50YWdOYW1lID09IEhUTUxOYW1lczo6
Zm9ybSgpKSB7CiAgICAgICAgIC8vIE9ubHkgY3JlYXRlIGEgbmV3IGZvcm0gaWYgd2UncmUgbm90
IGFscmVhZHkgaW5zaWRlIG9uZS4KICAgICAgICAgLy8gVGhpcyBpcyBjb25zaXN0ZW50IHdpdGgg
b3RoZXIgYnJvd3NlcnMnIGJlaGF2aW9yLgogICAgICAgICBpZiAoZm9ybSkKICAgICAgICAgICAg
IHJldHVybiAwOwotICAgICAgICBmb3JtID0gbmV3IEhUTUxGb3JtRWxlbWVudEltcGwoZG9jdW1l
bnQpOwotICAgICAgICByZXR1cm4gZm9ybTsKLSAgICBjYXNlIElEX0JVVFRPTjoKLSAgICAgICAg
cmV0dXJuIG5ldyBIVE1MQnV0dG9uRWxlbWVudEltcGwoZG9jdW1lbnQsIGZvcm0pOwotICAgIGNh
c2UgSURfRklFTERTRVQ6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTEZpZWxkU2V0RWxlbWVudElt
cGwoZG9jdW1lbnQsIGZvcm0pOwotICAgIGNhc2UgSURfSU5QVVQ6Ci0gICAgICAgIHJldHVybiBu
ZXcgSFRNTElucHV0RWxlbWVudEltcGwoZG9jdW1lbnQsIGZvcm0pOwotICAgIGNhc2UgSURfSVNJ
TkRFWDogeworICAgIH0gZWxzZSBpZiAodC0+dGFnTmFtZSA9PSBIVE1MTmFtZXM6OmlzaW5kZXgo
KSkgewogICAgICAgICBOb2RlSW1wbCAqbiA9IGhhbmRsZUlzaW5kZXgodCk7CiAgICAgICAgIGlm
ICghaW5Cb2R5KSB7CiAgICAgICAgICAgICBpZiAoaXNpbmRleCkKQEAgLTg0OCwyMDggKzY3MSwx
NDcgQEAgTm9kZUltcGwgKktIVE1MUGFyc2VyOjpnZXRFbGVtZW50KFRva2VuKgogICAgICAgICB0
LT5mbGF0ID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuIG47CiAgICAgfQotICAgIGNhc2UgSURfS0VZ
R0VOOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxLZXlnZW5FbGVtZW50SW1wbChkb2N1bWVudCwg
Zm9ybSk7Ci0gICAgY2FzZSBJRF9MRUdFTkQ6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTExlZ2Vu
ZEVsZW1lbnRJbXBsKGRvY3VtZW50LCBmb3JtKTsKLSAgICBjYXNlIElEX09QVEdST1VQOgotICAg
ICAgICByZXR1cm4gbmV3IEhUTUxPcHRHcm91cEVsZW1lbnRJbXBsKGRvY3VtZW50LCBmb3JtKTsK
LSAgICBjYXNlIElEX09QVElPTjoKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MT3B0aW9uRWxlbWVu
dEltcGwoZG9jdW1lbnQsIGZvcm0pOwotICAgIGNhc2UgSURfU0VMRUNUOgorICAgIGVsc2UgaWYg
KHQtPnRhZ05hbWUgPT0gSFRNTE5hbWVzOjpzZWxlY3QoKSkKICAgICAgICAgaW5TZWxlY3QgPSB0
cnVlOwotICAgICAgICByZXR1cm4gbmV3IEhUTUxTZWxlY3RFbGVtZW50SW1wbChkb2N1bWVudCwg
Zm9ybSk7Ci0gICAgY2FzZSBJRF9URVhUQVJFQToKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MVGV4
dEFyZWFFbGVtZW50SW1wbChkb2N1bWVudCwgZm9ybSk7CiAKIC8vIGxpc3RzCi0gICAgY2FzZSBJ
RF9ERDoKLSAgICAgICAgcG9wQmxvY2soSURfRFQpOwotICAgICAgICBwb3BCbG9jayhJRF9ERCk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSURfRFQ6Ci0gICAgICAgIHBvcEJsb2NrKElEX0RE
KTsKLSAgICAgICAgcG9wQmxvY2soSURfRFQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIElE
X0xJOgotICAgICAgICBwb3BCbG9jayhJRF9MSSk7Ci0gICAgICAgIGJyZWFrOwotCi0vLyBhbmNo
b3IKLSAgICBjYXNlIElEX0E6CisgICAgZWxzZSBpZiAodC0+dGFnTmFtZSA9PSBIVE1MTmFtZXM6
OmRkKCkpIHsKKyAgICAgICAgcG9wQmxvY2soSFRNTE5hbWVzOjpkdCgpKTsKKyAgICAgICAgcG9w
QmxvY2soSFRNTE5hbWVzOjpkZCgpKTsKKyAgICB9CisgICAgZWxzZSBpZiAodC0+dGFnTmFtZSA9
PSBIVE1MTmFtZXM6OmR0KCkpIHsKKyAgICAgICAgcG9wQmxvY2soSFRNTE5hbWVzOjpkZCgpKTsK
KyAgICAgICAgcG9wQmxvY2soSFRNTE5hbWVzOjpkdCgpKTsKKyAgICB9CisgICAgZWxzZSBpZiAo
dC0+dGFnTmFtZSA9PSBIVE1MTmFtZXM6OmxpKCkpCisgICAgICAgIHBvcEJsb2NrKHQtPnRhZ05h
bWUpOworICAgIGVsc2UgaWYgKHQtPnRhZ05hbWUgPT0gSFRNTE5hbWVzOjphKCkpIC8vIGFuY2hv
cgogICAgICAgICAvLyBOZXZlciBhbGxvdyBuZXN0ZWQgPGE+cy4KLSAgICAgICAgcG9wQmxvY2so
SURfQSk7Ci0gICAgICAgIGJyZWFrOwotCi0vLyBpbWFnZXMKLSAgICBjYXNlIElEX0lNRzoKLSAg
ICAgICAgcmV0dXJuIG5ldyBIVE1MSW1hZ2VFbGVtZW50SW1wbChkb2N1bWVudCwgZm9ybSk7Ci0g
ICAgY2FzZSBJRF9NQVA6Ci0gICAgICAgIG1hcCA9IG5ldyBIVE1MTWFwRWxlbWVudEltcGwoZG9j
dW1lbnQpOwotICAgICAgICByZXR1cm4gbWFwOworICAgICAgICBwb3BCbG9jayh0LT50YWdOYW1l
KTsKIAogLy8gdGFibGVzCi0gICAgY2FzZSBJRF9UUjoKLSAgICAgICAgcG9wQmxvY2soSURfVFIp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIElEX1REOgotICAgIGNhc2UgSURfVEg6Ci0gICAg
ICAgIHBvcEJsb2NrKElEX1RIKTsKLSAgICAgICAgcG9wQmxvY2soSURfVEQpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIElEX1RCT0RZOgotICAgIGNhc2UgSURfVEhFQUQ6Ci0gICAgY2FzZSBJ
RF9URk9PVDoKLSAgICAgICAgcG9wQmxvY2soSURfVEhFQUQpOwotICAgICAgICBwb3BCbG9jayhJ
RF9UQk9EWSk7Ci0gICAgICAgIHBvcEJsb2NrKElEX1RGT09UKTsKLSAgICAgICAgYnJlYWs7Cisg
ICAgZWxzZSBpZiAodC0+dGFnTmFtZSA9PSBIVE1MTmFtZXM6OnRyKCkpCisgICAgICAgIHBvcEJs
b2NrKHQtPnRhZ05hbWUpOworICAgIGVsc2UgaWYgKHQtPnRhZ05hbWUgPT0gSFRNTE5hbWVzOjp0
ZCgpIHx8IHQtPnRhZ05hbWUgPT0gSFRNTE5hbWVzOjp0aCgpKSB7CisgICAgICAgIHBvcEJsb2Nr
KEhUTUxOYW1lczo6dGgoKSk7CisgICAgICAgIHBvcEJsb2NrKEhUTUxOYW1lczo6dGQoKSk7Cisg
ICAgfSBlbHNlIGlmICh0LT50YWdOYW1lID09IEhUTUxOYW1lczo6dGJvZHkoKSB8fCB0LT50YWdO
YW1lID09IEhUTUxOYW1lczo6dGhlYWQoKSB8fCB0LT50YWdOYW1lID09IEhUTUxOYW1lczo6dGZv
b3QoKSkgeworICAgICAgICBwb3BCbG9jayhIVE1MTmFtZXM6OnRoZWFkKCkpOworICAgICAgICBw
b3BCbG9jayhIVE1MTmFtZXM6OnRib2R5KCkpOworICAgICAgICBwb3BCbG9jayhIVE1MTmFtZXM6
OnRmb290KCkpOworICAgIH0KIAogLy8gZWxlbWVudHMgd2l0aCBubyBzcGVjaWFsIHJlcHJlc2Vu
dGF0aW9uIGluIHRoZSBET00KLSAgICBjYXNlIElEX1RUOgotICAgIGNhc2UgSURfVToKLSAgICBj
YXNlIElEX0I6Ci0gICAgY2FzZSBJRF9JOgotICAgIGNhc2UgSURfUzoKLSAgICBjYXNlIElEX1NU
UklLRToKLSAgICBjYXNlIElEX0JJRzoKLSAgICBjYXNlIElEX1NNQUxMOgotICAgICAgICBpZiAo
IWFsbG93TmVzdGVkUmVkdW5kYW50VGFnKHQtPmlkKSkKKyAgICBlbHNlIGlmICh0LT50YWdOYW1l
ID09IEhUTUxOYW1lczo6dHQoKSB8fCB0LT50YWdOYW1lID09IEhUTUxOYW1lczo6dSgpIHx8IHQt
PnRhZ05hbWUgPT0gSFRNTE5hbWVzOjpiKCkgfHwKKyAgICAgICAgICAgICB0LT50YWdOYW1lID09
IEhUTUxOYW1lczo6aSgpIHx8IHQtPnRhZ05hbWUgPT0gSFRNTE5hbWVzOjpzKCkgfHwgdC0+dGFn
TmFtZSA9PSBIVE1MTmFtZXM6OnN0cmlrZSgpIHx8CisgICAgICAgICAgICAgdC0+dGFnTmFtZSA9
PSBIVE1MTmFtZXM6OmJpZygpIHx8IHQtPnRhZ05hbWUgPT0gSFRNTE5hbWVzOjpzbWFsbCgpKSB7
CisgICAgICAgIGlmICghYWxsb3dOZXN0ZWRSZWR1bmRhbnRUYWcodC0+dGFnTmFtZSkpCiAgICAg
ICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIElEX05PQlI6Ci0g
ICAgY2FzZSBJRF9XQlI6Ci0gICAgICAgIHBvcEJsb2NrKHQtPmlkKTsgLy8gRG9uJ3QgYWxsb3cg
bmVzdGVkIDxub2JyPiBvciA8d2JyPgotICAgICAgICBicmVhazsKKyAgICB9CisgICAgZWxzZSBp
ZiAodC0+dGFnTmFtZSA9PSBIVE1MTmFtZXM6Om5vYnIoKSB8fCB0LT50YWdOYW1lID09IEhUTUxO
YW1lczo6d2JyKCkpCisgICAgICAgIHBvcEJsb2NrKHQtPnRhZ05hbWUpOyAvLyBEb24ndCBhbGxv
dyBuZXN0ZWQgPG5vYnI+IG9yIDx3YnI+CiAKIC8vIHRoZXNlIGFyZSBzcGVjaWFsLCBhbmQgbm9y
bWFsbHkgbm90IHJlbmRlcmVkCi0gICAgY2FzZSBJRF9OT0VNQkVEOgotICAgICAgICBkaXNjYXJk
X3VudGlsID0gSURfTk9FTUJFRCArIElEX0NMT1NFX1RBRzsKKyAgICBlbHNlIGlmICh0LT50YWdO
YW1lID09IEhUTUxOYW1lczo6bm9lbWJlZCgpKSB7CisgICAgICAgIHNldFNraXBNb2RlKEhUTUxO
YW1lczo6bm9lbWJlZCgpKTsKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgY2FzZSBJRF9OT0ZSQU1F
UzoKLSAgICAgICAgZGlzY2FyZF91bnRpbCA9IElEX05PRlJBTUVTICsgSURfQ0xPU0VfVEFHOwor
ICAgIH0KKyAgICBlbHNlIGlmICh0LT50YWdOYW1lID09IEhUTUxOYW1lczo6bm9mcmFtZXMoKSkg
eworICAgICAgICBzZXRTa2lwTW9kZShIVE1MTmFtZXM6Om5vZnJhbWVzKCkpOwogICAgICAgICBy
ZXR1cm4gMDsKLSAgICBjYXNlIElEX05PU0NSSVBUOgorICAgIH0KKyAgICBlbHNlIGlmICh0LT50
YWdOYW1lID09IEhUTUxOYW1lczo6bm9zY3JpcHQoKSkgewogICAgICAgICBpZiAoSFRNTFdpZGdl
dCAmJiBIVE1MV2lkZ2V0LT5wYXJ0KCktPmpTY3JpcHRFbmFibGVkKCkpCi0gICAgICAgICAgICBk
aXNjYXJkX3VudGlsID0gSURfTk9TQ1JJUFQgKyBJRF9DTE9TRV9UQUc7Ci0gICAgICAgIHJldHVy
biAwOwotICAgIGNhc2UgSURfTk9MQVlFUjoKLSAgICAgICAgLy9kaXNjYXJkX3VudGlsID0gSURf
Tk9MQVlFUiArIElEX0NMT1NFX1RBRzsKKyAgICAgICAgICAgIHNldFNraXBNb2RlKEhUTUxOYW1l
czo6bm9zY3JpcHQoKSk7CiAgICAgICAgIHJldHVybiAwOwotICAgIGNhc2UgSURfVEVYVDoKLSAg
ICAgICAgcmV0dXJuIG5ldyBUZXh0SW1wbChkb2N1bWVudCwgdC0+dGV4dCk7Ci0gICAgY2FzZSBJ
RF9DT01NRU5UOgotICAgICAgICBpZiAoIWluY2x1ZGVzQ29tbWVudHNJbkRPTSkKLSAgICAgICAg
ICAgIHJldHVybiAwOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgSURfU0NSSVBUOgotICAg
ICAgICB7Ci0gICAgICAgICAgICBIVE1MU2NyaXB0RWxlbWVudEltcGwgKnNjcmlwdEVsZW1lbnQg
PSBuZXcgSFRNTFNjcmlwdEVsZW1lbnRJbXBsKGRvY3VtZW50KTsKLSAgICAgICAgICAgIHNjcmlw
dEVsZW1lbnQtPnNldENyZWF0ZWRCeVBhcnNlcih0cnVlKTsKLSAgICAgICAgICAgIHJldHVybiBz
Y3JpcHRFbGVtZW50OwotICAgICAgICB9CiAgICAgfQotCi0gICAgcmV0dXJuIGRvY3VtZW50LT5k
b2N1bWVudCgpLT5jcmVhdGVIVE1MRWxlbWVudCh0LT5pZCk7CisgICAgZWxzZSBpZiAodC0+dGFn
TmFtZSA9PSBIVE1MTmFtZXM6Om5vbGF5ZXIoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisg
ICAgcmV0dXJuIEhUTUxFbGVtZW50RmFjdG9yeTo6Y3JlYXRlSFRNTEVsZW1lbnQodC0+dGFnTmFt
ZSwgZG9jKCksIGZvcm0pOwogfQogCiAjZGVmaW5lIE1BWF9SRURVTkRBTlQgMjAKIAotYm9vbCBL
SFRNTFBhcnNlcjo6YWxsb3dOZXN0ZWRSZWR1bmRhbnRUYWcoaW50IF9pZCkKK2Jvb2wgSFRNTFBh
cnNlcjo6YWxsb3dOZXN0ZWRSZWR1bmRhbnRUYWcoY29uc3QgQXRvbWljU3RyaW5nJiBfdGFnTmFt
ZSkKIHsKICAgICAvLyB3d3cubGljZW8uZWR1Lm14IGlzIGFuIGV4YW1wbGUgb2YgYSBzaXRlIHRo
YXQgYWNoaWV2ZXMgYSBsZXZlbCBvZiBuZXN0aW5nIG9mCiAgICAgLy8gYWJvdXQgMTUwMCB0YWdz
LCBhbGwgZnJvbSBhIGJ1bmNoIG9mIDxiPnMuICBXZSB3aWxsIG9ubHkgYWxsb3cgYXQgbW9zdCAy
MAogICAgIC8vIG5lc3RlZCB0YWdzIG9mIHRoZSBzYW1lIHR5cGUgYmVmb3JlIGp1c3QgaWdub3Jp
bmcgdGhlbSBhbGwgdG9nZXRoZXIuCiAgICAgaW50IGkgPSAwOwogICAgIGZvciAoSFRNTFN0YWNr
RWxlbSogY3VyciA9IGJsb2NrU3RhY2s7Ci0gICAgICAgICBpIDwgTUFYX1JFRFVOREFOVCAmJiBj
dXJyICYmIGN1cnItPmlkID09IF9pZDsKKyAgICAgICAgIGkgPCBNQVhfUkVEVU5EQU5UICYmIGN1
cnIgJiYgY3Vyci0+dGFnTmFtZSA9PSBfdGFnTmFtZTsKICAgICAgICAgIGN1cnIgPSBjdXJyLT5u
ZXh0LCBpKyspOwogICAgIHJldHVybiBpICE9IE1BWF9SRURVTkRBTlQ7CiB9CiAKLXZvaWQgS0hU
TUxQYXJzZXI6OnByb2Nlc3NDbG9zZVRhZyhUb2tlbiAqdCkKK3ZvaWQgSFRNTFBhcnNlcjo6cHJv
Y2Vzc0Nsb3NlVGFnKFRva2VuICp0KQogewotICAgIC8vIHN1cHBvcnQgZm9yIHJlYWxseSBicm9r
ZW4gaHRtbC4gQ2FuJ3QgYmVsaWV2ZSBJJ20gc3VwcG9ydGluZyBzdWNoIGNyYXAgKGxhcnMpCi0g
ICAgc3dpdGNoKHQtPmlkKQotICAgIHsKLSAgICBjYXNlIElEX0hUTUwrSURfQ0xPU0VfVEFHOgot
ICAgIGNhc2UgSURfQk9EWStJRF9DTE9TRV9UQUc6Ci0gICAgICAgIC8vIHdlIG5ldmVyIGNsb3Nl
IHRoZSBib2R5IHRhZywgc2luY2Ugc29tZSBzdHVwaWQgd2ViIHBhZ2VzIGNsb3NlIGl0IGJlZm9y
ZSB0aGUgYWN0dWFsIGVuZCBvZiB0aGUgZG9jLgotICAgICAgICAvLyBsZXQncyByZWx5IG9uIHRo
ZSBlbmQoKSBjYWxsIHRvIGNsb3NlIHRoaW5ncy4KKyAgICAvLyBTdXBwb3J0IGZvciByZWFsbHkg
YnJva2VuIGh0bWwuCisgICAgLy8gd2UgbmV2ZXIgY2xvc2UgdGhlIGJvZHkgdGFnLCBzaW5jZSBz
b21lIHN0dXBpZCB3ZWIgcGFnZXMgY2xvc2UgaXQgYmVmb3JlIHRoZSBhY3R1YWwgZW5kIG9mIHRo
ZSBkb2MuCisgICAgLy8gbGV0J3MgcmVseSBvbiB0aGUgZW5kKCkgY2FsbCB0byBjbG9zZSB0aGlu
Z3MuCisgICAgaWYgKHQtPnRhZ05hbWUgPT0gSFRNTE5hbWVzOjpodG1sKCkgfHwgdC0+dGFnTmFt
ZSA9PSBIVE1MTmFtZXM6OmJvZHkoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSURfRk9S
TStJRF9DTE9TRV9UQUc6CisgICAgCisgICAgaWYgKHQtPnRhZ05hbWUgPT0gSFRNTE5hbWVzOjpm
b3JtKCkpCiAgICAgICAgIGZvcm0gPSAwOwotICAgICAgICAvLyB0aGlzIG9uZSBpcyB0byBnZXQg
dGhlIHJpZ2h0IHN0eWxlIG9uIHRoZSBib2R5IGVsZW1lbnQKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBJRF9NQVArSURfQ0xPU0VfVEFHOgorICAgIGVsc2UgaWYgKHQtPnRhZ05hbWUgPT0gSFRN
TE5hbWVzOjptYXAoKSkKICAgICAgICAgbWFwID0gMDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBJRF9TRUxFQ1QrSURfQ0xPU0VfVEFHOgorICAgIGVsc2UgaWYgKHQtPnRhZ05hbWUgPT0gSFRN
TE5hbWVzOjpzZWxlY3QoKSkKICAgICAgICAgaW5TZWxlY3QgPSBmYWxzZTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0jaWZkZWYgUEFSU0VS
X0RFQlVHCi0gICAga2REZWJ1ZyggNjAzNSApIDw8ICJhZGRlZCB0aGUgZm9sbG93aW5nIGNoaWxk
cyB0byAiIDw8IGN1cnJlbnQtPm5vZGVOYW1lKCkuc3RyaW5nKCkgPDwgZW5kbDsKLSAgICBOb2Rl
SW1wbCAqY2hpbGQgPSBjdXJyZW50LT5maXJzdENoaWxkKCk7Ci0gICAgd2hpbGUoY2hpbGQgIT0g
MCkKLSAgICB7Ci0gICAgICAgIGtkRGVidWcoIDYwMzUgKSA8PCAiICAgICIgPDwgY2hpbGQtPm5v
ZGVOYW1lKCkuc3RyaW5nKCkgPDwgZW5kbDsKLSAgICAgICAgY2hpbGQgPSBjaGlsZC0+bmV4dFNp
YmxpbmcoKTsKLSAgICB9Ci0jZW5kaWYKKyAgICAgICAgCiAgICAgSFRNTFN0YWNrRWxlbSogb2xk
RWxlbSA9IGJsb2NrU3RhY2s7Ci0gICAgcG9wQmxvY2sodC0+aWQtSURfQ0xPU0VfVEFHKTsKLSAg
ICBpZiAob2xkRWxlbSA9PSBibG9ja1N0YWNrICYmIHQtPmlkID09IElEX1ArSURfQ0xPU0VfVEFH
KSB7CisgICAgcG9wQmxvY2sodC0+dGFnTmFtZSk7CisgICAgaWYgKG9sZEVsZW0gPT0gYmxvY2tT
dGFjayAmJiB0LT50YWdOYW1lID09IEhUTUxOYW1lczo6cCgpKSB7CiAgICAgICAgIC8vIFdlIGVu
Y291bnRlcmVkIGEgc3RyYXkgPC9wPi4gIEFtYXppbmdseSBHZWNrbywgV2luSUUsIGFuZCBNYWNJ
RSBhbGwgdHJlYXQKICAgICAgICAgLy8gdGhpcyBhcyBhIHZhbGlkIGJyZWFrLCBpLmUuLCA8cD48
L3A+LiAgU28gZ28gYWhlYWQgYW5kIG1ha2UgdGhlIGVtcHR5CiAgICAgICAgIC8vIHBhcmFncmFw
aC4KLSAgICAgICAgdC0+aWQtPUlEX0NMT1NFX1RBRzsKKyAgICAgICAgdC0+YmVnaW5UYWcgPSB0
cnVlOwogICAgICAgICBwYXJzZVRva2VuKHQpOwotICAgICAgICBwb3BCbG9jayhJRF9QKTsKKyAg
ICAgICAgcG9wQmxvY2sodC0+dGFnTmFtZSk7CiAgICAgfQogI2lmZGVmIFBBUlNFUl9ERUJVRwog
ICAgIGtkRGVidWcoIDYwMzUgKSA8PCAiY2xvc2VUYWcgLS0+IGN1cnJlbnQgPSAiIDw8IGN1cnJl
bnQtPm5vZGVOYW1lKCkuc3RyaW5nKCkgPDwgZW5kbDsKICNlbmRpZgogfQogCi1ib29sIEtIVE1M
UGFyc2VyOjppc0hlYWRlclRhZyhpbnQgX2lkKQorYm9vbCBIVE1MUGFyc2VyOjppc0hlYWRlclRh
Zyhjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUpCiB7Ci0gICAgc3dpdGNoIChfaWQpIHsKLSAg
ICAgICAgY2FzZSBJRF9IMToKLSAgICAgICAgY2FzZSBJRF9IMjoKLSAgICAgICAgY2FzZSBJRF9I
MzoKLSAgICAgICAgY2FzZSBJRF9INDoKLSAgICAgICAgY2FzZSBJRF9INToKLSAgICAgICAgY2Fz
ZSBJRF9INjoKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICByZXR1cm4gdGFnTmFtZSA9PSBIVE1M
TmFtZXM6OmgxKCkgfHwKKyAgICAgICAgICAgdGFnTmFtZSA9PSBIVE1MTmFtZXM6OmgyKCkgfHwK
KyAgICAgICAgICAgdGFnTmFtZSA9PSBIVE1MTmFtZXM6OmgzKCkgfHwKKyAgICAgICAgICAgdGFn
TmFtZSA9PSBIVE1MTmFtZXM6Omg0KCkgfHwKKyAgICAgICAgICAgdGFnTmFtZSA9PSBIVE1MTmFt
ZXM6Omg1KCkgfHwKKyAgICAgICAgICAgdGFnTmFtZSA9PSBIVE1MTmFtZXM6Omg2KCk7CiB9CiAK
LXZvaWQgS0hUTUxQYXJzZXI6OnBvcE5lc3RlZEhlYWRlclRhZygpCit2b2lkIEhUTUxQYXJzZXI6
OnBvcE5lc3RlZEhlYWRlclRhZygpCiB7CiAgICAgLy8gVGhpcyBmdW5jdGlvbiBvbmx5IGNhcmVz
IGFib3V0IGNoZWNraW5nIGZvciBuZXN0ZWQgaGVhZGVycyB0aGF0IGhhdmUgb25seSBpbmxpbmVz
IGluIGJldHdlZW4gdGhlbS4KICAgICBOb2RlSW1wbCogY3Vyck5vZGUgPSBjdXJyZW50OwogICAg
IGZvciAoSFRNTFN0YWNrRWxlbSogY3VyciA9IGJsb2NrU3RhY2s7IGN1cnI7IGN1cnIgPSBjdXJy
LT5uZXh0KSB7Ci0gICAgICAgIGlmIChpc0hlYWRlclRhZyhjdXJyLT5pZCkpIHsKLSAgICAgICAg
ICAgIHBvcEJsb2NrKGN1cnItPmlkKTsKKyAgICAgICAgaWYgKGlzSGVhZGVyVGFnKGN1cnItPnRh
Z05hbWUpKSB7CisgICAgICAgICAgICBwb3BCbG9jayhjdXJyLT50YWdOYW1lKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBpZiAoY3Vyck5vZGUgJiYgIWN1cnJOb2Rl
LT5pc0lubGluZSgpKQorICAgICAgICBpZiAoY3Vyck5vZGUgJiYgIWlzSW5saW5lKGN1cnJOb2Rl
KSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgY3Vyck5vZGUgPSBjdXJyLT5ub2RlOwog
ICAgIH0KIH0KIAotYm9vbCBLSFRNTFBhcnNlcjo6aXNSZXNpZHVhbFN0eWxlVGFnKGludCBfaWQp
Citib29sIEhUTUxQYXJzZXI6OmlzSW5saW5lKERPTTo6Tm9kZUltcGwqIG5vZGUpIGNvbnN0CiB7
Ci0gICAgc3dpdGNoIChfaWQpIHsKKyAgICBpZiAobm9kZS0+aXNUZXh0Tm9kZSgpKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAobm9kZS0+aXNIVE1MRWxlbWVudCgpKSB7CisgICAgICAg
IC8vSFRNTEVsZW1lbnRJbXBsKiBlID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsKj4obm9k
ZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsgLy8gRklYTUU6IFNob3VsZCBiZSBwb3NzaWJsZSB0
byBpbXBsZW1lbnQgdGhpcyBpbiB0ZXJtcyBvZiBwcmlvcml0eSBsZXZlbHMuCisgICAgfQorICAg
IHJldHVybiBmYWxzZTsKKworLyoKKyAgICBzd2l0Y2goaWQoKSkgewogICAgICAgICBjYXNlIElE
X0E6CiAgICAgICAgIGNhc2UgSURfRk9OVDoKICAgICAgICAgY2FzZSBJRF9UVDoKQEAgLTEwNjAs
NiArODIyLDggQEAgYm9vbCBLSFRNTFBhcnNlcjo6aXNSZXNpZHVhbFN0eWxlVGFnKGludAogICAg
ICAgICBjYXNlIElEX1NUUklLRToKICAgICAgICAgY2FzZSBJRF9CSUc6CiAgICAgICAgIGNhc2Ug
SURfU01BTEw6CisgICAgCisgICAgICAgICAgICAvLyAlcGhyYXNlCiAgICAgICAgIGNhc2UgSURf
RU06CiAgICAgICAgIGNhc2UgSURfU1RST05HOgogICAgICAgICBjYXNlIElEX0RGTjoKQEAgLTEw
NjcsNDMgKzgzMSw0NyBAQCBib29sIEtIVE1MUGFyc2VyOjppc1Jlc2lkdWFsU3R5bGVUYWcoaW50
CiAgICAgICAgIGNhc2UgSURfU0FNUDoKICAgICAgICAgY2FzZSBJRF9LQkQ6CiAgICAgICAgIGNh
c2UgSURfVkFSOgorICAgICAgICBjYXNlIElEX0NJVEU6CisgICAgICAgIGNhc2UgSURfQUJCUjoK
KyAgICAgICAgY2FzZSBJRF9BQ1JPTllNOgorICAgIAorICAgICAgICAgICAgLy8gJXNwZWNpYWwK
KyAgICAgICAgY2FzZSBJRF9TVUI6CisgICAgICAgIGNhc2UgSURfU1VQOgorICAgICAgICBjYXNl
IElEX1NQQU46CisgICAgICAgIGNhc2UgSURfTk9CUjoKKyAgICAgICAgY2FzZSBJRF9XQlI6Cisg
ICAgICAgIAorICAgICAgICBjYXNlIElEX1RFWFQ6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgICAgIAogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KKyAgICB9Ki8KIH0KIAotYm9vbCBLSFRNTFBhcnNlcjo6aXNBZmZlY3RlZEJ5UmVz
aWR1YWxTdHlsZShpbnQgX2lkKQorYm9vbCBIVE1MUGFyc2VyOjppc1Jlc2lkdWFsU3R5bGVUYWco
Y29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lKQogewotICAgIGlmIChpc1Jlc2lkdWFsU3R5bGVU
YWcoX2lkKSkKKyAgICByZXR1cm4gdGFnTmFtZSA9PSBIVE1MTmFtZXM6OmEoKSB8fCB0YWdOYW1l
ID09IEhUTUxOYW1lczo6Zm9udCgpIHx8IHRhZ05hbWUgPT0gSFRNTE5hbWVzOjp0dCgpIHx8Cisg
ICAgICAgICAgIHRhZ05hbWUgPT0gSFRNTE5hbWVzOjp1KCkgfHwgdGFnTmFtZSA9PSBIVE1MTmFt
ZXM6OmIoKSB8fCB0YWdOYW1lID09IEhUTUxOYW1lczo6aSgpIHx8CisgICAgICAgICAgIHRhZ05h
bWUgPT0gSFRNTE5hbWVzOjpzKCkgfHwgdGFnTmFtZSA9PSBIVE1MTmFtZXM6OnN0cmlrZSgpIHx8
IHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpiaWcoKSB8fAorICAgICAgICAgICB0YWdOYW1lID09IEhU
TUxOYW1lczo6c21hbGwoKSB8fCB0YWdOYW1lID09IEhUTUxOYW1lczo6ZW0oKSB8fCB0YWdOYW1l
ID09IEhUTUxOYW1lczo6c3Ryb25nKCkgfHwKKyAgICAgICAgICAgdGFnTmFtZSA9PSBIVE1MTmFt
ZXM6OmRmbigpIHx8IHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpjb2RlKCkgfHwgdGFnTmFtZSA9PSBI
VE1MTmFtZXM6OnNhbXAoKSB8fAorICAgICAgICAgICB0YWdOYW1lID09IEhUTUxOYW1lczo6a2Jk
KCkgfHwgdGFnTmFtZSA9PSBIVE1MTmFtZXM6OnZhcigpOworfQorCitib29sIEhUTUxQYXJzZXI6
OmlzQWZmZWN0ZWRCeVJlc2lkdWFsU3R5bGUoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lKQor
eworICAgIGlmIChpc1Jlc2lkdWFsU3R5bGVUYWcodGFnTmFtZSkgfHwgaXNIZWFkZXJUYWcodGFn
TmFtZSkpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIAotICAgIHN3aXRjaCAoX2lkKSB7Ci0g
ICAgICAgIGNhc2UgSURfUDoKLSAgICAgICAgY2FzZSBJRF9ESVY6Ci0gICAgICAgIGNhc2UgSURf
QkxPQ0tRVU9URToKLSAgICAgICAgY2FzZSBJRF9BRERSRVNTOgotICAgICAgICBjYXNlIElEX0gx
OgotICAgICAgICBjYXNlIElEX0gyOgotICAgICAgICBjYXNlIElEX0gzOgotICAgICAgICBjYXNl
IElEX0g0OgotICAgICAgICBjYXNlIElEX0g1OgotICAgICAgICBjYXNlIElEX0g2OgotICAgICAg
ICBjYXNlIElEX0NFTlRFUjoKLSAgICAgICAgY2FzZSBJRF9VTDoKLSAgICAgICAgY2FzZSBJRF9P
TDoKLSAgICAgICAgY2FzZSBJRF9MSToKLSAgICAgICAgY2FzZSBJRF9ETDoKLSAgICAgICAgY2Fz
ZSBJRF9EVDoKLSAgICAgICAgY2FzZSBJRF9ERDoKLSAgICAgICAgY2FzZSBJRF9QUkU6Ci0gICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9CisgICAgcmV0dXJuIHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpwKCkgfHwg
dGFnTmFtZSA9PSBIVE1MTmFtZXM6OmRpdigpIHx8IHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpibG9j
a3F1b3RlKCkgfHwKKyAgICAgICAgICAgdGFnTmFtZSA9PSBIVE1MTmFtZXM6OmFkZHJlc3MoKSB8
fCB0YWdOYW1lID09IEhUTUxOYW1lczo6Y2VudGVyKCkgfHwgdGFnTmFtZSA9PSBIVE1MTmFtZXM6
OnVsKCkgfHwKKyAgICAgICAgICAgdGFnTmFtZSA9PSBIVE1MTmFtZXM6Om9sKCkgfHwgdGFnTmFt
ZSA9PSBIVE1MTmFtZXM6OmxpKCkgfHwgdGFnTmFtZSA9PSBIVE1MTmFtZXM6OmRsKCkgfHwKKyAg
ICAgICAgICAgdGFnTmFtZSA9PSBIVE1MTmFtZXM6OmR0KCkgfHwgdGFnTmFtZSA9PSBIVE1MTmFt
ZXM6OmRkKCkgfHwgdGFnTmFtZSA9PSBIVE1MTmFtZXM6OnByZSgpOwogfQogCi12b2lkIEtIVE1M
UGFyc2VyOjpoYW5kbGVSZXNpZHVhbFN0eWxlQ2xvc2VUYWdBY3Jvc3NCbG9ja3MoSFRNTFN0YWNr
RWxlbSogZWxlbSkKK3ZvaWQgSFRNTFBhcnNlcjo6aGFuZGxlUmVzaWR1YWxTdHlsZUNsb3NlVGFn
QWNyb3NzQmxvY2tzKEhUTUxTdGFja0VsZW0qIGVsZW0pCiB7CiAgICAgLy8gRmluZCB0aGUgZWxl
bWVudCB0aGF0IGNyb3NzZXMgb3ZlciB0byBhIGhpZ2hlciBsZXZlbC4gICBGb3Igbm93LCBpZiB0
aGVyZSBpcyBtb3JlIHRoYW4KICAgICAvLyBvbmUsIHdlIHdpbGwganVzdCBnaXZlIHVwIGFuZCBu
b3QgYXR0ZW1wdCBhbnkgc29ydCBvZiBjb3JyZWN0aW9uLiAgSXQncyBoaWdobHkgdW5saWtlbHkg
dGhhdApAQCAtMTEyNSw3ICs4OTMsNyBAQCB2b2lkIEtIVE1MUGFyc2VyOjpoYW5kbGVSZXNpZHVh
bFN0eWxlQ2xvCiAgICAgICAgIGN1cnIgPSBjdXJyLT5uZXh0OwogICAgIH0KIAotICAgIGlmICgh
Y3VyciB8fCAhbWF4RWxlbSB8fCAhaXNBZmZlY3RlZEJ5UmVzaWR1YWxTdHlsZShtYXhFbGVtLT5p
ZCkpIHJldHVybjsKKyAgICBpZiAoIWN1cnIgfHwgIW1heEVsZW0gfHwgIWlzQWZmZWN0ZWRCeVJl
c2lkdWFsU3R5bGUobWF4RWxlbS0+dGFnTmFtZSkpIHJldHVybjsKIAogICAgIE5vZGVJbXBsKiBy
ZXNpZHVhbEVsZW0gPSBwcmV2LT5ub2RlOwogICAgIE5vZGVJbXBsKiBibG9ja0VsZW0gPSBwcmV2
TWF4RWxlbSA/IHByZXZNYXhFbGVtLT5ub2RlIDogY3VycmVudDsKQEAgLTExNDcsNyArOTE1LDcg
QEAgdm9pZCBLSFRNTFBhcnNlcjo6aGFuZGxlUmVzaWR1YWxTdHlsZUNsbwogICAgICAgICBIVE1M
U3RhY2tFbGVtKiBwcmV2RWxlbSA9IG1heEVsZW07CiAgICAgICAgIHdoaWxlIChjdXJyRWxlbSAh
PSBlbGVtKSB7CiAgICAgICAgICAgICBIVE1MU3RhY2tFbGVtKiBuZXh0RWxlbSA9IGN1cnJFbGVt
LT5uZXh0OwotICAgICAgICAgICAgaWYgKCFpc1Jlc2lkdWFsU3R5bGVUYWcoY3VyckVsZW0tPmlk
KSkgeworICAgICAgICAgICAgaWYgKCFpc1Jlc2lkdWFsU3R5bGVUYWcoY3VyckVsZW0tPnRhZ05h
bWUpKSB7CiAgICAgICAgICAgICAgICAgcHJldkVsZW0tPm5leHQgPSBuZXh0RWxlbTsKICAgICAg
ICAgICAgICAgICBwcmV2RWxlbS0+bm9kZSA9IGN1cnJFbGVtLT5ub2RlOwogICAgICAgICAgICAg
ICAgIGRlbGV0ZSBjdXJyRWxlbTsKQEAgLTExNjksNyArOTM3LDcgQEAgdm9pZCBLSFRNTFBhcnNl
cjo6aGFuZGxlUmVzaWR1YWxTdHlsZUNsbwogICAgICAgICBOb2RlSW1wbCogY3Vyck5vZGUgPSAw
OwogICAgICAgICBjdXJyRWxlbSA9IG1heEVsZW07CiAgICAgICAgIHdoaWxlIChjdXJyRWxlbS0+
bm9kZSAhPSByZXNpZHVhbEVsZW0pIHsKLSAgICAgICAgICAgIGlmIChpc1Jlc2lkdWFsU3R5bGVU
YWcoY3VyckVsZW0tPm5vZGUtPmlkKCkpKSB7CisgICAgICAgICAgICBpZiAoaXNSZXNpZHVhbFN0
eWxlVGFnKGN1cnJFbGVtLT5ub2RlLT5sb2NhbE5hbWUoKSkpIHsKICAgICAgICAgICAgICAgICAv
LyBDcmVhdGUgYSBjbG9uZSBvZiB0aGlzIGVsZW1lbnQuCiAgICAgICAgICAgICAgICAgY3Vyck5v
ZGUgPSBjdXJyRWxlbS0+bm9kZS0+Y2xvbmVOb2RlKGZhbHNlKTsKIApAQCAtMTI0NSw3ICsxMDEz
LDcgQEAgdm9pZCBLSFRNTFBhcnNlcjo6aGFuZGxlUmVzaWR1YWxTdHlsZUNsbwogICAgICAgICAv
LyBXZSB3aWxsIGFjdHVhbGx5IHNjaGVkdWxlIHRoaXMgdGFnIGZvciByZW9wZW5pbmcKICAgICAg
ICAgLy8gYWZ0ZXIgd2UgY29tcGxldGUgdGhlIGNsb3NlIG9mIHRoaXMgZW50aXJlIGJsb2NrLgog
ICAgICAgICBOb2RlSW1wbCogY3Vyck5vZGUgPSBjdXJyZW50OwotICAgICAgICBpZiAoaXNSZXNp
ZHVhbFN0eWxlVGFnKGN1cnItPmlkKSkgeworICAgICAgICBpZiAoaXNSZXNpZHVhbFN0eWxlVGFn
KGN1cnItPnRhZ05hbWUpKSB7CiAgICAgICAgICAgICAvLyBXZSd2ZSBvdmVybG9hZGVkIHRoZSB1
c2Ugb2Ygc3RhY2sgZWxlbWVudHMgYW5kIGFyZSBqdXN0IHJldXNpbmcgdGhlCiAgICAgICAgICAg
ICAvLyBzdHJ1Y3Qgd2l0aCBhIHNsaWdodGx5IGRpZmZlcmVudCBtZWFuaW5nIHRvIHRoZSB2YXJp
YWJsZXMuICBJbnN0ZWFkIG9mIGNoYWluaW5nCiAgICAgICAgICAgICAvLyBmcm9tIGlubmVybW9z
dCB0byBvdXRlcm1vc3QsIHdlIGJ1aWxkIHVwIGEgbGlzdCBvZiBhbGwgdGhlIHRhZ3Mgd2UgbmVl
ZCB0byByZW9wZW4KQEAgLTEyNjksNyArMTAzNyw3IEBAIHZvaWQgS0hUTUxQYXJzZXI6OmhhbmRs
ZVJlc2lkdWFsU3R5bGVDbG8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBpZiBpdCBiZWNvbWVzIG5lY2Vzc2FyeSB0byBkbyBzby4KIH0KIAot
dm9pZCBLSFRNTFBhcnNlcjo6cmVvcGVuUmVzaWR1YWxTdHlsZVRhZ3MoSFRNTFN0YWNrRWxlbSog
ZWxlbSwgRE9NOjpOb2RlSW1wbCogbWFsZm9ybWVkVGFibGVQYXJlbnQpCit2b2lkIEhUTUxQYXJz
ZXI6OnJlb3BlblJlc2lkdWFsU3R5bGVUYWdzKEhUTUxTdGFja0VsZW0qIGVsZW0sIERPTTo6Tm9k
ZUltcGwqIG1hbGZvcm1lZFRhYmxlUGFyZW50KQogewogICAgIC8vIExvb3AgZm9yIGVhY2ggdGFn
IHRoYXQgbmVlZHMgdG8gYmUgcmVvcGVuZWQuCiAgICAgd2hpbGUgKGVsZW0pIHsKQEAgLTEyODYs
NyArMTA1NCw3IEBAIHZvaWQgS0hUTUxQYXJzZXI6OnJlb3BlblJlc2lkdWFsU3R5bGVUYWcKICAg
ICAgICAgLy8gRklYTUU6IElzIGl0IHJlYWxseSBPSyB0byBpZ25vcmUgdGhlIGV4Y2VwdGlvbnMg
aGVyZT8KIAogICAgICAgICAvLyBOb3cgcHVzaCBhIG5ldyBzdGFjayBlbGVtZW50IGZvciB0aGlz
IG5vZGUgd2UganVzdCBjcmVhdGVkLgotICAgICAgICBwdXNoQmxvY2soZWxlbS0+aWQsIGVsZW0t
PmxldmVsKTsKKyAgICAgICAgcHVzaEJsb2NrKGVsZW0tPnRhZ05hbWUsIGVsZW0tPmxldmVsKTsK
IAogICAgICAgICAvLyBTZXQgb3VyIHN0cmF5VGFibGVDb250ZW50IGJvb2xlYW4gaWYgbmVlZGVk
LCBzbyB0aGF0IHRoZSByZW9wZW5lZCB0YWcgYWxzbyBrbm93cwogICAgICAgICAvLyB0aGF0IGl0
IGlzIGluc2lkZSBhIG1hbGZvcm1lZCB0YWJsZS4KQEAgLTEzMDcsMzUgKzEwNzUsMjEgQEAgdm9p
ZCBLSFRNTFBhcnNlcjo6cmVvcGVuUmVzaWR1YWxTdHlsZVRhZwogICAgIH0KIH0KIAotdm9pZCBL
SFRNTFBhcnNlcjo6cHVzaEJsb2NrKGludCBfaWQsIGludCBfbGV2ZWwpCit2b2lkIEhUTUxQYXJz
ZXI6OnB1c2hCbG9jayhjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUsIGludCBfbGV2ZWwpCiB7
Ci0gICAgSFRNTFN0YWNrRWxlbSAqRWxlbSA9IG5ldyBIVE1MU3RhY2tFbGVtKF9pZCwgX2xldmVs
LCBjdXJyZW50LCBibG9ja1N0YWNrKTsKLQorICAgIEhUTUxTdGFja0VsZW0gKkVsZW0gPSBuZXcg
SFRNTFN0YWNrRWxlbSh0YWdOYW1lLCBfbGV2ZWwsIGN1cnJlbnQsIGJsb2NrU3RhY2spOwogICAg
IGJsb2NrU3RhY2sgPSBFbGVtOwotICAgIGFkZEZvcmJpZGRlbihfaWQsIGZvcmJpZGRlblRhZyk7
CiB9CiAKLXZvaWQgS0hUTUxQYXJzZXI6OnBvcEJsb2NrKCBpbnQgX2lkICkKK3ZvaWQgSFRNTFBh
cnNlcjo6cG9wQmxvY2soY29uc3QgQXRvbWljU3RyaW5nJiBfdGFnTmFtZSkKIHsKICAgICBIVE1M
U3RhY2tFbGVtICpFbGVtID0gYmxvY2tTdGFjazsKICAgICAKICAgICBpbnQgbWF4TGV2ZWwgPSAw
OwogCi0jaWZkZWYgUEFSU0VSX0RFQlVHCi0gICAga2REZWJ1ZyggNjAzNSApIDw8ICJwb3BCbG9j
aygiIDw8IGdldFRhZ05hbWUoX2lkKS5zdHJpbmcoKSA8PCAiKSIgPDwgZW5kbDsKLSAgICB3aGls
ZShFbGVtKSB7Ci0gICAgICAgIGtkRGVidWcoIDYwMzUpIDw8ICIgICA+ICIgPDwgZ2V0VGFnTmFt
ZShFbGVtLT5pZCkuc3RyaW5nKCkgPDwgZW5kbDsKLSAgICAgICAgRWxlbSA9IEVsZW0tPm5leHQ7
Ci0gICAgfQotICAgIEVsZW0gPSBibG9ja1N0YWNrOwotI2VuZGlmCi0KLSAgICB3aGlsZSggRWxl
bSAmJiAoRWxlbS0+aWQgIT0gX2lkKSkKLSAgICB7CisgICAgd2hpbGUgKEVsZW0gJiYgKEVsZW0t
PnRhZ05hbWUgIT0gX3RhZ05hbWUpKSB7CiAgICAgICAgIGlmIChtYXhMZXZlbCA8IEVsZW0tPmxl
dmVsKQotICAgICAgICB7CiAgICAgICAgICAgICBtYXhMZXZlbCA9IEVsZW0tPmxldmVsOwotICAg
ICAgICB9CiAgICAgICAgIEVsZW0gPSBFbGVtLT5uZXh0OwogICAgIH0KIApAQCAtMTM0NSwyMCAr
MTA5OSwxOCBAQCB2b2lkIEtIVE1MUGFyc2VyOjpwb3BCbG9jayggaW50IF9pZCApCiAgICAgaWYg
KG1heExldmVsID4gRWxlbS0+bGV2ZWwpIHsKICAgICAgICAgLy8gV2UgZGlkbid0IG1hdGNoIGJl
Y2F1c2UgdGhlIHRhZyBpcyBpbiBhIGRpZmZlcmVudCBzY29wZSwgZS5nLiwKICAgICAgICAgLy8g
PGI+PHA+Rm9vPC9iPi4gIFRyeSB0byBjb3JyZWN0IHRoZSBwcm9ibGVtLgotICAgICAgICBpZiAo
IWlzUmVzaWR1YWxTdHlsZVRhZyhfaWQpKQorICAgICAgICBpZiAoIWlzUmVzaWR1YWxTdHlsZVRh
ZyhfdGFnTmFtZSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIHJldHVybiBoYW5kbGVS
ZXNpZHVhbFN0eWxlQ2xvc2VUYWdBY3Jvc3NCbG9ja3MoRWxlbSk7CiAgICAgfQogCi0gICAgYm9v
bCBpc0FmZmVjdGVkQnlTdHlsZSA9IGlzQWZmZWN0ZWRCeVJlc2lkdWFsU3R5bGUoRWxlbS0+aWQp
OworICAgIGJvb2wgaXNBZmZlY3RlZEJ5U3R5bGUgPSBpc0FmZmVjdGVkQnlSZXNpZHVhbFN0eWxl
KEVsZW0tPnRhZ05hbWUpOwogICAgIEhUTUxTdGFja0VsZW0qIHJlc2lkdWFsU3R5bGVTdGFjayA9
IDA7CiAgICAgTm9kZUltcGwqIG1hbGZvcm1lZFRhYmxlUGFyZW50ID0gMDsKICAgICAKICAgICBF
bGVtID0gYmxvY2tTdGFjazsKLSAgICB3aGlsZSAoRWxlbSkKLSAgICB7Ci0gICAgICAgIGlmIChF
bGVtLT5pZCA9PSBfaWQpCi0gICAgICAgIHsKKyAgICB3aGlsZSAoRWxlbSkgeworICAgICAgICBp
ZiAoRWxlbS0+dGFnTmFtZSA9PSBfdGFnTmFtZSkgewogICAgICAgICAgICAgaW50IHN0cmF5VGFi
bGUgPSBpblN0cmF5VGFibGVDb250ZW50OwogICAgICAgICAgICAgcG9wT25lQmxvY2soKTsKICAg
ICAgICAgICAgIEVsZW0gPSAwOwpAQCAtMTM2OSwxNCArMTEyMSwxMyBAQCB2b2lkIEtIVE1MUGFy
c2VyOjpwb3BCbG9jayggaW50IF9pZCApCiAgICAgICAgICAgICAvLyBtdXN0IGFsc28ga25vdyB0
aGF0IGl0IGlzIHRoZSByb290IG9mIG1hbGZvcm1lZCBjb250ZW50IGluc2lkZSBhIDx0Ym9keT4v
PHRyPi4KICAgICAgICAgICAgIGlmIChzdHJheVRhYmxlICYmIChpblN0cmF5VGFibGVDb250ZW50
IDwgc3RyYXlUYWJsZSkgJiYgcmVzaWR1YWxTdHlsZVN0YWNrKSB7CiAgICAgICAgICAgICAgICAg
Tm9kZUltcGwqIGN1cnIgPSBjdXJyZW50OwotICAgICAgICAgICAgICAgIHdoaWxlIChjdXJyICYm
IGN1cnItPmlkKCkgIT0gSURfVEFCTEUpCisgICAgICAgICAgICAgICAgd2hpbGUgKGN1cnIgJiYg
IWN1cnItPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0YWJsZSgpKSkKICAgICAgICAgICAgICAgICAg
ICAgY3VyciA9IGN1cnItPnBhcmVudE5vZGUoKTsKICAgICAgICAgICAgICAgICBtYWxmb3JtZWRU
YWJsZVBhcmVudCA9IGN1cnIgPyBjdXJyLT5wYXJlbnROb2RlKCkgOiAwOwogICAgICAgICAgICAg
fQogICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKEVs
ZW0tPmlkID09IElEX0ZPUk0gJiYgZm9ybSkKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBp
ZiAoZm9ybSAmJiBFbGVtLT50YWdOYW1lID09IEhUTUxOYW1lczo6Zm9ybSgpKQogICAgICAgICAg
ICAgICAgIC8vIEEgPGZvcm0+IGlzIGJlaW5nIGNsb3NlZCBwcmVtYXR1cmVseSAoYW5kIHRoaXMg
aXMKICAgICAgICAgICAgICAgICAvLyBtYWxmb3JtZWQgSFRNTCkuICBTZXQgYW4gYXR0cmlidXRl
IG9uIHRoZSBmb3JtIHRvIGNsZWFyIG91dCBpdHMKICAgICAgICAgICAgICAgICAvLyBib3R0b20g
bWFyZ2luLgpAQCAtMTM4NSw3ICsxMTM2LDcgQEAgdm9pZCBLSFRNTFBhcnNlcjo6cG9wQmxvY2so
IGludCBfaWQgKQogICAgICAgICAgICAgLy8gU2NoZWR1bGUgdGhpcyB0YWcgZm9yIHJlb3Blbmlu
ZwogICAgICAgICAgICAgLy8gYWZ0ZXIgd2UgY29tcGxldGUgdGhlIGNsb3NlIG9mIHRoaXMgZW50
aXJlIGJsb2NrLgogICAgICAgICAgICAgTm9kZUltcGwqIGN1cnJOb2RlID0gY3VycmVudDsKLSAg
ICAgICAgICAgIGlmIChpc0FmZmVjdGVkQnlTdHlsZSAmJiBpc1Jlc2lkdWFsU3R5bGVUYWcoRWxl
bS0+aWQpKSB7CisgICAgICAgICAgICBpZiAoaXNBZmZlY3RlZEJ5U3R5bGUgJiYgaXNSZXNpZHVh
bFN0eWxlVGFnKEVsZW0tPnRhZ05hbWUpKSB7CiAgICAgICAgICAgICAgICAgLy8gV2UndmUgb3Zl
cmxvYWRlZCB0aGUgdXNlIG9mIHN0YWNrIGVsZW1lbnRzIGFuZCBhcmUganVzdCByZXVzaW5nIHRo
ZQogICAgICAgICAgICAgICAgIC8vIHN0cnVjdCB3aXRoIGEgc2xpZ2h0bHkgZGlmZmVyZW50IG1l
YW5pbmcgdG8gdGhlIHZhcmlhYmxlcy4gIEluc3RlYWQgb2YgY2hhaW5pbmcKICAgICAgICAgICAg
ICAgICAvLyBmcm9tIGlubmVybW9zdCB0byBvdXRlcm1vc3QsIHdlIGJ1aWxkIHVwIGEgbGlzdCBv
ZiBhbGwgdGhlIHRhZ3Mgd2UgbmVlZCB0byByZW9wZW4KQEAgLTE0MDgsMTkgKzExNTksMTQgQEAg
dm9pZCBLSFRNTFBhcnNlcjo6cG9wQmxvY2soIGludCBfaWQgKQogICAgIHJlb3BlblJlc2lkdWFs
U3R5bGVUYWdzKHJlc2lkdWFsU3R5bGVTdGFjaywgbWFsZm9ybWVkVGFibGVQYXJlbnQpOwogfQog
Ci12b2lkIEtIVE1MUGFyc2VyOjpwb3BPbmVCbG9jayhib29sIGRlbEJsb2NrKQordm9pZCBIVE1M
UGFyc2VyOjpwb3BPbmVCbG9jayhib29sIGRlbEJsb2NrKQogewogICAgIEhUTUxTdGFja0VsZW0g
KkVsZW0gPSBibG9ja1N0YWNrOwogCiAgICAgLy8gd2Ugc2hvdWxkIG5ldmVyIGdldCBoZXJlLCBi
dXQgc29tZSBiYWQgaHRtbCBtaWdodCBjYXVzZSBpdC4KLSNpZm5kZWYgUEFSU0VSX0RFQlVHCi0g
ICAgaWYoIUVsZW0pIHJldHVybjsKLSNlbHNlCi0gICAga2REZWJ1ZyggNjAzNSApIDw8ICJwb3Bw
aW5nIGJsb2NrOiAiIDw8IGdldFRhZ05hbWUoRWxlbS0+aWQpLnN0cmluZygpIDw8ICIoIiA8PCBF
bGVtLT5pZCA8PCAiKSIgPDwgZW5kbDsKLSNlbmRpZgotCi0jaWYgU1BFRURfREVCVUcgPCAxCi0g
ICAgaWYoKEVsZW0tPm5vZGUgIT0gY3VycmVudCkpIHsKKyAgICBpZiAoIUVsZW0pIHJldHVybjsK
KyAgICAKKyAgICBpZiAoKEVsZW0tPm5vZGUgIT0gY3VycmVudCkpIHsKICAgICAgICAgaWYgKGN1
cnJlbnQtPm1haW50YWluc1N0YXRlKCkgJiYgZG9jKCkpewogICAgICAgICAgICAgZG9jKCktPnJl
Z2lzdGVyTWFpbnRhaW5zU3RhdGUoY3VycmVudCk7CiAgICAgICAgICAgICBRU3RyaW5nTGlzdCAm
c3RhdGVzID0gZG9jKCktPnJlc3RvcmVTdGF0ZSgpOwpAQCAtMTQzMSw5ICsxMTc3LDYgQEAgdm9p
ZCBLSFRNTFBhcnNlcjo6cG9wT25lQmxvY2soYm9vbCBkZWxCbAogICAgICAgICAvLyBBIGZldyBl
bGVtZW50cyAoPGFwcGxldD4sIDxvYmplY3Q+KSBuZWVkIHRvIGtub3cgd2hlbiBhbGwgY2hpbGQg
ZWxlbWVudHMgKDxwYXJhbT5zKSBhcmUgYXZhaWxhYmxlOgogICAgICAgICBjdXJyZW50LT5jbG9z
ZVJlbmRlcmVyKCk7CiAgICAgfQotI2VuZGlmCi0KLSAgICByZW1vdmVGb3JiaWRkZW4oRWxlbS0+
aWQsIGZvcmJpZGRlblRhZyk7CiAKICAgICBibG9ja1N0YWNrID0gRWxlbS0+bmV4dDsKICAgICBz
ZXRDdXJyZW50KEVsZW0tPm5vZGUpOwpAQCAtMTQ0NSwxOSArMTE4OCwxOSBAQCB2b2lkIEtIVE1M
UGFyc2VyOjpwb3BPbmVCbG9jayhib29sIGRlbEJsCiAgICAgICAgIGRlbGV0ZSBFbGVtOwogfQog
Ci12b2lkIEtIVE1MUGFyc2VyOjpwb3BJbmxpbmVCbG9ja3MoKQordm9pZCBIVE1MUGFyc2VyOjpw
b3BJbmxpbmVCbG9ja3MoKQogewotICAgIHdoaWxlIChibG9ja1N0YWNrICYmIGN1cnJlbnQtPmlz
SW5saW5lKCkpCisgICAgd2hpbGUgKGJsb2NrU3RhY2sgJiYgaXNJbmxpbmUoY3VycmVudCkpCiAg
ICAgICAgIHBvcE9uZUJsb2NrKCk7CiB9CiAKLXZvaWQgS0hUTUxQYXJzZXI6OmZyZWVCbG9jaygp
Cit2b2lkIEhUTUxQYXJzZXI6OmZyZWVCbG9jaygpCiB7CiAgICAgd2hpbGUgKGJsb2NrU3RhY2sp
CiAgICAgICAgIHBvcE9uZUJsb2NrKCk7CiB9CiAKLXZvaWQgS0hUTUxQYXJzZXI6OmNyZWF0ZUhl
YWQoKQordm9pZCBIVE1MUGFyc2VyOjpjcmVhdGVIZWFkKCkKIHsKICAgICBpZihoZWFkIHx8ICFk
b2MoKS0+Zmlyc3RDaGlsZCgpKQogICAgICAgICByZXR1cm47CkBAIC0xNDc0LDcgKzEyMTcsNyBA
QCB2b2lkIEtIVE1MUGFyc2VyOjpjcmVhdGVIZWFkKCkKICAgICB9CiB9CiAKLU5vZGVJbXBsICpL
SFRNTFBhcnNlcjo6aGFuZGxlSXNpbmRleCggVG9rZW4gKnQgKQorTm9kZUltcGwgKkhUTUxQYXJz
ZXI6OmhhbmRsZUlzaW5kZXgoIFRva2VuICp0ICkKIHsKICAgICBOb2RlSW1wbCAqbjsKICAgICBI
VE1MRm9ybUVsZW1lbnRJbXBsICpteWZvcm0gPSBmb3JtOwpAQCAtMTUwNCw3ICsxMjQ3LDcgQEAg
Tm9kZUltcGwgKktIVE1MUGFyc2VyOjpoYW5kbGVJc2luZGV4KCBUbwogICAgIHJldHVybiBuOwog
fQogCi12b2lkIEtIVE1MUGFyc2VyOjpzdGFydEJvZHkoKQordm9pZCBIVE1MUGFyc2VyOjpzdGFy
dEJvZHkoKQogewogICAgIGlmKGluQm9keSkgcmV0dXJuOwogCkBAIC0xNTE2LDcgKzEyNTksNyBA
QCB2b2lkIEtIVE1MUGFyc2VyOjpzdGFydEJvZHkoKQogICAgIH0KIH0KIAotdm9pZCBLSFRNTFBh
cnNlcjo6ZmluaXNoZWQoKQordm9pZCBIVE1MUGFyc2VyOjpmaW5pc2hlZCgpCiB7CiAgICAgLy8g
SW4gdGhlIGNhc2Ugb2YgYSBjb21wbGV0ZWx5IGVtcHR5IGRvY3VtZW50LCBoZXJlJ3MgdGhlIHBs
YWNlIHRvIGNyZWF0ZSB0aGUgSFRNTCBlbGVtZW50LgogICAgIGlmIChjdXJyZW50LT5pc0RvY3Vt
ZW50Tm9kZSgpICYmIGN1cnJlbnQtPmZpcnN0Q2hpbGQoKSA9PSAwKSB7CkluZGV4OiBraHRtbC9o
dG1sL2h0bWxwYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9r
aHRtbC9odG1sL2h0bWxwYXJzZXIuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yNwpkaWZmIC11
IC1wIC1yMS4yNyBraHRtbC9odG1sL2h0bWxwYXJzZXIuaAotLS0ga2h0bWwvaHRtbC9odG1scGFy
c2VyLmgJNiBKYW4gMjAwNSAyMToxMzoxNiAtMDAwMAkxLjI3CisrKyBraHRtbC9odG1sL2h0bWxw
YXJzZXIuaAkyMyBKdW4gMjAwNSAwMToxMTowMiAtMDAwMApAQCAtMjksMTkgKzI5LDkgQEAKICNp
Zm5kZWYgSFRNTFBBUlNFUl9ICiAjZGVmaW5lIEhUTUxQQVJTRVJfSAogCi0vLyAwIGFsbAotLy8g
MSBkb210cmVlICsgcmVuZGVydHJlZSArIHN0eWxlRm9yRWxlbWVudCwgbm8gbGF5b3V0aW5nCi0v
LyAyIGRvbXRyZWUgb25seQotI2RlZmluZSBTUEVFRF9ERUJVRyAwCi0KLSNpZmRlZiBTUEVFRF9E
RUJVRwotI2luY2x1ZGUgPHFkYXRldGltZS5oPgotI2VuZGlmCi0KICNpbmNsdWRlICJkb20vZG9t
X3N0cmluZy5oIgogI2luY2x1ZGUgInhtbC9kb21fbm9kZWltcGwuaCIKICNpbmNsdWRlICJodG1s
L2h0bWxfZG9jdW1lbnRpbXBsLmgiCi0jaW5jbHVkZSAibWlzYy9odG1sdGFncy5oIgogCiBjbGFz
cyBLSFRNTFZpZXc7CiBjbGFzcyBIVE1MU3RhY2tFbGVtOwpAQCAtNjEsMTggKzUxLDE2IEBAIG5h
bWVzcGFjZSBraHRtbCB7CiAgICAgY2xhc3MgVG9rZW47CiB9OwogCi1jbGFzcyBLSFRNTFBhcnNl
cjsKLQogLyoqCiAgKiBUaGUgcGFyc2VyIGZvciBodG1sLiBJdCByZWNlaXZlcyBhIHN0cmVhbSBv
ZiB0b2tlbnMgZnJvbSB0aGUgSFRNTFRva2VuaXplciwgYW5kCiAgKiBidWlsZHMgdXAgdGhlIERv
Y3VtZW50IHN0cnVjdHVyZSBmb3JtIGl0LgogICovCi1jbGFzcyBLSFRNTFBhcnNlcgorY2xhc3Mg
SFRNTFBhcnNlcgogewogcHVibGljOgotICAgIEtIVE1MUGFyc2VyKEtIVE1MVmlldyAqdywgRE9N
OjpEb2N1bWVudFB0ciAqaSwgYm9vbCBpbmNsdWRlc0NvbW1lbnRzPWZhbHNlKTsKLSAgICBLSFRN
TFBhcnNlcihET006OkRvY3VtZW50RnJhZ21lbnRJbXBsICpmcmFnLCBET006OkRvY3VtZW50UHRy
ICpkb2MsIGJvb2wgaW5jbHVkZXNDb21tZW50cz1mYWxzZSk7Ci0gICAgdmlydHVhbCB+S0hUTUxQ
YXJzZXIoKTsKKyAgICBIVE1MUGFyc2VyKEtIVE1MVmlldyAqdywgRE9NOjpEb2N1bWVudFB0ciAq
aSwgYm9vbCBpbmNsdWRlc0NvbW1lbnRzPWZhbHNlKTsKKyAgICBIVE1MUGFyc2VyKERPTTo6RG9j
dW1lbnRGcmFnbWVudEltcGwgKmZyYWcsIERPTTo6RG9jdW1lbnRQdHIgKmRvYywgYm9vbCBpbmNs
dWRlc0NvbW1lbnRzPWZhbHNlKTsKKyAgICB2aXJ0dWFsIH5IVE1MUGFyc2VyKCk7CiAKICAgICAv
KioKICAgICAgKiBwYXJzZXMgb25lIHRva2VuIGRlbGl2ZXJlZCBieSB0aGUgdG9rZW5pemVyCkBA
IC04OSw3ICs3Nyw3IEBAIHB1YmxpYzoKICAgICAgKi8KICAgICB2b2lkIHJlc2V0KCk7CiAKLSAg
ICBib29sIHNraXBNb2RlKCkgY29uc3QgeyByZXR1cm4gKGRpc2NhcmRfdW50aWwgIT0gMCk7IH0K
KyAgICBib29sIHNraXBNb2RlKCkgY29uc3QgeyByZXR1cm4gIWRpc2NhcmRfdW50aWwuaXNOdWxs
KCk7IH0KICAgICBib29sIG5vU3BhY2VzKCkgY29uc3QgeyByZXR1cm4gIWluQm9keTsgfQogICAg
IGJvb2wgc2VsZWN0TW9kZSgpIGNvbnN0IHsgcmV0dXJuIGluU2VsZWN0OyB9CiAKQEAgLTk3LDMx
ICs4NSwzMiBAQCBwdWJsaWM6CiAgICAgRE9NOjpEb2N1bWVudFB0ciAqZG9jUHRyKCkgY29uc3Qg
eyByZXR1cm4gZG9jdW1lbnQ7IH0KIAogcHJvdGVjdGVkOgotICAgIHZvaWQgc2V0Q3VycmVudChE
T006Ok5vZGVJbXBsICpuZXdDdXJyZW50KTsKKyAgICB2b2lkIHNldEN1cnJlbnQoRE9NOjpOb2Rl
SW1wbCogbmV3Q3VycmVudCk7CisgICAgdm9pZCBzZXRTa2lwTW9kZShjb25zdCBET006OlF1YWxp
ZmllZE5hbWUmIHFOYW1lKSB7IGRpc2NhcmRfdW50aWwgPSBxTmFtZS5sb2NhbE5hbWUoKTsgfQog
CiAgICAgS0hUTUxWaWV3ICpIVE1MV2lkZ2V0OwogICAgIERPTTo6RG9jdW1lbnRQdHIgKmRvY3Vt
ZW50OwogCiAgICAgLyoKLSAgICAgKiBnZW5lcmF0ZSBhbiBlbGVtZW50IGZyb20gdGhlIHRva2Vu
CisgICAgICogZ2VuZXJhdGUgYSBub2RlIGZyb20gdGhlIHRva2VuCiAgICAgICovCi0gICAgRE9N
OjpOb2RlSW1wbCAqZ2V0RWxlbWVudChraHRtbDo6VG9rZW4gKik7CisgICAgRE9NOjpOb2RlSW1w
bCAqZ2V0Tm9kZShraHRtbDo6VG9rZW4gKik7CiAKICAgICB2b2lkIHByb2Nlc3NDbG9zZVRhZyhr
aHRtbDo6VG9rZW4gKik7CiAKICAgICBib29sIGluc2VydE5vZGUoRE9NOjpOb2RlSW1wbCAqbiwg
Ym9vbCBmbGF0ID0gZmFsc2UpOworICAgIGJvb2wgaGFuZGxlRXJyb3IoRE9NOjpOb2RlSW1wbCog
biwgYm9vbCBmbGF0LCBjb25zdCBET006OkF0b21pY1N0cmluZyYgbG9jYWxOYW1lLCBpbnQgdGFn
UHJpb3JpdHkpOworICAgIAorICAgIC8vIFRoZSBjdXJyZW50bHkgYWN0aXZlIGVsZW1lbnQgKHRo
ZSBvbmUgbmV3IGVsZW1lbnRzIHdpbGwgYmUgYWRkZWQgdG8pLiAgQ2FuIGJlIGEgRG9jdW1lbnRG
cmFnbWVudCwgYSBEb2N1bWVudCBvciBhbiBFbGVtZW50LgorICAgIERPTTo6Tm9kZUltcGwqIGN1
cnJlbnQ7CiAKLSAgICAvKgotICAgICAqIFRoZSBjdXJyZW50bHkgYWN0aXZlIGVsZW1lbnQgKHRo
ZSBvbmUgbmV3IGVsZW1lbnRzIHdpbGwgYmUgYWRkZWQgdG8pCi0gICAgICovCi0gICAgRE9NOjpO
b2RlSW1wbCAqY3VycmVudDsKICAgICBib29sIGN1cnJlbnRJc1JlZmVyZW5jZWQ7CiAKICAgICBI
VE1MU3RhY2tFbGVtICpibG9ja1N0YWNrOwogCi0gICAgdm9pZCBwdXNoQmxvY2soIGludCBfaWQs
IGludCBfbGV2ZWwpOwotCi0gICAgdm9pZCBwb3BCbG9jayggaW50IF9pZCApOworICAgIHZvaWQg
cHVzaEJsb2NrKGNvbnN0IERPTTo6QXRvbWljU3RyaW5nJiB0YWdOYW1lLCBpbnQgX2xldmVsKTsK
KyAgICB2b2lkIHBvcEJsb2NrKGNvbnN0IERPTTo6QXRvbWljU3RyaW5nJiB0YWdOYW1lKTsKKyAg
ICB2b2lkIHBvcEJsb2NrKGNvbnN0IERPTTo6UXVhbGlmaWVkTmFtZSYgcU5hbWUpIHsgcmV0dXJu
IHBvcEJsb2NrKHFOYW1lLmxvY2FsTmFtZSgpKTsgfSAvLyBDb252ZW5pZW5jZSBmdW5jdGlvbiBm
b3IgcmVhZGFiaWxpdHkuCiAgICAgdm9pZCBwb3BPbmVCbG9jayhib29sIGRlbEJsb2NrID0gdHJ1
ZSk7CiAgICAgdm9pZCBwb3BJbmxpbmVCbG9ja3MoKTsKIApAQCAtMTI5LDE2ICsxMTgsMTggQEAg
cHJvdGVjdGVkOgogCiAgICAgdm9pZCBjcmVhdGVIZWFkKCk7CiAKLSAgICBib29sIGlzUmVzaWR1
YWxTdHlsZVRhZyhpbnQgX2lkKTsKLSAgICBib29sIGlzQWZmZWN0ZWRCeVJlc2lkdWFsU3R5bGUo
aW50IF9pZCk7CisgICAgYm9vbCBpc1Jlc2lkdWFsU3R5bGVUYWcoY29uc3QgRE9NOjpBdG9taWNT
dHJpbmcmIHRhZ05hbWUpOworICAgIGJvb2wgaXNBZmZlY3RlZEJ5UmVzaWR1YWxTdHlsZShjb25z
dCBET006OkF0b21pY1N0cmluZyYgdGFnTmFtZSk7CiAgICAgdm9pZCBoYW5kbGVSZXNpZHVhbFN0
eWxlQ2xvc2VUYWdBY3Jvc3NCbG9ja3MoSFRNTFN0YWNrRWxlbSogZWxlbSk7CiAgICAgdm9pZCBy
ZW9wZW5SZXNpZHVhbFN0eWxlVGFncyhIVE1MU3RhY2tFbGVtKiBlbGVtLCBET006Ok5vZGVJbXBs
KiBtYWxmb3JtZWRUYWJsZVBhcmVudCk7CiAKLSAgICBib29sIGFsbG93TmVzdGVkUmVkdW5kYW50
VGFnKGludCBfaWQpOworICAgIGJvb2wgYWxsb3dOZXN0ZWRSZWR1bmRhbnRUYWcoY29uc3QgRE9N
OjpBdG9taWNTdHJpbmcmIHRhZ05hbWUpOwogICAgIAotICAgIHN0YXRpYyBib29sIGlzSGVhZGVy
VGFnKGludCBfaWQpOworICAgIHN0YXRpYyBib29sIGlzSGVhZGVyVGFnKGNvbnN0IERPTTo6QXRv
bWljU3RyaW5nJiB0YWdOYW1lKTsKICAgICB2b2lkIHBvcE5lc3RlZEhlYWRlclRhZygpOwogCisg
ICAgYm9vbCBpc0lubGluZShET006Ok5vZGVJbXBsKiBub2RlKSBjb25zdDsKKyAgICAKICAgICAv
KgogICAgICAqIGN1cnJlbnRseSBhY3RpdmUgZm9ybQogICAgICAqLwpAQCAtMTc1LDE4ICsxNjYs
MTIgQEAgcHJvdGVjdGVkOgogICAgIC8qCiAgICAgICogdGVsbHMgdGhlIHBhcnNlciB0byBkaXNj
YXJkIGFsbCB0YWdzLCB1bnRpbCBpdCByZWFjaGVzIHRoZSBvbmUgc3BlY2lmaWVkCiAgICAgICov
Ci0gICAgaW50IGRpc2NhcmRfdW50aWw7CisgICAgRE9NOjpBdG9taWNTdHJpbmcgZGlzY2FyZF91
bnRpbDsKIAogICAgIGJvb2wgaGVhZExvYWRlZDsKICAgICBpbnQgaW5TdHJheVRhYmxlQ29udGVu
dDsKIAogICAgIGJvb2wgaW5jbHVkZXNDb21tZW50c0luRE9NOwotICAgIAotICAgIHVzaG9ydCBm
b3JiaWRkZW5UYWdbSURfTEFTVF9UQUcgKyAxXTsKLSAgICAKLSNpZiBTUEVFRF9ERUJVRyA+IDAK
LSAgICBRVGltZSBxdDsKLSNlbmRpZgogfTsKIAogI2VuZGlmIC8vIEhUTUxQQVJTRVJfSApJbmRl
eDoga2h0bWwvaHRtbC9odG1sdG9rZW5pemVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvV2ViQ29yZS9raHRtbC9odG1sL2h0bWx0b2tlbml6ZXIuY3BwLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjkzCmRpZmYgLXUgLXAgLXIxLjkzIGtodG1sL2h0bWwvaHRtbHRva2VuaXplci5j
cHAKLS0tIGtodG1sL2h0bWwvaHRtbHRva2VuaXplci5jcHAJMTcgSnVuIDIwMDUgMjA6MDA6MTAg
LTAwMDAJMS45MworKysga2h0bWwvaHRtbC9odG1sdG9rZW5pemVyLmNwcAkyMyBKdW4gMjAwNSAw
MToxMTowNCAtMDAwMApAQCAtMzksNyArMzksNiBAQAogI2luY2x1ZGUgImh0bWwvaHRtbHRva2Vu
aXplci5oIgogI2luY2x1ZGUgImh0bWwvaHRtbF9kb2N1bWVudGltcGwuaCIKICNpbmNsdWRlICJo
dG1sL2h0bWxwYXJzZXIuaCIKLSNpbmNsdWRlICJodG1sL2R0ZC5oIgogCiAjaW5jbHVkZSAibWlz
Yy9sb2FkZXIuaCIKICNpbmNsdWRlICJtaXNjL2h0bWxoYXNoZXMuaCIKQEAgLTYzLDcgKzYyLDEw
IEBAIHVzaW5nIERPTTo6RE9NU3RyaW5nOwogdXNpbmcgRE9NOjpET01TdHJpbmdJbXBsOwogdXNp
bmcgRE9NOjpEb2N1bWVudEltcGw7CiB1c2luZyBET006OmVtcHR5QXRvbTsKLXVzaW5nIERPTTo6
ZW5kVGFnUmVxdWlyZW1lbnQ7Cit1c2luZyBET006OmNvbW1lbnRBdG9tOwordXNpbmcgRE9NOjpu
dWxsQXRvbTsKK3VzaW5nIERPTTo6dGV4dEF0b207Cit1c2luZyBET006OkhUTUxOYW1lczsKIAog
Ly8gdHVybiBvZmYgaW5saW5pbmcgdG8gdm9pZCB3YXJuaW5nIHdpdGggbmV3ZXIgZ2NjCiAjdW5k
ZWYgX19pbmxpbmUKQEAgLTIzOSw3ICsyNDEsNyBAQCBIVE1MVG9rZW5pemVyOjpIVE1MVG9rZW5p
emVyKERPTTo6RG9jdW1lCiAgICAgc2NyaXB0Q29kZSA9IDA7CiAgICAgc2NyaXB0Q29kZVNpemUg
PSBzY3JpcHRDb2RlTWF4U2l6ZSA9IHNjcmlwdENvZGVSZXN5bmMgPSAwOwogICAgIGNoYXJzZXRz
ID0gS0dsb2JhbDo6Y2hhcnNldHMoKTsKLSAgICBwYXJzZXIgPSBuZXcgS0hUTUxQYXJzZXIoX3Zp
ZXcsIF9kb2MsIGluY2x1ZGVzQ29tbWVudHMpOworICAgIHBhcnNlciA9IG5ldyBIVE1MUGFyc2Vy
KF92aWV3LCBfZG9jLCBpbmNsdWRlc0NvbW1lbnRzKTsKICAgICBtX2V4ZWN1dGluZ1NjcmlwdCA9
IDA7CiAgICAgbG9hZGluZ0V4dFNjcmlwdCA9IGZhbHNlOwogICAgIG9uSG9sZCA9IGZhbHNlOwpA
QCAtMjU5LDcgKzI2MSw3IEBAIEhUTUxUb2tlbml6ZXI6OkhUTUxUb2tlbml6ZXIoRE9NOjpEb2N1
bWUKICAgICBzY3JpcHRDb2RlID0gMDsKICAgICBzY3JpcHRDb2RlU2l6ZSA9IHNjcmlwdENvZGVN
YXhTaXplID0gc2NyaXB0Q29kZVJlc3luYyA9IDA7CiAgICAgY2hhcnNldHMgPSBLR2xvYmFsOjpj
aGFyc2V0cygpOwotICAgIHBhcnNlciA9IG5ldyBLSFRNTFBhcnNlcihpLCBfZG9jLCBpbmNsdWRl
c0NvbW1lbnRzKTsKKyAgICBwYXJzZXIgPSBuZXcgSFRNTFBhcnNlcihpLCBfZG9jLCBpbmNsdWRl
c0NvbW1lbnRzKTsKICAgICBtX2V4ZWN1dGluZ1NjcmlwdCA9IDA7CiAgICAgbG9hZGluZ0V4dFNj
cmlwdCA9IGZhbHNlOwogICAgIG9uSG9sZCA9IGZhbHNlOwpAQCAtNDUxLDEwICs0NTMsMTAgQEAg
dm9pZCBIVE1MVG9rZW5pemVyOjpwYXJzZVNwZWNpYWwoVG9rZW5pegogICAgICAgICAgICAgZWxz
ZSB7CiAgICAgICAgICAgICAgICAgcHJvY2Vzc0xpc3RpbmcoVG9rZW5pemVyU3RyaW5nKHNjcmlw
dENvZGUsIHNjcmlwdENvZGVTaXplKSk7CiAgICAgICAgICAgICAgICAgcHJvY2Vzc1Rva2VuKCk7
Ci0gICAgICAgICAgICAgICAgaWYgKCBzdHlsZSApICAgICAgICAgeyBjdXJyVG9rZW4uaWQgPSBJ
RF9TVFlMRSArIElEX0NMT1NFX1RBRzsgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKCB0ZXh0
YXJlYSApIHsgY3VyclRva2VuLmlkID0gSURfVEVYVEFSRUEgKyBJRF9DTE9TRV9UQUc7IH0KLSAg
ICAgICAgICAgICAgICBlbHNlIGlmICggdGl0bGUgKSB7IGN1cnJUb2tlbi5pZCA9IElEX1RJVExF
ICsgSURfQ0xPU0VfVEFHOyB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoIHhtcCApICB7IGN1
cnJUb2tlbi5pZCA9IElEX1hNUCArIElEX0NMT1NFX1RBRzsgfQorICAgICAgICAgICAgICAgIGlm
ICggc3R5bGUgKSAgICAgICAgIHsgY3VyclRva2VuLnRhZ05hbWUgPSBIVE1MTmFtZXM6OnN0eWxl
KCkubG9jYWxOYW1lKCk7IGN1cnJUb2tlbi5iZWdpblRhZyA9IGZhbHNlOyB9CisgICAgICAgICAg
ICAgICAgZWxzZSBpZiAoIHRleHRhcmVhICkgeyBjdXJyVG9rZW4udGFnTmFtZSA9IEhUTUxOYW1l
czo6dGV4dGFyZWEoKS5sb2NhbE5hbWUoKTsgY3VyclRva2VuLmJlZ2luVGFnID0gZmFsc2U7IH0K
KyAgICAgICAgICAgICAgICBlbHNlIGlmICggdGl0bGUgKSB7IGN1cnJUb2tlbi50YWdOYW1lID0g
SFRNTE5hbWVzOjp0aXRsZSgpLmxvY2FsTmFtZSgpOyBjdXJyVG9rZW4uYmVnaW5UYWcgPSBmYWxz
ZTsgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKCB4bXAgKSAgeyBjdXJyVG9rZW4udGFnTmFt
ZSA9IEhUTUxOYW1lczo6eG1wKCkubG9jYWxOYW1lKCk7IGN1cnJUb2tlbi5iZWdpblRhZyA9IGZh
bHNlOyB9CiAgICAgICAgICAgICAgICAgcHJvY2Vzc1Rva2VuKCk7CiAgICAgICAgICAgICAgICAg
c3R5bGUgPSBzY3JpcHQgPSBzdHlsZSA9IHRleHRhcmVhID0gdGl0bGUgPSB4bXAgPSBmYWxzZTsK
ICAgICAgICAgICAgICAgICB0cXVvdGUgPSBOb1F1b3RlOwpAQCAtNTI0LDcgKzUyNiw4IEBAIHZv
aWQgSFRNTFRva2VuaXplcjo6c2NyaXB0SGFuZGxlcigpCiAgICAgcHJvY2Vzc0xpc3RpbmcoVG9r
ZW5pemVyU3RyaW5nKHNjcmlwdENvZGUsIHNjcmlwdENvZGVTaXplKSk7CiAgICAgUVN0cmluZyBl
eFNjcmlwdCggYnVmZmVyLCBkZXN0LWJ1ZmZlciApOwogICAgIHByb2Nlc3NUb2tlbigpOwotICAg
IGN1cnJUb2tlbi5pZCA9IElEX1NDUklQVCArIElEX0NMT1NFX1RBRzsKKyAgICBjdXJyVG9rZW4u
dGFnTmFtZSA9IEhUTUxOYW1lczo6c2NyaXB0KCkubG9jYWxOYW1lKCk7CisgICAgY3VyclRva2Vu
LmJlZ2luVGFnID0gZmFsc2U7CiAgICAgcHJvY2Vzc1Rva2VuKCk7CiAKICAgICBUb2tlbml6ZXJT
dHJpbmcgKnNhdmVkUHJlcGVuZGluZ1NyYyA9IGN1cnJlbnRQcmVwZW5kaW5nU3JjOwpAQCAtNzAx
LDEwICs3MDQsMTEgQEAgdm9pZCBIVE1MVG9rZW5pemVyOjpwYXJzZUNvbW1lbnQoVG9rZW5pegog
ICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tTY3JpcHRCdWZmZXIoKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIHNjcmlwdENvZGVbIHNjcmlwdENvZGVTaXplIF0gPSAwOwogICAgICAgICAg
ICAgICAgICAgICAgICAgc2NyaXB0Q29kZVsgc2NyaXB0Q29kZVNpemUgKyAxIF0gPSAwOwotICAg
ICAgICAgICAgICAgICAgICAgICAgY3VyclRva2VuLmlkID0gSURfQ09NTUVOVDsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGN1cnJUb2tlbi50YWdOYW1lID0gY29tbWVudEF0b207CiAgICAgICAg
ICAgICAgICAgICAgICAgICBwcm9jZXNzTGlzdGluZyhUb2tlbml6ZXJTdHJpbmcoc2NyaXB0Q29k
ZSwgc2NyaXB0Q29kZVNpemUgLSBlbmRDaGFyc0NvdW50KSk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBwcm9jZXNzVG9rZW4oKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJUb2tlbi5p
ZCA9IElEX0NPTU1FTlQgKyBJRF9DTE9TRV9UQUc7CisgICAgICAgICAgICAgICAgICAgICAgICBj
dXJyVG9rZW4udGFnTmFtZSA9IGNvbW1lbnRBdG9tOworICAgICAgICAgICAgICAgICAgICAgICAg
Y3VyclRva2VuLmJlZ2luVGFnID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICBwcm9j
ZXNzVG9rZW4oKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBz
Y3JpcHRDb2RlU2l6ZSA9IDA7CkBAIC0xMDQ3LDI2ICsxMDUxLDE2IEBAIHZvaWQgSFRNTFRva2Vu
aXplcjo6cGFyc2VUYWcoVG9rZW5pemVyU3QKICAgICAgICAgICAgICAgICAgICAgLy8gU3RhcnQg
VGFnCiAgICAgICAgICAgICAgICAgICAgIGJlZ2luVGFnID0gdHJ1ZTsKIAotICAgICAgICAgICAg
ICAgIC8vIEFjY2VwdCBlbXB0eSB4bWwgdGFncyBsaWtlIDxici8+LiAgV2UgdHJpbSBvZmYgdGhl
ICIvIiBzbyB0aGF0IHdoZW4gd2UgY2FsbAotICAgICAgICAgICAgICAgIC8vIGdldFRhZ0lELCB3
ZSdsbCBsb29rIHVwICJiciIgYXMgdGhlIHRhZyBuYW1lIGFuZCBub3QgImJyLyIuCisgICAgICAg
ICAgICAgICAgLy8gSWdub3JlIHRoZSAvIGluIGZha2UgeG1sIHRhZ3MgbGlrZSA8YnIvPi4gIFdl
IHRyaW0gb2ZmIHRoZSAiLyIgc28gdGhhdCB3ZSdsbCBnZXQgImJyIiBhcyB0aGUgdGFnIG5hbWUg
YW5kIG5vdCAiYnIvIi4KICAgICAgICAgICAgICAgICBpZihsZW4gPiAxICYmIHB0cltsZW4tMV0g
PT0gJy8nICkKICAgICAgICAgICAgICAgICAgICAgcHRyWy0tbGVuXSA9ICdcMCc7CiAKLSAgICAg
ICAgICAgICAgICAvLyBMb29rIHVwIHRoZSB0YWdJRCBmb3IgdGhlIHNwZWNpZmllZCB0YWcgbmFt
ZSAobm93IHRoYXQgd2UndmUgc2hhdmVkIG9mZiBhbnkKLSAgICAgICAgICAgICAgICAvLyBpbnZh
bGlkIC8gdGhhdCBtaWdodCBoYXZlIGZvbGxvd2VkIHRoZSBuYW1lKS4KLSAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBzaG9ydCB0YWdJRCA9IGdldFRhZ0lEKHB0ciwgbGVuKTsKLSAgICAgICAgICAg
ICAgICBpZiAoIXRhZ0lEKSB7Ci0gICAgICAgICAgICAgICAgICAgIERPTVN0cmluZyB0YWdOYW1l
KHB0cik7Ci0gICAgICAgICAgICAgICAgICAgIERvY3VtZW50SW1wbCAqZG9jID0gcGFyc2VyLT5k
b2NQdHIoKS0+ZG9jdW1lbnQoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGRvYy0+aXNWYWxp
ZE5hbWUodGFnTmFtZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICB0YWdJRCA9IHBhcnNlci0+
ZG9jUHRyKCktPmRvY3VtZW50KCktPnRhZ0lkKDAsIHRhZ05hbWUuaW1wbGVtZW50YXRpb24oKSwg
ZmFsc2UpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAodGFnSUQpIHsK
LSNpZmRlZiBUT0tFTl9ERUJVRwotICAgICAgICAgICAgICAgICAgICBRQ1N0cmluZyB0bXAocHRy
LCBsZW4rMSk7Ci0gICAgICAgICAgICAgICAgICAgIGtkRGVidWcoIDYwMzYgKSA8PCAiZm91bmQg
dGFnIGlkPSIgPDwgdGFnSUQgPDwgIjogIiA8PCB0bXAuZGF0YSgpIDw8IGVuZGw7Ci0jZW5kaWYK
LSAgICAgICAgICAgICAgICAgICAgY3VyclRva2VuLmlkID0gYmVnaW5UYWcgPyB0YWdJRCA6IHRh
Z0lEICsgSURfQ0xPU0VfVEFHOworICAgICAgICAgICAgICAgIC8vIE5vdyB0aGF0IHdlJ3ZlIHNo
YXZlZCBvZmYgYW55IGludmFsaWQgLyB0aGF0IG1pZ2h0IGhhdmUgZm9sbG93ZWQgdGhlIG5hbWUp
LCBtYWtlIHRoZSB0YWcuCisgICAgICAgICAgICAgICAgRE9NU3RyaW5nIHRhZ05hbWUocHRyKTsK
KyAgICAgICAgICAgICAgICBEb2N1bWVudEltcGwgKmRvYyA9IHBhcnNlci0+ZG9jUHRyKCktPmRv
Y3VtZW50KCk7CisgICAgICAgICAgICAgICAgaWYgKGRvYy0+aXNWYWxpZE5hbWUodGFnTmFtZSkp
IHsKKyAgICAgICAgICAgICAgICAgICAgY3VyclRva2VuLnRhZ05hbWUgPSBBdG9taWNTdHJpbmco
dGFnTmFtZS5sb3dlcigpKTsgLy8gV2UgaGF2ZSB0byBjYW5vbmljYWxpemUgb24gbG93ZXItY2Fz
ZS4KKyAgICAgICAgICAgICAgICAgICAgY3VyclRva2VuLmJlZ2luVGFnID0gYmVnaW5UYWc7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGRlc3QgPSBidWZmZXI7CiAgICAgICAg
ICAgICAgICAgdGFnID0gU2VhcmNoQXR0cmlidXRlOwpAQCAtMTExOCwxNSArMTExMiw2IEBAIHZv
aWQgSFRNTFRva2VuaXplcjo6cGFyc2VUYWcoVG9rZW5pemVyU3QKICAgICAgICAgICAgICAgICAg
ICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJOYW1lID0gUVN0
cmluZzo6ZnJvbUxhdGluMShRQ1N0cmluZyhjQnVmZmVyLCBjQnVmZmVyUG9zKzEpLmRhdGEoKSk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0ck5hbWVQcmVzZW50ID0gIWF0dHJOYW1l
LmlzRW1wdHkoKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBk
ZWxpYmVyYXRlIHF1aXJrIHRvIG1hdGNoIE1vemlsbGEgYW5kIE9wZXJhLiAgV2UgaGF2ZSB0byBk
byB0aGlzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2luY2Ugc2l0ZXMgdGhhdCB1
c2UgdGhlICJzdGFuZGFyZHMtY29tcGxpYW50IiBwYXRoIHNvbWV0aW1lcyBzZW5kCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gPHNjcmlwdCBzcmM9ImZvby5qcyIvPi4gIEJvdGggTW96
IGFuZCBPcGVyYSB3aWxsIGhvbm9yIHRoaXMsIGRlc3BpdGUgaXQKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBiZWluZyBib2d1cyBIVE1MLiAgVGhleSBkbyBub3QgaG9ub3IgdGhlICIv
IiBmb3Igb3RoZXIgdGFncy4gIFRoaXMgYmVoYXZpb3IKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBhbHNvIGRldmlhdGVzIGZyb20gV2luSUUsIGJ1dCBpbiB0aGlzIGNhc2Ugd2UnbGwg
anVzdCBjb3B5IE1veiBhbmQgT3BlcmEuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGN1cnJUb2tlbi5pZCA9PSBJRF9TQ1JJUFQgJiYgY3VyY2hhciA9PSAnPicgJiYKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYXR0ck5hbWUgPT0gIi8iKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjdXJyVG9rZW4uZmxhdCA9IHRydWU7CiAgICAgICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAg
ICAgIGRlc3QgPSBidWZmZXI7CkBAIC0xMzI4LDE4ICsxMzEzLDE1IEBAIHZvaWQgSFRNTFRva2Vu
aXplcjo6cGFyc2VUYWcoVG9rZW5pemVyU3QKICAgICAgICAgICAgIGlmICgqc3JjICE9ICc8JykK
ICAgICAgICAgICAgICAgICArK3NyYzsKIAotICAgICAgICAgICAgaWYgKCAhY3VyclRva2VuLmlk
ICkgLy9zdG9wIGlmIHRhZyBpcyB1bmtub3duCisgICAgICAgICAgICBpZiAoY3VyclRva2VuLnRh
Z05hbWUgPT0gbnVsbEF0b20pIC8vc3RvcCBpZiB0YWcgaXMgdW5rbm93bgogICAgICAgICAgICAg
ICAgIHJldHVybjsKIAotICAgICAgICAgICAgdWludCB0YWdJRCA9IGN1cnJUb2tlbi5pZDsKKyAg
ICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSA9IGN1cnJUb2tlbi50YWdOYW1l
OwogI2lmIGRlZmluZWQoVE9LRU5fREVCVUcpICYmIFRPS0VOX0RFQlVHID4gMAogICAgICAgICAg
ICAga2REZWJ1ZyggNjAzNiApIDw8ICJhcHBlbmRpbmcgVGFnOiAiIDw8IHRhZ0lEIDw8IGVuZGw7
CiAjZW5kaWYKLSAgICAgICAgICAgIGJvb2wgYmVnaW5UYWcgPSAhY3VyclRva2VuLmZsYXQgJiYg
KHRhZ0lEIDw9IElEX0NMT1NFX1RBRyk7Ci0KLSAgICAgICAgICAgIGlmICh0YWdJRCA+IElEX0NM
T1NFX1RBRykKLSAgICAgICAgICAgICAgICB0YWdJRCAtPSBJRF9DTE9TRV9UQUc7Ci0gICAgICAg
ICAgICBlbHNlIGlmICh0YWdJRCA9PSBJRF9TQ1JJUFQpIHsKKyAgICAgICAgICAgIGJvb2wgYmVn
aW5UYWcgPSAhY3VyclRva2VuLmZsYXQgJiYgY3VyclRva2VuLmJlZ2luVGFnOworICAgICAgICAg
ICAgaWYgKGJlZ2luVGFnICYmIGN1cnJUb2tlbi50YWdOYW1lID09IEhUTUxOYW1lczo6c2NyaXB0
KCkpIHsKICAgICAgICAgICAgICAgICBBdHRyaWJ1dGVJbXBsKiBhID0gMDsKICAgICAgICAgICAg
ICAgICBib29sIGZvdW5kVHlwZUF0dHJpYnV0ZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgIHNj
cmlwdFNyYyA9IFFTdHJpbmc6Om51bGw7CkBAIC0xNDE2LDcwICsxMzk4LDUzIEBAIHZvaWQgSFRN
TFRva2VuaXplcjo6cGFyc2VUYWcoVG9rZW5pemVyU3QKIAogICAgICAgICAgICAgLy8gd2UgaGF2
ZSB0byB0YWtlIGNhcmUgdG8gY2xvc2UgdGhlIHByZSBibG9jayBpbgogICAgICAgICAgICAgLy8g
Y2FzZSB3ZSBlbmNvdW50ZXIgYW4gdW5hbGxvd2VkIGVsZW1lbnQuLi4uCi0gICAgICAgICAgICBp
ZihwcmUgJiYgYmVnaW5UYWcgJiYgIURPTTo6Y2hlY2tDaGlsZChJRF9QUkUsIHRhZ0lELCAhcGFy
c2VyLT5kb2MoKS0+aW5Db21wYXRNb2RlKCkpKSB7Ci0gICAgICAgICAgICAgICAga2REZWJ1Zyg2
MDM2KSA8PCAiIG5vdCBhbGxvd2VkIGluIDxwcmU+ICIgPDwgKGludCl0YWdJRCA8PCBlbmRsOwor
ICAgICAgICAgICAgaWYgKHByZSAmJiBiZWdpblRhZyAvKiBGSVhNRTogY2hlY2tDaGlsZCEhISAm
JiAhRE9NOjpjaGVja0NoaWxkKElEX1BSRSwgdGFnSUQsICFwYXJzZXItPmRvYygpLT5pbkNvbXBh
dE1vZGUoKSkqLykKICAgICAgICAgICAgICAgICBwcmUgPSBmYWxzZTsKLSAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgc3dpdGNoKCB0YWdJRCApIHsKLSAgICAgICAgICAgIGNhc2UgSURfUFJF
OgorICAgICAgICAgICAgaWYgKHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpwcmUoKSkgewogICAgICAg
ICAgICAgICAgIHByZVBvcyA9IDA7CiAgICAgICAgICAgICAgICAgcHJlID0gYmVnaW5UYWc7CiAg
ICAgICAgICAgICAgICAgZGlzY2FyZCA9IExGRGlzY2FyZDsgLy8gRGlzY2FyZCB0aGUgZmlyc3Qg
TEYgYWZ0ZXIgd2Ugb3BlbiBhIHByZS4KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIGNhc2UgSURfU0NSSVBUOgorICAgICAgICAgICAgfSBlbHNlIGlmICh0YWdOYW1lID09IEhU
TUxOYW1lczo6c2NyaXB0KCkpIHsKICAgICAgICAgICAgICAgICBpZiAoYmVnaW5UYWcpIHsKICAg
ICAgICAgICAgICAgICAgICAgc2VhcmNoU3RvcHBlciA9IHNjcmlwdEVuZDsKICAgICAgICAgICAg
ICAgICAgICAgc2VhcmNoU3RvcHBlckxlbiA9IDg7CiAgICAgICAgICAgICAgICAgICAgIHNjcmlw
dCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIHBhcnNlU3BlY2lhbChzcmMpOwogICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmICh0YWdJRCA8PSBJRF9DTE9TRV9U
QUcpIHsgLy8gSGFuZGxlIDxzY3JpcHQgc3JjPSJmb28iLz4KLSAgICAgICAgICAgICAgICAgICAg
c2NyaXB0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgc2NyaXB0SGFuZGxlcigpOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2Ug
SURfU1RZTEU6CisgICAgICAgICAgICB9IGVsc2UgaWYgKHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpz
dHlsZSgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGJlZ2luVGFnKSB7CiAgICAgICAgICAgICAg
ICAgICAgIHNlYXJjaFN0b3BwZXIgPSBzdHlsZUVuZDsKICAgICAgICAgICAgICAgICAgICAgc2Vh
cmNoU3RvcHBlckxlbiA9IDc7CiAgICAgICAgICAgICAgICAgICAgIHN0eWxlID0gdHJ1ZTsKICAg
ICAgICAgICAgICAgICAgICAgcGFyc2VTcGVjaWFsKHNyYyk7CiAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBJRF9URVhUQVJFQToKKyAg
ICAgICAgICAgIH0gZWxzZSBpZiAodGFnTmFtZSA9PSBIVE1MTmFtZXM6OnRleHRhcmVhKCkpIHsK
ICAgICAgICAgICAgICAgICBpZihiZWdpblRhZykgewogICAgICAgICAgICAgICAgICAgICBzZWFy
Y2hTdG9wcGVyID0gdGV4dGFyZWFFbmQ7CiAgICAgICAgICAgICAgICAgICAgIHNlYXJjaFN0b3Bw
ZXJMZW4gPSAxMDsKICAgICAgICAgICAgICAgICAgICAgdGV4dGFyZWEgPSB0cnVlOwogICAgICAg
ICAgICAgICAgICAgICBwYXJzZVNwZWNpYWwoc3JjKTsKICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIElEX1RJVExFOgotICAgICAgICAg
ICAgICAgIGlmIChiZWdpblRhZykgeworICAgICAgICAgICAgfSBlbHNlIGlmICh0YWdOYW1lID09
IEhUTUxOYW1lczo6dGl0bGUoKSkgeworICAgICAgICAgICAgICAgICBpZiAoYmVnaW5UYWcpIHsK
ICAgICAgICAgICAgICAgICAgICAgc2VhcmNoU3RvcHBlciA9IHRpdGxlRW5kOwogICAgICAgICAg
ICAgICAgICAgICBzZWFyY2hTdG9wcGVyTGVuID0gNzsKICAgICAgICAgICAgICAgICAgICAgdGl0
bGUgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBwYXJzZVNwZWNpYWwoc3JjKTsKICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIElE
X1hNUDoKKyAgICAgICAgICAgIH0gZWxzZSBpZiAodGFnTmFtZSA9PSBIVE1MTmFtZXM6OnhtcCgp
KSB7CiAgICAgICAgICAgICAgICAgaWYgKGJlZ2luVGFnKSB7CiAgICAgICAgICAgICAgICAgICAg
IHNlYXJjaFN0b3BwZXIgPSB4bXBFbmQ7CiAgICAgICAgICAgICAgICAgICAgIHNlYXJjaFN0b3Bw
ZXJMZW4gPSA1OwogICAgICAgICAgICAgICAgICAgICB4bXAgPSB0cnVlOwogICAgICAgICAgICAg
ICAgICAgICBwYXJzZVNwZWNpYWwoc3JjKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIElEX1NFTEVDVDoKKyAgICAgICAgICAgIH0g
ZWxzZSBpZiAodGFnTmFtZSA9PSBIVE1MTmFtZXM6OnNlbGVjdCgpKQogICAgICAgICAgICAgICAg
IHNlbGVjdCA9IGJlZ2luVGFnOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
Y2FzZSBJRF9QTEFJTlRFWFQ6CisgICAgICAgICAgICBlbHNlIGlmICh0YWdOYW1lID09IEhUTUxO
YW1lczo6cGxhaW50ZXh0KCkpCiAgICAgICAgICAgICAgICAgcGxhaW50ZXh0ID0gYmVnaW5UYWc7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJl
dHVybjsgLy8gRmluaXNoZWQgcGFyc2luZyB0YWchCisgICAgICAgICAgICByZXR1cm47IC8vIEZp
bmlzaGVkIHBhcnNpbmcgdGFnOwogICAgICAgICB9CiAgICAgICAgIH0gLy8gZW5kIHN3aXRjaAog
ICAgIH0KQEAgLTE5ODksMTAgKzE5NTQsMTAgQEAgdm9pZCBIVE1MVG9rZW5pemVyOjpwcm9jZXNz
VG9rZW4oKQogI2VuZGlmCiAgICAgICAgIGN1cnJUb2tlbi50ZXh0ID0gbmV3IERPTVN0cmluZ0lt
cGwoIGJ1ZmZlciwgZGVzdCAtIGJ1ZmZlciApOwogICAgICAgICBjdXJyVG9rZW4udGV4dC0+cmVm
KCk7Ci0gICAgICAgIGlmIChjdXJyVG9rZW4uaWQgIT0gSURfQ09NTUVOVCkKLSAgICAgICAgICAg
IGN1cnJUb2tlbi5pZCA9IElEX1RFWFQ7CisgICAgICAgIGlmIChjdXJyVG9rZW4udGFnTmFtZSAh
PSBjb21tZW50QXRvbSkKKyAgICAgICAgICAgIGN1cnJUb2tlbi50YWdOYW1lID0gdGV4dEF0b207
CiAgICAgfQotICAgIGVsc2UgaWYoIWN1cnJUb2tlbi5pZCkgeworICAgIGVsc2UgaWYgKGN1cnJU
b2tlbi50YWdOYW1lID09IG51bGxBdG9tKSB7CiAgICAgICAgIGN1cnJUb2tlbi5yZXNldCgpOwog
ICAgICAgICBpZiAoanNQcm94eSkKICAgICAgICAgICAgIGpzUHJveHktPnNldEV2ZW50SGFuZGxl
ckxpbmVubyhsaW5lbm8rc3JjLmxpbmVDb3VudCgpKTsKSW5kZXg6IGtodG1sL2h0bWwvaHRtbHRv
a2VuaXplci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0
bWwvaHRtbHRva2VuaXplci5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjM0CmRpZmYgLXUgLXAg
LXIxLjM0IGtodG1sL2h0bWwvaHRtbHRva2VuaXplci5oCi0tLSBraHRtbC9odG1sL2h0bWx0b2tl
bml6ZXIuaAkxMSBNYXkgMjAwNSAwNTo0OTozNCAtMDAwMAkxLjM0CisrKyBraHRtbC9odG1sL2h0
bWx0b2tlbml6ZXIuaAkyMyBKdW4gMjAwNSAwMToxMTowNiAtMDAwMApAQCAtMzQsOCArMzQsNiBA
QAogI2luY2x1ZGUgPHFwdHJxdWV1ZS5oPgogCiAjaW5jbHVkZSAibWlzYy9sb2FkZXJfY2xpZW50
LmgiCi0jaW5jbHVkZSAibWlzYy9odG1sdGFncy5oIgotI2luY2x1ZGUgInhtbC9kb21fc3RyaW5n
aW1wbC5oIgogI2luY2x1ZGUgInhtbC94bWxfdG9rZW5pemVyLmgiCiAjaW5jbHVkZSAiaHRtbC9o
dG1sX2VsZW1lbnRpbXBsLmgiCiAjaW5jbHVkZSAieG1sL2RvbV9kb2NpbXBsLmgiCkBAIC00Nyw3
ICs0NSw3IEBACiAjZW5kaWYKIAogY2xhc3MgS0NoYXJzZXRzOwotY2xhc3MgS0hUTUxQYXJzZXI7
CitjbGFzcyBIVE1MUGFyc2VyOwogY2xhc3MgS0hUTUxWaWV3OwogCiBuYW1lc3BhY2UgRE9NIHsK
QEAgLTcwLDIyICs2OCwyNCBAQCBjbGFzcyBUb2tlbgogewogcHVibGljOgogICAgIFRva2VuKCkg
ewotICAgICAgICBpZCA9IDA7CiAgICAgICAgIGF0dHJzID0gMDsKICAgICAgICAgdGV4dCA9IDA7
CisgICAgICAgIGJlZ2luVGFnID0gdHJ1ZTsKICAgICAgICAgZmxhdCA9IGZhbHNlOwogICAgICAg
ICAvL3FEZWJ1ZygibmV3IHRva2VuLCBjcmVhdGluZyAlMDhseCIsIGF0dHJzKTsKICAgICB9CisK
ICAgICB+VG9rZW4oKSB7Ci0gICAgICAgIGlmKGF0dHJzKSBhdHRycy0+ZGVyZWYoKTsKLSAgICAg
ICAgaWYodGV4dCkgdGV4dC0+ZGVyZWYoKTsKKyAgICAgICAgaWYgKGF0dHJzKSBhdHRycy0+ZGVy
ZWYoKTsKKyAgICAgICAgaWYgKHRleHQpIHRleHQtPmRlcmVmKCk7CiAgICAgfQorCiAgICAgdm9p
ZCBhZGRBdHRyaWJ1dGUoRE9NOjpEb2N1bWVudEltcGwqIGRvYywgUUNoYXIqIGJ1ZmZlciwgY29u
c3QgUVN0cmluZyYgYXR0ck5hbWUsIGNvbnN0IERPTTo6QXRvbWljU3RyaW5nJiB2KQogICAgIHsK
ICAgICAgICAgRE9NOjpBdHRyaWJ1dGVJbXBsKiBhID0gMDsKLSAgICAgICAgaWYoYnVmZmVyLT51
bmljb2RlKCkpCisgICAgICAgIGlmIChidWZmZXItPnVuaWNvZGUoKSkKICAgICAgICAgICAgIGEg
PSBuZXcgRE9NOjpNYXBwZWRBdHRyaWJ1dGVJbXBsKGJ1ZmZlci0+dW5pY29kZSgpLCB2KTsKLSAg
ICAgICAgZWxzZSBpZiAoICFhdHRyTmFtZS5pc0VtcHR5KCkgJiYgYXR0ck5hbWUgIT0gIi8iICkK
KyAgICAgICAgZWxzZSBpZiAoIWF0dHJOYW1lLmlzRW1wdHkoKSAmJiBhdHRyTmFtZSAhPSAiLyIp
CiAgICAgICAgICAgICBhID0gbmV3IERPTTo6TWFwcGVkQXR0cmlidXRlSW1wbChkb2MtPmF0dHJJ
ZCgwLCBET006OkRPTVN0cmluZyhhdHRyTmFtZSkuaW1wbGVtZW50YXRpb24oKSwgZmFsc2UpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdik7CiAKQEAgLTk3
LDIzICs5NywzMyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBhdHRycy0+aW5zZXJ0QXR0cmlidXRl
KGEpOwogICAgICAgICB9CiAgICAgfQorCisgICAgYm9vbCBpc09wZW5UYWcoY29uc3QgRE9NOjpR
dWFsaWZpZWROYW1lJiBmdWxsTmFtZSkgY29uc3QgeyByZXR1cm4gYmVnaW5UYWcgJiYgZnVsbE5h
bWUubG9jYWxOYW1lKCkgPT0gdGFnTmFtZTsgfQorICAgIGJvb2wgaXNDbG9zZVRhZyhjb25zdCBE
T006OlF1YWxpZmllZE5hbWUmIGZ1bGxOYW1lKSBjb25zdCB7IHJldHVybiAhYmVnaW5UYWcgJiYg
ZnVsbE5hbWUubG9jYWxOYW1lKCkgPT0gdGFnTmFtZTsgfQorCiAgICAgdm9pZCByZXNldCgpCiAg
ICAgewotICAgICAgICBpZihhdHRycykgeworICAgICAgICBpZiAoYXR0cnMpIHsKICAgICAgICAg
ICAgIGF0dHJzLT5kZXJlZigpOwogICAgICAgICAgICAgYXR0cnMgPSAwOwogICAgICAgICB9Ci0g
ICAgICAgIGlkID0gMDsKLSAgICAgICAgaWYodGV4dCkgeworICAgICAgICAKKyAgICAgICAgdGFn
TmFtZSA9IERPTTo6bnVsbEF0b207CisgICAgICAgIAorICAgICAgICBpZiAodGV4dCkgewogICAg
ICAgICAgICAgdGV4dC0+ZGVyZWYoKTsKICAgICAgICAgICAgIHRleHQgPSAwOwogICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBiZWdpblRhZyA9IHRydWU7CiAgICAgICAgIGZsYXQgPSBmYWxz
ZTsKICAgICB9CisKICAgICBET006Ok5hbWVkTWFwcGVkQXR0ck1hcEltcGwqIGF0dHJzOwogICAg
IERPTTo6RE9NU3RyaW5nSW1wbCogdGV4dDsKLSAgICB1c2hvcnQgaWQ7Ci0gICAgYm9vbCBmbGF0
OworICAgIERPTTo6QXRvbWljU3RyaW5nIHRhZ05hbWU7CisgICAgYm9vbCBiZWdpblRhZyA6IDE7
CisgICAgYm9vbCBmbGF0IDogMTsKIH07CiAKIC8vIFRoZSBjb3VudCBvZiBzcGFjZXMgdXNlZCBm
b3IgZWFjaCB0YWIuCkBAIC0zNjgsNyArMzc4LDcgQEAgcHJvdGVjdGVkOgogICAgIFRva2VuaXpl
clN0cmluZyBzcmM7CiAKICAgICBLQ2hhcnNldHMgKmNoYXJzZXRzOwotICAgIEtIVE1MUGFyc2Vy
ICpwYXJzZXI7CisgICAgSFRNTFBhcnNlciAqcGFyc2VyOwogCiAgICAgUUd1YXJkZWRQdHI8S0hU
TUxWaWV3PiB2aWV3OwogICAgIApJbmRleDoga2h0bWwvbWlzYy9kZWNvZGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9taXNjL2RlY29kZXIuY3BwLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjM0CmRpZmYgLXUgLXAgLXIxLjM0IGtodG1sL21pc2MvZGVj
b2Rlci5jcHAKLS0tIGtodG1sL21pc2MvZGVjb2Rlci5jcHAJMiBKdWwgMjAwNCAxNzowMzozMiAt
MDAwMAkxLjM0CisrKyBraHRtbC9taXNjL2RlY29kZXIuY3BwCTIzIEp1biAyMDA1IDAxOjExOjA3
IC0wMDAwCkBAIC00MSw2ICs0MSwxMiBAQCB1c2luZyBuYW1lc3BhY2Uga2h0bWw7CiAjaW5jbHVk
ZSA8a2RlYnVnLmg+CiAjaW5jbHVkZSA8a2xvY2FsZS5oPgogCisjaW5jbHVkZSAiaHRtbG5hbWVz
LmgiCisKK3VzaW5nIERPTTo6QXRvbWljU3RyaW5nOwordXNpbmcgRE9NOjpIVE1MTmFtZXM7Cit1
c2luZyBET006Om51bGxBdG9tOworCiBjbGFzcyBLYW5qaUNvZGUKIHsKIHB1YmxpYzoKQEAgLTUy
NiwxMiArNTMyLDggQEAgUVN0cmluZyBEZWNvZGVyOjpkZWNvZGUoY29uc3QgY2hhciAqZGF0YQog
ICAgICAgICAgICAgICAgICAgICAgICAgbGVuKys7CiAgICAgICAgICAgICAgICAgICAgIH0KIAkJ
ICAgIHRtcFtsZW5dID0gMDsKLSAgICAgICAgICAgICAgICAgICAgaW50IGlkID0ga2h0bWw6Omdl
dFRhZ0lEKHRtcCwgbGVuKTsKLSAgICAgICAgICAgICAgICAgICAgaWYoZW5kKSBpZCArPSBJRF9D
TE9TRV9UQUc7Ci0KLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoKCBpZCApIHsKLSAgICAgICAg
ICAgICAgICAgICAgY2FzZSBJRF9NRVRBOgotICAgICAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIEF0b21pY1N0cmluZyB0YWcodG1wKTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKCFlbmQgJiYgdGFnID09IEhUTUxOYW1lczo6bWV0YSgpKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBmb3VuZCBhIG1ldGEgdGFnLi4uCiAgICAgICAgICAgICAgICAgICAgICAgICAv
L3B0ciArPSA1OwogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqIGVuZCA9IHB0
cjsKQEAgLTU3MCwyOCArNTcyLDEwIEBAIFFTdHJpbmcgRGVjb2Rlcjo6ZGVjb2RlKGNvbnN0IGNo
YXIgKmRhdGEKIAogCQkJICAgIHBvcyA9IGVuZHBvcyArIDE7CiAJCQl9Ci0JCSAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgIGNhc2UgKElEX01FVEErSURfQ0xPU0VfVEFHKToKLSAgICAgICAgICAg
ICAgICAgICAgY2FzZSBJRF9TQ1JJUFQ6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgKElEX1ND
UklQVCtJRF9DTE9TRV9UQUcpOgotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX05PU0NSSVBU
OgotICAgICAgICAgICAgICAgICAgICBjYXNlIChJRF9OT1NDUklQVCtJRF9DTE9TRV9UQUcpOgot
ICAgICAgICAgICAgICAgICAgICBjYXNlIElEX1NUWUxFOgotICAgICAgICAgICAgICAgICAgICBj
YXNlIChJRF9TVFlMRStJRF9DTE9TRV9UQUcpOgotICAgICAgICAgICAgICAgICAgICBjYXNlIElE
X0xJTks6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgKElEX0xJTksrSURfQ0xPU0VfVEFHKToK
LSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9PQkpFQ1Q6Ci0gICAgICAgICAgICAgICAgICAg
IGNhc2UgKElEX09CSkVDVCtJRF9DTE9TRV9UQUcpOgotICAgICAgICAgICAgICAgICAgICBjYXNl
IElEX1RJVExFOgotICAgICAgICAgICAgICAgICAgICBjYXNlIChJRF9USVRMRStJRF9DTE9TRV9U
QUcpOgotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0JBU0U6Ci0gICAgICAgICAgICAgICAg
ICAgIGNhc2UgKElEX0JBU0UrSURfQ0xPU0VfVEFHKToKLSAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBJRF9IVE1MOgotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0hFQUQ6Ci0gICAgICAgICAg
ICAgICAgICAgIGNhc2UgMDoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAoMCArIElEX0NMT1NF
X1RBRyApOgotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6CisJCSAgICB9IGVsc2UgaWYgKHRhZyAhPSBIVE1MTmFtZXM6OnNjcmlwdCgp
ICYmIHRhZyAhPSBIVE1MTmFtZXM6Om5vc2NyaXB0KCkgJiYgdGFnICE9IEhUTUxOYW1lczo6c3R5
bGUoKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZyAhPSBIVE1MTmFtZXM6
OmxpbmsoKSAmJiB0YWcgIT0gSFRNTE5hbWVzOjptZXRhKCkgJiYgdGFnICE9IEhUTUxOYW1lczo6
b2JqZWN0KCkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWcgIT0gSFRNTE5h
bWVzOjp0aXRsZSgpICYmIHRhZyAhPSBIVE1MTmFtZXM6OmJhc2UoKSAmJiB0YWcgIT0gSFRNTE5h
bWVzOjpodG1sKCkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWcgIT0gSFRN
TE5hbWVzOjpoZWFkKCkgJiYgdGFnICE9IG51bGxBdG9tKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBib2R5ID0gdHJ1ZTsKICNpZmRlZiBERUNPREVfREVCVUcKIAkJCWtkRGVidWcoIDYwMDUg
KSA8PCAiRGVjb2Rlcjogbm8gY2hhcnNldCBmb3VuZC4gSWQ9IiA8PCBpZCA8PCBlbmRsOwpJbmRl
eDoga2h0bWwvbWlzYy9odG1saGFzaGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvV2ViQ29yZS9raHRtbC9taXNjL2h0bWxoYXNoZXMuY3BwLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjEwCmRpZmYgLXUgLXAgLXIxLjEwIGtodG1sL21pc2MvaHRtbGhhc2hlcy5jcHAKLS0tIGto
dG1sL21pc2MvaHRtbGhhc2hlcy5jcHAJNSBKYW4gMjAwNSAyMjo1Njo0NiAtMDAwMAkxLjEwCisr
KyBraHRtbC9taXNjL2h0bWxoYXNoZXMuY3BwCTIzIEp1biAyMDA1IDAxOjExOjA3IC0wMDAwCkBA
IC0yNSwyMiArMjUsMTMgQEAKIC8vIHR1cm4gb2ZmIGlubGluaW5nIHRvIHZvaWQgd2FybmluZyB3
aXRoIG5ld2VyIGdjYwogI3VuZGVmIF9faW5saW5lCiAjZGVmaW5lIF9faW5saW5lCi0jaW5jbHVk
ZSAiaHRtbHRhZ3MuYyIKICNpbmNsdWRlICJodG1sYXR0cnMuYyIKICN1bmRlZiBfX2lubGluZQog
Ci11bnNpZ25lZCBzaG9ydCBraHRtbDo6Z2V0VGFnSUQoY29uc3QgY2hhciAqdGFnU3RyLCBpbnQg
bGVuKQordW5zaWduZWQgc2hvcnQga2h0bWw6OmdldEF0dHJJRChjb25zdCBjaGFyICphdHRyU3Ry
LCBpbnQgbGVuKQogewotICAgIGNvbnN0IHN0cnVjdCB0YWdzICp0YWdQdHIgPSBmaW5kVGFnKHRh
Z1N0ciwgbGVuKTsKLSAgICBpZiAoIXRhZ1B0cikKKyAgICBjb25zdCBzdHJ1Y3QgYXR0cnMgKmF0
dHJQdHIgPSBmaW5kQXR0cihhdHRyU3RyLCBsZW4pOworICAgIGlmICghYXR0clB0cikKICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIHRhZ1B0ci0+aWQ7Ci19Ci0KLXVuc2lnbmVkIHNob3J0
IGtodG1sOjpnZXRBdHRySUQoY29uc3QgY2hhciAqdGFnU3RyLCBpbnQgbGVuKQotewotICAgIGNv
bnN0IHN0cnVjdCBhdHRycyAqdGFnUHRyID0gZmluZEF0dHIodGFnU3RyLCBsZW4pOwotICAgIGlm
ICghdGFnUHRyKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gdGFnUHRyLT5pZDsKKyAg
ICByZXR1cm4gYXR0clB0ci0+aWQ7CiB9CkluZGV4OiBraHRtbC9taXNjL2h0bWxoYXNoZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9taXNjL2h0bWxoYXNo
ZXMuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS42CmRpZmYgLXUgLXAgLXIxLjYga2h0bWwvbWlz
Yy9odG1saGFzaGVzLmgKLS0tIGtodG1sL21pc2MvaHRtbGhhc2hlcy5oCTUgSmFuIDIwMDUgMjI6
NTY6NDYgLTAwMDAJMS42CisrKyBraHRtbC9taXNjL2h0bWxoYXNoZXMuaAkyMyBKdW4gMjAwNSAw
MToxMTowNyAtMDAwMApAQCAtMjMsMTIgKzIzLDEwIEBACiAjaWZuZGVmIEhUTUxIQVNIRVNfSAog
I2RlZmluZSBIVE1MSEFTSEVTX0gKIAotI2luY2x1ZGUgImh0bWx0YWdzLmgiCiAjaW5jbHVkZSAi
aHRtbGF0dHJzLmgiCiAKIG5hbWVzcGFjZSBraHRtbAogewotICB1bnNpZ25lZCBzaG9ydCBnZXRU
YWdJRChjb25zdCBjaGFyICp0YWdTdHIsIGludCBsZW4pOwogICB1bnNpZ25lZCBzaG9ydCBnZXRB
dHRySUQoY29uc3QgY2hhciAqdGFnU3RyLCBpbnQgbGVuKTsKIH0KIApJbmRleDoga2h0bWwvbWlz
Yy9odG1sdGFncy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiBraHRtbC9taXNjL2h0bWx0YWdzLmlu
CmRpZmYgLU4ga2h0bWwvbWlzYy9odG1sdGFncy5pbgotLS0ga2h0bWwvbWlzYy9odG1sdGFncy5p
bgkxMSBNYXkgMjAwNSAyMzo0NToyOSAtMDAwMAkxLjcKKysrIC9kZXYvbnVsbAkxIEphbiAxOTcw
IDAwOjAwOjAwIC0wMDAwCkBAIC0xLDEwMiArMCwwIEBACi1hCi1hYmJyCi1hY3JvbnltCi1hZGRy
ZXNzCi1hcHBsZXQKLWFyZWEKLWIKLWJhc2UKLWJhc2Vmb250Ci1iZG8KLWJpZwotYmxvY2txdW90
ZQotYm9keQotYnIKLWJ1dHRvbgotY2FudmFzCi1jYXB0aW9uCi1jZW50ZXIKLWNpdGUKLWNvZGUK
LWNvbAotY29sZ3JvdXAKLWRkCi1kZWwKLWRmbgotZGlyCi1kaXYKLWRsCi1kdAotZW0KLWVtYmVk
Ci1maWVsZHNldAotZm9udAotZm9ybQotZnJhbWUKLWZyYW1lc2V0Ci1oMQotaDIKLWgzCi1oNAot
aDUKLWg2Ci1oZWFkCi1ocgotaHRtbAotaQotaWZyYW1lCi1pbWcKLWlucHV0Ci1pbnMKLWlzaW5k
ZXgKLWtiZAota2V5Z2VuCi1sYWJlbAotbGF5ZXIKLWxlZ2VuZAotbGkKLWxpbmsKLW1hcAotbWFy
cXVlZQotbWVudQotbWV0YQotbm9icgotbm9lbWJlZAotbm9mcmFtZXMKLW5vc2NyaXB0Ci1ub2xh
eWVyCi1vYmplY3QKLW9sCi1vcHRncm91cAotb3B0aW9uCi1wCi1wYXJhbQotcGxhaW50ZXh0Ci1w
cmUKLXEKLXMKLXNhbXAKLXNjcmlwdAotc2VsZWN0Ci1zbWFsbAotc3Bhbgotc3RyaWtlCi1zdHJv
bmcKLXN0eWxlCi1zdWIKLXN1cAotdGFibGUKLXRib2R5Ci10ZAotdGV4dGFyZWEKLXRmb290Ci10
aAotdGhlYWQKLXRpdGxlCi10cgotdHQKLXUKLXVsCi12YXIKLXdicgoteG1wCkluZGV4OiBraHRt
bC9taXNjL21ha2V0YWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IGtodG1sL21pc2MvbWFrZXRhZ3MK
ZGlmZiAtTiBraHRtbC9taXNjL21ha2V0YWdzCi0tLSBraHRtbC9taXNjL21ha2V0YWdzCTYgSmFu
IDIwMDUgMjE6MTM6MTYgLTAwMDAJMS4xMworKysgL2Rldi9udWxsCTEgSmFuIDE5NzAgMDA6MDA6
MDAgLTAwMDAKQEAgLTEsMTIxICswLDAgQEAKLSMhL3Vzci9iaW4vcGVybAotIyAgIFRoaXMgZmls
ZSBpcyBwYXJ0IG9mIHRoZSBLREUgbGlicmFyaWVzCi0jCi0jICAgQ29weXJpZ2h0IChDKSAxOTk4
IFdhbGRvIEJhc3RpYW4gKGJhc3RpYW5Aa2RlLm9yZykKLSMgICAgICAgICAgICAgICAgIDE5OTkg
TGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKLSMgICBDb3B5cmlnaHQgKEMpIDIwMDQgQXBwbGUg
Q29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jICAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotIyAgIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
Ci0jICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCi0jICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgotIwotIyAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyAgIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0jICAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKLSMgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KLSMKLSMgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0jICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSMgICB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAs
Ci0jICAgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCi0jCi0jLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotIwotIyAgS0RFIEhUTUwgV2lkZ2V0IC0tIFNjcmlwdCB0byBnZW5lcmF0ZSBodG1sdGFncy5j
IGFuZCBodG1sdGFncy5oCi0jCi0KLXVzZSBzdHJpY3Q7Ci0KLW9wZW4gSU4sICJodG1sdGFncy5p
biIKLSAgb3IgZGllICJDYW4ndCBvcGVuIGluXG4iOwotb3BlbiBoZWFkZXIsICI+aHRtbHRhZ3Mu
aCIKLSAgb3IgZGllICJDYW4ndCBvcGVuIGhlYWRlclxuIjsKLW9wZW4gb3V0LCAiPmh0bWx0YWdz
LmdwZXJmIgotICBvciBkaWUgIkNhbid0IG9wZW4gb3V0XG4iOwotCi1wcmludCBvdXQgIiV7XG4v
KiBUaGlzIGZpbGUgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBodG1sdGFncy5pbiBi
eSBtYWtldGFncywgZG8gbm90IGVkaXQgKi9cbi8qIENvcHlyaWdodCAxOTk5IExhcnMgS25vbGwg
Ki9cbiNpbmNsdWRlIFwiaHRtbHRhZ3MuaFwiXG4lfVxuIjsKLXByaW50IG91dCAic3RydWN0IHRh
Z3Mge1xuICAgIGNvbnN0IGNoYXIgKm5hbWU7XG4gICAgaW50IGlkO1xufTtcbiUlXG4iOwotCi1w
cmludCBoZWFkZXIgIi8qIFRoaXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
Ci1odG1sdGFncy5pbiBieSBtYWtldGFncywgZG8gbm90IGVkaXQgKi9cbi8qIENvcHlyaWdodCAx
OTk5IExhcnMgS25vbGwgKi9cbi8qIENvcHlyaWdodCAyMDA0IEFwcGxlIENvbXB1dGVyLCBJbmMu
ICovXG5cbiNpZm5kZWYgS0hUTUxfVEFHU19IXG4jZGVmaW5lIEtIVE1MX1RBR1NfSFxuXG4jaW5j
bHVkZSBcImRvbS9kb21fc3RyaW5nLmhcIlxuXG4iOwotCi1wcmludCBoZWFkZXIgIkRPTTo6RE9N
U3RyaW5nIGdldFRhZ05hbWUodW5zaWduZWQgc2hvcnQgaWQpO1xuXG4iOwotCi1teSAkbnVtID0g
MDsKLW15ICRvcGVuVGFncyA9ICIiOwotbXkgJGNsb3NlVGFncyA9ICIiOwotd2hpbGUgKDxJTj4p
IHsKLSAgICBjaG9tcDsKLSAgICBteSAkYXR0ciA9ICRfOwotICAgICRudW0gKz0gMTsKLSAgICBt
eSAkdXAgPSB1YygkYXR0cik7Ci0gICAgJG9wZW5UYWdzIC49ICIgICAgXCIkdXBcIixcbiI7Ci0g
ICAgJGNsb3NlVGFncyAuPSAiICAgIFwiLyR1cFwiLFxuIjsKLSAgICAkdXAgPX4gcy8tL18vOwot
ICAgIHByaW50IG91dCAkYXR0ciAuICIsIElEXyIgLiAkdXAgLiAiXG4iOwotICAgIHByaW50IGhl
YWRlciAiY29uc3QgdW5zaWduZWQgc2hvcnQgSURfJHVwID0gJG51bTtcbiI7Ci19Ci1wcmludCBv
dXQgImFuY2hvciwgSURfQVxuIjsKLXByaW50IG91dCAiaW1hZ2UsIElEX0lNR1xuIjsKLXByaW50
IG91dCAibGlzdGluZywgSURfUFJFXG4iOwotJG51bSArPSAxOwotcHJpbnQgaGVhZGVyICJjb25z
dCB1bnNpZ25lZCBzaG9ydCBJRF9URVhUID0gJG51bTtcbiI7Ci0kbnVtICs9IDE7Ci1wcmludCBo
ZWFkZXIgImNvbnN0IHVuc2lnbmVkIHNob3J0IElEX0NPTU1FTlQgPSAkbnVtO1xuIjsKLXByaW50
IGhlYWRlciAiY29uc3QgdW5zaWduZWQgc2hvcnQgSURfTEFTVF9UQUcgPSAkbnVtO1xuIjsKLXBy
aW50IGhlYWRlciAiY29uc3QgdW5zaWduZWQgc2hvcnQgSURfQ0xPU0VfVEFHID0gMzIwMDA7XG4i
OwotCi1wcmludCBvdXQgIiUlXG4iOwotY2xvc2Ugb3V0OwotcHJpbnQgaGVhZGVyICJcbiNlbmRp
ZlxuIjsKLWNsb3NlIGhlYWRlcjsKLQotbXkgJHJlc3VsdCA9IHN5c3RlbSgiL2Jpbi9zaCIsICIt
YyIsICJncGVyZiAtYSAtTCAnQU5TSS1DJyAtRCAtRSAtQyAtbCAtbyAtdCAtayAnKicgLU5maW5k
VGFnIC1IaGFzaF90YWcgLVd3b3JkbGlzdF90YWcgaHRtbHRhZ3MuZ3BlcmYgPiBodG1sdGFncy5j
Iik7Ci1pZiAoJHJlc3VsdCkgewotICB1bmxpbmsgImh0bWx0YWdzLmMiOwotICBleGl0ICRyZXN1
bHQ7Ci19Ci0KLW9wZW4gSU4sICJodG1sdGFncy5jIiBvciBkaWU7Ci0KLW15ICRudW1MaW5lcyA9
IDA7Ci13aGlsZSAoPElOPikgewotICAgICRudW1MaW5lcysrOwotfQotJG51bUxpbmVzICs9IDI7
Ci0KLWNob21wICRvcGVuVGFnczsKLWNob21wICRjbG9zZVRhZ3M7Ci0KLW9wZW4gT1VULCAiPj5o
dG1sdGFncy5jIiBvciBkaWU7Ci1wcmludCBPVVQgPDxFTkQKLSNsaW5lICRudW1MaW5lcyAiaHRt
bHRhZ3MuYyIKLQotdXNpbmcgRE9NOjpET01TdHJpbmc7Ci0KLXN0YXRpYyBjb25zdCBjaGFyICog
Y29uc3Qgb3BlblRhZ05hbWVzW10gPSB7Ci0gICAgMCwKLSRvcGVuVGFncwotICAgICJURVhUIiwK
LSAgICAiQ09NTUVOVCIKLX07Ci0KLXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgY2xvc2VUYWdO
YW1lc1tdID0gewotICAgIDAsCi0kY2xvc2VUYWdzCi19OwotCi1ET01TdHJpbmcgZ2V0VGFnTmFt
ZSh1bnNpZ25lZCBzaG9ydCBpZCkKLXsKLSAgICBpZiAoaWQgPiBJRF9DTE9TRV9UQUcpIHsKLSAg
ICAgICAgaW50IGluZGV4ID0gaWQgLSBJRF9DTE9TRV9UQUc7Ci0gICAgICAgIGlmIChpbmRleCA+
PSBJRF9URVhUKQotICAgICAgICAgICAgcmV0dXJuIERPTVN0cmluZygpOwotICAgICAgICByZXR1
cm4gY2xvc2VUYWdOYW1lc1tpbmRleF07Ci0gICAgfQotICAgIGlmIChpZCA+IElEX0xBU1RfVEFH
KQotICAgICAgICByZXR1cm4gRE9NU3RyaW5nKCk7Ci0gICAgcmV0dXJuIG9wZW5UYWdOYW1lc1tp
ZF07Ci19Ci1FTkQKSW5kZXg6IGtodG1sL3JlbmRlcmluZy9yZW5kZXJfYXBwbGV0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9yZW5kZXJpbmcvcmVuZGVy
X2FwcGxldC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzAKZGlmZiAtdSAtcCAtcjEuMzAg
a2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9hcHBsZXQuY3BwCi0tLSBraHRtbC9yZW5kZXJpbmcvcmVu
ZGVyX2FwcGxldC5jcHAJMTAgTWF5IDIwMDUgMTg6NDI6MDMgLTAwMDAJMS4zMAorKysga2h0bWwv
cmVuZGVyaW5nL3JlbmRlcl9hcHBsZXQuY3BwCTIzIEp1biAyMDA1IDAxOjExOjA3IC0wMDAwCkBA
IC0zNiw3ICszNiw2IEBACiAjaWZuZGVmIFFfV1NfUVdTIC8vIFdlIGRvbid0IGhhdmUgSmF2YSBp
biBRdCBFbWJlZGRlZAogCiAjaW5jbHVkZSAiamF2YS9ramF2YWFwcGxldHdpZGdldC5oIgotI2lu
Y2x1ZGUgIm1pc2MvaHRtbHRhZ3MuaCIKICNpbmNsdWRlICJodG1sL2h0bWxfb2JqZWN0aW1wbC5o
IgogCiB1c2luZyBuYW1lc3BhY2Uga2h0bWw7CkBAIC0xMDMsNyArMTAyLDcgQEAgdm9pZCBSZW5k
ZXJBcHBsZXQ6OmNyZWF0ZVdpZGdldElmTmVjZXNzYQogICAgICAgICAgICAgICAgICAgICAgICAg
IG1faGVpZ2h0IC0gYm9yZGVyVG9wKCkgLSBib3JkZXJCb3R0b20oKSAtIHBhZGRpbmdUb3AoKSAt
IHBhZGRpbmdCb3R0b20oKTsKICAgICAgICAgICAgIE5vZGVJbXBsICpjaGlsZCA9IGVsZW1lbnQo
KS0+Zmlyc3RDaGlsZCgpOwogICAgICAgICAgICAgd2hpbGUgKGNoaWxkKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKGNoaWxkLT5pZCgpID09IElEX1BBUkFNKSB7CisgICAgICAgICAgICAgICAgaWYg
KGNoaWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6cGFyYW0oKSkpIHsKICAgICAgICAgICAgICAg
ICAgICAgSFRNTFBhcmFtRWxlbWVudEltcGwgKnAgPSBzdGF0aWNfY2FzdDxIVE1MUGFyYW1FbGVt
ZW50SW1wbCAqPihjaGlsZCk7CiAgICAgICAgICAgICAgICAgICAgIG1fYXJncy5pbnNlcnQocC0+
bmFtZSgpLnN0cmluZygpLCBwLT52YWx1ZSgpLnN0cmluZygpKTsKICAgICAgICAgICAgICAgICB9
CkluZGV4OiBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2JveC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9ib3guY3BwLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjE1NApkaWZmIC11IC1wIC1yMS4xNTQga2h0bWwvcmVuZGVyaW5n
L3JlbmRlcl9ib3guY3BwCi0tLSBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2JveC5jcHAJMTEgSnVu
IDIwMDUgMDU6MDE6MTcgLTAwMDAJMS4xNTQKKysrIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfYm94
LmNwcAkyMyBKdW4gMjAwNSAwMToxMTowOCAtMDAwMApAQCAtMjU2LDcgKzI1Niw3IEBAIHZvaWQg
UmVuZGVyQm94OjpwYWludFJvb3RCb3hEZWNvcmF0aW9ucygKICAgICAgICAgLy8gYW5vbnltb3Vz
IGJsb2NrcyBjcmVhdGVkIGJ5IGlubGluZSA8Ym9keT4gdGFncyBldGMuICBXZSBjYW4gbG9jYXRl
IHRoZSA8Ym9keT4KICAgICAgICAgLy8gcmVuZGVyIG9iamVjdCB2ZXJ5IGVhc2lseSB2aWEgdGhl
IERPTS4KICAgICAgICAgSFRNTEVsZW1lbnRJbXBsKiBib2R5ID0gZG9jdW1lbnQoKS0+Ym9keSgp
OwotICAgICAgICBSZW5kZXJPYmplY3QqIGJvZHlPYmplY3QgPSAoYm9keSAmJiBib2R5LT5pZCgp
ID09IElEX0JPRFkpID8gYm9keS0+cmVuZGVyZXIoKSA6IDA7CisgICAgICAgIFJlbmRlck9iamVj
dCogYm9keU9iamVjdCA9IChib2R5ICYmIGJvZHktPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmJv
ZHkoKSkpID8gYm9keS0+cmVuZGVyZXIoKSA6IDA7CiAgICAgICAgIGlmIChib2R5T2JqZWN0KSB7
CiAgICAgICAgICAgICBiZ0xheWVyID0gYm9keU9iamVjdC0+c3R5bGUoKS0+YmFja2dyb3VuZExh
eWVycygpOwogICAgICAgICAgICAgYmdDb2xvciA9IGJvZHlPYmplY3QtPnN0eWxlKCktPmJhY2tn
cm91bmRDb2xvcigpOwpAQCAtMzY5LDcgKzM2OSw3IEBAIHZvaWQgUmVuZGVyQm94OjpwYWludEJh
Y2tncm91bmRFeHRlbmRlZCgKICAgICAgICAgYm9vbCBpc1RyYW5zcGFyZW50OwogICAgICAgICBE
T006Ok5vZGVJbXBsKiBlbHQgPSBkb2N1bWVudCgpLT5vd25lckVsZW1lbnQoKTsKICAgICAgICAg
aWYgKGVsdCkgewotICAgICAgICAgICAgaWYgKGVsdC0+aWQoKSA9PSBJRF9GUkFNRSkKKyAgICAg
ICAgICAgIGlmIChlbHQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpmcmFtZSgpKSkKICAgICAgICAg
ICAgICAgICBpc1RyYW5zcGFyZW50ID0gZmFsc2U7CiAgICAgICAgICAgICBlbHNlIHsKICAgICAg
ICAgICAgICAgICAvLyBMb2NhdGUgdGhlIDxib2R5PiBlbGVtZW50IHVzaW5nIHRoZSBET00uICBU
aGlzIGlzIGVhc2llciB0aGFuIHRyeWluZwpAQCAtMzc3LDcgKzM3Nyw3IEBAIHZvaWQgUmVuZGVy
Qm94OjpwYWludEJhY2tncm91bmRFeHRlbmRlZCgKICAgICAgICAgICAgICAgICAvLyBhbm9ueW1v
dXMgYmxvY2tzIGNyZWF0ZWQgYnkgaW5saW5lIDxib2R5PiB0YWdzIGV0Yy4gIFdlIGNhbiBsb2Nh
dGUgdGhlIDxib2R5PgogICAgICAgICAgICAgICAgIC8vIHJlbmRlciBvYmplY3QgdmVyeSBlYXNp
bHkgdmlhIHRoZSBET00uCiAgICAgICAgICAgICAgICAgSFRNTEVsZW1lbnRJbXBsKiBib2R5ID0g
ZG9jdW1lbnQoKS0+Ym9keSgpOwotICAgICAgICAgICAgICAgIGlzVHJhbnNwYXJlbnQgPSAhYm9k
eSB8fCBib2R5LT5pZCgpICE9IElEX0ZSQU1FU0VUOyAvLyBDYW4ndCBzY3JvbGwgYSBmcmFtZXNl
dCBkb2N1bWVudCBhbnl3YXkuCisgICAgICAgICAgICAgICAgaXNUcmFuc3BhcmVudCA9ICFib2R5
IHx8ICFib2R5LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpmcmFtZXNldCgpKTsgLy8gQ2FuJ3Qg
c2Nyb2xsIGEgZnJhbWVzZXQgZG9jdW1lbnQgYW55d2F5LgogICAgICAgICAgICAgfQogICAgICAg
ICB9IGVsc2UKICAgICAgICAgICAgIGlzVHJhbnNwYXJlbnQgPSBjYW52YXMoKS0+dmlldygpLT5p
c1RyYW5zcGFyZW50KCk7CkluZGV4OiBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2NhbnZhc2ltYWdl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9yZW5kZXJp
bmcvcmVuZGVyX2NhbnZhc2ltYWdlLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMQpkaWZm
IC11IC1wIC1yMS4xMSBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2NhbnZhc2ltYWdlLmNwcAotLS0g
a2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9jYW52YXNpbWFnZS5jcHAJMjUgTWF5IDIwMDUgMDE6MzM6
MjIgLTAwMDAJMS4xMQorKysga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9jYW52YXNpbWFnZS5jcHAJ
MjMgSnVuIDIwMDUgMDE6MTE6MDkgLTAwMDAKQEAgLTM3LDEwICszNyw4IEBACiAjaW5jbHVkZSAi
Y3NzL2Nzc2hlbHBlci5oIgogI2luY2x1ZGUgIm1pc2MvaGVscGVyLmgiCiAjaW5jbHVkZSAibWlz
Yy9odG1sYXR0cnMuaCIKLSNpbmNsdWRlICJtaXNjL2h0bWx0YWdzLmgiCiAjaW5jbHVkZSAiaHRt
bC9odG1sX2Zvcm1pbXBsLmgiCiAjaW5jbHVkZSAiaHRtbC9odG1sX2NhbnZhc2ltcGwuaCIKLSNp
bmNsdWRlICJodG1sL2R0ZC5oIgogI2luY2x1ZGUgInhtbC9kb20yX2V2ZW50c2ltcGwuaCIKICNp
bmNsdWRlICJodG1sL2h0bWxfZG9jdW1lbnRpbXBsLmgiCiAjaW5jbHVkZSA8bWF0aC5oPgpJbmRl
eDoga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9mbG93LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9yZW5kZXJpbmcvcmVuZGVyX2Zsb3cuY3BwLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjE2MApkaWZmIC11IC1wIC1yMS4xNjAga2h0bWwvcmVuZGVyaW5nL3Jl
bmRlcl9mbG93LmNwcAotLS0ga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9mbG93LmNwcAkxMSBNYXkg
MjAwNSAwMjoxMDoxMCAtMDAwMAkxLjE2MAorKysga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9mbG93
LmNwcAkyMyBKdW4gMjAwNSAwMToxMTowOSAtMDAwMApAQCAtNDAsNyArNDAsNiBAQAogI2luY2x1
ZGUgInJlbmRlcl9saW5lLmgiCiAKICNpbmNsdWRlICJraHRtbHZpZXcuaCIKLSNpbmNsdWRlICJo
dG1sdGFncy5oIgogCiB1c2luZyBuYW1lc3BhY2UgRE9NOwogdXNpbmcgbmFtZXNwYWNlIGtodG1s
OwpAQCAtNjU0LDcgKzY1Myw3IEBAIHZvaWQgUmVuZGVyRmxvdzo6YWRkRm9jdXNSaW5nUmVjdHMo
UVBhaW4KICAgICAvLyBPbmx5IHBhaW50IGZvY3VzIHJpbmcgYXJvdW5kIG91dGVybW9zdCBjb250
ZW50ZWRpdGFibGUgZWxlbWVudC4KICAgICAvLyBCdXQgc2tpcCB0aGUgYm9keSBlbGVtZW50IGlm
IGl0IGlzIG91dGVybW9zdC4KICAgICBpZiAoZWxlbWVudCgpICYmIGVsZW1lbnQoKS0+aXNDb250
ZW50RWRpdGFibGUoKSkgewotICAgICAgICBpZiAoZWxlbWVudCgpLT5wYXJlbnROb2RlKCkgJiYg
IWVsZW1lbnQoKS0+cGFyZW50Tm9kZSgpLT5pc0NvbnRlbnRFZGl0YWJsZSgpICYmIGVsZW1lbnQo
KS0+aWQoKSAhPSBJRF9CT0RZKQorICAgICAgICBpZiAoZWxlbWVudCgpLT5wYXJlbnROb2RlKCkg
JiYgIWVsZW1lbnQoKS0+cGFyZW50Tm9kZSgpLT5pc0NvbnRlbnRFZGl0YWJsZSgpICYmICFlbGVt
ZW50KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpib2R5KCkpKQogICAgICAgICAgICAgcC0+YWRk
Rm9jdXNSaW5nUmVjdChfdHgsIF90eSwgd2lkdGgoKSwgaGVpZ2h0KCkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQpJbmRleDoga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9mb3JtLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9yZW5kZXJpbmcvcmVuZGVyX2Zv
cm0uY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEwNwpkaWZmIC11IC1wIC1yMS4xMDcga2h0
bWwvcmVuZGVyaW5nL3JlbmRlcl9mb3JtLmNwcAotLS0ga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9m
b3JtLmNwcAkyMCBKdW4gMjAwNSAwNToyNDoyNiAtMDAwMAkxLjEwNworKysga2h0bWwvcmVuZGVy
aW5nL3JlbmRlcl9mb3JtLmNwcAkyMyBKdW4gMjAwNSAwMToxMToxMSAtMDAwMApAQCAtNzUzLDcg
Kzc1Myw3IEBAIFJlbmRlck9iamVjdCogUmVuZGVyRmllbGRzZXQ6OmZpbmRMZWdlbmQKIHsKICAg
ICBmb3IgKFJlbmRlck9iamVjdCogbGVnZW5kID0gZmlyc3RDaGlsZCgpOyBsZWdlbmQ7IGxlZ2Vu
ZCA9IGxlZ2VuZC0+bmV4dFNpYmxpbmcoKSkgewogICAgICAgaWYgKCFsZWdlbmQtPmlzRmxvYXRp
bmdPclBvc2l0aW9uZWQoKSAmJiBsZWdlbmQtPmVsZW1lbnQoKSAmJgotICAgICAgICAgIGxlZ2Vu
ZC0+ZWxlbWVudCgpLT5pZCgpID09IElEX0xFR0VORCkKKyAgICAgICAgICBsZWdlbmQtPmVsZW1l
bnQoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmxlZ2VuZCgpKSkKICAgICAgICAgcmV0dXJuIGxl
Z2VuZDsKICAgICB9CiAgICAgcmV0dXJuIDA7CkBAIC0xMTQ3LDcgKzExNDcsNyBAQCB2b2lkIFJl
bmRlclNlbGVjdDo6dXBkYXRlRnJvbUVsZW1lbnQoKQogICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
S0NvbWJvQm94Kj4obV93aWRnZXQpLT5jbGVhcigpOwogCiAgICAgICAgIGZvciAobGlzdEluZGV4
ID0gMDsgbGlzdEluZGV4IDwgaW50KGxpc3RJdGVtcy5zaXplKCkpOyBsaXN0SW5kZXgrKykgewot
ICAgICAgICAgICAgaWYgKGxpc3RJdGVtc1tsaXN0SW5kZXhdLT5pZCgpID09IElEX09QVEdST1VQ
KSB7CisgICAgICAgICAgICBpZiAobGlzdEl0ZW1zW2xpc3RJbmRleF0tPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjpvcHRncm91cCgpKSkgewogICAgICAgICAgICAgICAgIFFTdHJpbmcgbGFiZWwgPSBs
aXN0SXRlbXNbbGlzdEluZGV4XS0+Z2V0QXR0cmlidXRlKEFUVFJfTEFCRUwpLnN0cmluZygpOwog
ICAgICAgICAgICAgICAgIGxhYmVsLnJlcGxhY2UoUUNoYXIoJ1xcJyksIGJhY2tzbGFzaEFzQ3Vy
cmVuY3lTeW1ib2woKSk7CiAKQEAgLTExNzEsMTQgKzExNzEsMTQgQEAgdm9pZCBSZW5kZXJTZWxl
Y3Q6OnVwZGF0ZUZyb21FbGVtZW50KCkKICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
S0NvbWJvQm94Kj4obV93aWRnZXQpLT5pbnNlcnRJdGVtKGxhYmVsLCBsaXN0SW5kZXgpOwogI2Vu
ZGlmCiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChsaXN0SXRlbXNbbGlzdElu
ZGV4XS0+aWQoKSA9PSBJRF9PUFRJT04pIHsKKyAgICAgICAgICAgIGVsc2UgaWYgKGxpc3RJdGVt
c1tsaXN0SW5kZXhdLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpKSB7CiAgICAgICAg
ICAgICAgICAgUVN0cmluZyBpdGVtVGV4dCA9IHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50
SW1wbCo+KGxpc3RJdGVtc1tsaXN0SW5kZXhdKS0+dGV4dCgpLnN0cmluZygpOwogICAgICAgICAg
ICAgICAgIGl0ZW1UZXh0LnJlcGxhY2UoUUNoYXIoJ1xcJyksIGJhY2tzbGFzaEFzQ3VycmVuY3lT
eW1ib2woKSk7CiAKICAgICAgICAgICAgICAgICAvLyBJbiBXaW5JRSwgbGVhZGluZyBhbmQgdHJh
aWxpbmcgd2hpdGVzcGFjZSBpcyBpZ25vcmVkIGluIG9wdGlvbnMuIFdlIG1hdGNoIHRoaXMgYmVo
YXZpb3IuCiAgICAgICAgICAgICAgICAgaXRlbVRleHQgPSBpdGVtVGV4dC5zdHJpcFdoaXRlU3Bh
Y2UoKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAobGlzdEl0ZW1zW2xp
c3RJbmRleF0tPnBhcmVudE5vZGUoKS0+aWQoKSA9PSBJRF9PUFRHUk9VUCkKKyAgICAgICAgICAg
ICAgICBpZiAobGlzdEl0ZW1zW2xpc3RJbmRleF0tPnBhcmVudE5vZGUoKS0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6Om9wdGdyb3VwKCkpKQogICAgICAgICAgICAgICAgICAgICBpdGVtVGV4dC5wcmVw
ZW5kKCIgICAgIik7CiAKICNpZiBBUFBMRV9DSEFOR0VTCkBAIC0xMzA0LDcgKzEzMDQsNyBAQCB2
b2lkIFJlbmRlclNlbGVjdDo6bGF5b3V0KCApCiAKICAgICBib29sIGZvdW5kT3B0aW9uID0gZmFs
c2U7CiAgICAgZm9yICh1aW50IGkgPSAwOyBpIDwgbGlzdEl0ZW1zLnNpemUoKSAmJiAhZm91bmRP
cHRpb247IGkrKykKLQlmb3VuZE9wdGlvbiA9IChsaXN0SXRlbXNbaV0tPmlkKCkgPT0gSURfT1BU
SU9OKTsKKwlmb3VuZE9wdGlvbiA9IChsaXN0SXRlbXNbaV0tPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjpvcHRpb24oKSkpOwogCiAgICAgbV93aWRnZXQtPnNldEVuYWJsZWQoZm91bmRPcHRpb24gJiYg
ISBlbGVtZW50KCktPmRpc2FibGVkKCkpOwogfQpAQCAtMTMxOCwxMiArMTMxOCwxMiBAQCB2b2lk
IFJlbmRlclNlbGVjdDo6c2xvdFNlbGVjdGVkKGludCBpbmRlCiAgICAgUU1lbUFycmF5PEhUTUxH
ZW5lcmljRm9ybUVsZW1lbnRJbXBsKj4gbGlzdEl0ZW1zID0gZWxlbWVudCgpLT5saXN0SXRlbXMo
KTsKICAgICBpZihpbmRleCA+PSAwICYmIGluZGV4IDwgaW50KGxpc3RJdGVtcy5zaXplKCkpKQog
ICAgIHsKLSAgICAgICAgYm9vbCBmb3VuZCA9ICggbGlzdEl0ZW1zW2luZGV4XS0+aWQoKSA9PSBJ
RF9PUFRJT04gKTsKKyAgICAgICAgYm9vbCBmb3VuZCA9IChsaXN0SXRlbXNbaW5kZXhdLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpKTsKIAogICAgICAgICBpZiAoICFmb3VuZCApIHsK
ICAgICAgICAgICAgIC8vIHRoaXMgb25lIGlzIG5vdCBzZWxlY3RhYmxlLCAgd2UgbmVlZCB0byBm
aW5kIGFuIG9wdGlvbiBlbGVtZW50CiAgICAgICAgICAgICB3aGlsZSAoICggdW5zaWduZWQgKSBp
bmRleCA8IGxpc3RJdGVtcy5zaXplKCkgKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCBsaXN0SXRl
bXNbaW5kZXhdLT5pZCgpID09IElEX09QVElPTiApIHsKKyAgICAgICAgICAgICAgICBpZiAobGlz
dEl0ZW1zW2luZGV4XS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9wdGlvbigpKSkgewogICAgICAg
ICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgIH0KQEAgLTEzMzIsNyArMTMzMiw3IEBAIHZvaWQgUmVuZGVyU2VsZWN0
OjpzbG90U2VsZWN0ZWQoaW50IGluZGUKIAogICAgICAgICAgICAgaWYgKCAhZm91bmQgKSB7CiAg
ICAgICAgICAgICAgICAgd2hpbGUgKCBpbmRleCA+PSAwICkgewotICAgICAgICAgICAgICAgICAg
ICBpZiAoIGxpc3RJdGVtc1tpbmRleF0tPmlkKCkgPT0gSURfT1BUSU9OICkgeworICAgICAgICAg
ICAgICAgICAgICBpZiAobGlzdEl0ZW1zW2luZGV4XS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9w
dGlvbigpKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTEzNDYs
NyArMTM0Niw3IEBAIHZvaWQgUmVuZGVyU2VsZWN0OjpzbG90U2VsZWN0ZWQoaW50IGluZGUKICAg
ICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxDb21ib0JveFdpZGdldCo+KCBtX3dpZGdldCApLT5z
ZXRDdXJyZW50SXRlbSggaW5kZXggKTsKIAogICAgICAgICAgICAgZm9yICggdW5zaWduZWQgaW50
IGkgPSAwOyBpIDwgbGlzdEl0ZW1zLnNpemUoKTsgKytpICkKLSAgICAgICAgICAgICAgICBpZiAo
IGxpc3RJdGVtc1tpXS0+aWQoKSA9PSBJRF9PUFRJT04gJiYgaSAhPSAodW5zaWduZWQgaW50KSBp
bmRleCApCisgICAgICAgICAgICAgICAgaWYgKGxpc3RJdGVtc1tpXS0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6Om9wdGlvbigpKSAmJiBpICE9ICh1bnNpZ25lZCBpbnQpIGluZGV4KQogICAgICAgICAg
ICAgICAgICAgICBzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudEltcGwqPiggbGlzdEl0ZW1z
W2ldICktPm1fc2VsZWN0ZWQgPSBmYWxzZTsKIAogICAgICAgICAgICAgc3RhdGljX2Nhc3Q8SFRN
TE9wdGlvbkVsZW1lbnRJbXBsKj4obGlzdEl0ZW1zW2luZGV4XSktPm1fc2VsZWN0ZWQgPSB0cnVl
OwpAQCAtMTM2Nyw3ICsxMzY3LDcgQEAgdm9pZCBSZW5kZXJTZWxlY3Q6OnNsb3RTZWxlY3Rpb25D
aGFuZ2VkKAogICAgIGZvciAoIHVuc2lnbmVkIGkgPSAwOyBpIDwgbGlzdEl0ZW1zLmNvdW50KCk7
IGkrKyApCiAgICAgICAgIC8vIGRvbid0IHVzZSBzZXRTZWxlY3RlZCgpIGhlcmUgYmVjYXVzZSBp
dCB3aWxsIGNhdXNlIHVzIHRvIGJlIGNhbGxlZAogICAgICAgICAvLyBhZ2FpbiB3aXRoIHVwZGF0
ZVNlbGVjdGlvbi4KLSAgICAgICAgaWYgKCBsaXN0SXRlbXNbaV0tPmlkKCkgPT0gSURfT1BUSU9O
ICkKKyAgICAgICAgaWYgKGxpc3RJdGVtc1tpXS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9wdGlv
bigpKSkKICAgICAgICAgICAgIHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50SW1wbCo+KCBs
aXN0SXRlbXNbaV0gKQogICAgICAgICAgICAgICAgIC0+bV9zZWxlY3RlZCA9IHN0YXRpY19jYXN0
PEtMaXN0Qm94Kj4oIG1fd2lkZ2V0ICktPmlzU2VsZWN0ZWQoIGkgKTsKIApAQCAtMTQwOSw3ICsx
NDA5LDcgQEAgdm9pZCBSZW5kZXJTZWxlY3Q6OnVwZGF0ZVNlbGVjdGlvbigpCiAgICAgICAgIC8v
IGlmIG11bHRpLXNlbGVjdCwgd2Ugc2VsZWN0IG9ubHkgdGhlIG5ldyBzZWxlY3RlZCBpbmRleAog
ICAgICAgICBLTGlzdEJveCAqbGlzdEJveCA9IHN0YXRpY19jYXN0PEtMaXN0Qm94Kj4obV93aWRn
ZXQpOwogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaW50KGxpc3RJdGVtcy5zaXplKCkpOyBpKysp
Ci0gICAgICAgICAgICBsaXN0Qm94LT5zZXRTZWxlY3RlZChpLGxpc3RJdGVtc1tpXS0+aWQoKSA9
PSBJRF9PUFRJT04gJiYKKyAgICAgICAgICAgIGxpc3RCb3gtPnNldFNlbGVjdGVkKGksIGxpc3RJ
dGVtc1tpXS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9wdGlvbigpKSAmJgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudEltcGwqPihs
aXN0SXRlbXNbaV0pLT5zZWxlY3RlZCgpKTsKICAgICB9CiAgICAgZWxzZSB7CkBAIC0xNDE3LDcg
KzE0MTcsNyBAQCB2b2lkIFJlbmRlclNlbGVjdDo6dXBkYXRlU2VsZWN0aW9uKCkKICAgICAgICAg
dW5zaWduZWQgZmlyc3RPcHRpb24gPSBsaXN0SXRlbXMuc2l6ZSgpOwogICAgICAgICBpID0gbGlz
dEl0ZW1zLnNpemUoKTsKICAgICAgICAgd2hpbGUgKGktLSkKLSAgICAgICAgICAgIGlmIChsaXN0
SXRlbXNbaV0tPmlkKCkgPT0gSURfT1BUSU9OKSB7CisgICAgICAgICAgICBpZiAobGlzdEl0ZW1z
W2ldLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpKSB7CiAgICAgICAgICAgICAgICAg
aWYgKGZvdW5kKQogICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxl
bWVudEltcGwqPihsaXN0SXRlbXNbaV0pLT5tX3NlbGVjdGVkID0gZmFsc2U7CiAgICAgICAgICAg
ICAgICAgZWxzZSBpZiAoc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnRJbXBsKj4obGlzdEl0
ZW1zW2ldKS0+c2VsZWN0ZWQoKSkgewpJbmRleDoga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9mcmFt
ZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3JlbmRl
cmluZy9yZW5kZXJfZnJhbWVzLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS42OQpkaWZmIC11
IC1wIC1yMS42OSBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2ZyYW1lcy5jcHAKLS0tIGtodG1sL3Jl
bmRlcmluZy9yZW5kZXJfZnJhbWVzLmNwcAkxMCBNYXkgMjAwNSAxODo0MjowNCAtMDAwMAkxLjY5
CisrKyBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2ZyYW1lcy5jcHAJMjMgSnVuIDIwMDUgMDE6MTE6
MTEgLTAwMDAKQEAgLTM0LDcgKzM0LDYgQEAKICNpbmNsdWRlICJtaXNjL2h0bWxhdHRycy5oIgog
I2luY2x1ZGUgInhtbC9kb20yX2V2ZW50c2ltcGwuaCIKICNpbmNsdWRlICJ4bWwvZG9tX2RvY2lt
cGwuaCIKLSNpbmNsdWRlICJtaXNjL2h0bWx0YWdzLmgiCiAjaW5jbHVkZSAia2h0bWx2aWV3Lmgi
CiAjaW5jbHVkZSAia2h0bWxfcGFydC5oIgogI2luY2x1ZGUgInJlbmRlcl9hcmVuYS5oIgpAQCAt
NjY5LDE3ICs2NjgsMTcgQEAgdm9pZCBSZW5kZXJQYXJ0T2JqZWN0Ojp1cGRhdGVXaWRnZXQoKQog
CiAgIHNldE5lZWRzTGF5b3V0QW5kTWluTWF4UmVjYWxjKCk7CiAKLSAgaWYgKGVsZW1lbnQoKS0+
aWQoKSA9PSBJRF9PQkpFQ1QpIHsKKyAgaWYgKGVsZW1lbnQoKS0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6Om9iamVjdCgpKSkgewogCiAgICAgICBIVE1MT2JqZWN0RWxlbWVudEltcGwgKm8gPSBzdGF0
aWNfY2FzdDxIVE1MT2JqZWN0RWxlbWVudEltcGwgKj4oZWxlbWVudCgpKTsKIAogICAgICAgLy8g
Q2hlY2sgZm9yIGEgY2hpbGQgRU1CRUQgdGFnLgogICAgICAgSFRNTEVtYmVkRWxlbWVudEltcGwg
KmVtYmVkID0gMDsKICAgICAgIGZvciAoTm9kZUltcGwgKmNoaWxkID0gby0+Zmlyc3RDaGlsZCgp
OyBjaGlsZDsgKSB7Ci0gICAgICAgICAgaWYgKGNoaWxkLT5pZCgpID09IElEX0VNQkVEKSB7Cisg
ICAgICAgICAgaWYgKGNoaWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZW1iZWQoKSkpIHsKICAg
ICAgICAgICAgICAgZW1iZWQgPSBzdGF0aWNfY2FzdDxIVE1MRW1iZWRFbGVtZW50SW1wbCAqPigg
Y2hpbGQgKTsKICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgfSBlbHNlIGlmIChjaGls
ZC0+aWQoKSA9PSBJRF9PQkpFQ1QpIHsKKyAgICAgICAgICB9IGVsc2UgaWYgKGNoaWxkLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6b2JqZWN0KCkpKSB7CiAgICAgICAgICAgICAgIGNoaWxkID0gY2hp
bGQtPm5leHRTaWJsaW5nKCk7ICAgICAgICAgLy8gRG9uJ3QgZGVzY2VuZCBpbnRvIG5lc3RlZCBP
QkpFQ1QgdGFncwogICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgIGNoaWxkID0gY2hp
bGQtPnRyYXZlcnNlTmV4dE5vZGUobyk7ICAgLy8gT3RoZXJ3aXNlIGRlc2NlbmQgKEVNQkVEcyBt
YXkgYmUgaW5zaWRlIENPTU1FTlQgdGFncykKQEAgLTcxOSw3ICs3MTgsNyBAQCB2b2lkIFJlbmRl
clBhcnRPYmplY3Q6OnVwZGF0ZVdpZGdldCgpCiAgICAgICAvLyBHZXQgdGhlIGF0dHJpYnV0ZXMg
ZnJvbSB0aGUgcGFyYW1zIGlmIHRoZXJlIGlzIG5vIEVNQkVEIHRhZy4KICAgICAgIE5vZGVJbXBs
ICpjaGlsZCA9IG8tPmZpcnN0Q2hpbGQoKTsKICAgICAgIHdoaWxlIChjaGlsZCAmJiAodXJsLmlz
RW1wdHkoKSB8fCBzZXJ2aWNlVHlwZS5pc0VtcHR5KCkgfHwgIWVtYmVkKSkgewotICAgICAgICAg
IGlmIChjaGlsZC0+aWQoKSA9PSBJRF9QQVJBTSkgeworICAgICAgICAgIGlmIChjaGlsZC0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OnBhcmFtKCkpKSB7CiAgICAgICAgICAgICAgIEhUTUxQYXJhbUVs
ZW1lbnRJbXBsICpwID0gc3RhdGljX2Nhc3Q8SFRNTFBhcmFtRWxlbWVudEltcGwgKj4oIGNoaWxk
ICk7CiAgICAgICAgICAgICAgIFFTdHJpbmcgbmFtZSA9IHAtPm5hbWUoKS5zdHJpbmcoKS5sb3dl
cigpOwogICAgICAgICAgICAgICBpZiAodXJsLmlzRW1wdHkoKSAmJiAobmFtZSA9PSAic3JjIiB8
fCBuYW1lID09ICJtb3ZpZSIgfHwgbmFtZSA9PSAiY29kZSIgfHwgbmFtZSA9PSAidXJsIikpIHsK
QEAgLTgxMCwxNCArODA5LDE0IEBAIHZvaWQgUmVuZGVyUGFydE9iamVjdDo6dXBkYXRlV2lkZ2V0
KCkKICAgICAgIC8vIEZpbmQgb3V0IGlmIHdlIHN1cHBvcnQgZmFsbGJhY2sgY29udGVudC4KICAg
ICAgIG1faGFzRmFsbGJhY2tDb250ZW50ID0gZmFsc2U7CiAgICAgICBmb3IgKE5vZGVJbXBsICpj
aGlsZCA9IG8tPmZpcnN0Q2hpbGQoKTsgY2hpbGQgJiYgIW1faGFzRmFsbGJhY2tDb250ZW50OyBj
aGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7Ci0gICAgICAgICAgaWYgKCghY2hpbGQtPmlz
VGV4dE5vZGUoKSAmJiBjaGlsZC0+aWQoKSAhPSBJRF9FTUJFRCAmJiBjaGlsZC0+aWQoKSAhPSBJ
RF9QQVJBTSkgfHwgLy8gRGlzY291bnQgPGVtYmVkPiBhbmQgPHBhcmFtPgorICAgICAgICAgIGlm
ICgoIWNoaWxkLT5pc1RleHROb2RlKCkgJiYgIWNoaWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
ZW1iZWQoKSkgJiYgIWNoaWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6cGFyYW0oKSkpIHx8IC8v
IERpc2NvdW50IDxlbWJlZD4gYW5kIDxwYXJhbT4KICAgICAgICAgICAgICAgKGNoaWxkLT5pc1Rl
eHROb2RlKCkgJiYgIWNoaWxkLT5jb250YWluc09ubHlXaGl0ZXNwYWNlKCkpKQogICAgICAgICAg
ICAgICBtX2hhc0ZhbGxiYWNrQ29udGVudCA9IHRydWU7CiAgICAgICB9CiAgICAgICBib29sIHN1
Y2Nlc3MgPSBwYXJ0LT5yZXF1ZXN0T2JqZWN0KCB0aGlzLCB1cmwsIHNlcnZpY2VUeXBlLCBwYXJh
bU5hbWVzLCBwYXJhbVZhbHVlcyApOwogICAgICAgaWYgKCFzdWNjZXNzICYmIG1faGFzRmFsbGJh
Y2tDb250ZW50KQogICAgICAgICAgIG8tPnJlbmRlckZhbGxiYWNrQ29udGVudCgpOwotICB9IGVs
c2UgaWYgKCBlbGVtZW50KCktPmlkKCkgPT0gSURfRU1CRUQgKSB7CisgIH0gZWxzZSBpZiAoZWxl
bWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZW1iZWQoKSkpIHsKIAogICAgICAgSFRNTEVt
YmVkRWxlbWVudEltcGwgKm8gPSBzdGF0aWNfY2FzdDxIVE1MRW1iZWRFbGVtZW50SW1wbCAqPihl
bGVtZW50KCkpOwogICAgICAgdXJsID0gby0+dXJsOwpAQCAtODQ0LDcgKzg0Myw3IEBAIHZvaWQg
UmVuZGVyUGFydE9iamVjdDo6dXBkYXRlV2lkZ2V0KCkKICAgICAgIH0KICAgICAgIHBhcnQtPnJl
cXVlc3RPYmplY3QoIHRoaXMsIHVybCwgc2VydmljZVR5cGUsIHBhcmFtTmFtZXMsIHBhcmFtVmFs
dWVzICk7CiAgIH0gZWxzZSB7Ci0gICAgICBhc3NlcnQoZWxlbWVudCgpLT5pZCgpID09IElEX0lG
UkFNRSk7CisgICAgICBhc3NlcnQoZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aWZy
YW1lKCkpKTsKICAgICAgIEhUTUxJRnJhbWVFbGVtZW50SW1wbCAqbyA9IHN0YXRpY19jYXN0PEhU
TUxJRnJhbWVFbGVtZW50SW1wbCAqPihlbGVtZW50KCkpOwogICAgICAgdXJsID0gby0+bV9VUkwu
c3RyaW5nKCk7CiAgICAgICBpZiAodXJsLmlzRW1wdHkoKSkgewpAQCAtODkwLDcgKzg4OSw3IEBA
IHZvaWQgUmVuZGVyUGFydE9iamVjdDo6c2xvdFZpZXdDbGVhcmVkKCkKICAgICAgIFFTY3JvbGxW
aWV3OjpTY3JvbGxCYXJNb2RlIHNjcm9sbCA9IFFTY3JvbGxWaWV3OjpBdXRvOwogICAgICAgaW50
IG1hcmdpbncgPSAtMTsKICAgICAgIGludCBtYXJnaW5oID0gLTE7Ci0gICAgICBpZiAoIGVsZW1l
bnQoKS0+aWQoKSA9PSBJRF9JRlJBTUUpIHsKKyAgICAgIGlmIChlbGVtZW50KCktPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjppZnJhbWUoKSkpIHsKIAkgIEhUTUxJRnJhbWVFbGVtZW50SW1wbCAqZnJh
bWUgPSBzdGF0aWNfY2FzdDxIVE1MSUZyYW1lRWxlbWVudEltcGwgKj4oZWxlbWVudCgpKTsKIAkg
IGlmKGZyYW1lLT5tX2ZyYW1lQm9yZGVyKQogCSAgICAgIGZyYW1lU3R5bGUgPSBRRnJhbWU6OkJv
eDsKQEAgLTkxMCw3ICs5MDksNyBAQCB2b2lkIFJlbmRlclBhcnRPYmplY3Q6OnNsb3RWaWV3Q2xl
YXJlZCgpCiAgICAgICAgICAga2REZWJ1Zyg2MDMxKSA8PCAiZnJhbWUgaXMgYSBLSFRNTHZpZXch
IiA8PCBlbmRsOwogI2VuZGlmCiAgICAgICAgICAgS0hUTUxWaWV3ICpodG1sVmlldyA9IHN0YXRp
Y19jYXN0PEtIVE1MVmlldyAqPih2aWV3KTsKLSAgICAgICAgICBodG1sVmlldy0+c2V0SWdub3Jl
V2hlZWxFdmVudHMoIGVsZW1lbnQoKS0+aWQoKSA9PSBJRF9JRlJBTUUgKTsKKyAgICAgICAgICBo
dG1sVmlldy0+c2V0SWdub3JlV2hlZWxFdmVudHMoZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6aWZyYW1lKCkpKTsKICAgICAgICAgICBpZihtYXJnaW53ICE9IC0xKSBodG1sVmlldy0+
c2V0TWFyZ2luV2lkdGgobWFyZ2ludyk7CiAgICAgICAgICAgaWYobWFyZ2luaCAhPSAtMSkgaHRt
bFZpZXctPnNldE1hcmdpbkhlaWdodChtYXJnaW5oKTsKICAgICAgICAgfQpJbmRleDoga2h0bWwv
cmVuZGVyaW5nL3JlbmRlcl9pbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L1dlYkNvcmUva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9pbWFnZS5jcHAsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuNzQKZGlmZiAtdSAtcCAtcjEuNzQga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9pbWFn
ZS5jcHAKLS0tIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfaW1hZ2UuY3BwCTI1IEZlYiAyMDA1IDAw
OjI1OjEyIC0wMDAwCTEuNzQKKysrIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfaW1hZ2UuY3BwCTIz
IEp1biAyMDA1IDAxOjExOjEyIC0wMDAwCkBAIC0zNiwxMCArMzYsOCBAQAogI2luY2x1ZGUgImNz
cy9jc3NoZWxwZXIuaCIKICNpbmNsdWRlICJtaXNjL2hlbHBlci5oIgogI2luY2x1ZGUgIm1pc2Mv
aHRtbGF0dHJzLmgiCi0jaW5jbHVkZSAibWlzYy9odG1sdGFncy5oIgogI2luY2x1ZGUgImh0bWwv
aHRtbF9mb3JtaW1wbC5oIgogI2luY2x1ZGUgImh0bWwvaHRtbF9pbWFnZWltcGwuaCIKLSNpbmNs
dWRlICJodG1sL2R0ZC5oIgogI2luY2x1ZGUgInhtbC9kb20yX2V2ZW50c2ltcGwuaCIKICNpbmNs
dWRlICJodG1sL2h0bWxfZG9jdW1lbnRpbXBsLmgiCiAjaW5jbHVkZSA8bWF0aC5oPgpAQCAtNDE4
LDcgKzQxNiw3IEBAIHZvaWQgUmVuZGVySW1hZ2U6OnBhaW50KFBhaW50SW5mbyYgaSwgaW4KIAog
CiAvLyAgICAgICAgICAgICBwLT5kcmF3UGl4bWFwKCBvZmZzLngoKSwgeSwgcGl4LCByZWN0Lngo
KSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSApOwotICAgICAgICAgICAg
IEhUTUxJbWFnZUVsZW1lbnRJbXBsKiBpID0gKGVsZW1lbnQoKSAmJiBlbGVtZW50KCktPmlkKCkg
PT0gSURfSU1HKSA/IHN0YXRpY19jYXN0PEhUTUxJbWFnZUVsZW1lbnRJbXBsKj4oZWxlbWVudCgp
KSA6IDA7CisgICAgICAgICAgICAgSFRNTEltYWdlRWxlbWVudEltcGwqIGkgPSAoZWxlbWVudCgp
ICYmIGVsZW1lbnQoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmltZygpKSkgPyBzdGF0aWNfY2Fz
dDxIVE1MSW1hZ2VFbGVtZW50SW1wbCo+KGVsZW1lbnQoKSkgOiAwOwogICAgICAgICAgICAgIGlm
IChpICYmICFpLT5jb21wb3NpdGVPcGVyYXRvcigpLmlzTnVsbCgpKXsKICAgICAgICAgICAgICAg
ICBwLT5kcmF3UGl4bWFwIChvZmZzLCBwaXgsIHJlY3QsIGktPmNvbXBvc2l0ZU9wZXJhdG9yKCkp
OwogICAgICAgICAgICAgIH0KQEAgLTQ4NSw3ICs0ODMsNyBAQCB2b2lkIFJlbmRlckltYWdlOjps
YXlvdXQoKQogCiBIVE1MTWFwRWxlbWVudEltcGwqIFJlbmRlckltYWdlOjppbWFnZU1hcCgpCiB7
Ci0gICAgSFRNTEltYWdlRWxlbWVudEltcGwqIGkgPSBlbGVtZW50KCktPmlkKCkgPT0gSURfSU1H
ID8gc3RhdGljX2Nhc3Q8SFRNTEltYWdlRWxlbWVudEltcGwqPihlbGVtZW50KCkpIDogMDsKKyAg
ICBIVE1MSW1hZ2VFbGVtZW50SW1wbCogaSA9IGVsZW1lbnQoKS0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OmltZygpKSA/IHN0YXRpY19jYXN0PEhUTUxJbWFnZUVsZW1lbnRJbXBsKj4oZWxlbWVudCgp
KSA6IDA7CiAgICAgcmV0dXJuIGkgPyBpLT5nZXREb2N1bWVudCgpLT5nZXRJbWFnZU1hcChpLT5p
bWFnZU1hcCgpKSA6IDA7CiB9CiAKQEAgLTUxMSw5ICs1MDksOSBAQCBib29sIFJlbmRlckltYWdl
Ojpub2RlQXRQb2ludChOb2RlSW5mbyYgCiAKIHZvaWQgUmVuZGVySW1hZ2U6OnVwZGF0ZUFsdFRl
eHQoKQogewotICAgIGlmIChlbGVtZW50KCktPmlkKCkgPT0gSURfSU5QVVQpCisgICAgaWYgKGVs
ZW1lbnQoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmlucHV0KCkpKQogICAgICAgICBhbHQgPSBz
dGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50SW1wbCo+KGVsZW1lbnQoKSktPmFsdFRleHQoKTsK
LSAgICBlbHNlIGlmIChlbGVtZW50KCktPmlkKCkgPT0gSURfSU1HKQorICAgIGVsc2UgaWYgKGVs
ZW1lbnQoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmltZygpKSkKICAgICAgICAgYWx0ID0gc3Rh
dGljX2Nhc3Q8SFRNTEltYWdlRWxlbWVudEltcGwqPihlbGVtZW50KCkpLT5hbHRUZXh0KCk7CiB9
CiAKSW5kZXg6IGtodG1sL3JlbmRlcmluZy9yZW5kZXJfbGlzdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9saXN0LmNwcCx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS42MApkaWZmIC11IC1wIC1yMS42MCBraHRtbC9yZW5kZXJp
bmcvcmVuZGVyX2xpc3QuY3BwCi0tLSBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2xpc3QuY3BwCTI1
IEZlYiAyMDA1IDAwOjI1OjEyIC0wMDAwCTEuNjAKKysrIGtodG1sL3JlbmRlcmluZy9yZW5kZXJf
bGlzdC5jcHAJMjMgSnVuIDIwMDUgMDE6MTE6MTIgLTAwMDAKQEAgLTI2LDcgKzI2LDggQEAKICNp
bmNsdWRlICJyZW5kZXJpbmcvcmVuZGVyX2NhbnZhcy5oIgogCiAjaW5jbHVkZSAieG1sL2RvbV9k
b2NpbXBsLmgiCi0jaW5jbHVkZSAibWlzYy9odG1sdGFncy5oIgorCisjaW5jbHVkZSAiaHRtbG5h
bWVzLmgiCiAKICNpbmNsdWRlIDxxcGFpbnRlci5oPgogCkBAIC0zNyw2ICszOCw3IEBACiAvLyNk
ZWZpbmUgQk9YX0RFQlVHCiAKIHVzaW5nIERPTTo6RG9jdW1lbnRJbXBsOwordXNpbmcgRE9NOjpI
VE1MTmFtZXM7CiB1c2luZyBuYW1lc3BhY2Uga2h0bWw7CiAKIGNvbnN0IGludCBjTWFya2VyUGFk
ZGluZyA9IDc7CkBAIC0yMTMsNyArMjE1LDcgQEAgc3RhdGljIFJlbmRlck9iamVjdCogZ2V0UGFy
ZW50T2ZGaXJzdExpbgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgICAgICBpZiAo
Y3VyckNoaWxkLT5zdHlsZSgpLT5odG1sSGFja3MoKSAmJiBjdXJyQ2hpbGQtPmVsZW1lbnQoKSAm
JgotICAgICAgICAgICAgKGN1cnJDaGlsZC0+ZWxlbWVudCgpLT5pZCgpID09IElEX1VMIHx8IGN1
cnJDaGlsZC0+ZWxlbWVudCgpLT5pZCgpID09IElEX09MKSkKKyAgICAgICAgICAgIChjdXJyQ2hp
bGQtPmVsZW1lbnQoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnVsKCkpfHwgY3VyckNoaWxkLT5l
bGVtZW50KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvbCgpKSkpCiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIAogICAgICAgICBSZW5kZXJPYmplY3QqIGxpbmVCb3ggPSBnZXRQYXJl
bnRPZkZpcnN0TGluZUJveChjdXJyQ2hpbGQsIG1hcmtlcik7CkluZGV4OiBraHRtbC9yZW5kZXJp
bmcvcmVuZGVyX29iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNv
cmUva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9vYmplY3QuY3BwLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjE5NApkaWZmIC11IC1wIC1yMS4xOTQga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9vYmplY3Qu
Y3BwCi0tLSBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX29iamVjdC5jcHAJMTEgTWF5IDIwMDUgMDI6
MTA6MTAgLTAwMDAJMS4xOTQKKysrIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfb2JqZWN0LmNwcAky
MyBKdW4gMjAwNSAwMToxMToxNCAtMDAwMApAQCAtNDMsNiArNDMsNyBAQAogI2luY2x1ZGUgInJl
bmRlcl9pbmxpbmUuaCIKICNpbmNsdWRlICJyZW5kZXJfYmxvY2suaCIKICNpbmNsdWRlICJyZW5k
ZXJfZmxleGJveC5oIgorI2luY2x1ZGUgImh0bWxuYW1lcy5oIgogCiAjaWYgQVBQTEVfQ0hBTkdF
UwogLy8gRm9yIGFjY2Vzc2liaWxpdHkKQEAgLTE3NSwxNyArMTc2LDE3IEBAIGJvb2wgUmVuZGVy
T2JqZWN0Ojppc1Jvb3QoKSBjb25zdAogCiBib29sIFJlbmRlck9iamVjdDo6aXNCb2R5KCkgY29u
c3QKIHsKLSAgICByZXR1cm4gZWxlbWVudCgpICYmIGVsZW1lbnQoKS0+cmVuZGVyZXIoKSA9PSB0
aGlzICYmIGVsZW1lbnQoKS0+aWQoKSA9PSBJRF9CT0RZOworICAgIHJldHVybiBlbGVtZW50KCkg
JiYgZWxlbWVudCgpLT5yZW5kZXJlcigpID09IHRoaXMgJiYgZWxlbWVudCgpLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6Ym9keSgpKTsKIH0KIAogYm9vbCBSZW5kZXJPYmplY3Q6OmlzSFIoKSBjb25z
dAogewotICAgIHJldHVybiBlbGVtZW50KCkgJiYgZWxlbWVudCgpLT5pZCgpID09IElEX0hSOwor
ICAgIHJldHVybiBlbGVtZW50KCkgJiYgZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
aHIoKSk7CiB9CiAKIGJvb2wgUmVuZGVyT2JqZWN0Ojppc0hUTUxNYXJxdWVlKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gZWxlbWVudCgpICYmIGVsZW1lbnQoKS0+cmVuZGVyZXIoKSA9PSB0aGlzICYm
IGVsZW1lbnQoKS0+aWQoKSA9PSBJRF9NQVJRVUVFOworICAgIHJldHVybiBlbGVtZW50KCkgJiYg
ZWxlbWVudCgpLT5yZW5kZXJlcigpID09IHRoaXMgJiYgZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6bWFycXVlZSgpKTsKIH0KIAogYm9vbCBSZW5kZXJPYmplY3Q6OmNhbkhhdmVDaGls
ZHJlbigpIGNvbnN0CkBAIC03MzcsNyArNzM4LDcgQEAgYm9vbCBSZW5kZXJPYmplY3Q6OnNpemVz
VG9NYXhXaWR0aCgpIGNvbgogICAgIC8vIGJ1dCB0aGV5IGFsbG93IHRleHQgdG8gc2l0IG9uIHRo
ZSBzYW1lIGxpbmUgYXMgdGhlIG1hcnF1ZWUuCiAgICAgaWYgKGlzRmxvYXRpbmcoKSB8fCAoaXND
b21wYWN0KCkgJiYgaXNJbmxpbmUoKSkgfHwgCiAgICAgICAgIChpc0lubGluZUJsb2NrT3JJbmxp
bmVUYWJsZSgpICYmICFpc0hUTUxNYXJxdWVlKCkpIHx8Ci0gICAgICAgIChlbGVtZW50KCkgJiYg
KGVsZW1lbnQoKS0+aWQoKSA9PSBJRF9CVVRUT04gfHwgZWxlbWVudCgpLT5pZCgpID09IElEX0xF
R0VORCkpKQorICAgICAgICAoZWxlbWVudCgpICYmIChlbGVtZW50KCktPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjpidXR0b24oKSkgfHwgZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6bGVn
ZW5kKCkpKSkpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIAogICAgIC8vIENoaWxkcmVuIG9m
IGEgaG9yaXpvbnRhbCBtYXJxdWVlIGRvIG5vdCBmaWxsIHRoZSBjb250YWluZXIgYnkgZGVmYXVs
dC4KQEAgLTEzMjYsNyArMTMyNyw3IEBAIFFTdHJpbmcgUmVuZGVyT2JqZWN0OjppbmZvcm1hdGlv
bigpIGNvbnMKICAgICBpZiAoZWxlbWVudCgpICYmIGVsZW1lbnQoKS0+YWN0aXZlKCkpIHRzIDw8
ICJhY3QgIjsKICAgICBpZiAoZWxlbWVudCgpICYmIGVsZW1lbnQoKS0+aXNMaW5rKCkpIHRzIDw8
ICJhbmNob3IgIjsKICAgICBpZiAoZWxlbWVudCgpICYmIGVsZW1lbnQoKS0+Zm9jdXNlZCgpKSB0
cyA8PCAiZm9jdXMgIjsKLSAgICBpZiAoZWxlbWVudCgpKSB0cyA8PCAiIDwiIDw8ICBnZXRUYWdO
YW1lKGVsZW1lbnQoKS0+aWQoKSkuc3RyaW5nKCkgPDwgIj4iOworICAgIGlmIChlbGVtZW50KCkp
IHRzIDw8ICIgPCIgPDwgIGVsZW1lbnQoKS0+bG9jYWxOYW1lKCkuc3RyaW5nKCkgPDwgIj4iOwog
ICAgIHRzIDw8ICIgKCIgPDwgeFBvcygpIDw8ICIsIiA8PCB5UG9zKCkgPDwgIiwiIDw8IHdpZHRo
KCkgPDwgIiwiIDw8IGhlaWdodCgpIDw8ICIpIgogCTw8IChpc1RhYmxlQ2VsbCgpID8KIAkgICAg
KCBRU3RyaW5nOjpmcm9tTGF0aW4xKCIgW3I9IikgKwpAQCAtMTU1MCw3ICsxNTUxLDcgQEAgdm9p
ZCBSZW5kZXJPYmplY3Q6OnNldFN0eWxlKFJlbmRlclN0eWxlIAogICAgICAgICAvLyBUaGUgYmFj
a2dyb3VuZCBvZiB0aGUgcm9vdCBlbGVtZW50IG9yIHRoZSBib2R5IGVsZW1lbnQgY291bGQgcHJv
cGFnYXRlIHVwIHRvCiAgICAgICAgIC8vIHRoZSBjYW52YXMuICBKdXN0IGRpcnR5IHRoZSBlbnRp
cmUgY2FudmFzIHdoZW4gb3VyIHN0eWxlIGNoYW5nZXMgc3Vic3RhbnRpYWxseS4KICAgICAgICAg
aWYgKGQgPj0gUmVuZGVyU3R5bGU6OlJlcGFpbnQgJiYgZWxlbWVudCgpICYmCi0gICAgICAgICAg
ICAoZWxlbWVudCgpLT5pZCgpID09IElEX0hUTUwgfHwgZWxlbWVudCgpLT5pZCgpID09IElEX0JP
RFkpKQorICAgICAgICAgICAgKGVsZW1lbnQoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omh0bWwo
KSkgfHwgZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Ym9keSgpKSkpCiAgICAgICAg
ICAgICBjYW52YXMoKS0+cmVwYWludCgpOwogICAgICAgICBlbHNlIGlmIChtX3BhcmVudCAmJiAh
aXNUZXh0KCkpIHsKICAgICAgICAgICAgIC8vIERvIGEgcmVwYWludCB3aXRoIHRoZSBvbGQgc3R5
bGUgZmlyc3QsIGUuZy4sIGZvciBleGFtcGxlIGlmIHdlIGdvIGZyb20KQEAgLTIxODIsNyArMjE4
Myw3IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpnZXRUZXh0RGVjb3JhdGlvbkNvbG8KICAgICAgICAg
aWYgKGN1cnIgJiYgY3Vyci0+aXNSZW5kZXJCbG9jaygpICYmIGN1cnItPmNvbnRpbnVhdGlvbigp
KQogICAgICAgICAgICAgY3VyciA9IGN1cnItPmNvbnRpbnVhdGlvbigpOwogICAgIH0gd2hpbGUg
KGN1cnIgJiYgZGVjb3JhdGlvbnMgJiYgKCFxdWlya3NNb2RlIHx8ICFjdXJyLT5lbGVtZW50KCkg
fHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY3Vyci0+ZWxlbWVudCgp
LT5pZCgpICE9IElEX0EgJiYgY3Vyci0+ZWxlbWVudCgpLT5pZCgpICE9IElEX0ZPTlQpKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCFjdXJyLT5lbGVtZW50KCktPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjphKCkpICYmICFjdXJyLT5lbGVtZW50KCktPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjpmb250KCkpKSkpOwogCiAgICAgLy8gSWYgd2UgYmFpbGVkIG91dCwgdXNlIHRo
ZSBlbGVtZW50IHdlIGJhaWxlZCBvdXQgYXQgKHR5cGljYWxseSBhIDxmb250PiBvciA8YT4gZWxl
bWVudCkuCiAgICAgaWYgKGRlY29yYXRpb25zICYmIGN1cnIpIHsKQEAgLTIzMTYsNyArMjMxNyw3
IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpzZXRQaXhtYXAoY29uc3QgUVBpeG0KICAgICAvLyB3b3Vs
ZCBhdm9pZCBwdXR0aW5nIHRoaXMgZnVuY3Rpb24gYW5kIHRoZSBDYWNoZWRPYmplY3RDbGllbnQg
YmFzZSBjbGFzcyBpbnRvIFJlbmRlck9iamVjdC4KIAogICAgIGlmIChpbWFnZSAmJiBpbWFnZS0+
cGl4bWFwX3NpemUoKSA9PSBpbWFnZS0+dmFsaWRfcmVjdCgpLnNpemUoKSAmJiBwYXJlbnQoKSkg
ewotICAgICAgICBpZiAoY2FudmFzKCkgJiYgZWxlbWVudCgpICYmIChlbGVtZW50KCktPmlkKCkg
PT0gSURfSFRNTCB8fCBlbGVtZW50KCktPmlkKCkgPT0gSURfQk9EWSkpCisgICAgICAgIGlmIChj
YW52YXMoKSAmJiBlbGVtZW50KCkgJiYgKGVsZW1lbnQoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
Omh0bWwoKSkgfHwgZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Ym9keSgpKSkpCiAg
ICAgICAgICAgICBjYW52YXMoKS0+cmVwYWludCgpOyAgICAvLyByZXBhaW50IHRoZSBlbnRpcmUg
Y2FudmFzIHNpbmNlIHRoZSBiYWNrZ3JvdW5kIGdldHMgcHJvcGFnYXRlZCB1cAogICAgICAgICBl
bHNlCiAgICAgICAgICAgICByZXBhaW50KCk7ICAgICAgICAgICAgICAvLyByZXBhaW50IG9iamVj
dCwgd2hpY2ggaXMgYSBib3ggb3IgYSBjb250YWluZXIgd2l0aCBib3hlcyBpbnNpZGUgaXQKSW5k
ZXg6IGtodG1sL3JlbmRlcmluZy9yZW5kZXJfdGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3JlbmRlcmluZy9yZW5kZXJfdGFibGUuY3BwLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjEyNgpkaWZmIC11IC1wIC1yMS4xMjYga2h0bWwvcmVuZGVyaW5n
L3JlbmRlcl90YWJsZS5jcHAKLS0tIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfdGFibGUuY3BwCTEx
IE1heSAyMDA1IDAyOjEwOjEwIC0wMDAwCTEuMTI2CisrKyBraHRtbC9yZW5kZXJpbmcvcmVuZGVy
X3RhYmxlLmNwcAkyMyBKdW4gMjAwNSAwMToxMToxNiAtMDAwMApAQCAtMzEsOCArMzEsOCBAQAog
I2luY2x1ZGUgInJlbmRlcmluZy9yZW5kZXJfdGFibGUuaCIKICNpbmNsdWRlICJyZW5kZXJpbmcv
dGFibGVfbGF5b3V0LmgiCiAjaW5jbHVkZSAiaHRtbC9odG1sX3RhYmxlaW1wbC5oIgotI2luY2x1
ZGUgIm1pc2MvaHRtbHRhZ3MuaCIKICNpbmNsdWRlICJtaXNjL2h0bWxhdHRycy5oIgorI2luY2x1
ZGUgImh0bWxuYW1lcy5oIgogI2luY2x1ZGUgInhtbC9kb21fZG9jaW1wbC5oIgogCiAjaW5jbHVk
ZSA8a2dsb2JhbC5oPgpAQCAtMTEyLDcgKzExMiw3IEBAIHZvaWQgUmVuZGVyVGFibGU6OmFkZENo
aWxkKFJlbmRlck9iamVjdCAKICNlbmRpZgogICAgIFJlbmRlck9iamVjdCAqbyA9IGNoaWxkOwog
Ci0gICAgaWYgKGNoaWxkLT5lbGVtZW50KCkgJiYgY2hpbGQtPmVsZW1lbnQoKS0+aWQoKSA9PSBJ
RF9GT1JNKSB7CisgICAgaWYgKGNoaWxkLT5lbGVtZW50KCkgJiYgY2hpbGQtPmVsZW1lbnQoKS0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZvcm0oKSkpIHsKICAgICAgICAgUmVuZGVyQ29udGFpbmVy
OjphZGRDaGlsZChjaGlsZCxiZWZvcmVDaGlsZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBA
IC0yNjIsNyArMjYyLDcgQEAgdm9pZCBSZW5kZXJUYWJsZTo6bGF5b3V0KCkKIAogICAgIFJlbmRl
ck9iamVjdCAqY2hpbGQgPSBmaXJzdENoaWxkKCk7CiAgICAgd2hpbGUoIGNoaWxkICkgewotCWlm
ICggY2hpbGQtPm5lZWRzTGF5b3V0KCkgJiYgIShjaGlsZC0+ZWxlbWVudCgpICYmIGNoaWxkLT5l
bGVtZW50KCktPmlkKCkgPT0gSURfRk9STSkpCisJaWYgKCBjaGlsZC0+bmVlZHNMYXlvdXQoKSAm
JiAhKGNoaWxkLT5lbGVtZW50KCkgJiYgY2hpbGQtPmVsZW1lbnQoKS0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OmZvcm0oKSkpKQogCSAgICBjaGlsZC0+bGF5b3V0KCk7CiAJaWYgKCBjaGlsZC0+aXNU
YWJsZVNlY3Rpb24oKSApIHsKIAkgICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGFibGVTZWN0aW9uICo+
KGNoaWxkKS0+Y2FsY1Jvd0hlaWdodCgpOwpAQCAtODQ5LDcgKzg0OSw3IEBAIHZvaWQgUmVuZGVy
VGFibGVTZWN0aW9uOjphZGRDaGlsZChSZW5kZXIKICNlbmRpZgogICAgIFJlbmRlck9iamVjdCAq
cm93ID0gY2hpbGQ7CiAKLSAgICBpZiAoY2hpbGQtPmVsZW1lbnQoKSAmJiBjaGlsZC0+ZWxlbWVu
dCgpLT5pZCgpID09IElEX0ZPUk0pIHsKKyAgICBpZiAoY2hpbGQtPmVsZW1lbnQoKSAmJiBjaGls
ZC0+ZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Zm9ybSgpKSkgewogICAgICAgICBS
ZW5kZXJDb250YWluZXI6OmFkZENoaWxkKGNoaWxkLGJlZm9yZUNoaWxkKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KQEAgLTE0OTUsNyArMTQ5NSw3IEBAIHZvaWQgUmVuZGVyVGFibGVSb3c6OmFk
ZENoaWxkKFJlbmRlck9iamUKICAgICBrZERlYnVnKCA2MDQwICkgPDwgcmVuZGVyTmFtZSgpIDw8
ICIoVGFibGVSb3cpOjphZGRDaGlsZCggIiA8PCBjaGlsZC0+cmVuZGVyTmFtZSgpIDw8ICIgKSIg
IDw8ICIsICIgPDwKICAgICAgICAgICAgICAgICAgICAgICAgKGJlZm9yZUNoaWxkID8gYmVmb3Jl
Q2hpbGQtPnJlbmRlck5hbWUoKSA6ICIwIikgPDwgIiApIiA8PCBlbmRsOwogI2VuZGlmCi0gICAg
aWYgKGNoaWxkLT5lbGVtZW50KCkgJiYgY2hpbGQtPmVsZW1lbnQoKS0+aWQoKSA9PSBJRF9GT1JN
KSB7CisgICAgaWYgKGNoaWxkLT5lbGVtZW50KCkgJiYgY2hpbGQtPmVsZW1lbnQoKS0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OmZvcm0oKSkpIHsKICAgICAgICAgUmVuZGVyQ29udGFpbmVyOjphZGRD
aGlsZChjaGlsZCxiZWZvcmVDaGlsZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xNjA2
LDcgKzE2MDYsNyBAQCB2b2lkIFJlbmRlclRhYmxlQ2VsbDo6dXBkYXRlRnJvbUVsZW1lbnQoCiAg
ICAgaW50IG9sZFJTcGFuID0gclNwYW47CiAgICAgaW50IG9sZENTcGFuID0gY1NwYW47CiAgICAg
RE9NOjpOb2RlSW1wbCogbm9kZSA9IGVsZW1lbnQoKTsKLSAgICBpZiAobm9kZSAmJiAobm9kZS0+
aWQoKSA9PSBJRF9URCB8fCBub2RlLT5pZCgpID09IElEX1RIKSkgeworICAgIGlmIChub2RlICYm
IChub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGQoKSkgfHwgbm9kZS0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OnRoKCkpKSkgewogICAgICAgICBET006OkhUTUxUYWJsZUNlbGxFbGVtZW50SW1w
bCAqdGMgPSBzdGF0aWNfY2FzdDxET006OkhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbCAqPihub2Rl
KTsKICAgICAgICAgY1NwYW4gPSB0Yy0+Y29sU3BhbigpOwogICAgICAgICByU3BhbiA9IHRjLT5y
b3dTcGFuKCk7CkBAIC0yMjkwLDcgKzIyOTAsNyBAQCB2b2lkIFJlbmRlclRhYmxlQ29sOjp1cGRh
dGVGcm9tRWxlbWVudCgpCiB7CiAgICAgaW50IG9sZFNwYW4gPSBfc3BhbjsKICAgICBET006Ok5v
ZGVJbXBsICpub2RlID0gZWxlbWVudCgpOwotICAgIGlmIChub2RlICYmIChub2RlLT5pZCgpID09
IElEX0NPTCB8fCBub2RlLT5pZCgpID09IElEX0NPTEdST1VQKSkgeworICAgIGlmIChub2RlICYm
IChub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Y29sKCkpIHx8IG5vZGUtPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjpjb2xncm91cCgpKSkpIHsKICAgICAgICAgRE9NOjpIVE1MVGFibGVDb2xFbGVt
ZW50SW1wbCAqdGMgPSBzdGF0aWNfY2FzdDxET006OkhUTUxUYWJsZUNvbEVsZW1lbnRJbXBsICo+
KG5vZGUpOwogICAgICAgICBfc3BhbiA9IHRjLT5zcGFuKCk7CiAgICAgfSAKSW5kZXg6IGtodG1s
L3htbC9kb21fYXRvbWljc3RyaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3Qv
V2ViQ29yZS9raHRtbC94bWwvZG9tX2F0b21pY3N0cmluZy5jcHAsdgpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuMwpkaWZmIC11IC1wIC1yMS4zIGtodG1sL3htbC9kb21fYXRvbWljc3RyaW5nLmNwcAot
LS0ga2h0bWwveG1sL2RvbV9hdG9taWNzdHJpbmcuY3BwCTUgRmViIDIwMDQgMDE6NDU6MTYgLTAw
MDAJMS4zCisrKyBraHRtbC94bWwvZG9tX2F0b21pY3N0cmluZy5jcHAJMjMgSnVuIDIwMDUgMDE6
MTE6MTYgLTAwMDAKQEAgLTMwNCw2ICszMDQsOSBAQCB2b2lkIEF0b21pY1N0cmluZzo6cmVoYXNo
KGludCBuZXdUYWJsZVNpCiAKICAgICBleHRlcm4gY29uc3QgQXRvbWljU3RyaW5nIG51bGxBdG9t
OwogICAgIGV4dGVybiBjb25zdCBBdG9taWNTdHJpbmcgZW1wdHlBdG9tOworICAgIGV4dGVybiBj
b25zdCBBdG9taWNTdHJpbmcgdGV4dEF0b207CisgICAgZXh0ZXJuIGNvbnN0IEF0b21pY1N0cmlu
ZyBjb21tZW50QXRvbTsKKyAgICBleHRlcm4gY29uc3QgQXRvbWljU3RyaW5nIHN0YXJBdG9tOwog
I2Vsc2UKICAgICAvLyBEZWZpbmUgYW4gQXRvbWljU3RyaW5nLXNpemVkIGFycmF5IG9mIHBvaW50
ZXJzIHRvIGF2b2lkIHN0YXRpYyBpbml0aWFsaXphdGlvbi4KICAgICAvLyBVc2UgYW4gYXJyYXkg
b2YgcG9pbnRlcnMgaW5zdGVhZCBvZiBhbiBhcnJheSBvZiBjaGFyIGluIGNhc2UgdGhlcmUgaXMg
c29tZSBhbGlnbm1lbnQgaXNzdWUuCkBAIC0zMTIsNiArMzE1LDkgQEAgdm9pZCBBdG9taWNTdHJp
bmc6OnJlaGFzaChpbnQgbmV3VGFibGVTaQogCiAgICAgREVGSU5FX0dMT0JBTChudWxsLCBpZ25v
cmVkKQogICAgIERFRklORV9HTE9CQUwoZW1wdHksIGlnbm9yZWQpCisgICAgREVGSU5FX0dMT0JB
TCh0ZXh0LCBpZ25vcmVkKQorICAgIERFRklORV9HTE9CQUwoY29tbWVudCwgaWdub3JlZCkKKyAg
ICBERUZJTkVfR0xPQkFMKHN0YXIsIGlnbm9yZWQpCiAjZW5kaWYKIAogI2RlZmluZSBDQUxMX0RF
RklORV9HTE9CQUwobmFtZSkgREVGSU5FX0dMT0JBTChuYW1lLCAjbmFtZSkKQEAgLTMyNSw3ICsz
MzEsMTAgQEAgdm9pZCBBdG9taWNTdHJpbmc6OmluaXQoKQogICAgICAgICAvLyBVc2UgcGxhY2Vt
ZW50IG5ldyB0byBpbml0aWFsaXplIHRoZSBnbG9iYWxzLgogICAgICAgICBuZXcgKCZudWxsQXRv
bSkgQXRvbWljU3RyaW5nOwogICAgICAgICBuZXcgKCZlbXB0eUF0b20pIEF0b21pY1N0cmluZygi
Iik7Ci0gICAgICAgIAorICAgICAgICBuZXcgKCZ0ZXh0QXRvbSkgQXRvbWljU3RyaW5nKCIjdGV4
dCIpOworICAgICAgICBuZXcgKCZjb21tZW50QXRvbSkgQXRvbWljU3RyaW5nKCIjY29tbWVudCIp
OworICAgICAgICBuZXcgKCZzdGFyQXRvbSkgQXRvbWljU3RyaW5nKCIqIik7CisKICAgICAgICAg
I2RlZmluZSBQTEFDRU1FTlRfTkVXX0dMT0JBTChuYW1lLCBzdHJpbmcpIG5ldyAoJm5hbWUgIyMg
UHJvcGVydHlOYW1lKSBBdG9taWNTdHJpbmcoc3RyaW5nKTsKICAgICAgICAgI2RlZmluZSBDQUxM
X1BMQUNFTUVOVF9ORVdfR0xPQkFMKG5hbWUpIFBMQUNFTUVOVF9ORVdfR0xPQkFMKG5hbWUsICNu
YW1lKQogICAgICAgICBLSFRNTF9BVE9NSUNTVFJJTkdfRUFDSF9HTE9CQUwoQ0FMTF9QTEFDRU1F
TlRfTkVXX0dMT0JBTCkKSW5kZXg6IGtodG1sL3htbC9kb21fYXRvbWljc3RyaW5nLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwveG1sL2RvbV9hdG9taWNzdHJp
bmcuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zCmRpZmYgLXUgLXAgLXIxLjMga2h0bWwveG1s
L2RvbV9hdG9taWNzdHJpbmcuaAotLS0ga2h0bWwveG1sL2RvbV9hdG9taWNzdHJpbmcuaAkyMSBK
dW4gMjAwNSAyMjoyNzo1NSAtMDAwMAkxLjMKKysrIGtodG1sL3htbC9kb21fYXRvbWljc3RyaW5n
LmgJMjMgSnVuIDIwMDUgMDE6MTE6MTcgLTAwMDAKQEAgLTExNiw2ICsxMTYsOSBAQCBpbmxpbmUg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IEF0b21pY1N0cmluCiAjaWYgIUtIVE1MX0FUT01JQ1NUUklO
R19ISURFX0dMT0JBTFMKICAgICBleHRlcm4gY29uc3QgQXRvbWljU3RyaW5nIG51bGxBdG9tOwog
ICAgIGV4dGVybiBjb25zdCBBdG9taWNTdHJpbmcgZW1wdHlBdG9tOworICAgIGV4dGVybiBjb25z
dCBBdG9taWNTdHJpbmcgdGV4dEF0b207CisgICAgZXh0ZXJuIGNvbnN0IEF0b21pY1N0cmluZyBj
b21tZW50QXRvbTsKKyAgICBleHRlcm4gY29uc3QgQXRvbWljU3RyaW5nIHN0YXJBdG9tOwogI2Rl
ZmluZSBLSFRNTF9BVE9NSUNTVFJJTkdfREVDTEFSRV9HTE9CQUwobmFtZSkgZXh0ZXJuIGNvbnN0
IEF0b21pY1N0cmluZyBuYW1lICMjIFByb3BlcnR5TmFtZTsKICAgICBLSFRNTF9BVE9NSUNTVFJJ
TkdfRUFDSF9HTE9CQUwoS0hUTUxfQVRPTUlDU1RSSU5HX0RFQ0xBUkVfR0xPQkFMKQogICAgIEtI
VE1MX0FUT01JQ1NUUklOR19ERUNMQVJFX0dMT0JBTChzcGVjaWFsUHJvdG90eXBlKQpJbmRleDog
a2h0bWwveG1sL2RvbV9kb2NpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3Qv
V2ViQ29yZS9raHRtbC94bWwvZG9tX2RvY2ltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjIzMApkaWZmIC11IC1wIC1yMS4yMzAga2h0bWwveG1sL2RvbV9kb2NpbXBsLmNwcAotLS0ga2h0
bWwveG1sL2RvbV9kb2NpbXBsLmNwcAkyMiBKdW4gMjAwNSAxODoyMjowMiAtMDAwMAkxLjIzMAor
Kysga2h0bWwveG1sL2RvbV9kb2NpbXBsLmNwcAkyMyBKdW4gMjAwNSAwMToxMToxOSAtMDAwMApA
QCAtMzQsOCArMzQsNiBAQAogI2luY2x1ZGUgInhtbC9kb20yX3ZpZXdzaW1wbC5oIgogI2luY2x1
ZGUgInhtbC94bWxfdG9rZW5pemVyLmgiCiAKLSNpbmNsdWRlICJ4bWxfbmFtZXNwYWNlX3RhYmxl
LmgiCi0KICNpbmNsdWRlICJjc3MvY3NzaGVscGVyLmgiCiAjaW5jbHVkZSAiY3NzL2Nzc3N0eWxl
c2VsZWN0b3IuaCIKICNpbmNsdWRlICJjc3MvY3NzX3N0eWxlc2hlZXRpbXBsLmgiCkBAIC02NSwx
NyArNjMsMTAgQEAKICNpbmNsdWRlICJraHRtbF9zZXR0aW5ncy5oIgogI2luY2x1ZGUgImtodG1s
cGFydF9wLmgiCiAKLSNpbmNsdWRlICJodG1sL2h0bWxfYmFzZWltcGwuaCIKLSNpbmNsdWRlICJo
dG1sL2h0bWxfYmxvY2tpbXBsLmgiCi0jaW5jbHVkZSAiaHRtbC9odG1sX2NhbnZhc2ltcGwuaCIK
Ky8vIEZJWE1FOiBXZSB3YW50IHRvIGN1dCB0aGUgcmVtYWluaW5nIEhUTUwgZGVwZW5kZW5jaWVz
IHNvIHRoYXQgd2UgZG9uJ3QgbmVlZCB0byBpbmNsdWRlIHRoZXNlIGZpbGVzLgogI2luY2x1ZGUg
Imh0bWwvaHRtbF9kb2N1bWVudGltcGwuaCIKLSNpbmNsdWRlICJodG1sL2h0bWxfZm9ybWltcGwu
aCIKICNpbmNsdWRlICJodG1sL2h0bWxfaGVhZGltcGwuaCIKICNpbmNsdWRlICJodG1sL2h0bWxf
aW1hZ2VpbXBsLmgiCi0jaW5jbHVkZSAiaHRtbC9odG1sX2xpc3RpbXBsLmgiCi0jaW5jbHVkZSAi
aHRtbC9odG1sX21pc2NpbXBsLmgiCi0jaW5jbHVkZSAiaHRtbC9odG1sX3RhYmxlaW1wbC5oIgot
I2luY2x1ZGUgImh0bWwvaHRtbF9vYmplY3RpbXBsLmgiCiAKICNpbmNsdWRlICJjc3N2YWx1ZXMu
aCIKIApAQCAtNTA2LDcgKzQ5Nyw5IEBAIEVsZW1lbnRJbXBsICpEb2N1bWVudEltcGw6OmRvY3Vt
ZW50RWxlbWUKIAogRWxlbWVudEltcGwgKkRvY3VtZW50SW1wbDo6Y3JlYXRlRWxlbWVudCggY29u
c3QgRE9NU3RyaW5nICZuYW1lLCBpbnQgJmV4Y2VwdGlvbmNvZGUgKQogewotICAgIHJldHVybiBu
ZXcgWE1MRWxlbWVudEltcGwoIGRvY3VtZW50LCBuYW1lLmltcGxlbWVudGF0aW9uKCkgKTsKKyAg
ICAvKiBGSVhNRTogTmVlZCB0byByZS1pbXBsZW1lbnQKKyAgICByZXR1cm4gbmV3IFhNTEVsZW1l
bnRJbXBsKCBkb2N1bWVudCwgbmFtZS5pbXBsZW1lbnRhdGlvbigpICk7ICovCisgICAgcmV0dXJu
IDA7CiB9CiAKIERvY3VtZW50RnJhZ21lbnRJbXBsICpEb2N1bWVudEltcGw6OmNyZWF0ZURvY3Vt
ZW50RnJhZ21lbnQoICApCkBAIC01NzQsOSArNTY3LDggQEAgTm9kZUltcGwgKkRvY3VtZW50SW1w
bDo6aW1wb3J0Tm9kZShOb2RlSQogICAgICAgICBjYXNlIE5vZGU6OkVMRU1FTlRfTk9ERTogewog
ICAgICAgICAgICAgRWxlbWVudEltcGwgKm9sZEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50
SW1wbCAqPihpbXBvcnRlZE5vZGUpOwogICAgICAgICAgICAgRG9jdW1lbnRJbXBsICpvbGREb2Mg
PSBvbGRFbGVtZW50LT5nZXREb2N1bWVudCgpOwotICAgICAgICAgICAgc3RhdGljIERPTVN0cmlu
ZyBIVE1MTmFtZXNwYWNlKFhIVE1MX05BTUVTUEFDRSk7Ci0gICAgICAgICAgICBET01TdHJpbmcg
ZWxlbWVudE5hbWVzcGFjZSA9IG9sZEVsZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSA/IEhUTUxOYW1l
c3BhY2UgOiBvbGRFbGVtZW50LT5uYW1lc3BhY2VVUkkoKTsKLSAgICAgICAgICAgIEVsZW1lbnRJ
bXBsICpuZXdFbGVtZW50ID0gY3JlYXRlRWxlbWVudE5TKGVsZW1lbnROYW1lc3BhY2UuaW1wbGVt
ZW50YXRpb24oKSwgb2xkRWxlbWVudC0+dGFnTmFtZSgpLCBleGNlcHRpb25jb2RlKTsKKyAgICAg
ICAgICAgIC8vIEZJWE1FOiBQcmVmaXggaXMgbG9zdC4gIElzIHRoYXQgcmlnaHQ/CisgICAgICAg
ICAgICBFbGVtZW50SW1wbCAqbmV3RWxlbWVudCA9IGNyZWF0ZUVsZW1lbnROUyhvbGRFbGVtZW50
LT5uYW1lc3BhY2VVUkkoKSwgb2xkRWxlbWVudC0+bG9jYWxOYW1lKCksIGV4Y2VwdGlvbmNvZGUp
OwogICAgICAgICAgICAgaWYgKGV4Y2VwdGlvbmNvZGUgIT0gMCkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gMDsKIApAQCAtNjM2LDExICs2MjgsMTMgQEAgTm9kZUltcGwgKkRvY3VtZW50SW1wbDo6
aW1wb3J0Tm9kZShOb2RlSQogCiBFbGVtZW50SW1wbCAqRG9jdW1lbnRJbXBsOjpjcmVhdGVFbGVt
ZW50TlMoIGNvbnN0IERPTVN0cmluZyAmX25hbWVzcGFjZVVSSSwgY29uc3QgRE9NU3RyaW5nICZf
cXVhbGlmaWVkTmFtZSwgaW50ICZleGNlcHRpb25jb2RlKQogeworICAgIC8qIEZJWE1FOiBSZS1p
bXBsZW1lbnQgdGhpcyB0byB1c2UgZ2VuZXJpYyBlbGVtZW50IHN0dWZmIGV2ZW50dWFsbHkuCiAg
ICAgRWxlbWVudEltcGwgKmUgPSAwOwogICAgIFFTdHJpbmcgcU5hbWUgPSBfcXVhbGlmaWVkTmFt
ZS5zdHJpbmcoKTsKICAgICBpbnQgY29sb25Qb3MgPSBxTmFtZS5maW5kKCc6JywwKTsKIAogICAg
IGlmIChfbmFtZXNwYWNlVVJJID09IFhIVE1MX05BTUVTUEFDRSkgeworICAgICAgICAgICAgCiAg
ICAgICAgIC8vIFVzZXIgcmVxdWVzdGVkIGFuIGVsZW1lbnQgaW4gdGhlIFhIVE1MIG5hbWVzcGFj
ZSAtIHRoaXMgbWVhbnMgd2UgY3JlYXRlIGEgc3BlY2lmaWMgZWxlbWVudAogICAgICAgICAvLyAo
ZWxlbWVudHMgbm90IGluIHRoaXMgbmFtZXNwYWNlIGFyZSB0cmVhdGVkIGFzIG5vcm1hbCBYTUwg
ZWxlbWVudHMpCiAgICAgICAgIGUgPSBjcmVhdGVIVE1MRWxlbWVudChxTmFtZS5taWQoY29sb25Q
b3MrMSksIGV4Y2VwdGlvbmNvZGUpOwpAQCAtNjU4LDcgKzY1Miw4IEBAIEVsZW1lbnRJbXBsICpE
b2N1bWVudEltcGw6OmNyZWF0ZUVsZW1lbnQKICAgICBpZiAoIWUpCiAgICAgICAgIGUgPSBuZXcg
WE1MRWxlbWVudEltcGwoIGRvY3VtZW50LCBfcXVhbGlmaWVkTmFtZS5pbXBsZW1lbnRhdGlvbigp
LCBfbmFtZXNwYWNlVVJJLmltcGxlbWVudGF0aW9uKCkgKTsKIAotICAgIHJldHVybiBlOworICAg
IHJldHVybiBlOyovCisgICAgcmV0dXJuIDA7CiB9CiAKIEVsZW1lbnRJbXBsICpEb2N1bWVudElt
cGw6OmdldEVsZW1lbnRCeUlkKCBjb25zdCBET01TdHJpbmcgJmVsZW1lbnRJZCApIGNvbnN0CkBA
IC04MTEsMjIwICs4MDYsNiBAQCB1bnNpZ25lZCBzaG9ydCBEb2N1bWVudEltcGw6Om5vZGVUeXBl
KCkgCiAgICAgcmV0dXJuIE5vZGU6OkRPQ1VNRU5UX05PREU7CiB9CiAKLUVsZW1lbnRJbXBsICpE
b2N1bWVudEltcGw6OmNyZWF0ZUhUTUxFbGVtZW50KCBjb25zdCBET01TdHJpbmcgJm5hbWUsIGlu
dCAmZXhjZXB0aW9uY29kZSApCi17Ci0gICAgaWYgKCFpc1ZhbGlkTmFtZShuYW1lKSkgewotICAg
ICAgICBleGNlcHRpb25jb2RlID0gRE9NRXhjZXB0aW9uOjpJTlZBTElEX0NIQVJBQ1RFUl9FUlI7
Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICByZXR1cm4gY3JlYXRlSFRNTEVsZW1lbnQo
dGFnSWQoMCwgbmFtZS5pbXBsZW1lbnRhdGlvbigpLCBmYWxzZSkpOwotfQotCi1FbGVtZW50SW1w
bCAqRG9jdW1lbnRJbXBsOjpjcmVhdGVIVE1MRWxlbWVudCh1bnNpZ25lZCBzaG9ydCB0YWdJRCkK
LXsKLSAgICBzd2l0Y2ggKHRhZ0lEKQotICAgIHsKLSAgICBjYXNlIElEX0hUTUw6Ci0gICAgICAg
IHJldHVybiBuZXcgSFRNTEh0bWxFbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0gICAgY2FzZSBJRF9I
RUFEOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxIZWFkRWxlbWVudEltcGwoZG9jUHRyKCkpOwot
ICAgIGNhc2UgSURfQk9EWToKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MQm9keUVsZW1lbnRJbXBs
KGRvY1B0cigpKTsKLQotLy8gaGVhZCBlbGVtZW50cwotICAgIGNhc2UgSURfQkFTRToKLSAgICAg
ICAgcmV0dXJuIG5ldyBIVE1MQmFzZUVsZW1lbnRJbXBsKGRvY1B0cigpKTsKLSAgICBjYXNlIElE
X0xJTks6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTExpbmtFbGVtZW50SW1wbChkb2NQdHIoKSk7
Ci0gICAgY2FzZSBJRF9NRVRBOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxNZXRhRWxlbWVudElt
cGwoZG9jUHRyKCkpOwotICAgIGNhc2UgSURfU1RZTEU6Ci0gICAgICAgIHJldHVybiBuZXcgSFRN
TFN0eWxlRWxlbWVudEltcGwoZG9jUHRyKCkpOwotICAgIGNhc2UgSURfVElUTEU6Ci0gICAgICAg
IHJldHVybiBuZXcgSFRNTFRpdGxlRWxlbWVudEltcGwoZG9jUHRyKCkpOwotCi0vLyBmcmFtZXMK
LSAgICBjYXNlIElEX0ZSQU1FOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxGcmFtZUVsZW1lbnRJ
bXBsKGRvY1B0cigpKTsKLSAgICBjYXNlIElEX0ZSQU1FU0VUOgotICAgICAgICByZXR1cm4gbmV3
IEhUTUxGcmFtZVNldEVsZW1lbnRJbXBsKGRvY1B0cigpKTsKLSAgICBjYXNlIElEX0lGUkFNRToK
LSAgICAgICAgcmV0dXJuIG5ldyBIVE1MSUZyYW1lRWxlbWVudEltcGwoZG9jUHRyKCkpOwotCi0v
LyBmb3JtIGVsZW1lbnRzCi0vLyAjIyMgRklYTUU6IHdlIG5lZWQgYSB3YXkgdG8gc2V0IGZvcm0g
ZGVwZW5kZW5jeSBhZnRlciB3ZSBoYXZlIG1hZGUgdGhlIGZvcm0gZWxlbWVudHMKLSAgICBjYXNl
IElEX0ZPUk06Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTEZvcm1FbGVtZW50SW1wbChkb2NQdHIo
KSk7Ci0gICAgY2FzZSBJRF9CVVRUT046Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTEJ1dHRvbkVs
ZW1lbnRJbXBsKGRvY1B0cigpKTsKLSAgICBjYXNlIElEX0ZJRUxEU0VUOgotICAgICAgICByZXR1
cm4gbmV3IEhUTUxGaWVsZFNldEVsZW1lbnRJbXBsKGRvY1B0cigpKTsKLSAgICBjYXNlIElEX0lO
UFVUOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxJbnB1dEVsZW1lbnRJbXBsKGRvY1B0cigpKTsK
LSAgICBjYXNlIElEX0lTSU5ERVg6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTElzSW5kZXhFbGVt
ZW50SW1wbChkb2NQdHIoKSk7Ci0gICAgY2FzZSBJRF9MQUJFTDoKLSAgICAgICAgcmV0dXJuIG5l
dyBIVE1MTGFiZWxFbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0gICAgY2FzZSBJRF9MRUdFTkQ6Ci0g
ICAgICAgIHJldHVybiBuZXcgSFRNTExlZ2VuZEVsZW1lbnRJbXBsKGRvY1B0cigpKTsKLSAgICBj
YXNlIElEX09QVEdST1VQOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxPcHRHcm91cEVsZW1lbnRJ
bXBsKGRvY1B0cigpKTsKLSAgICBjYXNlIElEX09QVElPTjoKLSAgICAgICAgcmV0dXJuIG5ldyBI
VE1MT3B0aW9uRWxlbWVudEltcGwoZG9jUHRyKCkpOwotICAgIGNhc2UgSURfU0VMRUNUOgotICAg
ICAgICByZXR1cm4gbmV3IEhUTUxTZWxlY3RFbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0gICAgY2Fz
ZSBJRF9URVhUQVJFQToKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MVGV4dEFyZWFFbGVtZW50SW1w
bChkb2NQdHIoKSk7Ci0KLS8vIGxpc3RzCi0gICAgY2FzZSBJRF9ETDoKLSAgICAgICAgcmV0dXJu
IG5ldyBIVE1MRExpc3RFbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0gICAgY2FzZSBJRF9ERDoKLSAg
ICAgICAgcmV0dXJuIG5ldyBIVE1MR2VuZXJpY0VsZW1lbnRJbXBsKGRvY1B0cigpLCB0YWdJRCk7
Ci0gICAgY2FzZSBJRF9EVDoKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MR2VuZXJpY0VsZW1lbnRJ
bXBsKGRvY1B0cigpLCB0YWdJRCk7Ci0gICAgY2FzZSBJRF9VTDoKLSAgICAgICAgcmV0dXJuIG5l
dyBIVE1MVUxpc3RFbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0gICAgY2FzZSBJRF9PTDoKLSAgICAg
ICAgcmV0dXJuIG5ldyBIVE1MT0xpc3RFbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0gICAgY2FzZSBJ
RF9ESVI6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTERpcmVjdG9yeUVsZW1lbnRJbXBsKGRvY1B0
cigpKTsKLSAgICBjYXNlIElEX01FTlU6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTE1lbnVFbGVt
ZW50SW1wbChkb2NQdHIoKSk7Ci0gICAgY2FzZSBJRF9MSToKLSAgICAgICAgcmV0dXJuIG5ldyBI
VE1MTElFbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0KLS8vIGZvcm1hdHRpbmcgZWxlbWVudHMgKGJs
b2NrKQotICAgIGNhc2UgSURfQkxPQ0tRVU9URToKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MQmxv
Y2txdW90ZUVsZW1lbnRJbXBsKGRvY1B0cigpKTsKLSAgICBjYXNlIElEX0RJVjoKLSAgICAgICAg
cmV0dXJuIG5ldyBIVE1MRGl2RWxlbWVudEltcGwoZG9jUHRyKCkpOwotICAgIGNhc2UgSURfSDE6
Ci0gICAgY2FzZSBJRF9IMjoKLSAgICBjYXNlIElEX0gzOgotICAgIGNhc2UgSURfSDQ6Ci0gICAg
Y2FzZSBJRF9INToKLSAgICBjYXNlIElEX0g2OgotICAgICAgICByZXR1cm4gbmV3IEhUTUxIZWFk
aW5nRWxlbWVudEltcGwoZG9jUHRyKCksIHRhZ0lEKTsKLSAgICBjYXNlIElEX0hSOgotICAgICAg
ICByZXR1cm4gbmV3IEhUTUxIUkVsZW1lbnRJbXBsKGRvY1B0cigpKTsKLSAgICBjYXNlIElEX1A6
Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTFBhcmFncmFwaEVsZW1lbnRJbXBsKGRvY1B0cigpKTsK
LSAgICBjYXNlIElEX1BSRToKLSAgICBjYXNlIElEX1hNUDoKLSAgICBjYXNlIElEX1BMQUlOVEVY
VDoKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MUHJlRWxlbWVudEltcGwoZG9jUHRyKCksIHRhZ0lE
KTsKLSAgICBjYXNlIElEX0xBWUVSOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxMYXllckVsZW1l
bnRJbXBsKGRvY1B0cigpKTsKLQotLy8gZm9udCBzdHVmZgotICAgIGNhc2UgSURfQkFTRUZPTlQ6
Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTEJhc2VGb250RWxlbWVudEltcGwoZG9jUHRyKCkpOwot
ICAgIGNhc2UgSURfRk9OVDoKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MRm9udEVsZW1lbnRJbXBs
KGRvY1B0cigpKTsKLQotLy8gaW5zL2RlbAotICAgIGNhc2UgSURfREVMOgotICAgIGNhc2UgSURf
SU5TOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxNb2RFbGVtZW50SW1wbChkb2NQdHIoKSwgdGFn
SUQpOwotCi0vLyBhbmNob3IKLSAgICBjYXNlIElEX0E6Ci0gICAgICAgIHJldHVybiBuZXcgSFRN
TEFuY2hvckVsZW1lbnRJbXBsKGRvY1B0cigpKTsKLQotLy8gaW1hZ2VzCi0gICAgY2FzZSBJRF9J
TUc6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTEltYWdlRWxlbWVudEltcGwoZG9jUHRyKCkpOwot
ICAgIGNhc2UgSURfTUFQOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxNYXBFbGVtZW50SW1wbChk
b2NQdHIoKSk7Ci0gICAgY2FzZSBJRF9BUkVBOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxBcmVh
RWxlbWVudEltcGwoZG9jUHRyKCkpOwotICAgIGNhc2UgSURfQ0FOVkFTOgotICAgICAgICByZXR1
cm4gbmV3IEhUTUxDYW52YXNFbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0KLS8vIG9iamVjdHMsIGFw
cGxldHMgYW5kIHNjcmlwdHMKLSAgICBjYXNlIElEX0FQUExFVDoKLSAgICAgICAgcmV0dXJuIG5l
dyBIVE1MQXBwbGV0RWxlbWVudEltcGwoZG9jUHRyKCkpOwotICAgIGNhc2UgSURfRU1CRUQ6Ci0g
ICAgICAgIHJldHVybiBuZXcgSFRNTEVtYmVkRWxlbWVudEltcGwoZG9jUHRyKCkpOwotICAgIGNh
c2UgSURfT0JKRUNUOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxPYmplY3RFbGVtZW50SW1wbChk
b2NQdHIoKSk7Ci0gICAgY2FzZSBJRF9QQVJBTToKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MUGFy
YW1FbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0gICAgY2FzZSBJRF9TQ1JJUFQ6Ci0gICAgICAgIHJl
dHVybiBuZXcgSFRNTFNjcmlwdEVsZW1lbnRJbXBsKGRvY1B0cigpKTsKLQotLy8gdGFibGVzCi0g
ICAgY2FzZSBJRF9UQUJMRToKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MVGFibGVFbGVtZW50SW1w
bChkb2NQdHIoKSk7Ci0gICAgY2FzZSBJRF9DQVBUSU9OOgotICAgICAgICByZXR1cm4gbmV3IEhU
TUxUYWJsZUNhcHRpb25FbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0gICAgY2FzZSBJRF9DT0xHUk9V
UDoKLSAgICBjYXNlIElEX0NPTDoKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MVGFibGVDb2xFbGVt
ZW50SW1wbChkb2NQdHIoKSwgdGFnSUQpOwotICAgIGNhc2UgSURfVFI6Ci0gICAgICAgIHJldHVy
biBuZXcgSFRNTFRhYmxlUm93RWxlbWVudEltcGwoZG9jUHRyKCkpOwotICAgIGNhc2UgSURfVEQ6
Ci0gICAgY2FzZSBJRF9USDoKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MVGFibGVDZWxsRWxlbWVu
dEltcGwoZG9jUHRyKCksIHRhZ0lEKTsKLSAgICBjYXNlIElEX1RIRUFEOgotICAgIGNhc2UgSURf
VEJPRFk6Ci0gICAgY2FzZSBJRF9URk9PVDoKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MVGFibGVT
ZWN0aW9uRWxlbWVudEltcGwoZG9jUHRyKCksIHRhZ0lELCBmYWxzZSk7Ci0KLS8vIGlubGluZSBl
bGVtZW50cwotICAgIGNhc2UgSURfQlI6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTEJSRWxlbWVu
dEltcGwoZG9jUHRyKCkpOwotICAgIGNhc2UgSURfUToKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1M
UXVvdGVFbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0KLSAgICBjYXNlIElEX01BUlFVRUU6Ci0gICAg
ICAgIHJldHVybiBuZXcgSFRNTE1hcnF1ZWVFbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0gICAKLS8v
IGVsZW1lbnRzIHdpdGggbm8gc3BlY2lhbCByZXByZXNlbnRhdGlvbiBpbiB0aGUgRE9NCi0KLS8v
IGJsb2NrOgotICAgIGNhc2UgSURfQUREUkVTUzoKLSAgICBjYXNlIElEX0NFTlRFUjoKLQotLy8g
aW5saW5lCi0gICAgICAgIC8vICVmb250c3R5bGUKLSAgICBjYXNlIElEX1RUOgotICAgIGNhc2Ug
SURfVToKLSAgICBjYXNlIElEX0I6Ci0gICAgY2FzZSBJRF9JOgotICAgIGNhc2UgSURfUzoKLSAg
ICBjYXNlIElEX1NUUklLRToKLSAgICBjYXNlIElEX0JJRzoKLSAgICBjYXNlIElEX1NNQUxMOgot
Ci0gICAgICAgIC8vICVwaHJhc2UKLSAgICBjYXNlIElEX0VNOgotICAgIGNhc2UgSURfU1RST05H
OgotICAgIGNhc2UgSURfREZOOgotICAgIGNhc2UgSURfQ09ERToKLSAgICBjYXNlIElEX1NBTVA6
Ci0gICAgY2FzZSBJRF9LQkQ6Ci0gICAgY2FzZSBJRF9WQVI6Ci0gICAgY2FzZSBJRF9DSVRFOgot
ICAgIGNhc2UgSURfQUJCUjoKLSAgICBjYXNlIElEX0FDUk9OWU06Ci0KLSAgICAgICAgLy8gJXNw
ZWNpYWwKLSAgICBjYXNlIElEX1NVQjoKLSAgICBjYXNlIElEX1NVUDoKLSAgICBjYXNlIElEX1NQ
QU46Ci0gICAgY2FzZSBJRF9OT0JSOgotICAgIGNhc2UgSURfV0JSOgotCi0gICAgY2FzZSBJRF9C
RE86Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MR2VuZXJpY0VsZW1lbnRJ
bXBsKGRvY1B0cigpLCB0YWdJRCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KIFFTdHJp
bmcgRG9jdW1lbnRJbXBsOjpuZXh0U3RhdGUoKQogewogICAgUVN0cmluZyBzdGF0ZTsKQEAgLTE0
NjQsMTAgKzEyNDUsMTAgQEAgSFRNTEVsZW1lbnRJbXBsKiBEb2N1bWVudEltcGw6OmJvZHkoKQog
ICAgIC8vIHRyeSB0byBwcmVmZXIgYSBGUkFNRVNFVCBlbGVtZW50IG92ZXIgQk9EWQogICAgIE5v
ZGVJbXBsKiBib2R5ID0gMDsKICAgICBmb3IgKE5vZGVJbXBsKiBpID0gZGUtPmZpcnN0Q2hpbGQo
KTsgaTsgaSA9IGktPm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAgaWYgKGktPmlkKCkgPT0gSURf
RlJBTUVTRVQpCisgICAgICAgIGlmIChpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZnJhbWVzZXQo
KSkpCiAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsKj4oaSk7
CiAgICAgICAgIAotICAgICAgICBpZiAoaS0+aWQoKSA9PSBJRF9CT0RZKQorICAgICAgICBpZiAo
aS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJvZHkoKSkpCiAgICAgICAgICAgICBib2R5ID0gaTsK
ICAgICB9CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCAqPihib2R5KTsK
QEAgLTE1OTcsNyArMTM3OCw3IEBAIGJvb2wgRG9jdW1lbnRJbXBsOjpzaG91bGRTY2hlZHVsZUxh
eW91dCgKICAgICAvLyAoYykgd2UgaGF2ZSBhIDxib2R5PgogICAgIHJldHVybiAocmVuZGVyZXIo
KSAmJiByZW5kZXJlcigpLT5uZWVkc0xheW91dCgpICYmIGhhdmVTdHlsZXNoZWV0c0xvYWRlZCgp
ICYmCiAgICAgICAgICAgICBkb2N1bWVudEVsZW1lbnQoKSAmJiBkb2N1bWVudEVsZW1lbnQoKS0+
cmVuZGVyZXIoKSAmJgotICAgICAgICAgICAgKGRvY3VtZW50RWxlbWVudCgpLT5pZCgpICE9IElE
X0hUTUwgfHwgYm9keSgpKSk7CisgICAgICAgICAgICAoIWRvY3VtZW50RWxlbWVudCgpLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6aHRtbCgpKSB8fCBib2R5KCkpKTsKIH0KIAogaW50IERvY3VtZW50
SW1wbDo6bWluaW11bUxheW91dERlbGF5KCkKQEAgLTE3MjEsNDIgKzE1MDIsNiBAQCB2b2lkIERv
Y3VtZW50SW1wbDo6ZGV0ZXJtaW5lUGFyc2VNb2RlKCBjCiAgICAga2REZWJ1Zyg2MDIwKSA8PCAi
IHVzaW5nIHN0cmljdCBwYXJzZU1vZGUiIDw8IGVuZGw7CiB9CiAKLS8vIFBsZWFzZSBzZWUgaWYg
dGhlcmVgcyBhIHBvc3NpYmlsaXR5IHRvIG1lcmdlIHRoYXQgY29kZQotLy8gd2l0aCB0aGUgbmV4
dCBmdW5jdGlvbiBhbmQgZ2V0RWxlbWVudEJ5SUQoKS4KLU5vZGVJbXBsICpEb2N1bWVudEltcGw6
OmZpbmRFbGVtZW50KCBJZCBpZCApCi17Ci0gICAgUVB0clN0YWNrPE5vZGVJbXBsPiBub2RlU3Rh
Y2s7Ci0gICAgTm9kZUltcGwgKmN1cnJlbnQgPSBfZmlyc3Q7Ci0KLSAgICB3aGlsZSgxKQotICAg
IHsKLSAgICAgICAgaWYoIWN1cnJlbnQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmKG5vZGVT
dGFjay5pc0VtcHR5KCkpIGJyZWFrOwotICAgICAgICAgICAgY3VycmVudCA9IG5vZGVTdGFjay5w
b3AoKTsKLSAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0U2libGluZygpOwotICAg
ICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgaWYoY3VycmVudC0+
aWQoKSA9PSBpZCkKLSAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudDsKLQotICAgICAgICAg
ICAgTm9kZUltcGwgKmNoaWxkID0gY3VycmVudC0+Zmlyc3RDaGlsZCgpOwotICAgICAgICAgICAg
aWYoY2hpbGQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbm9kZVN0YWNrLnB1c2go
Y3VycmVudCk7Ci0gICAgICAgICAgICAgICAgY3VycmVudCA9IGNoaWxkOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGN1cnJl
bnQgPSBjdXJyZW50LT5uZXh0U2libGluZygpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KIE5vZGVJbXBsICpEb2N1bWVudEltcGw6Om5leHRG
b2N1c05vZGUoTm9kZUltcGwgKmZyb21Ob2RlKQogewogICAgIHVuc2lnbmVkIHNob3J0IGZyb21U
YWJJbmRleDsKQEAgLTIxNTEsMTIgKzE4OTYsMTMgQEAgTm9kZUltcGw6OklkIERvY3VtZW50SW1w
bDo6YXR0cklkKERPTVN0cgogCiAgICAgLy8gbm93IGxldHMgZmluZCBvdXQgdGhlIG5hbWVzcGFj
ZQogICAgIFFfVUlOVDE2IG5zID0gbm9OYW1lc3BhY2U7CisgICAgLyogRklYTUU6IEp1c3QgYnJl
YWsgbmFtZXNwYWNlZCBhdHRyaWJ1dGVzIGZvciBub3cuICBXaWxsIGZpeCBpbiBuZXh0IHN0YWdl
IG9mIFF1YWxpZmllZE5hbWUgY29udmVyc2lvbi4KICAgICBpZiAoX25hbWVzcGFjZVVSSSkgewog
ICAgICAgICBET01TdHJpbmcgbnNVKF9uYW1lc3BhY2VVUkkpOwogICAgICAgICBpbnQgbnNJRCA9
IFhtbE5hbWVzcGFjZVRhYmxlOjpnZXROYW1lc3BhY2VJRChuc1UsIHJlYWRvbmx5KTsKICAgICAg
ICAgaWYgKG5zSUQgIT0gLTEpCiAgICAgICAgICAgICBucyA9IChRX1VJTlQxNiluc0lEOwotICAg
IH0KKyAgICB9Ki8KICAgICAKICAgICAvLyBMb29rIGluIHRoZSBtX2F0dHJOYW1lcyBhcnJheSBm
b3IgdGhlIG5hbWUKICAgICAvLyAjIyMgeWVhaCwgdGhpcyBpcyBsYW1lLiB1c2UgYSBkaWN0aW9u
YXJ5IC8gbWFwIGluc3RlYWQKQEAgLTIyMDcsOTUgKzE5NTMsNiBAQCBET01TdHJpbmcgRG9jdW1l
bnRJbXBsOjphdHRyTmFtZShOb2RlSW1wCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotTm9kZUlt
cGw6OklkIERvY3VtZW50SW1wbDo6dGFnSWQoRE9NU3RyaW5nSW1wbCogX25hbWVzcGFjZVVSSSwg
RE9NU3RyaW5nSW1wbCAqX25hbWUsIGJvb2wgcmVhZG9ubHkpCi17Ci0gICAgaWYgKCFfbmFtZSkg
cmV0dXJuIDA7Ci0gICAgLy8gRWFjaCBkb2N1bWVudCBtYWludGFpbnMgYSBtYXBwaW5nIG9mIHRh
ZyBuYW1lIC0+IGlkIGZvciBldmVyeSB0YWcgbmFtZSBlbmNvdW50ZXJlZAotICAgIC8vIGluIHRo
ZSBkb2N1bWVudC4KLSAgICBOb2RlSW1wbDo6SWQgaWQgPSAwOwotCi0gICAgLy8gRmlyc3Qgc2Vl
IGlmIGl0J3MgYSBIVE1MIGVsZW1lbnQgbmFtZQotICAgIFFDb25zdFN0cmluZyBuKF9uYW1lLT5z
LCBfbmFtZS0+bCk7Ci0gICAgaWYgKCFfbmFtZXNwYWNlVVJJIHx8ICFzdHJjYXNlY21wKF9uYW1l
c3BhY2VVUkksIFhIVE1MX05BTUVTUEFDRSkpIHsKLSAgICAgICAgLy8gd2UncmUgaW4gSFRNTCBu
YW1lc3BhY2UgaWYgd2Uga25vdyB0aGUgdGFnLgotICAgICAgICAvLyB4aHRtbCBpcyBsb3dlciBj
YXNlIC0gY2FzZSBzZW5zaXRpdmUsIGVhc3kgdG8gaW1wbGVtZW50Ci0gICAgICAgIGlmICggaHRt
bE1vZGUoKSA9PSBYSHRtbCAmJiAoaWQgPSBnZXRUYWdJRChuLnN0cmluZygpLmFzY2lpKCksIF9u
YW1lLT5sKSkgKQotICAgICAgICAgICAgcmV0dXJuIGlkOwotICAgICAgICAvLyBjb21wYXRpYmls
aXR5OiB1cHBlciBjYXNlIC0gY2FzZSBpbnNlbnNpdGl2ZQotICAgICAgICBpZiAoIGh0bWxNb2Rl
KCkgIT0gWEh0bWwgJiYgKGlkID0gZ2V0VGFnSUQobi5zdHJpbmcoKS5sb3dlcigpLmFzY2lpKCks
IF9uYW1lLT5sICkpICkKLSAgICAgICAgICAgIHJldHVybiBpZDsKLQotICAgICAgICAvLyBvaywg
dGhlIGZhc3QgcGF0aCBkaWRuJ3Qgd29yayBvdXQsIHdlIG5lZWQgdGhlIGZ1bGwgY2hlY2sKLSAg
ICB9Ci0KLSAgICAvLyBub3cgbGV0cyBmaW5kIG91dCB0aGUgbmFtZXNwYWNlCi0gICAgUV9VSU5U
MTYgbnMgPSBub05hbWVzcGFjZTsKLSAgICBpZiAoX25hbWVzcGFjZVVSSSkgewotICAgICAgICBE
T01TdHJpbmcgbnNVKF9uYW1lc3BhY2VVUkkpOwotICAgICAgICBpbnQgbnNJRCA9IFhtbE5hbWVz
cGFjZVRhYmxlOjpnZXROYW1lc3BhY2VJRChuc1UsIHJlYWRvbmx5KTsKLSAgICAgICAgaWYgKG5z
SUQgIT0gLTEpCi0gICAgICAgICAgICBucyA9IChRX1VJTlQxNiluc0lEOwotICAgIH0KLQotICAg
IC8vIExvb2sgaW4gdGhlIG1fZWxlbWVudE5hbWVzIGFycmF5IGZvciB0aGUgbmFtZQotICAgIC8v
ICMjIyB5ZWFoLCB0aGlzIGlzIGxhbWUuIHVzZSBhIGRpY3Rpb25hcnkgLyBtYXAgaW5zdGVhZAot
ICAgIERPTVN0cmluZyBubWUobi5zdHJpbmcoKSk7Ci0gICAgLy8gY29tcGF0aWJpbGl0eSBtb2Rl
IGhhcyB0byBzdG9yZSB1cHBlciBjYXNlCi0gICAgaWYgKGh0bWxNb2RlKCkgIT0gWEh0bWwpIG5t
ZSA9IG5tZS51cHBlcigpOwotICAgIGZvciAoaWQgPSAwOyBpZCA8IG1fZWxlbWVudE5hbWVDb3Vu
dDsgaWQrKykKLSAgICAgICAgaWYgKERPTVN0cmluZyhtX2VsZW1lbnROYW1lc1tpZF0pID09IG5t
ZSkKLSAgICAgICAgICAgIHJldHVybiBtYWtlSWQobnMsIElEX0xBU1RfVEFHICsgMSArIGlkKTsK
LQotICAgIC8vIHVua25vd24KLSAgICBpZiAocmVhZG9ubHkpIHJldHVybiAwOwotCi0gICAgLy8g
TmFtZSBub3QgZm91bmQgaW4gbV9lbGVtZW50TmFtZXMsIHNvIGxldCdzIGFkZCBpdAotICAgIGlm
IChtX2VsZW1lbnROYW1lQ291bnQrMSA+IG1fZWxlbWVudE5hbWVBbGxvYykgewotICAgICAgICBt
X2VsZW1lbnROYW1lQWxsb2MgKz0gMTAwOwotICAgICAgICBET01TdHJpbmdJbXBsICoqbmV3TmFt
ZXMgPSBuZXcgRE9NU3RyaW5nSW1wbCogW21fZWxlbWVudE5hbWVBbGxvY107Ci0gICAgICAgIC8v
ICMjIyB5ZWFoLCB0aGlzIGlzIGxhbWUuIHVzZSBhIGRpY3Rpb25hcnkgLyBtYXAgaW5zdGVhZAot
ICAgICAgICBpZiAobV9lbGVtZW50TmFtZXMpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0
IGk7Ci0gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbV9lbGVtZW50TmFtZUNvdW50OyBpKysp
Ci0gICAgICAgICAgICAgICAgbmV3TmFtZXNbaV0gPSBtX2VsZW1lbnROYW1lc1tpXTsKLSAgICAg
ICAgICAgIGRlbGV0ZSBbXSBtX2VsZW1lbnROYW1lczsKLSAgICAgICAgfQotICAgICAgICBtX2Vs
ZW1lbnROYW1lcyA9IG5ld05hbWVzOwotICAgIH0KLQotICAgIGlkID0gbV9lbGVtZW50TmFtZUNv
dW50Kys7Ci0gICAgbV9lbGVtZW50TmFtZXNbaWRdID0gbm1lLmltcGxlbWVudGF0aW9uKCk7Ci0g
ICAgbV9lbGVtZW50TmFtZXNbaWRdLT5yZWYoKTsKLQotICAgIHJldHVybiBtYWtlSWQobnMsIElE
X0xBU1RfVEFHICsgMSArIGlkKTsKLX0KLQotRE9NU3RyaW5nIERvY3VtZW50SW1wbDo6dGFnTmFt
ZShOb2RlSW1wbDo6SWQgX2lkKSBjb25zdAotewotICAgIGlmIChsb2NhbE5hbWVQYXJ0KF9pZCkg
PiBJRF9MQVNUX1RBRykKLSAgICAgICAgcmV0dXJuIG1fZWxlbWVudE5hbWVzW2xvY2FsTmFtZVBh
cnQoX2lkKSAtIChJRF9MQVNUX1RBRyArIDEpXTsKLSAgICBlbHNlIHsKLSAgICAgICAgLy8gIyMj
IHB1dCB0aGVtIGluIGEgY2FjaGUKLSAgICAgICAgaWYgKGh0bWxNb2RlKCkgPT0gWEh0bWwpCi0g
ICAgICAgICAgICByZXR1cm4gZ2V0VGFnTmFtZShfaWQpLmxvd2VyKCk7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHJldHVybiBnZXRUYWdOYW1lKF9pZCk7Ci0gICAgfQotfQotCi0KLURPTVN0
cmluZ0ltcGwqIERvY3VtZW50SW1wbDo6bmFtZXNwYWNlVVJJKE5vZGVJbXBsOjpJZCBfaWQpIGNv
bnN0Ci17Ci0gICAgaWYgKF9pZCA8PSBJRF9MQVNUX1RBRykKLSAgICAgICAgcmV0dXJuIGh0bWxN
b2RlKCkgPT0gWEh0bWwgPyBYbWxOYW1lc3BhY2VUYWJsZTo6Z2V0TmFtZXNwYWNlVVJJKHhodG1s
TmFtZXNwYWNlKS5pbXBsZW1lbnRhdGlvbigpIDogMDsKLQotICAgIHVuc2lnbmVkIHNob3J0IG5z
ID0gX2lkID4+IDE2OwotCi0gICAgaWYgKCFucykgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gWG1s
TmFtZXNwYWNlVGFibGU6OmdldE5hbWVzcGFjZVVSSShucykuaW1wbGVtZW50YXRpb24oKTsKLX0K
LQogU3R5bGVTaGVldExpc3RJbXBsKiBEb2N1bWVudEltcGw6OnN0eWxlU2hlZXRzKCkKIHsKICAg
ICByZXR1cm4gbV9zdHlsZVNoZWV0czsKQEAgLTI0MTksMTEgKzIwNzYsMTEgQEAgdm9pZCBEb2N1
bWVudEltcGw6OnJlY2FsY1N0eWxlU2VsZWN0b3IoKQogICAgICAgICAgICAgfQogCiAgICAgICAg
IH0KLSAgICAgICAgZWxzZSBpZiAobi0+aXNIVE1MRWxlbWVudCgpICYmIChuLT5pZCgpID09IElE
X0xJTksgfHwgbi0+aWQoKSA9PSBJRF9TVFlMRSkpIHsKLSAgICAgICAgICAgIEVsZW1lbnRJbXBs
ICplID0gc3RhdGljX2Nhc3Q8RWxlbWVudEltcGwgKj4obik7CisgICAgICAgIGVsc2UgaWYgKG4t
PmlzSFRNTEVsZW1lbnQoKSAmJiAobi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmxpbmsoKSkgfHwg
bi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnN0eWxlKCkpKSkgeworICAgICAgICAgICAgSFRNTEVs
ZW1lbnRJbXBsICplID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KG4pOwogICAgICAg
ICAgICAgUVN0cmluZyB0aXRsZSA9IGUtPmdldEF0dHJpYnV0ZSggQVRUUl9USVRMRSApLnN0cmlu
ZygpOwogICAgICAgICAgICAgYm9vbCBlbmFibGVkVmlhU2NyaXB0ID0gZmFsc2U7Ci0gICAgICAg
ICAgICBpZiAobi0+aWQoKSA9PSBJRF9MSU5LKSB7CisgICAgICAgICAgICBpZiAoZS0+aGFzTG9j
YWxOYW1lKEhUTUxOYW1lczo6bGluaygpKSkgewogICAgICAgICAgICAgICAgIC8vIDxMSU5LPiBl
bGVtZW50CiAgICAgICAgICAgICAgICAgSFRNTExpbmtFbGVtZW50SW1wbCogbCA9IHN0YXRpY19j
YXN0PEhUTUxMaW5rRWxlbWVudEltcGwqPihuKTsKICAgICAgICAgICAgICAgICBpZiAobC0+aXNM
b2FkaW5nKCkgfHwgbC0+aXNEaXNhYmxlZCgpKQpAQCAtMjQzNSw3ICsyMDkyLDcgQEAgdm9pZCBE
b2N1bWVudEltcGw6OnJlY2FsY1N0eWxlU2VsZWN0b3IoKQogCiAgICAgICAgICAgICAvLyBHZXQg
dGhlIGN1cnJlbnQgcHJlZmVycmVkIHN0eWxlc2V0LiAgVGhpcyBpcyB0aGUKICAgICAgICAgICAg
IC8vIHNldCBvZiBzaGVldHMgdGhhdCB3aWxsIGJlIGVuYWJsZWQuCi0gICAgICAgICAgICBpZiAo
IG4tPmlkKCkgPT0gSURfTElOSyApCisgICAgICAgICAgICBpZiAoZS0+aGFzTG9jYWxOYW1lKEhU
TUxOYW1lczo6bGluaygpKSkKICAgICAgICAgICAgICAgICBzaGVldCA9IHN0YXRpY19jYXN0PEhU
TUxMaW5rRWxlbWVudEltcGwqPihuKS0+c2hlZXQoKTsKICAgICAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgICAgICAvLyA8U1RZTEU+IGVsZW1lbnQKQEAgLTI0NTIsNyArMjEwOSw3IEBAIHZvaWQg
RG9jdW1lbnRJbXBsOjpyZWNhbGNTdHlsZVNlbGVjdG9yKCkKICAgICAgICAgICAgICAgICAgICAg
Ly8gdXMgYXMgdGhlIHByZWZlcnJlZCBzZXQuICBPdGhlcndpc2UsIGp1c3QgaWdub3JlCiAgICAg
ICAgICAgICAgICAgICAgIC8vIHRoaXMgc2hlZXQuCiAgICAgICAgICAgICAgICAgICAgIFFTdHJp
bmcgcmVsID0gZS0+Z2V0QXR0cmlidXRlKCBBVFRSX1JFTCApLnN0cmluZygpOwotICAgICAgICAg
ICAgICAgICAgICBpZiAobi0+aWQoKSA9PSBJRF9TVFlMRSB8fCAhcmVsLmNvbnRhaW5zKCJhbHRl
cm5hdGUiKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKGUtPmhhc0xvY2FsTmFtZShIVE1MTmFt
ZXM6OnN0eWxlKCkpIHx8ICFyZWwuY29udGFpbnMoImFsdGVybmF0ZSIpKQogICAgICAgICAgICAg
ICAgICAgICAgICAgbV9wcmVmZXJyZWRTdHlsZXNoZWV0U2V0ID0gdmlldygpLT5wYXJ0KCktPmQt
Pm1fc2hlZXRVc2VkID0gdGl0bGU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgICAgIApAQCAtMjQ3MSw3ICsyMTI4LDcgQEAgdm9pZCBEb2N1bWVudEltcGw6OnJlY2FsY1N0
eWxlU2VsZWN0b3IoKQogICAgIAogICAgICAgICAvLyBGb3IgSFRNTCBkb2N1bWVudHMsIHN0eWxl
c2hlZXRzIGFyZSBub3QgYWxsb3dlZCB3aXRoaW4vYWZ0ZXIgdGhlIDxCT0RZPiB0YWcuIFNvIHdl
CiAgICAgICAgIC8vIGNhbiBzdG9wIHNlYXJjaGluZyBoZXJlLgotICAgICAgICBpZiAoaXNIVE1M
RG9jdW1lbnQoKSAmJiBuLT5pZCgpID09IElEX0JPRFkpCisgICAgICAgIGlmIChpc0hUTUxEb2N1
bWVudCgpICYmIG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpib2R5KCkpKQogICAgICAgICAgICAg
YnJlYWs7CiAgICAgfQogCkluZGV4OiBraHRtbC94bWwvZG9tX2RvY2ltcGwuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC94bWwvZG9tX2RvY2ltcGwuaCx2CnJl
dHJpZXZpbmcgcmV2aXNpb24gMS4xMTUKZGlmZiAtdSAtcCAtcjEuMTE1IGtodG1sL3htbC9kb21f
ZG9jaW1wbC5oCi0tLSBraHRtbC94bWwvZG9tX2RvY2ltcGwuaAkyMiBKdW4gMjAwNSAxODoyMjow
MiAtMDAwMAkxLjExNQorKysga2h0bWwveG1sL2RvbV9kb2NpbXBsLmgJMjMgSnVuIDIwMDUgMDE6
MTE6MjAgLTAwMDAKQEAgLTIxOCw5ICsyMTgsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29s
IGlzRG9jdW1lbnROb2RlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgYm9v
bCBpc0hUTUxEb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICBFbGVtZW50
SW1wbCAqY3JlYXRlSFRNTEVsZW1lbnQoY29uc3QgRE9NU3RyaW5nICZ0YWdOYW1lLCBpbnQgJmV4
Y2VwdGlvbmNvZGUpOwotICAgIEVsZW1lbnRJbXBsICpjcmVhdGVIVE1MRWxlbWVudCh1bnNpZ25l
ZCBzaG9ydCB0YWdJRCk7Ci0KICAgICBraHRtbDo6Q1NTU3R5bGVTZWxlY3RvciAqc3R5bGVTZWxl
Y3RvcigpIHsgcmV0dXJuIG1fc3R5bGVTZWxlY3RvcjsgfQogCiAgICAgRWxlbWVudEltcGwgKkRv
Y3VtZW50SW1wbDo6Z2V0RWxlbWVudEJ5QWNjZXNzS2V5KCBjb25zdCBET01TdHJpbmcgJmtleSAp
OwpAQCAtMzg3LDkgKzM4NCw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlc2V0VmlzaXRlZExpbmtD
b2xvcigpOwogICAgIHZvaWQgcmVzZXRBY3RpdmVMaW5rQ29sb3IoKTsKICAgICAKLSAgICAvLyBp
bnRlcm5hbAotICAgIE5vZGVJbXBsICpmaW5kRWxlbWVudCggSWQgaWQgKTsKLQogICAgIGJvb2wg
cHJlcGFyZU1vdXNlRXZlbnQoIGJvb2wgcmVhZG9ubHksIGludCB4LCBpbnQgeSwgTW91c2VFdmVu
dCAqZXYgKTsKIAogICAgIHZpcnR1YWwgYm9vbCBjaGlsZEFsbG93ZWQoIE5vZGVJbXBsICpuZXdD
aGlsZCApOwpAQCAtMzk5LDkgKzM5Myw2IEBAIHB1YmxpYzoKICAgICAvLyAjIyMgdGhpbmsgYWJv
dXQgaW1wbGVtZW50aW5nIHJlZidjb3VudGluZyBmb3IgdGhlIGlkJ3MKICAgICAvLyBpbiBvcmRl
ciB0byBiZSBhYmxlIHRvIHJlYXNzaWduIHRob3NlIHRoYXQgYXJlIG5vIGxvbmdlciBpbiB1c2UK
ICAgICAvLyAoY291bGQgbWFrZSBwcm9ibGVtcyB3aGVuIGl0IGlzIHN0aWxsIGtlcHQgc29tZXdo
ZXJlIGFyb3VuZCwgaS5lLiBzdHlsZXNlbGVjdG9yKQotICAgIE5vZGVJbXBsOjpJZCB0YWdJZChE
T01TdHJpbmdJbXBsKiBfbmFtZXNwYWNlVVJJLCBET01TdHJpbmdJbXBsICpfbmFtZSwgYm9vbCBy
ZWFkb25seSk7Ci0gICAgRE9NU3RyaW5nIHRhZ05hbWUoTm9kZUltcGw6OklkIF9pZCkgY29uc3Q7
Ci0KICAgICBOb2RlSW1wbDo6SWQgYXR0cklkKERPTVN0cmluZ0ltcGwqIF9uYW1lc3BhY2VVUkks
IERPTVN0cmluZ0ltcGwgKl9uYW1lLCBib29sIHJlYWRvbmx5KTsKICAgICBET01TdHJpbmcgYXR0
ck5hbWUoTm9kZUltcGw6OklkIF9pZCkgY29uc3Q7CiAKSW5kZXg6IGtodG1sL3htbC9kb21fZWxl
bWVudGltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1s
L3htbC9kb21fZWxlbWVudGltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjY3CmRpZmYg
LXUgLXAgLXIxLjY3IGtodG1sL3htbC9kb21fZWxlbWVudGltcGwuY3BwCi0tLSBraHRtbC94bWwv
ZG9tX2VsZW1lbnRpbXBsLmNwcAkxMSBNYXkgMjAwNSAwNTo0OTozNSAtMDAwMAkxLjY3CisrKyBr
aHRtbC94bWwvZG9tX2VsZW1lbnRpbXBsLmNwcAkyMyBKdW4gMjAwNSAwMToxMToyMSAtMDAwMApA
QCAtOTAsMTggKzkwLDE4IEBAIHVuc2lnbmVkIHNob3J0IEF0dHJJbXBsOjpub2RlVHlwZSgpIGNv
bnMKICAgICByZXR1cm4gTm9kZTo6QVRUUklCVVRFX05PREU7CiB9CiAKLURPTVN0cmluZyBBdHRy
SW1wbDo6cHJlZml4KCkgY29uc3QKK2NvbnN0IEF0b21pY1N0cmluZyYgQXR0ckltcGw6OnByZWZp
eCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fYXR0cmlidXRlLT5wcmVmaXgoKTsKIH0KIAotdm9p
ZCBBdHRySW1wbDo6c2V0UHJlZml4KGNvbnN0IERPTVN0cmluZyAmX3ByZWZpeCwgaW50ICZleGNl
cHRpb25jb2RlICkKK3ZvaWQgQXR0ckltcGw6OnNldFByZWZpeChjb25zdCBBdG9taWNTdHJpbmcg
Jl9wcmVmaXgsIGludCAmZXhjZXB0aW9uY29kZSApCiB7CiAgICAgY2hlY2tTZXRQcmVmaXgoX3By
ZWZpeCwgZXhjZXB0aW9uY29kZSk7CiAgICAgaWYgKGV4Y2VwdGlvbmNvZGUpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIG1fYXR0cmlidXRlLT5zZXRQcmVmaXgoX3ByZWZpeC5pbXBsZW1lbnRhdGlv
bigpKTsKKyAgICBtX2F0dHJpYnV0ZS0+c2V0UHJlZml4KF9wcmVmaXgpOwogfQogCiBET01TdHJp
bmcgQXR0ckltcGw6Om5vZGVWYWx1ZSgpIGNvbnN0CkBAIC0yMDYsNyArMjA2LDYgQEAgRWxlbWVu
dEltcGw6OkVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkbwogICAgIDogQ29udGFpbmVyTm9kZUlt
cGwoZG9jKQogewogICAgIG5hbWVkQXR0ck1hcCA9IDA7Ci0gICAgbV9wcmVmaXggPSAwOwogfQog
CiBFbGVtZW50SW1wbDo6fkVsZW1lbnRJbXBsKCkKQEAgLTIxNSw5ICsyMTQsNiBAQCBFbGVtZW50
SW1wbDo6fkVsZW1lbnRJbXBsKCkKICAgICAgICAgbmFtZWRBdHRyTWFwLT5kZXRhY2hGcm9tRWxl
bWVudCgpOwogICAgICAgICBuYW1lZEF0dHJNYXAtPmRlcmVmKCk7CiAgICAgfQotCi0gICAgaWYg
KG1fcHJlZml4KQotICAgICAgICBtX3ByZWZpeC0+ZGVyZWYoKTsKIH0KIAogdm9pZCBFbGVtZW50
SW1wbDo6cmVtb3ZlQXR0cmlidXRlKCBOb2RlSW1wbDo6SWQgaWQsIGludCAmZXhjZXB0aW9uY29k
ZSApCkBAIC0zNTEsMzYgKzM0NywyNSBAQCB2b2lkIEVsZW1lbnRJbXBsOjpzZXRBdHRyaWJ1dGVN
YXAoIE5hbWVkCiBib29sIEVsZW1lbnRJbXBsOjpoYXNBdHRyaWJ1dGVzKCkgY29uc3QKIHsKICAg
ICB1cGRhdGVTdHlsZUF0dHJpYnV0ZUlmTmVlZGVkKCk7Ci0KICAgICByZXR1cm4gbmFtZWRBdHRy
TWFwICYmIG5hbWVkQXR0ck1hcC0+bGVuZ3RoKCkgPiAwOwogfQogCiBET01TdHJpbmcgRWxlbWVu
dEltcGw6Om5vZGVOYW1lKCkgY29uc3QKIHsKLSAgICByZXR1cm4gdGFnTmFtZSgpOwotfQotCi1E
T01TdHJpbmcgRWxlbWVudEltcGw6OnRhZ05hbWUoKSBjb25zdAotewogICAgIERPTVN0cmluZyB0
biA9IGdldERvY3VtZW50KCktPnRhZ05hbWUoaWQoKSk7Ci0KLSAgICBpZiAobV9wcmVmaXgpCi0g
ICAgICAgIHJldHVybiBET01TdHJpbmcobV9wcmVmaXgpICsgIjoiICsgdG47Ci0KKyAgICBpZiAo
bV90YWdOYW1lLmhhc1ByZWZpeCgpKQorICAgICAgICByZXR1cm4gRE9NU3RyaW5nKG1fdGFnTmFt
ZS5wcmVmaXgoKSkgKyAiOiIgKyB0bjsKICAgICByZXR1cm4gdG47CiB9CiAKLXZvaWQgRWxlbWVu
dEltcGw6OnNldFByZWZpeCggY29uc3QgRE9NU3RyaW5nICZfcHJlZml4LCBpbnQgJmV4Y2VwdGlv
bmNvZGUgKQordm9pZCBFbGVtZW50SW1wbDo6c2V0UHJlZml4KGNvbnN0IEF0b21pY1N0cmluZyAm
X3ByZWZpeCwgaW50ICZleGNlcHRpb25jb2RlKQogewogICAgIGNoZWNrU2V0UHJlZml4KF9wcmVm
aXgsIGV4Y2VwdGlvbmNvZGUpOwogICAgIGlmIChleGNlcHRpb25jb2RlKQogICAgICAgICByZXR1
cm47CiAKLSAgICBpZiAobV9wcmVmaXgpCi0gICAgICAgIG1fcHJlZml4LT5kZXJlZigpOwotICAg
IG1fcHJlZml4ID0gX3ByZWZpeC5pbXBsZW1lbnRhdGlvbigpOwotICAgIGlmIChtX3ByZWZpeCkK
LSAgICAgICAgbV9wcmVmaXgtPnJlZigpOworICAgIC8vIEZJWE1FOiBUaGlzIGlzIGp1c3QgYSBo
YWNrIGZvciBzdGFnZSBvbmUgb2YgdGhlIFRhZ05hbWUgcGF0Y2guICBJdCB3aWxsIGNoYW5nZS4K
KyAgICBtX3RhZ05hbWUuc2V0UHJlZml4KF9wcmVmaXgpOwogfQogCiB2b2lkIEVsZW1lbnRJbXBs
OjpjcmVhdGVBdHRyaWJ1dGVNYXAoKSBjb25zdApAQCAtNzgyLDE1ICs3NjcsMTkgQEAgWE1MRWxl
bWVudEltcGw6OlhNTEVsZW1lbnRJbXBsKERvY3VtZW50UAogICAgICAgICBsb2NhbE5hbWUtPnJl
bW92ZSgwLGNvbG9ucG9zKzEpOwogICAgICAgICBtX2lkID0gZG9jLT5kb2N1bWVudCgpLT50YWdJ
ZChfbmFtZXNwYWNlVVJJLCBsb2NhbE5hbWUsIGZhbHNlIC8qIGFsbG9jYXRlICovKTsKICAgICAg
ICAgbG9jYWxOYW1lLT5kZXJlZigpOwotICAgICAgICBtX3ByZWZpeCA9IF9xdWFsaWZpZWROYW1l
LT5jb3B5KCk7Ci0gICAgICAgIG1fcHJlZml4LT5yZWYoKTsKLSAgICAgICAgbV9wcmVmaXgtPnRy
dW5jYXRlKGNvbG9ucG9zKTsKKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEg
dGVtcG9yYXJ5IHNpdHVhdGlvbiBmb3Igc3RhZ2Ugb25lIG9mIHRoZSBRdWFsaWZpZWROYW1lIHBh
dGNoLiAgVGhpcyBpcyBhbHNvIGEgcmVhbGx5IHN0dXBpZCB3YXkgdG8KKyAgICAgICAgLy8gaGF2
ZSB0byBoYW5kbGUgdGhlIHByZWZpeC4gIFdheSB0b28gbXVjaCBjb3B5aW5nLiAgV2Ugc2hvdWxk
IG1ha2Ugc3VyZSB0aGUgWE1MIHRva2VuaXplciBoYXMgZG9uZSB0aGUgc3BsaXQKKyAgICAgICAg
Ly8gYWxyZWFkeSBpbnRvIHByZWZpeCBhbmQgbG9jYWxOYW1lLgorICAgICAgICBET01TdHJpbmdJ
bXBsKiBwcmVmaXggPSBfcXVhbGlmaWVkTmFtZS0+Y29weSgpOworICAgICAgICBwcmVmaXgtPnJl
ZigpOworICAgICAgICBwcmVmaXgtPnRydW5jYXRlKGNvbG9ucG9zKTsKKyAgICAgICAgbV90YWdO
YW1lID0gUXVhbGlmaWVkTmFtZShwcmVmaXgsIG51bGxBdG9tLCBudWxsQXRvbSk7CisgICAgICAg
IHByZWZpeC0+ZGVyZWYoKTsKICAgICB9Ci0gICAgZWxzZSB7CisgICAgZWxzZQogICAgICAgICAv
LyBubyBwcmVmaXgKICAgICAgICAgbV9pZCA9IGRvYy0+ZG9jdW1lbnQoKS0+dGFnSWQoX25hbWVz
cGFjZVVSSSwgX3F1YWxpZmllZE5hbWUsIGZhbHNlIC8qIGFsbG9jYXRlICovKTsKLSAgICAgICAg
bV9wcmVmaXggPSAwOwotICAgIH0KIH0KIAogWE1MRWxlbWVudEltcGw6On5YTUxFbGVtZW50SW1w
bCgpCkluZGV4OiBraHRtbC94bWwvZG9tX2VsZW1lbnRpbXBsLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwveG1sL2RvbV9lbGVtZW50aW1wbC5oLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjQxCmRpZmYgLXUgLXAgLXIxLjQxIGtodG1sL3htbC9kb21fZWxlbWVu
dGltcGwuaAotLS0ga2h0bWwveG1sL2RvbV9lbGVtZW50aW1wbC5oCTEyIE1heSAyMDA1IDE3OjEx
OjIyIC0wMDAwCTEuNDEKKysrIGtodG1sL3htbC9kb21fZWxlbWVudGltcGwuaAkyMyBKdW4gMjAw
NSAwMToxMToyMSAtMDAwMApAQCAtMjMsMTMgKzIzLDE0IEBACiAgKiBCb3N0b24sIE1BIDAyMTEx
LTEzMDcsIFVTQS4KICAqCiAgKi8KLSNpZm5kZWYgX0RPTV9FTEVNRU5USW1wbF9oXwotI2RlZmlu
ZSBfRE9NX0VMRU1FTlRJbXBsX2hfCisjaWZuZGVmIF9ET01fRUxFTUVOVElNUExfaF8KKyNkZWZp
bmUgX0RPTV9FTEVNRU5USU1QTF9oXwogCiAjaW5jbHVkZSAiZG9tX25vZGVpbXBsLmgiCiAjaW5j
bHVkZSAieG1sL2RvbV9zdHJpbmdpbXBsLmgiCiAjaW5jbHVkZSAibWlzYy9zaGFyZWQuaCIKICNp
bmNsdWRlICJjc3MvY3NzX3ZhbHVlaW1wbC5oIgorI2luY2x1ZGUgImRvbV9xbmFtZS5oIgogCiAj
aWYgQVBQTEVfQ0hBTkdFUwogI2lmZGVmIF9fT0JKQ19fCkBAIC0xMjgsOCArMTI5LDggQEAgcHVi
bGljOgogICAgIC8vIERPTSBtZXRob2RzIG92ZXJyaWRkZW4gZnJvbSAgcGFyZW50IGNsYXNzZXMK
ICAgICB2aXJ0dWFsIERPTVN0cmluZyBub2RlTmFtZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgdW5z
aWduZWQgc2hvcnQgbm9kZVR5cGUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIERPTVN0cmluZyBwcmVm
aXgoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0UHJlZml4KGNvbnN0IERPTVN0cmluZyAm
X3ByZWZpeCwgaW50ICZleGNlcHRpb25jb2RlICk7CisgICAgdmlydHVhbCBjb25zdCBBdG9taWNT
dHJpbmcmIHByZWZpeCgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRQcmVmaXgoY29uc3Qg
QXRvbWljU3RyaW5nICZfcHJlZml4LCBpbnQgJmV4Y2VwdGlvbmNvZGUgKTsKIAogICAgIHZpcnR1
YWwgRE9NU3RyaW5nIG5vZGVWYWx1ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBzZXROb2Rl
VmFsdWUoIGNvbnN0IERPTVN0cmluZyAmLCBpbnQgJmV4Y2VwdGlvbmNvZGUgKTsKQEAgLTE1Niw3
ICsxNTcsNyBAQCBjbGFzcyBFbGVtZW50SW1wbCA6IHB1YmxpYyBDb250YWluZXJOb2RlCiAgICAg
ZnJpZW5kIGNsYXNzIE5vZGVJbXBsOwogICAgIGZyaWVuZCBjbGFzcyBraHRtbDo6Q1NTU3R5bGVT
ZWxlY3RvcjsKIHB1YmxpYzoKLSAgICBFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKTsKKyAg
ICBFbGVtZW50SW1wbChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudFB0ciAq
ZG9jKTsKICAgICB+RWxlbWVudEltcGwoKTsKIAogICAgIC8vIFVzZWQgdG8gcXVpY2tseSBkZXRl
cm1pbmUgd2hldGhlciBvciBub3QgYW4gZWxlbWVudCBoYXMgYSBnaXZlbiBDU1MgY2xhc3MuCkBA
IC0xODYsMTMgKzE4NywyMiBAQCBwdWJsaWM6CiAgICAgU2hhcmVkUHRyPEF0dHJJbXBsPiBzZXRB
dHRyaWJ1dGVOb2RlTlMoQXR0ckltcGwgKm5ld0F0dHIsIGludCAmZXhjZXB0aW9uKSB7IHJldHVy
biBzZXRBdHRyaWJ1dGVOb2RlKG5ld0F0dHIsIGV4Y2VwdGlvbik7IH0KICAgICBTaGFyZWRQdHI8
QXR0ckltcGw+IHJlbW92ZUF0dHJpYnV0ZU5vZGUoQXR0ckltcGwgKm9sZEF0dHIsIGludCAmZXhj
ZXB0aW9uKTsKICAgICAKLSAgICBET01TdHJpbmcgcHJlZml4KCkgY29uc3QgeyByZXR1cm4gbV9w
cmVmaXg7IH0KLSAgICB2b2lkIHNldFByZWZpeChjb25zdCBET01TdHJpbmcgJl9wcmVmaXgsIGlu
dCAmZXhjZXB0aW9uY29kZSApOwotCiAgICAgdmlydHVhbCBDU1NTdHlsZURlY2xhcmF0aW9uSW1w
bCAqc3R5bGUoKTsKIAorICAgIHZpcnR1YWwgY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSgp
IGNvbnN0IHsgcmV0dXJuIG1fdGFnTmFtZTsgfQorICAgIHZpcnR1YWwgYm9vbCBoYXNUYWdOYW1l
KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUpIGNvbnN0IHsgcmV0dXJuIG1fdGFnTmFtZS5t
YXRjaGVzKHRhZ05hbWUpOyB9CisgICAgCisgICAgLy8gQSBtb3JlIGxpZ2h0d2VpZ2h0IGNoZWNr
IHRoYW4gaGFzVGFnTmFtZS4gIFVzZSB0aGlzIGNoZWNrIHdoZW4geW91IGtub3cgdGhlIG5hbWVz
cGFjZXMgb2YgdGhlIHR3byBRdWFsaWZpZWROYW1lcyBtYXRjaCwgZS5nLiwgdGhhdCB0aGV5J3Jl
CisgICAgLy8gYm90aCBIVE1MIG5hbWVzLgorICAgIGJvb2wgaGFzTG9jYWxOYW1lKGNvbnN0IFF1
YWxpZmllZE5hbWUmIHRhZ05hbWUpIGNvbnN0IHsgcmV0dXJuIG1fdGFnTmFtZS5sb2NhbE5hbWUo
KSA9PSB0YWdOYW1lLmxvY2FsTmFtZSgpOyB9CisgICAgYm9vbCBoYXNMb2NhbE5hbWUoY29uc3Qg
QXRvbWljU3RyaW5nJiBsb2NhbE5hbWUpIGNvbnN0IHsgcmV0dXJuIG1fdGFnTmFtZS5sb2NhbE5h
bWUoKSA9PSBsb2NhbE5hbWU7IH0KKworICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBs
b2NhbE5hbWUoKSBjb25zdCB7IHJldHVybiBtX3RhZ05hbWUubG9jYWxOYW1lKCk7IH0KKyAgICB2
aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4KCkgY29uc3QgeyByZXR1cm4gbV90YWdO
YW1lLnByZWZpeCgpOyB9CisgICAgdmlydHVhbCB2b2lkIHNldFByZWZpeChjb25zdCBBdG9taWNT
dHJpbmcgJl9wcmVmaXgsIGludCAmZXhjZXB0aW9uY29kZSk7CisgICAgdmlydHVhbCBjb25zdCBB
dG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFnTmFtZS5uYW1l
c3BhY2VVUkkoKTsgfQorICAgIAogICAgIC8vIERPTSBtZXRob2RzIG92ZXJyaWRkZW4gZnJvbSAg
cGFyZW50IGNsYXNzZXMKLSAgICB2aXJ0dWFsIERPTVN0cmluZyB0YWdOYW1lKCkgY29uc3Q7CiAg
ICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCBub2RlVHlwZSgpIGNvbnN0OwogICAgIHZpcnR1YWwg
Tm9kZUltcGwgKmNsb25lTm9kZSAoIGJvb2wgZGVlcCApID0gMDsKICAgICB2aXJ0dWFsIERPTVN0
cmluZyBub2RlTmFtZSgpIGNvbnN0OwpAQCAtMjU0LDI5ICsyNjQsNyBAQCBwcml2YXRlOgogCiBw
cm90ZWN0ZWQ6IC8vIG1lbWJlciB2YXJpYWJsZXMKICAgICBtdXRhYmxlIE5hbWVkQXR0ck1hcElt
cGwgKm5hbWVkQXR0ck1hcDsKLSAgICBET01TdHJpbmdJbXBsICptX3ByZWZpeDsKLX07Ci0KLQot
Y2xhc3MgWE1MRWxlbWVudEltcGwgOiBwdWJsaWMgRWxlbWVudEltcGwKLXsKLQotcHVibGljOgot
ICAgIFhNTEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIERPTVN0cmluZ0ltcGwgKl90YWdO
YW1lKTsKLSAgICBYTUxFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCBET01TdHJpbmdJbXBs
ICpfcXVhbGlmaWVkTmFtZSwgRE9NU3RyaW5nSW1wbCAqX25hbWVzcGFjZVVSSSk7Ci0gICAgflhN
TEVsZW1lbnRJbXBsKCk7Ci0KLSAgICAvLyBET00gbWV0aG9kcyBvdmVycmlkZGVuIGZyb20gIHBh
cmVudCBjbGFzc2VzCi0gICAgdmlydHVhbCBET01TdHJpbmcgbmFtZXNwYWNlVVJJKCkgY29uc3Q7
Ci0gICAgdmlydHVhbCBET01TdHJpbmcgbG9jYWxOYW1lKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBO
b2RlSW1wbCAqY2xvbmVOb2RlICggYm9vbCBkZWVwICk7Ci0KLSAgICAvLyBPdGhlciBtZXRob2Rz
IChub3QgcGFydCBvZiBET00pCi0gICAgdmlydHVhbCBib29sIGlzWE1MRWxlbWVudE5vZGUoKSBj
b25zdCB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0IHsgcmV0dXJu
IG1faWQ7IH0KLQotcHJvdGVjdGVkOgotICAgIElkIG1faWQ7CisgICAgUXVhbGlmaWVkTmFtZSBt
X3RhZ05hbWU7CiB9OwogCiAvLyB0aGUgbWFwIG9mIGF0dHJpYnV0ZXMgb2YgYW4gZWxlbWVudApA
QCAtNDE0LDcgKzQwMiw3IEBAIHByaXZhdGU6CiBjbGFzcyBTdHlsZWRFbGVtZW50SW1wbCA6IHB1
YmxpYyBFbGVtZW50SW1wbAogewogcHVibGljOgotICAgIFN0eWxlZEVsZW1lbnRJbXBsKERvY3Vt
ZW50UHRyICpkb2MpOworICAgIFN0eWxlZEVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUm
IHRhZ05hbWUsIERvY3VtZW50UHRyICpkb2MpOwogICAgIHZpcnR1YWwgflN0eWxlZEVsZW1lbnRJ
bXBsKCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNTdHlsZWRFbGVtZW50KCkgY29uc3QgeyByZXR1
cm4gdHJ1ZTsgfQpJbmRleDoga2h0bWwveG1sL2RvbV9ub2RlaW1wbC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwveG1sL2RvbV9ub2RlaW1wbC5jcHAsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuMTU1CmRpZmYgLXUgLXAgLXIxLjE1NSBraHRtbC94bWwvZG9t
X25vZGVpbXBsLmNwcAotLS0ga2h0bWwveG1sL2RvbV9ub2RlaW1wbC5jcHAJMjEgSnVuIDIwMDUg
MTg6MTE6MTAgLTAwMDAJMS4xNTUKKysrIGtodG1sL3htbC9kb21fbm9kZWltcGwuY3BwCTIzIEp1
biAyMDA1IDAxOjExOjIzIC0wMDAwCkBAIC0xNTQsNyArMTU0LDcgQEAgTm9kZUltcGwgKk5vZGVJ
bXBsOjpsYXN0Q2hpbGQoKSBjb25zdAogICByZXR1cm4gMDsKIH0KIAotTm9kZUltcGwgKk5vZGVJ
bXBsOjpsYXN0RGVzY2VuZGVudCgpIGNvbnN0CitOb2RlSW1wbCAqTm9kZUltcGw6Omxhc3REZXNj
ZW5kYW50KCkgY29uc3QKIHsKICAgICBOb2RlSW1wbCAqbiA9IGNvbnN0X2Nhc3Q8Tm9kZUltcGwg
Kj4odGhpcyk7CiAgICAgd2hpbGUgKG4gJiYgbi0+bGFzdENoaWxkKCkpCkBAIC0yMzksMTMgKzIz
OSwxMyBAQCB2b2lkIE5vZGVJbXBsOjpub3JtYWxpemUgKCkKICAgICB9CiB9CiAKLURPTVN0cmlu
ZyBOb2RlSW1wbDo6cHJlZml4KCkgY29uc3QKK2NvbnN0IEF0b21pY1N0cmluZyYgTm9kZUltcGw6
OnByZWZpeCgpIGNvbnN0CiB7CiAgICAgLy8gRm9yIG5vZGVzIG90aGVyIHRoYW4gZWxlbWVudHMg
YW5kIGF0dHJpYnV0ZXMsIHRoZSBwcmVmaXggaXMgYWx3YXlzIG51bGwKLSAgICByZXR1cm4gRE9N
U3RyaW5nKCk7CisgICAgcmV0dXJuIG51bGxBdG9tOwogfQogCi12b2lkIE5vZGVJbXBsOjpzZXRQ
cmVmaXgoY29uc3QgRE9NU3RyaW5nICYvKl9wcmVmaXgqLywgaW50ICZleGNlcHRpb25jb2RlICkK
K3ZvaWQgTm9kZUltcGw6OnNldFByZWZpeChjb25zdCBBdG9taWNTdHJpbmcgJi8qX3ByZWZpeCov
LCBpbnQgJmV4Y2VwdGlvbmNvZGUgKQogewogICAgIC8vIFRoZSBzcGVjIHNheXMgdGhhdCBmb3Ig
bm9kZXMgb3RoZXIgdGhhbiBlbGVtZW50cyBhbmQgYXR0cmlidXRlcywgcHJlZml4IGlzIGFsd2F5
cyBudWxsLgogICAgIC8vIEl0IGRvZXMgbm90IHNheSB3aGF0IHRvIGRvIHdoZW4gdGhlIHVzZXIg
dHJpZXMgdG8gc2V0IHRoZSBwcmVmaXggb24gYW5vdGhlciB0eXBlIG9mCkBAIC0xMDA2LDM5ICsx
MDA2LDI3IEBAIE5vZGVJbXBsICpOb2RlSW1wbDo6dHJhdmVyc2VQcmV2aW91c05vZGUKICAgICBy
ZXR1cm4gMDsKIH0KIAotdm9pZCBOb2RlSW1wbDo6Y2hlY2tTZXRQcmVmaXgoY29uc3QgRE9NU3Ry
aW5nICZfcHJlZml4LCBpbnQgJmV4Y2VwdGlvbmNvZGUpCit2b2lkIE5vZGVJbXBsOjpjaGVja1Nl
dFByZWZpeChjb25zdCBBdG9taWNTdHJpbmcgJl9wcmVmaXgsIGludCAmZXhjZXB0aW9uY29kZSkK
IHsKICAgICAvLyBQZXJmb3JtIGVycm9yIGNoZWNraW5nIGFzIHJlcXVpcmVkIGJ5IHNwZWMgZm9y
IHNldHRpbmcgTm9kZS5wcmVmaXguIFVzZWQgYnkKICAgICAvLyBFbGVtZW50SW1wbDo6c2V0UHJl
Zml4KCkgYW5kIEF0dHJJbXBsOjpzZXRQcmVmaXgoKQogCi0jaWYgMAotICAgIC8vIEZJWE1FOiBB
ZGQgdGhpcyBjaGVjayAoYnV0IG5vdCBpbiBhIHdheSB0aGF0IGRlcGVuZHMgb24gdGhlIEMrKyBE
T00hKQotICAgIC8vIElOVkFMSURfQ0hBUkFDVEVSX0VSUjogUmFpc2VkIGlmIHRoZSBzcGVjaWZp
ZWQgcHJlZml4IGNvbnRhaW5zIGFuIGlsbGVnYWwgY2hhcmFjdGVyLgotICAgIGlmICghRWxlbWVu
dDo6a2h0bWxWYWxpZFByZWZpeChfcHJlZml4KSkgewotICAgICAgICBleGNlcHRpb25jb2RlID0g
RE9NRXhjZXB0aW9uOjpJTlZBTElEX0NIQVJBQ1RFUl9FUlI7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0jZW5kaWYKLQorICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgc3VwcG9ydCBmb3IgSU5WQUxJ
RF9DSEFSQUNURVJfRVJSOiBSYWlzZWQgaWYgdGhlIHNwZWNpZmllZCBwcmVmaXggY29udGFpbnMg
YW4gaWxsZWdhbCBjaGFyYWN0ZXIuCisgICAgCiAgICAgLy8gTk9fTU9ESUZJQ0FUSU9OX0FMTE9X
RURfRVJSOiBSYWlzZWQgaWYgdGhpcyBub2RlIGlzIHJlYWRvbmx5LgogICAgIGlmIChpc1JlYWRP
bmx5KCkpIHsKICAgICAgICAgZXhjZXB0aW9uY29kZSA9IERPTUV4Y2VwdGlvbjo6Tk9fTU9ESUZJ
Q0FUSU9OX0FMTE9XRURfRVJSOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgLy8gTkFN
RVNQQUNFX0VSUjogLSBSYWlzZWQgaWYgdGhlIHNwZWNpZmllZCBwcmVmaXggaXMgbWFsZm9ybWVk
CisgICAgLy8gRklYTUU6IEltcGxlbWVudCBOQU1FU1BBQ0VfRVJSOiAtIFJhaXNlZCBpZiB0aGUg
c3BlY2lmaWVkIHByZWZpeCBpcyBtYWxmb3JtZWQKICAgICAvLyAtIGlmIHRoZSBuYW1lc3BhY2VV
Ukkgb2YgdGhpcyBub2RlIGlzIG51bGwsCiAgICAgLy8gLSBpZiB0aGUgc3BlY2lmaWVkIHByZWZp
eCBpcyAieG1sIiBhbmQgdGhlIG5hbWVzcGFjZVVSSSBvZiB0aGlzIG5vZGUgaXMgZGlmZmVyZW50
IGZyb20KICAgICAvLyAgICJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLAog
ICAgIC8vIC0gaWYgdGhpcyBub2RlIGlzIGFuIGF0dHJpYnV0ZSBhbmQgdGhlIHNwZWNpZmllZCBw
cmVmaXggaXMgInhtbG5zIiBhbmQKICAgICAvLyAgIHRoZSBuYW1lc3BhY2VVUkkgb2YgdGhpcyBu
b2RlIGlzIGRpZmZlcmVudCBmcm9tICJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyIsCiAg
ICAgLy8gLSBvciBpZiB0aGlzIG5vZGUgaXMgYW4gYXR0cmlidXRlIGFuZCB0aGUgcXVhbGlmaWVk
TmFtZSBvZiB0aGlzIG5vZGUgaXMgInhtbG5zIiBbTmFtZXNwYWNlc10uCi0gICAgaWYgKAotI2lm
IDAKLSAgICAgICAgLy8gRklYTUU6IEFkZCB0aGlzIGNoZWNrIChidXQgbm90IGluIGEgd2F5IHRo
YXQgZGVwZW5kcyBvbiB0aGUgQysrIERPTSEpCi0gICAgICAgIEVsZW1lbnQ6OmtodG1sTWFsZm9y
bWVkUHJlZml4KF9wcmVmaXgpIHx8Ci0jZW5kaWYKLSAgICAgICAgKG5hbWVzcGFjZVBhcnQoaWQo
KSkgPT0gbm9OYW1lc3BhY2UgJiYgaWQoKSA+IElEX0xBU1RfVEFHKSB8fAorICAgIGlmICgobmFt
ZXNwYWNlUGFydChpZCgpKSA9PSBub05hbWVzcGFjZSAmJiBpZCgpID4gSURfTEFTVF9UQUcpIHx8
CiAgICAgICAgIChfcHJlZml4ID09ICJ4bWwiICYmIERPTVN0cmluZyhnZXREb2N1bWVudCgpLT5u
YW1lc3BhY2VVUkkoaWQoKSkpICE9ICJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3Bh
Y2UiKSkgewogICAgICAgICBleGNlcHRpb25jb2RlID0gRE9NRXhjZXB0aW9uOjpOQU1FU1BBQ0Vf
RVJSOwogICAgICAgICByZXR1cm47CkluZGV4OiBraHRtbC94bWwvZG9tX25vZGVpbXBsLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwveG1sL2RvbV9ub2RlaW1w
bC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjg2CmRpZmYgLXUgLXAgLXIxLjg2IGtodG1sL3ht
bC9kb21fbm9kZWltcGwuaAotLS0ga2h0bWwveG1sL2RvbV9ub2RlaW1wbC5oCTE3IEp1biAyMDA1
IDAyOjEzOjEyIC0wMDAwCTEuODYKKysrIGtodG1sL3htbC9kb21fbm9kZWltcGwuaAkyMyBKdW4g
MjAwNSAwMToxMToyNCAtMDAwMApAQCAtNTksNiArNTksNyBAQCBjbGFzcyBFdmVudEltcGw7CiBj
bGFzcyBFdmVudExpc3RlbmVyOwogY2xhc3MgTm9kZUxpc3RJbXBsOwogY2xhc3MgTmFtZWRBdHRy
TWFwSW1wbDsKK2NsYXNzIFF1YWxpZmllZE5hbWU7CiBjbGFzcyBSZWdpc3RlcmVkRXZlbnRMaXN0
ZW5lcjsKIAogLy8gVGhlIG5hbWVzcGFjZSB1c2VkIGZvciBYSFRNTCBlbGVtZW50cwpAQCAtMTAy
LDYgKzEwMyw3IEBAIHB1YmxpYzoKICAgICBNQUlOX1RIUkVBRF9BTExPQ0FURUQ7CiAKICAgICAv
LyBET00gbWV0aG9kcyAmIGF0dHJpYnV0ZXMgZm9yIE5vZGUKKyAgICB2aXJ0dWFsIGJvb2wgaGFz
VGFnTmFtZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQogICAgIHZpcnR1YWwgRE9NU3RyaW5nIG5vZGVOYW1lKCkgY29uc3QgPSAwOwogICAgIHZp
cnR1YWwgRE9NU3RyaW5nIG5vZGVWYWx1ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBzZXRO
b2RlVmFsdWUoIGNvbnN0IERPTVN0cmluZyAmX25vZGVWYWx1ZSwgaW50ICZleGNlcHRpb25jb2Rl
ICk7CkBAIC0xMjIsMTQgKzEyNCwxNCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHJlbW92
ZShpbnQgJmV4Y2VwdGlvbmNvZGUpOwogICAgIHZpcnR1YWwgYm9vbCBoYXNDaGlsZE5vZGVzICgg
ICkgY29uc3Q7CiAgICAgdmlydHVhbCBOb2RlSW1wbCAqY2xvbmVOb2RlICggYm9vbCBkZWVwICkg
PSAwOwotICAgIHZpcnR1YWwgRE9NU3RyaW5nIGxvY2FsTmFtZSgpIGNvbnN0OwotICAgIHZpcnR1
YWwgRE9NU3RyaW5nIG5hbWVzcGFjZVVSSSgpIGNvbnN0OwotICAgIHZpcnR1YWwgRE9NU3RyaW5n
IHByZWZpeCgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBzZXRQcmVmaXgoY29uc3QgRE9NU3Ry
aW5nICZfcHJlZml4LCBpbnQgJmV4Y2VwdGlvbmNvZGUgKTsKKyAgICB2aXJ0dWFsIGNvbnN0IEF0
b21pY1N0cmluZyYgbG9jYWxOYW1lKCkgY29uc3Q7CisgICAgdmlydHVhbCBjb25zdCBBdG9taWNT
dHJpbmcmIG5hbWVzcGFjZVVSSSgpIGNvbnN0OworICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3Ry
aW5nJiBwcmVmaXgoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UHJlZml4KGNvbnN0IEF0
b21pY1N0cmluZyAmX3ByZWZpeCwgaW50ICZleGNlcHRpb25jb2RlKTsKICAgICB2b2lkIG5vcm1h
bGl6ZSAoKTsKICAgICBzdGF0aWMgYm9vbCBpc1N1cHBvcnRlZChjb25zdCBET01TdHJpbmcgJmZl
YXR1cmUsIGNvbnN0IERPTVN0cmluZyAmdmVyc2lvbik7CiAKLSAgICBOb2RlSW1wbCAqbGFzdERl
c2NlbmRlbnQoKSBjb25zdDsKKyAgICBOb2RlSW1wbCAqbGFzdERlc2NlbmRhbnQoKSBjb25zdDsK
IAogICAgIC8vIE90aGVyIG1ldGhvZHMgKG5vdCBwYXJ0IG9mIERPTSkKICAgICB2aXJ0dWFsIGJv
b2wgaXNFbGVtZW50Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CkBAIC0xMzcsNiArMTM5
LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpc1N0eWxlZEVsZW1lbnQoKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0F0dHJpYnV0ZU5vZGUoKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1RleHROb2RlKCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNDb21tZW50Tm9kZSgpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzRG9jdW1lbnROb2RlKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNYTUxFbGVtZW50Tm9kZSgp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgYm9vbCBpc0Jsb2NrRmxvdygpIGNvbnN0OwpA
QCAtMTk4LDI1ICsyMDEsOCBAQCBwdWJsaWM6CiAgICAgLy8gdW50aWwgdGhleSBrbm93IGFsbCBv
ZiB0aGVpciBuZXN0ZWQgPHBhcmFtPnMuIFszNjAzMTkxLCA0MDQwODQ4XQogICAgIHZpcnR1YWwg
dm9pZCBjbG9zZVJlbmRlcmVyKCkgeyB9CiAKLSAgICB0eXBlZGVmIFFfVUlOVDMyIElkOwotICAg
IC8vIGlkKCkgaXMgdXNlZCB0byBlYXNpbHkgYW5kIGV4YWN0bHkgaWRlbnRpZnkgYSBub2RlLiBJ
dAotICAgIC8vIGlzIG9wdGltaXplZCBmb3IgcXVpY2sgY29tcGFyaXNvbiBhbmQgbG93IG1lbW9y
eSBjb25zdW1wdGlvbi4KLSAgICAvLyBpdHMgdmFsdWUgZGVwZW5kcyBvbiB0aGUgb3duZXIgZG9j
dW1lbnQgb2YgdGhlIG5vZGUgYW5kIGlzCi0gICAgLy8gY2F0ZWdvcml6ZWQgaW4gdGhlIGZvbGxv
d2luZyB3YXk6Ci0gICAgLy8gMS4uSURfTEFTVF9UQUc6IHRoZSBub2RlIGluaGVyaXRzIEhUTUxF
bGVtZW50SW1wbCBhbmQgaXMKLSAgICAvLyAgICAgICAgICAgICAgICAgcGFydCBvZiB0aGUgSFRN
TCBuYW1lc3BhY2UuCi0gICAgLy8gICAgICAgICAgICAgICAgIFRoZSBIVE1MIG5hbWVzcGFjZSBp
cyBlaXRoZXIgdGhlIGdsb2JhbAotICAgIC8vICAgICAgICAgICAgICAgICBvbmUgKG5vIG5hbWVz
cGFjZSkgb3IgdGhlIFhIVE1MIG5hbWVzcGFjZQotICAgIC8vICAgICAgICAgICAgICAgICBkZXBl
bmRpbmcgb24gdGhlIG93bmVyIGRvY3VtZW50J3MgZG9jdHlwZQotICAgIC8vIElEX0xBU1RfVEFH
KzEuLjB4ZmZmZjogbm9uLUhUTUwgZWxlbWVudHMgaW4gdGhlIGdsb2JhbCBuYW1lc3BhY2UKLSAg
ICAvLyBvdGhlcnMgICAgICAgbm9uLUhUTUwgZWxlbWVudHMgaW4gYSBuYW1lc3BhY2UuCi0gICAg
Ly8gICAgICAgICAgICAgICAgIHRoZSB1cHBlciAxNiBiaXQgaWRlbnRpZnkgdGhlIG5hbWVzcGFj
ZQotICAgIC8vICAgICAgICAgICAgICAgICB0aGUgbG93ZXIgMTYgYml0IGlkZW50aWZ5IHRoZSBs
b2NhbCBwYXJ0IG9mIHRoZQotICAgIC8vICAgICAgICAgICAgICAgICBxdWFsaWZpZWQgZWxlbWVu
dCBuYW1lLgotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdCB7IHJldHVybiAwOyB9OwotI2lmIEFQ
UExFX0NIQU5HRVMKLSAgICBJZCBpZGVudGlmaWVyKCkgY29uc3Q7Ci0jZW5kaWYKKyAgICB0eXBl
ZGVmIFFfVUlOVDMyIElkOyAvLyBGSVhNRTogWWFuayB0aGlzIG9uY2UgYXR0cmlidXRlcyBhcmUg
YWxzbyBzd2l0Y2hlZCBvdmVyLgorCiAgICAgZW51bSBNb3VzZUV2ZW50VHlwZSB7CiAgICAgICAg
IE1vdXNlUHJlc3MsCiAgICAgICAgIE1vdXNlUmVsZWFzZSwKQEAgLTI3OCw4ICsyNjQsNiBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlzS2V5Ym9hcmRGb2N1c2FibGUoKSBjb25zdDsKICAg
ICB2aXJ0dWFsIGJvb2wgaXNNb3VzZUZvY3VzYWJsZSgpIGNvbnN0OwogICAgIAotICAgIHZpcnR1
YWwgYm9vbCBpc0lubGluZSgpIGNvbnN0OwotICAgIAogICAgIHZpcnR1YWwgYm9vbCBpc0NvbnRl
bnRFZGl0YWJsZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgUVJlY3QgZ2V0UmVjdCgpIGNvbnN0Owog
CkBAIC0zNjksNyArMzUzLDcgQEAgcHVibGljOgogICAgIGtodG1sOjpSZW5kZXJPYmplY3QgKnBy
ZXZpb3VzUmVuZGVyZXIoKTsKICAgICB2b2lkIHNldFJlbmRlcmVyKGtodG1sOjpSZW5kZXJPYmpl
Y3QqIHJlbmRlcmVyKSB7IG1fcmVuZGVyID0gcmVuZGVyZXI7IH0KICAgICAKLSAgICB2b2lkIGNo
ZWNrU2V0UHJlZml4KGNvbnN0IERPTVN0cmluZyAmX3ByZWZpeCwgaW50ICZleGNlcHRpb25jb2Rl
KTsKKyAgICB2b2lkIGNoZWNrU2V0UHJlZml4KGNvbnN0IEF0b21pY1N0cmluZyAmX3ByZWZpeCwg
aW50ICZleGNlcHRpb25jb2RlKTsKICAgICB2b2lkIGNoZWNrQWRkQ2hpbGQoTm9kZUltcGwgKm5l
d0NoaWxkLCBpbnQgJmV4Y2VwdGlvbmNvZGUpOwogICAgIGJvb2wgaXNBbmNlc3Rvcihjb25zdCBO
b2RlSW1wbCAqKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgY2hpbGRBbGxvd2VkKCBOb2RlSW1w
bCAqbmV3Q2hpbGQgKTsKSW5kZXg6IGtodG1sL3htbC9kb21fcW5hbWUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3htbC9kb21fcW5hbWUuY3BwLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjIKZGlmZiAtdSAtcCAtcjEuMiBraHRtbC94bWwvZG9tX3FuYW1l
LmNwcAotLS0ga2h0bWwveG1sL2RvbV9xbmFtZS5jcHAJMTYgSnVuIDIwMDUgMjE6MDY6NDYgLTAw
MDAJMS4yCisrKyBraHRtbC94bWwvZG9tX3FuYW1lLmNwcAkyMyBKdW4gMjAwNSAwMToxMToyNCAt
MDAwMApAQCAtODgsNyArODgsNyBAQCBjb25zdCBRdWFsaWZpZWROYW1lJiBRdWFsaWZpZWROYW1l
OjpvcGVyCiAKIHZvaWQgUXVhbGlmaWVkTmFtZTo6ZGVyZWYoKQogewotICAgIGlmIChtX2ltcGwt
PnJlZkNvdW50KCkgPT0gMSkgeworICAgIGlmIChtX2ltcGwtPmhhc09uZVJlZigpKSB7CiAgICAg
ICAgIC8vIEJlZm9yZSBkZWNyZW1lbnRpbmcgdGhlIHJlZiB0byAwLCByZW1vdmUgb3Vyc2VsdmVz
IGZyb20gdGhlIGhhc2ggdGFibGUuCiAgICAgICAgIFFQdHJEaWN0PFFQdHJEaWN0PFF1YWxpZmll
ZE5hbWVJbXBsPiA+KiBuYW1lc3BhY2VEaWN0ID0gMDsKICAgICAgICAgUVB0ckRpY3Q8UXVhbGlm
aWVkTmFtZUltcGw+KiBwcmVmaXhEaWN0ID0gMDsKSW5kZXg6IGtodG1sL3htbC9kb21fdGV4dGlt
cGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC94bWwvZG9t
X3RleHRpbXBsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTYKZGlmZiAtdSAtcCAtcjEuMTYg
a2h0bWwveG1sL2RvbV90ZXh0aW1wbC5oCi0tLSBraHRtbC94bWwvZG9tX3RleHRpbXBsLmgJMTAg
TWF5IDIwMDUgMjE6NTk6MTUgLTAwMDAJMS4xNgorKysga2h0bWwveG1sL2RvbV90ZXh0aW1wbC5o
CTIzIEp1biAyMDA1IDAxOjExOjI0IC0wMDAwCkBAIC0xMDAsOCArMTAwLDcgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgTm9kZUltcGwgKmNsb25lTm9kZShib29sIGRlZXApOwogCiAgICAgLy8gT3Ro
ZXIgbWV0aG9kcyAobm90IHBhcnQgb2YgRE9NKQotCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0
OworICAgIHZpcnR1YWwgYm9vbCBpc0NvbW1lbnROb2RlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsg
fQogICAgIHZpcnR1YWwgYm9vbCBjaGlsZFR5cGVBbGxvd2VkKCB1bnNpZ25lZCBzaG9ydCB0eXBl
ICk7CiAKICAgICB2aXJ0dWFsIERPTVN0cmluZyB0b1N0cmluZygpIGNvbnN0OwpAQCAtMTI4LDcg
KzEyNyw2IEBAIHB1YmxpYzoKICAgICAvLyBPdGhlciBtZXRob2RzIChub3QgcGFydCBvZiBET00p
CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNUZXh0Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0K
LSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaCgpOwog
ICAgIHZpcnR1YWwgYm9vbCByZW5kZXJlcklzTmVlZGVkKGtodG1sOjpSZW5kZXJTdHlsZSAqKTsK
ICAgICB2aXJ0dWFsIGtodG1sOjpSZW5kZXJPYmplY3QgKmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFy
ZW5hICosIGtodG1sOjpSZW5kZXJTdHlsZSAqKTsKSW5kZXg6IGtodG1sL3htbC94bWxfbmFtZXNw
YWNlX3RhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiBraHRtbC94bWwveG1sX25hbWVzcGFj
ZV90YWJsZS5jcHAKZGlmZiAtTiBraHRtbC94bWwveG1sX25hbWVzcGFjZV90YWJsZS5jcHAKLS0t
IGtodG1sL3htbC94bWxfbmFtZXNwYWNlX3RhYmxlLmNwcAkyNiBKYW4gMjAwNCAyMjozMzoxOSAt
MDAwMAkxLjEKKysrIC9kZXYvbnVsbAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCkBAIC0xLDc5
ICswLDAgQEAKLS8qKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERPTSBpbXBsZW1lbnRh
dGlvbiBmb3IgS0RFLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNCBBcHBsZSBDb21wdXRlciwg
SW5jLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQ
bGFjZSAtIFN1aXRlIDMzMCwKLSAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgotICovCi0K
LSNpbmNsdWRlICJ4bWxfbmFtZXNwYWNlX3RhYmxlLmgiCi0jaW5jbHVkZSAiZG9tX25vZGVpbXBs
LmgiCi0KLW5hbWVzcGFjZSBET00KLXsKLQotUURpY3Q8WG1sTmFtZXNwYWNlRW50cnk+KiBYbWxO
YW1lc3BhY2VUYWJsZTo6Z05hbWVzcGFjZVRhYmxlID0gMDsKLQotaW50IFhtbE5hbWVzcGFjZVRh
YmxlOjpnZXROYW1lc3BhY2VJRChjb25zdCBET01TdHJpbmcmIHVyaSwgYm9vbCByZWFkb25seSkK
LXsKLSAgICBpZiAodXJpID09IFhIVE1MX05BTUVTUEFDRSkKLSAgICAgICAgcmV0dXJuIHhodG1s
TmFtZXNwYWNlOwotICAgIAotICAgIGlmICh1cmkuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4g
bm9OYW1lc3BhY2U7Ci0gICAgCi0gICAgUVN0cmluZyB1cmlTdHIgPSB1cmkuc3RyaW5nKCk7Ci0K
LSAgICBpZiAoIWdOYW1lc3BhY2VUYWJsZSkgewotICAgICAgICBnTmFtZXNwYWNlVGFibGUgPSBu
ZXcgUURpY3Q8WG1sTmFtZXNwYWNlRW50cnk+OwotICAgICAgICBnTmFtZXNwYWNlVGFibGUtPmlu
c2VydChYSFRNTF9OQU1FU1BBQ0UsIG5ldyBYbWxOYW1lc3BhY2VFbnRyeSh4aHRtbE5hbWVzcGFj
ZSwgWEhUTUxfTkFNRVNQQUNFKSk7Ci0gICAgfQotICAgIAotICAgIFhtbE5hbWVzcGFjZUVudHJ5
KiBucyA9IGdOYW1lc3BhY2VUYWJsZS0+ZmluZCh1cmlTdHIpOwotICAgIGlmIChucykgcmV0dXJu
IG5zLT5tX2lkOwotICAgIAotICAgIGlmICghcmVhZG9ubHkpIHsKLSAgICAgICAgc3RhdGljIGlu
dCBpZCA9IHhodG1sTmFtZXNwYWNlKzE7Ci0gICAgICAgIG5zID0gbmV3IFhtbE5hbWVzcGFjZUVu
dHJ5KGlkKyssIHVyaSk7Ci0gICAgICAgIGdOYW1lc3BhY2VUYWJsZS0+aW5zZXJ0KHVyaVN0ciwg
bnMpOwotICAgICAgICByZXR1cm4gbnMtPm1faWQ7Ci0gICAgfQotICAgIAotICAgIHJldHVybiAt
MTsKLX0KLQotRE9NU3RyaW5nIFhtbE5hbWVzcGFjZVRhYmxlOjpnZXROYW1lc3BhY2VVUkkoaW50
IGlkKQotewotICAgIGlmIChpZCA9PSBub05hbWVzcGFjZSB8fCBpZCA9PSBhbnlOYW1lc3BhY2Ug
fHwgIWdOYW1lc3BhY2VUYWJsZSkKLSAgICAgICAgcmV0dXJuICIiOwotCi0gICAgaWYgKCFnTmFt
ZXNwYWNlVGFibGUpIHsKLSAgICAgICAgZ05hbWVzcGFjZVRhYmxlID0gbmV3IFFEaWN0PFhtbE5h
bWVzcGFjZUVudHJ5PjsKLSAgICAgICAgZ05hbWVzcGFjZVRhYmxlLT5pbnNlcnQoWEhUTUxfTkFN
RVNQQUNFLCBuZXcgWG1sTmFtZXNwYWNlRW50cnkoeGh0bWxOYW1lc3BhY2UsIFhIVE1MX05BTUVT
UEFDRSkpOwotICAgIH0KLSAgICAKLSAgICAvLyBIYXZlIHRvIGl0ZXJhdGUgb3ZlciB0aGUgZGlj
dGlvbmFyeSBlbnRyaWVzIGxvb2tpbmcgZm9yIGEgbWF0Y2guCi0gICAgLy8gKFRoaXMgc2hvdWxk
IGJlIG9rLCBzaW5jZSB0aGlzIGlzIG5vdCB0aGUgY29tbW9uIGRpcmVjdGlvbi4pCi0gICAgUURp
Y3RJdGVyYXRvcjxYbWxOYW1lc3BhY2VFbnRyeT4gaXQoKmdOYW1lc3BhY2VUYWJsZSk7Ci0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGl0LmNvdW50KCk7IGkrKywgKytpdCkgewotICAgICAg
ICBpZiAoaXQuY3VycmVudCgpLT5tX2lkID09IGlkKQotICAgICAgICAgICAgcmV0dXJuIGl0LmN1
cnJlbnQoKS0+bV91cmk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiAiIjsKLX0KLQotfQpJbmRl
eDoga2h0bWwveG1sL3htbF9uYW1lc3BhY2VfdGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiBr
aHRtbC94bWwveG1sX25hbWVzcGFjZV90YWJsZS5oCmRpZmYgLU4ga2h0bWwveG1sL3htbF9uYW1l
c3BhY2VfdGFibGUuaAotLS0ga2h0bWwveG1sL3htbF9uYW1lc3BhY2VfdGFibGUuaAkyNiBKYW4g
MjAwNCAyMjozMzoxOSAtMDAwMAkxLjEKKysrIC9kZXYvbnVsbAkxIEphbiAxOTcwIDAwOjAwOjAw
IC0wMDAwCkBAIC0xLDQ2ICswLDAgQEAKLS8qKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNCBB
cHBsZSBDb21wdXRlciwgSW5jLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKLSAqIEJvc3RvbiwgTUEgMDIxMTEtMTMw
NywgVVNBLgotICovCi0KLSNpbmNsdWRlIDxxZGljdC5oPgotI2luY2x1ZGUgImRvbS9kb21fc3Ry
aW5nLmgiCi0KLW5hbWVzcGFjZSBET00KLXsgICAgCi1zdHJ1Y3QgWG1sTmFtZXNwYWNlRW50cnk7
Ci0KLWNsYXNzIFhtbE5hbWVzcGFjZVRhYmxlCi17Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGludCBn
ZXROYW1lc3BhY2VJRChjb25zdCBET01TdHJpbmcmIHVyaSwgYm9vbCByZWFkb25seSA9IHRydWUp
OwotICAgIHN0YXRpYyBET01TdHJpbmcgZ2V0TmFtZXNwYWNlVVJJKGludCBpZCk7Ci0gICAgCi0g
ICAgc3RhdGljIFFEaWN0PFhtbE5hbWVzcGFjZUVudHJ5PiogZ05hbWVzcGFjZVRhYmxlOwotfTsK
LQotc3RydWN0IFhtbE5hbWVzcGFjZUVudHJ5Ci17Ci0gICAgWG1sTmFtZXNwYWNlRW50cnkoaW50
IGlkLCBjb25zdCBET01TdHJpbmcmIHVyaSkgOm1faWQoaWQpLCBtX3VyaSh1cmkpIHt9Ci0gICAg
Ci0gICAgaW50IG1faWQ7Ci0gICAgRE9NU3RyaW5nIG1fdXJpOwotfTsKLQotfQpJbmRleDoga3dx
L0RPTS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3EvRE9NLm1t
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjM2CmRpZmYgLXUgLXAgLXIxLjM2IGt3cS9ET00ubW0K
LS0tIGt3cS9ET00ubW0JMTkgTWF5IDIwMDUgMTg6MzI6MjcgLTAwMDAJMS4zNgorKysga3dxL0RP
TS5tbQkyMyBKdW4gMjAwNSAwMToxMToyNSAtMDAwMApAQCAtMzM4LDcgKzMzOCw4IEBAIHVzaW5n
IGtodG1sOjpTaGFyZWRQdHI7CiAgICAgQVNTRVJUKHByZWZpeCk7CiAKICAgICBpbnQgZXhjZXB0
aW9uQ29kZSA9IDA7Ci0gICAgW3NlbGYgX25vZGVJbXBsXS0+c2V0UHJlZml4KHByZWZpeCwgZXhj
ZXB0aW9uQ29kZSk7CisgICAgRE9NU3RyaW5nIHByZWZpeFN0cihwcmVmaXgpOworICAgIFtzZWxm
IF9ub2RlSW1wbF0tPnNldFByZWZpeChwcmVmaXhTdHIuaW1wbGVtZW50YXRpb24oKSwgZXhjZXB0
aW9uQ29kZSk7CiAgICAgcmFpc2VPbkRPTUVycm9yKGV4Y2VwdGlvbkNvZGUpOwogfQogCkluZGV4
OiBrd3EvS1dRRE9NTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZToga3dxL0tXUURPTU5vZGUu
Y3BwCmRpZmYgLU4ga3dxL0tXUURPTU5vZGUuY3BwCi0tLSBrd3EvS1dRRE9NTm9kZS5jcHAJMTEg
SnVsIDIwMDMgMTY6MjQ6MzcgLTAwMDAJMS45CisrKyAvZGV2L251bGwJMSBKYW4gMTk3MCAwMDow
MDowMCAtMDAwMApAQCAtMSwzNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDAzIEFw
cGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRl
ICJLV1FET01Ob2RlLmgiCi0KLXVzaW5nIERPTTo6Tm9kZUltcGw7Ci0KLS8vIFRoaXMgbmVlZHMg
dG8gYmUgaW4gYSBDKysgc291cmNlIGZpbGUgYmVjYXVzZSBpZCBpcyBhIHJlc2VydmVkIHdvcmQg
aW4gT2JqZWN0aXZlLUMrKy4KLU5vZGVJbXBsOjpJZCBpZEZyb21Ob2RlKE5vZGVJbXBsICpub2Rl
KQotewotICAgIHJldHVybiBub2RlLT5pZCgpOwotfQpJbmRleDoga3dxL0tXUURPTU5vZGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiBrd3EvS1dRRE9NTm9kZS5oCmRpZmYgLU4ga3dxL0tXUURPTU5v
ZGUuaAotLS0ga3dxL0tXUURPTU5vZGUuaAkxMSBKdWwgMjAwMyAxNjoyNDozNyAtMDAwMAkxLjUK
KysrIC9kZXYvbnVsbAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCkBAIC0xLDI4ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImRvbV9ub2RlaW1wbC5oIgotCi1ET006Ok5v
ZGVJbXBsOjpJZCBpZEZyb21Ob2RlKERPTTo6Tm9kZUltcGwgKik7CkluZGV4OiBrd3EvS1dRS0hU
TUxQYXJ0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9LV1FL
SFRNTFBhcnQubW0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNjQzCmRpZmYgLXUgLXAgLXIxLjY0
MyBrd3EvS1dRS0hUTUxQYXJ0Lm1tCi0tLSBrd3EvS1dRS0hUTUxQYXJ0Lm1tCTI2IE1heSAyMDA1
IDIwOjMwOjEyIC0wMDAwCTEuNjQzCisrKyBrd3EvS1dRS0hUTUxQYXJ0Lm1tCTIzIEp1biAyMDA1
IDAxOjExOjMxIC0wMDAwCkBAIC0yOCw3ICsyOCw2IEBACiAjaW1wb3J0ICJET01JbnRlcm5hbC5o
IgogCiAjaW1wb3J0ICJLV1FDbGlwYm9hcmQuaCIKLSNpbXBvcnQgIktXUURPTU5vZGUuaCIKICNp
bXBvcnQgIktXUUR1bW15Vmlldy5oIgogI2ltcG9ydCAiS1dRRWRpdENvbW1hbmQuaCIKICNpbXBv
cnQgIktXUUV4Y2VwdGlvbnMuaCIKQEAgLTEwMCw2ICs5OSw3IEBAIHVzaW5nIERPTTo6SFRNTEVs
ZW1lbnRJbXBsOwogdXNpbmcgRE9NOjpIVE1MRm9ybUVsZW1lbnRJbXBsOwogdXNpbmcgRE9NOjpI
VE1MRnJhbWVFbGVtZW50SW1wbDsKIHVzaW5nIERPTTo6SFRNTEdlbmVyaWNGb3JtRWxlbWVudElt
cGw7Cit1c2luZyBET006OkhUTUxOYW1lczsKIHVzaW5nIERPTTo6SFRNTFRhYmxlQ2VsbEVsZW1l
bnRJbXBsOwogdXNpbmcgRE9NOjpOb2RlOwogdXNpbmcgRE9NOjpOb2RlSW1wbDsKQEAgLTM2MSwx
MyArMzYxLDEyIEBAIHN0YXRpYyBIVE1MRm9ybUVsZW1lbnRJbXBsICpzY2FuRm9yRm9ybSgKIHsK
ICAgICBOb2RlSW1wbCAqbjsKICAgICBmb3IgKG4gPSBzdGFydDsgbjsgbiA9IG4tPnRyYXZlcnNl
TmV4dE5vZGUoKSkgewotICAgICAgICBOb2RlSW1wbDo6SWQgbm9kZUlEID0gaWRGcm9tTm9kZShu
KTsKLSAgICAgICAgaWYgKG5vZGVJRCA9PSBJRF9GT1JNKSB7CisgICAgICAgIGlmIChuLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6Zm9ybSgpKSkgewogICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PEhUTUxGb3JtRWxlbWVudEltcGwgKj4obik7CiAgICAgICAgIH0gZWxzZSBpZiAobi0+aXNI
VE1MRWxlbWVudCgpCiAgICAgICAgICAgICAgICAgICAgJiYgc3RhdGljX2Nhc3Q8SFRNTEVsZW1l
bnRJbXBsICo+KG4pLT5pc0dlbmVyaWNGb3JtRWxlbWVudCgpKSB7CiAgICAgICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8SFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwgKj4obiktPmZvcm0oKTsK
LSAgICAgICAgfSBlbHNlIGlmIChub2RlSUQgPT0gSURfRlJBTUUgfHwgbm9kZUlEID09IElEX0lG
UkFNRSkgeworICAgICAgICB9IGVsc2UgaWYgKG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpmcmFt
ZSgpKSB8fCBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aWZyYW1lKCkpKSB7CiAgICAgICAgICAg
ICBOb2RlSW1wbCAqY2hpbGREb2MgPSBzdGF0aWNfY2FzdDxIVE1MRnJhbWVFbGVtZW50SW1wbCAq
PihuKS0+Y29udGVudERvY3VtZW50KCk7CiAgICAgICAgICAgICBIVE1MRm9ybUVsZW1lbnRJbXBs
ICpmcmFtZVJlc3VsdCA9IHNjYW5Gb3JGb3JtKGNoaWxkRG9jKTsKICAgICAgICAgICAgIGlmIChm
cmFtZVJlc3VsdCkgewpAQCAtMzkwLDcgKzM4OSw3IEBAIEhUTUxGb3JtRWxlbWVudEltcGwgKktX
UUtIVE1MUGFydDo6Y3VycmUKICAgICAvLyB0cnkgd2Fsa2luZyB1cCB0aGUgbm9kZSB0cmVlIHRv
IGZpbmQgYSBmb3JtIGVsZW1lbnQKICAgICBOb2RlSW1wbCAqbjsKICAgICBmb3IgKG4gPSBzdGFy
dDsgbjsgbiA9IG4tPnBhcmVudE5vZGUoKSkgewotICAgICAgICBpZiAoaWRGcm9tTm9kZShuKSA9
PSBJRF9GT1JNKSB7CisgICAgICAgIGlmIChuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Zm9ybSgp
KSkgewogICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudEltcGwg
Kj4obik7CiAgICAgICAgIH0gZWxzZSBpZiAobi0+aXNIVE1MRWxlbWVudCgpCiAgICAgICAgICAg
ICAgICAgICAgJiYgc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KG4pLT5pc0dlbmVyaWNG
b3JtRWxlbWVudCgpKSB7CkBAIC00ODksOCArNDg4LDcgQEAgTlNTdHJpbmcgKktXUUtIVE1MUGFy
dDo6c2VhcmNoRm9yTGFiZWxzQQogICAgICAgICBpZiAoYWJvdmVDZWxsKSB7CiAgICAgICAgICAg
ICAvLyBzZWFyY2ggd2l0aGluIHRoZSBhYm92ZSBjZWxsIHdlIGZvdW5kIGZvciBhIG1hdGNoCiAg
ICAgICAgICAgICBmb3IgKE5vZGVJbXBsICpuID0gYWJvdmVDZWxsLT5maXJzdENoaWxkKCk7IG47
IG4gPSBuLT50cmF2ZXJzZU5leHROb2RlKGFib3ZlQ2VsbCkpIHsKLSAgICAgICAgICAgICAgICBp
ZiAoaWRGcm9tTm9kZShuKSA9PSBJRF9URVhUCi0gICAgICAgICAgICAgICAgICAgICYmIG4tPnJl
bmRlcmVyKCkgJiYgbi0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lC
TEUpCisgICAgICAgICAgICAgICAgaWYgKG4tPmlzVGV4dE5vZGUoKSAmJiBuLT5yZW5kZXJlcigp
ICYmIG4tPnJlbmRlcmVyKCktPnN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFKQogICAg
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgLy8gRm9yIGVhY2ggdGV4dCBjaHVu
aywgcnVuIHRoZSByZWdleHAKICAgICAgICAgICAgICAgICAgICAgUVN0cmluZyBub2RlU3RyaW5n
ID0gbi0+bm9kZVZhbHVlKCkuc3RyaW5nKCk7CkBAIC01MjUsMjMgKzUyMywyMSBAQCBOU1N0cmlu
ZyAqS1dRS0hUTUxQYXJ0OjpzZWFyY2hGb3JMYWJlbHNCCiAgICAgICAgICBuICYmIGxlbmd0aFNl
YXJjaGVkIDwgY2hhcnNTZWFyY2hlZFRocmVzaG9sZDsKICAgICAgICAgIG4gPSBuLT50cmF2ZXJz
ZVByZXZpb3VzTm9kZSgpKQogICAgIHsKLSAgICAgICAgTm9kZUltcGw6OklkIG5vZGVJRCA9IGlk
RnJvbU5vZGUobik7Ci0gICAgICAgIGlmIChub2RlSUQgPT0gSURfRk9STQorICAgICAgICBpZiAo
bi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZvcm0oKSkKICAgICAgICAgICAgIHx8IChuLT5pc0hU
TUxFbGVtZW50KCkKICAgICAgICAgICAgICAgICAmJiBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudElt
cGwgKj4obiktPmlzR2VuZXJpY0Zvcm1FbGVtZW50KCkpKQogICAgICAgICB7CiAgICAgICAgICAg
ICAvLyBXZSBoaXQgYW5vdGhlciBmb3JtIGVsZW1lbnQgb3IgdGhlIHN0YXJ0IG9mIHRoZSBmb3Jt
IC0gYmFpbCBvdXQKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9IGVsc2UgaWYgKG5vZGVJ
RCA9PSBJRF9URCAmJiAhc3RhcnRpbmdUYWJsZUNlbGwpIHsKKyAgICAgICAgfSBlbHNlIGlmIChu
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGQoKSkgJiYgIXN0YXJ0aW5nVGFibGVDZWxsKSB7CiAg
ICAgICAgICAgICBzdGFydGluZ1RhYmxlQ2VsbCA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZUNlbGxF
bGVtZW50SW1wbCAqPihuKTsKLSAgICAgICAgfSBlbHNlIGlmIChub2RlSUQgPT0gSURfVFIgJiYg
c3RhcnRpbmdUYWJsZUNlbGwpIHsKKyAgICAgICAgfSBlbHNlIGlmIChuLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6dHIoKSkgJiYgc3RhcnRpbmdUYWJsZUNlbGwpIHsKICAgICAgICAgICAgIE5TU3Ry
aW5nICpyZXN1bHQgPSBzZWFyY2hGb3JMYWJlbHNBYm92ZUNlbGwocmVnRXhwLCBzdGFydGluZ1Rh
YmxlQ2VsbCk7CiAgICAgICAgICAgICBpZiAocmVzdWx0KSB7CiAgICAgICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHNlYXJjaGVkQ2VsbEFib3Zl
ID0gdHJ1ZTsKLSAgICAgICAgfSBlbHNlIGlmIChub2RlSUQgPT0gSURfVEVYVAotICAgICAgICAg
ICAgICAgICAgICYmIG4tPnJlbmRlcmVyKCkgJiYgbi0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+dmlz
aWJpbGl0eSgpID09IFZJU0lCTEUpCisgICAgICAgIH0gZWxzZSBpZiAobi0+aXNUZXh0Tm9kZSgp
ICYmIG4tPnJlbmRlcmVyKCkgJiYgbi0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+dmlzaWJpbGl0eSgp
ID09IFZJU0lCTEUpCiAgICAgICAgIHsKICAgICAgICAgICAgIC8vIEZvciBlYWNoIHRleHQgY2h1
bmssIHJ1biB0aGUgcmVnZXhwCiAgICAgICAgICAgICBRU3RyaW5nIG5vZGVTdHJpbmcgPSBuLT5u
b2RlVmFsdWUoKS5zdHJpbmcoKTsKQEAgLTI4NDgsMTQgKzI4NDQsMTAgQEAgTlNGaWxlV3JhcHBl
ciAqS1dRS0hUTUxQYXJ0OjpmaWxlV3JhcHBlcgogCiBzdGF0aWMgRWxlbWVudEltcGwgKmxpc3RQ
YXJlbnQoRWxlbWVudEltcGwgKml0ZW0pCiB7Ci0gICAgLy8gSWNrISAgQXZvaWQgdXNlIG9mIGl0
ZW0tPmlkKCkgd2hpY2ggY29uZnVzZXMgT2JqQysrLgotICAgIHVuc2lnbmVkIHNob3J0IF9pZCA9
IGl0ZW0tPmlkZW50aWZpZXIoKTsKLSAgICAKLSAgICB3aGlsZSAoX2lkICE9IElEX1VMICYmIF9p
ZCAhPSBJRF9PTCkgeworICAgIHdoaWxlICghaXRlbS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnVs
KCkpICYmICFpdGVtLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b2woKSkpIHsKICAgICAgICAgaXRl
bSA9IHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsICo+KGl0ZW0tPnBhcmVudE5vZGUoKSk7CiAgICAg
ICAgIGlmICghaXRlbSkKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBfaWQgPSBpdGVtLT5p
ZGVudGlmaWVyKCk7CiAgICAgfQogICAgIHJldHVybiBpdGVtOwogfQpAQCAtMjg2OCw3ICsyODYw
LDcgQEAgc3RhdGljIE5vZGVJbXBsKiBpc1RleHRGaXJzdEluTGlzdEl0ZW0oTgogICAgIHdoaWxl
IChwYXIpIHsKICAgICAgICAgaWYgKHBhci0+Zmlyc3RDaGlsZCgpICE9IGUpCiAgICAgICAgICAg
ICByZXR1cm4gMDsKLSAgICAgICAgaWYgKHBhci0+aWRlbnRpZmllcigpID09IElEX0xJKQorICAg
ICAgICBpZiAocGFyLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6bGkoKSkpCiAgICAgICAgICAgICBy
ZXR1cm4gcGFyOwogICAgICAgICBlID0gcGFyOwogICAgICAgICBwYXIgPSBwYXItPnBhcmVudE5v
ZGUoKTsKQEAgLTMwMjIsMTA5ICszMDE0LDk1IEBAIE5TQXR0cmlidXRlZFN0cmluZyAqS1dRS0hU
TUxQYXJ0OjphdHRyaWIKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8g
VGhpcyBpcyBvdXIgc2ltcGxlIEhUTUwgLT4gQVNDSUkgdHJhbnNmb3JtYXRpb246CiAgICAgICAg
ICAgICAgICAgUVN0cmluZyB0ZXh0OwotICAgICAgICAgICAgICAgIE5vZGVJbXBsOjpJZCBfaWQg
PSBuLT5pZGVudGlmaWVyKCk7Ci0gICAgICAgICAgICAgICAgc3dpdGNoKF9pZCkgewotICAgICAg
ICAgICAgICAgICAgICBjYXNlIElEX0E6Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3Rl
IHRoZSBzdGFydCBvZiB0aGUgPGE+IGVsZW1lbnQuICBXZSB3aWxsIGFkZCB0aGUgTlNMaW5rQXR0
cmlidXRlTmFtZQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXR0cmlidXRlIHRvIHRoZSBh
dHRyaWJ1dGVkIHN0cmluZyB3aGVuIG5hdmlnYXRpbmcgdG8gdGhlIG5leHQgc2libGluZyAKLSAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIG9mIHRoaXMgbm9kZS4KLSAgICAgICAgICAgICAgICAg
ICAgICAgIGxpbmtTdGFydExvY2F0aW9uID0gW3Jlc3VsdCBsZW5ndGhdOwotICAgICAgICAgICAg
ICAgICAgICAgICAgbGlua1N0YXJ0Tm9kZSA9IHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsKj4obik7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgICAgICBj
YXNlIElEX0JSOgotICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCArPSAiXG4iOwotICAgICAg
ICAgICAgICAgICAgICAgICAgaGFzTmV3TGluZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9MSToKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBRU3RyaW5n
IGxpc3RUZXh0OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVsZW1lbnRJbXBsICppdGVt
UGFyZW50ID0gbGlzdFBhcmVudChzdGF0aWNfY2FzdDxFbGVtZW50SW1wbCAqPihuKSk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCFoYXNOZXdMaW5lKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0VGV4dCAr
PSAnXG4nOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc05ld0xpbmUgPSB0cnVlOwot
ICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RJdGVtcy5hcHBlbmQoc3RhdGlj
X2Nhc3Q8RWxlbWVudEltcGwqPihuKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlz
dEl0ZW1JbmZvIGluZm87Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mby5zdGFydCA9
IFtyZXN1bHQgbGVuZ3RoXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLmVuZCA9
IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdEl0ZW1Mb2NhdGlvbnMuYXBwZW5k
IChpbmZvKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBsaXN0VGV4dCArPSAnXHQnOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChpdGVtUGFyZW50ICYmIHJlbmRlcmVyLT5pc0xpc3RJdGVtKCkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgUmVuZGVyTGlzdEl0ZW0gKmxpc3RSZW5kZXJlciA9IHN0YXRp
Y19jYXN0PFJlbmRlckxpc3RJdGVtKj4ocmVuZGVyZXIpOwotCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1heE1hcmtlcldpZHRoID0gTUFYKFtmb250IHBvaW50U2l6ZV0sIG1heE1h
cmtlcldpZHRoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoKHN0eWxl
LT5saXN0U3R5bGVUeXBlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNhc2Uga2h0bWw6OkRJU0M6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbGlzdFRleHQgKz0gKChRQ2hhcilCVUxMRVRfQ0hBUik7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjYXNlIGtodG1sOjpDSVJDTEU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbGlzdFRleHQgKz0gKChRQ2hhcilDSVJDTEVfQ0hBUik7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjYXNlIGtodG1sOjpTUVVBUkU6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbGlzdFRleHQgKz0gKChRQ2hhcilTUVVBUkVfQ0hBUik7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIGtodG1sOjpMTk9ORToKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgUVN0cmluZyBtYXJrZXIgPSBsaXN0UmVuZGVyZXItPm1hcmtlclN0cmluZ1ZhbHVl
KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdFRleHQgKz0g
bWFya2VyOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVzZSBB
cHBLaXQgbWV0cmljcy4gIFdpbGwgYmUgcmVuZGVyZWQgYnkgQXBwS2l0LgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IG1hcmtlcldpZHRoID0gW2ZvbnQgd2lk
dGhPZlN0cmluZzogbWFya2VyLmdldE5TU3RyaW5nKCldOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1heE1hcmtlcldpZHRoID0gTUFYKG1hcmtlcldpZHRoLCBtYXhN
YXJrZXJXaWR0aCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBpZiAobi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmEoKSkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgLy8gTm90ZSB0aGUgc3RhcnQgb2YgdGhlIDxhPiBlbGVtZW50LiAgV2Ugd2lsbCBh
ZGQgdGhlIE5TTGlua0F0dHJpYnV0ZU5hbWUKKyAgICAgICAgICAgICAgICAgICAgLy8gYXR0cmli
dXRlIHRvIHRoZSBhdHRyaWJ1dGVkIHN0cmluZyB3aGVuIG5hdmlnYXRpbmcgdG8gdGhlIG5leHQg
c2libGluZyAKKyAgICAgICAgICAgICAgICAgICAgLy8gb2YgdGhpcyBub2RlLgorICAgICAgICAg
ICAgICAgICAgICBsaW5rU3RhcnRMb2NhdGlvbiA9IFtyZXN1bHQgbGVuZ3RoXTsKKyAgICAgICAg
ICAgICAgICAgICAgbGlua1N0YXJ0Tm9kZSA9IHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsKj4obik7
CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YnIo
KSkpIHsKKyAgICAgICAgICAgICAgICAgICAgdGV4dCArPSAiXG4iOworICAgICAgICAgICAgICAg
ICAgICBoYXNOZXdMaW5lID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG4tPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjpsaSgpKSkgeworICAgICAgICAgICAgICAgICAgICBRU3RyaW5n
IGxpc3RUZXh0OworICAgICAgICAgICAgICAgICAgICBFbGVtZW50SW1wbCAqaXRlbVBhcmVudCA9
IGxpc3RQYXJlbnQoc3RhdGljX2Nhc3Q8RWxlbWVudEltcGwgKj4obikpOworICAgICAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNOZXdMaW5lKQorICAgICAgICAg
ICAgICAgICAgICAgICAgbGlzdFRleHQgKz0gJ1xuJzsKKyAgICAgICAgICAgICAgICAgICAgaGFz
TmV3TGluZSA9IHRydWU7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdFRl
eHQgKz0gJyAnOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0VGV4dCArPSAn
XHQnOwotICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOU011dGFibGVEaWN0
aW9uYXJ5ICphdHRyczsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBhdHRycyA9IFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF07Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRycyBzZXRPYmplY3Q6Zm9udCBmb3JLZXk6TlNG
b250QXR0cmlidXRlTmFtZV07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChz
dHlsZSAmJiBzdHlsZS0+Y29sb3IoKS5pc1ZhbGlkKCkpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBbYXR0cnMgc2V0T2JqZWN0OnN0eWxlLT5jb2xvcigpLmdldE5TQ29sb3Io
KSBmb3JLZXk6TlNGb3JlZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lXTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHN0eWxlICYmIHN0eWxlLT5iYWNrZ3JvdW5kQ29sb3IoKS5p
c1ZhbGlkKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0cnMgc2V0
T2JqZWN0OnN0eWxlLT5iYWNrZ3JvdW5kQ29sb3IoKS5nZXROU0NvbG9yKCkgZm9yS2V5Ok5TQmFj
a2dyb3VuZENvbG9yQXR0cmlidXRlTmFtZV07Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgTlNBdHRyaWJ1dGVkU3RyaW5nICpwYXJ0aWFsU3RyaW5nID0gW1tO
U0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOmxpc3RUZXh0LmdldE5TU3Ry
aW5nKCkgYXR0cmlidXRlczphdHRyc107Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFthdHRycyByZWxlYXNlXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jlc3Vs
dCBhcHBlbmRBdHRyaWJ1dGVkU3RyaW5nOiBwYXJ0aWFsU3RyaW5nXTsgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwYXJ0aWFsU3RyaW5nIHJlbGVhc2Vd
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbGlz
dEl0ZW1zLmFwcGVuZChzdGF0aWNfY2FzdDxFbGVtZW50SW1wbCo+KG4pKTsKKyAgICAgICAgICAg
ICAgICAgICAgTGlzdEl0ZW1JbmZvIGluZm87CisgICAgICAgICAgICAgICAgICAgIGluZm8uc3Rh
cnQgPSBbcmVzdWx0IGxlbmd0aF07CisgICAgICAgICAgICAgICAgICAgIGluZm8uZW5kID0gMDsK
KyAgICAgICAgICAgICAgICAgICAgbGlzdEl0ZW1Mb2NhdGlvbnMuYXBwZW5kIChpbmZvKTsKKyAg
ICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGxpc3RUZXh0ICs9ICdcdCc7
CisgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtUGFyZW50ICYmIHJlbmRlcmVyLT5pc0xpc3RJ
dGVtKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRlckxpc3RJdGVtICpsaXN0UmVu
ZGVyZXIgPSBzdGF0aWNfY2FzdDxSZW5kZXJMaXN0SXRlbSo+KHJlbmRlcmVyKTsKKworICAgICAg
ICAgICAgICAgICAgICAgICAgbWF4TWFya2VyV2lkdGggPSBNQVgoW2ZvbnQgcG9pbnRTaXplXSwg
bWF4TWFya2VyV2lkdGgpOworICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoKHN0eWxlLT5s
aXN0U3R5bGVUeXBlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIGtodG1s
OjpESVNDOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0VGV4dCArPSAoKFFD
aGFyKUJVTExFVF9DSEFSKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBraHRtbDo6Q0lSQ0xFOgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0VGV4dCArPSAoKFFDaGFyKUNJUkNMRV9DSEFS
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2FzZSBraHRtbDo6U1FVQVJFOgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBsaXN0VGV4dCArPSAoKFFDaGFyKVNRVUFSRV9DSEFSKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSBraHRtbDo6TE5PTkU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFFTdHJpbmcgbWFya2VyID0gbGlzdFJlbmRlcmVyLT5tYXJrZXJTdHJp
bmdWYWx1ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0VGV4dCArPSBt
YXJrZXI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVzZSBBcHBLaXQgbWV0
cmljcy4gIFdpbGwgYmUgcmVuZGVyZWQgYnkgQXBwS2l0LgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmbG9hdCBtYXJrZXJXaWR0aCA9IFtmb250IHdpZHRoT2ZTdHJpbmc6IG1hcmtl
ci5nZXROU1N0cmluZygpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4TWFy
a2VyV2lkdGggPSBNQVgobWFya2VyV2lkdGgsIG1heE1hcmtlcldpZHRoKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAg
ICAgICAgICAgICAgIGNhc2UgSURfT0w6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfVUw6
CisgICAgICAgICAgICAgICAgICAgICAgICBsaXN0VGV4dCArPSAnICc7CisgICAgICAgICAgICAg
ICAgICAgICAgICBsaXN0VGV4dCArPSAnXHQnOworCisgICAgICAgICAgICAgICAgICAgICAgICBO
U011dGFibGVEaWN0aW9uYXJ5ICphdHRyczsKKworICAgICAgICAgICAgICAgICAgICAgICAgYXR0
cnMgPSBbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdOworICAgICAgICAgICAgICAg
ICAgICAgICAgW2F0dHJzIHNldE9iamVjdDpmb250IGZvcktleTpOU0ZvbnRBdHRyaWJ1dGVOYW1l
XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHlsZSAmJiBzdHlsZS0+Y29sb3IoKS5p
c1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHJzIHNldE9iamVjdDpz
dHlsZS0+Y29sb3IoKS5nZXROU0NvbG9yKCkgZm9yS2V5Ok5TRm9yZWdyb3VuZENvbG9yQXR0cmli
dXRlTmFtZV07CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3R5bGUgJiYgc3R5bGUtPmJh
Y2tncm91bmRDb2xvcigpLmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBb
YXR0cnMgc2V0T2JqZWN0OnN0eWxlLT5iYWNrZ3JvdW5kQ29sb3IoKS5nZXROU0NvbG9yKCkgZm9y
S2V5Ok5TQmFja2dyb3VuZENvbG9yQXR0cmlidXRlTmFtZV07CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgIE5TQXR0cmlidXRlZFN0cmluZyAqcGFydGlhbFN0cmluZyA9IFtbTlNBdHRyaWJ1dGVk
U3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzpsaXN0VGV4dC5nZXROU1N0cmluZygpIGF0dHJp
YnV0ZXM6YXR0cnNdOworICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHJzIHJlbGVhc2VdOwor
ICAgICAgICAgICAgICAgICAgICAgICAgW3Jlc3VsdCBhcHBlbmRBdHRyaWJ1dGVkU3RyaW5nOiBw
YXJ0aWFsU3RyaW5nXTsgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBb
cGFydGlhbFN0cmluZyByZWxlYXNlXTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICBlbHNlIGlmIChuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b2woKSkgfHwgbi0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OnVsKCkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIWhhc05ld0xpbmUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCArPSAiXG4i
OwogICAgICAgICAgICAgICAgICAgICAgICAgaGFzTmV3TGluZSA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX1REOgot
ICAgICAgICAgICAgICAgICAgICBjYXNlIElEX1RIOgotICAgICAgICAgICAgICAgICAgICBjYXNl
IElEX0hSOgotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0REOgotICAgICAgICAgICAgICAg
ICAgICBjYXNlIElEX0RMOgotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0RUOgotICAgICAg
ICAgICAgICAgICAgICBjYXNlIElEX1BSRToKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9C
TE9DS1FVT1RFOgotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0RJVjoKKyAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIGlmIChuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGQoKSkgfHwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGgo
KSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6aHIoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6ZGQoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZGwoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZHQoKSkgfHwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6cHJlKCkpIHx8CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJsb2Nr
cXVvdGUoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6ZGl2KCkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWhhc05l
d0xpbmUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCArPSAnXG4nOwogICAgICAg
ICAgICAgICAgICAgICAgICAgaGFzTmV3TGluZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9QOgotICAgICAgICAgICAg
ICAgICAgICBjYXNlIElEX1RSOgotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0gxOgotICAg
ICAgICAgICAgICAgICAgICBjYXNlIElEX0gyOgotICAgICAgICAgICAgICAgICAgICBjYXNlIElE
X0gzOgotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0g0OgotICAgICAgICAgICAgICAgICAg
ICBjYXNlIElEX0g1OgotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0g2OiB7CisgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSBpZiAobi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnAoKSkgfHwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
dHIoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6aDEoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6aDIoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDMoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDQoKSkgfHwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDUoKSkgfHwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDYo
KSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaGFzTmV3TGluZSkKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0ZXh0ICs9ICdcbic7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAKQEAgLTMxMzksMTAgKzMxMTcsOCBAQCBOU0F0dHJpYnV0ZWRTdHJpbmcgKktXUUtIVE1MUGFy
dDo6YXR0cmliCiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIGhhc05ld0xpbmUgPSB0cnVlOwotICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0lNRzoKKyAgICAg
ICAgICAgICAgICAgICAgZWxzZSBpZiAobi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmltZygpKSkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBlbmRpbmdTdHlsZWRTcGFjZSAhPSBuaWwp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGlua1N0YXJ0TG9jYXRpb24gPT0g
W3Jlc3VsdCBsZW5ndGhdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrbGlu
a1N0YXJ0TG9jYXRpb247CkBAIC0zMTU2LDggKzMxMzIsOSBAQCBOU0F0dHJpYnV0ZWRTdHJpbmcg
KktXUUtIVE1MUGFydDo6YXR0cmliCiAgICAgICAgICAgICAgICAgICAgICAgICBOU0F0dHJpYnV0
ZWRTdHJpbmcgKmlTdHJpbmcgPSBbTlNBdHRyaWJ1dGVkU3RyaW5nIGF0dHJpYnV0ZWRTdHJpbmdX
aXRoQXR0YWNobWVudDphdHRhY2htZW50XTsKICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXN1
bHQgYXBwZW5kQXR0cmlidXRlZFN0cmluZzogaVN0cmluZ107CiAgICAgICAgICAgICAgICAgICAg
ICAgICBbYXR0YWNobWVudCByZWxlYXNlXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQorCiAgICAgICAgICAg
ICAgICAgTlNBdHRyaWJ1dGVkU3RyaW5nICpwYXJ0aWFsU3RyaW5nID0gW1tOU0F0dHJpYnV0ZWRT
dHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOnRleHQuZ2V0TlNTdHJpbmcoKV07CiAgICAgICAg
ICAgICAgICAgW3Jlc3VsdCBhcHBlbmRBdHRyaWJ1dGVkU3RyaW5nOiBwYXJ0aWFsU3RyaW5nXTsK
ICAgICAgICAgICAgICAgICBbcGFydGlhbFN0cmluZyByZWxlYXNlXTsKQEAgLTMxNzksNzEgKzMx
NTYsNjAgQEAgTlNBdHRyaWJ1dGVkU3RyaW5nICpLV1FLSFRNTFBhcnQ6OmF0dHJpYgogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgbmV4dCA9IG4tPm5leHRTaWJsaW5nKCk7CiAK
LSAgICAgICAgICAgIE5vZGVJbXBsOjpJZCBfaWQgPSBuLT5pZGVudGlmaWVyKCk7Ci0gICAgICAg
ICAgICBzd2l0Y2goX2lkKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBJRF9BOgotICAgICAgICAg
ICAgICAgICAgICAvLyBFbmQgb2YgYSA8YT4gZWxlbWVudC4gIENyZWF0ZSBhbiBhdHRyaWJ1dGVk
IHN0cmluZyBOU0xpbmtBdHRyaWJ1dGVOYW1lIGF0dHJpYnV0ZQotICAgICAgICAgICAgICAgICAg
ICAvLyBmb3IgdGhlIHJhbmdlIG9mIHRoZSBsaW5rLiAgTm90ZSB0aGF0IHdlIGNyZWF0ZSB0aGUg
YXR0cmlidXRlZCBzdHJpbmcgZnJvbSB0aGUgRE9NLCB3aGljaAotICAgICAgICAgICAgICAgICAg
ICAvLyB3aWxsIGhhdmUgY29ycmVjdGVkIGFueSBpbGxlZ2FsbHkgbmVzdGVkIDxhPiBlbGVtZW50
cy4KLSAgICAgICAgICAgICAgICAgICAgaWYgKGxpbmtTdGFydE5vZGUgJiYgbiA9PSBsaW5rU3Rh
cnROb2RlKXsKLSAgICAgICAgICAgICAgICAgICAgICAgIERPTVN0cmluZyBocmVmID0gcGFyc2VV
UkwobGlua1N0YXJ0Tm9kZS0+Z2V0QXR0cmlidXRlKEFUVFJfSFJFRikpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgS1VSTCBrVVJMID0gS1dRKGxpbmtTdGFydE5vZGUtPmdldERvY3VtZW50KCkt
PnBhcnQoKSktPmNvbXBsZXRlVVJMKGhyZWYuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICBOU1VSTCAqVVJMID0ga1VSTC5nZXROU1VS
TCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgW3Jlc3VsdCBhZGRBdHRyaWJ1dGU6TlNMaW5r
QXR0cmlidXRlTmFtZSB2YWx1ZTpVUkwgcmFuZ2U6TlNNYWtlUmFuZ2UobGlua1N0YXJ0TG9jYXRp
b24sIFtyZXN1bHQgbGVuZ3RoXS1saW5rU3RhcnRMb2NhdGlvbildOwotICAgICAgICAgICAgICAg
ICAgICAgICAgbGlua1N0YXJ0Tm9kZSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAobi0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OmEoKSkpIHsKKyAgICAgICAgICAgICAgICAvLyBFbmQgb2YgYSA8YT4gZWxlbWVudC4g
IENyZWF0ZSBhbiBhdHRyaWJ1dGVkIHN0cmluZyBOU0xpbmtBdHRyaWJ1dGVOYW1lIGF0dHJpYnV0
ZQorICAgICAgICAgICAgICAgIC8vIGZvciB0aGUgcmFuZ2Ugb2YgdGhlIGxpbmsuICBOb3RlIHRo
YXQgd2UgY3JlYXRlIHRoZSBhdHRyaWJ1dGVkIHN0cmluZyBmcm9tIHRoZSBET00sIHdoaWNoCisg
ICAgICAgICAgICAgICAgLy8gd2lsbCBoYXZlIGNvcnJlY3RlZCBhbnkgaWxsZWdhbGx5IG5lc3Rl
ZCA8YT4gZWxlbWVudHMuCisgICAgICAgICAgICAgICAgaWYgKGxpbmtTdGFydE5vZGUgJiYgbiA9
PSBsaW5rU3RhcnROb2RlKSB7CisgICAgICAgICAgICAgICAgICAgIERPTVN0cmluZyBocmVmID0g
cGFyc2VVUkwobGlua1N0YXJ0Tm9kZS0+Z2V0QXR0cmlidXRlKEFUVFJfSFJFRikpOworICAgICAg
ICAgICAgICAgICAgICBLVVJMIGtVUkwgPSBLV1EobGlua1N0YXJ0Tm9kZS0+Z2V0RG9jdW1lbnQo
KS0+cGFydCgpKS0+Y29tcGxldGVVUkwoaHJlZi5zdHJpbmcoKSk7CisgICAgICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgICAgICBOU1VSTCAqVVJMID0ga1VSTC5nZXROU1VSTCgpOwor
ICAgICAgICAgICAgICAgICAgICBbcmVzdWx0IGFkZEF0dHJpYnV0ZTpOU0xpbmtBdHRyaWJ1dGVO
YW1lIHZhbHVlOlVSTCByYW5nZTpOU01ha2VSYW5nZShsaW5rU3RhcnRMb2NhdGlvbiwgW3Jlc3Vs
dCBsZW5ndGhdLWxpbmtTdGFydExvY2F0aW9uKV07CisgICAgICAgICAgICAgICAgICAgIGxpbmtT
dGFydE5vZGUgPSAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGVsc2UgaWYgKG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvbCgpKSB8fCBuLT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6dWwoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWhhc05ld0xpbmUp
CisgICAgICAgICAgICAgICAgICAgIHRleHQgKz0gJ1xuJzsKKyAgICAgICAgICAgICAgICBoYXNO
ZXdMaW5lID0gdHJ1ZTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobi0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OmxpKCkpKSB7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgY2FzZSBJ
RF9PTDoKLSAgICAgICAgICAgICAgICBjYXNlIElEX1VMOgotICAgICAgICAgICAgICAgICAgICBp
ZiAoIWhhc05ld0xpbmUpCi0gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0ICs9ICdcbic7Ci0g
ICAgICAgICAgICAgICAgICAgIGhhc05ld0xpbmUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLQotICAgICAgICAgICAgICAgIGNhc2UgSURfTEk6Ci0gICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBpLCBjb3VudCA9IGxpc3RJdGVtcy5j
b3VudCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBp
KyspewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsaXN0SXRlbXMuYXQoaSkgPT0g
bil7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RJdGVtTG9jYXRpb25zW2ld
LmVuZCA9IFtyZXN1bHQgbGVuZ3RoXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGludCBpLCBjb3VudCA9IGxpc3RJdGVtcy5jb3VudCgp
OworICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKXsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGxpc3RJdGVtcy5hdChpKSA9PSBuKXsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGxpc3RJdGVtTG9jYXRpb25zW2ldLmVuZCA9IFtyZXN1bHQgbGVuZ3RoXTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgIGlmICghaGFzTmV3TGluZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHRl
eHQgKz0gJ1xuJzsKLSAgICAgICAgICAgICAgICAgICAgaGFzTmV3TGluZSA9IHRydWU7Ci0gICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgY2FzZSBJRF9URDoKLSAg
ICAgICAgICAgICAgICBjYXNlIElEX1RIOgotICAgICAgICAgICAgICAgIGNhc2UgSURfSFI6Ci0g
ICAgICAgICAgICAgICAgY2FzZSBJRF9ERDoKLSAgICAgICAgICAgICAgICBjYXNlIElEX0RMOgot
ICAgICAgICAgICAgICAgIGNhc2UgSURfRFQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBJRF9QUkU6
Ci0gICAgICAgICAgICAgICAgY2FzZSBJRF9CTE9DS1FVT1RFOgotICAgICAgICAgICAgICAgIGNh
c2UgSURfRElWOgotICAgICAgICAgICAgICAgICAgICBpZiAoIWhhc05ld0xpbmUpCi0gICAgICAg
ICAgICAgICAgICAgICAgICB0ZXh0ICs9ICdcbic7Ci0gICAgICAgICAgICAgICAgICAgIGhhc05l
d0xpbmUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICBjYXNlIElEX1A6Ci0gICAgICAgICAgICAgICAgY2FzZSBJRF9UUjoKLSAgICAgICAgICAgICAg
ICBjYXNlIElEX0gxOgotICAgICAgICAgICAgICAgIGNhc2UgSURfSDI6Ci0gICAgICAgICAgICAg
ICAgY2FzZSBJRF9IMzoKLSAgICAgICAgICAgICAgICBjYXNlIElEX0g0OgotICAgICAgICAgICAg
ICAgIGNhc2UgSURfSDU6Ci0gICAgICAgICAgICAgICAgY2FzZSBJRF9INjoKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKCFoYXNOZXdMaW5lKQotICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCAr
PSAnXG4nOwotICAgICAgICAgICAgICAgICAgICAvLyBBbiBleHRyYSBuZXdsaW5lIGlzIG5lZWRl
ZCBhdCB0aGUgc3RhcnQsIG5vdCB0aGUgZW5kLCBvZiB0aGVzZSB0eXBlcyBvZiB0YWdzLAotICAg
ICAgICAgICAgICAgICAgICAvLyBzbyBkb24ndCBhZGQgYW5vdGhlciBoZXJlLgotICAgICAgICAg
ICAgICAgICAgICBoYXNOZXdMaW5lID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICghaGFzTmV3TGluZSkKKyAg
ICAgICAgICAgICAgICAgICAgdGV4dCArPSAnXG4nOworICAgICAgICAgICAgICAgIGhhc05ld0xp
bmUgPSB0cnVlOworICAgICAgICAgICAgfSBlbHNlIGlmIChuLT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6dGQoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OnRoKCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjpocigpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6ZGQoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OmRsKCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjpkdCgpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6cHJlKCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjpibG9ja3F1b3RlKCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgIG4tPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjpkaXYoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWhhc05l
d0xpbmUpCisgICAgICAgICAgICAgICAgICAgIHRleHQgKz0gJ1xuJzsKKyAgICAgICAgICAgICAg
ICBoYXNOZXdMaW5lID0gdHJ1ZTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobi0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OnAoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OnRyKCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjpoMSgpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6aDIoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OmgzKCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgIG4tPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjpoNCgpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6aDUoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6Omg2KCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFoYXNOZXdM
aW5lKQorICAgICAgICAgICAgICAgICAgICB0ZXh0ICs9ICdcbic7CisgICAgICAgICAgICAgICAg
Ly8gQW4gZXh0cmEgbmV3bGluZSBpcyBuZWVkZWQgYXQgdGhlIHN0YXJ0LCBub3QgdGhlIGVuZCwg
b2YgdGhlc2UgdHlwZXMgb2YgdGFncywKKyAgICAgICAgICAgICAgICAvLyBzbyBkb24ndCBhZGQg
YW5vdGhlciBoZXJlLgorICAgICAgICAgICAgICAgIGhhc05ld0xpbmUgPSB0cnVlOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKnBh
cnRpYWxTdHJpbmcgPSBbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6
dGV4dC5nZXROU1N0cmluZygpXTsKQEAgLTM0NzYsNyArMzQ0Miw3IEBAIFJlbmRlclN0eWxlICpL
V1FLSFRNTFBhcnQ6OnN0eWxlRm9yU2VsZWMKICAgICAgICAgcmV0dXJuIG5vZGUtPnJlbmRlcmVy
KCktPnN0eWxlKCk7CiAKICAgICBpbnQgZXhjZXB0aW9uQ29kZSA9IDA7Ci0gICAgRWxlbWVudElt
cGwgKnN0eWxlRWxlbWVudCA9IHhtbERvY0ltcGwoKS0+Y3JlYXRlSFRNTEVsZW1lbnQoInNwYW4i
LCBleGNlcHRpb25Db2RlKTsKKyAgICBFbGVtZW50SW1wbCAqc3R5bGVFbGVtZW50ID0geG1sRG9j
SW1wbCgpLT5jcmVhdGVFbGVtZW50TlMoWEhUTUxfTkFNRVNQQUNFLCAic3BhbiIsIGV4Y2VwdGlv
bkNvZGUpOwogICAgIEFTU0VSVChleGNlcHRpb25Db2RlID09IDApOwogCiAgICAgc3R5bGVFbGVt
ZW50LT5yZWYoKTsKQEAgLTM3MDMsNyArMzY2OSw3IEBAIHZvaWQgS1dRS0hUTUxQYXJ0OjpzZXRT
ZWxlY3Rpb25Gcm9tTm9uZSgKICAgICAgICAgd2hpbGUgKG5vZGUpIHsKICAgICAgICAgICAgIC8v
IExvb2sgZm9yIGEgYmxvY2sgZmxvdywgYnV0IHNraXAgb3ZlciB0aGUgSFRNTCBlbGVtZW50LCBz
aW5jZSB3ZSByZWFsbHkKICAgICAgICAgICAgIC8vIHdhbnQgdG8gZ2V0IGF0IGxlYXN0IGFzIGZh
ciBhcyB0aGUgdGhlIEJPRFkgZWxlbWVudCBpbiBhIGRvY3VtZW50LgotICAgICAgICAgICAgaWYg
KG5vZGUtPmlzQmxvY2tGbG93KCkgJiYgbm9kZS0+aWRlbnRpZmllcigpICE9IElEX0hUTUwpCisg
ICAgICAgICAgICBpZiAobm9kZS0+aXNCbG9ja0Zsb3coKSAmJiBub2RlLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6aHRtbCgpKSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIG5v
ZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCk7CiAgICAgICAgIH0KSW5kZXg6IGt3cS9XZWJD
b3JlQnJpZGdlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9X
ZWJDb3JlQnJpZGdlLm1tLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjM5NgpkaWZmIC11IC1wIC1y
MS4zOTYga3dxL1dlYkNvcmVCcmlkZ2UubW0KLS0tIGt3cS9XZWJDb3JlQnJpZGdlLm1tCTE0IEp1
biAyMDA1IDAwOjIzOjQ1IC0wMDAwCTEuMzk2CisrKyBrd3EvV2ViQ29yZUJyaWRnZS5tbQkyMyBK
dW4gMjAwNSAwMToxMTozMyAtMDAwMApAQCAtMzksNyArMzksNiBAQAogI2ltcG9ydCAiaHRtbF9p
bWFnZWltcGwuaCIKICNpbXBvcnQgImh0bWxhdHRycy5oIgogI2ltcG9ydCAiaHRtbGVkaXRpbmcu
aCIKLSNpbXBvcnQgImh0bWx0YWdzLmgiCiAjaW1wb3J0ICJraHRtbF9wYXJ0LmgiCiAjaW1wb3J0
ICJraHRtbHZpZXcuaCIKICNpbXBvcnQgImtqc19wcm94eS5oIgpAQCAtNjcsNyArNjYsNiBAQAog
I2ltcG9ydCAiS1dRQXNzZXJ0aW9ucy5oIgogI2ltcG9ydCAiS1dRQ2hhcnNldHMuaCIKICNpbXBv
cnQgIktXUUNsaXBib2FyZC5oIgotI2ltcG9ydCAiS1dRRE9NTm9kZS5oIgogI2ltcG9ydCAiS1dR
RWRpdENvbW1hbmQuaCIKICNpbXBvcnQgIktXUUZvbnQuaCIKICNpbXBvcnQgIktXUUZvdW5kYXRp
b25FeHRyYXMuaCIKQEAgLTEwMCw2ICs5OCw3IEBAIHVzaW5nIERPTTo6SFRNTEZvcm1FbGVtZW50
SW1wbDsKIHVzaW5nIERPTTo6SFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGw7CiB1c2luZyBET006
OkhUTUxJbWFnZUVsZW1lbnRJbXBsOwogdXNpbmcgRE9NOjpIVE1MSW5wdXRFbGVtZW50SW1wbDsK
K3VzaW5nIERPTTo6SFRNTE5hbWVzOwogdXNpbmcgRE9NOjpOb2RlSW1wbDsKIHVzaW5nIERPTTo6
UG9zaXRpb247CiB1c2luZyBET006OlJhbmdlSW1wbDsKQEAgLTkxMyw3ICs5MTIsNyBAQCBzdGF0
aWMgTlNWaWV3ICp2aWV3Rm9yRWxlbWVudChFbGVtZW50SW1wCiBzdGF0aWMgSFRNTElucHV0RWxl
bWVudEltcGwgKmlucHV0RWxlbWVudEZyb21ET01FbGVtZW50KERPTUVsZW1lbnQgKmVsZW1lbnQp
CiB7CiAgICAgTm9kZUltcGwgKm5vZGUgPSBbZWxlbWVudCBfbm9kZUltcGxdOwotICAgIGlmIChu
b2RlICYmIGlkRnJvbU5vZGUobm9kZSkgPT0gSURfSU5QVVQpIHsKKyAgICBpZiAobm9kZS0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OmlucHV0KCkpKSB7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxIVE1MSW5wdXRFbGVtZW50SW1wbCAqPihub2RlKTsKICAgICB9CiAgICAgcmV0dXJuIG5pbDsK
QEAgLTkyNiw3ICs5MjUsNyBAQCBzdGF0aWMgSFRNTEZvcm1FbGVtZW50SW1wbCAqZm9ybUVsZW1l
bnRGCiAgICAgLy8gbWFwcy5nb29nbGUuY29tIGNyYXNoZXMgb3RoZXJ3aXNlIGJlY2F1c2UgaXQg
aXMgYW4geHNsdCBmaWxlCiAgICAgLy8gdGhhdCBjb250YWlucyA8Zm9ybT4gZWxlbWVudHMgdGhh
dCBhcmVuJ3QgaW4gYW55IG5hbWVzcGFjZSwgc28KICAgICAvLyB0aGV5IGNvbWUgb3V0IGFzIGdl
bmVyaWMgQ01MIGVsZW1lbnRzCi0gICAgaWYgKG5vZGUgJiYgbm9kZS0+aXNIVE1MRWxlbWVudCgp
ICYmIGlkRnJvbU5vZGUobm9kZSkgPT0gSURfRk9STSkgeworICAgIGlmIChub2RlICYmIG5vZGUt
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpmb3JtKCkpKSB7CiAgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxIVE1MRm9ybUVsZW1lbnRJbXBsICo+KG5vZGUpOwogICAgIH0KICAgICByZXR1cm4gbmls
OwpAQCAtMTA5Niw3ICsxMDk1LDcgQEAgc3RhdGljIEhUTUxGb3JtRWxlbWVudEltcGwgKmZvcm1F
bGVtZW50RgogICAgIAogICAgICAgICAgICAgLy8gRklYTUU6IENvZGUgY29waWVkIGZyb20gUmVu
ZGVySW1hZ2U6OnVwZGF0ZUZyb21FbGVtZW50OyBzaG91bGQgc2hhcmUuCiAgICAgICAgICAgICBE
T01TdHJpbmcgYXR0cjsKLSAgICAgICAgICAgIGlmIChpZEZyb21Ob2RlKGkpID09IElEX09CSkVD
VCkgeworICAgICAgICAgICAgaWYgKGktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvYmplY3QoKSkp
IHsKICAgICAgICAgICAgICAgICBhdHRyID0gaS0+Z2V0QXR0cmlidXRlKEFUVFJfREFUQSk7CiAg
ICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGF0dHIgPSBpLT5nZXRBdHRyaWJ1
dGUoQVRUUl9TUkMpOwpAQCAtMTEwOCw5ICsxMTA3LDkgQEAgc3RhdGljIEhUTUxGb3JtRWxlbWVu
dEltcGwgKmZvcm1FbGVtZW50RgogICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBGSVhNRTog
Q29kZSBjb3BpZWQgZnJvbSBSZW5kZXJJbWFnZTo6dXBkYXRlRnJvbUVsZW1lbnQ7IHNob3VsZCBz
aGFyZS4KICAgICAgICAgICAgIERPTVN0cmluZyBhbHQ7Ci0gICAgICAgICAgICBpZiAoaWRGcm9t
Tm9kZShpKSA9PSBJRF9JTlBVVCkKKyAgICAgICAgICAgIGlmIChpLT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6aW5wdXQoKSkpCiAgICAgICAgICAgICAgICAgYWx0ID0gc3RhdGljX2Nhc3Q8SFRNTElu
cHV0RWxlbWVudEltcGwgKj4oaSktPmFsdFRleHQoKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGlk
RnJvbU5vZGUoaSkgPT0gSURfSU1HKQorICAgICAgICAgICAgZWxzZSBpZiAoaS0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OmltZygpKSkKICAgICAgICAgICAgICAgICBhbHQgPSBzdGF0aWNfY2FzdDxI
VE1MSW1hZ2VFbGVtZW50SW1wbCAqPihpKS0+YWx0VGV4dCgpOwogICAgICAgICAgICAgaWYgKCFh
bHQuaXNOdWxsKCkpIHsKICAgICAgICAgICAgICAgICBRU3RyaW5nIGFsdFRleHQgPSBhbHQuc3Ry
aW5nKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>2608</attachid>
            <date>2005-06-23 15:10:07 -0700</date>
            <delta_ts>2005-06-23 20:28:03 -0700</delta_ts>
            <desc>Complete the tagpriority/tagstatus movement into the element code.</desc>
            <filename>patch-7.txt</filename>
            <type>text/plain</type>
            <size>636737</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUucGJwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvV2ViQ29yZS9XZWJDb3JlLnBicHJvai9wcm9qZWN0LnBieHByb2osdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuNTU2CmRpZmYgLXUgLXAgLXIxLjU1NiBXZWJDb3JlLnBicHJvai9w
cm9qZWN0LnBieHByb2oKLS0tIFdlYkNvcmUucGJwcm9qL3Byb2plY3QucGJ4cHJvagkyMiBKdW4g
MjAwNSAxNTozMTo1NyAtMDAwMAkxLjU1NgorKysgV2ViQ29yZS5wYnByb2ovcHJvamVjdC5wYnhw
cm9qCTIzIEp1biAyMDA1IDIxOjUxOjUzIC0wMDAwCkBAIC0yMTQsMzIgKzIxNCw2IEBACiAvLzJE
MgogLy8yRDMKIC8vMkQ0Ci0vLzM1MAotLy8zNTEKLS8vMzUyCi0vLzM1MwotLy8zNTQKLQkJMzU0
RjI0ODkwMkVFMjg1OTBBQ0EyQUNBID0gewotCQkJZmlsZUVuY29kaW5nID0gMzA7Ci0JCQlpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOwotCQkJbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsKLQkJCXBhdGggPSBLV1FET01Ob2RlLmg7Ci0JCQlyZWZUeXBlID0gNDsKLQkJCXNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7Ci0JCX07Ci0JCTM1NEYyNDhBMDJFRTI4NTkwQUNBMkFDQSA9IHsKLQkJ
CWZpbGVFbmNvZGluZyA9IDMwOwotCQkJaXNhID0gUEJYRmlsZVJlZmVyZW5jZTsKLQkJCWxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOwotCQkJcGF0aCA9IEtXUURPTU5vZGUu
Y3BwOwotCQkJcmVmVHlwZSA9IDQ7Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwotCQl9Owot
Ly8zNTAKLS8vMzUxCi0vLzM1MgotLy8zNTMKLS8vMzU0CiAvLzUxMAogLy81MTEKIC8vNTEyCkBA
IC0zNjcsNiArMzQxLDM0IEBACiAJCQlzZXR0aW5ncyA9IHsKIAkJCX07CiAJCX07CisJCTU1Mzkw
MTBEMDg2QTJGNzMwMDFFRDdGRSA9IHsKKwkJCWZpbGVFbmNvZGluZyA9IDMwOworCQkJaXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsKKwkJCWxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
CisJCQlwYXRoID0gaHRtbGZhY3RvcnkuaDsKKwkJCXJlZlR5cGUgPSA0OworCQkJc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJNTUzOTAxMEUwODZBMkY3MzAwMUVEN0ZFID0geworCQkJ
ZmlsZVJlZiA9IDU1MzkwMTBEMDg2QTJGNzMwMDFFRDdGRTsKKwkJCWlzYSA9IFBCWEJ1aWxkRmls
ZTsKKwkJCXNldHRpbmdzID0geworCQkJfTsKKwkJfTsKKwkJNTUzOTAxNUYwODZBMzMyRTAwMUVE
N0ZFID0geworCQkJZmlsZUVuY29kaW5nID0gMzA7CisJCQlpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OworCQkJbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7CisJCQlwYXRoID0g
aHRtbGZhY3RvcnkuY3BwOworCQkJcmVmVHlwZSA9IDQ7CisJCQlzb3VyY2VUcmVlID0gIjxncm91
cD4iOworCQl9OworCQk1NTM5MDE2MDA4NkEzMzJFMDAxRUQ3RkUgPSB7CisJCQlmaWxlUmVmID0g
NTUzOTAxNUYwODZBMzMyRTAwMUVEN0ZFOworCQkJaXNhID0gUEJYQnVpbGRGaWxlOworCQkJc2V0
dGluZ3MgPSB7CisJCQl9OworCQl9OwogCQk1NTk5OEE1NzA1MkI1OThGMDAxN0E2QzEgPSB7CiAJ
CQljaGlsZHJlbiA9ICgKIAkJCQk1NTk5OEE1QTA1MkI1OUNDMDAxN0E2QzEsCkBAIC0xODcxLDI0
ICsxODczLDYgQEAKIAkJCXNoZWxsUGF0aCA9IC9iaW4vc2g7CiAJCQlzaGVsbFNjcmlwdCA9ICJc
IiRDUkVBVEVfSEFTSF9UQUJMRVwiIGtodG1sL2VjbWEveG1sc2VyaWFsaXplci5jcHAgPiBcIiRE
RVJJVkVEX0ZJTEVfRElSL3htbHNlcmlhbGl6ZXIubHV0LmhcIiI7CiAJCX07Ci0JCTkzMkZDMUMw
MDgyNEFCQjkwMDVCM0M3NSA9IHsKLQkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7Ci0J
CQlmaWxlcyA9ICgKLQkJCSk7Ci0JCQlpbnB1dFBhdGhzID0gKAotCQkJCWtodG1sL21pc2MvbWFr
ZXRhZ3MsCi0JCQkJa2h0bWwvbWlzYy9odG1sdGFncy5pbiwKLQkJCSk7Ci0JCQlpc2EgPSBQQlhT
aGVsbFNjcmlwdEJ1aWxkUGhhc2U7Ci0JCQluYW1lID0gaHRtbHRhZ3MuYy9oOwotCQkJb3V0cHV0
UGF0aHMgPSAoCi0JCQkJIiQoREVSSVZFRF9GSUxFX0RJUikvaHRtbHRhZ3MuYyIsCi0JCQkJIiQo
REVSSVZFRF9GSUxFX0RJUikvaHRtbHRhZ3MuaCIsCi0JCQkpOwotCQkJcnVuT25seUZvckRlcGxv
eW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7Ci0JCQlzaGVsbFBhdGggPSAvYmluL3NoOwotCQkJc2hl
bGxTY3JpcHQgPSAiY2F0IGtodG1sL21pc2MvaHRtbHRhZ3MuaW4gPiBcIiRERVJJVkVEX0ZJTEVf
RElSL2h0bWx0YWdzLmluXCJcbmNkIFwiJERFUklWRURfRklMRV9ESVJcIlxucGVybCBcIiRTUkNS
T09UL2todG1sL21pc2MvbWFrZXRhZ3NcIiI7Ci0JCX07CiAJCTkzMkZDMjk1MDgyNEIzNDUwMDVC
M0M3NSA9IHsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgK
QEAgLTIzMDcsNyArMjI5MSw2IEBACiAJCQkJOTMyRkMyQkMwODI0QjQyMjAwNUIzQzc1LAogCQkJ
CTkzMkZDMEI3MDgyNEExNzUwMDVCM0M3NSwKIAkJCQk5MzJGQzI5NTA4MjRCMzQ1MDA1QjNDNzUs
Ci0JCQkJOTMyRkMxQzAwODI0QUJCOTAwNUIzQzc1LAogCQkJCTkzRUE2ODZDMDgyNDlBRjQwMDY4
N0Y1NiwKIAkJCQk5MzJGQzEwQjA4MjRBNEQ0MDA1QjNDNzUsCiAJCQkJOTMyRkMxNjEwODI0QThF
MzAwNUIzQzc1LApAQCAtMjQxNSw3ICsyMzk4LDYgQEAKIAkJCQk5M0YxOThEQzA4MjQ1RTU5MDAx
RTlBQkMsCiAJCQkJOTNGMTk4REUwODI0NUU1OTAwMUU5QUJDLAogCQkJCTkzRjE5OEUwMDgyNDVF
NTkwMDFFOUFCQywKLQkJCQk5M0YxOThFMjA4MjQ1RTU5MDAxRTlBQkMsCiAJCQkJOTNGMTk4RTMw
ODI0NUU1OTAwMUU5QUJDLAogCQkJCTkzRjE5OEU0MDgyNDVFNTkwMDFFOUFCQywKIAkJCQk5M0Yx
OThFNTA4MjQ1RTU5MDAxRTlBQkMsCkBAIC0yNDkyLDcgKzI0NzQsNiBAQAogCQkJCTkzRjE5OTJF
MDgyNDVFNTkwMDFFOUFCQywKIAkJCQk5M0YxOTkyRjA4MjQ1RTU5MDAxRTlBQkMsCiAJCQkJOTNG
MTk5MzAwODI0NUU1OTAwMUU5QUJDLAotCQkJCTkzRjE5OTMxMDgyNDVFNTkwMDFFOUFCQywKIAkJ
CQk5M0YxOTkzMjA4MjQ1RTU5MDAxRTlBQkMsCiAJCQkJOTNGMTk5MzMwODI0NUU1OTAwMUU5QUJD
LAogCQkJCTkzRjE5OTM0MDgyNDVFNTkwMDFFOUFCQywKQEAgLTI2NDcsNyArMjYyOCw2IEBACiAJ
CQkJOTNGMTk5QzkwODI0NUU1OTAwMUU5QUJDLAogCQkJCTkzRjE5OUNBMDgyNDVFNTkwMDFFOUFC
QywKIAkJCQk5M0YxOTlDQjA4MjQ1RTU5MDAxRTlBQkMsCi0JCQkJOTNGMTk5Q0MwODI0NUU1OTAw
MUU5QUJDLAogCQkJCTkzRjE5OUNFMDgyNDVFNTkwMDFFOUFCQywKIAkJCQk5M0YxOTlDRjA4MjQ1
RTU5MDAxRTlBQkMsCiAJCQkJOTNGMTk5RDAwODI0NUU1OTAwMUU5QUJDLApAQCAtMjcyNCw2ICsy
NzA0LDcgQEAKIAkJCQkxQTY5RDM4MTA4NTYyNzQxMDAwOTg4MEQsCiAJCQkJNTUwQTBCQ0EwODVG
NjAzOTAwNzM1M0Q2LAogCQkJCTU1MEEwQkNFMDg1RjYwNEQwMDczNTNENiwKKwkJCQk1NTM5MDEw
RTA4NkEyRjczMDAxRUQ3RkUsCiAJCQkpOwogCQkJaXNhID0gUEJYSGVhZGVyc0J1aWxkUGhhc2U7
CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKQEAgLTI5NjgsMTIg
KzI5NDksNiBAQAogCQkJc2V0dGluZ3MgPSB7CiAJCQl9OwogCQl9OwotCQk5M0YxOThFMjA4MjQ1
RTU5MDAxRTlBQkMgPSB7Ci0JCQlmaWxlUmVmID0gRjUyM0QyMzYwMkRFNDM5NjAxODYzNUNBOwot
CQkJaXNhID0gUEJYQnVpbGRGaWxlOwotCQkJc2V0dGluZ3MgPSB7Ci0JCQl9OwotCQl9OwogCQk5
M0YxOThFMzA4MjQ1RTU5MDAxRTlBQkMgPSB7CiAJCQlmaWxlUmVmID0gRjUyM0QyMzgwMkRFNDM5
NjAxODYzNUNBOwogCQkJaXNhID0gUEJYQnVpbGRGaWxlOwpAQCAtMzQzMCwxMiArMzQwNSw2IEBA
CiAJCQlzZXR0aW5ncyA9IHsKIAkJCX07CiAJCX07Ci0JCTkzRjE5OTMxMDgyNDVFNTkwMDFFOUFC
QyA9IHsKLQkJCWZpbGVSZWYgPSAzNTRGMjQ4OTAyRUUyODU5MEFDQTJBQ0E7Ci0JCQlpc2EgPSBQ
QlhCdWlsZEZpbGU7Ci0JCQlzZXR0aW5ncyA9IHsKLQkJCX07Ci0JCX07CiAJCTkzRjE5OTMyMDgy
NDVFNTkwMDFFOUFCQyA9IHsKIAkJCWZpbGVSZWYgPSBGNTg3ODY4NTAyREUzQjg2MDFFQTQxMjI7
CiAJCQlpc2EgPSBQQlhCdWlsZEZpbGU7CkBAIC00Mzk4LDEyICs0MzY3LDYgQEAKIAkJCXNldHRp
bmdzID0gewogCQkJfTsKIAkJfTsKLQkJOTNGMTk5Q0MwODI0NUU1OTAwMUU5QUJDID0gewotCQkJ
ZmlsZVJlZiA9IEJDN0ZERTMyMDVDMUQ5QUIwMDcwQTkwMjsKLQkJCWlzYSA9IFBCWEJ1aWxkRmls
ZTsKLQkJCXNldHRpbmdzID0gewotCQkJfTsKLQkJfTsKIAkJOTNGMTk5Q0UwODI0NUU1OTAwMUU5
QUJDID0gewogCQkJZmlsZVJlZiA9IEJDM0IzNjQ2MDVDOUQ1RTIwMEU0MjkwMjsKIAkJCWlzYSA9
IFBCWEJ1aWxkRmlsZTsKQEAgLTQ5MzgsNyArNDkwMSw2IEBACiAJCQkJOTNGMTlBOEIwODI0NUU1
OTAwMUU5QUJDLAogCQkJCTkzRjE5QThDMDgyNDVFNTkwMDFFOUFCQywKIAkJCQk5M0YxOUE4RDA4
MjQ1RTU5MDAxRTlBQkMsCi0JCQkJOTNGMTlBOEUwODI0NUU1OTAwMUU5QUJDLAogCQkJCTkzRjE5
QThGMDgyNDVFNTkwMDFFOUFCQywKIAkJCQk5M0YxOUE5MDA4MjQ1RTU5MDAxRTlBQkMsCiAJCQkJ
OTNGMTlBOTEwODI0NUU1OTAwMUU5QUJDLApAQCAtNDk5MSw3ICs0OTUzLDYgQEAKIAkJCQk5M0Yx
OUFDMDA4MjQ1RTU5MDAxRTlBQkMsCiAJCQkJOTNGMTlBQzEwODI0NUU1OTAwMUU5QUJDLAogCQkJ
CTkzRjE5QUMyMDgyNDVFNTkwMDFFOUFCQywKLQkJCQk5M0YxOUFDMzA4MjQ1RTU5MDAxRTlBQkMs
CiAJCQkJOTNGMTlBQzQwODI0NUU1OTAwMUU5QUJDLAogCQkJCTkzRjE5QUM1MDgyNDVFNTkwMDFF
OUFCQywKIAkJCQk5M0YxOUFDNjA4MjQ1RTU5MDAxRTlBQkMsCkBAIC01MDMzLDcgKzQ5OTQsNiBA
QAogCQkJCTkzRjE5QUVDMDgyNDVFNTkwMDFFOUFCQywKIAkJCQk5M0YxOUFFRDA4MjQ1RTU5MDAx
RTlBQkMsCiAJCQkJOTNGMTlBRUUwODI0NUU1OTAwMUU5QUJDLAotCQkJCTkzRjE5QUVGMDgyNDVF
NTkwMDFFOUFCQywKIAkJCQk5M0YxOUFGMDA4MjQ1RTU5MDAxRTlBQkMsCiAJCQkJOTNGMTlBRjEw
ODI0NUU1OTAwMUU5QUJDLAogCQkJCTkzRjE5QUYyMDgyNDVFNTkwMDFFOUFCQywKQEAgLTUwOTcs
NiArNTA1Nyw3IEBACiAJCQkJMUE2OUQzODIwODU2Mjc0MTAwMDk4ODBELAogCQkJCTU1MEEwQkM5
MDg1RjYwMzkwMDczNTNENiwKIAkJCQk1NTBBMEJDRDA4NUY2MDREMDA3MzUzRDYsCisJCQkJNTUz
OTAxNjAwODZBMzMyRTAwMUVEN0ZFLAogCQkJKTsKIAkJCWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBo
YXNlOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CkBAIC01NzM3
LDEyICs1Njk4LDYgQEAKIAkJCXNldHRpbmdzID0gewogCQkJfTsKIAkJfTsKLQkJOTNGMTlBOEUw
ODI0NUU1OTAwMUU5QUJDID0gewotCQkJZmlsZVJlZiA9IEY1MjNEMjM1MDJERTQzOTYwMTg2MzVD
QTsKLQkJCWlzYSA9IFBCWEJ1aWxkRmlsZTsKLQkJCXNldHRpbmdzID0gewotCQkJfTsKLQkJfTsK
IAkJOTNGMTlBOEYwODI0NUU1OTAwMUU5QUJDID0gewogCQkJZmlsZVJlZiA9IEY1MjNEMjM3MDJE
RTQzOTYwMTg2MzVDQTsKIAkJCWlzYSA9IFBCWEJ1aWxkRmlsZTsKQEAgLTYwNTUsMTIgKzYwMTAs
NiBAQAogCQkJc2V0dGluZ3MgPSB7CiAJCQl9OwogCQl9OwotCQk5M0YxOUFDMzA4MjQ1RTU5MDAx
RTlBQkMgPSB7Ci0JCQlmaWxlUmVmID0gMzU0RjI0OEEwMkVFMjg1OTBBQ0EyQUNBOwotCQkJaXNh
ID0gUEJYQnVpbGRGaWxlOwotCQkJc2V0dGluZ3MgPSB7Ci0JCQl9OwotCQl9OwogCQk5M0YxOUFD
NDA4MjQ1RTU5MDAxRTlBQkMgPSB7CiAJCQlmaWxlUmVmID0gRjUxMTdCQ0EwMkY5RkZFRjAxODYz
NUNFOwogCQkJaXNhID0gUEJYQnVpbGRGaWxlOwpAQCAtNjMwNywxMiArNjI1Niw2IEBACiAJCQlz
ZXR0aW5ncyA9IHsKIAkJCX07CiAJCX07Ci0JCTkzRjE5QUVGMDgyNDVFNTkwMDFFOUFCQyA9IHsK
LQkJCWZpbGVSZWYgPSBCQzdGREUzMTA1QzFEOUFCMDA3MEE5MDI7Ci0JCQlpc2EgPSBQQlhCdWls
ZEZpbGU7Ci0JCQlzZXR0aW5ncyA9IHsKLQkJCX07Ci0JCX07CiAJCTkzRjE5QUYwMDgyNDVFNTkw
MDFFOUFCQyA9IHsKIAkJCWZpbGVSZWYgPSBCQzNCMzY0NTA1QzlENUUyMDBFNDI5MDI7CiAJCQlp
c2EgPSBQQlhCdWlsZEZpbGU7CkBAIC02ODU2LDIyICs2Nzk5LDYgQEAKIAkJCXJlZlR5cGUgPSA0
OwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKLQkJQkM3RkRFMzEwNUMxRDlBQjAw
NzBBOTAyID0gewotCQkJZmlsZUVuY29kaW5nID0gMzA7Ci0JCQlpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOwotCQkJbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7Ci0JCQlwYXRo
ID0geG1sX25hbWVzcGFjZV90YWJsZS5jcHA7Ci0JCQlyZWZUeXBlID0gNDsKLQkJCXNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7Ci0JCX07Ci0JCUJDN0ZERTMyMDVDMUQ5QUIwMDcwQTkwMiA9IHsKLQkJ
CWZpbGVFbmNvZGluZyA9IDMwOwotCQkJaXNhID0gUEJYRmlsZVJlZmVyZW5jZTsKLQkJCWxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7Ci0JCQlwYXRoID0geG1sX25hbWVzcGFjZV90
YWJsZS5oOwotCQkJcmVmVHlwZSA9IDQ7Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwotCQl9
OwogCQlCQzgwQTY5MzA0NjhCNzgxMDBEQkNDOUMgPSB7CiAJCQlmaWxlRW5jb2RpbmcgPSAzMDsK
IAkJCWlzYSA9IFBCWEZpbGVSZWZlcmVuY2U7CkBAIC03NDMyLDggKzczNTksNiBAQAogCQkJCTJE
OTA2NjBDMDY2NUQ5MzcwMDZCNkYxQSwKIAkJCQlGNTg3ODRDRDAyREUzNzU5MDFFQTQxMjIsCiAJ
CQkJRjU4Nzg0REEwMkRFMzc1OTAxRUE0MTIyLAotCQkJCTM1NEYyNDg5MDJFRTI4NTkwQUNBMkFD
QSwKLQkJCQkzNTRGMjQ4QTAyRUUyODU5MEFDQTJBQ0EsCiAJCQkJOTMxQzhBMTYwMzgwMjg4QjAw
ODYzNUNFLAogCQkJCTkzMUM4QTE3MDM4MDI4OEIwMDg2MzVDRSwKIAkJCQlCRUY3RUVBMDA1RkY4
RjBEMDA5NzE3RUUsCkBAIC04NDAyLDIyICs4MzI3LDYgQEAKIAkJCXJlZlR5cGUgPSA0OwogCQkJ
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKLQkJRjUyM0QyMzUwMkRFNDM5NjAxODYzNUNB
ID0gewotCQkJZmlsZUVuY29kaW5nID0gMzA7Ci0JCQlpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOwot
CQkJbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7Ci0JCQlwYXRoID0gZHRk
LmNwcDsKLQkJCXJlZlR5cGUgPSA0OwotCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsK
LQkJRjUyM0QyMzYwMkRFNDM5NjAxODYzNUNBID0gewotCQkJZmlsZUVuY29kaW5nID0gMzA7Ci0J
CQlpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOwotCQkJbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsKLQkJCXBhdGggPSBkdGQuaDsKLQkJCXJlZlR5cGUgPSA0OwotCQkJc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsKLQkJfTsKIAkJRjUyM0QyMzcwMkRFNDM5NjAxODYzNUNBID0gewogCQkJ
ZmlsZUVuY29kaW5nID0gMzA7CiAJCQlpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOwpAQCAtODY0Niw4
ICs4NTU1LDggQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCTU1MEEwQkNCMDg1RjYwNEQwMDczNTNE
NiwKIAkJCQk1NTBBMEJDQzA4NUY2MDREMDA3MzUzRDYsCi0JCQkJRjUyM0QyMzUwMkRFNDM5NjAx
ODYzNUNBLAotCQkJCUY1MjNEMjM2MDJERTQzOTYwMTg2MzVDQSwKKwkJCQk1NTM5MDEwRDA4NkEy
RjczMDAxRUQ3RkUsCisJCQkJNTUzOTAxNUYwODZBMzMyRTAwMUVEN0ZFLAogCQkJCUY1MjNEMjM3
MDJERTQzOTYwMTg2MzVDQSwKIAkJCQlGNTIzRDIzODAyREU0Mzk2MDE4NjM1Q0EsCiAJCQkJRjUy
M0QyMzkwMkRFNDM5NjAxODYzNUNBLApAQCAtOTM1NCw4ICs5MjYzLDYgQEAKIAkJCQlGNTIzRDMw
NjAyREU0NDc2MDE4NjM1Q0EsCiAJCQkJRjUyM0QzMDcwMkRFNDQ3NjAxODYzNUNBLAogCQkJCUY1
MjNEMzA4MDJERTQ0NzYwMTg2MzVDQSwKLQkJCQlCQzdGREUzMTA1QzFEOUFCMDA3MEE5MDIsCi0J
CQkJQkM3RkRFMzIwNUMxRDlBQjAwNzBBOTAyLAogCQkJCUY1MjNEMzA5MDJERTQ0NzYwMTg2MzVD
QSwKIAkJCQlGNTIzRDMwQTAyREU0NDc2MDE4NjM1Q0EsCiAJCQkpOwpJbmRleDoga2h0bWwva2h0
bWxfcGFydC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwv
a2h0bWxfcGFydC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzI0CmRpZmYgLXUgLXAgLXIx
LjMyNCBraHRtbC9raHRtbF9wYXJ0LmNwcAotLS0ga2h0bWwva2h0bWxfcGFydC5jcHAJMTQgSnVu
IDIwMDUgMDA6MjM6NDQgLTAwMDAJMS4zMjQKKysrIGtodG1sL2todG1sX3BhcnQuY3BwCTIzIEp1
biAyMDA1IDIxOjUxOjU3IC0wMDAwCkBAIC01NzI2LDcgKzU3MjYsNyBAQCBDU1NDb21wdXRlZFN0
eWxlRGVjbGFyYXRpb25JbXBsICpLSFRNTFBhCiAgICAgaW50IGV4Y2VwdGlvbkNvZGUgPSAwOwog
CiAgICAgaWYgKGQtPm1fdHlwaW5nU3R5bGUpIHsKLSAgICAgICAgc3R5bGVFbGVtZW50ID0geG1s
RG9jSW1wbCgpLT5jcmVhdGVIVE1MRWxlbWVudCgic3BhbiIsIGV4Y2VwdGlvbkNvZGUpOworICAg
ICAgICBzdHlsZUVsZW1lbnQgPSB4bWxEb2NJbXBsKCktPmNyZWF0ZUVsZW1lbnROUyhYSFRNTF9O
QU1FU1BBQ0UsICJzcGFuIiwgZXhjZXB0aW9uQ29kZSk7CiAgICAgICAgIGFzc2VydChleGNlcHRp
b25Db2RlID09IDApOwogCiAgICAgICAgIHN0eWxlRWxlbWVudC0+cmVmKCk7CkluZGV4OiBraHRt
bC9raHRtbHZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2to
dG1sL2todG1sdmlldy5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTMzCmRpZmYgLXUgLXAg
LXIxLjEzMyBraHRtbC9raHRtbHZpZXcuY3BwCi0tLSBraHRtbC9raHRtbHZpZXcuY3BwCTExIE1h
eSAyMDA1IDAwOjU4OjI3IC0wMDAwCTEuMTMzCisrKyBraHRtbC9raHRtbHZpZXcuY3BwCTIzIEp1
biAyMDA1IDIxOjUxOjU5IC0wMDAwCkBAIC02MDcsMTIgKzYwNywxMiBAQCB2b2lkIEtIVE1MVmll
dzo6bGF5b3V0KCkKICAgICBpZiAoZG9jdW1lbnQtPmlzSFRNTERvY3VtZW50KCkpIHsKICAgICAg
ICAgTm9kZUltcGwgKmJvZHkgPSBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnRJbXBsKj4oZG9jdW1l
bnQpLT5ib2R5KCk7CiAgICAgICAgIGlmIChib2R5ICYmIGJvZHktPnJlbmRlcmVyKCkpIHsKLSAg
ICAgICAgICAgIGlmIChib2R5LT5pZCgpID09IElEX0ZSQU1FU0VUKSB7CisgICAgICAgICAgICBp
ZiAoYm9keS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZyYW1lc2V0KCkpKSB7CiAgICAgICAgICAg
ICAgICAgYm9keS0+cmVuZGVyZXIoKS0+c2V0TmVlZHNMYXlvdXQodHJ1ZSk7CiAgICAgICAgICAg
ICAgICAgdk1vZGUgPSBBbHdheXNPZmY7CiAgICAgICAgICAgICAgICAgaE1vZGUgPSBBbHdheXNP
ZmY7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChib2R5LT5pZCgpID09IElE
X0JPRFkpIHsKKyAgICAgICAgICAgIGVsc2UgaWYgKGJvZHktPmhhc1RhZ05hbWUoSFRNTE5hbWVz
Ojpib2R5KCkpKSB7CiAgICAgICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiBvID0gKHJvb3RSZW5k
ZXJlci0+c3R5bGUoKS0+b3ZlcmZsb3coKSA9PSBPVklTSUJMRSkgPyBib2R5LT5yZW5kZXJlcigp
IDogcm9vdFJlbmRlcmVyOwogICAgICAgICAgICAgICAgIGFwcGx5T3ZlcmZsb3dUb1ZpZXdwb3J0
KG8sIGhNb2RlLCB2TW9kZSk7IC8vIE9ubHkgYXBwbGllcyB0byBIVE1MIFVBcywgbm90IHRvIFhN
TC9YSFRNTCBVQXMKICAgICAgICAgICAgIH0KQEAgLTg3NywxMCArODc3LDcgQEAgdm9pZCBLSFRN
TFZpZXc6OnZpZXdwb3J0TW91c2VEb3VibGVDbGljawogCiBzdGF0aWMgYm9vbCBpc1N1Ym1pdElt
YWdlKERPTTo6Tm9kZUltcGwgKm5vZGUpCiB7Ci0gICAgcmV0dXJuIG5vZGUKLSAgICAgICAgJiYg
bm9kZS0+aXNIVE1MRWxlbWVudCgpCi0gICAgICAgICYmIG5vZGUtPmlkKCkgPT0gSURfSU5QVVQK
LSAgICAgICAgJiYgc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudEltcGwqPihub2RlKS0+aW5w
dXRUeXBlKCkgPT0gSFRNTElucHV0RWxlbWVudEltcGw6OklNQUdFOworICAgIHJldHVybiBub2Rl
ICYmIG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppbnB1dCgpKSAmJiBzdGF0aWNfY2FzdDxI
VE1MSW5wdXRFbGVtZW50SW1wbCo+KG5vZGUpLT5pbnB1dFR5cGUoKSA9PSBIVE1MSW5wdXRFbGVt
ZW50SW1wbDo6SU1BR0U7CiB9CiAKIHZvaWQgS0hUTUxWaWV3Ojp2aWV3cG9ydE1vdXNlTW92ZUV2
ZW50KCBRTW91c2VFdmVudCAqIF9tb3VzZSApCkluZGV4OiBraHRtbC9jc3MvY3NzX2Jhc2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2Nzcy9jc3NfYmFz
ZS5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTUKZGlmZiAtdSAtcCAtcjEuMTUga2h0bWwv
Y3NzL2Nzc19iYXNlLmNwcAotLS0ga2h0bWwvY3NzL2Nzc19iYXNlLmNwcAkxMiBKdW4gMjAwNSAw
NDowNzozMCAtMDAwMAkxLjE1CisrKyBraHRtbC9jc3MvY3NzX2Jhc2UuY3BwCTIzIEp1biAyMDA1
IDIxOjUxOjU5IC0wMDAwCkBAIC05Myw2ICs5MywxMiBAQCBTdHlsZUxpc3RJbXBsOjp+U3R5bGVM
aXN0SW1wbCgpCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK3N0YXRpYyBjb25zdCBR
dWFsaWZpZWROYW1lJiBhbnlUYWdOYW1lKCkKK3sKKyAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBh
bnlOYW1lKG51bGxBdG9tLCBzdGFyQXRvbSwgc3RhckF0b20pOworICAgIHJldHVybiBhbnlOYW1l
OworfQorCiB2b2lkIENTU1NlbGVjdG9yOjpwcmludCh2b2lkKQogewogICAgIGtkRGVidWcoIDYw
ODAgKSA8PCAiW1NlbGVjdG9yOiB0YWcgPSAiIDw8ICAgICAgIHRhZyA8PCAiLCBhdHRyID0gXCIi
IDw8IGF0dHIgPDwgIlwiLCBtYXRjaCA9IFwiIiA8PCBtYXRjaApJbmRleDoga2h0bWwvY3NzL2Nz
c19iYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvY3Nz
L2Nzc19iYXNlLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTIKZGlmZiAtdSAtcCAtcjEuMTIg
a2h0bWwvY3NzL2Nzc19iYXNlLmgKLS0tIGtodG1sL2Nzcy9jc3NfYmFzZS5oCTEyIEp1biAyMDA1
IDA0OjA3OjMwIC0wMDAwCTEuMTIKKysrIGtodG1sL2Nzcy9jc3NfYmFzZS5oCTIzIEp1biAyMDA1
IDIxOjUxOjU5IC0wMDAwCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiZG9tL2RvbV9zdHJp
bmcuaCIKICNpbmNsdWRlICJkb20vZG9tX21pc2MuaCIKICNpbmNsdWRlICJ4bWwvZG9tX25vZGVp
bXBsLmgiCisjaW5jbHVkZSAiZG9tX3FuYW1lLmgiCiAjaW5jbHVkZSAibWlzYy9zaGFyZWQuaCIK
ICNpbmNsdWRlIDxxZGF0ZXRpbWUuaD4KICNpbmNsdWRlIDxxcHRybGlzdC5oPgpAQCAtNDYsMjAg
KzQ3LDIwIEBAIG5hbWVzcGFjZSBET00gewogICAgIGNsYXNzIERvY3VtZW50SW1wbDsKIAogICAg
IHN0cnVjdCBDU1NOYW1lc3BhY2UgewotICAgICAgICBET01TdHJpbmcgbV9wcmVmaXg7Ci0gICAg
ICAgIERPTVN0cmluZyBtX3VyaTsKKyAgICAgICAgQXRvbWljU3RyaW5nIG1fcHJlZml4OworICAg
ICAgICBBdG9taWNTdHJpbmcgbV91cmk7CiAgICAgICAgIENTU05hbWVzcGFjZSogbV9wYXJlbnQ7
CiAKICAgICAgICAgTUFJTl9USFJFQURfQUxMT0NBVEVEOwogCi0gICAgICAgIENTU05hbWVzcGFj
ZShjb25zdCBET01TdHJpbmcmIHAsIGNvbnN0IERPTVN0cmluZyYgdSwgQ1NTTmFtZXNwYWNlKiBw
YXJlbnQpIAorICAgICAgICBDU1NOYW1lc3BhY2UoY29uc3QgQXRvbWljU3RyaW5nJiBwLCBjb25z
dCBBdG9taWNTdHJpbmcmIHUsIENTU05hbWVzcGFjZSogcGFyZW50KSAKICAgICAgICAgICAgIDpt
X3ByZWZpeChwKSwgbV91cmkodSksIG1fcGFyZW50KHBhcmVudCkge30KICAgICAgICAgfkNTU05h
bWVzcGFjZSgpIHsgZGVsZXRlIG1fcGFyZW50OyB9CiAgICAgICAgIAotICAgICAgICBjb25zdCBE
T01TdHJpbmcmIHVyaSgpIHsgcmV0dXJuIG1fdXJpOyB9Ci0gICAgICAgIGNvbnN0IERPTVN0cmlu
ZyYgcHJlZml4KCkgeyByZXR1cm4gbV9wcmVmaXg7IH0KKyAgICAgICAgY29uc3QgQXRvbWljU3Ry
aW5nJiB1cmkoKSB7IHJldHVybiBtX3VyaTsgfQorICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcm
IHByZWZpeCgpIHsgcmV0dXJuIG1fcHJlZml4OyB9CiAgICAgICAgIAotICAgICAgICBDU1NOYW1l
c3BhY2UqIG5hbWVzcGFjZUZvclByZWZpeChjb25zdCBET01TdHJpbmcmIHByZWZpeCkgeworICAg
ICAgICBDU1NOYW1lc3BhY2UqIG5hbWVzcGFjZUZvclByZWZpeChjb25zdCBBdG9taWNTdHJpbmcm
IHByZWZpeCkgewogICAgICAgICAgICAgaWYgKHByZWZpeCA9PSBtX3ByZWZpeCkKICAgICAgICAg
ICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICAgICAgIGlmIChtX3BhcmVudCkKQEAgLTcyLDgg
KzczLDE0IEBAIG5hbWVzcGFjZSBET00gewogICAgIGNsYXNzIENTU1NlbGVjdG9yCiAgICAgewog
ICAgIHB1YmxpYzoKLQlDU1NTZWxlY3RvcigpCi0JICAgIDogdGFnSGlzdG9yeSgwKSwgc2ltcGxl
U2VsZWN0b3IoMCksIG5leHRTZWxlY3RvcigwKSwgYXR0cigwKSwgdGFnKGFueVFOYW1lKSwKKyAg
ICAgICAgQ1NTU2VsZWN0b3IoKQorICAgICAgICAgICAgOiB0YWdIaXN0b3J5KDApLCBzaW1wbGVT
ZWxlY3RvcigwKSwgbmV4dFNlbGVjdG9yKDApLCBhdHRyKDApLCB0YWcoYW55VGFnTmFtZSgpKSwK
KyAgICAgICAgICAgICAgcmVsYXRpb24oIERlc2NlbmRhbnQgKSwgbWF0Y2goIE5vbmUgKSwKKyAg
ICAgICAgICAgICAgcHNldWRvSWQoIDAgKSwgX3BzZXVkb1R5cGUoUHNldWRvTm90UGFyc2VkKQor
ICAgICAgICB7fQorICAgICAgICAKKwlDU1NTZWxlY3Rvcihjb25zdCBRdWFsaWZpZWROYW1lJiBx
TmFtZSkKKwkgICAgOiB0YWdIaXN0b3J5KDApLCBzaW1wbGVTZWxlY3RvcigwKSwgbmV4dFNlbGVj
dG9yKDApLCBhdHRyKDApLCB0YWcocU5hbWUpLAogICAgICAgICAgICAgICByZWxhdGlvbiggRGVz
Y2VuZGFudCApLCBtYXRjaCggTm9uZSApLAogICAgICAgICAgICAgICBwc2V1ZG9JZCggMCApLCBf
cHNldWRvVHlwZShQc2V1ZG9Ob3RQYXJzZWQpCiAgICAgICAgIHt9CkBAIC0xNjcsMTIgKzE3NCwx
NyBAQCBuYW1lc3BhY2UgRE9NIHsKICAgICAgICAgICAgIHJldHVybiBfcHNldWRvVHlwZTsKICAg
ICAgICAgfQogCisgICAgICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBhbnlUYWdOYW1l
KCk7CisKKyAgICAgICAgYm9vbCBoYXNUYWcoKSBjb25zdCB7IHJldHVybiB0YWcgIT0gYW55VGFn
TmFtZSgpOyB9CisKIAltdXRhYmxlIERPTTo6QXRvbWljU3RyaW5nIHZhbHVlOwogCUNTU1NlbGVj
dG9yKiB0YWdIaXN0b3J5OwogICAgICAgICBDU1NTZWxlY3Rvciogc2ltcGxlU2VsZWN0b3I7IC8v
IFVzZWQgZm9yIDpub3QuCiAgICAgICAgIENTU1NlbGVjdG9yKiBuZXh0U2VsZWN0b3I7IC8vIHVz
ZWQgZm9yICwtY2hhaW5lZCBzZWxlY3RvcnMKIAlRX1VJTlQzMiAgICAgYXR0cjsKLQlRX1VJTlQz
MiAgICAgdGFnOworCQorICAgICAgICBRdWFsaWZpZWROYW1lIHRhZzsKIAogICAgICAgICBSZWxh
dGlvbiByZWxhdGlvbiAgICAgICAgICAgICAgOiAzOwogCW11dGFibGUgTWF0Y2ggIG1hdGNoICAg
ICAgICAgICA6IDQ7CkluZGV4OiBraHRtbC9jc3MvY3NzX3J1bGVpbXBsLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9jc3MvY3NzX3J1bGVpbXBsLmNwcCx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xOApkaWZmIC11IC1wIC1yMS4xOCBraHRtbC9jc3MvY3Nz
X3J1bGVpbXBsLmNwcAotLS0ga2h0bWwvY3NzL2Nzc19ydWxlaW1wbC5jcHAJMTEgTWF5IDIwMDUg
MDU6NDk6MzQgLTAwMDAJMS4xOAorKysga2h0bWwvY3NzL2Nzc19ydWxlaW1wbC5jcHAJMjMgSnVu
IDIwMDUgMjE6NTE6NTkgLTAwMDAKQEAgLTMxLDcgKzMxLDYgQEAKICNpbmNsdWRlICJjc3MvY3Nz
X3J1bGVpbXBsLmgiCiAKICNpbmNsdWRlICJtaXNjL2xvYWRlci5oIgotI2luY2x1ZGUgIm1pc2Mv
aHRtbHRhZ3MuaCIKICNpbmNsdWRlICJtaXNjL2h0bWxhdHRycy5oIgogI2luY2x1ZGUgInhtbC9k
b21fZG9jaW1wbC5oIgogCkluZGV4OiBraHRtbC9jc3MvY3NzX3N0eWxlc2hlZXRpbXBsLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9jc3MvY3NzX3N0eWxl
c2hlZXRpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMgpkaWZmIC11IC1wIC1yMS4x
MiBraHRtbC9jc3MvY3NzX3N0eWxlc2hlZXRpbXBsLmNwcAotLS0ga2h0bWwvY3NzL2Nzc19zdHls
ZXNoZWV0aW1wbC5jcHAJMTEgTWF5IDIwMDUgMDA6NTg6MjcgLTAwMDAJMS4xMgorKysga2h0bWwv
Y3NzL2Nzc19zdHlsZXNoZWV0aW1wbC5jcHAJMjMgSnVuIDIwMDUgMjE6NTI6MDAgLTAwMDAKQEAg
LTM4LDggKzM4LDYgQEAKICNpbmNsdWRlICJodG1sL2h0bWxfZG9jdW1lbnRpbXBsLmgiCiAjaW5j
bHVkZSAibWlzYy9sb2FkZXIuaCIKIAotI2luY2x1ZGUgInhtbF9uYW1lc3BhY2VfdGFibGUuaCIK
LQogI2luY2x1ZGUgPGtkZWJ1Zy5oPgogCiB1c2luZyBuYW1lc3BhY2UgRE9NOwpAQCAtMjEwLDcg
KzIwOCw3IEBAIHZvaWQgQ1NTU3R5bGVTaGVldEltcGw6OmRlbGV0ZVJ1bGUoIHVuc2kKICAgICBi
LT5kZXJlZigpOwogfQogCi12b2lkIENTU1N0eWxlU2hlZXRJbXBsOjphZGROYW1lc3BhY2UoQ1NT
UGFyc2VyKiBwLCBjb25zdCBET006OkRPTVN0cmluZyYgcHJlZml4LCBjb25zdCBET006OkRPTVN0
cmluZyYgdXJpKQordm9pZCBDU1NTdHlsZVNoZWV0SW1wbDo6YWRkTmFtZXNwYWNlKENTU1BhcnNl
ciogcCwgY29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgsIGNvbnN0IEF0b21pY1N0cmluZyYgdXJp
KQogewogICAgIGlmICh1cmkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CkBAIC0yMjAsMjYg
KzIxOCwyMSBAQCB2b2lkIENTU1N0eWxlU2hlZXRJbXBsOjphZGROYW1lc3BhY2UoQ1NTCiAgICAg
aWYgKHByZWZpeC5pc0VtcHR5KCkpCiAgICAgICAgIC8vIFNldCB0aGUgZGVmYXVsdCBuYW1lc3Bh
Y2Ugb24gdGhlIHBhcnNlciBzbyB0aGF0IHNlbGVjdG9ycyB0aGF0IG9taXQgbmFtZXNwYWNlIGlu
Zm8gd2lsbAogICAgICAgICAvLyBiZSBhYmxlIHRvIHBpY2sgaXQgdXAgZWFzaWx5LgotICAgICAg
ICBwLT5kZWZhdWx0TmFtZXNwYWNlID0gWG1sTmFtZXNwYWNlVGFibGU6OmdldE5hbWVzcGFjZUlE
KHVyaSwgZmFsc2UpOworICAgICAgICBwLT5kZWZhdWx0TmFtZXNwYWNlID0gdXJpOwogfQogCi12
b2lkIENTU1N0eWxlU2hlZXRJbXBsOjpkZXRlcm1pbmVOYW1lc3BhY2UoUV9VSU5UMzImIGlkLCBj
b25zdCBET006OkRPTVN0cmluZyYgcHJlZml4KQorY29uc3QgQXRvbWljU3RyaW5nJiBDU1NTdHls
ZVNoZWV0SW1wbDo6ZGV0ZXJtaW5lTmFtZXNwYWNlKGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4
KQogewotICAgIC8vIElmIHRoZSBzdHlsZXNoZWV0IGhhcyBubyBuYW1lc3BhY2VzIHdlIGNhbiBq
dXN0IHJldHVybi4gIFRoZXJlIHdvbid0IGJlIGFueSBuZWVkIHRvIGV2ZXIgY2hlY2sKLSAgICAv
LyBuYW1lc3BhY2UgdmFsdWVzIGluIHNlbGVjdG9ycy4KLSAgICBpZiAoIW1fbmFtZXNwYWNlcykK
LSAgICAgICAgcmV0dXJuOwotICAgIAogICAgIGlmIChwcmVmaXguaXNFbXB0eSgpKQotICAgICAg
ICBpZCA9IG1ha2VJZChub05hbWVzcGFjZSwgbG9jYWxOYW1lUGFydChpZCkpOyAvLyBObyBuYW1l
c3BhY2UuIElmIGFuIGVsZW1lbnQvYXR0cmlidXRlIGhhcyBhIG5hbWVzcGFjZSwgd2Ugd29uJ3Qg
bWF0Y2ggaXQuCi0gICAgZWxzZSBpZiAocHJlZml4ID09ICIqIikKLSAgICAgICAgaWQgPSBtYWtl
SWQoYW55TmFtZXNwYWNlLCBsb2NhbE5hbWVQYXJ0KGlkKSk7IC8vIFdlJ2xsIG1hdGNoIGFueSBu
YW1lc3BhY2UuCi0gICAgZWxzZSB7CisgICAgICAgIHJldHVybiBlbXB0eUF0b207IC8vIE5vIG5h
bWVzcGFjZS4gSWYgYW4gZWxlbWVudC9hdHRyaWJ1dGUgaGFzIGEgbmFtZXNwYWNlLCB3ZSB3b24n
dCBtYXRjaCBpdC4KKyAgICBlbHNlIGlmIChwcmVmaXggPT0gc3RhckF0b20pCisgICAgICAgIHJl
dHVybiBzdGFyQXRvbTsgLy8gV2UnbGwgbWF0Y2ggYW55IG5hbWVzcGFjZS4KKyAgICBlbHNlIGlm
IChtX25hbWVzcGFjZXMpIHsKICAgICAgICAgQ1NTTmFtZXNwYWNlKiBucyA9IG1fbmFtZXNwYWNl
cy0+bmFtZXNwYWNlRm9yUHJlZml4KHByZWZpeCk7CiAgICAgICAgIGlmIChucykKLSAgICAgICAg
ICAgIC8vIExvb2sgdXAgdGhlIGlkIGZvciB0aGlzIG5hbWVzcGFjZSBVUkkuCi0gICAgICAgICAg
ICBpZCA9IG1ha2VJZChYbWxOYW1lc3BhY2VUYWJsZTo6Z2V0TmFtZXNwYWNlSUQobnMtPnVyaSgp
LCBmYWxzZSksIGxvY2FsTmFtZVBhcnQoaWQpKTsKKyAgICAgICAgICAgIHJldHVybiBucy0+dXJp
KCk7CiAgICAgfQorICAgIHJldHVybiBlbXB0eUF0b207IC8vIEFzc3VtZSB3ZSB3b250IG1hdGNo
IGFueSBuYW1lc3BhY2VzLgogfQogCiBib29sIENTU1N0eWxlU2hlZXRJbXBsOjpwYXJzZVN0cmlu
Zyhjb25zdCBET01TdHJpbmcgJnN0cmluZywgYm9vbCBzdHJpY3QpCkluZGV4OiBraHRtbC9jc3Mv
Y3NzX3N0eWxlc2hlZXRpbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNv
cmUva2h0bWwvY3NzL2Nzc19zdHlsZXNoZWV0aW1wbC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjExCmRpZmYgLXUgLXAgLXIxLjExIGtodG1sL2Nzcy9jc3Nfc3R5bGVzaGVldGltcGwuaAotLS0g
a2h0bWwvY3NzL2Nzc19zdHlsZXNoZWV0aW1wbC5oCTExIE1heSAyMDA1IDAwOjU4OjI3IC0wMDAw
CTEuMTEKKysrIGtodG1sL2Nzcy9jc3Nfc3R5bGVzaGVldGltcGwuaAkyMyBKdW4gMjAwNSAyMTo1
MjowMCAtMDAwMApAQCAtMTA0LDggKzEwNCw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGRlbGV0ZVJ1
bGUgKCB1bnNpZ25lZCBsb25nIGluZGV4LCBpbnQgJmV4Y2VwdGlvbmNvZGUgKTsKICAgICB1bnNp
Z25lZCBsb25nIGFkZFJ1bGUgKCBjb25zdCBET01TdHJpbmcgJnNlbGVjdG9yLCBjb25zdCBET01T
dHJpbmcgJnN0eWxlLCBsb25nIGluZGV4LCBpbnQgJmV4Y2VwdGlvbmNvZGUgKTsKIAotICAgIHZv
aWQgYWRkTmFtZXNwYWNlKENTU1BhcnNlciogcCwgY29uc3QgRE9NOjpET01TdHJpbmcmIHByZWZp
eCwgY29uc3QgRE9NOjpET01TdHJpbmcmIHVyaSk7Ci0gICAgdm9pZCBkZXRlcm1pbmVOYW1lc3Bh
Y2UoUV9VSU5UMzImIGlkLCBjb25zdCBET006OkRPTVN0cmluZyYgcHJlZml4KTsKKyAgICB2b2lk
IGFkZE5hbWVzcGFjZShDU1NQYXJzZXIqIHAsIGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4LCBj
b25zdCBBdG9taWNTdHJpbmcmIHVyaSk7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBkZXRlcm1p
bmVOYW1lc3BhY2UoY29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgpOwogICAgIAogICAgIHZpcnR1
YWwgYm9vbCBwYXJzZVN0cmluZyggY29uc3QgRE9NU3RyaW5nICZzdHJpbmcsIGJvb2wgc3RyaWN0
ID0gdHJ1ZSApOwogCkluZGV4OiBraHRtbC9jc3MvY3NzcGFyc2VyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9jc3MvY3NzcGFyc2VyLmNwcCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS45OApkaWZmIC11IC1wIC1yMS45OCBraHRtbC9jc3MvY3NzcGFyc2Vy
LmNwcAotLS0ga2h0bWwvY3NzL2Nzc3BhcnNlci5jcHAJMTEgTWF5IDIwMDUgMDI6MTA6MDkgLTAw
MDAJMS45OAorKysga2h0bWwvY3NzL2Nzc3BhcnNlci5jcHAJMjMgSnVuIDIwMDUgMjE6NTI6MDIg
LTAwMDAKQEAgLTEwMiw3ICsxMDIsNyBAQCBDU1NQYXJzZXI6OkNTU1BhcnNlciggYm9vbCBzdHJp
Y3RQYXJzaW5nCiAgICAgaW1wb3J0YW50ID0gZmFsc2U7CiAgICAgaW5QYXJzZVNob3J0SGFuZCA9
IGZhbHNlOwogICAgIAotICAgIGRlZmF1bHROYW1lc3BhY2UgPSBhbnlOYW1lc3BhY2U7CisgICAg
ZGVmYXVsdE5hbWVzcGFjZSA9IHN0YXJBdG9tOwogICAgIAogICAgIHl5X3N0YXJ0ID0gMTsKIApA
QCAtMTYxLDcgKzE2MSw3IEBAIHZvaWQgQ1NTUGFyc2VyOjpzZXR1cFBhcnNlcihjb25zdCBjaGFy
ICoKIHZvaWQgQ1NTUGFyc2VyOjpwYXJzZVNoZWV0KCBDU1NTdHlsZVNoZWV0SW1wbCAqc2hlZXQs
IGNvbnN0IERPTVN0cmluZyAmc3RyaW5nICkKIHsKICAgICBzdHlsZUVsZW1lbnQgPSBzaGVldDsK
LSAgICBkZWZhdWx0TmFtZXNwYWNlID0gYW55TmFtZXNwYWNlOyAvLyBSZXNldCB0aGUgZGVmYXVs
dCBuYW1lc3BhY2UuCisgICAgZGVmYXVsdE5hbWVzcGFjZSA9IHN0YXJBdG9tOyAvLyBSZXNldCB0
aGUgZGVmYXVsdCBuYW1lc3BhY2UuCiAgICAgCiAgICAgc2V0dXBQYXJzZXIgKCIiLCBzdHJpbmcs
ICIiKTsKIApJbmRleDoga2h0bWwvY3NzL2Nzc3BhcnNlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2Nzcy9jc3NwYXJzZXIuaCx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS4zMApkaWZmIC11IC1wIC1yMS4zMCBraHRtbC9jc3MvY3NzcGFyc2VyLmgKLS0tIGto
dG1sL2Nzcy9jc3NwYXJzZXIuaAkxOSBOb3YgMjAwNCAwMDoxMjoyMCAtMDAwMAkxLjMwCisrKyBr
aHRtbC9jc3MvY3NzcGFyc2VyLmgJMjMgSnVuIDIwMDUgMjE6NTI6MDIgLTAwMDAKQEAgLTE2NCw3
ICsxNjQsNyBAQCBuYW1lc3BhY2UgRE9NIHsKIAlpbnQgbWF4UGFyc2VkUHJvcGVydGllczsKIAli
b29sIGluUGFyc2VTaG9ydEhhbmQ7CiAKLSAgICAgICAgUV9VSU5UMTYgZGVmYXVsdE5hbWVzcGFj
ZTsKKyAgICAgICAgQXRvbWljU3RyaW5nIGRlZmF1bHROYW1lc3BhY2U7CiAgICAgICAgIAogCXN0
YXRpYyBDU1NQYXJzZXIgKmN1cnJlbnRQYXJzZXI7CiAKSW5kZXg6IGtodG1sL2Nzcy9jc3NzdHls
ZXNlbGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRt
bC9jc3MvY3Nzc3R5bGVzZWxlY3Rvci5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTg3CmRp
ZmYgLXUgLXAgLXIxLjE4NyBraHRtbC9jc3MvY3Nzc3R5bGVzZWxlY3Rvci5jcHAKLS0tIGtodG1s
L2Nzcy9jc3NzdHlsZXNlbGVjdG9yLmNwcAkxMiBKdW4gMjAwNSAwNDowNzozMCAtMDAwMAkxLjE4
NworKysga2h0bWwvY3NzL2Nzc3N0eWxlc2VsZWN0b3IuY3BwCTIzIEp1biAyMDA1IDIxOjUyOjA2
IC0wMDAwCkBAIC0zMzksNyArMzM5LDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXRjaFJ1
bGVzKENTU1J1bAogICAgICAgICAgICAgbWF0Y2hSdWxlc0Zvckxpc3QocnVsZXMtPmdldENsYXNz
UnVsZXMoc2luZ2xlQ2xhc3MtPnN0cmluZygpLmltcGxlbWVudGF0aW9uKCkpLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RSdWxlSW5kZXgs
IGxhc3RSdWxlSW5kZXgpOwogICAgIH0KLSAgICBtYXRjaFJ1bGVzRm9yTGlzdChydWxlcy0+Z2V0
VGFnUnVsZXMoKHZvaWQqKShpbnQpbG9jYWxOYW1lUGFydChlbGVtZW50LT5pZCgpKSksCisgICAg
bWF0Y2hSdWxlc0Zvckxpc3QocnVsZXMtPmdldFRhZ1J1bGVzKGVsZW1lbnQtPmxvY2FsTmFtZSgp
LmltcGxlbWVudGF0aW9uKCkpLAogICAgICAgICAgICAgICAgICAgICAgIGZpcnN0UnVsZUluZGV4
LCBsYXN0UnVsZUluZGV4KTsKICAgICBtYXRjaFJ1bGVzRm9yTGlzdChydWxlcy0+Z2V0VW5pdmVy
c2FsUnVsZXMoKSwgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgpOwogICAgIApAQCAtMzYw
LDkgKzM2MCw5IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hSdWxlc0Zvckxpc3QKICAg
ICBpZiAoIXJ1bGVzKSByZXR1cm47CiAgICAgZm9yIChDU1NSdWxlRGF0YSogZCA9IHJ1bGVzLT5m
aXJzdCgpOyBkOyBkID0gZC0+bmV4dCgpKSB7CiAgICAgICAgIENTU1N0eWxlUnVsZUltcGwqIHJ1
bGUgPSBkLT5ydWxlKCk7Ci0gICAgICAgIFFfVUlOVDE2IGNzc1RhZ0lkID0gbG9jYWxOYW1lUGFy
dChlbGVtZW50LT5pZCgpKTsKLSAgICAgICAgUV9VSU5UMTYgdGFnID0gbG9jYWxOYW1lUGFydChk
LT5zZWxlY3RvcigpLT50YWcpOwotICAgICAgICBpZiAoKGNzc1RhZ0lkID09IHRhZyB8fCB0YWcg
PT0gYW55TG9jYWxOYW1lKSAmJiBjaGVja1NlbGVjdG9yKGQtPnNlbGVjdG9yKCksIGVsZW1lbnQp
KSB7CisgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lID0gZWxlbWVudC0+bG9j
YWxOYW1lKCk7CisgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgc2VsZWN0b3JMb2NhbE5hbWUg
PSBkLT5zZWxlY3RvcigpLT50YWcubG9jYWxOYW1lKCk7CisgICAgICAgIGlmICgobG9jYWxOYW1l
ID09IHNlbGVjdG9yTG9jYWxOYW1lIHx8IHNlbGVjdG9yTG9jYWxOYW1lID09IHN0YXJBdG9tKSAm
JiBjaGVja1NlbGVjdG9yKGQtPnNlbGVjdG9yKCksIGVsZW1lbnQpKSB7CiAgICAgICAgICAgICAv
LyBJZiB0aGUgcnVsZSBoYXMgbm8gcHJvcGVydGllcyB0byBhcHBseSwgdGhlbiBpZ25vcmUgaXQu
CiAgICAgICAgICAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbkltcGwqIGRlY2wgPSBydWxl
LT5kZWNsYXJhdGlvbigpOwogICAgICAgICAgICAgaWYgKCFkZWNsIHx8ICFkZWNsLT5sZW5ndGgo
KSkgY29udGludWU7CkBAIC02MDksNyArNjA5LDcgQEAgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpj
YW5TaGFyZVN0eWxlV2l0aAogICAgIGlmIChuLT5pc1N0eWxlZEVsZW1lbnQoKSkgewogICAgICAg
ICBib29sIG1vdXNlSW5zaWRlID0gZWxlbWVudC0+cmVuZGVyZXIoKSA/IGVsZW1lbnQtPnJlbmRl
cmVyKCktPm1vdXNlSW5zaWRlKCkgOiBmYWxzZTsKICAgICAgICAgU3R5bGVkRWxlbWVudEltcGwq
IHMgPSBzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50SW1wbCo+KG4pOwotICAgICAgICBpZiAocy0+
cmVuZGVyZXIoKSAmJiAocy0+aWQoKSA9PSBlbGVtZW50LT5pZCgpKSAmJiAhcy0+aGFzSUQoKSAm
JgorICAgICAgICBpZiAocy0+cmVuZGVyZXIoKSAmJiAocy0+dGFnTmFtZSgpID09IGVsZW1lbnQt
PnRhZ05hbWUoKSkgJiYgIXMtPmhhc0lEKCkgJiYKICAgICAgICAgICAgIChzLT5oYXNDbGFzcygp
ID09IGVsZW1lbnQtPmhhc0NsYXNzKCkpICYmICFzLT5pbmxpbmVTdHlsZURlY2woKSAmJgogICAg
ICAgICAgICAgKHMtPmhhc01hcHBlZEF0dHJpYnV0ZXMoKSA9PSBzdHlsZWRFbGVtZW50LT5oYXNN
YXBwZWRBdHRyaWJ1dGVzKCkpICYmCiAgICAgICAgICAgICAocy0+aXNMaW5rKCkgPT0gZWxlbWVu
dC0+aXNMaW5rKCkpICYmIApAQCAtODg1LDIzICs4ODUsMjMgQEAgdm9pZCBDU1NTdHlsZVNlbGVj
dG9yOjphZGp1c3RSZW5kZXJTdHlsZQogICAgICAgICAvLyBTaXRlcyBhbHNvIGNvbW1vbmx5IHVz
ZSBkaXNwbGF5OmlubGluZS9ibG9jayBvbiA8dGQ+cyBhbmQgPHRhYmxlPnMuICBJbiBxdWlya3Mg
bW9kZSB3ZSBmb3JjZQogICAgICAgICAvLyB0aGVzZSB0YWdzIHRvIHJldGFpbiB0aGVpciBkaXNw
bGF5IHR5cGVzLgogICAgICAgICBpZiAoIXN0cmljdFBhcnNpbmcgJiYgZSkgewotICAgICAgICAg
ICAgaWYgKGUtPmlkKCkgPT0gSURfVEQpIHsKKyAgICAgICAgICAgIGlmIChlLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6dGQoKSkpIHsKICAgICAgICAgICAgICAgICBzdHlsZS0+c2V0RGlzcGxheShU
QUJMRV9DRUxMKTsKICAgICAgICAgICAgICAgICBzdHlsZS0+c2V0RmxvYXRpbmcoRk5PTkUpOwog
ICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoZS0+aWQoKSA9PSBJRF9UQUJMRSkK
KyAgICAgICAgICAgIGVsc2UgaWYgKGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0YWJsZSgpKSkK
ICAgICAgICAgICAgICAgICBzdHlsZS0+c2V0RGlzcGxheShzdHlsZS0+aXNEaXNwbGF5SW5saW5l
VHlwZSgpID8gSU5MSU5FX1RBQkxFIDogVEFCTEUpOwogICAgICAgICB9CiAKICAgICAgICAgLy8g
RnJhbWVzIGFuZCBmcmFtZXNldHMgbmV2ZXIgaG9ub3IgcG9zaXRpb246cmVsYXRpdmUgb3IgcG9z
aXRpb246YWJzb2x1dGUuICBUaGlzIGlzIG5lY2Vzc2FyeSB0bwogICAgICAgICAvLyBmaXggYSBj
cmFzaCB3aGVyZSBhIHNpdGUgdHJpZXMgdG8gcG9zaXRpb24gdGhlc2Ugb2JqZWN0cy4gIFRoZXkg
YWxzbyBuZXZlciBob25vciBkaXNwbGF5LgotICAgICAgICBpZiAoZSAmJiAoZS0+aWQoKSA9PSBJ
RF9GUkFNRSB8fCBlLT5pZCgpID09IElEX0ZSQU1FU0VUKSkgeworICAgICAgICBpZiAoZSAmJiAo
ZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZyYW1lKCkpIHx8IGUtPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjpmcmFtZXNldCgpKSkpIHsKICAgICAgICAgICAgIHN0eWxlLT5zZXRQb3NpdGlvbihTVEFU
SUMpOwogICAgICAgICAgICAgc3R5bGUtPnNldERpc3BsYXkoQkxPQ0spOwogICAgICAgICB9CiAK
ICAgICAgICAgLy8gVGFibGUgaGVhZGVycyB3aXRoIGEgdGV4dC1hbGlnbiBvZiBhdXRvIHdpbGwg
Y2hhbmdlIHRoZSB0ZXh0LWFsaWduIHRvIGNlbnRlci4KLSAgICAgICAgaWYgKGUgJiYgZS0+aWQo
KSA9PSBJRF9USCAmJiBzdHlsZS0+dGV4dEFsaWduKCkgPT0gVEFBVVRPKQorICAgICAgICBpZiAo
ZSAmJiBlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGgoKSkgJiYgc3R5bGUtPnRleHRBbGlnbigp
ID09IFRBQVVUTykKICAgICAgICAgICAgIHN0eWxlLT5zZXRUZXh0QWxpZ24oQ0VOVEVSKTsKICAg
ICAgICAgCiAgICAgICAgIC8vIE11dGF0ZSB0aGUgZGlzcGxheSB0byBCTE9DSyBvciBUQUJMRSBm
b3IgY2VydGFpbiBjYXNlcywgZS5nLiwgaWYgc29tZW9uZSBhdHRlbXB0cyB0bwpAQCAtOTc5LDcg
Kzk3OSw3IEBAIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6Y2hlY2tTZWxlY3RvcihDU1MKICAgICAv
LyBXZSB0cmFjayB3aGV0aGVyIG9yIG5vdCB0aGUgcnVsZSBjb250YWlucyBvbmx5IDpob3ZlciBh
bmQgOmFjdGl2ZSBpbiBhIHNpbXBsZSBzZWxlY3Rvci4gSWYKICAgICAvLyBzbywgd2UgY2FuJ3Qg
YWxsb3cgdGhhdCB0byBhcHBseSB0byBldmVyeSBlbGVtZW50IG9uIHRoZSBwYWdlLiAgV2UgYXNz
dW1lIHRoZSBhdXRob3IgaW50ZW5kZWQKICAgICAvLyB0byBhcHBseSB0aGUgcnVsZXMgb25seSB0
byBsaW5rcy4KLSAgICBib29sIG9ubHlIb3ZlckFjdGl2ZSA9IChzZWwtPnRhZyA9PSBhbnlRTmFt
ZSAmJgorICAgIGJvb2wgb25seUhvdmVyQWN0aXZlID0gKCFzZWwtPmhhc1RhZygpICYmCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKHNlbC0+bWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OlBzZXVk
b0NsYXNzICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsLT5wc2V1ZG9UeXBl
KCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0hvdmVyIHx8CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2VsLT5wc2V1ZG9UeXBlKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0FjdGl2ZSkp
KTsKQEAgLTEwOTYsMTkgKzEwOTYsMTQgQEAgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpjaGVja09u
ZVNlbGVjdG9yKAogICAgIGlmKCFlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAo
c2VsLT50YWcgIT0gYW55UU5hbWUpIHsKLSAgICAgICAgaW50IGVsdElEID0gZS0+aWQoKTsKLSAg
ICAgICAgUV9VSU5UMTYgbG9jYWxOYW1lID0gbG9jYWxOYW1lUGFydChlbHRJRCk7Ci0gICAgICAg
IFFfVUlOVDE2IG5zID0gbmFtZXNwYWNlUGFydChlbHRJRCk7Ci0gICAgICAgIFFfVUlOVDE2IHNl
bExvY2FsTmFtZSA9IGxvY2FsTmFtZVBhcnQoc2VsLT50YWcpOwotICAgICAgICBRX1VJTlQxNiBz
ZWxOUyA9IG5hbWVzcGFjZVBhcnQoc2VsLT50YWcpOwotICAgICAgICAKLSAgICAgICAgaWYgKGxv
Y2FsTmFtZSA8PSBJRF9MQVNUX1RBRyAmJiBlLT5pc0hUTUxFbGVtZW50KCkpCi0gICAgICAgICAg
ICBucyA9IHhodG1sTmFtZXNwYWNlOyAvLyBGSVhNRTogUmVhbGx5IHdhbnQgdG8gbW92ZSBhd2F5
IGZyb20gdGhpcyBjb21wbGljYXRlZCBoYWNrZXJ5IGFuZCBqdXN0Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBzd2l0Y2ggdGFncyBhbmQgYXR0ciBuYW1lcyBvdmVyIHRvIEF0
b21pY1N0cmluZ3MuCi0gICAgICAgIAotICAgICAgICBpZiAoKHNlbExvY2FsTmFtZSAhPSBhbnlM
b2NhbE5hbWUgJiYgbG9jYWxOYW1lICE9IHNlbExvY2FsTmFtZSkgfHwKLSAgICAgICAgICAgIChz
ZWxOUyAhPSBhbnlOYW1lc3BhY2UgJiYgbnMgIT0gc2VsTlMpKQorICAgIGlmIChzZWwtPmhhc1Rh
ZygpKSB7CisgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lID0gZS0+bG9jYWxO
YW1lKCk7CisgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbnMgPSBlLT5uYW1lc3BhY2VVUkko
KTsKKyAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBzZWxMb2NhbE5hbWUgPSBzZWwtPnRhZy5s
b2NhbE5hbWUoKTsKKyAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBzZWxOUyA9IHNlbC0+dGFn
Lm5hbWVzcGFjZVVSSSgpOworICAgIAorICAgICAgICBpZiAoKHNlbExvY2FsTmFtZSAhPSBzdGFy
QXRvbSAmJiBsb2NhbE5hbWUgIT0gc2VsTG9jYWxOYW1lKSB8fAorICAgICAgICAgICAgKHNlbE5T
ICE9IHN0YXJBdG9tICYmIG5zICE9IHNlbE5TKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CiAKQEAgLTEyOTUsNyArMTI5MCw3IEBAIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6Y2hl
Y2tPbmVTZWxlY3RvcigKICAgICAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0hvdmVy
OiB7CiAgICAgICAgICAgICAgICAgLy8gSWYgd2UncmUgaW4gcXVpcmtzIG1vZGUsIHRoZW4gaG92
ZXIgc2hvdWxkIG5ldmVyIG1hdGNoIGFuY2hvcnMgd2l0aCBubwogICAgICAgICAgICAgICAgIC8v
IGhyZWYuICBUaGlzIGlzIGltcG9ydGFudCBmb3Igc2l0ZXMgbGlrZSB3c2ouY29tLgotICAgICAg
ICAgICAgICAgIGlmIChzdHJpY3RQYXJzaW5nIHx8IGUtPmlkKCkgIT0gSURfQSB8fCBlLT5pc0xp
bmsoKSkgeworICAgICAgICAgICAgICAgIGlmIChzdHJpY3RQYXJzaW5nIHx8ICFlLT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6YSgpKSB8fCBlLT5pc0xpbmsoKSkgewogICAgICAgICAgICAgICAgICAg
ICBpZiAoZWxlbWVudCA9PSBlICYmIHN0eWxlKQogICAgICAgICAgICAgICAgICAgICAgICAgc3R5
bGUtPnNldEFmZmVjdGVkQnlIb3ZlclJ1bGVzKHRydWUpOwogICAgICAgICAgICAgICAgICAgICBp
ZiAoZS0+cmVuZGVyZXIoKSkgewpAQCAtMTMyNiw3ICsxMzIxLDcgQEAgYm9vbCBDU1NTdHlsZVNl
bGVjdG9yOjpjaGVja09uZVNlbGVjdG9yKAogICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6
UHNldWRvQWN0aXZlOgogICAgICAgICAgICAgICAgIC8vIElmIHdlJ3JlIGluIHF1aXJrcyBtb2Rl
LCB0aGVuIDphY3RpdmUgc2hvdWxkIG5ldmVyIG1hdGNoIGFuY2hvcnMgd2l0aCBubwogICAgICAg
ICAgICAgICAgIC8vIGhyZWYuIAotICAgICAgICAgICAgICAgIGlmIChzdHJpY3RQYXJzaW5nIHx8
IGUtPmlkKCkgIT0gSURfQSB8fCBlLT5pc0xpbmsoKSkgeworICAgICAgICAgICAgICAgIGlmIChz
dHJpY3RQYXJzaW5nIHx8ICFlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YSgpKSB8fCBlLT5pc0xp
bmsoKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudCA9PSBlICYmIHN0eWxlKQog
ICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGUtPnNldEFmZmVjdGVkQnlBY3RpdmVSdWxlcyh0
cnVlKTsKICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZS0+cmVuZGVyZXIoKSkKQEAgLTE0
MjUsOSArMTQyMCw5IEBAIHZvaWQgQ1NTUnVsZVNldDo6YWRkUnVsZShDU1NTdHlsZVJ1bGVJbXAK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAgCi0gICAgUV9VSU5UMTYgbG9jYWxOYW1lID0g
bG9jYWxOYW1lUGFydChzZWwtPnRhZyk7Ci0gICAgaWYgKGxvY2FsTmFtZSAhPSBhbnlMb2NhbE5h
bWUpIHsKLSAgICAgICAgYWRkVG9SdWxlU2V0KCh2b2lkKikoaW50KWxvY2FsTmFtZSwgbV90YWdS
dWxlcywgcnVsZSwgc2VsKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSA9IHNl
bC0+dGFnLmxvY2FsTmFtZSgpOworICAgIGlmIChsb2NhbE5hbWUgIT0gc3RhckF0b20pIHsKKyAg
ICAgICAgYWRkVG9SdWxlU2V0KGxvY2FsTmFtZS5pbXBsZW1lbnRhdGlvbigpLCBtX3RhZ1J1bGVz
LCBydWxlLCBzZWwpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIApJbmRleDoga2h0bWwv
Y3NzL3BhcnNlci55Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1s
L2Nzcy9wYXJzZXIueSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zOApkaWZmIC11IC1wIC1yMS4z
OCBraHRtbC9jc3MvcGFyc2VyLnkKLS0tIGtodG1sL2Nzcy9wYXJzZXIueQkxMiBKdW4gMjAwNSAw
NDowNzozMCAtMDAwMAkxLjM4CisrKyBraHRtbC9jc3MvcGFyc2VyLnkJMjMgSnVuIDIwMDUgMjE6
NTI6MDcgLTAwMDAKQEAgLTM0LDkgKzM0LDcgQEAKICNpbmNsdWRlIDxjc3MvY3NzX3ZhbHVlaW1w
bC5oPgogI2luY2x1ZGUgPG1pc2MvaHRtbGhhc2hlcy5oPgogI2luY2x1ZGUgImNzc3BhcnNlci5o
IgotCi0jaW5jbHVkZSAieG1sX25hbWVzcGFjZV90YWJsZS5oIgotICAgIAorICAgCiAjaW5jbHVk
ZSA8YXNzZXJ0Lmg+CiAjaW5jbHVkZSA8a2RlYnVnLmg+CiAvLyAjZGVmaW5lIENTU19ERUJVRwpA
QCAtMTM0LDcgKzEzMiw2IEBAIHN0YXRpYyBpbmxpbmUgaW50IGdldFZhbHVlSUQoY29uc3QgY2hh
ciAKICAgICBmbG9hdCB2YWw7CiAgICAgaW50IHByb3BfaWQ7CiAgICAgaW50IGF0dHJpYnV0ZTsK
LSAgICBpbnQgZWxlbWVudDsKICAgICBDU1NTZWxlY3Rvcjo6UmVsYXRpb24gcmVsYXRpb247CiAg
ICAgYm9vbCBiOwogICAgIGludCBpOwpAQCAtMTgwLDYgKzE3Nyw4IEBAIHN0YXRpYyBpbnQgY3Nz
eXlsZXgoIFlZU1RZUEUgKnl5bHZhbCApIHsKICV0b2tlbiAnLicKICV0b2tlbiAnWycKIAorJXRv
a2VuIDxzdHJpbmc+ICcqJworCiAldG9rZW4gSU1QT1JUX1NZTQogJXRva2VuIFBBR0VfU1lNCiAl
dG9rZW4gTUVESUFfU1lNCkBAIC0yNjksNyArMjY4LDcgQEAgc3RhdGljIGludCBjc3N5eWxleCgg
WVlTVFlQRSAqeXlsdmFsICkgewogJXR5cGUgPHZhbHVlPiB1bmFyeV90ZXJtCiAldHlwZSA8dmFs
dWU+IGZ1bmN0aW9uCiAKLSV0eXBlIDxlbGVtZW50PiBlbGVtZW50X25hbWUKKyV0eXBlIDxzdHJp
bmc+IGVsZW1lbnRfbmFtZQogCiAldHlwZSA8YXR0cmlidXRlPiBhdHRyaWJfaWQKIApAQCAtNDA5
LDcgKzQwOCw3IEBAIE5BTUVTUEFDRV9TWU0gbWF5YmVfc3BhY2UgbWF5YmVfbnNfcHJlZmkKICNl
bmRpZgogICAgIENTU1BhcnNlciAqcCA9IHN0YXRpY19jYXN0PENTU1BhcnNlciAqPihwYXJzZXIp
OwogICAgIGlmIChwLT5zdHlsZUVsZW1lbnQgJiYgcC0+c3R5bGVFbGVtZW50LT5pc0NTU1N0eWxl
U2hlZXQoKSkKLSAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldEltcGwqPihwLT5zdHls
ZUVsZW1lbnQpLT5hZGROYW1lc3BhY2UocCwgZG9tU3RyaW5nKCQzKSwgZG9tU3RyaW5nKCQ0KSk7
CisgICAgICAgIHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXRJbXBsKj4ocC0+c3R5bGVFbGVtZW50
KS0+YWRkTmFtZXNwYWNlKHAsIGF0b21pY1N0cmluZygkMyksIGF0b21pY1N0cmluZygkNCkpOwog
fQogfCBOQU1FU1BBQ0VfU1lNIGVycm9yIGludmFsaWRfYmxvY2sKIHwgTkFNRVNQQUNFX1NZTSBl
cnJvciAnOycKQEAgLTYyOCw2NSArNjI3LDcxIEBAIG5hbWVzcGFjZV9zZWxlY3RvcjoKIAogc2lt
cGxlX3NlbGVjdG9yOgogICAgIGVsZW1lbnRfbmFtZSBtYXliZV9zcGFjZSB7Ci0JJCQgPSBuZXcg
Q1NTU2VsZWN0b3IoKTsKLQkkJC0+dGFnID0gJDE7CisgICAgICAgIENTU1BhcnNlciAqcCA9IHN0
YXRpY19jYXN0PENTU1BhcnNlciAqPihwYXJzZXIpOworCSQkID0gbmV3IENTU1NlbGVjdG9yKFF1
YWxpZmllZE5hbWUobnVsbEF0b20sIGF0b21pY1N0cmluZygkMSksIHAtPmRlZmF1bHROYW1lc3Bh
Y2UpKTsKICAgICB9CiAgICAgfCBlbGVtZW50X25hbWUgc3BlY2lmaWVyX2xpc3QgbWF5YmVfc3Bh
Y2UgewotCSQkID0gJDI7Ci0JaWYgKCAkJCApCi0gICAgICAgICAgICAkJC0+dGFnID0gJDE7Cisg
ICAgICAgICQkID0gJDI7CisJaWYgKCQkKSB7CisgICAgICAgICAgICBDU1NQYXJzZXIgKnAgPSBz
dGF0aWNfY2FzdDxDU1NQYXJzZXIgKj4ocGFyc2VyKTsKKyAgICAgICAgICAgICQkLT50YWcgPSBR
dWFsaWZpZWROYW1lKG51bGxBdG9tLCBhdG9taWNTdHJpbmcoJDEpLCBwLT5kZWZhdWx0TmFtZXNw
YWNlKTsKKyAgICAgICAgfQogICAgIH0KICAgICB8IHNwZWNpZmllcl9saXN0IG1heWJlX3NwYWNl
IHsKIAkkJCA9ICQxOwotICAgICAgICBpZiAoJCQpCi0gICAgICAgICAgICAkJC0+dGFnID0gbWFr
ZUlkKHN0YXRpY19jYXN0PENTU1BhcnNlcio+KHBhcnNlciktPmRlZmF1bHROYW1lc3BhY2UsIGFu
eUxvY2FsTmFtZSk7OworICAgICAgICBDU1NQYXJzZXIgKnAgPSBzdGF0aWNfY2FzdDxDU1NQYXJz
ZXIgKj4ocGFyc2VyKTsKKyAgICAgICAgaWYgKCQkICYmIHAtPmRlZmF1bHROYW1lc3BhY2UgIT0g
c3RhckF0b20pCisgICAgICAgICAgICAkJC0+dGFnID0gUXVhbGlmaWVkTmFtZShudWxsQXRvbSwg
c3RhckF0b20sIHAtPmRlZmF1bHROYW1lc3BhY2UpOwogICAgIH0KICAgICB8IG5hbWVzcGFjZV9z
ZWxlY3RvciAnfCcgZWxlbWVudF9uYW1lIG1heWJlX3NwYWNlIHsKLSAgICAgICAgJCQgPSBuZXcg
Q1NTU2VsZWN0b3IoKTsKLSAgICAgICAgJCQtPnRhZyA9ICQzOworICAgICAgICBBdG9taWNTdHJp
bmcgbmFtZXNwYWNlUHJlZml4ID0gYXRvbWljU3RyaW5nKCQxKTsKICAgICAgICAgQ1NTUGFyc2Vy
ICpwID0gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyICo+KHBhcnNlcik7CiAgICAgICAgIGlmIChwLT5z
dHlsZUVsZW1lbnQgJiYgcC0+c3R5bGVFbGVtZW50LT5pc0NTU1N0eWxlU2hlZXQoKSkKLSAgICAg
ICAgICAgIHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXRJbXBsKj4ocC0+c3R5bGVFbGVtZW50KS0+
ZGV0ZXJtaW5lTmFtZXNwYWNlKCQkLT50YWcsIGRvbVN0cmluZygkMSkpOworICAgICAgICAgICAg
JCQgPSBuZXcgQ1NTU2VsZWN0b3IoUXVhbGlmaWVkTmFtZShuYW1lc3BhY2VQcmVmaXgsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0b21pY1N0cmluZygk
MyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRp
Y19jYXN0PENTU1N0eWxlU2hlZXRJbXBsKj4ocC0+c3R5bGVFbGVtZW50KS0+ZGV0ZXJtaW5lTmFt
ZXNwYWNlKG5hbWVzcGFjZVByZWZpeCkpKTsKKyAgICAgICAgZWxzZSAvLyBGSVhNRTogU2hvdWxk
bid0IHRoaXMgY2FzZSBiZSBhbiBlcnJvcj8KKyAgICAgICAgICAgICQkID0gbmV3IENTU1NlbGVj
dG9yKFF1YWxpZmllZE5hbWUobnVsbEF0b20sIGF0b21pY1N0cmluZygkMyksIHAtPmRlZmF1bHRO
YW1lc3BhY2UpKTsKICAgICB9CiAgICAgfCBuYW1lc3BhY2Vfc2VsZWN0b3IgJ3wnIGVsZW1lbnRf
bmFtZSBzcGVjaWZpZXJfbGlzdCBtYXliZV9zcGFjZSB7CiAgICAgICAgICQkID0gJDQ7CiAgICAg
ICAgIGlmICgkJCkgewotICAgICAgICAgICAgJCQtPnRhZyA9ICQzOworICAgICAgICAgICAgQXRv
bWljU3RyaW5nIG5hbWVzcGFjZVByZWZpeCA9IGF0b21pY1N0cmluZygkMSk7CiAgICAgICAgICAg
ICBDU1NQYXJzZXIgKnAgPSBzdGF0aWNfY2FzdDxDU1NQYXJzZXIgKj4ocGFyc2VyKTsKICAgICAg
ICAgICAgIGlmIChwLT5zdHlsZUVsZW1lbnQgJiYgcC0+c3R5bGVFbGVtZW50LT5pc0NTU1N0eWxl
U2hlZXQoKSkKLSAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0SW1wbCo+
KHAtPnN0eWxlRWxlbWVudCktPmRldGVybWluZU5hbWVzcGFjZSgkJC0+dGFnLCBkb21TdHJpbmco
JDEpKTsKKyAgICAgICAgICAgICAgICAkJC0+dGFnID0gUXVhbGlmaWVkTmFtZShuYW1lc3BhY2VQ
cmVmaXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXRvbWljU3Ry
aW5nKCQzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNf
Y2FzdDxDU1NTdHlsZVNoZWV0SW1wbCo+KHAtPnN0eWxlRWxlbWVudCktPmRldGVybWluZU5hbWVz
cGFjZShuYW1lc3BhY2VQcmVmaXgpKTsKKyAgICAgICAgICAgIGVsc2UgLy8gRklYTUU6IFNob3Vs
ZG4ndCB0aGlzIGNhc2UgYmUgYW4gZXJyb3I/CisgICAgICAgICAgICAgICAgJCQtPnRhZyA9IFF1
YWxpZmllZE5hbWUobnVsbEF0b20sIGF0b21pY1N0cmluZygkMyksIHAtPmRlZmF1bHROYW1lc3Bh
Y2UpOwogICAgICAgICB9CiAgICAgfQogICAgIHwgbmFtZXNwYWNlX3NlbGVjdG9yICd8JyBzcGVj
aWZpZXJfbGlzdCBtYXliZV9zcGFjZSB7CiAgICAgICAgICQkID0gJDM7CiAgICAgICAgIGlmICgk
JCkgewotICAgICAgICAgICAgJCQtPnRhZyA9IG1ha2VJZChhbnlOYW1lc3BhY2UsIGFueUxvY2Fs
TmFtZSk7CisgICAgICAgICAgICBBdG9taWNTdHJpbmcgbmFtZXNwYWNlUHJlZml4ID0gYXRvbWlj
U3RyaW5nKCQxKTsKICAgICAgICAgICAgIENTU1BhcnNlciAqcCA9IHN0YXRpY19jYXN0PENTU1Bh
cnNlciAqPihwYXJzZXIpOwogICAgICAgICAgICAgaWYgKHAtPnN0eWxlRWxlbWVudCAmJiBwLT5z
dHlsZUVsZW1lbnQtPmlzQ1NTU3R5bGVTaGVldCgpKQotICAgICAgICAgICAgICAgIHN0YXRpY19j
YXN0PENTU1N0eWxlU2hlZXRJbXBsKj4ocC0+c3R5bGVFbGVtZW50KS0+ZGV0ZXJtaW5lTmFtZXNw
YWNlKCQkLT50YWcsIGRvbVN0cmluZygkMSkpOworICAgICAgICAgICAgICAgICQkLT50YWcgPSBR
dWFsaWZpZWROYW1lKG5hbWVzcGFjZVByZWZpeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGFyQXRvbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0SW1wbCo+KHAtPnN0eWxlRWxlbWVudCkt
PmRldGVybWluZU5hbWVzcGFjZShuYW1lc3BhY2VQcmVmaXgpKTsKICAgICAgICAgfQogICAgIH0K
ICAgOwogCiBlbGVtZW50X25hbWU6CiAgICAgSURFTlQgewotCUNTU1BhcnNlciAqcCA9IHN0YXRp
Y19jYXN0PENTU1BhcnNlciAqPihwYXJzZXIpOworICAgICAgICBQYXJzZVN0cmluZyYgc3RyID0g
JDE7CisgICAgICAgIENTU1BhcnNlciAqcCA9IHN0YXRpY19jYXN0PENTU1BhcnNlciAqPihwYXJz
ZXIpOwogCURPTTo6RG9jdW1lbnRJbXBsICpkb2MgPSBwLT5kb2N1bWVudCgpOwotCVFTdHJpbmcg
dGFnID0gcVN0cmluZygkMSk7Ci0JaWYgKCBkb2MgKSB7Ci0JICAgIGlmIChkb2MtPmlzSFRNTERv
Y3VtZW50KCkpCi0JCXRhZyA9IHRhZy5sb3dlcigpOwotCSAgICBjb25zdCBET01TdHJpbmcgZHRh
Zyh0YWcpOwotICAgICAgICAgICAgJCQgPSBtYWtlSWQocC0+ZGVmYXVsdE5hbWVzcGFjZSwgZG9j
LT50YWdJZCgwLCBkdGFnLmltcGxlbWVudGF0aW9uKCksIGZhbHNlKSk7Ci0JfSBlbHNlIHsKLQkg
ICAgJCQgPSBtYWtlSWQocC0+ZGVmYXVsdE5hbWVzcGFjZSwga2h0bWw6OmdldFRhZ0lEKHRhZy5s
b3dlcigpLmFzY2lpKCksIHRhZy5sZW5ndGgoKSkpOwotCSAgICAvLyB0aGlzIGNhc2Ugc2hvdWxk
IG5ldmVyIGhhcHBlbiAtIG9ubHkgd2hlbiBsb2FkaW5nCi0JICAgIC8vIHRoZSBkZWZhdWx0IHN0
eWxlc2hlZXQgLSB3aGljaCBtdXN0IG5vdCBjb250YWluIHVua25vd24gdGFncwotLy8gCSAgICBh
c3NlcnQoJCQgIT0gMCk7Ci0JfQorCWlmIChkb2MgJiYgZG9jLT5pc0hUTUxEb2N1bWVudCgpKQor
ICAgICAgICAgICAgc3RyLmxvd2VyKCk7CisgICAgICAgICQkID0gc3RyOwogICAgIH0KICAgICB8
ICcqJyB7Ci0JJCQgPSBtYWtlSWQoc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyKj4ocGFyc2VyKS0+ZGVm
YXVsdE5hbWVzcGFjZSwgYW55TG9jYWxOYW1lKTsKKwlzdGF0aWMgdW5zaWduZWQgc2hvcnQgc3Rh
ciA9ICcqJzsKKyAgICAgICAgJCQuc3RyaW5nID0gJnN0YXI7CisgICAgICAgICQkLmxlbmd0aCA9
IDE7CiAgICAgfQogICA7CiAKQEAgLTc3MywxOCArNzc4LDIyIEBAIGF0dHJpYjoKICAgICAgICAg
JCQgPSBuZXcgQ1NTU2VsZWN0b3IoKTsKICAgICAgICAgJCQtPmF0dHIgPSAkNTsKICAgICAgICAg
JCQtPm1hdGNoID0gQ1NTU2VsZWN0b3I6OlNldDsKLSAgICAgICAgQ1NTUGFyc2VyICpwID0gc3Rh
dGljX2Nhc3Q8Q1NTUGFyc2VyICo+KHBhcnNlcik7Ci0gICAgICAgIGlmIChwLT5zdHlsZUVsZW1l
bnQgJiYgcC0+c3R5bGVFbGVtZW50LT5pc0NTU1N0eWxlU2hlZXQoKSkKLSAgICAgICAgICAgIHN0
YXRpY19jYXN0PENTU1N0eWxlU2hlZXRJbXBsKj4ocC0+c3R5bGVFbGVtZW50KS0+ZGV0ZXJtaW5l
TmFtZXNwYWNlKCQkLT5hdHRyLCBkb21TdHJpbmcoJDMpKTsKKyAgICAgICAgLy8gRklYTUU6IEZv
ciBub3cgd2UncmUgYnJlYWtpbmcgbmFtZXNwYWNlIHN1cHBvcnQgb24gYXR0cmlidXRlcy4gIFdo
ZW4gd2Ugc3dpdGNoIHRvIGF0b21pY3N0cmluZywgdGhlbiB3ZSBjYW4gbWFrZQorICAgICAgICAv
LyBpdCB3b3JrIGFnYWluLgorICAgICAgICAvL0NTU1BhcnNlciAqcCA9IHN0YXRpY19jYXN0PENT
U1BhcnNlciAqPihwYXJzZXIpOworICAgICAgICAvL2lmIChwLT5zdHlsZUVsZW1lbnQgJiYgcC0+
c3R5bGVFbGVtZW50LT5pc0NTU1N0eWxlU2hlZXQoKSkKKyAgICAgICAgLy8gICAgc3RhdGljX2Nh
c3Q8Q1NTU3R5bGVTaGVldEltcGwqPihwLT5zdHlsZUVsZW1lbnQpLT5kZXRlcm1pbmVOYW1lc3Bh
Y2UoJCQtPmF0dHIsIGRvbVN0cmluZygkMykpOwogICAgIH0KICAgICB8ICdbJyBtYXliZV9zcGFj
ZSBuYW1lc3BhY2Vfc2VsZWN0b3IgJ3wnIGF0dHJpYl9pZCBtYXRjaCBtYXliZV9zcGFjZSBpZGVu
dF9vcl9zdHJpbmcgbWF5YmVfc3BhY2UgJ10nIHsKICAgICAgICAgJCQgPSBuZXcgQ1NTU2VsZWN0
b3IoKTsKICAgICAgICAgJCQtPmF0dHIgPSAkNTsKICAgICAgICAgJCQtPm1hdGNoID0gKENTU1Nl
bGVjdG9yOjpNYXRjaCkkNjsKICAgICAgICAgJCQtPnZhbHVlID0gYXRvbWljU3RyaW5nKCQ4KTsK
LSAgICAgICAgQ1NTUGFyc2VyICpwID0gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyICo+KHBhcnNlcik7
Ci0gICAgICAgIGlmIChwLT5zdHlsZUVsZW1lbnQgJiYgcC0+c3R5bGVFbGVtZW50LT5pc0NTU1N0
eWxlU2hlZXQoKSkKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXRJbXBsKj4o
cC0+c3R5bGVFbGVtZW50KS0+ZGV0ZXJtaW5lTmFtZXNwYWNlKCQkLT5hdHRyLCBkb21TdHJpbmco
JDMpKTsKKyAgICAgICAgLy8gRklYTUU6IEZvciBub3cgd2UncmUgYnJlYWtpbmcgbmFtZXNwYWNl
IHN1cHBvcnQgb24gYXR0cmlidXRlcy4gIFdoZW4gd2Ugc3dpdGNoIHRvIGF0b21pY3N0cmluZywg
dGhlbiB3ZSBjYW4gbWFrZQorICAgICAgICAvLyBpdCB3b3JrIGFnYWluLgorICAgICAgICAvL0NT
U1BhcnNlciAqcCA9IHN0YXRpY19jYXN0PENTU1BhcnNlciAqPihwYXJzZXIpOworICAgICAgICAv
L2lmIChwLT5zdHlsZUVsZW1lbnQgJiYgcC0+c3R5bGVFbGVtZW50LT5pc0NTU1N0eWxlU2hlZXQo
KSkKKyAgICAgICAgLy8gICAgc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldEltcGwqPihwLT5zdHls
ZUVsZW1lbnQpLT5kZXRlcm1pbmVOYW1lc3BhY2UoJCQtPmF0dHIsIGRvbVN0cmluZygkMykpOwog
ICAgIH0KICAgOwogCkluZGV4OiBraHRtbC9kb20vY3NzX3N0eWxlc2hlZXQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2RvbS9jc3Nfc3R5bGVzaGVldC5j
cHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuOApkaWZmIC11IC1wIC1yMS44IGtodG1sL2RvbS9j
c3Nfc3R5bGVzaGVldC5jcHAKLS0tIGtodG1sL2RvbS9jc3Nfc3R5bGVzaGVldC5jcHAJMjAgTWF5
IDIwMDQgMTU6MDk6MzIgLTAwMDAJMS44CisrKyBraHRtbC9kb20vY3NzX3N0eWxlc2hlZXQuY3Bw
CTIzIEp1biAyMDA1IDIxOjUyOjA3IC0wMDAwCkBAIC0zODUsNyArMzg1LDcgQEAgTGlua1N0eWxl
ICYgTGlua1N0eWxlOjpvcGVyYXRvciA9IChjb25zdAogCiAgICAgLy8gIyMjIGNoZWNrIGxpbmsg
aXMgcmVhbGx5IGxpbmtpbmcgYSBzdHlsZSBzaGVldAogICAgIGlmKCBuICYmIG4tPmlzRWxlbWVu
dE5vZGUoKSAmJgotCShuLT5pZCgpID09IElEX1NUWUxFIHx8IG4tPmlkKCkgPT0gSURfTElOSykg
KSB7CisJKG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzdHlsZSgpKSB8fCBuLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6bGluaygpKSkpIHsKICAgICBub2RlID0gbjsKICAgICBpZihub2RlKSBub2Rl
LT5yZWYoKTsKICAgICB9CkBAIC0zOTksMTIgKzM5OSwxNCBAQCBMaW5rU3R5bGU6On5MaW5rU3R5
bGUoKQogCiBTdHlsZVNoZWV0IExpbmtTdHlsZTo6c2hlZXQoKQogewotICAgIGludCBpZCA9IG5v
ZGUgPyBub2RlLT5pZCgpIDogMDsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBTdHls
ZVNoZWV0KCk7CisKICAgICAvLyAjIyMgYWRkIFBJCiAgICAgcmV0dXJuIAotCSggaWQgPT0gSURf
U1RZTEUpID8KKwkobm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnN0eWxlKCkpKSA/CiAJc3Rh
dGljX2Nhc3Q8SFRNTFN0eWxlRWxlbWVudEltcGwgKj4obm9kZSktPnNoZWV0KCkKLQk6ICggKGlk
ID09IElEX0xJTkspID8KKwk6ICggbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmxpbmsoKSkg
PwogCSAgICBzdGF0aWNfY2FzdDxIVE1MTGlua0VsZW1lbnRJbXBsICo+KG5vZGUpLT5zaGVldCgp
CiAJICAgIDogU3R5bGVTaGVldCgpICk7CiB9CkluZGV4OiBraHRtbC9kb20vZG9tX2VsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2RvbS9kb21f
ZWxlbWVudC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTIKZGlmZiAtdSAtcCAtcjEuMTIg
a2h0bWwvZG9tL2RvbV9lbGVtZW50LmNwcAotLS0ga2h0bWwvZG9tL2RvbV9lbGVtZW50LmNwcAkx
MiBNYXkgMjAwNSAxNzoxMToyMSAtMDAwMAkxLjEyCisrKyBraHRtbC9kb20vZG9tX2VsZW1lbnQu
Y3BwCTIzIEp1biAyMDA1IDIxOjUyOjA3IC0wMDAwCkBAIC0xNDEsNyArMTQxLDcgQEAgRWxlbWVu
dDo6fkVsZW1lbnQoKQogRE9NU3RyaW5nIEVsZW1lbnQ6OnRhZ05hbWUoKSBjb25zdAogewogICAg
IGlmICghaW1wbCkgdGhyb3cgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbjo6Tk9UX0ZPVU5EX0VS
Uik7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsKj4oaW1wbCktPnRhZ05hbWUo
KTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RWxlbWVudEltcGwqPihpbXBsKS0+bm9kZU5hbWUo
KTsKIH0KIAogRE9NU3RyaW5nIEVsZW1lbnQ6OmdldEF0dHJpYnV0ZSggY29uc3QgRE9NU3RyaW5n
ICZuYW1lICkKSW5kZXg6IGtodG1sL2RvbS9kb21fbm9kZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZG9tL2RvbV9ub2RlLmNwcCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS4xMgpkaWZmIC11IC1wIC1yMS4xMiBraHRtbC9kb20vZG9tX25vZGUuY3BwCi0t
LSBraHRtbC9kb20vZG9tX25vZGUuY3BwCTExIE1heSAyMDA1IDAwOjU4OjI4IC0wMDAwCTEuMTIK
KysrIGtodG1sL2RvbS9kb21fbm9kZS5jcHAJMjMgSnVuIDIwMDUgMjE6NTI6MDcgLTAwMDAKQEAg
LTMyNCw3ICszMjQsNyBAQCBib29sIE5vZGU6OmlzU3VwcG9ydGVkKCBjb25zdCBET01TdHJpbmcg
CiBET01TdHJpbmcgTm9kZTo6bmFtZXNwYWNlVVJJKCAgKSBjb25zdAogewogICAgIGlmICghaW1w
bCkgcmV0dXJuIERPTVN0cmluZygpOwotICAgIHJldHVybiBpbXBsLT5nZXREb2N1bWVudCgpLT5u
YW1lc3BhY2VVUkkoaW1wbC0+aWQoKSk7CisgICAgcmV0dXJuIGltcGwtPm5hbWVzcGFjZVVSSSgp
OwogfQogCiBET01TdHJpbmcgTm9kZTo6cHJlZml4KCAgKSBjb25zdApAQCAtMzM3LDcgKzMzNyw3
IEBAIHZvaWQgTm9kZTo6c2V0UHJlZml4KGNvbnN0IERPTVN0cmluZyAmcHIKIHsKICAgICBpZiAo
IWltcGwpIHRocm93IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb246Ok5PVF9GT1VORF9FUlIpOwog
ICAgIGludCBleGNlcHRpb25jb2RlID0gMDsKLSAgICBpbXBsLT5zZXRQcmVmaXgocHJlZml4LGV4
Y2VwdGlvbmNvZGUpOworICAgIGltcGwtPnNldFByZWZpeChwcmVmaXguaW1wbGVtZW50YXRpb24o
KSxleGNlcHRpb25jb2RlKTsKICAgICBpZiAoZXhjZXB0aW9uY29kZSkKICAgICAgICAgdGhyb3cg
RE9NRXhjZXB0aW9uKGV4Y2VwdGlvbmNvZGUpOwogfQpAQCAtMzc2LDEzICszNzYsNiBAQCBib29s
IE5vZGU6OmRpc3BhdGNoRXZlbnQoY29uc3QgRXZlbnQgJmV2CiAgICAgcmV0dXJuIHI7CiB9CiAK
LQotdW5zaWduZWQgaW50IE5vZGU6OmVsZW1lbnRJZCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFpbXBs
KSByZXR1cm4gMDsKLSAgICByZXR1cm4gaW1wbC0+aWQoKTsKLX0KLQogdW5zaWduZWQgbG9uZyBO
b2RlOjppbmRleCgpIGNvbnN0CiB7CiAgICAgaWYgKCFpbXBsKSByZXR1cm4gMDsKSW5kZXg6IGto
dG1sL2RvbS9kb21fbm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3Jl
L2todG1sL2RvbS9kb21fbm9kZS5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEyCmRpZmYgLXUg
LXAgLXIxLjEyIGtodG1sL2RvbS9kb21fbm9kZS5oCi0tLSBraHRtbC9kb20vZG9tX25vZGUuaAkx
OCBNYXkgMjAwNSAyMToxMDoyNCAtMDAwMAkxLjEyCisrKyBraHRtbC9kb20vZG9tX25vZGUuaAky
MyBKdW4gMjAwNSAyMTo1MjowOCAtMDAwMApAQCAtODU1LDEzICs4NTUsNiBAQCBwdWJsaWM6CiAg
ICAgYm9vbCBkaXNwYXRjaEV2ZW50KGNvbnN0IEV2ZW50ICZldnQpOwogCiAgICAgLyoqCi0gICAg
ICogQGludGVybmFsCi0gICAgICogbm90IHBhcnQgb2YgdGhlIERPTS4KLSAgICAgKiBAcmV0dXJu
cyB0aGUgZWxlbWVudCBpZCwgaW4gY2FzZSB0aGlzIGlzIGFuIGVsZW1lbnQsIDAgb3RoZXJ3aXNl
Ci0gICAgICovCi0gICAgUV9VSU5UMzIgZWxlbWVudElkKCkgY29uc3Q7Ci0KLSAgICAvKioKICAg
ICAgKiB0ZXN0cyBpZiB0aGlzIE5vZGUgaXMgMC4gVXNlZnVsIGVzcGVjaWFsbHksIGlmIGNhc3Rp
bmcgdG8gYSBkZXJpdmVkCiAgICAgICogY2xhc3M6CiAgICAgICoKSW5kZXg6IGtodG1sL2RvbS9o
dG1sX2Jhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1s
L2RvbS9odG1sX2Jhc2UuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjYKZGlmZiAtdSAtcCAt
cjEuNiBraHRtbC9kb20vaHRtbF9iYXNlLmNwcAotLS0ga2h0bWwvZG9tL2h0bWxfYmFzZS5jcHAJ
MyBOb3YgMjAwMyAwNjozMjowNCAtMDAwMAkxLjYKKysrIGtodG1sL2RvbS9odG1sX2Jhc2UuY3Bw
CTIzIEp1biAyMDA1IDIxOjUyOjA5IC0wMDAwCkBAIC00MSw3ICs0MSw3IEBAIEhUTUxCb2R5RWxl
bWVudDo6SFRNTEJvZHlFbGVtZW50KEhUTUxCb2QKIAogSFRNTEJvZHlFbGVtZW50ICZIVE1MQm9k
eUVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90
aGVyKCBvdGhlciwgSURfQk9EWSApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVz
Ojpib2R5KCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTEzNSw3ICsxMzUsNyBAQCBI
VE1MRnJhbWVFbGVtZW50OjpIVE1MRnJhbWVFbGVtZW50KEhUTUxGCiAKIEhUTUxGcmFtZUVsZW1l
bnQgJkhUTUxGcmFtZUVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewot
ICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfRlJBTUUgKTsKKyAgICBhc3NpZ25PdGhlciggb3Ro
ZXIsIEhUTUxOYW1lczo6ZnJhbWUoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtMjY1
LDcgKzI2NSw3IEBAIEhUTUxJRnJhbWVFbGVtZW50OjpIVE1MSUZyYW1lRWxlbWVudChIVE0KIAog
SFRNTElGcmFtZUVsZW1lbnQgJkhUTUxJRnJhbWVFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBO
b2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0lGUkFNRSApOworICAg
IGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjppZnJhbWUoKSApOwogICAgIHJldHVybiAq
dGhpczsKIH0KIApAQCAtNDE0LDcgKzQxNCw3IEBAIEhUTUxGcmFtZVNldEVsZW1lbnQ6OkhUTUxG
cmFtZVNldEVsZW1lbnQKIAogSFRNTEZyYW1lU2V0RWxlbWVudCAmSFRNTEZyYW1lU2V0RWxlbWVu
dDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90
aGVyLCBJRF9GUkFNRVNFVCApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpm
cmFtZXNldCgpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC00NjYsNyArNDY2LDcgQEAg
SFRNTEhlYWRFbGVtZW50OjpIVE1MSGVhZEVsZW1lbnQoSFRNTEhlYQogCiBIVE1MSGVhZEVsZW1l
bnQgJkhUTUxIZWFkRWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0g
ICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9IRUFEICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVy
LCBIVE1MTmFtZXM6OmhlYWQoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtNTA3LDcg
KzUwNyw3IEBAIEhUTUxIdG1sRWxlbWVudDo6SFRNTEh0bWxFbGVtZW50KEhUTUxIdG0KIAogSFRN
TEh0bWxFbGVtZW50ICZIVE1MSHRtbEVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90
aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfSFRNTCApOworICAgIGFzc2lnbk90
aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpodG1sKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAK
SW5kZXg6IGtodG1sL2RvbS9odG1sX2Jsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvV2ViQ29yZS9raHRtbC9kb20vaHRtbF9ibG9jay5jcHAsdgpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuNApkaWZmIC11IC1wIC1yMS40IGtodG1sL2RvbS9odG1sX2Jsb2NrLmNwcAotLS0ga2h0
bWwvZG9tL2h0bWxfYmxvY2suY3BwCTEwIEp1biAyMDAyIDIwOjA3OjM0IC0wMDAwCTEuNAorKysg
a2h0bWwvZG9tL2h0bWxfYmxvY2suY3BwCTIzIEp1biAyMDA1IDIxOjUyOjA5IC0wMDAwCkBAIC00
Myw3ICs0Myw3IEBAIEhUTUxCbG9ja3F1b3RlRWxlbWVudDo6SFRNTEJsb2NrcXVvdGVFbGUKIAog
SFRNTEJsb2NrcXVvdGVFbGVtZW50ICZIVE1MQmxvY2txdW90ZUVsZW1lbnQ6Om9wZXJhdG9yID0g
KGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfQkxPQ0tR
VU9URSApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpibG9ja3F1b3RlKCkg
KTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTg0LDcgKzg0LDcgQEAgSFRNTERpdkVsZW1l
bnQ6OkhUTUxEaXZFbGVtZW50KEhUTUxEaXZFbAogCiBIVE1MRGl2RWxlbWVudCAmSFRNTERpdkVs
ZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVy
KCBvdGhlciwgSURfRElWICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OmRp
digpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC0xMjUsNyArMTI1LDcgQEAgSFRNTEhS
RWxlbWVudDo6SFRNTEhSRWxlbWVudChIVE1MSFJFbGVtZQogCiBIVE1MSFJFbGVtZW50ICZIVE1M
SFJFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25P
dGhlciggb3RoZXIsIElEX0hSICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6
OmhyKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTIwNSwxNiArMjA1LDE3IEBAIEhU
TUxIZWFkaW5nRWxlbWVudDo6SFRNTEhlYWRpbmdFbGVtZW50KEgKIAogSFRNTEhlYWRpbmdFbGVt
ZW50ICZIVE1MSGVhZGluZ0VsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQog
ewotICAgIGlmKG90aGVyLmVsZW1lbnRJZCgpICE9IElEX0gxIHx8Ci0gICAgICAgb3RoZXIuZWxl
bWVudElkKCkgIT0gSURfSDIgfHwKLSAgICAgICBvdGhlci5lbGVtZW50SWQoKSAhPSBJRF9IMyB8
fAotICAgICAgIG90aGVyLmVsZW1lbnRJZCgpICE9IElEX0g0IHx8Ci0gICAgICAgb3RoZXIuZWxl
bWVudElkKCkgIT0gSURfSDUgfHwKLSAgICAgICBvdGhlci5lbGVtZW50SWQoKSAhPSBJRF9INiAp
CisgICAgaWYgKCFvdGhlci5oYW5kbGUoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmgxKCkpICYm
CisgICAgICAgICFvdGhlci5oYW5kbGUoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmgyKCkpICYm
CisgICAgICAgICFvdGhlci5oYW5kbGUoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmgzKCkpICYm
CisgICAgICAgICFvdGhlci5oYW5kbGUoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omg0KCkpICYm
CisgICAgICAgICFvdGhlci5oYW5kbGUoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omg1KCkpICYm
CisgICAgICAgICFvdGhlci5oYW5kbGUoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omg2KCkpKQog
ICAgIHsKIAlpZiAoIGltcGwgKSBpbXBsLT5kZXJlZigpOwogCWltcGwgPSAwOwogICAgIH0gZWxz
ZSB7CisKICAgICBOb2RlOjpvcGVyYXRvciA9IChvdGhlcik7CiAgICAgfQogICAgIHJldHVybiAq
dGhpczsKQEAgLTI1Nyw3ICsyNTgsNyBAQCBIVE1MUGFyYWdyYXBoRWxlbWVudDo6SFRNTFBhcmFn
cmFwaEVsZW1lCiAKIEhUTUxQYXJhZ3JhcGhFbGVtZW50ICZIVE1MUGFyYWdyYXBoRWxlbWVudDo6
b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVy
LCBJRF9QICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OnAoKSApOwogICAg
IHJldHVybiAqdGhpczsKIH0KIApAQCAtMjk4LDcgKzI5OSw3IEBAIEhUTUxQcmVFbGVtZW50OjpI
VE1MUHJlRWxlbWVudChIVE1MUHJlRWwKIAogSFRNTFByZUVsZW1lbnQgJkhUTUxQcmVFbGVtZW50
OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3Ro
ZXIsIElEX1BSRSApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpwcmUoKSAp
OwogICAgIHJldHVybiAqdGhpczsKIH0KIApJbmRleDoga2h0bWwvZG9tL2h0bWxfZWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZG9tL2h0bWxf
ZWxlbWVudC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTQKZGlmZiAtdSAtcCAtcjEuMTQg
a2h0bWwvZG9tL2h0bWxfZWxlbWVudC5jcHAKLS0tIGtodG1sL2RvbS9odG1sX2VsZW1lbnQuY3Bw
CTExIE1heSAyMDA1IDAwOjU4OjI4IC0wMDAwCTEuMTQKKysrIGtodG1sL2RvbS9odG1sX2VsZW1l
bnQuY3BwCTIzIEp1biAyMDA1IDIxOjUyOjA5IC0wMDAwCkBAIC0xODIsOSArMTgyLDkgQEAgSFRN
TENvbGxlY3Rpb24gSFRNTEVsZW1lbnQ6OmNoaWxkcmVuKCkgYwogICAgIHJldHVybiBIVE1MQ29s
bGVjdGlvbihpbXBsLCBIVE1MQ29sbGVjdGlvbkltcGw6Ok5PREVfQ0hJTERSRU4pOwogfQogCi12
b2lkIEhUTUxFbGVtZW50Ojphc3NpZ25PdGhlciggY29uc3QgTm9kZSAmb3RoZXIsIGludCBlbGVt
ZW50SWQgKQordm9pZCBIVE1MRWxlbWVudDo6YXNzaWduT3RoZXIoIGNvbnN0IE5vZGUgJm90aGVy
LCBjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lICkKIHsKLSAgICBpZigoaW50KW90aGVyLmVs
ZW1lbnRJZCgpICE9IGVsZW1lbnRJZCkgeworICAgIGlmICghb3RoZXIuaGFuZGxlKCktPmhhc1Rh
Z05hbWUodGFnTmFtZSkpIHsKIAlpZiAoIGltcGwgKSBpbXBsLT5kZXJlZigpOwogCWltcGwgPSAw
OwogICAgIH0gZWxzZSB7CkluZGV4OiBraHRtbC9kb20vaHRtbF9lbGVtZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZG9tL2h0bWxfZWxlbWVudC5oLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjgKZGlmZiAtdSAtcCAtcjEuOCBraHRtbC9kb20vaHRtbF9l
bGVtZW50LmgKLS0tIGtodG1sL2RvbS9odG1sX2VsZW1lbnQuaAkyMiBNYXkgMjAwNCAwMTo1MDo0
OCAtMDAwMAkxLjgKKysrIGtodG1sL2RvbS9odG1sX2VsZW1lbnQuaAkyMyBKdW4gMjAwNSAyMTo1
MjowOSAtMDAwMApAQCAtMzAsNiArMzAsOCBAQAogI2RlZmluZSBIVE1MX0VMRU1FTlRfSAogCiAj
aW5jbHVkZSA8ZG9tL2RvbV9lbGVtZW50Lmg+CisjaW5jbHVkZSAiZG9tX3FuYW1lLmgiCisKIGNs
YXNzIEtIVE1MVmlldzsKIAogbmFtZXNwYWNlIERPTSB7CkBAIC0yMjUsNyArMjI3LDcgQEAgcHJv
dGVjdGVkOgogICAgIC8qCiAgICAgICogQGludGVybmFsCiAgICAgICovCi0gICAgdm9pZCBhc3Np
Z25PdGhlciggY29uc3QgTm9kZSAmb3RoZXIsIGludCBlbGVtZW50SWQgKTsKKyAgICB2b2lkIGFz
c2lnbk90aGVyKCBjb25zdCBOb2RlICZvdGhlciwgY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFt
ZSApOwogfTsKIAogfTsgLy9uYW1lc3BhY2UKSW5kZXg6IGtodG1sL2RvbS9odG1sX2Zvcm0uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2RvbS9odG1sX2Zv
cm0uY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjExCmRpZmYgLXUgLXAgLXIxLjExIGtodG1s
L2RvbS9odG1sX2Zvcm0uY3BwCi0tLSBraHRtbC9kb20vaHRtbF9mb3JtLmNwcAkxMSBNYXkgMjAw
NSAwMDo1ODoyOCAtMDAwMAkxLjExCisrKyBraHRtbC9kb20vaHRtbF9mb3JtLmNwcAkyMyBKdW4g
MjAwNSAyMTo1MjoxMCAtMDAwMApAQCAtNDcsNyArNDcsNyBAQCBIVE1MQnV0dG9uRWxlbWVudDo6
SFRNTEJ1dHRvbkVsZW1lbnQoSFRNCiAKIEhUTUxCdXR0b25FbGVtZW50ICZIVE1MQnV0dG9uRWxl
bWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIo
IG90aGVyLCBJRF9CVVRUT04gKTsJCisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6
OmJ1dHRvbigpICk7CQogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtMTU3LDcgKzE1Nyw3IEBA
IEhUTUxGaWVsZFNldEVsZW1lbnQ6OkhUTUxGaWVsZFNldEVsZW1lbnQKIAogSFRNTEZpZWxkU2V0
RWxlbWVudCAmSFRNTEZpZWxkU2V0RWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3Ro
ZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9GSUVMRFNFVCApOworICAgIGFzc2ln
bk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpmaWVsZHNldCgpICk7CiAgICAgcmV0dXJuICp0aGlz
OwogfQogCkBAIC0xOTMsNyArMTkzLDcgQEAgSFRNTEZvcm1FbGVtZW50OjpIVE1MRm9ybUVsZW1l
bnQoSFRNTEZvcgogCiBIVE1MRm9ybUVsZW1lbnQgJkhUTUxGb3JtRWxlbWVudDo6b3BlcmF0b3Ig
PSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9GT1JN
ICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OmZvcm0oKSApOwogICAgIHJl
dHVybiAqdGhpczsKIH0KIApAQCAtMzExLDcgKzMxMSw3IEBAIEhUTUxJbnB1dEVsZW1lbnQ6OkhU
TUxJbnB1dEVsZW1lbnQoSFRNTEkKIAogSFRNTElucHV0RWxlbWVudCAmSFRNTElucHV0RWxlbWVu
dDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90
aGVyLCBJRF9JTlBVVCApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjppbnB1
dCgpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC01NzQsNyArNTc0LDcgQEAgSFRNTExh
YmVsRWxlbWVudDo6SFRNTExhYmVsRWxlbWVudChIVE1MTAogCiBIVE1MTGFiZWxFbGVtZW50ICZI
VE1MTGFiZWxFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBh
c3NpZ25PdGhlciggb3RoZXIsIElEX0xBQkVMICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBI
VE1MTmFtZXM6OmxhYmVsKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTYzMyw3ICs2
MzMsNyBAQCBIVE1MTGVnZW5kRWxlbWVudDo6SFRNTExlZ2VuZEVsZW1lbnQoSFRNCiAKIEhUTUxM
ZWdlbmRFbGVtZW50ICZIVE1MTGVnZW5kRWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAm
b3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9MRUdFTkQgKTsKKyAgICBhc3Np
Z25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6bGVnZW5kKCkgKTsKICAgICByZXR1cm4gKnRoaXM7
CiB9CiAKQEAgLTY5MSw3ICs2OTEsNyBAQCBIVE1MT3B0R3JvdXBFbGVtZW50OjpIVE1MT3B0R3Jv
dXBFbGVtZW50CiAKIEhUTUxPcHRHcm91cEVsZW1lbnQgJkhUTUxPcHRHcm91cEVsZW1lbnQ6Om9w
ZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwg
SURfT1BUR1JPVVAgKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6b3B0Z3Jv
dXAoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtNzQ0LDcgKzc0NCw3IEBAIEhUTUxT
ZWxlY3RFbGVtZW50OjpIVE1MU2VsZWN0RWxlbWVudChIVE0KIAogSFRNTFNlbGVjdEVsZW1lbnQg
JkhUTUxTZWxlY3RFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAg
ICBhc3NpZ25PdGhlciggb3RoZXIsIElEX1NFTEVDVCApOworICAgIGFzc2lnbk90aGVyKCBvdGhl
ciwgSFRNTE5hbWVzOjpzZWxlY3QoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtOTA2
LDcgKzkwNiw3IEBAIEhUTUxUZXh0QXJlYUVsZW1lbnQ6OkhUTUxUZXh0QXJlYUVsZW1lbnQKIAog
SFRNTFRleHRBcmVhRWxlbWVudCAmSFRNTFRleHRBcmVhRWxlbWVudDo6b3BlcmF0b3IgPSAoY29u
c3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9URVhUQVJFQSAp
OworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjp0ZXh0YXJlYSgpICk7CiAgICAg
cmV0dXJuICp0aGlzOwogfQogCkBAIC0xMDc0LDcgKzEwNzQsNyBAQCBIVE1MT3B0aW9uRWxlbWVu
dDo6SFRNTE9wdGlvbkVsZW1lbnQoSFRNCiAKIEhUTUxPcHRpb25FbGVtZW50ICZIVE1MT3B0aW9u
RWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3Ro
ZXIoIG90aGVyLCBJRF9PUFRJT04gKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1l
czo6b3B0aW9uKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTExODIsNyArMTE4Miw3
IEBAIEhUTUxJc0luZGV4RWxlbWVudDo6SFRNTElzSW5kZXhFbGVtZW50KEgKIAogSFRNTElzSW5k
ZXhFbGVtZW50ICZIVE1MSXNJbmRleEVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90
aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfSVNJTkRFWCApOworICAgIGFzc2ln
bk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjppc2luZGV4KCkgKTsKICAgICByZXR1cm4gKnRoaXM7
CiB9CiAKSW5kZXg6IGtodG1sL2RvbS9odG1sX2hlYWQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2RvbS9odG1sX2hlYWQuY3BwLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjEwCmRpZmYgLXUgLXAgLXIxLjEwIGtodG1sL2RvbS9odG1sX2hlYWQuY3BwCi0t
LSBraHRtbC9kb20vaHRtbF9oZWFkLmNwcAkyMiBKdW4gMjAwNSAxODoyMjowMSAtMDAwMAkxLjEw
CisrKyBraHRtbC9kb20vaHRtbF9oZWFkLmNwcAkyMyBKdW4gMjAwNSAyMTo1MjoxMCAtMDAwMApA
QCAtNDIsNyArNDIsNyBAQCBIVE1MQmFzZUVsZW1lbnQ6OkhUTUxCYXNlRWxlbWVudChIVE1MQmFz
CiAKIEhUTUxCYXNlRWxlbWVudCAmSFRNTEJhc2VFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBO
b2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0JBU0UgKTsKKyAgICBh
c3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6YmFzZSgpICk7CiAgICAgcmV0dXJuICp0aGlz
OwogfQogCkBAIC05Nyw3ICs5Nyw3IEBAIEhUTUxMaW5rRWxlbWVudDo6SFRNTExpbmtFbGVtZW50
KEhUTUxMaW4KIAogSFRNTExpbmtFbGVtZW50ICZIVE1MTGlua0VsZW1lbnQ6Om9wZXJhdG9yID0g
KGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfTElOSyAp
OworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpsaW5rKCkgKTsKICAgICByZXR1
cm4gKnRoaXM7CiB9CiAKQEAgLTIzOCw3ICsyMzgsNyBAQCBIVE1MTWV0YUVsZW1lbnQ6OkhUTUxN
ZXRhRWxlbWVudChIVE1MTWV0CiAKIEhUTUxNZXRhRWxlbWVudCAmSFRNTE1ldGFFbGVtZW50Ojpv
cGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIs
IElEX01FVEEgKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6bWV0YSgpICk7
CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC0zMTIsNyArMzEyLDcgQEAgSFRNTFNjcmlwdEVs
ZW1lbnQ6OkhUTUxTY3JpcHRFbGVtZW50KEhUTQogCiBIVE1MU2NyaXB0RWxlbWVudCAmSFRNTFNj
cmlwdEVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2ln
bk90aGVyKCBvdGhlciwgSURfU0NSSVBUICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1M
TmFtZXM6OnNjcmlwdCgpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC00MjQsNyArNDI0
LDcgQEAgSFRNTFN0eWxlRWxlbWVudDo6SFRNTFN0eWxlRWxlbWVudChIVE1MUwogCiBIVE1MU3R5
bGVFbGVtZW50ICZIVE1MU3R5bGVFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhl
cikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX1NUWUxFICk7CisgICAgYXNzaWduT3Ro
ZXIoIG90aGVyLCBIVE1MTmFtZXM6OnN0eWxlKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAK
QEAgLTQ5Niw3ICs0OTYsNyBAQCBIVE1MVGl0bGVFbGVtZW50OjpIVE1MVGl0bGVFbGVtZW50KEhU
TUxUCiAKIEhUTUxUaXRsZUVsZW1lbnQgJkhUTUxUaXRsZUVsZW1lbnQ6Om9wZXJhdG9yID0gKGNv
bnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfVElUTEUgKTsK
KyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6dGl0bGUoKSApOwogICAgIHJldHVy
biAqdGhpczsKIH0KIApJbmRleDoga2h0bWwvZG9tL2h0bWxfaW1hZ2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2RvbS9odG1sX2ltYWdlLmNwcCx2CnJl
dHJpZXZpbmcgcmV2aXNpb24gMS45CmRpZmYgLXUgLXAgLXIxLjkga2h0bWwvZG9tL2h0bWxfaW1h
Z2UuY3BwCi0tLSBraHRtbC9kb20vaHRtbF9pbWFnZS5jcHAJMyBOb3YgMjAwMyAwNjozMjowNCAt
MDAwMAkxLjkKKysrIGtodG1sL2RvbS9odG1sX2ltYWdlLmNwcAkyMyBKdW4gMjAwNSAyMTo1Mjox
MCAtMDAwMApAQCAtNDYsNyArNDYsNyBAQCBIVE1MQXJlYUVsZW1lbnQ6OkhUTUxBcmVhRWxlbWVu
dChIVE1MQXJlCiAKIEhUTUxBcmVhRWxlbWVudCAmSFRNTEFyZWFFbGVtZW50OjpvcGVyYXRvciA9
IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0FSRUEg
KTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6YXJlYSgpICk7CiAgICAgcmV0
dXJuICp0aGlzOwogfQogCkBAIC0xNzYsNyArMTc2LDcgQEAgSFRNTEltYWdlRWxlbWVudDo6SFRN
TEltYWdlRWxlbWVudChIVE1MSQogCiBIVE1MSW1hZ2VFbGVtZW50ICZIVE1MSW1hZ2VFbGVtZW50
OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3Ro
ZXIsIElEX0lNRyApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjppbWcoKSAp
OwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtMzcyLDcgKzM3Miw3IEBAIEhUTUxNYXBFbGVt
ZW50OjpIVE1MTWFwRWxlbWVudChIVE1MTWFwRWwKIAogSFRNTE1hcEVsZW1lbnQgJkhUTUxNYXBF
bGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhl
ciggb3RoZXIsIElEX01BUCApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpt
YXAoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApJbmRleDoga2h0bWwvZG9tL2h0bWxfaW5s
aW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9kb20v
aHRtbF9pbmxpbmUuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjcKZGlmZiAtdSAtcCAtcjEu
NyBraHRtbC9kb20vaHRtbF9pbmxpbmUuY3BwCi0tLSBraHRtbC9kb20vaHRtbF9pbmxpbmUuY3Bw
CTExIE1heSAyMDA1IDAwOjU4OjI4IC0wMDAwCTEuNworKysga2h0bWwvZG9tL2h0bWxfaW5saW5l
LmNwcAkyMyBKdW4gMjAwNSAyMTo1MjoxMCAtMDAwMApAQCAtNDUsNyArNDUsNyBAQCBIVE1MQW5j
aG9yRWxlbWVudDo6SFRNTEFuY2hvckVsZW1lbnQoSFRNCiAKIEhUTUxBbmNob3JFbGVtZW50ICZI
VE1MQW5jaG9yRWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAg
YXNzaWduT3RoZXIoIG90aGVyLCBJRF9BICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1M
TmFtZXM6OmEoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtMjE3LDcgKzIxNyw3IEBA
IEhUTUxCUkVsZW1lbnQ6OkhUTUxCUkVsZW1lbnQoSFRNTEJSRWxlbWUKIAogSFRNTEJSRWxlbWVu
dCAmSFRNTEJSRWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAg
YXNzaWduT3RoZXIoIG90aGVyLCBJRF9CUiApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRN
TE5hbWVzOjpicigpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC0yNTgsNyArMjU4LDcg
QEAgSFRNTEZvbnRFbGVtZW50OjpIVE1MRm9udEVsZW1lbnQoSFRNTEZvbgogCiBIVE1MRm9udEVs
ZW1lbnQgJkhUTUxGb250RWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7
Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9GT05UICk7CisgICAgYXNzaWduT3RoZXIoIG90
aGVyLCBIVE1MTmFtZXM6OmZvbnQoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtMzE5
LDcgKzMxOSw3IEBAIEhUTUxNb2RFbGVtZW50OjpIVE1MTW9kRWxlbWVudChjb25zdCBIVE0KIEhU
TUxNb2RFbGVtZW50OjpIVE1MTW9kRWxlbWVudChIVE1MRWxlbWVudEltcGwgKl9pbXBsKQogICAg
IDogSFRNTEVsZW1lbnQoKQogewotICAgIGlmIChfaW1wbCAmJiAoX2ltcGwtPmlkKCkgPT0gSURf
SU5TIHx8IF9pbXBsLT5pZCgpID09IElEX0RFTCkpCisgICAgaWYgKF9pbXBsICYmIChfaW1wbC0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OmlucygpKSB8fCBfaW1wbC0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OmRlbCgpKSkpCiAgICAgICAgIGltcGwgPSBfaW1wbDsKICAgICBlbHNlCiAgICAgICAgIGlt
cGwgPSAwOwpAQCAtMzI4LDkgKzMyOCw4IEBAIEhUTUxNb2RFbGVtZW50OjpIVE1MTW9kRWxlbWVu
dChIVE1MRWxlbWUKIAogSFRNTE1vZEVsZW1lbnQgJkhUTUxNb2RFbGVtZW50OjpvcGVyYXRvciA9
IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBpZiggb3RoZXIuZWxlbWVudElkKCkgIT0gSURf
SU5TICYmCi0Jb3RoZXIuZWxlbWVudElkKCkgIT0gSURfREVMICkKLSAgICB7CisgICAgaWYgKCFv
dGhlci5oYW5kbGUoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmlucygpKSAmJgorICAgICAgICAh
b3RoZXIuaGFuZGxlKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpkZWwoKSkpIHsKIAlpZiAoIGlt
cGwgKSBpbXBsLT5kZXJlZigpOwogCWltcGwgPSAwOwogICAgIH0gZWxzZSB7CkBAIC0zODEsMTkg
KzM4MCwxNiBAQCBIVE1MUXVvdGVFbGVtZW50OjpIVE1MUXVvdGVFbGVtZW50KGNvbnN0CiB7CiB9
CiAKLUhUTUxRdW90ZUVsZW1lbnQ6OkhUTUxRdW90ZUVsZW1lbnQoSFRNTEdlbmVyaWNFbGVtZW50
SW1wbCAqX2ltcGwpCitIVE1MUXVvdGVFbGVtZW50OjpIVE1MUXVvdGVFbGVtZW50KEhUTUxRdW90
ZUVsZW1lbnRJbXBsICpfaW1wbCkKICAgICA6IEhUTUxFbGVtZW50KCkKIHsKLSAgICBpZiAoX2lt
cGwgJiYgX2ltcGwtPmlkKCkgPT0gSURfUSkKLSAgICAgICAgaW1wbCA9IF9pbXBsOwotICAgIGVs
c2UKLSAgICAgICAgaW1wbCA9IDA7CisgICAgaW1wbCA9IF9pbXBsOwogICAgIGlmICggaW1wbCAp
IGltcGwtPnJlZigpOwogfQogCiBIVE1MUXVvdGVFbGVtZW50ICZIVE1MUXVvdGVFbGVtZW50Ojpv
cGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIs
IElEX1EgKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6cSgpICk7CiAgICAg
cmV0dXJuICp0aGlzOwogfQogCkluZGV4OiBraHRtbC9kb20vaHRtbF9pbmxpbmUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9kb20vaHRtbF9pbmxpbmUuaCx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zCmRpZmYgLXUgLXAgLXIxLjMga2h0bWwvZG9tL2h0bWxf
aW5saW5lLmgKLS0tIGtodG1sL2RvbS9odG1sX2lubGluZS5oCTE1IEFwciAyMDAyIDIzOjQyOjAx
IC0wMDAwCTEuMworKysga2h0bWwvZG9tL2h0bWxfaW5saW5lLmgJMjMgSnVuIDIwMDUgMjE6NTI6
MTEgLTAwMDAKQEAgLTQyNSw3ICs0MjUsNyBAQCBwdWJsaWM6CiAgICAgSFRNTFF1b3RlRWxlbWVu
dChjb25zdCBOb2RlICZvdGhlcikgOiBIVE1MRWxlbWVudCgpCiAgICAgICAgICB7KCp0aGlzKT1v
dGhlcjt9CiBwcm90ZWN0ZWQ6Ci0gICAgSFRNTFF1b3RlRWxlbWVudChIVE1MR2VuZXJpY0VsZW1l
bnRJbXBsICppbXBsKTsKKyAgICBIVE1MUXVvdGVFbGVtZW50KEhUTUxRdW90ZUVsZW1lbnRJbXBs
ICppbXBsKTsKIHB1YmxpYzoKIAogICAgIEhUTUxRdW90ZUVsZW1lbnQgJiBvcGVyYXRvciA9IChj
b25zdCBIVE1MUXVvdGVFbGVtZW50ICZvdGhlcik7CkluZGV4OiBraHRtbC9kb20vaHRtbF9saXN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9kb20vaHRt
bF9saXN0LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40CmRpZmYgLXUgLXAgLXIxLjQga2h0
bWwvZG9tL2h0bWxfbGlzdC5jcHAKLS0tIGtodG1sL2RvbS9odG1sX2xpc3QuY3BwCTEwIEp1biAy
MDAyIDIwOjA3OjM2IC0wMDAwCTEuNAorKysga2h0bWwvZG9tL2h0bWxfbGlzdC5jcHAJMjMgSnVu
IDIwMDUgMjE6NTI6MTEgLTAwMDAKQEAgLTQxLDcgKzQxLDcgQEAgSFRNTERMaXN0RWxlbWVudDo6
SFRNTERMaXN0RWxlbWVudChIVE1MRAogCiBIVE1MRExpc3RFbGVtZW50ICZIVE1MRExpc3RFbGVt
ZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlcigg
b3RoZXIsIElEX0RMICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OmRsKCkg
KTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTg4LDcgKzg4LDcgQEAgSFRNTERpcmVjdG9y
eUVsZW1lbnQ6OkhUTUxEaXJlY3RvcnlFbGVtZQogCiBIVE1MRGlyZWN0b3J5RWxlbWVudCAmSFRN
TERpcmVjdG9yeUVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAg
IGFzc2lnbk90aGVyKCBvdGhlciwgSURfRElSICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBI
VE1MTmFtZXM6OmRpcigpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC0xMzUsNyArMTM1
LDcgQEAgSFRNTExJRWxlbWVudDo6SFRNTExJRWxlbWVudChIVE1MTElFbGVtZQogCiBIVE1MTElF
bGVtZW50ICZIVE1MTElFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsK
LSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0xJICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVy
LCBIVE1MTmFtZXM6OmxpKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTE5MCw3ICsx
OTAsNyBAQCBIVE1MTWVudUVsZW1lbnQ6OkhUTUxNZW51RWxlbWVudChIVE1MTWVuCiAKIEhUTUxN
ZW51RWxlbWVudCAmSFRNTE1lbnVFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhl
cikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX01FTlUgKTsKKyAgICBhc3NpZ25PdGhl
ciggb3RoZXIsIEhUTUxOYW1lczo6bWVudSgpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBA
IC0yMzcsNyArMjM3LDcgQEAgSFRNTE9MaXN0RWxlbWVudDo6SFRNTE9MaXN0RWxlbWVudChIVE1M
TwogCiBIVE1MT0xpc3RFbGVtZW50ICZIVE1MT0xpc3RFbGVtZW50OjpvcGVyYXRvciA9IChjb25z
dCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX09MICk7CisgICAg
YXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6Om9sKCkgKTsKICAgICByZXR1cm4gKnRoaXM7
CiB9CiAKQEAgLTMxMCw3ICszMTAsNyBAQCBIVE1MVUxpc3RFbGVtZW50OjpIVE1MVUxpc3RFbGVt
ZW50KEhUTUxVCiAKIEhUTUxVTGlzdEVsZW1lbnQgJkhUTUxVTGlzdEVsZW1lbnQ6Om9wZXJhdG9y
ID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfVUwg
KTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6dWwoKSApOwogICAgIHJldHVy
biAqdGhpczsKIH0KIApJbmRleDoga2h0bWwvZG9tL2h0bWxfbWlzYy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZG9tL2h0bWxfbWlzYy5jcHAsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuNwpkaWZmIC11IC1wIC1yMS43IGtodG1sL2RvbS9odG1sX21pc2Mu
Y3BwCi0tLSBraHRtbC9kb20vaHRtbF9taXNjLmNwcAkxMSBNYXkgMjAwNSAwMDo1ODoyOCAtMDAw
MAkxLjcKKysrIGtodG1sL2RvbS9odG1sX21pc2MuY3BwCTIzIEp1biAyMDA1IDIxOjUyOjExIC0w
MDAwCkBAIC00MSw3ICs0MSw3IEBAIEhUTUxCYXNlRm9udEVsZW1lbnQ6OkhUTUxCYXNlRm9udEVs
ZW1lbnQKIAogSFRNTEJhc2VGb250RWxlbWVudCAmSFRNTEJhc2VGb250RWxlbWVudDo6b3BlcmF0
b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9C
QVNFRk9OVCApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpiYXNlZm9udCgp
ICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkluZGV4OiBraHRtbC9kb20vaHRtbF9vYmplY3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2RvbS9odG1s
X29iamVjdC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNQpkaWZmIC11IC1wIC1yMS41IGto
dG1sL2RvbS9odG1sX29iamVjdC5jcHAKLS0tIGtodG1sL2RvbS9odG1sX29iamVjdC5jcHAJMSBN
YXIgMjAwNCAxNzowNDoyNCAtMDAwMAkxLjUKKysrIGtodG1sL2RvbS9odG1sX29iamVjdC5jcHAJ
MjMgSnVuIDIwMDUgMjE6NTI6MTEgLTAwMDAKQEAgLTQzLDcgKzQzLDcgQEAgSFRNTEFwcGxldEVs
ZW1lbnQ6OkhUTUxBcHBsZXRFbGVtZW50KEhUTQogCiBIVE1MQXBwbGV0RWxlbWVudCAmSFRNTEFw
cGxldEVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2ln
bk90aGVyKCBvdGhlciwgSURfQVBQTEVUICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1M
TmFtZXM6OmFwcGxldCgpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC0xOTQsNyArMTk0
LDcgQEAgSFRNTE9iamVjdEVsZW1lbnQ6OkhUTUxPYmplY3RFbGVtZW50KEhUTQogCiBIVE1MT2Jq
ZWN0RWxlbWVudCAmSFRNTE9iamVjdEVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90
aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfT0JKRUNUICk7CisgICAgYXNzaWdu
T3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6Om9iamVjdCgpICk7CiAgICAgcmV0dXJuICp0aGlzOwog
fQogCkBAIC00MzIsNyArNDMyLDcgQEAgSFRNTFBhcmFtRWxlbWVudDo6SFRNTFBhcmFtRWxlbWVu
dChIVE1MUAogCiBIVE1MUGFyYW1FbGVtZW50ICZIVE1MUGFyYW1FbGVtZW50OjpvcGVyYXRvciA9
IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX1BBUkFN
ICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OnBhcmFtKCkgKTsKICAgICBy
ZXR1cm4gKnRoaXM7CiB9CiAKSW5kZXg6IGtodG1sL2RvbS9odG1sX3RhYmxlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9kb20vaHRtbF90YWJsZS5jcHAs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNgpkaWZmIC11IC1wIC1yMS42IGtodG1sL2RvbS9odG1s
X3RhYmxlLmNwcAotLS0ga2h0bWwvZG9tL2h0bWxfdGFibGUuY3BwCTMxIE9jdCAyMDAzIDAwOjQ3
OjE2IC0wMDAwCTEuNgorKysga2h0bWwvZG9tL2h0bWxfdGFibGUuY3BwCTIzIEp1biAyMDA1IDIx
OjUyOjEyIC0wMDAwCkBAIC00NSw3ICs0NSw3IEBAIEhUTUxUYWJsZUNhcHRpb25FbGVtZW50OjpI
VE1MVGFibGVDYXB0aW8KIAogSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQgJkhUTUxUYWJsZUNhcHRp
b25FbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25P
dGhlciggb3RoZXIsIElEX0NBUFRJT04gKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxO
YW1lczo6Y2FwdGlvbigpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC04Niw5ICs4Niw4
IEBAIEhUTUxUYWJsZUNlbGxFbGVtZW50OjpIVE1MVGFibGVDZWxsRWxlbWUKIAogSFRNTFRhYmxl
Q2VsbEVsZW1lbnQgJkhUTUxUYWJsZUNlbGxFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2Rl
ICZvdGhlcikKIHsKLSAgICBpZiggb3RoZXIuZWxlbWVudElkKCkgIT0gSURfVEQgJiYKLQlvdGhl
ci5lbGVtZW50SWQoKSAhPSBJRF9USCApCi0gICAgeworICAgIGlmICghb3RoZXIuaGFuZGxlKCkt
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0ZCgpKSB8fAorICAgICAgICAhb3RoZXIuaGFuZGxlKCkt
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0aCgpKSkgewogCWlmICggaW1wbCApIGltcGwtPmRlcmVm
KCk7CiAJaW1wbCA9IDA7CiAgICAgfSBlbHNlIHsKQEAgLTI5NSw5ICsyOTQsOCBAQCBIVE1MVGFi
bGVDb2xFbGVtZW50OjpIVE1MVGFibGVDb2xFbGVtZW50CiAKIEhUTUxUYWJsZUNvbEVsZW1lbnQg
JkhUTUxUYWJsZUNvbEVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewot
ICAgIGlmKCBvdGhlci5lbGVtZW50SWQoKSAhPSBJRF9DT0wgJiYKLQlvdGhlci5lbGVtZW50SWQo
KSAhPSBJRF9DT0xHUk9VUCApCi0gICAgeworICAgIGlmICghb3RoZXIuaGFuZGxlKCktPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjpjb2woKSkgJiYKKyAgICAgICAgIW90aGVyLmhhbmRsZSgpLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6Y29sZ3JvdXAoKSkpIHsKIAlpZiAoIGltcGwgKSBpbXBsLT5kZXJl
ZigpOwogCWltcGwgPSAwOwogICAgIH0gZWxzZSB7CkBAIC00MDEsNyArMzk5LDcgQEAgSFRNTFRh
YmxlRWxlbWVudDo6SFRNTFRhYmxlRWxlbWVudChIVE1MVAogCiBIVE1MVGFibGVFbGVtZW50ICZI
VE1MVGFibGVFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBh
c3NpZ25PdGhlciggb3RoZXIsIElEX1RBQkxFICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBI
VE1MTmFtZXM6OnRhYmxlKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTYzOCw3ICs2
MzYsNyBAQCBIVE1MVGFibGVSb3dFbGVtZW50OjpIVE1MVGFibGVSb3dFbGVtZW50CiAKIEhUTUxU
YWJsZVJvd0VsZW1lbnQgJkhUTUxUYWJsZVJvd0VsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5v
ZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfVFIgKTsKKyAgICBhc3Np
Z25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6dHIoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0K
IApAQCAtNzc1LDEwICs3NzMsOSBAQCBIVE1MVGFibGVTZWN0aW9uRWxlbWVudDo6SFRNTFRhYmxl
U2VjdGlvCiAKIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50ICZIVE1MVGFibGVTZWN0aW9uRWxlbWVu
dDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgaWYob3RoZXIuZWxlbWVu
dElkKCkgIT0gSURfVEJPRFkgJiYKLSAgICAgICBvdGhlci5lbGVtZW50SWQoKSAhPSBJRF9USEVB
RCAmJgotICAgICAgIG90aGVyLmVsZW1lbnRJZCgpICE9IElEX1RGT09UICkKLSAgICB7CisgICAg
aWYgKCFvdGhlci5oYW5kbGUoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRib2R5KCkpICYmCisg
ICAgICAgICFvdGhlci5oYW5kbGUoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRoZWFkKCkpICYm
CisgICAgICAgICFvdGhlci5oYW5kbGUoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRmb290KCkp
KSB7CiAJaWYgKCBpbXBsICkgaW1wbC0+ZGVyZWYoKTsKIAlpbXBsID0gMDsKICAgICB9IGVsc2Ug
ewpJbmRleDoga2h0bWwvZWNtYS9ranNfY3NzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvV2ViQ29yZS9raHRtbC9lY21hL2tqc19jc3MuY3BwLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjI2CmRpZmYgLXUgLXAgLXIxLjI2IGtodG1sL2VjbWEva2pzX2Nzcy5jcHAKLS0tIGtodG1s
L2VjbWEva2pzX2Nzcy5jcHAJMjIgSnVuIDIwMDUgMTY6Mzg6MDIgLTAwMDAJMS4yNgorKysga2h0
bWwvZWNtYS9ranNfY3NzLmNwcAkyMyBKdW4gMjAwNSAyMTo1MjoxMyAtMDAwMApAQCAtMjksNyAr
MjksNyBAQAogI2luY2x1ZGUgInhtbC9kb21fZG9jaW1wbC5oIgogI2luY2x1ZGUgImh0bWwvaHRt
bF9oZWFkaW1wbC5oIiAvLyBmb3IgSFRNTFN0eWxlRWxlbWVudAogI2luY2x1ZGUgImtqc19kb20u
aCIKLSNpbmNsdWRlICJtaXNjL2h0bWx0YWdzLmgiCisjaW5jbHVkZSAiaHRtbG5hbWVzLmgiCiAK
ICNpbmNsdWRlIDxrZGVidWcuaD4KIApAQCAtNTUsNiArNTUsNyBAQCB1c2luZyBET006OkNvdW50
ZXJJbXBsOwogdXNpbmcgRE9NOjpEb2N1bWVudEltcGw7CiB1c2luZyBET006OkRPTVN0cmluZzsK
IHVzaW5nIERPTTo6RWxlbWVudEltcGw7Cit1c2luZyBET006OkhUTUxOYW1lczsKIHVzaW5nIERP
TTo6SFRNTFN0eWxlRWxlbWVudEltcGw7CiB1c2luZyBET006Ok1lZGlhTGlzdEltcGw7CiB1c2lu
ZyBET006OlJlY3RJbXBsOwpAQCAtNDA0LDcgKzQwNSw3IEBAIFZhbHVlIERPTVN0eWxlU2hlZXRM
aXN0Ojp0cnlHZXQoRXhlY1N0YXQKICAgLy8gYW5kIGRvZXNuJ3QgbG9vayBmb3IgbmFtZSBhdHRy
aWJ1dGUgKHNlZSBpbXBsZW1lbnRhdGlvbiBhYm92ZSkuCiAgIC8vIEJ1dCB1bmljaXR5IG9mIHN0
eWxlc2hlZXQgaWRzIGlzIGdvb2QgcHJhY3RpY2UgYW55d2F5IDspCiAgIEVsZW1lbnRJbXBsICpl
bGVtZW50ID0gbV9kb2MtPmdldEVsZW1lbnRCeUlkKHAuc3RyaW5nKCkpOwotICBpZiAoZWxlbWVu
dCAmJiBlbGVtZW50LT5pZCgpID09IElEX1NUWUxFKQorICBpZiAoZWxlbWVudCAmJiBlbGVtZW50
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c3R5bGUoKSkpCiAgICAgcmV0dXJuIGdldERPTVN0eWxl
U2hlZXQoZXhlYywgc3RhdGljX2Nhc3Q8SFRNTFN0eWxlRWxlbWVudEltcGwgKj4oZWxlbWVudCkt
PnNoZWV0KCkpOwogCiAgIHJldHVybiBET01PYmplY3Q6OnRyeUdldChleGVjLCBwKTsKSW5kZXg6
IGtodG1sL2VjbWEva2pzX2RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dl
YkNvcmUva2h0bWwvZWNtYS9ranNfZG9tLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS43Ngpk
aWZmIC11IC1wIC1yMS43NiBraHRtbC9lY21hL2tqc19kb20uY3BwCi0tLSBraHRtbC9lY21hL2tq
c19kb20uY3BwCTIyIEp1biAyMDA1IDAwOjQ4OjQ0IC0wMDAwCTEuNzYKKysrIGtodG1sL2VjbWEv
a2pzX2RvbS5jcHAJMjMgSnVuIDIwMDUgMjE6NTI6MTUgLTAwMDAKQEAgLTQ3LDggKzQ3LDYgQEAK
IAogI2luY2x1ZGUgImh0bWxfb2JqZWN0aW1wbC5oIgogCi0jaW5jbHVkZSAibWlzYy9odG1sdGFn
cy5oIgotCiAjaWYgQVBQTEVfQ0hBTkdFUwogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL3J1bnRp
bWVfb2JqZWN0Lmg+CiAjZW5kaWYKQEAgLTY3LDYgKzY1LDcgQEAgdXNpbmcgRE9NOjpIVE1MQXBw
bGV0RWxlbWVudEltcGw7CiB1c2luZyBET006OkhUTUxEb2N1bWVudEltcGw7CiB1c2luZyBET006
OkhUTUxFbGVtZW50SW1wbDsKIHVzaW5nIERPTTo6SFRNTEVtYmVkRWxlbWVudEltcGw7Cit1c2lu
ZyBET006OkhUTUxOYW1lczsKIHVzaW5nIERPTTo6SFRNTE9iamVjdEVsZW1lbnRJbXBsOwogdXNp
bmcgRE9NOjpOYW1lZE5vZGVNYXBJbXBsOwogdXNpbmcgRE9NOjpOb2RlOwpAQCAtNDYyLDcgKzQ2
MSw3IEBAIHZvaWQgRE9NTm9kZTo6cHV0VmFsdWUoRXhlY1N0YXRlICpleGVjLCAKICAgICBub2Rl
LnNldE5vZGVWYWx1ZSh2YWx1ZS50b1N0cmluZyhleGVjKS5zdHJpbmcoKSwgZXhjZXB0aW9uKTsK
ICAgICBicmVhazsKICAgY2FzZSBQcmVmaXg6Ci0gICAgbm9kZS5zZXRQcmVmaXgodmFsdWUudG9T
dHJpbmcoZXhlYykuc3RyaW5nKCksIGV4Y2VwdGlvbik7CisgICAgbm9kZS5zZXRQcmVmaXgodmFs
dWUudG9TdHJpbmcoZXhlYykuc3RyaW5nKCkuaW1wbGVtZW50YXRpb24oKSwgZXhjZXB0aW9uKTsK
ICAgICBicmVhazsKICAgY2FzZSBPbkFib3J0OgogICAgIHNldExpc3RlbmVyKGV4ZWMsRE9NOjpF
dmVudEltcGw6OkFCT1JUX0VWRU5ULHZhbHVlKTsKQEAgLTExODcsNyArMTE4Niw3IEBAIFZhbHVl
IERPTUVsZW1lbnQ6OnRyeUdldChFeGVjU3RhdGUgKmV4ZWMKICAgewogICAgIHN3aXRjaCggZW50
cnktPnZhbHVlICkgewogICAgIGNhc2UgVGFnTmFtZToKLSAgICAgIHJldHVybiBnZXRTdHJpbmdP
ck51bGwoZWxlbWVudC50YWdOYW1lKCkpOworICAgICAgcmV0dXJuIGdldFN0cmluZ09yTnVsbChl
bGVtZW50Lm5vZGVOYW1lKCkpOwogICAgIGNhc2UgU3R5bGU6CiAgICAgICByZXR1cm4gZ2V0RE9N
Q1NTU3R5bGVEZWNsYXJhdGlvbihleGVjLGVsZW1lbnQuc3R5bGUoKSk7CiAgICAgZGVmYXVsdDoK
QEAgLTE3MDksMjYgKzE3MDgsMjEgQEAgVmFsdWVJbXAgKmdldFJ1bnRpbWVPYmplY3QoRXhlY1N0
YXRlICpleAogICAgIGlmICghbikKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBzd2l0Y2ggKG4t
PmlkKCkpIHsKLSAgICAgICAgY2FzZSBJRF9BUFBMRVQ6IHsKLSAgICAgICAgICAgIEhUTUxBcHBs
ZXRFbGVtZW50SW1wbCAqYXBwbGV0RWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxBcHBsZXRFbGVt
ZW50SW1wbCAqPihuKTsKLSAgICAgICAgICAgIGlmIChhcHBsZXRFbGVtZW50LT5nZXRBcHBsZXRJ
bnN0YW5jZSgpKQotICAgICAgICAgICAgICAgIC8vIFRoZSBpbnN0YW5jZSBpcyBvd25lZCBieSB0
aGUgYXBwbGV0IGVsZW1lbnQuCi0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBSdW50aW1lT2Jq
ZWN0SW1wKGFwcGxldEVsZW1lbnQtPmdldEFwcGxldEluc3RhbmNlKCksIGZhbHNlKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgSURfRU1CRUQ6IHsKLSAgICAg
ICAgICAgIEhUTUxFbWJlZEVsZW1lbnRJbXBsICplbWJlZEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxI
VE1MRW1iZWRFbGVtZW50SW1wbCAqPihuKTsKLSAgICAgICAgICAgIGlmIChlbWJlZEVsZW1lbnQt
PmdldEVtYmVkSW5zdGFuY2UoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFJ1bnRpbWVP
YmplY3RJbXAoZW1iZWRFbGVtZW50LT5nZXRFbWJlZEluc3RhbmNlKCksIGZhbHNlKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgSURfT0JKRUNUOiB7Ci0gICAg
ICAgICAgICBIVE1MT2JqZWN0RWxlbWVudEltcGwgKm9iamVjdEVsZW1lbnQgPSBzdGF0aWNfY2Fz
dDxIVE1MT2JqZWN0RWxlbWVudEltcGwgKj4obik7Ci0gICAgICAgICAgICBpZiAob2JqZWN0RWxl
bWVudC0+Z2V0T2JqZWN0SW5zdGFuY2UoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFJ1
bnRpbWVPYmplY3RJbXAob2JqZWN0RWxlbWVudC0+Z2V0T2JqZWN0SW5zdGFuY2UoKSwgZmFsc2Up
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKyAgICBpZiAobi0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OmFwcGxldCgpKSkgeworICAgICAgICBIVE1MQXBwbGV0RWxlbWVudEltcGwgKmFw
cGxldEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MQXBwbGV0RWxlbWVudEltcGwgKj4obik7Cisg
ICAgICAgIGlmIChhcHBsZXRFbGVtZW50LT5nZXRBcHBsZXRJbnN0YW5jZSgpKQorICAgICAgICAg
ICAgLy8gVGhlIGluc3RhbmNlIGlzIG93bmVkIGJ5IHRoZSBhcHBsZXQgZWxlbWVudC4KKyAgICAg
ICAgICAgIHJldHVybiBuZXcgUnVudGltZU9iamVjdEltcChhcHBsZXRFbGVtZW50LT5nZXRBcHBs
ZXRJbnN0YW5jZSgpLCBmYWxzZSk7CisgICAgfQorICAgIGVsc2UgaWYgKG4tPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjplbWJlZCgpKSkgeworICAgICAgICBIVE1MRW1iZWRFbGVtZW50SW1wbCAqZW1i
ZWRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEVtYmVkRWxlbWVudEltcGwgKj4obik7CisgICAg
ICAgIGlmIChlbWJlZEVsZW1lbnQtPmdldEVtYmVkSW5zdGFuY2UoKSkKKyAgICAgICAgICAgIHJl
dHVybiBuZXcgUnVudGltZU9iamVjdEltcChlbWJlZEVsZW1lbnQtPmdldEVtYmVkSW5zdGFuY2Uo
KSwgZmFsc2UpOworICAgIH0KKyAgICBlbHNlIGlmIChuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
b2JqZWN0KCkpKSB7CisgICAgICAgIEhUTUxPYmplY3RFbGVtZW50SW1wbCAqb2JqZWN0RWxlbWVu
dCA9IHN0YXRpY19jYXN0PEhUTUxPYmplY3RFbGVtZW50SW1wbCAqPihuKTsKKyAgICAgICAgaWYg
KG9iamVjdEVsZW1lbnQtPmdldE9iamVjdEluc3RhbmNlKCkpCisgICAgICAgICAgICByZXR1cm4g
bmV3IFJ1bnRpbWVPYmplY3RJbXAob2JqZWN0RWxlbWVudC0+Z2V0T2JqZWN0SW5zdGFuY2UoKSwg
ZmFsc2UpOwogICAgIH0KICAgICAKICAgICAvLyBJZiB3ZSBkb24ndCBoYXZlIGEgcnVudGltZSBv
YmplY3QgcmV0dXJuIDAuCkluZGV4OiBraHRtbC9lY21hL2tqc19odG1sLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lY21hL2tqc19odG1sLmNwcCx2CnJl
dHJpZXZpbmcgcmV2aXNpb24gMS4xMTgKZGlmZiAtdSAtcCAtcjEuMTE4IGtodG1sL2VjbWEva2pz
X2h0bWwuY3BwCi0tLSBraHRtbC9lY21hL2tqc19odG1sLmNwcAkyMiBKdW4gMjAwNSAwMDo0ODo0
NCAtMDAwMAkxLjExOAorKysga2h0bWwvZWNtYS9ranNfaHRtbC5jcHAJMjMgSnVuIDIwMDUgMjE6
NTI6MjAgLTAwMDAKQEAgLTQ2LDggKzQ2LDYgQEAKICNpbmNsdWRlICJranNfZXZlbnRzLmgiCiAj
aW5jbHVkZSAia2pzX3Byb3h5LmgiCiAKLSNpbmNsdWRlICJtaXNjL2h0bWx0YWdzLmgiCi0KICNp
bmNsdWRlICJyZW5kZXJpbmcvcmVuZGVyX2NhbnZhc2ltYWdlLmgiCiAjaW5jbHVkZSAicmVuZGVy
aW5nL3JlbmRlcl9vYmplY3QuaCIKICNpbmNsdWRlICJyZW5kZXJpbmcvcmVuZGVyX2xheWVyLmgi
CkBAIC0xMDksNiArMTA3LDcgQEAgdXNpbmcgRE9NOjpIVE1MTWFwRWxlbWVudEltcGw7CiB1c2lu
ZyBET006OkhUTUxNZW51RWxlbWVudEltcGw7CiB1c2luZyBET006OkhUTUxNZXRhRWxlbWVudElt
cGw7CiB1c2luZyBET006OkhUTUxNb2RFbGVtZW50SW1wbDsKK3VzaW5nIERPTTo6SFRNTE5hbWVz
OwogdXNpbmcgRE9NOjpIVE1MT0xpc3RFbGVtZW50SW1wbDsKIHVzaW5nIERPTTo6SFRNTE9iamVj
dEVsZW1lbnRJbXBsOwogdXNpbmcgRE9NOjpIVE1MT3B0R3JvdXBFbGVtZW50SW1wbDsKQEAgLTM1
Myw3ICszNTIsNyBAQCBWYWx1ZSBIVE1MRG9jdW1lbnQ6OnRyeUdldChFeGVjU3RhdGUgKmV4CiAg
IGlmICh2YWwpCiAgICAgcmV0dXJuIFZhbHVlKHZhbCk7CiAKLSAgSFRNTEJvZHlFbGVtZW50SW1w
bCAqYm9keUVsZW1lbnQgPSAoYm9keSAmJiBib2R5LT5pZCgpID09IElEX0JPRFkpID8gc3RhdGlj
X2Nhc3Q8SFRNTEJvZHlFbGVtZW50SW1wbCAqPihib2R5KSA6IDA7CisgIEhUTUxCb2R5RWxlbWVu
dEltcGwgKmJvZHlFbGVtZW50ID0gKGJvZHkgJiYgYm9keS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
OmJvZHkoKSkpID8gc3RhdGljX2Nhc3Q8SFRNTEJvZHlFbGVtZW50SW1wbCAqPihib2R5KSA6IDA7
CiAKICAgaWYgKGVudHJ5KSB7CiAgICAgc3dpdGNoIChlbnRyeS0+dmFsdWUpIHsKQEAgLTQyOCw3
ICs0MjcsNyBAQCB2b2lkIEtKUzo6SFRNTERvY3VtZW50OjpwdXRWYWx1ZShFeGVjU3RhCiAgIERP
TUV4Y2VwdGlvblRyYW5zbGF0b3IgZXhjZXB0aW9uKGV4ZWMpOwogICBIVE1MRG9jdW1lbnRJbXBs
ICZkb2MgPSAqc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50SW1wbCAqPihpbXBsKCkpOwogICBIVE1M
RWxlbWVudEltcGwgKmJvZHkgPSBkb2MuYm9keSgpOwotICBIVE1MQm9keUVsZW1lbnRJbXBsICpi
b2R5RWxlbWVudCA9IChib2R5ICYmIGJvZHktPmlkKCkgPT0gSURfQk9EWSkgPyBzdGF0aWNfY2Fz
dDxIVE1MQm9keUVsZW1lbnRJbXBsICo+KGJvZHkpIDogMDsKKyAgSFRNTEJvZHlFbGVtZW50SW1w
bCAqYm9keUVsZW1lbnQgPSAoYm9keSAmJiBib2R5LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Ym9k
eSgpKSkgPyBzdGF0aWNfY2FzdDxIVE1MQm9keUVsZW1lbnRJbXBsICo+KGJvZHkpIDogMDsKIAog
ICBzd2l0Y2ggKHRva2VuKSB7CiAgIGNhc2UgVGl0bGU6CkBAIC01ODIsMTMzICs1ODEsMjE4IEBA
IGNvbnN0IENsYXNzSW5mbyBLSlM6OkhUTUxFbGVtZW50OjptYXJxdWUKIAogY29uc3QgQ2xhc3NJ
bmZvKiBLSlM6OkhUTUxFbGVtZW50OjpjbGFzc0luZm8oKSBjb25zdAogewotICBzd2l0Y2ggKGlt
cGwoKS0+aWQoKSkgewotICBjYXNlIElEX0hUTUw6Ci0gICAgcmV0dXJuICZodG1sX2luZm87Ci0g
IGNhc2UgSURfSEVBRDoKLSAgICByZXR1cm4gJmhlYWRfaW5mbzsKLSAgY2FzZSBJRF9MSU5LOgot
ICAgIHJldHVybiAmbGlua19pbmZvOwotICBjYXNlIElEX1RJVExFOgotICAgIHJldHVybiAmdGl0
bGVfaW5mbzsKLSAgY2FzZSBJRF9NRVRBOgotICAgIHJldHVybiAmbWV0YV9pbmZvOwotICBjYXNl
IElEX0JBU0U6Ci0gICAgcmV0dXJuICZiYXNlX2luZm87Ci0gIGNhc2UgSURfSVNJTkRFWDoKLSAg
ICByZXR1cm4gJmlzSW5kZXhfaW5mbzsKLSAgY2FzZSBJRF9TVFlMRToKLSAgICByZXR1cm4gJnN0
eWxlX2luZm87Ci0gIGNhc2UgSURfQk9EWToKLSAgICByZXR1cm4gJmJvZHlfaW5mbzsKLSAgY2Fz
ZSBJRF9GT1JNOgotICAgIHJldHVybiAmZm9ybV9pbmZvOwotICBjYXNlIElEX1NFTEVDVDoKLSAg
ICByZXR1cm4gJnNlbGVjdF9pbmZvOwotICBjYXNlIElEX09QVEdST1VQOgotICAgIHJldHVybiAm
b3B0R3JvdXBfaW5mbzsKLSAgY2FzZSBJRF9PUFRJT046Ci0gICAgcmV0dXJuICZvcHRpb25faW5m
bzsKLSAgY2FzZSBJRF9JTlBVVDoKLSAgICByZXR1cm4gJmlucHV0X2luZm87Ci0gIGNhc2UgSURf
VEVYVEFSRUE6Ci0gICAgcmV0dXJuICZ0ZXh0QXJlYV9pbmZvOwotICBjYXNlIElEX0JVVFRPTjoK
LSAgICByZXR1cm4gJmJ1dHRvbl9pbmZvOwotICBjYXNlIElEX0xBQkVMOgotICAgIHJldHVybiAm
bGFiZWxfaW5mbzsKLSAgY2FzZSBJRF9GSUVMRFNFVDoKLSAgICByZXR1cm4gJmZpZWxkU2V0X2lu
Zm87Ci0gIGNhc2UgSURfTEVHRU5EOgotICAgIHJldHVybiAmbGVnZW5kX2luZm87Ci0gIGNhc2Ug
SURfVUw6Ci0gICAgcmV0dXJuICZ1bF9pbmZvOwotICBjYXNlIElEX09MOgotICAgIHJldHVybiAm
b2xfaW5mbzsKLSAgY2FzZSBJRF9ETDoKLSAgICByZXR1cm4gJmRsX2luZm87Ci0gIGNhc2UgSURf
RElSOgotICAgIHJldHVybiAmZGlyX2luZm87Ci0gIGNhc2UgSURfTUVOVToKLSAgICByZXR1cm4g
Jm1lbnVfaW5mbzsKLSAgY2FzZSBJRF9MSToKLSAgICByZXR1cm4gJmxpX2luZm87Ci0gIGNhc2Ug
SURfRElWOgotICAgIHJldHVybiAmZGl2X2luZm87Ci0gIGNhc2UgSURfUDoKLSAgICByZXR1cm4g
JnBfaW5mbzsKLSAgY2FzZSBJRF9IMToKLSAgY2FzZSBJRF9IMjoKLSAgY2FzZSBJRF9IMzoKLSAg
Y2FzZSBJRF9INDoKLSAgY2FzZSBJRF9INToKLSAgY2FzZSBJRF9INjoKLSAgICByZXR1cm4gJmhl
YWRpbmdfaW5mbzsKLSAgY2FzZSBJRF9CTE9DS1FVT1RFOgotICAgIHJldHVybiAmYmxvY2tRdW90
ZV9pbmZvOwotICBjYXNlIElEX1E6Ci0gICAgcmV0dXJuICZxX2luZm87Ci0gIGNhc2UgSURfUFJF
OgotICAgIHJldHVybiAmcHJlX2luZm87Ci0gIGNhc2UgSURfQlI6Ci0gICAgcmV0dXJuICZicl9p
bmZvOwotICBjYXNlIElEX0JBU0VGT05UOgotICAgIHJldHVybiAmYmFzZUZvbnRfaW5mbzsKLSAg
Y2FzZSBJRF9GT05UOgotICAgIHJldHVybiAmZm9udF9pbmZvOwotICBjYXNlIElEX0hSOgotICAg
IHJldHVybiAmaHJfaW5mbzsKLSAgY2FzZSBJRF9JTlM6Ci0gIGNhc2UgSURfREVMOgotICAgIHJl
dHVybiAmbW9kX2luZm87Ci0gIGNhc2UgSURfQToKLSAgICByZXR1cm4gJmFfaW5mbzsKLSAgY2Fz
ZSBJRF9DQU5WQVM6Ci0gICAgcmV0dXJuICZjYW52YXNfaW5mbzsKLSAgY2FzZSBJRF9JTUc6Ci0g
ICAgcmV0dXJuICZpbWdfaW5mbzsKLSAgY2FzZSBJRF9PQkpFQ1Q6Ci0gICAgcmV0dXJuICZvYmpl
Y3RfaW5mbzsKLSAgY2FzZSBJRF9QQVJBTToKLSAgICByZXR1cm4gJnBhcmFtX2luZm87Ci0gIGNh
c2UgSURfQVBQTEVUOgotICAgIHJldHVybiAmYXBwbGV0X2luZm87Ci0gIGNhc2UgSURfTUFQOgot
ICAgIHJldHVybiAmbWFwX2luZm87Ci0gIGNhc2UgSURfQVJFQToKLSAgICByZXR1cm4gJmFyZWFf
aW5mbzsKLSAgY2FzZSBJRF9TQ1JJUFQ6Ci0gICAgcmV0dXJuICZzY3JpcHRfaW5mbzsKLSAgY2Fz
ZSBJRF9UQUJMRToKLSAgICByZXR1cm4gJnRhYmxlX2luZm87Ci0gIGNhc2UgSURfQ0FQVElPTjoK
LSAgICByZXR1cm4gJmNhcHRpb25faW5mbzsKLSAgY2FzZSBJRF9DT0w6Ci0gICAgcmV0dXJuICZj
b2xfaW5mbzsKLSAgY2FzZSBJRF9USEVBRDoKLSAgICByZXR1cm4gJnRhYmxlc2VjdGlvbl9pbmZv
OwotICBjYXNlIElEX1RCT0RZOgotICAgIHJldHVybiAmdGFibGVzZWN0aW9uX2luZm87Ci0gIGNh
c2UgSURfVEZPT1Q6Ci0gICAgcmV0dXJuICZ0YWJsZXNlY3Rpb25faW5mbzsKLSAgY2FzZSBJRF9U
UjoKLSAgICByZXR1cm4gJnRyX2luZm87Ci0gIGNhc2UgSURfVEg6Ci0gICAgcmV0dXJuICZ0YWJs
ZWNlbGxfaW5mbzsKLSAgY2FzZSBJRF9URDoKLSAgICByZXR1cm4gJnRhYmxlY2VsbF9pbmZvOwot
ICBjYXNlIElEX0ZSQU1FU0VUOgotICAgIHJldHVybiAmZnJhbWVTZXRfaW5mbzsKLSAgY2FzZSBJ
RF9GUkFNRToKLSAgICByZXR1cm4gJmZyYW1lX2luZm87Ci0gIGNhc2UgSURfSUZSQU1FOgotICAg
IHJldHVybiAmaUZyYW1lX2luZm87Ci0gIGNhc2UgSURfTUFSUVVFRToKLSAgICByZXR1cm4gJm1h
cnF1ZWVfaW5mbzsKLSAgZGVmYXVsdDoKKyAgICAvLyBXZSBhbHJlYWR5IGtub3cgd2UgaGF2ZSBh
biBIVE1MIGVsZW1lbnQsIHNvIHdlIG9ubHkgbmVlZCB0byBjb21wYXJlIHRoZSBsb2NhbE5hbWUg
Y29tcG9uZW50IG9mIHRoZSBxdWFsaWZpZWQgbmFtZS4KKyAgICBzdGF0aWMgUVB0ckRpY3Q8Y29u
c3QgQ2xhc3NJbmZvPiBjbGFzc0luZm9EaWN0OworICAgIGlmIChjbGFzc0luZm9EaWN0LmlzRW1w
dHkoKSkgeworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmEoKS5sb2Nh
bE5hbWVQdHIoKSwgJmFfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxO
YW1lczo6YXBwbGV0KCkubG9jYWxOYW1lUHRyKCksICZhcHBsZXRfaW5mbyk7CisgICAgICAgIGNs
YXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6YXJlYSgpLmxvY2FsTmFtZVB0cigpLCAmYXJl
YV9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpiYXNlKCku
bG9jYWxOYW1lUHRyKCksICZiYXNlX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2Vy
dChIVE1MTmFtZXM6OmJhc2Vmb250KCkubG9jYWxOYW1lUHRyKCksICZiYXNlRm9udF9pbmZvKTsK
KyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpibG9ja3F1b3RlKCkubG9j
YWxOYW1lUHRyKCksICZibG9ja1F1b3RlX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmlu
c2VydChIVE1MTmFtZXM6OmJvZHkoKS5sb2NhbE5hbWVQdHIoKSwgJmJvZHlfaW5mbyk7CisgICAg
ICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6YnIoKS5sb2NhbE5hbWVQdHIoKSwg
JmJyX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmJ1dHRv
bigpLmxvY2FsTmFtZVB0cigpLCAmYnV0dG9uX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0
Lmluc2VydChIVE1MTmFtZXM6OmNhbnZhcygpLmxvY2FsTmFtZVB0cigpLCAmY2FudmFzX2luZm8p
OworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmNhcHRpb24oKS5sb2Nh
bE5hbWVQdHIoKSwgJmNhcHRpb25faW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0
KEhUTUxOYW1lczo6Y29sKCkubG9jYWxOYW1lUHRyKCksICZjb2xfaW5mbyk7CisgICAgICAgIGNs
YXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6Y29sZ3JvdXAoKS5sb2NhbE5hbWVQdHIoKSwg
JmNvbF9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpkZWwo
KS5sb2NhbE5hbWVQdHIoKSwgJm1vZF9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNl
cnQoSFRNTE5hbWVzOjpkaXIoKS5sb2NhbE5hbWVQdHIoKSwgJmRpcl9pbmZvKTsKKyAgICAgICAg
Y2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpkaXYoKS5sb2NhbE5hbWVQdHIoKSwgJmRp
dl9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpkbCgpLmxv
Y2FsTmFtZVB0cigpLCAmZGxfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhU
TUxOYW1lczo6ZmllbGRzZXQoKS5sb2NhbE5hbWVQdHIoKSwgJmZpZWxkU2V0X2luZm8pOworICAg
ICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmZvbnQoKS5sb2NhbE5hbWVQdHIo
KSwgJmZvbnRfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6
Zm9ybSgpLmxvY2FsTmFtZVB0cigpLCAmZm9ybV9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGlj
dC5pbnNlcnQoSFRNTE5hbWVzOjpmcmFtZSgpLmxvY2FsTmFtZVB0cigpLCAmZnJhbWVfaW5mbyk7
CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6ZnJhbWVzZXQoKS5sb2Nh
bE5hbWVQdHIoKSwgJmZyYW1lU2V0X2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2Vy
dChIVE1MTmFtZXM6OmgxKCkubG9jYWxOYW1lUHRyKCksICZoZWFkaW5nX2luZm8pOworICAgICAg
ICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmgyKCkubG9jYWxOYW1lUHRyKCksICZo
ZWFkaW5nX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Omgz
KCkubG9jYWxOYW1lUHRyKCksICZoZWFkaW5nX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0
Lmluc2VydChIVE1MTmFtZXM6Omg0KCkubG9jYWxOYW1lUHRyKCksICZoZWFkaW5nX2luZm8pOwor
ICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Omg1KCkubG9jYWxOYW1lUHRy
KCksICZoZWFkaW5nX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFt
ZXM6Omg2KCkubG9jYWxOYW1lUHRyKCksICZoZWFkaW5nX2luZm8pOworICAgICAgICBjbGFzc0lu
Zm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmhlYWQoKS5sb2NhbE5hbWVQdHIoKSwgJmhlYWRfaW5m
byk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6aHIoKS5sb2NhbE5h
bWVQdHIoKSwgJmhyX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFt
ZXM6Omh0bWwoKS5sb2NhbE5hbWVQdHIoKSwgJmh0bWxfaW5mbyk7CisgICAgICAgIGNsYXNzSW5m
b0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6aWZyYW1lKCkubG9jYWxOYW1lUHRyKCksICZpRnJhbWVf
aW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6aW1nKCkubG9j
YWxOYW1lUHRyKCksICZpbWdfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhU
TUxOYW1lczo6aW5wdXQoKS5sb2NhbE5hbWVQdHIoKSwgJmlucHV0X2luZm8pOworICAgICAgICBj
bGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmlucygpLmxvY2FsTmFtZVB0cigpLCAmbW9k
X2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmlzaW5kZXgo
KS5sb2NhbE5hbWVQdHIoKSwgJmlzSW5kZXhfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3Qu
aW5zZXJ0KEhUTUxOYW1lczo6bGFiZWwoKS5sb2NhbE5hbWVQdHIoKSwgJmxhYmVsX2luZm8pOwor
ICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmxlZ2VuZCgpLmxvY2FsTmFt
ZVB0cigpLCAmbGVnZW5kX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1M
TmFtZXM6OmxpKCkubG9jYWxOYW1lUHRyKCksICZsaV9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZv
RGljdC5pbnNlcnQoSFRNTE5hbWVzOjpsaW5rKCkubG9jYWxOYW1lUHRyKCksICZsaW5rX2luZm8p
OworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Om1hcCgpLmxvY2FsTmFt
ZVB0cigpLCAmbWFwX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFt
ZXM6Om1hcnF1ZWUoKS5sb2NhbE5hbWVQdHIoKSwgJm1hcnF1ZWVfaW5mbyk7CisgICAgICAgIGNs
YXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6bWVudSgpLmxvY2FsTmFtZVB0cigpLCAmbWVu
dV9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjptZXRhKCku
bG9jYWxOYW1lUHRyKCksICZtZXRhX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2Vy
dChIVE1MTmFtZXM6Om9iamVjdCgpLmxvY2FsTmFtZVB0cigpLCAmb2JqZWN0X2luZm8pOworICAg
ICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Om9sKCkubG9jYWxOYW1lUHRyKCks
ICZvbF9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpvcHRp
b24oKS5sb2NhbE5hbWVQdHIoKSwgJm9wdGlvbl9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGlj
dC5pbnNlcnQoSFRNTE5hbWVzOjpvcHRncm91cCgpLmxvY2FsTmFtZVB0cigpLCAmb3B0R3JvdXBf
aW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6cCgpLmxvY2Fs
TmFtZVB0cigpLCAmcF9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5h
bWVzOjpwYXJhbSgpLmxvY2FsTmFtZVB0cigpLCAmcGFyYW1faW5mbyk7CisgICAgICAgIGNsYXNz
SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6cHJlKCkubG9jYWxOYW1lUHRyKCksICZwcmVfaW5m
byk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6cSgpLmxvY2FsTmFt
ZVB0cigpLCAmcV9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVz
OjpzY3JpcHQoKS5sb2NhbE5hbWVQdHIoKSwgJnNjcmlwdF9pbmZvKTsKKyAgICAgICAgY2xhc3NJ
bmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpzZWxlY3QoKS5sb2NhbE5hbWVQdHIoKSwgJnNlbGVj
dF9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpzdHlsZSgp
LmxvY2FsTmFtZVB0cigpLCAmc3R5bGVfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5z
ZXJ0KEhUTUxOYW1lczo6dGFibGUoKS5sb2NhbE5hbWVQdHIoKSwgJnRhYmxlX2luZm8pOworICAg
ICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OnRib2R5KCkubG9jYWxOYW1lUHRy
KCksICZ0YWJsZXNlY3Rpb25faW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhU
TUxOYW1lczo6dGQoKS5sb2NhbE5hbWVQdHIoKSwgJnRhYmxlY2VsbF9pbmZvKTsKKyAgICAgICAg
Y2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjp0ZXh0YXJlYSgpLmxvY2FsTmFtZVB0cigp
LCAmdGV4dEFyZWFfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1l
czo6dGgoKS5sb2NhbE5hbWVQdHIoKSwgJnRhYmxlY2VsbF9pbmZvKTsKKyAgICAgICAgY2xhc3NJ
bmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjp0aGVhZCgpLmxvY2FsTmFtZVB0cigpLCAmdGFibGVz
ZWN0aW9uX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OnRm
b290KCkubG9jYWxOYW1lUHRyKCksICZ0YWJsZXNlY3Rpb25faW5mbyk7CisgICAgICAgIGNsYXNz
SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6dGl0bGUoKS5sb2NhbE5hbWVQdHIoKSwgJnRpdGxl
X2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OnRyKCkubG9j
YWxOYW1lUHRyKCksICZ0cl9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRN
TE5hbWVzOjp1bCgpLmxvY2FsTmFtZVB0cigpLCAmdWxfaW5mbyk7CisgICAgfQorICAgIAorICAg
IEhUTUxFbGVtZW50SW1wbCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCo+
KGltcGwoKSk7CisgICAgY29uc3QgQ2xhc3NJbmZvKiByZXN1bHQgPSBjbGFzc0luZm9EaWN0LmZp
bmQoZWxlbWVudC0+bG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSk7CisgICAgaWYgKHJlc3Vs
dCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICByZXR1cm4gJmluZm87Ci0gIH0KIH0KKwor
Y29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6Omh0bWxfZ2V0c2V0ID0g
eyAmSFRNTEVsZW1lbnQ6Omh0bWxHZXR0ZXIsICZIVE1MRWxlbWVudDo6aHRtbFNldHRlciB9Owor
Y29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmhlYWRfZ2V0c2V0ID0g
eyAmSFRNTEVsZW1lbnQ6OmhlYWRHZXR0ZXIsICZIVE1MRWxlbWVudDo6aGVhZFNldHRlciB9Owor
Y29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmxpbmtfZ2V0c2V0ID0g
eyAmSFRNTEVsZW1lbnQ6OmxpbmtHZXR0ZXIsICZIVE1MRWxlbWVudDo6bGlua1NldHRlciB9Owor
Y29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OnRpdGxlX2dldHNldCA9
IHsgJkhUTUxFbGVtZW50Ojp0aXRsZUdldHRlciwgJkhUTUxFbGVtZW50Ojp0aXRsZVNldHRlciB9
OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6Om1ldGFfZ2V0c2V0
ID0geyAmSFRNTEVsZW1lbnQ6Om1ldGFHZXR0ZXIsICZIVE1MRWxlbWVudDo6bWV0YVNldHRlciB9
OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmJhc2VfZ2V0c2V0
ID0geyAmSFRNTEVsZW1lbnQ6OmJhc2VHZXR0ZXIsICZIVE1MRWxlbWVudDo6YmFzZVNldHRlciB9
OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmlzSW5kZXhfZ2V0
c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmlzSW5kZXhHZXR0ZXIsICZIVE1MRWxlbWVudDo6aXNJbmRl
eFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OnN0
eWxlX2dldHNldCA9IHsgJkhUTUxFbGVtZW50OjpzdHlsZUdldHRlciwgJkhUTUxFbGVtZW50Ojpz
dHlsZVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6
OmJvZHlfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmJvZHlHZXR0ZXIsICZIVE1MRWxlbWVudDo6
Ym9keVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6
OmZvcm1fZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmZvcm1HZXR0ZXIsICZIVE1MRWxlbWVudDo6
Zm9ybVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6
OnNlbGVjdF9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6c2VsZWN0R2V0dGVyLCAmSFRNTEVsZW1l
bnQ6OnNlbGVjdFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVs
ZW1lbnQ6Om9wdEdyb3VwX2dldHNldCA9IHsgJkhUTUxFbGVtZW50OjpvcHRHcm91cEdldHRlciwg
JkhUTUxFbGVtZW50OjpvcHRHcm91cFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNl
dEluZm8gSFRNTEVsZW1lbnQ6Om9wdGlvbl9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6b3B0aW9u
R2V0dGVyLCAmSFRNTEVsZW1lbnQ6Om9wdGlvblNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6
OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmlucHV0X2dldHNldCA9IHsgJkhUTUxFbGVtZW50Ojpp
bnB1dEdldHRlciwgJkhUTUxFbGVtZW50OjppbnB1dFNldHRlciB9OworY29uc3QgSFRNTEVsZW1l
bnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OnRleHRBcmVhX2dldHNldCA9IHsgJkhUTUxFbGVt
ZW50Ojp0ZXh0QXJlYUdldHRlciwgJkhUTUxFbGVtZW50Ojp0ZXh0QXJlYVNldHRlciB9OworY29u
c3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmJ1dHRvbl9nZXRzZXQgPSB7
ICZIVE1MRWxlbWVudDo6YnV0dG9uR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmJ1dHRvblNldHRlciB9
OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmxhYmVsX2dldHNl
dCA9IHsgJkhUTUxFbGVtZW50OjpsYWJlbEdldHRlciwgJkhUTUxFbGVtZW50OjpsYWJlbFNldHRl
ciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmZpZWxkU2V0
X2dldHNldCA9IHsgJkhUTUxFbGVtZW50OjpmaWVsZFNldEdldHRlciwgJkhUTUxFbGVtZW50Ojpm
aWVsZFNldFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1l
bnQ6OmxlZ2VuZF9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6bGVnZW5kR2V0dGVyLCAmSFRNTEVs
ZW1lbnQ6OmxlZ2VuZFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRN
TEVsZW1lbnQ6OnVsX2dldHNldCA9IHsgJkhUTUxFbGVtZW50Ojp1TGlzdEdldHRlciwgJkhUTUxF
bGVtZW50Ojp1TGlzdFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRN
TEVsZW1lbnQ6Om9sX2dldHNldCA9IHsgJkhUTUxFbGVtZW50OjpvTGlzdEdldHRlciwgJkhUTUxF
bGVtZW50OjpvTGlzdFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRN
TEVsZW1lbnQ6OmRsX2dldHNldCA9IHsgJkhUTUxFbGVtZW50OjpkTGlzdEdldHRlciwgJkhUTUxF
bGVtZW50OjpkTGlzdFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRN
TEVsZW1lbnQ6OmRpcl9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6ZGlyR2V0dGVyLCAmSFRNTEVs
ZW1lbnQ6OmRpclNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVs
ZW1lbnQ6Om1lbnVfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6Om1lbnVHZXR0ZXIsICZIVE1MRWxl
bWVudDo6bWVudVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVs
ZW1lbnQ6OmxpX2dldHNldCA9IHsgJkhUTUxFbGVtZW50OjpsaUdldHRlciwgJkhUTUxFbGVtZW50
OjpsaVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6
OmRpdl9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6ZGl2R2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmRp
dlNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OnBf
Z2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OnBhcmFncmFwaEdldHRlciwgJkhUTUxFbGVtZW50Ojpw
YXJhZ3JhcGhTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVt
ZW50OjpoZWFkaW5nX2dldHNldCA9IHsgJkhUTUxFbGVtZW50OjpoZWFkaW5nR2V0dGVyLCAmSFRN
TEVsZW1lbnQ6OmhlYWRpbmdTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZv
IEhUTUxFbGVtZW50OjpibG9ja1F1b3RlX2dldHNldCA9IHsgJkhUTUxFbGVtZW50OjpibG9ja1F1
b3RlR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmJsb2NrUXVvdGVTZXR0ZXIgfTsKK2NvbnN0IEhUTUxF
bGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjpxX2dldHNldCA9IHsgJkhUTUxFbGVtZW50
OjpxdW90ZUdldHRlciwgJkhUTUxFbGVtZW50OjpxdW90ZVNldHRlciB9OworY29uc3QgSFRNTEVs
ZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OnByZV9nZXRzZXQgPSB7ICZIVE1MRWxlbWVu
dDo6cHJlR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OnByZVNldHRlciB9OworY29uc3QgSFRNTEVsZW1l
bnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmJyX2dldHNldCA9IHsgJkhUTUxFbGVtZW50Ojpi
ckdldHRlciwgJkhUTUxFbGVtZW50OjpiclNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6Okdl
dFNldEluZm8gSFRNTEVsZW1lbnQ6OmJhc2VGb250X2dldHNldCA9IHsgJkhUTUxFbGVtZW50Ojpi
YXNlRm9udEdldHRlciwgJkhUTUxFbGVtZW50OjpiYXNlRm9udFNldHRlciB9OworY29uc3QgSFRN
TEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmZvbnRfZ2V0c2V0ID0geyAmSFRNTEVs
ZW1lbnQ6OmZvbnRHZXR0ZXIsICZIVE1MRWxlbWVudDo6Zm9udFNldHRlciB9OworY29uc3QgSFRN
TEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmhyX2dldHNldCA9IHsgJkhUTUxFbGVt
ZW50OjpockdldHRlciwgJkhUTUxFbGVtZW50OjpoclNldHRlciB9OworY29uc3QgSFRNTEVsZW1l
bnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6Om1vZF9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6
bW9kR2V0dGVyLCAmSFRNTEVsZW1lbnQ6Om1vZFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6
OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmFfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmFuY2hv
ckdldHRlciwgJkhUTUxFbGVtZW50OjphbmNob3JTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50
OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjpjYW52YXNfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6
OmltYWdlR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmltYWdlU2V0dGVyIH07Citjb25zdCBIVE1MRWxl
bWVudDo6R2V0U2V0SW5mbyBIVE1MRWxlbWVudDo6aW1nX2dldHNldCA9IHsgJkhUTUxFbGVtZW50
OjppbWFnZUdldHRlciwgJkhUTUxFbGVtZW50OjppbWFnZVNldHRlciB9OworY29uc3QgSFRNTEVs
ZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6Om9iamVjdF9nZXRzZXQgPSB7ICZIVE1MRWxl
bWVudDo6b2JqZWN0R2V0dGVyLCAmSFRNTEVsZW1lbnQ6Om9iamVjdFNldHRlciB9OworY29uc3Qg
SFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OnBhcmFtX2dldHNldCA9IHsgJkhU
TUxFbGVtZW50OjpwYXJhbUdldHRlciwgJkhUTUxFbGVtZW50OjpwYXJhbVNldHRlciB9OworY29u
c3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmFwcGxldF9nZXRzZXQgPSB7
ICZIVE1MRWxlbWVudDo6YXBwbGV0R2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmFwcGxldFNldHRlciB9
OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6Om1hcF9nZXRzZXQg
PSB7ICZIVE1MRWxlbWVudDo6bWFwR2V0dGVyLCAmSFRNTEVsZW1lbnQ6Om1hcFNldHRlciB9Owor
Y29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmFyZWFfZ2V0c2V0ID0g
eyAmSFRNTEVsZW1lbnQ6OmFyZWFHZXR0ZXIsICZIVE1MRWxlbWVudDo6YXJlYVNldHRlciB9Owor
Y29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OnNjcmlwdF9nZXRzZXQg
PSB7ICZIVE1MRWxlbWVudDo6c2NyaXB0R2V0dGVyLCAmSFRNTEVsZW1lbnQ6OnNjcmlwdFNldHRl
ciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OnRhYmxlX2dl
dHNldCA9IHsgJkhUTUxFbGVtZW50Ojp0YWJsZUdldHRlciwgJkhUTUxFbGVtZW50Ojp0YWJsZVNl
dHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmNhcHRp
b25fZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OnRhYmxlQ2FwdGlvbkdldHRlciwgJkhUTUxFbGVt
ZW50Ojp0YWJsZUNhcHRpb25TZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZv
IEhUTUxFbGVtZW50Ojpjb2xfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OnRhYmxlQ29sR2V0dGVy
LCAmSFRNTEVsZW1lbnQ6OnRhYmxlQ29sU2V0dGVyIH07Citjb25zdCBIVE1MRWxlbWVudDo6R2V0
U2V0SW5mbyBIVE1MRWxlbWVudDo6dGFibGVzZWN0aW9uX2dldHNldCA9IHsgJkhUTUxFbGVtZW50
Ojp0YWJsZVNlY3Rpb25HZXR0ZXIsICZIVE1MRWxlbWVudDo6dGFibGVTZWN0aW9uU2V0dGVyIH07
Citjb25zdCBIVE1MRWxlbWVudDo6R2V0U2V0SW5mbyBIVE1MRWxlbWVudDo6dHJfZ2V0c2V0ID0g
eyAmSFRNTEVsZW1lbnQ6OnRhYmxlUm93R2V0dGVyLCAmSFRNTEVsZW1lbnQ6OnRhYmxlUm93U2V0
dGVyIH07Citjb25zdCBIVE1MRWxlbWVudDo6R2V0U2V0SW5mbyBIVE1MRWxlbWVudDo6dGFibGVj
ZWxsX2dldHNldCA9IHsgJkhUTUxFbGVtZW50Ojp0YWJsZUNlbGxHZXR0ZXIsICZIVE1MRWxlbWVu
dDo6dGFibGVDZWxsU2V0dGVyIH07Citjb25zdCBIVE1MRWxlbWVudDo6R2V0U2V0SW5mbyBIVE1M
RWxlbWVudDo6ZnJhbWVTZXRfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmZyYW1lU2V0R2V0dGVy
LCAmSFRNTEVsZW1lbnQ6OmZyYW1lU2V0U2V0dGVyIH07Citjb25zdCBIVE1MRWxlbWVudDo6R2V0
U2V0SW5mbyBIVE1MRWxlbWVudDo6ZnJhbWVfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmZyYW1l
R2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmZyYW1lU2V0dGVyIH07Citjb25zdCBIVE1MRWxlbWVudDo6
R2V0U2V0SW5mbyBIVE1MRWxlbWVudDo6aUZyYW1lX2dldHNldCA9IHsgJkhUTUxFbGVtZW50Ojpp
RnJhbWVHZXR0ZXIsICZIVE1MRWxlbWVudDo6aUZyYW1lU2V0dGVyIH07Citjb25zdCBIVE1MRWxl
bWVudDo6R2V0U2V0SW5mbyBIVE1MRWxlbWVudDo6bWFycXVlZV9nZXRzZXQgPSB7ICZIVE1MRWxl
bWVudDo6bWFycXVlZUdldHRlciwgJkhUTUxFbGVtZW50OjptYXJxdWVlU2V0dGVyIH07CisKK2Nv
bnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvKiBIVE1MRWxlbWVudDo6Z2V0U2V0SW5mbygpIGNv
bnN0Cit7CisgICAgLy8gV2UgYWxyZWFkeSBrbm93IHdlIGhhdmUgYW4gSFRNTCBlbGVtZW50LCBz
byB3ZSBvbmx5IG5lZWQgdG8gY29tcGFyZSB0aGUgbG9jYWxOYW1lIGNvbXBvbmVudCBvZiB0aGUg
cXVhbGlmaWVkIG5hbWUuCisgICAgc3RhdGljIFFQdHJEaWN0PGNvbnN0IEhUTUxFbGVtZW50OjpH
ZXRTZXRJbmZvPiBnZXRTZXRJbmZvRGljdDsKKyAgICBpZiAoZ2V0U2V0SW5mb0RpY3QuaXNFbXB0
eSgpKSB7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmEoKS5sb2Nh
bE5hbWVQdHIoKSwgJmFfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhU
TUxOYW1lczo6YXBwbGV0KCkubG9jYWxOYW1lUHRyKCksICZhcHBsZXRfZ2V0c2V0KTsKKyAgICAg
ICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6YXJlYSgpLmxvY2FsTmFtZVB0cigp
LCAmYXJlYV9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVz
OjpiYXNlKCkubG9jYWxOYW1lUHRyKCksICZiYXNlX2dldHNldCk7CisgICAgICAgIGdldFNldElu
Zm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmJhc2Vmb250KCkubG9jYWxOYW1lUHRyKCksICZiYXNl
Rm9udF9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpi
bG9ja3F1b3RlKCkubG9jYWxOYW1lUHRyKCksICZibG9ja1F1b3RlX2dldHNldCk7IAorICAgICAg
ICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpib2R5KCkubG9jYWxOYW1lUHRyKCks
ICZib2R5X2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6
OmJyKCkubG9jYWxOYW1lUHRyKCksICZicl9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGlj
dC5pbnNlcnQoSFRNTE5hbWVzOjpidXR0b24oKS5sb2NhbE5hbWVQdHIoKSwgJmJ1dHRvbl9nZXRz
ZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpjYW52YXMoKS5s
b2NhbE5hbWVQdHIoKSwgJmNhbnZhc19nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5p
bnNlcnQoSFRNTE5hbWVzOjpjYXB0aW9uKCkubG9jYWxOYW1lUHRyKCksICZjYXB0aW9uX2dldHNl
dCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmNvbCgpLmxvY2Fs
TmFtZVB0cigpLCAmY29sX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChI
VE1MTmFtZXM6OmNvbGdyb3VwKCkubG9jYWxOYW1lUHRyKCksICZjb2xfZ2V0c2V0KTsKKyAgICAg
ICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6ZGVsKCkubG9jYWxOYW1lUHRyKCks
ICZtb2RfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6
ZGlyKCkubG9jYWxOYW1lUHRyKCksICZkaXJfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0Rp
Y3QuaW5zZXJ0KEhUTUxOYW1lczo6ZGl2KCkubG9jYWxOYW1lUHRyKCksICZkaXZfZ2V0c2V0KTsK
KyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6ZGwoKS5sb2NhbE5hbWVQ
dHIoKSwgJmRsX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFt
ZXM6OmZpZWxkc2V0KCkubG9jYWxOYW1lUHRyKCksICZmaWVsZFNldF9nZXRzZXQpOworICAgICAg
ICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpmb250KCkubG9jYWxOYW1lUHRyKCks
ICZmb250X2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6
OmZvcm0oKS5sb2NhbE5hbWVQdHIoKSwgJmZvcm1fZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5m
b0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6ZnJhbWUoKS5sb2NhbE5hbWVQdHIoKSwgJmZyYW1lX2dl
dHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmZyYW1lc2V0
KCkubG9jYWxOYW1lUHRyKCksICZmcmFtZVNldF9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZv
RGljdC5pbnNlcnQoSFRNTE5hbWVzOjpoMSgpLmxvY2FsTmFtZVB0cigpLCAmaGVhZGluZ19nZXRz
ZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpoMigpLmxvY2Fs
TmFtZVB0cigpLCAmaGVhZGluZ19nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNl
cnQoSFRNTE5hbWVzOjpoMygpLmxvY2FsTmFtZVB0cigpLCAmaGVhZGluZ19nZXRzZXQpOworICAg
ICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpoNCgpLmxvY2FsTmFtZVB0cigp
LCAmaGVhZGluZ19nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5h
bWVzOjpoNSgpLmxvY2FsTmFtZVB0cigpLCAmaGVhZGluZ19nZXRzZXQpOworICAgICAgICBnZXRT
ZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpoNigpLmxvY2FsTmFtZVB0cigpLCAmaGVhZGlu
Z19nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpoZWFk
KCkubG9jYWxOYW1lUHRyKCksICZoZWFkX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0
Lmluc2VydChIVE1MTmFtZXM6OmhyKCkubG9jYWxOYW1lUHRyKCksICZocl9nZXRzZXQpOyAKKyAg
ICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6aHRtbCgpLmxvY2FsTmFtZVB0
cigpLCAmaHRtbF9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5h
bWVzOjppZnJhbWUoKS5sb2NhbE5hbWVQdHIoKSwgJmlGcmFtZV9nZXRzZXQpOworICAgICAgICBn
ZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjppbWcoKS5sb2NhbE5hbWVQdHIoKSwgJmlt
Z19nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjppbnB1
dCgpLmxvY2FsTmFtZVB0cigpLCAmaW5wdXRfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0Rp
Y3QuaW5zZXJ0KEhUTUxOYW1lczo6aW5zKCkubG9jYWxOYW1lUHRyKCksICZtb2RfZ2V0c2V0KTsK
KyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6aXNpbmRleCgpLmxvY2Fs
TmFtZVB0cigpLCAmaXNJbmRleF9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNl
cnQoSFRNTE5hbWVzOjpsYWJlbCgpLmxvY2FsTmFtZVB0cigpLCAmbGFiZWxfZ2V0c2V0KTsKKyAg
ICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6bGVnZW5kKCkubG9jYWxOYW1l
UHRyKCksICZsZWdlbmRfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhU
TUxOYW1lczo6bGkoKS5sb2NhbE5hbWVQdHIoKSwgJmxpX2dldHNldCk7CisgICAgICAgIGdldFNl
dEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmxpbmsoKS5sb2NhbE5hbWVQdHIoKSwgJmxpbmtf
Z2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6bWFwKCku
bG9jYWxOYW1lUHRyKCksICZtYXBfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5z
ZXJ0KEhUTUxOYW1lczo6bWFycXVlZSgpLmxvY2FsTmFtZVB0cigpLCAmbWFycXVlZV9nZXRzZXQp
OworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjptZW51KCkubG9jYWxO
YW1lUHRyKCksICZtZW51X2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChI
VE1MTmFtZXM6Om1ldGEoKS5sb2NhbE5hbWVQdHIoKSwgJm1ldGFfZ2V0c2V0KTsKKyAgICAgICAg
Z2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6b2JqZWN0KCkubG9jYWxOYW1lUHRyKCks
ICZvYmplY3RfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1l
czo6b2woKS5sb2NhbE5hbWVQdHIoKSwgJm9sX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9E
aWN0Lmluc2VydChIVE1MTmFtZXM6Om9wdGlvbigpLmxvY2FsTmFtZVB0cigpLCAmb3B0aW9uX2dl
dHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Om9wdGdyb3Vw
KCkubG9jYWxOYW1lUHRyKCksICZvcHRHcm91cF9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZv
RGljdC5pbnNlcnQoSFRNTE5hbWVzOjpwKCkubG9jYWxOYW1lUHRyKCksICZwX2dldHNldCk7Cisg
ICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OnBhcmFtKCkubG9jYWxOYW1l
UHRyKCksICZwYXJhbV9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRN
TE5hbWVzOjpwcmUoKS5sb2NhbE5hbWVQdHIoKSwgJnByZV9nZXRzZXQpOworICAgICAgICBnZXRT
ZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpxKCkubG9jYWxOYW1lUHRyKCksICZxX2dldHNl
dCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OnNjcmlwdCgpLmxv
Y2FsTmFtZVB0cigpLCAmc2NyaXB0X2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmlu
c2VydChIVE1MTmFtZXM6OnNlbGVjdCgpLmxvY2FsTmFtZVB0cigpLCAmc2VsZWN0X2dldHNldCk7
CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OnN0eWxlKCkubG9jYWxO
YW1lUHRyKCksICZzdHlsZV9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQo
SFRNTE5hbWVzOjp0YWJsZSgpLmxvY2FsTmFtZVB0cigpLCAmdGFibGVfZ2V0c2V0KTsKKyAgICAg
ICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6dGJvZHkoKS5sb2NhbE5hbWVQdHIo
KSwgJnRhYmxlc2VjdGlvbl9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQo
SFRNTE5hbWVzOjp0ZCgpLmxvY2FsTmFtZVB0cigpLCAmdGFibGVjZWxsX2dldHNldCk7CisgICAg
ICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OnRleHRhcmVhKCkubG9jYWxOYW1l
UHRyKCksICZ0ZXh0QXJlYV9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQo
SFRNTE5hbWVzOjp0aCgpLmxvY2FsTmFtZVB0cigpLCAmdGFibGVjZWxsX2dldHNldCk7CisgICAg
ICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OnRoZWFkKCkubG9jYWxOYW1lUHRy
KCksICZ0YWJsZXNlY3Rpb25fZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0
KEhUTUxOYW1lczo6dGZvb3QoKS5sb2NhbE5hbWVQdHIoKSwgJnRhYmxlc2VjdGlvbl9nZXRzZXQp
OworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjp0aXRsZSgpLmxvY2Fs
TmFtZVB0cigpLCAmdGl0bGVfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0
KEhUTUxOYW1lczo6dHIoKS5sb2NhbE5hbWVQdHIoKSwgJnRyX2dldHNldCk7CisgICAgICAgIGdl
dFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OnVsKCkubG9jYWxOYW1lUHRyKCksICZ1bF9n
ZXRzZXQpOworICAgIH0KKyAgICAKKyAgICBIVE1MRWxlbWVudEltcGwqIGVsZW1lbnQgPSBzdGF0
aWNfY2FzdDxIVE1MRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIGNvbnN0IEhUTUxFbGVtZW50
OjpHZXRTZXRJbmZvKiByZXN1bHQgPSBnZXRTZXRJbmZvRGljdC5maW5kKGVsZW1lbnQtPmxvY2Fs
TmFtZSgpLmltcGxlbWVudGF0aW9uKCkpOworICAgIGlmIChyZXN1bHQpCisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgcmV0dXJuIDA7Cit9CisKIC8qCiBAYmVnaW4gSFRNTEVsZW1lbnRUYWJs
ZSAxNAogICBpZAkJS0pTOjpIVE1MRWxlbWVudDo6RWxlbWVudElkCURvbnREZWxldGUKQEAgLTEx
ODgsMzUgKzEyNzIsMzIgQEAgSFRNTEVsZW1lbnQ6OkhUTUxFbGVtZW50KEV4ZWNTdGF0ZSAqZXhl
YwogCiBWYWx1ZSBLSlM6OkhUTUxFbGVtZW50Ojp0cnlHZXQoRXhlY1N0YXRlICpleGVjLCBjb25z
dCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUpIGNvbnN0CiB7Ci0gIEhUTUxFbGVtZW50SW1wbCAm
ZWxlbWVudCA9ICpzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwgKj4oaW1wbCgpKTsKKyAgICBI
VE1MRWxlbWVudEltcGwgJmVsZW1lbnQgPSAqc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+
KGltcGwoKSk7CiAjaWZkZWYgS0pTX1ZFUkJPU0UKLSAga2REZWJ1Zyg2MDcwKSA8PCAiS0pTOjpI
VE1MRWxlbWVudDo6dHJ5R2V0ICIgPDwgcHJvcGVydHlOYW1lLnFzdHJpbmcoKSA8PCAiIHRoaXNU
YWc9IiA8PCBlbGVtZW50LnRhZ05hbWUoKS5zdHJpbmcoKSA8PCBlbmRsOworICAgIGtkRGVidWco
NjA3MCkgPDwgIktKUzo6SFRNTEVsZW1lbnQ6OnRyeUdldCAiIDw8IHByb3BlcnR5TmFtZS5xc3Ry
aW5nKCkgPDwgIiB0aGlzVGFnPSIgPDwgZWxlbWVudC50YWdOYW1lKCkuc3RyaW5nKCkgPDwgZW5k
bDsKICNlbmRpZgotICAvLyBGaXJzdCBsb29rIGF0IGR5bmFtaWMgcHJvcGVydGllcwotICBzd2l0
Y2ggKGVsZW1lbnQuaWQoKSkgewotICAgIGNhc2UgSURfRk9STTogewotICAgICAgSFRNTEZvcm1F
bGVtZW50SW1wbCAmZm9ybSA9IHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudEltcGwgJj4oZWxl
bWVudCk7Ci0gICAgICAvLyBDaGVjayBpZiB3ZSdyZSByZXRyaWV2aW5nIGFuIGVsZW1lbnQgKGJ5
IGluZGV4IG9yIGJ5IG5hbWUpCi0gICAgICBib29sIG9rOwotICAgICAgdWludCB1ID0gcHJvcGVy
dHlOYW1lLnRvVUxvbmcoJm9rKTsKLSAgICAgIGlmIChvaykKLSAgICAgICAgcmV0dXJuIGdldERP
TU5vZGUoZXhlYywgZm9ybS5lbGVtZW50cygpLT5pdGVtKHUpKTsKLSAgICAgIFZhbHVlSW1wICpu
YW1lZEl0ZW1zID0gSFRNTENvbGxlY3Rpb24oZXhlYywgZm9ybS5lbGVtZW50cygpLmdldCgpKS5n
ZXROYW1lZEl0ZW1zKGV4ZWMsIHByb3BlcnR5TmFtZSk7Ci0gICAgICBpZiAoIW5hbWVkSXRlbXMt
PmlzVW5kZWZpbmVkKCkpCi0gICAgICAgIHJldHVybiBuYW1lZEl0ZW1zOwotICAgIH0KLSAgICAg
IGJyZWFrOwotICAgIGNhc2UgSURfU0VMRUNUOiB7Ci0gICAgICBIVE1MU2VsZWN0RWxlbWVudElt
cGwgJnNlbGVjdCA9IHN0YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50SW1wbCAmPihlbGVtZW50
KTsKLSAgICAgIGJvb2wgb2s7Ci0gICAgICB1aW50IHUgPSBwcm9wZXJ0eU5hbWUudG9VTG9uZygm
b2spOwotICAgICAgaWYgKG9rKQotICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLCBzZWxl
Y3Qub3B0aW9uc0hUTUxDb2xsZWN0aW9uKCktPml0ZW0odSkpOyAvLyBub3Qgc3BlY2lmaWVkIGJ5
IERPTSg/KSBidXQgc3VwcG9ydGVkIGluIG5ldHNjYXBlL0lFCisgICAgLy8gRmlyc3QgbG9vayBh
dCBkeW5hbWljIHByb3BlcnRpZXMKKyAgICBpZiAoZWxlbWVudC5oYXNMb2NhbE5hbWUoSFRNTE5h
bWVzOjpmb3JtKCkpKSB7CisgICAgICAgIEhUTUxGb3JtRWxlbWVudEltcGwgJmZvcm0gPSBzdGF0
aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgICAgICAvLyBDaGVj
ayBpZiB3ZSdyZSByZXRyaWV2aW5nIGFuIGVsZW1lbnQgKGJ5IGluZGV4IG9yIGJ5IG5hbWUpCisg
ICAgICAgIGJvb2wgb2s7CisgICAgICAgIHVpbnQgdSA9IHByb3BlcnR5TmFtZS50b1VMb25nKCZv
ayk7CisgICAgICAgIGlmIChvaykKKyAgICAgICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMs
IGZvcm0uZWxlbWVudHMoKS0+aXRlbSh1KSk7CisgICAgICAgIFZhbHVlSW1wICpuYW1lZEl0ZW1z
ID0gSFRNTENvbGxlY3Rpb24oZXhlYywgZm9ybS5lbGVtZW50cygpLmdldCgpKS5nZXROYW1lZEl0
ZW1zKGV4ZWMsIHByb3BlcnR5TmFtZSk7CisgICAgICAgIGlmICghbmFtZWRJdGVtcy0+aXNVbmRl
ZmluZWQoKSkKKyAgICAgICAgICAgIHJldHVybiBuYW1lZEl0ZW1zOworICAgIH0KKyAgICBlbHNl
IGlmIChlbGVtZW50Lmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnNlbGVjdCgpKSkgeworICAgICAg
ICBIVE1MU2VsZWN0RWxlbWVudEltcGwgJnNlbGVjdCA9IHN0YXRpY19jYXN0PEhUTUxTZWxlY3RF
bGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICAgICAgYm9vbCBvazsKKyAgICAgICAgdWludCB1
ID0gcHJvcGVydHlOYW1lLnRvVUxvbmcoJm9rKTsKKyAgICAgICAgaWYgKG9rKQorICAgICAgICAg
ICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYywgc2VsZWN0Lm9wdGlvbnNIVE1MQ29sbGVjdGlvbigp
LT5pdGVtKHUpKTsgLy8gbm90IHNwZWNpZmllZCBieSBET00oPykgYnV0IHN1cHBvcnRlZCBpbiBu
ZXRzY2FwZS9JRQogICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgSURfRlJBTUVTRVQ6IHsK
KyAgICBlbHNlIGlmIChlbGVtZW50Lmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmZyYW1lc2V0KCkp
KSB7CiAgICAgICAgIE5vZGVJbXBsICpmcmFtZSA9IGVsZW1lbnQuY2hpbGRyZW4oKS0+bmFtZWRJ
dGVtKHByb3BlcnR5TmFtZS5zdHJpbmcoKSk7Ci0gICAgICAgIGlmIChmcmFtZSAmJiBmcmFtZS0+
aWQoKSA9PSBJRF9GUkFNRSkgeworICAgICAgICBpZiAoZnJhbWUgJiYgZnJhbWUtPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjpmcmFtZSgpKSkgewogICAgICAgICAgICAgRG9jdW1lbnRJbXBsKiBkb2Mg
PSBzdGF0aWNfY2FzdDxIVE1MRnJhbWVFbGVtZW50SW1wbCAqPihmcmFtZSktPmNvbnRlbnREb2N1
bWVudCgpOwogICAgICAgICAgICAgaWYgKGRvYykgewogICAgICAgICAgICAgICAgIEtIVE1MUGFy
dCogcGFydCA9IGRvYy0+cGFydCgpOwpAQCAtMTIyOSw3MyArMTMxMCw1NyBAQCBWYWx1ZSBLSlM6
OkhUTUxFbGVtZW50Ojp0cnlHZXQoRXhlY1N0YXRlCiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
ICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSURfRlJBTUU6Ci0gICAgY2FzZSBJRF9J
RlJBTUU6IHsKKyAgICBlbHNlIGlmIChlbGVtZW50Lmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmZy
YW1lKCkpIHx8IGVsZW1lbnQuaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6aWZyYW1lKCkpKSB7CiAg
ICAgICAgIERvY3VtZW50SW1wbCogZG9jID0gc3RhdGljX2Nhc3Q8SFRNTEZyYW1lRWxlbWVudElt
cGwgJj4oZWxlbWVudCkuY29udGVudERvY3VtZW50KCk7Ci0gICAgICAgIGlmICggZG9jICkgewor
ICAgICAgICBpZiAoZG9jKSB7CiAgICAgICAgICAgICBLSFRNTFBhcnQqIHBhcnQgPSBkb2MtPnBh
cnQoKTsKLSAgICAgICAgICAgIGlmICggcGFydCApIHsKKyAgICAgICAgICAgIGlmIChwYXJ0KSB7
CiAgICAgICAgICAgICAgIFdpbmRvdyAqd2luZG93ID0gV2luZG93OjpyZXRyaWV2ZVdpbmRvdyhw
YXJ0KTsKIAkgICAgICBpZiAod2luZG93ICYmIHdpbmRvdy0+aGFzUHJvcGVydHkoZXhlYywgcHJv
cGVydHlOYW1lKSkKICAgICAgICAgICAgICAgICByZXR1cm4gd2luZG93LT5nZXQoZXhlYywgcHJv
cGVydHlOYW1lKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICAgIGJyZWFr
OwogI2lmIEFQUExFX0NIQU5HRVMKLSAgICBjYXNlIElEX0VNQkVEOgotICAgIGNhc2UgSURfT0JK
RUNUOgotICAgIGNhc2UgSURfQVBQTEVUOiB7Ci0JaWYgKHByb3BlcnR5TmFtZSA9PSAiX19hcHBs
ZV9ydW50aW1lX29iamVjdCIpIHsKKyAgICBlbHNlIGlmIChlbGVtZW50Lmhhc0xvY2FsTmFtZShI
VE1MTmFtZXM6OmVtYmVkKCkpIHx8IGVsZW1lbnQuaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b2Jq
ZWN0KCkpIHx8CisgICAgICAgICAgICAgZWxlbWVudC5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjph
cHBsZXQoKSkpIHsKKwlpZiAocHJvcGVydHlOYW1lID09ICJfX2FwcGxlX3J1bnRpbWVfb2JqZWN0
IikKIAkgICAgcmV0dXJuIGdldFJ1bnRpbWVPYmplY3QoZXhlYywmZWxlbWVudCk7Ci0JfQotCiAJ
VmFsdWUgcnVudGltZU9iamVjdCA9IGdldFJ1bnRpbWVPYmplY3QoZXhlYywmZWxlbWVudCk7CiAJ
aWYgKCFydW50aW1lT2JqZWN0LmlzTnVsbCgpKSB7CiAJICAgIE9iamVjdEltcCAqaW1wID0gc3Rh
dGljX2Nhc3Q8T2JqZWN0SW1wICo+KHJ1bnRpbWVPYmplY3QuaW1wKCkpOwotCSAgICBpZiAoaW1w
LT5oYXNQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUpKSB7CisJICAgIGlmIChpbXAtPmhhc1By
b3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFtZSkpCiAJCXJldHVybiBpbXAtPmdldCAoZXhlYywgcHJv
cGVydHlOYW1lKTsKLQkgICAgfQogCX0KICAgICB9Ci0gICAgICBicmVhazsKICNlbmRpZgotICAg
IGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KIAotICBjb25zdCBIYXNoVGFibGUqIHRh
YmxlID0gY2xhc3NJbmZvKCktPnByb3BIYXNoVGFibGU7IC8vIGdldCB0aGUgcmlnaHQgaGFzaHRh
YmxlCi0gIGNvbnN0IEhhc2hFbnRyeSogZW50cnkgPSBMb29rdXA6OmZpbmRFbnRyeSh0YWJsZSwg
cHJvcGVydHlOYW1lKTsKLSAgaWYgKGVudHJ5KSB7Ci0gICAgaWYgKGVudHJ5LT5hdHRyICYgRnVu
Y3Rpb24pCi0gICAgICByZXR1cm4gbG9va3VwT3JDcmVhdGVGdW5jdGlvbjxLSlM6OkhUTUxFbGVt
ZW50RnVuY3Rpb24+KGV4ZWMsIHByb3BlcnR5TmFtZSwgdGhpcywgZW50cnktPnZhbHVlLCBlbnRy
eS0+cGFyYW1zLCBlbnRyeS0+YXR0cik7Ci0gICAgcmV0dXJuIGdldFZhbHVlUHJvcGVydHkoZXhl
YywgZW50cnktPnZhbHVlKTsKLSAgfQorICAgIGNvbnN0IEhhc2hUYWJsZSogdGFibGUgPSBjbGFz
c0luZm8oKS0+cHJvcEhhc2hUYWJsZTsgLy8gZ2V0IHRoZSByaWdodCBoYXNodGFibGUKKyAgICBj
b25zdCBIYXNoRW50cnkqIGVudHJ5ID0gTG9va3VwOjpmaW5kRW50cnkodGFibGUsIHByb3BlcnR5
TmFtZSk7CisgICAgaWYgKGVudHJ5KSB7CisgICAgICAgIGlmIChlbnRyeS0+YXR0ciAmIEZ1bmN0
aW9uKQorICAgICAgICAgICAgcmV0dXJuIGxvb2t1cE9yQ3JlYXRlRnVuY3Rpb248S0pTOjpIVE1M
RWxlbWVudEZ1bmN0aW9uPihleGVjLCBwcm9wZXJ0eU5hbWUsIHRoaXMsIGVudHJ5LT52YWx1ZSwg
ZW50cnktPnBhcmFtcywgZW50cnktPmF0dHIpOworICAgICAgICByZXR1cm4gZ2V0VmFsdWVQcm9w
ZXJ0eShleGVjLCBlbnRyeS0+dmFsdWUpOworICAgIH0KIAotICAvLyBCYXNlIEhUTUxFbGVtZW50
IHN0dWZmIG9yIHBhcmVudCBjbGFzcyBmb3J3YXJkLCBhcyB1c3VhbAotICByZXR1cm4gRE9NT2Jq
ZWN0TG9va3VwR2V0PEtKUzo6SFRNTEVsZW1lbnRGdW5jdGlvbiwgS0pTOjpIVE1MRWxlbWVudCwg
RE9NRWxlbWVudD4oZXhlYywgcHJvcGVydHlOYW1lLCAmSFRNTEVsZW1lbnRUYWJsZSwgdGhpcyk7
CisgICAgLy8gQmFzZSBIVE1MRWxlbWVudCBzdHVmZiBvciBwYXJlbnQgY2xhc3MgZm9yd2FyZCwg
YXMgdXN1YWwKKyAgICByZXR1cm4gRE9NT2JqZWN0TG9va3VwR2V0PEtKUzo6SFRNTEVsZW1lbnRG
dW5jdGlvbiwgS0pTOjpIVE1MRWxlbWVudCwgRE9NRWxlbWVudD4oZXhlYywgcHJvcGVydHlOYW1l
LCAmSFRNTEVsZW1lbnRUYWJsZSwgdGhpcyk7CiB9CiAKIGJvb2wgS0pTOjpIVE1MRWxlbWVudDo6
aW1wbGVtZW50c0NhbGwoKSBjb25zdAogewogICAgIEhUTUxFbGVtZW50SW1wbCAqZWxlbWVudCA9
IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCAqPihpbXBsKCkpOwotICAgIHN3aXRjaCAoZWxl
bWVudC0+aWQoKSkgewotCWNhc2UgSURfRU1CRUQ6Ci0JY2FzZSBJRF9PQkpFQ1Q6Ci0JY2FzZSBJ
RF9BUFBMRVQ6IHsKLQkJRG9jdW1lbnRJbXBsKiBkb2MgPSBlbGVtZW50LT5nZXREb2N1bWVudCgp
OwotCQlLSlNQcm94eSAqcHJveHkgPSBLSlNQcm94eTo6cHJveHkoZG9jLT5wYXJ0KCkpOwotCQlF
eGVjU3RhdGUgKmV4ZWMgPSBwcm94eS0+aW50ZXJwcmV0ZXIoKS0+Z2xvYmFsRXhlYygpOwotCQlW
YWx1ZSBydW50aW1lT2JqZWN0ID0gZ2V0UnVudGltZU9iamVjdChleGVjLGVsZW1lbnQpOwotCQlp
ZiAoIXJ1bnRpbWVPYmplY3QuaXNOdWxsKCkpIHsKLQkJICAgIE9iamVjdEltcCAqaW1wID0gc3Rh
dGljX2Nhc3Q8T2JqZWN0SW1wICo+KHJ1bnRpbWVPYmplY3QuaW1wKCkpOwotCQkgICAgcmV0dXJu
IGltcC0+aW1wbGVtZW50c0NhbGwgKCk7Ci0JCX0KLQkgICAgfQotCSAgICBicmVhazsKLQlkZWZh
dWx0OgotCSAgICBicmVhazsKKyAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
OmVtYmVkKCkpIHx8CisgICAgICAgIGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvYmpl
Y3QoKSkgfHwKKyAgICAgICAgZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmFwcGxldCgp
KSkgeworICAgCURvY3VtZW50SW1wbCogZG9jID0gZWxlbWVudC0+Z2V0RG9jdW1lbnQoKTsKKyAg
ICAgICAgS0pTUHJveHkgKnByb3h5ID0gS0pTUHJveHk6OnByb3h5KGRvYy0+cGFydCgpKTsKKyAg
ICAgICAgRXhlY1N0YXRlICpleGVjID0gcHJveHktPmludGVycHJldGVyKCktPmdsb2JhbEV4ZWMo
KTsKKyAgICAgICAgVmFsdWUgcnVudGltZU9iamVjdCA9IGdldFJ1bnRpbWVPYmplY3QoZXhlYyxl
bGVtZW50KTsKKyAgICAgICAgaWYgKCFydW50aW1lT2JqZWN0LmlzTnVsbCgpKSB7CisgICAgICAg
ICAgICBPYmplY3RJbXAgKmltcCA9IHN0YXRpY19jYXN0PE9iamVjdEltcCAqPihydW50aW1lT2Jq
ZWN0LmltcCgpKTsKKyAgICAgICAgICAgIHJldHVybiBpbXAtPmltcGxlbWVudHNDYWxsICgpOwor
ICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTEzMDMsNzg2ICsxMzY4
LDg3NyBAQCBib29sIEtKUzo6SFRNTEVsZW1lbnQ6OmltcGxlbWVudHNDYWxsKCkgCiBWYWx1ZSBL
SlM6OkhUTUxFbGVtZW50OjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBj
b25zdCBMaXN0JmFyZ3MpCiB7CiAgICAgSFRNTEVsZW1lbnRJbXBsICplbGVtZW50ID0gc3RhdGlj
X2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KGltcGwoKSk7Ci0gICAgc3dpdGNoIChlbGVtZW50LT5p
ZCgpKSB7Ci0JY2FzZSBJRF9FTUJFRDoKLQljYXNlIElEX09CSkVDVDoKLQljYXNlIElEX0FQUExF
VDogewotCQlWYWx1ZSBydW50aW1lT2JqZWN0ID0gZ2V0UnVudGltZU9iamVjdChleGVjLGVsZW1l
bnQpOwotCQlpZiAoIXJ1bnRpbWVPYmplY3QuaXNOdWxsKCkpIHsKLQkJICAgIE9iamVjdEltcCAq
aW1wID0gc3RhdGljX2Nhc3Q8T2JqZWN0SW1wICo+KHJ1bnRpbWVPYmplY3QuaW1wKCkpOwotCQkg
ICAgcmV0dXJuIGltcC0+Y2FsbCAoZXhlYywgdGhpc09iaiwgYXJncyk7Ci0JCX0KLQkgICAgfQot
CSAgICBicmVhazsKLQlkZWZhdWx0OgotCSAgICBicmVhazsKKyAgICBpZiAoZWxlbWVudC0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OmVtYmVkKCkpIHx8CisgICAgICAgIGVsZW1lbnQtPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjpvYmplY3QoKSkgfHwKKyAgICAgICAgZWxlbWVudC0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OmFwcGxldCgpKSkgeworICAgICAgICBWYWx1ZSBydW50aW1lT2JqZWN0ID0gZ2V0
UnVudGltZU9iamVjdChleGVjLGVsZW1lbnQpOworICAgICAgICBpZiAoIXJ1bnRpbWVPYmplY3Qu
aXNOdWxsKCkpIHsKKyAgICAgICAgICAgIE9iamVjdEltcCAqaW1wID0gc3RhdGljX2Nhc3Q8T2Jq
ZWN0SW1wICo+KHJ1bnRpbWVPYmplY3QuaW1wKCkpOworICAgICAgICAgICAgcmV0dXJuIGltcC0+
Y2FsbCAoZXhlYywgdGhpc09iaiwgYXJncyk7CisgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJu
IFVuZGVmaW5lZCgpOwogfQogCi1WYWx1ZSBLSlM6OkhUTUxFbGVtZW50OjpnZXRWYWx1ZVByb3Bl
cnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25zdAotewotICBIVE1MRWxlbWVudElt
cGwgJmVsZW1lbnQgPSAqc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KGltcGwoKSk7Ci0g
IHN3aXRjaCAoZWxlbWVudC5pZCgpKSB7Ci0gIGNhc2UgSURfSFRNTDogewotICAgIEhUTUxIdG1s
RWxlbWVudEltcGwgJmh0bWwgPSBzdGF0aWNfY2FzdDxIVE1MSHRtbEVsZW1lbnRJbXBsICY+KGVs
ZW1lbnQpOwotICAgIGlmICAgICAgKHRva2VuID09IEh0bWxWZXJzaW9uKSAgICAgICAgIHJldHVy
biBTdHJpbmcoaHRtbC52ZXJzaW9uKCkpOwotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX0hFQUQ6
IHsKLSAgICBIVE1MSGVhZEVsZW1lbnRJbXBsICZoZWFkID0gc3RhdGljX2Nhc3Q8SFRNTEhlYWRF
bGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICBpZiAgICAgICh0b2tlbiA9PSBIZWFkUHJvZmls
ZSkgICAgICAgICByZXR1cm4gU3RyaW5nKGhlYWQucHJvZmlsZSgpKTsKLSAgfQotICBicmVhazsK
LSAgY2FzZSBJRF9MSU5LOiB7Ci0gICAgSFRNTExpbmtFbGVtZW50SW1wbCAmbGluayA9IHN0YXRp
Y19jYXN0PEhUTUxMaW5rRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tl
bikgewotICAgIGNhc2UgTGlua0Rpc2FibGVkOiAgICAgICAgcmV0dXJuIEJvb2xlYW4obGluay5k
aXNhYmxlZCgpKTsKLSAgICBjYXNlIExpbmtDaGFyc2V0OiAgICAgICAgIHJldHVybiBTdHJpbmco
bGluay5jaGFyc2V0KCkpOwotICAgIGNhc2UgTGlua0hyZWY6ICAgICAgICAgICAgcmV0dXJuIFN0
cmluZyhsaW5rLmhyZWYoKSk7Ci0gICAgY2FzZSBMaW5rSHJlZkxhbmc6ICAgICAgICByZXR1cm4g
U3RyaW5nKGxpbmsuaHJlZmxhbmcoKSk7Ci0gICAgY2FzZSBMaW5rTWVkaWE6ICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKGxpbmsubWVkaWEoKSk7Ci0gICAgY2FzZSBMaW5rUmVsOiAgICAgICAgICAg
ICByZXR1cm4gU3RyaW5nKGxpbmsucmVsKCkpOwotICAgIGNhc2UgTGlua1JldjogICAgICAgICAg
ICAgcmV0dXJuIFN0cmluZyhsaW5rLnJldigpKTsKLSAgICBjYXNlIExpbmtUYXJnZXQ6ICAgICAg
ICAgIHJldHVybiBTdHJpbmcobGluay50YXJnZXQoKSk7Ci0gICAgY2FzZSBMaW5rVHlwZTogICAg
ICAgICAgICByZXR1cm4gU3RyaW5nKGxpbmsudHlwZSgpKTsKLSAgICBjYXNlIExpbmtTaGVldDog
ICAgICAgICAgIHJldHVybiBnZXRET01TdHlsZVNoZWV0KGV4ZWMsIGxpbmsuc2hlZXQoKSk7Ci0g
ICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX1RJVExFOiB7Ci0gICAgSFRNTFRpdGxlRWxl
bWVudEltcGwgJnRpdGxlID0gc3RhdGljX2Nhc3Q8SFRNTFRpdGxlRWxlbWVudEltcGwgJj4oZWxl
bWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgVGl0bGVUZXh0OiAgICAgICAg
ICAgICAgICAgcmV0dXJuIFN0cmluZyh0aXRsZS50ZXh0KCkpOwotICAgIH0KLSAgfQotICBicmVh
azsKLSAgY2FzZSBJRF9NRVRBOiB7Ci0gICAgSFRNTE1ldGFFbGVtZW50SW1wbCAmbWV0YSA9IHN0
YXRpY19jYXN0PEhUTUxNZXRhRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0
b2tlbikgewotICAgIGNhc2UgTWV0YUNvbnRlbnQ6ICAgICAgICAgcmV0dXJuIFN0cmluZyhtZXRh
LmNvbnRlbnQoKSk7Ci0gICAgY2FzZSBNZXRhSHR0cEVxdWl2OiAgICAgICByZXR1cm4gU3RyaW5n
KG1ldGEuaHR0cEVxdWl2KCkpOwotICAgIGNhc2UgTWV0YU5hbWU6ICAgICAgICAgICAgcmV0dXJu
IFN0cmluZyhtZXRhLm5hbWUoKSk7Ci0gICAgY2FzZSBNZXRhU2NoZW1lOiAgICAgICAgICByZXR1
cm4gU3RyaW5nKG1ldGEuc2NoZW1lKCkpOwotICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJ
RF9CQVNFOiB7Ci0gICAgSFRNTEJhc2VFbGVtZW50SW1wbCAmYmFzZSA9IHN0YXRpY19jYXN0PEhU
TUxCYXNlRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAg
IGNhc2UgQmFzZUhyZWY6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhiYXNlLmhyZWYoKSk7Ci0g
ICAgY2FzZSBCYXNlVGFyZ2V0OiAgICAgICAgICByZXR1cm4gU3RyaW5nKGJhc2UudGFyZ2V0KCkp
OwotICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9JU0lOREVYOiB7Ci0gICAgSFRNTElz
SW5kZXhFbGVtZW50SW1wbCAmaXNpbmRleCA9IHN0YXRpY19jYXN0PEhUTUxJc0luZGV4RWxlbWVu
dEltcGwgJj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgSXNJbmRl
eEZvcm06ICAgICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYywgaXNpbmRleC5mb3JtKCkp
OyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVudAotICAgIGNhc2UgSXNJbmRleFByb21wdDogICAgICAg
ICAgcmV0dXJuIFN0cmluZyhpc2luZGV4LnByb21wdCgpKTsKLSAgICB9Ci0gIH0KLSAgYnJlYWs7
Ci0gIGNhc2UgSURfU1RZTEU6IHsKLSAgICBIVE1MU3R5bGVFbGVtZW50SW1wbCAmc3R5bGUgPSBz
dGF0aWNfY2FzdDxIVE1MU3R5bGVFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICBzd2l0Y2gg
KHRva2VuKSB7Ci0gICAgY2FzZSBTdHlsZURpc2FibGVkOiAgICAgICAgcmV0dXJuIEJvb2xlYW4o
c3R5bGUuZGlzYWJsZWQoKSk7Ci0gICAgY2FzZSBTdHlsZU1lZGlhOiAgICAgICAgICAgcmV0dXJu
IFN0cmluZyhzdHlsZS5tZWRpYSgpKTsKLSAgICBjYXNlIFN0eWxlVHlwZTogICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKHN0eWxlLnR5cGUoKSk7Ci0gICAgY2FzZSBTdHlsZVNoZWV0OiAgICAgICAg
ICAgcmV0dXJuIGdldERPTVN0eWxlU2hlZXQoZXhlYywgc3R5bGUuc2hlZXQoKSk7Ci0gICAgfQot
ICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX0JPRFk6IHsKLSAgICBIVE1MQm9keUVsZW1lbnRJbXBs
ICZib2R5ID0gc3RhdGljX2Nhc3Q8SFRNTEJvZHlFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAg
ICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBCb2R5QUxpbms6ICAgICAgICAgICByZXR1cm4g
U3RyaW5nKGJvZHkuYUxpbmsoKSk7Ci0gICAgY2FzZSBCb2R5QmFja2dyb3VuZDogICAgICByZXR1
cm4gU3RyaW5nKGJvZHkuYmFja2dyb3VuZCgpKTsKLSAgICBjYXNlIEJvZHlCZ0NvbG9yOiAgICAg
ICAgIHJldHVybiBTdHJpbmcoYm9keS5iZ0NvbG9yKCkpOwotICAgIGNhc2UgQm9keUxpbms6ICAg
ICAgICAgICAgcmV0dXJuIFN0cmluZyhib2R5LmxpbmsoKSk7Ci0gICAgY2FzZSBCb2R5VGV4dDog
ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGJvZHkudGV4dCgpKTsKLSAgICBjYXNlIEJvZHlWTGlu
azogICAgICAgICAgIHJldHVybiBTdHJpbmcoYm9keS52TGluaygpKTsKLSAgICBkZWZhdWx0Ogot
ICAgICAgLy8gVXBkYXRlIHRoZSBkb2N1bWVudCdzIGxheW91dCBiZWZvcmUgd2UgY29tcHV0ZSB0
aGVzZSBhdHRyaWJ1dGVzLgotICAgICAgRG9jdW1lbnRJbXBsICpkb2MgPSBib2R5LmdldERvY3Vt
ZW50KCk7Ci0gICAgICBpZiAoZG9jKQotICAgICAgICBkb2MtPnVwZGF0ZUxheW91dElnbm9yZVBl
bmRpbmdTdHlsZXNoZWV0cygpOwotICAgICAgS0hUTUxWaWV3ICp2aWV3ID0gZG9jID8gZG9jLT52
aWV3KCkgOiAwOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgICBjYXNlIEJvZHlTY3Jv
bGxMZWZ0OgotICAgICAgICAgICAgcmV0dXJuIE51bWJlcih2aWV3ID8gdmlldy0+Y29udGVudHNY
KCkgOiAwKTsKLSAgICAgICAgY2FzZSBCb2R5U2Nyb2xsVG9wOgotICAgICAgICAgICAgcmV0dXJu
IE51bWJlcih2aWV3ID8gdmlldy0+Y29udGVudHNZKCkgOiAwKTsKLSAgICAgICAgY2FzZSBCb2R5
U2Nyb2xsSGVpZ2h0OiAgIHJldHVybiBOdW1iZXIodmlldyA/IHZpZXctPmNvbnRlbnRzSGVpZ2h0
KCkgOiAwKTsKLSAgICAgICAgY2FzZSBCb2R5U2Nyb2xsV2lkdGg6ICAgIHJldHVybiBOdW1iZXIo
dmlldyA/IHZpZXctPmNvbnRlbnRzV2lkdGgoKSA6IDApOwotICAgICAgfQotICAgIH0KLSAgfQot
ICBicmVhazsKK1ZhbHVlIEhUTUxFbGVtZW50OjpodG1sR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywg
aW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxIdG1sRWxlbWVudEltcGwmIGh0bWwgPSAqc3Rh
dGljX2Nhc3Q8SFRNTEh0bWxFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09
IEh0bWxWZXJzaW9uKQorICAgICAgICByZXR1cm4gU3RyaW5nKGh0bWwudmVyc2lvbigpKTsKKyAg
ICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CiAKLSAgY2FzZSBJRF9GT1JNOiB7Ci0gICAgSFRNTEZv
cm1FbGVtZW50SW1wbCAmZm9ybSA9IHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudEltcGwgJj4o
ZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgRm9ybUVsZW1lbnRzOiAg
ICAgICAgcmV0dXJuIGdldEhUTUxDb2xsZWN0aW9uKGV4ZWMsIGZvcm0uZWxlbWVudHMoKS5nZXQo
KSk7Ci0gICAgY2FzZSBGb3JtTGVuZ3RoOiAgICAgICAgICByZXR1cm4gTnVtYmVyKGZvcm0ubGVu
Z3RoKCkpOwotICAgIGNhc2UgRm9ybU5hbWU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhmb3Jt
Lm5hbWUoKSk7Ci0gICAgY2FzZSBGb3JtQWNjZXB0Q2hhcnNldDogICByZXR1cm4gU3RyaW5nKGZv
cm0uYWNjZXB0Q2hhcnNldCgpKTsKLSAgICBjYXNlIEZvcm1BY3Rpb246ICAgICAgICAgIHJldHVy
biBTdHJpbmcoZm9ybS5hY3Rpb24oKSk7Ci0gICAgY2FzZSBGb3JtRW5jVHlwZTogICAgICAgICBy
ZXR1cm4gU3RyaW5nKGZvcm0uZW5jdHlwZSgpKTsKLSAgICBjYXNlIEZvcm1NZXRob2Q6ICAgICAg
ICAgIHJldHVybiBTdHJpbmcoZm9ybS5tZXRob2QoKSk7Ci0gICAgY2FzZSBGb3JtVGFyZ2V0OiAg
ICAgICAgICByZXR1cm4gU3RyaW5nKGZvcm0udGFyZ2V0KCkpOwotICAgIH0KLSAgfQotICBicmVh
azsKLSAgY2FzZSBJRF9TRUxFQ1Q6IHsKLSAgICBIVE1MU2VsZWN0RWxlbWVudEltcGwgJnNlbGVj
dCA9IHN0YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICBz
d2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBTZWxlY3RUeXBlOiAgICAgICAgICAgIHJldHVybiBT
dHJpbmcoc2VsZWN0LnR5cGUoKSk7Ci0gICAgY2FzZSBTZWxlY3RTZWxlY3RlZEluZGV4OiAgIHJl
dHVybiBOdW1iZXIoc2VsZWN0LnNlbGVjdGVkSW5kZXgoKSk7Ci0gICAgY2FzZSBTZWxlY3RWYWx1
ZTogICAgICAgICAgIHJldHVybiBTdHJpbmcoc2VsZWN0LnZhbHVlKCkpOwotICAgIGNhc2UgU2Vs
ZWN0TGVuZ3RoOiAgICAgICAgICByZXR1cm4gTnVtYmVyKHNlbGVjdC5sZW5ndGgoKSk7Ci0gICAg
Y2FzZSBTZWxlY3RGb3JtOiAgICAgICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsIHNlbGVj
dC5mb3JtKCkpOyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVudAotICAgIGNhc2UgU2VsZWN0T3B0aW9u
czogICAgICAgICByZXR1cm4gZ2V0U2VsZWN0SFRNTENvbGxlY3Rpb24oZXhlYywgc2VsZWN0Lm9w
dGlvbnNIVE1MQ29sbGVjdGlvbigpLmdldCgpLCAmc2VsZWN0KTsgLy8gdHlwZSBIVE1MQ29sbGVj
dGlvbgotICAgIGNhc2UgU2VsZWN0RGlzYWJsZWQ6ICAgICAgICByZXR1cm4gQm9vbGVhbihzZWxl
Y3QuZGlzYWJsZWQoKSk7Ci0gICAgY2FzZSBTZWxlY3RNdWx0aXBsZTogICAgICAgIHJldHVybiBC
b29sZWFuKHNlbGVjdC5tdWx0aXBsZSgpKTsKLSAgICBjYXNlIFNlbGVjdE5hbWU6ICAgICAgICAg
ICAgcmV0dXJuIFN0cmluZyhzZWxlY3QubmFtZSgpKTsKLSAgICBjYXNlIFNlbGVjdFNpemU6ICAg
ICAgICAgICAgcmV0dXJuIE51bWJlcihzZWxlY3Quc2l6ZSgpKTsKLSAgICBjYXNlIFNlbGVjdFRh
YkluZGV4OiAgICAgICAgcmV0dXJuIE51bWJlcihzZWxlY3QudGFiSW5kZXgoKSk7Ci0gICAgfQot
ICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX09QVEdST1VQOiB7Ci0gICAgSFRNTE9wdEdyb3VwRWxl
bWVudEltcGwgJm9wdGdyb3VwID0gc3RhdGljX2Nhc3Q8SFRNTE9wdEdyb3VwRWxlbWVudEltcGwg
Jj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgT3B0R3JvdXBEaXNh
YmxlZDogICAgICAgIHJldHVybiBCb29sZWFuKG9wdGdyb3VwLmRpc2FibGVkKCkpOwotICAgIGNh
c2UgT3B0R3JvdXBMYWJlbDogICAgICAgICAgIHJldHVybiBTdHJpbmcob3B0Z3JvdXAubGFiZWwo
KSk7Ci0gICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX09QVElPTjogewotICAgIEhUTUxP
cHRpb25FbGVtZW50SW1wbCAmb3B0aW9uID0gc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnRJ
bXBsICY+KGVsZW1lbnQpOwotICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIE9wdGlvbkZv
cm06ICAgICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyxvcHRpb24uZm9ybSgpKTsgLy8g
dHlwZSBIVE1MRm9ybUVsZW1lbnQKLSAgICBjYXNlIE9wdGlvbkRlZmF1bHRTZWxlY3RlZDogcmV0
dXJuIEJvb2xlYW4ob3B0aW9uLmRlZmF1bHRTZWxlY3RlZCgpKTsKLSAgICBjYXNlIE9wdGlvblRl
eHQ6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhvcHRpb24udGV4dCgpKTsKLSAgICBjYXNlIE9w
dGlvbkluZGV4OiAgICAgICAgICAgcmV0dXJuIE51bWJlcihvcHRpb24uaW5kZXgoKSk7Ci0gICAg
Y2FzZSBPcHRpb25EaXNhYmxlZDogICAgICAgIHJldHVybiBCb29sZWFuKG9wdGlvbi5kaXNhYmxl
ZCgpKTsKLSAgICBjYXNlIE9wdGlvbkxhYmVsOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhvcHRp
b24ubGFiZWwoKSk7Ci0gICAgY2FzZSBPcHRpb25TZWxlY3RlZDogICAgICAgIHJldHVybiBCb29s
ZWFuKG9wdGlvbi5zZWxlY3RlZCgpKTsKLSAgICBjYXNlIE9wdGlvblZhbHVlOiAgICAgICAgICAg
cmV0dXJuIFN0cmluZyhvcHRpb24udmFsdWUoKSk7Ci0gICAgfQotICB9Ci0gIGJyZWFrOwotICBj
YXNlIElEX0lOUFVUOiB7Ci0gICAgSFRNTElucHV0RWxlbWVudEltcGwgJmlucHV0ID0gc3RhdGlj
X2Nhc3Q8SFRNTElucHV0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tl
bikgewotICAgIGNhc2UgSW5wdXREZWZhdWx0VmFsdWU6ICAgIHJldHVybiBTdHJpbmcoaW5wdXQu
ZGVmYXVsdFZhbHVlKCkpOwotICAgIGNhc2UgSW5wdXREZWZhdWx0Q2hlY2tlZDogIHJldHVybiBC
b29sZWFuKGlucHV0LmRlZmF1bHRDaGVja2VkKCkpOwotICAgIGNhc2UgSW5wdXRGb3JtOiAgICAg
ICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsaW5wdXQuZm9ybSgpKTsgLy8gdHlwZSBIVE1M
Rm9ybUVsZW1lbnQKLSAgICBjYXNlIElucHV0QWNjZXB0OiAgICAgICAgICByZXR1cm4gU3RyaW5n
KGlucHV0LmFjY2VwdCgpKTsKLSAgICBjYXNlIElucHV0QWNjZXNzS2V5OiAgICAgICByZXR1cm4g
U3RyaW5nKGlucHV0LmFjY2Vzc0tleSgpKTsKLSAgICBjYXNlIElucHV0QWxpZ246ICAgICAgICAg
ICByZXR1cm4gU3RyaW5nKGlucHV0LmFsaWduKCkpOwotICAgIGNhc2UgSW5wdXRBbHQ6ICAgICAg
ICAgICAgIHJldHVybiBTdHJpbmcoaW5wdXQuYWx0KCkpOwotICAgIGNhc2UgSW5wdXRDaGVja2Vk
OiAgICAgICAgIHJldHVybiBCb29sZWFuKGlucHV0LmNoZWNrZWQoKSk7Ci0gICAgY2FzZSBJbnB1
dERpc2FibGVkOiAgICAgICAgcmV0dXJuIEJvb2xlYW4oaW5wdXQuZGlzYWJsZWQoKSk7Ci0gICAg
Y2FzZSBJbnB1dE1heExlbmd0aDogICAgICAgcmV0dXJuIE51bWJlcihpbnB1dC5tYXhMZW5ndGgo
KSk7Ci0gICAgY2FzZSBJbnB1dE5hbWU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpbnB1dC5u
YW1lKCkpOwotICAgIGNhc2UgSW5wdXRSZWFkT25seTogICAgICAgIHJldHVybiBCb29sZWFuKGlu
cHV0LnJlYWRPbmx5KCkpOwotICAgIGNhc2UgSW5wdXRTaXplOiAgICAgICAgICAgIHJldHVybiBT
dHJpbmcoaW5wdXQuc2l6ZURPTSgpKTsKLSAgICBjYXNlIElucHV0U3JjOiAgICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKGlucHV0LnNyYygpKTsKLSAgICBjYXNlIElucHV0VGFiSW5kZXg6ICAgICAg
ICByZXR1cm4gTnVtYmVyKGlucHV0LnRhYkluZGV4KCkpOwotICAgIGNhc2UgSW5wdXRUeXBlOiAg
ICAgICAgICAgIHJldHVybiBTdHJpbmcoaW5wdXQudHlwZSgpKTsKLSAgICBjYXNlIElucHV0VXNl
TWFwOiAgICAgICAgICByZXR1cm4gU3RyaW5nKGlucHV0LnVzZU1hcCgpKTsKLSAgICBjYXNlIElu
cHV0VmFsdWU6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGlucHV0LnZhbHVlKCkpOwotICAgIH0K
LSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9URVhUQVJFQTogewotICAgIEhUTUxUZXh0QXJlYUVs
ZW1lbnRJbXBsICZ0ZXh0YXJlYSA9IHN0YXRpY19jYXN0PEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBs
ICY+KGVsZW1lbnQpOwotICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIFRleHRBcmVhRGVm
YXVsdFZhbHVlOiAgICByZXR1cm4gU3RyaW5nKHRleHRhcmVhLmRlZmF1bHRWYWx1ZSgpKTsKLSAg
ICBjYXNlIFRleHRBcmVhRm9ybTogICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLHRl
eHRhcmVhLmZvcm0oKSk7IC8vIHR5cGUgSFRNTEZvcm1FbGVtZW50Ci0gICAgY2FzZSBUZXh0QXJl
YUFjY2Vzc0tleTogICAgICAgcmV0dXJuIFN0cmluZyh0ZXh0YXJlYS5hY2Nlc3NLZXkoKSk7Ci0g
ICAgY2FzZSBUZXh0QXJlYUNvbHM6ICAgICAgICAgICAgcmV0dXJuIE51bWJlcih0ZXh0YXJlYS5j
b2xzKCkpOwotICAgIGNhc2UgVGV4dEFyZWFEaXNhYmxlZDogICAgICAgIHJldHVybiBCb29sZWFu
KHRleHRhcmVhLmRpc2FibGVkKCkpOwotICAgIGNhc2UgVGV4dEFyZWFOYW1lOiAgICAgICAgICAg
IHJldHVybiBTdHJpbmcodGV4dGFyZWEubmFtZSgpKTsKLSAgICBjYXNlIFRleHRBcmVhUmVhZE9u
bHk6ICAgICAgICByZXR1cm4gQm9vbGVhbih0ZXh0YXJlYS5yZWFkT25seSgpKTsKLSAgICBjYXNl
IFRleHRBcmVhUm93czogICAgICAgICAgICByZXR1cm4gTnVtYmVyKHRleHRhcmVhLnJvd3MoKSk7
Ci0gICAgY2FzZSBUZXh0QXJlYVRhYkluZGV4OiAgICAgICAgcmV0dXJuIE51bWJlcih0ZXh0YXJl
YS50YWJJbmRleCgpKTsKLSAgICBjYXNlIFRleHRBcmVhVHlwZTogICAgICAgICAgICByZXR1cm4g
U3RyaW5nKHRleHRhcmVhLnR5cGUoKSk7Ci0gICAgY2FzZSBUZXh0QXJlYVZhbHVlOiAgICAgICAg
ICAgcmV0dXJuIFN0cmluZyh0ZXh0YXJlYS52YWx1ZSgpKTsKLSAgICB9Ci0gIH0KLSAgYnJlYWs7
Ci0gIGNhc2UgSURfQlVUVE9OOiB7Ci0gICAgSFRNTEJ1dHRvbkVsZW1lbnRJbXBsICZidXR0b24g
PSBzdGF0aWNfY2FzdDxIVE1MQnV0dG9uRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgc3dp
dGNoICh0b2tlbikgewotICAgIGNhc2UgQnV0dG9uRm9ybTogICAgICAgICAgICByZXR1cm4gZ2V0
RE9NTm9kZShleGVjLGJ1dHRvbi5mb3JtKCkpOyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVudAotICAg
IGNhc2UgQnV0dG9uQWNjZXNzS2V5OiAgICAgICByZXR1cm4gU3RyaW5nKGJ1dHRvbi5hY2Nlc3NL
ZXkoKSk7Ci0gICAgY2FzZSBCdXR0b25EaXNhYmxlZDogICAgICAgIHJldHVybiBCb29sZWFuKGJ1
dHRvbi5kaXNhYmxlZCgpKTsKLSAgICBjYXNlIEJ1dHRvbk5hbWU6ICAgICAgICAgICAgcmV0dXJu
IFN0cmluZyhidXR0b24ubmFtZSgpKTsKLSAgICBjYXNlIEJ1dHRvblRhYkluZGV4OiAgICAgICAg
cmV0dXJuIE51bWJlcihidXR0b24udGFiSW5kZXgoKSk7Ci0gICAgY2FzZSBCdXR0b25UeXBlOiAg
ICAgICAgICAgIHJldHVybiBTdHJpbmcoYnV0dG9uLnR5cGUoKSk7Ci0gICAgY2FzZSBCdXR0b25W
YWx1ZTogICAgICAgICAgIHJldHVybiBTdHJpbmcoYnV0dG9uLnZhbHVlKCkpOwotICAgIH0KLSAg
fQotICBicmVhazsKLSAgY2FzZSBJRF9MQUJFTDogewotICAgIEhUTUxMYWJlbEVsZW1lbnRJbXBs
ICZsYWJlbCA9IHN0YXRpY19jYXN0PEhUTUxMYWJlbEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwot
ICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIExhYmVsRm9ybTogICAgICAgICAgICByZXR1
cm4gZ2V0RE9NTm9kZShleGVjLGxhYmVsLmZvcm0oKSk7IC8vIHR5cGUgSFRNTEZvcm1FbGVtZW50
Ci0gICAgY2FzZSBMYWJlbEFjY2Vzc0tleTogICAgICAgcmV0dXJuIFN0cmluZyhsYWJlbC5hY2Nl
c3NLZXkoKSk7Ci0gICAgY2FzZSBMYWJlbEh0bWxGb3I6ICAgICAgICAgcmV0dXJuIFN0cmluZyhs
YWJlbC5odG1sRm9yKCkpOwotICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9GSUVMRFNF
VDogewotICAgIEhUTUxGaWVsZFNldEVsZW1lbnRJbXBsICZmaWVsZFNldCA9IHN0YXRpY19jYXN0
PEhUTUxGaWVsZFNldEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworVmFsdWUgSFRNTEVsZW1lbnQ6
OmhlYWRHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRN
TEhlYWRFbGVtZW50SW1wbCAmaGVhZCA9ICpzdGF0aWNfY2FzdDxIVE1MSGVhZEVsZW1lbnRJbXBs
Kj4oaW1wbCgpKTsKKyAgICBpZiAodG9rZW4gPT0gSGVhZFByb2ZpbGUpCisgICAgICAgIHJldHVy
biBTdHJpbmcoaGVhZC5wcm9maWxlKCkpOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKwor
VmFsdWUgSFRNTEVsZW1lbnQ6OmxpbmtHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4p
IGNvbnN0Cit7CisgICAgSFRNTExpbmtFbGVtZW50SW1wbCAmbGluayA9ICpzdGF0aWNfY2FzdDxI
VE1MTGlua0VsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAg
Y2FzZSBGaWVsZFNldEZvcm06ICAgICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyxmaWVs
ZFNldC5mb3JtKCkpOyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVudAotICAgIH0KLSAgfQotICBicmVh
azsKLSAgY2FzZSBJRF9MRUdFTkQ6IHsKLSAgICBIVE1MTGVnZW5kRWxlbWVudEltcGwgJmxlZ2Vu
ZCA9IHN0YXRpY19jYXN0PEhUTUxMZWdlbmRFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICBz
d2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBMZWdlbmRGb3JtOiAgICAgICAgICAgIHJldHVybiBn
ZXRET01Ob2RlKGV4ZWMsbGVnZW5kLmZvcm0oKSk7IC8vIHR5cGUgSFRNTEZvcm1FbGVtZW50Ci0g
ICAgY2FzZSBMZWdlbmRBY2Nlc3NLZXk6ICAgICAgIHJldHVybiBTdHJpbmcobGVnZW5kLmFjY2Vz
c0tleSgpKTsKLSAgICBjYXNlIExlZ2VuZEFsaWduOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhs
ZWdlbmQuYWxpZ24oKSk7CisgICAgICAgIGNhc2UgTGlua0Rpc2FibGVkOgorICAgICAgICAgICAg
cmV0dXJuIEJvb2xlYW4obGluay5kaXNhYmxlZCgpKTsKKyAgICAgICAgY2FzZSBMaW5rQ2hhcnNl
dDoKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcobGluay5jaGFyc2V0KCkpOworICAgICAgICBj
YXNlIExpbmtIcmVmOgorICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhsaW5rLmhyZWYoKSk7Cisg
ICAgICAgIGNhc2UgTGlua0hyZWZMYW5nOgorICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhsaW5r
LmhyZWZsYW5nKCkpOworICAgICAgICBjYXNlIExpbmtNZWRpYTogICAgICAgICAgIAorICAgICAg
ICAgICAgcmV0dXJuIFN0cmluZyhsaW5rLm1lZGlhKCkpOworICAgICAgICBjYXNlIExpbmtSZWw6
ICAgICAgICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhsaW5rLnJlbCgpKTsKKyAg
ICAgICAgY2FzZSBMaW5rUmV2OiAgICAgICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIFN0cmlu
ZyhsaW5rLnJldigpKTsKKyAgICAgICAgY2FzZSBMaW5rVGFyZ2V0OiAgICAgICAgICAKKyAgICAg
ICAgICAgIHJldHVybiBTdHJpbmcobGluay50YXJnZXQoKSk7CisgICAgICAgIGNhc2UgTGlua1R5
cGU6ICAgICAgICAgICAgCisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGxpbmsudHlwZSgpKTsK
KyAgICAgICAgY2FzZSBMaW5rU2hlZXQ6ICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiBn
ZXRET01TdHlsZVNoZWV0KGV4ZWMsIGxpbmsuc2hlZXQoKSk7CiAgICAgfQotICB9Ci0gIGJyZWFr
OwotICBjYXNlIElEX1VMOiB7Ci0gICAgSFRNTFVMaXN0RWxlbWVudEltcGwgJnVMaXN0ID0gc3Rh
dGljX2Nhc3Q8SFRNTFVMaXN0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgcmV0dXJuIFVu
ZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6dGl0bGVHZXR0ZXIoRXhlY1N0YXRl
KiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTFRpdGxlRWxlbWVudEltcGwmIHRp
dGxlID0gKnN0YXRpY19jYXN0PEhUTUxUaXRsZUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBp
ZiAodG9rZW4gPT0gVGl0bGVUZXh0KQorICAgICAgICByZXR1cm4gU3RyaW5nKHRpdGxlLnRleHQo
KSk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6bWV0
YUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MTWV0
YUVsZW1lbnRJbXBsJiBtZXRhID0gKnN0YXRpY19jYXN0PEhUTUxNZXRhRWxlbWVudEltcGwqPihp
bXBsKCkpOwogICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIFVMaXN0Q29tcGFjdDogICAg
ICAgICByZXR1cm4gQm9vbGVhbih1TGlzdC5jb21wYWN0KCkpOwotICAgIGNhc2UgVUxpc3RUeXBl
OiAgICAgICAgICAgIHJldHVybiBTdHJpbmcodUxpc3QudHlwZSgpKTsKLSAgICB9Ci0gIH0KLSAg
YnJlYWs7Ci0gIGNhc2UgSURfT0w6IHsKLSAgICBIVE1MT0xpc3RFbGVtZW50SW1wbCAmb0xpc3Qg
PSBzdGF0aWNfY2FzdDxIVE1MT0xpc3RFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICBzd2l0
Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBPTGlzdENvbXBhY3Q6ICAgICAgICAgcmV0dXJuIEJvb2xl
YW4ob0xpc3QuY29tcGFjdCgpKTsKLSAgICBjYXNlIE9MaXN0U3RhcnQ6ICAgICAgICAgICByZXR1
cm4gTnVtYmVyKG9MaXN0LnN0YXJ0KCkpOwotICAgIGNhc2UgT0xpc3RUeXBlOiAgICAgICAgICAg
IHJldHVybiBTdHJpbmcob0xpc3QudHlwZSgpKTsKKyAgICAgICAgY2FzZSBNZXRhQ29udGVudDog
ICAgICAgICByZXR1cm4gU3RyaW5nKG1ldGEuY29udGVudCgpKTsKKyAgICAgICAgY2FzZSBNZXRh
SHR0cEVxdWl2OiAgICAgICByZXR1cm4gU3RyaW5nKG1ldGEuaHR0cEVxdWl2KCkpOworICAgICAg
ICBjYXNlIE1ldGFOYW1lOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcobWV0YS5uYW1lKCkpOwor
ICAgICAgICBjYXNlIE1ldGFTY2hlbWU6ICAgICAgICAgIHJldHVybiBTdHJpbmcobWV0YS5zY2hl
bWUoKSk7CiAgICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX0RMOiB7Ci0gICAgSFRNTERM
aXN0RWxlbWVudEltcGwgJmRMaXN0ID0gc3RhdGljX2Nhc3Q8SFRNTERMaXN0RWxlbWVudEltcGwg
Jj4oZWxlbWVudCk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxl
bWVudDo6YmFzZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAg
ICBIVE1MQmFzZUVsZW1lbnRJbXBsJiBiYXNlID0gKnN0YXRpY19jYXN0PEhUTUxCYXNlRWxlbWVu
dEltcGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIERMaXN0Q29t
cGFjdDogICAgICAgICByZXR1cm4gQm9vbGVhbihkTGlzdC5jb21wYWN0KCkpOworICAgICAgICBj
YXNlIEJhc2VIcmVmOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYmFzZS5ocmVmKCkpOworICAg
ICAgICBjYXNlIEJhc2VUYXJnZXQ6ICAgICAgICAgIHJldHVybiBTdHJpbmcoYmFzZS50YXJnZXQo
KSk7CiAgICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX0RJUjogewotICAgIEhUTUxEaXJl
Y3RvcnlFbGVtZW50SW1wbCAmZGlyZWN0b3J5ID0gc3RhdGljX2Nhc3Q8SFRNTERpcmVjdG9yeUVs
ZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFs
dWUgSFRNTEVsZW1lbnQ6OmlzSW5kZXhHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4p
IGNvbnN0Cit7CisgICAgSFRNTElzSW5kZXhFbGVtZW50SW1wbCYgaXNpbmRleCA9ICpzdGF0aWNf
Y2FzdDxIVE1MSXNJbmRleEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2Vu
KSB7Ci0gICAgY2FzZSBEaXJlY3RvcnlDb21wYWN0OiAgICAgICAgIHJldHVybiBCb29sZWFuKGRp
cmVjdG9yeS5jb21wYWN0KCkpOworICAgICAgICBjYXNlIElzSW5kZXhGb3JtOiAgICAgICAgICAg
IHJldHVybiBnZXRET01Ob2RlKGV4ZWMsIGlzaW5kZXguZm9ybSgpKTsgLy8gdHlwZSBIVE1MRm9y
bUVsZW1lbnQKKyAgICAgICAgY2FzZSBJc0luZGV4UHJvbXB0OiAgICAgICAgICByZXR1cm4gU3Ry
aW5nKGlzaW5kZXgucHJvbXB0KCkpOwogICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9N
RU5VOiB7Ci0gICAgSFRNTE1lbnVFbGVtZW50SW1wbCAmbWVudSA9IHN0YXRpY19jYXN0PEhUTUxN
ZW51RWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQor
CitWYWx1ZSBIVE1MRWxlbWVudDo6c3R5bGVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0Cit7CisgICAgSFRNTFN0eWxlRWxlbWVudEltcGwmIHN0eWxlID0gKnN0YXRpY19j
YXN0PEhUTUxTdHlsZUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7
Ci0gICAgY2FzZSBNZW51Q29tcGFjdDogICAgICAgICByZXR1cm4gQm9vbGVhbihtZW51LmNvbXBh
Y3QoKSk7CisgICAgICAgIGNhc2UgU3R5bGVEaXNhYmxlZDogICAgICAgIHJldHVybiBCb29sZWFu
KHN0eWxlLmRpc2FibGVkKCkpOworICAgICAgICBjYXNlIFN0eWxlTWVkaWE6ICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKHN0eWxlLm1lZGlhKCkpOworICAgICAgICBjYXNlIFN0eWxlVHlwZTogICAg
ICAgICAgICByZXR1cm4gU3RyaW5nKHN0eWxlLnR5cGUoKSk7CisgICAgICAgIGNhc2UgU3R5bGVT
aGVldDogICAgICAgICAgIHJldHVybiBnZXRET01TdHlsZVNoZWV0KGV4ZWMsIHN0eWxlLnNoZWV0
KCkpOwogICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9MSTogewotICAgIEhUTUxMSUVs
ZW1lbnRJbXBsICZsaSA9IHN0YXRpY19jYXN0PEhUTUxMSUVsZW1lbnRJbXBsICY+KGVsZW1lbnQp
OworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OmJvZHlH
ZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTEJvZHlF
bGVtZW50SW1wbCYgYm9keSA9ICpzdGF0aWNfY2FzdDxIVE1MQm9keUVsZW1lbnRJbXBsKj4oaW1w
bCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBMSVR5cGU6ICAgICAgICAgICAg
cmV0dXJuIFN0cmluZyhsaS50eXBlKCkpOwotICAgIGNhc2UgTElWYWx1ZTogICAgICAgICAgIHJl
dHVybiBOdW1iZXIobGkudmFsdWUoKSk7CisgICAgICAgIGNhc2UgQm9keUFMaW5rOiAgICAgICAg
ICAgcmV0dXJuIFN0cmluZyhib2R5LmFMaW5rKCkpOworICAgICAgICBjYXNlIEJvZHlCYWNrZ3Jv
dW5kOiAgICAgIHJldHVybiBTdHJpbmcoYm9keS5iYWNrZ3JvdW5kKCkpOworICAgICAgICBjYXNl
IEJvZHlCZ0NvbG9yOiAgICAgICAgIHJldHVybiBTdHJpbmcoYm9keS5iZ0NvbG9yKCkpOworICAg
ICAgICBjYXNlIEJvZHlMaW5rOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYm9keS5saW5rKCkp
OworICAgICAgICBjYXNlIEJvZHlUZXh0OiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYm9keS50
ZXh0KCkpOworICAgICAgICBjYXNlIEJvZHlWTGluazogICAgICAgICAgIHJldHVybiBTdHJpbmco
Ym9keS52TGluaygpKTsKKyAgICAgICAgZGVmYXVsdDogeworICAgICAgICAgICAgLy8gVXBkYXRl
IHRoZSBkb2N1bWVudCdzIGxheW91dCBiZWZvcmUgd2UgY29tcHV0ZSB0aGVzZSBhdHRyaWJ1dGVz
LgorICAgICAgICAgICAgRG9jdW1lbnRJbXBsICpkb2MgPSBib2R5LmdldERvY3VtZW50KCk7Cisg
ICAgICAgICAgICBpZiAoZG9jKQorICAgICAgICAgICAgICAgIGRvYy0+dXBkYXRlTGF5b3V0SWdu
b3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CisgICAgICAgICAgICBLSFRNTFZpZXcgKnZpZXcgPSBk
b2MgPyBkb2MtPnZpZXcoKSA6IDA7CisgICAgICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAg
ICAgICAgICAgICAgY2FzZSBCb2R5U2Nyb2xsTGVmdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIE51bWJlcih2aWV3ID8gdmlldy0+Y29udGVudHNYKCkgOiAwKTsKKyAgICAgICAgICAgICAg
ICBjYXNlIEJvZHlTY3JvbGxUb3A6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOdW1iZXIo
dmlldyA/IHZpZXctPmNvbnRlbnRzWSgpIDogMCk7CisgICAgICAgICAgICAgICAgY2FzZSBCb2R5
U2Nyb2xsSGVpZ2h0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTnVtYmVyKHZpZXcgPyB2
aWV3LT5jb250ZW50c0hlaWdodCgpIDogMCk7CisgICAgICAgICAgICAgICAgY2FzZSBCb2R5U2Ny
b2xsV2lkdGg6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOdW1iZXIodmlldyA/IHZpZXct
PmNvbnRlbnRzV2lkdGgoKSA6IDApOworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQot
ICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX0RJVjogewotICAgIEhUTUxEaXZFbGVtZW50SW1wbCAm
ZGl2ID0gc3RhdGljX2Nhc3Q8SFRNTERpdkVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgIHJl
dHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OmZvcm1HZXR0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTEZvcm1FbGVtZW50SW1w
bCYgZm9ybSA9ICpzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAg
ICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBEaXZBbGlnbjogICAgICAgICAgIHJldHVybiBT
dHJpbmcoZGl2LmFsaWduKCkpOworICAgICAgICBjYXNlIEZvcm1FbGVtZW50czogICAgICAgIHJl
dHVybiBnZXRIVE1MQ29sbGVjdGlvbihleGVjLCBmb3JtLmVsZW1lbnRzKCkuZ2V0KCkpOworICAg
ICAgICBjYXNlIEZvcm1MZW5ndGg6ICAgICAgICAgIHJldHVybiBOdW1iZXIoZm9ybS5sZW5ndGgo
KSk7CisgICAgICAgIGNhc2UgRm9ybU5hbWU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhmb3Jt
Lm5hbWUoKSk7CisgICAgICAgIGNhc2UgRm9ybUFjY2VwdENoYXJzZXQ6ICAgcmV0dXJuIFN0cmlu
Zyhmb3JtLmFjY2VwdENoYXJzZXQoKSk7CisgICAgICAgIGNhc2UgRm9ybUFjdGlvbjogICAgICAg
ICAgcmV0dXJuIFN0cmluZyhmb3JtLmFjdGlvbigpKTsKKyAgICAgICAgY2FzZSBGb3JtRW5jVHlw
ZTogICAgICAgICByZXR1cm4gU3RyaW5nKGZvcm0uZW5jdHlwZSgpKTsKKyAgICAgICAgY2FzZSBG
b3JtTWV0aG9kOiAgICAgICAgICByZXR1cm4gU3RyaW5nKGZvcm0ubWV0aG9kKCkpOworICAgICAg
ICBjYXNlIEZvcm1UYXJnZXQ6ICAgICAgICAgIHJldHVybiBTdHJpbmcoZm9ybS50YXJnZXQoKSk7
CiAgICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX1A6IHsKLSAgICBIVE1MUGFyYWdyYXBo
RWxlbWVudEltcGwgJnBhcmFncmFwaCA9IHN0YXRpY19jYXN0PEhUTUxQYXJhZ3JhcGhFbGVtZW50
SW1wbCAmPihlbGVtZW50KTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhU
TUxFbGVtZW50OjpzZWxlY3RHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0
Cit7CisgICAgSFRNTFNlbGVjdEVsZW1lbnRJbXBsJiBzZWxlY3QgPSAqc3RhdGljX2Nhc3Q8SFRN
TFNlbGVjdEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAg
Y2FzZSBQYXJhZ3JhcGhBbGlnbjogICAgICAgICAgIHJldHVybiBTdHJpbmcocGFyYWdyYXBoLmFs
aWduKCkpOworICAgICAgICBjYXNlIFNlbGVjdFR5cGU6ICAgICAgICAgICAgcmV0dXJuIFN0cmlu
ZyhzZWxlY3QudHlwZSgpKTsKKyAgICAgICAgY2FzZSBTZWxlY3RTZWxlY3RlZEluZGV4OiAgIHJl
dHVybiBOdW1iZXIoc2VsZWN0LnNlbGVjdGVkSW5kZXgoKSk7CisgICAgICAgIGNhc2UgU2VsZWN0
VmFsdWU6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHNlbGVjdC52YWx1ZSgpKTsKKyAgICAgICAg
Y2FzZSBTZWxlY3RMZW5ndGg6ICAgICAgICAgIHJldHVybiBOdW1iZXIoc2VsZWN0Lmxlbmd0aCgp
KTsKKyAgICAgICAgY2FzZSBTZWxlY3RGb3JtOiAgICAgICAgICAgIHJldHVybiBnZXRET01Ob2Rl
KGV4ZWMsIHNlbGVjdC5mb3JtKCkpOyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVudAorICAgICAgICBj
YXNlIFNlbGVjdE9wdGlvbnM6ICAgICAgICAgcmV0dXJuIGdldFNlbGVjdEhUTUxDb2xsZWN0aW9u
KGV4ZWMsIHNlbGVjdC5vcHRpb25zSFRNTENvbGxlY3Rpb24oKS5nZXQoKSwgJnNlbGVjdCk7IC8v
IHR5cGUgSFRNTENvbGxlY3Rpb24KKyAgICAgICAgY2FzZSBTZWxlY3REaXNhYmxlZDogICAgICAg
IHJldHVybiBCb29sZWFuKHNlbGVjdC5kaXNhYmxlZCgpKTsKKyAgICAgICAgY2FzZSBTZWxlY3RN
dWx0aXBsZTogICAgICAgIHJldHVybiBCb29sZWFuKHNlbGVjdC5tdWx0aXBsZSgpKTsKKyAgICAg
ICAgY2FzZSBTZWxlY3ROYW1lOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoc2VsZWN0Lm5hbWUo
KSk7CisgICAgICAgIGNhc2UgU2VsZWN0U2l6ZTogICAgICAgICAgICByZXR1cm4gTnVtYmVyKHNl
bGVjdC5zaXplKCkpOworICAgICAgICBjYXNlIFNlbGVjdFRhYkluZGV4OiAgICAgICAgcmV0dXJu
IE51bWJlcihzZWxlY3QudGFiSW5kZXgoKSk7CiAgICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNl
IElEX0gxOgotICBjYXNlIElEX0gyOgotICBjYXNlIElEX0gzOgotICBjYXNlIElEX0g0OgotICBj
YXNlIElEX0g1OgotICBjYXNlIElEX0g2OiB7Ci0gICAgSFRNTEhlYWRpbmdFbGVtZW50SW1wbCAm
aGVhZGluZyA9IHN0YXRpY19jYXN0PEhUTUxIZWFkaW5nRWxlbWVudEltcGwgJj4oZWxlbWVudCk7
CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6b3B0R3Jv
dXBHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTE9w
dEdyb3VwRWxlbWVudEltcGwmIG9wdGdyb3VwID0gKnN0YXRpY19jYXN0PEhUTUxPcHRHcm91cEVs
ZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBIZWFk
aW5nQWxpZ246ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGhlYWRpbmcuYWxpZ24oKSk7CisgICAg
ICAgIGNhc2UgT3B0R3JvdXBEaXNhYmxlZDogICAgICAgIHJldHVybiBCb29sZWFuKG9wdGdyb3Vw
LmRpc2FibGVkKCkpOworICAgICAgICBjYXNlIE9wdEdyb3VwTGFiZWw6ICAgICAgICAgICByZXR1
cm4gU3RyaW5nKG9wdGdyb3VwLmxhYmVsKCkpOwogICAgIH0KLSAgfQotICBicmVhazsKLSAgY2Fz
ZSBJRF9CTE9DS1FVT1RFOiB7Ci0gICAgSFRNTEJsb2NrcXVvdGVFbGVtZW50SW1wbCAmYmxvY2tx
dW90ZSA9IHN0YXRpY19jYXN0PEhUTUxCbG9ja3F1b3RlRWxlbWVudEltcGwgJj4oZWxlbWVudCk7
CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6b3B0aW9u
R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxPcHRp
b25FbGVtZW50SW1wbCYgb3B0aW9uID0gKnN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50SW1w
bCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgQmxvY2tRdW90ZUNp
dGU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhibG9ja3F1b3RlLmNpdGUoKSk7CisgICAgICAg
IGNhc2UgT3B0aW9uRm9ybTogICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLG9wdGlv
bi5mb3JtKCkpOyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVudAorICAgICAgICBjYXNlIE9wdGlvbkRl
ZmF1bHRTZWxlY3RlZDogcmV0dXJuIEJvb2xlYW4ob3B0aW9uLmRlZmF1bHRTZWxlY3RlZCgpKTsK
KyAgICAgICAgY2FzZSBPcHRpb25UZXh0OiAgICAgICAgICAgIHJldHVybiBTdHJpbmcob3B0aW9u
LnRleHQoKSk7CisgICAgICAgIGNhc2UgT3B0aW9uSW5kZXg6ICAgICAgICAgICByZXR1cm4gTnVt
YmVyKG9wdGlvbi5pbmRleCgpKTsKKyAgICAgICAgY2FzZSBPcHRpb25EaXNhYmxlZDogICAgICAg
IHJldHVybiBCb29sZWFuKG9wdGlvbi5kaXNhYmxlZCgpKTsKKyAgICAgICAgY2FzZSBPcHRpb25M
YWJlbDogICAgICAgICAgIHJldHVybiBTdHJpbmcob3B0aW9uLmxhYmVsKCkpOworICAgICAgICBj
YXNlIE9wdGlvblNlbGVjdGVkOiAgICAgICAgcmV0dXJuIEJvb2xlYW4ob3B0aW9uLnNlbGVjdGVk
KCkpOworICAgICAgICBjYXNlIE9wdGlvblZhbHVlOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhv
cHRpb24udmFsdWUoKSk7CiAgICAgfQotICB9Ci0gIGNhc2UgSURfUTogewotICAgIEhUTUxRdW90
ZUVsZW1lbnRJbXBsICZxdW90ZSA9IHN0YXRpY19jYXN0PEhUTUxRdW90ZUVsZW1lbnRJbXBsICY+
KGVsZW1lbnQpOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1l
bnQ6OmlucHV0R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAg
IEhUTUxJbnB1dEVsZW1lbnRJbXBsJiBpbnB1dCA9ICpzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVt
ZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgUXVvdGVD
aXRlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcocXVvdGUuY2l0ZSgpKTsKKyAgICAgICAgY2Fz
ZSBJbnB1dERlZmF1bHRWYWx1ZTogICAgcmV0dXJuIFN0cmluZyhpbnB1dC5kZWZhdWx0VmFsdWUo
KSk7CisgICAgICAgIGNhc2UgSW5wdXREZWZhdWx0Q2hlY2tlZDogIHJldHVybiBCb29sZWFuKGlu
cHV0LmRlZmF1bHRDaGVja2VkKCkpOworICAgICAgICBjYXNlIElucHV0Rm9ybTogICAgICAgICAg
ICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLGlucHV0LmZvcm0oKSk7IC8vIHR5cGUgSFRNTEZvcm1F
bGVtZW50CisgICAgICAgIGNhc2UgSW5wdXRBY2NlcHQ6ICAgICAgICAgIHJldHVybiBTdHJpbmco
aW5wdXQuYWNjZXB0KCkpOworICAgICAgICBjYXNlIElucHV0QWNjZXNzS2V5OiAgICAgICByZXR1
cm4gU3RyaW5nKGlucHV0LmFjY2Vzc0tleSgpKTsKKyAgICAgICAgY2FzZSBJbnB1dEFsaWduOiAg
ICAgICAgICAgcmV0dXJuIFN0cmluZyhpbnB1dC5hbGlnbigpKTsKKyAgICAgICAgY2FzZSBJbnB1
dEFsdDogICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpbnB1dC5hbHQoKSk7CisgICAgICAgIGNh
c2UgSW5wdXRDaGVja2VkOiAgICAgICAgIHJldHVybiBCb29sZWFuKGlucHV0LmNoZWNrZWQoKSk7
CisgICAgICAgIGNhc2UgSW5wdXREaXNhYmxlZDogICAgICAgIHJldHVybiBCb29sZWFuKGlucHV0
LmRpc2FibGVkKCkpOworICAgICAgICBjYXNlIElucHV0TWF4TGVuZ3RoOiAgICAgICByZXR1cm4g
TnVtYmVyKGlucHV0Lm1heExlbmd0aCgpKTsKKyAgICAgICAgY2FzZSBJbnB1dE5hbWU6ICAgICAg
ICAgICAgcmV0dXJuIFN0cmluZyhpbnB1dC5uYW1lKCkpOworICAgICAgICBjYXNlIElucHV0UmVh
ZE9ubHk6ICAgICAgICByZXR1cm4gQm9vbGVhbihpbnB1dC5yZWFkT25seSgpKTsKKyAgICAgICAg
Y2FzZSBJbnB1dFNpemU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpbnB1dC5zaXplRE9NKCkp
OworICAgICAgICBjYXNlIElucHV0U3JjOiAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGlucHV0
LnNyYygpKTsKKyAgICAgICAgY2FzZSBJbnB1dFRhYkluZGV4OiAgICAgICAgcmV0dXJuIE51bWJl
cihpbnB1dC50YWJJbmRleCgpKTsKKyAgICAgICAgY2FzZSBJbnB1dFR5cGU6ICAgICAgICAgICAg
cmV0dXJuIFN0cmluZyhpbnB1dC50eXBlKCkpOworICAgICAgICBjYXNlIElucHV0VXNlTWFwOiAg
ICAgICAgICByZXR1cm4gU3RyaW5nKGlucHV0LnVzZU1hcCgpKTsKKyAgICAgICAgY2FzZSBJbnB1
dFZhbHVlOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpbnB1dC52YWx1ZSgpKTsKICAgICB9Ci0g
IH0KLSAgY2FzZSBJRF9QUkU6IHsKLSAgICBIVE1MUHJlRWxlbWVudEltcGwgJnByZSA9IHN0YXRp
Y19jYXN0PEhUTUxQcmVFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICByZXR1cm4gVW5kZWZp
bmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50Ojp0ZXh0QXJlYUdldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MVGV4dEFyZWFFbGVtZW50SW1wbCYg
dGV4dGFyZWEgPSAqc3RhdGljX2Nhc3Q8SFRNTFRleHRBcmVhRWxlbWVudEltcGwqPihpbXBsKCkp
OwogICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIFByZVdpZHRoOiAgICAgICAgICAgcmV0
dXJuIE51bWJlcihwcmUud2lkdGgoKSk7CisgICAgICAgIGNhc2UgVGV4dEFyZWFEZWZhdWx0VmFs
dWU6ICAgIHJldHVybiBTdHJpbmcodGV4dGFyZWEuZGVmYXVsdFZhbHVlKCkpOworICAgICAgICBj
YXNlIFRleHRBcmVhRm9ybTogICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLHRleHRh
cmVhLmZvcm0oKSk7IC8vIHR5cGUgSFRNTEZvcm1FbGVtZW50CisgICAgICAgIGNhc2UgVGV4dEFy
ZWFBY2Nlc3NLZXk6ICAgICAgIHJldHVybiBTdHJpbmcodGV4dGFyZWEuYWNjZXNzS2V5KCkpOwor
ICAgICAgICBjYXNlIFRleHRBcmVhQ29sczogICAgICAgICAgICByZXR1cm4gTnVtYmVyKHRleHRh
cmVhLmNvbHMoKSk7CisgICAgICAgIGNhc2UgVGV4dEFyZWFEaXNhYmxlZDogICAgICAgIHJldHVy
biBCb29sZWFuKHRleHRhcmVhLmRpc2FibGVkKCkpOworICAgICAgICBjYXNlIFRleHRBcmVhTmFt
ZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRleHRhcmVhLm5hbWUoKSk7CisgICAgICAgIGNh
c2UgVGV4dEFyZWFSZWFkT25seTogICAgICAgIHJldHVybiBCb29sZWFuKHRleHRhcmVhLnJlYWRP
bmx5KCkpOworICAgICAgICBjYXNlIFRleHRBcmVhUm93czogICAgICAgICAgICByZXR1cm4gTnVt
YmVyKHRleHRhcmVhLnJvd3MoKSk7CisgICAgICAgIGNhc2UgVGV4dEFyZWFUYWJJbmRleDogICAg
ICAgIHJldHVybiBOdW1iZXIodGV4dGFyZWEudGFiSW5kZXgoKSk7CisgICAgICAgIGNhc2UgVGV4
dEFyZWFUeXBlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcodGV4dGFyZWEudHlwZSgpKTsKKyAg
ICAgICAgY2FzZSBUZXh0QXJlYVZhbHVlOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0ZXh0YXJl
YS52YWx1ZSgpKTsKICAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfQlI6IHsKLSAgICBI
VE1MQlJFbGVtZW50SW1wbCAmYnIgPSBzdGF0aWNfY2FzdDxIVE1MQlJFbGVtZW50SW1wbCAmPihl
bGVtZW50KTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50
OjpidXR0b25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAg
SFRNTEJ1dHRvbkVsZW1lbnRJbXBsJiBidXR0b24gPSAqc3RhdGljX2Nhc3Q8SFRNTEJ1dHRvbkVs
ZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBCUkNs
ZWFyOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhici5jbGVhcigpKTsKLSAgICB9Ci0gIH0KLSAg
YnJlYWs7Ci0gIGNhc2UgSURfQkFTRUZPTlQ6IHsKLSAgICBIVE1MQmFzZUZvbnRFbGVtZW50SW1w
bCAmYmFzZUZvbnQgPSBzdGF0aWNfY2FzdDxIVE1MQmFzZUZvbnRFbGVtZW50SW1wbCAmPihlbGVt
ZW50KTsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBCYXNlRm9udENvbG9yOiAgICAg
ICAgICAgcmV0dXJuIFN0cmluZyhiYXNlRm9udC5jb2xvcigpKTsKLSAgICBjYXNlIEJhc2VGb250
RmFjZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGJhc2VGb250LmZhY2UoKSk7Ci0gICAgY2Fz
ZSBCYXNlRm9udFNpemU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhiYXNlRm9udC5zaXplKCkp
OwotICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9GT05UOiB7Ci0gICAgSFRNTEZvbnRF
bGVtZW50SW1wbCAmZm9udCA9IHN0YXRpY19jYXN0PEhUTUxGb250RWxlbWVudEltcGwgJj4oZWxl
bWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgRm9udENvbG9yOiAgICAgICAg
ICAgcmV0dXJuIFN0cmluZyhmb250LmNvbG9yKCkpOwotICAgIGNhc2UgRm9udEZhY2U6ICAgICAg
ICAgICAgcmV0dXJuIFN0cmluZyhmb250LmZhY2UoKSk7Ci0gICAgY2FzZSBGb250U2l6ZTogICAg
ICAgICAgICByZXR1cm4gU3RyaW5nKGZvbnQuc2l6ZSgpKTsKLSAgICB9Ci0gIH0KLSAgYnJlYWs7
Ci0gIGNhc2UgSURfSFI6IHsKLSAgICBIVE1MSFJFbGVtZW50SW1wbCAmaHIgPSBzdGF0aWNfY2Fz
dDxIVE1MSFJFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0g
ICAgY2FzZSBIUkFsaWduOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhoci5hbGlnbigpKTsKLSAg
ICBjYXNlIEhSTm9TaGFkZTogICAgICAgICByZXR1cm4gQm9vbGVhbihoci5ub1NoYWRlKCkpOwot
ICAgIGNhc2UgSFJTaXplOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoaHIuc2l6ZSgpKTsKLSAg
ICBjYXNlIEhSV2lkdGg6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGhyLndpZHRoKCkpOworICAg
ICAgICBjYXNlIEJ1dHRvbkZvcm06ICAgICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyxi
dXR0b24uZm9ybSgpKTsgLy8gdHlwZSBIVE1MRm9ybUVsZW1lbnQKKyAgICAgICAgY2FzZSBCdXR0
b25BY2Nlc3NLZXk6ICAgICAgIHJldHVybiBTdHJpbmcoYnV0dG9uLmFjY2Vzc0tleSgpKTsKKyAg
ICAgICAgY2FzZSBCdXR0b25EaXNhYmxlZDogICAgICAgIHJldHVybiBCb29sZWFuKGJ1dHRvbi5k
aXNhYmxlZCgpKTsKKyAgICAgICAgY2FzZSBCdXR0b25OYW1lOiAgICAgICAgICAgIHJldHVybiBT
dHJpbmcoYnV0dG9uLm5hbWUoKSk7CisgICAgICAgIGNhc2UgQnV0dG9uVGFiSW5kZXg6ICAgICAg
ICByZXR1cm4gTnVtYmVyKGJ1dHRvbi50YWJJbmRleCgpKTsKKyAgICAgICAgY2FzZSBCdXR0b25U
eXBlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYnV0dG9uLnR5cGUoKSk7CisgICAgICAgIGNh
c2UgQnV0dG9uVmFsdWU6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGJ1dHRvbi52YWx1ZSgpKTsK
ICAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfSU5TOgotICBjYXNlIElEX0RFTDogewot
ICAgIEhUTUxNb2RFbGVtZW50SW1wbCAmbW9kID0gc3RhdGljX2Nhc3Q8SFRNTE1vZEVsZW1lbnRJ
bXBsICY+KGVsZW1lbnQpOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRN
TEVsZW1lbnQ6OmxhYmVsR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAor
eworICAgIEhUTUxMYWJlbEVsZW1lbnRJbXBsJiBsYWJlbCA9ICpzdGF0aWNfY2FzdDxIVE1MTGFi
ZWxFbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2Ug
TW9kQ2l0ZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKG1vZC5jaXRlKCkpOwotICAgIGNhc2Ug
TW9kRGF0ZVRpbWU6ICAgICAgICByZXR1cm4gU3RyaW5nKG1vZC5kYXRlVGltZSgpKTsKKyAgICAg
ICAgY2FzZSBMYWJlbEZvcm06ICAgICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyxsYWJl
bC5mb3JtKCkpOyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVudAorICAgICAgICBjYXNlIExhYmVsQWNj
ZXNzS2V5OiAgICAgICByZXR1cm4gU3RyaW5nKGxhYmVsLmFjY2Vzc0tleSgpKTsKKyAgICAgICAg
Y2FzZSBMYWJlbEh0bWxGb3I6ICAgICAgICAgcmV0dXJuIFN0cmluZyhsYWJlbC5odG1sRm9yKCkp
OwogICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9BOiB7Ci0gICAgSFRNTEFuY2hvckVs
ZW1lbnRJbXBsICZhbmNob3IgPSBzdGF0aWNfY2FzdDxIVE1MQW5jaG9yRWxlbWVudEltcGwgJj4o
ZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgQW5jaG9yQWNjZXNzS2V5
OiAgICAgICByZXR1cm4gU3RyaW5nKGFuY2hvci5hY2Nlc3NLZXkoKSk7Ci0gICAgY2FzZSBBbmNo
b3JDaGFyc2V0OiAgICAgICAgIHJldHVybiBTdHJpbmcoYW5jaG9yLmNoYXJzZXQoKSk7Ci0gICAg
Y2FzZSBBbmNob3JDb29yZHM6ICAgICAgICAgIHJldHVybiBTdHJpbmcoYW5jaG9yLmNvb3Jkcygp
KTsKLSAgICBjYXNlIEFuY2hvckhyZWY6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhhbmNob3Iu
aHJlZigpKTsKLSAgICBjYXNlIEFuY2hvckhyZWZMYW5nOiAgICAgICAgcmV0dXJuIFN0cmluZyhh
bmNob3IuaHJlZmxhbmcoKSk7Ci0gICAgY2FzZSBBbmNob3JIYXNoOiAgICAgICAgICAgIHJldHVy
biBTdHJpbmcoJyMnK0tVUkwoYW5jaG9yLmhyZWYoKS5zdHJpbmcoKSkucmVmKCkpOwotICAgIGNh
c2UgQW5jaG9ySG9zdDogICAgICAgICAgICByZXR1cm4gU3RyaW5nKEtVUkwoYW5jaG9yLmhyZWYo
KS5zdHJpbmcoKSkuaG9zdCgpKTsKLSAgICBjYXNlIEFuY2hvckhvc3RuYW1lOiB7Ci0gICAgICBL
VVJMIHVybChhbmNob3IuaHJlZigpLnN0cmluZygpKTsKLSAgICAgIGtkRGVidWcoNjA3MCkgPDwg
ImFuY2hvcjo6aG9zdG5hbWUgdXNlczoiIDw8dXJsLnVybCgpPDxlbmRsOwotICAgICAgaWYgKHVy
bC5wb3J0KCk9PTApCi0gICAgICAgIHJldHVybiBTdHJpbmcodXJsLmhvc3QoKSk7Ci0gICAgICBl
bHNlCi0gICAgICAgIHJldHVybiBTdHJpbmcodXJsLmhvc3QoKSArICI6IiArIFFTdHJpbmc6Om51
bWJlcih1cmwucG9ydCgpKSk7Ci0gICAgfQotICAgIGNhc2UgQW5jaG9yUGF0aE5hbWU6ICAgICAg
ICByZXR1cm4gU3RyaW5nKEtVUkwoYW5jaG9yLmhyZWYoKS5zdHJpbmcoKSkucGF0aCgpKTsKLSAg
ICBjYXNlIEFuY2hvclBvcnQ6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhRU3RyaW5nOjpudW1i
ZXIoS1VSTChhbmNob3IuaHJlZigpLnN0cmluZygpKS5wb3J0KCkpKTsKLSAgICBjYXNlIEFuY2hv
clByb3RvY29sOiAgICAgICAgcmV0dXJuIFN0cmluZyhLVVJMKGFuY2hvci5ocmVmKCkuc3RyaW5n
KCkpLnByb3RvY29sKCkrIjoiKTsKLSAgICBjYXNlIEFuY2hvclNlYXJjaDogICAgICAgICAgcmV0
dXJuIFN0cmluZyhLVVJMKGFuY2hvci5ocmVmKCkuc3RyaW5nKCkpLnF1ZXJ5KCkpOwotICAgIGNh
c2UgQW5jaG9yTmFtZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGFuY2hvci5uYW1lKCkpOwot
ICAgIGNhc2UgQW5jaG9yUmVsOiAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGFuY2hvci5yZWwo
KSk7Ci0gICAgY2FzZSBBbmNob3JSZXY6ICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYW5jaG9y
LnJldigpKTsKLSAgICBjYXNlIEFuY2hvclNoYXBlOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhh
bmNob3Iuc2hhcGUoKSk7Ci0gICAgY2FzZSBBbmNob3JUYWJJbmRleDogICAgICAgIHJldHVybiBO
dW1iZXIoYW5jaG9yLnRhYkluZGV4KCkpOwotICAgIGNhc2UgQW5jaG9yVGFyZ2V0OiAgICAgICAg
ICByZXR1cm4gU3RyaW5nKGFuY2hvci50YXJnZXQoKSk7Ci0gICAgY2FzZSBBbmNob3JUeXBlOiAg
ICAgICAgICAgIHJldHVybiBTdHJpbmcoYW5jaG9yLnR5cGUoKSk7Ci0gICAgY2FzZSBBbmNob3JU
ZXh0OgotICAgICAgaWYgKERvY3VtZW50SW1wbCogZG9jID0gYW5jaG9yLmdldERvY3VtZW50KCkp
Ci0gICAgICAgIGRvYy0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7Ci0g
ICAgICByZXR1cm4gU3RyaW5nKGFuY2hvci5pbm5lclRleHQoKSk7Ci0gICAgfQotICB9Ci0gIGJy
ZWFrOwotICBjYXNlIElEX0lNRzogewotICAgIEhUTUxJbWFnZUVsZW1lbnRJbXBsICZpbWFnZSA9
IHN0YXRpY19jYXN0PEhUTUxJbWFnZUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgIHN3aXRj
aCAodG9rZW4pIHsKLSAgICBjYXNlIEltYWdlTmFtZTogICAgICAgICAgICByZXR1cm4gU3RyaW5n
KGltYWdlLm5hbWUoKSk7Ci0gICAgY2FzZSBJbWFnZUFsaWduOiAgICAgICAgICAgcmV0dXJuIFN0
cmluZyhpbWFnZS5hbGlnbigpKTsKLSAgICBjYXNlIEltYWdlQWx0OiAgICAgICAgICAgICByZXR1
cm4gU3RyaW5nKGltYWdlLmFsdCgpKTsKLSAgICBjYXNlIEltYWdlQm9yZGVyOiAgICAgICAgICBy
ZXR1cm4gTnVtYmVyKGltYWdlLmJvcmRlcigpKTsKLSAgICBjYXNlIEltYWdlSGVpZ2h0OiAgICAg
ICAgICByZXR1cm4gTnVtYmVyKGltYWdlLmhlaWdodCh0cnVlKSk7Ci0gICAgY2FzZSBJbWFnZUhz
cGFjZTogICAgICAgICAgcmV0dXJuIE51bWJlcihpbWFnZS5oc3BhY2UoKSk7Ci0gICAgY2FzZSBJ
bWFnZUlzTWFwOiAgICAgICAgICAgcmV0dXJuIEJvb2xlYW4oaW1hZ2UuaXNNYXAoKSk7Ci0gICAg
Y2FzZSBJbWFnZUxvbmdEZXNjOiAgICAgICAgcmV0dXJuIFN0cmluZyhpbWFnZS5sb25nRGVzYygp
KTsKLSAgICBjYXNlIEltYWdlU3JjOiAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGltYWdlLnNy
YygpKTsKLSAgICBjYXNlIEltYWdlVXNlTWFwOiAgICAgICAgICByZXR1cm4gU3RyaW5nKGltYWdl
LnVzZU1hcCgpKTsKLSAgICBjYXNlIEltYWdlVnNwYWNlOiAgICAgICAgICByZXR1cm4gTnVtYmVy
KGltYWdlLnZzcGFjZSgpKTsKLSAgICBjYXNlIEltYWdlV2lkdGg6ICAgICAgICAgICByZXR1cm4g
TnVtYmVyKGltYWdlLndpZHRoKHRydWUpKTsKLSAgICBjYXNlIEltYWdlWDogICAgICAgICAgICAg
ICByZXR1cm4gTnVtYmVyKGltYWdlLngoKSk7Ci0gICAgY2FzZSBJbWFnZVk6ICAgICAgICAgICAg
ICAgcmV0dXJuIE51bWJlcihpbWFnZS55KCkpOwotICAgIH0KLSAgfQotICBicmVhazsKLSAgY2Fz
ZSBJRF9PQkpFQ1Q6IHsKLSAgICBIVE1MT2JqZWN0RWxlbWVudEltcGwgJm9iamVjdCA9IHN0YXRp
Y19jYXN0PEhUTUxPYmplY3RFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICBzd2l0Y2ggKHRv
a2VuKSB7Ci0gICAgY2FzZSBPYmplY3RGb3JtOiAgICAgICAgICAgIHJldHVybiBnZXRET01Ob2Rl
KGV4ZWMsb2JqZWN0LmZvcm0oKSk7IC8vIHR5cGUgSFRNTEZvcm1FbGVtZW50Ci0gICAgY2FzZSBP
YmplY3RDb2RlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcob2JqZWN0LmNvZGUoKSk7Ci0gICAg
Y2FzZSBPYmplY3RBbGlnbjogICAgICAgICAgIHJldHVybiBTdHJpbmcob2JqZWN0LmFsaWduKCkp
OwotICAgIGNhc2UgT2JqZWN0QXJjaGl2ZTogICAgICAgICByZXR1cm4gU3RyaW5nKG9iamVjdC5h
cmNoaXZlKCkpOwotICAgIGNhc2UgT2JqZWN0Qm9yZGVyOiAgICAgICAgICByZXR1cm4gU3RyaW5n
KG9iamVjdC5ib3JkZXIoKSk7Ci0gICAgY2FzZSBPYmplY3RDb2RlQmFzZTogICAgICAgIHJldHVy
biBTdHJpbmcob2JqZWN0LmNvZGVCYXNlKCkpOwotICAgIGNhc2UgT2JqZWN0Q29kZVR5cGU6ICAg
ICAgICByZXR1cm4gU3RyaW5nKG9iamVjdC5jb2RlVHlwZSgpKTsKLSAgICBjYXNlIE9iamVjdENv
bnRlbnREb2N1bWVudDogcmV0dXJuIGNoZWNrTm9kZVNlY3VyaXR5KGV4ZWMsb2JqZWN0LmNvbnRl
bnREb2N1bWVudCgpKSA/IAotCQkJCSAgICAgICBnZXRET01Ob2RlKGV4ZWMsIG9iamVjdC5jb250
ZW50RG9jdW1lbnQoKSkgOiBVbmRlZmluZWQoKTsKLSAgICBjYXNlIE9iamVjdERhdGE6ICAgICAg
ICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3QuZGF0YSgpKTsKLSAgICBjYXNlIE9iamVjdERlY2xh
cmU6ICAgICAgICAgcmV0dXJuIEJvb2xlYW4ob2JqZWN0LmRlY2xhcmUoKSk7Ci0gICAgY2FzZSBP
YmplY3RIZWlnaHQ6ICAgICAgICAgIHJldHVybiBTdHJpbmcob2JqZWN0LmhlaWdodCgpKTsKLSAg
ICBjYXNlIE9iamVjdEhzcGFjZTogICAgICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3QuaHNwYWNl
KCkpOwotICAgIGNhc2UgT2JqZWN0TmFtZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKG9iamVj
dC5uYW1lKCkpOwotICAgIGNhc2UgT2JqZWN0U3RhbmRieTogICAgICAgICByZXR1cm4gU3RyaW5n
KG9iamVjdC5zdGFuZGJ5KCkpOwotICAgIGNhc2UgT2JqZWN0VGFiSW5kZXg6ICAgICAgICByZXR1
cm4gTnVtYmVyKG9iamVjdC50YWJJbmRleCgpKTsKLSAgICBjYXNlIE9iamVjdFR5cGU6ICAgICAg
ICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3QudHlwZSgpKTsKLSAgICBjYXNlIE9iamVjdFVzZU1h
cDogICAgICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3QudXNlTWFwKCkpOwotICAgIGNhc2UgT2Jq
ZWN0VnNwYWNlOiAgICAgICAgICByZXR1cm4gU3RyaW5nKG9iamVjdC52c3BhY2UoKSk7Ci0gICAg
Y2FzZSBPYmplY3RXaWR0aDogICAgICAgICAgIHJldHVybiBTdHJpbmcob2JqZWN0LndpZHRoKCkp
OwotICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9QQVJBTTogewotICAgIEhUTUxQYXJh
bUVsZW1lbnRJbXBsICZwYXJhbSA9IHN0YXRpY19jYXN0PEhUTUxQYXJhbUVsZW1lbnRJbXBsICY+
KGVsZW1lbnQpOwotICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIFBhcmFtTmFtZTogICAg
ICAgICAgICByZXR1cm4gU3RyaW5nKHBhcmFtLm5hbWUoKSk7Ci0gICAgY2FzZSBQYXJhbVR5cGU6
ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhwYXJhbS50eXBlKCkpOwotICAgIGNhc2UgUGFyYW1W
YWx1ZTogICAgICAgICAgIHJldHVybiBTdHJpbmcocGFyYW0udmFsdWUoKSk7Ci0gICAgY2FzZSBQ
YXJhbVZhbHVlVHlwZTogICAgICAgcmV0dXJuIFN0cmluZyhwYXJhbS52YWx1ZVR5cGUoKSk7Ci0g
ICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX0FQUExFVDogewotICAgIEhUTUxBcHBsZXRF
bGVtZW50SW1wbCAmYXBwbGV0ID0gc3RhdGljX2Nhc3Q8SFRNTEFwcGxldEVsZW1lbnRJbXBsICY+
KGVsZW1lbnQpOwotICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIEFwcGxldEFsaWduOiAg
ICAgICAgICAgcmV0dXJuIFN0cmluZyhhcHBsZXQuYWxpZ24oKSk7Ci0gICAgY2FzZSBBcHBsZXRB
bHQ6ICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYXBwbGV0LmFsdCgpKTsKLSAgICBjYXNlIEFw
cGxldEFyY2hpdmU6ICAgICAgICAgcmV0dXJuIFN0cmluZyhhcHBsZXQuYXJjaGl2ZSgpKTsKLSAg
ICBjYXNlIEFwcGxldENvZGU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhhcHBsZXQuY29kZSgp
KTsKLSAgICBjYXNlIEFwcGxldENvZGVCYXNlOiAgICAgICAgcmV0dXJuIFN0cmluZyhhcHBsZXQu
Y29kZUJhc2UoKSk7Ci0gICAgY2FzZSBBcHBsZXRIZWlnaHQ6ICAgICAgICAgIHJldHVybiBTdHJp
bmcoYXBwbGV0LmhlaWdodCgpKTsKLSAgICBjYXNlIEFwcGxldEhzcGFjZTogICAgICAgICAgcmV0
dXJuIFN0cmluZyhhcHBsZXQuaHNwYWNlKCkpOwotICAgIGNhc2UgQXBwbGV0TmFtZTogICAgICAg
ICAgICByZXR1cm4gU3RyaW5nKGFwcGxldC5uYW1lKCkpOwotICAgIGNhc2UgQXBwbGV0T2JqZWN0
OiAgICAgICAgICByZXR1cm4gU3RyaW5nKGFwcGxldC5vYmplY3QoKSk7Ci0gICAgY2FzZSBBcHBs
ZXRWc3BhY2U6ICAgICAgICAgIHJldHVybiBTdHJpbmcoYXBwbGV0LnZzcGFjZSgpKTsKLSAgICBj
YXNlIEFwcGxldFdpZHRoOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhhcHBsZXQud2lkdGgoKSk7
Ci0gICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX01BUDogewotICAgIEhUTUxNYXBFbGVt
ZW50SW1wbCAmbWFwID0gc3RhdGljX2Nhc3Q8SFRNTE1hcEVsZW1lbnRJbXBsICY+KGVsZW1lbnQp
OworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OmZpZWxk
U2V0R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxG
aWVsZFNldEVsZW1lbnRJbXBsJiBmaWVsZFNldCA9ICpzdGF0aWNfY2FzdDxIVE1MRmllbGRTZXRF
bGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IEZpZWxkU2V0Rm9ybSkKKyAg
ICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyxmaWVsZFNldC5mb3JtKCkpOyAvLyB0eXBlIEhU
TUxGb3JtRWxlbWVudAorICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVs
ZW1lbnQ6OmxlZ2VuZEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sK
KyAgICBIVE1MTGVnZW5kRWxlbWVudEltcGwmIGxlZ2VuZCA9ICpzdGF0aWNfY2FzdDxIVE1MTGVn
ZW5kRWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNl
IE1hcEFyZWFzOiAgICAgICAgICAgcmV0dXJuIGdldEhUTUxDb2xsZWN0aW9uKGV4ZWMsIG1hcC5h
cmVhcygpLmdldCgpKTsgLy8gdHlwZSBIVE1MQ29sbGVjdGlvbgotICAgIGNhc2UgTWFwTmFtZTog
ICAgICAgICAgICByZXR1cm4gU3RyaW5nKG1hcC5uYW1lKCkpOwotICAgIH0KLSAgfQotICBicmVh
azsKLSAgY2FzZSBJRF9BUkVBOiB7Ci0gICAgSFRNTEFyZWFFbGVtZW50SW1wbCAmYXJlYSA9IHN0
YXRpY19jYXN0PEhUTUxBcmVhRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0
b2tlbikgewotICAgIGNhc2UgQXJlYUFjY2Vzc0tleTogICAgICAgcmV0dXJuIFN0cmluZyhhcmVh
LmFjY2Vzc0tleSgpKTsKLSAgICBjYXNlIEFyZWFBbHQ6ICAgICAgICAgICAgIHJldHVybiBTdHJp
bmcoYXJlYS5hbHQoKSk7Ci0gICAgY2FzZSBBcmVhQ29vcmRzOiAgICAgICAgICByZXR1cm4gU3Ry
aW5nKGFyZWEuY29vcmRzKCkpOwotICAgIGNhc2UgQXJlYUhyZWY6ICAgICAgICAgICAgcmV0dXJu
IFN0cmluZyhhcmVhLmhyZWYoKSk7Ci0gICAgY2FzZSBBcmVhSGFzaDogICAgICAgICAgICByZXR1
cm4gU3RyaW5nKCcjJytLVVJMKGFyZWEuaHJlZigpLnN0cmluZygpKS5yZWYoKSk7Ci0gICAgY2Fz
ZSBBcmVhSG9zdDogICAgICAgICAgICByZXR1cm4gU3RyaW5nKEtVUkwoYXJlYS5ocmVmKCkuc3Ry
aW5nKCkpLmhvc3QoKSk7Ci0gICAgY2FzZSBBcmVhSG9zdE5hbWU6IHsKLSAgICAgIEtVUkwgdXJs
KGFyZWEuaHJlZigpLnN0cmluZygpKTsKLSAgICAgIGtkRGVidWcoNjA3MCkgPDwgImxpbms6Omhv
c3RuYW1lIHVzZXM6IiA8PHVybC51cmwoKTw8ZW5kbDsKLSAgICAgIGlmICh1cmwucG9ydCgpPT0w
KQotICAgICAgICByZXR1cm4gU3RyaW5nKHVybC5ob3N0KCkpOwotICAgICAgZWxzZQotICAgICAg
ICByZXR1cm4gU3RyaW5nKHVybC5ob3N0KCkgKyAiOiIgKyBRU3RyaW5nOjpudW1iZXIodXJsLnBv
cnQoKSkpOworICAgICAgICBjYXNlIExlZ2VuZEZvcm06ICAgICAgICAgICAgcmV0dXJuIGdldERP
TU5vZGUoZXhlYyxsZWdlbmQuZm9ybSgpKTsgLy8gdHlwZSBIVE1MRm9ybUVsZW1lbnQKKyAgICAg
ICAgY2FzZSBMZWdlbmRBY2Nlc3NLZXk6ICAgICAgIHJldHVybiBTdHJpbmcobGVnZW5kLmFjY2Vz
c0tleSgpKTsKKyAgICAgICAgY2FzZSBMZWdlbmRBbGlnbjogICAgICAgICAgIHJldHVybiBTdHJp
bmcobGVnZW5kLmFsaWduKCkpOwogICAgIH0KLSAgICBjYXNlIEFyZWFQYXRoTmFtZTogICAgICAg
IHJldHVybiBTdHJpbmcoS1VSTChhcmVhLmhyZWYoKS5zdHJpbmcoKSkucGF0aCgpKTsKLSAgICBj
YXNlIEFyZWFQb3J0OiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoUVN0cmluZzo6bnVtYmVyKEtV
UkwoYXJlYS5ocmVmKCkuc3RyaW5nKCkpLnBvcnQoKSkpOwotICAgIGNhc2UgQXJlYVByb3RvY29s
OiAgICAgICAgcmV0dXJuIFN0cmluZyhLVVJMKGFyZWEuaHJlZigpLnN0cmluZygpKS5wcm90b2Nv
bCgpKyI6Iik7Ci0gICAgY2FzZSBBcmVhU2VhcmNoOiAgICAgICAgICByZXR1cm4gU3RyaW5nKEtV
UkwoYXJlYS5ocmVmKCkuc3RyaW5nKCkpLnF1ZXJ5KCkpOwotICAgIGNhc2UgQXJlYU5vSHJlZjog
ICAgICAgICAgcmV0dXJuIEJvb2xlYW4oYXJlYS5ub0hyZWYoKSk7Ci0gICAgY2FzZSBBcmVhU2hh
cGU6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGFyZWEuc2hhcGUoKSk7Ci0gICAgY2FzZSBBcmVh
VGFiSW5kZXg6ICAgICAgICByZXR1cm4gTnVtYmVyKGFyZWEudGFiSW5kZXgoKSk7Ci0gICAgY2Fz
ZSBBcmVhVGFyZ2V0OiAgICAgICAgICByZXR1cm4gU3RyaW5nKGFyZWEudGFyZ2V0KCkpOwotICAg
IH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9TQ1JJUFQ6IHsKLSAgICBIVE1MU2NyaXB0RWxl
bWVudEltcGwgJnNjcmlwdCA9IHN0YXRpY19jYXN0PEhUTUxTY3JpcHRFbGVtZW50SW1wbCAmPihl
bGVtZW50KTsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBTY3JpcHRUZXh0OiAgICAg
ICAgICAgIHJldHVybiBTdHJpbmcoc2NyaXB0LnRleHQoKSk7Ci0gICAgY2FzZSBTY3JpcHRIdG1s
Rm9yOiAgICAgICAgIHJldHVybiBTdHJpbmcoc2NyaXB0Lmh0bWxGb3IoKSk7Ci0gICAgY2FzZSBT
Y3JpcHRFdmVudDogICAgICAgICAgIHJldHVybiBTdHJpbmcoc2NyaXB0LmV2ZW50KCkpOwotICAg
IGNhc2UgU2NyaXB0Q2hhcnNldDogICAgICAgICByZXR1cm4gU3RyaW5nKHNjcmlwdC5jaGFyc2V0
KCkpOwotICAgIGNhc2UgU2NyaXB0RGVmZXI6ICAgICAgICAgICByZXR1cm4gQm9vbGVhbihzY3Jp
cHQuZGVmZXIoKSk7Ci0gICAgY2FzZSBTY3JpcHRTcmM6ICAgICAgICAgICAgIHJldHVybiBTdHJp
bmcoc2NyaXB0LnNyYygpKTsKLSAgICBjYXNlIFNjcmlwdFR5cGU6ICAgICAgICAgICAgcmV0dXJu
IFN0cmluZyhzY3JpcHQudHlwZSgpKTsKLSAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURf
VEFCTEU6IHsKLSAgICBIVE1MVGFibGVFbGVtZW50SW1wbCAmdGFibGUgPSBzdGF0aWNfY2FzdDxI
VE1MVGFibGVFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0g
ICAgY2FzZSBUYWJsZUNhcHRpb246ICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyx0YWJs
ZS5jYXB0aW9uKCkpOyAvLyB0eXBlIEhUTUxUYWJsZUNhcHRpb25FbGVtZW50Ci0gICAgY2FzZSBU
YWJsZVRIZWFkOiAgICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyx0YWJsZS50SGVhZCgp
KTsgLy8gdHlwZSBIVE1MVGFibGVTZWN0aW9uRWxlbWVudAotICAgIGNhc2UgVGFibGVURm9vdDog
ICAgICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsdGFibGUudEZvb3QoKSk7IC8vIHR5cGUg
SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQKLSAgICBjYXNlIFRhYmxlUm93czogICAgICAgICAgICBy
ZXR1cm4gZ2V0SFRNTENvbGxlY3Rpb24oZXhlYywgdGFibGUucm93cygpLmdldCgpKTsgLy8gdHlw
ZSBIVE1MQ29sbGVjdGlvbgotICAgIGNhc2UgVGFibGVUQm9kaWVzOiAgICAgICAgIHJldHVybiBn
ZXRIVE1MQ29sbGVjdGlvbihleGVjLCB0YWJsZS50Qm9kaWVzKCkuZ2V0KCkpOyAvLyB0eXBlIEhU
TUxDb2xsZWN0aW9uCi0gICAgY2FzZSBUYWJsZUFsaWduOiAgICAgICAgICAgcmV0dXJuIFN0cmlu
Zyh0YWJsZS5hbGlnbigpKTsKLSAgICBjYXNlIFRhYmxlQmdDb2xvcjogICAgICAgICByZXR1cm4g
U3RyaW5nKHRhYmxlLmJnQ29sb3IoKSk7Ci0gICAgY2FzZSBUYWJsZUJvcmRlcjogICAgICAgICAg
cmV0dXJuIFN0cmluZyh0YWJsZS5ib3JkZXIoKSk7Ci0gICAgY2FzZSBUYWJsZUNlbGxQYWRkaW5n
OiAgICAgcmV0dXJuIFN0cmluZyh0YWJsZS5jZWxsUGFkZGluZygpKTsKLSAgICBjYXNlIFRhYmxl
Q2VsbFNwYWNpbmc6ICAgICByZXR1cm4gU3RyaW5nKHRhYmxlLmNlbGxTcGFjaW5nKCkpOwotICAg
IGNhc2UgVGFibGVGcmFtZTogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGUuZnJhbWUoKSk7
Ci0gICAgY2FzZSBUYWJsZVJ1bGVzOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZS5ydWxl
cygpKTsKLSAgICBjYXNlIFRhYmxlU3VtbWFyeTogICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxl
LnN1bW1hcnkoKSk7Ci0gICAgY2FzZSBUYWJsZVdpZHRoOiAgICAgICAgICAgcmV0dXJuIFN0cmlu
Zyh0YWJsZS53aWR0aCgpKTsKLSAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfQ0FQVElP
TjogewotICAgIEhUTUxUYWJsZUNhcHRpb25FbGVtZW50SW1wbCAmdGFibGVDYXB0aW9uID0gc3Rh
dGljX2Nhc3Q8SFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgIHJl
dHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OnVMaXN0R2V0dGVyKEV4
ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxVTGlzdEVsZW1lbnRJ
bXBsJiB1TGlzdCA9ICpzdGF0aWNfY2FzdDxIVE1MVUxpc3RFbGVtZW50SW1wbCo+KGltcGwoKSk7
CiAgICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgVGFibGVDYXB0aW9uQWxpZ246ICAgICAg
IHJldHVybiBTdHJpbmcodGFibGVDYXB0aW9uLmFsaWduKCkpOwotICAgIH0KLSAgfQotICBicmVh
azsKLSAgY2FzZSBJRF9DT0w6IHsKLSAgICBIVE1MVGFibGVDb2xFbGVtZW50SW1wbCAmdGFibGVD
b2wgPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVDb2xFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAg
ICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBUYWJsZUNvbEFsaWduOiAgICAgICAgICAgcmV0
dXJuIFN0cmluZyh0YWJsZUNvbC5hbGlnbigpKTsKLSAgICBjYXNlIFRhYmxlQ29sQ2g6ICAgICAg
ICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ29sLmNoKCkpOwotICAgIGNhc2UgVGFibGVDb2xD
aE9mZjogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVDb2wuY2hPZmYoKSk7Ci0gICAgY2Fz
ZSBUYWJsZUNvbFNwYW46ICAgICAgICAgICAgcmV0dXJuIE51bWJlcih0YWJsZUNvbC5zcGFuKCkp
OwotICAgIGNhc2UgVGFibGVDb2xWQWxpZ246ICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVD
b2wudkFsaWduKCkpOwotICAgIGNhc2UgVGFibGVDb2xXaWR0aDogICAgICAgICAgIHJldHVybiBT
dHJpbmcodGFibGVDb2wud2lkdGgoKSk7Ci0gICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElE
X1RIRUFEOgotICBjYXNlIElEX1RCT0RZOgotICBjYXNlIElEX1RGT09UOiB7Ci0gICAgSFRNTFRh
YmxlU2VjdGlvbkVsZW1lbnRJbXBsICZ0YWJsZVNlY3Rpb24gPSBzdGF0aWNfY2FzdDxIVE1MVGFi
bGVTZWN0aW9uRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewot
ICAgIGNhc2UgVGFibGVTZWN0aW9uQWxpZ246ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxl
U2VjdGlvbi5hbGlnbigpKTsKLSAgICBjYXNlIFRhYmxlU2VjdGlvbkNoOiAgICAgICAgICAgICAg
cmV0dXJuIFN0cmluZyh0YWJsZVNlY3Rpb24uY2goKSk7Ci0gICAgY2FzZSBUYWJsZVNlY3Rpb25D
aE9mZjogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVTZWN0aW9uLmNoT2ZmKCkpOwotICAg
IGNhc2UgVGFibGVTZWN0aW9uVkFsaWduOiAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlU2Vj
dGlvbi52QWxpZ24oKSk7Ci0gICAgY2FzZSBUYWJsZVNlY3Rpb25Sb3dzOiAgICAgICAgICAgIHJl
dHVybiBnZXRIVE1MQ29sbGVjdGlvbihleGVjLCB0YWJsZVNlY3Rpb24ucm93cygpLmdldCgpKTsg
Ly8gdHlwZSBIVE1MQ29sbGVjdGlvbgotICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9U
UjogewotICAgSFRNTFRhYmxlUm93RWxlbWVudEltcGwgJnRhYmxlUm93ID0gc3RhdGljX2Nhc3Q8
SFRNTFRhYmxlUm93RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICBzd2l0Y2ggKHRva2VuKSB7
Ci0gICBjYXNlIFRhYmxlUm93Um93SW5kZXg6ICAgICAgICByZXR1cm4gTnVtYmVyKHRhYmxlUm93
LnJvd0luZGV4KCkpOwotICAgY2FzZSBUYWJsZVJvd1NlY3Rpb25Sb3dJbmRleDogcmV0dXJuIE51
bWJlcih0YWJsZVJvdy5zZWN0aW9uUm93SW5kZXgoKSk7Ci0gICBjYXNlIFRhYmxlUm93Q2VsbHM6
ICAgICAgICAgICByZXR1cm4gZ2V0SFRNTENvbGxlY3Rpb24oZXhlYywgdGFibGVSb3cuY2VsbHMo
KS5nZXQoKSk7IC8vIHR5cGUgSFRNTENvbGxlY3Rpb24KLSAgIGNhc2UgVGFibGVSb3dBbGlnbjog
ICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVSb3cuYWxpZ24oKSk7Ci0gICBjYXNlIFRhYmxl
Um93QmdDb2xvcjogICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlUm93LmJnQ29sb3IoKSk7Ci0g
ICBjYXNlIFRhYmxlUm93Q2g6ICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlUm93LmNo
KCkpOwotICAgY2FzZSBUYWJsZVJvd0NoT2ZmOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJs
ZVJvdy5jaE9mZigpKTsKLSAgIGNhc2UgVGFibGVSb3dWQWxpZ246ICAgICAgICAgIHJldHVybiBT
dHJpbmcodGFibGVSb3cudkFsaWduKCkpOwotICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElE
X1RIOgotICBjYXNlIElEX1REOiB7Ci0gICAgSFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsICZ0YWJs
ZUNlbGwgPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVDZWxsRWxlbWVudEltcGwgJj4oZWxlbWVudCk7
Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgVGFibGVDZWxsQ2VsbEluZGV4OiAgICAg
ICByZXR1cm4gTnVtYmVyKHRhYmxlQ2VsbC5jZWxsSW5kZXgoKSk7Ci0gICAgY2FzZSBUYWJsZUNl
bGxBYmJyOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVDZWxsLmFiYnIoKSk7Ci0gICAg
Y2FzZSBUYWJsZUNlbGxBbGlnbjogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVDZWxsLmFs
aWduKCkpOwotICAgIGNhc2UgVGFibGVDZWxsQXhpczogICAgICAgICAgICByZXR1cm4gU3RyaW5n
KHRhYmxlQ2VsbC5heGlzKCkpOwotICAgIGNhc2UgVGFibGVDZWxsQmdDb2xvcjogICAgICAgICBy
ZXR1cm4gU3RyaW5nKHRhYmxlQ2VsbC5iZ0NvbG9yKCkpOwotICAgIGNhc2UgVGFibGVDZWxsQ2g6
ICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ2VsbC5jaCgpKTsKLSAgICBjYXNlIFRh
YmxlQ2VsbENoT2ZmOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNlbGwuY2hPZmYoKSk7
Ci0gICAgY2FzZSBUYWJsZUNlbGxDb2xTcGFuOiAgICAgICAgIHJldHVybiBOdW1iZXIodGFibGVD
ZWxsLmNvbFNwYW4oKSk7Ci0gICAgY2FzZSBUYWJsZUNlbGxIZWFkZXJzOiAgICAgICAgIHJldHVy
biBTdHJpbmcodGFibGVDZWxsLmhlYWRlcnMoKSk7Ci0gICAgY2FzZSBUYWJsZUNlbGxIZWlnaHQ6
ICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVDZWxsLmhlaWdodCgpKTsKLSAgICBjYXNlIFRh
YmxlQ2VsbE5vV3JhcDogICAgICAgICAgcmV0dXJuIEJvb2xlYW4odGFibGVDZWxsLm5vV3JhcCgp
KTsKLSAgICBjYXNlIFRhYmxlQ2VsbFJvd1NwYW46ICAgICAgICAgcmV0dXJuIE51bWJlcih0YWJs
ZUNlbGwucm93U3BhbigpKTsKLSAgICBjYXNlIFRhYmxlQ2VsbFNjb3BlOiAgICAgICAgICAgcmV0
dXJuIFN0cmluZyh0YWJsZUNlbGwuc2NvcGUoKSk7Ci0gICAgY2FzZSBUYWJsZUNlbGxWQWxpZ246
ICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVDZWxsLnZBbGlnbigpKTsKLSAgICBjYXNlIFRh
YmxlQ2VsbFdpZHRoOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNlbGwud2lkdGgoKSk7
CisgICAgICAgIGNhc2UgVUxpc3RDb21wYWN0OiAgICAgICAgIHJldHVybiBCb29sZWFuKHVMaXN0
LmNvbXBhY3QoKSk7CisgICAgICAgIGNhc2UgVUxpc3RUeXBlOiAgICAgICAgICAgIHJldHVybiBT
dHJpbmcodUxpc3QudHlwZSgpKTsKICAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfRlJB
TUVTRVQ6IHsKLSAgICBIVE1MRnJhbWVTZXRFbGVtZW50SW1wbCAmZnJhbWVTZXQgPSBzdGF0aWNf
Y2FzdDxIVE1MRnJhbWVTZXRFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICByZXR1cm4gVW5k
ZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50OjpvTGlzdEdldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MT0xpc3RFbGVtZW50SW1wbCYgb0xp
c3QgPSAqc3RhdGljX2Nhc3Q8SFRNTE9MaXN0RWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIHN3
aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIEZyYW1lU2V0Q29sczogICAgICAgICAgICByZXR1cm4g
U3RyaW5nKGZyYW1lU2V0LmNvbHMoKSk7Ci0gICAgY2FzZSBGcmFtZVNldFJvd3M6ICAgICAgICAg
ICAgcmV0dXJuIFN0cmluZyhmcmFtZVNldC5yb3dzKCkpOwotICAgIH0KLSAgfQotICBicmVhazsK
LSAgY2FzZSBJRF9GUkFNRTogewotICAgIEhUTUxGcmFtZUVsZW1lbnRJbXBsICZmcmFtZUVsZW1l
bnQgPSBzdGF0aWNfY2FzdDxIVE1MRnJhbWVFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICBz
d2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBGcmFtZUNvbnRlbnREb2N1bWVudDogcmV0dXJuIGNo
ZWNrTm9kZVNlY3VyaXR5KGV4ZWMsZnJhbWVFbGVtZW50LmNvbnRlbnREb2N1bWVudCgpKSA/IAot
CQkJCSAgICAgIGdldERPTU5vZGUoZXhlYywgZnJhbWVFbGVtZW50LmNvbnRlbnREb2N1bWVudCgp
KSA6IFVuZGVmaW5lZCgpOwotICAgIGNhc2UgRnJhbWVDb250ZW50V2luZG93OiAgIHJldHVybiBj
aGVja05vZGVTZWN1cml0eShleGVjLGZyYW1lRWxlbWVudC5jb250ZW50RG9jdW1lbnQoKSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gV2luZG93OjpyZXRyaWV2ZShmcmFt
ZUVsZW1lbnQuY29udGVudFBhcnQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDogVW5kZWZpbmVkKCk7Ci0gICAgY2FzZSBGcmFtZUZyYW1lQm9yZGVyOiAgICAgcmV0dXJu
IFN0cmluZyhmcmFtZUVsZW1lbnQuZnJhbWVCb3JkZXIoKSk7Ci0gICAgY2FzZSBGcmFtZUxvbmdE
ZXNjOiAgICAgICAgcmV0dXJuIFN0cmluZyhmcmFtZUVsZW1lbnQubG9uZ0Rlc2MoKSk7Ci0gICAg
Y2FzZSBGcmFtZU1hcmdpbkhlaWdodDogICAgcmV0dXJuIFN0cmluZyhmcmFtZUVsZW1lbnQubWFy
Z2luSGVpZ2h0KCkpOwotICAgIGNhc2UgRnJhbWVNYXJnaW5XaWR0aDogICAgIHJldHVybiBTdHJp
bmcoZnJhbWVFbGVtZW50Lm1hcmdpbldpZHRoKCkpOwotICAgIGNhc2UgRnJhbWVOYW1lOiAgICAg
ICAgICAgIHJldHVybiBTdHJpbmcoZnJhbWVFbGVtZW50Lm5hbWUoKSk7Ci0gICAgY2FzZSBGcmFt
ZU5vUmVzaXplOiAgICAgICAgcmV0dXJuIEJvb2xlYW4oZnJhbWVFbGVtZW50Lm5vUmVzaXplKCkp
OwotICAgIGNhc2UgRnJhbWVTY3JvbGxpbmc6ICAgICAgIHJldHVybiBTdHJpbmcoZnJhbWVFbGVt
ZW50LnNjcm9sbGluZygpKTsKLSAgICBjYXNlIEZyYW1lU3JjOgotICAgIGNhc2UgRnJhbWVMb2Nh
dGlvbjogICAgICAgIHJldHVybiBTdHJpbmcoZnJhbWVFbGVtZW50LnNyYygpKTsKKyAgICAgICAg
Y2FzZSBPTGlzdENvbXBhY3Q6ICAgICAgICAgcmV0dXJuIEJvb2xlYW4ob0xpc3QuY29tcGFjdCgp
KTsKKyAgICAgICAgY2FzZSBPTGlzdFN0YXJ0OiAgICAgICAgICAgcmV0dXJuIE51bWJlcihvTGlz
dC5zdGFydCgpKTsKKyAgICAgICAgY2FzZSBPTGlzdFR5cGU6ICAgICAgICAgICAgcmV0dXJuIFN0
cmluZyhvTGlzdC50eXBlKCkpOwogICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9JRlJB
TUU6IHsKLSAgICBIVE1MSUZyYW1lRWxlbWVudEltcGwgJmlGcmFtZSA9IHN0YXRpY19jYXN0PEhU
TUxJRnJhbWVFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0g
ICAgY2FzZSBJRnJhbWVBbGlnbjogICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpRnJhbWUu
YWxpZ24oKSk7Ci0gICAgICAvLyAjIyMgc2VjdXJpdHkgY2hlY2sgPwotICAgIGNhc2UgSUZyYW1l
RG9jdW1lbnQ6IC8vIG5vbi1zdGFuZGFyZCwgbWFwcGVkIHRvIGNvbnRlbnREb2N1bWVudAotICAg
IGNhc2UgSUZyYW1lQ29udGVudERvY3VtZW50OiByZXR1cm4gY2hlY2tOb2RlU2VjdXJpdHkoZXhl
YyxpRnJhbWUuY29udGVudERvY3VtZW50KCkpID8gCi0JCQkJICBnZXRET01Ob2RlKGV4ZWMsIGlG
cmFtZS5jb250ZW50RG9jdW1lbnQoKSkgOiBVbmRlZmluZWQoKTsKLSAgICBjYXNlIElGcmFtZUNv
bnRlbnRXaW5kb3c6CXJldHVybiBjaGVja05vZGVTZWN1cml0eShleGVjLGlGcmFtZS5jb250ZW50
RG9jdW1lbnQoKSkgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFdpbmRv
dzo6cmV0cmlldmUoaUZyYW1lLmNvbnRlbnRQYXJ0KCkpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA6IFVuZGVmaW5lZCgpOwotICAgIGNhc2UgSUZyYW1lRnJhbWVCb3JkZXI6
ICAgICByZXR1cm4gU3RyaW5nKGlGcmFtZS5mcmFtZUJvcmRlcigpKTsKLSAgICBjYXNlIElGcmFt
ZUhlaWdodDogICAgICAgICAgcmV0dXJuIFN0cmluZyhpRnJhbWUuaGVpZ2h0KCkpOwotICAgIGNh
c2UgSUZyYW1lTG9uZ0Rlc2M6ICAgICAgICByZXR1cm4gU3RyaW5nKGlGcmFtZS5sb25nRGVzYygp
KTsKLSAgICBjYXNlIElGcmFtZU1hcmdpbkhlaWdodDogICAgcmV0dXJuIFN0cmluZyhpRnJhbWUu
bWFyZ2luSGVpZ2h0KCkpOwotICAgIGNhc2UgSUZyYW1lTWFyZ2luV2lkdGg6ICAgICByZXR1cm4g
U3RyaW5nKGlGcmFtZS5tYXJnaW5XaWR0aCgpKTsKLSAgICBjYXNlIElGcmFtZU5hbWU6ICAgICAg
ICAgICAgcmV0dXJuIFN0cmluZyhpRnJhbWUubmFtZSgpKTsKLSAgICBjYXNlIElGcmFtZVNjcm9s
bGluZzogICAgICAgcmV0dXJuIFN0cmluZyhpRnJhbWUuc2Nyb2xsaW5nKCkpOwotICAgIGNhc2Ug
SUZyYW1lU3JjOiAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGlGcmFtZS5zcmMoKSk7Ci0gICAg
Y2FzZSBJRnJhbWVXaWR0aDogICAgICAgICAgIHJldHVybiBTdHJpbmcoaUZyYW1lLndpZHRoKCkp
OwotICAgIH0KLSAgICBicmVhazsKLSAgfQotICB9IC8vIHhlbWFjcyAob3IgYXJudCkgY291bGQg
YmUgYSBiaXQgc21hcnRlciB3aGVuIGl0IGNvbWVzIHRvIGluZGVudGluZyBzd2l0Y2goKWVzIDsp
Ci0gIC8vIGl0cyBub3QgYXJudCB0byBibGFtZSAtIGl0cyB0aGUgb3JpZ2luYWwgU3Ryb3VzdHJ1
cCBzdHlsZSB3ZSBsaWtlIDopIChEaXJrKQorICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KIAot
ICAvLyBnZW5lcmljIHByb3BlcnRpZXMKLSAgc3dpdGNoICh0b2tlbikgewotICBjYXNlIEVsZW1l
bnRJZDoKLSAgICAgIC8vIGlodC5jb20gcmVsaWVzIG9uIHRoaXMgdmFsdWUgYmVpbmcgIiIgd2hl
biBubyBpZCBpcyBwcmVzZW50LiAgT3RoZXIgYnJvd3NlcnMgZG8gdGhpcyBhcyB3ZWxsLgotICAg
ICAgLy8gU28gd2UgdXNlIFN0cmluZygpIGluc3RlYWQgb2YgU3RyaW5nKCkgaGVyZS4KLSAgICBy
ZXR1cm4gU3RyaW5nKGVsZW1lbnQuaWRET00oKSk7Ci0gIGNhc2UgRWxlbWVudFRpdGxlOgotICAg
IHJldHVybiBTdHJpbmcoZWxlbWVudC50aXRsZSgpKTsKLSAgY2FzZSBFbGVtZW50TGFuZzoKLSAg
ICByZXR1cm4gU3RyaW5nKGVsZW1lbnQubGFuZygpKTsKLSAgY2FzZSBFbGVtZW50RGlyOgotICAg
IHJldHVybiBTdHJpbmcoZWxlbWVudC5kaXIoKSk7Ci0gIGNhc2UgRWxlbWVudENsYXNzTmFtZToK
LSAgICByZXR1cm4gU3RyaW5nKGVsZW1lbnQuY2xhc3NOYW1lKCkpOwotICBjYXNlIEVsZW1lbnRJ
bm5lckhUTUw6Ci0gICAgcmV0dXJuIFN0cmluZyhlbGVtZW50LmlubmVySFRNTCgpKTsKLSAgY2Fz
ZSBFbGVtZW50SW5uZXJUZXh0OgotICAgIGlmIChEb2N1bWVudEltcGwqIGRvYyA9IGltcGwoKS0+
Z2V0RG9jdW1lbnQoKSkKLSAgICAgIGRvYy0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxl
c2hlZXRzKCk7Ci0gICAgcmV0dXJuIFN0cmluZyhlbGVtZW50LmlubmVyVGV4dCgpKTsKLSAgY2Fz
ZSBFbGVtZW50T3V0ZXJIVE1MOgotICAgIHJldHVybiBTdHJpbmcoZWxlbWVudC5vdXRlckhUTUwo
KSk7Ci0gIGNhc2UgRWxlbWVudE91dGVyVGV4dDoKLSAgICByZXR1cm4gU3RyaW5nKGVsZW1lbnQu
b3V0ZXJUZXh0KCkpOwotICBjYXNlIEVsZW1lbnREb2N1bWVudDoKLSAgICByZXR1cm4gZ2V0RE9N
Tm9kZShleGVjLGVsZW1lbnQub3duZXJEb2N1bWVudCgpKTsKLSAgY2FzZSBFbGVtZW50Q2hpbGRy
ZW46Ci0gICAgcmV0dXJuIGdldEhUTUxDb2xsZWN0aW9uKGV4ZWMsIGVsZW1lbnQuY2hpbGRyZW4o
KS5nZXQoKSk7Ci0gIGNhc2UgRWxlbWVudENvbnRlbnRFZGl0YWJsZToKLSAgICByZXR1cm4gU3Ry
aW5nKGVsZW1lbnQuY29udGVudEVkaXRhYmxlKCkpOwotICBjYXNlIEVsZW1lbnRJc0NvbnRlbnRF
ZGl0YWJsZToKLSAgICByZXR1cm4gQm9vbGVhbihlbGVtZW50LmlzQ29udGVudEVkaXRhYmxlKCkp
OwotICAvLyAjIyMgd2hhdCBhYm91dCBzdHlsZT8gb3IgaXMgdGhpcyB1c2VkIGluc3RlYWQgZm9y
IERPTTIgc3R5bGVzaGVldHM/Ci0gIH0KLSAga2RXYXJuaW5nKCkgPDwgIkhUTUxFbGVtZW50Ojpn
ZXRWYWx1ZVByb3BlcnR5IHVuaGFuZGxlZCB0b2tlbiAiIDw8IHRva2VuIDw8IGVuZGw7Ci0gIHJl
dHVybiBVbmRlZmluZWQoKTsKK1ZhbHVlIEhUTUxFbGVtZW50OjpkTGlzdEdldHRlcihFeGVjU3Rh
dGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MRExpc3RFbGVtZW50SW1wbCYg
ZExpc3QgPSAqc3RhdGljX2Nhc3Q8SFRNTERMaXN0RWxlbWVudEltcGwqPihpbXBsKCkpOworICAg
IGlmICh0b2tlbiA9PSBETGlzdENvbXBhY3QpCisgICAgICAgIHJldHVybiBCb29sZWFuKGRMaXN0
LmNvbXBhY3QoKSk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1ib29sIEtKUzo6SFRN
TEVsZW1lbnQ6Omhhc1Byb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAm
cHJvcGVydHlOYW1lKSBjb25zdAorVmFsdWUgSFRNTEVsZW1lbnQ6OmRpckdldHRlcihFeGVjU3Rh
dGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKLSNpZmRlZiBLSlNfVkVSQk9TRQotICAvL2tk
RGVidWcoNjA3MCkgPDwgIkhUTUxFbGVtZW50OjpoYXNQcm9wZXJ0eSAiIDw8IHByb3BlcnR5TmFt
ZS5xc3RyaW5nKCkgPDwgZW5kbDsKLSNlbmRpZgotICBIVE1MRWxlbWVudEltcGwgJmVsZW1lbnQg
PSAqc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KGltcGwoKSk7Ci0gIC8vIEZpcnN0IGxv
b2sgYXQgZHluYW1pYyBwcm9wZXJ0aWVzIC0ga2VlcCB0aGlzIGluIHN5bmMgd2l0aCB0cnlHZXQK
LSAgc3dpdGNoIChlbGVtZW50LmlkKCkpIHsKLSAgICBjYXNlIElEX0ZPUk06IHsKLSAgICAgIEhU
TUxGb3JtRWxlbWVudEltcGwgJmZvcm0gPSBzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnRJbXBs
ICY+KGVsZW1lbnQpOwotICAgICAgLy8gQ2hlY2sgaWYgd2UncmUgcmV0cmlldmluZyBhbiBlbGVt
ZW50IChieSBpbmRleCBvciBieSBuYW1lKQotICAgICAgYm9vbCBvazsKLSAgICAgIHVpbnQgdSA9
IHByb3BlcnR5TmFtZS50b1VMb25nKCZvayk7Ci0gICAgICBpZiAob2sgJiYgZm9ybS5lbGVtZW50
cygpLT5pdGVtKHUpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIGlmIChmb3JtLmVsZW1l
bnRzKCktPm5hbWVkSXRlbShwcm9wZXJ0eU5hbWUuc3RyaW5nKCkpKQotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIElEX1NFTEVDVDogewotICAgICAg
SFRNTFNlbGVjdEVsZW1lbnRJbXBsICZzZWxlY3QgPSBzdGF0aWNfY2FzdDxIVE1MU2VsZWN0RWxl
bWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBib29sIG9rOwotICAgICAgdWludCB1ID0gcHJv
cGVydHlOYW1lLnRvVUxvbmcoJm9rKTsKLSAgICAgIGlmIChvayAmJiBzZWxlY3Qub3B0aW9uc0hU
TUxDb2xsZWN0aW9uKCktPml0ZW0odSkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgYnJl
YWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgfQorICAgIEhUTUxEaXJl
Y3RvcnlFbGVtZW50SW1wbCYgZGlyID0gKnN0YXRpY19jYXN0PEhUTUxEaXJlY3RvcnlFbGVtZW50
SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IERpcmVjdG9yeUNvbXBhY3QpCisgICAg
ICAgIHJldHVybiBCb29sZWFuKGRpci5jb21wYWN0KCkpOworICAgIHJldHVybiBVbmRlZmluZWQo
KTsKK30KIAotICByZXR1cm4gRE9NRWxlbWVudDo6aGFzUHJvcGVydHkoZXhlYywgcHJvcGVydHlO
YW1lKTsKK1ZhbHVlIEhUTUxFbGVtZW50OjptZW51R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50
IHRva2VuKSBjb25zdAoreworICAgIEhUTUxNZW51RWxlbWVudEltcGwmIG1lbnUgPSAqc3RhdGlj
X2Nhc3Q8SFRNTE1lbnVFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IE1l
bnVDb21wYWN0KQorICAgICAgICByZXR1cm4gQm9vbGVhbihtZW51LmNvbXBhY3QoKSk7CisgICAg
cmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1VU3RyaW5nIEtKUzo6SFRNTEVsZW1lbnQ6OnRvU3Ry
aW5nKEV4ZWNTdGF0ZSAqZXhlYykgY29uc3QKK1ZhbHVlIEhUTUxFbGVtZW50OjpsaUdldHRlcihF
eGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKLSAgaWYgKGltcGwoKS0+aWQoKSA9
PSBJRF9BKQotICAgIHJldHVybiBVU3RyaW5nKHN0YXRpY19jYXN0PGNvbnN0IEhUTUxBbmNob3JF
bGVtZW50SW1wbCAqPihpbXBsKCkpLT5ocmVmKCkpOwotICBlbHNlCi0gICAgcmV0dXJuIERPTUVs
ZW1lbnQ6OnRvU3RyaW5nKGV4ZWMpOworICAgIEhUTUxMSUVsZW1lbnRJbXBsJiBsaSA9ICpzdGF0
aWNfY2FzdDxIVE1MTElFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikg
eworICAgICAgICBjYXNlIExJVHlwZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGxpLnR5cGUo
KSk7CisgICAgICAgIGNhc2UgTElWYWx1ZTogICAgICAgICAgIHJldHVybiBOdW1iZXIobGkudmFs
dWUoKSk7CisgICAgfQorICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIEhUTUxG
b3JtRWxlbWVudEltcGwgKmdldEZvcm0oSFRNTEVsZW1lbnRJbXBsICplbGVtZW50KQorVmFsdWUg
SFRNTEVsZW1lbnQ6OmRpdkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QK
IHsKLSAgaWYgKGVsZW1lbnQtPmlzR2VuZXJpY0Zvcm1FbGVtZW50KCkpCi0gICAgcmV0dXJuIHN0
YXRpY19jYXN0PEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsICo+KGVsZW1lbnQpLT5mb3JtKCk7
CisgICAgSFRNTERpdkVsZW1lbnRJbXBsJiBkaXYgPSAqc3RhdGljX2Nhc3Q8SFRNTERpdkVsZW1l
bnRJbXBsKj4oaW1wbCgpKTsKKyAgICBpZiAodG9rZW4gPT0gRGl2QWxpZ24pCisgICAgICAgIHJl
dHVybiBTdHJpbmcoZGl2LmFsaWduKCkpOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KIAot
ICBzd2l0Y2ggKGVsZW1lbnQtPmlkKCkpIHsKLSAgICBjYXNlIElEX0xBQkVMOgotICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PEhUTUxMYWJlbEVsZW1lbnRJbXBsICo+KGVsZW1lbnQpLT5mb3JtKCk7
Ci0gICAgY2FzZSBJRF9PQkpFQ1Q6Ci0gICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTE9iamVj
dEVsZW1lbnRJbXBsICo+KGVsZW1lbnQpLT5mb3JtKCk7Ci0gIH0KK1ZhbHVlIEhUTUxFbGVtZW50
OjpwYXJhZ3JhcGhHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7Cisg
ICAgSFRNTFBhcmFncmFwaEVsZW1lbnRJbXBsJiBwID0gKnN0YXRpY19jYXN0PEhUTUxQYXJhZ3Jh
cGhFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IFBhcmFncmFwaEFsaWdu
KQorICAgICAgICByZXR1cm4gU3RyaW5nKHAuYWxpZ24oKSk7CisgICAgcmV0dXJuIFVuZGVmaW5l
ZCgpOworfQogCi0gIHJldHVybiAwOworVmFsdWUgSFRNTEVsZW1lbnQ6OmhlYWRpbmdHZXR0ZXIo
RXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTEhlYWRpbmdFbGVt
ZW50SW1wbCYgaCA9ICpzdGF0aWNfY2FzdDxIVE1MSGVhZGluZ0VsZW1lbnRJbXBsKj4oaW1wbCgp
KTsKKyAgICBpZiAodG9rZW4gPT0gSGVhZGluZ0FsaWduKQorICAgICAgICByZXR1cm4gU3RyaW5n
KGguYWxpZ24oKSk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi12b2lkIEtKUzo6SFRN
TEVsZW1lbnQ6OnB1c2hFdmVudEhhbmRsZXJTY29wZShFeGVjU3RhdGUgKmV4ZWMsIFNjb3BlQ2hh
aW4gJnNjb3BlKSBjb25zdAorVmFsdWUgSFRNTEVsZW1lbnQ6OmJsb2NrUXVvdGVHZXR0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTEJsb2NrcXVvdGVFbGVt
ZW50SW1wbCYgYmxvY2tRdW90ZSA9ICpzdGF0aWNfY2FzdDxIVE1MQmxvY2txdW90ZUVsZW1lbnRJ
bXBsKj4oaW1wbCgpKTsKKyAgICBpZiAodG9rZW4gPT0gQmxvY2tRdW90ZUNpdGUpCisgICAgICAg
IHJldHVybiBTdHJpbmcoYmxvY2tRdW90ZS5jaXRlKCkpOworICAgIHJldHVybiBVbmRlZmluZWQo
KTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OnF1b3RlR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywg
aW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxRdW90ZUVsZW1lbnRJbXBsJiBxdW90ZSA9ICpz
dGF0aWNfY2FzdDxIVE1MUXVvdGVFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2Vu
ID09IFF1b3RlQ2l0ZSkKKyAgICAgICAgcmV0dXJuIFN0cmluZyhxdW90ZS5jaXRlKCkpOworICAg
IHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OnByZUdldHRlcihF
eGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogQWRkIHN1
cHBvcnQgZm9yICd3cmFwJyB3aGVuIHdoaXRlLXNwYWNlOiBwcmUtd3JhcCBpcyBpbXBsZW1lbnRl
ZC4KKyAgICBIVE1MUHJlRWxlbWVudEltcGwmIHByZSA9ICpzdGF0aWNfY2FzdDxIVE1MUHJlRWxl
bWVudEltcGwqPihpbXBsKCkpOworICAgIGlmICh0b2tlbiA9PSBQcmVXaWR0aCkKKyAgICAgICAg
cmV0dXJuIE51bWJlcihwcmUud2lkdGgoKSk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQor
CitWYWx1ZSBIVE1MRWxlbWVudDo6YnJHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4p
IGNvbnN0Cit7CisgICAgSFRNTEJSRWxlbWVudEltcGwmIGJyID0gKnN0YXRpY19jYXN0PEhUTUxC
UkVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBpZiAodG9rZW4gPT0gQlJDbGVhcikKKyAgICAg
ICAgcmV0dXJuIFN0cmluZyhici5jbGVhcigpKTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9
CisKK1ZhbHVlIEhUTUxFbGVtZW50OjpiYXNlRm9udEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGlu
dCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MQmFzZUZvbnRFbGVtZW50SW1wbCYgYmFzZUZvbnQg
PSAqc3RhdGljX2Nhc3Q8SFRNTEJhc2VGb250RWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3
aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBCYXNlRm9udENvbG9yOiAgICAgICAgICAgcmV0
dXJuIFN0cmluZyhiYXNlRm9udC5jb2xvcigpKTsKKyAgICAgICAgY2FzZSBCYXNlRm9udEZhY2U6
ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhiYXNlRm9udC5mYWNlKCkpOworICAgICAgICBjYXNl
IEJhc2VGb250U2l6ZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGJhc2VGb250LnNpemUoKSk7
CisgICAgfQorICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6
OmZvbnRHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRN
TEZvbnRFbGVtZW50SW1wbCYgZm9udCA9ICpzdGF0aWNfY2FzdDxIVE1MRm9udEVsZW1lbnRJbXBs
Kj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgRm9udENvbG9y
OiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhmb250LmNvbG9yKCkpOworICAgICAgICBjYXNlIEZv
bnRGYWNlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoZm9udC5mYWNlKCkpOworICAgICAgICBj
YXNlIEZvbnRTaXplOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoZm9udC5zaXplKCkpOworICAg
IH0KKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50Ojpockdl
dHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MSFJFbGVt
ZW50SW1wbCYgaHIgPSAqc3RhdGljX2Nhc3Q8SFRNTEhSRWxlbWVudEltcGwqPihpbXBsKCkpOwor
ICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBIUkFsaWduOiAgICAgICAgICAgcmV0
dXJuIFN0cmluZyhoci5hbGlnbigpKTsKKyAgICAgICAgY2FzZSBIUk5vU2hhZGU6ICAgICAgICAg
cmV0dXJuIEJvb2xlYW4oaHIubm9TaGFkZSgpKTsKKyAgICAgICAgY2FzZSBIUlNpemU6ICAgICAg
ICAgICAgcmV0dXJuIFN0cmluZyhoci5zaXplKCkpOworICAgICAgICBjYXNlIEhSV2lkdGg6ICAg
ICAgICAgICByZXR1cm4gU3RyaW5nKGhyLndpZHRoKCkpOworICAgIH0KKyAgICByZXR1cm4gVW5k
ZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50Ojptb2RHZXR0ZXIoRXhlY1N0YXRlKiBl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTE1vZEVsZW1lbnRJbXBsJiBtb2QgPSAq
c3RhdGljX2Nhc3Q8SFRNTE1vZEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRv
a2VuKSB7CisgICAgICAgIGNhc2UgTW9kQ2l0ZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKG1v
ZC5jaXRlKCkpOworICAgICAgICBjYXNlIE1vZERhdGVUaW1lOiAgICAgICAgcmV0dXJuIFN0cmlu
Zyhtb2QuZGF0ZVRpbWUoKSk7CisgICAgfQorICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKwor
VmFsdWUgSFRNTEVsZW1lbnQ6OmFuY2hvckdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tl
bikgY29uc3QKK3sKKyAgICBIVE1MQW5jaG9yRWxlbWVudEltcGwmIGFuY2hvciA9ICpzdGF0aWNf
Y2FzdDxIVE1MQW5jaG9yRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4p
IHsKKyAgICAgICAgY2FzZSBBbmNob3JBY2Nlc3NLZXk6ICAgICAgIHJldHVybiBTdHJpbmcoYW5j
aG9yLmFjY2Vzc0tleSgpKTsKKyAgICAgICAgY2FzZSBBbmNob3JDaGFyc2V0OiAgICAgICAgIHJl
dHVybiBTdHJpbmcoYW5jaG9yLmNoYXJzZXQoKSk7CisgICAgICAgIGNhc2UgQW5jaG9yQ29vcmRz
OiAgICAgICAgICByZXR1cm4gU3RyaW5nKGFuY2hvci5jb29yZHMoKSk7CisgICAgICAgIGNhc2Ug
QW5jaG9ySHJlZjogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGFuY2hvci5ocmVmKCkpOworICAg
ICAgICBjYXNlIEFuY2hvckhyZWZMYW5nOiAgICAgICAgcmV0dXJuIFN0cmluZyhhbmNob3IuaHJl
ZmxhbmcoKSk7CisgICAgICAgIGNhc2UgQW5jaG9ySGFzaDogICAgICAgICAgICByZXR1cm4gU3Ry
aW5nKCcjJytLVVJMKGFuY2hvci5ocmVmKCkuc3RyaW5nKCkpLnJlZigpKTsKKyAgICAgICAgY2Fz
ZSBBbmNob3JIb3N0OiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoS1VSTChhbmNob3IuaHJlZigp
LnN0cmluZygpKS5ob3N0KCkpOworICAgICAgICBjYXNlIEFuY2hvckhvc3RuYW1lOiB7CisgICAg
ICAgICAgICBLVVJMIHVybChhbmNob3IuaHJlZigpLnN0cmluZygpKTsKKyAgICAgICAgICAgIGtk
RGVidWcoNjA3MCkgPDwgImFuY2hvcjo6aG9zdG5hbWUgdXNlczoiIDw8dXJsLnVybCgpPDxlbmRs
OworICAgICAgICAgICAgaWYgKHVybC5wb3J0KCk9PTApCisgICAgICAgICAgICAgICAgcmV0dXJu
IFN0cmluZyh1cmwuaG9zdCgpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKHVybC5ob3N0KCkgKyAiOiIgKyBRU3RyaW5nOjpudW1iZXIodXJsLnBvcnQo
KSkpOworICAgICAgICB9CisgICAgICAgIGNhc2UgQW5jaG9yUGF0aE5hbWU6ICAgICAgICByZXR1
cm4gU3RyaW5nKEtVUkwoYW5jaG9yLmhyZWYoKS5zdHJpbmcoKSkucGF0aCgpKTsKKyAgICAgICAg
Y2FzZSBBbmNob3JQb3J0OiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoUVN0cmluZzo6bnVtYmVy
KEtVUkwoYW5jaG9yLmhyZWYoKS5zdHJpbmcoKSkucG9ydCgpKSk7CisgICAgICAgIGNhc2UgQW5j
aG9yUHJvdG9jb2w6ICAgICAgICByZXR1cm4gU3RyaW5nKEtVUkwoYW5jaG9yLmhyZWYoKS5zdHJp
bmcoKSkucHJvdG9jb2woKSsiOiIpOworICAgICAgICBjYXNlIEFuY2hvclNlYXJjaDogICAgICAg
ICAgcmV0dXJuIFN0cmluZyhLVVJMKGFuY2hvci5ocmVmKCkuc3RyaW5nKCkpLnF1ZXJ5KCkpOwor
ICAgICAgICBjYXNlIEFuY2hvck5hbWU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhhbmNob3Iu
bmFtZSgpKTsKKyAgICAgICAgY2FzZSBBbmNob3JSZWw6ICAgICAgICAgICAgIHJldHVybiBTdHJp
bmcoYW5jaG9yLnJlbCgpKTsKKyAgICAgICAgY2FzZSBBbmNob3JSZXY6ICAgICAgICAgICAgIHJl
dHVybiBTdHJpbmcoYW5jaG9yLnJldigpKTsKKyAgICAgICAgY2FzZSBBbmNob3JTaGFwZTogICAg
ICAgICAgIHJldHVybiBTdHJpbmcoYW5jaG9yLnNoYXBlKCkpOworICAgICAgICBjYXNlIEFuY2hv
clRhYkluZGV4OiAgICAgICAgcmV0dXJuIE51bWJlcihhbmNob3IudGFiSW5kZXgoKSk7CisgICAg
ICAgIGNhc2UgQW5jaG9yVGFyZ2V0OiAgICAgICAgICByZXR1cm4gU3RyaW5nKGFuY2hvci50YXJn
ZXQoKSk7CisgICAgICAgIGNhc2UgQW5jaG9yVHlwZTogICAgICAgICAgICByZXR1cm4gU3RyaW5n
KGFuY2hvci50eXBlKCkpOworICAgICAgICBjYXNlIEFuY2hvclRleHQ6CisgICAgICAgICAgICBp
ZiAoRG9jdW1lbnRJbXBsKiBkb2MgPSBhbmNob3IuZ2V0RG9jdW1lbnQoKSkKKyAgICAgICAgICAg
ICAgICBkb2MtPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOworICAgICAg
ICAgICAgcmV0dXJuIFN0cmluZyhhbmNob3IuaW5uZXJUZXh0KCkpOworICAgIH0KKyAgICByZXR1
cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50OjppbWFnZUdldHRlcihFeGVj
U3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MSW1hZ2VFbGVtZW50SW1w
bCYgaW1hZ2UgPSAqc3RhdGljX2Nhc3Q8SFRNTEltYWdlRWxlbWVudEltcGwqPihpbXBsKCkpOwor
ICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBJbWFnZU5hbWU6ICAgICAgICAgICAg
cmV0dXJuIFN0cmluZyhpbWFnZS5uYW1lKCkpOworICAgICAgICBjYXNlIEltYWdlQWxpZ246ICAg
ICAgICAgICByZXR1cm4gU3RyaW5nKGltYWdlLmFsaWduKCkpOworICAgICAgICBjYXNlIEltYWdl
QWx0OiAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGltYWdlLmFsdCgpKTsKKyAgICAgICAgY2Fz
ZSBJbWFnZUJvcmRlcjogICAgICAgICAgcmV0dXJuIE51bWJlcihpbWFnZS5ib3JkZXIoKSk7Cisg
ICAgICAgIGNhc2UgSW1hZ2VIZWlnaHQ6ICAgICAgICAgIHJldHVybiBOdW1iZXIoaW1hZ2UuaGVp
Z2h0KHRydWUpKTsKKyAgICAgICAgY2FzZSBJbWFnZUhzcGFjZTogICAgICAgICAgcmV0dXJuIE51
bWJlcihpbWFnZS5oc3BhY2UoKSk7CisgICAgICAgIGNhc2UgSW1hZ2VJc01hcDogICAgICAgICAg
IHJldHVybiBCb29sZWFuKGltYWdlLmlzTWFwKCkpOworICAgICAgICBjYXNlIEltYWdlTG9uZ0Rl
c2M6ICAgICAgICByZXR1cm4gU3RyaW5nKGltYWdlLmxvbmdEZXNjKCkpOworICAgICAgICBjYXNl
IEltYWdlU3JjOiAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGltYWdlLnNyYygpKTsKKyAgICAg
ICAgY2FzZSBJbWFnZVVzZU1hcDogICAgICAgICAgcmV0dXJuIFN0cmluZyhpbWFnZS51c2VNYXAo
KSk7CisgICAgICAgIGNhc2UgSW1hZ2VWc3BhY2U6ICAgICAgICAgIHJldHVybiBOdW1iZXIoaW1h
Z2UudnNwYWNlKCkpOworICAgICAgICBjYXNlIEltYWdlV2lkdGg6ICAgICAgICAgICByZXR1cm4g
TnVtYmVyKGltYWdlLndpZHRoKHRydWUpKTsKKyAgICAgICAgY2FzZSBJbWFnZVg6ICAgICAgICAg
ICAgICAgcmV0dXJuIE51bWJlcihpbWFnZS54KCkpOworICAgICAgICBjYXNlIEltYWdlWTogICAg
ICAgICAgICAgICByZXR1cm4gTnVtYmVyKGltYWdlLnkoKSk7CisgICAgfQorICAgIHJldHVybiBV
bmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6Om9iamVjdEdldHRlcihFeGVjU3Rh
dGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MT2JqZWN0RWxlbWVudEltcGwm
IG9iamVjdCA9ICpzdGF0aWNfY2FzdDxIVE1MT2JqZWN0RWxlbWVudEltcGwqPihpbXBsKCkpOwor
ICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBPYmplY3RGb3JtOiAgICAgICAgICAg
IHJldHVybiBnZXRET01Ob2RlKGV4ZWMsb2JqZWN0LmZvcm0oKSk7IC8vIHR5cGUgSFRNTEZvcm1F
bGVtZW50CisgICAgICAgIGNhc2UgT2JqZWN0Q29kZTogICAgICAgICAgICByZXR1cm4gU3RyaW5n
KG9iamVjdC5jb2RlKCkpOworICAgICAgICBjYXNlIE9iamVjdEFsaWduOiAgICAgICAgICAgcmV0
dXJuIFN0cmluZyhvYmplY3QuYWxpZ24oKSk7CisgICAgICAgIGNhc2UgT2JqZWN0QXJjaGl2ZTog
ICAgICAgICByZXR1cm4gU3RyaW5nKG9iamVjdC5hcmNoaXZlKCkpOworICAgICAgICBjYXNlIE9i
amVjdEJvcmRlcjogICAgICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3QuYm9yZGVyKCkpOworICAg
ICAgICBjYXNlIE9iamVjdENvZGVCYXNlOiAgICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3QuY29k
ZUJhc2UoKSk7CisgICAgICAgIGNhc2UgT2JqZWN0Q29kZVR5cGU6ICAgICAgICByZXR1cm4gU3Ry
aW5nKG9iamVjdC5jb2RlVHlwZSgpKTsKKyAgICAgICAgY2FzZSBPYmplY3RDb250ZW50RG9jdW1l
bnQ6IHJldHVybiBjaGVja05vZGVTZWN1cml0eShleGVjLG9iamVjdC5jb250ZW50RG9jdW1lbnQo
KSkgPyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRET01O
b2RlKGV4ZWMsIG9iamVjdC5jb250ZW50RG9jdW1lbnQoKSkgOiBVbmRlZmluZWQoKTsKKyAgICAg
ICAgY2FzZSBPYmplY3REYXRhOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcob2JqZWN0LmRhdGEo
KSk7CisgICAgICAgIGNhc2UgT2JqZWN0RGVjbGFyZTogICAgICAgICByZXR1cm4gQm9vbGVhbihv
YmplY3QuZGVjbGFyZSgpKTsKKyAgICAgICAgY2FzZSBPYmplY3RIZWlnaHQ6ICAgICAgICAgIHJl
dHVybiBTdHJpbmcob2JqZWN0LmhlaWdodCgpKTsKKyAgICAgICAgY2FzZSBPYmplY3RIc3BhY2U6
ICAgICAgICAgIHJldHVybiBTdHJpbmcob2JqZWN0LmhzcGFjZSgpKTsKKyAgICAgICAgY2FzZSBP
YmplY3ROYW1lOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcob2JqZWN0Lm5hbWUoKSk7CisgICAg
ICAgIGNhc2UgT2JqZWN0U3RhbmRieTogICAgICAgICByZXR1cm4gU3RyaW5nKG9iamVjdC5zdGFu
ZGJ5KCkpOworICAgICAgICBjYXNlIE9iamVjdFRhYkluZGV4OiAgICAgICAgcmV0dXJuIE51bWJl
cihvYmplY3QudGFiSW5kZXgoKSk7CisgICAgICAgIGNhc2UgT2JqZWN0VHlwZTogICAgICAgICAg
ICByZXR1cm4gU3RyaW5nKG9iamVjdC50eXBlKCkpOworICAgICAgICBjYXNlIE9iamVjdFVzZU1h
cDogICAgICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3QudXNlTWFwKCkpOworICAgICAgICBjYXNl
IE9iamVjdFZzcGFjZTogICAgICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3QudnNwYWNlKCkpOwor
ICAgICAgICBjYXNlIE9iamVjdFdpZHRoOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3Qu
d2lkdGgoKSk7CisgICAgfQorICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRN
TEVsZW1lbnQ6OnBhcmFtR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAor
eworICAgIEhUTUxQYXJhbUVsZW1lbnRJbXBsJiBwYXJhbSA9ICpzdGF0aWNfY2FzdDxIVE1MUGFy
YW1FbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICBj
YXNlIFBhcmFtTmFtZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKHBhcmFtLm5hbWUoKSk7Cisg
ICAgICAgIGNhc2UgUGFyYW1UeXBlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcocGFyYW0udHlw
ZSgpKTsKKyAgICAgICAgY2FzZSBQYXJhbVZhbHVlOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhw
YXJhbS52YWx1ZSgpKTsKKyAgICAgICAgY2FzZSBQYXJhbVZhbHVlVHlwZTogICAgICAgcmV0dXJu
IFN0cmluZyhwYXJhbS52YWx1ZVR5cGUoKSk7CisgICAgfQorICAgIHJldHVybiBVbmRlZmluZWQo
KTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OmFwcGxldEdldHRlcihFeGVjU3RhdGUqIGV4ZWMs
IGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MQXBwbGV0RWxlbWVudEltcGwmIGFwcGxldCA9
ICpzdGF0aWNfY2FzdDxIVE1MQXBwbGV0RWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRj
aCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBBcHBsZXRBbGlnbjogICAgICAgICAgIHJldHVybiBT
dHJpbmcoYXBwbGV0LmFsaWduKCkpOworICAgICAgICBjYXNlIEFwcGxldEFsdDogICAgICAgICAg
ICAgcmV0dXJuIFN0cmluZyhhcHBsZXQuYWx0KCkpOworICAgICAgICBjYXNlIEFwcGxldEFyY2hp
dmU6ICAgICAgICAgcmV0dXJuIFN0cmluZyhhcHBsZXQuYXJjaGl2ZSgpKTsKKyAgICAgICAgY2Fz
ZSBBcHBsZXRDb2RlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYXBwbGV0LmNvZGUoKSk7Cisg
ICAgICAgIGNhc2UgQXBwbGV0Q29kZUJhc2U6ICAgICAgICByZXR1cm4gU3RyaW5nKGFwcGxldC5j
b2RlQmFzZSgpKTsKKyAgICAgICAgY2FzZSBBcHBsZXRIZWlnaHQ6ICAgICAgICAgIHJldHVybiBT
dHJpbmcoYXBwbGV0LmhlaWdodCgpKTsKKyAgICAgICAgY2FzZSBBcHBsZXRIc3BhY2U6ICAgICAg
ICAgIHJldHVybiBTdHJpbmcoYXBwbGV0LmhzcGFjZSgpKTsKKyAgICAgICAgY2FzZSBBcHBsZXRO
YW1lOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYXBwbGV0Lm5hbWUoKSk7CisgICAgICAgIGNh
c2UgQXBwbGV0T2JqZWN0OiAgICAgICAgICByZXR1cm4gU3RyaW5nKGFwcGxldC5vYmplY3QoKSk7
CisgICAgICAgIGNhc2UgQXBwbGV0VnNwYWNlOiAgICAgICAgICByZXR1cm4gU3RyaW5nKGFwcGxl
dC52c3BhY2UoKSk7CisgICAgICAgIGNhc2UgQXBwbGV0V2lkdGg6ICAgICAgICAgICByZXR1cm4g
U3RyaW5nKGFwcGxldC53aWR0aCgpKTsKKyAgICB9CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwor
fQorCitWYWx1ZSBIVE1MRWxlbWVudDo6bWFwR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRv
a2VuKSBjb25zdAoreworICAgIEhUTUxNYXBFbGVtZW50SW1wbCYgbWFwID0gKnN0YXRpY19jYXN0
PEhUTUxNYXBFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAg
ICAgICBjYXNlIE1hcEFyZWFzOiAgICAgICAgICAgcmV0dXJuIGdldEhUTUxDb2xsZWN0aW9uKGV4
ZWMsIG1hcC5hcmVhcygpLmdldCgpKTsgLy8gdHlwZSBIVE1MQ29sbGVjdGlvbgorICAgICAgICBj
YXNlIE1hcE5hbWU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhtYXAubmFtZSgpKTsKKyAgICB9
CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6YXJlYUdl
dHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MQXJlYUVs
ZW1lbnRJbXBsJiBhcmVhID0gKnN0YXRpY19jYXN0PEhUTUxBcmVhRWxlbWVudEltcGwqPihpbXBs
KCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBBcmVhQWNjZXNzS2V5OiAg
ICAgICByZXR1cm4gU3RyaW5nKGFyZWEuYWNjZXNzS2V5KCkpOworICAgICAgICBjYXNlIEFyZWFB
bHQ6ICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYXJlYS5hbHQoKSk7CisgICAgICAgIGNhc2Ug
QXJlYUNvb3JkczogICAgICAgICAgcmV0dXJuIFN0cmluZyhhcmVhLmNvb3JkcygpKTsKKyAgICAg
ICAgY2FzZSBBcmVhSHJlZjogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGFyZWEuaHJlZigpKTsK
KyAgICAgICAgY2FzZSBBcmVhSGFzaDogICAgICAgICAgICByZXR1cm4gU3RyaW5nKCcjJytLVVJM
KGFyZWEuaHJlZigpLnN0cmluZygpKS5yZWYoKSk7CisgICAgICAgIGNhc2UgQXJlYUhvc3Q6ICAg
ICAgICAgICAgcmV0dXJuIFN0cmluZyhLVVJMKGFyZWEuaHJlZigpLnN0cmluZygpKS5ob3N0KCkp
OworICAgICAgICBjYXNlIEFyZWFIb3N0TmFtZTogeworICAgICAgICAgICAgS1VSTCB1cmwoYXJl
YS5ocmVmKCkuc3RyaW5nKCkpOworICAgICAgICAgICAga2REZWJ1Zyg2MDcwKSA8PCAibGluazo6
aG9zdG5hbWUgdXNlczoiIDw8dXJsLnVybCgpPDxlbmRsOworICAgICAgICAgICAgaWYgKHVybC5w
b3J0KCk9PTApCisgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh1cmwuaG9zdCgpKTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKHVybC5ob3N0KCkg
KyAiOiIgKyBRU3RyaW5nOjpudW1iZXIodXJsLnBvcnQoKSkpOworICAgICAgICB9CisgICAgICAg
IGNhc2UgQXJlYVBhdGhOYW1lOiAgICAgICAgcmV0dXJuIFN0cmluZyhLVVJMKGFyZWEuaHJlZigp
LnN0cmluZygpKS5wYXRoKCkpOworICAgICAgICBjYXNlIEFyZWFQb3J0OiAgICAgICAgICAgIHJl
dHVybiBTdHJpbmcoUVN0cmluZzo6bnVtYmVyKEtVUkwoYXJlYS5ocmVmKCkuc3RyaW5nKCkpLnBv
cnQoKSkpOworICAgICAgICBjYXNlIEFyZWFQcm90b2NvbDogICAgICAgIHJldHVybiBTdHJpbmco
S1VSTChhcmVhLmhyZWYoKS5zdHJpbmcoKSkucHJvdG9jb2woKSsiOiIpOworICAgICAgICBjYXNl
IEFyZWFTZWFyY2g6ICAgICAgICAgIHJldHVybiBTdHJpbmcoS1VSTChhcmVhLmhyZWYoKS5zdHJp
bmcoKSkucXVlcnkoKSk7CisgICAgICAgIGNhc2UgQXJlYU5vSHJlZjogICAgICAgICAgcmV0dXJu
IEJvb2xlYW4oYXJlYS5ub0hyZWYoKSk7CisgICAgICAgIGNhc2UgQXJlYVNoYXBlOiAgICAgICAg
ICAgcmV0dXJuIFN0cmluZyhhcmVhLnNoYXBlKCkpOworICAgICAgICBjYXNlIEFyZWFUYWJJbmRl
eDogICAgICAgIHJldHVybiBOdW1iZXIoYXJlYS50YWJJbmRleCgpKTsKKyAgICAgICAgY2FzZSBB
cmVhVGFyZ2V0OiAgICAgICAgICByZXR1cm4gU3RyaW5nKGFyZWEudGFyZ2V0KCkpOworICAgIH0K
KyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50OjpzY3JpcHRH
ZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTFNjcmlw
dEVsZW1lbnRJbXBsJiBzY3JpcHQgPSAqc3RhdGljX2Nhc3Q8SFRNTFNjcmlwdEVsZW1lbnRJbXBs
Kj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgU2NyaXB0VGV4
dDogICAgICAgICAgICByZXR1cm4gU3RyaW5nKHNjcmlwdC50ZXh0KCkpOworICAgICAgICBjYXNl
IFNjcmlwdEh0bWxGb3I6ICAgICAgICAgcmV0dXJuIFN0cmluZyhzY3JpcHQuaHRtbEZvcigpKTsK
KyAgICAgICAgY2FzZSBTY3JpcHRFdmVudDogICAgICAgICAgIHJldHVybiBTdHJpbmcoc2NyaXB0
LmV2ZW50KCkpOworICAgICAgICBjYXNlIFNjcmlwdENoYXJzZXQ6ICAgICAgICAgcmV0dXJuIFN0
cmluZyhzY3JpcHQuY2hhcnNldCgpKTsKKyAgICAgICAgY2FzZSBTY3JpcHREZWZlcjogICAgICAg
ICAgIHJldHVybiBCb29sZWFuKHNjcmlwdC5kZWZlcigpKTsKKyAgICAgICAgY2FzZSBTY3JpcHRT
cmM6ICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoc2NyaXB0LnNyYygpKTsKKyAgICAgICAgY2Fz
ZSBTY3JpcHRUeXBlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoc2NyaXB0LnR5cGUoKSk7Cisg
ICAgfQorICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OnRh
YmxlR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxU
YWJsZUVsZW1lbnRJbXBsJiB0YWJsZSA9ICpzdGF0aWNfY2FzdDxIVE1MVGFibGVFbGVtZW50SW1w
bCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNlIFRhYmxlQ2Fw
dGlvbjogICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLHRhYmxlLmNhcHRpb24oKSk7IC8v
IHR5cGUgSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQKKyAgICAgICAgY2FzZSBUYWJsZVRIZWFkOiAg
ICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyx0YWJsZS50SGVhZCgpKTsgLy8gdHlwZSBI
VE1MVGFibGVTZWN0aW9uRWxlbWVudAorICAgICAgICBjYXNlIFRhYmxlVEZvb3Q6ICAgICAgICAg
ICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLHRhYmxlLnRGb290KCkpOyAvLyB0eXBlIEhUTUxUYWJs
ZVNlY3Rpb25FbGVtZW50CisgICAgICAgIGNhc2UgVGFibGVSb3dzOiAgICAgICAgICAgIHJldHVy
biBnZXRIVE1MQ29sbGVjdGlvbihleGVjLCB0YWJsZS5yb3dzKCkuZ2V0KCkpOyAvLyB0eXBlIEhU
TUxDb2xsZWN0aW9uCisgICAgICAgIGNhc2UgVGFibGVUQm9kaWVzOiAgICAgICAgIHJldHVybiBn
ZXRIVE1MQ29sbGVjdGlvbihleGVjLCB0YWJsZS50Qm9kaWVzKCkuZ2V0KCkpOyAvLyB0eXBlIEhU
TUxDb2xsZWN0aW9uCisgICAgICAgIGNhc2UgVGFibGVBbGlnbjogICAgICAgICAgIHJldHVybiBT
dHJpbmcodGFibGUuYWxpZ24oKSk7CisgICAgICAgIGNhc2UgVGFibGVCZ0NvbG9yOiAgICAgICAg
IHJldHVybiBTdHJpbmcodGFibGUuYmdDb2xvcigpKTsKKyAgICAgICAgY2FzZSBUYWJsZUJvcmRl
cjogICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZS5ib3JkZXIoKSk7CisgICAgICAgIGNhc2Ug
VGFibGVDZWxsUGFkZGluZzogICAgIHJldHVybiBTdHJpbmcodGFibGUuY2VsbFBhZGRpbmcoKSk7
CisgICAgICAgIGNhc2UgVGFibGVDZWxsU3BhY2luZzogICAgIHJldHVybiBTdHJpbmcodGFibGUu
Y2VsbFNwYWNpbmcoKSk7CisgICAgICAgIGNhc2UgVGFibGVGcmFtZTogICAgICAgICAgIHJldHVy
biBTdHJpbmcodGFibGUuZnJhbWUoKSk7CisgICAgICAgIGNhc2UgVGFibGVSdWxlczogICAgICAg
ICAgIHJldHVybiBTdHJpbmcodGFibGUucnVsZXMoKSk7CisgICAgICAgIGNhc2UgVGFibGVTdW1t
YXJ5OiAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGUuc3VtbWFyeSgpKTsKKyAgICAgICAgY2Fz
ZSBUYWJsZVdpZHRoOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZS53aWR0aCgpKTsKKyAg
ICB9CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6dGFi
bGVDYXB0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAg
IEhUTUxUYWJsZUNhcHRpb25FbGVtZW50SW1wbCYgdGFibGVDYXB0aW9uID0gKnN0YXRpY19jYXN0
PEhUTUxUYWJsZUNhcHRpb25FbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09
IFRhYmxlQ2FwdGlvbkFsaWduKQorICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ2FwdGlvbi5h
bGlnbigpKTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50
Ojp0YWJsZUNvbEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAg
ICBIVE1MVGFibGVDb2xFbGVtZW50SW1wbCYgdGFibGVDb2wgPSAqc3RhdGljX2Nhc3Q8SFRNTFRh
YmxlQ29sRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAg
ICAgY2FzZSBUYWJsZUNvbEFsaWduOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNvbC5h
bGlnbigpKTsKKyAgICAgICAgY2FzZSBUYWJsZUNvbENoOiAgICAgICAgICAgICAgcmV0dXJuIFN0
cmluZyh0YWJsZUNvbC5jaCgpKTsKKyAgICAgICAgY2FzZSBUYWJsZUNvbENoT2ZmOiAgICAgICAg
ICAgcmV0dXJuIFN0cmluZyh0YWJsZUNvbC5jaE9mZigpKTsKKyAgICAgICAgY2FzZSBUYWJsZUNv
bFNwYW46ICAgICAgICAgICAgcmV0dXJuIE51bWJlcih0YWJsZUNvbC5zcGFuKCkpOworICAgICAg
ICBjYXNlIFRhYmxlQ29sVkFsaWduOiAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ29sLnZB
bGlnbigpKTsKKyAgICAgICAgY2FzZSBUYWJsZUNvbFdpZHRoOiAgICAgICAgICAgcmV0dXJuIFN0
cmluZyh0YWJsZUNvbC53aWR0aCgpKTsKKyAgICB9CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwor
fQorCitWYWx1ZSBIVE1MRWxlbWVudDo6dGFibGVTZWN0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhl
YywgaW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbCYg
dGFibGVTZWN0aW9uID0gKnN0YXRpY19jYXN0PEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbCo+
KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNlIFRhYmxlU2VjdGlv
bkFsaWduOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZVNlY3Rpb24uYWxpZ24oKSk7Cisg
ICAgICAgIGNhc2UgVGFibGVTZWN0aW9uQ2g6ICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRh
YmxlU2VjdGlvbi5jaCgpKTsKKyAgICAgICAgY2FzZSBUYWJsZVNlY3Rpb25DaE9mZjogICAgICAg
ICAgIHJldHVybiBTdHJpbmcodGFibGVTZWN0aW9uLmNoT2ZmKCkpOworICAgICAgICBjYXNlIFRh
YmxlU2VjdGlvblZBbGlnbjogICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZVNlY3Rpb24udkFs
aWduKCkpOworICAgICAgICBjYXNlIFRhYmxlU2VjdGlvblJvd3M6ICAgICAgICAgICAgcmV0dXJu
IGdldEhUTUxDb2xsZWN0aW9uKGV4ZWMsIHRhYmxlU2VjdGlvbi5yb3dzKCkuZ2V0KCkpOyAvLyB0
eXBlIEhUTUxDb2xsZWN0aW9uCisgICAgfQorICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKwor
VmFsdWUgSFRNTEVsZW1lbnQ6OnRhYmxlUm93R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRv
a2VuKSBjb25zdAoreworICAgIEhUTUxUYWJsZVJvd0VsZW1lbnRJbXBsJiB0YWJsZVJvdyA9ICpz
dGF0aWNfY2FzdDxIVE1MVGFibGVSb3dFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNo
ICh0b2tlbikgeworICAgICAgICBjYXNlIFRhYmxlUm93Um93SW5kZXg6ICAgICAgICByZXR1cm4g
TnVtYmVyKHRhYmxlUm93LnJvd0luZGV4KCkpOworICAgICAgICBjYXNlIFRhYmxlUm93U2VjdGlv
blJvd0luZGV4OiByZXR1cm4gTnVtYmVyKHRhYmxlUm93LnNlY3Rpb25Sb3dJbmRleCgpKTsKKyAg
ICAgICAgY2FzZSBUYWJsZVJvd0NlbGxzOiAgICAgICAgICAgcmV0dXJuIGdldEhUTUxDb2xsZWN0
aW9uKGV4ZWMsIHRhYmxlUm93LmNlbGxzKCkuZ2V0KCkpOyAvLyB0eXBlIEhUTUxDb2xsZWN0aW9u
CisgICAgICAgIGNhc2UgVGFibGVSb3dBbGlnbjogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFi
bGVSb3cuYWxpZ24oKSk7CisgICAgICAgIGNhc2UgVGFibGVSb3dCZ0NvbG9yOiAgICAgICAgIHJl
dHVybiBTdHJpbmcodGFibGVSb3cuYmdDb2xvcigpKTsKKyAgICAgICAgY2FzZSBUYWJsZVJvd0No
OiAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZVJvdy5jaCgpKTsKKyAgICAgICAgY2Fz
ZSBUYWJsZVJvd0NoT2ZmOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZVJvdy5jaE9mZigp
KTsKKyAgICAgICAgY2FzZSBUYWJsZVJvd1ZBbGlnbjogICAgICAgICAgcmV0dXJuIFN0cmluZyh0
YWJsZVJvdy52QWxpZ24oKSk7CisgICAgfQorICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKwor
VmFsdWUgSFRNTEVsZW1lbnQ6OnRhYmxlQ2VsbEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0
b2tlbikgY29uc3QKK3sKKyAgICBIVE1MVGFibGVDZWxsRWxlbWVudEltcGwmIHRhYmxlQ2VsbCA9
ICpzdGF0aWNfY2FzdDxIVE1MVGFibGVDZWxsRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3
aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBUYWJsZUNlbGxDZWxsSW5kZXg6ICAgICAgIHJl
dHVybiBOdW1iZXIodGFibGVDZWxsLmNlbGxJbmRleCgpKTsKKyAgICAgICAgY2FzZSBUYWJsZUNl
bGxBYmJyOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVDZWxsLmFiYnIoKSk7CisgICAg
ICAgIGNhc2UgVGFibGVDZWxsQWxpZ246ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ2Vs
bC5hbGlnbigpKTsKKyAgICAgICAgY2FzZSBUYWJsZUNlbGxBeGlzOiAgICAgICAgICAgIHJldHVy
biBTdHJpbmcodGFibGVDZWxsLmF4aXMoKSk7CisgICAgICAgIGNhc2UgVGFibGVDZWxsQmdDb2xv
cjogICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ2VsbC5iZ0NvbG9yKCkpOworICAgICAgICBj
YXNlIFRhYmxlQ2VsbENoOiAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNlbGwuY2go
KSk7CisgICAgICAgIGNhc2UgVGFibGVDZWxsQ2hPZmY6ICAgICAgICAgICByZXR1cm4gU3RyaW5n
KHRhYmxlQ2VsbC5jaE9mZigpKTsKKyAgICAgICAgY2FzZSBUYWJsZUNlbGxDb2xTcGFuOiAgICAg
ICAgIHJldHVybiBOdW1iZXIodGFibGVDZWxsLmNvbFNwYW4oKSk7CisgICAgICAgIGNhc2UgVGFi
bGVDZWxsSGVhZGVyczogICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ2VsbC5oZWFkZXJzKCkp
OworICAgICAgICBjYXNlIFRhYmxlQ2VsbEhlaWdodDogICAgICAgICAgcmV0dXJuIFN0cmluZyh0
YWJsZUNlbGwuaGVpZ2h0KCkpOworICAgICAgICBjYXNlIFRhYmxlQ2VsbE5vV3JhcDogICAgICAg
ICAgcmV0dXJuIEJvb2xlYW4odGFibGVDZWxsLm5vV3JhcCgpKTsKKyAgICAgICAgY2FzZSBUYWJs
ZUNlbGxSb3dTcGFuOiAgICAgICAgIHJldHVybiBOdW1iZXIodGFibGVDZWxsLnJvd1NwYW4oKSk7
CisgICAgICAgIGNhc2UgVGFibGVDZWxsU2NvcGU6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRh
YmxlQ2VsbC5zY29wZSgpKTsKKyAgICAgICAgY2FzZSBUYWJsZUNlbGxWQWxpZ246ICAgICAgICAg
IHJldHVybiBTdHJpbmcodGFibGVDZWxsLnZBbGlnbigpKTsKKyAgICAgICAgY2FzZSBUYWJsZUNl
bGxXaWR0aDogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVDZWxsLndpZHRoKCkpOworICAg
IH0KKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50OjpmcmFt
ZVNldEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1M
RnJhbWVTZXRFbGVtZW50SW1wbCYgZnJhbWVTZXQgPSAqc3RhdGljX2Nhc3Q8SFRNTEZyYW1lU2V0
RWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2Fz
ZSBGcmFtZVNldENvbHM6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhmcmFtZVNldC5jb2xzKCkp
OworICAgICAgICBjYXNlIEZyYW1lU2V0Um93czogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGZy
YW1lU2V0LnJvd3MoKSk7CisgICAgfQorICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFs
dWUgSFRNTEVsZW1lbnQ6OmZyYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBj
b25zdAoreworICAgIEhUTUxGcmFtZUVsZW1lbnRJbXBsJiBmcmFtZUVsZW1lbnQgPSAqc3RhdGlj
X2Nhc3Q8SFRNTEZyYW1lRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4p
IHsKKyAgICAgICAgY2FzZSBGcmFtZUNvbnRlbnREb2N1bWVudDogcmV0dXJuIGNoZWNrTm9kZVNl
Y3VyaXR5KGV4ZWMsZnJhbWVFbGVtZW50LmNvbnRlbnREb2N1bWVudCgpKSA/IAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0RE9NTm9kZShleGVjLCBmcmFtZUVs
ZW1lbnQuY29udGVudERvY3VtZW50KCkpIDogVW5kZWZpbmVkKCk7CisgICAgICAgIGNhc2UgRnJh
bWVDb250ZW50V2luZG93OiAgIHJldHVybiBjaGVja05vZGVTZWN1cml0eShleGVjLGZyYW1lRWxl
bWVudC5jb250ZW50RG9jdW1lbnQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA/IFdpbmRvdzo6cmV0cmlldmUoZnJhbWVFbGVtZW50LmNvbnRlbnRQYXJ0KCkpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBVbmRlZmluZWQoKTsKKyAg
ICAgICAgY2FzZSBGcmFtZUZyYW1lQm9yZGVyOiAgICAgcmV0dXJuIFN0cmluZyhmcmFtZUVsZW1l
bnQuZnJhbWVCb3JkZXIoKSk7CisgICAgICAgIGNhc2UgRnJhbWVMb25nRGVzYzogICAgICAgIHJl
dHVybiBTdHJpbmcoZnJhbWVFbGVtZW50LmxvbmdEZXNjKCkpOworICAgICAgICBjYXNlIEZyYW1l
TWFyZ2luSGVpZ2h0OiAgICByZXR1cm4gU3RyaW5nKGZyYW1lRWxlbWVudC5tYXJnaW5IZWlnaHQo
KSk7CisgICAgICAgIGNhc2UgRnJhbWVNYXJnaW5XaWR0aDogICAgIHJldHVybiBTdHJpbmcoZnJh
bWVFbGVtZW50Lm1hcmdpbldpZHRoKCkpOworICAgICAgICBjYXNlIEZyYW1lTmFtZTogICAgICAg
ICAgICByZXR1cm4gU3RyaW5nKGZyYW1lRWxlbWVudC5uYW1lKCkpOworICAgICAgICBjYXNlIEZy
YW1lTm9SZXNpemU6ICAgICAgICByZXR1cm4gQm9vbGVhbihmcmFtZUVsZW1lbnQubm9SZXNpemUo
KSk7CisgICAgICAgIGNhc2UgRnJhbWVTY3JvbGxpbmc6ICAgICAgIHJldHVybiBTdHJpbmcoZnJh
bWVFbGVtZW50LnNjcm9sbGluZygpKTsKKyAgICAgICAgY2FzZSBGcmFtZVNyYzoKKyAgICAgICAg
Y2FzZSBGcmFtZUxvY2F0aW9uOiAgICAgICAgcmV0dXJuIFN0cmluZyhmcmFtZUVsZW1lbnQuc3Jj
KCkpOworICAgIH0KKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVt
ZW50OjppRnJhbWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7Cisg
ICAgSFRNTElGcmFtZUVsZW1lbnRJbXBsJiBpRnJhbWUgPSAqc3RhdGljX2Nhc3Q8SFRNTElGcmFt
ZUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNh
c2UgSUZyYW1lQWxpZ246ICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoaUZyYW1lLmFsaWdu
KCkpOworICAgICAgICAgIC8vICMjIyBzZWN1cml0eSBjaGVjayA/CisgICAgICAgIGNhc2UgSUZy
YW1lRG9jdW1lbnQ6IC8vIG5vbi1zdGFuZGFyZCwgbWFwcGVkIHRvIGNvbnRlbnREb2N1bWVudAor
ICAgICAgICBjYXNlIElGcmFtZUNvbnRlbnREb2N1bWVudDogcmV0dXJuIGNoZWNrTm9kZVNlY3Vy
aXR5KGV4ZWMsaUZyYW1lLmNvbnRlbnREb2N1bWVudCgpKSA/IAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBnZXRET01Ob2RlKGV4ZWMsIGlGcmFtZS5jb250ZW50RG9jdW1l
bnQoKSkgOiBVbmRlZmluZWQoKTsKKyAgICAgICAgY2FzZSBJRnJhbWVDb250ZW50V2luZG93Ogly
ZXR1cm4gY2hlY2tOb2RlU2VjdXJpdHkoZXhlYyxpRnJhbWUuY29udGVudERvY3VtZW50KCkpIAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gV2luZG93OjpyZXRyaWV2
ZShpRnJhbWUuY29udGVudFBhcnQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA6IFVuZGVmaW5lZCgpOworICAgICAgICBjYXNlIElGcmFtZUZyYW1lQm9yZGVyOiAg
ICAgcmV0dXJuIFN0cmluZyhpRnJhbWUuZnJhbWVCb3JkZXIoKSk7CisgICAgICAgIGNhc2UgSUZy
YW1lSGVpZ2h0OiAgICAgICAgICByZXR1cm4gU3RyaW5nKGlGcmFtZS5oZWlnaHQoKSk7CisgICAg
ICAgIGNhc2UgSUZyYW1lTG9uZ0Rlc2M6ICAgICAgICByZXR1cm4gU3RyaW5nKGlGcmFtZS5sb25n
RGVzYygpKTsKKyAgICAgICAgY2FzZSBJRnJhbWVNYXJnaW5IZWlnaHQ6ICAgIHJldHVybiBTdHJp
bmcoaUZyYW1lLm1hcmdpbkhlaWdodCgpKTsKKyAgICAgICAgY2FzZSBJRnJhbWVNYXJnaW5XaWR0
aDogICAgIHJldHVybiBTdHJpbmcoaUZyYW1lLm1hcmdpbldpZHRoKCkpOworICAgICAgICBjYXNl
IElGcmFtZU5hbWU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpRnJhbWUubmFtZSgpKTsKKyAg
ICAgICAgY2FzZSBJRnJhbWVTY3JvbGxpbmc6ICAgICAgIHJldHVybiBTdHJpbmcoaUZyYW1lLnNj
cm9sbGluZygpKTsKKyAgICAgICAgY2FzZSBJRnJhbWVTcmM6ICAgICAgICAgICAgIHJldHVybiBT
dHJpbmcoaUZyYW1lLnNyYygpKTsKKyAgICAgICAgY2FzZSBJRnJhbWVXaWR0aDogICAgICAgICAg
IHJldHVybiBTdHJpbmcoaUZyYW1lLndpZHRoKCkpOworICAgIH0KKyAgICByZXR1cm4gVW5kZWZp
bmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50OjptYXJxdWVlR2V0dGVyKEV4ZWNTdGF0ZSog
ZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBGaW5kIG91dCB3aGF0IFdp
bklFIGV4cG9zZXMgYXMgcHJvcGVydGllcyBhbmQgaW1wbGVtZW50IHRoaXMuCisgICAgcmV0dXJu
IFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICAvLyBDaGVjayBvdXIgc2V0
IG9mIGdlbmVyaWMgcHJvcGVydGllcyBmaXJzdC4KKyAgICBIVE1MRWxlbWVudEltcGwgJmVsZW1l
bnQgPSAqc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KGltcGwoKSk7CisgICAgc3dpdGNo
ICh0b2tlbikgeworICAgICAgICBjYXNlIEVsZW1lbnRJZDoKKyAgICAgICAgLy8gaWh0LmNvbSBy
ZWxpZXMgb24gdGhpcyB2YWx1ZSBiZWluZyAiIiB3aGVuIG5vIGlkIGlzIHByZXNlbnQuICBPdGhl
ciBicm93c2VycyBkbyB0aGlzIGFzIHdlbGwuCisgICAgICAgIC8vIFNvIHdlIHVzZSBTdHJpbmco
KSBpbnN0ZWFkIG9mIFN0cmluZygpIGhlcmUuCisgICAgICAgIHJldHVybiBTdHJpbmcoZWxlbWVu
dC5pZCgpKTsKKyAgICAgICAgY2FzZSBFbGVtZW50VGl0bGU6CisgICAgICAgICAgICByZXR1cm4g
U3RyaW5nKGVsZW1lbnQudGl0bGUoKSk7CisgICAgICAgIGNhc2UgRWxlbWVudExhbmc6CisgICAg
ICAgICAgICByZXR1cm4gU3RyaW5nKGVsZW1lbnQubGFuZygpKTsKKyAgICAgICAgY2FzZSBFbGVt
ZW50RGlyOgorICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhlbGVtZW50LmRpcigpKTsKKyAgICAg
ICAgY2FzZSBFbGVtZW50Q2xhc3NOYW1lOgorICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhlbGVt
ZW50LmNsYXNzTmFtZSgpKTsKKyAgICAgICAgY2FzZSBFbGVtZW50SW5uZXJIVE1MOgorICAgICAg
ICAgICAgcmV0dXJuIFN0cmluZyhlbGVtZW50LmlubmVySFRNTCgpKTsKKyAgICAgICAgY2FzZSBF
bGVtZW50SW5uZXJUZXh0OgorICAgICAgICAgICAgaWYgKERvY3VtZW50SW1wbCogZG9jID0gaW1w
bCgpLT5nZXREb2N1bWVudCgpKQorICAgICAgICAgICAgICAgIGRvYy0+dXBkYXRlTGF5b3V0SWdu
b3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGVsZW1l
bnQuaW5uZXJUZXh0KCkpOworICAgICAgICBjYXNlIEVsZW1lbnRPdXRlckhUTUw6CisgICAgICAg
ICAgICByZXR1cm4gU3RyaW5nKGVsZW1lbnQub3V0ZXJIVE1MKCkpOworICAgICAgICBjYXNlIEVs
ZW1lbnRPdXRlclRleHQ6CisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGVsZW1lbnQub3V0ZXJU
ZXh0KCkpOworICAgICAgICBjYXNlIEVsZW1lbnREb2N1bWVudDoKKyAgICAgICAgICAgIHJldHVy
biBnZXRET01Ob2RlKGV4ZWMsZWxlbWVudC5vd25lckRvY3VtZW50KCkpOworICAgICAgICBjYXNl
IEVsZW1lbnRDaGlsZHJlbjoKKyAgICAgICAgICAgIHJldHVybiBnZXRIVE1MQ29sbGVjdGlvbihl
eGVjLCBlbGVtZW50LmNoaWxkcmVuKCkuZ2V0KCkpOworICAgICAgICBjYXNlIEVsZW1lbnRDb250
ZW50RWRpdGFibGU6CisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGVsZW1lbnQuY29udGVudEVk
aXRhYmxlKCkpOworICAgICAgICBjYXNlIEVsZW1lbnRJc0NvbnRlbnRFZGl0YWJsZToKKyAgICAg
ICAgICAgIHJldHVybiBCb29sZWFuKGVsZW1lbnQuaXNDb250ZW50RWRpdGFibGUoKSk7CisgICAg
fQorCisgICAgLy8gTm93IGNoZWNrIHRoZSBwcm9wZXJ0aWVzIHNwZWNpZmljIHRvIG91ciBlbGVt
ZW50IHR5cGUuCisgICAgY29uc3QgR2V0U2V0SW5mbyogaW5mbyA9IGdldFNldEluZm8oKTsKKyAg
ICBpZiAoaW5mbyAmJiBpbmZvLT5tX2dldHRlcikKKyAgICAgICAgcmV0dXJuICh0aGlzLT4qKGlu
Zm8tPm1fZ2V0dGVyKSkoZXhlYywgdG9rZW4pOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30K
KworYm9vbCBLSlM6OkhUTUxFbGVtZW50OjpoYXNQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNv
bnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSkgY29uc3QKK3sKKyNpZmRlZiBLSlNfVkVSQk9T
RQorICAgIC8va2REZWJ1Zyg2MDcwKSA8PCAiSFRNTEVsZW1lbnQ6Omhhc1Byb3BlcnR5ICIgPDwg
cHJvcGVydHlOYW1lLnFzdHJpbmcoKSA8PCBlbmRsOworI2VuZGlmCisgICAgSFRNTEVsZW1lbnRJ
bXBsICZlbGVtZW50ID0gKnN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCAqPihpbXBsKCkpOwor
ICAgIC8vIEZpcnN0IGxvb2sgYXQgZHluYW1pYyBwcm9wZXJ0aWVzIC0ga2VlcCB0aGlzIGluIHN5
bmMgd2l0aCB0cnlHZXQKKyAgICBpZiAoZWxlbWVudC5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpm
b3JtKCkpKSB7CisgICAgICAgIEhUTUxGb3JtRWxlbWVudEltcGwgJmZvcm0gPSBzdGF0aWNfY2Fz
dDxIVE1MRm9ybUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgICAgICAvLyBDaGVjayBpZiB3
ZSdyZSByZXRyaWV2aW5nIGFuIGVsZW1lbnQgKGJ5IGluZGV4IG9yIGJ5IG5hbWUpCisgICAgICAg
IGJvb2wgb2s7CisgICAgICAgIHVpbnQgdSA9IHByb3BlcnR5TmFtZS50b1VMb25nKCZvayk7Cisg
ICAgICAgIGlmIChvayAmJiBmb3JtLmVsZW1lbnRzKCktPml0ZW0odSkpCisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKGZvcm0uZWxlbWVudHMoKS0+bmFtZWRJdGVtKHByb3Bl
cnR5TmFtZS5zdHJpbmcoKSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
ZWxzZSBpZiAoZWxlbWVudC5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpzZWxlY3QoKSkpIHsKKyAg
ICAgICAgSFRNTFNlbGVjdEVsZW1lbnRJbXBsICZzZWxlY3QgPSBzdGF0aWNfY2FzdDxIVE1MU2Vs
ZWN0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgICAgIGJvb2wgb2s7CisgICAgICAgIHVp
bnQgdSA9IHByb3BlcnR5TmFtZS50b1VMb25nKCZvayk7CisgICAgICAgIGlmIChvayAmJiBzZWxl
Y3Qub3B0aW9uc0hUTUxDb2xsZWN0aW9uKCktPml0ZW0odSkpCisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIERPTUVsZW1lbnQ6Omhhc1Byb3BlcnR5KGV4ZWMsIHBy
b3BlcnR5TmFtZSk7Cit9CisKK1VTdHJpbmcgS0pTOjpIVE1MRWxlbWVudDo6dG9TdHJpbmcoRXhl
Y1N0YXRlICpleGVjKSBjb25zdAoreworICBpZiAoaW1wbCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6YSgpKSkKKyAgICByZXR1cm4gVVN0cmluZyhzdGF0aWNfY2FzdDxjb25zdCBIVE1MQW5jaG9y
RWxlbWVudEltcGwgKj4oaW1wbCgpKS0+aHJlZigpKTsKKyAgZWxzZQorICAgIHJldHVybiBET01F
bGVtZW50Ojp0b1N0cmluZyhleGVjKTsKK30KKworc3RhdGljIEhUTUxGb3JtRWxlbWVudEltcGwg
KmdldEZvcm0oSFRNTEVsZW1lbnRJbXBsICplbGVtZW50KQoreworICBpZiAoZWxlbWVudC0+aXNH
ZW5lcmljRm9ybUVsZW1lbnQoKSkKKyAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MR2VuZXJp
Y0Zvcm1FbGVtZW50SW1wbCAqPihlbGVtZW50KS0+Zm9ybSgpOworICBpZiAoZWxlbWVudC0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OmxhYmVsKCkpKQorICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhU
TUxMYWJlbEVsZW1lbnRJbXBsICo+KGVsZW1lbnQpLT5mb3JtKCk7CisgIGlmIChlbGVtZW50LT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6b2JqZWN0KCkpKQorICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PEhUTUxPYmplY3RFbGVtZW50SW1wbCAqPihlbGVtZW50KS0+Zm9ybSgpOworCisgIHJldHVybiAw
OworfQorCit2b2lkIEtKUzo6SFRNTEVsZW1lbnQ6OnB1c2hFdmVudEhhbmRsZXJTY29wZShFeGVj
U3RhdGUgKmV4ZWMsIFNjb3BlQ2hhaW4gJnNjb3BlKSBjb25zdAogewogICBIVE1MRWxlbWVudElt
cGwgKmVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwgKj4oaW1wbCgpKTsKIApA
QCAtMjA5OSw3ICsyMjU1LDcgQEAgdm9pZCBLSlM6OkhUTUxFbGVtZW50OjpwdXNoRXZlbnRIYW5k
bGVyUwogICAgIHNjb3BlLnB1c2goc3RhdGljX2Nhc3Q8T2JqZWN0SW1wICo+KGdldERPTU5vZGUo
ZXhlYywgZm9ybSkpKTsKICAgZWxzZSB7CiAgICAgTm9kZUltcGwgKmZvcm0gPSBlbGVtZW50LT5w
YXJlbnROb2RlKCk7Ci0gICAgd2hpbGUgKGZvcm0gJiYgZm9ybS0+aWQoKSAhPSBJRF9GT1JNKQor
ICAgIHdoaWxlIChmb3JtICYmICFmb3JtLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Zm9ybSgpKSkK
ICAgICAgIGZvcm0gPSBmb3JtLT5wYXJlbnROb2RlKCk7CiAgICAgCiAgICAgaWYgKGZvcm0pCkBA
IC0yMTE5LDE4MCArMjI3NSwxNjUgQEAgSFRNTEVsZW1lbnRGdW5jdGlvbjo6SFRNTEVsZW1lbnRG
dW5jdGlvbgogCiBWYWx1ZSBLSlM6OkhUTUxFbGVtZW50RnVuY3Rpb246OnRyeUNhbGwoRXhlY1N0
YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7Ci0gIGlmICgh
dGhpc09iai5pbmhlcml0cygmS0pTOjpIVE1MRWxlbWVudDo6aW5mbykpIHsKLSAgICBPYmplY3Qg
ZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5cGVFcnJvcik7Ci0gICAgZXhlYy0+c2V0RXhjZXB0
aW9uKGVycik7Ci0gICAgcmV0dXJuIGVycjsKLSAgfQotICBrZERlYnVnKCkgPDwgIktKUzo6SFRN
TEVsZW1lbnRGdW5jdGlvbjo6dHJ5Q2FsbCAiIDw8IGVuZGw7Ci0gIERPTUV4Y2VwdGlvblRyYW5z
bGF0b3IgZXhjZXB0aW9uKGV4ZWMpOwotICBIVE1MRWxlbWVudEltcGwgJmVsZW1lbnQgPSAqc3Rh
dGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KHN0YXRpY19jYXN0PEhUTUxFbGVtZW50ICo+KHRo
aXNPYmouaW1wKCkpLT5pbXBsKCkpOwotCi0gIHN3aXRjaCAoZWxlbWVudC5pZCgpKSB7Ci0gICAg
Y2FzZSBJRF9GT1JNOiB7Ci0gICAgICBIVE1MRm9ybUVsZW1lbnRJbXBsICZmb3JtID0gc3RhdGlj
X2Nhc3Q8SFRNTEZvcm1FbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIGlmIChpZCA9PSBL
SlM6OkhUTUxFbGVtZW50OjpGb3JtU3VibWl0KSB7Ci0gICAgICAgIGZvcm0uc3VibWl0KCk7Ci0g
ICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGlkID09
IEtKUzo6SFRNTEVsZW1lbnQ6OkZvcm1SZXNldCkgewotICAgICAgICBmb3JtLnJlc2V0KCk7Ci0g
ICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKLSAgICAgIH0KKyAgICBpZiAoIXRoaXNPYmouaW5o
ZXJpdHMoJktKUzo6SFRNTEVsZW1lbnQ6OmluZm8pKSB7CisgICAgICAgIE9iamVjdCBlcnIgPSBF
cnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsKKyAgICAgICAgZXhlYy0+c2V0RXhjZXB0aW9u
KGVycik7CisgICAgICAgIHJldHVybiBlcnI7CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2Ug
SURfU0VMRUNUOiB7Ci0gICAgICBIVE1MU2VsZWN0RWxlbWVudEltcGwgJnNlbGVjdCA9IHN0YXRp
Y19jYXN0PEhUTUxTZWxlY3RFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIGlmIChpZCA9
PSBLSlM6OkhUTUxFbGVtZW50OjpTZWxlY3RBZGQpIHsKLSAgICAgICAgc2VsZWN0LmFkZCh0b0hU
TUxFbGVtZW50KGFyZ3NbMF0pLCB0b0hUTUxFbGVtZW50KGFyZ3NbMV0pKTsKLSAgICAgICAgcmV0
dXJuIFVuZGVmaW5lZCgpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1M
RWxlbWVudDo6U2VsZWN0UmVtb3ZlKSB7Ci0gICAgICAgIHNlbGVjdC5yZW1vdmUoaW50KGFyZ3Nb
MF0udG9OdW1iZXIoZXhlYykpKTsKLSAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwotICAgICAg
fQotICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6U2VsZWN0Qmx1cikgewot
ICAgICAgICBzZWxlY3QuYmx1cigpOwotICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAg
ICB9Ci0gICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpTZWxlY3RGb2N1cykg
ewotICAgICAgICBzZWxlY3QuZm9jdXMoKTsKLSAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwot
ICAgICAgfQorICAgIGtkRGVidWcoKSA8PCAiS0pTOjpIVE1MRWxlbWVudEZ1bmN0aW9uOjp0cnlD
YWxsICIgPDwgZW5kbDsKKyAgICBET01FeGNlcHRpb25UcmFuc2xhdG9yIGV4Y2VwdGlvbihleGVj
KTsKKyAgICBIVE1MRWxlbWVudEltcGwgJmVsZW1lbnQgPSAqc3RhdGljX2Nhc3Q8SFRNTEVsZW1l
bnRJbXBsICo+KHN0YXRpY19jYXN0PEhUTUxFbGVtZW50ICo+KHRoaXNPYmouaW1wKCkpLT5pbXBs
KCkpOworCisgICAgaWYgKGVsZW1lbnQuaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6Zm9ybSgpKSkg
eworICAgICAgICBIVE1MRm9ybUVsZW1lbnRJbXBsICZmb3JtID0gc3RhdGljX2Nhc3Q8SFRNTEZv
cm1FbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICAgICAgaWYgKGlkID09IEtKUzo6SFRNTEVs
ZW1lbnQ6OkZvcm1TdWJtaXQpIHsKKyAgICAgICAgICAgIGZvcm0uc3VibWl0KCk7CisgICAgICAg
ICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoaWQg
PT0gS0pTOjpIVE1MRWxlbWVudDo6Rm9ybVJlc2V0KSB7CisgICAgICAgICAgICBmb3JtLnJlc2V0
KCk7CisgICAgICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CisgICAgICAgIH0KICAgICB9Ci0g
ICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9JTlBVVDogewotICAgICAgSFRNTElucHV0RWxlbWVudElt
cGwgJmlucHV0ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7
Ci0gICAgICBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6SW5wdXRCbHVyKSB7Ci0gICAgICAg
IGlucHV0LmJsdXIoKTsKLSAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwotICAgICAgfQotICAg
ICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6SW5wdXRGb2N1cykgewotICAgICAg
ICBpbnB1dC5mb2N1cygpOwotICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9Ci0g
ICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpJbnB1dFNlbGVjdCkgewotICAg
ICAgICBpbnB1dC5zZWxlY3QoKTsKLSAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwotICAgICAg
fQotICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6SW5wdXRDbGljaykgewot
ICAgICAgICBpbnB1dC5jbGljaygpOwotICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAg
ICB9CisgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpzZWxlY3Qo
KSkpIHsKKyAgICAgICAgSFRNTFNlbGVjdEVsZW1lbnRJbXBsICZzZWxlY3QgPSBzdGF0aWNfY2Fz
dDxIVE1MU2VsZWN0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgICAgIGlmIChpZCA9PSBL
SlM6OkhUTUxFbGVtZW50OjpTZWxlY3RBZGQpIHsKKyAgICAgICAgICAgIHNlbGVjdC5hZGQodG9I
VE1MRWxlbWVudChhcmdzWzBdKSwgdG9IVE1MRWxlbWVudChhcmdzWzFdKSk7CisgICAgICAgICAg
ICByZXR1cm4gVW5kZWZpbmVkKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoaWQgPT0g
S0pTOjpIVE1MRWxlbWVudDo6U2VsZWN0UmVtb3ZlKSB7CisgICAgICAgICAgICBzZWxlY3QucmVt
b3ZlKGludChhcmdzWzBdLnRvTnVtYmVyKGV4ZWMpKSk7CisgICAgICAgICAgICByZXR1cm4gVW5k
ZWZpbmVkKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxl
bWVudDo6U2VsZWN0Qmx1cikgeworICAgICAgICAgICAgc2VsZWN0LmJsdXIoKTsKKyAgICAgICAg
ICAgIHJldHVybiBVbmRlZmluZWQoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChpZCA9
PSBLSlM6OkhUTUxFbGVtZW50OjpTZWxlY3RGb2N1cykgeworICAgICAgICAgICAgc2VsZWN0LmZv
Y3VzKCk7CisgICAgICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CisgICAgICAgIH0KICAgICB9
Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9MQUJFTDogewotICAgICAgSFRNTExhYmVsRWxlbWVu
dEltcGwgJmxhYmVsID0gc3RhdGljX2Nhc3Q8SFRNTExhYmVsRWxlbWVudEltcGwgJj4oZWxlbWVu
dCk7Ci0gICAgICAKLSAgICAgIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpMYWJlbEZvY3Vz
KSB7Ci0gICAgICAgICAgbGFiZWwuZm9jdXMoKTsKLSAgICAgICAgICByZXR1cm4gVW5kZWZpbmVk
KCk7Ci0gICAgICB9CisgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNMb2NhbE5hbWUoSFRNTE5hbWVz
OjppbnB1dCgpKSkgeworICAgICAgICBIVE1MSW5wdXRFbGVtZW50SW1wbCAmaW5wdXQgPSBzdGF0
aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICAgICAgaWYgKGlk
ID09IEtKUzo6SFRNTEVsZW1lbnQ6OklucHV0Qmx1cikgeworICAgICAgICAgICAgaW5wdXQuYmx1
cigpOworICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAgICAgICB9CisgICAgICAg
IGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OklucHV0Rm9jdXMpIHsKKyAgICAgICAg
ICAgIGlucHV0LmZvY3VzKCk7CisgICAgICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6SW5wdXRTZWxl
Y3QpIHsKKyAgICAgICAgICAgIGlucHV0LnNlbGVjdCgpOworICAgICAgICAgICAgcmV0dXJuIFVu
ZGVmaW5lZCgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVs
ZW1lbnQ6OklucHV0Q2xpY2spIHsKKyAgICAgICAgICAgIGlucHV0LmNsaWNrKCk7CisgICAgICAg
ICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CisgICAgICAgIH0KICAgICB9Ci0gICAgYnJlYWs7Ci0g
ICAgY2FzZSBJRF9MRUdFTkQ6IHsKLSAgICAgIEhUTUxMZWdlbmRFbGVtZW50SW1wbCAmbGVnZW5k
ID0gc3RhdGljX2Nhc3Q8SFRNTExlZ2VuZEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAg
ICAKLSAgICAgIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpMZWdlbmRGb2N1cykgewotICAg
ICAgICAgIGxlZ2VuZC5mb2N1cygpOwotICAgICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKLSAg
ICAgIH0KKyAgICBlbHNlIGlmIChlbGVtZW50Lmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmJ1dHRv
bigpKSkgeworICAgICAgICBIVE1MQnV0dG9uRWxlbWVudEltcGwgJmJ1dHRvbiA9IHN0YXRpY19j
YXN0PEhUTUxCdXR0b25FbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICAgICAgaWYgKGlkID09
IEtKUzo6SFRNTEVsZW1lbnQ6OkJ1dHRvbkJsdXIpIHsKKyAgICAgICAgICAgIGJ1dHRvbi5ibHVy
KCk7CisgICAgICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CisgICAgICAgIH0KKyAgICAgICAg
ZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6QnV0dG9uRm9jdXMpIHsKKyAgICAgICAg
ICAgIGJ1dHRvbi5mb2N1cygpOworICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAg
ICAgICB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfQlVUVE9OOiB7Ci0gICAgICBI
VE1MQnV0dG9uRWxlbWVudEltcGwgJmJ1dHRvbiA9IHN0YXRpY19jYXN0PEhUTUxCdXR0b25FbGVt
ZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIAotICAgICAgaWYgKGlkID09IEtKUzo6SFRNTEVs
ZW1lbnQ6OkJ1dHRvbkJsdXIpIHsKLSAgICAgICAgYnV0dG9uLmJsdXIoKTsKLSAgICAgICAgcmV0
dXJuIFVuZGVmaW5lZCgpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1M
RWxlbWVudDo6QnV0dG9uRm9jdXMpIHsKLSAgICAgICAgYnV0dG9uLmZvY3VzKCk7Ci0gICAgICAg
IHJldHVybiBVbmRlZmluZWQoKTsKLSAgICAgIH0KKyAgICBlbHNlIGlmIChlbGVtZW50Lmhhc0xv
Y2FsTmFtZShIVE1MTmFtZXM6OmxhYmVsKCkpKSB7CisgICAgICAgIEhUTUxMYWJlbEVsZW1lbnRJ
bXBsICZsYWJlbCA9IHN0YXRpY19jYXN0PEhUTUxMYWJlbEVsZW1lbnRJbXBsICY+KGVsZW1lbnQp
OworICAgICAgICBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6TGFiZWxGb2N1cykgeworICAg
ICAgICAgICAgbGFiZWwuZm9jdXMoKTsKKyAgICAgICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsK
KyAgICAgICAgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX1RFWFRBUkVBOiB7Ci0g
ICAgICBIVE1MVGV4dEFyZWFFbGVtZW50SW1wbCAmdGV4dGFyZWEgPSBzdGF0aWNfY2FzdDxIVE1M
VGV4dEFyZWFFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIGlmIChpZCA9PSBLSlM6OkhU
TUxFbGVtZW50OjpUZXh0QXJlYUJsdXIpIHsKLSAgICAgICAgdGV4dGFyZWEuYmx1cigpOwotICAg
ICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChpZCA9PSBL
SlM6OkhUTUxFbGVtZW50OjpUZXh0QXJlYUZvY3VzKSB7Ci0gICAgICAgIHRleHRhcmVhLmZvY3Vz
KCk7Ci0gICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYg
KGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRleHRBcmVhU2VsZWN0KSB7Ci0gICAgICAgIHRleHRh
cmVhLnNlbGVjdCgpOwotICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9CisgICAg
ZWxzZSBpZiAoZWxlbWVudC5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpsZWdlbmQoKSkpIHsKKyAg
ICAgICAgSFRNTExlZ2VuZEVsZW1lbnRJbXBsICZsZWdlbmQgPSBzdGF0aWNfY2FzdDxIVE1MTGVn
ZW5kRWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgICAgIGlmIChpZCA9PSBLSlM6OkhUTUxF
bGVtZW50OjpMZWdlbmRGb2N1cykgeworICAgICAgICAgICAgbGVnZW5kLmZvY3VzKCk7CisgICAg
ICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CisgICAgICAgIH0KICAgICB9Ci0gICAgYnJlYWs7
Ci0gICAgY2FzZSBJRF9BOiB7Ci0gICAgICBIVE1MQW5jaG9yRWxlbWVudEltcGwgJmFuY2hvciA9
IHN0YXRpY19jYXN0PEhUTUxBbmNob3JFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIGlm
IChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpBbmNob3JCbHVyKSB7Ci0gICAgICAgIGFuY2hvci5i
bHVyKCk7Ci0gICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKLSAgICAgIH0KLSAgICAgIGVsc2Ug
aWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OkFuY2hvckZvY3VzKSB7Ci0gICAgICAgIGFuY2hv
ci5mb2N1cygpOwotICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9IAotICAgICAg
ZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6QW5jaG9yVG9TdHJpbmcpIHsKLQlyZXR1
cm4gU3RyaW5nKHRoaXNPYmoudG9TdHJpbmcoZXhlYykpOwotICAgICAgfQorICAgIGVsc2UgaWYg
KGVsZW1lbnQuaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dGV4dGFyZWEoKSkpIHsKKyAgICAgICAg
SFRNTFRleHRBcmVhRWxlbWVudEltcGwgJnRleHRhcmVhID0gc3RhdGljX2Nhc3Q8SFRNTFRleHRB
cmVhRWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgICAgIGlmIChpZCA9PSBLSlM6OkhUTUxF
bGVtZW50OjpUZXh0QXJlYUJsdXIpIHsKKyAgICAgICAgICAgIHRleHRhcmVhLmJsdXIoKTsKKyAg
ICAgICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlm
IChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUZXh0QXJlYUZvY3VzKSB7CisgICAgICAgICAgICB0
ZXh0YXJlYS5mb2N1cygpOworICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAgICAg
ICB9CisgICAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRleHRBcmVhU2Vs
ZWN0KSB7CisgICAgICAgICAgICB0ZXh0YXJlYS5zZWxlY3QoKTsKKyAgICAgICAgICAgIHJldHVy
biBVbmRlZmluZWQoKTsKKyAgICAgICAgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElE
X1RBQkxFOiB7Ci0gICAgICBIVE1MVGFibGVFbGVtZW50SW1wbCAmdGFibGUgPSBzdGF0aWNfY2Fz
dDxIVE1MVGFibGVFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIGlmIChpZCA9PSBLSlM6
OkhUTUxFbGVtZW50OjpUYWJsZUNyZWF0ZVRIZWFkKQotICAgICAgICByZXR1cm4gZ2V0RE9NTm9k
ZShleGVjLHRhYmxlLmNyZWF0ZVRIZWFkKCkpOwotICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpI
VE1MRWxlbWVudDo6VGFibGVEZWxldGVUSGVhZCkgewotICAgICAgICB0YWJsZS5kZWxldGVUSGVh
ZCgpOwotICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlm
IChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUYWJsZUNyZWF0ZVRGb290KQotICAgICAgICByZXR1
cm4gZ2V0RE9NTm9kZShleGVjLHRhYmxlLmNyZWF0ZVRGb290KCkpOwotICAgICAgZWxzZSBpZiAo
aWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6VGFibGVEZWxldGVURm9vdCkgewotICAgICAgICB0YWJs
ZS5kZWxldGVURm9vdCgpOwotICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9Ci0g
ICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUYWJsZUNyZWF0ZUNhcHRpb24p
Ci0gICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsdGFibGUuY3JlYXRlQ2FwdGlvbigpKTsK
LSAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRhYmxlRGVsZXRlQ2FwdGlv
bikgewotICAgICAgICB0YWJsZS5kZWxldGVDYXB0aW9uKCk7Ci0gICAgICAgIHJldHVybiBVbmRl
ZmluZWQoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6
OlRhYmxlSW5zZXJ0Um93KQotICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLHRhYmxlLmlu
c2VydFJvdyhhcmdzWzBdLnRvSW50MzIoZXhlYyksIGV4Y2VwdGlvbikpOwotICAgICAgZWxzZSBp
ZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6VGFibGVEZWxldGVSb3cpIHsKLSAgICAgICAgdGFi
bGUuZGVsZXRlUm93KGFyZ3NbMF0udG9JbnQzMihleGVjKSwgZXhjZXB0aW9uKTsKLSAgICAgICAg
cmV0dXJuIFVuZGVmaW5lZCgpOwotICAgICAgfQorICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFzTG9j
YWxOYW1lKEhUTUxOYW1lczo6YSgpKSkgeworICAgICAgICBIVE1MQW5jaG9yRWxlbWVudEltcGwg
JmFuY2hvciA9IHN0YXRpY19jYXN0PEhUTUxBbmNob3JFbGVtZW50SW1wbCAmPihlbGVtZW50KTsK
KyAgICAgICAgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OkFuY2hvckJsdXIpIHsKKyAgICAg
ICAgICAgIGFuY2hvci5ibHVyKCk7CisgICAgICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6QW5jaG9y
Rm9jdXMpIHsKKyAgICAgICAgICAgIGFuY2hvci5mb2N1cygpOworICAgICAgICAgICAgcmV0dXJu
IFVuZGVmaW5lZCgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRN
TEVsZW1lbnQ6OkFuY2hvclRvU3RyaW5nKQorICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0aGlz
T2JqLnRvU3RyaW5nKGV4ZWMpKTsKICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9USEVB
RDoKLSAgICBjYXNlIElEX1RCT0RZOgotICAgIGNhc2UgSURfVEZPT1Q6IHsKLSAgICAgIEhUTUxU
YWJsZVNlY3Rpb25FbGVtZW50SW1wbCAmdGFibGVTZWN0aW9uID0gc3RhdGljX2Nhc3Q8SFRNTFRh
YmxlU2VjdGlvbkVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgaWYgKGlkID09IEtKUzo6
SFRNTEVsZW1lbnQ6OlRhYmxlU2VjdGlvbkluc2VydFJvdykKLSAgICAgICAgcmV0dXJuIGdldERP
TU5vZGUoZXhlYywgdGFibGVTZWN0aW9uLmluc2VydFJvdyhhcmdzWzBdLnRvSW50MzIoZXhlYyks
IGV4Y2VwdGlvbikpOwotICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6VGFi
bGVTZWN0aW9uRGVsZXRlUm93KSB7Ci0gICAgICAgIHRhYmxlU2VjdGlvbi5kZWxldGVSb3coYXJn
c1swXS50b0ludDMyKGV4ZWMpLCBleGNlcHRpb24pOwotICAgICAgICByZXR1cm4gVW5kZWZpbmVk
KCk7Ci0gICAgICB9CisgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNMb2NhbE5hbWUoSFRNTE5hbWVz
Ojp0YWJsZSgpKSkgeworICAgICAgICBIVE1MVGFibGVFbGVtZW50SW1wbCAmdGFibGUgPSBzdGF0
aWNfY2FzdDxIVE1MVGFibGVFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICAgICAgaWYgKGlk
ID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRhYmxlQ3JlYXRlVEhlYWQpCisgICAgICAgICAgICByZXR1
cm4gZ2V0RE9NTm9kZShleGVjLHRhYmxlLmNyZWF0ZVRIZWFkKCkpOworICAgICAgICBlbHNlIGlm
IChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUYWJsZURlbGV0ZVRIZWFkKSB7CisgICAgICAgICAg
ICB0YWJsZS5kZWxldGVUSGVhZCgpOworICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwor
ICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRhYmxl
Q3JlYXRlVEZvb3QpCisgICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLHRhYmxlLmNy
ZWF0ZVRGb290KCkpOworICAgICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpU
YWJsZURlbGV0ZVRGb290KSB7CisgICAgICAgICAgICB0YWJsZS5kZWxldGVURm9vdCgpOworICAg
ICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYg
KGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRhYmxlQ3JlYXRlQ2FwdGlvbikKKyAgICAgICAgICAg
IHJldHVybiBnZXRET01Ob2RlKGV4ZWMsdGFibGUuY3JlYXRlQ2FwdGlvbigpKTsKKyAgICAgICAg
ZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6VGFibGVEZWxldGVDYXB0aW9uKSB7Cisg
ICAgICAgICAgICB0YWJsZS5kZWxldGVDYXB0aW9uKCk7CisgICAgICAgICAgICByZXR1cm4gVW5k
ZWZpbmVkKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxl
bWVudDo6VGFibGVJbnNlcnRSb3cpCisgICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVj
LHRhYmxlLmluc2VydFJvdyhhcmdzWzBdLnRvSW50MzIoZXhlYyksIGV4Y2VwdGlvbikpOworICAg
ICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUYWJsZURlbGV0ZVJvdykgewor
ICAgICAgICAgICAgdGFibGUuZGVsZXRlUm93KGFyZ3NbMF0udG9JbnQzMihleGVjKSwgZXhjZXB0
aW9uKTsKKyAgICAgICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKKyAgICAgICAgfQogICAgIH0K
LSAgICBicmVhazsKLSAgICBjYXNlIElEX1RSOiB7Ci0gICAgICBIVE1MVGFibGVSb3dFbGVtZW50
SW1wbCAmdGFibGVSb3cgPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVSb3dFbGVtZW50SW1wbCAmPihl
bGVtZW50KTsKLSAgICAgIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUYWJsZVJvd0luc2Vy
dENlbGwpCi0gICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsdGFibGVSb3cuaW5zZXJ0Q2Vs
bChhcmdzWzBdLnRvSW50MzIoZXhlYyksIGV4Y2VwdGlvbikpOwotICAgICAgZWxzZSBpZiAoaWQg
PT0gS0pTOjpIVE1MRWxlbWVudDo6VGFibGVSb3dEZWxldGVDZWxsKSB7Ci0gICAgICAgIHRhYmxl
Um93LmRlbGV0ZUNlbGwoYXJnc1swXS50b0ludDMyKGV4ZWMpLCBleGNlcHRpb24pOwotICAgICAg
ICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9CisgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNM
b2NhbE5hbWUoSFRNTE5hbWVzOjp0aGVhZCgpKSB8fAorICAgICAgICAgICAgIGVsZW1lbnQuaGFz
TG9jYWxOYW1lKEhUTUxOYW1lczo6dGJvZHkoKSkgfHwKKyAgICAgICAgICAgICBlbGVtZW50Lmhh
c0xvY2FsTmFtZShIVE1MTmFtZXM6OnRmb290KCkpKSB7CisgICAgICAgIEhUTUxUYWJsZVNlY3Rp
b25FbGVtZW50SW1wbCAmdGFibGVTZWN0aW9uID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlU2VjdGlv
bkVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgICAgICBpZiAoaWQgPT0gS0pTOjpIVE1MRWxl
bWVudDo6VGFibGVTZWN0aW9uSW5zZXJ0Um93KQorICAgICAgICAgICAgcmV0dXJuIGdldERPTU5v
ZGUoZXhlYywgdGFibGVTZWN0aW9uLmluc2VydFJvdyhhcmdzWzBdLnRvSW50MzIoZXhlYyksIGV4
Y2VwdGlvbikpOworICAgICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUYWJs
ZVNlY3Rpb25EZWxldGVSb3cpIHsKKyAgICAgICAgICAgIHRhYmxlU2VjdGlvbi5kZWxldGVSb3co
YXJnc1swXS50b0ludDMyKGV4ZWMpLCBleGNlcHRpb24pOworICAgICAgICAgICAgcmV0dXJuIFVu
ZGVmaW5lZCgpOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFzTG9j
YWxOYW1lKEhUTUxOYW1lczo6dHIoKSkpIHsKKyAgICAgICAgSFRNTFRhYmxlUm93RWxlbWVudElt
cGwgJnRhYmxlUm93ID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlUm93RWxlbWVudEltcGwgJj4oZWxl
bWVudCk7CisgICAgICAgIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUYWJsZVJvd0luc2Vy
dENlbGwpCisgICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLHRhYmxlUm93Lmluc2Vy
dENlbGwoYXJnc1swXS50b0ludDMyKGV4ZWMpLCBleGNlcHRpb24pKTsKKyAgICAgICAgZWxzZSBp
ZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6VGFibGVSb3dEZWxldGVDZWxsKSB7CisgICAgICAg
ICAgICB0YWJsZVJvdy5kZWxldGVDZWxsKGFyZ3NbMF0udG9JbnQzMihleGVjKSwgZXhjZXB0aW9u
KTsKKyAgICAgICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKKyAgICAgICAgfQogICAgIH0KLSAg
ICBjYXNlIElEX01BUlFVRUU6IHsKKyAgICBlbHNlIGlmIChlbGVtZW50Lmhhc0xvY2FsTmFtZShI
VE1MTmFtZXM6Om1hcnF1ZWUoKSkpIHsKICAgICAgICAgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1l
bnQ6Ok1hcnF1ZWVTdGFydCAmJiBlbGVtZW50LnJlbmRlcmVyKCkgJiYgCiAgICAgICAgICAgICBl
bGVtZW50LnJlbmRlcmVyKCktPmxheWVyKCkgJiYKICAgICAgICAgICAgIGVsZW1lbnQucmVuZGVy
ZXIoKS0+bGF5ZXIoKS0+bWFycXVlZSgpKSB7CkBAIC0yMzA1LDkgKzI0NDYsOSBAQCBWYWx1ZSBL
SlM6OkhUTUxFbGVtZW50RnVuY3Rpb246OnRyeUNhbGwoCiAgICAgICAgICAgICBlbGVtZW50LnJl
bmRlcmVyKCktPmxheWVyKCktPm1hcnF1ZWUoKS0+c3RvcCgpOwogICAgICAgICAgICAgcmV0dXJu
IFVuZGVmaW5lZCgpOwogICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBjYXNl
IElEX0NBTlZBUzogeworI2lmIEFQUExFX0NIQU5HRVMKKyAgICBlbHNlIGlmIChlbGVtZW50Lmhh
c0xvY2FsTmFtZShIVE1MTmFtZXM6OmNhbnZhcygpKSkgewogICAgICAgICBpZiAoaWQgPT0gS0pT
OjpIVE1MRWxlbWVudDo6R2V0Q29udGV4dCkgewogICAgICAgICAgICAgaWYgKGFyZ3Muc2l6ZSgp
ID09IDAgfHwgKGFyZ3Muc2l6ZSgpID09IDEgJiYgYXJnc1swXS50b1N0cmluZyhleGVjKS5xc3Ry
aW5nKCkubG93ZXIoKSA9PSAiMmQiKSkgewogICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3Qo
bmV3IENvbnRleHQyRCgmZWxlbWVudCkpOwpAQCAtMjMxNSw3MzggKzI0NTYsNzU2IEBAIFZhbHVl
IEtKUzo6SFRNTEVsZW1lbnRGdW5jdGlvbjo6dHJ5Q2FsbCgKICAgICAgICAgICAgIHJldHVybiBV
bmRlZmluZWQoKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKLSAgICBicmVhazsKLSAgfQorI2Vu
ZGlmCiAKLSAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0K
IAogdm9pZCBLSlM6OkhUTUxFbGVtZW50Ojp0cnlQdXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJ
ZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIGNvbnN0IFZhbHVlJiB2YWx1ZSwgaW50IGF0dHIpCiB7
CiAjaWZkZWYgS0pTX1ZFUkJPU0UKLSAgRE9NOjpET01TdHJpbmcgc3RyID0gdmFsdWUuaXNBKE51
bGxUeXBlKSA/IERPTTo6RE9NU3RyaW5nKCkgOiB2YWx1ZS50b1N0cmluZyhleGVjKS5zdHJpbmco
KTsKKyAgICBET006OkRPTVN0cmluZyBzdHIgPSB2YWx1ZS5pc0EoTnVsbFR5cGUpID8gRE9NOjpE
T01TdHJpbmcoKSA6IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpOwogI2VuZGlmCi0gIEhU
TUxFbGVtZW50SW1wbCAmZWxlbWVudCA9ICpzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwgKj4o
aW1wbCgpKTsKKyAgICBIVE1MRWxlbWVudEltcGwgJmVsZW1lbnQgPSAqc3RhdGljX2Nhc3Q8SFRN
TEVsZW1lbnRJbXBsICo+KGltcGwoKSk7CiAjaWZkZWYgS0pTX1ZFUkJPU0UKLSAga2REZWJ1Zyg2
MDcwKSA8PCAiS0pTOjpIVE1MRWxlbWVudDo6dHJ5UHV0ICIgPDwgcHJvcGVydHlOYW1lLnFzdHJp
bmcoKQotICAgICAgICAgICAgICAgIDw8ICIgdGhpc1RhZz0iIDw8IGVsZW1lbnQudGFnTmFtZSgp
LnN0cmluZygpCi0gICAgICAgICAgICAgICAgPDwgIiBzdHI9IiA8PCBzdHIuc3RyaW5nKCkgPDwg
ZW5kbDsKKyAgICBrZERlYnVnKDYwNzApIDw8ICJLSlM6OkhUTUxFbGVtZW50Ojp0cnlQdXQgIiA8
PCBwcm9wZXJ0eU5hbWUucXN0cmluZygpCisgICAgICAgICAgICAgICAgICA8PCAiIHRoaXNUYWc9
IiA8PCBlbGVtZW50LnRhZ05hbWUoKS5zdHJpbmcoKQorICAgICAgICAgICAgICAgICAgPDwgIiBz
dHI9IiA8PCBzdHIuc3RyaW5nKCkgPDwgZW5kbDsKICNlbmRpZgotICAvLyBGaXJzdCBsb29rIGF0
IGR5bmFtaWMgcHJvcGVydGllcwotICBzd2l0Y2ggKGVsZW1lbnQuaWQoKSkgewotICAgIGNhc2Ug
SURfU0VMRUNUOiB7Ci0gICAgICBIVE1MU2VsZWN0RWxlbWVudEltcGwgJnNlbGVjdCA9IHN0YXRp
Y19jYXN0PEhUTUxTZWxlY3RFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIGJvb2wgb2s7
Ci0gICAgICAvKnVpbnQgdSA9Ki8gcHJvcGVydHlOYW1lLnRvVUxvbmcoJm9rKTsKLSAgICAgIGlm
IChvaykgewotICAgICAgICBPYmplY3QgY29sbCA9IE9iamVjdDo6ZHluYW1pY0Nhc3QoIGdldFNl
bGVjdEhUTUxDb2xsZWN0aW9uKGV4ZWMsIHNlbGVjdC5vcHRpb25zSFRNTENvbGxlY3Rpb24oKS5n
ZXQoKSwgJnNlbGVjdCkgKTsKLSAgICAgICAgaWYgKCAhY29sbC5pc051bGwoKSApCi0gICAgICAg
ICAgY29sbC5wdXQoZXhlYyxwcm9wZXJ0eU5hbWUsdmFsdWUpOwotICAgICAgICByZXR1cm47Ci0g
ICAgICB9CisgICAgLy8gRmlyc3QgbG9vayBhdCBkeW5hbWljIHByb3BlcnRpZXMKKyAgICBpZiAo
ZWxlbWVudC5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpzZWxlY3QoKSkpIHsKKyAgICAgICAgSFRN
TFNlbGVjdEVsZW1lbnRJbXBsICZzZWxlY3QgPSBzdGF0aWNfY2FzdDxIVE1MU2VsZWN0RWxlbWVu
dEltcGwgJj4oZWxlbWVudCk7CisgICAgICAgIGJvb2wgb2s7CisgICAgICAgIC8qdWludCB1ID0q
LyBwcm9wZXJ0eU5hbWUudG9VTG9uZygmb2spOworICAgICAgICBpZiAob2spIHsKKyAgICAgICAg
ICAgIE9iamVjdCBjb2xsID0gT2JqZWN0OjpkeW5hbWljQ2FzdCggZ2V0U2VsZWN0SFRNTENvbGxl
Y3Rpb24oZXhlYywgc2VsZWN0Lm9wdGlvbnNIVE1MQ29sbGVjdGlvbigpLmdldCgpLCAmc2VsZWN0
KSApOworICAgICAgICAgICAgaWYgKCFjb2xsLmlzTnVsbCgpKQorICAgICAgICAgICAgICAgIGNv
bGwucHV0KGV4ZWMscHJvcGVydHlOYW1lLHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQogICAgIH0KICNpZiBBUFBMRV9DSEFOR0VTCi0gICAgY2FzZSBJRF9FTUJFRDoKLSAg
ICBjYXNlIElEX09CSkVDVDoKLSAgICBjYXNlIElEX0FQUExFVDogeworICAgIGVsc2UgaWYgKGVs
ZW1lbnQuaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6ZW1iZWQoKSkgfHwKKyAgICAgICAgICAgICBl
bGVtZW50Lmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9iamVjdCgpKSB8fAorICAgICAgICAgICAg
IGVsZW1lbnQuaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6YXBwbGV0KCkpKSB7CiAJVmFsdWUgcnVu
dGltZU9iamVjdCA9IGdldFJ1bnRpbWVPYmplY3QoZXhlYywmZWxlbWVudCk7CiAJaWYgKCFydW50
aW1lT2JqZWN0LmlzTnVsbCgpKSB7CiAJICAgIE9iamVjdEltcCAqaW1wID0gc3RhdGljX2Nhc3Q8
T2JqZWN0SW1wICo+KHJ1bnRpbWVPYmplY3QuaW1wKCkpOwotCSAgICBpZiAoaW1wLT5jYW5QdXQo
ZXhlYywgcHJvcGVydHlOYW1lKSkgeworCSAgICBpZiAoaW1wLT5jYW5QdXQoZXhlYywgcHJvcGVy
dHlOYW1lKSkKIAkJcmV0dXJuIGltcC0+cHV0IChleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKTsK
LQkgICAgfQogCX0KICAgICB9Ci0gICAgICBicmVhazsKICNlbmRpZgotICAgIGJyZWFrOwotICBk
ZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KIAotICBjb25zdCBIYXNoVGFibGUqIHRhYmxlID0g
Y2xhc3NJbmZvKCktPnByb3BIYXNoVGFibGU7IC8vIGdldCB0aGUgcmlnaHQgaGFzaHRhYmxlCi0g
IGNvbnN0IEhhc2hFbnRyeSogZW50cnkgPSBMb29rdXA6OmZpbmRFbnRyeSh0YWJsZSwgcHJvcGVy
dHlOYW1lKTsKLSAgaWYgKGVudHJ5KSB7Ci0gICAgaWYgKGVudHJ5LT5hdHRyICYgRnVuY3Rpb24p
IC8vIGZ1bmN0aW9uOiBwdXQgYXMgb3ZlcnJpZGUgcHJvcGVydHkKLSAgICB7Ci0gICAgICBPYmpl
Y3RJbXA6OnB1dChleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBhdHRyKTsKLSAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgZWxzZSBpZiAoKGVudHJ5LT5hdHRyICYgUmVhZE9ubHkpID09IDApIC8v
IGxldCBET01PYmplY3RMb29rdXBQdXQgcHJpbnQgdGhlIHdhcm5pbmcgaWYgbm90Ci0gICAgewot
ICAgICAgcHV0VmFsdWUoZXhlYywgZW50cnktPnZhbHVlLCB2YWx1ZSwgYXR0cik7Ci0gICAgICBy
ZXR1cm47CisgICAgY29uc3QgSGFzaFRhYmxlKiB0YWJsZSA9IGNsYXNzSW5mbygpLT5wcm9wSGFz
aFRhYmxlOyAvLyBnZXQgdGhlIHJpZ2h0IGhhc2h0YWJsZQorICAgIGNvbnN0IEhhc2hFbnRyeSog
ZW50cnkgPSBMb29rdXA6OmZpbmRFbnRyeSh0YWJsZSwgcHJvcGVydHlOYW1lKTsKKyAgICBpZiAo
ZW50cnkpIHsKKyAgICAgICAgaWYgKGVudHJ5LT5hdHRyICYgRnVuY3Rpb24pIHsgLy8gZnVuY3Rp
b246IHB1dCBhcyBvdmVycmlkZSBwcm9wZXJ0eQorICAgICAgICAgICAgT2JqZWN0SW1wOjpwdXQo
ZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgYXR0cik7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoKGVudHJ5LT5hdHRyICYgUmVhZE9ubHkpID09IDAp
IHsgLy8gbGV0IERPTU9iamVjdExvb2t1cFB1dCBwcmludCB0aGUgd2FybmluZyBpZiBub3QKKyAg
ICAgICAgICAgIHB1dFZhbHVlKGV4ZWMsIGVudHJ5LT52YWx1ZSwgdmFsdWUsIGF0dHIpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgfQotICB9Ci0gIERPTU9iamVjdExvb2t1
cFB1dDxLSlM6OkhUTUxFbGVtZW50LCBET01FbGVtZW50PihleGVjLCBwcm9wZXJ0eU5hbWUsIHZh
bHVlLCBhdHRyLCAmSFRNTEVsZW1lbnRUYWJsZSwgdGhpcyk7CisKKyAgICBET01PYmplY3RMb29r
dXBQdXQ8S0pTOjpIVE1MRWxlbWVudCwgRE9NRWxlbWVudD4oZXhlYywgcHJvcGVydHlOYW1lLCB2
YWx1ZSwgYXR0ciwgJkhUTUxFbGVtZW50VGFibGUsIHRoaXMpOwogfQogCi12b2lkIEhUTUxFbGVt
ZW50OjpwdXRWYWx1ZShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZh
bHVlLCBpbnQpCit2b2lkIEhUTUxFbGVtZW50OjpodG1sU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIp
CiB7Ci0gIERPTUV4Y2VwdGlvblRyYW5zbGF0b3IgZXhjZXB0aW9uKGV4ZWMpOwotICBET006OkRP
TVN0cmluZyBzdHIgPSB2YWx1ZS5pc0EoTnVsbFR5cGUpID8gRE9NOjpET01TdHJpbmcoKSA6IHZh
bHVlLnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpOwotICBIVE1MRWxlbWVudEltcGwgJmVsZW1lbnQg
PSAqc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KGltcGwoKSk7Ci0jaWZkZWYgS0pTX1ZF
UkJPU0UKLSAga2REZWJ1Zyg2MDcwKSA8PCAiS0pTOjpIVE1MRWxlbWVudDo6cHV0VmFsdWUgIgot
ICAgICAgICAgICAgICAgIDw8ICIgdGhpc1RhZz0iIDw8IGVsZW1lbnQudGFnTmFtZSgpLnN0cmlu
ZygpCi0gICAgICAgICAgICAgICAgPDwgIiB0b2tlbj0iIDw8IHRva2VuIDw8IGVuZGw7Ci0jZW5k
aWYKKyAgICBIVE1MSGVhZEVsZW1lbnRJbXBsICZoZWFkID0gKnN0YXRpY19jYXN0PEhUTUxIZWFk
RWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIGlmICh0b2tlbiA9PSBIZWFkUHJvZmlsZSkgCisg
ICAgICAgIGhlYWQuc2V0UHJvZmlsZShzdHIpOworfQogCi0gIHN3aXRjaCAoZWxlbWVudC5pZCgp
KSB7Ci0gIGNhc2UgSURfSFRNTDogewotICAgICAgSFRNTEh0bWxFbGVtZW50SW1wbCAmaHRtbCA9
IHN0YXRpY19jYXN0PEhUTUxIdG1sRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0
Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIEh0bWxWZXJzaW9uOiAgICAgICAgIHsgaHRtbC5zZXRW
ZXJzaW9uKHN0cik7IHJldHVybjsgfQotICAgICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElE
X0hFQUQ6IHsKLSAgICBIVE1MSGVhZEVsZW1lbnRJbXBsICZoZWFkID0gc3RhdGljX2Nhc3Q8SFRN
TEhlYWRFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKK3ZvaWQgSFRNTEVsZW1lbnQ6OmhlYWRTZXR0
ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3Qg
RE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MSGVhZEVsZW1lbnRJbXBsICZoZWFkID0g
KnN0YXRpY19jYXN0PEhUTUxIZWFkRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIGlmICh0b2tl
biA9PSBIZWFkUHJvZmlsZSkgCisgICAgICAgIGhlYWQuc2V0UHJvZmlsZShzdHIpOworfQorCit2
b2lkIEhUTUxFbGVtZW50OjpsaW5rU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBj
b25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRN
TExpbmtFbGVtZW50SW1wbCAmbGluayA9ICpzdGF0aWNfY2FzdDxIVE1MTGlua0VsZW1lbnRJbXBs
Kj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBIZWFkUHJvZmlsZTog
ICAgICAgICB7IGhlYWQuc2V0UHJvZmlsZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBM
aW5rRGlzYWJsZWQ6ICAgICAgICB7IGxpbmsuc2V0RGlzYWJsZWQodmFsdWUudG9Cb29sZWFuKGV4
ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgTGlua0NoYXJzZXQ6ICAgICAgICAgeyBsaW5r
LnNldENoYXJzZXQoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgTGlua0hyZWY6ICAgICAg
ICAgICAgeyBsaW5rLnNldEhyZWYoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgTGlua0hy
ZWZMYW5nOiAgICAgICAgeyBsaW5rLnNldEhyZWZsYW5nKHN0cik7IHJldHVybjsgfQorICAgICAg
ICBjYXNlIExpbmtNZWRpYTogICAgICAgICAgIHsgbGluay5zZXRNZWRpYShzdHIpOyByZXR1cm47
IH0KKyAgICAgICAgY2FzZSBMaW5rUmVsOiAgICAgICAgICAgICB7IGxpbmsuc2V0UmVsKHN0cik7
IHJldHVybjsgfQorICAgICAgICBjYXNlIExpbmtSZXY6ICAgICAgICAgICAgIHsgbGluay5zZXRS
ZXYoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgTGlua1RhcmdldDogICAgICAgICAgeyBs
aW5rLnNldFRhcmdldChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBMaW5rVHlwZTogICAg
ICAgICAgICB7IGxpbmsuc2V0VHlwZShzdHIpOyByZXR1cm47IH0KICAgICB9Ci0gIH0KLSAgYnJl
YWs7Ci0gIGNhc2UgSURfTElOSzogewotICAgIEhUTUxMaW5rRWxlbWVudEltcGwgJmxpbmsgPSBz
dGF0aWNfY2FzdDxIVE1MTGlua0VsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgIHN3aXRjaCAo
dG9rZW4pIHsKLSAgICAgIGNhc2UgTGlua0Rpc2FibGVkOiAgICAgICAgeyBsaW5rLnNldERpc2Fi
bGVkKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBMaW5rQ2hh
cnNldDogICAgICAgICB7IGxpbmsuc2V0Q2hhcnNldChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNh
c2UgTGlua0hyZWY6ICAgICAgICAgICAgeyBsaW5rLnNldEhyZWYoc3RyKTsgcmV0dXJuOyB9Ci0g
ICAgICBjYXNlIExpbmtIcmVmTGFuZzogICAgICAgIHsgbGluay5zZXRIcmVmbGFuZyhzdHIpOyBy
ZXR1cm47IH0KLSAgICAgIGNhc2UgTGlua01lZGlhOiAgICAgICAgICAgeyBsaW5rLnNldE1lZGlh
KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBMaW5rUmVsOiAgICAgICAgICAgICB7IGxpbmsu
c2V0UmVsKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBMaW5rUmV2OiAgICAgICAgICAgICB7
IGxpbmsuc2V0UmV2KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBMaW5rVGFyZ2V0OiAgICAg
ICAgICB7IGxpbmsuc2V0VGFyZ2V0KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBMaW5rVHlw
ZTogICAgICAgICAgICB7IGxpbmsuc2V0VHlwZShzdHIpOyByZXR1cm47IH0KLSAgICAgIH0KLSAg
ICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9USVRMRTogewotICAgICAgSFRNTFRpdGxlRWxl
bWVudEltcGwgJnRpdGxlID0gc3RhdGljX2Nhc3Q8SFRNTFRpdGxlRWxlbWVudEltcGwgJj4oZWxl
bWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIFRpdGxlVGV4dDogICAg
ICAgICAgICAgICAgIHsgdGl0bGUuc2V0VGV4dChzdHIpOyByZXR1cm47IH0KLSAgICAgIH0KLSAg
ICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9NRVRBOiB7Ci0gICAgICBIVE1MTWV0YUVsZW1l
bnRJbXBsICZtZXRhID0gc3RhdGljX2Nhc3Q8SFRNTE1ldGFFbGVtZW50SW1wbCAmPihlbGVtZW50
KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgTWV0YUNvbnRlbnQ6ICAgICAg
ICAgeyBtZXRhLnNldENvbnRlbnQoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIE1ldGFIdHRw
RXF1aXY6ICAgICAgIHsgbWV0YS5zZXRIdHRwRXF1aXYoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBj
YXNlIE1ldGFOYW1lOiAgICAgICAgICAgIHsgbWV0YS5zZXROYW1lKHN0cik7IHJldHVybjsgfQot
ICAgICAgY2FzZSBNZXRhU2NoZW1lOiAgICAgICAgICB7IG1ldGEuc2V0U2NoZW1lKHN0cik7IHJl
dHVybjsgfQotICAgICAgfQotICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0JBU0U6IHsK
LSAgICAgIEhUTUxCYXNlRWxlbWVudEltcGwgJmJhc2UgPSBzdGF0aWNfY2FzdDxIVE1MQmFzZUVs
ZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgY2Fz
ZSBCYXNlSHJlZjogICAgICAgICAgICB7IGJhc2Uuc2V0SHJlZihzdHIpOyByZXR1cm47IH0KLSAg
ICAgIGNhc2UgQmFzZVRhcmdldDogICAgICAgICAgeyBiYXNlLnNldFRhcmdldChzdHIpOyByZXR1
cm47IH0KLSAgICAgIH0KLSAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9JU0lOREVYOiB7
Ci0gICAgICBIVE1MSXNJbmRleEVsZW1lbnRJbXBsICZpc2luZGV4ID0gc3RhdGljX2Nhc3Q8SFRN
TElzSW5kZXhFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsK
LSAgICAgIC8vIHJlYWQtb25seTogZm9ybQotICAgICAgY2FzZSBJc0luZGV4UHJvbXB0OiAgICAg
ICAgICAgICAgIHsgaXNpbmRleC5zZXRQcm9tcHQoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICB9Ci0g
ICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfU1RZTEU6IHsKLSAgICAgIEhUTUxTdHlsZUVs
ZW1lbnRJbXBsICZzdHlsZSA9IHN0YXRpY19jYXN0PEhUTUxTdHlsZUVsZW1lbnRJbXBsICY+KGVs
ZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgY2FzZSBTdHlsZURpc2FibGVk
OiAgICAgICAgeyBzdHlsZS5zZXREaXNhYmxlZCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1
cm47IH0KLSAgICAgIGNhc2UgU3R5bGVNZWRpYTogICAgICAgICAgIHsgc3R5bGUuc2V0TWVkaWEo
c3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFN0eWxlVHlwZTogICAgICAgICAgICB7IHN0eWxl
LnNldFR5cGUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICB9Ci0gICAgfQotICAgIGJyZWFrOwotICAg
IGNhc2UgSURfQk9EWTogewotICAgICAgSFRNTEJvZHlFbGVtZW50SW1wbCAmYm9keSA9IHN0YXRp
Y19jYXN0PEhUTUxCb2R5RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRv
a2VuKSB7Ci0gICAgICBjYXNlIEJvZHlBTGluazogICAgICAgICAgIHsgYm9keS5zZXRBTGluayhz
dHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQm9keUJhY2tncm91bmQ6ICAgICAgeyBib2R5LnNl
dEJhY2tncm91bmQoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEJvZHlCZ0NvbG9yOiAgICAg
ICAgIHsgYm9keS5zZXRCZ0NvbG9yKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBCb2R5TGlu
azogICAgICAgICAgICB7IGJvZHkuc2V0TGluayhzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2Ug
Qm9keVRleHQ6ICAgICAgICAgICAgeyBib2R5LnNldFRleHQoc3RyKTsgcmV0dXJuOyB9Ci0gICAg
ICBjYXNlIEJvZHlWTGluazogICAgICAgICAgIHsgYm9keS5zZXRWTGluayhzdHIpOyByZXR1cm47
IH0KLSAgICAgIGNhc2UgQm9keVNjcm9sbExlZnQ6Ci0gICAgICBjYXNlIEJvZHlTY3JvbGxUb3A6
IHsKLSAgICAgICAgICBRU2Nyb2xsVmlldyogc3ZpZXcgPSBib2R5Lm93bmVyRG9jdW1lbnQoKS0+
dmlldygpOwotICAgICAgICAgIGlmIChzdmlldykgewotICAgICAgICAgICAgICAvLyBVcGRhdGUg
dGhlIGRvY3VtZW50J3MgbGF5b3V0IGJlZm9yZSB3ZSBjb21wdXRlIHRoZXNlIGF0dHJpYnV0ZXMu
Ci0gICAgICAgICAgICAgIGlmIChEb2N1bWVudEltcGwqIGRvYyA9IGJvZHkuZ2V0RG9jdW1lbnQo
KSkKLSAgICAgICAgICAgICAgICAgIGRvYy0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxl
c2hlZXRzKCk7Ci0gICAgICAgICAgICAgIGlmICh0b2tlbiA9PSBCb2R5U2Nyb2xsTGVmdCkKLSAg
ICAgICAgICAgICAgICAgIHN2aWV3LT5zZXRDb250ZW50c1Bvcyh2YWx1ZS50b0ludDMyKGV4ZWMp
LCBzdmlldy0+Y29udGVudHNZKCkpOwotICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgICBzdmlldy0+c2V0Q29udGVudHNQb3Moc3ZpZXctPmNvbnRlbnRzWCgpLCB2YWx1ZS50b0lu
dDMyKGV4ZWMpKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0g
ICAgICB9Ci0gICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfRk9STTogewotICAgICAgSFRN
TEZvcm1FbGVtZW50SW1wbCAmZm9ybSA9IHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudEltcGwg
Jj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICAvLyByZWFkLW9ubHk6
IGVsZW1lbnRzCi0gICAgICAvLyByZWFkLW9ubHk6IGxlbmd0aAotICAgICAgY2FzZSBGb3JtTmFt
ZTogICAgICAgICAgICB7IGZvcm0uc2V0TmFtZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2Ug
Rm9ybUFjY2VwdENoYXJzZXQ6ICAgeyBmb3JtLnNldEFjY2VwdENoYXJzZXQoc3RyKTsgcmV0dXJu
OyB9Ci0gICAgICBjYXNlIEZvcm1BY3Rpb246ICAgICAgICAgIHsgZm9ybS5zZXRBY3Rpb24oc3Ry
KTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEZvcm1FbmNUeXBlOiAgICAgICAgIHsgZm9ybS5zZXRF
bmN0eXBlKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBGb3JtTWV0aG9kOiAgICAgICAgICB7
IGZvcm0uc2V0TWV0aG9kKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBGb3JtVGFyZ2V0OiAg
ICAgICAgICB7IGZvcm0uc2V0VGFyZ2V0KHN0cik7IHJldHVybjsgfQotICAgICAgfQotICAgIH0K
LSAgICBicmVhazsKLSAgICBjYXNlIElEX1NFTEVDVDogewotICAgICAgSFRNTFNlbGVjdEVsZW1l
bnRJbXBsICZzZWxlY3QgPSBzdGF0aWNfY2FzdDxIVE1MU2VsZWN0RWxlbWVudEltcGwgJj4oZWxl
bWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICAvLyByZWFkLW9ubHk6IHR5cGUK
LSAgICAgIGNhc2UgU2VsZWN0U2VsZWN0ZWRJbmRleDogICB7IHNlbGVjdC5zZXRTZWxlY3RlZElu
ZGV4KHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgU2VsZWN0VmFs
dWU6ICAgICAgICAgICB7IHNlbGVjdC5zZXRWYWx1ZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNh
c2UgU2VsZWN0TGVuZ3RoOiAgICAgICAgICB7IC8vIHJlYWQtb25seSBhY2NvcmRpbmcgdG8gdGhl
IE5TIHNwZWMsIGJ1dCB3ZWJwYWdlcyBuZWVkIGl0IHdyaXRlYWJsZQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QgY29sbCA9IE9iamVjdDo6ZHluYW1pY0Nh
c3QoIGdldFNlbGVjdEhUTUxDb2xsZWN0aW9uKGV4ZWMsIHNlbGVjdC5vcHRpb25zSFRNTENvbGxl
Y3Rpb24oKS5nZXQoKSwgJnNlbGVjdCkgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCAhY29sbC5pc051bGwoKSApCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29sbC5wdXQoZXhlYyxsZW5ndGhQcm9wZXJ0eU5hbWUsdmFs
dWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAvLyByZWFkLW9u
bHk6IGZvcm0KLSAgICAgIC8vIHJlYWQtb25seTogb3B0aW9ucwotICAgICAgY2FzZSBTZWxlY3RE
aXNhYmxlZDogICAgICAgIHsgc2VsZWN0LnNldERpc2FibGVkKHZhbHVlLnRvQm9vbGVhbihleGVj
KSk7IHJldHVybjsgfQotICAgICAgY2FzZSBTZWxlY3RNdWx0aXBsZTogICAgICAgIHsgc2VsZWN0
LnNldE11bHRpcGxlKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2Fz
ZSBTZWxlY3ROYW1lOiAgICAgICAgICAgIHsgc2VsZWN0LnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9
Ci0gICAgICBjYXNlIFNlbGVjdFNpemU6ICAgICAgICAgICAgeyBzZWxlY3Quc2V0U2l6ZSh2YWx1
ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFNlbGVjdFRhYkluZGV4OiAg
ICAgICAgeyBzZWxlY3Quc2V0VGFiSW5kZXgodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsg
fQotICAgICAgfQotICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX09QVEdST1VQOiB7Ci0g
ICAgICBIVE1MT3B0R3JvdXBFbGVtZW50SW1wbCAmb3B0Z3JvdXAgPSBzdGF0aWNfY2FzdDxIVE1M
T3B0R3JvdXBFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsK
LSAgICAgIGNhc2UgT3B0R3JvdXBEaXNhYmxlZDogICAgICAgIHsgb3B0Z3JvdXAuc2V0RGlzYWJs
ZWQodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIE9wdEdyb3Vw
TGFiZWw6ICAgICAgICAgICB7IG9wdGdyb3VwLnNldExhYmVsKHN0cik7IHJldHVybjsgfQotICAg
ICAgfQotICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX09QVElPTjogewotICAgICAgSFRN
TE9wdGlvbkVsZW1lbnRJbXBsICZvcHRpb24gPSBzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVu
dEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICAvLyByZWFk
LW9ubHk6IGZvcm0KLSAgICAgIGNhc2UgT3B0aW9uRGVmYXVsdFNlbGVjdGVkOiB7IG9wdGlvbi5z
ZXREZWZhdWx0U2VsZWN0ZWQodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAg
ICBjYXNlIE9wdGlvblRleHQ6ICAgICAgICAgICAgeyBvcHRpb24uc2V0VGV4dChzdHIsIGV4Y2Vw
dGlvbik7IHJldHVybjsgfQotICAgICAgLy8gcmVhZC1vbmx5OiBpbmRleAotICAgICAgY2FzZSBP
cHRpb25EaXNhYmxlZDogICAgICAgIHsgb3B0aW9uLnNldERpc2FibGVkKHZhbHVlLnRvQm9vbGVh
bihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBPcHRpb25MYWJlbDogICAgICAgICAgIHsg
b3B0aW9uLnNldExhYmVsKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBPcHRpb25TZWxlY3Rl
ZDogICAgICAgIHsgb3B0aW9uLnNldFNlbGVjdGVkKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJl
dHVybjsgfQotICAgICAgY2FzZSBPcHRpb25WYWx1ZTogICAgICAgICAgIHsgb3B0aW9uLnNldFZh
bHVlKHN0cik7IHJldHVybjsgfQotICAgICAgfQotICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNl
IElEX0lOUFVUOiB7Ci0gICAgICBIVE1MSW5wdXRFbGVtZW50SW1wbCAmaW5wdXQgPSBzdGF0aWNf
Y2FzdDxIVE1MSW5wdXRFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9r
ZW4pIHsKLSAgICAgIGNhc2UgSW5wdXREZWZhdWx0VmFsdWU6ICAgIHsgaW5wdXQuc2V0RGVmYXVs
dFZhbHVlKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBJbnB1dERlZmF1bHRDaGVja2VkOiAg
eyBpbnB1dC5zZXREZWZhdWx0Q2hlY2tlZCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47
IH0KLSAgICAgIC8vIHJlYWQtb25seTogZm9ybQotICAgICAgY2FzZSBJbnB1dEFjY2VwdDogICAg
ICAgICAgeyBpbnB1dC5zZXRBY2NlcHQoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElucHV0
QWNjZXNzS2V5OiAgICAgICB7IGlucHV0LnNldEFjY2Vzc0tleShzdHIpOyByZXR1cm47IH0KLSAg
ICAgIGNhc2UgSW5wdXRBbGlnbjogICAgICAgICAgIHsgaW5wdXQuc2V0QWxpZ24oc3RyKTsgcmV0
dXJuOyB9Ci0gICAgICBjYXNlIElucHV0QWx0OiAgICAgICAgICAgICB7IGlucHV0LnNldEFsdChz
dHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSW5wdXRDaGVja2VkOiAgICAgICAgIHsgaW5wdXQu
c2V0Q2hlY2tlZCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2Ug
SW5wdXREaXNhYmxlZDogICAgICAgIHsgaW5wdXQuc2V0RGlzYWJsZWQodmFsdWUudG9Cb29sZWFu
KGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElucHV0TWF4TGVuZ3RoOiAgICAgICB7IGlu
cHV0LnNldE1heExlbmd0aCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBj
YXNlIElucHV0TmFtZTogICAgICAgICAgICB7IGlucHV0LnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9
Ci0gICAgICBjYXNlIElucHV0UmVhZE9ubHk6ICAgICAgICB7IGlucHV0LnNldFJlYWRPbmx5KHZh
bHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBJbnB1dFNpemU6ICAg
ICAgICAgICAgeyBpbnB1dC5zZXRTaXplKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBJbnB1
dFNyYzogICAgICAgICAgICAgeyBpbnB1dC5zZXRTcmMoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBj
YXNlIElucHV0VGFiSW5kZXg6ICAgICAgICB7IGlucHV0LnNldFRhYkluZGV4KHZhbHVlLnRvSW50
MzIoZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSW5wdXRUeXBlOiAgICAgICAgICAgIHsg
aW5wdXQuc2V0VHlwZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSW5wdXRVc2VNYXA6ICAg
ICAgICAgIHsgaW5wdXQuc2V0VXNlTWFwKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBJbnB1
dFZhbHVlOiAgICAgICAgICAgeyBpbnB1dC5zZXRWYWx1ZShzdHIpOyByZXR1cm47IH0KLSAgICAg
IH0KLSAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9URVhUQVJFQTogewotICAgICAgSFRN
TFRleHRBcmVhRWxlbWVudEltcGwgJnRleHRhcmVhID0gc3RhdGljX2Nhc3Q8SFRNTFRleHRBcmVh
RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBj
YXNlIFRleHRBcmVhRGVmYXVsdFZhbHVlOiAgICB7IHRleHRhcmVhLnNldERlZmF1bHRWYWx1ZShz
dHIpOyByZXR1cm47IH0KLSAgICAgIC8vIHJlYWQtb25seTogZm9ybQotICAgICAgY2FzZSBUZXh0
QXJlYUFjY2Vzc0tleTogICAgICAgeyB0ZXh0YXJlYS5zZXRBY2Nlc3NLZXkoc3RyKTsgcmV0dXJu
OyB9Ci0gICAgICBjYXNlIFRleHRBcmVhQ29sczogICAgICAgICAgICB7IHRleHRhcmVhLnNldENv
bHModmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBUZXh0QXJlYURp
c2FibGVkOiAgICAgICAgeyB0ZXh0YXJlYS5zZXREaXNhYmxlZCh2YWx1ZS50b0Jvb2xlYW4oZXhl
YykpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGV4dEFyZWFOYW1lOiAgICAgICAgICAgIHsgdGV4
dGFyZWEuc2V0TmFtZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGV4dEFyZWFSZWFkT25s
eTogICAgICAgIHsgdGV4dGFyZWEuc2V0UmVhZE9ubHkodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsg
cmV0dXJuOyB9Ci0gICAgICBjYXNlIFRleHRBcmVhUm93czogICAgICAgICAgICB7IHRleHRhcmVh
LnNldFJvd3ModmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBUZXh0
QXJlYVRhYkluZGV4OiAgICAgICAgeyB0ZXh0YXJlYS5zZXRUYWJJbmRleCh2YWx1ZS50b0ludDMy
KGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICAvLyByZWFkLW9ubHk6IHR5cGUKLSAgICAgIGNhc2Ug
VGV4dEFyZWFWYWx1ZTogICAgICAgICAgIHsgdGV4dGFyZWEuc2V0VmFsdWUoc3RyKTsgcmV0dXJu
OyB9Ci0gICAgICB9Ci0gICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfQlVUVE9OOiB7Ci0g
ICAgICBIVE1MQnV0dG9uRWxlbWVudEltcGwgJmJ1dHRvbiA9IHN0YXRpY19jYXN0PEhUTUxCdXR0
b25FbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAg
IC8vIHJlYWQtb25seTogZm9ybQotICAgICAgY2FzZSBCdXR0b25BY2Nlc3NLZXk6ICAgICAgIHsg
YnV0dG9uLnNldEFjY2Vzc0tleShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQnV0dG9uRGlz
YWJsZWQ6ICAgICAgICB7IGJ1dHRvbi5zZXREaXNhYmxlZCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykp
OyByZXR1cm47IH0KLSAgICAgIGNhc2UgQnV0dG9uTmFtZTogICAgICAgICAgICB7IGJ1dHRvbi5z
ZXROYW1lKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBCdXR0b25UYWJJbmRleDogICAgICAg
IHsgYnV0dG9uLnNldFRhYkluZGV4KHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KLSAg
ICAgIC8vIHJlYWQtb25seTogdHlwZQotICAgICAgY2FzZSBCdXR0b25WYWx1ZTogICAgICAgICAg
IHsgYnV0dG9uLnNldFZhbHVlKHN0cik7IHJldHVybjsgfQotICAgICAgfQotICAgIH0KLSAgICBi
cmVhazsKLSAgICBjYXNlIElEX0xBQkVMOiB7Ci0gICAgICBIVE1MTGFiZWxFbGVtZW50SW1wbCAm
bGFiZWwgPSBzdGF0aWNfY2FzdDxIVE1MTGFiZWxFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAg
ICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIC8vIHJlYWQtb25seTogZm9ybQotICAgICAgY2Fz
ZSBMYWJlbEFjY2Vzc0tleTogICAgICAgeyBsYWJlbC5zZXRBY2Nlc3NLZXkoc3RyKTsgcmV0dXJu
OyB9Ci0gICAgICBjYXNlIExhYmVsSHRtbEZvcjogICAgICAgICB7IGxhYmVsLnNldEh0bWxGb3Io
c3RyKTsgcmV0dXJuOyB9Ci0gICAgICB9Ci0gICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURf
TEVHRU5EOiB7Ci0gICAgICBIVE1MTGVnZW5kRWxlbWVudEltcGwgJmxlZ2VuZCA9IHN0YXRpY19j
YXN0PEhUTUxMZWdlbmRFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9r
ZW4pIHsKLSAgICAgIC8vIHJlYWQtb25seTogZm9ybQotICAgICAgY2FzZSBMZWdlbmRBY2Nlc3NL
ZXk6ICAgICAgIHsgbGVnZW5kLnNldEFjY2Vzc0tleShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNh
c2UgTGVnZW5kQWxpZ246ICAgICAgICAgICB7IGxlZ2VuZC5zZXRBbGlnbihzdHIpOyByZXR1cm47
IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6dGl0bGVTZXR0ZXIoRXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJp
bmcmIHN0cikKK3sKKyAgICAgSFRNTFRpdGxlRWxlbWVudEltcGwmIHRpdGxlID0gKnN0YXRpY19j
YXN0PEhUTUxUaXRsZUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICAgaWYgKHRva2VuID09IFRp
dGxlVGV4dCkKKyAgICAgICAgdGl0bGUuc2V0VGV4dChzdHIpOworfQorCit2b2lkIEhUTUxFbGVt
ZW50OjptZXRhU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYg
dmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTE1ldGFFbGVtZW50
SW1wbCYgbWV0YSA9ICpzdGF0aWNfY2FzdDxIVE1MTWV0YUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsK
KyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgTWV0YUNvbnRlbnQ6ICAgICAgICAg
eyBtZXRhLnNldENvbnRlbnQoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgTWV0YUh0dHBF
cXVpdjogICAgICAgeyBtZXRhLnNldEh0dHBFcXVpdihzdHIpOyByZXR1cm47IH0KKyAgICAgICAg
Y2FzZSBNZXRhTmFtZTogICAgICAgICAgICB7IG1ldGEuc2V0TmFtZShzdHIpOyByZXR1cm47IH0K
KyAgICAgICAgY2FzZSBNZXRhU2NoZW1lOiAgICAgICAgICB7IG1ldGEuc2V0U2NoZW1lKHN0cik7
IHJldHVybjsgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX1VMOiB7Ci0gICAgICBI
VE1MVUxpc3RFbGVtZW50SW1wbCAmdUxpc3QgPSBzdGF0aWNfY2FzdDxIVE1MVUxpc3RFbGVtZW50
SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgVUxp
c3RDb21wYWN0OiAgICAgICAgIHsgdUxpc3Quc2V0Q29tcGFjdCh2YWx1ZS50b0Jvb2xlYW4oZXhl
YykpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVUxpc3RUeXBlOiAgICAgICAgICAgIHsgdUxpc3Qu
c2V0VHlwZShzdHIpOyByZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6
YmFzZVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVl
LCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxCYXNlRWxlbWVudEltcGwm
IGJhc2UgPSAqc3RhdGljX2Nhc3Q8SFRNTEJhc2VFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAg
c3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNlIEJhc2VIcmVmOiAgICAgICAgICAgIHsgYmFz
ZS5zZXRIcmVmKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEJhc2VUYXJnZXQ6ICAgICAg
ICAgIHsgYmFzZS5zZXRUYXJnZXQoc3RyKTsgcmV0dXJuOyB9CiAgICAgfQotICAgIGJyZWFrOwot
ICAgIGNhc2UgSURfT0w6IHsKLSAgICAgIEhUTUxPTGlzdEVsZW1lbnRJbXBsICZvTGlzdCA9IHN0
YXRpY19jYXN0PEhUTUxPTGlzdEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNo
ICh0b2tlbikgewotICAgICAgY2FzZSBPTGlzdENvbXBhY3Q6ICAgICAgICAgeyBvTGlzdC5zZXRD
b21wYWN0KHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBPTGlz
dFN0YXJ0OiAgICAgICAgICAgeyBvTGlzdC5zZXRTdGFydCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsg
cmV0dXJuOyB9Ci0gICAgICBjYXNlIE9MaXN0VHlwZTogICAgICAgICAgICB7IG9MaXN0LnNldFR5
cGUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OmlzSW5k
ZXhTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwg
Y29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MSXNJbmRleEVsZW1lbnRJbXBs
JiBpc2luZGV4ID0gKnN0YXRpY19jYXN0PEhUTUxJc0luZGV4RWxlbWVudEltcGwqPihpbXBsKCkp
OworICAgIGlmICh0b2tlbiA9PSBJc0luZGV4UHJvbXB0KQorICAgICAgICBpc2luZGV4LnNldFBy
b21wdChzdHIpOworfQorCit2b2lkIEhUTUxFbGVtZW50OjpzdHlsZVNldHRlcihFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmlu
ZyYgc3RyKQoreworICAgIEhUTUxTdHlsZUVsZW1lbnRJbXBsJiBzdHlsZSA9ICpzdGF0aWNfY2Fz
dDxIVE1MU3R5bGVFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgewor
ICAgICAgICBjYXNlIFN0eWxlRGlzYWJsZWQ6ICAgICAgICB7IHN0eWxlLnNldERpc2FibGVkKHZh
bHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIFN0eWxlTWVkaWE6
ICAgICAgICAgICB7IHN0eWxlLnNldE1lZGlhKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNl
IFN0eWxlVHlwZTogICAgICAgICAgICB7IHN0eWxlLnNldFR5cGUoc3RyKTsgcmV0dXJuOyB9CiAg
ICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfREw6IHsKLSAgICAgIEhUTUxETGlzdEVsZW1l
bnRJbXBsICZkTGlzdCA9IHN0YXRpY19jYXN0PEhUTUxETGlzdEVsZW1lbnRJbXBsICY+KGVsZW1l
bnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgY2FzZSBETGlzdENvbXBhY3Q6ICAg
ICAgICAgeyBkTGlzdC5zZXRDb21wYWN0KHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsg
fQotICAgICAgfQorfQorCit2b2lkIEhUTUxFbGVtZW50Ojpib2R5U2V0dGVyKEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5n
JiBzdHIpCit7CisgICAgSFRNTEJvZHlFbGVtZW50SW1wbCYgYm9keSA9ICpzdGF0aWNfY2FzdDxI
VE1MQm9keUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAg
ICAgIGNhc2UgQm9keUFMaW5rOiAgICAgICAgICAgeyBib2R5LnNldEFMaW5rKHN0cik7IHJldHVy
bjsgfQorICAgICAgICBjYXNlIEJvZHlCYWNrZ3JvdW5kOiAgICAgIHsgYm9keS5zZXRCYWNrZ3Jv
dW5kKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEJvZHlCZ0NvbG9yOiAgICAgICAgIHsg
Ym9keS5zZXRCZ0NvbG9yKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEJvZHlMaW5rOiAg
ICAgICAgICAgIHsgYm9keS5zZXRMaW5rKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEJv
ZHlUZXh0OiAgICAgICAgICAgIHsgYm9keS5zZXRUZXh0KHN0cik7IHJldHVybjsgfQorICAgICAg
ICBjYXNlIEJvZHlWTGluazogICAgICAgICAgIHsgYm9keS5zZXRWTGluayhzdHIpOyByZXR1cm47
IH0KKyAgICAgICAgY2FzZSBCb2R5U2Nyb2xsTGVmdDoKKyAgICAgICAgY2FzZSBCb2R5U2Nyb2xs
VG9wOiB7CisgICAgICAgICAgICBRU2Nyb2xsVmlldyogc3ZpZXcgPSBib2R5Lm93bmVyRG9jdW1l
bnQoKS0+dmlldygpOworICAgICAgICAgICAgaWYgKHN2aWV3KSB7CisgICAgICAgICAgICAgICAg
Ly8gVXBkYXRlIHRoZSBkb2N1bWVudCdzIGxheW91dCBiZWZvcmUgd2UgY29tcHV0ZSB0aGVzZSBh
dHRyaWJ1dGVzLgorICAgICAgICAgICAgICAgIGlmIChEb2N1bWVudEltcGwqIGRvYyA9IGJvZHku
Z2V0RG9jdW1lbnQoKSkKKyAgICAgICAgICAgICAgICAgICAgZG9jLT51cGRhdGVMYXlvdXRJZ25v
cmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKKyAgICAgICAgICAgICAgICBpZiAodG9rZW4gPT0gQm9k
eVNjcm9sbExlZnQpCisgICAgICAgICAgICAgICAgICAgIHN2aWV3LT5zZXRDb250ZW50c1Bvcyh2
YWx1ZS50b0ludDMyKGV4ZWMpLCBzdmlldy0+Y29udGVudHNZKCkpOworICAgICAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgc3ZpZXctPnNldENvbnRlbnRzUG9zKHN2aWV3LT5j
b250ZW50c1goKSwgdmFsdWUudG9JbnQzMihleGVjKSk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9E
SVI6IHsKLSAgICAgIEhUTUxEaXJlY3RvcnlFbGVtZW50SW1wbCAmZGlyZWN0b3J5ID0gc3RhdGlj
X2Nhc3Q8SFRNTERpcmVjdG9yeUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNo
ICh0b2tlbikgewotICAgICAgY2FzZSBEaXJlY3RvcnlDb21wYWN0OiAgICAgeyBkaXJlY3Rvcnku
c2V0Q29tcGFjdCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KLSAgICAgIH0KK30K
Kwordm9pZCBIVE1MRWxlbWVudDo6Zm9ybVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
biwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAg
IEhUTUxGb3JtRWxlbWVudEltcGwmIGZvcm0gPSAqc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50
SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICAvLyByZWFkLW9u
bHk6IGVsZW1lbnRzCisgICAgICAgIC8vIHJlYWQtb25seTogbGVuZ3RoCisgICAgICAgIGNhc2Ug
Rm9ybU5hbWU6ICAgICAgICAgICAgeyBmb3JtLnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9CisgICAg
ICAgIGNhc2UgRm9ybUFjY2VwdENoYXJzZXQ6ICAgeyBmb3JtLnNldEFjY2VwdENoYXJzZXQoc3Ry
KTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgRm9ybUFjdGlvbjogICAgICAgICAgeyBmb3JtLnNl
dEFjdGlvbihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBGb3JtRW5jVHlwZTogICAgICAg
ICB7IGZvcm0uc2V0RW5jdHlwZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBGb3JtTWV0
aG9kOiAgICAgICAgICB7IGZvcm0uc2V0TWV0aG9kKHN0cik7IHJldHVybjsgfQorICAgICAgICBj
YXNlIEZvcm1UYXJnZXQ6ICAgICAgICAgIHsgZm9ybS5zZXRUYXJnZXQoc3RyKTsgcmV0dXJuOyB9
CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfTUVOVTogewotICAgICAgSFRNTE1lbnVF
bGVtZW50SW1wbCAmbWVudSA9IHN0YXRpY19jYXN0PEhUTUxNZW51RWxlbWVudEltcGwgJj4oZWxl
bWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIE1lbnVDb21wYWN0OiAg
ICAgICAgIHsgbWVudS5zZXRDb21wYWN0KHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsg
fQotICAgICAgfQorfQorCit2b2lkIEhUTUxFbGVtZW50OjpzZWxlY3RTZXR0ZXIoRXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJp
bmcmIHN0cikKK3sKKyAgICBIVE1MU2VsZWN0RWxlbWVudEltcGwmIHNlbGVjdCA9ICpzdGF0aWNf
Y2FzdDxIVE1MU2VsZWN0RWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4p
IHsKKyAgICAgICAgLy8gcmVhZC1vbmx5OiB0eXBlCisgICAgICAgIGNhc2UgU2VsZWN0U2VsZWN0
ZWRJbmRleDogICB7IHNlbGVjdC5zZXRTZWxlY3RlZEluZGV4KHZhbHVlLnRvSW50MzIoZXhlYykp
OyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBTZWxlY3RWYWx1ZTogICAgICAgICAgIHsgc2VsZWN0
LnNldFZhbHVlKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFNlbGVjdExlbmd0aDogICAg
ICAgICAgeyAvLyByZWFkLW9ubHkgYWNjb3JkaW5nIHRvIHRoZSBOUyBzcGVjLCBidXQgd2VicGFn
ZXMgbmVlZCBpdCB3cml0ZWFibGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgT2JqZWN0IGNvbGwgPSBPYmplY3Q6OmR5bmFtaWNDYXN0KCBnZXRTZWxlY3RIVE1MQ29s
bGVjdGlvbihleGVjLCBzZWxlY3Qub3B0aW9uc0hUTUxDb2xsZWN0aW9uKCkuZ2V0KCksICZzZWxl
Y3QpICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICggIWNv
bGwuaXNOdWxsKCkgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbGwucHV0KGV4ZWMsbGVuZ3RoUHJvcGVydHlOYW1lLHZhbHVlKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAvLyByZWFkLW9ubHk6IGZvcm0KKyAgICAgICAgLy8g
cmVhZC1vbmx5OiBvcHRpb25zCisgICAgICAgIGNhc2UgU2VsZWN0RGlzYWJsZWQ6ICAgICAgICB7
IHNlbGVjdC5zZXREaXNhYmxlZCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KKyAg
ICAgICAgY2FzZSBTZWxlY3RNdWx0aXBsZTogICAgICAgIHsgc2VsZWN0LnNldE11bHRpcGxlKHZh
bHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIFNlbGVjdE5hbWU6
ICAgICAgICAgICAgeyBzZWxlY3Quc2V0TmFtZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2Fz
ZSBTZWxlY3RTaXplOiAgICAgICAgICAgIHsgc2VsZWN0LnNldFNpemUodmFsdWUudG9JbnQzMihl
eGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIFNlbGVjdFRhYkluZGV4OiAgICAgICAgeyBz
ZWxlY3Quc2V0VGFiSW5kZXgodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQogICAgIH0K
LSAgICBicmVhazsKLSAgICBjYXNlIElEX0xJOiB7Ci0gICAgICBIVE1MTElFbGVtZW50SW1wbCAm
bGkgPSBzdGF0aWNfY2FzdDxIVE1MTElFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3
aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgTElUeXBlOiAgICAgICAgICAgIHsgbGkuc2V0VHlw
ZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgTElWYWx1ZTogICAgICAgICAgIHsgbGkuc2V0
VmFsdWUodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQotICAgICAgfQorfQorCit2b2lk
IEhUTUxFbGVtZW50OjpvcHRHcm91cFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwg
Y29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhU
TUxPcHRHcm91cEVsZW1lbnRJbXBsJiBvcHRncm91cCA9ICpzdGF0aWNfY2FzdDxIVE1MT3B0R3Jv
dXBFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICBj
YXNlIE9wdEdyb3VwRGlzYWJsZWQ6ICAgICAgICB7IG9wdGdyb3VwLnNldERpc2FibGVkKHZhbHVl
LnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIE9wdEdyb3VwTGFiZWw6
ICAgICAgICAgICB7IG9wdGdyb3VwLnNldExhYmVsKHN0cik7IHJldHVybjsgfQogICAgIH0KLSAg
ICBicmVhazsKLSAgICBjYXNlIElEX0RJVjogewotICAgICAgSFRNTERpdkVsZW1lbnRJbXBsICZk
aXYgPSBzdGF0aWNfY2FzdDxIVE1MRGl2RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBz
d2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIERpdkFsaWduOiAgICAgICAgICAgeyBkaXYuc2V0
QWxpZ24oc3RyKTsgcmV0dXJuOyB9Ci0gICAgICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6Om9w
dGlvblNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVl
LCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIERPTUV4Y2VwdGlvblRyYW5zbGF0
b3IgZXhjZXB0aW9uKGV4ZWMpOworICAgIEhUTUxPcHRpb25FbGVtZW50SW1wbCYgb3B0aW9uID0g
KnN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNo
ICh0b2tlbikgeworICAgICAgICAvLyByZWFkLW9ubHk6IGZvcm0KKyAgICAgICAgY2FzZSBPcHRp
b25EZWZhdWx0U2VsZWN0ZWQ6IHsgb3B0aW9uLnNldERlZmF1bHRTZWxlY3RlZCh2YWx1ZS50b0Jv
b2xlYW4oZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBPcHRpb25UZXh0OiAgICAgICAg
ICAgIHsgb3B0aW9uLnNldFRleHQoc3RyLCBleGNlcHRpb24pOyByZXR1cm47IH0KKyAgICAgICAg
Ly8gcmVhZC1vbmx5OiBpbmRleAorICAgICAgICBjYXNlIE9wdGlvbkRpc2FibGVkOiAgICAgICAg
eyBvcHRpb24uc2V0RGlzYWJsZWQodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9Cisg
ICAgICAgIGNhc2UgT3B0aW9uTGFiZWw6ICAgICAgICAgICB7IG9wdGlvbi5zZXRMYWJlbChzdHIp
OyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBPcHRpb25TZWxlY3RlZDogICAgICAgIHsgb3B0aW9u
LnNldFNlbGVjdGVkKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBj
YXNlIE9wdGlvblZhbHVlOiAgICAgICAgICAgeyBvcHRpb24uc2V0VmFsdWUoc3RyKTsgcmV0dXJu
OyB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfUDogewotICAgICAgSFRNTFBhcmFn
cmFwaEVsZW1lbnRJbXBsICZwYXJhZ3JhcGggPSBzdGF0aWNfY2FzdDxIVE1MUGFyYWdyYXBoRWxl
bWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNl
IFBhcmFncmFwaEFsaWduOiAgICAgeyBwYXJhZ3JhcGguc2V0QWxpZ24oc3RyKTsgcmV0dXJuOyB9
Ci0gICAgICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OmlucHV0U2V0dGVyKEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5n
JiBzdHIpCit7CisgICAgSFRNTElucHV0RWxlbWVudEltcGwmIGlucHV0ID0gKnN0YXRpY19jYXN0
PEhUTUxJbnB1dEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7Cisg
ICAgICAgIGNhc2UgSW5wdXREZWZhdWx0VmFsdWU6ICAgIHsgaW5wdXQuc2V0RGVmYXVsdFZhbHVl
KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIElucHV0RGVmYXVsdENoZWNrZWQ6ICB7IGlu
cHV0LnNldERlZmF1bHRDaGVja2VkKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQor
ICAgICAgICAvLyByZWFkLW9ubHk6IGZvcm0KKyAgICAgICAgY2FzZSBJbnB1dEFjY2VwdDogICAg
ICAgICAgeyBpbnB1dC5zZXRBY2NlcHQoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgSW5w
dXRBY2Nlc3NLZXk6ICAgICAgIHsgaW5wdXQuc2V0QWNjZXNzS2V5KHN0cik7IHJldHVybjsgfQor
ICAgICAgICBjYXNlIElucHV0QWxpZ246ICAgICAgICAgICB7IGlucHV0LnNldEFsaWduKHN0cik7
IHJldHVybjsgfQorICAgICAgICBjYXNlIElucHV0QWx0OiAgICAgICAgICAgICB7IGlucHV0LnNl
dEFsdChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJbnB1dENoZWNrZWQ6ICAgICAgICAg
eyBpbnB1dC5zZXRDaGVja2VkKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQorICAg
ICAgICBjYXNlIElucHV0RGlzYWJsZWQ6ICAgICAgICB7IGlucHV0LnNldERpc2FibGVkKHZhbHVl
LnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIElucHV0TWF4TGVuZ3Ro
OiAgICAgICB7IGlucHV0LnNldE1heExlbmd0aCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJu
OyB9CisgICAgICAgIGNhc2UgSW5wdXROYW1lOiAgICAgICAgICAgIHsgaW5wdXQuc2V0TmFtZShz
dHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJbnB1dFJlYWRPbmx5OiAgICAgICAgeyBpbnB1
dC5zZXRSZWFkT25seSh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAg
Y2FzZSBJbnB1dFNpemU6ICAgICAgICAgICAgeyBpbnB1dC5zZXRTaXplKHN0cik7IHJldHVybjsg
fQorICAgICAgICBjYXNlIElucHV0U3JjOiAgICAgICAgICAgICB7IGlucHV0LnNldFNyYyhzdHIp
OyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJbnB1dFRhYkluZGV4OiAgICAgICAgeyBpbnB1dC5z
ZXRUYWJJbmRleCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2Ug
SW5wdXRUeXBlOiAgICAgICAgICAgIHsgaW5wdXQuc2V0VHlwZShzdHIpOyByZXR1cm47IH0KKyAg
ICAgICAgY2FzZSBJbnB1dFVzZU1hcDogICAgICAgICAgeyBpbnB1dC5zZXRVc2VNYXAoc3RyKTsg
cmV0dXJuOyB9CisgICAgICAgIGNhc2UgSW5wdXRWYWx1ZTogICAgICAgICAgIHsgaW5wdXQuc2V0
VmFsdWUoc3RyKTsgcmV0dXJuOyB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfSDE6
Ci0gICAgY2FzZSBJRF9IMjoKLSAgICBjYXNlIElEX0gzOgotICAgIGNhc2UgSURfSDQ6Ci0gICAg
Y2FzZSBJRF9INToKLSAgICBjYXNlIElEX0g2OiB7Ci0gICAgICBIVE1MSGVhZGluZ0VsZW1lbnRJ
bXBsICZoZWFkaW5nID0gc3RhdGljX2Nhc3Q8SFRNTEhlYWRpbmdFbGVtZW50SW1wbCAmPihlbGVt
ZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgSGVhZGluZ0FsaWduOiAg
ICAgICAgIHsgaGVhZGluZy5zZXRBbGlnbihzdHIpOyByZXR1cm47IH0KLSAgICAgIH0KK30KKwor
dm9pZCBIVE1MRWxlbWVudDo6dGV4dEFyZWFTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAg
ICBIVE1MVGV4dEFyZWFFbGVtZW50SW1wbCYgdGV4dGFyZWEgPSAqc3RhdGljX2Nhc3Q8SFRNTFRl
eHRBcmVhRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAg
ICAgY2FzZSBUZXh0QXJlYURlZmF1bHRWYWx1ZTogICAgeyB0ZXh0YXJlYS5zZXREZWZhdWx0VmFs
dWUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIC8vIHJlYWQtb25seTogZm9ybQorICAgICAgICBj
YXNlIFRleHRBcmVhQWNjZXNzS2V5OiAgICAgICB7IHRleHRhcmVhLnNldEFjY2Vzc0tleShzdHIp
OyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUZXh0QXJlYUNvbHM6ICAgICAgICAgICAgeyB0ZXh0
YXJlYS5zZXRDb2xzKHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2Fz
ZSBUZXh0QXJlYURpc2FibGVkOiAgICAgICAgeyB0ZXh0YXJlYS5zZXREaXNhYmxlZCh2YWx1ZS50
b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUZXh0QXJlYU5hbWU6ICAg
ICAgICAgICAgeyB0ZXh0YXJlYS5zZXROYW1lKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNl
IFRleHRBcmVhUmVhZE9ubHk6ICAgICAgICB7IHRleHRhcmVhLnNldFJlYWRPbmx5KHZhbHVlLnRv
Qm9vbGVhbihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRleHRBcmVhUm93czogICAg
ICAgICAgICB7IHRleHRhcmVhLnNldFJvd3ModmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsg
fQorICAgICAgICBjYXNlIFRleHRBcmVhVGFiSW5kZXg6ICAgICAgICB7IHRleHRhcmVhLnNldFRh
YkluZGV4KHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgLy8gcmVhZC1v
bmx5OiB0eXBlCisgICAgICAgIGNhc2UgVGV4dEFyZWFWYWx1ZTogICAgICAgICAgIHsgdGV4dGFy
ZWEuc2V0VmFsdWUoc3RyKTsgcmV0dXJuOyB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2Ug
SURfQkxPQ0tRVU9URTogewotICAgICAgSFRNTEJsb2NrcXVvdGVFbGVtZW50SW1wbCAmYmxvY2tx
dW90ZSA9IHN0YXRpY19jYXN0PEhUTUxCbG9ja3F1b3RlRWxlbWVudEltcGwgJj4oZWxlbWVudCk7
Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIEJsb2NrUXVvdGVDaXRlOiAgICAg
ICB7IGJsb2NrcXVvdGUuc2V0Q2l0ZShzdHIpOyByZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9p
ZCBIVE1MRWxlbWVudDo6YnV0dG9uU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBj
b25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRN
TEJ1dHRvbkVsZW1lbnRJbXBsJiBidXR0b24gPSAqc3RhdGljX2Nhc3Q8SFRNTEJ1dHRvbkVsZW1l
bnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIC8vIHJlYWQt
b25seTogZm9ybQorICAgICAgICBjYXNlIEJ1dHRvbkFjY2Vzc0tleTogICAgICAgeyBidXR0b24u
c2V0QWNjZXNzS2V5KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEJ1dHRvbkRpc2FibGVk
OiAgICAgICAgeyBidXR0b24uc2V0RGlzYWJsZWQodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0
dXJuOyB9CisgICAgICAgIGNhc2UgQnV0dG9uTmFtZTogICAgICAgICAgICB7IGJ1dHRvbi5zZXRO
YW1lKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEJ1dHRvblRhYkluZGV4OiAgICAgICAg
eyBidXR0b24uc2V0VGFiSW5kZXgodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQorICAg
ICAgICAvLyByZWFkLW9ubHk6IHR5cGUKKyAgICAgICAgY2FzZSBCdXR0b25WYWx1ZTogICAgICAg
ICAgIHsgYnV0dG9uLnNldFZhbHVlKHN0cik7IHJldHVybjsgfQogICAgIH0KLSAgICBicmVhazsK
LSAgICBjYXNlIElEX1E6IHsKLSAgICAgIEhUTUxRdW90ZUVsZW1lbnRJbXBsICZxdW90ZSA9IHN0
YXRpY19jYXN0PEhUTUxRdW90ZUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNo
ICh0b2tlbikgewotICAgICAgY2FzZSBRdW90ZUNpdGU6ICAgICAgICAgICAgeyBxdW90ZS5zZXRD
aXRlKHN0cik7IHJldHVybjsgfQotICAgICAgfQorfQorCit2b2lkIEhUTUxFbGVtZW50OjpsYWJl
bFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBj
b25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxMYWJlbEVsZW1lbnRJbXBsJiBs
YWJlbCA9ICpzdGF0aWNfY2FzdDxIVE1MTGFiZWxFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAg
c3dpdGNoICh0b2tlbikgeworICAgICAgICAvLyByZWFkLW9ubHk6IGZvcm0KKyAgICAgICAgY2Fz
ZSBMYWJlbEFjY2Vzc0tleTogICAgICAgeyBsYWJlbC5zZXRBY2Nlc3NLZXkoc3RyKTsgcmV0dXJu
OyB9CisgICAgICAgIGNhc2UgTGFiZWxIdG1sRm9yOiAgICAgICAgIHsgbGFiZWwuc2V0SHRtbEZv
cihzdHIpOyByZXR1cm47IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9QUkU6IHsK
LSAgICAgIEhUTUxQcmVFbGVtZW50SW1wbCAmcHJlID0gc3RhdGljX2Nhc3Q8SFRNTFByZUVsZW1l
bnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgY2FzZSBQ
cmVXaWR0aDogICAgICAgICAgIHsgcHJlLnNldFdpZHRoKHZhbHVlLnRvSW50MzIoZXhlYykpOyBy
ZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6bGVnZW5kU2V0dGVyKEV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6
RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTExlZ2VuZEVsZW1lbnRJbXBsJiBsZWdlbmQgPSAq
c3RhdGljX2Nhc3Q8SFRNTExlZ2VuZEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2gg
KHRva2VuKSB7CisgICAgICAgIC8vIHJlYWQtb25seTogZm9ybQorICAgICAgICBjYXNlIExlZ2Vu
ZEFjY2Vzc0tleTogICAgICAgeyBsZWdlbmQuc2V0QWNjZXNzS2V5KHN0cik7IHJldHVybjsgfQor
ICAgICAgICBjYXNlIExlZ2VuZEFsaWduOiAgICAgICAgICAgeyBsZWdlbmQuc2V0QWxpZ24oc3Ry
KTsgcmV0dXJuOyB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfQlI6IHsKLSAgICAg
IEhUTUxCUkVsZW1lbnRJbXBsICZiciA9IHN0YXRpY19jYXN0PEhUTUxCUkVsZW1lbnRJbXBsICY+
KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgY2FzZSBCUkNsZWFyOiAg
ICAgICAgICAgeyBici5zZXRDbGVhcihzdHIpOyByZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9p
ZCBIVE1MRWxlbWVudDo6dUxpc3RTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNv
bnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1M
VUxpc3RFbGVtZW50SW1wbCYgdUxpc3QgPSAqc3RhdGljX2Nhc3Q8SFRNTFVMaXN0RWxlbWVudElt
cGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBVTGlzdENv
bXBhY3Q6ICAgICAgICAgeyB1TGlzdC5zZXRDb21wYWN0KHZhbHVlLnRvQm9vbGVhbihleGVjKSk7
IHJldHVybjsgfQorICAgICAgICBjYXNlIFVMaXN0VHlwZTogICAgICAgICAgICB7IHVMaXN0LnNl
dFR5cGUoc3RyKTsgcmV0dXJuOyB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfQkFT
RUZPTlQ6IHsKLSAgICAgIEhUTUxCYXNlRm9udEVsZW1lbnRJbXBsICZiYXNlRm9udCA9IHN0YXRp
Y19jYXN0PEhUTUxCYXNlRm9udEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNo
ICh0b2tlbikgewotICAgICAgY2FzZSBCYXNlRm9udENvbG9yOiAgICAgICAgICAgeyBiYXNlRm9u
dC5zZXRDb2xvcihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQmFzZUZvbnRGYWNlOiAgICAg
ICAgICAgIHsgYmFzZUZvbnQuc2V0RmFjZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQmFz
ZUZvbnRTaXplOiAgICAgICAgICAgIHsgYmFzZUZvbnQuc2V0U2l6ZShzdHIpOyByZXR1cm47IH0K
LSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6b0xpc3RTZXR0ZXIoRXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcm
IHN0cikKK3sKKyAgICBIVE1MT0xpc3RFbGVtZW50SW1wbCYgb0xpc3QgPSAqc3RhdGljX2Nhc3Q8
SFRNTE9MaXN0RWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAg
ICAgICAgY2FzZSBPTGlzdENvbXBhY3Q6ICAgICAgICAgeyBvTGlzdC5zZXRDb21wYWN0KHZhbHVl
LnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIE9MaXN0U3RhcnQ6ICAg
ICAgICAgICB7IG9MaXN0LnNldFN0YXJ0KHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0K
KyAgICAgICAgY2FzZSBPTGlzdFR5cGU6ICAgICAgICAgICAgeyBvTGlzdC5zZXRUeXBlKHN0cik7
IHJldHVybjsgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0ZPTlQ6IHsKLSAgICAg
IEhUTUxGb250RWxlbWVudEltcGwgJmZvbnQgPSBzdGF0aWNfY2FzdDxIVE1MRm9udEVsZW1lbnRJ
bXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgY2FzZSBGb250
Q29sb3I6ICAgICAgICAgICB7IGZvbnQuc2V0Q29sb3Ioc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBj
YXNlIEZvbnRGYWNlOiAgICAgICAgICAgIHsgZm9udC5zZXRGYWNlKHN0cik7IHJldHVybjsgfQot
ICAgICAgY2FzZSBGb250U2l6ZTogICAgICAgICAgICB7IGZvbnQuc2V0U2l6ZShzdHIpOyByZXR1
cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6ZExpc3RTZXR0ZXIoRXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01T
dHJpbmcmIHN0cikKK3sKKyAgICBIVE1MRExpc3RFbGVtZW50SW1wbCYgZExpc3QgPSAqc3RhdGlj
X2Nhc3Q8SFRNTERMaXN0RWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIGlmICh0b2tlbiA9PSBE
TGlzdENvbXBhY3QpCisgICAgICAgIGRMaXN0LnNldENvbXBhY3QodmFsdWUudG9Cb29sZWFuKGV4
ZWMpKTsKK30KKwordm9pZCBIVE1MRWxlbWVudDo6ZGlyU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIp
Cit7CisgICAgSFRNTERpcmVjdG9yeUVsZW1lbnRJbXBsJiBkaXJlY3RvcnkgPSAqc3RhdGljX2Nh
c3Q8SFRNTERpcmVjdG9yeUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBpZiAodG9rZW4gPT0g
RGlyZWN0b3J5Q29tcGFjdCkKKyAgICAgICAgZGlyZWN0b3J5LnNldENvbXBhY3QodmFsdWUudG9C
b29sZWFuKGV4ZWMpKTsKK30KKwordm9pZCBIVE1MRWxlbWVudDo6bWVudVNldHRlcihFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0
cmluZyYgc3RyKQoreworICAgIEhUTUxNZW51RWxlbWVudEltcGwmIG1lbnUgPSAqc3RhdGljX2Nh
c3Q8SFRNTE1lbnVFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IE1lbnVD
b21wYWN0KQorICAgICAgICBtZW51LnNldENvbXBhY3QodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsK
K30KKwordm9pZCBIVE1MRWxlbWVudDo6bGlTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAg
ICBIVE1MTElFbGVtZW50SW1wbCYgbGkgPSAqc3RhdGljX2Nhc3Q8SFRNTExJRWxlbWVudEltcGwq
PihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBMSVR5cGU6ICAg
ICAgICAgICAgeyBsaS5zZXRUeXBlKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIExJVmFs
dWU6ICAgICAgICAgICB7IGxpLnNldFZhbHVlKHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47
IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9IUjogewotICAgICAgSFRNTEhSRWxl
bWVudEltcGwgJmhyID0gc3RhdGljX2Nhc3Q8SFRNTEhSRWxlbWVudEltcGwgJj4oZWxlbWVudCk7
Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIEhSQWxpZ246ICAgICAgICAgICB7
IGhyLnNldEFsaWduKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBIUk5vU2hhZGU6ICAgICAg
ICAgeyBoci5zZXROb1NoYWRlKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQotICAg
ICAgY2FzZSBIUlNpemU6ICAgICAgICAgICAgeyBoci5zZXRTaXplKHN0cik7IHJldHVybjsgfQot
ICAgICAgY2FzZSBIUldpZHRoOiAgICAgICAgICAgeyBoci5zZXRXaWR0aChzdHIpOyByZXR1cm47
IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6ZGl2U2V0dGVyKEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5n
JiBzdHIpCit7CisgICAgSFRNTERpdkVsZW1lbnRJbXBsJiBkaXYgPSAqc3RhdGljX2Nhc3Q8SFRN
TERpdkVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBpZiAodG9rZW4gPT0gRGl2QWxpZ24pCisg
ICAgICAgIGRpdi5zZXRBbGlnbihzdHIpOworfQorCit2b2lkIEhUTUxFbGVtZW50OjpwYXJhZ3Jh
cGhTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwg
Y29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MUGFyYWdyYXBoRWxlbWVudElt
cGwmIHBhcmFncmFwaCA9ICpzdGF0aWNfY2FzdDxIVE1MUGFyYWdyYXBoRWxlbWVudEltcGwqPihp
bXBsKCkpOworICAgIGlmICh0b2tlbiA9PSBQYXJhZ3JhcGhBbGlnbikKKyAgICAgICAgcGFyYWdy
YXBoLnNldEFsaWduKHN0cik7Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OmhlYWRpbmdTZXR0ZXIo
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9N
OjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MSGVhZGluZ0VsZW1lbnRJbXBsJiBoZWFkaW5n
ID0gKnN0YXRpY19jYXN0PEhUTUxIZWFkaW5nRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIGlm
ICh0b2tlbiA9PSBIZWFkaW5nQWxpZ24pCisgICAgICAgIGhlYWRpbmcuc2V0QWxpZ24oc3RyKTsK
K30KKwordm9pZCBIVE1MRWxlbWVudDo6YmxvY2tRdW90ZVNldHRlcihFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3Ry
KQoreworICAgIEhUTUxCbG9ja3F1b3RlRWxlbWVudEltcGwmIGJsb2NrUXVvdGUgPSAqc3RhdGlj
X2Nhc3Q8SFRNTEJsb2NrcXVvdGVFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2Vu
ID09IEJsb2NrUXVvdGVDaXRlKQorICAgICAgICBibG9ja1F1b3RlLnNldENpdGUoc3RyKTsKK30K
Kwordm9pZCBIVE1MRWxlbWVudDo6cXVvdGVTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAg
ICBIVE1MUXVvdGVFbGVtZW50SW1wbCYgcXVvdGUgPSAqc3RhdGljX2Nhc3Q8SFRNTFF1b3RlRWxl
bWVudEltcGwqPihpbXBsKCkpOworICAgIGlmICh0b2tlbiA9PSBRdW90ZUNpdGUpCisgICAgICAg
IHF1b3RlLnNldENpdGUoc3RyKTsKK30KKwordm9pZCBIVE1MRWxlbWVudDo6cHJlU2V0dGVyKEV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6
RE9NU3RyaW5nJiBzdHIpCit7CisgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciAnd3JhcCcg
d2hlbiB3aGl0ZS1zcGFjZTogcHJlLXdyYXAgaXMgaW1wbGVtZW50ZWQuCisgICAgSFRNTFByZUVs
ZW1lbnRJbXBsJiBwcmUgPSAqc3RhdGljX2Nhc3Q8SFRNTFByZUVsZW1lbnRJbXBsKj4oaW1wbCgp
KTsKKyAgICBpZiAodG9rZW4gPT0gUHJlV2lkdGgpCisgICAgICAgIHByZS5zZXRXaWR0aCh2YWx1
ZS50b0ludDMyKGV4ZWMpKTsKK30KKwordm9pZCBIVE1MRWxlbWVudDo6YnJTZXR0ZXIoRXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01T
dHJpbmcmIHN0cikKK3sKKyAgICBIVE1MQlJFbGVtZW50SW1wbCYgYnIgPSAqc3RhdGljX2Nhc3Q8
SFRNTEJSRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIGlmICh0b2tlbiA9PSBCUkNsZWFyKQor
ICAgICAgICBici5zZXRDbGVhcihzdHIpOworfQorCit2b2lkIEhUTUxFbGVtZW50OjpiYXNlRm9u
dFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBj
b25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxCYXNlRm9udEVsZW1lbnRJbXBs
JiBiYXNlRm9udCA9ICpzdGF0aWNfY2FzdDxIVE1MQmFzZUZvbnRFbGVtZW50SW1wbCo+KGltcGwo
KSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNlIEJhc2VGb250Q29sb3I6ICAg
ICAgICAgICB7IGJhc2VGb250LnNldENvbG9yKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNl
IEJhc2VGb250RmFjZTogICAgICAgICAgICB7IGJhc2VGb250LnNldEZhY2Uoc3RyKTsgcmV0dXJu
OyB9CisgICAgICAgIGNhc2UgQmFzZUZvbnRTaXplOiAgICAgICAgICAgIHsgYmFzZUZvbnQuc2V0
U2l6ZShzdHIpOyByZXR1cm47IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9JTlM6
Ci0gICAgY2FzZSBJRF9ERUw6IHsKLSAgICAgIEhUTUxNb2RFbGVtZW50SW1wbCAmbW9kID0gc3Rh
dGljX2Nhc3Q8SFRNTE1vZEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0
b2tlbikgewotICAgICAgY2FzZSBNb2RDaXRlOiAgICAgICAgICAgIHsgbW9kLnNldENpdGUoc3Ry
KTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIE1vZERhdGVUaW1lOiAgICAgICAgeyBtb2Quc2V0RGF0
ZVRpbWUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OmZv
bnRTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwg
Y29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MRm9udEVsZW1lbnRJbXBsJiBm
b250ID0gKnN0YXRpY19jYXN0PEhUTUxGb250RWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3
aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBGb250Q29sb3I6ICAgICAgICAgICB7IGZvbnQu
c2V0Q29sb3Ioc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgRm9udEZhY2U6ICAgICAgICAg
ICAgeyBmb250LnNldEZhY2Uoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgRm9udFNpemU6
ICAgICAgICAgICAgeyBmb250LnNldFNpemUoc3RyKTsgcmV0dXJuOyB9CiAgICAgfQotICAgIGJy
ZWFrOwotICAgIGNhc2UgSURfQTogewotICAgICAgSFRNTEFuY2hvckVsZW1lbnRJbXBsICZhbmNo
b3IgPSBzdGF0aWNfY2FzdDxIVE1MQW5jaG9yRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAg
ICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIEFuY2hvckFjY2Vzc0tleTogICAgICAgeyBh
bmNob3Iuc2V0QWNjZXNzS2V5KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBBbmNob3JDaGFy
c2V0OiAgICAgICAgIHsgYW5jaG9yLnNldENoYXJzZXQoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBj
YXNlIEFuY2hvckNvb3JkczogICAgICAgICAgeyBhbmNob3Iuc2V0Q29vcmRzKHN0cik7IHJldHVy
bjsgfQotICAgICAgY2FzZSBBbmNob3JIcmVmOiAgICAgICAgICAgIHsgYW5jaG9yLnNldEhyZWYo
c3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEFuY2hvckhyZWZMYW5nOiAgICAgICAgeyBhbmNo
b3Iuc2V0SHJlZmxhbmcoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEFuY2hvck5hbWU6ICAg
ICAgICAgICAgeyBhbmNob3Iuc2V0TmFtZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQW5j
aG9yUmVsOiAgICAgICAgICAgICB7IGFuY2hvci5zZXRSZWwoc3RyKTsgcmV0dXJuOyB9Ci0gICAg
ICBjYXNlIEFuY2hvclJldjogICAgICAgICAgICAgeyBhbmNob3Iuc2V0UmV2KHN0cik7IHJldHVy
bjsgfQotICAgICAgY2FzZSBBbmNob3JTaGFwZTogICAgICAgICAgIHsgYW5jaG9yLnNldFNoYXBl
KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBBbmNob3JUYWJJbmRleDogICAgICAgIHsgYW5j
aG9yLnNldFRhYkluZGV4KHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNh
c2UgQW5jaG9yVGFyZ2V0OiAgICAgICAgICB7IGFuY2hvci5zZXRUYXJnZXQoc3RyKTsgcmV0dXJu
OyB9Ci0gICAgICBjYXNlIEFuY2hvclR5cGU6ICAgICAgICAgICAgeyBhbmNob3Iuc2V0VHlwZShz
dHIpOyByZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6aHJTZXR0ZXIo
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9N
OjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MSFJFbGVtZW50SW1wbCYgaHIgPSAqc3RhdGlj
X2Nhc3Q8SFRNTEhSRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsK
KyAgICAgICAgY2FzZSBIUkFsaWduOiAgICAgICAgICAgeyBoci5zZXRBbGlnbihzdHIpOyByZXR1
cm47IH0KKyAgICAgICAgY2FzZSBIUk5vU2hhZGU6ICAgICAgICAgeyBoci5zZXROb1NoYWRlKHZh
bHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIEhSU2l6ZTogICAg
ICAgICAgICB7IGhyLnNldFNpemUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgSFJXaWR0
aDogICAgICAgICAgIHsgaHIuc2V0V2lkdGgoc3RyKTsgcmV0dXJuOyB9CiAgICAgfQotICAgIGJy
ZWFrOwotICAgIGNhc2UgSURfSU1HOiB7Ci0gICAgICBIVE1MSW1hZ2VFbGVtZW50SW1wbCAmaW1h
Z2UgPSBzdGF0aWNfY2FzdDxIVE1MSW1hZ2VFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAg
IHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgSW1hZ2VOYW1lOiAgICAgICAgICAgIHsgaW1h
Z2Uuc2V0TmFtZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSW1hZ2VBbGlnbjogICAgICAg
ICAgIHsgaW1hZ2Uuc2V0QWxpZ24oc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEltYWdlQWx0
OiAgICAgICAgICAgICB7IGltYWdlLnNldEFsdChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2Ug
SW1hZ2VCb3JkZXI6ICAgICAgICAgIHsgaW1hZ2Uuc2V0Qm9yZGVyKHZhbHVlLnRvSW50MzIoZXhl
YykpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSW1hZ2VIZWlnaHQ6ICAgICAgICAgIHsgaW1hZ2Uu
c2V0SGVpZ2h0KHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSW1h
Z2VIc3BhY2U6ICAgICAgICAgIHsgaW1hZ2Uuc2V0SHNwYWNlKHZhbHVlLnRvSW50MzIoZXhlYykp
OyByZXR1cm47IH0KLSAgICAgIGNhc2UgSW1hZ2VJc01hcDogICAgICAgICAgIHsgaW1hZ2Uuc2V0
SXNNYXAodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEltYWdl
TG9uZ0Rlc2M6ICAgICAgICB7IGltYWdlLnNldExvbmdEZXNjKHN0cik7IHJldHVybjsgfQotICAg
ICAgY2FzZSBJbWFnZVNyYzogICAgICAgICAgICAgeyBpbWFnZS5zZXRTcmMoc3RyKTsgcmV0dXJu
OyB9Ci0gICAgICBjYXNlIEltYWdlVXNlTWFwOiAgICAgICAgICB7IGltYWdlLnNldFVzZU1hcChz
dHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSW1hZ2VWc3BhY2U6ICAgICAgICAgIHsgaW1hZ2Uu
c2V0VnNwYWNlKHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSW1h
Z2VXaWR0aDogICAgICAgICAgIHsgaW1hZ2Uuc2V0V2lkdGgodmFsdWUudG9JbnQzMihleGVjKSk7
IHJldHVybjsgfQotICAgICAgfQorfQorCit2b2lkIEhUTUxFbGVtZW50Ojptb2RTZXR0ZXIoRXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpE
T01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MTW9kRWxlbWVudEltcGwmIG1vZCA9ICpzdGF0aWNf
Y2FzdDxIVE1MTW9kRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsK
KyAgICAgICAgY2FzZSBNb2RDaXRlOiAgICAgICAgICAgIHsgbW9kLnNldENpdGUoc3RyKTsgcmV0
dXJuOyB9CisgICAgICAgIGNhc2UgTW9kRGF0ZVRpbWU6ICAgICAgICB7IG1vZC5zZXREYXRlVGlt
ZShzdHIpOyByZXR1cm47IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9PQkpFQ1Q6
IHsKLSAgICAgIEhUTUxPYmplY3RFbGVtZW50SW1wbCAmb2JqZWN0ID0gc3RhdGljX2Nhc3Q8SFRN
TE9iamVjdEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewot
ICAgICAgLy8gcmVhZC1vbmx5OiBmb3JtCi0gICAgICBjYXNlIE9iamVjdENvZGU6ICAgICAgICAg
ICAgICAgICB7IG9iamVjdC5zZXRDb2RlKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBPYmpl
Y3RBbGlnbjogICAgICAgICAgIHsgb2JqZWN0LnNldEFsaWduKHN0cik7IHJldHVybjsgfQotICAg
ICAgY2FzZSBPYmplY3RBcmNoaXZlOiAgICAgICAgIHsgb2JqZWN0LnNldEFyY2hpdmUoc3RyKTsg
cmV0dXJuOyB9Ci0gICAgICBjYXNlIE9iamVjdEJvcmRlcjogICAgICAgICAgeyBvYmplY3Quc2V0
Qm9yZGVyKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBPYmplY3RDb2RlQmFzZTogICAgICAg
IHsgb2JqZWN0LnNldENvZGVCYXNlKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBPYmplY3RD
b2RlVHlwZTogICAgICAgIHsgb2JqZWN0LnNldENvZGVUeXBlKHN0cik7IHJldHVybjsgfQotICAg
ICAgLy8gcmVhZC1vbmx5OiBPYmplY3RDb250ZW50RG9jdW1lbnQKLSAgICAgIGNhc2UgT2JqZWN0
RGF0YTogICAgICAgICAgICB7IG9iamVjdC5zZXREYXRhKHN0cik7IHJldHVybjsgfQotICAgICAg
Y2FzZSBPYmplY3REZWNsYXJlOiAgICAgICAgIHsgb2JqZWN0LnNldERlY2xhcmUodmFsdWUudG9C
b29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIE9iamVjdEhlaWdodDogICAgICAg
ICAgeyBvYmplY3Quc2V0SGVpZ2h0KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBPYmplY3RI
c3BhY2U6ICAgICAgICAgIHsgb2JqZWN0LnNldEhzcGFjZShzdHIpOyByZXR1cm47IH0KLSAgICAg
IGNhc2UgT2JqZWN0TmFtZTogICAgICAgICAgICB7IG9iamVjdC5zZXROYW1lKHN0cik7IHJldHVy
bjsgfQotICAgICAgY2FzZSBPYmplY3RTdGFuZGJ5OiAgICAgICAgIHsgb2JqZWN0LnNldFN0YW5k
Ynkoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIE9iamVjdFRhYkluZGV4OiAgICAgICAgeyBv
YmplY3Quc2V0VGFiSW5kZXgodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQotICAgICAg
Y2FzZSBPYmplY3RUeXBlOiAgICAgICAgICAgIHsgb2JqZWN0LnNldFR5cGUoc3RyKTsgcmV0dXJu
OyB9Ci0gICAgICBjYXNlIE9iamVjdFVzZU1hcDogICAgICAgICAgeyBvYmplY3Quc2V0VXNlTWFw
KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBPYmplY3RWc3BhY2U6ICAgICAgICAgIHsgb2Jq
ZWN0LnNldFZzcGFjZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgT2JqZWN0V2lkdGg6ICAg
ICAgICAgICB7IG9iamVjdC5zZXRXaWR0aChzdHIpOyByZXR1cm47IH0KLSAgICAgIH0KK30KKwor
dm9pZCBIVE1MRWxlbWVudDo6YW5jaG9yU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
LCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAg
SFRNTEFuY2hvckVsZW1lbnRJbXBsJiBhbmNob3IgPSAqc3RhdGljX2Nhc3Q8SFRNTEFuY2hvckVs
ZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2Ug
QW5jaG9yQWNjZXNzS2V5OiAgICAgICB7IGFuY2hvci5zZXRBY2Nlc3NLZXkoc3RyKTsgcmV0dXJu
OyB9CisgICAgICAgIGNhc2UgQW5jaG9yQ2hhcnNldDogICAgICAgICB7IGFuY2hvci5zZXRDaGFy
c2V0KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEFuY2hvckNvb3JkczogICAgICAgICAg
eyBhbmNob3Iuc2V0Q29vcmRzKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEFuY2hvckhy
ZWY6ICAgICAgICAgICAgeyBhbmNob3Iuc2V0SHJlZihzdHIpOyByZXR1cm47IH0KKyAgICAgICAg
Y2FzZSBBbmNob3JIcmVmTGFuZzogICAgICAgIHsgYW5jaG9yLnNldEhyZWZsYW5nKHN0cik7IHJl
dHVybjsgfQorICAgICAgICBjYXNlIEFuY2hvck5hbWU6ICAgICAgICAgICAgeyBhbmNob3Iuc2V0
TmFtZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBBbmNob3JSZWw6ICAgICAgICAgICAg
IHsgYW5jaG9yLnNldFJlbChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBBbmNob3JSZXY6
ICAgICAgICAgICAgIHsgYW5jaG9yLnNldFJldihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2Fz
ZSBBbmNob3JTaGFwZTogICAgICAgICAgIHsgYW5jaG9yLnNldFNoYXBlKHN0cik7IHJldHVybjsg
fQorICAgICAgICBjYXNlIEFuY2hvclRhYkluZGV4OiAgICAgICAgeyBhbmNob3Iuc2V0VGFiSW5k
ZXgodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIEFuY2hvclRh
cmdldDogICAgICAgICAgeyBhbmNob3Iuc2V0VGFyZ2V0KHN0cik7IHJldHVybjsgfQorICAgICAg
ICBjYXNlIEFuY2hvclR5cGU6ICAgICAgICAgICAgeyBhbmNob3Iuc2V0VHlwZShzdHIpOyByZXR1
cm47IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9QQVJBTTogewotICAgICAgSFRN
TFBhcmFtRWxlbWVudEltcGwgJnBhcmFtID0gc3RhdGljX2Nhc3Q8SFRNTFBhcmFtRWxlbWVudElt
cGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIFBhcmFt
TmFtZTogICAgICAgICAgICB7IHBhcmFtLnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBj
YXNlIFBhcmFtVHlwZTogICAgICAgICAgICB7IHBhcmFtLnNldFR5cGUoc3RyKTsgcmV0dXJuOyB9
Ci0gICAgICBjYXNlIFBhcmFtVmFsdWU6ICAgICAgICAgICB7IHBhcmFtLnNldFZhbHVlKHN0cik7
IHJldHVybjsgfQotICAgICAgY2FzZSBQYXJhbVZhbHVlVHlwZTogICAgICAgeyBwYXJhbS5zZXRW
YWx1ZVR5cGUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6
OmltYWdlU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFs
dWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTEltYWdlRWxlbWVudElt
cGwmIGltYWdlID0gKnN0YXRpY19jYXN0PEhUTUxJbWFnZUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsK
KyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgSW1hZ2VOYW1lOiAgICAgICAgICAg
IHsgaW1hZ2Uuc2V0TmFtZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJbWFnZUFsaWdu
OiAgICAgICAgICAgeyBpbWFnZS5zZXRBbGlnbihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2Fz
ZSBJbWFnZUFsdDogICAgICAgICAgICAgeyBpbWFnZS5zZXRBbHQoc3RyKTsgcmV0dXJuOyB9Cisg
ICAgICAgIGNhc2UgSW1hZ2VCb3JkZXI6ICAgICAgICAgIHsgaW1hZ2Uuc2V0Qm9yZGVyKHZhbHVl
LnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJbWFnZUhlaWdodDogICAg
ICAgICAgeyBpbWFnZS5zZXRIZWlnaHQodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQor
ICAgICAgICBjYXNlIEltYWdlSHNwYWNlOiAgICAgICAgICB7IGltYWdlLnNldEhzcGFjZSh2YWx1
ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgSW1hZ2VJc01hcDogICAg
ICAgICAgIHsgaW1hZ2Uuc2V0SXNNYXAodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9
CisgICAgICAgIGNhc2UgSW1hZ2VMb25nRGVzYzogICAgICAgIHsgaW1hZ2Uuc2V0TG9uZ0Rlc2Mo
c3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgSW1hZ2VTcmM6ICAgICAgICAgICAgIHsgaW1h
Z2Uuc2V0U3JjKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEltYWdlVXNlTWFwOiAgICAg
ICAgICB7IGltYWdlLnNldFVzZU1hcChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJbWFn
ZVZzcGFjZTogICAgICAgICAgeyBpbWFnZS5zZXRWc3BhY2UodmFsdWUudG9JbnQzMihleGVjKSk7
IHJldHVybjsgfQorICAgICAgICBjYXNlIEltYWdlV2lkdGg6ICAgICAgICAgICB7IGltYWdlLnNl
dFdpZHRoKHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KICAgICB9Ci0gICAgYnJlYWs7
Ci0gICAgY2FzZSBJRF9BUFBMRVQ6IHsKLSAgICAgIEhUTUxBcHBsZXRFbGVtZW50SW1wbCAmYXBw
bGV0ID0gc3RhdGljX2Nhc3Q8SFRNTEFwcGxldEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAg
ICAgc3dpdGNoICh0b2tlbikgewotICAgICAgY2FzZSBBcHBsZXRBbGlnbjogICAgICAgICAgIHsg
YXBwbGV0LnNldEFsaWduKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBBcHBsZXRBbHQ6ICAg
ICAgICAgICAgIHsgYXBwbGV0LnNldEFsdChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQXBw
bGV0QXJjaGl2ZTogICAgICAgICB7IGFwcGxldC5zZXRBcmNoaXZlKHN0cik7IHJldHVybjsgfQot
ICAgICAgY2FzZSBBcHBsZXRDb2RlOiAgICAgICAgICAgIHsgYXBwbGV0LnNldENvZGUoc3RyKTsg
cmV0dXJuOyB9Ci0gICAgICBjYXNlIEFwcGxldENvZGVCYXNlOiAgICAgICAgeyBhcHBsZXQuc2V0
Q29kZUJhc2Uoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEFwcGxldEhlaWdodDogICAgICAg
ICAgeyBhcHBsZXQuc2V0SGVpZ2h0KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBBcHBsZXRI
c3BhY2U6ICAgICAgICAgIHsgYXBwbGV0LnNldEhzcGFjZShzdHIpOyByZXR1cm47IH0KLSAgICAg
IGNhc2UgQXBwbGV0TmFtZTogICAgICAgICAgICB7IGFwcGxldC5zZXROYW1lKHN0cik7IHJldHVy
bjsgfQotICAgICAgY2FzZSBBcHBsZXRPYmplY3Q6ICAgICAgICAgIHsgYXBwbGV0LnNldE9iamVj
dChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQXBwbGV0VnNwYWNlOiAgICAgICAgICB7IGFw
cGxldC5zZXRWc3BhY2Uoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEFwcGxldFdpZHRoOiAg
ICAgICAgICAgeyBhcHBsZXQuc2V0V2lkdGgoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICB9Cit9CisK
K3ZvaWQgSFRNTEVsZW1lbnQ6Om9iamVjdFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
biwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAg
IEhUTUxPYmplY3RFbGVtZW50SW1wbCYgb2JqZWN0ID0gKnN0YXRpY19jYXN0PEhUTUxPYmplY3RF
bGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICAvLyBy
ZWFkLW9ubHk6IGZvcm0KKyAgICAgICAgY2FzZSBPYmplY3RDb2RlOiAgICAgICAgICAgIHsgb2Jq
ZWN0LnNldENvZGUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgT2JqZWN0QWxpZ246ICAg
ICAgICAgICB7IG9iamVjdC5zZXRBbGlnbihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBP
YmplY3RBcmNoaXZlOiAgICAgICAgIHsgb2JqZWN0LnNldEFyY2hpdmUoc3RyKTsgcmV0dXJuOyB9
CisgICAgICAgIGNhc2UgT2JqZWN0Qm9yZGVyOiAgICAgICAgICB7IG9iamVjdC5zZXRCb3JkZXIo
c3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgT2JqZWN0Q29kZUJhc2U6ICAgICAgICB7IG9i
amVjdC5zZXRDb2RlQmFzZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBPYmplY3RDb2Rl
VHlwZTogICAgICAgIHsgb2JqZWN0LnNldENvZGVUeXBlKHN0cik7IHJldHVybjsgfQorICAgICAg
ICAvLyByZWFkLW9ubHk6IE9iamVjdENvbnRlbnREb2N1bWVudAorICAgICAgICBjYXNlIE9iamVj
dERhdGE6ICAgICAgICAgICAgeyBvYmplY3Quc2V0RGF0YShzdHIpOyByZXR1cm47IH0KKyAgICAg
ICAgY2FzZSBPYmplY3REZWNsYXJlOiAgICAgICAgIHsgb2JqZWN0LnNldERlY2xhcmUodmFsdWUu
dG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgT2JqZWN0SGVpZ2h0OiAg
ICAgICAgICB7IG9iamVjdC5zZXRIZWlnaHQoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2Ug
T2JqZWN0SHNwYWNlOiAgICAgICAgICB7IG9iamVjdC5zZXRIc3BhY2Uoc3RyKTsgcmV0dXJuOyB9
CisgICAgICAgIGNhc2UgT2JqZWN0TmFtZTogICAgICAgICAgICB7IG9iamVjdC5zZXROYW1lKHN0
cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIE9iamVjdFN0YW5kYnk6ICAgICAgICAgeyBvYmpl
Y3Quc2V0U3RhbmRieShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBPYmplY3RUYWJJbmRl
eDogICAgICAgIHsgb2JqZWN0LnNldFRhYkluZGV4KHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1
cm47IH0KKyAgICAgICAgY2FzZSBPYmplY3RUeXBlOiAgICAgICAgICAgIHsgb2JqZWN0LnNldFR5
cGUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgT2JqZWN0VXNlTWFwOiAgICAgICAgICB7
IG9iamVjdC5zZXRVc2VNYXAoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgT2JqZWN0VnNw
YWNlOiAgICAgICAgICB7IG9iamVjdC5zZXRWc3BhY2Uoc3RyKTsgcmV0dXJuOyB9CisgICAgICAg
IGNhc2UgT2JqZWN0V2lkdGg6ICAgICAgICAgICB7IG9iamVjdC5zZXRXaWR0aChzdHIpOyByZXR1
cm47IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9NQVA6IHsKLSAgICAgIEhUTUxN
YXBFbGVtZW50SW1wbCAmbWFwID0gc3RhdGljX2Nhc3Q8SFRNTE1hcEVsZW1lbnRJbXBsICY+KGVs
ZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgLy8gcmVhZC1vbmx5OiBhcmVh
cwotICAgICAgY2FzZSBNYXBOYW1lOiAgICAgICAgICAgICAgICAgeyBtYXAuc2V0TmFtZShzdHIp
OyByZXR1cm47IH0KLSAgICAgfQorfQorCit2b2lkIEhUTUxFbGVtZW50OjpwYXJhbVNldHRlcihF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006
OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxQYXJhbUVsZW1lbnRJbXBsJiBwYXJhbSA9ICpz
dGF0aWNfY2FzdDxIVE1MUGFyYW1FbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0
b2tlbikgeworICAgICAgICBjYXNlIFBhcmFtTmFtZTogICAgICAgICAgICB7IHBhcmFtLnNldE5h
bWUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgUGFyYW1UeXBlOiAgICAgICAgICAgIHsg
cGFyYW0uc2V0VHlwZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBQYXJhbVZhbHVlOiAg
ICAgICAgICAgeyBwYXJhbS5zZXRWYWx1ZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBQ
YXJhbVZhbHVlVHlwZTogICAgICAgeyBwYXJhbS5zZXRWYWx1ZVR5cGUoc3RyKTsgcmV0dXJuOyB9
CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfQVJFQTogewotICAgICAgSFRNTEFyZWFF
bGVtZW50SW1wbCAmYXJlYSA9IHN0YXRpY19jYXN0PEhUTUxBcmVhRWxlbWVudEltcGwgJj4oZWxl
bWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIEFyZWFBY2Nlc3NLZXk6
ICAgICAgIHsgYXJlYS5zZXRBY2Nlc3NLZXkoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEFy
ZWFBbHQ6ICAgICAgICAgICAgIHsgYXJlYS5zZXRBbHQoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBj
YXNlIEFyZWFDb29yZHM6ICAgICAgICAgIHsgYXJlYS5zZXRDb29yZHMoc3RyKTsgcmV0dXJuOyB9
Ci0gICAgICBjYXNlIEFyZWFIcmVmOiAgICAgICAgICAgIHsgYXJlYS5zZXRIcmVmKHN0cik7IHJl
dHVybjsgfQotICAgICAgY2FzZSBBcmVhTm9IcmVmOiAgICAgICAgICB7IGFyZWEuc2V0Tm9IcmVm
KHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBBcmVhU2hhcGU6
ICAgICAgICAgICB7IGFyZWEuc2V0U2hhcGUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEFy
ZWFUYWJJbmRleDogICAgICAgIHsgYXJlYS5zZXRUYWJJbmRleCh2YWx1ZS50b0ludDMyKGV4ZWMp
KTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEFyZWFUYXJnZXQ6ICAgICAgICAgIHsgYXJlYS5zZXRU
YXJnZXQoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OmFw
cGxldFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVl
LCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxBcHBsZXRFbGVtZW50SW1w
bCYgYXBwbGV0ID0gKnN0YXRpY19jYXN0PEhUTUxBcHBsZXRFbGVtZW50SW1wbCo+KGltcGwoKSk7
CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNlIEFwcGxldEFsaWduOiAgICAgICAg
ICAgeyBhcHBsZXQuc2V0QWxpZ24oc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQXBwbGV0
QWx0OiAgICAgICAgICAgICB7IGFwcGxldC5zZXRBbHQoc3RyKTsgcmV0dXJuOyB9CisgICAgICAg
IGNhc2UgQXBwbGV0QXJjaGl2ZTogICAgICAgICB7IGFwcGxldC5zZXRBcmNoaXZlKHN0cik7IHJl
dHVybjsgfQorICAgICAgICBjYXNlIEFwcGxldENvZGU6ICAgICAgICAgICAgeyBhcHBsZXQuc2V0
Q29kZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBBcHBsZXRDb2RlQmFzZTogICAgICAg
IHsgYXBwbGV0LnNldENvZGVCYXNlKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEFwcGxl
dEhlaWdodDogICAgICAgICAgeyBhcHBsZXQuc2V0SGVpZ2h0KHN0cik7IHJldHVybjsgfQorICAg
ICAgICBjYXNlIEFwcGxldEhzcGFjZTogICAgICAgICAgeyBhcHBsZXQuc2V0SHNwYWNlKHN0cik7
IHJldHVybjsgfQorICAgICAgICBjYXNlIEFwcGxldE5hbWU6ICAgICAgICAgICAgeyBhcHBsZXQu
c2V0TmFtZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBBcHBsZXRPYmplY3Q6ICAgICAg
ICAgIHsgYXBwbGV0LnNldE9iamVjdChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBBcHBs
ZXRWc3BhY2U6ICAgICAgICAgIHsgYXBwbGV0LnNldFZzcGFjZShzdHIpOyByZXR1cm47IH0KKyAg
ICAgICAgY2FzZSBBcHBsZXRXaWR0aDogICAgICAgICAgIHsgYXBwbGV0LnNldFdpZHRoKHN0cik7
IHJldHVybjsgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX1NDUklQVDogewotICAg
ICAgSFRNTFNjcmlwdEVsZW1lbnRJbXBsICZzY3JpcHQgPSBzdGF0aWNfY2FzdDxIVE1MU2NyaXB0
RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBj
YXNlIFNjcmlwdFRleHQ6ICAgICAgICAgICAgeyBzY3JpcHQuc2V0VGV4dChzdHIpOyByZXR1cm47
IH0KLSAgICAgIGNhc2UgU2NyaXB0SHRtbEZvcjogICAgICAgICB7IHNjcmlwdC5zZXRIdG1sRm9y
KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBTY3JpcHRFdmVudDogICAgICAgICAgIHsgc2Ny
aXB0LnNldEV2ZW50KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBTY3JpcHRDaGFyc2V0OiAg
ICAgICAgIHsgc2NyaXB0LnNldENoYXJzZXQoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFNj
cmlwdERlZmVyOiAgICAgICAgICAgeyBzY3JpcHQuc2V0RGVmZXIodmFsdWUudG9Cb29sZWFuKGV4
ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFNjcmlwdFNyYzogICAgICAgICAgICAgeyBzY3Jp
cHQuc2V0U3JjKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBTY3JpcHRUeXBlOiAgICAgICAg
ICAgIHsgc2NyaXB0LnNldFR5cGUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICB9Cit9CisKK3ZvaWQg
SFRNTEVsZW1lbnQ6Om1hcFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3Qg
VmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxNYXBF
bGVtZW50SW1wbCYgbWFwID0gKnN0YXRpY19jYXN0PEhUTUxNYXBFbGVtZW50SW1wbCo+KGltcGwo
KSk7CisgICAgaWYgKHRva2VuID09IE1hcE5hbWUpCisgICAgICAgIC8vIHJlYWQtb25seTogYXJl
YXMKKyAgICAgICAgbWFwLnNldE5hbWUoc3RyKTsKK30KKwordm9pZCBIVE1MRWxlbWVudDo6YXJl
YVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBj
b25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxBcmVhRWxlbWVudEltcGwmIGFy
ZWEgPSAqc3RhdGljX2Nhc3Q8SFRNTEFyZWFFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dp
dGNoICh0b2tlbikgeworICAgICAgICBjYXNlIEFyZWFBY2Nlc3NLZXk6ICAgICAgIHsgYXJlYS5z
ZXRBY2Nlc3NLZXkoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQXJlYUFsdDogICAgICAg
ICAgICAgeyBhcmVhLnNldEFsdChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBBcmVhQ29v
cmRzOiAgICAgICAgICB7IGFyZWEuc2V0Q29vcmRzKHN0cik7IHJldHVybjsgfQorICAgICAgICBj
YXNlIEFyZWFIcmVmOiAgICAgICAgICAgIHsgYXJlYS5zZXRIcmVmKHN0cik7IHJldHVybjsgfQor
ICAgICAgICBjYXNlIEFyZWFOb0hyZWY6ICAgICAgICAgIHsgYXJlYS5zZXROb0hyZWYodmFsdWUu
dG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQXJlYVNoYXBlOiAgICAg
ICAgICAgeyBhcmVhLnNldFNoYXBlKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEFyZWFU
YWJJbmRleDogICAgICAgIHsgYXJlYS5zZXRUYWJJbmRleCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsg
cmV0dXJuOyB9CisgICAgICAgIGNhc2UgQXJlYVRhcmdldDogICAgICAgICAgeyBhcmVhLnNldFRh
cmdldChzdHIpOyByZXR1cm47IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9UQUJM
RTogewotICAgICAgSFRNTFRhYmxlRWxlbWVudEltcGwgJnRhYmxlID0gc3RhdGljX2Nhc3Q8SFRN
TFRhYmxlRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0g
ICAgICBjYXNlIFRhYmxlQ2FwdGlvbjogICAgICAgICB7IHRhYmxlLnNldENhcHRpb24odG9IVE1M
VGFibGVDYXB0aW9uRWxlbWVudCh2YWx1ZSkpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVU
SGVhZDogICAgICAgICAgIHsgdGFibGUuc2V0VEhlYWQodG9IVE1MVGFibGVTZWN0aW9uRWxlbWVu
dCh2YWx1ZSkpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVURm9vdDogICAgICAgICAgIHsg
dGFibGUuc2V0VEZvb3QodG9IVE1MVGFibGVTZWN0aW9uRWxlbWVudCh2YWx1ZSkpOyByZXR1cm47
IH0KLSAgICAgIC8vIHJlYWQtb25seTogcm93cwotICAgICAgLy8gcmVhZC1vbmx5OiB0Ym9kaWVz
Ci0gICAgICBjYXNlIFRhYmxlQWxpZ246ICAgICAgICAgICB7IHRhYmxlLnNldEFsaWduKHN0cik7
IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJsZUJnQ29sb3I6ICAgICAgICAgeyB0YWJsZS5zZXRC
Z0NvbG9yKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJsZUJvcmRlcjogICAgICAgICAg
eyB0YWJsZS5zZXRCb3JkZXIoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlQ2VsbFBh
ZGRpbmc6ICAgICB7IHRhYmxlLnNldENlbGxQYWRkaW5nKHN0cik7IHJldHVybjsgfQotICAgICAg
Y2FzZSBUYWJsZUNlbGxTcGFjaW5nOiAgICAgeyB0YWJsZS5zZXRDZWxsU3BhY2luZyhzdHIpOyBy
ZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVGcmFtZTogICAgICAgICAgIHsgdGFibGUuc2V0RnJh
bWUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlUnVsZXM6ICAgICAgICAgICB7IHRh
YmxlLnNldFJ1bGVzKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJsZVN1bW1hcnk6ICAg
ICAgICAgeyB0YWJsZS5zZXRTdW1tYXJ5KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJs
ZVdpZHRoOiAgICAgICAgICAgeyB0YWJsZS5zZXRXaWR0aChzdHIpOyByZXR1cm47IH0KLSAgICAg
IH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6c2NyaXB0U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIp
Cit7CisgICAgSFRNTFNjcmlwdEVsZW1lbnRJbXBsJiBzY3JpcHQgPSAqc3RhdGljX2Nhc3Q8SFRN
TFNjcmlwdEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAg
ICAgIGNhc2UgU2NyaXB0VGV4dDogICAgICAgICAgICB7IHNjcmlwdC5zZXRUZXh0KHN0cik7IHJl
dHVybjsgfQorICAgICAgICBjYXNlIFNjcmlwdEh0bWxGb3I6ICAgICAgICAgeyBzY3JpcHQuc2V0
SHRtbEZvcihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBTY3JpcHRFdmVudDogICAgICAg
ICAgIHsgc2NyaXB0LnNldEV2ZW50KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFNjcmlw
dENoYXJzZXQ6ICAgICAgICAgeyBzY3JpcHQuc2V0Q2hhcnNldChzdHIpOyByZXR1cm47IH0KKyAg
ICAgICAgY2FzZSBTY3JpcHREZWZlcjogICAgICAgICAgIHsgc2NyaXB0LnNldERlZmVyKHZhbHVl
LnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIFNjcmlwdFNyYzogICAg
ICAgICAgICAgeyBzY3JpcHQuc2V0U3JjKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFNj
cmlwdFR5cGU6ICAgICAgICAgICAgeyBzY3JpcHQuc2V0VHlwZShzdHIpOyByZXR1cm47IH0KICAg
ICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9DQVBUSU9OOiB7Ci0gICAgICBIVE1MVGFibGVD
YXB0aW9uRWxlbWVudEltcGwgJnRhYmxlQ2FwdGlvbiA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZUNh
cHRpb25FbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAg
ICAgIGNhc2UgVGFibGVBbGlnbjogICAgICAgICAgIHsgdGFibGVDYXB0aW9uLnNldEFsaWduKHN0
cik7IHJldHVybjsgfQotICAgICAgfQorfQorCit2b2lkIEhUTUxFbGVtZW50Ojp0YWJsZVNldHRl
cihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBE
T006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxUYWJsZUVsZW1lbnRJbXBsJiB0YWJsZSA9
ICpzdGF0aWNfY2FzdDxIVE1MVGFibGVFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNo
ICh0b2tlbikgeworICAgICAgICBjYXNlIFRhYmxlQ2FwdGlvbjogICAgICAgICB7IHRhYmxlLnNl
dENhcHRpb24odG9IVE1MVGFibGVDYXB0aW9uRWxlbWVudCh2YWx1ZSkpOyByZXR1cm47IH0KKyAg
ICAgICAgY2FzZSBUYWJsZVRIZWFkOiAgICAgICAgICAgeyB0YWJsZS5zZXRUSGVhZCh0b0hUTUxU
YWJsZVNlY3Rpb25FbGVtZW50KHZhbHVlKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxl
VEZvb3Q6ICAgICAgICAgICB7IHRhYmxlLnNldFRGb290KHRvSFRNTFRhYmxlU2VjdGlvbkVsZW1l
bnQodmFsdWUpKTsgcmV0dXJuOyB9CisgICAgICAgIC8vIHJlYWQtb25seTogcm93cworICAgICAg
ICAvLyByZWFkLW9ubHk6IHRib2RpZXMKKyAgICAgICAgY2FzZSBUYWJsZUFsaWduOiAgICAgICAg
ICAgeyB0YWJsZS5zZXRBbGlnbihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZUJn
Q29sb3I6ICAgICAgICAgeyB0YWJsZS5zZXRCZ0NvbG9yKHN0cik7IHJldHVybjsgfQorICAgICAg
ICBjYXNlIFRhYmxlQm9yZGVyOiAgICAgICAgICB7IHRhYmxlLnNldEJvcmRlcihzdHIpOyByZXR1
cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZUNlbGxQYWRkaW5nOiAgICAgeyB0YWJsZS5zZXRDZWxs
UGFkZGluZyhzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZUNlbGxTcGFjaW5nOiAg
ICAgeyB0YWJsZS5zZXRDZWxsU3BhY2luZyhzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBU
YWJsZUZyYW1lOiAgICAgICAgICAgeyB0YWJsZS5zZXRGcmFtZShzdHIpOyByZXR1cm47IH0KKyAg
ICAgICAgY2FzZSBUYWJsZVJ1bGVzOiAgICAgICAgICAgeyB0YWJsZS5zZXRSdWxlcyhzdHIpOyBy
ZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZVN1bW1hcnk6ICAgICAgICAgeyB0YWJsZS5zZXRT
dW1tYXJ5KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxlV2lkdGg6ICAgICAgICAg
ICB7IHRhYmxlLnNldFdpZHRoKHN0cik7IHJldHVybjsgfQogICAgIH0KLSAgICBicmVhazsKLSAg
ICBjYXNlIElEX0NPTDogewotICAgICAgSFRNTFRhYmxlQ29sRWxlbWVudEltcGwgJnRhYmxlQ29s
ID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ29sRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAg
ICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIFRhYmxlQ29sQWxpZ246ICAgICAgICAgICB7
IHRhYmxlQ29sLnNldEFsaWduKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJsZUNvbENo
OiAgICAgICAgICAgICAgeyB0YWJsZUNvbC5zZXRDaChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNh
c2UgVGFibGVDb2xDaE9mZjogICAgICAgICAgIHsgdGFibGVDb2wuc2V0Q2hPZmYoc3RyKTsgcmV0
dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlQ29sU3BhbjogICAgICAgICAgICB7IHRhYmxlQ29sLnNl
dFNwYW4odmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJsZUNv
bFZBbGlnbjogICAgICAgICAgeyB0YWJsZUNvbC5zZXRWQWxpZ24oc3RyKTsgcmV0dXJuOyB9Ci0g
ICAgICBjYXNlIFRhYmxlQ29sV2lkdGg6ICAgICAgICAgICB7IHRhYmxlQ29sLnNldFdpZHRoKHN0
cik7IHJldHVybjsgfQotICAgICAgfQorfQorCit2b2lkIEhUTUxFbGVtZW50Ojp0YWJsZUNhcHRp
b25TZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwg
Y29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MVGFibGVDYXB0aW9uRWxlbWVu
dEltcGwmIHRhYmxlQ2FwdGlvbiA9ICpzdGF0aWNfY2FzdDxIVE1MVGFibGVDYXB0aW9uRWxlbWVu
dEltcGwqPihpbXBsKCkpOworICAgIGlmICh0b2tlbiA9PSBUYWJsZUNhcHRpb25BbGlnbikKKyAg
ICAgICAgdGFibGVDYXB0aW9uLnNldEFsaWduKHN0cik7Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6
OnRhYmxlQ29sU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYg
dmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTFRhYmxlQ29sRWxl
bWVudEltcGwmIHRhYmxlQ29sID0gKnN0YXRpY19jYXN0PEhUTUxUYWJsZUNvbEVsZW1lbnRJbXBs
Kj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgVGFibGVDb2xB
bGlnbjogICAgICAgICAgIHsgdGFibGVDb2wuc2V0QWxpZ24oc3RyKTsgcmV0dXJuOyB9CisgICAg
ICAgIGNhc2UgVGFibGVDb2xDaDogICAgICAgICAgICAgIHsgdGFibGVDb2wuc2V0Q2goc3RyKTsg
cmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGFibGVDb2xDaE9mZjogICAgICAgICAgIHsgdGFibGVD
b2wuc2V0Q2hPZmYoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGFibGVDb2xTcGFuOiAg
ICAgICAgICAgIHsgdGFibGVDb2wuc2V0U3Bhbih2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJu
OyB9CisgICAgICAgIGNhc2UgVGFibGVDb2xWQWxpZ246ICAgICAgICAgIHsgdGFibGVDb2wuc2V0
VkFsaWduKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxlQ29sV2lkdGg6ICAgICAg
ICAgICB7IHRhYmxlQ29sLnNldFdpZHRoKHN0cik7IHJldHVybjsgfQogICAgIH0KLSAgICBicmVh
azsKLSAgICBjYXNlIElEX1RIRUFEOgotICAgIGNhc2UgSURfVEJPRFk6Ci0gICAgY2FzZSBJRF9U
Rk9PVDogewotICAgICAgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsICZ0YWJsZVNlY3Rpb24g
PSBzdGF0aWNfY2FzdDxIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0g
ICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIFRhYmxlU2VjdGlvbkFsaWduOiAgICAg
ICAgICAgeyB0YWJsZVNlY3Rpb24uc2V0QWxpZ24oc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNl
IFRhYmxlU2VjdGlvbkNoOiAgICAgICAgICAgICAgeyB0YWJsZVNlY3Rpb24uc2V0Q2goc3RyKTsg
cmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlU2VjdGlvbkNoT2ZmOiAgICAgICAgICAgeyB0YWJs
ZVNlY3Rpb24uc2V0Q2hPZmYoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlU2VjdGlv
blZBbGlnbjogICAgICAgICAgeyB0YWJsZVNlY3Rpb24uc2V0VkFsaWduKHN0cik7IHJldHVybjsg
fQotICAgICAgLy8gcmVhZC1vbmx5OiByb3dzCi0gICAgICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1l
bnQ6OnRhYmxlU2VjdGlvblNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3Qg
VmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxUYWJs
ZVNlY3Rpb25FbGVtZW50SW1wbCYgdGFibGVTZWN0aW9uID0gKnN0YXRpY19jYXN0PEhUTUxUYWJs
ZVNlY3Rpb25FbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAg
ICAgICBjYXNlIFRhYmxlU2VjdGlvbkFsaWduOiAgICAgICAgICAgeyB0YWJsZVNlY3Rpb24uc2V0
QWxpZ24oc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGFibGVTZWN0aW9uQ2g6ICAgICAg
ICAgICAgICB7IHRhYmxlU2VjdGlvbi5zZXRDaChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2Fz
ZSBUYWJsZVNlY3Rpb25DaE9mZjogICAgICAgICAgIHsgdGFibGVTZWN0aW9uLnNldENoT2ZmKHN0
cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxlU2VjdGlvblZBbGlnbjogICAgICAgICAg
eyB0YWJsZVNlY3Rpb24uc2V0VkFsaWduKHN0cik7IHJldHVybjsgfQorICAgICAgICAvLyByZWFk
LW9ubHk6IHJvd3MKICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9UUjogewotICAgICAg
SFRNTFRhYmxlUm93RWxlbWVudEltcGwgJnRhYmxlUm93ID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxl
Um93RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAg
ICAvLyByZWFkLW9ubHk6IHJvd0luZGV4Ci0gICAgICAvLyByZWFkLW9ubHk6IHNlY3Rpb25Sb3dJ
bmRleAotICAgICAgLy8gcmVhZC1vbmx5OiBjZWxscwotICAgICAgY2FzZSBUYWJsZVJvd0FsaWdu
OiAgICAgICAgICAgeyB0YWJsZVJvdy5zZXRBbGlnbihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNh
c2UgVGFibGVSb3dCZ0NvbG9yOiAgICAgICAgIHsgdGFibGVSb3cuc2V0QmdDb2xvcihzdHIpOyBy
ZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVSb3dDaDogICAgICAgICAgICAgIHsgdGFibGVSb3cu
c2V0Q2goc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlUm93Q2hPZmY6ICAgICAgICAg
ICB7IHRhYmxlUm93LnNldENoT2ZmKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJsZVJv
d1ZBbGlnbjogICAgICAgICAgeyB0YWJsZVJvdy5zZXRWQWxpZ24oc3RyKTsgcmV0dXJuOyB9Ci0g
ICAgICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OnRhYmxlUm93U2V0dGVyKEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5n
JiBzdHIpCit7CisgICAgSFRNTFRhYmxlUm93RWxlbWVudEltcGwmIHRhYmxlUm93ID0gKnN0YXRp
Y19jYXN0PEhUTUxUYWJsZVJvd0VsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRv
a2VuKSB7CisgICAgICAgIC8vIHJlYWQtb25seTogcm93SW5kZXgKKyAgICAgICAgLy8gcmVhZC1v
bmx5OiBzZWN0aW9uUm93SW5kZXgKKyAgICAgICAgLy8gcmVhZC1vbmx5OiBjZWxscworICAgICAg
ICBjYXNlIFRhYmxlUm93QWxpZ246ICAgICAgICAgICB7IHRhYmxlUm93LnNldEFsaWduKHN0cik7
IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxlUm93QmdDb2xvcjogICAgICAgICB7IHRhYmxl
Um93LnNldEJnQ29sb3Ioc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGFibGVSb3dDaDog
ICAgICAgICAgICAgIHsgdGFibGVSb3cuc2V0Q2goc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNh
c2UgVGFibGVSb3dDaE9mZjogICAgICAgICAgIHsgdGFibGVSb3cuc2V0Q2hPZmYoc3RyKTsgcmV0
dXJuOyB9CisgICAgICAgIGNhc2UgVGFibGVSb3dWQWxpZ246ICAgICAgICAgIHsgdGFibGVSb3cu
c2V0VkFsaWduKHN0cik7IHJldHVybjsgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElE
X1RIOgotICAgIGNhc2UgSURfVEQ6IHsKLSAgICAgIEhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbCAm
dGFibGVDZWxsID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsICY+KGVsZW1l
bnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgLy8gcmVhZC1vbmx5OiBjZWxsSW5k
ZXgKLSAgICAgIGNhc2UgVGFibGVDZWxsQWJicjogICAgICAgICAgICB7IHRhYmxlQ2VsbC5zZXRB
YmJyKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJsZUNlbGxBbGlnbjogICAgICAgICAg
IHsgdGFibGVDZWxsLnNldEFsaWduKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJsZUNl
bGxBeGlzOiAgICAgICAgICAgIHsgdGFibGVDZWxsLnNldEF4aXMoc3RyKTsgcmV0dXJuOyB9Ci0g
ICAgICBjYXNlIFRhYmxlQ2VsbEJnQ29sb3I6ICAgICAgICAgeyB0YWJsZUNlbGwuc2V0QmdDb2xv
cihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVDZWxsQ2g6ICAgICAgICAgICAgICB7
IHRhYmxlQ2VsbC5zZXRDaChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVDZWxsQ2hP
ZmY6ICAgICAgICAgICB7IHRhYmxlQ2VsbC5zZXRDaE9mZihzdHIpOyByZXR1cm47IH0KLSAgICAg
IGNhc2UgVGFibGVDZWxsQ29sU3BhbjogICAgICAgICB7IHRhYmxlQ2VsbC5zZXRDb2xTcGFuKHZh
bHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVDZWxsSGVhZGVy
czogICAgICAgICB7IHRhYmxlQ2VsbC5zZXRIZWFkZXJzKHN0cik7IHJldHVybjsgfQotICAgICAg
Y2FzZSBUYWJsZUNlbGxIZWlnaHQ6ICAgICAgICAgIHsgdGFibGVDZWxsLnNldEhlaWdodChzdHIp
OyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVDZWxsTm9XcmFwOiAgICAgICAgICB7IHRhYmxl
Q2VsbC5zZXROb1dyYXAodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBj
YXNlIFRhYmxlQ2VsbFJvd1NwYW46ICAgICAgICAgeyB0YWJsZUNlbGwuc2V0Um93U3Bhbih2YWx1
ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlQ2VsbFNjb3BlOiAg
ICAgICAgICAgeyB0YWJsZUNlbGwuc2V0U2NvcGUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNl
IFRhYmxlQ2VsbFZBbGlnbjogICAgICAgICAgeyB0YWJsZUNlbGwuc2V0VkFsaWduKHN0cik7IHJl
dHVybjsgfQotICAgICAgY2FzZSBUYWJsZUNlbGxXaWR0aDogICAgICAgICAgIHsgdGFibGVDZWxs
LnNldFdpZHRoKHN0cik7IHJldHVybjsgfQotICAgICAgfQorfQorCit2b2lkIEhUTUxFbGVtZW50
Ojp0YWJsZUNlbGxTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVl
JiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MVGFibGVDZWxs
RWxlbWVudEltcGwmIHRhYmxlQ2VsbCA9ICpzdGF0aWNfY2FzdDxIVE1MVGFibGVDZWxsRWxlbWVu
dEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgLy8gcmVhZC1v
bmx5OiBjZWxsSW5kZXgKKyAgICAgICAgY2FzZSBUYWJsZUNlbGxBYmJyOiAgICAgICAgICAgIHsg
dGFibGVDZWxsLnNldEFiYnIoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGFibGVDZWxs
QWxpZ246ICAgICAgICAgICB7IHRhYmxlQ2VsbC5zZXRBbGlnbihzdHIpOyByZXR1cm47IH0KKyAg
ICAgICAgY2FzZSBUYWJsZUNlbGxBeGlzOiAgICAgICAgICAgIHsgdGFibGVDZWxsLnNldEF4aXMo
c3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGFibGVDZWxsQmdDb2xvcjogICAgICAgICB7
IHRhYmxlQ2VsbC5zZXRCZ0NvbG9yKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxl
Q2VsbENoOiAgICAgICAgICAgICAgeyB0YWJsZUNlbGwuc2V0Q2goc3RyKTsgcmV0dXJuOyB9Cisg
ICAgICAgIGNhc2UgVGFibGVDZWxsQ2hPZmY6ICAgICAgICAgICB7IHRhYmxlQ2VsbC5zZXRDaE9m
ZihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZUNlbGxDb2xTcGFuOiAgICAgICAg
IHsgdGFibGVDZWxsLnNldENvbFNwYW4odmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQor
ICAgICAgICBjYXNlIFRhYmxlQ2VsbEhlYWRlcnM6ICAgICAgICAgeyB0YWJsZUNlbGwuc2V0SGVh
ZGVycyhzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZUNlbGxIZWlnaHQ6ICAgICAg
ICAgIHsgdGFibGVDZWxsLnNldEhlaWdodChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBU
YWJsZUNlbGxOb1dyYXA6ICAgICAgICAgIHsgdGFibGVDZWxsLnNldE5vV3JhcCh2YWx1ZS50b0Jv
b2xlYW4oZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZUNlbGxSb3dTcGFuOiAg
ICAgICAgIHsgdGFibGVDZWxsLnNldFJvd1NwYW4odmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVy
bjsgfQorICAgICAgICBjYXNlIFRhYmxlQ2VsbFNjb3BlOiAgICAgICAgICAgeyB0YWJsZUNlbGwu
c2V0U2NvcGUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGFibGVDZWxsVkFsaWduOiAg
ICAgICAgICB7IHRhYmxlQ2VsbC5zZXRWQWxpZ24oc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNh
c2UgVGFibGVDZWxsV2lkdGg6ICAgICAgICAgICB7IHRhYmxlQ2VsbC5zZXRXaWR0aChzdHIpOyBy
ZXR1cm47IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9GUkFNRVNFVDogewotICAg
ICAgSFRNTEZyYW1lU2V0RWxlbWVudEltcGwgJmZyYW1lU2V0ID0gc3RhdGljX2Nhc3Q8SFRNTEZy
YW1lU2V0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0g
ICAgICBjYXNlIEZyYW1lU2V0Q29sczogICAgICAgICAgICB7IGZyYW1lU2V0LnNldENvbHMoc3Ry
KTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEZyYW1lU2V0Um93czogICAgICAgICAgICB7IGZyYW1l
U2V0LnNldFJvd3Moc3RyKTsgcmV0dXJuOyB9Ci0gICAgICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1l
bnQ6OmZyYW1lU2V0U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1
ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTEZyYW1lU2V0
RWxlbWVudEltcGwmIGZyYW1lU2V0ID0gKnN0YXRpY19jYXN0PEhUTUxGcmFtZVNldEVsZW1lbnRJ
bXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgRnJhbWVT
ZXRDb2xzOiAgICAgICAgICAgIHsgZnJhbWVTZXQuc2V0Q29scyhzdHIpOyByZXR1cm47IH0KKyAg
ICAgICAgY2FzZSBGcmFtZVNldFJvd3M6ICAgICAgICAgICAgeyBmcmFtZVNldC5zZXRSb3dzKHN0
cik7IHJldHVybjsgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0ZSQU1FOiB7Ci0g
ICAgICBIVE1MRnJhbWVFbGVtZW50SW1wbCAmZnJhbWVFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRN
TEZyYW1lRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0g
ICAgICAgLy8gcmVhZC1vbmx5OiBGcmFtZUNvbnRlbnREb2N1bWVudDoKLSAgICAgIGNhc2UgRnJh
bWVGcmFtZUJvcmRlcjogICAgIHsgZnJhbWVFbGVtZW50LnNldEZyYW1lQm9yZGVyKHN0cik7IHJl
dHVybjsgfQotICAgICAgY2FzZSBGcmFtZUxvbmdEZXNjOiAgICAgICAgeyBmcmFtZUVsZW1lbnQu
c2V0TG9uZ0Rlc2Moc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEZyYW1lTWFyZ2luSGVpZ2h0
OiAgICB7IGZyYW1lRWxlbWVudC5zZXRNYXJnaW5IZWlnaHQoc3RyKTsgcmV0dXJuOyB9Ci0gICAg
ICBjYXNlIEZyYW1lTWFyZ2luV2lkdGg6ICAgICB7IGZyYW1lRWxlbWVudC5zZXRNYXJnaW5XaWR0
aChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgRnJhbWVOYW1lOiAgICAgICAgICAgIHsgZnJh
bWVFbGVtZW50LnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEZyYW1lTm9SZXNp
emU6ICAgICAgICB7IGZyYW1lRWxlbWVudC5zZXROb1Jlc2l6ZSh2YWx1ZS50b0Jvb2xlYW4oZXhl
YykpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgRnJhbWVTY3JvbGxpbmc6ICAgICAgIHsgZnJhbWVF
bGVtZW50LnNldFNjcm9sbGluZyhzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgRnJhbWVTcmM6
ICAgICAgICAgICAgIHsgZnJhbWVFbGVtZW50LnNldFNyYyhzdHIpOyByZXR1cm47IH0KLSAgICAg
IGNhc2UgRnJhbWVMb2NhdGlvbjogICAgICAgIHsgZnJhbWVFbGVtZW50LnNldExvY2F0aW9uKHN0
cik7IHJldHVybjsgfQotICAgICAgfQorfQorCit2b2lkIEhUTUxFbGVtZW50OjpmcmFtZVNldHRl
cihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBE
T006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxGcmFtZUVsZW1lbnRJbXBsJiBmcmFtZUVs
ZW1lbnQgPSAqc3RhdGljX2Nhc3Q8SFRNTEZyYW1lRWxlbWVudEltcGwqPihpbXBsKCkpOworICAg
IHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgLy8gcmVhZC1vbmx5OiBGcmFtZUNvbnRlbnREb2N1
bWVudDoKKyAgICAgICAgY2FzZSBGcmFtZUZyYW1lQm9yZGVyOiAgICAgeyBmcmFtZUVsZW1lbnQu
c2V0RnJhbWVCb3JkZXIoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgRnJhbWVMb25nRGVz
YzogICAgICAgIHsgZnJhbWVFbGVtZW50LnNldExvbmdEZXNjKHN0cik7IHJldHVybjsgfQorICAg
ICAgICBjYXNlIEZyYW1lTWFyZ2luSGVpZ2h0OiAgICB7IGZyYW1lRWxlbWVudC5zZXRNYXJnaW5I
ZWlnaHQoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgRnJhbWVNYXJnaW5XaWR0aDogICAg
IHsgZnJhbWVFbGVtZW50LnNldE1hcmdpbldpZHRoKHN0cik7IHJldHVybjsgfQorICAgICAgICBj
YXNlIEZyYW1lTmFtZTogICAgICAgICAgICB7IGZyYW1lRWxlbWVudC5zZXROYW1lKHN0cik7IHJl
dHVybjsgfQorICAgICAgICBjYXNlIEZyYW1lTm9SZXNpemU6ICAgICAgICB7IGZyYW1lRWxlbWVu
dC5zZXROb1Jlc2l6ZSh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAg
Y2FzZSBGcmFtZVNjcm9sbGluZzogICAgICAgeyBmcmFtZUVsZW1lbnQuc2V0U2Nyb2xsaW5nKHN0
cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEZyYW1lU3JjOiAgICAgICAgICAgICB7IGZyYW1l
RWxlbWVudC5zZXRTcmMoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgRnJhbWVMb2NhdGlv
bjogICAgICAgIHsgZnJhbWVFbGVtZW50LnNldExvY2F0aW9uKHN0cik7IHJldHVybjsgfQogICAg
IH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0lGUkFNRTogewotICAgICAgSFRNTElGcmFtZUVs
ZW1lbnRJbXBsICZpRnJhbWUgPSBzdGF0aWNfY2FzdDxIVE1MSUZyYW1lRWxlbWVudEltcGwgJj4o
ZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIElGcmFtZUFsaWdu
OiAgICAgICAgICAgeyBpRnJhbWUuc2V0QWxpZ24oc3RyKTsgcmV0dXJuOyB9Ci0gICAgICAvLyBy
ZWFkLW9ubHk6IElGcmFtZUNvbnRlbnREb2N1bWVudAotICAgICAgY2FzZSBJRnJhbWVGcmFtZUJv
cmRlcjogICAgIHsgaUZyYW1lLnNldEZyYW1lQm9yZGVyKHN0cik7IHJldHVybjsgfQotICAgICAg
Y2FzZSBJRnJhbWVIZWlnaHQ6ICAgICAgICAgIHsgaUZyYW1lLnNldEhlaWdodChzdHIpOyByZXR1
cm47IH0KLSAgICAgIGNhc2UgSUZyYW1lTG9uZ0Rlc2M6ICAgICAgICB7IGlGcmFtZS5zZXRMb25n
RGVzYyhzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSUZyYW1lTWFyZ2luSGVpZ2h0OiAgICB7
IGlGcmFtZS5zZXRNYXJnaW5IZWlnaHQoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElGcmFt
ZU1hcmdpbldpZHRoOiAgICAgeyBpRnJhbWUuc2V0TWFyZ2luV2lkdGgoc3RyKTsgcmV0dXJuOyB9
Ci0gICAgICBjYXNlIElGcmFtZU5hbWU6ICAgICAgICAgICAgeyBpRnJhbWUuc2V0TmFtZShzdHIp
OyByZXR1cm47IH0KLSAgICAgIGNhc2UgSUZyYW1lU2Nyb2xsaW5nOiAgICAgICB7IGlGcmFtZS5z
ZXRTY3JvbGxpbmcoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElGcmFtZVNyYzogICAgICAg
ICAgICAgeyBpRnJhbWUuc2V0U3JjKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBJRnJhbWVX
aWR0aDogICAgICAgICAgIHsgaUZyYW1lLnNldFdpZHRoKHN0cik7IHJldHVybjsgfQotICAgICAg
fQotICAgICAgYnJlYWs7Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OmlGcmFtZVNldHRlcihFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRP
TVN0cmluZyYgc3RyKQoreworICAgIEhUTUxJRnJhbWVFbGVtZW50SW1wbCYgaUZyYW1lID0gKnN0
YXRpY19jYXN0PEhUTUxJRnJhbWVFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0
b2tlbikgeworICAgICAgICBjYXNlIElGcmFtZUFsaWduOiAgICAgICAgICAgeyBpRnJhbWUuc2V0
QWxpZ24oc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIC8vIHJlYWQtb25seTogSUZyYW1lQ29udGVu
dERvY3VtZW50CisgICAgICAgIGNhc2UgSUZyYW1lRnJhbWVCb3JkZXI6ICAgICB7IGlGcmFtZS5z
ZXRGcmFtZUJvcmRlcihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJRnJhbWVIZWlnaHQ6
ICAgICAgICAgIHsgaUZyYW1lLnNldEhlaWdodChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2Fz
ZSBJRnJhbWVMb25nRGVzYzogICAgICAgIHsgaUZyYW1lLnNldExvbmdEZXNjKHN0cik7IHJldHVy
bjsgfQorICAgICAgICBjYXNlIElGcmFtZU1hcmdpbkhlaWdodDogICAgeyBpRnJhbWUuc2V0TWFy
Z2luSGVpZ2h0KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIElGcmFtZU1hcmdpbldpZHRo
OiAgICAgeyBpRnJhbWUuc2V0TWFyZ2luV2lkdGgoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNh
c2UgSUZyYW1lTmFtZTogICAgICAgICAgICB7IGlGcmFtZS5zZXROYW1lKHN0cik7IHJldHVybjsg
fQorICAgICAgICBjYXNlIElGcmFtZVNjcm9sbGluZzogICAgICAgeyBpRnJhbWUuc2V0U2Nyb2xs
aW5nKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIElGcmFtZVNyYzogICAgICAgICAgICAg
eyBpRnJhbWUuc2V0U3JjKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIElGcmFtZVdpZHRo
OiAgICAgICAgICAgeyBpRnJhbWUuc2V0V2lkdGgoc3RyKTsgcmV0dXJuOyB9CiAgICAgfQotICB9
Cit9CiAKLSAgLy8gZ2VuZXJpYyBwcm9wZXJ0aWVzCi0gIHN3aXRjaCAodG9rZW4pIHsKLSAgY2Fz
ZSBFbGVtZW50SWQ6Ci0gICAgZWxlbWVudC5zZXRJZChzdHIpOwotICAgIHJldHVybjsKLSAgY2Fz
ZSBFbGVtZW50VGl0bGU6Ci0gICAgZWxlbWVudC5zZXRUaXRsZShzdHIpOwotICAgIHJldHVybjsK
LSAgY2FzZSBFbGVtZW50TGFuZzoKLSAgICBlbGVtZW50LnNldExhbmcoc3RyKTsKLSAgICByZXR1
cm47Ci0gIGNhc2UgRWxlbWVudERpcjoKLSAgICBlbGVtZW50LnNldERpcihzdHIpOwotICAgIHJl
dHVybjsKLSAgY2FzZSBFbGVtZW50Q2xhc3NOYW1lOgotICAgIGVsZW1lbnQuc2V0Q2xhc3NOYW1l
KHN0cik7Ci0gICAgcmV0dXJuOwotICBjYXNlIEVsZW1lbnRJbm5lckhUTUw6Ci0gICAgZWxlbWVu
dC5zZXRJbm5lckhUTUwoc3RyLCBleGNlcHRpb24pOwotICAgIHJldHVybjsKLSAgY2FzZSBFbGVt
ZW50SW5uZXJUZXh0OgotICAgIGVsZW1lbnQuc2V0SW5uZXJUZXh0KHN0ciwgZXhjZXB0aW9uKTsK
LSAgICByZXR1cm47Ci0gIGNhc2UgRWxlbWVudE91dGVySFRNTDoKLSAgICBlbGVtZW50LnNldE91
dGVySFRNTChzdHIsIGV4Y2VwdGlvbik7Ci0gICAgcmV0dXJuOwotICBjYXNlIEVsZW1lbnRPdXRl
clRleHQ6Ci0gICAgZWxlbWVudC5zZXRPdXRlclRleHQoc3RyLCBleGNlcHRpb24pOwotICAgIHJl
dHVybjsKLSAgY2FzZSBFbGVtZW50Q29udGVudEVkaXRhYmxlOgotICAgIGVsZW1lbnQuc2V0Q29u
dGVudEVkaXRhYmxlKHN0cik7Ci0gICAgcmV0dXJuOwotICBkZWZhdWx0OgotICAgIGtkV2Fybmlu
ZygpIDw8ICJLSlM6OkhUTUxFbGVtZW50OjpwdXRWYWx1ZSB1bmhhbmRsZWQgdG9rZW4gIiA8PCB0
b2tlbiA8PCAiIHRoaXNUYWc9IiA8PCBlbGVtZW50LnRhZ05hbWUoKS5zdHJpbmcoKSA8PCAiIHN0
cj0iIDw8IHN0ci5zdHJpbmcoKSA8PCBlbmRsOwotICB9Cit2b2lkIEhUTUxFbGVtZW50OjptYXJx
dWVlU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUs
IGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgLy8gRklYTUU6IEZpbmQgb3V0IHdo
YXQgV2luSUUgc3VwcG9ydHMgYW5kIGltcGxlbWVudCBpdC4KK30KKwordm9pZCBIVE1MRWxlbWVu
dDo6cHV0VmFsdWUoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1
ZSwgaW50KQoreworICAgIERPTUV4Y2VwdGlvblRyYW5zbGF0b3IgZXhjZXB0aW9uKGV4ZWMpOwor
ICAgIERPTTo6RE9NU3RyaW5nIHN0ciA9IHZhbHVlLmlzQShOdWxsVHlwZSkgPyBET006OkRPTVN0
cmluZygpIDogdmFsdWUudG9TdHJpbmcoZXhlYykuc3RyaW5nKCk7CisgCisgICAgLy8gQ2hlY2sg
b3VyIHNldCBvZiBnZW5lcmljIHByb3BlcnRpZXMgZmlyc3QuCisgICAgSFRNTEVsZW1lbnRJbXBs
ICZlbGVtZW50ID0gKnN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCAqPihpbXBsKCkpOworICAg
IHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBFbGVtZW50SWQ6CisgICAgICAgICAgICBl
bGVtZW50LnNldElkKHN0cik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgRWxl
bWVudFRpdGxlOgorICAgICAgICAgICAgZWxlbWVudC5zZXRUaXRsZShzdHIpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICBjYXNlIEVsZW1lbnRMYW5nOgorICAgICAgICAgICAgZWxlbWVu
dC5zZXRMYW5nKHN0cik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgRWxlbWVu
dERpcjoKKyAgICAgICAgICAgIGVsZW1lbnQuc2V0RGlyKHN0cik7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIGNhc2UgRWxlbWVudENsYXNzTmFtZToKKyAgICAgICAgICAgIGVsZW1lbnQu
c2V0Q2xhc3NOYW1lKHN0cik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgRWxl
bWVudElubmVySFRNTDoKKyAgICAgICAgICAgIGVsZW1lbnQuc2V0SW5uZXJIVE1MKHN0ciwgZXhj
ZXB0aW9uKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBFbGVtZW50SW5uZXJU
ZXh0OgorICAgICAgICAgICAgZWxlbWVudC5zZXRJbm5lclRleHQoc3RyLCBleGNlcHRpb24pOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIEVsZW1lbnRPdXRlckhUTUw6CisgICAg
ICAgICAgICBlbGVtZW50LnNldE91dGVySFRNTChzdHIsIGV4Y2VwdGlvbik7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIGNhc2UgRWxlbWVudE91dGVyVGV4dDoKKyAgICAgICAgICAgIGVs
ZW1lbnQuc2V0T3V0ZXJUZXh0KHN0ciwgZXhjZXB0aW9uKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgY2FzZSBFbGVtZW50Q29udGVudEVkaXRhYmxlOgorICAgICAgICAgICAgZWxlbWVu
dC5zZXRDb250ZW50RWRpdGFibGUoc3RyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICAvLyBOb3cgY2hlY2sgZm9yIHByb3BlcnRpZXMgdGhhdCBhcHBseSB0byBhIHNwZWNpZmlj
IGVsZW1lbnQgdHlwZS4KKyAgICBjb25zdCBHZXRTZXRJbmZvKiBpbmZvID0gZ2V0U2V0SW5mbygp
OworICAgIGlmIChpbmZvICYmIGluZm8tPm1fc2V0dGVyKQorICAgICAgICByZXR1cm4gKHRoaXMt
PiooaW5mby0+bV9zZXR0ZXIpKShleGVjLCB0b2tlbiwgdmFsdWUsIHN0cik7ICAKIH0KIAogSFRN
TEVsZW1lbnRJbXBsICp0b0hUTUxFbGVtZW50KFZhbHVlSW1wICp2YWwpCkBAIC0zMDU4LDIzICsz
MjE3LDE3IEBAIEhUTUxFbGVtZW50SW1wbCAqdG9IVE1MRWxlbWVudChWYWx1ZUltcCAKIAogSFRN
TFRhYmxlQ2FwdGlvbkVsZW1lbnRJbXBsICp0b0hUTUxUYWJsZUNhcHRpb25FbGVtZW50KFZhbHVl
SW1wICp2YWwpCiB7Ci0gICAgaWYgKEhUTUxFbGVtZW50SW1wbCAqZSA9IHRvSFRNTEVsZW1lbnQo
dmFsKSkKLSAgICAgICAgc3dpdGNoIChlLT5pZCgpKSB7Ci0gICAgICAgICAgICBjYXNlIElEX0NB
UFRJT046Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxUYWJsZUNhcHRp
b25FbGVtZW50SW1wbCAqPihlKTsKLSAgICAgICAgfQorICAgIEhUTUxFbGVtZW50SW1wbCAqZSA9
IHRvSFRNTEVsZW1lbnQodmFsKTsKKyAgICBpZiAoZSAmJiBlLT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6Y2FwdGlvbigpKSkKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxUYWJsZUNhcHRp
b25FbGVtZW50SW1wbCAqPihlKTsKICAgICByZXR1cm4gMDsKIH0KIAogSFRNTFRhYmxlU2VjdGlv
bkVsZW1lbnRJbXBsICp0b0hUTUxUYWJsZVNlY3Rpb25FbGVtZW50KFZhbHVlSW1wICp2YWwpCiB7
Ci0gICAgaWYgKEhUTUxFbGVtZW50SW1wbCAqZSA9IHRvSFRNTEVsZW1lbnQodmFsKSkKLSAgICAg
ICAgc3dpdGNoIChlLT5pZCgpKSB7Ci0gICAgICAgICAgICBjYXNlIElEX1RIRUFEOgotICAgICAg
ICAgICAgY2FzZSBJRF9UQk9EWToKLSAgICAgICAgICAgIGNhc2UgSURfVEZPT1Q6Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbCAq
PihlKTsKLSAgICAgICAgfQorICAgIEhUTUxFbGVtZW50SW1wbCAqZSA9IHRvSFRNTEVsZW1lbnQo
dmFsKTsKKyAgICBpZiAoZSAmJiAoZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRoZWFkKCkpIHx8
IGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0Ym9keSgpKSB8fCBlLT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6dGZvb3QoKSkpKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlU2Vj
dGlvbkVsZW1lbnRJbXBsICo+KGUpOwogICAgIHJldHVybiAwOwogfQogCkBAIC0zMTIzLDEwICsz
Mjc2LDEwIEBAIFZhbHVlIEtKUzo6SFRNTENvbGxlY3Rpb246OnRyeUdldChFeGVjU3QKICAgZWxz
ZSBpZiAocHJvcGVydHlOYW1lID09ICJzZWxlY3RlZEluZGV4IikgewogICAgIC8vIE5PTi1TVEFO
REFSRCBvcHRpb25zLnNlbGVjdGVkSW5kZXgKICAgICBOb2RlSW1wbCAqb3B0aW9uID0gY29sbGVj
dGlvbi5pdGVtKDApOwotICAgIGlmIChvcHRpb24tPmlkKCkgPT0gSURfT1BUSU9OKSB7CisgICAg
aWYgKG9wdGlvbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9wdGlvbigpKSkgewogICAgICAgTm9k
ZUltcGwgKnNlbGVjdCA9IG9wdGlvbjsKICAgICAgIHdoaWxlICgoc2VsZWN0ID0gc2VsZWN0LT5w
YXJlbnROb2RlKCkpKQotICAgICAgICBpZiAoc2VsZWN0LT5pZCgpID09IElEX1NFTEVDVCkKKyAg
ICAgICAgaWYgKHNlbGVjdC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnNlbGVjdCgpKSkKIAkgIHJl
dHVybiBOdW1iZXIoc3RhdGljX2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnRJbXBsICo+KHNlbGVjdCkt
PnNlbGVjdGVkSW5kZXgoKSk7CiAgICAgfQogICAgIHJldHVybiBVbmRlZmluZWQoKTsKQEAgLTMz
MTQsNyArMzQ2Nyw3IEBAIHZvaWQgS0pTOjpIVE1MU2VsZWN0Q29sbGVjdGlvbjo6dHJ5UHV0KEUK
IAogICAvLyBpcyB2IGFuIG9wdGlvbiBlbGVtZW50ID8KICAgTm9kZUltcGwgKm9wdGlvbiA9IHRv
Tm9kZSh2YWx1ZSk7Ci0gIGlmICghb3B0aW9uIHx8IG9wdGlvbi0+aWQoKSAhPSBJRF9PUFRJT04p
CisgIGlmICghb3B0aW9uIHx8ICFvcHRpb24tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvcHRpb24o
KSkpCiAgICAgcmV0dXJuOwogCiAgIGludCBleGNlcHRpb24gPSAwOwpJbmRleDoga2h0bWwvZWNt
YS9ranNfaHRtbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1s
L2VjbWEva2pzX2h0bWwuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40NwpkaWZmIC11IC1wIC1y
MS40NyBraHRtbC9lY21hL2tqc19odG1sLmgKLS0tIGtodG1sL2VjbWEva2pzX2h0bWwuaAkyMiBK
dW4gMjAwNSAwMDo0ODo0NCAtMDAwMAkxLjQ3CisrKyBraHRtbC9lY21hL2tqc19odG1sLmgJMjMg
SnVuIDIwMDUgMjE6NTI6MjEgLTAwMDAKQEAgLTg1LDYgKzg1LDEzMSBAQCBuYW1lc3BhY2UgS0pT
IHsKICAgICAgIGNhcHRpb25faW5mbywgY29sX2luZm8sIHRhYmxlc2VjdGlvbl9pbmZvLCB0cl9p
bmZvLAogICAgICAgdGFibGVjZWxsX2luZm8sIGZyYW1lU2V0X2luZm8sIGZyYW1lX2luZm8sIGlG
cmFtZV9pbmZvLCBtYXJxdWVlX2luZm87CiAKKyAgICAvLyBGSVhNRTogTWlnaHQgbWFrZSBzZW5z
ZSB0byBjb21iaW5lIHRoaXMgd2l0aCBDbGFzc0luZm8gc29tZSBkYXkuCisgICAgdHlwZWRlZiBW
YWx1ZSAoSFRNTEVsZW1lbnQ6OipHZXR0ZXJGdW5jdGlvbikoRXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4pIGNvbnN0OworICAgIHR5cGVkZWYgdm9pZCAoSFRNTEVsZW1lbnQ6OipTZXR0ZXJGdW5j
dGlvbikoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29u
c3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgc3RydWN0IEdldFNldEluZm8geyBHZXR0ZXJG
dW5jdGlvbiBtX2dldHRlcjsgU2V0dGVyRnVuY3Rpb24gbV9zZXR0ZXI7IH07CisgICAgY29uc3Qg
R2V0U2V0SW5mbyogZ2V0U2V0SW5mbygpIGNvbnN0OworICAgIHN0YXRpYyBjb25zdCBHZXRTZXRJ
bmZvIGh0bWxfZ2V0c2V0LCBoZWFkX2dldHNldCwgbGlua19nZXRzZXQsIHRpdGxlX2dldHNldCwK
KyAgICAgIG1ldGFfZ2V0c2V0LCBiYXNlX2dldHNldCwgaXNJbmRleF9nZXRzZXQsIHN0eWxlX2dl
dHNldCwgYm9keV9nZXRzZXQsIGZvcm1fZ2V0c2V0LAorICAgICAgc2VsZWN0X2dldHNldCwgb3B0
R3JvdXBfZ2V0c2V0LCBvcHRpb25fZ2V0c2V0LCBpbnB1dF9nZXRzZXQsIHRleHRBcmVhX2dldHNl
dCwKKyAgICAgIGJ1dHRvbl9nZXRzZXQsIGxhYmVsX2dldHNldCwgZmllbGRTZXRfZ2V0c2V0LCBs
ZWdlbmRfZ2V0c2V0LCB1bF9nZXRzZXQsIG9sX2dldHNldCwKKyAgICAgIGRsX2dldHNldCwgZGly
X2dldHNldCwgbWVudV9nZXRzZXQsIGxpX2dldHNldCwgZGl2X2dldHNldCwgcF9nZXRzZXQsIGhl
YWRpbmdfZ2V0c2V0LAorICAgICAgYmxvY2tRdW90ZV9nZXRzZXQsIHFfZ2V0c2V0LCBwcmVfZ2V0
c2V0LCBicl9nZXRzZXQsIGJhc2VGb250X2dldHNldCwgZm9udF9nZXRzZXQsCisgICAgICBocl9n
ZXRzZXQsIG1vZF9nZXRzZXQsIGFfZ2V0c2V0LCBjYW52YXNfZ2V0c2V0LCBpbWdfZ2V0c2V0LCBv
YmplY3RfZ2V0c2V0LCBwYXJhbV9nZXRzZXQsCisgICAgICBhcHBsZXRfZ2V0c2V0LCBtYXBfZ2V0
c2V0LCBhcmVhX2dldHNldCwgc2NyaXB0X2dldHNldCwgdGFibGVfZ2V0c2V0LAorICAgICAgY2Fw
dGlvbl9nZXRzZXQsIGNvbF9nZXRzZXQsIHRhYmxlc2VjdGlvbl9nZXRzZXQsIHRyX2dldHNldCwK
KyAgICAgIHRhYmxlY2VsbF9nZXRzZXQsIGZyYW1lU2V0X2dldHNldCwgZnJhbWVfZ2V0c2V0LCBp
RnJhbWVfZ2V0c2V0LCBtYXJxdWVlX2dldHNldDsKKworICAgIFZhbHVlIGh0bWxHZXR0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGh0bWxTZXR0ZXIoRXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpE
T01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgaGVhZEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGlu
dCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgaGVhZFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsK
KyAgICBWYWx1ZSBsaW5rR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsK
KyAgICB2b2lkICBsaW5rU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBW
YWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIHRpdGxl
R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICB0aXRs
ZVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBj
b25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBtZXRhR2V0dGVyKEV4ZWNTdGF0
ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBtZXRhU2V0dGVyKEV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3Ry
aW5nJiBzdHIpOworICAgIFZhbHVlIGJhc2VHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0OworICAgIHZvaWQgIGJhc2VTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAg
VmFsdWUgaXNJbmRleEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7Cisg
ICAgdm9pZCAgaXNJbmRleFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3Qg
VmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBzdHls
ZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgc3R5
bGVTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwg
Y29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgYm9keUdldHRlcihFeGVjU3Rh
dGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgYm9keVNldHRlcihFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0
cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBmb3JtR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRv
a2VuKSBjb25zdDsKKyAgICB2b2lkICBmb3JtU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAg
IFZhbHVlIHNlbGVjdEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7Cisg
ICAgdm9pZCAgc2VsZWN0U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBW
YWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIG9wdEdy
b3VwR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBv
cHRHcm91cFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZh
bHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBvcHRpb25HZXR0ZXIo
RXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIG9wdGlvblNldHRl
cihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBE
T006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBpbnB1dEdldHRlcihFeGVjU3RhdGUqIGV4
ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgaW5wdXRTZXR0ZXIoRXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcm
IHN0cik7CisgICAgVmFsdWUgdGV4dEFyZWFHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0OworICAgIHZvaWQgIHRleHRBcmVhU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOwor
ICAgIFZhbHVlIGJ1dHRvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7
CisgICAgdm9pZCAgYnV0dG9uU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25z
dCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIGxh
YmVsR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBs
YWJlbFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVl
LCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBmaWVsZFNldEdldHRlcihF
eGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgZmllbGRTZXRTZXR0
ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3Qg
RE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgbGVnZW5kR2V0dGVyKEV4ZWNTdGF0ZSog
ZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBsZWdlbmRTZXR0ZXIoRXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJp
bmcmIHN0cik7CisgICAgVmFsdWUgdUxpc3RHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0OworICAgIHZvaWQgIHVMaXN0U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAg
IFZhbHVlIG9MaXN0R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAg
ICB2b2lkICBvTGlzdFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFs
dWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBkTGlzdEdl
dHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgZExpc3RT
ZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29u
c3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgZGlyR2V0dGVyKEV4ZWNTdGF0ZSog
ZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBkaXJTZXR0ZXIoRXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcm
IHN0cik7CisgICAgVmFsdWUgbWVudUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikg
Y29uc3Q7CisgICAgdm9pZCAgbWVudVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwg
Y29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1
ZSBsaUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAg
bGlTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwg
Y29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgZGl2R2V0dGVyKEV4ZWNTdGF0
ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBkaXZTZXR0ZXIoRXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJp
bmcmIHN0cik7CisgICAgVmFsdWUgcGFyYWdyYXBoR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50
IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBwYXJhZ3JhcGhTZXR0ZXIoRXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0
cik7CisgICAgVmFsdWUgaGVhZGluZ0dldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikg
Y29uc3Q7CisgICAgdm9pZCAgaGVhZGluZ1NldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
biwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBW
YWx1ZSBibG9ja1F1b3RlR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsK
KyAgICB2b2lkICBibG9ja1F1b3RlU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBj
b25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVl
IHF1b3RlR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lk
ICBxdW90ZVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZh
bHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBwcmVHZXR0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIHByZVNldHRlcihFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRP
TVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBickdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0
b2tlbikgY29uc3Q7CisgICAgdm9pZCAgYnJTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAg
VmFsdWUgYmFzZUZvbnRHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Owor
ICAgIHZvaWQgIGJhc2VGb250U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25z
dCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIGZv
bnRHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGZv
bnRTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwg
Y29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgaHJHZXR0ZXIoRXhlY1N0YXRl
KiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGhyU2V0dGVyKEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5n
JiBzdHIpOworICAgIFZhbHVlIG1vZEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikg
Y29uc3Q7CisgICAgdm9pZCAgbW9kU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBj
b25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVl
IGFuY2hvckdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9p
ZCAgYW5jaG9yU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYg
dmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIGltYWdlR2V0dGVy
KEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBpbWFnZVNldHRl
cihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBE
T006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBvYmplY3RHZXR0ZXIoRXhlY1N0YXRlKiBl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIG9iamVjdFNldHRlcihFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmlu
ZyYgc3RyKTsKKyAgICBWYWx1ZSBwYXJhbUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tl
bikgY29uc3Q7CisgICAgdm9pZCAgcGFyYW1TZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAg
VmFsdWUgYXBwbGV0R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAg
ICB2b2lkICBhcHBsZXRTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZh
bHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgbWFwR2V0
dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBtYXBTZXR0
ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3Qg
RE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgYXJlYUdldHRlcihFeGVjU3RhdGUqIGV4
ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgYXJlYVNldHRlcihFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYg
c3RyKTsKKyAgICBWYWx1ZSBzY3JpcHRHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4p
IGNvbnN0OworICAgIHZvaWQgIHNjcmlwdFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
biwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBW
YWx1ZSB0YWJsZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAg
dm9pZCAgdGFibGVTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVl
JiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgdGFibGVDYXB0
aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICB0
YWJsZUNhcHRpb25TZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVl
JiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgdGFibGVDb2xH
ZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIHRhYmxl
Q29sU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUs
IGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIHRhYmxlU2VjdGlvbkdldHRl
cihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgdGFibGVTZWN0
aW9uU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUs
IGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIHRhYmxlUm93R2V0dGVyKEV4
ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICB0YWJsZVJvd1NldHRl
cihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBE
T006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSB0YWJsZUNlbGxHZXR0ZXIoRXhlY1N0YXRl
KiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIHRhYmxlQ2VsbFNldHRlcihFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRP
TVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBmcmFtZVNldEdldHRlcihFeGVjU3RhdGUqIGV4ZWMs
IGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgZnJhbWVTZXRTZXR0ZXIoRXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcm
IHN0cik7CisgICAgVmFsdWUgZnJhbWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4p
IGNvbnN0OworICAgIHZvaWQgIGZyYW1lU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
LCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZh
bHVlIGlGcmFtZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAg
dm9pZCAgaUZyYW1lU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1
ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIG1hcnF1ZWVH
ZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIG1hcnF1
ZWVTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwg
Y29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisKICAgICBlbnVtIHsgSHRtbFZlcnNpb24sIEhl
YWRQcm9maWxlLCBMaW5rSHJlZiwgTGlua1JlbCwgTGlua01lZGlhLAogICAgICAgICAgICBMaW5r
Q2hhcnNldCwgTGlua0Rpc2FibGVkLCBMaW5rSHJlZkxhbmcsIExpbmtSZXYsIExpbmtUYXJnZXQs
IExpbmtUeXBlLAogICAgICAgICAgICBMaW5rU2hlZXQsIFRpdGxlVGV4dCwgTWV0YU5hbWUsIE1l
dGFIdHRwRXF1aXYsIE1ldGFDb250ZW50LCBNZXRhU2NoZW1lLApJbmRleDoga2h0bWwvZWNtYS9r
anNfd2luZG93LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRt
bC9lY21hL2tqc193aW5kb3cuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE2MQpkaWZmIC11
IC1wIC1yMS4xNjEga2h0bWwvZWNtYS9ranNfd2luZG93LmNwcAotLS0ga2h0bWwvZWNtYS9ranNf
d2luZG93LmNwcAkyMiBKdW4gMjAwNSAwMDo0ODo0NCAtMDAwMAkxLjE2MQorKysga2h0bWwvZWNt
YS9ranNfd2luZG93LmNwcAkyMyBKdW4gMjAwNSAyMTo1MjoyNCAtMDAwMApAQCAtNjgsNyArNjgs
NiBAQAogI2luY2x1ZGUgImh0bWwvaHRtbF9kb2N1bWVudGltcGwuaCIKICNpbmNsdWRlICJjc3Mv
Y3NzX3J1bGVpbXBsLmgiCiAjaW5jbHVkZSAiY3NzL2Nzc19zdHlsZXNoZWV0aW1wbC5oIgotI2lu
Y2x1ZGUgIm1pc2MvaHRtbHRhZ3MuaCIKIAogLy8gTXVzdCBpbmNsdWRlIDxjbWF0aD4gaW5zdGVh
ZCBvZiA8bWF0aC5oPiBiZWNhdXNlIG9mIGEgYnVnIGluIHRoZQogLy8gZ2NjIDMuMyBsaWJyYXJ5
IHZlcnNpb24gb2YgPG1hdGguaD4gd2hlcmUgaWYgeW91IGluY2x1ZGUgYm90aApJbmRleDoga2h0
bWwvZWRpdGluZy9hcHBseV9zdHlsZV9jb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL2FwcGx5X3N0eWxlX2NvbW1hbmQuY3BwLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjIKZGlmZiAtdSAtcCAtcjEuMiBraHRtbC9lZGl0aW5nL2Fw
cGx5X3N0eWxlX2NvbW1hbmQuY3BwCi0tLSBraHRtbC9lZGl0aW5nL2FwcGx5X3N0eWxlX2NvbW1h
bmQuY3BwCTI0IE1heSAyMDA1IDA3OjIxOjQ3IC0wMDAwCTEuMgorKysga2h0bWwvZWRpdGluZy9h
cHBseV9zdHlsZV9jb21tYW5kLmNwcAkyMyBKdW4gMjAwNSAyMTo1MjoyNSAtMDAwMApAQCAtMzMs
NyArMzMsNyBAQAogI2luY2x1ZGUgImNzcy9jc3Nwcm9wZXJ0aWVzLmgiCiAjaW5jbHVkZSAiZG9t
L2RvbV9zdHJpbmcuaCIKICNpbmNsdWRlICJodG1sL2h0bWxfZWxlbWVudGltcGwuaCIKLSNpbmNs
dWRlICJtaXNjL2h0bWx0YWdzLmgiCisjaW5jbHVkZSAiaHRtbG5hbWVzLmgiCiAjaW5jbHVkZSAi
bWlzYy9odG1sYXR0cnMuaCIKICNpbmNsdWRlICJyZW5kZXJpbmcvcmVuZGVyX29iamVjdC5oIgog
I2luY2x1ZGUgInhtbC9kb21fZG9jaW1wbC5oIgpAQCAtNjUsNiArNjUsNyBAQCB1c2luZyBET006
Ok5vZGVJbXBsOwogdXNpbmcgRE9NOjpQb3NpdGlvbjsKIHVzaW5nIERPTTo6UmFuZ2VJbXBsOwog
dXNpbmcgRE9NOjpUZXh0SW1wbDsKK3VzaW5nIERPTTo6SFRNTE5hbWVzOwogCiBuYW1lc3BhY2Ug
a2h0bWwgewogCkBAIC0yNDksMTIgKzI1MCwxMiBAQCBib29sIGlzU3R5bGVTcGFuKGNvbnN0IE5v
ZGVJbXBsICpub2RlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBjb25zdCBIVE1MRWxl
bWVudEltcGwgKmVsZW0gPSBzdGF0aWNfY2FzdDxjb25zdCBIVE1MRWxlbWVudEltcGwgKj4obm9k
ZSk7Ci0gICAgcmV0dXJuIGVsZW0tPmlkKCkgPT0gSURfU1BBTiAmJiBlbGVtLT5nZXRBdHRyaWJ1
dGUoQVRUUl9DTEFTUykgPT0gc3R5bGVTcGFuQ2xhc3NTdHJpbmcoKTsKKyAgICByZXR1cm4gZWxl
bS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6c3BhbigpKSAmJiBlbGVtLT5nZXRBdHRyaWJ1dGUo
QVRUUl9DTEFTUykgPT0gc3R5bGVTcGFuQ2xhc3NTdHJpbmcoKTsKIH0KIAogc3RhdGljIGJvb2wg
aXNFbXB0eVN0eWxlU3Bhbihjb25zdCBOb2RlSW1wbCAqbm9kZSkKIHsKLSAgICBpZiAoIW5vZGUg
fHwgIW5vZGUtPmlzSFRNTEVsZW1lbnQoKSB8fCBub2RlLT5pZCgpICE9IElEX1NQQU4pCisgICAg
aWYgKCFub2RlIHx8ICFub2RlLT5pc0hUTUxFbGVtZW50KCkgfHwgIW5vZGUtPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjpzcGFuKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBjb25zdCBI
VE1MRWxlbWVudEltcGwgKmVsZW0gPSBzdGF0aWNfY2FzdDxjb25zdCBIVE1MRWxlbWVudEltcGwg
Kj4obm9kZSk7CkBAIC0yNjQsNyArMjY1LDcgQEAgc3RhdGljIGJvb2wgaXNFbXB0eVN0eWxlU3Bh
bihjb25zdCBOb2RlSQogCiBzdGF0aWMgYm9vbCBpc0VtcHR5Rm9udFRhZyhjb25zdCBOb2RlSW1w
bCAqbm9kZSkKIHsKLSAgICBpZiAoIW5vZGUgfHwgbm9kZS0+aWQoKSAhPSBJRF9GT05UKQorICAg
IGlmICghbm9kZSB8fCAhbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZvbnQoKSkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIGNvbnN0IEVsZW1lbnRJbXBsICplbGVtID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgRWxlbWVudEltcGwgKj4obm9kZSk7CkBAIC01ODYsNyArNTg3LDcgQEAgdm9p
ZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJbmxpbmVTdHlsZQogICAgICAgICAgICAgICAgICAg
ICAvLyB0aGUgY3VycmVudCBncm91cC4KICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUgPT0g
ZW5kLm5vZGUoKSB8fCAKICAgICAgICAgICAgICAgICAgICAgICAgIHJ1blN0YXJ0LT5wYXJlbnRO
b2RlKCkgIT0gbmV4dC0+cGFyZW50Tm9kZSgpIHx8IAotICAgICAgICAgICAgICAgICAgICAgICAg
KG5leHQtPmlzSFRNTEVsZW1lbnQoKSAmJiBuZXh0LT5pZCgpICE9IElEX0JSKSB8fCAKKyAgICAg
ICAgICAgICAgICAgICAgICAgICFuZXh0LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YnIoKSkgfHwg
CiAgICAgICAgICAgICAgICAgICAgICAgICAobmV4dC0+cmVuZGVyZXIoKSAmJiAhbmV4dC0+cmVu
ZGVyZXIoKS0+aXNJbmxpbmUoKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICAgICAgbm9kZSA9IG5leHQ7CkBAIC02MTEsMTEgKzYxMiwxMSBAQCBib29s
IEFwcGx5U3R5bGVDb21tYW5kOjppc0hUTUxTdHlsZU5vZGUoCiAgICAgZm9yIChRVmFsdWVMaXN0
Q29uc3RJdGVyYXRvcjxDU1NQcm9wZXJ0eT4gaXQgPSBzdHlsZS0+dmFsdWVzSXRlcmF0b3IoKTsg
aXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIHN3aXRjaCAoKCppdCkuaWQoKSkgewogICAgICAg
ICAgICAgY2FzZSBDU1NfUFJPUF9GT05UX1dFSUdIVDoKLSAgICAgICAgICAgICAgICBpZiAoZWxl
bS0+aWQoKSA9PSBJRF9CKQorICAgICAgICAgICAgICAgIGlmIChlbGVtLT5oYXNMb2NhbE5hbWUo
SFRNTE5hbWVzOjpiKCkpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQ1NTX1BST1BfRk9OVF9TVFlMRToK
LSAgICAgICAgICAgICAgICBpZiAoZWxlbS0+aWQoKSA9PSBJRF9JKQorICAgICAgICAgICAgICAg
IGlmIChlbGVtLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjppKCkpKQogICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KQEAgLTYzOCw3ICs2MzksNyBAQCB2
b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVIVE1MRm9udFN0CiAgICAgQVNTRVJUKHN0eWxl
KTsKICAgICBBU1NFUlQoZWxlbSk7CiAKLSAgICBpZiAoZWxlbS0+aWQoKSAhPSBJRF9GT05UKQor
ICAgIGlmICghZWxlbS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6Zm9udCgpKSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgaW50IGV4Y2VwdGlvbkNvZGUgPSAwOwpAQCAtMTA0Nyw3ICsxMDQ4LDcg
QEAgc3RhdGljIGJvb2wgYXJlSWRlbnRpY2FsRWxlbWVudHMoTm9kZUltcAogICAgIEVsZW1lbnRJ
bXBsICpmaXJzdEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50SW1wbCAqPihmaXJzdCk7CiAg
ICAgRWxlbWVudEltcGwgKnNlY29uZEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50SW1wbCAq
PihzZWNvbmQpOwogICAgIAotICAgIGlmIChmaXJzdEVsZW1lbnQtPmlkKCkgIT0gc2Vjb25kRWxl
bWVudC0+aWQoKSkKKyAgICBpZiAoZmlyc3RFbGVtZW50LT50YWdOYW1lKCkgIT0gc2Vjb25kRWxl
bWVudC0+dGFnTmFtZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBOYW1lZEF0dHJN
YXBJbXBsICpmaXJzdE1hcCA9IGZpcnN0RWxlbWVudC0+YXR0cmlidXRlcygpOwpAQCAtMTEyOSw3
ICsxMTMwLDcgQEAgYm9vbCBBcHBseVN0eWxlQ29tbWFuZDo6bWVyZ2VFbmRXaXRoTmV4dAogICAg
ICAgICBlbmRPZmZzZXQgPSBwYXJlbnRMYXN0T2Zmc2V0OwogICAgIH0KIAotICAgIGlmICghZW5k
Tm9kZS0+aXNFbGVtZW50Tm9kZSgpIHx8IGVuZE5vZGUtPmlkKCkgPT0gSURfQlIpCisgICAgaWYg
KCFlbmROb2RlLT5pc0VsZW1lbnROb2RlKCkgfHwgZW5kTm9kZS0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OmJyKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBOb2RlSW1wbCAqbmV4dFNp
YmxpbmcgPSBlbmROb2RlLT5uZXh0U2libGluZygpOwpJbmRleDoga2h0bWwvZWRpdGluZy9icmVh
a19ibG9ja3F1b3RlX2NvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9X
ZWJDb3JlL2todG1sL2VkaXRpbmcvYnJlYWtfYmxvY2txdW90ZV9jb21tYW5kLmNwcCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXUgLXAgLXIxLjEga2h0bWwvZWRpdGluZy9icmVha19i
bG9ja3F1b3RlX2NvbW1hbmQuY3BwCi0tLSBraHRtbC9lZGl0aW5nL2JyZWFrX2Jsb2NrcXVvdGVf
Y29tbWFuZC5jcHAJMjQgTWF5IDIwMDUgMDc6MjE6NDcgLTAwMDAJMS4xCisrKyBraHRtbC9lZGl0
aW5nL2JyZWFrX2Jsb2NrcXVvdGVfY29tbWFuZC5jcHAJMjMgSnVuIDIwMDUgMjE6NTI6MjUgLTAw
MDAKQEAgLTI4LDcgKzI4LDcgQEAKICNpbmNsdWRlICJodG1sZWRpdGluZy5oIgogI2luY2x1ZGUg
InZpc2libGVfcG9zaXRpb24uaCIKIAotI2luY2x1ZGUgIm1pc2MvaHRtbHRhZ3MuaCIKKyNpbmNs
dWRlICJodG1sbmFtZXMuaCIKICNpbmNsdWRlICJ4bWwvZG9tX2VsZW1lbnRpbXBsLmgiCiAjaW5j
bHVkZSAieG1sL2RvbV90ZXh0aW1wbC5oIgogCkBAIC00Myw2ICs0Myw3IEBAIHVzaW5nIERPTTo6
RWxlbWVudEltcGw7CiB1c2luZyBET006Ok5vZGVJbXBsOwogdXNpbmcgRE9NOjpQb3NpdGlvbjsK
IHVzaW5nIERPTTo6VGV4dEltcGw7Cit1c2luZyBET006OkhUTUxOYW1lczsKIAogbmFtZXNwYWNl
IGtodG1sIHsKIApAQCAtMTQ2LDcgKzE0Nyw3IEBAIHZvaWQgQnJlYWtCbG9ja3F1b3RlQ29tbWFu
ZDo6ZG9BcHBseSgpCiAgICAgICAgIGJvb2wgc3RhcnRJc0JSID0gZmFsc2U7CiAgICAgICAgIGlm
IChzdGFydE5vZGUgIT0gdG9wQmxvY2txdW90ZSkgewogICAgICAgICAgICAgTm9kZUltcGwgKm4g
PSBzdGFydE5vZGU7Ci0gICAgICAgICAgICBzdGFydElzQlIgPSBuLT5pZCgpID09IElEX0JSOwor
ICAgICAgICAgICAgc3RhcnRJc0JSID0gbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJyKCkpOwog
ICAgICAgICAgICAgaWYgKHN0YXJ0SXNCUikKICAgICAgICAgICAgICAgICBuID0gbi0+bmV4dFNp
YmxpbmcoKTsKICAgICAgICAgICAgIHdoaWxlIChuKSB7CkluZGV4OiBraHRtbC9lZGl0aW5nL2Nv
bXBvc2l0ZV9lZGl0X2NvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9X
ZWJDb3JlL2todG1sL2VkaXRpbmcvY29tcG9zaXRlX2VkaXRfY29tbWFuZC5jcHAsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuMwpkaWZmIC11IC1wIC1yMS4zIGtodG1sL2VkaXRpbmcvY29tcG9zaXRl
X2VkaXRfY29tbWFuZC5jcHAKLS0tIGtodG1sL2VkaXRpbmcvY29tcG9zaXRlX2VkaXRfY29tbWFu
ZC5jcHAJMjQgTWF5IDIwMDUgMDc6MjE6NDcgLTAwMDAJMS4zCisrKyBraHRtbC9lZGl0aW5nL2Nv
bXBvc2l0ZV9lZGl0X2NvbW1hbmQuY3BwCTIzIEp1biAyMDA1IDIxOjUyOjI2IC0wMDAwCkBAIC00
Nyw3ICs0Nyw3IEBACiAjaW5jbHVkZSAid3JhcF9jb250ZW50c19pbl9kdW1teV9zcGFuX2NvbW1h
bmQuaCIKIAogI2luY2x1ZGUgIm1pc2MvaHRtbGF0dHJzLmgiCi0jaW5jbHVkZSAibWlzYy9odG1s
dGFncy5oIgorI2luY2x1ZGUgImh0bWxuYW1lcy5oIgogI2luY2x1ZGUgInJlbmRlcmluZy9yZW5k
ZXJfdGV4dC5oIgogI2luY2x1ZGUgInhtbC9kb20yX3JhbmdlaW1wbC5oIgogI2luY2x1ZGUgInht
bC9kb21fdGV4dGltcGwuaCIKQEAgLTY3LDYgKzY3LDcgQEAgdXNpbmcgRE9NOjpOb2RlSW1wbDsK
IHVzaW5nIERPTTo6UG9zaXRpb247CiB1c2luZyBET006OlJhbmdlSW1wbDsKIHVzaW5nIERPTTo6
VGV4dEltcGw7Cit1c2luZyBET006OkhUTUxOYW1lczsKIAogbmFtZXNwYWNlIGtodG1sIHsKIApA
QCAtMTI3LDE0ICsxMjgsMTQgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6aW5zZXJ0UGFy
YWdyYQogCiB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjppbnNlcnROb2RlQmVmb3JlKE5vZGVJ
bXBsICppbnNlcnRDaGlsZCwgTm9kZUltcGwgKnJlZkNoaWxkKQogewotICAgIEFTU0VSVChyZWZD
aGlsZC0+aWQoKSAhPSBJRF9CT0RZKTsKKyAgICBBU1NFUlQoIXJlZkNoaWxkLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6Ym9keSgpKSk7CiAgICAgRWRpdENvbW1hbmRQdHIgY21kKG5ldyBJbnNlcnRO
b2RlQmVmb3JlQ29tbWFuZChkb2N1bWVudCgpLCBpbnNlcnRDaGlsZCwgcmVmQ2hpbGQpKTsKICAg
ICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShjbWQpOwogfQogCiB2b2lkIENvbXBvc2l0ZUVkaXRD
b21tYW5kOjppbnNlcnROb2RlQWZ0ZXIoTm9kZUltcGwgKmluc2VydENoaWxkLCBOb2RlSW1wbCAq
cmVmQ2hpbGQpCiB7Ci0gICAgQVNTRVJUKHJlZkNoaWxkLT5pZCgpICE9IElEX0JPRFkpOworICAg
IEFTU0VSVCghcmVmQ2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpib2R5KCkpKTsKICAgICBp
ZiAocmVmQ2hpbGQtPnBhcmVudE5vZGUoKS0+bGFzdENoaWxkKCkgPT0gcmVmQ2hpbGQpIHsKICAg
ICAgICAgYXBwZW5kTm9kZShpbnNlcnRDaGlsZCwgcmVmQ2hpbGQtPnBhcmVudE5vZGUoKSk7CiAg
ICAgfQpAQCAtNTQ1LDcgKzU0Niw3IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6Om1vdmVQ
YXJhZ3JhcGgKICAgICAvLyAgICAgICBhZGRpdGlvbmFsIGxldmVsIG9mIHF1b3RpbmcuCiAgICAg
Tm9kZUltcGwgKnN0YXJ0QmxvY2sgPSBwYXJhZ3JhcGhTdGFydC5ub2RlKCktPmVuY2xvc2luZ0Js
b2NrRmxvd0VsZW1lbnQoKTsKICAgICBOb2RlSW1wbCAqbmV3QmxvY2sgPSAwOwotICAgIGlmIChz
dGFydEJsb2NrLT5pZCgpID09IElEX0JPRFkgfHwgKGlzTWFpbEJsb2NrcXVvdGUoc3RhcnRCbG9j
aykgJiYgcGFyYWdyYXBoU3RhcnQubm9kZSgpICE9IHN0YXJ0QmxvY2spKQorICAgIGlmIChzdGFy
dEJsb2NrLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Ym9keSgpKSB8fCAoaXNNYWlsQmxvY2txdW90
ZShzdGFydEJsb2NrKSAmJiBwYXJhZ3JhcGhTdGFydC5ub2RlKCkgIT0gc3RhcnRCbG9jaykpCiAg
ICAgICAgIG5ld0Jsb2NrID0gY3JlYXRlRGVmYXVsdFBhcmFncmFwaEVsZW1lbnQoZG9jdW1lbnQo
KSk7CiAgICAgZWxzZQogICAgICAgICBuZXdCbG9jayA9IHN0YXJ0QmxvY2stPmNsb25lTm9kZShm
YWxzZSk7CkBAIC01NTUsMTAgKzU1NiwxMCBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpt
b3ZlUGFyYWdyYXBoCiAgICAgICAgIG1vdmVOb2RlID0gbW92ZU5vZGUtPnRyYXZlcnNlTmV4dE5v
ZGUoKTsKICAgICBOb2RlSW1wbCAqZW5kTm9kZSA9IHBhcmFncmFwaEVuZC5ub2RlKCk7CiAKLSAg
ICBpZiAocGFyYWdyYXBoU3RhcnQubm9kZSgpLT5pZCgpID09IElEX0JPRFkpIHsKKyAgICBpZiAo
cGFyYWdyYXBoU3RhcnQubm9kZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Ym9keSgpKSkgewog
ICAgICAgICBpbnNlcnROb2RlQXQobmV3QmxvY2ssIHBhcmFncmFwaFN0YXJ0Lm5vZGUoKSwgMCk7
CiAgICAgfQotICAgIGVsc2UgaWYgKHBhcmFncmFwaFN0YXJ0Lm5vZGUoKS0+aWQoKSA9PSBJRF9C
UikgeworICAgIGVsc2UgaWYgKHBhcmFncmFwaFN0YXJ0Lm5vZGUoKS0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OmJyKCkpKSB7CiAgICAgICAgIGluc2VydE5vZGVBZnRlcihuZXdCbG9jaywgcGFyYWdy
YXBoU3RhcnQubm9kZSgpKTsKICAgICB9CiAgICAgZWxzZSB7CkluZGV4OiBraHRtbC9lZGl0aW5n
L2RlbGV0ZV9zZWxlY3Rpb25fY29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L1dlYkNvcmUva2h0bWwvZWRpdGluZy9kZWxldGVfc2VsZWN0aW9uX2NvbW1hbmQuY3BwLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjIKZGlmZiAtdSAtcCAtcjEuMiBraHRtbC9lZGl0aW5nL2Rl
bGV0ZV9zZWxlY3Rpb25fY29tbWFuZC5jcHAKLS0tIGtodG1sL2VkaXRpbmcvZGVsZXRlX3NlbGVj
dGlvbl9jb21tYW5kLmNwcAkyNCBNYXkgMjAwNSAwNzoyMTo0NyAtMDAwMAkxLjIKKysrIGtodG1s
L2VkaXRpbmcvZGVsZXRlX3NlbGVjdGlvbl9jb21tYW5kLmNwcAkyMyBKdW4gMjAwNSAyMTo1Mjoy
NiAtMDAwMApAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgImNzcy9jc3NfY29tcHV0ZWRzdHls
ZS5oIgogI2luY2x1ZGUgImh0bWxlZGl0aW5nLmgiCiAjaW5jbHVkZSAia2h0bWxfcGFydC5oIgot
I2luY2x1ZGUgIm1pc2MvaHRtbHRhZ3MuaCIKKyNpbmNsdWRlICJodG1sbmFtZXMuaCIKICNpbmNs
dWRlICJyZW5kZXJpbmcvcmVuZGVyX2xpbmUuaCIKICNpbmNsdWRlICJyZW5kZXJpbmcvcmVuZGVy
X29iamVjdC5oIgogI2luY2x1ZGUgInZpc2libGVfdGV4dC5oIgpAQCAtNTMsNiArNTMsNyBAQCB1
c2luZyBET006Ok5vZGVJbXBsOwogdXNpbmcgRE9NOjpQb3NpdGlvbjsKIHVzaW5nIERPTTo6UmFu
Z2VJbXBsOwogdXNpbmcgRE9NOjpUZXh0SW1wbDsKK3VzaW5nIERPTTo6SFRNTE5hbWVzOwogCiBu
YW1lc3BhY2Uga2h0bWwgewogCkBAIC02MSw5ICs2MiwxMyBAQCBzdGF0aWMgYm9vbCBpc0xpc3RT
dHJ1Y3R1cmVOb2RlKGNvbnN0IE5vCiAgICAgLy8gRklYTUU6IElycml0YXRpbmcgdGhhdCB3ZSBj
YW4gZ2V0IGF3YXkgd2l0aCBqdXN0IGdvaW5nIGF0IHRoZSByZW5kZXIgdHJlZSBmb3IgaXNUYWJs
ZVN0cnVjdHVyZU5vZGUsCiAgICAgLy8gYnV0IGhlcmUgd2UgYWxzbyBoYXZlIHRvIHBlZWsgYXQg
dGhlIHR5cGUgb2YgRE9NIG5vZGU/CiAgICAgUmVuZGVyT2JqZWN0ICpyID0gbm9kZS0+cmVuZGVy
ZXIoKTsKLSAgICBOb2RlSW1wbDo6SWQgbm9kZUlEID0gbm9kZS0+aWQoKTsKICAgICByZXR1cm4g
KHIgJiYgci0+aXNMaXN0SXRlbSgpKQotICAgICAgICB8fCAobm9kZUlEID09IElEX09MIHx8IG5v
ZGVJRCA9PSBJRF9VTCB8fCBub2RlSUQgPT0gSURfREQgfHwgbm9kZUlEID09IElEX0RUIHx8IG5v
ZGVJRCA9PSBJRF9ESVIgfHwgbm9kZUlEID09IElEX01FTlUpOworICAgICAgICB8fCBub2RlLT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6b2woKSkKKyAgICAgICAgfHwgbm9kZS0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OnVsKCkpCisgICAgICAgIHx8IG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpk
ZCgpKQorICAgICAgICB8fCBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZHQoKSkKKyAgICAg
ICAgfHwgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmRpcigpKQorICAgICAgICB8fCBub2Rl
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6bWVudSgpKTsKIH0KIAogc3RhdGljIGludCBtYXhEZWVw
T2Zmc2V0KE5vZGVJbXBsICpuKQpAQCAtMjc3LDggKzI4Miw4IEBAIHZvaWQgRGVsZXRlU2VsZWN0
aW9uQ29tbWFuZDo6c2F2ZVR5cGluZ1MKIGJvb2wgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6aGFu
ZGxlU3BlY2lhbENhc2VCUkRlbGV0ZSgpCiB7CiAgICAgLy8gQ2hlY2sgZm9yIHNwZWNpYWwtY2Fz
ZSB3aGVyZSB0aGUgc2VsZWN0aW9uIGNvbnRhaW5zIG9ubHkgYSBCUiBvbiBhIGxpbmUgYnkgaXRz
ZWxmIGFmdGVyIGFub3RoZXIgQlIuCi0gICAgYm9vbCB1cHN0cmVhbVN0YXJ0SXNCUiA9IG1fc3Rh
cnROb2RlLT5pZCgpID09IElEX0JSOwotICAgIGJvb2wgZG93bnN0cmVhbVN0YXJ0SXNCUiA9IG1f
ZG93bnN0cmVhbVN0YXJ0Lm5vZGUoKS0+aWQoKSA9PSBJRF9CUjsKKyAgICBib29sIHVwc3RyZWFt
U3RhcnRJc0JSID0gbV9zdGFydE5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpicigpKTsKKyAg
ICBib29sIGRvd25zdHJlYW1TdGFydElzQlIgPSBtX2Rvd25zdHJlYW1TdGFydC5ub2RlKCktPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjpicigpKTsKICAgICBib29sIGlzQlJPbkxpbmVCeUl0c2VsZiA9
IHVwc3RyZWFtU3RhcnRJc0JSICYmIGRvd25zdHJlYW1TdGFydElzQlIgJiYgbV9kb3duc3RyZWFt
U3RhcnQubm9kZSgpID09IG1fdXBzdHJlYW1FbmQubm9kZSgpOwogICAgIGlmIChpc0JST25MaW5l
QnlJdHNlbGYpIHsKICAgICAgICAgcmVtb3ZlTm9kZShtX2Rvd25zdHJlYW1TdGFydC5ub2RlKCkp
OwpAQCAtMzI2LDExICszMzEsMTEgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpoYW5k
bGVHZW5lcgogICAgIC8vIGVuZCBvZiBhIGJsb2NrIG90aGVyIHRoYW4gdGhlIGJsb2NrIGNvbnRh
aW5pbmcgdGhlIHNlbGVjdGlvbiBzdGFydCwgdGhlbiBkbyBub3QgZGVsZXRlIHRoZSAKICAgICAv
LyBzdGFydCBibG9jaywgb3RoZXJ3aXNlIGRlbGV0ZSB0aGUgc3RhcnQgYmxvY2suCiAgICAgLy8g
QSBzaW1pbGFyIGNhc2UgaXMgcHJvdmlkZWQgdG8gY292ZXIgc2VsZWN0aW9ucyBzdGFydGluZyBp
biBCUiBlbGVtZW50cy4KLSAgICBpZiAoc3RhcnRPZmZzZXQgPT0gMSAmJiBtX3N0YXJ0Tm9kZSAm
JiBtX3N0YXJ0Tm9kZS0+aWQoKSA9PSBJRF9CUikgeworICAgIGlmIChzdGFydE9mZnNldCA9PSAx
ICYmIG1fc3RhcnROb2RlICYmIG1fc3RhcnROb2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YnIo
KSkpIHsKICAgICAgICAgc2V0U3RhcnROb2RlKG1fc3RhcnROb2RlLT50cmF2ZXJzZU5leHROb2Rl
KCkpOwogICAgICAgICBzdGFydE9mZnNldCA9IDA7CiAgICAgfQotICAgIGlmIChtX3N0YXJ0Qmxv
Y2sgIT0gbV9lbmRCbG9jayAmJiBzdGFydE9mZnNldCA9PSAwICYmIG1fc3RhcnROb2RlICYmIG1f
c3RhcnROb2RlLT5pZCgpID09IElEX0JSICYmIGVuZEF0RW5kT2ZCbG9jaykgeworICAgIGlmICht
X3N0YXJ0QmxvY2sgIT0gbV9lbmRCbG9jayAmJiBzdGFydE9mZnNldCA9PSAwICYmIG1fc3RhcnRO
b2RlICYmIG1fc3RhcnROb2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YnIoKSkgJiYgZW5kQXRF
bmRPZkJsb2NrKSB7CiAgICAgICAgIC8vIERvbid0IGRlbGV0ZSB0aGUgQlIgZWxlbWVudAogICAg
ICAgICBzZXRTdGFydE5vZGUobV9zdGFydE5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKSk7CiAgICAg
fQpAQCAtNTUyLDcgKzU1Nyw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6bW92ZU5v
ZGVzQWYKICAgICAgICAgTm9kZUltcGwgKm1vdmVOb2RlID0gbm9kZTsKICAgICAgICAgbm9kZSA9
IG5vZGUtPm5leHRTaWJsaW5nKCk7CiAgICAgICAgIHJlbW92ZU5vZGUobW92ZU5vZGUpOwotICAg
ICAgICBpZiAobW92ZU5vZGUtPmlkKCkgPT0gSURfQlIgJiYgIW1vdmVOb2RlLT5yZW5kZXJlcigp
KSB7CisgICAgICAgIGlmIChtb3ZlTm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJyKCkpICYm
ICFtb3ZlTm9kZS0+cmVuZGVyZXIoKSkgewogICAgICAgICAgICAgLy8gSnVzdCByZW1vdmUgdGhp
cyBub2RlLCBhbmQgZG9uJ3QgcHV0IGl0IGJhY2suCiAgICAgICAgICAgICAvLyBJZiB0aGUgQlIg
d2FzIG5vdCByZW5kZXJlZCAoc2luY2UgaXQgd2FzIGF0IHRoZSBlbmQgb2YgYSBibG9jaywgZm9y
IGluc3RhbmNlKSwgCiAgICAgICAgICAgICAvLyBwdXR0aW5nIGl0IGJhY2sgaW4gdGhlIGRvY3Vt
ZW50IG1pZ2h0IG1ha2UgaXQgYXBwZWFyLCBhbmQgdGhhdCBpcyBub3QgZGVzaXJhYmxlLgpAQCAt
NTYzLDcgKzU2OCw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6bW92ZU5vZGVzQWYK
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgaW5zZXJ0Tm9kZUFmdGVyKG1vdmVOb2RlLCByZWZO
b2RlKTsKICAgICAgICAgcmVmTm9kZSA9IG1vdmVOb2RlOwotICAgICAgICBpZiAobW92ZU5vZGUt
PmlkKCkgPT0gSURfQlIpCisgICAgICAgIGlmIChtb3ZlTm9kZS0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OmJyKCkpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogCkluZGV4OiBraHRtbC9lZGl0
aW5nL2h0bWxlZGl0aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29y
ZS9raHRtbC9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4y
NDcKZGlmZiAtdSAtcCAtcjEuMjQ3IGtodG1sL2VkaXRpbmcvaHRtbGVkaXRpbmcuY3BwCi0tLSBr
aHRtbC9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAkyNCBNYXkgMjAwNSAwNzoyMTo0NyAtMDAwMAkx
LjI0NworKysga2h0bWwvZWRpdGluZy9odG1sZWRpdGluZy5jcHAJMjMgSnVuIDIwMDUgMjE6NTI6
MjcgLTAwMDAKQEAgLTQyLDcgKzQyLDcgQEAKICNpbmNsdWRlICJodG1sX2ltYWdlaW1wbC5oIgog
I2luY2x1ZGUgImh0bWxfaW50ZXJjaGFuZ2UuaCIKICNpbmNsdWRlICJodG1sYXR0cnMuaCIKLSNp
bmNsdWRlICJodG1sdGFncy5oIgorI2luY2x1ZGUgImh0bWxuYW1lcy5oIgogI2luY2x1ZGUgImto
dG1sX3BhcnQuaCIKICNpbmNsdWRlICJraHRtbF9wYXJ0LmgiCiAjaW5jbHVkZSAia2h0bWx2aWV3
LmgiCkBAIC04MSw2ICs4MSw3IEBAIHVzaW5nIERPTTo6UG9zaXRpb247CiB1c2luZyBET006OlJh
bmdlSW1wbDsKIHVzaW5nIERPTTo6VGV4dEltcGw7CiB1c2luZyBET006OlRyZWVXYWxrZXJJbXBs
OwordXNpbmcgRE9NOjpIVE1MTmFtZXM7CiAKICNpZiBBUFBMRV9DSEFOR0VTCiAjaW5jbHVkZSAi
S1dRQXNzZXJ0aW9ucy5oIgpAQCAtMTMxLDEwICsxMzIsMTAgQEAgYm9vbCBpc1NwZWNpYWxFbGVt
ZW50KE5vZGVJbXBsICpuKQogICAgIGlmICghbi0+aXNIVE1MRWxlbWVudCgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAobi0+aWQoKSA9PSBJRF9BICYmIG4tPmlzTGluaygpKQor
ICAgIGlmIChuLT5pc0xpbmsoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAobi0+
aWQoKSA9PSBJRF9VTCB8fCBuLT5pZCgpID09IElEX09MIHx8IG4tPmlkKCkgPT0gSURfREwpCisg
ICAgaWYgKG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp1bCgpKSB8fCBuLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6b2woKSkgfHwgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmRsKCkpKQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKIAogICAgIFJlbmRlck9iamVjdCAqcmVuZGVyZXIgPSBuLT5yZW5kZXJl
cigpOwpAQCAtMzAzLDcgKzMwNCw3IEBAIE5vZGVJbXBsICpuZWFyZXN0TWFpbEJsb2NrcXVvdGUo
Y29uc3QgTm8KIAogYm9vbCBpc01haWxCbG9ja3F1b3RlKGNvbnN0IE5vZGVJbXBsICpub2RlKQog
ewotICAgIGlmICghbm9kZSB8fCAhbm9kZS0+cmVuZGVyZXIoKSB8fCAhbm9kZS0+aXNFbGVtZW50
Tm9kZSgpICYmIG5vZGUtPmlkKCkgIT0gSURfQkxPQ0tRVU9URSkKKyAgICBpZiAoIW5vZGUgfHwg
IW5vZGUtPnJlbmRlcmVyKCkgfHwgIW5vZGUtPmlzRWxlbWVudE5vZGUoKSAmJiAhbm9kZS0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OmJsb2NrcXVvdGUoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IEVsZW1lbnRJbXBsICo+KG5v
ZGUpLT5nZXRBdHRyaWJ1dGUoInR5cGUiKSA9PSAiY2l0ZSI7CkluZGV4OiBraHRtbC9lZGl0aW5n
L2luc2VydF9saW5lX2JyZWFrX2NvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9XZWJDb3JlL2todG1sL2VkaXRpbmcvaW5zZXJ0X2xpbmVfYnJlYWtfY29tbWFuZC5jcHAs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC11IC1wIC1yMS4xIGtodG1sL2VkaXRpbmcv
aW5zZXJ0X2xpbmVfYnJlYWtfY29tbWFuZC5jcHAKLS0tIGtodG1sL2VkaXRpbmcvaW5zZXJ0X2xp
bmVfYnJlYWtfY29tbWFuZC5jcHAJMjQgTWF5IDIwMDUgMDc6MjE6NDcgLTAwMDAJMS4xCisrKyBr
aHRtbC9lZGl0aW5nL2luc2VydF9saW5lX2JyZWFrX2NvbW1hbmQuY3BwCTIzIEp1biAyMDA1IDIx
OjUyOjI3IC0wMDAwCkBAIC0yOSw3ICsyOSw3IEBACiAjaW5jbHVkZSAidmlzaWJsZV9wb3NpdGlv
bi5oIgogI2luY2x1ZGUgInZpc2libGVfdW5pdHMuaCIKIAotI2luY2x1ZGUgIm1pc2MvaHRtbHRh
Z3MuaCIKKyNpbmNsdWRlICJodG1sbmFtZXMuaCIKICNpbmNsdWRlICJ4bWwvZG9tX2RvY2ltcGwu
aCIKICNpbmNsdWRlICJ4bWwvZG9tX2VsZW1lbnRpbXBsLmgiCiAjaW5jbHVkZSAieG1sL2RvbTJf
cmFuZ2VpbXBsLmgiCkBAIC01MCw2ICs1MCw3IEBAIHVzaW5nIERPTTo6Tm9kZUltcGw7CiB1c2lu
ZyBET006OlBvc2l0aW9uOwogdXNpbmcgRE9NOjpUZXh0SW1wbDsKIHVzaW5nIERPTTo6Q1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb25JbXBsOwordXNpbmcgRE9NOjpIVE1MTmFtZXM7CiAKIG5hbWVz
cGFjZSBraHRtbCB7CiAKQEAgLTExMSwxMyArMTEyLDEzIEBAIHZvaWQgSW5zZXJ0TGluZUJyZWFr
Q29tbWFuZDo6ZG9BcHBseSgpCiAgICAgICAgIC8vIFRoaXMgbWFrZXMgdGhlICJyZWFsIiBCUiB3
ZSB3YW50IHRvIGluc2VydCBhcHBlYXIgaW4gdGhlIHJlbmRlcmluZyB3aXRob3V0IGFueSAKICAg
ICAgICAgLy8gc2lnbmlmaWNhbnQgc2lkZSBlZmZlY3RzIChhbmQgbm8gcmVhbCB3b3JyaWVzIGVp
dGhlciBzaW5jZSB5b3UgY2FuJ3QgYXJyb3cgcGFzdCAKICAgICAgICAgLy8gdGhpcyBleHRyYSBv
bmUuCi0gICAgICAgIGlmIChwb3Mubm9kZSgpLT5pZCgpID09IElEX0JSICYmIHBvcy5vZmZzZXQo
KSA9PSAwKSB7CisgICAgICAgIGlmIChwb3Mubm9kZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
YnIoKSkgJiYgcG9zLm9mZnNldCgpID09IDApIHsKICAgICAgICAgICAgIC8vIEFscmVhZHkgcGxh
Y2VkIGluIGEgdHJhaWxpbmcgQlIuIEluc2VydCAicmVhbCIgQlIgYmVmb3JlIGl0IGFuZCBsZWF2
ZSB0aGUgc2VsZWN0aW9uIGFsb25lLgogICAgICAgICAgICAgaW5zZXJ0Tm9kZUJlZm9yZShub2Rl
VG9JbnNlcnQsIHBvcy5ub2RlKCkpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewogICAgICAg
ICAgICAgTm9kZUltcGwgKm5leHQgPSBwb3Mubm9kZSgpLT50cmF2ZXJzZU5leHROb2RlKCk7Ci0g
ICAgICAgICAgICBib29sIGhhc1RyYWlsaW5nQlIgPSBuZXh0ICYmIG5leHQtPmlkKCkgPT0gSURf
QlIgJiYgcG9zLm5vZGUoKS0+ZW5jbG9zaW5nQmxvY2tGbG93RWxlbWVudCgpID09IG5leHQtPmVu
Y2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQoKTsKKyAgICAgICAgICAgIGJvb2wgaGFzVHJhaWxpbmdC
UiA9IG5leHQgJiYgbmV4dC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJyKCkpICYmIHBvcy5ub2Rl
KCktPmVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQoKSA9PSBuZXh0LT5lbmNsb3NpbmdCbG9ja0Zs
b3dFbGVtZW50KCk7CiAgICAgICAgICAgICBpbnNlcnROb2RlQWZ0ZXJQb3NpdGlvbihub2RlVG9J
bnNlcnQsIHBvcyk7CiAgICAgICAgICAgICBpZiAoaGFzVHJhaWxpbmdCUikgewogICAgICAgICAg
ICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihTZWxlY3Rpb24oUG9zaXRpb24obmV4dCwgMCksIERP
V05TVFJFQU0pKTsKSW5kZXg6IGtodG1sL2VkaXRpbmcvaW5zZXJ0X3BhcmFncmFwaF9zZXBhcmF0
b3JfY29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0
bWwvZWRpdGluZy9pbnNlcnRfcGFyYWdyYXBoX3NlcGFyYXRvcl9jb21tYW5kLmNwcCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXUgLXAgLXIxLjEga2h0bWwvZWRpdGluZy9pbnNlcnRf
cGFyYWdyYXBoX3NlcGFyYXRvcl9jb21tYW5kLmNwcAotLS0ga2h0bWwvZWRpdGluZy9pbnNlcnRf
cGFyYWdyYXBoX3NlcGFyYXRvcl9jb21tYW5kLmNwcAkyNCBNYXkgMjAwNSAwNzoyMTo0NyAtMDAw
MAkxLjEKKysrIGtodG1sL2VkaXRpbmcvaW5zZXJ0X3BhcmFncmFwaF9zZXBhcmF0b3JfY29tbWFu
ZC5jcHAJMjMgSnVuIDIwMDUgMjE6NTI6MjcgLTAwMDAKQEAgLTMxLDcgKzMxLDcgQEAKIAogI2lu
Y2x1ZGUgImNzcy9jc3NfY29tcHV0ZWRzdHlsZS5oIgogI2luY2x1ZGUgImNzcy9jc3NfdmFsdWVp
bXBsLmgiCi0jaW5jbHVkZSAibWlzYy9odG1sdGFncy5oIgorI2luY2x1ZGUgImh0bWxuYW1lcy5o
IgogI2luY2x1ZGUgInhtbC9kb21fZG9jaW1wbC5oIgogI2luY2x1ZGUgInhtbC9kb21fZWxlbWVu
dGltcGwuaCIKICNpbmNsdWRlICJ4bWwvZG9tX3RleHRpbXBsLmgiCkBAIC01MCw2ICs1MCw3IEBA
IHVzaW5nIERPTTo6RWxlbWVudEltcGw7CiB1c2luZyBET006Ok5vZGVJbXBsOwogdXNpbmcgRE9N
OjpQb3NpdGlvbjsKIHVzaW5nIERPTTo6VGV4dEltcGw7Cit1c2luZyBET006OkhUTUxOYW1lczsK
IAogbmFtZXNwYWNlIGtodG1sIHsKIApAQCAtMjEzLDcgKzIxNCw3IEBAIHZvaWQgSW5zZXJ0UGFy
YWdyYXBoU2VwYXJhdG9yQ29tbWFuZDo6ZG8KICAgICAvLyB0aGVuIHRoaXMgPGJyPiB3aWxsIGNv
bGxhcHNlIGF3YXkgd2hlbiB3ZSBhZGQgYSBibG9jayBhZnRlciBpdC4gQWRkIGFuIGV4dHJhIDxi
cj4uCiAgICAgaWYgKCFkb2N1bWVudCgpLT5pblN0cmljdE1vZGUoKSkgewogICAgICAgICBQb3Np
dGlvbiB1cHN0cmVhbVBvcyA9IHBvcy51cHN0cmVhbSgpOwotICAgICAgICBpZiAodXBzdHJlYW1Q
b3Mubm9kZSgpLT5pZCgpID09IElEX0JSKQorICAgICAgICBpZiAodXBzdHJlYW1Qb3Mubm9kZSgp
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YnIoKSkpCiAgICAgICAgICAgICBpbnNlcnROb2RlQWZ0
ZXIoY3JlYXRlQnJlYWtFbGVtZW50KGRvY3VtZW50KCkpLCB1cHN0cmVhbVBvcy5ub2RlKCkpOwog
ICAgIH0KICAgICAKSW5kZXg6IGtodG1sL2VkaXRpbmcvbWFya3VwLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL21hcmt1cC5jcHAsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuMjAKZGlmZiAtdSAtcCAtcjEuMjAga2h0bWwvZWRpdGluZy9tYXJr
dXAuY3BwCi0tLSBraHRtbC9lZGl0aW5nL21hcmt1cC5jcHAJMTAgTWF5IDIwMDUgMDQ6MDM6MzQg
LTAwMDAJMS4yMAorKysga2h0bWwvZWRpdGluZy9tYXJrdXAuY3BwCTIzIEp1biAyMDA1IDIxOjUy
OjI4IC0wMDAwCkBAIC0zNiw3ICszNiw3IEBACiAjaW5jbHVkZSAieG1sL2RvbTJfcmFuZ2VpbXBs
LmgiCiAjaW5jbHVkZSAicmVuZGVyaW5nL3JlbmRlcl90ZXh0LmgiCiAjaW5jbHVkZSAibWlzYy9o
dG1sYXR0cnMuaCIKLSNpbmNsdWRlICJtaXNjL2h0bWx0YWdzLmgiCisjaW5jbHVkZSAiaHRtbG5h
bWVzLmgiCiAjaW5jbHVkZSAiaHRtbC9kdGQuaCIKIAogdXNpbmcgRE9NOjpBdHRyaWJ1dGVJbXBs
OwpAQCAtNDgsOCArNDgsOCBAQCB1c2luZyBET006OkRvY3VtZW50SW1wbDsKIHVzaW5nIERPTTo6
RE9NU3RyaW5nOwogdXNpbmcgRE9NOjpFbGVtZW50SW1wbDsKIHVzaW5nIERPTTo6Rk9SQklEREVO
OwotdXNpbmcgRE9NOjplbmRUYWdSZXF1aXJlbWVudDsKIHVzaW5nIERPTTo6SFRNTEVsZW1lbnRJ
bXBsOwordXNpbmcgRE9NOjpIVE1MTmFtZXM7CiB1c2luZyBET006Ok5hbWVkQXR0ck1hcEltcGw7
CiB1c2luZyBET006Ok5vZGU7CiB1c2luZyBET006Ok5vZGVJbXBsOwpAQCAtMTc3LDEzICsxNzcs
MTEgQEAgc3RhdGljIFFTdHJpbmcgc3RhcnRNYXJrdXAoY29uc3QgTm9kZUltcAogICAgIHN3aXRj
aCAodHlwZSkgewogICAgICAgICBjYXNlIE5vZGU6OlRFWFRfTk9ERTogewogICAgICAgICAgICAg
aWYgKG5vZGUtPnBhcmVudE5vZGUoKSkgewotICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+
cGFyZW50Tm9kZSgpLT5pZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfUFJFOgot
ICAgICAgICAgICAgICAgICAgICBjYXNlIElEX1NDUklQVDoKLSAgICAgICAgICAgICAgICAgICAg
Y2FzZSBJRF9TVFlMRToKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9URVhUQVJFQToKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdHJpbmdWYWx1ZUZvclJhbmdlKG5vZGUsIHJh
bmdlKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPnBhcmVu
dE5vZGUoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnByZSgpKSB8fAorICAgICAgICAgICAgICAg
ICAgICBub2RlLT5wYXJlbnROb2RlKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzY3JpcHQoKSkg
fHwKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+cGFyZW50Tm9kZSgpLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6c3R5bGUoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+cGFyZW50Tm9k
ZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGV4dGFyZWEoKSkpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBzdHJpbmdWYWx1ZUZvclJhbmdlKG5vZGUsIHJhbmdlKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIFFTdHJpbmcgbWFya3VwID0gYW5ub3RhdGUgPyBlc2NhcGVIVE1MKHJl
bmRlcmVkVGV4dChub2RlLCByYW5nZSkpIDogZXNjYXBlSFRNTChzdHJpbmdWYWx1ZUZvclJhbmdl
KG5vZGUsIHJhbmdlKSk7ICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoZGVmYXVsdFN0eWxl
KSB7CkBAIC0yNDgsOSArMjQ2LDEzIEBAIHN0YXRpYyBRU3RyaW5nIHN0YXJ0TWFya3VwKGNvbnN0
IE5vZGVJbXAKIAogc3RhdGljIFFTdHJpbmcgZW5kTWFya3VwKGNvbnN0IE5vZGVJbXBsICpub2Rl
KQogewotICAgIGlmICgoIW5vZGUtPmlzSFRNTEVsZW1lbnQoKSB8fCBlbmRUYWdSZXF1aXJlbWVu
dChub2RlLT5pZCgpKSAhPSBGT1JCSURERU4pICYmIG5vZGUtPm5vZGVUeXBlKCkgIT0gTm9kZTo6
VEVYVF9OT0RFICYmIG5vZGUtPm5vZGVUeXBlKCkgIT0gTm9kZTo6RE9DVU1FTlRfTk9ERSkgewot
ICAgICAgICByZXR1cm4gIjwvIiArIG5vZGUtPm5vZGVOYW1lKCkuc3RyaW5nKCkgKyAiPiI7Cisg
ICAgYm9vbCBoYXNFbmRUYWcgPSB0cnVlOworICAgIGlmIChub2RlLT5pc0hUTUxFbGVtZW50KCkp
IHsKKyAgICAgICAgY29uc3QgSFRNTEVsZW1lbnRJbXBsKiBodG1sRWx0ID0gc3RhdGljX2Nhc3Q8
Y29uc3QgSFRNTEVsZW1lbnRJbXBsKj4obm9kZSk7CisgICAgICAgIGhhc0VuZFRhZyA9IChodG1s
RWx0LT5lbmRUYWdSZXF1aXJlbWVudCgpICE9IEZPUkJJRERFTik7CiAgICAgfQorICAgIGlmICho
YXNFbmRUYWcpCisgICAgICAgIHJldHVybiAiPC8iICsgbm9kZS0+bm9kZU5hbWUoKS5zdHJpbmco
KSArICI+IjsKICAgICByZXR1cm4gIiI7CiB9CiAKQEAgLTI2NSw4ICsyNjcsMTQgQEAgc3RhdGlj
IFFTdHJpbmcgbWFya3VwKGNvbnN0IE5vZGVJbXBsICpzdAogICAgICAgICAgICAgICAgIG5vZGVz
LT5hcHBlbmQoY3VycmVudCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBtZSArPSBzdGFy
dE1hcmt1cChjdXJyZW50LCAwLCBEb05vdEFubm90YXRlRm9ySW50ZXJjaGFuZ2UsIDApOwotICAg
ICAgICB9ICAgICAgICAKLSAgICAgICAgaWYgKCFjdXJyZW50LT5pc0hUTUxFbGVtZW50KCkgfHwg
ZW5kVGFnUmVxdWlyZW1lbnQoY3VycmVudC0+aWQoKSkgIT0gRk9SQklEREVOKSB7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgY29udGFpbmVyID0gdHJ1ZTsKKyAgICAgICAgaWYg
KGN1cnJlbnQtPmlzSFRNTEVsZW1lbnQoKSkgeworICAgICAgICAgICAgY29uc3QgSFRNTEVsZW1l
bnRJbXBsKiBoID0gc3RhdGljX2Nhc3Q8Y29uc3QgSFRNTEVsZW1lbnRJbXBsKj4oY3VycmVudCk7
CisgICAgICAgICAgICBjb250YWluZXIgPSBoLT5lbmRUYWdSZXF1aXJlbWVudCgpICE9IEZPUkJJ
RERFTjsKKyAgICAgICAgfQorICAgICAgICBpZiAoY29udGFpbmVyKSB7CiAgICAgICAgICAgICAv
LyBwcmludCBjaGlsZHJlbgogICAgICAgICAgICAgaWYgKE5vZGVJbXBsICpuID0gY3VycmVudC0+
Zmlyc3RDaGlsZCgpKSB7CiAgICAgICAgICAgICAgICAgbWUgKz0gbWFya3VwKG4sIGZhbHNlLCB0
cnVlLCBub2Rlcyk7CkBAIC00MTQsOSArNDIyLDkgQEAgUVN0cmluZyBjcmVhdGVNYXJrdXAoY29u
c3QgUmFuZ2VJbXBsICpyYQogICAgICAgICAgICAgfQogICAgICAgICAgICAgYm9vbCBicmVha0F0
RW5kID0gZmFsc2U7CiAgICAgICAgICAgICBpZiAoY29tbW9uQW5jZXN0b3JCbG9jayA9PSBhbmNl
c3RvcikgewotICAgICAgICAgICAgICAgIE5vZGVJbXBsOjpJZCBpZCA9IGFuY2VzdG9yLT5pZCgp
OwogICAgICAgICAgICAgICAgIC8vIEluY2x1ZGUgYW5jZXN0b3JzIHRoYXQgYXJlIHJlcXVpcmVk
IHRvIHJldGFpbiB0aGUgYXBwZWFyYW5jZSBvZiB0aGUgY29waWVkIG1hcmt1cC4KLSAgICAgICAg
ICAgICAgICBpZiAoaWQgPT0gSURfUFJFIHx8IGlkID09IElEX1RBQkxFIHx8IGlkID09IElEX09M
IHx8IGlkID09IElEX1VMKSB7CisgICAgICAgICAgICAgICAgaWYgKGFuY2VzdG9yLT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6cHJlKCkpIHx8IGFuY2VzdG9yLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
dGFibGUoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgYW5jZXN0b3ItPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjpvbCgpKSB8fCBhbmNlc3Rvci0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnVsKCkpKSB7
CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrQXRFbmQgPSB0cnVlOwogICAgICAgICAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpJbmRleDoga2h0bWwvZWRpdGlu
Zy9yZXBsYWNlX3NlbGVjdGlvbl9jb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL3JlcGxhY2Vfc2VsZWN0aW9uX2NvbW1hbmQuY3Bw
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIKZGlmZiAtdSAtcCAtcjEuMiBraHRtbC9lZGl0aW5n
L3JlcGxhY2Vfc2VsZWN0aW9uX2NvbW1hbmQuY3BwCi0tLSBraHRtbC9lZGl0aW5nL3JlcGxhY2Vf
c2VsZWN0aW9uX2NvbW1hbmQuY3BwCTIyIEp1biAyMDA1IDAxOjE1OjQzIC0wMDAwCTEuMgorKysg
a2h0bWwvZWRpdGluZy9yZXBsYWNlX3NlbGVjdGlvbl9jb21tYW5kLmNwcAkyMyBKdW4gMjAwNSAy
MTo1MjoyOSAtMDAwMApAQCAtMjcsNyArMjcsNyBAQAogCiAjaW5jbHVkZSAidmlzaWJsZV9wb3Np
dGlvbi5oIgogI2luY2x1ZGUgIm1pc2MvaHRtbGF0dHJzLmgiCi0jaW5jbHVkZSAibWlzYy9odG1s
dGFncy5oIgorI2luY2x1ZGUgImh0bWxuYW1lcy5oIgogI2luY2x1ZGUgInhtbC9kb21fZG9jaW1w
bC5oIgogI2luY2x1ZGUgImh0bWxfaW50ZXJjaGFuZ2UuaCIKICNpbmNsdWRlICJ4bWwvZG9tX3Rl
eHRpbXBsLmgiCkBAIC01OCw2ICs1OCw3IEBAIHVzaW5nIERPTTo6RE9NU3RyaW5nOwogdXNpbmcg
RE9NOjpIVE1MRWxlbWVudEltcGw7CiB1c2luZyBET006OkNTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uSW1wbDsKIHVzaW5nIERPTTo6UG9zaXRpb247Cit1c2luZyBET006OkhUTUxOYW1lczsKIAog
bmFtZXNwYWNlIGtodG1sIHsKIApAQCAtMTY3LDMwICsxNjgsMTQgQEAgc3RhdGljIGJvb2wgaXNQ
cm9iYWJseUJsb2NrKGNvbnN0IE5vZGVJbQogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIAotICAgIHN3aXRjaCAobm9kZS0+aWQoKSkgewotICAgICAgICBjYXNlIElE
X0JMT0NLUVVPVEU6Ci0gICAgICAgIGNhc2UgSURfREQ6Ci0gICAgICAgIGNhc2UgSURfRElWOgot
ICAgICAgICBjYXNlIElEX0RMOgotICAgICAgICBjYXNlIElEX0RUOgotICAgICAgICBjYXNlIElE
X0gxOgotICAgICAgICBjYXNlIElEX0gyOgotICAgICAgICBjYXNlIElEX0gzOgotICAgICAgICBj
YXNlIElEX0g0OgotICAgICAgICBjYXNlIElEX0g1OgotICAgICAgICBjYXNlIElEX0g2OgotICAg
ICAgICBjYXNlIElEX0hSOgotICAgICAgICBjYXNlIElEX0xJOgotICAgICAgICBjYXNlIElEX09M
OgotICAgICAgICBjYXNlIElEX1A6Ci0gICAgICAgIGNhc2UgSURfUFJFOgotICAgICAgICBjYXNl
IElEX1REOgotICAgICAgICBjYXNlIElEX1RIOgotICAgICAgICBjYXNlIElEX1VMOgotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBmYWxzZTsKKyAgICAv
LyBGSVhNRTogVGhpcyBmdW5jdGlvbiBzZWVtcyByZWFsbHkgYnJva2VuIHRvIG1lLiAgSXQgaXNu
J3QgZXZlbiBpbmNsdWRpbmcgYWxsIHRoZSBibG9jay1sZXZlbCBlbGVtZW50cy4KKyAgICByZXR1
cm4gKG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpibG9ja3F1b3RlKCkpIHx8IG5vZGUtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjpkZCgpKSB8fCBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
ZGl2KCkpIHx8CisgICAgICAgICAgICBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZGwoKSkg
fHwgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmR0KCkpIHx8IG5vZGUtPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjpoMSgpKSB8fAorICAgICAgICAgICAgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OmgyKCkpIHx8IG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoMygpKSB8fCBub2RlLT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6aDQoKSkgfHwKKyAgICAgICAgICAgIG5vZGUtPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjpoNSgpKSB8fCBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDYoKSkg
fHwgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmhyKCkpIHx8CisgICAgICAgICAgICBub2Rl
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6bGkoKSkgfHwgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6Om9sKCkpIHx8IG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpwKCkpIHx8CisgICAgICAg
ICAgICBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6cHJlKCkpIHx8IG5vZGUtPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjp0ZCgpKSB8fCBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGgoKSkg
fHwKKyAgICAgICAgICAgIG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp1bCgpKSk7CiB9CiAK
IHN0YXRpYyBib29sIGlzTWFpbFBhc3RlQXNRdW90YXRpb25Ob2RlKGNvbnN0IE5vZGVJbXBsICpu
b2RlKQpAQCAtMjE0LDE2ICsxOTksOCBAQCBzdGF0aWMgYm9vbCBpc1Byb2JhYmx5VGFibGVTdHJ1
Y3R1cmVOb2RlCiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0g
ICAgc3dpdGNoIChub2RlLT5pZCgpKSB7Ci0gICAgICAgIGNhc2UgSURfVEFCTEU6Ci0gICAgICAg
IGNhc2UgSURfVEJPRFk6Ci0gICAgICAgIGNhc2UgSURfVEQ6Ci0gICAgICAgIGNhc2UgSURfVEZP
T1Q6Ci0gICAgICAgIGNhc2UgSURfVEhFQUQ6Ci0gICAgICAgIGNhc2UgSURfVFI6Ci0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiAo
bm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRhYmxlKCkpIHx8IG5vZGUtPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjp0Ym9keSgpKSB8fCBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGQoKSkg
fHwKKyAgICAgICAgICAgIG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0Zm9vdCgpKSB8fCBu
b2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGhlYWQoKSkgfHwgbm9kZS0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OnRyKCkpKTsKIH0KIAogdm9pZCBSZXBsYWNlbWVudEZyYWdtZW50OjpwcnVuZUVt
cHR5Tm9kZXMoKQpAQCAtMjUwLDcgKzIyNyw3IEBAIHZvaWQgUmVwbGFjZW1lbnRGcmFnbWVudDo6
cHJ1bmVFbXB0eU5vZGUKIGJvb2wgUmVwbGFjZW1lbnRGcmFnbWVudDo6aXNJbnRlcmNoYW5nZU5l
d2xpbmVOb2RlKGNvbnN0IE5vZGVJbXBsICpub2RlKQogewogICAgIHN0YXRpYyBET01TdHJpbmcg
aW50ZXJjaGFuZ2VOZXdsaW5lQ2xhc3NTdHJpbmcoQXBwbGVJbnRlcmNoYW5nZU5ld2xpbmUpOwot
ICAgIHJldHVybiBub2RlICYmIG5vZGUtPmlkKCkgPT0gSURfQlIgJiYgc3RhdGljX2Nhc3Q8Y29u
c3QgRWxlbWVudEltcGwgKj4obm9kZSktPmdldEF0dHJpYnV0ZShBVFRSX0NMQVNTKSA9PSBpbnRl
cmNoYW5nZU5ld2xpbmVDbGFzc1N0cmluZzsKKyAgICByZXR1cm4gbm9kZSAmJiBub2RlLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6YnIoKSkgJiYgc3RhdGljX2Nhc3Q8Y29uc3QgRWxlbWVudEltcGwg
Kj4obm9kZSktPmdldEF0dHJpYnV0ZShBVFRSX0NMQVNTKSA9PSBpbnRlcmNoYW5nZU5ld2xpbmVD
bGFzc1N0cmluZzsKIH0KIAogYm9vbCBSZXBsYWNlbWVudEZyYWdtZW50Ojppc0ludGVyY2hhbmdl
Q29udmVydGVkU3BhY2VTcGFuKGNvbnN0IE5vZGVJbXBsICpub2RlKQpAQCAtNTA3LDE4ICs0ODQs
MTkgQEAgdm9pZCBSZXBsYWNlbWVudEZyYWdtZW50OjpyZW1vdmVTdHlsZU5vZAogICAgICAgICBO
b2RlSW1wbCAqbmV4dCA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKTsKICAgICAgICAgLy8gVGhp
cyBsaXN0IG9mIHRhZ3MgY2hhbmdlIHRoZSBhcHBlYXJhbmNlIG9mIGNvbnRlbnQKICAgICAgICAg
Ly8gaW4gd2F5cyB3ZSBjYW4gYWRkIGJhY2sgb24gbGF0ZXIgd2l0aCBDU1MsIGlmIG5lY2Vzc2Fy
eS4KLSAgICAgICAgaWYgKG5vZGUtPmlkKCkgPT0gSURfQiB8fCAKLSAgICAgICAgICAgIG5vZGUt
PmlkKCkgPT0gSURfQklHIHx8IAotICAgICAgICAgICAgbm9kZS0+aWQoKSA9PSBJRF9DRU5URVIg
fHwgCi0gICAgICAgICAgICBub2RlLT5pZCgpID09IElEX0ZPTlQgfHwgCi0gICAgICAgICAgICBu
b2RlLT5pZCgpID09IElEX0kgfHwgCi0gICAgICAgICAgICBub2RlLT5pZCgpID09IElEX1MgfHwg
Ci0gICAgICAgICAgICBub2RlLT5pZCgpID09IElEX1NNQUxMIHx8IAotICAgICAgICAgICAgbm9k
ZS0+aWQoKSA9PSBJRF9TVFJJS0UgfHwgCi0gICAgICAgICAgICBub2RlLT5pZCgpID09IElEX1NV
QiB8fCAKLSAgICAgICAgICAgIG5vZGUtPmlkKCkgPT0gSURfU1VQIHx8IAotICAgICAgICAgICAg
bm9kZS0+aWQoKSA9PSBJRF9UVCB8fCAKLSAgICAgICAgICAgIG5vZGUtPmlkKCkgPT0gSURfVSB8
fCAKKyAgICAgICAgLy8gIEZJWE1FOiBUaGlzIGxpc3QgaXMgaW5jb21wbGV0ZQorICAgICAgICBp
ZiAobm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmIoKSkgfHwgCisgICAgICAgICAgICBub2Rl
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YmlnKCkpIHx8IAorICAgICAgICAgICAgbm9kZS0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OmNlbnRlcigpKSB8fCAKKyAgICAgICAgICAgIG5vZGUtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjpmb250KCkpIHx8IAorICAgICAgICAgICAgbm9kZS0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OmkoKSkgfHwgCisgICAgICAgICAgICBub2RlLT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6cygpKSB8fCAKKyAgICAgICAgICAgIG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpz
bWFsbCgpKSB8fCAKKyAgICAgICAgICAgIG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzdHJp
a2UoKSkgfHwgCisgICAgICAgICAgICBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c3ViKCkp
IHx8IAorICAgICAgICAgICAgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnN1cCgpKSB8fCAK
KyAgICAgICAgICAgIG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0dCgpKSB8fCAKKyAgICAg
ICAgICAgIG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp1KCkpIHx8IAogICAgICAgICAgICAg
aXNTdHlsZVNwYW4obm9kZSkpIHsKICAgICAgICAgICAgIHJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hp
bGRyZW4obm9kZSk7CiAgICAgICAgIH0KQEAgLTc0NCw3ICs3MjIsNyBAQCB2b2lkIFJlcGxhY2VT
ZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KCkKICAgICBpZiAoIWxpbmVQbGFjZWhvbGRlcikgewog
ICAgICAgICBQb3NpdGlvbiBkb3duc3RyZWFtID0gc3RhcnRQb3MuZG93bnN0cmVhbSgpOwogICAg
ICAgICBkb3duc3RyZWFtID0gcG9zaXRpb25PdXRzaWRlQ29udGFpbmluZ1NwZWNpYWxFbGVtZW50
KGRvd25zdHJlYW0pOwotICAgICAgICBpZiAoZG93bnN0cmVhbS5ub2RlKCktPmlkKCkgPT0gSURf
QlIgJiYgZG93bnN0cmVhbS5vZmZzZXQoKSA9PSAwICYmIAorICAgICAgICBpZiAoZG93bnN0cmVh
bS5ub2RlKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpicigpKSAmJiBkb3duc3RyZWFtLm9mZnNl
dCgpID09IDAgJiYgCiAgICAgICAgICAgICBtX2ZyYWdtZW50Lmhhc0ludGVyY2hhbmdlTmV3bGlu
ZUF0RW5kKCkgJiYKICAgICAgICAgICAgIGlzU3RhcnRPZkxpbmUoVmlzaWJsZVBvc2l0aW9uKGRv
d25zdHJlYW0sIFZQX0RFRkFVTFRfQUZGSU5JVFkpKSkKICAgICAgICAgICAgIGxpbmVQbGFjZWhv
bGRlciA9IGRvd25zdHJlYW0ubm9kZSgpOwpAQCAtOTA2LDEyICs4ODQsMTIgQEAgdm9pZCBSZXBs
YWNlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgICAgIH0KICAgICB9IAogICAgIGVs
c2UgewotICAgICAgICBpZiAobV9sYXN0Tm9kZUluc2VydGVkICYmIG1fbGFzdE5vZGVJbnNlcnRl
ZC0+aWQoKSA9PSBJRF9CUiAmJiAhZG9jdW1lbnQoKS0+aW5TdHJpY3RNb2RlKCkpIHsKKyAgICAg
ICAgaWYgKG1fbGFzdE5vZGVJbnNlcnRlZCAmJiBtX2xhc3ROb2RlSW5zZXJ0ZWQtPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjpicigpKSAmJiAhZG9jdW1lbnQoKS0+aW5TdHJpY3RNb2RlKCkpIHsKICAg
ICAgICAgICAgIGRvY3VtZW50KCktPnVwZGF0ZUxheW91dCgpOwogICAgICAgICAgICAgVmlzaWJs
ZVBvc2l0aW9uIHBvcyhQb3NpdGlvbihtX2xhc3ROb2RlSW5zZXJ0ZWQsIDEpLCBET1dOU1RSRUFN
KTsKICAgICAgICAgICAgIGlmIChpc0VuZE9mQmxvY2socG9zKSkgewogICAgICAgICAgICAgICAg
IE5vZGVJbXBsICpuZXh0ID0gbV9sYXN0Tm9kZUluc2VydGVkLT50cmF2ZXJzZU5leHROb2RlKCk7
Ci0gICAgICAgICAgICAgICAgYm9vbCBoYXNUcmFpbGluZ0JSID0gbmV4dCAmJiBuZXh0LT5pZCgp
ID09IElEX0JSICYmIG1fbGFzdE5vZGVJbnNlcnRlZC0+ZW5jbG9zaW5nQmxvY2tGbG93RWxlbWVu
dCgpID09IG5leHQtPmVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQoKTsKKyAgICAgICAgICAgICAg
ICBib29sIGhhc1RyYWlsaW5nQlIgPSBuZXh0ICYmIG5leHQtPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjpicigpKSAmJiBtX2xhc3ROb2RlSW5zZXJ0ZWQtPmVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQo
KSA9PSBuZXh0LT5lbmNsb3NpbmdCbG9ja0Zsb3dFbGVtZW50KCk7CiAgICAgICAgICAgICAgICAg
aWYgKCFoYXNUcmFpbGluZ0JSKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIEluc2VydCBhbiAi
ZXh0cmEiIEJSIGF0IHRoZSBlbmQgb2YgdGhlIGJsb2NrLiAKICAgICAgICAgICAgICAgICAgICAg
aW5zZXJ0Tm9kZUJlZm9yZShjcmVhdGVCcmVha0VsZW1lbnQoZG9jdW1lbnQoKSksIG1fbGFzdE5v
ZGVJbnNlcnRlZCk7CkBAIC05MzgsNyArOTE2LDcgQEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29t
bWFuZDo6ZG9BcHBseSgpCiAgICAgICAgICAgICAgICAgaW5zZXJ0Tm9kZUFmdGVyKG5vZGUsIHJl
Zk5vZGUpOwogICAgICAgICAgICAgICAgIHJlZk5vZGUgPSBub2RlOwogICAgICAgICAgICAgICAg
IC8vIFdlIHdhbnQgdG8gbW92ZSB0aGUgZmlyc3QgQlIgd2Ugc2VlLCBzbyBjaGVjayBmb3IgdGhh
dCBoZXJlLgotICAgICAgICAgICAgICAgIGlmIChub2RlLT5pZCgpID09IElEX0JSKQorICAgICAg
ICAgICAgICAgIGlmIChub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YnIoKSkpCiAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIG5vZGUgPSBuZXh0OwogICAgICAg
ICAgICAgfQpAQCAtMTA4Niw3ICsxMDY0LDcgQEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFu
ZDo6dXBkYXRlTm9kZQogICAgIAogICAgIC8vIHVwZGF0ZSBtX2xhc3ROb2RlSW5zZXJ0ZWQKICAg
ICBOb2RlSW1wbCAqb2xkID0gbV9sYXN0Tm9kZUluc2VydGVkOwotICAgIG1fbGFzdE5vZGVJbnNl
cnRlZCA9IG5vZGUtPmxhc3REZXNjZW5kZW50KCk7CisgICAgbV9sYXN0Tm9kZUluc2VydGVkID0g
bm9kZS0+bGFzdERlc2NlbmRhbnQoKTsKICAgICBtX2xhc3ROb2RlSW5zZXJ0ZWQtPnJlZigpOwog
ICAgIGlmIChvbGQpCiAgICAgICAgIG9sZC0+ZGVyZWYoKTsKSW5kZXg6IGtodG1sL2VkaXRpbmcv
c2VsZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRt
bC9lZGl0aW5nL3NlbGVjdGlvbi5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuODgKZGlmZiAt
dSAtcCAtcjEuODgga2h0bWwvZWRpdGluZy9zZWxlY3Rpb24uY3BwCi0tLSBraHRtbC9lZGl0aW5n
L3NlbGVjdGlvbi5jcHAJMjEgSnVuIDIwMDUgMTg6MTE6MTAgLTAwMDAJMS44OAorKysga2h0bWwv
ZWRpdGluZy9zZWxlY3Rpb24uY3BwCTIzIEp1biAyMDA1IDIxOjUyOjMwIC0wMDAwCkBAIC0zMyw3
ICszMyw2IEBACiAjaW5jbHVkZSAiZG9tL2RvbV9zdHJpbmcuaCIKICNpbmNsdWRlICJraHRtbF9w
YXJ0LmgiCiAjaW5jbHVkZSAia2h0bWx2aWV3LmgiCi0jaW5jbHVkZSAibWlzYy9odG1sdGFncy5o
IgogI2luY2x1ZGUgInJlbmRlcmluZy9yZW5kZXJfb2JqZWN0LmgiCiAjaW5jbHVkZSAicmVuZGVy
aW5nL3JlbmRlcl9zdHlsZS5oIgogI2luY2x1ZGUgInJlbmRlcmluZy9yZW5kZXJfdGV4dC5oIgpA
QCAtOTM4LDcgKzkzNyw3IEBAIHZvaWQgU2VsZWN0aW9uOjpkZWJ1Z1JlbmRlcmVyKFJlbmRlck9i
amUKIHsKICAgICBpZiAoci0+bm9kZSgpLT5pc0VsZW1lbnROb2RlKCkpIHsKICAgICAgICAgRWxl
bWVudEltcGwgKmVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50SW1wbCAqPihyLT5ub2RlKCkp
OwotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzJXNcbiIsIHNlbGVjdGVkID8gIj09PiAiIDog
IiAgICAiLCBlbGVtZW50LT50YWdOYW1lKCkuc3RyaW5nKCkubGF0aW4xKCkpOworICAgICAgICBm
cHJpbnRmKHN0ZGVyciwgIiVzJXNcbiIsIHNlbGVjdGVkID8gIj09PiAiIDogIiAgICAiLCBlbGVt
ZW50LT5sb2NhbE5hbWUoKS5zdHJpbmcoKS5sYXRpbjEoKSk7CiAgICAgfQogICAgIGVsc2UgaWYg
KHItPmlzVGV4dCgpKSB7CiAgICAgICAgIFJlbmRlclRleHQgKnRleHRSZW5kZXJlciA9IHN0YXRp
Y19jYXN0PFJlbmRlclRleHQgKj4ocik7CkluZGV4OiBraHRtbC9lZGl0aW5nL3Zpc2libGVfcG9z
aXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2Vk
aXRpbmcvdmlzaWJsZV9wb3NpdGlvbi5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNTAKZGlm
ZiAtdSAtcCAtcjEuNTAga2h0bWwvZWRpdGluZy92aXNpYmxlX3Bvc2l0aW9uLmNwcAotLS0ga2h0
bWwvZWRpdGluZy92aXNpYmxlX3Bvc2l0aW9uLmNwcAkyMSBKdW4gMjAwNSAxODoxMToxMCAtMDAw
MAkxLjUwCisrKyBraHRtbC9lZGl0aW5nL3Zpc2libGVfcG9zaXRpb24uY3BwCTIzIEp1biAyMDA1
IDIxOjUyOjMwIC0wMDAwCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSAidmlzaWJsZV9wb3Np
dGlvbi5oIgogI2luY2x1ZGUgInZpc2libGVfdW5pdHMuaCIKIAotI2luY2x1ZGUgIm1pc2MvaHRt
bHRhZ3MuaCIKKyNpbmNsdWRlICJodG1sbmFtZXMuaCIKICNpbmNsdWRlICJyZW5kZXJpbmcvcmVu
ZGVyX2xpbmUuaCIKICNpbmNsdWRlICJyZW5kZXJpbmcvcmVuZGVyX29iamVjdC5oIgogI2luY2x1
ZGUgInJlbmRlcmluZy9yZW5kZXJfdGV4dC5oIgpAQCAtNTAsNiArNTAsNyBAQCB1c2luZyBET006
OlBvc2l0aW9uOwogdXNpbmcgRE9NOjpSYW5nZTsKIHVzaW5nIERPTTo6UmFuZ2VJbXBsOwogdXNp
bmcgRE9NOjpUZXh0SW1wbDsKK3VzaW5nIERPTTo6SFRNTE5hbWVzOwogCiBuYW1lc3BhY2Uga2h0
bWwgewogCkBAIC03NCw3ICs3NSw3IEBAIHZvaWQgVmlzaWJsZVBvc2l0aW9uOjppbml0KGNvbnN0
IFBvc2l0aW8KICAgICBtX2FmZmluaXR5ID0gYWZmaW5pdHk7CiAKICAgICAvLyBGb3IgPGJyPiAw
LCBpdCdzIGltcG9ydGFudCBub3QgdG8gbW92ZSBwYXN0IHRoZSA8YnI+LgotICAgIGlmIChwb3Mu
bm9kZSgpICYmIHBvcy5ub2RlKCktPmlkKCkgPT0gSURfQlIgJiYgcG9zLm9mZnNldCgpID09IDAp
CisgICAgaWYgKHBvcy5ub2RlKCkgJiYgcG9zLm5vZGUoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
OmJyKCkpICYmIHBvcy5vZmZzZXQoKSA9PSAwKQogICAgICAgICBpbml0VXBzdHJlYW0ocG9zKTsK
ICAgICBlbHNlCiAgICAgICAgIGluaXREb3duc3RyZWFtKHBvcyk7CkBAIC0yNzQsNyArMjc1LDcg
QEAgYm9vbCBWaXNpYmxlUG9zaXRpb246OmlzQ2FuZGlkYXRlKGNvbnN0IAogICAgIH0KICAgICAK
ICAgICBpZiAocmVuZGVyZXItPmlzQmxvY2tGbG93KCkgJiYgKCFyZW5kZXJlci0+Zmlyc3RDaGls
ZCgpIHx8ICFwb3Mubm9kZSgpLT5maXJzdENoaWxkKCkpICYmIAotICAgICAgIChyZW5kZXJlci0+
aGVpZ2h0KCkgfHwgcG9zLm5vZGUoKS0+aWQoKSA9PSBJRF9CT0RZKSkgeworICAgICAgIChyZW5k
ZXJlci0+aGVpZ2h0KCkgfHwgcG9zLm5vZGUoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJvZHko
KSkpKSB7CiAgICAgICAgIC8vIHJldHVybiB0cnVlIGZvciBvZmZzZXQgMCBpbnRvIHJlbmRlcmVk
IGJsb2NrcyB0aGF0IGFyZSBlbXB0eSBvZiByZW5kZXJlZCBraWRzLCBidXQgaGF2ZSBhIGhlaWdo
dAogICAgICAgICByZXR1cm4gcG9zLm9mZnNldCgpID09IDA7CiAgICAgfQpAQCAtMzU5LDcgKzM2
MCw3IEBAIGxvbmcgVmlzaWJsZVBvc2l0aW9uOjptYXhPZmZzZXQoY29uc3QgTm8KIAogYm9vbCBW
aXNpYmxlUG9zaXRpb246OmlzQXRvbWljTm9kZShjb25zdCBOb2RlSW1wbCAqbm9kZSkKIHsKLSAg
ICByZXR1cm4gbm9kZSAmJiAoIW5vZGUtPmhhc0NoaWxkTm9kZXMoKSB8fCAobm9kZS0+aWQoKSA9
PSBJRF9PQkpFQ1QgJiYgbm9kZS0+cmVuZGVyZXIoKSAmJiBub2RlLT5yZW5kZXJlcigpLT5pc1Jl
cGxhY2VkKCkpKTsKKyAgICByZXR1cm4gbm9kZSAmJiAoIW5vZGUtPmhhc0NoaWxkTm9kZXMoKSB8
fCAobm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9iamVjdCgpKSAmJiBub2RlLT5yZW5kZXJl
cigpICYmIG5vZGUtPnJlbmRlcmVyKCktPmlzUmVwbGFjZWQoKSkpOwogfQogCiBRQ2hhciBWaXNp
YmxlUG9zaXRpb246OmNoYXJhY3RlcigpIGNvbnN0CkluZGV4OiBraHRtbC9lZGl0aW5nL3Zpc2li
bGVfdGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwv
ZWRpdGluZy92aXNpYmxlX3RleHQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjI3CmRpZmYg
LXUgLXAgLXIxLjI3IGtodG1sL2VkaXRpbmcvdmlzaWJsZV90ZXh0LmNwcAotLS0ga2h0bWwvZWRp
dGluZy92aXNpYmxlX3RleHQuY3BwCTEzIE1heSAyMDA1IDE2OjQ4OjUxIC0wMDAwCTEuMjcKKysr
IGtodG1sL2VkaXRpbmcvdmlzaWJsZV90ZXh0LmNwcAkyMyBKdW4gMjAwNSAyMTo1MjozMSAtMDAw
MApAQCAtMjUsNyArMjUsNyBAQAogCiAjaW5jbHVkZSAidmlzaWJsZV90ZXh0LmgiCiAKLSNpbmNs
dWRlICJtaXNjL2h0bWx0YWdzLmgiCisjaW5jbHVkZSAiaHRtbG5hbWVzLmgiCiAjaW5jbHVkZSAi
cmVuZGVyaW5nL3JlbmRlcl90ZXh0LmgiCiAjaW5jbHVkZSAieG1sL2RvbV9ub2RlaW1wbC5oIgog
I2luY2x1ZGUgInhtbC9kb21fcG9zaXRpb24uaCIKQEAgLTM3LDYgKzM3LDcgQEAgdXNpbmcgRE9N
OjpOb2RlOwogdXNpbmcgRE9NOjpOb2RlSW1wbDsKIHVzaW5nIERPTTo6b2Zmc2V0SW5DaGFyYWN0
ZXJzOwogdXNpbmcgRE9NOjpSYW5nZUltcGw7Cit1c2luZyBET006OkhUTUxOYW1lczsKIAogLy8g
RklYTUU6IFRoZXNlIGNsYXNzZXMgc2hvdWxkIHByb2JhYmx5IHVzZSB0aGUgcmVuZGVyIHRyZWUg
YW5kIG5vdCB0aGUgRE9NIHRyZWUsIHNpbmNlIGVsZW1lbnRzIGNvdWxkCiAvLyBiZSBoaWRkZW4g
dXNpbmcgQ1NTLCBvciBhZGRpdGlvbmFsIGdlbmVyYXRlZCBjb250ZW50IGNvdWxkIGJlIGFkZGVk
LiAgRm9yIG5vdywgd2UganVzdCBtYWtlIHN1cmUKQEAgLTMzNiw0MSArMzM3LDI1IEBAIGJvb2wg
VGV4dEl0ZXJhdG9yOjpoYW5kbGVSZXBsYWNlZEVsZW1lbnQKIAogYm9vbCBUZXh0SXRlcmF0b3I6
OmhhbmRsZU5vblRleHROb2RlKCkKIHsKLSAgICBzd2l0Y2ggKG1fbm9kZS0+aWQoKSkgewotICAg
ICAgICBjYXNlIElEX0JSOiB7Ci0gICAgICAgICAgICBlbWl0Q2hhcmFjdGVyKCdcbicsIG1fbm9k
ZS0+cGFyZW50Tm9kZSgpLCBtX25vZGUsIDAsIDEpOwotICAgICAgICAgICAgYnJlYWs7CisgICAg
aWYgKG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJyKCkpKSB7CisgICAgICAgIGVtaXRD
aGFyYWN0ZXIoJ1xuJywgbV9ub2RlLT5wYXJlbnROb2RlKCksIG1fbm9kZSwgMCwgMSk7CisgICAg
fSBlbHNlIGlmIChtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0ZCgpKSB8fCBtX25vZGUt
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0aCgpKSkgeworICAgICAgICBpZiAobV9sYXN0Q2hhcmFj
dGVyICE9ICdcbicgJiYgbV9sYXN0VGV4dE5vZGUpIHsKKyAgICAgICAgICAgIGVtaXRDaGFyYWN0
ZXIoJ1x0JywgbV9sYXN0VGV4dE5vZGUtPnBhcmVudE5vZGUoKSwgbV9sYXN0VGV4dE5vZGUsIDAs
IDEpOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjpibG9ja3F1b3RlKCkpIHx8IG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmRkKCkp
IHx8CisgICAgICAgICAgICAgICBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpkaXYoKSkg
fHwKKyAgICAgICAgICAgICAgIG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmRsKCkpIHx8
IG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmR0KCkpIHx8IAorICAgICAgICAgICAgICAg
bV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDEoKSkgfHwgbV9ub2RlLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6aDIoKSkgfHwKKyAgICAgICAgICAgICAgIG1fbm9kZS0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OmgzKCkpIHx8IG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omg0KCkpIHx8
CisgICAgICAgICAgICAgICBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoNSgpKSB8fCBt
X25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoNigpKSB8fAorICAgICAgICAgICAgICAgbV9u
b2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aHIoKSkgfHwgbV9ub2RlLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6bGkoKSkgfHwKKyAgICAgICAgICAgICAgIG1fbm9kZS0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6Om9sKCkpIHx8IG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnAoKSkgfHwKKyAg
ICAgICAgICAgICAgIG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnByZSgpKSB8fCBtX25v
ZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0cigpKSB8fAorICAgICAgICAgICAgICAgbV9ub2Rl
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dWwoKSkpIHsKKyAgICAgICAgaWYgKG1fbGFzdENoYXJh
Y3RlciAhPSAnXG4nICYmIG1fbGFzdFRleHROb2RlKSB7CisgICAgICAgICAgICBlbWl0Q2hhcmFj
dGVyKCdcbicsIG1fbGFzdFRleHROb2RlLT5wYXJlbnROb2RlKCksIG1fbGFzdFRleHROb2RlLCAw
LCAxKTsKICAgICAgICAgfQotCi0gICAgICAgIGNhc2UgSURfVEQ6Ci0gICAgICAgIGNhc2UgSURf
VEg6Ci0gICAgICAgICAgICBpZiAobV9sYXN0Q2hhcmFjdGVyICE9ICdcbicgJiYgbV9sYXN0VGV4
dE5vZGUpIHsKLSAgICAgICAgICAgICAgICBlbWl0Q2hhcmFjdGVyKCdcdCcsIG1fbGFzdFRleHRO
b2RlLT5wYXJlbnROb2RlKCksIG1fbGFzdFRleHROb2RlLCAwLCAxKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgSURfQkxPQ0tRVU9URToKLSAgICAg
ICAgY2FzZSBJRF9ERDoKLSAgICAgICAgY2FzZSBJRF9ESVY6Ci0gICAgICAgIGNhc2UgSURfREw6
Ci0gICAgICAgIGNhc2UgSURfRFQ6Ci0gICAgICAgIGNhc2UgSURfSDE6Ci0gICAgICAgIGNhc2Ug
SURfSDI6Ci0gICAgICAgIGNhc2UgSURfSDM6Ci0gICAgICAgIGNhc2UgSURfSDQ6Ci0gICAgICAg
IGNhc2UgSURfSDU6Ci0gICAgICAgIGNhc2UgSURfSDY6Ci0gICAgICAgIGNhc2UgSURfSFI6Ci0g
ICAgICAgIGNhc2UgSURfTEk6Ci0gICAgICAgIGNhc2UgSURfT0w6Ci0gICAgICAgIGNhc2UgSURf
UDoKLSAgICAgICAgY2FzZSBJRF9QUkU6Ci0gICAgICAgIGNhc2UgSURfVFI6Ci0gICAgICAgIGNh
c2UgSURfVUw6Ci0gICAgICAgICAgICBpZiAobV9sYXN0Q2hhcmFjdGVyICE9ICdcbicgJiYgbV9s
YXN0VGV4dE5vZGUpIHsKLSAgICAgICAgICAgICAgICBlbWl0Q2hhcmFjdGVyKCdcbicsIG1fbGFz
dFRleHROb2RlLT5wYXJlbnROb2RlKCksIG1fbGFzdFRleHROb2RlLCAwLCAxKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIHJldHVybiB0cnVlOwpAQCAt
MzgxLDQ5ICszNjYsMzYgQEAgdm9pZCBUZXh0SXRlcmF0b3I6OmV4aXROb2RlKCkKICAgICBib29s
IGVuZExpbmUgPSBmYWxzZTsKICAgICBib29sIGFkZE5ld2xpbmUgPSBmYWxzZTsKIAotICAgIHN3
aXRjaCAobV9ub2RlLT5pZCgpKSB7Ci0gICAgICAgIGNhc2UgSURfQkxPQ0tRVU9URToKLSAgICAg
ICAgY2FzZSBJRF9ERDoKLSAgICAgICAgY2FzZSBJRF9ESVY6Ci0gICAgICAgIGNhc2UgSURfREw6
Ci0gICAgICAgIGNhc2UgSURfRFQ6Ci0gICAgICAgIGNhc2UgSURfSFI6Ci0gICAgICAgIGNhc2Ug
SURfTEk6Ci0gICAgICAgIGNhc2UgSURfT0w6Ci0gICAgICAgIGNhc2UgSURfUFJFOgotICAgICAg
ICBjYXNlIElEX1RSOgotICAgICAgICBjYXNlIElEX1VMOgotICAgICAgICAgICAgZW5kTGluZSA9
IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIElEX0gxOgotICAgICAg
ICBjYXNlIElEX0gyOgotICAgICAgICBjYXNlIElEX0gzOgotICAgICAgICBjYXNlIElEX0g0Ogot
ICAgICAgICBjYXNlIElEX0g1OgotICAgICAgICBjYXNlIElEX0g2OgotICAgICAgICBjYXNlIElE
X1A6IHsKLSAgICAgICAgICAgIGVuZExpbmUgPSB0cnVlOwotCi0gICAgICAgICAgICAvLyBJbiBj
ZXJ0YWluIGNhc2VzLCBlbWl0IGEgbmV3IG5ld2xpbmUgY2hhcmFjdGVyIGZvciB0aGlzIG5vZGUK
LSAgICAgICAgICAgIC8vIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB3ZSBlbWl0IGFub3RoZXIgb25l
LgotICAgICAgICAgICAgLy8gRklYTUU6IFNvbWUgZGF5IHdlIGNvdWxkIGRvIHRoaXMgZm9yIG90
aGVyIHRhZ3MuCi0gICAgICAgICAgICAvLyBIb3dldmVyLCBkb2luZyBpdCBqdXN0IGZvciB0aGUg
dGFncyBhYm92ZSBtYWtlcyBpdCBtb3JlIGxpa2VseQotICAgICAgICAgICAgLy8gd2UnbGwgZW5k
IHVwIGdldHRpbmcgdGhlIHJpZ2h0IHJlc3VsdCB3aXRob3V0IG1hcmdpbiBjb2xsYXBzaW5nLgot
ICAgICAgICAgICAgLy8gRm9yIGV4YW1wbGU6IDxkaXY+PHA+dGV4dDwvcD48L2Rpdj4gd2lsbCB3
b3JrIHJpZ2h0IGV2ZW4gaWYgYm90aAotICAgICAgICAgICAgLy8gdGhlIDxkaXY+IGFuZCB0aGUg
PHA+IGhhdmUgYm90dG9tIG1hcmdpbnMuCi0gICAgICAgICAgICBSZW5kZXJPYmplY3QgKnJlbmRl
cmVyID0gbV9ub2RlLT5yZW5kZXJlcigpOwotICAgICAgICAgICAgaWYgKHJlbmRlcmVyKSB7Ci0g
ICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUgKnN0eWxlID0gcmVuZGVyZXItPnN0eWxlKCk7Ci0g
ICAgICAgICAgICAgICAgaWYgKHN0eWxlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBib3R0
b21NYXJnaW4gPSByZW5kZXJlci0+Y29sbGFwc2VkTWFyZ2luQm90dG9tKCk7Ci0gICAgICAgICAg
ICAgICAgICAgIGludCBmb250U2l6ZSA9IHN0eWxlLT5odG1sRm9udCgpLmdldEZvbnREZWYoKS5j
b21wdXRlZFBpeGVsU2l6ZSgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoYm90dG9tTWFyZ2lu
ICogMiA+PSBmb250U2l6ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgYWRkTmV3bGluZSA9
IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KKyAgICBpZiAobV9ub2RlLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6YmxvY2txdW90ZSgpKSB8fCBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjpkZCgpKSB8fAorICAgICAgICAgICAgICAgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
ZGl2KCkpIHx8CisgICAgICAgICAgICAgICBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpk
bCgpKSB8fCBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpkdCgpKSB8fCAKKyAgICAgICAg
ICAgICAgIG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmhyKCkpIHx8IG1fbm9kZS0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OmxpKCkpIHx8CisgICAgICAgICAgICAgICBtX25vZGUtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjpvbCgpKSB8fAorICAgICAgICAgICAgICAgbV9ub2RlLT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6cHJlKCkpIHx8IG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRy
KCkpIHx8CisgICAgICAgICAgICAgICBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp1bCgp
KSkKKyAgICAgICAgZW5kTGluZSA9IHRydWU7CisgICAgZWxzZSBpZiAobV9ub2RlLT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6aDEoKSkgfHwgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDIo
KSkgfHwKKyAgICAgICAgICAgICBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoMygpKSB8
fCBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoNCgpKSB8fAorICAgICAgICAgICAgIG1f
bm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omg1KCkpIHx8IG1fbm9kZS0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6Omg2KCkpKSB7CisgICAgICAgIGVuZExpbmUgPSB0cnVlOworCisgICAgICAgIC8v
IEluIGNlcnRhaW4gY2FzZXMsIGVtaXQgYSBuZXcgbmV3bGluZSBjaGFyYWN0ZXIgZm9yIHRoaXMg
bm9kZQorICAgICAgICAvLyByZWdhcmRsZXNzIG9mIHdoZXRoZXIgd2UgZW1pdCBhbm90aGVyIG9u
ZS4KKyAgICAgICAgLy8gRklYTUU6IFNvbWUgZGF5IHdlIGNvdWxkIGRvIHRoaXMgZm9yIG90aGVy
IHRhZ3MuCisgICAgICAgIC8vIEhvd2V2ZXIsIGRvaW5nIGl0IGp1c3QgZm9yIHRoZSB0YWdzIGFi
b3ZlIG1ha2VzIGl0IG1vcmUgbGlrZWx5CisgICAgICAgIC8vIHdlJ2xsIGVuZCB1cCBnZXR0aW5n
IHRoZSByaWdodCByZXN1bHQgd2l0aG91dCBtYXJnaW4gY29sbGFwc2luZy4KKyAgICAgICAgLy8g
Rm9yIGV4YW1wbGU6IDxkaXY+PHA+dGV4dDwvcD48L2Rpdj4gd2lsbCB3b3JrIHJpZ2h0IGV2ZW4g
aWYgYm90aAorICAgICAgICAvLyB0aGUgPGRpdj4gYW5kIHRoZSA8cD4gaGF2ZSBib3R0b20gbWFy
Z2lucy4KKyAgICAgICAgUmVuZGVyT2JqZWN0ICpyZW5kZXJlciA9IG1fbm9kZS0+cmVuZGVyZXIo
KTsKKyAgICAgICAgaWYgKHJlbmRlcmVyKSB7CisgICAgICAgICAgICBSZW5kZXJTdHlsZSAqc3R5
bGUgPSByZW5kZXJlci0+c3R5bGUoKTsKKyAgICAgICAgICAgIGlmIChzdHlsZSkgeworICAgICAg
ICAgICAgICAgIGludCBib3R0b21NYXJnaW4gPSByZW5kZXJlci0+Y29sbGFwc2VkTWFyZ2luQm90
dG9tKCk7CisgICAgICAgICAgICAgICAgaW50IGZvbnRTaXplID0gc3R5bGUtPmh0bWxGb250KCku
Z2V0Rm9udERlZigpLmNvbXB1dGVkUGl4ZWxTaXplKCk7CisgICAgICAgICAgICAgICAgaWYgKGJv
dHRvbU1hcmdpbiAqIDIgPj0gZm9udFNpemUpIHsKKyAgICAgICAgICAgICAgICAgICAgYWRkTmV3
bGluZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTY2MCwzNCArNjMyLDIyIEBAIGJvb2wg
U2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvcjo6aGEKIAogYm9vbCBTaW1wbGlmaWVkQmFj
a3dhcmRzVGV4dEl0ZXJhdG9yOjpoYW5kbGVOb25UZXh0Tm9kZSgpCiB7Ci0gICAgc3dpdGNoICht
X25vZGUtPmlkKCkpIHsKLSAgICAgICAgY2FzZSBJRF9CUjoKLSAgICAgICAgICAgIGVtaXROZXds
aW5lRm9yQlJPclRleHQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElEX1RE
OgotICAgICAgICBjYXNlIElEX1RIOgotICAgICAgICBjYXNlIElEX0JMT0NLUVVPVEU6Ci0gICAg
ICAgIGNhc2UgSURfREQ6Ci0gICAgICAgIGNhc2UgSURfRElWOgotICAgICAgICBjYXNlIElEX0RM
OgotICAgICAgICBjYXNlIElEX0RUOgotICAgICAgICBjYXNlIElEX0gxOgotICAgICAgICBjYXNl
IElEX0gyOgotICAgICAgICBjYXNlIElEX0gzOgotICAgICAgICBjYXNlIElEX0g0OgotICAgICAg
ICBjYXNlIElEX0g1OgotICAgICAgICBjYXNlIElEX0g2OgotICAgICAgICBjYXNlIElEX0hSOgot
ICAgICAgICBjYXNlIElEX1A6Ci0gICAgICAgIGNhc2UgSURfUFJFOgotICAgICAgICBjYXNlIElE
X1RSOgotICAgICAgICBjYXNlIElEX09MOgotICAgICAgICBjYXNlIElEX1VMOgotICAgICAgICBj
YXNlIElEX0xJOgotICAgICAgICAgICAgLy8gRW1pdCBhIHNwYWNlIHRvICJicmVhayB1cCIgY29u
dGVudC4gQW55IHdvcmQgYnJlYWsKLSAgICAgICAgICAgIC8vIGNoYXJhY3RlciB3aWxsIGRvLgot
ICAgICAgICAgICAgZW1pdENoYXJhY3RlcignICcsIG1fbm9kZSwgMCwgMCk7Ci0gICAgICAgICAg
ICBicmVhazsKKyAgICBpZiAobV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YnIoKSkpCisg
ICAgICAgIGVtaXROZXdsaW5lRm9yQlJPclRleHQoKTsKKyAgICBlbHNlIGlmIChtX25vZGUtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjp0ZCAoKSkgfHwgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6dGgoKSkgfHwKKyAgICAgICAgICAgICBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpi
bG9ja3F1b3RlKCkpIHx8IG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmRkKCkpIHx8Cisg
ICAgICAgICAgICAgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZGl2KCkpIHx8CisgICAg
ICAgICAgICAgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZGwoKSkgfHwgbV9ub2RlLT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6ZHQoKSkgfHwgCisgICAgICAgICAgICAgbV9ub2RlLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6aDEoKSkgfHwgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
aDIoKSkgfHwKKyAgICAgICAgICAgICBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoMygp
KSB8fCBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoNCgpKSB8fAorICAgICAgICAgICAg
IG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omg1KCkpIHx8IG1fbm9kZS0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6Omg2KCkpIHx8CisgICAgICAgICAgICAgbV9ub2RlLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6aHIoKSkgfHwgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6bGkoKSkgfHwK
KyAgICAgICAgICAgICBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvbCgpKSB8fCBtX25v
ZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpwKCkpIHx8CisgICAgICAgICAgICAgbV9ub2RlLT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6cHJlKCkpIHx8IG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OnRyKCkpIHx8CisgICAgICAgICAgICAgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
dWwoKSkpIHsKKyAgICAgICAgLy8gRW1pdCBhIHNwYWNlIHRvICJicmVhayB1cCIgY29udGVudC4g
QW55IHdvcmQgYnJlYWsKKyAgICAgICAgLy8gY2hhcmFjdGVyIHdpbGwgZG8uCisgICAgICAgIGVt
aXRDaGFyYWN0ZXIoJyAnLCBtX25vZGUsIDAsIDApOwogICAgIH0KIAogICAgIHJldHVybiB0cnVl
OwpJbmRleDoga2h0bWwvZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjM0CmRpZmYgLXUgLXAgLXIxLjM0IGtodG1sL2VkaXRpbmcv
dmlzaWJsZV91bml0cy5jcHAKLS0tIGtodG1sL2VkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAJMjYg
TWF5IDIwMDUgMjA6MzA6MTIgLTAwMDAJMS4zNAorKysga2h0bWwvZWRpdGluZy92aXNpYmxlX3Vu
aXRzLmNwcAkyMyBKdW4gMjAwNSAyMTo1MjozMiAtMDAwMApAQCAtMjcsNyArMjcsNyBAQAogCiAj
aW5jbHVkZSA8cXN0cmluZy5oPgogCi0jaW5jbHVkZSAiaHRtbHRhZ3MuaCIKKyNpbmNsdWRlICJo
dG1sbmFtZXMuaCIKICNpbmNsdWRlICJtaXNjL2hlbHBlci5oIgogI2luY2x1ZGUgInJlbmRlcmlu
Zy9yZW5kZXJfdGV4dC5oIgogI2luY2x1ZGUgInJlbmRlcmluZy9yZW5kZXJfYmxvY2suaCIKQEAg
LTQxLDYgKzQxLDcgQEAgdXNpbmcgRE9NOjpFbGVtZW50SW1wbDsKIHVzaW5nIERPTTo6Tm9kZUlt
cGw7CiB1c2luZyBET006OlBvc2l0aW9uOwogdXNpbmcgRE9NOjpSYW5nZUltcGw7Cit1c2luZyBE
T006OkhUTUxOYW1lczsKIAogbmFtZXNwYWNlIGtodG1sIHsKIApAQCAtMzMyLDcgKzMzMyw3IEBA
IFZpc2libGVQb3NpdGlvbiBlbmRPZkxpbmUoY29uc3QgVmlzaWJsZVAKICAgICAgICAgcmV0dXJu
IFZpc2libGVQb3NpdGlvbigpOwogCiAgICAgbG9uZyBlbmRPZmZzZXQgPSAxOwotICAgIGlmIChl
bmROb2RlLT5pZCgpID09IElEX0JSKSB7CisgICAgaWYgKGVuZE5vZGUtPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjpicigpKSkgewogICAgICAgICBlbmRPZmZzZXQgPSAwOwogICAgIH0gZWxzZSBpZiAo
ZW5kQm94LT5pc0lubGluZVRleHRCb3goKSkgewogICAgICAgICBJbmxpbmVUZXh0Qm94ICplbmRU
ZXh0Qm94ID0gc3RhdGljX2Nhc3Q8SW5saW5lVGV4dEJveCAqPihlbmRCb3gpOwpJbmRleDoga2h0
bWwvaHRtbC9kdGQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2to
dG1sL2h0bWwvZHRkLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zOApkaWZmIC11IC1wIC1y
MS4zOCBraHRtbC9odG1sL2R0ZC5jcHAKLS0tIGtodG1sL2h0bWwvZHRkLmNwcAkxMiBBcHIgMjAw
NSAyMjo0OTo0MSAtMDAwMAkxLjM4CisrKyBraHRtbC9odG1sL2R0ZC5jcHAJMjMgSnVuIDIwMDUg
MjE6NTI6MzIgLTAwMDAKQEAgLTQ0LDIyMCArNDQsNzAgQEAgdXNpbmcgbmFtZXNwYWNlIERPTTsK
IC8vIDggdGFibGUKIC8vIDkgYm9keSBmcmFtZXNldAogLy8gMTAgaHRtbAorLyoKIGNvbnN0IHVu
c2lnbmVkIHNob3J0IERPTTo6dGFnUHJpb3JpdHlBcnJheVtdID0gewotICAgIDAsIC8vIDAKLSAg
ICAxLCAvLyBJRF9BID09IDEKICAgICAxLCAvLyBJRF9BQkJSCiAgICAgMSwgLy8gSURfQUNST05Z
TQotICAgIDMsIC8vIElEX0FERFJFU1MKLSAgICAxLCAvLyBJRF9BUFBMRVQKLSAgICAwLCAvLyBJ
RF9BUkVBCiAgICAgMSwgLy8gSURfQgotICAgIDAsIC8vIElEX0JBU0UKLSAgICAwLCAvLyBJRF9C
QVNFRk9OVAogICAgIDEsIC8vIElEX0JETwogICAgIDEsIC8vIElEX0JJRwotICAgIDUsIC8vIElE
X0JMT0NLUVVPVEUKLSAgIDEwLCAvLyBJRF9CT0RZCi0gICAgMCwgLy8gSURfQlIKLSAgICAxLCAv
LyBJRF9CVVRUT04KLSAgICAwLCAvLyBJRF9DQU5WQVMKLSAgICA1LCAvLyBJRF9DQVBUSU9OCi0g
ICAgNSwgLy8gSURfQ0VOVEVSCiAgICAgMSwgLy8gSURfQ0lURQogICAgIDEsIC8vIElEX0NPREUK
LSAgICAwLCAvLyBJRF9DT0wKLSAgICAxLCAvLyBJRF9DT0xHUk9VUAotICAgIDMsIC8vIElEX0RE
Ci0gICAgMSwgLy8gSURfREVMCiAgICAgMSwgLy8gSURfREZOCi0gICAgNSwgLy8gSURfRElSCi0g
ICAgNSwgLy8gSURfRElWCi0gICAgNSwgLy8gSURfREwKLSAgICAzLCAvLyBJRF9EVAogICAgIDEs
IC8vIElEX0VNCi0gICAgMCwgLy8gSURfRU1CRUQKLSAgICAzLCAvLyBJRF9GSUVMRFNFVAotICAg
IDEsIC8vIElEX0ZPTlQKLSAgICAzLCAvLyBJRF9GT1JNCi0gICAgMCwgLy8gSURfRlJBTUUKLSAg
IDEwLC8vIElEX0ZSQU1FU0VUCi0gICAgNSwgLy8gSURfSDEKLSAgICA1LCAvLyBJRF9IMgotICAg
IDUsIC8vIElEX0gzCi0gICAgNSwgLy8gSURfSDQKLSAgICA1LCAvLyBJRF9INQotICAgIDUsIC8v
IElEX0g2Ci0gICAxMCwvLyBJRF9IRUFECi0gICAgMCwgLy8gSURfSFIKLSAgIDExLC8vIElEX0hU
TUwKICAgICAxLCAvLyBJRF9JCi0gICAgMSwgLy8gSURfSUZSQU1FCi0gICAgMCwgLy8gSURfSU1H
Ci0gICAgMCwgLy8gSURfSU5QVVQKLSAgICAxLCAvLyBJRF9JTlMKLSAgICAwLCAvLyBJRF9JU0lO
REVYCiAgICAgMSwgLy8gSURfS0JECi0gICAgMCwgLy8gSURfS0VZR0VOCi0gICAgNSwgLy8gSURf
TEFCRUwKICAgICAxLCAvLyBJRF9MQVlFUgogICAgIDEsIC8vIElEX0xFR0VORAotICAgIDMsIC8v
IElEX0xJCi0gICAgMCwgLy8gSURfTElOSwotICAgIDEsIC8vIElEX01BUAotICAgIDMsIC8vIElE
X01BUlFVRUUKLSAgICA1LCAvLyBJRF9NRU5VCi0gICAgMCwgLy8gSURfTUVUQQotICAgIDUsIC8v
IElEX05PQlIKLSAgIDEwLC8vIElEX05PRU1CRUQKLSAgIDEwLC8vIElEX05PRlJBTUVTCi0gICAg
MywgLy8gSURfTk9TQ1JJUFQKICAgICAxLCAvLyBJRF9OT0xBWUVSCi0gICAgNywgLy8gSURfT0JK
RUNUCi0gICAgNSwgLy8gSURfT0wKLSAgICAxLCAvLyBJRF9PUFRHUk9VUAotICAgIDIsIC8vIElE
X09QVElPTgotICAgIDMsIC8vIElEX1AKLSAgICAwLCAvLyBJRF9QQVJBTQotICAgIDUsIC8vIElE
X1BMQUlOVEVYVAotICAgIDUsIC8vIElEX1BSRQotICAgIDEsIC8vIElEX1EKICAgICAxLCAvLyBJ
RF9TCiAgICAgMSwgLy8gSURfU0FNUAotICAgIDEsIC8vIElEX1NDUklQVAotICAgIDYsIC8vIElE
X1NFTEVDVAogICAgIDEsIC8vIElEX1NNQUxMCi0gICAgMSwgLy8gSURfU1BBTgogICAgIDEsIC8v
IElEX1NUUklLRQogICAgIDEsIC8vIElEX1NUUk9ORwotICAgIDEsIC8vIElEX1NUWUxFCiAgICAg
MSwgLy8gSURfU1VCCiAgICAgMSwgLy8gSURfU1VQCi0gICAgOSwvLyBJRF9UQUJMRQotICAgIDgs
IC8vIElEX1RCT0RZCi0gICAgNiwgLy8gSURfVEQKLSAgICAxLCAvLyBJRF9URVhUQVJFQQotICAg
IDgsIC8vIElEX1RGT09UCi0gICAgNiwgLy8gSURfVEgKLSAgICA4LCAvLyBJRF9USEVBRAotICAg
IDEsIC8vIElEX1RJVExFCi0gICAgNywgLy8gSURfVFIKICAgICAxLCAvLyBJRF9UVAogICAgIDEs
IC8vIElEX1UKLSAgICA1LCAvLyBJRF9VTAogICAgIDEsIC8vIElEX1ZBUgogICAgIDEsIC8vIElE
X1dCUgotICAgIDUsIC8vIElEX1hNUAotICAgIDAsIC8vIElEX1RFWFQKIH07CiAKIGNvbnN0IHRh
Z1N0YXR1cyBET006OmVuZFRhZ0FycmF5W10gPSB7Ci0gICAgUkVRVUlSRUQsICAvLyAwCi0gICAg
UkVRVUlSRUQsICAvLyBJRF9BID09IDEKLSAgICBSRVFVSVJFRCwgIC8vIElEX0FCQlIKKyAgICAg
UkVRVUlSRUQsICAvLyBJRF9BQkJSCiAgICAgUkVRVUlSRUQsICAvLyBJRF9BQ1JPTllNCiAgICAg
UkVRVUlSRUQsICAvLyBJRF9BRERSRVNTCi0gICAgUkVRVUlSRUQsICAvLyBJRF9BUFBMRVQKLSAg
ICBGT1JCSURERU4sIC8vIElEX0FSRUEKICAgICBSRVFVSVJFRCwgIC8vIElEX0IKLSAgICBGT1JC
SURERU4sIC8vIElEX0JBU0UKLSAgICBGT1JCSURERU4sIC8vIElEX0JBU0VGT05UCiAgICAgUkVR
VUlSRUQsICAvLyBJRF9CRE8KICAgICBSRVFVSVJFRCwgIC8vIElEX0JJRwotICAgIFJFUVVJUkVE
LCAgLy8gSURfQkxPQ0tRVU9URQotICAgIFJFUVVJUkVELCAgLy8gSURfQk9EWQotICAgIEZPUkJJ
RERFTiwgLy8gSURfQlIKLSAgICBSRVFVSVJFRCwgIC8vIElEX0JVVFRPTgotICAgIEZPUkJJRERF
TiwgLy8gSURfQ0FOVkFTCi0gICAgUkVRVUlSRUQsICAvLyBJRF9DQVBUSU9OCiAgICAgUkVRVUlS
RUQsICAvLyBJRF9DRU5URVIKICAgICBSRVFVSVJFRCwgIC8vIElEX0NJVEUKICAgICBSRVFVSVJF
RCwgIC8vIElEX0NPREUKLSAgICBGT1JCSURERU4sIC8vIElEX0NPTAotICAgIE9QVElPTkFMLCAg
Ly8gSURfQ09MR1JPVVAKLSAgICBPUFRJT05BTCwgIC8vIElEX0RECi0gICAgUkVRVUlSRUQsICAv
LyBJRF9ERUwKICAgICBSRVFVSVJFRCwgIC8vIElEX0RGTgotICAgIFJFUVVJUkVELCAgLy8gSURf
RElSCi0gICAgUkVRVUlSRUQsICAvLyBJRF9ESVYKLSAgICBSRVFVSVJFRCwgIC8vIElEX0RMCi0g
ICAgT1BUSU9OQUwsICAvLyBJRF9EVAogICAgIFJFUVVJUkVELCAgLy8gSURfRU0KLSAgICBSRVFV
SVJFRCwgIC8vIElEX0VNQkVECi0gICAgUkVRVUlSRUQsICAvLyBJRF9GSUVMRFNFVAotICAgIFJF
UVVJUkVELCAgLy8gSURfRk9OVAotICAgIFJFUVVJUkVELCAgLy8gSURfRk9STQotICAgIEZPUkJJ
RERFTiwgLy8gSURfRlJBTUUKLSAgICBSRVFVSVJFRCwgIC8vIElEX0ZSQU1FU0VUCi0gICAgUkVR
VUlSRUQsICAvLyBJRF9IMQotICAgIFJFUVVJUkVELCAgLy8gSURfSDIKLSAgICBSRVFVSVJFRCwg
IC8vIElEX0gzCi0gICAgUkVRVUlSRUQsICAvLyBJRF9INAotICAgIFJFUVVJUkVELCAgLy8gSURf
SDUKLSAgICBSRVFVSVJFRCwgIC8vIElEX0g2Ci0gICAgT1BUSU9OQUwsICAvLyBJRF9IRUFECi0g
ICAgRk9SQklEREVOLCAvLyBJRF9IUgotICAgIFJFUVVJUkVELCAgLy8gSURfSFRNTAotICAgIFJF
UVVJUkVELCAgLy8gSURfSQotICAgIFJFUVVJUkVELCAgLy8gSURfSUZSQU1FCi0gICAgRk9SQklE
REVOLCAvLyBJRF9JTUcKLSAgICBGT1JCSURERU4sIC8vIElEX0lOUFVUCi0gICAgUkVRVUlSRUQs
ICAvLyBJRF9JTlMKLSAgICBGT1JCSURERU4sIC8vIElEX0lTSU5ERVgKKyAgICAgUkVRVUlSRUQs
ICAvLyBJRF9GUkFNRVNFVAorICAgICAgUkVRVUlSRUQsICAvLyBJRF9JCiAgICAgUkVRVUlSRUQs
ICAvLyBJRF9LQkQKLSAgICBSRVFVSVJFRCwgIC8vIElEX0tFWUdFTgotICAgIFJFUVVJUkVELCAg
Ly8gSURfTEFCRUwKICAgICBSRVFVSVJFRCwgIC8vIElEX0xBWUVSCi0gICAgUkVRVUlSRUQsICAv
LyBJRF9MRUdFTkQKLSAgICBPUFRJT05BTCwgIC8vIElEX0xJCi0gICAgRk9SQklEREVOLCAvLyBJ
RF9MSU5LCi0gICAgUkVRVUlSRUQsICAvLyBJRF9NQVAKLSAgICBSRVFVSVJFRCwgIC8vIElEX01B
UlFVRUUKLSAgICBSRVFVSVJFRCwgIC8vIElEX01FTlUKLSAgICBGT1JCSURERU4sIC8vIElEX01F
VEEKICAgICBSRVFVSVJFRCwgIC8vIElEX05PQlIKICAgICBSRVFVSVJFRCwgIC8vIElEX05PRU1C
RUQKICAgICBSRVFVSVJFRCwgIC8vIElEX05PRlJBTUVTCiAgICAgUkVRVUlSRUQsICAvLyBJRF9O
T1NDUklQVAogICAgIFJFUVVJUkVELCAgLy8gSURfTk9MQVlFUgotICAgIFJFUVVJUkVELCAgLy8g
SURfT0JKRUNUCi0gICAgUkVRVUlSRUQsICAvLyBJRF9PTAotICAgIFJFUVVJUkVELCAgLy8gSURf
T1BUR1JPVVAKLSAgICBPUFRJT05BTCwgIC8vIElEX09QVElPTgotICAgIE9QVElPTkFMLCAgLy8g
SURfUAotICAgIEZPUkJJRERFTiwgLy8gSURfUEFSQU0KLSAgICBSRVFVSVJFRCwgIC8vIElEX1BM
QUlOVEVYVAotICAgIFJFUVVJUkVELCAgLy8gSURfUFJFCi0gICAgUkVRVUlSRUQsICAvLyBJRF9R
CiAgICAgUkVRVUlSRUQsICAvLyBJRF9TCiAgICAgUkVRVUlSRUQsICAvLyBJRF9TQU1QCi0gICAg
UkVRVUlSRUQsICAvLyBJRF9TQ1JJUFQKLSAgICBSRVFVSVJFRCwgIC8vIElEX1NFTEVDVAotICAg
IFJFUVVJUkVELCAgLy8gSURfU01BTEwKLSAgICBSRVFVSVJFRCwgIC8vIElEX1NQQU4KKyAgICAg
UkVRVUlSRUQsICAvLyBJRF9TTUFMTAogICAgIFJFUVVJUkVELCAgLy8gSURfU1RSSUtFCiAgICAg
UkVRVUlSRUQsICAvLyBJRF9TVFJPTkcKLSAgICBSRVFVSVJFRCwgIC8vIElEX1NUWUxFCiAgICAg
UkVRVUlSRUQsICAvLyBJRF9TVUIKICAgICBSRVFVSVJFRCwgIC8vIElEX1NVUAotICAgIFJFUVVJ
UkVELCAgLy8gSURfVEFCTEUKLSAgICBPUFRJT05BTCwgIC8vIElEX1RCT0RZCi0gICAgT1BUSU9O
QUwsICAvLyBJRF9URAotICAgIFJFUVVJUkVELCAgLy8gSURfVEVYVEFSRUEKLSAgICBPUFRJT05B
TCwgIC8vIElEX1RGT09UCi0gICAgT1BUSU9OQUwsICAvLyBJRF9USAotICAgIE9QVElPTkFMLCAg
Ly8gSURfVEhFQUQKLSAgICBSRVFVSVJFRCwgIC8vIElEX1RJVExFCi0gICAgT1BUSU9OQUwsICAv
LyBJRF9UUgogICAgIFJFUVVJUkVELCAgLy8gSURfVFQKICAgICBSRVFVSVJFRCwgIC8vIElEX1UK
LSAgICBSRVFVSVJFRCwgIC8vIElEX1VMCiAgICAgUkVRVUlSRUQsICAvLyBJRF9WQVIKICAgICBS
RVFVSVJFRCwgIC8vIElEX1dCUgotICAgIFJFUVVJUkVELCAgLy8gSURfWE1QCi0gICAgUkVRVUlS
RUQgICAvLyBJRF9URVhUCiB9OwogCisqLwogCiBzdGF0aWMgY29uc3QgdXNob3J0IHRhZ19saXN0
XzBbXSA9IHsKICAgICBJRF9URVhULApAQCAtNzY3LDIyMyArNjE3LDMgQEAgYm9vbCBET006OmNo
ZWNrQ2hpbGQodXNob3J0IHRhZ0lELCB1c2hvcgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQogfQotCi12b2lkIERPTTo6YWRkRm9yYmlkZGVuKGludCB0YWdJZCwgdXNob3J0ICpmb3JiaWRk
ZW5UYWdzKQotewotICAgIHN3aXRjaCh0YWdJZCkKLSAgICB7Ci0gICAgY2FzZSBJRF9MQUJFTDoK
LSAgICAgICAgZm9yYmlkZGVuVGFnc1tJRF9MQUJFTF0rKzsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBJRF9CVVRUT046Ci0gICAgICAgIGZvcmJpZGRlblRhZ3NbSURfQV0rKzsKLSAgICAgICAg
Zm9yYmlkZGVuVGFnc1tJRF9JTlBVVF0rKzsKLSAgICAgICAgZm9yYmlkZGVuVGFnc1tJRF9TRUxF
Q1RdKys7Ci0gICAgICAgIGZvcmJpZGRlblRhZ3NbSURfVEVYVEFSRUFdKys7Ci0gICAgICAgIGZv
cmJpZGRlblRhZ3NbSURfTEFCRUxdKys7Ci0gICAgICAgIGZvcmJpZGRlblRhZ3NbSURfQlVUVE9O
XSsrOwotICAgICAgICBmb3JiaWRkZW5UYWdzW0lEX0ZPUk1dKys7Ci0gICAgICAgIGZvcmJpZGRl
blRhZ3NbSURfSVNJTkRFWF0rKzsKLSAgICAgICAgZm9yYmlkZGVuVGFnc1tJRF9GSUVMRFNFVF0r
KzsKLSAgICAgICAgZm9yYmlkZGVuVGFnc1tJRF9JRlJBTUVdKys7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotdm9pZCBET006OnJlbW92
ZUZvcmJpZGRlbihpbnQgdGFnSWQsIHVzaG9ydCAqZm9yYmlkZGVuVGFncykKLXsKLSAgICBzd2l0
Y2godGFnSWQpCi0gICAgewotICAgIGNhc2UgSURfTEFCRUw6Ci0gICAgICAgIGZvcmJpZGRlblRh
Z3NbSURfTEFCRUxdLS07Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSURfQlVUVE9OOgotICAg
ICAgICBmb3JiaWRkZW5UYWdzW0lEX0FdLS07Ci0gICAgICAgIGZvcmJpZGRlblRhZ3NbSURfSU5Q
VVRdLS07Ci0gICAgICAgIGZvcmJpZGRlblRhZ3NbSURfU0VMRUNUXS0tOwotICAgICAgICBmb3Ji
aWRkZW5UYWdzW0lEX1RFWFRBUkVBXS0tOwotICAgICAgICBmb3JiaWRkZW5UYWdzW0lEX0xBQkVM
XS0tOwotICAgICAgICBmb3JiaWRkZW5UYWdzW0lEX0JVVFRPTl0tLTsKLSAgICAgICAgZm9yYmlk
ZGVuVGFnc1tJRF9GT1JNXS0tOwotICAgICAgICBmb3JiaWRkZW5UYWdzW0lEX0lTSU5ERVhdLS07
Ci0gICAgICAgIGZvcmJpZGRlblRhZ3NbSURfRklFTERTRVRdLS07Ci0gICAgICAgIGZvcmJpZGRl
blRhZ3NbSURfSUZSQU1FXS0tOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAg
ICBicmVhazsKLSAgICB9Ci19Ci0KLQotI2lmIDAKLQotCi1zdHJ1Y3QgYXR0cl9wcml2IHsKLSAg
ICBhdHRyX3ByaXYoKSB7IGlkID0gbGVuID0gMCwgdmFsID0gMDsgfQotICAgIGF0dHJfcHJpdih1
c2hvcnQgaSwgY29uc3QgUUNoYXIgKnYsIHVzaG9ydCBsKQotICAgIHsgaWQgPWk7IGxlbiA9IGws
IHZhbCA9IHY7IH0KLSAgICB1c2hvcnQgaWQ7Ci0gICAgY29uc3QgUUNoYXIgKnZhbDsKLSAgICB1
c2hvcnQgbGVuOwotfTsKLQotRE9NU3RyaW5nIGZpbmRfYXR0cih1c2hvcnQgaWQsIGNvbnN0IGF0
dHJfcHJpdiAqYXR0cnMpCi17Ci0gICAgaW50IGkgPSAwOwotICAgIHdoaWxlKGF0dHJzW2ldLmlk
ICE9IDApCi0gICAgewotICAgICAgICBpZihhdHRyc1tpXS5pZCA9PSBpZCkKLSAgICAgICAgICAg
IHJldHVybiBET01TdHJpbmcoYXR0cnNbaV0udmFsLCBhdHRyc1tpXS5sZW4pOwotICAgICAgICBp
Kys7Ci0gICAgfQotICAgIHJldHVybiBET01TdHJpbmcoKTsKLX0KLQotc3RhdGljIGNvbnN0IFFD
aGFyIHZhbHVlXzFfMCBbXSA9IHsgJ04nLCdPJywnTicsJ0UnIH07Ci0KLWF0dHJfcHJpdiBhdHRy
X2xpc3RfMVtdID0gewotICAgIGF0dHJfcHJpdihBVFRSX0NMRUFSLCB2YWx1ZV8xXzAsIDQpCi19
OwotCi1zdGF0aWMgY29uc3QgUUNoYXIgdmFsdWVfMl8wIFtdID0geyAnUicsJ0UnLCdDJywnVCcg
fTsKLQotYXR0cl9wcml2IGF0dHJfbGlzdF8yW10gPSB7Ci0gICAgYXR0cl9wcml2KEFUVFJfU0hB
UEUsIHZhbHVlXzJfMCwgNCkKLX07Ci0KLXN0YXRpYyBjb25zdCBRQ2hhciB2YWx1ZV8zXzAgW10g
PSB7ICdSJywnRScsJ0MnLCdUJyB9OwotCi1hdHRyX3ByaXYgYXR0cl9saXN0XzNbXSA9IHsKLSAg
ICBhdHRyX3ByaXYoQVRUUl9TSEFQRSwgdmFsdWVfM18wLCA0KQotfTsKLQotc3RhdGljIGNvbnN0
IFFDaGFyIHZhbHVlXzRfMCBbXSA9IHsgJ0QnLCdBJywnVCcsJ0EnIH07Ci0KLWF0dHJfcHJpdiBh
dHRyX2xpc3RfNFtdID0gewotICAgIGF0dHJfcHJpdihBVFRSX1ZBTFVFVFlQRSwgdmFsdWVfNF8w
LCA0KQotfTsKLQotc3RhdGljIGNvbnN0IFFDaGFyIHZhbHVlXzVfMCBbXSA9IHsgJ0cnLCdFJywn
VCcgfTsKLXN0YXRpYyBjb25zdCBRQ2hhciB2YWx1ZV81XzEgW10gPSB7ICdBJywnUCcsJ1AnLCdM
JywnSScsJ0MnLCdBJywnVCcsJ0knLCdPJywnTicsJy8nLCdYJywnLScsJ1cnLCdXJywnVycsJy0n
LCdGJywnTycsJ1InLCdNJywnLScsJ1UnLCdSJywnTCcsJ0UnLCdOJywnQycsJ08nLCdEJywnRScs
J0QnIH07Ci0KLWF0dHJfcHJpdiBhdHRyX2xpc3RfNVtdID0gewotICAgIGF0dHJfcHJpdihBVFRS
X01FVEhPRCwgdmFsdWVfNV8wLCAzKSwKLSAgICBhdHRyX3ByaXYoQVRUUl9FTkNUWVBFLCB2YWx1
ZV81XzEsIDMzKQotfTsKLQotc3RhdGljIGNvbnN0IFFDaGFyIHZhbHVlXzZfMCBbXSA9IHsgJ1Qn
LCdFJywnWCcsJ1QnIH07Ci0KLWF0dHJfcHJpdiBhdHRyX2xpc3RfNltdID0gewotICAgIGF0dHJf
cHJpdihBVFRSX1RZUEUsIHZhbHVlXzZfMCwgNCkKLX07Ci0KLXN0YXRpYyBjb25zdCBRQ2hhciB2
YWx1ZV83XzAgW10gPSB7ICdTJywnVScsJ0InLCdNJywnSScsJ1QnIH07Ci0KLWF0dHJfcHJpdiBh
dHRyX2xpc3RfN1tdID0gewotICAgIGF0dHJfcHJpdihBVFRSX1RZUEUsIHZhbHVlXzdfMCwgNikK
LX07Ci0KLXN0YXRpYyBjb25zdCBRQ2hhciB2YWx1ZV84XzAgW10gPSB7ICcxJyB9OwotCi1hdHRy
X3ByaXYgYXR0cl9saXN0XzhbXSA9IHsKLSAgICBhdHRyX3ByaXYoQVRUUl9TUEFOLCB2YWx1ZV84
XzAsIDEpCi19OwotCi1zdGF0aWMgY29uc3QgUUNoYXIgdmFsdWVfOV8wIFtdID0geyAnMScgfTsK
LQotYXR0cl9wcml2IGF0dHJfbGlzdF85W10gPSB7Ci0gICAgYXR0cl9wcml2KEFUVFJfU1BBTiwg
dmFsdWVfOV8wLCAxKQotfTsKLQotc3RhdGljIGNvbnN0IFFDaGFyIHZhbHVlXzEwXzAgW10gPSB7
ICcxJyB9Owotc3RhdGljIGNvbnN0IFFDaGFyIHZhbHVlXzEwXzEgW10gPSB7ICcxJyB9OwotCi1h
dHRyX3ByaXYgYXR0cl9saXN0XzEwW10gPSB7Ci0gICAgYXR0cl9wcml2KEFUVFJfUk9XU1BBTiwg
dmFsdWVfMTBfMCwgMSksCi0gICAgYXR0cl9wcml2KEFUVFJfQ09MU1BBTiwgdmFsdWVfMTBfMSwg
MSkKLX07Ci0KLXN0YXRpYyBjb25zdCBRQ2hhciB2YWx1ZV8xMV8wIFtdID0geyAnMScgfTsKLXN0
YXRpYyBjb25zdCBRQ2hhciB2YWx1ZV8xMV8xIFtdID0geyAnQScsJ1UnLCdUJywnTycgfTsKLQot
YXR0cl9wcml2IGF0dHJfbGlzdF8xMVtdID0gewotICAgIGF0dHJfcHJpdihBVFRSX0ZSQU1FQk9S
REVSLCB2YWx1ZV8xMV8wLCAxKSwKLSAgICBhdHRyX3ByaXYoQVRUUl9TQ1JPTExJTkcsIHZhbHVl
XzExXzEsIDQpCi19OwotCi1zdGF0aWMgY29uc3QgUUNoYXIgdmFsdWVfMTJfMCBbXSA9IHsgJzEn
IH07Ci1zdGF0aWMgY29uc3QgUUNoYXIgdmFsdWVfMTJfMSBbXSA9IHsgJ0EnLCdVJywnVCcsJ08n
IH07Ci0KLWF0dHJfcHJpdiBhdHRyX2xpc3RfMTJbXSA9IHsKLSAgICBhdHRyX3ByaXYoQVRUUl9G
UkFNRUJPUkRFUiwgdmFsdWVfMTJfMCwgMSksCi0gICAgYXR0cl9wcml2KEFUVFJfU0NST0xMSU5H
LCB2YWx1ZV8xMl8xLCA0KQotfTsKLQotc3RhdGljIGNvbnN0IFFDaGFyIHZhbHVlXzEzXzAgW10g
PSB7ICctJywnLycsJy8nLCdXJywnMycsJ0MnLCcvJywnLycsJ0QnLCdUJywnRCcgfTsKLXN0YXRp
YyBjb25zdCBRQ2hhciB2YWx1ZV8xM18xIFtdID0geyAnVCcsJ1InLCdBJywnTicsJ1MnLCdJJywn
VCcsJ0knLCdPJywnTicsJ0EnLCdMJywnLycsJy8nLCdFJywnTicgfTsKLQotYXR0cl9wcml2IGF0
dHJfbGlzdF8xM1tdID0gewotICAgIGF0dHJfcHJpdihBVFRSX1ZFUlNJT04sIHZhbHVlXzEzXzAs
IDExKSwKLSAgICBhdHRyX3ByaXYoQVRUUl9IVE1MLCB2YWx1ZV8xM18xLCAxNikKLX07Ci0KLURP
TVN0cmluZyBET006OmZpbmREZWZBdHRyTm9uZSh1c2hvcnQpCi17Ci0gICAgcmV0dXJuIERPTVN0
cmluZygpOwotfTsKLURPTVN0cmluZyBET006OmZpbmREZWZBdHRyQlIodXNob3J0IGlkKQotewot
ICAgIHJldHVybiBmaW5kX2F0dHIoaWQsIGF0dHJfbGlzdF8xKTsKLX0KLURPTVN0cmluZyBET006
OmZpbmREZWZBdHRyQSh1c2hvcnQgaWQpCi17Ci0gICAgcmV0dXJuIGZpbmRfYXR0cihpZCwgYXR0
cl9saXN0XzIpOwotfQotRE9NU3RyaW5nIERPTTo6ZmluZERlZkF0dHJBUkVBKHVzaG9ydCBpZCkK
LXsKLSAgICByZXR1cm4gZmluZF9hdHRyKGlkLCBhdHRyX2xpc3RfMyk7Ci19Ci1ET01TdHJpbmcg
RE9NOjpmaW5kRGVmQXR0clBBUkFNKHVzaG9ydCBpZCkKLXsKLSAgICByZXR1cm4gZmluZF9hdHRy
KGlkLCBhdHRyX2xpc3RfNCk7Ci19Ci1ET01TdHJpbmcgRE9NOjpmaW5kRGVmQXR0ckZPUk0odXNo
b3J0IGlkKQotewotICAgIHJldHVybiBmaW5kX2F0dHIoaWQsIGF0dHJfbGlzdF81KTsKLX0KLURP
TVN0cmluZyBET006OmZpbmREZWZBdHRySU5QVVQodXNob3J0IGlkKQotewotICAgIHJldHVybiBm
aW5kX2F0dHIoaWQsIGF0dHJfbGlzdF82KTsKLX0KLURPTVN0cmluZyBET006OmZpbmREZWZBdHRy
QlVUVE9OKHVzaG9ydCBpZCkKLXsKLSAgICByZXR1cm4gZmluZF9hdHRyKGlkLCBhdHRyX2xpc3Rf
Nyk7Ci19Ci1ET01TdHJpbmcgRE9NOjpmaW5kRGVmQXR0ckNPTEdST1VQKHVzaG9ydCBpZCkKLXsK
LSAgICByZXR1cm4gZmluZF9hdHRyKGlkLCBhdHRyX2xpc3RfOCk7Ci19Ci1ET01TdHJpbmcgRE9N
OjpmaW5kRGVmQXR0ckNPTCh1c2hvcnQgaWQpCi17Ci0gICAgcmV0dXJuIGZpbmRfYXR0cihpZCwg
YXR0cl9saXN0XzkpOwotfQotRE9NU3RyaW5nIERPTTo6ZmluZERlZkF0dHJUSCh1c2hvcnQgaWQp
Ci17Ci0gICAgcmV0dXJuIGZpbmRfYXR0cihpZCwgYXR0cl9saXN0XzEwKTsKLX0KLURPTVN0cmlu
ZyBET006OmZpbmREZWZBdHRyRlJBTUUodXNob3J0IGlkKQotewotICAgIHJldHVybiBmaW5kX2F0
dHIoaWQsIGF0dHJfbGlzdF8xMSk7Ci19Ci1ET01TdHJpbmcgRE9NOjpmaW5kRGVmQXR0cklGUkFN
RSh1c2hvcnQgaWQpCi17Ci0gICAgcmV0dXJuIGZpbmRfYXR0cihpZCwgYXR0cl9saXN0XzEyKTsK
LX0KLURPTVN0cmluZyBET006OmZpbmREZWZBdHRySFRNTCh1c2hvcnQgaWQpCi17Ci0gICAgcmV0
dXJuIGZpbmRfYXR0cihpZCwgYXR0cl9saXN0XzEzKTsKLX0KLQotI2VuZGlmCkluZGV4OiBraHRt
bC9odG1sL2R0ZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1s
L2h0bWwvZHRkLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNQpkaWZmIC11IC1wIC1yMS41IGto
dG1sL2h0bWwvZHRkLmgKLS0tIGtodG1sL2h0bWwvZHRkLmgJMTIgQXByIDIwMDUgMjI6NDk6NDEg
LTAwMDAJMS41CisrKyBraHRtbC9odG1sL2R0ZC5oCTIzIEp1biAyMDA1IDIxOjUyOjMyIC0wMDAw
CkBAIC0yMywzNiArMjMsMTEgQEAKICNkZWZpbmUgX0RPTV9kdGRfaF8KIAogI2luY2x1ZGUgImRv
bS9kb21fc3RyaW5nLmgiCi0jaW5jbHVkZSAibWlzYy9odG1sdGFncy5oIgogCiBuYW1lc3BhY2Ug
RE9NCiB7CiAKLXZvaWQgYWRkRm9yYmlkZGVuKGludCB0YWdJZCwgdXNob3J0ICpmb3JiaWRkZW5U
YWdzKTsKLXZvaWQgcmVtb3ZlRm9yYmlkZGVuKGludCB0YWdJZCwgdXNob3J0ICpmb3JiaWRkZW5U
YWdzKTsKLQotZW51bSB0YWdTdGF0dXMgeyBPUFRJT05BTCwgUkVRVUlSRUQsIEZPUkJJRERFTiB9
OwotCiBib29sIGNoZWNrQ2hpbGQodXNob3J0IHRhZ0lELCB1c2hvcnQgY2hpbGRJRCwgYm9vbCBz
dHJpY3QpOwogCi1leHRlcm4gY29uc3QgdW5zaWduZWQgc2hvcnQgdGFnUHJpb3JpdHlBcnJheVtd
OwotZXh0ZXJuIGNvbnN0IHRhZ1N0YXR1cyBlbmRUYWdBcnJheVtdOwotCi1pbmxpbmUgdW5zaWdu
ZWQgc2hvcnQgdGFnUHJpb3JpdHkoUV9VSU5UMzIgdGFnSWQpCi17Ci0gICAgLy8gVHJlYXQgY3Vz
dG9tIGVsZW1lbnRzIHRoZSBzYW1lIGFzIDxzcGFuPjsgYWxzbyBkb24ndCByZWFkIHBhc3QgdGhl
IGVuZCBvZiB0aGUgYXJyYXkuCi0gICAgaWYgKHRhZ0lkID4gSURfTEFTVF9UQUcpCi0gICAgICAg
IHJldHVybiB0YWdQcmlvcml0eUFycmF5W0lEX1NQQU5dOwotICAgIHJldHVybiB0YWdQcmlvcml0
eUFycmF5W3RhZ0lkXTsKLX0KLQotaW5saW5lIHRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudChR
X1VJTlQzMiB0YWdJZCkKLXsKLSAgICAvLyBUcmVhdCBjdXN0b20gZWxlbWVudHMgdGhlIHNhbWUg
YXMgPHNwYW4+OyBhbHNvIGRvbid0IHJlYWQgcGFzdCB0aGUgZW5kIG9mIHRoZSBhcnJheS4KLSAg
ICBpZiAodGFnSWQgPiBJRF9MQVNUX1RBRykKLSAgICAgICAgcmV0dXJuIGVuZFRhZ0FycmF5W0lE
X1NQQU5dOwotICAgIHJldHVybiBlbmRUYWdBcnJheVt0YWdJZF07Ci19Ci0KIH0gLy9uYW1lc3Bh
Y2UgRE9NCiAjZW5kaWYKSW5kZXg6IGtodG1sL2h0bWwvaHRtbF9iYXNlaW1wbC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sX2Jhc2VpbXBs
LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS43MgpkaWZmIC11IC1wIC1yMS43MiBraHRtbC9o
dG1sL2h0bWxfYmFzZWltcGwuY3BwCi0tLSBraHRtbC9odG1sL2h0bWxfYmFzZWltcGwuY3BwCTEy
IE1heSAyMDA1IDE3OjExOjIxIC0wMDAwCTEuNzIKKysrIGtodG1sL2h0bWwvaHRtbF9iYXNlaW1w
bC5jcHAJMjMgSnVuIDIwMDUgMjE6NTI6MzMgLTAwMDAKQEAgLTQ4LDcgKzQ4LDcgQEAgdXNpbmcg
bmFtZXNwYWNlIERPTTsKIHVzaW5nIG5hbWVzcGFjZSBraHRtbDsKIAogSFRNTEJvZHlFbGVtZW50
SW1wbDo6SFRNTEJvZHlFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAgIDogSFRNTEVs
ZW1lbnRJbXBsKGRvYyksIG1fbGlua0RlY2woMCkKKyAgICA6IEhUTUxFbGVtZW50SW1wbChIVE1M
TmFtZXM6OmJvZHkoKSwgZG9jKSwgbV9saW5rRGVjbCgwKQogewogfQogCkBAIC02MSwxMSArNjEs
NiBAQCBIVE1MQm9keUVsZW1lbnRJbXBsOjp+SFRNTEJvZHlFbGVtZW50SW1wCiAgICAgfQogfQog
Ci1Ob2RlSW1wbDo6SWQgSFRNTEJvZHlFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJl
dHVybiBJRF9CT0RZOwotfQotCiB2b2lkIEhUTUxCb2R5RWxlbWVudEltcGw6OmNyZWF0ZUxpbmtE
ZWNsKCkKIHsKICAgICBtX2xpbmtEZWNsID0gbmV3IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9u
SW1wbDsKQEAgLTI4OSw3ICsyODQsMTggQEAgdm9pZCBIVE1MQm9keUVsZW1lbnRJbXBsOjpzZXRW
TGluayhjb25zdAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MRnJhbWVFbGVtZW50SW1wbDo6
SFRNTEZyYW1lRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50
SW1wbChkb2MpCisgICAgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjpmcmFtZSgpLCBkb2Mp
Cit7CisgICAgaW5pdCgpOworfQorCitIVE1MRnJhbWVFbGVtZW50SW1wbDo6SFRNTEZyYW1lRWxl
bWVudEltcGwoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnRQdHIgKmRvYykK
KyAgICA6IEhUTUxFbGVtZW50SW1wbCh0YWdOYW1lLCBkb2MpCit7CisgICAgaW5pdCgpOworfQor
Cit2b2lkIEhUTUxGcmFtZUVsZW1lbnRJbXBsOjppbml0KCkKIHsKICAgICBtX2ZyYW1lQm9yZGVy
ID0gdHJ1ZTsKICAgICBtX2ZyYW1lQm9yZGVyU2V0ID0gZmFsc2U7CkBAIC0zMDMsMTEgKzMwOSw2
IEBAIEhUTUxGcmFtZUVsZW1lbnRJbXBsOjp+SFRNTEZyYW1lRWxlbWVudEkKIHsKIH0KIAotTm9k
ZUltcGw6OklkIEhUTUxGcmFtZUVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IElEX0ZSQU1FOwotfQotCiBib29sIEhUTUxGcmFtZUVsZW1lbnRJbXBsOjppc1VSTEFsbG93ZWQo
Y29uc3QgQXRvbWljU3RyaW5nICZVUkxTdHJpbmcpIGNvbnN0CiB7CiAgICAgaWYgKFVSTFN0cmlu
Zy5pc0VtcHR5KCkpIHsKQEAgLTQ4Miw3ICs0ODMsNyBAQCB2b2lkIEhUTUxGcmFtZUVsZW1lbnRJ
bXBsOjphdHRhY2goKQogCiAgICAgLy8gaW5oZXJpdCBkZWZhdWx0IHNldHRpbmdzIGZyb20gcGFy
ZW50IGZyYW1lc2V0CiAgICAgZm9yIChOb2RlSW1wbCAqbm9kZSA9IHBhcmVudE5vZGUoKTsgbm9k
ZTsgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKSkKLSAgICAgICAgaWYgKG5vZGUtPmlkKCkgPT0g
SURfRlJBTUVTRVQpIHsKKyAgICAgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpm
cmFtZXNldCgpKSkgewogICAgICAgICAgICAgSFRNTEZyYW1lU2V0RWxlbWVudEltcGwqIGZyYW1l
c2V0ID0gc3RhdGljX2Nhc3Q8SFRNTEZyYW1lU2V0RWxlbWVudEltcGwqPihub2RlKTsKICAgICAg
ICAgICAgIGlmICghbV9mcmFtZUJvcmRlclNldCkKICAgICAgICAgICAgICAgICBtX2ZyYW1lQm9y
ZGVyID0gZnJhbWVzZXQtPmZyYW1lQm9yZGVyKCk7CkBAIC02NjEsNyArNjYyLDcgQEAgdm9pZCBI
VE1MRnJhbWVFbGVtZW50SW1wbDo6c2V0U3JjKGNvbnN0IAogLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQog
CiBIVE1MRnJhbWVTZXRFbGVtZW50SW1wbDo6SFRNTEZyYW1lU2V0RWxlbWVudEltcGwoRG9jdW1l
bnRQdHIgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50SW1wbChkb2MpCisgICAgOiBIVE1MRWxlbWVu
dEltcGwoSFRNTE5hbWVzOjpmcmFtZXNldCgpLCBkb2MpCiB7CiAgICAgLy8gZGVmYXVsdCB2YWx1
ZSBmb3Igcm93cyBhbmQgY29scy4uLgogICAgIG1fdG90YWxSb3dzID0gMTsKQEAgLTY4NSwxMSAr
Njg2LDYgQEAgSFRNTEZyYW1lU2V0RWxlbWVudEltcGw6On5IVE1MRnJhbWVTZXRFbAogICAgICAg
ICBkZWxldGUgW10gbV9jb2xzOwogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTEZyYW1lU2V0RWxlbWVu
dEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfRlJBTUVTRVQ7Ci19Ci0KIHZvaWQg
SFRNTEZyYW1lU2V0RWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJp
YnV0ZUltcGwgKmF0dHIpCiB7CiAgICAgc3dpdGNoKGF0dHItPmlkKCkpCkBAIC03NTIsOCArNzQ4
LDcgQEAgdm9pZCBIVE1MRnJhbWVTZXRFbGVtZW50SW1wbDo6YXR0YWNoKCkKICAgICBIVE1MRWxl
bWVudEltcGwqIG5vZGUgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwqPihwYXJlbnROb2Rl
KCkpOwogICAgIHdoaWxlKG5vZGUpCiAgICAgewotICAgICAgICBpZihub2RlLT5pZCgpID09IElE
X0ZSQU1FU0VUKQotICAgICAgICB7CisgICAgICAgIGlmIChub2RlLT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6ZnJhbWVzZXQoKSkpIHsKICAgICAgICAgICAgIEhUTUxGcmFtZVNldEVsZW1lbnRJbXBs
KiBmcmFtZXNldCA9IHN0YXRpY19jYXN0PEhUTUxGcmFtZVNldEVsZW1lbnRJbXBsKj4obm9kZSk7
CiAgICAgICAgICAgICBpZighZnJhbWVCb3JkZXJTZXQpICBmcmFtZWJvcmRlciA9IGZyYW1lc2V0
LT5mcmFtZUJvcmRlcigpOwogICAgICAgICAgICAgaWYoIW5vcmVzaXplKSAgbm9yZXNpemUgPSBm
cmFtZXNldC0+bm9SZXNpemUoKTsKQEAgLTgxNyw3ICs4MTIsNyBAQCB2b2lkIEhUTUxGcmFtZVNl
dEVsZW1lbnRJbXBsOjpzZXRSb3dzKGNvCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxIZWFk
RWxlbWVudEltcGw6OkhUTUxIZWFkRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgICA6
IEhUTUxFbGVtZW50SW1wbChkb2MpCisgICAgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjpo
ZWFkKCksIGRvYykKIHsKIH0KIApAQCAtODI1LDExICs4MjAsNiBAQCBIVE1MSGVhZEVsZW1lbnRJ
bXBsOjp+SFRNTEhlYWRFbGVtZW50SW1wCiB7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MSGVhZEVs
ZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0hFQUQ7Ci19Ci0KIERPTVN0
cmluZyBIVE1MSGVhZEVsZW1lbnRJbXBsOjpwcm9maWxlKCkgY29uc3QKIHsKICAgICByZXR1cm4g
Z2V0QXR0cmlidXRlKEFUVFJfUFJPRklMRSk7CkBAIC04NDMsNyArODMzLDcgQEAgdm9pZCBIVE1M
SGVhZEVsZW1lbnRJbXBsOjpzZXRQcm9maWxlKGNvbgogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBI
VE1MSHRtbEVsZW1lbnRJbXBsOjpIVE1MSHRtbEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2Mp
Ci0gICAgOiBIVE1MRWxlbWVudEltcGwoZG9jKQorICAgIDogSFRNTEVsZW1lbnRJbXBsKEhUTUxO
YW1lczo6aHRtbCgpLCBkb2MpCiB7CiB9CiAKQEAgLTg1MSwxMSArODQxLDYgQEAgSFRNTEh0bWxF
bGVtZW50SW1wbDo6fkhUTUxIdG1sRWxlbWVudEltcAogewogfQogCi1Ob2RlSW1wbDo6SWQgSFRN
TEh0bWxFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9IVE1MOwotfQot
CiBET01TdHJpbmcgSFRNTEh0bWxFbGVtZW50SW1wbDo6dmVyc2lvbigpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIGdldEF0dHJpYnV0ZShBVFRSX1ZFUlNJT04pOwpAQCAtODY4LDcgKzg1Myw3IEBAIHZv
aWQgSFRNTEh0bWxFbGVtZW50SW1wbDo6c2V0VmVyc2lvbihjb24KIAogLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQogCi1IVE1MSUZyYW1lRWxlbWVudEltcGw6OkhUTUxJRnJhbWVFbGVtZW50SW1wbChEb2N1
bWVudFB0ciAqZG9jKSA6IEhUTUxGcmFtZUVsZW1lbnRJbXBsKGRvYykKK0hUTUxJRnJhbWVFbGVt
ZW50SW1wbDo6SFRNTElGcmFtZUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpIDogSFRNTEZy
YW1lRWxlbWVudEltcGwoSFRNTE5hbWVzOjppZnJhbWUoKSwgZG9jKQogewogICAgIG1fZnJhbWVC
b3JkZXIgPSBmYWxzZTsKICAgICBtX21hcmdpbldpZHRoID0gLTE7CkBAIC04ODAsMTEgKzg2NSw2
IEBAIEhUTUxJRnJhbWVFbGVtZW50SW1wbDo6fkhUTUxJRnJhbWVFbGVtZW4KIHsKIH0KIAotTm9k
ZUltcGw6OklkIEhUTUxJRnJhbWVFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVy
biBJRF9JRlJBTUU7Ci19Ci0KIGJvb2wgSFRNTElGcmFtZUVsZW1lbnRJbXBsOjptYXBUb0VudHJ5
KE5vZGVJbXBsOjpJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdAog
ewogICAgIHN3aXRjaCAoYXR0cikgewpJbmRleDoga2h0bWwvaHRtbC9odG1sX2Jhc2VpbXBsLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sX2Jh
c2VpbXBsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjcKZGlmZiAtdSAtcCAtcjEuMjcga2h0
bWwvaHRtbC9odG1sX2Jhc2VpbXBsLmgKLS0tIGtodG1sL2h0bWwvaHRtbF9iYXNlaW1wbC5oCTEx
IE1heSAyMDA1IDA1OjQ5OjM0IC0wMDAwCTEuMjcKKysrIGtodG1sL2h0bWwvaHRtbF9iYXNlaW1w
bC5oCTIzIEp1biAyMDA1IDIxOjUyOjMzIC0wMDAwCkBAIC0yNiw3ICsyNiw2IEBACiAjaWZuZGVm
IEhUTUxfQkFTRUlNUExfSAogI2RlZmluZSBIVE1MX0JBU0VJTVBMX0gKIAotI2luY2x1ZGUgImh0
bWwvZHRkLmgiCiAjaW5jbHVkZSAiaHRtbC9odG1sX2VsZW1lbnRpbXBsLmgiCiAjaW5jbHVkZSAi
bWlzYy9raHRtbGxheW91dC5oIgogCkBAIC01NSw4ICs1NCw5IEBAIHB1YmxpYzoKICAgICBIVE1M
Qm9keUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpOwogICAgIH5IVE1MQm9keUVsZW1lbnRJ
bXBsKCk7CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7Ci0KKyAgICB2aXJ0dWFsIEhUTUxU
YWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1
aXJlZDsgfQorICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMTA7
IH0KKyAgICAKICAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShOb2RlSW1wbDo6SWQgYXR0ciwg
TWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHBh
cnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKik7CiAKQEAgLTkyLDExICs5
MiwxNCBAQCBjbGFzcyBIVE1MRnJhbWVFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MCiAKIHB1Ymxp
YzoKICAgICBIVE1MRnJhbWVFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKTsKLQorICAgIEhU
TUxGcmFtZUVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50
UHRyKiBkb2MpOwogICAgIH5IVE1MRnJhbWVFbGVtZW50SW1wbCgpOwogCi0gICAgdmlydHVhbCBJ
ZCBpZCgpIGNvbnN0OworICAgIHZvaWQgaW5pdCgpOwogCisgICAgdmlydHVhbCBIVE1MVGFnU3Rh
dHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzRm9yYmlkZGVu
OyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAwOyB9Cisg
IAogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJ
bXBsICopOwogICAgIHZpcnR1YWwgdm9pZCBhdHRhY2goKTsKICAgICB2aXJ0dWFsIHZvaWQgZGV0
YWNoKCk7CkBAIC0xNjgsMTAgKzE3MSwxMCBAQCBjbGFzcyBIVE1MRnJhbWVTZXRFbGVtZW50SW1w
bCA6IHB1YmxpYyBICiAgICAgZnJpZW5kIGNsYXNzIGtodG1sOjpSZW5kZXJGcmFtZVNldDsKIHB1
YmxpYzoKICAgICBIVE1MRnJhbWVTZXRFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKTsKLQog
ICAgIH5IVE1MRnJhbWVTZXRFbGVtZW50SW1wbCgpOwogCi0gICAgdmlydHVhbCBJZCBpZCgpIGNv
bnN0OworICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0
IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3Jp
dHkoKSBjb25zdCB7IHJldHVybiAxMDsgfQogCiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVk
QXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKik7CiAgICAgdmlydHVhbCB2b2lkIGF0dGFj
aCgpOwpAQCAtMjE2LDEwICsyMTksMTAgQEAgY2xhc3MgSFRNTEhlYWRFbGVtZW50SW1wbCA6IHB1
YmxpYyBIVE1MRQogewogcHVibGljOgogICAgIEhUTUxIZWFkRWxlbWVudEltcGwoRG9jdW1lbnRQ
dHIgKmRvYyk7Ci0KICAgICB+SFRNTEhlYWRFbGVtZW50SW1wbCgpOwogCi0gICAgdmlydHVhbCBJ
ZCBpZCgpIGNvbnN0OworICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVu
dCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c09wdGlvbmFsOyB9CisgICAgdmlydHVhbCBpbnQg
dGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAxMDsgfQogCiAgICAgRE9NU3RyaW5nIHByb2Zp
bGUoKSBjb25zdDsKICAgICB2b2lkIHNldFByb2ZpbGUoY29uc3QgRE9NU3RyaW5nICYpOwpAQCAt
MjMzLDcgKzIzNiw4IEBAIHB1YmxpYzoKICAgICBIVE1MSHRtbEVsZW1lbnRJbXBsKERvY3VtZW50
UHRyICpkb2MpOwogICAgIH5IVE1MSHRtbEVsZW1lbnRJbXBsKCk7CiAKLSAgICB2aXJ0dWFsIElk
IGlkKCkgY29uc3Q7CisgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50
KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzUmVxdWlyZWQ7IH0KKyAgICB2aXJ0dWFsIGludCB0
YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDExOyB9CiAKICAgICBET01TdHJpbmcgdmVyc2lv
bigpIGNvbnN0OwogICAgIHZvaWQgc2V0VmVyc2lvbihjb25zdCBET01TdHJpbmcgJik7CkBAIC0y
NDYsMTAgKzI1MCwxMCBAQCBjbGFzcyBIVE1MSUZyYW1lRWxlbWVudEltcGwgOiBwdWJsaWMgSFRN
CiB7CiBwdWJsaWM6CiAgICAgSFRNTElGcmFtZUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2Mp
OwotCiAgICAgfkhUTUxJRnJhbWVFbGVtZW50SW1wbCgpOwogCi0gICAgdmlydHVhbCBJZCBpZCgp
IGNvbnN0OworICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNv
bnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJp
b3JpdHkoKSBjb25zdCB7IHJldHVybiAxOyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRy
eShOb2RlSW1wbDo6SWQgYXR0ciwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3Q7
CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUlt
cGwgKmF0dHIpOwpJbmRleDoga2h0bWwvaHRtbC9odG1sX2Jsb2NraW1wbC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sX2Jsb2NraW1wbC5j
cHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTcKZGlmZiAtdSAtcCAtcjEuMTcga2h0bWwvaHRt
bC9odG1sX2Jsb2NraW1wbC5jcHAKLS0tIGtodG1sL2h0bWwvaHRtbF9ibG9ja2ltcGwuY3BwCTEx
IE1heSAyMDA1IDA1OjQ5OjM0IC0wMDAwCTEuMTcKKysrIGtodG1sL2h0bWwvaHRtbF9ibG9ja2lt
cGwuY3BwCTIzIEp1biAyMDA1IDIxOjUyOjMzIC0wMDAwCkBAIC0zNyw3ICszNyw3IEBAIHVzaW5n
IG5hbWVzcGFjZSBraHRtbDsKIHVzaW5nIG5hbWVzcGFjZSBET007CiAKIEhUTUxCbG9ja3F1b3Rl
RWxlbWVudEltcGw6OkhUTUxCbG9ja3F1b3RlRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykK
LSAgICA6IEhUTUxFbGVtZW50SW1wbChkb2MpCisgICAgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5h
bWVzOjpibG9ja3F1b3RlKCksIGRvYykKIHsKIH0KIApAQCAtNDUsMTEgKzQ1LDYgQEAgSFRNTEJs
b2NrcXVvdGVFbGVtZW50SW1wbDo6fkhUTUxCbG9ja3F1bwogewogfQogCi1Ob2RlSW1wbDo6SWQg
SFRNTEJsb2NrcXVvdGVFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9C
TE9DS1FVT1RFOwotfQotCiBET01TdHJpbmcgSFRNTEJsb2NrcXVvdGVFbGVtZW50SW1wbDo6Y2l0
ZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGdldEF0dHJpYnV0ZShBVFRSX0NJVEUpOwpAQCAtNjMs
NyArNTgsNyBAQCB2b2lkIEhUTUxCbG9ja3F1b3RlRWxlbWVudEltcGw6OnNldENpdGUoCiAvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxEaXZFbGVtZW50SW1wbDo6SFRNTERpdkVsZW1lbnRJbXBs
KERvY3VtZW50UHRyICpkb2MpCi0gICAgOiBIVE1MRWxlbWVudEltcGwoZG9jKQorICAgIDogSFRN
TEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6ZGl2KCksIGRvYykKIHsKIH0KIApAQCAtNzEsMTEgKzY2
LDYgQEAgSFRNTERpdkVsZW1lbnRJbXBsOjp+SFRNTERpdkVsZW1lbnRJbXBsKAogewogfQogCi1O
b2RlSW1wbDo6SWQgSFRNTERpdkVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IElEX0RJVjsKLX0KLQogYm9vbCBIVE1MRGl2RWxlbWVudEltcGw6Om1hcFRvRW50cnkoTm9kZUlt
cGw6OklkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0CiB7CiAgICAg
aWYgKGF0dHIgPT0gQVRUUl9BTElHTikgewpAQCAtMTIwLDcgKzExMCw3IEBAIHZvaWQgSFRNTERp
dkVsZW1lbnRJbXBsOjpzZXRBbGlnbihjb25zdCAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogSFRN
TEhSRWxlbWVudEltcGw6OkhUTUxIUkVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0gICAg
OiBIVE1MRWxlbWVudEltcGwoZG9jKQorICAgIDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6
aHIoKSwgZG9jKQogewogfQogCkBAIC0xMjgsMTEgKzExOCw2IEBAIEhUTUxIUkVsZW1lbnRJbXBs
Ojp+SFRNTEhSRWxlbWVudEltcGwoKQogewogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTEhSRWxlbWVu
dEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfSFI7Ci19Ci0KIGJvb2wgSFRNTEhS
RWxlbWVudEltcGw6Om1hcFRvRW50cnkoTm9kZUltcGw6OklkIGF0dHIsIE1hcHBlZEF0dHJpYnV0
ZUVudHJ5JiByZXN1bHQpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChhdHRyKSB7CkBAIC0yNTIsOCAr
MjM3LDggQEAgdm9pZCBIVE1MSFJFbGVtZW50SW1wbDo6c2V0V2lkdGgoY29uc3QgRAogCiAvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCiAKLUhUTUxIZWFkaW5nRWxlbWVudEltcGw6OkhUTUxIZWFkaW5nRWxl
bWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgdXNob3J0IF90YWdpZCkKLSAgICA6IEhUTUxHZW5l
cmljRWxlbWVudEltcGwoZG9jLCBfdGFnaWQpCitIVE1MSGVhZGluZ0VsZW1lbnRJbXBsOjpIVE1M
SGVhZGluZ0VsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50
UHRyICpkb2MpCisgICAgOiBIVE1MRWxlbWVudEltcGwodGFnTmFtZSwgZG9jKQogewogfQogCkBA
IC0yNzAsMTMgKzI1NSw4IEBAIHZvaWQgSFRNTEhlYWRpbmdFbGVtZW50SW1wbDo6c2V0QWxpZ24o
Y28KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogSFRNTFBhcmFncmFwaEVsZW1lbnRJbXBsOjpIVE1M
UGFyYWdyYXBoRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50
SW1wbChkb2MpCi17Ci19Ci0KLU5vZGVJbXBsOjpJZCBIVE1MUGFyYWdyYXBoRWxlbWVudEltcGw6
OmlkKCkgY29uc3QKKyAgICA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6OnAoKSwgZG9jKQog
ewotICAgIHJldHVybiBJRF9QOwogfQogCiBib29sIEhUTUxQYXJhZ3JhcGhFbGVtZW50SW1wbDo6
bWFwVG9FbnRyeShOb2RlSW1wbDo6SWQgYXR0ciwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3Vs
dCkgY29uc3QKQEAgLTMyMiw4ICszMDIsOCBAQCB2b2lkIEhUTUxQYXJhZ3JhcGhFbGVtZW50SW1w
bDo6c2V0QWxpZ24oCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSFRNTFByZUVsZW1lbnRJbXBs
OjpIVE1MUHJlRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgdW5zaWduZWQgc2hvcnQgX3Rh
Z2lkKQotICAgIDogSFRNTEdlbmVyaWNFbGVtZW50SW1wbChkb2MsIF90YWdpZCkKK0hUTUxQcmVF
bGVtZW50SW1wbDo6SFRNTFByZUVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05h
bWUsIERvY3VtZW50UHRyICpkb2MpCisgICAgOiBIVE1MRWxlbWVudEltcGwodGFnTmFtZSwgZG9j
KQogewogfQogCkBAIC0zNDMsMTYgKzMyMywxMSBAQCB2b2lkIEhUTUxQcmVFbGVtZW50SW1wbDo6
c2V0V2lkdGgobG9uZyB3CiBjb25zdCBpbnQgZGVmYXVsdE1pbmltdW1EZWxheSA9IDYwOwogCiBI
VE1MTWFycXVlZUVsZW1lbnRJbXBsOjpIVE1MTWFycXVlZUVsZW1lbnRJbXBsKERvY3VtZW50UHRy
ICpkb2MpCi06IEhUTUxFbGVtZW50SW1wbChkb2MpLAorOiBIVE1MRWxlbWVudEltcGwoSFRNTE5h
bWVzOjptYXJxdWVlKCksIGRvYyksCiAgIG1fbWluaW11bURlbGF5KGRlZmF1bHRNaW5pbXVtRGVs
YXkpCiB7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MTWFycXVlZUVsZW1lbnRJbXBsOjppZCgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIElEX01BUlFVRUU7Ci19Ci0KIGJvb2wgSFRNTE1hcnF1ZWVFbGVt
ZW50SW1wbDo6bWFwVG9FbnRyeShOb2RlSW1wbDo6SWQgYXR0ciwgTWFwcGVkQXR0cmlidXRlRW50
cnkmIHJlc3VsdCkgY29uc3QKIHsKICAgICBzd2l0Y2ggKGF0dHIpIHsKQEAgLTQzNCwxOSArNDA5
LDMgQEAgdm9pZCBIVE1MTWFycXVlZUVsZW1lbnRJbXBsOjpwYXJzZU1hcHBlZAogICAgICAgICAg
ICAgSFRNTEVsZW1lbnRJbXBsOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKICAgICB9CiB9
Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1IVE1MTGF5ZXJFbGVtZW50SW1wbDo6SFRNTExheWVy
RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgICA6IEhUTUxEaXZFbGVtZW50SW1wbCgg
ZG9jICkKLXsKLX0KLQotSFRNTExheWVyRWxlbWVudEltcGw6On5IVE1MTGF5ZXJFbGVtZW50SW1w
bCgpCi17Ci19Ci0KLU5vZGVJbXBsOjpJZCBIVE1MTGF5ZXJFbGVtZW50SW1wbDo6aWQoKSBjb25z
dAotewotICAgIHJldHVybiBJRF9MQVlFUjsKLX0KSW5kZXg6IGtodG1sL2h0bWwvaHRtbF9ibG9j
a2ltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9odG1s
L2h0bWxfYmxvY2tpbXBsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuOQpkaWZmIC11IC1wIC1y
MS45IGtodG1sL2h0bWwvaHRtbF9ibG9ja2ltcGwuaAotLS0ga2h0bWwvaHRtbC9odG1sX2Jsb2Nr
aW1wbC5oCTExIE1heSAyMDA1IDA1OjQ5OjM0IC0wMDAwCTEuOQorKysga2h0bWwvaHRtbC9odG1s
X2Jsb2NraW1wbC5oCTIzIEp1biAyMDA1IDIxOjUyOjMzIC0wMDAwCkBAIC0yNiw3ICsyNiw2IEBA
CiAjZGVmaW5lIEhUTUxfQkxPQ0tJTVBMX0gKIAogI2luY2x1ZGUgImh0bWxfZWxlbWVudGltcGwu
aCIKLSNpbmNsdWRlICJkdGQuaCIKIAogbmFtZXNwYWNlIERPTSB7CiAKQEAgLTQwLDggKzM5LDkg
QEAgcHVibGljOgogICAgIEhUTUxCbG9ja3F1b3RlRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRv
Yyk7CiAgICAgfkhUTUxCbG9ja3F1b3RlRWxlbWVudEltcGwoKTsKIAotICAgIHZpcnR1YWwgSWQg
aWQoKSBjb25zdDsKLQorICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVu
dCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9CisgICAgdmlydHVhbCBpbnQg
dGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiA1OyB9CisgICAgCiAgICAgRE9NU3RyaW5nIGNp
dGUoKSBjb25zdDsKICAgICB2b2lkIHNldENpdGUoY29uc3QgRE9NU3RyaW5nICYpOwogfTsKQEAg
LTU1LDggKzU1LDkgQEAgY2xhc3MgSFRNTERpdkVsZW1lbnRJbXBsIDogcHVibGljIEhUTUxFbAog
cHVibGljOgogICAgIEhUTUxEaXZFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKTsKICAgICB+
SFRNTERpdkVsZW1lbnRJbXBsKCk7Ci0KLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CisgICAg
CisgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyBy
ZXR1cm4gVGFnU3RhdHVzUmVxdWlyZWQ7IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgp
IGNvbnN0IHsgcmV0dXJuIDU7IH0KICAgICAKICAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShJ
ZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdDsKICAgICB2aXJ0dWFs
IHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqdG9rZW4pOwpA
QCAtNzIsOCArNzMsOSBAQCBjbGFzcyBIVE1MSFJFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MRWxl
CiBwdWJsaWM6CiAgICAgSFRNTEhSRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYyk7CiAgICAg
fkhUTUxIUkVsZW1lbnRJbXBsKCk7Ci0KLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CisgICAg
CisgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyBy
ZXR1cm4gVGFnU3RhdHVzRm9yYmlkZGVuOyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHko
KSBjb25zdCB7IHJldHVybiAwOyB9CiAgICAgCiAgICAgdmlydHVhbCBib29sIG1hcFRvRW50cnko
SWQgYXR0ciwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3Q7CiAgICAgdmlydHVh
bCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKik7CkBAIC05
MywxMCArOTUsMTMgQEAgcHVibGljOgogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLWNsYXNzIEhU
TUxIZWFkaW5nRWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTEdlbmVyaWNFbGVtZW50SW1wbAorY2xh
c3MgSFRNTEhlYWRpbmdFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MRWxlbWVudEltcGwKIHsKIHB1
YmxpYzoKLSAgICBIVE1MSGVhZGluZ0VsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIHVzaG9y
dCBfdGFnaWQpOworICAgIEhUTUxIZWFkaW5nRWxlbWVudEltcGwoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgdGFnTmFtZSwgRG9jdW1lbnRQdHIgKmRvYyk7CisKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0
dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsg
fQorICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gNTsgfQogCiAg
ICAgRE9NU3RyaW5nIGFsaWduKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRBbGlnbihjb25zdCBET01T
dHJpbmcgJik7CkBAIC0xMDQsMjEgKzEwOSwxNiBAQCBwdWJsaWM6CiAKIC8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KIAotLyoKLSAqIHdlcmUgbm90IHVzaW5nIEhUTUxFbGVtZW50SW1wbCBhcyBwYXJlbnQg
Y2xhc3MsIHNpbmNlIGEKLSAqIHBhcmFncmFwaCBzaG91bGQgYmUgYWJsZSB0byBmbG93IGFyb3Vu
ZCBhbGlnbmVkIG9iamVjdHMuIFRodXMKLSAqIGEgPHA+IGVsZW1lbnQgaGFzIHRvIGJlIGlubGlu
ZSwgYW5kIGlzIHJlbmRlcmVkIGJ5Ci0gKiBIVE1MQmxvY2tJbXBsOjpjYWxjUGFyYWdyYXBoCi0g
Ki8KIGNsYXNzIEhUTUxQYXJhZ3JhcGhFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MRWxlbWVudElt
cGwKIHsKIHB1YmxpYzoKICAgICBIVE1MUGFyYWdyYXBoRWxlbWVudEltcGwoRG9jdW1lbnRQdHIg
KmRvYyk7CiAKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBj
b25zdCB7IHJldHVybiBUYWdTdGF0dXNPcHRpb25hbDsgfQorICAgIHZpcnR1YWwgaW50IHRhZ1By
aW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMzsgfQorICAgIAogICAgIHZpcnR1YWwgYm9vbCBtYXBU
b0VudHJ5KElkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0OwogICAg
IHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICph
dHRyKTsKLSAgICAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CiAKICAgICBET01TdHJpbmcg
YWxpZ24oKSBjb25zdDsKICAgICB2b2lkIHNldEFsaWduKGNvbnN0IERPTVN0cmluZyAmKTsKQEAg
LTEyNiwxMyArMTI2LDE2IEBAIHB1YmxpYzoKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1jbGFz
cyBIVE1MUHJlRWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTEdlbmVyaWNFbGVtZW50SW1wbAorY2xh
c3MgSFRNTFByZUVsZW1lbnRJbXBsIDogcHVibGljIEhUTUxFbGVtZW50SW1wbAogewogcHVibGlj
OgotICAgIEhUTUxQcmVFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCB1c2hvcnQgX3RhZ2lk
KTsKKyAgICBIVE1MUHJlRWxlbWVudEltcGwoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwg
RG9jdW1lbnRQdHIgKmRvYyk7CisKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVx
dWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQorICAgIHZpcnR1
YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gNTsgfQogCiAgICAgbG9uZyB3aWR0
aCgpIGNvbnN0OwotICAgIHZvaWQgc2V0V2lkdGgoIGxvbmcgdyApOworICAgIHZvaWQgc2V0V2lk
dGgobG9uZyB3KTsKIH07CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTE0MSw5ICsxNDQsMTAg
QEAgY2xhc3MgSFRNTE1hcnF1ZWVFbGVtZW50SW1wbCA6IHB1YmxpYyBIVAogewogcHVibGljOgog
ICAgIEhUTUxNYXJxdWVlRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYyk7Ci0KLSAgICB2aXJ0
dWFsIElkIGlkKCkgY29uc3Q7CiAgICAgCisgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRh
Z1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzUmVxdWlyZWQ7IH0KKyAgICB2
aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDM7IH0KKwogICAgIHZpcnR1
YWwgYm9vbCBtYXBUb0VudHJ5KElkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQp
IGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRy
aWJ1dGVJbXBsICp0b2tlbik7CiAKQEAgLTE1MywxOCArMTU3LDUgQEAgcHJpdmF0ZToKICAgICBp
bnQgbV9taW5pbXVtRGVsYXk7CiB9OwogCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNzIEhU
TUxMYXllckVsZW1lbnRJbXBsIDogcHVibGljIEhUTUxEaXZFbGVtZW50SW1wbAotewotcHVibGlj
OgotICAgIEhUTUxMYXllckVsZW1lbnRJbXBsKCBEb2N1bWVudFB0ciAqZG9jICk7Ci0gICAgfkhU
TUxMYXllckVsZW1lbnRJbXBsKCk7Ci0KLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7Ci0KLSAg
ICBib29sIGZpeGVkOwotfTsKLQogfTsgLy9uYW1lc3BhY2UKICNlbmRpZgpJbmRleDoga2h0bWwv
aHRtbC9odG1sX2NhbnZhc2ltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2Vi
Q29yZS9raHRtbC9odG1sL2h0bWxfY2FudmFzaW1wbC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjIKZGlmZiAtdSAtcCAtcjEuMiBraHRtbC9odG1sL2h0bWxfY2FudmFzaW1wbC5oCi0tLSBraHRt
bC9odG1sL2h0bWxfY2FudmFzaW1wbC5oCTExIE1heSAyMDA1IDA1OjQ5OjM0IC0wMDAwCTEuMgor
Kysga2h0bWwvaHRtbC9odG1sX2NhbnZhc2ltcGwuaAkyMyBKdW4gMjAwNSAyMTo1MjozMyAtMDAw
MApAQCAtNDMsNyArNDMsNiBAQCBjbGFzcyBIVE1MQ2FudmFzRWxlbWVudEltcGwKIHsKIHB1Ymxp
YzoKICAgICBIVE1MQ2FudmFzRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYyk7Ci0KICAgICB+
SFRNTENhbnZhc0VsZW1lbnRJbXBsKCk7CiAKICAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7Cklu
ZGV4OiBraHRtbC9odG1sL2h0bWxfZG9jdW1lbnRpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfZG9jdW1lbnRpbXBsLmNwcCx2CnJl
dHJpZXZpbmcgcmV2aXNpb24gMS42MApkaWZmIC11IC1wIC1yMS42MCBraHRtbC9odG1sL2h0bWxf
ZG9jdW1lbnRpbXBsLmNwcAotLS0ga2h0bWwvaHRtbC9odG1sX2RvY3VtZW50aW1wbC5jcHAJMTEg
TWF5IDIwMDUgMDA6NTg6MjggLTAwMDAJMS42MAorKysga2h0bWwvaHRtbC9odG1sX2RvY3VtZW50
aW1wbC5jcHAJMjMgSnVuIDIwMDUgMjE6NTI6MzQgLTAwMDAKQEAgLTYwLDYgKzYwLDcgQEAKICNp
bmNsdWRlICJodG1sL2h0bWxfbWlzY2ltcGwuaCIKICNpbmNsdWRlICJodG1sL2h0bWxfaW1hZ2Vp
bXBsLmgiCiAjaW5jbHVkZSAiaHRtbC9odG1sX2Zvcm1pbXBsLmgiCisjaW5jbHVkZSAiaHRtbGZh
Y3RvcnkuaCIKIAogI2luY2x1ZGUgImtodG1sdmlldy5oIgogI2luY2x1ZGUgImtodG1sX3BhcnQu
aCIKQEAgLTI0NiwxMiArMjQ3LDE3IEBAIFRva2VuaXplciAqSFRNTERvY3VtZW50SW1wbDo6Y3Jl
YXRlVG9rZW4KIGJvb2wgSFRNTERvY3VtZW50SW1wbDo6Y2hpbGRBbGxvd2VkKCBOb2RlSW1wbCAq
bmV3Q2hpbGQgKQogewogICAgIC8vICMjIyBzdXBwb3J0IGNvbW1lbnRzLiBldGMgYXMgYSBjaGls
ZAotICAgIHJldHVybiAobmV3Q2hpbGQtPmlkKCkgPT0gSURfSFRNTCB8fCBuZXdDaGlsZC0+aWQo
KSA9PSBJRF9DT01NRU5UKTsKKyAgICByZXR1cm4gKG5ld0NoaWxkLT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6aHRtbCgpKSB8fCBuZXdDaGlsZC0+aXNDb21tZW50Tm9kZSgpKTsKIH0KIAogRWxlbWVu
dEltcGwgKkhUTUxEb2N1bWVudEltcGw6OmNyZWF0ZUVsZW1lbnQoIGNvbnN0IERPTVN0cmluZyAm
bmFtZSwgaW50ICZleGNlcHRpb25jb2RlICkKIHsKLSAgICByZXR1cm4gY3JlYXRlSFRNTEVsZW1l
bnQobmFtZSwgZXhjZXB0aW9uY29kZSk7CisgICAgaWYgKCFpc1ZhbGlkTmFtZShuYW1lKSkgewor
ICAgICAgICBleGNlcHRpb25jb2RlID0gRE9NRXhjZXB0aW9uOjpJTlZBTElEX0NIQVJBQ1RFUl9F
UlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHJldHVybiBIVE1MRWxlbWVudEZh
Y3Rvcnk6OmNyZWF0ZUhUTUxFbGVtZW50KEF0b21pY1N0cmluZyhuYW1lKSwgdGhpcywgMCwgZmFs
c2UpOwogfQogCiB2b2lkIEhUTUxEb2N1bWVudEltcGw6OnNsb3RIaXN0b3J5Q2hhbmdlZCgpCklu
ZGV4OiBraHRtbC9odG1sL2h0bWxfZG9jdW1lbnRpbXBsLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
L2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sX2RvY3VtZW50aW1wbC5oLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjI5CmRpZmYgLXUgLXAgLXIxLjI5IGtodG1sL2h0bWwvaHRtbF9kb2N1
bWVudGltcGwuaAotLS0ga2h0bWwvaHRtbC9odG1sX2RvY3VtZW50aW1wbC5oCTExIE1heSAyMDA1
IDAwOjU4OjI4IC0wMDAwCTEuMjkKKysrIGtodG1sL2h0bWwvaHRtbF9kb2N1bWVudGltcGwuaAky
MyBKdW4gMjAwNSAyMTo1MjozNCAtMDAwMApAQCAtMzQsNyArMzQsNyBAQCBjbGFzcyBRU3RyaW5n
OwogCiBuYW1lc3BhY2UgRE9NIHsKIAotICAgIGNsYXNzIEhUTUxFbGVtZW50SW1wbDsKK2NsYXNz
IEhUTUxFbGVtZW50SW1wbDsKIAogY2xhc3MgSFRNTERvY3VtZW50SW1wbCA6IHB1YmxpYyBET006
OkRvY3VtZW50SW1wbCwgcHVibGljIGtodG1sOjpDYWNoZWRPYmplY3RDbGllbnQKIHsKSW5kZXg6
IGtodG1sL2h0bWwvaHRtbF9lbGVtZW50aW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sX2VsZW1lbnRpbXBsLmNwcCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS44NwpkaWZmIC11IC1wIC1yMS44NyBraHRtbC9odG1sL2h0bWxfZWxlbWVu
dGltcGwuY3BwCi0tLSBraHRtbC9odG1sL2h0bWxfZWxlbWVudGltcGwuY3BwCTEzIE1heSAyMDA1
IDE2OjQ4OjUxIC0wMDAwCTEuODcKKysrIGtodG1sL2h0bWwvaHRtbF9lbGVtZW50aW1wbC5jcHAJ
MjMgSnVuIDIwMDUgMjE6NTI6MzQgLTAwMDAKQEAgLTI4LDEwICsyOCwxMCBAQAogLy8jZGVmaW5l
IEVWRU5UX0RFQlVHCiAvLyNkZWZpbmUgVU5TVVBQT1JURURfQVRUUgogCi0jaW5jbHVkZSAiaHRt
bC9kdGQuaCIKICNpbmNsdWRlICJodG1sL2h0bWxfZWxlbWVudGltcGwuaCIKICNpbmNsdWRlICJo
dG1sL2h0bWxfZG9jdW1lbnRpbXBsLmgiCiAjaW5jbHVkZSAiaHRtbC9odG1sdG9rZW5pemVyLmgi
CisjaW5jbHVkZSAiaHRtbGZhY3RvcnkuaCIKIAogI2luY2x1ZGUgIm1pc2MvaHRtbGhhc2hlcy5o
IgogI2luY2x1ZGUgImVkaXRpbmcvdmlzaWJsZV90ZXh0LmgiCkBAIC01OCw4ICs1OCw4IEBAIHVz
aW5nIG5hbWVzcGFjZSBraHRtbDsKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUhUTUxFbGVtZW50SW1wbDo6
SFRNTEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0gICAgOiBTdHlsZWRFbGVtZW50SW1w
bChkb2MpCitIVE1MRWxlbWVudEltcGw6OkhUTUxFbGVtZW50SW1wbChjb25zdCBRdWFsaWZpZWRO
YW1lJiB0YWdOYW1lLCBEb2N1bWVudFB0ciAqZG9jKQorICAgIDogU3R5bGVkRWxlbWVudEltcGwo
dGFnTmFtZSwgZG9jKQogewogfQogCkBAIC02Nyw1MSArNjcsMzEgQEAgSFRNTEVsZW1lbnRJbXBs
Ojp+SFRNTEVsZW1lbnRJbXBsKCkKIHsKIH0KIAotYm9vbCBIVE1MRWxlbWVudEltcGw6OmlzSW5s
aW5lKCkgY29uc3QKK0hUTUxUYWdTdGF0dXMgSFRNTEVsZW1lbnRJbXBsOjplbmRUYWdSZXF1aXJl
bWVudCgpIGNvbnN0CiB7Ci0gICAgaWYgKHJlbmRlcmVyKCkpCi0gICAgICAgIHJldHVybiBFbGVt
ZW50SW1wbDo6aXNJbmxpbmUoKTsKLSAgICAKLSAgICBzd2l0Y2goaWQoKSkgewotICAgICAgICBj
YXNlIElEX0E6Ci0gICAgICAgIGNhc2UgSURfRk9OVDoKLSAgICAgICAgY2FzZSBJRF9UVDoKLSAg
ICAgICAgY2FzZSBJRF9VOgotICAgICAgICBjYXNlIElEX0I6Ci0gICAgICAgIGNhc2UgSURfSToK
LSAgICAgICAgY2FzZSBJRF9TOgotICAgICAgICBjYXNlIElEX1NUUklLRToKLSAgICAgICAgY2Fz
ZSBJRF9CSUc6Ci0gICAgICAgIGNhc2UgSURfU01BTEw6Ci0gICAgCi0gICAgICAgICAgICAvLyAl
cGhyYXNlCi0gICAgICAgIGNhc2UgSURfRU06Ci0gICAgICAgIGNhc2UgSURfU1RST05HOgotICAg
ICAgICBjYXNlIElEX0RGTjoKLSAgICAgICAgY2FzZSBJRF9DT0RFOgotICAgICAgICBjYXNlIElE
X1NBTVA6Ci0gICAgICAgIGNhc2UgSURfS0JEOgotICAgICAgICBjYXNlIElEX1ZBUjoKLSAgICAg
ICAgY2FzZSBJRF9DSVRFOgotICAgICAgICBjYXNlIElEX0FCQlI6Ci0gICAgICAgIGNhc2UgSURf
QUNST05ZTToKLSAgICAKLSAgICAgICAgICAgIC8vICVzcGVjaWFsCi0gICAgICAgIGNhc2UgSURf
U1VCOgotICAgICAgICBjYXNlIElEX1NVUDoKLSAgICAgICAgY2FzZSBJRF9TUEFOOgotICAgICAg
ICBjYXNlIElEX05PQlI6Ci0gICAgICAgIGNhc2UgSURfV0JSOgotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVy
biBFbGVtZW50SW1wbDo6aXNJbmxpbmUoKTsKLSAgICB9CisgICAgaWYgKGhhc0xvY2FsTmFtZShI
VE1MTmFtZXM6OmR0KCkpIHx8IGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmRkKCkpKQorICAgICAg
ICByZXR1cm4gVGFnU3RhdHVzT3B0aW9uYWw7CisKKyAgICAvLyBTYW1lIHZhbHVlcyBhcyA8c3Bh
bj4uICBUaGlzIHdheSBjdXN0b20gdGFnIG5hbWUgZWxlbWVudHMgd2lsbCBiZWhhdmUgbGlrZSBp
bmxpbmUgc3BhbnMuCisgICAgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOworfQorCitpbnQgSFRN
TEVsZW1lbnRJbXBsOjp0YWdQcmlvcml0eSgpIGNvbnN0Cit7CisgICAgaWYgKGhhc0xvY2FsTmFt
ZShIVE1MTmFtZXM6OmFkZHJlc3MoKSkgfHwgaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6ZGQoKSkg
fHwgaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6ZHQoKSkgfHwgaGFzTG9jYWxOYW1lKEhUTUxOYW1l
czo6bm9zY3JpcHQoKSkpCisgICAgICAgIHJldHVybiAzOworICAgIGlmIChoYXNMb2NhbE5hbWUo
SFRNTE5hbWVzOjpjZW50ZXIoKSkgfHwgaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6bm9icigpKSkK
KyAgICAgICAgcmV0dXJuIDU7CisgICAgaWYgKGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om5vZW1i
ZWQoKSkgfHwgaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6bm9mcmFtZXMoKSkpCisgICAgICAgIHJl
dHVybiAxMDsKKworICAgIC8vIFNhbWUgdmFsdWVzIGFzIDxzcGFuPi4gIFRoaXMgd2F5IGN1c3Rv
bSB0YWcgbmFtZSBlbGVtZW50cyB3aWxsIGJlaGF2ZSBsaWtlIGlubGluZSBzcGFucy4KKyAgICBy
ZXR1cm4gMTsKIH0KIAogTm9kZUltcGwgKkhUTUxFbGVtZW50SW1wbDo6Y2xvbmVOb2RlKGJvb2wg
ZGVlcCkKIHsKLSAgICBIVE1MRWxlbWVudEltcGwgKmNsb25lID0gc3RhdGljX2Nhc3Q8SFRNTEVs
ZW1lbnRJbXBsICo+KGdldERvY3VtZW50KCktPmNyZWF0ZUhUTUxFbGVtZW50KGxvY2FsTmFtZVBh
cnQoaWQoKSkpKTsKKyAgICBIVE1MRWxlbWVudEltcGwgKmNsb25lID0gSFRNTEVsZW1lbnRGYWN0
b3J5OjpjcmVhdGVIVE1MRWxlbWVudChsb2NhbE5hbWUoKSwgZ2V0RG9jdW1lbnQoKSwgMCwgZmFs
c2UpOwogICAgIGlmICghY2xvbmUpCiAgICAgICAgIHJldHVybiAwOwogCkBAIC0zMjUsMjYgKzMw
NSwxNyBAQCBET01TdHJpbmcgSFRNTEVsZW1lbnRJbXBsOjpvdXRlclRleHQoKSBjCiBEb2N1bWVu
dEZyYWdtZW50SW1wbCAqSFRNTEVsZW1lbnRJbXBsOjpjcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQo
Y29uc3QgRE9NU3RyaW5nICZodG1sKQogewogICAgIC8vIHRoZSBmb2xsb3dpbmcgaXMgaW4gYWNj
b3JkYW5jZSB3aXRoIHRoZSBkZWZpbml0aW9uIGFzIHVzZWQgYnkgSUUKLSAgICBpZiggZW5kVGFn
UmVxdWlyZW1lbnQoaWQoKSkgPT0gRk9SQklEREVOICkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0g
ICAgLy8gSUUgZGlzYWxsb3dzIGlubmVySFRNTCBvbiBpbmxpbmUgZWxlbWVudHMuIEkgZG9uJ3Qg
c2VlIHdoeSB3ZSBzaG91bGQgaGF2ZSB0aGlzIHJlc3RyaWN0aW9uLCBhcyBvdXIKLSAgICAvLyBk
aHRtbCBlbmdpbmUgY2FuIGNvcGUgd2l0aCBpdC4gTGFycwotICAgIC8vaWYgKCBpc0lubGluZSgp
ICkgcmV0dXJuIGZhbHNlOwotICAgIHN3aXRjaCggaWQoKSApIHsKLSAgICAgICAgY2FzZSBJRF9D
T0w6Ci0gICAgICAgIGNhc2UgSURfQ09MR1JPVVA6Ci0gICAgICAgIGNhc2UgSURfRlJBTUVTRVQ6
Ci0gICAgICAgIGNhc2UgSURfSEVBRDoKLSAgICAgICAgY2FzZSBJRF9TVFlMRToKLSAgICAgICAg
Y2FzZSBJRF9USVRMRToKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGlmICggIWdldERvY3VtZW50KCktPmlz
SFRNTERvY3VtZW50KCkgKQotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoZW5kVGFnUmVx
dWlyZW1lbnQoKSA9PSBUYWdTdGF0dXNGb3JiaWRkZW4pCisgICAgICAgIHJldHVybiAwOworCisg
ICAgaWYgKGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmNvbCgpKSB8fCBoYXNMb2NhbE5hbWUoSFRN
TE5hbWVzOjpjb2xncm91cCgpKSB8fCBoYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpmcmFtZXNldCgp
KSB8fAorICAgICAgICBoYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpoZWFkKCkpIHx8IGhhc0xvY2Fs
TmFtZShIVE1MTmFtZXM6OnN0eWxlKCkpIHx8IGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnRpdGxl
KCkpKQorICAgICAgICByZXR1cm4gMDsKIAotICAgIERvY3VtZW50RnJhZ21lbnRJbXBsICpmcmFn
bWVudCA9IG5ldyBEb2N1bWVudEZyYWdtZW50SW1wbCggZG9jUHRyKCkgKTsKKyAgICBpZiAoIWdl
dERvY3VtZW50KCktPmlzSFRNTERvY3VtZW50KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAg
RG9jdW1lbnRGcmFnbWVudEltcGwgKmZyYWdtZW50ID0gbmV3IERvY3VtZW50RnJhZ21lbnRJbXBs
KGRvY1B0cigpKTsKICAgICBmcmFnbWVudC0+cmVmKCk7CiAgICAgewogICAgICAgICBIVE1MVG9r
ZW5pemVyIHRvayhkb2NQdHIoKSwgZnJhZ21lbnQpOwpAQCAtMzU4LDE0ICszMjksMTQgQEAgRG9j
dW1lbnRGcmFnbWVudEltcGwgKkhUTUxFbGVtZW50SW1wbDo6YwogICAgIGludCBpZ25vcmVkRXhj
ZXB0aW9uQ29kZTsKIAogICAgIC8vIHdlIG5lZWQgdG8gcG9wIDxodG1sPiBhbmQgPGJvZHk+IGVs
ZW1lbnRzIGFuZCByZW1vdmUgPGhlYWQ+IHRvCi0gICAgLy8gYWNjb21hZGF0ZSBmb2xrcyBwYXNz
aW5nIGNvbXBsZXRlIEhUTUwgZG9jdW1lbnRzIHRvIG1ha2UgdGhlCisgICAgLy8gYWNjb21tb2Rh
dGUgZm9sa3MgcGFzc2luZyBjb21wbGV0ZSBIVE1MIGRvY3VtZW50cyB0byBtYWtlIHRoZQogICAg
IC8vIGNoaWxkIG9mIGFuIGVsZW1lbnQuCiAKICAgICBOb2RlSW1wbCAqbmV4dE5vZGU7CiAgICAg
Zm9yIChOb2RlSW1wbCAqbm9kZSA9IGZyYWdtZW50LT5maXJzdENoaWxkKCk7IG5vZGUgIT0gTlVM
TDsgbm9kZSA9IG5leHROb2RlKSB7CiAgICAgICAgIG5leHROb2RlID0gbm9kZS0+bmV4dFNpYmxp
bmcoKTsKIAlub2RlLT5yZWYoKTsKLSAgICAgICAgaWYgKG5vZGUtPmlkKCkgPT0gSURfSFRNTCB8
fCBub2RlLT5pZCgpID09IElEX0JPRFkpIHsKKyAgICAgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjpodG1sKCkpIHx8IG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpib2R5KCkp
KSB7CiAJICAgIE5vZGVJbXBsICpmaXJzdENoaWxkID0gbm9kZS0+Zmlyc3RDaGlsZCgpOwogICAg
ICAgICAgICAgaWYgKGZpcnN0Q2hpbGQgIT0gTlVMTCkgewogICAgICAgICAgICAgICAgIG5leHRO
b2RlID0gZmlyc3RDaGlsZDsKQEAgLTM3OSw5ICszNTAsOSBAQCBEb2N1bWVudEZyYWdtZW50SW1w
bCAqSFRNTEVsZW1lbnRJbXBsOjpjCiAgICAgICAgICAgICAgICAgY2hpbGQtPmRlcmVmKCk7CiAJ
ICAgIH0KICAgICAgICAgICAgIGZyYWdtZW50LT5yZW1vdmVDaGlsZChub2RlLCBpZ25vcmVkRXhj
ZXB0aW9uQ29kZSk7Ci0JfSBlbHNlIGlmIChub2RlLT5pZCgpID09IElEX0hFQUQpIHsKKwl9IGVs
c2UgaWYgKG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoZWFkKCkpKQogCSAgICBmcmFnbWVu
dC0+cmVtb3ZlQ2hpbGQobm9kZSwgaWdub3JlZEV4Y2VwdGlvbkNvZGUpOwotCX0KKwogICAgICAg
ICAvLyBJbXBvcnRhbnQgdG8gZG8gdGhpcyBkZXJlZiBhZnRlciByZW1vdmVDaGlsZCwgYmVjYXVz
ZSBpZiB0aGUgb25seSB0aGluZwogICAgICAgICAvLyBrZWVwaW5nIGEgbm9kZSBhcm91bmQgaXMg
YSBwYXJlbnQgdGhhdCBpcyBub24tMCwgcmVtb3ZlQ2hpbGQgd2lsbCBub3QKICAgICAgICAgLy8g
ZGVsZXRlIHRoZSBub2RlLiBUaGlzIHdvcmtzIGZpbmUgaW4gSmF2YVNjcmlwdCBiZWNhdXNlIHRo
ZXJlJ3MgYWx3YXlzCkBAIC00MDAsNyArMzcxLDcgQEAgRG9jdW1lbnRGcmFnbWVudEltcGwgKkhU
TUxFbGVtZW50SW1wbDo6YwogCiB2b2lkIEhUTUxFbGVtZW50SW1wbDo6c2V0SW5uZXJIVE1MKGNv
bnN0IERPTVN0cmluZyAmaHRtbCwgaW50ICZleGNlcHRpb24pCiB7Ci0gICAgRG9jdW1lbnRGcmFn
bWVudEltcGwgKmZyYWdtZW50ID0gY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KCBodG1sICk7Cisg
ICAgRG9jdW1lbnRGcmFnbWVudEltcGwgKmZyYWdtZW50ID0gY3JlYXRlQ29udGV4dHVhbEZyYWdt
ZW50KGh0bWwpOwogICAgIGlmIChmcmFnbWVudCA9PSBOVUxMKSB7CiAJZXhjZXB0aW9uID0gRE9N
RXhjZXB0aW9uOjpOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI7CiAgICAgICAgIHJldHVybjsK
QEAgLTQxOCw3ICszODksNyBAQCB2b2lkIEhUTUxFbGVtZW50SW1wbDo6c2V0T3V0ZXJIVE1MKGNv
bnN0CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgSFRNTEVsZW1lbnRJbXBsICpwYXJlbnQg
PSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwgKj4ocCk7Ci0gICAgRG9jdW1lbnRGcmFnbWVu
dEltcGwgKmZyYWdtZW50ID0gcGFyZW50LT5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoIGh0bWwg
KTsKKyAgICBEb2N1bWVudEZyYWdtZW50SW1wbCAqZnJhZ21lbnQgPSBwYXJlbnQtPmNyZWF0ZUNv
bnRleHR1YWxGcmFnbWVudChodG1sKTsKIAogICAgIGlmICghZnJhZ21lbnQpIHsKIAlleGNlcHRp
b24gPSBET01FeGNlcHRpb246Ok5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUjsKQEAgLTQzNCwy
OSArNDA1LDE3IEBAIHZvaWQgSFRNTEVsZW1lbnRJbXBsOjpzZXRPdXRlckhUTUwoY29uc3QKIHZv
aWQgSFRNTEVsZW1lbnRJbXBsOjpzZXRJbm5lclRleHQoY29uc3QgRE9NU3RyaW5nICZ0ZXh0LCBp
bnQgJmV4Y2VwdGlvbikKIHsKICAgICAvLyBmb2xsb3dpbmcgdGhlIElFIHNwZWNzLgotICAgIGlm
IChlbmRUYWdSZXF1aXJlbWVudChpZCgpKSA9PSBGT1JCSURERU4pIHsKKyAgICBpZiAoZW5kVGFn
UmVxdWlyZW1lbnQoKSA9PSBUYWdTdGF0dXNGb3JiaWRkZW4pIHsKIAlleGNlcHRpb24gPSBET01F
eGNlcHRpb246Ok5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUjsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIC8vIElFIGRpc2FsbG93cyBpbm5lclRleHQgb24gaW5saW5lIGVsZW1lbnRz
LiBJIGRvbid0IHNlZSB3aHkgd2Ugc2hvdWxkIGhhdmUgdGhpcyByZXN0cmljdGlvbiwgYXMgb3Vy
Ci0gICAgLy8gZGh0bWwgZW5naW5lIGNhbiBjb3BlIHdpdGggaXQuIExhcnMKLSAgICAvL2lmICgg
aXNJbmxpbmUoKSApIHJldHVybiBmYWxzZTsKLSAgICBzd2l0Y2goIGlkKCkgKSB7Ci0gICAgICAg
IGNhc2UgSURfQ09MOgotICAgICAgICBjYXNlIElEX0NPTEdST1VQOgotICAgICAgICBjYXNlIElE
X0ZSQU1FU0VUOgotICAgICAgICBjYXNlIElEX0hFQUQ6Ci0gICAgICAgIGNhc2UgSURfSFRNTDoK
LSAgICAgICAgY2FzZSBJRF9UQUJMRToKLSAgICAgICAgY2FzZSBJRF9UQk9EWToKLSAgICAgICAg
Y2FzZSBJRF9URk9PVDoKLSAgICAgICAgY2FzZSBJRF9USEVBRDoKLSAgICAgICAgY2FzZSBJRF9U
UjoKLSAgICAgICAgICAgIGV4Y2VwdGlvbiA9IERPTUV4Y2VwdGlvbjo6Tk9fTU9ESUZJQ0FUSU9O
X0FMTE9XRURfRVJSOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgYnJlYWs7CisgICAgaWYgKGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmNvbCgpKSB8
fCBoYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpjb2xncm91cCgpKSB8fCBoYXNMb2NhbE5hbWUoSFRN
TE5hbWVzOjpmcmFtZXNldCgpKSB8fAorICAgICAgICBoYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpo
ZWFkKCkpIHx8IGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Omh0bWwoKSkgfHwgaGFzTG9jYWxOYW1l
KEhUTUxOYW1lczo6dGFibGUoKSkgfHwgCisgICAgICAgIGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6
OnRib2R5KCkpIHx8IGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnRmb290KCkpIHx8IGhhc0xvY2Fs
TmFtZShIVE1MTmFtZXM6OnRoZWFkKCkpIHx8CisgICAgICAgIGhhc0xvY2FsTmFtZShIVE1MTmFt
ZXM6OnRyKCkpKSB7CisgICAgICAgIGV4Y2VwdGlvbiA9IERPTUV4Y2VwdGlvbjo6Tk9fTU9ESUZJ
Q0FUSU9OX0FMTE9XRURfRVJSOworICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgcmVtb3Zl
Q2hpbGRyZW4oKTsKQEAgLTQ2NiwyNSArNDI1LDE3IEBAIHZvaWQgSFRNTEVsZW1lbnRJbXBsOjpz
ZXRJbm5lclRleHQoY29uc3QKIHZvaWQgSFRNTEVsZW1lbnRJbXBsOjpzZXRPdXRlclRleHQoY29u
c3QgRE9NU3RyaW5nICZ0ZXh0LCBpbnQgJmV4Y2VwdGlvbikKIHsKICAgICAvLyBmb2xsb3dpbmcg
dGhlIElFIHNwZWNzLgotICAgIGlmKCBlbmRUYWdSZXF1aXJlbWVudChpZCgpKSA9PSBGT1JCSURE
RU4gKSB7CisgICAgaWYgKGVuZFRhZ1JlcXVpcmVtZW50KCkgPT0gVGFnU3RhdHVzRm9yYmlkZGVu
KSB7CiAJZXhjZXB0aW9uID0gRE9NRXhjZXB0aW9uOjpOT19NT0RJRklDQVRJT05fQUxMT1dFRF9F
UlI7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgc3dpdGNoKCBpZCgpICkgewotICAgICAg
ICBjYXNlIElEX0NPTDoKLSAgICAgICAgY2FzZSBJRF9DT0xHUk9VUDoKLSAgICAgICAgY2FzZSBJ
RF9GUkFNRVNFVDoKLSAgICAgICAgY2FzZSBJRF9IRUFEOgotICAgICAgICBjYXNlIElEX0hUTUw6
Ci0gICAgICAgIGNhc2UgSURfVEFCTEU6Ci0gICAgICAgIGNhc2UgSURfVEJPRFk6Ci0gICAgICAg
IGNhc2UgSURfVEZPT1Q6Ci0gICAgICAgIGNhc2UgSURfVEhFQUQ6Ci0gICAgICAgIGNhc2UgSURf
VFI6Ci0gICAgICAgICAgICBleGNlcHRpb24gPSBET01FeGNlcHRpb246Ok5PX01PRElGSUNBVElP
Tl9BTExPV0VEX0VSUjsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgIGJyZWFrOworCisgICAgaWYgKGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmNvbCgp
KSB8fCBoYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpjb2xncm91cCgpKSB8fCBoYXNMb2NhbE5hbWUo
SFRNTE5hbWVzOjpmcmFtZXNldCgpKSB8fAorICAgICAgICBoYXNMb2NhbE5hbWUoSFRNTE5hbWVz
OjpoZWFkKCkpIHx8IGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Omh0bWwoKSkgfHwgaGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6dGFibGUoKSkgfHwgCisgICAgICAgIGhhc0xvY2FsTmFtZShIVE1MTmFt
ZXM6OnRib2R5KCkpIHx8IGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnRmb290KCkpIHx8IGhhc0xv
Y2FsTmFtZShIVE1MTmFtZXM6OnRoZWFkKCkpIHx8CisgICAgICAgIGhhc0xvY2FsTmFtZShIVE1M
TmFtZXM6OnRyKCkpKSB7CisgICAgICAgIGV4Y2VwdGlvbiA9IERPTUV4Y2VwdGlvbjo6Tk9fTU9E
SUZJQ0FUSU9OX0FMTE9XRURfRVJSOworICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgTm9k
ZUltcGwgKnBhcmVudCA9IHBhcmVudE5vZGUoKTsKQEAgLTUyNSwxNyArNDc2LDYgQEAgdm9pZCBI
VE1MRWxlbWVudEltcGw6OnNldE91dGVyVGV4dChjb25zdAogICAgIH0KIH0KIAotCi1ET01TdHJp
bmcgSFRNTEVsZW1lbnRJbXBsOjpuYW1lc3BhY2VVUkkoKSBjb25zdAotewotICAgIC8vIEZvciBI
VE1MIGRvY3VtZW50cywgd2UgdHJlYXQgSFRNTCBlbGVtZW50cyBhcyBoYXZpbmcgbm8gbmFtZXNw
YWNlLiBCdXQgZm9yIFhNTCBkb2N1bWVudHMKLSAgICAvLyB0aGUgZWxlbWVudHMgaGF2ZSB0aGUg
bmFtZXNwYWNlIGRlZmluZWQgaW4gdGhlIFhIVE1MIHNwZWMKLSAgICBpZiAoZ2V0RG9jdW1lbnQo
KS0+aXNIVE1MRG9jdW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIERPTVN0cmluZygpOwotICAgIGVs
c2UKLSAgICAgICAgcmV0dXJuIFhIVE1MX05BTUVTUEFDRTsKLX0KLQogdm9pZCBIVE1MRWxlbWVu
dEltcGw6OmFkZEhUTUxBbGlnbm1lbnQoTWFwcGVkQXR0cmlidXRlSW1wbCogYXR0cikKIHsKICAg
ICAvL3FEZWJ1ZygiYWxpZ25tZW50IGlzICVzIiwgYWxpZ25tZW50LnN0cmluZygpLmxhdGluMSgp
ICk7CkBAIC02ODIsOSArNjIyLDkgQEAgRE9NU3RyaW5nIEhUTUxFbGVtZW50SW1wbDo6dG9TdHJp
bmcoKSBjbwogCURPTVN0cmluZyByZXN1bHQgPSBvcGVuVGFnU3RhcnRUb1N0cmluZygpOwogCXJl
c3VsdCArPSAiPiI7CiAKLQlpZiAoZW5kVGFnUmVxdWlyZW1lbnQoaWQoKSkgPT0gUkVRVUlSRUQp
IHsKKwlpZiAoZW5kVGFnUmVxdWlyZW1lbnQoKSA9PSBUYWdTdGF0dXNSZXF1aXJlZCkgewogCSAg
ICByZXN1bHQgKz0gIjwvIjsKLQkgICAgcmVzdWx0ICs9IHRhZ05hbWUoKTsKKwkgICAgcmVzdWx0
ICs9IG5vZGVOYW1lKCk7CiAJICAgIHJlc3VsdCArPSAiPiI7CiAJfQogCkBAIC02OTQsNyArNjM0
LDcgQEAgRE9NU3RyaW5nIEhUTUxFbGVtZW50SW1wbDo6dG9TdHJpbmcoKSBjbwogICAgIHJldHVy
biBFbGVtZW50SW1wbDo6dG9TdHJpbmcoKTsKIH0KIAotRE9NU3RyaW5nIEhUTUxFbGVtZW50SW1w
bDo6aWRET00oKSBjb25zdAorRE9NU3RyaW5nIEhUTUxFbGVtZW50SW1wbDo6aWQoKSBjb25zdAog
ewogICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoQVRUUl9JRCk7CiB9CkBAIC03NDksMTUgKzY4OSwz
IEBAIFNoYXJlZFB0cjxIVE1MQ29sbGVjdGlvbkltcGw+IEhUTUxFbGVtZW4KICAgICByZXR1cm4g
U2hhcmVkUHRyPEhUTUxDb2xsZWN0aW9uSW1wbD4obmV3IEhUTUxDb2xsZWN0aW9uSW1wbCh0aGlz
LCBIVE1MQ29sbGVjdGlvbkltcGw6Ok5PREVfQ0hJTERSRU4pKTsKIH0KIAotLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotCi1IVE1MR2VuZXJpY0VsZW1lbnRJbXBsOjpIVE1MR2VuZXJpY0VsZW1lbnRJbXBs
KERvY3VtZW50UHRyICpkb2MsIHVzaG9ydCBpKQotICAgIDogSFRNTEVsZW1lbnRJbXBsKGRvYykK
LXsKLSAgICBtX2VsZW1lbnRJZCA9IGk7Ci19Ci0KLU5vZGVJbXBsOjpJZCBIVE1MR2VuZXJpY0Vs
ZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZWxlbWVudElkOwotfQpJbmRl
eDoga2h0bWwvaHRtbC9odG1sX2VsZW1lbnRpbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sX2VsZW1lbnRpbXBsLmgsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuMzUKZGlmZiAtdSAtcCAtcjEuMzUga2h0bWwvaHRtbC9odG1sX2VsZW1lbnRp
bXBsLmgKLS0tIGtodG1sL2h0bWwvaHRtbF9lbGVtZW50aW1wbC5oCTExIE1heSAyMDA1IDA1OjQ5
OjM0IC0wMDAwCTEuMzUKKysrIGtodG1sL2h0bWwvaHRtbF9lbGVtZW50aW1wbC5oCTIzIEp1biAy
MDA1IDIxOjUyOjM0IC0wMDAwCkBAIC0yNSwyNyArMjUsMjQgQEAKICNkZWZpbmUgSFRNTF9FTEVN
RU5USU1QTF9ICiAKICNpbmNsdWRlICJ4bWwvZG9tX2VsZW1lbnRpbXBsLmgiCi0jaW5jbHVkZSA8
cXB0cmRpY3QuaD4KKyNpbmNsdWRlICJodG1sbmFtZXMuaCIKIAogbmFtZXNwYWNlIERPTSB7CiAK
IGNsYXNzIERvY3VtZW50RnJhZ21lbnRJbXBsOwogY2xhc3MgRE9NU3RyaW5nOwogY2xhc3MgSFRN
TENvbGxlY3Rpb25JbXBsOwotICAgIAorCitlbnVtIEhUTUxUYWdTdGF0dXMgeyBUYWdTdGF0dXNP
cHRpb25hbCwgVGFnU3RhdHVzUmVxdWlyZWQsIFRhZ1N0YXR1c0ZvcmJpZGRlbiB9OworICAgICAg
ICAgICAgICAgICAgICAgICAKIGNsYXNzIEhUTUxFbGVtZW50SW1wbCA6IHB1YmxpYyBTdHlsZWRF
bGVtZW50SW1wbAogewogcHVibGljOgotICAgIEhUTUxFbGVtZW50SW1wbChEb2N1bWVudFB0ciAq
ZG9jKTsKLQorICAgIEhUTUxFbGVtZW50SW1wbChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1l
LCBEb2N1bWVudFB0ciAqZG9jKTsKICAgICB2aXJ0dWFsIH5IVE1MRWxlbWVudEltcGwoKTsKIAog
ICAgIHZpcnR1YWwgYm9vbCBpc0hUTUxFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQog
Ci0gICAgdmlydHVhbCBib29sIGlzSW5saW5lKCkgY29uc3Q7Ci0gICAgIAotICAgIHZpcnR1YWwg
SWQgaWQoKSBjb25zdCA9IDA7Ci0gICAgCiAgICAgdmlydHVhbCBib29sIG1hcFRvRW50cnkoSWQg
YXR0ciwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3Q7CiAgICAgdmlydHVhbCB2
b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwqIGF0dHIpOwogCkBA
IC01Myw3ICs1MCw3IEBAIHB1YmxpYzoKIAogICAgIFNoYXJlZFB0cjxIVE1MQ29sbGVjdGlvbklt
cGw+IGNoaWxkcmVuKCk7CiAgICAgCi0gICAgRE9NU3RyaW5nIGlkRE9NKCkgY29uc3Q7IC8vIHJl
bmFtZSB0byBpZCBhZnRlciBlbGltaW5hdGluZyBOb2RlSW1wbDo6aWQgc29tZSBkYXkKKyAgICBE
T01TdHJpbmcgaWQoKSBjb25zdDsKICAgICB2b2lkIHNldElkKGNvbnN0IERPTVN0cmluZyAmdmFs
dWUpOwogICAgIERPTVN0cmluZyB0aXRsZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0VGl0bGUoY29u
c3QgRE9NU3RyaW5nICZ2YWx1ZSk7CkBAIC03Myw4ICs3MCw2IEBAIHB1YmxpYzoKICAgICB2b2lk
IHNldE91dGVySFRNTChjb25zdCBET01TdHJpbmcgJmh0bWwsIGludCAmZXhjZXB0aW9uKTsKICAg
ICB2b2lkIHNldElubmVyVGV4dChjb25zdCBET01TdHJpbmcgJnRleHQsIGludCAmZXhjZXB0aW9u
KTsKICAgICB2b2lkIHNldE91dGVyVGV4dChjb25zdCBET01TdHJpbmcgJnRleHQsIGludCAmZXhj
ZXB0aW9uKTsKLQotICAgIHZpcnR1YWwgRE9NU3RyaW5nIG5hbWVzcGFjZVVSSSgpIGNvbnN0Owog
ICAgIAogICAgIHZpcnR1YWwgYm9vbCBpc0ZvY3VzYWJsZSgpIGNvbnN0OwogICAgIHZpcnR1YWwg
Ym9vbCBpc0NvbnRlbnRFZGl0YWJsZSgpIGNvbnN0OwpAQCAtODksMjIgKzg0LDE1IEBAIHB1Ymxp
YzoKIAogICAgIHZpcnR1YWwgRE9NU3RyaW5nIHRvU3RyaW5nKCkgY29uc3Q7CiAKKyAgICB2aXJ0
dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IGludCB0YWdQcmlvcml0eSgpIGNvbnN0OworICAgIAogcHJvdGVjdGVkOgogCiAgICAgLy8gZm9y
IElNRywgT0JKRUNUIGFuZCBBUFBMRVQKICAgICB2b2lkIGFkZEhUTUxBbGlnbm1lbnQoTWFwcGVk
QXR0cmlidXRlSW1wbCogaHRtbEF0dHIpOwogfTsKIAotY2xhc3MgSFRNTEdlbmVyaWNFbGVtZW50
SW1wbCA6IHB1YmxpYyBIVE1MRWxlbWVudEltcGwKLXsKLXB1YmxpYzoKLSAgICBIVE1MR2VuZXJp
Y0VsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIHVzaG9ydCBlbGVtZW50SWQpOwotICAgIHZp
cnR1YWwgSWQgaWQoKSBjb25zdDsKLQotcHJvdGVjdGVkOgotICAgIHVzaG9ydCBtX2VsZW1lbnRJ
ZDsKLX07Ci0KIH0gLy9uYW1lc3BhY2UKIAogI2VuZGlmCkluZGV4OiBraHRtbC9odG1sL2h0bWxf
Zm9ybWltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1s
L2h0bWwvaHRtbF9mb3JtaW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTY3CmRpZmYg
LXUgLXAgLXIxLjE2NyBraHRtbC9odG1sL2h0bWxfZm9ybWltcGwuY3BwCi0tLSBraHRtbC9odG1s
L2h0bWxfZm9ybWltcGwuY3BwCTIwIEp1biAyMDA1IDA1OjUyOjE2IC0wMDAwCTEuMTY3CisrKyBr
aHRtbC9odG1sL2h0bWxfZm9ybWltcGwuY3BwCTIzIEp1biAyMDA1IDIxOjUyOjM3IC0wMDAwCkBA
IC0xMDMsNyArMTAzLDcgQEAgcHJpdmF0ZToKIH07CiAKIEhUTUxGb3JtRWxlbWVudEltcGw6OkhU
TUxGb3JtRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50SW1w
bChkb2MpCisgICAgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjpmb3JtKCksIGRvYykKIHsK
ICAgICBjb2xsZWN0aW9uSW5mbyA9IDA7CiAgICAgbV9wb3N0ID0gZmFsc2U7CkBAIC0xMzAsMTEg
KzEzMCw2IEBAIEhUTUxGb3JtRWxlbWVudEltcGw6On5IVE1MRm9ybUVsZW1lbnRJbXAKICAgICAg
ICAgaW1nRWxlbWVudHNbaV0tPm1fZm9ybSA9IDA7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MRm9y
bUVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0ZPUk07Ci19Ci0KICNp
ZiBBUFBMRV9DSEFOR0VTCiAKIGJvb2wgSFRNTEZvcm1FbGVtZW50SW1wbDo6Zm9ybVdvdWxkSGF2
ZVNlY3VyZVN1Ym1pc3Npb24oY29uc3QgRE9NU3RyaW5nICZ1cmwpCkBAIC0xOTIsNyArMTg3LDcg
QEAgdm9pZCBIVE1MRm9ybUVsZW1lbnRJbXBsOjpzdWJtaXRDbGljaygpCiB7CiAgICAgYm9vbCBz
dWJtaXRGb3VuZCA9IGZhbHNlOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmb3JtRWxl
bWVudHMuY291bnQoKTsgKytpKSB7Ci0gICAgICAgIGlmIChmb3JtRWxlbWVudHNbaV0tPmlkKCkg
PT0gSURfSU5QVVQpIHsKKyAgICAgICAgaWYgKGZvcm1FbGVtZW50c1tpXS0+aGFzTG9jYWxOYW1l
KEhUTUxOYW1lczo6aW5wdXQoKSkpIHsKICAgICAgICAgICAgIEhUTUxJbnB1dEVsZW1lbnRJbXBs
ICplbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudEltcGwgKj4oZm9ybUVsZW1l
bnRzW2ldKTsKICAgICAgICAgICAgIGlmIChlbGVtZW50LT5pc1N1Y2Nlc3NmdWxTdWJtaXRCdXR0
b24oKSAmJiBlbGVtZW50LT5yZW5kZXJlcigpKSB7CiAgICAgICAgICAgICAgICAgc3VibWl0Rm91
bmQgPSB0cnVlOwpAQCAtMzk5LDcgKzM5NCw3IEBAIGJvb2wgSFRNTEZvcm1FbGVtZW50SW1wbDo6
Zm9ybURhdGEoRm9ybUQKIAogICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGUgY3VycmVudCB0
eXBlIGlzIEZJTEUsIHRoZW4gd2UgYWxzbyBuZWVkIHRvCiAgICAgICAgICAgICAgICAgICAgIC8v
IGluY2x1ZGUgdGhlIGZpbGVuYW1lCi0gICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50LT5u
b2RlVHlwZSgpID09IE5vZGU6OkVMRU1FTlRfTk9ERSAmJiBjdXJyZW50LT5pZCgpID09IElEX0lO
UFVUICYmCisgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50LT5oYXNMb2NhbE5hbWUoSFRN
TE5hbWVzOjppbnB1dCgpKSAmJgogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
SFRNTElucHV0RWxlbWVudEltcGwqPihjdXJyZW50KS0+aW5wdXRUeXBlKCkgPT0gSFRNTElucHV0
RWxlbWVudEltcGw6OkZJTEUpCiAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgIFFTdHJpbmcgcGF0aCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnRJbXBs
Kj4oY3VycmVudCktPnZhbHVlKCkuc3RyaW5nKCk7CkBAIC01NDcsNyArNTQyLDcgQEAgdm9pZCBI
VE1MRm9ybUVsZW1lbnRJbXBsOjpzdWJtaXQoIGJvb2wgYQogI2lmIEFQUExFX0NIQU5HRVMKICAg
ICAgICAgLy8gT3VyIGFwcCBuZWVkcyB0byBnZXQgZm9ybSB2YWx1ZXMgZm9yIHBhc3N3b3JkIGZp
ZWxkcyBmb3IgZG9pbmcgcGFzc3dvcmQgYXV0b2NvbXBsZXRlLAogICAgICAgICAvLyBzbyB3ZSBh
cmUgbW9yZSBsZW5pZW50IGluIHB1c2hpbmcgdmFsdWVzLCBhbmQgbGV0IHRoZSBhcHAgZGVjaWRl
IHdoYXQgdG8gc2F2ZSB3aGVuLgotICAgICAgICBpZiAoY3VycmVudC0+aWQoKSA9PSBJRF9JTlBV
VCkgeworICAgICAgICBpZiAoY3VycmVudC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6aW5wdXQo
KSkpIHsKICAgICAgICAgICAgIEhUTUxJbnB1dEVsZW1lbnRJbXBsICppbnB1dCA9IHN0YXRpY19j
YXN0PEhUTUxJbnB1dEVsZW1lbnRJbXBsKj4oY3VycmVudCk7CiAgICAgICAgICAgICBpZiAoaW5w
dXQtPmlucHV0VHlwZSgpID09IEhUTUxJbnB1dEVsZW1lbnRJbXBsOjpURVhUCiAgICAgICAgICAg
ICAgICAgfHwgaW5wdXQtPmlucHV0VHlwZSgpID09ICBIVE1MSW5wdXRFbGVtZW50SW1wbDo6UEFT
U1dPUkQKQEAgLTcwOSw3ICs3MDQsNyBAQCB2b2lkIEhUTUxGb3JtRWxlbWVudEltcGw6OnJhZGlv
Q2xpY2tlZCggCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZvcm1FbGVtZW50cy5j
b3VudCgpOyArK2kpIHsKICAgICAgICAgSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwgKmN1cnJl
bnQgPSBmb3JtRWxlbWVudHNbaV07Ci0gICAgICAgIGlmIChjdXJyZW50LT5pZCgpID09IElEX0lO
UFVUICYmCisgICAgICAgIGlmIChjdXJyZW50LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjppbnB1
dCgpKSAmJgogICAgICAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudEltcGwqPihj
dXJyZW50KS0+aW5wdXRUeXBlKCkgPT0gSFRNTElucHV0RWxlbWVudEltcGw6OlJBRElPICYmCiAg
ICAgICAgICAgICBjdXJyZW50ICE9IGNhbGxlciAmJiBjdXJyZW50LT5mb3JtKCkgPT0gY2FsbGVy
LT5mb3JtKCkgJiYgY3VycmVudC0+bmFtZSgpID09IGNhbGxlci0+bmFtZSgpKSB7CiAgICAgICAg
ICAgICBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50SW1wbCo+KGN1cnJlbnQpLT5zZXRDaGVj
a2VkKGZhbHNlKTsKQEAgLTg2NCw4ICs4NTksOCBAQCB2b2lkIEhUTUxGb3JtRWxlbWVudEltcGw6
OnNldFRhcmdldChjb25zCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSFRNTEdlbmVyaWNGb3Jt
RWxlbWVudEltcGw6OkhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2Ms
IEhUTUxGb3JtRWxlbWVudEltcGwgKmYpCi0gICAgOiBIVE1MRWxlbWVudEltcGwoZG9jKQorSFRN
TEdlbmVyaWNGb3JtRWxlbWVudEltcGw6OkhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKGNvbnN0
IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50UHRyICpkb2MsIEhUTUxGb3JtRWxlbWVu
dEltcGwgKmYpCisgICAgOiBIVE1MRWxlbWVudEltcGwodGFnTmFtZSwgZG9jKQogewogICAgIG1f
ZGlzYWJsZWQgPSBtX3JlYWRPbmx5ID0gZmFsc2U7CiAgICAgbV9kb3JtYW50ID0gZmFsc2U7CkBA
IC05NjcsOSArOTYyLDggQEAgdm9pZCBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbDo6cmVtb3Zl
ZAogSFRNTEZvcm1FbGVtZW50SW1wbCAqSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGw6OmdldEZv
cm0oKSBjb25zdAogewogICAgIE5vZGVJbXBsICpwID0gcGFyZW50Tm9kZSgpOwotICAgIHdoaWxl
KHApCi0gICAgewotICAgICAgICBpZiggcC0+aWQoKSA9PSBJRF9GT1JNICkKKyAgICB3aGlsZShw
KSB7CisgICAgICAgIGlmIChwLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Zm9ybSgpKSkKICAgICAg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnRJbXBsICo+KHApOwogICAg
ICAgICBwID0gcC0+cGFyZW50Tm9kZSgpOwogICAgIH0KQEAgLTExODksNyArMTE4Myw3IEBAIHZv
aWQgSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGw6OnNldFRhYkkKIC8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KIAogSFRNTEJ1dHRvbkVsZW1lbnRJbXBsOjpIVE1MQnV0dG9uRWxlbWVudEltcGwoRG9jdW1l
bnRQdHIgKmRvYywgSFRNTEZvcm1FbGVtZW50SW1wbCAqZikKLSAgICA6IEhUTUxHZW5lcmljRm9y
bUVsZW1lbnRJbXBsKGRvYywgZikKKyAgICA6IEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKEhU
TUxOYW1lczo6YnV0dG9uKCksIGRvYywgZikKIHsKICAgICBtX3R5cGUgPSBTVUJNSVQ7CiAgICAg
bV9kaXJ0eSA9IHRydWU7CkBAIC0xMjAwLDExICsxMTk0LDYgQEAgSFRNTEJ1dHRvbkVsZW1lbnRJ
bXBsOjp+SFRNTEJ1dHRvbkVsZW1lbgogewogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTEJ1dHRvbkVs
ZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0JVVFRPTjsKLX0KLQogRE9N
U3RyaW5nIEhUTUxCdXR0b25FbGVtZW50SW1wbDo6dHlwZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IGdldEF0dHJpYnV0ZShBVFRSX1RZUEUpOwpAQCAtMTMyNiw3ICsxMzE1LDcgQEAgdm9pZCBIVE1M
QnV0dG9uRWxlbWVudEltcGw6OnNldFZhbHVlKGNvbgogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBI
VE1MRmllbGRTZXRFbGVtZW50SW1wbDo6SFRNTEZpZWxkU2V0RWxlbWVudEltcGwoRG9jdW1lbnRQ
dHIgKmRvYywgSFRNTEZvcm1FbGVtZW50SW1wbCAqZikKLSAgIDogSFRNTEdlbmVyaWNGb3JtRWxl
bWVudEltcGwoZG9jLCBmKQorICAgOiBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbChIVE1MTmFt
ZXM6OmZpZWxkc2V0KCksIGRvYywgZikKIHsKIH0KIApAQCAtMTMzOSwxMSArMTMyOCw2IEBAIGJv
b2wgSFRNTEZpZWxkU2V0RWxlbWVudEltcGw6OmlzRm9jdXNhYmwKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MRmllbGRTZXRFbGVtZW50SW1wbDo6aWQoKSBjb25zdAot
ewotICAgIHJldHVybiBJRF9GSUVMRFNFVDsKLX0KLQogRE9NU3RyaW5nIEhUTUxGaWVsZFNldEVs
ZW1lbnRJbXBsOjp0eXBlKCkgY29uc3QKIHsKICAgICByZXR1cm4gImZpZWxkc2V0IjsKQEAgLTEz
NTcsOCArMTM0MSwyMSBAQCBSZW5kZXJPYmplY3QqIEhUTUxGaWVsZFNldEVsZW1lbnRJbXBsOjpj
CiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxJbnB1dEVsZW1lbnRJbXBsOjpIVE1MSW5wdXRF
bGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmKQotICAg
IDogSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwoZG9jLCBmKSwgbV9pbWFnZUxvYWRlcigwKSwg
bV92YWx1ZU1hdGNoZXNSZW5kZXJlcihmYWxzZSkKKyAgICA6IEhUTUxHZW5lcmljRm9ybUVsZW1l
bnRJbXBsKEhUTUxOYW1lczo6aW5wdXQoKSwgZG9jLCBmKQoreworICAgIGluaXQoKTsKK30KKwor
SFRNTElucHV0RWxlbWVudEltcGw6OkhUTUxJbnB1dEVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmll
ZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50UHRyICpkb2MsIEhUTUxGb3JtRWxlbWVudEltcGwgKmYp
CisgICAgOiBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbCh0YWdOYW1lLCBkb2MsIGYpCiB7Cisg
ICAgaW5pdCgpOworfQorCit2b2lkIEhUTUxJbnB1dEVsZW1lbnRJbXBsOjppbml0KCkKK3sKKyAg
ICBtX2ltYWdlTG9hZGVyID0gMDsKKyAgICBtX3ZhbHVlTWF0Y2hlc1JlbmRlcmVyID0gZmFsc2U7
CiAgICAgbV90eXBlID0gVEVYVDsKICAgICBtX21heExlbiA9IC0xOwogICAgIG1fc2l6ZSA9IDIw
OwpAQCAtMTM3Niw4ICsxMzczLDggQEAgSFRNTElucHV0RWxlbWVudEltcGw6OkhUTUxJbnB1dEVs
ZW1lbnRJbQogCiAgICAgbV9tYXhSZXN1bHRzID0gLTE7CiAKLSAgICBpZiAoIG1fZm9ybSApCi0g
ICAgICAgIG1fYXV0b2NvbXBsZXRlID0gZi0+YXV0b0NvbXBsZXRlKCk7CisgICAgaWYgKG1fZm9y
bSkKKyAgICAgICAgbV9hdXRvY29tcGxldGUgPSBtX2Zvcm0tPmF1dG9Db21wbGV0ZSgpOwogfQog
CiBIVE1MSW5wdXRFbGVtZW50SW1wbDo6fkhUTUxJbnB1dEVsZW1lbnRJbXBsKCkKQEAgLTEzODYs
MTEgKzEzODMsNiBAQCBIVE1MSW5wdXRFbGVtZW50SW1wbDo6fkhUTUxJbnB1dEVsZW1lbnRJCiAg
ICAgZGVsZXRlIG1faW1hZ2VMb2FkZXI7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MSW5wdXRFbGVt
ZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9JTlBVVDsKLX0KLQogdm9pZCBI
VE1MSW5wdXRFbGVtZW50SW1wbDo6c2V0VHlwZShjb25zdCBET01TdHJpbmcmIHQpCiB7CiAgICAg
dHlwZUVudW0gbmV3VHlwZTsKQEAgLTIzNjYsNyArMjM1OCw3IEBAIHZvaWQgSFRNTElucHV0RWxl
bWVudEltcGw6OnNldFVzZU1hcChjb24KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogSFRNTExhYmVs
RWxlbWVudEltcGw6OkhUTUxMYWJlbEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0gICAg
OiBIVE1MRWxlbWVudEltcGwoZG9jKQorICAgIDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6
bGFiZWwoKSwgZG9jKQogewogfQogCkBAIC0yMzc5LDExICsyMzcxLDYgQEAgYm9vbCBIVE1MTGFi
ZWxFbGVtZW50SW1wbDo6aXNGb2N1c2FibGUoKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotTm9k
ZUltcGw6OklkIEhUTUxMYWJlbEVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IElEX0xBQkVMOwotfQotCiB2b2lkIEhUTUxMYWJlbEVsZW1lbnRJbXBsOjpwYXJzZU1hcHBlZEF0
dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICphdHRyKQogewogICAgIHN3aXRjaChhdHRyLT5p
ZCgpKQpAQCAtMjQ2NSw3ICsyNDUyLDcgQEAgdm9pZCBIVE1MTGFiZWxFbGVtZW50SW1wbDo6c2V0
SHRtbEZvcihjbwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MTGVnZW5kRWxlbWVudEltcGw6
OkhUTUxMZWdlbmRFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJ
bXBsICpmKQotOiBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbChkb2MsIGYpCis6IEhUTUxHZW5l
cmljRm9ybUVsZW1lbnRJbXBsKEhUTUxOYW1lczo6bGVnZW5kKCksIGRvYywgZikKIHsKIH0KIApA
QCAtMjQ3OCwxMSArMjQ2NSw2IEBAIGJvb2wgSFRNTExlZ2VuZEVsZW1lbnRJbXBsOjppc0ZvY3Vz
YWJsZSgKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MTGVnZW5kRWxl
bWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfTEVHRU5EOwotfQotCiBSZW5k
ZXJPYmplY3QqIEhUTUxMZWdlbmRFbGVtZW50SW1wbDo6Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJl
bmEqIGFyZW5hLCBSZW5kZXJTdHlsZSogc3R5bGUpCiB7CiAgICAgcmV0dXJuIG5ldyAoYXJlbmEp
IFJlbmRlckxlZ2VuZCh0aGlzKTsKQEAgLTI1MTcsNyArMjQ5OSw3IEBAIEVsZW1lbnRJbXBsICpI
VE1MTGVnZW5kRWxlbWVudEltcGw6OmZvcm0KIHsKICAgICAvLyBDaGVjayBpZiB0aGVyZSdzIGEg
ZmllbGRzZXQgYmVsb25naW5nIHRvIHRoaXMgbGVnZW5kLgogICAgIE5vZGVJbXBsICpmaWVsZHNl
dCA9IHBhcmVudE5vZGUoKTsKLSAgICB3aGlsZSAoZmllbGRzZXQgJiYgZmllbGRzZXQtPmlkKCkg
IT0gSURfRklFTERTRVQpCisgICAgd2hpbGUgKGZpZWxkc2V0ICYmICFmaWVsZHNldC0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OmZpZWxkc2V0KCkpKQogICAgICAgICBmaWVsZHNldCA9IGZpZWxkc2V0
LT5wYXJlbnROb2RlKCk7CiAgICAgaWYgKCFmaWVsZHNldCkKICAgICAgICAgcmV0dXJuIDA7CkBA
IC0yNTI4LDcgKzI1MTAsNyBAQCBFbGVtZW50SW1wbCAqSFRNTExlZ2VuZEVsZW1lbnRJbXBsOjpm
b3JtCiAgICAgd2hpbGUgKChub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZShmaWVsZHNldCkp
KSB7CiAgICAgICAgIGlmIChub2RlLT5pc0hUTUxFbGVtZW50KCkpIHsKICAgICAgICAgICAgIEhU
TUxFbGVtZW50SW1wbCAqZWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCAqPihu
b2RlKTsKLSAgICAgICAgICAgIGlmIChlbGVtZW50LT5pZCgpICE9IElEX0xFR0VORCAmJiBlbGVt
ZW50LT5pc0dlbmVyaWNGb3JtRWxlbWVudCgpKQorICAgICAgICAgICAgaWYgKCFlbGVtZW50LT5o
YXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpsZWdlbmQoKSkgJiYgZWxlbWVudC0+aXNHZW5lcmljRm9y
bUVsZW1lbnQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudDsKICAgICAgICAgfQog
ICAgIH0KQEAgLTI1NTEsOCArMjUzMywyMCBAQCB2b2lkIEhUTUxMZWdlbmRFbGVtZW50SW1wbDo6
YWNjZXNzS2V5QWN0CiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxTZWxlY3RFbGVtZW50SW1w
bDo6SFRNTFNlbGVjdEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIEhUTUxGb3JtRWxlbWVu
dEltcGwgKmYpCi0gICAgOiBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbChkb2MsIGYpLCBtX29w
dGlvbnMoMCkKKyAgICA6IEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKEhUTUxOYW1lczo6c2Vs
ZWN0KCksIGRvYywgZiksIG1fb3B0aW9ucygwKQoreworICAgIGluaXQoKTsKK30KKworSFRNTFNl
bGVjdEVsZW1lbnRJbXBsOjpIVE1MU2VsZWN0RWxlbWVudEltcGwoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgdGFnTmFtZSwgRG9jdW1lbnRQdHIgKmRvYywgSFRNTEZvcm1FbGVtZW50SW1wbCAqZikKKyAg
ICA6IEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKHRhZ05hbWUsIGRvYywgZiksIG1fb3B0aW9u
cygwKQoreworICAgIGluaXQoKTsKK30KKwordm9pZCBIVE1MU2VsZWN0RWxlbWVudEltcGw6Omlu
aXQoKQogeworICAgIG1fb3B0aW9ucyA9IDA7CiAgICAgbV9tdWx0aXBsZSA9IGZhbHNlOwogICAg
IG1fcmVjYWxjTGlzdEl0ZW1zID0gZmFsc2U7CiAgICAgLy8gMCBtZWFucyBpbnZhbGlkIChpLmUu
IG5vdCBzZXQpCkBAIC0yNTY5LDExICsyNTYzLDYgQEAgSFRNTFNlbGVjdEVsZW1lbnRJbXBsOjp+
SFRNTFNlbGVjdEVsZW1lbgogICAgIH0KIH0KIAotTm9kZUltcGw6OklkIEhUTUxTZWxlY3RFbGVt
ZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9TRUxFQ1Q7Ci19Ci0KIHZvaWQg
SFRNTFNlbGVjdEVsZW1lbnRJbXBsOjpyZWNhbGNTdHlsZSggU3R5bGVDaGFuZ2UgY2ggKQogewog
ICAgIGlmIChoYXNDaGFuZ2VkQ2hpbGQoKSAmJiBtX3JlbmRlcikgewpAQCAtMjU5NSw3ICsyNTg0
LDcgQEAgbG9uZyBIVE1MU2VsZWN0RWxlbWVudEltcGw6OnNlbGVjdGVkSW5kZQogICAgIHVpbnQg
byA9IDA7CiAgICAgUU1lbUFycmF5PEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKj4gaXRlbXMg
PSBsaXN0SXRlbXMoKTsKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGl0ZW1zLnNp
emUoKTsgaSsrKSB7Ci0gICAgICAgIGlmIChpdGVtc1tpXS0+aWQoKSA9PSBJRF9PUFRJT04pIHsK
KyAgICAgICAgaWYgKGl0ZW1zW2ldLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvcHRpb24oKSkp
IHsKICAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudEltcGwqPihp
dGVtc1tpXSktPnNlbGVjdGVkKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG87CiAgICAgICAg
ICAgICBvKys7CkBAIC0yNjExLDcgKzI2MDAsNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50SW1w
bDo6c2V0U2VsZWN0ZWRJCiAgICAgUU1lbUFycmF5PEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBs
Kj4gaXRlbXMgPSBsaXN0SXRlbXMoKTsKICAgICBpbnQgbGlzdEluZGV4OwogICAgIGZvciAobGlz
dEluZGV4ID0gMDsgbGlzdEluZGV4IDwgaW50KGl0ZW1zLnNpemUoKSk7IGxpc3RJbmRleCsrKSB7
Ci0gICAgICAgIGlmIChpdGVtc1tsaXN0SW5kZXhdLT5pZCgpID09IElEX09QVElPTikKKyAgICAg
ICAgaWYgKGl0ZW1zW2xpc3RJbmRleF0tPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9wdGlvbigp
KSkKICAgICAgICAgICAgIHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50SW1wbCo+KGl0ZW1z
W2xpc3RJbmRleF0pLT5zZXRTZWxlY3RlZChmYWxzZSk7CiAgICAgfQogICAgIGxpc3RJbmRleCA9
IG9wdGlvblRvTGlzdEluZGV4KGluZGV4KTsKQEAgLTI2MjcsNyArMjYxNiw3IEBAIGxvbmcgSFRN
TFNlbGVjdEVsZW1lbnRJbXBsOjpsZW5ndGgoKSBjb24KICAgICB1aW50IGk7CiAgICAgUU1lbUFy
cmF5PEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKj4gaXRlbXMgPSBsaXN0SXRlbXMoKTsKICAg
ICBmb3IgKGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgaWYgKGl0ZW1z
W2ldLT5pZCgpID09IElEX09QVElPTikKKyAgICAgICAgaWYgKGl0ZW1zW2ldLT5oYXNMb2NhbE5h
bWUoSFRNTE5hbWVzOjpvcHRpb24oKSkpCiAgICAgICAgICAgICBsZW4rKzsKICAgICB9CiAgICAg
cmV0dXJuIGxlbjsKQEAgLTI2MzUsNyArMjYyNCw3IEBAIGxvbmcgSFRNTFNlbGVjdEVsZW1lbnRJ
bXBsOjpsZW5ndGgoKSBjb24KIAogdm9pZCBIVE1MU2VsZWN0RWxlbWVudEltcGw6OmFkZCggSFRN
TEVsZW1lbnRJbXBsICplbGVtZW50LCBIVE1MRWxlbWVudEltcGwgKmJlZm9yZSApCiB7Ci0gICAg
aWYgKCFlbGVtZW50IHx8IGVsZW1lbnQtPmlkKCkgIT0gSURfT1BUSU9OKQorICAgIGlmICghZWxl
bWVudCB8fCAhZWxlbWVudC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpKQogICAg
ICAgICByZXR1cm47CiAKICAgICBpbnQgZXhjZXB0aW9uY29kZSA9IDA7CkBAIC0yNjY5LDEzICsy
NjU4LDEyIEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnRJbXBsOjpmb2N1cygpCiAgICAgZ2V0RG9j
dW1lbnQoKS0+c2V0Rm9jdXNOb2RlKHRoaXMpOwogfQogCi1ET01TdHJpbmcgSFRNTFNlbGVjdEVs
ZW1lbnRJbXBsOjp2YWx1ZSggKQorRE9NU3RyaW5nIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6dmFs
dWUoKQogewogICAgIHVpbnQgaTsKICAgICBRTWVtQXJyYXk8SFRNTEdlbmVyaWNGb3JtRWxlbWVu
dEltcGwqPiBpdGVtcyA9IGxpc3RJdGVtcygpOwogICAgIGZvciAoaSA9IDA7IGkgPCBpdGVtcy5z
aXplKCk7IGkrKykgewotICAgICAgICBpZiAoIGl0ZW1zW2ldLT5pZCgpID09IElEX09QVElPTgot
ICAgICAgICAgICAgJiYgc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnRJbXBsKj4oaXRlbXNb
aV0pLT5zZWxlY3RlZCgpKQorICAgICAgICBpZiAoaXRlbXNbaV0tPmhhc0xvY2FsTmFtZShIVE1M
TmFtZXM6Om9wdGlvbigpKSAmJiBzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudEltcGwqPihp
dGVtc1tpXSktPnNlbGVjdGVkKCkpCiAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRN
TE9wdGlvbkVsZW1lbnRJbXBsKj4oaXRlbXNbaV0pLT52YWx1ZSgpOwogICAgIH0KICAgICByZXR1
cm4gRE9NU3RyaW5nKCIiKTsKQEAgLTI2ODksMTMgKzI2NzcsMTMgQEAgdm9pZCBIVE1MU2VsZWN0
RWxlbWVudEltcGw6OnNldFZhbHVlKGNvbgogICAgIC8vIGFuZCBtYWtlIGl0IHRoZSBjdXJyZW50
IHNlbGVjdGlvbi4KICAgICBRTWVtQXJyYXk8SFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwqPiBp
dGVtcyA9IGxpc3RJdGVtcygpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpdGVtcy5z
aXplKCk7IGkrKykKLSAgICAgICAgaWYgKGl0ZW1zW2ldLT5pZCgpID09IElEX09QVElPTiAmJiBz
dGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudEltcGwqPihpdGVtc1tpXSktPnZhbHVlKCkgPT0g
dmFsdWUpIHsKKyAgICAgICAgaWYgKGl0ZW1zW2ldLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpv
cHRpb24oKSkgJiYgc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnRJbXBsKj4oaXRlbXNbaV0p
LT52YWx1ZSgpID09IHZhbHVlKSB7CiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxIVE1MT3B0aW9u
RWxlbWVudEltcGwqPihpdGVtc1tpXSktPnNldFNlbGVjdGVkKHRydWUpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CiB9CiAKLVFTdHJpbmcgSFRNTFNlbGVjdEVsZW1lbnRJbXBsOjpz
dGF0ZSggKQorUVN0cmluZyBIVE1MU2VsZWN0RWxlbWVudEltcGw6OnN0YXRlKCkKIHsKICNpZiAh
QVBQTEVfQ0hBTkdFUwogICAgIFFTdHJpbmcgc3RhdGU7CkBAIC0yNzA4LDcgKzI2OTYsNyBAQCBR
U3RyaW5nIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6c3RhdGUoICkKICAgICBRQ2hhciBzdGF0ZUNo
YXJzW2xdOwogICAgIAogICAgIGZvcihpbnQgaSA9IDA7IGkgPCBsOyBpKyspCi0gICAgICAgIGlm
KGl0ZW1zW2ldLT5pZCgpID09IElEX09QVElPTiAmJiBzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxl
bWVudEltcGwqPihpdGVtc1tpXSktPnNlbGVjdGVkKCkpCisgICAgICAgIGlmKGl0ZW1zW2ldLT5o
YXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvcHRpb24oKSkgJiYgc3RhdGljX2Nhc3Q8SFRNTE9wdGlv
bkVsZW1lbnRJbXBsKj4oaXRlbXNbaV0pLT5zZWxlY3RlZCgpKQogICAgICAgICAgICAgc3RhdGVD
aGFyc1tpXSA9ICdYJzsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgc3RhdGVDaGFyc1tpXSA9
ICcuJzsKQEAgLTI3NDUsNyArMjczMyw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnRJbXBsOjpy
ZXN0b3JlU3RhdGUKIAogICAgIGludCBsID0gaXRlbXMuY291bnQoKTsKICAgICBmb3IoaW50IGkg
PSAwOyBpIDwgbDsgaSsrKSB7Ci0gICAgICAgIGlmKGl0ZW1zW2ldLT5pZCgpID09IElEX09QVElP
TikgeworICAgICAgICBpZihpdGVtc1tpXS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b3B0aW9u
KCkpKSB7CiAgICAgICAgICAgICBIVE1MT3B0aW9uRWxlbWVudEltcGwqIG9lID0gc3RhdGljX2Nh
c3Q8SFRNTE9wdGlvbkVsZW1lbnRJbXBsKj4oaXRlbXNbaV0pOwogICAgICAgICAgICAgb2UtPnNl
dFNlbGVjdGVkKHN0YXRlW2ldID09ICdYJyk7CiAgICAgICAgIH0KQEAgLTI4MzcsNyArMjgyNSw3
IEBAIGJvb2wgSFRNTFNlbGVjdEVsZW1lbnRJbXBsOjphcHBlbmRGb3JtRGEKIAogICAgIHVpbnQg
aTsKICAgICBmb3IgKGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgaWYg
KGl0ZW1zW2ldLT5pZCgpID09IElEX09QVElPTikgeworICAgICAgICBpZiAoaXRlbXNbaV0tPmhh
c0xvY2FsTmFtZShIVE1MTmFtZXM6Om9wdGlvbigpKSkgewogICAgICAgICAgICAgSFRNTE9wdGlv
bkVsZW1lbnRJbXBsICpvcHRpb24gPSBzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudEltcGwq
PihpdGVtc1tpXSk7CiAgICAgICAgICAgICBpZiAob3B0aW9uLT5zZWxlY3RlZCgpKSB7CiAgICAg
ICAgICAgICAgICAgZW5jb2RlZF92YWx1ZXMuYXBwZW5kRGF0YShuYW1lKCksIG9wdGlvbi0+dmFs
dWUoKSk7CkBAIC0yODUwLDcgKzI4MzgsNyBAQCBib29sIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6
YXBwZW5kRm9ybURhCiAgICAgLy8gaW4gYW55IGNhc2UuIG90aGVyd2lzZSB3ZSBoYXZlIG5vIGNv
bnNpc3RlbmN5IHdpdGggdGhlIERPTSBpbnRlcmZhY2UuIEZJWE1FIQogICAgIC8vIHdlIHJldHVy
biB0aGUgZmlyc3Qgb25lIGlmIGl0IHdhcyBhIGNvbWJvYm94IHNlbGVjdAogICAgIGlmICghc3Vj
Y2Vzc2Z1bCAmJiAhbV9tdWx0aXBsZSAmJiBtX3NpemUgPD0gMSAmJiBpdGVtcy5zaXplKCkgJiYK
LSAgICAgICAgKGl0ZW1zWzBdLT5pZCgpID09IElEX09QVElPTikgKSB7CisgICAgICAgIChpdGVt
c1swXS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpKSkgewogICAgICAgICBIVE1M
T3B0aW9uRWxlbWVudEltcGwgKm9wdGlvbiA9IHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50
SW1wbCo+KGl0ZW1zWzBdKTsKICAgICAgICAgaWYgKG9wdGlvbi0+dmFsdWUoKS5pc051bGwoKSkK
ICAgICAgICAgICAgIGVuY29kZWRfdmFsdWVzLmFwcGVuZERhdGEobmFtZSgpLCBvcHRpb24tPnRl
eHQoKS5zdHJpbmcoKS5zdHJpcFdoaXRlU3BhY2UoKSk7CkBAIC0yODczLDcgKzI4NjEsNyBAQCBp
bnQgSFRNTFNlbGVjdEVsZW1lbnRJbXBsOjpvcHRpb25Ub0xpc3RJCiAgICAgZm9yICg7CiAgICAg
ICAgICBvcHRpb25JbmRleDIgPCBpbnQoaXRlbXMuc2l6ZSgpKSAmJiBvcHRpb25JbmRleDIgPD0g
b3B0aW9uSW5kZXg7CiAgICAgICAgICBsaXN0SW5kZXgrKykgeyAvLyBub3QgYSB0eXBvIQotICAg
ICAgICBpZiAoaXRlbXNbbGlzdEluZGV4XS0+aWQoKSA9PSBJRF9PUFRJT04pCisgICAgICAgIGlm
IChpdGVtc1tsaXN0SW5kZXhdLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvcHRpb24oKSkpCiAg
ICAgICAgICAgICBvcHRpb25JbmRleDIrKzsKICAgICB9CiAgICAgbGlzdEluZGV4LS07CkBAIC0y
ODg0LDEzICsyODcyLDEzIEBAIGludCBIVE1MU2VsZWN0RWxlbWVudEltcGw6Omxpc3RUb09wdGlv
bkkKIHsKICAgICBRTWVtQXJyYXk8SFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwqPiBpdGVtcyA9
IGxpc3RJdGVtcygpOwogICAgIGlmIChsaXN0SW5kZXggPCAwIHx8IGxpc3RJbmRleCA+PSBpbnQo
aXRlbXMuc2l6ZSgpKSB8fAotICAgICAgICBpdGVtc1tsaXN0SW5kZXhdLT5pZCgpICE9IElEX09Q
VElPTikKKyAgICAgICAgIWl0ZW1zW2xpc3RJbmRleF0tPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6
Om9wdGlvbigpKSkKICAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgaW50IG9wdGlvbkluZGV4ID0g
MDsgLy8gYWN0dWFsIGluZGV4IG9mIG9wdGlvbiBub3QgY291bnRpbmcgT1BUR1JPVVAgZW50cmll
cyB0aGF0IG1heSBiZSBpbiBsaXN0CiAgICAgaW50IGk7CiAgICAgZm9yIChpID0gMDsgaSA8IGxp
c3RJbmRleDsgaSsrKQotICAgICAgICBpZiAoaXRlbXNbaV0tPmlkKCkgPT0gSURfT1BUSU9OKQor
ICAgICAgICBpZiAoaXRlbXNbaV0tPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9wdGlvbigpKSkK
ICAgICAgICAgICAgIG9wdGlvbkluZGV4Kys7CiAgICAgcmV0dXJuIG9wdGlvbkluZGV4OwogfQpA
QCAtMjkxNiwxMyArMjkwNCwxMyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6cmVjYWxj
TGlzdEl0CiAgICAgbV9saXN0SXRlbXMucmVzaXplKDApOwogICAgIEhUTUxPcHRpb25FbGVtZW50
SW1wbCogZm91bmRTZWxlY3RlZCA9IDA7CiAgICAgd2hpbGUoY3VycmVudCkgewotICAgICAgICBp
ZiAoY3VycmVudC0+aWQoKSA9PSBJRF9PUFRHUk9VUCAmJiBjdXJyZW50LT5maXJzdENoaWxkKCkp
IHsKKyAgICAgICAgaWYgKGN1cnJlbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvcHRncm91cCgp
KSAmJiBjdXJyZW50LT5maXJzdENoaWxkKCkpIHsKICAgICAgICAgICAgIC8vICMjIyB3aGF0IGlm
IG9wdGdyb3VwIGNvbnRhaW5zIGp1c3QgY29tbWVudHM/IGRvbid0IHdhbnQgb25lIG9mIG5vIG9w
dGlvbnMgaW4gaXQuLi4KICAgICAgICAgICAgIG1fbGlzdEl0ZW1zLnJlc2l6ZShtX2xpc3RJdGVt
cy5zaXplKCkrMSk7CiAgICAgICAgICAgICBtX2xpc3RJdGVtc1ttX2xpc3RJdGVtcy5zaXplKCkt
MV0gPSBzdGF0aWNfY2FzdDxIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbCo+KGN1cnJlbnQpOwog
ICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQtPmZpcnN0Q2hpbGQoKTsKICAgICAgICAgfQot
ICAgICAgICBpZiAoY3VycmVudC0+aWQoKSA9PSBJRF9PUFRJT04pIHsKKyAgICAgICAgaWYgKGN1
cnJlbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvcHRpb24oKSkpIHsKICAgICAgICAgICAgIG1f
bGlzdEl0ZW1zLnJlc2l6ZShtX2xpc3RJdGVtcy5zaXplKCkrMSk7CiAgICAgICAgICAgICBtX2xp
c3RJdGVtc1ttX2xpc3RJdGVtcy5zaXplKCktMV0gPSBzdGF0aWNfY2FzdDxIVE1MR2VuZXJpY0Zv
cm1FbGVtZW50SW1wbCo+KGN1cnJlbnQpOwogICAgICAgICAgICAgaWYgKCFmb3VuZFNlbGVjdGVk
ICYmICFtX211bHRpcGxlICYmIG1fc2l6ZSA8PSAxKSB7CkBAIC0yOTY0LDcgKzI5NTIsNyBAQCB2
b2lkIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6cmVzZXQoKQogICAgIFFNZW1BcnJheTxIVE1MR2Vu
ZXJpY0Zvcm1FbGVtZW50SW1wbCo+IGl0ZW1zID0gbGlzdEl0ZW1zKCk7CiAgICAgdWludCBpOwog
ICAgIGZvciAoaSA9IDA7IGkgPCBpdGVtcy5zaXplKCk7IGkrKykgewotICAgICAgICBpZiAoaXRl
bXNbaV0tPmlkKCkgPT0gSURfT1BUSU9OKSB7CisgICAgICAgIGlmIChpdGVtc1tpXS0+aGFzTG9j
YWxOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpKSB7CiAgICAgICAgICAgICBIVE1MT3B0aW9uRWxl
bWVudEltcGwgKm9wdGlvbiA9IHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50SW1wbCo+KGl0
ZW1zW2ldKTsKICAgICAgICAgICAgIGJvb2wgc2VsZWN0ZWQgPSAoIW9wdGlvbi0+Z2V0QXR0cmli
dXRlKEFUVFJfU0VMRUNURUQpLmlzTnVsbCgpKTsKICAgICAgICAgICAgIG9wdGlvbi0+c2V0U2Vs
ZWN0ZWQoc2VsZWN0ZWQpOwpAQCAtMjk4Miw3ICsyOTcwLDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxl
bWVudEltcGw6Om5vdGlmeU9wdGlvbgogICAgICAgICBRTWVtQXJyYXk8SFRNTEdlbmVyaWNGb3Jt
RWxlbWVudEltcGwqPiBpdGVtcyA9IGxpc3RJdGVtcygpOwogICAgICAgICB1aW50IGk7CiAgICAg
ICAgIGZvciAoaSA9IDA7IGkgPCBpdGVtcy5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgaWYg
KGl0ZW1zW2ldLT5pZCgpID09IElEX09QVElPTikKKyAgICAgICAgICAgIGlmIChpdGVtc1tpXS0+
aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpKQogICAgICAgICAgICAgICAgIHN0YXRp
Y19jYXN0PEhUTUxPcHRpb25FbGVtZW50SW1wbCo+KGl0ZW1zW2ldKS0+bV9zZWxlY3RlZCA9IChp
dGVtc1tpXSA9PSBzZWxlY3RlZE9wdGlvbik7CiAgICAgICAgIH0KICAgICB9CkBAIC0zMDI5LDcg
KzMwMTcsNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6c2V0U2l6ZShsb25nCiAvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxLZXlnZW5FbGVtZW50SW1wbDo6SFRNTEtleWdlbkVsZW1l
bnRJbXBsKERvY3VtZW50UHRyKiBkb2MsIEhUTUxGb3JtRWxlbWVudEltcGwqIGYpCi0gICAgOiBI
VE1MU2VsZWN0RWxlbWVudEltcGwoZG9jLCBmKQorICAgIDogSFRNTFNlbGVjdEVsZW1lbnRJbXBs
KEhUTUxOYW1lczo6a2V5Z2VuKCksIGRvYywgZikKIHsKICAgICBRU3RyaW5nTGlzdCBrZXlzID0g
S1NTTEtleUdlbjo6c3VwcG9ydGVkS2V5U2l6ZXMoKTsKICAgICBmb3IgKFFTdHJpbmdMaXN0OjpJ
dGVyYXRvciBpID0ga2V5cy5iZWdpbigpOyBpICE9IGtleXMuZW5kKCk7ICsraSkgewpAQCAtMzAz
OSwxMSArMzAyNyw2IEBAIEhUTUxLZXlnZW5FbGVtZW50SW1wbDo6SFRNTEtleWdlbkVsZW1lbnQK
ICAgICB9CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MS2V5Z2VuRWxlbWVudEltcGw6OmlkKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gSURfS0VZR0VOOwotfQotCiBET01TdHJpbmcgSFRNTEtleWdlbkVs
ZW1lbnRJbXBsOjp0eXBlKCkgY29uc3QKIHsKICAgICByZXR1cm4gImtleWdlbiI7CkBAIC0zMDk4
LDcgKzMwODEsNyBAQCBib29sIEhUTUxLZXlnZW5FbGVtZW50SW1wbDo6YXBwZW5kRm9ybURhCiAv
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxPcHRHcm91cEVsZW1lbnRJbXBsOjpIVE1MT3B0R3Jv
dXBFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmKQot
ICAgIDogSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwoZG9jLCBmKQorICAgIDogSFRNTEdlbmVy
aWNGb3JtRWxlbWVudEltcGwoSFRNTE5hbWVzOjpvcHRncm91cCgpLCBkb2MsIGYpCiB7CiB9CiAK
QEAgLTMxMTEsMTEgKzMwOTQsNiBAQCBib29sIEhUTUxPcHRHcm91cEVsZW1lbnRJbXBsOjppc0Zv
Y3VzYWJsCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTE9wdEdyb3Vw
RWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfT1BUR1JPVVA7Ci19Ci0K
IERPTVN0cmluZyBIVE1MT3B0R3JvdXBFbGVtZW50SW1wbDo6dHlwZSgpIGNvbnN0CiB7CiAgICAg
cmV0dXJuICJvcHRncm91cCI7CkBAIC0zMTY5LDcgKzMxNDcsNyBAQCB2b2lkIEhUTUxPcHRHcm91
cEVsZW1lbnRJbXBsOjpwYXJzZU1hcHBlCiB2b2lkIEhUTUxPcHRHcm91cEVsZW1lbnRJbXBsOjpy
ZWNhbGNTZWxlY3RPcHRpb25zKCkKIHsKICAgICBOb2RlSW1wbCAqc2VsZWN0ID0gcGFyZW50Tm9k
ZSgpOwotICAgIHdoaWxlIChzZWxlY3QgJiYgc2VsZWN0LT5pZCgpICE9IElEX1NFTEVDVCkKKyAg
ICB3aGlsZSAoc2VsZWN0ICYmICFzZWxlY3QtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzZWxlY3Qo
KSkpCiAgICAgICAgIHNlbGVjdCA9IHNlbGVjdC0+cGFyZW50Tm9kZSgpOwogICAgIGlmIChzZWxl
Y3QpCiAgICAgICAgIHN0YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50SW1wbCo+KHNlbGVjdCkt
PnNldFJlY2FsY0xpc3RJdGVtcygpOwpAQCAtMzE4OCw3ICszMTY2LDcgQEAgdm9pZCBIVE1MT3B0
R3JvdXBFbGVtZW50SW1wbDo6c2V0TGFiZWwoYwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBIVE1M
T3B0aW9uRWxlbWVudEltcGw6OkhUTUxPcHRpb25FbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9j
LCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmKQotICAgIDogSFRNTEdlbmVyaWNGb3JtRWxlbWVudElt
cGwoZG9jLCBmKQorICAgIDogSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwoSFRNTE5hbWVzOjpv
cHRpb24oKSwgZG9jLCBmKQogewogICAgIG1fc2VsZWN0ZWQgPSBmYWxzZTsKIH0KQEAgLTMxOTgs
MTEgKzMxNzYsNiBAQCBib29sIEhUTUxPcHRpb25FbGVtZW50SW1wbDo6aXNGb2N1c2FibGUoCiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTE9wdGlvbkVsZW1lbnRJbXBs
OjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX09QVElPTjsKLX0KLQogRE9NU3RyaW5nIEhU
TUxPcHRpb25FbGVtZW50SW1wbDo6dHlwZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuICJvcHRpb24i
OwpAQCAtMzI0OSw4ICszMjIyLDcgQEAgbG9uZyBIVE1MT3B0aW9uRWxlbWVudEltcGw6OmluZGV4
KCkgY29ucwogICAgIGludCBsID0gaXRlbXMuY291bnQoKTsKICAgICBpbnQgb3B0aW9uSW5kZXgg
PSAwOwogICAgIGZvcihpbnQgaSA9IDA7IGkgPCBsOyBpKyspIHsKLSAgICAgICAgaWYoaXRlbXNb
aV0tPmlkKCkgPT0gSURfT1BUSU9OKQotICAgICAgICB7CisgICAgICAgIGlmIChpdGVtc1tpXS0+
aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpKSB7CiAgICAgICAgICAgICBpZiAoc3Rh
dGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnRJbXBsKj4oaXRlbXNbaV0pID09IHRoaXMpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIG9wdGlvbkluZGV4OwogICAgICAgICAgICAgb3B0aW9uSW5kZXgr
KzsKQEAgLTMzMTUsNyArMzI4Nyw3IEBAIHZvaWQgSFRNTE9wdGlvbkVsZW1lbnRJbXBsOjpjaGls
ZHJlbkNoYW4KIEhUTUxTZWxlY3RFbGVtZW50SW1wbCAqSFRNTE9wdGlvbkVsZW1lbnRJbXBsOjpn
ZXRTZWxlY3QoKSBjb25zdAogewogICAgIE5vZGVJbXBsICpzZWxlY3QgPSBwYXJlbnROb2RlKCk7
Ci0gICAgd2hpbGUgKHNlbGVjdCAmJiBzZWxlY3QtPmlkKCkgIT0gSURfU0VMRUNUKQorICAgIHdo
aWxlIChzZWxlY3QgJiYgIXNlbGVjdC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnNlbGVjdCgpKSkK
ICAgICAgICAgc2VsZWN0ID0gc2VsZWN0LT5wYXJlbnROb2RlKCk7CiAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PEhUTUxTZWxlY3RFbGVtZW50SW1wbCo+KHNlbGVjdCk7CiB9CkBAIC0zMzQzLDcgKzMz
MTUsNyBAQCB2b2lkIEhUTUxPcHRpb25FbGVtZW50SW1wbDo6c2V0TGFiZWwoY29uCiAvLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCiAKIEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBsOjpIVE1MVGV4dEFyZWFFbGVt
ZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmKQotICAgIDog
SFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwoZG9jLCBmKSwgbV92YWx1ZUlzVmFsaWQoZmFsc2Up
LCBtX3ZhbHVlTWF0Y2hlc1JlbmRlcmVyKGZhbHNlKQorICAgIDogSFRNTEdlbmVyaWNGb3JtRWxl
bWVudEltcGwoSFRNTE5hbWVzOjp0ZXh0YXJlYSgpLCBkb2MsIGYpLCBtX3ZhbHVlSXNWYWxpZChm
YWxzZSksIG1fdmFsdWVNYXRjaGVzUmVuZGVyZXIoZmFsc2UpCiB7CiAgICAgLy8gRFREIHJlcXVp
cmVzIHJvd3MgJiBjb2xzIGJlIHNwZWNpZmllZCwgYnV0IHdlIHdpbGwgcHJvdmlkZSByZWFzb25h
YmxlIGRlZmF1bHRzCiAgICAgbV9yb3dzID0gMjsKQEAgLTMzNTYsMTEgKzMzMjgsNiBAQCBIVE1M
VGV4dEFyZWFFbGVtZW50SW1wbDo6fkhUTUxUZXh0QXJlYUVsCiAgICAgaWYgKGdldERvY3VtZW50
KCkpIGdldERvY3VtZW50KCktPmRlcmVnaXN0ZXJNYWludGFpbnNTdGF0ZSh0aGlzKTsKIH0KIAot
Tm9kZUltcGw6OklkIEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIElEX1RFWFRBUkVBOwotfQotCiBET01TdHJpbmcgSFRNTFRleHRBcmVhRWxlbWVudElt
cGw6OnR5cGUoKSBjb25zdAogewogICAgIHJldHVybiAidGV4dGFyZWEiOwpAQCAtMzU3NiwxNyAr
MzU0MywxMiBAQCB2b2lkIEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBsOjpzZXRSb3dzKGxvCiAvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxJc0luZGV4RWxlbWVudEltcGw6OkhUTUxJc0luZGV4RWxl
bWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgSFRNTEZvcm1FbGVtZW50SW1wbCAqZikKLSAgICA6
IEhUTUxJbnB1dEVsZW1lbnRJbXBsKGRvYywgZikKKyAgICA6IEhUTUxJbnB1dEVsZW1lbnRJbXBs
KEhUTUxOYW1lczo6aXNpbmRleCgpLCBkb2MsIGYpCiB7CiAgICAgbV90eXBlID0gVEVYVDsKICAg
ICBzZXRPdmVycmlkZU5hbWUoImlzaW5kZXgiKTsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxJc0lu
ZGV4RWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfSVNJTkRFWDsKLX0K
LQogdm9pZCBIVE1MSXNJbmRleEVsZW1lbnRJbXBsOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBw
ZWRBdHRyaWJ1dGVJbXBsKiBhdHRyKQogewogICAgIHN3aXRjaChhdHRyLT5pZCgpKQpJbmRleDog
a2h0bWwvaHRtbC9odG1sX2Zvcm1pbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sX2Zvcm1pbXBsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuNzQKZGlmZiAtdSAtcCAtcjEuNzQga2h0bWwvaHRtbC9odG1sX2Zvcm1pbXBsLmgKLS0tIGto
dG1sL2h0bWwvaHRtbF9mb3JtaW1wbC5oCTIwIEp1biAyMDA1IDA1OjUyOjE2IC0wMDAwCTEuNzQK
KysrIGtodG1sL2h0bWwvaHRtbF9mb3JtaW1wbC5oCTIzIEp1biAyMDA1IDIxOjUyOjM4IC0wMDAw
CkBAIC02Nyw3ICs2Nyw4IEBAIHB1YmxpYzoKICAgICBIVE1MRm9ybUVsZW1lbnRJbXBsKERvY3Vt
ZW50UHRyICpkb2MpOwogICAgIHZpcnR1YWwgfkhUTUxGb3JtRWxlbWVudEltcGwoKTsKIAotICAg
IHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFn
UmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQorICAgIHZp
cnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMzsgfQogCiAgICAgdmlydHVh
bCB2b2lkIGF0dGFjaCgpOwogICAgIHZpcnR1YWwgdm9pZCBkZXRhY2goKTsKQEAgLTE2MSw5ICsx
NjIsMTIgQEAgY2xhc3MgSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwgOiBwdWJsaQogICAgIGZy
aWVuZCBjbGFzcyBraHRtbDo6UmVuZGVyRm9ybUVsZW1lbnQ7CiAKIHB1YmxpYzoKLSAgICBIVE1M
R2VuZXJpY0Zvcm1FbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJ
bXBsICpmID0gMCk7CisgICAgSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwoY29uc3QgUXVhbGlm
aWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnRQdHIgKmRvYywgSFRNTEZvcm1FbGVtZW50SW1wbCAq
ZiA9IDApOwogICAgIHZpcnR1YWwgfkhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKCk7CiAKKyAg
ICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVy
biBUYWdTdGF0dXNSZXF1aXJlZDsgfQorICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29u
c3QgeyByZXR1cm4gMTsgfQorCiAgICAgSFRNTEZvcm1FbGVtZW50SW1wbCAqZm9ybSgpIHsgcmV0
dXJuIG1fZm9ybTsgfQogCiAgICAgdmlydHVhbCBET01TdHJpbmcgdHlwZSgpIGNvbnN0ID0gMDsK
QEAgLTIzNSw3ICsyMzksNiBAQCBjbGFzcyBIVE1MQnV0dG9uRWxlbWVudEltcGwgOiBwdWJsaWMg
SFRNCiB7CiBwdWJsaWM6CiAgICAgSFRNTEJ1dHRvbkVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpk
b2MsIEhUTUxGb3JtRWxlbWVudEltcGwgKmYgPSAwKTsKLQogICAgIHZpcnR1YWwgfkhUTUxCdXR0
b25FbGVtZW50SW1wbCgpOwogCiAgICAgZW51bSB0eXBlRW51bSB7CkBAIC0yNDQsNyArMjQ3LDYg
QEAgcHVibGljOgogICAgICAgICBCVVRUT04KICAgICB9OwogCi0gICAgdmlydHVhbCBJZCBpZCgp
IGNvbnN0OwogICAgIERPTVN0cmluZyB0eXBlKCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQg
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqYXR0cik7CkBAIC0yODAs
MTEgKzI4MiwxMCBAQCBjbGFzcyBIVE1MRmllbGRTZXRFbGVtZW50SW1wbCA6IHB1YmxpYyBICiB7
CiBwdWJsaWM6CiAgICAgSFRNTEZpZWxkU2V0RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywg
SFRNTEZvcm1FbGVtZW50SW1wbCAqZiA9IDApOwotCiAgICAgdmlydHVhbCB+SFRNTEZpZWxkU2V0
RWxlbWVudEltcGwoKTsKLQotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKICAgICAKKyAgICB2
aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDM7IH0KKwogICAgIHZpcnR1
YWwgYm9vbCBpc0ZvY3VzYWJsZSgpIGNvbnN0OwogICAgIAogICAgIHZpcnR1YWwga2h0bWw6OlJl
bmRlck9iamVjdCAqY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEgKiwga2h0bWw6OlJlbmRlclN0
eWxlICopOwpAQCAtMzI2LDkgKzMyNywxMiBAQCBwdWJsaWM6CiAgICAgfTsKIAogICAgIEhUTUxJ
bnB1dEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIEhUTUxGb3JtRWxlbWVudEltcGwgKmYg
PSAwKTsKKyAgICBIVE1MSW5wdXRFbGVtZW50SW1wbChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdO
YW1lLCBEb2N1bWVudFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmID0gMCk7CiAgICAg
dmlydHVhbCB+SFRNTElucHV0RWxlbWVudEltcGwoKTsKKyAgICB2b2lkIGluaXQoKTsKIAotICAg
IHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFn
UmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNGb3JiaWRkZW47IH0KKyAgICB2
aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KIAogICAgIHZpcnR1
YWwgYm9vbCBpc0VudW1lcmF0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIGlucHV0VHlwZSgpICE9IElN
QUdFOyB9CiAKQEAgLTQ1MSw5ICs0NTUsOSBAQCBwdWJsaWM6CiAgICAgSFRNTExhYmVsRWxlbWVu
dEltcGwoRG9jdW1lbnRQdHIgKmRvYyk7CiAgICAgdmlydHVhbCB+SFRNTExhYmVsRWxlbWVudElt
cGwoKTsKIAorICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gNTsg
fQorCiAgICAgdmlydHVhbCBib29sIGlzRm9jdXNhYmxlKCkgY29uc3Q7Ci0gICAgCi0gICAgdmly
dHVhbCBJZCBpZCgpIGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmli
dXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIpOwogCkBAIC00ODgsNyArNDkyLDYgQEAgcHVi
bGljOgogCiAgICAgdmlydHVhbCBib29sIGlzRm9jdXNhYmxlKCkgY29uc3Q7CiAgICAgCi0gICAg
dmlydHVhbCBJZCBpZCgpIGNvbnN0OwogICAgIHZpcnR1YWwga2h0bWw6OlJlbmRlck9iamVjdCAq
Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEgKiwga2h0bWw6OlJlbmRlclN0eWxlICopOwogCiAg
ICAgdmlydHVhbCBET01TdHJpbmcgdHlwZSgpIGNvbnN0OwpAQCAtNTE3LDkgKzUyMCwxMiBAQCBj
bGFzcyBIVE1MU2VsZWN0RWxlbWVudEltcGwgOiBwdWJsaWMgSFRNCiAKIHB1YmxpYzoKICAgICBI
VE1MU2VsZWN0RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgSFRNTEZvcm1FbGVtZW50SW1w
bCAqZiA9IDApOworICAgIEhUTUxTZWxlY3RFbGVtZW50SW1wbChjb25zdCBRdWFsaWZpZWROYW1l
JiB0YWdOYW1lLCBEb2N1bWVudFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmID0gMCk7
CiAgICAgfkhUTUxTZWxlY3RFbGVtZW50SW1wbCgpOworICAgIHZvaWQgaW5pdCgpOworCisgICAg
dmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiA2OyB9CiAKLSAgICB2aXJ0
dWFsIElkIGlkKCkgY29uc3Q7CiAgICAgRE9NU3RyaW5nIHR5cGUoKSBjb25zdDsKIAogICAgIHZp
cnR1YWwgdm9pZCByZWNhbGNTdHlsZSggU3R5bGVDaGFuZ2UgKTsKQEAgLTYwNiw3ICs2MTIsNyBA
QCBjbGFzcyBIVE1MS2V5Z2VuRWxlbWVudEltcGwgOiBwdWJsaWMgSFRNCiBwdWJsaWM6CiAgICAg
SFRNTEtleWdlbkVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIEhUTUxGb3JtRWxlbWVudElt
cGwgKmYgPSAwKTsKIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGlu
dCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KIAogICAgIERPTVN0cmluZyB0eXBl
KCkgY29uc3Q7CiAKQEAgLTYyOCw3ICs2MzQsNiBAQCBwdWJsaWM6CiAgICAgSFRNTE9wdEdyb3Vw
RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgSFRNTEZvcm1FbGVtZW50SW1wbCAqZiA9IDAp
OwogICAgIHZpcnR1YWwgfkhUTUxPcHRHcm91cEVsZW1lbnRJbXBsKCk7CiAKLSAgICB2aXJ0dWFs
IElkIGlkKCkgY29uc3Q7CiAgICAgRE9NU3RyaW5nIHR5cGUoKSBjb25zdDsKIAogICAgIHZpcnR1
YWwgYm9vbCBpc0ZvY3VzYWJsZSgpIGNvbnN0OwpAQCAtNjU2LDkgKzY2MSwxMSBAQCBjbGFzcyBI
VE1MT3B0aW9uRWxlbWVudEltcGwgOiBwdWJsaWMgSFRNCiBwdWJsaWM6CiAgICAgSFRNTE9wdGlv
bkVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIEhUTUxGb3JtRWxlbWVudEltcGwgKmYgPSAw
KTsKIAorICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0
IHsgcmV0dXJuIFRhZ1N0YXR1c09wdGlvbmFsOyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3Jp
dHkoKSBjb25zdCB7IHJldHVybiAyOyB9CisKICAgICB2aXJ0dWFsIGJvb2wgaXNGb2N1c2FibGUo
KSBjb25zdDsKLSAgICAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CisKICAgICBET01TdHJp
bmcgdHlwZSgpIGNvbnN0OwogCiAgICAgRE9NU3RyaW5nIHRleHQoKSBjb25zdDsKQEAgLTcwNiw4
ICs3MTMsNiBAQCBwdWJsaWM6CiAgICAgSFRNTFRleHRBcmVhRWxlbWVudEltcGwoRG9jdW1lbnRQ
dHIgKmRvYywgSFRNTEZvcm1FbGVtZW50SW1wbCAqZiA9IDApOwogICAgIH5IVE1MVGV4dEFyZWFF
bGVtZW50SW1wbCgpOwogCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwotCiAgICAgbG9uZyBj
b2xzKCkgY29uc3QgeyByZXR1cm4gbV9jb2xzOyB9CiAKICAgICBsb25nIHJvd3MoKSBjb25zdCB7
IHJldHVybiBtX3Jvd3M7IH0KQEAgLTc3MCw3ICs3NzUsOCBAQCBjbGFzcyBIVE1MSXNJbmRleEVs
ZW1lbnRJbXBsIDogcHVibGljIEhUCiBwdWJsaWM6CiAgICAgSFRNTElzSW5kZXhFbGVtZW50SW1w
bChEb2N1bWVudFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmID0gMCk7CiAKLSAgICB2
aXJ0dWFsIElkIGlkKCkgY29uc3Q7CisgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1Jl
cXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzRm9yYmlkZGVuOyB9CisgICAgdmly
dHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAwOyB9CiAKICAgICB2aXJ0dWFs
IHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqYXR0cik7CiAK
SW5kZXg6IGtodG1sL2h0bWwvaHRtbF9oZWFkaW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
L2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sX2hlYWRpbXBsLmNwcCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS41MApkaWZmIC11IC1wIC1yMS41MCBraHRtbC9odG1sL2h0bWxfaGVhZGlt
cGwuY3BwCi0tLSBraHRtbC9odG1sL2h0bWxfaGVhZGltcGwuY3BwCTIyIEp1biAyMDA1IDE4OjIy
OjAxIC0wMDAwCTEuNTAKKysrIGtodG1sL2h0bWwvaHRtbF9oZWFkaW1wbC5jcHAJMjMgSnVuIDIw
MDUgMjE6NTI6MzggLTAwMDAKQEAgLTQ2LDcgKzQ2LDcgQEAgdXNpbmcgbmFtZXNwYWNlIERPTTsK
IHVzaW5nIG5hbWVzcGFjZSBraHRtbDsKIAogSFRNTEJhc2VFbGVtZW50SW1wbDo6SFRNTEJhc2VF
bGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAgIDogSFRNTEVsZW1lbnRJbXBsKGRvYykK
KyAgICA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6OmJhc2UoKSwgZG9jKQogewogfQogCkBA
IC01NCwxMSArNTQsNiBAQCBIVE1MQmFzZUVsZW1lbnRJbXBsOjp+SFRNTEJhc2VFbGVtZW50SW1w
CiB7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MQmFzZUVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIElEX0JBU0U7Ci19Ci0KIHZvaWQgSFRNTEJhc2VFbGVtZW50SW1wbDo6cGFy
c2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqYXR0cikKIHsKICAgICBzd2l0
Y2goYXR0ci0+aWQoKSkKQEAgLTExOSw3ICsxMTQsNyBAQCB2b2lkIEhUTUxCYXNlRWxlbWVudElt
cGw6OnNldFRhcmdldChjb25zCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxMaW5rRWxlbWVu
dEltcGw6OkhUTUxMaW5rRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgICA6IEhUTUxF
bGVtZW50SW1wbChkb2MpCisgICAgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjpsaW5rKCks
IGRvYykKIHsKICAgICBtX3NoZWV0ID0gMDsKICAgICBtX2xvYWRpbmcgPSBmYWxzZTsKQEAgLTEz
NCwxMSArMTI5LDYgQEAgSFRNTExpbmtFbGVtZW50SW1wbDo6fkhUTUxMaW5rRWxlbWVudEltcAog
ICAgIGlmKG1fY2FjaGVkU2hlZXQpIG1fY2FjaGVkU2hlZXQtPmRlcmVmKHRoaXMpOwogfQogCi1O
b2RlSW1wbDo6SWQgSFRNTExpbmtFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVy
biBJRF9MSU5LOwotfQotCiB2b2lkIEhUTUxMaW5rRWxlbWVudEltcGw6OnNldERpc2FibGVkU3Rh
dGUoYm9vbCBfZGlzYWJsZWQpCiB7CiAgICAgaW50IG9sZERpc2FibGVkU3RhdGUgPSBtX2Rpc2Fi
bGVkU3RhdGU7CkBAIC00MjMsNyArNDEzLDcgQEAgdm9pZCBIVE1MTGlua0VsZW1lbnRJbXBsOjpz
ZXRUeXBlKGNvbnN0IAogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUhUTUxNZXRhRWxlbWVudElt
cGw6OkhUTUxNZXRhRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykgOiBIVE1MRWxlbWVudElt
cGwoZG9jKQorSFRNTE1ldGFFbGVtZW50SW1wbDo6SFRNTE1ldGFFbGVtZW50SW1wbChEb2N1bWVu
dFB0ciAqZG9jKSA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6Om1ldGEoKSwgZG9jKQogewog
fQogCkBAIC00MzEsMTEgKzQyMSw2IEBAIEhUTUxNZXRhRWxlbWVudEltcGw6On5IVE1MTWV0YUVs
ZW1lbnRJbXAKIHsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxNZXRhRWxlbWVudEltcGw6OmlkKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gSURfTUVUQTsKLX0KLQogdm9pZCBIVE1MTWV0YUVsZW1lbnRJ
bXBsOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICphdHRyKQogewog
ICAgIHN3aXRjaChhdHRyLT5pZCgpKQpAQCAtNTEyLDcgKzQ5Nyw3IEBAIHZvaWQgSFRNTE1ldGFF
bGVtZW50SW1wbDo6c2V0U2NoZW1lKGNvbnMKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogSFRNTFNj
cmlwdEVsZW1lbnRJbXBsOjpIVE1MU2NyaXB0RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykK
LSAgICA6IEhUTUxFbGVtZW50SW1wbChkb2MpLCBtX2NhY2hlZFNjcmlwdCgwKSwgbV9jcmVhdGVk
QnlQYXJzZXIoZmFsc2UpLCBtX2V2YWx1YXRlZChmYWxzZSkKKyAgICA6IEhUTUxFbGVtZW50SW1w
bChIVE1MTmFtZXM6OnNjcmlwdCgpLCBkb2MpLCBtX2NhY2hlZFNjcmlwdCgwKSwgbV9jcmVhdGVk
QnlQYXJzZXIoZmFsc2UpLCBtX2V2YWx1YXRlZChmYWxzZSkKIHsKIH0KIApAQCAtNTIyLDExICs1
MDcsNiBAQCBIVE1MU2NyaXB0RWxlbWVudEltcGw6On5IVE1MU2NyaXB0RWxlbWVuCiAgICAgICAg
IG1fY2FjaGVkU2NyaXB0LT5kZXJlZih0aGlzKTsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxTY3Jp
cHRFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9TQ1JJUFQ7Ci19Ci0K
IGJvb2wgSFRNTFNjcmlwdEVsZW1lbnRJbXBsOjppc1VSTEF0dHJpYnV0ZShBdHRyaWJ1dGVJbXBs
ICphdHRyKSBjb25zdAogewogICAgIHJldHVybiBhdHRyLT5pZCgpID09IEFUVFJfU1JDOwpAQCAt
Njk3LDcgKzY3Nyw3IEBAIHZvaWQgSFRNTFNjcmlwdEVsZW1lbnRJbXBsOjpzZXRUeXBlKGNvbnMK
IAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1IVE1MU3R5bGVFbGVtZW50SW1wbDo6SFRNTFN0eWxl
RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykgOiBIVE1MRWxlbWVudEltcGwoZG9jKQorSFRN
TFN0eWxlRWxlbWVudEltcGw6OkhUTUxTdHlsZUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2Mp
IDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6c3R5bGUoKSwgZG9jKQogewogICAgIG1fc2hl
ZXQgPSAwOwogICAgIG1fbG9hZGluZyA9IGZhbHNlOwpAQCAtNzA4LDExICs2ODgsNiBAQCBIVE1M
U3R5bGVFbGVtZW50SW1wbDo6fkhUTUxTdHlsZUVsZW1lbnRJCiAgICAgaWYobV9zaGVldCkgbV9z
aGVldC0+ZGVyZWYoKTsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxTdHlsZUVsZW1lbnRJbXBsOjpp
ZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX1NUWUxFOwotfQotCiAvLyBvdGhlciBzdHVmZi4u
Lgogdm9pZCBIVE1MU3R5bGVFbGVtZW50SW1wbDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVk
QXR0cmlidXRlSW1wbCAqYXR0cikKIHsKQEAgLTgyNCw3ICs3OTksNyBAQCB2b2lkIEhUTUxTdHls
ZUVsZW1lbnRJbXBsOjpzZXRUeXBlKGNvbnN0CiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxU
aXRsZUVsZW1lbnRJbXBsOjpIVE1MVGl0bGVFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQot
ICAgIDogSFRNTEVsZW1lbnRJbXBsKGRvYyksIG1fdGl0bGUoIiIpCisgICAgOiBIVE1MRWxlbWVu
dEltcGwoSFRNTE5hbWVzOjp0aXRsZSgpLCBkb2MpLCBtX3RpdGxlKCIiKQogewogfQogCkBAIC04
MzIsMTEgKzgwNyw2IEBAIEhUTUxUaXRsZUVsZW1lbnRJbXBsOjp+SFRNTFRpdGxlRWxlbWVudEkK
IHsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxUaXRsZUVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIElEX1RJVExFOwotfQotCiB2b2lkIEhUTUxUaXRsZUVsZW1lbnRJbXBsOjpp
bnNlcnRlZEludG9Eb2N1bWVudCgpCiB7CiAgICAgSFRNTEVsZW1lbnRJbXBsOjppbnNlcnRlZElu
dG9Eb2N1bWVudCgpOwpJbmRleDoga2h0bWwvaHRtbC9odG1sX2hlYWRpbXBsLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sX2hlYWRpbXBsLmgs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjAKZGlmZiAtdSAtcCAtcjEuMjAga2h0bWwvaHRtbC9o
dG1sX2hlYWRpbXBsLmgKLS0tIGtodG1sL2h0bWwvaHRtbF9oZWFkaW1wbC5oCTE5IEp1biAyMDA1
IDA1OjQ0OjI4IC0wMDAwCTEuMjAKKysrIGtodG1sL2h0bWwvaHRtbF9oZWFkaW1wbC5oCTIzIEp1
biAyMDA1IDIxOjUyOjM4IC0wMDAwCkBAIC00OSwxMCArNDksMTIgQEAgcHVibGljOgogICAgIEhU
TUxCYXNlRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYyk7CiAgICAgfkhUTUxCYXNlRWxlbWVu
dEltcGwoKTsKIAorICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgp
IGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c0ZvcmJpZGRlbjsgfQorICAgIHZpcnR1YWwgaW50IHRh
Z1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMDsgfQorCiAgICAgRE9NU3RyaW5nIGhyZWYoKSBj
b25zdCB7IHJldHVybiBtX2hyZWY7IH0KICAgICBET01TdHJpbmcgdGFyZ2V0KCkgY29uc3QgeyBy
ZXR1cm4gbV90YXJnZXQ7IH0KIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKICAgICB2aXJ0
dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqYXR0cik7
CiAgICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b0RvY3VtZW50KCk7CiAgICAgdmlydHVhbCB2
b2lkIHJlbW92ZWRGcm9tRG9jdW1lbnQoKTsKQEAgLTc3LDcgKzc5LDggQEAgcHVibGljOgogICAg
IEhUTUxMaW5rRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYyk7CiAgICAgfkhUTUxMaW5rRWxl
bWVudEltcGwoKTsKIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEhU
TUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNG
b3JiaWRkZW47IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJu
IDA7IH0KIAogICAgIGJvb2wgZGlzYWJsZWQoKSBjb25zdDsKICAgICB2b2lkIHNldERpc2FibGVk
KGJvb2wpOwpAQCAtMTUyLDEwICsxNTUsMTEgQEAgY2xhc3MgSFRNTE1ldGFFbGVtZW50SW1wbCA6
IHB1YmxpYyBIVE1MRQogewogcHVibGljOgogICAgIEhUTUxNZXRhRWxlbWVudEltcGwoRG9jdW1l
bnRQdHIgKmRvYyk7Ci0KICAgICB+SFRNTE1ldGFFbGVtZW50SW1wbCgpOwogCi0gICAgdmlydHVh
bCBJZCBpZCgpIGNvbnN0OworICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJl
bWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c0ZvcmJpZGRlbjsgfQorICAgIHZpcnR1YWwg
aW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMDsgfQorCiAgICAgdmlydHVhbCB2b2lk
IHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIpOwogICAgIHZp
cnR1YWwgdm9pZCBpbnNlcnRlZEludG9Eb2N1bWVudCgpOwogCkBAIC0xODUsMTMgKzE4OSwxNiBA
QCBjbGFzcyBIVE1MU2NyaXB0RWxlbWVudEltcGwgOiBwdWJsaWMgSFRNCiBwdWJsaWM6CiAgICAg
SFRNTFNjcmlwdEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpOwogICAgIH5IVE1MU2NyaXB0
RWxlbWVudEltcGwoKTsKLSAgICAKKworICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdS
ZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9CisgICAgdmly
dHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAxOyB9CisKICAgICB2aXJ0dWFs
IHZvaWQgaW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlZEZy
b21Eb2N1bWVudCgpOwogICAgIHZpcnR1YWwgdm9pZCBub3RpZnlGaW5pc2hlZChraHRtbDo6Q2Fj
aGVkT2JqZWN0ICpmaW5pc2hlZE9iaik7CisKICAgICB2aXJ0dWFsIHZvaWQgY2hpbGRyZW5DaGFu
Z2VkKCk7Ci0gICAgCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OworCiAgICAgdmlydHVhbCBi
b29sIGlzVVJMQXR0cmlidXRlKEF0dHJpYnV0ZUltcGwgKmF0dHIpIGNvbnN0OwogCiAgICAgdm9p
ZCBzZXRDcmVhdGVkQnlQYXJzZXIoYm9vbCBjcmVhdGVkQnlQYXJzZXIpIHsgbV9jcmVhdGVkQnlQ
YXJzZXIgPSBjcmVhdGVkQnlQYXJzZXI7IH0KQEAgLTIzMyw3ICsyNDAsOCBAQCBwdWJsaWM6CiAg
ICAgSFRNTFN0eWxlRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYyk7CiAgICAgfkhUTUxTdHls
ZUVsZW1lbnRJbXBsKCk7CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CisgICAgdmlydHVh
bCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3Rh
dHVzUmVxdWlyZWQ7IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0
dXJuIDE7IH0KIAogICAgIFN0eWxlU2hlZXRJbXBsICpzaGVldCgpIGNvbnN0IHsgcmV0dXJuIG1f
c2hlZXQ7IH0KIApAQCAtMjcxLDggKzI3OSw2IEBAIHB1YmxpYzoKIAogICAgIH5IVE1MVGl0bGVF
bGVtZW50SW1wbCgpOwogCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwotCiAgICAgdmlydHVh
bCB2b2lkIGluc2VydGVkSW50b0RvY3VtZW50KCk7CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZWRG
cm9tRG9jdW1lbnQoKTsKICAgICB2aXJ0dWFsIHZvaWQgY2hpbGRyZW5DaGFuZ2VkKCk7CkluZGV4
OiBraHRtbC9odG1sL2h0bWxfaW1hZ2VpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfaW1hZ2VpbXBsLmNwcCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS40MwpkaWZmIC11IC1wIC1yMS40MyBraHRtbC9odG1sL2h0bWxfaW1hZ2VpbXBs
LmNwcAotLS0ga2h0bWwvaHRtbC9odG1sX2ltYWdlaW1wbC5jcHAJMjEgSnVuIDIwMDUgMjI6Mjc6
NTUgLTAwMDAJMS40MworKysga2h0bWwvaHRtbC9odG1sX2ltYWdlaW1wbC5jcHAJMjMgSnVuIDIw
MDUgMjE6NTI6MzkgLTAwMDAKQEAgLTUxLDcgKzUxLDcgQEAKIHVzaW5nIG5hbWVzcGFjZSBET007
CiB1c2luZyBuYW1lc3BhY2Uga2h0bWw7CiAKLS8vI2RlZmluZSBJTlNUUlVNRU5UX0xBWU9VVF9T
Q0hFRFVMSU5HIDEKKy8vICNkZWZpbmUgSU5TVFJVTUVOVF9MQVlPVVRfU0NIRURVTElORyAxCiAK
IEhUTUxJbWFnZUxvYWRlcjo6SFRNTEltYWdlTG9hZGVyKEVsZW1lbnRJbXBsKiBlbHQpCiA6bV9l
bGVtZW50KGVsdCksIG1faW1hZ2UoMCksIG1fZmlyZWRMb2FkKHRydWUpLCBtX2ltYWdlQ29tcGxl
dGUodHJ1ZSkKQEAgLTc1LDcgKzc1LDcgQEAgdm9pZCBIVE1MSW1hZ2VMb2FkZXI6OnVwZGF0ZUZy
b21FbGVtZW50KAogICAgICAgICByZXR1cm47CiAKICAgICBBdG9taWNTdHJpbmcgYXR0cjsKLSAg
ICBpZiAoZWxlbWVudCgpLT5pZCgpID09IElEX09CSkVDVCkKKyAgICBpZiAoZWxlbWVudCgpLT5o
YXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvYmplY3QoKSkpCiAgICAgICAgIGF0dHIgPSBlbGVtZW50
KCktPmdldEF0dHJpYnV0ZShBVFRSX0RBVEEpOwogICAgIGVsc2UKICAgICAgICAgYXR0ciA9IGVs
ZW1lbnQoKS0+Z2V0QXR0cmlidXRlKEFUVFJfU1JDKTsKQEAgLTg2LDYgKzg2LDEwIEBAIHZvaWQg
SFRNTEltYWdlTG9hZGVyOjp1cGRhdGVGcm9tRWxlbWVudCgKICAgICAgICAgbmV3SW1hZ2UgPSBl
bGVtZW50KCktPmdldERvY3VtZW50KCktPmRvY0xvYWRlcigpLT5yZXF1ZXN0SW1hZ2Uoa2h0bWw6
OnBhcnNlVVJMKGF0dHIpKTsKIAogICAgIGlmIChuZXdJbWFnZSAhPSBtX2ltYWdlKSB7CisjaWZk
ZWYgSU5TVFJVTUVOVF9MQVlPVVRfU0NIRURVTElORworICAgICAgICBpZiAoIWRvY3VtZW50LT5v
d25lckVsZW1lbnQoKSAmJiBuZXdJbWFnZSkKKyAgICAgICAgICAgIHByaW50ZigiSW1hZ2UgcmVx
dWVzdGVkIGF0ICVkXG4iLCBlbGVtZW50KCktPmdldERvY3VtZW50KCktPmVsYXBzZWRUaW1lKCkp
OworI2VuZGlmCiAgICAgICAgIG1fZmlyZWRMb2FkID0gZmFsc2U7CiAgICAgICAgIG1faW1hZ2VD
b21wbGV0ZSA9IGZhbHNlOwogICAgICAgICBDYWNoZWRJbWFnZSogb2xkSW1hZ2UgPSBtX2ltYWdl
OwpAQCAtMTMzLDcgKzEzNyw3IEBAIHZvaWQgSFRNTEltYWdlTG9hZGVyOjpub3RpZnlGaW5pc2hl
ZChDYWMKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogSFRNTEltYWdlRWxlbWVudEltcGw6OkhUTUxJ
bWFnZUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIEhUTUxGb3JtRWxlbWVudEltcGwgKmYp
Ci0gICAgOiBIVE1MRWxlbWVudEltcGwoZG9jKSwgbV9pbWFnZUxvYWRlcih0aGlzKSwgaXNtYXAo
ZmFsc2UpLCBtX2Zvcm0oZikKKyAgICA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6OmltZygp
LCBkb2MpLCBtX2ltYWdlTG9hZGVyKHRoaXMpLCBpc21hcChmYWxzZSksIG1fZm9ybShmKQogewog
ICAgIGlmIChtX2Zvcm0pCiAgICAgICAgIG1fZm9ybS0+cmVnaXN0ZXJJbWdFbGVtZW50KHRoaXMp
OwpAQCAtMTQ1LDExICsxNDksNiBAQCBIVE1MSW1hZ2VFbGVtZW50SW1wbDo6fkhUTUxJbWFnZUVs
ZW1lbnRJCiAgICAgICAgIG1fZm9ybS0+cmVtb3ZlSW1nRWxlbWVudCh0aGlzKTsKIH0KIAotTm9k
ZUltcGw6OklkIEhUTUxJbWFnZUVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IElEX0lNRzsKLX0KLQogYm9vbCBIVE1MSW1hZ2VFbGVtZW50SW1wbDo6bWFwVG9FbnRyeShOb2Rl
SW1wbDo6SWQgYXR0ciwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3QKIHsKICAg
ICBzd2l0Y2goYXR0cikKQEAgLTUyOCw3ICs1MjcsNyBAQCBsb25nIEhUTUxJbWFnZUVsZW1lbnRJ
bXBsOjp5KCkgY29uc3QKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogSFRNTE1hcEVsZW1lbnRJbXBs
OjpIVE1MTWFwRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50
SW1wbChkb2MpCisgICAgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjptYXAoKSwgZG9jKQog
ewogfQogCkBAIC01MzgsMTEgKzUzNyw2IEBAIEhUTUxNYXBFbGVtZW50SW1wbDo6fkhUTUxNYXBF
bGVtZW50SW1wbCgKICAgICAgICAgZ2V0RG9jdW1lbnQoKS0+cmVtb3ZlSW1hZ2VNYXAodGhpcyk7
CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MTWFwRWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gSURfTUFQOwotfQotCiBib29sCiBIVE1MTWFwRWxlbWVudEltcGw6Om1hcE1vdXNl
RXZlbnQoaW50IHhfLCBpbnQgeV8sIGludCB3aWR0aF8sIGludCBoZWlnaHRfLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRlck9iamVjdDo6Tm9kZUluZm8mIGluZm8pCkBA
IC01NTIsMzIgKzU0NiwyOCBAQCBIVE1MTWFwRWxlbWVudEltcGw6Om1hcE1vdXNlRXZlbnQoaW50
IHhfCiAgICAgUVB0clN0YWNrPE5vZGVJbXBsPiBub2RlU3RhY2s7CiAKICAgICBOb2RlSW1wbCAq
Y3VycmVudCA9IGZpcnN0Q2hpbGQoKTsKLSAgICB3aGlsZSgxKQotICAgIHsKLSAgICAgICAgaWYo
IWN1cnJlbnQpCi0gICAgICAgIHsKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBpZiAoIWN1cnJl
bnQpIHsKICAgICAgICAgICAgIGlmKG5vZGVTdGFjay5pc0VtcHR5KCkpIGJyZWFrOwogICAgICAg
ICAgICAgY3VycmVudCA9IG5vZGVTdGFjay5wb3AoKTsKICAgICAgICAgICAgIGN1cnJlbnQgPSBj
dXJyZW50LT5uZXh0U2libGluZygpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0K
LSAgICAgICAgaWYoY3VycmVudC0+aWQoKT09SURfQVJFQSkKLSAgICAgICAgeworICAgICAgICAK
KyAgICAgICAgaWYgKGN1cnJlbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjphcmVhKCkpKSB7CiAg
ICAgICAgICAgICAvL2NvdXQgPDwgImFyZWEgZm91bmQgIiA8PCBlbmRsOwotICAgICAgICAgICAg
SFRNTEFyZWFFbGVtZW50SW1wbCogYXJlYT1zdGF0aWNfY2FzdDxIVE1MQXJlYUVsZW1lbnRJbXBs
Kj4oY3VycmVudCk7CisgICAgICAgICAgICBIVE1MQXJlYUVsZW1lbnRJbXBsKiBhcmVhID0gc3Rh
dGljX2Nhc3Q8SFRNTEFyZWFFbGVtZW50SW1wbCo+KGN1cnJlbnQpOwogICAgICAgICAgICAgaWYg
KGFyZWEtPm1hcE1vdXNlRXZlbnQoeF8seV8sd2lkdGhfLGhlaWdodF8sIGluZm8pKQogICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CisgICAgICAgIAogICAgICAgICBOb2Rl
SW1wbCAqY2hpbGQgPSBjdXJyZW50LT5maXJzdENoaWxkKCk7Ci0gICAgICAgIGlmKGNoaWxkKQot
ICAgICAgICB7CisgICAgICAgIGlmIChjaGlsZCkgewogICAgICAgICAgICAgbm9kZVN0YWNrLnB1
c2goY3VycmVudCk7CiAgICAgICAgICAgICBjdXJyZW50ID0gY2hpbGQ7CiAgICAgICAgIH0KICAg
ICAgICAgZWxzZQotICAgICAgICB7CiAgICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC0+bmV4
dFNpYmxpbmcoKTsKLSAgICAgICAgfQogICAgIH0KIAogICAgIHJldHVybiBmYWxzZTsKQEAgLTYz
NSwxMSArNjI1LDYgQEAgSFRNTEFyZWFFbGVtZW50SW1wbDo6fkhUTUxBcmVhRWxlbWVudEltcAog
ICAgIGlmIChtX2Nvb3JkcykgZGVsZXRlIFtdIG1fY29vcmRzOwogfQogCi1Ob2RlSW1wbDo6SWQg
SFRNTEFyZWFFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9BUkVBOwot
fQotCiB2b2lkIEhUTUxBcmVhRWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBl
ZEF0dHJpYnV0ZUltcGwgKmF0dHIpCiB7CiAgICAgc3dpdGNoIChhdHRyLT5pZCgpKQpJbmRleDog
a2h0bWwvaHRtbC9odG1sX2ltYWdlaW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbF9pbWFnZWltcGwuaCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS4yMQpkaWZmIC11IC1wIC1yMS4yMSBraHRtbC9odG1sL2h0bWxfaW1hZ2VpbXBsLmgKLS0t
IGtodG1sL2h0bWwvaHRtbF9pbWFnZWltcGwuaAkxMSBNYXkgMjAwNSAwNTo0OTozNCAtMDAwMAkx
LjIxCisrKyBraHRtbC9odG1sL2h0bWxfaW1hZ2VpbXBsLmgJMjMgSnVuIDIwMDUgMjE6NTI6Mzkg
LTAwMDAKQEAgLTc3LDcgKzc3LDggQEAgcHVibGljOgogICAgIEhUTUxJbWFnZUVsZW1lbnRJbXBs
KERvY3VtZW50UHRyICpkb2MsIEhUTUxGb3JtRWxlbWVudEltcGwgKmYgPSAwKTsKICAgICB+SFRN
TEltYWdlRWxlbWVudEltcGwoKTsKIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKKyAgICB2
aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBU
YWdTdGF0dXNGb3JiaWRkZW47IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0
IHsgcmV0dXJuIDA7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBtYXBUb0VudHJ5KE5vZGVJbXBsOjpJ
ZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdDsKICAgICB2aXJ0dWFs
IHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqKTsKQEAgLTE2
MSw3ICsxNjIsOCBAQCBwdWJsaWM6CiAgICAgSFRNTEFyZWFFbGVtZW50SW1wbChEb2N1bWVudFB0
ciAqZG9jKTsKICAgICB+SFRNTEFyZWFFbGVtZW50SW1wbCgpOwogCi0gICAgdmlydHVhbCBJZCBp
ZCgpIGNvbnN0OworICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgp
IGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c0ZvcmJpZGRlbjsgfQorICAgIHZpcnR1YWwgaW50IHRh
Z1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMDsgfQogCiAgICAgdmlydHVhbCB2b2lkIHBhcnNl
TWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIpOwogCkBAIC0yMTIsMTAg
KzIxNCwxMCBAQCBjbGFzcyBIVE1MTWFwRWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTEVsCiB7CiBw
dWJsaWM6CiAgICAgSFRNTE1hcEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpOwotCiAgICAg
fkhUTUxNYXBFbGVtZW50SW1wbCgpOwogCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OworICAg
IHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJu
IFRhZ1N0YXR1c1JlcXVpcmVkOyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25z
dCB7IHJldHVybiAxOyB9CiAKICAgICB2aXJ0dWFsIERPTVN0cmluZyBnZXROYW1lKCkgY29uc3Qg
eyByZXR1cm4gbV9uYW1lOyB9CiAKSW5kZXg6IGtodG1sL2h0bWwvaHRtbF9pbmxpbmVpbXBsLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9odG1sL2h0bWxf
aW5saW5laW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNDIKZGlmZiAtdSAtcCAtcjEu
NDIga2h0bWwvaHRtbC9odG1sX2lubGluZWltcGwuY3BwCi0tLSBraHRtbC9odG1sL2h0bWxfaW5s
aW5laW1wbC5jcHAJMTEgTWF5IDIwMDUgMDU6NDk6MzQgLTAwMDAJMS40MgorKysga2h0bWwvaHRt
bC9odG1sX2lubGluZWltcGwuY3BwCTIzIEp1biAyMDA1IDIxOjUyOjM5IC0wMDAwCkBAIC00NSw3
ICs0NSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBraHRtbDsKIG5hbWVzcGFjZSBET00gewogCiBIVE1M
QW5jaG9yRWxlbWVudEltcGw6OkhUTUxBbmNob3JFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9j
KQotICAgIDogSFRNTEVsZW1lbnRJbXBsKGRvYykKKyAgICA6IEhUTUxFbGVtZW50SW1wbChIVE1M
TmFtZXM6OmEoKSwgZG9jKQogewogICAgIG1faGFzVGFyZ2V0ID0gZmFsc2U7CiB9CkBAIC0xMDQs
MTEgKzEwNCw2IEBAIGJvb2wgSFRNTEFuY2hvckVsZW1lbnRJbXBsOjppc0tleWJvYXJkRm8KICAg
ICByZXR1cm4gZ2V0RG9jdW1lbnQoKS0+cGFydCgpLT50YWJzVG9MaW5rcygpOwogfQogCi1Ob2Rl
SW1wbDo6SWQgSFRNTEFuY2hvckVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IElEX0E7Ci19Ci0KIHZvaWQgSFRNTEFuY2hvckVsZW1lbnRJbXBsOjpkZWZhdWx0RXZlbnRIYW5k
bGVyKEV2ZW50SW1wbCAqZXZ0KQogewogICAgIC8vIFJlYWN0IG9uIGNsaWNrcyBhbmQgb24ga2V5
cHJlc3Nlcy4KQEAgLTE1Miw3ICsxNDcsNyBAQCB2b2lkIEhUTUxBbmNob3JFbGVtZW50SW1wbDo6
ZGVmYXVsdEV2ZW50CiAgICAgICAgIGlmICggZSAmJiBlLT5idXR0b24oKSA9PSAxICkKICAgICAg
ICAgICAgIHV0YXJnZXQgPSAiX2JsYW5rIjsKIAotICAgICAgICBpZiAoIGV2dC0+dGFyZ2V0KCkt
PmlkKCkgPT0gSURfSU1HICkgeworICAgICAgICBpZiAoZXZ0LT50YXJnZXQoKS0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OmltZygpKSkgewogICAgICAgICAgICAgSFRNTEltYWdlRWxlbWVudEltcGwq
IGltZyA9IHN0YXRpY19jYXN0PEhUTUxJbWFnZUVsZW1lbnRJbXBsKj4oIGV2dC0+dGFyZ2V0KCkg
KTsKICAgICAgICAgICAgIGlmICggaW1nICYmIGltZy0+aXNTZXJ2ZXJNYXAoKSApCiAgICAgICAg
ICAgICB7CkBAIC0zODIsNyArMzc3LDcgQEAgdm9pZCBIVE1MQW5jaG9yRWxlbWVudEltcGw6OmZv
Y3VzKCkKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1IVE1MQlJFbGVtZW50SW1wbDo6SFRNTEJS
RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykgOiBIVE1MRWxlbWVudEltcGwoZG9jKQorSFRN
TEJSRWxlbWVudEltcGw6OkhUTUxCUkVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpIDogSFRN
TEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6YnIoKSwgZG9jKQogewogfQogCkBAIC0zOTAsMTEgKzM4
NSw2IEBAIEhUTUxCUkVsZW1lbnRJbXBsOjp+SFRNTEJSRWxlbWVudEltcGwoKQogewogfQogCi1O
b2RlSW1wbDo6SWQgSFRNTEJSRWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
SURfQlI7Ci19Ci0KIGJvb2wgSFRNTEJSRWxlbWVudEltcGw6Om1hcFRvRW50cnkoTm9kZUltcGw6
OklkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0CiB7CiAgICAgaWYg
KGF0dHIgPT0gQVRUUl9DTEVBUikgewpAQCAtNDQ1LDcgKzQzNSw3IEBAIHZvaWQgSFRNTEJSRWxl
bWVudEltcGw6OnNldENsZWFyKGNvbnN0IEQKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogSFRNTEZv
bnRFbGVtZW50SW1wbDo6SFRNTEZvbnRFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAg
IDogSFRNTEVsZW1lbnRJbXBsKGRvYykKKyAgICA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6
OmZvbnQoKSwgZG9jKQogewogfQogCkBAIC00NTMsMTEgKzQ0Myw2IEBAIEhUTUxGb250RWxlbWVu
dEltcGw6On5IVE1MRm9udEVsZW1lbnRJbXAKIHsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxGb250
RWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfRk9OVDsKLX0KLQogLy8g
QWxsb3dzIGxlYWRpbmcgc3BhY2VzLgogLy8gQWxsb3dzIHRyYWlsaW5nIG5vbm51bWVyaWMgY2hh
cmFjdGVycy4KIC8vIFJldHVybnMgMTAgZm9yIGFueSBzaXplIGdyZWF0ZXIgdGhhbiA5LgpAQCAt
NTkwLDggKzU3NSw4IEBAIHZvaWQgSFRNTEZvbnRFbGVtZW50SW1wbDo6c2V0U2l6ZShjb25zdCAK
IAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1IVE1MTW9kRWxlbWVudEltcGw6OkhUTUxNb2RFbGVt
ZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCB1c2hvcnQgZWxlbWVudElkKQotICAgIDogSFRNTEdl
bmVyaWNFbGVtZW50SW1wbChkb2MsIGVsZW1lbnRJZCkKK0hUTUxNb2RFbGVtZW50SW1wbDo6SFRN
TE1vZEVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50UHRy
ICpkb2MpCisgICAgOiBIVE1MRWxlbWVudEltcGwodGFnTmFtZSwgZG9jKQogewogfQogCkBAIC02
MTgsMTUgKzYwMywxMCBAQCB2b2lkIEhUTUxNb2RFbGVtZW50SW1wbDo6c2V0RGF0ZVRpbWUoY29u
CiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxRdW90ZUVsZW1lbnRJbXBsOjpIVE1MUXVvdGVF
bGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAgIDogSFRNTEVsZW1lbnRJbXBsKGRvYykK
KyAgICA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6OnEoKSwgZG9jKQogewogfQogCi1Ob2Rl
SW1wbDo6SWQgSFRNTFF1b3RlRWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
SURfUTsKLX0KLSAgICAKIERPTVN0cmluZyBIVE1MUXVvdGVFbGVtZW50SW1wbDo6Y2l0ZSgpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIGdldEF0dHJpYnV0ZShBVFRSX0NJVEUpOwpJbmRleDoga2h0bWwv
aHRtbC9odG1sX2lubGluZWltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2Vi
Q29yZS9raHRtbC9odG1sL2h0bWxfaW5saW5laW1wbC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjE5CmRpZmYgLXUgLXAgLXIxLjE5IGtodG1sL2h0bWwvaHRtbF9pbmxpbmVpbXBsLmgKLS0tIGto
dG1sL2h0bWwvaHRtbF9pbmxpbmVpbXBsLmgJMTEgTWF5IDIwMDUgMDU6NDk6MzQgLTAwMDAJMS4x
OQorKysga2h0bWwvaHRtbC9odG1sX2lubGluZWltcGwuaAkyMyBKdW4gMjAwNSAyMTo1Mjo0MCAt
MDAwMApAQCAtMzYsMTAgKzM2LDEyIEBAIHB1YmxpYzoKICAgICBIVE1MQW5jaG9yRWxlbWVudElt
cGwoRG9jdW1lbnRQdHIgKmRvYyk7CiAgICAgfkhUTUxBbmNob3JFbGVtZW50SW1wbCgpOwogCisg
ICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1
cm4gVGFnU3RhdHVzUmVxdWlyZWQ7IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNv
bnN0IHsgcmV0dXJuIDE7IH0KKwogICAgIHZpcnR1YWwgYm9vbCBpc01vdXNlRm9jdXNhYmxlKCkg
Y29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlzS2V5Ym9hcmRGb2N1c2FibGUoKSBjb25zdDsKICAg
ICB2aXJ0dWFsIGJvb2wgaXNGb2N1c2FibGUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIElkIGlkKCkg
Y29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJp
YnV0ZUltcGwgKmF0dHIpOwogICAgIHZpcnR1YWwgdm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2
ZW50SW1wbCAqZXZ0KTsKICAgICB2aXJ0dWFsIHZvaWQgYWNjZXNzS2V5QWN0aW9uKGJvb2wgZnVs
bEFjdGlvbik7CkBAIC05Nyw5ICs5OSwxMCBAQCBjbGFzcyBIVE1MQlJFbGVtZW50SW1wbCA6IHB1
YmxpYyBIVE1MRWxlCiBwdWJsaWM6CiAgICAgSFRNTEJSRWxlbWVudEltcGwoRG9jdW1lbnRQdHIg
KmRvYyk7CiAgICAgfkhUTUxCUkVsZW1lbnRJbXBsKCk7Ci0KLSAgICB2aXJ0dWFsIElkIGlkKCkg
Y29uc3Q7CiAgICAgCisgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50
KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzRm9yYmlkZGVuOyB9CisgICAgdmlydHVhbCBpbnQg
dGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAwOyB9CisKICAgICB2aXJ0dWFsIGJvb2wgbWFw
VG9FbnRyeShJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdDsKICAg
ICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAq
YXR0cik7CiAgICAgCkBAIC0xMTYsOSArMTE5LDEwIEBAIGNsYXNzIEhUTUxGb250RWxlbWVudElt
cGwgOiBwdWJsaWMgSFRNTEUKIHB1YmxpYzoKICAgICBIVE1MRm9udEVsZW1lbnRJbXBsKERvY3Vt
ZW50UHRyICpkb2MpOwogICAgIH5IVE1MRm9udEVsZW1lbnRJbXBsKCk7Ci0KLSAgICB2aXJ0dWFs
IElkIGlkKCkgY29uc3Q7CiAgICAgCisgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1Jl
cXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzUmVxdWlyZWQ7IH0KKyAgICB2aXJ0
dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDE7IH0KKwogICAgIHZpcnR1YWwg
Ym9vbCBtYXBUb0VudHJ5KElkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNv
bnN0OwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1
dGVJbXBsICphdHRyKTsKIApAQCAtMTM0LDEwICsxMzgsMTMgQEAgcHVibGljOgogCiAvLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCiAKLWNsYXNzIEhUTUxNb2RFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MR2Vu
ZXJpY0VsZW1lbnRJbXBsCitjbGFzcyBIVE1MTW9kRWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTEVs
ZW1lbnRJbXBsCiB7CiBwdWJsaWM6Ci0gICAgSFRNTE1vZEVsZW1lbnRJbXBsKERvY3VtZW50UHRy
ICpkb2MsIHVzaG9ydCBlbGVtZW50SWQpOworICAgIEhUTUxNb2RFbGVtZW50SW1wbChjb25zdCBR
dWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudFB0ciAqZG9jKTsKKworICAgIHZpcnR1YWwg
SFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1
c1JlcXVpcmVkOyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVy
biAxOyB9CiAKICAgICBET01TdHJpbmcgY2l0ZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0Q2l0ZShj
b25zdCBET01TdHJpbmcgJik7CkBAIC0xNTIsOSArMTU5LDEwIEBAIGNsYXNzIEhUTUxRdW90ZUVs
ZW1lbnRJbXBsIDogcHVibGljIEhUTUwKIHsKIHB1YmxpYzoKICAgICBIVE1MUXVvdGVFbGVtZW50
SW1wbChEb2N1bWVudFB0ciAqZG9jKTsKLQotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKICAg
ICAKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7
IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQorICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5
KCkgY29uc3QgeyByZXR1cm4gMTsgfQorCiAgICAgRE9NU3RyaW5nIGNpdGUoKSBjb25zdDsKICAg
ICB2b2lkIHNldENpdGUoY29uc3QgRE9NU3RyaW5nICYpOwogfTsKSW5kZXg6IGtodG1sL2h0bWwv
aHRtbF9saXN0aW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUv
a2h0bWwvaHRtbC9odG1sX2xpc3RpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS45CmRp
ZmYgLXUgLXAgLXIxLjkga2h0bWwvaHRtbC9odG1sX2xpc3RpbXBsLmNwcAotLS0ga2h0bWwvaHRt
bC9odG1sX2xpc3RpbXBsLmNwcAkxMSBNYXkgMjAwNSAwNTo0OTozNCAtMDAwMAkxLjkKKysrIGto
dG1sL2h0bWwvaHRtbF9saXN0aW1wbC5jcHAJMjMgSnVuIDIwMDUgMjE6NTI6NDAgLTAwMDAKQEAg
LTMyLDExICszMiw2IEBAIHVzaW5nIG5hbWVzcGFjZSBraHRtbDsKIAogbmFtZXNwYWNlIERPTSB7
CiAKLU5vZGVJbXBsOjpJZCBIVE1MVUxpc3RFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAg
IHJldHVybiBJRF9VTDsKLX0KLQogYm9vbCBIVE1MVUxpc3RFbGVtZW50SW1wbDo6bWFwVG9FbnRy
eShOb2RlSW1wbDo6SWQgYXR0ciwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3QK
IHsKICAgICBzd2l0Y2ggKGF0dHIpIHsKQEAgLTg0LDExICs3OSw2IEBAIHZvaWQgSFRNTFVMaXN0
RWxlbWVudEltcGw6OnNldFR5cGUoY29uc3QKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Ob2Rl
SW1wbDo6SWQgSFRNTERpcmVjdG9yeUVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIElEX0RJUjsKLX0KLQogYm9vbCBIVE1MRGlyZWN0b3J5RWxlbWVudEltcGw6OmNvbXBhY3Qo
KSBjb25zdAogewogICAgIHJldHVybiAhZ2V0QXR0cmlidXRlKEFUVFJfQ09NUEFDVCkuaXNOdWxs
KCk7CkBAIC0xMDEsMTEgKzkxLDYgQEAgdm9pZCBIVE1MRGlyZWN0b3J5RWxlbWVudEltcGw6OnNl
dENvbXBhYwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLU5vZGVJbXBsOjpJZCBIVE1MTWVudUVs
ZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX01FTlU7Ci19Ci0KIGJvb2wg
SFRNTE1lbnVFbGVtZW50SW1wbDo6Y29tcGFjdCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuICFnZXRB
dHRyaWJ1dGUoQVRUUl9DT01QQUNUKS5pc051bGwoKTsKQEAgLTExOCwxMSArMTAzLDYgQEAgdm9p
ZCBIVE1MTWVudUVsZW1lbnRJbXBsOjpzZXRDb21wYWN0KGJvbwogCiAvLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCiAKLU5vZGVJbXBsOjpJZCBIVE1MT0xpc3RFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewot
ICAgIHJldHVybiBJRF9PTDsKLX0KLQogYm9vbCBIVE1MT0xpc3RFbGVtZW50SW1wbDo6bWFwVG9F
bnRyeShOb2RlSW1wbDo6SWQgYXR0ciwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29u
c3QKIHsKICAgICBzd2l0Y2ggKGF0dHIpIHsKQEAgLTE1NSw3ICsxMzUsNyBAQCB2b2lkIEhUTUxP
TGlzdEVsZW1lbnRJbXBsOjpwYXJzZU1hcHBlZEF0CiAgICAgY2FzZSBBVFRSX1NUQVJUOgogICAg
ICAgICAgICAgX3N0YXJ0ID0gIWF0dHItPmlzTnVsbCgpID8gYXR0ci0+dmFsdWUoKS50b0ludCgp
IDogMTsKICAgICBkZWZhdWx0OgotICAgICAgICBIVE1MVUxpc3RFbGVtZW50SW1wbDo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgIEhUTUxFbGVtZW50SW1wbDo6cGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoYXR0cik7CiAgICAgfQogfQogCkBAIC0xODYsMTEgKzE2Niw2IEBAIHZvaWQg
SFRNTE9MaXN0RWxlbWVudEltcGw6OnNldFR5cGUoY29uc3QKIAogLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQogCi1Ob2RlSW1wbDo6SWQgSFRNTExJRWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gSURfTEk7Ci19Ci0KIGJvb2wgSFRNTExJRWxlbWVudEltcGw6Om1hcFRvRW50cnkoTm9k
ZUltcGw6OklkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0CiB7CiAg
ICAgc3dpdGNoIChhdHRyKSB7CkBAIC0yNTIsMTEgKzIyNyw4IEBAIHZvaWQgSFRNTExJRWxlbWVu
dEltcGw6OmF0dGFjaCgpCiAgICAgICAgIE5vZGVJbXBsICpsaXN0Tm9kZSA9IDA7CiAgICAgICAg
IE5vZGVJbXBsICpuID0gdGhpczsKICAgICAgICAgd2hpbGUgKCFsaXN0Tm9kZSAmJiAobiA9IG4t
PnBhcmVudE5vZGUoKSkpIHsKLSAgICAgICAgICAgIHN3aXRjaCAobi0+aWQoKSkgewotICAgICAg
ICAgICAgICAgIGNhc2UgSURfVUw6Ci0gICAgICAgICAgICAgICAgY2FzZSBJRF9PTDoKLSAgICAg
ICAgICAgICAgICAgICAgbGlzdE5vZGUgPSBuOwotICAgICAgICAgICAgfQorICAgICAgICAgICAg
aWYgKG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp1bCgpKSB8fCBuLT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6b2woKSkpCisgICAgICAgICAgICAgICAgbGlzdE5vZGUgPSBuOwogICAgICAgICB9CiAg
ICAgICAgIAogICAgICAgICAvLyBJZiB3ZSBhcmUgbm90IGluIGEgbGlzdCwgdGVsbCB0aGUgcmVu
ZGVyZXIgc28gaXQgY2FuIHBvc2l0aW9uIHVzIGluc2lkZS4KQEAgLTI2NSw3ICsyMzcsNyBAQCB2
b2lkIEhUTUxMSUVsZW1lbnRJbXBsOjphdHRhY2goKQogICAgICAgICAgICAgcmVuZGVyLT5zZXRO
b3RJbkxpc3QodHJ1ZSk7CiAKIAkvLyBJZiB3ZSBhcmUgZmlyc3QsIGFuZCB0aGUgT0wgaGFzIGEg
c3RhcnQgYXR0ciwgc2V0IHRoZSB2YWx1ZS4KLQlpZiAobGlzdE5vZGUgJiYgbGlzdE5vZGUtPmlk
KCkgPT0gSURfT0wgJiYgIW1fcmVuZGVyLT5wcmV2aW91c1NpYmxpbmcoKSkgeworCWlmIChsaXN0
Tm9kZSAmJiBsaXN0Tm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9sKCkpICYmICFtX3JlbmRl
ci0+cHJldmlvdXNTaWJsaW5nKCkpIHsKIAkgICAgSFRNTE9MaXN0RWxlbWVudEltcGwgKm9sID0g
c3RhdGljX2Nhc3Q8SFRNTE9MaXN0RWxlbWVudEltcGwgKj4obGlzdE5vZGUpOwogICAgICAgICAg
ICAgcmVuZGVyLT5zZXRWYWx1ZShvbC0+c3RhcnQoKSk7CiAJfQpAQCAtMjk1LDEyICsyNjcsOCBA
QCB2b2lkIEhUTUxMSUVsZW1lbnRJbXBsOjpzZXRWYWx1ZShsb25nIHZhCiB7CiAgICAgc2V0QXR0
cmlidXRlKEFUVFJfVkFMVUUsIFFTdHJpbmc6Om51bWJlcih2YWx1ZSkpOwogfQotLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQogCi1Ob2RlSW1wbDo6SWQgSFRNTERMaXN0RWxlbWVudEltcGw6OmlkKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gSURfREw7Ci19CisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIGJvb2wg
SFRNTERMaXN0RWxlbWVudEltcGw6OmNvbXBhY3QoKSBjb25zdAogewpJbmRleDoga2h0bWwvaHRt
bC9odG1sX2xpc3RpbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUv
a2h0bWwvaHRtbC9odG1sX2xpc3RpbXBsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNwpkaWZm
IC11IC1wIC1yMS43IGtodG1sL2h0bWwvaHRtbF9saXN0aW1wbC5oCi0tLSBraHRtbC9odG1sL2h0
bWxfbGlzdGltcGwuaAkxMSBNYXkgMjAwNSAwNTo0OTozNCAtMDAwMAkxLjcKKysrIGtodG1sL2h0
bWwvaHRtbF9saXN0aW1wbC5oCTIzIEp1biAyMDA1IDIxOjUyOjQwIC0wMDAwCkBAIC0zNSwxMCAr
MzUsMTEgQEAgbmFtZXNwYWNlIERPTQogY2xhc3MgSFRNTFVMaXN0RWxlbWVudEltcGwgOiBwdWJs
aWMgSFRNTEVsZW1lbnRJbXBsCiB7CiBwdWJsaWM6Ci0gICAgSFRNTFVMaXN0RWxlbWVudEltcGwo
RG9jdW1lbnRQdHIgKmRvYykgOiBIVE1MRWxlbWVudEltcGwoZG9jKSB7fQorICAgIEhUTUxVTGlz
dEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpIDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1l
czo6dWwoKSwgZG9jKSB7fQogICAgIHZpcnR1YWwgfkhUTUxVTGlzdEVsZW1lbnRJbXBsKCkge30K
IAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMg
ZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQor
ICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gNTsgfQogCiAgICAg
dmlydHVhbCBib29sIG1hcFRvRW50cnkoSWQgYXR0ciwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJl
c3VsdCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBl
ZEF0dHJpYnV0ZUltcGwgKik7CkBAIC01Nyw5ICs1OCwxMCBAQCBwdWJsaWM6CiBjbGFzcyBIVE1M
RGlyZWN0b3J5RWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTEVsZW1lbnRJbXBsCiB7CiBwdWJsaWM6
Ci0gICAgSFRNTERpcmVjdG9yeUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpIDogSFRNTEVs
ZW1lbnRJbXBsKGRvYykge30KKyAgICBIVE1MRGlyZWN0b3J5RWxlbWVudEltcGwoRG9jdW1lbnRQ
dHIgKmRvYykgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjpkaXIoKSwgZG9jKSB7fQogCi0g
ICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OworICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRU
YWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9CisgICAg
dmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiA1OyB9CiAKICAgICBib29s
IGNvbXBhY3QoKSBjb25zdDsKICAgICB2b2lkIHNldENvbXBhY3QoYm9vbCk7CkBAIC03MCw5ICs3
MiwxMCBAQCBwdWJsaWM6CiBjbGFzcyBIVE1MTWVudUVsZW1lbnRJbXBsIDogcHVibGljIEhUTUxF
bGVtZW50SW1wbAogewogcHVibGljOgotICAgIEhUTUxNZW51RWxlbWVudEltcGwoRG9jdW1lbnRQ
dHIgKmRvYykgOiBIVE1MRWxlbWVudEltcGwoZG9jKSB7fQorICAgIEhUTUxNZW51RWxlbWVudElt
cGwoRG9jdW1lbnRQdHIgKmRvYykgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjptZW51KCks
IGRvYykge30KIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEhUTUxU
YWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1
aXJlZDsgfQorICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gNTsg
fQogCiAgICAgYm9vbCBjb21wYWN0KCkgY29uc3Q7CiAgICAgdm9pZCBzZXRDb21wYWN0KGJvb2wp
OwpAQCAtODAsMTQgKzgzLDE1IEBAIHB1YmxpYzoKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1j
bGFzcyBIVE1MT0xpc3RFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MVUxpc3RFbGVtZW50SW1wbAor
Y2xhc3MgSFRNTE9MaXN0RWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTEVsZW1lbnRJbXBsCiB7CiBw
dWJsaWM6CiAgICAgSFRNTE9MaXN0RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgICAg
ICAgOiBIVE1MVUxpc3RFbGVtZW50SW1wbChkb2MpIHsgX3N0YXJ0ID0gMTsgfQotCi0gICAgdmly
dHVhbCBJZCBpZCgpIGNvbnN0OworICAgICAgICA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6
Om9sKCksIGRvYykgeyBfc3RhcnQgPSAxOyB9CiAgICAgCisgICAgdmlydHVhbCBIVE1MVGFnU3Rh
dHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzUmVxdWlyZWQ7
IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDU7IH0KKwog
ICAgIHZpcnR1YWwgYm9vbCBtYXBUb0VudHJ5KElkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5
JiByZXN1bHQpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShN
YXBwZWRBdHRyaWJ1dGVJbXBsICopOwogCkBAIC0xMTAsMTAgKzExNCwxMSBAQCBjbGFzcyBIVE1M
TElFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MRWxlCiB7CiBwdWJsaWM6CiAgICAgSFRNTExJRWxl
bWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgICAgICAgOiBIVE1MRWxlbWVudEltcGwoZG9j
KSB7IGlzVmFsdWVkID0gZmFsc2U7IH0KKyAgICAgICAgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5h
bWVzOjpsaSgpLCBkb2MpIHsgaXNWYWx1ZWQgPSBmYWxzZTsgfQogICAgIHZpcnR1YWwgfkhUTUxM
SUVsZW1lbnRJbXBsKCkge30KIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdT
dGF0dXNPcHRpb25hbDsgfQorICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyBy
ZXR1cm4gMzsgfQogCiAgICAgdmlydHVhbCBib29sIG1hcFRvRW50cnkoTm9kZUltcGw6OklkIGF0
dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9p
ZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICphdHRyKTsKQEAgLTEz
NiwxMCArMTQxLDExIEBAIHByaXZhdGU6CiBjbGFzcyBIVE1MRExpc3RFbGVtZW50SW1wbCA6IHB1
YmxpYyBIVE1MRWxlbWVudEltcGwKIHsKIHB1YmxpYzoKLSAgICBIVE1MRExpc3RFbGVtZW50SW1w
bChEb2N1bWVudFB0ciAqZG9jKSA6IEhUTUxFbGVtZW50SW1wbChkb2MpIHt9CisgICAgSFRNTERM
aXN0RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5h
bWVzOjpkbCgpLCBkb2MpIHt9CiAgICAgdmlydHVhbCB+SFRNTERMaXN0RWxlbWVudEltcGwoKSB7
fQogCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OworICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1
cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9
CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiA1OyB9CiAKICAg
ICBib29sIGNvbXBhY3QoKSBjb25zdDsKICAgICB2b2lkIHNldENvbXBhY3QoYm9vbCk7CkluZGV4
OiBraHRtbC9odG1sL2h0bWxfbWlzY2ltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbF9taXNjaW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuMjYKZGlmZiAtdSAtcCAtcjEuMjYga2h0bWwvaHRtbC9odG1sX21pc2NpbXBsLmNw
cAotLS0ga2h0bWwvaHRtbC9odG1sX21pc2NpbXBsLmNwcAkxMSBKdW4gMjAwNSAwOTo1MTowMSAt
MDAwMAkxLjI2CisrKyBraHRtbC9odG1sL2h0bWxfbWlzY2ltcGwuY3BwCTIzIEp1biAyMDA1IDIx
OjUyOjQwIC0wMDAwCkBAIC0zNSwxNSArMzUsMTAgQEAKIG5hbWVzcGFjZSBET00gewogCiBIVE1M
QmFzZUZvbnRFbGVtZW50SW1wbDo6SFRNTEJhc2VGb250RWxlbWVudEltcGwoRG9jdW1lbnRQdHIg
KmRvYykKLSAgICA6IEhUTUxFbGVtZW50SW1wbChkb2MpCisgICAgOiBIVE1MRWxlbWVudEltcGwo
SFRNTE5hbWVzOjpiYXNlZm9udCgpLCBkb2MpCiB7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MQmFz
ZUZvbnRFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9CQVNFRk9OVDsK
LX0KLQogRE9NU3RyaW5nIEhUTUxCYXNlRm9udEVsZW1lbnRJbXBsOjpjb2xvcigpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIGdldEF0dHJpYnV0ZShBVFRSX0NPTE9SKTsKQEAgLTE0MSw3MiArMTM2LDcy
IEBAIE5vZGVJbXBsICpIVE1MQ29sbGVjdGlvbkltcGw6OnRyYXZlcnNlTmUKICAgICAgICAgICAg
IEhUTUxFbGVtZW50SW1wbCAqZSA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCAqPihjdXJy
ZW50KTsKICAgICAgICAgICAgIHN3aXRjaCh0eXBlKSB7CiAgICAgICAgICAgICBjYXNlIERPQ19J
TUFHRVM6Ci0gICAgICAgICAgICAgICAgaWYoZS0+aWQoKSA9PSBJRF9JTUcpCisgICAgICAgICAg
ICAgICAgaWYgKGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmltZygpKSkKICAgICAgICAgICAg
ICAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgY2FzZSBET0NfRk9STVM6Ci0gICAgICAgICAgICAgICAgaWYoZS0+aWQoKSA9PSBJRF9GT1JN
KQorICAgICAgICAgICAgICAgIGlmKGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmZvcm0oKSkp
CiAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIGNhc2UgRE9DX05BTUVBQkxFX0lURU1TOgotICAgICAgICAgICAgICAg
IGlmKGUtPmlkKCkgPT0gSURfSU1HKQorICAgICAgICAgICAgICAgIGlmIChlLT5oYXNMb2NhbE5h
bWUoSFRNTE5hbWVzOjppbWcoKSkpCiAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsK
LSAgICAgICAgICAgICAgICBpZihlLT5pZCgpID09IElEX0ZPUk0pCisgICAgICAgICAgICAgICAg
aWYgKGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmZvcm0oKSkpCiAgICAgICAgICAgICAgICAg
ICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBpZihlLT5pZCgpID09IElEX0FQUExF
VCkKKyAgICAgICAgICAgICAgICBpZiAoZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6YXBwbGV0
KCkpKQogICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAg
aWYoZS0+aWQoKSA9PSBJRF9FTUJFRCkKKyAgICAgICAgICAgICAgICBpZiAoZS0+aGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6ZW1iZWQoKSkpCiAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1
ZTsKLSAgICAgICAgICAgICAgICBpZihlLT5pZCgpID09IElEX09CSkVDVCkKKyAgICAgICAgICAg
ICAgICBpZiAoZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b2JqZWN0KCkpKQogICAgICAgICAg
ICAgICAgICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICBjYXNlIFRBQkxFX1RCT0RJRVM6Ci0gICAgICAgICAgICAgICAgaWYoZS0+aWQoKSA9PSBJ
RF9UQk9EWSkKKyAgICAgICAgICAgICAgICBpZiAoZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6
dGJvZHkoKSkpCiAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAg
ICAgICBlbHNlIGlmKGUtPmlkKCkgPT0gSURfVEFCTEUpCisgICAgICAgICAgICAgICAgZWxzZSBp
ZiAoZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dGFibGUoKSkpCiAgICAgICAgICAgICAgICAg
ICAgIGRlZXAgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNh
c2UgVFJfQ0VMTFM6Ci0gICAgICAgICAgICAgICAgaWYoZS0+aWQoKSA9PSBJRF9URCB8fCBlLT5p
ZCgpID09IElEX1RIKQorICAgICAgICAgICAgICAgIGlmIChlLT5oYXNMb2NhbE5hbWUoSFRNTE5h
bWVzOjp0ZCgpKSB8fCBlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0aCgpKSkKICAgICAgICAg
ICAgICAgICAgICAgZm91bmQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGVsc2UgaWYoZS0+aWQo
KSA9PSBJRF9UQUJMRSkKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChlLT5oYXNMb2NhbE5hbWUo
SFRNTE5hbWVzOjp0YWJsZSgpKSkKICAgICAgICAgICAgICAgICAgICAgZGVlcCA9IGZhbHNlOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBUQUJMRV9ST1dTOgogICAg
ICAgICAgICAgY2FzZSBUU0VDVElPTl9ST1dTOgotICAgICAgICAgICAgICAgIGlmKGUtPmlkKCkg
PT0gSURfVFIpCisgICAgICAgICAgICAgICAgaWYgKGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6
OnRyKCkpKQogICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgZWxzZSBpZihlLT5pZCgpID09IElEX1RBQkxFKQorICAgICAgICAgICAgICAgIGVsc2UgaWYg
KGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnRhYmxlKCkpKQogICAgICAgICAgICAgICAgICAg
ICBkZWVwID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNl
IFNFTEVDVF9PUFRJT05TOgotICAgICAgICAgICAgICAgIGlmKGUtPmlkKCkgPT0gSURfT1BUSU9O
KQorICAgICAgICAgICAgICAgIGlmIChlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvcHRpb24o
KSkpCiAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIGNhc2UgTUFQX0FSRUFTOgotICAgICAgICAgICAgICAgIGlmKGUt
PmlkKCkgPT0gSURfQVJFQSkKKyAgICAgICAgICAgICAgICBpZiAoZS0+aGFzTG9jYWxOYW1lKEhU
TUxOYW1lczo6YXJlYSgpKSkKICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBET0NfQVBQTEVUUzogICAvLyBh
bGwgT0JKRUNUIGFuZCBBUFBMRVQgZWxlbWVudHMKLSAgICAgICAgICAgICAgICBpZihlLT5pZCgp
ID09IElEX09CSkVDVCB8fCBlLT5pZCgpID09IElEX0FQUExFVCkKKyAgICAgICAgICAgICAgICBp
ZiAoZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b2JqZWN0KCkpIHx8IGUtPmhhc0xvY2FsTmFt
ZShIVE1MTmFtZXM6OmFwcGxldCgpKSkKICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVl
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBET0NfRU1CRURTOiAg
IC8vIGFsbCBFTUJFRCBlbGVtZW50cwotICAgICAgICAgICAgICAgIGlmKGUtPmlkKCkgPT0gSURf
RU1CRUQpCisgICAgICAgICAgICAgICAgaWYgKGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmVt
YmVkKCkpKQogICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIERPQ19PQkpFQ1RTOiAgIC8vIGFsbCBPQkpFQ1Qg
ZWxlbWVudHMKLSAgICAgICAgICAgICAgICBpZihlLT5pZCgpID09IElEX09CSkVDVCkKKyAgICAg
ICAgICAgICAgICBpZiAoZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b2JqZWN0KCkpKQogICAg
ICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICBjYXNlIERPQ19MSU5LUzogICAgIC8vIGFsbCBBIF9hbmRfIEFSRUEgZWxlbWVu
dHMgd2l0aCBhIHZhbHVlIGZvciBocmVmCi0gICAgICAgICAgICAgICAgaWYoZS0+aWQoKSA9PSBJ
RF9BIHx8IGUtPmlkKCkgPT0gSURfQVJFQSkKLSAgICAgICAgICAgICAgICAgICAgaWYoIWUtPmdl
dEF0dHJpYnV0ZShBVFRSX0hSRUYpLmlzTnVsbCgpKQorICAgICAgICAgICAgICAgIGlmIChlLT5o
YXNMb2NhbE5hbWUoSFRNTE5hbWVzOjphKCkpIHx8IGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6
OmFyZWEoKSkpCisgICAgICAgICAgICAgICAgICAgIGlmICghZS0+Z2V0QXR0cmlidXRlKEFUVFJf
SFJFRikuaXNOdWxsKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIERPQ19BTkNIT1JTOiAgICAg
IC8vIGFsbCBBIGVsZW1lbnRzIHdpdGggYSB2YWx1ZSBmb3IgbmFtZSBvciBhbiBpZCBhdHRyaWJ1
dGUKLSAgICAgICAgICAgICAgICBpZihlLT5pZCgpID09IElEX0EpCi0gICAgICAgICAgICAgICAg
ICAgIGlmKCFlLT5nZXRBdHRyaWJ1dGUoQVRUUl9OQU1FKS5pc051bGwoKSkKKyAgICAgICAgICAg
ICAgICBpZiAoZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6YSgpKSkKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKCFlLT5nZXRBdHRyaWJ1dGUoQVRUUl9OQU1FKS5pc051bGwoKSkKICAgICAgICAg
ICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIGNhc2UgRE9DX0FMTDoKQEAgLTIxOSw5ICsyMTQsOSBAQCBOb2RlSW1wbCAqSFRN
TENvbGxlY3Rpb25JbXBsOjp0cmF2ZXJzZU5lCiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAg
ICAgICAgICAgIGtkRGVidWcoIDYwMzAgKSA8PCAiRXJyb3IgaW4gSFRNTENvbGxlY3Rpb24sIHdy
b25nIHRhZ0lkISIgPDwgZW5kbDsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChmb3Vu
ZCkgeworCisgICAgICAgICAgICBpZiAoZm91bmQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGN1
cnJlbnQ7Ci0gICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoZGVlcCkgewogICAgICAgICAg
ICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT50cmF2ZXJzZU5leHROb2RlKG1fYmFzZS5nZXQoKSk7
CiAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC0yOTgsMjkgKzI5MywzMSBAQCBOb2RlSW1w
bCAqSFRNTENvbGxlY3Rpb25JbXBsOjpuZXh0SXRlbSgpCiAKIGJvb2wgSFRNTENvbGxlY3Rpb25J
bXBsOjpjaGVja0Zvck5hbWVNYXRjaChOb2RlSW1wbCAqbm9kZSwgYm9vbCBjaGVja05hbWUsIGNv
bnN0IERPTVN0cmluZyAmbmFtZSwgYm9vbCBjYXNlU2Vuc2l0aXZlKSBjb25zdAogewotICAgIEVs
ZW1lbnRJbXBsICplID0gc3RhdGljX2Nhc3Q8RWxlbWVudEltcGwgKj4obm9kZSk7CisgICAgaWYg
KCFub2RlLT5pc0hUTUxFbGVtZW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAg
ICBIVE1MRWxlbWVudEltcGwgKmUgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwqPihub2Rl
KTsKICAgICBpZiAoY2FzZVNlbnNpdGl2ZSkgewogICAgICAgICBpZiAoY2hlY2tOYW1lKSB7CiAg
ICAgICAgICAgICAvLyBkb2N1bWVudC5hbGwgcmV0dXJucyBvbmx5IGltYWdlcywgZm9ybXMsIGFw
cGxldHMsIG9iamVjdHMgYW5kIGVtYmVkcwogICAgICAgICAgICAgLy8gYnkgbmFtZSAodGhvdWdo
IGV2ZXJ5dGhpbmcgYnkgaWQpCiAgICAgICAgICAgICBpZiAodHlwZSA9PSBET0NfQUxMICYmIAot
ICAgICAgICAgICAgICAgICEoZS0+aWQoKSA9PSBJRF9JTUcgfHwgZS0+aWQoKSA9PSBJRF9GT1JN
IHx8Ci0gICAgICAgICAgICAgICAgICBlLT5pZCgpID09IElEX0FQUExFVCB8fCBlLT5pZCgpID09
IElEX09CSkVDVCB8fAotICAgICAgICAgICAgICAgICAgZS0+aWQoKSA9PSBJRF9FTUJFRCkpCisg
ICAgICAgICAgICAgICAgIShlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjppbWcoKSkgfHwgZS0+
aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6Zm9ybSgpKSB8fAorICAgICAgICAgICAgICAgICAgZS0+
aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6YXBwbGV0KCkpIHx8IGUtPmhhc0xvY2FsTmFtZShIVE1M
TmFtZXM6Om9iamVjdCgpKSB8fAorICAgICAgICAgICAgICAgICAgZS0+aGFzTG9jYWxOYW1lKEhU
TUxOYW1lczo6ZW1iZWQoKSkpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
ICAgICAgICAgcmV0dXJuIGUtPmdldEF0dHJpYnV0ZShBVFRSX05BTUUpID09IG5hbWUgJiYgZS0+
Z2V0QXR0cmlidXRlKEFUVFJfSUQpICE9IG5hbWU7Ci0gICAgICAgIH0gZWxzZSB7CisgICAgICAg
IH0gZWxzZQogICAgICAgICAgICAgcmV0dXJuIGUtPmdldEF0dHJpYnV0ZShBVFRSX0lEKSA9PSBu
YW1lOwotICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKGNoZWNrTmFtZSkgewog
ICAgICAgICAgICAgLy8gZG9jdW1lbnQuYWxsIHJldHVybnMgb25seSBpbWFnZXMsIGZvcm1zLCBh
cHBsZXRzLCBvYmplY3RzIGFuZCBlbWJlZHMKICAgICAgICAgICAgIC8vIGJ5IG5hbWUgKHRob3Vn
aCBldmVyeXRoaW5nIGJ5IGlkKQogICAgICAgICAgICAgaWYgKHR5cGUgPT0gRE9DX0FMTCAmJiAK
LSAgICAgICAgICAgICAgICAhKGUtPmlkKCkgPT0gSURfSU1HIHx8IGUtPmlkKCkgPT0gSURfRk9S
TSB8fAotICAgICAgICAgICAgICAgICAgZS0+aWQoKSA9PSBJRF9BUFBMRVQgfHwgZS0+aWQoKSA9
PSBJRF9PQkpFQ1QgfHwKLSAgICAgICAgICAgICAgICAgIGUtPmlkKCkgPT0gSURfRU1CRUQpKQor
ICAgICAgICAgICAgICAgICEoZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6aW1nKCkpIHx8IGUt
Pmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmZvcm0oKSkgfHwKKyAgICAgICAgICAgICAgICAgIGUt
Pmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmFwcGxldCgpKSB8fCBlLT5oYXNMb2NhbE5hbWUoSFRN
TE5hbWVzOjpvYmplY3QoKSkgfHwKKyAgICAgICAgICAgICAgICAgIGUtPmhhc0xvY2FsTmFtZShI
VE1MTmFtZXM6OmVtYmVkKCkpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICAgICAgICAgIHJldHVybiBlLT5nZXRBdHRyaWJ1dGUoQVRUUl9OQU1FKS5kb21TdHJpbmcoKS5s
b3dlcigpID09IG5hbWUubG93ZXIoKSAmJgpAQCAtMzc5LDcgKzM3Niw5IEBAIHZvaWQgSFRNTENv
bGxlY3Rpb25JbXBsOjp1cGRhdGVOYW1lQ2FjaGUKICAgICAgICAgcmV0dXJuOwogICAgIAogICAg
IGZvciAoTm9kZUltcGwgKm4gPSB0cmF2ZXJzZU5leHRJdGVtKG1fYmFzZS5nZXQoKSk7IG47IG4g
PSB0cmF2ZXJzZU5leHRJdGVtKG4pKSB7Ci0gICAgICAgIEVsZW1lbnRJbXBsICplID0gc3RhdGlj
X2Nhc3Q8RWxlbWVudEltcGwgKj4obik7CisgICAgICAgIGlmICghbi0+aXNIVE1MRWxlbWVudCgp
KQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIEhUTUxFbGVtZW50SW1wbCogZSA9IHN0
YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCo+KG4pOwogICAgICAgICBRU3RyaW5nIGlkQXR0ciA9
IGUtPmdldEF0dHJpYnV0ZShBVFRSX0lEKS5zdHJpbmcoKTsKICAgICAgICAgUVN0cmluZyBuYW1l
QXR0ciA9IGUtPmdldEF0dHJpYnV0ZShBVFRSX05BTUUpLnN0cmluZygpOwogICAgICAgICBpZiAo
IWlkQXR0ci5pc0VtcHR5KCkpIHsKQEAgLTM5Myw5ICszOTIsOSBAQCB2b2lkIEhUTUxDb2xsZWN0
aW9uSW1wbDo6dXBkYXRlTmFtZUNhY2hlCiAgICAgICAgIH0KICAgICAgICAgaWYgKCFuYW1lQXR0
ci5pc0VtcHR5KCkgJiYgaWRBdHRyICE9IG5hbWVBdHRyCiAgICAgICAgICAgICAmJiAodHlwZSAh
PSBET0NfQUxMIHx8IAotICAgICAgICAgICAgICAgIChlLT5pZCgpID09IElEX0lNRyB8fCBlLT5p
ZCgpID09IElEX0ZPUk0gfHwKLSAgICAgICAgICAgICAgICAgZS0+aWQoKSA9PSBJRF9BUFBMRVQg
fHwgZS0+aWQoKSA9PSBJRF9PQkpFQ1QgfHwKLSAgICAgICAgICAgICAgICAgZS0+aWQoKSA9PSBJ
RF9FTUJFRCkpKSB7CisgICAgICAgICAgICAgICAgKGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6
OmltZygpKSB8fCBlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpmb3JtKCkpIHx8CisgICAgICAg
ICAgICAgICAgIGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmFwcGxldCgpKSB8fCBlLT5oYXNM
b2NhbE5hbWUoSFRNTE5hbWVzOjpvYmplY3QoKSkgfHwKKyAgICAgICAgICAgICAgICAgZS0+aGFz
TG9jYWxOYW1lKEhUTUxOYW1lczo6ZW1iZWQoKSkpKSkgewogICAgICAgICAgICAgLy8gYWRkIHRv
IG5hbWUgY2FjaGUKICAgICAgICAgICAgIFFQdHJWZWN0b3I8Tm9kZUltcGw+ICpuYW1lVmVjdG9y
ID0gaW5mby0+bmFtZUNhY2hlLmZpbmQobmFtZUF0dHIpOwogICAgICAgICAgICAgaWYgKCFuYW1l
VmVjdG9yKSB7CkBAIC01MzIsMTIgKzUzMSwxMCBAQCBOb2RlSW1wbCogSFRNTEZvcm1Db2xsZWN0
aW9uSW1wbDo6Z2V0TmFtCiAKIE5vZGVJbXBsKiBIVE1MRm9ybUNvbGxlY3Rpb25JbXBsOjpnZXRO
YW1lZEZvcm1JdGVtKGludCBhdHRyX2lkLCBjb25zdCBET01TdHJpbmcmIG5hbWUsIGludCBkdXBs
aWNhdGVOdW1iZXIsIGJvb2wgY2FzZVNlbnNpdGl2ZSkgY29uc3QKIHsKLSAgICBpZihtX2Jhc2Ut
Pm5vZGVUeXBlKCkgPT0gTm9kZTo6RUxFTUVOVF9OT0RFKQotICAgIHsKKyAgICBpZiAobV9iYXNl
LT5ub2RlVHlwZSgpID09IE5vZGU6OkVMRU1FTlRfTk9ERSkgewogICAgICAgICBIVE1MRWxlbWVu
dEltcGwqIGJhc2VFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsKj4obV9iYXNl
LmdldCgpKTsKICAgICAgICAgYm9vbCBmb3VuZElucHV0RWxlbWVudHMgPSBmYWxzZTsKLSAgICAg
ICAgaWYoYmFzZUVsZW1lbnQtPmlkKCkgPT0gSURfRk9STSkKLSAgICAgICAgeworICAgICAgICBp
ZiAoYmFzZUVsZW1lbnQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmZvcm0oKSkpIHsKICAgICAg
ICAgICAgIEhUTUxGb3JtRWxlbWVudEltcGwqIGYgPSBzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1l
bnRJbXBsKj4oYmFzZUVsZW1lbnQpOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGYtPmZvcm1FbGVtZW50cy5jb3VudCgpOyArK2kpIHsKICAgICAgICAgICAgICAgICBIVE1M
R2VuZXJpY0Zvcm1FbGVtZW50SW1wbCogZSA9IGYtPmZvcm1FbGVtZW50c1tpXTsKQEAgLTU1Nyw4
ICs1NTQsNyBAQCBOb2RlSW1wbCogSFRNTEZvcm1Db2xsZWN0aW9uSW1wbDo6Z2V0TmFtCiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoICFmb3VuZElucHV0RWxlbWVudHMg
KQotICAgICAgICB7CisgICAgICAgIGlmICghZm91bmRJbnB1dEVsZW1lbnRzKSB7CiAgICAgICAg
ICAgICBIVE1MRm9ybUVsZW1lbnRJbXBsKiBmID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50
SW1wbCo+KGJhc2VFbGVtZW50KTsKIAogICAgICAgICAgICAgZm9yKHVuc2lnbmVkIGkgPSAwOyBp
IDwgZi0+aW1nRWxlbWVudHMuY291bnQoKTsgKytpKQpAQCAtNjUwLDcgKzY0Niw3IEBAIHZvaWQg
SFRNTEZvcm1Db2xsZWN0aW9uSW1wbDo6dXBkYXRlTmFtZUMKIAogICAgIFFEaWN0PGNoYXI+IGZv
dW5kSW5wdXRFbGVtZW50czsKIAotICAgIGlmIChtX2Jhc2UtPmlkKCkgIT0gSURfRk9STSkgewor
ICAgIGlmICghbV9iYXNlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Zm9ybSgpKSkgewogICAgICAg
ICBpbmZvLT5oYXNOYW1lQ2FjaGUgPSB0cnVlOwogICAgICAgICByZXR1cm47CiAgICAgfQpJbmRl
eDoga2h0bWwvaHRtbC9odG1sX21pc2NpbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sX21pc2NpbXBsLmgsdgpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuMTYKZGlmZiAtdSAtcCAtcjEuMTYga2h0bWwvaHRtbC9odG1sX21pc2NpbXBsLmgKLS0t
IGtodG1sL2h0bWwvaHRtbF9taXNjaW1wbC5oCTExIE1heSAyMDA1IDAwOjU4OjI4IC0wMDAwCTEu
MTYKKysrIGtodG1sL2h0bWwvaHRtbF9taXNjaW1wbC5oCTIzIEp1biAyMDA1IDIxOjUyOjQxIC0w
MDAwCkBAIC0zOSw3ICszOSw4IEBAIGNsYXNzIEhUTUxCYXNlRm9udEVsZW1lbnRJbXBsIDogcHVi
bGljIEgKIHB1YmxpYzoKICAgICBIVE1MQmFzZUZvbnRFbGVtZW50SW1wbChEb2N1bWVudFB0ciAq
ZG9jKTsKIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEhUTUxUYWdT
dGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNGb3JiaWRk
ZW47IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0K
IAogICAgIERPTVN0cmluZyBjb2xvcigpIGNvbnN0OwogICAgIHZvaWQgc2V0Q29sb3IoY29uc3Qg
RE9NU3RyaW5nICYpOwpJbmRleDoga2h0bWwvaHRtbC9odG1sX29iamVjdGltcGwuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbF9vYmplY3Rp
bXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS42NgpkaWZmIC11IC1wIC1yMS42NiBraHRt
bC9odG1sL2h0bWxfb2JqZWN0aW1wbC5jcHAKLS0tIGtodG1sL2h0bWwvaHRtbF9vYmplY3RpbXBs
LmNwcAkxOSBKdW4gMjAwNSAwMzozOTo1NiAtMDAwMAkxLjY2CisrKyBraHRtbC9odG1sL2h0bWxf
b2JqZWN0aW1wbC5jcHAJMjMgSnVuIDIwMDUgMjE6NTI6NDEgLTAwMDAKQEAgLTU3LDcgKzU3LDcg
QEAgbmFtZXNwYWNlIERPTSB7CiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxBcHBsZXRFbGVt
ZW50SW1wbDo6SFRNTEFwcGxldEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0gIDogSFRN
TEVsZW1lbnRJbXBsKGRvYykKKyAgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjphcHBsZXQo
KSwgZG9jKQogewogICAgIGFwcGxldEluc3RhbmNlID0gMDsKICAgICBtX2FsbFBhcmFtc0F2YWls
YWJsZSA9IGZhbHNlOwpAQCAtNjgsMTEgKzY4LDYgQEAgSFRNTEFwcGxldEVsZW1lbnRJbXBsOjp+
SFRNTEFwcGxldEVsZW1lbgogICAgIGRlbGV0ZSBhcHBsZXRJbnN0YW5jZTsKIH0KIAotTm9kZUlt
cGw6OklkIEhUTUxBcHBsZXRFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJ
RF9BUFBMRVQ7Ci19Ci0KIGJvb2wgSFRNTEFwcGxldEVsZW1lbnRJbXBsOjptYXBUb0VudHJ5KE5v
ZGVJbXBsOjpJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdAogewog
ICAgIHN3aXRjaCAoYXR0cikgewpAQCAtMzUyLDE4ICszNDcsMTMgQEAgdm9pZCBIVE1MQXBwbGV0
RWxlbWVudEltcGw6OnNldFdpZHRoKGNvbgogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MRW1i
ZWRFbGVtZW50SW1wbDo6SFRNTEVtYmVkRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAg
ICA6IEhUTUxFbGVtZW50SW1wbChkb2MpLCBlbWJlZEluc3RhbmNlKDApCisgICAgOiBIVE1MRWxl
bWVudEltcGwoSFRNTE5hbWVzOjplbWJlZCgpLCBkb2MpLCBlbWJlZEluc3RhbmNlKDApCiB7fQog
CiBIVE1MRW1iZWRFbGVtZW50SW1wbDo6fkhUTUxFbWJlZEVsZW1lbnRJbXBsKCkKIHsKIH0KIAot
Tm9kZUltcGw6OklkIEhUTUxFbWJlZEVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIElEX0VNQkVEOwotfQotCiAjaWYgQVBQTEVfQ0hBTkdFUwogS0pTOjpCaW5kaW5nczo6SW5z
dGFuY2UgKkhUTUxFbWJlZEVsZW1lbnRJbXBsOjpnZXRFbWJlZEluc3RhbmNlKCkgY29uc3QKIHsK
QEAgLTQ3OCw3ICs0NjgsNyBAQCBib29sIEhUTUxFbWJlZEVsZW1lbnRJbXBsOjpyZW5kZXJlcklz
TmVlCiAgICAgS0hUTUxQYXJ0ICpwYXJ0ID0gZ2V0RG9jdW1lbnQoKS0+cGFydCgpOwogICAgIGlm
ICghcGFydCkKIAlyZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHBhcnQtPnBsdWdpbnNFbmFibGVk
KCkgJiYgcGFyZW50Tm9kZSgpLT5pZCgpICE9IElEX09CSkVDVDsKKyAgICByZXR1cm4gcGFydC0+
cGx1Z2luc0VuYWJsZWQoKSAmJiAhcGFyZW50Tm9kZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
b2JqZWN0KCkpOwogfQogCiBSZW5kZXJPYmplY3QgKkhUTUxFbWJlZEVsZW1lbnRJbXBsOjpjcmVh
dGVSZW5kZXJlcihSZW5kZXJBcmVuYSAqYXJlbmEsIFJlbmRlclN0eWxlICpzdHlsZSkKQEAgLTUw
Myw5ICs0OTMsOSBAQCBib29sIEhUTUxFbWJlZEVsZW1lbnRJbXBsOjppc1VSTEF0dHJpYnV0CiAK
IEhUTUxPYmplY3RFbGVtZW50SW1wbDo6SFRNTE9iamVjdEVsZW1lbnRJbXBsKERvY3VtZW50UHRy
ICpkb2MpIAogI2lmIEFQUExFX0NIQU5HRVMKLTogSFRNTEVsZW1lbnRJbXBsKGRvYyksIG1faW1h
Z2VMb2FkZXIoMCksIG9iamVjdEluc3RhbmNlKDApCis6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFt
ZXM6Om9iamVjdCgpLCBkb2MpLCBtX2ltYWdlTG9hZGVyKDApLCBvYmplY3RJbnN0YW5jZSgwKQog
I2Vsc2UKLTogSFRNTEVsZW1lbnRJbXBsKGRvYyksIG1faW1hZ2VMb2FkZXIoMCkKKzogSFRNTEVs
ZW1lbnRJbXBsKEhUTUxOYW1lczo6b2JqZWN0KCksIGRvYyksIG1faW1hZ2VMb2FkZXIoMCkKICNl
bmRpZgogewogICAgIG5lZWRXaWRnZXRVcGRhdGUgPSBmYWxzZTsKQEAgLTUxNywxMSArNTA3LDYg
QEAgSFRNTE9iamVjdEVsZW1lbnRJbXBsOjp+SFRNTE9iamVjdEVsZW1lbgogICAgIGRlbGV0ZSBt
X2ltYWdlTG9hZGVyOwogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTE9iamVjdEVsZW1lbnRJbXBsOjpp
ZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX09CSkVDVDsKLX0KLQogI2lmIEFQUExFX0NIQU5H
RVMKIEtKUzo6QmluZGluZ3M6Okluc3RhbmNlICpIVE1MT2JqZWN0RWxlbWVudEltcGw6OmdldE9i
amVjdEluc3RhbmNlKCkgY29uc3QKIHsKQEAgLTk0NCw3ICs5MjksNyBAQCB2b2lkIEhUTUxPYmpl
Y3RFbGVtZW50SW1wbDo6c2V0V2lkdGgoY29uCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxQ
YXJhbUVsZW1lbnRJbXBsOjpIVE1MUGFyYW1FbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQot
ICAgIDogSFRNTEVsZW1lbnRJbXBsKGRvYykKKyAgICA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFt
ZXM6OnBhcmFtKCksIGRvYykKIHsKIH0KIApAQCAtOTUyLDExICs5MzcsNiBAQCBIVE1MUGFyYW1F
bGVtZW50SW1wbDo6fkhUTUxQYXJhbUVsZW1lbnRJCiB7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1M
UGFyYW1FbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9QQVJBTTsKLX0K
LQogdm9pZCBIVE1MUGFyYW1FbGVtZW50SW1wbDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVk
QXR0cmlidXRlSW1wbCAqYXR0cikKIHsKICAgICBzd2l0Y2goIGF0dHItPmlkKCkgKQpJbmRleDog
a2h0bWwvaHRtbC9odG1sX29iamVjdGltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfb2JqZWN0aW1wbC5oLHYKcmV0cmlldmluZyByZXZp
c2lvbiAxLjMxCmRpZmYgLXUgLXAgLXIxLjMxIGtodG1sL2h0bWwvaHRtbF9vYmplY3RpbXBsLmgK
LS0tIGtodG1sL2h0bWwvaHRtbF9vYmplY3RpbXBsLmgJMTEgTWF5IDIwMDUgMDU6NDk6MzQgLTAw
MDAJMS4zMQorKysga2h0bWwvaHRtbC9odG1sX29iamVjdGltcGwuaAkyMyBKdW4gMjAwNSAyMTo1
Mjo0MSAtMDAwMApAQCAtNDIsMTAgKzQyLDEwIEBAIGNsYXNzIEhUTUxBcHBsZXRFbGVtZW50SW1w
bCA6IHB1YmxpYyBIVE0KIHsKIHB1YmxpYzoKICAgICBIVE1MQXBwbGV0RWxlbWVudEltcGwoRG9j
dW1lbnRQdHIgKmRvYyk7Ci0KICAgICB+SFRNTEFwcGxldEVsZW1lbnRJbXBsKCk7CiAKLSAgICB2
aXJ0dWFsIElkIGlkKCkgY29uc3Q7CisgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1Jl
cXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzUmVxdWlyZWQ7IH0KKyAgICB2aXJ0
dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDE7IH0KIAogICAgIHZpcnR1YWwg
Ym9vbCBtYXBUb0VudHJ5KElkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNv
bnN0OwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1
dGVJbXBsICp0b2tlbik7CkBAIC0xMTIsMTEgKzExMiwxMSBAQCBjbGFzcyBIVE1MRW1iZWRFbGVt
ZW50SW1wbCA6IHB1YmxpYyBIVE1MCiB7CiBwdWJsaWM6CiAgICAgSFRNTEVtYmVkRWxlbWVudElt
cGwoRG9jdW1lbnRQdHIgKmRvYyk7Ci0KICAgICB+SFRNTEVtYmVkRWxlbWVudEltcGwoKTsKIAot
ICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKLQorICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBl
bmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9Cisg
ICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgCiAg
ICAgdmlydHVhbCBib29sIG1hcFRvRW50cnkoSWQgYXR0ciwgTWFwcGVkQXR0cmlidXRlRW50cnkm
IHJlc3VsdCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1h
cHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIpOwogCkBAIC0xNDYsMTAgKzE0NiwxMCBAQCBjbGFzcyBI
VE1MT2JqZWN0RWxlbWVudEltcGwgOiBwdWJsaWMgSFRNCiB7CiBwdWJsaWM6CiAgICAgSFRNTE9i
amVjdEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpOwotCiAgICAgfkhUTUxPYmplY3RFbGVt
ZW50SW1wbCgpOwogCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OworICAgIHZpcnR1YWwgSFRN
TFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1Jl
cXVpcmVkOyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiA3
OyB9CiAKICAgICBIVE1MRm9ybUVsZW1lbnRJbXBsICpmb3JtKCkgY29uc3Q7CiAKQEAgLTI0Nywx
MCArMjQ3LDEwIEBAIGNsYXNzIEhUTUxQYXJhbUVsZW1lbnRJbXBsIDogcHVibGljIEhUTUwKICAg
ICBmcmllbmQgY2xhc3MgSFRNTEFwcGxldEVsZW1lbnRJbXBsOwogcHVibGljOgogICAgIEhUTUxQ
YXJhbUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpOwotCiAgICAgfkhUTUxQYXJhbUVsZW1l
bnRJbXBsKCk7CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CisgICAgdmlydHVhbCBIVE1M
VGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzRm9y
YmlkZGVuOyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAw
OyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmli
dXRlSW1wbCAqdG9rZW4pOwogCkluZGV4OiBraHRtbC9odG1sL2h0bWxfdGFibGVpbXBsLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfdGFi
bGVpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS41MwpkaWZmIC11IC1wIC1yMS41MyBr
aHRtbC9odG1sL2h0bWxfdGFibGVpbXBsLmNwcAotLS0ga2h0bWwvaHRtbC9odG1sX3RhYmxlaW1w
bC5jcHAJMTcgSnVuIDIwMDUgMjE6NTU6MzkgLTAwMDAJMS41MworKysga2h0bWwvaHRtbC9odG1s
X3RhYmxlaW1wbC5jcHAJMjMgSnVuIDIwMDUgMjE6NTI6NDMgLTAwMDAKQEAgLTUxLDcgKzUxLDcg
QEAgdXNpbmcgbmFtZXNwYWNlIGtodG1sOwogbmFtZXNwYWNlIERPTSB7CiAKIEhUTUxUYWJsZUVs
ZW1lbnRJbXBsOjpIVE1MVGFibGVFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICA6IEhU
TUxFbGVtZW50SW1wbChkb2MpCisgIDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6dGFibGUo
KSwgZG9jKQogewogICAgIHRDYXB0aW9uID0gMDsKICAgICBoZWFkID0gMDsKQEAgLTczLDExICs3
Myw2IEBAIEhUTUxUYWJsZUVsZW1lbnRJbXBsOjp+SFRNTFRhYmxlRWxlbWVudEkKIHsKIH0KIAot
Tm9kZUltcGw6OklkIEhUTUxUYWJsZUVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIElEX1RBQkxFOwotfQotCiBOb2RlSW1wbCogSFRNTFRhYmxlRWxlbWVudEltcGw6OnNldENh
cHRpb24oIEhUTUxUYWJsZUNhcHRpb25FbGVtZW50SW1wbCAqYyApCiB7CiAgICAgaW50IGV4Y2Vw
dGlvbmNvZGUgPSAwOwpAQCAtMTQ2LDcgKzE0MSw3IEBAIEhUTUxFbGVtZW50SW1wbCAqSFRNTFRh
YmxlRWxlbWVudEltcGw6OmMKICAgICBpZighaGVhZCkKICAgICB7CiAgICAgICAgIGludCBleGNl
cHRpb25jb2RlID0gMDsKLSAgICAgICAgaGVhZCA9IG5ldyBIVE1MVGFibGVTZWN0aW9uRWxlbWVu
dEltcGwoZG9jUHRyKCksIElEX1RIRUFELCB0cnVlIC8qIGltcGxpY2l0ICovKTsKKyAgICAgICAg
aGVhZCA9IG5ldyBIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGwoSFRNTE5hbWVzOjp0aGVhZCgp
LCBkb2NQdHIoKSwgdHJ1ZSAvKiBpbXBsaWNpdCAqLyk7CiAgICAgICAgIGlmKGZvb3QpCiAgICAg
ICAgICAgICBpbnNlcnRCZWZvcmUoIGhlYWQsIGZvb3QsIGV4Y2VwdGlvbmNvZGUgKTsKICAgICAg
ICAgZWxzZSBpZihmaXJzdEJvZHkpCkBAIC0xNzEsNyArMTY2LDcgQEAgSFRNTEVsZW1lbnRJbXBs
ICpIVE1MVGFibGVFbGVtZW50SW1wbDo6YwogICAgIGlmKCFmb290KQogICAgIHsKICAgICAgICAg
aW50IGV4Y2VwdGlvbmNvZGUgPSAwOwotICAgICAgICBmb290ID0gbmV3IEhUTUxUYWJsZVNlY3Rp
b25FbGVtZW50SW1wbChkb2NQdHIoKSwgSURfVEZPT1QsIHRydWUgLyppbXBsaWNpdCAqLyk7Cisg
ICAgICAgIGZvb3QgPSBuZXcgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsKEhUTUxOYW1lczo6
dGZvb3QoKSwgZG9jUHRyKCksIHRydWUgLyppbXBsaWNpdCAqLyk7CiAgICAgICAgIGlmKGZpcnN0
Qm9keSkKICAgICAgICAgICAgIGluc2VydEJlZm9yZSggZm9vdCwgZmlyc3RCb2R5LCBleGNlcHRp
b25jb2RlICk7CiAgICAgICAgIGVsc2UKQEAgLTIxNiw3ICsyMTEsNyBAQCBIVE1MRWxlbWVudElt
cGwgKkhUTUxUYWJsZUVsZW1lbnRJbXBsOjppCiAgICAgLy8gKG5vdGU6IHRoaXMgaXMgZGlmZmVy
ZW50IGZyb20gImlmIHRoZSB0YWJsZSBoYXMgbm8gc2VjdGlvbnMiLCBzaW5jZSB3ZSBjYW4gaGF2
ZQogICAgIC8vIDxUQUJMRT48VFI+KQogICAgIGlmKCFmaXJzdEJvZHkgJiYgIWhlYWQgJiYgIWZv
b3QgJiYgIWhhc0NoaWxkTm9kZXMoKSkKLSAgICAgICAgc2V0VEJvZHkoIG5ldyBIVE1MVGFibGVT
ZWN0aW9uRWxlbWVudEltcGwoZG9jUHRyKCksIElEX1RCT0RZLCB0cnVlIC8qIGltcGxpY2l0ICov
KSApOworICAgICAgICBzZXRUQm9keSggbmV3IEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbChI
VE1MTmFtZXM6OnRib2R5KCksIGRvY1B0cigpLCB0cnVlIC8qIGltcGxpY2l0ICovKSApOwogCiAg
ICAgLy9rZERlYnVnKDYwMzApIDw8IGtfZnVuY2luZm8gPDwgaW5kZXggPDwgZW5kbDsKICAgICAv
LyBJRSB0cmVhdHMgaW5kZXg9LTEgYXMgZGVmYXVsdCB2YWx1ZSBtZWFuaW5nICdhcHBlbmQgYWZ0
ZXIgbGFzdCcKQEAgLTIzMCw3ICsyMjUsOCBAQCBIVE1MRWxlbWVudEltcGwgKkhUTUxUYWJsZUVs
ZW1lbnRJbXBsOjppCiAgICAgewogCS8vIHRoZXJlIGNvdWxkIGJlIDIgdGZvb3QgZWxlbWVudHMg
aW4gdGhlIHRhYmxlLiBPbmx5IHRoZSBmaXJzdCBvbmUgaXMgdGhlICJmb290IiwgdGhhdCdzIHdo
eSB3ZSBoYXZlIHRoZSBtb3JlCiAJLy8gY29tcGxpY2F0ZWQgaWYgc3RhdGVtZW50IGJlbG93Lgot
ICAgICAgICBpZiAoIG5vZGUgIT0gZm9vdCAmJiAobm9kZS0+aWQoKSA9PSBJRF9USEVBRCB8fCBu
b2RlLT5pZCgpID09IElEX1RGT09UIHx8IG5vZGUtPmlkKCkgPT0gSURfVEJPRFkpICkKKyAgICAg
ICAgaWYgKG5vZGUgIT0gZm9vdCAmJiAobm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRoZWFk
KCkpIHx8IG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0Zm9vdCgpKSB8fCAKKyAgICAgICAg
ICAgIG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0Ym9keSgpKSkpCiAgICAgICAgIHsKICAg
ICAgICAgICAgIHNlY3Rpb24gPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVTZWN0aW9uRWxlbWVudElt
cGwgKj4obm9kZSk7CiAgICAgICAgICAgICBsYXN0U2VjdGlvbiA9IHNlY3Rpb247CkBAIC0yNzYs
OCArMjcyLDggQEAgdm9pZCBIVE1MVGFibGVFbGVtZW50SW1wbDo6ZGVsZXRlUm93KCBsbwogICAg
IGJvb2wgZm91bmQgPSBmYWxzZTsKICAgICBmb3IgKCA7IG5vZGUgOyBub2RlID0gbm9kZS0+bmV4
dFNpYmxpbmcoKSApCiAgICAgewotICAgICAgICBpZiAoIG5vZGUgIT0gZm9vdCAmJiAobm9kZS0+
aWQoKSA9PSBJRF9USEVBRCB8fCBub2RlLT5pZCgpID09IElEX1RGT09UIHx8IG5vZGUtPmlkKCkg
PT0gSURfVEJPRFkpICkKLSAgICAgICAgeworICAgICAgICBpZiAobm9kZSAhPSBmb290ICYmIChu
b2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGhlYWQoKSkgfHwgbm9kZS0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OnRmb290KCkpIHx8IAorICAgICAgICAgICAgbm9kZS0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OnRib2R5KCkpKSkgewogICAgICAgICAgICAgc2VjdGlvbiA9IHN0YXRpY19jYXN0PEhU
TUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbCAqPihub2RlKTsKICAgICAgICAgICAgIGxhc3RTZWN0
aW9uID0gc2VjdGlvbjsKICAgICAgICAgICAgIGludCByb3dzID0gc2VjdGlvbi0+bnVtUm93cygp
OwpAQCAtMzA5LDcgKzMwNSw3IEBAIE5vZGVJbXBsICpIVE1MVGFibGVFbGVtZW50SW1wbDo6YWRk
Q2hpbGQKICAgICBrZERlYnVnKCA2MDMwICkgPDwgbm9kZU5hbWUoKS5zdHJpbmcoKSA8PCAiKFRh
YmxlKTo6YWRkQ2hpbGQoICIgPDwgY2hpbGQtPm5vZGVOYW1lKCkuc3RyaW5nKCkgPDwgIiApIiA8
PCBlbmRsOwogI2VuZGlmCiAKLSAgICBpZiAoY2hpbGQtPmlkKCkgPT0gSURfRk9STSkgeworICAg
IGlmIChjaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZvcm0oKSkpIHsKICAgICAgICAgLy8g
Rmlyc3QgYWRkIHRoZSBjaGlsZC4KICAgICAgICAgSFRNTEVsZW1lbnRJbXBsOjphZGRDaGlsZChj
aGlsZCk7CiAgICAgICAgIC8vIE5vdyBzaW1wbHkgcmV0dXJuIG91cnNlbHZlcyBhcyB0aGUgbmV3
bm9kZS4gIFRoaXMgaGFzIHRoZSBlZmZlY3Qgb2YKQEAgLTMzNywyOCArMzMzLDE1IEBAIE5vZGVJ
bXBsICpIVE1MVGFibGVFbGVtZW50SW1wbDo6YWRkQ2hpbGQKIAogICAgIGludCBleGNlcHRpb25j
b2RlID0gMDsKICAgICBOb2RlSW1wbCAqcmV0dmFsID0gYXBwZW5kQ2hpbGQoIGNoaWxkLCBleGNl
cHRpb25jb2RlICk7Ci0gICAgaWYgKCByZXR2YWwgKSB7Ci0Jc3dpdGNoKGNoaWxkLT5pZCgpKSB7
Ci0JY2FzZSBJRF9DQVBUSU9OOgotCSAgICBpZiAoICF0Q2FwdGlvbiApCi0JCXRDYXB0aW9uID0g
c3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnRJbXBsICo+KGNoaWxkKTsKLQkgICAg
YnJlYWs7Ci0JY2FzZSBJRF9DT0w6Ci0JY2FzZSBJRF9DT0xHUk9VUDoKLQkgICAgYnJlYWs7Ci0J
Y2FzZSBJRF9USEVBRDoKLQkgICAgaWYgKCAhaGVhZCApCi0JCWhlYWQgPSBzdGF0aWNfY2FzdDxI
VE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGwgKj4oY2hpbGQpOwotCSAgICBicmVhazsKLQljYXNl
IElEX1RGT09UOgotCSAgICBpZiAoICFmb290ICkKLQkJZm9vdCA9IHN0YXRpY19jYXN0PEhUTUxU
YWJsZVNlY3Rpb25FbGVtZW50SW1wbCAqPihjaGlsZCk7Ci0JICAgIGJyZWFrOwotCWNhc2UgSURf
VEJPRFk6Ci0JICAgIGlmICggIWZpcnN0Qm9keSApCi0JCWZpcnN0Qm9keSA9IHN0YXRpY19jYXN0
PEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbCAqPihjaGlsZCk7Ci0JICAgIGJyZWFrOwotCX0K
KyAgICBpZiAocmV0dmFsKSB7CisgICAgICAgIGlmICghdENhcHRpb24gJiYgY2hpbGQtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjpjYXB0aW9uKCkpKQorICAgICAgICAgICAgdENhcHRpb24gPSBzdGF0
aWNfY2FzdDxIVE1MVGFibGVDYXB0aW9uRWxlbWVudEltcGwgKj4oY2hpbGQpOworICAgICAgICBl
bHNlIGlmICghaGVhZCAmJiBjaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRoZWFkKCkpKQor
ICAgICAgICAgICAgaGVhZCA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1w
bCAqPihjaGlsZCk7CisgICAgICAgIGVsc2UgaWYgKCFmb290ICYmIGNoaWxkLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6dGZvb3QoKSkpCisgICAgICAgICAgICBmb290ID0gc3RhdGljX2Nhc3Q8SFRN
TFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsICo+KGNoaWxkKTsKKwllbHNlIGlmICghZmlyc3RCb2R5
ICYmIGNoaWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGJvZHkoKSkpCisJICAgIGZpcnN0Qm9k
eSA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbCAqPihjaGlsZCk7CiAg
ICAgfQogICAgIHJldHVybiByZXR2YWw7CiB9CkBAIC04MDIsMjYgKzc4NSwxOSBAQCB2b2lkIEhU
TUxUYWJsZVBhcnRFbGVtZW50SW1wbDo6cGFyc2VNYXBwCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
IAotSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsOjpIVE1MVGFibGVTZWN0aW9uRWxlbWVudElt
cGwoRG9jdW1lbnRQdHIgKmRvYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVzaG9ydCB0YWdpZCwgYm9vbCBpbXBsaWNpdCkKLSAgICA6
IEhUTUxUYWJsZVBhcnRFbGVtZW50SW1wbChkb2MpCitIVE1MVGFibGVTZWN0aW9uRWxlbWVudElt
cGw6OkhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdO
YW1lLCBEb2N1bWVudFB0ciAqZG9jLCBib29sIGltcGxpY2l0KQorICAgIDogSFRNTFRhYmxlUGFy
dEVsZW1lbnRJbXBsKHRhZ05hbWUsIGRvYykKIHsKLSAgICBfaWQgPSB0YWdpZDsKICAgICBtX2lt
cGxpY2l0ID0gaW1wbGljaXQ7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MVGFibGVTZWN0aW9uRWxl
bWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gX2lkOwotfQotCiBOb2RlSW1wbCAq
SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsOjphZGRDaGlsZChOb2RlSW1wbCAqY2hpbGQpCiB7
CiAjaWZkZWYgREVCVUdfTEFZT1VUCiAgICAga2REZWJ1ZyggNjAzMCApIDw8IG5vZGVOYW1lKCku
c3RyaW5nKCkgPDwgIihUYm9keSk6OmFkZENoaWxkKCAiIDw8IGNoaWxkLT5ub2RlTmFtZSgpLnN0
cmluZygpIDw8ICIgKSIgPDwgZW5kbDsKICNlbmRpZgogCi0gICAgaWYgKGNoaWxkLT5pZCgpID09
IElEX0ZPUk0pIHsKKyAgICBpZiAoY2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpmb3JtKCkp
KSB7CiAgICAgICAgIC8vIEZpcnN0IGFkZCB0aGUgY2hpbGQuCiAgICAgICAgIEhUTUxFbGVtZW50
SW1wbDo6YWRkQ2hpbGQoY2hpbGQpOwogICAgICAgICAvLyBOb3cgc2ltcGx5IHJldHVybiBvdXJz
ZWx2ZXMgYXMgdGhlIG5ld25vZGUuICBUaGlzIGhhcyB0aGUgZWZmZWN0IG9mCkBAIC04NzcsNyAr
ODUzLDcgQEAgaW50IEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbDo6bnVtUm93cwogICAgIGlu
dCByb3dzID0gMDsKICAgICBjb25zdCBOb2RlSW1wbCAqbiA9IGZpcnN0Q2hpbGQoKTsKICAgICB3
aGlsZSAobikgewotICAgICAgICBpZiAobi0+aWQoKSA9PSBJRF9UUikKKyAgICAgICAgaWYgKG4t
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0cigpKSkKICAgICAgICAgICAgIHJvd3MrKzsKICAgICAg
ICAgbiA9IG4tPm5leHRTaWJsaW5nKCk7CiAgICAgfQpAQCAtOTMyLDE4ICs5MDgsMTMgQEAgU2hh
cmVkUHRyPEhUTUxDb2xsZWN0aW9uSW1wbD4gSFRNTFRhYmxlUwogCiAvLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCiAKLU5vZGVJbXBsOjpJZCBIVE1MVGFibGVSb3dFbGVtZW50SW1wbDo6aWQoKSBjb25zdAot
ewotICAgIHJldHVybiBJRF9UUjsKLX0KLQogTm9kZUltcGwgKkhUTUxUYWJsZVJvd0VsZW1lbnRJ
bXBsOjphZGRDaGlsZChOb2RlSW1wbCAqY2hpbGQpCiB7CiAjaWZkZWYgREVCVUdfTEFZT1VUCiAg
ICAga2REZWJ1ZyggNjAzMCApIDw8IG5vZGVOYW1lKCkuc3RyaW5nKCkgPDwgIihUcm93KTo6YWRk
Q2hpbGQoICIgPDwgY2hpbGQtPm5vZGVOYW1lKCkuc3RyaW5nKCkgPDwgIiApIiA8PCBlbmRsOwog
I2VuZGlmCiAKLSAgICBpZiAoY2hpbGQtPmlkKCkgPT0gSURfRk9STSkgeworICAgIGlmIChjaGls
ZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZvcm0oKSkpIHsKICAgICAgICAgLy8gRmlyc3QgYWRk
IHRoZSBjaGlsZC4KICAgICAgICAgSFRNTEVsZW1lbnRJbXBsOjphZGRDaGlsZChjaGlsZCk7CiAg
ICAgICAgIC8vIE5vdyBzaW1wbHkgcmV0dXJuIG91cnNlbHZlcyBhcyB0aGUgbmV3bm9kZS4gIFRo
aXMgaGFzIHRoZSBlZmZlY3Qgb2YKQEAgLTk1OCwxNiArOTI5LDE2IEBAIGxvbmcgSFRNTFRhYmxl
Um93RWxlbWVudEltcGw6OnJvd0luZGV4KCkKICAgICBpbnQgckluZGV4ID0gMDsKIAogICAgIE5v
ZGVJbXBsICp0YWJsZSA9IHBhcmVudE5vZGUoKTsKLSAgICBpZiAoICF0YWJsZSApCisgICAgaWYg
KCF0YWJsZSkKIAlyZXR1cm4gLTE7CiAgICAgdGFibGUgPSB0YWJsZS0+cGFyZW50Tm9kZSgpOwot
ICAgIGlmICggIXRhYmxlIHx8IHRhYmxlLT5pZCgpICE9IElEX1RBQkxFICkKKyAgICBpZiAoIXRh
YmxlIHx8ICF0YWJsZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRhYmxlKCkpKQogCXJldHVybiAt
MTsKIAogICAgIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbCAqZm9vdCA9IHN0YXRpY19jYXN0
PEhUTUxUYWJsZUVsZW1lbnRJbXBsICo+KHRhYmxlKS0+dEZvb3QoKTsKICAgICBOb2RlSW1wbCAq
bm9kZSA9IHRhYmxlLT5maXJzdENoaWxkKCk7Ci0gICAgd2hpbGUgKCBub2RlICkgewotICAgICAg
ICBpZiAoIG5vZGUgIT0gZm9vdCAmJiAobm9kZS0+aWQoKSA9PSBJRF9USEVBRCB8fCBub2RlLT5p
ZCgpID09IElEX1RGT09UIHx8IG5vZGUtPmlkKCkgPT0gSURfVEJPRFkpICkgeworICAgIHdoaWxl
IChub2RlKSB7CisgICAgICAgIGlmIChub2RlICE9IGZvb3QgJiYgKG5vZGUtPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjp0aGVhZCgpKSB8fCBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGZvb3Qo
KSkgfHwgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRib2R5KCkpKSkgewogCSAgICBIVE1M
VGFibGVTZWN0aW9uRWxlbWVudEltcGwqIHNlY3Rpb24gPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVT
ZWN0aW9uRWxlbWVudEltcGwgKj4obm9kZSk7CiAJICAgIGNvbnN0IE5vZGVJbXBsICpyb3cgPSBz
ZWN0aW9uLT5maXJzdENoaWxkKCk7CiAJICAgIHdoaWxlICggcm93ICkgewpAQCAtOTk2LDcgKzk2
Nyw3IEBAIGxvbmcgSFRNTFRhYmxlUm93RWxlbWVudEltcGw6OnNlY3Rpb25Sb3cKICAgICBjb25z
dCBOb2RlSW1wbCAqbiA9IHRoaXM7CiAgICAgZG8gewogICAgICAgICBuID0gbi0+cHJldmlvdXNT
aWJsaW5nKCk7Ci0gICAgICAgIGlmIChuICYmIG4tPmlzRWxlbWVudE5vZGUoKSAmJiBuLT5pZCgp
ID09IElEX1RSKQorICAgICAgICBpZiAobiAmJiBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dHIo
KSkpCiAgICAgICAgICAgICBySW5kZXgrKzsKICAgICB9CiAgICAgd2hpbGUgKG4pOwpAQCAtMTAx
Myw3ICs5ODQsNyBAQCBIVE1MRWxlbWVudEltcGwgKkhUTUxUYWJsZVJvd0VsZW1lbnRJbXBsCiAg
ICAgICAgIGV4Y2VwdGlvbmNvZGUgPSBET01FeGNlcHRpb246OklOREVYX1NJWkVfRVJSOyAvLyBw
ZXIgdGhlIERPTQogICAgIGVsc2UKICAgICB7Ci0gICAgICAgIGMgPSBuZXcgSFRNTFRhYmxlQ2Vs
bEVsZW1lbnRJbXBsKGRvY1B0cigpLCBJRF9URCk7CisgICAgICAgIGMgPSBuZXcgSFRNTFRhYmxl
Q2VsbEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6dGQoKSwgZG9jUHRyKCkpOwogICAgICAgICBpZihu
dW1DZWxscyA9PSBpbmRleCB8fCBpbmRleCA9PSAtMSkKICAgICAgICAgICAgIGFwcGVuZENoaWxk
KGMsIGV4Y2VwdGlvbmNvZGUpOwogICAgICAgICBlbHNlIHsKQEAgLTExMDMsMTUgKzEwNzQsMTQg
QEAgdm9pZCBIVE1MVGFibGVSb3dFbGVtZW50SW1wbDo6c2V0VkFsaWduKAogCiAvLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCiAKLUhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbDo6SFRNTFRhYmxlQ2VsbEVsZW1l
bnRJbXBsKERvY3VtZW50UHRyICpkb2MsIGludCB0YWcpCi0gIDogSFRNTFRhYmxlUGFydEVsZW1l
bnRJbXBsKGRvYykKK0hUTUxUYWJsZUNlbGxFbGVtZW50SW1wbDo6SFRNTFRhYmxlQ2VsbEVsZW1l
bnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50UHRyICpkb2MpCisg
IDogSFRNTFRhYmxlUGFydEVsZW1lbnRJbXBsKHRhZ05hbWUsIGRvYykKIHsKLSAgX2NvbCA9IC0x
OwotICBfcm93ID0gLTE7Ci0gIGNTcGFuID0gclNwYW4gPSAxOwotICBfaWQgPSB0YWc7Ci0gIHJv
d0hlaWdodCA9IDA7Ci0gIG1fc29saWQgPSBmYWxzZTsKKyAgICBfY29sID0gLTE7CisgICAgX3Jv
dyA9IC0xOworICAgIGNTcGFuID0gclNwYW4gPSAxOworICAgIHJvd0hlaWdodCA9IDA7CisgICAg
bV9zb2xpZCA9IGZhbHNlOwogfQogCiBIVE1MVGFibGVDZWxsRWxlbWVudEltcGw6On5IVE1MVGFi
bGVDZWxsRWxlbWVudEltcGwoKQpAQCAtMTEyMiw3ICsxMDkyLDcgQEAgbG9uZyBIVE1MVGFibGVD
ZWxsRWxlbWVudEltcGw6OmNlbGxJbmRleAogewogICAgIGludCBpbmRleCA9IDA7CiAgICAgZm9y
IChjb25zdCBOb2RlSW1wbCAqIG5vZGUgPSBwcmV2aW91c1NpYmxpbmcoKTsgbm9kZTsgbm9kZSA9
IG5vZGUtPnByZXZpb3VzU2libGluZygpKSB7Ci0gICAgICAgIGlmIChub2RlLT5pZCgpID09IElE
X1REIHx8IG5vZGUtPmlkKCkgPT0gSURfVEgpCisgICAgICAgIGlmIChub2RlLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6dGQoKSkgfHwgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRoKCkpKQog
ICAgICAgICAgICAgaW5kZXgrKzsKICAgICB9CiAgICAgCkBAIC0xMTg5LDkgKzExNTksOSBAQCB2
b2lkIEhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbDo6cGFyc2VNYXBwCiAvLyB1c2VkIGJ5IHRhYmxl
IGNlbGxzIHRvIHNoYXJlIHN0eWxlIGRlY2xzIGNyZWF0ZWQgYnkgdGhlIGVuY2xvc2luZyB0YWJs
ZS4KIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uSW1wbCogSFRNTFRhYmxlQ2VsbEVsZW1lbnRJ
bXBsOjphZGRpdGlvbmFsQXR0cmlidXRlU3R5bGVEZWNsKCkKIHsKLSAgICBIVE1MRWxlbWVudElt
cGwqIHAgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwqPihwYXJlbnROb2RlKCkpOwotICAg
IHdoaWxlKHAgJiYgcC0+aWQoKSAhPSBJRF9UQUJMRSkKLSAgICAgICAgcCA9IHN0YXRpY19jYXN0
PEhUTUxFbGVtZW50SW1wbCo+KHAtPnBhcmVudE5vZGUoKSk7CisgICAgTm9kZUltcGwqIHAgPSBw
YXJlbnROb2RlKCk7CisgICAgd2hpbGUgKHAgJiYgIXAtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0
YWJsZSgpKSkKKyAgICAgICAgcCA9IHAtPnBhcmVudE5vZGUoKTsKIAogICAgIGlmIChwKSB7CiAg
ICAgICAgIEhUTUxUYWJsZUVsZW1lbnRJbXBsKiB0YWJsZSA9IHN0YXRpY19jYXN0PEhUTUxUYWJs
ZUVsZW1lbnRJbXBsKj4ocCk7CkBAIC0xMjAxLDE1ICsxMTcxLDYgQEAgQ1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb25JbXBsKiBIVE1MVGFibAogICAgIHJldHVybiAwOwogfQogCi12b2lkIEhUTUxU
YWJsZUNlbGxFbGVtZW50SW1wbDo6YXR0YWNoKCkKLXsKLSAgICBIVE1MRWxlbWVudEltcGwqIHAg
PSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwqPihwYXJlbnROb2RlKCkpOwotICAgIHdoaWxl
KHAgJiYgcC0+aWQoKSAhPSBJRF9UQUJMRSkKLSAgICAgICAgcCA9IHN0YXRpY19jYXN0PEhUTUxF
bGVtZW50SW1wbCo+KHAtPnBhcmVudE5vZGUoKSk7Ci0KLSAgICBIVE1MVGFibGVQYXJ0RWxlbWVu
dEltcGw6OmF0dGFjaCgpOwotfQotCiBib29sIEhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbDo6aXNV
UkxBdHRyaWJ1dGUoQXR0cmlidXRlSW1wbCAqYXR0cikgY29uc3QKIHsKICAgICByZXR1cm4gYXR0
ci0+aWQoKSA9PSBBVFRSX0JBQ0tHUk9VTkQ7CkBAIC0xMzQ3LDE2ICsxMzA4LDEwIEBAIHZvaWQg
SFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsOjpzZXRXaWR0aCgKIAogLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQogCi1IVE1MVGFibGVDb2xFbGVtZW50SW1wbDo6SFRNTFRhYmxlQ29sRWxlbWVudEltcGwoRG9j
dW1lbnRQdHIgKmRvYywgdXNob3J0IGkpCi0gICAgOiBIVE1MVGFibGVQYXJ0RWxlbWVudEltcGwo
ZG9jKQorSFRNTFRhYmxlQ29sRWxlbWVudEltcGw6OkhUTUxUYWJsZUNvbEVsZW1lbnRJbXBsKGNv
bnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50UHRyICpkb2MpCisgICAgOiBIVE1M
VGFibGVQYXJ0RWxlbWVudEltcGwodGFnTmFtZSwgZG9jKQogewotICAgIF9pZCA9IGk7Ci0gICAg
X3NwYW4gPSAoX2lkID09IElEX0NPTEdST1VQID8gMCA6IDEpOwotfQotCi1Ob2RlSW1wbDo6SWQg
SFRNTFRhYmxlQ29sRWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gX2lkOwor
ICAgIF9zcGFuID0gKHRhZ05hbWUubWF0Y2hlcyhIVE1MTmFtZXM6OmNvbGdyb3VwKCkpID8gMCA6
IDEpOwogfQogCiBib29sIEhUTUxUYWJsZUNvbEVsZW1lbnRJbXBsOjptYXBUb0VudHJ5KE5vZGVJ
bXBsOjpJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdApAQCAtMTQ0
NywxMSArMTQwMiw2IEBAIHZvaWQgSFRNTFRhYmxlQ29sRWxlbWVudEltcGw6OnNldFdpZHRoKGMK
IAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Ob2RlSW1wbDo6SWQgSFRNTFRhYmxlQ2FwdGlvbkVs
ZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0NBUFRJT047Ci19Ci0KIGJv
b2wgSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnRJbXBsOjptYXBUb0VudHJ5KE5vZGVJbXBsOjpJZCBh
dHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdAogewogICAgIGlmIChhdHRy
ID09IEFUVFJfQUxJR04pIHsKSW5kZXg6IGtodG1sL2h0bWwvaHRtbF90YWJsZWltcGwuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfdGFibGVp
bXBsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjEKZGlmZiAtdSAtcCAtcjEuMjEga2h0bWwv
aHRtbC9odG1sX3RhYmxlaW1wbC5oCi0tLSBraHRtbC9odG1sL2h0bWxfdGFibGVpbXBsLmgJMTcg
SnVuIDIwMDUgMjE6NTU6MzkgLTAwMDAJMS4yMQorKysga2h0bWwvaHRtbC9odG1sX3RhYmxlaW1w
bC5oCTIzIEp1biAyMDA1IDIxOjUyOjQzIC0wMDAwCkBAIC02Miw3ICs2Miw4IEBAIHB1YmxpYzoK
ICAgICBIVE1MVGFibGVFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKTsKICAgICB+SFRNTFRh
YmxlRWxlbWVudEltcGwoKTsKIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdT
dGF0dXNSZXF1aXJlZDsgfQorICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyBy
ZXR1cm4gOTsgfQogCiAgICAgSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnRJbXBsICpjYXB0aW9uKCkg
Y29uc3QgeyByZXR1cm4gdENhcHRpb247IH0KICAgICBOb2RlSW1wbCAqc2V0Q2FwdGlvbiggSFRN
TFRhYmxlQ2FwdGlvbkVsZW1lbnRJbXBsICogKTsKQEAgLTE0Nyw4ICsxNDgsOCBAQCBjbGFzcyBI
VE1MVGFibGVQYXJ0RWxlbWVudEltcGwgOiBwdWJsaWMgCiAKIHsKIHB1YmxpYzoKLSAgICBIVE1M
VGFibGVQYXJ0RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgICAgICAgOiBIVE1MRWxl
bWVudEltcGwoZG9jKQorICAgIEhUTUxUYWJsZVBhcnRFbGVtZW50SW1wbChjb25zdCBRdWFsaWZp
ZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudFB0ciAqZG9jKQorICAgICAgICA6IEhUTUxFbGVtZW50
SW1wbCh0YWdOYW1lLCBkb2MpCiAgICAgICAgIHsgfQogCiAgICAgdmlydHVhbCBib29sIG1hcFRv
RW50cnkoTm9kZUltcGw6OklkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNv
bnN0OwpAQCAtMTYwLDkgKzE2MSwxMCBAQCBwdWJsaWM6CiBjbGFzcyBIVE1MVGFibGVTZWN0aW9u
RWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTFRhYmxlUGFydEVsZW1lbnRJbXBsCiB7CiBwdWJsaWM6
Ci0gICAgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIHVzaG9y
dCB0YWdpZCwgYm9vbCBpbXBsaWNpdCk7CisgICAgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBs
KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50UHRyICpkb2MsIGJvb2wgaW1w
bGljaXQpOwogCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OworICAgIHZpcnR1YWwgSFRNTFRh
Z1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c09wdGlv
bmFsOyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiA4OyB9
CiAKICAgICB2aXJ0dWFsIE5vZGVJbXBsICphZGRDaGlsZChOb2RlSW1wbCAqY2hpbGQpOwogICAg
IApAQCAtMTg0LDkgKzE4Niw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFZBbGlnbiggY29uc3Qg
RE9NU3RyaW5nICYgKTsKIAogICAgIGtodG1sOjpTaGFyZWRQdHI8SFRNTENvbGxlY3Rpb25JbXBs
PiByb3dzKCk7Ci0KLXByb3RlY3RlZDoKLSAgICB1c2hvcnQgX2lkOwogfTsKIAogLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQpAQCAtMTk1LDkgKzE5NCwxMCBAQCBjbGFzcyBIVE1MVGFibGVSb3dFbGVtZW50
SW1wbCA6IHB1YmxpYyBICiB7CiBwdWJsaWM6CiAgICAgSFRNTFRhYmxlUm93RWxlbWVudEltcGwo
RG9jdW1lbnRQdHIgKmRvYykKLSAgICAgICAgOiBIVE1MVGFibGVQYXJ0RWxlbWVudEltcGwoZG9j
KSB7fQorICAgICAgICA6IEhUTUxUYWJsZVBhcnRFbGVtZW50SW1wbChIVE1MTmFtZXM6OnRyKCks
IGRvYykge30KIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEhUTUxU
YWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNPcHRp
b25hbDsgfQorICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gNzsg
fQogCiAgICAgdmlydHVhbCBOb2RlSW1wbCAqYWRkQ2hpbGQoTm9kZUltcGwgKmNoaWxkKTsKICAg
ICAKQEAgLTIzOCwxMCArMjM4LDEyIEBAIHByb3RlY3RlZDoKIGNsYXNzIEhUTUxUYWJsZUNlbGxF
bGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MVGFibGVQYXJ0RWxlbWVudEltcGwKIHsKIHB1YmxpYzoK
LSAgICBIVE1MVGFibGVDZWxsRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgaW50IHRhZ0lk
KTsKKyAgICBIVE1MVGFibGVDZWxsRWxlbWVudEltcGwoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFn
TmFtZSwgRG9jdW1lbnRQdHIgKmRvYyk7CiAgICAgfkhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbCgp
OwogCi0gICAgLy8gIyMjIEZJWCB0aGVzZSB0d28uLi4KKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0
dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNPcHRpb25hbDsg
fQorICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gNjsgfQorCiAg
ICAgbG9uZyBjZWxsSW5kZXgoKSBjb25zdDsKIAogICAgIGludCBjb2woKSBjb25zdCB7IHJldHVy
biBfY29sOyB9CkBAIC0yNTEsMTQgKzI1MywxMCBAQCBwdWJsaWM6CiAKICAgICBpbnQgY29sU3Bh
bigpIGNvbnN0IHsgcmV0dXJuIGNTcGFuOyB9CiAgICAgaW50IHJvd1NwYW4oKSBjb25zdCB7IHJl
dHVybiByU3BhbjsgfQotICAgIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdCB7IHJldHVybiBf
aWQ7IH0KLSAgICAKKwogICAgIHZpcnR1YWwgYm9vbCBtYXBUb0VudHJ5KE5vZGVJbXBsOjpJZCBh
dHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdDsKICAgICB2aXJ0dWFsIHZv
aWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqYXR0cik7CiAKLSAg
ICB2aXJ0dWFsIHZvaWQgYXR0YWNoKCk7Ci0KICAgICAvLyB1c2VkIGJ5IHRhYmxlIGNlbGxzIHRv
IHNoYXJlIHN0eWxlIGRlY2xzIGNyZWF0ZWQgYnkgdGhlIGVuY2xvc2luZyB0YWJsZS4KICAgICB2
aXJ0dWFsIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uSW1wbCogYWRkaXRpb25hbEF0dHJpYnV0
ZVN0eWxlRGVjbCgpOwogICAgIApAQCAtMzExLDcgKzMwOSw2IEBAIHByb3RlY3RlZDoKICAgICBp
bnQgX2NvbDsKICAgICBpbnQgclNwYW47CiAgICAgaW50IGNTcGFuOwotICAgIGludCBfaWQ7CiAg
ICAgaW50IHJvd0hlaWdodDsKICAgICBib29sIG1fc29saWQgICAgICAgIDogMTsKIH07CkBAIC0z
MjEsMTAgKzMxOCwxMSBAQCBwcm90ZWN0ZWQ6CiBjbGFzcyBIVE1MVGFibGVDb2xFbGVtZW50SW1w
bCA6IHB1YmxpYyBIVE1MVGFibGVQYXJ0RWxlbWVudEltcGwKIHsKIHB1YmxpYzoKLSAgICBIVE1M
VGFibGVDb2xFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCB1c2hvcnQgaSk7Ci0KLSAgICB2
aXJ0dWFsIElkIGlkKCkgY29uc3Q7CisgICAgSFRNTFRhYmxlQ29sRWxlbWVudEltcGwoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnRQdHIgKmRvYyk7CiAKKyAgICB2aXJ0dWFs
IEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBoYXNMb2Nh
bE5hbWUoSFRNTE5hbWVzOjpjb2woKSkgPyBUYWdTdGF0dXNGb3JiaWRkZW4gOiBUYWdTdGF0dXNP
cHRpb25hbDsgfQorICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4g
aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6Y29sKCkpID8gMCA6IDE7IH0KKyAgICAKICAgICB2b2lk
IHNldFRhYmxlKEhUTUxUYWJsZUVsZW1lbnRJbXBsICp0KSB7IHRhYmxlID0gdDsgfQogCiAgICAg
Ly8gb3ZlcnJpZGVzCkBAIC0zNTEsMTAgKzM0OSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFdp
ZHRoKCBjb25zdCBET01TdHJpbmcgJiApOwogCiBwcm90ZWN0ZWQ6Ci0gICAgLy8gY291bGQgYmUg
SURfQ09MIG9yIElEX0NPTEdST1VQIC4uLiBUaGUgRE9NIGlzIG5vdCBxdWl0ZSBjbGVhciBvbgot
ICAgIC8vIHRoaXMsIGJ1dCBzaW5jZSBib3RoIGVsZW1lbnRzIHdvcmsgcXVpdGUgc2ltaWxhciwg
d2UgdXNlIG9uZQotICAgIC8vIERPTUVsZW1lbnQgZm9yIHRoZW0uLi4KLSAgICB1c2hvcnQgX2lk
OwogICAgIGludCBfc3BhbjsKICAgICBIVE1MVGFibGVFbGVtZW50SW1wbCAqdGFibGU7CiB9OwpA
QCAtMzY1LDkgKzM1OSwxMCBAQCBjbGFzcyBIVE1MVGFibGVDYXB0aW9uRWxlbWVudEltcGwgOiBw
dWJsCiB7CiBwdWJsaWM6CiAgICAgSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnRJbXBsKERvY3VtZW50
UHRyICpkb2MpCi0gICAgICAgIDogSFRNTFRhYmxlUGFydEVsZW1lbnRJbXBsKGRvYykge30KKyAg
ICAgICAgOiBIVE1MVGFibGVQYXJ0RWxlbWVudEltcGwoSFRNTE5hbWVzOjpjYXB0aW9uKCksIGRv
Yykge30KIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEhUTUxUYWdT
dGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJl
ZDsgfQorICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gNTsgfQog
ICAgIAogICAgIHZpcnR1YWwgYm9vbCBtYXBUb0VudHJ5KE5vZGVJbXBsOjpJZCBhdHRyLCBNYXBw
ZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VN
YXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqYXR0cik7CkluZGV4OiBraHRtbC9o
dG1sL2h0bWxmYWN0b3J5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiBraHRtbC9odG1sL2h0bWxm
YWN0b3J5LmNwcApkaWZmIC1OIGtodG1sL2h0bWwvaHRtbGZhY3RvcnkuY3BwCi0tLSAvZGV2L251
bGwJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysga2h0bWwvaHRtbC9odG1sZmFjdG9yeS5j
cHAJMjMgSnVuIDIwMDUgMjE6NTI6NDMgLTAwMDAKQEAgLTAsMCArMSwxOTcgQEAKKy8qCisgKiBU
aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgSFRNTCBET00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4K
KyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAz
MzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUg
Imh0bWxmYWN0b3J5LmgiCisjaW5jbHVkZSAiZG9tX2RvY2ltcGwuaCIKKworI2luY2x1ZGUgImh0
bWwvaHRtbF9iYXNlaW1wbC5oIgorI2luY2x1ZGUgImh0bWwvaHRtbF9ibG9ja2ltcGwuaCIKKyNp
bmNsdWRlICJodG1sL2h0bWxfY2FudmFzaW1wbC5oIgorI2luY2x1ZGUgImh0bWwvaHRtbF9kb2N1
bWVudGltcGwuaCIKKyNpbmNsdWRlICJodG1sL2h0bWxfZm9ybWltcGwuaCIKKyNpbmNsdWRlICJo
dG1sL2h0bWxfaGVhZGltcGwuaCIKKyNpbmNsdWRlICJodG1sL2h0bWxfaW1hZ2VpbXBsLmgiCisj
aW5jbHVkZSAiaHRtbC9odG1sX2xpc3RpbXBsLmgiCisjaW5jbHVkZSAiaHRtbC9odG1sX21pc2Np
bXBsLmgiCisjaW5jbHVkZSAiaHRtbC9odG1sX3RhYmxlaW1wbC5oIgorI2luY2x1ZGUgImh0bWwv
aHRtbF9vYmplY3RpbXBsLmgiCisKK25hbWVzcGFjZSBET00KK3sKKworSFRNTEVsZW1lbnRJbXBs
KiBIVE1MRWxlbWVudEZhY3Rvcnk6OmNyZWF0ZUhUTUxFbGVtZW50KGNvbnN0IEF0b21pY1N0cmlu
ZyYgdGFnTmFtZSwgRG9jdW1lbnRJbXBsKiBkb2MsIEhUTUxGb3JtRWxlbWVudEltcGwqIGZvcm0s
IGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQoreworICAgIGlmICghZG9jKQorICAgICAgICByZXR1cm4g
MDsgLy8gRG9uJ3QgYWxsb3cgZWxlbWVudHMgdG8gZXZlciBiZSBtYWRlIHdpdGhvdXQgaGF2aW5n
IGEgZG9jLgorCisgICAgRG9jdW1lbnRQdHIqIGRvY1B0ciA9IGRvYy0+ZG9jUHRyKCk7CisgICAg
CisgICAgaWYgKHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpodG1sKCkpCisgICAgICAgIHJldHVybiBu
ZXcgSFRNTEh0bWxFbGVtZW50SW1wbChkb2NQdHIpOworICAgIGVsc2UgaWYgKHRhZ05hbWUgPT0g
SFRNTE5hbWVzOjpoZWFkKCkpCisgICAgICAgIHJldHVybiBuZXcgSFRNTEhlYWRFbGVtZW50SW1w
bChkb2NQdHIpOworICAgIGVsc2UgaWYgKHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpib2R5KCkpCisg
ICAgICAgIHJldHVybiBuZXcgSFRNTEJvZHlFbGVtZW50SW1wbChkb2NQdHIpOworCisvLyBoZWFk
IGVsZW1lbnRzCisgICAgZWxzZSBpZiAodGFnTmFtZSA9PSBIVE1MTmFtZXM6OmJhc2UoKSkKKyAg
ICAgICAgcmV0dXJuIG5ldyBIVE1MQmFzZUVsZW1lbnRJbXBsKGRvY1B0cik7CisgICAgZWxzZSBp
ZiAodGFnTmFtZSA9PSBIVE1MTmFtZXM6OmxpbmsoKSkKKyAgICAgICAgcmV0dXJuIG5ldyBIVE1M
TGlua0VsZW1lbnRJbXBsKGRvY1B0cik7CisgICAgZWxzZSBpZiAodGFnTmFtZSA9PSBIVE1MTmFt
ZXM6Om1ldGEoKSkKKyAgICAgICAgcmV0dXJuIG5ldyBIVE1MTWV0YUVsZW1lbnRJbXBsKGRvY1B0
cik7CisgICAgZWxzZSBpZiAodGFnTmFtZSA9PSBIVE1MTmFtZXM6OnN0eWxlKCkpCisgICAgICAg
IHJldHVybiBuZXcgSFRNTFN0eWxlRWxlbWVudEltcGwoZG9jUHRyKTsKKyAgICBlbHNlIGlmICh0
YWdOYW1lID09IEhUTUxOYW1lczo6dGl0bGUoKSkKKyAgICAgICAgcmV0dXJuIG5ldyBIVE1MVGl0
bGVFbGVtZW50SW1wbChkb2NQdHIpOworCisvLyBmcmFtZXMKKyAgICBlbHNlIGlmICh0YWdOYW1l
ID09IEhUTUxOYW1lczo6ZnJhbWUoKSkKKyAgICAgICAgcmV0dXJuIG5ldyBIVE1MRnJhbWVFbGVt
ZW50SW1wbChkb2NQdHIpOworICAgIGVsc2UgaWYgKHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpmcmFt
ZXNldCgpKQorICAgICAgICByZXR1cm4gbmV3IEhUTUxGcmFtZVNldEVsZW1lbnRJbXBsKGRvY1B0
cik7CisgICAgZWxzZSBpZiAodGFnTmFtZSA9PSBIVE1MTmFtZXM6OmlmcmFtZSgpKQorICAgICAg
ICByZXR1cm4gbmV3IEhUTUxJRnJhbWVFbGVtZW50SW1wbChkb2NQdHIpOworCisvLyBmb3JtIGVs
ZW1lbnRzCisgICAgZWxzZSBpZiAodGFnTmFtZSA9PSBIVE1MTmFtZXM6OmZvcm0oKSkKKyAgICAg
ICAgcmV0dXJuIG5ldyBIVE1MRm9ybUVsZW1lbnRJbXBsKGRvY1B0cik7CisgICAgZWxzZSBpZiAo
dGFnTmFtZSA9PSBIVE1MTmFtZXM6OmJ1dHRvbigpKQorICAgICAgICByZXR1cm4gbmV3IEhUTUxC
dXR0b25FbGVtZW50SW1wbChkb2NQdHIsIGZvcm0pOworICAgIGVsc2UgaWYgKHRhZ05hbWUgPT0g
SFRNTE5hbWVzOjpmaWVsZHNldCgpKQorICAgICAgICByZXR1cm4gbmV3IEhUTUxGaWVsZFNldEVs
ZW1lbnRJbXBsKGRvY1B0ciwgZm9ybSk7CisgICAgZWxzZSBpZiAodGFnTmFtZSA9PSBIVE1MTmFt
ZXM6OmlucHV0KCkpCisgICAgICAgIHJldHVybiBuZXcgSFRNTElucHV0RWxlbWVudEltcGwoZG9j
UHRyLCBmb3JtKTsKKyAgICBlbHNlIGlmICh0YWdOYW1lID09IEhUTUxOYW1lczo6aXNpbmRleCgp
KQorICAgICAgICByZXR1cm4gbmV3IEhUTUxJc0luZGV4RWxlbWVudEltcGwoZG9jUHRyLCBmb3Jt
KTsKKyAgICBlbHNlIGlmICh0YWdOYW1lID09IEhUTUxOYW1lczo6bGFiZWwoKSkKKyAgICAgICAg
cmV0dXJuIG5ldyBIVE1MTGFiZWxFbGVtZW50SW1wbChkb2NQdHIpOworICAgIGVsc2UgaWYgKHRh
Z05hbWUgPT0gSFRNTE5hbWVzOjpsZWdlbmQoKSkKKyAgICAgICAgcmV0dXJuIG5ldyBIVE1MTGVn
ZW5kRWxlbWVudEltcGwoZG9jUHRyLCBmb3JtKTsKKyAgICBlbHNlIGlmICh0YWdOYW1lID09IEhU
TUxOYW1lczo6b3B0Z3JvdXAoKSkKKyAgICAgICAgcmV0dXJuIG5ldyBIVE1MT3B0R3JvdXBFbGVt
ZW50SW1wbChkb2NQdHIsIGZvcm0pOworICAgIGVsc2UgaWYgKHRhZ05hbWUgPT0gSFRNTE5hbWVz
OjpvcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIG5ldyBIVE1MT3B0aW9uRWxlbWVudEltcGwoZG9j
UHRyLCBmb3JtKTsKKyAgICBlbHNlIGlmICh0YWdOYW1lID09IEhUTUxOYW1lczo6c2VsZWN0KCkp
CisgICAgICAgIHJldHVybiBuZXcgSFRNTFNlbGVjdEVsZW1lbnRJbXBsKGRvY1B0ciwgZm9ybSk7
CisgICAgZWxzZSBpZiAodGFnTmFtZSA9PSBIVE1MTmFtZXM6OnRleHRhcmVhKCkpCisgICAgICAg
IHJldHVybiBuZXcgSFRNTFRleHRBcmVhRWxlbWVudEltcGwoZG9jUHRyLCBmb3JtKTsKKworLy8g
bGlzdHMKKyAgICBlbHNlIGlmICh0YWdOYW1lID09IEhUTUxOYW1lczo6ZGwoKSkKKyAgICAgICAg
cmV0dXJuIG5ldyBIVE1MRExpc3RFbGVtZW50SW1wbChkb2NQdHIpOworICAgIGVsc2UgaWYgKHRh
Z05hbWUgPT0gSFRNTE5hbWVzOjp1bCgpKQorICAgICAgICByZXR1cm4gbmV3IEhUTUxVTGlzdEVs
ZW1lbnRJbXBsKGRvY1B0cik7CisgICAgZWxzZSBpZiAodGFnTmFtZSA9PSBIVE1MTmFtZXM6Om9s
KCkpCisgICAgICAgIHJldHVybiBuZXcgSFRNTE9MaXN0RWxlbWVudEltcGwoZG9jUHRyKTsKKyAg
ICBlbHNlIGlmICh0YWdOYW1lID09IEhUTUxOYW1lczo6ZGlyKCkpCisgICAgICAgIHJldHVybiBu
ZXcgSFRNTERpcmVjdG9yeUVsZW1lbnRJbXBsKGRvY1B0cik7CisgICAgZWxzZSBpZiAodGFnTmFt
ZSA9PSBIVE1MTmFtZXM6Om1lbnUoKSkKKyAgICAgICAgcmV0dXJuIG5ldyBIVE1MTWVudUVsZW1l
bnRJbXBsKGRvY1B0cik7CisgICAgZWxzZSBpZiAodGFnTmFtZSA9PSBIVE1MTmFtZXM6OmxpKCkp
CisgICAgICAgIHJldHVybiBuZXcgSFRNTExJRWxlbWVudEltcGwoZG9jUHRyKTsKKworLy8gZm9y
bWF0dGluZyBlbGVtZW50cyAoYmxvY2spCisgICAgZWxzZSBpZiAodGFnTmFtZSA9PSBIVE1MTmFt
ZXM6OmJsb2NrcXVvdGUoKSkKKyAgICAgICAgcmV0dXJuIG5ldyBIVE1MQmxvY2txdW90ZUVsZW1l
bnRJbXBsKGRvY1B0cik7CisgICAgZWxzZSBpZiAodGFnTmFtZSA9PSBIVE1MTmFtZXM6OmRpdigp
KQorICAgICAgICByZXR1cm4gbmV3IEhUTUxEaXZFbGVtZW50SW1wbChkb2NQdHIpOworICAgIGVs
c2UgaWYgKHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpoMSgpIHx8IHRhZ05hbWUgPT0gSFRNTE5hbWVz
OjpoMigpIHx8IHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpoMygpIHx8CisgICAgICAgICAgICAgdGFn
TmFtZSA9PSBIVE1MTmFtZXM6Omg0KCkgfHwgdGFnTmFtZSA9PSBIVE1MTmFtZXM6Omg1KCkgfHwg
dGFnTmFtZSA9PSBIVE1MTmFtZXM6Omg2KCkpCisgICAgICAgIHJldHVybiBuZXcgSFRNTEhlYWRp
bmdFbGVtZW50SW1wbChRdWFsaWZpZWROYW1lKG51bGxBdG9tLCB0YWdOYW1lLCBIVE1MTmFtZXM6
OnhodG1sTmFtZXNwYWNlVVJJKCkpLCBkb2NQdHIpOworICAgIGVsc2UgaWYgKHRhZ05hbWUgPT0g
SFRNTE5hbWVzOjpocigpKQorICAgICAgICByZXR1cm4gbmV3IEhUTUxIUkVsZW1lbnRJbXBsKGRv
Y1B0cik7CisgICAgZWxzZSBpZiAodGFnTmFtZSA9PSBIVE1MTmFtZXM6OnAoKSkKKyAgICAgICAg
cmV0dXJuIG5ldyBIVE1MUGFyYWdyYXBoRWxlbWVudEltcGwoZG9jUHRyKTsKKyAgICBlbHNlIGlm
ICh0YWdOYW1lID09IEhUTUxOYW1lczo6cHJlKCkgfHwgdGFnTmFtZSA9PSBIVE1MTmFtZXM6Onht
cCgpIHx8IHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpwbGFpbnRleHQoKSkKKyAgICAgICAgcmV0dXJu
IG5ldyBIVE1MUHJlRWxlbWVudEltcGwoUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgdGFnTmFtZSwg
SFRNTE5hbWVzOjp4aHRtbE5hbWVzcGFjZVVSSSgpKSwgZG9jUHRyKTsKKworLy8gZm9udCBzdHVm
ZgorICAgIGVsc2UgaWYgKHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpiYXNlZm9udCgpKQorICAgICAg
ICByZXR1cm4gbmV3IEhUTUxCYXNlRm9udEVsZW1lbnRJbXBsKGRvY1B0cik7CisgICAgZWxzZSBp
ZiAodGFnTmFtZSA9PSBIVE1MTmFtZXM6OmZvbnQoKSkKKyAgICAgICAgcmV0dXJuIG5ldyBIVE1M
Rm9udEVsZW1lbnRJbXBsKGRvY1B0cik7CisKKy8vIGlucy9kZWwKKyAgICBlbHNlIGlmICh0YWdO
YW1lID09IEhUTUxOYW1lczo6ZGVsKCkgfHwgdGFnTmFtZSA9PSBIVE1MTmFtZXM6OmlucygpKQor
ICAgICAgICByZXR1cm4gbmV3IEhUTUxNb2RFbGVtZW50SW1wbChRdWFsaWZpZWROYW1lKG51bGxB
dG9tLCB0YWdOYW1lLCBIVE1MTmFtZXM6OnhodG1sTmFtZXNwYWNlVVJJKCkpLCBkb2NQdHIpOwor
CisvLyBhbmNob3IKKyAgICBlbHNlIGlmICh0YWdOYW1lID09IEhUTUxOYW1lczo6YSgpKQorICAg
ICAgICByZXR1cm4gbmV3IEhUTUxBbmNob3JFbGVtZW50SW1wbChkb2NQdHIpOworCisvLyBpbWFn
ZXMKKyAgICBlbHNlIGlmICh0YWdOYW1lID09IEhUTUxOYW1lczo6aW1nKCkpCisgICAgICAgIHJl
dHVybiBuZXcgSFRNTEltYWdlRWxlbWVudEltcGwoZG9jUHRyLCBmb3JtKTsKKyAgICBlbHNlIGlm
ICh0YWdOYW1lID09IEhUTUxOYW1lczo6bWFwKCkpCisgICAgICAgIHJldHVybiBuZXcgSFRNTE1h
cEVsZW1lbnRJbXBsKGRvY1B0cik7CisgICAgZWxzZSBpZiAodGFnTmFtZSA9PSBIVE1MTmFtZXM6
OmFyZWEoKSkKKyAgICAgICAgcmV0dXJuIG5ldyBIVE1MQXJlYUVsZW1lbnRJbXBsKGRvY1B0cik7
CisgICAgZWxzZSBpZiAodGFnTmFtZSA9PSBIVE1MTmFtZXM6OmNhbnZhcygpKQorICAgICAgICBy
ZXR1cm4gbmV3IEhUTUxDYW52YXNFbGVtZW50SW1wbChkb2NQdHIpOworCisvLyBvYmplY3RzLCBh
cHBsZXRzIGFuZCBzY3JpcHRzCisgICAgZWxzZSBpZiAodGFnTmFtZSA9PSBIVE1MTmFtZXM6OmFw
cGxldCgpKQorICAgICAgICByZXR1cm4gbmV3IEhUTUxBcHBsZXRFbGVtZW50SW1wbChkb2NQdHIp
OworICAgIGVsc2UgaWYgKHRhZ05hbWUgPT0gSFRNTE5hbWVzOjplbWJlZCgpKQorICAgICAgICBy
ZXR1cm4gbmV3IEhUTUxFbWJlZEVsZW1lbnRJbXBsKGRvY1B0cik7CisgICAgZWxzZSBpZiAodGFn
TmFtZSA9PSBIVE1MTmFtZXM6Om9iamVjdCgpKQorICAgICAgICByZXR1cm4gbmV3IEhUTUxPYmpl
Y3RFbGVtZW50SW1wbChkb2NQdHIpOworICAgIGVsc2UgaWYgKHRhZ05hbWUgPT0gSFRNTE5hbWVz
OjpwYXJhbSgpKQorICAgICAgICByZXR1cm4gbmV3IEhUTUxQYXJhbUVsZW1lbnRJbXBsKGRvY1B0
cik7CisgICAgZWxzZSBpZiAodGFnTmFtZSA9PSBIVE1MTmFtZXM6OnNjcmlwdCgpKSB7CisgICAg
ICAgIEhUTUxTY3JpcHRFbGVtZW50SW1wbCogc2NyaXB0ID0gbmV3IEhUTUxTY3JpcHRFbGVtZW50
SW1wbChkb2NQdHIpOworICAgICAgICBzY3JpcHQtPnNldENyZWF0ZWRCeVBhcnNlcihjcmVhdGVk
QnlQYXJzZXIpOworICAgICAgICByZXR1cm4gc2NyaXB0OworICAgIH0KKworLy8gdGFibGVzCisg
ICAgZWxzZSBpZiAodGFnTmFtZSA9PSBIVE1MTmFtZXM6OnRhYmxlKCkpCisgICAgICAgIHJldHVy
biBuZXcgSFRNTFRhYmxlRWxlbWVudEltcGwoZG9jUHRyKTsKKyAgICBlbHNlIGlmICh0YWdOYW1l
ID09IEhUTUxOYW1lczo6Y2FwdGlvbigpKQorICAgICAgICByZXR1cm4gbmV3IEhUTUxUYWJsZUNh
cHRpb25FbGVtZW50SW1wbChkb2NQdHIpOworICAgIGVsc2UgaWYgKHRhZ05hbWUgPT0gSFRNTE5h
bWVzOjpjb2xncm91cCgpIHx8IHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpjb2woKSkKKyAgICAgICAg
cmV0dXJuIG5ldyBIVE1MVGFibGVDb2xFbGVtZW50SW1wbChRdWFsaWZpZWROYW1lKG51bGxBdG9t
LCB0YWdOYW1lLCBIVE1MTmFtZXM6OnhodG1sTmFtZXNwYWNlVVJJKCkpLCBkb2NQdHIpOworICAg
IGVsc2UgaWYgKHRhZ05hbWUgPT0gSFRNTE5hbWVzOjp0cigpKQorICAgICAgICByZXR1cm4gbmV3
IEhUTUxUYWJsZVJvd0VsZW1lbnRJbXBsKGRvY1B0cik7CisgICAgZWxzZSBpZiAodGFnTmFtZSA9
PSBIVE1MTmFtZXM6OnRkKCkgfHwgdGFnTmFtZSA9PSBIVE1MTmFtZXM6OnRoKCkpCisgICAgICAg
IHJldHVybiBuZXcgSFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsKFF1YWxpZmllZE5hbWUobnVsbEF0
b20sIHRhZ05hbWUsIEhUTUxOYW1lczo6eGh0bWxOYW1lc3BhY2VVUkkoKSksIGRvY1B0cik7Cisg
ICAgZWxzZSBpZiAodGFnTmFtZSA9PSBIVE1MTmFtZXM6OnRoZWFkKCkgfHwgdGFnTmFtZSA9PSBI
VE1MTmFtZXM6OnRib2R5KCkgfHwgdGFnTmFtZSA9PSBIVE1MTmFtZXM6OnRmb290KCkpCisgICAg
ICAgIHJldHVybiBuZXcgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsKFF1YWxpZmllZE5hbWUo
bnVsbEF0b20sIHRhZ05hbWUsIEhUTUxOYW1lczo6eGh0bWxOYW1lc3BhY2VVUkkoKSksIGRvY1B0
ciwgZmFsc2UpOworCisvLyBpbmxpbmUgZWxlbWVudHMKKyAgICBlbHNlIGlmICh0YWdOYW1lID09
IEhUTUxOYW1lczo6YnIoKSkKKyAgICAgICAgcmV0dXJuIG5ldyBIVE1MQlJFbGVtZW50SW1wbChk
b2NQdHIpOworICAgIGVsc2UgaWYgKHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpxKCkpCisgICAgICAg
IHJldHVybiBuZXcgSFRNTFF1b3RlRWxlbWVudEltcGwoZG9jUHRyKTsKKyAgICAgICAgCisvLyBt
YXJxdWVlCisgICAgZWxzZSBpZiAodGFnTmFtZSA9PSBIVE1MTmFtZXM6Om1hcnF1ZWUoKSkKKyAg
ICAgICAgcmV0dXJuIG5ldyBIVE1MTWFycXVlZUVsZW1lbnRJbXBsKGRvY1B0cik7CisgICAKKy8v
IGVsZW1lbnRzIHdpdGggbm8gc3BlY2lhbCByZXByZXNlbnRhdGlvbiBpbiB0aGUgRE9NCisgICAg
cmV0dXJuIG5ldyBIVE1MRWxlbWVudEltcGwoUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgdGFnTmFt
ZSwgSFRNTE5hbWVzOjp4aHRtbE5hbWVzcGFjZVVSSSgpKSwgZG9jUHRyKTsKKworfQorCit9CisK
SW5kZXg6IGtodG1sL2h0bWwvaHRtbGZhY3RvcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiBraHRt
bC9odG1sL2h0bWxmYWN0b3J5LmgKZGlmZiAtTiBraHRtbC9odG1sL2h0bWxmYWN0b3J5LmgKLS0t
IC9kZXYvbnVsbAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBraHRtbC9odG1sL2h0bWxm
YWN0b3J5LmgJMjMgSnVuIDIwMDUgMjE6NTI6NDMgLTAwMDAKQEAgLTAsMCArMSw0NiBAQAorLyoK
KyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBIVE1MIERPTSBpbXBsZW1lbnRhdGlvbiBmb3Ig
S0RFLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBBcHBsZSBDb21wdXRlciwgSW5jLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1
aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqLworI2lmbmRl
ZiBIVE1MRUxFTUVOVEZBQ1RPUllfSAorI2RlZmluZSBIVE1MRUxFTUVOVEZBQ1RPUllfSAorCitu
YW1lc3BhY2UgRE9NCit7CisKK2NsYXNzIEVsZW1lbnRJbXBsOworY2xhc3MgRG9jdW1lbnRJbXBs
OworY2xhc3MgSFRNTEVsZW1lbnRJbXBsOworY2xhc3MgSFRNTEZvcm1FbGVtZW50SW1wbDsKK2Ns
YXNzIFF1YWxpZmllZE5hbWU7CitjbGFzcyBBdG9taWNTdHJpbmc7CisKKy8vIFRoZSBpZGVhIGJl
aGluZCB0aGlzIGNsYXNzIGlzIHRoYXQgdGhlcmUgd2lsbCBldmVudHVhbGx5IGJlIGEgbWFwcGlu
ZyBmcm9tIG5hbWVzcGFjZSBVUklzIHRvIEVsZW1lbnRGYWN0b3JpZXMgdGhhdCBjYW4gZGlzcGVu
c2UKKy8vIGVsZW1lbnRzLiAgSW4gYSBjb21wb3VuZCBkb2N1bWVudCB3b3JsZCwgdGhlIGdlbmVy
aWMgY3JlYXRlRWxlbWVudCBmdW5jdGlvbiAod2lsbCBlbmQgdXAgYmVpbmcgdmlydHVhbCkgd2ls
bCBiZSBjYWxsZWQuCitjbGFzcyBIVE1MRWxlbWVudEZhY3RvcnkKK3sKK3B1YmxpYzoKKyAgICBF
bGVtZW50SW1wbCogY3JlYXRlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiBxTmFtZSwgRG9j
dW1lbnRJbXBsKiBkb2MsIGJvb2wgY3JlYXRlZEJ5UGFyc2VyID0gdHJ1ZSk7CisgICAgc3RhdGlj
IEhUTUxFbGVtZW50SW1wbCogY3JlYXRlSFRNTEVsZW1lbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0
YWdOYW1lLCBEb2N1bWVudEltcGwqIGRvYywgSFRNTEZvcm1FbGVtZW50SW1wbCogZm9ybSA9IDAs
IGJvb2wgY3JlYXRlZEJ5UGFyc2VyID0gdHJ1ZSk7Cit9OworCit9CisKKyNlbmRpZgpJbmRleDog
a2h0bWwvaHRtbC9odG1sbmFtZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9X
ZWJDb3JlL2todG1sL2h0bWwvaHRtbG5hbWVzLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4y
CmRpZmYgLXUgLXAgLXIxLjIga2h0bWwvaHRtbC9odG1sbmFtZXMuY3BwCi0tLSBraHRtbC9odG1s
L2h0bWxuYW1lcy5jcHAJMTYgSnVuIDIwMDUgMjA6MzM6NTcgLTAwMDAJMS4yCisrKyBraHRtbC9o
dG1sL2h0bWxuYW1lcy5jcHAJMjMgSnVuIDIwMDUgMjE6NTI6NDMgLTAwMDAKQEAgLTM5LDYgKzM5
LDE4IEBAIGNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6YSgpCiAgICAgcmV0dXJuIGE7
CiB9CiAKK2NvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6YWJicigpCit7CisgICAgc3Rh
dGljIFF1YWxpZmllZE5hbWUgYWJicihudWxsQXRvbSwgImFiYnIiLCB4aHRtbE5hbWVzcGFjZVVS
SSgpKTsKKyAgICByZXR1cm4gYWJicjsKK30KKworY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5h
bWVzOjphY3JvbnltKCkKK3sKKyAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBhY3JvbnltKG51bGxB
dG9tLCAiYWNyb255bSIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOworICAgIHJldHVybiBhY3Jvbnlt
OworfQorCiBjb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OmFkZHJlc3MoKQogewogICAg
IHN0YXRpYyBRdWFsaWZpZWROYW1lIGFkZHJlc3MobnVsbEF0b20sICJhZGRyZXNzIiwgeGh0bWxO
YW1lc3BhY2VVUkkoKSk7CkBAIC0xMjMsNiArMTM1LDEyIEBAIGNvbnN0IFF1YWxpZmllZE5hbWUm
IEhUTUxOYW1lczo6Y2VudGVyKCkKICAgICByZXR1cm4gY2VudGVyOwogfQogCitjb25zdCBRdWFs
aWZpZWROYW1lJiBIVE1MTmFtZXM6OmNpdGUoKQoreworICAgIHN0YXRpYyBRdWFsaWZpZWROYW1l
IGNpdGUobnVsbEF0b20sICJjaXRlIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7CisgICAgcmV0dXJu
IGNpdGU7Cit9CisKIGNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6Y29kZSgpCiB7CiAg
ICAgc3RhdGljIFF1YWxpZmllZE5hbWUgY29kZShudWxsQXRvbSwgImNvZGUiLCB4aHRtbE5hbWVz
cGFjZVVSSSgpKTsKQEAgLTMzMyw2ICszNTEsMTIgQEAgY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRN
TE5hbWVzOjpsYWJlbCgpCiAgICAgcmV0dXJuIGxhYmVsOwogfQogCitjb25zdCBRdWFsaWZpZWRO
YW1lJiBIVE1MTmFtZXM6OmxheWVyKCkKK3sKKyAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBsYXll
cihudWxsQXRvbSwgImxheWVyIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7CisgICAgcmV0dXJuIGxh
eWVyOworfQorCiBjb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OmxlZ2VuZCgpCiB7CiAg
ICAgc3RhdGljIFF1YWxpZmllZE5hbWUgbGVnZW5kKG51bGxBdG9tLCAibGVnZW5kIiwgeGh0bWxO
YW1lc3BhY2VVUkkoKSk7CkBAIC0zNzUsNiArMzk5LDEyIEBAIGNvbnN0IFF1YWxpZmllZE5hbWUm
IEhUTUxOYW1lczo6bWV0YSgpCiAgICAgcmV0dXJuIG1ldGE7CiB9CiAKK2NvbnN0IFF1YWxpZmll
ZE5hbWUmIEhUTUxOYW1lczo6bm9icigpCit7CisgICAgc3RhdGljIFF1YWxpZmllZE5hbWUgbm9i
cihudWxsQXRvbSwgIm5vYnIiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKKyAgICByZXR1cm4gbm9i
cjsKK30KKwogY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpub2VtYmVkKCkKIHsKICAg
ICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBub2VtYmVkKG51bGxBdG9tLCAibm9lbWJlZCIsIHhodG1s
TmFtZXNwYWNlVVJJKCkpOwpAQCAtMzg3LDYgKzQxNywxMiBAQCBjb25zdCBRdWFsaWZpZWROYW1l
JiBIVE1MTmFtZXM6Om5vZnJhbWVzCiAgICAgcmV0dXJuIG5vZnJhbWVzOwogfQogCitjb25zdCBR
dWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6Om5vbGF5ZXIoKQoreworICAgIHN0YXRpYyBRdWFsaWZp
ZWROYW1lIG5vZnJhbWVzKG51bGxBdG9tLCAibm9mcmFtZXMiLCB4aHRtbE5hbWVzcGFjZVVSSSgp
KTsKKyAgICByZXR1cm4gbm9mcmFtZXM7Cit9CisKIGNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxO
YW1lczo6bm9zY3JpcHQoKQogewogICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIG5vc2NyaXB0KG51
bGxBdG9tLCAibm9zY3JpcHQiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKQEAgLTQyMyw2ICs0NTks
MTIgQEAgY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpwYXJhbSgpCiAgICAgcmV0dXJu
IHBhcmFtOwogfQogCitjb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OnBsYWludGV4dCgp
Cit7CisgICAgc3RhdGljIFF1YWxpZmllZE5hbWUgcGxhaW50ZXh0KG51bGxBdG9tLCAicGxhaW50
ZXh0IiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7CisgICAgcmV0dXJuIHBsYWludGV4dDsKK30KKwog
Y29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpwcmUoKQogewogICAgIHN0YXRpYyBRdWFs
aWZpZWROYW1lIHByZShudWxsQXRvbSwgInByZSIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwpAQCAt
NDY1LDYgKzUwNywxMiBAQCBjb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OnNtYWxsKCkK
ICAgICByZXR1cm4gc21hbGw7CiB9CiAKK2NvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6
c3BhbigpCit7CisgICAgc3RhdGljIFF1YWxpZmllZE5hbWUgc3BhbihudWxsQXRvbSwgInNwYW4i
LCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKKyAgICByZXR1cm4gc3BhbjsKK30KKwogY29uc3QgUXVh
bGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpzdHJpa2UoKQogewogICAgIHN0YXRpYyBRdWFsaWZpZWRO
YW1lIHN0cmlrZShudWxsQXRvbSwgInN0cmlrZSIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwpAQCAt
NDgzLDYgKzUzMSwxOCBAQCBjb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OnN0eWxlKCkK
ICAgICByZXR1cm4gc3R5bGU7CiB9CiAKK2NvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6
c3ViKCkKK3sKKyAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBzdWIobnVsbEF0b20sICJzdWIiLCB4
aHRtbE5hbWVzcGFjZVVSSSgpKTsKKyAgICByZXR1cm4gc3RyaWtlOworfQorCitjb25zdCBRdWFs
aWZpZWROYW1lJiBIVE1MTmFtZXM6OnN1cCgpCit7CisgICAgc3RhdGljIFF1YWxpZmllZE5hbWUg
c3VwKG51bGxBdG9tLCAic3VwIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7CisgICAgcmV0dXJuIHN1
cDsKK30KKwogY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjp0YWJsZSgpCiB7CiAgICAg
c3RhdGljIFF1YWxpZmllZE5hbWUgdGFibGUobnVsbEF0b20sICJ0YWJsZSIsIHhodG1sTmFtZXNw
YWNlVVJJKCkpOwpAQCAtNTYxLDYgKzYyMSwxMiBAQCBjb25zdCBRdWFsaWZpZWROYW1lJiBIVE1M
TmFtZXM6OnZhcigpCiAgICAgcmV0dXJuIHZhcjsKIH0KIAorY29uc3QgUXVhbGlmaWVkTmFtZSYg
SFRNTE5hbWVzOjp3YnIoKQoreworICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIHdicihudWxsQXRv
bSwgIndiciIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOworICAgIHJldHVybiB3YnI7Cit9CisKIGNv
bnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6eG1wKCkKIHsKICAgICBzdGF0aWMgUXVhbGlm
aWVkTmFtZSB4bXAobnVsbEF0b20sICJ4bXAiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKSW5kZXg6
IGtodG1sL2h0bWwvaHRtbG5hbWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dl
YkNvcmUva2h0bWwvaHRtbC9odG1sbmFtZXMuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yCmRp
ZmYgLXUgLXAgLXIxLjIga2h0bWwvaHRtbC9odG1sbmFtZXMuaAotLS0ga2h0bWwvaHRtbC9odG1s
bmFtZXMuaAkxNiBKdW4gMjAwNSAyMDozMzo1NyAtMDAwMAkxLjIKKysrIGtodG1sL2h0bWwvaHRt
bG5hbWVzLmgJMjMgSnVuIDIwMDUgMjE6NTI6NDQgLTAwMDAKQEAgLTIyLDcgKzIyLDcgQEAKICNp
Zm5kZWYgSFRNTE5BTUVTX0gKICNkZWZpbmUgSFRNTE5BTUVTX0gKIAotI2luY2x1ZGUgInhtbC9k
b21fZWxlbWVudGltcGwuaCIKKyNpbmNsdWRlICJkb21fcW5hbWUuaCIKIAogbmFtZXNwYWNlIERP
TQogewpAQCAtMzcsNiArMzcsOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgLy8gRnVsbCB0YWcgbmFt
ZXMuCiAgICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGEoKTsKKyAgICBzdGF0aWMgY29u
c3QgUXVhbGlmaWVkTmFtZSYgYWJicigpOworICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1l
JiBhY3JvbnltKCk7CiAgICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGFkZHJlc3MoKTsK
ICAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXBwbGV0KCk7CiAgICAgc3RhdGljIGNv
bnN0IFF1YWxpZmllZE5hbWUmIGFyZWEoKTsKQEAgLTUxLDYgKzUzLDcgQEAgcHVibGljOgogICAg
IHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBjYW52YXMoKTsKICAgICBzdGF0aWMgY29uc3Qg
UXVhbGlmaWVkTmFtZSYgY2FwdGlvbigpOwogICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1l
JiBjZW50ZXIoKTsKKyAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgY2l0ZSgpOwogICAg
IHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBjb2RlKCk7CiAgICAgc3RhdGljIGNvbnN0IFF1
YWxpZmllZE5hbWUmIGNvbCgpOwogICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBjb2xn
cm91cCgpOwpAQCAtODYsNiArODksNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IFF1YWxp
ZmllZE5hbWUmIGtiZCgpOwogICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBrZXlnZW4o
KTsKICAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgbGFiZWwoKTsKKyAgICBzdGF0aWMg
Y29uc3QgUXVhbGlmaWVkTmFtZSYgbGF5ZXIoKTsKICAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVk
TmFtZSYgbGVnZW5kKCk7CiAgICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGxpKCk7CiAg
ICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGxpbmsoKTsKQEAgLTkzLDggKzk3LDEwIEBA
IHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgbWFycXVlZSgpOwogICAg
IHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBtZW51KCk7CiAgICAgc3RhdGljIGNvbnN0IFF1
YWxpZmllZE5hbWUmIG1ldGEoKTsKKyAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgbm9i
cigpOwogICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBub2VtYmVkKCk7CiAgICAgc3Rh
dGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIG5vZnJhbWVzKCk7CisgICAgc3RhdGljIGNvbnN0IFF1
YWxpZmllZE5hbWUmIG5vbGF5ZXIoKTsKICAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYg
bm9zY3JpcHQoKTsKICAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgb2JqZWN0KCk7CiAg
ICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIG9sKCk7CkBAIC0xMDIsNiArMTA4LDcgQEAg
cHVibGljOgogICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBvcHRpb24oKTsKICAgICBz
dGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgcCgpOwogICAgIHN0YXRpYyBjb25zdCBRdWFsaWZp
ZWROYW1lJiBwYXJhbSgpOworICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBwbGFpbnRl
eHQoKTsKICAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgcHJlKCk7CiAgICAgc3RhdGlj
IGNvbnN0IFF1YWxpZmllZE5hbWUmIHEoKTsKICAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFt
ZSYgcygpOwpAQCAtMTA5LDkgKzExNiwxMiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IFF1
YWxpZmllZE5hbWUmIHNjcmlwdCgpOwogICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBz
ZWxlY3QoKTsKICAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgc21hbGwoKTsKKyAgICBz
dGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgc3BhbigpOwogICAgIHN0YXRpYyBjb25zdCBRdWFs
aWZpZWROYW1lJiBzdHJpa2UoKTsKICAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgc3Ry
b25nKCk7CiAgICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIHN0eWxlKCk7CisgICAgc3Rh
dGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIHN1YigpOworICAgIHN0YXRpYyBjb25zdCBRdWFsaWZp
ZWROYW1lJiBzdXAoKTsKICAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFibGUoKTsK
ICAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgdGJvZHkoKTsKICAgICBzdGF0aWMgY29u
c3QgUXVhbGlmaWVkTmFtZSYgdGQoKTsKQEAgLTEyNSw2ICsxMzUsNyBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIHUoKTsKICAgICBzdGF0aWMgY29uc3QgUXVhbGlm
aWVkTmFtZSYgdWwoKTsKICAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgdmFyKCk7Cisg
ICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIHdicigpOwogICAgIHN0YXRpYyBjb25zdCBR
dWFsaWZpZWROYW1lJiB4bXAoKTsKIAogICAgIC8vIEF0dHJpYnV0ZSBuYW1lcy4KSW5kZXg6IGto
dG1sL2h0bWwvaHRtbHBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dl
YkNvcmUva2h0bWwvaHRtbC9odG1scGFyc2VyLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS45
NgpkaWZmIC11IC1wIC1yMS45NiBraHRtbC9odG1sL2h0bWxwYXJzZXIuY3BwCi0tLSBraHRtbC9o
dG1sL2h0bWxwYXJzZXIuY3BwCTExIE1heSAyMDA1IDAwOjU4OjI4IC0wMDAwCTEuOTYKKysrIGto
dG1sL2h0bWwvaHRtbHBhcnNlci5jcHAJMjMgSnVuIDIwMDUgMjE6NTI6NDUgLTAwMDAKQEAgLTQ0
LDYgKzQ0LDcgQEAKICNpbmNsdWRlICJodG1sL2h0bWxfbWlzY2ltcGwuaCIKICNpbmNsdWRlICJo
dG1sL2h0bWxfdGFibGVpbXBsLmgiCiAjaW5jbHVkZSAiaHRtbC9odG1sX29iamVjdGltcGwuaCIK
KyNpbmNsdWRlICJodG1sZmFjdG9yeS5oIgogI2luY2x1ZGUgInhtbC9kb21fdGV4dGltcGwuaCIK
ICNpbmNsdWRlICJ4bWwvZG9tX25vZGVpbXBsLmgiCiAjaW5jbHVkZSAibWlzYy9odG1saGFzaGVz
LmgiCkBAIC02OSwyNCArNzAsMjQgQEAgdXNpbmcgbmFtZXNwYWNlIGtodG1sOwogY2xhc3MgSFRN
TFN0YWNrRWxlbQogewogcHVibGljOgotICAgIEhUTUxTdGFja0VsZW0oIGludCBfaWQsCi0gICAg
ICAgICAgICAgICAgICAgaW50IF9sZXZlbCwKLSAgICAgICAgICAgICAgICAgICBET006Ok5vZGVJ
bXBsICpfbm9kZSwKLSAgICAgICAgICAgICAgICAgICBIVE1MU3RhY2tFbGVtICogX25leHQKKyAg
ICBIVE1MU3RhY2tFbGVtKGNvbnN0IEF0b21pY1N0cmluZyYgX3RhZ05hbWUsCisgICAgICAgICAg
ICAgICAgICBpbnQgX2xldmVsLAorICAgICAgICAgICAgICAgICAgRE9NOjpOb2RlSW1wbCAqX25v
ZGUsCisgICAgICAgICAgICAgICAgICBIVE1MU3RhY2tFbGVtICogX25leHQKICAgICAgICAgKQog
ICAgICAgICA6Ci0gICAgICAgIGlkKF9pZCksCisgICAgICAgIHRhZ05hbWUoX3RhZ05hbWUpLAog
ICAgICAgICBsZXZlbChfbGV2ZWwpLAogICAgICAgICBzdHJheVRhYmxlQ29udGVudChmYWxzZSks
CiAgICAgICAgIG5vZGUoX25vZGUpLAogICAgICAgICBuZXh0KF9uZXh0KQogICAgICAgICB7IH0K
IAotICAgIGludCAgICAgICBpZDsKLSAgICBpbnQgICAgICAgbGV2ZWw7Ci0gICAgYm9vbCAgICAg
IHN0cmF5VGFibGVDb250ZW50OwotICAgIE5vZGVJbXBsICpub2RlOwotICAgIEhUTUxTdGFja0Vs
ZW0gKm5leHQ7CisgICAgQXRvbWljU3RyaW5nIHRhZ05hbWU7CisgICAgaW50IGxldmVsOworICAg
IGJvb2wgc3RyYXlUYWJsZUNvbnRlbnQ7CisgICAgTm9kZUltcGwqIG5vZGU7CisgICAgSFRNTFN0
YWNrRWxlbSogbmV4dDsKIH07CiAKIC8qKgpAQCAtMTEyLDE0ICsxMTMsOSBAQCBwdWJsaWM6CiAg
KiAgICBlbGVtZW50IG9yIGlnbm9yZSB0aGUgdGFnLgogICoKICAqLwotS0hUTUxQYXJzZXI6OktI
VE1MUGFyc2VyKEtIVE1MVmlldyAqX3BhcmVudCwgRG9jdW1lbnRQdHIgKmRvYywgYm9vbCBpbmNs
dWRlc0NvbW1lbnRzKSAKK0hUTUxQYXJzZXI6OkhUTUxQYXJzZXIoS0hUTUxWaWV3ICpfcGFyZW50
LCBEb2N1bWVudFB0ciAqZG9jLCBib29sIGluY2x1ZGVzQ29tbWVudHMpIAogICAgIDogY3VycmVu
dCgwKSwgY3VycmVudElzUmVmZXJlbmNlZChmYWxzZSksIGluY2x1ZGVzQ29tbWVudHNJbkRPTShp
bmNsdWRlc0NvbW1lbnRzKQogewotICAgIC8va2REZWJ1ZyggNjAzNSApIDw8ICJwYXJzZXIgY29u
c3RydWN0b3IiIDw8IGVuZGw7Ci0jaWYgU1BFRURfREVCVUcgPiAwCi0gICAgcXQuc3RhcnQoKTsK
LSNlbmRpZgotCiAgICAgSFRNTFdpZGdldCAgICA9IF9wYXJlbnQ7CiAgICAgZG9jdW1lbnQgICAg
ICA9IGRvYzsKICAgICBkb2N1bWVudC0+cmVmKCk7CkBAIC0xMjksNyArMTI1LDcgQEAgS0hUTUxQ
YXJzZXI6OktIVE1MUGFyc2VyKEtIVE1MVmlldyAqX3BhcgogICAgIHJlc2V0KCk7CiB9CiAKLUtI
VE1MUGFyc2VyOjpLSFRNTFBhcnNlcihET006OkRvY3VtZW50RnJhZ21lbnRJbXBsICppLCBEb2N1
bWVudFB0ciAqZG9jLCBib29sIGluY2x1ZGVzQ29tbWVudHMpCitIVE1MUGFyc2VyOjpIVE1MUGFy
c2VyKERPTTo6RG9jdW1lbnRGcmFnbWVudEltcGwgKmksIERvY3VtZW50UHRyICpkb2MsIGJvb2wg
aW5jbHVkZXNDb21tZW50cykKICAgICA6IGN1cnJlbnQoMCksIGN1cnJlbnRJc1JlZmVyZW5jZWQo
ZmFsc2UpLCBpbmNsdWRlc0NvbW1lbnRzSW5ET00oaW5jbHVkZXNDb21tZW50cykKIHsKICAgICBI
VE1MV2lkZ2V0ID0gMDsKQEAgLTE0MywxMiArMTM5LDggQEAgS0hUTUxQYXJzZXI6OktIVE1MUGFy
c2VyKERPTTo6RG9jdW1lbnRGcgogICAgIGluQm9keSA9IHRydWU7CiB9CiAKLUtIVE1MUGFyc2Vy
Ojp+S0hUTUxQYXJzZXIoKQorSFRNTFBhcnNlcjo6fkhUTUxQYXJzZXIoKQogewotI2lmIFNQRUVE
X0RFQlVHID4gMAotICAgIGtkRGVidWcoICkgPDwgIlRJTUU6IHBhcnNpbmcgdGltZSB3YXMgPSAi
IDw8IHF0LmVsYXBzZWQoKSA8PCBlbmRsOwotI2VuZGlmCi0KICAgICBmcmVlQmxvY2soKTsKIAog
ICAgIHNldEN1cnJlbnQoMCk7CkBAIC0xNTksMTUgKzE1MSwxMiBAQCBLSFRNTFBhcnNlcjo6fktI
VE1MUGFyc2VyKCkKICAgICAgICAgaXNpbmRleC0+ZGVyZWYoKTsKIH0KIAotdm9pZCBLSFRNTFBh
cnNlcjo6cmVzZXQoKQordm9pZCBIVE1MUGFyc2VyOjpyZXNldCgpCiB7CiAgICAgc2V0Q3VycmVu
dChkb2MoKSk7CiAKICAgICBmcmVlQmxvY2soKTsKIAotICAgIC8vIGJlZm9yZSBwYXJzaW5nLCBu
byB0YWdzIGFyZSBmb3JiaWRkZW4KLSAgICBtZW1zZXQoZm9yYmlkZGVuVGFnLCAwLCBzaXplb2Yo
Zm9yYmlkZGVuVGFnKSk7Ci0KICAgICBpbkJvZHkgPSBmYWxzZTsKICAgICBoYXZlRnJhbWVTZXQg
PSBmYWxzZTsKICAgICBoYXZlQ29udGVudCA9IGZhbHNlOwpAQCAtMTgwLDEwICsxNjksMTAgQEAg
dm9pZCBLSFRNTFBhcnNlcjo6cmVzZXQoKQogICAgIGVuZCA9IGZhbHNlOwogICAgIGlzaW5kZXgg
PSAwOwogICAgIAotICAgIGRpc2NhcmRfdW50aWwgPSAwOworICAgIGRpc2NhcmRfdW50aWwgPSBu
dWxsQXRvbTsKIH0KIAotdm9pZCBLSFRNTFBhcnNlcjo6c2V0Q3VycmVudChET006Ok5vZGVJbXBs
ICpuZXdDdXJyZW50KSAKK3ZvaWQgSFRNTFBhcnNlcjo6c2V0Q3VycmVudChET006Ok5vZGVJbXBs
ICpuZXdDdXJyZW50KSAKIHsKICAgICBib29sIG5ld0N1cnJlbnRJc1JlZmVyZW5jZWQgPSBuZXdD
dXJyZW50ICYmIG5ld0N1cnJlbnQgIT0gZG9jKCk7CiAgICAgaWYgKG5ld0N1cnJlbnRJc1JlZmVy
ZW5jZWQpIApAQCAtMTk0LDE0NCArMTgzLDEwOCBAQCB2b2lkIEtIVE1MUGFyc2VyOjpzZXRDdXJy
ZW50KERPTTo6Tm9kZUltCiAgICAgY3VycmVudElzUmVmZXJlbmNlZCA9IG5ld0N1cnJlbnRJc1Jl
ZmVyZW5jZWQ7CiB9CiAKLXZvaWQgS0hUTUxQYXJzZXI6OnBhcnNlVG9rZW4oVG9rZW4gKnQpCit2
b2lkIEhUTUxQYXJzZXI6OnBhcnNlVG9rZW4oVG9rZW4gKnQpCiB7Ci0gICAgaWYoZGlzY2FyZF91
bnRpbCkgewotICAgICAgICBpZih0LT5pZCA9PSBkaXNjYXJkX3VudGlsKQotICAgICAgICAgICAg
ZGlzY2FyZF91bnRpbCA9IDA7CisgICAgaWYgKCFkaXNjYXJkX3VudGlsLmlzTnVsbCgpKSB7Cisg
ICAgICAgIGlmICh0LT50YWdOYW1lID09IGRpc2NhcmRfdW50aWwgJiYgIXQtPmJlZ2luVGFnKQor
ICAgICAgICAgICAgZGlzY2FyZF91bnRpbCA9IG51bGxBdG9tOwogCiAgICAgICAgIC8vIGRvIG5v
dCBza2lwIDwvaWZyYW1lPgotICAgICAgICBpZiAoIGRpc2NhcmRfdW50aWwgfHwgY3VycmVudC0+
aWQoKSArIElEX0NMT1NFX1RBRyAhPSB0LT5pZCApCisgICAgICAgIGlmICghZGlzY2FyZF91bnRp
bC5pc051bGwoKSB8fCAoY3VycmVudC0+bG9jYWxOYW1lKCkgIT0gdC0+dGFnTmFtZSkpCiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0jaWZkZWYgUEFSU0VSX0RFQlVHCi0gICAga2REZWJ1
ZyggNjAzNSApIDw8ICJcblxuPT0+IHBhcnNlcjogcHJvY2Vzc2luZyB0b2tlbiAiIDw8IGdldFRh
Z05hbWUodC0+aWQpLnN0cmluZygpIDw8ICIoIiA8PCB0LT5pZCA8PCAiKSIKLSAgICAgICAgICAg
ICAgICAgICAgPDwgIiBjdXJyZW50ID0gIiA8PCBnZXRUYWdOYW1lKGN1cnJlbnQtPmlkKCkpLnN0
cmluZygpIDw8ICIoIiA8PCBjdXJyZW50LT5pZCgpIDw8ICIpIiA8PCBlbmRsOwotICAgIGtkRGVi
dWcoNjAzNSkgPDwgIiBpbkJvZHk9IiA8PCBpbkJvZHkgPDwgIiBoYXZlRnJhbWVTZXQ9IiA8PCBo
YXZlRnJhbWVTZXQgPDwgZW5kbDsKLSNlbmRpZgotCi0gICAgLy8gaG9seSBzaGl0LiBhcHBhcmVu
dGx5IHNvbWUgc2l0ZXMgdXNlIDwvYnI+IGluc3RlYWQgb2YgPGJyPgotICAgIC8vIGJlIGNvbXBh
dGlibGUgd2l0aCBJRSBhbmQgTlMKLSAgICBpZiAodC0+aWQgPT0gSURfQlIgKyBJRF9DTE9TRV9U
QUcgJiYgZG9jKCktPmluQ29tcGF0TW9kZSgpKQotICAgICAgICB0LT5pZCA9IElEX0JSOworICAg
IC8vIEFwcGFyZW50bHkgc29tZSBzaXRlcyB1c2UgPC9icj4gaW5zdGVhZCBvZiA8YnI+LiAgQmUg
Y29tcGF0aWJsZSB3aXRoIElFIGFuZCBGaXJlZm94IGFuZCB0cmVhdCB0aGlzIGxpa2UgPGJyPi4K
KyAgICBpZiAodC0+aXNDbG9zZVRhZyhIVE1MTmFtZXM6OmJyKCkpICYmIGRvYygpLT5pbkNvbXBh
dE1vZGUoKSkKKyAgICAgICAgdC0+YmVnaW5UYWcgPSB0cnVlOwogCi0gICAgaWYgKHQtPmlkID4g
SURfQ0xPU0VfVEFHKQotICAgIHsKKyAgICBpZiAoIXQtPmJlZ2luVGFnKSB7CiAgICAgICAgIHBy
b2Nlc3NDbG9zZVRhZyh0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIC8vIGlnbm9y
ZSBzcGFjZXMsIGlmIHdlJ3JlIG5vdCBpbnNpZGUgYSBwYXJhZ3JhcGggb3Igb3RoZXIgaW5saW5l
IGNvZGUKLSAgICBpZiggdC0+aWQgPT0gSURfVEVYVCAmJiB0LT50ZXh0ICkgewotICAgICAgICBp
ZihpbkJvZHkgJiYgIXNraXBNb2RlKCkgJiYgY3VycmVudC0+aWQoKSAhPSBJRF9TVFlMRSAKLSAg
ICAgICAgICAgICYmIGN1cnJlbnQtPmlkKCkgIT0gSURfVElUTEUgJiYgY3VycmVudC0+aWQoKSAh
PSBJRF9TQ1JJUFQgJiYKLSAgICAgICAgICAgICF0LT50ZXh0LT5jb250YWluc09ubHlXaGl0ZXNw
YWNlKCkpIAorICAgIGlmICh0LT50YWdOYW1lID09IHRleHRBdG9tICYmIHQtPnRleHQpIHsKKyAg
ICAgICAgaWYgKGluQm9keSAmJiAhc2tpcE1vZGUoKSAmJiBjdXJyZW50LT5sb2NhbE5hbWUoKSAh
PSBIVE1MTmFtZXM6OnN0eWxlKCkgJiYgY3VycmVudC0+bG9jYWxOYW1lKCkgIT0gSFRNTE5hbWVz
Ojp0aXRsZSgpICYmIAorICAgICAgICAgICAgY3VycmVudC0+bG9jYWxOYW1lKCkgIT0gSFRNTE5h
bWVzOjpzY3JpcHQoKSAmJiAhdC0+dGV4dC0+Y29udGFpbnNPbmx5V2hpdGVzcGFjZSgpKSAKICAg
ICAgICAgICAgIGhhdmVDb250ZW50ID0gdHJ1ZTsKLSNpZmRlZiBQQVJTRVJfREVCVUcKLSAgICAg
ICAga2REZWJ1Zyg2MDM1KSA8PCAibGVuZ3RoPSI8PCB0LT50ZXh0LT5sIDw8ICIgdGV4dD0nIiA8
PCBRQ29uc3RTdHJpbmcodC0+dGV4dC0+cywgdC0+dGV4dC0+bCkuc3RyaW5nKCkgPDwgIiciIDw8
IGVuZGw7Ci0jZW5kaWYKICAgICB9CiAKLSAgICBOb2RlSW1wbCAqbiA9IGdldEVsZW1lbnQodCk7
CisgICAgTm9kZUltcGwgKm4gPSBnZXROb2RlKHQpOwogICAgIC8vIGp1c3QgdG8gYmUgc3VyZSwg
YW5kIHRvIGNhdGNoIGN1cnJlbnRseSB1bmltcGxlbWVudGVkIHN0dWZmCi0gICAgaWYoIW4pCisg
ICAgaWYgKCFuKQogICAgICAgICByZXR1cm47CiAKICAgICBTaGFyZWRQdHI8Tm9kZUltcGw+IHBy
b3RlY3ROb2RlKG4pOwogCiAgICAgLy8gc2V0IGF0dHJpYnV0ZXMKLSAgICBpZihuLT5pc0VsZW1l
bnROb2RlKCkpCi0gICAgewotICAgICAgICBFbGVtZW50SW1wbCAqZSA9IHN0YXRpY19jYXN0PEVs
ZW1lbnRJbXBsICo+KG4pOworICAgIGlmIChuLT5pc0hUTUxFbGVtZW50KCkpIHsKKyAgICAgICAg
SFRNTEVsZW1lbnRJbXBsICplID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsKj4obik7CiAg
ICAgICAgIGUtPnNldEF0dHJpYnV0ZU1hcCh0LT5hdHRycyk7CiAKICAgICAgICAgLy8gdGFrZSBj
YXJlIG9mIG9wdGlvbmFsIGNsb3NlIHRhZ3MKLSAgICAgICAgaWYoZW5kVGFnUmVxdWlyZW1lbnQo
ZS0+aWQoKSkgPT0gRE9NOjpPUFRJT05BTCkKLSAgICAgICAgICAgIHBvcEJsb2NrKHQtPmlkKTsK
KyAgICAgICAgaWYgKGUtPmVuZFRhZ1JlcXVpcmVtZW50KCkgPT0gVGFnU3RhdHVzT3B0aW9uYWwp
CisgICAgICAgICAgICBwb3BCbG9jayh0LT50YWdOYW1lKTsKICAgICAgICAgICAgIAotICAgICAg
ICBpZiAoaXNIZWFkZXJUYWcodC0+aWQpKQorICAgICAgICBpZiAoaXNIZWFkZXJUYWcodC0+dGFn
TmFtZSkpCiAgICAgICAgICAgICAvLyBEbyBub3QgYWxsb3cgdHdvIGhlYWRlciB0YWdzIHRvIGJl
IG5lc3RlZCBpZiB0aGUgaW50ZXJ2ZW5pbmcgdGFncyBhcmUgaW5saW5lcy4KICAgICAgICAgICAg
IHBvcE5lc3RlZEhlYWRlclRhZygpOwogICAgIH0KIAotICAgIC8vIGlmIHRoaXMgdGFnIGlzIGZv
cmJpZGRlbiBpbnNpZGUgdGhlIGN1cnJlbnQgY29udGV4dCwgcG9wCi0gICAgLy8gYmxvY2tzIHVu
dGlsIHdlIGFyZSBhbGxvd2VkIHRvIGFkZCBpdC4uLgotICAgIHdoaWxlIChibG9ja1N0YWNrICYm
IHQtPmlkIDw9IElEX0xBU1RfVEFHICYmIGZvcmJpZGRlblRhZ1t0LT5pZF0pIHsKLSNpZmRlZiBQ
QVJTRVJfREVCVUcKLSAgICAgICAga2REZWJ1ZyggNjAzNSApIDw8ICJ0LT5pZDogIiA8PCB0LT5p
ZCA8PCAiIGlzIGZvcmJpZGRlbiA6LSggIiA8PCBlbmRsOwotI2VuZGlmCi0gICAgICAgIHBvcE9u
ZUJsb2NrKCk7Ci0gICAgfQotCi0gICAgaWYgKCFpbnNlcnROb2RlKG4sIHQtPmZsYXQpKSAKLSAg
ICB7CisgICAgaWYgKCFpbnNlcnROb2RlKG4sIHQtPmZsYXQpKSB7CiAgICAgICAgIC8vIHdlIGNv
dWxkbid0IGluc2VydCB0aGUgbm9kZS4uLgotICAgICAgICAKLSAgICAgICAgaWYobi0+aXNFbGVt
ZW50Tm9kZSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBFbGVtZW50SW1wbCAqZSA9IHN0YXRp
Y19jYXN0PEVsZW1lbnRJbXBsICo+KG4pOworICAgICAgICBpZiAobi0+aXNFbGVtZW50Tm9kZSgp
KSB7CisgICAgICAgICAgICBFbGVtZW50SW1wbCogZSA9IHN0YXRpY19jYXN0PEVsZW1lbnRJbXBs
Kj4obik7CiAgICAgICAgICAgICBlLT5zZXRBdHRyaWJ1dGVNYXAoMCk7CiAgICAgICAgIH0KICAg
ICAgICAgICAgIAotI2lmZGVmIFBBUlNFUl9ERUJVRwotICAgICAgICBrZERlYnVnKCA2MDM1ICkg
PDwgImluc2VydE5vZGUgZmFpbGVkIGN1cnJlbnQ9IiA8PCBjdXJyZW50LT5pZCgpIDw8ICIsIG5l
dz0iIDw8IG4tPmlkKCkgPDwgIiEiIDw8IGVuZGw7Ci0jZW5kaWYKICAgICAgICAgaWYgKG1hcCA9
PSBuKQotICAgICAgICB7Ci0jaWZkZWYgUEFSU0VSX0RFQlVHCi0gICAgICAgICAgICBrZERlYnVn
KCA2MDM1ICkgPDwgIiAgLS0+IHJlc2V0dGluZyBtYXAhIiA8PCBlbmRsOwotI2VuZGlmCiAgICAg
ICAgICAgICBtYXAgPSAwOwotICAgICAgICB9CisKICAgICAgICAgaWYgKGZvcm0gPT0gbikKLSAg
ICAgICAgewotI2lmZGVmIFBBUlNFUl9ERUJVRwotICAgICAgICAgICAga2REZWJ1ZyggNjAzNSAp
IDw8ICIgICAtLT4gcmVzZXR0aW5nIGZvcm0hIiA8PCBlbmRsOwotI2VuZGlmCiAgICAgICAgICAg
ICBmb3JtID0gMDsKLSAgICAgICAgfQogICAgIH0KIH0KIAotc3RhdGljIGJvb2wgaXNUYWJsZVJl
bGF0ZWRUYWcoaW50IGlkKQorc3RhdGljIGJvb2wgaXNUYWJsZVNlY3Rpb24oTm9kZUltcGwqIG4p
CiB7Ci0gICAgcmV0dXJuIChpZCA9PSBJRF9UUiB8fCBpZCA9PSBJRF9URCB8fCBpZCA9PSBJRF9U
QUJMRSB8fCBpZCA9PSBJRF9UQk9EWSB8fCBpZCA9PSBJRF9URk9PVCB8fCBpZCA9PSBJRF9USEVB
RCB8fAotICAgICAgICAgICAgaWQgPT0gSURfVEgpOworICAgIHJldHVybiBuLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6dGJvZHkoKSkgfHwgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRmb290KCkp
IHx8IG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0aGVhZCgpKTsKIH0KIAotYm9vbCBLSFRNTFBh
cnNlcjo6aW5zZXJ0Tm9kZShOb2RlSW1wbCAqbiwgYm9vbCBmbGF0KQorc3RhdGljIGJvb2wgaXNU
YWJsZVBhcnQoTm9kZUltcGwqIG4pCiB7Ci0gICAgU2hhcmVkUHRyPE5vZGVJbXBsPiBwcm90ZWN0
Tm9kZShuKTsKKyAgICByZXR1cm4gbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRyKCkpIHx8IG4t
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0ZCgpKSB8fCBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
dGgoKSkgfHwKKyAgICAgICAgICAgaXNUYWJsZVNlY3Rpb24obik7Cit9CiAKLSAgICBpbnQgaWQg
PSBuLT5pZCgpOworc3RhdGljIGJvb2wgaXNUYWJsZVJlbGF0ZWQoTm9kZUltcGwqIG4pCit7Cisg
ICAgcmV0dXJuIG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0YWJsZSgpKSB8fCBpc1RhYmxlUGFy
dChuKTsKK30KIAorYm9vbCBIVE1MUGFyc2VyOjppbnNlcnROb2RlKE5vZGVJbXBsICpuLCBib29s
IGZsYXQpCit7CisgICAgU2hhcmVkUHRyPE5vZGVJbXBsPiBwcm90ZWN0Tm9kZShuKTsKKworICAg
IGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lID0gbi0+bG9jYWxOYW1lKCk7CisgICAgaW50
IHRhZ1ByaW9yaXR5ID0gbi0+aXNIVE1MRWxlbWVudCgpID8gc3RhdGljX2Nhc3Q8SFRNTEVsZW1l
bnRJbXBsKj4obiktPnRhZ1ByaW9yaXR5KCkgOiAwOworICAgICAgICAKICAgICAvLyBsZXQncyBi
ZSBzdHVwaWQgYW5kIGp1c3QgdHJ5IHRvIGluc2VydCBpdC4KLSAgICAvLyB0aGlzIHNob3VsZCB3
b3JrIGlmIHRoZSBkb2N1bWVudCBpcyB3ZWxsZm9ybWVkCi0jaWZkZWYgUEFSU0VSX0RFQlVHCi0g
ICAgTm9kZUltcGwgKnRtcCA9IGN1cnJlbnQ7Ci0jZW5kaWYKKyAgICAvLyB0aGlzIHNob3VsZCB3
b3JrIGlmIHRoZSBkb2N1bWVudCBpcyB3ZWxsLWZvcm1lZAogICAgIE5vZGVJbXBsICpuZXdOb2Rl
ID0gY3VycmVudC0+YWRkQ2hpbGQobik7Ci0gICAgaWYgKCBuZXdOb2RlICkgewotI2lmZGVmIFBB
UlNFUl9ERUJVRwotICAgICAgICBrZERlYnVnKCA2MDM1ICkgPDwgImFkZGVkICIgPDwgbi0+bm9k
ZU5hbWUoKS5zdHJpbmcoKSA8PCAiIHRvICIgPDwgdG1wLT5ub2RlTmFtZSgpLnN0cmluZygpIDw8
ICIsIG5ldyBjdXJyZW50PSIgPDwgbmV3Tm9kZS0+bm9kZU5hbWUoKS5zdHJpbmcoKSA8PCBlbmRs
OwotI2VuZGlmCi0gICAgICAgIC8vIGRvbid0IHB1c2ggZWxlbWVudHMgd2l0aG91dCBlbmQgdGFn
IG9uIHRoZSBzdGFjawotICAgICAgICBpZih0YWdQcmlvcml0eShpZCkgIT0gMCAmJiAhZmxhdCkK
LSAgICAgICAgewotICAgICAgICAgICAgcHVzaEJsb2NrKGlkLCB0YWdQcmlvcml0eShpZCkpOwor
ICAgIGlmIChuZXdOb2RlKSB7CisgICAgICAgIC8vIGRvbid0IHB1c2ggZWxlbWVudHMgd2l0aG91
dCBlbmQgdGFncyAoZS5nLiwgPGltZz4pIG9uIHRoZSBzdGFjaworICAgICAgICBpZiAodGFnUHJp
b3JpdHkgPiAwICYmICFmbGF0KSB7CisgICAgICAgICAgICBwdXNoQmxvY2sobG9jYWxOYW1lLCB0
YWdQcmlvcml0eSk7CiAgICAgICAgICAgICBpZiAobmV3Tm9kZSA9PSBjdXJyZW50KQotICAgICAg
ICAgICAgICAgIHBvcEJsb2NrKGlkKTsKKyAgICAgICAgICAgICAgICBwb3BCbG9jayhsb2NhbE5h
bWUpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHNldEN1cnJlbnQobmV3Tm9k
ZSk7Ci0jaWYgU1BFRURfREVCVUcgPCAyCi0gICAgICAgICAgICBpZighbi0+YXR0YWNoZWQoKSAm
JiBIVE1MV2lkZ2V0KQorICAgICAgICAgICAgaWYgKCFuLT5hdHRhY2hlZCgpICYmIEhUTUxXaWRn
ZXQpCiAgICAgICAgICAgICAgICAgbi0+YXR0YWNoKCk7Ci0jZW5kaWYKICAgICAgICAgfQogICAg
ICAgICBlbHNlIHsKLSNpZiBTUEVFRF9ERUJVRyA8IDIKLSAgICAgICAgICAgIGlmKCFuLT5hdHRh
Y2hlZCgpICYmIEhUTUxXaWRnZXQpCisgICAgICAgICAgICBpZiAoIW4tPmF0dGFjaGVkKCkgJiYg
SFRNTFdpZGdldCkKICAgICAgICAgICAgICAgICBuLT5hdHRhY2goKTsKICAgICAgICAgICAgIGlm
IChuLT5tYWludGFpbnNTdGF0ZSgpKSB7CiAgICAgICAgICAgICAgICAgZG9jKCktPnJlZ2lzdGVy
TWFpbnRhaW5zU3RhdGUobik7CkBAIC0zNDAsMTA0ICsyOTMsODYgQEAgYm9vbCBLSFRNTFBhcnNl
cjo6aW5zZXJ0Tm9kZShOb2RlSW1wbCAqbgogICAgICAgICAgICAgICAgICAgICBuLT5yZXN0b3Jl
U3RhdGUoc3RhdGVzKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG4tPmNsb3NlUmVuZGVy
ZXIoKTsKLSNlbmRpZgogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSBl
bHNlIHsKLSNpZmRlZiBQQVJTRVJfREVCVUcKLSAgICAgICAga2REZWJ1ZyggNjAzNSApIDw8ICJB
RERJTkcgTk9ERSBGQUlMRUQhISEhIGN1cnJlbnQgPSAiIDw8IGN1cnJlbnQtPm5vZGVOYW1lKCku
c3RyaW5nKCkgPDwgIiwgbmV3ID0gIiA8PCBuLT5ub2RlTmFtZSgpLnN0cmluZygpIDw8IGVuZGw7
Ci0jZW5kaWYKLSAgICAgICAgLy8gZXJyb3IgaGFuZGxpbmcuLi4KLSAgICAgICAgSFRNTEVsZW1l
bnRJbXBsICplOwotICAgICAgICBib29sIGhhbmRsZWQgPSBmYWxzZTsKLQotICAgICAgICAvLyBz
d2l0Y2ggYWNjb3JkaW5nIHRvIHRoZSBlbGVtZW50IHRvIGluc2VydAotICAgICAgICBzd2l0Y2go
aWQpCi0gICAgICAgIHsKLSAgICAgICAgY2FzZSBJRF9UUjoKLSAgICAgICAgY2FzZSBJRF9USDoK
LSAgICAgICAgY2FzZSBJRF9URDoKLSAgICAgICAgICAgIGlmIChpblN0cmF5VGFibGVDb250ZW50
ICYmICFpc1RhYmxlUmVsYXRlZFRhZyhjdXJyZW50LT5pZCgpKSkgeworICAgIH0gZWxzZQorICAg
ICAgICByZXR1cm4gaGFuZGxlRXJyb3IobiwgZmxhdCwgbG9jYWxOYW1lLCB0YWdQcmlvcml0eSk7
IC8vIFRyeSB0byBoYW5kbGUgdGhlIGVycm9yLgorfQorCitib29sIEhUTUxQYXJzZXI6OmhhbmRs
ZUVycm9yKE5vZGVJbXBsKiBuLCBib29sIGZsYXQsIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxO
YW1lLCBpbnQgdGFnUHJpb3JpdHkpCit7CisgICAgLy8gRXJyb3IgaGFuZGxpbmcgY29kZS4gIFRo
aXMgaXMganVzdCBhZCBob2MgaGFuZGxpbmcgb2Ygc3BlY2lmaWMgcGFyZW50L2NoaWxkIGNvbWJp
bmF0aW9ucy4KKyAgICBIVE1MRWxlbWVudEltcGwgKmU7CisgICAgYm9vbCBoYW5kbGVkID0gZmFs
c2U7CisKKyAgICAvLyAxLiBDaGVjayBvdXQgdGhlIGVsZW1lbnQncyB0YWcgbmFtZSB0byBkZWNp
ZGUgaG93IHRvIGRlYWwgd2l0aCBlcnJvcnMuCisgICAgaWYgKG4tPmlzVGV4dE5vZGUoKSkgewor
ICAgICAgICBpZiAoY3VycmVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnNlbGVjdCgpKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9IGVsc2UgaWYgKG4tPmlzSFRNTEVsZW1lbnQo
KSkgeworICAgICAgICBIVE1MRWxlbWVudEltcGwqIGggPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVu
dEltcGwqPihuKTsKKyAgICAgICAgaWYgKGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnRyKCkp
IHx8IGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnRoKCkpIHx8CisgICAgICAgICAgICBoLT5o
YXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0ZCgpKSkgeworICAgICAgICAgICAgaWYgKGluU3RyYXlU
YWJsZUNvbnRlbnQgJiYgIWlzVGFibGVSZWxhdGVkKGN1cnJlbnQpKSB7CiAgICAgICAgICAgICAg
ICAgLy8gcG9wIG91dCB0byB0aGUgbmVhcmVzdCBlbmNsb3NpbmcgdGFibGUtcmVsYXRlZCB0YWcu
Ci0gICAgICAgICAgICAgICAgd2hpbGUgKGJsb2NrU3RhY2sgJiYgIWlzVGFibGVSZWxhdGVkVGFn
KGN1cnJlbnQtPmlkKCkpKQorICAgICAgICAgICAgICAgIHdoaWxlIChibG9ja1N0YWNrICYmICFp
c1RhYmxlUmVsYXRlZChjdXJyZW50KSkKICAgICAgICAgICAgICAgICAgICAgcG9wT25lQmxvY2so
KTsKICAgICAgICAgICAgICAgICByZXR1cm4gaW5zZXJ0Tm9kZShuKTsKICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElEX0NPTU1FTlQ6Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBJRF9IRUFEOgotICAgICAgICAgICAgLy8gIyMjIGFsbGxv
dyBub3QgaGF2aW5nIDxIVE1MPiBpbiBhdCBhbGwsIGFzIHBlciBIVE1MIHNwZWMKLSAgICAgICAg
ICAgIGlmICghY3VycmVudC0+aXNEb2N1bWVudE5vZGUoKSAmJiBjdXJyZW50LT5pZCgpICE9IElE
X0hUTUwgKQorICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Omhl
YWQoKSkpIHsKKyAgICAgICAgICAgIGlmICghY3VycmVudC0+aXNEb2N1bWVudE5vZGUoKSAmJiAh
Y3VycmVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omh0bWwoKSkpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAvLyBXZSBjYW4g
ZGVhbCB3aXRoIGEgYmFzZSwgbWV0YSBhbmQgbGluayBlbGVtZW50IGluIHRoZSBib2R5LCBieSBq
dXN0IGFkZGluZyB0aGUgZWxlbWVudCB0byBoZWFkLgotICAgICAgICBjYXNlIElEX01FVEE6Ci0g
ICAgICAgIGNhc2UgSURfTElOSzoKLSAgICAgICAgY2FzZSBJRF9CQVNFOgotICAgICAgICAgICAg
aWYoICFoZWFkICkKKyAgICAgICAgfSBlbHNlIGlmIChoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVz
OjptZXRhKCkpIHx8IGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmxpbmsoKSkgfHwgaC0+aGFz
TG9jYWxOYW1lKEhUTUxOYW1lczo6YmFzZSgpKSkgeworICAgICAgICAgICAgaWYgKCFoZWFkKQog
ICAgICAgICAgICAgICAgIGNyZWF0ZUhlYWQoKTsKLSAgICAgICAgICAgIGlmKCBoZWFkICkgewot
ICAgICAgICAgICAgICAgIGlmICggaGVhZC0+YWRkQ2hpbGQobikgKSB7Ci0jaWYgU1BFRURfREVC
VUcgPCAyCi0gICAgICAgICAgICAgICAgICAgIGlmKCFuLT5hdHRhY2hlZCgpICYmIEhUTUxXaWRn
ZXQpCisgICAgICAgICAgICBpZiAoaGVhZCkgeworICAgICAgICAgICAgICAgIGlmIChoZWFkLT5h
ZGRDaGlsZChuKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIW4tPmF0dGFjaGVkKCkgJiYg
SFRNTFdpZGdldCkKICAgICAgICAgICAgICAgICAgICAgICAgIG4tPmF0dGFjaCgpOwotI2VuZGlm
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotCQl9IGVsc2UgewotCQkgICAgcmV0
dXJuIGZhbHNlOwotCQl9CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIElEX0hUTUw6CisgICAgICAgIH0gZWxzZSBpZiAoaC0+aGFzTG9jYWxOYW1lKEhU
TUxOYW1lczo6aHRtbCgpKSkgewogICAgICAgICAgICAgaWYgKCFjdXJyZW50LT5pc0RvY3VtZW50
Tm9kZSgpICkgewotCQlpZiAoIGRvYygpLT5maXJzdENoaWxkKCktPmlkKCkgPT0gSURfSFRNTCkg
ewotCQkgICAgLy8gd2UgaGF2ZSBhbm90aGVyIDxIVE1MPiBlbGVtZW50Li4uLiBhcHBseSBhdHRy
aWJ1dGVzIHRvIGV4aXN0aW5nIG9uZQotCQkgICAgLy8gbWFrZSBzdXJlIHdlIGRvbid0IG92ZXJ3
cml0ZSBhbHJlYWR5IGV4aXN0aW5nIGF0dHJpYnV0ZXMKLQkJICAgIE5hbWVkQXR0ck1hcEltcGwg
Km1hcCA9IHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsKj4obiktPmF0dHJpYnV0ZXModHJ1ZSk7Ci0J
CSAgICBOYW1lZEF0dHJNYXBJbXBsICpibWFwID0gc3RhdGljX2Nhc3Q8RWxlbWVudEltcGwqPihk
b2MoKS0+Zmlyc3RDaGlsZCgpKS0+YXR0cmlidXRlcyhmYWxzZSk7Ci0JCSAgICBib29sIGNoYW5n
ZWQgPSBmYWxzZTsKLQkJICAgIGZvciAodW5zaWduZWQgbG9uZyBsID0gMDsgbWFwICYmIGwgPCBt
YXAtPmxlbmd0aCgpOyArK2wpIHsKLQkJCUF0dHJpYnV0ZUltcGwqIGl0ID0gbWFwLT5hdHRyaWJ1
dGVJdGVtKGwpOwotCQkJY2hhbmdlZCA9ICFibWFwLT5nZXRBdHRyaWJ1dGVJdGVtKGl0LT5pZCgp
KTsKLQkJCWJtYXAtPmluc2VydEF0dHJpYnV0ZShpdC0+Y2xvbmUoZmFsc2UpKTsKLQkJICAgIH0K
LQkJICAgIGlmICggY2hhbmdlZCApCi0JCQlkb2MoKS0+cmVjYWxjU3R5bGUoIE5vZGVJbXBsOjpJ
bmhlcml0ICk7Ci0JCX0KKyAgICAgICAgICAgICAgICBpZiAoZG9jKCktPmZpcnN0Q2hpbGQoKS0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6Omh0bWwoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8g
d2UgaGF2ZSBhbm90aGVyIDxIVE1MPiBlbGVtZW50Li4uLiBhcHBseSBhdHRyaWJ1dGVzIHRvIGV4
aXN0aW5nIG9uZQorICAgICAgICAgICAgICAgICAgICAvLyBtYWtlIHN1cmUgd2UgZG9uJ3Qgb3Zl
cndyaXRlIGFscmVhZHkgZXhpc3RpbmcgYXR0cmlidXRlcworICAgICAgICAgICAgICAgICAgICBO
YW1lZEF0dHJNYXBJbXBsICptYXAgPSBzdGF0aWNfY2FzdDxFbGVtZW50SW1wbCo+KG4pLT5hdHRy
aWJ1dGVzKHRydWUpOworICAgICAgICAgICAgICAgICAgICBOYW1lZEF0dHJNYXBJbXBsICpibWFw
ID0gc3RhdGljX2Nhc3Q8RWxlbWVudEltcGwqPihkb2MoKS0+Zmlyc3RDaGlsZCgpKS0+YXR0cmli
dXRlcyhmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwor
ICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGxvbmcgbCA9IDA7IG1hcCAmJiBsIDwg
bWFwLT5sZW5ndGgoKTsgKytsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBBdHRyaWJ1dGVJ
bXBsKiBpdCA9IG1hcC0+YXR0cmlidXRlSXRlbShsKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNoYW5nZWQgPSAhYm1hcC0+Z2V0QXR0cmlidXRlSXRlbShpdC0+aWQoKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBibWFwLT5pbnNlcnRBdHRyaWJ1dGUoaXQtPmNsb25lKGZhbHNlKSk7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKGNoYW5nZWQpCisg
ICAgICAgICAgICAgICAgICAgICAgICBkb2MoKS0+cmVjYWxjU3R5bGUoTm9kZUltcGw6OkluaGVy
aXQpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0J
ICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElEX1RJVExFOgotICAgICAg
ICBjYXNlIElEX1NUWUxFOgotICAgICAgICAgICAgaWYgKCAhaGVhZCApCisgICAgICAgICAgICB9
CisgICAgICAgIH0gZWxzZSBpZiAoaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dGl0bGUoKSkg
fHwgaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6c3R5bGUoKSkpIHsKKyAgICAgICAgICAgIGlm
ICghaGVhZCkKICAgICAgICAgICAgICAgICBjcmVhdGVIZWFkKCk7Ci0gICAgICAgICAgICBpZiAo
IGhlYWQgKSB7CisgICAgICAgICAgICBpZiAoaGVhZCkgewogICAgICAgICAgICAgICAgIERPTTo6
Tm9kZUltcGwgKm5ld05vZGUgPSBoZWFkLT5hZGRDaGlsZChuKTsKLSAgICAgICAgICAgICAgICBp
ZiAoIG5ld05vZGUgKSB7Ci0gICAgICAgICAgICAgICAgICAgIHB1c2hCbG9jayhpZCwgdGFnUHJp
b3JpdHkoaWQpKTsKKyAgICAgICAgICAgICAgICBpZiAobmV3Tm9kZSkgeworICAgICAgICAgICAg
ICAgICAgICBwdXNoQmxvY2sobG9jYWxOYW1lLCB0YWdQcmlvcml0eSk7CiAgICAgICAgICAgICAg
ICAgICAgIHNldEN1cnJlbnQobmV3Tm9kZSk7Ci0jaWYgU1BFRURfREVCVUcgPCAyCi0JCSAgICBp
Zighbi0+YXR0YWNoZWQoKSAmJiBIVE1MV2lkZ2V0KQorICAgICAgICAgICAgICAgICAgICBpZiAo
IW4tPmF0dGFjaGVkKCkgJiYgSFRNTFdpZGdldCkKICAgICAgICAgICAgICAgICAgICAgICAgIG4t
PmF0dGFjaCgpOwotI2VuZGlmCiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSNpZmRlZiBQQVJT
RVJfREVCVUcKLSAgICAgICAgICAgICAgICAgICAga2REZWJ1ZyggNjAzNSApIDw8ICJhZGRpbmcg
c3R5bGUgYmVmb3JlIHRvIGJvZHkgZmFpbGVkISEhISIgPDwgZW5kbDsKLSNlbmRpZgotICAgICAg
ICAgICAgICAgICAgICBkaXNjYXJkX3VudGlsID0gSURfU1RZTEUgKyBJRF9DTE9TRV9UQUc7Cisg
ICAgICAgICAgICAgICAgICAgIHNldFNraXBNb2RlKEhUTUxOYW1lczo6c3R5bGUoKSk7CiAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9IGVsc2UgaWYoaW5Cb2R5KSB7Ci0g
ICAgICAgICAgICAgICAgZGlzY2FyZF91bnRpbCA9IElEX1NUWUxFICsgSURfQ0xPU0VfVEFHOwor
ICAgICAgICAgICAgICAgIHNldFNraXBNb2RlKEhUTUxOYW1lczo6c3R5bGUoKSk7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAvLyBTQ1JJUFQgYW5kIE9CSkVDVCBhcmUgYWxsb3dlZCBpbiB0aGUgYm9k
eS4KLSAgICAgICAgY2FzZSBJRF9CT0RZOgotICAgICAgICAgICAgaWYoaW5Cb2R5ICYmIGRvYygp
LT5ib2R5KCkpIHsKKyAgICAgICAgfSBlbHNlIGlmIChoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVz
Ojpib2R5KCkpKSB7CisgICAgICAgICAgICBpZiAoaW5Cb2R5ICYmIGRvYygpLT5ib2R5KCkpIHsK
ICAgICAgICAgICAgICAgICAvLyB3ZSBoYXZlIGFub3RoZXIgPEJPRFk+IGVsZW1lbnQuLi4uIGFw
cGx5IGF0dHJpYnV0ZXMgdG8gZXhpc3Rpbmcgb25lCiAgICAgICAgICAgICAgICAgLy8gbWFrZSBz
dXJlIHdlIGRvbid0IG92ZXJ3cml0ZSBhbHJlYWR5IGV4aXN0aW5nIGF0dHJpYnV0ZXMKICAgICAg
ICAgICAgICAgICAvLyBzb21lIHNpdGVzIHVzZSA8Ym9keSBiZ2NvbG9yPXJpZ2h0Y29sb3I+Li4u
PGJvZHkgYmdjb2xvcj13cm9uZ2NvbG9yPgpAQCAtNDQ5LDM2MCArMzg0LDI1OSBAQCBib29sIEtI
VE1MUGFyc2VyOjppbnNlcnROb2RlKE5vZGVJbXBsICpuCiAgICAgICAgICAgICAgICAgICAgIGNo
YW5nZWQgPSAhYm1hcC0+Z2V0QXR0cmlidXRlSXRlbShpdC0+aWQoKSk7CiAgICAgICAgICAgICAg
ICAgICAgIGJtYXAtPmluc2VydEF0dHJpYnV0ZShpdC0+Y2xvbmUoZmFsc2UpKTsKICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKCBjaGFuZ2VkICkKLSAgICAgICAgICAgICAg
ICAgICAgZG9jKCktPnJlY2FsY1N0eWxlKCBOb2RlSW1wbDo6SW5oZXJpdCApOwotICAgICAgICAg
ICAgfSBlbHNlIGlmICggY3VycmVudC0+aXNEb2N1bWVudE5vZGUoKSApCi0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBicmVhazsK
LQotICAgICAgICAgICAgLy8gdGhlIGZvbGxvd2luZyBpcyBhIGhhY2sgdG8gbW92ZSBub24gcmVu
ZGVyZWQgZWxlbWVudHMKLSAgICAgICAgICAgIC8vIG91dHNpZGUgb2YgdGFibGVzLgotICAgICAg
ICAgICAgLy8gbmVlZGVkIGZvciBicm9rZW4gY29uc3RydWN0cyBsaWtlIDx0YWJsZT48Zm9ybSAu
Li4+PHRyPi4uLi4KLSAgICAgICAgY2FzZSBJRF9JTlBVVDoKLSAgICAgICAgewotICAgICAgICAg
ICAgRWxlbWVudEltcGwgKmUgPSBzdGF0aWNfY2FzdDxFbGVtZW50SW1wbCAqPihuKTsKLSAgICAg
ICAgICAgIERPTVN0cmluZyB0eXBlID0gZS0+Z2V0QXR0cmlidXRlKEFUVFJfVFlQRSk7Ci0KLSAg
ICAgICAgICAgIGlmICggc3RyY2FzZWNtcCggdHlwZSwgImhpZGRlbiIgKSA9PSAwICYmIGZvcm0p
IHsKKyAgICAgICAgICAgICAgICBpZiAoY2hhbmdlZCkKKyAgICAgICAgICAgICAgICAgICAgZG9j
KCktPnJlY2FsY1N0eWxlKE5vZGVJbXBsOjpJbmhlcml0KTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmICghY3VycmVudC0+
aXNEb2N1bWVudE5vZGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0gZWxzZSBpZiAoaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6aW5wdXQoKSkpIHsKKyAgICAg
ICAgICAgIERPTVN0cmluZyB0eXBlID0gaC0+Z2V0QXR0cmlidXRlKEFUVFJfVFlQRSk7CisgICAg
ICAgICAgICBpZiAoc3RyY2FzZWNtcCh0eXBlLCAiaGlkZGVuIikgPT0gMCAmJiBmb3JtKSB7CiAg
ICAgICAgICAgICAgICAgZm9ybS0+YWRkQ2hpbGQobik7Ci0jaWYgU1BFRURfREVCVUcgPCAyCi0g
ICAgICAgICAgICAgICAgaWYoIW4tPmF0dGFjaGVkKCkgJiYgSFRNTFdpZGdldCkKKyAgICAgICAg
ICAgICAgICBpZiAoIW4tPmF0dGFjaGVkKCkgJiYgSFRNTFdpZGdldCkKICAgICAgICAgICAgICAg
ICAgICAgbi0+YXR0YWNoKCk7Ci0jZW5kaWYKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNh
c2UgSURfVEVYVDoKLSAgICAgICAgICAgIC8vIGlnbm9yZSB0ZXh0IGluc2lkZSB0aGUgZm9sbG93
aW5nIGVsZW1lbnRzLgotICAgICAgICAgICAgc3dpdGNoKGN1cnJlbnQtPmlkKCkpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICBjYXNlIElEX1NFTEVDVDoKLSAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIDsKLSAgICAg
ICAgICAgICAgICAvLyBmYWxsIHRocm91Z2ghIQotICAgICAgICAgICAgfTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIElEX0REOgotICAgICAgICBjYXNlIElEX0RUOgorICAgICAg
ICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmRkKCkpIHx8IGgtPmhhc0xv
Y2FsTmFtZShIVE1MTmFtZXM6OmR0KCkpKSB7CiAgICAgICAgICAgICBlID0gbmV3IEhUTUxETGlz
dEVsZW1lbnRJbXBsKGRvY3VtZW50KTsKLSAgICAgICAgICAgIGlmICggaW5zZXJ0Tm9kZShlKSAp
IHsKKyAgICAgICAgICAgIGlmIChpbnNlcnROb2RlKGUpKSB7CiAgICAgICAgICAgICAgICAgaW5z
ZXJ0Tm9kZShuKTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElEX0FSRUE6Ci0gICAgICAgIHsKLSAg
ICAgICAgICAgIGlmKG1hcCkKLSAgICAgICAgICAgIHsKKyAgICAgICAgfSBlbHNlIGlmIChoLT5o
YXNMb2NhbE5hbWUoSFRNTE5hbWVzOjphcmVhKCkpKSB7CisgICAgICAgICAgICBpZiAobWFwKSB7
CiAgICAgICAgICAgICAgICAgbWFwLT5hZGRDaGlsZChuKTsKLSNpZiBTUEVFRF9ERUJVRyA8IDIK
LSAgICAgICAgICAgICAgICBpZighbi0+YXR0YWNoZWQoKSAmJiBIVE1MV2lkZ2V0KQorICAgICAg
ICAgICAgICAgIGlmICghbi0+YXR0YWNoZWQoKSAmJiBIVE1MV2lkZ2V0KQogICAgICAgICAgICAg
ICAgICAgICBuLT5hdHRhY2goKTsKLSNlbmRpZgogICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0
cnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2UgSURfQ0FQVElPTjogewotICAgICAgICAgICAgc3dpdGNoIChjdXJyZW50LT5pZCgpKSB7
Ci0gICAgICAgICAgICAgICAgY2FzZSBJRF9USEVBRDoKLSAgICAgICAgICAgICAgICBjYXNlIElE
X1RCT0RZOgotICAgICAgICAgICAgICAgIGNhc2UgSURfVEZPT1Q6Ci0gICAgICAgICAgICAgICAg
Y2FzZSBJRF9UUjoKLSAgICAgICAgICAgICAgICBjYXNlIElEX1RIOgotICAgICAgICAgICAgICAg
IGNhc2UgSURfVEQ6IHsKLSAgICAgICAgICAgICAgICAgICAgTm9kZUltcGwqIHRzZWN0aW9uID0g
Y3VycmVudDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQtPmlkKCkgPT0gSURfVFIp
Ci0gICAgICAgICAgICAgICAgICAgICAgICB0c2VjdGlvbiA9IGN1cnJlbnQtPnBhcmVudCgpOwot
ICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjdXJyZW50LT5pZCgpID09IElEX1REIHx8IGN1
cnJlbnQtPmlkKCkgPT0gSURfVEgpCi0gICAgICAgICAgICAgICAgICAgICAgICB0c2VjdGlvbiA9
IGN1cnJlbnQtPnBhcmVudCgpLT5wYXJlbnQoKTsKLSAgICAgICAgICAgICAgICAgICAgTm9kZUlt
cGwqIHRhYmxlID0gdHNlY3Rpb24tPnBhcmVudCgpOwotICAgICAgICAgICAgICAgICAgICBpbnQg
ZXhjZXB0aW9uY29kZSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIHRhYmxlLT5pbnNlcnRCZWZv
cmUobiwgdHNlY3Rpb24sIGV4Y2VwdGlvbmNvZGUpOwotICAgICAgICAgICAgICAgICAgICBwdXNo
QmxvY2soaWQsIHRhZ1ByaW9yaXR5KGlkKSk7Ci0gICAgICAgICAgICAgICAgICAgIHNldEN1cnJl
bnQobik7Ci0gICAgICAgICAgICAgICAgICAgIGluU3RyYXlUYWJsZUNvbnRlbnQrKzsKLSAgICAg
ICAgICAgICAgICAgICAgYmxvY2tTdGFjay0+c3RyYXlUYWJsZUNvbnRlbnQgPSB0cnVlOwotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0g
ZWxzZSBpZiAoaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6Y2FwdGlvbigpKSkgeworICAgICAg
ICAgICAgaWYgKGlzVGFibGVQYXJ0KGN1cnJlbnQpKSB7CisgICAgICAgICAgICAgICAgTm9kZUlt
cGwqIHRzZWN0aW9uID0gY3VycmVudDsKKyAgICAgICAgICAgICAgICBpZiAoY3VycmVudC0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OnRyKCkpKQorICAgICAgICAgICAgICAgICAgICB0c2VjdGlvbiA9
IGN1cnJlbnQtPnBhcmVudCgpOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGN1cnJlbnQtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjp0ZCgpKSB8fCBjdXJyZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6dGgoKSkpCisgICAgICAgICAgICAgICAgICAgIHRzZWN0aW9uID0gY3VycmVudC0+cGFyZW50
KCktPnBhcmVudCgpOworICAgICAgICAgICAgICAgIE5vZGVJbXBsKiB0YWJsZSA9IHRzZWN0aW9u
LT5wYXJlbnQoKTsKKyAgICAgICAgICAgICAgICBpbnQgZXhjZXB0aW9uY29kZSA9IDA7CisgICAg
ICAgICAgICAgICAgdGFibGUtPmluc2VydEJlZm9yZShuLCB0c2VjdGlvbiwgZXhjZXB0aW9uY29k
ZSk7CisgICAgICAgICAgICAgICAgcHVzaEJsb2NrKGxvY2FsTmFtZSwgdGFnUHJpb3JpdHkpOwor
ICAgICAgICAgICAgICAgIHNldEN1cnJlbnQobik7CisgICAgICAgICAgICAgICAgaW5TdHJheVRh
YmxlQ29udGVudCsrOworICAgICAgICAgICAgICAgIGJsb2NrU3RhY2stPnN0cmF5VGFibGVDb250
ZW50ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgSURfVEhFQUQ6Ci0g
ICAgICAgIGNhc2UgSURfVEJPRFk6Ci0gICAgICAgIGNhc2UgSURfVEZPT1Q6Ci0gICAgICAgIGNh
c2UgSURfQ09MR1JPVVA6IHsKLSAgICAgICAgICAgIGlmIChpc1RhYmxlUmVsYXRlZFRhZyhjdXJy
ZW50LT5pZCgpKSkgewotICAgICAgICAgICAgICAgIHdoaWxlIChibG9ja1N0YWNrICYmIGN1cnJl
bnQtPmlkKCkgIT0gSURfVEFCTEUgJiYgaXNUYWJsZVJlbGF0ZWRUYWcoY3VycmVudC0+aWQoKSkp
CisgICAgICAgIH0gZWxzZSBpZiAoaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dGhlYWQoKSkg
fHwgaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dGJvZHkoKSkgfHwKKyAgICAgICAgICAgICAg
ICAgICBoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0Zm9vdCgpKSB8fCBoLT5oYXNMb2NhbE5h
bWUoSFRNTE5hbWVzOjpjb2xncm91cCgpKSkgeworICAgICAgICAgICAgaWYgKGlzVGFibGVSZWxh
dGVkKGN1cnJlbnQpKSB7CisgICAgICAgICAgICAgICAgd2hpbGUgKGJsb2NrU3RhY2sgJiYgaXNU
YWJsZVBhcnQoY3VycmVudCkpCiAgICAgICAgICAgICAgICAgICAgIHBvcE9uZUJsb2NrKCk7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGluc2VydE5vZGUobik7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0K
LSAgICAgICAgLy8gc3dpdGNoIG9uIHRoZSBjdXJyZW50bHkgYWN0aXZlIGVsZW1lbnQKLSAgICAg
ICAgc3dpdGNoKGN1cnJlbnQtPmlkKCkpCi0gICAgICAgIHsKLSAgICAgICAgY2FzZSBJRF9IVE1M
OgotICAgICAgICAgICAgc3dpdGNoKGlkKQotICAgICAgICAgICAgewotICAgICAgICAgICAgY2Fz
ZSBJRF9TQ1JJUFQ6Ci0gICAgICAgICAgICBjYXNlIElEX1NUWUxFOgotICAgICAgICAgICAgY2Fz
ZSBJRF9NRVRBOgotICAgICAgICAgICAgY2FzZSBJRF9MSU5LOgotICAgICAgICAgICAgY2FzZSBJ
RF9PQkpFQ1Q6Ci0gICAgICAgICAgICBjYXNlIElEX0VNQkVEOgotICAgICAgICAgICAgY2FzZSBJ
RF9USVRMRToKLSAgICAgICAgICAgIGNhc2UgSURfSVNJTkRFWDoKLSAgICAgICAgICAgIGNhc2Ug
SURfQkFTRToKLSAgICAgICAgICAgICAgICBpZighaGVhZCkgeworICAgIH0KKyAgICAKKyAgICAv
LyAyLiBOZXh0IHdlIGV4YW1pbmUgb3VyIGN1cnJlbnRseSBhY3RpdmUgZWxlbWVudCB0byBkbyBz
b21lIGZ1cnRoZXIgZXJyb3IgaGFuZGxpbmcuCisgICAgaWYgKGN1cnJlbnQtPmlzSFRNTEVsZW1l
bnQoKSkgeworICAgICAgICBIVE1MRWxlbWVudEltcGwqIGggPSBzdGF0aWNfY2FzdDxIVE1MRWxl
bWVudEltcGwqPihjdXJyZW50KTsKKyAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBjdXJyZW50
VGFnTmFtZSA9IGN1cnJlbnQtPmxvY2FsTmFtZSgpOworICAgICAgICBpZiAoaC0+aGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6aHRtbCgpKSkgeworICAgICAgICAgICAgSFRNTEVsZW1lbnRJbXBsKiBl
bHQgPSBuLT5pc0hUTUxFbGVtZW50KCkgPyBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwqPihu
KSA6IDA7CisgICAgICAgICAgICBpZiAoZWx0ICYmIGVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1l
czo6c2NyaXB0KCkpIHx8IGVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6c3R5bGUoKSkgfHwK
KyAgICAgICAgICAgICAgICBlbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om1ldGEoKSkgfHwg
ZWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpsaW5rKCkpIHx8CisgICAgICAgICAgICAgICAg
ZWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvYmplY3QoKSkgfHwgZWx0LT5oYXNMb2NhbE5h
bWUoSFRNTE5hbWVzOjplbWJlZCgpKSB8fAorICAgICAgICAgICAgICAgIGVsdC0+aGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6dGl0bGUoKSkgfHwgZWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpp
c2luZGV4KCkpIHx8CisgICAgICAgICAgICAgICAgZWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVz
OjpiYXNlKCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFoZWFkKSB7CiAgICAgICAgICAgICAg
ICAgICAgIGhlYWQgPSBuZXcgSFRNTEhlYWRFbGVtZW50SW1wbChkb2N1bWVudCk7CiAgICAgICAg
ICAgICAgICAgICAgIGUgPSBoZWFkOwogICAgICAgICAgICAgICAgICAgICBpbnNlcnROb2RlKGUp
OwogICAgICAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIElEX1RFWFQ6IHsKLSAg
ICAgICAgICAgICAgICBUZXh0SW1wbCAqdCA9IHN0YXRpY19jYXN0PFRleHRJbXBsICo+KG4pOwot
ICAgICAgICAgICAgICAgIGlmICh0LT5jb250YWluc09ubHlXaGl0ZXNwYWNlKCkpCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICAvKiBGYWxsIHRocm91
Z2ggdG8gZGVmYXVsdCAqLwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgICAgICBpZiAoIGhhdmVGcmFtZVNldCApIGJyZWFrOwotICAgICAgICAgICAgICAg
IGUgPSBuZXcgSFRNTEJvZHlFbGVtZW50SW1wbChkb2N1bWVudCk7Ci0gICAgICAgICAgICAgICAg
c3RhcnRCb2R5KCk7Ci0gICAgICAgICAgICAgICAgaW5zZXJ0Tm9kZShlKTsKLSAgICAgICAgICAg
ICAgICBoYW5kbGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKG4tPmlzVGV4dE5vZGUoKSkgeworICAgICAg
ICAgICAgICAgICAgICBUZXh0SW1wbCAqdCA9IHN0YXRpY19jYXN0PFRleHRJbXBsICo+KG4pOwor
ICAgICAgICAgICAgICAgICAgICBpZiAodC0+Y29udGFpbnNPbmx5V2hpdGVzcGFjZSgpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICBp
ZiAoIWhhdmVGcmFtZVNldCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZSA9IG5ldyBIVE1M
Qm9keUVsZW1lbnRJbXBsKGRvY3VtZW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0
Qm9keSgpOworICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0Tm9kZShlKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgSURfSEVBRDoKLSAgICAgICAgICAgIC8vIHdlIGNhbiBnZXQgaGVyZSBvbmx5IGlm
IHRoZSBlbGVtZW50IGlzIG5vdCBhbGxvd2VkIGluIGhlYWQuCi0gICAgICAgICAgICBpZiAoaWQg
PT0gSURfSFRNTCkKKyAgICAgICAgfSBlbHNlIGlmIChoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVz
OjpoZWFkKCkpKSB7CisgICAgICAgICAgICBpZiAobi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omh0
bWwoKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgZWxzZSB7
CiAgICAgICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGUgYm9keSBzdGFydHMgaGVyZS4uLgot
ICAgICAgICAgICAgICAgIGlmICggaGF2ZUZyYW1lU2V0ICkgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgcG9wQmxvY2soSURfSEVBRCk7Ci0gICAgICAgICAgICAgICAgZSA9IG5ldyBIVE1MQm9keUVs
ZW1lbnRJbXBsKGRvY3VtZW50KTsKLSAgICAgICAgICAgICAgICBzdGFydEJvZHkoKTsKLSAgICAg
ICAgICAgICAgICBpbnNlcnROb2RlKGUpOwotICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVl
OworICAgICAgICAgICAgICAgIGlmICghaGF2ZUZyYW1lU2V0KSB7CisgICAgICAgICAgICAgICAg
ICAgIHBvcEJsb2NrKGN1cnJlbnRUYWdOYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgZSA9IG5l
dyBIVE1MQm9keUVsZW1lbnRJbXBsKGRvY3VtZW50KTsKKyAgICAgICAgICAgICAgICAgICAgc3Rh
cnRCb2R5KCk7CisgICAgICAgICAgICAgICAgICAgIGluc2VydE5vZGUoZSk7CisgICAgICAgICAg
ICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElEX0JPRFk6Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBJRF9DQVBUSU9OOgorICAgICAgICB9IGVsc2UgaWYgKGgt
Pmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmNhcHRpb24oKSkpIHsKICAgICAgICAgICAgIC8vIEls
bGVnYWwgY29udGVudCBpbiBhIGNhcHRpb24uIENsb3NlIHRoZSBjYXB0aW9uIGFuZCB0cnkgYWdh
aW4uCi0gICAgICAgICAgICBwb3BCbG9jayhJRF9DQVBUSU9OKTsKLSAgICAgICAgICAgIHN3aXRj
aCggaWQgKSB7Ci0gICAgICAgICAgICBjYXNlIElEX1RIRUFEOgotICAgICAgICAgICAgY2FzZSBJ
RF9URk9PVDoKLSAgICAgICAgICAgIGNhc2UgSURfVEJPRFk6Ci0gICAgICAgICAgICBjYXNlIElE
X1RSOgotICAgICAgICAgICAgY2FzZSBJRF9URDoKLSAgICAgICAgICAgIGNhc2UgSURfVEg6Cisg
ICAgICAgICAgICBwb3BCbG9jayhjdXJyZW50VGFnTmFtZSk7CisgICAgICAgICAgICBpZiAoaXNU
YWJsZVBhcnQobikpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGluc2VydE5vZGUobiwgZmxhdCk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJRF9UQUJM
RToKLSAgICAgICAgY2FzZSBJRF9USEVBRDoKLSAgICAgICAgY2FzZSBJRF9URk9PVDoKLSAgICAg
ICAgY2FzZSBJRF9UQk9EWToKLSAgICAgICAgY2FzZSBJRF9UUjoKLSAgICAgICAgICAgIHN3aXRj
aChpZCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIGNhc2UgSURfVEFCTEU6Ci0gICAgICAg
ICAgICAgICAgcG9wQmxvY2soSURfVEFCTEUpOyAvLyBlbmQgdGhlIHRhYmxlCisgICAgICAgIH0g
ZWxzZSBpZiAoaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dGFibGUoKSkgfHwgaC0+aGFzTG9j
YWxOYW1lKEhUTUxOYW1lczo6dHIoKSkgfHwgaXNUYWJsZVNlY3Rpb24oaCkpIHsKKyAgICAgICAg
ICAgIGlmIChuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGFibGUoKSkpIHsKKyAgICAgICAgICAg
ICAgICBwb3BCbG9jayhsb2NhbE5hbWUpOyAvLyBlbmQgdGhlIHRhYmxlCiAgICAgICAgICAgICAg
ICAgaGFuZGxlZCA9IHRydWU7ICAgICAgLy8gLi4uYW5kIHN0YXJ0IGEgbmV3IG9uZQotICAgICAg
ICAgICAgICAgIGJyZWFrOwotCSAgICBjYXNlIElEX1RFWFQ6Ci0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgVGV4dEltcGwgKnQgPSBzdGF0aWNfY2FzdDxUZXh0SW1wbCAqPihuKTsKLSAg
ICAgICAgICAgICAgICBpZiAodC0+Y29udGFpbnNPbmx5V2hpdGVzcGFjZSgpKQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgRE9NU3RyaW5nSW1wbCAq
aSA9IHQtPnN0cmluZygpOwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBwb3MgPSAwOwot
ICAgICAgICAgICAgICAgIHdoaWxlKHBvcyA8IGktPmwgJiYgKCAqKGktPnMrcG9zKSA9PSBRQ2hh
cignICcpIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooaS0+cytw
b3MpID09IFFDaGFyKDB4YTApKSkgcG9zKys7Ci0gICAgICAgICAgICAgICAgaWYocG9zID09IGkt
PmwpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBOb2RlSW1wbCAqbm9k
ZSA9IGN1cnJlbnQ7Ci0gICAgICAgICAgICAgICAgTm9kZUltcGwgKnBhcmVudCA9IG5vZGUtPnBh
cmVudE5vZGUoKTsKLQotICAgICAgICAgICAgICAgIE5vZGVJbXBsICpwYXJlbnRwYXJlbnQgPSBw
YXJlbnQtPnBhcmVudE5vZGUoKTsKLQotICAgICAgICAgICAgICAgIGlmIChuLT5pc1RleHROb2Rl
KCkgfHwKLSAgICAgICAgICAgICAgICAgICAgKCBub2RlLT5pZCgpID09IElEX1RSICYmCi0gICAg
ICAgICAgICAgICAgICAgICAoIHBhcmVudC0+aWQoKSA9PSBJRF9USEVBRCB8fAotICAgICAgICAg
ICAgICAgICAgICAgIHBhcmVudC0+aWQoKSA9PSBJRF9UQk9EWSB8fAotICAgICAgICAgICAgICAg
ICAgICAgIHBhcmVudC0+aWQoKSA9PSBJRF9URk9PVCApICYmIHBhcmVudHBhcmVudC0+aWQoKSA9
PSBJRF9UQUJMRSApIHx8Ci0gICAgICAgICAgICAgICAgICAgICggIWNoZWNrQ2hpbGQoSURfVFIs
IGlkLCAhZG9jKCktPmluQ29tcGF0TW9kZSgpKSAmJiAoIG5vZGUtPmlkKCkgPT0gSURfVEhFQUQg
fHwgbm9kZS0+aWQoKSA9PSBJRF9UQk9EWSB8fCBub2RlLT5pZCgpID09IElEX1RGT09UICkgJiYK
LSAgICAgICAgICAgICAgICAgICAgIHBhcmVudC0+aWQoKSA9PSBJRF9UQUJMRSApKQotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbm9kZSA9IChub2RlLT5pZCgpID09IElE
X1RBQkxFKSA/IG5vZGUgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICgobm9kZS0+aWQo
KSA9PSBJRF9UUikgPyBwYXJlbnRwYXJlbnQgOiBwYXJlbnQpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgYm9vbCBwb3NzaWJseU1vdmVTdHJheUNv
bnRlbnQgPSB0cnVlOworICAgICAgICAgICAgICAgIGludCBleGNlcHRpb25Db2RlID0gMDsKKyAg
ICAgICAgICAgICAgICBpZiAobi0+aXNUZXh0Tm9kZSgpKSB7CisgICAgICAgICAgICAgICAgICAg
IFRleHRJbXBsICp0ID0gc3RhdGljX2Nhc3Q8VGV4dEltcGwgKj4obik7CisgICAgICAgICAgICAg
ICAgICAgIGlmICh0LT5jb250YWluc09ubHlXaGl0ZXNwYWNlKCkpCisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIERPTVN0cmluZ0ltcGwg
KmkgPSB0LT5zdHJpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHBvcyA9
IDA7CisgICAgICAgICAgICAgICAgICAgIHdoaWxlIChwb3MgPCBpLT5sICYmICgqKGktPnMrcG9z
KSA9PSBRQ2hhcignICcpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAqKGktPnMrcG9zKSA9PSBRQ2hhcigweGEwKSkpIHBvcysrOworICAgICAgICAgICAgICAg
ICAgICBpZiAocG9zID09IGktPmwpCisgICAgICAgICAgICAgICAgICAgICAgICBwb3NzaWJseU1v
dmVTdHJheUNvbnRlbnQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgaWYgKHBvc3NpYmx5TW92ZVN0cmF5Q29udGVudCkgeworICAgICAgICAgICAgICAgICAgICBO
b2RlSW1wbCAqbm9kZSA9IGN1cnJlbnQ7CiAgICAgICAgICAgICAgICAgICAgIE5vZGVJbXBsICpw
YXJlbnQgPSBub2RlLT5wYXJlbnROb2RlKCk7Ci0gICAgICAgICAgICAgICAgICAgIGludCBleGNl
cHRpb25jb2RlID0gMDsKLSAgICAgICAgICAgICAgICAgICAgcGFyZW50LT5pbnNlcnRCZWZvcmUo
IG4sIG5vZGUsIGV4Y2VwdGlvbmNvZGUgKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCBleGNl
cHRpb25jb2RlICkgewotI2lmZGVmIFBBUlNFUl9ERUJVRwotICAgICAgICAgICAgICAgICAgICAg
ICAga2REZWJ1ZyggNjAzNSApIDw8ICJhZGRpbmcgY29udGVudCBiZWZvcmUgdGFibGUgZmFpbGVk
ISIgPDwgZW5kbDsKLSNlbmRpZgotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgIE5vZGVJbXBsICpncmFuZHBhcmVudCA9IHBhcmVudC0+cGFyZW50Tm9k
ZSgpOworCisgICAgICAgICAgICAgICAgICAgIGlmIChuLT5pc1RleHROb2RlKCkgfHwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIChoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0cigpKSAmJgor
ICAgICAgICAgICAgICAgICAgICAgICAgIGlzVGFibGVTZWN0aW9uKHBhcmVudCkgJiYgZ3JhbmRw
YXJlbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0YWJsZSgpKSkgfHwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBGSVhNRTogRFREIENIRUNLIHdpdGggbm8gZWxlbWVudCEKKyAgICAgICAg
ICAgICAgICAgICAgICAgICggLyohY2hlY2tDaGlsZChJRF9UUiwgaWQsICFkb2MoKS0+aW5Db21w
YXRNb2RlKCkpICYmKi8gaXNUYWJsZVNlY3Rpb24obm9kZSkgJiYKKyAgICAgICAgICAgICAgICAg
ICAgICAgICBwYXJlbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0YWJsZSgpKSkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG5vZGUgPSAobm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRh
YmxlKCkpKSA/IG5vZGUgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKG5vZGUt
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0cigpKSkgPyBncmFuZHBhcmVudCA6IHBhcmVudCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBOb2RlSW1wbCAqcGFyZW50ID0gbm9kZS0+cGFyZW50Tm9k
ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50LT5pbnNlcnRCZWZvcmUobiwgbm9k
ZSwgZXhjZXB0aW9uQ29kZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWV4Y2VwdGlv
bkNvZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobi0+aXNIVE1MRWxlbWVu
dCgpICYmIHRhZ1ByaW9yaXR5ID4gMCAmJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIWZsYXQgJiYgc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsKj4obiktPmVuZFRhZ1JlcXVp
cmVtZW50KCkgIT0gVGFnU3RhdHVzRm9yYmlkZGVuKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaEJsb2NrKGxvY2FsTmFt
ZSwgdGFnUHJpb3JpdHkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDdXJy
ZW50KG4pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpblN0cmF5VGFibGVDb250
ZW50Kys7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrU3RhY2stPnN0cmF5
VGFibGVDb250ZW50ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKG4t
PmlzRWxlbWVudE5vZGUoKSAmJiB0YWdQcmlvcml0eShpZCkgIT0gMCAmJiAKLSAgICAgICAgICAg
ICAgICAgICAgICAgICFmbGF0ICYmIGVuZFRhZ1JlcXVpcmVtZW50KGlkKSAhPSBET006OkZPUkJJ
RERFTikKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcHVz
aEJsb2NrKGlkLCB0YWdQcmlvcml0eShpZCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgc2V0
Q3VycmVudChuKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGluU3RyYXlUYWJsZUNvbnRlbnQr
KzsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrU3RhY2stPnN0cmF5VGFibGVDb250ZW50
ID0gdHJ1ZTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoIWV4Y2VwdGlvbkNvZGUpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
dHIoKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZSA9IG5ldyBIVE1MVGFibGVDZWxs
RWxlbWVudEltcGwoSFRNTE5hbWVzOjp0ZCgpLCBkb2N1bWVudCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBlbHNlIGlmIChjdXJyZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGFibGUoKSkp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZSA9IG5ldyBIVE1MVGFibGVTZWN0aW9uRWxl
bWVudEltcGwoSFRNTE5hbWVzOjp0Ym9keSgpLCBkb2N1bWVudCwgdHJ1ZSk7IC8vIGltcGxpY2l0
IAorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGUgPSBuZXcgSFRNTFRhYmxlUm93RWxlbWVudEltcGwoZG9jdW1lbnQpOworICAgICAgICAg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnROb2RlKGUpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgaWYgKCBjdXJyZW50LT5pZCgpID09IElEX1RSICkKLSAgICAg
ICAgICAgICAgICAgICAgZSA9IG5ldyBIVE1MVGFibGVDZWxsRWxlbWVudEltcGwoZG9jdW1lbnQs
IElEX1REKTsKLSAgICAgICAgICAgICAgICBlbHNlIGlmICggY3VycmVudC0+aWQoKSA9PSBJRF9U
QUJMRSApCi0gICAgICAgICAgICAgICAgICAgIGUgPSBuZXcgSFRNTFRhYmxlU2VjdGlvbkVsZW1l
bnRJbXBsKCBkb2N1bWVudCwgSURfVEJPRFksIHRydWUgLyogaW1wbGljaXQgKi8gKTsKLSAgICAg
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGUgPSBuZXcgSFRNTFRhYmxlUm93
RWxlbWVudEltcGwoIGRvY3VtZW50ICk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgaW5zZXJ0Tm9kZShlKTsKLSAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0gLy8gZW5kIGRlZmF1bHQKLSAgICAgICAg
ICAgIH0gLy8gZW5kIHN3aXRjaAotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSURf
T0JKRUNUOgotICAgICAgICAgICAgZGlzY2FyZF91bnRpbCA9IElEX09CSkVDVCArIElEX0NMT1NF
X1RBRzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChoLT5oYXNM
b2NhbE5hbWUoSFRNTE5hbWVzOjpvYmplY3QoKSkpIHsKKyAgICAgICAgICAgIHNldFNraXBNb2Rl
KEhUTUxOYW1lczo6b2JqZWN0KCkpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICBjYXNlIElEX1VMOgotICAgICAgICBjYXNlIElEX09MOgotICAgICAgICBjYXNlIElEX0RJUjoK
LSAgICAgICAgY2FzZSBJRF9NRU5VOgorICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFt
ZShIVE1MTmFtZXM6OnVsKCkpIHx8IGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9sKCkpIHx8
CisgICAgICAgICAgICAgICAgIGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmRpcigpKSB8fCBo
LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjptZW51KCkpKSB7CiAgICAgICAgICAgICBlID0gbmV3
IEhUTUxEaXZFbGVtZW50SW1wbChkb2N1bWVudCk7CiAgICAgICAgICAgICBpbnNlcnROb2RlKGUp
OwogICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIGNhc2UgSURfREw6Ci0gICAgICAgICAgICAgICAgcG9wQmxvY2soSURfREwpOwotICAg
ICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgY2FzZSBJRF9EVDoKLSAgICAgICAgICAgICAgICBwb3BCbG9jayhJRF9EVCk7Ci0g
ICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgSURfU0VMRUNUOgotICAgICAgICAgICAgaWYoIG4tPmlzSW5saW5lKCkgKQor
ICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmRsKCkpIHx8IGgt
Pmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmR0KCkpKSB7CisgICAgICAgICAgICBwb3BCbG9jayhj
dXJyZW50VGFnTmFtZSk7CisgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKKyAgICAgICAgfSBl
bHNlIGlmIChoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpzZWxlY3QoKSkpIHsKKyAgICAgICAg
ICAgIGlmIChpc0lubGluZShuKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJRF9QOgotICAgICAgICBjYXNlIElEX0gxOgot
ICAgICAgICBjYXNlIElEX0gyOgotICAgICAgICBjYXNlIElEX0gzOgotICAgICAgICBjYXNlIElE
X0g0OgotICAgICAgICBjYXNlIElEX0g1OgotICAgICAgICBjYXNlIElEX0g2OgotICAgICAgICAg
ICAgaWYoIW4tPmlzSW5saW5lKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcG9w
QmxvY2soY3VycmVudC0+aWQoKSk7CisgICAgICAgIH0gZWxzZSBpZiAoaC0+aGFzTG9jYWxOYW1l
KEhUTUxOYW1lczo6cCgpKSB8fCBpc0hlYWRlclRhZyhjdXJyZW50VGFnTmFtZSkpIHsKKyAgICAg
ICAgICAgIGlmIChpc0lubGluZShuKSkgeworICAgICAgICAgICAgICAgIHBvcEJsb2NrKGN1cnJl
bnRUYWdOYW1lKTsKICAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElEX09QVElPTjoKLSAgICAgICAg
Y2FzZSBJRF9PUFRHUk9VUDoKLSAgICAgICAgICAgIGlmIChpZCA9PSBJRF9PUFRHUk9VUCkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBwb3BCbG9jayhjdXJyZW50LT5pZCgpKTsKKyAg
ICAgICAgfSBlbHNlIGlmIChoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvcHRpb24oKSkgfHwg
aC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b3B0Z3JvdXAoKSkpIHsKKyAgICAgICAgICAgIGlm
IChsb2NhbE5hbWUgPT0gSFRNTE5hbWVzOjpvcHRncm91cCgpKSB7CisgICAgICAgICAgICAgICAg
cG9wQmxvY2soY3VycmVudFRhZ05hbWUpOwogICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVl
OwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZihpZCA9PSBJRF9TRUxFQ1QpCi0g
ICAgICAgICAgICB7CisgICAgICAgICAgICBlbHNlIGlmIChsb2NhbE5hbWUgPT0gSFRNTE5hbWVz
OjpzZWxlY3QoKSkgewogICAgICAgICAgICAgICAgIC8vIElFIHRyZWF0cyBhIG5lc3RlZCBzZWxl
Y3QgYXMgPC9zZWxlY3Q+LiBMZXQncyBkbyB0aGUgc2FtZQotICAgICAgICAgICAgICAgIHBvcEJs
b2NrKCBJRF9TRUxFQ1QgKTsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICBwb3BCbG9jayhsb2NhbE5hbWUpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAvLyBoZWFkIGVsZW1lbnRzIGluIHRoZSBib2R5IHNob3VsZCBiZSBpZ25v
cmVkLgotICAgICAgICBjYXNlIElEX0FERFJFU1M6Ci0gICAgICAgICAgICBwb3BCbG9jayhJRF9B
RERSRVNTKTsKKyAgICAgICAgfSBlbHNlIGlmIChoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjph
ZGRyZXNzKCkpKSB7CisgICAgICAgICAgICBwb3BCbG9jayhjdXJyZW50VGFnTmFtZSk7CiAgICAg
ICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IElEX0NPTEdST1VQOgotICAgICAgICAgICAgaWYgKGlkICE9IElEX1RFWFQpIHsKLSAgICAgICAg
ICAgICAgICBwb3BCbG9jayhJRF9DT0xHUk9VUCk7CisgICAgICAgIH0gZWxzZSBpZiAoaC0+aGFz
TG9jYWxOYW1lKEhUTUxOYW1lczo6Y29sZ3JvdXAoKSkpIHsKKyAgICAgICAgICAgIGlmIChsb2Nh
bE5hbWUgIT0gdGV4dEF0b20pIHsKKyAgICAgICAgICAgICAgICBwb3BCbG9jayhjdXJyZW50VGFn
TmFtZSk7CiAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7CiAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJRF9GT05UOgotICAgICAgICAgICAgcG9w
QmxvY2soSURfRk9OVCk7CisgICAgICAgIH0gZWxzZSBpZiAoaC0+aGFzTG9jYWxOYW1lKEhUTUxO
YW1lczo6Zm9udCgpKSkgeworICAgICAgICAgICAgcG9wQmxvY2soY3VycmVudFRhZ05hbWUpOwog
ICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgIGlmKGN1cnJlbnQtPmlzRG9jdW1lbnROb2RlKCkpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYoY3VycmVudC0+Zmlyc3RDaGlsZCgpID09IDAp
IHsKLSAgICAgICAgICAgICAgICAgICAgZSA9IG5ldyBIVE1MSHRtbEVsZW1lbnRJbXBsKGRvY3Vt
ZW50KTsKLSAgICAgICAgICAgICAgICAgICAgaW5zZXJ0Tm9kZShlKTsKLSAgICAgICAgICAgICAg
ICAgICAgaGFuZGxlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgZWxzZSBpZihjdXJyZW50LT5pc0lubGluZSgpKQotICAgICAgICAgICAgewor
ICAgICAgICB9IGVsc2UgaWYgKCFoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpib2R5KCkpKSB7
CisgICAgICAgICAgICBpZiAoaXNJbmxpbmUoY3VycmVudCkpIHsKICAgICAgICAgICAgICAgICBw
b3BJbmxpbmVCbG9ja3MoKTsKICAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQotCi0gICAgICAgIC8vIGlmIHdlIGNvdWxkbid0IGhhbmRsZSB0
aGUgZXJyb3IsIGp1c3QgcmV0aHJvdyB0aGUgZXhjZXB0aW9uLi4uCi0gICAgICAgIGlmKCFoYW5k
bGVkKQotICAgICAgICB7Ci0gICAgICAgICAgICAvL2tkRGVidWcoIDYwMzUgKSA8PCAiRXhjZXB0
aW9uIGhhbmRsZXIgZmFpbGVkIGluIEhUTUxQQXJzZXI6Omluc2VydE5vZGUoKSIgPDwgZW5kbDsK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgZWxzZSBpZiAoY3VycmVudC0+
aXNEb2N1bWVudE5vZGUoKSkgeworICAgICAgICBpZiAoY3VycmVudC0+Zmlyc3RDaGlsZCgpID09
IDApIHsKKyAgICAgICAgICAgIGUgPSBuZXcgSFRNTEh0bWxFbGVtZW50SW1wbChkb2N1bWVudCk7
CisgICAgICAgICAgICBpbnNlcnROb2RlKGUpOworICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7
CiAgICAgICAgIH0KLQotICAgICAgICByZXR1cm4gaW5zZXJ0Tm9kZShuKTsKICAgICB9CisKKyAg
ICAvLyAzLiBJZiB3ZSBjb3VsZG4ndCBoYW5kbGUgdGhlIGVycm9yLCBqdXN0IHJldHVybiBmYWxz
ZSBhbmQgYXR0ZW1wdCB0byBlcnJvci1jb3JyZWN0IGFnYWluLgorICAgIGlmICghaGFuZGxlZCkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBpbnNlcnROb2RlKG4pOwogfQogCi1O
b2RlSW1wbCAqS0hUTUxQYXJzZXI6OmdldEVsZW1lbnQoVG9rZW4qIHQpCitOb2RlSW1wbCAqSFRN
TFBhcnNlcjo6Z2V0Tm9kZShUb2tlbiogdCkKIHsKLSAgICBzd2l0Y2ggKHQtPmlkKQotICAgIHsK
LSAgICBjYXNlIElEX0hFQUQ6Ci0gICAgICAgIGlmICghaGVhZCAmJiBjdXJyZW50LT5pZCgpID09
IElEX0hUTUwpIHsKLSAgICAgICAgICAgIGhlYWQgPSBuZXcgSFRNTEhlYWRFbGVtZW50SW1wbChk
b2N1bWVudCk7Ci0gICAgICAgICAgICByZXR1cm4gaGVhZDsKLSAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gMDsKLSAgICBjYXNlIElEX0JPRFk6CisgICAgLy8gSGFuZGxlIG5vbi1lbGVtZW50cyBm
aXJzdC4KKyAgICBpZiAodC0+dGFnTmFtZSA9PSB0ZXh0QXRvbSkKKyAgICAgICAgcmV0dXJuIG5l
dyBUZXh0SW1wbChkb2N1bWVudCwgdC0+dGV4dCk7CisgICAgaWYgKHQtPnRhZ05hbWUgPT0gY29t
bWVudEF0b20pIHsKKyAgICAgICAgaWYgKCFpbmNsdWRlc0NvbW1lbnRzSW5ET00pCisgICAgICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG5ldyBDb21tZW50SW1wbChkb2N1bWVudCwg
dC0+dGV4dCk7CisgICAgfQorCisgICAgLy8gTm93IGhhbmRsZSBlbGVtZW50cy4KKyAgICBpZiAo
dC0+dGFnTmFtZSA9PSBIVE1MTmFtZXM6OmhlYWQoKSkgeworICAgICAgICBpZiAoaGVhZCB8fCBj
dXJyZW50LT5sb2NhbE5hbWUoKSAhPSBIVE1MTmFtZXM6Omh0bWwoKSkKKyAgICAgICAgICAgIHJl
dHVybiAwOworICAgIH0gZWxzZSBpZiAodC0+dGFnTmFtZSA9PSBIVE1MTmFtZXM6OmJvZHkoKSkg
ewogICAgICAgICAvLyBib2R5IG5vIGxvbmdlciBhbGxvd2VkIGlmIHdlIGhhdmUgYSBmcmFtZXNl
dAogICAgICAgICBpZiAoaGF2ZUZyYW1lU2V0KQogICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
ICAgIHBvcEJsb2NrKElEX0hFQUQpOworICAgICAgICBwb3BCbG9jayhIVE1MTmFtZXM6OmhlYWQo
KSk7CiAgICAgICAgIHN0YXJ0Qm9keSgpOwotICAgICAgICByZXR1cm4gbmV3IEhUTUxCb2R5RWxl
bWVudEltcGwoZG9jdW1lbnQpOworICAgIH0KIAogLy8gZnJhbWVzCi0gICAgY2FzZSBJRF9GUkFN
RVNFVDoKLSAgICAgICAgcG9wQmxvY2soSURfSEVBRCk7CisgICAgZWxzZSBpZiAodC0+dGFnTmFt
ZSA9PSBIVE1MTmFtZXM6OmZyYW1lc2V0KCkpIHsKKyAgICAgICAgcG9wQmxvY2soSFRNTE5hbWVz
OjpoZWFkKCkpOwogICAgICAgICBpZiAoaW5Cb2R5ICYmICFoYXZlRnJhbWVTZXQgJiYgIWhhdmVD
b250ZW50KSB7Ci0gICAgICAgICAgICBwb3BCbG9jayhJRF9CT0RZKTsKKyAgICAgICAgICAgIHBv
cEJsb2NrKEhUTUxOYW1lczo6Ym9keSgpKTsKICAgICAgICAgICAgIC8vICMjIyBhY3R1YWxseSBm
b3IgSUUgZG9jdW1lbnQuYm9keSByZXR1cm5zIHRoZSBub3cgaGlkZGVuICJib2R5IiBlbGVtZW50
CiAgICAgICAgICAgICAvLyB3ZSBjYW4ndCBpbXBsZW1lbnQgdGhhdCBiZWhhdmlvdXIgbm93IGJl
Y2F1c2UgaXQgY291bGQgY2F1c2UgdG9vIG1hbnkKICAgICAgICAgICAgIC8vIHJlZ3Jlc3Npb25z
IGFuZCB0aGUgaGVhZGFjaGVzIGFyZSBub3Qgd29ydGggdGhlIHdvcmsgYXMgbG9uZyBhcyB0aGVy
ZSBpcwpAQCAtODExLDMyICs2NDUsMjEgQEAgTm9kZUltcGwgKktIVE1MUGFyc2VyOjpnZXRFbGVt
ZW50KFRva2VuKgogICAgICAgICAgICAgICAgIGRvYygpLT5ib2R5KCktPnNldEF0dHJpYnV0ZShB
VFRSX1NUWUxFLCAiZGlzcGxheTpub25lIik7CiAgICAgICAgICAgICBpbkJvZHkgPSBmYWxzZTsK
ICAgICAgICAgfQotICAgICAgICBpZiAoKGhhdmVDb250ZW50IHx8IGhhdmVGcmFtZVNldCkgJiYg
Y3VycmVudC0+aWQoKSA9PSBJRF9IVE1MKQorICAgICAgICBpZiAoKGhhdmVDb250ZW50IHx8IGhh
dmVGcmFtZVNldCkgJiYgY3VycmVudC0+bG9jYWxOYW1lKCkgPT0gSFRNTE5hbWVzOjpodG1sKCkp
CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgaGF2ZUZyYW1lU2V0ID0gdHJ1ZTsKICAg
ICAgICAgc3RhcnRCb2R5KCk7Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTEZyYW1lU2V0RWxlbWVu
dEltcGwoZG9jdW1lbnQpOwotCi0gICAgLy8gYSBiaXQgb2YgYSBzcGVjaWFsIGNhc2UsIHNpbmNl
IHRoZSBmcmFtZSBpcyBpbmxpbmVkCi0gICAgY2FzZSBJRF9JRlJBTUU6Ci0gICAgICAgIGRpc2Nh
cmRfdW50aWwgPSBJRF9JRlJBTUUgKyBJRF9DTE9TRV9UQUc7Ci0gICAgICAgIGJyZWFrOwotCisg
ICAgfSBlbHNlIGlmICh0LT50YWdOYW1lID09IEhUTUxOYW1lczo6aWZyYW1lKCkpCisgICAgICAg
IC8vIGEgYml0IG9mIGEgc3BlY2lhbCBjYXNlLCBzaW5jZSB0aGUgZnJhbWUgaXMgaW5saW5lZAor
ICAgICAgICBzZXRTa2lwTW9kZShIVE1MTmFtZXM6OmlmcmFtZSgpKTsKKyAgICAgICAgCiAvLyBm
b3JtIGVsZW1lbnRzCi0gICAgY2FzZSBJRF9GT1JNOgorICAgIGVsc2UgaWYgKHQtPnRhZ05hbWUg
PT0gSFRNTE5hbWVzOjpmb3JtKCkpIHsKICAgICAgICAgLy8gT25seSBjcmVhdGUgYSBuZXcgZm9y
bSBpZiB3ZSdyZSBub3QgYWxyZWFkeSBpbnNpZGUgb25lLgogICAgICAgICAvLyBUaGlzIGlzIGNv
bnNpc3RlbnQgd2l0aCBvdGhlciBicm93c2VycycgYmVoYXZpb3IuCiAgICAgICAgIGlmIChmb3Jt
KQogICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIGZvcm0gPSBuZXcgSFRNTEZvcm1FbGVt
ZW50SW1wbChkb2N1bWVudCk7Ci0gICAgICAgIHJldHVybiBmb3JtOwotICAgIGNhc2UgSURfQlVU
VE9OOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxCdXR0b25FbGVtZW50SW1wbChkb2N1bWVudCwg
Zm9ybSk7Ci0gICAgY2FzZSBJRF9GSUVMRFNFVDoKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MRmll
bGRTZXRFbGVtZW50SW1wbChkb2N1bWVudCwgZm9ybSk7Ci0gICAgY2FzZSBJRF9JTlBVVDoKLSAg
ICAgICAgcmV0dXJuIG5ldyBIVE1MSW5wdXRFbGVtZW50SW1wbChkb2N1bWVudCwgZm9ybSk7Ci0g
ICAgY2FzZSBJRF9JU0lOREVYOiB7CisgICAgfSBlbHNlIGlmICh0LT50YWdOYW1lID09IEhUTUxO
YW1lczo6aXNpbmRleCgpKSB7CiAgICAgICAgIE5vZGVJbXBsICpuID0gaGFuZGxlSXNpbmRleCh0
KTsKICAgICAgICAgaWYgKCFpbkJvZHkpIHsKICAgICAgICAgICAgIGlmIChpc2luZGV4KQpAQCAt
ODQ4LDI2MiArNjcxLDE3OSBAQCBOb2RlSW1wbCAqS0hUTUxQYXJzZXI6OmdldEVsZW1lbnQoVG9r
ZW4qCiAgICAgICAgIHQtPmZsYXQgPSB0cnVlOwogICAgICAgICByZXR1cm4gbjsKICAgICB9Ci0g
ICAgY2FzZSBJRF9LRVlHRU46Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTEtleWdlbkVsZW1lbnRJ
bXBsKGRvY3VtZW50LCBmb3JtKTsKLSAgICBjYXNlIElEX0xFR0VORDoKLSAgICAgICAgcmV0dXJu
IG5ldyBIVE1MTGVnZW5kRWxlbWVudEltcGwoZG9jdW1lbnQsIGZvcm0pOwotICAgIGNhc2UgSURf
T1BUR1JPVVA6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTE9wdEdyb3VwRWxlbWVudEltcGwoZG9j
dW1lbnQsIGZvcm0pOwotICAgIGNhc2UgSURfT1BUSU9OOgotICAgICAgICByZXR1cm4gbmV3IEhU
TUxPcHRpb25FbGVtZW50SW1wbChkb2N1bWVudCwgZm9ybSk7Ci0gICAgY2FzZSBJRF9TRUxFQ1Q6
CisgICAgZWxzZSBpZiAodC0+dGFnTmFtZSA9PSBIVE1MTmFtZXM6OnNlbGVjdCgpKQogICAgICAg
ICBpblNlbGVjdCA9IHRydWU7Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTFNlbGVjdEVsZW1lbnRJ
bXBsKGRvY3VtZW50LCBmb3JtKTsKLSAgICBjYXNlIElEX1RFWFRBUkVBOgotICAgICAgICByZXR1
cm4gbmV3IEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBsKGRvY3VtZW50LCBmb3JtKTsKIAogLy8gbGlz
dHMKLSAgICBjYXNlIElEX0REOgotICAgICAgICBwb3BCbG9jayhJRF9EVCk7Ci0gICAgICAgIHBv
cEJsb2NrKElEX0REKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9EVDoKLSAgICAgICAg
cG9wQmxvY2soSURfREQpOwotICAgICAgICBwb3BCbG9jayhJRF9EVCk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgSURfTEk6Ci0gICAgICAgIHBvcEJsb2NrKElEX0xJKTsKLSAgICAgICAgYnJl
YWs7Ci0KLS8vIGFuY2hvcgotICAgIGNhc2UgSURfQToKKyAgICBlbHNlIGlmICh0LT50YWdOYW1l
ID09IEhUTUxOYW1lczo6ZGQoKSkgeworICAgICAgICBwb3BCbG9jayhIVE1MTmFtZXM6OmR0KCkp
OworICAgICAgICBwb3BCbG9jayhIVE1MTmFtZXM6OmRkKCkpOworICAgIH0KKyAgICBlbHNlIGlm
ICh0LT50YWdOYW1lID09IEhUTUxOYW1lczo6ZHQoKSkgeworICAgICAgICBwb3BCbG9jayhIVE1M
TmFtZXM6OmRkKCkpOworICAgICAgICBwb3BCbG9jayhIVE1MTmFtZXM6OmR0KCkpOworICAgIH0K
KyAgICBlbHNlIGlmICh0LT50YWdOYW1lID09IEhUTUxOYW1lczo6bGkoKSkKKyAgICAgICAgcG9w
QmxvY2sodC0+dGFnTmFtZSk7CisgICAgZWxzZSBpZiAodC0+dGFnTmFtZSA9PSBIVE1MTmFtZXM6
OmEoKSkgLy8gYW5jaG9yCiAgICAgICAgIC8vIE5ldmVyIGFsbG93IG5lc3RlZCA8YT5zLgotICAg
ICAgICBwb3BCbG9jayhJRF9BKTsKLSAgICAgICAgYnJlYWs7Ci0KLS8vIGltYWdlcwotICAgIGNh
c2UgSURfSU1HOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxJbWFnZUVsZW1lbnRJbXBsKGRvY3Vt
ZW50LCBmb3JtKTsKLSAgICBjYXNlIElEX01BUDoKLSAgICAgICAgbWFwID0gbmV3IEhUTUxNYXBF
bGVtZW50SW1wbChkb2N1bWVudCk7Ci0gICAgICAgIHJldHVybiBtYXA7CisgICAgICAgIHBvcEJs
b2NrKHQtPnRhZ05hbWUpOwogCiAvLyB0YWJsZXMKLSAgICBjYXNlIElEX1RSOgotICAgICAgICBw
b3BCbG9jayhJRF9UUik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSURfVEQ6Ci0gICAgY2Fz
ZSBJRF9USDoKLSAgICAgICAgcG9wQmxvY2soSURfVEgpOwotICAgICAgICBwb3BCbG9jayhJRF9U
RCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSURfVEJPRFk6Ci0gICAgY2FzZSBJRF9USEVB
RDoKLSAgICBjYXNlIElEX1RGT09UOgotICAgICAgICBwb3BCbG9jayhJRF9USEVBRCk7Ci0gICAg
ICAgIHBvcEJsb2NrKElEX1RCT0RZKTsKLSAgICAgICAgcG9wQmxvY2soSURfVEZPT1QpOwotICAg
ICAgICBicmVhazsKKyAgICBlbHNlIGlmICh0LT50YWdOYW1lID09IEhUTUxOYW1lczo6dHIoKSkK
KyAgICAgICAgcG9wQmxvY2sodC0+dGFnTmFtZSk7CisgICAgZWxzZSBpZiAodC0+dGFnTmFtZSA9
PSBIVE1MTmFtZXM6OnRkKCkgfHwgdC0+dGFnTmFtZSA9PSBIVE1MTmFtZXM6OnRoKCkpIHsKKyAg
ICAgICAgcG9wQmxvY2soSFRNTE5hbWVzOjp0aCgpKTsKKyAgICAgICAgcG9wQmxvY2soSFRNTE5h
bWVzOjp0ZCgpKTsKKyAgICB9IGVsc2UgaWYgKHQtPnRhZ05hbWUgPT0gSFRNTE5hbWVzOjp0Ym9k
eSgpIHx8IHQtPnRhZ05hbWUgPT0gSFRNTE5hbWVzOjp0aGVhZCgpIHx8IHQtPnRhZ05hbWUgPT0g
SFRNTE5hbWVzOjp0Zm9vdCgpKSB7CisgICAgICAgIHBvcEJsb2NrKEhUTUxOYW1lczo6dGhlYWQo
KSk7CisgICAgICAgIHBvcEJsb2NrKEhUTUxOYW1lczo6dGJvZHkoKSk7CisgICAgICAgIHBvcEJs
b2NrKEhUTUxOYW1lczo6dGZvb3QoKSk7CisgICAgfQogCiAvLyBlbGVtZW50cyB3aXRoIG5vIHNw
ZWNpYWwgcmVwcmVzZW50YXRpb24gaW4gdGhlIERPTQotICAgIGNhc2UgSURfVFQ6Ci0gICAgY2Fz
ZSBJRF9VOgotICAgIGNhc2UgSURfQjoKLSAgICBjYXNlIElEX0k6Ci0gICAgY2FzZSBJRF9TOgot
ICAgIGNhc2UgSURfU1RSSUtFOgotICAgIGNhc2UgSURfQklHOgotICAgIGNhc2UgSURfU01BTEw6
Ci0gICAgICAgIGlmICghYWxsb3dOZXN0ZWRSZWR1bmRhbnRUYWcodC0+aWQpKQorICAgIGVsc2Ug
aWYgKHQtPnRhZ05hbWUgPT0gSFRNTE5hbWVzOjp0dCgpIHx8IHQtPnRhZ05hbWUgPT0gSFRNTE5h
bWVzOjp1KCkgfHwgdC0+dGFnTmFtZSA9PSBIVE1MTmFtZXM6OmIoKSB8fAorICAgICAgICAgICAg
IHQtPnRhZ05hbWUgPT0gSFRNTE5hbWVzOjppKCkgfHwgdC0+dGFnTmFtZSA9PSBIVE1MTmFtZXM6
OnMoKSB8fCB0LT50YWdOYW1lID09IEhUTUxOYW1lczo6c3RyaWtlKCkgfHwKKyAgICAgICAgICAg
ICB0LT50YWdOYW1lID09IEhUTUxOYW1lczo6YmlnKCkgfHwgdC0+dGFnTmFtZSA9PSBIVE1MTmFt
ZXM6OnNtYWxsKCkpIHsKKyAgICAgICAgaWYgKCFhbGxvd05lc3RlZFJlZHVuZGFudFRhZyh0LT50
YWdOYW1lKSkKICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBicmVhazsKLQotICAgIGNh
c2UgSURfTk9CUjoKLSAgICBjYXNlIElEX1dCUjoKLSAgICAgICAgcG9wQmxvY2sodC0+aWQpOyAv
LyBEb24ndCBhbGxvdyBuZXN0ZWQgPG5vYnI+IG9yIDx3YnI+Ci0gICAgICAgIGJyZWFrOworICAg
IH0KKyAgICBlbHNlIGlmICh0LT50YWdOYW1lID09IEhUTUxOYW1lczo6bm9icigpIHx8IHQtPnRh
Z05hbWUgPT0gSFRNTE5hbWVzOjp3YnIoKSkKKyAgICAgICAgcG9wQmxvY2sodC0+dGFnTmFtZSk7
IC8vIERvbid0IGFsbG93IG5lc3RlZCA8bm9icj4gb3IgPHdicj4KIAogLy8gdGhlc2UgYXJlIHNw
ZWNpYWwsIGFuZCBub3JtYWxseSBub3QgcmVuZGVyZWQKLSAgICBjYXNlIElEX05PRU1CRUQ6Ci0g
ICAgICAgIGRpc2NhcmRfdW50aWwgPSBJRF9OT0VNQkVEICsgSURfQ0xPU0VfVEFHOworICAgIGVs
c2UgaWYgKHQtPnRhZ05hbWUgPT0gSFRNTE5hbWVzOjpub2VtYmVkKCkpIHsKKyAgICAgICAgc2V0
U2tpcE1vZGUoSFRNTE5hbWVzOjpub2VtYmVkKCkpOwogICAgICAgICByZXR1cm4gMDsKLSAgICBj
YXNlIElEX05PRlJBTUVTOgotICAgICAgICBkaXNjYXJkX3VudGlsID0gSURfTk9GUkFNRVMgKyBJ
RF9DTE9TRV9UQUc7CisgICAgfQorICAgIGVsc2UgaWYgKHQtPnRhZ05hbWUgPT0gSFRNTE5hbWVz
Ojpub2ZyYW1lcygpKSB7CisgICAgICAgIHNldFNraXBNb2RlKEhUTUxOYW1lczo6bm9mcmFtZXMo
KSk7CiAgICAgICAgIHJldHVybiAwOwotICAgIGNhc2UgSURfTk9TQ1JJUFQ6CisgICAgfQorICAg
IGVsc2UgaWYgKHQtPnRhZ05hbWUgPT0gSFRNTE5hbWVzOjpub3NjcmlwdCgpKSB7CiAgICAgICAg
IGlmIChIVE1MV2lkZ2V0ICYmIEhUTUxXaWRnZXQtPnBhcnQoKS0+alNjcmlwdEVuYWJsZWQoKSkK
LSAgICAgICAgICAgIGRpc2NhcmRfdW50aWwgPSBJRF9OT1NDUklQVCArIElEX0NMT1NFX1RBRzsK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgY2FzZSBJRF9OT0xBWUVSOgotICAgICAgICAvL2Rpc2Nh
cmRfdW50aWwgPSBJRF9OT0xBWUVSICsgSURfQ0xPU0VfVEFHOworICAgICAgICAgICAgc2V0U2tp
cE1vZGUoSFRNTE5hbWVzOjpub3NjcmlwdCgpKTsKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgY2Fz
ZSBJRF9URVhUOgotICAgICAgICByZXR1cm4gbmV3IFRleHRJbXBsKGRvY3VtZW50LCB0LT50ZXh0
KTsKLSAgICBjYXNlIElEX0NPTU1FTlQ6Ci0gICAgICAgIGlmICghaW5jbHVkZXNDb21tZW50c0lu
RE9NKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBJ
RF9TQ1JJUFQ6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEhUTUxTY3JpcHRFbGVtZW50SW1wbCAq
c2NyaXB0RWxlbWVudCA9IG5ldyBIVE1MU2NyaXB0RWxlbWVudEltcGwoZG9jdW1lbnQpOwotICAg
ICAgICAgICAgc2NyaXB0RWxlbWVudC0+c2V0Q3JlYXRlZEJ5UGFyc2VyKHRydWUpOwotICAgICAg
ICAgICAgcmV0dXJuIHNjcmlwdEVsZW1lbnQ7Ci0gICAgICAgIH0KICAgICB9Ci0KLSAgICByZXR1
cm4gZG9jdW1lbnQtPmRvY3VtZW50KCktPmNyZWF0ZUhUTUxFbGVtZW50KHQtPmlkKTsKKyAgICBl
bHNlIGlmICh0LT50YWdOYW1lID09IEhUTUxOYW1lczo6bm9sYXllcigpKQorICAgICAgICByZXR1
cm4gMDsKKyAgICAKKyAgICByZXR1cm4gSFRNTEVsZW1lbnRGYWN0b3J5OjpjcmVhdGVIVE1MRWxl
bWVudCh0LT50YWdOYW1lLCBkb2MoKSwgZm9ybSk7CiB9CiAKICNkZWZpbmUgTUFYX1JFRFVOREFO
VCAyMAogCi1ib29sIEtIVE1MUGFyc2VyOjphbGxvd05lc3RlZFJlZHVuZGFudFRhZyhpbnQgX2lk
KQorYm9vbCBIVE1MUGFyc2VyOjphbGxvd05lc3RlZFJlZHVuZGFudFRhZyhjb25zdCBBdG9taWNT
dHJpbmcmIF90YWdOYW1lKQogewogICAgIC8vIHd3dy5saWNlby5lZHUubXggaXMgYW4gZXhhbXBs
ZSBvZiBhIHNpdGUgdGhhdCBhY2hpZXZlcyBhIGxldmVsIG9mIG5lc3Rpbmcgb2YKICAgICAvLyBh
Ym91dCAxNTAwIHRhZ3MsIGFsbCBmcm9tIGEgYnVuY2ggb2YgPGI+cy4gIFdlIHdpbGwgb25seSBh
bGxvdyBhdCBtb3N0IDIwCiAgICAgLy8gbmVzdGVkIHRhZ3Mgb2YgdGhlIHNhbWUgdHlwZSBiZWZv
cmUganVzdCBpZ25vcmluZyB0aGVtIGFsbCB0b2dldGhlci4KICAgICBpbnQgaSA9IDA7CiAgICAg
Zm9yIChIVE1MU3RhY2tFbGVtKiBjdXJyID0gYmxvY2tTdGFjazsKLSAgICAgICAgIGkgPCBNQVhf
UkVEVU5EQU5UICYmIGN1cnIgJiYgY3Vyci0+aWQgPT0gX2lkOworICAgICAgICAgaSA8IE1BWF9S
RURVTkRBTlQgJiYgY3VyciAmJiBjdXJyLT50YWdOYW1lID09IF90YWdOYW1lOwogICAgICAgICAg
Y3VyciA9IGN1cnItPm5leHQsIGkrKyk7CiAgICAgcmV0dXJuIGkgIT0gTUFYX1JFRFVOREFOVDsK
IH0KIAotdm9pZCBLSFRNTFBhcnNlcjo6cHJvY2Vzc0Nsb3NlVGFnKFRva2VuICp0KQordm9pZCBI
VE1MUGFyc2VyOjpwcm9jZXNzQ2xvc2VUYWcoVG9rZW4gKnQpCiB7Ci0gICAgLy8gc3VwcG9ydCBm
b3IgcmVhbGx5IGJyb2tlbiBodG1sLiBDYW4ndCBiZWxpZXZlIEknbSBzdXBwb3J0aW5nIHN1Y2gg
Y3JhcCAobGFycykKLSAgICBzd2l0Y2godC0+aWQpCi0gICAgewotICAgIGNhc2UgSURfSFRNTCtJ
RF9DTE9TRV9UQUc6Ci0gICAgY2FzZSBJRF9CT0RZK0lEX0NMT1NFX1RBRzoKLSAgICAgICAgLy8g
d2UgbmV2ZXIgY2xvc2UgdGhlIGJvZHkgdGFnLCBzaW5jZSBzb21lIHN0dXBpZCB3ZWIgcGFnZXMg
Y2xvc2UgaXQgYmVmb3JlIHRoZSBhY3R1YWwgZW5kIG9mIHRoZSBkb2MuCi0gICAgICAgIC8vIGxl
dCdzIHJlbHkgb24gdGhlIGVuZCgpIGNhbGwgdG8gY2xvc2UgdGhpbmdzLgorICAgIC8vIFN1cHBv
cnQgZm9yIHJlYWxseSBicm9rZW4gaHRtbC4KKyAgICAvLyB3ZSBuZXZlciBjbG9zZSB0aGUgYm9k
eSB0YWcsIHNpbmNlIHNvbWUgc3R1cGlkIHdlYiBwYWdlcyBjbG9zZSBpdCBiZWZvcmUgdGhlIGFj
dHVhbCBlbmQgb2YgdGhlIGRvYy4KKyAgICAvLyBsZXQncyByZWx5IG9uIHRoZSBlbmQoKSBjYWxs
IHRvIGNsb3NlIHRoaW5ncy4KKyAgICBpZiAodC0+dGFnTmFtZSA9PSBIVE1MTmFtZXM6Omh0bWwo
KSB8fCB0LT50YWdOYW1lID09IEhUTUxOYW1lczo6Ym9keSgpKQogICAgICAgICByZXR1cm47Ci0g
ICAgY2FzZSBJRF9GT1JNK0lEX0NMT1NFX1RBRzoKKyAgICAKKyAgICBpZiAodC0+dGFnTmFtZSA9
PSBIVE1MTmFtZXM6OmZvcm0oKSkKICAgICAgICAgZm9ybSA9IDA7Ci0gICAgICAgIC8vIHRoaXMg
b25lIGlzIHRvIGdldCB0aGUgcmlnaHQgc3R5bGUgb24gdGhlIGJvZHkgZWxlbWVudAotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIElEX01BUCtJRF9DTE9TRV9UQUc6CisgICAgZWxzZSBpZiAodC0+
dGFnTmFtZSA9PSBIVE1MTmFtZXM6Om1hcCgpKQogICAgICAgICBtYXAgPSAwOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIElEX1NFTEVDVCtJRF9DTE9TRV9UQUc6CisgICAgZWxzZSBpZiAodC0+
dGFnTmFtZSA9PSBIVE1MTmFtZXM6OnNlbGVjdCgpKQogICAgICAgICBpblNlbGVjdCA9IGZhbHNl
OwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0K
LSNpZmRlZiBQQVJTRVJfREVCVUcKLSAgICBrZERlYnVnKCA2MDM1ICkgPDwgImFkZGVkIHRoZSBm
b2xsb3dpbmcgY2hpbGRzIHRvICIgPDwgY3VycmVudC0+bm9kZU5hbWUoKS5zdHJpbmcoKSA8PCBl
bmRsOwotICAgIE5vZGVJbXBsICpjaGlsZCA9IGN1cnJlbnQtPmZpcnN0Q2hpbGQoKTsKLSAgICB3
aGlsZShjaGlsZCAhPSAwKQotICAgIHsKLSAgICAgICAga2REZWJ1ZyggNjAzNSApIDw8ICIgICAg
IiA8PCBjaGlsZC0+bm9kZU5hbWUoKS5zdHJpbmcoKSA8PCBlbmRsOwotICAgICAgICBjaGlsZCA9
IGNoaWxkLT5uZXh0U2libGluZygpOwotICAgIH0KLSNlbmRpZgorICAgICAgICAKICAgICBIVE1M
U3RhY2tFbGVtKiBvbGRFbGVtID0gYmxvY2tTdGFjazsKLSAgICBwb3BCbG9jayh0LT5pZC1JRF9D
TE9TRV9UQUcpOwotICAgIGlmIChvbGRFbGVtID09IGJsb2NrU3RhY2sgJiYgdC0+aWQgPT0gSURf
UCtJRF9DTE9TRV9UQUcpIHsKKyAgICBwb3BCbG9jayh0LT50YWdOYW1lKTsKKyAgICBpZiAob2xk
RWxlbSA9PSBibG9ja1N0YWNrICYmIHQtPnRhZ05hbWUgPT0gSFRNTE5hbWVzOjpwKCkpIHsKICAg
ICAgICAgLy8gV2UgZW5jb3VudGVyZWQgYSBzdHJheSA8L3A+LiAgQW1hemluZ2x5IEdlY2tvLCBX
aW5JRSwgYW5kIE1hY0lFIGFsbCB0cmVhdAogICAgICAgICAvLyB0aGlzIGFzIGEgdmFsaWQgYnJl
YWssIGkuZS4sIDxwPjwvcD4uICBTbyBnbyBhaGVhZCBhbmQgbWFrZSB0aGUgZW1wdHkKICAgICAg
ICAgLy8gcGFyYWdyYXBoLgotICAgICAgICB0LT5pZC09SURfQ0xPU0VfVEFHOworICAgICAgICB0
LT5iZWdpblRhZyA9IHRydWU7CiAgICAgICAgIHBhcnNlVG9rZW4odCk7Ci0gICAgICAgIHBvcEJs
b2NrKElEX1ApOworICAgICAgICBwb3BCbG9jayh0LT50YWdOYW1lKTsKICAgICB9CiAjaWZkZWYg
UEFSU0VSX0RFQlVHCiAgICAga2REZWJ1ZyggNjAzNSApIDw8ICJjbG9zZVRhZyAtLT4gY3VycmVu
dCA9ICIgPDwgY3VycmVudC0+bm9kZU5hbWUoKS5zdHJpbmcoKSA8PCBlbmRsOwogI2VuZGlmCiB9
CiAKLWJvb2wgS0hUTUxQYXJzZXI6OmlzSGVhZGVyVGFnKGludCBfaWQpCitib29sIEhUTUxQYXJz
ZXI6OmlzSGVhZGVyVGFnKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSkKIHsKLSAgICBzd2l0
Y2ggKF9pZCkgewotICAgICAgICBjYXNlIElEX0gxOgotICAgICAgICBjYXNlIElEX0gyOgotICAg
ICAgICBjYXNlIElEX0gzOgotICAgICAgICBjYXNlIElEX0g0OgotICAgICAgICBjYXNlIElEX0g1
OgotICAgICAgICBjYXNlIElEX0g2OgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgIHJldHVybiB0
YWdOYW1lID09IEhUTUxOYW1lczo6aDEoKSB8fAorICAgICAgICAgICB0YWdOYW1lID09IEhUTUxO
YW1lczo6aDIoKSB8fAorICAgICAgICAgICB0YWdOYW1lID09IEhUTUxOYW1lczo6aDMoKSB8fAor
ICAgICAgICAgICB0YWdOYW1lID09IEhUTUxOYW1lczo6aDQoKSB8fAorICAgICAgICAgICB0YWdO
YW1lID09IEhUTUxOYW1lczo6aDUoKSB8fAorICAgICAgICAgICB0YWdOYW1lID09IEhUTUxOYW1l
czo6aDYoKTsKIH0KIAotdm9pZCBLSFRNTFBhcnNlcjo6cG9wTmVzdGVkSGVhZGVyVGFnKCkKK3Zv
aWQgSFRNTFBhcnNlcjo6cG9wTmVzdGVkSGVhZGVyVGFnKCkKIHsKICAgICAvLyBUaGlzIGZ1bmN0
aW9uIG9ubHkgY2FyZXMgYWJvdXQgY2hlY2tpbmcgZm9yIG5lc3RlZCBoZWFkZXJzIHRoYXQgaGF2
ZSBvbmx5IGlubGluZXMgaW4gYmV0d2VlbiB0aGVtLgogICAgIE5vZGVJbXBsKiBjdXJyTm9kZSA9
IGN1cnJlbnQ7CiAgICAgZm9yIChIVE1MU3RhY2tFbGVtKiBjdXJyID0gYmxvY2tTdGFjazsgY3Vy
cjsgY3VyciA9IGN1cnItPm5leHQpIHsKLSAgICAgICAgaWYgKGlzSGVhZGVyVGFnKGN1cnItPmlk
KSkgewotICAgICAgICAgICAgcG9wQmxvY2soY3Vyci0+aWQpOworICAgICAgICBpZiAoaXNIZWFk
ZXJUYWcoY3Vyci0+dGFnTmFtZSkpIHsKKyAgICAgICAgICAgIHBvcEJsb2NrKGN1cnItPnRhZ05h
bWUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGlmIChjdXJyTm9k
ZSAmJiAhY3Vyck5vZGUtPmlzSW5saW5lKCkpCisgICAgICAgIGlmIChjdXJyTm9kZSAmJiAhaXNJ
bmxpbmUoY3Vyck5vZGUpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBjdXJyTm9kZSA9
IGN1cnItPm5vZGU7CiAgICAgfQogfQogCi1ib29sIEtIVE1MUGFyc2VyOjppc1Jlc2lkdWFsU3R5
bGVUYWcoaW50IF9pZCkKK2Jvb2wgSFRNTFBhcnNlcjo6aXNJbmxpbmUoRE9NOjpOb2RlSW1wbCog
bm9kZSkgY29uc3QKIHsKLSAgICBzd2l0Y2ggKF9pZCkgewotICAgICAgICBjYXNlIElEX0E6Ci0g
ICAgICAgIGNhc2UgSURfRk9OVDoKLSAgICAgICAgY2FzZSBJRF9UVDoKLSAgICAgICAgY2FzZSBJ
RF9VOgotICAgICAgICBjYXNlIElEX0I6Ci0gICAgICAgIGNhc2UgSURfSToKLSAgICAgICAgY2Fz
ZSBJRF9TOgotICAgICAgICBjYXNlIElEX1NUUklLRToKLSAgICAgICAgY2FzZSBJRF9CSUc6Ci0g
ICAgICAgIGNhc2UgSURfU01BTEw6Ci0gICAgICAgIGNhc2UgSURfRU06Ci0gICAgICAgIGNhc2Ug
SURfU1RST05HOgotICAgICAgICBjYXNlIElEX0RGTjoKLSAgICAgICAgY2FzZSBJRF9DT0RFOgot
ICAgICAgICBjYXNlIElEX1NBTVA6Ci0gICAgICAgIGNhc2UgSURfS0JEOgotICAgICAgICBjYXNl
IElEX1ZBUjoKKyAgICBpZiAobm9kZS0+aXNUZXh0Tm9kZSgpKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKworICAgIGlmIChub2RlLT5pc0hUTUxFbGVtZW50KCkpIHsKKyAgICAgICAgSFRNTEVsZW1l
bnRJbXBsKiBlID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsKj4obm9kZSk7CisgICAgICAg
IGlmIChlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjphKCkpIHx8IGUtPmhhc0xvY2FsTmFtZShI
VE1MTmFtZXM6OmZvbnQoKSkgfHwgZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dHQoKSkgfHwK
KyAgICAgICAgICAgIGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnUoKSkgfHwgZS0+aGFzTG9j
YWxOYW1lKEhUTUxOYW1lczo6YigpKSB8fCBlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjppKCkp
IHx8CisgICAgICAgICAgICBlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpzKCkpIHx8IGUtPmhh
c0xvY2FsTmFtZShIVE1MTmFtZXM6OnN0cmlrZSgpKSB8fCBlLT5oYXNMb2NhbE5hbWUoSFRNTE5h
bWVzOjpiaWcoKSkgfHwKKyAgICAgICAgICAgIGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnNt
YWxsKCkpIHx8IGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmVtKCkpIHx8IGUtPmhhc0xvY2Fs
TmFtZShIVE1MTmFtZXM6OnN0cm9uZygpKSB8fAorICAgICAgICAgICAgZS0+aGFzTG9jYWxOYW1l
KEhUTUxOYW1lczo6ZGZuKCkpIHx8IGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmNvZGUoKSkg
fHwgZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6c2FtcCgpKSB8fAorICAgICAgICAgICAgZS0+
aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6a2JkKCkpIHx8IGUtPmhhc0xvY2FsTmFtZShIVE1MTmFt
ZXM6OnZhcigpKSB8fCBlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpjaXRlKCkpIHx8CisgICAg
ICAgICAgICBlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjphYmJyKCkpIHx8IGUtPmhhc0xvY2Fs
TmFtZShIVE1MTmFtZXM6OmFjcm9ueW0oKSkgfHwgZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6
c3ViKCkpIHx8CisgICAgICAgICAgICBlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpzdXAoKSkg
fHwgZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6c3BhbigpKSB8fCBlLT5oYXNMb2NhbE5hbWUo
SFRNTE5hbWVzOjpub2JyKCkpIHx8CisgICAgICAgICAgICBlLT5oYXNMb2NhbE5hbWUoSFRNTE5h
bWVzOjp3YnIoKSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CisgICAgCisgICAgcmV0dXJuIGZhbHNl
OwogfQogCi1ib29sIEtIVE1MUGFyc2VyOjppc0FmZmVjdGVkQnlSZXNpZHVhbFN0eWxlKGludCBf
aWQpCitib29sIEhUTUxQYXJzZXI6OmlzUmVzaWR1YWxTdHlsZVRhZyhjb25zdCBBdG9taWNTdHJp
bmcmIHRhZ05hbWUpCiB7Ci0gICAgaWYgKGlzUmVzaWR1YWxTdHlsZVRhZyhfaWQpKQorICAgIHJl
dHVybiB0YWdOYW1lID09IEhUTUxOYW1lczo6YSgpIHx8IHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpm
b250KCkgfHwgdGFnTmFtZSA9PSBIVE1MTmFtZXM6OnR0KCkgfHwKKyAgICAgICAgICAgdGFnTmFt
ZSA9PSBIVE1MTmFtZXM6OnUoKSB8fCB0YWdOYW1lID09IEhUTUxOYW1lczo6YigpIHx8IHRhZ05h
bWUgPT0gSFRNTE5hbWVzOjppKCkgfHwKKyAgICAgICAgICAgdGFnTmFtZSA9PSBIVE1MTmFtZXM6
OnMoKSB8fCB0YWdOYW1lID09IEhUTUxOYW1lczo6c3RyaWtlKCkgfHwgdGFnTmFtZSA9PSBIVE1M
TmFtZXM6OmJpZygpIHx8CisgICAgICAgICAgIHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpzbWFsbCgp
IHx8IHRhZ05hbWUgPT0gSFRNTE5hbWVzOjplbSgpIHx8IHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpz
dHJvbmcoKSB8fAorICAgICAgICAgICB0YWdOYW1lID09IEhUTUxOYW1lczo6ZGZuKCkgfHwgdGFn
TmFtZSA9PSBIVE1MTmFtZXM6OmNvZGUoKSB8fCB0YWdOYW1lID09IEhUTUxOYW1lczo6c2FtcCgp
IHx8CisgICAgICAgICAgIHRhZ05hbWUgPT0gSFRNTE5hbWVzOjprYmQoKSB8fCB0YWdOYW1lID09
IEhUTUxOYW1lczo6dmFyKCk7Cit9CisKK2Jvb2wgSFRNTFBhcnNlcjo6aXNBZmZlY3RlZEJ5UmVz
aWR1YWxTdHlsZShjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUpCit7CisgICAgaWYgKGlzUmVz
aWR1YWxTdHlsZVRhZyh0YWdOYW1lKSB8fCBpc0hlYWRlclRhZyh0YWdOYW1lKSkKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgCi0gICAgc3dpdGNoIChfaWQpIHsKLSAgICAgICAgY2FzZSBJRF9Q
OgotICAgICAgICBjYXNlIElEX0RJVjoKLSAgICAgICAgY2FzZSBJRF9CTE9DS1FVT1RFOgotICAg
ICAgICBjYXNlIElEX0FERFJFU1M6Ci0gICAgICAgIGNhc2UgSURfSDE6Ci0gICAgICAgIGNhc2Ug
SURfSDI6Ci0gICAgICAgIGNhc2UgSURfSDM6Ci0gICAgICAgIGNhc2UgSURfSDQ6Ci0gICAgICAg
IGNhc2UgSURfSDU6Ci0gICAgICAgIGNhc2UgSURfSDY6Ci0gICAgICAgIGNhc2UgSURfQ0VOVEVS
OgotICAgICAgICBjYXNlIElEX1VMOgotICAgICAgICBjYXNlIElEX09MOgotICAgICAgICBjYXNl
IElEX0xJOgotICAgICAgICBjYXNlIElEX0RMOgotICAgICAgICBjYXNlIElEX0RUOgotICAgICAg
ICBjYXNlIElEX0REOgotICAgICAgICBjYXNlIElEX1BSRToKLSAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
KyAgICByZXR1cm4gdGFnTmFtZSA9PSBIVE1MTmFtZXM6OnAoKSB8fCB0YWdOYW1lID09IEhUTUxO
YW1lczo6ZGl2KCkgfHwgdGFnTmFtZSA9PSBIVE1MTmFtZXM6OmJsb2NrcXVvdGUoKSB8fAorICAg
ICAgICAgICB0YWdOYW1lID09IEhUTUxOYW1lczo6YWRkcmVzcygpIHx8IHRhZ05hbWUgPT0gSFRN
TE5hbWVzOjpjZW50ZXIoKSB8fCB0YWdOYW1lID09IEhUTUxOYW1lczo6dWwoKSB8fAorICAgICAg
ICAgICB0YWdOYW1lID09IEhUTUxOYW1lczo6b2woKSB8fCB0YWdOYW1lID09IEhUTUxOYW1lczo6
bGkoKSB8fCB0YWdOYW1lID09IEhUTUxOYW1lczo6ZGwoKSB8fAorICAgICAgICAgICB0YWdOYW1l
ID09IEhUTUxOYW1lczo6ZHQoKSB8fCB0YWdOYW1lID09IEhUTUxOYW1lczo6ZGQoKSB8fCB0YWdO
YW1lID09IEhUTUxOYW1lczo6cHJlKCk7CiB9CiAKLXZvaWQgS0hUTUxQYXJzZXI6OmhhbmRsZVJl
c2lkdWFsU3R5bGVDbG9zZVRhZ0Fjcm9zc0Jsb2NrcyhIVE1MU3RhY2tFbGVtKiBlbGVtKQordm9p
ZCBIVE1MUGFyc2VyOjpoYW5kbGVSZXNpZHVhbFN0eWxlQ2xvc2VUYWdBY3Jvc3NCbG9ja3MoSFRN
TFN0YWNrRWxlbSogZWxlbSkKIHsKICAgICAvLyBGaW5kIHRoZSBlbGVtZW50IHRoYXQgY3Jvc3Nl
cyBvdmVyIHRvIGEgaGlnaGVyIGxldmVsLiAgIEZvciBub3csIGlmIHRoZXJlIGlzIG1vcmUgdGhh
bgogICAgIC8vIG9uZSwgd2Ugd2lsbCBqdXN0IGdpdmUgdXAgYW5kIG5vdCBhdHRlbXB0IGFueSBz
b3J0IG9mIGNvcnJlY3Rpb24uICBJdCdzIGhpZ2hseSB1bmxpa2VseSB0aGF0CkBAIC0xMTI1LDcg
Kzg2NSw3IEBAIHZvaWQgS0hUTUxQYXJzZXI6OmhhbmRsZVJlc2lkdWFsU3R5bGVDbG8KICAgICAg
ICAgY3VyciA9IGN1cnItPm5leHQ7CiAgICAgfQogCi0gICAgaWYgKCFjdXJyIHx8ICFtYXhFbGVt
IHx8ICFpc0FmZmVjdGVkQnlSZXNpZHVhbFN0eWxlKG1heEVsZW0tPmlkKSkgcmV0dXJuOworICAg
IGlmICghY3VyciB8fCAhbWF4RWxlbSB8fCAhaXNBZmZlY3RlZEJ5UmVzaWR1YWxTdHlsZShtYXhF
bGVtLT50YWdOYW1lKSkgcmV0dXJuOwogCiAgICAgTm9kZUltcGwqIHJlc2lkdWFsRWxlbSA9IHBy
ZXYtPm5vZGU7CiAgICAgTm9kZUltcGwqIGJsb2NrRWxlbSA9IHByZXZNYXhFbGVtID8gcHJldk1h
eEVsZW0tPm5vZGUgOiBjdXJyZW50OwpAQCAtMTE0Nyw3ICs4ODcsNyBAQCB2b2lkIEtIVE1MUGFy
c2VyOjpoYW5kbGVSZXNpZHVhbFN0eWxlQ2xvCiAgICAgICAgIEhUTUxTdGFja0VsZW0qIHByZXZF
bGVtID0gbWF4RWxlbTsKICAgICAgICAgd2hpbGUgKGN1cnJFbGVtICE9IGVsZW0pIHsKICAgICAg
ICAgICAgIEhUTUxTdGFja0VsZW0qIG5leHRFbGVtID0gY3VyckVsZW0tPm5leHQ7Ci0gICAgICAg
ICAgICBpZiAoIWlzUmVzaWR1YWxTdHlsZVRhZyhjdXJyRWxlbS0+aWQpKSB7CisgICAgICAgICAg
ICBpZiAoIWlzUmVzaWR1YWxTdHlsZVRhZyhjdXJyRWxlbS0+dGFnTmFtZSkpIHsKICAgICAgICAg
ICAgICAgICBwcmV2RWxlbS0+bmV4dCA9IG5leHRFbGVtOwogICAgICAgICAgICAgICAgIHByZXZF
bGVtLT5ub2RlID0gY3VyckVsZW0tPm5vZGU7CiAgICAgICAgICAgICAgICAgZGVsZXRlIGN1cnJF
bGVtOwpAQCAtMTE2OSw3ICs5MDksNyBAQCB2b2lkIEtIVE1MUGFyc2VyOjpoYW5kbGVSZXNpZHVh
bFN0eWxlQ2xvCiAgICAgICAgIE5vZGVJbXBsKiBjdXJyTm9kZSA9IDA7CiAgICAgICAgIGN1cnJF
bGVtID0gbWF4RWxlbTsKICAgICAgICAgd2hpbGUgKGN1cnJFbGVtLT5ub2RlICE9IHJlc2lkdWFs
RWxlbSkgewotICAgICAgICAgICAgaWYgKGlzUmVzaWR1YWxTdHlsZVRhZyhjdXJyRWxlbS0+bm9k
ZS0+aWQoKSkpIHsKKyAgICAgICAgICAgIGlmIChpc1Jlc2lkdWFsU3R5bGVUYWcoY3VyckVsZW0t
Pm5vZGUtPmxvY2FsTmFtZSgpKSkgewogICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBhIGNsb25l
IG9mIHRoaXMgZWxlbWVudC4KICAgICAgICAgICAgICAgICBjdXJyTm9kZSA9IGN1cnJFbGVtLT5u
b2RlLT5jbG9uZU5vZGUoZmFsc2UpOwogCkBAIC0xMjQ1LDcgKzk4NSw3IEBAIHZvaWQgS0hUTUxQ
YXJzZXI6OmhhbmRsZVJlc2lkdWFsU3R5bGVDbG8KICAgICAgICAgLy8gV2Ugd2lsbCBhY3R1YWxs
eSBzY2hlZHVsZSB0aGlzIHRhZyBmb3IgcmVvcGVuaW5nCiAgICAgICAgIC8vIGFmdGVyIHdlIGNv
bXBsZXRlIHRoZSBjbG9zZSBvZiB0aGlzIGVudGlyZSBibG9jay4KICAgICAgICAgTm9kZUltcGwq
IGN1cnJOb2RlID0gY3VycmVudDsKLSAgICAgICAgaWYgKGlzUmVzaWR1YWxTdHlsZVRhZyhjdXJy
LT5pZCkpIHsKKyAgICAgICAgaWYgKGlzUmVzaWR1YWxTdHlsZVRhZyhjdXJyLT50YWdOYW1lKSkg
ewogICAgICAgICAgICAgLy8gV2UndmUgb3ZlcmxvYWRlZCB0aGUgdXNlIG9mIHN0YWNrIGVsZW1l
bnRzIGFuZCBhcmUganVzdCByZXVzaW5nIHRoZQogICAgICAgICAgICAgLy8gc3RydWN0IHdpdGgg
YSBzbGlnaHRseSBkaWZmZXJlbnQgbWVhbmluZyB0byB0aGUgdmFyaWFibGVzLiAgSW5zdGVhZCBv
ZiBjaGFpbmluZwogICAgICAgICAgICAgLy8gZnJvbSBpbm5lcm1vc3QgdG8gb3V0ZXJtb3N0LCB3
ZSBidWlsZCB1cCBhIGxpc3Qgb2YgYWxsIHRoZSB0YWdzIHdlIG5lZWQgdG8gcmVvcGVuCkBAIC0x
MjY5LDcgKzEwMDksNyBAQCB2b2lkIEtIVE1MUGFyc2VyOjpoYW5kbGVSZXNpZHVhbFN0eWxlQ2xv
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
aWYgaXQgYmVjb21lcyBuZWNlc3NhcnkgdG8gZG8gc28uCiB9CiAKLXZvaWQgS0hUTUxQYXJzZXI6
OnJlb3BlblJlc2lkdWFsU3R5bGVUYWdzKEhUTUxTdGFja0VsZW0qIGVsZW0sIERPTTo6Tm9kZUlt
cGwqIG1hbGZvcm1lZFRhYmxlUGFyZW50KQordm9pZCBIVE1MUGFyc2VyOjpyZW9wZW5SZXNpZHVh
bFN0eWxlVGFncyhIVE1MU3RhY2tFbGVtKiBlbGVtLCBET006Ok5vZGVJbXBsKiBtYWxmb3JtZWRU
YWJsZVBhcmVudCkKIHsKICAgICAvLyBMb29wIGZvciBlYWNoIHRhZyB0aGF0IG5lZWRzIHRvIGJl
IHJlb3BlbmVkLgogICAgIHdoaWxlIChlbGVtKSB7CkBAIC0xMjg2LDcgKzEwMjYsNyBAQCB2b2lk
IEtIVE1MUGFyc2VyOjpyZW9wZW5SZXNpZHVhbFN0eWxlVGFnCiAgICAgICAgIC8vIEZJWE1FOiBJ
cyBpdCByZWFsbHkgT0sgdG8gaWdub3JlIHRoZSBleGNlcHRpb25zIGhlcmU/CiAKICAgICAgICAg
Ly8gTm93IHB1c2ggYSBuZXcgc3RhY2sgZWxlbWVudCBmb3IgdGhpcyBub2RlIHdlIGp1c3QgY3Jl
YXRlZC4KLSAgICAgICAgcHVzaEJsb2NrKGVsZW0tPmlkLCBlbGVtLT5sZXZlbCk7CisgICAgICAg
IHB1c2hCbG9jayhlbGVtLT50YWdOYW1lLCBlbGVtLT5sZXZlbCk7CiAKICAgICAgICAgLy8gU2V0
IG91ciBzdHJheVRhYmxlQ29udGVudCBib29sZWFuIGlmIG5lZWRlZCwgc28gdGhhdCB0aGUgcmVv
cGVuZWQgdGFnIGFsc28ga25vd3MKICAgICAgICAgLy8gdGhhdCBpdCBpcyBpbnNpZGUgYSBtYWxm
b3JtZWQgdGFibGUuCkBAIC0xMzA3LDM1ICsxMDQ3LDIxIEBAIHZvaWQgS0hUTUxQYXJzZXI6OnJl
b3BlblJlc2lkdWFsU3R5bGVUYWcKICAgICB9CiB9CiAKLXZvaWQgS0hUTUxQYXJzZXI6OnB1c2hC
bG9jayhpbnQgX2lkLCBpbnQgX2xldmVsKQordm9pZCBIVE1MUGFyc2VyOjpwdXNoQmxvY2soY29u
c3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lLCBpbnQgX2xldmVsKQogewotICAgIEhUTUxTdGFja0Vs
ZW0gKkVsZW0gPSBuZXcgSFRNTFN0YWNrRWxlbShfaWQsIF9sZXZlbCwgY3VycmVudCwgYmxvY2tT
dGFjayk7Ci0KKyAgICBIVE1MU3RhY2tFbGVtICpFbGVtID0gbmV3IEhUTUxTdGFja0VsZW0odGFn
TmFtZSwgX2xldmVsLCBjdXJyZW50LCBibG9ja1N0YWNrKTsKICAgICBibG9ja1N0YWNrID0gRWxl
bTsKLSAgICBhZGRGb3JiaWRkZW4oX2lkLCBmb3JiaWRkZW5UYWcpOwogfQogCi12b2lkIEtIVE1M
UGFyc2VyOjpwb3BCbG9jayggaW50IF9pZCApCit2b2lkIEhUTUxQYXJzZXI6OnBvcEJsb2NrKGNv
bnN0IEF0b21pY1N0cmluZyYgX3RhZ05hbWUpCiB7CiAgICAgSFRNTFN0YWNrRWxlbSAqRWxlbSA9
IGJsb2NrU3RhY2s7CiAgICAgCiAgICAgaW50IG1heExldmVsID0gMDsKIAotI2lmZGVmIFBBUlNF
Ul9ERUJVRwotICAgIGtkRGVidWcoIDYwMzUgKSA8PCAicG9wQmxvY2soIiA8PCBnZXRUYWdOYW1l
KF9pZCkuc3RyaW5nKCkgPDwgIikiIDw8IGVuZGw7Ci0gICAgd2hpbGUoRWxlbSkgewotICAgICAg
ICBrZERlYnVnKCA2MDM1KSA8PCAiICAgPiAiIDw8IGdldFRhZ05hbWUoRWxlbS0+aWQpLnN0cmlu
ZygpIDw8IGVuZGw7Ci0gICAgICAgIEVsZW0gPSBFbGVtLT5uZXh0OwotICAgIH0KLSAgICBFbGVt
ID0gYmxvY2tTdGFjazsKLSNlbmRpZgotCi0gICAgd2hpbGUoIEVsZW0gJiYgKEVsZW0tPmlkICE9
IF9pZCkpCi0gICAgeworICAgIHdoaWxlIChFbGVtICYmIChFbGVtLT50YWdOYW1lICE9IF90YWdO
YW1lKSkgewogICAgICAgICBpZiAobWF4TGV2ZWwgPCBFbGVtLT5sZXZlbCkKLSAgICAgICAgewog
ICAgICAgICAgICAgbWF4TGV2ZWwgPSBFbGVtLT5sZXZlbDsKLSAgICAgICAgfQogICAgICAgICBF
bGVtID0gRWxlbS0+bmV4dDsKICAgICB9CiAKQEAgLTEzNDUsMjAgKzEwNzEsMTggQEAgdm9pZCBL
SFRNTFBhcnNlcjo6cG9wQmxvY2soIGludCBfaWQgKQogICAgIGlmIChtYXhMZXZlbCA+IEVsZW0t
PmxldmVsKSB7CiAgICAgICAgIC8vIFdlIGRpZG4ndCBtYXRjaCBiZWNhdXNlIHRoZSB0YWcgaXMg
aW4gYSBkaWZmZXJlbnQgc2NvcGUsIGUuZy4sCiAgICAgICAgIC8vIDxiPjxwPkZvbzwvYj4uICBU
cnkgdG8gY29ycmVjdCB0aGUgcHJvYmxlbS4KLSAgICAgICAgaWYgKCFpc1Jlc2lkdWFsU3R5bGVU
YWcoX2lkKSkKKyAgICAgICAgaWYgKCFpc1Jlc2lkdWFsU3R5bGVUYWcoX3RhZ05hbWUpKQogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICByZXR1cm4gaGFuZGxlUmVzaWR1YWxTdHlsZUNsb3Nl
VGFnQWNyb3NzQmxvY2tzKEVsZW0pOwogICAgIH0KIAotICAgIGJvb2wgaXNBZmZlY3RlZEJ5U3R5
bGUgPSBpc0FmZmVjdGVkQnlSZXNpZHVhbFN0eWxlKEVsZW0tPmlkKTsKKyAgICBib29sIGlzQWZm
ZWN0ZWRCeVN0eWxlID0gaXNBZmZlY3RlZEJ5UmVzaWR1YWxTdHlsZShFbGVtLT50YWdOYW1lKTsK
ICAgICBIVE1MU3RhY2tFbGVtKiByZXNpZHVhbFN0eWxlU3RhY2sgPSAwOwogICAgIE5vZGVJbXBs
KiBtYWxmb3JtZWRUYWJsZVBhcmVudCA9IDA7CiAgICAgCiAgICAgRWxlbSA9IGJsb2NrU3RhY2s7
Ci0gICAgd2hpbGUgKEVsZW0pCi0gICAgewotICAgICAgICBpZiAoRWxlbS0+aWQgPT0gX2lkKQot
ICAgICAgICB7CisgICAgd2hpbGUgKEVsZW0pIHsKKyAgICAgICAgaWYgKEVsZW0tPnRhZ05hbWUg
PT0gX3RhZ05hbWUpIHsKICAgICAgICAgICAgIGludCBzdHJheVRhYmxlID0gaW5TdHJheVRhYmxl
Q29udGVudDsKICAgICAgICAgICAgIHBvcE9uZUJsb2NrKCk7CiAgICAgICAgICAgICBFbGVtID0g
MDsKQEAgLTEzNjksMTQgKzEwOTMsMTMgQEAgdm9pZCBLSFRNTFBhcnNlcjo6cG9wQmxvY2soIGlu
dCBfaWQgKQogICAgICAgICAgICAgLy8gbXVzdCBhbHNvIGtub3cgdGhhdCBpdCBpcyB0aGUgcm9v
dCBvZiBtYWxmb3JtZWQgY29udGVudCBpbnNpZGUgYSA8dGJvZHk+Lzx0cj4uCiAgICAgICAgICAg
ICBpZiAoc3RyYXlUYWJsZSAmJiAoaW5TdHJheVRhYmxlQ29udGVudCA8IHN0cmF5VGFibGUpICYm
IHJlc2lkdWFsU3R5bGVTdGFjaykgewogICAgICAgICAgICAgICAgIE5vZGVJbXBsKiBjdXJyID0g
Y3VycmVudDsKLSAgICAgICAgICAgICAgICB3aGlsZSAoY3VyciAmJiBjdXJyLT5pZCgpICE9IElE
X1RBQkxFKQorICAgICAgICAgICAgICAgIHdoaWxlIChjdXJyICYmICFjdXJyLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6dGFibGUoKSkpCiAgICAgICAgICAgICAgICAgICAgIGN1cnIgPSBjdXJyLT5w
YXJlbnROb2RlKCk7CiAgICAgICAgICAgICAgICAgbWFsZm9ybWVkVGFibGVQYXJlbnQgPSBjdXJy
ID8gY3Vyci0+cGFyZW50Tm9kZSgpIDogMDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAg
ICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChFbGVtLT5pZCA9PSBJRF9GT1JN
ICYmIGZvcm0pCisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYgKGZvcm0gJiYgRWxlbS0+
dGFnTmFtZSA9PSBIVE1MTmFtZXM6OmZvcm0oKSkKICAgICAgICAgICAgICAgICAvLyBBIDxmb3Jt
PiBpcyBiZWluZyBjbG9zZWQgcHJlbWF0dXJlbHkgKGFuZCB0aGlzIGlzCiAgICAgICAgICAgICAg
ICAgLy8gbWFsZm9ybWVkIEhUTUwpLiAgU2V0IGFuIGF0dHJpYnV0ZSBvbiB0aGUgZm9ybSB0byBj
bGVhciBvdXQgaXRzCiAgICAgICAgICAgICAgICAgLy8gYm90dG9tIG1hcmdpbi4KQEAgLTEzODUs
NyArMTEwOCw3IEBAIHZvaWQgS0hUTUxQYXJzZXI6OnBvcEJsb2NrKCBpbnQgX2lkICkKICAgICAg
ICAgICAgIC8vIFNjaGVkdWxlIHRoaXMgdGFnIGZvciByZW9wZW5pbmcKICAgICAgICAgICAgIC8v
IGFmdGVyIHdlIGNvbXBsZXRlIHRoZSBjbG9zZSBvZiB0aGlzIGVudGlyZSBibG9jay4KICAgICAg
ICAgICAgIE5vZGVJbXBsKiBjdXJyTm9kZSA9IGN1cnJlbnQ7Ci0gICAgICAgICAgICBpZiAoaXNB
ZmZlY3RlZEJ5U3R5bGUgJiYgaXNSZXNpZHVhbFN0eWxlVGFnKEVsZW0tPmlkKSkgeworICAgICAg
ICAgICAgaWYgKGlzQWZmZWN0ZWRCeVN0eWxlICYmIGlzUmVzaWR1YWxTdHlsZVRhZyhFbGVtLT50
YWdOYW1lKSkgewogICAgICAgICAgICAgICAgIC8vIFdlJ3ZlIG92ZXJsb2FkZWQgdGhlIHVzZSBv
ZiBzdGFjayBlbGVtZW50cyBhbmQgYXJlIGp1c3QgcmV1c2luZyB0aGUKICAgICAgICAgICAgICAg
ICAvLyBzdHJ1Y3Qgd2l0aCBhIHNsaWdodGx5IGRpZmZlcmVudCBtZWFuaW5nIHRvIHRoZSB2YXJp
YWJsZXMuICBJbnN0ZWFkIG9mIGNoYWluaW5nCiAgICAgICAgICAgICAgICAgLy8gZnJvbSBpbm5l
cm1vc3QgdG8gb3V0ZXJtb3N0LCB3ZSBidWlsZCB1cCBhIGxpc3Qgb2YgYWxsIHRoZSB0YWdzIHdl
IG5lZWQgdG8gcmVvcGVuCkBAIC0xNDA4LDE5ICsxMTMxLDE0IEBAIHZvaWQgS0hUTUxQYXJzZXI6
OnBvcEJsb2NrKCBpbnQgX2lkICkKICAgICByZW9wZW5SZXNpZHVhbFN0eWxlVGFncyhyZXNpZHVh
bFN0eWxlU3RhY2ssIG1hbGZvcm1lZFRhYmxlUGFyZW50KTsKIH0KIAotdm9pZCBLSFRNTFBhcnNl
cjo6cG9wT25lQmxvY2soYm9vbCBkZWxCbG9jaykKK3ZvaWQgSFRNTFBhcnNlcjo6cG9wT25lQmxv
Y2soYm9vbCBkZWxCbG9jaykKIHsKICAgICBIVE1MU3RhY2tFbGVtICpFbGVtID0gYmxvY2tTdGFj
azsKIAogICAgIC8vIHdlIHNob3VsZCBuZXZlciBnZXQgaGVyZSwgYnV0IHNvbWUgYmFkIGh0bWwg
bWlnaHQgY2F1c2UgaXQuCi0jaWZuZGVmIFBBUlNFUl9ERUJVRwotICAgIGlmKCFFbGVtKSByZXR1
cm47Ci0jZWxzZQotICAgIGtkRGVidWcoIDYwMzUgKSA8PCAicG9wcGluZyBibG9jazogIiA8PCBn
ZXRUYWdOYW1lKEVsZW0tPmlkKS5zdHJpbmcoKSA8PCAiKCIgPDwgRWxlbS0+aWQgPDwgIikiIDw8
IGVuZGw7Ci0jZW5kaWYKLQotI2lmIFNQRUVEX0RFQlVHIDwgMQotICAgIGlmKChFbGVtLT5ub2Rl
ICE9IGN1cnJlbnQpKSB7CisgICAgaWYgKCFFbGVtKSByZXR1cm47CisgICAgCisgICAgaWYgKChF
bGVtLT5ub2RlICE9IGN1cnJlbnQpKSB7CiAgICAgICAgIGlmIChjdXJyZW50LT5tYWludGFpbnNT
dGF0ZSgpICYmIGRvYygpKXsKICAgICAgICAgICAgIGRvYygpLT5yZWdpc3Rlck1haW50YWluc1N0
YXRlKGN1cnJlbnQpOwogICAgICAgICAgICAgUVN0cmluZ0xpc3QgJnN0YXRlcyA9IGRvYygpLT5y
ZXN0b3JlU3RhdGUoKTsKQEAgLTE0MzEsOSArMTE0OSw2IEBAIHZvaWQgS0hUTUxQYXJzZXI6OnBv
cE9uZUJsb2NrKGJvb2wgZGVsQmwKICAgICAgICAgLy8gQSBmZXcgZWxlbWVudHMgKDxhcHBsZXQ+
LCA8b2JqZWN0PikgbmVlZCB0byBrbm93IHdoZW4gYWxsIGNoaWxkIGVsZW1lbnRzICg8cGFyYW0+
cykgYXJlIGF2YWlsYWJsZToKICAgICAgICAgY3VycmVudC0+Y2xvc2VSZW5kZXJlcigpOwogICAg
IH0KLSNlbmRpZgotCi0gICAgcmVtb3ZlRm9yYmlkZGVuKEVsZW0tPmlkLCBmb3JiaWRkZW5UYWcp
OwogCiAgICAgYmxvY2tTdGFjayA9IEVsZW0tPm5leHQ7CiAgICAgc2V0Q3VycmVudChFbGVtLT5u
b2RlKTsKQEAgLTE0NDUsMTkgKzExNjAsMTkgQEAgdm9pZCBLSFRNTFBhcnNlcjo6cG9wT25lQmxv
Y2soYm9vbCBkZWxCbAogICAgICAgICBkZWxldGUgRWxlbTsKIH0KIAotdm9pZCBLSFRNTFBhcnNl
cjo6cG9wSW5saW5lQmxvY2tzKCkKK3ZvaWQgSFRNTFBhcnNlcjo6cG9wSW5saW5lQmxvY2tzKCkK
IHsKLSAgICB3aGlsZSAoYmxvY2tTdGFjayAmJiBjdXJyZW50LT5pc0lubGluZSgpKQorICAgIHdo
aWxlIChibG9ja1N0YWNrICYmIGlzSW5saW5lKGN1cnJlbnQpKQogICAgICAgICBwb3BPbmVCbG9j
aygpOwogfQogCi12b2lkIEtIVE1MUGFyc2VyOjpmcmVlQmxvY2soKQordm9pZCBIVE1MUGFyc2Vy
OjpmcmVlQmxvY2soKQogewogICAgIHdoaWxlIChibG9ja1N0YWNrKQogICAgICAgICBwb3BPbmVC
bG9jaygpOwogfQogCi12b2lkIEtIVE1MUGFyc2VyOjpjcmVhdGVIZWFkKCkKK3ZvaWQgSFRNTFBh
cnNlcjo6Y3JlYXRlSGVhZCgpCiB7CiAgICAgaWYoaGVhZCB8fCAhZG9jKCktPmZpcnN0Q2hpbGQo
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTQ3NCw3ICsxMTg5LDcgQEAgdm9pZCBLSFRNTFBhcnNl
cjo6Y3JlYXRlSGVhZCgpCiAgICAgfQogfQogCi1Ob2RlSW1wbCAqS0hUTUxQYXJzZXI6OmhhbmRs
ZUlzaW5kZXgoIFRva2VuICp0ICkKK05vZGVJbXBsICpIVE1MUGFyc2VyOjpoYW5kbGVJc2luZGV4
KCBUb2tlbiAqdCApCiB7CiAgICAgTm9kZUltcGwgKm47CiAgICAgSFRNTEZvcm1FbGVtZW50SW1w
bCAqbXlmb3JtID0gZm9ybTsKQEAgLTE1MDQsNyArMTIxOSw3IEBAIE5vZGVJbXBsICpLSFRNTFBh
cnNlcjo6aGFuZGxlSXNpbmRleCggVG8KICAgICByZXR1cm4gbjsKIH0KIAotdm9pZCBLSFRNTFBh
cnNlcjo6c3RhcnRCb2R5KCkKK3ZvaWQgSFRNTFBhcnNlcjo6c3RhcnRCb2R5KCkKIHsKICAgICBp
ZihpbkJvZHkpIHJldHVybjsKIApAQCAtMTUxNiw3ICsxMjMxLDcgQEAgdm9pZCBLSFRNTFBhcnNl
cjo6c3RhcnRCb2R5KCkKICAgICB9CiB9CiAKLXZvaWQgS0hUTUxQYXJzZXI6OmZpbmlzaGVkKCkK
K3ZvaWQgSFRNTFBhcnNlcjo6ZmluaXNoZWQoKQogewogICAgIC8vIEluIHRoZSBjYXNlIG9mIGEg
Y29tcGxldGVseSBlbXB0eSBkb2N1bWVudCwgaGVyZSdzIHRoZSBwbGFjZSB0byBjcmVhdGUgdGhl
IEhUTUwgZWxlbWVudC4KICAgICBpZiAoY3VycmVudC0+aXNEb2N1bWVudE5vZGUoKSAmJiBjdXJy
ZW50LT5maXJzdENoaWxkKCkgPT0gMCkgewpJbmRleDoga2h0bWwvaHRtbC9odG1scGFyc2VyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1scGFy
c2VyLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjcKZGlmZiAtdSAtcCAtcjEuMjcga2h0bWwv
aHRtbC9odG1scGFyc2VyLmgKLS0tIGtodG1sL2h0bWwvaHRtbHBhcnNlci5oCTYgSmFuIDIwMDUg
MjE6MTM6MTYgLTAwMDAJMS4yNworKysga2h0bWwvaHRtbC9odG1scGFyc2VyLmgJMjMgSnVuIDIw
MDUgMjE6NTI6NDUgLTAwMDAKQEAgLTI5LDE5ICsyOSw5IEBACiAjaWZuZGVmIEhUTUxQQVJTRVJf
SAogI2RlZmluZSBIVE1MUEFSU0VSX0gKIAotLy8gMCBhbGwKLS8vIDEgZG9tdHJlZSArIHJlbmRl
cnRyZWUgKyBzdHlsZUZvckVsZW1lbnQsIG5vIGxheW91dGluZwotLy8gMiBkb210cmVlIG9ubHkK
LSNkZWZpbmUgU1BFRURfREVCVUcgMAotCi0jaWZkZWYgU1BFRURfREVCVUcKLSNpbmNsdWRlIDxx
ZGF0ZXRpbWUuaD4KLSNlbmRpZgotCiAjaW5jbHVkZSAiZG9tL2RvbV9zdHJpbmcuaCIKICNpbmNs
dWRlICJ4bWwvZG9tX25vZGVpbXBsLmgiCiAjaW5jbHVkZSAiaHRtbC9odG1sX2RvY3VtZW50aW1w
bC5oIgotI2luY2x1ZGUgIm1pc2MvaHRtbHRhZ3MuaCIKIAogY2xhc3MgS0hUTUxWaWV3OwogY2xh
c3MgSFRNTFN0YWNrRWxlbTsKQEAgLTYxLDE4ICs1MSwxNiBAQCBuYW1lc3BhY2Uga2h0bWwgewog
ICAgIGNsYXNzIFRva2VuOwogfTsKIAotY2xhc3MgS0hUTUxQYXJzZXI7Ci0KIC8qKgogICogVGhl
IHBhcnNlciBmb3IgaHRtbC4gSXQgcmVjZWl2ZXMgYSBzdHJlYW0gb2YgdG9rZW5zIGZyb20gdGhl
IEhUTUxUb2tlbml6ZXIsIGFuZAogICogYnVpbGRzIHVwIHRoZSBEb2N1bWVudCBzdHJ1Y3R1cmUg
Zm9ybSBpdC4KICAqLwotY2xhc3MgS0hUTUxQYXJzZXIKK2NsYXNzIEhUTUxQYXJzZXIKIHsKIHB1
YmxpYzoKLSAgICBLSFRNTFBhcnNlcihLSFRNTFZpZXcgKncsIERPTTo6RG9jdW1lbnRQdHIgKmks
IGJvb2wgaW5jbHVkZXNDb21tZW50cz1mYWxzZSk7Ci0gICAgS0hUTUxQYXJzZXIoRE9NOjpEb2N1
bWVudEZyYWdtZW50SW1wbCAqZnJhZywgRE9NOjpEb2N1bWVudFB0ciAqZG9jLCBib29sIGluY2x1
ZGVzQ29tbWVudHM9ZmFsc2UpOwotICAgIHZpcnR1YWwgfktIVE1MUGFyc2VyKCk7CisgICAgSFRN
TFBhcnNlcihLSFRNTFZpZXcgKncsIERPTTo6RG9jdW1lbnRQdHIgKmksIGJvb2wgaW5jbHVkZXND
b21tZW50cz1mYWxzZSk7CisgICAgSFRNTFBhcnNlcihET006OkRvY3VtZW50RnJhZ21lbnRJbXBs
ICpmcmFnLCBET006OkRvY3VtZW50UHRyICpkb2MsIGJvb2wgaW5jbHVkZXNDb21tZW50cz1mYWxz
ZSk7CisgICAgdmlydHVhbCB+SFRNTFBhcnNlcigpOwogCiAgICAgLyoqCiAgICAgICogcGFyc2Vz
IG9uZSB0b2tlbiBkZWxpdmVyZWQgYnkgdGhlIHRva2VuaXplcgpAQCAtODksNyArNzcsNyBAQCBw
dWJsaWM6CiAgICAgICovCiAgICAgdm9pZCByZXNldCgpOwogCi0gICAgYm9vbCBza2lwTW9kZSgp
IGNvbnN0IHsgcmV0dXJuIChkaXNjYXJkX3VudGlsICE9IDApOyB9CisgICAgYm9vbCBza2lwTW9k
ZSgpIGNvbnN0IHsgcmV0dXJuICFkaXNjYXJkX3VudGlsLmlzTnVsbCgpOyB9CiAgICAgYm9vbCBu
b1NwYWNlcygpIGNvbnN0IHsgcmV0dXJuICFpbkJvZHk7IH0KICAgICBib29sIHNlbGVjdE1vZGUo
KSBjb25zdCB7IHJldHVybiBpblNlbGVjdDsgfQogCkBAIC05NywzMSArODUsMzIgQEAgcHVibGlj
OgogICAgIERPTTo6RG9jdW1lbnRQdHIgKmRvY1B0cigpIGNvbnN0IHsgcmV0dXJuIGRvY3VtZW50
OyB9CiAKIHByb3RlY3RlZDoKLSAgICB2b2lkIHNldEN1cnJlbnQoRE9NOjpOb2RlSW1wbCAqbmV3
Q3VycmVudCk7CisgICAgdm9pZCBzZXRDdXJyZW50KERPTTo6Tm9kZUltcGwqIG5ld0N1cnJlbnQp
OworICAgIHZvaWQgc2V0U2tpcE1vZGUoY29uc3QgRE9NOjpRdWFsaWZpZWROYW1lJiBxTmFtZSkg
eyBkaXNjYXJkX3VudGlsID0gcU5hbWUubG9jYWxOYW1lKCk7IH0KIAogICAgIEtIVE1MVmlldyAq
SFRNTFdpZGdldDsKICAgICBET006OkRvY3VtZW50UHRyICpkb2N1bWVudDsKIAogICAgIC8qCi0g
ICAgICogZ2VuZXJhdGUgYW4gZWxlbWVudCBmcm9tIHRoZSB0b2tlbgorICAgICAqIGdlbmVyYXRl
IGEgbm9kZSBmcm9tIHRoZSB0b2tlbgogICAgICAqLwotICAgIERPTTo6Tm9kZUltcGwgKmdldEVs
ZW1lbnQoa2h0bWw6OlRva2VuICopOworICAgIERPTTo6Tm9kZUltcGwgKmdldE5vZGUoa2h0bWw6
OlRva2VuICopOwogCiAgICAgdm9pZCBwcm9jZXNzQ2xvc2VUYWcoa2h0bWw6OlRva2VuICopOwog
CiAgICAgYm9vbCBpbnNlcnROb2RlKERPTTo6Tm9kZUltcGwgKm4sIGJvb2wgZmxhdCA9IGZhbHNl
KTsKKyAgICBib29sIGhhbmRsZUVycm9yKERPTTo6Tm9kZUltcGwqIG4sIGJvb2wgZmxhdCwgY29u
c3QgRE9NOjpBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSwgaW50IHRhZ1ByaW9yaXR5KTsKKyAgICAK
KyAgICAvLyBUaGUgY3VycmVudGx5IGFjdGl2ZSBlbGVtZW50ICh0aGUgb25lIG5ldyBlbGVtZW50
cyB3aWxsIGJlIGFkZGVkIHRvKS4gIENhbiBiZSBhIERvY3VtZW50RnJhZ21lbnQsIGEgRG9jdW1l
bnQgb3IgYW4gRWxlbWVudC4KKyAgICBET006Ok5vZGVJbXBsKiBjdXJyZW50OwogCi0gICAgLyoK
LSAgICAgKiBUaGUgY3VycmVudGx5IGFjdGl2ZSBlbGVtZW50ICh0aGUgb25lIG5ldyBlbGVtZW50
cyB3aWxsIGJlIGFkZGVkIHRvKQotICAgICAqLwotICAgIERPTTo6Tm9kZUltcGwgKmN1cnJlbnQ7
CiAgICAgYm9vbCBjdXJyZW50SXNSZWZlcmVuY2VkOwogCiAgICAgSFRNTFN0YWNrRWxlbSAqYmxv
Y2tTdGFjazsKIAotICAgIHZvaWQgcHVzaEJsb2NrKCBpbnQgX2lkLCBpbnQgX2xldmVsKTsKLQot
ICAgIHZvaWQgcG9wQmxvY2soIGludCBfaWQgKTsKKyAgICB2b2lkIHB1c2hCbG9jayhjb25zdCBE
T006OkF0b21pY1N0cmluZyYgdGFnTmFtZSwgaW50IF9sZXZlbCk7CisgICAgdm9pZCBwb3BCbG9j
ayhjb25zdCBET006OkF0b21pY1N0cmluZyYgdGFnTmFtZSk7CisgICAgdm9pZCBwb3BCbG9jayhj
b25zdCBET006OlF1YWxpZmllZE5hbWUmIHFOYW1lKSB7IHJldHVybiBwb3BCbG9jayhxTmFtZS5s
b2NhbE5hbWUoKSk7IH0gLy8gQ29udmVuaWVuY2UgZnVuY3Rpb24gZm9yIHJlYWRhYmlsaXR5Lgog
ICAgIHZvaWQgcG9wT25lQmxvY2soYm9vbCBkZWxCbG9jayA9IHRydWUpOwogICAgIHZvaWQgcG9w
SW5saW5lQmxvY2tzKCk7CiAKQEAgLTEyOSwxNiArMTE4LDE4IEBAIHByb3RlY3RlZDoKIAogICAg
IHZvaWQgY3JlYXRlSGVhZCgpOwogCi0gICAgYm9vbCBpc1Jlc2lkdWFsU3R5bGVUYWcoaW50IF9p
ZCk7Ci0gICAgYm9vbCBpc0FmZmVjdGVkQnlSZXNpZHVhbFN0eWxlKGludCBfaWQpOworICAgIGJv
b2wgaXNSZXNpZHVhbFN0eWxlVGFnKGNvbnN0IERPTTo6QXRvbWljU3RyaW5nJiB0YWdOYW1lKTsK
KyAgICBib29sIGlzQWZmZWN0ZWRCeVJlc2lkdWFsU3R5bGUoY29uc3QgRE9NOjpBdG9taWNTdHJp
bmcmIHRhZ05hbWUpOwogICAgIHZvaWQgaGFuZGxlUmVzaWR1YWxTdHlsZUNsb3NlVGFnQWNyb3Nz
QmxvY2tzKEhUTUxTdGFja0VsZW0qIGVsZW0pOwogICAgIHZvaWQgcmVvcGVuUmVzaWR1YWxTdHls
ZVRhZ3MoSFRNTFN0YWNrRWxlbSogZWxlbSwgRE9NOjpOb2RlSW1wbCogbWFsZm9ybWVkVGFibGVQ
YXJlbnQpOwogCi0gICAgYm9vbCBhbGxvd05lc3RlZFJlZHVuZGFudFRhZyhpbnQgX2lkKTsKKyAg
ICBib29sIGFsbG93TmVzdGVkUmVkdW5kYW50VGFnKGNvbnN0IERPTTo6QXRvbWljU3RyaW5nJiB0
YWdOYW1lKTsKICAgICAKLSAgICBzdGF0aWMgYm9vbCBpc0hlYWRlclRhZyhpbnQgX2lkKTsKKyAg
ICBzdGF0aWMgYm9vbCBpc0hlYWRlclRhZyhjb25zdCBET006OkF0b21pY1N0cmluZyYgdGFnTmFt
ZSk7CiAgICAgdm9pZCBwb3BOZXN0ZWRIZWFkZXJUYWcoKTsKIAorICAgIGJvb2wgaXNJbmxpbmUo
RE9NOjpOb2RlSW1wbCogbm9kZSkgY29uc3Q7CisgICAgCiAgICAgLyoKICAgICAgKiBjdXJyZW50
bHkgYWN0aXZlIGZvcm0KICAgICAgKi8KQEAgLTE3NSwxOCArMTY2LDEyIEBAIHByb3RlY3RlZDoK
ICAgICAvKgogICAgICAqIHRlbGxzIHRoZSBwYXJzZXIgdG8gZGlzY2FyZCBhbGwgdGFncywgdW50
aWwgaXQgcmVhY2hlcyB0aGUgb25lIHNwZWNpZmllZAogICAgICAqLwotICAgIGludCBkaXNjYXJk
X3VudGlsOworICAgIERPTTo6QXRvbWljU3RyaW5nIGRpc2NhcmRfdW50aWw7CiAKICAgICBib29s
IGhlYWRMb2FkZWQ7CiAgICAgaW50IGluU3RyYXlUYWJsZUNvbnRlbnQ7CiAKICAgICBib29sIGlu
Y2x1ZGVzQ29tbWVudHNJbkRPTTsKLSAgICAKLSAgICB1c2hvcnQgZm9yYmlkZGVuVGFnW0lEX0xB
U1RfVEFHICsgMV07Ci0gICAgCi0jaWYgU1BFRURfREVCVUcgPiAwCi0gICAgUVRpbWUgcXQ7Ci0j
ZW5kaWYKIH07CiAKICNlbmRpZiAvLyBIVE1MUEFSU0VSX0gKSW5kZXg6IGtodG1sL2h0bWwvaHRt
bHRva2VuaXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0
bWwvaHRtbC9odG1sdG9rZW5pemVyLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS45MwpkaWZm
IC11IC1wIC1yMS45MyBraHRtbC9odG1sL2h0bWx0b2tlbml6ZXIuY3BwCi0tLSBraHRtbC9odG1s
L2h0bWx0b2tlbml6ZXIuY3BwCTE3IEp1biAyMDA1IDIwOjAwOjEwIC0wMDAwCTEuOTMKKysrIGto
dG1sL2h0bWwvaHRtbHRva2VuaXplci5jcHAJMjMgSnVuIDIwMDUgMjE6NTI6NDcgLTAwMDAKQEAg
LTM5LDcgKzM5LDYgQEAKICNpbmNsdWRlICJodG1sL2h0bWx0b2tlbml6ZXIuaCIKICNpbmNsdWRl
ICJodG1sL2h0bWxfZG9jdW1lbnRpbXBsLmgiCiAjaW5jbHVkZSAiaHRtbC9odG1scGFyc2VyLmgi
Ci0jaW5jbHVkZSAiaHRtbC9kdGQuaCIKIAogI2luY2x1ZGUgIm1pc2MvbG9hZGVyLmgiCiAjaW5j
bHVkZSAibWlzYy9odG1saGFzaGVzLmgiCkBAIC02Myw3ICs2MiwxMCBAQCB1c2luZyBET006OkRP
TVN0cmluZzsKIHVzaW5nIERPTTo6RE9NU3RyaW5nSW1wbDsKIHVzaW5nIERPTTo6RG9jdW1lbnRJ
bXBsOwogdXNpbmcgRE9NOjplbXB0eUF0b207Ci11c2luZyBET006OmVuZFRhZ1JlcXVpcmVtZW50
OwordXNpbmcgRE9NOjpjb21tZW50QXRvbTsKK3VzaW5nIERPTTo6bnVsbEF0b207Cit1c2luZyBE
T006OnRleHRBdG9tOwordXNpbmcgRE9NOjpIVE1MTmFtZXM7CiAKIC8vIHR1cm4gb2ZmIGlubGlu
aW5nIHRvIHZvaWQgd2FybmluZyB3aXRoIG5ld2VyIGdjYwogI3VuZGVmIF9faW5saW5lCkBAIC0y
MzksNyArMjQxLDcgQEAgSFRNTFRva2VuaXplcjo6SFRNTFRva2VuaXplcihET006OkRvY3VtZQog
ICAgIHNjcmlwdENvZGUgPSAwOwogICAgIHNjcmlwdENvZGVTaXplID0gc2NyaXB0Q29kZU1heFNp
emUgPSBzY3JpcHRDb2RlUmVzeW5jID0gMDsKICAgICBjaGFyc2V0cyA9IEtHbG9iYWw6OmNoYXJz
ZXRzKCk7Ci0gICAgcGFyc2VyID0gbmV3IEtIVE1MUGFyc2VyKF92aWV3LCBfZG9jLCBpbmNsdWRl
c0NvbW1lbnRzKTsKKyAgICBwYXJzZXIgPSBuZXcgSFRNTFBhcnNlcihfdmlldywgX2RvYywgaW5j
bHVkZXNDb21tZW50cyk7CiAgICAgbV9leGVjdXRpbmdTY3JpcHQgPSAwOwogICAgIGxvYWRpbmdF
eHRTY3JpcHQgPSBmYWxzZTsKICAgICBvbkhvbGQgPSBmYWxzZTsKQEAgLTI1OSw3ICsyNjEsNyBA
QCBIVE1MVG9rZW5pemVyOjpIVE1MVG9rZW5pemVyKERPTTo6RG9jdW1lCiAgICAgc2NyaXB0Q29k
ZSA9IDA7CiAgICAgc2NyaXB0Q29kZVNpemUgPSBzY3JpcHRDb2RlTWF4U2l6ZSA9IHNjcmlwdENv
ZGVSZXN5bmMgPSAwOwogICAgIGNoYXJzZXRzID0gS0dsb2JhbDo6Y2hhcnNldHMoKTsKLSAgICBw
YXJzZXIgPSBuZXcgS0hUTUxQYXJzZXIoaSwgX2RvYywgaW5jbHVkZXNDb21tZW50cyk7CisgICAg
cGFyc2VyID0gbmV3IEhUTUxQYXJzZXIoaSwgX2RvYywgaW5jbHVkZXNDb21tZW50cyk7CiAgICAg
bV9leGVjdXRpbmdTY3JpcHQgPSAwOwogICAgIGxvYWRpbmdFeHRTY3JpcHQgPSBmYWxzZTsKICAg
ICBvbkhvbGQgPSBmYWxzZTsKQEAgLTQ1MSwxMCArNDUzLDEwIEBAIHZvaWQgSFRNTFRva2VuaXpl
cjo6cGFyc2VTcGVjaWFsKFRva2VuaXoKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAg
ICAgIHByb2Nlc3NMaXN0aW5nKFRva2VuaXplclN0cmluZyhzY3JpcHRDb2RlLCBzY3JpcHRDb2Rl
U2l6ZSkpOwogICAgICAgICAgICAgICAgIHByb2Nlc3NUb2tlbigpOwotICAgICAgICAgICAgICAg
IGlmICggc3R5bGUgKSAgICAgICAgIHsgY3VyclRva2VuLmlkID0gSURfU1RZTEUgKyBJRF9DTE9T
RV9UQUc7IH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmICggdGV4dGFyZWEgKSB7IGN1cnJUb2tl
bi5pZCA9IElEX1RFWFRBUkVBICsgSURfQ0xPU0VfVEFHOyB9Ci0gICAgICAgICAgICAgICAgZWxz
ZSBpZiAoIHRpdGxlICkgeyBjdXJyVG9rZW4uaWQgPSBJRF9USVRMRSArIElEX0NMT1NFX1RBRzsg
fQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKCB4bXAgKSAgeyBjdXJyVG9rZW4uaWQgPSBJRF9Y
TVAgKyBJRF9DTE9TRV9UQUc7IH0KKyAgICAgICAgICAgICAgICBpZiAoIHN0eWxlICkgICAgICAg
ICB7IGN1cnJUb2tlbi50YWdOYW1lID0gSFRNTE5hbWVzOjpzdHlsZSgpLmxvY2FsTmFtZSgpOyBj
dXJyVG9rZW4uYmVnaW5UYWcgPSBmYWxzZTsgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKCB0
ZXh0YXJlYSApIHsgY3VyclRva2VuLnRhZ05hbWUgPSBIVE1MTmFtZXM6OnRleHRhcmVhKCkubG9j
YWxOYW1lKCk7IGN1cnJUb2tlbi5iZWdpblRhZyA9IGZhbHNlOyB9CisgICAgICAgICAgICAgICAg
ZWxzZSBpZiAoIHRpdGxlICkgeyBjdXJyVG9rZW4udGFnTmFtZSA9IEhUTUxOYW1lczo6dGl0bGUo
KS5sb2NhbE5hbWUoKTsgY3VyclRva2VuLmJlZ2luVGFnID0gZmFsc2U7IH0KKyAgICAgICAgICAg
ICAgICBlbHNlIGlmICggeG1wICkgIHsgY3VyclRva2VuLnRhZ05hbWUgPSBIVE1MTmFtZXM6Onht
cCgpLmxvY2FsTmFtZSgpOyBjdXJyVG9rZW4uYmVnaW5UYWcgPSBmYWxzZTsgfQogICAgICAgICAg
ICAgICAgIHByb2Nlc3NUb2tlbigpOwogICAgICAgICAgICAgICAgIHN0eWxlID0gc2NyaXB0ID0g
c3R5bGUgPSB0ZXh0YXJlYSA9IHRpdGxlID0geG1wID0gZmFsc2U7CiAgICAgICAgICAgICAgICAg
dHF1b3RlID0gTm9RdW90ZTsKQEAgLTUyNCw3ICs1MjYsOCBAQCB2b2lkIEhUTUxUb2tlbml6ZXI6
OnNjcmlwdEhhbmRsZXIoKQogICAgIHByb2Nlc3NMaXN0aW5nKFRva2VuaXplclN0cmluZyhzY3Jp
cHRDb2RlLCBzY3JpcHRDb2RlU2l6ZSkpOwogICAgIFFTdHJpbmcgZXhTY3JpcHQoIGJ1ZmZlciwg
ZGVzdC1idWZmZXIgKTsKICAgICBwcm9jZXNzVG9rZW4oKTsKLSAgICBjdXJyVG9rZW4uaWQgPSBJ
RF9TQ1JJUFQgKyBJRF9DTE9TRV9UQUc7CisgICAgY3VyclRva2VuLnRhZ05hbWUgPSBIVE1MTmFt
ZXM6OnNjcmlwdCgpLmxvY2FsTmFtZSgpOworICAgIGN1cnJUb2tlbi5iZWdpblRhZyA9IGZhbHNl
OwogICAgIHByb2Nlc3NUb2tlbigpOwogCiAgICAgVG9rZW5pemVyU3RyaW5nICpzYXZlZFByZXBl
bmRpbmdTcmMgPSBjdXJyZW50UHJlcGVuZGluZ1NyYzsKQEAgLTcwMSwxMCArNzA0LDExIEBAIHZv
aWQgSFRNTFRva2VuaXplcjo6cGFyc2VDb21tZW50KFRva2VuaXoKICAgICAgICAgICAgICAgICAg
ICAgICAgIGNoZWNrU2NyaXB0QnVmZmVyKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzY3Jp
cHRDb2RlWyBzY3JpcHRDb2RlU2l6ZSBdID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgIHNj
cmlwdENvZGVbIHNjcmlwdENvZGVTaXplICsgMSBdID0gMDsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGN1cnJUb2tlbi5pZCA9IElEX0NPTU1FTlQ7CisgICAgICAgICAgICAgICAgICAgICAgICBj
dXJyVG9rZW4udGFnTmFtZSA9IGNvbW1lbnRBdG9tOwogICAgICAgICAgICAgICAgICAgICAgICAg
cHJvY2Vzc0xpc3RpbmcoVG9rZW5pemVyU3RyaW5nKHNjcmlwdENvZGUsIHNjcmlwdENvZGVTaXpl
IC0gZW5kQ2hhcnNDb3VudCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc1Rva2Vu
KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjdXJyVG9rZW4uaWQgPSBJRF9DT01NRU5UICsg
SURfQ0xPU0VfVEFHOworICAgICAgICAgICAgICAgICAgICAgICAgY3VyclRva2VuLnRhZ05hbWUg
PSBjb21tZW50QXRvbTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJUb2tlbi5iZWdpblRh
ZyA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc1Rva2VuKCk7CiAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgc2NyaXB0Q29kZVNpemUgPSAw
OwpAQCAtMTA0NywyNiArMTA1MSwxNiBAQCB2b2lkIEhUTUxUb2tlbml6ZXI6OnBhcnNlVGFnKFRv
a2VuaXplclN0CiAgICAgICAgICAgICAgICAgICAgIC8vIFN0YXJ0IFRhZwogICAgICAgICAgICAg
ICAgICAgICBiZWdpblRhZyA9IHRydWU7CiAKLSAgICAgICAgICAgICAgICAvLyBBY2NlcHQgZW1w
dHkgeG1sIHRhZ3MgbGlrZSA8YnIvPi4gIFdlIHRyaW0gb2ZmIHRoZSAiLyIgc28gdGhhdCB3aGVu
IHdlIGNhbGwKLSAgICAgICAgICAgICAgICAvLyBnZXRUYWdJRCwgd2UnbGwgbG9vayB1cCAiYnIi
IGFzIHRoZSB0YWcgbmFtZSBhbmQgbm90ICJici8iLgorICAgICAgICAgICAgICAgIC8vIElnbm9y
ZSB0aGUgLyBpbiBmYWtlIHhtbCB0YWdzIGxpa2UgPGJyLz4uICBXZSB0cmltIG9mZiB0aGUgIi8i
IHNvIHRoYXQgd2UnbGwgZ2V0ICJiciIgYXMgdGhlIHRhZyBuYW1lIGFuZCBub3QgImJyLyIuCiAg
ICAgICAgICAgICAgICAgaWYobGVuID4gMSAmJiBwdHJbbGVuLTFdID09ICcvJyApCiAgICAgICAg
ICAgICAgICAgICAgIHB0clstLWxlbl0gPSAnXDAnOwogCi0gICAgICAgICAgICAgICAgLy8gTG9v
ayB1cCB0aGUgdGFnSUQgZm9yIHRoZSBzcGVjaWZpZWQgdGFnIG5hbWUgKG5vdyB0aGF0IHdlJ3Zl
IHNoYXZlZCBvZmYgYW55Ci0gICAgICAgICAgICAgICAgLy8gaW52YWxpZCAvIHRoYXQgbWlnaHQg
aGF2ZSBmb2xsb3dlZCB0aGUgbmFtZSkuCi0gICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQg
dGFnSUQgPSBnZXRUYWdJRChwdHIsIGxlbik7Ci0gICAgICAgICAgICAgICAgaWYgKCF0YWdJRCkg
ewotICAgICAgICAgICAgICAgICAgICBET01TdHJpbmcgdGFnTmFtZShwdHIpOwotICAgICAgICAg
ICAgICAgICAgICBEb2N1bWVudEltcGwgKmRvYyA9IHBhcnNlci0+ZG9jUHRyKCktPmRvY3VtZW50
KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChkb2MtPmlzVmFsaWROYW1lKHRhZ05hbWUpKQot
ICAgICAgICAgICAgICAgICAgICAgICAgdGFnSUQgPSBwYXJzZXItPmRvY1B0cigpLT5kb2N1bWVu
dCgpLT50YWdJZCgwLCB0YWdOYW1lLmltcGxlbWVudGF0aW9uKCksIGZhbHNlKTsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHRhZ0lEKSB7Ci0jaWZkZWYgVE9LRU5fREVC
VUcKLSAgICAgICAgICAgICAgICAgICAgUUNTdHJpbmcgdG1wKHB0ciwgbGVuKzEpOwotICAgICAg
ICAgICAgICAgICAgICBrZERlYnVnKCA2MDM2ICkgPDwgImZvdW5kIHRhZyBpZD0iIDw8IHRhZ0lE
IDw8ICI6ICIgPDwgdG1wLmRhdGEoKSA8PCBlbmRsOwotI2VuZGlmCi0gICAgICAgICAgICAgICAg
ICAgIGN1cnJUb2tlbi5pZCA9IGJlZ2luVGFnID8gdGFnSUQgOiB0YWdJRCArIElEX0NMT1NFX1RB
RzsKKyAgICAgICAgICAgICAgICAvLyBOb3cgdGhhdCB3ZSd2ZSBzaGF2ZWQgb2ZmIGFueSBpbnZh
bGlkIC8gdGhhdCBtaWdodCBoYXZlIGZvbGxvd2VkIHRoZSBuYW1lKSwgbWFrZSB0aGUgdGFnLgor
ICAgICAgICAgICAgICAgIERPTVN0cmluZyB0YWdOYW1lKHB0cik7CisgICAgICAgICAgICAgICAg
RG9jdW1lbnRJbXBsICpkb2MgPSBwYXJzZXItPmRvY1B0cigpLT5kb2N1bWVudCgpOworICAgICAg
ICAgICAgICAgIGlmIChkb2MtPmlzVmFsaWROYW1lKHRhZ05hbWUpKSB7CisgICAgICAgICAgICAg
ICAgICAgIGN1cnJUb2tlbi50YWdOYW1lID0gQXRvbWljU3RyaW5nKHRhZ05hbWUubG93ZXIoKSk7
IC8vIFdlIGhhdmUgdG8gY2Fub25pY2FsaXplIG9uIGxvd2VyLWNhc2UuCisgICAgICAgICAgICAg
ICAgICAgIGN1cnJUb2tlbi5iZWdpblRhZyA9IGJlZ2luVGFnOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICBkZXN0ID0gYnVmZmVyOwogICAgICAgICAgICAgICAgIHRhZyA9IFNl
YXJjaEF0dHJpYnV0ZTsKQEAgLTExMTgsMTUgKzExMTIsNiBAQCB2b2lkIEhUTUxUb2tlbml6ZXI6
OnBhcnNlVGFnKFRva2VuaXplclN0CiAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyTmFtZSA9IFFTdHJpbmc6OmZyb21MYXRpbjEo
UUNTdHJpbmcoY0J1ZmZlciwgY0J1ZmZlclBvcysxKS5kYXRhKCkpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGF0dHJOYW1lUHJlc2VudCA9ICFhdHRyTmFtZS5pc0VtcHR5KCk7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgZGVsaWJlcmF0ZSBxdWlyayB0
byBtYXRjaCBNb3ppbGxhIGFuZCBPcGVyYS4gIFdlIGhhdmUgdG8gZG8gdGhpcwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIHNpbmNlIHNpdGVzIHRoYXQgdXNlIHRoZSAic3RhbmRhcmRz
LWNvbXBsaWFudCIgcGF0aCBzb21ldGltZXMgc2VuZAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIDxzY3JpcHQgc3JjPSJmb28uanMiLz4uICBCb3RoIE1veiBhbmQgT3BlcmEgd2lsbCBo
b25vciB0aGlzLCBkZXNwaXRlIGl0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYmVp
bmcgYm9ndXMgSFRNTC4gIFRoZXkgZG8gbm90IGhvbm9yIHRoZSAiLyIgZm9yIG90aGVyIHRhZ3Mu
ICBUaGlzIGJlaGF2aW9yCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWxzbyBkZXZp
YXRlcyBmcm9tIFdpbklFLCBidXQgaW4gdGhpcyBjYXNlIHdlJ2xsIGp1c3QgY29weSBNb3ogYW5k
IE9wZXJhLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyVG9rZW4uaWQgPT0g
SURfU0NSSVBUICYmIGN1cmNoYXIgPT0gJz4nICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGF0dHJOYW1lID09ICIvIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y3VyclRva2VuLmZsYXQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0ID0gYnVmZmVy
OwpAQCAtMTMyOCwxOCArMTMxMywxNSBAQCB2b2lkIEhUTUxUb2tlbml6ZXI6OnBhcnNlVGFnKFRv
a2VuaXplclN0CiAgICAgICAgICAgICBpZiAoKnNyYyAhPSAnPCcpCiAgICAgICAgICAgICAgICAg
KytzcmM7CiAKLSAgICAgICAgICAgIGlmICggIWN1cnJUb2tlbi5pZCApIC8vc3RvcCBpZiB0YWcg
aXMgdW5rbm93bgorICAgICAgICAgICAgaWYgKGN1cnJUb2tlbi50YWdOYW1lID09IG51bGxBdG9t
KSAvL3N0b3AgaWYgdGFnIGlzIHVua25vd24KICAgICAgICAgICAgICAgICByZXR1cm47CiAKLSAg
ICAgICAgICAgIHVpbnQgdGFnSUQgPSBjdXJyVG9rZW4uaWQ7CisgICAgICAgICAgICBjb25zdCBB
dG9taWNTdHJpbmcmIHRhZ05hbWUgPSBjdXJyVG9rZW4udGFnTmFtZTsKICNpZiBkZWZpbmVkKFRP
S0VOX0RFQlVHKSAmJiBUT0tFTl9ERUJVRyA+IDAKICAgICAgICAgICAgIGtkRGVidWcoIDYwMzYg
KSA8PCAiYXBwZW5kaW5nIFRhZzogIiA8PCB0YWdJRCA8PCBlbmRsOwogI2VuZGlmCi0gICAgICAg
ICAgICBib29sIGJlZ2luVGFnID0gIWN1cnJUb2tlbi5mbGF0ICYmICh0YWdJRCA8PSBJRF9DTE9T
RV9UQUcpOwotCi0gICAgICAgICAgICBpZiAodGFnSUQgPiBJRF9DTE9TRV9UQUcpCi0gICAgICAg
ICAgICAgICAgdGFnSUQgLT0gSURfQ0xPU0VfVEFHOwotICAgICAgICAgICAgZWxzZSBpZiAodGFn
SUQgPT0gSURfU0NSSVBUKSB7CisgICAgICAgICAgICBib29sIGJlZ2luVGFnID0gIWN1cnJUb2tl
bi5mbGF0ICYmIGN1cnJUb2tlbi5iZWdpblRhZzsKKyAgICAgICAgICAgIGlmIChiZWdpblRhZyAm
JiBjdXJyVG9rZW4udGFnTmFtZSA9PSBIVE1MTmFtZXM6OnNjcmlwdCgpKSB7CiAgICAgICAgICAg
ICAgICAgQXR0cmlidXRlSW1wbCogYSA9IDA7CiAgICAgICAgICAgICAgICAgYm9vbCBmb3VuZFR5
cGVBdHRyaWJ1dGUgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBzY3JpcHRTcmMgPSBRU3RyaW5n
OjpudWxsOwpAQCAtMTQxNiw3MCArMTM5OCw1MyBAQCB2b2lkIEhUTUxUb2tlbml6ZXI6OnBhcnNl
VGFnKFRva2VuaXplclN0CiAKICAgICAgICAgICAgIC8vIHdlIGhhdmUgdG8gdGFrZSBjYXJlIHRv
IGNsb3NlIHRoZSBwcmUgYmxvY2sgaW4KICAgICAgICAgICAgIC8vIGNhc2Ugd2UgZW5jb3VudGVy
IGFuIHVuYWxsb3dlZCBlbGVtZW50Li4uLgotICAgICAgICAgICAgaWYocHJlICYmIGJlZ2luVGFn
ICYmICFET006OmNoZWNrQ2hpbGQoSURfUFJFLCB0YWdJRCwgIXBhcnNlci0+ZG9jKCktPmluQ29t
cGF0TW9kZSgpKSkgewotICAgICAgICAgICAgICAgIGtkRGVidWcoNjAzNikgPDwgIiBub3QgYWxs
b3dlZCBpbiA8cHJlPiAiIDw8IChpbnQpdGFnSUQgPDwgZW5kbDsKKyAgICAgICAgICAgIGlmIChw
cmUgJiYgYmVnaW5UYWcgLyogRklYTUU6IGNoZWNrQ2hpbGQhISEgJiYgIURPTTo6Y2hlY2tDaGls
ZChJRF9QUkUsIHRhZ0lELCAhcGFyc2VyLT5kb2MoKS0+aW5Db21wYXRNb2RlKCkpKi8pCiAgICAg
ICAgICAgICAgICAgcHJlID0gZmFsc2U7Ci0gICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHN3
aXRjaCggdGFnSUQgKSB7Ci0gICAgICAgICAgICBjYXNlIElEX1BSRToKKyAgICAgICAgICAgIGlm
ICh0YWdOYW1lID09IEhUTUxOYW1lczo6cHJlKCkpIHsKICAgICAgICAgICAgICAgICBwcmVQb3Mg
PSAwOwogICAgICAgICAgICAgICAgIHByZSA9IGJlZ2luVGFnOwogICAgICAgICAgICAgICAgIGRp
c2NhcmQgPSBMRkRpc2NhcmQ7IC8vIERpc2NhcmQgdGhlIGZpcnN0IExGIGFmdGVyIHdlIG9wZW4g
YSBwcmUuCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIElEX1NDUklQ
VDoKKyAgICAgICAgICAgIH0gZWxzZSBpZiAodGFnTmFtZSA9PSBIVE1MTmFtZXM6OnNjcmlwdCgp
KSB7CiAgICAgICAgICAgICAgICAgaWYgKGJlZ2luVGFnKSB7CiAgICAgICAgICAgICAgICAgICAg
IHNlYXJjaFN0b3BwZXIgPSBzY3JpcHRFbmQ7CiAgICAgICAgICAgICAgICAgICAgIHNlYXJjaFN0
b3BwZXJMZW4gPSA4OwogICAgICAgICAgICAgICAgICAgICBzY3JpcHQgPSB0cnVlOwogICAgICAg
ICAgICAgICAgICAgICBwYXJzZVNwZWNpYWwoc3JjKTsKICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgZWxzZSBpZiAodGFnSUQgPD0gSURfQ0xPU0VfVEFHKSB7IC8vIEhhbmRsZSA8
c2NyaXB0IHNyYz0iZm9vIi8+Ci0gICAgICAgICAgICAgICAgICAgIHNjcmlwdCA9IHRydWU7Ci0g
ICAgICAgICAgICAgICAgICAgIHNjcmlwdEhhbmRsZXIoKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIElEX1NUWUxFOgorICAgICAg
ICAgICAgfSBlbHNlIGlmICh0YWdOYW1lID09IEhUTUxOYW1lczo6c3R5bGUoKSkgewogICAgICAg
ICAgICAgICAgIGlmIChiZWdpblRhZykgewogICAgICAgICAgICAgICAgICAgICBzZWFyY2hTdG9w
cGVyID0gc3R5bGVFbmQ7CiAgICAgICAgICAgICAgICAgICAgIHNlYXJjaFN0b3BwZXJMZW4gPSA3
OwogICAgICAgICAgICAgICAgICAgICBzdHlsZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAg
IHBhcnNlU3BlY2lhbChzcmMpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGNhc2UgSURfVEVYVEFSRUE6CisgICAgICAgICAgICB9IGVsc2Ug
aWYgKHRhZ05hbWUgPT0gSFRNTE5hbWVzOjp0ZXh0YXJlYSgpKSB7CiAgICAgICAgICAgICAgICAg
aWYoYmVnaW5UYWcpIHsKICAgICAgICAgICAgICAgICAgICAgc2VhcmNoU3RvcHBlciA9IHRleHRh
cmVhRW5kOwogICAgICAgICAgICAgICAgICAgICBzZWFyY2hTdG9wcGVyTGVuID0gMTA7CiAgICAg
ICAgICAgICAgICAgICAgIHRleHRhcmVhID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgcGFy
c2VTcGVjaWFsKHNyYyk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgY2FzZSBJRF9USVRMRToKLSAgICAgICAgICAgICAgICBpZiAoYmVnaW5U
YWcpIHsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAodGFnTmFtZSA9PSBIVE1MTmFtZXM6OnRpdGxl
KCkpIHsKKyAgICAgICAgICAgICAgICAgaWYgKGJlZ2luVGFnKSB7CiAgICAgICAgICAgICAgICAg
ICAgIHNlYXJjaFN0b3BwZXIgPSB0aXRsZUVuZDsKICAgICAgICAgICAgICAgICAgICAgc2VhcmNo
U3RvcHBlckxlbiA9IDc7CiAgICAgICAgICAgICAgICAgICAgIHRpdGxlID0gdHJ1ZTsKICAgICAg
ICAgICAgICAgICAgICAgcGFyc2VTcGVjaWFsKHNyYyk7CiAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBJRF9YTVA6CisgICAgICAgICAg
ICB9IGVsc2UgaWYgKHRhZ05hbWUgPT0gSFRNTE5hbWVzOjp4bXAoKSkgewogICAgICAgICAgICAg
ICAgIGlmIChiZWdpblRhZykgewogICAgICAgICAgICAgICAgICAgICBzZWFyY2hTdG9wcGVyID0g
eG1wRW5kOwogICAgICAgICAgICAgICAgICAgICBzZWFyY2hTdG9wcGVyTGVuID0gNTsKICAgICAg
ICAgICAgICAgICAgICAgeG1wID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgcGFyc2VTcGVj
aWFsKHNyYyk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgY2FzZSBJRF9TRUxFQ1Q6CisgICAgICAgICAgICB9IGVsc2UgaWYgKHRhZ05hbWUg
PT0gSFRNTE5hbWVzOjpzZWxlY3QoKSkKICAgICAgICAgICAgICAgICBzZWxlY3QgPSBiZWdpblRh
ZzsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgSURfUExBSU5URVhU
OgorICAgICAgICAgICAgZWxzZSBpZiAodGFnTmFtZSA9PSBIVE1MTmFtZXM6OnBsYWludGV4dCgp
KQogICAgICAgICAgICAgICAgIHBsYWludGV4dCA9IGJlZ2luVGFnOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm47IC8vIEZpbmlzaGVk
IHBhcnNpbmcgdGFnIQorICAgICAgICAgICAgcmV0dXJuOyAvLyBGaW5pc2hlZCBwYXJzaW5nIHRh
ZzsKICAgICAgICAgfQogICAgICAgICB9IC8vIGVuZCBzd2l0Y2gKICAgICB9CkBAIC0xOTg5LDEw
ICsxOTU0LDEwIEBAIHZvaWQgSFRNTFRva2VuaXplcjo6cHJvY2Vzc1Rva2VuKCkKICNlbmRpZgog
ICAgICAgICBjdXJyVG9rZW4udGV4dCA9IG5ldyBET01TdHJpbmdJbXBsKCBidWZmZXIsIGRlc3Qg
LSBidWZmZXIgKTsKICAgICAgICAgY3VyclRva2VuLnRleHQtPnJlZigpOwotICAgICAgICBpZiAo
Y3VyclRva2VuLmlkICE9IElEX0NPTU1FTlQpCi0gICAgICAgICAgICBjdXJyVG9rZW4uaWQgPSBJ
RF9URVhUOworICAgICAgICBpZiAoY3VyclRva2VuLnRhZ05hbWUgIT0gY29tbWVudEF0b20pCisg
ICAgICAgICAgICBjdXJyVG9rZW4udGFnTmFtZSA9IHRleHRBdG9tOwogICAgIH0KLSAgICBlbHNl
IGlmKCFjdXJyVG9rZW4uaWQpIHsKKyAgICBlbHNlIGlmIChjdXJyVG9rZW4udGFnTmFtZSA9PSBu
dWxsQXRvbSkgewogICAgICAgICBjdXJyVG9rZW4ucmVzZXQoKTsKICAgICAgICAgaWYgKGpzUHJv
eHkpCiAgICAgICAgICAgICBqc1Byb3h5LT5zZXRFdmVudEhhbmRsZXJMaW5lbm8obGluZW5vK3Ny
Yy5saW5lQ291bnQoKSk7CkluZGV4OiBraHRtbC9odG1sL2h0bWx0b2tlbml6ZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9odG1sL2h0bWx0b2tlbml6ZXIu
aCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zNApkaWZmIC11IC1wIC1yMS4zNCBraHRtbC9odG1s
L2h0bWx0b2tlbml6ZXIuaAotLS0ga2h0bWwvaHRtbC9odG1sdG9rZW5pemVyLmgJMTEgTWF5IDIw
MDUgMDU6NDk6MzQgLTAwMDAJMS4zNAorKysga2h0bWwvaHRtbC9odG1sdG9rZW5pemVyLmgJMjMg
SnVuIDIwMDUgMjE6NTI6NDcgLTAwMDAKQEAgLTM0LDggKzM0LDYgQEAKICNpbmNsdWRlIDxxcHRy
cXVldWUuaD4KIAogI2luY2x1ZGUgIm1pc2MvbG9hZGVyX2NsaWVudC5oIgotI2luY2x1ZGUgIm1p
c2MvaHRtbHRhZ3MuaCIKLSNpbmNsdWRlICJ4bWwvZG9tX3N0cmluZ2ltcGwuaCIKICNpbmNsdWRl
ICJ4bWwveG1sX3Rva2VuaXplci5oIgogI2luY2x1ZGUgImh0bWwvaHRtbF9lbGVtZW50aW1wbC5o
IgogI2luY2x1ZGUgInhtbC9kb21fZG9jaW1wbC5oIgpAQCAtNDcsNyArNDUsNyBAQAogI2VuZGlm
CiAKIGNsYXNzIEtDaGFyc2V0czsKLWNsYXNzIEtIVE1MUGFyc2VyOworY2xhc3MgSFRNTFBhcnNl
cjsKIGNsYXNzIEtIVE1MVmlldzsKIAogbmFtZXNwYWNlIERPTSB7CkBAIC03MCwyMiArNjgsMjQg
QEAgY2xhc3MgVG9rZW4KIHsKIHB1YmxpYzoKICAgICBUb2tlbigpIHsKLSAgICAgICAgaWQgPSAw
OwogICAgICAgICBhdHRycyA9IDA7CiAgICAgICAgIHRleHQgPSAwOworICAgICAgICBiZWdpblRh
ZyA9IHRydWU7CiAgICAgICAgIGZsYXQgPSBmYWxzZTsKICAgICAgICAgLy9xRGVidWcoIm5ldyB0
b2tlbiwgY3JlYXRpbmcgJTA4bHgiLCBhdHRycyk7CiAgICAgfQorCiAgICAgflRva2VuKCkgewot
ICAgICAgICBpZihhdHRycykgYXR0cnMtPmRlcmVmKCk7Ci0gICAgICAgIGlmKHRleHQpIHRleHQt
PmRlcmVmKCk7CisgICAgICAgIGlmIChhdHRycykgYXR0cnMtPmRlcmVmKCk7CisgICAgICAgIGlm
ICh0ZXh0KSB0ZXh0LT5kZXJlZigpOwogICAgIH0KKwogICAgIHZvaWQgYWRkQXR0cmlidXRlKERP
TTo6RG9jdW1lbnRJbXBsKiBkb2MsIFFDaGFyKiBidWZmZXIsIGNvbnN0IFFTdHJpbmcmIGF0dHJO
YW1lLCBjb25zdCBET006OkF0b21pY1N0cmluZyYgdikKICAgICB7CiAgICAgICAgIERPTTo6QXR0
cmlidXRlSW1wbCogYSA9IDA7Ci0gICAgICAgIGlmKGJ1ZmZlci0+dW5pY29kZSgpKQorICAgICAg
ICBpZiAoYnVmZmVyLT51bmljb2RlKCkpCiAgICAgICAgICAgICBhID0gbmV3IERPTTo6TWFwcGVk
QXR0cmlidXRlSW1wbChidWZmZXItPnVuaWNvZGUoKSwgdik7Ci0gICAgICAgIGVsc2UgaWYgKCAh
YXR0ck5hbWUuaXNFbXB0eSgpICYmIGF0dHJOYW1lICE9ICIvIiApCisgICAgICAgIGVsc2UgaWYg
KCFhdHRyTmFtZS5pc0VtcHR5KCkgJiYgYXR0ck5hbWUgIT0gIi8iKQogICAgICAgICAgICAgYSA9
IG5ldyBET006Ok1hcHBlZEF0dHJpYnV0ZUltcGwoZG9jLT5hdHRySWQoMCwgRE9NOjpET01TdHJp
bmcoYXR0ck5hbWUpLmltcGxlbWVudGF0aW9uKCksIGZhbHNlKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYpOwogCkBAIC05NywyMyArOTcsMzMgQEAgcHVi
bGljOgogICAgICAgICAgICAgYXR0cnMtPmluc2VydEF0dHJpYnV0ZShhKTsKICAgICAgICAgfQog
ICAgIH0KKworICAgIGJvb2wgaXNPcGVuVGFnKGNvbnN0IERPTTo6UXVhbGlmaWVkTmFtZSYgZnVs
bE5hbWUpIGNvbnN0IHsgcmV0dXJuIGJlZ2luVGFnICYmIGZ1bGxOYW1lLmxvY2FsTmFtZSgpID09
IHRhZ05hbWU7IH0KKyAgICBib29sIGlzQ2xvc2VUYWcoY29uc3QgRE9NOjpRdWFsaWZpZWROYW1l
JiBmdWxsTmFtZSkgY29uc3QgeyByZXR1cm4gIWJlZ2luVGFnICYmIGZ1bGxOYW1lLmxvY2FsTmFt
ZSgpID09IHRhZ05hbWU7IH0KKwogICAgIHZvaWQgcmVzZXQoKQogICAgIHsKLSAgICAgICAgaWYo
YXR0cnMpIHsKKyAgICAgICAgaWYgKGF0dHJzKSB7CiAgICAgICAgICAgICBhdHRycy0+ZGVyZWYo
KTsKICAgICAgICAgICAgIGF0dHJzID0gMDsKICAgICAgICAgfQotICAgICAgICBpZCA9IDA7Ci0g
ICAgICAgIGlmKHRleHQpIHsKKyAgICAgICAgCisgICAgICAgIHRhZ05hbWUgPSBET006Om51bGxB
dG9tOworICAgICAgICAKKyAgICAgICAgaWYgKHRleHQpIHsKICAgICAgICAgICAgIHRleHQtPmRl
cmVmKCk7CiAgICAgICAgICAgICB0ZXh0ID0gMDsKICAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgYmVnaW5UYWcgPSB0cnVlOwogICAgICAgICBmbGF0ID0gZmFsc2U7CiAgICAgfQorCiAgICAg
RE9NOjpOYW1lZE1hcHBlZEF0dHJNYXBJbXBsKiBhdHRyczsKICAgICBET006OkRPTVN0cmluZ0lt
cGwqIHRleHQ7Ci0gICAgdXNob3J0IGlkOwotICAgIGJvb2wgZmxhdDsKKyAgICBET006OkF0b21p
Y1N0cmluZyB0YWdOYW1lOworICAgIGJvb2wgYmVnaW5UYWcgOiAxOworICAgIGJvb2wgZmxhdCA6
IDE7CiB9OwogCiAvLyBUaGUgY291bnQgb2Ygc3BhY2VzIHVzZWQgZm9yIGVhY2ggdGFiLgpAQCAt
MzY4LDcgKzM3OCw3IEBAIHByb3RlY3RlZDoKICAgICBUb2tlbml6ZXJTdHJpbmcgc3JjOwogCiAg
ICAgS0NoYXJzZXRzICpjaGFyc2V0czsKLSAgICBLSFRNTFBhcnNlciAqcGFyc2VyOworICAgIEhU
TUxQYXJzZXIgKnBhcnNlcjsKIAogICAgIFFHdWFyZGVkUHRyPEtIVE1MVmlldz4gdmlldzsKICAg
ICAKSW5kZXg6IGtodG1sL21pc2MvZGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1dlYkNvcmUva2h0bWwvbWlzYy9kZWNvZGVyLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS4zNApkaWZmIC11IC1wIC1yMS4zNCBraHRtbC9taXNjL2RlY29kZXIuY3BwCi0tLSBraHRt
bC9taXNjL2RlY29kZXIuY3BwCTIgSnVsIDIwMDQgMTc6MDM6MzIgLTAwMDAJMS4zNAorKysga2h0
bWwvbWlzYy9kZWNvZGVyLmNwcAkyMyBKdW4gMjAwNSAyMTo1Mjo0NyAtMDAwMApAQCAtNDEsNiAr
NDEsMTIgQEAgdXNpbmcgbmFtZXNwYWNlIGtodG1sOwogI2luY2x1ZGUgPGtkZWJ1Zy5oPgogI2lu
Y2x1ZGUgPGtsb2NhbGUuaD4KIAorI2luY2x1ZGUgImh0bWxuYW1lcy5oIgorCit1c2luZyBET006
OkF0b21pY1N0cmluZzsKK3VzaW5nIERPTTo6SFRNTE5hbWVzOwordXNpbmcgRE9NOjpudWxsQXRv
bTsKKwogY2xhc3MgS2FuamlDb2RlCiB7CiBwdWJsaWM6CkBAIC01MjYsMTIgKzUzMiw4IEBAIFFT
dHJpbmcgRGVjb2Rlcjo6ZGVjb2RlKGNvbnN0IGNoYXIgKmRhdGEKICAgICAgICAgICAgICAgICAg
ICAgICAgIGxlbisrOwogICAgICAgICAgICAgICAgICAgICB9CiAJCSAgICB0bXBbbGVuXSA9IDA7
Ci0gICAgICAgICAgICAgICAgICAgIGludCBpZCA9IGtodG1sOjpnZXRUYWdJRCh0bXAsIGxlbik7
Ci0gICAgICAgICAgICAgICAgICAgIGlmKGVuZCkgaWQgKz0gSURfQ0xPU0VfVEFHOwotCi0gICAg
ICAgICAgICAgICAgICAgIHN3aXRjaCggaWQgKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2Ug
SURfTUVUQToKLSAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBBdG9t
aWNTdHJpbmcgdGFnKHRtcCk7CisgICAgICAgICAgICAgICAgICAgIGlmICghZW5kICYmIHRhZyA9
PSBIVE1MTmFtZXM6Om1ldGEoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm91bmQg
YSBtZXRhIHRhZy4uLgogICAgICAgICAgICAgICAgICAgICAgICAgLy9wdHIgKz0gNTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiBlbmQgPSBwdHI7CkBAIC01NzAsMjggKzU3
MiwxMCBAQCBRU3RyaW5nIERlY29kZXI6OmRlY29kZShjb25zdCBjaGFyICpkYXRhCiAKIAkJCSAg
ICBwb3MgPSBlbmRwb3MgKyAxOwogCQkJfQotCQkgICAgfQotICAgICAgICAgICAgICAgICAgICBj
YXNlIChJRF9NRVRBK0lEX0NMT1NFX1RBRyk6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURf
U0NSSVBUOgotICAgICAgICAgICAgICAgICAgICBjYXNlIChJRF9TQ1JJUFQrSURfQ0xPU0VfVEFH
KToKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9OT1NDUklQVDoKLSAgICAgICAgICAgICAg
ICAgICAgY2FzZSAoSURfTk9TQ1JJUFQrSURfQ0xPU0VfVEFHKToKLSAgICAgICAgICAgICAgICAg
ICAgY2FzZSBJRF9TVFlMRToKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAoSURfU1RZTEUrSURf
Q0xPU0VfVEFHKToKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9MSU5LOgotICAgICAgICAg
ICAgICAgICAgICBjYXNlIChJRF9MSU5LK0lEX0NMT1NFX1RBRyk6Ci0gICAgICAgICAgICAgICAg
ICAgIGNhc2UgSURfT0JKRUNUOgotICAgICAgICAgICAgICAgICAgICBjYXNlIChJRF9PQkpFQ1Qr
SURfQ0xPU0VfVEFHKToKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9USVRMRToKLSAgICAg
ICAgICAgICAgICAgICAgY2FzZSAoSURfVElUTEUrSURfQ0xPU0VfVEFHKToKLSAgICAgICAgICAg
ICAgICAgICAgY2FzZSBJRF9CQVNFOgotICAgICAgICAgICAgICAgICAgICBjYXNlIChJRF9CQVNF
K0lEX0NMT1NFX1RBRyk6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfSFRNTDoKLSAgICAg
ICAgICAgICAgICAgICAgY2FzZSBJRF9IRUFEOgotICAgICAgICAgICAgICAgICAgICBjYXNlIDA6
Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgKDAgKyBJRF9DTE9TRV9UQUcgKToKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorCQkg
ICAgfSBlbHNlIGlmICh0YWcgIT0gSFRNTE5hbWVzOjpzY3JpcHQoKSAmJiB0YWcgIT0gSFRNTE5h
bWVzOjpub3NjcmlwdCgpICYmIHRhZyAhPSBIVE1MTmFtZXM6OnN0eWxlKCkgJiYKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0YWcgIT0gSFRNTE5hbWVzOjpsaW5rKCkgJiYgdGFnICE9
IEhUTUxOYW1lczo6bWV0YSgpICYmIHRhZyAhPSBIVE1MTmFtZXM6Om9iamVjdCgpICYmCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnICE9IEhUTUxOYW1lczo6dGl0bGUoKSAmJiB0
YWcgIT0gSFRNTE5hbWVzOjpiYXNlKCkgJiYgdGFnICE9IEhUTUxOYW1lczo6aHRtbCgpICYmCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnICE9IEhUTUxOYW1lczo6aGVhZCgpICYm
IHRhZyAhPSBudWxsQXRvbSkgewogICAgICAgICAgICAgICAgICAgICAgICAgYm9keSA9IHRydWU7
CiAjaWZkZWYgREVDT0RFX0RFQlVHCiAJCQlrZERlYnVnKCA2MDA1ICkgPDwgIkRlY29kZXI6IG5v
IGNoYXJzZXQgZm91bmQuIElkPSIgPDwgaWQgPDwgZW5kbDsKSW5kZXg6IGtodG1sL21pc2MvaHRt
bGhhc2hlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwv
bWlzYy9odG1saGFzaGVzLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMApkaWZmIC11IC1w
IC1yMS4xMCBraHRtbC9taXNjL2h0bWxoYXNoZXMuY3BwCi0tLSBraHRtbC9taXNjL2h0bWxoYXNo
ZXMuY3BwCTUgSmFuIDIwMDUgMjI6NTY6NDYgLTAwMDAJMS4xMAorKysga2h0bWwvbWlzYy9odG1s
aGFzaGVzLmNwcAkyMyBKdW4gMjAwNSAyMTo1Mjo0NyAtMDAwMApAQCAtMjUsMjIgKzI1LDEzIEBA
CiAvLyB0dXJuIG9mZiBpbmxpbmluZyB0byB2b2lkIHdhcm5pbmcgd2l0aCBuZXdlciBnY2MKICN1
bmRlZiBfX2lubGluZQogI2RlZmluZSBfX2lubGluZQotI2luY2x1ZGUgImh0bWx0YWdzLmMiCiAj
aW5jbHVkZSAiaHRtbGF0dHJzLmMiCiAjdW5kZWYgX19pbmxpbmUKIAotdW5zaWduZWQgc2hvcnQg
a2h0bWw6OmdldFRhZ0lEKGNvbnN0IGNoYXIgKnRhZ1N0ciwgaW50IGxlbikKK3Vuc2lnbmVkIHNo
b3J0IGtodG1sOjpnZXRBdHRySUQoY29uc3QgY2hhciAqYXR0clN0ciwgaW50IGxlbikKIHsKLSAg
ICBjb25zdCBzdHJ1Y3QgdGFncyAqdGFnUHRyID0gZmluZFRhZyh0YWdTdHIsIGxlbik7Ci0gICAg
aWYgKCF0YWdQdHIpCisgICAgY29uc3Qgc3RydWN0IGF0dHJzICphdHRyUHRyID0gZmluZEF0dHIo
YXR0clN0ciwgbGVuKTsKKyAgICBpZiAoIWF0dHJQdHIpCiAgICAgICAgIHJldHVybiAwOwotICAg
IHJldHVybiB0YWdQdHItPmlkOwotfQotCi11bnNpZ25lZCBzaG9ydCBraHRtbDo6Z2V0QXR0cklE
KGNvbnN0IGNoYXIgKnRhZ1N0ciwgaW50IGxlbikKLXsKLSAgICBjb25zdCBzdHJ1Y3QgYXR0cnMg
KnRhZ1B0ciA9IGZpbmRBdHRyKHRhZ1N0ciwgbGVuKTsKLSAgICBpZiAoIXRhZ1B0cikKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIHRhZ1B0ci0+aWQ7CisgICAgcmV0dXJuIGF0dHJQdHIt
PmlkOwogfQpJbmRleDoga2h0bWwvbWlzYy9odG1saGFzaGVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvbWlzYy9odG1saGFzaGVzLmgsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuNgpkaWZmIC11IC1wIC1yMS42IGtodG1sL21pc2MvaHRtbGhhc2hlcy5oCi0t
LSBraHRtbC9taXNjL2h0bWxoYXNoZXMuaAk1IEphbiAyMDA1IDIyOjU2OjQ2IC0wMDAwCTEuNgor
Kysga2h0bWwvbWlzYy9odG1saGFzaGVzLmgJMjMgSnVuIDIwMDUgMjE6NTI6NDcgLTAwMDAKQEAg
LTIzLDEyICsyMywxMCBAQAogI2lmbmRlZiBIVE1MSEFTSEVTX0gKICNkZWZpbmUgSFRNTEhBU0hF
U19ICiAKLSNpbmNsdWRlICJodG1sdGFncy5oIgogI2luY2x1ZGUgImh0bWxhdHRycy5oIgogCiBu
YW1lc3BhY2Uga2h0bWwKIHsKLSAgdW5zaWduZWQgc2hvcnQgZ2V0VGFnSUQoY29uc3QgY2hhciAq
dGFnU3RyLCBpbnQgbGVuKTsKICAgdW5zaWduZWQgc2hvcnQgZ2V0QXR0cklEKGNvbnN0IGNoYXIg
KnRhZ1N0ciwgaW50IGxlbik7CiB9CiAKSW5kZXg6IGtodG1sL21pc2MvaHRtbHRhZ3MuaW4KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZToga2h0bWwvbWlzYy9odG1sdGFncy5pbgpkaWZmIC1OIGtodG1sL21p
c2MvaHRtbHRhZ3MuaW4KLS0tIGtodG1sL21pc2MvaHRtbHRhZ3MuaW4JMTEgTWF5IDIwMDUgMjM6
NDU6MjkgLTAwMDAJMS43CisrKyAvZGV2L251bGwJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMApA
QCAtMSwxMDIgKzAsMCBAQAotYQotYWJicgotYWNyb255bQotYWRkcmVzcwotYXBwbGV0Ci1hcmVh
Ci1iCi1iYXNlCi1iYXNlZm9udAotYmRvCi1iaWcKLWJsb2NrcXVvdGUKLWJvZHkKLWJyCi1idXR0
b24KLWNhbnZhcwotY2FwdGlvbgotY2VudGVyCi1jaXRlCi1jb2RlCi1jb2wKLWNvbGdyb3VwCi1k
ZAotZGVsCi1kZm4KLWRpcgotZGl2Ci1kbAotZHQKLWVtCi1lbWJlZAotZmllbGRzZXQKLWZvbnQK
LWZvcm0KLWZyYW1lCi1mcmFtZXNldAotaDEKLWgyCi1oMwotaDQKLWg1Ci1oNgotaGVhZAotaHIK
LWh0bWwKLWkKLWlmcmFtZQotaW1nCi1pbnB1dAotaW5zCi1pc2luZGV4Ci1rYmQKLWtleWdlbgot
bGFiZWwKLWxheWVyCi1sZWdlbmQKLWxpCi1saW5rCi1tYXAKLW1hcnF1ZWUKLW1lbnUKLW1ldGEK
LW5vYnIKLW5vZW1iZWQKLW5vZnJhbWVzCi1ub3NjcmlwdAotbm9sYXllcgotb2JqZWN0Ci1vbAot
b3B0Z3JvdXAKLW9wdGlvbgotcAotcGFyYW0KLXBsYWludGV4dAotcHJlCi1xCi1zCi1zYW1wCi1z
Y3JpcHQKLXNlbGVjdAotc21hbGwKLXNwYW4KLXN0cmlrZQotc3Ryb25nCi1zdHlsZQotc3ViCi1z
dXAKLXRhYmxlCi10Ym9keQotdGQKLXRleHRhcmVhCi10Zm9vdAotdGgKLXRoZWFkCi10aXRsZQot
dHIKLXR0Ci11Ci11bAotdmFyCi13YnIKLXhtcApJbmRleDoga2h0bWwvbWlzYy9tYWtldGFncwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiBraHRtbC9taXNjL21ha2V0YWdzCmRpZmYgLU4ga2h0bWwvbWlz
Yy9tYWtldGFncwotLS0ga2h0bWwvbWlzYy9tYWtldGFncwk2IEphbiAyMDA1IDIxOjEzOjE2IC0w
MDAwCTEuMTMKKysrIC9kZXYvbnVsbAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCkBAIC0xLDEy
MSArMCwwIEBACi0jIS91c3IvYmluL3BlcmwKLSMgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUg
S0RFIGxpYnJhcmllcwotIwotIyAgIENvcHlyaWdodCAoQykgMTk5OCBXYWxkbyBCYXN0aWFuIChi
YXN0aWFuQGtkZS5vcmcpCi0jICAgICAgICAgICAgICAgICAxOTk5IExhcnMgS25vbGwgKGtub2xs
QGtkZS5vcmcpCi0jICAgQ29weXJpZ2h0IChDKSAyMDA0IEFwcGxlIENvbXB1dGVyLCBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSMgICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotIyAgIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotIyAgIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KLSMKLSMgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIyAgIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0jICAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0jCi0jICAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQotIyAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0jICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAotIyAgIEJvc3RvbiwgTUEg
MDIxMTEtMTMwNywgVVNBLgotIwotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMKLSMgIEtERSBIVE1M
IFdpZGdldCAtLSBTY3JpcHQgdG8gZ2VuZXJhdGUgaHRtbHRhZ3MuYyBhbmQgaHRtbHRhZ3MuaAot
IwotCi11c2Ugc3RyaWN0OwotCi1vcGVuIElOLCAiaHRtbHRhZ3MuaW4iCi0gIG9yIGRpZSAiQ2Fu
J3Qgb3BlbiBpblxuIjsKLW9wZW4gaGVhZGVyLCAiPmh0bWx0YWdzLmgiCi0gIG9yIGRpZSAiQ2Fu
J3Qgb3BlbiBoZWFkZXJcbiI7Ci1vcGVuIG91dCwgIj5odG1sdGFncy5ncGVyZiIKLSAgb3IgZGll
ICJDYW4ndCBvcGVuIG91dFxuIjsKLQotcHJpbnQgb3V0ICIle1xuLyogVGhpcyBmaWxlIGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gaHRtbHRhZ3MuaW4gYnkgbWFrZXRhZ3MsIGRvIG5v
dCBlZGl0ICovXG4vKiBDb3B5cmlnaHQgMTk5OSBMYXJzIEtub2xsICovXG4jaW5jbHVkZSBcImh0
bWx0YWdzLmhcIlxuJX1cbiI7Ci1wcmludCBvdXQgInN0cnVjdCB0YWdzIHtcbiAgICBjb25zdCBj
aGFyICpuYW1lO1xuICAgIGludCBpZDtcbn07XG4lJVxuIjsKLQotcHJpbnQgaGVhZGVyICIvKiBU
aGlzIGZpbGUgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbQotaHRtbHRhZ3MuaW4gYnkg
bWFrZXRhZ3MsIGRvIG5vdCBlZGl0ICovXG4vKiBDb3B5cmlnaHQgMTk5OSBMYXJzIEtub2xsICov
XG4vKiBDb3B5cmlnaHQgMjAwNCBBcHBsZSBDb21wdXRlciwgSW5jLiAqL1xuXG4jaWZuZGVmIEtI
VE1MX1RBR1NfSFxuI2RlZmluZSBLSFRNTF9UQUdTX0hcblxuI2luY2x1ZGUgXCJkb20vZG9tX3N0
cmluZy5oXCJcblxuIjsKLQotcHJpbnQgaGVhZGVyICJET006OkRPTVN0cmluZyBnZXRUYWdOYW1l
KHVuc2lnbmVkIHNob3J0IGlkKTtcblxuIjsKLQotbXkgJG51bSA9IDA7Ci1teSAkb3BlblRhZ3Mg
PSAiIjsKLW15ICRjbG9zZVRhZ3MgPSAiIjsKLXdoaWxlICg8SU4+KSB7Ci0gICAgY2hvbXA7Ci0g
ICAgbXkgJGF0dHIgPSAkXzsKLSAgICAkbnVtICs9IDE7Ci0gICAgbXkgJHVwID0gdWMoJGF0dHIp
OwotICAgICRvcGVuVGFncyAuPSAiICAgIFwiJHVwXCIsXG4iOwotICAgICRjbG9zZVRhZ3MgLj0g
IiAgICBcIi8kdXBcIixcbiI7Ci0gICAgJHVwID1+IHMvLS9fLzsKLSAgICBwcmludCBvdXQgJGF0
dHIgLiAiLCBJRF8iIC4gJHVwIC4gIlxuIjsKLSAgICBwcmludCBoZWFkZXIgImNvbnN0IHVuc2ln
bmVkIHNob3J0IElEXyR1cCA9ICRudW07XG4iOwotfQotcHJpbnQgb3V0ICJhbmNob3IsIElEX0Fc
biI7Ci1wcmludCBvdXQgImltYWdlLCBJRF9JTUdcbiI7Ci1wcmludCBvdXQgImxpc3RpbmcsIElE
X1BSRVxuIjsKLSRudW0gKz0gMTsKLXByaW50IGhlYWRlciAiY29uc3QgdW5zaWduZWQgc2hvcnQg
SURfVEVYVCA9ICRudW07XG4iOwotJG51bSArPSAxOwotcHJpbnQgaGVhZGVyICJjb25zdCB1bnNp
Z25lZCBzaG9ydCBJRF9DT01NRU5UID0gJG51bTtcbiI7Ci1wcmludCBoZWFkZXIgImNvbnN0IHVu
c2lnbmVkIHNob3J0IElEX0xBU1RfVEFHID0gJG51bTtcbiI7Ci1wcmludCBoZWFkZXIgImNvbnN0
IHVuc2lnbmVkIHNob3J0IElEX0NMT1NFX1RBRyA9IDMyMDAwO1xuIjsKLQotcHJpbnQgb3V0ICIl
JVxuIjsKLWNsb3NlIG91dDsKLXByaW50IGhlYWRlciAiXG4jZW5kaWZcbiI7Ci1jbG9zZSBoZWFk
ZXI7Ci0KLW15ICRyZXN1bHQgPSBzeXN0ZW0oIi9iaW4vc2giLCAiLWMiLCAiZ3BlcmYgLWEgLUwg
J0FOU0ktQycgLUQgLUUgLUMgLWwgLW8gLXQgLWsgJyonIC1OZmluZFRhZyAtSGhhc2hfdGFnIC1X
d29yZGxpc3RfdGFnIGh0bWx0YWdzLmdwZXJmID4gaHRtbHRhZ3MuYyIpOwotaWYgKCRyZXN1bHQp
IHsKLSAgdW5saW5rICJodG1sdGFncy5jIjsKLSAgZXhpdCAkcmVzdWx0OwotfQotCi1vcGVuIElO
LCAiaHRtbHRhZ3MuYyIgb3IgZGllOwotCi1teSAkbnVtTGluZXMgPSAwOwotd2hpbGUgKDxJTj4p
IHsKLSAgICAkbnVtTGluZXMrKzsKLX0KLSRudW1MaW5lcyArPSAyOwotCi1jaG9tcCAkb3BlblRh
Z3M7Ci1jaG9tcCAkY2xvc2VUYWdzOwotCi1vcGVuIE9VVCwgIj4+aHRtbHRhZ3MuYyIgb3IgZGll
OwotcHJpbnQgT1VUIDw8RU5ECi0jbGluZSAkbnVtTGluZXMgImh0bWx0YWdzLmMiCi0KLXVzaW5n
IERPTTo6RE9NU3RyaW5nOwotCi1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG9wZW5UYWdOYW1l
c1tdID0gewotICAgIDAsCi0kb3BlblRhZ3MKLSAgICAiVEVYVCIsCi0gICAgIkNPTU1FTlQiCi19
OwotCi1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGNsb3NlVGFnTmFtZXNbXSA9IHsKLSAgICAw
LAotJGNsb3NlVGFncwotfTsKLQotRE9NU3RyaW5nIGdldFRhZ05hbWUodW5zaWduZWQgc2hvcnQg
aWQpCi17Ci0gICAgaWYgKGlkID4gSURfQ0xPU0VfVEFHKSB7Ci0gICAgICAgIGludCBpbmRleCA9
IGlkIC0gSURfQ0xPU0VfVEFHOwotICAgICAgICBpZiAoaW5kZXggPj0gSURfVEVYVCkKLSAgICAg
ICAgICAgIHJldHVybiBET01TdHJpbmcoKTsKLSAgICAgICAgcmV0dXJuIGNsb3NlVGFnTmFtZXNb
aW5kZXhdOwotICAgIH0KLSAgICBpZiAoaWQgPiBJRF9MQVNUX1RBRykKLSAgICAgICAgcmV0dXJu
IERPTVN0cmluZygpOwotICAgIHJldHVybiBvcGVuVGFnTmFtZXNbaWRdOwotfQotRU5ECkluZGV4
OiBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2FwcGxldC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
L2N2cy9yb290L1dlYkNvcmUva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9hcHBsZXQuY3BwLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjMwCmRpZmYgLXUgLXAgLXIxLjMwIGtodG1sL3JlbmRlcmluZy9y
ZW5kZXJfYXBwbGV0LmNwcAotLS0ga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9hcHBsZXQuY3BwCTEw
IE1heSAyMDA1IDE4OjQyOjAzIC0wMDAwCTEuMzAKKysrIGtodG1sL3JlbmRlcmluZy9yZW5kZXJf
YXBwbGV0LmNwcAkyMyBKdW4gMjAwNSAyMTo1Mjo0OCAtMDAwMApAQCAtMzYsNyArMzYsNiBAQAog
I2lmbmRlZiBRX1dTX1FXUyAvLyBXZSBkb24ndCBoYXZlIEphdmEgaW4gUXQgRW1iZWRkZWQKIAog
I2luY2x1ZGUgImphdmEva2phdmFhcHBsZXR3aWRnZXQuaCIKLSNpbmNsdWRlICJtaXNjL2h0bWx0
YWdzLmgiCiAjaW5jbHVkZSAiaHRtbC9odG1sX29iamVjdGltcGwuaCIKIAogdXNpbmcgbmFtZXNw
YWNlIGtodG1sOwpAQCAtMTAzLDcgKzEwMiw3IEBAIHZvaWQgUmVuZGVyQXBwbGV0OjpjcmVhdGVX
aWRnZXRJZk5lY2Vzc2EKICAgICAgICAgICAgICAgICAgICAgICAgICBtX2hlaWdodCAtIGJvcmRl
clRvcCgpIC0gYm9yZGVyQm90dG9tKCkgLSBwYWRkaW5nVG9wKCkgLSBwYWRkaW5nQm90dG9tKCk7
CiAgICAgICAgICAgICBOb2RlSW1wbCAqY2hpbGQgPSBlbGVtZW50KCktPmZpcnN0Q2hpbGQoKTsK
ICAgICAgICAgICAgIHdoaWxlIChjaGlsZCkgewotICAgICAgICAgICAgICAgIGlmIChjaGlsZC0+
aWQoKSA9PSBJRF9QQVJBTSkgeworICAgICAgICAgICAgICAgIGlmIChjaGlsZC0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OnBhcmFtKCkpKSB7CiAgICAgICAgICAgICAgICAgICAgIEhUTUxQYXJhbUVs
ZW1lbnRJbXBsICpwID0gc3RhdGljX2Nhc3Q8SFRNTFBhcmFtRWxlbWVudEltcGwgKj4oY2hpbGQp
OwogICAgICAgICAgICAgICAgICAgICBtX2FyZ3MuaW5zZXJ0KHAtPm5hbWUoKS5zdHJpbmcoKSwg
cC0+dmFsdWUoKS5zdHJpbmcoKSk7CiAgICAgICAgICAgICAgICAgfQpJbmRleDoga2h0bWwvcmVu
ZGVyaW5nL3JlbmRlcl9ib3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJD
b3JlL2todG1sL3JlbmRlcmluZy9yZW5kZXJfYm94LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS4xNTQKZGlmZiAtdSAtcCAtcjEuMTU0IGtodG1sL3JlbmRlcmluZy9yZW5kZXJfYm94LmNwcAot
LS0ga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9ib3guY3BwCTExIEp1biAyMDA1IDA1OjAxOjE3IC0w
MDAwCTEuMTU0CisrKyBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2JveC5jcHAJMjMgSnVuIDIwMDUg
MjE6NTI6NDkgLTAwMDAKQEAgLTI1Niw3ICsyNTYsNyBAQCB2b2lkIFJlbmRlckJveDo6cGFpbnRS
b290Qm94RGVjb3JhdGlvbnMoCiAgICAgICAgIC8vIGFub255bW91cyBibG9ja3MgY3JlYXRlZCBi
eSBpbmxpbmUgPGJvZHk+IHRhZ3MgZXRjLiAgV2UgY2FuIGxvY2F0ZSB0aGUgPGJvZHk+CiAgICAg
ICAgIC8vIHJlbmRlciBvYmplY3QgdmVyeSBlYXNpbHkgdmlhIHRoZSBET00uCiAgICAgICAgIEhU
TUxFbGVtZW50SW1wbCogYm9keSA9IGRvY3VtZW50KCktPmJvZHkoKTsKLSAgICAgICAgUmVuZGVy
T2JqZWN0KiBib2R5T2JqZWN0ID0gKGJvZHkgJiYgYm9keS0+aWQoKSA9PSBJRF9CT0RZKSA/IGJv
ZHktPnJlbmRlcmVyKCkgOiAwOworICAgICAgICBSZW5kZXJPYmplY3QqIGJvZHlPYmplY3QgPSAo
Ym9keSAmJiBib2R5LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpib2R5KCkpKSA/IGJvZHktPnJl
bmRlcmVyKCkgOiAwOwogICAgICAgICBpZiAoYm9keU9iamVjdCkgewogICAgICAgICAgICAgYmdM
YXllciA9IGJvZHlPYmplY3QtPnN0eWxlKCktPmJhY2tncm91bmRMYXllcnMoKTsKICAgICAgICAg
ICAgIGJnQ29sb3IgPSBib2R5T2JqZWN0LT5zdHlsZSgpLT5iYWNrZ3JvdW5kQ29sb3IoKTsKQEAg
LTM2OSw3ICszNjksNyBAQCB2b2lkIFJlbmRlckJveDo6cGFpbnRCYWNrZ3JvdW5kRXh0ZW5kZWQo
CiAgICAgICAgIGJvb2wgaXNUcmFuc3BhcmVudDsKICAgICAgICAgRE9NOjpOb2RlSW1wbCogZWx0
ID0gZG9jdW1lbnQoKS0+b3duZXJFbGVtZW50KCk7CiAgICAgICAgIGlmIChlbHQpIHsKLSAgICAg
ICAgICAgIGlmIChlbHQtPmlkKCkgPT0gSURfRlJBTUUpCisgICAgICAgICAgICBpZiAoZWx0LT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6ZnJhbWUoKSkpCiAgICAgICAgICAgICAgICAgaXNUcmFuc3Bh
cmVudCA9IGZhbHNlOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gTG9j
YXRlIHRoZSA8Ym9keT4gZWxlbWVudCB1c2luZyB0aGUgRE9NLiAgVGhpcyBpcyBlYXNpZXIgdGhh
biB0cnlpbmcKQEAgLTM3Nyw3ICszNzcsNyBAQCB2b2lkIFJlbmRlckJveDo6cGFpbnRCYWNrZ3Jv
dW5kRXh0ZW5kZWQoCiAgICAgICAgICAgICAgICAgLy8gYW5vbnltb3VzIGJsb2NrcyBjcmVhdGVk
IGJ5IGlubGluZSA8Ym9keT4gdGFncyBldGMuICBXZSBjYW4gbG9jYXRlIHRoZSA8Ym9keT4KICAg
ICAgICAgICAgICAgICAvLyByZW5kZXIgb2JqZWN0IHZlcnkgZWFzaWx5IHZpYSB0aGUgRE9NLgog
ICAgICAgICAgICAgICAgIEhUTUxFbGVtZW50SW1wbCogYm9keSA9IGRvY3VtZW50KCktPmJvZHko
KTsKLSAgICAgICAgICAgICAgICBpc1RyYW5zcGFyZW50ID0gIWJvZHkgfHwgYm9keS0+aWQoKSAh
PSBJRF9GUkFNRVNFVDsgLy8gQ2FuJ3Qgc2Nyb2xsIGEgZnJhbWVzZXQgZG9jdW1lbnQgYW55d2F5
LgorICAgICAgICAgICAgICAgIGlzVHJhbnNwYXJlbnQgPSAhYm9keSB8fCAhYm9keS0+aGFzTG9j
YWxOYW1lKEhUTUxOYW1lczo6ZnJhbWVzZXQoKSk7IC8vIENhbid0IHNjcm9sbCBhIGZyYW1lc2V0
IGRvY3VtZW50IGFueXdheS4KICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlCiAgICAgICAg
ICAgICBpc1RyYW5zcGFyZW50ID0gY2FudmFzKCktPnZpZXcoKS0+aXNUcmFuc3BhcmVudCgpOwpJ
bmRleDoga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9jYW52YXNpbWFnZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9jYW52YXNp
bWFnZS5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTEKZGlmZiAtdSAtcCAtcjEuMTEga2h0
bWwvcmVuZGVyaW5nL3JlbmRlcl9jYW52YXNpbWFnZS5jcHAKLS0tIGtodG1sL3JlbmRlcmluZy9y
ZW5kZXJfY2FudmFzaW1hZ2UuY3BwCTI1IE1heSAyMDA1IDAxOjMzOjIyIC0wMDAwCTEuMTEKKysr
IGtodG1sL3JlbmRlcmluZy9yZW5kZXJfY2FudmFzaW1hZ2UuY3BwCTIzIEp1biAyMDA1IDIxOjUy
OjQ5IC0wMDAwCkBAIC0zNywxMCArMzcsOCBAQAogI2luY2x1ZGUgImNzcy9jc3NoZWxwZXIuaCIK
ICNpbmNsdWRlICJtaXNjL2hlbHBlci5oIgogI2luY2x1ZGUgIm1pc2MvaHRtbGF0dHJzLmgiCi0j
aW5jbHVkZSAibWlzYy9odG1sdGFncy5oIgogI2luY2x1ZGUgImh0bWwvaHRtbF9mb3JtaW1wbC5o
IgogI2luY2x1ZGUgImh0bWwvaHRtbF9jYW52YXNpbXBsLmgiCi0jaW5jbHVkZSAiaHRtbC9kdGQu
aCIKICNpbmNsdWRlICJ4bWwvZG9tMl9ldmVudHNpbXBsLmgiCiAjaW5jbHVkZSAiaHRtbC9odG1s
X2RvY3VtZW50aW1wbC5oIgogI2luY2x1ZGUgPG1hdGguaD4KSW5kZXg6IGtodG1sL3JlbmRlcmlu
Zy9yZW5kZXJfZmxvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUv
a2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9mbG93LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4x
NjAKZGlmZiAtdSAtcCAtcjEuMTYwIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfZmxvdy5jcHAKLS0t
IGtodG1sL3JlbmRlcmluZy9yZW5kZXJfZmxvdy5jcHAJMTEgTWF5IDIwMDUgMDI6MTA6MTAgLTAw
MDAJMS4xNjAKKysrIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfZmxvdy5jcHAJMjMgSnVuIDIwMDUg
MjE6NTI6NTAgLTAwMDAKQEAgLTQwLDcgKzQwLDYgQEAKICNpbmNsdWRlICJyZW5kZXJfbGluZS5o
IgogCiAjaW5jbHVkZSAia2h0bWx2aWV3LmgiCi0jaW5jbHVkZSAiaHRtbHRhZ3MuaCIKIAogdXNp
bmcgbmFtZXNwYWNlIERPTTsKIHVzaW5nIG5hbWVzcGFjZSBraHRtbDsKQEAgLTY1NCw3ICs2NTMs
NyBAQCB2b2lkIFJlbmRlckZsb3c6OmFkZEZvY3VzUmluZ1JlY3RzKFFQYWluCiAgICAgLy8gT25s
eSBwYWludCBmb2N1cyByaW5nIGFyb3VuZCBvdXRlcm1vc3QgY29udGVudGVkaXRhYmxlIGVsZW1l
bnQuCiAgICAgLy8gQnV0IHNraXAgdGhlIGJvZHkgZWxlbWVudCBpZiBpdCBpcyBvdXRlcm1vc3Qu
CiAgICAgaWYgKGVsZW1lbnQoKSAmJiBlbGVtZW50KCktPmlzQ29udGVudEVkaXRhYmxlKCkpIHsK
LSAgICAgICAgaWYgKGVsZW1lbnQoKS0+cGFyZW50Tm9kZSgpICYmICFlbGVtZW50KCktPnBhcmVu
dE5vZGUoKS0+aXNDb250ZW50RWRpdGFibGUoKSAmJiBlbGVtZW50KCktPmlkKCkgIT0gSURfQk9E
WSkKKyAgICAgICAgaWYgKGVsZW1lbnQoKS0+cGFyZW50Tm9kZSgpICYmICFlbGVtZW50KCktPnBh
cmVudE5vZGUoKS0+aXNDb250ZW50RWRpdGFibGUoKSAmJiAhZWxlbWVudCgpLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6Ym9keSgpKSkKICAgICAgICAgICAgIHAtPmFkZEZvY3VzUmluZ1JlY3QoX3R4
LCBfdHksIHdpZHRoKCksIGhlaWdodCgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KSW5kZXg6
IGtodG1sL3JlbmRlcmluZy9yZW5kZXJfZm9ybS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1dlYkNvcmUva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9mb3JtLmNwcCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS4xMDcKZGlmZiAtdSAtcCAtcjEuMTA3IGtodG1sL3JlbmRlcmluZy9yZW5k
ZXJfZm9ybS5jcHAKLS0tIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfZm9ybS5jcHAJMjAgSnVuIDIw
MDUgMDU6MjQ6MjYgLTAwMDAJMS4xMDcKKysrIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfZm9ybS5j
cHAJMjMgSnVuIDIwMDUgMjE6NTI6NTEgLTAwMDAKQEAgLTc1Myw3ICs3NTMsNyBAQCBSZW5kZXJP
YmplY3QqIFJlbmRlckZpZWxkc2V0OjpmaW5kTGVnZW5kCiB7CiAgICAgZm9yIChSZW5kZXJPYmpl
Y3QqIGxlZ2VuZCA9IGZpcnN0Q2hpbGQoKTsgbGVnZW5kOyBsZWdlbmQgPSBsZWdlbmQtPm5leHRT
aWJsaW5nKCkpIHsKICAgICAgIGlmICghbGVnZW5kLT5pc0Zsb2F0aW5nT3JQb3NpdGlvbmVkKCkg
JiYgbGVnZW5kLT5lbGVtZW50KCkgJiYKLSAgICAgICAgICBsZWdlbmQtPmVsZW1lbnQoKS0+aWQo
KSA9PSBJRF9MRUdFTkQpCisgICAgICAgICAgbGVnZW5kLT5lbGVtZW50KCktPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjpsZWdlbmQoKSkpCiAgICAgICAgIHJldHVybiBsZWdlbmQ7CiAgICAgfQogICAg
IHJldHVybiAwOwpAQCAtMTE0Nyw3ICsxMTQ3LDcgQEAgdm9pZCBSZW5kZXJTZWxlY3Q6OnVwZGF0
ZUZyb21FbGVtZW50KCkKICAgICAgICAgICAgIHN0YXRpY19jYXN0PEtDb21ib0JveCo+KG1fd2lk
Z2V0KS0+Y2xlYXIoKTsKIAogICAgICAgICBmb3IgKGxpc3RJbmRleCA9IDA7IGxpc3RJbmRleCA8
IGludChsaXN0SXRlbXMuc2l6ZSgpKTsgbGlzdEluZGV4KyspIHsKLSAgICAgICAgICAgIGlmIChs
aXN0SXRlbXNbbGlzdEluZGV4XS0+aWQoKSA9PSBJRF9PUFRHUk9VUCkgeworICAgICAgICAgICAg
aWYgKGxpc3RJdGVtc1tsaXN0SW5kZXhdLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b3B0Z3JvdXAo
KSkpIHsKICAgICAgICAgICAgICAgICBRU3RyaW5nIGxhYmVsID0gbGlzdEl0ZW1zW2xpc3RJbmRl
eF0tPmdldEF0dHJpYnV0ZShBVFRSX0xBQkVMKS5zdHJpbmcoKTsKICAgICAgICAgICAgICAgICBs
YWJlbC5yZXBsYWNlKFFDaGFyKCdcXCcpLCBiYWNrc2xhc2hBc0N1cnJlbmN5U3ltYm9sKCkpOwog
CkBAIC0xMTcxLDE0ICsxMTcxLDE0IEBAIHZvaWQgUmVuZGVyU2VsZWN0Ojp1cGRhdGVGcm9tRWxl
bWVudCgpCiAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEtDb21ib0JveCo+KG1fd2lk
Z2V0KS0+aW5zZXJ0SXRlbShsYWJlbCwgbGlzdEluZGV4KTsKICNlbmRpZgogICAgICAgICAgICAg
fQotICAgICAgICAgICAgZWxzZSBpZiAobGlzdEl0ZW1zW2xpc3RJbmRleF0tPmlkKCkgPT0gSURf
T1BUSU9OKSB7CisgICAgICAgICAgICBlbHNlIGlmIChsaXN0SXRlbXNbbGlzdEluZGV4XS0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6Om9wdGlvbigpKSkgewogICAgICAgICAgICAgICAgIFFTdHJpbmcg
aXRlbVRleHQgPSBzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudEltcGwqPihsaXN0SXRlbXNb
bGlzdEluZGV4XSktPnRleHQoKS5zdHJpbmcoKTsKICAgICAgICAgICAgICAgICBpdGVtVGV4dC5y
ZXBsYWNlKFFDaGFyKCdcXCcpLCBiYWNrc2xhc2hBc0N1cnJlbmN5U3ltYm9sKCkpOwogCiAgICAg
ICAgICAgICAgICAgLy8gSW4gV2luSUUsIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlc3BhY2Ug
aXMgaWdub3JlZCBpbiBvcHRpb25zLiBXZSBtYXRjaCB0aGlzIGJlaGF2aW9yLgogICAgICAgICAg
ICAgICAgIGl0ZW1UZXh0ID0gaXRlbVRleHQuc3RyaXBXaGl0ZVNwYWNlKCk7CiAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKGxpc3RJdGVtc1tsaXN0SW5kZXhdLT5wYXJlbnRO
b2RlKCktPmlkKCkgPT0gSURfT1BUR1JPVVApCisgICAgICAgICAgICAgICAgaWYgKGxpc3RJdGVt
c1tsaXN0SW5kZXhdLT5wYXJlbnROb2RlKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvcHRncm91
cCgpKSkKICAgICAgICAgICAgICAgICAgICAgaXRlbVRleHQucHJlcGVuZCgiICAgICIpOwogCiAj
aWYgQVBQTEVfQ0hBTkdFUwpAQCAtMTMwNCw3ICsxMzA0LDcgQEAgdm9pZCBSZW5kZXJTZWxlY3Q6
OmxheW91dCggKQogCiAgICAgYm9vbCBmb3VuZE9wdGlvbiA9IGZhbHNlOwogICAgIGZvciAodWlu
dCBpID0gMDsgaSA8IGxpc3RJdGVtcy5zaXplKCkgJiYgIWZvdW5kT3B0aW9uOyBpKyspCi0JZm91
bmRPcHRpb24gPSAobGlzdEl0ZW1zW2ldLT5pZCgpID09IElEX09QVElPTik7CisJZm91bmRPcHRp
b24gPSAobGlzdEl0ZW1zW2ldLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpKTsKIAog
ICAgIG1fd2lkZ2V0LT5zZXRFbmFibGVkKGZvdW5kT3B0aW9uICYmICEgZWxlbWVudCgpLT5kaXNh
YmxlZCgpKTsKIH0KQEAgLTEzMTgsMTIgKzEzMTgsMTIgQEAgdm9pZCBSZW5kZXJTZWxlY3Q6OnNs
b3RTZWxlY3RlZChpbnQgaW5kZQogICAgIFFNZW1BcnJheTxIVE1MR2VuZXJpY0Zvcm1FbGVtZW50
SW1wbCo+IGxpc3RJdGVtcyA9IGVsZW1lbnQoKS0+bGlzdEl0ZW1zKCk7CiAgICAgaWYoaW5kZXgg
Pj0gMCAmJiBpbmRleCA8IGludChsaXN0SXRlbXMuc2l6ZSgpKSkKICAgICB7Ci0gICAgICAgIGJv
b2wgZm91bmQgPSAoIGxpc3RJdGVtc1tpbmRleF0tPmlkKCkgPT0gSURfT1BUSU9OICk7CisgICAg
ICAgIGJvb2wgZm91bmQgPSAobGlzdEl0ZW1zW2luZGV4XS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
Om9wdGlvbigpKSk7CiAKICAgICAgICAgaWYgKCAhZm91bmQgKSB7CiAgICAgICAgICAgICAvLyB0
aGlzIG9uZSBpcyBub3Qgc2VsZWN0YWJsZSwgIHdlIG5lZWQgdG8gZmluZCBhbiBvcHRpb24gZWxl
bWVudAogICAgICAgICAgICAgd2hpbGUgKCAoIHVuc2lnbmVkICkgaW5kZXggPCBsaXN0SXRlbXMu
c2l6ZSgpICkgewotICAgICAgICAgICAgICAgIGlmICggbGlzdEl0ZW1zW2luZGV4XS0+aWQoKSA9
PSBJRF9PUFRJT04gKSB7CisgICAgICAgICAgICAgICAgaWYgKGxpc3RJdGVtc1tpbmRleF0tPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjpvcHRpb24oKSkpIHsKICAgICAgICAgICAgICAgICAgICAgZm91
bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9
CkBAIC0xMzMyLDcgKzEzMzIsNyBAQCB2b2lkIFJlbmRlclNlbGVjdDo6c2xvdFNlbGVjdGVkKGlu
dCBpbmRlCiAKICAgICAgICAgICAgIGlmICggIWZvdW5kICkgewogICAgICAgICAgICAgICAgIHdo
aWxlICggaW5kZXggPj0gMCApIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCBsaXN0SXRlbXNb
aW5kZXhdLT5pZCgpID09IElEX09QVElPTiApIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGxp
c3RJdGVtc1tpbmRleF0tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvcHRpb24oKSkpIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC0xMzQ2LDcgKzEzNDYsNyBAQCB2b2lk
IFJlbmRlclNlbGVjdDo6c2xvdFNlbGVjdGVkKGludCBpbmRlCiAgICAgICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8Q29tYm9Cb3hXaWRnZXQqPiggbV93aWRnZXQgKS0+c2V0Q3VycmVudEl0ZW0oIGlu
ZGV4ICk7CiAKICAgICAgICAgICAgIGZvciAoIHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGxpc3RJ
dGVtcy5zaXplKCk7ICsraSApCi0gICAgICAgICAgICAgICAgaWYgKCBsaXN0SXRlbXNbaV0tPmlk
KCkgPT0gSURfT1BUSU9OICYmIGkgIT0gKHVuc2lnbmVkIGludCkgaW5kZXggKQorICAgICAgICAg
ICAgICAgIGlmIChsaXN0SXRlbXNbaV0tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvcHRpb24oKSkg
JiYgaSAhPSAodW5zaWduZWQgaW50KSBpbmRleCkKICAgICAgICAgICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnRJbXBsKj4oIGxpc3RJdGVtc1tpXSApLT5tX3NlbGVjdGVk
ID0gZmFsc2U7CiAKICAgICAgICAgICAgIHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50SW1w
bCo+KGxpc3RJdGVtc1tpbmRleF0pLT5tX3NlbGVjdGVkID0gdHJ1ZTsKQEAgLTEzNjcsNyArMTM2
Nyw3IEBAIHZvaWQgUmVuZGVyU2VsZWN0OjpzbG90U2VsZWN0aW9uQ2hhbmdlZCgKICAgICBmb3Ig
KCB1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3RJdGVtcy5jb3VudCgpOyBpKysgKQogICAgICAgICAv
LyBkb24ndCB1c2Ugc2V0U2VsZWN0ZWQoKSBoZXJlIGJlY2F1c2UgaXQgd2lsbCBjYXVzZSB1cyB0
byBiZSBjYWxsZWQKICAgICAgICAgLy8gYWdhaW4gd2l0aCB1cGRhdGVTZWxlY3Rpb24uCi0gICAg
ICAgIGlmICggbGlzdEl0ZW1zW2ldLT5pZCgpID09IElEX09QVElPTiApCisgICAgICAgIGlmIChs
aXN0SXRlbXNbaV0tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvcHRpb24oKSkpCiAgICAgICAgICAg
ICBzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudEltcGwqPiggbGlzdEl0ZW1zW2ldICkKICAg
ICAgICAgICAgICAgICAtPm1fc2VsZWN0ZWQgPSBzdGF0aWNfY2FzdDxLTGlzdEJveCo+KCBtX3dp
ZGdldCApLT5pc1NlbGVjdGVkKCBpICk7CiAKQEAgLTE0MDksNyArMTQwOSw3IEBAIHZvaWQgUmVu
ZGVyU2VsZWN0Ojp1cGRhdGVTZWxlY3Rpb24oKQogICAgICAgICAvLyBpZiBtdWx0aS1zZWxlY3Qs
IHdlIHNlbGVjdCBvbmx5IHRoZSBuZXcgc2VsZWN0ZWQgaW5kZXgKICAgICAgICAgS0xpc3RCb3gg
Kmxpc3RCb3ggPSBzdGF0aWNfY2FzdDxLTGlzdEJveCo+KG1fd2lkZ2V0KTsKICAgICAgICAgZm9y
IChpID0gMDsgaSA8IGludChsaXN0SXRlbXMuc2l6ZSgpKTsgaSsrKQotICAgICAgICAgICAgbGlz
dEJveC0+c2V0U2VsZWN0ZWQoaSxsaXN0SXRlbXNbaV0tPmlkKCkgPT0gSURfT1BUSU9OICYmCisg
ICAgICAgICAgICBsaXN0Qm94LT5zZXRTZWxlY3RlZChpLCBsaXN0SXRlbXNbaV0tPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjpvcHRpb24oKSkgJiYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnRJbXBsKj4obGlzdEl0ZW1zW2ldKS0+c2Vs
ZWN0ZWQoKSk7CiAgICAgfQogICAgIGVsc2UgewpAQCAtMTQxNyw3ICsxNDE3LDcgQEAgdm9pZCBS
ZW5kZXJTZWxlY3Q6OnVwZGF0ZVNlbGVjdGlvbigpCiAgICAgICAgIHVuc2lnbmVkIGZpcnN0T3B0
aW9uID0gbGlzdEl0ZW1zLnNpemUoKTsKICAgICAgICAgaSA9IGxpc3RJdGVtcy5zaXplKCk7CiAg
ICAgICAgIHdoaWxlIChpLS0pCi0gICAgICAgICAgICBpZiAobGlzdEl0ZW1zW2ldLT5pZCgpID09
IElEX09QVElPTikgeworICAgICAgICAgICAgaWYgKGxpc3RJdGVtc1tpXS0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6Om9wdGlvbigpKSkgewogICAgICAgICAgICAgICAgIGlmIChmb3VuZCkKICAgICAg
ICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnRJbXBsKj4obGlzdEl0
ZW1zW2ldKS0+bV9zZWxlY3RlZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN0
YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50SW1wbCo+KGxpc3RJdGVtc1tpXSktPnNlbGVjdGVk
KCkpIHsKSW5kZXg6IGtodG1sL3JlbmRlcmluZy9yZW5kZXJfZnJhbWVzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9yZW5kZXJpbmcvcmVuZGVyX2ZyYW1l
cy5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNjkKZGlmZiAtdSAtcCAtcjEuNjkga2h0bWwv
cmVuZGVyaW5nL3JlbmRlcl9mcmFtZXMuY3BwCi0tLSBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2Zy
YW1lcy5jcHAJMTAgTWF5IDIwMDUgMTg6NDI6MDQgLTAwMDAJMS42OQorKysga2h0bWwvcmVuZGVy
aW5nL3JlbmRlcl9mcmFtZXMuY3BwCTIzIEp1biAyMDA1IDIxOjUyOjUyIC0wMDAwCkBAIC0zNCw3
ICszNCw2IEBACiAjaW5jbHVkZSAibWlzYy9odG1sYXR0cnMuaCIKICNpbmNsdWRlICJ4bWwvZG9t
Ml9ldmVudHNpbXBsLmgiCiAjaW5jbHVkZSAieG1sL2RvbV9kb2NpbXBsLmgiCi0jaW5jbHVkZSAi
bWlzYy9odG1sdGFncy5oIgogI2luY2x1ZGUgImtodG1sdmlldy5oIgogI2luY2x1ZGUgImtodG1s
X3BhcnQuaCIKICNpbmNsdWRlICJyZW5kZXJfYXJlbmEuaCIKQEAgLTY2OSwxNyArNjY4LDE3IEBA
IHZvaWQgUmVuZGVyUGFydE9iamVjdDo6dXBkYXRlV2lkZ2V0KCkKIAogICBzZXROZWVkc0xheW91
dEFuZE1pbk1heFJlY2FsYygpOwogCi0gIGlmIChlbGVtZW50KCktPmlkKCkgPT0gSURfT0JKRUNU
KSB7CisgIGlmIChlbGVtZW50KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvYmplY3QoKSkpIHsK
IAogICAgICAgSFRNTE9iamVjdEVsZW1lbnRJbXBsICpvID0gc3RhdGljX2Nhc3Q8SFRNTE9iamVj
dEVsZW1lbnRJbXBsICo+KGVsZW1lbnQoKSk7CiAKICAgICAgIC8vIENoZWNrIGZvciBhIGNoaWxk
IEVNQkVEIHRhZy4KICAgICAgIEhUTUxFbWJlZEVsZW1lbnRJbXBsICplbWJlZCA9IDA7CiAgICAg
ICBmb3IgKE5vZGVJbXBsICpjaGlsZCA9IG8tPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7ICkgewotICAg
ICAgICAgIGlmIChjaGlsZC0+aWQoKSA9PSBJRF9FTUJFRCkgeworICAgICAgICAgIGlmIChjaGls
ZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmVtYmVkKCkpKSB7CiAgICAgICAgICAgICAgIGVtYmVk
ID0gc3RhdGljX2Nhc3Q8SFRNTEVtYmVkRWxlbWVudEltcGwgKj4oIGNoaWxkICk7CiAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgIH0gZWxzZSBpZiAoY2hpbGQtPmlkKCkgPT0gSURfT0JK
RUNUKSB7CisgICAgICAgICAgfSBlbHNlIGlmIChjaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
Om9iamVjdCgpKSkgewogICAgICAgICAgICAgICBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygp
OyAgICAgICAgIC8vIERvbid0IGRlc2NlbmQgaW50byBuZXN0ZWQgT0JKRUNUIHRhZ3MKICAgICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgICBjaGlsZCA9IGNoaWxkLT50cmF2ZXJzZU5leHRO
b2RlKG8pOyAgIC8vIE90aGVyd2lzZSBkZXNjZW5kIChFTUJFRHMgbWF5IGJlIGluc2lkZSBDT01N
RU5UIHRhZ3MpCkBAIC03MTksNyArNzE4LDcgQEAgdm9pZCBSZW5kZXJQYXJ0T2JqZWN0Ojp1cGRh
dGVXaWRnZXQoKQogICAgICAgLy8gR2V0IHRoZSBhdHRyaWJ1dGVzIGZyb20gdGhlIHBhcmFtcyBp
ZiB0aGVyZSBpcyBubyBFTUJFRCB0YWcuCiAgICAgICBOb2RlSW1wbCAqY2hpbGQgPSBvLT5maXJz
dENoaWxkKCk7CiAgICAgICB3aGlsZSAoY2hpbGQgJiYgKHVybC5pc0VtcHR5KCkgfHwgc2Vydmlj
ZVR5cGUuaXNFbXB0eSgpIHx8ICFlbWJlZCkpIHsKLSAgICAgICAgICBpZiAoY2hpbGQtPmlkKCkg
PT0gSURfUEFSQU0pIHsKKyAgICAgICAgICBpZiAoY2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjpwYXJhbSgpKSkgewogICAgICAgICAgICAgICBIVE1MUGFyYW1FbGVtZW50SW1wbCAqcCA9IHN0
YXRpY19jYXN0PEhUTUxQYXJhbUVsZW1lbnRJbXBsICo+KCBjaGlsZCApOwogICAgICAgICAgICAg
ICBRU3RyaW5nIG5hbWUgPSBwLT5uYW1lKCkuc3RyaW5nKCkubG93ZXIoKTsKICAgICAgICAgICAg
ICAgaWYgKHVybC5pc0VtcHR5KCkgJiYgKG5hbWUgPT0gInNyYyIgfHwgbmFtZSA9PSAibW92aWUi
IHx8IG5hbWUgPT0gImNvZGUiIHx8IG5hbWUgPT0gInVybCIpKSB7CkBAIC04MTAsMTQgKzgwOSwx
NCBAQCB2b2lkIFJlbmRlclBhcnRPYmplY3Q6OnVwZGF0ZVdpZGdldCgpCiAgICAgICAvLyBGaW5k
IG91dCBpZiB3ZSBzdXBwb3J0IGZhbGxiYWNrIGNvbnRlbnQuCiAgICAgICBtX2hhc0ZhbGxiYWNr
Q29udGVudCA9IGZhbHNlOwogICAgICAgZm9yIChOb2RlSW1wbCAqY2hpbGQgPSBvLT5maXJzdENo
aWxkKCk7IGNoaWxkICYmICFtX2hhc0ZhbGxiYWNrQ29udGVudDsgY2hpbGQgPSBjaGlsZC0+bmV4
dFNpYmxpbmcoKSkgewotICAgICAgICAgIGlmICgoIWNoaWxkLT5pc1RleHROb2RlKCkgJiYgY2hp
bGQtPmlkKCkgIT0gSURfRU1CRUQgJiYgY2hpbGQtPmlkKCkgIT0gSURfUEFSQU0pIHx8IC8vIERp
c2NvdW50IDxlbWJlZD4gYW5kIDxwYXJhbT4KKyAgICAgICAgICBpZiAoKCFjaGlsZC0+aXNUZXh0
Tm9kZSgpICYmICFjaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmVtYmVkKCkpICYmICFjaGls
ZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnBhcmFtKCkpKSB8fCAvLyBEaXNjb3VudCA8ZW1iZWQ+
IGFuZCA8cGFyYW0+CiAgICAgICAgICAgICAgIChjaGlsZC0+aXNUZXh0Tm9kZSgpICYmICFjaGls
ZC0+Y29udGFpbnNPbmx5V2hpdGVzcGFjZSgpKSkKICAgICAgICAgICAgICAgbV9oYXNGYWxsYmFj
a0NvbnRlbnQgPSB0cnVlOwogICAgICAgfQogICAgICAgYm9vbCBzdWNjZXNzID0gcGFydC0+cmVx
dWVzdE9iamVjdCggdGhpcywgdXJsLCBzZXJ2aWNlVHlwZSwgcGFyYW1OYW1lcywgcGFyYW1WYWx1
ZXMgKTsKICAgICAgIGlmICghc3VjY2VzcyAmJiBtX2hhc0ZhbGxiYWNrQ29udGVudCkKICAgICAg
ICAgICBvLT5yZW5kZXJGYWxsYmFja0NvbnRlbnQoKTsKLSAgfSBlbHNlIGlmICggZWxlbWVudCgp
LT5pZCgpID09IElEX0VNQkVEICkgeworICB9IGVsc2UgaWYgKGVsZW1lbnQoKS0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OmVtYmVkKCkpKSB7CiAKICAgICAgIEhUTUxFbWJlZEVsZW1lbnRJbXBsICpv
ID0gc3RhdGljX2Nhc3Q8SFRNTEVtYmVkRWxlbWVudEltcGwgKj4oZWxlbWVudCgpKTsKICAgICAg
IHVybCA9IG8tPnVybDsKQEAgLTg0NCw3ICs4NDMsNyBAQCB2b2lkIFJlbmRlclBhcnRPYmplY3Q6
OnVwZGF0ZVdpZGdldCgpCiAgICAgICB9CiAgICAgICBwYXJ0LT5yZXF1ZXN0T2JqZWN0KCB0aGlz
LCB1cmwsIHNlcnZpY2VUeXBlLCBwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcyApOwogICB9IGVsc2Ug
ewotICAgICAgYXNzZXJ0KGVsZW1lbnQoKS0+aWQoKSA9PSBJRF9JRlJBTUUpOworICAgICAgYXNz
ZXJ0KGVsZW1lbnQoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmlmcmFtZSgpKSk7CiAgICAgICBI
VE1MSUZyYW1lRWxlbWVudEltcGwgKm8gPSBzdGF0aWNfY2FzdDxIVE1MSUZyYW1lRWxlbWVudElt
cGwgKj4oZWxlbWVudCgpKTsKICAgICAgIHVybCA9IG8tPm1fVVJMLnN0cmluZygpOwogICAgICAg
aWYgKHVybC5pc0VtcHR5KCkpIHsKQEAgLTg5MCw3ICs4ODksNyBAQCB2b2lkIFJlbmRlclBhcnRP
YmplY3Q6OnNsb3RWaWV3Q2xlYXJlZCgpCiAgICAgICBRU2Nyb2xsVmlldzo6U2Nyb2xsQmFyTW9k
ZSBzY3JvbGwgPSBRU2Nyb2xsVmlldzo6QXV0bzsKICAgICAgIGludCBtYXJnaW53ID0gLTE7CiAg
ICAgICBpbnQgbWFyZ2luaCA9IC0xOwotICAgICAgaWYgKCBlbGVtZW50KCktPmlkKCkgPT0gSURf
SUZSQU1FKSB7CisgICAgICBpZiAoZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aWZy
YW1lKCkpKSB7CiAJICBIVE1MSUZyYW1lRWxlbWVudEltcGwgKmZyYW1lID0gc3RhdGljX2Nhc3Q8
SFRNTElGcmFtZUVsZW1lbnRJbXBsICo+KGVsZW1lbnQoKSk7CiAJICBpZihmcmFtZS0+bV9mcmFt
ZUJvcmRlcikKIAkgICAgICBmcmFtZVN0eWxlID0gUUZyYW1lOjpCb3g7CkBAIC05MTAsNyArOTA5
LDcgQEAgdm9pZCBSZW5kZXJQYXJ0T2JqZWN0OjpzbG90Vmlld0NsZWFyZWQoKQogICAgICAgICAg
IGtkRGVidWcoNjAzMSkgPDwgImZyYW1lIGlzIGEgS0hUTUx2aWV3ISIgPDwgZW5kbDsKICNlbmRp
ZgogICAgICAgICAgIEtIVE1MVmlldyAqaHRtbFZpZXcgPSBzdGF0aWNfY2FzdDxLSFRNTFZpZXcg
Kj4odmlldyk7Ci0gICAgICAgICAgaHRtbFZpZXctPnNldElnbm9yZVdoZWVsRXZlbnRzKCBlbGVt
ZW50KCktPmlkKCkgPT0gSURfSUZSQU1FICk7CisgICAgICAgICAgaHRtbFZpZXctPnNldElnbm9y
ZVdoZWVsRXZlbnRzKGVsZW1lbnQoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmlmcmFtZSgpKSk7
CiAgICAgICAgICAgaWYobWFyZ2ludyAhPSAtMSkgaHRtbFZpZXctPnNldE1hcmdpbldpZHRoKG1h
cmdpbncpOwogICAgICAgICAgIGlmKG1hcmdpbmggIT0gLTEpIGh0bWxWaWV3LT5zZXRNYXJnaW5I
ZWlnaHQobWFyZ2luaCk7CiAgICAgICAgIH0KSW5kZXg6IGtodG1sL3JlbmRlcmluZy9yZW5kZXJf
aW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3Jl
bmRlcmluZy9yZW5kZXJfaW1hZ2UuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjc0CmRpZmYg
LXUgLXAgLXIxLjc0IGtodG1sL3JlbmRlcmluZy9yZW5kZXJfaW1hZ2UuY3BwCi0tLSBraHRtbC9y
ZW5kZXJpbmcvcmVuZGVyX2ltYWdlLmNwcAkyNSBGZWIgMjAwNSAwMDoyNToxMiAtMDAwMAkxLjc0
CisrKyBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2ltYWdlLmNwcAkyMyBKdW4gMjAwNSAyMTo1Mjo1
MyAtMDAwMApAQCAtMzYsMTAgKzM2LDggQEAKICNpbmNsdWRlICJjc3MvY3NzaGVscGVyLmgiCiAj
aW5jbHVkZSAibWlzYy9oZWxwZXIuaCIKICNpbmNsdWRlICJtaXNjL2h0bWxhdHRycy5oIgotI2lu
Y2x1ZGUgIm1pc2MvaHRtbHRhZ3MuaCIKICNpbmNsdWRlICJodG1sL2h0bWxfZm9ybWltcGwuaCIK
ICNpbmNsdWRlICJodG1sL2h0bWxfaW1hZ2VpbXBsLmgiCi0jaW5jbHVkZSAiaHRtbC9kdGQuaCIK
ICNpbmNsdWRlICJ4bWwvZG9tMl9ldmVudHNpbXBsLmgiCiAjaW5jbHVkZSAiaHRtbC9odG1sX2Rv
Y3VtZW50aW1wbC5oIgogI2luY2x1ZGUgPG1hdGguaD4KQEAgLTQxOCw3ICs0MTYsNyBAQCB2b2lk
IFJlbmRlckltYWdlOjpwYWludChQYWludEluZm8mIGksIGluCiAKIAogLy8gICAgICAgICAgICAg
cC0+ZHJhd1BpeG1hcCggb2Zmcy54KCksIHksIHBpeCwgcmVjdC54KCksIHJlY3QueSgpLCByZWN0
LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkgKTsKLSAgICAgICAgICAgICBIVE1MSW1hZ2VFbGVtZW50
SW1wbCogaSA9IChlbGVtZW50KCkgJiYgZWxlbWVudCgpLT5pZCgpID09IElEX0lNRykgPyBzdGF0
aWNfY2FzdDxIVE1MSW1hZ2VFbGVtZW50SW1wbCo+KGVsZW1lbnQoKSkgOiAwOworICAgICAgICAg
ICAgIEhUTUxJbWFnZUVsZW1lbnRJbXBsKiBpID0gKGVsZW1lbnQoKSAmJiBlbGVtZW50KCktPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjppbWcoKSkpID8gc3RhdGljX2Nhc3Q8SFRNTEltYWdlRWxlbWVu
dEltcGwqPihlbGVtZW50KCkpIDogMDsKICAgICAgICAgICAgICBpZiAoaSAmJiAhaS0+Y29tcG9z
aXRlT3BlcmF0b3IoKS5pc051bGwoKSl7CiAgICAgICAgICAgICAgICAgcC0+ZHJhd1BpeG1hcCAo
b2ZmcywgcGl4LCByZWN0LCBpLT5jb21wb3NpdGVPcGVyYXRvcigpKTsKICAgICAgICAgICAgICB9
CkBAIC00ODUsNyArNDgzLDcgQEAgdm9pZCBSZW5kZXJJbWFnZTo6bGF5b3V0KCkKIAogSFRNTE1h
cEVsZW1lbnRJbXBsKiBSZW5kZXJJbWFnZTo6aW1hZ2VNYXAoKQogewotICAgIEhUTUxJbWFnZUVs
ZW1lbnRJbXBsKiBpID0gZWxlbWVudCgpLT5pZCgpID09IElEX0lNRyA/IHN0YXRpY19jYXN0PEhU
TUxJbWFnZUVsZW1lbnRJbXBsKj4oZWxlbWVudCgpKSA6IDA7CisgICAgSFRNTEltYWdlRWxlbWVu
dEltcGwqIGkgPSBlbGVtZW50KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppbWcoKSkgPyBzdGF0
aWNfY2FzdDxIVE1MSW1hZ2VFbGVtZW50SW1wbCo+KGVsZW1lbnQoKSkgOiAwOwogICAgIHJldHVy
biBpID8gaS0+Z2V0RG9jdW1lbnQoKS0+Z2V0SW1hZ2VNYXAoaS0+aW1hZ2VNYXAoKSkgOiAwOwog
fQogCkBAIC01MTEsOSArNTA5LDkgQEAgYm9vbCBSZW5kZXJJbWFnZTo6bm9kZUF0UG9pbnQoTm9k
ZUluZm8mIAogCiB2b2lkIFJlbmRlckltYWdlOjp1cGRhdGVBbHRUZXh0KCkKIHsKLSAgICBpZiAo
ZWxlbWVudCgpLT5pZCgpID09IElEX0lOUFVUKQorICAgIGlmIChlbGVtZW50KCktPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjppbnB1dCgpKSkKICAgICAgICAgYWx0ID0gc3RhdGljX2Nhc3Q8SFRNTElu
cHV0RWxlbWVudEltcGwqPihlbGVtZW50KCkpLT5hbHRUZXh0KCk7Ci0gICAgZWxzZSBpZiAoZWxl
bWVudCgpLT5pZCgpID09IElEX0lNRykKKyAgICBlbHNlIGlmIChlbGVtZW50KCktPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjppbWcoKSkpCiAgICAgICAgIGFsdCA9IHN0YXRpY19jYXN0PEhUTUxJbWFn
ZUVsZW1lbnRJbXBsKj4oZWxlbWVudCgpKS0+YWx0VGV4dCgpOwogfQogCkluZGV4OiBraHRtbC9y
ZW5kZXJpbmcvcmVuZGVyX2xpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9X
ZWJDb3JlL2todG1sL3JlbmRlcmluZy9yZW5kZXJfbGlzdC5jcHAsdgpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuNjAKZGlmZiAtdSAtcCAtcjEuNjAga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9saXN0LmNw
cAotLS0ga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9saXN0LmNwcAkyNSBGZWIgMjAwNSAwMDoyNTox
MiAtMDAwMAkxLjYwCisrKyBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2xpc3QuY3BwCTIzIEp1biAy
MDA1IDIxOjUyOjUzIC0wMDAwCkBAIC0yNiw3ICsyNiw4IEBACiAjaW5jbHVkZSAicmVuZGVyaW5n
L3JlbmRlcl9jYW52YXMuaCIKIAogI2luY2x1ZGUgInhtbC9kb21fZG9jaW1wbC5oIgotI2luY2x1
ZGUgIm1pc2MvaHRtbHRhZ3MuaCIKKworI2luY2x1ZGUgImh0bWxuYW1lcy5oIgogCiAjaW5jbHVk
ZSA8cXBhaW50ZXIuaD4KIApAQCAtMzcsNiArMzgsNyBAQAogLy8jZGVmaW5lIEJPWF9ERUJVRwog
CiB1c2luZyBET006OkRvY3VtZW50SW1wbDsKK3VzaW5nIERPTTo6SFRNTE5hbWVzOwogdXNpbmcg
bmFtZXNwYWNlIGtodG1sOwogCiBjb25zdCBpbnQgY01hcmtlclBhZGRpbmcgPSA3OwpAQCAtMjEz
LDcgKzIxNSw3IEBAIHN0YXRpYyBSZW5kZXJPYmplY3QqIGdldFBhcmVudE9mRmlyc3RMaW4KICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICAgICAgaWYgKGN1cnJDaGlsZC0+c3R5bGUo
KS0+aHRtbEhhY2tzKCkgJiYgY3VyckNoaWxkLT5lbGVtZW50KCkgJiYKLSAgICAgICAgICAgIChj
dXJyQ2hpbGQtPmVsZW1lbnQoKS0+aWQoKSA9PSBJRF9VTCB8fCBjdXJyQ2hpbGQtPmVsZW1lbnQo
KS0+aWQoKSA9PSBJRF9PTCkpCisgICAgICAgICAgICAoY3VyckNoaWxkLT5lbGVtZW50KCktPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjp1bCgpKXx8IGN1cnJDaGlsZC0+ZWxlbWVudCgpLT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6b2woKSkpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAK
ICAgICAgICAgUmVuZGVyT2JqZWN0KiBsaW5lQm94ID0gZ2V0UGFyZW50T2ZGaXJzdExpbmVCb3go
Y3VyckNoaWxkLCBtYXJrZXIpOwpJbmRleDoga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9vYmplY3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3JlbmRlcmlu
Zy9yZW5kZXJfb2JqZWN0LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xOTQKZGlmZiAtdSAt
cCAtcjEuMTk0IGtodG1sL3JlbmRlcmluZy9yZW5kZXJfb2JqZWN0LmNwcAotLS0ga2h0bWwvcmVu
ZGVyaW5nL3JlbmRlcl9vYmplY3QuY3BwCTExIE1heSAyMDA1IDAyOjEwOjEwIC0wMDAwCTEuMTk0
CisrKyBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX29iamVjdC5jcHAJMjMgSnVuIDIwMDUgMjE6NTI6
NTUgLTAwMDAKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlICJyZW5kZXJfaW5saW5lLmgiCiAj
aW5jbHVkZSAicmVuZGVyX2Jsb2NrLmgiCiAjaW5jbHVkZSAicmVuZGVyX2ZsZXhib3guaCIKKyNp
bmNsdWRlICJodG1sbmFtZXMuaCIKIAogI2lmIEFQUExFX0NIQU5HRVMKIC8vIEZvciBhY2Nlc3Np
YmlsaXR5CkBAIC0xNzUsMTcgKzE3NiwxNyBAQCBib29sIFJlbmRlck9iamVjdDo6aXNSb290KCkg
Y29uc3QKIAogYm9vbCBSZW5kZXJPYmplY3Q6OmlzQm9keSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IGVsZW1lbnQoKSAmJiBlbGVtZW50KCktPnJlbmRlcmVyKCkgPT0gdGhpcyAmJiBlbGVtZW50KCkt
PmlkKCkgPT0gSURfQk9EWTsKKyAgICByZXR1cm4gZWxlbWVudCgpICYmIGVsZW1lbnQoKS0+cmVu
ZGVyZXIoKSA9PSB0aGlzICYmIGVsZW1lbnQoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJvZHko
KSk7CiB9CiAKIGJvb2wgUmVuZGVyT2JqZWN0Ojppc0hSKCkgY29uc3QKIHsKLSAgICByZXR1cm4g
ZWxlbWVudCgpICYmIGVsZW1lbnQoKS0+aWQoKSA9PSBJRF9IUjsKKyAgICByZXR1cm4gZWxlbWVu
dCgpICYmIGVsZW1lbnQoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmhyKCkpOwogfQogCiBib29s
IFJlbmRlck9iamVjdDo6aXNIVE1MTWFycXVlZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGVsZW1l
bnQoKSAmJiBlbGVtZW50KCktPnJlbmRlcmVyKCkgPT0gdGhpcyAmJiBlbGVtZW50KCktPmlkKCkg
PT0gSURfTUFSUVVFRTsKKyAgICByZXR1cm4gZWxlbWVudCgpICYmIGVsZW1lbnQoKS0+cmVuZGVy
ZXIoKSA9PSB0aGlzICYmIGVsZW1lbnQoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om1hcnF1ZWUo
KSk7CiB9CiAKIGJvb2wgUmVuZGVyT2JqZWN0OjpjYW5IYXZlQ2hpbGRyZW4oKSBjb25zdApAQCAt
NzM3LDcgKzczOCw3IEBAIGJvb2wgUmVuZGVyT2JqZWN0OjpzaXplc1RvTWF4V2lkdGgoKSBjb24K
ICAgICAvLyBidXQgdGhleSBhbGxvdyB0ZXh0IHRvIHNpdCBvbiB0aGUgc2FtZSBsaW5lIGFzIHRo
ZSBtYXJxdWVlLgogICAgIGlmIChpc0Zsb2F0aW5nKCkgfHwgKGlzQ29tcGFjdCgpICYmIGlzSW5s
aW5lKCkpIHx8IAogICAgICAgICAoaXNJbmxpbmVCbG9ja09ySW5saW5lVGFibGUoKSAmJiAhaXNI
VE1MTWFycXVlZSgpKSB8fAotICAgICAgICAoZWxlbWVudCgpICYmIChlbGVtZW50KCktPmlkKCkg
PT0gSURfQlVUVE9OIHx8IGVsZW1lbnQoKS0+aWQoKSA9PSBJRF9MRUdFTkQpKSkKKyAgICAgICAg
KGVsZW1lbnQoKSAmJiAoZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YnV0dG9uKCkp
IHx8IGVsZW1lbnQoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmxlZ2VuZCgpKSkpKQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAKICAgICAvLyBDaGlsZHJlbiBvZiBhIGhvcml6b250YWwgbWFy
cXVlZSBkbyBub3QgZmlsbCB0aGUgY29udGFpbmVyIGJ5IGRlZmF1bHQuCkBAIC0xMzI2LDcgKzEz
MjcsNyBAQCBRU3RyaW5nIFJlbmRlck9iamVjdDo6aW5mb3JtYXRpb24oKSBjb25zCiAgICAgaWYg
KGVsZW1lbnQoKSAmJiBlbGVtZW50KCktPmFjdGl2ZSgpKSB0cyA8PCAiYWN0ICI7CiAgICAgaWYg
KGVsZW1lbnQoKSAmJiBlbGVtZW50KCktPmlzTGluaygpKSB0cyA8PCAiYW5jaG9yICI7CiAgICAg
aWYgKGVsZW1lbnQoKSAmJiBlbGVtZW50KCktPmZvY3VzZWQoKSkgdHMgPDwgImZvY3VzICI7Ci0g
ICAgaWYgKGVsZW1lbnQoKSkgdHMgPDwgIiA8IiA8PCAgZ2V0VGFnTmFtZShlbGVtZW50KCktPmlk
KCkpLnN0cmluZygpIDw8ICI+IjsKKyAgICBpZiAoZWxlbWVudCgpKSB0cyA8PCAiIDwiIDw8ICBl
bGVtZW50KCktPmxvY2FsTmFtZSgpLnN0cmluZygpIDw8ICI+IjsKICAgICB0cyA8PCAiICgiIDw8
IHhQb3MoKSA8PCAiLCIgPDwgeVBvcygpIDw8ICIsIiA8PCB3aWR0aCgpIDw8ICIsIiA8PCBoZWln
aHQoKSA8PCAiKSIKIAk8PCAoaXNUYWJsZUNlbGwoKSA/CiAJICAgICggUVN0cmluZzo6ZnJvbUxh
dGluMSgiIFtyPSIpICsKQEAgLTE1NTAsNyArMTU1MSw3IEBAIHZvaWQgUmVuZGVyT2JqZWN0Ojpz
ZXRTdHlsZShSZW5kZXJTdHlsZSAKICAgICAgICAgLy8gVGhlIGJhY2tncm91bmQgb2YgdGhlIHJv
b3QgZWxlbWVudCBvciB0aGUgYm9keSBlbGVtZW50IGNvdWxkIHByb3BhZ2F0ZSB1cCB0bwogICAg
ICAgICAvLyB0aGUgY2FudmFzLiAgSnVzdCBkaXJ0eSB0aGUgZW50aXJlIGNhbnZhcyB3aGVuIG91
ciBzdHlsZSBjaGFuZ2VzIHN1YnN0YW50aWFsbHkuCiAgICAgICAgIGlmIChkID49IFJlbmRlclN0
eWxlOjpSZXBhaW50ICYmIGVsZW1lbnQoKSAmJgotICAgICAgICAgICAgKGVsZW1lbnQoKS0+aWQo
KSA9PSBJRF9IVE1MIHx8IGVsZW1lbnQoKS0+aWQoKSA9PSBJRF9CT0RZKSkKKyAgICAgICAgICAg
IChlbGVtZW50KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpodG1sKCkpIHx8IGVsZW1lbnQoKS0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJvZHkoKSkpKQogICAgICAgICAgICAgY2FudmFzKCktPnJl
cGFpbnQoKTsKICAgICAgICAgZWxzZSBpZiAobV9wYXJlbnQgJiYgIWlzVGV4dCgpKSB7CiAgICAg
ICAgICAgICAvLyBEbyBhIHJlcGFpbnQgd2l0aCB0aGUgb2xkIHN0eWxlIGZpcnN0LCBlLmcuLCBm
b3IgZXhhbXBsZSBpZiB3ZSBnbyBmcm9tCkBAIC0yMTgyLDcgKzIxODMsNyBAQCB2b2lkIFJlbmRl
ck9iamVjdDo6Z2V0VGV4dERlY29yYXRpb25Db2xvCiAgICAgICAgIGlmIChjdXJyICYmIGN1cnIt
PmlzUmVuZGVyQmxvY2soKSAmJiBjdXJyLT5jb250aW51YXRpb24oKSkKICAgICAgICAgICAgIGN1
cnIgPSBjdXJyLT5jb250aW51YXRpb24oKTsKICAgICB9IHdoaWxlIChjdXJyICYmIGRlY29yYXRp
b25zICYmICghcXVpcmtzTW9kZSB8fCAhY3Vyci0+ZWxlbWVudCgpIHx8Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKGN1cnItPmVsZW1lbnQoKS0+aWQoKSAhPSBJRF9BICYm
IGN1cnItPmVsZW1lbnQoKS0+aWQoKSAhPSBJRF9GT05UKSkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICghY3Vyci0+ZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6YSgpKSAmJiAhY3Vyci0+ZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Zm9udCgp
KSkpKTsKIAogICAgIC8vIElmIHdlIGJhaWxlZCBvdXQsIHVzZSB0aGUgZWxlbWVudCB3ZSBiYWls
ZWQgb3V0IGF0ICh0eXBpY2FsbHkgYSA8Zm9udD4gb3IgPGE+IGVsZW1lbnQpLgogICAgIGlmIChk
ZWNvcmF0aW9ucyAmJiBjdXJyKSB7CkBAIC0yMzE2LDcgKzIzMTcsNyBAQCB2b2lkIFJlbmRlck9i
amVjdDo6c2V0UGl4bWFwKGNvbnN0IFFQaXhtCiAgICAgLy8gd291bGQgYXZvaWQgcHV0dGluZyB0
aGlzIGZ1bmN0aW9uIGFuZCB0aGUgQ2FjaGVkT2JqZWN0Q2xpZW50IGJhc2UgY2xhc3MgaW50byBS
ZW5kZXJPYmplY3QuCiAKICAgICBpZiAoaW1hZ2UgJiYgaW1hZ2UtPnBpeG1hcF9zaXplKCkgPT0g
aW1hZ2UtPnZhbGlkX3JlY3QoKS5zaXplKCkgJiYgcGFyZW50KCkpIHsKLSAgICAgICAgaWYgKGNh
bnZhcygpICYmIGVsZW1lbnQoKSAmJiAoZWxlbWVudCgpLT5pZCgpID09IElEX0hUTUwgfHwgZWxl
bWVudCgpLT5pZCgpID09IElEX0JPRFkpKQorICAgICAgICBpZiAoY2FudmFzKCkgJiYgZWxlbWVu
dCgpICYmIChlbGVtZW50KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpodG1sKCkpIHx8IGVsZW1l
bnQoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJvZHkoKSkpKQogICAgICAgICAgICAgY2FudmFz
KCktPnJlcGFpbnQoKTsgICAgLy8gcmVwYWludCB0aGUgZW50aXJlIGNhbnZhcyBzaW5jZSB0aGUg
YmFja2dyb3VuZCBnZXRzIHByb3BhZ2F0ZWQgdXAKICAgICAgICAgZWxzZQogICAgICAgICAgICAg
cmVwYWludCgpOyAgICAgICAgICAgICAgLy8gcmVwYWludCBvYmplY3QsIHdoaWNoIGlzIGEgYm94
IG9yIGEgY29udGFpbmVyIHdpdGggYm94ZXMgaW5zaWRlIGl0CkluZGV4OiBraHRtbC9yZW5kZXJp
bmcvcmVuZGVyX3RhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29y
ZS9raHRtbC9yZW5kZXJpbmcvcmVuZGVyX3RhYmxlLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS4xMjYKZGlmZiAtdSAtcCAtcjEuMTI2IGtodG1sL3JlbmRlcmluZy9yZW5kZXJfdGFibGUuY3Bw
Ci0tLSBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX3RhYmxlLmNwcAkxMSBNYXkgMjAwNSAwMjoxMDox
MCAtMDAwMAkxLjEyNgorKysga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl90YWJsZS5jcHAJMjMgSnVu
IDIwMDUgMjE6NTI6NTcgLTAwMDAKQEAgLTMxLDggKzMxLDggQEAKICNpbmNsdWRlICJyZW5kZXJp
bmcvcmVuZGVyX3RhYmxlLmgiCiAjaW5jbHVkZSAicmVuZGVyaW5nL3RhYmxlX2xheW91dC5oIgog
I2luY2x1ZGUgImh0bWwvaHRtbF90YWJsZWltcGwuaCIKLSNpbmNsdWRlICJtaXNjL2h0bWx0YWdz
LmgiCiAjaW5jbHVkZSAibWlzYy9odG1sYXR0cnMuaCIKKyNpbmNsdWRlICJodG1sbmFtZXMuaCIK
ICNpbmNsdWRlICJ4bWwvZG9tX2RvY2ltcGwuaCIKIAogI2luY2x1ZGUgPGtnbG9iYWwuaD4KQEAg
LTExMiw3ICsxMTIsNyBAQCB2b2lkIFJlbmRlclRhYmxlOjphZGRDaGlsZChSZW5kZXJPYmplY3Qg
CiAjZW5kaWYKICAgICBSZW5kZXJPYmplY3QgKm8gPSBjaGlsZDsKIAotICAgIGlmIChjaGlsZC0+
ZWxlbWVudCgpICYmIGNoaWxkLT5lbGVtZW50KCktPmlkKCkgPT0gSURfRk9STSkgeworICAgIGlm
IChjaGlsZC0+ZWxlbWVudCgpICYmIGNoaWxkLT5lbGVtZW50KCktPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjpmb3JtKCkpKSB7CiAgICAgICAgIFJlbmRlckNvbnRhaW5lcjo6YWRkQ2hpbGQoY2hpbGQs
YmVmb3JlQ2hpbGQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMjYyLDcgKzI2Miw3IEBA
IHZvaWQgUmVuZGVyVGFibGU6OmxheW91dCgpCiAKICAgICBSZW5kZXJPYmplY3QgKmNoaWxkID0g
Zmlyc3RDaGlsZCgpOwogICAgIHdoaWxlKCBjaGlsZCApIHsKLQlpZiAoIGNoaWxkLT5uZWVkc0xh
eW91dCgpICYmICEoY2hpbGQtPmVsZW1lbnQoKSAmJiBjaGlsZC0+ZWxlbWVudCgpLT5pZCgpID09
IElEX0ZPUk0pKQorCWlmICggY2hpbGQtPm5lZWRzTGF5b3V0KCkgJiYgIShjaGlsZC0+ZWxlbWVu
dCgpICYmIGNoaWxkLT5lbGVtZW50KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpmb3JtKCkpKSkK
IAkgICAgY2hpbGQtPmxheW91dCgpOwogCWlmICggY2hpbGQtPmlzVGFibGVTZWN0aW9uKCkgKSB7
CiAJICAgIHN0YXRpY19jYXN0PFJlbmRlclRhYmxlU2VjdGlvbiAqPihjaGlsZCktPmNhbGNSb3dI
ZWlnaHQoKTsKQEAgLTg0OSw3ICs4NDksNyBAQCB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6YWRk
Q2hpbGQoUmVuZGVyCiAjZW5kaWYKICAgICBSZW5kZXJPYmplY3QgKnJvdyA9IGNoaWxkOwogCi0g
ICAgaWYgKGNoaWxkLT5lbGVtZW50KCkgJiYgY2hpbGQtPmVsZW1lbnQoKS0+aWQoKSA9PSBJRF9G
T1JNKSB7CisgICAgaWYgKGNoaWxkLT5lbGVtZW50KCkgJiYgY2hpbGQtPmVsZW1lbnQoKS0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OmZvcm0oKSkpIHsKICAgICAgICAgUmVuZGVyQ29udGFpbmVyOjph
ZGRDaGlsZChjaGlsZCxiZWZvcmVDaGlsZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0x
NDk1LDcgKzE0OTUsNyBAQCB2b2lkIFJlbmRlclRhYmxlUm93OjphZGRDaGlsZChSZW5kZXJPYmpl
CiAgICAga2REZWJ1ZyggNjA0MCApIDw8IHJlbmRlck5hbWUoKSA8PCAiKFRhYmxlUm93KTo6YWRk
Q2hpbGQoICIgPDwgY2hpbGQtPnJlbmRlck5hbWUoKSA8PCAiICkiICA8PCAiLCAiIDw8CiAgICAg
ICAgICAgICAgICAgICAgICAgIChiZWZvcmVDaGlsZCA/IGJlZm9yZUNoaWxkLT5yZW5kZXJOYW1l
KCkgOiAiMCIpIDw8ICIgKSIgPDwgZW5kbDsKICNlbmRpZgotICAgIGlmIChjaGlsZC0+ZWxlbWVu
dCgpICYmIGNoaWxkLT5lbGVtZW50KCktPmlkKCkgPT0gSURfRk9STSkgeworICAgIGlmIChjaGls
ZC0+ZWxlbWVudCgpICYmIGNoaWxkLT5lbGVtZW50KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpm
b3JtKCkpKSB7CiAgICAgICAgIFJlbmRlckNvbnRhaW5lcjo6YWRkQ2hpbGQoY2hpbGQsYmVmb3Jl
Q2hpbGQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTYwNiw3ICsxNjA2LDcgQEAgdm9p
ZCBSZW5kZXJUYWJsZUNlbGw6OnVwZGF0ZUZyb21FbGVtZW50KAogICAgIGludCBvbGRSU3BhbiA9
IHJTcGFuOwogICAgIGludCBvbGRDU3BhbiA9IGNTcGFuOwogICAgIERPTTo6Tm9kZUltcGwqIG5v
ZGUgPSBlbGVtZW50KCk7Ci0gICAgaWYgKG5vZGUgJiYgKG5vZGUtPmlkKCkgPT0gSURfVEQgfHwg
bm9kZS0+aWQoKSA9PSBJRF9USCkpIHsKKyAgICBpZiAobm9kZSAmJiAobm9kZS0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OnRkKCkpIHx8IG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0aCgpKSkp
IHsKICAgICAgICAgRE9NOjpIVE1MVGFibGVDZWxsRWxlbWVudEltcGwgKnRjID0gc3RhdGljX2Nh
c3Q8RE9NOjpIVE1MVGFibGVDZWxsRWxlbWVudEltcGwgKj4obm9kZSk7CiAgICAgICAgIGNTcGFu
ID0gdGMtPmNvbFNwYW4oKTsKICAgICAgICAgclNwYW4gPSB0Yy0+cm93U3BhbigpOwpAQCAtMjI5
MCw3ICsyMjkwLDcgQEAgdm9pZCBSZW5kZXJUYWJsZUNvbDo6dXBkYXRlRnJvbUVsZW1lbnQoKQog
ewogICAgIGludCBvbGRTcGFuID0gX3NwYW47CiAgICAgRE9NOjpOb2RlSW1wbCAqbm9kZSA9IGVs
ZW1lbnQoKTsKLSAgICBpZiAobm9kZSAmJiAobm9kZS0+aWQoKSA9PSBJRF9DT0wgfHwgbm9kZS0+
aWQoKSA9PSBJRF9DT0xHUk9VUCkpIHsKKyAgICBpZiAobm9kZSAmJiAobm9kZS0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OmNvbCgpKSB8fCBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Y29sZ3Jv
dXAoKSkpKSB7CiAgICAgICAgIERPTTo6SFRNTFRhYmxlQ29sRWxlbWVudEltcGwgKnRjID0gc3Rh
dGljX2Nhc3Q8RE9NOjpIVE1MVGFibGVDb2xFbGVtZW50SW1wbCAqPihub2RlKTsKICAgICAgICAg
X3NwYW4gPSB0Yy0+c3BhbigpOwogICAgIH0gCkluZGV4OiBraHRtbC94bWwvZG9tX2F0b21pY3N0
cmluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwveG1s
L2RvbV9hdG9taWNzdHJpbmcuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjMKZGlmZiAtdSAt
cCAtcjEuMyBraHRtbC94bWwvZG9tX2F0b21pY3N0cmluZy5jcHAKLS0tIGtodG1sL3htbC9kb21f
YXRvbWljc3RyaW5nLmNwcAk1IEZlYiAyMDA0IDAxOjQ1OjE2IC0wMDAwCTEuMworKysga2h0bWwv
eG1sL2RvbV9hdG9taWNzdHJpbmcuY3BwCTIzIEp1biAyMDA1IDIxOjUyOjU3IC0wMDAwCkBAIC0z
MDQsNiArMzA0LDkgQEAgdm9pZCBBdG9taWNTdHJpbmc6OnJlaGFzaChpbnQgbmV3VGFibGVTaQog
CiAgICAgZXh0ZXJuIGNvbnN0IEF0b21pY1N0cmluZyBudWxsQXRvbTsKICAgICBleHRlcm4gY29u
c3QgQXRvbWljU3RyaW5nIGVtcHR5QXRvbTsKKyAgICBleHRlcm4gY29uc3QgQXRvbWljU3RyaW5n
IHRleHRBdG9tOworICAgIGV4dGVybiBjb25zdCBBdG9taWNTdHJpbmcgY29tbWVudEF0b207Cisg
ICAgZXh0ZXJuIGNvbnN0IEF0b21pY1N0cmluZyBzdGFyQXRvbTsKICNlbHNlCiAgICAgLy8gRGVm
aW5lIGFuIEF0b21pY1N0cmluZy1zaXplZCBhcnJheSBvZiBwb2ludGVycyB0byBhdm9pZCBzdGF0
aWMgaW5pdGlhbGl6YXRpb24uCiAgICAgLy8gVXNlIGFuIGFycmF5IG9mIHBvaW50ZXJzIGluc3Rl
YWQgb2YgYW4gYXJyYXkgb2YgY2hhciBpbiBjYXNlIHRoZXJlIGlzIHNvbWUgYWxpZ25tZW50IGlz
c3VlLgpAQCAtMzEyLDYgKzMxNSw5IEBAIHZvaWQgQXRvbWljU3RyaW5nOjpyZWhhc2goaW50IG5l
d1RhYmxlU2kKIAogICAgIERFRklORV9HTE9CQUwobnVsbCwgaWdub3JlZCkKICAgICBERUZJTkVf
R0xPQkFMKGVtcHR5LCBpZ25vcmVkKQorICAgIERFRklORV9HTE9CQUwodGV4dCwgaWdub3JlZCkK
KyAgICBERUZJTkVfR0xPQkFMKGNvbW1lbnQsIGlnbm9yZWQpCisgICAgREVGSU5FX0dMT0JBTChz
dGFyLCBpZ25vcmVkKQogI2VuZGlmCiAKICNkZWZpbmUgQ0FMTF9ERUZJTkVfR0xPQkFMKG5hbWUp
IERFRklORV9HTE9CQUwobmFtZSwgI25hbWUpCkBAIC0zMjUsNyArMzMxLDEwIEBAIHZvaWQgQXRv
bWljU3RyaW5nOjppbml0KCkKICAgICAgICAgLy8gVXNlIHBsYWNlbWVudCBuZXcgdG8gaW5pdGlh
bGl6ZSB0aGUgZ2xvYmFscy4KICAgICAgICAgbmV3ICgmbnVsbEF0b20pIEF0b21pY1N0cmluZzsK
ICAgICAgICAgbmV3ICgmZW1wdHlBdG9tKSBBdG9taWNTdHJpbmcoIiIpOwotICAgICAgICAKKyAg
ICAgICAgbmV3ICgmdGV4dEF0b20pIEF0b21pY1N0cmluZygiI3RleHQiKTsKKyAgICAgICAgbmV3
ICgmY29tbWVudEF0b20pIEF0b21pY1N0cmluZygiI2NvbW1lbnQiKTsKKyAgICAgICAgbmV3ICgm
c3RhckF0b20pIEF0b21pY1N0cmluZygiKiIpOworCiAgICAgICAgICNkZWZpbmUgUExBQ0VNRU5U
X05FV19HTE9CQUwobmFtZSwgc3RyaW5nKSBuZXcgKCZuYW1lICMjIFByb3BlcnR5TmFtZSkgQXRv
bWljU3RyaW5nKHN0cmluZyk7CiAgICAgICAgICNkZWZpbmUgQ0FMTF9QTEFDRU1FTlRfTkVXX0dM
T0JBTChuYW1lKSBQTEFDRU1FTlRfTkVXX0dMT0JBTChuYW1lLCAjbmFtZSkKICAgICAgICAgS0hU
TUxfQVRPTUlDU1RSSU5HX0VBQ0hfR0xPQkFMKENBTExfUExBQ0VNRU5UX05FV19HTE9CQUwpCklu
ZGV4OiBraHRtbC94bWwvZG9tX2F0b21pY3N0cmluZy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9XZWJDb3JlL2todG1sL3htbC9kb21fYXRvbWljc3RyaW5nLmgsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuMwpkaWZmIC11IC1wIC1yMS4zIGtodG1sL3htbC9kb21fYXRvbWljc3RyaW5n
LmgKLS0tIGtodG1sL3htbC9kb21fYXRvbWljc3RyaW5nLmgJMjEgSnVuIDIwMDUgMjI6Mjc6NTUg
LTAwMDAJMS4zCisrKyBraHRtbC94bWwvZG9tX2F0b21pY3N0cmluZy5oCTIzIEp1biAyMDA1IDIx
OjUyOjU3IC0wMDAwCkBAIC0xMTYsNiArMTE2LDkgQEAgaW5saW5lIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBBdG9taWNTdHJpbgogI2lmICFLSFRNTF9BVE9NSUNTVFJJTkdfSElERV9HTE9CQUxTCiAg
ICAgZXh0ZXJuIGNvbnN0IEF0b21pY1N0cmluZyBudWxsQXRvbTsKICAgICBleHRlcm4gY29uc3Qg
QXRvbWljU3RyaW5nIGVtcHR5QXRvbTsKKyAgICBleHRlcm4gY29uc3QgQXRvbWljU3RyaW5nIHRl
eHRBdG9tOworICAgIGV4dGVybiBjb25zdCBBdG9taWNTdHJpbmcgY29tbWVudEF0b207CisgICAg
ZXh0ZXJuIGNvbnN0IEF0b21pY1N0cmluZyBzdGFyQXRvbTsKICNkZWZpbmUgS0hUTUxfQVRPTUlD
U1RSSU5HX0RFQ0xBUkVfR0xPQkFMKG5hbWUpIGV4dGVybiBjb25zdCBBdG9taWNTdHJpbmcgbmFt
ZSAjIyBQcm9wZXJ0eU5hbWU7CiAgICAgS0hUTUxfQVRPTUlDU1RSSU5HX0VBQ0hfR0xPQkFMKEtI
VE1MX0FUT01JQ1NUUklOR19ERUNMQVJFX0dMT0JBTCkKICAgICBLSFRNTF9BVE9NSUNTVFJJTkdf
REVDTEFSRV9HTE9CQUwoc3BlY2lhbFByb3RvdHlwZSkKSW5kZXg6IGtodG1sL3htbC9kb21fZG9j
aW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwveG1s
L2RvbV9kb2NpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yMzAKZGlmZiAtdSAtcCAt
cjEuMjMwIGtodG1sL3htbC9kb21fZG9jaW1wbC5jcHAKLS0tIGtodG1sL3htbC9kb21fZG9jaW1w
bC5jcHAJMjIgSnVuIDIwMDUgMTg6MjI6MDIgLTAwMDAJMS4yMzAKKysrIGtodG1sL3htbC9kb21f
ZG9jaW1wbC5jcHAJMjMgSnVuIDIwMDUgMjE6NTM6MDAgLTAwMDAKQEAgLTM0LDggKzM0LDYgQEAK
ICNpbmNsdWRlICJ4bWwvZG9tMl92aWV3c2ltcGwuaCIKICNpbmNsdWRlICJ4bWwveG1sX3Rva2Vu
aXplci5oIgogCi0jaW5jbHVkZSAieG1sX25hbWVzcGFjZV90YWJsZS5oIgotCiAjaW5jbHVkZSAi
Y3NzL2Nzc2hlbHBlci5oIgogI2luY2x1ZGUgImNzcy9jc3NzdHlsZXNlbGVjdG9yLmgiCiAjaW5j
bHVkZSAiY3NzL2Nzc19zdHlsZXNoZWV0aW1wbC5oIgpAQCAtNjUsMTcgKzYzLDEwIEBACiAjaW5j
bHVkZSAia2h0bWxfc2V0dGluZ3MuaCIKICNpbmNsdWRlICJraHRtbHBhcnRfcC5oIgogCi0jaW5j
bHVkZSAiaHRtbC9odG1sX2Jhc2VpbXBsLmgiCi0jaW5jbHVkZSAiaHRtbC9odG1sX2Jsb2NraW1w
bC5oIgotI2luY2x1ZGUgImh0bWwvaHRtbF9jYW52YXNpbXBsLmgiCisvLyBGSVhNRTogV2Ugd2Fu
dCB0byBjdXQgdGhlIHJlbWFpbmluZyBIVE1MIGRlcGVuZGVuY2llcyBzbyB0aGF0IHdlIGRvbid0
IG5lZWQgdG8gaW5jbHVkZSB0aGVzZSBmaWxlcy4KICNpbmNsdWRlICJodG1sL2h0bWxfZG9jdW1l
bnRpbXBsLmgiCi0jaW5jbHVkZSAiaHRtbC9odG1sX2Zvcm1pbXBsLmgiCiAjaW5jbHVkZSAiaHRt
bC9odG1sX2hlYWRpbXBsLmgiCiAjaW5jbHVkZSAiaHRtbC9odG1sX2ltYWdlaW1wbC5oIgotI2lu
Y2x1ZGUgImh0bWwvaHRtbF9saXN0aW1wbC5oIgotI2luY2x1ZGUgImh0bWwvaHRtbF9taXNjaW1w
bC5oIgotI2luY2x1ZGUgImh0bWwvaHRtbF90YWJsZWltcGwuaCIKLSNpbmNsdWRlICJodG1sL2h0
bWxfb2JqZWN0aW1wbC5oIgogCiAjaW5jbHVkZSAiY3NzdmFsdWVzLmgiCiAKQEAgLTUwNiw3ICs0
OTcsOSBAQCBFbGVtZW50SW1wbCAqRG9jdW1lbnRJbXBsOjpkb2N1bWVudEVsZW1lCiAKIEVsZW1l
bnRJbXBsICpEb2N1bWVudEltcGw6OmNyZWF0ZUVsZW1lbnQoIGNvbnN0IERPTVN0cmluZyAmbmFt
ZSwgaW50ICZleGNlcHRpb25jb2RlICkKIHsKLSAgICByZXR1cm4gbmV3IFhNTEVsZW1lbnRJbXBs
KCBkb2N1bWVudCwgbmFtZS5pbXBsZW1lbnRhdGlvbigpICk7CisgICAgLyogRklYTUU6IE5lZWQg
dG8gcmUtaW1wbGVtZW50CisgICAgcmV0dXJuIG5ldyBYTUxFbGVtZW50SW1wbCggZG9jdW1lbnQs
IG5hbWUuaW1wbGVtZW50YXRpb24oKSApOyAqLworICAgIHJldHVybiAwOwogfQogCiBEb2N1bWVu
dEZyYWdtZW50SW1wbCAqRG9jdW1lbnRJbXBsOjpjcmVhdGVEb2N1bWVudEZyYWdtZW50KCAgKQpA
QCAtNTc0LDkgKzU2Nyw4IEBAIE5vZGVJbXBsICpEb2N1bWVudEltcGw6OmltcG9ydE5vZGUoTm9k
ZUkKICAgICAgICAgY2FzZSBOb2RlOjpFTEVNRU5UX05PREU6IHsKICAgICAgICAgICAgIEVsZW1l
bnRJbXBsICpvbGRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxlbWVudEltcGwgKj4oaW1wb3J0ZWRO
b2RlKTsKICAgICAgICAgICAgIERvY3VtZW50SW1wbCAqb2xkRG9jID0gb2xkRWxlbWVudC0+Z2V0
RG9jdW1lbnQoKTsKLSAgICAgICAgICAgIHN0YXRpYyBET01TdHJpbmcgSFRNTE5hbWVzcGFjZShY
SFRNTF9OQU1FU1BBQ0UpOwotICAgICAgICAgICAgRE9NU3RyaW5nIGVsZW1lbnROYW1lc3BhY2Ug
PSBvbGRFbGVtZW50LT5pc0hUTUxFbGVtZW50KCkgPyBIVE1MTmFtZXNwYWNlIDogb2xkRWxlbWVu
dC0+bmFtZXNwYWNlVVJJKCk7Ci0gICAgICAgICAgICBFbGVtZW50SW1wbCAqbmV3RWxlbWVudCA9
IGNyZWF0ZUVsZW1lbnROUyhlbGVtZW50TmFtZXNwYWNlLmltcGxlbWVudGF0aW9uKCksIG9sZEVs
ZW1lbnQtPnRhZ05hbWUoKSwgZXhjZXB0aW9uY29kZSk7CisgICAgICAgICAgICAvLyBGSVhNRTog
UHJlZml4IGlzIGxvc3QuICBJcyB0aGF0IHJpZ2h0PworICAgICAgICAgICAgRWxlbWVudEltcGwg
Km5ld0VsZW1lbnQgPSBjcmVhdGVFbGVtZW50TlMob2xkRWxlbWVudC0+bmFtZXNwYWNlVVJJKCks
IG9sZEVsZW1lbnQtPmxvY2FsTmFtZSgpLCBleGNlcHRpb25jb2RlKTsKICAgICAgICAgICAgIGlm
IChleGNlcHRpb25jb2RlICE9IDApCiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAKQEAgLTYz
NiwxMSArNjI4LDEzIEBAIE5vZGVJbXBsICpEb2N1bWVudEltcGw6OmltcG9ydE5vZGUoTm9kZUkK
IAogRWxlbWVudEltcGwgKkRvY3VtZW50SW1wbDo6Y3JlYXRlRWxlbWVudE5TKCBjb25zdCBET01T
dHJpbmcgJl9uYW1lc3BhY2VVUkksIGNvbnN0IERPTVN0cmluZyAmX3F1YWxpZmllZE5hbWUsIGlu
dCAmZXhjZXB0aW9uY29kZSkKIHsKKyAgICAvKiBGSVhNRTogUmUtaW1wbGVtZW50IHRoaXMgdG8g
dXNlIGdlbmVyaWMgZWxlbWVudCBzdHVmZiBldmVudHVhbGx5LgogICAgIEVsZW1lbnRJbXBsICpl
ID0gMDsKICAgICBRU3RyaW5nIHFOYW1lID0gX3F1YWxpZmllZE5hbWUuc3RyaW5nKCk7CiAgICAg
aW50IGNvbG9uUG9zID0gcU5hbWUuZmluZCgnOicsMCk7CiAKICAgICBpZiAoX25hbWVzcGFjZVVS
SSA9PSBYSFRNTF9OQU1FU1BBQ0UpIHsKKyAgICAgICAgICAgIAogICAgICAgICAvLyBVc2VyIHJl
cXVlc3RlZCBhbiBlbGVtZW50IGluIHRoZSBYSFRNTCBuYW1lc3BhY2UgLSB0aGlzIG1lYW5zIHdl
IGNyZWF0ZSBhIHNwZWNpZmljIGVsZW1lbnQKICAgICAgICAgLy8gKGVsZW1lbnRzIG5vdCBpbiB0
aGlzIG5hbWVzcGFjZSBhcmUgdHJlYXRlZCBhcyBub3JtYWwgWE1MIGVsZW1lbnRzKQogICAgICAg
ICBlID0gY3JlYXRlSFRNTEVsZW1lbnQocU5hbWUubWlkKGNvbG9uUG9zKzEpLCBleGNlcHRpb25j
b2RlKTsKQEAgLTY1OCw3ICs2NTIsOCBAQCBFbGVtZW50SW1wbCAqRG9jdW1lbnRJbXBsOjpjcmVh
dGVFbGVtZW50CiAgICAgaWYgKCFlKQogICAgICAgICBlID0gbmV3IFhNTEVsZW1lbnRJbXBsKCBk
b2N1bWVudCwgX3F1YWxpZmllZE5hbWUuaW1wbGVtZW50YXRpb24oKSwgX25hbWVzcGFjZVVSSS5p
bXBsZW1lbnRhdGlvbigpICk7CiAKLSAgICByZXR1cm4gZTsKKyAgICByZXR1cm4gZTsqLworICAg
IHJldHVybiAwOwogfQogCiBFbGVtZW50SW1wbCAqRG9jdW1lbnRJbXBsOjpnZXRFbGVtZW50QnlJ
ZCggY29uc3QgRE9NU3RyaW5nICZlbGVtZW50SWQgKSBjb25zdApAQCAtODExLDIyMCArODA2LDYg
QEAgdW5zaWduZWQgc2hvcnQgRG9jdW1lbnRJbXBsOjpub2RlVHlwZSgpIAogICAgIHJldHVybiBO
b2RlOjpET0NVTUVOVF9OT0RFOwogfQogCi1FbGVtZW50SW1wbCAqRG9jdW1lbnRJbXBsOjpjcmVh
dGVIVE1MRWxlbWVudCggY29uc3QgRE9NU3RyaW5nICZuYW1lLCBpbnQgJmV4Y2VwdGlvbmNvZGUg
KQotewotICAgIGlmICghaXNWYWxpZE5hbWUobmFtZSkpIHsKLSAgICAgICAgZXhjZXB0aW9uY29k
ZSA9IERPTUV4Y2VwdGlvbjo6SU5WQUxJRF9DSEFSQUNURVJfRVJSOwotICAgICAgICByZXR1cm4g
MDsKLSAgICB9Ci0gICAgcmV0dXJuIGNyZWF0ZUhUTUxFbGVtZW50KHRhZ0lkKDAsIG5hbWUuaW1w
bGVtZW50YXRpb24oKSwgZmFsc2UpKTsKLX0KLQotRWxlbWVudEltcGwgKkRvY3VtZW50SW1wbDo6
Y3JlYXRlSFRNTEVsZW1lbnQodW5zaWduZWQgc2hvcnQgdGFnSUQpCi17Ci0gICAgc3dpdGNoICh0
YWdJRCkKLSAgICB7Ci0gICAgY2FzZSBJRF9IVE1MOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxI
dG1sRWxlbWVudEltcGwoZG9jUHRyKCkpOwotICAgIGNhc2UgSURfSEVBRDoKLSAgICAgICAgcmV0
dXJuIG5ldyBIVE1MSGVhZEVsZW1lbnRJbXBsKGRvY1B0cigpKTsKLSAgICBjYXNlIElEX0JPRFk6
Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTEJvZHlFbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0KLS8v
IGhlYWQgZWxlbWVudHMKLSAgICBjYXNlIElEX0JBU0U6Ci0gICAgICAgIHJldHVybiBuZXcgSFRN
TEJhc2VFbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0gICAgY2FzZSBJRF9MSU5LOgotICAgICAgICBy
ZXR1cm4gbmV3IEhUTUxMaW5rRWxlbWVudEltcGwoZG9jUHRyKCkpOwotICAgIGNhc2UgSURfTUVU
QToKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MTWV0YUVsZW1lbnRJbXBsKGRvY1B0cigpKTsKLSAg
ICBjYXNlIElEX1NUWUxFOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxTdHlsZUVsZW1lbnRJbXBs
KGRvY1B0cigpKTsKLSAgICBjYXNlIElEX1RJVExFOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxU
aXRsZUVsZW1lbnRJbXBsKGRvY1B0cigpKTsKLQotLy8gZnJhbWVzCi0gICAgY2FzZSBJRF9GUkFN
RToKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MRnJhbWVFbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0g
ICAgY2FzZSBJRF9GUkFNRVNFVDoKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MRnJhbWVTZXRFbGVt
ZW50SW1wbChkb2NQdHIoKSk7Ci0gICAgY2FzZSBJRF9JRlJBTUU6Ci0gICAgICAgIHJldHVybiBu
ZXcgSFRNTElGcmFtZUVsZW1lbnRJbXBsKGRvY1B0cigpKTsKLQotLy8gZm9ybSBlbGVtZW50cwot
Ly8gIyMjIEZJWE1FOiB3ZSBuZWVkIGEgd2F5IHRvIHNldCBmb3JtIGRlcGVuZGVuY3kgYWZ0ZXIg
d2UgaGF2ZSBtYWRlIHRoZSBmb3JtIGVsZW1lbnRzCi0gICAgY2FzZSBJRF9GT1JNOgotICAgICAg
ICByZXR1cm4gbmV3IEhUTUxGb3JtRWxlbWVudEltcGwoZG9jUHRyKCkpOwotICAgIGNhc2UgSURf
QlVUVE9OOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxCdXR0b25FbGVtZW50SW1wbChkb2NQdHIo
KSk7Ci0gICAgY2FzZSBJRF9GSUVMRFNFVDoKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MRmllbGRT
ZXRFbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0gICAgY2FzZSBJRF9JTlBVVDoKLSAgICAgICAgcmV0
dXJuIG5ldyBIVE1MSW5wdXRFbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0gICAgY2FzZSBJRF9JU0lO
REVYOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxJc0luZGV4RWxlbWVudEltcGwoZG9jUHRyKCkp
OwotICAgIGNhc2UgSURfTEFCRUw6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTExhYmVsRWxlbWVu
dEltcGwoZG9jUHRyKCkpOwotICAgIGNhc2UgSURfTEVHRU5EOgotICAgICAgICByZXR1cm4gbmV3
IEhUTUxMZWdlbmRFbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0gICAgY2FzZSBJRF9PUFRHUk9VUDoK
LSAgICAgICAgcmV0dXJuIG5ldyBIVE1MT3B0R3JvdXBFbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0g
ICAgY2FzZSBJRF9PUFRJT046Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTE9wdGlvbkVsZW1lbnRJ
bXBsKGRvY1B0cigpKTsKLSAgICBjYXNlIElEX1NFTEVDVDoKLSAgICAgICAgcmV0dXJuIG5ldyBI
VE1MU2VsZWN0RWxlbWVudEltcGwoZG9jUHRyKCkpOwotICAgIGNhc2UgSURfVEVYVEFSRUE6Ci0g
ICAgICAgIHJldHVybiBuZXcgSFRNTFRleHRBcmVhRWxlbWVudEltcGwoZG9jUHRyKCkpOwotCi0v
LyBsaXN0cwotICAgIGNhc2UgSURfREw6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTERMaXN0RWxl
bWVudEltcGwoZG9jUHRyKCkpOwotICAgIGNhc2UgSURfREQ6Ci0gICAgICAgIHJldHVybiBuZXcg
SFRNTEdlbmVyaWNFbGVtZW50SW1wbChkb2NQdHIoKSwgdGFnSUQpOwotICAgIGNhc2UgSURfRFQ6
Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTEdlbmVyaWNFbGVtZW50SW1wbChkb2NQdHIoKSwgdGFn
SUQpOwotICAgIGNhc2UgSURfVUw6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTFVMaXN0RWxlbWVu
dEltcGwoZG9jUHRyKCkpOwotICAgIGNhc2UgSURfT0w6Ci0gICAgICAgIHJldHVybiBuZXcgSFRN
TE9MaXN0RWxlbWVudEltcGwoZG9jUHRyKCkpOwotICAgIGNhc2UgSURfRElSOgotICAgICAgICBy
ZXR1cm4gbmV3IEhUTUxEaXJlY3RvcnlFbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0gICAgY2FzZSBJ
RF9NRU5VOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxNZW51RWxlbWVudEltcGwoZG9jUHRyKCkp
OwotICAgIGNhc2UgSURfTEk6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTExJRWxlbWVudEltcGwo
ZG9jUHRyKCkpOwotCi0vLyBmb3JtYXR0aW5nIGVsZW1lbnRzIChibG9jaykKLSAgICBjYXNlIElE
X0JMT0NLUVVPVEU6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTEJsb2NrcXVvdGVFbGVtZW50SW1w
bChkb2NQdHIoKSk7Ci0gICAgY2FzZSBJRF9ESVY6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTERp
dkVsZW1lbnRJbXBsKGRvY1B0cigpKTsKLSAgICBjYXNlIElEX0gxOgotICAgIGNhc2UgSURfSDI6
Ci0gICAgY2FzZSBJRF9IMzoKLSAgICBjYXNlIElEX0g0OgotICAgIGNhc2UgSURfSDU6Ci0gICAg
Y2FzZSBJRF9INjoKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MSGVhZGluZ0VsZW1lbnRJbXBsKGRv
Y1B0cigpLCB0YWdJRCk7Ci0gICAgY2FzZSBJRF9IUjoKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1M
SFJFbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0gICAgY2FzZSBJRF9QOgotICAgICAgICByZXR1cm4g
bmV3IEhUTUxQYXJhZ3JhcGhFbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0gICAgY2FzZSBJRF9QUkU6
Ci0gICAgY2FzZSBJRF9YTVA6Ci0gICAgY2FzZSBJRF9QTEFJTlRFWFQ6Ci0gICAgICAgIHJldHVy
biBuZXcgSFRNTFByZUVsZW1lbnRJbXBsKGRvY1B0cigpLCB0YWdJRCk7Ci0gICAgY2FzZSBJRF9M
QVlFUjoKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MTGF5ZXJFbGVtZW50SW1wbChkb2NQdHIoKSk7
Ci0KLS8vIGZvbnQgc3R1ZmYKLSAgICBjYXNlIElEX0JBU0VGT05UOgotICAgICAgICByZXR1cm4g
bmV3IEhUTUxCYXNlRm9udEVsZW1lbnRJbXBsKGRvY1B0cigpKTsKLSAgICBjYXNlIElEX0ZPTlQ6
Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTEZvbnRFbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0KLS8v
IGlucy9kZWwKLSAgICBjYXNlIElEX0RFTDoKLSAgICBjYXNlIElEX0lOUzoKLSAgICAgICAgcmV0
dXJuIG5ldyBIVE1MTW9kRWxlbWVudEltcGwoZG9jUHRyKCksIHRhZ0lEKTsKLQotLy8gYW5jaG9y
Ci0gICAgY2FzZSBJRF9BOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxBbmNob3JFbGVtZW50SW1w
bChkb2NQdHIoKSk7Ci0KLS8vIGltYWdlcwotICAgIGNhc2UgSURfSU1HOgotICAgICAgICByZXR1
cm4gbmV3IEhUTUxJbWFnZUVsZW1lbnRJbXBsKGRvY1B0cigpKTsKLSAgICBjYXNlIElEX01BUDoK
LSAgICAgICAgcmV0dXJuIG5ldyBIVE1MTWFwRWxlbWVudEltcGwoZG9jUHRyKCkpOwotICAgIGNh
c2UgSURfQVJFQToKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MQXJlYUVsZW1lbnRJbXBsKGRvY1B0
cigpKTsKLSAgICBjYXNlIElEX0NBTlZBUzoKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MQ2FudmFz
RWxlbWVudEltcGwoZG9jUHRyKCkpOwotCi0vLyBvYmplY3RzLCBhcHBsZXRzIGFuZCBzY3JpcHRz
Ci0gICAgY2FzZSBJRF9BUFBMRVQ6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTEFwcGxldEVsZW1l
bnRJbXBsKGRvY1B0cigpKTsKLSAgICBjYXNlIElEX0VNQkVEOgotICAgICAgICByZXR1cm4gbmV3
IEhUTUxFbWJlZEVsZW1lbnRJbXBsKGRvY1B0cigpKTsKLSAgICBjYXNlIElEX09CSkVDVDoKLSAg
ICAgICAgcmV0dXJuIG5ldyBIVE1MT2JqZWN0RWxlbWVudEltcGwoZG9jUHRyKCkpOwotICAgIGNh
c2UgSURfUEFSQU06Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTFBhcmFtRWxlbWVudEltcGwoZG9j
UHRyKCkpOwotICAgIGNhc2UgSURfU0NSSVBUOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxTY3Jp
cHRFbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0KLS8vIHRhYmxlcwotICAgIGNhc2UgSURfVEFCTEU6
Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTFRhYmxlRWxlbWVudEltcGwoZG9jUHRyKCkpOwotICAg
IGNhc2UgSURfQ0FQVElPTjoKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MVGFibGVDYXB0aW9uRWxl
bWVudEltcGwoZG9jUHRyKCkpOwotICAgIGNhc2UgSURfQ09MR1JPVVA6Ci0gICAgY2FzZSBJRF9D
T0w6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTFRhYmxlQ29sRWxlbWVudEltcGwoZG9jUHRyKCks
IHRhZ0lEKTsKLSAgICBjYXNlIElEX1RSOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxUYWJsZVJv
d0VsZW1lbnRJbXBsKGRvY1B0cigpKTsKLSAgICBjYXNlIElEX1REOgotICAgIGNhc2UgSURfVEg6
Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsKGRvY1B0cigpLCB0
YWdJRCk7Ci0gICAgY2FzZSBJRF9USEVBRDoKLSAgICBjYXNlIElEX1RCT0RZOgotICAgIGNhc2Ug
SURfVEZPT1Q6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBs
KGRvY1B0cigpLCB0YWdJRCwgZmFsc2UpOwotCi0vLyBpbmxpbmUgZWxlbWVudHMKLSAgICBjYXNl
IElEX0JSOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxCUkVsZW1lbnRJbXBsKGRvY1B0cigpKTsK
LSAgICBjYXNlIElEX1E6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTFF1b3RlRWxlbWVudEltcGwo
ZG9jUHRyKCkpOwotCi0gICAgY2FzZSBJRF9NQVJRVUVFOgotICAgICAgICByZXR1cm4gbmV3IEhU
TUxNYXJxdWVlRWxlbWVudEltcGwoZG9jUHRyKCkpOwotICAgCi0vLyBlbGVtZW50cyB3aXRoIG5v
IHNwZWNpYWwgcmVwcmVzZW50YXRpb24gaW4gdGhlIERPTQotCi0vLyBibG9jazoKLSAgICBjYXNl
IElEX0FERFJFU1M6Ci0gICAgY2FzZSBJRF9DRU5URVI6Ci0KLS8vIGlubGluZQotICAgICAgICAv
LyAlZm9udHN0eWxlCi0gICAgY2FzZSBJRF9UVDoKLSAgICBjYXNlIElEX1U6Ci0gICAgY2FzZSBJ
RF9COgotICAgIGNhc2UgSURfSToKLSAgICBjYXNlIElEX1M6Ci0gICAgY2FzZSBJRF9TVFJJS0U6
Ci0gICAgY2FzZSBJRF9CSUc6Ci0gICAgY2FzZSBJRF9TTUFMTDoKLQotICAgICAgICAvLyAlcGhy
YXNlCi0gICAgY2FzZSBJRF9FTToKLSAgICBjYXNlIElEX1NUUk9ORzoKLSAgICBjYXNlIElEX0RG
TjoKLSAgICBjYXNlIElEX0NPREU6Ci0gICAgY2FzZSBJRF9TQU1QOgotICAgIGNhc2UgSURfS0JE
OgotICAgIGNhc2UgSURfVkFSOgotICAgIGNhc2UgSURfQ0lURToKLSAgICBjYXNlIElEX0FCQlI6
Ci0gICAgY2FzZSBJRF9BQ1JPTllNOgotCi0gICAgICAgIC8vICVzcGVjaWFsCi0gICAgY2FzZSBJ
RF9TVUI6Ci0gICAgY2FzZSBJRF9TVVA6Ci0gICAgY2FzZSBJRF9TUEFOOgotICAgIGNhc2UgSURf
Tk9CUjoKLSAgICBjYXNlIElEX1dCUjoKLQotICAgIGNhc2UgSURfQkRPOgotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTEdlbmVyaWNFbGVtZW50SW1wbChkb2NQdHIoKSwgdGFn
SUQpOwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCiBRU3RyaW5nIERvY3VtZW50SW1wbDo6
bmV4dFN0YXRlKCkKIHsKICAgIFFTdHJpbmcgc3RhdGU7CkBAIC0xNDY0LDEwICsxMjQ1LDEwIEBA
IEhUTUxFbGVtZW50SW1wbCogRG9jdW1lbnRJbXBsOjpib2R5KCkKICAgICAvLyB0cnkgdG8gcHJl
ZmVyIGEgRlJBTUVTRVQgZWxlbWVudCBvdmVyIEJPRFkKICAgICBOb2RlSW1wbCogYm9keSA9IDA7
CiAgICAgZm9yIChOb2RlSW1wbCogaSA9IGRlLT5maXJzdENoaWxkKCk7IGk7IGkgPSBpLT5uZXh0
U2libGluZygpKSB7Ci0gICAgICAgIGlmIChpLT5pZCgpID09IElEX0ZSQU1FU0VUKQorICAgICAg
ICBpZiAoaS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZyYW1lc2V0KCkpKQogICAgICAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCo+KGkpOwogICAgICAgICAKLSAgICAg
ICAgaWYgKGktPmlkKCkgPT0gSURfQk9EWSkKKyAgICAgICAgaWYgKGktPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjpib2R5KCkpKQogICAgICAgICAgICAgYm9keSA9IGk7CiAgICAgfQogICAgIHJldHVy
biBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwgKj4oYm9keSk7CkBAIC0xNTk3LDcgKzEzNzgs
NyBAQCBib29sIERvY3VtZW50SW1wbDo6c2hvdWxkU2NoZWR1bGVMYXlvdXQoCiAgICAgLy8gKGMp
IHdlIGhhdmUgYSA8Ym9keT4KICAgICByZXR1cm4gKHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+
bmVlZHNMYXlvdXQoKSAmJiBoYXZlU3R5bGVzaGVldHNMb2FkZWQoKSAmJgogICAgICAgICAgICAg
ZG9jdW1lbnRFbGVtZW50KCkgJiYgZG9jdW1lbnRFbGVtZW50KCktPnJlbmRlcmVyKCkgJiYKLSAg
ICAgICAgICAgIChkb2N1bWVudEVsZW1lbnQoKS0+aWQoKSAhPSBJRF9IVE1MIHx8IGJvZHkoKSkp
OworICAgICAgICAgICAgKCFkb2N1bWVudEVsZW1lbnQoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
Omh0bWwoKSkgfHwgYm9keSgpKSk7CiB9CiAKIGludCBEb2N1bWVudEltcGw6Om1pbmltdW1MYXlv
dXREZWxheSgpCkBAIC0xNzIxLDQyICsxNTAyLDYgQEAgdm9pZCBEb2N1bWVudEltcGw6OmRldGVy
bWluZVBhcnNlTW9kZSggYwogICAgIGtkRGVidWcoNjAyMCkgPDwgIiB1c2luZyBzdHJpY3QgcGFy
c2VNb2RlIiA8PCBlbmRsOwogfQogCi0vLyBQbGVhc2Ugc2VlIGlmIHRoZXJlYHMgYSBwb3NzaWJp
bGl0eSB0byBtZXJnZSB0aGF0IGNvZGUKLS8vIHdpdGggdGhlIG5leHQgZnVuY3Rpb24gYW5kIGdl
dEVsZW1lbnRCeUlEKCkuCi1Ob2RlSW1wbCAqRG9jdW1lbnRJbXBsOjpmaW5kRWxlbWVudCggSWQg
aWQgKQotewotICAgIFFQdHJTdGFjazxOb2RlSW1wbD4gbm9kZVN0YWNrOwotICAgIE5vZGVJbXBs
ICpjdXJyZW50ID0gX2ZpcnN0OwotCi0gICAgd2hpbGUoMSkKLSAgICB7Ci0gICAgICAgIGlmKCFj
dXJyZW50KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZihub2RlU3RhY2suaXNFbXB0eSgpKSBi
cmVhazsKLSAgICAgICAgICAgIGN1cnJlbnQgPSBub2RlU3RhY2sucG9wKCk7Ci0gICAgICAgICAg
ICBjdXJyZW50ID0gY3VycmVudC0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAgfQotICAgICAgICBl
bHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmKGN1cnJlbnQtPmlkKCkgPT0gaWQpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7Ci0KLSAgICAgICAgICAgIE5vZGVJbXBsICpjaGls
ZCA9IGN1cnJlbnQtPmZpcnN0Q2hpbGQoKTsKLSAgICAgICAgICAgIGlmKGNoaWxkKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIG5vZGVTdGFjay5wdXNoKGN1cnJlbnQpOwotICAgICAg
ICAgICAgICAgIGN1cnJlbnQgPSBjaGlsZDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC0+bmV4
dFNpYmxpbmcoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVy
biAwOwotfQotCiBOb2RlSW1wbCAqRG9jdW1lbnRJbXBsOjpuZXh0Rm9jdXNOb2RlKE5vZGVJbXBs
ICpmcm9tTm9kZSkKIHsKICAgICB1bnNpZ25lZCBzaG9ydCBmcm9tVGFiSW5kZXg7CkBAIC0yMTUx
LDEyICsxODk2LDEzIEBAIE5vZGVJbXBsOjpJZCBEb2N1bWVudEltcGw6OmF0dHJJZChET01TdHIK
IAogICAgIC8vIG5vdyBsZXRzIGZpbmQgb3V0IHRoZSBuYW1lc3BhY2UKICAgICBRX1VJTlQxNiBu
cyA9IG5vTmFtZXNwYWNlOworICAgIC8qIEZJWE1FOiBKdXN0IGJyZWFrIG5hbWVzcGFjZWQgYXR0
cmlidXRlcyBmb3Igbm93LiAgV2lsbCBmaXggaW4gbmV4dCBzdGFnZSBvZiBRdWFsaWZpZWROYW1l
IGNvbnZlcnNpb24uCiAgICAgaWYgKF9uYW1lc3BhY2VVUkkpIHsKICAgICAgICAgRE9NU3RyaW5n
IG5zVShfbmFtZXNwYWNlVVJJKTsKICAgICAgICAgaW50IG5zSUQgPSBYbWxOYW1lc3BhY2VUYWJs
ZTo6Z2V0TmFtZXNwYWNlSUQobnNVLCByZWFkb25seSk7CiAgICAgICAgIGlmIChuc0lEICE9IC0x
KQogICAgICAgICAgICAgbnMgPSAoUV9VSU5UMTYpbnNJRDsKLSAgICB9CisgICAgfSovCiAgICAg
CiAgICAgLy8gTG9vayBpbiB0aGUgbV9hdHRyTmFtZXMgYXJyYXkgZm9yIHRoZSBuYW1lCiAgICAg
Ly8gIyMjIHllYWgsIHRoaXMgaXMgbGFtZS4gdXNlIGEgZGljdGlvbmFyeSAvIG1hcCBpbnN0ZWFk
CkBAIC0yMjA3LDk1ICsxOTUzLDYgQEAgRE9NU3RyaW5nIERvY3VtZW50SW1wbDo6YXR0ck5hbWUo
Tm9kZUltcAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLU5vZGVJbXBsOjpJZCBEb2N1bWVudElt
cGw6OnRhZ0lkKERPTVN0cmluZ0ltcGwqIF9uYW1lc3BhY2VVUkksIERPTVN0cmluZ0ltcGwgKl9u
YW1lLCBib29sIHJlYWRvbmx5KQotewotICAgIGlmICghX25hbWUpIHJldHVybiAwOwotICAgIC8v
IEVhY2ggZG9jdW1lbnQgbWFpbnRhaW5zIGEgbWFwcGluZyBvZiB0YWcgbmFtZSAtPiBpZCBmb3Ig
ZXZlcnkgdGFnIG5hbWUgZW5jb3VudGVyZWQKLSAgICAvLyBpbiB0aGUgZG9jdW1lbnQuCi0gICAg
Tm9kZUltcGw6OklkIGlkID0gMDsKLQotICAgIC8vIEZpcnN0IHNlZSBpZiBpdCdzIGEgSFRNTCBl
bGVtZW50IG5hbWUKLSAgICBRQ29uc3RTdHJpbmcgbihfbmFtZS0+cywgX25hbWUtPmwpOwotICAg
IGlmICghX25hbWVzcGFjZVVSSSB8fCAhc3RyY2FzZWNtcChfbmFtZXNwYWNlVVJJLCBYSFRNTF9O
QU1FU1BBQ0UpKSB7Ci0gICAgICAgIC8vIHdlJ3JlIGluIEhUTUwgbmFtZXNwYWNlIGlmIHdlIGtu
b3cgdGhlIHRhZy4KLSAgICAgICAgLy8geGh0bWwgaXMgbG93ZXIgY2FzZSAtIGNhc2Ugc2Vuc2l0
aXZlLCBlYXN5IHRvIGltcGxlbWVudAotICAgICAgICBpZiAoIGh0bWxNb2RlKCkgPT0gWEh0bWwg
JiYgKGlkID0gZ2V0VGFnSUQobi5zdHJpbmcoKS5hc2NpaSgpLCBfbmFtZS0+bCkpICkKLSAgICAg
ICAgICAgIHJldHVybiBpZDsKLSAgICAgICAgLy8gY29tcGF0aWJpbGl0eTogdXBwZXIgY2FzZSAt
IGNhc2UgaW5zZW5zaXRpdmUKLSAgICAgICAgaWYgKCBodG1sTW9kZSgpICE9IFhIdG1sICYmIChp
ZCA9IGdldFRhZ0lEKG4uc3RyaW5nKCkubG93ZXIoKS5hc2NpaSgpLCBfbmFtZS0+bCApKSApCi0g
ICAgICAgICAgICByZXR1cm4gaWQ7Ci0KLSAgICAgICAgLy8gb2ssIHRoZSBmYXN0IHBhdGggZGlk
bid0IHdvcmsgb3V0LCB3ZSBuZWVkIHRoZSBmdWxsIGNoZWNrCi0gICAgfQotCi0gICAgLy8gbm93
IGxldHMgZmluZCBvdXQgdGhlIG5hbWVzcGFjZQotICAgIFFfVUlOVDE2IG5zID0gbm9OYW1lc3Bh
Y2U7Ci0gICAgaWYgKF9uYW1lc3BhY2VVUkkpIHsKLSAgICAgICAgRE9NU3RyaW5nIG5zVShfbmFt
ZXNwYWNlVVJJKTsKLSAgICAgICAgaW50IG5zSUQgPSBYbWxOYW1lc3BhY2VUYWJsZTo6Z2V0TmFt
ZXNwYWNlSUQobnNVLCByZWFkb25seSk7Ci0gICAgICAgIGlmIChuc0lEICE9IC0xKQotICAgICAg
ICAgICAgbnMgPSAoUV9VSU5UMTYpbnNJRDsKLSAgICB9Ci0KLSAgICAvLyBMb29rIGluIHRoZSBt
X2VsZW1lbnROYW1lcyBhcnJheSBmb3IgdGhlIG5hbWUKLSAgICAvLyAjIyMgeWVhaCwgdGhpcyBp
cyBsYW1lLiB1c2UgYSBkaWN0aW9uYXJ5IC8gbWFwIGluc3RlYWQKLSAgICBET01TdHJpbmcgbm1l
KG4uc3RyaW5nKCkpOwotICAgIC8vIGNvbXBhdGliaWxpdHkgbW9kZSBoYXMgdG8gc3RvcmUgdXBw
ZXIgY2FzZQotICAgIGlmIChodG1sTW9kZSgpICE9IFhIdG1sKSBubWUgPSBubWUudXBwZXIoKTsK
LSAgICBmb3IgKGlkID0gMDsgaWQgPCBtX2VsZW1lbnROYW1lQ291bnQ7IGlkKyspCi0gICAgICAg
IGlmIChET01TdHJpbmcobV9lbGVtZW50TmFtZXNbaWRdKSA9PSBubWUpCi0gICAgICAgICAgICBy
ZXR1cm4gbWFrZUlkKG5zLCBJRF9MQVNUX1RBRyArIDEgKyBpZCk7Ci0KLSAgICAvLyB1bmtub3du
Ci0gICAgaWYgKHJlYWRvbmx5KSByZXR1cm4gMDsKLQotICAgIC8vIE5hbWUgbm90IGZvdW5kIGlu
IG1fZWxlbWVudE5hbWVzLCBzbyBsZXQncyBhZGQgaXQKLSAgICBpZiAobV9lbGVtZW50TmFtZUNv
dW50KzEgPiBtX2VsZW1lbnROYW1lQWxsb2MpIHsKLSAgICAgICAgbV9lbGVtZW50TmFtZUFsbG9j
ICs9IDEwMDsKLSAgICAgICAgRE9NU3RyaW5nSW1wbCAqKm5ld05hbWVzID0gbmV3IERPTVN0cmlu
Z0ltcGwqIFttX2VsZW1lbnROYW1lQWxsb2NdOwotICAgICAgICAvLyAjIyMgeWVhaCwgdGhpcyBp
cyBsYW1lLiB1c2UgYSBkaWN0aW9uYXJ5IC8gbWFwIGluc3RlYWQKLSAgICAgICAgaWYgKG1fZWxl
bWVudE5hbWVzKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBpOwotICAgICAgICAgICAg
Zm9yIChpID0gMDsgaSA8IG1fZWxlbWVudE5hbWVDb3VudDsgaSsrKQotICAgICAgICAgICAgICAg
IG5ld05hbWVzW2ldID0gbV9lbGVtZW50TmFtZXNbaV07Ci0gICAgICAgICAgICBkZWxldGUgW10g
bV9lbGVtZW50TmFtZXM7Ci0gICAgICAgIH0KLSAgICAgICAgbV9lbGVtZW50TmFtZXMgPSBuZXdO
YW1lczsKLSAgICB9Ci0KLSAgICBpZCA9IG1fZWxlbWVudE5hbWVDb3VudCsrOwotICAgIG1fZWxl
bWVudE5hbWVzW2lkXSA9IG5tZS5pbXBsZW1lbnRhdGlvbigpOwotICAgIG1fZWxlbWVudE5hbWVz
W2lkXS0+cmVmKCk7Ci0KLSAgICByZXR1cm4gbWFrZUlkKG5zLCBJRF9MQVNUX1RBRyArIDEgKyBp
ZCk7Ci19Ci0KLURPTVN0cmluZyBEb2N1bWVudEltcGw6OnRhZ05hbWUoTm9kZUltcGw6OklkIF9p
ZCkgY29uc3QKLXsKLSAgICBpZiAobG9jYWxOYW1lUGFydChfaWQpID4gSURfTEFTVF9UQUcpCi0g
ICAgICAgIHJldHVybiBtX2VsZW1lbnROYW1lc1tsb2NhbE5hbWVQYXJ0KF9pZCkgLSAoSURfTEFT
VF9UQUcgKyAxKV07Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8vICMjIyBwdXQgdGhlbSBpbiBhIGNh
Y2hlCi0gICAgICAgIGlmIChodG1sTW9kZSgpID09IFhIdG1sKQotICAgICAgICAgICAgcmV0dXJu
IGdldFRhZ05hbWUoX2lkKS5sb3dlcigpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1
cm4gZ2V0VGFnTmFtZShfaWQpOwotICAgIH0KLX0KLQotCi1ET01TdHJpbmdJbXBsKiBEb2N1bWVu
dEltcGw6Om5hbWVzcGFjZVVSSShOb2RlSW1wbDo6SWQgX2lkKSBjb25zdAotewotICAgIGlmIChf
aWQgPD0gSURfTEFTVF9UQUcpCi0gICAgICAgIHJldHVybiBodG1sTW9kZSgpID09IFhIdG1sID8g
WG1sTmFtZXNwYWNlVGFibGU6OmdldE5hbWVzcGFjZVVSSSh4aHRtbE5hbWVzcGFjZSkuaW1wbGVt
ZW50YXRpb24oKSA6IDA7Ci0KLSAgICB1bnNpZ25lZCBzaG9ydCBucyA9IF9pZCA+PiAxNjsKLQot
ICAgIGlmICghbnMpIHJldHVybiAwOwotCi0gICAgcmV0dXJuIFhtbE5hbWVzcGFjZVRhYmxlOjpn
ZXROYW1lc3BhY2VVUkkobnMpLmltcGxlbWVudGF0aW9uKCk7Ci19Ci0KIFN0eWxlU2hlZXRMaXN0
SW1wbCogRG9jdW1lbnRJbXBsOjpzdHlsZVNoZWV0cygpCiB7CiAgICAgcmV0dXJuIG1fc3R5bGVT
aGVldHM7CkBAIC0yNDE5LDExICsyMDc2LDExIEBAIHZvaWQgRG9jdW1lbnRJbXBsOjpyZWNhbGNT
dHlsZVNlbGVjdG9yKCkKICAgICAgICAgICAgIH0KIAogICAgICAgICB9Ci0gICAgICAgIGVsc2Ug
aWYgKG4tPmlzSFRNTEVsZW1lbnQoKSAmJiAobi0+aWQoKSA9PSBJRF9MSU5LIHx8IG4tPmlkKCkg
PT0gSURfU1RZTEUpKSB7Ci0gICAgICAgICAgICBFbGVtZW50SW1wbCAqZSA9IHN0YXRpY19jYXN0
PEVsZW1lbnRJbXBsICo+KG4pOworICAgICAgICBlbHNlIGlmIChuLT5pc0hUTUxFbGVtZW50KCkg
JiYgKG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpsaW5rKCkpIHx8IG4tPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjpzdHlsZSgpKSkpIHsKKyAgICAgICAgICAgIEhUTUxFbGVtZW50SW1wbCAqZSA9IHN0
YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCAqPihuKTsKICAgICAgICAgICAgIFFTdHJpbmcgdGl0
bGUgPSBlLT5nZXRBdHRyaWJ1dGUoIEFUVFJfVElUTEUgKS5zdHJpbmcoKTsKICAgICAgICAgICAg
IGJvb2wgZW5hYmxlZFZpYVNjcmlwdCA9IGZhbHNlOwotICAgICAgICAgICAgaWYgKG4tPmlkKCkg
PT0gSURfTElOSykgeworICAgICAgICAgICAgaWYgKGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6
OmxpbmsoKSkpIHsKICAgICAgICAgICAgICAgICAvLyA8TElOSz4gZWxlbWVudAogICAgICAgICAg
ICAgICAgIEhUTUxMaW5rRWxlbWVudEltcGwqIGwgPSBzdGF0aWNfY2FzdDxIVE1MTGlua0VsZW1l
bnRJbXBsKj4obik7CiAgICAgICAgICAgICAgICAgaWYgKGwtPmlzTG9hZGluZygpIHx8IGwtPmlz
RGlzYWJsZWQoKSkKQEAgLTI0MzUsNyArMjA5Miw3IEBAIHZvaWQgRG9jdW1lbnRJbXBsOjpyZWNh
bGNTdHlsZVNlbGVjdG9yKCkKIAogICAgICAgICAgICAgLy8gR2V0IHRoZSBjdXJyZW50IHByZWZl
cnJlZCBzdHlsZXNldC4gIFRoaXMgaXMgdGhlCiAgICAgICAgICAgICAvLyBzZXQgb2Ygc2hlZXRz
IHRoYXQgd2lsbCBiZSBlbmFibGVkLgotICAgICAgICAgICAgaWYgKCBuLT5pZCgpID09IElEX0xJ
TksgKQorICAgICAgICAgICAgaWYgKGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmxpbmsoKSkp
CiAgICAgICAgICAgICAgICAgc2hlZXQgPSBzdGF0aWNfY2FzdDxIVE1MTGlua0VsZW1lbnRJbXBs
Kj4obiktPnNoZWV0KCk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgLy8gPFNU
WUxFPiBlbGVtZW50CkBAIC0yNDUyLDcgKzIxMDksNyBAQCB2b2lkIERvY3VtZW50SW1wbDo6cmVj
YWxjU3R5bGVTZWxlY3RvcigpCiAgICAgICAgICAgICAgICAgICAgIC8vIHVzIGFzIHRoZSBwcmVm
ZXJyZWQgc2V0LiAgT3RoZXJ3aXNlLCBqdXN0IGlnbm9yZQogICAgICAgICAgICAgICAgICAgICAv
LyB0aGlzIHNoZWV0LgogICAgICAgICAgICAgICAgICAgICBRU3RyaW5nIHJlbCA9IGUtPmdldEF0
dHJpYnV0ZSggQVRUUl9SRUwgKS5zdHJpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG4t
PmlkKCkgPT0gSURfU1RZTEUgfHwgIXJlbC5jb250YWlucygiYWx0ZXJuYXRlIikpCisgICAgICAg
ICAgICAgICAgICAgIGlmIChlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpzdHlsZSgpKSB8fCAh
cmVsLmNvbnRhaW5zKCJhbHRlcm5hdGUiKSkKICAgICAgICAgICAgICAgICAgICAgICAgIG1fcHJl
ZmVycmVkU3R5bGVzaGVldFNldCA9IHZpZXcoKS0+cGFydCgpLT5kLT5tX3NoZWV0VXNlZCA9IHRp
dGxlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAKQEAgLTI0NzEs
NyArMjEyOCw3IEBAIHZvaWQgRG9jdW1lbnRJbXBsOjpyZWNhbGNTdHlsZVNlbGVjdG9yKCkKICAg
ICAKICAgICAgICAgLy8gRm9yIEhUTUwgZG9jdW1lbnRzLCBzdHlsZXNoZWV0cyBhcmUgbm90IGFs
bG93ZWQgd2l0aGluL2FmdGVyIHRoZSA8Qk9EWT4gdGFnLiBTbyB3ZQogICAgICAgICAvLyBjYW4g
c3RvcCBzZWFyY2hpbmcgaGVyZS4KLSAgICAgICAgaWYgKGlzSFRNTERvY3VtZW50KCkgJiYgbi0+
aWQoKSA9PSBJRF9CT0RZKQorICAgICAgICBpZiAoaXNIVE1MRG9jdW1lbnQoKSAmJiBuLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6Ym9keSgpKSkKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KIApJ
bmRleDoga2h0bWwveG1sL2RvbV9kb2NpbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L1dlYkNvcmUva2h0bWwveG1sL2RvbV9kb2NpbXBsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuMTE1CmRpZmYgLXUgLXAgLXIxLjExNSBraHRtbC94bWwvZG9tX2RvY2ltcGwuaAotLS0ga2h0
bWwveG1sL2RvbV9kb2NpbXBsLmgJMjIgSnVuIDIwMDUgMTg6MjI6MDIgLTAwMDAJMS4xMTUKKysr
IGtodG1sL3htbC9kb21fZG9jaW1wbC5oCTIzIEp1biAyMDA1IDIxOjUzOjAwIC0wMDAwCkBAIC0y
MTgsOSArMjE4LDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpc0RvY3VtZW50Tm9kZSgp
IGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNIVE1MRG9jdW1lbnQo
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCi0gICAgRWxlbWVudEltcGwgKmNyZWF0ZUhUTUxF
bGVtZW50KGNvbnN0IERPTVN0cmluZyAmdGFnTmFtZSwgaW50ICZleGNlcHRpb25jb2RlKTsKLSAg
ICBFbGVtZW50SW1wbCAqY3JlYXRlSFRNTEVsZW1lbnQodW5zaWduZWQgc2hvcnQgdGFnSUQpOwot
CiAgICAga2h0bWw6OkNTU1N0eWxlU2VsZWN0b3IgKnN0eWxlU2VsZWN0b3IoKSB7IHJldHVybiBt
X3N0eWxlU2VsZWN0b3I7IH0KIAogICAgIEVsZW1lbnRJbXBsICpEb2N1bWVudEltcGw6OmdldEVs
ZW1lbnRCeUFjY2Vzc0tleSggY29uc3QgRE9NU3RyaW5nICZrZXkgKTsKQEAgLTM4Nyw5ICszODQs
NiBAQCBwdWJsaWM6CiAgICAgdm9pZCByZXNldFZpc2l0ZWRMaW5rQ29sb3IoKTsKICAgICB2b2lk
IHJlc2V0QWN0aXZlTGlua0NvbG9yKCk7CiAgICAgCi0gICAgLy8gaW50ZXJuYWwKLSAgICBOb2Rl
SW1wbCAqZmluZEVsZW1lbnQoIElkIGlkICk7Ci0KICAgICBib29sIHByZXBhcmVNb3VzZUV2ZW50
KCBib29sIHJlYWRvbmx5LCBpbnQgeCwgaW50IHksIE1vdXNlRXZlbnQgKmV2ICk7CiAKICAgICB2
aXJ0dWFsIGJvb2wgY2hpbGRBbGxvd2VkKCBOb2RlSW1wbCAqbmV3Q2hpbGQgKTsKQEAgLTM5OSw5
ICszOTMsNiBAQCBwdWJsaWM6CiAgICAgLy8gIyMjIHRoaW5rIGFib3V0IGltcGxlbWVudGluZyBy
ZWYnY291bnRpbmcgZm9yIHRoZSBpZCdzCiAgICAgLy8gaW4gb3JkZXIgdG8gYmUgYWJsZSB0byBy
ZWFzc2lnbiB0aG9zZSB0aGF0IGFyZSBubyBsb25nZXIgaW4gdXNlCiAgICAgLy8gKGNvdWxkIG1h
a2UgcHJvYmxlbXMgd2hlbiBpdCBpcyBzdGlsbCBrZXB0IHNvbWV3aGVyZSBhcm91bmQsIGkuZS4g
c3R5bGVzZWxlY3RvcikKLSAgICBOb2RlSW1wbDo6SWQgdGFnSWQoRE9NU3RyaW5nSW1wbCogX25h
bWVzcGFjZVVSSSwgRE9NU3RyaW5nSW1wbCAqX25hbWUsIGJvb2wgcmVhZG9ubHkpOwotICAgIERP
TVN0cmluZyB0YWdOYW1lKE5vZGVJbXBsOjpJZCBfaWQpIGNvbnN0OwotCiAgICAgTm9kZUltcGw6
OklkIGF0dHJJZChET01TdHJpbmdJbXBsKiBfbmFtZXNwYWNlVVJJLCBET01TdHJpbmdJbXBsICpf
bmFtZSwgYm9vbCByZWFkb25seSk7CiAgICAgRE9NU3RyaW5nIGF0dHJOYW1lKE5vZGVJbXBsOjpJ
ZCBfaWQpIGNvbnN0OwogCkluZGV4OiBraHRtbC94bWwvZG9tX2VsZW1lbnRpbXBsLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC94bWwvZG9tX2VsZW1lbnRp
bXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS42NwpkaWZmIC11IC1wIC1yMS42NyBraHRt
bC94bWwvZG9tX2VsZW1lbnRpbXBsLmNwcAotLS0ga2h0bWwveG1sL2RvbV9lbGVtZW50aW1wbC5j
cHAJMTEgTWF5IDIwMDUgMDU6NDk6MzUgLTAwMDAJMS42NworKysga2h0bWwveG1sL2RvbV9lbGVt
ZW50aW1wbC5jcHAJMjMgSnVuIDIwMDUgMjE6NTM6MDEgLTAwMDAKQEAgLTkwLDE4ICs5MCwxOCBA
QCB1bnNpZ25lZCBzaG9ydCBBdHRySW1wbDo6bm9kZVR5cGUoKSBjb25zCiAgICAgcmV0dXJuIE5v
ZGU6OkFUVFJJQlVURV9OT0RFOwogfQogCi1ET01TdHJpbmcgQXR0ckltcGw6OnByZWZpeCgpIGNv
bnN0Citjb25zdCBBdG9taWNTdHJpbmcmIEF0dHJJbXBsOjpwcmVmaXgoKSBjb25zdAogewogICAg
IHJldHVybiBtX2F0dHJpYnV0ZS0+cHJlZml4KCk7CiB9CiAKLXZvaWQgQXR0ckltcGw6OnNldFBy
ZWZpeChjb25zdCBET01TdHJpbmcgJl9wcmVmaXgsIGludCAmZXhjZXB0aW9uY29kZSApCit2b2lk
IEF0dHJJbXBsOjpzZXRQcmVmaXgoY29uc3QgQXRvbWljU3RyaW5nICZfcHJlZml4LCBpbnQgJmV4
Y2VwdGlvbmNvZGUgKQogewogICAgIGNoZWNrU2V0UHJlZml4KF9wcmVmaXgsIGV4Y2VwdGlvbmNv
ZGUpOwogICAgIGlmIChleGNlcHRpb25jb2RlKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2F0
dHJpYnV0ZS0+c2V0UHJlZml4KF9wcmVmaXguaW1wbGVtZW50YXRpb24oKSk7CisgICAgbV9hdHRy
aWJ1dGUtPnNldFByZWZpeChfcHJlZml4KTsKIH0KIAogRE9NU3RyaW5nIEF0dHJJbXBsOjpub2Rl
VmFsdWUoKSBjb25zdApAQCAtMjA2LDcgKzIwNiw2IEBAIEVsZW1lbnRJbXBsOjpFbGVtZW50SW1w
bChEb2N1bWVudFB0ciAqZG8KICAgICA6IENvbnRhaW5lck5vZGVJbXBsKGRvYykKIHsKICAgICBu
YW1lZEF0dHJNYXAgPSAwOwotICAgIG1fcHJlZml4ID0gMDsKIH0KIAogRWxlbWVudEltcGw6On5F
bGVtZW50SW1wbCgpCkBAIC0yMTUsOSArMjE0LDYgQEAgRWxlbWVudEltcGw6On5FbGVtZW50SW1w
bCgpCiAgICAgICAgIG5hbWVkQXR0ck1hcC0+ZGV0YWNoRnJvbUVsZW1lbnQoKTsKICAgICAgICAg
bmFtZWRBdHRyTWFwLT5kZXJlZigpOwogICAgIH0KLQotICAgIGlmIChtX3ByZWZpeCkKLSAgICAg
ICAgbV9wcmVmaXgtPmRlcmVmKCk7CiB9CiAKIHZvaWQgRWxlbWVudEltcGw6OnJlbW92ZUF0dHJp
YnV0ZSggTm9kZUltcGw6OklkIGlkLCBpbnQgJmV4Y2VwdGlvbmNvZGUgKQpAQCAtMzUxLDM2ICsz
NDcsMjUgQEAgdm9pZCBFbGVtZW50SW1wbDo6c2V0QXR0cmlidXRlTWFwKCBOYW1lZAogYm9vbCBF
bGVtZW50SW1wbDo6aGFzQXR0cmlidXRlcygpIGNvbnN0CiB7CiAgICAgdXBkYXRlU3R5bGVBdHRy
aWJ1dGVJZk5lZWRlZCgpOwotCiAgICAgcmV0dXJuIG5hbWVkQXR0ck1hcCAmJiBuYW1lZEF0dHJN
YXAtPmxlbmd0aCgpID4gMDsKIH0KIAogRE9NU3RyaW5nIEVsZW1lbnRJbXBsOjpub2RlTmFtZSgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIHRhZ05hbWUoKTsKLX0KLQotRE9NU3RyaW5nIEVsZW1lbnRJ
bXBsOjp0YWdOYW1lKCkgY29uc3QKLXsKICAgICBET01TdHJpbmcgdG4gPSBnZXREb2N1bWVudCgp
LT50YWdOYW1lKGlkKCkpOwotCi0gICAgaWYgKG1fcHJlZml4KQotICAgICAgICByZXR1cm4gRE9N
U3RyaW5nKG1fcHJlZml4KSArICI6IiArIHRuOwotCisgICAgaWYgKG1fdGFnTmFtZS5oYXNQcmVm
aXgoKSkKKyAgICAgICAgcmV0dXJuIERPTVN0cmluZyhtX3RhZ05hbWUucHJlZml4KCkpICsgIjoi
ICsgdG47CiAgICAgcmV0dXJuIHRuOwogfQogCi12b2lkIEVsZW1lbnRJbXBsOjpzZXRQcmVmaXgo
IGNvbnN0IERPTVN0cmluZyAmX3ByZWZpeCwgaW50ICZleGNlcHRpb25jb2RlICkKK3ZvaWQgRWxl
bWVudEltcGw6OnNldFByZWZpeChjb25zdCBBdG9taWNTdHJpbmcgJl9wcmVmaXgsIGludCAmZXhj
ZXB0aW9uY29kZSkKIHsKICAgICBjaGVja1NldFByZWZpeChfcHJlZml4LCBleGNlcHRpb25jb2Rl
KTsKICAgICBpZiAoZXhjZXB0aW9uY29kZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1f
cHJlZml4KQotICAgICAgICBtX3ByZWZpeC0+ZGVyZWYoKTsKLSAgICBtX3ByZWZpeCA9IF9wcmVm
aXguaW1wbGVtZW50YXRpb24oKTsKLSAgICBpZiAobV9wcmVmaXgpCi0gICAgICAgIG1fcHJlZml4
LT5yZWYoKTsKKyAgICAvLyBGSVhNRTogVGhpcyBpcyBqdXN0IGEgaGFjayBmb3Igc3RhZ2Ugb25l
IG9mIHRoZSBUYWdOYW1lIHBhdGNoLiAgSXQgd2lsbCBjaGFuZ2UuCisgICAgbV90YWdOYW1lLnNl
dFByZWZpeChfcHJlZml4KTsKIH0KIAogdm9pZCBFbGVtZW50SW1wbDo6Y3JlYXRlQXR0cmlidXRl
TWFwKCkgY29uc3QKQEAgLTc4MiwxNSArNzY3LDE5IEBAIFhNTEVsZW1lbnRJbXBsOjpYTUxFbGVt
ZW50SW1wbChEb2N1bWVudFAKICAgICAgICAgbG9jYWxOYW1lLT5yZW1vdmUoMCxjb2xvbnBvcysx
KTsKICAgICAgICAgbV9pZCA9IGRvYy0+ZG9jdW1lbnQoKS0+dGFnSWQoX25hbWVzcGFjZVVSSSwg
bG9jYWxOYW1lLCBmYWxzZSAvKiBhbGxvY2F0ZSAqLyk7CiAgICAgICAgIGxvY2FsTmFtZS0+ZGVy
ZWYoKTsKLSAgICAgICAgbV9wcmVmaXggPSBfcXVhbGlmaWVkTmFtZS0+Y29weSgpOwotICAgICAg
ICBtX3ByZWZpeC0+cmVmKCk7Ci0gICAgICAgIG1fcHJlZml4LT50cnVuY2F0ZShjb2xvbnBvcyk7
CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyBhIHRlbXBvcmFyeSBzaXR1YXRp
b24gZm9yIHN0YWdlIG9uZSBvZiB0aGUgUXVhbGlmaWVkTmFtZSBwYXRjaC4gIFRoaXMgaXMgYWxz
byBhIHJlYWxseSBzdHVwaWQgd2F5IHRvCisgICAgICAgIC8vIGhhdmUgdG8gaGFuZGxlIHRoZSBw
cmVmaXguICBXYXkgdG9vIG11Y2ggY29weWluZy4gIFdlIHNob3VsZCBtYWtlIHN1cmUgdGhlIFhN
TCB0b2tlbml6ZXIgaGFzIGRvbmUgdGhlIHNwbGl0CisgICAgICAgIC8vIGFscmVhZHkgaW50byBw
cmVmaXggYW5kIGxvY2FsTmFtZS4KKyAgICAgICAgRE9NU3RyaW5nSW1wbCogcHJlZml4ID0gX3F1
YWxpZmllZE5hbWUtPmNvcHkoKTsKKyAgICAgICAgcHJlZml4LT5yZWYoKTsKKyAgICAgICAgcHJl
Zml4LT50cnVuY2F0ZShjb2xvbnBvcyk7CisgICAgICAgIG1fdGFnTmFtZSA9IFF1YWxpZmllZE5h
bWUocHJlZml4LCBudWxsQXRvbSwgbnVsbEF0b20pOworICAgICAgICBwcmVmaXgtPmRlcmVmKCk7
CiAgICAgfQotICAgIGVsc2UgeworICAgIGVsc2UKICAgICAgICAgLy8gbm8gcHJlZml4CiAgICAg
ICAgIG1faWQgPSBkb2MtPmRvY3VtZW50KCktPnRhZ0lkKF9uYW1lc3BhY2VVUkksIF9xdWFsaWZp
ZWROYW1lLCBmYWxzZSAvKiBhbGxvY2F0ZSAqLyk7Ci0gICAgICAgIG1fcHJlZml4ID0gMDsKLSAg
ICB9CiB9CiAKIFhNTEVsZW1lbnRJbXBsOjp+WE1MRWxlbWVudEltcGwoKQpJbmRleDoga2h0bWwv
eG1sL2RvbV9lbGVtZW50aW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJD
b3JlL2todG1sL3htbC9kb21fZWxlbWVudGltcGwuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40
MQpkaWZmIC11IC1wIC1yMS40MSBraHRtbC94bWwvZG9tX2VsZW1lbnRpbXBsLmgKLS0tIGtodG1s
L3htbC9kb21fZWxlbWVudGltcGwuaAkxMiBNYXkgMjAwNSAxNzoxMToyMiAtMDAwMAkxLjQxCisr
KyBraHRtbC94bWwvZG9tX2VsZW1lbnRpbXBsLmgJMjMgSnVuIDIwMDUgMjE6NTM6MDIgLTAwMDAK
QEAgLTIzLDEzICsyMywxNCBAQAogICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCiAgKgog
ICovCi0jaWZuZGVmIF9ET01fRUxFTUVOVEltcGxfaF8KLSNkZWZpbmUgX0RPTV9FTEVNRU5USW1w
bF9oXworI2lmbmRlZiBfRE9NX0VMRU1FTlRJTVBMX2hfCisjZGVmaW5lIF9ET01fRUxFTUVOVElN
UExfaF8KIAogI2luY2x1ZGUgImRvbV9ub2RlaW1wbC5oIgogI2luY2x1ZGUgInhtbC9kb21fc3Ry
aW5naW1wbC5oIgogI2luY2x1ZGUgIm1pc2Mvc2hhcmVkLmgiCiAjaW5jbHVkZSAiY3NzL2Nzc192
YWx1ZWltcGwuaCIKKyNpbmNsdWRlICJkb21fcW5hbWUuaCIKIAogI2lmIEFQUExFX0NIQU5HRVMK
ICNpZmRlZiBfX09CSkNfXwpAQCAtMTI4LDggKzEyOSw4IEBAIHB1YmxpYzoKICAgICAvLyBET00g
bWV0aG9kcyBvdmVycmlkZGVuIGZyb20gIHBhcmVudCBjbGFzc2VzCiAgICAgdmlydHVhbCBET01T
dHJpbmcgbm9kZU5hbWUoKSBjb25zdDsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0IG5vZGVU
eXBlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBET01TdHJpbmcgcHJlZml4KCkgY29uc3Q7Ci0gICAg
dmlydHVhbCB2b2lkIHNldFByZWZpeChjb25zdCBET01TdHJpbmcgJl9wcmVmaXgsIGludCAmZXhj
ZXB0aW9uY29kZSApOworICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UHJlZml4KGNvbnN0IEF0b21pY1N0cmluZyAmX3By
ZWZpeCwgaW50ICZleGNlcHRpb25jb2RlICk7CiAKICAgICB2aXJ0dWFsIERPTVN0cmluZyBub2Rl
VmFsdWUoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0Tm9kZVZhbHVlKCBjb25zdCBET01T
dHJpbmcgJiwgaW50ICZleGNlcHRpb25jb2RlICk7CkBAIC0xNTYsNyArMTU3LDcgQEAgY2xhc3Mg
RWxlbWVudEltcGwgOiBwdWJsaWMgQ29udGFpbmVyTm9kZQogICAgIGZyaWVuZCBjbGFzcyBOb2Rl
SW1wbDsKICAgICBmcmllbmQgY2xhc3Mga2h0bWw6OkNTU1N0eWxlU2VsZWN0b3I7CiBwdWJsaWM6
Ci0gICAgRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYyk7CisgICAgRWxlbWVudEltcGwoY29u
c3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnRQdHIgKmRvYyk7CiAgICAgfkVsZW1l
bnRJbXBsKCk7CiAKICAgICAvLyBVc2VkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHdoZXRoZXIgb3Ig
bm90IGFuIGVsZW1lbnQgaGFzIGEgZ2l2ZW4gQ1NTIGNsYXNzLgpAQCAtMTg2LDEzICsxODcsMjIg
QEAgcHVibGljOgogICAgIFNoYXJlZFB0cjxBdHRySW1wbD4gc2V0QXR0cmlidXRlTm9kZU5TKEF0
dHJJbXBsICpuZXdBdHRyLCBpbnQgJmV4Y2VwdGlvbikgeyByZXR1cm4gc2V0QXR0cmlidXRlTm9k
ZShuZXdBdHRyLCBleGNlcHRpb24pOyB9CiAgICAgU2hhcmVkUHRyPEF0dHJJbXBsPiByZW1vdmVB
dHRyaWJ1dGVOb2RlKEF0dHJJbXBsICpvbGRBdHRyLCBpbnQgJmV4Y2VwdGlvbik7CiAgICAgCi0g
ICAgRE9NU3RyaW5nIHByZWZpeCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJlZml4OyB9Ci0gICAgdm9p
ZCBzZXRQcmVmaXgoY29uc3QgRE9NU3RyaW5nICZfcHJlZml4LCBpbnQgJmV4Y2VwdGlvbmNvZGUg
KTsKLQogICAgIHZpcnR1YWwgQ1NTU3R5bGVEZWNsYXJhdGlvbkltcGwgKnN0eWxlKCk7CiAKKyAg
ICB2aXJ0dWFsIGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUoKSBjb25zdCB7IHJldHVybiBt
X3RhZ05hbWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaGFzVGFnTmFtZShjb25zdCBRdWFsaWZpZWRO
YW1lJiB0YWdOYW1lKSBjb25zdCB7IHJldHVybiBtX3RhZ05hbWUubWF0Y2hlcyh0YWdOYW1lKTsg
fQorICAgIAorICAgIC8vIEEgbW9yZSBsaWdodHdlaWdodCBjaGVjayB0aGFuIGhhc1RhZ05hbWUu
ICBVc2UgdGhpcyBjaGVjayB3aGVuIHlvdSBrbm93IHRoZSBuYW1lc3BhY2VzIG9mIHRoZSB0d28g
UXVhbGlmaWVkTmFtZXMgbWF0Y2gsIGUuZy4sIHRoYXQgdGhleSdyZQorICAgIC8vIGJvdGggSFRN
TCBuYW1lcy4KKyAgICBib29sIGhhc0xvY2FsTmFtZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdO
YW1lKSBjb25zdCB7IHJldHVybiBtX3RhZ05hbWUubG9jYWxOYW1lKCkgPT0gdGFnTmFtZS5sb2Nh
bE5hbWUoKTsgfQorICAgIGJvb2wgaGFzTG9jYWxOYW1lKGNvbnN0IEF0b21pY1N0cmluZyYgbG9j
YWxOYW1lKSBjb25zdCB7IHJldHVybiBtX3RhZ05hbWUubG9jYWxOYW1lKCkgPT0gbG9jYWxOYW1l
OyB9CisKKyAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lKCkgY29uc3Qg
eyByZXR1cm4gbV90YWdOYW1lLmxvY2FsTmFtZSgpOyB9CisgICAgdmlydHVhbCBjb25zdCBBdG9t
aWNTdHJpbmcmIHByZWZpeCgpIGNvbnN0IHsgcmV0dXJuIG1fdGFnTmFtZS5wcmVmaXgoKTsgfQor
ICAgIHZpcnR1YWwgdm9pZCBzZXRQcmVmaXgoY29uc3QgQXRvbWljU3RyaW5nICZfcHJlZml4LCBp
bnQgJmV4Y2VwdGlvbmNvZGUpOworICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1l
c3BhY2VVUkkoKSBjb25zdCB7IHJldHVybiBtX3RhZ05hbWUubmFtZXNwYWNlVVJJKCk7IH0KKyAg
ICAKICAgICAvLyBET00gbWV0aG9kcyBvdmVycmlkZGVuIGZyb20gIHBhcmVudCBjbGFzc2VzCi0g
ICAgdmlydHVhbCBET01TdHJpbmcgdGFnTmFtZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgdW5zaWdu
ZWQgc2hvcnQgbm9kZVR5cGUoKSBjb25zdDsKICAgICB2aXJ0dWFsIE5vZGVJbXBsICpjbG9uZU5v
ZGUgKCBib29sIGRlZXAgKSA9IDA7CiAgICAgdmlydHVhbCBET01TdHJpbmcgbm9kZU5hbWUoKSBj
b25zdDsKQEAgLTI1NCwyOSArMjY0LDcgQEAgcHJpdmF0ZToKIAogcHJvdGVjdGVkOiAvLyBtZW1i
ZXIgdmFyaWFibGVzCiAgICAgbXV0YWJsZSBOYW1lZEF0dHJNYXBJbXBsICpuYW1lZEF0dHJNYXA7
Ci0gICAgRE9NU3RyaW5nSW1wbCAqbV9wcmVmaXg7Ci19OwotCi0KLWNsYXNzIFhNTEVsZW1lbnRJ
bXBsIDogcHVibGljIEVsZW1lbnRJbXBsCi17Ci0KLXB1YmxpYzoKLSAgICBYTUxFbGVtZW50SW1w
bChEb2N1bWVudFB0ciAqZG9jLCBET01TdHJpbmdJbXBsICpfdGFnTmFtZSk7Ci0gICAgWE1MRWxl
bWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgRE9NU3RyaW5nSW1wbCAqX3F1YWxpZmllZE5hbWUs
IERPTVN0cmluZ0ltcGwgKl9uYW1lc3BhY2VVUkkpOwotICAgIH5YTUxFbGVtZW50SW1wbCgpOwot
Ci0gICAgLy8gRE9NIG1ldGhvZHMgb3ZlcnJpZGRlbiBmcm9tICBwYXJlbnQgY2xhc3NlcwotICAg
IHZpcnR1YWwgRE9NU3RyaW5nIG5hbWVzcGFjZVVSSSgpIGNvbnN0OwotICAgIHZpcnR1YWwgRE9N
U3RyaW5nIGxvY2FsTmFtZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgTm9kZUltcGwgKmNsb25lTm9k
ZSAoIGJvb2wgZGVlcCApOwotCi0gICAgLy8gT3RoZXIgbWV0aG9kcyAobm90IHBhcnQgb2YgRE9N
KQotICAgIHZpcnR1YWwgYm9vbCBpc1hNTEVsZW1lbnROb2RlKCkgY29uc3QgeyByZXR1cm4gdHJ1
ZTsgfQotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9Ci0KLXByb3Rl
Y3RlZDoKLSAgICBJZCBtX2lkOworICAgIFF1YWxpZmllZE5hbWUgbV90YWdOYW1lOwogfTsKIAog
Ly8gdGhlIG1hcCBvZiBhdHRyaWJ1dGVzIG9mIGFuIGVsZW1lbnQKQEAgLTQxNCw3ICs0MDIsNyBA
QCBwcml2YXRlOgogY2xhc3MgU3R5bGVkRWxlbWVudEltcGwgOiBwdWJsaWMgRWxlbWVudEltcGwK
IHsKIHB1YmxpYzoKLSAgICBTdHlsZWRFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKTsKKyAg
ICBTdHlsZWRFbGVtZW50SW1wbChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVu
dFB0ciAqZG9jKTsKICAgICB2aXJ0dWFsIH5TdHlsZWRFbGVtZW50SW1wbCgpOwogCiAgICAgdmly
dHVhbCBib29sIGlzU3R5bGVkRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KSW5kZXg6
IGtodG1sL3htbC9kb21fbm9kZWltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9XZWJDb3JlL2todG1sL3htbC9kb21fbm9kZWltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjE1NQpkaWZmIC11IC1wIC1yMS4xNTUga2h0bWwveG1sL2RvbV9ub2RlaW1wbC5jcHAKLS0t
IGtodG1sL3htbC9kb21fbm9kZWltcGwuY3BwCTIxIEp1biAyMDA1IDE4OjExOjEwIC0wMDAwCTEu
MTU1CisrKyBraHRtbC94bWwvZG9tX25vZGVpbXBsLmNwcAkyMyBKdW4gMjAwNSAyMTo1MzowNCAt
MDAwMApAQCAtMTU0LDcgKzE1NCw3IEBAIE5vZGVJbXBsICpOb2RlSW1wbDo6bGFzdENoaWxkKCkg
Y29uc3QKICAgcmV0dXJuIDA7CiB9CiAKLU5vZGVJbXBsICpOb2RlSW1wbDo6bGFzdERlc2NlbmRl
bnQoKSBjb25zdAorTm9kZUltcGwgKk5vZGVJbXBsOjpsYXN0RGVzY2VuZGFudCgpIGNvbnN0CiB7
CiAgICAgTm9kZUltcGwgKm4gPSBjb25zdF9jYXN0PE5vZGVJbXBsICo+KHRoaXMpOwogICAgIHdo
aWxlIChuICYmIG4tPmxhc3RDaGlsZCgpKQpAQCAtMjM5LDEzICsyMzksMTMgQEAgdm9pZCBOb2Rl
SW1wbDo6bm9ybWFsaXplICgpCiAgICAgfQogfQogCi1ET01TdHJpbmcgTm9kZUltcGw6OnByZWZp
eCgpIGNvbnN0Citjb25zdCBBdG9taWNTdHJpbmcmIE5vZGVJbXBsOjpwcmVmaXgoKSBjb25zdAog
ewogICAgIC8vIEZvciBub2RlcyBvdGhlciB0aGFuIGVsZW1lbnRzIGFuZCBhdHRyaWJ1dGVzLCB0
aGUgcHJlZml4IGlzIGFsd2F5cyBudWxsCi0gICAgcmV0dXJuIERPTVN0cmluZygpOworICAgIHJl
dHVybiBudWxsQXRvbTsKIH0KIAotdm9pZCBOb2RlSW1wbDo6c2V0UHJlZml4KGNvbnN0IERPTVN0
cmluZyAmLypfcHJlZml4Ki8sIGludCAmZXhjZXB0aW9uY29kZSApCit2b2lkIE5vZGVJbXBsOjpz
ZXRQcmVmaXgoY29uc3QgQXRvbWljU3RyaW5nICYvKl9wcmVmaXgqLywgaW50ICZleGNlcHRpb25j
b2RlICkKIHsKICAgICAvLyBUaGUgc3BlYyBzYXlzIHRoYXQgZm9yIG5vZGVzIG90aGVyIHRoYW4g
ZWxlbWVudHMgYW5kIGF0dHJpYnV0ZXMsIHByZWZpeCBpcyBhbHdheXMgbnVsbC4KICAgICAvLyBJ
dCBkb2VzIG5vdCBzYXkgd2hhdCB0byBkbyB3aGVuIHRoZSB1c2VyIHRyaWVzIHRvIHNldCB0aGUg
cHJlZml4IG9uIGFub3RoZXIgdHlwZSBvZgpAQCAtMTAwNiwzOSArMTAwNiwyNyBAQCBOb2RlSW1w
bCAqTm9kZUltcGw6OnRyYXZlcnNlUHJldmlvdXNOb2RlCiAgICAgcmV0dXJuIDA7CiB9CiAKLXZv
aWQgTm9kZUltcGw6OmNoZWNrU2V0UHJlZml4KGNvbnN0IERPTVN0cmluZyAmX3ByZWZpeCwgaW50
ICZleGNlcHRpb25jb2RlKQordm9pZCBOb2RlSW1wbDo6Y2hlY2tTZXRQcmVmaXgoY29uc3QgQXRv
bWljU3RyaW5nICZfcHJlZml4LCBpbnQgJmV4Y2VwdGlvbmNvZGUpCiB7CiAgICAgLy8gUGVyZm9y
bSBlcnJvciBjaGVja2luZyBhcyByZXF1aXJlZCBieSBzcGVjIGZvciBzZXR0aW5nIE5vZGUucHJl
Zml4LiBVc2VkIGJ5CiAgICAgLy8gRWxlbWVudEltcGw6OnNldFByZWZpeCgpIGFuZCBBdHRySW1w
bDo6c2V0UHJlZml4KCkKIAotI2lmIDAKLSAgICAvLyBGSVhNRTogQWRkIHRoaXMgY2hlY2sgKGJ1
dCBub3QgaW4gYSB3YXkgdGhhdCBkZXBlbmRzIG9uIHRoZSBDKysgRE9NISkKLSAgICAvLyBJTlZB
TElEX0NIQVJBQ1RFUl9FUlI6IFJhaXNlZCBpZiB0aGUgc3BlY2lmaWVkIHByZWZpeCBjb250YWlu
cyBhbiBpbGxlZ2FsIGNoYXJhY3Rlci4KLSAgICBpZiAoIUVsZW1lbnQ6OmtodG1sVmFsaWRQcmVm
aXgoX3ByZWZpeCkpIHsKLSAgICAgICAgZXhjZXB0aW9uY29kZSA9IERPTUV4Y2VwdGlvbjo6SU5W
QUxJRF9DSEFSQUNURVJfRVJSOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KKyAg
ICAvLyBGSVhNRTogSW1wbGVtZW50IHN1cHBvcnQgZm9yIElOVkFMSURfQ0hBUkFDVEVSX0VSUjog
UmFpc2VkIGlmIHRoZSBzcGVjaWZpZWQgcHJlZml4IGNvbnRhaW5zIGFuIGlsbGVnYWwgY2hhcmFj
dGVyLgorICAgIAogICAgIC8vIE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUjogUmFpc2VkIGlm
IHRoaXMgbm9kZSBpcyByZWFkb25seS4KICAgICBpZiAoaXNSZWFkT25seSgpKSB7CiAgICAgICAg
IGV4Y2VwdGlvbmNvZGUgPSBET01FeGNlcHRpb246Ok5PX01PRElGSUNBVElPTl9BTExPV0VEX0VS
UjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIC8vIE5BTUVTUEFDRV9FUlI6IC0gUmFp
c2VkIGlmIHRoZSBzcGVjaWZpZWQgcHJlZml4IGlzIG1hbGZvcm1lZAorICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQgTkFNRVNQQUNFX0VSUjogLSBSYWlzZWQgaWYgdGhlIHNwZWNpZmllZCBwcmVmaXgg
aXMgbWFsZm9ybWVkCiAgICAgLy8gLSBpZiB0aGUgbmFtZXNwYWNlVVJJIG9mIHRoaXMgbm9kZSBp
cyBudWxsLAogICAgIC8vIC0gaWYgdGhlIHNwZWNpZmllZCBwcmVmaXggaXMgInhtbCIgYW5kIHRo
ZSBuYW1lc3BhY2VVUkkgb2YgdGhpcyBub2RlIGlzIGRpZmZlcmVudCBmcm9tCiAgICAgLy8gICAi
aHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIiwKICAgICAvLyAtIGlmIHRoaXMg
bm9kZSBpcyBhbiBhdHRyaWJ1dGUgYW5kIHRoZSBzcGVjaWZpZWQgcHJlZml4IGlzICJ4bWxucyIg
YW5kCiAgICAgLy8gICB0aGUgbmFtZXNwYWNlVVJJIG9mIHRoaXMgbm9kZSBpcyBkaWZmZXJlbnQg
ZnJvbSAiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8iLAogICAgIC8vIC0gb3IgaWYgdGhp
cyBub2RlIGlzIGFuIGF0dHJpYnV0ZSBhbmQgdGhlIHF1YWxpZmllZE5hbWUgb2YgdGhpcyBub2Rl
IGlzICJ4bWxucyIgW05hbWVzcGFjZXNdLgotICAgIGlmICgKLSNpZiAwCi0gICAgICAgIC8vIEZJ
WE1FOiBBZGQgdGhpcyBjaGVjayAoYnV0IG5vdCBpbiBhIHdheSB0aGF0IGRlcGVuZHMgb24gdGhl
IEMrKyBET00hKQotICAgICAgICBFbGVtZW50OjpraHRtbE1hbGZvcm1lZFByZWZpeChfcHJlZml4
KSB8fAotI2VuZGlmCi0gICAgICAgIChuYW1lc3BhY2VQYXJ0KGlkKCkpID09IG5vTmFtZXNwYWNl
ICYmIGlkKCkgPiBJRF9MQVNUX1RBRykgfHwKKyAgICBpZiAoKG5hbWVzcGFjZVBhcnQoaWQoKSkg
PT0gbm9OYW1lc3BhY2UgJiYgaWQoKSA+IElEX0xBU1RfVEFHKSB8fAogICAgICAgICAoX3ByZWZp
eCA9PSAieG1sIiAmJiBET01TdHJpbmcoZ2V0RG9jdW1lbnQoKS0+bmFtZXNwYWNlVVJJKGlkKCkp
KSAhPSAiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIikpIHsKICAgICAgICAg
ZXhjZXB0aW9uY29kZSA9IERPTUV4Y2VwdGlvbjo6TkFNRVNQQUNFX0VSUjsKICAgICAgICAgcmV0
dXJuOwpJbmRleDoga2h0bWwveG1sL2RvbV9ub2RlaW1wbC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3htbC9kb21fbm9kZWltcGwuaCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS44NgpkaWZmIC11IC1wIC1yMS44NiBraHRtbC94bWwvZG9tX25vZGVpbXBsLmgK
LS0tIGtodG1sL3htbC9kb21fbm9kZWltcGwuaAkxNyBKdW4gMjAwNSAwMjoxMzoxMiAtMDAwMAkx
Ljg2CisrKyBraHRtbC94bWwvZG9tX25vZGVpbXBsLmgJMjMgSnVuIDIwMDUgMjE6NTM6MDQgLTAw
MDAKQEAgLTU5LDYgKzU5LDcgQEAgY2xhc3MgRXZlbnRJbXBsOwogY2xhc3MgRXZlbnRMaXN0ZW5l
cjsKIGNsYXNzIE5vZGVMaXN0SW1wbDsKIGNsYXNzIE5hbWVkQXR0ck1hcEltcGw7CitjbGFzcyBR
dWFsaWZpZWROYW1lOwogY2xhc3MgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXI7CiAKIC8vIFRoZSBu
YW1lc3BhY2UgdXNlZCBmb3IgWEhUTUwgZWxlbWVudHMKQEAgLTEwMiw2ICsxMDMsNyBAQCBwdWJs
aWM6CiAgICAgTUFJTl9USFJFQURfQUxMT0NBVEVEOwogCiAgICAgLy8gRE9NIG1ldGhvZHMgJiBh
dHRyaWJ1dGVzIGZvciBOb2RlCisgICAgdmlydHVhbCBib29sIGhhc1RhZ05hbWUoY29uc3QgUXVh
bGlmaWVkTmFtZSYgdGFnTmFtZSkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFs
IERPTVN0cmluZyBub2RlTmFtZSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIERPTVN0cmluZyBu
b2RlVmFsdWUoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0Tm9kZVZhbHVlKCBjb25zdCBE
T01TdHJpbmcgJl9ub2RlVmFsdWUsIGludCAmZXhjZXB0aW9uY29kZSApOwpAQCAtMTIyLDE0ICsx
MjQsMTQgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCByZW1vdmUoaW50ICZleGNlcHRpb25j
b2RlKTsKICAgICB2aXJ0dWFsIGJvb2wgaGFzQ2hpbGROb2RlcyAoICApIGNvbnN0OwogICAgIHZp
cnR1YWwgTm9kZUltcGwgKmNsb25lTm9kZSAoIGJvb2wgZGVlcCApID0gMDsKLSAgICB2aXJ0dWFs
IERPTVN0cmluZyBsb2NhbE5hbWUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIERPTVN0cmluZyBuYW1l
c3BhY2VVUkkoKSBjb25zdDsKLSAgICB2aXJ0dWFsIERPTVN0cmluZyBwcmVmaXgoKSBjb25zdDsK
LSAgICB2aXJ0dWFsIHZvaWQgc2V0UHJlZml4KGNvbnN0IERPTVN0cmluZyAmX3ByZWZpeCwgaW50
ICZleGNlcHRpb25jb2RlICk7CisgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2Fs
TmFtZSgpIGNvbnN0OworICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VV
UkkoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4KCkgY29u
c3Q7CisgICAgdmlydHVhbCB2b2lkIHNldFByZWZpeChjb25zdCBBdG9taWNTdHJpbmcgJl9wcmVm
aXgsIGludCAmZXhjZXB0aW9uY29kZSk7CiAgICAgdm9pZCBub3JtYWxpemUgKCk7CiAgICAgc3Rh
dGljIGJvb2wgaXNTdXBwb3J0ZWQoY29uc3QgRE9NU3RyaW5nICZmZWF0dXJlLCBjb25zdCBET01T
dHJpbmcgJnZlcnNpb24pOwogCi0gICAgTm9kZUltcGwgKmxhc3REZXNjZW5kZW50KCkgY29uc3Q7
CisgICAgTm9kZUltcGwgKmxhc3REZXNjZW5kYW50KCkgY29uc3Q7CiAKICAgICAvLyBPdGhlciBt
ZXRob2RzIChub3QgcGFydCBvZiBET00pCiAgICAgdmlydHVhbCBib29sIGlzRWxlbWVudE5vZGUo
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQpAQCAtMTM3LDYgKzEzOSw3IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIGJvb2wgaXNTdHlsZWRFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
ICAgICB2aXJ0dWFsIGJvb2wgaXNBdHRyaWJ1dGVOb2RlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNUZXh0Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
CisgICAgdmlydHVhbCBib29sIGlzQ29tbWVudE5vZGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQogICAgIHZpcnR1YWwgYm9vbCBpc0RvY3VtZW50Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9CiAgICAgdmlydHVhbCBib29sIGlzWE1MRWxlbWVudE5vZGUoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQogICAgIGJvb2wgaXNCbG9ja0Zsb3coKSBjb25zdDsKQEAgLTE5OCwyNSArMjAxLDgg
QEAgcHVibGljOgogICAgIC8vIHVudGlsIHRoZXkga25vdyBhbGwgb2YgdGhlaXIgbmVzdGVkIDxw
YXJhbT5zLiBbMzYwMzE5MSwgNDA0MDg0OF0KICAgICB2aXJ0dWFsIHZvaWQgY2xvc2VSZW5kZXJl
cigpIHsgfQogCi0gICAgdHlwZWRlZiBRX1VJTlQzMiBJZDsKLSAgICAvLyBpZCgpIGlzIHVzZWQg
dG8gZWFzaWx5IGFuZCBleGFjdGx5IGlkZW50aWZ5IGEgbm9kZS4gSXQKLSAgICAvLyBpcyBvcHRp
bWl6ZWQgZm9yIHF1aWNrIGNvbXBhcmlzb24gYW5kIGxvdyBtZW1vcnkgY29uc3VtcHRpb24uCi0g
ICAgLy8gaXRzIHZhbHVlIGRlcGVuZHMgb24gdGhlIG93bmVyIGRvY3VtZW50IG9mIHRoZSBub2Rl
IGFuZCBpcwotICAgIC8vIGNhdGVnb3JpemVkIGluIHRoZSBmb2xsb3dpbmcgd2F5OgotICAgIC8v
IDEuLklEX0xBU1RfVEFHOiB0aGUgbm9kZSBpbmhlcml0cyBIVE1MRWxlbWVudEltcGwgYW5kIGlz
Ci0gICAgLy8gICAgICAgICAgICAgICAgIHBhcnQgb2YgdGhlIEhUTUwgbmFtZXNwYWNlLgotICAg
IC8vICAgICAgICAgICAgICAgICBUaGUgSFRNTCBuYW1lc3BhY2UgaXMgZWl0aGVyIHRoZSBnbG9i
YWwKLSAgICAvLyAgICAgICAgICAgICAgICAgb25lIChubyBuYW1lc3BhY2UpIG9yIHRoZSBYSFRN
TCBuYW1lc3BhY2UKLSAgICAvLyAgICAgICAgICAgICAgICAgZGVwZW5kaW5nIG9uIHRoZSBvd25l
ciBkb2N1bWVudCdzIGRvY3R5cGUKLSAgICAvLyBJRF9MQVNUX1RBRysxLi4weGZmZmY6IG5vbi1I
VE1MIGVsZW1lbnRzIGluIHRoZSBnbG9iYWwgbmFtZXNwYWNlCi0gICAgLy8gb3RoZXJzICAgICAg
IG5vbi1IVE1MIGVsZW1lbnRzIGluIGEgbmFtZXNwYWNlLgotICAgIC8vICAgICAgICAgICAgICAg
ICB0aGUgdXBwZXIgMTYgYml0IGlkZW50aWZ5IHRoZSBuYW1lc3BhY2UKLSAgICAvLyAgICAgICAg
ICAgICAgICAgdGhlIGxvd2VyIDE2IGJpdCBpZGVudGlmeSB0aGUgbG9jYWwgcGFydCBvZiB0aGUK
LSAgICAvLyAgICAgICAgICAgICAgICAgcXVhbGlmaWVkIGVsZW1lbnQgbmFtZS4KLSAgICB2aXJ0
dWFsIElkIGlkKCkgY29uc3QgeyByZXR1cm4gMDsgfTsKLSNpZiBBUFBMRV9DSEFOR0VTCi0gICAg
SWQgaWRlbnRpZmllcigpIGNvbnN0OwotI2VuZGlmCisgICAgdHlwZWRlZiBRX1VJTlQzMiBJZDsg
Ly8gRklYTUU6IFlhbmsgdGhpcyBvbmNlIGF0dHJpYnV0ZXMgYXJlIGFsc28gc3dpdGNoZWQgb3Zl
ci4KKwogICAgIGVudW0gTW91c2VFdmVudFR5cGUgewogICAgICAgICBNb3VzZVByZXNzLAogICAg
ICAgICBNb3VzZVJlbGVhc2UsCkBAIC0yNzgsOCArMjY0LDYgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgYm9vbCBpc0tleWJvYXJkRm9jdXNhYmxlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlz
TW91c2VGb2N1c2FibGUoKSBjb25zdDsKICAgICAKLSAgICB2aXJ0dWFsIGJvb2wgaXNJbmxpbmUo
KSBjb25zdDsKLSAgICAKICAgICB2aXJ0dWFsIGJvb2wgaXNDb250ZW50RWRpdGFibGUoKSBjb25z
dDsKICAgICB2aXJ0dWFsIFFSZWN0IGdldFJlY3QoKSBjb25zdDsKIApAQCAtMzY5LDcgKzM1Myw3
IEBAIHB1YmxpYzoKICAgICBraHRtbDo6UmVuZGVyT2JqZWN0ICpwcmV2aW91c1JlbmRlcmVyKCk7
CiAgICAgdm9pZCBzZXRSZW5kZXJlcihraHRtbDo6UmVuZGVyT2JqZWN0KiByZW5kZXJlcikgeyBt
X3JlbmRlciA9IHJlbmRlcmVyOyB9CiAgICAgCi0gICAgdm9pZCBjaGVja1NldFByZWZpeChjb25z
dCBET01TdHJpbmcgJl9wcmVmaXgsIGludCAmZXhjZXB0aW9uY29kZSk7CisgICAgdm9pZCBjaGVj
a1NldFByZWZpeChjb25zdCBBdG9taWNTdHJpbmcgJl9wcmVmaXgsIGludCAmZXhjZXB0aW9uY29k
ZSk7CiAgICAgdm9pZCBjaGVja0FkZENoaWxkKE5vZGVJbXBsICpuZXdDaGlsZCwgaW50ICZleGNl
cHRpb25jb2RlKTsKICAgICBib29sIGlzQW5jZXN0b3IoY29uc3QgTm9kZUltcGwgKikgY29uc3Q7
CiAgICAgdmlydHVhbCBib29sIGNoaWxkQWxsb3dlZCggTm9kZUltcGwgKm5ld0NoaWxkICk7Cklu
ZGV4OiBraHRtbC94bWwvZG9tX3FuYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvV2ViQ29yZS9raHRtbC94bWwvZG9tX3FuYW1lLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS4yCmRpZmYgLXUgLXAgLXIxLjIga2h0bWwveG1sL2RvbV9xbmFtZS5jcHAKLS0tIGtodG1sL3ht
bC9kb21fcW5hbWUuY3BwCTE2IEp1biAyMDA1IDIxOjA2OjQ2IC0wMDAwCTEuMgorKysga2h0bWwv
eG1sL2RvbV9xbmFtZS5jcHAJMjMgSnVuIDIwMDUgMjE6NTM6MDQgLTAwMDAKQEAgLTg4LDcgKzg4
LDcgQEAgY29uc3QgUXVhbGlmaWVkTmFtZSYgUXVhbGlmaWVkTmFtZTo6b3BlcgogCiB2b2lkIFF1
YWxpZmllZE5hbWU6OmRlcmVmKCkKIHsKLSAgICBpZiAobV9pbXBsLT5yZWZDb3VudCgpID09IDEp
IHsKKyAgICBpZiAobV9pbXBsLT5oYXNPbmVSZWYoKSkgewogICAgICAgICAvLyBCZWZvcmUgZGVj
cmVtZW50aW5nIHRoZSByZWYgdG8gMCwgcmVtb3ZlIG91cnNlbHZlcyBmcm9tIHRoZSBoYXNoIHRh
YmxlLgogICAgICAgICBRUHRyRGljdDxRUHRyRGljdDxRdWFsaWZpZWROYW1lSW1wbD4gPiogbmFt
ZXNwYWNlRGljdCA9IDA7CiAgICAgICAgIFFQdHJEaWN0PFF1YWxpZmllZE5hbWVJbXBsPiogcHJl
Zml4RGljdCA9IDA7CkluZGV4OiBraHRtbC94bWwvZG9tX3RleHRpbXBsLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwveG1sL2RvbV90ZXh0aW1wbC5oLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjE2CmRpZmYgLXUgLXAgLXIxLjE2IGtodG1sL3htbC9kb21fdGV4
dGltcGwuaAotLS0ga2h0bWwveG1sL2RvbV90ZXh0aW1wbC5oCTEwIE1heSAyMDA1IDIxOjU5OjE1
IC0wMDAwCTEuMTYKKysrIGtodG1sL3htbC9kb21fdGV4dGltcGwuaAkyMyBKdW4gMjAwNSAyMTo1
MzowNSAtMDAwMApAQCAtMTAwLDggKzEwMCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIE5vZGVJ
bXBsICpjbG9uZU5vZGUoYm9vbCBkZWVwKTsKIAogICAgIC8vIE90aGVyIG1ldGhvZHMgKG5vdCBw
YXJ0IG9mIERPTSkKLQotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJv
b2wgaXNDb21tZW50Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIGJv
b2wgY2hpbGRUeXBlQWxsb3dlZCggdW5zaWduZWQgc2hvcnQgdHlwZSApOwogCiAgICAgdmlydHVh
bCBET01TdHJpbmcgdG9TdHJpbmcoKSBjb25zdDsKQEAgLTEyOCw3ICsxMjcsNiBAQCBwdWJsaWM6
CiAgICAgLy8gT3RoZXIgbWV0aG9kcyAobm90IHBhcnQgb2YgRE9NKQogCiAgICAgdmlydHVhbCBi
b29sIGlzVGV4dE5vZGUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBJZCBp
ZCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBhdHRhY2goKTsKICAgICB2aXJ0dWFsIGJvb2wg
cmVuZGVyZXJJc05lZWRlZChraHRtbDo6UmVuZGVyU3R5bGUgKik7CiAgICAgdmlydHVhbCBraHRt
bDo6UmVuZGVyT2JqZWN0ICpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSAqLCBraHRtbDo6UmVu
ZGVyU3R5bGUgKik7CkluZGV4OiBraHRtbC94bWwveG1sX25hbWVzcGFjZV90YWJsZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZToga2h0bWwveG1sL3htbF9uYW1lc3BhY2VfdGFibGUuY3BwCmRpZmYg
LU4ga2h0bWwveG1sL3htbF9uYW1lc3BhY2VfdGFibGUuY3BwCi0tLSBraHRtbC94bWwveG1sX25h
bWVzcGFjZV90YWJsZS5jcHAJMjYgSmFuIDIwMDQgMjI6MzM6MTkgLTAwMDAJMS4xCisrKyAvZGV2
L251bGwJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMApAQCAtMSw3OSArMCwwIEBACi0vKioKLSAq
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4KLSAq
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQgQXBwbGUgQ29tcHV0ZXIsIEluYy4KLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
Ci0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAs
Ci0gKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAieG1sX25h
bWVzcGFjZV90YWJsZS5oIgotI2luY2x1ZGUgImRvbV9ub2RlaW1wbC5oIgotCi1uYW1lc3BhY2Ug
RE9NCi17Ci0KLVFEaWN0PFhtbE5hbWVzcGFjZUVudHJ5PiogWG1sTmFtZXNwYWNlVGFibGU6OmdO
YW1lc3BhY2VUYWJsZSA9IDA7Ci0KLWludCBYbWxOYW1lc3BhY2VUYWJsZTo6Z2V0TmFtZXNwYWNl
SUQoY29uc3QgRE9NU3RyaW5nJiB1cmksIGJvb2wgcmVhZG9ubHkpCi17Ci0gICAgaWYgKHVyaSA9
PSBYSFRNTF9OQU1FU1BBQ0UpCi0gICAgICAgIHJldHVybiB4aHRtbE5hbWVzcGFjZTsKLSAgICAK
LSAgICBpZiAodXJpLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG5vTmFtZXNwYWNlOwotICAg
IAotICAgIFFTdHJpbmcgdXJpU3RyID0gdXJpLnN0cmluZygpOwotCi0gICAgaWYgKCFnTmFtZXNw
YWNlVGFibGUpIHsKLSAgICAgICAgZ05hbWVzcGFjZVRhYmxlID0gbmV3IFFEaWN0PFhtbE5hbWVz
cGFjZUVudHJ5PjsKLSAgICAgICAgZ05hbWVzcGFjZVRhYmxlLT5pbnNlcnQoWEhUTUxfTkFNRVNQ
QUNFLCBuZXcgWG1sTmFtZXNwYWNlRW50cnkoeGh0bWxOYW1lc3BhY2UsIFhIVE1MX05BTUVTUEFD
RSkpOwotICAgIH0KLSAgICAKLSAgICBYbWxOYW1lc3BhY2VFbnRyeSogbnMgPSBnTmFtZXNwYWNl
VGFibGUtPmZpbmQodXJpU3RyKTsKLSAgICBpZiAobnMpIHJldHVybiBucy0+bV9pZDsKLSAgICAK
LSAgICBpZiAoIXJlYWRvbmx5KSB7Ci0gICAgICAgIHN0YXRpYyBpbnQgaWQgPSB4aHRtbE5hbWVz
cGFjZSsxOwotICAgICAgICBucyA9IG5ldyBYbWxOYW1lc3BhY2VFbnRyeShpZCsrLCB1cmkpOwot
ICAgICAgICBnTmFtZXNwYWNlVGFibGUtPmluc2VydCh1cmlTdHIsIG5zKTsKLSAgICAgICAgcmV0
dXJuIG5zLT5tX2lkOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gLTE7Ci19Ci0KLURPTVN0cmlu
ZyBYbWxOYW1lc3BhY2VUYWJsZTo6Z2V0TmFtZXNwYWNlVVJJKGludCBpZCkKLXsKLSAgICBpZiAo
aWQgPT0gbm9OYW1lc3BhY2UgfHwgaWQgPT0gYW55TmFtZXNwYWNlIHx8ICFnTmFtZXNwYWNlVGFi
bGUpCi0gICAgICAgIHJldHVybiAiIjsKLQotICAgIGlmICghZ05hbWVzcGFjZVRhYmxlKSB7Ci0g
ICAgICAgIGdOYW1lc3BhY2VUYWJsZSA9IG5ldyBRRGljdDxYbWxOYW1lc3BhY2VFbnRyeT47Ci0g
ICAgICAgIGdOYW1lc3BhY2VUYWJsZS0+aW5zZXJ0KFhIVE1MX05BTUVTUEFDRSwgbmV3IFhtbE5h
bWVzcGFjZUVudHJ5KHhodG1sTmFtZXNwYWNlLCBYSFRNTF9OQU1FU1BBQ0UpKTsKLSAgICB9Ci0g
ICAgCi0gICAgLy8gSGF2ZSB0byBpdGVyYXRlIG92ZXIgdGhlIGRpY3Rpb25hcnkgZW50cmllcyBs
b29raW5nIGZvciBhIG1hdGNoLgotICAgIC8vIChUaGlzIHNob3VsZCBiZSBvaywgc2luY2UgdGhp
cyBpcyBub3QgdGhlIGNvbW1vbiBkaXJlY3Rpb24uKQotICAgIFFEaWN0SXRlcmF0b3I8WG1sTmFt
ZXNwYWNlRW50cnk+IGl0KCpnTmFtZXNwYWNlVGFibGUpOwotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBpdC5jb3VudCgpOyBpKyssICsraXQpIHsKLSAgICAgICAgaWYgKGl0LmN1cnJlbnQo
KS0+bV9pZCA9PSBpZCkKLSAgICAgICAgICAgIHJldHVybiBpdC5jdXJyZW50KCktPm1fdXJpOwot
ICAgIH0KLSAgICAKLSAgICByZXR1cm4gIiI7Ci19Ci0KLX0KSW5kZXg6IGtodG1sL3htbC94bWxf
bmFtZXNwYWNlX3RhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZToga2h0bWwveG1sL3htbF9uYW1l
c3BhY2VfdGFibGUuaApkaWZmIC1OIGtodG1sL3htbC94bWxfbmFtZXNwYWNlX3RhYmxlLmgKLS0t
IGtodG1sL3htbC94bWxfbmFtZXNwYWNlX3RhYmxlLmgJMjYgSmFuIDIwMDQgMjI6MzM6MTkgLTAw
MDAJMS4xCisrKyAvZGV2L251bGwJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMApAQCAtMSw0NiAr
MCwwIEBACi0vKioKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1wbGVtZW50YXRp
b24gZm9yIEtERS4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
Ci0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxh
Y2UgLSBTdWl0ZSAzMzAsCi0gKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KLSAqLwotCi0j
aW5jbHVkZSA8cWRpY3QuaD4KLSNpbmNsdWRlICJkb20vZG9tX3N0cmluZy5oIgotCi1uYW1lc3Bh
Y2UgRE9NCi17ICAgIAotc3RydWN0IFhtbE5hbWVzcGFjZUVudHJ5OwotCi1jbGFzcyBYbWxOYW1l
c3BhY2VUYWJsZQotewotcHVibGljOgotICAgIHN0YXRpYyBpbnQgZ2V0TmFtZXNwYWNlSUQoY29u
c3QgRE9NU3RyaW5nJiB1cmksIGJvb2wgcmVhZG9ubHkgPSB0cnVlKTsKLSAgICBzdGF0aWMgRE9N
U3RyaW5nIGdldE5hbWVzcGFjZVVSSShpbnQgaWQpOwotICAgIAotICAgIHN0YXRpYyBRRGljdDxY
bWxOYW1lc3BhY2VFbnRyeT4qIGdOYW1lc3BhY2VUYWJsZTsKLX07Ci0KLXN0cnVjdCBYbWxOYW1l
c3BhY2VFbnRyeQotewotICAgIFhtbE5hbWVzcGFjZUVudHJ5KGludCBpZCwgY29uc3QgRE9NU3Ry
aW5nJiB1cmkpIDptX2lkKGlkKSwgbV91cmkodXJpKSB7fQotICAgIAotICAgIGludCBtX2lkOwot
ICAgIERPTVN0cmluZyBtX3VyaTsKLX07Ci0KLX0KSW5kZXg6IGt3cS9ET00ubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva3dxL0RPTS5tbSx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS4zNgpkaWZmIC11IC1wIC1yMS4zNiBrd3EvRE9NLm1tCi0tLSBrd3EvRE9NLm1tCTE5
IE1heSAyMDA1IDE4OjMyOjI3IC0wMDAwCTEuMzYKKysrIGt3cS9ET00ubW0JMjMgSnVuIDIwMDUg
MjE6NTM6MDYgLTAwMDAKQEAgLTMzOCw3ICszMzgsOCBAQCB1c2luZyBraHRtbDo6U2hhcmVkUHRy
OwogICAgIEFTU0VSVChwcmVmaXgpOwogCiAgICAgaW50IGV4Y2VwdGlvbkNvZGUgPSAwOwotICAg
IFtzZWxmIF9ub2RlSW1wbF0tPnNldFByZWZpeChwcmVmaXgsIGV4Y2VwdGlvbkNvZGUpOworICAg
IERPTVN0cmluZyBwcmVmaXhTdHIocHJlZml4KTsKKyAgICBbc2VsZiBfbm9kZUltcGxdLT5zZXRQ
cmVmaXgocHJlZml4U3RyLmltcGxlbWVudGF0aW9uKCksIGV4Y2VwdGlvbkNvZGUpOwogICAgIHJh
aXNlT25ET01FcnJvcihleGNlcHRpb25Db2RlKTsKIH0KIApJbmRleDoga3dxL0tXUURPTU5vZGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IGt3cS9LV1FET01Ob2RlLmNwcApkaWZmIC1OIGt3cS9L
V1FET01Ob2RlLmNwcAotLS0ga3dxL0tXUURPTU5vZGUuY3BwCTExIEp1bCAyMDAzIDE2OjI0OjM3
IC0wMDAwCTEuOQorKysgL2Rldi9udWxsCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKQEAgLTEs
MzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMyBBcHBsZSBDb21wdXRlciwgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiS1dRRE9NTm9kZS5oIgot
Ci11c2luZyBET006Ok5vZGVJbXBsOwotCi0vLyBUaGlzIG5lZWRzIHRvIGJlIGluIGEgQysrIHNv
dXJjZSBmaWxlIGJlY2F1c2UgaWQgaXMgYSByZXNlcnZlZCB3b3JkIGluIE9iamVjdGl2ZS1DKysu
Ci1Ob2RlSW1wbDo6SWQgaWRGcm9tTm9kZShOb2RlSW1wbCAqbm9kZSkKLXsKLSAgICByZXR1cm4g
bm9kZS0+aWQoKTsKLX0KSW5kZXg6IGt3cS9LV1FET01Ob2RlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZToga3dxL0tXUURPTU5vZGUuaApkaWZmIC1OIGt3cS9LV1FET01Ob2RlLmgKLS0tIGt3cS9LV1FE
T01Ob2RlLmgJMTEgSnVsIDIwMDMgMTY6MjQ6MzcgLTAwMDAJMS41CisrKyAvZGV2L251bGwJMSBK
YW4gMTk3MCAwMDowMDowMCAtMDAwMApAQCAtMSwyOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDAzIEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIs
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpbmNsdWRlICJkb21fbm9kZWltcGwuaCIKLQotRE9NOjpOb2RlSW1wbDo6SWQgaWRGcm9t
Tm9kZShET006Ok5vZGVJbXBsICopOwpJbmRleDoga3dxL0tXUUtIVE1MUGFydC5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3EvS1dRS0hUTUxQYXJ0Lm1tLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjY0MwpkaWZmIC11IC1wIC1yMS42NDMga3dxL0tXUUtIVE1MUGFy
dC5tbQotLS0ga3dxL0tXUUtIVE1MUGFydC5tbQkyNiBNYXkgMjAwNSAyMDozMDoxMiAtMDAwMAkx
LjY0MworKysga3dxL0tXUUtIVE1MUGFydC5tbQkyMyBKdW4gMjAwNSAyMTo1MzoxMCAtMDAwMApA
QCAtMjgsNyArMjgsNiBAQAogI2ltcG9ydCAiRE9NSW50ZXJuYWwuaCIKIAogI2ltcG9ydCAiS1dR
Q2xpcGJvYXJkLmgiCi0jaW1wb3J0ICJLV1FET01Ob2RlLmgiCiAjaW1wb3J0ICJLV1FEdW1teVZp
ZXcuaCIKICNpbXBvcnQgIktXUUVkaXRDb21tYW5kLmgiCiAjaW1wb3J0ICJLV1FFeGNlcHRpb25z
LmgiCkBAIC0xMDAsNiArOTksNyBAQCB1c2luZyBET006OkhUTUxFbGVtZW50SW1wbDsKIHVzaW5n
IERPTTo6SFRNTEZvcm1FbGVtZW50SW1wbDsKIHVzaW5nIERPTTo6SFRNTEZyYW1lRWxlbWVudElt
cGw7CiB1c2luZyBET006OkhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsOwordXNpbmcgRE9NOjpI
VE1MTmFtZXM7CiB1c2luZyBET006OkhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbDsKIHVzaW5nIERP
TTo6Tm9kZTsKIHVzaW5nIERPTTo6Tm9kZUltcGw7CkBAIC0zNjEsMTMgKzM2MSwxMiBAQCBzdGF0
aWMgSFRNTEZvcm1FbGVtZW50SW1wbCAqc2NhbkZvckZvcm0oCiB7CiAgICAgTm9kZUltcGwgKm47
CiAgICAgZm9yIChuID0gc3RhcnQ7IG47IG4gPSBuLT50cmF2ZXJzZU5leHROb2RlKCkpIHsKLSAg
ICAgICAgTm9kZUltcGw6OklkIG5vZGVJRCA9IGlkRnJvbU5vZGUobik7Ci0gICAgICAgIGlmIChu
b2RlSUQgPT0gSURfRk9STSkgeworICAgICAgICBpZiAobi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
OmZvcm0oKSkpIHsKICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1l
bnRJbXBsICo+KG4pOwogICAgICAgICB9IGVsc2UgaWYgKG4tPmlzSFRNTEVsZW1lbnQoKQogICAg
ICAgICAgICAgICAgICAgICYmIHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCAqPihuKS0+aXNH
ZW5lcmljRm9ybUVsZW1lbnQoKSkgewogICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhU
TUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsICo+KG4pLT5mb3JtKCk7Ci0gICAgICAgIH0gZWxzZSBp
ZiAobm9kZUlEID09IElEX0ZSQU1FIHx8IG5vZGVJRCA9PSBJRF9JRlJBTUUpIHsKKyAgICAgICAg
fSBlbHNlIGlmIChuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZnJhbWUoKSkgfHwgbi0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OmlmcmFtZSgpKSkgewogICAgICAgICAgICAgTm9kZUltcGwgKmNoaWxk
RG9jID0gc3RhdGljX2Nhc3Q8SFRNTEZyYW1lRWxlbWVudEltcGwgKj4obiktPmNvbnRlbnREb2N1
bWVudCgpOwogICAgICAgICAgICAgSFRNTEZvcm1FbGVtZW50SW1wbCAqZnJhbWVSZXN1bHQgPSBz
Y2FuRm9yRm9ybShjaGlsZERvYyk7CiAgICAgICAgICAgICBpZiAoZnJhbWVSZXN1bHQpIHsKQEAg
LTM5MCw3ICszODksNyBAQCBIVE1MRm9ybUVsZW1lbnRJbXBsICpLV1FLSFRNTFBhcnQ6OmN1cnJl
CiAgICAgLy8gdHJ5IHdhbGtpbmcgdXAgdGhlIG5vZGUgdHJlZSB0byBmaW5kIGEgZm9ybSBlbGVt
ZW50CiAgICAgTm9kZUltcGwgKm47CiAgICAgZm9yIChuID0gc3RhcnQ7IG47IG4gPSBuLT5wYXJl
bnROb2RlKCkpIHsKLSAgICAgICAgaWYgKGlkRnJvbU5vZGUobikgPT0gSURfRk9STSkgeworICAg
ICAgICBpZiAobi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZvcm0oKSkpIHsKICAgICAgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnRJbXBsICo+KG4pOwogICAgICAgICB9
IGVsc2UgaWYgKG4tPmlzSFRNTEVsZW1lbnQoKQogICAgICAgICAgICAgICAgICAgICYmIHN0YXRp
Y19jYXN0PEhUTUxFbGVtZW50SW1wbCAqPihuKS0+aXNHZW5lcmljRm9ybUVsZW1lbnQoKSkgewpA
QCAtNDg5LDggKzQ4OCw3IEBAIE5TU3RyaW5nICpLV1FLSFRNTFBhcnQ6OnNlYXJjaEZvckxhYmVs
c0EKICAgICAgICAgaWYgKGFib3ZlQ2VsbCkgewogICAgICAgICAgICAgLy8gc2VhcmNoIHdpdGhp
biB0aGUgYWJvdmUgY2VsbCB3ZSBmb3VuZCBmb3IgYSBtYXRjaAogICAgICAgICAgICAgZm9yIChO
b2RlSW1wbCAqbiA9IGFib3ZlQ2VsbC0+Zmlyc3RDaGlsZCgpOyBuOyBuID0gbi0+dHJhdmVyc2VO
ZXh0Tm9kZShhYm92ZUNlbGwpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGlkRnJvbU5vZGUobikg
PT0gSURfVEVYVAotICAgICAgICAgICAgICAgICAgICAmJiBuLT5yZW5kZXJlcigpICYmIG4tPnJl
bmRlcmVyKCktPnN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFKQorICAgICAgICAgICAg
ICAgIGlmIChuLT5pc1RleHROb2RlKCkgJiYgbi0+cmVuZGVyZXIoKSAmJiBuLT5yZW5kZXJlcigp
LT5zdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0gVklTSUJMRSkKICAgICAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgICAgIC8vIEZvciBlYWNoIHRleHQgY2h1bmssIHJ1biB0aGUgcmVnZXhw
CiAgICAgICAgICAgICAgICAgICAgIFFTdHJpbmcgbm9kZVN0cmluZyA9IG4tPm5vZGVWYWx1ZSgp
LnN0cmluZygpOwpAQCAtNTI1LDIzICs1MjMsMjEgQEAgTlNTdHJpbmcgKktXUUtIVE1MUGFydDo6
c2VhcmNoRm9yTGFiZWxzQgogICAgICAgICAgbiAmJiBsZW5ndGhTZWFyY2hlZCA8IGNoYXJzU2Vh
cmNoZWRUaHJlc2hvbGQ7CiAgICAgICAgICBuID0gbi0+dHJhdmVyc2VQcmV2aW91c05vZGUoKSkK
ICAgICB7Ci0gICAgICAgIE5vZGVJbXBsOjpJZCBub2RlSUQgPSBpZEZyb21Ob2RlKG4pOwotICAg
ICAgICBpZiAobm9kZUlEID09IElEX0ZPUk0KKyAgICAgICAgaWYgKG4tPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjpmb3JtKCkpCiAgICAgICAgICAgICB8fCAobi0+aXNIVE1MRWxlbWVudCgpCiAgICAg
ICAgICAgICAgICAgJiYgc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KG4pLT5pc0dlbmVy
aWNGb3JtRWxlbWVudCgpKSkKICAgICAgICAgewogICAgICAgICAgICAgLy8gV2UgaGl0IGFub3Ro
ZXIgZm9ybSBlbGVtZW50IG9yIHRoZSBzdGFydCBvZiB0aGUgZm9ybSAtIGJhaWwgb3V0CiAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfSBlbHNlIGlmIChub2RlSUQgPT0gSURfVEQgJiYgIXN0
YXJ0aW5nVGFibGVDZWxsKSB7CisgICAgICAgIH0gZWxzZSBpZiAobi0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OnRkKCkpICYmICFzdGFydGluZ1RhYmxlQ2VsbCkgewogICAgICAgICAgICAgc3RhcnRp
bmdUYWJsZUNlbGwgPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVDZWxsRWxlbWVudEltcGwgKj4obik7
Ci0gICAgICAgIH0gZWxzZSBpZiAobm9kZUlEID09IElEX1RSICYmIHN0YXJ0aW5nVGFibGVDZWxs
KSB7CisgICAgICAgIH0gZWxzZSBpZiAobi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRyKCkpICYm
IHN0YXJ0aW5nVGFibGVDZWxsKSB7CiAgICAgICAgICAgICBOU1N0cmluZyAqcmVzdWx0ID0gc2Vh
cmNoRm9yTGFiZWxzQWJvdmVDZWxsKHJlZ0V4cCwgc3RhcnRpbmdUYWJsZUNlbGwpOwogICAgICAg
ICAgICAgaWYgKHJlc3VsdCkgewogICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBzZWFyY2hlZENlbGxBYm92ZSA9IHRydWU7Ci0gICAgICAg
IH0gZWxzZSBpZiAobm9kZUlEID09IElEX1RFWFQKLSAgICAgICAgICAgICAgICAgICAmJiBuLT5y
ZW5kZXJlcigpICYmIG4tPnJlbmRlcmVyKCktPnN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJ
QkxFKQorICAgICAgICB9IGVsc2UgaWYgKG4tPmlzVGV4dE5vZGUoKSAmJiBuLT5yZW5kZXJlcigp
ICYmIG4tPnJlbmRlcmVyKCktPnN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFKQogICAg
ICAgICB7CiAgICAgICAgICAgICAvLyBGb3IgZWFjaCB0ZXh0IGNodW5rLCBydW4gdGhlIHJlZ2V4
cAogICAgICAgICAgICAgUVN0cmluZyBub2RlU3RyaW5nID0gbi0+bm9kZVZhbHVlKCkuc3RyaW5n
KCk7CkBAIC0yODQ4LDE0ICsyODQ0LDEwIEBAIE5TRmlsZVdyYXBwZXIgKktXUUtIVE1MUGFydDo6
ZmlsZVdyYXBwZXIKIAogc3RhdGljIEVsZW1lbnRJbXBsICpsaXN0UGFyZW50KEVsZW1lbnRJbXBs
ICppdGVtKQogewotICAgIC8vIEljayEgIEF2b2lkIHVzZSBvZiBpdGVtLT5pZCgpIHdoaWNoIGNv
bmZ1c2VzIE9iakMrKy4KLSAgICB1bnNpZ25lZCBzaG9ydCBfaWQgPSBpdGVtLT5pZGVudGlmaWVy
KCk7Ci0gICAgCi0gICAgd2hpbGUgKF9pZCAhPSBJRF9VTCAmJiBfaWQgIT0gSURfT0wpIHsKKyAg
ICB3aGlsZSAoIWl0ZW0tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp1bCgpKSAmJiAhaXRlbS0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6Om9sKCkpKSB7CiAgICAgICAgIGl0ZW0gPSBzdGF0aWNfY2FzdDxF
bGVtZW50SW1wbCAqPihpdGVtLT5wYXJlbnROb2RlKCkpOwogICAgICAgICBpZiAoIWl0ZW0pCiAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgX2lkID0gaXRlbS0+aWRlbnRpZmllcigpOwogICAg
IH0KICAgICByZXR1cm4gaXRlbTsKIH0KQEAgLTI4NjgsNyArMjg2MCw3IEBAIHN0YXRpYyBOb2Rl
SW1wbCogaXNUZXh0Rmlyc3RJbkxpc3RJdGVtKE4KICAgICB3aGlsZSAocGFyKSB7CiAgICAgICAg
IGlmIChwYXItPmZpcnN0Q2hpbGQoKSAhPSBlKQogICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
ICAgIGlmIChwYXItPmlkZW50aWZpZXIoKSA9PSBJRF9MSSkKKyAgICAgICAgaWYgKHBhci0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OmxpKCkpKQogICAgICAgICAgICAgcmV0dXJuIHBhcjsKICAgICAg
ICAgZSA9IHBhcjsKICAgICAgICAgcGFyID0gcGFyLT5wYXJlbnROb2RlKCk7CkBAIC0zMDIyLDEw
OSArMzAxNCw5NSBAQCBOU0F0dHJpYnV0ZWRTdHJpbmcgKktXUUtIVE1MUGFydDo6YXR0cmliCiAg
ICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgb3VyIHNpbXBs
ZSBIVE1MIC0+IEFTQ0lJIHRyYW5zZm9ybWF0aW9uOgogICAgICAgICAgICAgICAgIFFTdHJpbmcg
dGV4dDsKLSAgICAgICAgICAgICAgICBOb2RlSW1wbDo6SWQgX2lkID0gbi0+aWRlbnRpZmllcigp
OwotICAgICAgICAgICAgICAgIHN3aXRjaChfaWQpIHsKLSAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBJRF9BOgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm90ZSB0aGUgc3RhcnQgb2YgdGhl
IDxhPiBlbGVtZW50LiAgV2Ugd2lsbCBhZGQgdGhlIE5TTGlua0F0dHJpYnV0ZU5hbWUKLSAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIGF0dHJpYnV0ZSB0byB0aGUgYXR0cmlidXRlZCBzdHJpbmcg
d2hlbiBuYXZpZ2F0aW5nIHRvIHRoZSBuZXh0IHNpYmxpbmcgCi0gICAgICAgICAgICAgICAgICAg
ICAgICAvLyBvZiB0aGlzIG5vZGUuCi0gICAgICAgICAgICAgICAgICAgICAgICBsaW5rU3RhcnRM
b2NhdGlvbiA9IFtyZXN1bHQgbGVuZ3RoXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtT
dGFydE5vZGUgPSBzdGF0aWNfY2FzdDxFbGVtZW50SW1wbCo+KG4pOwotICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9CUjoKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHRleHQgKz0gIlxuIjsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGhhc05ld0xpbmUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfTEk6Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUVN0cmluZyBsaXN0VGV4dDsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBFbGVtZW50SW1wbCAqaXRlbVBhcmVudCA9IGxpc3RQYXJl
bnQoc3RhdGljX2Nhc3Q8RWxlbWVudEltcGwgKj4obikpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaGFzTmV3TGluZSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdFRleHQgKz0gJ1xuJzsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBoYXNOZXdMaW5lID0gdHJ1ZTsKLSAgICAKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBsaXN0SXRlbXMuYXBwZW5kKHN0YXRpY19jYXN0PEVsZW1lbnRJbXBs
Kj4obikpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3RJdGVtSW5mbyBpbmZvOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8uc3RhcnQgPSBbcmVzdWx0IGxlbmd0aF07
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mby5lbmQgPSAwOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGxpc3RJdGVtTG9jYXRpb25zLmFwcGVuZCAoaW5mbyk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdFRl
eHQgKz0gJ1x0JzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbVBhcmVudCAm
JiByZW5kZXJlci0+aXNMaXN0SXRlbSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFJlbmRlckxpc3RJdGVtICpsaXN0UmVuZGVyZXIgPSBzdGF0aWNfY2FzdDxSZW5kZXJMaXN0
SXRlbSo+KHJlbmRlcmVyKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhN
YXJrZXJXaWR0aCA9IE1BWChbZm9udCBwb2ludFNpemVdLCBtYXhNYXJrZXJXaWR0aCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaChzdHlsZS0+bGlzdFN0eWxlVHlwZSgp
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIGtodG1sOjpESVND
OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RUZXh0ICs9ICgo
UUNoYXIpQlVMTEVUX0NIQVIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBraHRt
bDo6Q0lSQ0xFOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RU
ZXh0ICs9ICgoUUNoYXIpQ0lSQ0xFX0NIQVIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSBraHRtbDo6U1FVQVJFOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGxpc3RUZXh0ICs9ICgoUUNoYXIpU1FVQVJFX0NIQVIpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2FzZSBraHRtbDo6TE5PTkU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFTdHJpbmcg
bWFya2VyID0gbGlzdFJlbmRlcmVyLT5tYXJrZXJTdHJpbmdWYWx1ZSgpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RUZXh0ICs9IG1hcmtlcjsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBVc2UgQXBwS2l0IG1ldHJpY3MuICBX
aWxsIGJlIHJlbmRlcmVkIGJ5IEFwcEtpdC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmbG9hdCBtYXJrZXJXaWR0aCA9IFtmb250IHdpZHRoT2ZTdHJpbmc6IG1hcmtl
ci5nZXROU1N0cmluZygpXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtYXhNYXJrZXJXaWR0aCA9IE1BWChtYXJrZXJXaWR0aCwgbWF4TWFya2VyV2lkdGgpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKG4tPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjphKCkpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIE5vdGUg
dGhlIHN0YXJ0IG9mIHRoZSA8YT4gZWxlbWVudC4gIFdlIHdpbGwgYWRkIHRoZSBOU0xpbmtBdHRy
aWJ1dGVOYW1lCisgICAgICAgICAgICAgICAgICAgIC8vIGF0dHJpYnV0ZSB0byB0aGUgYXR0cmli
dXRlZCBzdHJpbmcgd2hlbiBuYXZpZ2F0aW5nIHRvIHRoZSBuZXh0IHNpYmxpbmcgCisgICAgICAg
ICAgICAgICAgICAgIC8vIG9mIHRoaXMgbm9kZS4KKyAgICAgICAgICAgICAgICAgICAgbGlua1N0
YXJ0TG9jYXRpb24gPSBbcmVzdWx0IGxlbmd0aF07CisgICAgICAgICAgICAgICAgICAgIGxpbmtT
dGFydE5vZGUgPSBzdGF0aWNfY2FzdDxFbGVtZW50SW1wbCo+KG4pOworICAgICAgICAgICAgICAg
IH0gZWxzZSBpZiAobi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJyKCkpKSB7CisgICAgICAgICAg
ICAgICAgICAgIHRleHQgKz0gIlxuIjsKKyAgICAgICAgICAgICAgICAgICAgaGFzTmV3TGluZSA9
IHRydWU7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuLT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6bGkoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgUVN0cmluZyBsaXN0VGV4dDsKKyAgICAg
ICAgICAgICAgICAgICAgRWxlbWVudEltcGwgKml0ZW1QYXJlbnQgPSBsaXN0UGFyZW50KHN0YXRp
Y19jYXN0PEVsZW1lbnRJbXBsICo+KG4pKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgICAgIGlmICghaGFzTmV3TGluZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGxp
c3RUZXh0ICs9ICdcbic7CisgICAgICAgICAgICAgICAgICAgIGhhc05ld0xpbmUgPSB0cnVlOwog
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RUZXh0ICs9ICcgJzsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdFRleHQgKz0gJ1x0JzsKLSAgICAKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgTlNNdXRhYmxlRGljdGlvbmFyeSAqYXR0cnM7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnMgPSBbW05T
TXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBbYXR0cnMgc2V0T2JqZWN0OmZvbnQgZm9yS2V5Ok5TRm9udEF0dHJpYnV0ZU5hbWVd
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3R5bGUgJiYgc3R5bGUtPmNv
bG9yKCkuaXNWYWxpZCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0
dHJzIHNldE9iamVjdDpzdHlsZS0+Y29sb3IoKS5nZXROU0NvbG9yKCkgZm9yS2V5Ok5TRm9yZWdy
b3VuZENvbG9yQXR0cmlidXRlTmFtZV07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChzdHlsZSAmJiBzdHlsZS0+YmFja2dyb3VuZENvbG9yKCkuaXNWYWxpZCgpKQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHJzIHNldE9iamVjdDpzdHlsZS0+YmFj
a2dyb3VuZENvbG9yKCkuZ2V0TlNDb2xvcigpIGZvcktleTpOU0JhY2tncm91bmRDb2xvckF0dHJp
YnV0ZU5hbWVdOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IE5TQXR0cmlidXRlZFN0cmluZyAqcGFydGlhbFN0cmluZyA9IFtbTlNBdHRyaWJ1dGVkU3RyaW5n
IGFsbG9jXSBpbml0V2l0aFN0cmluZzpsaXN0VGV4dC5nZXROU1N0cmluZygpIGF0dHJpYnV0ZXM6
YXR0cnNdOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0cnMgcmVsZWFzZV07
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXN1bHQgYXBwZW5kQXR0cmlidXRl
ZFN0cmluZzogcGFydGlhbFN0cmluZ107ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBbcGFydGlhbFN0cmluZyByZWxlYXNlXTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGxpc3RJdGVtcy5hcHBlbmQoc3Rh
dGljX2Nhc3Q8RWxlbWVudEltcGwqPihuKSk7CisgICAgICAgICAgICAgICAgICAgIExpc3RJdGVt
SW5mbyBpbmZvOworICAgICAgICAgICAgICAgICAgICBpbmZvLnN0YXJ0ID0gW3Jlc3VsdCBsZW5n
dGhdOworICAgICAgICAgICAgICAgICAgICBpbmZvLmVuZCA9IDA7CisgICAgICAgICAgICAgICAg
ICAgIGxpc3RJdGVtTG9jYXRpb25zLmFwcGVuZCAoaW5mbyk7CisgICAgICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgICAgICBsaXN0VGV4dCArPSAnXHQnOworICAgICAgICAgICAgICAg
ICAgICBpZiAoaXRlbVBhcmVudCAmJiByZW5kZXJlci0+aXNMaXN0SXRlbSgpKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBSZW5kZXJMaXN0SXRlbSAqbGlzdFJlbmRlcmVyID0gc3RhdGljX2Nh
c3Q8UmVuZGVyTGlzdEl0ZW0qPihyZW5kZXJlcik7CisKKyAgICAgICAgICAgICAgICAgICAgICAg
IG1heE1hcmtlcldpZHRoID0gTUFYKFtmb250IHBvaW50U2l6ZV0sIG1heE1hcmtlcldpZHRoKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaChzdHlsZS0+bGlzdFN0eWxlVHlwZSgpKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBraHRtbDo6RElTQzoKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbGlzdFRleHQgKz0gKChRQ2hhcilCVUxMRVRfQ0hBUik7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNhc2Uga2h0bWw6OkNJUkNMRToKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbGlzdFRleHQgKz0gKChRQ2hhcilDSVJDTEVfQ0hBUik7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNh
c2Uga2h0bWw6OlNRVUFSRToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdFRl
eHQgKz0gKChRQ2hhcilTUVVBUkVfQ0hBUik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Uga2h0bWw6OkxOT05F
OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBR
U3RyaW5nIG1hcmtlciA9IGxpc3RSZW5kZXJlci0+bWFya2VyU3RyaW5nVmFsdWUoKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdFRleHQgKz0gbWFya2VyOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBVc2UgQXBwS2l0IG1ldHJpY3MuICBXaWxsIGJlIHJl
bmRlcmVkIGJ5IEFwcEtpdC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQg
bWFya2VyV2lkdGggPSBbZm9udCB3aWR0aE9mU3RyaW5nOiBtYXJrZXIuZ2V0TlNTdHJpbmcoKV07
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heE1hcmtlcldpZHRoID0gTUFYKG1h
cmtlcldpZHRoLCBtYXhNYXJrZXJXaWR0aCk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgICAgICAgICBjYXNl
IElEX09MOgotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX1VMOgorICAgICAgICAgICAgICAg
ICAgICAgICAgbGlzdFRleHQgKz0gJyAnOworICAgICAgICAgICAgICAgICAgICAgICAgbGlzdFRl
eHQgKz0gJ1x0JzsKKworICAgICAgICAgICAgICAgICAgICAgICAgTlNNdXRhYmxlRGljdGlvbmFy
eSAqYXR0cnM7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzID0gW1tOU011dGFibGVE
aWN0aW9uYXJ5IGFsbG9jXSBpbml0XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFthdHRycyBz
ZXRPYmplY3Q6Zm9udCBmb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoc3R5bGUgJiYgc3R5bGUtPmNvbG9yKCkuaXNWYWxpZCgpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFthdHRycyBzZXRPYmplY3Q6c3R5bGUtPmNvbG9yKCkuZ2V0
TlNDb2xvcigpIGZvcktleTpOU0ZvcmVncm91bmRDb2xvckF0dHJpYnV0ZU5hbWVdOworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHN0eWxlICYmIHN0eWxlLT5iYWNrZ3JvdW5kQ29sb3IoKS5p
c1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHJzIHNldE9iamVjdDpz
dHlsZS0+YmFja2dyb3VuZENvbG9yKCkuZ2V0TlNDb2xvcigpIGZvcktleTpOU0JhY2tncm91bmRD
b2xvckF0dHJpYnV0ZU5hbWVdOworCisgICAgICAgICAgICAgICAgICAgICAgICBOU0F0dHJpYnV0
ZWRTdHJpbmcgKnBhcnRpYWxTdHJpbmcgPSBbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5p
dFdpdGhTdHJpbmc6bGlzdFRleHQuZ2V0TlNTdHJpbmcoKSBhdHRyaWJ1dGVzOmF0dHJzXTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIFthdHRycyByZWxlYXNlXTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIFtyZXN1bHQgYXBwZW5kQXR0cmlidXRlZFN0cmluZzogcGFydGlhbFN0cmluZ107ICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgW3BhcnRpYWxTdHJpbmcgcmVs
ZWFzZV07CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBp
ZiAobi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9sKCkpIHx8IG4tPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjp1bCgpKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNOZXdMaW5lKQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQgKz0gIlxuIjsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGhhc05ld0xpbmUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0KLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9URDoKLSAgICAgICAgICAgICAgICAg
ICAgY2FzZSBJRF9USDoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9IUjoKLSAgICAgICAg
ICAgICAgICAgICAgY2FzZSBJRF9ERDoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9ETDoK
LSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9EVDoKLSAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBJRF9QUkU6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfQkxPQ0tRVU9URToKLSAgICAg
ICAgICAgICAgICAgICAgY2FzZSBJRF9ESVY6CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAobi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRkKCkpIHx8CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRoKCkpIHx8CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmhyKCkpIHx8Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmRk
KCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OmRsKCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OmR0KCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnByZSgpKSB8fAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpibG9ja3F1b3RlKCkpIHx8CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmRpdigp
KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNOZXdMaW5lKQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRleHQgKz0gJ1xuJzsKICAgICAgICAgICAgICAgICAgICAgICAg
IGhhc05ld0xpbmUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgICAgIGNhc2UgSURfUDoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9U
UjoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9IMToKLSAgICAgICAgICAgICAgICAgICAg
Y2FzZSBJRF9IMjoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9IMzoKLSAgICAgICAgICAg
ICAgICAgICAgY2FzZSBJRF9INDoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9INToKLSAg
ICAgICAgICAgICAgICAgICAgY2FzZSBJRF9INjogeworICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgaWYgKG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpwKCkpIHx8CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRyKCkpIHx8CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmgxKCkpIHx8
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
OmgyKCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OmgzKCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6Omg0KCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omg1KCkpIHx8CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omg2KCkpKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIWhhc05ld0xpbmUpCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdGV4dCArPSAnXG4nOwogICAgICAgICAgICAgICAgICAgICAgICAgCkBAIC0zMTM5LDEwICsz
MTE3LDggQEAgTlNBdHRyaWJ1dGVkU3RyaW5nICpLV1FLSFRNTFBhcnQ6OmF0dHJpYgogICAgICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgICAgICAgICBoYXNOZXdMaW5lID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9JTUc6CisgICAgICAgICAgICAgICAgICAgIGVs
c2UgaWYgKG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppbWcoKSkpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChwZW5kaW5nU3R5bGVkU3BhY2UgIT0gbmlsKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGxpbmtTdGFydExvY2F0aW9uID09IFtyZXN1bHQgbGVuZ3RoXSkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArK2xpbmtTdGFydExvY2F0aW9uOwpA
QCAtMzE1Niw4ICszMTMyLDkgQEAgTlNBdHRyaWJ1dGVkU3RyaW5nICpLV1FLSFRNTFBhcnQ6OmF0
dHJpYgogICAgICAgICAgICAgICAgICAgICAgICAgTlNBdHRyaWJ1dGVkU3RyaW5nICppU3RyaW5n
ID0gW05TQXR0cmlidXRlZFN0cmluZyBhdHRyaWJ1dGVkU3RyaW5nV2l0aEF0dGFjaG1lbnQ6YXR0
YWNobWVudF07CiAgICAgICAgICAgICAgICAgICAgICAgICBbcmVzdWx0IGFwcGVuZEF0dHJpYnV0
ZWRTdHJpbmc6IGlTdHJpbmddOwogICAgICAgICAgICAgICAgICAgICAgICAgW2F0dGFjaG1lbnQg
cmVsZWFzZV07Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgICAgIE5TQXR0cmlidXRl
ZFN0cmluZyAqcGFydGlhbFN0cmluZyA9IFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0
V2l0aFN0cmluZzp0ZXh0LmdldE5TU3RyaW5nKCldOwogICAgICAgICAgICAgICAgIFtyZXN1bHQg
YXBwZW5kQXR0cmlidXRlZFN0cmluZzogcGFydGlhbFN0cmluZ107CiAgICAgICAgICAgICAgICAg
W3BhcnRpYWxTdHJpbmcgcmVsZWFzZV07CkBAIC0zMTc5LDcxICszMTU2LDYwIEBAIE5TQXR0cmli
dXRlZFN0cmluZyAqS1dRS0hUTUxQYXJ0OjphdHRyaWIKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIG5leHQgPSBuLT5uZXh0U2libGluZygpOwogCi0gICAgICAgICAgICBOb2Rl
SW1wbDo6SWQgX2lkID0gbi0+aWRlbnRpZmllcigpOwotICAgICAgICAgICAgc3dpdGNoKF9pZCkg
ewotICAgICAgICAgICAgICAgIGNhc2UgSURfQToKLSAgICAgICAgICAgICAgICAgICAgLy8gRW5k
IG9mIGEgPGE+IGVsZW1lbnQuICBDcmVhdGUgYW4gYXR0cmlidXRlZCBzdHJpbmcgTlNMaW5rQXR0
cmlidXRlTmFtZSBhdHRyaWJ1dGUKLSAgICAgICAgICAgICAgICAgICAgLy8gZm9yIHRoZSByYW5n
ZSBvZiB0aGUgbGluay4gIE5vdGUgdGhhdCB3ZSBjcmVhdGUgdGhlIGF0dHJpYnV0ZWQgc3RyaW5n
IGZyb20gdGhlIERPTSwgd2hpY2gKLSAgICAgICAgICAgICAgICAgICAgLy8gd2lsbCBoYXZlIGNv
cnJlY3RlZCBhbnkgaWxsZWdhbGx5IG5lc3RlZCA8YT4gZWxlbWVudHMuCi0gICAgICAgICAgICAg
ICAgICAgIGlmIChsaW5rU3RhcnROb2RlICYmIG4gPT0gbGlua1N0YXJ0Tm9kZSl7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBET01TdHJpbmcgaHJlZiA9IHBhcnNlVVJMKGxpbmtTdGFydE5vZGUt
PmdldEF0dHJpYnV0ZShBVFRSX0hSRUYpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIEtVUkwg
a1VSTCA9IEtXUShsaW5rU3RhcnROb2RlLT5nZXREb2N1bWVudCgpLT5wYXJ0KCkpLT5jb21wbGV0
ZVVSTChocmVmLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgICAgICAgICAgTlNVUkwgKlVSTCA9IGtVUkwuZ2V0TlNVUkwoKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIFtyZXN1bHQgYWRkQXR0cmlidXRlOk5TTGlua0F0dHJpYnV0ZU5hbWUgdmFs
dWU6VVJMIHJhbmdlOk5TTWFrZVJhbmdlKGxpbmtTdGFydExvY2F0aW9uLCBbcmVzdWx0IGxlbmd0
aF0tbGlua1N0YXJ0TG9jYXRpb24pXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtTdGFy
dE5vZGUgPSAwOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgaWYgKG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjphKCkpKSB7Cisg
ICAgICAgICAgICAgICAgLy8gRW5kIG9mIGEgPGE+IGVsZW1lbnQuICBDcmVhdGUgYW4gYXR0cmli
dXRlZCBzdHJpbmcgTlNMaW5rQXR0cmlidXRlTmFtZSBhdHRyaWJ1dGUKKyAgICAgICAgICAgICAg
ICAvLyBmb3IgdGhlIHJhbmdlIG9mIHRoZSBsaW5rLiAgTm90ZSB0aGF0IHdlIGNyZWF0ZSB0aGUg
YXR0cmlidXRlZCBzdHJpbmcgZnJvbSB0aGUgRE9NLCB3aGljaAorICAgICAgICAgICAgICAgIC8v
IHdpbGwgaGF2ZSBjb3JyZWN0ZWQgYW55IGlsbGVnYWxseSBuZXN0ZWQgPGE+IGVsZW1lbnRzLgor
ICAgICAgICAgICAgICAgIGlmIChsaW5rU3RhcnROb2RlICYmIG4gPT0gbGlua1N0YXJ0Tm9kZSkg
eworICAgICAgICAgICAgICAgICAgICBET01TdHJpbmcgaHJlZiA9IHBhcnNlVVJMKGxpbmtTdGFy
dE5vZGUtPmdldEF0dHJpYnV0ZShBVFRSX0hSRUYpKTsKKyAgICAgICAgICAgICAgICAgICAgS1VS
TCBrVVJMID0gS1dRKGxpbmtTdGFydE5vZGUtPmdldERvY3VtZW50KCktPnBhcnQoKSktPmNvbXBs
ZXRlVVJMKGhyZWYuc3RyaW5nKCkpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICAgICAgTlNVUkwgKlVSTCA9IGtVUkwuZ2V0TlNVUkwoKTsKKyAgICAgICAgICAgICAgICAg
ICAgW3Jlc3VsdCBhZGRBdHRyaWJ1dGU6TlNMaW5rQXR0cmlidXRlTmFtZSB2YWx1ZTpVUkwgcmFu
Z2U6TlNNYWtlUmFuZ2UobGlua1N0YXJ0TG9jYXRpb24sIFtyZXN1bHQgbGVuZ3RoXS1saW5rU3Rh
cnRMb2NhdGlvbildOworICAgICAgICAgICAgICAgICAgICBsaW5rU3RhcnROb2RlID0gMDsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChuLT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6b2woKSkgfHwgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnVs
KCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFoYXNOZXdMaW5lKQorICAgICAgICAgICAgICAg
ICAgICB0ZXh0ICs9ICdcbic7CisgICAgICAgICAgICAgICAgaGFzTmV3TGluZSA9IHRydWU7Cisg
ICAgICAgICAgICB9IGVsc2UgaWYgKG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpsaSgpKSkgewog
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGNhc2UgSURfT0w6Ci0gICAgICAgICAg
ICAgICAgY2FzZSBJRF9VTDoKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNOZXdMaW5lKQot
ICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCArPSAnXG4nOwotICAgICAgICAgICAgICAgICAg
ICBoYXNOZXdMaW5lID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAg
ICAgICAgICAgICBjYXNlIElEX0xJOgotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgaSwgY291bnQgPSBsaXN0SXRlbXMuY291bnQoKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKXsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAobGlzdEl0ZW1zLmF0KGkpID09IG4pewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBsaXN0SXRlbUxvY2F0aW9uc1tpXS5lbmQgPSBbcmVzdWx0IGxl
bmd0aF07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBpbnQgaSwgY291bnQgPSBsaXN0SXRlbXMuY291bnQoKTsKKyAgICAgICAgICAgICAg
ICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKyl7CisgICAgICAgICAgICAgICAgICAgIGlmIChs
aXN0SXRlbXMuYXQoaSkgPT0gbil7CisgICAgICAgICAgICAgICAgICAgICAgICBsaXN0SXRlbUxv
Y2F0aW9uc1tpXS5lbmQgPSBbcmVzdWx0IGxlbmd0aF07CisgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAo
IWhhc05ld0xpbmUpCi0gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0ICs9ICdcbic7Ci0gICAg
ICAgICAgICAgICAgICAgIGhhc05ld0xpbmUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLQotICAgICAgICAgICAgICAgIGNhc2UgSURfVEQ6Ci0gICAgICAgICAgICAgICAgY2Fz
ZSBJRF9USDoKLSAgICAgICAgICAgICAgICBjYXNlIElEX0hSOgotICAgICAgICAgICAgICAgIGNh
c2UgSURfREQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBJRF9ETDoKLSAgICAgICAgICAgICAgICBj
YXNlIElEX0RUOgotICAgICAgICAgICAgICAgIGNhc2UgSURfUFJFOgotICAgICAgICAgICAgICAg
IGNhc2UgSURfQkxPQ0tRVU9URToKLSAgICAgICAgICAgICAgICBjYXNlIElEX0RJVjoKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKCFoYXNOZXdMaW5lKQotICAgICAgICAgICAgICAgICAgICAgICAg
dGV4dCArPSAnXG4nOwotICAgICAgICAgICAgICAgICAgICBoYXNOZXdMaW5lID0gdHJ1ZTsKLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBJRF9QOgotICAg
ICAgICAgICAgICAgIGNhc2UgSURfVFI6Ci0gICAgICAgICAgICAgICAgY2FzZSBJRF9IMToKLSAg
ICAgICAgICAgICAgICBjYXNlIElEX0gyOgotICAgICAgICAgICAgICAgIGNhc2UgSURfSDM6Ci0g
ICAgICAgICAgICAgICAgY2FzZSBJRF9INDoKLSAgICAgICAgICAgICAgICBjYXNlIElEX0g1Ogot
ICAgICAgICAgICAgICAgIGNhc2UgSURfSDY6Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaGFz
TmV3TGluZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHRleHQgKz0gJ1xuJzsKLSAgICAgICAg
ICAgICAgICAgICAgLy8gQW4gZXh0cmEgbmV3bGluZSBpcyBuZWVkZWQgYXQgdGhlIHN0YXJ0LCBu
b3QgdGhlIGVuZCwgb2YgdGhlc2UgdHlwZXMgb2YgdGFncywKLSAgICAgICAgICAgICAgICAgICAg
Ly8gc28gZG9uJ3QgYWRkIGFub3RoZXIgaGVyZS4KLSAgICAgICAgICAgICAgICAgICAgaGFzTmV3
TGluZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBpZiAoIWhhc05ld0xpbmUpCisgICAgICAgICAgICAgICAgICAg
IHRleHQgKz0gJ1xuJzsKKyAgICAgICAgICAgICAgICBoYXNOZXdMaW5lID0gdHJ1ZTsKKyAgICAg
ICAgICAgIH0gZWxzZSBpZiAobi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRkKCkpIHx8CisgICAg
ICAgICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0aCgpKSB8fAorICAg
ICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aHIoKSkgfHwKKyAg
ICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmRkKCkpIHx8Cisg
ICAgICAgICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpkbCgpKSB8fAor
ICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZHQoKSkgfHwK
KyAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnByZSgpKSB8
fAorICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YmxvY2tx
dW90ZSgpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6ZGl2KCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFoYXNOZXdMaW5lKQorICAgICAgICAg
ICAgICAgICAgICB0ZXh0ICs9ICdcbic7CisgICAgICAgICAgICAgICAgaGFzTmV3TGluZSA9IHRy
dWU7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpwKCkp
IHx8CisgICAgICAgICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0cigp
KSB8fAorICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDEo
KSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omgy
KCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpo
MygpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
aDQoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
Omg1KCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjpoNigpKSkgeworICAgICAgICAgICAgICAgIGlmICghaGFzTmV3TGluZSkKKyAgICAgICAgICAg
ICAgICAgICAgdGV4dCArPSAnXG4nOworICAgICAgICAgICAgICAgIC8vIEFuIGV4dHJhIG5ld2xp
bmUgaXMgbmVlZGVkIGF0IHRoZSBzdGFydCwgbm90IHRoZSBlbmQsIG9mIHRoZXNlIHR5cGVzIG9m
IHRhZ3MsCisgICAgICAgICAgICAgICAgLy8gc28gZG9uJ3QgYWRkIGFub3RoZXIgaGVyZS4KKyAg
ICAgICAgICAgICAgICBoYXNOZXdMaW5lID0gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIAogICAgICAgICAgICAgTlNBdHRyaWJ1dGVkU3RyaW5nICpwYXJ0aWFsU3RyaW5nID0gW1tO
U0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOnRleHQuZ2V0TlNTdHJpbmco
KV07CkBAIC0zNDc2LDcgKzM0NDIsNyBAQCBSZW5kZXJTdHlsZSAqS1dRS0hUTUxQYXJ0OjpzdHls
ZUZvclNlbGVjCiAgICAgICAgIHJldHVybiBub2RlLT5yZW5kZXJlcigpLT5zdHlsZSgpOwogCiAg
ICAgaW50IGV4Y2VwdGlvbkNvZGUgPSAwOwotICAgIEVsZW1lbnRJbXBsICpzdHlsZUVsZW1lbnQg
PSB4bWxEb2NJbXBsKCktPmNyZWF0ZUhUTUxFbGVtZW50KCJzcGFuIiwgZXhjZXB0aW9uQ29kZSk7
CisgICAgRWxlbWVudEltcGwgKnN0eWxlRWxlbWVudCA9IHhtbERvY0ltcGwoKS0+Y3JlYXRlRWxl
bWVudE5TKFhIVE1MX05BTUVTUEFDRSwgInNwYW4iLCBleGNlcHRpb25Db2RlKTsKICAgICBBU1NF
UlQoZXhjZXB0aW9uQ29kZSA9PSAwKTsKIAogICAgIHN0eWxlRWxlbWVudC0+cmVmKCk7CkBAIC0z
NzAzLDcgKzM2NjksNyBAQCB2b2lkIEtXUUtIVE1MUGFydDo6c2V0U2VsZWN0aW9uRnJvbU5vbmUo
CiAgICAgICAgIHdoaWxlIChub2RlKSB7CiAgICAgICAgICAgICAvLyBMb29rIGZvciBhIGJsb2Nr
IGZsb3csIGJ1dCBza2lwIG92ZXIgdGhlIEhUTUwgZWxlbWVudCwgc2luY2Ugd2UgcmVhbGx5CiAg
ICAgICAgICAgICAvLyB3YW50IHRvIGdldCBhdCBsZWFzdCBhcyBmYXIgYXMgdGhlIHRoZSBCT0RZ
IGVsZW1lbnQgaW4gYSBkb2N1bWVudC4KLSAgICAgICAgICAgIGlmIChub2RlLT5pc0Jsb2NrRmxv
dygpICYmIG5vZGUtPmlkZW50aWZpZXIoKSAhPSBJRF9IVE1MKQorICAgICAgICAgICAgaWYgKG5v
ZGUtPmlzQmxvY2tGbG93KCkgJiYgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omh0bWwoKSkp
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBub2RlID0gbm9kZS0+dHJhdmVy
c2VOZXh0Tm9kZSgpOwogICAgICAgICB9CkluZGV4OiBrd3EvV2ViQ29yZUJyaWRnZS5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3EvV2ViQ29yZUJyaWRnZS5tbSx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zOTYKZGlmZiAtdSAtcCAtcjEuMzk2IGt3cS9XZWJDb3Jl
QnJpZGdlLm1tCi0tLSBrd3EvV2ViQ29yZUJyaWRnZS5tbQkxNCBKdW4gMjAwNSAwMDoyMzo0NSAt
MDAwMAkxLjM5NgorKysga3dxL1dlYkNvcmVCcmlkZ2UubW0JMjMgSnVuIDIwMDUgMjE6NTM6MTIg
LTAwMDAKQEAgLTM5LDcgKzM5LDYgQEAKICNpbXBvcnQgImh0bWxfaW1hZ2VpbXBsLmgiCiAjaW1w
b3J0ICJodG1sYXR0cnMuaCIKICNpbXBvcnQgImh0bWxlZGl0aW5nLmgiCi0jaW1wb3J0ICJodG1s
dGFncy5oIgogI2ltcG9ydCAia2h0bWxfcGFydC5oIgogI2ltcG9ydCAia2h0bWx2aWV3LmgiCiAj
aW1wb3J0ICJranNfcHJveHkuaCIKQEAgLTY3LDcgKzY2LDYgQEAKICNpbXBvcnQgIktXUUFzc2Vy
dGlvbnMuaCIKICNpbXBvcnQgIktXUUNoYXJzZXRzLmgiCiAjaW1wb3J0ICJLV1FDbGlwYm9hcmQu
aCIKLSNpbXBvcnQgIktXUURPTU5vZGUuaCIKICNpbXBvcnQgIktXUUVkaXRDb21tYW5kLmgiCiAj
aW1wb3J0ICJLV1FGb250LmgiCiAjaW1wb3J0ICJLV1FGb3VuZGF0aW9uRXh0cmFzLmgiCkBAIC0x
MDAsNiArOTgsNyBAQCB1c2luZyBET006OkhUTUxGb3JtRWxlbWVudEltcGw7CiB1c2luZyBET006
OkhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsOwogdXNpbmcgRE9NOjpIVE1MSW1hZ2VFbGVtZW50
SW1wbDsKIHVzaW5nIERPTTo6SFRNTElucHV0RWxlbWVudEltcGw7Cit1c2luZyBET006OkhUTUxO
YW1lczsKIHVzaW5nIERPTTo6Tm9kZUltcGw7CiB1c2luZyBET006OlBvc2l0aW9uOwogdXNpbmcg
RE9NOjpSYW5nZUltcGw7CkBAIC05MTMsNyArOTEyLDcgQEAgc3RhdGljIE5TVmlldyAqdmlld0Zv
ckVsZW1lbnQoRWxlbWVudEltcAogc3RhdGljIEhUTUxJbnB1dEVsZW1lbnRJbXBsICppbnB1dEVs
ZW1lbnRGcm9tRE9NRWxlbWVudChET01FbGVtZW50ICplbGVtZW50KQogewogICAgIE5vZGVJbXBs
ICpub2RlID0gW2VsZW1lbnQgX25vZGVJbXBsXTsKLSAgICBpZiAobm9kZSAmJiBpZEZyb21Ob2Rl
KG5vZGUpID09IElEX0lOUFVUKSB7CisgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjppbnB1dCgpKSkgewogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVu
dEltcGwgKj4obm9kZSk7CiAgICAgfQogICAgIHJldHVybiBuaWw7CkBAIC05MjYsNyArOTI1LDcg
QEAgc3RhdGljIEhUTUxGb3JtRWxlbWVudEltcGwgKmZvcm1FbGVtZW50RgogICAgIC8vIG1hcHMu
Z29vZ2xlLmNvbSBjcmFzaGVzIG90aGVyd2lzZSBiZWNhdXNlIGl0IGlzIGFuIHhzbHQgZmlsZQog
ICAgIC8vIHRoYXQgY29udGFpbnMgPGZvcm0+IGVsZW1lbnRzIHRoYXQgYXJlbid0IGluIGFueSBu
YW1lc3BhY2UsIHNvCiAgICAgLy8gdGhleSBjb21lIG91dCBhcyBnZW5lcmljIENNTCBlbGVtZW50
cwotICAgIGlmIChub2RlICYmIG5vZGUtPmlzSFRNTEVsZW1lbnQoKSAmJiBpZEZyb21Ob2RlKG5v
ZGUpID09IElEX0ZPUk0pIHsKKyAgICBpZiAobm9kZSAmJiBub2RlLT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6Zm9ybSgpKSkgewogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVt
ZW50SW1wbCAqPihub2RlKTsKICAgICB9CiAgICAgcmV0dXJuIG5pbDsKQEAgLTEwOTYsNyArMTA5
NSw3IEBAIHN0YXRpYyBIVE1MRm9ybUVsZW1lbnRJbXBsICpmb3JtRWxlbWVudEYKICAgICAKICAg
ICAgICAgICAgIC8vIEZJWE1FOiBDb2RlIGNvcGllZCBmcm9tIFJlbmRlckltYWdlOjp1cGRhdGVG
cm9tRWxlbWVudDsgc2hvdWxkIHNoYXJlLgogICAgICAgICAgICAgRE9NU3RyaW5nIGF0dHI7Ci0g
ICAgICAgICAgICBpZiAoaWRGcm9tTm9kZShpKSA9PSBJRF9PQkpFQ1QpIHsKKyAgICAgICAgICAg
IGlmIChpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b2JqZWN0KCkpKSB7CiAgICAgICAgICAgICAg
ICAgYXR0ciA9IGktPmdldEF0dHJpYnV0ZShBVFRSX0RBVEEpOwogICAgICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgICAgICBhdHRyID0gaS0+Z2V0QXR0cmlidXRlKEFUVFJfU1JDKTsKQEAg
LTExMDgsOSArMTEwNyw5IEBAIHN0YXRpYyBIVE1MRm9ybUVsZW1lbnRJbXBsICpmb3JtRWxlbWVu
dEYKICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gRklYTUU6IENvZGUgY29waWVkIGZyb20g
UmVuZGVySW1hZ2U6OnVwZGF0ZUZyb21FbGVtZW50OyBzaG91bGQgc2hhcmUuCiAgICAgICAgICAg
ICBET01TdHJpbmcgYWx0OwotICAgICAgICAgICAgaWYgKGlkRnJvbU5vZGUoaSkgPT0gSURfSU5Q
VVQpCisgICAgICAgICAgICBpZiAoaS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmlucHV0KCkpKQog
ICAgICAgICAgICAgICAgIGFsdCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnRJbXBsICo+
KGkpLT5hbHRUZXh0KCk7Ci0gICAgICAgICAgICBlbHNlIGlmIChpZEZyb21Ob2RlKGkpID09IElE
X0lNRykKKyAgICAgICAgICAgIGVsc2UgaWYgKGktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppbWco
KSkpCiAgICAgICAgICAgICAgICAgYWx0ID0gc3RhdGljX2Nhc3Q8SFRNTEltYWdlRWxlbWVudElt
cGwgKj4oaSktPmFsdFRleHQoKTsKICAgICAgICAgICAgIGlmICghYWx0LmlzTnVsbCgpKSB7CiAg
ICAgICAgICAgICAgICAgUVN0cmluZyBhbHRUZXh0ID0gYWx0LnN0cmluZygpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>2613</attachid>
            <date>2005-06-23 20:28:03 -0700</date>
            <delta_ts>2005-07-05 16:41:31 -0700</delta_ts>
            <desc>Patch that compiles and works (mostly).</desc>
            <filename>patch-10.txt</filename>
            <type>text/plain</type>
            <size>687949</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IEZvcndhcmRpbmdIZWFkZXJzL21pc2MvaHRtbHRhZ3MuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiBGb3J3YXJkaW5nSGVhZGVycy9taXNjL2h0bWx0YWdzLmgKZGlmZiAtTiBGb3J3YXJkaW5n
SGVhZGVycy9taXNjL2h0bWx0YWdzLmgKLS0tIEZvcndhcmRpbmdIZWFkZXJzL21pc2MvaHRtbHRh
Z3MuaAkyMyBTZXAgMjAwNCAwNjoyMToyNyAtMDAwMAkxLjIKKysrIC9kZXYvbnVsbAkxIEphbiAx
OTcwIDAwOjAwOjAwIC0wMDAwCkBAIC0xICswLDAgQEAKLSNpbXBvcnQgPGh0bWx0YWdzLmg+Cklu
ZGV4OiBXZWJDb3JlLnBicHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
L2N2cy9yb290L1dlYkNvcmUvV2ViQ29yZS5wYnByb2ovcHJvamVjdC5wYnhwcm9qLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjU1NgpkaWZmIC11IC1wIC1yMS41NTYgV2ViQ29yZS5wYnByb2ovcHJv
amVjdC5wYnhwcm9qCi0tLSBXZWJDb3JlLnBicHJvai9wcm9qZWN0LnBieHByb2oJMjIgSnVuIDIw
MDUgMTU6MzE6NTcgLTAwMDAJMS41NTYKKysrIFdlYkNvcmUucGJwcm9qL3Byb2plY3QucGJ4cHJv
agkyNCBKdW4gMjAwNSAwMzowOToyOSAtMDAwMApAQCAtMjE0LDMyICsyMTQsNiBAQAogLy8yRDIK
IC8vMkQzCiAvLzJENAotLy8zNTAKLS8vMzUxCi0vLzM1MgotLy8zNTMKLS8vMzU0Ci0JCTM1NEYy
NDg5MDJFRTI4NTkwQUNBMkFDQSA9IHsKLQkJCWZpbGVFbmNvZGluZyA9IDMwOwotCQkJaXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsKLQkJCWxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
Ci0JCQlwYXRoID0gS1dRRE9NTm9kZS5oOwotCQkJcmVmVHlwZSA9IDQ7Ci0JCQlzb3VyY2VUcmVl
ID0gIjxncm91cD4iOwotCQl9OwotCQkzNTRGMjQ4QTAyRUUyODU5MEFDQTJBQ0EgPSB7Ci0JCQlm
aWxlRW5jb2RpbmcgPSAzMDsKLQkJCWlzYSA9IFBCWEZpbGVSZWZlcmVuY2U7Ci0JCQlsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsKLQkJCXBhdGggPSBLV1FET01Ob2RlLmNw
cDsKLQkJCXJlZlR5cGUgPSA0OwotCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsKLS8v
MzUwCi0vLzM1MQotLy8zNTIKLS8vMzUzCi0vLzM1NAogLy81MTAKIC8vNTExCiAvLzUxMgpAQCAt
MzY3LDYgKzM0MSwzNCBAQAogCQkJc2V0dGluZ3MgPSB7CiAJCQl9OwogCQl9OworCQk1NTM5MDEw
RDA4NkEyRjczMDAxRUQ3RkUgPSB7CisJCQlmaWxlRW5jb2RpbmcgPSAzMDsKKwkJCWlzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7CisJCQlsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOwor
CQkJcGF0aCA9IGh0bWxmYWN0b3J5Lmg7CisJCQlyZWZUeXBlID0gNDsKKwkJCXNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7CisJCX07CisJCTU1MzkwMTBFMDg2QTJGNzMwMDFFRDdGRSA9IHsKKwkJCWZp
bGVSZWYgPSA1NTM5MDEwRDA4NkEyRjczMDAxRUQ3RkU7CisJCQlpc2EgPSBQQlhCdWlsZEZpbGU7
CisJCQlzZXR0aW5ncyA9IHsKKwkJCX07CisJCX07CisJCTU1MzkwMTVGMDg2QTMzMkUwMDFFRDdG
RSA9IHsKKwkJCWZpbGVFbmNvZGluZyA9IDMwOworCQkJaXNhID0gUEJYRmlsZVJlZmVyZW5jZTsK
KwkJCWxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOworCQkJcGF0aCA9IGh0
bWxmYWN0b3J5LmNwcDsKKwkJCXJlZlR5cGUgPSA0OworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsKKwkJfTsKKwkJNTUzOTAxNjAwODZBMzMyRTAwMUVEN0ZFID0geworCQkJZmlsZVJlZiA9IDU1
MzkwMTVGMDg2QTMzMkUwMDFFRDdGRTsKKwkJCWlzYSA9IFBCWEJ1aWxkRmlsZTsKKwkJCXNldHRp
bmdzID0geworCQkJfTsKKwkJfTsKIAkJNTU5OThBNTcwNTJCNTk4RjAwMTdBNkMxID0gewogCQkJ
Y2hpbGRyZW4gPSAoCiAJCQkJNTU5OThBNUEwNTJCNTlDQzAwMTdBNkMxLApAQCAtMTg3MSwyNCAr
MTg3Myw2IEBACiAJCQlzaGVsbFBhdGggPSAvYmluL3NoOwogCQkJc2hlbGxTY3JpcHQgPSAiXCIk
Q1JFQVRFX0hBU0hfVEFCTEVcIiBraHRtbC9lY21hL3htbHNlcmlhbGl6ZXIuY3BwID4gXCIkREVS
SVZFRF9GSUxFX0RJUi94bWxzZXJpYWxpemVyLmx1dC5oXCIiOwogCQl9OwotCQk5MzJGQzFDMDA4
MjRBQkI5MDA1QjNDNzUgPSB7Ci0JCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwotCQkJ
ZmlsZXMgPSAoCi0JCQkpOwotCQkJaW5wdXRQYXRocyA9ICgKLQkJCQlraHRtbC9taXNjL21ha2V0
YWdzLAotCQkJCWtodG1sL21pc2MvaHRtbHRhZ3MuaW4sCi0JCQkpOwotCQkJaXNhID0gUEJYU2hl
bGxTY3JpcHRCdWlsZFBoYXNlOwotCQkJbmFtZSA9IGh0bWx0YWdzLmMvaDsKLQkJCW91dHB1dFBh
dGhzID0gKAotCQkJCSIkKERFUklWRURfRklMRV9ESVIpL2h0bWx0YWdzLmMiLAotCQkJCSIkKERF
UklWRURfRklMRV9ESVIpL2h0bWx0YWdzLmgiLAotCQkJKTsKLQkJCXJ1bk9ubHlGb3JEZXBsb3lt
ZW50UG9zdHByb2Nlc3NpbmcgPSAwOwotCQkJc2hlbGxQYXRoID0gL2Jpbi9zaDsKLQkJCXNoZWxs
U2NyaXB0ID0gImNhdCBraHRtbC9taXNjL2h0bWx0YWdzLmluID4gXCIkREVSSVZFRF9GSUxFX0RJ
Ui9odG1sdGFncy5pblwiXG5jZCBcIiRERVJJVkVEX0ZJTEVfRElSXCJcbnBlcmwgXCIkU1JDUk9P
VC9raHRtbC9taXNjL21ha2V0YWdzXCIiOwotCQl9OwogCQk5MzJGQzI5NTA4MjRCMzQ1MDA1QjND
NzUgPSB7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAoCkBA
IC0yMzA3LDcgKzIyOTEsNiBAQAogCQkJCTkzMkZDMkJDMDgyNEI0MjIwMDVCM0M3NSwKIAkJCQk5
MzJGQzBCNzA4MjRBMTc1MDA1QjNDNzUsCiAJCQkJOTMyRkMyOTUwODI0QjM0NTAwNUIzQzc1LAot
CQkJCTkzMkZDMUMwMDgyNEFCQjkwMDVCM0M3NSwKIAkJCQk5M0VBNjg2QzA4MjQ5QUY0MDA2ODdG
NTYsCiAJCQkJOTMyRkMxMEIwODI0QTRENDAwNUIzQzc1LAogCQkJCTkzMkZDMTYxMDgyNEE4RTMw
MDVCM0M3NSwKQEAgLTI0MTUsNyArMjM5OCw2IEBACiAJCQkJOTNGMTk4REMwODI0NUU1OTAwMUU5
QUJDLAogCQkJCTkzRjE5OERFMDgyNDVFNTkwMDFFOUFCQywKIAkJCQk5M0YxOThFMDA4MjQ1RTU5
MDAxRTlBQkMsCi0JCQkJOTNGMTk4RTIwODI0NUU1OTAwMUU5QUJDLAogCQkJCTkzRjE5OEUzMDgy
NDVFNTkwMDFFOUFCQywKIAkJCQk5M0YxOThFNDA4MjQ1RTU5MDAxRTlBQkMsCiAJCQkJOTNGMTk4
RTUwODI0NUU1OTAwMUU5QUJDLApAQCAtMjQ5Miw3ICsyNDc0LDYgQEAKIAkJCQk5M0YxOTkyRTA4
MjQ1RTU5MDAxRTlBQkMsCiAJCQkJOTNGMTk5MkYwODI0NUU1OTAwMUU5QUJDLAogCQkJCTkzRjE5
OTMwMDgyNDVFNTkwMDFFOUFCQywKLQkJCQk5M0YxOTkzMTA4MjQ1RTU5MDAxRTlBQkMsCiAJCQkJ
OTNGMTk5MzIwODI0NUU1OTAwMUU5QUJDLAogCQkJCTkzRjE5OTMzMDgyNDVFNTkwMDFFOUFCQywK
IAkJCQk5M0YxOTkzNDA4MjQ1RTU5MDAxRTlBQkMsCkBAIC0yNjQ3LDcgKzI2MjgsNiBAQAogCQkJ
CTkzRjE5OUM5MDgyNDVFNTkwMDFFOUFCQywKIAkJCQk5M0YxOTlDQTA4MjQ1RTU5MDAxRTlBQkMs
CiAJCQkJOTNGMTk5Q0IwODI0NUU1OTAwMUU5QUJDLAotCQkJCTkzRjE5OUNDMDgyNDVFNTkwMDFF
OUFCQywKIAkJCQk5M0YxOTlDRTA4MjQ1RTU5MDAxRTlBQkMsCiAJCQkJOTNGMTk5Q0YwODI0NUU1
OTAwMUU5QUJDLAogCQkJCTkzRjE5OUQwMDgyNDVFNTkwMDFFOUFCQywKQEAgLTI3MjQsNiArMjcw
NCw3IEBACiAJCQkJMUE2OUQzODEwODU2Mjc0MTAwMDk4ODBELAogCQkJCTU1MEEwQkNBMDg1RjYw
MzkwMDczNTNENiwKIAkJCQk1NTBBMEJDRTA4NUY2MDREMDA3MzUzRDYsCisJCQkJNTUzOTAxMEUw
ODZBMkY3MzAwMUVEN0ZFLAogCQkJKTsKIAkJCWlzYSA9IFBCWEhlYWRlcnNCdWlsZFBoYXNlOwog
CQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CkBAIC0yOTY4LDEyICsy
OTQ5LDYgQEAKIAkJCXNldHRpbmdzID0gewogCQkJfTsKIAkJfTsKLQkJOTNGMTk4RTIwODI0NUU1
OTAwMUU5QUJDID0gewotCQkJZmlsZVJlZiA9IEY1MjNEMjM2MDJERTQzOTYwMTg2MzVDQTsKLQkJ
CWlzYSA9IFBCWEJ1aWxkRmlsZTsKLQkJCXNldHRpbmdzID0gewotCQkJfTsKLQkJfTsKIAkJOTNG
MTk4RTMwODI0NUU1OTAwMUU5QUJDID0gewogCQkJZmlsZVJlZiA9IEY1MjNEMjM4MDJERTQzOTYw
MTg2MzVDQTsKIAkJCWlzYSA9IFBCWEJ1aWxkRmlsZTsKQEAgLTM0MzAsMTIgKzM0MDUsNiBAQAog
CQkJc2V0dGluZ3MgPSB7CiAJCQl9OwogCQl9OwotCQk5M0YxOTkzMTA4MjQ1RTU5MDAxRTlBQkMg
PSB7Ci0JCQlmaWxlUmVmID0gMzU0RjI0ODkwMkVFMjg1OTBBQ0EyQUNBOwotCQkJaXNhID0gUEJY
QnVpbGRGaWxlOwotCQkJc2V0dGluZ3MgPSB7Ci0JCQl9OwotCQl9OwogCQk5M0YxOTkzMjA4MjQ1
RTU5MDAxRTlBQkMgPSB7CiAJCQlmaWxlUmVmID0gRjU4Nzg2ODUwMkRFM0I4NjAxRUE0MTIyOwog
CQkJaXNhID0gUEJYQnVpbGRGaWxlOwpAQCAtNDM5OCwxMiArNDM2Nyw2IEBACiAJCQlzZXR0aW5n
cyA9IHsKIAkJCX07CiAJCX07Ci0JCTkzRjE5OUNDMDgyNDVFNTkwMDFFOUFCQyA9IHsKLQkJCWZp
bGVSZWYgPSBCQzdGREUzMjA1QzFEOUFCMDA3MEE5MDI7Ci0JCQlpc2EgPSBQQlhCdWlsZEZpbGU7
Ci0JCQlzZXR0aW5ncyA9IHsKLQkJCX07Ci0JCX07CiAJCTkzRjE5OUNFMDgyNDVFNTkwMDFFOUFC
QyA9IHsKIAkJCWZpbGVSZWYgPSBCQzNCMzY0NjA1QzlENUUyMDBFNDI5MDI7CiAJCQlpc2EgPSBQ
QlhCdWlsZEZpbGU7CkBAIC00OTM4LDcgKzQ5MDEsNiBAQAogCQkJCTkzRjE5QThCMDgyNDVFNTkw
MDFFOUFCQywKIAkJCQk5M0YxOUE4QzA4MjQ1RTU5MDAxRTlBQkMsCiAJCQkJOTNGMTlBOEQwODI0
NUU1OTAwMUU5QUJDLAotCQkJCTkzRjE5QThFMDgyNDVFNTkwMDFFOUFCQywKIAkJCQk5M0YxOUE4
RjA4MjQ1RTU5MDAxRTlBQkMsCiAJCQkJOTNGMTlBOTAwODI0NUU1OTAwMUU5QUJDLAogCQkJCTkz
RjE5QTkxMDgyNDVFNTkwMDFFOUFCQywKQEAgLTQ5OTEsNyArNDk1Myw2IEBACiAJCQkJOTNGMTlB
QzAwODI0NUU1OTAwMUU5QUJDLAogCQkJCTkzRjE5QUMxMDgyNDVFNTkwMDFFOUFCQywKIAkJCQk5
M0YxOUFDMjA4MjQ1RTU5MDAxRTlBQkMsCi0JCQkJOTNGMTlBQzMwODI0NUU1OTAwMUU5QUJDLAog
CQkJCTkzRjE5QUM0MDgyNDVFNTkwMDFFOUFCQywKIAkJCQk5M0YxOUFDNTA4MjQ1RTU5MDAxRTlB
QkMsCiAJCQkJOTNGMTlBQzYwODI0NUU1OTAwMUU5QUJDLApAQCAtNTAzMyw3ICs0OTk0LDYgQEAK
IAkJCQk5M0YxOUFFQzA4MjQ1RTU5MDAxRTlBQkMsCiAJCQkJOTNGMTlBRUQwODI0NUU1OTAwMUU5
QUJDLAogCQkJCTkzRjE5QUVFMDgyNDVFNTkwMDFFOUFCQywKLQkJCQk5M0YxOUFFRjA4MjQ1RTU5
MDAxRTlBQkMsCiAJCQkJOTNGMTlBRjAwODI0NUU1OTAwMUU5QUJDLAogCQkJCTkzRjE5QUYxMDgy
NDVFNTkwMDFFOUFCQywKIAkJCQk5M0YxOUFGMjA4MjQ1RTU5MDAxRTlBQkMsCkBAIC01MDk3LDYg
KzUwNTcsNyBAQAogCQkJCTFBNjlEMzgyMDg1NjI3NDEwMDA5ODgwRCwKIAkJCQk1NTBBMEJDOTA4
NUY2MDM5MDA3MzUzRDYsCiAJCQkJNTUwQTBCQ0QwODVGNjA0RDAwNzM1M0Q2LAorCQkJCTU1Mzkw
MTYwMDg2QTMzMkUwMDFFRDdGRSwKIAkJCSk7CiAJCQlpc2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFz
ZTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwpAQCAtNTczNywx
MiArNTY5OCw2IEBACiAJCQlzZXR0aW5ncyA9IHsKIAkJCX07CiAJCX07Ci0JCTkzRjE5QThFMDgy
NDVFNTkwMDFFOUFCQyA9IHsKLQkJCWZpbGVSZWYgPSBGNTIzRDIzNTAyREU0Mzk2MDE4NjM1Q0E7
Ci0JCQlpc2EgPSBQQlhCdWlsZEZpbGU7Ci0JCQlzZXR0aW5ncyA9IHsKLQkJCX07Ci0JCX07CiAJ
CTkzRjE5QThGMDgyNDVFNTkwMDFFOUFCQyA9IHsKIAkJCWZpbGVSZWYgPSBGNTIzRDIzNzAyREU0
Mzk2MDE4NjM1Q0E7CiAJCQlpc2EgPSBQQlhCdWlsZEZpbGU7CkBAIC02MDU1LDEyICs2MDEwLDYg
QEAKIAkJCXNldHRpbmdzID0gewogCQkJfTsKIAkJfTsKLQkJOTNGMTlBQzMwODI0NUU1OTAwMUU5
QUJDID0gewotCQkJZmlsZVJlZiA9IDM1NEYyNDhBMDJFRTI4NTkwQUNBMkFDQTsKLQkJCWlzYSA9
IFBCWEJ1aWxkRmlsZTsKLQkJCXNldHRpbmdzID0gewotCQkJfTsKLQkJfTsKIAkJOTNGMTlBQzQw
ODI0NUU1OTAwMUU5QUJDID0gewogCQkJZmlsZVJlZiA9IEY1MTE3QkNBMDJGOUZGRUYwMTg2MzVD
RTsKIAkJCWlzYSA9IFBCWEJ1aWxkRmlsZTsKQEAgLTYzMDcsMTIgKzYyNTYsNiBAQAogCQkJc2V0
dGluZ3MgPSB7CiAJCQl9OwogCQl9OwotCQk5M0YxOUFFRjA4MjQ1RTU5MDAxRTlBQkMgPSB7Ci0J
CQlmaWxlUmVmID0gQkM3RkRFMzEwNUMxRDlBQjAwNzBBOTAyOwotCQkJaXNhID0gUEJYQnVpbGRG
aWxlOwotCQkJc2V0dGluZ3MgPSB7Ci0JCQl9OwotCQl9OwogCQk5M0YxOUFGMDA4MjQ1RTU5MDAx
RTlBQkMgPSB7CiAJCQlmaWxlUmVmID0gQkMzQjM2NDUwNUM5RDVFMjAwRTQyOTAyOwogCQkJaXNh
ID0gUEJYQnVpbGRGaWxlOwpAQCAtNjg1NiwyMiArNjc5OSw2IEBACiAJCQlyZWZUeXBlID0gNDsK
IAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07Ci0JCUJDN0ZERTMxMDVDMUQ5QUIwMDcw
QTkwMiA9IHsKLQkJCWZpbGVFbmNvZGluZyA9IDMwOwotCQkJaXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsKLQkJCWxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOwotCQkJcGF0aCA9
IHhtbF9uYW1lc3BhY2VfdGFibGUuY3BwOwotCQkJcmVmVHlwZSA9IDQ7Ci0JCQlzb3VyY2VUcmVl
ID0gIjxncm91cD4iOwotCQl9OwotCQlCQzdGREUzMjA1QzFEOUFCMDA3MEE5MDIgPSB7Ci0JCQlm
aWxlRW5jb2RpbmcgPSAzMDsKLQkJCWlzYSA9IFBCWEZpbGVSZWZlcmVuY2U7Ci0JCQlsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOwotCQkJcGF0aCA9IHhtbF9uYW1lc3BhY2VfdGFi
bGUuaDsKLQkJCXJlZlR5cGUgPSA0OwotCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsK
IAkJQkM4MEE2OTMwNDY4Qjc4MTAwREJDQzlDID0gewogCQkJZmlsZUVuY29kaW5nID0gMzA7CiAJ
CQlpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOwpAQCAtNzQzMiw4ICs3MzU5LDYgQEAKIAkJCQkyRDkw
NjYwQzA2NjVEOTM3MDA2QjZGMUEsCiAJCQkJRjU4Nzg0Q0QwMkRFMzc1OTAxRUE0MTIyLAogCQkJ
CUY1ODc4NERBMDJERTM3NTkwMUVBNDEyMiwKLQkJCQkzNTRGMjQ4OTAyRUUyODU5MEFDQTJBQ0Es
Ci0JCQkJMzU0RjI0OEEwMkVFMjg1OTBBQ0EyQUNBLAogCQkJCTkzMUM4QTE2MDM4MDI4OEIwMDg2
MzVDRSwKIAkJCQk5MzFDOEExNzAzODAyODhCMDA4NjM1Q0UsCiAJCQkJQkVGN0VFQTAwNUZGOEYw
RDAwOTcxN0VFLApAQCAtODQwMiwyMiArODMyNyw2IEBACiAJCQlyZWZUeXBlID0gNDsKIAkJCXNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07Ci0JCUY1MjNEMjM1MDJERTQzOTYwMTg2MzVDQSA9
IHsKLQkJCWZpbGVFbmNvZGluZyA9IDMwOwotCQkJaXNhID0gUEJYRmlsZVJlZmVyZW5jZTsKLQkJ
CWxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOwotCQkJcGF0aCA9IGR0ZC5j
cHA7Ci0JCQlyZWZUeXBlID0gNDsKLQkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7Ci0JCX07Ci0J
CUY1MjNEMjM2MDJERTQzOTYwMTg2MzVDQSA9IHsKLQkJCWZpbGVFbmNvZGluZyA9IDMwOwotCQkJ
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsKLQkJCWxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7Ci0JCQlwYXRoID0gZHRkLmg7Ci0JCQlyZWZUeXBlID0gNDsKLQkJCXNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7Ci0JCX07CiAJCUY1MjNEMjM3MDJERTQzOTYwMTg2MzVDQSA9IHsKIAkJCWZp
bGVFbmNvZGluZyA9IDMwOwogCQkJaXNhID0gUEJYRmlsZVJlZmVyZW5jZTsKQEAgLTg2NDYsOCAr
ODU1NSw4IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJCQk1NTBBMEJDQjA4NUY2MDREMDA3MzUzRDYs
CiAJCQkJNTUwQTBCQ0MwODVGNjA0RDAwNzM1M0Q2LAotCQkJCUY1MjNEMjM1MDJERTQzOTYwMTg2
MzVDQSwKLQkJCQlGNTIzRDIzNjAyREU0Mzk2MDE4NjM1Q0EsCisJCQkJNTUzOTAxMEQwODZBMkY3
MzAwMUVEN0ZFLAorCQkJCTU1MzkwMTVGMDg2QTMzMkUwMDFFRDdGRSwKIAkJCQlGNTIzRDIzNzAy
REU0Mzk2MDE4NjM1Q0EsCiAJCQkJRjUyM0QyMzgwMkRFNDM5NjAxODYzNUNBLAogCQkJCUY1MjNE
MjM5MDJERTQzOTYwMTg2MzVDQSwKQEAgLTkzNTQsOCArOTI2Myw2IEBACiAJCQkJRjUyM0QzMDYw
MkRFNDQ3NjAxODYzNUNBLAogCQkJCUY1MjNEMzA3MDJERTQ0NzYwMTg2MzVDQSwKIAkJCQlGNTIz
RDMwODAyREU0NDc2MDE4NjM1Q0EsCi0JCQkJQkM3RkRFMzEwNUMxRDlBQjAwNzBBOTAyLAotCQkJ
CUJDN0ZERTMyMDVDMUQ5QUIwMDcwQTkwMiwKIAkJCQlGNTIzRDMwOTAyREU0NDc2MDE4NjM1Q0Es
CiAJCQkJRjUyM0QzMEEwMkRFNDQ3NjAxODYzNUNBLAogCQkJKTsKSW5kZXg6IGtodG1sL2todG1s
X3BhcnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2to
dG1sX3BhcnQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjMyNApkaWZmIC11IC1wIC1yMS4z
MjQga2h0bWwva2h0bWxfcGFydC5jcHAKLS0tIGtodG1sL2todG1sX3BhcnQuY3BwCTE0IEp1biAy
MDA1IDAwOjIzOjQ0IC0wMDAwCTEuMzI0CisrKyBraHRtbC9raHRtbF9wYXJ0LmNwcAkyNCBKdW4g
MjAwNSAwMzowOTozNCAtMDAwMApAQCAtNTcyNiw3ICs1NzI2LDcgQEAgQ1NTQ29tcHV0ZWRTdHls
ZURlY2xhcmF0aW9uSW1wbCAqS0hUTUxQYQogICAgIGludCBleGNlcHRpb25Db2RlID0gMDsKIAog
ICAgIGlmIChkLT5tX3R5cGluZ1N0eWxlKSB7Ci0gICAgICAgIHN0eWxlRWxlbWVudCA9IHhtbERv
Y0ltcGwoKS0+Y3JlYXRlSFRNTEVsZW1lbnQoInNwYW4iLCBleGNlcHRpb25Db2RlKTsKKyAgICAg
ICAgc3R5bGVFbGVtZW50ID0geG1sRG9jSW1wbCgpLT5jcmVhdGVFbGVtZW50TlMoWEhUTUxfTkFN
RVNQQUNFLCAic3BhbiIsIGV4Y2VwdGlvbkNvZGUpOwogICAgICAgICBhc3NlcnQoZXhjZXB0aW9u
Q29kZSA9PSAwKTsKIAogICAgICAgICBzdHlsZUVsZW1lbnQtPnJlZigpOwpJbmRleDoga2h0bWwv
a2h0bWx2aWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRt
bC9raHRtbHZpZXcuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEzMwpkaWZmIC11IC1wIC1y
MS4xMzMga2h0bWwva2h0bWx2aWV3LmNwcAotLS0ga2h0bWwva2h0bWx2aWV3LmNwcAkxMSBNYXkg
MjAwNSAwMDo1ODoyNyAtMDAwMAkxLjEzMworKysga2h0bWwva2h0bWx2aWV3LmNwcAkyNCBKdW4g
MjAwNSAwMzowOTozNSAtMDAwMApAQCAtNjA3LDEyICs2MDcsMTIgQEAgdm9pZCBLSFRNTFZpZXc6
OmxheW91dCgpCiAgICAgaWYgKGRvY3VtZW50LT5pc0hUTUxEb2N1bWVudCgpKSB7CiAgICAgICAg
IE5vZGVJbXBsICpib2R5ID0gc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50SW1wbCo+KGRvY3VtZW50
KS0+Ym9keSgpOwogICAgICAgICBpZiAoYm9keSAmJiBib2R5LT5yZW5kZXJlcigpKSB7Ci0gICAg
ICAgICAgICBpZiAoYm9keS0+aWQoKSA9PSBJRF9GUkFNRVNFVCkgeworICAgICAgICAgICAgaWYg
KGJvZHktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpmcmFtZXNldCgpKSkgewogICAgICAgICAgICAg
ICAgIGJvZHktPnJlbmRlcmVyKCktPnNldE5lZWRzTGF5b3V0KHRydWUpOwogICAgICAgICAgICAg
ICAgIHZNb2RlID0gQWx3YXlzT2ZmOwogICAgICAgICAgICAgICAgIGhNb2RlID0gQWx3YXlzT2Zm
OwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoYm9keS0+aWQoKSA9PSBJRF9C
T0RZKSB7CisgICAgICAgICAgICBlbHNlIGlmIChib2R5LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
Ym9keSgpKSkgewogICAgICAgICAgICAgICAgIFJlbmRlck9iamVjdCogbyA9IChyb290UmVuZGVy
ZXItPnN0eWxlKCktPm92ZXJmbG93KCkgPT0gT1ZJU0lCTEUpID8gYm9keS0+cmVuZGVyZXIoKSA6
IHJvb3RSZW5kZXJlcjsKICAgICAgICAgICAgICAgICBhcHBseU92ZXJmbG93VG9WaWV3cG9ydChv
LCBoTW9kZSwgdk1vZGUpOyAvLyBPbmx5IGFwcGxpZXMgdG8gSFRNTCBVQXMsIG5vdCB0byBYTUwv
WEhUTUwgVUFzCiAgICAgICAgICAgICB9CkBAIC04NzcsMTAgKzg3Nyw3IEBAIHZvaWQgS0hUTUxW
aWV3Ojp2aWV3cG9ydE1vdXNlRG91YmxlQ2xpY2sKIAogc3RhdGljIGJvb2wgaXNTdWJtaXRJbWFn
ZShET006Ok5vZGVJbXBsICpub2RlKQogewotICAgIHJldHVybiBub2RlCi0gICAgICAgICYmIG5v
ZGUtPmlzSFRNTEVsZW1lbnQoKQotICAgICAgICAmJiBub2RlLT5pZCgpID09IElEX0lOUFVUCi0g
ICAgICAgICYmIHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnRJbXBsKj4obm9kZSktPmlucHV0
VHlwZSgpID09IEhUTUxJbnB1dEVsZW1lbnRJbXBsOjpJTUFHRTsKKyAgICByZXR1cm4gbm9kZSAm
JiBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW5wdXQoKSkgJiYgc3RhdGljX2Nhc3Q8SFRN
TElucHV0RWxlbWVudEltcGwqPihub2RlKS0+aW5wdXRUeXBlKCkgPT0gSFRNTElucHV0RWxlbWVu
dEltcGw6OklNQUdFOwogfQogCiB2b2lkIEtIVE1MVmlldzo6dmlld3BvcnRNb3VzZU1vdmVFdmVu
dCggUU1vdXNlRXZlbnQgKiBfbW91c2UgKQpJbmRleDoga2h0bWwvY3NzL2Nzc19iYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9jc3MvY3NzX2Jhc2Uu
Y3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE1CmRpZmYgLXUgLXAgLXIxLjE1IGtodG1sL2Nz
cy9jc3NfYmFzZS5jcHAKLS0tIGtodG1sL2Nzcy9jc3NfYmFzZS5jcHAJMTIgSnVuIDIwMDUgMDQ6
MDc6MzAgLTAwMDAJMS4xNQorKysga2h0bWwvY3NzL2Nzc19iYXNlLmNwcAkyNCBKdW4gMjAwNSAw
MzowOTozNiAtMDAwMApAQCAtOTMsOSArOTMsMTUgQEAgU3R5bGVMaXN0SW1wbDo6flN0eWxlTGlz
dEltcGwoKQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCitjb25zdCBRdWFsaWZpZWRO
YW1lJiBDU1NTZWxlY3Rvcjo6YW55VGFnTmFtZSgpCit7CisgICAgc3RhdGljIFF1YWxpZmllZE5h
bWUgYW55TmFtZShudWxsQXRvbSwgc3RhckF0b20sIHN0YXJBdG9tKTsKKyAgICByZXR1cm4gYW55
TmFtZTsKK30KKwogdm9pZCBDU1NTZWxlY3Rvcjo6cHJpbnQodm9pZCkKIHsKLSAgICBrZERlYnVn
KCA2MDgwICkgPDwgIltTZWxlY3RvcjogdGFnID0gIiA8PCAgICAgICB0YWcgPDwgIiwgYXR0ciA9
IFwiIiA8PCBhdHRyIDw8ICJcIiwgbWF0Y2ggPSBcIiIgPDwgbWF0Y2gKKyAgICBrZERlYnVnKCA2
MDgwICkgPDwgIltTZWxlY3RvcjogdGFnID0gIiA8PCAgICAgICB0YWcubG9jYWxOYW1lKCkuc3Ry
aW5nKCkgPDwgIiwgYXR0ciA9IFwiIiA8PCBhdHRyIDw8ICJcIiwgbWF0Y2ggPSBcIiIgPDwgbWF0
Y2gKIAkJICAgIDw8ICJcIiB2YWx1ZSA9IFwiIiA8PCB2YWx1ZS5zdHJpbmcoKS5sYXRpbjEoKSA8
PCAiXCIgcmVsYXRpb24gPSAiIDw8IChpbnQpcmVsYXRpb24KIAkJICAgIDw8ICJdIiA8PCBlbmRs
OwogICAgIGlmICggdGFnSGlzdG9yeSApCkBAIC0xMDcsNyArMTEzLDcgQEAgdW5zaWduZWQgaW50
IENTU1NlbGVjdG9yOjpzcGVjaWZpY2l0eSgpCiB7CiAgICAgLy8gRklYTUU6IFBzZXVkby1lbGVt
ZW50cyBhbmQgcHNldWRvLWNsYXNzZXMgZG8gbm90IGhhdmUgdGhlIHNhbWUgc3BlY2lmaWNpdHku
IFRoaXMgZnVuY3Rpb24KICAgICAvLyBpc24ndCBxdWl0ZSBjb3JyZWN0LgotICAgIGludCBzID0g
KChsb2NhbE5hbWVQYXJ0KHRhZykgPT0gYW55TG9jYWxOYW1lKSA/IDAgOiAxKTsKKyAgICBpbnQg
cyA9ICh0YWcubG9jYWxOYW1lKCkgPT0gc3RhckF0b20gPyAwIDogMSk7CiAgICAgc3dpdGNoKG1h
dGNoKQogICAgIHsKICAgICBjYXNlIElkOgpAQCAtMjQwLDYwICsyNDYsNTkgQEAgYm9vbCBDU1NT
ZWxlY3Rvcjo6b3BlcmF0b3IgPT0gKCBjb25zdCBDUwogCiBET01TdHJpbmcgQ1NTU2VsZWN0b3I6
OnNlbGVjdG9yVGV4dCgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IFN1cHBvcnQgbmFtZXNwYWNl
cyB3aGVuIGR1bXBpbmcgdGhlIHNlbGVjdG9yIHRleHQuICBUaGlzIHJlcXVpcmVzIHByZXNlcnZp
bmcKLSAgICAvLyB0aGUgb3JpZ2luYWwgbmFtZXNwYWNlIHByZWZpeCB1c2VkLiBVZ2guIC1kd2gK
KyAgICAvLyBGSVhNRTogU3VwcG9ydCBuYW1lc3BhY2VzIHdoZW4gZHVtcGluZyB0aGUgc2VsZWN0
b3IgdGV4dC4gLWR3aAogICAgIERPTVN0cmluZyBzdHI7CiAgICAgY29uc3QgQ1NTU2VsZWN0b3Iq
IGNzID0gdGhpczsKLSAgICBRX1VJTlQxNiB0YWcgPSBsb2NhbE5hbWVQYXJ0KGNzLT50YWcpOwot
ICAgIGlmICggdGFnID09IGFueUxvY2FsTmFtZSAmJiBjcy0+YXR0ciA9PSBBVFRSX0lEICYmIGNz
LT5tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6RXhhY3QgKQorICAgIGNvbnN0IEF0b21pY1N0cmluZyYg
bG9jYWxOYW1lID0gY3MtPnRhZy5sb2NhbE5hbWUoKTsKKyAgICBpZiAobG9jYWxOYW1lID09IHN0
YXJBdG9tICYmIGNzLT5hdHRyID09IEFUVFJfSUQgJiYgY3MtPm1hdGNoID09IENTU1NlbGVjdG9y
OjpFeGFjdCkKICAgICB7CiAgICAgICAgIHN0ciA9ICIjIjsKICAgICAgICAgc3RyICs9IGNzLT52
YWx1ZS5zdHJpbmcoKTsKICAgICB9Ci0gICAgZWxzZSBpZiAoIHRhZyA9PSBhbnlMb2NhbE5hbWUg
JiYgY3MtPmF0dHIgPT0gQVRUUl9DTEFTUyAmJiBjcy0+bWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OkNs
YXNzICkKKyAgICBlbHNlIGlmIChsb2NhbE5hbWUgPT0gc3RhckF0b20gJiYgY3MtPmF0dHIgPT0g
QVRUUl9DTEFTUyAmJiBjcy0+bWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OkNsYXNzKQogICAgIHsKICAg
ICAgICAgc3RyID0gIi4iOwogICAgICAgICBzdHIgKz0gY3MtPnZhbHVlLnN0cmluZygpOwogICAg
IH0KLSAgICBlbHNlIGlmICggdGFnID09IGFueUxvY2FsTmFtZSAmJiBjcy0+bWF0Y2ggPT0gQ1NT
U2VsZWN0b3I6OlBzZXVkb0NsYXNzICkKKyAgICBlbHNlIGlmIChsb2NhbE5hbWUgPT0gc3RhckF0
b20gICYmIGNzLT5tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3MpCiAgICAgewogICAg
ICAgICBzdHIgPSAiOiI7CiAgICAgICAgIHN0ciArPSBjcy0+dmFsdWUuc3RyaW5nKCk7CiAgICAg
fQotICAgIGVsc2UgaWYgKCB0YWcgPT0gYW55TG9jYWxOYW1lICYmIGNzLT5tYXRjaCA9PSBDU1NT
ZWxlY3Rvcjo6UHNldWRvRWxlbWVudCApCisgICAgZWxzZSBpZiAobG9jYWxOYW1lID09IHN0YXJB
dG9tICYmIGNzLT5tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVudCkKICAgICB7CiAg
ICAgICAgIHN0ciA9ICI6OiI7CiAgICAgICAgIHN0ciArPSBjcy0+dmFsdWUuc3RyaW5nKCk7CiAg
ICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAgIGlmICggdGFnID09IGFueUxvY2FsTmFtZSAp
CisgICAgICAgIGlmIChsb2NhbE5hbWUgPT0gc3RhckF0b20pCiAgICAgICAgICAgICBzdHIgPSAi
KiI7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHN0ciA9IGdldFRhZ05hbWUoIGNzLT50YWcg
KTsKLSAgICAgICAgaWYgKCBjcy0+YXR0ciA9PSBBVFRSX0lEICYmIGNzLT5tYXRjaCA9PSBDU1NT
ZWxlY3Rvcjo6RXhhY3QgKQorICAgICAgICAgICAgc3RyID0gbG9jYWxOYW1lOworICAgICAgICBp
ZiAoY3MtPmF0dHIgPT0gQVRUUl9JRCAmJiBjcy0+bWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OkV4YWN0
KQogICAgICAgICB7CiAgICAgICAgICAgICBzdHIgKz0gIiMiOwogICAgICAgICAgICAgc3RyICs9
IGNzLT52YWx1ZS5zdHJpbmcoKTsKICAgICAgICAgfQotICAgICAgICBlbHNlIGlmICggY3MtPmF0
dHIgPT0gQVRUUl9DTEFTUyAmJiBjcy0+bWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OkNsYXNzICkKKyAg
ICAgICAgZWxzZSBpZiAoY3MtPmF0dHIgPT0gQVRUUl9DTEFTUyAmJiBjcy0+bWF0Y2ggPT0gQ1NT
U2VsZWN0b3I6OkNsYXNzKQogICAgICAgICB7CiAgICAgICAgICAgICBzdHIgKz0gIi4iOwogICAg
ICAgICAgICAgc3RyICs9IGNzLT52YWx1ZS5zdHJpbmcoKTsKICAgICAgICAgfQotICAgICAgICBl
bHNlIGlmICggY3MtPm1hdGNoID09IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzcyApCisgICAgICAg
IGVsc2UgaWYgKGNzLT5tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3MpCiAgICAgICAg
IHsKICAgICAgICAgICAgIHN0ciArPSAiOiI7CiAgICAgICAgICAgICBzdHIgKz0gY3MtPnZhbHVl
LnN0cmluZygpOwogICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKCBjcy0+bWF0Y2ggPT0gQ1NT
U2VsZWN0b3I6OlBzZXVkb0VsZW1lbnQgKQorICAgICAgICBlbHNlIGlmIChjcy0+bWF0Y2ggPT0g
Q1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnQpCiAgICAgICAgIHsKICAgICAgICAgICAgIHN0ciAr
PSAiOjoiOwogICAgICAgICAgICAgc3RyICs9IGNzLT52YWx1ZS5zdHJpbmcoKTsKICAgICAgICAg
fQogICAgICAgICAvLyBvcHRpb25hbCBhdHRyaWJ1dGUKLSAgICAgICAgaWYgKCBjcy0+YXR0ciAp
IHsKLSAgICAgICAgICAgIERPTVN0cmluZyBhdHRyTmFtZSA9IGdldEF0dHJOYW1lKCBjcy0+YXR0
ciApOworICAgICAgICBpZiAoY3MtPmF0dHIpIHsKKyAgICAgICAgICAgIERPTVN0cmluZyBhdHRy
TmFtZSA9IGdldEF0dHJOYW1lKGNzLT5hdHRyKTsKICAgICAgICAgICAgIHN0ciArPSAiWyI7CiAg
ICAgICAgICAgICBzdHIgKz0gYXR0ck5hbWU7CiAgICAgICAgICAgICBzd2l0Y2ggKGNzLT5tYXRj
aCkgewpJbmRleDoga2h0bWwvY3NzL2Nzc19iYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1dlYkNvcmUva2h0bWwvY3NzL2Nzc19iYXNlLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuMTIKZGlmZiAtdSAtcCAtcjEuMTIga2h0bWwvY3NzL2Nzc19iYXNlLmgKLS0tIGtodG1sL2Nz
cy9jc3NfYmFzZS5oCTEyIEp1biAyMDA1IDA0OjA3OjMwIC0wMDAwCTEuMTIKKysrIGtodG1sL2Nz
cy9jc3NfYmFzZS5oCTI0IEp1biAyMDA1IDAzOjA5OjM2IC0wMDAwCkBAIC0yNyw2ICsyNyw3IEBA
CiAjaW5jbHVkZSAiZG9tL2RvbV9zdHJpbmcuaCIKICNpbmNsdWRlICJkb20vZG9tX21pc2MuaCIK
ICNpbmNsdWRlICJ4bWwvZG9tX25vZGVpbXBsLmgiCisjaW5jbHVkZSAiZG9tX3FuYW1lLmgiCiAj
aW5jbHVkZSAibWlzYy9zaGFyZWQuaCIKICNpbmNsdWRlIDxxZGF0ZXRpbWUuaD4KICNpbmNsdWRl
IDxxcHRybGlzdC5oPgpAQCAtNDYsMjAgKzQ3LDIwIEBAIG5hbWVzcGFjZSBET00gewogICAgIGNs
YXNzIERvY3VtZW50SW1wbDsKIAogICAgIHN0cnVjdCBDU1NOYW1lc3BhY2UgewotICAgICAgICBE
T01TdHJpbmcgbV9wcmVmaXg7Ci0gICAgICAgIERPTVN0cmluZyBtX3VyaTsKKyAgICAgICAgQXRv
bWljU3RyaW5nIG1fcHJlZml4OworICAgICAgICBBdG9taWNTdHJpbmcgbV91cmk7CiAgICAgICAg
IENTU05hbWVzcGFjZSogbV9wYXJlbnQ7CiAKICAgICAgICAgTUFJTl9USFJFQURfQUxMT0NBVEVE
OwogCi0gICAgICAgIENTU05hbWVzcGFjZShjb25zdCBET01TdHJpbmcmIHAsIGNvbnN0IERPTVN0
cmluZyYgdSwgQ1NTTmFtZXNwYWNlKiBwYXJlbnQpIAorICAgICAgICBDU1NOYW1lc3BhY2UoY29u
c3QgQXRvbWljU3RyaW5nJiBwLCBjb25zdCBBdG9taWNTdHJpbmcmIHUsIENTU05hbWVzcGFjZSog
cGFyZW50KSAKICAgICAgICAgICAgIDptX3ByZWZpeChwKSwgbV91cmkodSksIG1fcGFyZW50KHBh
cmVudCkge30KICAgICAgICAgfkNTU05hbWVzcGFjZSgpIHsgZGVsZXRlIG1fcGFyZW50OyB9CiAg
ICAgICAgIAotICAgICAgICBjb25zdCBET01TdHJpbmcmIHVyaSgpIHsgcmV0dXJuIG1fdXJpOyB9
Ci0gICAgICAgIGNvbnN0IERPTVN0cmluZyYgcHJlZml4KCkgeyByZXR1cm4gbV9wcmVmaXg7IH0K
KyAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB1cmkoKSB7IHJldHVybiBtX3VyaTsgfQorICAg
ICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCgpIHsgcmV0dXJuIG1fcHJlZml4OyB9CiAg
ICAgICAgIAotICAgICAgICBDU1NOYW1lc3BhY2UqIG5hbWVzcGFjZUZvclByZWZpeChjb25zdCBE
T01TdHJpbmcmIHByZWZpeCkgeworICAgICAgICBDU1NOYW1lc3BhY2UqIG5hbWVzcGFjZUZvclBy
ZWZpeChjb25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCkgewogICAgICAgICAgICAgaWYgKHByZWZp
eCA9PSBtX3ByZWZpeCkKICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICAgICAg
IGlmIChtX3BhcmVudCkKQEAgLTcyLDggKzczLDE0IEBAIG5hbWVzcGFjZSBET00gewogICAgIGNs
YXNzIENTU1NlbGVjdG9yCiAgICAgewogICAgIHB1YmxpYzoKLQlDU1NTZWxlY3RvcigpCi0JICAg
IDogdGFnSGlzdG9yeSgwKSwgc2ltcGxlU2VsZWN0b3IoMCksIG5leHRTZWxlY3RvcigwKSwgYXR0
cigwKSwgdGFnKGFueVFOYW1lKSwKKyAgICAgICAgQ1NTU2VsZWN0b3IoKQorICAgICAgICAgICAg
OiB0YWdIaXN0b3J5KDApLCBzaW1wbGVTZWxlY3RvcigwKSwgbmV4dFNlbGVjdG9yKDApLCBhdHRy
KDApLCB0YWcoYW55VGFnTmFtZSgpKSwKKyAgICAgICAgICAgICAgcmVsYXRpb24oIERlc2NlbmRh
bnQgKSwgbWF0Y2goIE5vbmUgKSwKKyAgICAgICAgICAgICAgcHNldWRvSWQoIDAgKSwgX3BzZXVk
b1R5cGUoUHNldWRvTm90UGFyc2VkKQorICAgICAgICB7fQorICAgICAgICAKKwlDU1NTZWxlY3Rv
cihjb25zdCBRdWFsaWZpZWROYW1lJiBxTmFtZSkKKwkgICAgOiB0YWdIaXN0b3J5KDApLCBzaW1w
bGVTZWxlY3RvcigwKSwgbmV4dFNlbGVjdG9yKDApLCBhdHRyKDApLCB0YWcocU5hbWUpLAogICAg
ICAgICAgICAgICByZWxhdGlvbiggRGVzY2VuZGFudCApLCBtYXRjaCggTm9uZSApLAogICAgICAg
ICAgICAgICBwc2V1ZG9JZCggMCApLCBfcHNldWRvVHlwZShQc2V1ZG9Ob3RQYXJzZWQpCiAgICAg
ICAgIHt9CkBAIC0xNjcsMTIgKzE3NCwxNyBAQCBuYW1lc3BhY2UgRE9NIHsKICAgICAgICAgICAg
IHJldHVybiBfcHNldWRvVHlwZTsKICAgICAgICAgfQogCisgICAgICAgIHN0YXRpYyBjb25zdCBR
dWFsaWZpZWROYW1lJiBhbnlUYWdOYW1lKCk7CisKKyAgICAgICAgYm9vbCBoYXNUYWcoKSBjb25z
dCB7IHJldHVybiB0YWcgIT0gYW55VGFnTmFtZSgpOyB9CisKIAltdXRhYmxlIERPTTo6QXRvbWlj
U3RyaW5nIHZhbHVlOwogCUNTU1NlbGVjdG9yKiB0YWdIaXN0b3J5OwogICAgICAgICBDU1NTZWxl
Y3Rvciogc2ltcGxlU2VsZWN0b3I7IC8vIFVzZWQgZm9yIDpub3QuCiAgICAgICAgIENTU1NlbGVj
dG9yKiBuZXh0U2VsZWN0b3I7IC8vIHVzZWQgZm9yICwtY2hhaW5lZCBzZWxlY3RvcnMKIAlRX1VJ
TlQzMiAgICAgYXR0cjsKLQlRX1VJTlQzMiAgICAgdGFnOworCQorICAgICAgICBRdWFsaWZpZWRO
YW1lIHRhZzsKIAogICAgICAgICBSZWxhdGlvbiByZWxhdGlvbiAgICAgICAgICAgICAgOiAzOwog
CW11dGFibGUgTWF0Y2ggIG1hdGNoICAgICAgICAgICA6IDQ7CkluZGV4OiBraHRtbC9jc3MvY3Nz
X3J1bGVpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRt
bC9jc3MvY3NzX3J1bGVpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xOApkaWZmIC11
IC1wIC1yMS4xOCBraHRtbC9jc3MvY3NzX3J1bGVpbXBsLmNwcAotLS0ga2h0bWwvY3NzL2Nzc19y
dWxlaW1wbC5jcHAJMTEgTWF5IDIwMDUgMDU6NDk6MzQgLTAwMDAJMS4xOAorKysga2h0bWwvY3Nz
L2Nzc19ydWxlaW1wbC5jcHAJMjQgSnVuIDIwMDUgMDM6MDk6MzYgLTAwMDAKQEAgLTMxLDcgKzMx
LDYgQEAKICNpbmNsdWRlICJjc3MvY3NzX3J1bGVpbXBsLmgiCiAKICNpbmNsdWRlICJtaXNjL2xv
YWRlci5oIgotI2luY2x1ZGUgIm1pc2MvaHRtbHRhZ3MuaCIKICNpbmNsdWRlICJtaXNjL2h0bWxh
dHRycy5oIgogI2luY2x1ZGUgInhtbC9kb21fZG9jaW1wbC5oIgogCkluZGV4OiBraHRtbC9jc3Mv
Y3NzX3N0eWxlc2hlZXRpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2Vi
Q29yZS9raHRtbC9jc3MvY3NzX3N0eWxlc2hlZXRpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS4xMgpkaWZmIC11IC1wIC1yMS4xMiBraHRtbC9jc3MvY3NzX3N0eWxlc2hlZXRpbXBsLmNw
cAotLS0ga2h0bWwvY3NzL2Nzc19zdHlsZXNoZWV0aW1wbC5jcHAJMTEgTWF5IDIwMDUgMDA6NTg6
MjcgLTAwMDAJMS4xMgorKysga2h0bWwvY3NzL2Nzc19zdHlsZXNoZWV0aW1wbC5jcHAJMjQgSnVu
IDIwMDUgMDM6MDk6MzYgLTAwMDAKQEAgLTM4LDggKzM4LDYgQEAKICNpbmNsdWRlICJodG1sL2h0
bWxfZG9jdW1lbnRpbXBsLmgiCiAjaW5jbHVkZSAibWlzYy9sb2FkZXIuaCIKIAotI2luY2x1ZGUg
InhtbF9uYW1lc3BhY2VfdGFibGUuaCIKLQogI2luY2x1ZGUgPGtkZWJ1Zy5oPgogCiB1c2luZyBu
YW1lc3BhY2UgRE9NOwpAQCAtMjEwLDcgKzIwOCw3IEBAIHZvaWQgQ1NTU3R5bGVTaGVldEltcGw6
OmRlbGV0ZVJ1bGUoIHVuc2kKICAgICBiLT5kZXJlZigpOwogfQogCi12b2lkIENTU1N0eWxlU2hl
ZXRJbXBsOjphZGROYW1lc3BhY2UoQ1NTUGFyc2VyKiBwLCBjb25zdCBET006OkRPTVN0cmluZyYg
cHJlZml4LCBjb25zdCBET006OkRPTVN0cmluZyYgdXJpKQordm9pZCBDU1NTdHlsZVNoZWV0SW1w
bDo6YWRkTmFtZXNwYWNlKENTU1BhcnNlciogcCwgY29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgs
IGNvbnN0IEF0b21pY1N0cmluZyYgdXJpKQogewogICAgIGlmICh1cmkuaXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm47CkBAIC0yMjAsMjYgKzIxOCwyMSBAQCB2b2lkIENTU1N0eWxlU2hlZXRJbXBs
OjphZGROYW1lc3BhY2UoQ1NTCiAgICAgaWYgKHByZWZpeC5pc0VtcHR5KCkpCiAgICAgICAgIC8v
IFNldCB0aGUgZGVmYXVsdCBuYW1lc3BhY2Ugb24gdGhlIHBhcnNlciBzbyB0aGF0IHNlbGVjdG9y
cyB0aGF0IG9taXQgbmFtZXNwYWNlIGluZm8gd2lsbAogICAgICAgICAvLyBiZSBhYmxlIHRvIHBp
Y2sgaXQgdXAgZWFzaWx5LgotICAgICAgICBwLT5kZWZhdWx0TmFtZXNwYWNlID0gWG1sTmFtZXNw
YWNlVGFibGU6OmdldE5hbWVzcGFjZUlEKHVyaSwgZmFsc2UpOworICAgICAgICBwLT5kZWZhdWx0
TmFtZXNwYWNlID0gdXJpOwogfQogCi12b2lkIENTU1N0eWxlU2hlZXRJbXBsOjpkZXRlcm1pbmVO
YW1lc3BhY2UoUV9VSU5UMzImIGlkLCBjb25zdCBET006OkRPTVN0cmluZyYgcHJlZml4KQorY29u
c3QgQXRvbWljU3RyaW5nJiBDU1NTdHlsZVNoZWV0SW1wbDo6ZGV0ZXJtaW5lTmFtZXNwYWNlKGNv
bnN0IEF0b21pY1N0cmluZyYgcHJlZml4KQogewotICAgIC8vIElmIHRoZSBzdHlsZXNoZWV0IGhh
cyBubyBuYW1lc3BhY2VzIHdlIGNhbiBqdXN0IHJldHVybi4gIFRoZXJlIHdvbid0IGJlIGFueSBu
ZWVkIHRvIGV2ZXIgY2hlY2sKLSAgICAvLyBuYW1lc3BhY2UgdmFsdWVzIGluIHNlbGVjdG9ycy4K
LSAgICBpZiAoIW1fbmFtZXNwYWNlcykKLSAgICAgICAgcmV0dXJuOwotICAgIAogICAgIGlmIChw
cmVmaXguaXNFbXB0eSgpKQotICAgICAgICBpZCA9IG1ha2VJZChub05hbWVzcGFjZSwgbG9jYWxO
YW1lUGFydChpZCkpOyAvLyBObyBuYW1lc3BhY2UuIElmIGFuIGVsZW1lbnQvYXR0cmlidXRlIGhh
cyBhIG5hbWVzcGFjZSwgd2Ugd29uJ3QgbWF0Y2ggaXQuCi0gICAgZWxzZSBpZiAocHJlZml4ID09
ICIqIikKLSAgICAgICAgaWQgPSBtYWtlSWQoYW55TmFtZXNwYWNlLCBsb2NhbE5hbWVQYXJ0KGlk
KSk7IC8vIFdlJ2xsIG1hdGNoIGFueSBuYW1lc3BhY2UuCi0gICAgZWxzZSB7CisgICAgICAgIHJl
dHVybiBlbXB0eUF0b207IC8vIE5vIG5hbWVzcGFjZS4gSWYgYW4gZWxlbWVudC9hdHRyaWJ1dGUg
aGFzIGEgbmFtZXNwYWNlLCB3ZSB3b24ndCBtYXRjaCBpdC4KKyAgICBlbHNlIGlmIChwcmVmaXgg
PT0gc3RhckF0b20pCisgICAgICAgIHJldHVybiBzdGFyQXRvbTsgLy8gV2UnbGwgbWF0Y2ggYW55
IG5hbWVzcGFjZS4KKyAgICBlbHNlIGlmIChtX25hbWVzcGFjZXMpIHsKICAgICAgICAgQ1NTTmFt
ZXNwYWNlKiBucyA9IG1fbmFtZXNwYWNlcy0+bmFtZXNwYWNlRm9yUHJlZml4KHByZWZpeCk7CiAg
ICAgICAgIGlmIChucykKLSAgICAgICAgICAgIC8vIExvb2sgdXAgdGhlIGlkIGZvciB0aGlzIG5h
bWVzcGFjZSBVUkkuCi0gICAgICAgICAgICBpZCA9IG1ha2VJZChYbWxOYW1lc3BhY2VUYWJsZTo6
Z2V0TmFtZXNwYWNlSUQobnMtPnVyaSgpLCBmYWxzZSksIGxvY2FsTmFtZVBhcnQoaWQpKTsKKyAg
ICAgICAgICAgIHJldHVybiBucy0+dXJpKCk7CiAgICAgfQorICAgIHJldHVybiBlbXB0eUF0b207
IC8vIEFzc3VtZSB3ZSB3b250IG1hdGNoIGFueSBuYW1lc3BhY2VzLgogfQogCiBib29sIENTU1N0
eWxlU2hlZXRJbXBsOjpwYXJzZVN0cmluZyhjb25zdCBET01TdHJpbmcgJnN0cmluZywgYm9vbCBz
dHJpY3QpCkluZGV4OiBraHRtbC9jc3MvY3NzX3N0eWxlc2hlZXRpbXBsLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvY3NzL2Nzc19zdHlsZXNoZWV0aW1wbC5o
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjExCmRpZmYgLXUgLXAgLXIxLjExIGtodG1sL2Nzcy9j
c3Nfc3R5bGVzaGVldGltcGwuaAotLS0ga2h0bWwvY3NzL2Nzc19zdHlsZXNoZWV0aW1wbC5oCTEx
IE1heSAyMDA1IDAwOjU4OjI3IC0wMDAwCTEuMTEKKysrIGtodG1sL2Nzcy9jc3Nfc3R5bGVzaGVl
dGltcGwuaAkyNCBKdW4gMjAwNSAwMzowOTozNyAtMDAwMApAQCAtMTA0LDggKzEwNCw4IEBAIHB1
YmxpYzoKICAgICB2b2lkIGRlbGV0ZVJ1bGUgKCB1bnNpZ25lZCBsb25nIGluZGV4LCBpbnQgJmV4
Y2VwdGlvbmNvZGUgKTsKICAgICB1bnNpZ25lZCBsb25nIGFkZFJ1bGUgKCBjb25zdCBET01TdHJp
bmcgJnNlbGVjdG9yLCBjb25zdCBET01TdHJpbmcgJnN0eWxlLCBsb25nIGluZGV4LCBpbnQgJmV4
Y2VwdGlvbmNvZGUgKTsKIAotICAgIHZvaWQgYWRkTmFtZXNwYWNlKENTU1BhcnNlciogcCwgY29u
c3QgRE9NOjpET01TdHJpbmcmIHByZWZpeCwgY29uc3QgRE9NOjpET01TdHJpbmcmIHVyaSk7Ci0g
ICAgdm9pZCBkZXRlcm1pbmVOYW1lc3BhY2UoUV9VSU5UMzImIGlkLCBjb25zdCBET006OkRPTVN0
cmluZyYgcHJlZml4KTsKKyAgICB2b2lkIGFkZE5hbWVzcGFjZShDU1NQYXJzZXIqIHAsIGNvbnN0
IEF0b21pY1N0cmluZyYgcHJlZml4LCBjb25zdCBBdG9taWNTdHJpbmcmIHVyaSk7CisgICAgY29u
c3QgQXRvbWljU3RyaW5nJiBkZXRlcm1pbmVOYW1lc3BhY2UoY29uc3QgQXRvbWljU3RyaW5nJiBw
cmVmaXgpOwogICAgIAogICAgIHZpcnR1YWwgYm9vbCBwYXJzZVN0cmluZyggY29uc3QgRE9NU3Ry
aW5nICZzdHJpbmcsIGJvb2wgc3RyaWN0ID0gdHJ1ZSApOwogCkluZGV4OiBraHRtbC9jc3MvY3Nz
cGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9j
c3MvY3NzcGFyc2VyLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS45OApkaWZmIC11IC1wIC1y
MS45OCBraHRtbC9jc3MvY3NzcGFyc2VyLmNwcAotLS0ga2h0bWwvY3NzL2Nzc3BhcnNlci5jcHAJ
MTEgTWF5IDIwMDUgMDI6MTA6MDkgLTAwMDAJMS45OAorKysga2h0bWwvY3NzL2Nzc3BhcnNlci5j
cHAJMjQgSnVuIDIwMDUgMDM6MDk6MzkgLTAwMDAKQEAgLTEwMiw3ICsxMDIsNyBAQCBDU1NQYXJz
ZXI6OkNTU1BhcnNlciggYm9vbCBzdHJpY3RQYXJzaW5nCiAgICAgaW1wb3J0YW50ID0gZmFsc2U7
CiAgICAgaW5QYXJzZVNob3J0SGFuZCA9IGZhbHNlOwogICAgIAotICAgIGRlZmF1bHROYW1lc3Bh
Y2UgPSBhbnlOYW1lc3BhY2U7CisgICAgZGVmYXVsdE5hbWVzcGFjZSA9IHN0YXJBdG9tOwogICAg
IAogICAgIHl5X3N0YXJ0ID0gMTsKIApAQCAtMTYxLDcgKzE2MSw3IEBAIHZvaWQgQ1NTUGFyc2Vy
OjpzZXR1cFBhcnNlcihjb25zdCBjaGFyICoKIHZvaWQgQ1NTUGFyc2VyOjpwYXJzZVNoZWV0KCBD
U1NTdHlsZVNoZWV0SW1wbCAqc2hlZXQsIGNvbnN0IERPTVN0cmluZyAmc3RyaW5nICkKIHsKICAg
ICBzdHlsZUVsZW1lbnQgPSBzaGVldDsKLSAgICBkZWZhdWx0TmFtZXNwYWNlID0gYW55TmFtZXNw
YWNlOyAvLyBSZXNldCB0aGUgZGVmYXVsdCBuYW1lc3BhY2UuCisgICAgZGVmYXVsdE5hbWVzcGFj
ZSA9IHN0YXJBdG9tOyAvLyBSZXNldCB0aGUgZGVmYXVsdCBuYW1lc3BhY2UuCiAgICAgCiAgICAg
c2V0dXBQYXJzZXIgKCIiLCBzdHJpbmcsICIiKTsKIApJbmRleDoga2h0bWwvY3NzL2Nzc3BhcnNl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2Nzcy9jc3Nw
YXJzZXIuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zMApkaWZmIC11IC1wIC1yMS4zMCBraHRt
bC9jc3MvY3NzcGFyc2VyLmgKLS0tIGtodG1sL2Nzcy9jc3NwYXJzZXIuaAkxOSBOb3YgMjAwNCAw
MDoxMjoyMCAtMDAwMAkxLjMwCisrKyBraHRtbC9jc3MvY3NzcGFyc2VyLmgJMjQgSnVuIDIwMDUg
MDM6MDk6MzkgLTAwMDAKQEAgLTE2NCw3ICsxNjQsNyBAQCBuYW1lc3BhY2UgRE9NIHsKIAlpbnQg
bWF4UGFyc2VkUHJvcGVydGllczsKIAlib29sIGluUGFyc2VTaG9ydEhhbmQ7CiAKLSAgICAgICAg
UV9VSU5UMTYgZGVmYXVsdE5hbWVzcGFjZTsKKyAgICAgICAgQXRvbWljU3RyaW5nIGRlZmF1bHRO
YW1lc3BhY2U7CiAgICAgICAgIAogCXN0YXRpYyBDU1NQYXJzZXIgKmN1cnJlbnRQYXJzZXI7CiAK
SW5kZXg6IGtodG1sL2Nzcy9jc3NzdHlsZXNlbGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9jc3MvY3Nzc3R5bGVzZWxlY3Rvci5jcHAsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuMTg3CmRpZmYgLXUgLXAgLXIxLjE4NyBraHRtbC9jc3MvY3Nzc3R5
bGVzZWxlY3Rvci5jcHAKLS0tIGtodG1sL2Nzcy9jc3NzdHlsZXNlbGVjdG9yLmNwcAkxMiBKdW4g
MjAwNSAwNDowNzozMCAtMDAwMAkxLjE4NworKysga2h0bWwvY3NzL2Nzc3N0eWxlc2VsZWN0b3Iu
Y3BwCTI0IEp1biAyMDA1IDAzOjA5OjQzIC0wMDAwCkBAIC0zMzksNyArMzM5LDcgQEAgdm9pZCBD
U1NTdHlsZVNlbGVjdG9yOjptYXRjaFJ1bGVzKENTU1J1bAogICAgICAgICAgICAgbWF0Y2hSdWxl
c0Zvckxpc3QocnVsZXMtPmdldENsYXNzUnVsZXMoc2luZ2xlQ2xhc3MtPnN0cmluZygpLmltcGxl
bWVudGF0aW9uKCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgpOwogICAgIH0KLSAgICBtYXRj
aFJ1bGVzRm9yTGlzdChydWxlcy0+Z2V0VGFnUnVsZXMoKHZvaWQqKShpbnQpbG9jYWxOYW1lUGFy
dChlbGVtZW50LT5pZCgpKSksCisgICAgbWF0Y2hSdWxlc0Zvckxpc3QocnVsZXMtPmdldFRhZ1J1
bGVzKGVsZW1lbnQtPmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCkpLAogICAgICAgICAgICAg
ICAgICAgICAgIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4KTsKICAgICBtYXRjaFJ1bGVz
Rm9yTGlzdChydWxlcy0+Z2V0VW5pdmVyc2FsUnVsZXMoKSwgZmlyc3RSdWxlSW5kZXgsIGxhc3RS
dWxlSW5kZXgpOwogICAgIApAQCAtMzYwLDkgKzM2MCw5IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rv
cjo6bWF0Y2hSdWxlc0Zvckxpc3QKICAgICBpZiAoIXJ1bGVzKSByZXR1cm47CiAgICAgZm9yIChD
U1NSdWxlRGF0YSogZCA9IHJ1bGVzLT5maXJzdCgpOyBkOyBkID0gZC0+bmV4dCgpKSB7CiAgICAg
ICAgIENTU1N0eWxlUnVsZUltcGwqIHJ1bGUgPSBkLT5ydWxlKCk7Ci0gICAgICAgIFFfVUlOVDE2
IGNzc1RhZ0lkID0gbG9jYWxOYW1lUGFydChlbGVtZW50LT5pZCgpKTsKLSAgICAgICAgUV9VSU5U
MTYgdGFnID0gbG9jYWxOYW1lUGFydChkLT5zZWxlY3RvcigpLT50YWcpOwotICAgICAgICBpZiAo
KGNzc1RhZ0lkID09IHRhZyB8fCB0YWcgPT0gYW55TG9jYWxOYW1lKSAmJiBjaGVja1NlbGVjdG9y
KGQtPnNlbGVjdG9yKCksIGVsZW1lbnQpKSB7CisgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYg
bG9jYWxOYW1lID0gZWxlbWVudC0+bG9jYWxOYW1lKCk7CisgICAgICAgIGNvbnN0IEF0b21pY1N0
cmluZyYgc2VsZWN0b3JMb2NhbE5hbWUgPSBkLT5zZWxlY3RvcigpLT50YWcubG9jYWxOYW1lKCk7
CisgICAgICAgIGlmICgobG9jYWxOYW1lID09IHNlbGVjdG9yTG9jYWxOYW1lIHx8IHNlbGVjdG9y
TG9jYWxOYW1lID09IHN0YXJBdG9tKSAmJiBjaGVja1NlbGVjdG9yKGQtPnNlbGVjdG9yKCksIGVs
ZW1lbnQpKSB7CiAgICAgICAgICAgICAvLyBJZiB0aGUgcnVsZSBoYXMgbm8gcHJvcGVydGllcyB0
byBhcHBseSwgdGhlbiBpZ25vcmUgaXQuCiAgICAgICAgICAgICBDU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbkltcGwqIGRlY2wgPSBydWxlLT5kZWNsYXJhdGlvbigpOwogICAgICAgICAgICAgaWYg
KCFkZWNsIHx8ICFkZWNsLT5sZW5ndGgoKSkgY29udGludWU7CkBAIC02MDksNyArNjA5LDcgQEAg
Ym9vbCBDU1NTdHlsZVNlbGVjdG9yOjpjYW5TaGFyZVN0eWxlV2l0aAogICAgIGlmIChuLT5pc1N0
eWxlZEVsZW1lbnQoKSkgewogICAgICAgICBib29sIG1vdXNlSW5zaWRlID0gZWxlbWVudC0+cmVu
ZGVyZXIoKSA/IGVsZW1lbnQtPnJlbmRlcmVyKCktPm1vdXNlSW5zaWRlKCkgOiBmYWxzZTsKICAg
ICAgICAgU3R5bGVkRWxlbWVudEltcGwqIHMgPSBzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50SW1w
bCo+KG4pOwotICAgICAgICBpZiAocy0+cmVuZGVyZXIoKSAmJiAocy0+aWQoKSA9PSBlbGVtZW50
LT5pZCgpKSAmJiAhcy0+aGFzSUQoKSAmJgorICAgICAgICBpZiAocy0+cmVuZGVyZXIoKSAmJiAo
cy0+dGFnTmFtZSgpID09IGVsZW1lbnQtPnRhZ05hbWUoKSkgJiYgIXMtPmhhc0lEKCkgJiYKICAg
ICAgICAgICAgIChzLT5oYXNDbGFzcygpID09IGVsZW1lbnQtPmhhc0NsYXNzKCkpICYmICFzLT5p
bmxpbmVTdHlsZURlY2woKSAmJgogICAgICAgICAgICAgKHMtPmhhc01hcHBlZEF0dHJpYnV0ZXMo
KSA9PSBzdHlsZWRFbGVtZW50LT5oYXNNYXBwZWRBdHRyaWJ1dGVzKCkpICYmCiAgICAgICAgICAg
ICAocy0+aXNMaW5rKCkgPT0gZWxlbWVudC0+aXNMaW5rKCkpICYmIApAQCAtODg1LDIzICs4ODUs
MjMgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphZGp1c3RSZW5kZXJTdHlsZQogICAgICAgICAv
LyBTaXRlcyBhbHNvIGNvbW1vbmx5IHVzZSBkaXNwbGF5OmlubGluZS9ibG9jayBvbiA8dGQ+cyBh
bmQgPHRhYmxlPnMuICBJbiBxdWlya3MgbW9kZSB3ZSBmb3JjZQogICAgICAgICAvLyB0aGVzZSB0
YWdzIHRvIHJldGFpbiB0aGVpciBkaXNwbGF5IHR5cGVzLgogICAgICAgICBpZiAoIXN0cmljdFBh
cnNpbmcgJiYgZSkgewotICAgICAgICAgICAgaWYgKGUtPmlkKCkgPT0gSURfVEQpIHsKKyAgICAg
ICAgICAgIGlmIChlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGQoKSkpIHsKICAgICAgICAgICAg
ICAgICBzdHlsZS0+c2V0RGlzcGxheShUQUJMRV9DRUxMKTsKICAgICAgICAgICAgICAgICBzdHls
ZS0+c2V0RmxvYXRpbmcoRk5PTkUpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBp
ZiAoZS0+aWQoKSA9PSBJRF9UQUJMRSkKKyAgICAgICAgICAgIGVsc2UgaWYgKGUtPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjp0YWJsZSgpKSkKICAgICAgICAgICAgICAgICBzdHlsZS0+c2V0RGlzcGxh
eShzdHlsZS0+aXNEaXNwbGF5SW5saW5lVHlwZSgpID8gSU5MSU5FX1RBQkxFIDogVEFCTEUpOwog
ICAgICAgICB9CiAKICAgICAgICAgLy8gRnJhbWVzIGFuZCBmcmFtZXNldHMgbmV2ZXIgaG9ub3Ig
cG9zaXRpb246cmVsYXRpdmUgb3IgcG9zaXRpb246YWJzb2x1dGUuICBUaGlzIGlzIG5lY2Vzc2Fy
eSB0bwogICAgICAgICAvLyBmaXggYSBjcmFzaCB3aGVyZSBhIHNpdGUgdHJpZXMgdG8gcG9zaXRp
b24gdGhlc2Ugb2JqZWN0cy4gIFRoZXkgYWxzbyBuZXZlciBob25vciBkaXNwbGF5LgotICAgICAg
ICBpZiAoZSAmJiAoZS0+aWQoKSA9PSBJRF9GUkFNRSB8fCBlLT5pZCgpID09IElEX0ZSQU1FU0VU
KSkgeworICAgICAgICBpZiAoZSAmJiAoZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZyYW1lKCkp
IHx8IGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpmcmFtZXNldCgpKSkpIHsKICAgICAgICAgICAg
IHN0eWxlLT5zZXRQb3NpdGlvbihTVEFUSUMpOwogICAgICAgICAgICAgc3R5bGUtPnNldERpc3Bs
YXkoQkxPQ0spOwogICAgICAgICB9CiAKICAgICAgICAgLy8gVGFibGUgaGVhZGVycyB3aXRoIGEg
dGV4dC1hbGlnbiBvZiBhdXRvIHdpbGwgY2hhbmdlIHRoZSB0ZXh0LWFsaWduIHRvIGNlbnRlci4K
LSAgICAgICAgaWYgKGUgJiYgZS0+aWQoKSA9PSBJRF9USCAmJiBzdHlsZS0+dGV4dEFsaWduKCkg
PT0gVEFBVVRPKQorICAgICAgICBpZiAoZSAmJiBlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGgo
KSkgJiYgc3R5bGUtPnRleHRBbGlnbigpID09IFRBQVVUTykKICAgICAgICAgICAgIHN0eWxlLT5z
ZXRUZXh0QWxpZ24oQ0VOVEVSKTsKICAgICAgICAgCiAgICAgICAgIC8vIE11dGF0ZSB0aGUgZGlz
cGxheSB0byBCTE9DSyBvciBUQUJMRSBmb3IgY2VydGFpbiBjYXNlcywgZS5nLiwgaWYgc29tZW9u
ZSBhdHRlbXB0cyB0bwpAQCAtOTc5LDcgKzk3OSw3IEBAIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6
Y2hlY2tTZWxlY3RvcihDU1MKICAgICAvLyBXZSB0cmFjayB3aGV0aGVyIG9yIG5vdCB0aGUgcnVs
ZSBjb250YWlucyBvbmx5IDpob3ZlciBhbmQgOmFjdGl2ZSBpbiBhIHNpbXBsZSBzZWxlY3Rvci4g
SWYKICAgICAvLyBzbywgd2UgY2FuJ3QgYWxsb3cgdGhhdCB0byBhcHBseSB0byBldmVyeSBlbGVt
ZW50IG9uIHRoZSBwYWdlLiAgV2UgYXNzdW1lIHRoZSBhdXRob3IgaW50ZW5kZWQKICAgICAvLyB0
byBhcHBseSB0aGUgcnVsZXMgb25seSB0byBsaW5rcy4KLSAgICBib29sIG9ubHlIb3ZlckFjdGl2
ZSA9IChzZWwtPnRhZyA9PSBhbnlRTmFtZSAmJgorICAgIGJvb2wgb25seUhvdmVyQWN0aXZlID0g
KCFzZWwtPmhhc1RhZygpICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbC0+bWF0
Y2ggPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzICYmCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAoc2VsLT5wc2V1ZG9UeXBlKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0hvdmVyIHx8
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsLT5wc2V1ZG9UeXBlKCkgPT0gQ1NT
U2VsZWN0b3I6OlBzZXVkb0FjdGl2ZSkpKTsKQEAgLTEwOTYsMTkgKzEwOTYsMTQgQEAgYm9vbCBD
U1NTdHlsZVNlbGVjdG9yOjpjaGVja09uZVNlbGVjdG9yKAogICAgIGlmKCFlKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoc2VsLT50YWcgIT0gYW55UU5hbWUpIHsKLSAgICAgICAg
aW50IGVsdElEID0gZS0+aWQoKTsKLSAgICAgICAgUV9VSU5UMTYgbG9jYWxOYW1lID0gbG9jYWxO
YW1lUGFydChlbHRJRCk7Ci0gICAgICAgIFFfVUlOVDE2IG5zID0gbmFtZXNwYWNlUGFydChlbHRJ
RCk7Ci0gICAgICAgIFFfVUlOVDE2IHNlbExvY2FsTmFtZSA9IGxvY2FsTmFtZVBhcnQoc2VsLT50
YWcpOwotICAgICAgICBRX1VJTlQxNiBzZWxOUyA9IG5hbWVzcGFjZVBhcnQoc2VsLT50YWcpOwot
ICAgICAgICAKLSAgICAgICAgaWYgKGxvY2FsTmFtZSA8PSBJRF9MQVNUX1RBRyAmJiBlLT5pc0hU
TUxFbGVtZW50KCkpCi0gICAgICAgICAgICBucyA9IHhodG1sTmFtZXNwYWNlOyAvLyBGSVhNRTog
UmVhbGx5IHdhbnQgdG8gbW92ZSBhd2F5IGZyb20gdGhpcyBjb21wbGljYXRlZCBoYWNrZXJ5IGFu
ZCBqdXN0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzd2l0Y2ggdGFncyBh
bmQgYXR0ciBuYW1lcyBvdmVyIHRvIEF0b21pY1N0cmluZ3MuCi0gICAgICAgIAotICAgICAgICBp
ZiAoKHNlbExvY2FsTmFtZSAhPSBhbnlMb2NhbE5hbWUgJiYgbG9jYWxOYW1lICE9IHNlbExvY2Fs
TmFtZSkgfHwKLSAgICAgICAgICAgIChzZWxOUyAhPSBhbnlOYW1lc3BhY2UgJiYgbnMgIT0gc2Vs
TlMpKQorICAgIGlmIChzZWwtPmhhc1RhZygpKSB7CisgICAgICAgIGNvbnN0IEF0b21pY1N0cmlu
ZyYgbG9jYWxOYW1lID0gZS0+bG9jYWxOYW1lKCk7CisgICAgICAgIGNvbnN0IEF0b21pY1N0cmlu
ZyYgbnMgPSBlLT5uYW1lc3BhY2VVUkkoKTsKKyAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBz
ZWxMb2NhbE5hbWUgPSBzZWwtPnRhZy5sb2NhbE5hbWUoKTsKKyAgICAgICAgY29uc3QgQXRvbWlj
U3RyaW5nJiBzZWxOUyA9IHNlbC0+dGFnLm5hbWVzcGFjZVVSSSgpOworICAgIAorICAgICAgICBp
ZiAoKHNlbExvY2FsTmFtZSAhPSBzdGFyQXRvbSAmJiBsb2NhbE5hbWUgIT0gc2VsTG9jYWxOYW1l
KSB8fAorICAgICAgICAgICAgKHNlbE5TICE9IHN0YXJBdG9tICYmIG5zICE9IHNlbE5TKSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTEyOTUsNyArMTI5MCw3IEBAIGJv
b2wgQ1NTU3R5bGVTZWxlY3Rvcjo6Y2hlY2tPbmVTZWxlY3RvcigKICAgICAgICAgICAgIGNhc2Ug
Q1NTU2VsZWN0b3I6OlBzZXVkb0hvdmVyOiB7CiAgICAgICAgICAgICAgICAgLy8gSWYgd2UncmUg
aW4gcXVpcmtzIG1vZGUsIHRoZW4gaG92ZXIgc2hvdWxkIG5ldmVyIG1hdGNoIGFuY2hvcnMgd2l0
aCBubwogICAgICAgICAgICAgICAgIC8vIGhyZWYuICBUaGlzIGlzIGltcG9ydGFudCBmb3Igc2l0
ZXMgbGlrZSB3c2ouY29tLgotICAgICAgICAgICAgICAgIGlmIChzdHJpY3RQYXJzaW5nIHx8IGUt
PmlkKCkgIT0gSURfQSB8fCBlLT5pc0xpbmsoKSkgeworICAgICAgICAgICAgICAgIGlmIChzdHJp
Y3RQYXJzaW5nIHx8ICFlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YSgpKSB8fCBlLT5pc0xpbmso
KSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudCA9PSBlICYmIHN0eWxlKQogICAg
ICAgICAgICAgICAgICAgICAgICAgc3R5bGUtPnNldEFmZmVjdGVkQnlIb3ZlclJ1bGVzKHRydWUp
OwogICAgICAgICAgICAgICAgICAgICBpZiAoZS0+cmVuZGVyZXIoKSkgewpAQCAtMTMyNiw3ICsx
MzIxLDcgQEAgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpjaGVja09uZVNlbGVjdG9yKAogICAgICAg
ICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQWN0aXZlOgogICAgICAgICAgICAgICAgIC8v
IElmIHdlJ3JlIGluIHF1aXJrcyBtb2RlLCB0aGVuIDphY3RpdmUgc2hvdWxkIG5ldmVyIG1hdGNo
IGFuY2hvcnMgd2l0aCBubwogICAgICAgICAgICAgICAgIC8vIGhyZWYuIAotICAgICAgICAgICAg
ICAgIGlmIChzdHJpY3RQYXJzaW5nIHx8IGUtPmlkKCkgIT0gSURfQSB8fCBlLT5pc0xpbmsoKSkg
eworICAgICAgICAgICAgICAgIGlmIChzdHJpY3RQYXJzaW5nIHx8ICFlLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6YSgpKSB8fCBlLT5pc0xpbmsoKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAo
ZWxlbWVudCA9PSBlICYmIHN0eWxlKQogICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGUtPnNl
dEFmZmVjdGVkQnlBY3RpdmVSdWxlcyh0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgZWxzZSBp
ZiAoZS0+cmVuZGVyZXIoKSkKQEAgLTE0MjUsOSArMTQyMCw5IEBAIHZvaWQgQ1NTUnVsZVNldDo6
YWRkUnVsZShDU1NTdHlsZVJ1bGVJbXAKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAgCi0g
ICAgUV9VSU5UMTYgbG9jYWxOYW1lID0gbG9jYWxOYW1lUGFydChzZWwtPnRhZyk7Ci0gICAgaWYg
KGxvY2FsTmFtZSAhPSBhbnlMb2NhbE5hbWUpIHsKLSAgICAgICAgYWRkVG9SdWxlU2V0KCh2b2lk
KikoaW50KWxvY2FsTmFtZSwgbV90YWdSdWxlcywgcnVsZSwgc2VsKTsKKyAgICBjb25zdCBBdG9t
aWNTdHJpbmcmIGxvY2FsTmFtZSA9IHNlbC0+dGFnLmxvY2FsTmFtZSgpOworICAgIGlmIChsb2Nh
bE5hbWUgIT0gc3RhckF0b20pIHsKKyAgICAgICAgYWRkVG9SdWxlU2V0KGxvY2FsTmFtZS5pbXBs
ZW1lbnRhdGlvbigpLCBtX3RhZ1J1bGVzLCBydWxlLCBzZWwpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgIApJbmRleDoga2h0bWwvY3NzL3BhcnNlci55Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2Nzcy9wYXJzZXIueSx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS4zOQpkaWZmIC11IC1wIC1yMS4zOSBraHRtbC9jc3MvcGFyc2VyLnkKLS0tIGtodG1sL2Nz
cy9wYXJzZXIueQkyMiBKdW4gMjAwNSAyMTowNTo1OSAtMDAwMAkxLjM5CisrKyBraHRtbC9jc3Mv
cGFyc2VyLnkJMjQgSnVuIDIwMDUgMDM6MDk6NDQgLTAwMDAKQEAgLTM0LDkgKzM0LDcgQEAKICNp
bmNsdWRlIDxjc3MvY3NzX3ZhbHVlaW1wbC5oPgogI2luY2x1ZGUgPG1pc2MvaHRtbGhhc2hlcy5o
PgogI2luY2x1ZGUgImNzc3BhcnNlci5oIgotCi0jaW5jbHVkZSAieG1sX25hbWVzcGFjZV90YWJs
ZS5oIgotICAgIAorICAgCiAjaW5jbHVkZSA8YXNzZXJ0Lmg+CiAjaW5jbHVkZSA8a2RlYnVnLmg+
CiAvLyAjZGVmaW5lIENTU19ERUJVRwpAQCAtMTMxLDcgKzEyOSw2IEBAIHN0YXRpYyBpbmxpbmUg
aW50IGdldFZhbHVlSUQoY29uc3QgY2hhciAKICAgICBmbG9hdCB2YWw7CiAgICAgaW50IHByb3Bf
aWQ7CiAgICAgaW50IGF0dHJpYnV0ZTsKLSAgICBpbnQgZWxlbWVudDsKICAgICBDU1NTZWxlY3Rv
cjo6UmVsYXRpb24gcmVsYXRpb247CiAgICAgYm9vbCBiOwogICAgIGludCBpOwpAQCAtMTc3LDYg
KzE3NCw4IEBAIHN0YXRpYyBpbnQgY3NzeXlsZXgoIFlZU1RZUEUgKnl5bHZhbCApIHsKICV0b2tl
biAnLicKICV0b2tlbiAnWycKIAorJXRva2VuIDxzdHJpbmc+ICcqJworCiAldG9rZW4gSU1QT1JU
X1NZTQogJXRva2VuIFBBR0VfU1lNCiAldG9rZW4gTUVESUFfU1lNCkBAIC0yNjYsNyArMjY1LDcg
QEAgc3RhdGljIGludCBjc3N5eWxleCggWVlTVFlQRSAqeXlsdmFsICkgewogJXR5cGUgPHZhbHVl
PiB1bmFyeV90ZXJtCiAldHlwZSA8dmFsdWU+IGZ1bmN0aW9uCiAKLSV0eXBlIDxlbGVtZW50PiBl
bGVtZW50X25hbWUKKyV0eXBlIDxzdHJpbmc+IGVsZW1lbnRfbmFtZQogCiAldHlwZSA8YXR0cmli
dXRlPiBhdHRyaWJfaWQKIApAQCAtNDA2LDcgKzQwNSw3IEBAIE5BTUVTUEFDRV9TWU0gbWF5YmVf
c3BhY2UgbWF5YmVfbnNfcHJlZmkKICNlbmRpZgogICAgIENTU1BhcnNlciAqcCA9IHN0YXRpY19j
YXN0PENTU1BhcnNlciAqPihwYXJzZXIpOwogICAgIGlmIChwLT5zdHlsZUVsZW1lbnQgJiYgcC0+
c3R5bGVFbGVtZW50LT5pc0NTU1N0eWxlU2hlZXQoKSkKLSAgICAgICAgc3RhdGljX2Nhc3Q8Q1NT
U3R5bGVTaGVldEltcGwqPihwLT5zdHlsZUVsZW1lbnQpLT5hZGROYW1lc3BhY2UocCwgZG9tU3Ry
aW5nKCQzKSwgZG9tU3RyaW5nKCQ0KSk7CisgICAgICAgIHN0YXRpY19jYXN0PENTU1N0eWxlU2hl
ZXRJbXBsKj4ocC0+c3R5bGVFbGVtZW50KS0+YWRkTmFtZXNwYWNlKHAsIGF0b21pY1N0cmluZygk
MyksIGF0b21pY1N0cmluZygkNCkpOwogfQogfCBOQU1FU1BBQ0VfU1lNIGVycm9yIGludmFsaWRf
YmxvY2sKIHwgTkFNRVNQQUNFX1NZTSBlcnJvciAnOycKQEAgLTYyNSw2NSArNjI0LDcxIEBAIG5h
bWVzcGFjZV9zZWxlY3RvcjoKIAogc2ltcGxlX3NlbGVjdG9yOgogICAgIGVsZW1lbnRfbmFtZSBt
YXliZV9zcGFjZSB7Ci0JJCQgPSBuZXcgQ1NTU2VsZWN0b3IoKTsKLQkkJC0+dGFnID0gJDE7Cisg
ICAgICAgIENTU1BhcnNlciAqcCA9IHN0YXRpY19jYXN0PENTU1BhcnNlciAqPihwYXJzZXIpOwor
CSQkID0gbmV3IENTU1NlbGVjdG9yKFF1YWxpZmllZE5hbWUobnVsbEF0b20sIGF0b21pY1N0cmlu
ZygkMSksIHAtPmRlZmF1bHROYW1lc3BhY2UpKTsKICAgICB9CiAgICAgfCBlbGVtZW50X25hbWUg
c3BlY2lmaWVyX2xpc3QgbWF5YmVfc3BhY2UgewotCSQkID0gJDI7Ci0JaWYgKCAkJCApCi0gICAg
ICAgICAgICAkJC0+dGFnID0gJDE7CisgICAgICAgICQkID0gJDI7CisJaWYgKCQkKSB7CisgICAg
ICAgICAgICBDU1NQYXJzZXIgKnAgPSBzdGF0aWNfY2FzdDxDU1NQYXJzZXIgKj4ocGFyc2VyKTsK
KyAgICAgICAgICAgICQkLT50YWcgPSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCBhdG9taWNTdHJp
bmcoJDEpLCBwLT5kZWZhdWx0TmFtZXNwYWNlKTsKKyAgICAgICAgfQogICAgIH0KICAgICB8IHNw
ZWNpZmllcl9saXN0IG1heWJlX3NwYWNlIHsKIAkkJCA9ICQxOwotICAgICAgICBpZiAoJCQpCi0g
ICAgICAgICAgICAkJC0+dGFnID0gbWFrZUlkKHN0YXRpY19jYXN0PENTU1BhcnNlcio+KHBhcnNl
ciktPmRlZmF1bHROYW1lc3BhY2UsIGFueUxvY2FsTmFtZSk7OworICAgICAgICBDU1NQYXJzZXIg
KnAgPSBzdGF0aWNfY2FzdDxDU1NQYXJzZXIgKj4ocGFyc2VyKTsKKyAgICAgICAgaWYgKCQkICYm
IHAtPmRlZmF1bHROYW1lc3BhY2UgIT0gc3RhckF0b20pCisgICAgICAgICAgICAkJC0+dGFnID0g
UXVhbGlmaWVkTmFtZShudWxsQXRvbSwgc3RhckF0b20sIHAtPmRlZmF1bHROYW1lc3BhY2UpOwog
ICAgIH0KICAgICB8IG5hbWVzcGFjZV9zZWxlY3RvciAnfCcgZWxlbWVudF9uYW1lIG1heWJlX3Nw
YWNlIHsKLSAgICAgICAgJCQgPSBuZXcgQ1NTU2VsZWN0b3IoKTsKLSAgICAgICAgJCQtPnRhZyA9
ICQzOworICAgICAgICBBdG9taWNTdHJpbmcgbmFtZXNwYWNlUHJlZml4ID0gYXRvbWljU3RyaW5n
KCQxKTsKICAgICAgICAgQ1NTUGFyc2VyICpwID0gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyICo+KHBh
cnNlcik7CiAgICAgICAgIGlmIChwLT5zdHlsZUVsZW1lbnQgJiYgcC0+c3R5bGVFbGVtZW50LT5p
c0NTU1N0eWxlU2hlZXQoKSkKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXRJ
bXBsKj4ocC0+c3R5bGVFbGVtZW50KS0+ZGV0ZXJtaW5lTmFtZXNwYWNlKCQkLT50YWcsIGRvbVN0
cmluZygkMSkpOworICAgICAgICAgICAgJCQgPSBuZXcgQ1NTU2VsZWN0b3IoUXVhbGlmaWVkTmFt
ZShuYW1lc3BhY2VQcmVmaXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGF0b21pY1N0cmluZygkMyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXRJbXBsKj4ocC0+c3R5
bGVFbGVtZW50KS0+ZGV0ZXJtaW5lTmFtZXNwYWNlKG5hbWVzcGFjZVByZWZpeCkpKTsKKyAgICAg
ICAgZWxzZSAvLyBGSVhNRTogU2hvdWxkbid0IHRoaXMgY2FzZSBiZSBhbiBlcnJvcj8KKyAgICAg
ICAgICAgICQkID0gbmV3IENTU1NlbGVjdG9yKFF1YWxpZmllZE5hbWUobnVsbEF0b20sIGF0b21p
Y1N0cmluZygkMyksIHAtPmRlZmF1bHROYW1lc3BhY2UpKTsKICAgICB9CiAgICAgfCBuYW1lc3Bh
Y2Vfc2VsZWN0b3IgJ3wnIGVsZW1lbnRfbmFtZSBzcGVjaWZpZXJfbGlzdCBtYXliZV9zcGFjZSB7
CiAgICAgICAgICQkID0gJDQ7CiAgICAgICAgIGlmICgkJCkgewotICAgICAgICAgICAgJCQtPnRh
ZyA9ICQzOworICAgICAgICAgICAgQXRvbWljU3RyaW5nIG5hbWVzcGFjZVByZWZpeCA9IGF0b21p
Y1N0cmluZygkMSk7CiAgICAgICAgICAgICBDU1NQYXJzZXIgKnAgPSBzdGF0aWNfY2FzdDxDU1NQ
YXJzZXIgKj4ocGFyc2VyKTsKICAgICAgICAgICAgIGlmIChwLT5zdHlsZUVsZW1lbnQgJiYgcC0+
c3R5bGVFbGVtZW50LT5pc0NTU1N0eWxlU2hlZXQoKSkKLSAgICAgICAgICAgICAgICBzdGF0aWNf
Y2FzdDxDU1NTdHlsZVNoZWV0SW1wbCo+KHAtPnN0eWxlRWxlbWVudCktPmRldGVybWluZU5hbWVz
cGFjZSgkJC0+dGFnLCBkb21TdHJpbmcoJDEpKTsKKyAgICAgICAgICAgICAgICAkJC0+dGFnID0g
UXVhbGlmaWVkTmFtZShuYW1lc3BhY2VQcmVmaXgsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYXRvbWljU3RyaW5nKCQzKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0SW1wbCo+KHAtPnN0eWxl
RWxlbWVudCktPmRldGVybWluZU5hbWVzcGFjZShuYW1lc3BhY2VQcmVmaXgpKTsKKyAgICAgICAg
ICAgIGVsc2UgLy8gRklYTUU6IFNob3VsZG4ndCB0aGlzIGNhc2UgYmUgYW4gZXJyb3I/CisgICAg
ICAgICAgICAgICAgJCQtPnRhZyA9IFF1YWxpZmllZE5hbWUobnVsbEF0b20sIGF0b21pY1N0cmlu
ZygkMyksIHAtPmRlZmF1bHROYW1lc3BhY2UpOwogICAgICAgICB9CiAgICAgfQogICAgIHwgbmFt
ZXNwYWNlX3NlbGVjdG9yICd8JyBzcGVjaWZpZXJfbGlzdCBtYXliZV9zcGFjZSB7CiAgICAgICAg
ICQkID0gJDM7CiAgICAgICAgIGlmICgkJCkgewotICAgICAgICAgICAgJCQtPnRhZyA9IG1ha2VJ
ZChhbnlOYW1lc3BhY2UsIGFueUxvY2FsTmFtZSk7CisgICAgICAgICAgICBBdG9taWNTdHJpbmcg
bmFtZXNwYWNlUHJlZml4ID0gYXRvbWljU3RyaW5nKCQxKTsKICAgICAgICAgICAgIENTU1BhcnNl
ciAqcCA9IHN0YXRpY19jYXN0PENTU1BhcnNlciAqPihwYXJzZXIpOwogICAgICAgICAgICAgaWYg
KHAtPnN0eWxlRWxlbWVudCAmJiBwLT5zdHlsZUVsZW1lbnQtPmlzQ1NTU3R5bGVTaGVldCgpKQot
ICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXRJbXBsKj4ocC0+c3R5bGVF
bGVtZW50KS0+ZGV0ZXJtaW5lTmFtZXNwYWNlKCQkLT50YWcsIGRvbVN0cmluZygkMSkpOworICAg
ICAgICAgICAgICAgICQkLT50YWcgPSBRdWFsaWZpZWROYW1lKG5hbWVzcGFjZVByZWZpeCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFyQXRvbSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0
SW1wbCo+KHAtPnN0eWxlRWxlbWVudCktPmRldGVybWluZU5hbWVzcGFjZShuYW1lc3BhY2VQcmVm
aXgpKTsKICAgICAgICAgfQogICAgIH0KICAgOwogCiBlbGVtZW50X25hbWU6CiAgICAgSURFTlQg
ewotCUNTU1BhcnNlciAqcCA9IHN0YXRpY19jYXN0PENTU1BhcnNlciAqPihwYXJzZXIpOworICAg
ICAgICBQYXJzZVN0cmluZyYgc3RyID0gJDE7CisgICAgICAgIENTU1BhcnNlciAqcCA9IHN0YXRp
Y19jYXN0PENTU1BhcnNlciAqPihwYXJzZXIpOwogCURPTTo6RG9jdW1lbnRJbXBsICpkb2MgPSBw
LT5kb2N1bWVudCgpOwotCVFTdHJpbmcgdGFnID0gcVN0cmluZygkMSk7Ci0JaWYgKCBkb2MgKSB7
Ci0JICAgIGlmIChkb2MtPmlzSFRNTERvY3VtZW50KCkpCi0JCXRhZyA9IHRhZy5sb3dlcigpOwot
CSAgICBjb25zdCBET01TdHJpbmcgZHRhZyh0YWcpOwotICAgICAgICAgICAgJCQgPSBtYWtlSWQo
cC0+ZGVmYXVsdE5hbWVzcGFjZSwgZG9jLT50YWdJZCgwLCBkdGFnLmltcGxlbWVudGF0aW9uKCks
IGZhbHNlKSk7Ci0JfSBlbHNlIHsKLQkgICAgJCQgPSBtYWtlSWQocC0+ZGVmYXVsdE5hbWVzcGFj
ZSwga2h0bWw6OmdldFRhZ0lEKHRhZy5sb3dlcigpLmFzY2lpKCksIHRhZy5sZW5ndGgoKSkpOwot
CSAgICAvLyB0aGlzIGNhc2Ugc2hvdWxkIG5ldmVyIGhhcHBlbiAtIG9ubHkgd2hlbiBsb2FkaW5n
Ci0JICAgIC8vIHRoZSBkZWZhdWx0IHN0eWxlc2hlZXQgLSB3aGljaCBtdXN0IG5vdCBjb250YWlu
IHVua25vd24gdGFncwotLy8gCSAgICBhc3NlcnQoJCQgIT0gMCk7Ci0JfQorCWlmIChkb2MgJiYg
ZG9jLT5pc0hUTUxEb2N1bWVudCgpKQorICAgICAgICAgICAgc3RyLmxvd2VyKCk7CisgICAgICAg
ICQkID0gc3RyOwogICAgIH0KICAgICB8ICcqJyB7Ci0JJCQgPSBtYWtlSWQoc3RhdGljX2Nhc3Q8
Q1NTUGFyc2VyKj4ocGFyc2VyKS0+ZGVmYXVsdE5hbWVzcGFjZSwgYW55TG9jYWxOYW1lKTsKKwlz
dGF0aWMgdW5zaWduZWQgc2hvcnQgc3RhciA9ICcqJzsKKyAgICAgICAgJCQuc3RyaW5nID0gJnN0
YXI7CisgICAgICAgICQkLmxlbmd0aCA9IDE7CiAgICAgfQogICA7CiAKQEAgLTc3MCwxOCArNzc1
LDIyIEBAIGF0dHJpYjoKICAgICAgICAgJCQgPSBuZXcgQ1NTU2VsZWN0b3IoKTsKICAgICAgICAg
JCQtPmF0dHIgPSAkNTsKICAgICAgICAgJCQtPm1hdGNoID0gQ1NTU2VsZWN0b3I6OlNldDsKLSAg
ICAgICAgQ1NTUGFyc2VyICpwID0gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyICo+KHBhcnNlcik7Ci0g
ICAgICAgIGlmIChwLT5zdHlsZUVsZW1lbnQgJiYgcC0+c3R5bGVFbGVtZW50LT5pc0NTU1N0eWxl
U2hlZXQoKSkKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXRJbXBsKj4ocC0+
c3R5bGVFbGVtZW50KS0+ZGV0ZXJtaW5lTmFtZXNwYWNlKCQkLT5hdHRyLCBkb21TdHJpbmcoJDMp
KTsKKyAgICAgICAgLy8gRklYTUU6IEZvciBub3cgd2UncmUgYnJlYWtpbmcgbmFtZXNwYWNlIHN1
cHBvcnQgb24gYXR0cmlidXRlcy4gIFdoZW4gd2Ugc3dpdGNoIHRvIGF0b21pY3N0cmluZywgdGhl
biB3ZSBjYW4gbWFrZQorICAgICAgICAvLyBpdCB3b3JrIGFnYWluLgorICAgICAgICAvL0NTU1Bh
cnNlciAqcCA9IHN0YXRpY19jYXN0PENTU1BhcnNlciAqPihwYXJzZXIpOworICAgICAgICAvL2lm
IChwLT5zdHlsZUVsZW1lbnQgJiYgcC0+c3R5bGVFbGVtZW50LT5pc0NTU1N0eWxlU2hlZXQoKSkK
KyAgICAgICAgLy8gICAgc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldEltcGwqPihwLT5zdHlsZUVs
ZW1lbnQpLT5kZXRlcm1pbmVOYW1lc3BhY2UoJCQtPmF0dHIsIGRvbVN0cmluZygkMykpOwogICAg
IH0KICAgICB8ICdbJyBtYXliZV9zcGFjZSBuYW1lc3BhY2Vfc2VsZWN0b3IgJ3wnIGF0dHJpYl9p
ZCBtYXRjaCBtYXliZV9zcGFjZSBpZGVudF9vcl9zdHJpbmcgbWF5YmVfc3BhY2UgJ10nIHsKICAg
ICAgICAgJCQgPSBuZXcgQ1NTU2VsZWN0b3IoKTsKICAgICAgICAgJCQtPmF0dHIgPSAkNTsKICAg
ICAgICAgJCQtPm1hdGNoID0gKENTU1NlbGVjdG9yOjpNYXRjaCkkNjsKICAgICAgICAgJCQtPnZh
bHVlID0gYXRvbWljU3RyaW5nKCQ4KTsKLSAgICAgICAgQ1NTUGFyc2VyICpwID0gc3RhdGljX2Nh
c3Q8Q1NTUGFyc2VyICo+KHBhcnNlcik7Ci0gICAgICAgIGlmIChwLT5zdHlsZUVsZW1lbnQgJiYg
cC0+c3R5bGVFbGVtZW50LT5pc0NTU1N0eWxlU2hlZXQoKSkKLSAgICAgICAgICAgIHN0YXRpY19j
YXN0PENTU1N0eWxlU2hlZXRJbXBsKj4ocC0+c3R5bGVFbGVtZW50KS0+ZGV0ZXJtaW5lTmFtZXNw
YWNlKCQkLT5hdHRyLCBkb21TdHJpbmcoJDMpKTsKKyAgICAgICAgLy8gRklYTUU6IEZvciBub3cg
d2UncmUgYnJlYWtpbmcgbmFtZXNwYWNlIHN1cHBvcnQgb24gYXR0cmlidXRlcy4gIFdoZW4gd2Ug
c3dpdGNoIHRvIGF0b21pY3N0cmluZywgdGhlbiB3ZSBjYW4gbWFrZQorICAgICAgICAvLyBpdCB3
b3JrIGFnYWluLgorICAgICAgICAvL0NTU1BhcnNlciAqcCA9IHN0YXRpY19jYXN0PENTU1BhcnNl
ciAqPihwYXJzZXIpOworICAgICAgICAvL2lmIChwLT5zdHlsZUVsZW1lbnQgJiYgcC0+c3R5bGVF
bGVtZW50LT5pc0NTU1N0eWxlU2hlZXQoKSkKKyAgICAgICAgLy8gICAgc3RhdGljX2Nhc3Q8Q1NT
U3R5bGVTaGVldEltcGwqPihwLT5zdHlsZUVsZW1lbnQpLT5kZXRlcm1pbmVOYW1lc3BhY2UoJCQt
PmF0dHIsIGRvbVN0cmluZygkMykpOwogICAgIH0KICAgOwogCkluZGV4OiBraHRtbC9kb20vY3Nz
X3N0eWxlc2hlZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2to
dG1sL2RvbS9jc3Nfc3R5bGVzaGVldC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuOApkaWZm
IC11IC1wIC1yMS44IGtodG1sL2RvbS9jc3Nfc3R5bGVzaGVldC5jcHAKLS0tIGtodG1sL2RvbS9j
c3Nfc3R5bGVzaGVldC5jcHAJMjAgTWF5IDIwMDQgMTU6MDk6MzIgLTAwMDAJMS44CisrKyBraHRt
bC9kb20vY3NzX3N0eWxlc2hlZXQuY3BwCTI0IEp1biAyMDA1IDAzOjA5OjQ0IC0wMDAwCkBAIC0z
ODUsNyArMzg1LDcgQEAgTGlua1N0eWxlICYgTGlua1N0eWxlOjpvcGVyYXRvciA9IChjb25zdAog
CiAgICAgLy8gIyMjIGNoZWNrIGxpbmsgaXMgcmVhbGx5IGxpbmtpbmcgYSBzdHlsZSBzaGVldAog
ICAgIGlmKCBuICYmIG4tPmlzRWxlbWVudE5vZGUoKSAmJgotCShuLT5pZCgpID09IElEX1NUWUxF
IHx8IG4tPmlkKCkgPT0gSURfTElOSykgKSB7CisJKG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpz
dHlsZSgpKSB8fCBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6bGluaygpKSkpIHsKICAgICBub2Rl
ID0gbjsKICAgICBpZihub2RlKSBub2RlLT5yZWYoKTsKICAgICB9CkBAIC0zOTksMTIgKzM5OSwx
NCBAQCBMaW5rU3R5bGU6On5MaW5rU3R5bGUoKQogCiBTdHlsZVNoZWV0IExpbmtTdHlsZTo6c2hl
ZXQoKQogewotICAgIGludCBpZCA9IG5vZGUgPyBub2RlLT5pZCgpIDogMDsKKyAgICBpZiAoIW5v
ZGUpCisgICAgICAgIHJldHVybiBTdHlsZVNoZWV0KCk7CisKICAgICAvLyAjIyMgYWRkIFBJCiAg
ICAgcmV0dXJuIAotCSggaWQgPT0gSURfU1RZTEUpID8KKwkobm9kZS0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OnN0eWxlKCkpKSA/CiAJc3RhdGljX2Nhc3Q8SFRNTFN0eWxlRWxlbWVudEltcGwgKj4o
bm9kZSktPnNoZWV0KCkKLQk6ICggKGlkID09IElEX0xJTkspID8KKwk6ICggbm9kZS0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OmxpbmsoKSkgPwogCSAgICBzdGF0aWNfY2FzdDxIVE1MTGlua0VsZW1l
bnRJbXBsICo+KG5vZGUpLT5zaGVldCgpCiAJICAgIDogU3R5bGVTaGVldCgpICk7CiB9CkluZGV4
OiBraHRtbC9kb20vZG9tX2VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9XZWJDb3JlL2todG1sL2RvbS9kb21fZWxlbWVudC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuMTIKZGlmZiAtdSAtcCAtcjEuMTIga2h0bWwvZG9tL2RvbV9lbGVtZW50LmNwcAotLS0ga2h0
bWwvZG9tL2RvbV9lbGVtZW50LmNwcAkxMiBNYXkgMjAwNSAxNzoxMToyMSAtMDAwMAkxLjEyCisr
KyBraHRtbC9kb20vZG9tX2VsZW1lbnQuY3BwCTI0IEp1biAyMDA1IDAzOjA5OjQ0IC0wMDAwCkBA
IC0xNDEsNyArMTQxLDcgQEAgRWxlbWVudDo6fkVsZW1lbnQoKQogRE9NU3RyaW5nIEVsZW1lbnQ6
OnRhZ05hbWUoKSBjb25zdAogewogICAgIGlmICghaW1wbCkgdGhyb3cgRE9NRXhjZXB0aW9uKERP
TUV4Y2VwdGlvbjo6Tk9UX0ZPVU5EX0VSUik7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEVsZW1l
bnRJbXBsKj4oaW1wbCktPnRhZ05hbWUoKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RWxlbWVu
dEltcGwqPihpbXBsKS0+bm9kZU5hbWUoKTsKIH0KIAogRE9NU3RyaW5nIEVsZW1lbnQ6OmdldEF0
dHJpYnV0ZSggY29uc3QgRE9NU3RyaW5nICZuYW1lICkKSW5kZXg6IGtodG1sL2RvbS9kb21fbm9k
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZG9tL2Rv
bV9ub2RlLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMgpkaWZmIC11IC1wIC1yMS4xMiBr
aHRtbC9kb20vZG9tX25vZGUuY3BwCi0tLSBraHRtbC9kb20vZG9tX25vZGUuY3BwCTExIE1heSAy
MDA1IDAwOjU4OjI4IC0wMDAwCTEuMTIKKysrIGtodG1sL2RvbS9kb21fbm9kZS5jcHAJMjQgSnVu
IDIwMDUgMDM6MDk6NDYgLTAwMDAKQEAgLTMyNCw3ICszMjQsNyBAQCBib29sIE5vZGU6OmlzU3Vw
cG9ydGVkKCBjb25zdCBET01TdHJpbmcgCiBET01TdHJpbmcgTm9kZTo6bmFtZXNwYWNlVVJJKCAg
KSBjb25zdAogewogICAgIGlmICghaW1wbCkgcmV0dXJuIERPTVN0cmluZygpOwotICAgIHJldHVy
biBpbXBsLT5nZXREb2N1bWVudCgpLT5uYW1lc3BhY2VVUkkoaW1wbC0+aWQoKSk7CisgICAgcmV0
dXJuIGltcGwtPm5hbWVzcGFjZVVSSSgpOwogfQogCiBET01TdHJpbmcgTm9kZTo6cHJlZml4KCAg
KSBjb25zdApAQCAtMzM3LDcgKzMzNyw3IEBAIHZvaWQgTm9kZTo6c2V0UHJlZml4KGNvbnN0IERP
TVN0cmluZyAmcHIKIHsKICAgICBpZiAoIWltcGwpIHRocm93IERPTUV4Y2VwdGlvbihET01FeGNl
cHRpb246Ok5PVF9GT1VORF9FUlIpOwogICAgIGludCBleGNlcHRpb25jb2RlID0gMDsKLSAgICBp
bXBsLT5zZXRQcmVmaXgocHJlZml4LGV4Y2VwdGlvbmNvZGUpOworICAgIGltcGwtPnNldFByZWZp
eChwcmVmaXguaW1wbGVtZW50YXRpb24oKSxleGNlcHRpb25jb2RlKTsKICAgICBpZiAoZXhjZXB0
aW9uY29kZSkKICAgICAgICAgdGhyb3cgRE9NRXhjZXB0aW9uKGV4Y2VwdGlvbmNvZGUpOwogfQpA
QCAtMzc2LDEzICszNzYsNiBAQCBib29sIE5vZGU6OmRpc3BhdGNoRXZlbnQoY29uc3QgRXZlbnQg
JmV2CiAgICAgcmV0dXJuIHI7CiB9CiAKLQotdW5zaWduZWQgaW50IE5vZGU6OmVsZW1lbnRJZCgp
IGNvbnN0Ci17Ci0gICAgaWYgKCFpbXBsKSByZXR1cm4gMDsKLSAgICByZXR1cm4gaW1wbC0+aWQo
KTsKLX0KLQogdW5zaWduZWQgbG9uZyBOb2RlOjppbmRleCgpIGNvbnN0CiB7CiAgICAgaWYgKCFp
bXBsKSByZXR1cm4gMDsKSW5kZXg6IGtodG1sL2RvbS9kb21fbm9kZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2RvbS9kb21fbm9kZS5oLHYKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjEyCmRpZmYgLXUgLXAgLXIxLjEyIGtodG1sL2RvbS9kb21fbm9kZS5oCi0t
LSBraHRtbC9kb20vZG9tX25vZGUuaAkxOCBNYXkgMjAwNSAyMToxMDoyNCAtMDAwMAkxLjEyCisr
KyBraHRtbC9kb20vZG9tX25vZGUuaAkyNCBKdW4gMjAwNSAwMzowOTo0NyAtMDAwMApAQCAtODU1
LDEzICs4NTUsNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBkaXNwYXRjaEV2ZW50KGNvbnN0IEV2ZW50
ICZldnQpOwogCiAgICAgLyoqCi0gICAgICogQGludGVybmFsCi0gICAgICogbm90IHBhcnQgb2Yg
dGhlIERPTS4KLSAgICAgKiBAcmV0dXJucyB0aGUgZWxlbWVudCBpZCwgaW4gY2FzZSB0aGlzIGlz
IGFuIGVsZW1lbnQsIDAgb3RoZXJ3aXNlCi0gICAgICovCi0gICAgUV9VSU5UMzIgZWxlbWVudElk
KCkgY29uc3Q7Ci0KLSAgICAvKioKICAgICAgKiB0ZXN0cyBpZiB0aGlzIE5vZGUgaXMgMC4gVXNl
ZnVsIGVzcGVjaWFsbHksIGlmIGNhc3RpbmcgdG8gYSBkZXJpdmVkCiAgICAgICogY2xhc3M6CiAg
ICAgICoKSW5kZXg6IGtodG1sL2RvbS9odG1sX2Jhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2RvbS9odG1sX2Jhc2UuY3BwLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjYKZGlmZiAtdSAtcCAtcjEuNiBraHRtbC9kb20vaHRtbF9iYXNlLmNwcAotLS0g
a2h0bWwvZG9tL2h0bWxfYmFzZS5jcHAJMyBOb3YgMjAwMyAwNjozMjowNCAtMDAwMAkxLjYKKysr
IGtodG1sL2RvbS9odG1sX2Jhc2UuY3BwCTI0IEp1biAyMDA1IDAzOjA5OjQ3IC0wMDAwCkBAIC00
MSw3ICs0MSw3IEBAIEhUTUxCb2R5RWxlbWVudDo6SFRNTEJvZHlFbGVtZW50KEhUTUxCb2QKIAog
SFRNTEJvZHlFbGVtZW50ICZIVE1MQm9keUVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUg
Jm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfQk9EWSApOworICAgIGFzc2ln
bk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpib2R5KCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9
CiAKQEAgLTEzNSw3ICsxMzUsNyBAQCBIVE1MRnJhbWVFbGVtZW50OjpIVE1MRnJhbWVFbGVtZW50
KEhUTUxGCiAKIEhUTUxGcmFtZUVsZW1lbnQgJkhUTUxGcmFtZUVsZW1lbnQ6Om9wZXJhdG9yID0g
KGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfRlJBTUUg
KTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6ZnJhbWUoKSApOwogICAgIHJl
dHVybiAqdGhpczsKIH0KIApAQCAtMjY1LDcgKzI2NSw3IEBAIEhUTUxJRnJhbWVFbGVtZW50OjpI
VE1MSUZyYW1lRWxlbWVudChIVE0KIAogSFRNTElGcmFtZUVsZW1lbnQgJkhUTUxJRnJhbWVFbGVt
ZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlcigg
b3RoZXIsIElEX0lGUkFNRSApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpp
ZnJhbWUoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtNDE0LDcgKzQxNCw3IEBAIEhU
TUxGcmFtZVNldEVsZW1lbnQ6OkhUTUxGcmFtZVNldEVsZW1lbnQKIAogSFRNTEZyYW1lU2V0RWxl
bWVudCAmSFRNTEZyYW1lU2V0RWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIp
CiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9GUkFNRVNFVCApOworICAgIGFzc2lnbk90
aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpmcmFtZXNldCgpICk7CiAgICAgcmV0dXJuICp0aGlzOwog
fQogCkBAIC00NjYsNyArNDY2LDcgQEAgSFRNTEhlYWRFbGVtZW50OjpIVE1MSGVhZEVsZW1lbnQo
SFRNTEhlYQogCiBIVE1MSGVhZEVsZW1lbnQgJkhUTUxIZWFkRWxlbWVudDo6b3BlcmF0b3IgPSAo
Y29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9IRUFEICk7
CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OmhlYWQoKSApOwogICAgIHJldHVy
biAqdGhpczsKIH0KIApAQCAtNTA3LDcgKzUwNyw3IEBAIEhUTUxIdG1sRWxlbWVudDo6SFRNTEh0
bWxFbGVtZW50KEhUTUxIdG0KIAogSFRNTEh0bWxFbGVtZW50ICZIVE1MSHRtbEVsZW1lbnQ6Om9w
ZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwg
SURfSFRNTCApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpodG1sKCkgKTsK
ICAgICByZXR1cm4gKnRoaXM7CiB9CiAKSW5kZXg6IGtodG1sL2RvbS9odG1sX2Jsb2NrLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9kb20vaHRtbF9ibG9j
ay5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNApkaWZmIC11IC1wIC1yMS40IGtodG1sL2Rv
bS9odG1sX2Jsb2NrLmNwcAotLS0ga2h0bWwvZG9tL2h0bWxfYmxvY2suY3BwCTEwIEp1biAyMDAy
IDIwOjA3OjM0IC0wMDAwCTEuNAorKysga2h0bWwvZG9tL2h0bWxfYmxvY2suY3BwCTI0IEp1biAy
MDA1IDAzOjA5OjQ3IC0wMDAwCkBAIC00Myw3ICs0Myw3IEBAIEhUTUxCbG9ja3F1b3RlRWxlbWVu
dDo6SFRNTEJsb2NrcXVvdGVFbGUKIAogSFRNTEJsb2NrcXVvdGVFbGVtZW50ICZIVE1MQmxvY2tx
dW90ZUVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2ln
bk90aGVyKCBvdGhlciwgSURfQkxPQ0tRVU9URSApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwg
SFRNTE5hbWVzOjpibG9ja3F1b3RlKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTg0
LDcgKzg0LDcgQEAgSFRNTERpdkVsZW1lbnQ6OkhUTUxEaXZFbGVtZW50KEhUTUxEaXZFbAogCiBI
VE1MRGl2RWxlbWVudCAmSFRNTERpdkVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90
aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfRElWICk7CisgICAgYXNzaWduT3Ro
ZXIoIG90aGVyLCBIVE1MTmFtZXM6OmRpdigpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBA
IC0xMjUsNyArMTI1LDcgQEAgSFRNTEhSRWxlbWVudDo6SFRNTEhSRWxlbWVudChIVE1MSFJFbGVt
ZQogCiBIVE1MSFJFbGVtZW50ICZIVE1MSFJFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2Rl
ICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0hSICk7CisgICAgYXNzaWdu
T3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OmhyKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAK
QEAgLTIwNSwxNiArMjA1LDE3IEBAIEhUTUxIZWFkaW5nRWxlbWVudDo6SFRNTEhlYWRpbmdFbGVt
ZW50KEgKIAogSFRNTEhlYWRpbmdFbGVtZW50ICZIVE1MSGVhZGluZ0VsZW1lbnQ6Om9wZXJhdG9y
ID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGlmKG90aGVyLmVsZW1lbnRJZCgpICE9IElE
X0gxIHx8Ci0gICAgICAgb3RoZXIuZWxlbWVudElkKCkgIT0gSURfSDIgfHwKLSAgICAgICBvdGhl
ci5lbGVtZW50SWQoKSAhPSBJRF9IMyB8fAotICAgICAgIG90aGVyLmVsZW1lbnRJZCgpICE9IElE
X0g0IHx8Ci0gICAgICAgb3RoZXIuZWxlbWVudElkKCkgIT0gSURfSDUgfHwKLSAgICAgICBvdGhl
ci5lbGVtZW50SWQoKSAhPSBJRF9INiApCisgICAgaWYgKCFvdGhlci5oYW5kbGUoKS0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OmgxKCkpICYmCisgICAgICAgICFvdGhlci5oYW5kbGUoKS0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OmgyKCkpICYmCisgICAgICAgICFvdGhlci5oYW5kbGUoKS0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OmgzKCkpICYmCisgICAgICAgICFvdGhlci5oYW5kbGUoKS0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6Omg0KCkpICYmCisgICAgICAgICFvdGhlci5oYW5kbGUoKS0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6Omg1KCkpICYmCisgICAgICAgICFvdGhlci5oYW5kbGUoKS0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6Omg2KCkpKQogICAgIHsKIAlpZiAoIGltcGwgKSBpbXBsLT5kZXJlZigp
OwogCWltcGwgPSAwOwogICAgIH0gZWxzZSB7CisKICAgICBOb2RlOjpvcGVyYXRvciA9IChvdGhl
cik7CiAgICAgfQogICAgIHJldHVybiAqdGhpczsKQEAgLTI1Nyw3ICsyNTgsNyBAQCBIVE1MUGFy
YWdyYXBoRWxlbWVudDo6SFRNTFBhcmFncmFwaEVsZW1lCiAKIEhUTUxQYXJhZ3JhcGhFbGVtZW50
ICZIVE1MUGFyYWdyYXBoRWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7
Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9QICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVy
LCBIVE1MTmFtZXM6OnAoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtMjk4LDcgKzI5
OSw3IEBAIEhUTUxQcmVFbGVtZW50OjpIVE1MUHJlRWxlbWVudChIVE1MUHJlRWwKIAogSFRNTFBy
ZUVsZW1lbnQgJkhUTUxQcmVFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikK
IHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX1BSRSApOworICAgIGFzc2lnbk90aGVyKCBv
dGhlciwgSFRNTE5hbWVzOjpwcmUoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApJbmRleDog
a2h0bWwvZG9tL2h0bWxfZWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L1dlYkNvcmUva2h0bWwvZG9tL2h0bWxfZWxlbWVudC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuMTQKZGlmZiAtdSAtcCAtcjEuMTQga2h0bWwvZG9tL2h0bWxfZWxlbWVudC5jcHAKLS0tIGto
dG1sL2RvbS9odG1sX2VsZW1lbnQuY3BwCTExIE1heSAyMDA1IDAwOjU4OjI4IC0wMDAwCTEuMTQK
KysrIGtodG1sL2RvbS9odG1sX2VsZW1lbnQuY3BwCTI0IEp1biAyMDA1IDAzOjA5OjQ3IC0wMDAw
CkBAIC0xODIsOSArMTgyLDkgQEAgSFRNTENvbGxlY3Rpb24gSFRNTEVsZW1lbnQ6OmNoaWxkcmVu
KCkgYwogICAgIHJldHVybiBIVE1MQ29sbGVjdGlvbihpbXBsLCBIVE1MQ29sbGVjdGlvbkltcGw6
Ok5PREVfQ0hJTERSRU4pOwogfQogCi12b2lkIEhUTUxFbGVtZW50Ojphc3NpZ25PdGhlciggY29u
c3QgTm9kZSAmb3RoZXIsIGludCBlbGVtZW50SWQgKQordm9pZCBIVE1MRWxlbWVudDo6YXNzaWdu
T3RoZXIoIGNvbnN0IE5vZGUgJm90aGVyLCBjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lICkK
IHsKLSAgICBpZigoaW50KW90aGVyLmVsZW1lbnRJZCgpICE9IGVsZW1lbnRJZCkgeworICAgIGlm
ICghb3RoZXIuaGFuZGxlKCktPmhhc1RhZ05hbWUodGFnTmFtZSkpIHsKIAlpZiAoIGltcGwgKSBp
bXBsLT5kZXJlZigpOwogCWltcGwgPSAwOwogICAgIH0gZWxzZSB7CkluZGV4OiBraHRtbC9kb20v
aHRtbF9lbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0
bWwvZG9tL2h0bWxfZWxlbWVudC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjgKZGlmZiAtdSAt
cCAtcjEuOCBraHRtbC9kb20vaHRtbF9lbGVtZW50LmgKLS0tIGtodG1sL2RvbS9odG1sX2VsZW1l
bnQuaAkyMiBNYXkgMjAwNCAwMTo1MDo0OCAtMDAwMAkxLjgKKysrIGtodG1sL2RvbS9odG1sX2Vs
ZW1lbnQuaAkyNCBKdW4gMjAwNSAwMzowOTo0OCAtMDAwMApAQCAtMzAsNiArMzAsOCBAQAogI2Rl
ZmluZSBIVE1MX0VMRU1FTlRfSAogCiAjaW5jbHVkZSA8ZG9tL2RvbV9lbGVtZW50Lmg+CisjaW5j
bHVkZSAiZG9tX3FuYW1lLmgiCisKIGNsYXNzIEtIVE1MVmlldzsKIAogbmFtZXNwYWNlIERPTSB7
CkBAIC0yMjUsNyArMjI3LDcgQEAgcHJvdGVjdGVkOgogICAgIC8qCiAgICAgICogQGludGVybmFs
CiAgICAgICovCi0gICAgdm9pZCBhc3NpZ25PdGhlciggY29uc3QgTm9kZSAmb3RoZXIsIGludCBl
bGVtZW50SWQgKTsKKyAgICB2b2lkIGFzc2lnbk90aGVyKCBjb25zdCBOb2RlICZvdGhlciwgY29u
c3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSApOwogfTsKIAogfTsgLy9uYW1lc3BhY2UKSW5kZXg6
IGtodG1sL2RvbS9odG1sX2Zvcm0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9X
ZWJDb3JlL2todG1sL2RvbS9odG1sX2Zvcm0uY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEx
CmRpZmYgLXUgLXAgLXIxLjExIGtodG1sL2RvbS9odG1sX2Zvcm0uY3BwCi0tLSBraHRtbC9kb20v
aHRtbF9mb3JtLmNwcAkxMSBNYXkgMjAwNSAwMDo1ODoyOCAtMDAwMAkxLjExCisrKyBraHRtbC9k
b20vaHRtbF9mb3JtLmNwcAkyNCBKdW4gMjAwNSAwMzowOTo0OCAtMDAwMApAQCAtNDcsNyArNDcs
NyBAQCBIVE1MQnV0dG9uRWxlbWVudDo6SFRNTEJ1dHRvbkVsZW1lbnQoSFRNCiAKIEhUTUxCdXR0
b25FbGVtZW50ICZIVE1MQnV0dG9uRWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3Ro
ZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9CVVRUT04gKTsJCisgICAgYXNzaWdu
T3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OmJ1dHRvbigpICk7CQogICAgIHJldHVybiAqdGhpczsK
IH0KIApAQCAtMTU3LDcgKzE1Nyw3IEBAIEhUTUxGaWVsZFNldEVsZW1lbnQ6OkhUTUxGaWVsZFNl
dEVsZW1lbnQKIAogSFRNTEZpZWxkU2V0RWxlbWVudCAmSFRNTEZpZWxkU2V0RWxlbWVudDo6b3Bl
cmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJ
RF9GSUVMRFNFVCApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpmaWVsZHNl
dCgpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC0xOTMsNyArMTkzLDcgQEAgSFRNTEZv
cm1FbGVtZW50OjpIVE1MRm9ybUVsZW1lbnQoSFRNTEZvcgogCiBIVE1MRm9ybUVsZW1lbnQgJkhU
TUxGb3JtRWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNz
aWduT3RoZXIoIG90aGVyLCBJRF9GT1JNICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1M
TmFtZXM6OmZvcm0oKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtMzExLDcgKzMxMSw3
IEBAIEhUTUxJbnB1dEVsZW1lbnQ6OkhUTUxJbnB1dEVsZW1lbnQoSFRNTEkKIAogSFRNTElucHV0
RWxlbWVudCAmSFRNTElucHV0RWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIp
CiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9JTlBVVCApOworICAgIGFzc2lnbk90aGVy
KCBvdGhlciwgSFRNTE5hbWVzOjppbnB1dCgpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBA
IC01NzQsNyArNTc0LDcgQEAgSFRNTExhYmVsRWxlbWVudDo6SFRNTExhYmVsRWxlbWVudChIVE1M
TAogCiBIVE1MTGFiZWxFbGVtZW50ICZIVE1MTGFiZWxFbGVtZW50OjpvcGVyYXRvciA9IChjb25z
dCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0xBQkVMICk7Cisg
ICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OmxhYmVsKCkgKTsKICAgICByZXR1cm4g
KnRoaXM7CiB9CiAKQEAgLTYzMyw3ICs2MzMsNyBAQCBIVE1MTGVnZW5kRWxlbWVudDo6SFRNTExl
Z2VuZEVsZW1lbnQoSFRNCiAKIEhUTUxMZWdlbmRFbGVtZW50ICZIVE1MTGVnZW5kRWxlbWVudDo6
b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVy
LCBJRF9MRUdFTkQgKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6bGVnZW5k
KCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTY5MSw3ICs2OTEsNyBAQCBIVE1MT3B0
R3JvdXBFbGVtZW50OjpIVE1MT3B0R3JvdXBFbGVtZW50CiAKIEhUTUxPcHRHcm91cEVsZW1lbnQg
JkhUTUxPcHRHcm91cEVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewot
ICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfT1BUR1JPVVAgKTsKKyAgICBhc3NpZ25PdGhlcigg
b3RoZXIsIEhUTUxOYW1lczo6b3B0Z3JvdXAoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApA
QCAtNzQ0LDcgKzc0NCw3IEBAIEhUTUxTZWxlY3RFbGVtZW50OjpIVE1MU2VsZWN0RWxlbWVudChI
VE0KIAogSFRNTFNlbGVjdEVsZW1lbnQgJkhUTUxTZWxlY3RFbGVtZW50OjpvcGVyYXRvciA9IChj
b25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX1NFTEVDVCAp
OworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpzZWxlY3QoKSApOwogICAgIHJl
dHVybiAqdGhpczsKIH0KIApAQCAtOTA2LDcgKzkwNiw3IEBAIEhUTUxUZXh0QXJlYUVsZW1lbnQ6
OkhUTUxUZXh0QXJlYUVsZW1lbnQKIAogSFRNTFRleHRBcmVhRWxlbWVudCAmSFRNTFRleHRBcmVh
RWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3Ro
ZXIoIG90aGVyLCBJRF9URVhUQVJFQSApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5h
bWVzOjp0ZXh0YXJlYSgpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC0xMDc0LDcgKzEw
NzQsNyBAQCBIVE1MT3B0aW9uRWxlbWVudDo6SFRNTE9wdGlvbkVsZW1lbnQoSFRNCiAKIEhUTUxP
cHRpb25FbGVtZW50ICZIVE1MT3B0aW9uRWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAm
b3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9PUFRJT04gKTsKKyAgICBhc3Np
Z25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6b3B0aW9uKCkgKTsKICAgICByZXR1cm4gKnRoaXM7
CiB9CiAKQEAgLTExODIsNyArMTE4Miw3IEBAIEhUTUxJc0luZGV4RWxlbWVudDo6SFRNTElzSW5k
ZXhFbGVtZW50KEgKIAogSFRNTElzSW5kZXhFbGVtZW50ICZIVE1MSXNJbmRleEVsZW1lbnQ6Om9w
ZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwg
SURfSVNJTkRFWCApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjppc2luZGV4
KCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKSW5kZXg6IGtodG1sL2RvbS9odG1sX2hlYWQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2RvbS9odG1s
X2hlYWQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEwCmRpZmYgLXUgLXAgLXIxLjEwIGto
dG1sL2RvbS9odG1sX2hlYWQuY3BwCi0tLSBraHRtbC9kb20vaHRtbF9oZWFkLmNwcAkyMiBKdW4g
MjAwNSAxODoyMjowMSAtMDAwMAkxLjEwCisrKyBraHRtbC9kb20vaHRtbF9oZWFkLmNwcAkyNCBK
dW4gMjAwNSAwMzowOTo0OSAtMDAwMApAQCAtNDIsNyArNDIsNyBAQCBIVE1MQmFzZUVsZW1lbnQ6
OkhUTUxCYXNlRWxlbWVudChIVE1MQmFzCiAKIEhUTUxCYXNlRWxlbWVudCAmSFRNTEJhc2VFbGVt
ZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlcigg
b3RoZXIsIElEX0JBU0UgKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6YmFz
ZSgpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC05Nyw3ICs5Nyw3IEBAIEhUTUxMaW5r
RWxlbWVudDo6SFRNTExpbmtFbGVtZW50KEhUTUxMaW4KIAogSFRNTExpbmtFbGVtZW50ICZIVE1M
TGlua0VsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2ln
bk90aGVyKCBvdGhlciwgSURfTElOSyApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5h
bWVzOjpsaW5rKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTIzOCw3ICsyMzgsNyBA
QCBIVE1MTWV0YUVsZW1lbnQ6OkhUTUxNZXRhRWxlbWVudChIVE1MTWV0CiAKIEhUTUxNZXRhRWxl
bWVudCAmSFRNTE1ldGFFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsK
LSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX01FVEEgKTsKKyAgICBhc3NpZ25PdGhlciggb3Ro
ZXIsIEhUTUxOYW1lczo6bWV0YSgpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC0zMTIs
NyArMzEyLDcgQEAgSFRNTFNjcmlwdEVsZW1lbnQ6OkhUTUxTY3JpcHRFbGVtZW50KEhUTQogCiBI
VE1MU2NyaXB0RWxlbWVudCAmSFRNTFNjcmlwdEVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5v
ZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfU0NSSVBUICk7CisgICAg
YXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OnNjcmlwdCgpICk7CiAgICAgcmV0dXJuICp0
aGlzOwogfQogCkBAIC00MjQsNyArNDI0LDcgQEAgSFRNTFN0eWxlRWxlbWVudDo6SFRNTFN0eWxl
RWxlbWVudChIVE1MUwogCiBIVE1MU3R5bGVFbGVtZW50ICZIVE1MU3R5bGVFbGVtZW50OjpvcGVy
YXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElE
X1NUWUxFICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OnN0eWxlKCkgKTsK
ICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTQ5Niw3ICs0OTYsNyBAQCBIVE1MVGl0bGVFbGVt
ZW50OjpIVE1MVGl0bGVFbGVtZW50KEhUTUxUCiAKIEhUTUxUaXRsZUVsZW1lbnQgJkhUTUxUaXRs
ZUVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90
aGVyKCBvdGhlciwgSURfVElUTEUgKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1l
czo6dGl0bGUoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApJbmRleDoga2h0bWwvZG9tL2h0
bWxfaW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1s
L2RvbS9odG1sX2ltYWdlLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS45CmRpZmYgLXUgLXAg
LXIxLjkga2h0bWwvZG9tL2h0bWxfaW1hZ2UuY3BwCi0tLSBraHRtbC9kb20vaHRtbF9pbWFnZS5j
cHAJMyBOb3YgMjAwMyAwNjozMjowNCAtMDAwMAkxLjkKKysrIGtodG1sL2RvbS9odG1sX2ltYWdl
LmNwcAkyNCBKdW4gMjAwNSAwMzowOTo0OSAtMDAwMApAQCAtNDYsNyArNDYsNyBAQCBIVE1MQXJl
YUVsZW1lbnQ6OkhUTUxBcmVhRWxlbWVudChIVE1MQXJlCiAKIEhUTUxBcmVhRWxlbWVudCAmSFRN
TEFyZWFFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3Np
Z25PdGhlciggb3RoZXIsIElEX0FSRUEgKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxO
YW1lczo6YXJlYSgpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC0xNzYsNyArMTc2LDcg
QEAgSFRNTEltYWdlRWxlbWVudDo6SFRNTEltYWdlRWxlbWVudChIVE1MSQogCiBIVE1MSW1hZ2VF
bGVtZW50ICZIVE1MSW1hZ2VFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikK
IHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0lNRyApOworICAgIGFzc2lnbk90aGVyKCBv
dGhlciwgSFRNTE5hbWVzOjppbWcoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtMzcy
LDcgKzM3Miw3IEBAIEhUTUxNYXBFbGVtZW50OjpIVE1MTWFwRWxlbWVudChIVE1MTWFwRWwKIAog
SFRNTE1hcEVsZW1lbnQgJkhUTUxNYXBFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZv
dGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX01BUCApOworICAgIGFzc2lnbk90
aGVyKCBvdGhlciwgSFRNTE5hbWVzOjptYXAoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApJ
bmRleDoga2h0bWwvZG9tL2h0bWxfaW5saW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvV2ViQ29yZS9raHRtbC9kb20vaHRtbF9pbmxpbmUuY3BwLHYKcmV0cmlldmluZyByZXZp
c2lvbiAxLjcKZGlmZiAtdSAtcCAtcjEuNyBraHRtbC9kb20vaHRtbF9pbmxpbmUuY3BwCi0tLSBr
aHRtbC9kb20vaHRtbF9pbmxpbmUuY3BwCTExIE1heSAyMDA1IDAwOjU4OjI4IC0wMDAwCTEuNwor
Kysga2h0bWwvZG9tL2h0bWxfaW5saW5lLmNwcAkyNCBKdW4gMjAwNSAwMzowOTo0OSAtMDAwMApA
QCAtNDUsNyArNDUsNyBAQCBIVE1MQW5jaG9yRWxlbWVudDo6SFRNTEFuY2hvckVsZW1lbnQoSFRN
CiAKIEhUTUxBbmNob3JFbGVtZW50ICZIVE1MQW5jaG9yRWxlbWVudDo6b3BlcmF0b3IgPSAoY29u
c3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9BICk7CisgICAg
YXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OmEoKSApOwogICAgIHJldHVybiAqdGhpczsK
IH0KIApAQCAtMjE3LDcgKzIxNyw3IEBAIEhUTUxCUkVsZW1lbnQ6OkhUTUxCUkVsZW1lbnQoSFRN
TEJSRWxlbWUKIAogSFRNTEJSRWxlbWVudCAmSFRNTEJSRWxlbWVudDo6b3BlcmF0b3IgPSAoY29u
c3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9CUiApOworICAg
IGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpicigpICk7CiAgICAgcmV0dXJuICp0aGlz
OwogfQogCkBAIC0yNTgsNyArMjU4LDcgQEAgSFRNTEZvbnRFbGVtZW50OjpIVE1MRm9udEVsZW1l
bnQoSFRNTEZvbgogCiBIVE1MRm9udEVsZW1lbnQgJkhUTUxGb250RWxlbWVudDo6b3BlcmF0b3Ig
PSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9GT05U
ICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OmZvbnQoKSApOwogICAgIHJl
dHVybiAqdGhpczsKIH0KIApAQCAtMzE5LDcgKzMxOSw3IEBAIEhUTUxNb2RFbGVtZW50OjpIVE1M
TW9kRWxlbWVudChjb25zdCBIVE0KIEhUTUxNb2RFbGVtZW50OjpIVE1MTW9kRWxlbWVudChIVE1M
RWxlbWVudEltcGwgKl9pbXBsKQogICAgIDogSFRNTEVsZW1lbnQoKQogewotICAgIGlmIChfaW1w
bCAmJiAoX2ltcGwtPmlkKCkgPT0gSURfSU5TIHx8IF9pbXBsLT5pZCgpID09IElEX0RFTCkpCisg
ICAgaWYgKF9pbXBsICYmIChfaW1wbC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmlucygpKSB8fCBf
aW1wbC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmRlbCgpKSkpCiAgICAgICAgIGltcGwgPSBfaW1w
bDsKICAgICBlbHNlCiAgICAgICAgIGltcGwgPSAwOwpAQCAtMzI4LDkgKzMyOCw4IEBAIEhUTUxN
b2RFbGVtZW50OjpIVE1MTW9kRWxlbWVudChIVE1MRWxlbWUKIAogSFRNTE1vZEVsZW1lbnQgJkhU
TUxNb2RFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBpZigg
b3RoZXIuZWxlbWVudElkKCkgIT0gSURfSU5TICYmCi0Jb3RoZXIuZWxlbWVudElkKCkgIT0gSURf
REVMICkKLSAgICB7CisgICAgaWYgKCFvdGhlci5oYW5kbGUoKS0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OmlucygpKSAmJgorICAgICAgICAhb3RoZXIuaGFuZGxlKCktPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjpkZWwoKSkpIHsKIAlpZiAoIGltcGwgKSBpbXBsLT5kZXJlZigpOwogCWltcGwgPSAwOwog
ICAgIH0gZWxzZSB7CkBAIC0zODEsMTkgKzM4MCwxNiBAQCBIVE1MUXVvdGVFbGVtZW50OjpIVE1M
UXVvdGVFbGVtZW50KGNvbnN0CiB7CiB9CiAKLUhUTUxRdW90ZUVsZW1lbnQ6OkhUTUxRdW90ZUVs
ZW1lbnQoSFRNTEdlbmVyaWNFbGVtZW50SW1wbCAqX2ltcGwpCitIVE1MUXVvdGVFbGVtZW50OjpI
VE1MUXVvdGVFbGVtZW50KEhUTUxRdW90ZUVsZW1lbnRJbXBsICpfaW1wbCkKICAgICA6IEhUTUxF
bGVtZW50KCkKIHsKLSAgICBpZiAoX2ltcGwgJiYgX2ltcGwtPmlkKCkgPT0gSURfUSkKLSAgICAg
ICAgaW1wbCA9IF9pbXBsOwotICAgIGVsc2UKLSAgICAgICAgaW1wbCA9IDA7CisgICAgaW1wbCA9
IF9pbXBsOwogICAgIGlmICggaW1wbCApIGltcGwtPnJlZigpOwogfQogCiBIVE1MUXVvdGVFbGVt
ZW50ICZIVE1MUXVvdGVFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsK
LSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX1EgKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIs
IEhUTUxOYW1lczo6cSgpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkluZGV4OiBraHRtbC9k
b20vaHRtbF9pbmxpbmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9r
aHRtbC9kb20vaHRtbF9pbmxpbmUuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zCmRpZmYgLXUg
LXAgLXIxLjMga2h0bWwvZG9tL2h0bWxfaW5saW5lLmgKLS0tIGtodG1sL2RvbS9odG1sX2lubGlu
ZS5oCTE1IEFwciAyMDAyIDIzOjQyOjAxIC0wMDAwCTEuMworKysga2h0bWwvZG9tL2h0bWxfaW5s
aW5lLmgJMjQgSnVuIDIwMDUgMDM6MDk6NDkgLTAwMDAKQEAgLTQyNSw3ICs0MjUsNyBAQCBwdWJs
aWM6CiAgICAgSFRNTFF1b3RlRWxlbWVudChjb25zdCBOb2RlICZvdGhlcikgOiBIVE1MRWxlbWVu
dCgpCiAgICAgICAgICB7KCp0aGlzKT1vdGhlcjt9CiBwcm90ZWN0ZWQ6Ci0gICAgSFRNTFF1b3Rl
RWxlbWVudChIVE1MR2VuZXJpY0VsZW1lbnRJbXBsICppbXBsKTsKKyAgICBIVE1MUXVvdGVFbGVt
ZW50KEhUTUxRdW90ZUVsZW1lbnRJbXBsICppbXBsKTsKIHB1YmxpYzoKIAogICAgIEhUTUxRdW90
ZUVsZW1lbnQgJiBvcGVyYXRvciA9IChjb25zdCBIVE1MUXVvdGVFbGVtZW50ICZvdGhlcik7Cklu
ZGV4OiBraHRtbC9kb20vaHRtbF9saXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvV2ViQ29yZS9raHRtbC9kb20vaHRtbF9saXN0LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS40CmRpZmYgLXUgLXAgLXIxLjQga2h0bWwvZG9tL2h0bWxfbGlzdC5jcHAKLS0tIGtodG1sL2Rv
bS9odG1sX2xpc3QuY3BwCTEwIEp1biAyMDAyIDIwOjA3OjM2IC0wMDAwCTEuNAorKysga2h0bWwv
ZG9tL2h0bWxfbGlzdC5jcHAJMjQgSnVuIDIwMDUgMDM6MDk6NDkgLTAwMDAKQEAgLTQxLDcgKzQx
LDcgQEAgSFRNTERMaXN0RWxlbWVudDo6SFRNTERMaXN0RWxlbWVudChIVE1MRAogCiBIVE1MRExp
c3RFbGVtZW50ICZIVE1MRExpc3RFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhl
cikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0RMICk7CisgICAgYXNzaWduT3RoZXIo
IG90aGVyLCBIVE1MTmFtZXM6OmRsKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTg4
LDcgKzg4LDcgQEAgSFRNTERpcmVjdG9yeUVsZW1lbnQ6OkhUTUxEaXJlY3RvcnlFbGVtZQogCiBI
VE1MRGlyZWN0b3J5RWxlbWVudCAmSFRNTERpcmVjdG9yeUVsZW1lbnQ6Om9wZXJhdG9yID0gKGNv
bnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfRElSICk7Cisg
ICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OmRpcigpICk7CiAgICAgcmV0dXJuICp0
aGlzOwogfQogCkBAIC0xMzUsNyArMTM1LDcgQEAgSFRNTExJRWxlbWVudDo6SFRNTExJRWxlbWVu
dChIVE1MTElFbGVtZQogCiBIVE1MTElFbGVtZW50ICZIVE1MTElFbGVtZW50OjpvcGVyYXRvciA9
IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0xJICk7
CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OmxpKCkgKTsKICAgICByZXR1cm4g
KnRoaXM7CiB9CiAKQEAgLTE5MCw3ICsxOTAsNyBAQCBIVE1MTWVudUVsZW1lbnQ6OkhUTUxNZW51
RWxlbWVudChIVE1MTWVuCiAKIEhUTUxNZW51RWxlbWVudCAmSFRNTE1lbnVFbGVtZW50OjpvcGVy
YXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElE
X01FTlUgKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6bWVudSgpICk7CiAg
ICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC0yMzcsNyArMjM3LDcgQEAgSFRNTE9MaXN0RWxlbWVu
dDo6SFRNTE9MaXN0RWxlbWVudChIVE1MTwogCiBIVE1MT0xpc3RFbGVtZW50ICZIVE1MT0xpc3RF
bGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhl
ciggb3RoZXIsIElEX09MICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6Om9s
KCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTMxMCw3ICszMTAsNyBAQCBIVE1MVUxp
c3RFbGVtZW50OjpIVE1MVUxpc3RFbGVtZW50KEhUTUxVCiAKIEhUTUxVTGlzdEVsZW1lbnQgJkhU
TUxVTGlzdEVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFz
c2lnbk90aGVyKCBvdGhlciwgSURfVUwgKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxO
YW1lczo6dWwoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApJbmRleDoga2h0bWwvZG9tL2h0
bWxfbWlzYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwv
ZG9tL2h0bWxfbWlzYy5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNwpkaWZmIC11IC1wIC1y
MS43IGtodG1sL2RvbS9odG1sX21pc2MuY3BwCi0tLSBraHRtbC9kb20vaHRtbF9taXNjLmNwcAkx
MSBNYXkgMjAwNSAwMDo1ODoyOCAtMDAwMAkxLjcKKysrIGtodG1sL2RvbS9odG1sX21pc2MuY3Bw
CTI0IEp1biAyMDA1IDAzOjA5OjUwIC0wMDAwCkBAIC00MSw3ICs0MSw3IEBAIEhUTUxCYXNlRm9u
dEVsZW1lbnQ6OkhUTUxCYXNlRm9udEVsZW1lbnQKIAogSFRNTEJhc2VGb250RWxlbWVudCAmSFRN
TEJhc2VGb250RWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAg
YXNzaWduT3RoZXIoIG90aGVyLCBJRF9CQVNFRk9OVCApOworICAgIGFzc2lnbk90aGVyKCBvdGhl
ciwgSFRNTE5hbWVzOjpiYXNlZm9udCgpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkluZGV4
OiBraHRtbC9kb20vaHRtbF9vYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9XZWJDb3JlL2todG1sL2RvbS9odG1sX29iamVjdC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuNQpkaWZmIC11IC1wIC1yMS41IGtodG1sL2RvbS9odG1sX29iamVjdC5jcHAKLS0tIGtodG1s
L2RvbS9odG1sX29iamVjdC5jcHAJMSBNYXIgMjAwNCAxNzowNDoyNCAtMDAwMAkxLjUKKysrIGto
dG1sL2RvbS9odG1sX29iamVjdC5jcHAJMjQgSnVuIDIwMDUgMDM6MDk6NTAgLTAwMDAKQEAgLTQz
LDcgKzQzLDcgQEAgSFRNTEFwcGxldEVsZW1lbnQ6OkhUTUxBcHBsZXRFbGVtZW50KEhUTQogCiBI
VE1MQXBwbGV0RWxlbWVudCAmSFRNTEFwcGxldEVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5v
ZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfQVBQTEVUICk7CisgICAg
YXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OmFwcGxldCgpICk7CiAgICAgcmV0dXJuICp0
aGlzOwogfQogCkBAIC0xOTQsNyArMTk0LDcgQEAgSFRNTE9iamVjdEVsZW1lbnQ6OkhUTUxPYmpl
Y3RFbGVtZW50KEhUTQogCiBIVE1MT2JqZWN0RWxlbWVudCAmSFRNTE9iamVjdEVsZW1lbnQ6Om9w
ZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwg
SURfT0JKRUNUICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6Om9iamVjdCgp
ICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC00MzIsNyArNDMyLDcgQEAgSFRNTFBhcmFt
RWxlbWVudDo6SFRNTFBhcmFtRWxlbWVudChIVE1MUAogCiBIVE1MUGFyYW1FbGVtZW50ICZIVE1M
UGFyYW1FbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3Np
Z25PdGhlciggb3RoZXIsIElEX1BBUkFNICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1M
TmFtZXM6OnBhcmFtKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKSW5kZXg6IGtodG1sL2Rv
bS9odG1sX3RhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9r
aHRtbC9kb20vaHRtbF90YWJsZS5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNgpkaWZmIC11
IC1wIC1yMS42IGtodG1sL2RvbS9odG1sX3RhYmxlLmNwcAotLS0ga2h0bWwvZG9tL2h0bWxfdGFi
bGUuY3BwCTMxIE9jdCAyMDAzIDAwOjQ3OjE2IC0wMDAwCTEuNgorKysga2h0bWwvZG9tL2h0bWxf
dGFibGUuY3BwCTI0IEp1biAyMDA1IDAzOjA5OjUwIC0wMDAwCkBAIC00NSw3ICs0NSw3IEBAIEhU
TUxUYWJsZUNhcHRpb25FbGVtZW50OjpIVE1MVGFibGVDYXB0aW8KIAogSFRNTFRhYmxlQ2FwdGlv
bkVsZW1lbnQgJkhUTUxUYWJsZUNhcHRpb25FbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2Rl
ICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0NBUFRJT04gKTsKKyAgICBh
c3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6Y2FwdGlvbigpICk7CiAgICAgcmV0dXJuICp0
aGlzOwogfQogCkBAIC04Niw5ICs4Niw4IEBAIEhUTUxUYWJsZUNlbGxFbGVtZW50OjpIVE1MVGFi
bGVDZWxsRWxlbWUKIAogSFRNTFRhYmxlQ2VsbEVsZW1lbnQgJkhUTUxUYWJsZUNlbGxFbGVtZW50
OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBpZiggb3RoZXIuZWxlbWVu
dElkKCkgIT0gSURfVEQgJiYKLQlvdGhlci5lbGVtZW50SWQoKSAhPSBJRF9USCApCi0gICAgewor
ICAgIGlmICghb3RoZXIuaGFuZGxlKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0ZCgpKSB8fAor
ICAgICAgICAhb3RoZXIuaGFuZGxlKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0aCgpKSkgewog
CWlmICggaW1wbCApIGltcGwtPmRlcmVmKCk7CiAJaW1wbCA9IDA7CiAgICAgfSBlbHNlIHsKQEAg
LTI5NSw5ICsyOTQsOCBAQCBIVE1MVGFibGVDb2xFbGVtZW50OjpIVE1MVGFibGVDb2xFbGVtZW50
CiAKIEhUTUxUYWJsZUNvbEVsZW1lbnQgJkhUTUxUYWJsZUNvbEVsZW1lbnQ6Om9wZXJhdG9yID0g
KGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGlmKCBvdGhlci5lbGVtZW50SWQoKSAhPSBJRF9D
T0wgJiYKLQlvdGhlci5lbGVtZW50SWQoKSAhPSBJRF9DT0xHUk9VUCApCi0gICAgeworICAgIGlm
ICghb3RoZXIuaGFuZGxlKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpjb2woKSkgJiYKKyAgICAg
ICAgIW90aGVyLmhhbmRsZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Y29sZ3JvdXAoKSkpIHsK
IAlpZiAoIGltcGwgKSBpbXBsLT5kZXJlZigpOwogCWltcGwgPSAwOwogICAgIH0gZWxzZSB7CkBA
IC00MDEsNyArMzk5LDcgQEAgSFRNTFRhYmxlRWxlbWVudDo6SFRNTFRhYmxlRWxlbWVudChIVE1M
VAogCiBIVE1MVGFibGVFbGVtZW50ICZIVE1MVGFibGVFbGVtZW50OjpvcGVyYXRvciA9IChjb25z
dCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX1RBQkxFICk7Cisg
ICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OnRhYmxlKCkgKTsKICAgICByZXR1cm4g
KnRoaXM7CiB9CiAKQEAgLTYzOCw3ICs2MzYsNyBAQCBIVE1MVGFibGVSb3dFbGVtZW50OjpIVE1M
VGFibGVSb3dFbGVtZW50CiAKIEhUTUxUYWJsZVJvd0VsZW1lbnQgJkhUTUxUYWJsZVJvd0VsZW1l
bnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBv
dGhlciwgSURfVFIgKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6dHIoKSAp
OwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtNzc1LDEwICs3NzMsOSBAQCBIVE1MVGFibGVT
ZWN0aW9uRWxlbWVudDo6SFRNTFRhYmxlU2VjdGlvCiAKIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50
ICZIVE1MVGFibGVTZWN0aW9uRWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIp
CiB7Ci0gICAgaWYob3RoZXIuZWxlbWVudElkKCkgIT0gSURfVEJPRFkgJiYKLSAgICAgICBvdGhl
ci5lbGVtZW50SWQoKSAhPSBJRF9USEVBRCAmJgotICAgICAgIG90aGVyLmVsZW1lbnRJZCgpICE9
IElEX1RGT09UICkKLSAgICB7CisgICAgaWYgKCFvdGhlci5oYW5kbGUoKS0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OnRib2R5KCkpICYmCisgICAgICAgICFvdGhlci5oYW5kbGUoKS0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OnRoZWFkKCkpICYmCisgICAgICAgICFvdGhlci5oYW5kbGUoKS0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OnRmb290KCkpKSB7CiAJaWYgKCBpbXBsICkgaW1wbC0+ZGVyZWYoKTsK
IAlpbXBsID0gMDsKICAgICB9IGVsc2UgewpJbmRleDoga2h0bWwvZWNtYS9ranNfY3NzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lY21hL2tqc19jc3Mu
Y3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjI2CmRpZmYgLXUgLXAgLXIxLjI2IGtodG1sL2Vj
bWEva2pzX2Nzcy5jcHAKLS0tIGtodG1sL2VjbWEva2pzX2Nzcy5jcHAJMjIgSnVuIDIwMDUgMTY6
Mzg6MDIgLTAwMDAJMS4yNgorKysga2h0bWwvZWNtYS9ranNfY3NzLmNwcAkyNCBKdW4gMjAwNSAw
MzowOTo1MSAtMDAwMApAQCAtMjksNyArMjksNyBAQAogI2luY2x1ZGUgInhtbC9kb21fZG9jaW1w
bC5oIgogI2luY2x1ZGUgImh0bWwvaHRtbF9oZWFkaW1wbC5oIiAvLyBmb3IgSFRNTFN0eWxlRWxl
bWVudAogI2luY2x1ZGUgImtqc19kb20uaCIKLSNpbmNsdWRlICJtaXNjL2h0bWx0YWdzLmgiCisj
aW5jbHVkZSAiaHRtbG5hbWVzLmgiCiAKICNpbmNsdWRlIDxrZGVidWcuaD4KIApAQCAtNTUsNiAr
NTUsNyBAQCB1c2luZyBET006OkNvdW50ZXJJbXBsOwogdXNpbmcgRE9NOjpEb2N1bWVudEltcGw7
CiB1c2luZyBET006OkRPTVN0cmluZzsKIHVzaW5nIERPTTo6RWxlbWVudEltcGw7Cit1c2luZyBE
T006OkhUTUxOYW1lczsKIHVzaW5nIERPTTo6SFRNTFN0eWxlRWxlbWVudEltcGw7CiB1c2luZyBE
T006Ok1lZGlhTGlzdEltcGw7CiB1c2luZyBET006OlJlY3RJbXBsOwpAQCAtNDA0LDcgKzQwNSw3
IEBAIFZhbHVlIERPTVN0eWxlU2hlZXRMaXN0Ojp0cnlHZXQoRXhlY1N0YXQKICAgLy8gYW5kIGRv
ZXNuJ3QgbG9vayBmb3IgbmFtZSBhdHRyaWJ1dGUgKHNlZSBpbXBsZW1lbnRhdGlvbiBhYm92ZSku
CiAgIC8vIEJ1dCB1bmljaXR5IG9mIHN0eWxlc2hlZXQgaWRzIGlzIGdvb2QgcHJhY3RpY2UgYW55
d2F5IDspCiAgIEVsZW1lbnRJbXBsICplbGVtZW50ID0gbV9kb2MtPmdldEVsZW1lbnRCeUlkKHAu
c3RyaW5nKCkpOwotICBpZiAoZWxlbWVudCAmJiBlbGVtZW50LT5pZCgpID09IElEX1NUWUxFKQor
ICBpZiAoZWxlbWVudCAmJiBlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c3R5bGUoKSkp
CiAgICAgcmV0dXJuIGdldERPTVN0eWxlU2hlZXQoZXhlYywgc3RhdGljX2Nhc3Q8SFRNTFN0eWxl
RWxlbWVudEltcGwgKj4oZWxlbWVudCktPnNoZWV0KCkpOwogCiAgIHJldHVybiBET01PYmplY3Q6
OnRyeUdldChleGVjLCBwKTsKSW5kZXg6IGtodG1sL2VjbWEva2pzX2RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWNtYS9ranNfZG9tLmNwcCx2CnJl
dHJpZXZpbmcgcmV2aXNpb24gMS43NgpkaWZmIC11IC1wIC1yMS43NiBraHRtbC9lY21hL2tqc19k
b20uY3BwCi0tLSBraHRtbC9lY21hL2tqc19kb20uY3BwCTIyIEp1biAyMDA1IDAwOjQ4OjQ0IC0w
MDAwCTEuNzYKKysrIGtodG1sL2VjbWEva2pzX2RvbS5jcHAJMjQgSnVuIDIwMDUgMDM6MDk6NTMg
LTAwMDAKQEAgLTQ3LDggKzQ3LDYgQEAKIAogI2luY2x1ZGUgImh0bWxfb2JqZWN0aW1wbC5oIgog
Ci0jaW5jbHVkZSAibWlzYy9odG1sdGFncy5oIgotCiAjaWYgQVBQTEVfQ0hBTkdFUwogI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL3J1bnRpbWVfb2JqZWN0Lmg+CiAjZW5kaWYKQEAgLTY3LDYgKzY1
LDcgQEAgdXNpbmcgRE9NOjpIVE1MQXBwbGV0RWxlbWVudEltcGw7CiB1c2luZyBET006OkhUTUxE
b2N1bWVudEltcGw7CiB1c2luZyBET006OkhUTUxFbGVtZW50SW1wbDsKIHVzaW5nIERPTTo6SFRN
TEVtYmVkRWxlbWVudEltcGw7Cit1c2luZyBET006OkhUTUxOYW1lczsKIHVzaW5nIERPTTo6SFRN
TE9iamVjdEVsZW1lbnRJbXBsOwogdXNpbmcgRE9NOjpOYW1lZE5vZGVNYXBJbXBsOwogdXNpbmcg
RE9NOjpOb2RlOwpAQCAtNDYyLDcgKzQ2MSw3IEBAIHZvaWQgRE9NTm9kZTo6cHV0VmFsdWUoRXhl
Y1N0YXRlICpleGVjLCAKICAgICBub2RlLnNldE5vZGVWYWx1ZSh2YWx1ZS50b1N0cmluZyhleGVj
KS5zdHJpbmcoKSwgZXhjZXB0aW9uKTsKICAgICBicmVhazsKICAgY2FzZSBQcmVmaXg6Ci0gICAg
bm9kZS5zZXRQcmVmaXgodmFsdWUudG9TdHJpbmcoZXhlYykuc3RyaW5nKCksIGV4Y2VwdGlvbik7
CisgICAgbm9kZS5zZXRQcmVmaXgodmFsdWUudG9TdHJpbmcoZXhlYykuc3RyaW5nKCkuaW1wbGVt
ZW50YXRpb24oKSwgZXhjZXB0aW9uKTsKICAgICBicmVhazsKICAgY2FzZSBPbkFib3J0OgogICAg
IHNldExpc3RlbmVyKGV4ZWMsRE9NOjpFdmVudEltcGw6OkFCT1JUX0VWRU5ULHZhbHVlKTsKQEAg
LTExODcsNyArMTE4Niw3IEBAIFZhbHVlIERPTUVsZW1lbnQ6OnRyeUdldChFeGVjU3RhdGUgKmV4
ZWMKICAgewogICAgIHN3aXRjaCggZW50cnktPnZhbHVlICkgewogICAgIGNhc2UgVGFnTmFtZToK
LSAgICAgIHJldHVybiBnZXRTdHJpbmdPck51bGwoZWxlbWVudC50YWdOYW1lKCkpOworICAgICAg
cmV0dXJuIGdldFN0cmluZ09yTnVsbChlbGVtZW50Lm5vZGVOYW1lKCkpOwogICAgIGNhc2UgU3R5
bGU6CiAgICAgICByZXR1cm4gZ2V0RE9NQ1NTU3R5bGVEZWNsYXJhdGlvbihleGVjLGVsZW1lbnQu
c3R5bGUoKSk7CiAgICAgZGVmYXVsdDoKQEAgLTE3MDksMjYgKzE3MDgsMjEgQEAgVmFsdWVJbXAg
KmdldFJ1bnRpbWVPYmplY3QoRXhlY1N0YXRlICpleAogICAgIGlmICghbikKICAgICAgICAgcmV0
dXJuIDA7CiAKLSAgICBzd2l0Y2ggKG4tPmlkKCkpIHsKLSAgICAgICAgY2FzZSBJRF9BUFBMRVQ6
IHsKLSAgICAgICAgICAgIEhUTUxBcHBsZXRFbGVtZW50SW1wbCAqYXBwbGV0RWxlbWVudCA9IHN0
YXRpY19jYXN0PEhUTUxBcHBsZXRFbGVtZW50SW1wbCAqPihuKTsKLSAgICAgICAgICAgIGlmIChh
cHBsZXRFbGVtZW50LT5nZXRBcHBsZXRJbnN0YW5jZSgpKQotICAgICAgICAgICAgICAgIC8vIFRo
ZSBpbnN0YW5jZSBpcyBvd25lZCBieSB0aGUgYXBwbGV0IGVsZW1lbnQuCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIG5ldyBSdW50aW1lT2JqZWN0SW1wKGFwcGxldEVsZW1lbnQtPmdldEFwcGxldElu
c3RhbmNlKCksIGZhbHNlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2UgSURfRU1CRUQ6IHsKLSAgICAgICAgICAgIEhUTUxFbWJlZEVsZW1lbnRJbXBsICplbWJl
ZEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRW1iZWRFbGVtZW50SW1wbCAqPihuKTsKLSAgICAg
ICAgICAgIGlmIChlbWJlZEVsZW1lbnQtPmdldEVtYmVkSW5zdGFuY2UoKSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gbmV3IFJ1bnRpbWVPYmplY3RJbXAoZW1iZWRFbGVtZW50LT5nZXRFbWJlZElu
c3RhbmNlKCksIGZhbHNlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2UgSURfT0JKRUNUOiB7Ci0gICAgICAgICAgICBIVE1MT2JqZWN0RWxlbWVudEltcGwgKm9i
amVjdEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MT2JqZWN0RWxlbWVudEltcGwgKj4obik7Ci0g
ICAgICAgICAgICBpZiAob2JqZWN0RWxlbWVudC0+Z2V0T2JqZWN0SW5zdGFuY2UoKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gbmV3IFJ1bnRpbWVPYmplY3RJbXAob2JqZWN0RWxlbWVudC0+Z2V0
T2JqZWN0SW5zdGFuY2UoKSwgZmFsc2UpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
KyAgICBpZiAobi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmFwcGxldCgpKSkgeworICAgICAgICBI
VE1MQXBwbGV0RWxlbWVudEltcGwgKmFwcGxldEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MQXBw
bGV0RWxlbWVudEltcGwgKj4obik7CisgICAgICAgIGlmIChhcHBsZXRFbGVtZW50LT5nZXRBcHBs
ZXRJbnN0YW5jZSgpKQorICAgICAgICAgICAgLy8gVGhlIGluc3RhbmNlIGlzIG93bmVkIGJ5IHRo
ZSBhcHBsZXQgZWxlbWVudC4KKyAgICAgICAgICAgIHJldHVybiBuZXcgUnVudGltZU9iamVjdElt
cChhcHBsZXRFbGVtZW50LT5nZXRBcHBsZXRJbnN0YW5jZSgpLCBmYWxzZSk7CisgICAgfQorICAg
IGVsc2UgaWYgKG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjplbWJlZCgpKSkgeworICAgICAgICBI
VE1MRW1iZWRFbGVtZW50SW1wbCAqZW1iZWRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEVtYmVk
RWxlbWVudEltcGwgKj4obik7CisgICAgICAgIGlmIChlbWJlZEVsZW1lbnQtPmdldEVtYmVkSW5z
dGFuY2UoKSkKKyAgICAgICAgICAgIHJldHVybiBuZXcgUnVudGltZU9iamVjdEltcChlbWJlZEVs
ZW1lbnQtPmdldEVtYmVkSW5zdGFuY2UoKSwgZmFsc2UpOworICAgIH0KKyAgICBlbHNlIGlmIChu
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b2JqZWN0KCkpKSB7CisgICAgICAgIEhUTUxPYmplY3RF
bGVtZW50SW1wbCAqb2JqZWN0RWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxPYmplY3RFbGVtZW50
SW1wbCAqPihuKTsKKyAgICAgICAgaWYgKG9iamVjdEVsZW1lbnQtPmdldE9iamVjdEluc3RhbmNl
KCkpCisgICAgICAgICAgICByZXR1cm4gbmV3IFJ1bnRpbWVPYmplY3RJbXAob2JqZWN0RWxlbWVu
dC0+Z2V0T2JqZWN0SW5zdGFuY2UoKSwgZmFsc2UpOwogICAgIH0KICAgICAKICAgICAvLyBJZiB3
ZSBkb24ndCBoYXZlIGEgcnVudGltZSBvYmplY3QgcmV0dXJuIDAuCkluZGV4OiBraHRtbC9lY21h
L2tqc19odG1sLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRt
bC9lY21hL2tqc19odG1sLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMTgKZGlmZiAtdSAt
cCAtcjEuMTE4IGtodG1sL2VjbWEva2pzX2h0bWwuY3BwCi0tLSBraHRtbC9lY21hL2tqc19odG1s
LmNwcAkyMiBKdW4gMjAwNSAwMDo0ODo0NCAtMDAwMAkxLjExOAorKysga2h0bWwvZWNtYS9ranNf
aHRtbC5jcHAJMjQgSnVuIDIwMDUgMDM6MDk6NTkgLTAwMDAKQEAgLTQ2LDggKzQ2LDYgQEAKICNp
bmNsdWRlICJranNfZXZlbnRzLmgiCiAjaW5jbHVkZSAia2pzX3Byb3h5LmgiCiAKLSNpbmNsdWRl
ICJtaXNjL2h0bWx0YWdzLmgiCi0KICNpbmNsdWRlICJyZW5kZXJpbmcvcmVuZGVyX2NhbnZhc2lt
YWdlLmgiCiAjaW5jbHVkZSAicmVuZGVyaW5nL3JlbmRlcl9vYmplY3QuaCIKICNpbmNsdWRlICJy
ZW5kZXJpbmcvcmVuZGVyX2xheWVyLmgiCkBAIC0xMDksNiArMTA3LDcgQEAgdXNpbmcgRE9NOjpI
VE1MTWFwRWxlbWVudEltcGw7CiB1c2luZyBET006OkhUTUxNZW51RWxlbWVudEltcGw7CiB1c2lu
ZyBET006OkhUTUxNZXRhRWxlbWVudEltcGw7CiB1c2luZyBET006OkhUTUxNb2RFbGVtZW50SW1w
bDsKK3VzaW5nIERPTTo6SFRNTE5hbWVzOwogdXNpbmcgRE9NOjpIVE1MT0xpc3RFbGVtZW50SW1w
bDsKIHVzaW5nIERPTTo6SFRNTE9iamVjdEVsZW1lbnRJbXBsOwogdXNpbmcgRE9NOjpIVE1MT3B0
R3JvdXBFbGVtZW50SW1wbDsKQEAgLTM1Myw3ICszNTIsNyBAQCBWYWx1ZSBIVE1MRG9jdW1lbnQ6
OnRyeUdldChFeGVjU3RhdGUgKmV4CiAgIGlmICh2YWwpCiAgICAgcmV0dXJuIFZhbHVlKHZhbCk7
CiAKLSAgSFRNTEJvZHlFbGVtZW50SW1wbCAqYm9keUVsZW1lbnQgPSAoYm9keSAmJiBib2R5LT5p
ZCgpID09IElEX0JPRFkpID8gc3RhdGljX2Nhc3Q8SFRNTEJvZHlFbGVtZW50SW1wbCAqPihib2R5
KSA6IDA7CisgIEhUTUxCb2R5RWxlbWVudEltcGwgKmJvZHlFbGVtZW50ID0gKGJvZHkgJiYgYm9k
eS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJvZHkoKSkpID8gc3RhdGljX2Nhc3Q8SFRNTEJvZHlF
bGVtZW50SW1wbCAqPihib2R5KSA6IDA7CiAKICAgaWYgKGVudHJ5KSB7CiAgICAgc3dpdGNoIChl
bnRyeS0+dmFsdWUpIHsKQEAgLTQyOCw3ICs0MjcsNyBAQCB2b2lkIEtKUzo6SFRNTERvY3VtZW50
OjpwdXRWYWx1ZShFeGVjU3RhCiAgIERPTUV4Y2VwdGlvblRyYW5zbGF0b3IgZXhjZXB0aW9uKGV4
ZWMpOwogICBIVE1MRG9jdW1lbnRJbXBsICZkb2MgPSAqc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50
SW1wbCAqPihpbXBsKCkpOwogICBIVE1MRWxlbWVudEltcGwgKmJvZHkgPSBkb2MuYm9keSgpOwot
ICBIVE1MQm9keUVsZW1lbnRJbXBsICpib2R5RWxlbWVudCA9IChib2R5ICYmIGJvZHktPmlkKCkg
PT0gSURfQk9EWSkgPyBzdGF0aWNfY2FzdDxIVE1MQm9keUVsZW1lbnRJbXBsICo+KGJvZHkpIDog
MDsKKyAgSFRNTEJvZHlFbGVtZW50SW1wbCAqYm9keUVsZW1lbnQgPSAoYm9keSAmJiBib2R5LT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6Ym9keSgpKSkgPyBzdGF0aWNfY2FzdDxIVE1MQm9keUVsZW1l
bnRJbXBsICo+KGJvZHkpIDogMDsKIAogICBzd2l0Y2ggKHRva2VuKSB7CiAgIGNhc2UgVGl0bGU6
CkBAIC01ODIsMTMzICs1ODEsMjE4IEBAIGNvbnN0IENsYXNzSW5mbyBLSlM6OkhUTUxFbGVtZW50
OjptYXJxdWUKIAogY29uc3QgQ2xhc3NJbmZvKiBLSlM6OkhUTUxFbGVtZW50OjpjbGFzc0luZm8o
KSBjb25zdAogewotICBzd2l0Y2ggKGltcGwoKS0+aWQoKSkgewotICBjYXNlIElEX0hUTUw6Ci0g
ICAgcmV0dXJuICZodG1sX2luZm87Ci0gIGNhc2UgSURfSEVBRDoKLSAgICByZXR1cm4gJmhlYWRf
aW5mbzsKLSAgY2FzZSBJRF9MSU5LOgotICAgIHJldHVybiAmbGlua19pbmZvOwotICBjYXNlIElE
X1RJVExFOgotICAgIHJldHVybiAmdGl0bGVfaW5mbzsKLSAgY2FzZSBJRF9NRVRBOgotICAgIHJl
dHVybiAmbWV0YV9pbmZvOwotICBjYXNlIElEX0JBU0U6Ci0gICAgcmV0dXJuICZiYXNlX2luZm87
Ci0gIGNhc2UgSURfSVNJTkRFWDoKLSAgICByZXR1cm4gJmlzSW5kZXhfaW5mbzsKLSAgY2FzZSBJ
RF9TVFlMRToKLSAgICByZXR1cm4gJnN0eWxlX2luZm87Ci0gIGNhc2UgSURfQk9EWToKLSAgICBy
ZXR1cm4gJmJvZHlfaW5mbzsKLSAgY2FzZSBJRF9GT1JNOgotICAgIHJldHVybiAmZm9ybV9pbmZv
OwotICBjYXNlIElEX1NFTEVDVDoKLSAgICByZXR1cm4gJnNlbGVjdF9pbmZvOwotICBjYXNlIElE
X09QVEdST1VQOgotICAgIHJldHVybiAmb3B0R3JvdXBfaW5mbzsKLSAgY2FzZSBJRF9PUFRJT046
Ci0gICAgcmV0dXJuICZvcHRpb25faW5mbzsKLSAgY2FzZSBJRF9JTlBVVDoKLSAgICByZXR1cm4g
JmlucHV0X2luZm87Ci0gIGNhc2UgSURfVEVYVEFSRUE6Ci0gICAgcmV0dXJuICZ0ZXh0QXJlYV9p
bmZvOwotICBjYXNlIElEX0JVVFRPTjoKLSAgICByZXR1cm4gJmJ1dHRvbl9pbmZvOwotICBjYXNl
IElEX0xBQkVMOgotICAgIHJldHVybiAmbGFiZWxfaW5mbzsKLSAgY2FzZSBJRF9GSUVMRFNFVDoK
LSAgICByZXR1cm4gJmZpZWxkU2V0X2luZm87Ci0gIGNhc2UgSURfTEVHRU5EOgotICAgIHJldHVy
biAmbGVnZW5kX2luZm87Ci0gIGNhc2UgSURfVUw6Ci0gICAgcmV0dXJuICZ1bF9pbmZvOwotICBj
YXNlIElEX09MOgotICAgIHJldHVybiAmb2xfaW5mbzsKLSAgY2FzZSBJRF9ETDoKLSAgICByZXR1
cm4gJmRsX2luZm87Ci0gIGNhc2UgSURfRElSOgotICAgIHJldHVybiAmZGlyX2luZm87Ci0gIGNh
c2UgSURfTUVOVToKLSAgICByZXR1cm4gJm1lbnVfaW5mbzsKLSAgY2FzZSBJRF9MSToKLSAgICBy
ZXR1cm4gJmxpX2luZm87Ci0gIGNhc2UgSURfRElWOgotICAgIHJldHVybiAmZGl2X2luZm87Ci0g
IGNhc2UgSURfUDoKLSAgICByZXR1cm4gJnBfaW5mbzsKLSAgY2FzZSBJRF9IMToKLSAgY2FzZSBJ
RF9IMjoKLSAgY2FzZSBJRF9IMzoKLSAgY2FzZSBJRF9INDoKLSAgY2FzZSBJRF9INToKLSAgY2Fz
ZSBJRF9INjoKLSAgICByZXR1cm4gJmhlYWRpbmdfaW5mbzsKLSAgY2FzZSBJRF9CTE9DS1FVT1RF
OgotICAgIHJldHVybiAmYmxvY2tRdW90ZV9pbmZvOwotICBjYXNlIElEX1E6Ci0gICAgcmV0dXJu
ICZxX2luZm87Ci0gIGNhc2UgSURfUFJFOgotICAgIHJldHVybiAmcHJlX2luZm87Ci0gIGNhc2Ug
SURfQlI6Ci0gICAgcmV0dXJuICZicl9pbmZvOwotICBjYXNlIElEX0JBU0VGT05UOgotICAgIHJl
dHVybiAmYmFzZUZvbnRfaW5mbzsKLSAgY2FzZSBJRF9GT05UOgotICAgIHJldHVybiAmZm9udF9p
bmZvOwotICBjYXNlIElEX0hSOgotICAgIHJldHVybiAmaHJfaW5mbzsKLSAgY2FzZSBJRF9JTlM6
Ci0gIGNhc2UgSURfREVMOgotICAgIHJldHVybiAmbW9kX2luZm87Ci0gIGNhc2UgSURfQToKLSAg
ICByZXR1cm4gJmFfaW5mbzsKLSAgY2FzZSBJRF9DQU5WQVM6Ci0gICAgcmV0dXJuICZjYW52YXNf
aW5mbzsKLSAgY2FzZSBJRF9JTUc6Ci0gICAgcmV0dXJuICZpbWdfaW5mbzsKLSAgY2FzZSBJRF9P
QkpFQ1Q6Ci0gICAgcmV0dXJuICZvYmplY3RfaW5mbzsKLSAgY2FzZSBJRF9QQVJBTToKLSAgICBy
ZXR1cm4gJnBhcmFtX2luZm87Ci0gIGNhc2UgSURfQVBQTEVUOgotICAgIHJldHVybiAmYXBwbGV0
X2luZm87Ci0gIGNhc2UgSURfTUFQOgotICAgIHJldHVybiAmbWFwX2luZm87Ci0gIGNhc2UgSURf
QVJFQToKLSAgICByZXR1cm4gJmFyZWFfaW5mbzsKLSAgY2FzZSBJRF9TQ1JJUFQ6Ci0gICAgcmV0
dXJuICZzY3JpcHRfaW5mbzsKLSAgY2FzZSBJRF9UQUJMRToKLSAgICByZXR1cm4gJnRhYmxlX2lu
Zm87Ci0gIGNhc2UgSURfQ0FQVElPTjoKLSAgICByZXR1cm4gJmNhcHRpb25faW5mbzsKLSAgY2Fz
ZSBJRF9DT0w6Ci0gICAgcmV0dXJuICZjb2xfaW5mbzsKLSAgY2FzZSBJRF9USEVBRDoKLSAgICBy
ZXR1cm4gJnRhYmxlc2VjdGlvbl9pbmZvOwotICBjYXNlIElEX1RCT0RZOgotICAgIHJldHVybiAm
dGFibGVzZWN0aW9uX2luZm87Ci0gIGNhc2UgSURfVEZPT1Q6Ci0gICAgcmV0dXJuICZ0YWJsZXNl
Y3Rpb25faW5mbzsKLSAgY2FzZSBJRF9UUjoKLSAgICByZXR1cm4gJnRyX2luZm87Ci0gIGNhc2Ug
SURfVEg6Ci0gICAgcmV0dXJuICZ0YWJsZWNlbGxfaW5mbzsKLSAgY2FzZSBJRF9URDoKLSAgICBy
ZXR1cm4gJnRhYmxlY2VsbF9pbmZvOwotICBjYXNlIElEX0ZSQU1FU0VUOgotICAgIHJldHVybiAm
ZnJhbWVTZXRfaW5mbzsKLSAgY2FzZSBJRF9GUkFNRToKLSAgICByZXR1cm4gJmZyYW1lX2luZm87
Ci0gIGNhc2UgSURfSUZSQU1FOgotICAgIHJldHVybiAmaUZyYW1lX2luZm87Ci0gIGNhc2UgSURf
TUFSUVVFRToKLSAgICByZXR1cm4gJm1hcnF1ZWVfaW5mbzsKLSAgZGVmYXVsdDoKKyAgICAvLyBX
ZSBhbHJlYWR5IGtub3cgd2UgaGF2ZSBhbiBIVE1MIGVsZW1lbnQsIHNvIHdlIG9ubHkgbmVlZCB0
byBjb21wYXJlIHRoZSBsb2NhbE5hbWUgY29tcG9uZW50IG9mIHRoZSBxdWFsaWZpZWQgbmFtZS4K
KyAgICBzdGF0aWMgUVB0ckRpY3Q8Y29uc3QgQ2xhc3NJbmZvPiBjbGFzc0luZm9EaWN0OworICAg
IGlmIChjbGFzc0luZm9EaWN0LmlzRW1wdHkoKSkgeworICAgICAgICBjbGFzc0luZm9EaWN0Lmlu
c2VydChIVE1MTmFtZXM6OmEoKS5sb2NhbE5hbWVQdHIoKSwgJmFfaW5mbyk7CisgICAgICAgIGNs
YXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6YXBwbGV0KCkubG9jYWxOYW1lUHRyKCksICZh
cHBsZXRfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6YXJl
YSgpLmxvY2FsTmFtZVB0cigpLCAmYXJlYV9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5p
bnNlcnQoSFRNTE5hbWVzOjpiYXNlKCkubG9jYWxOYW1lUHRyKCksICZiYXNlX2luZm8pOworICAg
ICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmJhc2Vmb250KCkubG9jYWxOYW1l
UHRyKCksICZiYXNlRm9udF9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRN
TE5hbWVzOjpibG9ja3F1b3RlKCkubG9jYWxOYW1lUHRyKCksICZibG9ja1F1b3RlX2luZm8pOwor
ICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmJvZHkoKS5sb2NhbE5hbWVQ
dHIoKSwgJmJvZHlfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1l
czo6YnIoKS5sb2NhbE5hbWVQdHIoKSwgJmJyX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0
Lmluc2VydChIVE1MTmFtZXM6OmJ1dHRvbigpLmxvY2FsTmFtZVB0cigpLCAmYnV0dG9uX2luZm8p
OworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmNhbnZhcygpLmxvY2Fs
TmFtZVB0cigpLCAmY2FudmFzX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChI
VE1MTmFtZXM6OmNhcHRpb24oKS5sb2NhbE5hbWVQdHIoKSwgJmNhcHRpb25faW5mbyk7CisgICAg
ICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6Y29sKCkubG9jYWxOYW1lUHRyKCks
ICZjb2xfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6Y29s
Z3JvdXAoKS5sb2NhbE5hbWVQdHIoKSwgJmNvbF9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGlj
dC5pbnNlcnQoSFRNTE5hbWVzOjpkZWwoKS5sb2NhbE5hbWVQdHIoKSwgJm1vZF9pbmZvKTsKKyAg
ICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpkaXIoKS5sb2NhbE5hbWVQdHIo
KSwgJmRpcl9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpk
aXYoKS5sb2NhbE5hbWVQdHIoKSwgJmRpdl9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5p
bnNlcnQoSFRNTE5hbWVzOjpkbCgpLmxvY2FsTmFtZVB0cigpLCAmZGxfaW5mbyk7CisgICAgICAg
IGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6ZmllbGRzZXQoKS5sb2NhbE5hbWVQdHIo
KSwgJmZpZWxkU2V0X2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFt
ZXM6OmZvbnQoKS5sb2NhbE5hbWVQdHIoKSwgJmZvbnRfaW5mbyk7CisgICAgICAgIGNsYXNzSW5m
b0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6Zm9ybSgpLmxvY2FsTmFtZVB0cigpLCAmZm9ybV9pbmZv
KTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpmcmFtZSgpLmxvY2Fs
TmFtZVB0cigpLCAmZnJhbWVfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhU
TUxOYW1lczo6ZnJhbWVzZXQoKS5sb2NhbE5hbWVQdHIoKSwgJmZyYW1lU2V0X2luZm8pOworICAg
ICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmgxKCkubG9jYWxOYW1lUHRyKCks
ICZoZWFkaW5nX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6
OmgyKCkubG9jYWxOYW1lUHRyKCksICZoZWFkaW5nX2luZm8pOworICAgICAgICBjbGFzc0luZm9E
aWN0Lmluc2VydChIVE1MTmFtZXM6OmgzKCkubG9jYWxOYW1lUHRyKCksICZoZWFkaW5nX2luZm8p
OworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Omg0KCkubG9jYWxOYW1l
UHRyKCksICZoZWFkaW5nX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1M
TmFtZXM6Omg1KCkubG9jYWxOYW1lUHRyKCksICZoZWFkaW5nX2luZm8pOworICAgICAgICBjbGFz
c0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Omg2KCkubG9jYWxOYW1lUHRyKCksICZoZWFkaW5n
X2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmhlYWQoKS5s
b2NhbE5hbWVQdHIoKSwgJmhlYWRfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0
KEhUTUxOYW1lczo6aHIoKS5sb2NhbE5hbWVQdHIoKSwgJmhyX2luZm8pOworICAgICAgICBjbGFz
c0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Omh0bWwoKS5sb2NhbE5hbWVQdHIoKSwgJmh0bWxf
aW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6aWZyYW1lKCku
bG9jYWxOYW1lUHRyKCksICZpRnJhbWVfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5z
ZXJ0KEhUTUxOYW1lczo6aW1nKCkubG9jYWxOYW1lUHRyKCksICZpbWdfaW5mbyk7CisgICAgICAg
IGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6aW5wdXQoKS5sb2NhbE5hbWVQdHIoKSwg
JmlucHV0X2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Omlu
cygpLmxvY2FsTmFtZVB0cigpLCAmbW9kX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmlu
c2VydChIVE1MTmFtZXM6OmlzaW5kZXgoKS5sb2NhbE5hbWVQdHIoKSwgJmlzSW5kZXhfaW5mbyk7
CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6bGFiZWwoKS5sb2NhbE5h
bWVQdHIoKSwgJmxhYmVsX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1M
TmFtZXM6OmxlZ2VuZCgpLmxvY2FsTmFtZVB0cigpLCAmbGVnZW5kX2luZm8pOworICAgICAgICBj
bGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmxpKCkubG9jYWxOYW1lUHRyKCksICZsaV9p
bmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpsaW5rKCkubG9j
YWxOYW1lUHRyKCksICZsaW5rX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChI
VE1MTmFtZXM6Om1hcCgpLmxvY2FsTmFtZVB0cigpLCAmbWFwX2luZm8pOworICAgICAgICBjbGFz
c0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Om1hcnF1ZWUoKS5sb2NhbE5hbWVQdHIoKSwgJm1h
cnF1ZWVfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6bWVu
dSgpLmxvY2FsTmFtZVB0cigpLCAmbWVudV9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5p
bnNlcnQoSFRNTE5hbWVzOjptZXRhKCkubG9jYWxOYW1lUHRyKCksICZtZXRhX2luZm8pOworICAg
ICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Om9iamVjdCgpLmxvY2FsTmFtZVB0
cigpLCAmb2JqZWN0X2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFt
ZXM6Om9sKCkubG9jYWxOYW1lUHRyKCksICZvbF9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGlj
dC5pbnNlcnQoSFRNTE5hbWVzOjpvcHRpb24oKS5sb2NhbE5hbWVQdHIoKSwgJm9wdGlvbl9pbmZv
KTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpvcHRncm91cCgpLmxv
Y2FsTmFtZVB0cigpLCAmb3B0R3JvdXBfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5z
ZXJ0KEhUTUxOYW1lczo6cCgpLmxvY2FsTmFtZVB0cigpLCAmcF9pbmZvKTsKKyAgICAgICAgY2xh
c3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpwYXJhbSgpLmxvY2FsTmFtZVB0cigpLCAmcGFy
YW1faW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6cHJlKCku
bG9jYWxOYW1lUHRyKCksICZwcmVfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0
KEhUTUxOYW1lczo6cSgpLmxvY2FsTmFtZVB0cigpLCAmcV9pbmZvKTsKKyAgICAgICAgY2xhc3NJ
bmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpzY3JpcHQoKS5sb2NhbE5hbWVQdHIoKSwgJnNjcmlw
dF9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpzZWxlY3Qo
KS5sb2NhbE5hbWVQdHIoKSwgJnNlbGVjdF9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5p
bnNlcnQoSFRNTE5hbWVzOjpzdHlsZSgpLmxvY2FsTmFtZVB0cigpLCAmc3R5bGVfaW5mbyk7Cisg
ICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6dGFibGUoKS5sb2NhbE5hbWVQ
dHIoKSwgJnRhYmxlX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFt
ZXM6OnRib2R5KCkubG9jYWxOYW1lUHRyKCksICZ0YWJsZXNlY3Rpb25faW5mbyk7CisgICAgICAg
IGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6dGQoKS5sb2NhbE5hbWVQdHIoKSwgJnRh
YmxlY2VsbF9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjp0
ZXh0YXJlYSgpLmxvY2FsTmFtZVB0cigpLCAmdGV4dEFyZWFfaW5mbyk7CisgICAgICAgIGNsYXNz
SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6dGgoKS5sb2NhbE5hbWVQdHIoKSwgJnRhYmxlY2Vs
bF9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjp0aGVhZCgp
LmxvY2FsTmFtZVB0cigpLCAmdGFibGVzZWN0aW9uX2luZm8pOworICAgICAgICBjbGFzc0luZm9E
aWN0Lmluc2VydChIVE1MTmFtZXM6OnRmb290KCkubG9jYWxOYW1lUHRyKCksICZ0YWJsZXNlY3Rp
b25faW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6dGl0bGUo
KS5sb2NhbE5hbWVQdHIoKSwgJnRpdGxlX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmlu
c2VydChIVE1MTmFtZXM6OnRyKCkubG9jYWxOYW1lUHRyKCksICZ0cl9pbmZvKTsKKyAgICAgICAg
Y2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjp1bCgpLmxvY2FsTmFtZVB0cigpLCAmdWxf
aW5mbyk7CisgICAgfQorICAgIAorICAgIEhUTUxFbGVtZW50SW1wbCogZWxlbWVudCA9IHN0YXRp
Y19jYXN0PEhUTUxFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgY29uc3QgQ2xhc3NJbmZvKiBy
ZXN1bHQgPSBjbGFzc0luZm9EaWN0LmZpbmQoZWxlbWVudC0+bG9jYWxOYW1lKCkuaW1wbGVtZW50
YXRpb24oKSk7CisgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICBy
ZXR1cm4gJmluZm87Ci0gIH0KIH0KKworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRN
TEVsZW1lbnQ6Omh0bWxfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6Omh0bWxHZXR0ZXIsICZIVE1M
RWxlbWVudDo6aHRtbFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRN
TEVsZW1lbnQ6OmhlYWRfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmhlYWRHZXR0ZXIsICZIVE1M
RWxlbWVudDo6aGVhZFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRN
TEVsZW1lbnQ6OmxpbmtfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmxpbmtHZXR0ZXIsICZIVE1M
RWxlbWVudDo6bGlua1NldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRN
TEVsZW1lbnQ6OnRpdGxlX2dldHNldCA9IHsgJkhUTUxFbGVtZW50Ojp0aXRsZUdldHRlciwgJkhU
TUxFbGVtZW50Ojp0aXRsZVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8g
SFRNTEVsZW1lbnQ6Om1ldGFfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6Om1ldGFHZXR0ZXIsICZI
VE1MRWxlbWVudDo6bWV0YVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8g
SFRNTEVsZW1lbnQ6OmJhc2VfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmJhc2VHZXR0ZXIsICZI
VE1MRWxlbWVudDo6YmFzZVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8g
SFRNTEVsZW1lbnQ6OmlzSW5kZXhfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmlzSW5kZXhHZXR0
ZXIsICZIVE1MRWxlbWVudDo6aXNJbmRleFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6Okdl
dFNldEluZm8gSFRNTEVsZW1lbnQ6OnN0eWxlX2dldHNldCA9IHsgJkhUTUxFbGVtZW50OjpzdHls
ZUdldHRlciwgJkhUTUxFbGVtZW50OjpzdHlsZVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6
OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmJvZHlfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmJv
ZHlHZXR0ZXIsICZIVE1MRWxlbWVudDo6Ym9keVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6
OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmZvcm1fZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmZv
cm1HZXR0ZXIsICZIVE1MRWxlbWVudDo6Zm9ybVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6
OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OnNlbGVjdF9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6
c2VsZWN0R2V0dGVyLCAmSFRNTEVsZW1lbnQ6OnNlbGVjdFNldHRlciB9OworY29uc3QgSFRNTEVs
ZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6Om9wdEdyb3VwX2dldHNldCA9IHsgJkhUTUxF
bGVtZW50OjpvcHRHcm91cEdldHRlciwgJkhUTUxFbGVtZW50OjpvcHRHcm91cFNldHRlciB9Owor
Y29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6Om9wdGlvbl9nZXRzZXQg
PSB7ICZIVE1MRWxlbWVudDo6b3B0aW9uR2V0dGVyLCAmSFRNTEVsZW1lbnQ6Om9wdGlvblNldHRl
ciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmlucHV0X2dl
dHNldCA9IHsgJkhUTUxFbGVtZW50OjppbnB1dEdldHRlciwgJkhUTUxFbGVtZW50OjppbnB1dFNl
dHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OnRleHRB
cmVhX2dldHNldCA9IHsgJkhUTUxFbGVtZW50Ojp0ZXh0QXJlYUdldHRlciwgJkhUTUxFbGVtZW50
Ojp0ZXh0QXJlYVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVs
ZW1lbnQ6OmJ1dHRvbl9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6YnV0dG9uR2V0dGVyLCAmSFRN
TEVsZW1lbnQ6OmJ1dHRvblNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8g
SFRNTEVsZW1lbnQ6OmxhYmVsX2dldHNldCA9IHsgJkhUTUxFbGVtZW50OjpsYWJlbEdldHRlciwg
JkhUTUxFbGVtZW50OjpsYWJlbFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldElu
Zm8gSFRNTEVsZW1lbnQ6OmZpZWxkU2V0X2dldHNldCA9IHsgJkhUTUxFbGVtZW50OjpmaWVsZFNl
dEdldHRlciwgJkhUTUxFbGVtZW50OjpmaWVsZFNldFNldHRlciB9OworY29uc3QgSFRNTEVsZW1l
bnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmxlZ2VuZF9nZXRzZXQgPSB7ICZIVE1MRWxlbWVu
dDo6bGVnZW5kR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmxlZ2VuZFNldHRlciB9OworY29uc3QgSFRN
TEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OnVsX2dldHNldCA9IHsgJkhUTUxFbGVt
ZW50Ojp1TGlzdEdldHRlciwgJkhUTUxFbGVtZW50Ojp1TGlzdFNldHRlciB9OworY29uc3QgSFRN
TEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6Om9sX2dldHNldCA9IHsgJkhUTUxFbGVt
ZW50OjpvTGlzdEdldHRlciwgJkhUTUxFbGVtZW50OjpvTGlzdFNldHRlciB9OworY29uc3QgSFRN
TEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmRsX2dldHNldCA9IHsgJkhUTUxFbGVt
ZW50OjpkTGlzdEdldHRlciwgJkhUTUxFbGVtZW50OjpkTGlzdFNldHRlciB9OworY29uc3QgSFRN
TEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmRpcl9nZXRzZXQgPSB7ICZIVE1MRWxl
bWVudDo6ZGlyR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmRpclNldHRlciB9OworY29uc3QgSFRNTEVs
ZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6Om1lbnVfZ2V0c2V0ID0geyAmSFRNTEVsZW1l
bnQ6Om1lbnVHZXR0ZXIsICZIVE1MRWxlbWVudDo6bWVudVNldHRlciB9OworY29uc3QgSFRNTEVs
ZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmxpX2dldHNldCA9IHsgJkhUTUxFbGVtZW50
OjpsaUdldHRlciwgJkhUTUxFbGVtZW50OjpsaVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6
OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmRpdl9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6ZGl2
R2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmRpdlNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6Okdl
dFNldEluZm8gSFRNTEVsZW1lbnQ6OnBfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OnBhcmFncmFw
aEdldHRlciwgJkhUTUxFbGVtZW50OjpwYXJhZ3JhcGhTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVt
ZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjpoZWFkaW5nX2dldHNldCA9IHsgJkhUTUxFbGVt
ZW50OjpoZWFkaW5nR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmhlYWRpbmdTZXR0ZXIgfTsKK2NvbnN0
IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjpibG9ja1F1b3RlX2dldHNldCA9
IHsgJkhUTUxFbGVtZW50OjpibG9ja1F1b3RlR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmJsb2NrUXVv
dGVTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50Ojpx
X2dldHNldCA9IHsgJkhUTUxFbGVtZW50OjpxdW90ZUdldHRlciwgJkhUTUxFbGVtZW50OjpxdW90
ZVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OnBy
ZV9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6cHJlR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OnByZVNl
dHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmJyX2dl
dHNldCA9IHsgJkhUTUxFbGVtZW50OjpickdldHRlciwgJkhUTUxFbGVtZW50OjpiclNldHRlciB9
OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmJhc2VGb250X2dl
dHNldCA9IHsgJkhUTUxFbGVtZW50OjpiYXNlRm9udEdldHRlciwgJkhUTUxFbGVtZW50OjpiYXNl
Rm9udFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6
OmZvbnRfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmZvbnRHZXR0ZXIsICZIVE1MRWxlbWVudDo6
Zm9udFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6
OmhyX2dldHNldCA9IHsgJkhUTUxFbGVtZW50OjpockdldHRlciwgJkhUTUxFbGVtZW50OjpoclNl
dHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6Om1vZF9n
ZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6bW9kR2V0dGVyLCAmSFRNTEVsZW1lbnQ6Om1vZFNldHRl
ciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmFfZ2V0c2V0
ID0geyAmSFRNTEVsZW1lbnQ6OmFuY2hvckdldHRlciwgJkhUTUxFbGVtZW50OjphbmNob3JTZXR0
ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjpjYW52YXNf
Z2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmltYWdlR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmltYWdl
U2V0dGVyIH07Citjb25zdCBIVE1MRWxlbWVudDo6R2V0U2V0SW5mbyBIVE1MRWxlbWVudDo6aW1n
X2dldHNldCA9IHsgJkhUTUxFbGVtZW50OjppbWFnZUdldHRlciwgJkhUTUxFbGVtZW50OjppbWFn
ZVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6Om9i
amVjdF9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6b2JqZWN0R2V0dGVyLCAmSFRNTEVsZW1lbnQ6
Om9iamVjdFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1l
bnQ6OnBhcmFtX2dldHNldCA9IHsgJkhUTUxFbGVtZW50OjpwYXJhbUdldHRlciwgJkhUTUxFbGVt
ZW50OjpwYXJhbVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVs
ZW1lbnQ6OmFwcGxldF9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6YXBwbGV0R2V0dGVyLCAmSFRN
TEVsZW1lbnQ6OmFwcGxldFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8g
SFRNTEVsZW1lbnQ6Om1hcF9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6bWFwR2V0dGVyLCAmSFRN
TEVsZW1lbnQ6Om1hcFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRN
TEVsZW1lbnQ6OmFyZWFfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmFyZWFHZXR0ZXIsICZIVE1M
RWxlbWVudDo6YXJlYVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRN
TEVsZW1lbnQ6OnNjcmlwdF9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6c2NyaXB0R2V0dGVyLCAm
SFRNTEVsZW1lbnQ6OnNjcmlwdFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldElu
Zm8gSFRNTEVsZW1lbnQ6OnRhYmxlX2dldHNldCA9IHsgJkhUTUxFbGVtZW50Ojp0YWJsZUdldHRl
ciwgJkhUTUxFbGVtZW50Ojp0YWJsZVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNl
dEluZm8gSFRNTEVsZW1lbnQ6OmNhcHRpb25fZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OnRhYmxl
Q2FwdGlvbkdldHRlciwgJkhUTUxFbGVtZW50Ojp0YWJsZUNhcHRpb25TZXR0ZXIgfTsKK2NvbnN0
IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50Ojpjb2xfZ2V0c2V0ID0geyAmSFRN
TEVsZW1lbnQ6OnRhYmxlQ29sR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OnRhYmxlQ29sU2V0dGVyIH07
Citjb25zdCBIVE1MRWxlbWVudDo6R2V0U2V0SW5mbyBIVE1MRWxlbWVudDo6dGFibGVzZWN0aW9u
X2dldHNldCA9IHsgJkhUTUxFbGVtZW50Ojp0YWJsZVNlY3Rpb25HZXR0ZXIsICZIVE1MRWxlbWVu
dDo6dGFibGVTZWN0aW9uU2V0dGVyIH07Citjb25zdCBIVE1MRWxlbWVudDo6R2V0U2V0SW5mbyBI
VE1MRWxlbWVudDo6dHJfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OnRhYmxlUm93R2V0dGVyLCAm
SFRNTEVsZW1lbnQ6OnRhYmxlUm93U2V0dGVyIH07Citjb25zdCBIVE1MRWxlbWVudDo6R2V0U2V0
SW5mbyBIVE1MRWxlbWVudDo6dGFibGVjZWxsX2dldHNldCA9IHsgJkhUTUxFbGVtZW50Ojp0YWJs
ZUNlbGxHZXR0ZXIsICZIVE1MRWxlbWVudDo6dGFibGVDZWxsU2V0dGVyIH07Citjb25zdCBIVE1M
RWxlbWVudDo6R2V0U2V0SW5mbyBIVE1MRWxlbWVudDo6ZnJhbWVTZXRfZ2V0c2V0ID0geyAmSFRN
TEVsZW1lbnQ6OmZyYW1lU2V0R2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmZyYW1lU2V0U2V0dGVyIH07
Citjb25zdCBIVE1MRWxlbWVudDo6R2V0U2V0SW5mbyBIVE1MRWxlbWVudDo6ZnJhbWVfZ2V0c2V0
ID0geyAmSFRNTEVsZW1lbnQ6OmZyYW1lR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmZyYW1lU2V0dGVy
IH07Citjb25zdCBIVE1MRWxlbWVudDo6R2V0U2V0SW5mbyBIVE1MRWxlbWVudDo6aUZyYW1lX2dl
dHNldCA9IHsgJkhUTUxFbGVtZW50OjppRnJhbWVHZXR0ZXIsICZIVE1MRWxlbWVudDo6aUZyYW1l
U2V0dGVyIH07Citjb25zdCBIVE1MRWxlbWVudDo6R2V0U2V0SW5mbyBIVE1MRWxlbWVudDo6bWFy
cXVlZV9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6bWFycXVlZUdldHRlciwgJkhUTUxFbGVtZW50
OjptYXJxdWVlU2V0dGVyIH07CisKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvKiBIVE1M
RWxlbWVudDo6Z2V0U2V0SW5mbygpIGNvbnN0Cit7CisgICAgLy8gV2UgYWxyZWFkeSBrbm93IHdl
IGhhdmUgYW4gSFRNTCBlbGVtZW50LCBzbyB3ZSBvbmx5IG5lZWQgdG8gY29tcGFyZSB0aGUgbG9j
YWxOYW1lIGNvbXBvbmVudCBvZiB0aGUgcXVhbGlmaWVkIG5hbWUuCisgICAgc3RhdGljIFFQdHJE
aWN0PGNvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvPiBnZXRTZXRJbmZvRGljdDsKKyAgICBp
ZiAoZ2V0U2V0SW5mb0RpY3QuaXNFbXB0eSgpKSB7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmlu
c2VydChIVE1MTmFtZXM6OmEoKS5sb2NhbE5hbWVQdHIoKSwgJmFfZ2V0c2V0KTsKKyAgICAgICAg
Z2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6YXBwbGV0KCkubG9jYWxOYW1lUHRyKCks
ICZhcHBsZXRfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1l
czo6YXJlYSgpLmxvY2FsTmFtZVB0cigpLCAmYXJlYV9nZXRzZXQpOworICAgICAgICBnZXRTZXRJ
bmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpiYXNlKCkubG9jYWxOYW1lUHRyKCksICZiYXNlX2dl
dHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmJhc2Vmb250
KCkubG9jYWxOYW1lUHRyKCksICZiYXNlRm9udF9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZv
RGljdC5pbnNlcnQoSFRNTE5hbWVzOjpibG9ja3F1b3RlKCkubG9jYWxOYW1lUHRyKCksICZibG9j
a1F1b3RlX2dldHNldCk7IAorICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVz
Ojpib2R5KCkubG9jYWxOYW1lUHRyKCksICZib2R5X2dldHNldCk7CisgICAgICAgIGdldFNldElu
Zm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmJyKCkubG9jYWxOYW1lUHRyKCksICZicl9nZXRzZXQp
OworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpidXR0b24oKS5sb2Nh
bE5hbWVQdHIoKSwgJmJ1dHRvbl9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNl
cnQoSFRNTE5hbWVzOjpjYW52YXMoKS5sb2NhbE5hbWVQdHIoKSwgJmNhbnZhc19nZXRzZXQpOwor
ICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpjYXB0aW9uKCkubG9jYWxO
YW1lUHRyKCksICZjYXB0aW9uX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2Vy
dChIVE1MTmFtZXM6OmNvbCgpLmxvY2FsTmFtZVB0cigpLCAmY29sX2dldHNldCk7CisgICAgICAg
IGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmNvbGdyb3VwKCkubG9jYWxOYW1lUHRy
KCksICZjb2xfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1l
czo6ZGVsKCkubG9jYWxOYW1lUHRyKCksICZtb2RfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5m
b0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6ZGlyKCkubG9jYWxOYW1lUHRyKCksICZkaXJfZ2V0c2V0
KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6ZGl2KCkubG9jYWxO
YW1lUHRyKCksICZkaXZfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhU
TUxOYW1lczo6ZGwoKS5sb2NhbE5hbWVQdHIoKSwgJmRsX2dldHNldCk7CisgICAgICAgIGdldFNl
dEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmZpZWxkc2V0KCkubG9jYWxOYW1lUHRyKCksICZm
aWVsZFNldF9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVz
Ojpmb250KCkubG9jYWxOYW1lUHRyKCksICZmb250X2dldHNldCk7CisgICAgICAgIGdldFNldElu
Zm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmZvcm0oKS5sb2NhbE5hbWVQdHIoKSwgJmZvcm1fZ2V0
c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6ZnJhbWUoKS5s
b2NhbE5hbWVQdHIoKSwgJmZyYW1lX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmlu
c2VydChIVE1MTmFtZXM6OmZyYW1lc2V0KCkubG9jYWxOYW1lUHRyKCksICZmcmFtZVNldF9nZXRz
ZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpoMSgpLmxvY2Fs
TmFtZVB0cigpLCAmaGVhZGluZ19nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNl
cnQoSFRNTE5hbWVzOjpoMigpLmxvY2FsTmFtZVB0cigpLCAmaGVhZGluZ19nZXRzZXQpOworICAg
ICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpoMygpLmxvY2FsTmFtZVB0cigp
LCAmaGVhZGluZ19nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5h
bWVzOjpoNCgpLmxvY2FsTmFtZVB0cigpLCAmaGVhZGluZ19nZXRzZXQpOworICAgICAgICBnZXRT
ZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpoNSgpLmxvY2FsTmFtZVB0cigpLCAmaGVhZGlu
Z19nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpoNigp
LmxvY2FsTmFtZVB0cigpLCAmaGVhZGluZ19nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGlj
dC5pbnNlcnQoSFRNTE5hbWVzOjpoZWFkKCkubG9jYWxOYW1lUHRyKCksICZoZWFkX2dldHNldCk7
CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmhyKCkubG9jYWxOYW1l
UHRyKCksICZocl9nZXRzZXQpOyAKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxO
YW1lczo6aHRtbCgpLmxvY2FsTmFtZVB0cigpLCAmaHRtbF9nZXRzZXQpOworICAgICAgICBnZXRT
ZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjppZnJhbWUoKS5sb2NhbE5hbWVQdHIoKSwgJmlG
cmFtZV9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpp
bWcoKS5sb2NhbE5hbWVQdHIoKSwgJmltZ19nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGlj
dC5pbnNlcnQoSFRNTE5hbWVzOjppbnB1dCgpLmxvY2FsTmFtZVB0cigpLCAmaW5wdXRfZ2V0c2V0
KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6aW5zKCkubG9jYWxO
YW1lUHRyKCksICZtb2RfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhU
TUxOYW1lczo6aXNpbmRleCgpLmxvY2FsTmFtZVB0cigpLCAmaXNJbmRleF9nZXRzZXQpOworICAg
ICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpsYWJlbCgpLmxvY2FsTmFtZVB0
cigpLCAmbGFiZWxfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxO
YW1lczo6bGVnZW5kKCkubG9jYWxOYW1lUHRyKCksICZsZWdlbmRfZ2V0c2V0KTsKKyAgICAgICAg
Z2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6bGkoKS5sb2NhbE5hbWVQdHIoKSwgJmxp
X2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Omxpbmso
KS5sb2NhbE5hbWVQdHIoKSwgJmxpbmtfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3Qu
aW5zZXJ0KEhUTUxOYW1lczo6bWFwKCkubG9jYWxOYW1lUHRyKCksICZtYXBfZ2V0c2V0KTsKKyAg
ICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6bWFycXVlZSgpLmxvY2FsTmFt
ZVB0cigpLCAmbWFycXVlZV9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQo
SFRNTE5hbWVzOjptZW51KCkubG9jYWxOYW1lUHRyKCksICZtZW51X2dldHNldCk7CisgICAgICAg
IGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Om1ldGEoKS5sb2NhbE5hbWVQdHIoKSwg
Jm1ldGFfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6
b2JqZWN0KCkubG9jYWxOYW1lUHRyKCksICZvYmplY3RfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0
SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6b2woKS5sb2NhbE5hbWVQdHIoKSwgJm9sX2dldHNl
dCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Om9wdGlvbigpLmxv
Y2FsTmFtZVB0cigpLCAmb3B0aW9uX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmlu
c2VydChIVE1MTmFtZXM6Om9wdGdyb3VwKCkubG9jYWxOYW1lUHRyKCksICZvcHRHcm91cF9nZXRz
ZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpwKCkubG9jYWxO
YW1lUHRyKCksICZwX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1M
TmFtZXM6OnBhcmFtKCkubG9jYWxOYW1lUHRyKCksICZwYXJhbV9nZXRzZXQpOworICAgICAgICBn
ZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpwcmUoKS5sb2NhbE5hbWVQdHIoKSwgJnBy
ZV9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpxKCku
bG9jYWxOYW1lUHRyKCksICZxX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2Vy
dChIVE1MTmFtZXM6OnNjcmlwdCgpLmxvY2FsTmFtZVB0cigpLCAmc2NyaXB0X2dldHNldCk7Cisg
ICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OnNlbGVjdCgpLmxvY2FsTmFt
ZVB0cigpLCAmc2VsZWN0X2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChI
VE1MTmFtZXM6OnN0eWxlKCkubG9jYWxOYW1lUHRyKCksICZzdHlsZV9nZXRzZXQpOworICAgICAg
ICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjp0YWJsZSgpLmxvY2FsTmFtZVB0cigp
LCAmdGFibGVfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1l
czo6dGJvZHkoKS5sb2NhbE5hbWVQdHIoKSwgJnRhYmxlc2VjdGlvbl9nZXRzZXQpOworICAgICAg
ICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjp0ZCgpLmxvY2FsTmFtZVB0cigpLCAm
dGFibGVjZWxsX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFt
ZXM6OnRleHRhcmVhKCkubG9jYWxOYW1lUHRyKCksICZ0ZXh0QXJlYV9nZXRzZXQpOworICAgICAg
ICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjp0aCgpLmxvY2FsTmFtZVB0cigpLCAm
dGFibGVjZWxsX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFt
ZXM6OnRoZWFkKCkubG9jYWxOYW1lUHRyKCksICZ0YWJsZXNlY3Rpb25fZ2V0c2V0KTsKKyAgICAg
ICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6dGZvb3QoKS5sb2NhbE5hbWVQdHIo
KSwgJnRhYmxlc2VjdGlvbl9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQo
SFRNTE5hbWVzOjp0aXRsZSgpLmxvY2FsTmFtZVB0cigpLCAmdGl0bGVfZ2V0c2V0KTsKKyAgICAg
ICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6dHIoKS5sb2NhbE5hbWVQdHIoKSwg
JnRyX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OnVs
KCkubG9jYWxOYW1lUHRyKCksICZ1bF9nZXRzZXQpOworICAgIH0KKyAgICAKKyAgICBIVE1MRWxl
bWVudEltcGwqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwqPihpbXBsKCkp
OworICAgIGNvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvKiByZXN1bHQgPSBnZXRTZXRJbmZv
RGljdC5maW5kKGVsZW1lbnQtPmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCkpOworICAgIGlm
IChyZXN1bHQpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIDA7Cit9CisKIC8q
CiBAYmVnaW4gSFRNTEVsZW1lbnRUYWJsZSAxNAogICBpZAkJS0pTOjpIVE1MRWxlbWVudDo6RWxl
bWVudElkCURvbnREZWxldGUKQEAgLTExODgsMzUgKzEyNzIsMzIgQEAgSFRNTEVsZW1lbnQ6OkhU
TUxFbGVtZW50KEV4ZWNTdGF0ZSAqZXhlYwogCiBWYWx1ZSBLSlM6OkhUTUxFbGVtZW50Ojp0cnlH
ZXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUpIGNvbnN0
CiB7Ci0gIEhUTUxFbGVtZW50SW1wbCAmZWxlbWVudCA9ICpzdGF0aWNfY2FzdDxIVE1MRWxlbWVu
dEltcGwgKj4oaW1wbCgpKTsKKyAgICBIVE1MRWxlbWVudEltcGwgJmVsZW1lbnQgPSAqc3RhdGlj
X2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KGltcGwoKSk7CiAjaWZkZWYgS0pTX1ZFUkJPU0UKLSAg
a2REZWJ1Zyg2MDcwKSA8PCAiS0pTOjpIVE1MRWxlbWVudDo6dHJ5R2V0ICIgPDwgcHJvcGVydHlO
YW1lLnFzdHJpbmcoKSA8PCAiIHRoaXNUYWc9IiA8PCBlbGVtZW50LnRhZ05hbWUoKS5zdHJpbmco
KSA8PCBlbmRsOworICAgIGtkRGVidWcoNjA3MCkgPDwgIktKUzo6SFRNTEVsZW1lbnQ6OnRyeUdl
dCAiIDw8IHByb3BlcnR5TmFtZS5xc3RyaW5nKCkgPDwgIiB0aGlzVGFnPSIgPDwgZWxlbWVudC50
YWdOYW1lKCkuc3RyaW5nKCkgPDwgZW5kbDsKICNlbmRpZgotICAvLyBGaXJzdCBsb29rIGF0IGR5
bmFtaWMgcHJvcGVydGllcwotICBzd2l0Y2ggKGVsZW1lbnQuaWQoKSkgewotICAgIGNhc2UgSURf
Rk9STTogewotICAgICAgSFRNTEZvcm1FbGVtZW50SW1wbCAmZm9ybSA9IHN0YXRpY19jYXN0PEhU
TUxGb3JtRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICAvLyBDaGVjayBpZiB3ZSdyZSBy
ZXRyaWV2aW5nIGFuIGVsZW1lbnQgKGJ5IGluZGV4IG9yIGJ5IG5hbWUpCi0gICAgICBib29sIG9r
OwotICAgICAgdWludCB1ID0gcHJvcGVydHlOYW1lLnRvVUxvbmcoJm9rKTsKLSAgICAgIGlmIChv
aykKLSAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYywgZm9ybS5lbGVtZW50cygpLT5pdGVt
KHUpKTsKLSAgICAgIFZhbHVlSW1wICpuYW1lZEl0ZW1zID0gSFRNTENvbGxlY3Rpb24oZXhlYywg
Zm9ybS5lbGVtZW50cygpLmdldCgpKS5nZXROYW1lZEl0ZW1zKGV4ZWMsIHByb3BlcnR5TmFtZSk7
Ci0gICAgICBpZiAoIW5hbWVkSXRlbXMtPmlzVW5kZWZpbmVkKCkpCi0gICAgICAgIHJldHVybiBu
YW1lZEl0ZW1zOwotICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgSURfU0VMRUNUOiB7Ci0g
ICAgICBIVE1MU2VsZWN0RWxlbWVudEltcGwgJnNlbGVjdCA9IHN0YXRpY19jYXN0PEhUTUxTZWxl
Y3RFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIGJvb2wgb2s7Ci0gICAgICB1aW50IHUg
PSBwcm9wZXJ0eU5hbWUudG9VTG9uZygmb2spOwotICAgICAgaWYgKG9rKQotICAgICAgICByZXR1
cm4gZ2V0RE9NTm9kZShleGVjLCBzZWxlY3Qub3B0aW9uc0hUTUxDb2xsZWN0aW9uKCktPml0ZW0o
dSkpOyAvLyBub3Qgc3BlY2lmaWVkIGJ5IERPTSg/KSBidXQgc3VwcG9ydGVkIGluIG5ldHNjYXBl
L0lFCisgICAgLy8gRmlyc3QgbG9vayBhdCBkeW5hbWljIHByb3BlcnRpZXMKKyAgICBpZiAoZWxl
bWVudC5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpmb3JtKCkpKSB7CisgICAgICAgIEhUTUxGb3Jt
RWxlbWVudEltcGwgJmZvcm0gPSBzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnRJbXBsICY+KGVs
ZW1lbnQpOworICAgICAgICAvLyBDaGVjayBpZiB3ZSdyZSByZXRyaWV2aW5nIGFuIGVsZW1lbnQg
KGJ5IGluZGV4IG9yIGJ5IG5hbWUpCisgICAgICAgIGJvb2wgb2s7CisgICAgICAgIHVpbnQgdSA9
IHByb3BlcnR5TmFtZS50b1VMb25nKCZvayk7CisgICAgICAgIGlmIChvaykKKyAgICAgICAgICAg
IHJldHVybiBnZXRET01Ob2RlKGV4ZWMsIGZvcm0uZWxlbWVudHMoKS0+aXRlbSh1KSk7CisgICAg
ICAgIFZhbHVlSW1wICpuYW1lZEl0ZW1zID0gSFRNTENvbGxlY3Rpb24oZXhlYywgZm9ybS5lbGVt
ZW50cygpLmdldCgpKS5nZXROYW1lZEl0ZW1zKGV4ZWMsIHByb3BlcnR5TmFtZSk7CisgICAgICAg
IGlmICghbmFtZWRJdGVtcy0+aXNVbmRlZmluZWQoKSkKKyAgICAgICAgICAgIHJldHVybiBuYW1l
ZEl0ZW1zOworICAgIH0KKyAgICBlbHNlIGlmIChlbGVtZW50Lmhhc0xvY2FsTmFtZShIVE1MTmFt
ZXM6OnNlbGVjdCgpKSkgeworICAgICAgICBIVE1MU2VsZWN0RWxlbWVudEltcGwgJnNlbGVjdCA9
IHN0YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICAgICAg
Ym9vbCBvazsKKyAgICAgICAgdWludCB1ID0gcHJvcGVydHlOYW1lLnRvVUxvbmcoJm9rKTsKKyAg
ICAgICAgaWYgKG9rKQorICAgICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYywgc2VsZWN0
Lm9wdGlvbnNIVE1MQ29sbGVjdGlvbigpLT5pdGVtKHUpKTsgLy8gbm90IHNwZWNpZmllZCBieSBE
T00oPykgYnV0IHN1cHBvcnRlZCBpbiBuZXRzY2FwZS9JRQogICAgIH0KLSAgICAgIGJyZWFrOwot
ICAgIGNhc2UgSURfRlJBTUVTRVQ6IHsKKyAgICBlbHNlIGlmIChlbGVtZW50Lmhhc0xvY2FsTmFt
ZShIVE1MTmFtZXM6OmZyYW1lc2V0KCkpKSB7CiAgICAgICAgIE5vZGVJbXBsICpmcmFtZSA9IGVs
ZW1lbnQuY2hpbGRyZW4oKS0+bmFtZWRJdGVtKHByb3BlcnR5TmFtZS5zdHJpbmcoKSk7Ci0gICAg
ICAgIGlmIChmcmFtZSAmJiBmcmFtZS0+aWQoKSA9PSBJRF9GUkFNRSkgeworICAgICAgICBpZiAo
ZnJhbWUgJiYgZnJhbWUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpmcmFtZSgpKSkgewogICAgICAg
ICAgICAgRG9jdW1lbnRJbXBsKiBkb2MgPSBzdGF0aWNfY2FzdDxIVE1MRnJhbWVFbGVtZW50SW1w
bCAqPihmcmFtZSktPmNvbnRlbnREb2N1bWVudCgpOwogICAgICAgICAgICAgaWYgKGRvYykgewog
ICAgICAgICAgICAgICAgIEtIVE1MUGFydCogcGFydCA9IGRvYy0+cGFydCgpOwpAQCAtMTIyOSw3
MyArMTMxMCw1NyBAQCBWYWx1ZSBLSlM6OkhUTUxFbGVtZW50Ojp0cnlHZXQoRXhlY1N0YXRlCiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
SURfRlJBTUU6Ci0gICAgY2FzZSBJRF9JRlJBTUU6IHsKKyAgICBlbHNlIGlmIChlbGVtZW50Lmhh
c0xvY2FsTmFtZShIVE1MTmFtZXM6OmZyYW1lKCkpIHx8IGVsZW1lbnQuaGFzTG9jYWxOYW1lKEhU
TUxOYW1lczo6aWZyYW1lKCkpKSB7CiAgICAgICAgIERvY3VtZW50SW1wbCogZG9jID0gc3RhdGlj
X2Nhc3Q8SFRNTEZyYW1lRWxlbWVudEltcGwgJj4oZWxlbWVudCkuY29udGVudERvY3VtZW50KCk7
Ci0gICAgICAgIGlmICggZG9jICkgeworICAgICAgICBpZiAoZG9jKSB7CiAgICAgICAgICAgICBL
SFRNTFBhcnQqIHBhcnQgPSBkb2MtPnBhcnQoKTsKLSAgICAgICAgICAgIGlmICggcGFydCApIHsK
KyAgICAgICAgICAgIGlmIChwYXJ0KSB7CiAgICAgICAgICAgICAgIFdpbmRvdyAqd2luZG93ID0g
V2luZG93OjpyZXRyaWV2ZVdpbmRvdyhwYXJ0KTsKIAkgICAgICBpZiAod2luZG93ICYmIHdpbmRv
dy0+aGFzUHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lKSkKICAgICAgICAgICAgICAgICByZXR1
cm4gd2luZG93LT5nZXQoZXhlYywgcHJvcGVydHlOYW1lKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQogICAgIH0KLSAgICAgIGJyZWFrOwogI2lmIEFQUExFX0NIQU5HRVMKLSAgICBjYXNlIElE
X0VNQkVEOgotICAgIGNhc2UgSURfT0JKRUNUOgotICAgIGNhc2UgSURfQVBQTEVUOiB7Ci0JaWYg
KHByb3BlcnR5TmFtZSA9PSAiX19hcHBsZV9ydW50aW1lX29iamVjdCIpIHsKKyAgICBlbHNlIGlm
IChlbGVtZW50Lmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmVtYmVkKCkpIHx8IGVsZW1lbnQuaGFz
TG9jYWxOYW1lKEhUTUxOYW1lczo6b2JqZWN0KCkpIHx8CisgICAgICAgICAgICAgZWxlbWVudC5o
YXNMb2NhbE5hbWUoSFRNTE5hbWVzOjphcHBsZXQoKSkpIHsKKwlpZiAocHJvcGVydHlOYW1lID09
ICJfX2FwcGxlX3J1bnRpbWVfb2JqZWN0IikKIAkgICAgcmV0dXJuIGdldFJ1bnRpbWVPYmplY3Qo
ZXhlYywmZWxlbWVudCk7Ci0JfQotCiAJVmFsdWUgcnVudGltZU9iamVjdCA9IGdldFJ1bnRpbWVP
YmplY3QoZXhlYywmZWxlbWVudCk7CiAJaWYgKCFydW50aW1lT2JqZWN0LmlzTnVsbCgpKSB7CiAJ
ICAgIE9iamVjdEltcCAqaW1wID0gc3RhdGljX2Nhc3Q8T2JqZWN0SW1wICo+KHJ1bnRpbWVPYmpl
Y3QuaW1wKCkpOwotCSAgICBpZiAoaW1wLT5oYXNQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUp
KSB7CisJICAgIGlmIChpbXAtPmhhc1Byb3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFtZSkpCiAJCXJl
dHVybiBpbXAtPmdldCAoZXhlYywgcHJvcGVydHlOYW1lKTsKLQkgICAgfQogCX0KICAgICB9Ci0g
ICAgICBicmVhazsKICNlbmRpZgotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
IAotICBjb25zdCBIYXNoVGFibGUqIHRhYmxlID0gY2xhc3NJbmZvKCktPnByb3BIYXNoVGFibGU7
IC8vIGdldCB0aGUgcmlnaHQgaGFzaHRhYmxlCi0gIGNvbnN0IEhhc2hFbnRyeSogZW50cnkgPSBM
b29rdXA6OmZpbmRFbnRyeSh0YWJsZSwgcHJvcGVydHlOYW1lKTsKLSAgaWYgKGVudHJ5KSB7Ci0g
ICAgaWYgKGVudHJ5LT5hdHRyICYgRnVuY3Rpb24pCi0gICAgICByZXR1cm4gbG9va3VwT3JDcmVh
dGVGdW5jdGlvbjxLSlM6OkhUTUxFbGVtZW50RnVuY3Rpb24+KGV4ZWMsIHByb3BlcnR5TmFtZSwg
dGhpcywgZW50cnktPnZhbHVlLCBlbnRyeS0+cGFyYW1zLCBlbnRyeS0+YXR0cik7Ci0gICAgcmV0
dXJuIGdldFZhbHVlUHJvcGVydHkoZXhlYywgZW50cnktPnZhbHVlKTsKLSAgfQorICAgIGNvbnN0
IEhhc2hUYWJsZSogdGFibGUgPSBjbGFzc0luZm8oKS0+cHJvcEhhc2hUYWJsZTsgLy8gZ2V0IHRo
ZSByaWdodCBoYXNodGFibGUKKyAgICBjb25zdCBIYXNoRW50cnkqIGVudHJ5ID0gTG9va3VwOjpm
aW5kRW50cnkodGFibGUsIHByb3BlcnR5TmFtZSk7CisgICAgaWYgKGVudHJ5KSB7CisgICAgICAg
IGlmIChlbnRyeS0+YXR0ciAmIEZ1bmN0aW9uKQorICAgICAgICAgICAgcmV0dXJuIGxvb2t1cE9y
Q3JlYXRlRnVuY3Rpb248S0pTOjpIVE1MRWxlbWVudEZ1bmN0aW9uPihleGVjLCBwcm9wZXJ0eU5h
bWUsIHRoaXMsIGVudHJ5LT52YWx1ZSwgZW50cnktPnBhcmFtcywgZW50cnktPmF0dHIpOworICAg
ICAgICByZXR1cm4gZ2V0VmFsdWVQcm9wZXJ0eShleGVjLCBlbnRyeS0+dmFsdWUpOworICAgIH0K
IAotICAvLyBCYXNlIEhUTUxFbGVtZW50IHN0dWZmIG9yIHBhcmVudCBjbGFzcyBmb3J3YXJkLCBh
cyB1c3VhbAotICByZXR1cm4gRE9NT2JqZWN0TG9va3VwR2V0PEtKUzo6SFRNTEVsZW1lbnRGdW5j
dGlvbiwgS0pTOjpIVE1MRWxlbWVudCwgRE9NRWxlbWVudD4oZXhlYywgcHJvcGVydHlOYW1lLCAm
SFRNTEVsZW1lbnRUYWJsZSwgdGhpcyk7CisgICAgLy8gQmFzZSBIVE1MRWxlbWVudCBzdHVmZiBv
ciBwYXJlbnQgY2xhc3MgZm9yd2FyZCwgYXMgdXN1YWwKKyAgICByZXR1cm4gRE9NT2JqZWN0TG9v
a3VwR2V0PEtKUzo6SFRNTEVsZW1lbnRGdW5jdGlvbiwgS0pTOjpIVE1MRWxlbWVudCwgRE9NRWxl
bWVudD4oZXhlYywgcHJvcGVydHlOYW1lLCAmSFRNTEVsZW1lbnRUYWJsZSwgdGhpcyk7CiB9CiAK
IGJvb2wgS0pTOjpIVE1MRWxlbWVudDo6aW1wbGVtZW50c0NhbGwoKSBjb25zdAogewogICAgIEhU
TUxFbGVtZW50SW1wbCAqZWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCAqPihp
bXBsKCkpOwotICAgIHN3aXRjaCAoZWxlbWVudC0+aWQoKSkgewotCWNhc2UgSURfRU1CRUQ6Ci0J
Y2FzZSBJRF9PQkpFQ1Q6Ci0JY2FzZSBJRF9BUFBMRVQ6IHsKLQkJRG9jdW1lbnRJbXBsKiBkb2Mg
PSBlbGVtZW50LT5nZXREb2N1bWVudCgpOwotCQlLSlNQcm94eSAqcHJveHkgPSBLSlNQcm94eTo6
cHJveHkoZG9jLT5wYXJ0KCkpOwotCQlFeGVjU3RhdGUgKmV4ZWMgPSBwcm94eS0+aW50ZXJwcmV0
ZXIoKS0+Z2xvYmFsRXhlYygpOwotCQlWYWx1ZSBydW50aW1lT2JqZWN0ID0gZ2V0UnVudGltZU9i
amVjdChleGVjLGVsZW1lbnQpOwotCQlpZiAoIXJ1bnRpbWVPYmplY3QuaXNOdWxsKCkpIHsKLQkJ
ICAgIE9iamVjdEltcCAqaW1wID0gc3RhdGljX2Nhc3Q8T2JqZWN0SW1wICo+KHJ1bnRpbWVPYmpl
Y3QuaW1wKCkpOwotCQkgICAgcmV0dXJuIGltcC0+aW1wbGVtZW50c0NhbGwgKCk7Ci0JCX0KLQkg
ICAgfQotCSAgICBicmVhazsKLQlkZWZhdWx0OgotCSAgICBicmVhazsKKyAgICBpZiAoZWxlbWVu
dC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmVtYmVkKCkpIHx8CisgICAgICAgIGVsZW1lbnQtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjpvYmplY3QoKSkgfHwKKyAgICAgICAgZWxlbWVudC0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OmFwcGxldCgpKSkgeworICAgCURvY3VtZW50SW1wbCogZG9jID0gZWxl
bWVudC0+Z2V0RG9jdW1lbnQoKTsKKyAgICAgICAgS0pTUHJveHkgKnByb3h5ID0gS0pTUHJveHk6
OnByb3h5KGRvYy0+cGFydCgpKTsKKyAgICAgICAgRXhlY1N0YXRlICpleGVjID0gcHJveHktPmlu
dGVycHJldGVyKCktPmdsb2JhbEV4ZWMoKTsKKyAgICAgICAgVmFsdWUgcnVudGltZU9iamVjdCA9
IGdldFJ1bnRpbWVPYmplY3QoZXhlYyxlbGVtZW50KTsKKyAgICAgICAgaWYgKCFydW50aW1lT2Jq
ZWN0LmlzTnVsbCgpKSB7CisgICAgICAgICAgICBPYmplY3RJbXAgKmltcCA9IHN0YXRpY19jYXN0
PE9iamVjdEltcCAqPihydW50aW1lT2JqZWN0LmltcCgpKTsKKyAgICAgICAgICAgIHJldHVybiBp
bXAtPmltcGxlbWVudHNDYWxsICgpOworICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiBmYWxz
ZTsKIH0KQEAgLTEzMDMsNzg2ICsxMzY4LDg3NyBAQCBib29sIEtKUzo6SFRNTEVsZW1lbnQ6Omlt
cGxlbWVudHNDYWxsKCkgCiBWYWx1ZSBLSlM6OkhUTUxFbGVtZW50OjpjYWxsKEV4ZWNTdGF0ZSAq
ZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0JmFyZ3MpCiB7CiAgICAgSFRNTEVsZW1l
bnRJbXBsICplbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KGltcGwoKSk7
Ci0gICAgc3dpdGNoIChlbGVtZW50LT5pZCgpKSB7Ci0JY2FzZSBJRF9FTUJFRDoKLQljYXNlIElE
X09CSkVDVDoKLQljYXNlIElEX0FQUExFVDogewotCQlWYWx1ZSBydW50aW1lT2JqZWN0ID0gZ2V0
UnVudGltZU9iamVjdChleGVjLGVsZW1lbnQpOwotCQlpZiAoIXJ1bnRpbWVPYmplY3QuaXNOdWxs
KCkpIHsKLQkJICAgIE9iamVjdEltcCAqaW1wID0gc3RhdGljX2Nhc3Q8T2JqZWN0SW1wICo+KHJ1
bnRpbWVPYmplY3QuaW1wKCkpOwotCQkgICAgcmV0dXJuIGltcC0+Y2FsbCAoZXhlYywgdGhpc09i
aiwgYXJncyk7Ci0JCX0KLQkgICAgfQotCSAgICBicmVhazsKLQlkZWZhdWx0OgotCSAgICBicmVh
azsKKyAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmVtYmVkKCkpIHx8Cisg
ICAgICAgIGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvYmplY3QoKSkgfHwKKyAgICAg
ICAgZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmFwcGxldCgpKSkgeworICAgICAgICBW
YWx1ZSBydW50aW1lT2JqZWN0ID0gZ2V0UnVudGltZU9iamVjdChleGVjLGVsZW1lbnQpOworICAg
ICAgICBpZiAoIXJ1bnRpbWVPYmplY3QuaXNOdWxsKCkpIHsKKyAgICAgICAgICAgIE9iamVjdElt
cCAqaW1wID0gc3RhdGljX2Nhc3Q8T2JqZWN0SW1wICo+KHJ1bnRpbWVPYmplY3QuaW1wKCkpOwor
ICAgICAgICAgICAgcmV0dXJuIGltcC0+Y2FsbCAoZXhlYywgdGhpc09iaiwgYXJncyk7CisgICAg
ICAgIH0KICAgICB9CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1WYWx1ZSBLSlM6OkhU
TUxFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBj
b25zdAotewotICBIVE1MRWxlbWVudEltcGwgJmVsZW1lbnQgPSAqc3RhdGljX2Nhc3Q8SFRNTEVs
ZW1lbnRJbXBsICo+KGltcGwoKSk7Ci0gIHN3aXRjaCAoZWxlbWVudC5pZCgpKSB7Ci0gIGNhc2Ug
SURfSFRNTDogewotICAgIEhUTUxIdG1sRWxlbWVudEltcGwgJmh0bWwgPSBzdGF0aWNfY2FzdDxI
VE1MSHRtbEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgIGlmICAgICAgKHRva2VuID09IEh0
bWxWZXJzaW9uKSAgICAgICAgIHJldHVybiBTdHJpbmcoaHRtbC52ZXJzaW9uKCkpOwotICB9Ci0g
IGJyZWFrOwotICBjYXNlIElEX0hFQUQ6IHsKLSAgICBIVE1MSGVhZEVsZW1lbnRJbXBsICZoZWFk
ID0gc3RhdGljX2Nhc3Q8SFRNTEhlYWRFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICBpZiAg
ICAgICh0b2tlbiA9PSBIZWFkUHJvZmlsZSkgICAgICAgICByZXR1cm4gU3RyaW5nKGhlYWQucHJv
ZmlsZSgpKTsKLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9MSU5LOiB7Ci0gICAgSFRNTExpbmtF
bGVtZW50SW1wbCAmbGluayA9IHN0YXRpY19jYXN0PEhUTUxMaW5rRWxlbWVudEltcGwgJj4oZWxl
bWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgTGlua0Rpc2FibGVkOiAgICAg
ICAgcmV0dXJuIEJvb2xlYW4obGluay5kaXNhYmxlZCgpKTsKLSAgICBjYXNlIExpbmtDaGFyc2V0
OiAgICAgICAgIHJldHVybiBTdHJpbmcobGluay5jaGFyc2V0KCkpOwotICAgIGNhc2UgTGlua0hy
ZWY6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhsaW5rLmhyZWYoKSk7Ci0gICAgY2FzZSBMaW5r
SHJlZkxhbmc6ICAgICAgICByZXR1cm4gU3RyaW5nKGxpbmsuaHJlZmxhbmcoKSk7Ci0gICAgY2Fz
ZSBMaW5rTWVkaWE6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGxpbmsubWVkaWEoKSk7Ci0gICAg
Y2FzZSBMaW5rUmVsOiAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGxpbmsucmVsKCkpOwotICAg
IGNhc2UgTGlua1JldjogICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhsaW5rLnJldigpKTsKLSAg
ICBjYXNlIExpbmtUYXJnZXQ6ICAgICAgICAgIHJldHVybiBTdHJpbmcobGluay50YXJnZXQoKSk7
Ci0gICAgY2FzZSBMaW5rVHlwZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGxpbmsudHlwZSgp
KTsKLSAgICBjYXNlIExpbmtTaGVldDogICAgICAgICAgIHJldHVybiBnZXRET01TdHlsZVNoZWV0
KGV4ZWMsIGxpbmsuc2hlZXQoKSk7Ci0gICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX1RJ
VExFOiB7Ci0gICAgSFRNTFRpdGxlRWxlbWVudEltcGwgJnRpdGxlID0gc3RhdGljX2Nhc3Q8SFRN
TFRpdGxlRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAg
IGNhc2UgVGl0bGVUZXh0OiAgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0aXRsZS50ZXh0
KCkpOwotICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9NRVRBOiB7Ci0gICAgSFRNTE1l
dGFFbGVtZW50SW1wbCAmbWV0YSA9IHN0YXRpY19jYXN0PEhUTUxNZXRhRWxlbWVudEltcGwgJj4o
ZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgTWV0YUNvbnRlbnQ6ICAg
ICAgICAgcmV0dXJuIFN0cmluZyhtZXRhLmNvbnRlbnQoKSk7Ci0gICAgY2FzZSBNZXRhSHR0cEVx
dWl2OiAgICAgICByZXR1cm4gU3RyaW5nKG1ldGEuaHR0cEVxdWl2KCkpOwotICAgIGNhc2UgTWV0
YU5hbWU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhtZXRhLm5hbWUoKSk7Ci0gICAgY2FzZSBN
ZXRhU2NoZW1lOiAgICAgICAgICByZXR1cm4gU3RyaW5nKG1ldGEuc2NoZW1lKCkpOwotICAgIH0K
LSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9CQVNFOiB7Ci0gICAgSFRNTEJhc2VFbGVtZW50SW1w
bCAmYmFzZSA9IHN0YXRpY19jYXN0PEhUTUxCYXNlRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0g
ICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgQmFzZUhyZWY6ICAgICAgICAgICAgcmV0dXJu
IFN0cmluZyhiYXNlLmhyZWYoKSk7Ci0gICAgY2FzZSBCYXNlVGFyZ2V0OiAgICAgICAgICByZXR1
cm4gU3RyaW5nKGJhc2UudGFyZ2V0KCkpOwotICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJ
RF9JU0lOREVYOiB7Ci0gICAgSFRNTElzSW5kZXhFbGVtZW50SW1wbCAmaXNpbmRleCA9IHN0YXRp
Y19jYXN0PEhUTUxJc0luZGV4RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0
b2tlbikgewotICAgIGNhc2UgSXNJbmRleEZvcm06ICAgICAgICAgICAgcmV0dXJuIGdldERPTU5v
ZGUoZXhlYywgaXNpbmRleC5mb3JtKCkpOyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVudAotICAgIGNh
c2UgSXNJbmRleFByb21wdDogICAgICAgICAgcmV0dXJuIFN0cmluZyhpc2luZGV4LnByb21wdCgp
KTsKLSAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfU1RZTEU6IHsKLSAgICBIVE1MU3R5
bGVFbGVtZW50SW1wbCAmc3R5bGUgPSBzdGF0aWNfY2FzdDxIVE1MU3R5bGVFbGVtZW50SW1wbCAm
PihlbGVtZW50KTsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBTdHlsZURpc2FibGVk
OiAgICAgICAgcmV0dXJuIEJvb2xlYW4oc3R5bGUuZGlzYWJsZWQoKSk7Ci0gICAgY2FzZSBTdHls
ZU1lZGlhOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhzdHlsZS5tZWRpYSgpKTsKLSAgICBjYXNl
IFN0eWxlVHlwZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKHN0eWxlLnR5cGUoKSk7Ci0gICAg
Y2FzZSBTdHlsZVNoZWV0OiAgICAgICAgICAgcmV0dXJuIGdldERPTVN0eWxlU2hlZXQoZXhlYywg
c3R5bGUuc2hlZXQoKSk7Ci0gICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX0JPRFk6IHsK
LSAgICBIVE1MQm9keUVsZW1lbnRJbXBsICZib2R5ID0gc3RhdGljX2Nhc3Q8SFRNTEJvZHlFbGVt
ZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBCb2R5
QUxpbms6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGJvZHkuYUxpbmsoKSk7Ci0gICAgY2FzZSBC
b2R5QmFja2dyb3VuZDogICAgICByZXR1cm4gU3RyaW5nKGJvZHkuYmFja2dyb3VuZCgpKTsKLSAg
ICBjYXNlIEJvZHlCZ0NvbG9yOiAgICAgICAgIHJldHVybiBTdHJpbmcoYm9keS5iZ0NvbG9yKCkp
OwotICAgIGNhc2UgQm9keUxpbms6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhib2R5Lmxpbmso
KSk7Ci0gICAgY2FzZSBCb2R5VGV4dDogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGJvZHkudGV4
dCgpKTsKLSAgICBjYXNlIEJvZHlWTGluazogICAgICAgICAgIHJldHVybiBTdHJpbmcoYm9keS52
TGluaygpKTsKLSAgICBkZWZhdWx0OgotICAgICAgLy8gVXBkYXRlIHRoZSBkb2N1bWVudCdzIGxh
eW91dCBiZWZvcmUgd2UgY29tcHV0ZSB0aGVzZSBhdHRyaWJ1dGVzLgotICAgICAgRG9jdW1lbnRJ
bXBsICpkb2MgPSBib2R5LmdldERvY3VtZW50KCk7Ci0gICAgICBpZiAoZG9jKQotICAgICAgICBk
b2MtPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwotICAgICAgS0hUTUxW
aWV3ICp2aWV3ID0gZG9jID8gZG9jLT52aWV3KCkgOiAwOwotICAgICAgc3dpdGNoICh0b2tlbikg
ewotICAgICAgICBjYXNlIEJvZHlTY3JvbGxMZWZ0OgotICAgICAgICAgICAgcmV0dXJuIE51bWJl
cih2aWV3ID8gdmlldy0+Y29udGVudHNYKCkgOiAwKTsKLSAgICAgICAgY2FzZSBCb2R5U2Nyb2xs
VG9wOgotICAgICAgICAgICAgcmV0dXJuIE51bWJlcih2aWV3ID8gdmlldy0+Y29udGVudHNZKCkg
OiAwKTsKLSAgICAgICAgY2FzZSBCb2R5U2Nyb2xsSGVpZ2h0OiAgIHJldHVybiBOdW1iZXIodmll
dyA/IHZpZXctPmNvbnRlbnRzSGVpZ2h0KCkgOiAwKTsKLSAgICAgICAgY2FzZSBCb2R5U2Nyb2xs
V2lkdGg6ICAgIHJldHVybiBOdW1iZXIodmlldyA/IHZpZXctPmNvbnRlbnRzV2lkdGgoKSA6IDAp
OwotICAgICAgfQotICAgIH0KLSAgfQotICBicmVhazsKK1ZhbHVlIEhUTUxFbGVtZW50OjpodG1s
R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxIdG1s
RWxlbWVudEltcGwmIGh0bWwgPSAqc3RhdGljX2Nhc3Q8SFRNTEh0bWxFbGVtZW50SW1wbCo+KGlt
cGwoKSk7CisgICAgaWYgKHRva2VuID09IEh0bWxWZXJzaW9uKQorICAgICAgICByZXR1cm4gU3Ry
aW5nKGh0bWwudmVyc2lvbigpKTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CiAKLSAgY2Fz
ZSBJRF9GT1JNOiB7Ci0gICAgSFRNTEZvcm1FbGVtZW50SW1wbCAmZm9ybSA9IHN0YXRpY19jYXN0
PEhUTUxGb3JtRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewot
ICAgIGNhc2UgRm9ybUVsZW1lbnRzOiAgICAgICAgcmV0dXJuIGdldEhUTUxDb2xsZWN0aW9uKGV4
ZWMsIGZvcm0uZWxlbWVudHMoKS5nZXQoKSk7Ci0gICAgY2FzZSBGb3JtTGVuZ3RoOiAgICAgICAg
ICByZXR1cm4gTnVtYmVyKGZvcm0ubGVuZ3RoKCkpOwotICAgIGNhc2UgRm9ybU5hbWU6ICAgICAg
ICAgICAgcmV0dXJuIFN0cmluZyhmb3JtLm5hbWUoKSk7Ci0gICAgY2FzZSBGb3JtQWNjZXB0Q2hh
cnNldDogICByZXR1cm4gU3RyaW5nKGZvcm0uYWNjZXB0Q2hhcnNldCgpKTsKLSAgICBjYXNlIEZv
cm1BY3Rpb246ICAgICAgICAgIHJldHVybiBTdHJpbmcoZm9ybS5hY3Rpb24oKSk7Ci0gICAgY2Fz
ZSBGb3JtRW5jVHlwZTogICAgICAgICByZXR1cm4gU3RyaW5nKGZvcm0uZW5jdHlwZSgpKTsKLSAg
ICBjYXNlIEZvcm1NZXRob2Q6ICAgICAgICAgIHJldHVybiBTdHJpbmcoZm9ybS5tZXRob2QoKSk7
Ci0gICAgY2FzZSBGb3JtVGFyZ2V0OiAgICAgICAgICByZXR1cm4gU3RyaW5nKGZvcm0udGFyZ2V0
KCkpOwotICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9TRUxFQ1Q6IHsKLSAgICBIVE1M
U2VsZWN0RWxlbWVudEltcGwgJnNlbGVjdCA9IHN0YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50
SW1wbCAmPihlbGVtZW50KTsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBTZWxlY3RU
eXBlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoc2VsZWN0LnR5cGUoKSk7Ci0gICAgY2FzZSBT
ZWxlY3RTZWxlY3RlZEluZGV4OiAgIHJldHVybiBOdW1iZXIoc2VsZWN0LnNlbGVjdGVkSW5kZXgo
KSk7Ci0gICAgY2FzZSBTZWxlY3RWYWx1ZTogICAgICAgICAgIHJldHVybiBTdHJpbmcoc2VsZWN0
LnZhbHVlKCkpOwotICAgIGNhc2UgU2VsZWN0TGVuZ3RoOiAgICAgICAgICByZXR1cm4gTnVtYmVy
KHNlbGVjdC5sZW5ndGgoKSk7Ci0gICAgY2FzZSBTZWxlY3RGb3JtOiAgICAgICAgICAgIHJldHVy
biBnZXRET01Ob2RlKGV4ZWMsIHNlbGVjdC5mb3JtKCkpOyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVu
dAotICAgIGNhc2UgU2VsZWN0T3B0aW9uczogICAgICAgICByZXR1cm4gZ2V0U2VsZWN0SFRNTENv
bGxlY3Rpb24oZXhlYywgc2VsZWN0Lm9wdGlvbnNIVE1MQ29sbGVjdGlvbigpLmdldCgpLCAmc2Vs
ZWN0KTsgLy8gdHlwZSBIVE1MQ29sbGVjdGlvbgotICAgIGNhc2UgU2VsZWN0RGlzYWJsZWQ6ICAg
ICAgICByZXR1cm4gQm9vbGVhbihzZWxlY3QuZGlzYWJsZWQoKSk7Ci0gICAgY2FzZSBTZWxlY3RN
dWx0aXBsZTogICAgICAgIHJldHVybiBCb29sZWFuKHNlbGVjdC5tdWx0aXBsZSgpKTsKLSAgICBj
YXNlIFNlbGVjdE5hbWU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhzZWxlY3QubmFtZSgpKTsK
LSAgICBjYXNlIFNlbGVjdFNpemU6ICAgICAgICAgICAgcmV0dXJuIE51bWJlcihzZWxlY3Quc2l6
ZSgpKTsKLSAgICBjYXNlIFNlbGVjdFRhYkluZGV4OiAgICAgICAgcmV0dXJuIE51bWJlcihzZWxl
Y3QudGFiSW5kZXgoKSk7Ci0gICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX09QVEdST1VQ
OiB7Ci0gICAgSFRNTE9wdEdyb3VwRWxlbWVudEltcGwgJm9wdGdyb3VwID0gc3RhdGljX2Nhc3Q8
SFRNTE9wdEdyb3VwRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikg
ewotICAgIGNhc2UgT3B0R3JvdXBEaXNhYmxlZDogICAgICAgIHJldHVybiBCb29sZWFuKG9wdGdy
b3VwLmRpc2FibGVkKCkpOwotICAgIGNhc2UgT3B0R3JvdXBMYWJlbDogICAgICAgICAgIHJldHVy
biBTdHJpbmcob3B0Z3JvdXAubGFiZWwoKSk7Ci0gICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNl
IElEX09QVElPTjogewotICAgIEhUTUxPcHRpb25FbGVtZW50SW1wbCAmb3B0aW9uID0gc3RhdGlj
X2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgIHN3aXRjaCAodG9r
ZW4pIHsKLSAgICBjYXNlIE9wdGlvbkZvcm06ICAgICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUo
ZXhlYyxvcHRpb24uZm9ybSgpKTsgLy8gdHlwZSBIVE1MRm9ybUVsZW1lbnQKLSAgICBjYXNlIE9w
dGlvbkRlZmF1bHRTZWxlY3RlZDogcmV0dXJuIEJvb2xlYW4ob3B0aW9uLmRlZmF1bHRTZWxlY3Rl
ZCgpKTsKLSAgICBjYXNlIE9wdGlvblRleHQ6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhvcHRp
b24udGV4dCgpKTsKLSAgICBjYXNlIE9wdGlvbkluZGV4OiAgICAgICAgICAgcmV0dXJuIE51bWJl
cihvcHRpb24uaW5kZXgoKSk7Ci0gICAgY2FzZSBPcHRpb25EaXNhYmxlZDogICAgICAgIHJldHVy
biBCb29sZWFuKG9wdGlvbi5kaXNhYmxlZCgpKTsKLSAgICBjYXNlIE9wdGlvbkxhYmVsOiAgICAg
ICAgICAgcmV0dXJuIFN0cmluZyhvcHRpb24ubGFiZWwoKSk7Ci0gICAgY2FzZSBPcHRpb25TZWxl
Y3RlZDogICAgICAgIHJldHVybiBCb29sZWFuKG9wdGlvbi5zZWxlY3RlZCgpKTsKLSAgICBjYXNl
IE9wdGlvblZhbHVlOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhvcHRpb24udmFsdWUoKSk7Ci0g
ICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX0lOUFVUOiB7Ci0gICAgSFRNTElucHV0RWxl
bWVudEltcGwgJmlucHV0ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudEltcGwgJj4oZWxl
bWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgSW5wdXREZWZhdWx0VmFsdWU6
ICAgIHJldHVybiBTdHJpbmcoaW5wdXQuZGVmYXVsdFZhbHVlKCkpOwotICAgIGNhc2UgSW5wdXRE
ZWZhdWx0Q2hlY2tlZDogIHJldHVybiBCb29sZWFuKGlucHV0LmRlZmF1bHRDaGVja2VkKCkpOwot
ICAgIGNhc2UgSW5wdXRGb3JtOiAgICAgICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsaW5w
dXQuZm9ybSgpKTsgLy8gdHlwZSBIVE1MRm9ybUVsZW1lbnQKLSAgICBjYXNlIElucHV0QWNjZXB0
OiAgICAgICAgICByZXR1cm4gU3RyaW5nKGlucHV0LmFjY2VwdCgpKTsKLSAgICBjYXNlIElucHV0
QWNjZXNzS2V5OiAgICAgICByZXR1cm4gU3RyaW5nKGlucHV0LmFjY2Vzc0tleSgpKTsKLSAgICBj
YXNlIElucHV0QWxpZ246ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGlucHV0LmFsaWduKCkpOwot
ICAgIGNhc2UgSW5wdXRBbHQ6ICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoaW5wdXQuYWx0KCkp
OwotICAgIGNhc2UgSW5wdXRDaGVja2VkOiAgICAgICAgIHJldHVybiBCb29sZWFuKGlucHV0LmNo
ZWNrZWQoKSk7Ci0gICAgY2FzZSBJbnB1dERpc2FibGVkOiAgICAgICAgcmV0dXJuIEJvb2xlYW4o
aW5wdXQuZGlzYWJsZWQoKSk7Ci0gICAgY2FzZSBJbnB1dE1heExlbmd0aDogICAgICAgcmV0dXJu
IE51bWJlcihpbnB1dC5tYXhMZW5ndGgoKSk7Ci0gICAgY2FzZSBJbnB1dE5hbWU6ICAgICAgICAg
ICAgcmV0dXJuIFN0cmluZyhpbnB1dC5uYW1lKCkpOwotICAgIGNhc2UgSW5wdXRSZWFkT25seTog
ICAgICAgIHJldHVybiBCb29sZWFuKGlucHV0LnJlYWRPbmx5KCkpOwotICAgIGNhc2UgSW5wdXRT
aXplOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoaW5wdXQuc2l6ZURPTSgpKTsKLSAgICBjYXNl
IElucHV0U3JjOiAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGlucHV0LnNyYygpKTsKLSAgICBj
YXNlIElucHV0VGFiSW5kZXg6ICAgICAgICByZXR1cm4gTnVtYmVyKGlucHV0LnRhYkluZGV4KCkp
OwotICAgIGNhc2UgSW5wdXRUeXBlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoaW5wdXQudHlw
ZSgpKTsKLSAgICBjYXNlIElucHV0VXNlTWFwOiAgICAgICAgICByZXR1cm4gU3RyaW5nKGlucHV0
LnVzZU1hcCgpKTsKLSAgICBjYXNlIElucHV0VmFsdWU6ICAgICAgICAgICByZXR1cm4gU3RyaW5n
KGlucHV0LnZhbHVlKCkpOwotICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9URVhUQVJF
QTogewotICAgIEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBsICZ0ZXh0YXJlYSA9IHN0YXRpY19jYXN0
PEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgIHN3aXRjaCAodG9rZW4p
IHsKLSAgICBjYXNlIFRleHRBcmVhRGVmYXVsdFZhbHVlOiAgICByZXR1cm4gU3RyaW5nKHRleHRh
cmVhLmRlZmF1bHRWYWx1ZSgpKTsKLSAgICBjYXNlIFRleHRBcmVhRm9ybTogICAgICAgICAgICBy
ZXR1cm4gZ2V0RE9NTm9kZShleGVjLHRleHRhcmVhLmZvcm0oKSk7IC8vIHR5cGUgSFRNTEZvcm1F
bGVtZW50Ci0gICAgY2FzZSBUZXh0QXJlYUFjY2Vzc0tleTogICAgICAgcmV0dXJuIFN0cmluZyh0
ZXh0YXJlYS5hY2Nlc3NLZXkoKSk7Ci0gICAgY2FzZSBUZXh0QXJlYUNvbHM6ICAgICAgICAgICAg
cmV0dXJuIE51bWJlcih0ZXh0YXJlYS5jb2xzKCkpOwotICAgIGNhc2UgVGV4dEFyZWFEaXNhYmxl
ZDogICAgICAgIHJldHVybiBCb29sZWFuKHRleHRhcmVhLmRpc2FibGVkKCkpOwotICAgIGNhc2Ug
VGV4dEFyZWFOYW1lOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcodGV4dGFyZWEubmFtZSgpKTsK
LSAgICBjYXNlIFRleHRBcmVhUmVhZE9ubHk6ICAgICAgICByZXR1cm4gQm9vbGVhbih0ZXh0YXJl
YS5yZWFkT25seSgpKTsKLSAgICBjYXNlIFRleHRBcmVhUm93czogICAgICAgICAgICByZXR1cm4g
TnVtYmVyKHRleHRhcmVhLnJvd3MoKSk7Ci0gICAgY2FzZSBUZXh0QXJlYVRhYkluZGV4OiAgICAg
ICAgcmV0dXJuIE51bWJlcih0ZXh0YXJlYS50YWJJbmRleCgpKTsKLSAgICBjYXNlIFRleHRBcmVh
VHlwZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRleHRhcmVhLnR5cGUoKSk7Ci0gICAgY2Fz
ZSBUZXh0QXJlYVZhbHVlOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0ZXh0YXJlYS52YWx1ZSgp
KTsKLSAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfQlVUVE9OOiB7Ci0gICAgSFRNTEJ1
dHRvbkVsZW1lbnRJbXBsICZidXR0b24gPSBzdGF0aWNfY2FzdDxIVE1MQnV0dG9uRWxlbWVudElt
cGwgJj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgQnV0dG9uRm9y
bTogICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLGJ1dHRvbi5mb3JtKCkpOyAvLyB0
eXBlIEhUTUxGb3JtRWxlbWVudAotICAgIGNhc2UgQnV0dG9uQWNjZXNzS2V5OiAgICAgICByZXR1
cm4gU3RyaW5nKGJ1dHRvbi5hY2Nlc3NLZXkoKSk7Ci0gICAgY2FzZSBCdXR0b25EaXNhYmxlZDog
ICAgICAgIHJldHVybiBCb29sZWFuKGJ1dHRvbi5kaXNhYmxlZCgpKTsKLSAgICBjYXNlIEJ1dHRv
bk5hbWU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhidXR0b24ubmFtZSgpKTsKLSAgICBjYXNl
IEJ1dHRvblRhYkluZGV4OiAgICAgICAgcmV0dXJuIE51bWJlcihidXR0b24udGFiSW5kZXgoKSk7
Ci0gICAgY2FzZSBCdXR0b25UeXBlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYnV0dG9uLnR5
cGUoKSk7Ci0gICAgY2FzZSBCdXR0b25WYWx1ZTogICAgICAgICAgIHJldHVybiBTdHJpbmcoYnV0
dG9uLnZhbHVlKCkpOwotICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9MQUJFTDogewot
ICAgIEhUTUxMYWJlbEVsZW1lbnRJbXBsICZsYWJlbCA9IHN0YXRpY19jYXN0PEhUTUxMYWJlbEVs
ZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIExh
YmVsRm9ybTogICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLGxhYmVsLmZvcm0oKSk7
IC8vIHR5cGUgSFRNTEZvcm1FbGVtZW50Ci0gICAgY2FzZSBMYWJlbEFjY2Vzc0tleTogICAgICAg
cmV0dXJuIFN0cmluZyhsYWJlbC5hY2Nlc3NLZXkoKSk7Ci0gICAgY2FzZSBMYWJlbEh0bWxGb3I6
ICAgICAgICAgcmV0dXJuIFN0cmluZyhsYWJlbC5odG1sRm9yKCkpOwotICAgIH0KLSAgfQotICBi
cmVhazsKLSAgY2FzZSBJRF9GSUVMRFNFVDogewotICAgIEhUTUxGaWVsZFNldEVsZW1lbnRJbXBs
ICZmaWVsZFNldCA9IHN0YXRpY19jYXN0PEhUTUxGaWVsZFNldEVsZW1lbnRJbXBsICY+KGVsZW1l
bnQpOworVmFsdWUgSFRNTEVsZW1lbnQ6OmhlYWRHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQg
dG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTEhlYWRFbGVtZW50SW1wbCAmaGVhZCA9ICpzdGF0aWNf
Y2FzdDxIVE1MSGVhZEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBpZiAodG9rZW4gPT0gSGVh
ZFByb2ZpbGUpCisgICAgICAgIHJldHVybiBTdHJpbmcoaGVhZC5wcm9maWxlKCkpOworICAgIHJl
dHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OmxpbmtHZXR0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTExpbmtFbGVtZW50SW1w
bCAmbGluayA9ICpzdGF0aWNfY2FzdDxIVE1MTGlua0VsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAg
ICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBGaWVsZFNldEZvcm06ICAgICAgICAgICAgcmV0
dXJuIGdldERPTU5vZGUoZXhlYyxmaWVsZFNldC5mb3JtKCkpOyAvLyB0eXBlIEhUTUxGb3JtRWxl
bWVudAotICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9MRUdFTkQ6IHsKLSAgICBIVE1M
TGVnZW5kRWxlbWVudEltcGwgJmxlZ2VuZCA9IHN0YXRpY19jYXN0PEhUTUxMZWdlbmRFbGVtZW50
SW1wbCAmPihlbGVtZW50KTsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBMZWdlbmRG
b3JtOiAgICAgICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsbGVnZW5kLmZvcm0oKSk7IC8v
IHR5cGUgSFRNTEZvcm1FbGVtZW50Ci0gICAgY2FzZSBMZWdlbmRBY2Nlc3NLZXk6ICAgICAgIHJl
dHVybiBTdHJpbmcobGVnZW5kLmFjY2Vzc0tleSgpKTsKLSAgICBjYXNlIExlZ2VuZEFsaWduOiAg
ICAgICAgICAgcmV0dXJuIFN0cmluZyhsZWdlbmQuYWxpZ24oKSk7CisgICAgICAgIGNhc2UgTGlu
a0Rpc2FibGVkOgorICAgICAgICAgICAgcmV0dXJuIEJvb2xlYW4obGluay5kaXNhYmxlZCgpKTsK
KyAgICAgICAgY2FzZSBMaW5rQ2hhcnNldDoKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcobGlu
ay5jaGFyc2V0KCkpOworICAgICAgICBjYXNlIExpbmtIcmVmOgorICAgICAgICAgICAgcmV0dXJu
IFN0cmluZyhsaW5rLmhyZWYoKSk7CisgICAgICAgIGNhc2UgTGlua0hyZWZMYW5nOgorICAgICAg
ICAgICAgcmV0dXJuIFN0cmluZyhsaW5rLmhyZWZsYW5nKCkpOworICAgICAgICBjYXNlIExpbmtN
ZWRpYTogICAgICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhsaW5rLm1lZGlhKCkp
OworICAgICAgICBjYXNlIExpbmtSZWw6ICAgICAgICAgICAgIAorICAgICAgICAgICAgcmV0dXJu
IFN0cmluZyhsaW5rLnJlbCgpKTsKKyAgICAgICAgY2FzZSBMaW5rUmV2OiAgICAgICAgICAgIAor
ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhsaW5rLnJldigpKTsKKyAgICAgICAgY2FzZSBMaW5r
VGFyZ2V0OiAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcobGluay50YXJnZXQo
KSk7CisgICAgICAgIGNhc2UgTGlua1R5cGU6ICAgICAgICAgICAgCisgICAgICAgICAgICByZXR1
cm4gU3RyaW5nKGxpbmsudHlwZSgpKTsKKyAgICAgICAgY2FzZSBMaW5rU2hlZXQ6ICAgICAgICAg
ICAKKyAgICAgICAgICAgIHJldHVybiBnZXRET01TdHlsZVNoZWV0KGV4ZWMsIGxpbmsuc2hlZXQo
KSk7CiAgICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX1VMOiB7Ci0gICAgSFRNTFVMaXN0
RWxlbWVudEltcGwgJnVMaXN0ID0gc3RhdGljX2Nhc3Q8SFRNTFVMaXN0RWxlbWVudEltcGwgJj4o
ZWxlbWVudCk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVu
dDo6dGl0bGVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAg
SFRNTFRpdGxlRWxlbWVudEltcGwmIHRpdGxlID0gKnN0YXRpY19jYXN0PEhUTUxUaXRsZUVsZW1l
bnRJbXBsKj4oaW1wbCgpKTsKKyAgICBpZiAodG9rZW4gPT0gVGl0bGVUZXh0KQorICAgICAgICBy
ZXR1cm4gU3RyaW5nKHRpdGxlLnRleHQoKSk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQor
CitWYWx1ZSBIVE1MRWxlbWVudDo6bWV0YUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tl
bikgY29uc3QKK3sKKyAgICBIVE1MTWV0YUVsZW1lbnRJbXBsJiBtZXRhID0gKnN0YXRpY19jYXN0
PEhUTUxNZXRhRWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAodG9rZW4pIHsKLSAg
ICBjYXNlIFVMaXN0Q29tcGFjdDogICAgICAgICByZXR1cm4gQm9vbGVhbih1TGlzdC5jb21wYWN0
KCkpOwotICAgIGNhc2UgVUxpc3RUeXBlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcodUxpc3Qu
dHlwZSgpKTsKLSAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfT0w6IHsKLSAgICBIVE1M
T0xpc3RFbGVtZW50SW1wbCAmb0xpc3QgPSBzdGF0aWNfY2FzdDxIVE1MT0xpc3RFbGVtZW50SW1w
bCAmPihlbGVtZW50KTsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBPTGlzdENvbXBh
Y3Q6ICAgICAgICAgcmV0dXJuIEJvb2xlYW4ob0xpc3QuY29tcGFjdCgpKTsKLSAgICBjYXNlIE9M
aXN0U3RhcnQ6ICAgICAgICAgICByZXR1cm4gTnVtYmVyKG9MaXN0LnN0YXJ0KCkpOwotICAgIGNh
c2UgT0xpc3RUeXBlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcob0xpc3QudHlwZSgpKTsKKyAg
ICAgICAgY2FzZSBNZXRhQ29udGVudDogICAgICAgICByZXR1cm4gU3RyaW5nKG1ldGEuY29udGVu
dCgpKTsKKyAgICAgICAgY2FzZSBNZXRhSHR0cEVxdWl2OiAgICAgICByZXR1cm4gU3RyaW5nKG1l
dGEuaHR0cEVxdWl2KCkpOworICAgICAgICBjYXNlIE1ldGFOYW1lOiAgICAgICAgICAgIHJldHVy
biBTdHJpbmcobWV0YS5uYW1lKCkpOworICAgICAgICBjYXNlIE1ldGFTY2hlbWU6ICAgICAgICAg
IHJldHVybiBTdHJpbmcobWV0YS5zY2hlbWUoKSk7CiAgICAgfQotICB9Ci0gIGJyZWFrOwotICBj
YXNlIElEX0RMOiB7Ci0gICAgSFRNTERMaXN0RWxlbWVudEltcGwgJmRMaXN0ID0gc3RhdGljX2Nh
c3Q8SFRNTERMaXN0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgcmV0dXJuIFVuZGVmaW5l
ZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6YmFzZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMs
IGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MQmFzZUVsZW1lbnRJbXBsJiBiYXNlID0gKnN0
YXRpY19jYXN0PEhUTUxCYXNlRWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAodG9r
ZW4pIHsKLSAgICBjYXNlIERMaXN0Q29tcGFjdDogICAgICAgICByZXR1cm4gQm9vbGVhbihkTGlz
dC5jb21wYWN0KCkpOworICAgICAgICBjYXNlIEJhc2VIcmVmOiAgICAgICAgICAgIHJldHVybiBT
dHJpbmcoYmFzZS5ocmVmKCkpOworICAgICAgICBjYXNlIEJhc2VUYXJnZXQ6ICAgICAgICAgIHJl
dHVybiBTdHJpbmcoYmFzZS50YXJnZXQoKSk7CiAgICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNl
IElEX0RJUjogewotICAgIEhUTUxEaXJlY3RvcnlFbGVtZW50SW1wbCAmZGlyZWN0b3J5ID0gc3Rh
dGljX2Nhc3Q8SFRNTERpcmVjdG9yeUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgIHJldHVy
biBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OmlzSW5kZXhHZXR0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTElzSW5kZXhFbGVtZW50
SW1wbCYgaXNpbmRleCA9ICpzdGF0aWNfY2FzdDxIVE1MSXNJbmRleEVsZW1lbnRJbXBsKj4oaW1w
bCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBEaXJlY3RvcnlDb21wYWN0OiAg
ICAgICAgIHJldHVybiBCb29sZWFuKGRpcmVjdG9yeS5jb21wYWN0KCkpOworICAgICAgICBjYXNl
IElzSW5kZXhGb3JtOiAgICAgICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsIGlzaW5kZXgu
Zm9ybSgpKTsgLy8gdHlwZSBIVE1MRm9ybUVsZW1lbnQKKyAgICAgICAgY2FzZSBJc0luZGV4UHJv
bXB0OiAgICAgICAgICByZXR1cm4gU3RyaW5nKGlzaW5kZXgucHJvbXB0KCkpOwogICAgIH0KLSAg
fQotICBicmVhazsKLSAgY2FzZSBJRF9NRU5VOiB7Ci0gICAgSFRNTE1lbnVFbGVtZW50SW1wbCAm
bWVudSA9IHN0YXRpY19jYXN0PEhUTUxNZW51RWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAg
cmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6c3R5bGVHZXR0ZXIo
RXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTFN0eWxlRWxlbWVu
dEltcGwmIHN0eWxlID0gKnN0YXRpY19jYXN0PEhUTUxTdHlsZUVsZW1lbnRJbXBsKj4oaW1wbCgp
KTsKICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBNZW51Q29tcGFjdDogICAgICAgICBy
ZXR1cm4gQm9vbGVhbihtZW51LmNvbXBhY3QoKSk7CisgICAgICAgIGNhc2UgU3R5bGVEaXNhYmxl
ZDogICAgICAgIHJldHVybiBCb29sZWFuKHN0eWxlLmRpc2FibGVkKCkpOworICAgICAgICBjYXNl
IFN0eWxlTWVkaWE6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHN0eWxlLm1lZGlhKCkpOworICAg
ICAgICBjYXNlIFN0eWxlVHlwZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKHN0eWxlLnR5cGUo
KSk7CisgICAgICAgIGNhc2UgU3R5bGVTaGVldDogICAgICAgICAgIHJldHVybiBnZXRET01TdHls
ZVNoZWV0KGV4ZWMsIHN0eWxlLnNoZWV0KCkpOwogICAgIH0KLSAgfQotICBicmVhazsKLSAgY2Fz
ZSBJRF9MSTogewotICAgIEhUTUxMSUVsZW1lbnRJbXBsICZsaSA9IHN0YXRpY19jYXN0PEhUTUxM
SUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKwor
VmFsdWUgSFRNTEVsZW1lbnQ6OmJvZHlHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4p
IGNvbnN0Cit7CisgICAgSFRNTEJvZHlFbGVtZW50SW1wbCYgYm9keSA9ICpzdGF0aWNfY2FzdDxI
VE1MQm9keUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAg
Y2FzZSBMSVR5cGU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhsaS50eXBlKCkpOwotICAgIGNh
c2UgTElWYWx1ZTogICAgICAgICAgIHJldHVybiBOdW1iZXIobGkudmFsdWUoKSk7CisgICAgICAg
IGNhc2UgQm9keUFMaW5rOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhib2R5LmFMaW5rKCkpOwor
ICAgICAgICBjYXNlIEJvZHlCYWNrZ3JvdW5kOiAgICAgIHJldHVybiBTdHJpbmcoYm9keS5iYWNr
Z3JvdW5kKCkpOworICAgICAgICBjYXNlIEJvZHlCZ0NvbG9yOiAgICAgICAgIHJldHVybiBTdHJp
bmcoYm9keS5iZ0NvbG9yKCkpOworICAgICAgICBjYXNlIEJvZHlMaW5rOiAgICAgICAgICAgIHJl
dHVybiBTdHJpbmcoYm9keS5saW5rKCkpOworICAgICAgICBjYXNlIEJvZHlUZXh0OiAgICAgICAg
ICAgIHJldHVybiBTdHJpbmcoYm9keS50ZXh0KCkpOworICAgICAgICBjYXNlIEJvZHlWTGluazog
ICAgICAgICAgIHJldHVybiBTdHJpbmcoYm9keS52TGluaygpKTsKKyAgICAgICAgZGVmYXVsdDog
eworICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBkb2N1bWVudCdzIGxheW91dCBiZWZvcmUgd2Ug
Y29tcHV0ZSB0aGVzZSBhdHRyaWJ1dGVzLgorICAgICAgICAgICAgRG9jdW1lbnRJbXBsICpkb2Mg
PSBib2R5LmdldERvY3VtZW50KCk7CisgICAgICAgICAgICBpZiAoZG9jKQorICAgICAgICAgICAg
ICAgIGRvYy0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CisgICAgICAg
ICAgICBLSFRNTFZpZXcgKnZpZXcgPSBkb2MgPyBkb2MtPnZpZXcoKSA6IDA7CisgICAgICAgICAg
ICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgICAgICAgICAgY2FzZSBCb2R5U2Nyb2xsTGVmdDoK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE51bWJlcih2aWV3ID8gdmlldy0+Y29udGVudHNY
KCkgOiAwKTsKKyAgICAgICAgICAgICAgICBjYXNlIEJvZHlTY3JvbGxUb3A6CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBOdW1iZXIodmlldyA/IHZpZXctPmNvbnRlbnRzWSgpIDogMCk7Cisg
ICAgICAgICAgICAgICAgY2FzZSBCb2R5U2Nyb2xsSGVpZ2h0OgorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gTnVtYmVyKHZpZXcgPyB2aWV3LT5jb250ZW50c0hlaWdodCgpIDogMCk7CisgICAg
ICAgICAgICAgICAgY2FzZSBCb2R5U2Nyb2xsV2lkdGg6CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBOdW1iZXIodmlldyA/IHZpZXctPmNvbnRlbnRzV2lkdGgoKSA6IDApOworICAgICAgICAg
ICAgfQorICAgICAgICB9CiAgICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX0RJVjogewot
ICAgIEhUTUxEaXZFbGVtZW50SW1wbCAmZGl2ID0gc3RhdGljX2Nhc3Q8SFRNTERpdkVsZW1lbnRJ
bXBsICY+KGVsZW1lbnQpOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRN
TEVsZW1lbnQ6OmZvcm1HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7
CisgICAgSFRNTEZvcm1FbGVtZW50SW1wbCYgZm9ybSA9ICpzdGF0aWNfY2FzdDxIVE1MRm9ybUVs
ZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBEaXZB
bGlnbjogICAgICAgICAgIHJldHVybiBTdHJpbmcoZGl2LmFsaWduKCkpOworICAgICAgICBjYXNl
IEZvcm1FbGVtZW50czogICAgICAgIHJldHVybiBnZXRIVE1MQ29sbGVjdGlvbihleGVjLCBmb3Jt
LmVsZW1lbnRzKCkuZ2V0KCkpOworICAgICAgICBjYXNlIEZvcm1MZW5ndGg6ICAgICAgICAgIHJl
dHVybiBOdW1iZXIoZm9ybS5sZW5ndGgoKSk7CisgICAgICAgIGNhc2UgRm9ybU5hbWU6ICAgICAg
ICAgICAgcmV0dXJuIFN0cmluZyhmb3JtLm5hbWUoKSk7CisgICAgICAgIGNhc2UgRm9ybUFjY2Vw
dENoYXJzZXQ6ICAgcmV0dXJuIFN0cmluZyhmb3JtLmFjY2VwdENoYXJzZXQoKSk7CisgICAgICAg
IGNhc2UgRm9ybUFjdGlvbjogICAgICAgICAgcmV0dXJuIFN0cmluZyhmb3JtLmFjdGlvbigpKTsK
KyAgICAgICAgY2FzZSBGb3JtRW5jVHlwZTogICAgICAgICByZXR1cm4gU3RyaW5nKGZvcm0uZW5j
dHlwZSgpKTsKKyAgICAgICAgY2FzZSBGb3JtTWV0aG9kOiAgICAgICAgICByZXR1cm4gU3RyaW5n
KGZvcm0ubWV0aG9kKCkpOworICAgICAgICBjYXNlIEZvcm1UYXJnZXQ6ICAgICAgICAgIHJldHVy
biBTdHJpbmcoZm9ybS50YXJnZXQoKSk7CiAgICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElE
X1A6IHsKLSAgICBIVE1MUGFyYWdyYXBoRWxlbWVudEltcGwgJnBhcmFncmFwaCA9IHN0YXRpY19j
YXN0PEhUTUxQYXJhZ3JhcGhFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICByZXR1cm4gVW5k
ZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50OjpzZWxlY3RHZXR0ZXIoRXhlY1N0YXRl
KiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTFNlbGVjdEVsZW1lbnRJbXBsJiBz
ZWxlY3QgPSAqc3RhdGljX2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAg
ICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBQYXJhZ3JhcGhBbGlnbjogICAgICAgICAgIHJl
dHVybiBTdHJpbmcocGFyYWdyYXBoLmFsaWduKCkpOworICAgICAgICBjYXNlIFNlbGVjdFR5cGU6
ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhzZWxlY3QudHlwZSgpKTsKKyAgICAgICAgY2FzZSBT
ZWxlY3RTZWxlY3RlZEluZGV4OiAgIHJldHVybiBOdW1iZXIoc2VsZWN0LnNlbGVjdGVkSW5kZXgo
KSk7CisgICAgICAgIGNhc2UgU2VsZWN0VmFsdWU6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHNl
bGVjdC52YWx1ZSgpKTsKKyAgICAgICAgY2FzZSBTZWxlY3RMZW5ndGg6ICAgICAgICAgIHJldHVy
biBOdW1iZXIoc2VsZWN0Lmxlbmd0aCgpKTsKKyAgICAgICAgY2FzZSBTZWxlY3RGb3JtOiAgICAg
ICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsIHNlbGVjdC5mb3JtKCkpOyAvLyB0eXBlIEhU
TUxGb3JtRWxlbWVudAorICAgICAgICBjYXNlIFNlbGVjdE9wdGlvbnM6ICAgICAgICAgcmV0dXJu
IGdldFNlbGVjdEhUTUxDb2xsZWN0aW9uKGV4ZWMsIHNlbGVjdC5vcHRpb25zSFRNTENvbGxlY3Rp
b24oKS5nZXQoKSwgJnNlbGVjdCk7IC8vIHR5cGUgSFRNTENvbGxlY3Rpb24KKyAgICAgICAgY2Fz
ZSBTZWxlY3REaXNhYmxlZDogICAgICAgIHJldHVybiBCb29sZWFuKHNlbGVjdC5kaXNhYmxlZCgp
KTsKKyAgICAgICAgY2FzZSBTZWxlY3RNdWx0aXBsZTogICAgICAgIHJldHVybiBCb29sZWFuKHNl
bGVjdC5tdWx0aXBsZSgpKTsKKyAgICAgICAgY2FzZSBTZWxlY3ROYW1lOiAgICAgICAgICAgIHJl
dHVybiBTdHJpbmcoc2VsZWN0Lm5hbWUoKSk7CisgICAgICAgIGNhc2UgU2VsZWN0U2l6ZTogICAg
ICAgICAgICByZXR1cm4gTnVtYmVyKHNlbGVjdC5zaXplKCkpOworICAgICAgICBjYXNlIFNlbGVj
dFRhYkluZGV4OiAgICAgICAgcmV0dXJuIE51bWJlcihzZWxlY3QudGFiSW5kZXgoKSk7CiAgICAg
fQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX0gxOgotICBjYXNlIElEX0gyOgotICBjYXNlIElE
X0gzOgotICBjYXNlIElEX0g0OgotICBjYXNlIElEX0g1OgotICBjYXNlIElEX0g2OiB7Ci0gICAg
SFRNTEhlYWRpbmdFbGVtZW50SW1wbCAmaGVhZGluZyA9IHN0YXRpY19jYXN0PEhUTUxIZWFkaW5n
RWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitW
YWx1ZSBIVE1MRWxlbWVudDo6b3B0R3JvdXBHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0Cit7CisgICAgSFRNTE9wdEdyb3VwRWxlbWVudEltcGwmIG9wdGdyb3VwID0gKnN0
YXRpY19jYXN0PEhUTUxPcHRHcm91cEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2gg
KHRva2VuKSB7Ci0gICAgY2FzZSBIZWFkaW5nQWxpZ246ICAgICAgICAgICByZXR1cm4gU3RyaW5n
KGhlYWRpbmcuYWxpZ24oKSk7CisgICAgICAgIGNhc2UgT3B0R3JvdXBEaXNhYmxlZDogICAgICAg
IHJldHVybiBCb29sZWFuKG9wdGdyb3VwLmRpc2FibGVkKCkpOworICAgICAgICBjYXNlIE9wdEdy
b3VwTGFiZWw6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKG9wdGdyb3VwLmxhYmVsKCkpOwogICAg
IH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9CTE9DS1FVT1RFOiB7Ci0gICAgSFRNTEJsb2Nr
cXVvdGVFbGVtZW50SW1wbCAmYmxvY2txdW90ZSA9IHN0YXRpY19jYXN0PEhUTUxCbG9ja3F1b3Rl
RWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitW
YWx1ZSBIVE1MRWxlbWVudDo6b3B0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2Vu
KSBjb25zdAoreworICAgIEhUTUxPcHRpb25FbGVtZW50SW1wbCYgb3B0aW9uID0gKnN0YXRpY19j
YXN0PEhUTUxPcHRpb25FbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tlbikg
ewotICAgIGNhc2UgQmxvY2tRdW90ZUNpdGU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhibG9j
a3F1b3RlLmNpdGUoKSk7CisgICAgICAgIGNhc2UgT3B0aW9uRm9ybTogICAgICAgICAgICByZXR1
cm4gZ2V0RE9NTm9kZShleGVjLG9wdGlvbi5mb3JtKCkpOyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVu
dAorICAgICAgICBjYXNlIE9wdGlvbkRlZmF1bHRTZWxlY3RlZDogcmV0dXJuIEJvb2xlYW4ob3B0
aW9uLmRlZmF1bHRTZWxlY3RlZCgpKTsKKyAgICAgICAgY2FzZSBPcHRpb25UZXh0OiAgICAgICAg
ICAgIHJldHVybiBTdHJpbmcob3B0aW9uLnRleHQoKSk7CisgICAgICAgIGNhc2UgT3B0aW9uSW5k
ZXg6ICAgICAgICAgICByZXR1cm4gTnVtYmVyKG9wdGlvbi5pbmRleCgpKTsKKyAgICAgICAgY2Fz
ZSBPcHRpb25EaXNhYmxlZDogICAgICAgIHJldHVybiBCb29sZWFuKG9wdGlvbi5kaXNhYmxlZCgp
KTsKKyAgICAgICAgY2FzZSBPcHRpb25MYWJlbDogICAgICAgICAgIHJldHVybiBTdHJpbmcob3B0
aW9uLmxhYmVsKCkpOworICAgICAgICBjYXNlIE9wdGlvblNlbGVjdGVkOiAgICAgICAgcmV0dXJu
IEJvb2xlYW4ob3B0aW9uLnNlbGVjdGVkKCkpOworICAgICAgICBjYXNlIE9wdGlvblZhbHVlOiAg
ICAgICAgICAgcmV0dXJuIFN0cmluZyhvcHRpb24udmFsdWUoKSk7CiAgICAgfQotICB9Ci0gIGNh
c2UgSURfUTogewotICAgIEhUTUxRdW90ZUVsZW1lbnRJbXBsICZxdW90ZSA9IHN0YXRpY19jYXN0
PEhUTUxRdW90ZUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgIHJldHVybiBVbmRlZmluZWQo
KTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OmlucHV0R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywg
aW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxJbnB1dEVsZW1lbnRJbXBsJiBpbnB1dCA9ICpz
dGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0
b2tlbikgewotICAgIGNhc2UgUXVvdGVDaXRlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcocXVv
dGUuY2l0ZSgpKTsKKyAgICAgICAgY2FzZSBJbnB1dERlZmF1bHRWYWx1ZTogICAgcmV0dXJuIFN0
cmluZyhpbnB1dC5kZWZhdWx0VmFsdWUoKSk7CisgICAgICAgIGNhc2UgSW5wdXREZWZhdWx0Q2hl
Y2tlZDogIHJldHVybiBCb29sZWFuKGlucHV0LmRlZmF1bHRDaGVja2VkKCkpOworICAgICAgICBj
YXNlIElucHV0Rm9ybTogICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLGlucHV0LmZv
cm0oKSk7IC8vIHR5cGUgSFRNTEZvcm1FbGVtZW50CisgICAgICAgIGNhc2UgSW5wdXRBY2NlcHQ6
ICAgICAgICAgIHJldHVybiBTdHJpbmcoaW5wdXQuYWNjZXB0KCkpOworICAgICAgICBjYXNlIElu
cHV0QWNjZXNzS2V5OiAgICAgICByZXR1cm4gU3RyaW5nKGlucHV0LmFjY2Vzc0tleSgpKTsKKyAg
ICAgICAgY2FzZSBJbnB1dEFsaWduOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpbnB1dC5hbGln
bigpKTsKKyAgICAgICAgY2FzZSBJbnB1dEFsdDogICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhp
bnB1dC5hbHQoKSk7CisgICAgICAgIGNhc2UgSW5wdXRDaGVja2VkOiAgICAgICAgIHJldHVybiBC
b29sZWFuKGlucHV0LmNoZWNrZWQoKSk7CisgICAgICAgIGNhc2UgSW5wdXREaXNhYmxlZDogICAg
ICAgIHJldHVybiBCb29sZWFuKGlucHV0LmRpc2FibGVkKCkpOworICAgICAgICBjYXNlIElucHV0
TWF4TGVuZ3RoOiAgICAgICByZXR1cm4gTnVtYmVyKGlucHV0Lm1heExlbmd0aCgpKTsKKyAgICAg
ICAgY2FzZSBJbnB1dE5hbWU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpbnB1dC5uYW1lKCkp
OworICAgICAgICBjYXNlIElucHV0UmVhZE9ubHk6ICAgICAgICByZXR1cm4gQm9vbGVhbihpbnB1
dC5yZWFkT25seSgpKTsKKyAgICAgICAgY2FzZSBJbnB1dFNpemU6ICAgICAgICAgICAgcmV0dXJu
IFN0cmluZyhpbnB1dC5zaXplRE9NKCkpOworICAgICAgICBjYXNlIElucHV0U3JjOiAgICAgICAg
ICAgICByZXR1cm4gU3RyaW5nKGlucHV0LnNyYygpKTsKKyAgICAgICAgY2FzZSBJbnB1dFRhYklu
ZGV4OiAgICAgICAgcmV0dXJuIE51bWJlcihpbnB1dC50YWJJbmRleCgpKTsKKyAgICAgICAgY2Fz
ZSBJbnB1dFR5cGU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpbnB1dC50eXBlKCkpOworICAg
ICAgICBjYXNlIElucHV0VXNlTWFwOiAgICAgICAgICByZXR1cm4gU3RyaW5nKGlucHV0LnVzZU1h
cCgpKTsKKyAgICAgICAgY2FzZSBJbnB1dFZhbHVlOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhp
bnB1dC52YWx1ZSgpKTsKICAgICB9Ci0gIH0KLSAgY2FzZSBJRF9QUkU6IHsKLSAgICBIVE1MUHJl
RWxlbWVudEltcGwgJnByZSA9IHN0YXRpY19jYXN0PEhUTUxQcmVFbGVtZW50SW1wbCAmPihlbGVt
ZW50KTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50Ojp0
ZXh0QXJlYUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBI
VE1MVGV4dEFyZWFFbGVtZW50SW1wbCYgdGV4dGFyZWEgPSAqc3RhdGljX2Nhc3Q8SFRNTFRleHRB
cmVhRWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNl
IFByZVdpZHRoOiAgICAgICAgICAgcmV0dXJuIE51bWJlcihwcmUud2lkdGgoKSk7CisgICAgICAg
IGNhc2UgVGV4dEFyZWFEZWZhdWx0VmFsdWU6ICAgIHJldHVybiBTdHJpbmcodGV4dGFyZWEuZGVm
YXVsdFZhbHVlKCkpOworICAgICAgICBjYXNlIFRleHRBcmVhRm9ybTogICAgICAgICAgICByZXR1
cm4gZ2V0RE9NTm9kZShleGVjLHRleHRhcmVhLmZvcm0oKSk7IC8vIHR5cGUgSFRNTEZvcm1FbGVt
ZW50CisgICAgICAgIGNhc2UgVGV4dEFyZWFBY2Nlc3NLZXk6ICAgICAgIHJldHVybiBTdHJpbmco
dGV4dGFyZWEuYWNjZXNzS2V5KCkpOworICAgICAgICBjYXNlIFRleHRBcmVhQ29sczogICAgICAg
ICAgICByZXR1cm4gTnVtYmVyKHRleHRhcmVhLmNvbHMoKSk7CisgICAgICAgIGNhc2UgVGV4dEFy
ZWFEaXNhYmxlZDogICAgICAgIHJldHVybiBCb29sZWFuKHRleHRhcmVhLmRpc2FibGVkKCkpOwor
ICAgICAgICBjYXNlIFRleHRBcmVhTmFtZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRleHRh
cmVhLm5hbWUoKSk7CisgICAgICAgIGNhc2UgVGV4dEFyZWFSZWFkT25seTogICAgICAgIHJldHVy
biBCb29sZWFuKHRleHRhcmVhLnJlYWRPbmx5KCkpOworICAgICAgICBjYXNlIFRleHRBcmVhUm93
czogICAgICAgICAgICByZXR1cm4gTnVtYmVyKHRleHRhcmVhLnJvd3MoKSk7CisgICAgICAgIGNh
c2UgVGV4dEFyZWFUYWJJbmRleDogICAgICAgIHJldHVybiBOdW1iZXIodGV4dGFyZWEudGFiSW5k
ZXgoKSk7CisgICAgICAgIGNhc2UgVGV4dEFyZWFUeXBlOiAgICAgICAgICAgIHJldHVybiBTdHJp
bmcodGV4dGFyZWEudHlwZSgpKTsKKyAgICAgICAgY2FzZSBUZXh0QXJlYVZhbHVlOiAgICAgICAg
ICAgcmV0dXJuIFN0cmluZyh0ZXh0YXJlYS52YWx1ZSgpKTsKICAgICB9Ci0gIH0KLSAgYnJlYWs7
Ci0gIGNhc2UgSURfQlI6IHsKLSAgICBIVE1MQlJFbGVtZW50SW1wbCAmYnIgPSBzdGF0aWNfY2Fz
dDxIVE1MQlJFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7
Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50OjpidXR0b25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBp
bnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTEJ1dHRvbkVsZW1lbnRJbXBsJiBidXR0b24gPSAq
c3RhdGljX2Nhc3Q8SFRNTEJ1dHRvbkVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2gg
KHRva2VuKSB7Ci0gICAgY2FzZSBCUkNsZWFyOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhici5j
bGVhcigpKTsKLSAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfQkFTRUZPTlQ6IHsKLSAg
ICBIVE1MQmFzZUZvbnRFbGVtZW50SW1wbCAmYmFzZUZvbnQgPSBzdGF0aWNfY2FzdDxIVE1MQmFz
ZUZvbnRFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAg
Y2FzZSBCYXNlRm9udENvbG9yOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhiYXNlRm9udC5jb2xv
cigpKTsKLSAgICBjYXNlIEJhc2VGb250RmFjZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGJh
c2VGb250LmZhY2UoKSk7Ci0gICAgY2FzZSBCYXNlRm9udFNpemU6ICAgICAgICAgICAgcmV0dXJu
IFN0cmluZyhiYXNlRm9udC5zaXplKCkpOwotICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJ
RF9GT05UOiB7Ci0gICAgSFRNTEZvbnRFbGVtZW50SW1wbCAmZm9udCA9IHN0YXRpY19jYXN0PEhU
TUxGb250RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAg
IGNhc2UgRm9udENvbG9yOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhmb250LmNvbG9yKCkpOwot
ICAgIGNhc2UgRm9udEZhY2U6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhmb250LmZhY2UoKSk7
Ci0gICAgY2FzZSBGb250U2l6ZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGZvbnQuc2l6ZSgp
KTsKLSAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfSFI6IHsKLSAgICBIVE1MSFJFbGVt
ZW50SW1wbCAmaHIgPSBzdGF0aWNfY2FzdDxIVE1MSFJFbGVtZW50SW1wbCAmPihlbGVtZW50KTsK
LSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBIUkFsaWduOiAgICAgICAgICAgcmV0dXJu
IFN0cmluZyhoci5hbGlnbigpKTsKLSAgICBjYXNlIEhSTm9TaGFkZTogICAgICAgICByZXR1cm4g
Qm9vbGVhbihoci5ub1NoYWRlKCkpOwotICAgIGNhc2UgSFJTaXplOiAgICAgICAgICAgIHJldHVy
biBTdHJpbmcoaHIuc2l6ZSgpKTsKLSAgICBjYXNlIEhSV2lkdGg6ICAgICAgICAgICByZXR1cm4g
U3RyaW5nKGhyLndpZHRoKCkpOworICAgICAgICBjYXNlIEJ1dHRvbkZvcm06ICAgICAgICAgICAg
cmV0dXJuIGdldERPTU5vZGUoZXhlYyxidXR0b24uZm9ybSgpKTsgLy8gdHlwZSBIVE1MRm9ybUVs
ZW1lbnQKKyAgICAgICAgY2FzZSBCdXR0b25BY2Nlc3NLZXk6ICAgICAgIHJldHVybiBTdHJpbmco
YnV0dG9uLmFjY2Vzc0tleSgpKTsKKyAgICAgICAgY2FzZSBCdXR0b25EaXNhYmxlZDogICAgICAg
IHJldHVybiBCb29sZWFuKGJ1dHRvbi5kaXNhYmxlZCgpKTsKKyAgICAgICAgY2FzZSBCdXR0b25O
YW1lOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYnV0dG9uLm5hbWUoKSk7CisgICAgICAgIGNh
c2UgQnV0dG9uVGFiSW5kZXg6ICAgICAgICByZXR1cm4gTnVtYmVyKGJ1dHRvbi50YWJJbmRleCgp
KTsKKyAgICAgICAgY2FzZSBCdXR0b25UeXBlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYnV0
dG9uLnR5cGUoKSk7CisgICAgICAgIGNhc2UgQnV0dG9uVmFsdWU6ICAgICAgICAgICByZXR1cm4g
U3RyaW5nKGJ1dHRvbi52YWx1ZSgpKTsKICAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURf
SU5TOgotICBjYXNlIElEX0RFTDogewotICAgIEhUTUxNb2RFbGVtZW50SW1wbCAmbW9kID0gc3Rh
dGljX2Nhc3Q8SFRNTE1vZEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgIHJldHVybiBVbmRl
ZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OmxhYmVsR2V0dGVyKEV4ZWNTdGF0ZSog
ZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxMYWJlbEVsZW1lbnRJbXBsJiBsYWJl
bCA9ICpzdGF0aWNfY2FzdDxIVE1MTGFiZWxFbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dp
dGNoICh0b2tlbikgewotICAgIGNhc2UgTW9kQ2l0ZTogICAgICAgICAgICByZXR1cm4gU3RyaW5n
KG1vZC5jaXRlKCkpOwotICAgIGNhc2UgTW9kRGF0ZVRpbWU6ICAgICAgICByZXR1cm4gU3RyaW5n
KG1vZC5kYXRlVGltZSgpKTsKKyAgICAgICAgY2FzZSBMYWJlbEZvcm06ICAgICAgICAgICAgcmV0
dXJuIGdldERPTU5vZGUoZXhlYyxsYWJlbC5mb3JtKCkpOyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVu
dAorICAgICAgICBjYXNlIExhYmVsQWNjZXNzS2V5OiAgICAgICByZXR1cm4gU3RyaW5nKGxhYmVs
LmFjY2Vzc0tleSgpKTsKKyAgICAgICAgY2FzZSBMYWJlbEh0bWxGb3I6ICAgICAgICAgcmV0dXJu
IFN0cmluZyhsYWJlbC5odG1sRm9yKCkpOwogICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJ
RF9BOiB7Ci0gICAgSFRNTEFuY2hvckVsZW1lbnRJbXBsICZhbmNob3IgPSBzdGF0aWNfY2FzdDxI
VE1MQW5jaG9yRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewot
ICAgIGNhc2UgQW5jaG9yQWNjZXNzS2V5OiAgICAgICByZXR1cm4gU3RyaW5nKGFuY2hvci5hY2Nl
c3NLZXkoKSk7Ci0gICAgY2FzZSBBbmNob3JDaGFyc2V0OiAgICAgICAgIHJldHVybiBTdHJpbmco
YW5jaG9yLmNoYXJzZXQoKSk7Ci0gICAgY2FzZSBBbmNob3JDb29yZHM6ICAgICAgICAgIHJldHVy
biBTdHJpbmcoYW5jaG9yLmNvb3JkcygpKTsKLSAgICBjYXNlIEFuY2hvckhyZWY6ICAgICAgICAg
ICAgcmV0dXJuIFN0cmluZyhhbmNob3IuaHJlZigpKTsKLSAgICBjYXNlIEFuY2hvckhyZWZMYW5n
OiAgICAgICAgcmV0dXJuIFN0cmluZyhhbmNob3IuaHJlZmxhbmcoKSk7Ci0gICAgY2FzZSBBbmNo
b3JIYXNoOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoJyMnK0tVUkwoYW5jaG9yLmhyZWYoKS5z
dHJpbmcoKSkucmVmKCkpOwotICAgIGNhc2UgQW5jaG9ySG9zdDogICAgICAgICAgICByZXR1cm4g
U3RyaW5nKEtVUkwoYW5jaG9yLmhyZWYoKS5zdHJpbmcoKSkuaG9zdCgpKTsKLSAgICBjYXNlIEFu
Y2hvckhvc3RuYW1lOiB7Ci0gICAgICBLVVJMIHVybChhbmNob3IuaHJlZigpLnN0cmluZygpKTsK
LSAgICAgIGtkRGVidWcoNjA3MCkgPDwgImFuY2hvcjo6aG9zdG5hbWUgdXNlczoiIDw8dXJsLnVy
bCgpPDxlbmRsOwotICAgICAgaWYgKHVybC5wb3J0KCk9PTApCi0gICAgICAgIHJldHVybiBTdHJp
bmcodXJsLmhvc3QoKSk7Ci0gICAgICBlbHNlCi0gICAgICAgIHJldHVybiBTdHJpbmcodXJsLmhv
c3QoKSArICI6IiArIFFTdHJpbmc6Om51bWJlcih1cmwucG9ydCgpKSk7Ci0gICAgfQotICAgIGNh
c2UgQW5jaG9yUGF0aE5hbWU6ICAgICAgICByZXR1cm4gU3RyaW5nKEtVUkwoYW5jaG9yLmhyZWYo
KS5zdHJpbmcoKSkucGF0aCgpKTsKLSAgICBjYXNlIEFuY2hvclBvcnQ6ICAgICAgICAgICAgcmV0
dXJuIFN0cmluZyhRU3RyaW5nOjpudW1iZXIoS1VSTChhbmNob3IuaHJlZigpLnN0cmluZygpKS5w
b3J0KCkpKTsKLSAgICBjYXNlIEFuY2hvclByb3RvY29sOiAgICAgICAgcmV0dXJuIFN0cmluZyhL
VVJMKGFuY2hvci5ocmVmKCkuc3RyaW5nKCkpLnByb3RvY29sKCkrIjoiKTsKLSAgICBjYXNlIEFu
Y2hvclNlYXJjaDogICAgICAgICAgcmV0dXJuIFN0cmluZyhLVVJMKGFuY2hvci5ocmVmKCkuc3Ry
aW5nKCkpLnF1ZXJ5KCkpOwotICAgIGNhc2UgQW5jaG9yTmFtZTogICAgICAgICAgICByZXR1cm4g
U3RyaW5nKGFuY2hvci5uYW1lKCkpOwotICAgIGNhc2UgQW5jaG9yUmVsOiAgICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKGFuY2hvci5yZWwoKSk7Ci0gICAgY2FzZSBBbmNob3JSZXY6ICAgICAgICAg
ICAgIHJldHVybiBTdHJpbmcoYW5jaG9yLnJldigpKTsKLSAgICBjYXNlIEFuY2hvclNoYXBlOiAg
ICAgICAgICAgcmV0dXJuIFN0cmluZyhhbmNob3Iuc2hhcGUoKSk7Ci0gICAgY2FzZSBBbmNob3JU
YWJJbmRleDogICAgICAgIHJldHVybiBOdW1iZXIoYW5jaG9yLnRhYkluZGV4KCkpOwotICAgIGNh
c2UgQW5jaG9yVGFyZ2V0OiAgICAgICAgICByZXR1cm4gU3RyaW5nKGFuY2hvci50YXJnZXQoKSk7
Ci0gICAgY2FzZSBBbmNob3JUeXBlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYW5jaG9yLnR5
cGUoKSk7Ci0gICAgY2FzZSBBbmNob3JUZXh0OgotICAgICAgaWYgKERvY3VtZW50SW1wbCogZG9j
ID0gYW5jaG9yLmdldERvY3VtZW50KCkpCi0gICAgICAgIGRvYy0+dXBkYXRlTGF5b3V0SWdub3Jl
UGVuZGluZ1N0eWxlc2hlZXRzKCk7Ci0gICAgICByZXR1cm4gU3RyaW5nKGFuY2hvci5pbm5lclRl
eHQoKSk7Ci0gICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX0lNRzogewotICAgIEhUTUxJ
bWFnZUVsZW1lbnRJbXBsICZpbWFnZSA9IHN0YXRpY19jYXN0PEhUTUxJbWFnZUVsZW1lbnRJbXBs
ICY+KGVsZW1lbnQpOwotICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIEltYWdlTmFtZTog
ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGltYWdlLm5hbWUoKSk7Ci0gICAgY2FzZSBJbWFnZUFs
aWduOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpbWFnZS5hbGlnbigpKTsKLSAgICBjYXNlIElt
YWdlQWx0OiAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGltYWdlLmFsdCgpKTsKLSAgICBjYXNl
IEltYWdlQm9yZGVyOiAgICAgICAgICByZXR1cm4gTnVtYmVyKGltYWdlLmJvcmRlcigpKTsKLSAg
ICBjYXNlIEltYWdlSGVpZ2h0OiAgICAgICAgICByZXR1cm4gTnVtYmVyKGltYWdlLmhlaWdodCh0
cnVlKSk7Ci0gICAgY2FzZSBJbWFnZUhzcGFjZTogICAgICAgICAgcmV0dXJuIE51bWJlcihpbWFn
ZS5oc3BhY2UoKSk7Ci0gICAgY2FzZSBJbWFnZUlzTWFwOiAgICAgICAgICAgcmV0dXJuIEJvb2xl
YW4oaW1hZ2UuaXNNYXAoKSk7Ci0gICAgY2FzZSBJbWFnZUxvbmdEZXNjOiAgICAgICAgcmV0dXJu
IFN0cmluZyhpbWFnZS5sb25nRGVzYygpKTsKLSAgICBjYXNlIEltYWdlU3JjOiAgICAgICAgICAg
ICByZXR1cm4gU3RyaW5nKGltYWdlLnNyYygpKTsKLSAgICBjYXNlIEltYWdlVXNlTWFwOiAgICAg
ICAgICByZXR1cm4gU3RyaW5nKGltYWdlLnVzZU1hcCgpKTsKLSAgICBjYXNlIEltYWdlVnNwYWNl
OiAgICAgICAgICByZXR1cm4gTnVtYmVyKGltYWdlLnZzcGFjZSgpKTsKLSAgICBjYXNlIEltYWdl
V2lkdGg6ICAgICAgICAgICByZXR1cm4gTnVtYmVyKGltYWdlLndpZHRoKHRydWUpKTsKLSAgICBj
YXNlIEltYWdlWDogICAgICAgICAgICAgICByZXR1cm4gTnVtYmVyKGltYWdlLngoKSk7Ci0gICAg
Y2FzZSBJbWFnZVk6ICAgICAgICAgICAgICAgcmV0dXJuIE51bWJlcihpbWFnZS55KCkpOwotICAg
IH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9PQkpFQ1Q6IHsKLSAgICBIVE1MT2JqZWN0RWxl
bWVudEltcGwgJm9iamVjdCA9IHN0YXRpY19jYXN0PEhUTUxPYmplY3RFbGVtZW50SW1wbCAmPihl
bGVtZW50KTsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBPYmplY3RGb3JtOiAgICAg
ICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsb2JqZWN0LmZvcm0oKSk7IC8vIHR5cGUgSFRN
TEZvcm1FbGVtZW50Ci0gICAgY2FzZSBPYmplY3RDb2RlOiAgICAgICAgICAgIHJldHVybiBTdHJp
bmcob2JqZWN0LmNvZGUoKSk7Ci0gICAgY2FzZSBPYmplY3RBbGlnbjogICAgICAgICAgIHJldHVy
biBTdHJpbmcob2JqZWN0LmFsaWduKCkpOwotICAgIGNhc2UgT2JqZWN0QXJjaGl2ZTogICAgICAg
ICByZXR1cm4gU3RyaW5nKG9iamVjdC5hcmNoaXZlKCkpOwotICAgIGNhc2UgT2JqZWN0Qm9yZGVy
OiAgICAgICAgICByZXR1cm4gU3RyaW5nKG9iamVjdC5ib3JkZXIoKSk7Ci0gICAgY2FzZSBPYmpl
Y3RDb2RlQmFzZTogICAgICAgIHJldHVybiBTdHJpbmcob2JqZWN0LmNvZGVCYXNlKCkpOwotICAg
IGNhc2UgT2JqZWN0Q29kZVR5cGU6ICAgICAgICByZXR1cm4gU3RyaW5nKG9iamVjdC5jb2RlVHlw
ZSgpKTsKLSAgICBjYXNlIE9iamVjdENvbnRlbnREb2N1bWVudDogcmV0dXJuIGNoZWNrTm9kZVNl
Y3VyaXR5KGV4ZWMsb2JqZWN0LmNvbnRlbnREb2N1bWVudCgpKSA/IAotCQkJCSAgICAgICBnZXRE
T01Ob2RlKGV4ZWMsIG9iamVjdC5jb250ZW50RG9jdW1lbnQoKSkgOiBVbmRlZmluZWQoKTsKLSAg
ICBjYXNlIE9iamVjdERhdGE6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3QuZGF0YSgp
KTsKLSAgICBjYXNlIE9iamVjdERlY2xhcmU6ICAgICAgICAgcmV0dXJuIEJvb2xlYW4ob2JqZWN0
LmRlY2xhcmUoKSk7Ci0gICAgY2FzZSBPYmplY3RIZWlnaHQ6ICAgICAgICAgIHJldHVybiBTdHJp
bmcob2JqZWN0LmhlaWdodCgpKTsKLSAgICBjYXNlIE9iamVjdEhzcGFjZTogICAgICAgICAgcmV0
dXJuIFN0cmluZyhvYmplY3QuaHNwYWNlKCkpOwotICAgIGNhc2UgT2JqZWN0TmFtZTogICAgICAg
ICAgICByZXR1cm4gU3RyaW5nKG9iamVjdC5uYW1lKCkpOwotICAgIGNhc2UgT2JqZWN0U3RhbmRi
eTogICAgICAgICByZXR1cm4gU3RyaW5nKG9iamVjdC5zdGFuZGJ5KCkpOwotICAgIGNhc2UgT2Jq
ZWN0VGFiSW5kZXg6ICAgICAgICByZXR1cm4gTnVtYmVyKG9iamVjdC50YWJJbmRleCgpKTsKLSAg
ICBjYXNlIE9iamVjdFR5cGU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3QudHlwZSgp
KTsKLSAgICBjYXNlIE9iamVjdFVzZU1hcDogICAgICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3Qu
dXNlTWFwKCkpOwotICAgIGNhc2UgT2JqZWN0VnNwYWNlOiAgICAgICAgICByZXR1cm4gU3RyaW5n
KG9iamVjdC52c3BhY2UoKSk7Ci0gICAgY2FzZSBPYmplY3RXaWR0aDogICAgICAgICAgIHJldHVy
biBTdHJpbmcob2JqZWN0LndpZHRoKCkpOwotICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJ
RF9QQVJBTTogewotICAgIEhUTUxQYXJhbUVsZW1lbnRJbXBsICZwYXJhbSA9IHN0YXRpY19jYXN0
PEhUTUxQYXJhbUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgIHN3aXRjaCAodG9rZW4pIHsK
LSAgICBjYXNlIFBhcmFtTmFtZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKHBhcmFtLm5hbWUo
KSk7Ci0gICAgY2FzZSBQYXJhbVR5cGU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhwYXJhbS50
eXBlKCkpOwotICAgIGNhc2UgUGFyYW1WYWx1ZTogICAgICAgICAgIHJldHVybiBTdHJpbmcocGFy
YW0udmFsdWUoKSk7Ci0gICAgY2FzZSBQYXJhbVZhbHVlVHlwZTogICAgICAgcmV0dXJuIFN0cmlu
ZyhwYXJhbS52YWx1ZVR5cGUoKSk7Ci0gICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX0FQ
UExFVDogewotICAgIEhUTUxBcHBsZXRFbGVtZW50SW1wbCAmYXBwbGV0ID0gc3RhdGljX2Nhc3Q8
SFRNTEFwcGxldEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgIHN3aXRjaCAodG9rZW4pIHsK
LSAgICBjYXNlIEFwcGxldEFsaWduOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhhcHBsZXQuYWxp
Z24oKSk7Ci0gICAgY2FzZSBBcHBsZXRBbHQ6ICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYXBw
bGV0LmFsdCgpKTsKLSAgICBjYXNlIEFwcGxldEFyY2hpdmU6ICAgICAgICAgcmV0dXJuIFN0cmlu
ZyhhcHBsZXQuYXJjaGl2ZSgpKTsKLSAgICBjYXNlIEFwcGxldENvZGU6ICAgICAgICAgICAgcmV0
dXJuIFN0cmluZyhhcHBsZXQuY29kZSgpKTsKLSAgICBjYXNlIEFwcGxldENvZGVCYXNlOiAgICAg
ICAgcmV0dXJuIFN0cmluZyhhcHBsZXQuY29kZUJhc2UoKSk7Ci0gICAgY2FzZSBBcHBsZXRIZWln
aHQ6ICAgICAgICAgIHJldHVybiBTdHJpbmcoYXBwbGV0LmhlaWdodCgpKTsKLSAgICBjYXNlIEFw
cGxldEhzcGFjZTogICAgICAgICAgcmV0dXJuIFN0cmluZyhhcHBsZXQuaHNwYWNlKCkpOwotICAg
IGNhc2UgQXBwbGV0TmFtZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGFwcGxldC5uYW1lKCkp
OwotICAgIGNhc2UgQXBwbGV0T2JqZWN0OiAgICAgICAgICByZXR1cm4gU3RyaW5nKGFwcGxldC5v
YmplY3QoKSk7Ci0gICAgY2FzZSBBcHBsZXRWc3BhY2U6ICAgICAgICAgIHJldHVybiBTdHJpbmco
YXBwbGV0LnZzcGFjZSgpKTsKLSAgICBjYXNlIEFwcGxldFdpZHRoOiAgICAgICAgICAgcmV0dXJu
IFN0cmluZyhhcHBsZXQud2lkdGgoKSk7Ci0gICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElE
X01BUDogewotICAgIEhUTUxNYXBFbGVtZW50SW1wbCAmbWFwID0gc3RhdGljX2Nhc3Q8SFRNTE1h
cEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKwor
VmFsdWUgSFRNTEVsZW1lbnQ6OmZpZWxkU2V0R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRv
a2VuKSBjb25zdAoreworICAgIEhUTUxGaWVsZFNldEVsZW1lbnRJbXBsJiBmaWVsZFNldCA9ICpz
dGF0aWNfY2FzdDxIVE1MRmllbGRTZXRFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRv
a2VuID09IEZpZWxkU2V0Rm9ybSkKKyAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyxmaWVs
ZFNldC5mb3JtKCkpOyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVudAorICAgIHJldHVybiBVbmRlZmlu
ZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OmxlZ2VuZEdldHRlcihFeGVjU3RhdGUqIGV4
ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MTGVnZW5kRWxlbWVudEltcGwmIGxlZ2Vu
ZCA9ICpzdGF0aWNfY2FzdDxIVE1MTGVnZW5kRWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIHN3
aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIE1hcEFyZWFzOiAgICAgICAgICAgcmV0dXJuIGdldEhU
TUxDb2xsZWN0aW9uKGV4ZWMsIG1hcC5hcmVhcygpLmdldCgpKTsgLy8gdHlwZSBIVE1MQ29sbGVj
dGlvbgotICAgIGNhc2UgTWFwTmFtZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKG1hcC5uYW1l
KCkpOwotICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9BUkVBOiB7Ci0gICAgSFRNTEFy
ZWFFbGVtZW50SW1wbCAmYXJlYSA9IHN0YXRpY19jYXN0PEhUTUxBcmVhRWxlbWVudEltcGwgJj4o
ZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgQXJlYUFjY2Vzc0tleTog
ICAgICAgcmV0dXJuIFN0cmluZyhhcmVhLmFjY2Vzc0tleSgpKTsKLSAgICBjYXNlIEFyZWFBbHQ6
ICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYXJlYS5hbHQoKSk7Ci0gICAgY2FzZSBBcmVhQ29v
cmRzOiAgICAgICAgICByZXR1cm4gU3RyaW5nKGFyZWEuY29vcmRzKCkpOwotICAgIGNhc2UgQXJl
YUhyZWY6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhhcmVhLmhyZWYoKSk7Ci0gICAgY2FzZSBB
cmVhSGFzaDogICAgICAgICAgICByZXR1cm4gU3RyaW5nKCcjJytLVVJMKGFyZWEuaHJlZigpLnN0
cmluZygpKS5yZWYoKSk7Ci0gICAgY2FzZSBBcmVhSG9zdDogICAgICAgICAgICByZXR1cm4gU3Ry
aW5nKEtVUkwoYXJlYS5ocmVmKCkuc3RyaW5nKCkpLmhvc3QoKSk7Ci0gICAgY2FzZSBBcmVhSG9z
dE5hbWU6IHsKLSAgICAgIEtVUkwgdXJsKGFyZWEuaHJlZigpLnN0cmluZygpKTsKLSAgICAgIGtk
RGVidWcoNjA3MCkgPDwgImxpbms6Omhvc3RuYW1lIHVzZXM6IiA8PHVybC51cmwoKTw8ZW5kbDsK
LSAgICAgIGlmICh1cmwucG9ydCgpPT0wKQotICAgICAgICByZXR1cm4gU3RyaW5nKHVybC5ob3N0
KCkpOwotICAgICAgZWxzZQotICAgICAgICByZXR1cm4gU3RyaW5nKHVybC5ob3N0KCkgKyAiOiIg
KyBRU3RyaW5nOjpudW1iZXIodXJsLnBvcnQoKSkpOworICAgICAgICBjYXNlIExlZ2VuZEZvcm06
ICAgICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyxsZWdlbmQuZm9ybSgpKTsgLy8gdHlw
ZSBIVE1MRm9ybUVsZW1lbnQKKyAgICAgICAgY2FzZSBMZWdlbmRBY2Nlc3NLZXk6ICAgICAgIHJl
dHVybiBTdHJpbmcobGVnZW5kLmFjY2Vzc0tleSgpKTsKKyAgICAgICAgY2FzZSBMZWdlbmRBbGln
bjogICAgICAgICAgIHJldHVybiBTdHJpbmcobGVnZW5kLmFsaWduKCkpOwogICAgIH0KLSAgICBj
YXNlIEFyZWFQYXRoTmFtZTogICAgICAgIHJldHVybiBTdHJpbmcoS1VSTChhcmVhLmhyZWYoKS5z
dHJpbmcoKSkucGF0aCgpKTsKLSAgICBjYXNlIEFyZWFQb3J0OiAgICAgICAgICAgIHJldHVybiBT
dHJpbmcoUVN0cmluZzo6bnVtYmVyKEtVUkwoYXJlYS5ocmVmKCkuc3RyaW5nKCkpLnBvcnQoKSkp
OwotICAgIGNhc2UgQXJlYVByb3RvY29sOiAgICAgICAgcmV0dXJuIFN0cmluZyhLVVJMKGFyZWEu
aHJlZigpLnN0cmluZygpKS5wcm90b2NvbCgpKyI6Iik7Ci0gICAgY2FzZSBBcmVhU2VhcmNoOiAg
ICAgICAgICByZXR1cm4gU3RyaW5nKEtVUkwoYXJlYS5ocmVmKCkuc3RyaW5nKCkpLnF1ZXJ5KCkp
OwotICAgIGNhc2UgQXJlYU5vSHJlZjogICAgICAgICAgcmV0dXJuIEJvb2xlYW4oYXJlYS5ub0hy
ZWYoKSk7Ci0gICAgY2FzZSBBcmVhU2hhcGU6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGFyZWEu
c2hhcGUoKSk7Ci0gICAgY2FzZSBBcmVhVGFiSW5kZXg6ICAgICAgICByZXR1cm4gTnVtYmVyKGFy
ZWEudGFiSW5kZXgoKSk7Ci0gICAgY2FzZSBBcmVhVGFyZ2V0OiAgICAgICAgICByZXR1cm4gU3Ry
aW5nKGFyZWEudGFyZ2V0KCkpOwotICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9TQ1JJ
UFQ6IHsKLSAgICBIVE1MU2NyaXB0RWxlbWVudEltcGwgJnNjcmlwdCA9IHN0YXRpY19jYXN0PEhU
TUxTY3JpcHRFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0g
ICAgY2FzZSBTY3JpcHRUZXh0OiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoc2NyaXB0LnRleHQo
KSk7Ci0gICAgY2FzZSBTY3JpcHRIdG1sRm9yOiAgICAgICAgIHJldHVybiBTdHJpbmcoc2NyaXB0
Lmh0bWxGb3IoKSk7Ci0gICAgY2FzZSBTY3JpcHRFdmVudDogICAgICAgICAgIHJldHVybiBTdHJp
bmcoc2NyaXB0LmV2ZW50KCkpOwotICAgIGNhc2UgU2NyaXB0Q2hhcnNldDogICAgICAgICByZXR1
cm4gU3RyaW5nKHNjcmlwdC5jaGFyc2V0KCkpOwotICAgIGNhc2UgU2NyaXB0RGVmZXI6ICAgICAg
ICAgICByZXR1cm4gQm9vbGVhbihzY3JpcHQuZGVmZXIoKSk7Ci0gICAgY2FzZSBTY3JpcHRTcmM6
ICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoc2NyaXB0LnNyYygpKTsKLSAgICBjYXNlIFNjcmlw
dFR5cGU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhzY3JpcHQudHlwZSgpKTsKLSAgICB9Ci0g
IH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfVEFCTEU6IHsKLSAgICBIVE1MVGFibGVFbGVtZW50SW1w
bCAmdGFibGUgPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVFbGVtZW50SW1wbCAmPihlbGVtZW50KTsK
LSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBUYWJsZUNhcHRpb246ICAgICAgICAgcmV0
dXJuIGdldERPTU5vZGUoZXhlYyx0YWJsZS5jYXB0aW9uKCkpOyAvLyB0eXBlIEhUTUxUYWJsZUNh
cHRpb25FbGVtZW50Ci0gICAgY2FzZSBUYWJsZVRIZWFkOiAgICAgICAgICAgcmV0dXJuIGdldERP
TU5vZGUoZXhlYyx0YWJsZS50SGVhZCgpKTsgLy8gdHlwZSBIVE1MVGFibGVTZWN0aW9uRWxlbWVu
dAotICAgIGNhc2UgVGFibGVURm9vdDogICAgICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMs
dGFibGUudEZvb3QoKSk7IC8vIHR5cGUgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQKLSAgICBjYXNl
IFRhYmxlUm93czogICAgICAgICAgICByZXR1cm4gZ2V0SFRNTENvbGxlY3Rpb24oZXhlYywgdGFi
bGUucm93cygpLmdldCgpKTsgLy8gdHlwZSBIVE1MQ29sbGVjdGlvbgotICAgIGNhc2UgVGFibGVU
Qm9kaWVzOiAgICAgICAgIHJldHVybiBnZXRIVE1MQ29sbGVjdGlvbihleGVjLCB0YWJsZS50Qm9k
aWVzKCkuZ2V0KCkpOyAvLyB0eXBlIEhUTUxDb2xsZWN0aW9uCi0gICAgY2FzZSBUYWJsZUFsaWdu
OiAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZS5hbGlnbigpKTsKLSAgICBjYXNlIFRhYmxl
QmdDb2xvcjogICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlLmJnQ29sb3IoKSk7Ci0gICAgY2Fz
ZSBUYWJsZUJvcmRlcjogICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZS5ib3JkZXIoKSk7Ci0g
ICAgY2FzZSBUYWJsZUNlbGxQYWRkaW5nOiAgICAgcmV0dXJuIFN0cmluZyh0YWJsZS5jZWxsUGFk
ZGluZygpKTsKLSAgICBjYXNlIFRhYmxlQ2VsbFNwYWNpbmc6ICAgICByZXR1cm4gU3RyaW5nKHRh
YmxlLmNlbGxTcGFjaW5nKCkpOwotICAgIGNhc2UgVGFibGVGcmFtZTogICAgICAgICAgIHJldHVy
biBTdHJpbmcodGFibGUuZnJhbWUoKSk7Ci0gICAgY2FzZSBUYWJsZVJ1bGVzOiAgICAgICAgICAg
cmV0dXJuIFN0cmluZyh0YWJsZS5ydWxlcygpKTsKLSAgICBjYXNlIFRhYmxlU3VtbWFyeTogICAg
ICAgICByZXR1cm4gU3RyaW5nKHRhYmxlLnN1bW1hcnkoKSk7Ci0gICAgY2FzZSBUYWJsZVdpZHRo
OiAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZS53aWR0aCgpKTsKLSAgICB9Ci0gIH0KLSAg
YnJlYWs7Ci0gIGNhc2UgSURfQ0FQVElPTjogewotICAgIEhUTUxUYWJsZUNhcHRpb25FbGVtZW50
SW1wbCAmdGFibGVDYXB0aW9uID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnRJ
bXBsICY+KGVsZW1lbnQpOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRN
TEVsZW1lbnQ6OnVMaXN0R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAor
eworICAgIEhUTUxVTGlzdEVsZW1lbnRJbXBsJiB1TGlzdCA9ICpzdGF0aWNfY2FzdDxIVE1MVUxp
c3RFbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2Ug
VGFibGVDYXB0aW9uQWxpZ246ICAgICAgIHJldHVybiBTdHJpbmcodGFibGVDYXB0aW9uLmFsaWdu
KCkpOwotICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9DT0w6IHsKLSAgICBIVE1MVGFi
bGVDb2xFbGVtZW50SW1wbCAmdGFibGVDb2wgPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVDb2xFbGVt
ZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBUYWJs
ZUNvbEFsaWduOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNvbC5hbGlnbigpKTsKLSAg
ICBjYXNlIFRhYmxlQ29sQ2g6ICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ29sLmNo
KCkpOwotICAgIGNhc2UgVGFibGVDb2xDaE9mZjogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFi
bGVDb2wuY2hPZmYoKSk7Ci0gICAgY2FzZSBUYWJsZUNvbFNwYW46ICAgICAgICAgICAgcmV0dXJu
IE51bWJlcih0YWJsZUNvbC5zcGFuKCkpOwotICAgIGNhc2UgVGFibGVDb2xWQWxpZ246ICAgICAg
ICAgIHJldHVybiBTdHJpbmcodGFibGVDb2wudkFsaWduKCkpOwotICAgIGNhc2UgVGFibGVDb2xX
aWR0aDogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVDb2wud2lkdGgoKSk7Ci0gICAgfQot
ICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX1RIRUFEOgotICBjYXNlIElEX1RCT0RZOgotICBjYXNl
IElEX1RGT09UOiB7Ci0gICAgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsICZ0YWJsZVNlY3Rp
b24gPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGwgJj4oZWxlbWVudCk7
Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgVGFibGVTZWN0aW9uQWxpZ246ICAgICAg
ICAgICByZXR1cm4gU3RyaW5nKHRhYmxlU2VjdGlvbi5hbGlnbigpKTsKLSAgICBjYXNlIFRhYmxl
U2VjdGlvbkNoOiAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZVNlY3Rpb24uY2goKSk7
Ci0gICAgY2FzZSBUYWJsZVNlY3Rpb25DaE9mZjogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFi
bGVTZWN0aW9uLmNoT2ZmKCkpOwotICAgIGNhc2UgVGFibGVTZWN0aW9uVkFsaWduOiAgICAgICAg
ICByZXR1cm4gU3RyaW5nKHRhYmxlU2VjdGlvbi52QWxpZ24oKSk7Ci0gICAgY2FzZSBUYWJsZVNl
Y3Rpb25Sb3dzOiAgICAgICAgICAgIHJldHVybiBnZXRIVE1MQ29sbGVjdGlvbihleGVjLCB0YWJs
ZVNlY3Rpb24ucm93cygpLmdldCgpKTsgLy8gdHlwZSBIVE1MQ29sbGVjdGlvbgotICAgIH0KLSAg
fQotICBicmVhazsKLSAgY2FzZSBJRF9UUjogewotICAgSFRNTFRhYmxlUm93RWxlbWVudEltcGwg
JnRhYmxlUm93ID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlUm93RWxlbWVudEltcGwgJj4oZWxlbWVu
dCk7Ci0gICBzd2l0Y2ggKHRva2VuKSB7Ci0gICBjYXNlIFRhYmxlUm93Um93SW5kZXg6ICAgICAg
ICByZXR1cm4gTnVtYmVyKHRhYmxlUm93LnJvd0luZGV4KCkpOwotICAgY2FzZSBUYWJsZVJvd1Nl
Y3Rpb25Sb3dJbmRleDogcmV0dXJuIE51bWJlcih0YWJsZVJvdy5zZWN0aW9uUm93SW5kZXgoKSk7
Ci0gICBjYXNlIFRhYmxlUm93Q2VsbHM6ICAgICAgICAgICByZXR1cm4gZ2V0SFRNTENvbGxlY3Rp
b24oZXhlYywgdGFibGVSb3cuY2VsbHMoKS5nZXQoKSk7IC8vIHR5cGUgSFRNTENvbGxlY3Rpb24K
LSAgIGNhc2UgVGFibGVSb3dBbGlnbjogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVSb3cu
YWxpZ24oKSk7Ci0gICBjYXNlIFRhYmxlUm93QmdDb2xvcjogICAgICAgICByZXR1cm4gU3RyaW5n
KHRhYmxlUm93LmJnQ29sb3IoKSk7Ci0gICBjYXNlIFRhYmxlUm93Q2g6ICAgICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKHRhYmxlUm93LmNoKCkpOwotICAgY2FzZSBUYWJsZVJvd0NoT2ZmOiAgICAg
ICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZVJvdy5jaE9mZigpKTsKLSAgIGNhc2UgVGFibGVSb3dW
QWxpZ246ICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVSb3cudkFsaWduKCkpOwotICAgfQot
ICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX1RIOgotICBjYXNlIElEX1REOiB7Ci0gICAgSFRNTFRh
YmxlQ2VsbEVsZW1lbnRJbXBsICZ0YWJsZUNlbGwgPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVDZWxs
RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2Ug
VGFibGVDZWxsQ2VsbEluZGV4OiAgICAgICByZXR1cm4gTnVtYmVyKHRhYmxlQ2VsbC5jZWxsSW5k
ZXgoKSk7Ci0gICAgY2FzZSBUYWJsZUNlbGxBYmJyOiAgICAgICAgICAgIHJldHVybiBTdHJpbmco
dGFibGVDZWxsLmFiYnIoKSk7Ci0gICAgY2FzZSBUYWJsZUNlbGxBbGlnbjogICAgICAgICAgIHJl
dHVybiBTdHJpbmcodGFibGVDZWxsLmFsaWduKCkpOwotICAgIGNhc2UgVGFibGVDZWxsQXhpczog
ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ2VsbC5heGlzKCkpOwotICAgIGNhc2UgVGFi
bGVDZWxsQmdDb2xvcjogICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ2VsbC5iZ0NvbG9yKCkp
OwotICAgIGNhc2UgVGFibGVDZWxsQ2g6ICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxl
Q2VsbC5jaCgpKTsKLSAgICBjYXNlIFRhYmxlQ2VsbENoT2ZmOiAgICAgICAgICAgcmV0dXJuIFN0
cmluZyh0YWJsZUNlbGwuY2hPZmYoKSk7Ci0gICAgY2FzZSBUYWJsZUNlbGxDb2xTcGFuOiAgICAg
ICAgIHJldHVybiBOdW1iZXIodGFibGVDZWxsLmNvbFNwYW4oKSk7Ci0gICAgY2FzZSBUYWJsZUNl
bGxIZWFkZXJzOiAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVDZWxsLmhlYWRlcnMoKSk7Ci0g
ICAgY2FzZSBUYWJsZUNlbGxIZWlnaHQ6ICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVDZWxs
LmhlaWdodCgpKTsKLSAgICBjYXNlIFRhYmxlQ2VsbE5vV3JhcDogICAgICAgICAgcmV0dXJuIEJv
b2xlYW4odGFibGVDZWxsLm5vV3JhcCgpKTsKLSAgICBjYXNlIFRhYmxlQ2VsbFJvd1NwYW46ICAg
ICAgICAgcmV0dXJuIE51bWJlcih0YWJsZUNlbGwucm93U3BhbigpKTsKLSAgICBjYXNlIFRhYmxl
Q2VsbFNjb3BlOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNlbGwuc2NvcGUoKSk7Ci0g
ICAgY2FzZSBUYWJsZUNlbGxWQWxpZ246ICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVDZWxs
LnZBbGlnbigpKTsKLSAgICBjYXNlIFRhYmxlQ2VsbFdpZHRoOiAgICAgICAgICAgcmV0dXJuIFN0
cmluZyh0YWJsZUNlbGwud2lkdGgoKSk7CisgICAgICAgIGNhc2UgVUxpc3RDb21wYWN0OiAgICAg
ICAgIHJldHVybiBCb29sZWFuKHVMaXN0LmNvbXBhY3QoKSk7CisgICAgICAgIGNhc2UgVUxpc3RU
eXBlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcodUxpc3QudHlwZSgpKTsKICAgICB9Ci0gIH0K
LSAgYnJlYWs7Ci0gIGNhc2UgSURfRlJBTUVTRVQ6IHsKLSAgICBIVE1MRnJhbWVTZXRFbGVtZW50
SW1wbCAmZnJhbWVTZXQgPSBzdGF0aWNfY2FzdDxIVE1MRnJhbWVTZXRFbGVtZW50SW1wbCAmPihl
bGVtZW50KTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50
OjpvTGlzdEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBI
VE1MT0xpc3RFbGVtZW50SW1wbCYgb0xpc3QgPSAqc3RhdGljX2Nhc3Q8SFRNTE9MaXN0RWxlbWVu
dEltcGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIEZyYW1lU2V0
Q29sczogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGZyYW1lU2V0LmNvbHMoKSk7Ci0gICAgY2Fz
ZSBGcmFtZVNldFJvd3M6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhmcmFtZVNldC5yb3dzKCkp
OwotICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9GUkFNRTogewotICAgIEhUTUxGcmFt
ZUVsZW1lbnRJbXBsICZmcmFtZUVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRnJhbWVFbGVtZW50
SW1wbCAmPihlbGVtZW50KTsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBGcmFtZUNv
bnRlbnREb2N1bWVudDogcmV0dXJuIGNoZWNrTm9kZVNlY3VyaXR5KGV4ZWMsZnJhbWVFbGVtZW50
LmNvbnRlbnREb2N1bWVudCgpKSA/IAotCQkJCSAgICAgIGdldERPTU5vZGUoZXhlYywgZnJhbWVF
bGVtZW50LmNvbnRlbnREb2N1bWVudCgpKSA6IFVuZGVmaW5lZCgpOwotICAgIGNhc2UgRnJhbWVD
b250ZW50V2luZG93OiAgIHJldHVybiBjaGVja05vZGVTZWN1cml0eShleGVjLGZyYW1lRWxlbWVu
dC5jb250ZW50RG9jdW1lbnQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ID8gV2luZG93OjpyZXRyaWV2ZShmcmFtZUVsZW1lbnQuY29udGVudFBhcnQoKSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogVW5kZWZpbmVkKCk7Ci0gICAgY2FzZSBGcmFt
ZUZyYW1lQm9yZGVyOiAgICAgcmV0dXJuIFN0cmluZyhmcmFtZUVsZW1lbnQuZnJhbWVCb3JkZXIo
KSk7Ci0gICAgY2FzZSBGcmFtZUxvbmdEZXNjOiAgICAgICAgcmV0dXJuIFN0cmluZyhmcmFtZUVs
ZW1lbnQubG9uZ0Rlc2MoKSk7Ci0gICAgY2FzZSBGcmFtZU1hcmdpbkhlaWdodDogICAgcmV0dXJu
IFN0cmluZyhmcmFtZUVsZW1lbnQubWFyZ2luSGVpZ2h0KCkpOwotICAgIGNhc2UgRnJhbWVNYXJn
aW5XaWR0aDogICAgIHJldHVybiBTdHJpbmcoZnJhbWVFbGVtZW50Lm1hcmdpbldpZHRoKCkpOwot
ICAgIGNhc2UgRnJhbWVOYW1lOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoZnJhbWVFbGVtZW50
Lm5hbWUoKSk7Ci0gICAgY2FzZSBGcmFtZU5vUmVzaXplOiAgICAgICAgcmV0dXJuIEJvb2xlYW4o
ZnJhbWVFbGVtZW50Lm5vUmVzaXplKCkpOwotICAgIGNhc2UgRnJhbWVTY3JvbGxpbmc6ICAgICAg
IHJldHVybiBTdHJpbmcoZnJhbWVFbGVtZW50LnNjcm9sbGluZygpKTsKLSAgICBjYXNlIEZyYW1l
U3JjOgotICAgIGNhc2UgRnJhbWVMb2NhdGlvbjogICAgICAgIHJldHVybiBTdHJpbmcoZnJhbWVF
bGVtZW50LnNyYygpKTsKKyAgICAgICAgY2FzZSBPTGlzdENvbXBhY3Q6ICAgICAgICAgcmV0dXJu
IEJvb2xlYW4ob0xpc3QuY29tcGFjdCgpKTsKKyAgICAgICAgY2FzZSBPTGlzdFN0YXJ0OiAgICAg
ICAgICAgcmV0dXJuIE51bWJlcihvTGlzdC5zdGFydCgpKTsKKyAgICAgICAgY2FzZSBPTGlzdFR5
cGU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhvTGlzdC50eXBlKCkpOwogICAgIH0KLSAgfQot
ICBicmVhazsKLSAgY2FzZSBJRF9JRlJBTUU6IHsKLSAgICBIVE1MSUZyYW1lRWxlbWVudEltcGwg
JmlGcmFtZSA9IHN0YXRpY19jYXN0PEhUTUxJRnJhbWVFbGVtZW50SW1wbCAmPihlbGVtZW50KTsK
LSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBJRnJhbWVBbGlnbjogICAgICAgICAgICAg
ICAgcmV0dXJuIFN0cmluZyhpRnJhbWUuYWxpZ24oKSk7Ci0gICAgICAvLyAjIyMgc2VjdXJpdHkg
Y2hlY2sgPwotICAgIGNhc2UgSUZyYW1lRG9jdW1lbnQ6IC8vIG5vbi1zdGFuZGFyZCwgbWFwcGVk
IHRvIGNvbnRlbnREb2N1bWVudAotICAgIGNhc2UgSUZyYW1lQ29udGVudERvY3VtZW50OiByZXR1
cm4gY2hlY2tOb2RlU2VjdXJpdHkoZXhlYyxpRnJhbWUuY29udGVudERvY3VtZW50KCkpID8gCi0J
CQkJICBnZXRET01Ob2RlKGV4ZWMsIGlGcmFtZS5jb250ZW50RG9jdW1lbnQoKSkgOiBVbmRlZmlu
ZWQoKTsKLSAgICBjYXNlIElGcmFtZUNvbnRlbnRXaW5kb3c6CXJldHVybiBjaGVja05vZGVTZWN1
cml0eShleGVjLGlGcmFtZS5jb250ZW50RG9jdW1lbnQoKSkgCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA/IFdpbmRvdzo6cmV0cmlldmUoaUZyYW1lLmNvbnRlbnRQYXJ0KCkp
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFVuZGVmaW5lZCgpOwotICAg
IGNhc2UgSUZyYW1lRnJhbWVCb3JkZXI6ICAgICByZXR1cm4gU3RyaW5nKGlGcmFtZS5mcmFtZUJv
cmRlcigpKTsKLSAgICBjYXNlIElGcmFtZUhlaWdodDogICAgICAgICAgcmV0dXJuIFN0cmluZyhp
RnJhbWUuaGVpZ2h0KCkpOwotICAgIGNhc2UgSUZyYW1lTG9uZ0Rlc2M6ICAgICAgICByZXR1cm4g
U3RyaW5nKGlGcmFtZS5sb25nRGVzYygpKTsKLSAgICBjYXNlIElGcmFtZU1hcmdpbkhlaWdodDog
ICAgcmV0dXJuIFN0cmluZyhpRnJhbWUubWFyZ2luSGVpZ2h0KCkpOwotICAgIGNhc2UgSUZyYW1l
TWFyZ2luV2lkdGg6ICAgICByZXR1cm4gU3RyaW5nKGlGcmFtZS5tYXJnaW5XaWR0aCgpKTsKLSAg
ICBjYXNlIElGcmFtZU5hbWU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpRnJhbWUubmFtZSgp
KTsKLSAgICBjYXNlIElGcmFtZVNjcm9sbGluZzogICAgICAgcmV0dXJuIFN0cmluZyhpRnJhbWUu
c2Nyb2xsaW5nKCkpOwotICAgIGNhc2UgSUZyYW1lU3JjOiAgICAgICAgICAgICByZXR1cm4gU3Ry
aW5nKGlGcmFtZS5zcmMoKSk7Ci0gICAgY2FzZSBJRnJhbWVXaWR0aDogICAgICAgICAgIHJldHVy
biBTdHJpbmcoaUZyYW1lLndpZHRoKCkpOwotICAgIH0KLSAgICBicmVhazsKLSAgfQotICB9IC8v
IHhlbWFjcyAob3IgYXJudCkgY291bGQgYmUgYSBiaXQgc21hcnRlciB3aGVuIGl0IGNvbWVzIHRv
IGluZGVudGluZyBzd2l0Y2goKWVzIDspCi0gIC8vIGl0cyBub3QgYXJudCB0byBibGFtZSAtIGl0
cyB0aGUgb3JpZ2luYWwgU3Ryb3VzdHJ1cCBzdHlsZSB3ZSBsaWtlIDopIChEaXJrKQorICAgIHJl
dHVybiBVbmRlZmluZWQoKTsKK30KIAotICAvLyBnZW5lcmljIHByb3BlcnRpZXMKLSAgc3dpdGNo
ICh0b2tlbikgewotICBjYXNlIEVsZW1lbnRJZDoKLSAgICAgIC8vIGlodC5jb20gcmVsaWVzIG9u
IHRoaXMgdmFsdWUgYmVpbmcgIiIgd2hlbiBubyBpZCBpcyBwcmVzZW50LiAgT3RoZXIgYnJvd3Nl
cnMgZG8gdGhpcyBhcyB3ZWxsLgotICAgICAgLy8gU28gd2UgdXNlIFN0cmluZygpIGluc3RlYWQg
b2YgU3RyaW5nKCkgaGVyZS4KLSAgICByZXR1cm4gU3RyaW5nKGVsZW1lbnQuaWRET00oKSk7Ci0g
IGNhc2UgRWxlbWVudFRpdGxlOgotICAgIHJldHVybiBTdHJpbmcoZWxlbWVudC50aXRsZSgpKTsK
LSAgY2FzZSBFbGVtZW50TGFuZzoKLSAgICByZXR1cm4gU3RyaW5nKGVsZW1lbnQubGFuZygpKTsK
LSAgY2FzZSBFbGVtZW50RGlyOgotICAgIHJldHVybiBTdHJpbmcoZWxlbWVudC5kaXIoKSk7Ci0g
IGNhc2UgRWxlbWVudENsYXNzTmFtZToKLSAgICByZXR1cm4gU3RyaW5nKGVsZW1lbnQuY2xhc3NO
YW1lKCkpOwotICBjYXNlIEVsZW1lbnRJbm5lckhUTUw6Ci0gICAgcmV0dXJuIFN0cmluZyhlbGVt
ZW50LmlubmVySFRNTCgpKTsKLSAgY2FzZSBFbGVtZW50SW5uZXJUZXh0OgotICAgIGlmIChEb2N1
bWVudEltcGwqIGRvYyA9IGltcGwoKS0+Z2V0RG9jdW1lbnQoKSkKLSAgICAgIGRvYy0+dXBkYXRl
TGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7Ci0gICAgcmV0dXJuIFN0cmluZyhlbGVt
ZW50LmlubmVyVGV4dCgpKTsKLSAgY2FzZSBFbGVtZW50T3V0ZXJIVE1MOgotICAgIHJldHVybiBT
dHJpbmcoZWxlbWVudC5vdXRlckhUTUwoKSk7Ci0gIGNhc2UgRWxlbWVudE91dGVyVGV4dDoKLSAg
ICByZXR1cm4gU3RyaW5nKGVsZW1lbnQub3V0ZXJUZXh0KCkpOwotICBjYXNlIEVsZW1lbnREb2N1
bWVudDoKLSAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLGVsZW1lbnQub3duZXJEb2N1bWVudCgp
KTsKLSAgY2FzZSBFbGVtZW50Q2hpbGRyZW46Ci0gICAgcmV0dXJuIGdldEhUTUxDb2xsZWN0aW9u
KGV4ZWMsIGVsZW1lbnQuY2hpbGRyZW4oKS5nZXQoKSk7Ci0gIGNhc2UgRWxlbWVudENvbnRlbnRF
ZGl0YWJsZToKLSAgICByZXR1cm4gU3RyaW5nKGVsZW1lbnQuY29udGVudEVkaXRhYmxlKCkpOwot
ICBjYXNlIEVsZW1lbnRJc0NvbnRlbnRFZGl0YWJsZToKLSAgICByZXR1cm4gQm9vbGVhbihlbGVt
ZW50LmlzQ29udGVudEVkaXRhYmxlKCkpOwotICAvLyAjIyMgd2hhdCBhYm91dCBzdHlsZT8gb3Ig
aXMgdGhpcyB1c2VkIGluc3RlYWQgZm9yIERPTTIgc3R5bGVzaGVldHM/Ci0gIH0KLSAga2RXYXJu
aW5nKCkgPDwgIkhUTUxFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5IHVuaGFuZGxlZCB0b2tlbiAi
IDw8IHRva2VuIDw8IGVuZGw7Ci0gIHJldHVybiBVbmRlZmluZWQoKTsKK1ZhbHVlIEhUTUxFbGVt
ZW50OjpkTGlzdEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAg
ICBIVE1MRExpc3RFbGVtZW50SW1wbCYgZExpc3QgPSAqc3RhdGljX2Nhc3Q8SFRNTERMaXN0RWxl
bWVudEltcGwqPihpbXBsKCkpOworICAgIGlmICh0b2tlbiA9PSBETGlzdENvbXBhY3QpCisgICAg
ICAgIHJldHVybiBCb29sZWFuKGRMaXN0LmNvbXBhY3QoKSk7CisgICAgcmV0dXJuIFVuZGVmaW5l
ZCgpOwogfQogCi1ib29sIEtKUzo6SFRNTEVsZW1lbnQ6Omhhc1Byb3BlcnR5KEV4ZWNTdGF0ZSAq
ZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lKSBjb25zdAorVmFsdWUgSFRNTEVs
ZW1lbnQ6OmRpckdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKLSNp
ZmRlZiBLSlNfVkVSQk9TRQotICAvL2tkRGVidWcoNjA3MCkgPDwgIkhUTUxFbGVtZW50OjpoYXNQ
cm9wZXJ0eSAiIDw8IHByb3BlcnR5TmFtZS5xc3RyaW5nKCkgPDwgZW5kbDsKLSNlbmRpZgotICBI
VE1MRWxlbWVudEltcGwgJmVsZW1lbnQgPSAqc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+
KGltcGwoKSk7Ci0gIC8vIEZpcnN0IGxvb2sgYXQgZHluYW1pYyBwcm9wZXJ0aWVzIC0ga2VlcCB0
aGlzIGluIHN5bmMgd2l0aCB0cnlHZXQKLSAgc3dpdGNoIChlbGVtZW50LmlkKCkpIHsKLSAgICBj
YXNlIElEX0ZPUk06IHsKLSAgICAgIEhUTUxGb3JtRWxlbWVudEltcGwgJmZvcm0gPSBzdGF0aWNf
Y2FzdDxIVE1MRm9ybUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgLy8gQ2hlY2sgaWYg
d2UncmUgcmV0cmlldmluZyBhbiBlbGVtZW50IChieSBpbmRleCBvciBieSBuYW1lKQotICAgICAg
Ym9vbCBvazsKLSAgICAgIHVpbnQgdSA9IHByb3BlcnR5TmFtZS50b1VMb25nKCZvayk7Ci0gICAg
ICBpZiAob2sgJiYgZm9ybS5lbGVtZW50cygpLT5pdGVtKHUpKQotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgIGlmIChmb3JtLmVsZW1lbnRzKCktPm5hbWVkSXRlbShwcm9wZXJ0eU5hbWUuc3Ry
aW5nKCkpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBj
YXNlIElEX1NFTEVDVDogewotICAgICAgSFRNTFNlbGVjdEVsZW1lbnRJbXBsICZzZWxlY3QgPSBz
dGF0aWNfY2FzdDxIVE1MU2VsZWN0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBib29s
IG9rOwotICAgICAgdWludCB1ID0gcHJvcGVydHlOYW1lLnRvVUxvbmcoJm9rKTsKLSAgICAgIGlm
IChvayAmJiBzZWxlY3Qub3B0aW9uc0hUTUxDb2xsZWN0aW9uKCktPml0ZW0odSkpCi0gICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICBi
cmVhazsKLSAgfQorICAgIEhUTUxEaXJlY3RvcnlFbGVtZW50SW1wbCYgZGlyID0gKnN0YXRpY19j
YXN0PEhUTUxEaXJlY3RvcnlFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09
IERpcmVjdG9yeUNvbXBhY3QpCisgICAgICAgIHJldHVybiBCb29sZWFuKGRpci5jb21wYWN0KCkp
OworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KIAotICByZXR1cm4gRE9NRWxlbWVudDo6aGFz
UHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lKTsKK1ZhbHVlIEhUTUxFbGVtZW50OjptZW51R2V0
dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxNZW51RWxl
bWVudEltcGwmIG1lbnUgPSAqc3RhdGljX2Nhc3Q8SFRNTE1lbnVFbGVtZW50SW1wbCo+KGltcGwo
KSk7CisgICAgaWYgKHRva2VuID09IE1lbnVDb21wYWN0KQorICAgICAgICByZXR1cm4gQm9vbGVh
bihtZW51LmNvbXBhY3QoKSk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1VU3RyaW5n
IEtKUzo6SFRNTEVsZW1lbnQ6OnRvU3RyaW5nKEV4ZWNTdGF0ZSAqZXhlYykgY29uc3QKK1ZhbHVl
IEhUTUxFbGVtZW50OjpsaUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QK
IHsKLSAgaWYgKGltcGwoKS0+aWQoKSA9PSBJRF9BKQotICAgIHJldHVybiBVU3RyaW5nKHN0YXRp
Y19jYXN0PGNvbnN0IEhUTUxBbmNob3JFbGVtZW50SW1wbCAqPihpbXBsKCkpLT5ocmVmKCkpOwot
ICBlbHNlCi0gICAgcmV0dXJuIERPTUVsZW1lbnQ6OnRvU3RyaW5nKGV4ZWMpOworICAgIEhUTUxM
SUVsZW1lbnRJbXBsJiBsaSA9ICpzdGF0aWNfY2FzdDxIVE1MTElFbGVtZW50SW1wbCo+KGltcGwo
KSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNlIExJVHlwZTogICAgICAgICAg
ICByZXR1cm4gU3RyaW5nKGxpLnR5cGUoKSk7CisgICAgICAgIGNhc2UgTElWYWx1ZTogICAgICAg
ICAgIHJldHVybiBOdW1iZXIobGkudmFsdWUoKSk7CisgICAgfQorICAgIHJldHVybiBVbmRlZmlu
ZWQoKTsKIH0KIAotc3RhdGljIEhUTUxGb3JtRWxlbWVudEltcGwgKmdldEZvcm0oSFRNTEVsZW1l
bnRJbXBsICplbGVtZW50KQorVmFsdWUgSFRNTEVsZW1lbnQ6OmRpdkdldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKLSAgaWYgKGVsZW1lbnQtPmlzR2VuZXJpY0Zvcm1F
bGVtZW50KCkpCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJ
bXBsICo+KGVsZW1lbnQpLT5mb3JtKCk7CisgICAgSFRNTERpdkVsZW1lbnRJbXBsJiBkaXYgPSAq
c3RhdGljX2Nhc3Q8SFRNTERpdkVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBpZiAodG9rZW4g
PT0gRGl2QWxpZ24pCisgICAgICAgIHJldHVybiBTdHJpbmcoZGl2LmFsaWduKCkpOworICAgIHJl
dHVybiBVbmRlZmluZWQoKTsKK30KIAotICBzd2l0Y2ggKGVsZW1lbnQtPmlkKCkpIHsKLSAgICBj
YXNlIElEX0xBQkVMOgotICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxMYWJlbEVsZW1lbnRJ
bXBsICo+KGVsZW1lbnQpLT5mb3JtKCk7Ci0gICAgY2FzZSBJRF9PQkpFQ1Q6Ci0gICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8SFRNTE9iamVjdEVsZW1lbnRJbXBsICo+KGVsZW1lbnQpLT5mb3JtKCk7
Ci0gIH0KK1ZhbHVlIEhUTUxFbGVtZW50OjpwYXJhZ3JhcGhHZXR0ZXIoRXhlY1N0YXRlKiBleGVj
LCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTFBhcmFncmFwaEVsZW1lbnRJbXBsJiBwID0g
KnN0YXRpY19jYXN0PEhUTUxQYXJhZ3JhcGhFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYg
KHRva2VuID09IFBhcmFncmFwaEFsaWduKQorICAgICAgICByZXR1cm4gU3RyaW5nKHAuYWxpZ24o
KSk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQogCi0gIHJldHVybiAwOworVmFsdWUgSFRN
TEVsZW1lbnQ6OmhlYWRpbmdHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0
Cit7CisgICAgSFRNTEhlYWRpbmdFbGVtZW50SW1wbCYgaCA9ICpzdGF0aWNfY2FzdDxIVE1MSGVh
ZGluZ0VsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBpZiAodG9rZW4gPT0gSGVhZGluZ0FsaWdu
KQorICAgICAgICByZXR1cm4gU3RyaW5nKGguYWxpZ24oKSk7CisgICAgcmV0dXJuIFVuZGVmaW5l
ZCgpOwogfQogCi12b2lkIEtKUzo6SFRNTEVsZW1lbnQ6OnB1c2hFdmVudEhhbmRsZXJTY29wZShF
eGVjU3RhdGUgKmV4ZWMsIFNjb3BlQ2hhaW4gJnNjb3BlKSBjb25zdAorVmFsdWUgSFRNTEVsZW1l
bnQ6OmJsb2NrUXVvdGVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7
CisgICAgSFRNTEJsb2NrcXVvdGVFbGVtZW50SW1wbCYgYmxvY2tRdW90ZSA9ICpzdGF0aWNfY2Fz
dDxIVE1MQmxvY2txdW90ZUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBpZiAodG9rZW4gPT0g
QmxvY2tRdW90ZUNpdGUpCisgICAgICAgIHJldHVybiBTdHJpbmcoYmxvY2tRdW90ZS5jaXRlKCkp
OworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OnF1b3Rl
R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxRdW90
ZUVsZW1lbnRJbXBsJiBxdW90ZSA9ICpzdGF0aWNfY2FzdDxIVE1MUXVvdGVFbGVtZW50SW1wbCo+
KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IFF1b3RlQ2l0ZSkKKyAgICAgICAgcmV0dXJuIFN0
cmluZyhxdW90ZS5jaXRlKCkpOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUg
SFRNTEVsZW1lbnQ6OnByZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QK
K3sKKyAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yICd3cmFwJyB3aGVuIHdoaXRlLXNwYWNl
OiBwcmUtd3JhcCBpcyBpbXBsZW1lbnRlZC4KKyAgICBIVE1MUHJlRWxlbWVudEltcGwmIHByZSA9
ICpzdGF0aWNfY2FzdDxIVE1MUHJlRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIGlmICh0b2tl
biA9PSBQcmVXaWR0aCkKKyAgICAgICAgcmV0dXJuIE51bWJlcihwcmUud2lkdGgoKSk7CisgICAg
cmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6YnJHZXR0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTEJSRWxlbWVudEltcGwm
IGJyID0gKnN0YXRpY19jYXN0PEhUTUxCUkVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBpZiAo
dG9rZW4gPT0gQlJDbGVhcikKKyAgICAgICAgcmV0dXJuIFN0cmluZyhici5jbGVhcigpKTsKKyAg
ICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50OjpiYXNlRm9udEdl
dHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MQmFzZUZv
bnRFbGVtZW50SW1wbCYgYmFzZUZvbnQgPSAqc3RhdGljX2Nhc3Q8SFRNTEJhc2VGb250RWxlbWVu
dEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBCYXNl
Rm9udENvbG9yOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhiYXNlRm9udC5jb2xvcigpKTsKKyAg
ICAgICAgY2FzZSBCYXNlRm9udEZhY2U6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhiYXNlRm9u
dC5mYWNlKCkpOworICAgICAgICBjYXNlIEJhc2VGb250U2l6ZTogICAgICAgICAgICByZXR1cm4g
U3RyaW5nKGJhc2VGb250LnNpemUoKSk7CisgICAgfQorICAgIHJldHVybiBVbmRlZmluZWQoKTsK
K30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OmZvbnRHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQg
dG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTEZvbnRFbGVtZW50SW1wbCYgZm9udCA9ICpzdGF0aWNf
Y2FzdDxIVE1MRm9udEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7
CisgICAgICAgIGNhc2UgRm9udENvbG9yOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhmb250LmNv
bG9yKCkpOworICAgICAgICBjYXNlIEZvbnRGYWNlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmco
Zm9udC5mYWNlKCkpOworICAgICAgICBjYXNlIEZvbnRTaXplOiAgICAgICAgICAgIHJldHVybiBT
dHJpbmcoZm9udC5zaXplKCkpOworICAgIH0KKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisK
K1ZhbHVlIEhUTUxFbGVtZW50OjpockdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikg
Y29uc3QKK3sKKyAgICBIVE1MSFJFbGVtZW50SW1wbCYgaHIgPSAqc3RhdGljX2Nhc3Q8SFRNTEhS
RWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2Fz
ZSBIUkFsaWduOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhoci5hbGlnbigpKTsKKyAgICAgICAg
Y2FzZSBIUk5vU2hhZGU6ICAgICAgICAgcmV0dXJuIEJvb2xlYW4oaHIubm9TaGFkZSgpKTsKKyAg
ICAgICAgY2FzZSBIUlNpemU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhoci5zaXplKCkpOwor
ICAgICAgICBjYXNlIEhSV2lkdGg6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGhyLndpZHRoKCkp
OworICAgIH0KKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50
Ojptb2RHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRN
TE1vZEVsZW1lbnRJbXBsJiBtb2QgPSAqc3RhdGljX2Nhc3Q8SFRNTE1vZEVsZW1lbnRJbXBsKj4o
aW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgTW9kQ2l0ZTogICAg
ICAgICAgICByZXR1cm4gU3RyaW5nKG1vZC5jaXRlKCkpOworICAgICAgICBjYXNlIE1vZERhdGVU
aW1lOiAgICAgICAgcmV0dXJuIFN0cmluZyhtb2QuZGF0ZVRpbWUoKSk7CisgICAgfQorICAgIHJl
dHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OmFuY2hvckdldHRlcihF
eGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MQW5jaG9yRWxlbWVu
dEltcGwmIGFuY2hvciA9ICpzdGF0aWNfY2FzdDxIVE1MQW5jaG9yRWxlbWVudEltcGwqPihpbXBs
KCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBBbmNob3JBY2Nlc3NLZXk6
ICAgICAgIHJldHVybiBTdHJpbmcoYW5jaG9yLmFjY2Vzc0tleSgpKTsKKyAgICAgICAgY2FzZSBB
bmNob3JDaGFyc2V0OiAgICAgICAgIHJldHVybiBTdHJpbmcoYW5jaG9yLmNoYXJzZXQoKSk7Cisg
ICAgICAgIGNhc2UgQW5jaG9yQ29vcmRzOiAgICAgICAgICByZXR1cm4gU3RyaW5nKGFuY2hvci5j
b29yZHMoKSk7CisgICAgICAgIGNhc2UgQW5jaG9ySHJlZjogICAgICAgICAgICByZXR1cm4gU3Ry
aW5nKGFuY2hvci5ocmVmKCkpOworICAgICAgICBjYXNlIEFuY2hvckhyZWZMYW5nOiAgICAgICAg
cmV0dXJuIFN0cmluZyhhbmNob3IuaHJlZmxhbmcoKSk7CisgICAgICAgIGNhc2UgQW5jaG9ySGFz
aDogICAgICAgICAgICByZXR1cm4gU3RyaW5nKCcjJytLVVJMKGFuY2hvci5ocmVmKCkuc3RyaW5n
KCkpLnJlZigpKTsKKyAgICAgICAgY2FzZSBBbmNob3JIb3N0OiAgICAgICAgICAgIHJldHVybiBT
dHJpbmcoS1VSTChhbmNob3IuaHJlZigpLnN0cmluZygpKS5ob3N0KCkpOworICAgICAgICBjYXNl
IEFuY2hvckhvc3RuYW1lOiB7CisgICAgICAgICAgICBLVVJMIHVybChhbmNob3IuaHJlZigpLnN0
cmluZygpKTsKKyAgICAgICAgICAgIGtkRGVidWcoNjA3MCkgPDwgImFuY2hvcjo6aG9zdG5hbWUg
dXNlczoiIDw8dXJsLnVybCgpPDxlbmRsOworICAgICAgICAgICAgaWYgKHVybC5wb3J0KCk9PTAp
CisgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh1cmwuaG9zdCgpKTsKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKHVybC5ob3N0KCkgKyAiOiIgKyBR
U3RyaW5nOjpudW1iZXIodXJsLnBvcnQoKSkpOworICAgICAgICB9CisgICAgICAgIGNhc2UgQW5j
aG9yUGF0aE5hbWU6ICAgICAgICByZXR1cm4gU3RyaW5nKEtVUkwoYW5jaG9yLmhyZWYoKS5zdHJp
bmcoKSkucGF0aCgpKTsKKyAgICAgICAgY2FzZSBBbmNob3JQb3J0OiAgICAgICAgICAgIHJldHVy
biBTdHJpbmcoUVN0cmluZzo6bnVtYmVyKEtVUkwoYW5jaG9yLmhyZWYoKS5zdHJpbmcoKSkucG9y
dCgpKSk7CisgICAgICAgIGNhc2UgQW5jaG9yUHJvdG9jb2w6ICAgICAgICByZXR1cm4gU3RyaW5n
KEtVUkwoYW5jaG9yLmhyZWYoKS5zdHJpbmcoKSkucHJvdG9jb2woKSsiOiIpOworICAgICAgICBj
YXNlIEFuY2hvclNlYXJjaDogICAgICAgICAgcmV0dXJuIFN0cmluZyhLVVJMKGFuY2hvci5ocmVm
KCkuc3RyaW5nKCkpLnF1ZXJ5KCkpOworICAgICAgICBjYXNlIEFuY2hvck5hbWU6ICAgICAgICAg
ICAgcmV0dXJuIFN0cmluZyhhbmNob3IubmFtZSgpKTsKKyAgICAgICAgY2FzZSBBbmNob3JSZWw6
ICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYW5jaG9yLnJlbCgpKTsKKyAgICAgICAgY2FzZSBB
bmNob3JSZXY6ICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYW5jaG9yLnJldigpKTsKKyAgICAg
ICAgY2FzZSBBbmNob3JTaGFwZTogICAgICAgICAgIHJldHVybiBTdHJpbmcoYW5jaG9yLnNoYXBl
KCkpOworICAgICAgICBjYXNlIEFuY2hvclRhYkluZGV4OiAgICAgICAgcmV0dXJuIE51bWJlcihh
bmNob3IudGFiSW5kZXgoKSk7CisgICAgICAgIGNhc2UgQW5jaG9yVGFyZ2V0OiAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKGFuY2hvci50YXJnZXQoKSk7CisgICAgICAgIGNhc2UgQW5jaG9yVHlwZTog
ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGFuY2hvci50eXBlKCkpOworICAgICAgICBjYXNlIEFu
Y2hvclRleHQ6CisgICAgICAgICAgICBpZiAoRG9jdW1lbnRJbXBsKiBkb2MgPSBhbmNob3IuZ2V0
RG9jdW1lbnQoKSkKKyAgICAgICAgICAgICAgICBkb2MtPnVwZGF0ZUxheW91dElnbm9yZVBlbmRp
bmdTdHlsZXNoZWV0cygpOworICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhhbmNob3IuaW5uZXJU
ZXh0KCkpOworICAgIH0KKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxF
bGVtZW50OjppbWFnZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sK
KyAgICBIVE1MSW1hZ2VFbGVtZW50SW1wbCYgaW1hZ2UgPSAqc3RhdGljX2Nhc3Q8SFRNTEltYWdl
RWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2Fz
ZSBJbWFnZU5hbWU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpbWFnZS5uYW1lKCkpOworICAg
ICAgICBjYXNlIEltYWdlQWxpZ246ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGltYWdlLmFsaWdu
KCkpOworICAgICAgICBjYXNlIEltYWdlQWx0OiAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGlt
YWdlLmFsdCgpKTsKKyAgICAgICAgY2FzZSBJbWFnZUJvcmRlcjogICAgICAgICAgcmV0dXJuIE51
bWJlcihpbWFnZS5ib3JkZXIoKSk7CisgICAgICAgIGNhc2UgSW1hZ2VIZWlnaHQ6ICAgICAgICAg
IHJldHVybiBOdW1iZXIoaW1hZ2UuaGVpZ2h0KHRydWUpKTsKKyAgICAgICAgY2FzZSBJbWFnZUhz
cGFjZTogICAgICAgICAgcmV0dXJuIE51bWJlcihpbWFnZS5oc3BhY2UoKSk7CisgICAgICAgIGNh
c2UgSW1hZ2VJc01hcDogICAgICAgICAgIHJldHVybiBCb29sZWFuKGltYWdlLmlzTWFwKCkpOwor
ICAgICAgICBjYXNlIEltYWdlTG9uZ0Rlc2M6ICAgICAgICByZXR1cm4gU3RyaW5nKGltYWdlLmxv
bmdEZXNjKCkpOworICAgICAgICBjYXNlIEltYWdlU3JjOiAgICAgICAgICAgICByZXR1cm4gU3Ry
aW5nKGltYWdlLnNyYygpKTsKKyAgICAgICAgY2FzZSBJbWFnZVVzZU1hcDogICAgICAgICAgcmV0
dXJuIFN0cmluZyhpbWFnZS51c2VNYXAoKSk7CisgICAgICAgIGNhc2UgSW1hZ2VWc3BhY2U6ICAg
ICAgICAgIHJldHVybiBOdW1iZXIoaW1hZ2UudnNwYWNlKCkpOworICAgICAgICBjYXNlIEltYWdl
V2lkdGg6ICAgICAgICAgICByZXR1cm4gTnVtYmVyKGltYWdlLndpZHRoKHRydWUpKTsKKyAgICAg
ICAgY2FzZSBJbWFnZVg6ICAgICAgICAgICAgICAgcmV0dXJuIE51bWJlcihpbWFnZS54KCkpOwor
ICAgICAgICBjYXNlIEltYWdlWTogICAgICAgICAgICAgICByZXR1cm4gTnVtYmVyKGltYWdlLnko
KSk7CisgICAgfQorICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1l
bnQ6Om9iamVjdEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAg
ICBIVE1MT2JqZWN0RWxlbWVudEltcGwmIG9iamVjdCA9ICpzdGF0aWNfY2FzdDxIVE1MT2JqZWN0
RWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2Fz
ZSBPYmplY3RGb3JtOiAgICAgICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsb2JqZWN0LmZv
cm0oKSk7IC8vIHR5cGUgSFRNTEZvcm1FbGVtZW50CisgICAgICAgIGNhc2UgT2JqZWN0Q29kZTog
ICAgICAgICAgICByZXR1cm4gU3RyaW5nKG9iamVjdC5jb2RlKCkpOworICAgICAgICBjYXNlIE9i
amVjdEFsaWduOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3QuYWxpZ24oKSk7CisgICAg
ICAgIGNhc2UgT2JqZWN0QXJjaGl2ZTogICAgICAgICByZXR1cm4gU3RyaW5nKG9iamVjdC5hcmNo
aXZlKCkpOworICAgICAgICBjYXNlIE9iamVjdEJvcmRlcjogICAgICAgICAgcmV0dXJuIFN0cmlu
ZyhvYmplY3QuYm9yZGVyKCkpOworICAgICAgICBjYXNlIE9iamVjdENvZGVCYXNlOiAgICAgICAg
cmV0dXJuIFN0cmluZyhvYmplY3QuY29kZUJhc2UoKSk7CisgICAgICAgIGNhc2UgT2JqZWN0Q29k
ZVR5cGU6ICAgICAgICByZXR1cm4gU3RyaW5nKG9iamVjdC5jb2RlVHlwZSgpKTsKKyAgICAgICAg
Y2FzZSBPYmplY3RDb250ZW50RG9jdW1lbnQ6IHJldHVybiBjaGVja05vZGVTZWN1cml0eShleGVj
LG9iamVjdC5jb250ZW50RG9jdW1lbnQoKSkgPyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnZXRET01Ob2RlKGV4ZWMsIG9iamVjdC5jb250ZW50RG9jdW1lbnQo
KSkgOiBVbmRlZmluZWQoKTsKKyAgICAgICAgY2FzZSBPYmplY3REYXRhOiAgICAgICAgICAgIHJl
dHVybiBTdHJpbmcob2JqZWN0LmRhdGEoKSk7CisgICAgICAgIGNhc2UgT2JqZWN0RGVjbGFyZTog
ICAgICAgICByZXR1cm4gQm9vbGVhbihvYmplY3QuZGVjbGFyZSgpKTsKKyAgICAgICAgY2FzZSBP
YmplY3RIZWlnaHQ6ICAgICAgICAgIHJldHVybiBTdHJpbmcob2JqZWN0LmhlaWdodCgpKTsKKyAg
ICAgICAgY2FzZSBPYmplY3RIc3BhY2U6ICAgICAgICAgIHJldHVybiBTdHJpbmcob2JqZWN0Lmhz
cGFjZSgpKTsKKyAgICAgICAgY2FzZSBPYmplY3ROYW1lOiAgICAgICAgICAgIHJldHVybiBTdHJp
bmcob2JqZWN0Lm5hbWUoKSk7CisgICAgICAgIGNhc2UgT2JqZWN0U3RhbmRieTogICAgICAgICBy
ZXR1cm4gU3RyaW5nKG9iamVjdC5zdGFuZGJ5KCkpOworICAgICAgICBjYXNlIE9iamVjdFRhYklu
ZGV4OiAgICAgICAgcmV0dXJuIE51bWJlcihvYmplY3QudGFiSW5kZXgoKSk7CisgICAgICAgIGNh
c2UgT2JqZWN0VHlwZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKG9iamVjdC50eXBlKCkpOwor
ICAgICAgICBjYXNlIE9iamVjdFVzZU1hcDogICAgICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3Qu
dXNlTWFwKCkpOworICAgICAgICBjYXNlIE9iamVjdFZzcGFjZTogICAgICAgICAgcmV0dXJuIFN0
cmluZyhvYmplY3QudnNwYWNlKCkpOworICAgICAgICBjYXNlIE9iamVjdFdpZHRoOiAgICAgICAg
ICAgcmV0dXJuIFN0cmluZyhvYmplY3Qud2lkdGgoKSk7CisgICAgfQorICAgIHJldHVybiBVbmRl
ZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OnBhcmFtR2V0dGVyKEV4ZWNTdGF0ZSog
ZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxQYXJhbUVsZW1lbnRJbXBsJiBwYXJh
bSA9ICpzdGF0aWNfY2FzdDxIVE1MUGFyYW1FbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dp
dGNoICh0b2tlbikgeworICAgICAgICBjYXNlIFBhcmFtTmFtZTogICAgICAgICAgICByZXR1cm4g
U3RyaW5nKHBhcmFtLm5hbWUoKSk7CisgICAgICAgIGNhc2UgUGFyYW1UeXBlOiAgICAgICAgICAg
IHJldHVybiBTdHJpbmcocGFyYW0udHlwZSgpKTsKKyAgICAgICAgY2FzZSBQYXJhbVZhbHVlOiAg
ICAgICAgICAgcmV0dXJuIFN0cmluZyhwYXJhbS52YWx1ZSgpKTsKKyAgICAgICAgY2FzZSBQYXJh
bVZhbHVlVHlwZTogICAgICAgcmV0dXJuIFN0cmluZyhwYXJhbS52YWx1ZVR5cGUoKSk7CisgICAg
fQorICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OmFwcGxl
dEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MQXBw
bGV0RWxlbWVudEltcGwmIGFwcGxldCA9ICpzdGF0aWNfY2FzdDxIVE1MQXBwbGV0RWxlbWVudElt
cGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBBcHBsZXRB
bGlnbjogICAgICAgICAgIHJldHVybiBTdHJpbmcoYXBwbGV0LmFsaWduKCkpOworICAgICAgICBj
YXNlIEFwcGxldEFsdDogICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhhcHBsZXQuYWx0KCkpOwor
ICAgICAgICBjYXNlIEFwcGxldEFyY2hpdmU6ICAgICAgICAgcmV0dXJuIFN0cmluZyhhcHBsZXQu
YXJjaGl2ZSgpKTsKKyAgICAgICAgY2FzZSBBcHBsZXRDb2RlOiAgICAgICAgICAgIHJldHVybiBT
dHJpbmcoYXBwbGV0LmNvZGUoKSk7CisgICAgICAgIGNhc2UgQXBwbGV0Q29kZUJhc2U6ICAgICAg
ICByZXR1cm4gU3RyaW5nKGFwcGxldC5jb2RlQmFzZSgpKTsKKyAgICAgICAgY2FzZSBBcHBsZXRI
ZWlnaHQ6ICAgICAgICAgIHJldHVybiBTdHJpbmcoYXBwbGV0LmhlaWdodCgpKTsKKyAgICAgICAg
Y2FzZSBBcHBsZXRIc3BhY2U6ICAgICAgICAgIHJldHVybiBTdHJpbmcoYXBwbGV0LmhzcGFjZSgp
KTsKKyAgICAgICAgY2FzZSBBcHBsZXROYW1lOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYXBw
bGV0Lm5hbWUoKSk7CisgICAgICAgIGNhc2UgQXBwbGV0T2JqZWN0OiAgICAgICAgICByZXR1cm4g
U3RyaW5nKGFwcGxldC5vYmplY3QoKSk7CisgICAgICAgIGNhc2UgQXBwbGV0VnNwYWNlOiAgICAg
ICAgICByZXR1cm4gU3RyaW5nKGFwcGxldC52c3BhY2UoKSk7CisgICAgICAgIGNhc2UgQXBwbGV0
V2lkdGg6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGFwcGxldC53aWR0aCgpKTsKKyAgICB9Cisg
ICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6bWFwR2V0dGVy
KEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxNYXBFbGVtZW50
SW1wbCYgbWFwID0gKnN0YXRpY19jYXN0PEhUTUxNYXBFbGVtZW50SW1wbCo+KGltcGwoKSk7Cisg
ICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNlIE1hcEFyZWFzOiAgICAgICAgICAgcmV0
dXJuIGdldEhUTUxDb2xsZWN0aW9uKGV4ZWMsIG1hcC5hcmVhcygpLmdldCgpKTsgLy8gdHlwZSBI
VE1MQ29sbGVjdGlvbgorICAgICAgICBjYXNlIE1hcE5hbWU6ICAgICAgICAgICAgcmV0dXJuIFN0
cmluZyhtYXAubmFtZSgpKTsKKyAgICB9CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitW
YWx1ZSBIVE1MRWxlbWVudDo6YXJlYUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikg
Y29uc3QKK3sKKyAgICBIVE1MQXJlYUVsZW1lbnRJbXBsJiBhcmVhID0gKnN0YXRpY19jYXN0PEhU
TUxBcmVhRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAg
ICAgY2FzZSBBcmVhQWNjZXNzS2V5OiAgICAgICByZXR1cm4gU3RyaW5nKGFyZWEuYWNjZXNzS2V5
KCkpOworICAgICAgICBjYXNlIEFyZWFBbHQ6ICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYXJl
YS5hbHQoKSk7CisgICAgICAgIGNhc2UgQXJlYUNvb3JkczogICAgICAgICAgcmV0dXJuIFN0cmlu
ZyhhcmVhLmNvb3JkcygpKTsKKyAgICAgICAgY2FzZSBBcmVhSHJlZjogICAgICAgICAgICByZXR1
cm4gU3RyaW5nKGFyZWEuaHJlZigpKTsKKyAgICAgICAgY2FzZSBBcmVhSGFzaDogICAgICAgICAg
ICByZXR1cm4gU3RyaW5nKCcjJytLVVJMKGFyZWEuaHJlZigpLnN0cmluZygpKS5yZWYoKSk7Cisg
ICAgICAgIGNhc2UgQXJlYUhvc3Q6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhLVVJMKGFyZWEu
aHJlZigpLnN0cmluZygpKS5ob3N0KCkpOworICAgICAgICBjYXNlIEFyZWFIb3N0TmFtZTogewor
ICAgICAgICAgICAgS1VSTCB1cmwoYXJlYS5ocmVmKCkuc3RyaW5nKCkpOworICAgICAgICAgICAg
a2REZWJ1Zyg2MDcwKSA8PCAibGluazo6aG9zdG5hbWUgdXNlczoiIDw8dXJsLnVybCgpPDxlbmRs
OworICAgICAgICAgICAgaWYgKHVybC5wb3J0KCk9PTApCisgICAgICAgICAgICAgICAgcmV0dXJu
IFN0cmluZyh1cmwuaG9zdCgpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKHVybC5ob3N0KCkgKyAiOiIgKyBRU3RyaW5nOjpudW1iZXIodXJsLnBvcnQo
KSkpOworICAgICAgICB9CisgICAgICAgIGNhc2UgQXJlYVBhdGhOYW1lOiAgICAgICAgcmV0dXJu
IFN0cmluZyhLVVJMKGFyZWEuaHJlZigpLnN0cmluZygpKS5wYXRoKCkpOworICAgICAgICBjYXNl
IEFyZWFQb3J0OiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoUVN0cmluZzo6bnVtYmVyKEtVUkwo
YXJlYS5ocmVmKCkuc3RyaW5nKCkpLnBvcnQoKSkpOworICAgICAgICBjYXNlIEFyZWFQcm90b2Nv
bDogICAgICAgIHJldHVybiBTdHJpbmcoS1VSTChhcmVhLmhyZWYoKS5zdHJpbmcoKSkucHJvdG9j
b2woKSsiOiIpOworICAgICAgICBjYXNlIEFyZWFTZWFyY2g6ICAgICAgICAgIHJldHVybiBTdHJp
bmcoS1VSTChhcmVhLmhyZWYoKS5zdHJpbmcoKSkucXVlcnkoKSk7CisgICAgICAgIGNhc2UgQXJl
YU5vSHJlZjogICAgICAgICAgcmV0dXJuIEJvb2xlYW4oYXJlYS5ub0hyZWYoKSk7CisgICAgICAg
IGNhc2UgQXJlYVNoYXBlOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhhcmVhLnNoYXBlKCkpOwor
ICAgICAgICBjYXNlIEFyZWFUYWJJbmRleDogICAgICAgIHJldHVybiBOdW1iZXIoYXJlYS50YWJJ
bmRleCgpKTsKKyAgICAgICAgY2FzZSBBcmVhVGFyZ2V0OiAgICAgICAgICByZXR1cm4gU3RyaW5n
KGFyZWEudGFyZ2V0KCkpOworICAgIH0KKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1Zh
bHVlIEhUTUxFbGVtZW50OjpzY3JpcHRHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4p
IGNvbnN0Cit7CisgICAgSFRNTFNjcmlwdEVsZW1lbnRJbXBsJiBzY3JpcHQgPSAqc3RhdGljX2Nh
c3Q8SFRNTFNjcmlwdEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7
CisgICAgICAgIGNhc2UgU2NyaXB0VGV4dDogICAgICAgICAgICByZXR1cm4gU3RyaW5nKHNjcmlw
dC50ZXh0KCkpOworICAgICAgICBjYXNlIFNjcmlwdEh0bWxGb3I6ICAgICAgICAgcmV0dXJuIFN0
cmluZyhzY3JpcHQuaHRtbEZvcigpKTsKKyAgICAgICAgY2FzZSBTY3JpcHRFdmVudDogICAgICAg
ICAgIHJldHVybiBTdHJpbmcoc2NyaXB0LmV2ZW50KCkpOworICAgICAgICBjYXNlIFNjcmlwdENo
YXJzZXQ6ICAgICAgICAgcmV0dXJuIFN0cmluZyhzY3JpcHQuY2hhcnNldCgpKTsKKyAgICAgICAg
Y2FzZSBTY3JpcHREZWZlcjogICAgICAgICAgIHJldHVybiBCb29sZWFuKHNjcmlwdC5kZWZlcigp
KTsKKyAgICAgICAgY2FzZSBTY3JpcHRTcmM6ICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoc2Ny
aXB0LnNyYygpKTsKKyAgICAgICAgY2FzZSBTY3JpcHRUeXBlOiAgICAgICAgICAgIHJldHVybiBT
dHJpbmcoc2NyaXB0LnR5cGUoKSk7CisgICAgfQorICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30K
KworVmFsdWUgSFRNTEVsZW1lbnQ6OnRhYmxlR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRv
a2VuKSBjb25zdAoreworICAgIEhUTUxUYWJsZUVsZW1lbnRJbXBsJiB0YWJsZSA9ICpzdGF0aWNf
Y2FzdDxIVE1MVGFibGVFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikg
eworICAgICAgICBjYXNlIFRhYmxlQ2FwdGlvbjogICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShl
eGVjLHRhYmxlLmNhcHRpb24oKSk7IC8vIHR5cGUgSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQKKyAg
ICAgICAgY2FzZSBUYWJsZVRIZWFkOiAgICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyx0
YWJsZS50SGVhZCgpKTsgLy8gdHlwZSBIVE1MVGFibGVTZWN0aW9uRWxlbWVudAorICAgICAgICBj
YXNlIFRhYmxlVEZvb3Q6ICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLHRhYmxlLnRG
b290KCkpOyAvLyB0eXBlIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50CisgICAgICAgIGNhc2UgVGFi
bGVSb3dzOiAgICAgICAgICAgIHJldHVybiBnZXRIVE1MQ29sbGVjdGlvbihleGVjLCB0YWJsZS5y
b3dzKCkuZ2V0KCkpOyAvLyB0eXBlIEhUTUxDb2xsZWN0aW9uCisgICAgICAgIGNhc2UgVGFibGVU
Qm9kaWVzOiAgICAgICAgIHJldHVybiBnZXRIVE1MQ29sbGVjdGlvbihleGVjLCB0YWJsZS50Qm9k
aWVzKCkuZ2V0KCkpOyAvLyB0eXBlIEhUTUxDb2xsZWN0aW9uCisgICAgICAgIGNhc2UgVGFibGVB
bGlnbjogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGUuYWxpZ24oKSk7CisgICAgICAgIGNh
c2UgVGFibGVCZ0NvbG9yOiAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGUuYmdDb2xvcigpKTsK
KyAgICAgICAgY2FzZSBUYWJsZUJvcmRlcjogICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZS5i
b3JkZXIoKSk7CisgICAgICAgIGNhc2UgVGFibGVDZWxsUGFkZGluZzogICAgIHJldHVybiBTdHJp
bmcodGFibGUuY2VsbFBhZGRpbmcoKSk7CisgICAgICAgIGNhc2UgVGFibGVDZWxsU3BhY2luZzog
ICAgIHJldHVybiBTdHJpbmcodGFibGUuY2VsbFNwYWNpbmcoKSk7CisgICAgICAgIGNhc2UgVGFi
bGVGcmFtZTogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGUuZnJhbWUoKSk7CisgICAgICAg
IGNhc2UgVGFibGVSdWxlczogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGUucnVsZXMoKSk7
CisgICAgICAgIGNhc2UgVGFibGVTdW1tYXJ5OiAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGUu
c3VtbWFyeSgpKTsKKyAgICAgICAgY2FzZSBUYWJsZVdpZHRoOiAgICAgICAgICAgcmV0dXJuIFN0
cmluZyh0YWJsZS53aWR0aCgpKTsKKyAgICB9CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQor
CitWYWx1ZSBIVE1MRWxlbWVudDo6dGFibGVDYXB0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywg
aW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxUYWJsZUNhcHRpb25FbGVtZW50SW1wbCYgdGFi
bGVDYXB0aW9uID0gKnN0YXRpY19jYXN0PEhUTUxUYWJsZUNhcHRpb25FbGVtZW50SW1wbCo+KGlt
cGwoKSk7CisgICAgaWYgKHRva2VuID09IFRhYmxlQ2FwdGlvbkFsaWduKQorICAgICAgICByZXR1
cm4gU3RyaW5nKHRhYmxlQ2FwdGlvbi5hbGlnbigpKTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7
Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50Ojp0YWJsZUNvbEdldHRlcihFeGVjU3RhdGUqIGV4ZWMs
IGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MVGFibGVDb2xFbGVtZW50SW1wbCYgdGFibGVD
b2wgPSAqc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ29sRWxlbWVudEltcGwqPihpbXBsKCkpOworICAg
IHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBUYWJsZUNvbEFsaWduOiAgICAgICAgICAg
cmV0dXJuIFN0cmluZyh0YWJsZUNvbC5hbGlnbigpKTsKKyAgICAgICAgY2FzZSBUYWJsZUNvbENo
OiAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNvbC5jaCgpKTsKKyAgICAgICAgY2Fz
ZSBUYWJsZUNvbENoT2ZmOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNvbC5jaE9mZigp
KTsKKyAgICAgICAgY2FzZSBUYWJsZUNvbFNwYW46ICAgICAgICAgICAgcmV0dXJuIE51bWJlcih0
YWJsZUNvbC5zcGFuKCkpOworICAgICAgICBjYXNlIFRhYmxlQ29sVkFsaWduOiAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKHRhYmxlQ29sLnZBbGlnbigpKTsKKyAgICAgICAgY2FzZSBUYWJsZUNvbFdp
ZHRoOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNvbC53aWR0aCgpKTsKKyAgICB9Cisg
ICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6dGFibGVTZWN0
aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxU
YWJsZVNlY3Rpb25FbGVtZW50SW1wbCYgdGFibGVTZWN0aW9uID0gKnN0YXRpY19jYXN0PEhUTUxU
YWJsZVNlY3Rpb25FbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgewor
ICAgICAgICBjYXNlIFRhYmxlU2VjdGlvbkFsaWduOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0
YWJsZVNlY3Rpb24uYWxpZ24oKSk7CisgICAgICAgIGNhc2UgVGFibGVTZWN0aW9uQ2g6ICAgICAg
ICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlU2VjdGlvbi5jaCgpKTsKKyAgICAgICAgY2FzZSBU
YWJsZVNlY3Rpb25DaE9mZjogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVTZWN0aW9uLmNo
T2ZmKCkpOworICAgICAgICBjYXNlIFRhYmxlU2VjdGlvblZBbGlnbjogICAgICAgICAgcmV0dXJu
IFN0cmluZyh0YWJsZVNlY3Rpb24udkFsaWduKCkpOworICAgICAgICBjYXNlIFRhYmxlU2VjdGlv
blJvd3M6ICAgICAgICAgICAgcmV0dXJuIGdldEhUTUxDb2xsZWN0aW9uKGV4ZWMsIHRhYmxlU2Vj
dGlvbi5yb3dzKCkuZ2V0KCkpOyAvLyB0eXBlIEhUTUxDb2xsZWN0aW9uCisgICAgfQorICAgIHJl
dHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OnRhYmxlUm93R2V0dGVy
KEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxUYWJsZVJvd0Vs
ZW1lbnRJbXBsJiB0YWJsZVJvdyA9ICpzdGF0aWNfY2FzdDxIVE1MVGFibGVSb3dFbGVtZW50SW1w
bCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNlIFRhYmxlUm93
Um93SW5kZXg6ICAgICAgICByZXR1cm4gTnVtYmVyKHRhYmxlUm93LnJvd0luZGV4KCkpOworICAg
ICAgICBjYXNlIFRhYmxlUm93U2VjdGlvblJvd0luZGV4OiByZXR1cm4gTnVtYmVyKHRhYmxlUm93
LnNlY3Rpb25Sb3dJbmRleCgpKTsKKyAgICAgICAgY2FzZSBUYWJsZVJvd0NlbGxzOiAgICAgICAg
ICAgcmV0dXJuIGdldEhUTUxDb2xsZWN0aW9uKGV4ZWMsIHRhYmxlUm93LmNlbGxzKCkuZ2V0KCkp
OyAvLyB0eXBlIEhUTUxDb2xsZWN0aW9uCisgICAgICAgIGNhc2UgVGFibGVSb3dBbGlnbjogICAg
ICAgICAgIHJldHVybiBTdHJpbmcodGFibGVSb3cuYWxpZ24oKSk7CisgICAgICAgIGNhc2UgVGFi
bGVSb3dCZ0NvbG9yOiAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVSb3cuYmdDb2xvcigpKTsK
KyAgICAgICAgY2FzZSBUYWJsZVJvd0NoOiAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJs
ZVJvdy5jaCgpKTsKKyAgICAgICAgY2FzZSBUYWJsZVJvd0NoT2ZmOiAgICAgICAgICAgcmV0dXJu
IFN0cmluZyh0YWJsZVJvdy5jaE9mZigpKTsKKyAgICAgICAgY2FzZSBUYWJsZVJvd1ZBbGlnbjog
ICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZVJvdy52QWxpZ24oKSk7CisgICAgfQorICAgIHJl
dHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OnRhYmxlQ2VsbEdldHRl
cihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MVGFibGVDZWxs
RWxlbWVudEltcGwmIHRhYmxlQ2VsbCA9ICpzdGF0aWNfY2FzdDxIVE1MVGFibGVDZWxsRWxlbWVu
dEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBUYWJs
ZUNlbGxDZWxsSW5kZXg6ICAgICAgIHJldHVybiBOdW1iZXIodGFibGVDZWxsLmNlbGxJbmRleCgp
KTsKKyAgICAgICAgY2FzZSBUYWJsZUNlbGxBYmJyOiAgICAgICAgICAgIHJldHVybiBTdHJpbmco
dGFibGVDZWxsLmFiYnIoKSk7CisgICAgICAgIGNhc2UgVGFibGVDZWxsQWxpZ246ICAgICAgICAg
ICByZXR1cm4gU3RyaW5nKHRhYmxlQ2VsbC5hbGlnbigpKTsKKyAgICAgICAgY2FzZSBUYWJsZUNl
bGxBeGlzOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVDZWxsLmF4aXMoKSk7CisgICAg
ICAgIGNhc2UgVGFibGVDZWxsQmdDb2xvcjogICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ2Vs
bC5iZ0NvbG9yKCkpOworICAgICAgICBjYXNlIFRhYmxlQ2VsbENoOiAgICAgICAgICAgICAgcmV0
dXJuIFN0cmluZyh0YWJsZUNlbGwuY2goKSk7CisgICAgICAgIGNhc2UgVGFibGVDZWxsQ2hPZmY6
ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ2VsbC5jaE9mZigpKTsKKyAgICAgICAgY2Fz
ZSBUYWJsZUNlbGxDb2xTcGFuOiAgICAgICAgIHJldHVybiBOdW1iZXIodGFibGVDZWxsLmNvbFNw
YW4oKSk7CisgICAgICAgIGNhc2UgVGFibGVDZWxsSGVhZGVyczogICAgICAgICByZXR1cm4gU3Ry
aW5nKHRhYmxlQ2VsbC5oZWFkZXJzKCkpOworICAgICAgICBjYXNlIFRhYmxlQ2VsbEhlaWdodDog
ICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNlbGwuaGVpZ2h0KCkpOworICAgICAgICBjYXNl
IFRhYmxlQ2VsbE5vV3JhcDogICAgICAgICAgcmV0dXJuIEJvb2xlYW4odGFibGVDZWxsLm5vV3Jh
cCgpKTsKKyAgICAgICAgY2FzZSBUYWJsZUNlbGxSb3dTcGFuOiAgICAgICAgIHJldHVybiBOdW1i
ZXIodGFibGVDZWxsLnJvd1NwYW4oKSk7CisgICAgICAgIGNhc2UgVGFibGVDZWxsU2NvcGU6ICAg
ICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ2VsbC5zY29wZSgpKTsKKyAgICAgICAgY2FzZSBU
YWJsZUNlbGxWQWxpZ246ICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVDZWxsLnZBbGlnbigp
KTsKKyAgICAgICAgY2FzZSBUYWJsZUNlbGxXaWR0aDogICAgICAgICAgIHJldHVybiBTdHJpbmco
dGFibGVDZWxsLndpZHRoKCkpOworICAgIH0KKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisK
K1ZhbHVlIEhUTUxFbGVtZW50OjpmcmFtZVNldEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0
b2tlbikgY29uc3QKK3sKKyAgICBIVE1MRnJhbWVTZXRFbGVtZW50SW1wbCYgZnJhbWVTZXQgPSAq
c3RhdGljX2Nhc3Q8SFRNTEZyYW1lU2V0RWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRj
aCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBGcmFtZVNldENvbHM6ICAgICAgICAgICAgcmV0dXJu
IFN0cmluZyhmcmFtZVNldC5jb2xzKCkpOworICAgICAgICBjYXNlIEZyYW1lU2V0Um93czogICAg
ICAgICAgICByZXR1cm4gU3RyaW5nKGZyYW1lU2V0LnJvd3MoKSk7CisgICAgfQorICAgIHJldHVy
biBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OmZyYW1lR2V0dGVyKEV4ZWNT
dGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxGcmFtZUVsZW1lbnRJbXBs
JiBmcmFtZUVsZW1lbnQgPSAqc3RhdGljX2Nhc3Q8SFRNTEZyYW1lRWxlbWVudEltcGwqPihpbXBs
KCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBGcmFtZUNvbnRlbnREb2N1
bWVudDogcmV0dXJuIGNoZWNrTm9kZVNlY3VyaXR5KGV4ZWMsZnJhbWVFbGVtZW50LmNvbnRlbnRE
b2N1bWVudCgpKSA/IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z2V0RE9NTm9kZShleGVjLCBmcmFtZUVsZW1lbnQuY29udGVudERvY3VtZW50KCkpIDogVW5kZWZp
bmVkKCk7CisgICAgICAgIGNhc2UgRnJhbWVDb250ZW50V2luZG93OiAgIHJldHVybiBjaGVja05v
ZGVTZWN1cml0eShleGVjLGZyYW1lRWxlbWVudC5jb250ZW50RG9jdW1lbnQoKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFdpbmRvdzo6cmV0cmlldmUoZnJhbWVF
bGVtZW50LmNvbnRlbnRQYXJ0KCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOiBVbmRlZmluZWQoKTsKKyAgICAgICAgY2FzZSBGcmFtZUZyYW1lQm9yZGVyOiAgICAg
cmV0dXJuIFN0cmluZyhmcmFtZUVsZW1lbnQuZnJhbWVCb3JkZXIoKSk7CisgICAgICAgIGNhc2Ug
RnJhbWVMb25nRGVzYzogICAgICAgIHJldHVybiBTdHJpbmcoZnJhbWVFbGVtZW50LmxvbmdEZXNj
KCkpOworICAgICAgICBjYXNlIEZyYW1lTWFyZ2luSGVpZ2h0OiAgICByZXR1cm4gU3RyaW5nKGZy
YW1lRWxlbWVudC5tYXJnaW5IZWlnaHQoKSk7CisgICAgICAgIGNhc2UgRnJhbWVNYXJnaW5XaWR0
aDogICAgIHJldHVybiBTdHJpbmcoZnJhbWVFbGVtZW50Lm1hcmdpbldpZHRoKCkpOworICAgICAg
ICBjYXNlIEZyYW1lTmFtZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGZyYW1lRWxlbWVudC5u
YW1lKCkpOworICAgICAgICBjYXNlIEZyYW1lTm9SZXNpemU6ICAgICAgICByZXR1cm4gQm9vbGVh
bihmcmFtZUVsZW1lbnQubm9SZXNpemUoKSk7CisgICAgICAgIGNhc2UgRnJhbWVTY3JvbGxpbmc6
ICAgICAgIHJldHVybiBTdHJpbmcoZnJhbWVFbGVtZW50LnNjcm9sbGluZygpKTsKKyAgICAgICAg
Y2FzZSBGcmFtZVNyYzoKKyAgICAgICAgY2FzZSBGcmFtZUxvY2F0aW9uOiAgICAgICAgcmV0dXJu
IFN0cmluZyhmcmFtZUVsZW1lbnQuc3JjKCkpOworICAgIH0KKyAgICByZXR1cm4gVW5kZWZpbmVk
KCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50OjppRnJhbWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVj
LCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTElGcmFtZUVsZW1lbnRJbXBsJiBpRnJhbWUg
PSAqc3RhdGljX2Nhc3Q8SFRNTElGcmFtZUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0
Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgSUZyYW1lQWxpZ246ICAgICAgICAgICAgICAgIHJl
dHVybiBTdHJpbmcoaUZyYW1lLmFsaWduKCkpOworICAgICAgICAgIC8vICMjIyBzZWN1cml0eSBj
aGVjayA/CisgICAgICAgIGNhc2UgSUZyYW1lRG9jdW1lbnQ6IC8vIG5vbi1zdGFuZGFyZCwgbWFw
cGVkIHRvIGNvbnRlbnREb2N1bWVudAorICAgICAgICBjYXNlIElGcmFtZUNvbnRlbnREb2N1bWVu
dDogcmV0dXJuIGNoZWNrTm9kZVNlY3VyaXR5KGV4ZWMsaUZyYW1lLmNvbnRlbnREb2N1bWVudCgp
KSA/IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRET01Ob2RlKGV4
ZWMsIGlGcmFtZS5jb250ZW50RG9jdW1lbnQoKSkgOiBVbmRlZmluZWQoKTsKKyAgICAgICAgY2Fz
ZSBJRnJhbWVDb250ZW50V2luZG93OglyZXR1cm4gY2hlY2tOb2RlU2VjdXJpdHkoZXhlYyxpRnJh
bWUuY29udGVudERvY3VtZW50KCkpIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgID8gV2luZG93OjpyZXRyaWV2ZShpRnJhbWUuY29udGVudFBhcnQoKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFVuZGVmaW5lZCgpOworICAgICAgICBj
YXNlIElGcmFtZUZyYW1lQm9yZGVyOiAgICAgcmV0dXJuIFN0cmluZyhpRnJhbWUuZnJhbWVCb3Jk
ZXIoKSk7CisgICAgICAgIGNhc2UgSUZyYW1lSGVpZ2h0OiAgICAgICAgICByZXR1cm4gU3RyaW5n
KGlGcmFtZS5oZWlnaHQoKSk7CisgICAgICAgIGNhc2UgSUZyYW1lTG9uZ0Rlc2M6ICAgICAgICBy
ZXR1cm4gU3RyaW5nKGlGcmFtZS5sb25nRGVzYygpKTsKKyAgICAgICAgY2FzZSBJRnJhbWVNYXJn
aW5IZWlnaHQ6ICAgIHJldHVybiBTdHJpbmcoaUZyYW1lLm1hcmdpbkhlaWdodCgpKTsKKyAgICAg
ICAgY2FzZSBJRnJhbWVNYXJnaW5XaWR0aDogICAgIHJldHVybiBTdHJpbmcoaUZyYW1lLm1hcmdp
bldpZHRoKCkpOworICAgICAgICBjYXNlIElGcmFtZU5hbWU6ICAgICAgICAgICAgcmV0dXJuIFN0
cmluZyhpRnJhbWUubmFtZSgpKTsKKyAgICAgICAgY2FzZSBJRnJhbWVTY3JvbGxpbmc6ICAgICAg
IHJldHVybiBTdHJpbmcoaUZyYW1lLnNjcm9sbGluZygpKTsKKyAgICAgICAgY2FzZSBJRnJhbWVT
cmM6ICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoaUZyYW1lLnNyYygpKTsKKyAgICAgICAgY2Fz
ZSBJRnJhbWVXaWR0aDogICAgICAgICAgIHJldHVybiBTdHJpbmcoaUZyYW1lLndpZHRoKCkpOwor
ICAgIH0KKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50Ojpt
YXJxdWVlR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAgIC8v
IEZJWE1FOiBGaW5kIG91dCB3aGF0IFdpbklFIGV4cG9zZXMgYXMgcHJvcGVydGllcyBhbmQgaW1w
bGVtZW50IHRoaXMuCisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxl
bWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QK
K3sKKyAgICAvLyBDaGVjayBvdXIgc2V0IG9mIGdlbmVyaWMgcHJvcGVydGllcyBmaXJzdC4KKyAg
ICBIVE1MRWxlbWVudEltcGwgJmVsZW1lbnQgPSAqc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBs
ICo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNlIEVsZW1lbnRJ
ZDoKKyAgICAgICAgLy8gaWh0LmNvbSByZWxpZXMgb24gdGhpcyB2YWx1ZSBiZWluZyAiIiB3aGVu
IG5vIGlkIGlzIHByZXNlbnQuICBPdGhlciBicm93c2VycyBkbyB0aGlzIGFzIHdlbGwuCisgICAg
ICAgIC8vIFNvIHdlIHVzZSBTdHJpbmcoKSBpbnN0ZWFkIG9mIFN0cmluZygpIGhlcmUuCisgICAg
ICAgIHJldHVybiBTdHJpbmcoZWxlbWVudC5pZCgpKTsKKyAgICAgICAgY2FzZSBFbGVtZW50VGl0
bGU6CisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGVsZW1lbnQudGl0bGUoKSk7CisgICAgICAg
IGNhc2UgRWxlbWVudExhbmc6CisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGVsZW1lbnQubGFu
ZygpKTsKKyAgICAgICAgY2FzZSBFbGVtZW50RGlyOgorICAgICAgICAgICAgcmV0dXJuIFN0cmlu
ZyhlbGVtZW50LmRpcigpKTsKKyAgICAgICAgY2FzZSBFbGVtZW50Q2xhc3NOYW1lOgorICAgICAg
ICAgICAgcmV0dXJuIFN0cmluZyhlbGVtZW50LmNsYXNzTmFtZSgpKTsKKyAgICAgICAgY2FzZSBF
bGVtZW50SW5uZXJIVE1MOgorICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhlbGVtZW50LmlubmVy
SFRNTCgpKTsKKyAgICAgICAgY2FzZSBFbGVtZW50SW5uZXJUZXh0OgorICAgICAgICAgICAgaWYg
KERvY3VtZW50SW1wbCogZG9jID0gaW1wbCgpLT5nZXREb2N1bWVudCgpKQorICAgICAgICAgICAg
ICAgIGRvYy0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CisgICAgICAg
ICAgICByZXR1cm4gU3RyaW5nKGVsZW1lbnQuaW5uZXJUZXh0KCkpOworICAgICAgICBjYXNlIEVs
ZW1lbnRPdXRlckhUTUw6CisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGVsZW1lbnQub3V0ZXJI
VE1MKCkpOworICAgICAgICBjYXNlIEVsZW1lbnRPdXRlclRleHQ6CisgICAgICAgICAgICByZXR1
cm4gU3RyaW5nKGVsZW1lbnQub3V0ZXJUZXh0KCkpOworICAgICAgICBjYXNlIEVsZW1lbnREb2N1
bWVudDoKKyAgICAgICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsZWxlbWVudC5vd25lckRv
Y3VtZW50KCkpOworICAgICAgICBjYXNlIEVsZW1lbnRDaGlsZHJlbjoKKyAgICAgICAgICAgIHJl
dHVybiBnZXRIVE1MQ29sbGVjdGlvbihleGVjLCBlbGVtZW50LmNoaWxkcmVuKCkuZ2V0KCkpOwor
ICAgICAgICBjYXNlIEVsZW1lbnRDb250ZW50RWRpdGFibGU6CisgICAgICAgICAgICByZXR1cm4g
U3RyaW5nKGVsZW1lbnQuY29udGVudEVkaXRhYmxlKCkpOworICAgICAgICBjYXNlIEVsZW1lbnRJ
c0NvbnRlbnRFZGl0YWJsZToKKyAgICAgICAgICAgIHJldHVybiBCb29sZWFuKGVsZW1lbnQuaXND
b250ZW50RWRpdGFibGUoKSk7CisgICAgfQorCisgICAgLy8gTm93IGNoZWNrIHRoZSBwcm9wZXJ0
aWVzIHNwZWNpZmljIHRvIG91ciBlbGVtZW50IHR5cGUuCisgICAgY29uc3QgR2V0U2V0SW5mbyog
aW5mbyA9IGdldFNldEluZm8oKTsKKyAgICBpZiAoaW5mbyAmJiBpbmZvLT5tX2dldHRlcikKKyAg
ICAgICAgcmV0dXJuICh0aGlzLT4qKGluZm8tPm1fZ2V0dGVyKSkoZXhlYywgdG9rZW4pOworICAg
IHJldHVybiBVbmRlZmluZWQoKTsKK30KKworYm9vbCBLSlM6OkhUTUxFbGVtZW50OjpoYXNQcm9w
ZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSkgY29u
c3QKK3sKKyNpZmRlZiBLSlNfVkVSQk9TRQorICAgIC8va2REZWJ1Zyg2MDcwKSA8PCAiSFRNTEVs
ZW1lbnQ6Omhhc1Byb3BlcnR5ICIgPDwgcHJvcGVydHlOYW1lLnFzdHJpbmcoKSA8PCBlbmRsOwor
I2VuZGlmCisgICAgSFRNTEVsZW1lbnRJbXBsICZlbGVtZW50ID0gKnN0YXRpY19jYXN0PEhUTUxF
bGVtZW50SW1wbCAqPihpbXBsKCkpOworICAgIC8vIEZpcnN0IGxvb2sgYXQgZHluYW1pYyBwcm9w
ZXJ0aWVzIC0ga2VlcCB0aGlzIGluIHN5bmMgd2l0aCB0cnlHZXQKKyAgICBpZiAoZWxlbWVudC5o
YXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpmb3JtKCkpKSB7CisgICAgICAgIEhUTUxGb3JtRWxlbWVu
dEltcGwgJmZvcm0gPSBzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnRJbXBsICY+KGVsZW1lbnQp
OworICAgICAgICAvLyBDaGVjayBpZiB3ZSdyZSByZXRyaWV2aW5nIGFuIGVsZW1lbnQgKGJ5IGlu
ZGV4IG9yIGJ5IG5hbWUpCisgICAgICAgIGJvb2wgb2s7CisgICAgICAgIHVpbnQgdSA9IHByb3Bl
cnR5TmFtZS50b1VMb25nKCZvayk7CisgICAgICAgIGlmIChvayAmJiBmb3JtLmVsZW1lbnRzKCkt
Pml0ZW0odSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKGZvcm0uZWxl
bWVudHMoKS0+bmFtZWRJdGVtKHByb3BlcnR5TmFtZS5zdHJpbmcoKSkpCisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNMb2NhbE5hbWUoSFRN
TE5hbWVzOjpzZWxlY3QoKSkpIHsKKyAgICAgICAgSFRNTFNlbGVjdEVsZW1lbnRJbXBsICZzZWxl
Y3QgPSBzdGF0aWNfY2FzdDxIVE1MU2VsZWN0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAg
ICAgIGJvb2wgb2s7CisgICAgICAgIHVpbnQgdSA9IHByb3BlcnR5TmFtZS50b1VMb25nKCZvayk7
CisgICAgICAgIGlmIChvayAmJiBzZWxlY3Qub3B0aW9uc0hUTUxDb2xsZWN0aW9uKCktPml0ZW0o
dSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIERPTUVsZW1l
bnQ6Omhhc1Byb3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFtZSk7Cit9CisKK1VTdHJpbmcgS0pTOjpI
VE1MRWxlbWVudDo6dG9TdHJpbmcoRXhlY1N0YXRlICpleGVjKSBjb25zdAoreworICBpZiAoaW1w
bCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YSgpKSkKKyAgICByZXR1cm4gVVN0cmluZyhzdGF0
aWNfY2FzdDxjb25zdCBIVE1MQW5jaG9yRWxlbWVudEltcGwgKj4oaW1wbCgpKS0+aHJlZigpKTsK
KyAgZWxzZQorICAgIHJldHVybiBET01FbGVtZW50Ojp0b1N0cmluZyhleGVjKTsKK30KKworc3Rh
dGljIEhUTUxGb3JtRWxlbWVudEltcGwgKmdldEZvcm0oSFRNTEVsZW1lbnRJbXBsICplbGVtZW50
KQoreworICBpZiAoZWxlbWVudC0+aXNHZW5lcmljRm9ybUVsZW1lbnQoKSkKKyAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbCAqPihlbGVtZW50KS0+Zm9y
bSgpOworICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmxhYmVsKCkpKQorICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxMYWJlbEVsZW1lbnRJbXBsICo+KGVsZW1lbnQpLT5m
b3JtKCk7CisgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b2JqZWN0KCkpKQor
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxPYmplY3RFbGVtZW50SW1wbCAqPihlbGVtZW50
KS0+Zm9ybSgpOworCisgIHJldHVybiAwOworfQorCit2b2lkIEtKUzo6SFRNTEVsZW1lbnQ6OnB1
c2hFdmVudEhhbmRsZXJTY29wZShFeGVjU3RhdGUgKmV4ZWMsIFNjb3BlQ2hhaW4gJnNjb3BlKSBj
b25zdAogewogICBIVE1MRWxlbWVudEltcGwgKmVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRWxl
bWVudEltcGwgKj4oaW1wbCgpKTsKIApAQCAtMjA5OSw3ICsyMjU1LDcgQEAgdm9pZCBLSlM6OkhU
TUxFbGVtZW50OjpwdXNoRXZlbnRIYW5kbGVyUwogICAgIHNjb3BlLnB1c2goc3RhdGljX2Nhc3Q8
T2JqZWN0SW1wICo+KGdldERPTU5vZGUoZXhlYywgZm9ybSkpKTsKICAgZWxzZSB7CiAgICAgTm9k
ZUltcGwgKmZvcm0gPSBlbGVtZW50LT5wYXJlbnROb2RlKCk7Ci0gICAgd2hpbGUgKGZvcm0gJiYg
Zm9ybS0+aWQoKSAhPSBJRF9GT1JNKQorICAgIHdoaWxlIChmb3JtICYmICFmb3JtLT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6Zm9ybSgpKSkKICAgICAgIGZvcm0gPSBmb3JtLT5wYXJlbnROb2RlKCk7
CiAgICAgCiAgICAgaWYgKGZvcm0pCkBAIC0yMTE5LDE4MCArMjI3NSwxNjUgQEAgSFRNTEVsZW1l
bnRGdW5jdGlvbjo6SFRNTEVsZW1lbnRGdW5jdGlvbgogCiBWYWx1ZSBLSlM6OkhUTUxFbGVtZW50
RnVuY3Rpb246OnRyeUNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0
IExpc3QgJmFyZ3MpCiB7Ci0gIGlmICghdGhpc09iai5pbmhlcml0cygmS0pTOjpIVE1MRWxlbWVu
dDo6aW5mbykpIHsKLSAgICBPYmplY3QgZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5cGVFcnJv
cik7Ci0gICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7Ci0gICAgcmV0dXJuIGVycjsKLSAgfQot
ICBrZERlYnVnKCkgPDwgIktKUzo6SFRNTEVsZW1lbnRGdW5jdGlvbjo6dHJ5Q2FsbCAiIDw8IGVu
ZGw7Ci0gIERPTUV4Y2VwdGlvblRyYW5zbGF0b3IgZXhjZXB0aW9uKGV4ZWMpOwotICBIVE1MRWxl
bWVudEltcGwgJmVsZW1lbnQgPSAqc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KHN0YXRp
Y19jYXN0PEhUTUxFbGVtZW50ICo+KHRoaXNPYmouaW1wKCkpLT5pbXBsKCkpOwotCi0gIHN3aXRj
aCAoZWxlbWVudC5pZCgpKSB7Ci0gICAgY2FzZSBJRF9GT1JNOiB7Ci0gICAgICBIVE1MRm9ybUVs
ZW1lbnRJbXBsICZmb3JtID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50SW1wbCAmPihlbGVt
ZW50KTsKLSAgICAgIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpGb3JtU3VibWl0KSB7Ci0g
ICAgICAgIGZvcm0uc3VibWl0KCk7Ci0gICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKLSAgICAg
IH0KLSAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OkZvcm1SZXNldCkgewot
ICAgICAgICBmb3JtLnJlc2V0KCk7Ci0gICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKLSAgICAg
IH0KKyAgICBpZiAoIXRoaXNPYmouaW5oZXJpdHMoJktKUzo6SFRNTEVsZW1lbnQ6OmluZm8pKSB7
CisgICAgICAgIE9iamVjdCBlcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsKKyAg
ICAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7CisgICAgICAgIHJldHVybiBlcnI7CiAgICAg
fQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfU0VMRUNUOiB7Ci0gICAgICBIVE1MU2VsZWN0RWxl
bWVudEltcGwgJnNlbGVjdCA9IHN0YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50SW1wbCAmPihl
bGVtZW50KTsKLSAgICAgIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpTZWxlY3RBZGQpIHsK
LSAgICAgICAgc2VsZWN0LmFkZCh0b0hUTUxFbGVtZW50KGFyZ3NbMF0pLCB0b0hUTUxFbGVtZW50
KGFyZ3NbMV0pKTsKLSAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwotICAgICAgfQotICAgICAg
ZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6U2VsZWN0UmVtb3ZlKSB7Ci0gICAgICAg
IHNlbGVjdC5yZW1vdmUoaW50KGFyZ3NbMF0udG9OdW1iZXIoZXhlYykpKTsKLSAgICAgICAgcmV0
dXJuIFVuZGVmaW5lZCgpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1M
RWxlbWVudDo6U2VsZWN0Qmx1cikgewotICAgICAgICBzZWxlY3QuYmx1cigpOwotICAgICAgICBy
ZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhU
TUxFbGVtZW50OjpTZWxlY3RGb2N1cykgewotICAgICAgICBzZWxlY3QuZm9jdXMoKTsKLSAgICAg
ICAgcmV0dXJuIFVuZGVmaW5lZCgpOwotICAgICAgfQorICAgIGtkRGVidWcoKSA8PCAiS0pTOjpI
VE1MRWxlbWVudEZ1bmN0aW9uOjp0cnlDYWxsICIgPDwgZW5kbDsKKyAgICBET01FeGNlcHRpb25U
cmFuc2xhdG9yIGV4Y2VwdGlvbihleGVjKTsKKyAgICBIVE1MRWxlbWVudEltcGwgJmVsZW1lbnQg
PSAqc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KHN0YXRpY19jYXN0PEhUTUxFbGVtZW50
ICo+KHRoaXNPYmouaW1wKCkpLT5pbXBsKCkpOworCisgICAgaWYgKGVsZW1lbnQuaGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6Zm9ybSgpKSkgeworICAgICAgICBIVE1MRm9ybUVsZW1lbnRJbXBsICZm
b3JtID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICAg
ICAgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OkZvcm1TdWJtaXQpIHsKKyAgICAgICAgICAg
IGZvcm0uc3VibWl0KCk7CisgICAgICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CisgICAgICAg
IH0KKyAgICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6Rm9ybVJlc2V0KSB7
CisgICAgICAgICAgICBmb3JtLnJlc2V0KCk7CisgICAgICAgICAgICByZXR1cm4gVW5kZWZpbmVk
KCk7CisgICAgICAgIH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9JTlBVVDogewot
ICAgICAgSFRNTElucHV0RWxlbWVudEltcGwgJmlucHV0ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0
RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVu
dDo6SW5wdXRCbHVyKSB7Ci0gICAgICAgIGlucHV0LmJsdXIoKTsKLSAgICAgICAgcmV0dXJuIFVu
ZGVmaW5lZCgpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVu
dDo6SW5wdXRGb2N1cykgewotICAgICAgICBpbnB1dC5mb2N1cygpOwotICAgICAgICByZXR1cm4g
VW5kZWZpbmVkKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVt
ZW50OjpJbnB1dFNlbGVjdCkgewotICAgICAgICBpbnB1dC5zZWxlY3QoKTsKLSAgICAgICAgcmV0
dXJuIFVuZGVmaW5lZCgpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1M
RWxlbWVudDo6SW5wdXRDbGljaykgewotICAgICAgICBpbnB1dC5jbGljaygpOwotICAgICAgICBy
ZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9CisgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNMb2Nh
bE5hbWUoSFRNTE5hbWVzOjpzZWxlY3QoKSkpIHsKKyAgICAgICAgSFRNTFNlbGVjdEVsZW1lbnRJ
bXBsICZzZWxlY3QgPSBzdGF0aWNfY2FzdDxIVE1MU2VsZWN0RWxlbWVudEltcGwgJj4oZWxlbWVu
dCk7CisgICAgICAgIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpTZWxlY3RBZGQpIHsKKyAg
ICAgICAgICAgIHNlbGVjdC5hZGQodG9IVE1MRWxlbWVudChhcmdzWzBdKSwgdG9IVE1MRWxlbWVu
dChhcmdzWzFdKSk7CisgICAgICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CisgICAgICAgIH0K
KyAgICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6U2VsZWN0UmVtb3ZlKSB7
CisgICAgICAgICAgICBzZWxlY3QucmVtb3ZlKGludChhcmdzWzBdLnRvTnVtYmVyKGV4ZWMpKSk7
CisgICAgICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxz
ZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6U2VsZWN0Qmx1cikgeworICAgICAgICAgICAg
c2VsZWN0LmJsdXIoKTsKKyAgICAgICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKKyAgICAgICAg
fQorICAgICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpTZWxlY3RGb2N1cykg
eworICAgICAgICAgICAgc2VsZWN0LmZvY3VzKCk7CisgICAgICAgICAgICByZXR1cm4gVW5kZWZp
bmVkKCk7CisgICAgICAgIH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9MQUJFTDog
ewotICAgICAgSFRNTExhYmVsRWxlbWVudEltcGwgJmxhYmVsID0gc3RhdGljX2Nhc3Q8SFRNTExh
YmVsRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICAKLSAgICAgIGlmIChpZCA9PSBLSlM6
OkhUTUxFbGVtZW50OjpMYWJlbEZvY3VzKSB7Ci0gICAgICAgICAgbGFiZWwuZm9jdXMoKTsKLSAg
ICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9CisgICAgZWxzZSBpZiAoZWxlbWVu
dC5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjppbnB1dCgpKSkgeworICAgICAgICBIVE1MSW5wdXRF
bGVtZW50SW1wbCAmaW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50SW1wbCAmPihl
bGVtZW50KTsKKyAgICAgICAgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OklucHV0Qmx1cikg
eworICAgICAgICAgICAgaW5wdXQuYmx1cigpOworICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5l
ZCgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6
OklucHV0Rm9jdXMpIHsKKyAgICAgICAgICAgIGlucHV0LmZvY3VzKCk7CisgICAgICAgICAgICBy
ZXR1cm4gVW5kZWZpbmVkKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoaWQgPT0gS0pT
OjpIVE1MRWxlbWVudDo6SW5wdXRTZWxlY3QpIHsKKyAgICAgICAgICAgIGlucHV0LnNlbGVjdCgp
OworICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAgICAgICB9CisgICAgICAgIGVs
c2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OklucHV0Q2xpY2spIHsKKyAgICAgICAgICAg
IGlucHV0LmNsaWNrKCk7CisgICAgICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CisgICAgICAg
IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9MRUdFTkQ6IHsKLSAgICAgIEhUTUxM
ZWdlbmRFbGVtZW50SW1wbCAmbGVnZW5kID0gc3RhdGljX2Nhc3Q8SFRNTExlZ2VuZEVsZW1lbnRJ
bXBsICY+KGVsZW1lbnQpOwotICAgICAgICAKLSAgICAgIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVt
ZW50OjpMZWdlbmRGb2N1cykgewotICAgICAgICAgIGxlZ2VuZC5mb2N1cygpOwotICAgICAgICAg
IHJldHVybiBVbmRlZmluZWQoKTsKLSAgICAgIH0KKyAgICBlbHNlIGlmIChlbGVtZW50Lmhhc0xv
Y2FsTmFtZShIVE1MTmFtZXM6OmJ1dHRvbigpKSkgeworICAgICAgICBIVE1MQnV0dG9uRWxlbWVu
dEltcGwgJmJ1dHRvbiA9IHN0YXRpY19jYXN0PEhUTUxCdXR0b25FbGVtZW50SW1wbCAmPihlbGVt
ZW50KTsKKyAgICAgICAgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OkJ1dHRvbkJsdXIpIHsK
KyAgICAgICAgICAgIGJ1dHRvbi5ibHVyKCk7CisgICAgICAgICAgICByZXR1cm4gVW5kZWZpbmVk
KCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6
QnV0dG9uRm9jdXMpIHsKKyAgICAgICAgICAgIGJ1dHRvbi5mb2N1cygpOworICAgICAgICAgICAg
cmV0dXJuIFVuZGVmaW5lZCgpOworICAgICAgICB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNh
c2UgSURfQlVUVE9OOiB7Ci0gICAgICBIVE1MQnV0dG9uRWxlbWVudEltcGwgJmJ1dHRvbiA9IHN0
YXRpY19jYXN0PEhUTUxCdXR0b25FbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIAotICAg
ICAgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OkJ1dHRvbkJsdXIpIHsKLSAgICAgICAgYnV0
dG9uLmJsdXIoKTsKLSAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwotICAgICAgfQotICAgICAg
ZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6QnV0dG9uRm9jdXMpIHsKLSAgICAgICAg
YnV0dG9uLmZvY3VzKCk7Ci0gICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKLSAgICAgIH0KKyAg
ICBlbHNlIGlmIChlbGVtZW50Lmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmxhYmVsKCkpKSB7Cisg
ICAgICAgIEhUTUxMYWJlbEVsZW1lbnRJbXBsICZsYWJlbCA9IHN0YXRpY19jYXN0PEhUTUxMYWJl
bEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgICAgICBpZiAoaWQgPT0gS0pTOjpIVE1MRWxl
bWVudDo6TGFiZWxGb2N1cykgeworICAgICAgICAgICAgbGFiZWwuZm9jdXMoKTsKKyAgICAgICAg
ICAgIHJldHVybiBVbmRlZmluZWQoKTsKKyAgICAgICAgfQogICAgIH0KLSAgICBicmVhazsKLSAg
ICBjYXNlIElEX1RFWFRBUkVBOiB7Ci0gICAgICBIVE1MVGV4dEFyZWFFbGVtZW50SW1wbCAmdGV4
dGFyZWEgPSBzdGF0aWNfY2FzdDxIVE1MVGV4dEFyZWFFbGVtZW50SW1wbCAmPihlbGVtZW50KTsK
LSAgICAgIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUZXh0QXJlYUJsdXIpIHsKLSAgICAg
ICAgdGV4dGFyZWEuYmx1cigpOwotICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9
Ci0gICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUZXh0QXJlYUZvY3VzKSB7
Ci0gICAgICAgIHRleHRhcmVhLmZvY3VzKCk7Ci0gICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsK
LSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRleHRBcmVh
U2VsZWN0KSB7Ci0gICAgICAgIHRleHRhcmVhLnNlbGVjdCgpOwotICAgICAgICByZXR1cm4gVW5k
ZWZpbmVkKCk7Ci0gICAgICB9CisgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNMb2NhbE5hbWUoSFRN
TE5hbWVzOjpsZWdlbmQoKSkpIHsKKyAgICAgICAgSFRNTExlZ2VuZEVsZW1lbnRJbXBsICZsZWdl
bmQgPSBzdGF0aWNfY2FzdDxIVE1MTGVnZW5kRWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAg
ICAgIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpMZWdlbmRGb2N1cykgeworICAgICAgICAg
ICAgbGVnZW5kLmZvY3VzKCk7CisgICAgICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CisgICAg
ICAgIH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9BOiB7Ci0gICAgICBIVE1MQW5j
aG9yRWxlbWVudEltcGwgJmFuY2hvciA9IHN0YXRpY19jYXN0PEhUTUxBbmNob3JFbGVtZW50SW1w
bCAmPihlbGVtZW50KTsKLSAgICAgIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpBbmNob3JC
bHVyKSB7Ci0gICAgICAgIGFuY2hvci5ibHVyKCk7Ci0gICAgICAgIHJldHVybiBVbmRlZmluZWQo
KTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OkFuY2hv
ckZvY3VzKSB7Ci0gICAgICAgIGFuY2hvci5mb2N1cygpOwotICAgICAgICByZXR1cm4gVW5kZWZp
bmVkKCk7Ci0gICAgICB9IAotICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6
QW5jaG9yVG9TdHJpbmcpIHsKLQlyZXR1cm4gU3RyaW5nKHRoaXNPYmoudG9TdHJpbmcoZXhlYykp
OwotICAgICAgfQorICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6
dGV4dGFyZWEoKSkpIHsKKyAgICAgICAgSFRNTFRleHRBcmVhRWxlbWVudEltcGwgJnRleHRhcmVh
ID0gc3RhdGljX2Nhc3Q8SFRNTFRleHRBcmVhRWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAg
ICAgIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUZXh0QXJlYUJsdXIpIHsKKyAgICAgICAg
ICAgIHRleHRhcmVhLmJsdXIoKTsKKyAgICAgICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKKyAg
ICAgICAgfQorICAgICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUZXh0QXJl
YUZvY3VzKSB7CisgICAgICAgICAgICB0ZXh0YXJlYS5mb2N1cygpOworICAgICAgICAgICAgcmV0
dXJuIFVuZGVmaW5lZCgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6
SFRNTEVsZW1lbnQ6OlRleHRBcmVhU2VsZWN0KSB7CisgICAgICAgICAgICB0ZXh0YXJlYS5zZWxl
Y3QoKTsKKyAgICAgICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKKyAgICAgICAgfQogICAgIH0K
LSAgICBicmVhazsKLSAgICBjYXNlIElEX1RBQkxFOiB7Ci0gICAgICBIVE1MVGFibGVFbGVtZW50
SW1wbCAmdGFibGUgPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVFbGVtZW50SW1wbCAmPihlbGVtZW50
KTsKLSAgICAgIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUYWJsZUNyZWF0ZVRIZWFkKQot
ICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLHRhYmxlLmNyZWF0ZVRIZWFkKCkpOwotICAg
ICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6VGFibGVEZWxldGVUSGVhZCkgewot
ICAgICAgICB0YWJsZS5kZWxldGVUSGVhZCgpOwotICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7
Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUYWJsZUNy
ZWF0ZVRGb290KQotICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLHRhYmxlLmNyZWF0ZVRG
b290KCkpOwotICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6VGFibGVEZWxl
dGVURm9vdCkgewotICAgICAgICB0YWJsZS5kZWxldGVURm9vdCgpOwotICAgICAgICByZXR1cm4g
VW5kZWZpbmVkKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVt
ZW50OjpUYWJsZUNyZWF0ZUNhcHRpb24pCi0gICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMs
dGFibGUuY3JlYXRlQ2FwdGlvbigpKTsKLSAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVs
ZW1lbnQ6OlRhYmxlRGVsZXRlQ2FwdGlvbikgewotICAgICAgICB0YWJsZS5kZWxldGVDYXB0aW9u
KCk7Ci0gICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYg
KGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRhYmxlSW5zZXJ0Um93KQotICAgICAgICByZXR1cm4g
Z2V0RE9NTm9kZShleGVjLHRhYmxlLmluc2VydFJvdyhhcmdzWzBdLnRvSW50MzIoZXhlYyksIGV4
Y2VwdGlvbikpOwotICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6VGFibGVE
ZWxldGVSb3cpIHsKLSAgICAgICAgdGFibGUuZGVsZXRlUm93KGFyZ3NbMF0udG9JbnQzMihleGVj
KSwgZXhjZXB0aW9uKTsKLSAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwotICAgICAgfQorICAg
IGVsc2UgaWYgKGVsZW1lbnQuaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6YSgpKSkgeworICAgICAg
ICBIVE1MQW5jaG9yRWxlbWVudEltcGwgJmFuY2hvciA9IHN0YXRpY19jYXN0PEhUTUxBbmNob3JF
bGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICAgICAgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1l
bnQ6OkFuY2hvckJsdXIpIHsKKyAgICAgICAgICAgIGFuY2hvci5ibHVyKCk7CisgICAgICAgICAg
ICByZXR1cm4gVW5kZWZpbmVkKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoaWQgPT0g
S0pTOjpIVE1MRWxlbWVudDo6QW5jaG9yRm9jdXMpIHsKKyAgICAgICAgICAgIGFuY2hvci5mb2N1
cygpOworICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAgICAgICB9CisgICAgICAg
IGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OkFuY2hvclRvU3RyaW5nKQorICAgICAg
ICAgICAgcmV0dXJuIFN0cmluZyh0aGlzT2JqLnRvU3RyaW5nKGV4ZWMpKTsKICAgICB9Ci0gICAg
YnJlYWs7Ci0gICAgY2FzZSBJRF9USEVBRDoKLSAgICBjYXNlIElEX1RCT0RZOgotICAgIGNhc2Ug
SURfVEZPT1Q6IHsKLSAgICAgIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbCAmdGFibGVTZWN0
aW9uID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsICY+KGVsZW1lbnQp
OwotICAgICAgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRhYmxlU2VjdGlvbkluc2VydFJv
dykKLSAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYywgdGFibGVTZWN0aW9uLmluc2VydFJv
dyhhcmdzWzBdLnRvSW50MzIoZXhlYyksIGV4Y2VwdGlvbikpOwotICAgICAgZWxzZSBpZiAoaWQg
PT0gS0pTOjpIVE1MRWxlbWVudDo6VGFibGVTZWN0aW9uRGVsZXRlUm93KSB7Ci0gICAgICAgIHRh
YmxlU2VjdGlvbi5kZWxldGVSb3coYXJnc1swXS50b0ludDMyKGV4ZWMpLCBleGNlcHRpb24pOwot
ICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9CisgICAgZWxzZSBpZiAoZWxlbWVu
dC5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0YWJsZSgpKSkgeworICAgICAgICBIVE1MVGFibGVF
bGVtZW50SW1wbCAmdGFibGUgPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVFbGVtZW50SW1wbCAmPihl
bGVtZW50KTsKKyAgICAgICAgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRhYmxlQ3JlYXRl
VEhlYWQpCisgICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLHRhYmxlLmNyZWF0ZVRI
ZWFkKCkpOworICAgICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUYWJsZURl
bGV0ZVRIZWFkKSB7CisgICAgICAgICAgICB0YWJsZS5kZWxldGVUSGVhZCgpOworICAgICAgICAg
ICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGlkID09
IEtKUzo6SFRNTEVsZW1lbnQ6OlRhYmxlQ3JlYXRlVEZvb3QpCisgICAgICAgICAgICByZXR1cm4g
Z2V0RE9NTm9kZShleGVjLHRhYmxlLmNyZWF0ZVRGb290KCkpOworICAgICAgICBlbHNlIGlmIChp
ZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUYWJsZURlbGV0ZVRGb290KSB7CisgICAgICAgICAgICB0
YWJsZS5kZWxldGVURm9vdCgpOworICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAg
ICAgICB9CisgICAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRhYmxlQ3Jl
YXRlQ2FwdGlvbikKKyAgICAgICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsdGFibGUuY3Jl
YXRlQ2FwdGlvbigpKTsKKyAgICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6
VGFibGVEZWxldGVDYXB0aW9uKSB7CisgICAgICAgICAgICB0YWJsZS5kZWxldGVDYXB0aW9uKCk7
CisgICAgICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxz
ZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6VGFibGVJbnNlcnRSb3cpCisgICAgICAgICAg
ICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLHRhYmxlLmluc2VydFJvdyhhcmdzWzBdLnRvSW50MzIo
ZXhlYyksIGV4Y2VwdGlvbikpOworICAgICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVt
ZW50OjpUYWJsZURlbGV0ZVJvdykgeworICAgICAgICAgICAgdGFibGUuZGVsZXRlUm93KGFyZ3Nb
MF0udG9JbnQzMihleGVjKSwgZXhjZXB0aW9uKTsKKyAgICAgICAgICAgIHJldHVybiBVbmRlZmlu
ZWQoKTsKKyAgICAgICAgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX1RSOiB7Ci0g
ICAgICBIVE1MVGFibGVSb3dFbGVtZW50SW1wbCAmdGFibGVSb3cgPSBzdGF0aWNfY2FzdDxIVE1M
VGFibGVSb3dFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIGlmIChpZCA9PSBLSlM6OkhU
TUxFbGVtZW50OjpUYWJsZVJvd0luc2VydENlbGwpCi0gICAgICAgIHJldHVybiBnZXRET01Ob2Rl
KGV4ZWMsdGFibGVSb3cuaW5zZXJ0Q2VsbChhcmdzWzBdLnRvSW50MzIoZXhlYyksIGV4Y2VwdGlv
bikpOwotICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6VGFibGVSb3dEZWxl
dGVDZWxsKSB7Ci0gICAgICAgIHRhYmxlUm93LmRlbGV0ZUNlbGwoYXJnc1swXS50b0ludDMyKGV4
ZWMpLCBleGNlcHRpb24pOwotICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9Cisg
ICAgZWxzZSBpZiAoZWxlbWVudC5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0aGVhZCgpKSB8fAor
ICAgICAgICAgICAgIGVsZW1lbnQuaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dGJvZHkoKSkgfHwK
KyAgICAgICAgICAgICBlbGVtZW50Lmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnRmb290KCkpKSB7
CisgICAgICAgIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbCAmdGFibGVTZWN0aW9uID0gc3Rh
dGljX2Nhc3Q8SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgICAg
ICBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6VGFibGVTZWN0aW9uSW5zZXJ0Um93KQorICAg
ICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYywgdGFibGVTZWN0aW9uLmluc2VydFJvdyhh
cmdzWzBdLnRvSW50MzIoZXhlYyksIGV4Y2VwdGlvbikpOworICAgICAgICBlbHNlIGlmIChpZCA9
PSBLSlM6OkhUTUxFbGVtZW50OjpUYWJsZVNlY3Rpb25EZWxldGVSb3cpIHsKKyAgICAgICAgICAg
IHRhYmxlU2VjdGlvbi5kZWxldGVSb3coYXJnc1swXS50b0ludDMyKGV4ZWMpLCBleGNlcHRpb24p
OworICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAgICAgICB9CiAgICAgfQotICAg
IGNhc2UgSURfTUFSUVVFRTogeworICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFzTG9jYWxOYW1lKEhU
TUxOYW1lczo6dHIoKSkpIHsKKyAgICAgICAgSFRNTFRhYmxlUm93RWxlbWVudEltcGwgJnRhYmxl
Um93ID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlUm93RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Cisg
ICAgICAgIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUYWJsZVJvd0luc2VydENlbGwpCisg
ICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLHRhYmxlUm93Lmluc2VydENlbGwoYXJn
c1swXS50b0ludDMyKGV4ZWMpLCBleGNlcHRpb24pKTsKKyAgICAgICAgZWxzZSBpZiAoaWQgPT0g
S0pTOjpIVE1MRWxlbWVudDo6VGFibGVSb3dEZWxldGVDZWxsKSB7CisgICAgICAgICAgICB0YWJs
ZVJvdy5kZWxldGVDZWxsKGFyZ3NbMF0udG9JbnQzMihleGVjKSwgZXhjZXB0aW9uKTsKKyAgICAg
ICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlm
IChlbGVtZW50Lmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om1hcnF1ZWUoKSkpIHsKICAgICAgICAg
aWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6Ok1hcnF1ZWVTdGFydCAmJiBlbGVtZW50LnJlbmRl
cmVyKCkgJiYgCiAgICAgICAgICAgICBlbGVtZW50LnJlbmRlcmVyKCktPmxheWVyKCkgJiYKICAg
ICAgICAgICAgIGVsZW1lbnQucmVuZGVyZXIoKS0+bGF5ZXIoKS0+bWFycXVlZSgpKSB7CkBAIC0y
MzA1LDkgKzI0NDYsOSBAQCBWYWx1ZSBLSlM6OkhUTUxFbGVtZW50RnVuY3Rpb246OnRyeUNhbGwo
CiAgICAgICAgICAgICBlbGVtZW50LnJlbmRlcmVyKCktPmxheWVyKCktPm1hcnF1ZWUoKS0+c3Rv
cCgpOwogICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogICAgICAgICB9Ci0gICAgICAg
IGJyZWFrOwogICAgIH0KLSAgICBjYXNlIElEX0NBTlZBUzogeworI2lmIEFQUExFX0NIQU5HRVMK
KyAgICBlbHNlIGlmIChlbGVtZW50Lmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmNhbnZhcygpKSkg
ewogICAgICAgICBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6R2V0Q29udGV4dCkgewogICAg
ICAgICAgICAgaWYgKGFyZ3Muc2l6ZSgpID09IDAgfHwgKGFyZ3Muc2l6ZSgpID09IDEgJiYgYXJn
c1swXS50b1N0cmluZyhleGVjKS5xc3RyaW5nKCkubG93ZXIoKSA9PSAiMmQiKSkgewogICAgICAg
ICAgICAgICAgIHJldHVybiBPYmplY3QobmV3IENvbnRleHQyRCgmZWxlbWVudCkpOwpAQCAtMjMx
NSw3MzggKzI0NTYsNzYwIEBAIFZhbHVlIEtKUzo6SFRNTEVsZW1lbnRGdW5jdGlvbjo6dHJ5Q2Fs
bCgKICAgICAgICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKICAgICAgICAgfQogICAgIH0KLSAg
ICAKLSAgICBicmVhazsKLSAgfQorI2VuZGlmCiAKLSAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAg
IHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAogdm9pZCBLSlM6OkhUTUxFbGVtZW50Ojp0cnlQdXQo
RXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIGNvbnN0IFZh
bHVlJiB2YWx1ZSwgaW50IGF0dHIpCiB7CiAjaWZkZWYgS0pTX1ZFUkJPU0UKLSAgRE9NOjpET01T
dHJpbmcgc3RyID0gdmFsdWUuaXNBKE51bGxUeXBlKSA/IERPTTo6RE9NU3RyaW5nKCkgOiB2YWx1
ZS50b1N0cmluZyhleGVjKS5zdHJpbmcoKTsKKyAgICBET006OkRPTVN0cmluZyBzdHIgPSB2YWx1
ZS5pc0EoTnVsbFR5cGUpID8gRE9NOjpET01TdHJpbmcoKSA6IHZhbHVlLnRvU3RyaW5nKGV4ZWMp
LnN0cmluZygpOwogI2VuZGlmCi0gIEhUTUxFbGVtZW50SW1wbCAmZWxlbWVudCA9ICpzdGF0aWNf
Y2FzdDxIVE1MRWxlbWVudEltcGwgKj4oaW1wbCgpKTsKKyAgICBIVE1MRWxlbWVudEltcGwgJmVs
ZW1lbnQgPSAqc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KGltcGwoKSk7CiAjaWZkZWYg
S0pTX1ZFUkJPU0UKLSAga2REZWJ1Zyg2MDcwKSA8PCAiS0pTOjpIVE1MRWxlbWVudDo6dHJ5UHV0
ICIgPDwgcHJvcGVydHlOYW1lLnFzdHJpbmcoKQotICAgICAgICAgICAgICAgIDw8ICIgdGhpc1Rh
Zz0iIDw8IGVsZW1lbnQudGFnTmFtZSgpLnN0cmluZygpCi0gICAgICAgICAgICAgICAgPDwgIiBz
dHI9IiA8PCBzdHIuc3RyaW5nKCkgPDwgZW5kbDsKKyAgICBrZERlYnVnKDYwNzApIDw8ICJLSlM6
OkhUTUxFbGVtZW50Ojp0cnlQdXQgIiA8PCBwcm9wZXJ0eU5hbWUucXN0cmluZygpCisgICAgICAg
ICAgICAgICAgICA8PCAiIHRoaXNUYWc9IiA8PCBlbGVtZW50LnRhZ05hbWUoKS5zdHJpbmcoKQor
ICAgICAgICAgICAgICAgICAgPDwgIiBzdHI9IiA8PCBzdHIuc3RyaW5nKCkgPDwgZW5kbDsKICNl
bmRpZgotICAvLyBGaXJzdCBsb29rIGF0IGR5bmFtaWMgcHJvcGVydGllcwotICBzd2l0Y2ggKGVs
ZW1lbnQuaWQoKSkgewotICAgIGNhc2UgSURfU0VMRUNUOiB7Ci0gICAgICBIVE1MU2VsZWN0RWxl
bWVudEltcGwgJnNlbGVjdCA9IHN0YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50SW1wbCAmPihl
bGVtZW50KTsKLSAgICAgIGJvb2wgb2s7Ci0gICAgICAvKnVpbnQgdSA9Ki8gcHJvcGVydHlOYW1l
LnRvVUxvbmcoJm9rKTsKLSAgICAgIGlmIChvaykgewotICAgICAgICBPYmplY3QgY29sbCA9IE9i
amVjdDo6ZHluYW1pY0Nhc3QoIGdldFNlbGVjdEhUTUxDb2xsZWN0aW9uKGV4ZWMsIHNlbGVjdC5v
cHRpb25zSFRNTENvbGxlY3Rpb24oKS5nZXQoKSwgJnNlbGVjdCkgKTsKLSAgICAgICAgaWYgKCAh
Y29sbC5pc051bGwoKSApCi0gICAgICAgICAgY29sbC5wdXQoZXhlYyxwcm9wZXJ0eU5hbWUsdmFs
dWUpOwotICAgICAgICByZXR1cm47Ci0gICAgICB9CisgICAgLy8gRmlyc3QgbG9vayBhdCBkeW5h
bWljIHByb3BlcnRpZXMKKyAgICBpZiAoZWxlbWVudC5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpz
ZWxlY3QoKSkpIHsKKyAgICAgICAgSFRNTFNlbGVjdEVsZW1lbnRJbXBsICZzZWxlY3QgPSBzdGF0
aWNfY2FzdDxIVE1MU2VsZWN0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgICAgIGJvb2wg
b2s7CisgICAgICAgIC8qdWludCB1ID0qLyBwcm9wZXJ0eU5hbWUudG9VTG9uZygmb2spOworICAg
ICAgICBpZiAob2spIHsKKyAgICAgICAgICAgIE9iamVjdCBjb2xsID0gT2JqZWN0OjpkeW5hbWlj
Q2FzdCggZ2V0U2VsZWN0SFRNTENvbGxlY3Rpb24oZXhlYywgc2VsZWN0Lm9wdGlvbnNIVE1MQ29s
bGVjdGlvbigpLmdldCgpLCAmc2VsZWN0KSApOworICAgICAgICAgICAgaWYgKCFjb2xsLmlzTnVs
bCgpKQorICAgICAgICAgICAgICAgIGNvbGwucHV0KGV4ZWMscHJvcGVydHlOYW1lLHZhbHVlKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAgIH0KICNpZiBBUFBMRV9DSEFOR0VT
Ci0gICAgY2FzZSBJRF9FTUJFRDoKLSAgICBjYXNlIElEX09CSkVDVDoKLSAgICBjYXNlIElEX0FQ
UExFVDogeworICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6ZW1i
ZWQoKSkgfHwKKyAgICAgICAgICAgICBlbGVtZW50Lmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9i
amVjdCgpKSB8fAorICAgICAgICAgICAgIGVsZW1lbnQuaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6
YXBwbGV0KCkpKSB7CiAJVmFsdWUgcnVudGltZU9iamVjdCA9IGdldFJ1bnRpbWVPYmplY3QoZXhl
YywmZWxlbWVudCk7CiAJaWYgKCFydW50aW1lT2JqZWN0LmlzTnVsbCgpKSB7CiAJICAgIE9iamVj
dEltcCAqaW1wID0gc3RhdGljX2Nhc3Q8T2JqZWN0SW1wICo+KHJ1bnRpbWVPYmplY3QuaW1wKCkp
OwotCSAgICBpZiAoaW1wLT5jYW5QdXQoZXhlYywgcHJvcGVydHlOYW1lKSkgeworCSAgICBpZiAo
aW1wLT5jYW5QdXQoZXhlYywgcHJvcGVydHlOYW1lKSkKIAkJcmV0dXJuIGltcC0+cHV0IChleGVj
LCBwcm9wZXJ0eU5hbWUsIHZhbHVlKTsKLQkgICAgfQogCX0KICAgICB9Ci0gICAgICBicmVhazsK
ICNlbmRpZgotICAgIGJyZWFrOwotICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KIAotICBj
b25zdCBIYXNoVGFibGUqIHRhYmxlID0gY2xhc3NJbmZvKCktPnByb3BIYXNoVGFibGU7IC8vIGdl
dCB0aGUgcmlnaHQgaGFzaHRhYmxlCi0gIGNvbnN0IEhhc2hFbnRyeSogZW50cnkgPSBMb29rdXA6
OmZpbmRFbnRyeSh0YWJsZSwgcHJvcGVydHlOYW1lKTsKLSAgaWYgKGVudHJ5KSB7Ci0gICAgaWYg
KGVudHJ5LT5hdHRyICYgRnVuY3Rpb24pIC8vIGZ1bmN0aW9uOiBwdXQgYXMgb3ZlcnJpZGUgcHJv
cGVydHkKLSAgICB7Ci0gICAgICBPYmplY3RJbXA6OnB1dChleGVjLCBwcm9wZXJ0eU5hbWUsIHZh
bHVlLCBhdHRyKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgZWxzZSBpZiAoKGVudHJ5LT5h
dHRyICYgUmVhZE9ubHkpID09IDApIC8vIGxldCBET01PYmplY3RMb29rdXBQdXQgcHJpbnQgdGhl
IHdhcm5pbmcgaWYgbm90Ci0gICAgewotICAgICAgcHV0VmFsdWUoZXhlYywgZW50cnktPnZhbHVl
LCB2YWx1ZSwgYXR0cik7Ci0gICAgICByZXR1cm47CisgICAgY29uc3QgSGFzaFRhYmxlKiB0YWJs
ZSA9IGNsYXNzSW5mbygpLT5wcm9wSGFzaFRhYmxlOyAvLyBnZXQgdGhlIHJpZ2h0IGhhc2h0YWJs
ZQorICAgIGNvbnN0IEhhc2hFbnRyeSogZW50cnkgPSBMb29rdXA6OmZpbmRFbnRyeSh0YWJsZSwg
cHJvcGVydHlOYW1lKTsKKyAgICBpZiAoZW50cnkpIHsKKyAgICAgICAgaWYgKGVudHJ5LT5hdHRy
ICYgRnVuY3Rpb24pIHsgLy8gZnVuY3Rpb246IHB1dCBhcyBvdmVycmlkZSBwcm9wZXJ0eQorICAg
ICAgICAgICAgT2JqZWN0SW1wOjpwdXQoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgYXR0cik7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoKGVudHJ5
LT5hdHRyICYgUmVhZE9ubHkpID09IDApIHsgLy8gbGV0IERPTU9iamVjdExvb2t1cFB1dCBwcmlu
dCB0aGUgd2FybmluZyBpZiBub3QKKyAgICAgICAgICAgIHB1dFZhbHVlKGV4ZWMsIGVudHJ5LT52
YWx1ZSwgdmFsdWUsIGF0dHIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAg
fQotICB9Ci0gIERPTU9iamVjdExvb2t1cFB1dDxLSlM6OkhUTUxFbGVtZW50LCBET01FbGVtZW50
PihleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBhdHRyLCAmSFRNTEVsZW1lbnRUYWJsZSwgdGhp
cyk7CisKKyAgICBET01PYmplY3RMb29rdXBQdXQ8S0pTOjpIVE1MRWxlbWVudCwgRE9NRWxlbWVu
dD4oZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgYXR0ciwgJkhUTUxFbGVtZW50VGFibGUsIHRo
aXMpOwogfQogCi12b2lkIEhUTUxFbGVtZW50OjpwdXRWYWx1ZShFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBpbnQpCit2b2lkIEhUTUxFbGVtZW50OjpodG1s
U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNv
bnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCiB7Ci0gIERPTUV4Y2VwdGlvblRyYW5zbGF0b3IgZXhj
ZXB0aW9uKGV4ZWMpOwotICBET006OkRPTVN0cmluZyBzdHIgPSB2YWx1ZS5pc0EoTnVsbFR5cGUp
ID8gRE9NOjpET01TdHJpbmcoKSA6IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpOwotICBI
VE1MRWxlbWVudEltcGwgJmVsZW1lbnQgPSAqc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+
KGltcGwoKSk7Ci0jaWZkZWYgS0pTX1ZFUkJPU0UKLSAga2REZWJ1Zyg2MDcwKSA8PCAiS0pTOjpI
VE1MRWxlbWVudDo6cHV0VmFsdWUgIgotICAgICAgICAgICAgICAgIDw8ICIgdGhpc1RhZz0iIDw8
IGVsZW1lbnQudGFnTmFtZSgpLnN0cmluZygpCi0gICAgICAgICAgICAgICAgPDwgIiB0b2tlbj0i
IDw8IHRva2VuIDw8IGVuZGw7Ci0jZW5kaWYKKyAgICBIVE1MSGVhZEVsZW1lbnRJbXBsICZoZWFk
ID0gKnN0YXRpY19jYXN0PEhUTUxIZWFkRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIGlmICh0
b2tlbiA9PSBIZWFkUHJvZmlsZSkgCisgICAgICAgIGhlYWQuc2V0UHJvZmlsZShzdHIpOworfQog
Ci0gIHN3aXRjaCAoZWxlbWVudC5pZCgpKSB7Ci0gIGNhc2UgSURfSFRNTDogewotICAgICAgSFRN
TEh0bWxFbGVtZW50SW1wbCAmaHRtbCA9IHN0YXRpY19jYXN0PEhUTUxIdG1sRWxlbWVudEltcGwg
Jj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIEh0bWxWZXJz
aW9uOiAgICAgICAgIHsgaHRtbC5zZXRWZXJzaW9uKHN0cik7IHJldHVybjsgfQotICAgICAgfQot
ICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX0hFQUQ6IHsKLSAgICBIVE1MSGVhZEVsZW1lbnRJbXBs
ICZoZWFkID0gc3RhdGljX2Nhc3Q8SFRNTEhlYWRFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKK3Zv
aWQgSFRNTEVsZW1lbnQ6OmhlYWRTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNv
bnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1M
SGVhZEVsZW1lbnRJbXBsICZoZWFkID0gKnN0YXRpY19jYXN0PEhUTUxIZWFkRWxlbWVudEltcGwq
PihpbXBsKCkpOworICAgIGlmICh0b2tlbiA9PSBIZWFkUHJvZmlsZSkgCisgICAgICAgIGhlYWQu
c2V0UHJvZmlsZShzdHIpOworfQorCit2b2lkIEhUTUxFbGVtZW50OjpsaW5rU2V0dGVyKEV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9N
U3RyaW5nJiBzdHIpCit7CisgICAgSFRNTExpbmtFbGVtZW50SW1wbCAmbGluayA9ICpzdGF0aWNf
Y2FzdDxIVE1MTGlua0VsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7
Ci0gICAgY2FzZSBIZWFkUHJvZmlsZTogICAgICAgICB7IGhlYWQuc2V0UHJvZmlsZShzdHIpOyBy
ZXR1cm47IH0KLSAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfTElOSzogewotICAgIEhU
TUxMaW5rRWxlbWVudEltcGwgJmxpbmsgPSBzdGF0aWNfY2FzdDxIVE1MTGlua0VsZW1lbnRJbXBs
ICY+KGVsZW1lbnQpOwotICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgTGlua0Rpc2Fi
bGVkOiAgICAgICAgeyBsaW5rLnNldERpc2FibGVkKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJl
dHVybjsgfQotICAgICAgY2FzZSBMaW5rQ2hhcnNldDogICAgICAgICB7IGxpbmsuc2V0Q2hhcnNl
dChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgTGlua0hyZWY6ICAgICAgICAgICAgeyBsaW5r
LnNldEhyZWYoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIExpbmtIcmVmTGFuZzogICAgICAg
IHsgbGluay5zZXRIcmVmbGFuZyhzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgTGlua01lZGlh
OiAgICAgICAgICAgeyBsaW5rLnNldE1lZGlhKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBM
aW5rUmVsOiAgICAgICAgICAgICB7IGxpbmsuc2V0UmVsKHN0cik7IHJldHVybjsgfQotICAgICAg
Y2FzZSBMaW5rUmV2OiAgICAgICAgICAgICB7IGxpbmsuc2V0UmV2KHN0cik7IHJldHVybjsgfQot
ICAgICAgY2FzZSBMaW5rVGFyZ2V0OiAgICAgICAgICB7IGxpbmsuc2V0VGFyZ2V0KHN0cik7IHJl
dHVybjsgfQotICAgICAgY2FzZSBMaW5rVHlwZTogICAgICAgICAgICB7IGxpbmsuc2V0VHlwZShz
dHIpOyByZXR1cm47IH0KLSAgICAgIH0KLSAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9U
SVRMRTogewotICAgICAgSFRNTFRpdGxlRWxlbWVudEltcGwgJnRpdGxlID0gc3RhdGljX2Nhc3Q8
SFRNTFRpdGxlRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7
Ci0gICAgICBjYXNlIFRpdGxlVGV4dDogICAgICAgICAgICAgICAgIHsgdGl0bGUuc2V0VGV4dChz
dHIpOyByZXR1cm47IH0KLSAgICAgIH0KLSAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9N
RVRBOiB7Ci0gICAgICBIVE1MTWV0YUVsZW1lbnRJbXBsICZtZXRhID0gc3RhdGljX2Nhc3Q8SFRN
TE1ldGFFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAg
ICAgIGNhc2UgTWV0YUNvbnRlbnQ6ICAgICAgICAgeyBtZXRhLnNldENvbnRlbnQoc3RyKTsgcmV0
dXJuOyB9Ci0gICAgICBjYXNlIE1ldGFIdHRwRXF1aXY6ICAgICAgIHsgbWV0YS5zZXRIdHRwRXF1
aXYoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIE1ldGFOYW1lOiAgICAgICAgICAgIHsgbWV0
YS5zZXROYW1lKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBNZXRhU2NoZW1lOiAgICAgICAg
ICB7IG1ldGEuc2V0U2NoZW1lKHN0cik7IHJldHVybjsgfQotICAgICAgfQotICAgIH0KLSAgICBi
cmVhazsKLSAgICBjYXNlIElEX0JBU0U6IHsKLSAgICAgIEhUTUxCYXNlRWxlbWVudEltcGwgJmJh
c2UgPSBzdGF0aWNfY2FzdDxIVE1MQmFzZUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAg
c3dpdGNoICh0b2tlbikgewotICAgICAgY2FzZSBCYXNlSHJlZjogICAgICAgICAgICB7IGJhc2Uu
c2V0SHJlZihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQmFzZVRhcmdldDogICAgICAgICAg
eyBiYXNlLnNldFRhcmdldChzdHIpOyByZXR1cm47IH0KLSAgICAgIH0KLSAgICB9Ci0gICAgYnJl
YWs7Ci0gICAgY2FzZSBJRF9JU0lOREVYOiB7Ci0gICAgICBIVE1MSXNJbmRleEVsZW1lbnRJbXBs
ICZpc2luZGV4ID0gc3RhdGljX2Nhc3Q8SFRNTElzSW5kZXhFbGVtZW50SW1wbCAmPihlbGVtZW50
KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIC8vIHJlYWQtb25seTogZm9ybQotICAg
ICAgY2FzZSBJc0luZGV4UHJvbXB0OiAgICAgICAgICAgICAgIHsgaXNpbmRleC5zZXRQcm9tcHQo
c3RyKTsgcmV0dXJuOyB9Ci0gICAgICB9Ci0gICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURf
U1RZTEU6IHsKLSAgICAgIEhUTUxTdHlsZUVsZW1lbnRJbXBsICZzdHlsZSA9IHN0YXRpY19jYXN0
PEhUTUxTdHlsZUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikg
ewotICAgICAgY2FzZSBTdHlsZURpc2FibGVkOiAgICAgICAgeyBzdHlsZS5zZXREaXNhYmxlZCh2
YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgU3R5bGVNZWRpYTog
ICAgICAgICAgIHsgc3R5bGUuc2V0TWVkaWEoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFN0
eWxlVHlwZTogICAgICAgICAgICB7IHN0eWxlLnNldFR5cGUoc3RyKTsgcmV0dXJuOyB9Ci0gICAg
ICB9Ci0gICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfQk9EWTogewotICAgICAgSFRNTEJv
ZHlFbGVtZW50SW1wbCAmYm9keSA9IHN0YXRpY19jYXN0PEhUTUxCb2R5RWxlbWVudEltcGwgJj4o
ZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIEJvZHlBTGluazog
ICAgICAgICAgIHsgYm9keS5zZXRBTGluayhzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQm9k
eUJhY2tncm91bmQ6ICAgICAgeyBib2R5LnNldEJhY2tncm91bmQoc3RyKTsgcmV0dXJuOyB9Ci0g
ICAgICBjYXNlIEJvZHlCZ0NvbG9yOiAgICAgICAgIHsgYm9keS5zZXRCZ0NvbG9yKHN0cik7IHJl
dHVybjsgfQotICAgICAgY2FzZSBCb2R5TGluazogICAgICAgICAgICB7IGJvZHkuc2V0TGluayhz
dHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQm9keVRleHQ6ICAgICAgICAgICAgeyBib2R5LnNl
dFRleHQoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEJvZHlWTGluazogICAgICAgICAgIHsg
Ym9keS5zZXRWTGluayhzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQm9keVNjcm9sbExlZnQ6
Ci0gICAgICBjYXNlIEJvZHlTY3JvbGxUb3A6IHsKLSAgICAgICAgICBRU2Nyb2xsVmlldyogc3Zp
ZXcgPSBib2R5Lm93bmVyRG9jdW1lbnQoKS0+dmlldygpOwotICAgICAgICAgIGlmIChzdmlldykg
ewotICAgICAgICAgICAgICAvLyBVcGRhdGUgdGhlIGRvY3VtZW50J3MgbGF5b3V0IGJlZm9yZSB3
ZSBjb21wdXRlIHRoZXNlIGF0dHJpYnV0ZXMuCi0gICAgICAgICAgICAgIGlmIChEb2N1bWVudElt
cGwqIGRvYyA9IGJvZHkuZ2V0RG9jdW1lbnQoKSkKLSAgICAgICAgICAgICAgICAgIGRvYy0+dXBk
YXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7Ci0gICAgICAgICAgICAgIGlmICh0
b2tlbiA9PSBCb2R5U2Nyb2xsTGVmdCkKLSAgICAgICAgICAgICAgICAgIHN2aWV3LT5zZXRDb250
ZW50c1Bvcyh2YWx1ZS50b0ludDMyKGV4ZWMpLCBzdmlldy0+Y29udGVudHNZKCkpOwotICAgICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICBzdmlldy0+c2V0Q29udGVudHNQb3Moc3Zp
ZXctPmNvbnRlbnRzWCgpLCB2YWx1ZS50b0ludDMyKGV4ZWMpKTsKLSAgICAgICAgICB9Ci0gICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGJyZWFrOwotICAg
IGNhc2UgSURfRk9STTogewotICAgICAgSFRNTEZvcm1FbGVtZW50SW1wbCAmZm9ybSA9IHN0YXRp
Y19jYXN0PEhUTUxGb3JtRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRv
a2VuKSB7Ci0gICAgICAvLyByZWFkLW9ubHk6IGVsZW1lbnRzCi0gICAgICAvLyByZWFkLW9ubHk6
IGxlbmd0aAotICAgICAgY2FzZSBGb3JtTmFtZTogICAgICAgICAgICB7IGZvcm0uc2V0TmFtZShz
dHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgRm9ybUFjY2VwdENoYXJzZXQ6ICAgeyBmb3JtLnNl
dEFjY2VwdENoYXJzZXQoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEZvcm1BY3Rpb246ICAg
ICAgICAgIHsgZm9ybS5zZXRBY3Rpb24oc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEZvcm1F
bmNUeXBlOiAgICAgICAgIHsgZm9ybS5zZXRFbmN0eXBlKHN0cik7IHJldHVybjsgfQotICAgICAg
Y2FzZSBGb3JtTWV0aG9kOiAgICAgICAgICB7IGZvcm0uc2V0TWV0aG9kKHN0cik7IHJldHVybjsg
fQotICAgICAgY2FzZSBGb3JtVGFyZ2V0OiAgICAgICAgICB7IGZvcm0uc2V0VGFyZ2V0KHN0cik7
IHJldHVybjsgfQotICAgICAgfQotICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX1NFTEVD
VDogewotICAgICAgSFRNTFNlbGVjdEVsZW1lbnRJbXBsICZzZWxlY3QgPSBzdGF0aWNfY2FzdDxI
VE1MU2VsZWN0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7
Ci0gICAgICAvLyByZWFkLW9ubHk6IHR5cGUKLSAgICAgIGNhc2UgU2VsZWN0U2VsZWN0ZWRJbmRl
eDogICB7IHNlbGVjdC5zZXRTZWxlY3RlZEluZGV4KHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1
cm47IH0KLSAgICAgIGNhc2UgU2VsZWN0VmFsdWU6ICAgICAgICAgICB7IHNlbGVjdC5zZXRWYWx1
ZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgU2VsZWN0TGVuZ3RoOiAgICAgICAgICB7IC8v
IHJlYWQtb25seSBhY2NvcmRpbmcgdG8gdGhlIE5TIHNwZWMsIGJ1dCB3ZWJwYWdlcyBuZWVkIGl0
IHdyaXRlYWJsZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmpl
Y3QgY29sbCA9IE9iamVjdDo6ZHluYW1pY0Nhc3QoIGdldFNlbGVjdEhUTUxDb2xsZWN0aW9uKGV4
ZWMsIHNlbGVjdC5vcHRpb25zSFRNTENvbGxlY3Rpb24oKS5nZXQoKSwgJnNlbGVjdCkgKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhY29sbC5pc051bGwo
KSApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbC5wdXQo
ZXhlYyxsZW5ndGhQcm9wZXJ0eU5hbWUsdmFsdWUpOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAvLyByZWFkLW9ubHk6IGZvcm0KLSAgICAgIC8vIHJlYWQtb25seTog
b3B0aW9ucwotICAgICAgY2FzZSBTZWxlY3REaXNhYmxlZDogICAgICAgIHsgc2VsZWN0LnNldERp
c2FibGVkKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBTZWxl
Y3RNdWx0aXBsZTogICAgICAgIHsgc2VsZWN0LnNldE11bHRpcGxlKHZhbHVlLnRvQm9vbGVhbihl
eGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBTZWxlY3ROYW1lOiAgICAgICAgICAgIHsgc2Vs
ZWN0LnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFNlbGVjdFNpemU6ICAgICAg
ICAgICAgeyBzZWxlY3Quc2V0U2l6ZSh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9Ci0g
ICAgICBjYXNlIFNlbGVjdFRhYkluZGV4OiAgICAgICAgeyBzZWxlY3Quc2V0VGFiSW5kZXgodmFs
dWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQotICAgICAgfQotICAgIH0KLSAgICBicmVhazsK
LSAgICBjYXNlIElEX09QVEdST1VQOiB7Ci0gICAgICBIVE1MT3B0R3JvdXBFbGVtZW50SW1wbCAm
b3B0Z3JvdXAgPSBzdGF0aWNfY2FzdDxIVE1MT3B0R3JvdXBFbGVtZW50SW1wbCAmPihlbGVtZW50
KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgT3B0R3JvdXBEaXNhYmxlZDog
ICAgICAgIHsgb3B0Z3JvdXAuc2V0RGlzYWJsZWQodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0
dXJuOyB9Ci0gICAgICBjYXNlIE9wdEdyb3VwTGFiZWw6ICAgICAgICAgICB7IG9wdGdyb3VwLnNl
dExhYmVsKHN0cik7IHJldHVybjsgfQotICAgICAgfQotICAgIH0KLSAgICBicmVhazsKLSAgICBj
YXNlIElEX09QVElPTjogewotICAgICAgSFRNTE9wdGlvbkVsZW1lbnRJbXBsICZvcHRpb24gPSBz
dGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0
Y2ggKHRva2VuKSB7Ci0gICAgICAvLyByZWFkLW9ubHk6IGZvcm0KLSAgICAgIGNhc2UgT3B0aW9u
RGVmYXVsdFNlbGVjdGVkOiB7IG9wdGlvbi5zZXREZWZhdWx0U2VsZWN0ZWQodmFsdWUudG9Cb29s
ZWFuKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIE9wdGlvblRleHQ6ICAgICAgICAgICAg
eyBvcHRpb24uc2V0VGV4dChzdHIsIGV4Y2VwdGlvbik7IHJldHVybjsgfQotICAgICAgLy8gcmVh
ZC1vbmx5OiBpbmRleAotICAgICAgY2FzZSBPcHRpb25EaXNhYmxlZDogICAgICAgIHsgb3B0aW9u
LnNldERpc2FibGVkKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2Fz
ZSBPcHRpb25MYWJlbDogICAgICAgICAgIHsgb3B0aW9uLnNldExhYmVsKHN0cik7IHJldHVybjsg
fQotICAgICAgY2FzZSBPcHRpb25TZWxlY3RlZDogICAgICAgIHsgb3B0aW9uLnNldFNlbGVjdGVk
KHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBPcHRpb25WYWx1
ZTogICAgICAgICAgIHsgb3B0aW9uLnNldFZhbHVlKHN0cik7IHJldHVybjsgfQotICAgICAgfQot
ICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0lOUFVUOiB7Ci0gICAgICBIVE1MSW5wdXRF
bGVtZW50SW1wbCAmaW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50SW1wbCAmPihl
bGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgSW5wdXREZWZhdWx0
VmFsdWU6ICAgIHsgaW5wdXQuc2V0RGVmYXVsdFZhbHVlKHN0cik7IHJldHVybjsgfQotICAgICAg
Y2FzZSBJbnB1dERlZmF1bHRDaGVja2VkOiAgeyBpbnB1dC5zZXREZWZhdWx0Q2hlY2tlZCh2YWx1
ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KLSAgICAgIC8vIHJlYWQtb25seTogZm9ybQot
ICAgICAgY2FzZSBJbnB1dEFjY2VwdDogICAgICAgICAgeyBpbnB1dC5zZXRBY2NlcHQoc3RyKTsg
cmV0dXJuOyB9Ci0gICAgICBjYXNlIElucHV0QWNjZXNzS2V5OiAgICAgICB7IGlucHV0LnNldEFj
Y2Vzc0tleShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSW5wdXRBbGlnbjogICAgICAgICAg
IHsgaW5wdXQuc2V0QWxpZ24oc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElucHV0QWx0OiAg
ICAgICAgICAgICB7IGlucHV0LnNldEFsdChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSW5w
dXRDaGVja2VkOiAgICAgICAgIHsgaW5wdXQuc2V0Q2hlY2tlZCh2YWx1ZS50b0Jvb2xlYW4oZXhl
YykpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSW5wdXREaXNhYmxlZDogICAgICAgIHsgaW5wdXQu
c2V0RGlzYWJsZWQodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNl
IElucHV0TWF4TGVuZ3RoOiAgICAgICB7IGlucHV0LnNldE1heExlbmd0aCh2YWx1ZS50b0ludDMy
KGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElucHV0TmFtZTogICAgICAgICAgICB7IGlu
cHV0LnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElucHV0UmVhZE9ubHk6ICAg
ICAgICB7IGlucHV0LnNldFJlYWRPbmx5KHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsg
fQotICAgICAgY2FzZSBJbnB1dFNpemU6ICAgICAgICAgICAgeyBpbnB1dC5zZXRTaXplKHN0cik7
IHJldHVybjsgfQotICAgICAgY2FzZSBJbnB1dFNyYzogICAgICAgICAgICAgeyBpbnB1dC5zZXRT
cmMoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElucHV0VGFiSW5kZXg6ICAgICAgICB7IGlu
cHV0LnNldFRhYkluZGV4KHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNh
c2UgSW5wdXRUeXBlOiAgICAgICAgICAgIHsgaW5wdXQuc2V0VHlwZShzdHIpOyByZXR1cm47IH0K
LSAgICAgIGNhc2UgSW5wdXRVc2VNYXA6ICAgICAgICAgIHsgaW5wdXQuc2V0VXNlTWFwKHN0cik7
IHJldHVybjsgfQotICAgICAgY2FzZSBJbnB1dFZhbHVlOiAgICAgICAgICAgeyBpbnB1dC5zZXRW
YWx1ZShzdHIpOyByZXR1cm47IH0KLSAgICAgIH0KKyAgICAgICAgY2FzZSBMaW5rRGlzYWJsZWQ6
ICAgICAgICB7IGxpbmsuc2V0RGlzYWJsZWQodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJu
OyB9CisgICAgICAgIGNhc2UgTGlua0NoYXJzZXQ6ICAgICAgICAgeyBsaW5rLnNldENoYXJzZXQo
c3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgTGlua0hyZWY6ICAgICAgICAgICAgeyBsaW5r
LnNldEhyZWYoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgTGlua0hyZWZMYW5nOiAgICAg
ICAgeyBsaW5rLnNldEhyZWZsYW5nKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIExpbmtN
ZWRpYTogICAgICAgICAgIHsgbGluay5zZXRNZWRpYShzdHIpOyByZXR1cm47IH0KKyAgICAgICAg
Y2FzZSBMaW5rUmVsOiAgICAgICAgICAgICB7IGxpbmsuc2V0UmVsKHN0cik7IHJldHVybjsgfQor
ICAgICAgICBjYXNlIExpbmtSZXY6ICAgICAgICAgICAgIHsgbGluay5zZXRSZXYoc3RyKTsgcmV0
dXJuOyB9CisgICAgICAgIGNhc2UgTGlua1RhcmdldDogICAgICAgICAgeyBsaW5rLnNldFRhcmdl
dChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBMaW5rVHlwZTogICAgICAgICAgICB7IGxp
bmsuc2V0VHlwZShzdHIpOyByZXR1cm47IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJ
RF9URVhUQVJFQTogewotICAgICAgSFRNTFRleHRBcmVhRWxlbWVudEltcGwgJnRleHRhcmVhID0g
c3RhdGljX2Nhc3Q8SFRNTFRleHRBcmVhRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBz
d2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIFRleHRBcmVhRGVmYXVsdFZhbHVlOiAgICB7IHRl
eHRhcmVhLnNldERlZmF1bHRWYWx1ZShzdHIpOyByZXR1cm47IH0KLSAgICAgIC8vIHJlYWQtb25s
eTogZm9ybQotICAgICAgY2FzZSBUZXh0QXJlYUFjY2Vzc0tleTogICAgICAgeyB0ZXh0YXJlYS5z
ZXRBY2Nlc3NLZXkoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRleHRBcmVhQ29sczogICAg
ICAgICAgICB7IHRleHRhcmVhLnNldENvbHModmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsg
fQotICAgICAgY2FzZSBUZXh0QXJlYURpc2FibGVkOiAgICAgICAgeyB0ZXh0YXJlYS5zZXREaXNh
YmxlZCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGV4dEFy
ZWFOYW1lOiAgICAgICAgICAgIHsgdGV4dGFyZWEuc2V0TmFtZShzdHIpOyByZXR1cm47IH0KLSAg
ICAgIGNhc2UgVGV4dEFyZWFSZWFkT25seTogICAgICAgIHsgdGV4dGFyZWEuc2V0UmVhZE9ubHko
dmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRleHRBcmVhUm93
czogICAgICAgICAgICB7IHRleHRhcmVhLnNldFJvd3ModmFsdWUudG9JbnQzMihleGVjKSk7IHJl
dHVybjsgfQotICAgICAgY2FzZSBUZXh0QXJlYVRhYkluZGV4OiAgICAgICAgeyB0ZXh0YXJlYS5z
ZXRUYWJJbmRleCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICAvLyByZWFk
LW9ubHk6IHR5cGUKLSAgICAgIGNhc2UgVGV4dEFyZWFWYWx1ZTogICAgICAgICAgIHsgdGV4dGFy
ZWEuc2V0VmFsdWUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICB9Ci0gICAgfQotICAgIGJyZWFrOwot
ICAgIGNhc2UgSURfQlVUVE9OOiB7Ci0gICAgICBIVE1MQnV0dG9uRWxlbWVudEltcGwgJmJ1dHRv
biA9IHN0YXRpY19jYXN0PEhUTUxCdXR0b25FbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAg
IHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIC8vIHJlYWQtb25seTogZm9ybQotICAgICAgY2FzZSBC
dXR0b25BY2Nlc3NLZXk6ICAgICAgIHsgYnV0dG9uLnNldEFjY2Vzc0tleShzdHIpOyByZXR1cm47
IH0KLSAgICAgIGNhc2UgQnV0dG9uRGlzYWJsZWQ6ICAgICAgICB7IGJ1dHRvbi5zZXREaXNhYmxl
ZCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQnV0dG9uTmFt
ZTogICAgICAgICAgICB7IGJ1dHRvbi5zZXROYW1lKHN0cik7IHJldHVybjsgfQotICAgICAgY2Fz
ZSBCdXR0b25UYWJJbmRleDogICAgICAgIHsgYnV0dG9uLnNldFRhYkluZGV4KHZhbHVlLnRvSW50
MzIoZXhlYykpOyByZXR1cm47IH0KLSAgICAgIC8vIHJlYWQtb25seTogdHlwZQotICAgICAgY2Fz
ZSBCdXR0b25WYWx1ZTogICAgICAgICAgIHsgYnV0dG9uLnNldFZhbHVlKHN0cik7IHJldHVybjsg
fQotICAgICAgfQotICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0xBQkVMOiB7Ci0gICAg
ICBIVE1MTGFiZWxFbGVtZW50SW1wbCAmbGFiZWwgPSBzdGF0aWNfY2FzdDxIVE1MTGFiZWxFbGVt
ZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIC8vIHJl
YWQtb25seTogZm9ybQotICAgICAgY2FzZSBMYWJlbEFjY2Vzc0tleTogICAgICAgeyBsYWJlbC5z
ZXRBY2Nlc3NLZXkoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIExhYmVsSHRtbEZvcjogICAg
ICAgICB7IGxhYmVsLnNldEh0bWxGb3Ioc3RyKTsgcmV0dXJuOyB9Ci0gICAgICB9Ci0gICAgfQot
ICAgIGJyZWFrOwotICAgIGNhc2UgSURfTEVHRU5EOiB7Ci0gICAgICBIVE1MTGVnZW5kRWxlbWVu
dEltcGwgJmxlZ2VuZCA9IHN0YXRpY19jYXN0PEhUTUxMZWdlbmRFbGVtZW50SW1wbCAmPihlbGVt
ZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIC8vIHJlYWQtb25seTogZm9ybQot
ICAgICAgY2FzZSBMZWdlbmRBY2Nlc3NLZXk6ICAgICAgIHsgbGVnZW5kLnNldEFjY2Vzc0tleShz
dHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgTGVnZW5kQWxpZ246ICAgICAgICAgICB7IGxlZ2Vu
ZC5zZXRBbGlnbihzdHIpOyByZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVu
dDo6dGl0bGVTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2
YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICAgSFRNTFRpdGxlRWxlbWVu
dEltcGwmIHRpdGxlID0gKnN0YXRpY19jYXN0PEhUTUxUaXRsZUVsZW1lbnRJbXBsKj4oaW1wbCgp
KTsKKyAgICAgaWYgKHRva2VuID09IFRpdGxlVGV4dCkKKyAgICAgICAgdGl0bGUuc2V0VGV4dChz
dHIpOworfQorCit2b2lkIEhUTUxFbGVtZW50OjptZXRhU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIp
Cit7CisgICAgSFRNTE1ldGFFbGVtZW50SW1wbCYgbWV0YSA9ICpzdGF0aWNfY2FzdDxIVE1MTWV0
YUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNh
c2UgTWV0YUNvbnRlbnQ6ICAgICAgICAgeyBtZXRhLnNldENvbnRlbnQoc3RyKTsgcmV0dXJuOyB9
CisgICAgICAgIGNhc2UgTWV0YUh0dHBFcXVpdjogICAgICAgeyBtZXRhLnNldEh0dHBFcXVpdihz
dHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBNZXRhTmFtZTogICAgICAgICAgICB7IG1ldGEu
c2V0TmFtZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBNZXRhU2NoZW1lOiAgICAgICAg
ICB7IG1ldGEuc2V0U2NoZW1lKHN0cik7IHJldHVybjsgfQogICAgIH0KLSAgICBicmVhazsKLSAg
ICBjYXNlIElEX1VMOiB7Ci0gICAgICBIVE1MVUxpc3RFbGVtZW50SW1wbCAmdUxpc3QgPSBzdGF0
aWNfY2FzdDxIVE1MVUxpc3RFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAo
dG9rZW4pIHsKLSAgICAgIGNhc2UgVUxpc3RDb21wYWN0OiAgICAgICAgIHsgdUxpc3Quc2V0Q29t
cGFjdCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVUxpc3RU
eXBlOiAgICAgICAgICAgIHsgdUxpc3Quc2V0VHlwZShzdHIpOyByZXR1cm47IH0KLSAgICAgIH0K
K30KKwordm9pZCBIVE1MRWxlbWVudDo6YmFzZVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQorewor
ICAgIEhUTUxCYXNlRWxlbWVudEltcGwmIGJhc2UgPSAqc3RhdGljX2Nhc3Q8SFRNTEJhc2VFbGVt
ZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNlIEJh
c2VIcmVmOiAgICAgICAgICAgIHsgYmFzZS5zZXRIcmVmKHN0cik7IHJldHVybjsgfQorICAgICAg
ICBjYXNlIEJhc2VUYXJnZXQ6ICAgICAgICAgIHsgYmFzZS5zZXRUYXJnZXQoc3RyKTsgcmV0dXJu
OyB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfT0w6IHsKLSAgICAgIEhUTUxPTGlz
dEVsZW1lbnRJbXBsICZvTGlzdCA9IHN0YXRpY19jYXN0PEhUTUxPTGlzdEVsZW1lbnRJbXBsICY+
KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgY2FzZSBPTGlzdENvbXBh
Y3Q6ICAgICAgICAgeyBvTGlzdC5zZXRDb21wYWN0KHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJl
dHVybjsgfQotICAgICAgY2FzZSBPTGlzdFN0YXJ0OiAgICAgICAgICAgeyBvTGlzdC5zZXRTdGFy
dCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIE9MaXN0VHlwZTog
ICAgICAgICAgICB7IG9MaXN0LnNldFR5cGUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICB9Cit9CisK
K3ZvaWQgSFRNTEVsZW1lbnQ6OmlzSW5kZXhTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAg
ICBIVE1MSXNJbmRleEVsZW1lbnRJbXBsJiBpc2luZGV4ID0gKnN0YXRpY19jYXN0PEhUTUxJc0lu
ZGV4RWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIGlmICh0b2tlbiA9PSBJc0luZGV4UHJvbXB0
KQorICAgICAgICBpc2luZGV4LnNldFByb21wdChzdHIpOworfQorCit2b2lkIEhUTUxFbGVtZW50
OjpzdHlsZVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZh
bHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxTdHlsZUVsZW1lbnRJ
bXBsJiBzdHlsZSA9ICpzdGF0aWNfY2FzdDxIVE1MU3R5bGVFbGVtZW50SW1wbCo+KGltcGwoKSk7
CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNlIFN0eWxlRGlzYWJsZWQ6ICAgICAg
ICB7IHN0eWxlLnNldERpc2FibGVkKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQor
ICAgICAgICBjYXNlIFN0eWxlTWVkaWE6ICAgICAgICAgICB7IHN0eWxlLnNldE1lZGlhKHN0cik7
IHJldHVybjsgfQorICAgICAgICBjYXNlIFN0eWxlVHlwZTogICAgICAgICAgICB7IHN0eWxlLnNl
dFR5cGUoc3RyKTsgcmV0dXJuOyB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfREw6
IHsKLSAgICAgIEhUTUxETGlzdEVsZW1lbnRJbXBsICZkTGlzdCA9IHN0YXRpY19jYXN0PEhUTUxE
TGlzdEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAg
ICAgY2FzZSBETGlzdENvbXBhY3Q6ICAgICAgICAgeyBkTGlzdC5zZXRDb21wYWN0KHZhbHVlLnRv
Qm9vbGVhbihleGVjKSk7IHJldHVybjsgfQotICAgICAgfQorfQorCit2b2lkIEhUTUxFbGVtZW50
Ojpib2R5U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFs
dWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTEJvZHlFbGVtZW50SW1w
bCYgYm9keSA9ICpzdGF0aWNfY2FzdDxIVE1MQm9keUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAg
ICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgQm9keUFMaW5rOiAgICAgICAgICAgeyBi
b2R5LnNldEFMaW5rKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEJvZHlCYWNrZ3JvdW5k
OiAgICAgIHsgYm9keS5zZXRCYWNrZ3JvdW5kKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNl
IEJvZHlCZ0NvbG9yOiAgICAgICAgIHsgYm9keS5zZXRCZ0NvbG9yKHN0cik7IHJldHVybjsgfQor
ICAgICAgICBjYXNlIEJvZHlMaW5rOiAgICAgICAgICAgIHsgYm9keS5zZXRMaW5rKHN0cik7IHJl
dHVybjsgfQorICAgICAgICBjYXNlIEJvZHlUZXh0OiAgICAgICAgICAgIHsgYm9keS5zZXRUZXh0
KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEJvZHlWTGluazogICAgICAgICAgIHsgYm9k
eS5zZXRWTGluayhzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBCb2R5U2Nyb2xsTGVmdDoK
KyAgICAgICAgY2FzZSBCb2R5U2Nyb2xsVG9wOiB7CisgICAgICAgICAgICBRU2Nyb2xsVmlldyog
c3ZpZXcgPSBib2R5Lm93bmVyRG9jdW1lbnQoKS0+dmlldygpOworICAgICAgICAgICAgaWYgKHN2
aWV3KSB7CisgICAgICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBkb2N1bWVudCdzIGxheW91dCBi
ZWZvcmUgd2UgY29tcHV0ZSB0aGVzZSBhdHRyaWJ1dGVzLgorICAgICAgICAgICAgICAgIGlmIChE
b2N1bWVudEltcGwqIGRvYyA9IGJvZHkuZ2V0RG9jdW1lbnQoKSkKKyAgICAgICAgICAgICAgICAg
ICAgZG9jLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKKyAgICAgICAg
ICAgICAgICBpZiAodG9rZW4gPT0gQm9keVNjcm9sbExlZnQpCisgICAgICAgICAgICAgICAgICAg
IHN2aWV3LT5zZXRDb250ZW50c1Bvcyh2YWx1ZS50b0ludDMyKGV4ZWMpLCBzdmlldy0+Y29udGVu
dHNZKCkpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgc3ZpZXct
PnNldENvbnRlbnRzUG9zKHN2aWV3LT5jb250ZW50c1goKSwgdmFsdWUudG9JbnQzMihleGVjKSk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAgICB9Ci0g
ICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9ESVI6IHsKLSAgICAgIEhUTUxEaXJlY3RvcnlFbGVtZW50
SW1wbCAmZGlyZWN0b3J5ID0gc3RhdGljX2Nhc3Q8SFRNTERpcmVjdG9yeUVsZW1lbnRJbXBsICY+
KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgY2FzZSBEaXJlY3RvcnlD
b21wYWN0OiAgICAgeyBkaXJlY3Rvcnkuc2V0Q29tcGFjdCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykp
OyByZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6Zm9ybVNldHRlcihF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006
OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxGb3JtRWxlbWVudEltcGwmIGZvcm0gPSAqc3Rh
dGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tl
bikgeworICAgICAgICAvLyByZWFkLW9ubHk6IGVsZW1lbnRzCisgICAgICAgIC8vIHJlYWQtb25s
eTogbGVuZ3RoCisgICAgICAgIGNhc2UgRm9ybU5hbWU6ICAgICAgICAgICAgeyBmb3JtLnNldE5h
bWUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgRm9ybUFjY2VwdENoYXJzZXQ6ICAgeyBm
b3JtLnNldEFjY2VwdENoYXJzZXQoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgRm9ybUFj
dGlvbjogICAgICAgICAgeyBmb3JtLnNldEFjdGlvbihzdHIpOyByZXR1cm47IH0KKyAgICAgICAg
Y2FzZSBGb3JtRW5jVHlwZTogICAgICAgICB7IGZvcm0uc2V0RW5jdHlwZShzdHIpOyByZXR1cm47
IH0KKyAgICAgICAgY2FzZSBGb3JtTWV0aG9kOiAgICAgICAgICB7IGZvcm0uc2V0TWV0aG9kKHN0
cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEZvcm1UYXJnZXQ6ICAgICAgICAgIHsgZm9ybS5z
ZXRUYXJnZXQoc3RyKTsgcmV0dXJuOyB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURf
TUVOVTogewotICAgICAgSFRNTE1lbnVFbGVtZW50SW1wbCAmbWVudSA9IHN0YXRpY19jYXN0PEhU
TUxNZW51RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0g
ICAgICBjYXNlIE1lbnVDb21wYWN0OiAgICAgICAgIHsgbWVudS5zZXRDb21wYWN0KHZhbHVlLnRv
Qm9vbGVhbihleGVjKSk7IHJldHVybjsgfQotICAgICAgfQorfQorCit2b2lkIEhUTUxFbGVtZW50
OjpzZWxlY3RTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2
YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MU2VsZWN0RWxlbWVu
dEltcGwmIHNlbGVjdCA9ICpzdGF0aWNfY2FzdDxIVE1MU2VsZWN0RWxlbWVudEltcGwqPihpbXBs
KCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgLy8gcmVhZC1vbmx5OiB0eXBlCisg
ICAgICAgIGNhc2UgU2VsZWN0U2VsZWN0ZWRJbmRleDogICB7IHNlbGVjdC5zZXRTZWxlY3RlZElu
ZGV4KHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBTZWxlY3RW
YWx1ZTogICAgICAgICAgIHsgc2VsZWN0LnNldFZhbHVlKHN0cik7IHJldHVybjsgfQorICAgICAg
ICBjYXNlIFNlbGVjdExlbmd0aDogICAgICAgICAgeyAvLyByZWFkLW9ubHkgYWNjb3JkaW5nIHRv
IHRoZSBOUyBzcGVjLCBidXQgd2VicGFnZXMgbmVlZCBpdCB3cml0ZWFibGUKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0IGNvbGwgPSBPYmplY3Q6OmR5bmFt
aWNDYXN0KCBnZXRTZWxlY3RIVE1MQ29sbGVjdGlvbihleGVjLCBzZWxlY3Qub3B0aW9uc0hUTUxD
b2xsZWN0aW9uKCkuZ2V0KCksICZzZWxlY3QpICk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICggIWNvbGwuaXNOdWxsKCkgKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGwucHV0KGV4ZWMsbGVuZ3RoUHJvcGVydHlOYW1l
LHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAvLyByZWFk
LW9ubHk6IGZvcm0KKyAgICAgICAgLy8gcmVhZC1vbmx5OiBvcHRpb25zCisgICAgICAgIGNhc2Ug
U2VsZWN0RGlzYWJsZWQ6ICAgICAgICB7IHNlbGVjdC5zZXREaXNhYmxlZCh2YWx1ZS50b0Jvb2xl
YW4oZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBTZWxlY3RNdWx0aXBsZTogICAgICAg
IHsgc2VsZWN0LnNldE11bHRpcGxlKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQor
ICAgICAgICBjYXNlIFNlbGVjdE5hbWU6ICAgICAgICAgICAgeyBzZWxlY3Quc2V0TmFtZShzdHIp
OyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBTZWxlY3RTaXplOiAgICAgICAgICAgIHsgc2VsZWN0
LnNldFNpemUodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIFNl
bGVjdFRhYkluZGV4OiAgICAgICAgeyBzZWxlY3Quc2V0VGFiSW5kZXgodmFsdWUudG9JbnQzMihl
eGVjKSk7IHJldHVybjsgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0xJOiB7Ci0g
ICAgICBIVE1MTElFbGVtZW50SW1wbCAmbGkgPSBzdGF0aWNfY2FzdDxIVE1MTElFbGVtZW50SW1w
bCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgTElUeXBl
OiAgICAgICAgICAgIHsgbGkuc2V0VHlwZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgTElW
YWx1ZTogICAgICAgICAgIHsgbGkuc2V0VmFsdWUodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVy
bjsgfQotICAgICAgfQorfQorCit2b2lkIEhUTUxFbGVtZW50OjpvcHRHcm91cFNldHRlcihFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRP
TVN0cmluZyYgc3RyKQoreworICAgIEhUTUxPcHRHcm91cEVsZW1lbnRJbXBsJiBvcHRncm91cCA9
ICpzdGF0aWNfY2FzdDxIVE1MT3B0R3JvdXBFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dp
dGNoICh0b2tlbikgeworICAgICAgICBjYXNlIE9wdEdyb3VwRGlzYWJsZWQ6ICAgICAgICB7IG9w
dGdyb3VwLnNldERpc2FibGVkKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQorICAg
ICAgICBjYXNlIE9wdEdyb3VwTGFiZWw6ICAgICAgICAgICB7IG9wdGdyb3VwLnNldExhYmVsKHN0
cik7IHJldHVybjsgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0RJVjogewotICAg
ICAgSFRNTERpdkVsZW1lbnRJbXBsICZkaXYgPSBzdGF0aWNfY2FzdDxIVE1MRGl2RWxlbWVudElt
cGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIERpdkFs
aWduOiAgICAgICAgICAgeyBkaXYuc2V0QWxpZ24oc3RyKTsgcmV0dXJuOyB9Ci0gICAgICB9Cit9
CisKK3ZvaWQgSFRNTEVsZW1lbnQ6Om9wdGlvblNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQorewor
ICAgIERPTUV4Y2VwdGlvblRyYW5zbGF0b3IgZXhjZXB0aW9uKGV4ZWMpOworICAgIEhUTUxPcHRp
b25FbGVtZW50SW1wbCYgb3B0aW9uID0gKnN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50SW1w
bCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICAvLyByZWFkLW9ubHk6
IGZvcm0KKyAgICAgICAgY2FzZSBPcHRpb25EZWZhdWx0U2VsZWN0ZWQ6IHsgb3B0aW9uLnNldERl
ZmF1bHRTZWxlY3RlZCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAg
Y2FzZSBPcHRpb25UZXh0OiAgICAgICAgICAgIHsgb3B0aW9uLnNldFRleHQoc3RyLCBleGNlcHRp
b24pOyByZXR1cm47IH0KKyAgICAgICAgLy8gcmVhZC1vbmx5OiBpbmRleAorICAgICAgICBjYXNl
IE9wdGlvbkRpc2FibGVkOiAgICAgICAgeyBvcHRpb24uc2V0RGlzYWJsZWQodmFsdWUudG9Cb29s
ZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgT3B0aW9uTGFiZWw6ICAgICAgICAg
ICB7IG9wdGlvbi5zZXRMYWJlbChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBPcHRpb25T
ZWxlY3RlZDogICAgICAgIHsgb3B0aW9uLnNldFNlbGVjdGVkKHZhbHVlLnRvQm9vbGVhbihleGVj
KSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIE9wdGlvblZhbHVlOiAgICAgICAgICAgeyBvcHRp
b24uc2V0VmFsdWUoc3RyKTsgcmV0dXJuOyB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2Ug
SURfUDogewotICAgICAgSFRNTFBhcmFncmFwaEVsZW1lbnRJbXBsICZwYXJhZ3JhcGggPSBzdGF0
aWNfY2FzdDxIVE1MUGFyYWdyYXBoRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0
Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIFBhcmFncmFwaEFsaWduOiAgICAgeyBwYXJhZ3JhcGgu
c2V0QWxpZ24oc3RyKTsgcmV0dXJuOyB9Ci0gICAgICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6
OmlucHV0U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFs
dWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTElucHV0RWxlbWVudElt
cGwmIGlucHV0ID0gKnN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsK
KyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgSW5wdXREZWZhdWx0VmFsdWU6ICAg
IHsgaW5wdXQuc2V0RGVmYXVsdFZhbHVlKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIElu
cHV0RGVmYXVsdENoZWNrZWQ6ICB7IGlucHV0LnNldERlZmF1bHRDaGVja2VkKHZhbHVlLnRvQm9v
bGVhbihleGVjKSk7IHJldHVybjsgfQorICAgICAgICAvLyByZWFkLW9ubHk6IGZvcm0KKyAgICAg
ICAgY2FzZSBJbnB1dEFjY2VwdDogICAgICAgICAgeyBpbnB1dC5zZXRBY2NlcHQoc3RyKTsgcmV0
dXJuOyB9CisgICAgICAgIGNhc2UgSW5wdXRBY2Nlc3NLZXk6ICAgICAgIHsgaW5wdXQuc2V0QWNj
ZXNzS2V5KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIElucHV0QWxpZ246ICAgICAgICAg
ICB7IGlucHV0LnNldEFsaWduKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIElucHV0QWx0
OiAgICAgICAgICAgICB7IGlucHV0LnNldEFsdChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2Fz
ZSBJbnB1dENoZWNrZWQ6ICAgICAgICAgeyBpbnB1dC5zZXRDaGVja2VkKHZhbHVlLnRvQm9vbGVh
bihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIElucHV0RGlzYWJsZWQ6ICAgICAgICB7
IGlucHV0LnNldERpc2FibGVkKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQorICAg
ICAgICBjYXNlIElucHV0TWF4TGVuZ3RoOiAgICAgICB7IGlucHV0LnNldE1heExlbmd0aCh2YWx1
ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgSW5wdXROYW1lOiAgICAg
ICAgICAgIHsgaW5wdXQuc2V0TmFtZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJbnB1
dFJlYWRPbmx5OiAgICAgICAgeyBpbnB1dC5zZXRSZWFkT25seSh2YWx1ZS50b0Jvb2xlYW4oZXhl
YykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJbnB1dFNpemU6ICAgICAgICAgICAgeyBpbnB1
dC5zZXRTaXplKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIElucHV0U3JjOiAgICAgICAg
ICAgICB7IGlucHV0LnNldFNyYyhzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJbnB1dFRh
YkluZGV4OiAgICAgICAgeyBpbnB1dC5zZXRUYWJJbmRleCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsg
cmV0dXJuOyB9CisgICAgICAgIGNhc2UgSW5wdXRUeXBlOiAgICAgICAgICAgIHsgaW5wdXQuc2V0
VHlwZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJbnB1dFVzZU1hcDogICAgICAgICAg
eyBpbnB1dC5zZXRVc2VNYXAoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgSW5wdXRWYWx1
ZTogICAgICAgICAgIHsgaW5wdXQuc2V0VmFsdWUoc3RyKTsgcmV0dXJuOyB9CiAgICAgfQotICAg
IGJyZWFrOwotICAgIGNhc2UgSURfSDE6Ci0gICAgY2FzZSBJRF9IMjoKLSAgICBjYXNlIElEX0gz
OgotICAgIGNhc2UgSURfSDQ6Ci0gICAgY2FzZSBJRF9INToKLSAgICBjYXNlIElEX0g2OiB7Ci0g
ICAgICBIVE1MSGVhZGluZ0VsZW1lbnRJbXBsICZoZWFkaW5nID0gc3RhdGljX2Nhc3Q8SFRNTEhl
YWRpbmdFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAg
ICAgIGNhc2UgSGVhZGluZ0FsaWduOiAgICAgICAgIHsgaGVhZGluZy5zZXRBbGlnbihzdHIpOyBy
ZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6dGV4dEFyZWFTZXR0ZXIo
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9N
OjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MVGV4dEFyZWFFbGVtZW50SW1wbCYgdGV4dGFy
ZWEgPSAqc3RhdGljX2Nhc3Q8SFRNTFRleHRBcmVhRWxlbWVudEltcGwqPihpbXBsKCkpOworICAg
IHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBUZXh0QXJlYURlZmF1bHRWYWx1ZTogICAg
eyB0ZXh0YXJlYS5zZXREZWZhdWx0VmFsdWUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIC8vIHJl
YWQtb25seTogZm9ybQorICAgICAgICBjYXNlIFRleHRBcmVhQWNjZXNzS2V5OiAgICAgICB7IHRl
eHRhcmVhLnNldEFjY2Vzc0tleShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUZXh0QXJl
YUNvbHM6ICAgICAgICAgICAgeyB0ZXh0YXJlYS5zZXRDb2xzKHZhbHVlLnRvSW50MzIoZXhlYykp
OyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUZXh0QXJlYURpc2FibGVkOiAgICAgICAgeyB0ZXh0
YXJlYS5zZXREaXNhYmxlZCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KKyAgICAg
ICAgY2FzZSBUZXh0QXJlYU5hbWU6ICAgICAgICAgICAgeyB0ZXh0YXJlYS5zZXROYW1lKHN0cik7
IHJldHVybjsgfQorICAgICAgICBjYXNlIFRleHRBcmVhUmVhZE9ubHk6ICAgICAgICB7IHRleHRh
cmVhLnNldFJlYWRPbmx5KHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQorICAgICAg
ICBjYXNlIFRleHRBcmVhUm93czogICAgICAgICAgICB7IHRleHRhcmVhLnNldFJvd3ModmFsdWUu
dG9JbnQzMihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRleHRBcmVhVGFiSW5kZXg6
ICAgICAgICB7IHRleHRhcmVhLnNldFRhYkluZGV4KHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1
cm47IH0KKyAgICAgICAgLy8gcmVhZC1vbmx5OiB0eXBlCisgICAgICAgIGNhc2UgVGV4dEFyZWFW
YWx1ZTogICAgICAgICAgIHsgdGV4dGFyZWEuc2V0VmFsdWUoc3RyKTsgcmV0dXJuOyB9CiAgICAg
fQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfQkxPQ0tRVU9URTogewotICAgICAgSFRNTEJsb2Nr
cXVvdGVFbGVtZW50SW1wbCAmYmxvY2txdW90ZSA9IHN0YXRpY19jYXN0PEhUTUxCbG9ja3F1b3Rl
RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBj
YXNlIEJsb2NrUXVvdGVDaXRlOiAgICAgICB7IGJsb2NrcXVvdGUuc2V0Q2l0ZShzdHIpOyByZXR1
cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6YnV0dG9uU2V0dGVyKEV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9N
U3RyaW5nJiBzdHIpCit7CisgICAgSFRNTEJ1dHRvbkVsZW1lbnRJbXBsJiBidXR0b24gPSAqc3Rh
dGljX2Nhc3Q8SFRNTEJ1dHRvbkVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRv
a2VuKSB7CisgICAgICAgIC8vIHJlYWQtb25seTogZm9ybQorICAgICAgICBjYXNlIEJ1dHRvbkFj
Y2Vzc0tleTogICAgICAgeyBidXR0b24uc2V0QWNjZXNzS2V5KHN0cik7IHJldHVybjsgfQorICAg
ICAgICBjYXNlIEJ1dHRvbkRpc2FibGVkOiAgICAgICAgeyBidXR0b24uc2V0RGlzYWJsZWQodmFs
dWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQnV0dG9uTmFtZTog
ICAgICAgICAgICB7IGJ1dHRvbi5zZXROYW1lKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNl
IEJ1dHRvblRhYkluZGV4OiAgICAgICAgeyBidXR0b24uc2V0VGFiSW5kZXgodmFsdWUudG9JbnQz
MihleGVjKSk7IHJldHVybjsgfQorICAgICAgICAvLyByZWFkLW9ubHk6IHR5cGUKKyAgICAgICAg
Y2FzZSBCdXR0b25WYWx1ZTogICAgICAgICAgIHsgYnV0dG9uLnNldFZhbHVlKHN0cik7IHJldHVy
bjsgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX1E6IHsKLSAgICAgIEhUTUxRdW90
ZUVsZW1lbnRJbXBsICZxdW90ZSA9IHN0YXRpY19jYXN0PEhUTUxRdW90ZUVsZW1lbnRJbXBsICY+
KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgY2FzZSBRdW90ZUNpdGU6
ICAgICAgICAgICAgeyBxdW90ZS5zZXRDaXRlKHN0cik7IHJldHVybjsgfQotICAgICAgfQorfQor
Cit2b2lkIEhUTUxFbGVtZW50OjpsYWJlbFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
biwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAg
IEhUTUxMYWJlbEVsZW1lbnRJbXBsJiBsYWJlbCA9ICpzdGF0aWNfY2FzdDxIVE1MTGFiZWxFbGVt
ZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICAvLyByZWFk
LW9ubHk6IGZvcm0KKyAgICAgICAgY2FzZSBMYWJlbEFjY2Vzc0tleTogICAgICAgeyBsYWJlbC5z
ZXRBY2Nlc3NLZXkoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgTGFiZWxIdG1sRm9yOiAg
ICAgICAgIHsgbGFiZWwuc2V0SHRtbEZvcihzdHIpOyByZXR1cm47IH0KICAgICB9Ci0gICAgYnJl
YWs7Ci0gICAgY2FzZSBJRF9QUkU6IHsKLSAgICAgIEhUTUxQcmVFbGVtZW50SW1wbCAmcHJlID0g
c3RhdGljX2Nhc3Q8SFRNTFByZUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNo
ICh0b2tlbikgewotICAgICAgY2FzZSBQcmVXaWR0aDogICAgICAgICAgIHsgcHJlLnNldFdpZHRo
KHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1M
RWxlbWVudDo6ZmllbGRTZXRTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0
IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKK30KKwordm9pZCBI
VE1MRWxlbWVudDo6bGVnZW5kU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25z
dCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTExl
Z2VuZEVsZW1lbnRJbXBsJiBsZWdlbmQgPSAqc3RhdGljX2Nhc3Q8SFRNTExlZ2VuZEVsZW1lbnRJ
bXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIC8vIHJlYWQtb25s
eTogZm9ybQorICAgICAgICBjYXNlIExlZ2VuZEFjY2Vzc0tleTogICAgICAgeyBsZWdlbmQuc2V0
QWNjZXNzS2V5KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIExlZ2VuZEFsaWduOiAgICAg
ICAgICAgeyBsZWdlbmQuc2V0QWxpZ24oc3RyKTsgcmV0dXJuOyB9CiAgICAgfQotICAgIGJyZWFr
OwotICAgIGNhc2UgSURfQlI6IHsKLSAgICAgIEhUTUxCUkVsZW1lbnRJbXBsICZiciA9IHN0YXRp
Y19jYXN0PEhUTUxCUkVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tl
bikgewotICAgICAgY2FzZSBCUkNsZWFyOiAgICAgICAgICAgeyBici5zZXRDbGVhcihzdHIpOyBy
ZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6dUxpc3RTZXR0ZXIoRXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpE
T01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MVUxpc3RFbGVtZW50SW1wbCYgdUxpc3QgPSAqc3Rh
dGljX2Nhc3Q8SFRNTFVMaXN0RWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9r
ZW4pIHsKKyAgICAgICAgY2FzZSBVTGlzdENvbXBhY3Q6ICAgICAgICAgeyB1TGlzdC5zZXRDb21w
YWN0KHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIFVMaXN0
VHlwZTogICAgICAgICAgICB7IHVMaXN0LnNldFR5cGUoc3RyKTsgcmV0dXJuOyB9CiAgICAgfQot
ICAgIGJyZWFrOwotICAgIGNhc2UgSURfQkFTRUZPTlQ6IHsKLSAgICAgIEhUTUxCYXNlRm9udEVs
ZW1lbnRJbXBsICZiYXNlRm9udCA9IHN0YXRpY19jYXN0PEhUTUxCYXNlRm9udEVsZW1lbnRJbXBs
ICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgY2FzZSBCYXNlRm9u
dENvbG9yOiAgICAgICAgICAgeyBiYXNlRm9udC5zZXRDb2xvcihzdHIpOyByZXR1cm47IH0KLSAg
ICAgIGNhc2UgQmFzZUZvbnRGYWNlOiAgICAgICAgICAgIHsgYmFzZUZvbnQuc2V0RmFjZShzdHIp
OyByZXR1cm47IH0KLSAgICAgIGNhc2UgQmFzZUZvbnRTaXplOiAgICAgICAgICAgIHsgYmFzZUZv
bnQuc2V0U2l6ZShzdHIpOyByZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVu
dDo6b0xpc3RTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2
YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MT0xpc3RFbGVtZW50
SW1wbCYgb0xpc3QgPSAqc3RhdGljX2Nhc3Q8SFRNTE9MaXN0RWxlbWVudEltcGwqPihpbXBsKCkp
OworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBPTGlzdENvbXBhY3Q6ICAgICAg
ICAgeyBvTGlzdC5zZXRDb21wYWN0KHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQor
ICAgICAgICBjYXNlIE9MaXN0U3RhcnQ6ICAgICAgICAgICB7IG9MaXN0LnNldFN0YXJ0KHZhbHVl
LnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBPTGlzdFR5cGU6ICAgICAg
ICAgICAgeyBvTGlzdC5zZXRUeXBlKHN0cik7IHJldHVybjsgfQogICAgIH0KLSAgICBicmVhazsK
LSAgICBjYXNlIElEX0ZPTlQ6IHsKLSAgICAgIEhUTUxGb250RWxlbWVudEltcGwgJmZvbnQgPSBz
dGF0aWNfY2FzdDxIVE1MRm9udEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNo
ICh0b2tlbikgewotICAgICAgY2FzZSBGb250Q29sb3I6ICAgICAgICAgICB7IGZvbnQuc2V0Q29s
b3Ioc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEZvbnRGYWNlOiAgICAgICAgICAgIHsgZm9u
dC5zZXRGYWNlKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBGb250U2l6ZTogICAgICAgICAg
ICB7IGZvbnQuc2V0U2l6ZShzdHIpOyByZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1M
RWxlbWVudDo6ZExpc3RTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZh
bHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MRExpc3RF
bGVtZW50SW1wbCYgZExpc3QgPSAqc3RhdGljX2Nhc3Q8SFRNTERMaXN0RWxlbWVudEltcGwqPihp
bXBsKCkpOworICAgIGlmICh0b2tlbiA9PSBETGlzdENvbXBhY3QpCisgICAgICAgIGRMaXN0LnNl
dENvbXBhY3QodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsKK30KKwordm9pZCBIVE1MRWxlbWVudDo6
ZGlyU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUs
IGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTERpcmVjdG9yeUVsZW1lbnRJ
bXBsJiBkaXJlY3RvcnkgPSAqc3RhdGljX2Nhc3Q8SFRNTERpcmVjdG9yeUVsZW1lbnRJbXBsKj4o
aW1wbCgpKTsKKyAgICBpZiAodG9rZW4gPT0gRGlyZWN0b3J5Q29tcGFjdCkKKyAgICAgICAgZGly
ZWN0b3J5LnNldENvbXBhY3QodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsKK30KKwordm9pZCBIVE1M
RWxlbWVudDo6bWVudVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFs
dWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxNZW51RWxl
bWVudEltcGwmIG1lbnUgPSAqc3RhdGljX2Nhc3Q8SFRNTE1lbnVFbGVtZW50SW1wbCo+KGltcGwo
KSk7CisgICAgaWYgKHRva2VuID09IE1lbnVDb21wYWN0KQorICAgICAgICBtZW51LnNldENvbXBh
Y3QodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsKK30KKwordm9pZCBIVE1MRWxlbWVudDo6bGlTZXR0
ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3Qg
RE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MTElFbGVtZW50SW1wbCYgbGkgPSAqc3Rh
dGljX2Nhc3Q8SFRNTExJRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4p
IHsKKyAgICAgICAgY2FzZSBMSVR5cGU6ICAgICAgICAgICAgeyBsaS5zZXRUeXBlKHN0cik7IHJl
dHVybjsgfQorICAgICAgICBjYXNlIExJVmFsdWU6ICAgICAgICAgICB7IGxpLnNldFZhbHVlKHZh
bHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2Fz
ZSBJRF9IUjogewotICAgICAgSFRNTEhSRWxlbWVudEltcGwgJmhyID0gc3RhdGljX2Nhc3Q8SFRN
TEhSRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAg
ICBjYXNlIEhSQWxpZ246ICAgICAgICAgICB7IGhyLnNldEFsaWduKHN0cik7IHJldHVybjsgfQot
ICAgICAgY2FzZSBIUk5vU2hhZGU6ICAgICAgICAgeyBoci5zZXROb1NoYWRlKHZhbHVlLnRvQm9v
bGVhbihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBIUlNpemU6ICAgICAgICAgICAgeyBo
ci5zZXRTaXplKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBIUldpZHRoOiAgICAgICAgICAg
eyBoci5zZXRXaWR0aChzdHIpOyByZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxl
bWVudDo6ZGl2U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYg
dmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTERpdkVsZW1lbnRJ
bXBsJiBkaXYgPSAqc3RhdGljX2Nhc3Q8SFRNTERpdkVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAg
ICBpZiAodG9rZW4gPT0gRGl2QWxpZ24pCisgICAgICAgIGRpdi5zZXRBbGlnbihzdHIpOworfQor
Cit2b2lkIEhUTUxFbGVtZW50OjpwYXJhZ3JhcGhTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sK
KyAgICBIVE1MUGFyYWdyYXBoRWxlbWVudEltcGwmIHBhcmFncmFwaCA9ICpzdGF0aWNfY2FzdDxI
VE1MUGFyYWdyYXBoRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIGlmICh0b2tlbiA9PSBQYXJh
Z3JhcGhBbGlnbikKKyAgICAgICAgcGFyYWdyYXBoLnNldEFsaWduKHN0cik7Cit9CisKK3ZvaWQg
SFRNTEVsZW1lbnQ6OmhlYWRpbmdTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNv
bnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1M
SGVhZGluZ0VsZW1lbnRJbXBsJiBoZWFkaW5nID0gKnN0YXRpY19jYXN0PEhUTUxIZWFkaW5nRWxl
bWVudEltcGwqPihpbXBsKCkpOworICAgIGlmICh0b2tlbiA9PSBIZWFkaW5nQWxpZ24pCisgICAg
ICAgIGhlYWRpbmcuc2V0QWxpZ24oc3RyKTsKK30KKwordm9pZCBIVE1MRWxlbWVudDo6YmxvY2tR
dW90ZVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVl
LCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxCbG9ja3F1b3RlRWxlbWVu
dEltcGwmIGJsb2NrUXVvdGUgPSAqc3RhdGljX2Nhc3Q8SFRNTEJsb2NrcXVvdGVFbGVtZW50SW1w
bCo+KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IEJsb2NrUXVvdGVDaXRlKQorICAgICAgICBi
bG9ja1F1b3RlLnNldENpdGUoc3RyKTsKK30KKwordm9pZCBIVE1MRWxlbWVudDo6cXVvdGVTZXR0
ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3Qg
RE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MUXVvdGVFbGVtZW50SW1wbCYgcXVvdGUg
PSAqc3RhdGljX2Nhc3Q8SFRNTFF1b3RlRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIGlmICh0
b2tlbiA9PSBRdW90ZUNpdGUpCisgICAgICAgIHF1b3RlLnNldENpdGUoc3RyKTsKK30KKwordm9p
ZCBIVE1MRWxlbWVudDo6cHJlU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25z
dCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgLy8gRklY
TUU6IEFkZCBzdXBwb3J0IGZvciAnd3JhcCcgd2hlbiB3aGl0ZS1zcGFjZTogcHJlLXdyYXAgaXMg
aW1wbGVtZW50ZWQuCisgICAgSFRNTFByZUVsZW1lbnRJbXBsJiBwcmUgPSAqc3RhdGljX2Nhc3Q8
SFRNTFByZUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBpZiAodG9rZW4gPT0gUHJlV2lkdGgp
CisgICAgICAgIHByZS5zZXRXaWR0aCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsKK30KKwordm9pZCBI
VE1MRWxlbWVudDo6YnJTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZh
bHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MQlJFbGVt
ZW50SW1wbCYgYnIgPSAqc3RhdGljX2Nhc3Q8SFRNTEJSRWxlbWVudEltcGwqPihpbXBsKCkpOwor
ICAgIGlmICh0b2tlbiA9PSBCUkNsZWFyKQorICAgICAgICBici5zZXRDbGVhcihzdHIpOworfQor
Cit2b2lkIEhUTUxFbGVtZW50OjpiYXNlRm9udFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQorewor
ICAgIEhUTUxCYXNlRm9udEVsZW1lbnRJbXBsJiBiYXNlRm9udCA9ICpzdGF0aWNfY2FzdDxIVE1M
QmFzZUZvbnRFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAg
ICAgICBjYXNlIEJhc2VGb250Q29sb3I6ICAgICAgICAgICB7IGJhc2VGb250LnNldENvbG9yKHN0
cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEJhc2VGb250RmFjZTogICAgICAgICAgICB7IGJh
c2VGb250LnNldEZhY2Uoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQmFzZUZvbnRTaXpl
OiAgICAgICAgICAgIHsgYmFzZUZvbnQuc2V0U2l6ZShzdHIpOyByZXR1cm47IH0KICAgICB9Ci0g
ICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9JTlM6Ci0gICAgY2FzZSBJRF9ERUw6IHsKLSAgICAgIEhU
TUxNb2RFbGVtZW50SW1wbCAmbW9kID0gc3RhdGljX2Nhc3Q8SFRNTE1vZEVsZW1lbnRJbXBsICY+
KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgY2FzZSBNb2RDaXRlOiAg
ICAgICAgICAgIHsgbW9kLnNldENpdGUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIE1vZERh
dGVUaW1lOiAgICAgICAgeyBtb2Quc2V0RGF0ZVRpbWUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICB9
Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OmZvbnRTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sK
KyAgICBIVE1MRm9udEVsZW1lbnRJbXBsJiBmb250ID0gKnN0YXRpY19jYXN0PEhUTUxGb250RWxl
bWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBG
b250Q29sb3I6ICAgICAgICAgICB7IGZvbnQuc2V0Q29sb3Ioc3RyKTsgcmV0dXJuOyB9CisgICAg
ICAgIGNhc2UgRm9udEZhY2U6ICAgICAgICAgICAgeyBmb250LnNldEZhY2Uoc3RyKTsgcmV0dXJu
OyB9CisgICAgICAgIGNhc2UgRm9udFNpemU6ICAgICAgICAgICAgeyBmb250LnNldFNpemUoc3Ry
KTsgcmV0dXJuOyB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfQTogewotICAgICAg
SFRNTEFuY2hvckVsZW1lbnRJbXBsICZhbmNob3IgPSBzdGF0aWNfY2FzdDxIVE1MQW5jaG9yRWxl
bWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNl
IEFuY2hvckFjY2Vzc0tleTogICAgICAgeyBhbmNob3Iuc2V0QWNjZXNzS2V5KHN0cik7IHJldHVy
bjsgfQotICAgICAgY2FzZSBBbmNob3JDaGFyc2V0OiAgICAgICAgIHsgYW5jaG9yLnNldENoYXJz
ZXQoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEFuY2hvckNvb3JkczogICAgICAgICAgeyBh
bmNob3Iuc2V0Q29vcmRzKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBBbmNob3JIcmVmOiAg
ICAgICAgICAgIHsgYW5jaG9yLnNldEhyZWYoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEFu
Y2hvckhyZWZMYW5nOiAgICAgICAgeyBhbmNob3Iuc2V0SHJlZmxhbmcoc3RyKTsgcmV0dXJuOyB9
Ci0gICAgICBjYXNlIEFuY2hvck5hbWU6ICAgICAgICAgICAgeyBhbmNob3Iuc2V0TmFtZShzdHIp
OyByZXR1cm47IH0KLSAgICAgIGNhc2UgQW5jaG9yUmVsOiAgICAgICAgICAgICB7IGFuY2hvci5z
ZXRSZWwoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEFuY2hvclJldjogICAgICAgICAgICAg
eyBhbmNob3Iuc2V0UmV2KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBBbmNob3JTaGFwZTog
ICAgICAgICAgIHsgYW5jaG9yLnNldFNoYXBlKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBB
bmNob3JUYWJJbmRleDogICAgICAgIHsgYW5jaG9yLnNldFRhYkluZGV4KHZhbHVlLnRvSW50MzIo
ZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQW5jaG9yVGFyZ2V0OiAgICAgICAgICB7IGFu
Y2hvci5zZXRUYXJnZXQoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEFuY2hvclR5cGU6ICAg
ICAgICAgICAgeyBhbmNob3Iuc2V0VHlwZShzdHIpOyByZXR1cm47IH0KLSAgICAgIH0KK30KKwor
dm9pZCBIVE1MRWxlbWVudDo6aHJTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNv
bnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1M
SFJFbGVtZW50SW1wbCYgaHIgPSAqc3RhdGljX2Nhc3Q8SFRNTEhSRWxlbWVudEltcGwqPihpbXBs
KCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBIUkFsaWduOiAgICAgICAg
ICAgeyBoci5zZXRBbGlnbihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBIUk5vU2hhZGU6
ICAgICAgICAgeyBoci5zZXROb1NoYWRlKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsg
fQorICAgICAgICBjYXNlIEhSU2l6ZTogICAgICAgICAgICB7IGhyLnNldFNpemUoc3RyKTsgcmV0
dXJuOyB9CisgICAgICAgIGNhc2UgSFJXaWR0aDogICAgICAgICAgIHsgaHIuc2V0V2lkdGgoc3Ry
KTsgcmV0dXJuOyB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfSU1HOiB7Ci0gICAg
ICBIVE1MSW1hZ2VFbGVtZW50SW1wbCAmaW1hZ2UgPSBzdGF0aWNfY2FzdDxIVE1MSW1hZ2VFbGVt
ZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2Ug
SW1hZ2VOYW1lOiAgICAgICAgICAgIHsgaW1hZ2Uuc2V0TmFtZShzdHIpOyByZXR1cm47IH0KLSAg
ICAgIGNhc2UgSW1hZ2VBbGlnbjogICAgICAgICAgIHsgaW1hZ2Uuc2V0QWxpZ24oc3RyKTsgcmV0
dXJuOyB9Ci0gICAgICBjYXNlIEltYWdlQWx0OiAgICAgICAgICAgICB7IGltYWdlLnNldEFsdChz
dHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSW1hZ2VCb3JkZXI6ICAgICAgICAgIHsgaW1hZ2Uu
c2V0Qm9yZGVyKHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSW1h
Z2VIZWlnaHQ6ICAgICAgICAgIHsgaW1hZ2Uuc2V0SGVpZ2h0KHZhbHVlLnRvSW50MzIoZXhlYykp
OyByZXR1cm47IH0KLSAgICAgIGNhc2UgSW1hZ2VIc3BhY2U6ICAgICAgICAgIHsgaW1hZ2Uuc2V0
SHNwYWNlKHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSW1hZ2VJ
c01hcDogICAgICAgICAgIHsgaW1hZ2Uuc2V0SXNNYXAodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsg
cmV0dXJuOyB9Ci0gICAgICBjYXNlIEltYWdlTG9uZ0Rlc2M6ICAgICAgICB7IGltYWdlLnNldExv
bmdEZXNjKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBJbWFnZVNyYzogICAgICAgICAgICAg
eyBpbWFnZS5zZXRTcmMoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEltYWdlVXNlTWFwOiAg
ICAgICAgICB7IGltYWdlLnNldFVzZU1hcChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSW1h
Z2VWc3BhY2U6ICAgICAgICAgIHsgaW1hZ2Uuc2V0VnNwYWNlKHZhbHVlLnRvSW50MzIoZXhlYykp
OyByZXR1cm47IH0KLSAgICAgIGNhc2UgSW1hZ2VXaWR0aDogICAgICAgICAgIHsgaW1hZ2Uuc2V0
V2lkdGgodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQotICAgICAgfQorfQorCit2b2lk
IEhUTUxFbGVtZW50Ojptb2RTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0
IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MTW9k
RWxlbWVudEltcGwmIG1vZCA9ICpzdGF0aWNfY2FzdDxIVE1MTW9kRWxlbWVudEltcGwqPihpbXBs
KCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBNb2RDaXRlOiAgICAgICAg
ICAgIHsgbW9kLnNldENpdGUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgTW9kRGF0ZVRp
bWU6ICAgICAgICB7IG1vZC5zZXREYXRlVGltZShzdHIpOyByZXR1cm47IH0KICAgICB9Ci0gICAg
YnJlYWs7Ci0gICAgY2FzZSBJRF9PQkpFQ1Q6IHsKLSAgICAgIEhUTUxPYmplY3RFbGVtZW50SW1w
bCAmb2JqZWN0ID0gc3RhdGljX2Nhc3Q8SFRNTE9iamVjdEVsZW1lbnRJbXBsICY+KGVsZW1lbnQp
OwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgLy8gcmVhZC1vbmx5OiBmb3JtCi0gICAg
ICBjYXNlIE9iamVjdENvZGU6ICAgICAgICAgICAgICAgICB7IG9iamVjdC5zZXRDb2RlKHN0cik7
IHJldHVybjsgfQotICAgICAgY2FzZSBPYmplY3RBbGlnbjogICAgICAgICAgIHsgb2JqZWN0LnNl
dEFsaWduKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBPYmplY3RBcmNoaXZlOiAgICAgICAg
IHsgb2JqZWN0LnNldEFyY2hpdmUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIE9iamVjdEJv
cmRlcjogICAgICAgICAgeyBvYmplY3Quc2V0Qm9yZGVyKHN0cik7IHJldHVybjsgfQotICAgICAg
Y2FzZSBPYmplY3RDb2RlQmFzZTogICAgICAgIHsgb2JqZWN0LnNldENvZGVCYXNlKHN0cik7IHJl
dHVybjsgfQotICAgICAgY2FzZSBPYmplY3RDb2RlVHlwZTogICAgICAgIHsgb2JqZWN0LnNldENv
ZGVUeXBlKHN0cik7IHJldHVybjsgfQotICAgICAgLy8gcmVhZC1vbmx5OiBPYmplY3RDb250ZW50
RG9jdW1lbnQKLSAgICAgIGNhc2UgT2JqZWN0RGF0YTogICAgICAgICAgICB7IG9iamVjdC5zZXRE
YXRhKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBPYmplY3REZWNsYXJlOiAgICAgICAgIHsg
b2JqZWN0LnNldERlY2xhcmUodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAg
ICBjYXNlIE9iamVjdEhlaWdodDogICAgICAgICAgeyBvYmplY3Quc2V0SGVpZ2h0KHN0cik7IHJl
dHVybjsgfQotICAgICAgY2FzZSBPYmplY3RIc3BhY2U6ICAgICAgICAgIHsgb2JqZWN0LnNldEhz
cGFjZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgT2JqZWN0TmFtZTogICAgICAgICAgICB7
IG9iamVjdC5zZXROYW1lKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBPYmplY3RTdGFuZGJ5
OiAgICAgICAgIHsgb2JqZWN0LnNldFN0YW5kYnkoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNl
IE9iamVjdFRhYkluZGV4OiAgICAgICAgeyBvYmplY3Quc2V0VGFiSW5kZXgodmFsdWUudG9JbnQz
MihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBPYmplY3RUeXBlOiAgICAgICAgICAgIHsg
b2JqZWN0LnNldFR5cGUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIE9iamVjdFVzZU1hcDog
ICAgICAgICAgeyBvYmplY3Quc2V0VXNlTWFwKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBP
YmplY3RWc3BhY2U6ICAgICAgICAgIHsgb2JqZWN0LnNldFZzcGFjZShzdHIpOyByZXR1cm47IH0K
LSAgICAgIGNhc2UgT2JqZWN0V2lkdGg6ICAgICAgICAgICB7IG9iamVjdC5zZXRXaWR0aChzdHIp
OyByZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6YW5jaG9yU2V0dGVy
KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERP
TTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTEFuY2hvckVsZW1lbnRJbXBsJiBhbmNob3Ig
PSAqc3RhdGljX2Nhc3Q8SFRNTEFuY2hvckVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0
Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgQW5jaG9yQWNjZXNzS2V5OiAgICAgICB7IGFuY2hv
ci5zZXRBY2Nlc3NLZXkoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQW5jaG9yQ2hhcnNl
dDogICAgICAgICB7IGFuY2hvci5zZXRDaGFyc2V0KHN0cik7IHJldHVybjsgfQorICAgICAgICBj
YXNlIEFuY2hvckNvb3JkczogICAgICAgICAgeyBhbmNob3Iuc2V0Q29vcmRzKHN0cik7IHJldHVy
bjsgfQorICAgICAgICBjYXNlIEFuY2hvckhyZWY6ICAgICAgICAgICAgeyBhbmNob3Iuc2V0SHJl
ZihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBBbmNob3JIcmVmTGFuZzogICAgICAgIHsg
YW5jaG9yLnNldEhyZWZsYW5nKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEFuY2hvck5h
bWU6ICAgICAgICAgICAgeyBhbmNob3Iuc2V0TmFtZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAg
Y2FzZSBBbmNob3JSZWw6ICAgICAgICAgICAgIHsgYW5jaG9yLnNldFJlbChzdHIpOyByZXR1cm47
IH0KKyAgICAgICAgY2FzZSBBbmNob3JSZXY6ICAgICAgICAgICAgIHsgYW5jaG9yLnNldFJldihz
dHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBBbmNob3JTaGFwZTogICAgICAgICAgIHsgYW5j
aG9yLnNldFNoYXBlKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEFuY2hvclRhYkluZGV4
OiAgICAgICAgeyBhbmNob3Iuc2V0VGFiSW5kZXgodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVy
bjsgfQorICAgICAgICBjYXNlIEFuY2hvclRhcmdldDogICAgICAgICAgeyBhbmNob3Iuc2V0VGFy
Z2V0KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEFuY2hvclR5cGU6ICAgICAgICAgICAg
eyBhbmNob3Iuc2V0VHlwZShzdHIpOyByZXR1cm47IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAg
Y2FzZSBJRF9QQVJBTTogewotICAgICAgSFRNTFBhcmFtRWxlbWVudEltcGwgJnBhcmFtID0gc3Rh
dGljX2Nhc3Q8SFRNTFBhcmFtRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2gg
KHRva2VuKSB7Ci0gICAgICBjYXNlIFBhcmFtTmFtZTogICAgICAgICAgICB7IHBhcmFtLnNldE5h
bWUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFBhcmFtVHlwZTogICAgICAgICAgICB7IHBh
cmFtLnNldFR5cGUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFBhcmFtVmFsdWU6ICAgICAg
ICAgICB7IHBhcmFtLnNldFZhbHVlKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBQYXJhbVZh
bHVlVHlwZTogICAgICAgeyBwYXJhbS5zZXRWYWx1ZVR5cGUoc3RyKTsgcmV0dXJuOyB9Ci0gICAg
ICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OmltYWdlU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIp
Cit7CisgICAgSFRNTEltYWdlRWxlbWVudEltcGwmIGltYWdlID0gKnN0YXRpY19jYXN0PEhUTUxJ
bWFnZUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAg
IGNhc2UgSW1hZ2VOYW1lOiAgICAgICAgICAgIHsgaW1hZ2Uuc2V0TmFtZShzdHIpOyByZXR1cm47
IH0KKyAgICAgICAgY2FzZSBJbWFnZUFsaWduOiAgICAgICAgICAgeyBpbWFnZS5zZXRBbGlnbihz
dHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJbWFnZUFsdDogICAgICAgICAgICAgeyBpbWFn
ZS5zZXRBbHQoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgSW1hZ2VCb3JkZXI6ICAgICAg
ICAgIHsgaW1hZ2Uuc2V0Qm9yZGVyKHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KKyAg
ICAgICAgY2FzZSBJbWFnZUhlaWdodDogICAgICAgICAgeyBpbWFnZS5zZXRIZWlnaHQodmFsdWUu
dG9JbnQzMihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIEltYWdlSHNwYWNlOiAgICAg
ICAgICB7IGltYWdlLnNldEhzcGFjZSh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9Cisg
ICAgICAgIGNhc2UgSW1hZ2VJc01hcDogICAgICAgICAgIHsgaW1hZ2Uuc2V0SXNNYXAodmFsdWUu
dG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgSW1hZ2VMb25nRGVzYzog
ICAgICAgIHsgaW1hZ2Uuc2V0TG9uZ0Rlc2Moc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2Ug
SW1hZ2VTcmM6ICAgICAgICAgICAgIHsgaW1hZ2Uuc2V0U3JjKHN0cik7IHJldHVybjsgfQorICAg
ICAgICBjYXNlIEltYWdlVXNlTWFwOiAgICAgICAgICB7IGltYWdlLnNldFVzZU1hcChzdHIpOyBy
ZXR1cm47IH0KKyAgICAgICAgY2FzZSBJbWFnZVZzcGFjZTogICAgICAgICAgeyBpbWFnZS5zZXRW
c3BhY2UodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIEltYWdl
V2lkdGg6ICAgICAgICAgICB7IGltYWdlLnNldFdpZHRoKHZhbHVlLnRvSW50MzIoZXhlYykpOyBy
ZXR1cm47IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9BUFBMRVQ6IHsKLSAgICAg
IEhUTUxBcHBsZXRFbGVtZW50SW1wbCAmYXBwbGV0ID0gc3RhdGljX2Nhc3Q8SFRNTEFwcGxldEVs
ZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgY2Fz
ZSBBcHBsZXRBbGlnbjogICAgICAgICAgIHsgYXBwbGV0LnNldEFsaWduKHN0cik7IHJldHVybjsg
fQotICAgICAgY2FzZSBBcHBsZXRBbHQ6ICAgICAgICAgICAgIHsgYXBwbGV0LnNldEFsdChzdHIp
OyByZXR1cm47IH0KLSAgICAgIGNhc2UgQXBwbGV0QXJjaGl2ZTogICAgICAgICB7IGFwcGxldC5z
ZXRBcmNoaXZlKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBBcHBsZXRDb2RlOiAgICAgICAg
ICAgIHsgYXBwbGV0LnNldENvZGUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEFwcGxldENv
ZGVCYXNlOiAgICAgICAgeyBhcHBsZXQuc2V0Q29kZUJhc2Uoc3RyKTsgcmV0dXJuOyB9Ci0gICAg
ICBjYXNlIEFwcGxldEhlaWdodDogICAgICAgICAgeyBhcHBsZXQuc2V0SGVpZ2h0KHN0cik7IHJl
dHVybjsgfQotICAgICAgY2FzZSBBcHBsZXRIc3BhY2U6ICAgICAgICAgIHsgYXBwbGV0LnNldEhz
cGFjZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQXBwbGV0TmFtZTogICAgICAgICAgICB7
IGFwcGxldC5zZXROYW1lKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBBcHBsZXRPYmplY3Q6
ICAgICAgICAgIHsgYXBwbGV0LnNldE9iamVjdChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2Ug
QXBwbGV0VnNwYWNlOiAgICAgICAgICB7IGFwcGxldC5zZXRWc3BhY2Uoc3RyKTsgcmV0dXJuOyB9
Ci0gICAgICBjYXNlIEFwcGxldFdpZHRoOiAgICAgICAgICAgeyBhcHBsZXQuc2V0V2lkdGgoc3Ry
KTsgcmV0dXJuOyB9Ci0gICAgICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6Om9iamVjdFNldHRl
cihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBE
T006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxPYmplY3RFbGVtZW50SW1wbCYgb2JqZWN0
ID0gKnN0YXRpY19jYXN0PEhUTUxPYmplY3RFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dp
dGNoICh0b2tlbikgeworICAgICAgICAvLyByZWFkLW9ubHk6IGZvcm0KKyAgICAgICAgY2FzZSBP
YmplY3RDb2RlOiAgICAgICAgICAgIHsgb2JqZWN0LnNldENvZGUoc3RyKTsgcmV0dXJuOyB9Cisg
ICAgICAgIGNhc2UgT2JqZWN0QWxpZ246ICAgICAgICAgICB7IG9iamVjdC5zZXRBbGlnbihzdHIp
OyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBPYmplY3RBcmNoaXZlOiAgICAgICAgIHsgb2JqZWN0
LnNldEFyY2hpdmUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgT2JqZWN0Qm9yZGVyOiAg
ICAgICAgICB7IG9iamVjdC5zZXRCb3JkZXIoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2Ug
T2JqZWN0Q29kZUJhc2U6ICAgICAgICB7IG9iamVjdC5zZXRDb2RlQmFzZShzdHIpOyByZXR1cm47
IH0KKyAgICAgICAgY2FzZSBPYmplY3RDb2RlVHlwZTogICAgICAgIHsgb2JqZWN0LnNldENvZGVU
eXBlKHN0cik7IHJldHVybjsgfQorICAgICAgICAvLyByZWFkLW9ubHk6IE9iamVjdENvbnRlbnRE
b2N1bWVudAorICAgICAgICBjYXNlIE9iamVjdERhdGE6ICAgICAgICAgICAgeyBvYmplY3Quc2V0
RGF0YShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBPYmplY3REZWNsYXJlOiAgICAgICAg
IHsgb2JqZWN0LnNldERlY2xhcmUodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9Cisg
ICAgICAgIGNhc2UgT2JqZWN0SGVpZ2h0OiAgICAgICAgICB7IG9iamVjdC5zZXRIZWlnaHQoc3Ry
KTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgT2JqZWN0SHNwYWNlOiAgICAgICAgICB7IG9iamVj
dC5zZXRIc3BhY2Uoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgT2JqZWN0TmFtZTogICAg
ICAgICAgICB7IG9iamVjdC5zZXROYW1lKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIE9i
amVjdFN0YW5kYnk6ICAgICAgICAgeyBvYmplY3Quc2V0U3RhbmRieShzdHIpOyByZXR1cm47IH0K
KyAgICAgICAgY2FzZSBPYmplY3RUYWJJbmRleDogICAgICAgIHsgb2JqZWN0LnNldFRhYkluZGV4
KHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBPYmplY3RUeXBl
OiAgICAgICAgICAgIHsgb2JqZWN0LnNldFR5cGUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNh
c2UgT2JqZWN0VXNlTWFwOiAgICAgICAgICB7IG9iamVjdC5zZXRVc2VNYXAoc3RyKTsgcmV0dXJu
OyB9CisgICAgICAgIGNhc2UgT2JqZWN0VnNwYWNlOiAgICAgICAgICB7IG9iamVjdC5zZXRWc3Bh
Y2Uoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgT2JqZWN0V2lkdGg6ICAgICAgICAgICB7
IG9iamVjdC5zZXRXaWR0aChzdHIpOyByZXR1cm47IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAg
Y2FzZSBJRF9NQVA6IHsKLSAgICAgIEhUTUxNYXBFbGVtZW50SW1wbCAmbWFwID0gc3RhdGljX2Nh
c3Q8SFRNTE1hcEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikg
ewotICAgICAgLy8gcmVhZC1vbmx5OiBhcmVhcwotICAgICAgY2FzZSBNYXBOYW1lOiAgICAgICAg
ICAgICAgICAgeyBtYXAuc2V0TmFtZShzdHIpOyByZXR1cm47IH0KLSAgICAgfQorfQorCit2b2lk
IEhUTUxFbGVtZW50OjpwYXJhbVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29u
c3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxQ
YXJhbUVsZW1lbnRJbXBsJiBwYXJhbSA9ICpzdGF0aWNfY2FzdDxIVE1MUGFyYW1FbGVtZW50SW1w
bCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNlIFBhcmFtTmFt
ZTogICAgICAgICAgICB7IHBhcmFtLnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNh
c2UgUGFyYW1UeXBlOiAgICAgICAgICAgIHsgcGFyYW0uc2V0VHlwZShzdHIpOyByZXR1cm47IH0K
KyAgICAgICAgY2FzZSBQYXJhbVZhbHVlOiAgICAgICAgICAgeyBwYXJhbS5zZXRWYWx1ZShzdHIp
OyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBQYXJhbVZhbHVlVHlwZTogICAgICAgeyBwYXJhbS5z
ZXRWYWx1ZVR5cGUoc3RyKTsgcmV0dXJuOyB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2Ug
SURfQVJFQTogewotICAgICAgSFRNTEFyZWFFbGVtZW50SW1wbCAmYXJlYSA9IHN0YXRpY19jYXN0
PEhUTUxBcmVhRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7
Ci0gICAgICBjYXNlIEFyZWFBY2Nlc3NLZXk6ICAgICAgIHsgYXJlYS5zZXRBY2Nlc3NLZXkoc3Ry
KTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEFyZWFBbHQ6ICAgICAgICAgICAgIHsgYXJlYS5zZXRB
bHQoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEFyZWFDb29yZHM6ICAgICAgICAgIHsgYXJl
YS5zZXRDb29yZHMoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEFyZWFIcmVmOiAgICAgICAg
ICAgIHsgYXJlYS5zZXRIcmVmKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBBcmVhTm9IcmVm
OiAgICAgICAgICB7IGFyZWEuc2V0Tm9IcmVmKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVy
bjsgfQotICAgICAgY2FzZSBBcmVhU2hhcGU6ICAgICAgICAgICB7IGFyZWEuc2V0U2hhcGUoc3Ry
KTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEFyZWFUYWJJbmRleDogICAgICAgIHsgYXJlYS5zZXRU
YWJJbmRleCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEFyZWFU
YXJnZXQ6ICAgICAgICAgIHsgYXJlYS5zZXRUYXJnZXQoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICB9
Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OmFwcGxldFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQor
eworICAgIEhUTUxBcHBsZXRFbGVtZW50SW1wbCYgYXBwbGV0ID0gKnN0YXRpY19jYXN0PEhUTUxB
cHBsZXRFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAg
ICBjYXNlIEFwcGxldEFsaWduOiAgICAgICAgICAgeyBhcHBsZXQuc2V0QWxpZ24oc3RyKTsgcmV0
dXJuOyB9CisgICAgICAgIGNhc2UgQXBwbGV0QWx0OiAgICAgICAgICAgICB7IGFwcGxldC5zZXRB
bHQoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQXBwbGV0QXJjaGl2ZTogICAgICAgICB7
IGFwcGxldC5zZXRBcmNoaXZlKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEFwcGxldENv
ZGU6ICAgICAgICAgICAgeyBhcHBsZXQuc2V0Q29kZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAg
Y2FzZSBBcHBsZXRDb2RlQmFzZTogICAgICAgIHsgYXBwbGV0LnNldENvZGVCYXNlKHN0cik7IHJl
dHVybjsgfQorICAgICAgICBjYXNlIEFwcGxldEhlaWdodDogICAgICAgICAgeyBhcHBsZXQuc2V0
SGVpZ2h0KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEFwcGxldEhzcGFjZTogICAgICAg
ICAgeyBhcHBsZXQuc2V0SHNwYWNlKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEFwcGxl
dE5hbWU6ICAgICAgICAgICAgeyBhcHBsZXQuc2V0TmFtZShzdHIpOyByZXR1cm47IH0KKyAgICAg
ICAgY2FzZSBBcHBsZXRPYmplY3Q6ICAgICAgICAgIHsgYXBwbGV0LnNldE9iamVjdChzdHIpOyBy
ZXR1cm47IH0KKyAgICAgICAgY2FzZSBBcHBsZXRWc3BhY2U6ICAgICAgICAgIHsgYXBwbGV0LnNl
dFZzcGFjZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBBcHBsZXRXaWR0aDogICAgICAg
ICAgIHsgYXBwbGV0LnNldFdpZHRoKHN0cik7IHJldHVybjsgfQogICAgIH0KLSAgICBicmVhazsK
LSAgICBjYXNlIElEX1NDUklQVDogewotICAgICAgSFRNTFNjcmlwdEVsZW1lbnRJbXBsICZzY3Jp
cHQgPSBzdGF0aWNfY2FzdDxIVE1MU2NyaXB0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAg
ICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIFNjcmlwdFRleHQ6ICAgICAgICAgICAgeyBz
Y3JpcHQuc2V0VGV4dChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgU2NyaXB0SHRtbEZvcjog
ICAgICAgICB7IHNjcmlwdC5zZXRIdG1sRm9yKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBT
Y3JpcHRFdmVudDogICAgICAgICAgIHsgc2NyaXB0LnNldEV2ZW50KHN0cik7IHJldHVybjsgfQot
ICAgICAgY2FzZSBTY3JpcHRDaGFyc2V0OiAgICAgICAgIHsgc2NyaXB0LnNldENoYXJzZXQoc3Ry
KTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFNjcmlwdERlZmVyOiAgICAgICAgICAgeyBzY3JpcHQu
c2V0RGVmZXIodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFNj
cmlwdFNyYzogICAgICAgICAgICAgeyBzY3JpcHQuc2V0U3JjKHN0cik7IHJldHVybjsgfQotICAg
ICAgY2FzZSBTY3JpcHRUeXBlOiAgICAgICAgICAgIHsgc2NyaXB0LnNldFR5cGUoc3RyKTsgcmV0
dXJuOyB9Ci0gICAgICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6Om1hcFNldHRlcihFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0
cmluZyYgc3RyKQoreworICAgIEhUTUxNYXBFbGVtZW50SW1wbCYgbWFwID0gKnN0YXRpY19jYXN0
PEhUTUxNYXBFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IE1hcE5hbWUp
CisgICAgICAgIC8vIHJlYWQtb25seTogYXJlYXMKKyAgICAgICAgbWFwLnNldE5hbWUoc3RyKTsK
K30KKwordm9pZCBIVE1MRWxlbWVudDo6YXJlYVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQorewor
ICAgIEhUTUxBcmVhRWxlbWVudEltcGwmIGFyZWEgPSAqc3RhdGljX2Nhc3Q8SFRNTEFyZWFFbGVt
ZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNlIEFy
ZWFBY2Nlc3NLZXk6ICAgICAgIHsgYXJlYS5zZXRBY2Nlc3NLZXkoc3RyKTsgcmV0dXJuOyB9Cisg
ICAgICAgIGNhc2UgQXJlYUFsdDogICAgICAgICAgICAgeyBhcmVhLnNldEFsdChzdHIpOyByZXR1
cm47IH0KKyAgICAgICAgY2FzZSBBcmVhQ29vcmRzOiAgICAgICAgICB7IGFyZWEuc2V0Q29vcmRz
KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEFyZWFIcmVmOiAgICAgICAgICAgIHsgYXJl
YS5zZXRIcmVmKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEFyZWFOb0hyZWY6ICAgICAg
ICAgIHsgYXJlYS5zZXROb0hyZWYodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9Cisg
ICAgICAgIGNhc2UgQXJlYVNoYXBlOiAgICAgICAgICAgeyBhcmVhLnNldFNoYXBlKHN0cik7IHJl
dHVybjsgfQorICAgICAgICBjYXNlIEFyZWFUYWJJbmRleDogICAgICAgIHsgYXJlYS5zZXRUYWJJ
bmRleCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQXJlYVRh
cmdldDogICAgICAgICAgeyBhcmVhLnNldFRhcmdldChzdHIpOyByZXR1cm47IH0KICAgICB9Ci0g
ICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9UQUJMRTogewotICAgICAgSFRNTFRhYmxlRWxlbWVudElt
cGwgJnRhYmxlID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlRWxlbWVudEltcGwgJj4oZWxlbWVudCk7
Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIFRhYmxlQ2FwdGlvbjogICAgICAg
ICB7IHRhYmxlLnNldENhcHRpb24odG9IVE1MVGFibGVDYXB0aW9uRWxlbWVudCh2YWx1ZSkpOyBy
ZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVUSGVhZDogICAgICAgICAgIHsgdGFibGUuc2V0VEhl
YWQodG9IVE1MVGFibGVTZWN0aW9uRWxlbWVudCh2YWx1ZSkpOyByZXR1cm47IH0KLSAgICAgIGNh
c2UgVGFibGVURm9vdDogICAgICAgICAgIHsgdGFibGUuc2V0VEZvb3QodG9IVE1MVGFibGVTZWN0
aW9uRWxlbWVudCh2YWx1ZSkpOyByZXR1cm47IH0KLSAgICAgIC8vIHJlYWQtb25seTogcm93cwot
ICAgICAgLy8gcmVhZC1vbmx5OiB0Ym9kaWVzCi0gICAgICBjYXNlIFRhYmxlQWxpZ246ICAgICAg
ICAgICB7IHRhYmxlLnNldEFsaWduKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJsZUJn
Q29sb3I6ICAgICAgICAgeyB0YWJsZS5zZXRCZ0NvbG9yKHN0cik7IHJldHVybjsgfQotICAgICAg
Y2FzZSBUYWJsZUJvcmRlcjogICAgICAgICAgeyB0YWJsZS5zZXRCb3JkZXIoc3RyKTsgcmV0dXJu
OyB9Ci0gICAgICBjYXNlIFRhYmxlQ2VsbFBhZGRpbmc6ICAgICB7IHRhYmxlLnNldENlbGxQYWRk
aW5nKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJsZUNlbGxTcGFjaW5nOiAgICAgeyB0
YWJsZS5zZXRDZWxsU3BhY2luZyhzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVGcmFt
ZTogICAgICAgICAgIHsgdGFibGUuc2V0RnJhbWUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNl
IFRhYmxlUnVsZXM6ICAgICAgICAgICB7IHRhYmxlLnNldFJ1bGVzKHN0cik7IHJldHVybjsgfQot
ICAgICAgY2FzZSBUYWJsZVN1bW1hcnk6ICAgICAgICAgeyB0YWJsZS5zZXRTdW1tYXJ5KHN0cik7
IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJsZVdpZHRoOiAgICAgICAgICAgeyB0YWJsZS5zZXRX
aWR0aChzdHIpOyByZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6c2Ny
aXB0U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUs
IGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTFNjcmlwdEVsZW1lbnRJbXBs
JiBzY3JpcHQgPSAqc3RhdGljX2Nhc3Q8SFRNTFNjcmlwdEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsK
KyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgU2NyaXB0VGV4dDogICAgICAgICAg
ICB7IHNjcmlwdC5zZXRUZXh0KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFNjcmlwdEh0
bWxGb3I6ICAgICAgICAgeyBzY3JpcHQuc2V0SHRtbEZvcihzdHIpOyByZXR1cm47IH0KKyAgICAg
ICAgY2FzZSBTY3JpcHRFdmVudDogICAgICAgICAgIHsgc2NyaXB0LnNldEV2ZW50KHN0cik7IHJl
dHVybjsgfQorICAgICAgICBjYXNlIFNjcmlwdENoYXJzZXQ6ICAgICAgICAgeyBzY3JpcHQuc2V0
Q2hhcnNldChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBTY3JpcHREZWZlcjogICAgICAg
ICAgIHsgc2NyaXB0LnNldERlZmVyKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQor
ICAgICAgICBjYXNlIFNjcmlwdFNyYzogICAgICAgICAgICAgeyBzY3JpcHQuc2V0U3JjKHN0cik7
IHJldHVybjsgfQorICAgICAgICBjYXNlIFNjcmlwdFR5cGU6ICAgICAgICAgICAgeyBzY3JpcHQu
c2V0VHlwZShzdHIpOyByZXR1cm47IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9D
QVBUSU9OOiB7Ci0gICAgICBIVE1MVGFibGVDYXB0aW9uRWxlbWVudEltcGwgJnRhYmxlQ2FwdGlv
biA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZUNhcHRpb25FbGVtZW50SW1wbCAmPihlbGVtZW50KTsK
LSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgVGFibGVBbGlnbjogICAgICAgICAg
IHsgdGFibGVDYXB0aW9uLnNldEFsaWduKHN0cik7IHJldHVybjsgfQotICAgICAgfQorfQorCit2
b2lkIEhUTUxFbGVtZW50Ojp0YWJsZVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwg
Y29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhU
TUxUYWJsZUVsZW1lbnRJbXBsJiB0YWJsZSA9ICpzdGF0aWNfY2FzdDxIVE1MVGFibGVFbGVtZW50
SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNlIFRhYmxl
Q2FwdGlvbjogICAgICAgICB7IHRhYmxlLnNldENhcHRpb24odG9IVE1MVGFibGVDYXB0aW9uRWxl
bWVudCh2YWx1ZSkpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZVRIZWFkOiAgICAgICAg
ICAgeyB0YWJsZS5zZXRUSGVhZCh0b0hUTUxUYWJsZVNlY3Rpb25FbGVtZW50KHZhbHVlKSk7IHJl
dHVybjsgfQorICAgICAgICBjYXNlIFRhYmxlVEZvb3Q6ICAgICAgICAgICB7IHRhYmxlLnNldFRG
b290KHRvSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQodmFsdWUpKTsgcmV0dXJuOyB9CisgICAgICAg
IC8vIHJlYWQtb25seTogcm93cworICAgICAgICAvLyByZWFkLW9ubHk6IHRib2RpZXMKKyAgICAg
ICAgY2FzZSBUYWJsZUFsaWduOiAgICAgICAgICAgeyB0YWJsZS5zZXRBbGlnbihzdHIpOyByZXR1
cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZUJnQ29sb3I6ICAgICAgICAgeyB0YWJsZS5zZXRCZ0Nv
bG9yKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxlQm9yZGVyOiAgICAgICAgICB7
IHRhYmxlLnNldEJvcmRlcihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZUNlbGxQ
YWRkaW5nOiAgICAgeyB0YWJsZS5zZXRDZWxsUGFkZGluZyhzdHIpOyByZXR1cm47IH0KKyAgICAg
ICAgY2FzZSBUYWJsZUNlbGxTcGFjaW5nOiAgICAgeyB0YWJsZS5zZXRDZWxsU3BhY2luZyhzdHIp
OyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZUZyYW1lOiAgICAgICAgICAgeyB0YWJsZS5z
ZXRGcmFtZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZVJ1bGVzOiAgICAgICAg
ICAgeyB0YWJsZS5zZXRSdWxlcyhzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZVN1
bW1hcnk6ICAgICAgICAgeyB0YWJsZS5zZXRTdW1tYXJ5KHN0cik7IHJldHVybjsgfQorICAgICAg
ICBjYXNlIFRhYmxlV2lkdGg6ICAgICAgICAgICB7IHRhYmxlLnNldFdpZHRoKHN0cik7IHJldHVy
bjsgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0NPTDogewotICAgICAgSFRNTFRh
YmxlQ29sRWxlbWVudEltcGwgJnRhYmxlQ29sID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ29sRWxl
bWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNl
IFRhYmxlQ29sQWxpZ246ICAgICAgICAgICB7IHRhYmxlQ29sLnNldEFsaWduKHN0cik7IHJldHVy
bjsgfQotICAgICAgY2FzZSBUYWJsZUNvbENoOiAgICAgICAgICAgICAgeyB0YWJsZUNvbC5zZXRD
aChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVDb2xDaE9mZjogICAgICAgICAgIHsg
dGFibGVDb2wuc2V0Q2hPZmYoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlQ29sU3Bh
bjogICAgICAgICAgICB7IHRhYmxlQ29sLnNldFNwYW4odmFsdWUudG9JbnQzMihleGVjKSk7IHJl
dHVybjsgfQotICAgICAgY2FzZSBUYWJsZUNvbFZBbGlnbjogICAgICAgICAgeyB0YWJsZUNvbC5z
ZXRWQWxpZ24oc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlQ29sV2lkdGg6ICAgICAg
ICAgICB7IHRhYmxlQ29sLnNldFdpZHRoKHN0cik7IHJldHVybjsgfQotICAgICAgfQorfQorCit2
b2lkIEhUTUxFbGVtZW50Ojp0YWJsZUNhcHRpb25TZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sK
KyAgICBIVE1MVGFibGVDYXB0aW9uRWxlbWVudEltcGwmIHRhYmxlQ2FwdGlvbiA9ICpzdGF0aWNf
Y2FzdDxIVE1MVGFibGVDYXB0aW9uRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIGlmICh0b2tl
biA9PSBUYWJsZUNhcHRpb25BbGlnbikKKyAgICAgICAgdGFibGVDYXB0aW9uLnNldEFsaWduKHN0
cik7Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OnRhYmxlQ29sU2V0dGVyKEV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBz
dHIpCit7CisgICAgSFRNTFRhYmxlQ29sRWxlbWVudEltcGwmIHRhYmxlQ29sID0gKnN0YXRpY19j
YXN0PEhUTUxUYWJsZUNvbEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2Vu
KSB7CisgICAgICAgIGNhc2UgVGFibGVDb2xBbGlnbjogICAgICAgICAgIHsgdGFibGVDb2wuc2V0
QWxpZ24oc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGFibGVDb2xDaDogICAgICAgICAg
ICAgIHsgdGFibGVDb2wuc2V0Q2goc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGFibGVD
b2xDaE9mZjogICAgICAgICAgIHsgdGFibGVDb2wuc2V0Q2hPZmYoc3RyKTsgcmV0dXJuOyB9Cisg
ICAgICAgIGNhc2UgVGFibGVDb2xTcGFuOiAgICAgICAgICAgIHsgdGFibGVDb2wuc2V0U3Bhbih2
YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGFibGVDb2xWQWxp
Z246ICAgICAgICAgIHsgdGFibGVDb2wuc2V0VkFsaWduKHN0cik7IHJldHVybjsgfQorICAgICAg
ICBjYXNlIFRhYmxlQ29sV2lkdGg6ICAgICAgICAgICB7IHRhYmxlQ29sLnNldFdpZHRoKHN0cik7
IHJldHVybjsgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX1RIRUFEOgotICAgIGNh
c2UgSURfVEJPRFk6Ci0gICAgY2FzZSBJRF9URk9PVDogewotICAgICAgSFRNTFRhYmxlU2VjdGlv
bkVsZW1lbnRJbXBsICZ0YWJsZVNlY3Rpb24gPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVTZWN0aW9u
RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBj
YXNlIFRhYmxlU2VjdGlvbkFsaWduOiAgICAgICAgICAgeyB0YWJsZVNlY3Rpb24uc2V0QWxpZ24o
c3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlU2VjdGlvbkNoOiAgICAgICAgICAgICAg
eyB0YWJsZVNlY3Rpb24uc2V0Q2goc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlU2Vj
dGlvbkNoT2ZmOiAgICAgICAgICAgeyB0YWJsZVNlY3Rpb24uc2V0Q2hPZmYoc3RyKTsgcmV0dXJu
OyB9Ci0gICAgICBjYXNlIFRhYmxlU2VjdGlvblZBbGlnbjogICAgICAgICAgeyB0YWJsZVNlY3Rp
b24uc2V0VkFsaWduKHN0cik7IHJldHVybjsgfQotICAgICAgLy8gcmVhZC1vbmx5OiByb3dzCi0g
ICAgICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OnRhYmxlU2VjdGlvblNldHRlcihFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0
cmluZyYgc3RyKQoreworICAgIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbCYgdGFibGVTZWN0
aW9uID0gKnN0YXRpY19jYXN0PEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbCo+KGltcGwoKSk7
CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNlIFRhYmxlU2VjdGlvbkFsaWduOiAg
ICAgICAgICAgeyB0YWJsZVNlY3Rpb24uc2V0QWxpZ24oc3RyKTsgcmV0dXJuOyB9CisgICAgICAg
IGNhc2UgVGFibGVTZWN0aW9uQ2g6ICAgICAgICAgICAgICB7IHRhYmxlU2VjdGlvbi5zZXRDaChz
dHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZVNlY3Rpb25DaE9mZjogICAgICAgICAg
IHsgdGFibGVTZWN0aW9uLnNldENoT2ZmKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRh
YmxlU2VjdGlvblZBbGlnbjogICAgICAgICAgeyB0YWJsZVNlY3Rpb24uc2V0VkFsaWduKHN0cik7
IHJldHVybjsgfQorICAgICAgICAvLyByZWFkLW9ubHk6IHJvd3MKICAgICB9Ci0gICAgYnJlYWs7
Ci0gICAgY2FzZSBJRF9UUjogewotICAgICAgSFRNTFRhYmxlUm93RWxlbWVudEltcGwgJnRhYmxl
Um93ID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlUm93RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0g
ICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICAvLyByZWFkLW9ubHk6IHJvd0luZGV4Ci0gICAg
ICAvLyByZWFkLW9ubHk6IHNlY3Rpb25Sb3dJbmRleAotICAgICAgLy8gcmVhZC1vbmx5OiBjZWxs
cwotICAgICAgY2FzZSBUYWJsZVJvd0FsaWduOiAgICAgICAgICAgeyB0YWJsZVJvdy5zZXRBbGln
bihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVSb3dCZ0NvbG9yOiAgICAgICAgIHsg
dGFibGVSb3cuc2V0QmdDb2xvcihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVSb3dD
aDogICAgICAgICAgICAgIHsgdGFibGVSb3cuc2V0Q2goc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBj
YXNlIFRhYmxlUm93Q2hPZmY6ICAgICAgICAgICB7IHRhYmxlUm93LnNldENoT2ZmKHN0cik7IHJl
dHVybjsgfQotICAgICAgY2FzZSBUYWJsZVJvd1ZBbGlnbjogICAgICAgICAgeyB0YWJsZVJvdy5z
ZXRWQWxpZ24oc3RyKTsgcmV0dXJuOyB9Ci0gICAgICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6
OnRhYmxlUm93U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYg
dmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTFRhYmxlUm93RWxl
bWVudEltcGwmIHRhYmxlUm93ID0gKnN0YXRpY19jYXN0PEhUTUxUYWJsZVJvd0VsZW1lbnRJbXBs
Kj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIC8vIHJlYWQtb25seTog
cm93SW5kZXgKKyAgICAgICAgLy8gcmVhZC1vbmx5OiBzZWN0aW9uUm93SW5kZXgKKyAgICAgICAg
Ly8gcmVhZC1vbmx5OiBjZWxscworICAgICAgICBjYXNlIFRhYmxlUm93QWxpZ246ICAgICAgICAg
ICB7IHRhYmxlUm93LnNldEFsaWduKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxl
Um93QmdDb2xvcjogICAgICAgICB7IHRhYmxlUm93LnNldEJnQ29sb3Ioc3RyKTsgcmV0dXJuOyB9
CisgICAgICAgIGNhc2UgVGFibGVSb3dDaDogICAgICAgICAgICAgIHsgdGFibGVSb3cuc2V0Q2go
c3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGFibGVSb3dDaE9mZjogICAgICAgICAgIHsg
dGFibGVSb3cuc2V0Q2hPZmYoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGFibGVSb3dW
QWxpZ246ICAgICAgICAgIHsgdGFibGVSb3cuc2V0VkFsaWduKHN0cik7IHJldHVybjsgfQogICAg
IH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX1RIOgotICAgIGNhc2UgSURfVEQ6IHsKLSAgICAg
IEhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbCAmdGFibGVDZWxsID0gc3RhdGljX2Nhc3Q8SFRNTFRh
YmxlQ2VsbEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewot
ICAgICAgLy8gcmVhZC1vbmx5OiBjZWxsSW5kZXgKLSAgICAgIGNhc2UgVGFibGVDZWxsQWJicjog
ICAgICAgICAgICB7IHRhYmxlQ2VsbC5zZXRBYmJyKHN0cik7IHJldHVybjsgfQotICAgICAgY2Fz
ZSBUYWJsZUNlbGxBbGlnbjogICAgICAgICAgIHsgdGFibGVDZWxsLnNldEFsaWduKHN0cik7IHJl
dHVybjsgfQotICAgICAgY2FzZSBUYWJsZUNlbGxBeGlzOiAgICAgICAgICAgIHsgdGFibGVDZWxs
LnNldEF4aXMoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlQ2VsbEJnQ29sb3I6ICAg
ICAgICAgeyB0YWJsZUNlbGwuc2V0QmdDb2xvcihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2Ug
VGFibGVDZWxsQ2g6ICAgICAgICAgICAgICB7IHRhYmxlQ2VsbC5zZXRDaChzdHIpOyByZXR1cm47
IH0KLSAgICAgIGNhc2UgVGFibGVDZWxsQ2hPZmY6ICAgICAgICAgICB7IHRhYmxlQ2VsbC5zZXRD
aE9mZihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVDZWxsQ29sU3BhbjogICAgICAg
ICB7IHRhYmxlQ2VsbC5zZXRDb2xTcGFuKHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0K
LSAgICAgIGNhc2UgVGFibGVDZWxsSGVhZGVyczogICAgICAgICB7IHRhYmxlQ2VsbC5zZXRIZWFk
ZXJzKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJsZUNlbGxIZWlnaHQ6ICAgICAgICAg
IHsgdGFibGVDZWxsLnNldEhlaWdodChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVD
ZWxsTm9XcmFwOiAgICAgICAgICB7IHRhYmxlQ2VsbC5zZXROb1dyYXAodmFsdWUudG9Cb29sZWFu
KGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlQ2VsbFJvd1NwYW46ICAgICAgICAg
eyB0YWJsZUNlbGwuc2V0Um93U3Bhbih2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9Ci0g
ICAgICBjYXNlIFRhYmxlQ2VsbFNjb3BlOiAgICAgICAgICAgeyB0YWJsZUNlbGwuc2V0U2NvcGUo
c3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlQ2VsbFZBbGlnbjogICAgICAgICAgeyB0
YWJsZUNlbGwuc2V0VkFsaWduKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJsZUNlbGxX
aWR0aDogICAgICAgICAgIHsgdGFibGVDZWxsLnNldFdpZHRoKHN0cik7IHJldHVybjsgfQotICAg
ICAgfQorfQorCit2b2lkIEhUTUxFbGVtZW50Ojp0YWJsZUNlbGxTZXR0ZXIoRXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcm
IHN0cikKK3sKKyAgICBIVE1MVGFibGVDZWxsRWxlbWVudEltcGwmIHRhYmxlQ2VsbCA9ICpzdGF0
aWNfY2FzdDxIVE1MVGFibGVDZWxsRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAo
dG9rZW4pIHsKKyAgICAgICAgLy8gcmVhZC1vbmx5OiBjZWxsSW5kZXgKKyAgICAgICAgY2FzZSBU
YWJsZUNlbGxBYmJyOiAgICAgICAgICAgIHsgdGFibGVDZWxsLnNldEFiYnIoc3RyKTsgcmV0dXJu
OyB9CisgICAgICAgIGNhc2UgVGFibGVDZWxsQWxpZ246ICAgICAgICAgICB7IHRhYmxlQ2VsbC5z
ZXRBbGlnbihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZUNlbGxBeGlzOiAgICAg
ICAgICAgIHsgdGFibGVDZWxsLnNldEF4aXMoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2Ug
VGFibGVDZWxsQmdDb2xvcjogICAgICAgICB7IHRhYmxlQ2VsbC5zZXRCZ0NvbG9yKHN0cik7IHJl
dHVybjsgfQorICAgICAgICBjYXNlIFRhYmxlQ2VsbENoOiAgICAgICAgICAgICAgeyB0YWJsZUNl
bGwuc2V0Q2goc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGFibGVDZWxsQ2hPZmY6ICAg
ICAgICAgICB7IHRhYmxlQ2VsbC5zZXRDaE9mZihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2Fz
ZSBUYWJsZUNlbGxDb2xTcGFuOiAgICAgICAgIHsgdGFibGVDZWxsLnNldENvbFNwYW4odmFsdWUu
dG9JbnQzMihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxlQ2VsbEhlYWRlcnM6
ICAgICAgICAgeyB0YWJsZUNlbGwuc2V0SGVhZGVycyhzdHIpOyByZXR1cm47IH0KKyAgICAgICAg
Y2FzZSBUYWJsZUNlbGxIZWlnaHQ6ICAgICAgICAgIHsgdGFibGVDZWxsLnNldEhlaWdodChzdHIp
OyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZUNlbGxOb1dyYXA6ICAgICAgICAgIHsgdGFi
bGVDZWxsLnNldE5vV3JhcCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KKyAgICAg
ICAgY2FzZSBUYWJsZUNlbGxSb3dTcGFuOiAgICAgICAgIHsgdGFibGVDZWxsLnNldFJvd1NwYW4o
dmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxlQ2VsbFNj
b3BlOiAgICAgICAgICAgeyB0YWJsZUNlbGwuc2V0U2NvcGUoc3RyKTsgcmV0dXJuOyB9CisgICAg
ICAgIGNhc2UgVGFibGVDZWxsVkFsaWduOiAgICAgICAgICB7IHRhYmxlQ2VsbC5zZXRWQWxpZ24o
c3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGFibGVDZWxsV2lkdGg6ICAgICAgICAgICB7
IHRhYmxlQ2VsbC5zZXRXaWR0aChzdHIpOyByZXR1cm47IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0g
ICAgY2FzZSBJRF9GUkFNRVNFVDogewotICAgICAgSFRNTEZyYW1lU2V0RWxlbWVudEltcGwgJmZy
YW1lU2V0ID0gc3RhdGljX2Nhc3Q8SFRNTEZyYW1lU2V0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7
Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIEZyYW1lU2V0Q29sczogICAgICAg
ICAgICB7IGZyYW1lU2V0LnNldENvbHMoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEZyYW1l
U2V0Um93czogICAgICAgICAgICB7IGZyYW1lU2V0LnNldFJvd3Moc3RyKTsgcmV0dXJuOyB9Ci0g
ICAgICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OmZyYW1lU2V0U2V0dGVyKEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5n
JiBzdHIpCit7CisgICAgSFRNTEZyYW1lU2V0RWxlbWVudEltcGwmIGZyYW1lU2V0ID0gKnN0YXRp
Y19jYXN0PEhUTUxGcmFtZVNldEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRv
a2VuKSB7CisgICAgICAgIGNhc2UgRnJhbWVTZXRDb2xzOiAgICAgICAgICAgIHsgZnJhbWVTZXQu
c2V0Q29scyhzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBGcmFtZVNldFJvd3M6ICAgICAg
ICAgICAgeyBmcmFtZVNldC5zZXRSb3dzKHN0cik7IHJldHVybjsgfQogICAgIH0KLSAgICBicmVh
azsKLSAgICBjYXNlIElEX0ZSQU1FOiB7Ci0gICAgICBIVE1MRnJhbWVFbGVtZW50SW1wbCAmZnJh
bWVFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEZyYW1lRWxlbWVudEltcGwgJj4oZWxlbWVudCk7
Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICAgLy8gcmVhZC1vbmx5OiBGcmFtZUNvbnRl
bnREb2N1bWVudDoKLSAgICAgIGNhc2UgRnJhbWVGcmFtZUJvcmRlcjogICAgIHsgZnJhbWVFbGVt
ZW50LnNldEZyYW1lQm9yZGVyKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBGcmFtZUxvbmdE
ZXNjOiAgICAgICAgeyBmcmFtZUVsZW1lbnQuc2V0TG9uZ0Rlc2Moc3RyKTsgcmV0dXJuOyB9Ci0g
ICAgICBjYXNlIEZyYW1lTWFyZ2luSGVpZ2h0OiAgICB7IGZyYW1lRWxlbWVudC5zZXRNYXJnaW5I
ZWlnaHQoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEZyYW1lTWFyZ2luV2lkdGg6ICAgICB7
IGZyYW1lRWxlbWVudC5zZXRNYXJnaW5XaWR0aChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2Ug
RnJhbWVOYW1lOiAgICAgICAgICAgIHsgZnJhbWVFbGVtZW50LnNldE5hbWUoc3RyKTsgcmV0dXJu
OyB9Ci0gICAgICBjYXNlIEZyYW1lTm9SZXNpemU6ICAgICAgICB7IGZyYW1lRWxlbWVudC5zZXRO
b1Jlc2l6ZSh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgRnJh
bWVTY3JvbGxpbmc6ICAgICAgIHsgZnJhbWVFbGVtZW50LnNldFNjcm9sbGluZyhzdHIpOyByZXR1
cm47IH0KLSAgICAgIGNhc2UgRnJhbWVTcmM6ICAgICAgICAgICAgIHsgZnJhbWVFbGVtZW50LnNl
dFNyYyhzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgRnJhbWVMb2NhdGlvbjogICAgICAgIHsg
ZnJhbWVFbGVtZW50LnNldExvY2F0aW9uKHN0cik7IHJldHVybjsgfQotICAgICAgfQorfQorCit2
b2lkIEhUTUxFbGVtZW50OjpmcmFtZVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwg
Y29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhU
TUxGcmFtZUVsZW1lbnRJbXBsJiBmcmFtZUVsZW1lbnQgPSAqc3RhdGljX2Nhc3Q8SFRNTEZyYW1l
RWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgLy8g
cmVhZC1vbmx5OiBGcmFtZUNvbnRlbnREb2N1bWVudDoKKyAgICAgICAgY2FzZSBGcmFtZUZyYW1l
Qm9yZGVyOiAgICAgeyBmcmFtZUVsZW1lbnQuc2V0RnJhbWVCb3JkZXIoc3RyKTsgcmV0dXJuOyB9
CisgICAgICAgIGNhc2UgRnJhbWVMb25nRGVzYzogICAgICAgIHsgZnJhbWVFbGVtZW50LnNldExv
bmdEZXNjKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEZyYW1lTWFyZ2luSGVpZ2h0OiAg
ICB7IGZyYW1lRWxlbWVudC5zZXRNYXJnaW5IZWlnaHQoc3RyKTsgcmV0dXJuOyB9CisgICAgICAg
IGNhc2UgRnJhbWVNYXJnaW5XaWR0aDogICAgIHsgZnJhbWVFbGVtZW50LnNldE1hcmdpbldpZHRo
KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEZyYW1lTmFtZTogICAgICAgICAgICB7IGZy
YW1lRWxlbWVudC5zZXROYW1lKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEZyYW1lTm9S
ZXNpemU6ICAgICAgICB7IGZyYW1lRWxlbWVudC5zZXROb1Jlc2l6ZSh2YWx1ZS50b0Jvb2xlYW4o
ZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBGcmFtZVNjcm9sbGluZzogICAgICAgeyBm
cmFtZUVsZW1lbnQuc2V0U2Nyb2xsaW5nKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEZy
YW1lU3JjOiAgICAgICAgICAgICB7IGZyYW1lRWxlbWVudC5zZXRTcmMoc3RyKTsgcmV0dXJuOyB9
CisgICAgICAgIGNhc2UgRnJhbWVMb2NhdGlvbjogICAgICAgIHsgZnJhbWVFbGVtZW50LnNldExv
Y2F0aW9uKHN0cik7IHJldHVybjsgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0lG
UkFNRTogewotICAgICAgSFRNTElGcmFtZUVsZW1lbnRJbXBsICZpRnJhbWUgPSBzdGF0aWNfY2Fz
dDxIVE1MSUZyYW1lRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2Vu
KSB7Ci0gICAgICBjYXNlIElGcmFtZUFsaWduOiAgICAgICAgICAgeyBpRnJhbWUuc2V0QWxpZ24o
c3RyKTsgcmV0dXJuOyB9Ci0gICAgICAvLyByZWFkLW9ubHk6IElGcmFtZUNvbnRlbnREb2N1bWVu
dAotICAgICAgY2FzZSBJRnJhbWVGcmFtZUJvcmRlcjogICAgIHsgaUZyYW1lLnNldEZyYW1lQm9y
ZGVyKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBJRnJhbWVIZWlnaHQ6ICAgICAgICAgIHsg
aUZyYW1lLnNldEhlaWdodChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSUZyYW1lTG9uZ0Rl
c2M6ICAgICAgICB7IGlGcmFtZS5zZXRMb25nRGVzYyhzdHIpOyByZXR1cm47IH0KLSAgICAgIGNh
c2UgSUZyYW1lTWFyZ2luSGVpZ2h0OiAgICB7IGlGcmFtZS5zZXRNYXJnaW5IZWlnaHQoc3RyKTsg
cmV0dXJuOyB9Ci0gICAgICBjYXNlIElGcmFtZU1hcmdpbldpZHRoOiAgICAgeyBpRnJhbWUuc2V0
TWFyZ2luV2lkdGgoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElGcmFtZU5hbWU6ICAgICAg
ICAgICAgeyBpRnJhbWUuc2V0TmFtZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSUZyYW1l
U2Nyb2xsaW5nOiAgICAgICB7IGlGcmFtZS5zZXRTY3JvbGxpbmcoc3RyKTsgcmV0dXJuOyB9Ci0g
ICAgICBjYXNlIElGcmFtZVNyYzogICAgICAgICAgICAgeyBpRnJhbWUuc2V0U3JjKHN0cik7IHJl
dHVybjsgfQotICAgICAgY2FzZSBJRnJhbWVXaWR0aDogICAgICAgICAgIHsgaUZyYW1lLnNldFdp
ZHRoKHN0cik7IHJldHVybjsgfQotICAgICAgfQotICAgICAgYnJlYWs7Cit9CisKK3ZvaWQgSFRN
TEVsZW1lbnQ6OmlGcmFtZVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3Qg
VmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxJRnJh
bWVFbGVtZW50SW1wbCYgaUZyYW1lID0gKnN0YXRpY19jYXN0PEhUTUxJRnJhbWVFbGVtZW50SW1w
bCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNlIElGcmFtZUFs
aWduOiAgICAgICAgICAgeyBpRnJhbWUuc2V0QWxpZ24oc3RyKTsgcmV0dXJuOyB9CisgICAgICAg
IC8vIHJlYWQtb25seTogSUZyYW1lQ29udGVudERvY3VtZW50CisgICAgICAgIGNhc2UgSUZyYW1l
RnJhbWVCb3JkZXI6ICAgICB7IGlGcmFtZS5zZXRGcmFtZUJvcmRlcihzdHIpOyByZXR1cm47IH0K
KyAgICAgICAgY2FzZSBJRnJhbWVIZWlnaHQ6ICAgICAgICAgIHsgaUZyYW1lLnNldEhlaWdodChz
dHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJRnJhbWVMb25nRGVzYzogICAgICAgIHsgaUZy
YW1lLnNldExvbmdEZXNjKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIElGcmFtZU1hcmdp
bkhlaWdodDogICAgeyBpRnJhbWUuc2V0TWFyZ2luSGVpZ2h0KHN0cik7IHJldHVybjsgfQorICAg
ICAgICBjYXNlIElGcmFtZU1hcmdpbldpZHRoOiAgICAgeyBpRnJhbWUuc2V0TWFyZ2luV2lkdGgo
c3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgSUZyYW1lTmFtZTogICAgICAgICAgICB7IGlG
cmFtZS5zZXROYW1lKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIElGcmFtZVNjcm9sbGlu
ZzogICAgICAgeyBpRnJhbWUuc2V0U2Nyb2xsaW5nKHN0cik7IHJldHVybjsgfQorICAgICAgICBj
YXNlIElGcmFtZVNyYzogICAgICAgICAgICAgeyBpRnJhbWUuc2V0U3JjKHN0cik7IHJldHVybjsg
fQorICAgICAgICBjYXNlIElGcmFtZVdpZHRoOiAgICAgICAgICAgeyBpRnJhbWUuc2V0V2lkdGgo
c3RyKTsgcmV0dXJuOyB9CiAgICAgfQotICB9Cit9CiAKLSAgLy8gZ2VuZXJpYyBwcm9wZXJ0aWVz
Ci0gIHN3aXRjaCAodG9rZW4pIHsKLSAgY2FzZSBFbGVtZW50SWQ6Ci0gICAgZWxlbWVudC5zZXRJ
ZChzdHIpOwotICAgIHJldHVybjsKLSAgY2FzZSBFbGVtZW50VGl0bGU6Ci0gICAgZWxlbWVudC5z
ZXRUaXRsZShzdHIpOwotICAgIHJldHVybjsKLSAgY2FzZSBFbGVtZW50TGFuZzoKLSAgICBlbGVt
ZW50LnNldExhbmcoc3RyKTsKLSAgICByZXR1cm47Ci0gIGNhc2UgRWxlbWVudERpcjoKLSAgICBl
bGVtZW50LnNldERpcihzdHIpOwotICAgIHJldHVybjsKLSAgY2FzZSBFbGVtZW50Q2xhc3NOYW1l
OgotICAgIGVsZW1lbnQuc2V0Q2xhc3NOYW1lKHN0cik7Ci0gICAgcmV0dXJuOwotICBjYXNlIEVs
ZW1lbnRJbm5lckhUTUw6Ci0gICAgZWxlbWVudC5zZXRJbm5lckhUTUwoc3RyLCBleGNlcHRpb24p
OwotICAgIHJldHVybjsKLSAgY2FzZSBFbGVtZW50SW5uZXJUZXh0OgotICAgIGVsZW1lbnQuc2V0
SW5uZXJUZXh0KHN0ciwgZXhjZXB0aW9uKTsKLSAgICByZXR1cm47Ci0gIGNhc2UgRWxlbWVudE91
dGVySFRNTDoKLSAgICBlbGVtZW50LnNldE91dGVySFRNTChzdHIsIGV4Y2VwdGlvbik7Ci0gICAg
cmV0dXJuOwotICBjYXNlIEVsZW1lbnRPdXRlclRleHQ6Ci0gICAgZWxlbWVudC5zZXRPdXRlclRl
eHQoc3RyLCBleGNlcHRpb24pOwotICAgIHJldHVybjsKLSAgY2FzZSBFbGVtZW50Q29udGVudEVk
aXRhYmxlOgotICAgIGVsZW1lbnQuc2V0Q29udGVudEVkaXRhYmxlKHN0cik7Ci0gICAgcmV0dXJu
OwotICBkZWZhdWx0OgotICAgIGtkV2FybmluZygpIDw8ICJLSlM6OkhUTUxFbGVtZW50OjpwdXRW
YWx1ZSB1bmhhbmRsZWQgdG9rZW4gIiA8PCB0b2tlbiA8PCAiIHRoaXNUYWc9IiA8PCBlbGVtZW50
LnRhZ05hbWUoKS5zdHJpbmcoKSA8PCAiIHN0cj0iIDw8IHN0ci5zdHJpbmcoKSA8PCBlbmRsOwot
ICB9Cit2b2lkIEhUTUxFbGVtZW50OjptYXJxdWVlU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7
CisgICAgLy8gRklYTUU6IEZpbmQgb3V0IHdoYXQgV2luSUUgc3VwcG9ydHMgYW5kIGltcGxlbWVu
dCBpdC4KK30KKwordm9pZCBIVE1MRWxlbWVudDo6cHV0VmFsdWUoRXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgaW50KQoreworICAgIERPTUV4Y2VwdGlvblRy
YW5zbGF0b3IgZXhjZXB0aW9uKGV4ZWMpOworICAgIERPTTo6RE9NU3RyaW5nIHN0ciA9IHZhbHVl
LmlzQShOdWxsVHlwZSkgPyBET006OkRPTVN0cmluZygpIDogdmFsdWUudG9TdHJpbmcoZXhlYyku
c3RyaW5nKCk7CisgCisgICAgLy8gQ2hlY2sgb3VyIHNldCBvZiBnZW5lcmljIHByb3BlcnRpZXMg
Zmlyc3QuCisgICAgSFRNTEVsZW1lbnRJbXBsICZlbGVtZW50ID0gKnN0YXRpY19jYXN0PEhUTUxF
bGVtZW50SW1wbCAqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2Fz
ZSBFbGVtZW50SWQ6CisgICAgICAgICAgICBlbGVtZW50LnNldElkKHN0cik7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIGNhc2UgRWxlbWVudFRpdGxlOgorICAgICAgICAgICAgZWxlbWVu
dC5zZXRUaXRsZShzdHIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIEVsZW1l
bnRMYW5nOgorICAgICAgICAgICAgZWxlbWVudC5zZXRMYW5nKHN0cik7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIGNhc2UgRWxlbWVudERpcjoKKyAgICAgICAgICAgIGVsZW1lbnQuc2V0
RGlyKHN0cik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgRWxlbWVudENsYXNz
TmFtZToKKyAgICAgICAgICAgIGVsZW1lbnQuc2V0Q2xhc3NOYW1lKHN0cik7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIGNhc2UgRWxlbWVudElubmVySFRNTDoKKyAgICAgICAgICAgIGVs
ZW1lbnQuc2V0SW5uZXJIVE1MKHN0ciwgZXhjZXB0aW9uKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgY2FzZSBFbGVtZW50SW5uZXJUZXh0OgorICAgICAgICAgICAgZWxlbWVudC5zZXRJ
bm5lclRleHQoc3RyLCBleGNlcHRpb24pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBj
YXNlIEVsZW1lbnRPdXRlckhUTUw6CisgICAgICAgICAgICBlbGVtZW50LnNldE91dGVySFRNTChz
dHIsIGV4Y2VwdGlvbik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgRWxlbWVu
dE91dGVyVGV4dDoKKyAgICAgICAgICAgIGVsZW1lbnQuc2V0T3V0ZXJUZXh0KHN0ciwgZXhjZXB0
aW9uKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBFbGVtZW50Q29udGVudEVk
aXRhYmxlOgorICAgICAgICAgICAgZWxlbWVudC5zZXRDb250ZW50RWRpdGFibGUoc3RyKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBOb3cgY2hlY2sgZm9yIHByb3BlcnRp
ZXMgdGhhdCBhcHBseSB0byBhIHNwZWNpZmljIGVsZW1lbnQgdHlwZS4KKyAgICBjb25zdCBHZXRT
ZXRJbmZvKiBpbmZvID0gZ2V0U2V0SW5mbygpOworICAgIGlmIChpbmZvICYmIGluZm8tPm1fc2V0
dGVyKQorICAgICAgICByZXR1cm4gKHRoaXMtPiooaW5mby0+bV9zZXR0ZXIpKShleGVjLCB0b2tl
biwgdmFsdWUsIHN0cik7ICAKIH0KIAogSFRNTEVsZW1lbnRJbXBsICp0b0hUTUxFbGVtZW50KFZh
bHVlSW1wICp2YWwpCkBAIC0zMDU4LDIzICszMjIxLDE3IEBAIEhUTUxFbGVtZW50SW1wbCAqdG9I
VE1MRWxlbWVudChWYWx1ZUltcCAKIAogSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnRJbXBsICp0b0hU
TUxUYWJsZUNhcHRpb25FbGVtZW50KFZhbHVlSW1wICp2YWwpCiB7Ci0gICAgaWYgKEhUTUxFbGVt
ZW50SW1wbCAqZSA9IHRvSFRNTEVsZW1lbnQodmFsKSkKLSAgICAgICAgc3dpdGNoIChlLT5pZCgp
KSB7Ci0gICAgICAgICAgICBjYXNlIElEX0NBUFRJT046Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PEhUTUxUYWJsZUNhcHRpb25FbGVtZW50SW1wbCAqPihlKTsKLSAgICAgICAg
fQorICAgIEhUTUxFbGVtZW50SW1wbCAqZSA9IHRvSFRNTEVsZW1lbnQodmFsKTsKKyAgICBpZiAo
ZSAmJiBlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Y2FwdGlvbigpKSkKKyAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PEhUTUxUYWJsZUNhcHRpb25FbGVtZW50SW1wbCAqPihlKTsKICAgICByZXR1
cm4gMDsKIH0KIAogSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsICp0b0hUTUxUYWJsZVNlY3Rp
b25FbGVtZW50KFZhbHVlSW1wICp2YWwpCiB7Ci0gICAgaWYgKEhUTUxFbGVtZW50SW1wbCAqZSA9
IHRvSFRNTEVsZW1lbnQodmFsKSkKLSAgICAgICAgc3dpdGNoIChlLT5pZCgpKSB7Ci0gICAgICAg
ICAgICBjYXNlIElEX1RIRUFEOgotICAgICAgICAgICAgY2FzZSBJRF9UQk9EWToKLSAgICAgICAg
ICAgIGNhc2UgSURfVEZPT1Q6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhU
TUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbCAqPihlKTsKLSAgICAgICAgfQorICAgIEhUTUxFbGVt
ZW50SW1wbCAqZSA9IHRvSFRNTEVsZW1lbnQodmFsKTsKKyAgICBpZiAoZSAmJiAoZS0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OnRoZWFkKCkpIHx8IGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0Ym9k
eSgpKSB8fCBlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGZvb3QoKSkpKQorICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsICo+KGUpOwogICAgIHJl
dHVybiAwOwogfQogCkBAIC0zMTIzLDEwICszMjgwLDEwIEBAIFZhbHVlIEtKUzo6SFRNTENvbGxl
Y3Rpb246OnRyeUdldChFeGVjU3QKICAgZWxzZSBpZiAocHJvcGVydHlOYW1lID09ICJzZWxlY3Rl
ZEluZGV4IikgewogICAgIC8vIE5PTi1TVEFOREFSRCBvcHRpb25zLnNlbGVjdGVkSW5kZXgKICAg
ICBOb2RlSW1wbCAqb3B0aW9uID0gY29sbGVjdGlvbi5pdGVtKDApOwotICAgIGlmIChvcHRpb24t
PmlkKCkgPT0gSURfT1BUSU9OKSB7CisgICAgaWYgKG9wdGlvbi0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6Om9wdGlvbigpKSkgewogICAgICAgTm9kZUltcGwgKnNlbGVjdCA9IG9wdGlvbjsKICAgICAg
IHdoaWxlICgoc2VsZWN0ID0gc2VsZWN0LT5wYXJlbnROb2RlKCkpKQotICAgICAgICBpZiAoc2Vs
ZWN0LT5pZCgpID09IElEX1NFTEVDVCkKKyAgICAgICAgaWYgKHNlbGVjdC0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OnNlbGVjdCgpKSkKIAkgIHJldHVybiBOdW1iZXIoc3RhdGljX2Nhc3Q8SFRNTFNl
bGVjdEVsZW1lbnRJbXBsICo+KHNlbGVjdCktPnNlbGVjdGVkSW5kZXgoKSk7CiAgICAgfQogICAg
IHJldHVybiBVbmRlZmluZWQoKTsKQEAgLTMzMTQsNyArMzQ3MSw3IEBAIHZvaWQgS0pTOjpIVE1M
U2VsZWN0Q29sbGVjdGlvbjo6dHJ5UHV0KEUKIAogICAvLyBpcyB2IGFuIG9wdGlvbiBlbGVtZW50
ID8KICAgTm9kZUltcGwgKm9wdGlvbiA9IHRvTm9kZSh2YWx1ZSk7Ci0gIGlmICghb3B0aW9uIHx8
IG9wdGlvbi0+aWQoKSAhPSBJRF9PUFRJT04pCisgIGlmICghb3B0aW9uIHx8ICFvcHRpb24tPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjpvcHRpb24oKSkpCiAgICAgcmV0dXJuOwogCiAgIGludCBleGNl
cHRpb24gPSAwOwpJbmRleDoga2h0bWwvZWNtYS9ranNfaHRtbC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VjbWEva2pzX2h0bWwuaCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS40NwpkaWZmIC11IC1wIC1yMS40NyBraHRtbC9lY21hL2tqc19odG1sLmgKLS0t
IGtodG1sL2VjbWEva2pzX2h0bWwuaAkyMiBKdW4gMjAwNSAwMDo0ODo0NCAtMDAwMAkxLjQ3Cisr
KyBraHRtbC9lY21hL2tqc19odG1sLmgJMjQgSnVuIDIwMDUgMDM6MDk6NTkgLTAwMDAKQEAgLTg1
LDYgKzg1LDEzMSBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgIGNhcHRpb25faW5mbywgY29sX2lu
Zm8sIHRhYmxlc2VjdGlvbl9pbmZvLCB0cl9pbmZvLAogICAgICAgdGFibGVjZWxsX2luZm8sIGZy
YW1lU2V0X2luZm8sIGZyYW1lX2luZm8sIGlGcmFtZV9pbmZvLCBtYXJxdWVlX2luZm87CiAKKyAg
ICAvLyBGSVhNRTogTWlnaHQgbWFrZSBzZW5zZSB0byBjb21iaW5lIHRoaXMgd2l0aCBDbGFzc0lu
Zm8gc29tZSBkYXkuCisgICAgdHlwZWRlZiBWYWx1ZSAoSFRNTEVsZW1lbnQ6OipHZXR0ZXJGdW5j
dGlvbikoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHR5cGVkZWYgdm9p
ZCAoSFRNTEVsZW1lbnQ6OipTZXR0ZXJGdW5jdGlvbikoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAg
c3RydWN0IEdldFNldEluZm8geyBHZXR0ZXJGdW5jdGlvbiBtX2dldHRlcjsgU2V0dGVyRnVuY3Rp
b24gbV9zZXR0ZXI7IH07CisgICAgY29uc3QgR2V0U2V0SW5mbyogZ2V0U2V0SW5mbygpIGNvbnN0
OworICAgIHN0YXRpYyBjb25zdCBHZXRTZXRJbmZvIGh0bWxfZ2V0c2V0LCBoZWFkX2dldHNldCwg
bGlua19nZXRzZXQsIHRpdGxlX2dldHNldCwKKyAgICAgIG1ldGFfZ2V0c2V0LCBiYXNlX2dldHNl
dCwgaXNJbmRleF9nZXRzZXQsIHN0eWxlX2dldHNldCwgYm9keV9nZXRzZXQsIGZvcm1fZ2V0c2V0
LAorICAgICAgc2VsZWN0X2dldHNldCwgb3B0R3JvdXBfZ2V0c2V0LCBvcHRpb25fZ2V0c2V0LCBp
bnB1dF9nZXRzZXQsIHRleHRBcmVhX2dldHNldCwKKyAgICAgIGJ1dHRvbl9nZXRzZXQsIGxhYmVs
X2dldHNldCwgZmllbGRTZXRfZ2V0c2V0LCBsZWdlbmRfZ2V0c2V0LCB1bF9nZXRzZXQsIG9sX2dl
dHNldCwKKyAgICAgIGRsX2dldHNldCwgZGlyX2dldHNldCwgbWVudV9nZXRzZXQsIGxpX2dldHNl
dCwgZGl2X2dldHNldCwgcF9nZXRzZXQsIGhlYWRpbmdfZ2V0c2V0LAorICAgICAgYmxvY2tRdW90
ZV9nZXRzZXQsIHFfZ2V0c2V0LCBwcmVfZ2V0c2V0LCBicl9nZXRzZXQsIGJhc2VGb250X2dldHNl
dCwgZm9udF9nZXRzZXQsCisgICAgICBocl9nZXRzZXQsIG1vZF9nZXRzZXQsIGFfZ2V0c2V0LCBj
YW52YXNfZ2V0c2V0LCBpbWdfZ2V0c2V0LCBvYmplY3RfZ2V0c2V0LCBwYXJhbV9nZXRzZXQsCisg
ICAgICBhcHBsZXRfZ2V0c2V0LCBtYXBfZ2V0c2V0LCBhcmVhX2dldHNldCwgc2NyaXB0X2dldHNl
dCwgdGFibGVfZ2V0c2V0LAorICAgICAgY2FwdGlvbl9nZXRzZXQsIGNvbF9nZXRzZXQsIHRhYmxl
c2VjdGlvbl9nZXRzZXQsIHRyX2dldHNldCwKKyAgICAgIHRhYmxlY2VsbF9nZXRzZXQsIGZyYW1l
U2V0X2dldHNldCwgZnJhbWVfZ2V0c2V0LCBpRnJhbWVfZ2V0c2V0LCBtYXJxdWVlX2dldHNldDsK
KworICAgIFZhbHVlIGh0bWxHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0
OworICAgIHZvaWQgIGh0bWxTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0
IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgaGVh
ZEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgaGVh
ZFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBj
b25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBsaW5rR2V0dGVyKEV4ZWNTdGF0
ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBsaW5rU2V0dGVyKEV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3Ry
aW5nJiBzdHIpOworICAgIFZhbHVlIHRpdGxlR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRv
a2VuKSBjb25zdDsKKyAgICB2b2lkICB0aXRsZVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAg
ICBWYWx1ZSBtZXRhR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAg
ICB2b2lkICBtZXRhU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1
ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIGJhc2VHZXR0
ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGJhc2VTZXR0
ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3Qg
RE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgaXNJbmRleEdldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgaXNJbmRleFNldHRlcihFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0
cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBzdHlsZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0
b2tlbikgY29uc3Q7CisgICAgdm9pZCAgc3R5bGVTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7Cisg
ICAgVmFsdWUgYm9keUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7Cisg
ICAgdm9pZCAgYm9keVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFs
dWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBmb3JtR2V0
dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBmb3JtU2V0
dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0
IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIHNlbGVjdEdldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgc2VsZWN0U2V0dGVyKEV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3Ry
aW5nJiBzdHIpOworICAgIFZhbHVlIG9wdEdyb3VwR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50
IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBvcHRHcm91cFNldHRlcihFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3Ry
KTsKKyAgICBWYWx1ZSBvcHRpb25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNv
bnN0OworICAgIHZvaWQgIG9wdGlvblNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwg
Y29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1
ZSBpbnB1dEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9p
ZCAgaW5wdXRTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2
YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgdGV4dEFyZWFHZXR0
ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIHRleHRBcmVh
U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNv
bnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIGJ1dHRvbkdldHRlcihFeGVjU3Rh
dGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgYnV0dG9uU2V0dGVyKEV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9N
U3RyaW5nJiBzdHIpOworICAgIFZhbHVlIGxhYmVsR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50
IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBsYWJlbFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsK
KyAgICBWYWx1ZSBmaWVsZFNldEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29u
c3Q7CisgICAgdm9pZCAgZmllbGRTZXRTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4s
IGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFs
dWUgbGVnZW5kR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2
b2lkICBsZWdlbmRTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVl
JiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgdUxpc3RHZXR0
ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIHVMaXN0U2V0
dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0
IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIG9MaXN0R2V0dGVyKEV4ZWNTdGF0ZSog
ZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBvTGlzdFNldHRlcihFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmlu
ZyYgc3RyKTsKKyAgICBWYWx1ZSBkTGlzdEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tl
bikgY29uc3Q7CisgICAgdm9pZCAgZExpc3RTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAg
VmFsdWUgZGlyR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2
b2lkICBkaXJTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2
YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgbWVudUdldHRlcihF
eGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgbWVudVNldHRlcihF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006
OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBsaUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGlu
dCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgbGlTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7Cisg
ICAgVmFsdWUgZGl2R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAg
ICB2b2lkICBkaXZTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVl
JiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgcGFyYWdyYXBo
R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBwYXJh
Z3JhcGhTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1
ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgaGVhZGluZ0dldHRlcihF
eGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgaGVhZGluZ1NldHRl
cihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBE
T006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBibG9ja1F1b3RlR2V0dGVyKEV4ZWNTdGF0
ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBibG9ja1F1b3RlU2V0dGVyKEV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6
RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIHF1b3RlR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywg
aW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBxdW90ZVNldHRlcihFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3Ry
KTsKKyAgICBWYWx1ZSBwcmVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0
OworICAgIHZvaWQgIHByZVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3Qg
VmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBickdl
dHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgYnJTZXR0
ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3Qg
RE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgYmFzZUZvbnRHZXR0ZXIoRXhlY1N0YXRl
KiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGJhc2VGb250U2V0dGVyKEV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9N
U3RyaW5nJiBzdHIpOworICAgIFZhbHVlIGZvbnRHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQg
dG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGZvbnRTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7Cisg
ICAgVmFsdWUgaHJHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAg
IHZvaWQgIGhyU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYg
dmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIG1vZEdldHRlcihF
eGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgbW9kU2V0dGVyKEV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6
RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIGFuY2hvckdldHRlcihFeGVjU3RhdGUqIGV4ZWMs
IGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgYW5jaG9yU2V0dGVyKEV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBz
dHIpOworICAgIFZhbHVlIGltYWdlR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBj
b25zdDsKKyAgICB2b2lkICBpbWFnZVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwg
Y29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1
ZSBvYmplY3RHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZv
aWQgIG9iamVjdFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUm
IHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBwYXJhbUdldHRl
cihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgcGFyYW1TZXR0
ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3Qg
RE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgYXBwbGV0R2V0dGVyKEV4ZWNTdGF0ZSog
ZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBhcHBsZXRTZXR0ZXIoRXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJp
bmcmIHN0cik7CisgICAgVmFsdWUgbWFwR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2Vu
KSBjb25zdDsKKyAgICB2b2lkICBtYXBTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4s
IGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFs
dWUgYXJlYUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9p
ZCAgYXJlYVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZh
bHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBzY3JpcHRHZXR0ZXIo
RXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIHNjcmlwdFNldHRl
cihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBE
T006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSB0YWJsZUdldHRlcihFeGVjU3RhdGUqIGV4
ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgdGFibGVTZXR0ZXIoRXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcm
IHN0cik7CisgICAgVmFsdWUgdGFibGVDYXB0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50
IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICB0YWJsZUNhcHRpb25TZXR0ZXIoRXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcm
IHN0cik7CisgICAgVmFsdWUgdGFibGVDb2xHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0OworICAgIHZvaWQgIHRhYmxlQ29sU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOwor
ICAgIFZhbHVlIHRhYmxlU2VjdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikg
Y29uc3Q7CisgICAgdm9pZCAgdGFibGVTZWN0aW9uU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOwor
ICAgIFZhbHVlIHRhYmxlUm93R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25z
dDsKKyAgICB2b2lkICB0YWJsZVJvd1NldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwg
Y29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1
ZSB0YWJsZUNlbGxHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAg
IHZvaWQgIHRhYmxlQ2VsbFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3Qg
VmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBmcmFt
ZVNldEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAg
ZnJhbWVTZXRTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2
YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgZnJhbWVHZXR0ZXIo
RXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGZyYW1lU2V0dGVy
KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERP
TTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIGlGcmFtZUdldHRlcihFeGVjU3RhdGUqIGV4
ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgaUZyYW1lU2V0dGVyKEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5n
JiBzdHIpOworICAgIFZhbHVlIG1hcnF1ZWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0OworICAgIHZvaWQgIG1hcnF1ZWVTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisK
ICAgICBlbnVtIHsgSHRtbFZlcnNpb24sIEhlYWRQcm9maWxlLCBMaW5rSHJlZiwgTGlua1JlbCwg
TGlua01lZGlhLAogICAgICAgICAgICBMaW5rQ2hhcnNldCwgTGlua0Rpc2FibGVkLCBMaW5rSHJl
ZkxhbmcsIExpbmtSZXYsIExpbmtUYXJnZXQsIExpbmtUeXBlLAogICAgICAgICAgICBMaW5rU2hl
ZXQsIFRpdGxlVGV4dCwgTWV0YU5hbWUsIE1ldGFIdHRwRXF1aXYsIE1ldGFDb250ZW50LCBNZXRh
U2NoZW1lLApJbmRleDoga2h0bWwvZWNtYS9ranNfd2luZG93LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lY21hL2tqc193aW5kb3cuY3BwLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjE2MQpkaWZmIC11IC1wIC1yMS4xNjEga2h0bWwvZWNtYS9ranNfd2lu
ZG93LmNwcAotLS0ga2h0bWwvZWNtYS9ranNfd2luZG93LmNwcAkyMiBKdW4gMjAwNSAwMDo0ODo0
NCAtMDAwMAkxLjE2MQorKysga2h0bWwvZWNtYS9ranNfd2luZG93LmNwcAkyNCBKdW4gMjAwNSAw
MzoxMDowMiAtMDAwMApAQCAtNjgsNyArNjgsNiBAQAogI2luY2x1ZGUgImh0bWwvaHRtbF9kb2N1
bWVudGltcGwuaCIKICNpbmNsdWRlICJjc3MvY3NzX3J1bGVpbXBsLmgiCiAjaW5jbHVkZSAiY3Nz
L2Nzc19zdHlsZXNoZWV0aW1wbC5oIgotI2luY2x1ZGUgIm1pc2MvaHRtbHRhZ3MuaCIKIAogLy8g
TXVzdCBpbmNsdWRlIDxjbWF0aD4gaW5zdGVhZCBvZiA8bWF0aC5oPiBiZWNhdXNlIG9mIGEgYnVn
IGluIHRoZQogLy8gZ2NjIDMuMyBsaWJyYXJ5IHZlcnNpb24gb2YgPG1hdGguaD4gd2hlcmUgaWYg
eW91IGluY2x1ZGUgYm90aApJbmRleDoga2h0bWwvZWRpdGluZy9hcHBseV9zdHlsZV9jb21tYW5k
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5n
L2FwcGx5X3N0eWxlX2NvbW1hbmQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIKZGlmZiAt
dSAtcCAtcjEuMiBraHRtbC9lZGl0aW5nL2FwcGx5X3N0eWxlX2NvbW1hbmQuY3BwCi0tLSBraHRt
bC9lZGl0aW5nL2FwcGx5X3N0eWxlX2NvbW1hbmQuY3BwCTI0IE1heSAyMDA1IDA3OjIxOjQ3IC0w
MDAwCTEuMgorKysga2h0bWwvZWRpdGluZy9hcHBseV9zdHlsZV9jb21tYW5kLmNwcAkyNCBKdW4g
MjAwNSAwMzoxMDowMyAtMDAwMApAQCAtMzMsNyArMzMsNyBAQAogI2luY2x1ZGUgImNzcy9jc3Nw
cm9wZXJ0aWVzLmgiCiAjaW5jbHVkZSAiZG9tL2RvbV9zdHJpbmcuaCIKICNpbmNsdWRlICJodG1s
L2h0bWxfZWxlbWVudGltcGwuaCIKLSNpbmNsdWRlICJtaXNjL2h0bWx0YWdzLmgiCisjaW5jbHVk
ZSAiaHRtbG5hbWVzLmgiCiAjaW5jbHVkZSAibWlzYy9odG1sYXR0cnMuaCIKICNpbmNsdWRlICJy
ZW5kZXJpbmcvcmVuZGVyX29iamVjdC5oIgogI2luY2x1ZGUgInhtbC9kb21fZG9jaW1wbC5oIgpA
QCAtNjUsNiArNjUsNyBAQCB1c2luZyBET006Ok5vZGVJbXBsOwogdXNpbmcgRE9NOjpQb3NpdGlv
bjsKIHVzaW5nIERPTTo6UmFuZ2VJbXBsOwogdXNpbmcgRE9NOjpUZXh0SW1wbDsKK3VzaW5nIERP
TTo6SFRNTE5hbWVzOwogCiBuYW1lc3BhY2Uga2h0bWwgewogCkBAIC0yNDksMTIgKzI1MCwxMiBA
QCBib29sIGlzU3R5bGVTcGFuKGNvbnN0IE5vZGVJbXBsICpub2RlKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICBjb25zdCBIVE1MRWxlbWVudEltcGwgKmVsZW0gPSBzdGF0aWNfY2FzdDxj
b25zdCBIVE1MRWxlbWVudEltcGwgKj4obm9kZSk7Ci0gICAgcmV0dXJuIGVsZW0tPmlkKCkgPT0g
SURfU1BBTiAmJiBlbGVtLT5nZXRBdHRyaWJ1dGUoQVRUUl9DTEFTUykgPT0gc3R5bGVTcGFuQ2xh
c3NTdHJpbmcoKTsKKyAgICByZXR1cm4gZWxlbS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6c3Bh
bigpKSAmJiBlbGVtLT5nZXRBdHRyaWJ1dGUoQVRUUl9DTEFTUykgPT0gc3R5bGVTcGFuQ2xhc3NT
dHJpbmcoKTsKIH0KIAogc3RhdGljIGJvb2wgaXNFbXB0eVN0eWxlU3Bhbihjb25zdCBOb2RlSW1w
bCAqbm9kZSkKIHsKLSAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPmlzSFRNTEVsZW1lbnQoKSB8fCBu
b2RlLT5pZCgpICE9IElEX1NQQU4pCisgICAgaWYgKCFub2RlIHx8ICFub2RlLT5pc0hUTUxFbGVt
ZW50KCkgfHwgIW5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzcGFuKCkpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICBjb25zdCBIVE1MRWxlbWVudEltcGwgKmVsZW0gPSBzdGF0aWNf
Y2FzdDxjb25zdCBIVE1MRWxlbWVudEltcGwgKj4obm9kZSk7CkBAIC0yNjQsNyArMjY1LDcgQEAg
c3RhdGljIGJvb2wgaXNFbXB0eVN0eWxlU3Bhbihjb25zdCBOb2RlSQogCiBzdGF0aWMgYm9vbCBp
c0VtcHR5Rm9udFRhZyhjb25zdCBOb2RlSW1wbCAqbm9kZSkKIHsKLSAgICBpZiAoIW5vZGUgfHwg
bm9kZS0+aWQoKSAhPSBJRF9GT05UKQorICAgIGlmICghbm9kZSB8fCAhbm9kZS0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OmZvbnQoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGNvbnN0
IEVsZW1lbnRJbXBsICplbGVtID0gc3RhdGljX2Nhc3Q8Y29uc3QgRWxlbWVudEltcGwgKj4obm9k
ZSk7CkBAIC0yNzUsNyArMjc2LDcgQEAgc3RhdGljIGJvb2wgaXNFbXB0eUZvbnRUYWcoY29uc3Qg
Tm9kZUltcAogc3RhdGljIEVsZW1lbnRJbXBsICpjcmVhdGVGb250RWxlbWVudChEb2N1bWVudElt
cGwgKmRvY3VtZW50KQogewogICAgIGludCBleGNlcHRpb25Db2RlID0gMDsKLSAgICBFbGVtZW50
SW1wbCAqZm9udE5vZGUgPSBkb2N1bWVudC0+Y3JlYXRlSFRNTEVsZW1lbnQoImZvbnQiLCBleGNl
cHRpb25Db2RlKTsKKyAgICBFbGVtZW50SW1wbCAqZm9udE5vZGUgPSBkb2N1bWVudC0+Y3JlYXRl
RWxlbWVudE5TKFhIVE1MX05BTUVTUEFDRSwgImZvbnQiLCBleGNlcHRpb25Db2RlKTsKICAgICBB
U1NFUlQoZXhjZXB0aW9uQ29kZSA9PSAwKTsKICAgICBmb250Tm9kZS0+c2V0QXR0cmlidXRlKEFU
VFJfQ0xBU1MsIHN0eWxlU3BhbkNsYXNzU3RyaW5nKCkpOwogICAgIHJldHVybiBmb250Tm9kZTsK
QEAgLTI4NCw3ICsyODUsNyBAQCBzdGF0aWMgRWxlbWVudEltcGwgKmNyZWF0ZUZvbnRFbGVtZW50
KERvCiBFbGVtZW50SW1wbCAqY3JlYXRlU3R5bGVTcGFuRWxlbWVudChEb2N1bWVudEltcGwgKmRv
Y3VtZW50KQogewogICAgIGludCBleGNlcHRpb25Db2RlID0gMDsKLSAgICBFbGVtZW50SW1wbCAq
c3R5bGVFbGVtZW50ID0gZG9jdW1lbnQtPmNyZWF0ZUhUTUxFbGVtZW50KCJTUEFOIiwgZXhjZXB0
aW9uQ29kZSk7CisgICAgRWxlbWVudEltcGwgKnN0eWxlRWxlbWVudCA9IGRvY3VtZW50LT5jcmVh
dGVFbGVtZW50TlMoWEhUTUxfTkFNRVNQQUNFLCAiU1BBTiIsIGV4Y2VwdGlvbkNvZGUpOwogICAg
IEFTU0VSVChleGNlcHRpb25Db2RlID09IDApOwogICAgIHN0eWxlRWxlbWVudC0+c2V0QXR0cmli
dXRlKEFUVFJfQ0xBU1MsIHN0eWxlU3BhbkNsYXNzU3RyaW5nKCkpOwogICAgIHJldHVybiBzdHls
ZUVsZW1lbnQ7CkBAIC01ODYsNyArNTg3LDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBw
bHlJbmxpbmVTdHlsZQogICAgICAgICAgICAgICAgICAgICAvLyB0aGUgY3VycmVudCBncm91cC4K
ICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUgPT0gZW5kLm5vZGUoKSB8fCAKICAgICAgICAg
ICAgICAgICAgICAgICAgIHJ1blN0YXJ0LT5wYXJlbnROb2RlKCkgIT0gbmV4dC0+cGFyZW50Tm9k
ZSgpIHx8IAotICAgICAgICAgICAgICAgICAgICAgICAgKG5leHQtPmlzSFRNTEVsZW1lbnQoKSAm
JiBuZXh0LT5pZCgpICE9IElEX0JSKSB8fCAKKyAgICAgICAgICAgICAgICAgICAgICAgICFuZXh0
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YnIoKSkgfHwgCiAgICAgICAgICAgICAgICAgICAgICAg
ICAobmV4dC0+cmVuZGVyZXIoKSAmJiAhbmV4dC0+cmVuZGVyZXIoKS0+aXNJbmxpbmUoKSkpCiAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgbm9kZSA9
IG5leHQ7CkBAIC02MTEsMTEgKzYxMiwxMSBAQCBib29sIEFwcGx5U3R5bGVDb21tYW5kOjppc0hU
TUxTdHlsZU5vZGUoCiAgICAgZm9yIChRVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxDU1NQcm9wZXJ0
eT4gaXQgPSBzdHlsZS0+dmFsdWVzSXRlcmF0b3IoKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAg
ICAgIHN3aXRjaCAoKCppdCkuaWQoKSkgewogICAgICAgICAgICAgY2FzZSBDU1NfUFJPUF9GT05U
X1dFSUdIVDoKLSAgICAgICAgICAgICAgICBpZiAoZWxlbS0+aWQoKSA9PSBJRF9CKQorICAgICAg
ICAgICAgICAgIGlmIChlbGVtLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpiKCkpKQogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIGNhc2UgQ1NTX1BST1BfRk9OVF9TVFlMRToKLSAgICAgICAgICAgICAgICBpZiAoZWxl
bS0+aWQoKSA9PSBJRF9JKQorICAgICAgICAgICAgICAgIGlmIChlbGVtLT5oYXNMb2NhbE5hbWUo
SFRNTE5hbWVzOjppKCkpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgfQogICAgIH0KQEAgLTYzOCw3ICs2MzksNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpy
ZW1vdmVIVE1MRm9udFN0CiAgICAgQVNTRVJUKHN0eWxlKTsKICAgICBBU1NFUlQoZWxlbSk7CiAK
LSAgICBpZiAoZWxlbS0+aWQoKSAhPSBJRF9GT05UKQorICAgIGlmICghZWxlbS0+aGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6Zm9udCgpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaW50IGV4Y2Vw
dGlvbkNvZGUgPSAwOwpAQCAtMTA0Nyw3ICsxMDQ4LDcgQEAgc3RhdGljIGJvb2wgYXJlSWRlbnRp
Y2FsRWxlbWVudHMoTm9kZUltcAogICAgIEVsZW1lbnRJbXBsICpmaXJzdEVsZW1lbnQgPSBzdGF0
aWNfY2FzdDxFbGVtZW50SW1wbCAqPihmaXJzdCk7CiAgICAgRWxlbWVudEltcGwgKnNlY29uZEVs
ZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50SW1wbCAqPihzZWNvbmQpOwogICAgIAotICAgIGlm
IChmaXJzdEVsZW1lbnQtPmlkKCkgIT0gc2Vjb25kRWxlbWVudC0+aWQoKSkKKyAgICBpZiAoZmly
c3RFbGVtZW50LT50YWdOYW1lKCkgIT0gc2Vjb25kRWxlbWVudC0+dGFnTmFtZSgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICBOYW1lZEF0dHJNYXBJbXBsICpmaXJzdE1hcCA9IGZpcnN0
RWxlbWVudC0+YXR0cmlidXRlcygpOwpAQCAtMTEyOSw3ICsxMTMwLDcgQEAgYm9vbCBBcHBseVN0
eWxlQ29tbWFuZDo6bWVyZ2VFbmRXaXRoTmV4dAogICAgICAgICBlbmRPZmZzZXQgPSBwYXJlbnRM
YXN0T2Zmc2V0OwogICAgIH0KIAotICAgIGlmICghZW5kTm9kZS0+aXNFbGVtZW50Tm9kZSgpIHx8
IGVuZE5vZGUtPmlkKCkgPT0gSURfQlIpCisgICAgaWYgKCFlbmROb2RlLT5pc0VsZW1lbnROb2Rl
KCkgfHwgZW5kTm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJyKCkpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICBOb2RlSW1wbCAqbmV4dFNpYmxpbmcgPSBlbmROb2RlLT5uZXh0U2li
bGluZygpOwpAQCAtMTI3NCwxNCArMTI3NSwxNCBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjph
ZGRJbmxpbmVTdHlsZUlmCiAgICAgfQogCiAgICAgaWYgKHN0eWxlQ2hhbmdlLmFwcGx5Qm9sZCgp
KSB7Ci0gICAgICAgIEVsZW1lbnRJbXBsICpib2xkRWxlbWVudCA9IGRvY3VtZW50KCktPmNyZWF0
ZUhUTUxFbGVtZW50KCJCIiwgZXhjZXB0aW9uQ29kZSk7CisgICAgICAgIEVsZW1lbnRJbXBsICpi
b2xkRWxlbWVudCA9IGRvY3VtZW50KCktPmNyZWF0ZUVsZW1lbnROUyhYSFRNTF9OQU1FU1BBQ0Us
ICJCIiwgZXhjZXB0aW9uQ29kZSk7CiAgICAgICAgIEFTU0VSVChleGNlcHRpb25Db2RlID09IDAp
OwogICAgICAgICBpbnNlcnROb2RlQmVmb3JlKGJvbGRFbGVtZW50LCBzdGFydE5vZGUpOwogICAg
ICAgICBzdXJyb3VuZE5vZGVSYW5nZVdpdGhFbGVtZW50KHN0YXJ0Tm9kZSwgZW5kTm9kZSwgYm9s
ZEVsZW1lbnQpOwogICAgIH0KIAogICAgIGlmIChzdHlsZUNoYW5nZS5hcHBseUl0YWxpYygpKSB7
Ci0gICAgICAgIEVsZW1lbnRJbXBsICppdGFsaWNFbGVtZW50ID0gZG9jdW1lbnQoKS0+Y3JlYXRl
SFRNTEVsZW1lbnQoIkkiLCBleGNlcHRpb25Db2RlKTsKKyAgICAgICAgRWxlbWVudEltcGwgKml0
YWxpY0VsZW1lbnQgPSBkb2N1bWVudCgpLT5jcmVhdGVFbGVtZW50TlMoWEhUTUxfTkFNRVNQQUNF
LCAiSSIsIGV4Y2VwdGlvbkNvZGUpOwogICAgICAgICBBU1NFUlQoZXhjZXB0aW9uQ29kZSA9PSAw
KTsKICAgICAgICAgaW5zZXJ0Tm9kZUJlZm9yZShpdGFsaWNFbGVtZW50LCBzdGFydE5vZGUpOwog
ICAgICAgICBzdXJyb3VuZE5vZGVSYW5nZVdpdGhFbGVtZW50KHN0YXJ0Tm9kZSwgZW5kTm9kZSwg
aXRhbGljRWxlbWVudCk7CkluZGV4OiBraHRtbC9lZGl0aW5nL2JyZWFrX2Jsb2NrcXVvdGVfY29t
bWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWRp
dGluZy9icmVha19ibG9ja3F1b3RlX2NvbW1hbmQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjEKZGlmZiAtdSAtcCAtcjEuMSBraHRtbC9lZGl0aW5nL2JyZWFrX2Jsb2NrcXVvdGVfY29tbWFu
ZC5jcHAKLS0tIGtodG1sL2VkaXRpbmcvYnJlYWtfYmxvY2txdW90ZV9jb21tYW5kLmNwcAkyNCBN
YXkgMjAwNSAwNzoyMTo0NyAtMDAwMAkxLjEKKysrIGtodG1sL2VkaXRpbmcvYnJlYWtfYmxvY2tx
dW90ZV9jb21tYW5kLmNwcAkyNCBKdW4gMjAwNSAwMzoxMDowMyAtMDAwMApAQCAtMjgsNyArMjgs
NyBAQAogI2luY2x1ZGUgImh0bWxlZGl0aW5nLmgiCiAjaW5jbHVkZSAidmlzaWJsZV9wb3NpdGlv
bi5oIgogCi0jaW5jbHVkZSAibWlzYy9odG1sdGFncy5oIgorI2luY2x1ZGUgImh0bWxuYW1lcy5o
IgogI2luY2x1ZGUgInhtbC9kb21fZWxlbWVudGltcGwuaCIKICNpbmNsdWRlICJ4bWwvZG9tX3Rl
eHRpbXBsLmgiCiAKQEAgLTQzLDYgKzQzLDcgQEAgdXNpbmcgRE9NOjpFbGVtZW50SW1wbDsKIHVz
aW5nIERPTTo6Tm9kZUltcGw7CiB1c2luZyBET006OlBvc2l0aW9uOwogdXNpbmcgRE9NOjpUZXh0
SW1wbDsKK3VzaW5nIERPTTo6SFRNTE5hbWVzOwogCiBuYW1lc3BhY2Uga2h0bWwgewogCkBAIC0x
NDYsNyArMTQ3LDcgQEAgdm9pZCBCcmVha0Jsb2NrcXVvdGVDb21tYW5kOjpkb0FwcGx5KCkKICAg
ICAgICAgYm9vbCBzdGFydElzQlIgPSBmYWxzZTsKICAgICAgICAgaWYgKHN0YXJ0Tm9kZSAhPSB0
b3BCbG9ja3F1b3RlKSB7CiAgICAgICAgICAgICBOb2RlSW1wbCAqbiA9IHN0YXJ0Tm9kZTsKLSAg
ICAgICAgICAgIHN0YXJ0SXNCUiA9IG4tPmlkKCkgPT0gSURfQlI7CisgICAgICAgICAgICBzdGFy
dElzQlIgPSBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YnIoKSk7CiAgICAgICAgICAgICBpZiAo
c3RhcnRJc0JSKQogICAgICAgICAgICAgICAgIG4gPSBuLT5uZXh0U2libGluZygpOwogICAgICAg
ICAgICAgd2hpbGUgKG4pIHsKSW5kZXg6IGtodG1sL2VkaXRpbmcvY29tcG9zaXRlX2VkaXRfY29t
bWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWRp
dGluZy9jb21wb3NpdGVfZWRpdF9jb21tYW5kLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4z
CmRpZmYgLXUgLXAgLXIxLjMga2h0bWwvZWRpdGluZy9jb21wb3NpdGVfZWRpdF9jb21tYW5kLmNw
cAotLS0ga2h0bWwvZWRpdGluZy9jb21wb3NpdGVfZWRpdF9jb21tYW5kLmNwcAkyNCBNYXkgMjAw
NSAwNzoyMTo0NyAtMDAwMAkxLjMKKysrIGtodG1sL2VkaXRpbmcvY29tcG9zaXRlX2VkaXRfY29t
bWFuZC5jcHAJMjQgSnVuIDIwMDUgMDM6MTA6MDQgLTAwMDAKQEAgLTQ3LDcgKzQ3LDcgQEAKICNp
bmNsdWRlICJ3cmFwX2NvbnRlbnRzX2luX2R1bW15X3NwYW5fY29tbWFuZC5oIgogCiAjaW5jbHVk
ZSAibWlzYy9odG1sYXR0cnMuaCIKLSNpbmNsdWRlICJtaXNjL2h0bWx0YWdzLmgiCisjaW5jbHVk
ZSAiaHRtbG5hbWVzLmgiCiAjaW5jbHVkZSAicmVuZGVyaW5nL3JlbmRlcl90ZXh0LmgiCiAjaW5j
bHVkZSAieG1sL2RvbTJfcmFuZ2VpbXBsLmgiCiAjaW5jbHVkZSAieG1sL2RvbV90ZXh0aW1wbC5o
IgpAQCAtNjcsNiArNjcsNyBAQCB1c2luZyBET006Ok5vZGVJbXBsOwogdXNpbmcgRE9NOjpQb3Np
dGlvbjsKIHVzaW5nIERPTTo6UmFuZ2VJbXBsOwogdXNpbmcgRE9NOjpUZXh0SW1wbDsKK3VzaW5n
IERPTTo6SFRNTE5hbWVzOwogCiBuYW1lc3BhY2Uga2h0bWwgewogCkBAIC0xMjcsMTQgKzEyOCwx
NCBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjppbnNlcnRQYXJhZ3JhCiAKIHZvaWQgQ29t
cG9zaXRlRWRpdENvbW1hbmQ6Omluc2VydE5vZGVCZWZvcmUoTm9kZUltcGwgKmluc2VydENoaWxk
LCBOb2RlSW1wbCAqcmVmQ2hpbGQpCiB7Ci0gICAgQVNTRVJUKHJlZkNoaWxkLT5pZCgpICE9IElE
X0JPRFkpOworICAgIEFTU0VSVCghcmVmQ2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpib2R5
KCkpKTsKICAgICBFZGl0Q29tbWFuZFB0ciBjbWQobmV3IEluc2VydE5vZGVCZWZvcmVDb21tYW5k
KGRvY3VtZW50KCksIGluc2VydENoaWxkLCByZWZDaGlsZCkpOwogICAgIGFwcGx5Q29tbWFuZFRv
Q29tcG9zaXRlKGNtZCk7CiB9CiAKIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6Omluc2VydE5v
ZGVBZnRlcihOb2RlSW1wbCAqaW5zZXJ0Q2hpbGQsIE5vZGVJbXBsICpyZWZDaGlsZCkKIHsKLSAg
ICBBU1NFUlQocmVmQ2hpbGQtPmlkKCkgIT0gSURfQk9EWSk7CisgICAgQVNTRVJUKCFyZWZDaGls
ZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJvZHkoKSkpOwogICAgIGlmIChyZWZDaGlsZC0+cGFy
ZW50Tm9kZSgpLT5sYXN0Q2hpbGQoKSA9PSByZWZDaGlsZCkgewogICAgICAgICBhcHBlbmROb2Rl
KGluc2VydENoaWxkLCByZWZDaGlsZC0+cGFyZW50Tm9kZSgpKTsKICAgICB9CkBAIC01NDUsNyAr
NTQ2LDcgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6bW92ZVBhcmFncmFwaAogICAgIC8v
ICAgICAgIGFkZGl0aW9uYWwgbGV2ZWwgb2YgcXVvdGluZy4KICAgICBOb2RlSW1wbCAqc3RhcnRC
bG9jayA9IHBhcmFncmFwaFN0YXJ0Lm5vZGUoKS0+ZW5jbG9zaW5nQmxvY2tGbG93RWxlbWVudCgp
OwogICAgIE5vZGVJbXBsICpuZXdCbG9jayA9IDA7Ci0gICAgaWYgKHN0YXJ0QmxvY2stPmlkKCkg
PT0gSURfQk9EWSB8fCAoaXNNYWlsQmxvY2txdW90ZShzdGFydEJsb2NrKSAmJiBwYXJhZ3JhcGhT
dGFydC5ub2RlKCkgIT0gc3RhcnRCbG9jaykpCisgICAgaWYgKHN0YXJ0QmxvY2stPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjpib2R5KCkpIHx8IChpc01haWxCbG9ja3F1b3RlKHN0YXJ0QmxvY2spICYm
IHBhcmFncmFwaFN0YXJ0Lm5vZGUoKSAhPSBzdGFydEJsb2NrKSkKICAgICAgICAgbmV3QmxvY2sg
PSBjcmVhdGVEZWZhdWx0UGFyYWdyYXBoRWxlbWVudChkb2N1bWVudCgpKTsKICAgICBlbHNlCiAg
ICAgICAgIG5ld0Jsb2NrID0gc3RhcnRCbG9jay0+Y2xvbmVOb2RlKGZhbHNlKTsKQEAgLTU1NSwx
MCArNTU2LDEwIEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6Om1vdmVQYXJhZ3JhcGgKICAg
ICAgICAgbW92ZU5vZGUgPSBtb3ZlTm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpOwogICAgIE5vZGVJ
bXBsICplbmROb2RlID0gcGFyYWdyYXBoRW5kLm5vZGUoKTsKIAotICAgIGlmIChwYXJhZ3JhcGhT
dGFydC5ub2RlKCktPmlkKCkgPT0gSURfQk9EWSkgeworICAgIGlmIChwYXJhZ3JhcGhTdGFydC5u
b2RlKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpib2R5KCkpKSB7CiAgICAgICAgIGluc2VydE5v
ZGVBdChuZXdCbG9jaywgcGFyYWdyYXBoU3RhcnQubm9kZSgpLCAwKTsKICAgICB9Ci0gICAgZWxz
ZSBpZiAocGFyYWdyYXBoU3RhcnQubm9kZSgpLT5pZCgpID09IElEX0JSKSB7CisgICAgZWxzZSBp
ZiAocGFyYWdyYXBoU3RhcnQubm9kZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YnIoKSkpIHsK
ICAgICAgICAgaW5zZXJ0Tm9kZUFmdGVyKG5ld0Jsb2NrLCBwYXJhZ3JhcGhTdGFydC5ub2RlKCkp
OwogICAgIH0KICAgICBlbHNlIHsKQEAgLTU3OCw3ICs1NzksNyBAQCB2b2lkIENvbXBvc2l0ZUVk
aXRDb21tYW5kOjptb3ZlUGFyYWdyYXBoCiBFbGVtZW50SW1wbCAqY3JlYXRlQmxvY2tQbGFjZWhv
bGRlckVsZW1lbnQoRG9jdW1lbnRJbXBsICpkb2N1bWVudCkKIHsKICAgICBpbnQgZXhjZXB0aW9u
Q29kZSA9IDA7Ci0gICAgRWxlbWVudEltcGwgKmJyZWFrTm9kZSA9IGRvY3VtZW50LT5jcmVhdGVI
VE1MRWxlbWVudCgiYnIiLCBleGNlcHRpb25Db2RlKTsKKyAgICBFbGVtZW50SW1wbCAqYnJlYWtO
b2RlID0gZG9jdW1lbnQtPmNyZWF0ZUVsZW1lbnROUyhYSFRNTF9OQU1FU1BBQ0UsICJiciIsIGV4
Y2VwdGlvbkNvZGUpOwogICAgIEFTU0VSVChleGNlcHRpb25Db2RlID09IDApOwogICAgIGJyZWFr
Tm9kZS0+c2V0QXR0cmlidXRlKEFUVFJfQ0xBU1MsIGJsb2NrUGxhY2Vob2xkZXJDbGFzc1N0cmlu
ZygpKTsKICAgICByZXR1cm4gYnJlYWtOb2RlOwpJbmRleDoga2h0bWwvZWRpdGluZy9kZWxldGVf
c2VsZWN0aW9uX2NvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJD
b3JlL2todG1sL2VkaXRpbmcvZGVsZXRlX3NlbGVjdGlvbl9jb21tYW5kLmNwcCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS4yCmRpZmYgLXUgLXAgLXIxLjIga2h0bWwvZWRpdGluZy9kZWxldGVfc2Vs
ZWN0aW9uX2NvbW1hbmQuY3BwCi0tLSBraHRtbC9lZGl0aW5nL2RlbGV0ZV9zZWxlY3Rpb25fY29t
bWFuZC5jcHAJMjQgTWF5IDIwMDUgMDc6MjE6NDcgLTAwMDAJMS4yCisrKyBraHRtbC9lZGl0aW5n
L2RlbGV0ZV9zZWxlY3Rpb25fY29tbWFuZC5jcHAJMjQgSnVuIDIwMDUgMDM6MTA6MDUgLTAwMDAK
QEAgLTI4LDcgKzI4LDcgQEAKICNpbmNsdWRlICJjc3MvY3NzX2NvbXB1dGVkc3R5bGUuaCIKICNp
bmNsdWRlICJodG1sZWRpdGluZy5oIgogI2luY2x1ZGUgImtodG1sX3BhcnQuaCIKLSNpbmNsdWRl
ICJtaXNjL2h0bWx0YWdzLmgiCisjaW5jbHVkZSAiaHRtbG5hbWVzLmgiCiAjaW5jbHVkZSAicmVu
ZGVyaW5nL3JlbmRlcl9saW5lLmgiCiAjaW5jbHVkZSAicmVuZGVyaW5nL3JlbmRlcl9vYmplY3Qu
aCIKICNpbmNsdWRlICJ2aXNpYmxlX3RleHQuaCIKQEAgLTUzLDYgKzUzLDcgQEAgdXNpbmcgRE9N
OjpOb2RlSW1wbDsKIHVzaW5nIERPTTo6UG9zaXRpb247CiB1c2luZyBET006OlJhbmdlSW1wbDsK
IHVzaW5nIERPTTo6VGV4dEltcGw7Cit1c2luZyBET006OkhUTUxOYW1lczsKIAogbmFtZXNwYWNl
IGtodG1sIHsKIApAQCAtNjEsOSArNjIsMTMgQEAgc3RhdGljIGJvb2wgaXNMaXN0U3RydWN0dXJl
Tm9kZShjb25zdCBObwogICAgIC8vIEZJWE1FOiBJcnJpdGF0aW5nIHRoYXQgd2UgY2FuIGdldCBh
d2F5IHdpdGgganVzdCBnb2luZyBhdCB0aGUgcmVuZGVyIHRyZWUgZm9yIGlzVGFibGVTdHJ1Y3R1
cmVOb2RlLAogICAgIC8vIGJ1dCBoZXJlIHdlIGFsc28gaGF2ZSB0byBwZWVrIGF0IHRoZSB0eXBl
IG9mIERPTSBub2RlPwogICAgIFJlbmRlck9iamVjdCAqciA9IG5vZGUtPnJlbmRlcmVyKCk7Ci0g
ICAgTm9kZUltcGw6OklkIG5vZGVJRCA9IG5vZGUtPmlkKCk7CiAgICAgcmV0dXJuIChyICYmIHIt
PmlzTGlzdEl0ZW0oKSkKLSAgICAgICAgfHwgKG5vZGVJRCA9PSBJRF9PTCB8fCBub2RlSUQgPT0g
SURfVUwgfHwgbm9kZUlEID09IElEX0REIHx8IG5vZGVJRCA9PSBJRF9EVCB8fCBub2RlSUQgPT0g
SURfRElSIHx8IG5vZGVJRCA9PSBJRF9NRU5VKTsKKyAgICAgICAgfHwgbm9kZS0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6Om9sKCkpCisgICAgICAgIHx8IG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVz
Ojp1bCgpKQorICAgICAgICB8fCBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZGQoKSkKKyAg
ICAgICAgfHwgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmR0KCkpCisgICAgICAgIHx8IG5v
ZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpkaXIoKSkKKyAgICAgICAgfHwgbm9kZS0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6Om1lbnUoKSk7CiB9CiAKIHN0YXRpYyBpbnQgbWF4RGVlcE9mZnNldChO
b2RlSW1wbCAqbikKQEAgLTI3Nyw4ICsyODIsOCBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1h
bmQ6OnNhdmVUeXBpbmdTCiBib29sIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmhhbmRsZVNwZWNp
YWxDYXNlQlJEZWxldGUoKQogewogICAgIC8vIENoZWNrIGZvciBzcGVjaWFsLWNhc2Ugd2hlcmUg
dGhlIHNlbGVjdGlvbiBjb250YWlucyBvbmx5IGEgQlIgb24gYSBsaW5lIGJ5IGl0c2VsZiBhZnRl
ciBhbm90aGVyIEJSLgotICAgIGJvb2wgdXBzdHJlYW1TdGFydElzQlIgPSBtX3N0YXJ0Tm9kZS0+
aWQoKSA9PSBJRF9CUjsKLSAgICBib29sIGRvd25zdHJlYW1TdGFydElzQlIgPSBtX2Rvd25zdHJl
YW1TdGFydC5ub2RlKCktPmlkKCkgPT0gSURfQlI7CisgICAgYm9vbCB1cHN0cmVhbVN0YXJ0SXNC
UiA9IG1fc3RhcnROb2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YnIoKSk7CisgICAgYm9vbCBk
b3duc3RyZWFtU3RhcnRJc0JSID0gbV9kb3duc3RyZWFtU3RhcnQubm9kZSgpLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6YnIoKSk7CiAgICAgYm9vbCBpc0JST25MaW5lQnlJdHNlbGYgPSB1cHN0cmVh
bVN0YXJ0SXNCUiAmJiBkb3duc3RyZWFtU3RhcnRJc0JSICYmIG1fZG93bnN0cmVhbVN0YXJ0Lm5v
ZGUoKSA9PSBtX3Vwc3RyZWFtRW5kLm5vZGUoKTsKICAgICBpZiAoaXNCUk9uTGluZUJ5SXRzZWxm
KSB7CiAgICAgICAgIHJlbW92ZU5vZGUobV9kb3duc3RyZWFtU3RhcnQubm9kZSgpKTsKQEAgLTMy
NiwxMSArMzMxLDExIEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6aGFuZGxlR2VuZXIK
ICAgICAvLyBlbmQgb2YgYSBibG9jayBvdGhlciB0aGFuIHRoZSBibG9jayBjb250YWluaW5nIHRo
ZSBzZWxlY3Rpb24gc3RhcnQsIHRoZW4gZG8gbm90IGRlbGV0ZSB0aGUgCiAgICAgLy8gc3RhcnQg
YmxvY2ssIG90aGVyd2lzZSBkZWxldGUgdGhlIHN0YXJ0IGJsb2NrLgogICAgIC8vIEEgc2ltaWxh
ciBjYXNlIGlzIHByb3ZpZGVkIHRvIGNvdmVyIHNlbGVjdGlvbnMgc3RhcnRpbmcgaW4gQlIgZWxl
bWVudHMuCi0gICAgaWYgKHN0YXJ0T2Zmc2V0ID09IDEgJiYgbV9zdGFydE5vZGUgJiYgbV9zdGFy
dE5vZGUtPmlkKCkgPT0gSURfQlIpIHsKKyAgICBpZiAoc3RhcnRPZmZzZXQgPT0gMSAmJiBtX3N0
YXJ0Tm9kZSAmJiBtX3N0YXJ0Tm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJyKCkpKSB7CiAg
ICAgICAgIHNldFN0YXJ0Tm9kZShtX3N0YXJ0Tm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpKTsKICAg
ICAgICAgc3RhcnRPZmZzZXQgPSAwOwogICAgIH0KLSAgICBpZiAobV9zdGFydEJsb2NrICE9IG1f
ZW5kQmxvY2sgJiYgc3RhcnRPZmZzZXQgPT0gMCAmJiBtX3N0YXJ0Tm9kZSAmJiBtX3N0YXJ0Tm9k
ZS0+aWQoKSA9PSBJRF9CUiAmJiBlbmRBdEVuZE9mQmxvY2spIHsKKyAgICBpZiAobV9zdGFydEJs
b2NrICE9IG1fZW5kQmxvY2sgJiYgc3RhcnRPZmZzZXQgPT0gMCAmJiBtX3N0YXJ0Tm9kZSAmJiBt
X3N0YXJ0Tm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJyKCkpICYmIGVuZEF0RW5kT2ZCbG9j
aykgewogICAgICAgICAvLyBEb24ndCBkZWxldGUgdGhlIEJSIGVsZW1lbnQKICAgICAgICAgc2V0
U3RhcnROb2RlKG1fc3RhcnROb2RlLT50cmF2ZXJzZU5leHROb2RlKCkpOwogICAgIH0KQEAgLTU1
Miw3ICs1NTcsNyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6Om1vdmVOb2Rlc0FmCiAg
ICAgICAgIE5vZGVJbXBsICptb3ZlTm9kZSA9IG5vZGU7CiAgICAgICAgIG5vZGUgPSBub2RlLT5u
ZXh0U2libGluZygpOwogICAgICAgICByZW1vdmVOb2RlKG1vdmVOb2RlKTsKLSAgICAgICAgaWYg
KG1vdmVOb2RlLT5pZCgpID09IElEX0JSICYmICFtb3ZlTm9kZS0+cmVuZGVyZXIoKSkgeworICAg
ICAgICBpZiAobW92ZU5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpicigpKSAmJiAhbW92ZU5v
ZGUtPnJlbmRlcmVyKCkpIHsKICAgICAgICAgICAgIC8vIEp1c3QgcmVtb3ZlIHRoaXMgbm9kZSwg
YW5kIGRvbid0IHB1dCBpdCBiYWNrLgogICAgICAgICAgICAgLy8gSWYgdGhlIEJSIHdhcyBub3Qg
cmVuZGVyZWQgKHNpbmNlIGl0IHdhcyBhdCB0aGUgZW5kIG9mIGEgYmxvY2ssIGZvciBpbnN0YW5j
ZSksIAogICAgICAgICAgICAgLy8gcHV0dGluZyBpdCBiYWNrIGluIHRoZSBkb2N1bWVudCBtaWdo
dCBtYWtlIGl0IGFwcGVhciwgYW5kIHRoYXQgaXMgbm90IGRlc2lyYWJsZS4KQEAgLTU2Myw3ICs1
NjgsNyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6Om1vdmVOb2Rlc0FmCiAgICAgICAg
IGVsc2UKICAgICAgICAgICAgIGluc2VydE5vZGVBZnRlcihtb3ZlTm9kZSwgcmVmTm9kZSk7CiAg
ICAgICAgIHJlZk5vZGUgPSBtb3ZlTm9kZTsKLSAgICAgICAgaWYgKG1vdmVOb2RlLT5pZCgpID09
IElEX0JSKQorICAgICAgICBpZiAobW92ZU5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpicigp
KSkKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KIApJbmRleDoga2h0bWwvZWRpdGluZy9odG1s
ZWRpdGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwv
ZWRpdGluZy9odG1sZWRpdGluZy5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjQ3CmRpZmYg
LXUgLXAgLXIxLjI0NyBraHRtbC9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAotLS0ga2h0bWwvZWRp
dGluZy9odG1sZWRpdGluZy5jcHAJMjQgTWF5IDIwMDUgMDc6MjE6NDcgLTAwMDAJMS4yNDcKKysr
IGtodG1sL2VkaXRpbmcvaHRtbGVkaXRpbmcuY3BwCTI0IEp1biAyMDA1IDAzOjEwOjA1IC0wMDAw
CkBAIC00Miw3ICs0Miw3IEBACiAjaW5jbHVkZSAiaHRtbF9pbWFnZWltcGwuaCIKICNpbmNsdWRl
ICJodG1sX2ludGVyY2hhbmdlLmgiCiAjaW5jbHVkZSAiaHRtbGF0dHJzLmgiCi0jaW5jbHVkZSAi
aHRtbHRhZ3MuaCIKKyNpbmNsdWRlICJodG1sbmFtZXMuaCIKICNpbmNsdWRlICJraHRtbF9wYXJ0
LmgiCiAjaW5jbHVkZSAia2h0bWxfcGFydC5oIgogI2luY2x1ZGUgImtodG1sdmlldy5oIgpAQCAt
ODEsNiArODEsNyBAQCB1c2luZyBET006OlBvc2l0aW9uOwogdXNpbmcgRE9NOjpSYW5nZUltcGw7
CiB1c2luZyBET006OlRleHRJbXBsOwogdXNpbmcgRE9NOjpUcmVlV2Fsa2VySW1wbDsKK3VzaW5n
IERPTTo6SFRNTE5hbWVzOwogCiAjaWYgQVBQTEVfQ0hBTkdFUwogI2luY2x1ZGUgIktXUUFzc2Vy
dGlvbnMuaCIKQEAgLTEzMSwxMCArMTMyLDEwIEBAIGJvb2wgaXNTcGVjaWFsRWxlbWVudChOb2Rl
SW1wbCAqbikKICAgICBpZiAoIW4tPmlzSFRNTEVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgaWYgKG4tPmlkKCkgPT0gSURfQSAmJiBuLT5pc0xpbmsoKSkKKyAgICBpZiAo
bi0+aXNMaW5rKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgaWYgKG4tPmlkKCkgPT0g
SURfVUwgfHwgbi0+aWQoKSA9PSBJRF9PTCB8fCBuLT5pZCgpID09IElEX0RMKQorICAgIGlmIChu
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dWwoKSkgfHwgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
Om9sKCkpIHx8IG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpkbCgpKSkKICAgICAgICAgcmV0dXJu
IHRydWU7CiAKICAgICBSZW5kZXJPYmplY3QgKnJlbmRlcmVyID0gbi0+cmVuZGVyZXIoKTsKQEAg
LTI2Nyw3ICsyNjgsNyBAQCBFbGVtZW50SW1wbCAqY3JlYXRlRGVmYXVsdFBhcmFncmFwaEVsZW1l
CiAgICAgLy8gV2Ugd291bGQgbmVlZCB0aGlzIG1hcmdpbi16ZXJvaW5nIGNvZGUgYmFjayBpZiB3
ZSBldmVyIHJldHVybiB0byB1c2luZyA8cD4gZWxlbWVudHMgZm9yIGRlZmF1bHQgcGFyYWdyYXBo
cy4KICAgICAvLyBzdGF0aWMgY29uc3QgRE9NU3RyaW5nIGRlZmF1bHRQYXJhZ3JhcGhTdHlsZSgi
bWFyZ2luLXRvcDogMDsgbWFyZ2luLWJvdHRvbTogMCIpOyAgICAKICAgICBpbnQgZXhjZXB0aW9u
Q29kZSA9IDA7Ci0gICAgRWxlbWVudEltcGwgKmVsZW1lbnQgPSBkb2N1bWVudC0+Y3JlYXRlSFRN
TEVsZW1lbnQoImRpdiIsIGV4Y2VwdGlvbkNvZGUpOworICAgIEVsZW1lbnRJbXBsICplbGVtZW50
ID0gZG9jdW1lbnQtPmNyZWF0ZUVsZW1lbnROUyhYSFRNTF9OQU1FU1BBQ0UsICJkaXYiLCBleGNl
cHRpb25Db2RlKTsKICAgICBBU1NFUlQoZXhjZXB0aW9uQ29kZSA9PSAwKTsKICAgICByZXR1cm4g
ZWxlbWVudDsKIH0KQEAgLTI3NSw3ICsyNzYsNyBAQCBFbGVtZW50SW1wbCAqY3JlYXRlRGVmYXVs
dFBhcmFncmFwaEVsZW1lCiBFbGVtZW50SW1wbCAqY3JlYXRlQnJlYWtFbGVtZW50KERvY3VtZW50
SW1wbCAqZG9jdW1lbnQpCiB7CiAgICAgaW50IGV4Y2VwdGlvbkNvZGUgPSAwOwotICAgIEVsZW1l
bnRJbXBsICpicmVha05vZGUgPSBkb2N1bWVudC0+Y3JlYXRlSFRNTEVsZW1lbnQoImJyIiwgZXhj
ZXB0aW9uQ29kZSk7CisgICAgRWxlbWVudEltcGwgKmJyZWFrTm9kZSA9IGRvY3VtZW50LT5jcmVh
dGVFbGVtZW50TlMoWEhUTUxfTkFNRVNQQUNFLCAiYnIiLCBleGNlcHRpb25Db2RlKTsKICAgICBB
U1NFUlQoZXhjZXB0aW9uQ29kZSA9PSAwKTsKICAgICByZXR1cm4gYnJlYWtOb2RlOwogfQpAQCAt
MzAzLDcgKzMwNCw3IEBAIE5vZGVJbXBsICpuZWFyZXN0TWFpbEJsb2NrcXVvdGUoY29uc3QgTm8K
IAogYm9vbCBpc01haWxCbG9ja3F1b3RlKGNvbnN0IE5vZGVJbXBsICpub2RlKQogewotICAgIGlm
ICghbm9kZSB8fCAhbm9kZS0+cmVuZGVyZXIoKSB8fCAhbm9kZS0+aXNFbGVtZW50Tm9kZSgpICYm
IG5vZGUtPmlkKCkgIT0gSURfQkxPQ0tRVU9URSkKKyAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPnJl
bmRlcmVyKCkgfHwgIW5vZGUtPmlzRWxlbWVudE5vZGUoKSAmJiAhbm9kZS0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OmJsb2NrcXVvdGUoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IEVsZW1lbnRJbXBsICo+KG5vZGUpLT5nZXRB
dHRyaWJ1dGUoInR5cGUiKSA9PSAiY2l0ZSI7CkluZGV4OiBraHRtbC9lZGl0aW5nL2luc2VydF9s
aW5lX2JyZWFrX2NvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJD
b3JlL2todG1sL2VkaXRpbmcvaW5zZXJ0X2xpbmVfYnJlYWtfY29tbWFuZC5jcHAsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuMQpkaWZmIC11IC1wIC1yMS4xIGtodG1sL2VkaXRpbmcvaW5zZXJ0X2xp
bmVfYnJlYWtfY29tbWFuZC5jcHAKLS0tIGtodG1sL2VkaXRpbmcvaW5zZXJ0X2xpbmVfYnJlYWtf
Y29tbWFuZC5jcHAJMjQgTWF5IDIwMDUgMDc6MjE6NDcgLTAwMDAJMS4xCisrKyBraHRtbC9lZGl0
aW5nL2luc2VydF9saW5lX2JyZWFrX2NvbW1hbmQuY3BwCTI0IEp1biAyMDA1IDAzOjEwOjA1IC0w
MDAwCkBAIC0yOSw3ICsyOSw3IEBACiAjaW5jbHVkZSAidmlzaWJsZV9wb3NpdGlvbi5oIgogI2lu
Y2x1ZGUgInZpc2libGVfdW5pdHMuaCIKIAotI2luY2x1ZGUgIm1pc2MvaHRtbHRhZ3MuaCIKKyNp
bmNsdWRlICJodG1sbmFtZXMuaCIKICNpbmNsdWRlICJ4bWwvZG9tX2RvY2ltcGwuaCIKICNpbmNs
dWRlICJ4bWwvZG9tX2VsZW1lbnRpbXBsLmgiCiAjaW5jbHVkZSAieG1sL2RvbTJfcmFuZ2VpbXBs
LmgiCkBAIC01MCw2ICs1MCw3IEBAIHVzaW5nIERPTTo6Tm9kZUltcGw7CiB1c2luZyBET006OlBv
c2l0aW9uOwogdXNpbmcgRE9NOjpUZXh0SW1wbDsKIHVzaW5nIERPTTo6Q1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb25JbXBsOwordXNpbmcgRE9NOjpIVE1MTmFtZXM7CiAKIG5hbWVzcGFjZSBraHRt
bCB7CiAKQEAgLTExMSwxMyArMTEyLDEzIEBAIHZvaWQgSW5zZXJ0TGluZUJyZWFrQ29tbWFuZDo6
ZG9BcHBseSgpCiAgICAgICAgIC8vIFRoaXMgbWFrZXMgdGhlICJyZWFsIiBCUiB3ZSB3YW50IHRv
IGluc2VydCBhcHBlYXIgaW4gdGhlIHJlbmRlcmluZyB3aXRob3V0IGFueSAKICAgICAgICAgLy8g
c2lnbmlmaWNhbnQgc2lkZSBlZmZlY3RzIChhbmQgbm8gcmVhbCB3b3JyaWVzIGVpdGhlciBzaW5j
ZSB5b3UgY2FuJ3QgYXJyb3cgcGFzdCAKICAgICAgICAgLy8gdGhpcyBleHRyYSBvbmUuCi0gICAg
ICAgIGlmIChwb3Mubm9kZSgpLT5pZCgpID09IElEX0JSICYmIHBvcy5vZmZzZXQoKSA9PSAwKSB7
CisgICAgICAgIGlmIChwb3Mubm9kZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YnIoKSkgJiYg
cG9zLm9mZnNldCgpID09IDApIHsKICAgICAgICAgICAgIC8vIEFscmVhZHkgcGxhY2VkIGluIGEg
dHJhaWxpbmcgQlIuIEluc2VydCAicmVhbCIgQlIgYmVmb3JlIGl0IGFuZCBsZWF2ZSB0aGUgc2Vs
ZWN0aW9uIGFsb25lLgogICAgICAgICAgICAgaW5zZXJ0Tm9kZUJlZm9yZShub2RlVG9JbnNlcnQs
IHBvcy5ub2RlKCkpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgTm9k
ZUltcGwgKm5leHQgPSBwb3Mubm9kZSgpLT50cmF2ZXJzZU5leHROb2RlKCk7Ci0gICAgICAgICAg
ICBib29sIGhhc1RyYWlsaW5nQlIgPSBuZXh0ICYmIG5leHQtPmlkKCkgPT0gSURfQlIgJiYgcG9z
Lm5vZGUoKS0+ZW5jbG9zaW5nQmxvY2tGbG93RWxlbWVudCgpID09IG5leHQtPmVuY2xvc2luZ0Js
b2NrRmxvd0VsZW1lbnQoKTsKKyAgICAgICAgICAgIGJvb2wgaGFzVHJhaWxpbmdCUiA9IG5leHQg
JiYgbmV4dC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJyKCkpICYmIHBvcy5ub2RlKCktPmVuY2xv
c2luZ0Jsb2NrRmxvd0VsZW1lbnQoKSA9PSBuZXh0LT5lbmNsb3NpbmdCbG9ja0Zsb3dFbGVtZW50
KCk7CiAgICAgICAgICAgICBpbnNlcnROb2RlQWZ0ZXJQb3NpdGlvbihub2RlVG9JbnNlcnQsIHBv
cyk7CiAgICAgICAgICAgICBpZiAoaGFzVHJhaWxpbmdCUikgewogICAgICAgICAgICAgICAgIHNl
dEVuZGluZ1NlbGVjdGlvbihTZWxlY3Rpb24oUG9zaXRpb24obmV4dCwgMCksIERPV05TVFJFQU0p
KTsKSW5kZXg6IGtodG1sL2VkaXRpbmcvaW5zZXJ0X3BhcmFncmFwaF9zZXBhcmF0b3JfY29tbWFu
ZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWRpdGlu
Zy9pbnNlcnRfcGFyYWdyYXBoX3NlcGFyYXRvcl9jb21tYW5kLmNwcCx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS4xCmRpZmYgLXUgLXAgLXIxLjEga2h0bWwvZWRpdGluZy9pbnNlcnRfcGFyYWdyYXBo
X3NlcGFyYXRvcl9jb21tYW5kLmNwcAotLS0ga2h0bWwvZWRpdGluZy9pbnNlcnRfcGFyYWdyYXBo
X3NlcGFyYXRvcl9jb21tYW5kLmNwcAkyNCBNYXkgMjAwNSAwNzoyMTo0NyAtMDAwMAkxLjEKKysr
IGtodG1sL2VkaXRpbmcvaW5zZXJ0X3BhcmFncmFwaF9zZXBhcmF0b3JfY29tbWFuZC5jcHAJMjQg
SnVuIDIwMDUgMDM6MTA6MDUgLTAwMDAKQEAgLTMxLDcgKzMxLDcgQEAKIAogI2luY2x1ZGUgImNz
cy9jc3NfY29tcHV0ZWRzdHlsZS5oIgogI2luY2x1ZGUgImNzcy9jc3NfdmFsdWVpbXBsLmgiCi0j
aW5jbHVkZSAibWlzYy9odG1sdGFncy5oIgorI2luY2x1ZGUgImh0bWxuYW1lcy5oIgogI2luY2x1
ZGUgInhtbC9kb21fZG9jaW1wbC5oIgogI2luY2x1ZGUgInhtbC9kb21fZWxlbWVudGltcGwuaCIK
ICNpbmNsdWRlICJ4bWwvZG9tX3RleHRpbXBsLmgiCkBAIC01MCw2ICs1MCw3IEBAIHVzaW5nIERP
TTo6RWxlbWVudEltcGw7CiB1c2luZyBET006Ok5vZGVJbXBsOwogdXNpbmcgRE9NOjpQb3NpdGlv
bjsKIHVzaW5nIERPTTo6VGV4dEltcGw7Cit1c2luZyBET006OkhUTUxOYW1lczsKIAogbmFtZXNw
YWNlIGtodG1sIHsKIApAQCAtMjEzLDcgKzIxNCw3IEBAIHZvaWQgSW5zZXJ0UGFyYWdyYXBoU2Vw
YXJhdG9yQ29tbWFuZDo6ZG8KICAgICAvLyB0aGVuIHRoaXMgPGJyPiB3aWxsIGNvbGxhcHNlIGF3
YXkgd2hlbiB3ZSBhZGQgYSBibG9jayBhZnRlciBpdC4gQWRkIGFuIGV4dHJhIDxicj4uCiAgICAg
aWYgKCFkb2N1bWVudCgpLT5pblN0cmljdE1vZGUoKSkgewogICAgICAgICBQb3NpdGlvbiB1cHN0
cmVhbVBvcyA9IHBvcy51cHN0cmVhbSgpOwotICAgICAgICBpZiAodXBzdHJlYW1Qb3Mubm9kZSgp
LT5pZCgpID09IElEX0JSKQorICAgICAgICBpZiAodXBzdHJlYW1Qb3Mubm9kZSgpLT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6YnIoKSkpCiAgICAgICAgICAgICBpbnNlcnROb2RlQWZ0ZXIoY3JlYXRl
QnJlYWtFbGVtZW50KGRvY3VtZW50KCkpLCB1cHN0cmVhbVBvcy5ub2RlKCkpOwogICAgIH0KICAg
ICAKSW5kZXg6IGtodG1sL2VkaXRpbmcvbWFya3VwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL21hcmt1cC5jcHAsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuMjAKZGlmZiAtdSAtcCAtcjEuMjAga2h0bWwvZWRpdGluZy9tYXJrdXAuY3BwCi0t
LSBraHRtbC9lZGl0aW5nL21hcmt1cC5jcHAJMTAgTWF5IDIwMDUgMDQ6MDM6MzQgLTAwMDAJMS4y
MAorKysga2h0bWwvZWRpdGluZy9tYXJrdXAuY3BwCTI0IEp1biAyMDA1IDAzOjEwOjA2IC0wMDAw
CkBAIC0zNiw3ICszNiw3IEBACiAjaW5jbHVkZSAieG1sL2RvbTJfcmFuZ2VpbXBsLmgiCiAjaW5j
bHVkZSAicmVuZGVyaW5nL3JlbmRlcl90ZXh0LmgiCiAjaW5jbHVkZSAibWlzYy9odG1sYXR0cnMu
aCIKLSNpbmNsdWRlICJtaXNjL2h0bWx0YWdzLmgiCisjaW5jbHVkZSAiaHRtbG5hbWVzLmgiCiAj
aW5jbHVkZSAiaHRtbC9kdGQuaCIKIAogdXNpbmcgRE9NOjpBdHRyaWJ1dGVJbXBsOwpAQCAtNDcs
OSArNDcsOSBAQCB1c2luZyBET006OkRvY3VtZW50RnJhZ21lbnRJbXBsOwogdXNpbmcgRE9NOjpE
b2N1bWVudEltcGw7CiB1c2luZyBET006OkRPTVN0cmluZzsKIHVzaW5nIERPTTo6RWxlbWVudElt
cGw7Ci11c2luZyBET006OkZPUkJJRERFTjsKLXVzaW5nIERPTTo6ZW5kVGFnUmVxdWlyZW1lbnQ7
Cit1c2luZyBET006OlRhZ1N0YXR1c0ZvcmJpZGRlbjsKIHVzaW5nIERPTTo6SFRNTEVsZW1lbnRJ
bXBsOwordXNpbmcgRE9NOjpIVE1MTmFtZXM7CiB1c2luZyBET006Ok5hbWVkQXR0ck1hcEltcGw7
CiB1c2luZyBET006Ok5vZGU7CiB1c2luZyBET006Ok5vZGVJbXBsOwpAQCAtMTc3LDEzICsxNzcs
MTEgQEAgc3RhdGljIFFTdHJpbmcgc3RhcnRNYXJrdXAoY29uc3QgTm9kZUltcAogICAgIHN3aXRj
aCAodHlwZSkgewogICAgICAgICBjYXNlIE5vZGU6OlRFWFRfTk9ERTogewogICAgICAgICAgICAg
aWYgKG5vZGUtPnBhcmVudE5vZGUoKSkgewotICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+
cGFyZW50Tm9kZSgpLT5pZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfUFJFOgot
ICAgICAgICAgICAgICAgICAgICBjYXNlIElEX1NDUklQVDoKLSAgICAgICAgICAgICAgICAgICAg
Y2FzZSBJRF9TVFlMRToKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9URVhUQVJFQToKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdHJpbmdWYWx1ZUZvclJhbmdlKG5vZGUsIHJh
bmdlKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPnBhcmVu
dE5vZGUoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnByZSgpKSB8fAorICAgICAgICAgICAgICAg
ICAgICBub2RlLT5wYXJlbnROb2RlKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzY3JpcHQoKSkg
fHwKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+cGFyZW50Tm9kZSgpLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6c3R5bGUoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+cGFyZW50Tm9k
ZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGV4dGFyZWEoKSkpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBzdHJpbmdWYWx1ZUZvclJhbmdlKG5vZGUsIHJhbmdlKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIFFTdHJpbmcgbWFya3VwID0gYW5ub3RhdGUgPyBlc2NhcGVIVE1MKHJl
bmRlcmVkVGV4dChub2RlLCByYW5nZSkpIDogZXNjYXBlSFRNTChzdHJpbmdWYWx1ZUZvclJhbmdl
KG5vZGUsIHJhbmdlKSk7ICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoZGVmYXVsdFN0eWxl
KSB7CkBAIC0yNDgsOSArMjQ2LDEzIEBAIHN0YXRpYyBRU3RyaW5nIHN0YXJ0TWFya3VwKGNvbnN0
IE5vZGVJbXAKIAogc3RhdGljIFFTdHJpbmcgZW5kTWFya3VwKGNvbnN0IE5vZGVJbXBsICpub2Rl
KQogewotICAgIGlmICgoIW5vZGUtPmlzSFRNTEVsZW1lbnQoKSB8fCBlbmRUYWdSZXF1aXJlbWVu
dChub2RlLT5pZCgpKSAhPSBGT1JCSURERU4pICYmIG5vZGUtPm5vZGVUeXBlKCkgIT0gTm9kZTo6
VEVYVF9OT0RFICYmIG5vZGUtPm5vZGVUeXBlKCkgIT0gTm9kZTo6RE9DVU1FTlRfTk9ERSkgewot
ICAgICAgICByZXR1cm4gIjwvIiArIG5vZGUtPm5vZGVOYW1lKCkuc3RyaW5nKCkgKyAiPiI7Cisg
ICAgYm9vbCBoYXNFbmRUYWcgPSB0cnVlOworICAgIGlmIChub2RlLT5pc0hUTUxFbGVtZW50KCkp
IHsKKyAgICAgICAgY29uc3QgSFRNTEVsZW1lbnRJbXBsKiBodG1sRWx0ID0gc3RhdGljX2Nhc3Q8
Y29uc3QgSFRNTEVsZW1lbnRJbXBsKj4obm9kZSk7CisgICAgICAgIGhhc0VuZFRhZyA9IChodG1s
RWx0LT5lbmRUYWdSZXF1aXJlbWVudCgpICE9IFRhZ1N0YXR1c0ZvcmJpZGRlbik7CiAgICAgfQor
ICAgIGlmIChoYXNFbmRUYWcpCisgICAgICAgIHJldHVybiAiPC8iICsgbm9kZS0+bm9kZU5hbWUo
KS5zdHJpbmcoKSArICI+IjsKICAgICByZXR1cm4gIiI7CiB9CiAKQEAgLTI2NSw4ICsyNjcsMTQg
QEAgc3RhdGljIFFTdHJpbmcgbWFya3VwKGNvbnN0IE5vZGVJbXBsICpzdAogICAgICAgICAgICAg
ICAgIG5vZGVzLT5hcHBlbmQoY3VycmVudCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBt
ZSArPSBzdGFydE1hcmt1cChjdXJyZW50LCAwLCBEb05vdEFubm90YXRlRm9ySW50ZXJjaGFuZ2Us
IDApOwotICAgICAgICB9ICAgICAgICAKLSAgICAgICAgaWYgKCFjdXJyZW50LT5pc0hUTUxFbGVt
ZW50KCkgfHwgZW5kVGFnUmVxdWlyZW1lbnQoY3VycmVudC0+aWQoKSkgIT0gRk9SQklEREVOKSB7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgY29udGFpbmVyID0gdHJ1ZTsKKyAg
ICAgICAgaWYgKGN1cnJlbnQtPmlzSFRNTEVsZW1lbnQoKSkgeworICAgICAgICAgICAgY29uc3Qg
SFRNTEVsZW1lbnRJbXBsKiBoID0gc3RhdGljX2Nhc3Q8Y29uc3QgSFRNTEVsZW1lbnRJbXBsKj4o
Y3VycmVudCk7CisgICAgICAgICAgICBjb250YWluZXIgPSBoLT5lbmRUYWdSZXF1aXJlbWVudCgp
ICE9IFRhZ1N0YXR1c0ZvcmJpZGRlbjsKKyAgICAgICAgfQorICAgICAgICBpZiAoY29udGFpbmVy
KSB7CiAgICAgICAgICAgICAvLyBwcmludCBjaGlsZHJlbgogICAgICAgICAgICAgaWYgKE5vZGVJ
bXBsICpuID0gY3VycmVudC0+Zmlyc3RDaGlsZCgpKSB7CiAgICAgICAgICAgICAgICAgbWUgKz0g
bWFya3VwKG4sIGZhbHNlLCB0cnVlLCBub2Rlcyk7CkBAIC00MTQsOSArNDIyLDkgQEAgUVN0cmlu
ZyBjcmVhdGVNYXJrdXAoY29uc3QgUmFuZ2VJbXBsICpyYQogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgYm9vbCBicmVha0F0RW5kID0gZmFsc2U7CiAgICAgICAgICAgICBpZiAoY29tbW9uQW5j
ZXN0b3JCbG9jayA9PSBhbmNlc3RvcikgewotICAgICAgICAgICAgICAgIE5vZGVJbXBsOjpJZCBp
ZCA9IGFuY2VzdG9yLT5pZCgpOwogICAgICAgICAgICAgICAgIC8vIEluY2x1ZGUgYW5jZXN0b3Jz
IHRoYXQgYXJlIHJlcXVpcmVkIHRvIHJldGFpbiB0aGUgYXBwZWFyYW5jZSBvZiB0aGUgY29waWVk
IG1hcmt1cC4KLSAgICAgICAgICAgICAgICBpZiAoaWQgPT0gSURfUFJFIHx8IGlkID09IElEX1RB
QkxFIHx8IGlkID09IElEX09MIHx8IGlkID09IElEX1VMKSB7CisgICAgICAgICAgICAgICAgaWYg
KGFuY2VzdG9yLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6cHJlKCkpIHx8IGFuY2VzdG9yLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6dGFibGUoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgYW5jZXN0
b3ItPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvbCgpKSB8fCBhbmNlc3Rvci0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OnVsKCkpKSB7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrQXRFbmQgPSB0cnVl
OwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpA
QCAtNTM5LDcgKzU0Nyw3IEBAIERPTTo6RG9jdW1lbnRGcmFnbWVudEltcGwgKmNyZWF0ZUZyYWdt
ZW4KICAgICAgICAgICAgIEVsZW1lbnRJbXBsICplbGVtZW50OwogICAgICAgICAgICAgaWYgKHMu
aXNFbXB0eSgpICYmIGxpc3QuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgLy8gRm9yIGxh
c3QgbGluZSwgdXNlIHRoZSAibWFnaWMgQlIiIHJhdGhlciB0aGFuIGEgUC4KLSAgICAgICAgICAg
ICAgICBlbGVtZW50ID0gZG9jdW1lbnQtPmNyZWF0ZUhUTUxFbGVtZW50KCJiciIsIGV4Y2VwdGlv
bkNvZGUpOworICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBkb2N1bWVudC0+Y3JlYXRlRWxlbWVu
dE5TKFhIVE1MX05BTUVTUEFDRSwgImJyIiwgZXhjZXB0aW9uQ29kZSk7CiAgICAgICAgICAgICAg
ICAgQVNTRVJUKGV4Y2VwdGlvbkNvZGUgPT0gMCk7CiAgICAgICAgICAgICAgICAgZWxlbWVudC0+
cmVmKCk7CiAgICAgICAgICAgICAgICAgZWxlbWVudC0+c2V0QXR0cmlidXRlKEFUVFJfQ0xBU1Ms
IEFwcGxlSW50ZXJjaGFuZ2VOZXdsaW5lKTsgICAgICAgICAgICAKSW5kZXg6IGtodG1sL2VkaXRp
bmcvcmVwbGFjZV9zZWxlY3Rpb25fY29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1dlYkNvcmUva2h0bWwvZWRpdGluZy9yZXBsYWNlX3NlbGVjdGlvbl9jb21tYW5kLmNw
cCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yCmRpZmYgLXUgLXAgLXIxLjIga2h0bWwvZWRpdGlu
Zy9yZXBsYWNlX3NlbGVjdGlvbl9jb21tYW5kLmNwcAotLS0ga2h0bWwvZWRpdGluZy9yZXBsYWNl
X3NlbGVjdGlvbl9jb21tYW5kLmNwcAkyMiBKdW4gMjAwNSAwMToxNTo0MyAtMDAwMAkxLjIKKysr
IGtodG1sL2VkaXRpbmcvcmVwbGFjZV9zZWxlY3Rpb25fY29tbWFuZC5jcHAJMjQgSnVuIDIwMDUg
MDM6MTA6MDcgLTAwMDAKQEAgLTI3LDcgKzI3LDcgQEAKIAogI2luY2x1ZGUgInZpc2libGVfcG9z
aXRpb24uaCIKICNpbmNsdWRlICJtaXNjL2h0bWxhdHRycy5oIgotI2luY2x1ZGUgIm1pc2MvaHRt
bHRhZ3MuaCIKKyNpbmNsdWRlICJodG1sbmFtZXMuaCIKICNpbmNsdWRlICJ4bWwvZG9tX2RvY2lt
cGwuaCIKICNpbmNsdWRlICJodG1sX2ludGVyY2hhbmdlLmgiCiAjaW5jbHVkZSAieG1sL2RvbV90
ZXh0aW1wbC5oIgpAQCAtNTgsNiArNTgsNyBAQCB1c2luZyBET006OkRPTVN0cmluZzsKIHVzaW5n
IERPTTo6SFRNTEVsZW1lbnRJbXBsOwogdXNpbmcgRE9NOjpDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbkltcGw7CiB1c2luZyBET006OlBvc2l0aW9uOwordXNpbmcgRE9NOjpIVE1MTmFtZXM7CiAK
IG5hbWVzcGFjZSBraHRtbCB7CiAKQEAgLTE2NywzMCArMTY4LDE0IEBAIHN0YXRpYyBib29sIGlz
UHJvYmFibHlCbG9jayhjb25zdCBOb2RlSW0KICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAKLSAgICBzd2l0Y2ggKG5vZGUtPmlkKCkpIHsKLSAgICAgICAgY2FzZSBJ
RF9CTE9DS1FVT1RFOgotICAgICAgICBjYXNlIElEX0REOgotICAgICAgICBjYXNlIElEX0RJVjoK
LSAgICAgICAgY2FzZSBJRF9ETDoKLSAgICAgICAgY2FzZSBJRF9EVDoKLSAgICAgICAgY2FzZSBJ
RF9IMToKLSAgICAgICAgY2FzZSBJRF9IMjoKLSAgICAgICAgY2FzZSBJRF9IMzoKLSAgICAgICAg
Y2FzZSBJRF9INDoKLSAgICAgICAgY2FzZSBJRF9INToKLSAgICAgICAgY2FzZSBJRF9INjoKLSAg
ICAgICAgY2FzZSBJRF9IUjoKLSAgICAgICAgY2FzZSBJRF9MSToKLSAgICAgICAgY2FzZSBJRF9P
TDoKLSAgICAgICAgY2FzZSBJRF9QOgotICAgICAgICBjYXNlIElEX1BSRToKLSAgICAgICAgY2Fz
ZSBJRF9URDoKLSAgICAgICAgY2FzZSBJRF9USDoKLSAgICAgICAgY2FzZSBJRF9VTDoKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gZmFsc2U7CisgICAg
Ly8gRklYTUU6IFRoaXMgZnVuY3Rpb24gc2VlbXMgcmVhbGx5IGJyb2tlbiB0byBtZS4gIEl0IGlz
bid0IGV2ZW4gaW5jbHVkaW5nIGFsbCB0aGUgYmxvY2stbGV2ZWwgZWxlbWVudHMuCisgICAgcmV0
dXJuIChub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YmxvY2txdW90ZSgpKSB8fCBub2RlLT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6ZGQoKSkgfHwgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
OmRpdigpKSB8fAorICAgICAgICAgICAgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmRsKCkp
IHx8IG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpkdCgpKSB8fCBub2RlLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6aDEoKSkgfHwKKyAgICAgICAgICAgIG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjpoMigpKSB8fCBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDMoKSkgfHwgbm9kZS0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6Omg0KCkpIHx8CisgICAgICAgICAgICBub2RlLT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6aDUoKSkgfHwgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omg2KCkp
IHx8IG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpocigpKSB8fAorICAgICAgICAgICAgbm9k
ZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmxpKCkpIHx8IG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjpvbCgpKSB8fCBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6cCgpKSB8fAorICAgICAg
ICAgICAgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnByZSgpKSB8fCBub2RlLT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6dGQoKSkgfHwgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRoKCkp
IHx8CisgICAgICAgICAgICBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dWwoKSkpOwogfQog
CiBzdGF0aWMgYm9vbCBpc01haWxQYXN0ZUFzUXVvdGF0aW9uTm9kZShjb25zdCBOb2RlSW1wbCAq
bm9kZSkKQEAgLTIxNCwxNiArMTk5LDggQEAgc3RhdGljIGJvb2wgaXNQcm9iYWJseVRhYmxlU3Ry
dWN0dXJlTm9kZQogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAot
ICAgIHN3aXRjaCAobm9kZS0+aWQoKSkgewotICAgICAgICBjYXNlIElEX1RBQkxFOgotICAgICAg
ICBjYXNlIElEX1RCT0RZOgotICAgICAgICBjYXNlIElEX1REOgotICAgICAgICBjYXNlIElEX1RG
T09UOgotICAgICAgICBjYXNlIElEX1RIRUFEOgotICAgICAgICBjYXNlIElEX1RSOgotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4g
KG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0YWJsZSgpKSB8fCBub2RlLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6dGJvZHkoKSkgfHwgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRkKCkp
IHx8CisgICAgICAgICAgICBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGZvb3QoKSkgfHwg
bm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRoZWFkKCkpIHx8IG5vZGUtPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjp0cigpKSk7CiB9CiAKIHZvaWQgUmVwbGFjZW1lbnRGcmFnbWVudDo6cHJ1bmVF
bXB0eU5vZGVzKCkKQEAgLTI1MCw3ICsyMjcsNyBAQCB2b2lkIFJlcGxhY2VtZW50RnJhZ21lbnQ6
OnBydW5lRW1wdHlOb2RlCiBib29sIFJlcGxhY2VtZW50RnJhZ21lbnQ6OmlzSW50ZXJjaGFuZ2VO
ZXdsaW5lTm9kZShjb25zdCBOb2RlSW1wbCAqbm9kZSkKIHsKICAgICBzdGF0aWMgRE9NU3RyaW5n
IGludGVyY2hhbmdlTmV3bGluZUNsYXNzU3RyaW5nKEFwcGxlSW50ZXJjaGFuZ2VOZXdsaW5lKTsK
LSAgICByZXR1cm4gbm9kZSAmJiBub2RlLT5pZCgpID09IElEX0JSICYmIHN0YXRpY19jYXN0PGNv
bnN0IEVsZW1lbnRJbXBsICo+KG5vZGUpLT5nZXRBdHRyaWJ1dGUoQVRUUl9DTEFTUykgPT0gaW50
ZXJjaGFuZ2VOZXdsaW5lQ2xhc3NTdHJpbmc7CisgICAgcmV0dXJuIG5vZGUgJiYgbm9kZS0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OmJyKCkpICYmIHN0YXRpY19jYXN0PGNvbnN0IEVsZW1lbnRJbXBs
ICo+KG5vZGUpLT5nZXRBdHRyaWJ1dGUoQVRUUl9DTEFTUykgPT0gaW50ZXJjaGFuZ2VOZXdsaW5l
Q2xhc3NTdHJpbmc7CiB9CiAKIGJvb2wgUmVwbGFjZW1lbnRGcmFnbWVudDo6aXNJbnRlcmNoYW5n
ZUNvbnZlcnRlZFNwYWNlU3Bhbihjb25zdCBOb2RlSW1wbCAqbm9kZSkKQEAgLTUwNywxOCArNDg0
LDE5IEBAIHZvaWQgUmVwbGFjZW1lbnRGcmFnbWVudDo6cmVtb3ZlU3R5bGVOb2QKICAgICAgICAg
Tm9kZUltcGwgKm5leHQgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCk7CiAgICAgICAgIC8vIFRo
aXMgbGlzdCBvZiB0YWdzIGNoYW5nZSB0aGUgYXBwZWFyYW5jZSBvZiBjb250ZW50CiAgICAgICAg
IC8vIGluIHdheXMgd2UgY2FuIGFkZCBiYWNrIG9uIGxhdGVyIHdpdGggQ1NTLCBpZiBuZWNlc3Nh
cnkuCi0gICAgICAgIGlmIChub2RlLT5pZCgpID09IElEX0IgfHwgCi0gICAgICAgICAgICBub2Rl
LT5pZCgpID09IElEX0JJRyB8fCAKLSAgICAgICAgICAgIG5vZGUtPmlkKCkgPT0gSURfQ0VOVEVS
IHx8IAotICAgICAgICAgICAgbm9kZS0+aWQoKSA9PSBJRF9GT05UIHx8IAotICAgICAgICAgICAg
bm9kZS0+aWQoKSA9PSBJRF9JIHx8IAotICAgICAgICAgICAgbm9kZS0+aWQoKSA9PSBJRF9TIHx8
IAotICAgICAgICAgICAgbm9kZS0+aWQoKSA9PSBJRF9TTUFMTCB8fCAKLSAgICAgICAgICAgIG5v
ZGUtPmlkKCkgPT0gSURfU1RSSUtFIHx8IAotICAgICAgICAgICAgbm9kZS0+aWQoKSA9PSBJRF9T
VUIgfHwgCi0gICAgICAgICAgICBub2RlLT5pZCgpID09IElEX1NVUCB8fCAKLSAgICAgICAgICAg
IG5vZGUtPmlkKCkgPT0gSURfVFQgfHwgCi0gICAgICAgICAgICBub2RlLT5pZCgpID09IElEX1Ug
fHwgCisgICAgICAgIC8vICBGSVhNRTogVGhpcyBsaXN0IGlzIGluY29tcGxldGUKKyAgICAgICAg
aWYgKG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpiKCkpIHx8IAorICAgICAgICAgICAgbm9k
ZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJpZygpKSB8fCAKKyAgICAgICAgICAgIG5vZGUtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjpjZW50ZXIoKSkgfHwgCisgICAgICAgICAgICBub2RlLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6Zm9udCgpKSB8fCAKKyAgICAgICAgICAgIG5vZGUtPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjppKCkpIHx8IAorICAgICAgICAgICAgbm9kZS0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OnMoKSkgfHwgCisgICAgICAgICAgICBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
c21hbGwoKSkgfHwgCisgICAgICAgICAgICBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c3Ry
aWtlKCkpIHx8IAorICAgICAgICAgICAgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnN1Yigp
KSB8fCAKKyAgICAgICAgICAgIG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzdXAoKSkgfHwg
CisgICAgICAgICAgICBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dHQoKSkgfHwgCisgICAg
ICAgICAgICBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dSgpKSB8fCAKICAgICAgICAgICAg
IGlzU3R5bGVTcGFuKG5vZGUpKSB7CiAgICAgICAgICAgICByZW1vdmVOb2RlUHJlc2VydmluZ0No
aWxkcmVuKG5vZGUpOwogICAgICAgICB9CkBAIC03NDQsNyArNzIyLDcgQEAgdm9pZCBSZXBsYWNl
U2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgaWYgKCFsaW5lUGxhY2Vob2xkZXIpIHsK
ICAgICAgICAgUG9zaXRpb24gZG93bnN0cmVhbSA9IHN0YXJ0UG9zLmRvd25zdHJlYW0oKTsKICAg
ICAgICAgZG93bnN0cmVhbSA9IHBvc2l0aW9uT3V0c2lkZUNvbnRhaW5pbmdTcGVjaWFsRWxlbWVu
dChkb3duc3RyZWFtKTsKLSAgICAgICAgaWYgKGRvd25zdHJlYW0ubm9kZSgpLT5pZCgpID09IElE
X0JSICYmIGRvd25zdHJlYW0ub2Zmc2V0KCkgPT0gMCAmJiAKKyAgICAgICAgaWYgKGRvd25zdHJl
YW0ubm9kZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YnIoKSkgJiYgZG93bnN0cmVhbS5vZmZz
ZXQoKSA9PSAwICYmIAogICAgICAgICAgICAgbV9mcmFnbWVudC5oYXNJbnRlcmNoYW5nZU5ld2xp
bmVBdEVuZCgpICYmCiAgICAgICAgICAgICBpc1N0YXJ0T2ZMaW5lKFZpc2libGVQb3NpdGlvbihk
b3duc3RyZWFtLCBWUF9ERUZBVUxUX0FGRklOSVRZKSkpCiAgICAgICAgICAgICBsaW5lUGxhY2Vo
b2xkZXIgPSBkb3duc3RyZWFtLm5vZGUoKTsKQEAgLTkwNiwxMiArODg0LDEyIEBAIHZvaWQgUmVw
bGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkoKQogICAgICAgICB9CiAgICAgfSAKICAgICBl
bHNlIHsKLSAgICAgICAgaWYgKG1fbGFzdE5vZGVJbnNlcnRlZCAmJiBtX2xhc3ROb2RlSW5zZXJ0
ZWQtPmlkKCkgPT0gSURfQlIgJiYgIWRvY3VtZW50KCktPmluU3RyaWN0TW9kZSgpKSB7CisgICAg
ICAgIGlmIChtX2xhc3ROb2RlSW5zZXJ0ZWQgJiYgbV9sYXN0Tm9kZUluc2VydGVkLT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6YnIoKSkgJiYgIWRvY3VtZW50KCktPmluU3RyaWN0TW9kZSgpKSB7CiAg
ICAgICAgICAgICBkb2N1bWVudCgpLT51cGRhdGVMYXlvdXQoKTsKICAgICAgICAgICAgIFZpc2li
bGVQb3NpdGlvbiBwb3MoUG9zaXRpb24obV9sYXN0Tm9kZUluc2VydGVkLCAxKSwgRE9XTlNUUkVB
TSk7CiAgICAgICAgICAgICBpZiAoaXNFbmRPZkJsb2NrKHBvcykpIHsKICAgICAgICAgICAgICAg
ICBOb2RlSW1wbCAqbmV4dCA9IG1fbGFzdE5vZGVJbnNlcnRlZC0+dHJhdmVyc2VOZXh0Tm9kZSgp
OwotICAgICAgICAgICAgICAgIGJvb2wgaGFzVHJhaWxpbmdCUiA9IG5leHQgJiYgbmV4dC0+aWQo
KSA9PSBJRF9CUiAmJiBtX2xhc3ROb2RlSW5zZXJ0ZWQtPmVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1l
bnQoKSA9PSBuZXh0LT5lbmNsb3NpbmdCbG9ja0Zsb3dFbGVtZW50KCk7CisgICAgICAgICAgICAg
ICAgYm9vbCBoYXNUcmFpbGluZ0JSID0gbmV4dCAmJiBuZXh0LT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6YnIoKSkgJiYgbV9sYXN0Tm9kZUluc2VydGVkLT5lbmNsb3NpbmdCbG9ja0Zsb3dFbGVtZW50
KCkgPT0gbmV4dC0+ZW5jbG9zaW5nQmxvY2tGbG93RWxlbWVudCgpOwogICAgICAgICAgICAgICAg
IGlmICghaGFzVHJhaWxpbmdCUikgewogICAgICAgICAgICAgICAgICAgICAvLyBJbnNlcnQgYW4g
ImV4dHJhIiBCUiBhdCB0aGUgZW5kIG9mIHRoZSBibG9jay4gCiAgICAgICAgICAgICAgICAgICAg
IGluc2VydE5vZGVCZWZvcmUoY3JlYXRlQnJlYWtFbGVtZW50KGRvY3VtZW50KCkpLCBtX2xhc3RO
b2RlSW5zZXJ0ZWQpOwpAQCAtOTM4LDcgKzkxNiw3IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNv
bW1hbmQ6OmRvQXBwbHkoKQogICAgICAgICAgICAgICAgIGluc2VydE5vZGVBZnRlcihub2RlLCBy
ZWZOb2RlKTsKICAgICAgICAgICAgICAgICByZWZOb2RlID0gbm9kZTsKICAgICAgICAgICAgICAg
ICAvLyBXZSB3YW50IHRvIG1vdmUgdGhlIGZpcnN0IEJSIHdlIHNlZSwgc28gY2hlY2sgZm9yIHRo
YXQgaGVyZS4KLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+aWQoKSA9PSBJRF9CUikKKyAgICAg
ICAgICAgICAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJyKCkpKQogICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBub2RlID0gbmV4dDsKICAgICAg
ICAgICAgIH0KQEAgLTEwODYsNyArMTA2NCw3IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1h
bmQ6OnVwZGF0ZU5vZGUKICAgICAKICAgICAvLyB1cGRhdGUgbV9sYXN0Tm9kZUluc2VydGVkCiAg
ICAgTm9kZUltcGwgKm9sZCA9IG1fbGFzdE5vZGVJbnNlcnRlZDsKLSAgICBtX2xhc3ROb2RlSW5z
ZXJ0ZWQgPSBub2RlLT5sYXN0RGVzY2VuZGVudCgpOworICAgIG1fbGFzdE5vZGVJbnNlcnRlZCA9
IG5vZGUtPmxhc3REZXNjZW5kYW50KCk7CiAgICAgbV9sYXN0Tm9kZUluc2VydGVkLT5yZWYoKTsK
ICAgICBpZiAob2xkKQogICAgICAgICBvbGQtPmRlcmVmKCk7CkluZGV4OiBraHRtbC9lZGl0aW5n
L3NlbGVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0
bWwvZWRpdGluZy9zZWxlY3Rpb24uY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjg5CmRpZmYg
LXUgLXAgLXIxLjg5IGtodG1sL2VkaXRpbmcvc2VsZWN0aW9uLmNwcAotLS0ga2h0bWwvZWRpdGlu
Zy9zZWxlY3Rpb24uY3BwCTIzIEp1biAyMDA1IDE5OjQ3OjQ4IC0wMDAwCTEuODkKKysrIGtodG1s
L2VkaXRpbmcvc2VsZWN0aW9uLmNwcAkyNCBKdW4gMjAwNSAwMzoxMDowOCAtMDAwMApAQCAtMzMs
NyArMzMsNiBAQAogI2luY2x1ZGUgImRvbS9kb21fc3RyaW5nLmgiCiAjaW5jbHVkZSAia2h0bWxf
cGFydC5oIgogI2luY2x1ZGUgImtodG1sdmlldy5oIgotI2luY2x1ZGUgIm1pc2MvaHRtbHRhZ3Mu
aCIKICNpbmNsdWRlICJyZW5kZXJpbmcvcmVuZGVyX29iamVjdC5oIgogI2luY2x1ZGUgInJlbmRl
cmluZy9yZW5kZXJfc3R5bGUuaCIKICNpbmNsdWRlICJyZW5kZXJpbmcvcmVuZGVyX3RleHQuaCIK
QEAgLTkzOCw3ICs5MzcsNyBAQCB2b2lkIFNlbGVjdGlvbjo6ZGVidWdSZW5kZXJlcihSZW5kZXJP
YmplCiB7CiAgICAgaWYgKHItPm5vZGUoKS0+aXNFbGVtZW50Tm9kZSgpKSB7CiAgICAgICAgIEVs
ZW1lbnRJbXBsICplbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxlbWVudEltcGwgKj4oci0+bm9kZSgp
KTsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICIlcyVzXG4iLCBzZWxlY3RlZCA/ICI9PT4gIiA6
ICIgICAgIiwgZWxlbWVudC0+dGFnTmFtZSgpLnN0cmluZygpLmxhdGluMSgpKTsKKyAgICAgICAg
ZnByaW50ZihzdGRlcnIsICIlcyVzXG4iLCBzZWxlY3RlZCA/ICI9PT4gIiA6ICIgICAgIiwgZWxl
bWVudC0+bG9jYWxOYW1lKCkuc3RyaW5nKCkubGF0aW4xKCkpOwogICAgIH0KICAgICBlbHNlIGlm
IChyLT5pc1RleHQoKSkgewogICAgICAgICBSZW5kZXJUZXh0ICp0ZXh0UmVuZGVyZXIgPSBzdGF0
aWNfY2FzdDxSZW5kZXJUZXh0ICo+KHIpOwpJbmRleDoga2h0bWwvZWRpdGluZy92aXNpYmxlX3Bv
c2l0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9l
ZGl0aW5nL3Zpc2libGVfcG9zaXRpb24uY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjUxCmRp
ZmYgLXUgLXAgLXIxLjUxIGtodG1sL2VkaXRpbmcvdmlzaWJsZV9wb3NpdGlvbi5jcHAKLS0tIGto
dG1sL2VkaXRpbmcvdmlzaWJsZV9wb3NpdGlvbi5jcHAJMjMgSnVuIDIwMDUgMTk6NDc6NDkgLTAw
MDAJMS41MQorKysga2h0bWwvZWRpdGluZy92aXNpYmxlX3Bvc2l0aW9uLmNwcAkyNCBKdW4gMjAw
NSAwMzoxMDowOCAtMDAwMApAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgInZpc2libGVfcG9z
aXRpb24uaCIKICNpbmNsdWRlICJ2aXNpYmxlX3VuaXRzLmgiCiAKLSNpbmNsdWRlICJtaXNjL2h0
bWx0YWdzLmgiCisjaW5jbHVkZSAiaHRtbG5hbWVzLmgiCiAjaW5jbHVkZSAicmVuZGVyaW5nL3Jl
bmRlcl9saW5lLmgiCiAjaW5jbHVkZSAicmVuZGVyaW5nL3JlbmRlcl9vYmplY3QuaCIKICNpbmNs
dWRlICJyZW5kZXJpbmcvcmVuZGVyX3RleHQuaCIKQEAgLTUwLDYgKzUwLDcgQEAgdXNpbmcgRE9N
OjpQb3NpdGlvbjsKIHVzaW5nIERPTTo6UmFuZ2U7CiB1c2luZyBET006OlJhbmdlSW1wbDsKIHVz
aW5nIERPTTo6VGV4dEltcGw7Cit1c2luZyBET006OkhUTUxOYW1lczsKIAogbmFtZXNwYWNlIGto
dG1sIHsKIApAQCAtNzQsNyArNzUsNyBAQCB2b2lkIFZpc2libGVQb3NpdGlvbjo6aW5pdChjb25z
dCBQb3NpdGlvCiAgICAgbV9hZmZpbml0eSA9IGFmZmluaXR5OwogCiAgICAgLy8gRm9yIDxicj4g
MCwgaXQncyBpbXBvcnRhbnQgbm90IHRvIG1vdmUgcGFzdCB0aGUgPGJyPi4KLSAgICBpZiAocG9z
Lm5vZGUoKSAmJiBwb3Mubm9kZSgpLT5pZCgpID09IElEX0JSICYmIHBvcy5vZmZzZXQoKSA9PSAw
KQorICAgIGlmIChwb3Mubm9kZSgpICYmIHBvcy5ub2RlKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjpicigpKSAmJiBwb3Mub2Zmc2V0KCkgPT0gMCkKICAgICAgICAgaW5pdFVwc3RyZWFtKHBvcyk7
CiAgICAgZWxzZQogICAgICAgICBpbml0RG93bnN0cmVhbShwb3MpOwpAQCAtMjc0LDcgKzI3NSw3
IEBAIGJvb2wgVmlzaWJsZVBvc2l0aW9uOjppc0NhbmRpZGF0ZShjb25zdCAKICAgICB9CiAgICAg
CiAgICAgaWYgKHJlbmRlcmVyLT5pc0Jsb2NrRmxvdygpICYmICghcmVuZGVyZXItPmZpcnN0Q2hp
bGQoKSB8fCAhcG9zLm5vZGUoKS0+Zmlyc3RDaGlsZCgpKSAmJiAKLSAgICAgICAocmVuZGVyZXIt
PmhlaWdodCgpIHx8IHBvcy5ub2RlKCktPmlkKCkgPT0gSURfQk9EWSkpIHsKKyAgICAgICAocmVu
ZGVyZXItPmhlaWdodCgpIHx8IHBvcy5ub2RlKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpib2R5
KCkpKSkgewogICAgICAgICAvLyByZXR1cm4gdHJ1ZSBmb3Igb2Zmc2V0IDAgaW50byByZW5kZXJl
ZCBibG9ja3MgdGhhdCBhcmUgZW1wdHkgb2YgcmVuZGVyZWQga2lkcywgYnV0IGhhdmUgYSBoZWln
aHQKICAgICAgICAgcmV0dXJuIHBvcy5vZmZzZXQoKSA9PSAwOwogICAgIH0KQEAgLTM1OSw3ICsz
NjAsNyBAQCBsb25nIFZpc2libGVQb3NpdGlvbjo6bWF4T2Zmc2V0KGNvbnN0IE5vCiAKIGJvb2wg
VmlzaWJsZVBvc2l0aW9uOjppc0F0b21pY05vZGUoY29uc3QgTm9kZUltcGwgKm5vZGUpCiB7Ci0g
ICAgcmV0dXJuIG5vZGUgJiYgKCFub2RlLT5oYXNDaGlsZE5vZGVzKCkgfHwgKG5vZGUtPmlkKCkg
PT0gSURfT0JKRUNUICYmIG5vZGUtPnJlbmRlcmVyKCkgJiYgbm9kZS0+cmVuZGVyZXIoKS0+aXNS
ZXBsYWNlZCgpKSk7CisgICAgcmV0dXJuIG5vZGUgJiYgKCFub2RlLT5oYXNDaGlsZE5vZGVzKCkg
fHwgKG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvYmplY3QoKSkgJiYgbm9kZS0+cmVuZGVy
ZXIoKSAmJiBub2RlLT5yZW5kZXJlcigpLT5pc1JlcGxhY2VkKCkpKTsKIH0KIAogUUNoYXIgVmlz
aWJsZVBvc2l0aW9uOjpjaGFyYWN0ZXIoKSBjb25zdApJbmRleDoga2h0bWwvZWRpdGluZy92aXNp
YmxlX3RleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1s
L2VkaXRpbmcvdmlzaWJsZV90ZXh0LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yNwpkaWZm
IC11IC1wIC1yMS4yNyBraHRtbC9lZGl0aW5nL3Zpc2libGVfdGV4dC5jcHAKLS0tIGtodG1sL2Vk
aXRpbmcvdmlzaWJsZV90ZXh0LmNwcAkxMyBNYXkgMjAwNSAxNjo0ODo1MSAtMDAwMAkxLjI3Cisr
KyBraHRtbC9lZGl0aW5nL3Zpc2libGVfdGV4dC5jcHAJMjQgSnVuIDIwMDUgMDM6MTA6MDkgLTAw
MDAKQEAgLTI1LDcgKzI1LDcgQEAKIAogI2luY2x1ZGUgInZpc2libGVfdGV4dC5oIgogCi0jaW5j
bHVkZSAibWlzYy9odG1sdGFncy5oIgorI2luY2x1ZGUgImh0bWxuYW1lcy5oIgogI2luY2x1ZGUg
InJlbmRlcmluZy9yZW5kZXJfdGV4dC5oIgogI2luY2x1ZGUgInhtbC9kb21fbm9kZWltcGwuaCIK
ICNpbmNsdWRlICJ4bWwvZG9tX3Bvc2l0aW9uLmgiCkBAIC0zNyw2ICszNyw3IEBAIHVzaW5nIERP
TTo6Tm9kZTsKIHVzaW5nIERPTTo6Tm9kZUltcGw7CiB1c2luZyBET006Om9mZnNldEluQ2hhcmFj
dGVyczsKIHVzaW5nIERPTTo6UmFuZ2VJbXBsOwordXNpbmcgRE9NOjpIVE1MTmFtZXM7CiAKIC8v
IEZJWE1FOiBUaGVzZSBjbGFzc2VzIHNob3VsZCBwcm9iYWJseSB1c2UgdGhlIHJlbmRlciB0cmVl
IGFuZCBub3QgdGhlIERPTSB0cmVlLCBzaW5jZSBlbGVtZW50cyBjb3VsZAogLy8gYmUgaGlkZGVu
IHVzaW5nIENTUywgb3IgYWRkaXRpb25hbCBnZW5lcmF0ZWQgY29udGVudCBjb3VsZCBiZSBhZGRl
ZC4gIEZvciBub3csIHdlIGp1c3QgbWFrZSBzdXJlCkBAIC0zMzYsNDEgKzMzNywyNSBAQCBib29s
IFRleHRJdGVyYXRvcjo6aGFuZGxlUmVwbGFjZWRFbGVtZW50CiAKIGJvb2wgVGV4dEl0ZXJhdG9y
OjpoYW5kbGVOb25UZXh0Tm9kZSgpCiB7Ci0gICAgc3dpdGNoIChtX25vZGUtPmlkKCkpIHsKLSAg
ICAgICAgY2FzZSBJRF9CUjogewotICAgICAgICAgICAgZW1pdENoYXJhY3RlcignXG4nLCBtX25v
ZGUtPnBhcmVudE5vZGUoKSwgbV9ub2RlLCAwLCAxKTsKLSAgICAgICAgICAgIGJyZWFrOworICAg
IGlmIChtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpicigpKSkgeworICAgICAgICBlbWl0
Q2hhcmFjdGVyKCdcbicsIG1fbm9kZS0+cGFyZW50Tm9kZSgpLCBtX25vZGUsIDAsIDEpOworICAg
IH0gZWxzZSBpZiAobV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGQoKSkgfHwgbV9ub2Rl
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGgoKSkpIHsKKyAgICAgICAgaWYgKG1fbGFzdENoYXJh
Y3RlciAhPSAnXG4nICYmIG1fbGFzdFRleHROb2RlKSB7CisgICAgICAgICAgICBlbWl0Q2hhcmFj
dGVyKCdcdCcsIG1fbGFzdFRleHROb2RlLT5wYXJlbnROb2RlKCksIG1fbGFzdFRleHROb2RlLCAw
LCAxKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAobV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6YmxvY2txdW90ZSgpKSB8fCBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpkZCgp
KSB8fAorICAgICAgICAgICAgICAgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZGl2KCkp
IHx8CisgICAgICAgICAgICAgICBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpkbCgpKSB8
fCBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpkdCgpKSB8fCAKKyAgICAgICAgICAgICAg
IG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmgxKCkpIHx8IG1fbm9kZS0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OmgyKCkpIHx8CisgICAgICAgICAgICAgICBtX25vZGUtPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjpoMygpKSB8fCBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoNCgpKSB8
fAorICAgICAgICAgICAgICAgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDUoKSkgfHwg
bV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDYoKSkgfHwKKyAgICAgICAgICAgICAgIG1f
bm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmhyKCkpIHx8IG1fbm9kZS0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OmxpKCkpIHx8CisgICAgICAgICAgICAgICBtX25vZGUtPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjpvbCgpKSB8fCBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpwKCkpIHx8Cisg
ICAgICAgICAgICAgICBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpwcmUoKSkgfHwgbV9u
b2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dHIoKSkgfHwKKyAgICAgICAgICAgICAgIG1fbm9k
ZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnVsKCkpKSB7CisgICAgICAgIGlmIChtX2xhc3RDaGFy
YWN0ZXIgIT0gJ1xuJyAmJiBtX2xhc3RUZXh0Tm9kZSkgeworICAgICAgICAgICAgZW1pdENoYXJh
Y3RlcignXG4nLCBtX2xhc3RUZXh0Tm9kZS0+cGFyZW50Tm9kZSgpLCBtX2xhc3RUZXh0Tm9kZSwg
MCwgMSk7CiAgICAgICAgIH0KLQotICAgICAgICBjYXNlIElEX1REOgotICAgICAgICBjYXNlIElE
X1RIOgotICAgICAgICAgICAgaWYgKG1fbGFzdENoYXJhY3RlciAhPSAnXG4nICYmIG1fbGFzdFRl
eHROb2RlKSB7Ci0gICAgICAgICAgICAgICAgZW1pdENoYXJhY3RlcignXHQnLCBtX2xhc3RUZXh0
Tm9kZS0+cGFyZW50Tm9kZSgpLCBtX2xhc3RUZXh0Tm9kZSwgMCwgMSk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIElEX0JMT0NLUVVPVEU6Ci0gICAg
ICAgIGNhc2UgSURfREQ6Ci0gICAgICAgIGNhc2UgSURfRElWOgotICAgICAgICBjYXNlIElEX0RM
OgotICAgICAgICBjYXNlIElEX0RUOgotICAgICAgICBjYXNlIElEX0gxOgotICAgICAgICBjYXNl
IElEX0gyOgotICAgICAgICBjYXNlIElEX0gzOgotICAgICAgICBjYXNlIElEX0g0OgotICAgICAg
ICBjYXNlIElEX0g1OgotICAgICAgICBjYXNlIElEX0g2OgotICAgICAgICBjYXNlIElEX0hSOgot
ICAgICAgICBjYXNlIElEX0xJOgotICAgICAgICBjYXNlIElEX09MOgotICAgICAgICBjYXNlIElE
X1A6Ci0gICAgICAgIGNhc2UgSURfUFJFOgotICAgICAgICBjYXNlIElEX1RSOgotICAgICAgICBj
YXNlIElEX1VMOgotICAgICAgICAgICAgaWYgKG1fbGFzdENoYXJhY3RlciAhPSAnXG4nICYmIG1f
bGFzdFRleHROb2RlKSB7Ci0gICAgICAgICAgICAgICAgZW1pdENoYXJhY3RlcignXG4nLCBtX2xh
c3RUZXh0Tm9kZS0+cGFyZW50Tm9kZSgpLCBtX2xhc3RUZXh0Tm9kZSwgMCwgMSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBicmVhazsKICAgICB9CiAKICAgICByZXR1cm4gdHJ1ZTsKQEAg
LTM4MSw0OSArMzY2LDM2IEBAIHZvaWQgVGV4dEl0ZXJhdG9yOjpleGl0Tm9kZSgpCiAgICAgYm9v
bCBlbmRMaW5lID0gZmFsc2U7CiAgICAgYm9vbCBhZGROZXdsaW5lID0gZmFsc2U7CiAKLSAgICBz
d2l0Y2ggKG1fbm9kZS0+aWQoKSkgewotICAgICAgICBjYXNlIElEX0JMT0NLUVVPVEU6Ci0gICAg
ICAgIGNhc2UgSURfREQ6Ci0gICAgICAgIGNhc2UgSURfRElWOgotICAgICAgICBjYXNlIElEX0RM
OgotICAgICAgICBjYXNlIElEX0RUOgotICAgICAgICBjYXNlIElEX0hSOgotICAgICAgICBjYXNl
IElEX0xJOgotICAgICAgICBjYXNlIElEX09MOgotICAgICAgICBjYXNlIElEX1BSRToKLSAgICAg
ICAgY2FzZSBJRF9UUjoKLSAgICAgICAgY2FzZSBJRF9VTDoKLSAgICAgICAgICAgIGVuZExpbmUg
PSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBJRF9IMToKLSAgICAg
ICAgY2FzZSBJRF9IMjoKLSAgICAgICAgY2FzZSBJRF9IMzoKLSAgICAgICAgY2FzZSBJRF9INDoK
LSAgICAgICAgY2FzZSBJRF9INToKLSAgICAgICAgY2FzZSBJRF9INjoKLSAgICAgICAgY2FzZSBJ
RF9QOiB7Ci0gICAgICAgICAgICBlbmRMaW5lID0gdHJ1ZTsKLQotICAgICAgICAgICAgLy8gSW4g
Y2VydGFpbiBjYXNlcywgZW1pdCBhIG5ldyBuZXdsaW5lIGNoYXJhY3RlciBmb3IgdGhpcyBub2Rl
Ci0gICAgICAgICAgICAvLyByZWdhcmRsZXNzIG9mIHdoZXRoZXIgd2UgZW1pdCBhbm90aGVyIG9u
ZS4KLSAgICAgICAgICAgIC8vIEZJWE1FOiBTb21lIGRheSB3ZSBjb3VsZCBkbyB0aGlzIGZvciBv
dGhlciB0YWdzLgotICAgICAgICAgICAgLy8gSG93ZXZlciwgZG9pbmcgaXQganVzdCBmb3IgdGhl
IHRhZ3MgYWJvdmUgbWFrZXMgaXQgbW9yZSBsaWtlbHkKLSAgICAgICAgICAgIC8vIHdlJ2xsIGVu
ZCB1cCBnZXR0aW5nIHRoZSByaWdodCByZXN1bHQgd2l0aG91dCBtYXJnaW4gY29sbGFwc2luZy4K
LSAgICAgICAgICAgIC8vIEZvciBleGFtcGxlOiA8ZGl2PjxwPnRleHQ8L3A+PC9kaXY+IHdpbGwg
d29yayByaWdodCBldmVuIGlmIGJvdGgKLSAgICAgICAgICAgIC8vIHRoZSA8ZGl2PiBhbmQgdGhl
IDxwPiBoYXZlIGJvdHRvbSBtYXJnaW5zLgotICAgICAgICAgICAgUmVuZGVyT2JqZWN0ICpyZW5k
ZXJlciA9IG1fbm9kZS0+cmVuZGVyZXIoKTsKLSAgICAgICAgICAgIGlmIChyZW5kZXJlcikgewot
ICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlICpzdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpOwot
ICAgICAgICAgICAgICAgIGlmIChzdHlsZSkgewotICAgICAgICAgICAgICAgICAgICBpbnQgYm90
dG9tTWFyZ2luID0gcmVuZGVyZXItPmNvbGxhcHNlZE1hcmdpbkJvdHRvbSgpOwotICAgICAgICAg
ICAgICAgICAgICBpbnQgZm9udFNpemUgPSBzdHlsZS0+aHRtbEZvbnQoKS5nZXRGb250RGVmKCku
Y29tcHV0ZWRQaXhlbFNpemUoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGJvdHRvbU1hcmdp
biAqIDIgPj0gZm9udFNpemUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkZE5ld2xpbmUg
PSB0cnVlOwotICAgICAgICAgICAgICAgICAgICB9CisgICAgaWYgKG1fbm9kZS0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OmJsb2NrcXVvdGUoKSkgfHwgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6ZGQoKSkgfHwKKyAgICAgICAgICAgICAgIG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
OmRpdigpKSB8fAorICAgICAgICAgICAgICAgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
ZGwoKSkgfHwgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZHQoKSkgfHwgCisgICAgICAg
ICAgICAgICBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpocigpKSB8fCBtX25vZGUtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjpsaSgpKSB8fAorICAgICAgICAgICAgICAgbV9ub2RlLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6b2woKSkgfHwKKyAgICAgICAgICAgICAgIG1fbm9kZS0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OnByZSgpKSB8fCBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0
cigpKSB8fAorICAgICAgICAgICAgICAgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dWwo
KSkpCisgICAgICAgIGVuZExpbmUgPSB0cnVlOworICAgIGVsc2UgaWYgKG1fbm9kZS0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OmgxKCkpIHx8IG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omgy
KCkpIHx8CisgICAgICAgICAgICAgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDMoKSkg
fHwgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDQoKSkgfHwKKyAgICAgICAgICAgICBt
X25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoNSgpKSB8fCBtX25vZGUtPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjpoNigpKSkgeworICAgICAgICBlbmRMaW5lID0gdHJ1ZTsKKworICAgICAgICAv
LyBJbiBjZXJ0YWluIGNhc2VzLCBlbWl0IGEgbmV3IG5ld2xpbmUgY2hhcmFjdGVyIGZvciB0aGlz
IG5vZGUKKyAgICAgICAgLy8gcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHdlIGVtaXQgYW5vdGhlciBv
bmUuCisgICAgICAgIC8vIEZJWE1FOiBTb21lIGRheSB3ZSBjb3VsZCBkbyB0aGlzIGZvciBvdGhl
ciB0YWdzLgorICAgICAgICAvLyBIb3dldmVyLCBkb2luZyBpdCBqdXN0IGZvciB0aGUgdGFncyBh
Ym92ZSBtYWtlcyBpdCBtb3JlIGxpa2VseQorICAgICAgICAvLyB3ZSdsbCBlbmQgdXAgZ2V0dGlu
ZyB0aGUgcmlnaHQgcmVzdWx0IHdpdGhvdXQgbWFyZ2luIGNvbGxhcHNpbmcuCisgICAgICAgIC8v
IEZvciBleGFtcGxlOiA8ZGl2PjxwPnRleHQ8L3A+PC9kaXY+IHdpbGwgd29yayByaWdodCBldmVu
IGlmIGJvdGgKKyAgICAgICAgLy8gdGhlIDxkaXY+IGFuZCB0aGUgPHA+IGhhdmUgYm90dG9tIG1h
cmdpbnMuCisgICAgICAgIFJlbmRlck9iamVjdCAqcmVuZGVyZXIgPSBtX25vZGUtPnJlbmRlcmVy
KCk7CisgICAgICAgIGlmIChyZW5kZXJlcikgeworICAgICAgICAgICAgUmVuZGVyU3R5bGUgKnN0
eWxlID0gcmVuZGVyZXItPnN0eWxlKCk7CisgICAgICAgICAgICBpZiAoc3R5bGUpIHsKKyAgICAg
ICAgICAgICAgICBpbnQgYm90dG9tTWFyZ2luID0gcmVuZGVyZXItPmNvbGxhcHNlZE1hcmdpbkJv
dHRvbSgpOworICAgICAgICAgICAgICAgIGludCBmb250U2l6ZSA9IHN0eWxlLT5odG1sRm9udCgp
LmdldEZvbnREZWYoKS5jb21wdXRlZFBpeGVsU2l6ZSgpOworICAgICAgICAgICAgICAgIGlmIChi
b3R0b21NYXJnaW4gKiAyID49IGZvbnRTaXplKSB7CisgICAgICAgICAgICAgICAgICAgIGFkZE5l
d2xpbmUgPSB0cnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQogCkBAIC02NjAsMzQgKzYzMiwyMiBAQCBib29s
IFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3I6OmhhCiAKIGJvb2wgU2ltcGxpZmllZEJh
Y2t3YXJkc1RleHRJdGVyYXRvcjo6aGFuZGxlTm9uVGV4dE5vZGUoKQogewotICAgIHN3aXRjaCAo
bV9ub2RlLT5pZCgpKSB7Ci0gICAgICAgIGNhc2UgSURfQlI6Ci0gICAgICAgICAgICBlbWl0TmV3
bGluZUZvckJST3JUZXh0KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJRF9U
RDoKLSAgICAgICAgY2FzZSBJRF9USDoKLSAgICAgICAgY2FzZSBJRF9CTE9DS1FVT1RFOgotICAg
ICAgICBjYXNlIElEX0REOgotICAgICAgICBjYXNlIElEX0RJVjoKLSAgICAgICAgY2FzZSBJRF9E
TDoKLSAgICAgICAgY2FzZSBJRF9EVDoKLSAgICAgICAgY2FzZSBJRF9IMToKLSAgICAgICAgY2Fz
ZSBJRF9IMjoKLSAgICAgICAgY2FzZSBJRF9IMzoKLSAgICAgICAgY2FzZSBJRF9INDoKLSAgICAg
ICAgY2FzZSBJRF9INToKLSAgICAgICAgY2FzZSBJRF9INjoKLSAgICAgICAgY2FzZSBJRF9IUjoK
LSAgICAgICAgY2FzZSBJRF9QOgotICAgICAgICBjYXNlIElEX1BSRToKLSAgICAgICAgY2FzZSBJ
RF9UUjoKLSAgICAgICAgY2FzZSBJRF9PTDoKLSAgICAgICAgY2FzZSBJRF9VTDoKLSAgICAgICAg
Y2FzZSBJRF9MSToKLSAgICAgICAgICAgIC8vIEVtaXQgYSBzcGFjZSB0byAiYnJlYWsgdXAiIGNv
bnRlbnQuIEFueSB3b3JkIGJyZWFrCi0gICAgICAgICAgICAvLyBjaGFyYWN0ZXIgd2lsbCBkby4K
LSAgICAgICAgICAgIGVtaXRDaGFyYWN0ZXIoJyAnLCBtX25vZGUsIDAsIDApOwotICAgICAgICAg
ICAgYnJlYWs7CisgICAgaWYgKG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJyKCkpKQor
ICAgICAgICBlbWl0TmV3bGluZUZvckJST3JUZXh0KCk7CisgICAgZWxzZSBpZiAobV9ub2RlLT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6dGQgKCkpIHx8IG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OnRoKCkpIHx8CisgICAgICAgICAgICAgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
YmxvY2txdW90ZSgpKSB8fCBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpkZCgpKSB8fAor
ICAgICAgICAgICAgIG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmRpdigpKSB8fAorICAg
ICAgICAgICAgIG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmRsKCkpIHx8IG1fbm9kZS0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OmR0KCkpIHx8IAorICAgICAgICAgICAgIG1fbm9kZS0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OmgxKCkpIHx8IG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
OmgyKCkpIHx8CisgICAgICAgICAgICAgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDMo
KSkgfHwgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDQoKSkgfHwKKyAgICAgICAgICAg
ICBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoNSgpKSB8fCBtX25vZGUtPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjpoNigpKSB8fAorICAgICAgICAgICAgIG1fbm9kZS0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OmhyKCkpIHx8IG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmxpKCkpIHx8
CisgICAgICAgICAgICAgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b2woKSkgfHwgbV9u
b2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6cCgpKSB8fAorICAgICAgICAgICAgIG1fbm9kZS0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OnByZSgpKSB8fCBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjp0cigpKSB8fAorICAgICAgICAgICAgIG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
OnVsKCkpKSB7CisgICAgICAgIC8vIEVtaXQgYSBzcGFjZSB0byAiYnJlYWsgdXAiIGNvbnRlbnQu
IEFueSB3b3JkIGJyZWFrCisgICAgICAgIC8vIGNoYXJhY3RlciB3aWxsIGRvLgorICAgICAgICBl
bWl0Q2hhcmFjdGVyKCcgJywgbV9ub2RlLCAwLCAwKTsKICAgICB9CiAKICAgICByZXR1cm4gdHJ1
ZTsKSW5kZXg6IGtodG1sL2VkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcCx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zNApkaWZmIC11IC1wIC1yMS4zNCBraHRtbC9lZGl0aW5n
L3Zpc2libGVfdW5pdHMuY3BwCi0tLSBraHRtbC9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwCTI2
IE1heSAyMDA1IDIwOjMwOjEyIC0wMDAwCTEuMzQKKysrIGtodG1sL2VkaXRpbmcvdmlzaWJsZV91
bml0cy5jcHAJMjQgSnVuIDIwMDUgMDM6MTA6MTAgLTAwMDAKQEAgLTI3LDcgKzI3LDcgQEAKIAog
I2luY2x1ZGUgPHFzdHJpbmcuaD4KIAotI2luY2x1ZGUgImh0bWx0YWdzLmgiCisjaW5jbHVkZSAi
aHRtbG5hbWVzLmgiCiAjaW5jbHVkZSAibWlzYy9oZWxwZXIuaCIKICNpbmNsdWRlICJyZW5kZXJp
bmcvcmVuZGVyX3RleHQuaCIKICNpbmNsdWRlICJyZW5kZXJpbmcvcmVuZGVyX2Jsb2NrLmgiCkBA
IC00MSw2ICs0MSw3IEBAIHVzaW5nIERPTTo6RWxlbWVudEltcGw7CiB1c2luZyBET006Ok5vZGVJ
bXBsOwogdXNpbmcgRE9NOjpQb3NpdGlvbjsKIHVzaW5nIERPTTo6UmFuZ2VJbXBsOwordXNpbmcg
RE9NOjpIVE1MTmFtZXM7CiAKIG5hbWVzcGFjZSBraHRtbCB7CiAKQEAgLTMzMiw3ICszMzMsNyBA
QCBWaXNpYmxlUG9zaXRpb24gZW5kT2ZMaW5lKGNvbnN0IFZpc2libGVQCiAgICAgICAgIHJldHVy
biBWaXNpYmxlUG9zaXRpb24oKTsKIAogICAgIGxvbmcgZW5kT2Zmc2V0ID0gMTsKLSAgICBpZiAo
ZW5kTm9kZS0+aWQoKSA9PSBJRF9CUikgeworICAgIGlmIChlbmROb2RlLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6YnIoKSkpIHsKICAgICAgICAgZW5kT2Zmc2V0ID0gMDsKICAgICB9IGVsc2UgaWYg
KGVuZEJveC0+aXNJbmxpbmVUZXh0Qm94KCkpIHsKICAgICAgICAgSW5saW5lVGV4dEJveCAqZW5k
VGV4dEJveCA9IHN0YXRpY19jYXN0PElubGluZVRleHRCb3ggKj4oZW5kQm94KTsKSW5kZXg6IGto
dG1sL2h0bWwvZHRkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9r
aHRtbC9odG1sL2R0ZC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzgKZGlmZiAtdSAtcCAt
cjEuMzgga2h0bWwvaHRtbC9kdGQuY3BwCi0tLSBraHRtbC9odG1sL2R0ZC5jcHAJMTIgQXByIDIw
MDUgMjI6NDk6NDEgLTAwMDAJMS4zOAorKysga2h0bWwvaHRtbC9kdGQuY3BwCTI0IEp1biAyMDA1
IDAzOjEwOjEwIC0wMDAwCkBAIC00NCwyMjAgKzQ0LDcwIEBAIHVzaW5nIG5hbWVzcGFjZSBET007
CiAvLyA4IHRhYmxlCiAvLyA5IGJvZHkgZnJhbWVzZXQKIC8vIDEwIGh0bWwKKy8qCiBjb25zdCB1
bnNpZ25lZCBzaG9ydCBET006OnRhZ1ByaW9yaXR5QXJyYXlbXSA9IHsKLSAgICAwLCAvLyAwCi0g
ICAgMSwgLy8gSURfQSA9PSAxCiAgICAgMSwgLy8gSURfQUJCUgogICAgIDEsIC8vIElEX0FDUk9O
WU0KLSAgICAzLCAvLyBJRF9BRERSRVNTCi0gICAgMSwgLy8gSURfQVBQTEVUCi0gICAgMCwgLy8g
SURfQVJFQQogICAgIDEsIC8vIElEX0IKLSAgICAwLCAvLyBJRF9CQVNFCi0gICAgMCwgLy8gSURf
QkFTRUZPTlQKICAgICAxLCAvLyBJRF9CRE8KICAgICAxLCAvLyBJRF9CSUcKLSAgICA1LCAvLyBJ
RF9CTE9DS1FVT1RFCi0gICAxMCwgLy8gSURfQk9EWQotICAgIDAsIC8vIElEX0JSCi0gICAgMSwg
Ly8gSURfQlVUVE9OCi0gICAgMCwgLy8gSURfQ0FOVkFTCi0gICAgNSwgLy8gSURfQ0FQVElPTgot
ICAgIDUsIC8vIElEX0NFTlRFUgogICAgIDEsIC8vIElEX0NJVEUKICAgICAxLCAvLyBJRF9DT0RF
Ci0gICAgMCwgLy8gSURfQ09MCi0gICAgMSwgLy8gSURfQ09MR1JPVVAKLSAgICAzLCAvLyBJRF9E
RAotICAgIDEsIC8vIElEX0RFTAogICAgIDEsIC8vIElEX0RGTgotICAgIDUsIC8vIElEX0RJUgot
ICAgIDUsIC8vIElEX0RJVgotICAgIDUsIC8vIElEX0RMCi0gICAgMywgLy8gSURfRFQKICAgICAx
LCAvLyBJRF9FTQotICAgIDAsIC8vIElEX0VNQkVECi0gICAgMywgLy8gSURfRklFTERTRVQKLSAg
ICAxLCAvLyBJRF9GT05UCi0gICAgMywgLy8gSURfRk9STQotICAgIDAsIC8vIElEX0ZSQU1FCi0g
ICAxMCwvLyBJRF9GUkFNRVNFVAotICAgIDUsIC8vIElEX0gxCi0gICAgNSwgLy8gSURfSDIKLSAg
ICA1LCAvLyBJRF9IMwotICAgIDUsIC8vIElEX0g0Ci0gICAgNSwgLy8gSURfSDUKLSAgICA1LCAv
LyBJRF9INgotICAgMTAsLy8gSURfSEVBRAotICAgIDAsIC8vIElEX0hSCi0gICAxMSwvLyBJRF9I
VE1MCiAgICAgMSwgLy8gSURfSQotICAgIDEsIC8vIElEX0lGUkFNRQotICAgIDAsIC8vIElEX0lN
RwotICAgIDAsIC8vIElEX0lOUFVUCi0gICAgMSwgLy8gSURfSU5TCi0gICAgMCwgLy8gSURfSVNJ
TkRFWAogICAgIDEsIC8vIElEX0tCRAotICAgIDAsIC8vIElEX0tFWUdFTgotICAgIDUsIC8vIElE
X0xBQkVMCiAgICAgMSwgLy8gSURfTEFZRVIKICAgICAxLCAvLyBJRF9MRUdFTkQKLSAgICAzLCAv
LyBJRF9MSQotICAgIDAsIC8vIElEX0xJTksKLSAgICAxLCAvLyBJRF9NQVAKLSAgICAzLCAvLyBJ
RF9NQVJRVUVFCi0gICAgNSwgLy8gSURfTUVOVQotICAgIDAsIC8vIElEX01FVEEKLSAgICA1LCAv
LyBJRF9OT0JSCi0gICAxMCwvLyBJRF9OT0VNQkVECi0gICAxMCwvLyBJRF9OT0ZSQU1FUwotICAg
IDMsIC8vIElEX05PU0NSSVBUCiAgICAgMSwgLy8gSURfTk9MQVlFUgotICAgIDcsIC8vIElEX09C
SkVDVAotICAgIDUsIC8vIElEX09MCi0gICAgMSwgLy8gSURfT1BUR1JPVVAKLSAgICAyLCAvLyBJ
RF9PUFRJT04KLSAgICAzLCAvLyBJRF9QCi0gICAgMCwgLy8gSURfUEFSQU0KLSAgICA1LCAvLyBJ
RF9QTEFJTlRFWFQKLSAgICA1LCAvLyBJRF9QUkUKLSAgICAxLCAvLyBJRF9RCiAgICAgMSwgLy8g
SURfUwogICAgIDEsIC8vIElEX1NBTVAKLSAgICAxLCAvLyBJRF9TQ1JJUFQKLSAgICA2LCAvLyBJ
RF9TRUxFQ1QKICAgICAxLCAvLyBJRF9TTUFMTAotICAgIDEsIC8vIElEX1NQQU4KICAgICAxLCAv
LyBJRF9TVFJJS0UKICAgICAxLCAvLyBJRF9TVFJPTkcKLSAgICAxLCAvLyBJRF9TVFlMRQogICAg
IDEsIC8vIElEX1NVQgogICAgIDEsIC8vIElEX1NVUAotICAgIDksLy8gSURfVEFCTEUKLSAgICA4
LCAvLyBJRF9UQk9EWQotICAgIDYsIC8vIElEX1RECi0gICAgMSwgLy8gSURfVEVYVEFSRUEKLSAg
ICA4LCAvLyBJRF9URk9PVAotICAgIDYsIC8vIElEX1RICi0gICAgOCwgLy8gSURfVEhFQUQKLSAg
ICAxLCAvLyBJRF9USVRMRQotICAgIDcsIC8vIElEX1RSCiAgICAgMSwgLy8gSURfVFQKICAgICAx
LCAvLyBJRF9VCi0gICAgNSwgLy8gSURfVUwKICAgICAxLCAvLyBJRF9WQVIKICAgICAxLCAvLyBJ
RF9XQlIKLSAgICA1LCAvLyBJRF9YTVAKLSAgICAwLCAvLyBJRF9URVhUCiB9OwogCiBjb25zdCB0
YWdTdGF0dXMgRE9NOjplbmRUYWdBcnJheVtdID0gewotICAgIFJFUVVJUkVELCAgLy8gMAotICAg
IFJFUVVJUkVELCAgLy8gSURfQSA9PSAxCi0gICAgUkVRVUlSRUQsICAvLyBJRF9BQkJSCisgICAg
IFJFUVVJUkVELCAgLy8gSURfQUJCUgogICAgIFJFUVVJUkVELCAgLy8gSURfQUNST05ZTQogICAg
IFJFUVVJUkVELCAgLy8gSURfQUREUkVTUwotICAgIFJFUVVJUkVELCAgLy8gSURfQVBQTEVUCi0g
ICAgRk9SQklEREVOLCAvLyBJRF9BUkVBCiAgICAgUkVRVUlSRUQsICAvLyBJRF9CCi0gICAgRk9S
QklEREVOLCAvLyBJRF9CQVNFCi0gICAgRk9SQklEREVOLCAvLyBJRF9CQVNFRk9OVAogICAgIFJF
UVVJUkVELCAgLy8gSURfQkRPCiAgICAgUkVRVUlSRUQsICAvLyBJRF9CSUcKLSAgICBSRVFVSVJF
RCwgIC8vIElEX0JMT0NLUVVPVEUKLSAgICBSRVFVSVJFRCwgIC8vIElEX0JPRFkKLSAgICBGT1JC
SURERU4sIC8vIElEX0JSCi0gICAgUkVRVUlSRUQsICAvLyBJRF9CVVRUT04KLSAgICBGT1JCSURE
RU4sIC8vIElEX0NBTlZBUwotICAgIFJFUVVJUkVELCAgLy8gSURfQ0FQVElPTgogICAgIFJFUVVJ
UkVELCAgLy8gSURfQ0VOVEVSCiAgICAgUkVRVUlSRUQsICAvLyBJRF9DSVRFCiAgICAgUkVRVUlS
RUQsICAvLyBJRF9DT0RFCi0gICAgRk9SQklEREVOLCAvLyBJRF9DT0wKLSAgICBPUFRJT05BTCwg
IC8vIElEX0NPTEdST1VQCi0gICAgT1BUSU9OQUwsICAvLyBJRF9ERAotICAgIFJFUVVJUkVELCAg
Ly8gSURfREVMCiAgICAgUkVRVUlSRUQsICAvLyBJRF9ERk4KLSAgICBSRVFVSVJFRCwgIC8vIElE
X0RJUgotICAgIFJFUVVJUkVELCAgLy8gSURfRElWCi0gICAgUkVRVUlSRUQsICAvLyBJRF9ETAot
ICAgIE9QVElPTkFMLCAgLy8gSURfRFQKICAgICBSRVFVSVJFRCwgIC8vIElEX0VNCi0gICAgUkVR
VUlSRUQsICAvLyBJRF9FTUJFRAotICAgIFJFUVVJUkVELCAgLy8gSURfRklFTERTRVQKLSAgICBS
RVFVSVJFRCwgIC8vIElEX0ZPTlQKLSAgICBSRVFVSVJFRCwgIC8vIElEX0ZPUk0KLSAgICBGT1JC
SURERU4sIC8vIElEX0ZSQU1FCi0gICAgUkVRVUlSRUQsICAvLyBJRF9GUkFNRVNFVAotICAgIFJF
UVVJUkVELCAgLy8gSURfSDEKLSAgICBSRVFVSVJFRCwgIC8vIElEX0gyCi0gICAgUkVRVUlSRUQs
ICAvLyBJRF9IMwotICAgIFJFUVVJUkVELCAgLy8gSURfSDQKLSAgICBSRVFVSVJFRCwgIC8vIElE
X0g1Ci0gICAgUkVRVUlSRUQsICAvLyBJRF9INgotICAgIE9QVElPTkFMLCAgLy8gSURfSEVBRAot
ICAgIEZPUkJJRERFTiwgLy8gSURfSFIKLSAgICBSRVFVSVJFRCwgIC8vIElEX0hUTUwKLSAgICBS
RVFVSVJFRCwgIC8vIElEX0kKLSAgICBSRVFVSVJFRCwgIC8vIElEX0lGUkFNRQotICAgIEZPUkJJ
RERFTiwgLy8gSURfSU1HCi0gICAgRk9SQklEREVOLCAvLyBJRF9JTlBVVAotICAgIFJFUVVJUkVE
LCAgLy8gSURfSU5TCi0gICAgRk9SQklEREVOLCAvLyBJRF9JU0lOREVYCisgICAgIFJFUVVJUkVE
LCAgLy8gSURfRlJBTUVTRVQKKyAgICAgIFJFUVVJUkVELCAgLy8gSURfSQogICAgIFJFUVVJUkVE
LCAgLy8gSURfS0JECi0gICAgUkVRVUlSRUQsICAvLyBJRF9LRVlHRU4KLSAgICBSRVFVSVJFRCwg
IC8vIElEX0xBQkVMCiAgICAgUkVRVUlSRUQsICAvLyBJRF9MQVlFUgotICAgIFJFUVVJUkVELCAg
Ly8gSURfTEVHRU5ECi0gICAgT1BUSU9OQUwsICAvLyBJRF9MSQotICAgIEZPUkJJRERFTiwgLy8g
SURfTElOSwotICAgIFJFUVVJUkVELCAgLy8gSURfTUFQCi0gICAgUkVRVUlSRUQsICAvLyBJRF9N
QVJRVUVFCi0gICAgUkVRVUlSRUQsICAvLyBJRF9NRU5VCi0gICAgRk9SQklEREVOLCAvLyBJRF9N
RVRBCiAgICAgUkVRVUlSRUQsICAvLyBJRF9OT0JSCiAgICAgUkVRVUlSRUQsICAvLyBJRF9OT0VN
QkVECiAgICAgUkVRVUlSRUQsICAvLyBJRF9OT0ZSQU1FUwogICAgIFJFUVVJUkVELCAgLy8gSURf
Tk9TQ1JJUFQKICAgICBSRVFVSVJFRCwgIC8vIElEX05PTEFZRVIKLSAgICBSRVFVSVJFRCwgIC8v
IElEX09CSkVDVAotICAgIFJFUVVJUkVELCAgLy8gSURfT0wKLSAgICBSRVFVSVJFRCwgIC8vIElE
X09QVEdST1VQCi0gICAgT1BUSU9OQUwsICAvLyBJRF9PUFRJT04KLSAgICBPUFRJT05BTCwgIC8v
IElEX1AKLSAgICBGT1JCSURERU4sIC8vIElEX1BBUkFNCi0gICAgUkVRVUlSRUQsICAvLyBJRF9Q
TEFJTlRFWFQKLSAgICBSRVFVSVJFRCwgIC8vIElEX1BSRQotICAgIFJFUVVJUkVELCAgLy8gSURf
UQogICAgIFJFUVVJUkVELCAgLy8gSURfUwogICAgIFJFUVVJUkVELCAgLy8gSURfU0FNUAotICAg
IFJFUVVJUkVELCAgLy8gSURfU0NSSVBUCi0gICAgUkVRVUlSRUQsICAvLyBJRF9TRUxFQ1QKLSAg
ICBSRVFVSVJFRCwgIC8vIElEX1NNQUxMCi0gICAgUkVRVUlSRUQsICAvLyBJRF9TUEFOCisgICAg
IFJFUVVJUkVELCAgLy8gSURfU01BTEwKICAgICBSRVFVSVJFRCwgIC8vIElEX1NUUklLRQogICAg
IFJFUVVJUkVELCAgLy8gSURfU1RST05HCi0gICAgUkVRVUlSRUQsICAvLyBJRF9TVFlMRQogICAg
IFJFUVVJUkVELCAgLy8gSURfU1VCCiAgICAgUkVRVUlSRUQsICAvLyBJRF9TVVAKLSAgICBSRVFV
SVJFRCwgIC8vIElEX1RBQkxFCi0gICAgT1BUSU9OQUwsICAvLyBJRF9UQk9EWQotICAgIE9QVElP
TkFMLCAgLy8gSURfVEQKLSAgICBSRVFVSVJFRCwgIC8vIElEX1RFWFRBUkVBCi0gICAgT1BUSU9O
QUwsICAvLyBJRF9URk9PVAotICAgIE9QVElPTkFMLCAgLy8gSURfVEgKLSAgICBPUFRJT05BTCwg
IC8vIElEX1RIRUFECi0gICAgUkVRVUlSRUQsICAvLyBJRF9USVRMRQotICAgIE9QVElPTkFMLCAg
Ly8gSURfVFIKICAgICBSRVFVSVJFRCwgIC8vIElEX1RUCiAgICAgUkVRVUlSRUQsICAvLyBJRF9V
Ci0gICAgUkVRVUlSRUQsICAvLyBJRF9VTAogICAgIFJFUVVJUkVELCAgLy8gSURfVkFSCiAgICAg
UkVRVUlSRUQsICAvLyBJRF9XQlIKLSAgICBSRVFVSVJFRCwgIC8vIElEX1hNUAotICAgIFJFUVVJ
UkVEICAgLy8gSURfVEVYVAogfTsKIAorKi8KIAogc3RhdGljIGNvbnN0IHVzaG9ydCB0YWdfbGlz
dF8wW10gPSB7CiAgICAgSURfVEVYVCwKQEAgLTc2NywyMjMgKzYxNywzIEBAIGJvb2wgRE9NOjpj
aGVja0NoaWxkKHVzaG9ydCB0YWdJRCwgdXNob3IKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KIH0KLQotdm9pZCBET006OmFkZEZvcmJpZGRlbihpbnQgdGFnSWQsIHVzaG9ydCAqZm9yYmlk
ZGVuVGFncykKLXsKLSAgICBzd2l0Y2godGFnSWQpCi0gICAgewotICAgIGNhc2UgSURfTEFCRUw6
Ci0gICAgICAgIGZvcmJpZGRlblRhZ3NbSURfTEFCRUxdKys7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgSURfQlVUVE9OOgotICAgICAgICBmb3JiaWRkZW5UYWdzW0lEX0FdKys7Ci0gICAgICAg
IGZvcmJpZGRlblRhZ3NbSURfSU5QVVRdKys7Ci0gICAgICAgIGZvcmJpZGRlblRhZ3NbSURfU0VM
RUNUXSsrOwotICAgICAgICBmb3JiaWRkZW5UYWdzW0lEX1RFWFRBUkVBXSsrOwotICAgICAgICBm
b3JiaWRkZW5UYWdzW0lEX0xBQkVMXSsrOwotICAgICAgICBmb3JiaWRkZW5UYWdzW0lEX0JVVFRP
Tl0rKzsKLSAgICAgICAgZm9yYmlkZGVuVGFnc1tJRF9GT1JNXSsrOwotICAgICAgICBmb3JiaWRk
ZW5UYWdzW0lEX0lTSU5ERVhdKys7Ci0gICAgICAgIGZvcmJpZGRlblRhZ3NbSURfRklFTERTRVRd
Kys7Ci0gICAgICAgIGZvcmJpZGRlblRhZ3NbSURfSUZSQU1FXSsrOwotICAgICAgICBicmVhazsK
LSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLXZvaWQgRE9NOjpyZW1v
dmVGb3JiaWRkZW4oaW50IHRhZ0lkLCB1c2hvcnQgKmZvcmJpZGRlblRhZ3MpCi17Ci0gICAgc3dp
dGNoKHRhZ0lkKQotICAgIHsKLSAgICBjYXNlIElEX0xBQkVMOgotICAgICAgICBmb3JiaWRkZW5U
YWdzW0lEX0xBQkVMXS0tOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIElEX0JVVFRPTjoKLSAg
ICAgICAgZm9yYmlkZGVuVGFnc1tJRF9BXS0tOwotICAgICAgICBmb3JiaWRkZW5UYWdzW0lEX0lO
UFVUXS0tOwotICAgICAgICBmb3JiaWRkZW5UYWdzW0lEX1NFTEVDVF0tLTsKLSAgICAgICAgZm9y
YmlkZGVuVGFnc1tJRF9URVhUQVJFQV0tLTsKLSAgICAgICAgZm9yYmlkZGVuVGFnc1tJRF9MQUJF
TF0tLTsKLSAgICAgICAgZm9yYmlkZGVuVGFnc1tJRF9CVVRUT05dLS07Ci0gICAgICAgIGZvcmJp
ZGRlblRhZ3NbSURfRk9STV0tLTsKLSAgICAgICAgZm9yYmlkZGVuVGFnc1tJRF9JU0lOREVYXS0t
OwotICAgICAgICBmb3JiaWRkZW5UYWdzW0lEX0ZJRUxEU0VUXS0tOwotICAgICAgICBmb3JiaWRk
ZW5UYWdzW0lEX0lGUkFNRV0tLTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQotfQotCi0KLSNpZiAwCi0KLQotc3RydWN0IGF0dHJfcHJpdiB7Ci0g
ICAgYXR0cl9wcml2KCkgeyBpZCA9IGxlbiA9IDAsIHZhbCA9IDA7IH0KLSAgICBhdHRyX3ByaXYo
dXNob3J0IGksIGNvbnN0IFFDaGFyICp2LCB1c2hvcnQgbCkKLSAgICB7IGlkID1pOyBsZW4gPSBs
LCB2YWwgPSB2OyB9Ci0gICAgdXNob3J0IGlkOwotICAgIGNvbnN0IFFDaGFyICp2YWw7Ci0gICAg
dXNob3J0IGxlbjsKLX07Ci0KLURPTVN0cmluZyBmaW5kX2F0dHIodXNob3J0IGlkLCBjb25zdCBh
dHRyX3ByaXYgKmF0dHJzKQotewotICAgIGludCBpID0gMDsKLSAgICB3aGlsZShhdHRyc1tpXS5p
ZCAhPSAwKQotICAgIHsKLSAgICAgICAgaWYoYXR0cnNbaV0uaWQgPT0gaWQpCi0gICAgICAgICAg
ICByZXR1cm4gRE9NU3RyaW5nKGF0dHJzW2ldLnZhbCwgYXR0cnNbaV0ubGVuKTsKLSAgICAgICAg
aSsrOwotICAgIH0KLSAgICByZXR1cm4gRE9NU3RyaW5nKCk7Ci19Ci0KLXN0YXRpYyBjb25zdCBR
Q2hhciB2YWx1ZV8xXzAgW10gPSB7ICdOJywnTycsJ04nLCdFJyB9OwotCi1hdHRyX3ByaXYgYXR0
cl9saXN0XzFbXSA9IHsKLSAgICBhdHRyX3ByaXYoQVRUUl9DTEVBUiwgdmFsdWVfMV8wLCA0KQot
fTsKLQotc3RhdGljIGNvbnN0IFFDaGFyIHZhbHVlXzJfMCBbXSA9IHsgJ1InLCdFJywnQycsJ1Qn
IH07Ci0KLWF0dHJfcHJpdiBhdHRyX2xpc3RfMltdID0gewotICAgIGF0dHJfcHJpdihBVFRSX1NI
QVBFLCB2YWx1ZV8yXzAsIDQpCi19OwotCi1zdGF0aWMgY29uc3QgUUNoYXIgdmFsdWVfM18wIFtd
ID0geyAnUicsJ0UnLCdDJywnVCcgfTsKLQotYXR0cl9wcml2IGF0dHJfbGlzdF8zW10gPSB7Ci0g
ICAgYXR0cl9wcml2KEFUVFJfU0hBUEUsIHZhbHVlXzNfMCwgNCkKLX07Ci0KLXN0YXRpYyBjb25z
dCBRQ2hhciB2YWx1ZV80XzAgW10gPSB7ICdEJywnQScsJ1QnLCdBJyB9OwotCi1hdHRyX3ByaXYg
YXR0cl9saXN0XzRbXSA9IHsKLSAgICBhdHRyX3ByaXYoQVRUUl9WQUxVRVRZUEUsIHZhbHVlXzRf
MCwgNCkKLX07Ci0KLXN0YXRpYyBjb25zdCBRQ2hhciB2YWx1ZV81XzAgW10gPSB7ICdHJywnRScs
J1QnIH07Ci1zdGF0aWMgY29uc3QgUUNoYXIgdmFsdWVfNV8xIFtdID0geyAnQScsJ1AnLCdQJywn
TCcsJ0knLCdDJywnQScsJ1QnLCdJJywnTycsJ04nLCcvJywnWCcsJy0nLCdXJywnVycsJ1cnLCct
JywnRicsJ08nLCdSJywnTScsJy0nLCdVJywnUicsJ0wnLCdFJywnTicsJ0MnLCdPJywnRCcsJ0Un
LCdEJyB9OwotCi1hdHRyX3ByaXYgYXR0cl9saXN0XzVbXSA9IHsKLSAgICBhdHRyX3ByaXYoQVRU
Ul9NRVRIT0QsIHZhbHVlXzVfMCwgMyksCi0gICAgYXR0cl9wcml2KEFUVFJfRU5DVFlQRSwgdmFs
dWVfNV8xLCAzMykKLX07Ci0KLXN0YXRpYyBjb25zdCBRQ2hhciB2YWx1ZV82XzAgW10gPSB7ICdU
JywnRScsJ1gnLCdUJyB9OwotCi1hdHRyX3ByaXYgYXR0cl9saXN0XzZbXSA9IHsKLSAgICBhdHRy
X3ByaXYoQVRUUl9UWVBFLCB2YWx1ZV82XzAsIDQpCi19OwotCi1zdGF0aWMgY29uc3QgUUNoYXIg
dmFsdWVfN18wIFtdID0geyAnUycsJ1UnLCdCJywnTScsJ0knLCdUJyB9OwotCi1hdHRyX3ByaXYg
YXR0cl9saXN0XzdbXSA9IHsKLSAgICBhdHRyX3ByaXYoQVRUUl9UWVBFLCB2YWx1ZV83XzAsIDYp
Ci19OwotCi1zdGF0aWMgY29uc3QgUUNoYXIgdmFsdWVfOF8wIFtdID0geyAnMScgfTsKLQotYXR0
cl9wcml2IGF0dHJfbGlzdF84W10gPSB7Ci0gICAgYXR0cl9wcml2KEFUVFJfU1BBTiwgdmFsdWVf
OF8wLCAxKQotfTsKLQotc3RhdGljIGNvbnN0IFFDaGFyIHZhbHVlXzlfMCBbXSA9IHsgJzEnIH07
Ci0KLWF0dHJfcHJpdiBhdHRyX2xpc3RfOVtdID0gewotICAgIGF0dHJfcHJpdihBVFRSX1NQQU4s
IHZhbHVlXzlfMCwgMSkKLX07Ci0KLXN0YXRpYyBjb25zdCBRQ2hhciB2YWx1ZV8xMF8wIFtdID0g
eyAnMScgfTsKLXN0YXRpYyBjb25zdCBRQ2hhciB2YWx1ZV8xMF8xIFtdID0geyAnMScgfTsKLQot
YXR0cl9wcml2IGF0dHJfbGlzdF8xMFtdID0gewotICAgIGF0dHJfcHJpdihBVFRSX1JPV1NQQU4s
IHZhbHVlXzEwXzAsIDEpLAotICAgIGF0dHJfcHJpdihBVFRSX0NPTFNQQU4sIHZhbHVlXzEwXzEs
IDEpCi19OwotCi1zdGF0aWMgY29uc3QgUUNoYXIgdmFsdWVfMTFfMCBbXSA9IHsgJzEnIH07Ci1z
dGF0aWMgY29uc3QgUUNoYXIgdmFsdWVfMTFfMSBbXSA9IHsgJ0EnLCdVJywnVCcsJ08nIH07Ci0K
LWF0dHJfcHJpdiBhdHRyX2xpc3RfMTFbXSA9IHsKLSAgICBhdHRyX3ByaXYoQVRUUl9GUkFNRUJP
UkRFUiwgdmFsdWVfMTFfMCwgMSksCi0gICAgYXR0cl9wcml2KEFUVFJfU0NST0xMSU5HLCB2YWx1
ZV8xMV8xLCA0KQotfTsKLQotc3RhdGljIGNvbnN0IFFDaGFyIHZhbHVlXzEyXzAgW10gPSB7ICcx
JyB9Owotc3RhdGljIGNvbnN0IFFDaGFyIHZhbHVlXzEyXzEgW10gPSB7ICdBJywnVScsJ1QnLCdP
JyB9OwotCi1hdHRyX3ByaXYgYXR0cl9saXN0XzEyW10gPSB7Ci0gICAgYXR0cl9wcml2KEFUVFJf
RlJBTUVCT1JERVIsIHZhbHVlXzEyXzAsIDEpLAotICAgIGF0dHJfcHJpdihBVFRSX1NDUk9MTElO
RywgdmFsdWVfMTJfMSwgNCkKLX07Ci0KLXN0YXRpYyBjb25zdCBRQ2hhciB2YWx1ZV8xM18wIFtd
ID0geyAnLScsJy8nLCcvJywnVycsJzMnLCdDJywnLycsJy8nLCdEJywnVCcsJ0QnIH07Ci1zdGF0
aWMgY29uc3QgUUNoYXIgdmFsdWVfMTNfMSBbXSA9IHsgJ1QnLCdSJywnQScsJ04nLCdTJywnSScs
J1QnLCdJJywnTycsJ04nLCdBJywnTCcsJy8nLCcvJywnRScsJ04nIH07Ci0KLWF0dHJfcHJpdiBh
dHRyX2xpc3RfMTNbXSA9IHsKLSAgICBhdHRyX3ByaXYoQVRUUl9WRVJTSU9OLCB2YWx1ZV8xM18w
LCAxMSksCi0gICAgYXR0cl9wcml2KEFUVFJfSFRNTCwgdmFsdWVfMTNfMSwgMTYpCi19OwotCi1E
T01TdHJpbmcgRE9NOjpmaW5kRGVmQXR0ck5vbmUodXNob3J0KQotewotICAgIHJldHVybiBET01T
dHJpbmcoKTsKLX07Ci1ET01TdHJpbmcgRE9NOjpmaW5kRGVmQXR0ckJSKHVzaG9ydCBpZCkKLXsK
LSAgICByZXR1cm4gZmluZF9hdHRyKGlkLCBhdHRyX2xpc3RfMSk7Ci19Ci1ET01TdHJpbmcgRE9N
OjpmaW5kRGVmQXR0ckEodXNob3J0IGlkKQotewotICAgIHJldHVybiBmaW5kX2F0dHIoaWQsIGF0
dHJfbGlzdF8yKTsKLX0KLURPTVN0cmluZyBET006OmZpbmREZWZBdHRyQVJFQSh1c2hvcnQgaWQp
Ci17Ci0gICAgcmV0dXJuIGZpbmRfYXR0cihpZCwgYXR0cl9saXN0XzMpOwotfQotRE9NU3RyaW5n
IERPTTo6ZmluZERlZkF0dHJQQVJBTSh1c2hvcnQgaWQpCi17Ci0gICAgcmV0dXJuIGZpbmRfYXR0
cihpZCwgYXR0cl9saXN0XzQpOwotfQotRE9NU3RyaW5nIERPTTo6ZmluZERlZkF0dHJGT1JNKHVz
aG9ydCBpZCkKLXsKLSAgICByZXR1cm4gZmluZF9hdHRyKGlkLCBhdHRyX2xpc3RfNSk7Ci19Ci1E
T01TdHJpbmcgRE9NOjpmaW5kRGVmQXR0cklOUFVUKHVzaG9ydCBpZCkKLXsKLSAgICByZXR1cm4g
ZmluZF9hdHRyKGlkLCBhdHRyX2xpc3RfNik7Ci19Ci1ET01TdHJpbmcgRE9NOjpmaW5kRGVmQXR0
ckJVVFRPTih1c2hvcnQgaWQpCi17Ci0gICAgcmV0dXJuIGZpbmRfYXR0cihpZCwgYXR0cl9saXN0
XzcpOwotfQotRE9NU3RyaW5nIERPTTo6ZmluZERlZkF0dHJDT0xHUk9VUCh1c2hvcnQgaWQpCi17
Ci0gICAgcmV0dXJuIGZpbmRfYXR0cihpZCwgYXR0cl9saXN0XzgpOwotfQotRE9NU3RyaW5nIERP
TTo6ZmluZERlZkF0dHJDT0wodXNob3J0IGlkKQotewotICAgIHJldHVybiBmaW5kX2F0dHIoaWQs
IGF0dHJfbGlzdF85KTsKLX0KLURPTVN0cmluZyBET006OmZpbmREZWZBdHRyVEgodXNob3J0IGlk
KQotewotICAgIHJldHVybiBmaW5kX2F0dHIoaWQsIGF0dHJfbGlzdF8xMCk7Ci19Ci1ET01TdHJp
bmcgRE9NOjpmaW5kRGVmQXR0ckZSQU1FKHVzaG9ydCBpZCkKLXsKLSAgICByZXR1cm4gZmluZF9h
dHRyKGlkLCBhdHRyX2xpc3RfMTEpOwotfQotRE9NU3RyaW5nIERPTTo6ZmluZERlZkF0dHJJRlJB
TUUodXNob3J0IGlkKQotewotICAgIHJldHVybiBmaW5kX2F0dHIoaWQsIGF0dHJfbGlzdF8xMik7
Ci19Ci1ET01TdHJpbmcgRE9NOjpmaW5kRGVmQXR0ckhUTUwodXNob3J0IGlkKQotewotICAgIHJl
dHVybiBmaW5kX2F0dHIoaWQsIGF0dHJfbGlzdF8xMyk7Ci19Ci0KLSNlbmRpZgpJbmRleDoga2h0
bWwvaHRtbC9kdGQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRt
bC9odG1sL2R0ZC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjUKZGlmZiAtdSAtcCAtcjEuNSBr
aHRtbC9odG1sL2R0ZC5oCi0tLSBraHRtbC9odG1sL2R0ZC5oCTEyIEFwciAyMDA1IDIyOjQ5OjQx
IC0wMDAwCTEuNQorKysga2h0bWwvaHRtbC9kdGQuaAkyNCBKdW4gMjAwNSAwMzoxMDoxMCAtMDAw
MApAQCAtMjMsMzYgKzIzLDExIEBACiAjZGVmaW5lIF9ET01fZHRkX2hfCiAKICNpbmNsdWRlICJk
b20vZG9tX3N0cmluZy5oIgotI2luY2x1ZGUgIm1pc2MvaHRtbHRhZ3MuaCIKIAogbmFtZXNwYWNl
IERPTQogewogCi12b2lkIGFkZEZvcmJpZGRlbihpbnQgdGFnSWQsIHVzaG9ydCAqZm9yYmlkZGVu
VGFncyk7Ci12b2lkIHJlbW92ZUZvcmJpZGRlbihpbnQgdGFnSWQsIHVzaG9ydCAqZm9yYmlkZGVu
VGFncyk7Ci0KLWVudW0gdGFnU3RhdHVzIHsgT1BUSU9OQUwsIFJFUVVJUkVELCBGT1JCSURERU4g
fTsKLQogYm9vbCBjaGVja0NoaWxkKHVzaG9ydCB0YWdJRCwgdXNob3J0IGNoaWxkSUQsIGJvb2wg
c3RyaWN0KTsKIAotZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIHNob3J0IHRhZ1ByaW9yaXR5QXJyYXlb
XTsKLWV4dGVybiBjb25zdCB0YWdTdGF0dXMgZW5kVGFnQXJyYXlbXTsKLQotaW5saW5lIHVuc2ln
bmVkIHNob3J0IHRhZ1ByaW9yaXR5KFFfVUlOVDMyIHRhZ0lkKQotewotICAgIC8vIFRyZWF0IGN1
c3RvbSBlbGVtZW50cyB0aGUgc2FtZSBhcyA8c3Bhbj47IGFsc28gZG9uJ3QgcmVhZCBwYXN0IHRo
ZSBlbmQgb2YgdGhlIGFycmF5LgotICAgIGlmICh0YWdJZCA+IElEX0xBU1RfVEFHKQotICAgICAg
ICByZXR1cm4gdGFnUHJpb3JpdHlBcnJheVtJRF9TUEFOXTsKLSAgICByZXR1cm4gdGFnUHJpb3Jp
dHlBcnJheVt0YWdJZF07Ci19Ci0KLWlubGluZSB0YWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQo
UV9VSU5UMzIgdGFnSWQpCi17Ci0gICAgLy8gVHJlYXQgY3VzdG9tIGVsZW1lbnRzIHRoZSBzYW1l
IGFzIDxzcGFuPjsgYWxzbyBkb24ndCByZWFkIHBhc3QgdGhlIGVuZCBvZiB0aGUgYXJyYXkuCi0g
ICAgaWYgKHRhZ0lkID4gSURfTEFTVF9UQUcpCi0gICAgICAgIHJldHVybiBlbmRUYWdBcnJheVtJ
RF9TUEFOXTsKLSAgICByZXR1cm4gZW5kVGFnQXJyYXlbdGFnSWRdOwotfQotCiB9IC8vbmFtZXNw
YWNlIERPTQogI2VuZGlmCkluZGV4OiBraHRtbC9odG1sL2h0bWxfYmFzZWltcGwuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbF9iYXNlaW1w
bC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNzIKZGlmZiAtdSAtcCAtcjEuNzIga2h0bWwv
aHRtbC9odG1sX2Jhc2VpbXBsLmNwcAotLS0ga2h0bWwvaHRtbC9odG1sX2Jhc2VpbXBsLmNwcAkx
MiBNYXkgMjAwNSAxNzoxMToyMSAtMDAwMAkxLjcyCisrKyBraHRtbC9odG1sL2h0bWxfYmFzZWlt
cGwuY3BwCTI0IEp1biAyMDA1IDAzOjEwOjExIC0wMDAwCkBAIC00OCw3ICs0OCw3IEBAIHVzaW5n
IG5hbWVzcGFjZSBET007CiB1c2luZyBuYW1lc3BhY2Uga2h0bWw7CiAKIEhUTUxCb2R5RWxlbWVu
dEltcGw6OkhUTUxCb2R5RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgICA6IEhUTUxF
bGVtZW50SW1wbChkb2MpLCBtX2xpbmtEZWNsKDApCisgICAgOiBIVE1MRWxlbWVudEltcGwoSFRN
TE5hbWVzOjpib2R5KCksIGRvYyksIG1fbGlua0RlY2woMCkKIHsKIH0KIApAQCAtNjEsMTEgKzYx
LDYgQEAgSFRNTEJvZHlFbGVtZW50SW1wbDo6fkhUTUxCb2R5RWxlbWVudEltcAogICAgIH0KIH0K
IAotTm9kZUltcGw6OklkIEhUTUxCb2R5RWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gSURfQk9EWTsKLX0KLQogdm9pZCBIVE1MQm9keUVsZW1lbnRJbXBsOjpjcmVhdGVMaW5r
RGVjbCgpCiB7CiAgICAgbV9saW5rRGVjbCA9IG5ldyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bkltcGw7CkBAIC0yODksNyArMjg0LDE4IEBAIHZvaWQgSFRNTEJvZHlFbGVtZW50SW1wbDo6c2V0
VkxpbmsoY29uc3QKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogSFRNTEZyYW1lRWxlbWVudEltcGw6
OkhUTUxGcmFtZUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0gICAgOiBIVE1MRWxlbWVu
dEltcGwoZG9jKQorICAgIDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6ZnJhbWUoKSwgZG9j
KQoreworICAgIGluaXQoKTsKK30KKworSFRNTEZyYW1lRWxlbWVudEltcGw6OkhUTUxGcmFtZUVs
ZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50UHRyICpkb2Mp
CisgICAgOiBIVE1MRWxlbWVudEltcGwodGFnTmFtZSwgZG9jKQoreworICAgIGluaXQoKTsKK30K
Kwordm9pZCBIVE1MRnJhbWVFbGVtZW50SW1wbDo6aW5pdCgpCiB7CiAgICAgbV9mcmFtZUJvcmRl
ciA9IHRydWU7CiAgICAgbV9mcmFtZUJvcmRlclNldCA9IGZhbHNlOwpAQCAtMzAzLDExICszMDks
NiBAQCBIVE1MRnJhbWVFbGVtZW50SW1wbDo6fkhUTUxGcmFtZUVsZW1lbnRJCiB7CiB9CiAKLU5v
ZGVJbXBsOjpJZCBIVE1MRnJhbWVFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVy
biBJRF9GUkFNRTsKLX0KLQogYm9vbCBIVE1MRnJhbWVFbGVtZW50SW1wbDo6aXNVUkxBbGxvd2Vk
KGNvbnN0IEF0b21pY1N0cmluZyAmVVJMU3RyaW5nKSBjb25zdAogewogICAgIGlmIChVUkxTdHJp
bmcuaXNFbXB0eSgpKSB7CkBAIC00ODIsNyArNDgzLDcgQEAgdm9pZCBIVE1MRnJhbWVFbGVtZW50
SW1wbDo6YXR0YWNoKCkKIAogICAgIC8vIGluaGVyaXQgZGVmYXVsdCBzZXR0aW5ncyBmcm9tIHBh
cmVudCBmcmFtZXNldAogICAgIGZvciAoTm9kZUltcGwgKm5vZGUgPSBwYXJlbnROb2RlKCk7IG5v
ZGU7IG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCkpCi0gICAgICAgIGlmIChub2RlLT5pZCgpID09
IElEX0ZSQU1FU0VUKSB7CisgICAgICAgIGlmIChub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
ZnJhbWVzZXQoKSkpIHsKICAgICAgICAgICAgIEhUTUxGcmFtZVNldEVsZW1lbnRJbXBsKiBmcmFt
ZXNldCA9IHN0YXRpY19jYXN0PEhUTUxGcmFtZVNldEVsZW1lbnRJbXBsKj4obm9kZSk7CiAgICAg
ICAgICAgICBpZiAoIW1fZnJhbWVCb3JkZXJTZXQpCiAgICAgICAgICAgICAgICAgbV9mcmFtZUJv
cmRlciA9IGZyYW1lc2V0LT5mcmFtZUJvcmRlcigpOwpAQCAtNjYxLDcgKzY2Miw3IEBAIHZvaWQg
SFRNTEZyYW1lRWxlbWVudEltcGw6OnNldFNyYyhjb25zdCAKIC8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
IAogSFRNTEZyYW1lU2V0RWxlbWVudEltcGw6OkhUTUxGcmFtZVNldEVsZW1lbnRJbXBsKERvY3Vt
ZW50UHRyICpkb2MpCi0gICAgOiBIVE1MRWxlbWVudEltcGwoZG9jKQorICAgIDogSFRNTEVsZW1l
bnRJbXBsKEhUTUxOYW1lczo6ZnJhbWVzZXQoKSwgZG9jKQogewogICAgIC8vIGRlZmF1bHQgdmFs
dWUgZm9yIHJvd3MgYW5kIGNvbHMuLi4KICAgICBtX3RvdGFsUm93cyA9IDE7CkBAIC02ODUsMTEg
KzY4Niw2IEBAIEhUTUxGcmFtZVNldEVsZW1lbnRJbXBsOjp+SFRNTEZyYW1lU2V0RWwKICAgICAg
ICAgZGVsZXRlIFtdIG1fY29sczsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxGcmFtZVNldEVsZW1l
bnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0ZSQU1FU0VUOwotfQotCiB2b2lk
IEhUTUxGcmFtZVNldEVsZW1lbnRJbXBsOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRy
aWJ1dGVJbXBsICphdHRyKQogewogICAgIHN3aXRjaChhdHRyLT5pZCgpKQpAQCAtNzUyLDggKzc0
OCw3IEBAIHZvaWQgSFRNTEZyYW1lU2V0RWxlbWVudEltcGw6OmF0dGFjaCgpCiAgICAgSFRNTEVs
ZW1lbnRJbXBsKiBub2RlID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsKj4ocGFyZW50Tm9k
ZSgpKTsKICAgICB3aGlsZShub2RlKQogICAgIHsKLSAgICAgICAgaWYobm9kZS0+aWQoKSA9PSBJ
RF9GUkFNRVNFVCkKLSAgICAgICAgeworICAgICAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OmZyYW1lc2V0KCkpKSB7CiAgICAgICAgICAgICBIVE1MRnJhbWVTZXRFbGVtZW50SW1w
bCogZnJhbWVzZXQgPSBzdGF0aWNfY2FzdDxIVE1MRnJhbWVTZXRFbGVtZW50SW1wbCo+KG5vZGUp
OwogICAgICAgICAgICAgaWYoIWZyYW1lQm9yZGVyU2V0KSAgZnJhbWVib3JkZXIgPSBmcmFtZXNl
dC0+ZnJhbWVCb3JkZXIoKTsKICAgICAgICAgICAgIGlmKCFub3Jlc2l6ZSkgIG5vcmVzaXplID0g
ZnJhbWVzZXQtPm5vUmVzaXplKCk7CkBAIC04MTcsNyArODEyLDcgQEAgdm9pZCBIVE1MRnJhbWVT
ZXRFbGVtZW50SW1wbDo6c2V0Um93cyhjbwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MSGVh
ZEVsZW1lbnRJbXBsOjpIVE1MSGVhZEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0gICAg
OiBIVE1MRWxlbWVudEltcGwoZG9jKQorICAgIDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6
aGVhZCgpLCBkb2MpCiB7CiB9CiAKQEAgLTgyNSwxMSArODIwLDYgQEAgSFRNTEhlYWRFbGVtZW50
SW1wbDo6fkhUTUxIZWFkRWxlbWVudEltcAogewogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTEhlYWRF
bGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9IRUFEOwotfQotCiBET01T
dHJpbmcgSFRNTEhlYWRFbGVtZW50SW1wbDo6cHJvZmlsZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IGdldEF0dHJpYnV0ZShBVFRSX1BST0ZJTEUpOwpAQCAtODQzLDcgKzgzMyw3IEBAIHZvaWQgSFRN
TEhlYWRFbGVtZW50SW1wbDo6c2V0UHJvZmlsZShjb24KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAog
SFRNTEh0bWxFbGVtZW50SW1wbDo6SFRNTEh0bWxFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9j
KQotICAgIDogSFRNTEVsZW1lbnRJbXBsKGRvYykKKyAgICA6IEhUTUxFbGVtZW50SW1wbChIVE1M
TmFtZXM6Omh0bWwoKSwgZG9jKQogewogfQogCkBAIC04NTEsMTEgKzg0MSw2IEBAIEhUTUxIdG1s
RWxlbWVudEltcGw6On5IVE1MSHRtbEVsZW1lbnRJbXAKIHsKIH0KIAotTm9kZUltcGw6OklkIEhU
TUxIdG1sRWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfSFRNTDsKLX0K
LQogRE9NU3RyaW5nIEhUTUxIdG1sRWxlbWVudEltcGw6OnZlcnNpb24oKSBjb25zdAogewogICAg
IHJldHVybiBnZXRBdHRyaWJ1dGUoQVRUUl9WRVJTSU9OKTsKQEAgLTg2OCw3ICs4NTMsNyBAQCB2
b2lkIEhUTUxIdG1sRWxlbWVudEltcGw6OnNldFZlcnNpb24oY29uCiAKIC8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KIAotSFRNTElGcmFtZUVsZW1lbnRJbXBsOjpIVE1MSUZyYW1lRWxlbWVudEltcGwoRG9j
dW1lbnRQdHIgKmRvYykgOiBIVE1MRnJhbWVFbGVtZW50SW1wbChkb2MpCitIVE1MSUZyYW1lRWxl
bWVudEltcGw6OkhUTUxJRnJhbWVFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKSA6IEhUTUxG
cmFtZUVsZW1lbnRJbXBsKEhUTUxOYW1lczo6aWZyYW1lKCksIGRvYykKIHsKICAgICBtX2ZyYW1l
Qm9yZGVyID0gZmFsc2U7CiAgICAgbV9tYXJnaW5XaWR0aCA9IC0xOwpAQCAtODgwLDExICs4NjUs
NiBAQCBIVE1MSUZyYW1lRWxlbWVudEltcGw6On5IVE1MSUZyYW1lRWxlbWVuCiB7CiB9CiAKLU5v
ZGVJbXBsOjpJZCBIVE1MSUZyYW1lRWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gSURfSUZSQU1FOwotfQotCiBib29sIEhUTUxJRnJhbWVFbGVtZW50SW1wbDo6bWFwVG9FbnRy
eShOb2RlSW1wbDo6SWQgYXR0ciwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3QK
IHsKICAgICBzd2l0Y2ggKGF0dHIpIHsKSW5kZXg6IGtodG1sL2h0bWwvaHRtbF9iYXNlaW1wbC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbF9i
YXNlaW1wbC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjI3CmRpZmYgLXUgLXAgLXIxLjI3IGto
dG1sL2h0bWwvaHRtbF9iYXNlaW1wbC5oCi0tLSBraHRtbC9odG1sL2h0bWxfYmFzZWltcGwuaAkx
MSBNYXkgMjAwNSAwNTo0OTozNCAtMDAwMAkxLjI3CisrKyBraHRtbC9odG1sL2h0bWxfYmFzZWlt
cGwuaAkyNCBKdW4gMjAwNSAwMzoxMDoxMSAtMDAwMApAQCAtMjYsNyArMjYsNiBAQAogI2lmbmRl
ZiBIVE1MX0JBU0VJTVBMX0gKICNkZWZpbmUgSFRNTF9CQVNFSU1QTF9ICiAKLSNpbmNsdWRlICJo
dG1sL2R0ZC5oIgogI2luY2x1ZGUgImh0bWwvaHRtbF9lbGVtZW50aW1wbC5oIgogI2luY2x1ZGUg
Im1pc2Mva2h0bWxsYXlvdXQuaCIKIApAQCAtNTUsOCArNTQsOSBAQCBwdWJsaWM6CiAgICAgSFRN
TEJvZHlFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKTsKICAgICB+SFRNTEJvZHlFbGVtZW50
SW1wbCgpOwogCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwotCisgICAgdmlydHVhbCBIVE1M
VGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzUmVx
dWlyZWQ7IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDEw
OyB9CisgICAgCiAgICAgdmlydHVhbCBib29sIG1hcFRvRW50cnkoTm9kZUltcGw6OklkIGF0dHIs
IE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBw
YXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICopOwogCkBAIC05MiwxMSAr
OTIsMTQgQEAgY2xhc3MgSFRNTEZyYW1lRWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTAogCiBwdWJs
aWM6CiAgICAgSFRNTEZyYW1lRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYyk7Ci0KKyAgICBI
VE1MRnJhbWVFbGVtZW50SW1wbChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVu
dFB0ciogZG9jKTsKICAgICB+SFRNTEZyYW1lRWxlbWVudEltcGwoKTsKIAotICAgIHZpcnR1YWwg
SWQgaWQoKSBjb25zdDsKKyAgICB2b2lkIGluaXQoKTsKIAorICAgIHZpcnR1YWwgSFRNTFRhZ1N0
YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c0ZvcmJpZGRl
bjsgfQorICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMDsgfQor
ICAKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRl
SW1wbCAqKTsKICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoKCk7CiAgICAgdmlydHVhbCB2b2lkIGRl
dGFjaCgpOwpAQCAtMTY4LDEwICsxNzEsMTAgQEAgY2xhc3MgSFRNTEZyYW1lU2V0RWxlbWVudElt
cGwgOiBwdWJsaWMgSAogICAgIGZyaWVuZCBjbGFzcyBraHRtbDo6UmVuZGVyRnJhbWVTZXQ7CiBw
dWJsaWM6CiAgICAgSFRNTEZyYW1lU2V0RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYyk7Ci0K
ICAgICB+SFRNTEZyYW1lU2V0RWxlbWVudEltcGwoKTsKIAotICAgIHZpcnR1YWwgSWQgaWQoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25z
dCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQorICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9y
aXR5KCkgY29uc3QgeyByZXR1cm4gMTA7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICopOwogICAgIHZpcnR1YWwgdm9pZCBhdHRh
Y2goKTsKQEAgLTIxNiwxMCArMjE5LDEwIEBAIGNsYXNzIEhUTUxIZWFkRWxlbWVudEltcGwgOiBw
dWJsaWMgSFRNTEUKIHsKIHB1YmxpYzoKICAgICBIVE1MSGVhZEVsZW1lbnRJbXBsKERvY3VtZW50
UHRyICpkb2MpOwotCiAgICAgfkhUTUxIZWFkRWxlbWVudEltcGwoKTsKIAotICAgIHZpcnR1YWwg
SWQgaWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1l
bnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNPcHRpb25hbDsgfQorICAgIHZpcnR1YWwgaW50
IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMTA7IH0KIAogICAgIERPTVN0cmluZyBwcm9m
aWxlKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRQcm9maWxlKGNvbnN0IERPTVN0cmluZyAmKTsKQEAg
LTIzMyw3ICsyMzYsOCBAQCBwdWJsaWM6CiAgICAgSFRNTEh0bWxFbGVtZW50SW1wbChEb2N1bWVu
dFB0ciAqZG9jKTsKICAgICB+SFRNTEh0bWxFbGVtZW50SW1wbCgpOwogCi0gICAgdmlydHVhbCBJ
ZCBpZCgpIGNvbnN0OworICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVu
dCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9CisgICAgdmlydHVhbCBpbnQg
dGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAxMTsgfQogCiAgICAgRE9NU3RyaW5nIHZlcnNp
b24oKSBjb25zdDsKICAgICB2b2lkIHNldFZlcnNpb24oY29uc3QgRE9NU3RyaW5nICYpOwpAQCAt
MjQ2LDEwICsyNTAsMTAgQEAgY2xhc3MgSFRNTElGcmFtZUVsZW1lbnRJbXBsIDogcHVibGljIEhU
TQogewogcHVibGljOgogICAgIEhUTUxJRnJhbWVFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9j
KTsKLQogICAgIH5IVE1MSUZyYW1lRWxlbWVudEltcGwoKTsKIAotICAgIHZpcnR1YWwgSWQgaWQo
KSBjb25zdDsKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBj
b25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQorICAgIHZpcnR1YWwgaW50IHRhZ1By
aW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMTsgfQogCiAgICAgdmlydHVhbCBib29sIG1hcFRvRW50
cnkoTm9kZUltcGw6OklkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0
OwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJ
bXBsICphdHRyKTsKSW5kZXg6IGtodG1sL2h0bWwvaHRtbF9ibG9ja2ltcGwuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbF9ibG9ja2ltcGwu
Y3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE3CmRpZmYgLXUgLXAgLXIxLjE3IGtodG1sL2h0
bWwvaHRtbF9ibG9ja2ltcGwuY3BwCi0tLSBraHRtbC9odG1sL2h0bWxfYmxvY2tpbXBsLmNwcAkx
MSBNYXkgMjAwNSAwNTo0OTozNCAtMDAwMAkxLjE3CisrKyBraHRtbC9odG1sL2h0bWxfYmxvY2tp
bXBsLmNwcAkyNCBKdW4gMjAwNSAwMzoxMDoxMSAtMDAwMApAQCAtMzcsNyArMzcsNyBAQCB1c2lu
ZyBuYW1lc3BhY2Uga2h0bWw7CiB1c2luZyBuYW1lc3BhY2UgRE9NOwogCiBIVE1MQmxvY2txdW90
ZUVsZW1lbnRJbXBsOjpIVE1MQmxvY2txdW90ZUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2Mp
Ci0gICAgOiBIVE1MRWxlbWVudEltcGwoZG9jKQorICAgIDogSFRNTEVsZW1lbnRJbXBsKEhUTUxO
YW1lczo6YmxvY2txdW90ZSgpLCBkb2MpCiB7CiB9CiAKQEAgLTQ1LDExICs0NSw2IEBAIEhUTUxC
bG9ja3F1b3RlRWxlbWVudEltcGw6On5IVE1MQmxvY2txdW8KIHsKIH0KIAotTm9kZUltcGw6Oklk
IEhUTUxCbG9ja3F1b3RlRWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURf
QkxPQ0tRVU9URTsKLX0KLQogRE9NU3RyaW5nIEhUTUxCbG9ja3F1b3RlRWxlbWVudEltcGw6OmNp
dGUoKSBjb25zdAogewogICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoQVRUUl9DSVRFKTsKQEAgLTYz
LDcgKzU4LDcgQEAgdm9pZCBIVE1MQmxvY2txdW90ZUVsZW1lbnRJbXBsOjpzZXRDaXRlKAogLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MRGl2RWxlbWVudEltcGw6OkhUTUxEaXZFbGVtZW50SW1w
bChEb2N1bWVudFB0ciAqZG9jKQotICAgIDogSFRNTEVsZW1lbnRJbXBsKGRvYykKKyAgICA6IEhU
TUxFbGVtZW50SW1wbChIVE1MTmFtZXM6OmRpdigpLCBkb2MpCiB7CiB9CiAKQEAgLTcxLDExICs2
Niw2IEBAIEhUTUxEaXZFbGVtZW50SW1wbDo6fkhUTUxEaXZFbGVtZW50SW1wbCgKIHsKIH0KIAot
Tm9kZUltcGw6OklkIEhUTUxEaXZFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVy
biBJRF9ESVY7Ci19Ci0KIGJvb2wgSFRNTERpdkVsZW1lbnRJbXBsOjptYXBUb0VudHJ5KE5vZGVJ
bXBsOjpJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdAogewogICAg
IGlmIChhdHRyID09IEFUVFJfQUxJR04pIHsKQEAgLTEyMCw3ICsxMTAsNyBAQCB2b2lkIEhUTUxE
aXZFbGVtZW50SW1wbDo6c2V0QWxpZ24oY29uc3QgCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhU
TUxIUkVsZW1lbnRJbXBsOjpIVE1MSFJFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAg
IDogSFRNTEVsZW1lbnRJbXBsKGRvYykKKyAgICA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6
OmhyKCksIGRvYykKIHsKIH0KIApAQCAtMTI4LDExICsxMTgsNiBAQCBIVE1MSFJFbGVtZW50SW1w
bDo6fkhUTUxIUkVsZW1lbnRJbXBsKCkKIHsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxIUkVsZW1l
bnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0hSOwotfQotCiBib29sIEhUTUxI
UkVsZW1lbnRJbXBsOjptYXBUb0VudHJ5KE5vZGVJbXBsOjpJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1
dGVFbnRyeSYgcmVzdWx0KSBjb25zdAogewogICAgIHN3aXRjaCAoYXR0cikgewpAQCAtMjUyLDgg
KzIzNyw4IEBAIHZvaWQgSFRNTEhSRWxlbWVudEltcGw6OnNldFdpZHRoKGNvbnN0IEQKIAogLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQogCi1IVE1MSGVhZGluZ0VsZW1lbnRJbXBsOjpIVE1MSGVhZGluZ0Vs
ZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIHVzaG9ydCBfdGFnaWQpCi0gICAgOiBIVE1MR2Vu
ZXJpY0VsZW1lbnRJbXBsKGRvYywgX3RhZ2lkKQorSFRNTEhlYWRpbmdFbGVtZW50SW1wbDo6SFRN
TEhlYWRpbmdFbGVtZW50SW1wbChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVu
dFB0ciAqZG9jKQorICAgIDogSFRNTEVsZW1lbnRJbXBsKHRhZ05hbWUsIGRvYykKIHsKIH0KIApA
QCAtMjcwLDEzICsyNTUsOCBAQCB2b2lkIEhUTUxIZWFkaW5nRWxlbWVudEltcGw6OnNldEFsaWdu
KGNvCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxQYXJhZ3JhcGhFbGVtZW50SW1wbDo6SFRN
TFBhcmFncmFwaEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0gICAgOiBIVE1MRWxlbWVu
dEltcGwoZG9jKQotewotfQotCi1Ob2RlSW1wbDo6SWQgSFRNTFBhcmFncmFwaEVsZW1lbnRJbXBs
OjppZCgpIGNvbnN0CisgICAgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjpwKCksIGRvYykK
IHsKLSAgICByZXR1cm4gSURfUDsKIH0KIAogYm9vbCBIVE1MUGFyYWdyYXBoRWxlbWVudEltcGw6
Om1hcFRvRW50cnkoTm9kZUltcGw6OklkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1
bHQpIGNvbnN0CkBAIC0zMjIsOCArMzAyLDggQEAgdm9pZCBIVE1MUGFyYWdyYXBoRWxlbWVudElt
cGw6OnNldEFsaWduKAogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUhUTUxQcmVFbGVtZW50SW1w
bDo6SFRNTFByZUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIHVuc2lnbmVkIHNob3J0IF90
YWdpZCkKLSAgICA6IEhUTUxHZW5lcmljRWxlbWVudEltcGwoZG9jLCBfdGFnaWQpCitIVE1MUHJl
RWxlbWVudEltcGw6OkhUTUxQcmVFbGVtZW50SW1wbChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdO
YW1lLCBEb2N1bWVudFB0ciAqZG9jKQorICAgIDogSFRNTEVsZW1lbnRJbXBsKHRhZ05hbWUsIGRv
YykKIHsKIH0KIApAQCAtMzQzLDE2ICszMjMsMTEgQEAgdm9pZCBIVE1MUHJlRWxlbWVudEltcGw6
OnNldFdpZHRoKGxvbmcgdwogY29uc3QgaW50IGRlZmF1bHRNaW5pbXVtRGVsYXkgPSA2MDsKIAog
SFRNTE1hcnF1ZWVFbGVtZW50SW1wbDo6SFRNTE1hcnF1ZWVFbGVtZW50SW1wbChEb2N1bWVudFB0
ciAqZG9jKQotOiBIVE1MRWxlbWVudEltcGwoZG9jKSwKKzogSFRNTEVsZW1lbnRJbXBsKEhUTUxO
YW1lczo6bWFycXVlZSgpLCBkb2MpLAogICBtX21pbmltdW1EZWxheShkZWZhdWx0TWluaW11bURl
bGF5KQogewogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTE1hcnF1ZWVFbGVtZW50SW1wbDo6aWQoKSBj
b25zdAotewotICAgIHJldHVybiBJRF9NQVJRVUVFOwotfQotCiBib29sIEhUTUxNYXJxdWVlRWxl
bWVudEltcGw6Om1hcFRvRW50cnkoTm9kZUltcGw6OklkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVu
dHJ5JiByZXN1bHQpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChhdHRyKSB7CkBAIC00MzQsMTkgKzQw
OSwzIEBAIHZvaWQgSFRNTE1hcnF1ZWVFbGVtZW50SW1wbDo6cGFyc2VNYXBwZWQKICAgICAgICAg
ICAgIEhUTUxFbGVtZW50SW1wbDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CiAgICAgfQog
fQotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotSFRNTExheWVyRWxlbWVudEltcGw6OkhUTUxMYXll
ckVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0gICAgOiBIVE1MRGl2RWxlbWVudEltcGwo
IGRvYyApCi17Ci19Ci0KLUhUTUxMYXllckVsZW1lbnRJbXBsOjp+SFRNTExheWVyRWxlbWVudElt
cGwoKQotewotfQotCi1Ob2RlSW1wbDo6SWQgSFRNTExheWVyRWxlbWVudEltcGw6OmlkKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gSURfTEFZRVI7Ci19CkluZGV4OiBraHRtbC9odG1sL2h0bWxfYmxv
Y2tpbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRt
bC9odG1sX2Jsb2NraW1wbC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjkKZGlmZiAtdSAtcCAt
cjEuOSBraHRtbC9odG1sL2h0bWxfYmxvY2tpbXBsLmgKLS0tIGtodG1sL2h0bWwvaHRtbF9ibG9j
a2ltcGwuaAkxMSBNYXkgMjAwNSAwNTo0OTozNCAtMDAwMAkxLjkKKysrIGtodG1sL2h0bWwvaHRt
bF9ibG9ja2ltcGwuaAkyNCBKdW4gMjAwNSAwMzoxMDoxMSAtMDAwMApAQCAtMjYsNyArMjYsNiBA
QAogI2RlZmluZSBIVE1MX0JMT0NLSU1QTF9ICiAKICNpbmNsdWRlICJodG1sX2VsZW1lbnRpbXBs
LmgiCi0jaW5jbHVkZSAiZHRkLmgiCiAKIG5hbWVzcGFjZSBET00gewogCkBAIC00MCw4ICszOSw5
IEBAIHB1YmxpYzoKICAgICBIVE1MQmxvY2txdW90ZUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpk
b2MpOwogICAgIH5IVE1MQmxvY2txdW90ZUVsZW1lbnRJbXBsKCk7CiAKLSAgICB2aXJ0dWFsIElk
IGlkKCkgY29uc3Q7Ci0KKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1l
bnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQorICAgIHZpcnR1YWwgaW50
IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gNTsgfQorICAgIAogICAgIERPTVN0cmluZyBj
aXRlKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRDaXRlKGNvbnN0IERPTVN0cmluZyAmKTsKIH07CkBA
IC01NSw4ICs1NSw5IEBAIGNsYXNzIEhUTUxEaXZFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MRWwK
IHB1YmxpYzoKICAgICBIVE1MRGl2RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYyk7CiAgICAg
fkhUTUxEaXZFbGVtZW50SW1wbCgpOwotCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OworICAg
IAorICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsg
cmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHko
KSBjb25zdCB7IHJldHVybiA1OyB9CiAgICAgCiAgICAgdmlydHVhbCBib29sIG1hcFRvRW50cnko
SWQgYXR0ciwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3Q7CiAgICAgdmlydHVh
bCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKnRva2VuKTsK
QEAgLTcyLDggKzczLDkgQEAgY2xhc3MgSFRNTEhSRWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTEVs
ZQogcHVibGljOgogICAgIEhUTUxIUkVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpOwogICAg
IH5IVE1MSFJFbGVtZW50SW1wbCgpOwotCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OworICAg
IAorICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsg
cmV0dXJuIFRhZ1N0YXR1c0ZvcmJpZGRlbjsgfQorICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5
KCkgY29uc3QgeyByZXR1cm4gMDsgfQogICAgIAogICAgIHZpcnR1YWwgYm9vbCBtYXBUb0VudHJ5
KElkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0OwogICAgIHZpcnR1
YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICopOwpAQCAt
OTMsMTAgKzk1LDEzIEBAIHB1YmxpYzoKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1jbGFzcyBI
VE1MSGVhZGluZ0VsZW1lbnRJbXBsIDogcHVibGljIEhUTUxHZW5lcmljRWxlbWVudEltcGwKK2Ns
YXNzIEhUTUxIZWFkaW5nRWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTEVsZW1lbnRJbXBsCiB7CiBw
dWJsaWM6Ci0gICAgSFRNTEhlYWRpbmdFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCB1c2hv
cnQgX3RhZ2lkKTsKKyAgICBIVE1MSGVhZGluZ0VsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5h
bWUmIHRhZ05hbWUsIERvY3VtZW50UHRyICpkb2MpOworCisgICAgdmlydHVhbCBIVE1MVGFnU3Rh
dHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzUmVxdWlyZWQ7
IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDU7IH0KIAog
ICAgIERPTVN0cmluZyBhbGlnbigpIGNvbnN0OwogICAgIHZvaWQgc2V0QWxpZ24oY29uc3QgRE9N
U3RyaW5nICYpOwpAQCAtMTA0LDIxICsxMDksMTYgQEAgcHVibGljOgogCiAvLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCiAKLS8qCi0gKiB3ZXJlIG5vdCB1c2luZyBIVE1MRWxlbWVudEltcGwgYXMgcGFyZW50
IGNsYXNzLCBzaW5jZSBhCi0gKiBwYXJhZ3JhcGggc2hvdWxkIGJlIGFibGUgdG8gZmxvdyBhcm91
bmQgYWxpZ25lZCBvYmplY3RzLiBUaHVzCi0gKiBhIDxwPiBlbGVtZW50IGhhcyB0byBiZSBpbmxp
bmUsIGFuZCBpcyByZW5kZXJlZCBieQotICogSFRNTEJsb2NrSW1wbDo6Y2FsY1BhcmFncmFwaAot
ICovCiBjbGFzcyBIVE1MUGFyYWdyYXBoRWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTEVsZW1lbnRJ
bXBsCiB7CiBwdWJsaWM6CiAgICAgSFRNTFBhcmFncmFwaEVsZW1lbnRJbXBsKERvY3VtZW50UHRy
ICpkb2MpOwogCisgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkg
Y29uc3QgeyByZXR1cm4gVGFnU3RhdHVzT3B0aW9uYWw7IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQ
cmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDM7IH0KKyAgICAKICAgICB2aXJ0dWFsIGJvb2wgbWFw
VG9FbnRyeShJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdDsKICAg
ICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAq
YXR0cik7Ci0gICAgCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwogCiAgICAgRE9NU3RyaW5n
IGFsaWduKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRBbGlnbihjb25zdCBET01TdHJpbmcgJik7CkBA
IC0xMjYsMTMgKzEyNiwxNiBAQCBwdWJsaWM6CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotY2xh
c3MgSFRNTFByZUVsZW1lbnRJbXBsIDogcHVibGljIEhUTUxHZW5lcmljRWxlbWVudEltcGwKK2Ns
YXNzIEhUTUxQcmVFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MRWxlbWVudEltcGwKIHsKIHB1Ymxp
YzoKLSAgICBIVE1MUHJlRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgdXNob3J0IF90YWdp
ZCk7CisgICAgSFRNTFByZUVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUs
IERvY3VtZW50UHRyICpkb2MpOworCisgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1Jl
cXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzUmVxdWlyZWQ7IH0KKyAgICB2aXJ0
dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDU7IH0KIAogICAgIGxvbmcgd2lk
dGgoKSBjb25zdDsKLSAgICB2b2lkIHNldFdpZHRoKCBsb25nIHcgKTsKKyAgICB2b2lkIHNldFdp
ZHRoKGxvbmcgdyk7CiB9OwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xNDEsOSArMTQ0LDEw
IEBAIGNsYXNzIEhUTUxNYXJxdWVlRWxlbWVudEltcGwgOiBwdWJsaWMgSFQKIHsKIHB1YmxpYzoK
ICAgICBIVE1MTWFycXVlZUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpOwotCi0gICAgdmly
dHVhbCBJZCBpZCgpIGNvbnN0OwogICAgIAorICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRU
YWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9CisgICAg
dmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAzOyB9CisKICAgICB2aXJ0
dWFsIGJvb2wgbWFwVG9FbnRyeShJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0
KSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0
cmlidXRlSW1wbCAqdG9rZW4pOwogCkBAIC0xNTMsMTggKzE1Nyw1IEBAIHByaXZhdGU6CiAgICAg
aW50IG1fbWluaW11bURlbGF5OwogfTsKIAotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBI
VE1MTGF5ZXJFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MRGl2RWxlbWVudEltcGwKLXsKLXB1Ymxp
YzoKLSAgICBIVE1MTGF5ZXJFbGVtZW50SW1wbCggRG9jdW1lbnRQdHIgKmRvYyApOwotICAgIH5I
VE1MTGF5ZXJFbGVtZW50SW1wbCgpOwotCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwotCi0g
ICAgYm9vbCBmaXhlZDsKLX07Ci0KIH07IC8vbmFtZXNwYWNlCiAjZW5kaWYKSW5kZXg6IGtodG1s
L2h0bWwvaHRtbF9jYW52YXNpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3Qv
V2ViQ29yZS9raHRtbC9odG1sL2h0bWxfY2FudmFzaW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuMwpkaWZmIC11IC1wIC1yMS4zIGtodG1sL2h0bWwvaHRtbF9jYW52YXNpbXBsLmNwcAot
LS0ga2h0bWwvaHRtbC9odG1sX2NhbnZhc2ltcGwuY3BwCTExIE1heSAyMDA1IDA1OjQ5OjM0IC0w
MDAwCTEuMworKysga2h0bWwvaHRtbC9odG1sX2NhbnZhc2ltcGwuY3BwCTI0IEp1biAyMDA1IDAz
OjEwOjEyIC0wMDAwCkBAIC02MywxMSArNjMsNiBAQCBIVE1MQ2FudmFzRWxlbWVudEltcGw6On5I
VE1MQ2FudmFzRWxlbWVuCiB7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MQ2FudmFzRWxlbWVudElt
cGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfQ0FOVkFTOwotfQotCiBib29sIEhUTUxD
YW52YXNFbGVtZW50SW1wbDo6bWFwVG9FbnRyeShOb2RlSW1wbDo6SWQgYXR0ciwgTWFwcGVkQXR0
cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3QKIHsKICAgICByZXR1cm4gSFRNTEltYWdlRWxlbWVu
dEltcGw6Om1hcFRvRW50cnkoYXR0ciwgcmVzdWx0KTsKSW5kZXg6IGtodG1sL2h0bWwvaHRtbF9j
YW52YXNpbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwv
aHRtbC9odG1sX2NhbnZhc2ltcGwuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yCmRpZmYgLXUg
LXAgLXIxLjIga2h0bWwvaHRtbC9odG1sX2NhbnZhc2ltcGwuaAotLS0ga2h0bWwvaHRtbC9odG1s
X2NhbnZhc2ltcGwuaAkxMSBNYXkgMjAwNSAwNTo0OTozNCAtMDAwMAkxLjIKKysrIGtodG1sL2h0
bWwvaHRtbF9jYW52YXNpbXBsLmgJMjQgSnVuIDIwMDUgMDM6MTA6MTIgLTAwMDAKQEAgLTQzLDEx
ICs0Myw4IEBAIGNsYXNzIEhUTUxDYW52YXNFbGVtZW50SW1wbAogewogcHVibGljOgogICAgIEhU
TUxDYW52YXNFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKTsKLQogICAgIH5IVE1MQ2FudmFz
RWxlbWVudEltcGwoKTsKIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKLQogICAgIHZpcnR1
YWwgYm9vbCBtYXBUb0VudHJ5KE5vZGVJbXBsOjpJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRy
eSYgcmVzdWx0KSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUo
TWFwcGVkQXR0cmlidXRlSW1wbCAqKTsKIApJbmRleDoga2h0bWwvaHRtbC9odG1sX2RvY3VtZW50
aW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRt
bC9odG1sX2RvY3VtZW50aW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNjAKZGlmZiAt
dSAtcCAtcjEuNjAga2h0bWwvaHRtbC9odG1sX2RvY3VtZW50aW1wbC5jcHAKLS0tIGtodG1sL2h0
bWwvaHRtbF9kb2N1bWVudGltcGwuY3BwCTExIE1heSAyMDA1IDAwOjU4OjI4IC0wMDAwCTEuNjAK
KysrIGtodG1sL2h0bWwvaHRtbF9kb2N1bWVudGltcGwuY3BwCTI0IEp1biAyMDA1IDAzOjEwOjEy
IC0wMDAwCkBAIC02MCw2ICs2MCw3IEBACiAjaW5jbHVkZSAiaHRtbC9odG1sX21pc2NpbXBsLmgi
CiAjaW5jbHVkZSAiaHRtbC9odG1sX2ltYWdlaW1wbC5oIgogI2luY2x1ZGUgImh0bWwvaHRtbF9m
b3JtaW1wbC5oIgorI2luY2x1ZGUgImh0bWxmYWN0b3J5LmgiCiAKICNpbmNsdWRlICJraHRtbHZp
ZXcuaCIKICNpbmNsdWRlICJraHRtbF9wYXJ0LmgiCkBAIC0yNDYsMTIgKzI0NywxNyBAQCBUb2tl
bml6ZXIgKkhUTUxEb2N1bWVudEltcGw6OmNyZWF0ZVRva2VuCiBib29sIEhUTUxEb2N1bWVudElt
cGw6OmNoaWxkQWxsb3dlZCggTm9kZUltcGwgKm5ld0NoaWxkICkKIHsKICAgICAvLyAjIyMgc3Vw
cG9ydCBjb21tZW50cy4gZXRjIGFzIGEgY2hpbGQKLSAgICByZXR1cm4gKG5ld0NoaWxkLT5pZCgp
ID09IElEX0hUTUwgfHwgbmV3Q2hpbGQtPmlkKCkgPT0gSURfQ09NTUVOVCk7CisgICAgcmV0dXJu
IChuZXdDaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omh0bWwoKSkgfHwgbmV3Q2hpbGQtPmlz
Q29tbWVudE5vZGUoKSk7CiB9CiAKIEVsZW1lbnRJbXBsICpIVE1MRG9jdW1lbnRJbXBsOjpjcmVh
dGVFbGVtZW50KCBjb25zdCBET01TdHJpbmcgJm5hbWUsIGludCAmZXhjZXB0aW9uY29kZSApCiB7
Ci0gICAgcmV0dXJuIGNyZWF0ZUhUTUxFbGVtZW50KG5hbWUsIGV4Y2VwdGlvbmNvZGUpOworICAg
IGlmICghaXNWYWxpZE5hbWUobmFtZSkpIHsKKyAgICAgICAgZXhjZXB0aW9uY29kZSA9IERPTUV4
Y2VwdGlvbjo6SU5WQUxJRF9DSEFSQUNURVJfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9
CisKKyAgICByZXR1cm4gSFRNTEVsZW1lbnRGYWN0b3J5OjpjcmVhdGVIVE1MRWxlbWVudChBdG9t
aWNTdHJpbmcobmFtZSksIHRoaXMsIDAsIGZhbHNlKTsKIH0KIAogdm9pZCBIVE1MRG9jdW1lbnRJ
bXBsOjpzbG90SGlzdG9yeUNoYW5nZWQoKQpJbmRleDoga2h0bWwvaHRtbC9odG1sX2RvY3VtZW50
aW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwv
aHRtbF9kb2N1bWVudGltcGwuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yOQpkaWZmIC11IC1w
IC1yMS4yOSBraHRtbC9odG1sL2h0bWxfZG9jdW1lbnRpbXBsLmgKLS0tIGtodG1sL2h0bWwvaHRt
bF9kb2N1bWVudGltcGwuaAkxMSBNYXkgMjAwNSAwMDo1ODoyOCAtMDAwMAkxLjI5CisrKyBraHRt
bC9odG1sL2h0bWxfZG9jdW1lbnRpbXBsLmgJMjQgSnVuIDIwMDUgMDM6MTA6MTIgLTAwMDAKQEAg
LTM0LDcgKzM0LDcgQEAgY2xhc3MgUVN0cmluZzsKIAogbmFtZXNwYWNlIERPTSB7CiAKLSAgICBj
bGFzcyBIVE1MRWxlbWVudEltcGw7CitjbGFzcyBIVE1MRWxlbWVudEltcGw7CiAKIGNsYXNzIEhU
TUxEb2N1bWVudEltcGwgOiBwdWJsaWMgRE9NOjpEb2N1bWVudEltcGwsIHB1YmxpYyBraHRtbDo6
Q2FjaGVkT2JqZWN0Q2xpZW50CiB7CkluZGV4OiBraHRtbC9odG1sL2h0bWxfZWxlbWVudGltcGwu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRt
bF9lbGVtZW50aW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuODcKZGlmZiAtdSAtcCAt
cjEuODcga2h0bWwvaHRtbC9odG1sX2VsZW1lbnRpbXBsLmNwcAotLS0ga2h0bWwvaHRtbC9odG1s
X2VsZW1lbnRpbXBsLmNwcAkxMyBNYXkgMjAwNSAxNjo0ODo1MSAtMDAwMAkxLjg3CisrKyBraHRt
bC9odG1sL2h0bWxfZWxlbWVudGltcGwuY3BwCTI0IEp1biAyMDA1IDAzOjEwOjEzIC0wMDAwCkBA
IC0yOCwxMCArMjgsMTAgQEAKIC8vI2RlZmluZSBFVkVOVF9ERUJVRwogLy8jZGVmaW5lIFVOU1VQ
UE9SVEVEX0FUVFIKIAotI2luY2x1ZGUgImh0bWwvZHRkLmgiCiAjaW5jbHVkZSAiaHRtbC9odG1s
X2VsZW1lbnRpbXBsLmgiCiAjaW5jbHVkZSAiaHRtbC9odG1sX2RvY3VtZW50aW1wbC5oIgogI2lu
Y2x1ZGUgImh0bWwvaHRtbHRva2VuaXplci5oIgorI2luY2x1ZGUgImh0bWxmYWN0b3J5LmgiCiAK
ICNpbmNsdWRlICJtaXNjL2h0bWxoYXNoZXMuaCIKICNpbmNsdWRlICJlZGl0aW5nL3Zpc2libGVf
dGV4dC5oIgpAQCAtNTgsOCArNTgsOCBAQCB1c2luZyBuYW1lc3BhY2Uga2h0bWw7CiAKIC8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQogCi1IVE1MRWxlbWVudEltcGw6OkhUTUxFbGVtZW50SW1wbChEb2N1bWVudFB0ciAq
ZG9jKQotICAgIDogU3R5bGVkRWxlbWVudEltcGwoZG9jKQorSFRNTEVsZW1lbnRJbXBsOjpIVE1M
RWxlbWVudEltcGwoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnRQdHIgKmRv
YykKKyAgICA6IFN0eWxlZEVsZW1lbnRJbXBsKHRhZ05hbWUsIGRvYykKIHsKIH0KIApAQCAtNjcs
NTEgKzY3LDMxIEBAIEhUTUxFbGVtZW50SW1wbDo6fkhUTUxFbGVtZW50SW1wbCgpCiB7CiB9CiAK
LWJvb2wgSFRNTEVsZW1lbnRJbXBsOjppc0lubGluZSgpIGNvbnN0CitIVE1MVGFnU3RhdHVzIEhU
TUxFbGVtZW50SW1wbDo6ZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdAogewotICAgIGlmIChyZW5k
ZXJlcigpKQotICAgICAgICByZXR1cm4gRWxlbWVudEltcGw6OmlzSW5saW5lKCk7Ci0gICAgCi0g
ICAgc3dpdGNoKGlkKCkpIHsKLSAgICAgICAgY2FzZSBJRF9BOgotICAgICAgICBjYXNlIElEX0ZP
TlQ6Ci0gICAgICAgIGNhc2UgSURfVFQ6Ci0gICAgICAgIGNhc2UgSURfVToKLSAgICAgICAgY2Fz
ZSBJRF9COgotICAgICAgICBjYXNlIElEX0k6Ci0gICAgICAgIGNhc2UgSURfUzoKLSAgICAgICAg
Y2FzZSBJRF9TVFJJS0U6Ci0gICAgICAgIGNhc2UgSURfQklHOgotICAgICAgICBjYXNlIElEX1NN
QUxMOgotICAgIAotICAgICAgICAgICAgLy8gJXBocmFzZQotICAgICAgICBjYXNlIElEX0VNOgot
ICAgICAgICBjYXNlIElEX1NUUk9ORzoKLSAgICAgICAgY2FzZSBJRF9ERk46Ci0gICAgICAgIGNh
c2UgSURfQ09ERToKLSAgICAgICAgY2FzZSBJRF9TQU1QOgotICAgICAgICBjYXNlIElEX0tCRDoK
LSAgICAgICAgY2FzZSBJRF9WQVI6Ci0gICAgICAgIGNhc2UgSURfQ0lURToKLSAgICAgICAgY2Fz
ZSBJRF9BQkJSOgotICAgICAgICBjYXNlIElEX0FDUk9OWU06Ci0gICAgCi0gICAgICAgICAgICAv
LyAlc3BlY2lhbAotICAgICAgICBjYXNlIElEX1NVQjoKLSAgICAgICAgY2FzZSBJRF9TVVA6Ci0g
ICAgICAgIGNhc2UgSURfU1BBTjoKLSAgICAgICAgY2FzZSBJRF9OT0JSOgotICAgICAgICBjYXNl
IElEX1dCUjoKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgCi0gICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gRWxlbWVudEltcGw6OmlzSW5saW5lKCk7Ci0g
ICAgfQorICAgIGlmIChoYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpkdCgpKSB8fCBoYXNMb2NhbE5h
bWUoSFRNTE5hbWVzOjpkZCgpKSkKKyAgICAgICAgcmV0dXJuIFRhZ1N0YXR1c09wdGlvbmFsOwor
CisgICAgLy8gU2FtZSB2YWx1ZXMgYXMgPHNwYW4+LiAgVGhpcyB3YXkgY3VzdG9tIHRhZyBuYW1l
IGVsZW1lbnRzIHdpbGwgYmVoYXZlIGxpa2UgaW5saW5lIHNwYW5zLgorICAgIHJldHVybiBUYWdT
dGF0dXNSZXF1aXJlZDsKK30KKworaW50IEhUTUxFbGVtZW50SW1wbDo6dGFnUHJpb3JpdHkoKSBj
b25zdAoreworICAgIGlmIChoYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjphZGRyZXNzKCkpIHx8IGhh
c0xvY2FsTmFtZShIVE1MTmFtZXM6OmRkKCkpIHx8IGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmR0
KCkpIHx8IGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om5vc2NyaXB0KCkpKQorICAgICAgICByZXR1
cm4gMzsKKyAgICBpZiAoaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6Y2VudGVyKCkpIHx8IGhhc0xv
Y2FsTmFtZShIVE1MTmFtZXM6Om5vYnIoKSkpCisgICAgICAgIHJldHVybiA1OworICAgIGlmICho
YXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpub2VtYmVkKCkpIHx8IGhhc0xvY2FsTmFtZShIVE1MTmFt
ZXM6Om5vZnJhbWVzKCkpKQorICAgICAgICByZXR1cm4gMTA7CisKKyAgICAvLyBTYW1lIHZhbHVl
cyBhcyA8c3Bhbj4uICBUaGlzIHdheSBjdXN0b20gdGFnIG5hbWUgZWxlbWVudHMgd2lsbCBiZWhh
dmUgbGlrZSBpbmxpbmUgc3BhbnMuCisgICAgcmV0dXJuIDE7CiB9CiAKIE5vZGVJbXBsICpIVE1M
RWxlbWVudEltcGw6OmNsb25lTm9kZShib29sIGRlZXApCiB7Ci0gICAgSFRNTEVsZW1lbnRJbXBs
ICpjbG9uZSA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCAqPihnZXREb2N1bWVudCgpLT5j
cmVhdGVIVE1MRWxlbWVudChsb2NhbE5hbWVQYXJ0KGlkKCkpKSk7CisgICAgSFRNTEVsZW1lbnRJ
bXBsICpjbG9uZSA9IEhUTUxFbGVtZW50RmFjdG9yeTo6Y3JlYXRlSFRNTEVsZW1lbnQobG9jYWxO
YW1lKCksIGdldERvY3VtZW50KCksIDAsIGZhbHNlKTsKICAgICBpZiAoIWNsb25lKQogICAgICAg
ICByZXR1cm4gMDsKIApAQCAtMzI1LDI2ICszMDUsMTcgQEAgRE9NU3RyaW5nIEhUTUxFbGVtZW50
SW1wbDo6b3V0ZXJUZXh0KCkgYwogRG9jdW1lbnRGcmFnbWVudEltcGwgKkhUTUxFbGVtZW50SW1w
bDo6Y3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KGNvbnN0IERPTVN0cmluZyAmaHRtbCkKIHsKICAg
ICAvLyB0aGUgZm9sbG93aW5nIGlzIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgZGVmaW5pdGlvbiBh
cyB1c2VkIGJ5IElFCi0gICAgaWYoIGVuZFRhZ1JlcXVpcmVtZW50KGlkKCkpID09IEZPUkJJRERF
TiApCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIC8vIElFIGRpc2FsbG93cyBpbm5lckhUTUwg
b24gaW5saW5lIGVsZW1lbnRzLiBJIGRvbid0IHNlZSB3aHkgd2Ugc2hvdWxkIGhhdmUgdGhpcyBy
ZXN0cmljdGlvbiwgYXMgb3VyCi0gICAgLy8gZGh0bWwgZW5naW5lIGNhbiBjb3BlIHdpdGggaXQu
IExhcnMKLSAgICAvL2lmICggaXNJbmxpbmUoKSApIHJldHVybiBmYWxzZTsKLSAgICBzd2l0Y2go
IGlkKCkgKSB7Ci0gICAgICAgIGNhc2UgSURfQ09MOgotICAgICAgICBjYXNlIElEX0NPTEdST1VQ
OgotICAgICAgICBjYXNlIElEX0ZSQU1FU0VUOgotICAgICAgICBjYXNlIElEX0hFQUQ6Ci0gICAg
ICAgIGNhc2UgSURfU1RZTEU6Ci0gICAgICAgIGNhc2UgSURfVElUTEU6Ci0gICAgICAgICAgICBy
ZXR1cm4gTlVMTDsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0K
LSAgICBpZiAoICFnZXREb2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpICkKLSAgICAgICAgcmV0
dXJuIE5VTEw7CisgICAgaWYgKGVuZFRhZ1JlcXVpcmVtZW50KCkgPT0gVGFnU3RhdHVzRm9yYmlk
ZGVuKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChoYXNMb2NhbE5hbWUoSFRNTE5hbWVz
Ojpjb2woKSkgfHwgaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6Y29sZ3JvdXAoKSkgfHwgaGFzTG9j
YWxOYW1lKEhUTUxOYW1lczo6ZnJhbWVzZXQoKSkgfHwKKyAgICAgICAgaGFzTG9jYWxOYW1lKEhU
TUxOYW1lczo6aGVhZCgpKSB8fCBoYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpzdHlsZSgpKSB8fCBo
YXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0aXRsZSgpKSkKKyAgICAgICAgcmV0dXJuIDA7CiAKLSAg
ICBEb2N1bWVudEZyYWdtZW50SW1wbCAqZnJhZ21lbnQgPSBuZXcgRG9jdW1lbnRGcmFnbWVudElt
cGwoIGRvY1B0cigpICk7CisgICAgaWYgKCFnZXREb2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgp
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIERvY3VtZW50RnJhZ21lbnRJbXBsICpmcmFnbWVu
dCA9IG5ldyBEb2N1bWVudEZyYWdtZW50SW1wbChkb2NQdHIoKSk7CiAgICAgZnJhZ21lbnQtPnJl
ZigpOwogICAgIHsKICAgICAgICAgSFRNTFRva2VuaXplciB0b2soZG9jUHRyKCksIGZyYWdtZW50
KTsKQEAgLTM1OCwxNCArMzI5LDE0IEBAIERvY3VtZW50RnJhZ21lbnRJbXBsICpIVE1MRWxlbWVu
dEltcGw6OmMKICAgICBpbnQgaWdub3JlZEV4Y2VwdGlvbkNvZGU7CiAKICAgICAvLyB3ZSBuZWVk
IHRvIHBvcCA8aHRtbD4gYW5kIDxib2R5PiBlbGVtZW50cyBhbmQgcmVtb3ZlIDxoZWFkPiB0bwot
ICAgIC8vIGFjY29tYWRhdGUgZm9sa3MgcGFzc2luZyBjb21wbGV0ZSBIVE1MIGRvY3VtZW50cyB0
byBtYWtlIHRoZQorICAgIC8vIGFjY29tbW9kYXRlIGZvbGtzIHBhc3NpbmcgY29tcGxldGUgSFRN
TCBkb2N1bWVudHMgdG8gbWFrZSB0aGUKICAgICAvLyBjaGlsZCBvZiBhbiBlbGVtZW50LgogCiAg
ICAgTm9kZUltcGwgKm5leHROb2RlOwogICAgIGZvciAoTm9kZUltcGwgKm5vZGUgPSBmcmFnbWVu
dC0+Zmlyc3RDaGlsZCgpOyBub2RlICE9IE5VTEw7IG5vZGUgPSBuZXh0Tm9kZSkgewogICAgICAg
ICBuZXh0Tm9kZSA9IG5vZGUtPm5leHRTaWJsaW5nKCk7CiAJbm9kZS0+cmVmKCk7Ci0gICAgICAg
IGlmIChub2RlLT5pZCgpID09IElEX0hUTUwgfHwgbm9kZS0+aWQoKSA9PSBJRF9CT0RZKSB7Cisg
ICAgICAgIGlmIChub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aHRtbCgpKSB8fCBub2RlLT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6Ym9keSgpKSkgewogCSAgICBOb2RlSW1wbCAqZmlyc3RDaGls
ZCA9IG5vZGUtPmZpcnN0Q2hpbGQoKTsKICAgICAgICAgICAgIGlmIChmaXJzdENoaWxkICE9IE5V
TEwpIHsKICAgICAgICAgICAgICAgICBuZXh0Tm9kZSA9IGZpcnN0Q2hpbGQ7CkBAIC0zNzksOSAr
MzUwLDkgQEAgRG9jdW1lbnRGcmFnbWVudEltcGwgKkhUTUxFbGVtZW50SW1wbDo6YwogICAgICAg
ICAgICAgICAgIGNoaWxkLT5kZXJlZigpOwogCSAgICB9CiAgICAgICAgICAgICBmcmFnbWVudC0+
cmVtb3ZlQ2hpbGQobm9kZSwgaWdub3JlZEV4Y2VwdGlvbkNvZGUpOwotCX0gZWxzZSBpZiAobm9k
ZS0+aWQoKSA9PSBJRF9IRUFEKSB7CisJfSBlbHNlIGlmIChub2RlLT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6aGVhZCgpKSkKIAkgICAgZnJhZ21lbnQtPnJlbW92ZUNoaWxkKG5vZGUsIGlnbm9yZWRF
eGNlcHRpb25Db2RlKTsKLQl9CisKICAgICAgICAgLy8gSW1wb3J0YW50IHRvIGRvIHRoaXMgZGVy
ZWYgYWZ0ZXIgcmVtb3ZlQ2hpbGQsIGJlY2F1c2UgaWYgdGhlIG9ubHkgdGhpbmcKICAgICAgICAg
Ly8ga2VlcGluZyBhIG5vZGUgYXJvdW5kIGlzIGEgcGFyZW50IHRoYXQgaXMgbm9uLTAsIHJlbW92
ZUNoaWxkIHdpbGwgbm90CiAgICAgICAgIC8vIGRlbGV0ZSB0aGUgbm9kZS4gVGhpcyB3b3JrcyBm
aW5lIGluIEphdmFTY3JpcHQgYmVjYXVzZSB0aGVyZSdzIGFsd2F5cwpAQCAtNDAwLDcgKzM3MSw3
IEBAIERvY3VtZW50RnJhZ21lbnRJbXBsICpIVE1MRWxlbWVudEltcGw6OmMKIAogdm9pZCBIVE1M
RWxlbWVudEltcGw6OnNldElubmVySFRNTChjb25zdCBET01TdHJpbmcgJmh0bWwsIGludCAmZXhj
ZXB0aW9uKQogewotICAgIERvY3VtZW50RnJhZ21lbnRJbXBsICpmcmFnbWVudCA9IGNyZWF0ZUNv
bnRleHR1YWxGcmFnbWVudCggaHRtbCApOworICAgIERvY3VtZW50RnJhZ21lbnRJbXBsICpmcmFn
bWVudCA9IGNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudChodG1sKTsKICAgICBpZiAoZnJhZ21lbnQg
PT0gTlVMTCkgewogCWV4Y2VwdGlvbiA9IERPTUV4Y2VwdGlvbjo6Tk9fTU9ESUZJQ0FUSU9OX0FM
TE9XRURfRVJSOwogICAgICAgICByZXR1cm47CkBAIC00MTgsNyArMzg5LDcgQEAgdm9pZCBIVE1M
RWxlbWVudEltcGw6OnNldE91dGVySFRNTChjb25zdAogICAgICAgICByZXR1cm47CiAgICAgfQog
ICAgIEhUTUxFbGVtZW50SW1wbCAqcGFyZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBs
ICo+KHApOwotICAgIERvY3VtZW50RnJhZ21lbnRJbXBsICpmcmFnbWVudCA9IHBhcmVudC0+Y3Jl
YXRlQ29udGV4dHVhbEZyYWdtZW50KCBodG1sICk7CisgICAgRG9jdW1lbnRGcmFnbWVudEltcGwg
KmZyYWdtZW50ID0gcGFyZW50LT5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoaHRtbCk7CiAKICAg
ICBpZiAoIWZyYWdtZW50KSB7CiAJZXhjZXB0aW9uID0gRE9NRXhjZXB0aW9uOjpOT19NT0RJRklD
QVRJT05fQUxMT1dFRF9FUlI7CkBAIC00MzQsMjkgKzQwNSwxNyBAQCB2b2lkIEhUTUxFbGVtZW50
SW1wbDo6c2V0T3V0ZXJIVE1MKGNvbnN0CiB2b2lkIEhUTUxFbGVtZW50SW1wbDo6c2V0SW5uZXJU
ZXh0KGNvbnN0IERPTVN0cmluZyAmdGV4dCwgaW50ICZleGNlcHRpb24pCiB7CiAgICAgLy8gZm9s
bG93aW5nIHRoZSBJRSBzcGVjcy4KLSAgICBpZiAoZW5kVGFnUmVxdWlyZW1lbnQoaWQoKSkgPT0g
Rk9SQklEREVOKSB7CisgICAgaWYgKGVuZFRhZ1JlcXVpcmVtZW50KCkgPT0gVGFnU3RhdHVzRm9y
YmlkZGVuKSB7CiAJZXhjZXB0aW9uID0gRE9NRXhjZXB0aW9uOjpOT19NT0RJRklDQVRJT05fQUxM
T1dFRF9FUlI7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICAvLyBJRSBkaXNhbGxvd3Mg
aW5uZXJUZXh0IG9uIGlubGluZSBlbGVtZW50cy4gSSBkb24ndCBzZWUgd2h5IHdlIHNob3VsZCBo
YXZlIHRoaXMgcmVzdHJpY3Rpb24sIGFzIG91cgotICAgIC8vIGRodG1sIGVuZ2luZSBjYW4gY29w
ZSB3aXRoIGl0LiBMYXJzCi0gICAgLy9pZiAoIGlzSW5saW5lKCkgKSByZXR1cm4gZmFsc2U7Ci0g
ICAgc3dpdGNoKCBpZCgpICkgewotICAgICAgICBjYXNlIElEX0NPTDoKLSAgICAgICAgY2FzZSBJ
RF9DT0xHUk9VUDoKLSAgICAgICAgY2FzZSBJRF9GUkFNRVNFVDoKLSAgICAgICAgY2FzZSBJRF9I
RUFEOgotICAgICAgICBjYXNlIElEX0hUTUw6Ci0gICAgICAgIGNhc2UgSURfVEFCTEU6Ci0gICAg
ICAgIGNhc2UgSURfVEJPRFk6Ci0gICAgICAgIGNhc2UgSURfVEZPT1Q6Ci0gICAgICAgIGNhc2Ug
SURfVEhFQUQ6Ci0gICAgICAgIGNhc2UgSURfVFI6Ci0gICAgICAgICAgICBleGNlcHRpb24gPSBE
T01FeGNlcHRpb246Ok5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUjsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOworICAgIGlmIChoYXNM
b2NhbE5hbWUoSFRNTE5hbWVzOjpjb2woKSkgfHwgaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6Y29s
Z3JvdXAoKSkgfHwgaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6ZnJhbWVzZXQoKSkgfHwKKyAgICAg
ICAgaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6aGVhZCgpKSB8fCBoYXNMb2NhbE5hbWUoSFRNTE5h
bWVzOjpodG1sKCkpIHx8IGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnRhYmxlKCkpIHx8IAorICAg
ICAgICBoYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0Ym9keSgpKSB8fCBoYXNMb2NhbE5hbWUoSFRN
TE5hbWVzOjp0Zm9vdCgpKSB8fCBoYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0aGVhZCgpKSB8fAor
ICAgICAgICBoYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0cigpKSkgeworICAgICAgICBleGNlcHRp
b24gPSBET01FeGNlcHRpb246Ok5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUjsKKyAgICAgICAg
cmV0dXJuOwogICAgIH0KIAogICAgIHJlbW92ZUNoaWxkcmVuKCk7CkBAIC00NjYsMjUgKzQyNSwx
NyBAQCB2b2lkIEhUTUxFbGVtZW50SW1wbDo6c2V0SW5uZXJUZXh0KGNvbnN0CiB2b2lkIEhUTUxF
bGVtZW50SW1wbDo6c2V0T3V0ZXJUZXh0KGNvbnN0IERPTVN0cmluZyAmdGV4dCwgaW50ICZleGNl
cHRpb24pCiB7CiAgICAgLy8gZm9sbG93aW5nIHRoZSBJRSBzcGVjcy4KLSAgICBpZiggZW5kVGFn
UmVxdWlyZW1lbnQoaWQoKSkgPT0gRk9SQklEREVOICkgeworICAgIGlmIChlbmRUYWdSZXF1aXJl
bWVudCgpID09IFRhZ1N0YXR1c0ZvcmJpZGRlbikgewogCWV4Y2VwdGlvbiA9IERPTUV4Y2VwdGlv
bjo6Tk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOwogICAgICAgICByZXR1cm47CiAgICAgfQot
ICAgIHN3aXRjaCggaWQoKSApIHsKLSAgICAgICAgY2FzZSBJRF9DT0w6Ci0gICAgICAgIGNhc2Ug
SURfQ09MR1JPVVA6Ci0gICAgICAgIGNhc2UgSURfRlJBTUVTRVQ6Ci0gICAgICAgIGNhc2UgSURf
SEVBRDoKLSAgICAgICAgY2FzZSBJRF9IVE1MOgotICAgICAgICBjYXNlIElEX1RBQkxFOgotICAg
ICAgICBjYXNlIElEX1RCT0RZOgotICAgICAgICBjYXNlIElEX1RGT09UOgotICAgICAgICBjYXNl
IElEX1RIRUFEOgotICAgICAgICBjYXNlIElEX1RSOgotICAgICAgICAgICAgZXhjZXB0aW9uID0g
RE9NRXhjZXB0aW9uOjpOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsKKworICAgIGlmICho
YXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpjb2woKSkgfHwgaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6
Y29sZ3JvdXAoKSkgfHwgaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6ZnJhbWVzZXQoKSkgfHwKKyAg
ICAgICAgaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6aGVhZCgpKSB8fCBoYXNMb2NhbE5hbWUoSFRN
TE5hbWVzOjpodG1sKCkpIHx8IGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnRhYmxlKCkpIHx8IAor
ICAgICAgICBoYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0Ym9keSgpKSB8fCBoYXNMb2NhbE5hbWUo
SFRNTE5hbWVzOjp0Zm9vdCgpKSB8fCBoYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0aGVhZCgpKSB8
fAorICAgICAgICBoYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0cigpKSkgeworICAgICAgICBleGNl
cHRpb24gPSBET01FeGNlcHRpb246Ok5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUjsKKyAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAogICAgIE5vZGVJbXBsICpwYXJlbnQgPSBwYXJlbnROb2RlKCk7
CkBAIC01MjUsMTcgKzQ3Niw2IEBAIHZvaWQgSFRNTEVsZW1lbnRJbXBsOjpzZXRPdXRlclRleHQo
Y29uc3QKICAgICB9CiB9CiAKLQotRE9NU3RyaW5nIEhUTUxFbGVtZW50SW1wbDo6bmFtZXNwYWNl
VVJJKCkgY29uc3QKLXsKLSAgICAvLyBGb3IgSFRNTCBkb2N1bWVudHMsIHdlIHRyZWF0IEhUTUwg
ZWxlbWVudHMgYXMgaGF2aW5nIG5vIG5hbWVzcGFjZS4gQnV0IGZvciBYTUwgZG9jdW1lbnRzCi0g
ICAgLy8gdGhlIGVsZW1lbnRzIGhhdmUgdGhlIG5hbWVzcGFjZSBkZWZpbmVkIGluIHRoZSBYSFRN
TCBzcGVjCi0gICAgaWYgKGdldERvY3VtZW50KCktPmlzSFRNTERvY3VtZW50KCkpCi0gICAgICAg
IHJldHVybiBET01TdHJpbmcoKTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiBYSFRNTF9OQU1F
U1BBQ0U7Ci19Ci0KIHZvaWQgSFRNTEVsZW1lbnRJbXBsOjphZGRIVE1MQWxpZ25tZW50KE1hcHBl
ZEF0dHJpYnV0ZUltcGwqIGF0dHIpCiB7CiAgICAgLy9xRGVidWcoImFsaWdubWVudCBpcyAlcyIs
IGFsaWdubWVudC5zdHJpbmcoKS5sYXRpbjEoKSApOwpAQCAtNjgyLDkgKzYyMiw5IEBAIERPTVN0
cmluZyBIVE1MRWxlbWVudEltcGw6OnRvU3RyaW5nKCkgY28KIAlET01TdHJpbmcgcmVzdWx0ID0g
b3BlblRhZ1N0YXJ0VG9TdHJpbmcoKTsKIAlyZXN1bHQgKz0gIj4iOwogCi0JaWYgKGVuZFRhZ1Jl
cXVpcmVtZW50KGlkKCkpID09IFJFUVVJUkVEKSB7CisJaWYgKGVuZFRhZ1JlcXVpcmVtZW50KCkg
PT0gVGFnU3RhdHVzUmVxdWlyZWQpIHsKIAkgICAgcmVzdWx0ICs9ICI8LyI7Ci0JICAgIHJlc3Vs
dCArPSB0YWdOYW1lKCk7CisJICAgIHJlc3VsdCArPSBub2RlTmFtZSgpOwogCSAgICByZXN1bHQg
Kz0gIj4iOwogCX0KIApAQCAtNjk0LDcgKzYzNCw3IEBAIERPTVN0cmluZyBIVE1MRWxlbWVudElt
cGw6OnRvU3RyaW5nKCkgY28KICAgICByZXR1cm4gRWxlbWVudEltcGw6OnRvU3RyaW5nKCk7CiB9
CiAKLURPTVN0cmluZyBIVE1MRWxlbWVudEltcGw6OmlkRE9NKCkgY29uc3QKK0RPTVN0cmluZyBI
VE1MRWxlbWVudEltcGw6OmlkKCkgY29uc3QKIHsKICAgICByZXR1cm4gZ2V0QXR0cmlidXRlKEFU
VFJfSUQpOwogfQpAQCAtNzQ5LDE1ICs2ODksMyBAQCBTaGFyZWRQdHI8SFRNTENvbGxlY3Rpb25J
bXBsPiBIVE1MRWxlbWVuCiAgICAgcmV0dXJuIFNoYXJlZFB0cjxIVE1MQ29sbGVjdGlvbkltcGw+
KG5ldyBIVE1MQ29sbGVjdGlvbkltcGwodGhpcywgSFRNTENvbGxlY3Rpb25JbXBsOjpOT0RFX0NI
SUxEUkVOKSk7CiB9CiAKLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotSFRNTEdlbmVyaWNFbGVtZW50
SW1wbDo6SFRNTEdlbmVyaWNFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCB1c2hvcnQgaSkK
LSAgICA6IEhUTUxFbGVtZW50SW1wbChkb2MpCi17Ci0gICAgbV9lbGVtZW50SWQgPSBpOwotfQot
Ci1Ob2RlSW1wbDo6SWQgSFRNTEdlbmVyaWNFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAg
IHJldHVybiBtX2VsZW1lbnRJZDsKLX0KSW5kZXg6IGtodG1sL2h0bWwvaHRtbF9lbGVtZW50aW1w
bC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRt
bF9lbGVtZW50aW1wbC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjM1CmRpZmYgLXUgLXAgLXIx
LjM1IGtodG1sL2h0bWwvaHRtbF9lbGVtZW50aW1wbC5oCi0tLSBraHRtbC9odG1sL2h0bWxfZWxl
bWVudGltcGwuaAkxMSBNYXkgMjAwNSAwNTo0OTozNCAtMDAwMAkxLjM1CisrKyBraHRtbC9odG1s
L2h0bWxfZWxlbWVudGltcGwuaAkyNCBKdW4gMjAwNSAwMzoxMDoxMyAtMDAwMApAQCAtMjUsMjcg
KzI1LDI0IEBACiAjZGVmaW5lIEhUTUxfRUxFTUVOVElNUExfSAogCiAjaW5jbHVkZSAieG1sL2Rv
bV9lbGVtZW50aW1wbC5oIgotI2luY2x1ZGUgPHFwdHJkaWN0Lmg+CisjaW5jbHVkZSAiaHRtbG5h
bWVzLmgiCiAKIG5hbWVzcGFjZSBET00gewogCiBjbGFzcyBEb2N1bWVudEZyYWdtZW50SW1wbDsK
IGNsYXNzIERPTVN0cmluZzsKIGNsYXNzIEhUTUxDb2xsZWN0aW9uSW1wbDsKLSAgICAKKworZW51
bSBIVE1MVGFnU3RhdHVzIHsgVGFnU3RhdHVzT3B0aW9uYWwsIFRhZ1N0YXR1c1JlcXVpcmVkLCBU
YWdTdGF0dXNGb3JiaWRkZW4gfTsKKyAgICAgICAgICAgICAgICAgICAgICAgCiBjbGFzcyBIVE1M
RWxlbWVudEltcGwgOiBwdWJsaWMgU3R5bGVkRWxlbWVudEltcGwKIHsKIHB1YmxpYzoKLSAgICBI
VE1MRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYyk7Ci0KKyAgICBIVE1MRWxlbWVudEltcGwo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnRQdHIgKmRvYyk7CiAgICAgdmly
dHVhbCB+SFRNTEVsZW1lbnRJbXBsKCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNIVE1MRWxlbWVu
dCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHZpcnR1YWwgYm9vbCBpc0lubGluZSgp
IGNvbnN0OwotICAgICAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3QgPSAwOwotICAgIAogICAg
IHZpcnR1YWwgYm9vbCBtYXBUb0VudHJ5KElkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiBy
ZXN1bHQpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBw
ZWRBdHRyaWJ1dGVJbXBsKiBhdHRyKTsKIApAQCAtNTMsNyArNTAsNyBAQCBwdWJsaWM6CiAKICAg
ICBTaGFyZWRQdHI8SFRNTENvbGxlY3Rpb25JbXBsPiBjaGlsZHJlbigpOwogICAgIAotICAgIERP
TVN0cmluZyBpZERPTSgpIGNvbnN0OyAvLyByZW5hbWUgdG8gaWQgYWZ0ZXIgZWxpbWluYXRpbmcg
Tm9kZUltcGw6OmlkIHNvbWUgZGF5CisgICAgRE9NU3RyaW5nIGlkKCkgY29uc3Q7CiAgICAgdm9p
ZCBzZXRJZChjb25zdCBET01TdHJpbmcgJnZhbHVlKTsKICAgICBET01TdHJpbmcgdGl0bGUoKSBj
b25zdDsKICAgICB2b2lkIHNldFRpdGxlKGNvbnN0IERPTVN0cmluZyAmdmFsdWUpOwpAQCAtNzMs
OCArNzAsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRPdXRlckhUTUwoY29uc3QgRE9NU3RyaW5n
ICZodG1sLCBpbnQgJmV4Y2VwdGlvbik7CiAgICAgdm9pZCBzZXRJbm5lclRleHQoY29uc3QgRE9N
U3RyaW5nICZ0ZXh0LCBpbnQgJmV4Y2VwdGlvbik7CiAgICAgdm9pZCBzZXRPdXRlclRleHQoY29u
c3QgRE9NU3RyaW5nICZ0ZXh0LCBpbnQgJmV4Y2VwdGlvbik7Ci0KLSAgICB2aXJ0dWFsIERPTVN0
cmluZyBuYW1lc3BhY2VVUkkoKSBjb25zdDsKICAgICAKICAgICB2aXJ0dWFsIGJvb2wgaXNGb2N1
c2FibGUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNDb250ZW50RWRpdGFibGUoKSBjb25z
dDsKQEAgLTg5LDIyICs4NCwxNSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIERPTVN0cmluZyB0
b1N0cmluZygpIGNvbnN0OwogCisgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVp
cmVtZW50KCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdDsKKyAg
ICAKIHByb3RlY3RlZDoKIAogICAgIC8vIGZvciBJTUcsIE9CSkVDVCBhbmQgQVBQTEVUCiAgICAg
dm9pZCBhZGRIVE1MQWxpZ25tZW50KE1hcHBlZEF0dHJpYnV0ZUltcGwqIGh0bWxBdHRyKTsKIH07
CiAKLWNsYXNzIEhUTUxHZW5lcmljRWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTEVsZW1lbnRJbXBs
Ci17Ci1wdWJsaWM6Ci0gICAgSFRNTEdlbmVyaWNFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9j
LCB1c2hvcnQgZWxlbWVudElkKTsKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7Ci0KLXByb3Rl
Y3RlZDoKLSAgICB1c2hvcnQgbV9lbGVtZW50SWQ7Ci19OwotCiB9IC8vbmFtZXNwYWNlCiAKICNl
bmRpZgpJbmRleDoga2h0bWwvaHRtbC9odG1sX2Zvcm1pbXBsLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfZm9ybWltcGwuY3BwLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjE2NwpkaWZmIC11IC1wIC1yMS4xNjcga2h0bWwvaHRtbC9odG1s
X2Zvcm1pbXBsLmNwcAotLS0ga2h0bWwvaHRtbC9odG1sX2Zvcm1pbXBsLmNwcAkyMCBKdW4gMjAw
NSAwNTo1MjoxNiAtMDAwMAkxLjE2NworKysga2h0bWwvaHRtbC9odG1sX2Zvcm1pbXBsLmNwcAky
NCBKdW4gMjAwNSAwMzoxMDoxNSAtMDAwMApAQCAtMTAzLDcgKzEwMyw3IEBAIHByaXZhdGU6CiB9
OwogCiBIVE1MRm9ybUVsZW1lbnRJbXBsOjpIVE1MRm9ybUVsZW1lbnRJbXBsKERvY3VtZW50UHRy
ICpkb2MpCi0gICAgOiBIVE1MRWxlbWVudEltcGwoZG9jKQorICAgIDogSFRNTEVsZW1lbnRJbXBs
KEhUTUxOYW1lczo6Zm9ybSgpLCBkb2MpCiB7CiAgICAgY29sbGVjdGlvbkluZm8gPSAwOwogICAg
IG1fcG9zdCA9IGZhbHNlOwpAQCAtMTMwLDExICsxMzAsNiBAQCBIVE1MRm9ybUVsZW1lbnRJbXBs
Ojp+SFRNTEZvcm1FbGVtZW50SW1wCiAgICAgICAgIGltZ0VsZW1lbnRzW2ldLT5tX2Zvcm0gPSAw
OwogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTEZvcm1FbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewot
ICAgIHJldHVybiBJRF9GT1JNOwotfQotCiAjaWYgQVBQTEVfQ0hBTkdFUwogCiBib29sIEhUTUxG
b3JtRWxlbWVudEltcGw6OmZvcm1Xb3VsZEhhdmVTZWN1cmVTdWJtaXNzaW9uKGNvbnN0IERPTVN0
cmluZyAmdXJsKQpAQCAtMTkyLDcgKzE4Nyw3IEBAIHZvaWQgSFRNTEZvcm1FbGVtZW50SW1wbDo6
c3VibWl0Q2xpY2soKQogewogICAgIGJvb2wgc3VibWl0Rm91bmQgPSBmYWxzZTsKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgZm9ybUVsZW1lbnRzLmNvdW50KCk7ICsraSkgewotICAgICAg
ICBpZiAoZm9ybUVsZW1lbnRzW2ldLT5pZCgpID09IElEX0lOUFVUKSB7CisgICAgICAgIGlmIChm
b3JtRWxlbWVudHNbaV0tPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmlucHV0KCkpKSB7CiAgICAg
ICAgICAgICBIVE1MSW5wdXRFbGVtZW50SW1wbCAqZWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxJ
bnB1dEVsZW1lbnRJbXBsICo+KGZvcm1FbGVtZW50c1tpXSk7CiAgICAgICAgICAgICBpZiAoZWxl
bWVudC0+aXNTdWNjZXNzZnVsU3VibWl0QnV0dG9uKCkgJiYgZWxlbWVudC0+cmVuZGVyZXIoKSkg
ewogICAgICAgICAgICAgICAgIHN1Ym1pdEZvdW5kID0gdHJ1ZTsKQEAgLTM5OSw3ICszOTQsNyBA
QCBib29sIEhUTUxGb3JtRWxlbWVudEltcGw6OmZvcm1EYXRhKEZvcm1ECiAKICAgICAgICAgICAg
ICAgICAgICAgLy8gaWYgdGhlIGN1cnJlbnQgdHlwZSBpcyBGSUxFLCB0aGVuIHdlIGFsc28gbmVl
ZCB0bwogICAgICAgICAgICAgICAgICAgICAvLyBpbmNsdWRlIHRoZSBmaWxlbmFtZQotICAgICAg
ICAgICAgICAgICAgICBpZiAoY3VycmVudC0+bm9kZVR5cGUoKSA9PSBOb2RlOjpFTEVNRU5UX05P
REUgJiYgY3VycmVudC0+aWQoKSA9PSBJRF9JTlBVVCAmJgorICAgICAgICAgICAgICAgICAgICBp
ZiAoY3VycmVudC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6aW5wdXQoKSkgJiYKICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnRJbXBsKj4oY3VycmVu
dCktPmlucHV0VHlwZSgpID09IEhUTUxJbnB1dEVsZW1lbnRJbXBsOjpGSUxFKQogICAgICAgICAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICBRU3RyaW5nIHBhdGggPSBzdGF0
aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50SW1wbCo+KGN1cnJlbnQpLT52YWx1ZSgpLnN0cmluZygp
OwpAQCAtNTQ3LDcgKzU0Miw3IEBAIHZvaWQgSFRNTEZvcm1FbGVtZW50SW1wbDo6c3VibWl0KCBi
b29sIGEKICNpZiBBUFBMRV9DSEFOR0VTCiAgICAgICAgIC8vIE91ciBhcHAgbmVlZHMgdG8gZ2V0
IGZvcm0gdmFsdWVzIGZvciBwYXNzd29yZCBmaWVsZHMgZm9yIGRvaW5nIHBhc3N3b3JkIGF1dG9j
b21wbGV0ZSwKICAgICAgICAgLy8gc28gd2UgYXJlIG1vcmUgbGVuaWVudCBpbiBwdXNoaW5nIHZh
bHVlcywgYW5kIGxldCB0aGUgYXBwIGRlY2lkZSB3aGF0IHRvIHNhdmUgd2hlbi4KLSAgICAgICAg
aWYgKGN1cnJlbnQtPmlkKCkgPT0gSURfSU5QVVQpIHsKKyAgICAgICAgaWYgKGN1cnJlbnQtPmhh
c0xvY2FsTmFtZShIVE1MTmFtZXM6OmlucHV0KCkpKSB7CiAgICAgICAgICAgICBIVE1MSW5wdXRF
bGVtZW50SW1wbCAqaW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50SW1wbCo+KGN1
cnJlbnQpOwogICAgICAgICAgICAgaWYgKGlucHV0LT5pbnB1dFR5cGUoKSA9PSBIVE1MSW5wdXRF
bGVtZW50SW1wbDo6VEVYVAogICAgICAgICAgICAgICAgIHx8IGlucHV0LT5pbnB1dFR5cGUoKSA9
PSAgSFRNTElucHV0RWxlbWVudEltcGw6OlBBU1NXT1JECkBAIC03MDksNyArNzA0LDcgQEAgdm9p
ZCBIVE1MRm9ybUVsZW1lbnRJbXBsOjpyYWRpb0NsaWNrZWQoIAogewogICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBmb3JtRWxlbWVudHMuY291bnQoKTsgKytpKSB7CiAgICAgICAgIEhUTUxH
ZW5lcmljRm9ybUVsZW1lbnRJbXBsICpjdXJyZW50ID0gZm9ybUVsZW1lbnRzW2ldOwotICAgICAg
ICBpZiAoY3VycmVudC0+aWQoKSA9PSBJRF9JTlBVVCAmJgorICAgICAgICBpZiAoY3VycmVudC0+
aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6aW5wdXQoKSkgJiYKICAgICAgICAgICAgIHN0YXRpY19j
YXN0PEhUTUxJbnB1dEVsZW1lbnRJbXBsKj4oY3VycmVudCktPmlucHV0VHlwZSgpID09IEhUTUxJ
bnB1dEVsZW1lbnRJbXBsOjpSQURJTyAmJgogICAgICAgICAgICAgY3VycmVudCAhPSBjYWxsZXIg
JiYgY3VycmVudC0+Zm9ybSgpID09IGNhbGxlci0+Zm9ybSgpICYmIGN1cnJlbnQtPm5hbWUoKSA9
PSBjYWxsZXItPm5hbWUoKSkgewogICAgICAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxl
bWVudEltcGwqPihjdXJyZW50KS0+c2V0Q2hlY2tlZChmYWxzZSk7CkBAIC04NjQsOCArODU5LDgg
QEAgdm9pZCBIVE1MRm9ybUVsZW1lbnRJbXBsOjpzZXRUYXJnZXQoY29ucwogCiAvLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCiAKLUhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsOjpIVE1MR2VuZXJpY0Zvcm1F
bGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmKQotICAg
IDogSFRNTEVsZW1lbnRJbXBsKGRvYykKK0hUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsOjpIVE1M
R2VuZXJpY0Zvcm1FbGVtZW50SW1wbChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1
bWVudFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmKQorICAgIDogSFRNTEVsZW1lbnRJ
bXBsKHRhZ05hbWUsIGRvYykKIHsKICAgICBtX2Rpc2FibGVkID0gbV9yZWFkT25seSA9IGZhbHNl
OwogICAgIG1fZG9ybWFudCA9IGZhbHNlOwpAQCAtOTY3LDkgKzk2Miw4IEBAIHZvaWQgSFRNTEdl
bmVyaWNGb3JtRWxlbWVudEltcGw6OnJlbW92ZWQKIEhUTUxGb3JtRWxlbWVudEltcGwgKkhUTUxH
ZW5lcmljRm9ybUVsZW1lbnRJbXBsOjpnZXRGb3JtKCkgY29uc3QKIHsKICAgICBOb2RlSW1wbCAq
cCA9IHBhcmVudE5vZGUoKTsKLSAgICB3aGlsZShwKQotICAgIHsKLSAgICAgICAgaWYoIHAtPmlk
KCkgPT0gSURfRk9STSApCisgICAgd2hpbGUocCkgeworICAgICAgICBpZiAocC0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OmZvcm0oKSkpCiAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRN
TEZvcm1FbGVtZW50SW1wbCAqPihwKTsKICAgICAgICAgcCA9IHAtPnBhcmVudE5vZGUoKTsKICAg
ICB9CkBAIC0xMTg5LDcgKzExODMsNyBAQCB2b2lkIEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBs
OjpzZXRUYWJJCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxCdXR0b25FbGVtZW50SW1wbDo6
SFRNTEJ1dHRvbkVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIEhUTUxGb3JtRWxlbWVudElt
cGwgKmYpCi0gICAgOiBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbChkb2MsIGYpCisgICAgOiBI
VE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbChIVE1MTmFtZXM6OmJ1dHRvbigpLCBkb2MsIGYpCiB7
CiAgICAgbV90eXBlID0gU1VCTUlUOwogICAgIG1fZGlydHkgPSB0cnVlOwpAQCAtMTIwMCwxMSAr
MTE5NCw2IEBAIEhUTUxCdXR0b25FbGVtZW50SW1wbDo6fkhUTUxCdXR0b25FbGVtZW4KIHsKIH0K
IAotTm9kZUltcGw6OklkIEhUTUxCdXR0b25FbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAg
IHJldHVybiBJRF9CVVRUT047Ci19Ci0KIERPTVN0cmluZyBIVE1MQnV0dG9uRWxlbWVudEltcGw6
OnR5cGUoKSBjb25zdAogewogICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoQVRUUl9UWVBFKTsKQEAg
LTEzMjYsNyArMTMxNSw3IEBAIHZvaWQgSFRNTEJ1dHRvbkVsZW1lbnRJbXBsOjpzZXRWYWx1ZShj
b24KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogSFRNTEZpZWxkU2V0RWxlbWVudEltcGw6OkhUTUxG
aWVsZFNldEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIEhUTUxGb3JtRWxlbWVudEltcGwg
KmYpCi0gICA6IEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKGRvYywgZikKKyAgIDogSFRNTEdl
bmVyaWNGb3JtRWxlbWVudEltcGwoSFRNTE5hbWVzOjpmaWVsZHNldCgpLCBkb2MsIGYpCiB7CiB9
CiAKQEAgLTEzMzksMTEgKzEzMjgsNiBAQCBib29sIEhUTUxGaWVsZFNldEVsZW1lbnRJbXBsOjpp
c0ZvY3VzYWJsCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTEZpZWxk
U2V0RWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfRklFTERTRVQ7Ci19
Ci0KIERPTVN0cmluZyBIVE1MRmllbGRTZXRFbGVtZW50SW1wbDo6dHlwZSgpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuICJmaWVsZHNldCI7CkBAIC0xMzU3LDggKzEzNDEsMjEgQEAgUmVuZGVyT2JqZWN0
KiBIVE1MRmllbGRTZXRFbGVtZW50SW1wbDo6YwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBIVE1M
SW5wdXRFbGVtZW50SW1wbDo6SFRNTElucHV0RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywg
SFRNTEZvcm1FbGVtZW50SW1wbCAqZikKLSAgICA6IEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBs
KGRvYywgZiksIG1faW1hZ2VMb2FkZXIoMCksIG1fdmFsdWVNYXRjaGVzUmVuZGVyZXIoZmFsc2Up
CisgICAgOiBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbChIVE1MTmFtZXM6OmlucHV0KCksIGRv
YywgZikKK3sKKyAgICBpbml0KCk7Cit9CisKK0hUTUxJbnB1dEVsZW1lbnRJbXBsOjpIVE1MSW5w
dXRFbGVtZW50SW1wbChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudFB0ciAq
ZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmKQorICAgIDogSFRNTEdlbmVyaWNGb3JtRWxlbWVu
dEltcGwodGFnTmFtZSwgZG9jLCBmKQogeworICAgIGluaXQoKTsKK30KKwordm9pZCBIVE1MSW5w
dXRFbGVtZW50SW1wbDo6aW5pdCgpCit7CisgICAgbV9pbWFnZUxvYWRlciA9IDA7CisgICAgbV92
YWx1ZU1hdGNoZXNSZW5kZXJlciA9IGZhbHNlOwogICAgIG1fdHlwZSA9IFRFWFQ7CiAgICAgbV9t
YXhMZW4gPSAtMTsKICAgICBtX3NpemUgPSAyMDsKQEAgLTEzNzYsOCArMTM3Myw4IEBAIEhUTUxJ
bnB1dEVsZW1lbnRJbXBsOjpIVE1MSW5wdXRFbGVtZW50SW0KIAogICAgIG1fbWF4UmVzdWx0cyA9
IC0xOwogCi0gICAgaWYgKCBtX2Zvcm0gKQotICAgICAgICBtX2F1dG9jb21wbGV0ZSA9IGYtPmF1
dG9Db21wbGV0ZSgpOworICAgIGlmIChtX2Zvcm0pCisgICAgICAgIG1fYXV0b2NvbXBsZXRlID0g
bV9mb3JtLT5hdXRvQ29tcGxldGUoKTsKIH0KIAogSFRNTElucHV0RWxlbWVudEltcGw6On5IVE1M
SW5wdXRFbGVtZW50SW1wbCgpCkBAIC0xMzg2LDExICsxMzgzLDYgQEAgSFRNTElucHV0RWxlbWVu
dEltcGw6On5IVE1MSW5wdXRFbGVtZW50SQogICAgIGRlbGV0ZSBtX2ltYWdlTG9hZGVyOwogfQog
Ci1Ob2RlSW1wbDo6SWQgSFRNTElucHV0RWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gSURfSU5QVVQ7Ci19Ci0KIHZvaWQgSFRNTElucHV0RWxlbWVudEltcGw6OnNldFR5cGUo
Y29uc3QgRE9NU3RyaW5nJiB0KQogewogICAgIHR5cGVFbnVtIG5ld1R5cGU7CkBAIC0yMzY2LDcg
KzIzNTgsNyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnRJbXBsOjpzZXRVc2VNYXAoY29uCiAvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxMYWJlbEVsZW1lbnRJbXBsOjpIVE1MTGFiZWxFbGVtZW50
SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAgIDogSFRNTEVsZW1lbnRJbXBsKGRvYykKKyAgICA6
IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6OmxhYmVsKCksIGRvYykKIHsKIH0KIApAQCAtMjM3
OSwxMSArMjM3MSw2IEBAIGJvb2wgSFRNTExhYmVsRWxlbWVudEltcGw6OmlzRm9jdXNhYmxlKCkK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MTGFiZWxFbGVtZW50SW1w
bDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9MQUJFTDsKLX0KLQogdm9pZCBIVE1MTGFi
ZWxFbGVtZW50SW1wbDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAq
YXR0cikKIHsKICAgICBzd2l0Y2goYXR0ci0+aWQoKSkKQEAgLTI0NjUsNyArMjQ1Miw3IEBAIHZv
aWQgSFRNTExhYmVsRWxlbWVudEltcGw6OnNldEh0bWxGb3IoY28KIC8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KIAogSFRNTExlZ2VuZEVsZW1lbnRJbXBsOjpIVE1MTGVnZW5kRWxlbWVudEltcGwoRG9jdW1l
bnRQdHIgKmRvYywgSFRNTEZvcm1FbGVtZW50SW1wbCAqZikKLTogSFRNTEdlbmVyaWNGb3JtRWxl
bWVudEltcGwoZG9jLCBmKQorOiBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbChIVE1MTmFtZXM6
OmxlZ2VuZCgpLCBkb2MsIGYpCiB7CiB9CiAKQEAgLTI0NzgsMTEgKzI0NjUsNiBAQCBib29sIEhU
TUxMZWdlbmRFbGVtZW50SW1wbDo6aXNGb2N1c2FibGUoCiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci1Ob2RlSW1wbDo6SWQgSFRNTExlZ2VuZEVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIElEX0xFR0VORDsKLX0KLQogUmVuZGVyT2JqZWN0KiBIVE1MTGVnZW5kRWxlbWVudElt
cGw6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiBhcmVuYSwgUmVuZGVyU3R5bGUqIHN0eWxl
KQogewogICAgIHJldHVybiBuZXcgKGFyZW5hKSBSZW5kZXJMZWdlbmQodGhpcyk7CkBAIC0yNTE3
LDcgKzI0OTksNyBAQCBFbGVtZW50SW1wbCAqSFRNTExlZ2VuZEVsZW1lbnRJbXBsOjpmb3JtCiB7
CiAgICAgLy8gQ2hlY2sgaWYgdGhlcmUncyBhIGZpZWxkc2V0IGJlbG9uZ2luZyB0byB0aGlzIGxl
Z2VuZC4KICAgICBOb2RlSW1wbCAqZmllbGRzZXQgPSBwYXJlbnROb2RlKCk7Ci0gICAgd2hpbGUg
KGZpZWxkc2V0ICYmIGZpZWxkc2V0LT5pZCgpICE9IElEX0ZJRUxEU0VUKQorICAgIHdoaWxlIChm
aWVsZHNldCAmJiAhZmllbGRzZXQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpmaWVsZHNldCgpKSkK
ICAgICAgICAgZmllbGRzZXQgPSBmaWVsZHNldC0+cGFyZW50Tm9kZSgpOwogICAgIGlmICghZmll
bGRzZXQpCiAgICAgICAgIHJldHVybiAwOwpAQCAtMjUyOCw3ICsyNTEwLDcgQEAgRWxlbWVudElt
cGwgKkhUTUxMZWdlbmRFbGVtZW50SW1wbDo6Zm9ybQogICAgIHdoaWxlICgobm9kZSA9IG5vZGUt
PnRyYXZlcnNlTmV4dE5vZGUoZmllbGRzZXQpKSkgewogICAgICAgICBpZiAobm9kZS0+aXNIVE1M
RWxlbWVudCgpKSB7CiAgICAgICAgICAgICBIVE1MRWxlbWVudEltcGwgKmVsZW1lbnQgPSBzdGF0
aWNfY2FzdDxIVE1MRWxlbWVudEltcGwgKj4obm9kZSk7Ci0gICAgICAgICAgICBpZiAoZWxlbWVu
dC0+aWQoKSAhPSBJRF9MRUdFTkQgJiYgZWxlbWVudC0+aXNHZW5lcmljRm9ybUVsZW1lbnQoKSkK
KyAgICAgICAgICAgIGlmICghZWxlbWVudC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6bGVnZW5k
KCkpICYmIGVsZW1lbnQtPmlzR2VuZXJpY0Zvcm1FbGVtZW50KCkpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIGVsZW1lbnQ7CiAgICAgICAgIH0KICAgICB9CkBAIC0yNTUxLDggKzI1MzMsMjAgQEAg
dm9pZCBIVE1MTGVnZW5kRWxlbWVudEltcGw6OmFjY2Vzc0tleUFjdAogLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQogCiBIVE1MU2VsZWN0RWxlbWVudEltcGw6OkhUTUxTZWxlY3RFbGVtZW50SW1wbChEb2N1
bWVudFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmKQotICAgIDogSFRNTEdlbmVyaWNG
b3JtRWxlbWVudEltcGwoZG9jLCBmKSwgbV9vcHRpb25zKDApCisgICAgOiBIVE1MR2VuZXJpY0Zv
cm1FbGVtZW50SW1wbChIVE1MTmFtZXM6OnNlbGVjdCgpLCBkb2MsIGYpLCBtX29wdGlvbnMoMCkK
K3sKKyAgICBpbml0KCk7Cit9CisKK0hUTUxTZWxlY3RFbGVtZW50SW1wbDo6SFRNTFNlbGVjdEVs
ZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50UHRyICpkb2Ms
IEhUTUxGb3JtRWxlbWVudEltcGwgKmYpCisgICAgOiBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1w
bCh0YWdOYW1lLCBkb2MsIGYpLCBtX29wdGlvbnMoMCkKK3sKKyAgICBpbml0KCk7Cit9CisKK3Zv
aWQgSFRNTFNlbGVjdEVsZW1lbnRJbXBsOjppbml0KCkKIHsKKyAgICBtX29wdGlvbnMgPSAwOwog
ICAgIG1fbXVsdGlwbGUgPSBmYWxzZTsKICAgICBtX3JlY2FsY0xpc3RJdGVtcyA9IGZhbHNlOwog
ICAgIC8vIDAgbWVhbnMgaW52YWxpZCAoaS5lLiBub3Qgc2V0KQpAQCAtMjU2OSwxMSArMjU2Myw2
IEBAIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6fkhUTUxTZWxlY3RFbGVtZW4KICAgICB9CiB9CiAK
LU5vZGVJbXBsOjpJZCBIVE1MU2VsZWN0RWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gSURfU0VMRUNUOwotfQotCiB2b2lkIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6cmVjYWxj
U3R5bGUoIFN0eWxlQ2hhbmdlIGNoICkKIHsKICAgICBpZiAoaGFzQ2hhbmdlZENoaWxkKCkgJiYg
bV9yZW5kZXIpIHsKQEAgLTI1OTUsNyArMjU4NCw3IEBAIGxvbmcgSFRNTFNlbGVjdEVsZW1lbnRJ
bXBsOjpzZWxlY3RlZEluZGUKICAgICB1aW50IG8gPSAwOwogICAgIFFNZW1BcnJheTxIVE1MR2Vu
ZXJpY0Zvcm1FbGVtZW50SW1wbCo+IGl0ZW1zID0gbGlzdEl0ZW1zKCk7CiAgICAgZm9yICh1bnNp
Z25lZCBpbnQgaSA9IDA7IGkgPCBpdGVtcy5zaXplKCk7IGkrKykgewotICAgICAgICBpZiAoaXRl
bXNbaV0tPmlkKCkgPT0gSURfT1BUSU9OKSB7CisgICAgICAgIGlmIChpdGVtc1tpXS0+aGFzTG9j
YWxOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpKSB7CiAgICAgICAgICAgICBpZiAoc3RhdGljX2Nh
c3Q8SFRNTE9wdGlvbkVsZW1lbnRJbXBsKj4oaXRlbXNbaV0pLT5zZWxlY3RlZCgpKQogICAgICAg
ICAgICAgICAgIHJldHVybiBvOwogICAgICAgICAgICAgbysrOwpAQCAtMjYxMSw3ICsyNjAwLDcg
QEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudEltcGw6OnNldFNlbGVjdGVkSQogICAgIFFNZW1BcnJh
eTxIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbCo+IGl0ZW1zID0gbGlzdEl0ZW1zKCk7CiAgICAg
aW50IGxpc3RJbmRleDsKICAgICBmb3IgKGxpc3RJbmRleCA9IDA7IGxpc3RJbmRleCA8IGludChp
dGVtcy5zaXplKCkpOyBsaXN0SW5kZXgrKykgewotICAgICAgICBpZiAoaXRlbXNbbGlzdEluZGV4
XS0+aWQoKSA9PSBJRF9PUFRJT04pCisgICAgICAgIGlmIChpdGVtc1tsaXN0SW5kZXhdLT5oYXNM
b2NhbE5hbWUoSFRNTE5hbWVzOjpvcHRpb24oKSkpCiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxI
VE1MT3B0aW9uRWxlbWVudEltcGwqPihpdGVtc1tsaXN0SW5kZXhdKS0+c2V0U2VsZWN0ZWQoZmFs
c2UpOwogICAgIH0KICAgICBsaXN0SW5kZXggPSBvcHRpb25Ub0xpc3RJbmRleChpbmRleCk7CkBA
IC0yNjI3LDcgKzI2MTYsNyBAQCBsb25nIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6bGVuZ3RoKCkg
Y29uCiAgICAgdWludCBpOwogICAgIFFNZW1BcnJheTxIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1w
bCo+IGl0ZW1zID0gbGlzdEl0ZW1zKCk7CiAgICAgZm9yIChpID0gMDsgaSA8IGl0ZW1zLnNpemUo
KTsgaSsrKSB7Ci0gICAgICAgIGlmIChpdGVtc1tpXS0+aWQoKSA9PSBJRF9PUFRJT04pCisgICAg
ICAgIGlmIChpdGVtc1tpXS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpKQogICAg
ICAgICAgICAgbGVuKys7CiAgICAgfQogICAgIHJldHVybiBsZW47CkBAIC0yNjM1LDcgKzI2MjQs
NyBAQCBsb25nIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6bGVuZ3RoKCkgY29uCiAKIHZvaWQgSFRN
TFNlbGVjdEVsZW1lbnRJbXBsOjphZGQoIEhUTUxFbGVtZW50SW1wbCAqZWxlbWVudCwgSFRNTEVs
ZW1lbnRJbXBsICpiZWZvcmUgKQogewotICAgIGlmICghZWxlbWVudCB8fCBlbGVtZW50LT5pZCgp
ICE9IElEX09QVElPTikKKyAgICBpZiAoIWVsZW1lbnQgfHwgIWVsZW1lbnQtPmhhc0xvY2FsTmFt
ZShIVE1MTmFtZXM6Om9wdGlvbigpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaW50IGV4Y2Vw
dGlvbmNvZGUgPSAwOwpAQCAtMjY2OSwxMyArMjY1OCwxMiBAQCB2b2lkIEhUTUxTZWxlY3RFbGVt
ZW50SW1wbDo6Zm9jdXMoKQogICAgIGdldERvY3VtZW50KCktPnNldEZvY3VzTm9kZSh0aGlzKTsK
IH0KIAotRE9NU3RyaW5nIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6dmFsdWUoICkKK0RPTVN0cmlu
ZyBIVE1MU2VsZWN0RWxlbWVudEltcGw6OnZhbHVlKCkKIHsKICAgICB1aW50IGk7CiAgICAgUU1l
bUFycmF5PEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKj4gaXRlbXMgPSBsaXN0SXRlbXMoKTsK
ICAgICBmb3IgKGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgaWYgKCBp
dGVtc1tpXS0+aWQoKSA9PSBJRF9PUFRJT04KLSAgICAgICAgICAgICYmIHN0YXRpY19jYXN0PEhU
TUxPcHRpb25FbGVtZW50SW1wbCo+KGl0ZW1zW2ldKS0+c2VsZWN0ZWQoKSkKKyAgICAgICAgaWYg
KGl0ZW1zW2ldLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvcHRpb24oKSkgJiYgc3RhdGljX2Nh
c3Q8SFRNTE9wdGlvbkVsZW1lbnRJbXBsKj4oaXRlbXNbaV0pLT5zZWxlY3RlZCgpKQogICAgICAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50SW1wbCo+KGl0ZW1zW2ld
KS0+dmFsdWUoKTsKICAgICB9CiAgICAgcmV0dXJuIERPTVN0cmluZygiIik7CkBAIC0yNjg5LDEz
ICsyNjc3LDEzIEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnRJbXBsOjpzZXRWYWx1ZShjb24KICAg
ICAvLyBhbmQgbWFrZSBpdCB0aGUgY3VycmVudCBzZWxlY3Rpb24uCiAgICAgUU1lbUFycmF5PEhU
TUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKj4gaXRlbXMgPSBsaXN0SXRlbXMoKTsKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyBpKyspCi0gICAgICAgIGlmIChpdGVt
c1tpXS0+aWQoKSA9PSBJRF9PUFRJT04gJiYgc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnRJ
bXBsKj4oaXRlbXNbaV0pLT52YWx1ZSgpID09IHZhbHVlKSB7CisgICAgICAgIGlmIChpdGVtc1tp
XS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpICYmIHN0YXRpY19jYXN0PEhUTUxP
cHRpb25FbGVtZW50SW1wbCo+KGl0ZW1zW2ldKS0+dmFsdWUoKSA9PSB2YWx1ZSkgewogICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnRJbXBsKj4oaXRlbXNbaV0pLT5zZXRT
ZWxlY3RlZCh0cnVlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogfQogCi1RU3Ry
aW5nIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6c3RhdGUoICkKK1FTdHJpbmcgSFRNTFNlbGVjdEVs
ZW1lbnRJbXBsOjpzdGF0ZSgpCiB7CiAjaWYgIUFQUExFX0NIQU5HRVMKICAgICBRU3RyaW5nIHN0
YXRlOwpAQCAtMjcwOCw3ICsyNjk2LDcgQEAgUVN0cmluZyBIVE1MU2VsZWN0RWxlbWVudEltcGw6
OnN0YXRlKCApCiAgICAgUUNoYXIgc3RhdGVDaGFyc1tsXTsKICAgICAKICAgICBmb3IoaW50IGkg
PSAwOyBpIDwgbDsgaSsrKQotICAgICAgICBpZihpdGVtc1tpXS0+aWQoKSA9PSBJRF9PUFRJT04g
JiYgc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnRJbXBsKj4oaXRlbXNbaV0pLT5zZWxlY3Rl
ZCgpKQorICAgICAgICBpZihpdGVtc1tpXS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b3B0aW9u
KCkpICYmIHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50SW1wbCo+KGl0ZW1zW2ldKS0+c2Vs
ZWN0ZWQoKSkKICAgICAgICAgICAgIHN0YXRlQ2hhcnNbaV0gPSAnWCc7CiAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgIHN0YXRlQ2hhcnNbaV0gPSAnLic7CkBAIC0yNzQ1LDcgKzI3MzMsNyBAQCB2
b2lkIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6cmVzdG9yZVN0YXRlCiAKICAgICBpbnQgbCA9IGl0
ZW1zLmNvdW50KCk7CiAgICAgZm9yKGludCBpID0gMDsgaSA8IGw7IGkrKykgewotICAgICAgICBp
ZihpdGVtc1tpXS0+aWQoKSA9PSBJRF9PUFRJT04pIHsKKyAgICAgICAgaWYoaXRlbXNbaV0tPmhh
c0xvY2FsTmFtZShIVE1MTmFtZXM6Om9wdGlvbigpKSkgewogICAgICAgICAgICAgSFRNTE9wdGlv
bkVsZW1lbnRJbXBsKiBvZSA9IHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50SW1wbCo+KGl0
ZW1zW2ldKTsKICAgICAgICAgICAgIG9lLT5zZXRTZWxlY3RlZChzdGF0ZVtpXSA9PSAnWCcpOwog
ICAgICAgICB9CkBAIC0yODM3LDcgKzI4MjUsNyBAQCBib29sIEhUTUxTZWxlY3RFbGVtZW50SW1w
bDo6YXBwZW5kRm9ybURhCiAKICAgICB1aW50IGk7CiAgICAgZm9yIChpID0gMDsgaSA8IGl0ZW1z
LnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIGlmIChpdGVtc1tpXS0+aWQoKSA9PSBJRF9PUFRJT04p
IHsKKyAgICAgICAgaWYgKGl0ZW1zW2ldLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvcHRpb24o
KSkpIHsKICAgICAgICAgICAgIEhUTUxPcHRpb25FbGVtZW50SW1wbCAqb3B0aW9uID0gc3RhdGlj
X2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnRJbXBsKj4oaXRlbXNbaV0pOwogICAgICAgICAgICAgaWYg
KG9wdGlvbi0+c2VsZWN0ZWQoKSkgewogICAgICAgICAgICAgICAgIGVuY29kZWRfdmFsdWVzLmFw
cGVuZERhdGEobmFtZSgpLCBvcHRpb24tPnZhbHVlKCkpOwpAQCAtMjg1MCw3ICsyODM4LDcgQEAg
Ym9vbCBIVE1MU2VsZWN0RWxlbWVudEltcGw6OmFwcGVuZEZvcm1EYQogICAgIC8vIGluIGFueSBj
YXNlLiBvdGhlcndpc2Ugd2UgaGF2ZSBubyBjb25zaXN0ZW5jeSB3aXRoIHRoZSBET00gaW50ZXJm
YWNlLiBGSVhNRSEKICAgICAvLyB3ZSByZXR1cm4gdGhlIGZpcnN0IG9uZSBpZiBpdCB3YXMgYSBj
b21ib2JveCBzZWxlY3QKICAgICBpZiAoIXN1Y2Nlc3NmdWwgJiYgIW1fbXVsdGlwbGUgJiYgbV9z
aXplIDw9IDEgJiYgaXRlbXMuc2l6ZSgpICYmCi0gICAgICAgIChpdGVtc1swXS0+aWQoKSA9PSBJ
RF9PUFRJT04pICkgeworICAgICAgICAoaXRlbXNbMF0tPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6
Om9wdGlvbigpKSkpIHsKICAgICAgICAgSFRNTE9wdGlvbkVsZW1lbnRJbXBsICpvcHRpb24gPSBz
dGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudEltcGwqPihpdGVtc1swXSk7CiAgICAgICAgIGlm
IChvcHRpb24tPnZhbHVlKCkuaXNOdWxsKCkpCiAgICAgICAgICAgICBlbmNvZGVkX3ZhbHVlcy5h
cHBlbmREYXRhKG5hbWUoKSwgb3B0aW9uLT50ZXh0KCkuc3RyaW5nKCkuc3RyaXBXaGl0ZVNwYWNl
KCkpOwpAQCAtMjg3Myw3ICsyODYxLDcgQEAgaW50IEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6b3B0
aW9uVG9MaXN0SQogICAgIGZvciAoOwogICAgICAgICAgb3B0aW9uSW5kZXgyIDwgaW50KGl0ZW1z
LnNpemUoKSkgJiYgb3B0aW9uSW5kZXgyIDw9IG9wdGlvbkluZGV4OwogICAgICAgICAgbGlzdElu
ZGV4KyspIHsgLy8gbm90IGEgdHlwbyEKLSAgICAgICAgaWYgKGl0ZW1zW2xpc3RJbmRleF0tPmlk
KCkgPT0gSURfT1BUSU9OKQorICAgICAgICBpZiAoaXRlbXNbbGlzdEluZGV4XS0+aGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpKQogICAgICAgICAgICAgb3B0aW9uSW5kZXgyKys7CiAg
ICAgfQogICAgIGxpc3RJbmRleC0tOwpAQCAtMjg4NCwxMyArMjg3MiwxMyBAQCBpbnQgSFRNTFNl
bGVjdEVsZW1lbnRJbXBsOjpsaXN0VG9PcHRpb25JCiB7CiAgICAgUU1lbUFycmF5PEhUTUxHZW5l
cmljRm9ybUVsZW1lbnRJbXBsKj4gaXRlbXMgPSBsaXN0SXRlbXMoKTsKICAgICBpZiAobGlzdElu
ZGV4IDwgMCB8fCBsaXN0SW5kZXggPj0gaW50KGl0ZW1zLnNpemUoKSkgfHwKLSAgICAgICAgaXRl
bXNbbGlzdEluZGV4XS0+aWQoKSAhPSBJRF9PUFRJT04pCisgICAgICAgICFpdGVtc1tsaXN0SW5k
ZXhdLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvcHRpb24oKSkpCiAgICAgICAgIHJldHVybiAt
MTsKIAogICAgIGludCBvcHRpb25JbmRleCA9IDA7IC8vIGFjdHVhbCBpbmRleCBvZiBvcHRpb24g
bm90IGNvdW50aW5nIE9QVEdST1VQIGVudHJpZXMgdGhhdCBtYXkgYmUgaW4gbGlzdAogICAgIGlu
dCBpOwogICAgIGZvciAoaSA9IDA7IGkgPCBsaXN0SW5kZXg7IGkrKykKLSAgICAgICAgaWYgKGl0
ZW1zW2ldLT5pZCgpID09IElEX09QVElPTikKKyAgICAgICAgaWYgKGl0ZW1zW2ldLT5oYXNMb2Nh
bE5hbWUoSFRNTE5hbWVzOjpvcHRpb24oKSkpCiAgICAgICAgICAgICBvcHRpb25JbmRleCsrOwog
ICAgIHJldHVybiBvcHRpb25JbmRleDsKIH0KQEAgLTI5MTYsMTMgKzI5MDQsMTMgQEAgdm9pZCBI
VE1MU2VsZWN0RWxlbWVudEltcGw6OnJlY2FsY0xpc3RJdAogICAgIG1fbGlzdEl0ZW1zLnJlc2l6
ZSgwKTsKICAgICBIVE1MT3B0aW9uRWxlbWVudEltcGwqIGZvdW5kU2VsZWN0ZWQgPSAwOwogICAg
IHdoaWxlKGN1cnJlbnQpIHsKLSAgICAgICAgaWYgKGN1cnJlbnQtPmlkKCkgPT0gSURfT1BUR1JP
VVAgJiYgY3VycmVudC0+Zmlyc3RDaGlsZCgpKSB7CisgICAgICAgIGlmIChjdXJyZW50LT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6b3B0Z3JvdXAoKSkgJiYgY3VycmVudC0+Zmlyc3RDaGlsZCgpKSB7
CiAgICAgICAgICAgICAvLyAjIyMgd2hhdCBpZiBvcHRncm91cCBjb250YWlucyBqdXN0IGNvbW1l
bnRzPyBkb24ndCB3YW50IG9uZSBvZiBubyBvcHRpb25zIGluIGl0Li4uCiAgICAgICAgICAgICBt
X2xpc3RJdGVtcy5yZXNpemUobV9saXN0SXRlbXMuc2l6ZSgpKzEpOwogICAgICAgICAgICAgbV9s
aXN0SXRlbXNbbV9saXN0SXRlbXMuc2l6ZSgpLTFdID0gc3RhdGljX2Nhc3Q8SFRNTEdlbmVyaWNG
b3JtRWxlbWVudEltcGwqPihjdXJyZW50KTsKICAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50
LT5maXJzdENoaWxkKCk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGN1cnJlbnQtPmlkKCkgPT0g
SURfT1BUSU9OKSB7CisgICAgICAgIGlmIChjdXJyZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
b3B0aW9uKCkpKSB7CiAgICAgICAgICAgICBtX2xpc3RJdGVtcy5yZXNpemUobV9saXN0SXRlbXMu
c2l6ZSgpKzEpOwogICAgICAgICAgICAgbV9saXN0SXRlbXNbbV9saXN0SXRlbXMuc2l6ZSgpLTFd
ID0gc3RhdGljX2Nhc3Q8SFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwqPihjdXJyZW50KTsKICAg
ICAgICAgICAgIGlmICghZm91bmRTZWxlY3RlZCAmJiAhbV9tdWx0aXBsZSAmJiBtX3NpemUgPD0g
MSkgewpAQCAtMjk2NCw3ICsyOTUyLDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudEltcGw6OnJl
c2V0KCkKICAgICBRTWVtQXJyYXk8SFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwqPiBpdGVtcyA9
IGxpc3RJdGVtcygpOwogICAgIHVpbnQgaTsKICAgICBmb3IgKGkgPSAwOyBpIDwgaXRlbXMuc2l6
ZSgpOyBpKyspIHsKLSAgICAgICAgaWYgKGl0ZW1zW2ldLT5pZCgpID09IElEX09QVElPTikgewor
ICAgICAgICBpZiAoaXRlbXNbaV0tPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9wdGlvbigpKSkg
ewogICAgICAgICAgICAgSFRNTE9wdGlvbkVsZW1lbnRJbXBsICpvcHRpb24gPSBzdGF0aWNfY2Fz
dDxIVE1MT3B0aW9uRWxlbWVudEltcGwqPihpdGVtc1tpXSk7CiAgICAgICAgICAgICBib29sIHNl
bGVjdGVkID0gKCFvcHRpb24tPmdldEF0dHJpYnV0ZShBVFRSX1NFTEVDVEVEKS5pc051bGwoKSk7
CiAgICAgICAgICAgICBvcHRpb24tPnNldFNlbGVjdGVkKHNlbGVjdGVkKTsKQEAgLTI5ODIsNyAr
Mjk3MCw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnRJbXBsOjpub3RpZnlPcHRpb24KICAgICAg
ICAgUU1lbUFycmF5PEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKj4gaXRlbXMgPSBsaXN0SXRl
bXMoKTsKICAgICAgICAgdWludCBpOwogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaXRlbXMuc2l6
ZSgpOyBpKyspIHsKLSAgICAgICAgICAgIGlmIChpdGVtc1tpXS0+aWQoKSA9PSBJRF9PUFRJT04p
CisgICAgICAgICAgICBpZiAoaXRlbXNbaV0tPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9wdGlv
bigpKSkKICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudEltcGwq
PihpdGVtc1tpXSktPm1fc2VsZWN0ZWQgPSAoaXRlbXNbaV0gPT0gc2VsZWN0ZWRPcHRpb24pOwog
ICAgICAgICB9CiAgICAgfQpAQCAtMzAyOSw3ICszMDE3LDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxl
bWVudEltcGw6OnNldFNpemUobG9uZwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MS2V5Z2Vu
RWxlbWVudEltcGw6OkhUTUxLZXlnZW5FbGVtZW50SW1wbChEb2N1bWVudFB0ciogZG9jLCBIVE1M
Rm9ybUVsZW1lbnRJbXBsKiBmKQotICAgIDogSFRNTFNlbGVjdEVsZW1lbnRJbXBsKGRvYywgZikK
KyAgICA6IEhUTUxTZWxlY3RFbGVtZW50SW1wbChIVE1MTmFtZXM6OmtleWdlbigpLCBkb2MsIGYp
CiB7CiAgICAgUVN0cmluZ0xpc3Qga2V5cyA9IEtTU0xLZXlHZW46OnN1cHBvcnRlZEtleVNpemVz
KCk7CiAgICAgZm9yIChRU3RyaW5nTGlzdDo6SXRlcmF0b3IgaSA9IGtleXMuYmVnaW4oKTsgaSAh
PSBrZXlzLmVuZCgpOyArK2kpIHsKQEAgLTMwMzksMTEgKzMwMjcsNiBAQCBIVE1MS2V5Z2VuRWxl
bWVudEltcGw6OkhUTUxLZXlnZW5FbGVtZW50CiAgICAgfQogfQogCi1Ob2RlSW1wbDo6SWQgSFRN
TEtleWdlbkVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0tFWUdFTjsK
LX0KLQogRE9NU3RyaW5nIEhUTUxLZXlnZW5FbGVtZW50SW1wbDo6dHlwZSgpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuICJrZXlnZW4iOwpAQCAtMzA5OCw3ICszMDgxLDcgQEAgYm9vbCBIVE1MS2V5Z2Vu
RWxlbWVudEltcGw6OmFwcGVuZEZvcm1EYQogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MT3B0
R3JvdXBFbGVtZW50SW1wbDo6SFRNTE9wdEdyb3VwRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRv
YywgSFRNTEZvcm1FbGVtZW50SW1wbCAqZikKLSAgICA6IEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJ
bXBsKGRvYywgZikKKyAgICA6IEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKEhUTUxOYW1lczo6
b3B0Z3JvdXAoKSwgZG9jLCBmKQogewogfQogCkBAIC0zMTExLDExICszMDk0LDYgQEAgYm9vbCBI
VE1MT3B0R3JvdXBFbGVtZW50SW1wbDo6aXNGb2N1c2FibAogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotTm9kZUltcGw6OklkIEhUTUxPcHRHcm91cEVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIElEX09QVEdST1VQOwotfQotCiBET01TdHJpbmcgSFRNTE9wdEdyb3VwRWxlbWVu
dEltcGw6OnR5cGUoKSBjb25zdAogewogICAgIHJldHVybiAib3B0Z3JvdXAiOwpAQCAtMzE2OSw3
ICszMTQ3LDcgQEAgdm9pZCBIVE1MT3B0R3JvdXBFbGVtZW50SW1wbDo6cGFyc2VNYXBwZQogdm9p
ZCBIVE1MT3B0R3JvdXBFbGVtZW50SW1wbDo6cmVjYWxjU2VsZWN0T3B0aW9ucygpCiB7CiAgICAg
Tm9kZUltcGwgKnNlbGVjdCA9IHBhcmVudE5vZGUoKTsKLSAgICB3aGlsZSAoc2VsZWN0ICYmIHNl
bGVjdC0+aWQoKSAhPSBJRF9TRUxFQ1QpCisgICAgd2hpbGUgKHNlbGVjdCAmJiAhc2VsZWN0LT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6c2VsZWN0KCkpKQogICAgICAgICBzZWxlY3QgPSBzZWxlY3Qt
PnBhcmVudE5vZGUoKTsKICAgICBpZiAoc2VsZWN0KQogICAgICAgICBzdGF0aWNfY2FzdDxIVE1M
U2VsZWN0RWxlbWVudEltcGwqPihzZWxlY3QpLT5zZXRSZWNhbGNMaXN0SXRlbXMoKTsKQEAgLTMx
ODgsNyArMzE2Niw3IEBAIHZvaWQgSFRNTE9wdEdyb3VwRWxlbWVudEltcGw6OnNldExhYmVsKGMK
IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogSFRNTE9wdGlvbkVsZW1lbnRJbXBsOjpIVE1MT3B0aW9u
RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgSFRNTEZvcm1FbGVtZW50SW1wbCAqZikKLSAg
ICA6IEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKGRvYywgZikKKyAgICA6IEhUTUxHZW5lcmlj
Rm9ybUVsZW1lbnRJbXBsKEhUTUxOYW1lczo6b3B0aW9uKCksIGRvYywgZikKIHsKICAgICBtX3Nl
bGVjdGVkID0gZmFsc2U7CiB9CkBAIC0zMTk4LDExICszMTc2LDYgQEAgYm9vbCBIVE1MT3B0aW9u
RWxlbWVudEltcGw6OmlzRm9jdXNhYmxlKAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotTm9kZUlt
cGw6OklkIEhUTUxPcHRpb25FbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJ
RF9PUFRJT047Ci19Ci0KIERPTVN0cmluZyBIVE1MT3B0aW9uRWxlbWVudEltcGw6OnR5cGUoKSBj
b25zdAogewogICAgIHJldHVybiAib3B0aW9uIjsKQEAgLTMyNDksOCArMzIyMiw3IEBAIGxvbmcg
SFRNTE9wdGlvbkVsZW1lbnRJbXBsOjppbmRleCgpIGNvbnMKICAgICBpbnQgbCA9IGl0ZW1zLmNv
dW50KCk7CiAgICAgaW50IG9wdGlvbkluZGV4ID0gMDsKICAgICBmb3IoaW50IGkgPSAwOyBpIDwg
bDsgaSsrKSB7Ci0gICAgICAgIGlmKGl0ZW1zW2ldLT5pZCgpID09IElEX09QVElPTikKLSAgICAg
ICAgeworICAgICAgICBpZiAoaXRlbXNbaV0tPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9wdGlv
bigpKSkgewogICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50SW1w
bCo+KGl0ZW1zW2ldKSA9PSB0aGlzKQogICAgICAgICAgICAgICAgIHJldHVybiBvcHRpb25JbmRl
eDsKICAgICAgICAgICAgIG9wdGlvbkluZGV4Kys7CkBAIC0zMzE1LDcgKzMyODcsNyBAQCB2b2lk
IEhUTUxPcHRpb25FbGVtZW50SW1wbDo6Y2hpbGRyZW5DaGFuCiBIVE1MU2VsZWN0RWxlbWVudElt
cGwgKkhUTUxPcHRpb25FbGVtZW50SW1wbDo6Z2V0U2VsZWN0KCkgY29uc3QKIHsKICAgICBOb2Rl
SW1wbCAqc2VsZWN0ID0gcGFyZW50Tm9kZSgpOwotICAgIHdoaWxlIChzZWxlY3QgJiYgc2VsZWN0
LT5pZCgpICE9IElEX1NFTEVDVCkKKyAgICB3aGlsZSAoc2VsZWN0ICYmICFzZWxlY3QtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjpzZWxlY3QoKSkpCiAgICAgICAgIHNlbGVjdCA9IHNlbGVjdC0+cGFy
ZW50Tm9kZSgpOwogICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MU2VsZWN0RWxlbWVudEltcGwq
PihzZWxlY3QpOwogfQpAQCAtMzM0Myw3ICszMzE1LDcgQEAgdm9pZCBIVE1MT3B0aW9uRWxlbWVu
dEltcGw6OnNldExhYmVsKGNvbgogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MVGV4dEFyZWFF
bGVtZW50SW1wbDo6SFRNTFRleHRBcmVhRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgSFRN
TEZvcm1FbGVtZW50SW1wbCAqZikKLSAgICA6IEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKGRv
YywgZiksIG1fdmFsdWVJc1ZhbGlkKGZhbHNlKSwgbV92YWx1ZU1hdGNoZXNSZW5kZXJlcihmYWxz
ZSkKKyAgICA6IEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKEhUTUxOYW1lczo6dGV4dGFyZWEo
KSwgZG9jLCBmKSwgbV92YWx1ZUlzVmFsaWQoZmFsc2UpLCBtX3ZhbHVlTWF0Y2hlc1JlbmRlcmVy
KGZhbHNlKQogewogICAgIC8vIERURCByZXF1aXJlcyByb3dzICYgY29scyBiZSBzcGVjaWZpZWQs
IGJ1dCB3ZSB3aWxsIHByb3ZpZGUgcmVhc29uYWJsZSBkZWZhdWx0cwogICAgIG1fcm93cyA9IDI7
CkBAIC0zMzU2LDExICszMzI4LDYgQEAgSFRNTFRleHRBcmVhRWxlbWVudEltcGw6On5IVE1MVGV4
dEFyZWFFbAogICAgIGlmIChnZXREb2N1bWVudCgpKSBnZXREb2N1bWVudCgpLT5kZXJlZ2lzdGVy
TWFpbnRhaW5zU3RhdGUodGhpcyk7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MVGV4dEFyZWFFbGVt
ZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9URVhUQVJFQTsKLX0KLQogRE9N
U3RyaW5nIEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBsOjp0eXBlKCkgY29uc3QKIHsKICAgICByZXR1
cm4gInRleHRhcmVhIjsKQEAgLTM1NzYsMTcgKzM1NDMsMTIgQEAgdm9pZCBIVE1MVGV4dEFyZWFF
bGVtZW50SW1wbDo6c2V0Um93cyhsbwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MSXNJbmRl
eEVsZW1lbnRJbXBsOjpIVE1MSXNJbmRleEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIEhU
TUxGb3JtRWxlbWVudEltcGwgKmYpCi0gICAgOiBIVE1MSW5wdXRFbGVtZW50SW1wbChkb2MsIGYp
CisgICAgOiBIVE1MSW5wdXRFbGVtZW50SW1wbChIVE1MTmFtZXM6OmlzaW5kZXgoKSwgZG9jLCBm
KQogewogICAgIG1fdHlwZSA9IFRFWFQ7CiAgICAgc2V0T3ZlcnJpZGVOYW1lKCJpc2luZGV4Iik7
CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MSXNJbmRleEVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIElEX0lTSU5ERVg7Ci19Ci0KIHZvaWQgSFRNTElzSW5kZXhFbGVtZW50SW1w
bDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCogYXR0cikKIHsKICAg
ICBzd2l0Y2goYXR0ci0+aWQoKSkKSW5kZXg6IGtodG1sL2h0bWwvaHRtbF9mb3JtaW1wbC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbF9mb3Jt
aW1wbC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjc0CmRpZmYgLXUgLXAgLXIxLjc0IGtodG1s
L2h0bWwvaHRtbF9mb3JtaW1wbC5oCi0tLSBraHRtbC9odG1sL2h0bWxfZm9ybWltcGwuaAkyMCBK
dW4gMjAwNSAwNTo1MjoxNiAtMDAwMAkxLjc0CisrKyBraHRtbC9odG1sL2h0bWxfZm9ybWltcGwu
aAkyNCBKdW4gMjAwNSAwMzoxMDoxNiAtMDAwMApAQCAtNjcsNyArNjcsOCBAQCBwdWJsaWM6CiAg
ICAgSFRNTEZvcm1FbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKTsKICAgICB2aXJ0dWFsIH5I
VE1MRm9ybUVsZW1lbnRJbXBsKCk7CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CisgICAg
dmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4g
VGFnU3RhdHVzUmVxdWlyZWQ7IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0
IHsgcmV0dXJuIDM7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBhdHRhY2goKTsKICAgICB2aXJ0dWFs
IHZvaWQgZGV0YWNoKCk7CkBAIC0xNjEsOSArMTYyLDEyIEBAIGNsYXNzIEhUTUxHZW5lcmljRm9y
bUVsZW1lbnRJbXBsIDogcHVibGkKICAgICBmcmllbmQgY2xhc3Mga2h0bWw6OlJlbmRlckZvcm1F
bGVtZW50OwogCiBwdWJsaWM6Ci0gICAgSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwoRG9jdW1l
bnRQdHIgKmRvYywgSFRNTEZvcm1FbGVtZW50SW1wbCAqZiA9IDApOworICAgIEhUTUxHZW5lcmlj
Rm9ybUVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50UHRy
ICpkb2MsIEhUTUxGb3JtRWxlbWVudEltcGwgKmYgPSAwKTsKICAgICB2aXJ0dWFsIH5IVE1MR2Vu
ZXJpY0Zvcm1FbGVtZW50SW1wbCgpOwogCisgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRh
Z1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzUmVxdWlyZWQ7IH0KKyAgICB2
aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDE7IH0KKwogICAgIEhUTUxG
b3JtRWxlbWVudEltcGwgKmZvcm0oKSB7IHJldHVybiBtX2Zvcm07IH0KIAogICAgIHZpcnR1YWwg
RE9NU3RyaW5nIHR5cGUoKSBjb25zdCA9IDA7CkBAIC0yMzUsNyArMjM5LDYgQEAgY2xhc3MgSFRN
TEJ1dHRvbkVsZW1lbnRJbXBsIDogcHVibGljIEhUTQogewogcHVibGljOgogICAgIEhUTUxCdXR0
b25FbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmID0g
MCk7Ci0KICAgICB2aXJ0dWFsIH5IVE1MQnV0dG9uRWxlbWVudEltcGwoKTsKIAogICAgIGVudW0g
dHlwZUVudW0gewpAQCAtMjQ0LDcgKzI0Nyw2IEBAIHB1YmxpYzoKICAgICAgICAgQlVUVE9OCiAg
ICAgfTsKIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKICAgICBET01TdHJpbmcgdHlwZSgp
IGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0
dHJpYnV0ZUltcGwgKmF0dHIpOwpAQCAtMjgwLDExICsyODIsMTAgQEAgY2xhc3MgSFRNTEZpZWxk
U2V0RWxlbWVudEltcGwgOiBwdWJsaWMgSAogewogcHVibGljOgogICAgIEhUTUxGaWVsZFNldEVs
ZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIEhUTUxGb3JtRWxlbWVudEltcGwgKmYgPSAwKTsK
LQogICAgIHZpcnR1YWwgfkhUTUxGaWVsZFNldEVsZW1lbnRJbXBsKCk7Ci0KLSAgICB2aXJ0dWFs
IElkIGlkKCkgY29uc3Q7CiAgICAgCisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25z
dCB7IHJldHVybiAzOyB9CisKICAgICB2aXJ0dWFsIGJvb2wgaXNGb2N1c2FibGUoKSBjb25zdDsK
ICAgICAKICAgICB2aXJ0dWFsIGtodG1sOjpSZW5kZXJPYmplY3QgKmNyZWF0ZVJlbmRlcmVyKFJl
bmRlckFyZW5hICosIGtodG1sOjpSZW5kZXJTdHlsZSAqKTsKQEAgLTMyNiw5ICszMjcsMTIgQEAg
cHVibGljOgogICAgIH07CiAKICAgICBIVE1MSW5wdXRFbGVtZW50SW1wbChEb2N1bWVudFB0ciAq
ZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmID0gMCk7CisgICAgSFRNTElucHV0RWxlbWVudElt
cGwoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnRQdHIgKmRvYywgSFRNTEZv
cm1FbGVtZW50SW1wbCAqZiA9IDApOwogICAgIHZpcnR1YWwgfkhUTUxJbnB1dEVsZW1lbnRJbXBs
KCk7CisgICAgdm9pZCBpbml0KCk7CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CisgICAg
dmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4g
VGFnU3RhdHVzRm9yYmlkZGVuOyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25z
dCB7IHJldHVybiAwOyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNFbnVtZXJhdGFibGUoKSBjb25z
dCB7IHJldHVybiBpbnB1dFR5cGUoKSAhPSBJTUFHRTsgfQogCkBAIC00NTEsOSArNDU1LDkgQEAg
cHVibGljOgogICAgIEhUTUxMYWJlbEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpOwogICAg
IHZpcnR1YWwgfkhUTUxMYWJlbEVsZW1lbnRJbXBsKCk7CiAKKyAgICB2aXJ0dWFsIGludCB0YWdQ
cmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDU7IH0KKwogICAgIHZpcnR1YWwgYm9vbCBpc0ZvY3Vz
YWJsZSgpIGNvbnN0OwotICAgIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKIAogICAgIHZp
cnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICphdHRy
KTsKIApAQCAtNDg4LDcgKzQ5Miw2IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCBpc0Zv
Y3VzYWJsZSgpIGNvbnN0OwogICAgIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKICAgICB2
aXJ0dWFsIGtodG1sOjpSZW5kZXJPYmplY3QgKmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hICos
IGtodG1sOjpSZW5kZXJTdHlsZSAqKTsKIAogICAgIHZpcnR1YWwgRE9NU3RyaW5nIHR5cGUoKSBj
b25zdDsKQEAgLTUxNyw5ICs1MjAsMTIgQEAgY2xhc3MgSFRNTFNlbGVjdEVsZW1lbnRJbXBsIDog
cHVibGljIEhUTQogCiBwdWJsaWM6CiAgICAgSFRNTFNlbGVjdEVsZW1lbnRJbXBsKERvY3VtZW50
UHRyICpkb2MsIEhUTUxGb3JtRWxlbWVudEltcGwgKmYgPSAwKTsKKyAgICBIVE1MU2VsZWN0RWxl
bWVudEltcGwoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnRQdHIgKmRvYywg
SFRNTEZvcm1FbGVtZW50SW1wbCAqZiA9IDApOwogICAgIH5IVE1MU2VsZWN0RWxlbWVudEltcGwo
KTsKKyAgICB2b2lkIGluaXQoKTsKKworICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29u
c3QgeyByZXR1cm4gNjsgfQogCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwogICAgIERPTVN0
cmluZyB0eXBlKCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgcmVjYWxjU3R5bGUoIFN0eWxl
Q2hhbmdlICk7CkBAIC02MDYsNyArNjEyLDcgQEAgY2xhc3MgSFRNTEtleWdlbkVsZW1lbnRJbXBs
IDogcHVibGljIEhUTQogcHVibGljOgogICAgIEhUTUxLZXlnZW5FbGVtZW50SW1wbChEb2N1bWVu
dFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmID0gMCk7CiAKLSAgICB2aXJ0dWFsIElk
IGlkKCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVy
biAwOyB9CiAKICAgICBET01TdHJpbmcgdHlwZSgpIGNvbnN0OwogCkBAIC02MjgsNyArNjM0LDYg
QEAgcHVibGljOgogICAgIEhUTUxPcHRHcm91cEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2Ms
IEhUTUxGb3JtRWxlbWVudEltcGwgKmYgPSAwKTsKICAgICB2aXJ0dWFsIH5IVE1MT3B0R3JvdXBF
bGVtZW50SW1wbCgpOwogCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwogICAgIERPTVN0cmlu
ZyB0eXBlKCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNGb2N1c2FibGUoKSBjb25zdDsK
QEAgLTY1Niw5ICs2NjEsMTEgQEAgY2xhc3MgSFRNTE9wdGlvbkVsZW1lbnRJbXBsIDogcHVibGlj
IEhUTQogcHVibGljOgogICAgIEhUTUxPcHRpb25FbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9j
LCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmID0gMCk7CiAKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0
dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNPcHRpb25hbDsg
fQorICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMjsgfQorCiAg
ICAgdmlydHVhbCBib29sIGlzRm9jdXNhYmxlKCkgY29uc3Q7Ci0gICAgCi0gICAgdmlydHVhbCBJ
ZCBpZCgpIGNvbnN0OworCiAgICAgRE9NU3RyaW5nIHR5cGUoKSBjb25zdDsKIAogICAgIERPTVN0
cmluZyB0ZXh0KCkgY29uc3Q7CkBAIC03MDYsOCArNzEzLDYgQEAgcHVibGljOgogICAgIEhUTUxU
ZXh0QXJlYUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIEhUTUxGb3JtRWxlbWVudEltcGwg
KmYgPSAwKTsKICAgICB+SFRNTFRleHRBcmVhRWxlbWVudEltcGwoKTsKIAotICAgIHZpcnR1YWwg
SWQgaWQoKSBjb25zdDsKLQogICAgIGxvbmcgY29scygpIGNvbnN0IHsgcmV0dXJuIG1fY29sczsg
fQogCiAgICAgbG9uZyByb3dzKCkgY29uc3QgeyByZXR1cm4gbV9yb3dzOyB9CkBAIC03NzAsNyAr
Nzc1LDggQEAgY2xhc3MgSFRNTElzSW5kZXhFbGVtZW50SW1wbCA6IHB1YmxpYyBIVAogcHVibGlj
OgogICAgIEhUTUxJc0luZGV4RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgSFRNTEZvcm1F
bGVtZW50SW1wbCAqZiA9IDApOwogCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OworICAgIHZp
cnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRh
Z1N0YXR1c0ZvcmJpZGRlbjsgfQorICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3Qg
eyByZXR1cm4gMDsgfQogCiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1h
cHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIpOwogCkluZGV4OiBraHRtbC9odG1sL2h0bWxfaGVhZGlt
cGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwv
aHRtbF9oZWFkaW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNTAKZGlmZiAtdSAtcCAt
cjEuNTAga2h0bWwvaHRtbC9odG1sX2hlYWRpbXBsLmNwcAotLS0ga2h0bWwvaHRtbC9odG1sX2hl
YWRpbXBsLmNwcAkyMiBKdW4gMjAwNSAxODoyMjowMSAtMDAwMAkxLjUwCisrKyBraHRtbC9odG1s
L2h0bWxfaGVhZGltcGwuY3BwCTI0IEp1biAyMDA1IDAzOjEwOjE4IC0wMDAwCkBAIC00Niw3ICs0
Niw3IEBAIHVzaW5nIG5hbWVzcGFjZSBET007CiB1c2luZyBuYW1lc3BhY2Uga2h0bWw7CiAKIEhU
TUxCYXNlRWxlbWVudEltcGw6OkhUTUxCYXNlRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykK
LSAgICA6IEhUTUxFbGVtZW50SW1wbChkb2MpCisgICAgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5h
bWVzOjpiYXNlKCksIGRvYykKIHsKIH0KIApAQCAtNTQsMTEgKzU0LDYgQEAgSFRNTEJhc2VFbGVt
ZW50SW1wbDo6fkhUTUxCYXNlRWxlbWVudEltcAogewogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTEJh
c2VFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9CQVNFOwotfQotCiB2
b2lkIEhUTUxCYXNlRWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJp
YnV0ZUltcGwgKmF0dHIpCiB7CiAgICAgc3dpdGNoKGF0dHItPmlkKCkpCkBAIC0xMTksNyArMTE0
LDcgQEAgdm9pZCBIVE1MQmFzZUVsZW1lbnRJbXBsOjpzZXRUYXJnZXQoY29ucwogLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQogCiBIVE1MTGlua0VsZW1lbnRJbXBsOjpIVE1MTGlua0VsZW1lbnRJbXBsKERv
Y3VtZW50UHRyICpkb2MpCi0gICAgOiBIVE1MRWxlbWVudEltcGwoZG9jKQorICAgIDogSFRNTEVs
ZW1lbnRJbXBsKEhUTUxOYW1lczo6bGluaygpLCBkb2MpCiB7CiAgICAgbV9zaGVldCA9IDA7CiAg
ICAgbV9sb2FkaW5nID0gZmFsc2U7CkBAIC0xMzQsMTEgKzEyOSw2IEBAIEhUTUxMaW5rRWxlbWVu
dEltcGw6On5IVE1MTGlua0VsZW1lbnRJbXAKICAgICBpZihtX2NhY2hlZFNoZWV0KSBtX2NhY2hl
ZFNoZWV0LT5kZXJlZih0aGlzKTsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxMaW5rRWxlbWVudElt
cGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfTElOSzsKLX0KLQogdm9pZCBIVE1MTGlu
a0VsZW1lbnRJbXBsOjpzZXREaXNhYmxlZFN0YXRlKGJvb2wgX2Rpc2FibGVkKQogewogICAgIGlu
dCBvbGREaXNhYmxlZFN0YXRlID0gbV9kaXNhYmxlZFN0YXRlOwpAQCAtNDIzLDcgKzQxMyw3IEBA
IHZvaWQgSFRNTExpbmtFbGVtZW50SW1wbDo6c2V0VHlwZShjb25zdCAKIAogLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQogCi1IVE1MTWV0YUVsZW1lbnRJbXBsOjpIVE1MTWV0YUVsZW1lbnRJbXBsKERvY3Vt
ZW50UHRyICpkb2MpIDogSFRNTEVsZW1lbnRJbXBsKGRvYykKK0hUTUxNZXRhRWxlbWVudEltcGw6
OkhUTUxNZXRhRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykgOiBIVE1MRWxlbWVudEltcGwo
SFRNTE5hbWVzOjptZXRhKCksIGRvYykKIHsKIH0KIApAQCAtNDMxLDExICs0MjEsNiBAQCBIVE1M
TWV0YUVsZW1lbnRJbXBsOjp+SFRNTE1ldGFFbGVtZW50SW1wCiB7CiB9CiAKLU5vZGVJbXBsOjpJ
ZCBIVE1MTWV0YUVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX01FVEE7
Ci19Ci0KIHZvaWQgSFRNTE1ldGFFbGVtZW50SW1wbDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFw
cGVkQXR0cmlidXRlSW1wbCAqYXR0cikKIHsKICAgICBzd2l0Y2goYXR0ci0+aWQoKSkKQEAgLTUx
Miw3ICs0OTcsNyBAQCB2b2lkIEhUTUxNZXRhRWxlbWVudEltcGw6OnNldFNjaGVtZShjb25zCiAv
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxTY3JpcHRFbGVtZW50SW1wbDo6SFRNTFNjcmlwdEVs
ZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0gICAgOiBIVE1MRWxlbWVudEltcGwoZG9jKSwg
bV9jYWNoZWRTY3JpcHQoMCksIG1fY3JlYXRlZEJ5UGFyc2VyKGZhbHNlKSwgbV9ldmFsdWF0ZWQo
ZmFsc2UpCisgICAgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjpzY3JpcHQoKSwgZG9jKSwg
bV9jYWNoZWRTY3JpcHQoMCksIG1fY3JlYXRlZEJ5UGFyc2VyKGZhbHNlKSwgbV9ldmFsdWF0ZWQo
ZmFsc2UpCiB7CiB9CiAKQEAgLTUyMiwxMSArNTA3LDYgQEAgSFRNTFNjcmlwdEVsZW1lbnRJbXBs
Ojp+SFRNTFNjcmlwdEVsZW1lbgogICAgICAgICBtX2NhY2hlZFNjcmlwdC0+ZGVyZWYodGhpcyk7
CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MU2NyaXB0RWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gSURfU0NSSVBUOwotfQotCiBib29sIEhUTUxTY3JpcHRFbGVtZW50SW1wbDo6
aXNVUkxBdHRyaWJ1dGUoQXR0cmlidXRlSW1wbCAqYXR0cikgY29uc3QKIHsKICAgICByZXR1cm4g
YXR0ci0+aWQoKSA9PSBBVFRSX1NSQzsKQEAgLTY5Nyw3ICs2NzcsNyBAQCB2b2lkIEhUTUxTY3Jp
cHRFbGVtZW50SW1wbDo6c2V0VHlwZShjb25zCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSFRN
TFN0eWxlRWxlbWVudEltcGw6OkhUTUxTdHlsZUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2Mp
IDogSFRNTEVsZW1lbnRJbXBsKGRvYykKK0hUTUxTdHlsZUVsZW1lbnRJbXBsOjpIVE1MU3R5bGVF
bGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKSA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6
OnN0eWxlKCksIGRvYykKIHsKICAgICBtX3NoZWV0ID0gMDsKICAgICBtX2xvYWRpbmcgPSBmYWxz
ZTsKQEAgLTcwOCwxMSArNjg4LDYgQEAgSFRNTFN0eWxlRWxlbWVudEltcGw6On5IVE1MU3R5bGVF
bGVtZW50SQogICAgIGlmKG1fc2hlZXQpIG1fc2hlZXQtPmRlcmVmKCk7CiB9CiAKLU5vZGVJbXBs
OjpJZCBIVE1MU3R5bGVFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9T
VFlMRTsKLX0KLQogLy8gb3RoZXIgc3R1ZmYuLi4KIHZvaWQgSFRNTFN0eWxlRWxlbWVudEltcGw6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIpCiB7CkBAIC04
MjQsNyArNzk5LDcgQEAgdm9pZCBIVE1MU3R5bGVFbGVtZW50SW1wbDo6c2V0VHlwZShjb25zdAog
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MVGl0bGVFbGVtZW50SW1wbDo6SFRNTFRpdGxlRWxl
bWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50SW1wbChkb2MpLCBt
X3RpdGxlKCIiKQorICAgIDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6dGl0bGUoKSwgZG9j
KSwgbV90aXRsZSgiIikKIHsKIH0KIApAQCAtODMyLDExICs4MDcsNiBAQCBIVE1MVGl0bGVFbGVt
ZW50SW1wbDo6fkhUTUxUaXRsZUVsZW1lbnRJCiB7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MVGl0
bGVFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9USVRMRTsKLX0KLQog
dm9pZCBIVE1MVGl0bGVFbGVtZW50SW1wbDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKQogewogICAg
IEhUTUxFbGVtZW50SW1wbDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKSW5kZXg6IGtodG1sL2h0
bWwvaHRtbF9oZWFkaW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3Jl
L2todG1sL2h0bWwvaHRtbF9oZWFkaW1wbC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIwCmRp
ZmYgLXUgLXAgLXIxLjIwIGtodG1sL2h0bWwvaHRtbF9oZWFkaW1wbC5oCi0tLSBraHRtbC9odG1s
L2h0bWxfaGVhZGltcGwuaAkxOSBKdW4gMjAwNSAwNTo0NDoyOCAtMDAwMAkxLjIwCisrKyBraHRt
bC9odG1sL2h0bWxfaGVhZGltcGwuaAkyNCBKdW4gMjAwNSAwMzoxMDoxOSAtMDAwMApAQCAtNDks
MTAgKzQ5LDEyIEBAIHB1YmxpYzoKICAgICBIVE1MQmFzZUVsZW1lbnRJbXBsKERvY3VtZW50UHRy
ICpkb2MpOwogICAgIH5IVE1MQmFzZUVsZW1lbnRJbXBsKCk7CiAKKyAgICB2aXJ0dWFsIEhUTUxU
YWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNGb3Ji
aWRkZW47IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDA7
IH0KKwogICAgIERPTVN0cmluZyBocmVmKCkgY29uc3QgeyByZXR1cm4gbV9ocmVmOyB9CiAgICAg
RE9NU3RyaW5nIHRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0OyB9CiAKLSAgICB2aXJ0
dWFsIElkIGlkKCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRl
KE1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIpOwogICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZElu
dG9Eb2N1bWVudCgpOwogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkRnJvbURvY3VtZW50KCk7CkBA
IC03Nyw3ICs3OSw4IEBAIHB1YmxpYzoKICAgICBIVE1MTGlua0VsZW1lbnRJbXBsKERvY3VtZW50
UHRyICpkb2MpOwogICAgIH5IVE1MTGlua0VsZW1lbnRJbXBsKCk7CiAKLSAgICB2aXJ0dWFsIElk
IGlkKCkgY29uc3Q7CisgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50
KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzRm9yYmlkZGVuOyB9CisgICAgdmlydHVhbCBpbnQg
dGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAwOyB9CiAKICAgICBib29sIGRpc2FibGVkKCkg
Y29uc3Q7CiAgICAgdm9pZCBzZXREaXNhYmxlZChib29sKTsKQEAgLTE1MiwxMCArMTU1LDExIEBA
IGNsYXNzIEhUTUxNZXRhRWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTEUKIHsKIHB1YmxpYzoKICAg
ICBIVE1MTWV0YUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpOwotCiAgICAgfkhUTUxNZXRh
RWxlbWVudEltcGwoKTsKIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0
dXNGb3JiaWRkZW47IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0
dXJuIDA7IH0KKwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRB
dHRyaWJ1dGVJbXBsICphdHRyKTsKICAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJbnRvRG9jdW1l
bnQoKTsKIApAQCAtMTg1LDEzICsxODksMTYgQEAgY2xhc3MgSFRNTFNjcmlwdEVsZW1lbnRJbXBs
IDogcHVibGljIEhUTQogcHVibGljOgogICAgIEhUTUxTY3JpcHRFbGVtZW50SW1wbChEb2N1bWVu
dFB0ciAqZG9jKTsKICAgICB+SFRNTFNjcmlwdEVsZW1lbnRJbXBsKCk7Ci0gICAgCisKKyAgICB2
aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBU
YWdTdGF0dXNSZXF1aXJlZDsgfQorICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3Qg
eyByZXR1cm4gMTsgfQorCiAgICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b0RvY3VtZW50KCk7
CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZWRGcm9tRG9jdW1lbnQoKTsKICAgICB2aXJ0dWFsIHZv
aWQgbm90aWZ5RmluaXNoZWQoa2h0bWw6OkNhY2hlZE9iamVjdCAqZmluaXNoZWRPYmopOworCiAg
ICAgdmlydHVhbCB2b2lkIGNoaWxkcmVuQ2hhbmdlZCgpOwotICAgIAotICAgIHZpcnR1YWwgSWQg
aWQoKSBjb25zdDsKKwogICAgIHZpcnR1YWwgYm9vbCBpc1VSTEF0dHJpYnV0ZShBdHRyaWJ1dGVJ
bXBsICphdHRyKSBjb25zdDsKIAogICAgIHZvaWQgc2V0Q3JlYXRlZEJ5UGFyc2VyKGJvb2wgY3Jl
YXRlZEJ5UGFyc2VyKSB7IG1fY3JlYXRlZEJ5UGFyc2VyID0gY3JlYXRlZEJ5UGFyc2VyOyB9CkBA
IC0yMzMsNyArMjQwLDggQEAgcHVibGljOgogICAgIEhUTUxTdHlsZUVsZW1lbnRJbXBsKERvY3Vt
ZW50UHRyICpkb2MpOwogICAgIH5IVE1MU3R5bGVFbGVtZW50SW1wbCgpOwogCi0gICAgdmlydHVh
bCBJZCBpZCgpIGNvbnN0OworICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJl
bWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9CisgICAgdmlydHVhbCBp
bnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAxOyB9CiAKICAgICBTdHlsZVNoZWV0SW1w
bCAqc2hlZXQoKSBjb25zdCB7IHJldHVybiBtX3NoZWV0OyB9CiAKQEAgLTI3MSw4ICsyNzksNiBA
QCBwdWJsaWM6CiAKICAgICB+SFRNTFRpdGxlRWxlbWVudEltcGwoKTsKIAotICAgIHZpcnR1YWwg
SWQgaWQoKSBjb25zdDsKLQogICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9Eb2N1bWVudCgp
OwogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkRnJvbURvY3VtZW50KCk7CiAgICAgdmlydHVhbCB2
b2lkIGNoaWxkcmVuQ2hhbmdlZCgpOwpJbmRleDoga2h0bWwvaHRtbC9odG1sX2ltYWdlaW1wbC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1s
X2ltYWdlaW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNDMKZGlmZiAtdSAtcCAtcjEu
NDMga2h0bWwvaHRtbC9odG1sX2ltYWdlaW1wbC5jcHAKLS0tIGtodG1sL2h0bWwvaHRtbF9pbWFn
ZWltcGwuY3BwCTIxIEp1biAyMDA1IDIyOjI3OjU1IC0wMDAwCTEuNDMKKysrIGtodG1sL2h0bWwv
aHRtbF9pbWFnZWltcGwuY3BwCTI0IEp1biAyMDA1IDAzOjEwOjE5IC0wMDAwCkBAIC01MSw3ICs1
MSw3IEBACiB1c2luZyBuYW1lc3BhY2UgRE9NOwogdXNpbmcgbmFtZXNwYWNlIGtodG1sOwogCi0v
LyNkZWZpbmUgSU5TVFJVTUVOVF9MQVlPVVRfU0NIRURVTElORyAxCisvLyAjZGVmaW5lIElOU1RS
VU1FTlRfTEFZT1VUX1NDSEVEVUxJTkcgMQogCiBIVE1MSW1hZ2VMb2FkZXI6OkhUTUxJbWFnZUxv
YWRlcihFbGVtZW50SW1wbCogZWx0KQogOm1fZWxlbWVudChlbHQpLCBtX2ltYWdlKDApLCBtX2Zp
cmVkTG9hZCh0cnVlKSwgbV9pbWFnZUNvbXBsZXRlKHRydWUpCkBAIC03NSw3ICs3NSw3IEBAIHZv
aWQgSFRNTEltYWdlTG9hZGVyOjp1cGRhdGVGcm9tRWxlbWVudCgKICAgICAgICAgcmV0dXJuOwog
CiAgICAgQXRvbWljU3RyaW5nIGF0dHI7Ci0gICAgaWYgKGVsZW1lbnQoKS0+aWQoKSA9PSBJRF9P
QkpFQ1QpCisgICAgaWYgKGVsZW1lbnQoKS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b2JqZWN0
KCkpKQogICAgICAgICBhdHRyID0gZWxlbWVudCgpLT5nZXRBdHRyaWJ1dGUoQVRUUl9EQVRBKTsK
ICAgICBlbHNlCiAgICAgICAgIGF0dHIgPSBlbGVtZW50KCktPmdldEF0dHJpYnV0ZShBVFRSX1NS
Qyk7CkBAIC04Niw2ICs4NiwxMCBAQCB2b2lkIEhUTUxJbWFnZUxvYWRlcjo6dXBkYXRlRnJvbUVs
ZW1lbnQoCiAgICAgICAgIG5ld0ltYWdlID0gZWxlbWVudCgpLT5nZXREb2N1bWVudCgpLT5kb2NM
b2FkZXIoKS0+cmVxdWVzdEltYWdlKGtodG1sOjpwYXJzZVVSTChhdHRyKSk7CiAKICAgICBpZiAo
bmV3SW1hZ2UgIT0gbV9pbWFnZSkgeworI2lmZGVmIElOU1RSVU1FTlRfTEFZT1VUX1NDSEVEVUxJ
TkcKKyAgICAgICAgaWYgKCFkb2N1bWVudC0+b3duZXJFbGVtZW50KCkgJiYgbmV3SW1hZ2UpCisg
ICAgICAgICAgICBwcmludGYoIkltYWdlIHJlcXVlc3RlZCBhdCAlZFxuIiwgZWxlbWVudCgpLT5n
ZXREb2N1bWVudCgpLT5lbGFwc2VkVGltZSgpKTsKKyNlbmRpZgogICAgICAgICBtX2ZpcmVkTG9h
ZCA9IGZhbHNlOwogICAgICAgICBtX2ltYWdlQ29tcGxldGUgPSBmYWxzZTsKICAgICAgICAgQ2Fj
aGVkSW1hZ2UqIG9sZEltYWdlID0gbV9pbWFnZTsKQEAgLTEzMyw3ICsxMzcsNyBAQCB2b2lkIEhU
TUxJbWFnZUxvYWRlcjo6bm90aWZ5RmluaXNoZWQoQ2FjCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAK
IEhUTUxJbWFnZUVsZW1lbnRJbXBsOjpIVE1MSW1hZ2VFbGVtZW50SW1wbChEb2N1bWVudFB0ciAq
ZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmKQotICAgIDogSFRNTEVsZW1lbnRJbXBsKGRvYyks
IG1faW1hZ2VMb2FkZXIodGhpcyksIGlzbWFwKGZhbHNlKSwgbV9mb3JtKGYpCisgICAgOiBIVE1M
RWxlbWVudEltcGwoSFRNTE5hbWVzOjppbWcoKSwgZG9jKSwgbV9pbWFnZUxvYWRlcih0aGlzKSwg
aXNtYXAoZmFsc2UpLCBtX2Zvcm0oZikKIHsKICAgICBpZiAobV9mb3JtKQogICAgICAgICBtX2Zv
cm0tPnJlZ2lzdGVySW1nRWxlbWVudCh0aGlzKTsKQEAgLTE0NSwxMSArMTQ5LDYgQEAgSFRNTElt
YWdlRWxlbWVudEltcGw6On5IVE1MSW1hZ2VFbGVtZW50SQogICAgICAgICBtX2Zvcm0tPnJlbW92
ZUltZ0VsZW1lbnQodGhpcyk7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MSW1hZ2VFbGVtZW50SW1w
bDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9JTUc7Ci19Ci0KIGJvb2wgSFRNTEltYWdl
RWxlbWVudEltcGw6Om1hcFRvRW50cnkoTm9kZUltcGw6OklkIGF0dHIsIE1hcHBlZEF0dHJpYnV0
ZUVudHJ5JiByZXN1bHQpIGNvbnN0CiB7CiAgICAgc3dpdGNoKGF0dHIpCkBAIC01MjgsNyArNTI3
LDcgQEAgbG9uZyBIVE1MSW1hZ2VFbGVtZW50SW1wbDo6eSgpIGNvbnN0CiAvLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCiAKIEhUTUxNYXBFbGVtZW50SW1wbDo6SFRNTE1hcEVsZW1lbnRJbXBsKERvY3VtZW50
UHRyICpkb2MpCi0gICAgOiBIVE1MRWxlbWVudEltcGwoZG9jKQorICAgIDogSFRNTEVsZW1lbnRJ
bXBsKEhUTUxOYW1lczo6bWFwKCksIGRvYykKIHsKIH0KIApAQCAtNTM4LDExICs1MzcsNiBAQCBI
VE1MTWFwRWxlbWVudEltcGw6On5IVE1MTWFwRWxlbWVudEltcGwoCiAgICAgICAgIGdldERvY3Vt
ZW50KCktPnJlbW92ZUltYWdlTWFwKHRoaXMpOwogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTE1hcEVs
ZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX01BUDsKLX0KLQogYm9vbAog
SFRNTE1hcEVsZW1lbnRJbXBsOjptYXBNb3VzZUV2ZW50KGludCB4XywgaW50IHlfLCBpbnQgd2lk
dGhfLCBpbnQgaGVpZ2h0XywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW5k
ZXJPYmplY3Q6Ok5vZGVJbmZvJiBpbmZvKQpAQCAtNTUyLDMyICs1NDYsMjggQEAgSFRNTE1hcEVs
ZW1lbnRJbXBsOjptYXBNb3VzZUV2ZW50KGludCB4XwogICAgIFFQdHJTdGFjazxOb2RlSW1wbD4g
bm9kZVN0YWNrOwogCiAgICAgTm9kZUltcGwgKmN1cnJlbnQgPSBmaXJzdENoaWxkKCk7Ci0gICAg
d2hpbGUoMSkKLSAgICB7Ci0gICAgICAgIGlmKCFjdXJyZW50KQotICAgICAgICB7CisgICAgd2hp
bGUgKDEpIHsKKyAgICAgICAgaWYgKCFjdXJyZW50KSB7CiAgICAgICAgICAgICBpZihub2RlU3Rh
Y2suaXNFbXB0eSgpKSBicmVhazsKICAgICAgICAgICAgIGN1cnJlbnQgPSBub2RlU3RhY2sucG9w
KCk7CiAgICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC0+bmV4dFNpYmxpbmcoKTsKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIGlmKGN1cnJlbnQtPmlkKCk9PUlE
X0FSRUEpCi0gICAgICAgIHsKKyAgICAgICAgCisgICAgICAgIGlmIChjdXJyZW50LT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6YXJlYSgpKSkgewogICAgICAgICAgICAgLy9jb3V0IDw8ICJhcmVhIGZv
dW5kICIgPDwgZW5kbDsKLSAgICAgICAgICAgIEhUTUxBcmVhRWxlbWVudEltcGwqIGFyZWE9c3Rh
dGljX2Nhc3Q8SFRNTEFyZWFFbGVtZW50SW1wbCo+KGN1cnJlbnQpOworICAgICAgICAgICAgSFRN
TEFyZWFFbGVtZW50SW1wbCogYXJlYSA9IHN0YXRpY19jYXN0PEhUTUxBcmVhRWxlbWVudEltcGwq
PihjdXJyZW50KTsKICAgICAgICAgICAgIGlmIChhcmVhLT5tYXBNb3VzZUV2ZW50KHhfLHlfLHdp
ZHRoXyxoZWlnaHRfLCBpbmZvKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgfQorICAgICAgICAKICAgICAgICAgTm9kZUltcGwgKmNoaWxkID0gY3VycmVudC0+Zmlyc3RD
aGlsZCgpOwotICAgICAgICBpZihjaGlsZCkKLSAgICAgICAgeworICAgICAgICBpZiAoY2hpbGQp
IHsKICAgICAgICAgICAgIG5vZGVTdGFjay5wdXNoKGN1cnJlbnQpOwogICAgICAgICAgICAgY3Vy
cmVudCA9IGNoaWxkOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKLSAgICAgICAgewogICAgICAg
ICAgICAgY3VycmVudCA9IGN1cnJlbnQtPm5leHRTaWJsaW5nKCk7Ci0gICAgICAgIH0KICAgICB9
CiAKICAgICByZXR1cm4gZmFsc2U7CkBAIC02MzUsMTEgKzYyNSw2IEBAIEhUTUxBcmVhRWxlbWVu
dEltcGw6On5IVE1MQXJlYUVsZW1lbnRJbXAKICAgICBpZiAobV9jb29yZHMpIGRlbGV0ZSBbXSBt
X2Nvb3JkczsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxBcmVhRWxlbWVudEltcGw6OmlkKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gSURfQVJFQTsKLX0KLQogdm9pZCBIVE1MQXJlYUVsZW1lbnRJbXBs
OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICphdHRyKQogewogICAg
IHN3aXRjaCAoYXR0ci0+aWQoKSkKSW5kZXg6IGtodG1sL2h0bWwvaHRtbF9pbWFnZWltcGwuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfaW1h
Z2VpbXBsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjEKZGlmZiAtdSAtcCAtcjEuMjEga2h0
bWwvaHRtbC9odG1sX2ltYWdlaW1wbC5oCi0tLSBraHRtbC9odG1sL2h0bWxfaW1hZ2VpbXBsLmgJ
MTEgTWF5IDIwMDUgMDU6NDk6MzQgLTAwMDAJMS4yMQorKysga2h0bWwvaHRtbC9odG1sX2ltYWdl
aW1wbC5oCTI0IEp1biAyMDA1IDAzOjEwOjE5IC0wMDAwCkBAIC03Nyw3ICs3Nyw4IEBAIHB1Ymxp
YzoKICAgICBIVE1MSW1hZ2VFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCBIVE1MRm9ybUVs
ZW1lbnRJbXBsICpmID0gMCk7CiAgICAgfkhUTUxJbWFnZUVsZW1lbnRJbXBsKCk7CiAKLSAgICB2
aXJ0dWFsIElkIGlkKCkgY29uc3Q7CisgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1Jl
cXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzRm9yYmlkZGVuOyB9CisgICAgdmly
dHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAwOyB9CiAKICAgICB2aXJ0dWFs
IGJvb2wgbWFwVG9FbnRyeShOb2RlSW1wbDo6SWQgYXR0ciwgTWFwcGVkQXR0cmlidXRlRW50cnkm
IHJlc3VsdCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1h
cHBlZEF0dHJpYnV0ZUltcGwgKik7CkBAIC0xNjEsNyArMTYyLDggQEAgcHVibGljOgogICAgIEhU
TUxBcmVhRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYyk7CiAgICAgfkhUTUxBcmVhRWxlbWVu
dEltcGwoKTsKIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEhUTUxU
YWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNGb3Ji
aWRkZW47IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDA7
IH0KIAogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1
dGVJbXBsICphdHRyKTsKIApAQCAtMjEyLDEwICsyMTQsMTAgQEAgY2xhc3MgSFRNTE1hcEVsZW1l
bnRJbXBsIDogcHVibGljIEhUTUxFbAogewogcHVibGljOgogICAgIEhUTUxNYXBFbGVtZW50SW1w
bChEb2N1bWVudFB0ciAqZG9jKTsKLQogICAgIH5IVE1MTWFwRWxlbWVudEltcGwoKTsKIAotICAg
IHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFn
UmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQorICAgIHZp
cnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMTsgfQogCiAgICAgdmlydHVh
bCBET01TdHJpbmcgZ2V0TmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQogCkluZGV4OiBr
aHRtbC9odG1sL2h0bWxfaW5saW5laW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sX2lubGluZWltcGwuY3BwLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjQyCmRpZmYgLXUgLXAgLXIxLjQyIGtodG1sL2h0bWwvaHRtbF9pbmxpbmVpbXBs
LmNwcAotLS0ga2h0bWwvaHRtbC9odG1sX2lubGluZWltcGwuY3BwCTExIE1heSAyMDA1IDA1OjQ5
OjM0IC0wMDAwCTEuNDIKKysrIGtodG1sL2h0bWwvaHRtbF9pbmxpbmVpbXBsLmNwcAkyNCBKdW4g
MjAwNSAwMzoxMDoyMCAtMDAwMApAQCAtNDUsNyArNDUsNyBAQCB1c2luZyBuYW1lc3BhY2Uga2h0
bWw7CiBuYW1lc3BhY2UgRE9NIHsKIAogSFRNTEFuY2hvckVsZW1lbnRJbXBsOjpIVE1MQW5jaG9y
RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50SW1wbChkb2Mp
CisgICAgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjphKCksIGRvYykKIHsKICAgICBtX2hh
c1RhcmdldCA9IGZhbHNlOwogfQpAQCAtMTA0LDExICsxMDQsNiBAQCBib29sIEhUTUxBbmNob3JF
bGVtZW50SW1wbDo6aXNLZXlib2FyZEZvCiAgICAgcmV0dXJuIGdldERvY3VtZW50KCktPnBhcnQo
KS0+dGFic1RvTGlua3MoKTsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxBbmNob3JFbGVtZW50SW1w
bDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9BOwotfQotCiB2b2lkIEhUTUxBbmNob3JF
bGVtZW50SW1wbDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudEltcGwgKmV2dCkKIHsKICAgICAv
LyBSZWFjdCBvbiBjbGlja3MgYW5kIG9uIGtleXByZXNzZXMuCkBAIC0xNTIsNyArMTQ3LDcgQEAg
dm9pZCBIVE1MQW5jaG9yRWxlbWVudEltcGw6OmRlZmF1bHRFdmVudAogICAgICAgICBpZiAoIGUg
JiYgZS0+YnV0dG9uKCkgPT0gMSApCiAgICAgICAgICAgICB1dGFyZ2V0ID0gIl9ibGFuayI7CiAK
LSAgICAgICAgaWYgKCBldnQtPnRhcmdldCgpLT5pZCgpID09IElEX0lNRyApIHsKKyAgICAgICAg
aWYgKGV2dC0+dGFyZ2V0KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppbWcoKSkpIHsKICAgICAg
ICAgICAgIEhUTUxJbWFnZUVsZW1lbnRJbXBsKiBpbWcgPSBzdGF0aWNfY2FzdDxIVE1MSW1hZ2VF
bGVtZW50SW1wbCo+KCBldnQtPnRhcmdldCgpICk7CiAgICAgICAgICAgICBpZiAoIGltZyAmJiBp
bWctPmlzU2VydmVyTWFwKCkgKQogICAgICAgICAgICAgewpAQCAtMzgyLDcgKzM3Nyw3IEBAIHZv
aWQgSFRNTEFuY2hvckVsZW1lbnRJbXBsOjpmb2N1cygpCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
IAotSFRNTEJSRWxlbWVudEltcGw6OkhUTUxCUkVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2Mp
IDogSFRNTEVsZW1lbnRJbXBsKGRvYykKK0hUTUxCUkVsZW1lbnRJbXBsOjpIVE1MQlJFbGVtZW50
SW1wbChEb2N1bWVudFB0ciAqZG9jKSA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6OmJyKCks
IGRvYykKIHsKIH0KIApAQCAtMzkwLDExICszODUsNiBAQCBIVE1MQlJFbGVtZW50SW1wbDo6fkhU
TUxCUkVsZW1lbnRJbXBsKCkKIHsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxCUkVsZW1lbnRJbXBs
OjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0JSOwotfQotCiBib29sIEhUTUxCUkVsZW1l
bnRJbXBsOjptYXBUb0VudHJ5KE5vZGVJbXBsOjpJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRy
eSYgcmVzdWx0KSBjb25zdAogewogICAgIGlmIChhdHRyID09IEFUVFJfQ0xFQVIpIHsKQEAgLTQ0
NSw3ICs0MzUsNyBAQCB2b2lkIEhUTUxCUkVsZW1lbnRJbXBsOjpzZXRDbGVhcihjb25zdCBECiAv
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxGb250RWxlbWVudEltcGw6OkhUTUxGb250RWxlbWVu
dEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50SW1wbChkb2MpCisgICAg
OiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjpmb250KCksIGRvYykKIHsKIH0KIApAQCAtNDUz
LDExICs0NDMsNiBAQCBIVE1MRm9udEVsZW1lbnRJbXBsOjp+SFRNTEZvbnRFbGVtZW50SW1wCiB7
CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MRm9udEVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIElEX0ZPTlQ7Ci19Ci0KIC8vIEFsbG93cyBsZWFkaW5nIHNwYWNlcy4KIC8vIEFs
bG93cyB0cmFpbGluZyBub25udW1lcmljIGNoYXJhY3RlcnMuCiAvLyBSZXR1cm5zIDEwIGZvciBh
bnkgc2l6ZSBncmVhdGVyIHRoYW4gOS4KQEAgLTU5MCw4ICs1NzUsOCBAQCB2b2lkIEhUTUxGb250
RWxlbWVudEltcGw6OnNldFNpemUoY29uc3QgCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSFRN
TE1vZEVsZW1lbnRJbXBsOjpIVE1MTW9kRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgdXNo
b3J0IGVsZW1lbnRJZCkKLSAgICA6IEhUTUxHZW5lcmljRWxlbWVudEltcGwoZG9jLCBlbGVtZW50
SWQpCitIVE1MTW9kRWxlbWVudEltcGw6OkhUTUxNb2RFbGVtZW50SW1wbChjb25zdCBRdWFsaWZp
ZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudFB0ciAqZG9jKQorICAgIDogSFRNTEVsZW1lbnRJbXBs
KHRhZ05hbWUsIGRvYykKIHsKIH0KIApAQCAtNjE4LDE1ICs2MDMsMTAgQEAgdm9pZCBIVE1MTW9k
RWxlbWVudEltcGw6OnNldERhdGVUaW1lKGNvbgogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBIVE1M
UXVvdGVFbGVtZW50SW1wbDo6SFRNTFF1b3RlRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykK
LSAgICA6IEhUTUxFbGVtZW50SW1wbChkb2MpCisgICAgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5h
bWVzOjpxKCksIGRvYykKIHsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxRdW90ZUVsZW1lbnRJbXBs
OjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX1E7Ci19Ci0gICAgCiBET01TdHJpbmcgSFRN
TFF1b3RlRWxlbWVudEltcGw6OmNpdGUoKSBjb25zdAogewogICAgIHJldHVybiBnZXRBdHRyaWJ1
dGUoQVRUUl9DSVRFKTsKSW5kZXg6IGtodG1sL2h0bWwvaHRtbF9pbmxpbmVpbXBsLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sX2lubGluZWlt
cGwuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xOQpkaWZmIC11IC1wIC1yMS4xOSBraHRtbC9o
dG1sL2h0bWxfaW5saW5laW1wbC5oCi0tLSBraHRtbC9odG1sL2h0bWxfaW5saW5laW1wbC5oCTEx
IE1heSAyMDA1IDA1OjQ5OjM0IC0wMDAwCTEuMTkKKysrIGtodG1sL2h0bWwvaHRtbF9pbmxpbmVp
bXBsLmgJMjQgSnVuIDIwMDUgMDM6MTA6MjAgLTAwMDAKQEAgLTM2LDEwICszNiwxMiBAQCBwdWJs
aWM6CiAgICAgSFRNTEFuY2hvckVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpOwogICAgIH5I
VE1MQW5jaG9yRWxlbWVudEltcGwoKTsKIAorICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRU
YWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9CisgICAg
dmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAxOyB9CisKICAgICB2aXJ0
dWFsIGJvb2wgaXNNb3VzZUZvY3VzYWJsZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBpc0tl
eWJvYXJkRm9jdXNhYmxlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlzRm9jdXNhYmxlKCkg
Y29uc3Q7Ci0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICphdHRyKTsKICAgICB2aXJ0dWFs
IHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudEltcGwgKmV2dCk7CiAgICAgdmlydHVhbCB2
b2lkIGFjY2Vzc0tleUFjdGlvbihib29sIGZ1bGxBY3Rpb24pOwpAQCAtOTcsOSArOTksMTAgQEAg
Y2xhc3MgSFRNTEJSRWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTEVsZQogcHVibGljOgogICAgIEhU
TUxCUkVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpOwogICAgIH5IVE1MQlJFbGVtZW50SW1w
bCgpOwotCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwogICAgIAorICAgIHZpcnR1YWwgSFRN
TFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c0Zv
cmJpZGRlbjsgfQorICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4g
MDsgfQorCiAgICAgdmlydHVhbCBib29sIG1hcFRvRW50cnkoSWQgYXR0ciwgTWFwcGVkQXR0cmli
dXRlRW50cnkmIHJlc3VsdCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0
cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIpOwogICAgIApAQCAtMTE2LDkgKzExOSwx
MCBAQCBjbGFzcyBIVE1MRm9udEVsZW1lbnRJbXBsIDogcHVibGljIEhUTUxFCiBwdWJsaWM6CiAg
ICAgSFRNTEZvbnRFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKTsKICAgICB+SFRNTEZvbnRF
bGVtZW50SW1wbCgpOwotCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwogICAgIAorICAgIHZp
cnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRh
Z1N0YXR1c1JlcXVpcmVkOyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7
IHJldHVybiAxOyB9CisKICAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShJZCBhdHRyLCBNYXBw
ZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VN
YXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqYXR0cik7CiAKQEAgLTEzNCwxMCAr
MTM4LDEzIEBAIHB1YmxpYzoKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1jbGFzcyBIVE1MTW9k
RWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTEdlbmVyaWNFbGVtZW50SW1wbAorY2xhc3MgSFRNTE1v
ZEVsZW1lbnRJbXBsIDogcHVibGljIEhUTUxFbGVtZW50SW1wbAogewogcHVibGljOgotICAgIEhU
TUxNb2RFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCB1c2hvcnQgZWxlbWVudElkKTsKKyAg
ICBIVE1MTW9kRWxlbWVudEltcGwoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1l
bnRQdHIgKmRvYyk7CisKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1l
bnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQorICAgIHZpcnR1YWwgaW50
IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMTsgfQogCiAgICAgRE9NU3RyaW5nIGNpdGUo
KSBjb25zdDsKICAgICB2b2lkIHNldENpdGUoY29uc3QgRE9NU3RyaW5nICYpOwpAQCAtMTUyLDkg
KzE1OSwxMCBAQCBjbGFzcyBIVE1MUXVvdGVFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MCiB7CiBw
dWJsaWM6CiAgICAgSFRNTFF1b3RlRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYyk7Ci0KLSAg
ICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CiAgICAgCisgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVz
IGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzUmVxdWlyZWQ7IH0K
KyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDE7IH0KKwogICAg
IERPTVN0cmluZyBjaXRlKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRDaXRlKGNvbnN0IERPTVN0cmlu
ZyAmKTsKIH07CkluZGV4OiBraHRtbC9odG1sL2h0bWxfbGlzdGltcGwuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbF9saXN0aW1wbC5jcHAs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuOQpkaWZmIC11IC1wIC1yMS45IGtodG1sL2h0bWwvaHRt
bF9saXN0aW1wbC5jcHAKLS0tIGtodG1sL2h0bWwvaHRtbF9saXN0aW1wbC5jcHAJMTEgTWF5IDIw
MDUgMDU6NDk6MzQgLTAwMDAJMS45CisrKyBraHRtbC9odG1sL2h0bWxfbGlzdGltcGwuY3BwCTI0
IEp1biAyMDA1IDAzOjEwOjIwIC0wMDAwCkBAIC0zMiwxMSArMzIsNiBAQCB1c2luZyBuYW1lc3Bh
Y2Uga2h0bWw7CiAKIG5hbWVzcGFjZSBET00gewogCi1Ob2RlSW1wbDo6SWQgSFRNTFVMaXN0RWxl
bWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfVUw7Ci19Ci0KIGJvb2wgSFRN
TFVMaXN0RWxlbWVudEltcGw6Om1hcFRvRW50cnkoTm9kZUltcGw6OklkIGF0dHIsIE1hcHBlZEF0
dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChhdHRyKSB7CkBAIC04
NCwxMSArNzksNiBAQCB2b2lkIEhUTUxVTGlzdEVsZW1lbnRJbXBsOjpzZXRUeXBlKGNvbnN0CiAK
IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotTm9kZUltcGw6OklkIEhUTUxEaXJlY3RvcnlFbGVtZW50
SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9ESVI7Ci19Ci0KIGJvb2wgSFRNTERp
cmVjdG9yeUVsZW1lbnRJbXBsOjpjb21wYWN0KCkgY29uc3QKIHsKICAgICByZXR1cm4gIWdldEF0
dHJpYnV0ZShBVFRSX0NPTVBBQ1QpLmlzTnVsbCgpOwpAQCAtMTAxLDExICs5MSw2IEBAIHZvaWQg
SFRNTERpcmVjdG9yeUVsZW1lbnRJbXBsOjpzZXRDb21wYWMKIAogLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQogCi1Ob2RlSW1wbDo6SWQgSFRNTE1lbnVFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAg
IHJldHVybiBJRF9NRU5VOwotfQotCiBib29sIEhUTUxNZW51RWxlbWVudEltcGw6OmNvbXBhY3Qo
KSBjb25zdAogewogICAgIHJldHVybiAhZ2V0QXR0cmlidXRlKEFUVFJfQ09NUEFDVCkuaXNOdWxs
KCk7CkBAIC0xMTgsMTEgKzEwMyw2IEBAIHZvaWQgSFRNTE1lbnVFbGVtZW50SW1wbDo6c2V0Q29t
cGFjdChib28KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Ob2RlSW1wbDo6SWQgSFRNTE9MaXN0
RWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfT0w7Ci19Ci0KIGJvb2wg
SFRNTE9MaXN0RWxlbWVudEltcGw6Om1hcFRvRW50cnkoTm9kZUltcGw6OklkIGF0dHIsIE1hcHBl
ZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChhdHRyKSB7CkBA
IC0xNTUsNyArMTM1LDcgQEAgdm9pZCBIVE1MT0xpc3RFbGVtZW50SW1wbDo6cGFyc2VNYXBwZWRB
dAogICAgIGNhc2UgQVRUUl9TVEFSVDoKICAgICAgICAgICAgIF9zdGFydCA9ICFhdHRyLT5pc051
bGwoKSA/IGF0dHItPnZhbHVlKCkudG9JbnQoKSA6IDE7CiAgICAgZGVmYXVsdDoKLSAgICAgICAg
SFRNTFVMaXN0RWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgICAg
ICBIVE1MRWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwogICAgIH0KIH0K
IApAQCAtMTg2LDExICsxNjYsNiBAQCB2b2lkIEhUTUxPTGlzdEVsZW1lbnRJbXBsOjpzZXRUeXBl
KGNvbnN0CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotTm9kZUltcGw6OklkIEhUTUxMSUVsZW1l
bnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0xJOwotfQotCiBib29sIEhUTUxM
SUVsZW1lbnRJbXBsOjptYXBUb0VudHJ5KE5vZGVJbXBsOjpJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1
dGVFbnRyeSYgcmVzdWx0KSBjb25zdAogewogICAgIHN3aXRjaCAoYXR0cikgewpAQCAtMjUyLDEx
ICsyMjcsOCBAQCB2b2lkIEhUTUxMSUVsZW1lbnRJbXBsOjphdHRhY2goKQogICAgICAgICBOb2Rl
SW1wbCAqbGlzdE5vZGUgPSAwOwogICAgICAgICBOb2RlSW1wbCAqbiA9IHRoaXM7CiAgICAgICAg
IHdoaWxlICghbGlzdE5vZGUgJiYgKG4gPSBuLT5wYXJlbnROb2RlKCkpKSB7Ci0gICAgICAgICAg
ICBzd2l0Y2ggKG4tPmlkKCkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIElEX1VMOgotICAgICAg
ICAgICAgICAgIGNhc2UgSURfT0w6Ci0gICAgICAgICAgICAgICAgICAgIGxpc3ROb2RlID0gbjsK
LSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
dWwoKSkgfHwgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9sKCkpKQorICAgICAgICAgICAgICAg
IGxpc3ROb2RlID0gbjsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8gSWYgd2UgYXJl
IG5vdCBpbiBhIGxpc3QsIHRlbGwgdGhlIHJlbmRlcmVyIHNvIGl0IGNhbiBwb3NpdGlvbiB1cyBp
bnNpZGUuCkBAIC0yNjUsNyArMjM3LDcgQEAgdm9pZCBIVE1MTElFbGVtZW50SW1wbDo6YXR0YWNo
KCkKICAgICAgICAgICAgIHJlbmRlci0+c2V0Tm90SW5MaXN0KHRydWUpOwogCiAJLy8gSWYgd2Ug
YXJlIGZpcnN0LCBhbmQgdGhlIE9MIGhhcyBhIHN0YXJ0IGF0dHIsIHNldCB0aGUgdmFsdWUuCi0J
aWYgKGxpc3ROb2RlICYmIGxpc3ROb2RlLT5pZCgpID09IElEX09MICYmICFtX3JlbmRlci0+cHJl
dmlvdXNTaWJsaW5nKCkpIHsKKwlpZiAobGlzdE5vZGUgJiYgbGlzdE5vZGUtPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjpvbCgpKSAmJiAhbV9yZW5kZXItPnByZXZpb3VzU2libGluZygpKSB7CiAJICAg
IEhUTUxPTGlzdEVsZW1lbnRJbXBsICpvbCA9IHN0YXRpY19jYXN0PEhUTUxPTGlzdEVsZW1lbnRJ
bXBsICo+KGxpc3ROb2RlKTsKICAgICAgICAgICAgIHJlbmRlci0+c2V0VmFsdWUob2wtPnN0YXJ0
KCkpOwogCX0KQEAgLTI5NSwxMiArMjY3LDggQEAgdm9pZCBIVE1MTElFbGVtZW50SW1wbDo6c2V0
VmFsdWUobG9uZyB2YQogewogICAgIHNldEF0dHJpYnV0ZShBVFRSX1ZBTFVFLCBRU3RyaW5nOjpu
dW1iZXIodmFsdWUpKTsKIH0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotTm9kZUltcGw6OklkIEhU
TUxETGlzdEVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0RMOwotfQor
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogCiBib29sIEhUTUxETGlzdEVsZW1lbnRJbXBsOjpjb21wYWN0
KCkgY29uc3QKIHsKSW5kZXg6IGtodG1sL2h0bWwvaHRtbF9saXN0aW1wbC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbF9saXN0aW1wbC5oLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjcKZGlmZiAtdSAtcCAtcjEuNyBraHRtbC9odG1sL2h0bWxf
bGlzdGltcGwuaAotLS0ga2h0bWwvaHRtbC9odG1sX2xpc3RpbXBsLmgJMTEgTWF5IDIwMDUgMDU6
NDk6MzQgLTAwMDAJMS43CisrKyBraHRtbC9odG1sL2h0bWxfbGlzdGltcGwuaAkyNCBKdW4gMjAw
NSAwMzoxMDoyMCAtMDAwMApAQCAtMzUsMTAgKzM1LDExIEBAIG5hbWVzcGFjZSBET00KIGNsYXNz
IEhUTUxVTGlzdEVsZW1lbnRJbXBsIDogcHVibGljIEhUTUxFbGVtZW50SW1wbAogewogcHVibGlj
OgotICAgIEhUTUxVTGlzdEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpIDogSFRNTEVsZW1l
bnRJbXBsKGRvYykge30KKyAgICBIVE1MVUxpc3RFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9j
KSA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6OnVsKCksIGRvYykge30KICAgICB2aXJ0dWFs
IH5IVE1MVUxpc3RFbGVtZW50SW1wbCgpIHt9CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7
CisgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyBy
ZXR1cm4gVGFnU3RhdHVzUmVxdWlyZWQ7IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgp
IGNvbnN0IHsgcmV0dXJuIDU7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBtYXBUb0VudHJ5KElkIGF0
dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9p
ZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICopOwpAQCAtNTcsOSAr
NTgsMTAgQEAgcHVibGljOgogY2xhc3MgSFRNTERpcmVjdG9yeUVsZW1lbnRJbXBsIDogcHVibGlj
IEhUTUxFbGVtZW50SW1wbAogewogcHVibGljOgotICAgIEhUTUxEaXJlY3RvcnlFbGVtZW50SW1w
bChEb2N1bWVudFB0ciAqZG9jKSA6IEhUTUxFbGVtZW50SW1wbChkb2MpIHt9CisgICAgSFRNTERp
cmVjdG9yeUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpIDogSFRNTEVsZW1lbnRJbXBsKEhU
TUxOYW1lczo6ZGlyKCksIGRvYykge30KIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVy
biBUYWdTdGF0dXNSZXF1aXJlZDsgfQorICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29u
c3QgeyByZXR1cm4gNTsgfQogCiAgICAgYm9vbCBjb21wYWN0KCkgY29uc3Q7CiAgICAgdm9pZCBz
ZXRDb21wYWN0KGJvb2wpOwpAQCAtNzAsOSArNzIsMTAgQEAgcHVibGljOgogY2xhc3MgSFRNTE1l
bnVFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MRWxlbWVudEltcGwKIHsKIHB1YmxpYzoKLSAgICBI
VE1MTWVudUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpIDogSFRNTEVsZW1lbnRJbXBsKGRv
Yykge30KKyAgICBIVE1MTWVudUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpIDogSFRNTEVs
ZW1lbnRJbXBsKEhUTUxOYW1lczo6bWVudSgpLCBkb2MpIHt9CiAKLSAgICB2aXJ0dWFsIElkIGlk
KCkgY29uc3Q7CisgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkg
Y29uc3QgeyByZXR1cm4gVGFnU3RhdHVzUmVxdWlyZWQ7IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQ
cmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDU7IH0KIAogICAgIGJvb2wgY29tcGFjdCgpIGNvbnN0
OwogICAgIHZvaWQgc2V0Q29tcGFjdChib29sKTsKQEAgLTgwLDE0ICs4MywxNSBAQCBwdWJsaWM6
CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotY2xhc3MgSFRNTE9MaXN0RWxlbWVudEltcGwgOiBw
dWJsaWMgSFRNTFVMaXN0RWxlbWVudEltcGwKK2NsYXNzIEhUTUxPTGlzdEVsZW1lbnRJbXBsIDog
cHVibGljIEhUTUxFbGVtZW50SW1wbAogewogcHVibGljOgogICAgIEhUTUxPTGlzdEVsZW1lbnRJ
bXBsKERvY3VtZW50UHRyICpkb2MpCi0gICAgICAgIDogSFRNTFVMaXN0RWxlbWVudEltcGwoZG9j
KSB7IF9zdGFydCA9IDE7IH0KLQotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKKyAgICAgICAg
OiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjpvbCgpLCBkb2MpIHsgX3N0YXJ0ID0gMTsgfQog
ICAgIAorICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0
IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3Jp
dHkoKSBjb25zdCB7IHJldHVybiA1OyB9CisKICAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShJ
ZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdDsKICAgICB2aXJ0dWFs
IHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqKTsKIApAQCAt
MTEwLDEwICsxMTQsMTEgQEAgY2xhc3MgSFRNTExJRWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTEVs
ZQogewogcHVibGljOgogICAgIEhUTUxMSUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0g
ICAgICAgIDogSFRNTEVsZW1lbnRJbXBsKGRvYykgeyBpc1ZhbHVlZCA9IGZhbHNlOyB9CisgICAg
ICAgIDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6bGkoKSwgZG9jKSB7IGlzVmFsdWVkID0g
ZmFsc2U7IH0KICAgICB2aXJ0dWFsIH5IVE1MTElFbGVtZW50SW1wbCgpIHt9CiAKLSAgICB2aXJ0
dWFsIElkIGlkKCkgY29uc3Q7CisgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVp
cmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzT3B0aW9uYWw7IH0KKyAgICB2aXJ0dWFs
IGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDM7IH0KIAogICAgIHZpcnR1YWwgYm9v
bCBtYXBUb0VudHJ5KE5vZGVJbXBsOjpJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVz
dWx0KSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVk
QXR0cmlidXRlSW1wbCAqYXR0cik7CkBAIC0xMzYsMTAgKzE0MSwxMSBAQCBwcml2YXRlOgogY2xh
c3MgSFRNTERMaXN0RWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTEVsZW1lbnRJbXBsCiB7CiBwdWJs
aWM6Ci0gICAgSFRNTERMaXN0RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykgOiBIVE1MRWxl
bWVudEltcGwoZG9jKSB7fQorICAgIEhUTUxETGlzdEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpk
b2MpIDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6ZGwoKSwgZG9jKSB7fQogICAgIHZpcnR1
YWwgfkhUTUxETGlzdEVsZW1lbnRJbXBsKCkge30KIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25z
dDsKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7
IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQorICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5
KCkgY29uc3QgeyByZXR1cm4gNTsgfQogCiAgICAgYm9vbCBjb21wYWN0KCkgY29uc3Q7CiAgICAg
dm9pZCBzZXRDb21wYWN0KGJvb2wpOwpJbmRleDoga2h0bWwvaHRtbC9odG1sX21pc2NpbXBsLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9odG1sL2h0bWxf
bWlzY2ltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjI2CmRpZmYgLXUgLXAgLXIxLjI2
IGtodG1sL2h0bWwvaHRtbF9taXNjaW1wbC5jcHAKLS0tIGtodG1sL2h0bWwvaHRtbF9taXNjaW1w
bC5jcHAJMTEgSnVuIDIwMDUgMDk6NTE6MDEgLTAwMDAJMS4yNgorKysga2h0bWwvaHRtbC9odG1s
X21pc2NpbXBsLmNwcAkyNCBKdW4gMjAwNSAwMzoxMDoyMSAtMDAwMApAQCAtMzUsMTUgKzM1LDEw
IEBACiBuYW1lc3BhY2UgRE9NIHsKIAogSFRNTEJhc2VGb250RWxlbWVudEltcGw6OkhUTUxCYXNl
Rm9udEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0gICAgOiBIVE1MRWxlbWVudEltcGwo
ZG9jKQorICAgIDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6YmFzZWZvbnQoKSwgZG9jKQog
ewogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTEJhc2VGb250RWxlbWVudEltcGw6OmlkKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gSURfQkFTRUZPTlQ7Ci19Ci0KIERPTVN0cmluZyBIVE1MQmFzZUZvbnRF
bGVtZW50SW1wbDo6Y29sb3IoKSBjb25zdAogewogICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoQVRU
Ul9DT0xPUik7CkBAIC0xNDEsNzIgKzEzNiw3MiBAQCBOb2RlSW1wbCAqSFRNTENvbGxlY3Rpb25J
bXBsOjp0cmF2ZXJzZU5lCiAgICAgICAgICAgICBIVE1MRWxlbWVudEltcGwgKmUgPSBzdGF0aWNf
Y2FzdDxIVE1MRWxlbWVudEltcGwgKj4oY3VycmVudCk7CiAgICAgICAgICAgICBzd2l0Y2godHlw
ZSkgewogICAgICAgICAgICAgY2FzZSBET0NfSU1BR0VTOgotICAgICAgICAgICAgICAgIGlmKGUt
PmlkKCkgPT0gSURfSU1HKQorICAgICAgICAgICAgICAgIGlmIChlLT5oYXNMb2NhbE5hbWUoSFRN
TE5hbWVzOjppbWcoKSkpCiAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgRE9DX0ZPUk1TOgotICAgICAgICAg
ICAgICAgIGlmKGUtPmlkKCkgPT0gSURfRk9STSkKKyAgICAgICAgICAgICAgICBpZihlLT5oYXNM
b2NhbE5hbWUoSFRNTE5hbWVzOjpmb3JtKCkpKQogICAgICAgICAgICAgICAgICAgICBmb3VuZCA9
IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIERPQ19OQU1F
QUJMRV9JVEVNUzoKLSAgICAgICAgICAgICAgICBpZihlLT5pZCgpID09IElEX0lNRykKKyAgICAg
ICAgICAgICAgICBpZiAoZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6aW1nKCkpKQogICAgICAg
ICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgaWYoZS0+aWQoKSA9
PSBJRF9GT1JNKQorICAgICAgICAgICAgICAgIGlmIChlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVz
Ojpmb3JtKCkpKQogICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgaWYoZS0+aWQoKSA9PSBJRF9BUFBMRVQpCisgICAgICAgICAgICAgICAgaWYgKGUtPmhh
c0xvY2FsTmFtZShIVE1MTmFtZXM6OmFwcGxldCgpKSkKICAgICAgICAgICAgICAgICAgICAgZm91
bmQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGlmKGUtPmlkKCkgPT0gSURfRU1CRUQpCisgICAg
ICAgICAgICAgICAgaWYgKGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmVtYmVkKCkpKQogICAg
ICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgaWYoZS0+aWQo
KSA9PSBJRF9PQkpFQ1QpCisgICAgICAgICAgICAgICAgaWYgKGUtPmhhc0xvY2FsTmFtZShIVE1M
TmFtZXM6Om9iamVjdCgpKSkKICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBUQUJMRV9UQk9ESUVTOgotICAg
ICAgICAgICAgICAgIGlmKGUtPmlkKCkgPT0gSURfVEJPRFkpCisgICAgICAgICAgICAgICAgaWYg
KGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnRib2R5KCkpKQogICAgICAgICAgICAgICAgICAg
ICBmb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZihlLT5pZCgpID09IElEX1RB
QkxFKQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6
OnRhYmxlKCkpKQogICAgICAgICAgICAgICAgICAgICBkZWVwID0gZmFsc2U7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFRSX0NFTExTOgotICAgICAgICAgICAgICAg
IGlmKGUtPmlkKCkgPT0gSURfVEQgfHwgZS0+aWQoKSA9PSBJRF9USCkKKyAgICAgICAgICAgICAg
ICBpZiAoZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dGQoKSkgfHwgZS0+aGFzTG9jYWxOYW1l
KEhUTUxOYW1lczo6dGgoKSkpCiAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAg
ICAgICAgICAgICAgICBlbHNlIGlmKGUtPmlkKCkgPT0gSURfVEFCTEUpCisgICAgICAgICAgICAg
ICAgZWxzZSBpZiAoZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dGFibGUoKSkpCiAgICAgICAg
ICAgICAgICAgICAgIGRlZXAgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIGNhc2UgVEFCTEVfUk9XUzoKICAgICAgICAgICAgIGNhc2UgVFNFQ1RJT05fUk9XUzoK
LSAgICAgICAgICAgICAgICBpZihlLT5pZCgpID09IElEX1RSKQorICAgICAgICAgICAgICAgIGlm
IChlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0cigpKSkKICAgICAgICAgICAgICAgICAgICAg
Zm91bmQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGVsc2UgaWYoZS0+aWQoKSA9PSBJRF9UQUJM
RSkKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0
YWJsZSgpKSkKICAgICAgICAgICAgICAgICAgICAgZGVlcCA9IGZhbHNlOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBTRUxFQ1RfT1BUSU9OUzoKLSAgICAgICAgICAg
ICAgICBpZihlLT5pZCgpID09IElEX09QVElPTikKKyAgICAgICAgICAgICAgICBpZiAoZS0+aGFz
TG9jYWxOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpKQogICAgICAgICAgICAgICAgICAgICBmb3Vu
ZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIE1BUF9B
UkVBUzoKLSAgICAgICAgICAgICAgICBpZihlLT5pZCgpID09IElEX0FSRUEpCisgICAgICAgICAg
ICAgICAgaWYgKGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmFyZWEoKSkpCiAgICAgICAgICAg
ICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIGNhc2UgRE9DX0FQUExFVFM6ICAgLy8gYWxsIE9CSkVDVCBhbmQgQVBQTEVUIGVsZW1lbnRz
Ci0gICAgICAgICAgICAgICAgaWYoZS0+aWQoKSA9PSBJRF9PQkpFQ1QgfHwgZS0+aWQoKSA9PSBJ
RF9BUFBMRVQpCisgICAgICAgICAgICAgICAgaWYgKGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6
Om9iamVjdCgpKSB8fCBlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjphcHBsZXQoKSkpCiAgICAg
ICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIGNhc2UgRE9DX0VNQkVEUzogICAvLyBhbGwgRU1CRUQgZWxlbWVudHMKLSAgICAg
ICAgICAgICAgICBpZihlLT5pZCgpID09IElEX0VNQkVEKQorICAgICAgICAgICAgICAgIGlmIChl
LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjplbWJlZCgpKSkKICAgICAgICAgICAgICAgICAgICAg
Zm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBE
T0NfT0JKRUNUUzogICAvLyBhbGwgT0JKRUNUIGVsZW1lbnRzCi0gICAgICAgICAgICAgICAgaWYo
ZS0+aWQoKSA9PSBJRF9PQkpFQ1QpCisgICAgICAgICAgICAgICAgaWYgKGUtPmhhc0xvY2FsTmFt
ZShIVE1MTmFtZXM6Om9iamVjdCgpKSkKICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVl
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBET0NfTElOS1M6ICAg
ICAvLyBhbGwgQSBfYW5kXyBBUkVBIGVsZW1lbnRzIHdpdGggYSB2YWx1ZSBmb3IgaHJlZgotICAg
ICAgICAgICAgICAgIGlmKGUtPmlkKCkgPT0gSURfQSB8fCBlLT5pZCgpID09IElEX0FSRUEpCi0g
ICAgICAgICAgICAgICAgICAgIGlmKCFlLT5nZXRBdHRyaWJ1dGUoQVRUUl9IUkVGKS5pc051bGwo
KSkKKyAgICAgICAgICAgICAgICBpZiAoZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6YSgpKSB8
fCBlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjphcmVhKCkpKQorICAgICAgICAgICAgICAgICAg
ICBpZiAoIWUtPmdldEF0dHJpYnV0ZShBVFRSX0hSRUYpLmlzTnVsbCgpKQogICAgICAgICAgICAg
ICAgICAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgY2FzZSBET0NfQU5DSE9SUzogICAgICAvLyBhbGwgQSBlbGVtZW50cyB3aXRoIGEgdmFs
dWUgZm9yIG5hbWUgb3IgYW4gaWQgYXR0cmlidXRlCi0gICAgICAgICAgICAgICAgaWYoZS0+aWQo
KSA9PSBJRF9BKQotICAgICAgICAgICAgICAgICAgICBpZighZS0+Z2V0QXR0cmlidXRlKEFUVFJf
TkFNRSkuaXNOdWxsKCkpCisgICAgICAgICAgICAgICAgaWYgKGUtPmhhc0xvY2FsTmFtZShIVE1M
TmFtZXM6OmEoKSkpCisgICAgICAgICAgICAgICAgICAgIGlmICghZS0+Z2V0QXR0cmlidXRlKEFU
VFJfTkFNRSkuaXNOdWxsKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIERPQ19BTEw6CkBAIC0y
MTksOSArMjE0LDkgQEAgTm9kZUltcGwgKkhUTUxDb2xsZWN0aW9uSW1wbDo6dHJhdmVyc2VOZQog
ICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBrZERlYnVnKCA2MDMwICkgPDwg
IkVycm9yIGluIEhUTUxDb2xsZWN0aW9uLCB3cm9uZyB0YWdJZCEiIDw8IGVuZGw7CiAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBpZiAoZm91bmQpIHsKKworICAgICAgICAgICAgaWYgKGZvdW5k
KQogICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50OwotICAgICAgICAgICAgfQogICAgICAg
ICAgICAgaWYgKGRlZXApIHsKICAgICAgICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC0+dHJh
dmVyc2VOZXh0Tm9kZShtX2Jhc2UuZ2V0KCkpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpA
QCAtMjk4LDI5ICsyOTMsMzEgQEAgTm9kZUltcGwgKkhUTUxDb2xsZWN0aW9uSW1wbDo6bmV4dEl0
ZW0oKQogCiBib29sIEhUTUxDb2xsZWN0aW9uSW1wbDo6Y2hlY2tGb3JOYW1lTWF0Y2goTm9kZUlt
cGwgKm5vZGUsIGJvb2wgY2hlY2tOYW1lLCBjb25zdCBET01TdHJpbmcgJm5hbWUsIGJvb2wgY2Fz
ZVNlbnNpdGl2ZSkgY29uc3QKIHsKLSAgICBFbGVtZW50SW1wbCAqZSA9IHN0YXRpY19jYXN0PEVs
ZW1lbnRJbXBsICo+KG5vZGUpOworICAgIGlmICghbm9kZS0+aXNIVE1MRWxlbWVudCgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgSFRNTEVsZW1lbnRJbXBsICplID0gc3RhdGlj
X2Nhc3Q8SFRNTEVsZW1lbnRJbXBsKj4obm9kZSk7CiAgICAgaWYgKGNhc2VTZW5zaXRpdmUpIHsK
ICAgICAgICAgaWYgKGNoZWNrTmFtZSkgewogICAgICAgICAgICAgLy8gZG9jdW1lbnQuYWxsIHJl
dHVybnMgb25seSBpbWFnZXMsIGZvcm1zLCBhcHBsZXRzLCBvYmplY3RzIGFuZCBlbWJlZHMKICAg
ICAgICAgICAgIC8vIGJ5IG5hbWUgKHRob3VnaCBldmVyeXRoaW5nIGJ5IGlkKQogICAgICAgICAg
ICAgaWYgKHR5cGUgPT0gRE9DX0FMTCAmJiAKLSAgICAgICAgICAgICAgICAhKGUtPmlkKCkgPT0g
SURfSU1HIHx8IGUtPmlkKCkgPT0gSURfRk9STSB8fAotICAgICAgICAgICAgICAgICAgZS0+aWQo
KSA9PSBJRF9BUFBMRVQgfHwgZS0+aWQoKSA9PSBJRF9PQkpFQ1QgfHwKLSAgICAgICAgICAgICAg
ICAgIGUtPmlkKCkgPT0gSURfRU1CRUQpKQorICAgICAgICAgICAgICAgICEoZS0+aGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6aW1nKCkpIHx8IGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmZvcm0o
KSkgfHwKKyAgICAgICAgICAgICAgICAgIGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmFwcGxl
dCgpKSB8fCBlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvYmplY3QoKSkgfHwKKyAgICAgICAg
ICAgICAgICAgIGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmVtYmVkKCkpKSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgICAgIHJldHVybiBlLT5nZXRBdHRyaWJ1
dGUoQVRUUl9OQU1FKSA9PSBuYW1lICYmIGUtPmdldEF0dHJpYnV0ZShBVFRSX0lEKSAhPSBuYW1l
OwotICAgICAgICB9IGVsc2UgeworICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIHJldHVybiBl
LT5nZXRBdHRyaWJ1dGUoQVRUUl9JRCkgPT0gbmFtZTsKLSAgICAgICAgfQogICAgIH0gZWxzZSB7
CiAgICAgICAgIGlmIChjaGVja05hbWUpIHsKICAgICAgICAgICAgIC8vIGRvY3VtZW50LmFsbCBy
ZXR1cm5zIG9ubHkgaW1hZ2VzLCBmb3JtcywgYXBwbGV0cywgb2JqZWN0cyBhbmQgZW1iZWRzCiAg
ICAgICAgICAgICAvLyBieSBuYW1lICh0aG91Z2ggZXZlcnl0aGluZyBieSBpZCkKICAgICAgICAg
ICAgIGlmICh0eXBlID09IERPQ19BTEwgJiYgCi0gICAgICAgICAgICAgICAgIShlLT5pZCgpID09
IElEX0lNRyB8fCBlLT5pZCgpID09IElEX0ZPUk0gfHwKLSAgICAgICAgICAgICAgICAgIGUtPmlk
KCkgPT0gSURfQVBQTEVUIHx8IGUtPmlkKCkgPT0gSURfT0JKRUNUIHx8Ci0gICAgICAgICAgICAg
ICAgICBlLT5pZCgpID09IElEX0VNQkVEKSkKKyAgICAgICAgICAgICAgICAhKGUtPmhhc0xvY2Fs
TmFtZShIVE1MTmFtZXM6OmltZygpKSB8fCBlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpmb3Jt
KCkpIHx8CisgICAgICAgICAgICAgICAgICBlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjphcHBs
ZXQoKSkgfHwgZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b2JqZWN0KCkpIHx8CisgICAgICAg
ICAgICAgICAgICBlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjplbWJlZCgpKSkpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAgICByZXR1cm4gZS0+Z2V0QXR0cmli
dXRlKEFUVFJfTkFNRSkuZG9tU3RyaW5nKCkubG93ZXIoKSA9PSBuYW1lLmxvd2VyKCkgJiYKQEAg
LTM3OSw3ICszNzYsOSBAQCB2b2lkIEhUTUxDb2xsZWN0aW9uSW1wbDo6dXBkYXRlTmFtZUNhY2hl
CiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBmb3IgKE5vZGVJbXBsICpuID0gdHJhdmVyc2VO
ZXh0SXRlbShtX2Jhc2UuZ2V0KCkpOyBuOyBuID0gdHJhdmVyc2VOZXh0SXRlbShuKSkgewotICAg
ICAgICBFbGVtZW50SW1wbCAqZSA9IHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsICo+KG4pOworICAg
ICAgICBpZiAoIW4tPmlzSFRNTEVsZW1lbnQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICBIVE1MRWxlbWVudEltcGwqIGUgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwqPihu
KTsKICAgICAgICAgUVN0cmluZyBpZEF0dHIgPSBlLT5nZXRBdHRyaWJ1dGUoQVRUUl9JRCkuc3Ry
aW5nKCk7CiAgICAgICAgIFFTdHJpbmcgbmFtZUF0dHIgPSBlLT5nZXRBdHRyaWJ1dGUoQVRUUl9O
QU1FKS5zdHJpbmcoKTsKICAgICAgICAgaWYgKCFpZEF0dHIuaXNFbXB0eSgpKSB7CkBAIC0zOTMs
OSArMzkyLDkgQEAgdm9pZCBIVE1MQ29sbGVjdGlvbkltcGw6OnVwZGF0ZU5hbWVDYWNoZQogICAg
ICAgICB9CiAgICAgICAgIGlmICghbmFtZUF0dHIuaXNFbXB0eSgpICYmIGlkQXR0ciAhPSBuYW1l
QXR0cgogICAgICAgICAgICAgJiYgKHR5cGUgIT0gRE9DX0FMTCB8fCAKLSAgICAgICAgICAgICAg
ICAoZS0+aWQoKSA9PSBJRF9JTUcgfHwgZS0+aWQoKSA9PSBJRF9GT1JNIHx8Ci0gICAgICAgICAg
ICAgICAgIGUtPmlkKCkgPT0gSURfQVBQTEVUIHx8IGUtPmlkKCkgPT0gSURfT0JKRUNUIHx8Ci0g
ICAgICAgICAgICAgICAgIGUtPmlkKCkgPT0gSURfRU1CRUQpKSkgeworICAgICAgICAgICAgICAg
IChlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjppbWcoKSkgfHwgZS0+aGFzTG9jYWxOYW1lKEhU
TUxOYW1lczo6Zm9ybSgpKSB8fAorICAgICAgICAgICAgICAgICBlLT5oYXNMb2NhbE5hbWUoSFRN
TE5hbWVzOjphcHBsZXQoKSkgfHwgZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b2JqZWN0KCkp
IHx8CisgICAgICAgICAgICAgICAgIGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmVtYmVkKCkp
KSkpIHsKICAgICAgICAgICAgIC8vIGFkZCB0byBuYW1lIGNhY2hlCiAgICAgICAgICAgICBRUHRy
VmVjdG9yPE5vZGVJbXBsPiAqbmFtZVZlY3RvciA9IGluZm8tPm5hbWVDYWNoZS5maW5kKG5hbWVB
dHRyKTsKICAgICAgICAgICAgIGlmICghbmFtZVZlY3RvcikgewpAQCAtNTMyLDEyICs1MzEsMTAg
QEAgTm9kZUltcGwqIEhUTUxGb3JtQ29sbGVjdGlvbkltcGw6OmdldE5hbQogCiBOb2RlSW1wbCog
SFRNTEZvcm1Db2xsZWN0aW9uSW1wbDo6Z2V0TmFtZWRGb3JtSXRlbShpbnQgYXR0cl9pZCwgY29u
c3QgRE9NU3RyaW5nJiBuYW1lLCBpbnQgZHVwbGljYXRlTnVtYmVyLCBib29sIGNhc2VTZW5zaXRp
dmUpIGNvbnN0CiB7Ci0gICAgaWYobV9iYXNlLT5ub2RlVHlwZSgpID09IE5vZGU6OkVMRU1FTlRf
Tk9ERSkKLSAgICB7CisgICAgaWYgKG1fYmFzZS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpFTEVNRU5U
X05PREUpIHsKICAgICAgICAgSFRNTEVsZW1lbnRJbXBsKiBiYXNlRWxlbWVudCA9IHN0YXRpY19j
YXN0PEhUTUxFbGVtZW50SW1wbCo+KG1fYmFzZS5nZXQoKSk7CiAgICAgICAgIGJvb2wgZm91bmRJ
bnB1dEVsZW1lbnRzID0gZmFsc2U7Ci0gICAgICAgIGlmKGJhc2VFbGVtZW50LT5pZCgpID09IElE
X0ZPUk0pCi0gICAgICAgIHsKKyAgICAgICAgaWYgKGJhc2VFbGVtZW50LT5oYXNMb2NhbE5hbWUo
SFRNTE5hbWVzOjpmb3JtKCkpKSB7CiAgICAgICAgICAgICBIVE1MRm9ybUVsZW1lbnRJbXBsKiBm
ID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50SW1wbCo+KGJhc2VFbGVtZW50KTsKICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmLT5mb3JtRWxlbWVudHMuY291bnQoKTsg
KytpKSB7CiAgICAgICAgICAgICAgICAgSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwqIGUgPSBm
LT5mb3JtRWxlbWVudHNbaV07CkBAIC01NTcsOCArNTU0LDcgQEAgTm9kZUltcGwqIEhUTUxGb3Jt
Q29sbGVjdGlvbkltcGw6OmdldE5hbQogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAg
ICAgaWYgKCAhZm91bmRJbnB1dEVsZW1lbnRzICkKLSAgICAgICAgeworICAgICAgICBpZiAoIWZv
dW5kSW5wdXRFbGVtZW50cykgewogICAgICAgICAgICAgSFRNTEZvcm1FbGVtZW50SW1wbCogZiA9
IHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudEltcGwqPihiYXNlRWxlbWVudCk7CiAKICAgICAg
ICAgICAgIGZvcih1bnNpZ25lZCBpID0gMDsgaSA8IGYtPmltZ0VsZW1lbnRzLmNvdW50KCk7ICsr
aSkKQEAgLTY1MCw3ICs2NDYsNyBAQCB2b2lkIEhUTUxGb3JtQ29sbGVjdGlvbkltcGw6OnVwZGF0
ZU5hbWVDCiAKICAgICBRRGljdDxjaGFyPiBmb3VuZElucHV0RWxlbWVudHM7CiAKLSAgICBpZiAo
bV9iYXNlLT5pZCgpICE9IElEX0ZPUk0pIHsKKyAgICBpZiAoIW1fYmFzZS0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OmZvcm0oKSkpIHsKICAgICAgICAgaW5mby0+aGFzTmFtZUNhY2hlID0gdHJ1ZTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KSW5kZXg6IGtodG1sL2h0bWwvaHRtbF9taXNjaW1wbC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbF9t
aXNjaW1wbC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE2CmRpZmYgLXUgLXAgLXIxLjE2IGto
dG1sL2h0bWwvaHRtbF9taXNjaW1wbC5oCi0tLSBraHRtbC9odG1sL2h0bWxfbWlzY2ltcGwuaAkx
MSBNYXkgMjAwNSAwMDo1ODoyOCAtMDAwMAkxLjE2CisrKyBraHRtbC9odG1sL2h0bWxfbWlzY2lt
cGwuaAkyNCBKdW4gMjAwNSAwMzoxMDoyMSAtMDAwMApAQCAtMzksNyArMzksOCBAQCBjbGFzcyBI
VE1MQmFzZUZvbnRFbGVtZW50SW1wbCA6IHB1YmxpYyBICiBwdWJsaWM6CiAgICAgSFRNTEJhc2VG
b250RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYyk7CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkg
Y29uc3Q7CisgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29u
c3QgeyByZXR1cm4gVGFnU3RhdHVzRm9yYmlkZGVuOyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJp
b3JpdHkoKSBjb25zdCB7IHJldHVybiAwOyB9CiAKICAgICBET01TdHJpbmcgY29sb3IoKSBjb25z
dDsKICAgICB2b2lkIHNldENvbG9yKGNvbnN0IERPTVN0cmluZyAmKTsKSW5kZXg6IGtodG1sL2h0
bWwvaHRtbF9vYmplY3RpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2Vi
Q29yZS9raHRtbC9odG1sL2h0bWxfb2JqZWN0aW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuNjYKZGlmZiAtdSAtcCAtcjEuNjYga2h0bWwvaHRtbC9odG1sX29iamVjdGltcGwuY3BwCi0t
LSBraHRtbC9odG1sL2h0bWxfb2JqZWN0aW1wbC5jcHAJMTkgSnVuIDIwMDUgMDM6Mzk6NTYgLTAw
MDAJMS42NgorKysga2h0bWwvaHRtbC9odG1sX29iamVjdGltcGwuY3BwCTI0IEp1biAyMDA1IDAz
OjEwOjIyIC0wMDAwCkBAIC01Nyw3ICs1Nyw3IEBAIG5hbWVzcGFjZSBET00gewogLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQogCiBIVE1MQXBwbGV0RWxlbWVudEltcGw6OkhUTUxBcHBsZXRFbGVtZW50SW1w
bChEb2N1bWVudFB0ciAqZG9jKQotICA6IEhUTUxFbGVtZW50SW1wbChkb2MpCisgIDogSFRNTEVs
ZW1lbnRJbXBsKEhUTUxOYW1lczo6YXBwbGV0KCksIGRvYykKIHsKICAgICBhcHBsZXRJbnN0YW5j
ZSA9IDA7CiAgICAgbV9hbGxQYXJhbXNBdmFpbGFibGUgPSBmYWxzZTsKQEAgLTY4LDExICs2OCw2
IEBAIEhUTUxBcHBsZXRFbGVtZW50SW1wbDo6fkhUTUxBcHBsZXRFbGVtZW4KICAgICBkZWxldGUg
YXBwbGV0SW5zdGFuY2U7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MQXBwbGV0RWxlbWVudEltcGw6
OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfQVBQTEVUOwotfQotCiBib29sIEhUTUxBcHBs
ZXRFbGVtZW50SW1wbDo6bWFwVG9FbnRyeShOb2RlSW1wbDo6SWQgYXR0ciwgTWFwcGVkQXR0cmli
dXRlRW50cnkmIHJlc3VsdCkgY29uc3QKIHsKICAgICBzd2l0Y2ggKGF0dHIpIHsKQEAgLTM1Miwx
OCArMzQ3LDEzIEBAIHZvaWQgSFRNTEFwcGxldEVsZW1lbnRJbXBsOjpzZXRXaWR0aChjb24KIC8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KIAogSFRNTEVtYmVkRWxlbWVudEltcGw6OkhUTUxFbWJlZEVsZW1l
bnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0gICAgOiBIVE1MRWxlbWVudEltcGwoZG9jKSwgZW1i
ZWRJbnN0YW5jZSgwKQorICAgIDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6ZW1iZWQoKSwg
ZG9jKSwgZW1iZWRJbnN0YW5jZSgwKQoge30KIAogSFRNTEVtYmVkRWxlbWVudEltcGw6On5IVE1M
RW1iZWRFbGVtZW50SW1wbCgpCiB7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MRW1iZWRFbGVtZW50
SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9FTUJFRDsKLX0KLQogI2lmIEFQUExF
X0NIQU5HRVMKIEtKUzo6QmluZGluZ3M6Okluc3RhbmNlICpIVE1MRW1iZWRFbGVtZW50SW1wbDo6
Z2V0RW1iZWRJbnN0YW5jZSgpIGNvbnN0CiB7CkBAIC00NzgsNyArNDY4LDcgQEAgYm9vbCBIVE1M
RW1iZWRFbGVtZW50SW1wbDo6cmVuZGVyZXJJc05lZQogICAgIEtIVE1MUGFydCAqcGFydCA9IGdl
dERvY3VtZW50KCktPnBhcnQoKTsKICAgICBpZiAoIXBhcnQpCiAJcmV0dXJuIGZhbHNlOwotICAg
IHJldHVybiBwYXJ0LT5wbHVnaW5zRW5hYmxlZCgpICYmIHBhcmVudE5vZGUoKS0+aWQoKSAhPSBJ
RF9PQkpFQ1Q7CisgICAgcmV0dXJuIHBhcnQtPnBsdWdpbnNFbmFibGVkKCkgJiYgIXBhcmVudE5v
ZGUoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9iamVjdCgpKTsKIH0KIAogUmVuZGVyT2JqZWN0
ICpIVE1MRW1iZWRFbGVtZW50SW1wbDo6Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEgKmFyZW5h
LCBSZW5kZXJTdHlsZSAqc3R5bGUpCkBAIC01MDMsOSArNDkzLDkgQEAgYm9vbCBIVE1MRW1iZWRF
bGVtZW50SW1wbDo6aXNVUkxBdHRyaWJ1dAogCiBIVE1MT2JqZWN0RWxlbWVudEltcGw6OkhUTUxP
YmplY3RFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKSAKICNpZiBBUFBMRV9DSEFOR0VTCi06
IEhUTUxFbGVtZW50SW1wbChkb2MpLCBtX2ltYWdlTG9hZGVyKDApLCBvYmplY3RJbnN0YW5jZSgw
KQorOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjpvYmplY3QoKSwgZG9jKSwgbV9pbWFnZUxv
YWRlcigwKSwgb2JqZWN0SW5zdGFuY2UoMCkKICNlbHNlCi06IEhUTUxFbGVtZW50SW1wbChkb2Mp
LCBtX2ltYWdlTG9hZGVyKDApCis6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6Om9iamVjdCgp
LCBkb2MpLCBtX2ltYWdlTG9hZGVyKDApCiAjZW5kaWYKIHsKICAgICBuZWVkV2lkZ2V0VXBkYXRl
ID0gZmFsc2U7CkBAIC01MTcsMTEgKzUwNyw2IEBAIEhUTUxPYmplY3RFbGVtZW50SW1wbDo6fkhU
TUxPYmplY3RFbGVtZW4KICAgICBkZWxldGUgbV9pbWFnZUxvYWRlcjsKIH0KIAotTm9kZUltcGw6
OklkIEhUTUxPYmplY3RFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9P
QkpFQ1Q7Ci19Ci0KICNpZiBBUFBMRV9DSEFOR0VTCiBLSlM6OkJpbmRpbmdzOjpJbnN0YW5jZSAq
SFRNTE9iamVjdEVsZW1lbnRJbXBsOjpnZXRPYmplY3RJbnN0YW5jZSgpIGNvbnN0CiB7CkBAIC05
NDQsNyArOTI5LDcgQEAgdm9pZCBIVE1MT2JqZWN0RWxlbWVudEltcGw6OnNldFdpZHRoKGNvbgog
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MUGFyYW1FbGVtZW50SW1wbDo6SFRNTFBhcmFtRWxl
bWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50SW1wbChkb2MpCisg
ICAgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjpwYXJhbSgpLCBkb2MpCiB7CiB9CiAKQEAg
LTk1MiwxMSArOTM3LDYgQEAgSFRNTFBhcmFtRWxlbWVudEltcGw6On5IVE1MUGFyYW1FbGVtZW50
SQogewogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTFBhcmFtRWxlbWVudEltcGw6OmlkKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gSURfUEFSQU07Ci19Ci0KIHZvaWQgSFRNTFBhcmFtRWxlbWVudEltcGw6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIpCiB7CiAgICAg
c3dpdGNoKCBhdHRyLT5pZCgpICkKSW5kZXg6IGtodG1sL2h0bWwvaHRtbF9vYmplY3RpbXBsLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sX29i
amVjdGltcGwuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zMQpkaWZmIC11IC1wIC1yMS4zMSBr
aHRtbC9odG1sL2h0bWxfb2JqZWN0aW1wbC5oCi0tLSBraHRtbC9odG1sL2h0bWxfb2JqZWN0aW1w
bC5oCTExIE1heSAyMDA1IDA1OjQ5OjM0IC0wMDAwCTEuMzEKKysrIGtodG1sL2h0bWwvaHRtbF9v
YmplY3RpbXBsLmgJMjQgSnVuIDIwMDUgMDM6MTA6MjIgLTAwMDAKQEAgLTQyLDEwICs0MiwxMCBA
QCBjbGFzcyBIVE1MQXBwbGV0RWxlbWVudEltcGwgOiBwdWJsaWMgSFRNCiB7CiBwdWJsaWM6CiAg
ICAgSFRNTEFwcGxldEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpOwotCiAgICAgfkhUTUxB
cHBsZXRFbGVtZW50SW1wbCgpOwogCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OworICAgIHZp
cnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRh
Z1N0YXR1c1JlcXVpcmVkOyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7
IHJldHVybiAxOyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShJZCBhdHRyLCBNYXBw
ZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VN
YXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqdG9rZW4pOwpAQCAtMTEyLDExICsx
MTIsMTEgQEAgY2xhc3MgSFRNTEVtYmVkRWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTAogewogcHVi
bGljOgogICAgIEhUTUxFbWJlZEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpOwotCiAgICAg
fkhUTUxFbWJlZEVsZW1lbnRJbXBsKCk7CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7Ci0K
KyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJl
dHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQorICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkg
Y29uc3QgeyByZXR1cm4gMDsgfQorICAgIAogICAgIHZpcnR1YWwgYm9vbCBtYXBUb0VudHJ5KElk
IGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0OwogICAgIHZpcnR1YWwg
dm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICphdHRyKTsKIApA
QCAtMTQ2LDEwICsxNDYsMTAgQEAgY2xhc3MgSFRNTE9iamVjdEVsZW1lbnRJbXBsIDogcHVibGlj
IEhUTQogewogcHVibGljOgogICAgIEhUTUxPYmplY3RFbGVtZW50SW1wbChEb2N1bWVudFB0ciAq
ZG9jKTsKLQogICAgIH5IVE1MT2JqZWN0RWxlbWVudEltcGwoKTsKIAotICAgIHZpcnR1YWwgSWQg
aWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQo
KSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQorICAgIHZpcnR1YWwgaW50IHRh
Z1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gNzsgfQogCiAgICAgSFRNTEZvcm1FbGVtZW50SW1w
bCAqZm9ybSgpIGNvbnN0OwogCkBAIC0yNDcsMTAgKzI0NywxMCBAQCBjbGFzcyBIVE1MUGFyYW1F
bGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MCiAgICAgZnJpZW5kIGNsYXNzIEhUTUxBcHBsZXRFbGVt
ZW50SW1wbDsKIHB1YmxpYzoKICAgICBIVE1MUGFyYW1FbGVtZW50SW1wbChEb2N1bWVudFB0ciAq
ZG9jKTsKLQogICAgIH5IVE1MUGFyYW1FbGVtZW50SW1wbCgpOwogCi0gICAgdmlydHVhbCBJZCBp
ZCgpIGNvbnN0OworICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgp
IGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c0ZvcmJpZGRlbjsgfQorICAgIHZpcnR1YWwgaW50IHRh
Z1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMDsgfQogCiAgICAgdmlydHVhbCB2b2lkIHBhcnNl
TWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKnRva2VuKTsKIApJbmRleDoga2h0
bWwvaHRtbC9odG1sX3RhYmxlaW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sX3RhYmxlaW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuNTMKZGlmZiAtdSAtcCAtcjEuNTMga2h0bWwvaHRtbC9odG1sX3RhYmxlaW1wbC5jcHAK
LS0tIGtodG1sL2h0bWwvaHRtbF90YWJsZWltcGwuY3BwCTE3IEp1biAyMDA1IDIxOjU1OjM5IC0w
MDAwCTEuNTMKKysrIGtodG1sL2h0bWwvaHRtbF90YWJsZWltcGwuY3BwCTI0IEp1biAyMDA1IDAz
OjEwOjIzIC0wMDAwCkBAIC01MSw3ICs1MSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBraHRtbDsKIG5h
bWVzcGFjZSBET00gewogCiBIVE1MVGFibGVFbGVtZW50SW1wbDo6SFRNTFRhYmxlRWxlbWVudElt
cGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgOiBIVE1MRWxlbWVudEltcGwoZG9jKQorICA6IEhUTUxF
bGVtZW50SW1wbChIVE1MTmFtZXM6OnRhYmxlKCksIGRvYykKIHsKICAgICB0Q2FwdGlvbiA9IDA7
CiAgICAgaGVhZCA9IDA7CkBAIC03MywxMSArNzMsNiBAQCBIVE1MVGFibGVFbGVtZW50SW1wbDo6
fkhUTUxUYWJsZUVsZW1lbnRJCiB7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MVGFibGVFbGVtZW50
SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9UQUJMRTsKLX0KLQogTm9kZUltcGwq
IEhUTUxUYWJsZUVsZW1lbnRJbXBsOjpzZXRDYXB0aW9uKCBIVE1MVGFibGVDYXB0aW9uRWxlbWVu
dEltcGwgKmMgKQogewogICAgIGludCBleGNlcHRpb25jb2RlID0gMDsKQEAgLTE0Niw3ICsxNDEs
NyBAQCBIVE1MRWxlbWVudEltcGwgKkhUTUxUYWJsZUVsZW1lbnRJbXBsOjpjCiAgICAgaWYoIWhl
YWQpCiAgICAgewogICAgICAgICBpbnQgZXhjZXB0aW9uY29kZSA9IDA7Ci0gICAgICAgIGhlYWQg
PSBuZXcgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsKGRvY1B0cigpLCBJRF9USEVBRCwgdHJ1
ZSAvKiBpbXBsaWNpdCAqLyk7CisgICAgICAgIGhlYWQgPSBuZXcgSFRNTFRhYmxlU2VjdGlvbkVs
ZW1lbnRJbXBsKEhUTUxOYW1lczo6dGhlYWQoKSwgZG9jUHRyKCksIHRydWUgLyogaW1wbGljaXQg
Ki8pOwogICAgICAgICBpZihmb290KQogICAgICAgICAgICAgaW5zZXJ0QmVmb3JlKCBoZWFkLCBm
b290LCBleGNlcHRpb25jb2RlICk7CiAgICAgICAgIGVsc2UgaWYoZmlyc3RCb2R5KQpAQCAtMTcx
LDcgKzE2Niw3IEBAIEhUTUxFbGVtZW50SW1wbCAqSFRNTFRhYmxlRWxlbWVudEltcGw6OmMKICAg
ICBpZighZm9vdCkKICAgICB7CiAgICAgICAgIGludCBleGNlcHRpb25jb2RlID0gMDsKLSAgICAg
ICAgZm9vdCA9IG5ldyBIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGwoZG9jUHRyKCksIElEX1RG
T09ULCB0cnVlIC8qaW1wbGljaXQgKi8pOworICAgICAgICBmb290ID0gbmV3IEhUTUxUYWJsZVNl
Y3Rpb25FbGVtZW50SW1wbChIVE1MTmFtZXM6OnRmb290KCksIGRvY1B0cigpLCB0cnVlIC8qaW1w
bGljaXQgKi8pOwogICAgICAgICBpZihmaXJzdEJvZHkpCiAgICAgICAgICAgICBpbnNlcnRCZWZv
cmUoIGZvb3QsIGZpcnN0Qm9keSwgZXhjZXB0aW9uY29kZSApOwogICAgICAgICBlbHNlCkBAIC0y
MTYsNyArMjExLDcgQEAgSFRNTEVsZW1lbnRJbXBsICpIVE1MVGFibGVFbGVtZW50SW1wbDo6aQog
ICAgIC8vIChub3RlOiB0aGlzIGlzIGRpZmZlcmVudCBmcm9tICJpZiB0aGUgdGFibGUgaGFzIG5v
IHNlY3Rpb25zIiwgc2luY2Ugd2UgY2FuIGhhdmUKICAgICAvLyA8VEFCTEU+PFRSPikKICAgICBp
ZighZmlyc3RCb2R5ICYmICFoZWFkICYmICFmb290ICYmICFoYXNDaGlsZE5vZGVzKCkpCi0gICAg
ICAgIHNldFRCb2R5KCBuZXcgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsKGRvY1B0cigpLCBJ
RF9UQk9EWSwgdHJ1ZSAvKiBpbXBsaWNpdCAqLykgKTsKKyAgICAgICAgc2V0VEJvZHkoIG5ldyBI
VE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGwoSFRNTE5hbWVzOjp0Ym9keSgpLCBkb2NQdHIoKSwg
dHJ1ZSAvKiBpbXBsaWNpdCAqLykgKTsKIAogICAgIC8va2REZWJ1Zyg2MDMwKSA8PCBrX2Z1bmNp
bmZvIDw8IGluZGV4IDw8IGVuZGw7CiAgICAgLy8gSUUgdHJlYXRzIGluZGV4PS0xIGFzIGRlZmF1
bHQgdmFsdWUgbWVhbmluZyAnYXBwZW5kIGFmdGVyIGxhc3QnCkBAIC0yMzAsNyArMjI1LDggQEAg
SFRNTEVsZW1lbnRJbXBsICpIVE1MVGFibGVFbGVtZW50SW1wbDo6aQogICAgIHsKIAkvLyB0aGVy
ZSBjb3VsZCBiZSAyIHRmb290IGVsZW1lbnRzIGluIHRoZSB0YWJsZS4gT25seSB0aGUgZmlyc3Qg
b25lIGlzIHRoZSAiZm9vdCIsIHRoYXQncyB3aHkgd2UgaGF2ZSB0aGUgbW9yZQogCS8vIGNvbXBs
aWNhdGVkIGlmIHN0YXRlbWVudCBiZWxvdy4KLSAgICAgICAgaWYgKCBub2RlICE9IGZvb3QgJiYg
KG5vZGUtPmlkKCkgPT0gSURfVEhFQUQgfHwgbm9kZS0+aWQoKSA9PSBJRF9URk9PVCB8fCBub2Rl
LT5pZCgpID09IElEX1RCT0RZKSApCisgICAgICAgIGlmIChub2RlICE9IGZvb3QgJiYgKG5vZGUt
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0aGVhZCgpKSB8fCBub2RlLT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6dGZvb3QoKSkgfHwgCisgICAgICAgICAgICBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6dGJvZHkoKSkpKQogICAgICAgICB7CiAgICAgICAgICAgICBzZWN0aW9uID0gc3RhdGljX2Nh
c3Q8SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsICo+KG5vZGUpOwogICAgICAgICAgICAgbGFz
dFNlY3Rpb24gPSBzZWN0aW9uOwpAQCAtMjc2LDggKzI3Miw4IEBAIHZvaWQgSFRNTFRhYmxlRWxl
bWVudEltcGw6OmRlbGV0ZVJvdyggbG8KICAgICBib29sIGZvdW5kID0gZmFsc2U7CiAgICAgZm9y
ICggOyBub2RlIDsgbm9kZSA9IG5vZGUtPm5leHRTaWJsaW5nKCkgKQogICAgIHsKLSAgICAgICAg
aWYgKCBub2RlICE9IGZvb3QgJiYgKG5vZGUtPmlkKCkgPT0gSURfVEhFQUQgfHwgbm9kZS0+aWQo
KSA9PSBJRF9URk9PVCB8fCBub2RlLT5pZCgpID09IElEX1RCT0RZKSApCi0gICAgICAgIHsKKyAg
ICAgICAgaWYgKG5vZGUgIT0gZm9vdCAmJiAobm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRo
ZWFkKCkpIHx8IG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0Zm9vdCgpKSB8fCAKKyAgICAg
ICAgICAgIG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0Ym9keSgpKSkpIHsKICAgICAgICAg
ICAgIHNlY3Rpb24gPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGwgKj4o
bm9kZSk7CiAgICAgICAgICAgICBsYXN0U2VjdGlvbiA9IHNlY3Rpb247CiAgICAgICAgICAgICBp
bnQgcm93cyA9IHNlY3Rpb24tPm51bVJvd3MoKTsKQEAgLTMwOSw3ICszMDUsNyBAQCBOb2RlSW1w
bCAqSFRNTFRhYmxlRWxlbWVudEltcGw6OmFkZENoaWxkCiAgICAga2REZWJ1ZyggNjAzMCApIDw8
IG5vZGVOYW1lKCkuc3RyaW5nKCkgPDwgIihUYWJsZSk6OmFkZENoaWxkKCAiIDw8IGNoaWxkLT5u
b2RlTmFtZSgpLnN0cmluZygpIDw8ICIgKSIgPDwgZW5kbDsKICNlbmRpZgogCi0gICAgaWYgKGNo
aWxkLT5pZCgpID09IElEX0ZPUk0pIHsKKyAgICBpZiAoY2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjpmb3JtKCkpKSB7CiAgICAgICAgIC8vIEZpcnN0IGFkZCB0aGUgY2hpbGQuCiAgICAgICAg
IEhUTUxFbGVtZW50SW1wbDo6YWRkQ2hpbGQoY2hpbGQpOwogICAgICAgICAvLyBOb3cgc2ltcGx5
IHJldHVybiBvdXJzZWx2ZXMgYXMgdGhlIG5ld25vZGUuICBUaGlzIGhhcyB0aGUgZWZmZWN0IG9m
CkBAIC0zMzcsMjggKzMzMywxNSBAQCBOb2RlSW1wbCAqSFRNTFRhYmxlRWxlbWVudEltcGw6OmFk
ZENoaWxkCiAKICAgICBpbnQgZXhjZXB0aW9uY29kZSA9IDA7CiAgICAgTm9kZUltcGwgKnJldHZh
bCA9IGFwcGVuZENoaWxkKCBjaGlsZCwgZXhjZXB0aW9uY29kZSApOwotICAgIGlmICggcmV0dmFs
ICkgewotCXN3aXRjaChjaGlsZC0+aWQoKSkgewotCWNhc2UgSURfQ0FQVElPTjoKLQkgICAgaWYg
KCAhdENhcHRpb24gKQotCQl0Q2FwdGlvbiA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZUNhcHRpb25F
bGVtZW50SW1wbCAqPihjaGlsZCk7Ci0JICAgIGJyZWFrOwotCWNhc2UgSURfQ09MOgotCWNhc2Ug
SURfQ09MR1JPVVA6Ci0JICAgIGJyZWFrOwotCWNhc2UgSURfVEhFQUQ6Ci0JICAgIGlmICggIWhl
YWQgKQotCQloZWFkID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsICo+
KGNoaWxkKTsKLQkgICAgYnJlYWs7Ci0JY2FzZSBJRF9URk9PVDoKLQkgICAgaWYgKCAhZm9vdCAp
Ci0JCWZvb3QgPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGwgKj4oY2hp
bGQpOwotCSAgICBicmVhazsKLQljYXNlIElEX1RCT0RZOgotCSAgICBpZiAoICFmaXJzdEJvZHkg
KQotCQlmaXJzdEJvZHkgPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGwg
Kj4oY2hpbGQpOwotCSAgICBicmVhazsKLQl9CisgICAgaWYgKHJldHZhbCkgeworICAgICAgICBp
ZiAoIXRDYXB0aW9uICYmIGNoaWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Y2FwdGlvbigpKSkK
KyAgICAgICAgICAgIHRDYXB0aW9uID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ2FwdGlvbkVsZW1l
bnRJbXBsICo+KGNoaWxkKTsKKyAgICAgICAgZWxzZSBpZiAoIWhlYWQgJiYgY2hpbGQtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjp0aGVhZCgpKSkKKyAgICAgICAgICAgIGhlYWQgPSBzdGF0aWNfY2Fz
dDxIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGwgKj4oY2hpbGQpOworICAgICAgICBlbHNlIGlm
ICghZm9vdCAmJiBjaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRmb290KCkpKQorICAgICAg
ICAgICAgZm9vdCA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbCAqPihj
aGlsZCk7CisJZWxzZSBpZiAoIWZpcnN0Qm9keSAmJiBjaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OnRib2R5KCkpKQorCSAgICBmaXJzdEJvZHkgPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVTZWN0
aW9uRWxlbWVudEltcGwgKj4oY2hpbGQpOwogICAgIH0KICAgICByZXR1cm4gcmV0dmFsOwogfQpA
QCAtODAyLDI2ICs3ODUsMTkgQEAgdm9pZCBIVE1MVGFibGVQYXJ0RWxlbWVudEltcGw6OnBhcnNl
TWFwcAogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1w
bDo6SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2hvcnQg
dGFnaWQsIGJvb2wgaW1wbGljaXQpCi0gICAgOiBIVE1MVGFibGVQYXJ0RWxlbWVudEltcGwoZG9j
KQorSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsOjpIVE1MVGFibGVTZWN0aW9uRWxlbWVudElt
cGwoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnRQdHIgKmRvYywgYm9vbCBp
bXBsaWNpdCkKKyAgICA6IEhUTUxUYWJsZVBhcnRFbGVtZW50SW1wbCh0YWdOYW1lLCBkb2MpCiB7
Ci0gICAgX2lkID0gdGFnaWQ7CiAgICAgbV9pbXBsaWNpdCA9IGltcGxpY2l0OwogfQogCi1Ob2Rl
SW1wbDo6SWQgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIF9pZDsKLX0KLQogTm9kZUltcGwgKkhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbDo6
YWRkQ2hpbGQoTm9kZUltcGwgKmNoaWxkKQogewogI2lmZGVmIERFQlVHX0xBWU9VVAogICAgIGtk
RGVidWcoIDYwMzAgKSA8PCBub2RlTmFtZSgpLnN0cmluZygpIDw8ICIoVGJvZHkpOjphZGRDaGls
ZCggIiA8PCBjaGlsZC0+bm9kZU5hbWUoKS5zdHJpbmcoKSA8PCAiICkiIDw8IGVuZGw7CiAjZW5k
aWYKIAotICAgIGlmIChjaGlsZC0+aWQoKSA9PSBJRF9GT1JNKSB7CisgICAgaWYgKGNoaWxkLT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6Zm9ybSgpKSkgewogICAgICAgICAvLyBGaXJzdCBhZGQgdGhl
IGNoaWxkLgogICAgICAgICBIVE1MRWxlbWVudEltcGw6OmFkZENoaWxkKGNoaWxkKTsKICAgICAg
ICAgLy8gTm93IHNpbXBseSByZXR1cm4gb3Vyc2VsdmVzIGFzIHRoZSBuZXdub2RlLiAgVGhpcyBo
YXMgdGhlIGVmZmVjdCBvZgpAQCAtODc3LDcgKzg1Myw3IEBAIGludCBIVE1MVGFibGVTZWN0aW9u
RWxlbWVudEltcGw6Om51bVJvd3MKICAgICBpbnQgcm93cyA9IDA7CiAgICAgY29uc3QgTm9kZUlt
cGwgKm4gPSBmaXJzdENoaWxkKCk7CiAgICAgd2hpbGUgKG4pIHsKLSAgICAgICAgaWYgKG4tPmlk
KCkgPT0gSURfVFIpCisgICAgICAgIGlmIChuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dHIoKSkp
CiAgICAgICAgICAgICByb3dzKys7CiAgICAgICAgIG4gPSBuLT5uZXh0U2libGluZygpOwogICAg
IH0KQEAgLTkzMiwxOCArOTA4LDEzIEBAIFNoYXJlZFB0cjxIVE1MQ29sbGVjdGlvbkltcGw+IEhU
TUxUYWJsZVMKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Ob2RlSW1wbDo6SWQgSFRNTFRhYmxl
Um93RWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfVFI7Ci19Ci0KIE5v
ZGVJbXBsICpIVE1MVGFibGVSb3dFbGVtZW50SW1wbDo6YWRkQ2hpbGQoTm9kZUltcGwgKmNoaWxk
KQogewogI2lmZGVmIERFQlVHX0xBWU9VVAogICAgIGtkRGVidWcoIDYwMzAgKSA8PCBub2RlTmFt
ZSgpLnN0cmluZygpIDw8ICIoVHJvdyk6OmFkZENoaWxkKCAiIDw8IGNoaWxkLT5ub2RlTmFtZSgp
LnN0cmluZygpIDw8ICIgKSIgPDwgZW5kbDsKICNlbmRpZgogCi0gICAgaWYgKGNoaWxkLT5pZCgp
ID09IElEX0ZPUk0pIHsKKyAgICBpZiAoY2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpmb3Jt
KCkpKSB7CiAgICAgICAgIC8vIEZpcnN0IGFkZCB0aGUgY2hpbGQuCiAgICAgICAgIEhUTUxFbGVt
ZW50SW1wbDo6YWRkQ2hpbGQoY2hpbGQpOwogICAgICAgICAvLyBOb3cgc2ltcGx5IHJldHVybiBv
dXJzZWx2ZXMgYXMgdGhlIG5ld25vZGUuICBUaGlzIGhhcyB0aGUgZWZmZWN0IG9mCkBAIC05NTgs
MTYgKzkyOSwxNiBAQCBsb25nIEhUTUxUYWJsZVJvd0VsZW1lbnRJbXBsOjpyb3dJbmRleCgpCiAg
ICAgaW50IHJJbmRleCA9IDA7CiAKICAgICBOb2RlSW1wbCAqdGFibGUgPSBwYXJlbnROb2RlKCk7
Ci0gICAgaWYgKCAhdGFibGUgKQorICAgIGlmICghdGFibGUpCiAJcmV0dXJuIC0xOwogICAgIHRh
YmxlID0gdGFibGUtPnBhcmVudE5vZGUoKTsKLSAgICBpZiAoICF0YWJsZSB8fCB0YWJsZS0+aWQo
KSAhPSBJRF9UQUJMRSApCisgICAgaWYgKCF0YWJsZSB8fCAhdGFibGUtPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjp0YWJsZSgpKSkKIAlyZXR1cm4gLTE7CiAKICAgICBIVE1MVGFibGVTZWN0aW9uRWxl
bWVudEltcGwgKmZvb3QgPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVFbGVtZW50SW1wbCAqPih0YWJs
ZSktPnRGb290KCk7CiAgICAgTm9kZUltcGwgKm5vZGUgPSB0YWJsZS0+Zmlyc3RDaGlsZCgpOwot
ICAgIHdoaWxlICggbm9kZSApIHsKLSAgICAgICAgaWYgKCBub2RlICE9IGZvb3QgJiYgKG5vZGUt
PmlkKCkgPT0gSURfVEhFQUQgfHwgbm9kZS0+aWQoKSA9PSBJRF9URk9PVCB8fCBub2RlLT5pZCgp
ID09IElEX1RCT0RZKSApIHsKKyAgICB3aGlsZSAobm9kZSkgeworICAgICAgICBpZiAobm9kZSAh
PSBmb290ICYmIChub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGhlYWQoKSkgfHwgbm9kZS0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRmb290KCkpIHx8IG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjp0Ym9keSgpKSkpIHsKIAkgICAgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsKiBzZWN0
aW9uID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsICo+KG5vZGUpOwog
CSAgICBjb25zdCBOb2RlSW1wbCAqcm93ID0gc2VjdGlvbi0+Zmlyc3RDaGlsZCgpOwogCSAgICB3
aGlsZSAoIHJvdyApIHsKQEAgLTk5Niw3ICs5NjcsNyBAQCBsb25nIEhUTUxUYWJsZVJvd0VsZW1l
bnRJbXBsOjpzZWN0aW9uUm93CiAgICAgY29uc3QgTm9kZUltcGwgKm4gPSB0aGlzOwogICAgIGRv
IHsKICAgICAgICAgbiA9IG4tPnByZXZpb3VzU2libGluZygpOwotICAgICAgICBpZiAobiAmJiBu
LT5pc0VsZW1lbnROb2RlKCkgJiYgbi0+aWQoKSA9PSBJRF9UUikKKyAgICAgICAgaWYgKG4gJiYg
bi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRyKCkpKQogICAgICAgICAgICAgckluZGV4Kys7CiAg
ICAgfQogICAgIHdoaWxlIChuKTsKQEAgLTEwMTMsNyArOTg0LDcgQEAgSFRNTEVsZW1lbnRJbXBs
ICpIVE1MVGFibGVSb3dFbGVtZW50SW1wbAogICAgICAgICBleGNlcHRpb25jb2RlID0gRE9NRXhj
ZXB0aW9uOjpJTkRFWF9TSVpFX0VSUjsgLy8gcGVyIHRoZSBET00KICAgICBlbHNlCiAgICAgewot
ICAgICAgICBjID0gbmV3IEhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbChkb2NQdHIoKSwgSURfVEQp
OworICAgICAgICBjID0gbmV3IEhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbChIVE1MTmFtZXM6OnRk
KCksIGRvY1B0cigpKTsKICAgICAgICAgaWYobnVtQ2VsbHMgPT0gaW5kZXggfHwgaW5kZXggPT0g
LTEpCiAgICAgICAgICAgICBhcHBlbmRDaGlsZChjLCBleGNlcHRpb25jb2RlKTsKICAgICAgICAg
ZWxzZSB7CkBAIC0xMTAzLDE1ICsxMDc0LDE0IEBAIHZvaWQgSFRNTFRhYmxlUm93RWxlbWVudElt
cGw6OnNldFZBbGlnbigKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1IVE1MVGFibGVDZWxsRWxl
bWVudEltcGw6OkhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCBpbnQg
dGFnKQotICA6IEhUTUxUYWJsZVBhcnRFbGVtZW50SW1wbChkb2MpCitIVE1MVGFibGVDZWxsRWxl
bWVudEltcGw6OkhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbChjb25zdCBRdWFsaWZpZWROYW1lJiB0
YWdOYW1lLCBEb2N1bWVudFB0ciAqZG9jKQorICA6IEhUTUxUYWJsZVBhcnRFbGVtZW50SW1wbCh0
YWdOYW1lLCBkb2MpCiB7Ci0gIF9jb2wgPSAtMTsKLSAgX3JvdyA9IC0xOwotICBjU3BhbiA9IHJT
cGFuID0gMTsKLSAgX2lkID0gdGFnOwotICByb3dIZWlnaHQgPSAwOwotICBtX3NvbGlkID0gZmFs
c2U7CisgICAgX2NvbCA9IC0xOworICAgIF9yb3cgPSAtMTsKKyAgICBjU3BhbiA9IHJTcGFuID0g
MTsKKyAgICByb3dIZWlnaHQgPSAwOworICAgIG1fc29saWQgPSBmYWxzZTsKIH0KIAogSFRNTFRh
YmxlQ2VsbEVsZW1lbnRJbXBsOjp+SFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsKCkKQEAgLTExMjIs
NyArMTA5Miw3IEBAIGxvbmcgSFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsOjpjZWxsSW5kZXgKIHsK
ICAgICBpbnQgaW5kZXggPSAwOwogICAgIGZvciAoY29uc3QgTm9kZUltcGwgKiBub2RlID0gcHJl
dmlvdXNTaWJsaW5nKCk7IG5vZGU7IG5vZGUgPSBub2RlLT5wcmV2aW91c1NpYmxpbmcoKSkgewot
ICAgICAgICBpZiAobm9kZS0+aWQoKSA9PSBJRF9URCB8fCBub2RlLT5pZCgpID09IElEX1RIKQor
ICAgICAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRkKCkpIHx8IG5vZGUtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjp0aCgpKSkKICAgICAgICAgICAgIGluZGV4Kys7CiAgICAgfQog
ICAgIApAQCAtMTE4OSw5ICsxMTU5LDkgQEAgdm9pZCBIVE1MVGFibGVDZWxsRWxlbWVudEltcGw6
OnBhcnNlTWFwcAogLy8gdXNlZCBieSB0YWJsZSBjZWxscyB0byBzaGFyZSBzdHlsZSBkZWNscyBj
cmVhdGVkIGJ5IHRoZSBlbmNsb3NpbmcgdGFibGUuCiBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bkltcGwqIEhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbDo6YWRkaXRpb25hbEF0dHJpYnV0ZVN0eWxl
RGVjbCgpCiB7Ci0gICAgSFRNTEVsZW1lbnRJbXBsKiBwID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1l
bnRJbXBsKj4ocGFyZW50Tm9kZSgpKTsKLSAgICB3aGlsZShwICYmIHAtPmlkKCkgIT0gSURfVEFC
TEUpCi0gICAgICAgIHAgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwqPihwLT5wYXJlbnRO
b2RlKCkpOworICAgIE5vZGVJbXBsKiBwID0gcGFyZW50Tm9kZSgpOworICAgIHdoaWxlIChwICYm
ICFwLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGFibGUoKSkpCisgICAgICAgIHAgPSBwLT5wYXJl
bnROb2RlKCk7CiAKICAgICBpZiAocCkgewogICAgICAgICBIVE1MVGFibGVFbGVtZW50SW1wbCog
dGFibGUgPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVFbGVtZW50SW1wbCo+KHApOwpAQCAtMTIwMSwx
NSArMTE3MSw2IEBAIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uSW1wbCogSFRNTFRhYmwKICAg
ICByZXR1cm4gMDsKIH0KIAotdm9pZCBIVE1MVGFibGVDZWxsRWxlbWVudEltcGw6OmF0dGFjaCgp
Ci17Ci0gICAgSFRNTEVsZW1lbnRJbXBsKiBwID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBs
Kj4ocGFyZW50Tm9kZSgpKTsKLSAgICB3aGlsZShwICYmIHAtPmlkKCkgIT0gSURfVEFCTEUpCi0g
ICAgICAgIHAgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwqPihwLT5wYXJlbnROb2RlKCkp
OwotCi0gICAgSFRNTFRhYmxlUGFydEVsZW1lbnRJbXBsOjphdHRhY2goKTsKLX0KLQogYm9vbCBI
VE1MVGFibGVDZWxsRWxlbWVudEltcGw6OmlzVVJMQXR0cmlidXRlKEF0dHJpYnV0ZUltcGwgKmF0
dHIpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGF0dHItPmlkKCkgPT0gQVRUUl9CQUNLR1JPVU5EOwpA
QCAtMTM0NywxNiArMTMwOCwxMCBAQCB2b2lkIEhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbDo6c2V0
V2lkdGgoCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSFRNTFRhYmxlQ29sRWxlbWVudEltcGw6
OkhUTUxUYWJsZUNvbEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIHVzaG9ydCBpKQotICAg
IDogSFRNTFRhYmxlUGFydEVsZW1lbnRJbXBsKGRvYykKK0hUTUxUYWJsZUNvbEVsZW1lbnRJbXBs
OjpIVE1MVGFibGVDb2xFbGVtZW50SW1wbChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBE
b2N1bWVudFB0ciAqZG9jKQorICAgIDogSFRNTFRhYmxlUGFydEVsZW1lbnRJbXBsKHRhZ05hbWUs
IGRvYykKIHsKLSAgICBfaWQgPSBpOwotICAgIF9zcGFuID0gKF9pZCA9PSBJRF9DT0xHUk9VUCA/
IDAgOiAxKTsKLX0KLQotTm9kZUltcGw6OklkIEhUTUxUYWJsZUNvbEVsZW1lbnRJbXBsOjppZCgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIF9pZDsKKyAgICBfc3BhbiA9ICh0YWdOYW1lLm1hdGNoZXMo
SFRNTE5hbWVzOjpjb2xncm91cCgpKSA/IDAgOiAxKTsKIH0KIAogYm9vbCBIVE1MVGFibGVDb2xF
bGVtZW50SW1wbDo6bWFwVG9FbnRyeShOb2RlSW1wbDo6SWQgYXR0ciwgTWFwcGVkQXR0cmlidXRl
RW50cnkmIHJlc3VsdCkgY29uc3QKQEAgLTE0NDcsMTEgKzE0MDIsNiBAQCB2b2lkIEhUTUxUYWJs
ZUNvbEVsZW1lbnRJbXBsOjpzZXRXaWR0aChjCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotTm9k
ZUltcGw6OklkIEhUTUxUYWJsZUNhcHRpb25FbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAg
IHJldHVybiBJRF9DQVBUSU9OOwotfQotCiBib29sIEhUTUxUYWJsZUNhcHRpb25FbGVtZW50SW1w
bDo6bWFwVG9FbnRyeShOb2RlSW1wbDo6SWQgYXR0ciwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJl
c3VsdCkgY29uc3QKIHsKICAgICBpZiAoYXR0ciA9PSBBVFRSX0FMSUdOKSB7CkluZGV4OiBraHRt
bC9odG1sL2h0bWxfdGFibGVpbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dl
YkNvcmUva2h0bWwvaHRtbC9odG1sX3RhYmxlaW1wbC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjIxCmRpZmYgLXUgLXAgLXIxLjIxIGtodG1sL2h0bWwvaHRtbF90YWJsZWltcGwuaAotLS0ga2h0
bWwvaHRtbC9odG1sX3RhYmxlaW1wbC5oCTE3IEp1biAyMDA1IDIxOjU1OjM5IC0wMDAwCTEuMjEK
KysrIGtodG1sL2h0bWwvaHRtbF90YWJsZWltcGwuaAkyNCBKdW4gMjAwNSAwMzoxMDoyMyAtMDAw
MApAQCAtNjIsNyArNjIsOCBAQCBwdWJsaWM6CiAgICAgSFRNTFRhYmxlRWxlbWVudEltcGwoRG9j
dW1lbnRQdHIgKmRvYyk7CiAgICAgfkhUTUxUYWJsZUVsZW1lbnRJbXBsKCk7CiAKLSAgICB2aXJ0
dWFsIElkIGlkKCkgY29uc3Q7CisgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVp
cmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzUmVxdWlyZWQ7IH0KKyAgICB2aXJ0dWFs
IGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDk7IH0KIAogICAgIEhUTUxUYWJsZUNh
cHRpb25FbGVtZW50SW1wbCAqY2FwdGlvbigpIGNvbnN0IHsgcmV0dXJuIHRDYXB0aW9uOyB9CiAg
ICAgTm9kZUltcGwgKnNldENhcHRpb24oIEhUTUxUYWJsZUNhcHRpb25FbGVtZW50SW1wbCAqICk7
CkBAIC0xNDcsOCArMTQ4LDggQEAgY2xhc3MgSFRNTFRhYmxlUGFydEVsZW1lbnRJbXBsIDogcHVi
bGljIAogCiB7CiBwdWJsaWM6Ci0gICAgSFRNTFRhYmxlUGFydEVsZW1lbnRJbXBsKERvY3VtZW50
UHRyICpkb2MpCi0gICAgICAgIDogSFRNTEVsZW1lbnRJbXBsKGRvYykKKyAgICBIVE1MVGFibGVQ
YXJ0RWxlbWVudEltcGwoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnRQdHIg
KmRvYykKKyAgICAgICAgOiBIVE1MRWxlbWVudEltcGwodGFnTmFtZSwgZG9jKQogICAgICAgICB7
IH0KIAogICAgIHZpcnR1YWwgYm9vbCBtYXBUb0VudHJ5KE5vZGVJbXBsOjpJZCBhdHRyLCBNYXBw
ZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdDsKQEAgLTE2MCw5ICsxNjEsMTAgQEAgcHVi
bGljOgogY2xhc3MgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsIDogcHVibGljIEhUTUxUYWJs
ZVBhcnRFbGVtZW50SW1wbAogewogcHVibGljOgotICAgIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50
SW1wbChEb2N1bWVudFB0ciAqZG9jLCB1c2hvcnQgdGFnaWQsIGJvb2wgaW1wbGljaXQpOworICAg
IEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1l
LCBEb2N1bWVudFB0ciAqZG9jLCBib29sIGltcGxpY2l0KTsKIAotICAgIHZpcnR1YWwgSWQgaWQo
KSBjb25zdDsKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBj
b25zdCB7IHJldHVybiBUYWdTdGF0dXNPcHRpb25hbDsgfQorICAgIHZpcnR1YWwgaW50IHRhZ1By
aW9yaXR5KCkgY29uc3QgeyByZXR1cm4gODsgfQogCiAgICAgdmlydHVhbCBOb2RlSW1wbCAqYWRk
Q2hpbGQoTm9kZUltcGwgKmNoaWxkKTsKICAgICAKQEAgLTE4NCw5ICsxODYsNiBAQCBwdWJsaWM6
CiAgICAgdm9pZCBzZXRWQWxpZ24oIGNvbnN0IERPTVN0cmluZyAmICk7CiAKICAgICBraHRtbDo6
U2hhcmVkUHRyPEhUTUxDb2xsZWN0aW9uSW1wbD4gcm93cygpOwotCi1wcm90ZWN0ZWQ6Ci0gICAg
dXNob3J0IF9pZDsKIH07CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTE5NSw5ICsxOTQsMTAg
QEAgY2xhc3MgSFRNTFRhYmxlUm93RWxlbWVudEltcGwgOiBwdWJsaWMgSAogewogcHVibGljOgog
ICAgIEhUTUxUYWJsZVJvd0VsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0gICAgICAgIDog
SFRNTFRhYmxlUGFydEVsZW1lbnRJbXBsKGRvYykge30KKyAgICAgICAgOiBIVE1MVGFibGVQYXJ0
RWxlbWVudEltcGwoSFRNTE5hbWVzOjp0cigpLCBkb2MpIHt9CiAKLSAgICB2aXJ0dWFsIElkIGlk
KCkgY29uc3Q7CisgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkg
Y29uc3QgeyByZXR1cm4gVGFnU3RhdHVzT3B0aW9uYWw7IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQ
cmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDc7IH0KIAogICAgIHZpcnR1YWwgTm9kZUltcGwgKmFk
ZENoaWxkKE5vZGVJbXBsICpjaGlsZCk7CiAgICAgCkBAIC0yMzgsMTAgKzIzOCwxMiBAQCBwcm90
ZWN0ZWQ6CiBjbGFzcyBIVE1MVGFibGVDZWxsRWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTFRhYmxl
UGFydEVsZW1lbnRJbXBsCiB7CiBwdWJsaWM6Ci0gICAgSFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBs
KERvY3VtZW50UHRyICpkb2MsIGludCB0YWdJZCk7CisgICAgSFRNTFRhYmxlQ2VsbEVsZW1lbnRJ
bXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50UHRyICpkb2MpOwogICAg
IH5IVE1MVGFibGVDZWxsRWxlbWVudEltcGwoKTsKIAotICAgIC8vICMjIyBGSVggdGhlc2UgdHdv
Li4uCisgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3Qg
eyByZXR1cm4gVGFnU3RhdHVzT3B0aW9uYWw7IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0
eSgpIGNvbnN0IHsgcmV0dXJuIDY7IH0KKwogICAgIGxvbmcgY2VsbEluZGV4KCkgY29uc3Q7CiAK
ICAgICBpbnQgY29sKCkgY29uc3QgeyByZXR1cm4gX2NvbDsgfQpAQCAtMjUxLDE0ICsyNTMsMTAg
QEAgcHVibGljOgogCiAgICAgaW50IGNvbFNwYW4oKSBjb25zdCB7IHJldHVybiBjU3BhbjsgfQog
ICAgIGludCByb3dTcGFuKCkgY29uc3QgeyByZXR1cm4gclNwYW47IH0KLSAgICAKLSAgICB2aXJ0
dWFsIElkIGlkKCkgY29uc3QgeyByZXR1cm4gX2lkOyB9Ci0gICAgCisKICAgICB2aXJ0dWFsIGJv
b2wgbWFwVG9FbnRyeShOb2RlSW1wbDo6SWQgYXR0ciwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJl
c3VsdCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBl
ZEF0dHJpYnV0ZUltcGwgKmF0dHIpOwogCi0gICAgdmlydHVhbCB2b2lkIGF0dGFjaCgpOwotCiAg
ICAgLy8gdXNlZCBieSB0YWJsZSBjZWxscyB0byBzaGFyZSBzdHlsZSBkZWNscyBjcmVhdGVkIGJ5
IHRoZSBlbmNsb3NpbmcgdGFibGUuCiAgICAgdmlydHVhbCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbkltcGwqIGFkZGl0aW9uYWxBdHRyaWJ1dGVTdHlsZURlY2woKTsKICAgICAKQEAgLTMxMSw3
ICszMDksNiBAQCBwcm90ZWN0ZWQ6CiAgICAgaW50IF9jb2w7CiAgICAgaW50IHJTcGFuOwogICAg
IGludCBjU3BhbjsKLSAgICBpbnQgX2lkOwogICAgIGludCByb3dIZWlnaHQ7CiAgICAgYm9vbCBt
X3NvbGlkICAgICAgICA6IDE7CiB9OwpAQCAtMzIxLDEwICszMTgsMTEgQEAgcHJvdGVjdGVkOgog
Y2xhc3MgSFRNTFRhYmxlQ29sRWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTFRhYmxlUGFydEVsZW1l
bnRJbXBsCiB7CiBwdWJsaWM6Ci0gICAgSFRNTFRhYmxlQ29sRWxlbWVudEltcGwoRG9jdW1lbnRQ
dHIgKmRvYywgdXNob3J0IGkpOwotCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OworICAgIEhU
TUxUYWJsZUNvbEVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3Vt
ZW50UHRyICpkb2MpOwogCisgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVt
ZW50KCkgY29uc3QgeyByZXR1cm4gaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6Y29sKCkpID8gVGFn
U3RhdHVzRm9yYmlkZGVuIDogVGFnU3RhdHVzT3B0aW9uYWw7IH0KKyAgICB2aXJ0dWFsIGludCB0
YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmNvbCgp
KSA/IDAgOiAxOyB9CisgICAgCiAgICAgdm9pZCBzZXRUYWJsZShIVE1MVGFibGVFbGVtZW50SW1w
bCAqdCkgeyB0YWJsZSA9IHQ7IH0KIAogICAgIC8vIG92ZXJyaWRlcwpAQCAtMzUxLDEwICszNDks
NiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRXaWR0aCggY29uc3QgRE9NU3RyaW5nICYgKTsKIAog
cHJvdGVjdGVkOgotICAgIC8vIGNvdWxkIGJlIElEX0NPTCBvciBJRF9DT0xHUk9VUCAuLi4gVGhl
IERPTSBpcyBub3QgcXVpdGUgY2xlYXIgb24KLSAgICAvLyB0aGlzLCBidXQgc2luY2UgYm90aCBl
bGVtZW50cyB3b3JrIHF1aXRlIHNpbWlsYXIsIHdlIHVzZSBvbmUKLSAgICAvLyBET01FbGVtZW50
IGZvciB0aGVtLi4uCi0gICAgdXNob3J0IF9pZDsKICAgICBpbnQgX3NwYW47CiAgICAgSFRNTFRh
YmxlRWxlbWVudEltcGwgKnRhYmxlOwogfTsKQEAgLTM2NSw5ICszNTksMTAgQEAgY2xhc3MgSFRN
TFRhYmxlQ2FwdGlvbkVsZW1lbnRJbXBsIDogcHVibAogewogcHVibGljOgogICAgIEhUTUxUYWJs
ZUNhcHRpb25FbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAgICAgICA6IEhUTUxUYWJs
ZVBhcnRFbGVtZW50SW1wbChkb2MpIHt9CisgICAgICAgIDogSFRNTFRhYmxlUGFydEVsZW1lbnRJ
bXBsKEhUTUxOYW1lczo6Y2FwdGlvbigpLCBkb2MpIHt9CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkg
Y29uc3Q7CisgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29u
c3QgeyByZXR1cm4gVGFnU3RhdHVzUmVxdWlyZWQ7IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQcmlv
cml0eSgpIGNvbnN0IHsgcmV0dXJuIDU7IH0KICAgICAKICAgICB2aXJ0dWFsIGJvb2wgbWFwVG9F
bnRyeShOb2RlSW1wbDo6SWQgYXR0ciwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29u
c3Q7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0
ZUltcGwgKmF0dHIpOwpJbmRleDoga2h0bWwvaHRtbC9odG1sZmFjdG9yeS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZToga2h0bWwvaHRtbC9odG1sZmFjdG9yeS5jcHAKZGlmZiAtTiBraHRtbC9odG1s
L2h0bWxmYWN0b3J5LmNwcAotLS0gL2Rldi9udWxsCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAK
KysrIGtodG1sL2h0bWwvaHRtbGZhY3RvcnkuY3BwCTI0IEp1biAyMDA1IDAzOjEwOjIzIC0wMDAw
CkBAIC0wLDAgKzEsMTk3IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEhUTUwg
RE9NIGltcGxlbWVudGF0aW9uIGZvciBLREUuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1IEFw
cGxlIENvbXB1dGVyLCBJbmMuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3
LCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJodG1sZmFjdG9yeS5oIgorI2luY2x1ZGUgImRv
bV9kb2NpbXBsLmgiCisKKyNpbmNsdWRlICJodG1sL2h0bWxfYmFzZWltcGwuaCIKKyNpbmNsdWRl
ICJodG1sL2h0bWxfYmxvY2tpbXBsLmgiCisjaW5jbHVkZSAiaHRtbC9odG1sX2NhbnZhc2ltcGwu
aCIKKyNpbmNsdWRlICJodG1sL2h0bWxfZG9jdW1lbnRpbXBsLmgiCisjaW5jbHVkZSAiaHRtbC9o
dG1sX2Zvcm1pbXBsLmgiCisjaW5jbHVkZSAiaHRtbC9odG1sX2hlYWRpbXBsLmgiCisjaW5jbHVk
ZSAiaHRtbC9odG1sX2ltYWdlaW1wbC5oIgorI2luY2x1ZGUgImh0bWwvaHRtbF9saXN0aW1wbC5o
IgorI2luY2x1ZGUgImh0bWwvaHRtbF9taXNjaW1wbC5oIgorI2luY2x1ZGUgImh0bWwvaHRtbF90
YWJsZWltcGwuaCIKKyNpbmNsdWRlICJodG1sL2h0bWxfb2JqZWN0aW1wbC5oIgorCituYW1lc3Bh
Y2UgRE9NCit7CisKK0hUTUxFbGVtZW50SW1wbCogSFRNTEVsZW1lbnRGYWN0b3J5OjpjcmVhdGVI
VE1MRWxlbWVudChjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUsIERvY3VtZW50SW1wbCogZG9j
LCBIVE1MRm9ybUVsZW1lbnRJbXBsKiBmb3JtLCBib29sIGNyZWF0ZWRCeVBhcnNlcikKK3sKKyAg
ICBpZiAoIWRvYykKKyAgICAgICAgcmV0dXJuIDA7IC8vIERvbid0IGFsbG93IGVsZW1lbnRzIHRv
IGV2ZXIgYmUgbWFkZSB3aXRob3V0IGhhdmluZyBhIGRvYy4KKworICAgIERvY3VtZW50UHRyKiBk
b2NQdHIgPSBkb2MtPmRvY1B0cigpOworICAgIAorICAgIGlmICh0YWdOYW1lID09IEhUTUxOYW1l
czo6aHRtbCgpKQorICAgICAgICByZXR1cm4gbmV3IEhUTUxIdG1sRWxlbWVudEltcGwoZG9jUHRy
KTsKKyAgICBlbHNlIGlmICh0YWdOYW1lID09IEhUTUxOYW1lczo6aGVhZCgpKQorICAgICAgICBy
ZXR1cm4gbmV3IEhUTUxIZWFkRWxlbWVudEltcGwoZG9jUHRyKTsKKyAgICBlbHNlIGlmICh0YWdO
YW1lID09IEhUTUxOYW1lczo6Ym9keSgpKQorICAgICAgICByZXR1cm4gbmV3IEhUTUxCb2R5RWxl
bWVudEltcGwoZG9jUHRyKTsKKworLy8gaGVhZCBlbGVtZW50cworICAgIGVsc2UgaWYgKHRhZ05h
bWUgPT0gSFRNTE5hbWVzOjpiYXNlKCkpCisgICAgICAgIHJldHVybiBuZXcgSFRNTEJhc2VFbGVt
ZW50SW1wbChkb2NQdHIpOworICAgIGVsc2UgaWYgKHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpsaW5r
KCkpCisgICAgICAgIHJldHVybiBuZXcgSFRNTExpbmtFbGVtZW50SW1wbChkb2NQdHIpOworICAg
IGVsc2UgaWYgKHRhZ05hbWUgPT0gSFRNTE5hbWVzOjptZXRhKCkpCisgICAgICAgIHJldHVybiBu
ZXcgSFRNTE1ldGFFbGVtZW50SW1wbChkb2NQdHIpOworICAgIGVsc2UgaWYgKHRhZ05hbWUgPT0g
SFRNTE5hbWVzOjpzdHlsZSgpKQorICAgICAgICByZXR1cm4gbmV3IEhUTUxTdHlsZUVsZW1lbnRJ
bXBsKGRvY1B0cik7CisgICAgZWxzZSBpZiAodGFnTmFtZSA9PSBIVE1MTmFtZXM6OnRpdGxlKCkp
CisgICAgICAgIHJldHVybiBuZXcgSFRNTFRpdGxlRWxlbWVudEltcGwoZG9jUHRyKTsKKworLy8g
ZnJhbWVzCisgICAgZWxzZSBpZiAodGFnTmFtZSA9PSBIVE1MTmFtZXM6OmZyYW1lKCkpCisgICAg
ICAgIHJldHVybiBuZXcgSFRNTEZyYW1lRWxlbWVudEltcGwoZG9jUHRyKTsKKyAgICBlbHNlIGlm
ICh0YWdOYW1lID09IEhUTUxOYW1lczo6ZnJhbWVzZXQoKSkKKyAgICAgICAgcmV0dXJuIG5ldyBI
VE1MRnJhbWVTZXRFbGVtZW50SW1wbChkb2NQdHIpOworICAgIGVsc2UgaWYgKHRhZ05hbWUgPT0g
SFRNTE5hbWVzOjppZnJhbWUoKSkKKyAgICAgICAgcmV0dXJuIG5ldyBIVE1MSUZyYW1lRWxlbWVu
dEltcGwoZG9jUHRyKTsKKworLy8gZm9ybSBlbGVtZW50cworICAgIGVsc2UgaWYgKHRhZ05hbWUg
PT0gSFRNTE5hbWVzOjpmb3JtKCkpCisgICAgICAgIHJldHVybiBuZXcgSFRNTEZvcm1FbGVtZW50
SW1wbChkb2NQdHIpOworICAgIGVsc2UgaWYgKHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpidXR0b24o
KSkKKyAgICAgICAgcmV0dXJuIG5ldyBIVE1MQnV0dG9uRWxlbWVudEltcGwoZG9jUHRyLCBmb3Jt
KTsKKyAgICBlbHNlIGlmICh0YWdOYW1lID09IEhUTUxOYW1lczo6ZmllbGRzZXQoKSkKKyAgICAg
ICAgcmV0dXJuIG5ldyBIVE1MRmllbGRTZXRFbGVtZW50SW1wbChkb2NQdHIsIGZvcm0pOworICAg
IGVsc2UgaWYgKHRhZ05hbWUgPT0gSFRNTE5hbWVzOjppbnB1dCgpKQorICAgICAgICByZXR1cm4g
bmV3IEhUTUxJbnB1dEVsZW1lbnRJbXBsKGRvY1B0ciwgZm9ybSk7CisgICAgZWxzZSBpZiAodGFn
TmFtZSA9PSBIVE1MTmFtZXM6OmlzaW5kZXgoKSkKKyAgICAgICAgcmV0dXJuIG5ldyBIVE1MSXNJ
bmRleEVsZW1lbnRJbXBsKGRvY1B0ciwgZm9ybSk7CisgICAgZWxzZSBpZiAodGFnTmFtZSA9PSBI
VE1MTmFtZXM6OmxhYmVsKCkpCisgICAgICAgIHJldHVybiBuZXcgSFRNTExhYmVsRWxlbWVudElt
cGwoZG9jUHRyKTsKKyAgICBlbHNlIGlmICh0YWdOYW1lID09IEhUTUxOYW1lczo6bGVnZW5kKCkp
CisgICAgICAgIHJldHVybiBuZXcgSFRNTExlZ2VuZEVsZW1lbnRJbXBsKGRvY1B0ciwgZm9ybSk7
CisgICAgZWxzZSBpZiAodGFnTmFtZSA9PSBIVE1MTmFtZXM6Om9wdGdyb3VwKCkpCisgICAgICAg
IHJldHVybiBuZXcgSFRNTE9wdEdyb3VwRWxlbWVudEltcGwoZG9jUHRyLCBmb3JtKTsKKyAgICBl
bHNlIGlmICh0YWdOYW1lID09IEhUTUxOYW1lczo6b3B0aW9uKCkpCisgICAgICAgIHJldHVybiBu
ZXcgSFRNTE9wdGlvbkVsZW1lbnRJbXBsKGRvY1B0ciwgZm9ybSk7CisgICAgZWxzZSBpZiAodGFn
TmFtZSA9PSBIVE1MTmFtZXM6OnNlbGVjdCgpKQorICAgICAgICByZXR1cm4gbmV3IEhUTUxTZWxl
Y3RFbGVtZW50SW1wbChkb2NQdHIsIGZvcm0pOworICAgIGVsc2UgaWYgKHRhZ05hbWUgPT0gSFRN
TE5hbWVzOjp0ZXh0YXJlYSgpKQorICAgICAgICByZXR1cm4gbmV3IEhUTUxUZXh0QXJlYUVsZW1l
bnRJbXBsKGRvY1B0ciwgZm9ybSk7CisKKy8vIGxpc3RzCisgICAgZWxzZSBpZiAodGFnTmFtZSA9
PSBIVE1MTmFtZXM6OmRsKCkpCisgICAgICAgIHJldHVybiBuZXcgSFRNTERMaXN0RWxlbWVudElt
cGwoZG9jUHRyKTsKKyAgICBlbHNlIGlmICh0YWdOYW1lID09IEhUTUxOYW1lczo6dWwoKSkKKyAg
ICAgICAgcmV0dXJuIG5ldyBIVE1MVUxpc3RFbGVtZW50SW1wbChkb2NQdHIpOworICAgIGVsc2Ug
aWYgKHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpvbCgpKQorICAgICAgICByZXR1cm4gbmV3IEhUTUxP
TGlzdEVsZW1lbnRJbXBsKGRvY1B0cik7CisgICAgZWxzZSBpZiAodGFnTmFtZSA9PSBIVE1MTmFt
ZXM6OmRpcigpKQorICAgICAgICByZXR1cm4gbmV3IEhUTUxEaXJlY3RvcnlFbGVtZW50SW1wbChk
b2NQdHIpOworICAgIGVsc2UgaWYgKHRhZ05hbWUgPT0gSFRNTE5hbWVzOjptZW51KCkpCisgICAg
ICAgIHJldHVybiBuZXcgSFRNTE1lbnVFbGVtZW50SW1wbChkb2NQdHIpOworICAgIGVsc2UgaWYg
KHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpsaSgpKQorICAgICAgICByZXR1cm4gbmV3IEhUTUxMSUVs
ZW1lbnRJbXBsKGRvY1B0cik7CisKKy8vIGZvcm1hdHRpbmcgZWxlbWVudHMgKGJsb2NrKQorICAg
IGVsc2UgaWYgKHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpibG9ja3F1b3RlKCkpCisgICAgICAgIHJl
dHVybiBuZXcgSFRNTEJsb2NrcXVvdGVFbGVtZW50SW1wbChkb2NQdHIpOworICAgIGVsc2UgaWYg
KHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpkaXYoKSkKKyAgICAgICAgcmV0dXJuIG5ldyBIVE1MRGl2
RWxlbWVudEltcGwoZG9jUHRyKTsKKyAgICBlbHNlIGlmICh0YWdOYW1lID09IEhUTUxOYW1lczo6
aDEoKSB8fCB0YWdOYW1lID09IEhUTUxOYW1lczo6aDIoKSB8fCB0YWdOYW1lID09IEhUTUxOYW1l
czo6aDMoKSB8fAorICAgICAgICAgICAgIHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpoNCgpIHx8IHRh
Z05hbWUgPT0gSFRNTE5hbWVzOjpoNSgpIHx8IHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpoNigpKQor
ICAgICAgICByZXR1cm4gbmV3IEhUTUxIZWFkaW5nRWxlbWVudEltcGwoUXVhbGlmaWVkTmFtZShu
dWxsQXRvbSwgdGFnTmFtZSwgSFRNTE5hbWVzOjp4aHRtbE5hbWVzcGFjZVVSSSgpKSwgZG9jUHRy
KTsKKyAgICBlbHNlIGlmICh0YWdOYW1lID09IEhUTUxOYW1lczo6aHIoKSkKKyAgICAgICAgcmV0
dXJuIG5ldyBIVE1MSFJFbGVtZW50SW1wbChkb2NQdHIpOworICAgIGVsc2UgaWYgKHRhZ05hbWUg
PT0gSFRNTE5hbWVzOjpwKCkpCisgICAgICAgIHJldHVybiBuZXcgSFRNTFBhcmFncmFwaEVsZW1l
bnRJbXBsKGRvY1B0cik7CisgICAgZWxzZSBpZiAodGFnTmFtZSA9PSBIVE1MTmFtZXM6OnByZSgp
IHx8IHRhZ05hbWUgPT0gSFRNTE5hbWVzOjp4bXAoKSB8fCB0YWdOYW1lID09IEhUTUxOYW1lczo6
cGxhaW50ZXh0KCkpCisgICAgICAgIHJldHVybiBuZXcgSFRNTFByZUVsZW1lbnRJbXBsKFF1YWxp
ZmllZE5hbWUobnVsbEF0b20sIHRhZ05hbWUsIEhUTUxOYW1lczo6eGh0bWxOYW1lc3BhY2VVUkko
KSksIGRvY1B0cik7CisKKy8vIGZvbnQgc3R1ZmYKKyAgICBlbHNlIGlmICh0YWdOYW1lID09IEhU
TUxOYW1lczo6YmFzZWZvbnQoKSkKKyAgICAgICAgcmV0dXJuIG5ldyBIVE1MQmFzZUZvbnRFbGVt
ZW50SW1wbChkb2NQdHIpOworICAgIGVsc2UgaWYgKHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpmb250
KCkpCisgICAgICAgIHJldHVybiBuZXcgSFRNTEZvbnRFbGVtZW50SW1wbChkb2NQdHIpOworCisv
LyBpbnMvZGVsCisgICAgZWxzZSBpZiAodGFnTmFtZSA9PSBIVE1MTmFtZXM6OmRlbCgpIHx8IHRh
Z05hbWUgPT0gSFRNTE5hbWVzOjppbnMoKSkKKyAgICAgICAgcmV0dXJuIG5ldyBIVE1MTW9kRWxl
bWVudEltcGwoUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgdGFnTmFtZSwgSFRNTE5hbWVzOjp4aHRt
bE5hbWVzcGFjZVVSSSgpKSwgZG9jUHRyKTsKKworLy8gYW5jaG9yCisgICAgZWxzZSBpZiAodGFn
TmFtZSA9PSBIVE1MTmFtZXM6OmEoKSkKKyAgICAgICAgcmV0dXJuIG5ldyBIVE1MQW5jaG9yRWxl
bWVudEltcGwoZG9jUHRyKTsKKworLy8gaW1hZ2VzCisgICAgZWxzZSBpZiAodGFnTmFtZSA9PSBI
VE1MTmFtZXM6OmltZygpKQorICAgICAgICByZXR1cm4gbmV3IEhUTUxJbWFnZUVsZW1lbnRJbXBs
KGRvY1B0ciwgZm9ybSk7CisgICAgZWxzZSBpZiAodGFnTmFtZSA9PSBIVE1MTmFtZXM6Om1hcCgp
KQorICAgICAgICByZXR1cm4gbmV3IEhUTUxNYXBFbGVtZW50SW1wbChkb2NQdHIpOworICAgIGVs
c2UgaWYgKHRhZ05hbWUgPT0gSFRNTE5hbWVzOjphcmVhKCkpCisgICAgICAgIHJldHVybiBuZXcg
SFRNTEFyZWFFbGVtZW50SW1wbChkb2NQdHIpOworICAgIGVsc2UgaWYgKHRhZ05hbWUgPT0gSFRN
TE5hbWVzOjpjYW52YXMoKSkKKyAgICAgICAgcmV0dXJuIG5ldyBIVE1MQ2FudmFzRWxlbWVudElt
cGwoZG9jUHRyKTsKKworLy8gb2JqZWN0cywgYXBwbGV0cyBhbmQgc2NyaXB0cworICAgIGVsc2Ug
aWYgKHRhZ05hbWUgPT0gSFRNTE5hbWVzOjphcHBsZXQoKSkKKyAgICAgICAgcmV0dXJuIG5ldyBI
VE1MQXBwbGV0RWxlbWVudEltcGwoZG9jUHRyKTsKKyAgICBlbHNlIGlmICh0YWdOYW1lID09IEhU
TUxOYW1lczo6ZW1iZWQoKSkKKyAgICAgICAgcmV0dXJuIG5ldyBIVE1MRW1iZWRFbGVtZW50SW1w
bChkb2NQdHIpOworICAgIGVsc2UgaWYgKHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpvYmplY3QoKSkK
KyAgICAgICAgcmV0dXJuIG5ldyBIVE1MT2JqZWN0RWxlbWVudEltcGwoZG9jUHRyKTsKKyAgICBl
bHNlIGlmICh0YWdOYW1lID09IEhUTUxOYW1lczo6cGFyYW0oKSkKKyAgICAgICAgcmV0dXJuIG5l
dyBIVE1MUGFyYW1FbGVtZW50SW1wbChkb2NQdHIpOworICAgIGVsc2UgaWYgKHRhZ05hbWUgPT0g
SFRNTE5hbWVzOjpzY3JpcHQoKSkgeworICAgICAgICBIVE1MU2NyaXB0RWxlbWVudEltcGwqIHNj
cmlwdCA9IG5ldyBIVE1MU2NyaXB0RWxlbWVudEltcGwoZG9jUHRyKTsKKyAgICAgICAgc2NyaXB0
LT5zZXRDcmVhdGVkQnlQYXJzZXIoY3JlYXRlZEJ5UGFyc2VyKTsKKyAgICAgICAgcmV0dXJuIHNj
cmlwdDsKKyAgICB9CisKKy8vIHRhYmxlcworICAgIGVsc2UgaWYgKHRhZ05hbWUgPT0gSFRNTE5h
bWVzOjp0YWJsZSgpKQorICAgICAgICByZXR1cm4gbmV3IEhUTUxUYWJsZUVsZW1lbnRJbXBsKGRv
Y1B0cik7CisgICAgZWxzZSBpZiAodGFnTmFtZSA9PSBIVE1MTmFtZXM6OmNhcHRpb24oKSkKKyAg
ICAgICAgcmV0dXJuIG5ldyBIVE1MVGFibGVDYXB0aW9uRWxlbWVudEltcGwoZG9jUHRyKTsKKyAg
ICBlbHNlIGlmICh0YWdOYW1lID09IEhUTUxOYW1lczo6Y29sZ3JvdXAoKSB8fCB0YWdOYW1lID09
IEhUTUxOYW1lczo6Y29sKCkpCisgICAgICAgIHJldHVybiBuZXcgSFRNTFRhYmxlQ29sRWxlbWVu
dEltcGwoUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgdGFnTmFtZSwgSFRNTE5hbWVzOjp4aHRtbE5h
bWVzcGFjZVVSSSgpKSwgZG9jUHRyKTsKKyAgICBlbHNlIGlmICh0YWdOYW1lID09IEhUTUxOYW1l
czo6dHIoKSkKKyAgICAgICAgcmV0dXJuIG5ldyBIVE1MVGFibGVSb3dFbGVtZW50SW1wbChkb2NQ
dHIpOworICAgIGVsc2UgaWYgKHRhZ05hbWUgPT0gSFRNTE5hbWVzOjp0ZCgpIHx8IHRhZ05hbWUg
PT0gSFRNTE5hbWVzOjp0aCgpKQorICAgICAgICByZXR1cm4gbmV3IEhUTUxUYWJsZUNlbGxFbGVt
ZW50SW1wbChRdWFsaWZpZWROYW1lKG51bGxBdG9tLCB0YWdOYW1lLCBIVE1MTmFtZXM6OnhodG1s
TmFtZXNwYWNlVVJJKCkpLCBkb2NQdHIpOworICAgIGVsc2UgaWYgKHRhZ05hbWUgPT0gSFRNTE5h
bWVzOjp0aGVhZCgpIHx8IHRhZ05hbWUgPT0gSFRNTE5hbWVzOjp0Ym9keSgpIHx8IHRhZ05hbWUg
PT0gSFRNTE5hbWVzOjp0Zm9vdCgpKQorICAgICAgICByZXR1cm4gbmV3IEhUTUxUYWJsZVNlY3Rp
b25FbGVtZW50SW1wbChRdWFsaWZpZWROYW1lKG51bGxBdG9tLCB0YWdOYW1lLCBIVE1MTmFtZXM6
OnhodG1sTmFtZXNwYWNlVVJJKCkpLCBkb2NQdHIsIGZhbHNlKTsKKworLy8gaW5saW5lIGVsZW1l
bnRzCisgICAgZWxzZSBpZiAodGFnTmFtZSA9PSBIVE1MTmFtZXM6OmJyKCkpCisgICAgICAgIHJl
dHVybiBuZXcgSFRNTEJSRWxlbWVudEltcGwoZG9jUHRyKTsKKyAgICBlbHNlIGlmICh0YWdOYW1l
ID09IEhUTUxOYW1lczo6cSgpKQorICAgICAgICByZXR1cm4gbmV3IEhUTUxRdW90ZUVsZW1lbnRJ
bXBsKGRvY1B0cik7CisgICAgICAgIAorLy8gbWFycXVlZQorICAgIGVsc2UgaWYgKHRhZ05hbWUg
PT0gSFRNTE5hbWVzOjptYXJxdWVlKCkpCisgICAgICAgIHJldHVybiBuZXcgSFRNTE1hcnF1ZWVF
bGVtZW50SW1wbChkb2NQdHIpOworICAgCisvLyBlbGVtZW50cyB3aXRoIG5vIHNwZWNpYWwgcmVw
cmVzZW50YXRpb24gaW4gdGhlIERPTQorICAgIHJldHVybiBuZXcgSFRNTEVsZW1lbnRJbXBsKFF1
YWxpZmllZE5hbWUobnVsbEF0b20sIHRhZ05hbWUsIEhUTUxOYW1lczo6eGh0bWxOYW1lc3BhY2VV
UkkoKSksIGRvY1B0cik7CisKK30KKworfQorCkluZGV4OiBraHRtbC9odG1sL2h0bWxmYWN0b3J5
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZToga2h0bWwvaHRtbC9odG1sZmFjdG9yeS5oCmRpZmYgLU4g
a2h0bWwvaHRtbC9odG1sZmFjdG9yeS5oCi0tLSAvZGV2L251bGwJMSBKYW4gMTk3MCAwMDowMDow
MCAtMDAwMAorKysga2h0bWwvaHRtbC9odG1sZmFjdG9yeS5oCTI0IEp1biAyMDA1IDAzOjEwOjIz
IC0wMDAwCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUg
SFRNTCBET00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTEx
LTEzMDcsIFVTQS4KKyAqCisgKi8KKyNpZm5kZWYgSFRNTEVMRU1FTlRGQUNUT1JZX0gKKyNkZWZp
bmUgSFRNTEVMRU1FTlRGQUNUT1JZX0gKKworbmFtZXNwYWNlIERPTQoreworCitjbGFzcyBFbGVt
ZW50SW1wbDsKK2NsYXNzIERvY3VtZW50SW1wbDsKK2NsYXNzIEhUTUxFbGVtZW50SW1wbDsKK2Ns
YXNzIEhUTUxGb3JtRWxlbWVudEltcGw7CitjbGFzcyBRdWFsaWZpZWROYW1lOworY2xhc3MgQXRv
bWljU3RyaW5nOworCisvLyBUaGUgaWRlYSBiZWhpbmQgdGhpcyBjbGFzcyBpcyB0aGF0IHRoZXJl
IHdpbGwgZXZlbnR1YWxseSBiZSBhIG1hcHBpbmcgZnJvbSBuYW1lc3BhY2UgVVJJcyB0byBFbGVt
ZW50RmFjdG9yaWVzIHRoYXQgY2FuIGRpc3BlbnNlCisvLyBlbGVtZW50cy4gIEluIGEgY29tcG91
bmQgZG9jdW1lbnQgd29ybGQsIHRoZSBnZW5lcmljIGNyZWF0ZUVsZW1lbnQgZnVuY3Rpb24gKHdp
bGwgZW5kIHVwIGJlaW5nIHZpcnR1YWwpIHdpbGwgYmUgY2FsbGVkLgorY2xhc3MgSFRNTEVsZW1l
bnRGYWN0b3J5Cit7CitwdWJsaWM6CisgICAgRWxlbWVudEltcGwqIGNyZWF0ZUVsZW1lbnQoY29u
c3QgUXVhbGlmaWVkTmFtZSYgcU5hbWUsIERvY3VtZW50SW1wbCogZG9jLCBib29sIGNyZWF0ZWRC
eVBhcnNlciA9IHRydWUpOworICAgIHN0YXRpYyBIVE1MRWxlbWVudEltcGwqIGNyZWF0ZUhUTUxF
bGVtZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSwgRG9jdW1lbnRJbXBsKiBkb2MsIEhU
TUxGb3JtRWxlbWVudEltcGwqIGZvcm0gPSAwLCBib29sIGNyZWF0ZWRCeVBhcnNlciA9IHRydWUp
OworfTsKKworfQorCisjZW5kaWYKSW5kZXg6IGtodG1sL2h0bWwvaHRtbG5hbWVzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9odG1sL2h0bWxuYW1lcy5j
cHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMgpkaWZmIC11IC1wIC1yMS4yIGtodG1sL2h0bWwv
aHRtbG5hbWVzLmNwcAotLS0ga2h0bWwvaHRtbC9odG1sbmFtZXMuY3BwCTE2IEp1biAyMDA1IDIw
OjMzOjU3IC0wMDAwCTEuMgorKysga2h0bWwvaHRtbC9odG1sbmFtZXMuY3BwCTI0IEp1biAyMDA1
IDAzOjEwOjI0IC0wMDAwCkBAIC0zOSw2ICszOSwxOCBAQCBjb25zdCBRdWFsaWZpZWROYW1lJiBI
VE1MTmFtZXM6OmEoKQogICAgIHJldHVybiBhOwogfQogCitjb25zdCBRdWFsaWZpZWROYW1lJiBI
VE1MTmFtZXM6OmFiYnIoKQoreworICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIGFiYnIobnVsbEF0
b20sICJhYmJyIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7CisgICAgcmV0dXJuIGFiYnI7Cit9CisK
K2NvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6YWNyb255bSgpCit7CisgICAgc3RhdGlj
IFF1YWxpZmllZE5hbWUgYWNyb255bShudWxsQXRvbSwgImFjcm9ueW0iLCB4aHRtbE5hbWVzcGFj
ZVVSSSgpKTsKKyAgICByZXR1cm4gYWNyb255bTsKK30KKwogY29uc3QgUXVhbGlmaWVkTmFtZSYg
SFRNTE5hbWVzOjphZGRyZXNzKCkKIHsKICAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBhZGRyZXNz
KG51bGxBdG9tLCAiYWRkcmVzcyIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwpAQCAtMTIzLDYgKzEz
NSwxMiBAQCBjb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OmNlbnRlcigpCiAgICAgcmV0
dXJuIGNlbnRlcjsKIH0KIAorY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpjaXRlKCkK
K3sKKyAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBjaXRlKG51bGxBdG9tLCAiY2l0ZSIsIHhodG1s
TmFtZXNwYWNlVVJJKCkpOworICAgIHJldHVybiBjaXRlOworfQorCiBjb25zdCBRdWFsaWZpZWRO
YW1lJiBIVE1MTmFtZXM6OmNvZGUoKQogewogICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIGNvZGUo
bnVsbEF0b20sICJjb2RlIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7CkBAIC0zMzMsNiArMzUxLDEy
IEBAIGNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6bGFiZWwoKQogICAgIHJldHVybiBs
YWJlbDsKIH0KIAorY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpsYXllcigpCit7Cisg
ICAgc3RhdGljIFF1YWxpZmllZE5hbWUgbGF5ZXIobnVsbEF0b20sICJsYXllciIsIHhodG1sTmFt
ZXNwYWNlVVJJKCkpOworICAgIHJldHVybiBsYXllcjsKK30KKwogY29uc3QgUXVhbGlmaWVkTmFt
ZSYgSFRNTE5hbWVzOjpsZWdlbmQoKQogewogICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIGxlZ2Vu
ZChudWxsQXRvbSwgImxlZ2VuZCIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwpAQCAtMzc1LDYgKzM5
OSwxMiBAQCBjb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6Om1ldGEoKQogICAgIHJldHVy
biBtZXRhOwogfQogCitjb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6Om5vYnIoKQorewor
ICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIG5vYnIobnVsbEF0b20sICJub2JyIiwgeGh0bWxOYW1l
c3BhY2VVUkkoKSk7CisgICAgcmV0dXJuIG5vYnI7Cit9CisKIGNvbnN0IFF1YWxpZmllZE5hbWUm
IEhUTUxOYW1lczo6bm9lbWJlZCgpCiB7CiAgICAgc3RhdGljIFF1YWxpZmllZE5hbWUgbm9lbWJl
ZChudWxsQXRvbSwgIm5vZW1iZWQiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKQEAgLTM4Nyw2ICs0
MTcsMTIgQEAgY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpub2ZyYW1lcwogICAgIHJl
dHVybiBub2ZyYW1lczsKIH0KIAorY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpub2xh
eWVyKCkKK3sKKyAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBub2ZyYW1lcyhudWxsQXRvbSwgIm5v
ZnJhbWVzIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7CisgICAgcmV0dXJuIG5vZnJhbWVzOworfQor
CiBjb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6Om5vc2NyaXB0KCkKIHsKICAgICBzdGF0
aWMgUXVhbGlmaWVkTmFtZSBub3NjcmlwdChudWxsQXRvbSwgIm5vc2NyaXB0IiwgeGh0bWxOYW1l
c3BhY2VVUkkoKSk7CkBAIC00MTEsNiArNDQ3LDEyIEBAIGNvbnN0IFF1YWxpZmllZE5hbWUmIEhU
TUxOYW1lczo6b3B0Z3JvdXAKICAgICByZXR1cm4gb3B0Z3JvdXA7CiB9CiAKK2NvbnN0IFF1YWxp
ZmllZE5hbWUmIEhUTUxOYW1lczo6b3B0aW9uKCkKK3sKKyAgICBzdGF0aWMgUXVhbGlmaWVkTmFt
ZSBvcHRpb24obnVsbEF0b20sICJvcHRpb24iLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKKyAgICBy
ZXR1cm4gb3B0aW9uOworfQorCiBjb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OnAoKQog
ewogICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIHAobnVsbEF0b20sICJwIiwgeGh0bWxOYW1lc3Bh
Y2VVUkkoKSk7CkBAIC00MjMsNiArNDY1LDEyIEBAIGNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxO
YW1lczo6cGFyYW0oKQogICAgIHJldHVybiBwYXJhbTsKIH0KIAorY29uc3QgUXVhbGlmaWVkTmFt
ZSYgSFRNTE5hbWVzOjpwbGFpbnRleHQoKQoreworICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIHBs
YWludGV4dChudWxsQXRvbSwgInBsYWludGV4dCIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOworICAg
IHJldHVybiBwbGFpbnRleHQ7Cit9CisKIGNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6
cHJlKCkKIHsKICAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBwcmUobnVsbEF0b20sICJwcmUiLCB4
aHRtbE5hbWVzcGFjZVVSSSgpKTsKQEAgLTQ2NSw2ICs1MTMsMTIgQEAgY29uc3QgUXVhbGlmaWVk
TmFtZSYgSFRNTE5hbWVzOjpzbWFsbCgpCiAgICAgcmV0dXJuIHNtYWxsOwogfQogCitjb25zdCBR
dWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OnNwYW4oKQoreworICAgIHN0YXRpYyBRdWFsaWZpZWRO
YW1lIHNwYW4obnVsbEF0b20sICJzcGFuIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7CisgICAgcmV0
dXJuIHNwYW47Cit9CisKIGNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6c3RyaWtlKCkK
IHsKICAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBzdHJpa2UobnVsbEF0b20sICJzdHJpa2UiLCB4
aHRtbE5hbWVzcGFjZVVSSSgpKTsKQEAgLTQ4Myw2ICs1MzcsMTggQEAgY29uc3QgUXVhbGlmaWVk
TmFtZSYgSFRNTE5hbWVzOjpzdHlsZSgpCiAgICAgcmV0dXJuIHN0eWxlOwogfQogCitjb25zdCBR
dWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OnN1YigpCit7CisgICAgc3RhdGljIFF1YWxpZmllZE5h
bWUgc3ViKG51bGxBdG9tLCAic3ViIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7CisgICAgcmV0dXJu
IHN1YjsKK30KKworY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpzdXAoKQoreworICAg
IHN0YXRpYyBRdWFsaWZpZWROYW1lIHN1cChudWxsQXRvbSwgInN1cCIsIHhodG1sTmFtZXNwYWNl
VVJJKCkpOworICAgIHJldHVybiBzdXA7Cit9CisKIGNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxO
YW1lczo6dGFibGUoKQogewogICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIHRhYmxlKG51bGxBdG9t
LCAidGFibGUiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKQEAgLTU2MSw2ICs2MjcsMTIgQEAgY29u
c3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjp2YXIoKQogICAgIHJldHVybiB2YXI7CiB9CiAK
K2NvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6d2JyKCkKK3sKKyAgICBzdGF0aWMgUXVh
bGlmaWVkTmFtZSB3YnIobnVsbEF0b20sICJ3YnIiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKKyAg
ICByZXR1cm4gd2JyOworfQorCiBjb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OnhtcCgp
CiB7CiAgICAgc3RhdGljIFF1YWxpZmllZE5hbWUgeG1wKG51bGxBdG9tLCAieG1wIiwgeGh0bWxO
YW1lc3BhY2VVUkkoKSk7CkluZGV4OiBraHRtbC9odG1sL2h0bWxuYW1lcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbG5hbWVzLmgsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuMgpkaWZmIC11IC1wIC1yMS4yIGtodG1sL2h0bWwvaHRtbG5hbWVz
LmgKLS0tIGtodG1sL2h0bWwvaHRtbG5hbWVzLmgJMTYgSnVuIDIwMDUgMjA6MzM6NTcgLTAwMDAJ
MS4yCisrKyBraHRtbC9odG1sL2h0bWxuYW1lcy5oCTI0IEp1biAyMDA1IDAzOjEwOjI0IC0wMDAw
CkBAIC0yMiw3ICsyMiw3IEBACiAjaWZuZGVmIEhUTUxOQU1FU19ICiAjZGVmaW5lIEhUTUxOQU1F
U19ICiAKLSNpbmNsdWRlICJ4bWwvZG9tX2VsZW1lbnRpbXBsLmgiCisjaW5jbHVkZSAiZG9tX3Fu
YW1lLmgiCiAKIG5hbWVzcGFjZSBET00KIHsKQEAgLTM3LDYgKzM3LDggQEAgcHVibGljOgogICAg
IAogICAgIC8vIEZ1bGwgdGFnIG5hbWVzLgogICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1l
JiBhKCk7CisgICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGFiYnIoKTsKKyAgICBzdGF0
aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgYWNyb255bSgpOwogICAgIHN0YXRpYyBjb25zdCBRdWFs
aWZpZWROYW1lJiBhZGRyZXNzKCk7CiAgICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGFw
cGxldCgpOwogICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBhcmVhKCk7CkBAIC01MSw2
ICs1Myw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgY2FudmFz
KCk7CiAgICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGNhcHRpb24oKTsKICAgICBzdGF0
aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgY2VudGVyKCk7CisgICAgc3RhdGljIGNvbnN0IFF1YWxp
ZmllZE5hbWUmIGNpdGUoKTsKICAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgY29kZSgp
OwogICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBjb2woKTsKICAgICBzdGF0aWMgY29u
c3QgUXVhbGlmaWVkTmFtZSYgY29sZ3JvdXAoKTsKQEAgLTg2LDYgKzg5LDcgQEAgcHVibGljOgog
ICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBrYmQoKTsKICAgICBzdGF0aWMgY29uc3Qg
UXVhbGlmaWVkTmFtZSYga2V5Z2VuKCk7CiAgICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUm
IGxhYmVsKCk7CisgICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGxheWVyKCk7CiAgICAg
c3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGxlZ2VuZCgpOwogICAgIHN0YXRpYyBjb25zdCBR
dWFsaWZpZWROYW1lJiBsaSgpOwogICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBsaW5r
KCk7CkBAIC05Myw4ICs5NywxMCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IFF1YWxpZmll
ZE5hbWUmIG1hcnF1ZWUoKTsKICAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgbWVudSgp
OwogICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBtZXRhKCk7CisgICAgc3RhdGljIGNv
bnN0IFF1YWxpZmllZE5hbWUmIG5vYnIoKTsKICAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFt
ZSYgbm9lbWJlZCgpOwogICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBub2ZyYW1lcygp
OworICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBub2xheWVyKCk7CiAgICAgc3RhdGlj
IGNvbnN0IFF1YWxpZmllZE5hbWUmIG5vc2NyaXB0KCk7CiAgICAgc3RhdGljIGNvbnN0IFF1YWxp
ZmllZE5hbWUmIG9iamVjdCgpOwogICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBvbCgp
OwpAQCAtMTAyLDYgKzEwOCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVk
TmFtZSYgb3B0aW9uKCk7CiAgICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIHAoKTsKICAg
ICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgcGFyYW0oKTsKKyAgICBzdGF0aWMgY29uc3Qg
UXVhbGlmaWVkTmFtZSYgcGxhaW50ZXh0KCk7CiAgICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5h
bWUmIHByZSgpOwogICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBxKCk7CiAgICAgc3Rh
dGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIHMoKTsKQEAgLTEwOSw5ICsxMTYsMTIgQEAgcHVibGlj
OgogICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBzY3JpcHQoKTsKICAgICBzdGF0aWMg
Y29uc3QgUXVhbGlmaWVkTmFtZSYgc2VsZWN0KCk7CiAgICAgc3RhdGljIGNvbnN0IFF1YWxpZmll
ZE5hbWUmIHNtYWxsKCk7CisgICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIHNwYW4oKTsK
ICAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgc3RyaWtlKCk7CiAgICAgc3RhdGljIGNv
bnN0IFF1YWxpZmllZE5hbWUmIHN0cm9uZygpOwogICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWRO
YW1lJiBzdHlsZSgpOworICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBzdWIoKTsKKyAg
ICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgc3VwKCk7CiAgICAgc3RhdGljIGNvbnN0IFF1
YWxpZmllZE5hbWUmIHRhYmxlKCk7CiAgICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIHRi
b2R5KCk7CiAgICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIHRkKCk7CkBAIC0xMjUsNiAr
MTM1LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiB1KCk7CiAg
ICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIHVsKCk7CiAgICAgc3RhdGljIGNvbnN0IFF1
YWxpZmllZE5hbWUmIHZhcigpOworICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiB3YnIo
KTsKICAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgeG1wKCk7CiAKICAgICAvLyBBdHRy
aWJ1dGUgbmFtZXMuCkluZGV4OiBraHRtbC9odG1sL2h0bWxwYXJzZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbHBhcnNlci5jcHAsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuOTYKZGlmZiAtdSAtcCAtcjEuOTYga2h0bWwvaHRtbC9odG1s
cGFyc2VyLmNwcAotLS0ga2h0bWwvaHRtbC9odG1scGFyc2VyLmNwcAkxMSBNYXkgMjAwNSAwMDo1
ODoyOCAtMDAwMAkxLjk2CisrKyBraHRtbC9odG1sL2h0bWxwYXJzZXIuY3BwCTI0IEp1biAyMDA1
IDAzOjEwOjI1IC0wMDAwCkBAIC00NCw2ICs0NCw3IEBACiAjaW5jbHVkZSAiaHRtbC9odG1sX21p
c2NpbXBsLmgiCiAjaW5jbHVkZSAiaHRtbC9odG1sX3RhYmxlaW1wbC5oIgogI2luY2x1ZGUgImh0
bWwvaHRtbF9vYmplY3RpbXBsLmgiCisjaW5jbHVkZSAiaHRtbGZhY3RvcnkuaCIKICNpbmNsdWRl
ICJ4bWwvZG9tX3RleHRpbXBsLmgiCiAjaW5jbHVkZSAieG1sL2RvbV9ub2RlaW1wbC5oIgogI2lu
Y2x1ZGUgIm1pc2MvaHRtbGhhc2hlcy5oIgpAQCAtNjksMjQgKzcwLDI0IEBAIHVzaW5nIG5hbWVz
cGFjZSBraHRtbDsKIGNsYXNzIEhUTUxTdGFja0VsZW0KIHsKIHB1YmxpYzoKLSAgICBIVE1MU3Rh
Y2tFbGVtKCBpbnQgX2lkLAotICAgICAgICAgICAgICAgICAgIGludCBfbGV2ZWwsCi0gICAgICAg
ICAgICAgICAgICAgRE9NOjpOb2RlSW1wbCAqX25vZGUsCi0gICAgICAgICAgICAgICAgICAgSFRN
TFN0YWNrRWxlbSAqIF9uZXh0CisgICAgSFRNTFN0YWNrRWxlbShjb25zdCBBdG9taWNTdHJpbmcm
IF90YWdOYW1lLAorICAgICAgICAgICAgICAgICAgaW50IF9sZXZlbCwKKyAgICAgICAgICAgICAg
ICAgIERPTTo6Tm9kZUltcGwgKl9ub2RlLAorICAgICAgICAgICAgICAgICAgSFRNTFN0YWNrRWxl
bSAqIF9uZXh0CiAgICAgICAgICkKICAgICAgICAgOgotICAgICAgICBpZChfaWQpLAorICAgICAg
ICB0YWdOYW1lKF90YWdOYW1lKSwKICAgICAgICAgbGV2ZWwoX2xldmVsKSwKICAgICAgICAgc3Ry
YXlUYWJsZUNvbnRlbnQoZmFsc2UpLAogICAgICAgICBub2RlKF9ub2RlKSwKICAgICAgICAgbmV4
dChfbmV4dCkKICAgICAgICAgeyB9CiAKLSAgICBpbnQgICAgICAgaWQ7Ci0gICAgaW50ICAgICAg
IGxldmVsOwotICAgIGJvb2wgICAgICBzdHJheVRhYmxlQ29udGVudDsKLSAgICBOb2RlSW1wbCAq
bm9kZTsKLSAgICBIVE1MU3RhY2tFbGVtICpuZXh0OworICAgIEF0b21pY1N0cmluZyB0YWdOYW1l
OworICAgIGludCBsZXZlbDsKKyAgICBib29sIHN0cmF5VGFibGVDb250ZW50OworICAgIE5vZGVJ
bXBsKiBub2RlOworICAgIEhUTUxTdGFja0VsZW0qIG5leHQ7CiB9OwogCiAvKioKQEAgLTExMiwx
NCArMTEzLDkgQEAgcHVibGljOgogICogICAgZWxlbWVudCBvciBpZ25vcmUgdGhlIHRhZy4KICAq
CiAgKi8KLUtIVE1MUGFyc2VyOjpLSFRNTFBhcnNlcihLSFRNTFZpZXcgKl9wYXJlbnQsIERvY3Vt
ZW50UHRyICpkb2MsIGJvb2wgaW5jbHVkZXNDb21tZW50cykgCitIVE1MUGFyc2VyOjpIVE1MUGFy
c2VyKEtIVE1MVmlldyAqX3BhcmVudCwgRG9jdW1lbnRQdHIgKmRvYywgYm9vbCBpbmNsdWRlc0Nv
bW1lbnRzKSAKICAgICA6IGN1cnJlbnQoMCksIGN1cnJlbnRJc1JlZmVyZW5jZWQoZmFsc2UpLCBp
bmNsdWRlc0NvbW1lbnRzSW5ET00oaW5jbHVkZXNDb21tZW50cykKIHsKLSAgICAvL2tkRGVidWco
IDYwMzUgKSA8PCAicGFyc2VyIGNvbnN0cnVjdG9yIiA8PCBlbmRsOwotI2lmIFNQRUVEX0RFQlVH
ID4gMAotICAgIHF0LnN0YXJ0KCk7Ci0jZW5kaWYKLQogICAgIEhUTUxXaWRnZXQgICAgPSBfcGFy
ZW50OwogICAgIGRvY3VtZW50ICAgICAgPSBkb2M7CiAgICAgZG9jdW1lbnQtPnJlZigpOwpAQCAt
MTI5LDcgKzEyNSw3IEBAIEtIVE1MUGFyc2VyOjpLSFRNTFBhcnNlcihLSFRNTFZpZXcgKl9wYXIK
ICAgICByZXNldCgpOwogfQogCi1LSFRNTFBhcnNlcjo6S0hUTUxQYXJzZXIoRE9NOjpEb2N1bWVu
dEZyYWdtZW50SW1wbCAqaSwgRG9jdW1lbnRQdHIgKmRvYywgYm9vbCBpbmNsdWRlc0NvbW1lbnRz
KQorSFRNTFBhcnNlcjo6SFRNTFBhcnNlcihET006OkRvY3VtZW50RnJhZ21lbnRJbXBsICppLCBE
b2N1bWVudFB0ciAqZG9jLCBib29sIGluY2x1ZGVzQ29tbWVudHMpCiAgICAgOiBjdXJyZW50KDAp
LCBjdXJyZW50SXNSZWZlcmVuY2VkKGZhbHNlKSwgaW5jbHVkZXNDb21tZW50c0luRE9NKGluY2x1
ZGVzQ29tbWVudHMpCiB7CiAgICAgSFRNTFdpZGdldCA9IDA7CkBAIC0xNDMsMTIgKzEzOSw4IEBA
IEtIVE1MUGFyc2VyOjpLSFRNTFBhcnNlcihET006OkRvY3VtZW50RnIKICAgICBpbkJvZHkgPSB0
cnVlOwogfQogCi1LSFRNTFBhcnNlcjo6fktIVE1MUGFyc2VyKCkKK0hUTUxQYXJzZXI6On5IVE1M
UGFyc2VyKCkKIHsKLSNpZiBTUEVFRF9ERUJVRyA+IDAKLSAgICBrZERlYnVnKCApIDw8ICJUSU1F
OiBwYXJzaW5nIHRpbWUgd2FzID0gIiA8PCBxdC5lbGFwc2VkKCkgPDwgZW5kbDsKLSNlbmRpZgot
CiAgICAgZnJlZUJsb2NrKCk7CiAKICAgICBzZXRDdXJyZW50KDApOwpAQCAtMTU5LDE1ICsxNTEs
MTIgQEAgS0hUTUxQYXJzZXI6On5LSFRNTFBhcnNlcigpCiAgICAgICAgIGlzaW5kZXgtPmRlcmVm
KCk7CiB9CiAKLXZvaWQgS0hUTUxQYXJzZXI6OnJlc2V0KCkKK3ZvaWQgSFRNTFBhcnNlcjo6cmVz
ZXQoKQogewogICAgIHNldEN1cnJlbnQoZG9jKCkpOwogCiAgICAgZnJlZUJsb2NrKCk7CiAKLSAg
ICAvLyBiZWZvcmUgcGFyc2luZywgbm8gdGFncyBhcmUgZm9yYmlkZGVuCi0gICAgbWVtc2V0KGZv
cmJpZGRlblRhZywgMCwgc2l6ZW9mKGZvcmJpZGRlblRhZykpOwotCiAgICAgaW5Cb2R5ID0gZmFs
c2U7CiAgICAgaGF2ZUZyYW1lU2V0ID0gZmFsc2U7CiAgICAgaGF2ZUNvbnRlbnQgPSBmYWxzZTsK
QEAgLTE4MCwxMCArMTY5LDEwIEBAIHZvaWQgS0hUTUxQYXJzZXI6OnJlc2V0KCkKICAgICBlbmQg
PSBmYWxzZTsKICAgICBpc2luZGV4ID0gMDsKICAgICAKLSAgICBkaXNjYXJkX3VudGlsID0gMDsK
KyAgICBkaXNjYXJkX3VudGlsID0gbnVsbEF0b207CiB9CiAKLXZvaWQgS0hUTUxQYXJzZXI6OnNl
dEN1cnJlbnQoRE9NOjpOb2RlSW1wbCAqbmV3Q3VycmVudCkgCit2b2lkIEhUTUxQYXJzZXI6OnNl
dEN1cnJlbnQoRE9NOjpOb2RlSW1wbCAqbmV3Q3VycmVudCkgCiB7CiAgICAgYm9vbCBuZXdDdXJy
ZW50SXNSZWZlcmVuY2VkID0gbmV3Q3VycmVudCAmJiBuZXdDdXJyZW50ICE9IGRvYygpOwogICAg
IGlmIChuZXdDdXJyZW50SXNSZWZlcmVuY2VkKSAKQEAgLTE5NCwxNDQgKzE4MywxMDggQEAgdm9p
ZCBLSFRNTFBhcnNlcjo6c2V0Q3VycmVudChET006Ok5vZGVJbQogICAgIGN1cnJlbnRJc1JlZmVy
ZW5jZWQgPSBuZXdDdXJyZW50SXNSZWZlcmVuY2VkOwogfQogCi12b2lkIEtIVE1MUGFyc2VyOjpw
YXJzZVRva2VuKFRva2VuICp0KQordm9pZCBIVE1MUGFyc2VyOjpwYXJzZVRva2VuKFRva2VuICp0
KQogewotICAgIGlmKGRpc2NhcmRfdW50aWwpIHsKLSAgICAgICAgaWYodC0+aWQgPT0gZGlzY2Fy
ZF91bnRpbCkKLSAgICAgICAgICAgIGRpc2NhcmRfdW50aWwgPSAwOworICAgIGlmICghZGlzY2Fy
ZF91bnRpbC5pc051bGwoKSkgeworICAgICAgICBpZiAodC0+dGFnTmFtZSA9PSBkaXNjYXJkX3Vu
dGlsICYmICF0LT5iZWdpblRhZykKKyAgICAgICAgICAgIGRpc2NhcmRfdW50aWwgPSBudWxsQXRv
bTsKIAogICAgICAgICAvLyBkbyBub3Qgc2tpcCA8L2lmcmFtZT4KLSAgICAgICAgaWYgKCBkaXNj
YXJkX3VudGlsIHx8IGN1cnJlbnQtPmlkKCkgKyBJRF9DTE9TRV9UQUcgIT0gdC0+aWQgKQorICAg
ICAgICBpZiAoIWRpc2NhcmRfdW50aWwuaXNOdWxsKCkgfHwgKGN1cnJlbnQtPmxvY2FsTmFtZSgp
ICE9IHQtPnRhZ05hbWUpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotI2lmZGVmIFBB
UlNFUl9ERUJVRwotICAgIGtkRGVidWcoIDYwMzUgKSA8PCAiXG5cbj09PiBwYXJzZXI6IHByb2Nl
c3NpbmcgdG9rZW4gIiA8PCBnZXRUYWdOYW1lKHQtPmlkKS5zdHJpbmcoKSA8PCAiKCIgPDwgdC0+
aWQgPDwgIikiCi0gICAgICAgICAgICAgICAgICAgIDw8ICIgY3VycmVudCA9ICIgPDwgZ2V0VGFn
TmFtZShjdXJyZW50LT5pZCgpKS5zdHJpbmcoKSA8PCAiKCIgPDwgY3VycmVudC0+aWQoKSA8PCAi
KSIgPDwgZW5kbDsKLSAgICBrZERlYnVnKDYwMzUpIDw8ICIgaW5Cb2R5PSIgPDwgaW5Cb2R5IDw8
ICIgaGF2ZUZyYW1lU2V0PSIgPDwgaGF2ZUZyYW1lU2V0IDw8IGVuZGw7Ci0jZW5kaWYKLQotICAg
IC8vIGhvbHkgc2hpdC4gYXBwYXJlbnRseSBzb21lIHNpdGVzIHVzZSA8L2JyPiBpbnN0ZWFkIG9m
IDxicj4KLSAgICAvLyBiZSBjb21wYXRpYmxlIHdpdGggSUUgYW5kIE5TCi0gICAgaWYgKHQtPmlk
ID09IElEX0JSICsgSURfQ0xPU0VfVEFHICYmIGRvYygpLT5pbkNvbXBhdE1vZGUoKSkKLSAgICAg
ICAgdC0+aWQgPSBJRF9CUjsKKyAgICAvLyBBcHBhcmVudGx5IHNvbWUgc2l0ZXMgdXNlIDwvYnI+
IGluc3RlYWQgb2YgPGJyPi4gIEJlIGNvbXBhdGlibGUgd2l0aCBJRSBhbmQgRmlyZWZveCBhbmQg
dHJlYXQgdGhpcyBsaWtlIDxicj4uCisgICAgaWYgKHQtPmlzQ2xvc2VUYWcoSFRNTE5hbWVzOjpi
cigpKSAmJiBkb2MoKS0+aW5Db21wYXRNb2RlKCkpCisgICAgICAgIHQtPmJlZ2luVGFnID0gdHJ1
ZTsKIAotICAgIGlmICh0LT5pZCA+IElEX0NMT1NFX1RBRykKLSAgICB7CisgICAgaWYgKCF0LT5i
ZWdpblRhZykgewogICAgICAgICBwcm9jZXNzQ2xvc2VUYWcodCk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKICAgICAvLyBpZ25vcmUgc3BhY2VzLCBpZiB3ZSdyZSBub3QgaW5zaWRlIGEgcGFy
YWdyYXBoIG9yIG90aGVyIGlubGluZSBjb2RlCi0gICAgaWYoIHQtPmlkID09IElEX1RFWFQgJiYg
dC0+dGV4dCApIHsKLSAgICAgICAgaWYoaW5Cb2R5ICYmICFza2lwTW9kZSgpICYmIGN1cnJlbnQt
PmlkKCkgIT0gSURfU1RZTEUgCi0gICAgICAgICAgICAmJiBjdXJyZW50LT5pZCgpICE9IElEX1RJ
VExFICYmIGN1cnJlbnQtPmlkKCkgIT0gSURfU0NSSVBUICYmCi0gICAgICAgICAgICAhdC0+dGV4
dC0+Y29udGFpbnNPbmx5V2hpdGVzcGFjZSgpKSAKKyAgICBpZiAodC0+dGFnTmFtZSA9PSB0ZXh0
QXRvbSAmJiB0LT50ZXh0KSB7CisgICAgICAgIGlmIChpbkJvZHkgJiYgIXNraXBNb2RlKCkgJiYg
Y3VycmVudC0+bG9jYWxOYW1lKCkgIT0gSFRNTE5hbWVzOjpzdHlsZSgpICYmIGN1cnJlbnQtPmxv
Y2FsTmFtZSgpICE9IEhUTUxOYW1lczo6dGl0bGUoKSAmJiAKKyAgICAgICAgICAgIGN1cnJlbnQt
PmxvY2FsTmFtZSgpICE9IEhUTUxOYW1lczo6c2NyaXB0KCkgJiYgIXQtPnRleHQtPmNvbnRhaW5z
T25seVdoaXRlc3BhY2UoKSkgCiAgICAgICAgICAgICBoYXZlQ29udGVudCA9IHRydWU7Ci0jaWZk
ZWYgUEFSU0VSX0RFQlVHCi0gICAgICAgIGtkRGVidWcoNjAzNSkgPDwgImxlbmd0aD0iPDwgdC0+
dGV4dC0+bCA8PCAiIHRleHQ9JyIgPDwgUUNvbnN0U3RyaW5nKHQtPnRleHQtPnMsIHQtPnRleHQt
PmwpLnN0cmluZygpIDw8ICInIiA8PCBlbmRsOwotI2VuZGlmCiAgICAgfQogCi0gICAgTm9kZUlt
cGwgKm4gPSBnZXRFbGVtZW50KHQpOworICAgIE5vZGVJbXBsICpuID0gZ2V0Tm9kZSh0KTsKICAg
ICAvLyBqdXN0IHRvIGJlIHN1cmUsIGFuZCB0byBjYXRjaCBjdXJyZW50bHkgdW5pbXBsZW1lbnRl
ZCBzdHVmZgotICAgIGlmKCFuKQorICAgIGlmICghbikKICAgICAgICAgcmV0dXJuOwogCiAgICAg
U2hhcmVkUHRyPE5vZGVJbXBsPiBwcm90ZWN0Tm9kZShuKTsKIAogICAgIC8vIHNldCBhdHRyaWJ1
dGVzCi0gICAgaWYobi0+aXNFbGVtZW50Tm9kZSgpKQotICAgIHsKLSAgICAgICAgRWxlbWVudElt
cGwgKmUgPSBzdGF0aWNfY2FzdDxFbGVtZW50SW1wbCAqPihuKTsKKyAgICBpZiAobi0+aXNIVE1M
RWxlbWVudCgpKSB7CisgICAgICAgIEhUTUxFbGVtZW50SW1wbCAqZSA9IHN0YXRpY19jYXN0PEhU
TUxFbGVtZW50SW1wbCo+KG4pOwogICAgICAgICBlLT5zZXRBdHRyaWJ1dGVNYXAodC0+YXR0cnMp
OwogCiAgICAgICAgIC8vIHRha2UgY2FyZSBvZiBvcHRpb25hbCBjbG9zZSB0YWdzCi0gICAgICAg
IGlmKGVuZFRhZ1JlcXVpcmVtZW50KGUtPmlkKCkpID09IERPTTo6T1BUSU9OQUwpCi0gICAgICAg
ICAgICBwb3BCbG9jayh0LT5pZCk7CisgICAgICAgIGlmIChlLT5lbmRUYWdSZXF1aXJlbWVudCgp
ID09IFRhZ1N0YXR1c09wdGlvbmFsKQorICAgICAgICAgICAgcG9wQmxvY2sodC0+dGFnTmFtZSk7
CiAgICAgICAgICAgICAKLSAgICAgICAgaWYgKGlzSGVhZGVyVGFnKHQtPmlkKSkKKyAgICAgICAg
aWYgKGlzSGVhZGVyVGFnKHQtPnRhZ05hbWUpKQogICAgICAgICAgICAgLy8gRG8gbm90IGFsbG93
IHR3byBoZWFkZXIgdGFncyB0byBiZSBuZXN0ZWQgaWYgdGhlIGludGVydmVuaW5nIHRhZ3MgYXJl
IGlubGluZXMuCiAgICAgICAgICAgICBwb3BOZXN0ZWRIZWFkZXJUYWcoKTsKICAgICB9CiAKLSAg
ICAvLyBpZiB0aGlzIHRhZyBpcyBmb3JiaWRkZW4gaW5zaWRlIHRoZSBjdXJyZW50IGNvbnRleHQs
IHBvcAotICAgIC8vIGJsb2NrcyB1bnRpbCB3ZSBhcmUgYWxsb3dlZCB0byBhZGQgaXQuLi4KLSAg
ICB3aGlsZSAoYmxvY2tTdGFjayAmJiB0LT5pZCA8PSBJRF9MQVNUX1RBRyAmJiBmb3JiaWRkZW5U
YWdbdC0+aWRdKSB7Ci0jaWZkZWYgUEFSU0VSX0RFQlVHCi0gICAgICAgIGtkRGVidWcoIDYwMzUg
KSA8PCAidC0+aWQ6ICIgPDwgdC0+aWQgPDwgIiBpcyBmb3JiaWRkZW4gOi0oICIgPDwgZW5kbDsK
LSNlbmRpZgotICAgICAgICBwb3BPbmVCbG9jaygpOwotICAgIH0KLQotICAgIGlmICghaW5zZXJ0
Tm9kZShuLCB0LT5mbGF0KSkgCi0gICAgeworICAgIGlmICghaW5zZXJ0Tm9kZShuLCB0LT5mbGF0
KSkgewogICAgICAgICAvLyB3ZSBjb3VsZG4ndCBpbnNlcnQgdGhlIG5vZGUuLi4KLSAgICAgICAg
Ci0gICAgICAgIGlmKG4tPmlzRWxlbWVudE5vZGUoKSkKLSAgICAgICAgewotICAgICAgICAgICAg
RWxlbWVudEltcGwgKmUgPSBzdGF0aWNfY2FzdDxFbGVtZW50SW1wbCAqPihuKTsKKyAgICAgICAg
aWYgKG4tPmlzRWxlbWVudE5vZGUoKSkgeworICAgICAgICAgICAgRWxlbWVudEltcGwqIGUgPSBz
dGF0aWNfY2FzdDxFbGVtZW50SW1wbCo+KG4pOwogICAgICAgICAgICAgZS0+c2V0QXR0cmlidXRl
TWFwKDApOwogICAgICAgICB9CiAgICAgICAgICAgICAKLSNpZmRlZiBQQVJTRVJfREVCVUcKLSAg
ICAgICAga2REZWJ1ZyggNjAzNSApIDw8ICJpbnNlcnROb2RlIGZhaWxlZCBjdXJyZW50PSIgPDwg
Y3VycmVudC0+aWQoKSA8PCAiLCBuZXc9IiA8PCBuLT5pZCgpIDw8ICIhIiA8PCBlbmRsOwotI2Vu
ZGlmCiAgICAgICAgIGlmIChtYXAgPT0gbikKLSAgICAgICAgewotI2lmZGVmIFBBUlNFUl9ERUJV
RwotICAgICAgICAgICAga2REZWJ1ZyggNjAzNSApIDw8ICIgIC0tPiByZXNldHRpbmcgbWFwISIg
PDwgZW5kbDsKLSNlbmRpZgogICAgICAgICAgICAgbWFwID0gMDsKLSAgICAgICAgfQorCiAgICAg
ICAgIGlmIChmb3JtID09IG4pCi0gICAgICAgIHsKLSNpZmRlZiBQQVJTRVJfREVCVUcKLSAgICAg
ICAgICAgIGtkRGVidWcoIDYwMzUgKSA8PCAiICAgLS0+IHJlc2V0dGluZyBmb3JtISIgPDwgZW5k
bDsKLSNlbmRpZgogICAgICAgICAgICAgZm9ybSA9IDA7Ci0gICAgICAgIH0KICAgICB9CiB9CiAK
LXN0YXRpYyBib29sIGlzVGFibGVSZWxhdGVkVGFnKGludCBpZCkKK3N0YXRpYyBib29sIGlzVGFi
bGVTZWN0aW9uKE5vZGVJbXBsKiBuKQogewotICAgIHJldHVybiAoaWQgPT0gSURfVFIgfHwgaWQg
PT0gSURfVEQgfHwgaWQgPT0gSURfVEFCTEUgfHwgaWQgPT0gSURfVEJPRFkgfHwgaWQgPT0gSURf
VEZPT1QgfHwgaWQgPT0gSURfVEhFQUQgfHwKLSAgICAgICAgICAgIGlkID09IElEX1RIKTsKKyAg
ICByZXR1cm4gbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRib2R5KCkpIHx8IG4tPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjp0Zm9vdCgpKSB8fCBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGhlYWQo
KSk7CiB9CiAKLWJvb2wgS0hUTUxQYXJzZXI6Omluc2VydE5vZGUoTm9kZUltcGwgKm4sIGJvb2wg
ZmxhdCkKK3N0YXRpYyBib29sIGlzVGFibGVQYXJ0KE5vZGVJbXBsKiBuKQogewotICAgIFNoYXJl
ZFB0cjxOb2RlSW1wbD4gcHJvdGVjdE5vZGUobik7CisgICAgcmV0dXJuIG4tPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjp0cigpKSB8fCBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGQoKSkgfHwgbi0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRoKCkpIHx8CisgICAgICAgICAgIGlzVGFibGVTZWN0aW9u
KG4pOworfQogCi0gICAgaW50IGlkID0gbi0+aWQoKTsKK3N0YXRpYyBib29sIGlzVGFibGVSZWxh
dGVkKE5vZGVJbXBsKiBuKQoreworICAgIHJldHVybiBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
dGFibGUoKSkgfHwgaXNUYWJsZVBhcnQobik7Cit9CiAKK2Jvb2wgSFRNTFBhcnNlcjo6aW5zZXJ0
Tm9kZShOb2RlSW1wbCAqbiwgYm9vbCBmbGF0KQoreworICAgIFNoYXJlZFB0cjxOb2RlSW1wbD4g
cHJvdGVjdE5vZGUobik7CisKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSA9IG4t
PmxvY2FsTmFtZSgpOworICAgIGludCB0YWdQcmlvcml0eSA9IG4tPmlzSFRNTEVsZW1lbnQoKSA/
IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCo+KG4pLT50YWdQcmlvcml0eSgpIDogMDsKKyAg
ICAgICAgCiAgICAgLy8gbGV0J3MgYmUgc3R1cGlkIGFuZCBqdXN0IHRyeSB0byBpbnNlcnQgaXQu
Ci0gICAgLy8gdGhpcyBzaG91bGQgd29yayBpZiB0aGUgZG9jdW1lbnQgaXMgd2VsbGZvcm1lZAot
I2lmZGVmIFBBUlNFUl9ERUJVRwotICAgIE5vZGVJbXBsICp0bXAgPSBjdXJyZW50OwotI2VuZGlm
CisgICAgLy8gdGhpcyBzaG91bGQgd29yayBpZiB0aGUgZG9jdW1lbnQgaXMgd2VsbC1mb3JtZWQK
ICAgICBOb2RlSW1wbCAqbmV3Tm9kZSA9IGN1cnJlbnQtPmFkZENoaWxkKG4pOwotICAgIGlmICgg
bmV3Tm9kZSApIHsKLSNpZmRlZiBQQVJTRVJfREVCVUcKLSAgICAgICAga2REZWJ1ZyggNjAzNSAp
IDw8ICJhZGRlZCAiIDw8IG4tPm5vZGVOYW1lKCkuc3RyaW5nKCkgPDwgIiB0byAiIDw8IHRtcC0+
bm9kZU5hbWUoKS5zdHJpbmcoKSA8PCAiLCBuZXcgY3VycmVudD0iIDw8IG5ld05vZGUtPm5vZGVO
YW1lKCkuc3RyaW5nKCkgPDwgZW5kbDsKLSNlbmRpZgotICAgICAgICAvLyBkb24ndCBwdXNoIGVs
ZW1lbnRzIHdpdGhvdXQgZW5kIHRhZyBvbiB0aGUgc3RhY2sKLSAgICAgICAgaWYodGFnUHJpb3Jp
dHkoaWQpICE9IDAgJiYgIWZsYXQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHB1c2hCbG9jayhp
ZCwgdGFnUHJpb3JpdHkoaWQpKTsKKyAgICBpZiAobmV3Tm9kZSkgeworICAgICAgICAvLyBkb24n
dCBwdXNoIGVsZW1lbnRzIHdpdGhvdXQgZW5kIHRhZ3MgKGUuZy4sIDxpbWc+KSBvbiB0aGUgc3Rh
Y2sKKyAgICAgICAgaWYgKHRhZ1ByaW9yaXR5ID4gMCAmJiAhZmxhdCkgeworICAgICAgICAgICAg
cHVzaEJsb2NrKGxvY2FsTmFtZSwgdGFnUHJpb3JpdHkpOwogICAgICAgICAgICAgaWYgKG5ld05v
ZGUgPT0gY3VycmVudCkKLSAgICAgICAgICAgICAgICBwb3BCbG9jayhpZCk7CisgICAgICAgICAg
ICAgICAgcG9wQmxvY2sobG9jYWxOYW1lKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICAgICBzZXRDdXJyZW50KG5ld05vZGUpOwotI2lmIFNQRUVEX0RFQlVHIDwgMgotICAgICAgICAg
ICAgaWYoIW4tPmF0dGFjaGVkKCkgJiYgSFRNTFdpZGdldCkKKyAgICAgICAgICAgIGlmICghbi0+
YXR0YWNoZWQoKSAmJiBIVE1MV2lkZ2V0KQogICAgICAgICAgICAgICAgIG4tPmF0dGFjaCgpOwot
I2VuZGlmCiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7Ci0jaWYgU1BFRURfREVCVUcgPCAyCi0g
ICAgICAgICAgICBpZighbi0+YXR0YWNoZWQoKSAmJiBIVE1MV2lkZ2V0KQorICAgICAgICAgICAg
aWYgKCFuLT5hdHRhY2hlZCgpICYmIEhUTUxXaWRnZXQpCiAgICAgICAgICAgICAgICAgbi0+YXR0
YWNoKCk7CiAgICAgICAgICAgICBpZiAobi0+bWFpbnRhaW5zU3RhdGUoKSkgewogICAgICAgICAg
ICAgICAgIGRvYygpLT5yZWdpc3Rlck1haW50YWluc1N0YXRlKG4pOwpAQCAtMzQwLDEwNCArMjkz
LDg2IEBAIGJvb2wgS0hUTUxQYXJzZXI6Omluc2VydE5vZGUoTm9kZUltcGwgKm4KICAgICAgICAg
ICAgICAgICAgICAgbi0+cmVzdG9yZVN0YXRlKHN0YXRlcyk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBuLT5jbG9zZVJlbmRlcmVyKCk7Ci0jZW5kaWYKICAgICAgICAgfQogCiAgICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0gZWxzZSB7Ci0jaWZkZWYgUEFSU0VSX0RFQlVHCi0gICAgICAg
IGtkRGVidWcoIDYwMzUgKSA8PCAiQURESU5HIE5PREUgRkFJTEVEISEhISBjdXJyZW50ID0gIiA8
PCBjdXJyZW50LT5ub2RlTmFtZSgpLnN0cmluZygpIDw8ICIsIG5ldyA9ICIgPDwgbi0+bm9kZU5h
bWUoKS5zdHJpbmcoKSA8PCBlbmRsOwotI2VuZGlmCi0gICAgICAgIC8vIGVycm9yIGhhbmRsaW5n
Li4uCi0gICAgICAgIEhUTUxFbGVtZW50SW1wbCAqZTsKLSAgICAgICAgYm9vbCBoYW5kbGVkID0g
ZmFsc2U7Ci0KLSAgICAgICAgLy8gc3dpdGNoIGFjY29yZGluZyB0byB0aGUgZWxlbWVudCB0byBp
bnNlcnQKLSAgICAgICAgc3dpdGNoKGlkKQotICAgICAgICB7Ci0gICAgICAgIGNhc2UgSURfVFI6
Ci0gICAgICAgIGNhc2UgSURfVEg6Ci0gICAgICAgIGNhc2UgSURfVEQ6Ci0gICAgICAgICAgICBp
ZiAoaW5TdHJheVRhYmxlQ29udGVudCAmJiAhaXNUYWJsZVJlbGF0ZWRUYWcoY3VycmVudC0+aWQo
KSkpIHsKKyAgICB9IGVsc2UKKyAgICAgICAgcmV0dXJuIGhhbmRsZUVycm9yKG4sIGZsYXQsIGxv
Y2FsTmFtZSwgdGFnUHJpb3JpdHkpOyAvLyBUcnkgdG8gaGFuZGxlIHRoZSBlcnJvci4KK30KKwor
Ym9vbCBIVE1MUGFyc2VyOjpoYW5kbGVFcnJvcihOb2RlSW1wbCogbiwgYm9vbCBmbGF0LCBjb25z
dCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSwgaW50IHRhZ1ByaW9yaXR5KQoreworICAgIC8vIEVy
cm9yIGhhbmRsaW5nIGNvZGUuICBUaGlzIGlzIGp1c3QgYWQgaG9jIGhhbmRsaW5nIG9mIHNwZWNp
ZmljIHBhcmVudC9jaGlsZCBjb21iaW5hdGlvbnMuCisgICAgSFRNTEVsZW1lbnRJbXBsICplOwor
ICAgIGJvb2wgaGFuZGxlZCA9IGZhbHNlOworCisgICAgLy8gMS4gQ2hlY2sgb3V0IHRoZSBlbGVt
ZW50J3MgdGFnIG5hbWUgdG8gZGVjaWRlIGhvdyB0byBkZWFsIHdpdGggZXJyb3JzLgorICAgIGlm
IChuLT5pc1RleHROb2RlKCkpIHsKKyAgICAgICAgaWYgKGN1cnJlbnQtPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjpzZWxlY3QoKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfSBlbHNl
IGlmIChuLT5pc0hUTUxFbGVtZW50KCkpIHsKKyAgICAgICAgSFRNTEVsZW1lbnRJbXBsKiBoID0g
c3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsKj4obik7CisgICAgICAgIGlmIChoLT5oYXNMb2Nh
bE5hbWUoSFRNTE5hbWVzOjp0cigpKSB8fCBoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0aCgp
KSB8fAorICAgICAgICAgICAgaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dGQoKSkpIHsKKyAg
ICAgICAgICAgIGlmIChpblN0cmF5VGFibGVDb250ZW50ICYmICFpc1RhYmxlUmVsYXRlZChjdXJy
ZW50KSkgewogICAgICAgICAgICAgICAgIC8vIHBvcCBvdXQgdG8gdGhlIG5lYXJlc3QgZW5jbG9z
aW5nIHRhYmxlLXJlbGF0ZWQgdGFnLgotICAgICAgICAgICAgICAgIHdoaWxlIChibG9ja1N0YWNr
ICYmICFpc1RhYmxlUmVsYXRlZFRhZyhjdXJyZW50LT5pZCgpKSkKKyAgICAgICAgICAgICAgICB3
aGlsZSAoYmxvY2tTdGFjayAmJiAhaXNUYWJsZVJlbGF0ZWQoY3VycmVudCkpCiAgICAgICAgICAg
ICAgICAgICAgIHBvcE9uZUJsb2NrKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGluc2VydE5v
ZGUobik7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJ
RF9DT01NRU5UOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSURfSEVBRDoKLSAg
ICAgICAgICAgIC8vICMjIyBhbGxsb3cgbm90IGhhdmluZyA8SFRNTD4gaW4gYXQgYWxsLCBhcyBw
ZXIgSFRNTCBzcGVjCi0gICAgICAgICAgICBpZiAoIWN1cnJlbnQtPmlzRG9jdW1lbnROb2RlKCkg
JiYgY3VycmVudC0+aWQoKSAhPSBJRF9IVE1MICkKKyAgICAgICAgfSBlbHNlIGlmIChoLT5oYXNM
b2NhbE5hbWUoSFRNTE5hbWVzOjpoZWFkKCkpKSB7CisgICAgICAgICAgICBpZiAoIWN1cnJlbnQt
PmlzRG9jdW1lbnROb2RlKCkgJiYgIWN1cnJlbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpodG1s
KCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgLy8gV2UgY2FuIGRlYWwgd2l0aCBhIGJhc2UsIG1ldGEgYW5kIGxpbmsgZWxl
bWVudCBpbiB0aGUgYm9keSwgYnkganVzdCBhZGRpbmcgdGhlIGVsZW1lbnQgdG8gaGVhZC4KLSAg
ICAgICAgY2FzZSBJRF9NRVRBOgotICAgICAgICBjYXNlIElEX0xJTks6Ci0gICAgICAgIGNhc2Ug
SURfQkFTRToKLSAgICAgICAgICAgIGlmKCAhaGVhZCApCisgICAgICAgIH0gZWxzZSBpZiAoaC0+
aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6bWV0YSgpKSB8fCBoLT5oYXNMb2NhbE5hbWUoSFRNTE5h
bWVzOjpsaW5rKCkpIHx8IGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmJhc2UoKSkpIHsKKyAg
ICAgICAgICAgIGlmICghaGVhZCkKICAgICAgICAgICAgICAgICBjcmVhdGVIZWFkKCk7Ci0gICAg
ICAgICAgICBpZiggaGVhZCApIHsKLSAgICAgICAgICAgICAgICBpZiAoIGhlYWQtPmFkZENoaWxk
KG4pICkgewotI2lmIFNQRUVEX0RFQlVHIDwgMgotICAgICAgICAgICAgICAgICAgICBpZighbi0+
YXR0YWNoZWQoKSAmJiBIVE1MV2lkZ2V0KQorICAgICAgICAgICAgaWYgKGhlYWQpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoaGVhZC0+YWRkQ2hpbGQobikpIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKCFuLT5hdHRhY2hlZCgpICYmIEhUTUxXaWRnZXQpCiAgICAgICAgICAgICAgICAgICAgICAg
ICBuLT5hdHRhY2goKTsKLSNlbmRpZgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LQkJfSBlbHNlIHsKLQkJICAgIHJldHVybiBmYWxzZTsKLQkJfQorICAgICAgICAgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJRF9IVE1MOgorICAgICAgICB9IGVsc2Ug
aWYgKGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Omh0bWwoKSkpIHsKICAgICAgICAgICAgIGlm
ICghY3VycmVudC0+aXNEb2N1bWVudE5vZGUoKSApIHsKLQkJaWYgKCBkb2MoKS0+Zmlyc3RDaGls
ZCgpLT5pZCgpID09IElEX0hUTUwpIHsKLQkJICAgIC8vIHdlIGhhdmUgYW5vdGhlciA8SFRNTD4g
ZWxlbWVudC4uLi4gYXBwbHkgYXR0cmlidXRlcyB0byBleGlzdGluZyBvbmUKLQkJICAgIC8vIG1h
a2Ugc3VyZSB3ZSBkb24ndCBvdmVyd3JpdGUgYWxyZWFkeSBleGlzdGluZyBhdHRyaWJ1dGVzCi0J
CSAgICBOYW1lZEF0dHJNYXBJbXBsICptYXAgPSBzdGF0aWNfY2FzdDxFbGVtZW50SW1wbCo+KG4p
LT5hdHRyaWJ1dGVzKHRydWUpOwotCQkgICAgTmFtZWRBdHRyTWFwSW1wbCAqYm1hcCA9IHN0YXRp
Y19jYXN0PEVsZW1lbnRJbXBsKj4oZG9jKCktPmZpcnN0Q2hpbGQoKSktPmF0dHJpYnV0ZXMoZmFs
c2UpOwotCQkgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7Ci0JCSAgICBmb3IgKHVuc2lnbmVkIGxv
bmcgbCA9IDA7IG1hcCAmJiBsIDwgbWFwLT5sZW5ndGgoKTsgKytsKSB7Ci0JCQlBdHRyaWJ1dGVJ
bXBsKiBpdCA9IG1hcC0+YXR0cmlidXRlSXRlbShsKTsKLQkJCWNoYW5nZWQgPSAhYm1hcC0+Z2V0
QXR0cmlidXRlSXRlbShpdC0+aWQoKSk7Ci0JCQlibWFwLT5pbnNlcnRBdHRyaWJ1dGUoaXQtPmNs
b25lKGZhbHNlKSk7Ci0JCSAgICB9Ci0JCSAgICBpZiAoIGNoYW5nZWQgKQotCQkJZG9jKCktPnJl
Y2FsY1N0eWxlKCBOb2RlSW1wbDo6SW5oZXJpdCApOwotCQl9CisgICAgICAgICAgICAgICAgaWYg
KGRvYygpLT5maXJzdENoaWxkKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpodG1sKCkpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIC8vIHdlIGhhdmUgYW5vdGhlciA8SFRNTD4gZWxlbWVudC4uLi4g
YXBwbHkgYXR0cmlidXRlcyB0byBleGlzdGluZyBvbmUKKyAgICAgICAgICAgICAgICAgICAgLy8g
bWFrZSBzdXJlIHdlIGRvbid0IG92ZXJ3cml0ZSBhbHJlYWR5IGV4aXN0aW5nIGF0dHJpYnV0ZXMK
KyAgICAgICAgICAgICAgICAgICAgTmFtZWRBdHRyTWFwSW1wbCAqbWFwID0gc3RhdGljX2Nhc3Q8
RWxlbWVudEltcGwqPihuKS0+YXR0cmlidXRlcyh0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAg
TmFtZWRBdHRyTWFwSW1wbCAqYm1hcCA9IHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsKj4oZG9jKCkt
PmZpcnN0Q2hpbGQoKSktPmF0dHJpYnV0ZXMoZmFsc2UpOworICAgICAgICAgICAgICAgICAgICBi
b29sIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBs
b25nIGwgPSAwOyBtYXAgJiYgbCA8IG1hcC0+bGVuZ3RoKCk7ICsrbCkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgQXR0cmlidXRlSW1wbCogaXQgPSBtYXAtPmF0dHJpYnV0ZUl0ZW0obCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gIWJtYXAtPmdldEF0dHJpYnV0ZUl0ZW0o
aXQtPmlkKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgYm1hcC0+aW5zZXJ0QXR0cmlidXRl
KGl0LT5jbG9uZShmYWxzZSkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIGlmIChjaGFuZ2VkKQorICAgICAgICAgICAgICAgICAgICAgICAgZG9jKCktPnJlY2Fs
Y1N0eWxlKE5vZGVJbXBsOjpJbmhlcml0KTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCSAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBJRF9USVRMRToKLSAgICAgICAgY2FzZSBJRF9TVFlMRToKLSAgICAgICAgICAgIGlmICgg
IWhlYWQgKQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFt
ZShIVE1MTmFtZXM6OnRpdGxlKCkpIHx8IGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnN0eWxl
KCkpKSB7CisgICAgICAgICAgICBpZiAoIWhlYWQpCiAgICAgICAgICAgICAgICAgY3JlYXRlSGVh
ZCgpOwotICAgICAgICAgICAgaWYgKCBoZWFkICkgeworICAgICAgICAgICAgaWYgKGhlYWQpIHsK
ICAgICAgICAgICAgICAgICBET006Ok5vZGVJbXBsICpuZXdOb2RlID0gaGVhZC0+YWRkQ2hpbGQo
bik7Ci0gICAgICAgICAgICAgICAgaWYgKCBuZXdOb2RlICkgewotICAgICAgICAgICAgICAgICAg
ICBwdXNoQmxvY2soaWQsIHRhZ1ByaW9yaXR5KGlkKSk7CisgICAgICAgICAgICAgICAgaWYgKG5l
d05vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgcHVzaEJsb2NrKGxvY2FsTmFtZSwgdGFnUHJp
b3JpdHkpOwogICAgICAgICAgICAgICAgICAgICBzZXRDdXJyZW50KG5ld05vZGUpOwotI2lmIFNQ
RUVEX0RFQlVHIDwgMgotCQkgICAgaWYoIW4tPmF0dGFjaGVkKCkgJiYgSFRNTFdpZGdldCkKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKCFuLT5hdHRhY2hlZCgpICYmIEhUTUxXaWRnZXQpCiAgICAg
ICAgICAgICAgICAgICAgICAgICBuLT5hdHRhY2goKTsKLSNlbmRpZgogICAgICAgICAgICAgICAg
IH0gZWxzZSB7Ci0jaWZkZWYgUEFSU0VSX0RFQlVHCi0gICAgICAgICAgICAgICAgICAgIGtkRGVi
dWcoIDYwMzUgKSA8PCAiYWRkaW5nIHN0eWxlIGJlZm9yZSB0byBib2R5IGZhaWxlZCEhISEiIDw8
IGVuZGw7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgZGlzY2FyZF91bnRpbCA9IElEX1NU
WUxFICsgSURfQ0xPU0VfVEFHOworICAgICAgICAgICAgICAgICAgICBzZXRTa2lwTW9kZShIVE1M
TmFtZXM6OnN0eWxlKCkpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAg
fSBlbHNlIGlmKGluQm9keSkgewotICAgICAgICAgICAgICAgIGRpc2NhcmRfdW50aWwgPSBJRF9T
VFlMRSArIElEX0NMT1NFX1RBRzsKKyAgICAgICAgICAgICAgICBzZXRTa2lwTW9kZShIVE1MTmFt
ZXM6OnN0eWxlKCkpOwogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgLy8gU0NSSVBUIGFuZCBPQkpFQ1Qg
YXJlIGFsbG93ZWQgaW4gdGhlIGJvZHkuCi0gICAgICAgIGNhc2UgSURfQk9EWToKLSAgICAgICAg
ICAgIGlmKGluQm9keSAmJiBkb2MoKS0+Ym9keSgpKSB7CisgICAgICAgIH0gZWxzZSBpZiAoaC0+
aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6Ym9keSgpKSkgeworICAgICAgICAgICAgaWYgKGluQm9k
eSAmJiBkb2MoKS0+Ym9keSgpKSB7CiAgICAgICAgICAgICAgICAgLy8gd2UgaGF2ZSBhbm90aGVy
IDxCT0RZPiBlbGVtZW50Li4uLiBhcHBseSBhdHRyaWJ1dGVzIHRvIGV4aXN0aW5nIG9uZQogICAg
ICAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB3ZSBkb24ndCBvdmVyd3JpdGUgYWxyZWFkeSBleGlz
dGluZyBhdHRyaWJ1dGVzCiAgICAgICAgICAgICAgICAgLy8gc29tZSBzaXRlcyB1c2UgPGJvZHkg
Ymdjb2xvcj1yaWdodGNvbG9yPi4uLjxib2R5IGJnY29sb3I9d3Jvbmdjb2xvcj4KQEAgLTQ0OSwz
NjAgKzM4NCwyNTkgQEAgYm9vbCBLSFRNTFBhcnNlcjo6aW5zZXJ0Tm9kZShOb2RlSW1wbCAqbgog
ICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gIWJtYXAtPmdldEF0dHJpYnV0ZUl0ZW0oaXQt
PmlkKCkpOwogICAgICAgICAgICAgICAgICAgICBibWFwLT5pbnNlcnRBdHRyaWJ1dGUoaXQtPmNs
b25lKGZhbHNlKSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICggY2hh
bmdlZCApCi0gICAgICAgICAgICAgICAgICAgIGRvYygpLT5yZWNhbGNTdHlsZSggTm9kZUltcGw6
OkluaGVyaXQgKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoIGN1cnJlbnQtPmlzRG9jdW1lbnRO
b2RlKCkgKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIC8vIHRoZSBmb2xsb3dpbmcgaXMg
YSBoYWNrIHRvIG1vdmUgbm9uIHJlbmRlcmVkIGVsZW1lbnRzCi0gICAgICAgICAgICAvLyBvdXRz
aWRlIG9mIHRhYmxlcy4KLSAgICAgICAgICAgIC8vIG5lZWRlZCBmb3IgYnJva2VuIGNvbnN0cnVj
dHMgbGlrZSA8dGFibGU+PGZvcm0gLi4uPjx0cj4uLi4uCi0gICAgICAgIGNhc2UgSURfSU5QVVQ6
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEVsZW1lbnRJbXBsICplID0gc3RhdGljX2Nhc3Q8RWxl
bWVudEltcGwgKj4obik7Ci0gICAgICAgICAgICBET01TdHJpbmcgdHlwZSA9IGUtPmdldEF0dHJp
YnV0ZShBVFRSX1RZUEUpOwotCi0gICAgICAgICAgICBpZiAoIHN0cmNhc2VjbXAoIHR5cGUsICJo
aWRkZW4iICkgPT0gMCAmJiBmb3JtKSB7CisgICAgICAgICAgICAgICAgaWYgKGNoYW5nZWQpCisg
ICAgICAgICAgICAgICAgICAgIGRvYygpLT5yZWNhbGNTdHlsZShOb2RlSW1wbDo6SW5oZXJpdCk7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZWxzZSBpZiAoIWN1cnJlbnQtPmlzRG9jdW1lbnROb2RlKCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFtZShIVE1MTmFt
ZXM6OmlucHV0KCkpKSB7CisgICAgICAgICAgICBET01TdHJpbmcgdHlwZSA9IGgtPmdldEF0dHJp
YnV0ZShBVFRSX1RZUEUpOworICAgICAgICAgICAgaWYgKHN0cmNhc2VjbXAodHlwZSwgImhpZGRl
biIpID09IDAgJiYgZm9ybSkgewogICAgICAgICAgICAgICAgIGZvcm0tPmFkZENoaWxkKG4pOwot
I2lmIFNQRUVEX0RFQlVHIDwgMgotICAgICAgICAgICAgICAgIGlmKCFuLT5hdHRhY2hlZCgpICYm
IEhUTUxXaWRnZXQpCisgICAgICAgICAgICAgICAgaWYgKCFuLT5hdHRhY2hlZCgpICYmIEhUTUxX
aWRnZXQpCiAgICAgICAgICAgICAgICAgICAgIG4tPmF0dGFjaCgpOwotI2VuZGlmCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICBjYXNlIElEX1RFWFQ6Ci0gICAgICAgICAgICAvLyBpZ25vcmUg
dGV4dCBpbnNpZGUgdGhlIGZvbGxvd2luZyBlbGVtZW50cy4KLSAgICAgICAgICAgIHN3aXRjaChj
dXJyZW50LT5pZCgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgY2FzZSBJRF9TRUxFQ1Q6
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgICAgICA7Ci0gICAgICAgICAgICAgICAgLy8gZmFsbCB0aHJvdWdoISEKLSAgICAg
ICAgICAgIH07Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJRF9ERDoKLSAgICAg
ICAgY2FzZSBJRF9EVDoKKyAgICAgICAgfSBlbHNlIGlmIChoLT5oYXNMb2NhbE5hbWUoSFRNTE5h
bWVzOjpkZCgpKSB8fCBoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpkdCgpKSkgewogICAgICAg
ICAgICAgZSA9IG5ldyBIVE1MRExpc3RFbGVtZW50SW1wbChkb2N1bWVudCk7Ci0gICAgICAgICAg
ICBpZiAoIGluc2VydE5vZGUoZSkgKSB7CisgICAgICAgICAgICBpZiAoaW5zZXJ0Tm9kZShlKSkg
ewogICAgICAgICAgICAgICAgIGluc2VydE5vZGUobik7CiAgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJ
RF9BUkVBOgotICAgICAgICB7Ci0gICAgICAgICAgICBpZihtYXApCi0gICAgICAgICAgICB7Cisg
ICAgICAgIH0gZWxzZSBpZiAoaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6YXJlYSgpKSkgewor
ICAgICAgICAgICAgaWYgKG1hcCkgewogICAgICAgICAgICAgICAgIG1hcC0+YWRkQ2hpbGQobik7
Ci0jaWYgU1BFRURfREVCVUcgPCAyCi0gICAgICAgICAgICAgICAgaWYoIW4tPmF0dGFjaGVkKCkg
JiYgSFRNTFdpZGdldCkKKyAgICAgICAgICAgICAgICBpZiAoIW4tPmF0dGFjaGVkKCkgJiYgSFRN
TFdpZGdldCkKICAgICAgICAgICAgICAgICAgICAgbi0+YXR0YWNoKCk7Ci0jZW5kaWYKICAgICAg
ICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVs
c2UKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgfQotICAgICAgICBjYXNlIElEX0NBUFRJT046IHsKLSAgICAgICAgICAgIHN3
aXRjaCAoY3VycmVudC0+aWQoKSkgewotICAgICAgICAgICAgICAgIGNhc2UgSURfVEhFQUQ6Ci0g
ICAgICAgICAgICAgICAgY2FzZSBJRF9UQk9EWToKLSAgICAgICAgICAgICAgICBjYXNlIElEX1RG
T09UOgotICAgICAgICAgICAgICAgIGNhc2UgSURfVFI6Ci0gICAgICAgICAgICAgICAgY2FzZSBJ
RF9USDoKLSAgICAgICAgICAgICAgICBjYXNlIElEX1REOiB7Ci0gICAgICAgICAgICAgICAgICAg
IE5vZGVJbXBsKiB0c2VjdGlvbiA9IGN1cnJlbnQ7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChj
dXJyZW50LT5pZCgpID09IElEX1RSKQotICAgICAgICAgICAgICAgICAgICAgICAgdHNlY3Rpb24g
PSBjdXJyZW50LT5wYXJlbnQoKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY3VycmVu
dC0+aWQoKSA9PSBJRF9URCB8fCBjdXJyZW50LT5pZCgpID09IElEX1RIKQotICAgICAgICAgICAg
ICAgICAgICAgICAgdHNlY3Rpb24gPSBjdXJyZW50LT5wYXJlbnQoKS0+cGFyZW50KCk7Ci0gICAg
ICAgICAgICAgICAgICAgIE5vZGVJbXBsKiB0YWJsZSA9IHRzZWN0aW9uLT5wYXJlbnQoKTsKLSAg
ICAgICAgICAgICAgICAgICAgaW50IGV4Y2VwdGlvbmNvZGUgPSAwOwotICAgICAgICAgICAgICAg
ICAgICB0YWJsZS0+aW5zZXJ0QmVmb3JlKG4sIHRzZWN0aW9uLCBleGNlcHRpb25jb2RlKTsKLSAg
ICAgICAgICAgICAgICAgICAgcHVzaEJsb2NrKGlkLCB0YWdQcmlvcml0eShpZCkpOwotICAgICAg
ICAgICAgICAgICAgICBzZXRDdXJyZW50KG4pOwotICAgICAgICAgICAgICAgICAgICBpblN0cmF5
VGFibGVDb250ZW50Kys7Ci0gICAgICAgICAgICAgICAgICAgIGJsb2NrU3RhY2stPnN0cmF5VGFi
bGVDb250ZW50ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6
OmNhcHRpb24oKSkpIHsKKyAgICAgICAgICAgIGlmIChpc1RhYmxlUGFydChjdXJyZW50KSkgewor
ICAgICAgICAgICAgICAgIE5vZGVJbXBsKiB0c2VjdGlvbiA9IGN1cnJlbnQ7CisgICAgICAgICAg
ICAgICAgaWYgKGN1cnJlbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0cigpKSkKKyAgICAgICAg
ICAgICAgICAgICAgdHNlY3Rpb24gPSBjdXJyZW50LT5wYXJlbnQoKTsKKyAgICAgICAgICAgICAg
ICBlbHNlIGlmIChjdXJyZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGQoKSkgfHwgY3VycmVu
dC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRoKCkpKQorICAgICAgICAgICAgICAgICAgICB0c2Vj
dGlvbiA9IGN1cnJlbnQtPnBhcmVudCgpLT5wYXJlbnQoKTsKKyAgICAgICAgICAgICAgICBOb2Rl
SW1wbCogdGFibGUgPSB0c2VjdGlvbi0+cGFyZW50KCk7CisgICAgICAgICAgICAgICAgaW50IGV4
Y2VwdGlvbmNvZGUgPSAwOworICAgICAgICAgICAgICAgIHRhYmxlLT5pbnNlcnRCZWZvcmUobiwg
dHNlY3Rpb24sIGV4Y2VwdGlvbmNvZGUpOworICAgICAgICAgICAgICAgIHB1c2hCbG9jayhsb2Nh
bE5hbWUsIHRhZ1ByaW9yaXR5KTsKKyAgICAgICAgICAgICAgICBzZXRDdXJyZW50KG4pOworICAg
ICAgICAgICAgICAgIGluU3RyYXlUYWJsZUNvbnRlbnQrKzsKKyAgICAgICAgICAgICAgICBibG9j
a1N0YWNrLT5zdHJheVRhYmxlQ29udGVudCA9IHRydWU7CisgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBjYXNlIElEX1RIRUFEOgotICAgICAgICBjYXNlIElEX1RCT0RZOgotICAgICAgICBjYXNl
IElEX1RGT09UOgotICAgICAgICBjYXNlIElEX0NPTEdST1VQOiB7Ci0gICAgICAgICAgICBpZiAo
aXNUYWJsZVJlbGF0ZWRUYWcoY3VycmVudC0+aWQoKSkpIHsKLSAgICAgICAgICAgICAgICB3aGls
ZSAoYmxvY2tTdGFjayAmJiBjdXJyZW50LT5pZCgpICE9IElEX1RBQkxFICYmIGlzVGFibGVSZWxh
dGVkVGFnKGN1cnJlbnQtPmlkKCkpKQorICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFt
ZShIVE1MTmFtZXM6OnRoZWFkKCkpIHx8IGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnRib2R5
KCkpIHx8CisgICAgICAgICAgICAgICAgICAgaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dGZv
b3QoKSkgfHwgaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6Y29sZ3JvdXAoKSkpIHsKKyAgICAg
ICAgICAgIGlmIChpc1RhYmxlUmVsYXRlZChjdXJyZW50KSkgeworICAgICAgICAgICAgICAgIHdo
aWxlIChibG9ja1N0YWNrICYmIGlzVGFibGVQYXJ0KGN1cnJlbnQpKQogICAgICAgICAgICAgICAg
ICAgICBwb3BPbmVCbG9jaygpOwogICAgICAgICAgICAgICAgIHJldHVybiBpbnNlcnROb2RlKG4p
OwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIHN3aXRjaCBvbiB0aGUgY3VycmVudGx5
IGFjdGl2ZSBlbGVtZW50Ci0gICAgICAgIHN3aXRjaChjdXJyZW50LT5pZCgpKQotICAgICAgICB7
Ci0gICAgICAgIGNhc2UgSURfSFRNTDoKLSAgICAgICAgICAgIHN3aXRjaChpZCkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgIGNhc2UgSURfU0NSSVBUOgotICAgICAgICAgICAgY2FzZSBJRF9T
VFlMRToKLSAgICAgICAgICAgIGNhc2UgSURfTUVUQToKLSAgICAgICAgICAgIGNhc2UgSURfTElO
SzoKLSAgICAgICAgICAgIGNhc2UgSURfT0JKRUNUOgotICAgICAgICAgICAgY2FzZSBJRF9FTUJF
RDoKLSAgICAgICAgICAgIGNhc2UgSURfVElUTEU6Ci0gICAgICAgICAgICBjYXNlIElEX0lTSU5E
RVg6Ci0gICAgICAgICAgICBjYXNlIElEX0JBU0U6Ci0gICAgICAgICAgICAgICAgaWYoIWhlYWQp
IHsKKyAgICB9CisgICAgCisgICAgLy8gMi4gTmV4dCB3ZSBleGFtaW5lIG91ciBjdXJyZW50bHkg
YWN0aXZlIGVsZW1lbnQgdG8gZG8gc29tZSBmdXJ0aGVyIGVycm9yIGhhbmRsaW5nLgorICAgIGlm
IChjdXJyZW50LT5pc0hUTUxFbGVtZW50KCkpIHsKKyAgICAgICAgSFRNTEVsZW1lbnRJbXBsKiBo
ID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsKj4oY3VycmVudCk7CisgICAgICAgIGNvbnN0
IEF0b21pY1N0cmluZyYgY3VycmVudFRhZ05hbWUgPSBjdXJyZW50LT5sb2NhbE5hbWUoKTsKKyAg
ICAgICAgaWYgKGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Omh0bWwoKSkpIHsKKyAgICAgICAg
ICAgIEhUTUxFbGVtZW50SW1wbCogZWx0ID0gbi0+aXNIVE1MRWxlbWVudCgpID8gc3RhdGljX2Nh
c3Q8SFRNTEVsZW1lbnRJbXBsKj4obikgOiAwOworICAgICAgICAgICAgaWYgKGVsdCAmJiBlbHQt
Pmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnNjcmlwdCgpKSB8fCBlbHQtPmhhc0xvY2FsTmFtZShI
VE1MTmFtZXM6OnN0eWxlKCkpIHx8CisgICAgICAgICAgICAgICAgZWx0LT5oYXNMb2NhbE5hbWUo
SFRNTE5hbWVzOjptZXRhKCkpIHx8IGVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6bGluaygp
KSB8fAorICAgICAgICAgICAgICAgIGVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b2JqZWN0
KCkpIHx8IGVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6ZW1iZWQoKSkgfHwKKyAgICAgICAg
ICAgICAgICBlbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnRpdGxlKCkpIHx8IGVsdC0+aGFz
TG9jYWxOYW1lKEhUTUxOYW1lczo6aXNpbmRleCgpKSB8fAorICAgICAgICAgICAgICAgIGVsdC0+
aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6YmFzZSgpKSkgeworICAgICAgICAgICAgICAgIGlmICgh
aGVhZCkgewogICAgICAgICAgICAgICAgICAgICBoZWFkID0gbmV3IEhUTUxIZWFkRWxlbWVudElt
cGwoZG9jdW1lbnQpOwogICAgICAgICAgICAgICAgICAgICBlID0gaGVhZDsKICAgICAgICAgICAg
ICAgICAgICAgaW5zZXJ0Tm9kZShlKTsKICAgICAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRy
dWU7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgY2FzZSBJRF9URVhUOiB7Ci0gICAgICAgICAgICAgICAgVGV4dEltcGwgKnQgPSBzdGF0aWNf
Y2FzdDxUZXh0SW1wbCAqPihuKTsKLSAgICAgICAgICAgICAgICBpZiAodC0+Y29udGFpbnNPbmx5
V2hpdGVzcGFjZSgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
ICAgICAgICAgLyogRmFsbCB0aHJvdWdoIHRvIGRlZmF1bHQgKi8KLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgaWYgKCBoYXZlRnJhbWVTZXQgKSBi
cmVhazsKLSAgICAgICAgICAgICAgICBlID0gbmV3IEhUTUxCb2R5RWxlbWVudEltcGwoZG9jdW1l
bnQpOwotICAgICAgICAgICAgICAgIHN0YXJ0Qm9keSgpOwotICAgICAgICAgICAgICAgIGluc2Vy
dE5vZGUoZSk7Ci0gICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChuLT5p
c1RleHROb2RlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgVGV4dEltcGwgKnQgPSBzdGF0aWNf
Y2FzdDxUZXh0SW1wbCAqPihuKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHQtPmNvbnRhaW5z
T25seVdoaXRlc3BhY2UoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXZlRnJhbWVTZXQpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGUgPSBuZXcgSFRNTEJvZHlFbGVtZW50SW1wbChkb2N1bWVudCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBzdGFydEJvZHkoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlu
c2VydE5vZGUoZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElEX0hFQUQ6Ci0gICAgICAgICAgICAvLyB3
ZSBjYW4gZ2V0IGhlcmUgb25seSBpZiB0aGUgZWxlbWVudCBpcyBub3QgYWxsb3dlZCBpbiBoZWFk
LgotICAgICAgICAgICAgaWYgKGlkID09IElEX0hUTUwpCisgICAgICAgIH0gZWxzZSBpZiAoaC0+
aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6aGVhZCgpKSkgeworICAgICAgICAgICAgaWYgKG4tPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjpodG1sKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhl
IGJvZHkgc3RhcnRzIGhlcmUuLi4KLSAgICAgICAgICAgICAgICBpZiAoIGhhdmVGcmFtZVNldCAp
IGJyZWFrOwotICAgICAgICAgICAgICAgIHBvcEJsb2NrKElEX0hFQUQpOwotICAgICAgICAgICAg
ICAgIGUgPSBuZXcgSFRNTEJvZHlFbGVtZW50SW1wbChkb2N1bWVudCk7Ci0gICAgICAgICAgICAg
ICAgc3RhcnRCb2R5KCk7Ci0gICAgICAgICAgICAgICAgaW5zZXJ0Tm9kZShlKTsKLSAgICAgICAg
ICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBpZiAoIWhhdmVGcmFtZVNl
dCkgeworICAgICAgICAgICAgICAgICAgICBwb3BCbG9jayhjdXJyZW50VGFnTmFtZSk7CisgICAg
ICAgICAgICAgICAgICAgIGUgPSBuZXcgSFRNTEJvZHlFbGVtZW50SW1wbChkb2N1bWVudCk7Cisg
ICAgICAgICAgICAgICAgICAgIHN0YXJ0Qm9keSgpOworICAgICAgICAgICAgICAgICAgICBpbnNl
cnROb2RlKGUpOworICAgICAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBJRF9CT0RZOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSURfQ0FQVElPTjoK
KyAgICAgICAgfSBlbHNlIGlmIChoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpjYXB0aW9uKCkp
KSB7CiAgICAgICAgICAgICAvLyBJbGxlZ2FsIGNvbnRlbnQgaW4gYSBjYXB0aW9uLiBDbG9zZSB0
aGUgY2FwdGlvbiBhbmQgdHJ5IGFnYWluLgotICAgICAgICAgICAgcG9wQmxvY2soSURfQ0FQVElP
Tik7Ci0gICAgICAgICAgICBzd2l0Y2goIGlkICkgewotICAgICAgICAgICAgY2FzZSBJRF9USEVB
RDoKLSAgICAgICAgICAgIGNhc2UgSURfVEZPT1Q6Ci0gICAgICAgICAgICBjYXNlIElEX1RCT0RZ
OgotICAgICAgICAgICAgY2FzZSBJRF9UUjoKLSAgICAgICAgICAgIGNhc2UgSURfVEQ6Ci0gICAg
ICAgICAgICBjYXNlIElEX1RIOgorICAgICAgICAgICAgcG9wQmxvY2soY3VycmVudFRhZ05hbWUp
OworICAgICAgICAgICAgaWYgKGlzVGFibGVQYXJ0KG4pKQogICAgICAgICAgICAgICAgIHJldHVy
biBpbnNlcnROb2RlKG4sIGZsYXQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgSURfVEFCTEU6Ci0gICAgICAgIGNhc2UgSURfVEhFQUQ6Ci0gICAgICAg
IGNhc2UgSURfVEZPT1Q6Ci0gICAgICAgIGNhc2UgSURfVEJPRFk6Ci0gICAgICAgIGNhc2UgSURf
VFI6Ci0gICAgICAgICAgICBzd2l0Y2goaWQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICBj
YXNlIElEX1RBQkxFOgotICAgICAgICAgICAgICAgIHBvcEJsb2NrKElEX1RBQkxFKTsgLy8gZW5k
IHRoZSB0YWJsZQorICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6
OnRhYmxlKCkpIHx8IGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnRyKCkpIHx8IGlzVGFibGVT
ZWN0aW9uKGgpKSB7CisgICAgICAgICAgICBpZiAobi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRh
YmxlKCkpKSB7CisgICAgICAgICAgICAgICAgcG9wQmxvY2sobG9jYWxOYW1lKTsgLy8gZW5kIHRo
ZSB0YWJsZQogICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOyAgICAgIC8vIC4uLmFuZCBz
dGFydCBhIG5ldyBvbmUKLSAgICAgICAgICAgICAgICBicmVhazsKLQkgICAgY2FzZSBJRF9URVhU
OgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFRleHRJbXBsICp0ID0gc3RhdGljX2Nh
c3Q8VGV4dEltcGwgKj4obik7Ci0gICAgICAgICAgICAgICAgaWYgKHQtPmNvbnRhaW5zT25seVdo
aXRlc3BhY2UoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAg
ICAgICAgIERPTVN0cmluZ0ltcGwgKmkgPSB0LT5zdHJpbmcoKTsKLSAgICAgICAgICAgICAgICB1
bnNpZ25lZCBpbnQgcG9zID0gMDsKLSAgICAgICAgICAgICAgICB3aGlsZShwb3MgPCBpLT5sICYm
ICggKihpLT5zK3BvcykgPT0gUUNoYXIoJyAnKSB8fAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAqKGktPnMrcG9zKSA9PSBRQ2hhcigweGEwKSkpIHBvcysrOwotICAgICAg
ICAgICAgICAgIGlmKHBvcyA9PSBpLT5sKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgTm9kZUltcGwgKm5vZGUgPSBjdXJyZW50OwotICAgICAgICAgICAgICAgIE5vZGVJ
bXBsICpwYXJlbnQgPSBub2RlLT5wYXJlbnROb2RlKCk7Ci0KLSAgICAgICAgICAgICAgICBOb2Rl
SW1wbCAqcGFyZW50cGFyZW50ID0gcGFyZW50LT5wYXJlbnROb2RlKCk7Ci0KLSAgICAgICAgICAg
ICAgICBpZiAobi0+aXNUZXh0Tm9kZSgpIHx8Ci0gICAgICAgICAgICAgICAgICAgICggbm9kZS0+
aWQoKSA9PSBJRF9UUiAmJgotICAgICAgICAgICAgICAgICAgICAgKCBwYXJlbnQtPmlkKCkgPT0g
SURfVEhFQUQgfHwKLSAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQtPmlkKCkgPT0gSURfVEJP
RFkgfHwKLSAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQtPmlkKCkgPT0gSURfVEZPT1QgKSAm
JiBwYXJlbnRwYXJlbnQtPmlkKCkgPT0gSURfVEFCTEUgKSB8fAotICAgICAgICAgICAgICAgICAg
ICAoICFjaGVja0NoaWxkKElEX1RSLCBpZCwgIWRvYygpLT5pbkNvbXBhdE1vZGUoKSkgJiYgKCBu
b2RlLT5pZCgpID09IElEX1RIRUFEIHx8IG5vZGUtPmlkKCkgPT0gSURfVEJPRFkgfHwgbm9kZS0+
aWQoKSA9PSBJRF9URk9PVCApICYmCi0gICAgICAgICAgICAgICAgICAgICBwYXJlbnQtPmlkKCkg
PT0gSURfVEFCTEUgKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG5v
ZGUgPSAobm9kZS0+aWQoKSA9PSBJRF9UQUJMRSkgPyBub2RlIDoKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAoKG5vZGUtPmlkKCkgPT0gSURfVFIpID8gcGFyZW50cGFyZW50IDogcGFyZW50
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGJv
b2wgcG9zc2libHlNb3ZlU3RyYXlDb250ZW50ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBpbnQg
ZXhjZXB0aW9uQ29kZSA9IDA7CisgICAgICAgICAgICAgICAgaWYgKG4tPmlzVGV4dE5vZGUoKSkg
eworICAgICAgICAgICAgICAgICAgICBUZXh0SW1wbCAqdCA9IHN0YXRpY19jYXN0PFRleHRJbXBs
ICo+KG4pOworICAgICAgICAgICAgICAgICAgICBpZiAodC0+Y29udGFpbnNPbmx5V2hpdGVzcGFj
ZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
ICAgICAgICBET01TdHJpbmdJbXBsICppID0gdC0+c3RyaW5nKCk7CisgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGludCBwb3MgPSAwOworICAgICAgICAgICAgICAgICAgICB3aGlsZSAocG9z
IDwgaS0+bCAmJiAoKihpLT5zK3BvcykgPT0gUUNoYXIoJyAnKSB8fAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKihpLT5zK3BvcykgPT0gUUNoYXIoMHhhMCkpKSBw
b3MrKzsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBvcyA9PSBpLT5sKQorICAgICAgICAgICAg
ICAgICAgICAgICAgcG9zc2libHlNb3ZlU3RyYXlDb250ZW50ID0gZmFsc2U7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChwb3NzaWJseU1vdmVTdHJheUNvbnRlbnQpIHsK
KyAgICAgICAgICAgICAgICAgICAgTm9kZUltcGwgKm5vZGUgPSBjdXJyZW50OwogICAgICAgICAg
ICAgICAgICAgICBOb2RlSW1wbCAqcGFyZW50ID0gbm9kZS0+cGFyZW50Tm9kZSgpOwotICAgICAg
ICAgICAgICAgICAgICBpbnQgZXhjZXB0aW9uY29kZSA9IDA7Ci0gICAgICAgICAgICAgICAgICAg
IHBhcmVudC0+aW5zZXJ0QmVmb3JlKCBuLCBub2RlLCBleGNlcHRpb25jb2RlICk7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmICggZXhjZXB0aW9uY29kZSApIHsKLSNpZmRlZiBQQVJTRVJfREVCVUcK
LSAgICAgICAgICAgICAgICAgICAgICAgIGtkRGVidWcoIDYwMzUgKSA8PCAiYWRkaW5nIGNvbnRl
bnQgYmVmb3JlIHRhYmxlIGZhaWxlZCEiIDw8IGVuZGw7Ci0jZW5kaWYKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBOb2RlSW1wbCAqZ3JhbmRwYXJl
bnQgPSBwYXJlbnQtPnBhcmVudE5vZGUoKTsKKworICAgICAgICAgICAgICAgICAgICBpZiAobi0+
aXNUZXh0Tm9kZSgpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAoaC0+aGFzTG9jYWxOYW1l
KEhUTUxOYW1lczo6dHIoKSkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICBpc1RhYmxlU2Vj
dGlvbihwYXJlbnQpICYmIGdyYW5kcGFyZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGFibGUo
KSkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IERURCBDSEVDSyB3aXRo
IG5vIGVsZW1lbnQhCisgICAgICAgICAgICAgICAgICAgICAgICAoIC8qIWNoZWNrQ2hpbGQoSURf
VFIsIGlkLCAhZG9jKCktPmluQ29tcGF0TW9kZSgpKSAmJiovIGlzVGFibGVTZWN0aW9uKG5vZGUp
ICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6dGFibGUoKSkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBub2RlID0gKG5vZGUtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjp0YWJsZSgpKSkgPyBub2RlIDoKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKChub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dHIoKSkpID8gZ3Jh
bmRwYXJlbnQgOiBwYXJlbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgTm9kZUltcGwgKnBh
cmVudCA9IG5vZGUtPnBhcmVudE5vZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVu
dC0+aW5zZXJ0QmVmb3JlKG4sIG5vZGUsIGV4Y2VwdGlvbkNvZGUpOworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCFleGNlcHRpb25Db2RlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKG4tPmlzSFRNTEVsZW1lbnQoKSAmJiB0YWdQcmlvcml0eSA+IDAgJiYgCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICFmbGF0ICYmIHN0YXRpY19jYXN0PEhUTUxFbGVtZW50
SW1wbCo+KG4pLT5lbmRUYWdSZXF1aXJlbWVudCgpICE9IFRhZ1N0YXR1c0ZvcmJpZGRlbikKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHB1c2hCbG9jayhsb2NhbE5hbWUsIHRhZ1ByaW9yaXR5KTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2V0Q3VycmVudChuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW5TdHJheVRhYmxlQ29udGVudCsrOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBibG9ja1N0YWNrLT5zdHJheVRhYmxlQ29udGVudCA9IHRydWU7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChuLT5pc0VsZW1lbnROb2RlKCkgJiYgdGFnUHJpb3JpdHkoaWQp
ICE9IDAgJiYgCi0gICAgICAgICAgICAgICAgICAgICAgICAhZmxhdCAmJiBlbmRUYWdSZXF1aXJl
bWVudChpZCkgIT0gRE9NOjpGT1JCSURERU4pCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHB1c2hCbG9jayhpZCwgdGFnUHJpb3JpdHkoaWQpKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHNldEN1cnJlbnQobik7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpblN0cmF5VGFibGVDb250ZW50Kys7Ci0gICAgICAgICAgICAgICAgICAgICAgICBibG9ja1N0
YWNrLT5zdHJheVRhYmxlQ29udGVudCA9IHRydWU7CisKKyAgICAgICAgICAgICAgICAgICAgaWYg
KCFleGNlcHRpb25Db2RlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudC0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRyKCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGUgPSBuZXcgSFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6dGQoKSwgZG9jdW1l
bnQpOworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY3VycmVudC0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OnRhYmxlKCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUgPSBu
ZXcgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsKEhUTUxOYW1lczo6dGJvZHkoKSwgZG9jdW1l
bnQsIHRydWUpOyAvLyBpbXBsaWNpdCAKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlID0gbmV3IEhUTUxUYWJsZVJvd0VsZW1lbnRJbXBs
KGRvY3VtZW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAg
ICAgICAgaW5zZXJ0Tm9kZShlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0
cnVlOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICggY3VycmVudC0+
aWQoKSA9PSBJRF9UUiApCi0gICAgICAgICAgICAgICAgICAgIGUgPSBuZXcgSFRNTFRhYmxlQ2Vs
bEVsZW1lbnRJbXBsKGRvY3VtZW50LCBJRF9URCk7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAo
IGN1cnJlbnQtPmlkKCkgPT0gSURfVEFCTEUgKQotICAgICAgICAgICAgICAgICAgICBlID0gbmV3
IEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbCggZG9jdW1lbnQsIElEX1RCT0RZLCB0cnVlIC8q
IGltcGxpY2l0ICovICk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAg
ICBlID0gbmV3IEhUTUxUYWJsZVJvd0VsZW1lbnRJbXBsKCBkb2N1bWVudCApOwotICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgIGluc2VydE5vZGUoZSk7Ci0gICAgICAgICAgICAgICAg
aGFuZGxlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9IC8v
IGVuZCBkZWZhdWx0Ci0gICAgICAgICAgICB9IC8vIGVuZCBzd2l0Y2gKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIElEX09CSkVDVDoKLSAgICAgICAgICAgIGRpc2NhcmRfdW50aWwg
PSBJRF9PQkpFQ1QgKyBJRF9DTE9TRV9UQUc7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZSBpZiAoaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b2JqZWN0KCkpKSB7Cisg
ICAgICAgICAgICBzZXRTa2lwTW9kZShIVE1MTmFtZXM6Om9iamVjdCgpKTsKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgY2FzZSBJRF9VTDoKLSAgICAgICAgY2FzZSBJRF9PTDoK
LSAgICAgICAgY2FzZSBJRF9ESVI6Ci0gICAgICAgIGNhc2UgSURfTUVOVToKKyAgICAgICAgfSBl
bHNlIGlmIChoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp1bCgpKSB8fCBoLT5oYXNMb2NhbE5h
bWUoSFRNTE5hbWVzOjpvbCgpKSB8fAorICAgICAgICAgICAgICAgICBoLT5oYXNMb2NhbE5hbWUo
SFRNTE5hbWVzOjpkaXIoKSkgfHwgaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6bWVudSgpKSkg
ewogICAgICAgICAgICAgZSA9IG5ldyBIVE1MRGl2RWxlbWVudEltcGwoZG9jdW1lbnQpOwogICAg
ICAgICAgICAgaW5zZXJ0Tm9kZShlKTsKICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIElEX0RMOgotICAgICAgICAgICAgICAg
IHBvcEJsb2NrKElEX0RMKTsKLSAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgSURfRFQ6Ci0gICAgICAgICAgICAg
ICAgcG9wQmxvY2soSURfRFQpOwotICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElEX1NFTEVDVDoKLSAgICAgICAgICAg
IGlmKCBuLT5pc0lubGluZSgpICkKKyAgICAgICAgfSBlbHNlIGlmIChoLT5oYXNMb2NhbE5hbWUo
SFRNTE5hbWVzOjpkbCgpKSB8fCBoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpkdCgpKSkgewor
ICAgICAgICAgICAgcG9wQmxvY2soY3VycmVudFRhZ05hbWUpOworICAgICAgICAgICAgaGFuZGxl
ZCA9IHRydWU7CisgICAgICAgIH0gZWxzZSBpZiAoaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6
c2VsZWN0KCkpKSB7CisgICAgICAgICAgICBpZiAoaXNJbmxpbmUobikpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSURfUDoK
LSAgICAgICAgY2FzZSBJRF9IMToKLSAgICAgICAgY2FzZSBJRF9IMjoKLSAgICAgICAgY2FzZSBJ
RF9IMzoKLSAgICAgICAgY2FzZSBJRF9INDoKLSAgICAgICAgY2FzZSBJRF9INToKLSAgICAgICAg
Y2FzZSBJRF9INjoKLSAgICAgICAgICAgIGlmKCFuLT5pc0lubGluZSgpKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIHBvcEJsb2NrKGN1cnJlbnQtPmlkKCkpOworICAgICAgICB9IGVs
c2UgaWYgKGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnAoKSkgfHwgaXNIZWFkZXJUYWcoY3Vy
cmVudFRhZ05hbWUpKSB7CisgICAgICAgICAgICBpZiAoaXNJbmxpbmUobikpIHsKKyAgICAgICAg
ICAgICAgICBwb3BCbG9jayhjdXJyZW50VGFnTmFtZSk7CiAgICAgICAgICAgICAgICAgaGFuZGxl
ZCA9IHRydWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBJRF9PUFRJT046Ci0gICAgICAgIGNhc2UgSURfT1BUR1JPVVA6Ci0gICAgICAgICAgICBpZiAo
aWQgPT0gSURfT1BUR1JPVVApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcG9wQmxv
Y2soY3VycmVudC0+aWQoKSk7CisgICAgICAgIH0gZWxzZSBpZiAoaC0+aGFzTG9jYWxOYW1lKEhU
TUxOYW1lczo6b3B0aW9uKCkpIHx8IGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9wdGdyb3Vw
KCkpKSB7CisgICAgICAgICAgICBpZiAobG9jYWxOYW1lID09IEhUTUxOYW1lczo6b3B0Z3JvdXAo
KSkgeworICAgICAgICAgICAgICAgIHBvcEJsb2NrKGN1cnJlbnRUYWdOYW1lKTsKICAgICAgICAg
ICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2Ug
aWYoaWQgPT0gSURfU0VMRUNUKQotICAgICAgICAgICAgeworICAgICAgICAgICAgZWxzZSBpZiAo
bG9jYWxOYW1lID09IEhUTUxOYW1lczo6c2VsZWN0KCkpIHsKICAgICAgICAgICAgICAgICAvLyBJ
RSB0cmVhdHMgYSBuZXN0ZWQgc2VsZWN0IGFzIDwvc2VsZWN0Pi4gTGV0J3MgZG8gdGhlIHNhbWUK
LSAgICAgICAgICAgICAgICBwb3BCbG9jayggSURfU0VMRUNUICk7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgcG9wQmxvY2sobG9jYWxOYW1lKTsKICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgLy8gaGVhZCBlbGVtZW50cyBpbiB0
aGUgYm9keSBzaG91bGQgYmUgaWdub3JlZC4KLSAgICAgICAgY2FzZSBJRF9BRERSRVNTOgotICAg
ICAgICAgICAgcG9wQmxvY2soSURfQUREUkVTUyk7CisgICAgICAgIH0gZWxzZSBpZiAoaC0+aGFz
TG9jYWxOYW1lKEhUTUxOYW1lczo6YWRkcmVzcygpKSkgeworICAgICAgICAgICAgcG9wQmxvY2so
Y3VycmVudFRhZ05hbWUpOwogICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBJRF9DT0xHUk9VUDoKLSAgICAgICAgICAgIGlmIChpZCAh
PSBJRF9URVhUKSB7Ci0gICAgICAgICAgICAgICAgcG9wQmxvY2soSURfQ09MR1JPVVApOworICAg
ICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmNvbGdyb3VwKCkpKSB7
CisgICAgICAgICAgICBpZiAobG9jYWxOYW1lICE9IHRleHRBdG9tKSB7CisgICAgICAgICAgICAg
ICAgcG9wQmxvY2soY3VycmVudFRhZ05hbWUpOwogICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0
cnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSURf
Rk9OVDoKLSAgICAgICAgICAgIHBvcEJsb2NrKElEX0ZPTlQpOworICAgICAgICB9IGVsc2UgaWYg
KGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmZvbnQoKSkpIHsKKyAgICAgICAgICAgIHBvcEJs
b2NrKGN1cnJlbnRUYWdOYW1lKTsKICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBpZihjdXJyZW50LT5p
c0RvY3VtZW50Tm9kZSgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmKGN1cnJl
bnQtPmZpcnN0Q2hpbGQoKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGUgPSBuZXcgSFRN
TEh0bWxFbGVtZW50SW1wbChkb2N1bWVudCk7Ci0gICAgICAgICAgICAgICAgICAgIGluc2VydE5v
ZGUoZSk7Ci0gICAgICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYoY3VycmVudC0+aXNJbmxp
bmUoKSkKLSAgICAgICAgICAgIHsKKyAgICAgICAgfSBlbHNlIGlmICghaC0+aGFzTG9jYWxOYW1l
KEhUTUxOYW1lczo6Ym9keSgpKSkgeworICAgICAgICAgICAgaWYgKGlzSW5saW5lKGN1cnJlbnQp
KSB7CiAgICAgICAgICAgICAgICAgcG9wSW5saW5lQmxvY2tzKCk7CiAgICAgICAgICAgICAgICAg
aGFuZGxlZCA9IHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLQotICAgICAgICAvLyBp
ZiB3ZSBjb3VsZG4ndCBoYW5kbGUgdGhlIGVycm9yLCBqdXN0IHJldGhyb3cgdGhlIGV4Y2VwdGlv
bi4uLgotICAgICAgICBpZighaGFuZGxlZCkKLSAgICAgICAgewotICAgICAgICAgICAgLy9rZERl
YnVnKCA2MDM1ICkgPDwgIkV4Y2VwdGlvbiBoYW5kbGVyIGZhaWxlZCBpbiBIVE1MUEFyc2VyOjpp
bnNlcnROb2RlKCkiIDw8IGVuZGw7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
ICAgIGVsc2UgaWYgKGN1cnJlbnQtPmlzRG9jdW1lbnROb2RlKCkpIHsKKyAgICAgICAgaWYgKGN1
cnJlbnQtPmZpcnN0Q2hpbGQoKSA9PSAwKSB7CisgICAgICAgICAgICBlID0gbmV3IEhUTUxIdG1s
RWxlbWVudEltcGwoZG9jdW1lbnQpOworICAgICAgICAgICAgaW5zZXJ0Tm9kZShlKTsKKyAgICAg
ICAgICAgIGhhbmRsZWQgPSB0cnVlOwogICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGluc2Vy
dE5vZGUobik7CiAgICAgfQorCisgICAgLy8gMy4gSWYgd2UgY291bGRuJ3QgaGFuZGxlIHRoZSBl
cnJvciwganVzdCByZXR1cm4gZmFsc2UgYW5kIGF0dGVtcHQgdG8gZXJyb3ItY29ycmVjdCBhZ2Fp
bi4KKyAgICBpZiAoIWhhbmRsZWQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4g
aW5zZXJ0Tm9kZShuKTsKIH0KIAotTm9kZUltcGwgKktIVE1MUGFyc2VyOjpnZXRFbGVtZW50KFRv
a2VuKiB0KQorTm9kZUltcGwgKkhUTUxQYXJzZXI6OmdldE5vZGUoVG9rZW4qIHQpCiB7Ci0gICAg
c3dpdGNoICh0LT5pZCkKLSAgICB7Ci0gICAgY2FzZSBJRF9IRUFEOgotICAgICAgICBpZiAoIWhl
YWQgJiYgY3VycmVudC0+aWQoKSA9PSBJRF9IVE1MKSB7Ci0gICAgICAgICAgICBoZWFkID0gbmV3
IEhUTUxIZWFkRWxlbWVudEltcGwoZG9jdW1lbnQpOwotICAgICAgICAgICAgcmV0dXJuIGhlYWQ7
Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgY2FzZSBJRF9CT0RZOgorICAgIC8v
IEhhbmRsZSBub24tZWxlbWVudHMgZmlyc3QuCisgICAgaWYgKHQtPnRhZ05hbWUgPT0gdGV4dEF0
b20pCisgICAgICAgIHJldHVybiBuZXcgVGV4dEltcGwoZG9jdW1lbnQsIHQtPnRleHQpOworICAg
IGlmICh0LT50YWdOYW1lID09IGNvbW1lbnRBdG9tKSB7CisgICAgICAgIGlmICghaW5jbHVkZXND
b21tZW50c0luRE9NKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBuZXcg
Q29tbWVudEltcGwoZG9jdW1lbnQsIHQtPnRleHQpOworICAgIH0KKworICAgIC8vIE5vdyBoYW5k
bGUgZWxlbWVudHMuCisgICAgaWYgKHQtPnRhZ05hbWUgPT0gSFRNTE5hbWVzOjpoZWFkKCkpIHsK
KyAgICAgICAgaWYgKGhlYWQgfHwgY3VycmVudC0+bG9jYWxOYW1lKCkgIT0gSFRNTE5hbWVzOjpo
dG1sKCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9IGVsc2UgaWYgKHQtPnRhZ05hbWUg
PT0gSFRNTE5hbWVzOjpib2R5KCkpIHsKICAgICAgICAgLy8gYm9keSBubyBsb25nZXIgYWxsb3dl
ZCBpZiB3ZSBoYXZlIGEgZnJhbWVzZXQKICAgICAgICAgaWYgKGhhdmVGcmFtZVNldCkKICAgICAg
ICAgICAgIHJldHVybiAwOwotICAgICAgICBwb3BCbG9jayhJRF9IRUFEKTsKKyAgICAgICAgcG9w
QmxvY2soSFRNTE5hbWVzOjpoZWFkKCkpOwogICAgICAgICBzdGFydEJvZHkoKTsKLSAgICAgICAg
cmV0dXJuIG5ldyBIVE1MQm9keUVsZW1lbnRJbXBsKGRvY3VtZW50KTsKKyAgICB9CiAKIC8vIGZy
YW1lcwotICAgIGNhc2UgSURfRlJBTUVTRVQ6Ci0gICAgICAgIHBvcEJsb2NrKElEX0hFQUQpOwor
ICAgIGVsc2UgaWYgKHQtPnRhZ05hbWUgPT0gSFRNTE5hbWVzOjpmcmFtZXNldCgpKSB7CisgICAg
ICAgIHBvcEJsb2NrKEhUTUxOYW1lczo6aGVhZCgpKTsKICAgICAgICAgaWYgKGluQm9keSAmJiAh
aGF2ZUZyYW1lU2V0ICYmICFoYXZlQ29udGVudCkgewotICAgICAgICAgICAgcG9wQmxvY2soSURf
Qk9EWSk7CisgICAgICAgICAgICBwb3BCbG9jayhIVE1MTmFtZXM6OmJvZHkoKSk7CiAgICAgICAg
ICAgICAvLyAjIyMgYWN0dWFsbHkgZm9yIElFIGRvY3VtZW50LmJvZHkgcmV0dXJucyB0aGUgbm93
IGhpZGRlbiAiYm9keSIgZWxlbWVudAogICAgICAgICAgICAgLy8gd2UgY2FuJ3QgaW1wbGVtZW50
IHRoYXQgYmVoYXZpb3VyIG5vdyBiZWNhdXNlIGl0IGNvdWxkIGNhdXNlIHRvbyBtYW55CiAgICAg
ICAgICAgICAvLyByZWdyZXNzaW9ucyBhbmQgdGhlIGhlYWRhY2hlcyBhcmUgbm90IHdvcnRoIHRo
ZSB3b3JrIGFzIGxvbmcgYXMgdGhlcmUgaXMKQEAgLTgxMSwzMiArNjQ1LDIxIEBAIE5vZGVJbXBs
ICpLSFRNTFBhcnNlcjo6Z2V0RWxlbWVudChUb2tlbioKICAgICAgICAgICAgICAgICBkb2MoKS0+
Ym9keSgpLT5zZXRBdHRyaWJ1dGUoQVRUUl9TVFlMRSwgImRpc3BsYXk6bm9uZSIpOwogICAgICAg
ICAgICAgaW5Cb2R5ID0gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKChoYXZlQ29udGVu
dCB8fCBoYXZlRnJhbWVTZXQpICYmIGN1cnJlbnQtPmlkKCkgPT0gSURfSFRNTCkKKyAgICAgICAg
aWYgKChoYXZlQ29udGVudCB8fCBoYXZlRnJhbWVTZXQpICYmIGN1cnJlbnQtPmxvY2FsTmFtZSgp
ID09IEhUTUxOYW1lczo6aHRtbCgpKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIGhh
dmVGcmFtZVNldCA9IHRydWU7CiAgICAgICAgIHN0YXJ0Qm9keSgpOwotICAgICAgICByZXR1cm4g
bmV3IEhUTUxGcmFtZVNldEVsZW1lbnRJbXBsKGRvY3VtZW50KTsKLQotICAgIC8vIGEgYml0IG9m
IGEgc3BlY2lhbCBjYXNlLCBzaW5jZSB0aGUgZnJhbWUgaXMgaW5saW5lZAotICAgIGNhc2UgSURf
SUZSQU1FOgotICAgICAgICBkaXNjYXJkX3VudGlsID0gSURfSUZSQU1FICsgSURfQ0xPU0VfVEFH
OwotICAgICAgICBicmVhazsKLQorICAgIH0gZWxzZSBpZiAodC0+dGFnTmFtZSA9PSBIVE1MTmFt
ZXM6OmlmcmFtZSgpKQorICAgICAgICAvLyBhIGJpdCBvZiBhIHNwZWNpYWwgY2FzZSwgc2luY2Ug
dGhlIGZyYW1lIGlzIGlubGluZWQKKyAgICAgICAgc2V0U2tpcE1vZGUoSFRNTE5hbWVzOjppZnJh
bWUoKSk7CisgICAgICAgIAogLy8gZm9ybSBlbGVtZW50cwotICAgIGNhc2UgSURfRk9STToKKyAg
ICBlbHNlIGlmICh0LT50YWdOYW1lID09IEhUTUxOYW1lczo6Zm9ybSgpKSB7CiAgICAgICAgIC8v
IE9ubHkgY3JlYXRlIGEgbmV3IGZvcm0gaWYgd2UncmUgbm90IGFscmVhZHkgaW5zaWRlIG9uZS4K
ICAgICAgICAgLy8gVGhpcyBpcyBjb25zaXN0ZW50IHdpdGggb3RoZXIgYnJvd3NlcnMnIGJlaGF2
aW9yLgogICAgICAgICBpZiAoZm9ybSkKICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBm
b3JtID0gbmV3IEhUTUxGb3JtRWxlbWVudEltcGwoZG9jdW1lbnQpOwotICAgICAgICByZXR1cm4g
Zm9ybTsKLSAgICBjYXNlIElEX0JVVFRPTjoKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MQnV0dG9u
RWxlbWVudEltcGwoZG9jdW1lbnQsIGZvcm0pOwotICAgIGNhc2UgSURfRklFTERTRVQ6Ci0gICAg
ICAgIHJldHVybiBuZXcgSFRNTEZpZWxkU2V0RWxlbWVudEltcGwoZG9jdW1lbnQsIGZvcm0pOwot
ICAgIGNhc2UgSURfSU5QVVQ6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTElucHV0RWxlbWVudElt
cGwoZG9jdW1lbnQsIGZvcm0pOwotICAgIGNhc2UgSURfSVNJTkRFWDogeworICAgIH0gZWxzZSBp
ZiAodC0+dGFnTmFtZSA9PSBIVE1MTmFtZXM6OmlzaW5kZXgoKSkgewogICAgICAgICBOb2RlSW1w
bCAqbiA9IGhhbmRsZUlzaW5kZXgodCk7CiAgICAgICAgIGlmICghaW5Cb2R5KSB7CiAgICAgICAg
ICAgICBpZiAoaXNpbmRleCkKQEAgLTg0OCwyNjIgKzY3MSwxNzkgQEAgTm9kZUltcGwgKktIVE1M
UGFyc2VyOjpnZXRFbGVtZW50KFRva2VuKgogICAgICAgICB0LT5mbGF0ID0gdHJ1ZTsKICAgICAg
ICAgcmV0dXJuIG47CiAgICAgfQotICAgIGNhc2UgSURfS0VZR0VOOgotICAgICAgICByZXR1cm4g
bmV3IEhUTUxLZXlnZW5FbGVtZW50SW1wbChkb2N1bWVudCwgZm9ybSk7Ci0gICAgY2FzZSBJRF9M
RUdFTkQ6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTExlZ2VuZEVsZW1lbnRJbXBsKGRvY3VtZW50
LCBmb3JtKTsKLSAgICBjYXNlIElEX09QVEdST1VQOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxP
cHRHcm91cEVsZW1lbnRJbXBsKGRvY3VtZW50LCBmb3JtKTsKLSAgICBjYXNlIElEX09QVElPTjoK
LSAgICAgICAgcmV0dXJuIG5ldyBIVE1MT3B0aW9uRWxlbWVudEltcGwoZG9jdW1lbnQsIGZvcm0p
OwotICAgIGNhc2UgSURfU0VMRUNUOgorICAgIGVsc2UgaWYgKHQtPnRhZ05hbWUgPT0gSFRNTE5h
bWVzOjpzZWxlY3QoKSkKICAgICAgICAgaW5TZWxlY3QgPSB0cnVlOwotICAgICAgICByZXR1cm4g
bmV3IEhUTUxTZWxlY3RFbGVtZW50SW1wbChkb2N1bWVudCwgZm9ybSk7Ci0gICAgY2FzZSBJRF9U
RVhUQVJFQToKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MVGV4dEFyZWFFbGVtZW50SW1wbChkb2N1
bWVudCwgZm9ybSk7CiAKIC8vIGxpc3RzCi0gICAgY2FzZSBJRF9ERDoKLSAgICAgICAgcG9wQmxv
Y2soSURfRFQpOwotICAgICAgICBwb3BCbG9jayhJRF9ERCk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgSURfRFQ6Ci0gICAgICAgIHBvcEJsb2NrKElEX0REKTsKLSAgICAgICAgcG9wQmxvY2so
SURfRFQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIElEX0xJOgotICAgICAgICBwb3BCbG9j
ayhJRF9MSSk7Ci0gICAgICAgIGJyZWFrOwotCi0vLyBhbmNob3IKLSAgICBjYXNlIElEX0E6Cisg
ICAgZWxzZSBpZiAodC0+dGFnTmFtZSA9PSBIVE1MTmFtZXM6OmRkKCkpIHsKKyAgICAgICAgcG9w
QmxvY2soSFRNTE5hbWVzOjpkdCgpKTsKKyAgICAgICAgcG9wQmxvY2soSFRNTE5hbWVzOjpkZCgp
KTsKKyAgICB9CisgICAgZWxzZSBpZiAodC0+dGFnTmFtZSA9PSBIVE1MTmFtZXM6OmR0KCkpIHsK
KyAgICAgICAgcG9wQmxvY2soSFRNTE5hbWVzOjpkZCgpKTsKKyAgICAgICAgcG9wQmxvY2soSFRN
TE5hbWVzOjpkdCgpKTsKKyAgICB9CisgICAgZWxzZSBpZiAodC0+dGFnTmFtZSA9PSBIVE1MTmFt
ZXM6OmxpKCkpCisgICAgICAgIHBvcEJsb2NrKHQtPnRhZ05hbWUpOworICAgIGVsc2UgaWYgKHQt
PnRhZ05hbWUgPT0gSFRNTE5hbWVzOjphKCkpIC8vIGFuY2hvcgogICAgICAgICAvLyBOZXZlciBh
bGxvdyBuZXN0ZWQgPGE+cy4KLSAgICAgICAgcG9wQmxvY2soSURfQSk7Ci0gICAgICAgIGJyZWFr
OwotCi0vLyBpbWFnZXMKLSAgICBjYXNlIElEX0lNRzoKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1M
SW1hZ2VFbGVtZW50SW1wbChkb2N1bWVudCwgZm9ybSk7Ci0gICAgY2FzZSBJRF9NQVA6Ci0gICAg
ICAgIG1hcCA9IG5ldyBIVE1MTWFwRWxlbWVudEltcGwoZG9jdW1lbnQpOwotICAgICAgICByZXR1
cm4gbWFwOworICAgICAgICBwb3BCbG9jayh0LT50YWdOYW1lKTsKIAogLy8gdGFibGVzCi0gICAg
Y2FzZSBJRF9UUjoKLSAgICAgICAgcG9wQmxvY2soSURfVFIpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIElEX1REOgotICAgIGNhc2UgSURfVEg6Ci0gICAgICAgIHBvcEJsb2NrKElEX1RIKTsK
LSAgICAgICAgcG9wQmxvY2soSURfVEQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIElEX1RC
T0RZOgotICAgIGNhc2UgSURfVEhFQUQ6Ci0gICAgY2FzZSBJRF9URk9PVDoKLSAgICAgICAgcG9w
QmxvY2soSURfVEhFQUQpOwotICAgICAgICBwb3BCbG9jayhJRF9UQk9EWSk7Ci0gICAgICAgIHBv
cEJsb2NrKElEX1RGT09UKTsKLSAgICAgICAgYnJlYWs7CisgICAgZWxzZSBpZiAodC0+dGFnTmFt
ZSA9PSBIVE1MTmFtZXM6OnRyKCkpCisgICAgICAgIHBvcEJsb2NrKHQtPnRhZ05hbWUpOworICAg
IGVsc2UgaWYgKHQtPnRhZ05hbWUgPT0gSFRNTE5hbWVzOjp0ZCgpIHx8IHQtPnRhZ05hbWUgPT0g
SFRNTE5hbWVzOjp0aCgpKSB7CisgICAgICAgIHBvcEJsb2NrKEhUTUxOYW1lczo6dGgoKSk7Cisg
ICAgICAgIHBvcEJsb2NrKEhUTUxOYW1lczo6dGQoKSk7CisgICAgfSBlbHNlIGlmICh0LT50YWdO
YW1lID09IEhUTUxOYW1lczo6dGJvZHkoKSB8fCB0LT50YWdOYW1lID09IEhUTUxOYW1lczo6dGhl
YWQoKSB8fCB0LT50YWdOYW1lID09IEhUTUxOYW1lczo6dGZvb3QoKSkgeworICAgICAgICBwb3BC
bG9jayhIVE1MTmFtZXM6OnRoZWFkKCkpOworICAgICAgICBwb3BCbG9jayhIVE1MTmFtZXM6OnRi
b2R5KCkpOworICAgICAgICBwb3BCbG9jayhIVE1MTmFtZXM6OnRmb290KCkpOworICAgIH0KIAog
Ly8gZWxlbWVudHMgd2l0aCBubyBzcGVjaWFsIHJlcHJlc2VudGF0aW9uIGluIHRoZSBET00KLSAg
ICBjYXNlIElEX1RUOgotICAgIGNhc2UgSURfVToKLSAgICBjYXNlIElEX0I6Ci0gICAgY2FzZSBJ
RF9JOgotICAgIGNhc2UgSURfUzoKLSAgICBjYXNlIElEX1NUUklLRToKLSAgICBjYXNlIElEX0JJ
RzoKLSAgICBjYXNlIElEX1NNQUxMOgotICAgICAgICBpZiAoIWFsbG93TmVzdGVkUmVkdW5kYW50
VGFnKHQtPmlkKSkKKyAgICBlbHNlIGlmICh0LT50YWdOYW1lID09IEhUTUxOYW1lczo6dHQoKSB8
fCB0LT50YWdOYW1lID09IEhUTUxOYW1lczo6dSgpIHx8IHQtPnRhZ05hbWUgPT0gSFRNTE5hbWVz
OjpiKCkgfHwKKyAgICAgICAgICAgICB0LT50YWdOYW1lID09IEhUTUxOYW1lczo6aSgpIHx8IHQt
PnRhZ05hbWUgPT0gSFRNTE5hbWVzOjpzKCkgfHwgdC0+dGFnTmFtZSA9PSBIVE1MTmFtZXM6OnN0
cmlrZSgpIHx8CisgICAgICAgICAgICAgdC0+dGFnTmFtZSA9PSBIVE1MTmFtZXM6OmJpZygpIHx8
IHQtPnRhZ05hbWUgPT0gSFRNTE5hbWVzOjpzbWFsbCgpKSB7CisgICAgICAgIGlmICghYWxsb3dO
ZXN0ZWRSZWR1bmRhbnRUYWcodC0+dGFnTmFtZSkpCiAgICAgICAgICAgICByZXR1cm4gMDsKLSAg
ICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIElEX05PQlI6Ci0gICAgY2FzZSBJRF9XQlI6Ci0gICAg
ICAgIHBvcEJsb2NrKHQtPmlkKTsgLy8gRG9uJ3QgYWxsb3cgbmVzdGVkIDxub2JyPiBvciA8d2Jy
PgotICAgICAgICBicmVhazsKKyAgICB9CisgICAgZWxzZSBpZiAodC0+dGFnTmFtZSA9PSBIVE1M
TmFtZXM6Om5vYnIoKSB8fCB0LT50YWdOYW1lID09IEhUTUxOYW1lczo6d2JyKCkpCisgICAgICAg
IHBvcEJsb2NrKHQtPnRhZ05hbWUpOyAvLyBEb24ndCBhbGxvdyBuZXN0ZWQgPG5vYnI+IG9yIDx3
YnI+CiAKIC8vIHRoZXNlIGFyZSBzcGVjaWFsLCBhbmQgbm9ybWFsbHkgbm90IHJlbmRlcmVkCi0g
ICAgY2FzZSBJRF9OT0VNQkVEOgotICAgICAgICBkaXNjYXJkX3VudGlsID0gSURfTk9FTUJFRCAr
IElEX0NMT1NFX1RBRzsKKyAgICBlbHNlIGlmICh0LT50YWdOYW1lID09IEhUTUxOYW1lczo6bm9l
bWJlZCgpKSB7CisgICAgICAgIHNldFNraXBNb2RlKEhUTUxOYW1lczo6bm9lbWJlZCgpKTsKICAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgY2FzZSBJRF9OT0ZSQU1FUzoKLSAgICAgICAgZGlzY2FyZF91
bnRpbCA9IElEX05PRlJBTUVTICsgSURfQ0xPU0VfVEFHOworICAgIH0KKyAgICBlbHNlIGlmICh0
LT50YWdOYW1lID09IEhUTUxOYW1lczo6bm9mcmFtZXMoKSkgeworICAgICAgICBzZXRTa2lwTW9k
ZShIVE1MTmFtZXM6Om5vZnJhbWVzKCkpOwogICAgICAgICByZXR1cm4gMDsKLSAgICBjYXNlIElE
X05PU0NSSVBUOgorICAgIH0KKyAgICBlbHNlIGlmICh0LT50YWdOYW1lID09IEhUTUxOYW1lczo6
bm9zY3JpcHQoKSkgewogICAgICAgICBpZiAoSFRNTFdpZGdldCAmJiBIVE1MV2lkZ2V0LT5wYXJ0
KCktPmpTY3JpcHRFbmFibGVkKCkpCi0gICAgICAgICAgICBkaXNjYXJkX3VudGlsID0gSURfTk9T
Q1JJUFQgKyBJRF9DTE9TRV9UQUc7Ci0gICAgICAgIHJldHVybiAwOwotICAgIGNhc2UgSURfTk9M
QVlFUjoKLSAgICAgICAgLy9kaXNjYXJkX3VudGlsID0gSURfTk9MQVlFUiArIElEX0NMT1NFX1RB
RzsKKyAgICAgICAgICAgIHNldFNraXBNb2RlKEhUTUxOYW1lczo6bm9zY3JpcHQoKSk7CiAgICAg
ICAgIHJldHVybiAwOwotICAgIGNhc2UgSURfVEVYVDoKLSAgICAgICAgcmV0dXJuIG5ldyBUZXh0
SW1wbChkb2N1bWVudCwgdC0+dGV4dCk7Ci0gICAgY2FzZSBJRF9DT01NRU5UOgotICAgICAgICBp
ZiAoIWluY2x1ZGVzQ29tbWVudHNJbkRPTSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAg
ICBicmVhazsKLQotICAgIGNhc2UgSURfU0NSSVBUOgotICAgICAgICB7Ci0gICAgICAgICAgICBI
VE1MU2NyaXB0RWxlbWVudEltcGwgKnNjcmlwdEVsZW1lbnQgPSBuZXcgSFRNTFNjcmlwdEVsZW1l
bnRJbXBsKGRvY3VtZW50KTsKLSAgICAgICAgICAgIHNjcmlwdEVsZW1lbnQtPnNldENyZWF0ZWRC
eVBhcnNlcih0cnVlKTsKLSAgICAgICAgICAgIHJldHVybiBzY3JpcHRFbGVtZW50OwotICAgICAg
ICB9CiAgICAgfQotCi0gICAgcmV0dXJuIGRvY3VtZW50LT5kb2N1bWVudCgpLT5jcmVhdGVIVE1M
RWxlbWVudCh0LT5pZCk7CisgICAgZWxzZSBpZiAodC0+dGFnTmFtZSA9PSBIVE1MTmFtZXM6Om5v
bGF5ZXIoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgcmV0dXJuIEhUTUxFbGVtZW50
RmFjdG9yeTo6Y3JlYXRlSFRNTEVsZW1lbnQodC0+dGFnTmFtZSwgZG9jKCksIGZvcm0pOwogfQog
CiAjZGVmaW5lIE1BWF9SRURVTkRBTlQgMjAKIAotYm9vbCBLSFRNTFBhcnNlcjo6YWxsb3dOZXN0
ZWRSZWR1bmRhbnRUYWcoaW50IF9pZCkKK2Jvb2wgSFRNTFBhcnNlcjo6YWxsb3dOZXN0ZWRSZWR1
bmRhbnRUYWcoY29uc3QgQXRvbWljU3RyaW5nJiBfdGFnTmFtZSkKIHsKICAgICAvLyB3d3cubGlj
ZW8uZWR1Lm14IGlzIGFuIGV4YW1wbGUgb2YgYSBzaXRlIHRoYXQgYWNoaWV2ZXMgYSBsZXZlbCBv
ZiBuZXN0aW5nIG9mCiAgICAgLy8gYWJvdXQgMTUwMCB0YWdzLCBhbGwgZnJvbSBhIGJ1bmNoIG9m
IDxiPnMuICBXZSB3aWxsIG9ubHkgYWxsb3cgYXQgbW9zdCAyMAogICAgIC8vIG5lc3RlZCB0YWdz
IG9mIHRoZSBzYW1lIHR5cGUgYmVmb3JlIGp1c3QgaWdub3JpbmcgdGhlbSBhbGwgdG9nZXRoZXIu
CiAgICAgaW50IGkgPSAwOwogICAgIGZvciAoSFRNTFN0YWNrRWxlbSogY3VyciA9IGJsb2NrU3Rh
Y2s7Ci0gICAgICAgICBpIDwgTUFYX1JFRFVOREFOVCAmJiBjdXJyICYmIGN1cnItPmlkID09IF9p
ZDsKKyAgICAgICAgIGkgPCBNQVhfUkVEVU5EQU5UICYmIGN1cnIgJiYgY3Vyci0+dGFnTmFtZSA9
PSBfdGFnTmFtZTsKICAgICAgICAgIGN1cnIgPSBjdXJyLT5uZXh0LCBpKyspOwogICAgIHJldHVy
biBpICE9IE1BWF9SRURVTkRBTlQ7CiB9CiAKLXZvaWQgS0hUTUxQYXJzZXI6OnByb2Nlc3NDbG9z
ZVRhZyhUb2tlbiAqdCkKK3ZvaWQgSFRNTFBhcnNlcjo6cHJvY2Vzc0Nsb3NlVGFnKFRva2VuICp0
KQogewotICAgIC8vIHN1cHBvcnQgZm9yIHJlYWxseSBicm9rZW4gaHRtbC4gQ2FuJ3QgYmVsaWV2
ZSBJJ20gc3VwcG9ydGluZyBzdWNoIGNyYXAgKGxhcnMpCi0gICAgc3dpdGNoKHQtPmlkKQotICAg
IHsKLSAgICBjYXNlIElEX0hUTUwrSURfQ0xPU0VfVEFHOgotICAgIGNhc2UgSURfQk9EWStJRF9D
TE9TRV9UQUc6Ci0gICAgICAgIC8vIHdlIG5ldmVyIGNsb3NlIHRoZSBib2R5IHRhZywgc2luY2Ug
c29tZSBzdHVwaWQgd2ViIHBhZ2VzIGNsb3NlIGl0IGJlZm9yZSB0aGUgYWN0dWFsIGVuZCBvZiB0
aGUgZG9jLgotICAgICAgICAvLyBsZXQncyByZWx5IG9uIHRoZSBlbmQoKSBjYWxsIHRvIGNsb3Nl
IHRoaW5ncy4KKyAgICAvLyBTdXBwb3J0IGZvciByZWFsbHkgYnJva2VuIGh0bWwuCisgICAgLy8g
d2UgbmV2ZXIgY2xvc2UgdGhlIGJvZHkgdGFnLCBzaW5jZSBzb21lIHN0dXBpZCB3ZWIgcGFnZXMg
Y2xvc2UgaXQgYmVmb3JlIHRoZSBhY3R1YWwgZW5kIG9mIHRoZSBkb2MuCisgICAgLy8gbGV0J3Mg
cmVseSBvbiB0aGUgZW5kKCkgY2FsbCB0byBjbG9zZSB0aGluZ3MuCisgICAgaWYgKHQtPnRhZ05h
bWUgPT0gSFRNTE5hbWVzOjpodG1sKCkgfHwgdC0+dGFnTmFtZSA9PSBIVE1MTmFtZXM6OmJvZHko
KSkKICAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSURfRk9STStJRF9DTE9TRV9UQUc6CisgICAg
CisgICAgaWYgKHQtPnRhZ05hbWUgPT0gSFRNTE5hbWVzOjpmb3JtKCkpCiAgICAgICAgIGZvcm0g
PSAwOwotICAgICAgICAvLyB0aGlzIG9uZSBpcyB0byBnZXQgdGhlIHJpZ2h0IHN0eWxlIG9uIHRo
ZSBib2R5IGVsZW1lbnQKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9NQVArSURfQ0xPU0Vf
VEFHOgorICAgIGVsc2UgaWYgKHQtPnRhZ05hbWUgPT0gSFRNTE5hbWVzOjptYXAoKSkKICAgICAg
ICAgbWFwID0gMDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9TRUxFQ1QrSURfQ0xPU0Vf
VEFHOgorICAgIGVsc2UgaWYgKHQtPnRhZ05hbWUgPT0gSFRNTE5hbWVzOjpzZWxlY3QoKSkKICAg
ICAgICAgaW5TZWxlY3QgPSBmYWxzZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAg
ICAgICAgYnJlYWs7Ci0gICAgfQotCi0jaWZkZWYgUEFSU0VSX0RFQlVHCi0gICAga2REZWJ1Zygg
NjAzNSApIDw8ICJhZGRlZCB0aGUgZm9sbG93aW5nIGNoaWxkcyB0byAiIDw8IGN1cnJlbnQtPm5v
ZGVOYW1lKCkuc3RyaW5nKCkgPDwgZW5kbDsKLSAgICBOb2RlSW1wbCAqY2hpbGQgPSBjdXJyZW50
LT5maXJzdENoaWxkKCk7Ci0gICAgd2hpbGUoY2hpbGQgIT0gMCkKLSAgICB7Ci0gICAgICAgIGtk
RGVidWcoIDYwMzUgKSA8PCAiICAgICIgPDwgY2hpbGQtPm5vZGVOYW1lKCkuc3RyaW5nKCkgPDwg
ZW5kbDsKLSAgICAgICAgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKTsKLSAgICB9Ci0jZW5k
aWYKKyAgICAgICAgCiAgICAgSFRNTFN0YWNrRWxlbSogb2xkRWxlbSA9IGJsb2NrU3RhY2s7Ci0g
ICAgcG9wQmxvY2sodC0+aWQtSURfQ0xPU0VfVEFHKTsKLSAgICBpZiAob2xkRWxlbSA9PSBibG9j
a1N0YWNrICYmIHQtPmlkID09IElEX1ArSURfQ0xPU0VfVEFHKSB7CisgICAgcG9wQmxvY2sodC0+
dGFnTmFtZSk7CisgICAgaWYgKG9sZEVsZW0gPT0gYmxvY2tTdGFjayAmJiB0LT50YWdOYW1lID09
IEhUTUxOYW1lczo6cCgpKSB7CiAgICAgICAgIC8vIFdlIGVuY291bnRlcmVkIGEgc3RyYXkgPC9w
Pi4gIEFtYXppbmdseSBHZWNrbywgV2luSUUsIGFuZCBNYWNJRSBhbGwgdHJlYXQKICAgICAgICAg
Ly8gdGhpcyBhcyBhIHZhbGlkIGJyZWFrLCBpLmUuLCA8cD48L3A+LiAgU28gZ28gYWhlYWQgYW5k
IG1ha2UgdGhlIGVtcHR5CiAgICAgICAgIC8vIHBhcmFncmFwaC4KLSAgICAgICAgdC0+aWQtPUlE
X0NMT1NFX1RBRzsKKyAgICAgICAgdC0+YmVnaW5UYWcgPSB0cnVlOwogICAgICAgICBwYXJzZVRv
a2VuKHQpOwotICAgICAgICBwb3BCbG9jayhJRF9QKTsKKyAgICAgICAgcG9wQmxvY2sodC0+dGFn
TmFtZSk7CiAgICAgfQogI2lmZGVmIFBBUlNFUl9ERUJVRwogICAgIGtkRGVidWcoIDYwMzUgKSA8
PCAiY2xvc2VUYWcgLS0+IGN1cnJlbnQgPSAiIDw8IGN1cnJlbnQtPm5vZGVOYW1lKCkuc3RyaW5n
KCkgPDwgZW5kbDsKICNlbmRpZgogfQogCi1ib29sIEtIVE1MUGFyc2VyOjppc0hlYWRlclRhZyhp
bnQgX2lkKQorYm9vbCBIVE1MUGFyc2VyOjppc0hlYWRlclRhZyhjb25zdCBBdG9taWNTdHJpbmcm
IHRhZ05hbWUpCiB7Ci0gICAgc3dpdGNoIChfaWQpIHsKLSAgICAgICAgY2FzZSBJRF9IMToKLSAg
ICAgICAgY2FzZSBJRF9IMjoKLSAgICAgICAgY2FzZSBJRF9IMzoKLSAgICAgICAgY2FzZSBJRF9I
NDoKLSAgICAgICAgY2FzZSBJRF9INToKLSAgICAgICAgY2FzZSBJRF9INjoKLSAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KKyAgICByZXR1cm4gdGFnTmFtZSA9PSBIVE1MTmFtZXM6OmgxKCkgfHwKKyAgICAg
ICAgICAgdGFnTmFtZSA9PSBIVE1MTmFtZXM6OmgyKCkgfHwKKyAgICAgICAgICAgdGFnTmFtZSA9
PSBIVE1MTmFtZXM6OmgzKCkgfHwKKyAgICAgICAgICAgdGFnTmFtZSA9PSBIVE1MTmFtZXM6Omg0
KCkgfHwKKyAgICAgICAgICAgdGFnTmFtZSA9PSBIVE1MTmFtZXM6Omg1KCkgfHwKKyAgICAgICAg
ICAgdGFnTmFtZSA9PSBIVE1MTmFtZXM6Omg2KCk7CiB9CiAKLXZvaWQgS0hUTUxQYXJzZXI6OnBv
cE5lc3RlZEhlYWRlclRhZygpCit2b2lkIEhUTUxQYXJzZXI6OnBvcE5lc3RlZEhlYWRlclRhZygp
CiB7CiAgICAgLy8gVGhpcyBmdW5jdGlvbiBvbmx5IGNhcmVzIGFib3V0IGNoZWNraW5nIGZvciBu
ZXN0ZWQgaGVhZGVycyB0aGF0IGhhdmUgb25seSBpbmxpbmVzIGluIGJldHdlZW4gdGhlbS4KICAg
ICBOb2RlSW1wbCogY3Vyck5vZGUgPSBjdXJyZW50OwogICAgIGZvciAoSFRNTFN0YWNrRWxlbSog
Y3VyciA9IGJsb2NrU3RhY2s7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0KSB7Ci0gICAgICAgIGlm
IChpc0hlYWRlclRhZyhjdXJyLT5pZCkpIHsKLSAgICAgICAgICAgIHBvcEJsb2NrKGN1cnItPmlk
KTsKKyAgICAgICAgaWYgKGlzSGVhZGVyVGFnKGN1cnItPnRhZ05hbWUpKSB7CisgICAgICAgICAg
ICBwb3BCbG9jayhjdXJyLT50YWdOYW1lKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQotICAgICAgICBpZiAoY3Vyck5vZGUgJiYgIWN1cnJOb2RlLT5pc0lubGluZSgpKQorICAgICAg
ICBpZiAoY3Vyck5vZGUgJiYgIWlzSW5saW5lKGN1cnJOb2RlKSkKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgY3Vyck5vZGUgPSBjdXJyLT5ub2RlOwogICAgIH0KIH0KIAotYm9vbCBLSFRN
TFBhcnNlcjo6aXNSZXNpZHVhbFN0eWxlVGFnKGludCBfaWQpCitib29sIEhUTUxQYXJzZXI6Omlz
SW5saW5lKERPTTo6Tm9kZUltcGwqIG5vZGUpIGNvbnN0CiB7Ci0gICAgc3dpdGNoIChfaWQpIHsK
LSAgICAgICAgY2FzZSBJRF9BOgotICAgICAgICBjYXNlIElEX0ZPTlQ6Ci0gICAgICAgIGNhc2Ug
SURfVFQ6Ci0gICAgICAgIGNhc2UgSURfVToKLSAgICAgICAgY2FzZSBJRF9COgotICAgICAgICBj
YXNlIElEX0k6Ci0gICAgICAgIGNhc2UgSURfUzoKLSAgICAgICAgY2FzZSBJRF9TVFJJS0U6Ci0g
ICAgICAgIGNhc2UgSURfQklHOgotICAgICAgICBjYXNlIElEX1NNQUxMOgotICAgICAgICBjYXNl
IElEX0VNOgotICAgICAgICBjYXNlIElEX1NUUk9ORzoKLSAgICAgICAgY2FzZSBJRF9ERk46Ci0g
ICAgICAgIGNhc2UgSURfQ09ERToKLSAgICAgICAgY2FzZSBJRF9TQU1QOgotICAgICAgICBjYXNl
IElEX0tCRDoKLSAgICAgICAgY2FzZSBJRF9WQVI6CisgICAgaWYgKG5vZGUtPmlzVGV4dE5vZGUo
KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAobm9kZS0+aXNIVE1MRWxlbWVudCgp
KSB7CisgICAgICAgIEhUTUxFbGVtZW50SW1wbCogZSA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50
SW1wbCo+KG5vZGUpOworICAgICAgICBpZiAoZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6YSgp
KSB8fCBlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpmb250KCkpIHx8IGUtPmhhc0xvY2FsTmFt
ZShIVE1MTmFtZXM6OnR0KCkpIHx8CisgICAgICAgICAgICBlLT5oYXNMb2NhbE5hbWUoSFRNTE5h
bWVzOjp1KCkpIHx8IGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmIoKSkgfHwgZS0+aGFzTG9j
YWxOYW1lKEhUTUxOYW1lczo6aSgpKSB8fAorICAgICAgICAgICAgZS0+aGFzTG9jYWxOYW1lKEhU
TUxOYW1lczo6cygpKSB8fCBlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpzdHJpa2UoKSkgfHwg
ZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6YmlnKCkpIHx8CisgICAgICAgICAgICBlLT5oYXNM
b2NhbE5hbWUoSFRNTE5hbWVzOjpzbWFsbCgpKSB8fCBlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVz
OjplbSgpKSB8fCBlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpzdHJvbmcoKSkgfHwKKyAgICAg
ICAgICAgIGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmRmbigpKSB8fCBlLT5oYXNMb2NhbE5h
bWUoSFRNTE5hbWVzOjpjb2RlKCkpIHx8IGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnNhbXAo
KSkgfHwKKyAgICAgICAgICAgIGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmtiZCgpKSB8fCBl
LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp2YXIoKSkgfHwgZS0+aGFzTG9jYWxOYW1lKEhUTUxO
YW1lczo6Y2l0ZSgpKSB8fAorICAgICAgICAgICAgZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6
YWJicigpKSB8fCBlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjphY3JvbnltKCkpIHx8IGUtPmhh
c0xvY2FsTmFtZShIVE1MTmFtZXM6OnN1YigpKSB8fAorICAgICAgICAgICAgZS0+aGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6c3VwKCkpIHx8IGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnNwYW4o
KSkgfHwgZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6bm9icigpKSB8fAorICAgICAgICAgICAg
ZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6d2JyKCkpKQogICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQor
ICAgIAorICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBLSFRNTFBhcnNlcjo6aXNBZmZlY3Rl
ZEJ5UmVzaWR1YWxTdHlsZShpbnQgX2lkKQorYm9vbCBIVE1MUGFyc2VyOjppc1Jlc2lkdWFsU3R5
bGVUYWcoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lKQogewotICAgIGlmIChpc1Jlc2lkdWFs
U3R5bGVUYWcoX2lkKSkKKyAgICByZXR1cm4gdGFnTmFtZSA9PSBIVE1MTmFtZXM6OmEoKSB8fCB0
YWdOYW1lID09IEhUTUxOYW1lczo6Zm9udCgpIHx8IHRhZ05hbWUgPT0gSFRNTE5hbWVzOjp0dCgp
IHx8CisgICAgICAgICAgIHRhZ05hbWUgPT0gSFRNTE5hbWVzOjp1KCkgfHwgdGFnTmFtZSA9PSBI
VE1MTmFtZXM6OmIoKSB8fCB0YWdOYW1lID09IEhUTUxOYW1lczo6aSgpIHx8CisgICAgICAgICAg
IHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpzKCkgfHwgdGFnTmFtZSA9PSBIVE1MTmFtZXM6OnN0cmlr
ZSgpIHx8IHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpiaWcoKSB8fAorICAgICAgICAgICB0YWdOYW1l
ID09IEhUTUxOYW1lczo6c21hbGwoKSB8fCB0YWdOYW1lID09IEhUTUxOYW1lczo6ZW0oKSB8fCB0
YWdOYW1lID09IEhUTUxOYW1lczo6c3Ryb25nKCkgfHwKKyAgICAgICAgICAgdGFnTmFtZSA9PSBI
VE1MTmFtZXM6OmRmbigpIHx8IHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpjb2RlKCkgfHwgdGFnTmFt
ZSA9PSBIVE1MTmFtZXM6OnNhbXAoKSB8fAorICAgICAgICAgICB0YWdOYW1lID09IEhUTUxOYW1l
czo6a2JkKCkgfHwgdGFnTmFtZSA9PSBIVE1MTmFtZXM6OnZhcigpOworfQorCitib29sIEhUTUxQ
YXJzZXI6OmlzQWZmZWN0ZWRCeVJlc2lkdWFsU3R5bGUoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdO
YW1lKQoreworICAgIGlmIChpc1Jlc2lkdWFsU3R5bGVUYWcodGFnTmFtZSkgfHwgaXNIZWFkZXJU
YWcodGFnTmFtZSkpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIAotICAgIHN3aXRjaCAoX2lk
KSB7Ci0gICAgICAgIGNhc2UgSURfUDoKLSAgICAgICAgY2FzZSBJRF9ESVY6Ci0gICAgICAgIGNh
c2UgSURfQkxPQ0tRVU9URToKLSAgICAgICAgY2FzZSBJRF9BRERSRVNTOgotICAgICAgICBjYXNl
IElEX0gxOgotICAgICAgICBjYXNlIElEX0gyOgotICAgICAgICBjYXNlIElEX0gzOgotICAgICAg
ICBjYXNlIElEX0g0OgotICAgICAgICBjYXNlIElEX0g1OgotICAgICAgICBjYXNlIElEX0g2Ogot
ICAgICAgICBjYXNlIElEX0NFTlRFUjoKLSAgICAgICAgY2FzZSBJRF9VTDoKLSAgICAgICAgY2Fz
ZSBJRF9PTDoKLSAgICAgICAgY2FzZSBJRF9MSToKLSAgICAgICAgY2FzZSBJRF9ETDoKLSAgICAg
ICAgY2FzZSBJRF9EVDoKLSAgICAgICAgY2FzZSBJRF9ERDoKLSAgICAgICAgY2FzZSBJRF9QUkU6
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgcmV0dXJuIHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpw
KCkgfHwgdGFnTmFtZSA9PSBIVE1MTmFtZXM6OmRpdigpIHx8IHRhZ05hbWUgPT0gSFRNTE5hbWVz
OjpibG9ja3F1b3RlKCkgfHwKKyAgICAgICAgICAgdGFnTmFtZSA9PSBIVE1MTmFtZXM6OmFkZHJl
c3MoKSB8fCB0YWdOYW1lID09IEhUTUxOYW1lczo6Y2VudGVyKCkgfHwgdGFnTmFtZSA9PSBIVE1M
TmFtZXM6OnVsKCkgfHwKKyAgICAgICAgICAgdGFnTmFtZSA9PSBIVE1MTmFtZXM6Om9sKCkgfHwg
dGFnTmFtZSA9PSBIVE1MTmFtZXM6OmxpKCkgfHwgdGFnTmFtZSA9PSBIVE1MTmFtZXM6OmRsKCkg
fHwKKyAgICAgICAgICAgdGFnTmFtZSA9PSBIVE1MTmFtZXM6OmR0KCkgfHwgdGFnTmFtZSA9PSBI
VE1MTmFtZXM6OmRkKCkgfHwgdGFnTmFtZSA9PSBIVE1MTmFtZXM6OnByZSgpOwogfQogCi12b2lk
IEtIVE1MUGFyc2VyOjpoYW5kbGVSZXNpZHVhbFN0eWxlQ2xvc2VUYWdBY3Jvc3NCbG9ja3MoSFRN
TFN0YWNrRWxlbSogZWxlbSkKK3ZvaWQgSFRNTFBhcnNlcjo6aGFuZGxlUmVzaWR1YWxTdHlsZUNs
b3NlVGFnQWNyb3NzQmxvY2tzKEhUTUxTdGFja0VsZW0qIGVsZW0pCiB7CiAgICAgLy8gRmluZCB0
aGUgZWxlbWVudCB0aGF0IGNyb3NzZXMgb3ZlciB0byBhIGhpZ2hlciBsZXZlbC4gICBGb3Igbm93
LCBpZiB0aGVyZSBpcyBtb3JlIHRoYW4KICAgICAvLyBvbmUsIHdlIHdpbGwganVzdCBnaXZlIHVw
IGFuZCBub3QgYXR0ZW1wdCBhbnkgc29ydCBvZiBjb3JyZWN0aW9uLiAgSXQncyBoaWdobHkgdW5s
aWtlbHkgdGhhdApAQCAtMTEyNSw3ICs4NjUsNyBAQCB2b2lkIEtIVE1MUGFyc2VyOjpoYW5kbGVS
ZXNpZHVhbFN0eWxlQ2xvCiAgICAgICAgIGN1cnIgPSBjdXJyLT5uZXh0OwogICAgIH0KIAotICAg
IGlmICghY3VyciB8fCAhbWF4RWxlbSB8fCAhaXNBZmZlY3RlZEJ5UmVzaWR1YWxTdHlsZShtYXhF
bGVtLT5pZCkpIHJldHVybjsKKyAgICBpZiAoIWN1cnIgfHwgIW1heEVsZW0gfHwgIWlzQWZmZWN0
ZWRCeVJlc2lkdWFsU3R5bGUobWF4RWxlbS0+dGFnTmFtZSkpIHJldHVybjsKIAogICAgIE5vZGVJ
bXBsKiByZXNpZHVhbEVsZW0gPSBwcmV2LT5ub2RlOwogICAgIE5vZGVJbXBsKiBibG9ja0VsZW0g
PSBwcmV2TWF4RWxlbSA/IHByZXZNYXhFbGVtLT5ub2RlIDogY3VycmVudDsKQEAgLTExNDcsNyAr
ODg3LDcgQEAgdm9pZCBLSFRNTFBhcnNlcjo6aGFuZGxlUmVzaWR1YWxTdHlsZUNsbwogICAgICAg
ICBIVE1MU3RhY2tFbGVtKiBwcmV2RWxlbSA9IG1heEVsZW07CiAgICAgICAgIHdoaWxlIChjdXJy
RWxlbSAhPSBlbGVtKSB7CiAgICAgICAgICAgICBIVE1MU3RhY2tFbGVtKiBuZXh0RWxlbSA9IGN1
cnJFbGVtLT5uZXh0OwotICAgICAgICAgICAgaWYgKCFpc1Jlc2lkdWFsU3R5bGVUYWcoY3VyckVs
ZW0tPmlkKSkgeworICAgICAgICAgICAgaWYgKCFpc1Jlc2lkdWFsU3R5bGVUYWcoY3VyckVsZW0t
PnRhZ05hbWUpKSB7CiAgICAgICAgICAgICAgICAgcHJldkVsZW0tPm5leHQgPSBuZXh0RWxlbTsK
ICAgICAgICAgICAgICAgICBwcmV2RWxlbS0+bm9kZSA9IGN1cnJFbGVtLT5ub2RlOwogICAgICAg
ICAgICAgICAgIGRlbGV0ZSBjdXJyRWxlbTsKQEAgLTExNjksNyArOTA5LDcgQEAgdm9pZCBLSFRN
TFBhcnNlcjo6aGFuZGxlUmVzaWR1YWxTdHlsZUNsbwogICAgICAgICBOb2RlSW1wbCogY3Vyck5v
ZGUgPSAwOwogICAgICAgICBjdXJyRWxlbSA9IG1heEVsZW07CiAgICAgICAgIHdoaWxlIChjdXJy
RWxlbS0+bm9kZSAhPSByZXNpZHVhbEVsZW0pIHsKLSAgICAgICAgICAgIGlmIChpc1Jlc2lkdWFs
U3R5bGVUYWcoY3VyckVsZW0tPm5vZGUtPmlkKCkpKSB7CisgICAgICAgICAgICBpZiAoaXNSZXNp
ZHVhbFN0eWxlVGFnKGN1cnJFbGVtLT5ub2RlLT5sb2NhbE5hbWUoKSkpIHsKICAgICAgICAgICAg
ICAgICAvLyBDcmVhdGUgYSBjbG9uZSBvZiB0aGlzIGVsZW1lbnQuCiAgICAgICAgICAgICAgICAg
Y3Vyck5vZGUgPSBjdXJyRWxlbS0+bm9kZS0+Y2xvbmVOb2RlKGZhbHNlKTsKIApAQCAtMTI0NSw3
ICs5ODUsNyBAQCB2b2lkIEtIVE1MUGFyc2VyOjpoYW5kbGVSZXNpZHVhbFN0eWxlQ2xvCiAgICAg
ICAgIC8vIFdlIHdpbGwgYWN0dWFsbHkgc2NoZWR1bGUgdGhpcyB0YWcgZm9yIHJlb3BlbmluZwog
ICAgICAgICAvLyBhZnRlciB3ZSBjb21wbGV0ZSB0aGUgY2xvc2Ugb2YgdGhpcyBlbnRpcmUgYmxv
Y2suCiAgICAgICAgIE5vZGVJbXBsKiBjdXJyTm9kZSA9IGN1cnJlbnQ7Ci0gICAgICAgIGlmIChp
c1Jlc2lkdWFsU3R5bGVUYWcoY3Vyci0+aWQpKSB7CisgICAgICAgIGlmIChpc1Jlc2lkdWFsU3R5
bGVUYWcoY3Vyci0+dGFnTmFtZSkpIHsKICAgICAgICAgICAgIC8vIFdlJ3ZlIG92ZXJsb2FkZWQg
dGhlIHVzZSBvZiBzdGFjayBlbGVtZW50cyBhbmQgYXJlIGp1c3QgcmV1c2luZyB0aGUKICAgICAg
ICAgICAgIC8vIHN0cnVjdCB3aXRoIGEgc2xpZ2h0bHkgZGlmZmVyZW50IG1lYW5pbmcgdG8gdGhl
IHZhcmlhYmxlcy4gIEluc3RlYWQgb2YgY2hhaW5pbmcKICAgICAgICAgICAgIC8vIGZyb20gaW5u
ZXJtb3N0IHRvIG91dGVybW9zdCwgd2UgYnVpbGQgdXAgYSBsaXN0IG9mIGFsbCB0aGUgdGFncyB3
ZSBuZWVkIHRvIHJlb3BlbgpAQCAtMTI2OSw3ICsxMDA5LDcgQEAgdm9pZCBLSFRNTFBhcnNlcjo6
aGFuZGxlUmVzaWR1YWxTdHlsZUNsbwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIGlmIGl0IGJlY29tZXMgbmVjZXNzYXJ5IHRvIGRvIHNvLgog
fQogCi12b2lkIEtIVE1MUGFyc2VyOjpyZW9wZW5SZXNpZHVhbFN0eWxlVGFncyhIVE1MU3RhY2tF
bGVtKiBlbGVtLCBET006Ok5vZGVJbXBsKiBtYWxmb3JtZWRUYWJsZVBhcmVudCkKK3ZvaWQgSFRN
TFBhcnNlcjo6cmVvcGVuUmVzaWR1YWxTdHlsZVRhZ3MoSFRNTFN0YWNrRWxlbSogZWxlbSwgRE9N
OjpOb2RlSW1wbCogbWFsZm9ybWVkVGFibGVQYXJlbnQpCiB7CiAgICAgLy8gTG9vcCBmb3IgZWFj
aCB0YWcgdGhhdCBuZWVkcyB0byBiZSByZW9wZW5lZC4KICAgICB3aGlsZSAoZWxlbSkgewpAQCAt
MTI4Niw3ICsxMDI2LDcgQEAgdm9pZCBLSFRNTFBhcnNlcjo6cmVvcGVuUmVzaWR1YWxTdHlsZVRh
ZwogICAgICAgICAvLyBGSVhNRTogSXMgaXQgcmVhbGx5IE9LIHRvIGlnbm9yZSB0aGUgZXhjZXB0
aW9ucyBoZXJlPwogCiAgICAgICAgIC8vIE5vdyBwdXNoIGEgbmV3IHN0YWNrIGVsZW1lbnQgZm9y
IHRoaXMgbm9kZSB3ZSBqdXN0IGNyZWF0ZWQuCi0gICAgICAgIHB1c2hCbG9jayhlbGVtLT5pZCwg
ZWxlbS0+bGV2ZWwpOworICAgICAgICBwdXNoQmxvY2soZWxlbS0+dGFnTmFtZSwgZWxlbS0+bGV2
ZWwpOwogCiAgICAgICAgIC8vIFNldCBvdXIgc3RyYXlUYWJsZUNvbnRlbnQgYm9vbGVhbiBpZiBu
ZWVkZWQsIHNvIHRoYXQgdGhlIHJlb3BlbmVkIHRhZyBhbHNvIGtub3dzCiAgICAgICAgIC8vIHRo
YXQgaXQgaXMgaW5zaWRlIGEgbWFsZm9ybWVkIHRhYmxlLgpAQCAtMTMwNywzNSArMTA0NywyMSBA
QCB2b2lkIEtIVE1MUGFyc2VyOjpyZW9wZW5SZXNpZHVhbFN0eWxlVGFnCiAgICAgfQogfQogCi12
b2lkIEtIVE1MUGFyc2VyOjpwdXNoQmxvY2soaW50IF9pZCwgaW50IF9sZXZlbCkKK3ZvaWQgSFRN
TFBhcnNlcjo6cHVzaEJsb2NrKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSwgaW50IF9sZXZl
bCkKIHsKLSAgICBIVE1MU3RhY2tFbGVtICpFbGVtID0gbmV3IEhUTUxTdGFja0VsZW0oX2lkLCBf
bGV2ZWwsIGN1cnJlbnQsIGJsb2NrU3RhY2spOwotCisgICAgSFRNTFN0YWNrRWxlbSAqRWxlbSA9
IG5ldyBIVE1MU3RhY2tFbGVtKHRhZ05hbWUsIF9sZXZlbCwgY3VycmVudCwgYmxvY2tTdGFjayk7
CiAgICAgYmxvY2tTdGFjayA9IEVsZW07Ci0gICAgYWRkRm9yYmlkZGVuKF9pZCwgZm9yYmlkZGVu
VGFnKTsKIH0KIAotdm9pZCBLSFRNTFBhcnNlcjo6cG9wQmxvY2soIGludCBfaWQgKQordm9pZCBI
VE1MUGFyc2VyOjpwb3BCbG9jayhjb25zdCBBdG9taWNTdHJpbmcmIF90YWdOYW1lKQogewogICAg
IEhUTUxTdGFja0VsZW0gKkVsZW0gPSBibG9ja1N0YWNrOwogICAgIAogICAgIGludCBtYXhMZXZl
bCA9IDA7CiAKLSNpZmRlZiBQQVJTRVJfREVCVUcKLSAgICBrZERlYnVnKCA2MDM1ICkgPDwgInBv
cEJsb2NrKCIgPDwgZ2V0VGFnTmFtZShfaWQpLnN0cmluZygpIDw8ICIpIiA8PCBlbmRsOwotICAg
IHdoaWxlKEVsZW0pIHsKLSAgICAgICAga2REZWJ1ZyggNjAzNSkgPDwgIiAgID4gIiA8PCBnZXRU
YWdOYW1lKEVsZW0tPmlkKS5zdHJpbmcoKSA8PCBlbmRsOwotICAgICAgICBFbGVtID0gRWxlbS0+
bmV4dDsKLSAgICB9Ci0gICAgRWxlbSA9IGJsb2NrU3RhY2s7Ci0jZW5kaWYKLQotICAgIHdoaWxl
KCBFbGVtICYmIChFbGVtLT5pZCAhPSBfaWQpKQotICAgIHsKKyAgICB3aGlsZSAoRWxlbSAmJiAo
RWxlbS0+dGFnTmFtZSAhPSBfdGFnTmFtZSkpIHsKICAgICAgICAgaWYgKG1heExldmVsIDwgRWxl
bS0+bGV2ZWwpCi0gICAgICAgIHsKICAgICAgICAgICAgIG1heExldmVsID0gRWxlbS0+bGV2ZWw7
Ci0gICAgICAgIH0KICAgICAgICAgRWxlbSA9IEVsZW0tPm5leHQ7CiAgICAgfQogCkBAIC0xMzQ1
LDIwICsxMDcxLDE4IEBAIHZvaWQgS0hUTUxQYXJzZXI6OnBvcEJsb2NrKCBpbnQgX2lkICkKICAg
ICBpZiAobWF4TGV2ZWwgPiBFbGVtLT5sZXZlbCkgewogICAgICAgICAvLyBXZSBkaWRuJ3QgbWF0
Y2ggYmVjYXVzZSB0aGUgdGFnIGlzIGluIGEgZGlmZmVyZW50IHNjb3BlLCBlLmcuLAogICAgICAg
ICAvLyA8Yj48cD5Gb288L2I+LiAgVHJ5IHRvIGNvcnJlY3QgdGhlIHByb2JsZW0uCi0gICAgICAg
IGlmICghaXNSZXNpZHVhbFN0eWxlVGFnKF9pZCkpCisgICAgICAgIGlmICghaXNSZXNpZHVhbFN0
eWxlVGFnKF90YWdOYW1lKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgcmV0dXJuIGhh
bmRsZVJlc2lkdWFsU3R5bGVDbG9zZVRhZ0Fjcm9zc0Jsb2NrcyhFbGVtKTsKICAgICB9CiAKLSAg
ICBib29sIGlzQWZmZWN0ZWRCeVN0eWxlID0gaXNBZmZlY3RlZEJ5UmVzaWR1YWxTdHlsZShFbGVt
LT5pZCk7CisgICAgYm9vbCBpc0FmZmVjdGVkQnlTdHlsZSA9IGlzQWZmZWN0ZWRCeVJlc2lkdWFs
U3R5bGUoRWxlbS0+dGFnTmFtZSk7CiAgICAgSFRNTFN0YWNrRWxlbSogcmVzaWR1YWxTdHlsZVN0
YWNrID0gMDsKICAgICBOb2RlSW1wbCogbWFsZm9ybWVkVGFibGVQYXJlbnQgPSAwOwogICAgIAog
ICAgIEVsZW0gPSBibG9ja1N0YWNrOwotICAgIHdoaWxlIChFbGVtKQotICAgIHsKLSAgICAgICAg
aWYgKEVsZW0tPmlkID09IF9pZCkKLSAgICAgICAgeworICAgIHdoaWxlIChFbGVtKSB7CisgICAg
ICAgIGlmIChFbGVtLT50YWdOYW1lID09IF90YWdOYW1lKSB7CiAgICAgICAgICAgICBpbnQgc3Ry
YXlUYWJsZSA9IGluU3RyYXlUYWJsZUNvbnRlbnQ7CiAgICAgICAgICAgICBwb3BPbmVCbG9jaygp
OwogICAgICAgICAgICAgRWxlbSA9IDA7CkBAIC0xMzY5LDE0ICsxMDkzLDEzIEBAIHZvaWQgS0hU
TUxQYXJzZXI6OnBvcEJsb2NrKCBpbnQgX2lkICkKICAgICAgICAgICAgIC8vIG11c3QgYWxzbyBr
bm93IHRoYXQgaXQgaXMgdGhlIHJvb3Qgb2YgbWFsZm9ybWVkIGNvbnRlbnQgaW5zaWRlIGEgPHRi
b2R5Pi88dHI+LgogICAgICAgICAgICAgaWYgKHN0cmF5VGFibGUgJiYgKGluU3RyYXlUYWJsZUNv
bnRlbnQgPCBzdHJheVRhYmxlKSAmJiByZXNpZHVhbFN0eWxlU3RhY2spIHsKICAgICAgICAgICAg
ICAgICBOb2RlSW1wbCogY3VyciA9IGN1cnJlbnQ7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKGN1
cnIgJiYgY3Vyci0+aWQoKSAhPSBJRF9UQUJMRSkKKyAgICAgICAgICAgICAgICB3aGlsZSAoY3Vy
ciAmJiAhY3Vyci0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRhYmxlKCkpKQogICAgICAgICAgICAg
ICAgICAgICBjdXJyID0gY3Vyci0+cGFyZW50Tm9kZSgpOwogICAgICAgICAgICAgICAgIG1hbGZv
cm1lZFRhYmxlUGFyZW50ID0gY3VyciA/IGN1cnItPnBhcmVudE5vZGUoKSA6IDA7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBp
ZiAoRWxlbS0+aWQgPT0gSURfRk9STSAmJiBmb3JtKQorICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgIGlmIChmb3JtICYmIEVsZW0tPnRhZ05hbWUgPT0gSFRNTE5hbWVzOjpmb3JtKCkpCiAgICAg
ICAgICAgICAgICAgLy8gQSA8Zm9ybT4gaXMgYmVpbmcgY2xvc2VkIHByZW1hdHVyZWx5IChhbmQg
dGhpcyBpcwogICAgICAgICAgICAgICAgIC8vIG1hbGZvcm1lZCBIVE1MKS4gIFNldCBhbiBhdHRy
aWJ1dGUgb24gdGhlIGZvcm0gdG8gY2xlYXIgb3V0IGl0cwogICAgICAgICAgICAgICAgIC8vIGJv
dHRvbSBtYXJnaW4uCkBAIC0xMzg1LDcgKzExMDgsNyBAQCB2b2lkIEtIVE1MUGFyc2VyOjpwb3BC
bG9jayggaW50IF9pZCApCiAgICAgICAgICAgICAvLyBTY2hlZHVsZSB0aGlzIHRhZyBmb3IgcmVv
cGVuaW5nCiAgICAgICAgICAgICAvLyBhZnRlciB3ZSBjb21wbGV0ZSB0aGUgY2xvc2Ugb2YgdGhp
cyBlbnRpcmUgYmxvY2suCiAgICAgICAgICAgICBOb2RlSW1wbCogY3Vyck5vZGUgPSBjdXJyZW50
OwotICAgICAgICAgICAgaWYgKGlzQWZmZWN0ZWRCeVN0eWxlICYmIGlzUmVzaWR1YWxTdHlsZVRh
ZyhFbGVtLT5pZCkpIHsKKyAgICAgICAgICAgIGlmIChpc0FmZmVjdGVkQnlTdHlsZSAmJiBpc1Jl
c2lkdWFsU3R5bGVUYWcoRWxlbS0+dGFnTmFtZSkpIHsKICAgICAgICAgICAgICAgICAvLyBXZSd2
ZSBvdmVybG9hZGVkIHRoZSB1c2Ugb2Ygc3RhY2sgZWxlbWVudHMgYW5kIGFyZSBqdXN0IHJldXNp
bmcgdGhlCiAgICAgICAgICAgICAgICAgLy8gc3RydWN0IHdpdGggYSBzbGlnaHRseSBkaWZmZXJl
bnQgbWVhbmluZyB0byB0aGUgdmFyaWFibGVzLiAgSW5zdGVhZCBvZiBjaGFpbmluZwogICAgICAg
ICAgICAgICAgIC8vIGZyb20gaW5uZXJtb3N0IHRvIG91dGVybW9zdCwgd2UgYnVpbGQgdXAgYSBs
aXN0IG9mIGFsbCB0aGUgdGFncyB3ZSBuZWVkIHRvIHJlb3BlbgpAQCAtMTQwOCwxOSArMTEzMSwx
NCBAQCB2b2lkIEtIVE1MUGFyc2VyOjpwb3BCbG9jayggaW50IF9pZCApCiAgICAgcmVvcGVuUmVz
aWR1YWxTdHlsZVRhZ3MocmVzaWR1YWxTdHlsZVN0YWNrLCBtYWxmb3JtZWRUYWJsZVBhcmVudCk7
CiB9CiAKLXZvaWQgS0hUTUxQYXJzZXI6OnBvcE9uZUJsb2NrKGJvb2wgZGVsQmxvY2spCit2b2lk
IEhUTUxQYXJzZXI6OnBvcE9uZUJsb2NrKGJvb2wgZGVsQmxvY2spCiB7CiAgICAgSFRNTFN0YWNr
RWxlbSAqRWxlbSA9IGJsb2NrU3RhY2s7CiAKICAgICAvLyB3ZSBzaG91bGQgbmV2ZXIgZ2V0IGhl
cmUsIGJ1dCBzb21lIGJhZCBodG1sIG1pZ2h0IGNhdXNlIGl0LgotI2lmbmRlZiBQQVJTRVJfREVC
VUcKLSAgICBpZighRWxlbSkgcmV0dXJuOwotI2Vsc2UKLSAgICBrZERlYnVnKCA2MDM1ICkgPDwg
InBvcHBpbmcgYmxvY2s6ICIgPDwgZ2V0VGFnTmFtZShFbGVtLT5pZCkuc3RyaW5nKCkgPDwgIigi
IDw8IEVsZW0tPmlkIDw8ICIpIiA8PCBlbmRsOwotI2VuZGlmCi0KLSNpZiBTUEVFRF9ERUJVRyA8
IDEKLSAgICBpZigoRWxlbS0+bm9kZSAhPSBjdXJyZW50KSkgeworICAgIGlmICghRWxlbSkgcmV0
dXJuOworICAgIAorICAgIGlmICgoRWxlbS0+bm9kZSAhPSBjdXJyZW50KSkgewogICAgICAgICBp
ZiAoY3VycmVudC0+bWFpbnRhaW5zU3RhdGUoKSAmJiBkb2MoKSl7CiAgICAgICAgICAgICBkb2Mo
KS0+cmVnaXN0ZXJNYWludGFpbnNTdGF0ZShjdXJyZW50KTsKICAgICAgICAgICAgIFFTdHJpbmdM
aXN0ICZzdGF0ZXMgPSBkb2MoKS0+cmVzdG9yZVN0YXRlKCk7CkBAIC0xNDMxLDkgKzExNDksNiBA
QCB2b2lkIEtIVE1MUGFyc2VyOjpwb3BPbmVCbG9jayhib29sIGRlbEJsCiAgICAgICAgIC8vIEEg
ZmV3IGVsZW1lbnRzICg8YXBwbGV0PiwgPG9iamVjdD4pIG5lZWQgdG8ga25vdyB3aGVuIGFsbCBj
aGlsZCBlbGVtZW50cyAoPHBhcmFtPnMpIGFyZSBhdmFpbGFibGU6CiAgICAgICAgIGN1cnJlbnQt
PmNsb3NlUmVuZGVyZXIoKTsKICAgICB9Ci0jZW5kaWYKLQotICAgIHJlbW92ZUZvcmJpZGRlbihF
bGVtLT5pZCwgZm9yYmlkZGVuVGFnKTsKIAogICAgIGJsb2NrU3RhY2sgPSBFbGVtLT5uZXh0Owog
ICAgIHNldEN1cnJlbnQoRWxlbS0+bm9kZSk7CkBAIC0xNDQ1LDE5ICsxMTYwLDE5IEBAIHZvaWQg
S0hUTUxQYXJzZXI6OnBvcE9uZUJsb2NrKGJvb2wgZGVsQmwKICAgICAgICAgZGVsZXRlIEVsZW07
CiB9CiAKLXZvaWQgS0hUTUxQYXJzZXI6OnBvcElubGluZUJsb2NrcygpCit2b2lkIEhUTUxQYXJz
ZXI6OnBvcElubGluZUJsb2NrcygpCiB7Ci0gICAgd2hpbGUgKGJsb2NrU3RhY2sgJiYgY3VycmVu
dC0+aXNJbmxpbmUoKSkKKyAgICB3aGlsZSAoYmxvY2tTdGFjayAmJiBpc0lubGluZShjdXJyZW50
KSkKICAgICAgICAgcG9wT25lQmxvY2soKTsKIH0KIAotdm9pZCBLSFRNTFBhcnNlcjo6ZnJlZUJs
b2NrKCkKK3ZvaWQgSFRNTFBhcnNlcjo6ZnJlZUJsb2NrKCkKIHsKICAgICB3aGlsZSAoYmxvY2tT
dGFjaykKICAgICAgICAgcG9wT25lQmxvY2soKTsKIH0KIAotdm9pZCBLSFRNTFBhcnNlcjo6Y3Jl
YXRlSGVhZCgpCit2b2lkIEhUTUxQYXJzZXI6OmNyZWF0ZUhlYWQoKQogewogICAgIGlmKGhlYWQg
fHwgIWRvYygpLT5maXJzdENoaWxkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE0NzQsNyArMTE4
OSw3IEBAIHZvaWQgS0hUTUxQYXJzZXI6OmNyZWF0ZUhlYWQoKQogICAgIH0KIH0KIAotTm9kZUlt
cGwgKktIVE1MUGFyc2VyOjpoYW5kbGVJc2luZGV4KCBUb2tlbiAqdCApCitOb2RlSW1wbCAqSFRN
TFBhcnNlcjo6aGFuZGxlSXNpbmRleCggVG9rZW4gKnQgKQogewogICAgIE5vZGVJbXBsICpuOwog
ICAgIEhUTUxGb3JtRWxlbWVudEltcGwgKm15Zm9ybSA9IGZvcm07CkBAIC0xNTA0LDcgKzEyMTks
NyBAQCBOb2RlSW1wbCAqS0hUTUxQYXJzZXI6OmhhbmRsZUlzaW5kZXgoIFRvCiAgICAgcmV0dXJu
IG47CiB9CiAKLXZvaWQgS0hUTUxQYXJzZXI6OnN0YXJ0Qm9keSgpCit2b2lkIEhUTUxQYXJzZXI6
OnN0YXJ0Qm9keSgpCiB7CiAgICAgaWYoaW5Cb2R5KSByZXR1cm47CiAKQEAgLTE1MTYsNyArMTIz
MSw3IEBAIHZvaWQgS0hUTUxQYXJzZXI6OnN0YXJ0Qm9keSgpCiAgICAgfQogfQogCi12b2lkIEtI
VE1MUGFyc2VyOjpmaW5pc2hlZCgpCit2b2lkIEhUTUxQYXJzZXI6OmZpbmlzaGVkKCkKIHsKICAg
ICAvLyBJbiB0aGUgY2FzZSBvZiBhIGNvbXBsZXRlbHkgZW1wdHkgZG9jdW1lbnQsIGhlcmUncyB0
aGUgcGxhY2UgdG8gY3JlYXRlIHRoZSBIVE1MIGVsZW1lbnQuCiAgICAgaWYgKGN1cnJlbnQtPmlz
RG9jdW1lbnROb2RlKCkgJiYgY3VycmVudC0+Zmlyc3RDaGlsZCgpID09IDApIHsKSW5kZXg6IGto
dG1sL2h0bWwvaHRtbHBhcnNlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJD
b3JlL2todG1sL2h0bWwvaHRtbHBhcnNlci5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjI3CmRp
ZmYgLXUgLXAgLXIxLjI3IGtodG1sL2h0bWwvaHRtbHBhcnNlci5oCi0tLSBraHRtbC9odG1sL2h0
bWxwYXJzZXIuaAk2IEphbiAyMDA1IDIxOjEzOjE2IC0wMDAwCTEuMjcKKysrIGtodG1sL2h0bWwv
aHRtbHBhcnNlci5oCTI0IEp1biAyMDA1IDAzOjEwOjI2IC0wMDAwCkBAIC0yOSwxOSArMjksOSBA
QAogI2lmbmRlZiBIVE1MUEFSU0VSX0gKICNkZWZpbmUgSFRNTFBBUlNFUl9ICiAKLS8vIDAgYWxs
Ci0vLyAxIGRvbXRyZWUgKyByZW5kZXJ0cmVlICsgc3R5bGVGb3JFbGVtZW50LCBubyBsYXlvdXRp
bmcKLS8vIDIgZG9tdHJlZSBvbmx5Ci0jZGVmaW5lIFNQRUVEX0RFQlVHIDAKLQotI2lmZGVmIFNQ
RUVEX0RFQlVHCi0jaW5jbHVkZSA8cWRhdGV0aW1lLmg+Ci0jZW5kaWYKLQogI2luY2x1ZGUgImRv
bS9kb21fc3RyaW5nLmgiCiAjaW5jbHVkZSAieG1sL2RvbV9ub2RlaW1wbC5oIgogI2luY2x1ZGUg
Imh0bWwvaHRtbF9kb2N1bWVudGltcGwuaCIKLSNpbmNsdWRlICJtaXNjL2h0bWx0YWdzLmgiCiAK
IGNsYXNzIEtIVE1MVmlldzsKIGNsYXNzIEhUTUxTdGFja0VsZW07CkBAIC02MSwxOCArNTEsMTYg
QEAgbmFtZXNwYWNlIGtodG1sIHsKICAgICBjbGFzcyBUb2tlbjsKIH07CiAKLWNsYXNzIEtIVE1M
UGFyc2VyOwotCiAvKioKICAqIFRoZSBwYXJzZXIgZm9yIGh0bWwuIEl0IHJlY2VpdmVzIGEgc3Ry
ZWFtIG9mIHRva2VucyBmcm9tIHRoZSBIVE1MVG9rZW5pemVyLCBhbmQKICAqIGJ1aWxkcyB1cCB0
aGUgRG9jdW1lbnQgc3RydWN0dXJlIGZvcm0gaXQuCiAgKi8KLWNsYXNzIEtIVE1MUGFyc2VyCitj
bGFzcyBIVE1MUGFyc2VyCiB7CiBwdWJsaWM6Ci0gICAgS0hUTUxQYXJzZXIoS0hUTUxWaWV3ICp3
LCBET006OkRvY3VtZW50UHRyICppLCBib29sIGluY2x1ZGVzQ29tbWVudHM9ZmFsc2UpOwotICAg
IEtIVE1MUGFyc2VyKERPTTo6RG9jdW1lbnRGcmFnbWVudEltcGwgKmZyYWcsIERPTTo6RG9jdW1l
bnRQdHIgKmRvYywgYm9vbCBpbmNsdWRlc0NvbW1lbnRzPWZhbHNlKTsKLSAgICB2aXJ0dWFsIH5L
SFRNTFBhcnNlcigpOworICAgIEhUTUxQYXJzZXIoS0hUTUxWaWV3ICp3LCBET006OkRvY3VtZW50
UHRyICppLCBib29sIGluY2x1ZGVzQ29tbWVudHM9ZmFsc2UpOworICAgIEhUTUxQYXJzZXIoRE9N
OjpEb2N1bWVudEZyYWdtZW50SW1wbCAqZnJhZywgRE9NOjpEb2N1bWVudFB0ciAqZG9jLCBib29s
IGluY2x1ZGVzQ29tbWVudHM9ZmFsc2UpOworICAgIHZpcnR1YWwgfkhUTUxQYXJzZXIoKTsKIAog
ICAgIC8qKgogICAgICAqIHBhcnNlcyBvbmUgdG9rZW4gZGVsaXZlcmVkIGJ5IHRoZSB0b2tlbml6
ZXIKQEAgLTg5LDcgKzc3LDcgQEAgcHVibGljOgogICAgICAqLwogICAgIHZvaWQgcmVzZXQoKTsK
IAotICAgIGJvb2wgc2tpcE1vZGUoKSBjb25zdCB7IHJldHVybiAoZGlzY2FyZF91bnRpbCAhPSAw
KTsgfQorICAgIGJvb2wgc2tpcE1vZGUoKSBjb25zdCB7IHJldHVybiAhZGlzY2FyZF91bnRpbC5p
c051bGwoKTsgfQogICAgIGJvb2wgbm9TcGFjZXMoKSBjb25zdCB7IHJldHVybiAhaW5Cb2R5OyB9
CiAgICAgYm9vbCBzZWxlY3RNb2RlKCkgY29uc3QgeyByZXR1cm4gaW5TZWxlY3Q7IH0KIApAQCAt
OTcsMzEgKzg1LDMyIEBAIHB1YmxpYzoKICAgICBET006OkRvY3VtZW50UHRyICpkb2NQdHIoKSBj
b25zdCB7IHJldHVybiBkb2N1bWVudDsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgdm9pZCBzZXRDdXJy
ZW50KERPTTo6Tm9kZUltcGwgKm5ld0N1cnJlbnQpOworICAgIHZvaWQgc2V0Q3VycmVudChET006
Ok5vZGVJbXBsKiBuZXdDdXJyZW50KTsKKyAgICB2b2lkIHNldFNraXBNb2RlKGNvbnN0IERPTTo6
UXVhbGlmaWVkTmFtZSYgcU5hbWUpIHsgZGlzY2FyZF91bnRpbCA9IHFOYW1lLmxvY2FsTmFtZSgp
OyB9CiAKICAgICBLSFRNTFZpZXcgKkhUTUxXaWRnZXQ7CiAgICAgRE9NOjpEb2N1bWVudFB0ciAq
ZG9jdW1lbnQ7CiAKICAgICAvKgotICAgICAqIGdlbmVyYXRlIGFuIGVsZW1lbnQgZnJvbSB0aGUg
dG9rZW4KKyAgICAgKiBnZW5lcmF0ZSBhIG5vZGUgZnJvbSB0aGUgdG9rZW4KICAgICAgKi8KLSAg
ICBET006Ok5vZGVJbXBsICpnZXRFbGVtZW50KGtodG1sOjpUb2tlbiAqKTsKKyAgICBET006Ok5v
ZGVJbXBsICpnZXROb2RlKGtodG1sOjpUb2tlbiAqKTsKIAogICAgIHZvaWQgcHJvY2Vzc0Nsb3Nl
VGFnKGtodG1sOjpUb2tlbiAqKTsKIAogICAgIGJvb2wgaW5zZXJ0Tm9kZShET006Ok5vZGVJbXBs
ICpuLCBib29sIGZsYXQgPSBmYWxzZSk7CisgICAgYm9vbCBoYW5kbGVFcnJvcihET006Ok5vZGVJ
bXBsKiBuLCBib29sIGZsYXQsIGNvbnN0IERPTTo6QXRvbWljU3RyaW5nJiBsb2NhbE5hbWUsIGlu
dCB0YWdQcmlvcml0eSk7CisgICAgCisgICAgLy8gVGhlIGN1cnJlbnRseSBhY3RpdmUgZWxlbWVu
dCAodGhlIG9uZSBuZXcgZWxlbWVudHMgd2lsbCBiZSBhZGRlZCB0bykuICBDYW4gYmUgYSBEb2N1
bWVudEZyYWdtZW50LCBhIERvY3VtZW50IG9yIGFuIEVsZW1lbnQuCisgICAgRE9NOjpOb2RlSW1w
bCogY3VycmVudDsKIAotICAgIC8qCi0gICAgICogVGhlIGN1cnJlbnRseSBhY3RpdmUgZWxlbWVu
dCAodGhlIG9uZSBuZXcgZWxlbWVudHMgd2lsbCBiZSBhZGRlZCB0bykKLSAgICAgKi8KLSAgICBE
T006Ok5vZGVJbXBsICpjdXJyZW50OwogICAgIGJvb2wgY3VycmVudElzUmVmZXJlbmNlZDsKIAog
ICAgIEhUTUxTdGFja0VsZW0gKmJsb2NrU3RhY2s7CiAKLSAgICB2b2lkIHB1c2hCbG9jayggaW50
IF9pZCwgaW50IF9sZXZlbCk7Ci0KLSAgICB2b2lkIHBvcEJsb2NrKCBpbnQgX2lkICk7CisgICAg
dm9pZCBwdXNoQmxvY2soY29uc3QgRE9NOjpBdG9taWNTdHJpbmcmIHRhZ05hbWUsIGludCBfbGV2
ZWwpOworICAgIHZvaWQgcG9wQmxvY2soY29uc3QgRE9NOjpBdG9taWNTdHJpbmcmIHRhZ05hbWUp
OworICAgIHZvaWQgcG9wQmxvY2soY29uc3QgRE9NOjpRdWFsaWZpZWROYW1lJiBxTmFtZSkgeyBy
ZXR1cm4gcG9wQmxvY2socU5hbWUubG9jYWxOYW1lKCkpOyB9IC8vIENvbnZlbmllbmNlIGZ1bmN0
aW9uIGZvciByZWFkYWJpbGl0eS4KICAgICB2b2lkIHBvcE9uZUJsb2NrKGJvb2wgZGVsQmxvY2sg
PSB0cnVlKTsKICAgICB2b2lkIHBvcElubGluZUJsb2NrcygpOwogCkBAIC0xMjksMTYgKzExOCwx
OCBAQCBwcm90ZWN0ZWQ6CiAKICAgICB2b2lkIGNyZWF0ZUhlYWQoKTsKIAotICAgIGJvb2wgaXNS
ZXNpZHVhbFN0eWxlVGFnKGludCBfaWQpOwotICAgIGJvb2wgaXNBZmZlY3RlZEJ5UmVzaWR1YWxT
dHlsZShpbnQgX2lkKTsKKyAgICBib29sIGlzUmVzaWR1YWxTdHlsZVRhZyhjb25zdCBET006OkF0
b21pY1N0cmluZyYgdGFnTmFtZSk7CisgICAgYm9vbCBpc0FmZmVjdGVkQnlSZXNpZHVhbFN0eWxl
KGNvbnN0IERPTTo6QXRvbWljU3RyaW5nJiB0YWdOYW1lKTsKICAgICB2b2lkIGhhbmRsZVJlc2lk
dWFsU3R5bGVDbG9zZVRhZ0Fjcm9zc0Jsb2NrcyhIVE1MU3RhY2tFbGVtKiBlbGVtKTsKICAgICB2
b2lkIHJlb3BlblJlc2lkdWFsU3R5bGVUYWdzKEhUTUxTdGFja0VsZW0qIGVsZW0sIERPTTo6Tm9k
ZUltcGwqIG1hbGZvcm1lZFRhYmxlUGFyZW50KTsKIAotICAgIGJvb2wgYWxsb3dOZXN0ZWRSZWR1
bmRhbnRUYWcoaW50IF9pZCk7CisgICAgYm9vbCBhbGxvd05lc3RlZFJlZHVuZGFudFRhZyhjb25z
dCBET006OkF0b21pY1N0cmluZyYgdGFnTmFtZSk7CiAgICAgCi0gICAgc3RhdGljIGJvb2wgaXNI
ZWFkZXJUYWcoaW50IF9pZCk7CisgICAgc3RhdGljIGJvb2wgaXNIZWFkZXJUYWcoY29uc3QgRE9N
OjpBdG9taWNTdHJpbmcmIHRhZ05hbWUpOwogICAgIHZvaWQgcG9wTmVzdGVkSGVhZGVyVGFnKCk7
CiAKKyAgICBib29sIGlzSW5saW5lKERPTTo6Tm9kZUltcGwqIG5vZGUpIGNvbnN0OworICAgIAog
ICAgIC8qCiAgICAgICogY3VycmVudGx5IGFjdGl2ZSBmb3JtCiAgICAgICovCkBAIC0xNzUsMTgg
KzE2NiwxMiBAQCBwcm90ZWN0ZWQ6CiAgICAgLyoKICAgICAgKiB0ZWxscyB0aGUgcGFyc2VyIHRv
IGRpc2NhcmQgYWxsIHRhZ3MsIHVudGlsIGl0IHJlYWNoZXMgdGhlIG9uZSBzcGVjaWZpZWQKICAg
ICAgKi8KLSAgICBpbnQgZGlzY2FyZF91bnRpbDsKKyAgICBET006OkF0b21pY1N0cmluZyBkaXNj
YXJkX3VudGlsOwogCiAgICAgYm9vbCBoZWFkTG9hZGVkOwogICAgIGludCBpblN0cmF5VGFibGVD
b250ZW50OwogCiAgICAgYm9vbCBpbmNsdWRlc0NvbW1lbnRzSW5ET007Ci0gICAgCi0gICAgdXNo
b3J0IGZvcmJpZGRlblRhZ1tJRF9MQVNUX1RBRyArIDFdOwotICAgIAotI2lmIFNQRUVEX0RFQlVH
ID4gMAotICAgIFFUaW1lIHF0OwotI2VuZGlmCiB9OwogCiAjZW5kaWYgLy8gSFRNTFBBUlNFUl9I
CkluZGV4OiBraHRtbC9odG1sL2h0bWx0b2tlbml6ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbHRva2VuaXplci5jcHAsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuOTMKZGlmZiAtdSAtcCAtcjEuOTMga2h0bWwvaHRtbC9odG1sdG9rZW5p
emVyLmNwcAotLS0ga2h0bWwvaHRtbC9odG1sdG9rZW5pemVyLmNwcAkxNyBKdW4gMjAwNSAyMDow
MDoxMCAtMDAwMAkxLjkzCisrKyBraHRtbC9odG1sL2h0bWx0b2tlbml6ZXIuY3BwCTI0IEp1biAy
MDA1IDAzOjEwOjI3IC0wMDAwCkBAIC0zOSw3ICszOSw2IEBACiAjaW5jbHVkZSAiaHRtbC9odG1s
dG9rZW5pemVyLmgiCiAjaW5jbHVkZSAiaHRtbC9odG1sX2RvY3VtZW50aW1wbC5oIgogI2luY2x1
ZGUgImh0bWwvaHRtbHBhcnNlci5oIgotI2luY2x1ZGUgImh0bWwvZHRkLmgiCiAKICNpbmNsdWRl
ICJtaXNjL2xvYWRlci5oIgogI2luY2x1ZGUgIm1pc2MvaHRtbGhhc2hlcy5oIgpAQCAtNjMsNyAr
NjIsMTAgQEAgdXNpbmcgRE9NOjpET01TdHJpbmc7CiB1c2luZyBET006OkRPTVN0cmluZ0ltcGw7
CiB1c2luZyBET006OkRvY3VtZW50SW1wbDsKIHVzaW5nIERPTTo6ZW1wdHlBdG9tOwotdXNpbmcg
RE9NOjplbmRUYWdSZXF1aXJlbWVudDsKK3VzaW5nIERPTTo6Y29tbWVudEF0b207Cit1c2luZyBE
T006Om51bGxBdG9tOwordXNpbmcgRE9NOjp0ZXh0QXRvbTsKK3VzaW5nIERPTTo6SFRNTE5hbWVz
OwogCiAvLyB0dXJuIG9mZiBpbmxpbmluZyB0byB2b2lkIHdhcm5pbmcgd2l0aCBuZXdlciBnY2MK
ICN1bmRlZiBfX2lubGluZQpAQCAtMjM5LDcgKzI0MSw3IEBAIEhUTUxUb2tlbml6ZXI6OkhUTUxU
b2tlbml6ZXIoRE9NOjpEb2N1bWUKICAgICBzY3JpcHRDb2RlID0gMDsKICAgICBzY3JpcHRDb2Rl
U2l6ZSA9IHNjcmlwdENvZGVNYXhTaXplID0gc2NyaXB0Q29kZVJlc3luYyA9IDA7CiAgICAgY2hh
cnNldHMgPSBLR2xvYmFsOjpjaGFyc2V0cygpOwotICAgIHBhcnNlciA9IG5ldyBLSFRNTFBhcnNl
cihfdmlldywgX2RvYywgaW5jbHVkZXNDb21tZW50cyk7CisgICAgcGFyc2VyID0gbmV3IEhUTUxQ
YXJzZXIoX3ZpZXcsIF9kb2MsIGluY2x1ZGVzQ29tbWVudHMpOwogICAgIG1fZXhlY3V0aW5nU2Ny
aXB0ID0gMDsKICAgICBsb2FkaW5nRXh0U2NyaXB0ID0gZmFsc2U7CiAgICAgb25Ib2xkID0gZmFs
c2U7CkBAIC0yNTksNyArMjYxLDcgQEAgSFRNTFRva2VuaXplcjo6SFRNTFRva2VuaXplcihET006
OkRvY3VtZQogICAgIHNjcmlwdENvZGUgPSAwOwogICAgIHNjcmlwdENvZGVTaXplID0gc2NyaXB0
Q29kZU1heFNpemUgPSBzY3JpcHRDb2RlUmVzeW5jID0gMDsKICAgICBjaGFyc2V0cyA9IEtHbG9i
YWw6OmNoYXJzZXRzKCk7Ci0gICAgcGFyc2VyID0gbmV3IEtIVE1MUGFyc2VyKGksIF9kb2MsIGlu
Y2x1ZGVzQ29tbWVudHMpOworICAgIHBhcnNlciA9IG5ldyBIVE1MUGFyc2VyKGksIF9kb2MsIGlu
Y2x1ZGVzQ29tbWVudHMpOwogICAgIG1fZXhlY3V0aW5nU2NyaXB0ID0gMDsKICAgICBsb2FkaW5n
RXh0U2NyaXB0ID0gZmFsc2U7CiAgICAgb25Ib2xkID0gZmFsc2U7CkBAIC00NTEsMTAgKzQ1Mywx
MCBAQCB2b2lkIEhUTUxUb2tlbml6ZXI6OnBhcnNlU3BlY2lhbChUb2tlbml6CiAgICAgICAgICAg
ICBlbHNlIHsKICAgICAgICAgICAgICAgICBwcm9jZXNzTGlzdGluZyhUb2tlbml6ZXJTdHJpbmco
c2NyaXB0Q29kZSwgc2NyaXB0Q29kZVNpemUpKTsKICAgICAgICAgICAgICAgICBwcm9jZXNzVG9r
ZW4oKTsKLSAgICAgICAgICAgICAgICBpZiAoIHN0eWxlICkgICAgICAgICB7IGN1cnJUb2tlbi5p
ZCA9IElEX1NUWUxFICsgSURfQ0xPU0VfVEFHOyB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAo
IHRleHRhcmVhICkgeyBjdXJyVG9rZW4uaWQgPSBJRF9URVhUQVJFQSArIElEX0NMT1NFX1RBRzsg
fQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKCB0aXRsZSApIHsgY3VyclRva2VuLmlkID0gSURf
VElUTEUgKyBJRF9DTE9TRV9UQUc7IH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmICggeG1wICkg
IHsgY3VyclRva2VuLmlkID0gSURfWE1QICsgSURfQ0xPU0VfVEFHOyB9CisgICAgICAgICAgICAg
ICAgaWYgKCBzdHlsZSApICAgICAgICAgeyBjdXJyVG9rZW4udGFnTmFtZSA9IEhUTUxOYW1lczo6
c3R5bGUoKS5sb2NhbE5hbWUoKTsgY3VyclRva2VuLmJlZ2luVGFnID0gZmFsc2U7IH0KKyAgICAg
ICAgICAgICAgICBlbHNlIGlmICggdGV4dGFyZWEgKSB7IGN1cnJUb2tlbi50YWdOYW1lID0gSFRN
TE5hbWVzOjp0ZXh0YXJlYSgpLmxvY2FsTmFtZSgpOyBjdXJyVG9rZW4uYmVnaW5UYWcgPSBmYWxz
ZTsgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKCB0aXRsZSApIHsgY3VyclRva2VuLnRhZ05h
bWUgPSBIVE1MTmFtZXM6OnRpdGxlKCkubG9jYWxOYW1lKCk7IGN1cnJUb2tlbi5iZWdpblRhZyA9
IGZhbHNlOyB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoIHhtcCApICB7IGN1cnJUb2tlbi50
YWdOYW1lID0gSFRNTE5hbWVzOjp4bXAoKS5sb2NhbE5hbWUoKTsgY3VyclRva2VuLmJlZ2luVGFn
ID0gZmFsc2U7IH0KICAgICAgICAgICAgICAgICBwcm9jZXNzVG9rZW4oKTsKICAgICAgICAgICAg
ICAgICBzdHlsZSA9IHNjcmlwdCA9IHN0eWxlID0gdGV4dGFyZWEgPSB0aXRsZSA9IHhtcCA9IGZh
bHNlOwogICAgICAgICAgICAgICAgIHRxdW90ZSA9IE5vUXVvdGU7CkBAIC01MjQsNyArNTI2LDgg
QEAgdm9pZCBIVE1MVG9rZW5pemVyOjpzY3JpcHRIYW5kbGVyKCkKICAgICBwcm9jZXNzTGlzdGlu
ZyhUb2tlbml6ZXJTdHJpbmcoc2NyaXB0Q29kZSwgc2NyaXB0Q29kZVNpemUpKTsKICAgICBRU3Ry
aW5nIGV4U2NyaXB0KCBidWZmZXIsIGRlc3QtYnVmZmVyICk7CiAgICAgcHJvY2Vzc1Rva2VuKCk7
Ci0gICAgY3VyclRva2VuLmlkID0gSURfU0NSSVBUICsgSURfQ0xPU0VfVEFHOworICAgIGN1cnJU
b2tlbi50YWdOYW1lID0gSFRNTE5hbWVzOjpzY3JpcHQoKS5sb2NhbE5hbWUoKTsKKyAgICBjdXJy
VG9rZW4uYmVnaW5UYWcgPSBmYWxzZTsKICAgICBwcm9jZXNzVG9rZW4oKTsKIAogICAgIFRva2Vu
aXplclN0cmluZyAqc2F2ZWRQcmVwZW5kaW5nU3JjID0gY3VycmVudFByZXBlbmRpbmdTcmM7CkBA
IC03MDEsMTAgKzcwNCwxMSBAQCB2b2lkIEhUTUxUb2tlbml6ZXI6OnBhcnNlQ29tbWVudChUb2tl
bml6CiAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja1NjcmlwdEJ1ZmZlcigpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgc2NyaXB0Q29kZVsgc2NyaXB0Q29kZVNpemUgXSA9IDA7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBzY3JpcHRDb2RlWyBzY3JpcHRDb2RlU2l6ZSArIDEgXSA9IDA7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBjdXJyVG9rZW4uaWQgPSBJRF9DT01NRU5UOworICAg
ICAgICAgICAgICAgICAgICAgICAgY3VyclRva2VuLnRhZ05hbWUgPSBjb21tZW50QXRvbTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NMaXN0aW5nKFRva2VuaXplclN0cmluZyhzY3Jp
cHRDb2RlLCBzY3JpcHRDb2RlU2l6ZSAtIGVuZENoYXJzQ291bnQpKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIHByb2Nlc3NUb2tlbigpOwotICAgICAgICAgICAgICAgICAgICAgICAgY3VyclRv
a2VuLmlkID0gSURfQ09NTUVOVCArIElEX0NMT1NFX1RBRzsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGN1cnJUb2tlbi50YWdOYW1lID0gY29tbWVudEF0b207CisgICAgICAgICAgICAgICAgICAg
ICAgICBjdXJyVG9rZW4uYmVnaW5UYWcgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAg
IHByb2Nlc3NUb2tlbigpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgIHNjcmlwdENvZGVTaXplID0gMDsKQEAgLTEwNDcsMjYgKzEwNTEsMTYgQEAgdm9pZCBIVE1M
VG9rZW5pemVyOjpwYXJzZVRhZyhUb2tlbml6ZXJTdAogICAgICAgICAgICAgICAgICAgICAvLyBT
dGFydCBUYWcKICAgICAgICAgICAgICAgICAgICAgYmVnaW5UYWcgPSB0cnVlOwogCi0gICAgICAg
ICAgICAgICAgLy8gQWNjZXB0IGVtcHR5IHhtbCB0YWdzIGxpa2UgPGJyLz4uICBXZSB0cmltIG9m
ZiB0aGUgIi8iIHNvIHRoYXQgd2hlbiB3ZSBjYWxsCi0gICAgICAgICAgICAgICAgLy8gZ2V0VGFn
SUQsIHdlJ2xsIGxvb2sgdXAgImJyIiBhcyB0aGUgdGFnIG5hbWUgYW5kIG5vdCAiYnIvIi4KKyAg
ICAgICAgICAgICAgICAvLyBJZ25vcmUgdGhlIC8gaW4gZmFrZSB4bWwgdGFncyBsaWtlIDxici8+
LiAgV2UgdHJpbSBvZmYgdGhlICIvIiBzbyB0aGF0IHdlJ2xsIGdldCAiYnIiIGFzIHRoZSB0YWcg
bmFtZSBhbmQgbm90ICJici8iLgogICAgICAgICAgICAgICAgIGlmKGxlbiA+IDEgJiYgcHRyW2xl
bi0xXSA9PSAnLycgKQogICAgICAgICAgICAgICAgICAgICBwdHJbLS1sZW5dID0gJ1wwJzsKIAot
ICAgICAgICAgICAgICAgIC8vIExvb2sgdXAgdGhlIHRhZ0lEIGZvciB0aGUgc3BlY2lmaWVkIHRh
ZyBuYW1lIChub3cgdGhhdCB3ZSd2ZSBzaGF2ZWQgb2ZmIGFueQotICAgICAgICAgICAgICAgIC8v
IGludmFsaWQgLyB0aGF0IG1pZ2h0IGhhdmUgZm9sbG93ZWQgdGhlIG5hbWUpLgotICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIHNob3J0IHRhZ0lEID0gZ2V0VGFnSUQocHRyLCBsZW4pOwotICAgICAg
ICAgICAgICAgIGlmICghdGFnSUQpIHsKLSAgICAgICAgICAgICAgICAgICAgRE9NU3RyaW5nIHRh
Z05hbWUocHRyKTsKLSAgICAgICAgICAgICAgICAgICAgRG9jdW1lbnRJbXBsICpkb2MgPSBwYXJz
ZXItPmRvY1B0cigpLT5kb2N1bWVudCgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoZG9jLT5p
c1ZhbGlkTmFtZSh0YWdOYW1lKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHRhZ0lEID0gcGFy
c2VyLT5kb2NQdHIoKS0+ZG9jdW1lbnQoKS0+dGFnSWQoMCwgdGFnTmFtZS5pbXBsZW1lbnRhdGlv
bigpLCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICh0YWdJ
RCkgewotI2lmZGVmIFRPS0VOX0RFQlVHCi0gICAgICAgICAgICAgICAgICAgIFFDU3RyaW5nIHRt
cChwdHIsIGxlbisxKTsKLSAgICAgICAgICAgICAgICAgICAga2REZWJ1ZyggNjAzNiApIDw8ICJm
b3VuZCB0YWcgaWQ9IiA8PCB0YWdJRCA8PCAiOiAiIDw8IHRtcC5kYXRhKCkgPDwgZW5kbDsKLSNl
bmRpZgotICAgICAgICAgICAgICAgICAgICBjdXJyVG9rZW4uaWQgPSBiZWdpblRhZyA/IHRhZ0lE
IDogdGFnSUQgKyBJRF9DTE9TRV9UQUc7CisgICAgICAgICAgICAgICAgLy8gTm93IHRoYXQgd2Un
dmUgc2hhdmVkIG9mZiBhbnkgaW52YWxpZCAvIHRoYXQgbWlnaHQgaGF2ZSBmb2xsb3dlZCB0aGUg
bmFtZSksIG1ha2UgdGhlIHRhZy4KKyAgICAgICAgICAgICAgICBET01TdHJpbmcgdGFnTmFtZShw
dHIpOworICAgICAgICAgICAgICAgIERvY3VtZW50SW1wbCAqZG9jID0gcGFyc2VyLT5kb2NQdHIo
KS0+ZG9jdW1lbnQoKTsKKyAgICAgICAgICAgICAgICBpZiAoZG9jLT5pc1ZhbGlkTmFtZSh0YWdO
YW1lKSkgeworICAgICAgICAgICAgICAgICAgICBjdXJyVG9rZW4udGFnTmFtZSA9IEF0b21pY1N0
cmluZyh0YWdOYW1lLmxvd2VyKCkpOyAvLyBXZSBoYXZlIHRvIGNhbm9uaWNhbGl6ZSBvbiBsb3dl
ci1jYXNlLgorICAgICAgICAgICAgICAgICAgICBjdXJyVG9rZW4uYmVnaW5UYWcgPSBiZWdpblRh
ZzsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZGVzdCA9IGJ1ZmZlcjsKICAg
ICAgICAgICAgICAgICB0YWcgPSBTZWFyY2hBdHRyaWJ1dGU7CkBAIC0xMTE4LDE1ICsxMTEyLDYg
QEAgdm9pZCBIVE1MVG9rZW5pemVyOjpwYXJzZVRhZyhUb2tlbml6ZXJTdAogICAgICAgICAgICAg
ICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0ck5hbWUg
PSBRU3RyaW5nOjpmcm9tTGF0aW4xKFFDU3RyaW5nKGNCdWZmZXIsIGNCdWZmZXJQb3MrMSkuZGF0
YSgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyTmFtZVByZXNlbnQgPSAhYXR0
ck5hbWUuaXNFbXB0eSgpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBp
cyBhIGRlbGliZXJhdGUgcXVpcmsgdG8gbWF0Y2ggTW96aWxsYSBhbmQgT3BlcmEuICBXZSBoYXZl
IHRvIGRvIHRoaXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzaW5jZSBzaXRlcyB0
aGF0IHVzZSB0aGUgInN0YW5kYXJkcy1jb21wbGlhbnQiIHBhdGggc29tZXRpbWVzIHNlbmQKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyA8c2NyaXB0IHNyYz0iZm9vLmpzIi8+LiAgQm90
aCBNb3ogYW5kIE9wZXJhIHdpbGwgaG9ub3IgdGhpcywgZGVzcGl0ZSBpdAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIGJlaW5nIGJvZ3VzIEhUTUwuICBUaGV5IGRvIG5vdCBob25vciB0
aGUgIi8iIGZvciBvdGhlciB0YWdzLiAgVGhpcyBiZWhhdmlvcgotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIGFsc28gZGV2aWF0ZXMgZnJvbSBXaW5JRSwgYnV0IGluIHRoaXMgY2FzZSB3
ZSdsbCBqdXN0IGNvcHkgTW96IGFuZCBPcGVyYS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoY3VyclRva2VuLmlkID09IElEX1NDUklQVCAmJiBjdXJjaGFyID09ICc+JyAmJgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyTmFtZSA9PSAiLyIpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGN1cnJUb2tlbi5mbGF0ID0gdHJ1ZTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
ICAgICAgICAgZGVzdCA9IGJ1ZmZlcjsKQEAgLTEzMjgsMTggKzEzMTMsMTUgQEAgdm9pZCBIVE1M
VG9rZW5pemVyOjpwYXJzZVRhZyhUb2tlbml6ZXJTdAogICAgICAgICAgICAgaWYgKCpzcmMgIT0g
JzwnKQogICAgICAgICAgICAgICAgICsrc3JjOwogCi0gICAgICAgICAgICBpZiAoICFjdXJyVG9r
ZW4uaWQgKSAvL3N0b3AgaWYgdGFnIGlzIHVua25vd24KKyAgICAgICAgICAgIGlmIChjdXJyVG9r
ZW4udGFnTmFtZSA9PSBudWxsQXRvbSkgLy9zdG9wIGlmIHRhZyBpcyB1bmtub3duCiAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgICAgICB1aW50IHRhZ0lEID0gY3VyclRva2VuLmlk
OworICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lID0gY3VyclRva2VuLnRh
Z05hbWU7CiAjaWYgZGVmaW5lZChUT0tFTl9ERUJVRykgJiYgVE9LRU5fREVCVUcgPiAwCiAgICAg
ICAgICAgICBrZERlYnVnKCA2MDM2ICkgPDwgImFwcGVuZGluZyBUYWc6ICIgPDwgdGFnSUQgPDwg
ZW5kbDsKICNlbmRpZgotICAgICAgICAgICAgYm9vbCBiZWdpblRhZyA9ICFjdXJyVG9rZW4uZmxh
dCAmJiAodGFnSUQgPD0gSURfQ0xPU0VfVEFHKTsKLQotICAgICAgICAgICAgaWYgKHRhZ0lEID4g
SURfQ0xPU0VfVEFHKQotICAgICAgICAgICAgICAgIHRhZ0lEIC09IElEX0NMT1NFX1RBRzsKLSAg
ICAgICAgICAgIGVsc2UgaWYgKHRhZ0lEID09IElEX1NDUklQVCkgeworICAgICAgICAgICAgYm9v
bCBiZWdpblRhZyA9ICFjdXJyVG9rZW4uZmxhdCAmJiBjdXJyVG9rZW4uYmVnaW5UYWc7CisgICAg
ICAgICAgICBpZiAoYmVnaW5UYWcgJiYgY3VyclRva2VuLnRhZ05hbWUgPT0gSFRNTE5hbWVzOjpz
Y3JpcHQoKSkgewogICAgICAgICAgICAgICAgIEF0dHJpYnV0ZUltcGwqIGEgPSAwOwogICAgICAg
ICAgICAgICAgIGJvb2wgZm91bmRUeXBlQXR0cmlidXRlID0gZmFsc2U7CiAgICAgICAgICAgICAg
ICAgc2NyaXB0U3JjID0gUVN0cmluZzo6bnVsbDsKQEAgLTE0MTYsNzAgKzEzOTgsNTMgQEAgdm9p
ZCBIVE1MVG9rZW5pemVyOjpwYXJzZVRhZyhUb2tlbml6ZXJTdAogCiAgICAgICAgICAgICAvLyB3
ZSBoYXZlIHRvIHRha2UgY2FyZSB0byBjbG9zZSB0aGUgcHJlIGJsb2NrIGluCiAgICAgICAgICAg
ICAvLyBjYXNlIHdlIGVuY291bnRlciBhbiB1bmFsbG93ZWQgZWxlbWVudC4uLi4KLSAgICAgICAg
ICAgIGlmKHByZSAmJiBiZWdpblRhZyAmJiAhRE9NOjpjaGVja0NoaWxkKElEX1BSRSwgdGFnSUQs
ICFwYXJzZXItPmRvYygpLT5pbkNvbXBhdE1vZGUoKSkpIHsKLSAgICAgICAgICAgICAgICBrZERl
YnVnKDYwMzYpIDw8ICIgbm90IGFsbG93ZWQgaW4gPHByZT4gIiA8PCAoaW50KXRhZ0lEIDw8IGVu
ZGw7CisgICAgICAgICAgICBpZiAocHJlICYmIGJlZ2luVGFnIC8qIEZJWE1FOiBjaGVja0NoaWxk
ISEhICYmICFET006OmNoZWNrQ2hpbGQoSURfUFJFLCB0YWdJRCwgIXBhcnNlci0+ZG9jKCktPmlu
Q29tcGF0TW9kZSgpKSovKQogICAgICAgICAgICAgICAgIHByZSA9IGZhbHNlOwotICAgICAgICAg
ICAgfQogCi0gICAgICAgICAgICBzd2l0Y2goIHRhZ0lEICkgewotICAgICAgICAgICAgY2FzZSBJ
RF9QUkU6CisgICAgICAgICAgICBpZiAodGFnTmFtZSA9PSBIVE1MTmFtZXM6OnByZSgpKSB7CiAg
ICAgICAgICAgICAgICAgcHJlUG9zID0gMDsKICAgICAgICAgICAgICAgICBwcmUgPSBiZWdpblRh
ZzsKICAgICAgICAgICAgICAgICBkaXNjYXJkID0gTEZEaXNjYXJkOyAvLyBEaXNjYXJkIHRoZSBm
aXJzdCBMRiBhZnRlciB3ZSBvcGVuIGEgcHJlLgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgY2FzZSBJRF9TQ1JJUFQ6CisgICAgICAgICAgICB9IGVsc2UgaWYgKHRhZ05hbWUg
PT0gSFRNTE5hbWVzOjpzY3JpcHQoKSkgewogICAgICAgICAgICAgICAgIGlmIChiZWdpblRhZykg
ewogICAgICAgICAgICAgICAgICAgICBzZWFyY2hTdG9wcGVyID0gc2NyaXB0RW5kOwogICAgICAg
ICAgICAgICAgICAgICBzZWFyY2hTdG9wcGVyTGVuID0gODsKICAgICAgICAgICAgICAgICAgICAg
c2NyaXB0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgcGFyc2VTcGVjaWFsKHNyYyk7CiAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRhZ0lEIDw9IElEX0NM
T1NFX1RBRykgeyAvLyBIYW5kbGUgPHNjcmlwdCBzcmM9ImZvbyIvPgotICAgICAgICAgICAgICAg
ICAgICBzY3JpcHQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBzY3JpcHRIYW5kbGVyKCk7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
Y2FzZSBJRF9TVFlMRToKKyAgICAgICAgICAgIH0gZWxzZSBpZiAodGFnTmFtZSA9PSBIVE1MTmFt
ZXM6OnN0eWxlKCkpIHsKICAgICAgICAgICAgICAgICBpZiAoYmVnaW5UYWcpIHsKICAgICAgICAg
ICAgICAgICAgICAgc2VhcmNoU3RvcHBlciA9IHN0eWxlRW5kOwogICAgICAgICAgICAgICAgICAg
ICBzZWFyY2hTdG9wcGVyTGVuID0gNzsKICAgICAgICAgICAgICAgICAgICAgc3R5bGUgPSB0cnVl
OwogICAgICAgICAgICAgICAgICAgICBwYXJzZVNwZWNpYWwoc3JjKTsKICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIElEX1RFWFRBUkVB
OgorICAgICAgICAgICAgfSBlbHNlIGlmICh0YWdOYW1lID09IEhUTUxOYW1lczo6dGV4dGFyZWEo
KSkgewogICAgICAgICAgICAgICAgIGlmKGJlZ2luVGFnKSB7CiAgICAgICAgICAgICAgICAgICAg
IHNlYXJjaFN0b3BwZXIgPSB0ZXh0YXJlYUVuZDsKICAgICAgICAgICAgICAgICAgICAgc2VhcmNo
U3RvcHBlckxlbiA9IDEwOwogICAgICAgICAgICAgICAgICAgICB0ZXh0YXJlYSA9IHRydWU7CiAg
ICAgICAgICAgICAgICAgICAgIHBhcnNlU3BlY2lhbChzcmMpOwogICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgSURfVElUTEU6Ci0gICAg
ICAgICAgICAgICAgaWYgKGJlZ2luVGFnKSB7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHRhZ05h
bWUgPT0gSFRNTE5hbWVzOjp0aXRsZSgpKSB7CisgICAgICAgICAgICAgICAgIGlmIChiZWdpblRh
ZykgewogICAgICAgICAgICAgICAgICAgICBzZWFyY2hTdG9wcGVyID0gdGl0bGVFbmQ7CiAgICAg
ICAgICAgICAgICAgICAgIHNlYXJjaFN0b3BwZXJMZW4gPSA3OwogICAgICAgICAgICAgICAgICAg
ICB0aXRsZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIHBhcnNlU3BlY2lhbChzcmMpOwog
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNh
c2UgSURfWE1QOgorICAgICAgICAgICAgfSBlbHNlIGlmICh0YWdOYW1lID09IEhUTUxOYW1lczo6
eG1wKCkpIHsKICAgICAgICAgICAgICAgICBpZiAoYmVnaW5UYWcpIHsKICAgICAgICAgICAgICAg
ICAgICAgc2VhcmNoU3RvcHBlciA9IHhtcEVuZDsKICAgICAgICAgICAgICAgICAgICAgc2VhcmNo
U3RvcHBlckxlbiA9IDU7CiAgICAgICAgICAgICAgICAgICAgIHhtcCA9IHRydWU7CiAgICAgICAg
ICAgICAgICAgICAgIHBhcnNlU3BlY2lhbChzcmMpOwogICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgSURfU0VMRUNUOgorICAgICAgICAg
ICAgfSBlbHNlIGlmICh0YWdOYW1lID09IEhUTUxOYW1lczo6c2VsZWN0KCkpCiAgICAgICAgICAg
ICAgICAgc2VsZWN0ID0gYmVnaW5UYWc7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICBjYXNlIElEX1BMQUlOVEVYVDoKKyAgICAgICAgICAgIGVsc2UgaWYgKHRhZ05hbWUgPT0g
SFRNTE5hbWVzOjpwbGFpbnRleHQoKSkKICAgICAgICAgICAgICAgICBwbGFpbnRleHQgPSBiZWdp
blRhZzsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgcmV0dXJuOyAvLyBGaW5pc2hlZCBwYXJzaW5nIHRhZyEKKyAgICAgICAgICAgIHJldHVybjsg
Ly8gRmluaXNoZWQgcGFyc2luZyB0YWc7CiAgICAgICAgIH0KICAgICAgICAgfSAvLyBlbmQgc3dp
dGNoCiAgICAgfQpAQCAtMTk4OSwxMCArMTk1NCwxMCBAQCB2b2lkIEhUTUxUb2tlbml6ZXI6OnBy
b2Nlc3NUb2tlbigpCiAjZW5kaWYKICAgICAgICAgY3VyclRva2VuLnRleHQgPSBuZXcgRE9NU3Ry
aW5nSW1wbCggYnVmZmVyLCBkZXN0IC0gYnVmZmVyICk7CiAgICAgICAgIGN1cnJUb2tlbi50ZXh0
LT5yZWYoKTsKLSAgICAgICAgaWYgKGN1cnJUb2tlbi5pZCAhPSBJRF9DT01NRU5UKQotICAgICAg
ICAgICAgY3VyclRva2VuLmlkID0gSURfVEVYVDsKKyAgICAgICAgaWYgKGN1cnJUb2tlbi50YWdO
YW1lICE9IGNvbW1lbnRBdG9tKQorICAgICAgICAgICAgY3VyclRva2VuLnRhZ05hbWUgPSB0ZXh0
QXRvbTsKICAgICB9Ci0gICAgZWxzZSBpZighY3VyclRva2VuLmlkKSB7CisgICAgZWxzZSBpZiAo
Y3VyclRva2VuLnRhZ05hbWUgPT0gbnVsbEF0b20pIHsKICAgICAgICAgY3VyclRva2VuLnJlc2V0
KCk7CiAgICAgICAgIGlmIChqc1Byb3h5KQogICAgICAgICAgICAganNQcm94eS0+c2V0RXZlbnRI
YW5kbGVyTGluZW5vKGxpbmVubytzcmMubGluZUNvdW50KCkpOwpJbmRleDoga2h0bWwvaHRtbC9o
dG1sdG9rZW5pemVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0
bWwvaHRtbC9odG1sdG9rZW5pemVyLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzQKZGlmZiAt
dSAtcCAtcjEuMzQga2h0bWwvaHRtbC9odG1sdG9rZW5pemVyLmgKLS0tIGtodG1sL2h0bWwvaHRt
bHRva2VuaXplci5oCTExIE1heSAyMDA1IDA1OjQ5OjM0IC0wMDAwCTEuMzQKKysrIGtodG1sL2h0
bWwvaHRtbHRva2VuaXplci5oCTI0IEp1biAyMDA1IDAzOjEwOjI4IC0wMDAwCkBAIC0zNCw4ICsz
NCw2IEBACiAjaW5jbHVkZSA8cXB0cnF1ZXVlLmg+CiAKICNpbmNsdWRlICJtaXNjL2xvYWRlcl9j
bGllbnQuaCIKLSNpbmNsdWRlICJtaXNjL2h0bWx0YWdzLmgiCi0jaW5jbHVkZSAieG1sL2RvbV9z
dHJpbmdpbXBsLmgiCiAjaW5jbHVkZSAieG1sL3htbF90b2tlbml6ZXIuaCIKICNpbmNsdWRlICJo
dG1sL2h0bWxfZWxlbWVudGltcGwuaCIKICNpbmNsdWRlICJ4bWwvZG9tX2RvY2ltcGwuaCIKQEAg
LTQ3LDcgKzQ1LDcgQEAKICNlbmRpZgogCiBjbGFzcyBLQ2hhcnNldHM7Ci1jbGFzcyBLSFRNTFBh
cnNlcjsKK2NsYXNzIEhUTUxQYXJzZXI7CiBjbGFzcyBLSFRNTFZpZXc7CiAKIG5hbWVzcGFjZSBE
T00gewpAQCAtNzAsMjIgKzY4LDI0IEBAIGNsYXNzIFRva2VuCiB7CiBwdWJsaWM6CiAgICAgVG9r
ZW4oKSB7Ci0gICAgICAgIGlkID0gMDsKICAgICAgICAgYXR0cnMgPSAwOwogICAgICAgICB0ZXh0
ID0gMDsKKyAgICAgICAgYmVnaW5UYWcgPSB0cnVlOwogICAgICAgICBmbGF0ID0gZmFsc2U7CiAg
ICAgICAgIC8vcURlYnVnKCJuZXcgdG9rZW4sIGNyZWF0aW5nICUwOGx4IiwgYXR0cnMpOwogICAg
IH0KKwogICAgIH5Ub2tlbigpIHsKLSAgICAgICAgaWYoYXR0cnMpIGF0dHJzLT5kZXJlZigpOwot
ICAgICAgICBpZih0ZXh0KSB0ZXh0LT5kZXJlZigpOworICAgICAgICBpZiAoYXR0cnMpIGF0dHJz
LT5kZXJlZigpOworICAgICAgICBpZiAodGV4dCkgdGV4dC0+ZGVyZWYoKTsKICAgICB9CisKICAg
ICB2b2lkIGFkZEF0dHJpYnV0ZShET006OkRvY3VtZW50SW1wbCogZG9jLCBRQ2hhciogYnVmZmVy
LCBjb25zdCBRU3RyaW5nJiBhdHRyTmFtZSwgY29uc3QgRE9NOjpBdG9taWNTdHJpbmcmIHYpCiAg
ICAgewogICAgICAgICBET006OkF0dHJpYnV0ZUltcGwqIGEgPSAwOwotICAgICAgICBpZihidWZm
ZXItPnVuaWNvZGUoKSkKKyAgICAgICAgaWYgKGJ1ZmZlci0+dW5pY29kZSgpKQogICAgICAgICAg
ICAgYSA9IG5ldyBET006Ok1hcHBlZEF0dHJpYnV0ZUltcGwoYnVmZmVyLT51bmljb2RlKCksIHYp
OwotICAgICAgICBlbHNlIGlmICggIWF0dHJOYW1lLmlzRW1wdHkoKSAmJiBhdHRyTmFtZSAhPSAi
LyIgKQorICAgICAgICBlbHNlIGlmICghYXR0ck5hbWUuaXNFbXB0eSgpICYmIGF0dHJOYW1lICE9
ICIvIikKICAgICAgICAgICAgIGEgPSBuZXcgRE9NOjpNYXBwZWRBdHRyaWJ1dGVJbXBsKGRvYy0+
YXR0cklkKDAsIERPTTo6RE9NU3RyaW5nKGF0dHJOYW1lKS5pbXBsZW1lbnRhdGlvbigpLCBmYWxz
ZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2KTsKIApA
QCAtOTcsMjMgKzk3LDMzIEBAIHB1YmxpYzoKICAgICAgICAgICAgIGF0dHJzLT5pbnNlcnRBdHRy
aWJ1dGUoYSk7CiAgICAgICAgIH0KICAgICB9CisKKyAgICBib29sIGlzT3BlblRhZyhjb25zdCBE
T006OlF1YWxpZmllZE5hbWUmIGZ1bGxOYW1lKSBjb25zdCB7IHJldHVybiBiZWdpblRhZyAmJiBm
dWxsTmFtZS5sb2NhbE5hbWUoKSA9PSB0YWdOYW1lOyB9CisgICAgYm9vbCBpc0Nsb3NlVGFnKGNv
bnN0IERPTTo6UXVhbGlmaWVkTmFtZSYgZnVsbE5hbWUpIGNvbnN0IHsgcmV0dXJuICFiZWdpblRh
ZyAmJiBmdWxsTmFtZS5sb2NhbE5hbWUoKSA9PSB0YWdOYW1lOyB9CisKICAgICB2b2lkIHJlc2V0
KCkKICAgICB7Ci0gICAgICAgIGlmKGF0dHJzKSB7CisgICAgICAgIGlmIChhdHRycykgewogICAg
ICAgICAgICAgYXR0cnMtPmRlcmVmKCk7CiAgICAgICAgICAgICBhdHRycyA9IDA7CiAgICAgICAg
IH0KLSAgICAgICAgaWQgPSAwOwotICAgICAgICBpZih0ZXh0KSB7CisgICAgICAgIAorICAgICAg
ICB0YWdOYW1lID0gRE9NOjpudWxsQXRvbTsKKyAgICAgICAgCisgICAgICAgIGlmICh0ZXh0KSB7
CiAgICAgICAgICAgICB0ZXh0LT5kZXJlZigpOwogICAgICAgICAgICAgdGV4dCA9IDA7CiAgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIGJlZ2luVGFnID0gdHJ1ZTsKICAgICAgICAgZmxhdCA9
IGZhbHNlOwogICAgIH0KKwogICAgIERPTTo6TmFtZWRNYXBwZWRBdHRyTWFwSW1wbCogYXR0cnM7
CiAgICAgRE9NOjpET01TdHJpbmdJbXBsKiB0ZXh0OwotICAgIHVzaG9ydCBpZDsKLSAgICBib29s
IGZsYXQ7CisgICAgRE9NOjpBdG9taWNTdHJpbmcgdGFnTmFtZTsKKyAgICBib29sIGJlZ2luVGFn
IDogMTsKKyAgICBib29sIGZsYXQgOiAxOwogfTsKIAogLy8gVGhlIGNvdW50IG9mIHNwYWNlcyB1
c2VkIGZvciBlYWNoIHRhYi4KQEAgLTM2OCw3ICszNzgsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgVG9r
ZW5pemVyU3RyaW5nIHNyYzsKIAogICAgIEtDaGFyc2V0cyAqY2hhcnNldHM7Ci0gICAgS0hUTUxQ
YXJzZXIgKnBhcnNlcjsKKyAgICBIVE1MUGFyc2VyICpwYXJzZXI7CiAKICAgICBRR3VhcmRlZFB0
cjxLSFRNTFZpZXc+IHZpZXc7CiAgICAgCkluZGV4OiBraHRtbC9taXNjL2RlY29kZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL21pc2MvZGVjb2Rlci5j
cHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzQKZGlmZiAtdSAtcCAtcjEuMzQga2h0bWwvbWlz
Yy9kZWNvZGVyLmNwcAotLS0ga2h0bWwvbWlzYy9kZWNvZGVyLmNwcAkyIEp1bCAyMDA0IDE3OjAz
OjMyIC0wMDAwCTEuMzQKKysrIGtodG1sL21pc2MvZGVjb2Rlci5jcHAJMjQgSnVuIDIwMDUgMDM6
MTA6MjggLTAwMDAKQEAgLTQxLDYgKzQxLDEyIEBAIHVzaW5nIG5hbWVzcGFjZSBraHRtbDsKICNp
bmNsdWRlIDxrZGVidWcuaD4KICNpbmNsdWRlIDxrbG9jYWxlLmg+CiAKKyNpbmNsdWRlICJodG1s
bmFtZXMuaCIKKwordXNpbmcgRE9NOjpBdG9taWNTdHJpbmc7Cit1c2luZyBET006OkhUTUxOYW1l
czsKK3VzaW5nIERPTTo6bnVsbEF0b207CisKIGNsYXNzIEthbmppQ29kZQogewogcHVibGljOgpA
QCAtNTI2LDEyICs1MzIsOCBAQCBRU3RyaW5nIERlY29kZXI6OmRlY29kZShjb25zdCBjaGFyICpk
YXRhCiAgICAgICAgICAgICAgICAgICAgICAgICBsZW4rKzsKICAgICAgICAgICAgICAgICAgICAg
fQogCQkgICAgdG1wW2xlbl0gPSAwOwotICAgICAgICAgICAgICAgICAgICBpbnQgaWQgPSBraHRt
bDo6Z2V0VGFnSUQodG1wLCBsZW4pOwotICAgICAgICAgICAgICAgICAgICBpZihlbmQpIGlkICs9
IElEX0NMT1NFX1RBRzsKLQotICAgICAgICAgICAgICAgICAgICBzd2l0Y2goIGlkICkgewotICAg
ICAgICAgICAgICAgICAgICBjYXNlIElEX01FVEE6Ci0gICAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgQXRvbWljU3RyaW5nIHRhZyh0bXApOworICAgICAgICAgICAgICAg
ICAgICBpZiAoIWVuZCAmJiB0YWcgPT0gSFRNTE5hbWVzOjptZXRhKCkpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIGZvdW5kIGEgbWV0YSB0YWcuLi4KICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vcHRyICs9IDU7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICogZW5k
ID0gcHRyOwpAQCAtNTcwLDI4ICs1NzIsMTAgQEAgUVN0cmluZyBEZWNvZGVyOjpkZWNvZGUoY29u
c3QgY2hhciAqZGF0YQogCiAJCQkgICAgcG9zID0gZW5kcG9zICsgMTsKIAkJCX0KLQkJICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgY2FzZSAoSURfTUVUQStJRF9DTE9TRV9UQUcpOgotICAgICAg
ICAgICAgICAgICAgICBjYXNlIElEX1NDUklQVDoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAo
SURfU0NSSVBUK0lEX0NMT1NFX1RBRyk6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfTk9T
Q1JJUFQ6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgKElEX05PU0NSSVBUK0lEX0NMT1NFX1RB
Ryk6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfU1RZTEU6Ci0gICAgICAgICAgICAgICAg
ICAgIGNhc2UgKElEX1NUWUxFK0lEX0NMT1NFX1RBRyk6Ci0gICAgICAgICAgICAgICAgICAgIGNh
c2UgSURfTElOSzoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAoSURfTElOSytJRF9DTE9TRV9U
QUcpOgotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX09CSkVDVDoKLSAgICAgICAgICAgICAg
ICAgICAgY2FzZSAoSURfT0JKRUNUK0lEX0NMT1NFX1RBRyk6Ci0gICAgICAgICAgICAgICAgICAg
IGNhc2UgSURfVElUTEU6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgKElEX1RJVExFK0lEX0NM
T1NFX1RBRyk6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfQkFTRToKLSAgICAgICAgICAg
ICAgICAgICAgY2FzZSAoSURfQkFTRStJRF9DTE9TRV9UQUcpOgotICAgICAgICAgICAgICAgICAg
ICBjYXNlIElEX0hUTUw6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfSEVBRDoKLSAgICAg
ICAgICAgICAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAgICAgICAgICBjYXNlICgwICsgSURf
Q0xPU0VfVEFHICk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICAgICAgZGVmYXVsdDoKKwkJICAgIH0gZWxzZSBpZiAodGFnICE9IEhUTUxOYW1lczo6c2Ny
aXB0KCkgJiYgdGFnICE9IEhUTUxOYW1lczo6bm9zY3JpcHQoKSAmJiB0YWcgIT0gSFRNTE5hbWVz
OjpzdHlsZSgpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnICE9IEhUTUxO
YW1lczo6bGluaygpICYmIHRhZyAhPSBIVE1MTmFtZXM6Om1ldGEoKSAmJiB0YWcgIT0gSFRNTE5h
bWVzOjpvYmplY3QoKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZyAhPSBI
VE1MTmFtZXM6OnRpdGxlKCkgJiYgdGFnICE9IEhUTUxOYW1lczo6YmFzZSgpICYmIHRhZyAhPSBI
VE1MTmFtZXM6Omh0bWwoKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZyAh
PSBIVE1MTmFtZXM6OmhlYWQoKSAmJiB0YWcgIT0gbnVsbEF0b20pIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvZHkgPSB0cnVlOwogI2lmZGVmIERFQ09ERV9ERUJVRwogCQkJa2REZWJ1Zygg
NjAwNSApIDw8ICJEZWNvZGVyOiBubyBjaGFyc2V0IGZvdW5kLiBJZD0iIDw8IGlkIDw8IGVuZGw7
CkluZGV4OiBraHRtbC9taXNjL2h0bWxoYXNoZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9XZWJDb3JlL2todG1sL21pc2MvaHRtbGhhc2hlcy5jcHAsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuMTAKZGlmZiAtdSAtcCAtcjEuMTAga2h0bWwvbWlzYy9odG1saGFzaGVzLmNwcAot
LS0ga2h0bWwvbWlzYy9odG1saGFzaGVzLmNwcAk1IEphbiAyMDA1IDIyOjU2OjQ2IC0wMDAwCTEu
MTAKKysrIGtodG1sL21pc2MvaHRtbGhhc2hlcy5jcHAJMjQgSnVuIDIwMDUgMDM6MTA6MjggLTAw
MDAKQEAgLTI1LDIyICsyNSwxMyBAQAogLy8gdHVybiBvZmYgaW5saW5pbmcgdG8gdm9pZCB3YXJu
aW5nIHdpdGggbmV3ZXIgZ2NjCiAjdW5kZWYgX19pbmxpbmUKICNkZWZpbmUgX19pbmxpbmUKLSNp
bmNsdWRlICJodG1sdGFncy5jIgogI2luY2x1ZGUgImh0bWxhdHRycy5jIgogI3VuZGVmIF9faW5s
aW5lCiAKLXVuc2lnbmVkIHNob3J0IGtodG1sOjpnZXRUYWdJRChjb25zdCBjaGFyICp0YWdTdHIs
IGludCBsZW4pCit1bnNpZ25lZCBzaG9ydCBraHRtbDo6Z2V0QXR0cklEKGNvbnN0IGNoYXIgKmF0
dHJTdHIsIGludCBsZW4pCiB7Ci0gICAgY29uc3Qgc3RydWN0IHRhZ3MgKnRhZ1B0ciA9IGZpbmRU
YWcodGFnU3RyLCBsZW4pOwotICAgIGlmICghdGFnUHRyKQorICAgIGNvbnN0IHN0cnVjdCBhdHRy
cyAqYXR0clB0ciA9IGZpbmRBdHRyKGF0dHJTdHIsIGxlbik7CisgICAgaWYgKCFhdHRyUHRyKQog
ICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gdGFnUHRyLT5pZDsKLX0KLQotdW5zaWduZWQg
c2hvcnQga2h0bWw6OmdldEF0dHJJRChjb25zdCBjaGFyICp0YWdTdHIsIGludCBsZW4pCi17Ci0g
ICAgY29uc3Qgc3RydWN0IGF0dHJzICp0YWdQdHIgPSBmaW5kQXR0cih0YWdTdHIsIGxlbik7Ci0g
ICAgaWYgKCF0YWdQdHIpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiB0YWdQdHItPmlk
OworICAgIHJldHVybiBhdHRyUHRyLT5pZDsKIH0KSW5kZXg6IGtodG1sL21pc2MvaHRtbGhhc2hl
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL21pc2MvaHRt
bGhhc2hlcy5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjYKZGlmZiAtdSAtcCAtcjEuNiBraHRt
bC9taXNjL2h0bWxoYXNoZXMuaAotLS0ga2h0bWwvbWlzYy9odG1saGFzaGVzLmgJNSBKYW4gMjAw
NSAyMjo1Njo0NiAtMDAwMAkxLjYKKysrIGtodG1sL21pc2MvaHRtbGhhc2hlcy5oCTI0IEp1biAy
MDA1IDAzOjEwOjI4IC0wMDAwCkBAIC0yMywxMiArMjMsMTAgQEAKICNpZm5kZWYgSFRNTEhBU0hF
U19ICiAjZGVmaW5lIEhUTUxIQVNIRVNfSAogCi0jaW5jbHVkZSAiaHRtbHRhZ3MuaCIKICNpbmNs
dWRlICJodG1sYXR0cnMuaCIKIAogbmFtZXNwYWNlIGtodG1sCiB7Ci0gIHVuc2lnbmVkIHNob3J0
IGdldFRhZ0lEKGNvbnN0IGNoYXIgKnRhZ1N0ciwgaW50IGxlbik7CiAgIHVuc2lnbmVkIHNob3J0
IGdldEF0dHJJRChjb25zdCBjaGFyICp0YWdTdHIsIGludCBsZW4pOwogfQogCkluZGV4OiBraHRt
bC9taXNjL2h0bWx0YWdzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IGtodG1sL21pc2MvaHRtbHRh
Z3MuaW4KZGlmZiAtTiBraHRtbC9taXNjL2h0bWx0YWdzLmluCi0tLSBraHRtbC9taXNjL2h0bWx0
YWdzLmluCTExIE1heSAyMDA1IDIzOjQ1OjI5IC0wMDAwCTEuNworKysgL2Rldi9udWxsCTEgSmFu
IDE5NzAgMDA6MDA6MDAgLTAwMDAKQEAgLTEsMTAyICswLDAgQEAKLWEKLWFiYnIKLWFjcm9ueW0K
LWFkZHJlc3MKLWFwcGxldAotYXJlYQotYgotYmFzZQotYmFzZWZvbnQKLWJkbwotYmlnCi1ibG9j
a3F1b3RlCi1ib2R5Ci1icgotYnV0dG9uCi1jYW52YXMKLWNhcHRpb24KLWNlbnRlcgotY2l0ZQot
Y29kZQotY29sCi1jb2xncm91cAotZGQKLWRlbAotZGZuCi1kaXIKLWRpdgotZGwKLWR0Ci1lbQot
ZW1iZWQKLWZpZWxkc2V0Ci1mb250Ci1mb3JtCi1mcmFtZQotZnJhbWVzZXQKLWgxCi1oMgotaDMK
LWg0Ci1oNQotaDYKLWhlYWQKLWhyCi1odG1sCi1pCi1pZnJhbWUKLWltZwotaW5wdXQKLWlucwot
aXNpbmRleAota2JkCi1rZXlnZW4KLWxhYmVsCi1sYXllcgotbGVnZW5kCi1saQotbGluawotbWFw
Ci1tYXJxdWVlCi1tZW51Ci1tZXRhCi1ub2JyCi1ub2VtYmVkCi1ub2ZyYW1lcwotbm9zY3JpcHQK
LW5vbGF5ZXIKLW9iamVjdAotb2wKLW9wdGdyb3VwCi1vcHRpb24KLXAKLXBhcmFtCi1wbGFpbnRl
eHQKLXByZQotcQotcwotc2FtcAotc2NyaXB0Ci1zZWxlY3QKLXNtYWxsCi1zcGFuCi1zdHJpa2UK
LXN0cm9uZwotc3R5bGUKLXN1Ygotc3VwCi10YWJsZQotdGJvZHkKLXRkCi10ZXh0YXJlYQotdGZv
b3QKLXRoCi10aGVhZAotdGl0bGUKLXRyCi10dAotdQotdWwKLXZhcgotd2JyCi14bXAKSW5kZXg6
IGtodG1sL21pc2MvbWFrZXRhZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZToga2h0bWwvbWlzYy9tYWtl
dGFncwpkaWZmIC1OIGtodG1sL21pc2MvbWFrZXRhZ3MKLS0tIGtodG1sL21pc2MvbWFrZXRhZ3MJ
NiBKYW4gMjAwNSAyMToxMzoxNiAtMDAwMAkxLjEzCisrKyAvZGV2L251bGwJMSBKYW4gMTk3MCAw
MDowMDowMCAtMDAwMApAQCAtMSwxMjEgKzAsMCBAQAotIyEvdXNyL2Jpbi9wZXJsCi0jICAgVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBsaWJyYXJpZXMKLSMKLSMgICBDb3B5cmlnaHQgKEMp
IDE5OTggV2FsZG8gQmFzdGlhbiAoYmFzdGlhbkBrZGUub3JnKQotIyAgICAgICAgICAgICAgICAg
MTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQotIyAgIENvcHlyaWdodCAoQykgMjAwNCBB
cHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0j
ICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKLSMgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKLSMgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0jCi0jICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jICAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSMg
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQotIyAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgotIwotIyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSMgICBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotIyAgIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRl
IDMzMCwKLSMgICBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KLSMKLSMtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0jCi0jICBLREUgSFRNTCBXaWRnZXQgLS0gU2NyaXB0IHRvIGdlbmVyYXRlIGh0bWx0
YWdzLmMgYW5kIGh0bWx0YWdzLmgKLSMKLQotdXNlIHN0cmljdDsKLQotb3BlbiBJTiwgImh0bWx0
YWdzLmluIgotICBvciBkaWUgIkNhbid0IG9wZW4gaW5cbiI7Ci1vcGVuIGhlYWRlciwgIj5odG1s
dGFncy5oIgotICBvciBkaWUgIkNhbid0IG9wZW4gaGVhZGVyXG4iOwotb3BlbiBvdXQsICI+aHRt
bHRhZ3MuZ3BlcmYiCi0gIG9yIGRpZSAiQ2FuJ3Qgb3BlbiBvdXRcbiI7Ci0KLXByaW50IG91dCAi
JXtcbi8qIFRoaXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGh0bWx0YWdz
LmluIGJ5IG1ha2V0YWdzLCBkbyBub3QgZWRpdCAqL1xuLyogQ29weXJpZ2h0IDE5OTkgTGFycyBL
bm9sbCAqL1xuI2luY2x1ZGUgXCJodG1sdGFncy5oXCJcbiV9XG4iOwotcHJpbnQgb3V0ICJzdHJ1
Y3QgdGFncyB7XG4gICAgY29uc3QgY2hhciAqbmFtZTtcbiAgICBpbnQgaWQ7XG59O1xuJSVcbiI7
Ci0KLXByaW50IGhlYWRlciAiLyogVGhpcyBmaWxlIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20KLWh0bWx0YWdzLmluIGJ5IG1ha2V0YWdzLCBkbyBub3QgZWRpdCAqL1xuLyogQ29weXJp
Z2h0IDE5OTkgTGFycyBLbm9sbCAqL1xuLyogQ29weXJpZ2h0IDIwMDQgQXBwbGUgQ29tcHV0ZXIs
IEluYy4gKi9cblxuI2lmbmRlZiBLSFRNTF9UQUdTX0hcbiNkZWZpbmUgS0hUTUxfVEFHU19IXG5c
biNpbmNsdWRlIFwiZG9tL2RvbV9zdHJpbmcuaFwiXG5cbiI7Ci0KLXByaW50IGhlYWRlciAiRE9N
OjpET01TdHJpbmcgZ2V0VGFnTmFtZSh1bnNpZ25lZCBzaG9ydCBpZCk7XG5cbiI7Ci0KLW15ICRu
dW0gPSAwOwotbXkgJG9wZW5UYWdzID0gIiI7Ci1teSAkY2xvc2VUYWdzID0gIiI7Ci13aGlsZSAo
PElOPikgewotICAgIGNob21wOwotICAgIG15ICRhdHRyID0gJF87Ci0gICAgJG51bSArPSAxOwot
ICAgIG15ICR1cCA9IHVjKCRhdHRyKTsKLSAgICAkb3BlblRhZ3MgLj0gIiAgICBcIiR1cFwiLFxu
IjsKLSAgICAkY2xvc2VUYWdzIC49ICIgICAgXCIvJHVwXCIsXG4iOwotICAgICR1cCA9fiBzLy0v
Xy87Ci0gICAgcHJpbnQgb3V0ICRhdHRyIC4gIiwgSURfIiAuICR1cCAuICJcbiI7Ci0gICAgcHJp
bnQgaGVhZGVyICJjb25zdCB1bnNpZ25lZCBzaG9ydCBJRF8kdXAgPSAkbnVtO1xuIjsKLX0KLXBy
aW50IG91dCAiYW5jaG9yLCBJRF9BXG4iOwotcHJpbnQgb3V0ICJpbWFnZSwgSURfSU1HXG4iOwot
cHJpbnQgb3V0ICJsaXN0aW5nLCBJRF9QUkVcbiI7Ci0kbnVtICs9IDE7Ci1wcmludCBoZWFkZXIg
ImNvbnN0IHVuc2lnbmVkIHNob3J0IElEX1RFWFQgPSAkbnVtO1xuIjsKLSRudW0gKz0gMTsKLXBy
aW50IGhlYWRlciAiY29uc3QgdW5zaWduZWQgc2hvcnQgSURfQ09NTUVOVCA9ICRudW07XG4iOwot
cHJpbnQgaGVhZGVyICJjb25zdCB1bnNpZ25lZCBzaG9ydCBJRF9MQVNUX1RBRyA9ICRudW07XG4i
OwotcHJpbnQgaGVhZGVyICJjb25zdCB1bnNpZ25lZCBzaG9ydCBJRF9DTE9TRV9UQUcgPSAzMjAw
MDtcbiI7Ci0KLXByaW50IG91dCAiJSVcbiI7Ci1jbG9zZSBvdXQ7Ci1wcmludCBoZWFkZXIgIlxu
I2VuZGlmXG4iOwotY2xvc2UgaGVhZGVyOwotCi1teSAkcmVzdWx0ID0gc3lzdGVtKCIvYmluL3No
IiwgIi1jIiwgImdwZXJmIC1hIC1MICdBTlNJLUMnIC1EIC1FIC1DIC1sIC1vIC10IC1rICcqJyAt
TmZpbmRUYWcgLUhoYXNoX3RhZyAtV3dvcmRsaXN0X3RhZyBodG1sdGFncy5ncGVyZiA+IGh0bWx0
YWdzLmMiKTsKLWlmICgkcmVzdWx0KSB7Ci0gIHVubGluayAiaHRtbHRhZ3MuYyI7Ci0gIGV4aXQg
JHJlc3VsdDsKLX0KLQotb3BlbiBJTiwgImh0bWx0YWdzLmMiIG9yIGRpZTsKLQotbXkgJG51bUxp
bmVzID0gMDsKLXdoaWxlICg8SU4+KSB7Ci0gICAgJG51bUxpbmVzKys7Ci19Ci0kbnVtTGluZXMg
Kz0gMjsKLQotY2hvbXAgJG9wZW5UYWdzOwotY2hvbXAgJGNsb3NlVGFnczsKLQotb3BlbiBPVVQs
ICI+Pmh0bWx0YWdzLmMiIG9yIGRpZTsKLXByaW50IE9VVCA8PEVORAotI2xpbmUgJG51bUxpbmVz
ICJodG1sdGFncy5jIgotCi11c2luZyBET006OkRPTVN0cmluZzsKLQotc3RhdGljIGNvbnN0IGNo
YXIgKiBjb25zdCBvcGVuVGFnTmFtZXNbXSA9IHsKLSAgICAwLAotJG9wZW5UYWdzCi0gICAgIlRF
WFQiLAotICAgICJDT01NRU5UIgotfTsKLQotc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBjbG9z
ZVRhZ05hbWVzW10gPSB7Ci0gICAgMCwKLSRjbG9zZVRhZ3MKLX07Ci0KLURPTVN0cmluZyBnZXRU
YWdOYW1lKHVuc2lnbmVkIHNob3J0IGlkKQotewotICAgIGlmIChpZCA+IElEX0NMT1NFX1RBRykg
ewotICAgICAgICBpbnQgaW5kZXggPSBpZCAtIElEX0NMT1NFX1RBRzsKLSAgICAgICAgaWYgKGlu
ZGV4ID49IElEX1RFWFQpCi0gICAgICAgICAgICByZXR1cm4gRE9NU3RyaW5nKCk7Ci0gICAgICAg
IHJldHVybiBjbG9zZVRhZ05hbWVzW2luZGV4XTsKLSAgICB9Ci0gICAgaWYgKGlkID4gSURfTEFT
VF9UQUcpCi0gICAgICAgIHJldHVybiBET01TdHJpbmcoKTsKLSAgICByZXR1cm4gb3BlblRhZ05h
bWVzW2lkXTsKLX0KLUVORApJbmRleDoga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9hcHBsZXQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3JlbmRlcmluZy9y
ZW5kZXJfYXBwbGV0LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zMApkaWZmIC11IC1wIC1y
MS4zMCBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2FwcGxldC5jcHAKLS0tIGtodG1sL3JlbmRlcmlu
Zy9yZW5kZXJfYXBwbGV0LmNwcAkxMCBNYXkgMjAwNSAxODo0MjowMyAtMDAwMAkxLjMwCisrKyBr
aHRtbC9yZW5kZXJpbmcvcmVuZGVyX2FwcGxldC5jcHAJMjQgSnVuIDIwMDUgMDM6MTA6MjggLTAw
MDAKQEAgLTM2LDcgKzM2LDYgQEAKICNpZm5kZWYgUV9XU19RV1MgLy8gV2UgZG9uJ3QgaGF2ZSBK
YXZhIGluIFF0IEVtYmVkZGVkCiAKICNpbmNsdWRlICJqYXZhL2tqYXZhYXBwbGV0d2lkZ2V0Lmgi
Ci0jaW5jbHVkZSAibWlzYy9odG1sdGFncy5oIgogI2luY2x1ZGUgImh0bWwvaHRtbF9vYmplY3Rp
bXBsLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBraHRtbDsKQEAgLTEwMyw3ICsxMDIsNyBAQCB2b2lk
IFJlbmRlckFwcGxldDo6Y3JlYXRlV2lkZ2V0SWZOZWNlc3NhCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgbV9oZWlnaHQgLSBib3JkZXJUb3AoKSAtIGJvcmRlckJvdHRvbSgpIC0gcGFkZGluZ1Rv
cCgpIC0gcGFkZGluZ0JvdHRvbSgpOwogICAgICAgICAgICAgTm9kZUltcGwgKmNoaWxkID0gZWxl
bWVudCgpLT5maXJzdENoaWxkKCk7CiAgICAgICAgICAgICB3aGlsZSAoY2hpbGQpIHsKLSAgICAg
ICAgICAgICAgICBpZiAoY2hpbGQtPmlkKCkgPT0gSURfUEFSQU0pIHsKKyAgICAgICAgICAgICAg
ICBpZiAoY2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpwYXJhbSgpKSkgewogICAgICAgICAg
ICAgICAgICAgICBIVE1MUGFyYW1FbGVtZW50SW1wbCAqcCA9IHN0YXRpY19jYXN0PEhUTUxQYXJh
bUVsZW1lbnRJbXBsICo+KGNoaWxkKTsKICAgICAgICAgICAgICAgICAgICAgbV9hcmdzLmluc2Vy
dChwLT5uYW1lKCkuc3RyaW5nKCksIHAtPnZhbHVlKCkuc3RyaW5nKCkpOwogICAgICAgICAgICAg
ICAgIH0KSW5kZXg6IGtodG1sL3JlbmRlcmluZy9yZW5kZXJfYmxvY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3JlbmRlcmluZy9yZW5kZXJfYmxvY2su
Y3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE4NApkaWZmIC11IC1wIC1yMS4xODQga2h0bWwv
cmVuZGVyaW5nL3JlbmRlcl9ibG9jay5jcHAKLS0tIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfYmxv
Y2suY3BwCTE2IE1heSAyMDA1IDE5OjE5OjM4IC0wMDAwCTEuMTg0CisrKyBraHRtbC9yZW5kZXJp
bmcvcmVuZGVyX2Jsb2NrLmNwcAkyNCBKdW4gMjAwNSAwMzoxMDozMiAtMDAwMApAQCAtNDAsNyAr
NDAsNiBAQAogCiAjaW5jbHVkZSAia2h0bWx2aWV3LmgiCiAjaW5jbHVkZSAia2h0bWxfcGFydC5o
IgotI2luY2x1ZGUgImh0bWx0YWdzLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBET007CiAKQEAgLTQ3
NSw3ICs0NzQsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9jayhib29sIHJlbGF5CiAg
ICAgICAgIG1fdG9wTWFyZ2luUXVpcmsgPSBzdHlsZSgpLT5tYXJnaW5Ub3AoKS5xdWlyazsKICAg
ICAgICAgbV9ib3R0b21NYXJnaW5RdWlyayA9IHN0eWxlKCktPm1hcmdpbkJvdHRvbSgpLnF1aXJr
OwogCi0gICAgICAgIGlmIChlbGVtZW50KCkgJiYgZWxlbWVudCgpLT5pZCgpID09IElEX0ZPUk0g
JiYgZWxlbWVudCgpLT5pc01hbGZvcm1lZCgpKQorICAgICAgICBpZiAoZWxlbWVudCgpICYmIGVs
ZW1lbnQoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZvcm0oKSkgJiYgZWxlbWVudCgpLT5pc01h
bGZvcm1lZCgpKQogICAgICAgICAgICAgLy8gU2VlIGlmIHRoaXMgZm9ybSBpcyBtYWxmb3JtZWQg
KGkuZS4sIHVuY2xvc2VkKS4gSWYgc28sIGRvbid0IGdpdmUgdGhlIGZvcm0KICAgICAgICAgICAg
IC8vIGEgYm90dG9tIG1hcmdpbi4KICAgICAgICAgICAgIG1fbWF4Qm90dG9tUG9zTWFyZ2luID0g
bV9tYXhCb3R0b21OZWdNYXJnaW4gPSAwOwpJbmRleDoga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9i
b3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3JlbmRl
cmluZy9yZW5kZXJfYm94LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNTQKZGlmZiAtdSAt
cCAtcjEuMTU0IGtodG1sL3JlbmRlcmluZy9yZW5kZXJfYm94LmNwcAotLS0ga2h0bWwvcmVuZGVy
aW5nL3JlbmRlcl9ib3guY3BwCTExIEp1biAyMDA1IDA1OjAxOjE3IC0wMDAwCTEuMTU0CisrKyBr
aHRtbC9yZW5kZXJpbmcvcmVuZGVyX2JveC5jcHAJMjQgSnVuIDIwMDUgMDM6MTA6MzMgLTAwMDAK
QEAgLTI1Niw3ICsyNTYsNyBAQCB2b2lkIFJlbmRlckJveDo6cGFpbnRSb290Qm94RGVjb3JhdGlv
bnMoCiAgICAgICAgIC8vIGFub255bW91cyBibG9ja3MgY3JlYXRlZCBieSBpbmxpbmUgPGJvZHk+
IHRhZ3MgZXRjLiAgV2UgY2FuIGxvY2F0ZSB0aGUgPGJvZHk+CiAgICAgICAgIC8vIHJlbmRlciBv
YmplY3QgdmVyeSBlYXNpbHkgdmlhIHRoZSBET00uCiAgICAgICAgIEhUTUxFbGVtZW50SW1wbCog
Ym9keSA9IGRvY3VtZW50KCktPmJvZHkoKTsKLSAgICAgICAgUmVuZGVyT2JqZWN0KiBib2R5T2Jq
ZWN0ID0gKGJvZHkgJiYgYm9keS0+aWQoKSA9PSBJRF9CT0RZKSA/IGJvZHktPnJlbmRlcmVyKCkg
OiAwOworICAgICAgICBSZW5kZXJPYmplY3QqIGJvZHlPYmplY3QgPSAoYm9keSAmJiBib2R5LT5o
YXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpib2R5KCkpKSA/IGJvZHktPnJlbmRlcmVyKCkgOiAwOwog
ICAgICAgICBpZiAoYm9keU9iamVjdCkgewogICAgICAgICAgICAgYmdMYXllciA9IGJvZHlPYmpl
Y3QtPnN0eWxlKCktPmJhY2tncm91bmRMYXllcnMoKTsKICAgICAgICAgICAgIGJnQ29sb3IgPSBi
b2R5T2JqZWN0LT5zdHlsZSgpLT5iYWNrZ3JvdW5kQ29sb3IoKTsKQEAgLTM2OSw3ICszNjksNyBA
QCB2b2lkIFJlbmRlckJveDo6cGFpbnRCYWNrZ3JvdW5kRXh0ZW5kZWQoCiAgICAgICAgIGJvb2wg
aXNUcmFuc3BhcmVudDsKICAgICAgICAgRE9NOjpOb2RlSW1wbCogZWx0ID0gZG9jdW1lbnQoKS0+
b3duZXJFbGVtZW50KCk7CiAgICAgICAgIGlmIChlbHQpIHsKLSAgICAgICAgICAgIGlmIChlbHQt
PmlkKCkgPT0gSURfRlJBTUUpCisgICAgICAgICAgICBpZiAoZWx0LT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6ZnJhbWUoKSkpCiAgICAgICAgICAgICAgICAgaXNUcmFuc3BhcmVudCA9IGZhbHNlOwog
ICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gTG9jYXRlIHRoZSA8Ym9keT4g
ZWxlbWVudCB1c2luZyB0aGUgRE9NLiAgVGhpcyBpcyBlYXNpZXIgdGhhbiB0cnlpbmcKQEAgLTM3
Nyw3ICszNzcsNyBAQCB2b2lkIFJlbmRlckJveDo6cGFpbnRCYWNrZ3JvdW5kRXh0ZW5kZWQoCiAg
ICAgICAgICAgICAgICAgLy8gYW5vbnltb3VzIGJsb2NrcyBjcmVhdGVkIGJ5IGlubGluZSA8Ym9k
eT4gdGFncyBldGMuICBXZSBjYW4gbG9jYXRlIHRoZSA8Ym9keT4KICAgICAgICAgICAgICAgICAv
LyByZW5kZXIgb2JqZWN0IHZlcnkgZWFzaWx5IHZpYSB0aGUgRE9NLgogICAgICAgICAgICAgICAg
IEhUTUxFbGVtZW50SW1wbCogYm9keSA9IGRvY3VtZW50KCktPmJvZHkoKTsKLSAgICAgICAgICAg
ICAgICBpc1RyYW5zcGFyZW50ID0gIWJvZHkgfHwgYm9keS0+aWQoKSAhPSBJRF9GUkFNRVNFVDsg
Ly8gQ2FuJ3Qgc2Nyb2xsIGEgZnJhbWVzZXQgZG9jdW1lbnQgYW55d2F5LgorICAgICAgICAgICAg
ICAgIGlzVHJhbnNwYXJlbnQgPSAhYm9keSB8fCAhYm9keS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1l
czo6ZnJhbWVzZXQoKSk7IC8vIENhbid0IHNjcm9sbCBhIGZyYW1lc2V0IGRvY3VtZW50IGFueXdh
eS4KICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBpc1RyYW5zcGFy
ZW50ID0gY2FudmFzKCktPnZpZXcoKS0+aXNUcmFuc3BhcmVudCgpOwpJbmRleDoga2h0bWwvcmVu
ZGVyaW5nL3JlbmRlcl9jYW52YXNpbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L1dlYkNvcmUva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9jYW52YXNpbWFnZS5jcHAsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuMTEKZGlmZiAtdSAtcCAtcjEuMTEga2h0bWwvcmVuZGVyaW5nL3Jl
bmRlcl9jYW52YXNpbWFnZS5jcHAKLS0tIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfY2FudmFzaW1h
Z2UuY3BwCTI1IE1heSAyMDA1IDAxOjMzOjIyIC0wMDAwCTEuMTEKKysrIGtodG1sL3JlbmRlcmlu
Zy9yZW5kZXJfY2FudmFzaW1hZ2UuY3BwCTI0IEp1biAyMDA1IDAzOjEwOjMzIC0wMDAwCkBAIC0z
NywxMCArMzcsOCBAQAogI2luY2x1ZGUgImNzcy9jc3NoZWxwZXIuaCIKICNpbmNsdWRlICJtaXNj
L2hlbHBlci5oIgogI2luY2x1ZGUgIm1pc2MvaHRtbGF0dHJzLmgiCi0jaW5jbHVkZSAibWlzYy9o
dG1sdGFncy5oIgogI2luY2x1ZGUgImh0bWwvaHRtbF9mb3JtaW1wbC5oIgogI2luY2x1ZGUgImh0
bWwvaHRtbF9jYW52YXNpbXBsLmgiCi0jaW5jbHVkZSAiaHRtbC9kdGQuaCIKICNpbmNsdWRlICJ4
bWwvZG9tMl9ldmVudHNpbXBsLmgiCiAjaW5jbHVkZSAiaHRtbC9odG1sX2RvY3VtZW50aW1wbC5o
IgogI2luY2x1ZGUgPG1hdGguaD4KQEAgLTE4Niw3ICsxODQsNyBAQCB2b2lkIFJlbmRlckNhbnZh
c0ltYWdlOjpwYWludChQYWludEluZm8mCiAgICAgfQogICAgIAogICAgIGlmIChkcmF3bkltYWdl
KCkpIHsKLSAgICAgICAgSFRNTENhbnZhc0VsZW1lbnRJbXBsKiBpID0gKGVsZW1lbnQoKSAmJiBl
bGVtZW50KCktPmlkKCkgPT0gSURfQ0FOVkFTKSA/IHN0YXRpY19jYXN0PEhUTUxDYW52YXNFbGVt
ZW50SW1wbCo+KGVsZW1lbnQoKSkgOiAwOworICAgICAgICBIVE1MQ2FudmFzRWxlbWVudEltcGwq
IGkgPSAoZWxlbWVudCgpICYmIGVsZW1lbnQoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmNhbnZh
cygpKSkgPyBzdGF0aWNfY2FzdDxIVE1MQ2FudmFzRWxlbWVudEltcGwqPihlbGVtZW50KCkpIDog
MDsKICAgICAgICAgaW50IG9sZE9wZXJhdGlvbiA9IDA7CiAgICAgICAgIGlmIChpICYmICFpLT5j
b21wb3NpdGVPcGVyYXRvcigpLmlzTnVsbCgpKXsKICAgICAgICAgICAgIG9sZE9wZXJhdGlvbiA9
IFFQYWludGVyOjpnZXRDb21wb3NpdGVPcGVyYXRpb24ocC0+Y3VycmVudENvbnRleHQoKSk7Cklu
ZGV4OiBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2Zsb3cuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3JlbmRlcmluZy9yZW5kZXJfZmxvdy5jcHAsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuMTYwCmRpZmYgLXUgLXAgLXIxLjE2MCBraHRtbC9yZW5kZXJpbmcv
cmVuZGVyX2Zsb3cuY3BwCi0tLSBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2Zsb3cuY3BwCTExIE1h
eSAyMDA1IDAyOjEwOjEwIC0wMDAwCTEuMTYwCisrKyBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2Zs
b3cuY3BwCTI0IEp1biAyMDA1IDAzOjEwOjM0IC0wMDAwCkBAIC00MCw3ICs0MCw2IEBACiAjaW5j
bHVkZSAicmVuZGVyX2xpbmUuaCIKIAogI2luY2x1ZGUgImtodG1sdmlldy5oIgotI2luY2x1ZGUg
Imh0bWx0YWdzLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBET007CiB1c2luZyBuYW1lc3BhY2Uga2h0
bWw7CkBAIC02NTQsNyArNjUzLDcgQEAgdm9pZCBSZW5kZXJGbG93OjphZGRGb2N1c1JpbmdSZWN0
cyhRUGFpbgogICAgIC8vIE9ubHkgcGFpbnQgZm9jdXMgcmluZyBhcm91bmQgb3V0ZXJtb3N0IGNv
bnRlbnRlZGl0YWJsZSBlbGVtZW50LgogICAgIC8vIEJ1dCBza2lwIHRoZSBib2R5IGVsZW1lbnQg
aWYgaXQgaXMgb3V0ZXJtb3N0LgogICAgIGlmIChlbGVtZW50KCkgJiYgZWxlbWVudCgpLT5pc0Nv
bnRlbnRFZGl0YWJsZSgpKSB7Ci0gICAgICAgIGlmIChlbGVtZW50KCktPnBhcmVudE5vZGUoKSAm
JiAhZWxlbWVudCgpLT5wYXJlbnROb2RlKCktPmlzQ29udGVudEVkaXRhYmxlKCkgJiYgZWxlbWVu
dCgpLT5pZCgpICE9IElEX0JPRFkpCisgICAgICAgIGlmIChlbGVtZW50KCktPnBhcmVudE5vZGUo
KSAmJiAhZWxlbWVudCgpLT5wYXJlbnROb2RlKCktPmlzQ29udGVudEVkaXRhYmxlKCkgJiYgIWVs
ZW1lbnQoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJvZHkoKSkpCiAgICAgICAgICAgICBwLT5h
ZGRGb2N1c1JpbmdSZWN0KF90eCwgX3R5LCB3aWR0aCgpLCBoZWlnaHQoKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CkluZGV4OiBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2Zvcm0uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3JlbmRlcmluZy9yZW5kZXJf
Zm9ybS5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTA3CmRpZmYgLXUgLXAgLXIxLjEwNyBr
aHRtbC9yZW5kZXJpbmcvcmVuZGVyX2Zvcm0uY3BwCi0tLSBraHRtbC9yZW5kZXJpbmcvcmVuZGVy
X2Zvcm0uY3BwCTIwIEp1biAyMDA1IDA1OjI0OjI2IC0wMDAwCTEuMTA3CisrKyBraHRtbC9yZW5k
ZXJpbmcvcmVuZGVyX2Zvcm0uY3BwCTI0IEp1biAyMDA1IDAzOjEwOjM1IC0wMDAwCkBAIC03NTMs
NyArNzUzLDcgQEAgUmVuZGVyT2JqZWN0KiBSZW5kZXJGaWVsZHNldDo6ZmluZExlZ2VuZAogewog
ICAgIGZvciAoUmVuZGVyT2JqZWN0KiBsZWdlbmQgPSBmaXJzdENoaWxkKCk7IGxlZ2VuZDsgbGVn
ZW5kID0gbGVnZW5kLT5uZXh0U2libGluZygpKSB7CiAgICAgICBpZiAoIWxlZ2VuZC0+aXNGbG9h
dGluZ09yUG9zaXRpb25lZCgpICYmIGxlZ2VuZC0+ZWxlbWVudCgpICYmCi0gICAgICAgICAgbGVn
ZW5kLT5lbGVtZW50KCktPmlkKCkgPT0gSURfTEVHRU5EKQorICAgICAgICAgIGxlZ2VuZC0+ZWxl
bWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6bGVnZW5kKCkpKQogICAgICAgICByZXR1cm4g
bGVnZW5kOwogICAgIH0KICAgICByZXR1cm4gMDsKQEAgLTExNDcsNyArMTE0Nyw3IEBAIHZvaWQg
UmVuZGVyU2VsZWN0Ojp1cGRhdGVGcm9tRWxlbWVudCgpCiAgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxLQ29tYm9Cb3gqPihtX3dpZGdldCktPmNsZWFyKCk7CiAKICAgICAgICAgZm9yIChsaXN0SW5k
ZXggPSAwOyBsaXN0SW5kZXggPCBpbnQobGlzdEl0ZW1zLnNpemUoKSk7IGxpc3RJbmRleCsrKSB7
Ci0gICAgICAgICAgICBpZiAobGlzdEl0ZW1zW2xpc3RJbmRleF0tPmlkKCkgPT0gSURfT1BUR1JP
VVApIHsKKyAgICAgICAgICAgIGlmIChsaXN0SXRlbXNbbGlzdEluZGV4XS0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6Om9wdGdyb3VwKCkpKSB7CiAgICAgICAgICAgICAgICAgUVN0cmluZyBsYWJlbCA9
IGxpc3RJdGVtc1tsaXN0SW5kZXhdLT5nZXRBdHRyaWJ1dGUoQVRUUl9MQUJFTCkuc3RyaW5nKCk7
CiAgICAgICAgICAgICAgICAgbGFiZWwucmVwbGFjZShRQ2hhcignXFwnKSwgYmFja3NsYXNoQXND
dXJyZW5jeVN5bWJvbCgpKTsKIApAQCAtMTE3MSwxNCArMTE3MSwxNCBAQCB2b2lkIFJlbmRlclNl
bGVjdDo6dXBkYXRlRnJvbUVsZW1lbnQoKQogICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxLQ29tYm9Cb3gqPihtX3dpZGdldCktPmluc2VydEl0ZW0obGFiZWwsIGxpc3RJbmRleCk7CiAj
ZW5kaWYKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGxpc3RJdGVtc1tsaXN0
SW5kZXhdLT5pZCgpID09IElEX09QVElPTikgeworICAgICAgICAgICAgZWxzZSBpZiAobGlzdEl0
ZW1zW2xpc3RJbmRleF0tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvcHRpb24oKSkpIHsKICAgICAg
ICAgICAgICAgICBRU3RyaW5nIGl0ZW1UZXh0ID0gc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1l
bnRJbXBsKj4obGlzdEl0ZW1zW2xpc3RJbmRleF0pLT50ZXh0KCkuc3RyaW5nKCk7CiAgICAgICAg
ICAgICAgICAgaXRlbVRleHQucmVwbGFjZShRQ2hhcignXFwnKSwgYmFja3NsYXNoQXNDdXJyZW5j
eVN5bWJvbCgpKTsKIAogICAgICAgICAgICAgICAgIC8vIEluIFdpbklFLCBsZWFkaW5nIGFuZCB0
cmFpbGluZyB3aGl0ZXNwYWNlIGlzIGlnbm9yZWQgaW4gb3B0aW9ucy4gV2UgbWF0Y2ggdGhpcyBi
ZWhhdmlvci4KICAgICAgICAgICAgICAgICBpdGVtVGV4dCA9IGl0ZW1UZXh0LnN0cmlwV2hpdGVT
cGFjZSgpOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChsaXN0SXRlbXNb
bGlzdEluZGV4XS0+cGFyZW50Tm9kZSgpLT5pZCgpID09IElEX09QVEdST1VQKQorICAgICAgICAg
ICAgICAgIGlmIChsaXN0SXRlbXNbbGlzdEluZGV4XS0+cGFyZW50Tm9kZSgpLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6b3B0Z3JvdXAoKSkpCiAgICAgICAgICAgICAgICAgICAgIGl0ZW1UZXh0LnBy
ZXBlbmQoIiAgICAiKTsKIAogI2lmIEFQUExFX0NIQU5HRVMKQEAgLTEzMDQsNyArMTMwNCw3IEBA
IHZvaWQgUmVuZGVyU2VsZWN0OjpsYXlvdXQoICkKIAogICAgIGJvb2wgZm91bmRPcHRpb24gPSBm
YWxzZTsKICAgICBmb3IgKHVpbnQgaSA9IDA7IGkgPCBsaXN0SXRlbXMuc2l6ZSgpICYmICFmb3Vu
ZE9wdGlvbjsgaSsrKQotCWZvdW5kT3B0aW9uID0gKGxpc3RJdGVtc1tpXS0+aWQoKSA9PSBJRF9P
UFRJT04pOworCWZvdW5kT3B0aW9uID0gKGxpc3RJdGVtc1tpXS0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6Om9wdGlvbigpKSk7CiAKICAgICBtX3dpZGdldC0+c2V0RW5hYmxlZChmb3VuZE9wdGlvbiAm
JiAhIGVsZW1lbnQoKS0+ZGlzYWJsZWQoKSk7CiB9CkBAIC0xMzE4LDEyICsxMzE4LDEyIEBAIHZv
aWQgUmVuZGVyU2VsZWN0OjpzbG90U2VsZWN0ZWQoaW50IGluZGUKICAgICBRTWVtQXJyYXk8SFRN
TEdlbmVyaWNGb3JtRWxlbWVudEltcGwqPiBsaXN0SXRlbXMgPSBlbGVtZW50KCktPmxpc3RJdGVt
cygpOwogICAgIGlmKGluZGV4ID49IDAgJiYgaW5kZXggPCBpbnQobGlzdEl0ZW1zLnNpemUoKSkp
CiAgICAgewotICAgICAgICBib29sIGZvdW5kID0gKCBsaXN0SXRlbXNbaW5kZXhdLT5pZCgpID09
IElEX09QVElPTiApOworICAgICAgICBib29sIGZvdW5kID0gKGxpc3RJdGVtc1tpbmRleF0tPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjpvcHRpb24oKSkpOwogCiAgICAgICAgIGlmICggIWZvdW5kICkg
ewogICAgICAgICAgICAgLy8gdGhpcyBvbmUgaXMgbm90IHNlbGVjdGFibGUsICB3ZSBuZWVkIHRv
IGZpbmQgYW4gb3B0aW9uIGVsZW1lbnQKICAgICAgICAgICAgIHdoaWxlICggKCB1bnNpZ25lZCAp
IGluZGV4IDwgbGlzdEl0ZW1zLnNpemUoKSApIHsKLSAgICAgICAgICAgICAgICBpZiAoIGxpc3RJ
dGVtc1tpbmRleF0tPmlkKCkgPT0gSURfT1BUSU9OICkgeworICAgICAgICAgICAgICAgIGlmIChs
aXN0SXRlbXNbaW5kZXhdLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpKSB7CiAgICAg
ICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgfQpAQCAtMTMzMiw3ICsxMzMyLDcgQEAgdm9pZCBSZW5kZXJTZWxl
Y3Q6OnNsb3RTZWxlY3RlZChpbnQgaW5kZQogCiAgICAgICAgICAgICBpZiAoICFmb3VuZCApIHsK
ICAgICAgICAgICAgICAgICB3aGlsZSAoIGluZGV4ID49IDAgKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmICggbGlzdEl0ZW1zW2luZGV4XS0+aWQoKSA9PSBJRF9PUFRJT04gKSB7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChsaXN0SXRlbXNbaW5kZXhdLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
b3B0aW9uKCkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMTM0
Niw3ICsxMzQ2LDcgQEAgdm9pZCBSZW5kZXJTZWxlY3Q6OnNsb3RTZWxlY3RlZChpbnQgaW5kZQog
ICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PENvbWJvQm94V2lkZ2V0Kj4oIG1fd2lkZ2V0ICkt
PnNldEN1cnJlbnRJdGVtKCBpbmRleCApOwogCiAgICAgICAgICAgICBmb3IgKCB1bnNpZ25lZCBp
bnQgaSA9IDA7IGkgPCBsaXN0SXRlbXMuc2l6ZSgpOyArK2kgKQotICAgICAgICAgICAgICAgIGlm
ICggbGlzdEl0ZW1zW2ldLT5pZCgpID09IElEX09QVElPTiAmJiBpICE9ICh1bnNpZ25lZCBpbnQp
IGluZGV4ICkKKyAgICAgICAgICAgICAgICBpZiAobGlzdEl0ZW1zW2ldLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6b3B0aW9uKCkpICYmIGkgIT0gKHVuc2lnbmVkIGludCkgaW5kZXgpCiAgICAgICAg
ICAgICAgICAgICAgIHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50SW1wbCo+KCBsaXN0SXRl
bXNbaV0gKS0+bV9zZWxlY3RlZCA9IGZhbHNlOwogCiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxI
VE1MT3B0aW9uRWxlbWVudEltcGwqPihsaXN0SXRlbXNbaW5kZXhdKS0+bV9zZWxlY3RlZCA9IHRy
dWU7CkBAIC0xMzY3LDcgKzEzNjcsNyBAQCB2b2lkIFJlbmRlclNlbGVjdDo6c2xvdFNlbGVjdGlv
bkNoYW5nZWQoCiAgICAgZm9yICggdW5zaWduZWQgaSA9IDA7IGkgPCBsaXN0SXRlbXMuY291bnQo
KTsgaSsrICkKICAgICAgICAgLy8gZG9uJ3QgdXNlIHNldFNlbGVjdGVkKCkgaGVyZSBiZWNhdXNl
IGl0IHdpbGwgY2F1c2UgdXMgdG8gYmUgY2FsbGVkCiAgICAgICAgIC8vIGFnYWluIHdpdGggdXBk
YXRlU2VsZWN0aW9uLgotICAgICAgICBpZiAoIGxpc3RJdGVtc1tpXS0+aWQoKSA9PSBJRF9PUFRJ
T04gKQorICAgICAgICBpZiAobGlzdEl0ZW1zW2ldLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b3B0
aW9uKCkpKQogICAgICAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnRJbXBsKj4o
IGxpc3RJdGVtc1tpXSApCiAgICAgICAgICAgICAgICAgLT5tX3NlbGVjdGVkID0gc3RhdGljX2Nh
c3Q8S0xpc3RCb3gqPiggbV93aWRnZXQgKS0+aXNTZWxlY3RlZCggaSApOwogCkBAIC0xNDA5LDcg
KzE0MDksNyBAQCB2b2lkIFJlbmRlclNlbGVjdDo6dXBkYXRlU2VsZWN0aW9uKCkKICAgICAgICAg
Ly8gaWYgbXVsdGktc2VsZWN0LCB3ZSBzZWxlY3Qgb25seSB0aGUgbmV3IHNlbGVjdGVkIGluZGV4
CiAgICAgICAgIEtMaXN0Qm94ICpsaXN0Qm94ID0gc3RhdGljX2Nhc3Q8S0xpc3RCb3gqPihtX3dp
ZGdldCk7CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBpbnQobGlzdEl0ZW1zLnNpemUoKSk7IGkr
KykKLSAgICAgICAgICAgIGxpc3RCb3gtPnNldFNlbGVjdGVkKGksbGlzdEl0ZW1zW2ldLT5pZCgp
ID09IElEX09QVElPTiAmJgorICAgICAgICAgICAgbGlzdEJveC0+c2V0U2VsZWN0ZWQoaSwgbGlz
dEl0ZW1zW2ldLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpICYmCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50SW1wbCo+
KGxpc3RJdGVtc1tpXSktPnNlbGVjdGVkKCkpOwogICAgIH0KICAgICBlbHNlIHsKQEAgLTE0MTcs
NyArMTQxNyw3IEBAIHZvaWQgUmVuZGVyU2VsZWN0Ojp1cGRhdGVTZWxlY3Rpb24oKQogICAgICAg
ICB1bnNpZ25lZCBmaXJzdE9wdGlvbiA9IGxpc3RJdGVtcy5zaXplKCk7CiAgICAgICAgIGkgPSBs
aXN0SXRlbXMuc2l6ZSgpOwogICAgICAgICB3aGlsZSAoaS0tKQotICAgICAgICAgICAgaWYgKGxp
c3RJdGVtc1tpXS0+aWQoKSA9PSBJRF9PUFRJT04pIHsKKyAgICAgICAgICAgIGlmIChsaXN0SXRl
bXNbaV0tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvcHRpb24oKSkpIHsKICAgICAgICAgICAgICAg
ICBpZiAoZm91bmQpCiAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEhUTUxPcHRpb25F
bGVtZW50SW1wbCo+KGxpc3RJdGVtc1tpXSktPm1fc2VsZWN0ZWQgPSBmYWxzZTsKICAgICAgICAg
ICAgICAgICBlbHNlIGlmIChzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudEltcGwqPihsaXN0
SXRlbXNbaV0pLT5zZWxlY3RlZCgpKSB7CkluZGV4OiBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2Zy
YW1lcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvcmVu
ZGVyaW5nL3JlbmRlcl9mcmFtZXMuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjY5CmRpZmYg
LXUgLXAgLXIxLjY5IGtodG1sL3JlbmRlcmluZy9yZW5kZXJfZnJhbWVzLmNwcAotLS0ga2h0bWwv
cmVuZGVyaW5nL3JlbmRlcl9mcmFtZXMuY3BwCTEwIE1heSAyMDA1IDE4OjQyOjA0IC0wMDAwCTEu
NjkKKysrIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfZnJhbWVzLmNwcAkyNCBKdW4gMjAwNSAwMzox
MDozNiAtMDAwMApAQCAtMzQsNyArMzQsNiBAQAogI2luY2x1ZGUgIm1pc2MvaHRtbGF0dHJzLmgi
CiAjaW5jbHVkZSAieG1sL2RvbTJfZXZlbnRzaW1wbC5oIgogI2luY2x1ZGUgInhtbC9kb21fZG9j
aW1wbC5oIgotI2luY2x1ZGUgIm1pc2MvaHRtbHRhZ3MuaCIKICNpbmNsdWRlICJraHRtbHZpZXcu
aCIKICNpbmNsdWRlICJraHRtbF9wYXJ0LmgiCiAjaW5jbHVkZSAicmVuZGVyX2FyZW5hLmgiCkBA
IC02NjksMTcgKzY2OCwxNyBAQCB2b2lkIFJlbmRlclBhcnRPYmplY3Q6OnVwZGF0ZVdpZGdldCgp
CiAKICAgc2V0TmVlZHNMYXlvdXRBbmRNaW5NYXhSZWNhbGMoKTsKIAotICBpZiAoZWxlbWVudCgp
LT5pZCgpID09IElEX09CSkVDVCkgeworICBpZiAoZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6b2JqZWN0KCkpKSB7CiAKICAgICAgIEhUTUxPYmplY3RFbGVtZW50SW1wbCAqbyA9IHN0
YXRpY19jYXN0PEhUTUxPYmplY3RFbGVtZW50SW1wbCAqPihlbGVtZW50KCkpOwogCiAgICAgICAv
LyBDaGVjayBmb3IgYSBjaGlsZCBFTUJFRCB0YWcuCiAgICAgICBIVE1MRW1iZWRFbGVtZW50SW1w
bCAqZW1iZWQgPSAwOwogICAgICAgZm9yIChOb2RlSW1wbCAqY2hpbGQgPSBvLT5maXJzdENoaWxk
KCk7IGNoaWxkOyApIHsKLSAgICAgICAgICBpZiAoY2hpbGQtPmlkKCkgPT0gSURfRU1CRUQpIHsK
KyAgICAgICAgICBpZiAoY2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjplbWJlZCgpKSkgewog
ICAgICAgICAgICAgICBlbWJlZCA9IHN0YXRpY19jYXN0PEhUTUxFbWJlZEVsZW1lbnRJbXBsICo+
KCBjaGlsZCApOwogICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9IGVsc2UgaWYgKGNo
aWxkLT5pZCgpID09IElEX09CSkVDVCkgeworICAgICAgICAgIH0gZWxzZSBpZiAoY2hpbGQtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjpvYmplY3QoKSkpIHsKICAgICAgICAgICAgICAgY2hpbGQgPSBj
aGlsZC0+bmV4dFNpYmxpbmcoKTsgICAgICAgICAvLyBEb24ndCBkZXNjZW5kIGludG8gbmVzdGVk
IE9CSkVDVCB0YWdzCiAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgY2hpbGQgPSBj
aGlsZC0+dHJhdmVyc2VOZXh0Tm9kZShvKTsgICAvLyBPdGhlcndpc2UgZGVzY2VuZCAoRU1CRURz
IG1heSBiZSBpbnNpZGUgQ09NTUVOVCB0YWdzKQpAQCAtNzE5LDcgKzcxOCw3IEBAIHZvaWQgUmVu
ZGVyUGFydE9iamVjdDo6dXBkYXRlV2lkZ2V0KCkKICAgICAgIC8vIEdldCB0aGUgYXR0cmlidXRl
cyBmcm9tIHRoZSBwYXJhbXMgaWYgdGhlcmUgaXMgbm8gRU1CRUQgdGFnLgogICAgICAgTm9kZUlt
cGwgKmNoaWxkID0gby0+Zmlyc3RDaGlsZCgpOwogICAgICAgd2hpbGUgKGNoaWxkICYmICh1cmwu
aXNFbXB0eSgpIHx8IHNlcnZpY2VUeXBlLmlzRW1wdHkoKSB8fCAhZW1iZWQpKSB7Ci0gICAgICAg
ICAgaWYgKGNoaWxkLT5pZCgpID09IElEX1BBUkFNKSB7CisgICAgICAgICAgaWYgKGNoaWxkLT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6cGFyYW0oKSkpIHsKICAgICAgICAgICAgICAgSFRNTFBhcmFt
RWxlbWVudEltcGwgKnAgPSBzdGF0aWNfY2FzdDxIVE1MUGFyYW1FbGVtZW50SW1wbCAqPiggY2hp
bGQgKTsKICAgICAgICAgICAgICAgUVN0cmluZyBuYW1lID0gcC0+bmFtZSgpLnN0cmluZygpLmxv
d2VyKCk7CiAgICAgICAgICAgICAgIGlmICh1cmwuaXNFbXB0eSgpICYmIChuYW1lID09ICJzcmMi
IHx8IG5hbWUgPT0gIm1vdmllIiB8fCBuYW1lID09ICJjb2RlIiB8fCBuYW1lID09ICJ1cmwiKSkg
ewpAQCAtODEwLDE0ICs4MDksMTQgQEAgdm9pZCBSZW5kZXJQYXJ0T2JqZWN0Ojp1cGRhdGVXaWRn
ZXQoKQogICAgICAgLy8gRmluZCBvdXQgaWYgd2Ugc3VwcG9ydCBmYWxsYmFjayBjb250ZW50Lgog
ICAgICAgbV9oYXNGYWxsYmFja0NvbnRlbnQgPSBmYWxzZTsKICAgICAgIGZvciAoTm9kZUltcGwg
KmNoaWxkID0gby0+Zmlyc3RDaGlsZCgpOyBjaGlsZCAmJiAhbV9oYXNGYWxsYmFja0NvbnRlbnQ7
IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAgICBpZiAoKCFjaGlsZC0+
aXNUZXh0Tm9kZSgpICYmIGNoaWxkLT5pZCgpICE9IElEX0VNQkVEICYmIGNoaWxkLT5pZCgpICE9
IElEX1BBUkFNKSB8fCAvLyBEaXNjb3VudCA8ZW1iZWQ+IGFuZCA8cGFyYW0+CisgICAgICAgICAg
aWYgKCghY2hpbGQtPmlzVGV4dE5vZGUoKSAmJiAhY2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjplbWJlZCgpKSAmJiAhY2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpwYXJhbSgpKSkgfHwg
Ly8gRGlzY291bnQgPGVtYmVkPiBhbmQgPHBhcmFtPgogICAgICAgICAgICAgICAoY2hpbGQtPmlz
VGV4dE5vZGUoKSAmJiAhY2hpbGQtPmNvbnRhaW5zT25seVdoaXRlc3BhY2UoKSkpCiAgICAgICAg
ICAgICAgIG1faGFzRmFsbGJhY2tDb250ZW50ID0gdHJ1ZTsKICAgICAgIH0KICAgICAgIGJvb2wg
c3VjY2VzcyA9IHBhcnQtPnJlcXVlc3RPYmplY3QoIHRoaXMsIHVybCwgc2VydmljZVR5cGUsIHBh
cmFtTmFtZXMsIHBhcmFtVmFsdWVzICk7CiAgICAgICBpZiAoIXN1Y2Nlc3MgJiYgbV9oYXNGYWxs
YmFja0NvbnRlbnQpCiAgICAgICAgICAgby0+cmVuZGVyRmFsbGJhY2tDb250ZW50KCk7Ci0gIH0g
ZWxzZSBpZiAoIGVsZW1lbnQoKS0+aWQoKSA9PSBJRF9FTUJFRCApIHsKKyAgfSBlbHNlIGlmIChl
bGVtZW50KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjplbWJlZCgpKSkgewogCiAgICAgICBIVE1M
RW1iZWRFbGVtZW50SW1wbCAqbyA9IHN0YXRpY19jYXN0PEhUTUxFbWJlZEVsZW1lbnRJbXBsICo+
KGVsZW1lbnQoKSk7CiAgICAgICB1cmwgPSBvLT51cmw7CkBAIC04NDQsNyArODQzLDcgQEAgdm9p
ZCBSZW5kZXJQYXJ0T2JqZWN0Ojp1cGRhdGVXaWRnZXQoKQogICAgICAgfQogICAgICAgcGFydC0+
cmVxdWVzdE9iamVjdCggdGhpcywgdXJsLCBzZXJ2aWNlVHlwZSwgcGFyYW1OYW1lcywgcGFyYW1W
YWx1ZXMgKTsKICAgfSBlbHNlIHsKLSAgICAgIGFzc2VydChlbGVtZW50KCktPmlkKCkgPT0gSURf
SUZSQU1FKTsKKyAgICAgIGFzc2VydChlbGVtZW50KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpp
ZnJhbWUoKSkpOwogICAgICAgSFRNTElGcmFtZUVsZW1lbnRJbXBsICpvID0gc3RhdGljX2Nhc3Q8
SFRNTElGcmFtZUVsZW1lbnRJbXBsICo+KGVsZW1lbnQoKSk7CiAgICAgICB1cmwgPSBvLT5tX1VS
TC5zdHJpbmcoKTsKICAgICAgIGlmICh1cmwuaXNFbXB0eSgpKSB7CkBAIC04OTAsNyArODg5LDcg
QEAgdm9pZCBSZW5kZXJQYXJ0T2JqZWN0OjpzbG90Vmlld0NsZWFyZWQoKQogICAgICAgUVNjcm9s
bFZpZXc6OlNjcm9sbEJhck1vZGUgc2Nyb2xsID0gUVNjcm9sbFZpZXc6OkF1dG87CiAgICAgICBp
bnQgbWFyZ2ludyA9IC0xOwogICAgICAgaW50IG1hcmdpbmggPSAtMTsKLSAgICAgIGlmICggZWxl
bWVudCgpLT5pZCgpID09IElEX0lGUkFNRSkgeworICAgICAgaWYgKGVsZW1lbnQoKS0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OmlmcmFtZSgpKSkgewogCSAgSFRNTElGcmFtZUVsZW1lbnRJbXBsICpm
cmFtZSA9IHN0YXRpY19jYXN0PEhUTUxJRnJhbWVFbGVtZW50SW1wbCAqPihlbGVtZW50KCkpOwog
CSAgaWYoZnJhbWUtPm1fZnJhbWVCb3JkZXIpCiAJICAgICAgZnJhbWVTdHlsZSA9IFFGcmFtZTo6
Qm94OwpAQCAtOTEwLDcgKzkwOSw3IEBAIHZvaWQgUmVuZGVyUGFydE9iamVjdDo6c2xvdFZpZXdD
bGVhcmVkKCkKICAgICAgICAgICBrZERlYnVnKDYwMzEpIDw8ICJmcmFtZSBpcyBhIEtIVE1Mdmll
dyEiIDw8IGVuZGw7CiAjZW5kaWYKICAgICAgICAgICBLSFRNTFZpZXcgKmh0bWxWaWV3ID0gc3Rh
dGljX2Nhc3Q8S0hUTUxWaWV3ICo+KHZpZXcpOwotICAgICAgICAgIGh0bWxWaWV3LT5zZXRJZ25v
cmVXaGVlbEV2ZW50cyggZWxlbWVudCgpLT5pZCgpID09IElEX0lGUkFNRSApOworICAgICAgICAg
IGh0bWxWaWV3LT5zZXRJZ25vcmVXaGVlbEV2ZW50cyhlbGVtZW50KCktPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjppZnJhbWUoKSkpOwogICAgICAgICAgIGlmKG1hcmdpbncgIT0gLTEpIGh0bWxWaWV3
LT5zZXRNYXJnaW5XaWR0aChtYXJnaW53KTsKICAgICAgICAgICBpZihtYXJnaW5oICE9IC0xKSBo
dG1sVmlldy0+c2V0TWFyZ2luSGVpZ2h0KG1hcmdpbmgpOwogICAgICAgICB9CkluZGV4OiBraHRt
bC9yZW5kZXJpbmcvcmVuZGVyX2ltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvV2ViQ29yZS9raHRtbC9yZW5kZXJpbmcvcmVuZGVyX2ltYWdlLmNwcCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS43NApkaWZmIC11IC1wIC1yMS43NCBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2lt
YWdlLmNwcAotLS0ga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9pbWFnZS5jcHAJMjUgRmViIDIwMDUg
MDA6MjU6MTIgLTAwMDAJMS43NAorKysga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9pbWFnZS5jcHAJ
MjQgSnVuIDIwMDUgMDM6MTA6MzcgLTAwMDAKQEAgLTM2LDEwICszNiw4IEBACiAjaW5jbHVkZSAi
Y3NzL2Nzc2hlbHBlci5oIgogI2luY2x1ZGUgIm1pc2MvaGVscGVyLmgiCiAjaW5jbHVkZSAibWlz
Yy9odG1sYXR0cnMuaCIKLSNpbmNsdWRlICJtaXNjL2h0bWx0YWdzLmgiCiAjaW5jbHVkZSAiaHRt
bC9odG1sX2Zvcm1pbXBsLmgiCiAjaW5jbHVkZSAiaHRtbC9odG1sX2ltYWdlaW1wbC5oIgotI2lu
Y2x1ZGUgImh0bWwvZHRkLmgiCiAjaW5jbHVkZSAieG1sL2RvbTJfZXZlbnRzaW1wbC5oIgogI2lu
Y2x1ZGUgImh0bWwvaHRtbF9kb2N1bWVudGltcGwuaCIKICNpbmNsdWRlIDxtYXRoLmg+CkBAIC00
MTgsNyArNDE2LDcgQEAgdm9pZCBSZW5kZXJJbWFnZTo6cGFpbnQoUGFpbnRJbmZvJiBpLCBpbgog
CiAKIC8vICAgICAgICAgICAgIHAtPmRyYXdQaXhtYXAoIG9mZnMueCgpLCB5LCBwaXgsIHJlY3Qu
eCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpICk7Ci0gICAgICAgICAg
ICAgSFRNTEltYWdlRWxlbWVudEltcGwqIGkgPSAoZWxlbWVudCgpICYmIGVsZW1lbnQoKS0+aWQo
KSA9PSBJRF9JTUcpID8gc3RhdGljX2Nhc3Q8SFRNTEltYWdlRWxlbWVudEltcGwqPihlbGVtZW50
KCkpIDogMDsKKyAgICAgICAgICAgICBIVE1MSW1hZ2VFbGVtZW50SW1wbCogaSA9IChlbGVtZW50
KCkgJiYgZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW1nKCkpKSA/IHN0YXRpY19j
YXN0PEhUTUxJbWFnZUVsZW1lbnRJbXBsKj4oZWxlbWVudCgpKSA6IDA7CiAgICAgICAgICAgICAg
aWYgKGkgJiYgIWktPmNvbXBvc2l0ZU9wZXJhdG9yKCkuaXNOdWxsKCkpewogICAgICAgICAgICAg
ICAgIHAtPmRyYXdQaXhtYXAgKG9mZnMsIHBpeCwgcmVjdCwgaS0+Y29tcG9zaXRlT3BlcmF0b3Io
KSk7CiAgICAgICAgICAgICAgfQpAQCAtNDg1LDcgKzQ4Myw3IEBAIHZvaWQgUmVuZGVySW1hZ2U6
OmxheW91dCgpCiAKIEhUTUxNYXBFbGVtZW50SW1wbCogUmVuZGVySW1hZ2U6OmltYWdlTWFwKCkK
IHsKLSAgICBIVE1MSW1hZ2VFbGVtZW50SW1wbCogaSA9IGVsZW1lbnQoKS0+aWQoKSA9PSBJRF9J
TUcgPyBzdGF0aWNfY2FzdDxIVE1MSW1hZ2VFbGVtZW50SW1wbCo+KGVsZW1lbnQoKSkgOiAwOwor
ICAgIEhUTUxJbWFnZUVsZW1lbnRJbXBsKiBpID0gZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6aW1nKCkpID8gc3RhdGljX2Nhc3Q8SFRNTEltYWdlRWxlbWVudEltcGwqPihlbGVtZW50
KCkpIDogMDsKICAgICByZXR1cm4gaSA/IGktPmdldERvY3VtZW50KCktPmdldEltYWdlTWFwKGkt
PmltYWdlTWFwKCkpIDogMDsKIH0KIApAQCAtNTExLDkgKzUwOSw5IEBAIGJvb2wgUmVuZGVySW1h
Z2U6Om5vZGVBdFBvaW50KE5vZGVJbmZvJiAKIAogdm9pZCBSZW5kZXJJbWFnZTo6dXBkYXRlQWx0
VGV4dCgpCiB7Ci0gICAgaWYgKGVsZW1lbnQoKS0+aWQoKSA9PSBJRF9JTlBVVCkKKyAgICBpZiAo
ZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW5wdXQoKSkpCiAgICAgICAgIGFsdCA9
IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnRJbXBsKj4oZWxlbWVudCgpKS0+YWx0VGV4dCgp
OwotICAgIGVsc2UgaWYgKGVsZW1lbnQoKS0+aWQoKSA9PSBJRF9JTUcpCisgICAgZWxzZSBpZiAo
ZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW1nKCkpKQogICAgICAgICBhbHQgPSBz
dGF0aWNfY2FzdDxIVE1MSW1hZ2VFbGVtZW50SW1wbCo+KGVsZW1lbnQoKSktPmFsdFRleHQoKTsK
IH0KIApJbmRleDoga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9sYXllci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9sYXllci5j
cHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuOTYKZGlmZiAtdSAtcCAtcjEuOTYga2h0bWwvcmVu
ZGVyaW5nL3JlbmRlcl9sYXllci5jcHAKLS0tIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfbGF5ZXIu
Y3BwCTEwIE1heSAyMDA1IDIyOjI1OjA0IC0wMDAwCTEuOTYKKysrIGtodG1sL3JlbmRlcmluZy9y
ZW5kZXJfbGF5ZXIuY3BwCTI0IEp1biAyMDA1IDAzOjEwOjM4IC0wMDAwCkBAIC00OSw3ICs0OSw2
IEBACiAjaW5jbHVkZSAicmVuZGVyX2FyZW5hLmgiCiAjaW5jbHVkZSAieG1sL2RvbV9kb2NpbXBs
LmgiCiAjaW5jbHVkZSAieG1sL2RvbTJfZXZlbnRzaW1wbC5oIgotI2luY2x1ZGUgIm1pc2MvaHRt
bHRhZ3MuaCIKICNpbmNsdWRlICJodG1sL2h0bWxfYmxvY2tpbXBsLmgiCiAKICNpbmNsdWRlIDxx
c2Nyb2xsYmFyLmg+CkBAIC0xNDY3LDcgKzE0NjYsNyBAQCBpbnQgTWFycXVlZTo6bWFycXVlZVNw
ZWVkKCkgY29uc3QKIHsKICAgICBpbnQgcmVzdWx0ID0gbV9sYXllci0+cmVuZGVyZXIoKS0+c3R5
bGUoKS0+bWFycXVlZVNwZWVkKCk7CiAgICAgRE9NOjpOb2RlSW1wbCogZWx0ID0gbV9sYXllci0+
cmVuZGVyZXIoKS0+ZWxlbWVudCgpOwotICAgIGlmIChlbHQgJiYgZWx0LT5pZCgpID09IElEX01B
UlFVRUUpIHsKKyAgICBpZiAoZWx0ICYmIGVsdC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om1hcnF1
ZWUoKSkpIHsKICAgICAgICAgSFRNTE1hcnF1ZWVFbGVtZW50SW1wbCogbWFycXVlZUVsdCA9IHN0
YXRpY19jYXN0PEhUTUxNYXJxdWVlRWxlbWVudEltcGwqPihlbHQpOwogICAgICAgICByZXN1bHQg
PSBrTWF4KHJlc3VsdCwgbWFycXVlZUVsdC0+bWluaW11bURlbGF5KCkpOwogICAgIH0KSW5kZXg6
IGtodG1sL3JlbmRlcmluZy9yZW5kZXJfbGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1dlYkNvcmUva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9saW5lLmNwcCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS40MApkaWZmIC11IC1wIC1yMS40MCBraHRtbC9yZW5kZXJpbmcvcmVuZGVy
X2xpbmUuY3BwCi0tLSBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2xpbmUuY3BwCTIzIEp1biAyMDA1
IDE5OjQ3OjQ5IC0wMDAwCTEuNDAKKysrIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfbGluZS5jcHAJ
MjQgSnVuIDIwMDUgMDM6MTA6MzkgLTAwMDAKQEAgLTM3LDcgKzM3LDYgQEAKICNpbmNsdWRlICJy
ZW5kZXJfbGluZS5oIgogCiAjaW5jbHVkZSAia2h0bWx2aWV3LmgiCi0jaW5jbHVkZSAiaHRtbHRh
Z3MuaCIKIAogdXNpbmcgbmFtZXNwYWNlIERPTTsKIApJbmRleDoga2h0bWwvcmVuZGVyaW5nL3Jl
bmRlcl9saXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRt
bC9yZW5kZXJpbmcvcmVuZGVyX2xpc3QuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjYwCmRp
ZmYgLXUgLXAgLXIxLjYwIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfbGlzdC5jcHAKLS0tIGtodG1s
L3JlbmRlcmluZy9yZW5kZXJfbGlzdC5jcHAJMjUgRmViIDIwMDUgMDA6MjU6MTIgLTAwMDAJMS42
MAorKysga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9saXN0LmNwcAkyNCBKdW4gMjAwNSAwMzoxMDo0
MCAtMDAwMApAQCAtMjYsNyArMjYsOCBAQAogI2luY2x1ZGUgInJlbmRlcmluZy9yZW5kZXJfY2Fu
dmFzLmgiCiAKICNpbmNsdWRlICJ4bWwvZG9tX2RvY2ltcGwuaCIKLSNpbmNsdWRlICJtaXNjL2h0
bWx0YWdzLmgiCisKKyNpbmNsdWRlICJodG1sbmFtZXMuaCIKIAogI2luY2x1ZGUgPHFwYWludGVy
Lmg+CiAKQEAgLTM3LDYgKzM4LDcgQEAKIC8vI2RlZmluZSBCT1hfREVCVUcKIAogdXNpbmcgRE9N
OjpEb2N1bWVudEltcGw7Cit1c2luZyBET006OkhUTUxOYW1lczsKIHVzaW5nIG5hbWVzcGFjZSBr
aHRtbDsKIAogY29uc3QgaW50IGNNYXJrZXJQYWRkaW5nID0gNzsKQEAgLTIxMyw3ICsyMTUsNyBA
QCBzdGF0aWMgUmVuZGVyT2JqZWN0KiBnZXRQYXJlbnRPZkZpcnN0TGluCiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgCiAgICAgICAgIGlmIChjdXJyQ2hpbGQtPnN0eWxlKCktPmh0bWxIYWNr
cygpICYmIGN1cnJDaGlsZC0+ZWxlbWVudCgpICYmCi0gICAgICAgICAgICAoY3VyckNoaWxkLT5l
bGVtZW50KCktPmlkKCkgPT0gSURfVUwgfHwgY3VyckNoaWxkLT5lbGVtZW50KCktPmlkKCkgPT0g
SURfT0wpKQorICAgICAgICAgICAgKGN1cnJDaGlsZC0+ZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6dWwoKSl8fCBjdXJyQ2hpbGQtPmVsZW1lbnQoKS0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6Om9sKCkpKSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIFJl
bmRlck9iamVjdCogbGluZUJveCA9IGdldFBhcmVudE9mRmlyc3RMaW5lQm94KGN1cnJDaGlsZCwg
bWFya2VyKTsKSW5kZXg6IGtodG1sL3JlbmRlcmluZy9yZW5kZXJfb2JqZWN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9yZW5kZXJpbmcvcmVuZGVyX29i
amVjdC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTk1CmRpZmYgLXUgLXAgLXIxLjE5NSBr
aHRtbC9yZW5kZXJpbmcvcmVuZGVyX29iamVjdC5jcHAKLS0tIGtodG1sL3JlbmRlcmluZy9yZW5k
ZXJfb2JqZWN0LmNwcAkyMyBKdW4gMjAwNSAxOTo0Nzo0OSAtMDAwMAkxLjE5NQorKysga2h0bWwv
cmVuZGVyaW5nL3JlbmRlcl9vYmplY3QuY3BwCTI0IEp1biAyMDA1IDAzOjEwOjQyIC0wMDAwCkBA
IC00Myw2ICs0Myw3IEBACiAjaW5jbHVkZSAicmVuZGVyX2lubGluZS5oIgogI2luY2x1ZGUgInJl
bmRlcl9ibG9jay5oIgogI2luY2x1ZGUgInJlbmRlcl9mbGV4Ym94LmgiCisjaW5jbHVkZSAiaHRt
bG5hbWVzLmgiCiAKICNpZiBBUFBMRV9DSEFOR0VTCiAvLyBGb3IgYWNjZXNzaWJpbGl0eQpAQCAt
MTc1LDE3ICsxNzYsMTcgQEAgYm9vbCBSZW5kZXJPYmplY3Q6OmlzUm9vdCgpIGNvbnN0CiAKIGJv
b2wgUmVuZGVyT2JqZWN0Ojppc0JvZHkoKSBjb25zdAogewotICAgIHJldHVybiBlbGVtZW50KCkg
JiYgZWxlbWVudCgpLT5yZW5kZXJlcigpID09IHRoaXMgJiYgZWxlbWVudCgpLT5pZCgpID09IElE
X0JPRFk7CisgICAgcmV0dXJuIGVsZW1lbnQoKSAmJiBlbGVtZW50KCktPnJlbmRlcmVyKCkgPT0g
dGhpcyAmJiBlbGVtZW50KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpib2R5KCkpOwogfQogCiBi
b29sIFJlbmRlck9iamVjdDo6aXNIUigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGVsZW1lbnQoKSAm
JiBlbGVtZW50KCktPmlkKCkgPT0gSURfSFI7CisgICAgcmV0dXJuIGVsZW1lbnQoKSAmJiBlbGVt
ZW50KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpocigpKTsKIH0KIAogYm9vbCBSZW5kZXJPYmpl
Y3Q6OmlzSFRNTE1hcnF1ZWUoKSBjb25zdAogewotICAgIHJldHVybiBlbGVtZW50KCkgJiYgZWxl
bWVudCgpLT5yZW5kZXJlcigpID09IHRoaXMgJiYgZWxlbWVudCgpLT5pZCgpID09IElEX01BUlFV
RUU7CisgICAgcmV0dXJuIGVsZW1lbnQoKSAmJiBlbGVtZW50KCktPnJlbmRlcmVyKCkgPT0gdGhp
cyAmJiBlbGVtZW50KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjptYXJxdWVlKCkpOwogfQogCiBi
b29sIFJlbmRlck9iamVjdDo6Y2FuSGF2ZUNoaWxkcmVuKCkgY29uc3QKQEAgLTczNyw3ICs3Mzgs
NyBAQCBib29sIFJlbmRlck9iamVjdDo6c2l6ZXNUb01heFdpZHRoKCkgY29uCiAgICAgLy8gYnV0
IHRoZXkgYWxsb3cgdGV4dCB0byBzaXQgb24gdGhlIHNhbWUgbGluZSBhcyB0aGUgbWFycXVlZS4K
ICAgICBpZiAoaXNGbG9hdGluZygpIHx8IChpc0NvbXBhY3QoKSAmJiBpc0lubGluZSgpKSB8fCAK
ICAgICAgICAgKGlzSW5saW5lQmxvY2tPcklubGluZVRhYmxlKCkgJiYgIWlzSFRNTE1hcnF1ZWUo
KSkgfHwKLSAgICAgICAgKGVsZW1lbnQoKSAmJiAoZWxlbWVudCgpLT5pZCgpID09IElEX0JVVFRP
TiB8fCBlbGVtZW50KCktPmlkKCkgPT0gSURfTEVHRU5EKSkpCisgICAgICAgIChlbGVtZW50KCkg
JiYgKGVsZW1lbnQoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJ1dHRvbigpKSB8fCBlbGVtZW50
KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpsZWdlbmQoKSkpKSkKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgCiAgICAgLy8gQ2hpbGRyZW4gb2YgYSBob3Jpem9udGFsIG1hcnF1ZWUgZG8gbm90
IGZpbGwgdGhlIGNvbnRhaW5lciBieSBkZWZhdWx0LgpAQCAtMTMyNiw3ICsxMzI3LDcgQEAgUVN0
cmluZyBSZW5kZXJPYmplY3Q6OmluZm9ybWF0aW9uKCkgY29ucwogICAgIGlmIChlbGVtZW50KCkg
JiYgZWxlbWVudCgpLT5hY3RpdmUoKSkgdHMgPDwgImFjdCAiOwogICAgIGlmIChlbGVtZW50KCkg
JiYgZWxlbWVudCgpLT5pc0xpbmsoKSkgdHMgPDwgImFuY2hvciAiOwogICAgIGlmIChlbGVtZW50
KCkgJiYgZWxlbWVudCgpLT5mb2N1c2VkKCkpIHRzIDw8ICJmb2N1cyAiOwotICAgIGlmIChlbGVt
ZW50KCkpIHRzIDw8ICIgPCIgPDwgIGdldFRhZ05hbWUoZWxlbWVudCgpLT5pZCgpKS5zdHJpbmco
KSA8PCAiPiI7CisgICAgaWYgKGVsZW1lbnQoKSkgdHMgPDwgIiA8IiA8PCAgZWxlbWVudCgpLT5s
b2NhbE5hbWUoKS5zdHJpbmcoKSA8PCAiPiI7CiAgICAgdHMgPDwgIiAoIiA8PCB4UG9zKCkgPDwg
IiwiIDw8IHlQb3MoKSA8PCAiLCIgPDwgd2lkdGgoKSA8PCAiLCIgPDwgaGVpZ2h0KCkgPDwgIiki
CiAJPDwgKGlzVGFibGVDZWxsKCkgPwogCSAgICAoIFFTdHJpbmc6OmZyb21MYXRpbjEoIiBbcj0i
KSArCkBAIC0xNTU2LDcgKzE1NTcsNyBAQCB2b2lkIFJlbmRlck9iamVjdDo6c2V0U3R5bGUoUmVu
ZGVyU3R5bGUgCiAgICAgICAgIC8vIFRoZSBiYWNrZ3JvdW5kIG9mIHRoZSByb290IGVsZW1lbnQg
b3IgdGhlIGJvZHkgZWxlbWVudCBjb3VsZCBwcm9wYWdhdGUgdXAgdG8KICAgICAgICAgLy8gdGhl
IGNhbnZhcy4gIEp1c3QgZGlydHkgdGhlIGVudGlyZSBjYW52YXMgd2hlbiBvdXIgc3R5bGUgY2hh
bmdlcyBzdWJzdGFudGlhbGx5LgogICAgICAgICBpZiAoZCA+PSBSZW5kZXJTdHlsZTo6UmVwYWlu
dCAmJiBlbGVtZW50KCkgJiYKLSAgICAgICAgICAgIChlbGVtZW50KCktPmlkKCkgPT0gSURfSFRN
TCB8fCBlbGVtZW50KCktPmlkKCkgPT0gSURfQk9EWSkpCisgICAgICAgICAgICAoZWxlbWVudCgp
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aHRtbCgpKSB8fCBlbGVtZW50KCktPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjpib2R5KCkpKSkKICAgICAgICAgICAgIGNhbnZhcygpLT5yZXBhaW50KCk7CiAg
ICAgICAgIGVsc2UgaWYgKG1fcGFyZW50ICYmICFpc1RleHQoKSkgewogICAgICAgICAgICAgLy8g
RG8gYSByZXBhaW50IHdpdGggdGhlIG9sZCBzdHlsZSBmaXJzdCwgZS5nLiwgZm9yIGV4YW1wbGUg
aWYgd2UgZ28gZnJvbQpAQCAtMjE4OCw3ICsyMTg5LDcgQEAgdm9pZCBSZW5kZXJPYmplY3Q6Omdl
dFRleHREZWNvcmF0aW9uQ29sbwogICAgICAgICBpZiAoY3VyciAmJiBjdXJyLT5pc1JlbmRlckJs
b2NrKCkgJiYgY3Vyci0+Y29udGludWF0aW9uKCkpCiAgICAgICAgICAgICBjdXJyID0gY3Vyci0+
Y29udGludWF0aW9uKCk7CiAgICAgfSB3aGlsZSAoY3VyciAmJiBkZWNvcmF0aW9ucyAmJiAoIXF1
aXJrc01vZGUgfHwgIWN1cnItPmVsZW1lbnQoKSB8fAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIChjdXJyLT5lbGVtZW50KCktPmlkKCkgIT0gSURfQSAmJiBjdXJyLT5lbGVt
ZW50KCktPmlkKCkgIT0gSURfRk9OVCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAoIWN1cnItPmVsZW1lbnQoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmEoKSkgJiYg
IWN1cnItPmVsZW1lbnQoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZvbnQoKSkpKSk7CiAKICAg
ICAvLyBJZiB3ZSBiYWlsZWQgb3V0LCB1c2UgdGhlIGVsZW1lbnQgd2UgYmFpbGVkIG91dCBhdCAo
dHlwaWNhbGx5IGEgPGZvbnQ+IG9yIDxhPiBlbGVtZW50KS4KICAgICBpZiAoZGVjb3JhdGlvbnMg
JiYgY3VycikgewpAQCAtMjMyMiw3ICsyMzIzLDcgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OnNldFBp
eG1hcChjb25zdCBRUGl4bQogICAgIC8vIHdvdWxkIGF2b2lkIHB1dHRpbmcgdGhpcyBmdW5jdGlv
biBhbmQgdGhlIENhY2hlZE9iamVjdENsaWVudCBiYXNlIGNsYXNzIGludG8gUmVuZGVyT2JqZWN0
LgogCiAgICAgaWYgKGltYWdlICYmIGltYWdlLT5waXhtYXBfc2l6ZSgpID09IGltYWdlLT52YWxp
ZF9yZWN0KCkuc2l6ZSgpICYmIHBhcmVudCgpKSB7Ci0gICAgICAgIGlmIChjYW52YXMoKSAmJiBl
bGVtZW50KCkgJiYgKGVsZW1lbnQoKS0+aWQoKSA9PSBJRF9IVE1MIHx8IGVsZW1lbnQoKS0+aWQo
KSA9PSBJRF9CT0RZKSkKKyAgICAgICAgaWYgKGNhbnZhcygpICYmIGVsZW1lbnQoKSAmJiAoZWxl
bWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aHRtbCgpKSB8fCBlbGVtZW50KCktPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjpib2R5KCkpKSkKICAgICAgICAgICAgIGNhbnZhcygpLT5yZXBhaW50
KCk7ICAgIC8vIHJlcGFpbnQgdGhlIGVudGlyZSBjYW52YXMgc2luY2UgdGhlIGJhY2tncm91bmQg
Z2V0cyBwcm9wYWdhdGVkIHVwCiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJlcGFpbnQoKTsg
ICAgICAgICAgICAgIC8vIHJlcGFpbnQgb2JqZWN0LCB3aGljaCBpcyBhIGJveCBvciBhIGNvbnRh
aW5lciB3aXRoIGJveGVzIGluc2lkZSBpdApJbmRleDoga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl90
YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvcmVu
ZGVyaW5nL3JlbmRlcl90YWJsZS5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTI2CmRpZmYg
LXUgLXAgLXIxLjEyNiBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX3RhYmxlLmNwcAotLS0ga2h0bWwv
cmVuZGVyaW5nL3JlbmRlcl90YWJsZS5jcHAJMTEgTWF5IDIwMDUgMDI6MTA6MTAgLTAwMDAJMS4x
MjYKKysrIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfdGFibGUuY3BwCTI0IEp1biAyMDA1IDAzOjEw
OjQzIC0wMDAwCkBAIC0zMSw4ICszMSw4IEBACiAjaW5jbHVkZSAicmVuZGVyaW5nL3JlbmRlcl90
YWJsZS5oIgogI2luY2x1ZGUgInJlbmRlcmluZy90YWJsZV9sYXlvdXQuaCIKICNpbmNsdWRlICJo
dG1sL2h0bWxfdGFibGVpbXBsLmgiCi0jaW5jbHVkZSAibWlzYy9odG1sdGFncy5oIgogI2luY2x1
ZGUgIm1pc2MvaHRtbGF0dHJzLmgiCisjaW5jbHVkZSAiaHRtbG5hbWVzLmgiCiAjaW5jbHVkZSAi
eG1sL2RvbV9kb2NpbXBsLmgiCiAKICNpbmNsdWRlIDxrZ2xvYmFsLmg+CkBAIC0xMTIsNyArMTEy
LDcgQEAgdm9pZCBSZW5kZXJUYWJsZTo6YWRkQ2hpbGQoUmVuZGVyT2JqZWN0IAogI2VuZGlmCiAg
ICAgUmVuZGVyT2JqZWN0ICpvID0gY2hpbGQ7CiAKLSAgICBpZiAoY2hpbGQtPmVsZW1lbnQoKSAm
JiBjaGlsZC0+ZWxlbWVudCgpLT5pZCgpID09IElEX0ZPUk0pIHsKKyAgICBpZiAoY2hpbGQtPmVs
ZW1lbnQoKSAmJiBjaGlsZC0+ZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Zm9ybSgp
KSkgewogICAgICAgICBSZW5kZXJDb250YWluZXI6OmFkZENoaWxkKGNoaWxkLGJlZm9yZUNoaWxk
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTI2Miw3ICsyNjIsNyBAQCB2b2lkIFJlbmRl
clRhYmxlOjpsYXlvdXQoKQogCiAgICAgUmVuZGVyT2JqZWN0ICpjaGlsZCA9IGZpcnN0Q2hpbGQo
KTsKICAgICB3aGlsZSggY2hpbGQgKSB7Ci0JaWYgKCBjaGlsZC0+bmVlZHNMYXlvdXQoKSAmJiAh
KGNoaWxkLT5lbGVtZW50KCkgJiYgY2hpbGQtPmVsZW1lbnQoKS0+aWQoKSA9PSBJRF9GT1JNKSkK
KwlpZiAoIGNoaWxkLT5uZWVkc0xheW91dCgpICYmICEoY2hpbGQtPmVsZW1lbnQoKSAmJiBjaGls
ZC0+ZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Zm9ybSgpKSkpCiAJICAgIGNoaWxk
LT5sYXlvdXQoKTsKIAlpZiAoIGNoaWxkLT5pc1RhYmxlU2VjdGlvbigpICkgewogCSAgICBzdGF0
aWNfY2FzdDxSZW5kZXJUYWJsZVNlY3Rpb24gKj4oY2hpbGQpLT5jYWxjUm93SGVpZ2h0KCk7CkBA
IC04NDksNyArODQ5LDcgQEAgdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OmFkZENoaWxkKFJlbmRl
cgogI2VuZGlmCiAgICAgUmVuZGVyT2JqZWN0ICpyb3cgPSBjaGlsZDsKIAotICAgIGlmIChjaGls
ZC0+ZWxlbWVudCgpICYmIGNoaWxkLT5lbGVtZW50KCktPmlkKCkgPT0gSURfRk9STSkgeworICAg
IGlmIChjaGlsZC0+ZWxlbWVudCgpICYmIGNoaWxkLT5lbGVtZW50KCktPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjpmb3JtKCkpKSB7CiAgICAgICAgIFJlbmRlckNvbnRhaW5lcjo6YWRkQ2hpbGQoY2hp
bGQsYmVmb3JlQ2hpbGQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTQ5NSw3ICsxNDk1
LDcgQEAgdm9pZCBSZW5kZXJUYWJsZVJvdzo6YWRkQ2hpbGQoUmVuZGVyT2JqZQogICAgIGtkRGVi
dWcoIDYwNDAgKSA8PCByZW5kZXJOYW1lKCkgPDwgIihUYWJsZVJvdyk6OmFkZENoaWxkKCAiIDw8
IGNoaWxkLT5yZW5kZXJOYW1lKCkgPDwgIiApIiAgPDwgIiwgIiA8PAogICAgICAgICAgICAgICAg
ICAgICAgICAoYmVmb3JlQ2hpbGQgPyBiZWZvcmVDaGlsZC0+cmVuZGVyTmFtZSgpIDogIjAiKSA8
PCAiICkiIDw8IGVuZGw7CiAjZW5kaWYKLSAgICBpZiAoY2hpbGQtPmVsZW1lbnQoKSAmJiBjaGls
ZC0+ZWxlbWVudCgpLT5pZCgpID09IElEX0ZPUk0pIHsKKyAgICBpZiAoY2hpbGQtPmVsZW1lbnQo
KSAmJiBjaGlsZC0+ZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Zm9ybSgpKSkgewog
ICAgICAgICBSZW5kZXJDb250YWluZXI6OmFkZENoaWxkKGNoaWxkLGJlZm9yZUNoaWxkKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE2MDYsNyArMTYwNiw3IEBAIHZvaWQgUmVuZGVyVGFi
bGVDZWxsOjp1cGRhdGVGcm9tRWxlbWVudCgKICAgICBpbnQgb2xkUlNwYW4gPSByU3BhbjsKICAg
ICBpbnQgb2xkQ1NwYW4gPSBjU3BhbjsKICAgICBET006Ok5vZGVJbXBsKiBub2RlID0gZWxlbWVu
dCgpOwotICAgIGlmIChub2RlICYmIChub2RlLT5pZCgpID09IElEX1REIHx8IG5vZGUtPmlkKCkg
PT0gSURfVEgpKSB7CisgICAgaWYgKG5vZGUgJiYgKG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVz
Ojp0ZCgpKSB8fCBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGgoKSkpKSB7CiAgICAgICAg
IERPTTo6SFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsICp0YyA9IHN0YXRpY19jYXN0PERPTTo6SFRN
TFRhYmxlQ2VsbEVsZW1lbnRJbXBsICo+KG5vZGUpOwogICAgICAgICBjU3BhbiA9IHRjLT5jb2xT
cGFuKCk7CiAgICAgICAgIHJTcGFuID0gdGMtPnJvd1NwYW4oKTsKQEAgLTIyOTAsNyArMjI5MCw3
IEBAIHZvaWQgUmVuZGVyVGFibGVDb2w6OnVwZGF0ZUZyb21FbGVtZW50KCkKIHsKICAgICBpbnQg
b2xkU3BhbiA9IF9zcGFuOwogICAgIERPTTo6Tm9kZUltcGwgKm5vZGUgPSBlbGVtZW50KCk7Ci0g
ICAgaWYgKG5vZGUgJiYgKG5vZGUtPmlkKCkgPT0gSURfQ09MIHx8IG5vZGUtPmlkKCkgPT0gSURf
Q09MR1JPVVApKSB7CisgICAgaWYgKG5vZGUgJiYgKG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVz
Ojpjb2woKSkgfHwgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmNvbGdyb3VwKCkpKSkgewog
ICAgICAgICBET006OkhUTUxUYWJsZUNvbEVsZW1lbnRJbXBsICp0YyA9IHN0YXRpY19jYXN0PERP
TTo6SFRNTFRhYmxlQ29sRWxlbWVudEltcGwgKj4obm9kZSk7CiAgICAgICAgIF9zcGFuID0gdGMt
PnNwYW4oKTsKICAgICB9IApJbmRleDoga2h0bWwveG1sL2RvbTJfcmFuZ2VpbXBsLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC94bWwvZG9tMl9yYW5nZWlt
cGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjQwCmRpZmYgLXUgLXAgLXIxLjQwIGtodG1s
L3htbC9kb20yX3JhbmdlaW1wbC5jcHAKLS0tIGtodG1sL3htbC9kb20yX3JhbmdlaW1wbC5jcHAJ
MTMgTWF5IDIwMDUgMTY6NDg6NTEgLTAwMDAJMS40MAorKysga2h0bWwveG1sL2RvbTJfcmFuZ2Vp
bXBsLmNwcAkyNCBKdW4gMjAwNSAwMzoxMDo0NSAtMDAwMApAQCAtMjksNyArMjksNiBAQAogI2lu
Y2x1ZGUgImRvbV90ZXh0aW1wbC5oIgogI2luY2x1ZGUgImRvbV94bWxpbXBsLmgiCiAjaW5jbHVk
ZSAiaHRtbC9odG1sX2VsZW1lbnRpbXBsLmgiCi0jaW5jbHVkZSAibWlzYy9odG1sdGFncy5oIgog
I2luY2x1ZGUgImVkaXRpbmcvbWFya3VwLmgiCiAjaW5jbHVkZSAiZWRpdGluZy92aXNpYmxlX3Bv
c2l0aW9uLmgiCiAjaW5jbHVkZSAiZWRpdGluZy92aXNpYmxlX3VuaXRzLmgiCkluZGV4OiBraHRt
bC94bWwvZG9tMl90cmF2ZXJzYWxpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvV2ViQ29yZS9raHRtbC94bWwvZG9tMl90cmF2ZXJzYWxpbXBsLmNwcCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS4xMApkaWZmIC11IC1wIC1yMS4xMCBraHRtbC94bWwvZG9tMl90cmF2ZXJzYWxp
bXBsLmNwcAotLS0ga2h0bWwveG1sL2RvbTJfdHJhdmVyc2FsaW1wbC5jcHAJMTAgTWF5IDIwMDUg
MjE6NTk6MTQgLTAwMDAJMS4xMAorKysga2h0bWwveG1sL2RvbTJfdHJhdmVyc2FsaW1wbC5jcHAJ
MjQgSnVuIDIwMDUgMDM6MTA6NDUgLTAwMDAKQEAgLTI2LDggKzI2LDYgQEAKICNpbmNsdWRlICJk
b20vZG9tX2V4Y2VwdGlvbi5oIgogI2luY2x1ZGUgInhtbC9kb21fZG9jaW1wbC5oIgogCi0jaW5j
bHVkZSAiaHRtbHRhZ3MuaCIKLQogbmFtZXNwYWNlIERPTSB7CiAKIE5vZGVGaWx0ZXJJbXBsOjpO
b2RlRmlsdGVySW1wbChOb2RlRmlsdGVyQ29uZGl0aW9uICpjb25kaXRpb24pCkluZGV4OiBraHRt
bC94bWwvZG9tX2F0b21pY3N0cmluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L1dlYkNvcmUva2h0bWwveG1sL2RvbV9hdG9taWNzdHJpbmcuY3BwLHYKcmV0cmlldmluZyByZXZp
c2lvbiAxLjMKZGlmZiAtdSAtcCAtcjEuMyBraHRtbC94bWwvZG9tX2F0b21pY3N0cmluZy5jcHAK
LS0tIGtodG1sL3htbC9kb21fYXRvbWljc3RyaW5nLmNwcAk1IEZlYiAyMDA0IDAxOjQ1OjE2IC0w
MDAwCTEuMworKysga2h0bWwveG1sL2RvbV9hdG9taWNzdHJpbmcuY3BwCTI0IEp1biAyMDA1IDAz
OjEwOjQ1IC0wMDAwCkBAIC0zMDQsNiArMzA0LDkgQEAgdm9pZCBBdG9taWNTdHJpbmc6OnJlaGFz
aChpbnQgbmV3VGFibGVTaQogCiAgICAgZXh0ZXJuIGNvbnN0IEF0b21pY1N0cmluZyBudWxsQXRv
bTsKICAgICBleHRlcm4gY29uc3QgQXRvbWljU3RyaW5nIGVtcHR5QXRvbTsKKyAgICBleHRlcm4g
Y29uc3QgQXRvbWljU3RyaW5nIHRleHRBdG9tOworICAgIGV4dGVybiBjb25zdCBBdG9taWNTdHJp
bmcgY29tbWVudEF0b207CisgICAgZXh0ZXJuIGNvbnN0IEF0b21pY1N0cmluZyBzdGFyQXRvbTsK
ICNlbHNlCiAgICAgLy8gRGVmaW5lIGFuIEF0b21pY1N0cmluZy1zaXplZCBhcnJheSBvZiBwb2lu
dGVycyB0byBhdm9pZCBzdGF0aWMgaW5pdGlhbGl6YXRpb24uCiAgICAgLy8gVXNlIGFuIGFycmF5
IG9mIHBvaW50ZXJzIGluc3RlYWQgb2YgYW4gYXJyYXkgb2YgY2hhciBpbiBjYXNlIHRoZXJlIGlz
IHNvbWUgYWxpZ25tZW50IGlzc3VlLgpAQCAtMzEyLDYgKzMxNSw5IEBAIHZvaWQgQXRvbWljU3Ry
aW5nOjpyZWhhc2goaW50IG5ld1RhYmxlU2kKIAogICAgIERFRklORV9HTE9CQUwobnVsbCwgaWdu
b3JlZCkKICAgICBERUZJTkVfR0xPQkFMKGVtcHR5LCBpZ25vcmVkKQorICAgIERFRklORV9HTE9C
QUwodGV4dCwgaWdub3JlZCkKKyAgICBERUZJTkVfR0xPQkFMKGNvbW1lbnQsIGlnbm9yZWQpCisg
ICAgREVGSU5FX0dMT0JBTChzdGFyLCBpZ25vcmVkKQogI2VuZGlmCiAKICNkZWZpbmUgQ0FMTF9E
RUZJTkVfR0xPQkFMKG5hbWUpIERFRklORV9HTE9CQUwobmFtZSwgI25hbWUpCkBAIC0zMjUsNyAr
MzMxLDEwIEBAIHZvaWQgQXRvbWljU3RyaW5nOjppbml0KCkKICAgICAgICAgLy8gVXNlIHBsYWNl
bWVudCBuZXcgdG8gaW5pdGlhbGl6ZSB0aGUgZ2xvYmFscy4KICAgICAgICAgbmV3ICgmbnVsbEF0
b20pIEF0b21pY1N0cmluZzsKICAgICAgICAgbmV3ICgmZW1wdHlBdG9tKSBBdG9taWNTdHJpbmco
IiIpOwotICAgICAgICAKKyAgICAgICAgbmV3ICgmdGV4dEF0b20pIEF0b21pY1N0cmluZygiI3Rl
eHQiKTsKKyAgICAgICAgbmV3ICgmY29tbWVudEF0b20pIEF0b21pY1N0cmluZygiI2NvbW1lbnQi
KTsKKyAgICAgICAgbmV3ICgmc3RhckF0b20pIEF0b21pY1N0cmluZygiKiIpOworCiAgICAgICAg
ICNkZWZpbmUgUExBQ0VNRU5UX05FV19HTE9CQUwobmFtZSwgc3RyaW5nKSBuZXcgKCZuYW1lICMj
IFByb3BlcnR5TmFtZSkgQXRvbWljU3RyaW5nKHN0cmluZyk7CiAgICAgICAgICNkZWZpbmUgQ0FM
TF9QTEFDRU1FTlRfTkVXX0dMT0JBTChuYW1lKSBQTEFDRU1FTlRfTkVXX0dMT0JBTChuYW1lLCAj
bmFtZSkKICAgICAgICAgS0hUTUxfQVRPTUlDU1RSSU5HX0VBQ0hfR0xPQkFMKENBTExfUExBQ0VN
RU5UX05FV19HTE9CQUwpCkluZGV4OiBraHRtbC94bWwvZG9tX2F0b21pY3N0cmluZy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3htbC9kb21fYXRvbWljc3Ry
aW5nLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMwpkaWZmIC11IC1wIC1yMS4zIGtodG1sL3ht
bC9kb21fYXRvbWljc3RyaW5nLmgKLS0tIGtodG1sL3htbC9kb21fYXRvbWljc3RyaW5nLmgJMjEg
SnVuIDIwMDUgMjI6Mjc6NTUgLTAwMDAJMS4zCisrKyBraHRtbC94bWwvZG9tX2F0b21pY3N0cmlu
Zy5oCTI0IEp1biAyMDA1IDAzOjEwOjQ1IC0wMDAwCkBAIC0xMTYsNiArMTE2LDkgQEAgaW5saW5l
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBBdG9taWNTdHJpbgogI2lmICFLSFRNTF9BVE9NSUNTVFJJ
TkdfSElERV9HTE9CQUxTCiAgICAgZXh0ZXJuIGNvbnN0IEF0b21pY1N0cmluZyBudWxsQXRvbTsK
ICAgICBleHRlcm4gY29uc3QgQXRvbWljU3RyaW5nIGVtcHR5QXRvbTsKKyAgICBleHRlcm4gY29u
c3QgQXRvbWljU3RyaW5nIHRleHRBdG9tOworICAgIGV4dGVybiBjb25zdCBBdG9taWNTdHJpbmcg
Y29tbWVudEF0b207CisgICAgZXh0ZXJuIGNvbnN0IEF0b21pY1N0cmluZyBzdGFyQXRvbTsKICNk
ZWZpbmUgS0hUTUxfQVRPTUlDU1RSSU5HX0RFQ0xBUkVfR0xPQkFMKG5hbWUpIGV4dGVybiBjb25z
dCBBdG9taWNTdHJpbmcgbmFtZSAjIyBQcm9wZXJ0eU5hbWU7CiAgICAgS0hUTUxfQVRPTUlDU1RS
SU5HX0VBQ0hfR0xPQkFMKEtIVE1MX0FUT01JQ1NUUklOR19ERUNMQVJFX0dMT0JBTCkKICAgICBL
SFRNTF9BVE9NSUNTVFJJTkdfREVDTEFSRV9HTE9CQUwoc3BlY2lhbFByb3RvdHlwZSkKSW5kZXg6
IGtodG1sL3htbC9kb21fZG9jaW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L1dlYkNvcmUva2h0bWwveG1sL2RvbV9kb2NpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS4yMzAKZGlmZiAtdSAtcCAtcjEuMjMwIGtodG1sL3htbC9kb21fZG9jaW1wbC5jcHAKLS0tIGto
dG1sL3htbC9kb21fZG9jaW1wbC5jcHAJMjIgSnVuIDIwMDUgMTg6MjI6MDIgLTAwMDAJMS4yMzAK
KysrIGtodG1sL3htbC9kb21fZG9jaW1wbC5jcHAJMjQgSnVuIDIwMDUgMDM6MTA6NDggLTAwMDAK
QEAgLTM0LDggKzM0LDYgQEAKICNpbmNsdWRlICJ4bWwvZG9tMl92aWV3c2ltcGwuaCIKICNpbmNs
dWRlICJ4bWwveG1sX3Rva2VuaXplci5oIgogCi0jaW5jbHVkZSAieG1sX25hbWVzcGFjZV90YWJs
ZS5oIgotCiAjaW5jbHVkZSAiY3NzL2Nzc2hlbHBlci5oIgogI2luY2x1ZGUgImNzcy9jc3NzdHls
ZXNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiY3NzL2Nzc19zdHlsZXNoZWV0aW1wbC5oIgpAQCAtNjUs
MTcgKzYzLDEwIEBACiAjaW5jbHVkZSAia2h0bWxfc2V0dGluZ3MuaCIKICNpbmNsdWRlICJraHRt
bHBhcnRfcC5oIgogCi0jaW5jbHVkZSAiaHRtbC9odG1sX2Jhc2VpbXBsLmgiCi0jaW5jbHVkZSAi
aHRtbC9odG1sX2Jsb2NraW1wbC5oIgotI2luY2x1ZGUgImh0bWwvaHRtbF9jYW52YXNpbXBsLmgi
CisvLyBGSVhNRTogV2Ugd2FudCB0byBjdXQgdGhlIHJlbWFpbmluZyBIVE1MIGRlcGVuZGVuY2ll
cyBzbyB0aGF0IHdlIGRvbid0IG5lZWQgdG8gaW5jbHVkZSB0aGVzZSBmaWxlcy4KICNpbmNsdWRl
ICJodG1sL2h0bWxfZG9jdW1lbnRpbXBsLmgiCi0jaW5jbHVkZSAiaHRtbC9odG1sX2Zvcm1pbXBs
LmgiCiAjaW5jbHVkZSAiaHRtbC9odG1sX2hlYWRpbXBsLmgiCiAjaW5jbHVkZSAiaHRtbC9odG1s
X2ltYWdlaW1wbC5oIgotI2luY2x1ZGUgImh0bWwvaHRtbF9saXN0aW1wbC5oIgotI2luY2x1ZGUg
Imh0bWwvaHRtbF9taXNjaW1wbC5oIgotI2luY2x1ZGUgImh0bWwvaHRtbF90YWJsZWltcGwuaCIK
LSNpbmNsdWRlICJodG1sL2h0bWxfb2JqZWN0aW1wbC5oIgogCiAjaW5jbHVkZSAiY3NzdmFsdWVz
LmgiCiAKQEAgLTUwNiw3ICs0OTcsOSBAQCBFbGVtZW50SW1wbCAqRG9jdW1lbnRJbXBsOjpkb2N1
bWVudEVsZW1lCiAKIEVsZW1lbnRJbXBsICpEb2N1bWVudEltcGw6OmNyZWF0ZUVsZW1lbnQoIGNv
bnN0IERPTVN0cmluZyAmbmFtZSwgaW50ICZleGNlcHRpb25jb2RlICkKIHsKLSAgICByZXR1cm4g
bmV3IFhNTEVsZW1lbnRJbXBsKCBkb2N1bWVudCwgbmFtZS5pbXBsZW1lbnRhdGlvbigpICk7Cisg
ICAgLyogRklYTUU6IE5lZWQgdG8gcmUtaW1wbGVtZW50CisgICAgcmV0dXJuIG5ldyBYTUxFbGVt
ZW50SW1wbCggZG9jdW1lbnQsIG5hbWUuaW1wbGVtZW50YXRpb24oKSApOyAqLworICAgIHJldHVy
biAwOwogfQogCiBEb2N1bWVudEZyYWdtZW50SW1wbCAqRG9jdW1lbnRJbXBsOjpjcmVhdGVEb2N1
bWVudEZyYWdtZW50KCAgKQpAQCAtNTczLDEwICs1NjYsOCBAQCBOb2RlSW1wbCAqRG9jdW1lbnRJ
bXBsOjppbXBvcnROb2RlKE5vZGVJCiAgICAgICAgICAgICByZXR1cm4gY3JlYXRlQ29tbWVudChp
bXBvcnRlZE5vZGUtPm5vZGVWYWx1ZSgpKTsKICAgICAgICAgY2FzZSBOb2RlOjpFTEVNRU5UX05P
REU6IHsKICAgICAgICAgICAgIEVsZW1lbnRJbXBsICpvbGRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8
RWxlbWVudEltcGwgKj4oaW1wb3J0ZWROb2RlKTsKLSAgICAgICAgICAgIERvY3VtZW50SW1wbCAq
b2xkRG9jID0gb2xkRWxlbWVudC0+Z2V0RG9jdW1lbnQoKTsKLSAgICAgICAgICAgIHN0YXRpYyBE
T01TdHJpbmcgSFRNTE5hbWVzcGFjZShYSFRNTF9OQU1FU1BBQ0UpOwotICAgICAgICAgICAgRE9N
U3RyaW5nIGVsZW1lbnROYW1lc3BhY2UgPSBvbGRFbGVtZW50LT5pc0hUTUxFbGVtZW50KCkgPyBI
VE1MTmFtZXNwYWNlIDogb2xkRWxlbWVudC0+bmFtZXNwYWNlVVJJKCk7Ci0gICAgICAgICAgICBF
bGVtZW50SW1wbCAqbmV3RWxlbWVudCA9IGNyZWF0ZUVsZW1lbnROUyhlbGVtZW50TmFtZXNwYWNl
LmltcGxlbWVudGF0aW9uKCksIG9sZEVsZW1lbnQtPnRhZ05hbWUoKSwgZXhjZXB0aW9uY29kZSk7
CisgICAgICAgICAgICAvLyBGSVhNRTogUHJlZml4IGlzIGxvc3QuICBJcyB0aGF0IHJpZ2h0Pwor
ICAgICAgICAgICAgRWxlbWVudEltcGwgKm5ld0VsZW1lbnQgPSBjcmVhdGVFbGVtZW50TlMob2xk
RWxlbWVudC0+bmFtZXNwYWNlVVJJKCksIG9sZEVsZW1lbnQtPmxvY2FsTmFtZSgpLCBleGNlcHRp
b25jb2RlKTsKICAgICAgICAgICAgIGlmIChleGNlcHRpb25jb2RlICE9IDApCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIDA7CiAKQEAgLTU5Nyw3ICs1ODgsOCBAQCBOb2RlSW1wbCAqRG9jdW1lbnRJ
bXBsOjppbXBvcnROb2RlKE5vZGVJCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyAjIyMgZXh0
cmFjdCBhbmQgc2V0IG5ldyBwcmVmaXgKICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICAgICAgICAgIE5vZGVJbXBsOjpJZCBub2RlSWQgPSBhdHRySWQob2xkRG9jLT5uYW1lc3Bh
Y2VVUkkoYXR0ci0+YXR0ckltcGwoKS0+aWQoKSksIGxvY2FsTmFtZS5pbXBsZW1lbnRhdGlvbigp
LCBmYWxzZSAvKiBhbGxvY2F0ZSAqLyk7CisgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBM
b3NlIHRoZSBuYW1lc3BhY2UgaGVyZSBmb3Igbm93LiAgVGhpcyBjb2RlIHdpbGwgY2hhbmdlIHNv
b24gYW55d2F5LgorICAgICAgICAgICAgICAgICAgICBOb2RlSW1wbDo6SWQgbm9kZUlkID0gYXR0
cklkKDAsIGxvY2FsTmFtZS5pbXBsZW1lbnRhdGlvbigpLCBmYWxzZSAvKiBhbGxvY2F0ZSAqLyk7
CiAgICAgICAgICAgICAgICAgICAgIG5ld0VsZW1lbnQtPnNldEF0dHJpYnV0ZShub2RlSWQsIHZh
bHVlLmltcGxlbWVudGF0aW9uKCksIGV4Y2VwdGlvbmNvZGUpOwogICAgICAgICAgICAgICAgICAg
ICBpZiAoZXhjZXB0aW9uY29kZSAhPSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBuZXdF
bGVtZW50LT5kZXJlZigpOwpAQCAtNjM2LDExICs2MjgsMTMgQEAgTm9kZUltcGwgKkRvY3VtZW50
SW1wbDo6aW1wb3J0Tm9kZShOb2RlSQogCiBFbGVtZW50SW1wbCAqRG9jdW1lbnRJbXBsOjpjcmVh
dGVFbGVtZW50TlMoIGNvbnN0IERPTVN0cmluZyAmX25hbWVzcGFjZVVSSSwgY29uc3QgRE9NU3Ry
aW5nICZfcXVhbGlmaWVkTmFtZSwgaW50ICZleGNlcHRpb25jb2RlKQogeworICAgIC8qIEZJWE1F
OiBSZS1pbXBsZW1lbnQgdGhpcyB0byB1c2UgZ2VuZXJpYyBlbGVtZW50IHN0dWZmIGV2ZW50dWFs
bHkuCiAgICAgRWxlbWVudEltcGwgKmUgPSAwOwogICAgIFFTdHJpbmcgcU5hbWUgPSBfcXVhbGlm
aWVkTmFtZS5zdHJpbmcoKTsKICAgICBpbnQgY29sb25Qb3MgPSBxTmFtZS5maW5kKCc6JywwKTsK
IAogICAgIGlmIChfbmFtZXNwYWNlVVJJID09IFhIVE1MX05BTUVTUEFDRSkgeworICAgICAgICAg
ICAgCiAgICAgICAgIC8vIFVzZXIgcmVxdWVzdGVkIGFuIGVsZW1lbnQgaW4gdGhlIFhIVE1MIG5h
bWVzcGFjZSAtIHRoaXMgbWVhbnMgd2UgY3JlYXRlIGEgc3BlY2lmaWMgZWxlbWVudAogICAgICAg
ICAvLyAoZWxlbWVudHMgbm90IGluIHRoaXMgbmFtZXNwYWNlIGFyZSB0cmVhdGVkIGFzIG5vcm1h
bCBYTUwgZWxlbWVudHMpCiAgICAgICAgIGUgPSBjcmVhdGVIVE1MRWxlbWVudChxTmFtZS5taWQo
Y29sb25Qb3MrMSksIGV4Y2VwdGlvbmNvZGUpOwpAQCAtNjU4LDcgKzY1Miw4IEBAIEVsZW1lbnRJ
bXBsICpEb2N1bWVudEltcGw6OmNyZWF0ZUVsZW1lbnQKICAgICBpZiAoIWUpCiAgICAgICAgIGUg
PSBuZXcgWE1MRWxlbWVudEltcGwoIGRvY3VtZW50LCBfcXVhbGlmaWVkTmFtZS5pbXBsZW1lbnRh
dGlvbigpLCBfbmFtZXNwYWNlVVJJLmltcGxlbWVudGF0aW9uKCkgKTsKIAotICAgIHJldHVybiBl
OworICAgIHJldHVybiBlOyovCisgICAgcmV0dXJuIDA7CiB9CiAKIEVsZW1lbnRJbXBsICpEb2N1
bWVudEltcGw6OmdldEVsZW1lbnRCeUlkKCBjb25zdCBET01TdHJpbmcgJmVsZW1lbnRJZCApIGNv
bnN0CkBAIC04MTEsMjIwICs4MDYsNiBAQCB1bnNpZ25lZCBzaG9ydCBEb2N1bWVudEltcGw6Om5v
ZGVUeXBlKCkgCiAgICAgcmV0dXJuIE5vZGU6OkRPQ1VNRU5UX05PREU7CiB9CiAKLUVsZW1lbnRJ
bXBsICpEb2N1bWVudEltcGw6OmNyZWF0ZUhUTUxFbGVtZW50KCBjb25zdCBET01TdHJpbmcgJm5h
bWUsIGludCAmZXhjZXB0aW9uY29kZSApCi17Ci0gICAgaWYgKCFpc1ZhbGlkTmFtZShuYW1lKSkg
ewotICAgICAgICBleGNlcHRpb25jb2RlID0gRE9NRXhjZXB0aW9uOjpJTlZBTElEX0NIQVJBQ1RF
Ul9FUlI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICByZXR1cm4gY3JlYXRlSFRNTEVs
ZW1lbnQodGFnSWQoMCwgbmFtZS5pbXBsZW1lbnRhdGlvbigpLCBmYWxzZSkpOwotfQotCi1FbGVt
ZW50SW1wbCAqRG9jdW1lbnRJbXBsOjpjcmVhdGVIVE1MRWxlbWVudCh1bnNpZ25lZCBzaG9ydCB0
YWdJRCkKLXsKLSAgICBzd2l0Y2ggKHRhZ0lEKQotICAgIHsKLSAgICBjYXNlIElEX0hUTUw6Ci0g
ICAgICAgIHJldHVybiBuZXcgSFRNTEh0bWxFbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0gICAgY2Fz
ZSBJRF9IRUFEOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxIZWFkRWxlbWVudEltcGwoZG9jUHRy
KCkpOwotICAgIGNhc2UgSURfQk9EWToKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MQm9keUVsZW1l
bnRJbXBsKGRvY1B0cigpKTsKLQotLy8gaGVhZCBlbGVtZW50cwotICAgIGNhc2UgSURfQkFTRToK
LSAgICAgICAgcmV0dXJuIG5ldyBIVE1MQmFzZUVsZW1lbnRJbXBsKGRvY1B0cigpKTsKLSAgICBj
YXNlIElEX0xJTks6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTExpbmtFbGVtZW50SW1wbChkb2NQ
dHIoKSk7Ci0gICAgY2FzZSBJRF9NRVRBOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxNZXRhRWxl
bWVudEltcGwoZG9jUHRyKCkpOwotICAgIGNhc2UgSURfU1RZTEU6Ci0gICAgICAgIHJldHVybiBu
ZXcgSFRNTFN0eWxlRWxlbWVudEltcGwoZG9jUHRyKCkpOwotICAgIGNhc2UgSURfVElUTEU6Ci0g
ICAgICAgIHJldHVybiBuZXcgSFRNTFRpdGxlRWxlbWVudEltcGwoZG9jUHRyKCkpOwotCi0vLyBm
cmFtZXMKLSAgICBjYXNlIElEX0ZSQU1FOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxGcmFtZUVs
ZW1lbnRJbXBsKGRvY1B0cigpKTsKLSAgICBjYXNlIElEX0ZSQU1FU0VUOgotICAgICAgICByZXR1
cm4gbmV3IEhUTUxGcmFtZVNldEVsZW1lbnRJbXBsKGRvY1B0cigpKTsKLSAgICBjYXNlIElEX0lG
UkFNRToKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MSUZyYW1lRWxlbWVudEltcGwoZG9jUHRyKCkp
OwotCi0vLyBmb3JtIGVsZW1lbnRzCi0vLyAjIyMgRklYTUU6IHdlIG5lZWQgYSB3YXkgdG8gc2V0
IGZvcm0gZGVwZW5kZW5jeSBhZnRlciB3ZSBoYXZlIG1hZGUgdGhlIGZvcm0gZWxlbWVudHMKLSAg
ICBjYXNlIElEX0ZPUk06Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTEZvcm1FbGVtZW50SW1wbChk
b2NQdHIoKSk7Ci0gICAgY2FzZSBJRF9CVVRUT046Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTEJ1
dHRvbkVsZW1lbnRJbXBsKGRvY1B0cigpKTsKLSAgICBjYXNlIElEX0ZJRUxEU0VUOgotICAgICAg
ICByZXR1cm4gbmV3IEhUTUxGaWVsZFNldEVsZW1lbnRJbXBsKGRvY1B0cigpKTsKLSAgICBjYXNl
IElEX0lOUFVUOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxJbnB1dEVsZW1lbnRJbXBsKGRvY1B0
cigpKTsKLSAgICBjYXNlIElEX0lTSU5ERVg6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTElzSW5k
ZXhFbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0gICAgY2FzZSBJRF9MQUJFTDoKLSAgICAgICAgcmV0
dXJuIG5ldyBIVE1MTGFiZWxFbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0gICAgY2FzZSBJRF9MRUdF
TkQ6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTExlZ2VuZEVsZW1lbnRJbXBsKGRvY1B0cigpKTsK
LSAgICBjYXNlIElEX09QVEdST1VQOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxPcHRHcm91cEVs
ZW1lbnRJbXBsKGRvY1B0cigpKTsKLSAgICBjYXNlIElEX09QVElPTjoKLSAgICAgICAgcmV0dXJu
IG5ldyBIVE1MT3B0aW9uRWxlbWVudEltcGwoZG9jUHRyKCkpOwotICAgIGNhc2UgSURfU0VMRUNU
OgotICAgICAgICByZXR1cm4gbmV3IEhUTUxTZWxlY3RFbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0g
ICAgY2FzZSBJRF9URVhUQVJFQToKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MVGV4dEFyZWFFbGVt
ZW50SW1wbChkb2NQdHIoKSk7Ci0KLS8vIGxpc3RzCi0gICAgY2FzZSBJRF9ETDoKLSAgICAgICAg
cmV0dXJuIG5ldyBIVE1MRExpc3RFbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0gICAgY2FzZSBJRF9E
RDoKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MR2VuZXJpY0VsZW1lbnRJbXBsKGRvY1B0cigpLCB0
YWdJRCk7Ci0gICAgY2FzZSBJRF9EVDoKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MR2VuZXJpY0Vs
ZW1lbnRJbXBsKGRvY1B0cigpLCB0YWdJRCk7Ci0gICAgY2FzZSBJRF9VTDoKLSAgICAgICAgcmV0
dXJuIG5ldyBIVE1MVUxpc3RFbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0gICAgY2FzZSBJRF9PTDoK
LSAgICAgICAgcmV0dXJuIG5ldyBIVE1MT0xpc3RFbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0gICAg
Y2FzZSBJRF9ESVI6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTERpcmVjdG9yeUVsZW1lbnRJbXBs
KGRvY1B0cigpKTsKLSAgICBjYXNlIElEX01FTlU6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTE1l
bnVFbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0gICAgY2FzZSBJRF9MSToKLSAgICAgICAgcmV0dXJu
IG5ldyBIVE1MTElFbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0KLS8vIGZvcm1hdHRpbmcgZWxlbWVu
dHMgKGJsb2NrKQotICAgIGNhc2UgSURfQkxPQ0tRVU9URToKLSAgICAgICAgcmV0dXJuIG5ldyBI
VE1MQmxvY2txdW90ZUVsZW1lbnRJbXBsKGRvY1B0cigpKTsKLSAgICBjYXNlIElEX0RJVjoKLSAg
ICAgICAgcmV0dXJuIG5ldyBIVE1MRGl2RWxlbWVudEltcGwoZG9jUHRyKCkpOwotICAgIGNhc2Ug
SURfSDE6Ci0gICAgY2FzZSBJRF9IMjoKLSAgICBjYXNlIElEX0gzOgotICAgIGNhc2UgSURfSDQ6
Ci0gICAgY2FzZSBJRF9INToKLSAgICBjYXNlIElEX0g2OgotICAgICAgICByZXR1cm4gbmV3IEhU
TUxIZWFkaW5nRWxlbWVudEltcGwoZG9jUHRyKCksIHRhZ0lEKTsKLSAgICBjYXNlIElEX0hSOgot
ICAgICAgICByZXR1cm4gbmV3IEhUTUxIUkVsZW1lbnRJbXBsKGRvY1B0cigpKTsKLSAgICBjYXNl
IElEX1A6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTFBhcmFncmFwaEVsZW1lbnRJbXBsKGRvY1B0
cigpKTsKLSAgICBjYXNlIElEX1BSRToKLSAgICBjYXNlIElEX1hNUDoKLSAgICBjYXNlIElEX1BM
QUlOVEVYVDoKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MUHJlRWxlbWVudEltcGwoZG9jUHRyKCks
IHRhZ0lEKTsKLSAgICBjYXNlIElEX0xBWUVSOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxMYXll
ckVsZW1lbnRJbXBsKGRvY1B0cigpKTsKLQotLy8gZm9udCBzdHVmZgotICAgIGNhc2UgSURfQkFT
RUZPTlQ6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTEJhc2VGb250RWxlbWVudEltcGwoZG9jUHRy
KCkpOwotICAgIGNhc2UgSURfRk9OVDoKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MRm9udEVsZW1l
bnRJbXBsKGRvY1B0cigpKTsKLQotLy8gaW5zL2RlbAotICAgIGNhc2UgSURfREVMOgotICAgIGNh
c2UgSURfSU5TOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxNb2RFbGVtZW50SW1wbChkb2NQdHIo
KSwgdGFnSUQpOwotCi0vLyBhbmNob3IKLSAgICBjYXNlIElEX0E6Ci0gICAgICAgIHJldHVybiBu
ZXcgSFRNTEFuY2hvckVsZW1lbnRJbXBsKGRvY1B0cigpKTsKLQotLy8gaW1hZ2VzCi0gICAgY2Fz
ZSBJRF9JTUc6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTEltYWdlRWxlbWVudEltcGwoZG9jUHRy
KCkpOwotICAgIGNhc2UgSURfTUFQOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxNYXBFbGVtZW50
SW1wbChkb2NQdHIoKSk7Ci0gICAgY2FzZSBJRF9BUkVBOgotICAgICAgICByZXR1cm4gbmV3IEhU
TUxBcmVhRWxlbWVudEltcGwoZG9jUHRyKCkpOwotICAgIGNhc2UgSURfQ0FOVkFTOgotICAgICAg
ICByZXR1cm4gbmV3IEhUTUxDYW52YXNFbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0KLS8vIG9iamVj
dHMsIGFwcGxldHMgYW5kIHNjcmlwdHMKLSAgICBjYXNlIElEX0FQUExFVDoKLSAgICAgICAgcmV0
dXJuIG5ldyBIVE1MQXBwbGV0RWxlbWVudEltcGwoZG9jUHRyKCkpOwotICAgIGNhc2UgSURfRU1C
RUQ6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTEVtYmVkRWxlbWVudEltcGwoZG9jUHRyKCkpOwot
ICAgIGNhc2UgSURfT0JKRUNUOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxPYmplY3RFbGVtZW50
SW1wbChkb2NQdHIoKSk7Ci0gICAgY2FzZSBJRF9QQVJBTToKLSAgICAgICAgcmV0dXJuIG5ldyBI
VE1MUGFyYW1FbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0gICAgY2FzZSBJRF9TQ1JJUFQ6Ci0gICAg
ICAgIHJldHVybiBuZXcgSFRNTFNjcmlwdEVsZW1lbnRJbXBsKGRvY1B0cigpKTsKLQotLy8gdGFi
bGVzCi0gICAgY2FzZSBJRF9UQUJMRToKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MVGFibGVFbGVt
ZW50SW1wbChkb2NQdHIoKSk7Ci0gICAgY2FzZSBJRF9DQVBUSU9OOgotICAgICAgICByZXR1cm4g
bmV3IEhUTUxUYWJsZUNhcHRpb25FbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0gICAgY2FzZSBJRF9D
T0xHUk9VUDoKLSAgICBjYXNlIElEX0NPTDoKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MVGFibGVD
b2xFbGVtZW50SW1wbChkb2NQdHIoKSwgdGFnSUQpOwotICAgIGNhc2UgSURfVFI6Ci0gICAgICAg
IHJldHVybiBuZXcgSFRNTFRhYmxlUm93RWxlbWVudEltcGwoZG9jUHRyKCkpOwotICAgIGNhc2Ug
SURfVEQ6Ci0gICAgY2FzZSBJRF9USDoKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MVGFibGVDZWxs
RWxlbWVudEltcGwoZG9jUHRyKCksIHRhZ0lEKTsKLSAgICBjYXNlIElEX1RIRUFEOgotICAgIGNh
c2UgSURfVEJPRFk6Ci0gICAgY2FzZSBJRF9URk9PVDoKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1M
VGFibGVTZWN0aW9uRWxlbWVudEltcGwoZG9jUHRyKCksIHRhZ0lELCBmYWxzZSk7Ci0KLS8vIGlu
bGluZSBlbGVtZW50cwotICAgIGNhc2UgSURfQlI6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTEJS
RWxlbWVudEltcGwoZG9jUHRyKCkpOwotICAgIGNhc2UgSURfUToKLSAgICAgICAgcmV0dXJuIG5l
dyBIVE1MUXVvdGVFbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0KLSAgICBjYXNlIElEX01BUlFVRUU6
Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTE1hcnF1ZWVFbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0g
ICAKLS8vIGVsZW1lbnRzIHdpdGggbm8gc3BlY2lhbCByZXByZXNlbnRhdGlvbiBpbiB0aGUgRE9N
Ci0KLS8vIGJsb2NrOgotICAgIGNhc2UgSURfQUREUkVTUzoKLSAgICBjYXNlIElEX0NFTlRFUjoK
LQotLy8gaW5saW5lCi0gICAgICAgIC8vICVmb250c3R5bGUKLSAgICBjYXNlIElEX1RUOgotICAg
IGNhc2UgSURfVToKLSAgICBjYXNlIElEX0I6Ci0gICAgY2FzZSBJRF9JOgotICAgIGNhc2UgSURf
UzoKLSAgICBjYXNlIElEX1NUUklLRToKLSAgICBjYXNlIElEX0JJRzoKLSAgICBjYXNlIElEX1NN
QUxMOgotCi0gICAgICAgIC8vICVwaHJhc2UKLSAgICBjYXNlIElEX0VNOgotICAgIGNhc2UgSURf
U1RST05HOgotICAgIGNhc2UgSURfREZOOgotICAgIGNhc2UgSURfQ09ERToKLSAgICBjYXNlIElE
X1NBTVA6Ci0gICAgY2FzZSBJRF9LQkQ6Ci0gICAgY2FzZSBJRF9WQVI6Ci0gICAgY2FzZSBJRF9D
SVRFOgotICAgIGNhc2UgSURfQUJCUjoKLSAgICBjYXNlIElEX0FDUk9OWU06Ci0KLSAgICAgICAg
Ly8gJXNwZWNpYWwKLSAgICBjYXNlIElEX1NVQjoKLSAgICBjYXNlIElEX1NVUDoKLSAgICBjYXNl
IElEX1NQQU46Ci0gICAgY2FzZSBJRF9OT0JSOgotICAgIGNhc2UgSURfV0JSOgotCi0gICAgY2Fz
ZSBJRF9CRE86Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MR2VuZXJpY0Vs
ZW1lbnRJbXBsKGRvY1B0cigpLCB0YWdJRCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0K
IFFTdHJpbmcgRG9jdW1lbnRJbXBsOjpuZXh0U3RhdGUoKQogewogICAgUVN0cmluZyBzdGF0ZTsK
QEAgLTE0NjQsMTAgKzEyNDUsMTAgQEAgSFRNTEVsZW1lbnRJbXBsKiBEb2N1bWVudEltcGw6OmJv
ZHkoKQogICAgIC8vIHRyeSB0byBwcmVmZXIgYSBGUkFNRVNFVCBlbGVtZW50IG92ZXIgQk9EWQog
ICAgIE5vZGVJbXBsKiBib2R5ID0gMDsKICAgICBmb3IgKE5vZGVJbXBsKiBpID0gZGUtPmZpcnN0
Q2hpbGQoKTsgaTsgaSA9IGktPm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAgaWYgKGktPmlkKCkg
PT0gSURfRlJBTUVTRVQpCisgICAgICAgIGlmIChpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZnJh
bWVzZXQoKSkpCiAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBs
Kj4oaSk7CiAgICAgICAgIAotICAgICAgICBpZiAoaS0+aWQoKSA9PSBJRF9CT0RZKQorICAgICAg
ICBpZiAoaS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJvZHkoKSkpCiAgICAgICAgICAgICBib2R5
ID0gaTsKICAgICB9CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCAqPihi
b2R5KTsKQEAgLTE1OTcsNyArMTM3OCw3IEBAIGJvb2wgRG9jdW1lbnRJbXBsOjpzaG91bGRTY2hl
ZHVsZUxheW91dCgKICAgICAvLyAoYykgd2UgaGF2ZSBhIDxib2R5PgogICAgIHJldHVybiAocmVu
ZGVyZXIoKSAmJiByZW5kZXJlcigpLT5uZWVkc0xheW91dCgpICYmIGhhdmVTdHlsZXNoZWV0c0xv
YWRlZCgpICYmCiAgICAgICAgICAgICBkb2N1bWVudEVsZW1lbnQoKSAmJiBkb2N1bWVudEVsZW1l
bnQoKS0+cmVuZGVyZXIoKSAmJgotICAgICAgICAgICAgKGRvY3VtZW50RWxlbWVudCgpLT5pZCgp
ICE9IElEX0hUTUwgfHwgYm9keSgpKSk7CisgICAgICAgICAgICAoIWRvY3VtZW50RWxlbWVudCgp
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aHRtbCgpKSB8fCBib2R5KCkpKTsKIH0KIAogaW50IERv
Y3VtZW50SW1wbDo6bWluaW11bUxheW91dERlbGF5KCkKQEAgLTE3MjEsNDIgKzE1MDIsNiBAQCB2
b2lkIERvY3VtZW50SW1wbDo6ZGV0ZXJtaW5lUGFyc2VNb2RlKCBjCiAgICAga2REZWJ1Zyg2MDIw
KSA8PCAiIHVzaW5nIHN0cmljdCBwYXJzZU1vZGUiIDw8IGVuZGw7CiB9CiAKLS8vIFBsZWFzZSBz
ZWUgaWYgdGhlcmVgcyBhIHBvc3NpYmlsaXR5IHRvIG1lcmdlIHRoYXQgY29kZQotLy8gd2l0aCB0
aGUgbmV4dCBmdW5jdGlvbiBhbmQgZ2V0RWxlbWVudEJ5SUQoKS4KLU5vZGVJbXBsICpEb2N1bWVu
dEltcGw6OmZpbmRFbGVtZW50KCBJZCBpZCApCi17Ci0gICAgUVB0clN0YWNrPE5vZGVJbXBsPiBu
b2RlU3RhY2s7Ci0gICAgTm9kZUltcGwgKmN1cnJlbnQgPSBfZmlyc3Q7Ci0KLSAgICB3aGlsZSgx
KQotICAgIHsKLSAgICAgICAgaWYoIWN1cnJlbnQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlm
KG5vZGVTdGFjay5pc0VtcHR5KCkpIGJyZWFrOwotICAgICAgICAgICAgY3VycmVudCA9IG5vZGVT
dGFjay5wb3AoKTsKLSAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0U2libGluZygp
OwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgaWYoY3Vy
cmVudC0+aWQoKSA9PSBpZCkKLSAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudDsKLQotICAg
ICAgICAgICAgTm9kZUltcGwgKmNoaWxkID0gY3VycmVudC0+Zmlyc3RDaGlsZCgpOwotICAgICAg
ICAgICAgaWYoY2hpbGQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbm9kZVN0YWNr
LnB1c2goY3VycmVudCk7Ci0gICAgICAgICAgICAgICAgY3VycmVudCA9IGNoaWxkOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0U2libGluZygpOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KIE5vZGVJbXBsICpEb2N1bWVudEltcGw6
Om5leHRGb2N1c05vZGUoTm9kZUltcGwgKmZyb21Ob2RlKQogewogICAgIHVuc2lnbmVkIHNob3J0
IGZyb21UYWJJbmRleDsKQEAgLTIxNTEsMTIgKzE4OTYsMTMgQEAgTm9kZUltcGw6OklkIERvY3Vt
ZW50SW1wbDo6YXR0cklkKERPTVN0cgogCiAgICAgLy8gbm93IGxldHMgZmluZCBvdXQgdGhlIG5h
bWVzcGFjZQogICAgIFFfVUlOVDE2IG5zID0gbm9OYW1lc3BhY2U7CisgICAgLyogRklYTUU6IEp1
c3QgYnJlYWsgbmFtZXNwYWNlZCBhdHRyaWJ1dGVzIGZvciBub3cuICBXaWxsIGZpeCBpbiBuZXh0
IHN0YWdlIG9mIFF1YWxpZmllZE5hbWUgY29udmVyc2lvbi4KICAgICBpZiAoX25hbWVzcGFjZVVS
SSkgewogICAgICAgICBET01TdHJpbmcgbnNVKF9uYW1lc3BhY2VVUkkpOwogICAgICAgICBpbnQg
bnNJRCA9IFhtbE5hbWVzcGFjZVRhYmxlOjpnZXROYW1lc3BhY2VJRChuc1UsIHJlYWRvbmx5KTsK
ICAgICAgICAgaWYgKG5zSUQgIT0gLTEpCiAgICAgICAgICAgICBucyA9IChRX1VJTlQxNiluc0lE
OwotICAgIH0KKyAgICB9Ki8KICAgICAKICAgICAvLyBMb29rIGluIHRoZSBtX2F0dHJOYW1lcyBh
cnJheSBmb3IgdGhlIG5hbWUKICAgICAvLyAjIyMgeWVhaCwgdGhpcyBpcyBsYW1lLiB1c2UgYSBk
aWN0aW9uYXJ5IC8gbWFwIGluc3RlYWQKQEAgLTIyMDcsOTUgKzE5NTMsNiBAQCBET01TdHJpbmcg
RG9jdW1lbnRJbXBsOjphdHRyTmFtZShOb2RlSW1wCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAot
Tm9kZUltcGw6OklkIERvY3VtZW50SW1wbDo6dGFnSWQoRE9NU3RyaW5nSW1wbCogX25hbWVzcGFj
ZVVSSSwgRE9NU3RyaW5nSW1wbCAqX25hbWUsIGJvb2wgcmVhZG9ubHkpCi17Ci0gICAgaWYgKCFf
bmFtZSkgcmV0dXJuIDA7Ci0gICAgLy8gRWFjaCBkb2N1bWVudCBtYWludGFpbnMgYSBtYXBwaW5n
IG9mIHRhZyBuYW1lIC0+IGlkIGZvciBldmVyeSB0YWcgbmFtZSBlbmNvdW50ZXJlZAotICAgIC8v
IGluIHRoZSBkb2N1bWVudC4KLSAgICBOb2RlSW1wbDo6SWQgaWQgPSAwOwotCi0gICAgLy8gRmly
c3Qgc2VlIGlmIGl0J3MgYSBIVE1MIGVsZW1lbnQgbmFtZQotICAgIFFDb25zdFN0cmluZyBuKF9u
YW1lLT5zLCBfbmFtZS0+bCk7Ci0gICAgaWYgKCFfbmFtZXNwYWNlVVJJIHx8ICFzdHJjYXNlY21w
KF9uYW1lc3BhY2VVUkksIFhIVE1MX05BTUVTUEFDRSkpIHsKLSAgICAgICAgLy8gd2UncmUgaW4g
SFRNTCBuYW1lc3BhY2UgaWYgd2Uga25vdyB0aGUgdGFnLgotICAgICAgICAvLyB4aHRtbCBpcyBs
b3dlciBjYXNlIC0gY2FzZSBzZW5zaXRpdmUsIGVhc3kgdG8gaW1wbGVtZW50Ci0gICAgICAgIGlm
ICggaHRtbE1vZGUoKSA9PSBYSHRtbCAmJiAoaWQgPSBnZXRUYWdJRChuLnN0cmluZygpLmFzY2lp
KCksIF9uYW1lLT5sKSkgKQotICAgICAgICAgICAgcmV0dXJuIGlkOwotICAgICAgICAvLyBjb21w
YXRpYmlsaXR5OiB1cHBlciBjYXNlIC0gY2FzZSBpbnNlbnNpdGl2ZQotICAgICAgICBpZiAoIGh0
bWxNb2RlKCkgIT0gWEh0bWwgJiYgKGlkID0gZ2V0VGFnSUQobi5zdHJpbmcoKS5sb3dlcigpLmFz
Y2lpKCksIF9uYW1lLT5sICkpICkKLSAgICAgICAgICAgIHJldHVybiBpZDsKLQotICAgICAgICAv
LyBvaywgdGhlIGZhc3QgcGF0aCBkaWRuJ3Qgd29yayBvdXQsIHdlIG5lZWQgdGhlIGZ1bGwgY2hl
Y2sKLSAgICB9Ci0KLSAgICAvLyBub3cgbGV0cyBmaW5kIG91dCB0aGUgbmFtZXNwYWNlCi0gICAg
UV9VSU5UMTYgbnMgPSBub05hbWVzcGFjZTsKLSAgICBpZiAoX25hbWVzcGFjZVVSSSkgewotICAg
ICAgICBET01TdHJpbmcgbnNVKF9uYW1lc3BhY2VVUkkpOwotICAgICAgICBpbnQgbnNJRCA9IFht
bE5hbWVzcGFjZVRhYmxlOjpnZXROYW1lc3BhY2VJRChuc1UsIHJlYWRvbmx5KTsKLSAgICAgICAg
aWYgKG5zSUQgIT0gLTEpCi0gICAgICAgICAgICBucyA9IChRX1VJTlQxNiluc0lEOwotICAgIH0K
LQotICAgIC8vIExvb2sgaW4gdGhlIG1fZWxlbWVudE5hbWVzIGFycmF5IGZvciB0aGUgbmFtZQot
ICAgIC8vICMjIyB5ZWFoLCB0aGlzIGlzIGxhbWUuIHVzZSBhIGRpY3Rpb25hcnkgLyBtYXAgaW5z
dGVhZAotICAgIERPTVN0cmluZyBubWUobi5zdHJpbmcoKSk7Ci0gICAgLy8gY29tcGF0aWJpbGl0
eSBtb2RlIGhhcyB0byBzdG9yZSB1cHBlciBjYXNlCi0gICAgaWYgKGh0bWxNb2RlKCkgIT0gWEh0
bWwpIG5tZSA9IG5tZS51cHBlcigpOwotICAgIGZvciAoaWQgPSAwOyBpZCA8IG1fZWxlbWVudE5h
bWVDb3VudDsgaWQrKykKLSAgICAgICAgaWYgKERPTVN0cmluZyhtX2VsZW1lbnROYW1lc1tpZF0p
ID09IG5tZSkKLSAgICAgICAgICAgIHJldHVybiBtYWtlSWQobnMsIElEX0xBU1RfVEFHICsgMSAr
IGlkKTsKLQotICAgIC8vIHVua25vd24KLSAgICBpZiAocmVhZG9ubHkpIHJldHVybiAwOwotCi0g
ICAgLy8gTmFtZSBub3QgZm91bmQgaW4gbV9lbGVtZW50TmFtZXMsIHNvIGxldCdzIGFkZCBpdAot
ICAgIGlmIChtX2VsZW1lbnROYW1lQ291bnQrMSA+IG1fZWxlbWVudE5hbWVBbGxvYykgewotICAg
ICAgICBtX2VsZW1lbnROYW1lQWxsb2MgKz0gMTAwOwotICAgICAgICBET01TdHJpbmdJbXBsICoq
bmV3TmFtZXMgPSBuZXcgRE9NU3RyaW5nSW1wbCogW21fZWxlbWVudE5hbWVBbGxvY107Ci0gICAg
ICAgIC8vICMjIyB5ZWFoLCB0aGlzIGlzIGxhbWUuIHVzZSBhIGRpY3Rpb25hcnkgLyBtYXAgaW5z
dGVhZAotICAgICAgICBpZiAobV9lbGVtZW50TmFtZXMpIHsKLSAgICAgICAgICAgIHVuc2lnbmVk
IHNob3J0IGk7Ci0gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbV9lbGVtZW50TmFtZUNvdW50
OyBpKyspCi0gICAgICAgICAgICAgICAgbmV3TmFtZXNbaV0gPSBtX2VsZW1lbnROYW1lc1tpXTsK
LSAgICAgICAgICAgIGRlbGV0ZSBbXSBtX2VsZW1lbnROYW1lczsKLSAgICAgICAgfQotICAgICAg
ICBtX2VsZW1lbnROYW1lcyA9IG5ld05hbWVzOwotICAgIH0KLQotICAgIGlkID0gbV9lbGVtZW50
TmFtZUNvdW50Kys7Ci0gICAgbV9lbGVtZW50TmFtZXNbaWRdID0gbm1lLmltcGxlbWVudGF0aW9u
KCk7Ci0gICAgbV9lbGVtZW50TmFtZXNbaWRdLT5yZWYoKTsKLQotICAgIHJldHVybiBtYWtlSWQo
bnMsIElEX0xBU1RfVEFHICsgMSArIGlkKTsKLX0KLQotRE9NU3RyaW5nIERvY3VtZW50SW1wbDo6
dGFnTmFtZShOb2RlSW1wbDo6SWQgX2lkKSBjb25zdAotewotICAgIGlmIChsb2NhbE5hbWVQYXJ0
KF9pZCkgPiBJRF9MQVNUX1RBRykKLSAgICAgICAgcmV0dXJuIG1fZWxlbWVudE5hbWVzW2xvY2Fs
TmFtZVBhcnQoX2lkKSAtIChJRF9MQVNUX1RBRyArIDEpXTsKLSAgICBlbHNlIHsKLSAgICAgICAg
Ly8gIyMjIHB1dCB0aGVtIGluIGEgY2FjaGUKLSAgICAgICAgaWYgKGh0bWxNb2RlKCkgPT0gWEh0
bWwpCi0gICAgICAgICAgICByZXR1cm4gZ2V0VGFnTmFtZShfaWQpLmxvd2VyKCk7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHJldHVybiBnZXRUYWdOYW1lKF9pZCk7Ci0gICAgfQotfQotCi0K
LURPTVN0cmluZ0ltcGwqIERvY3VtZW50SW1wbDo6bmFtZXNwYWNlVVJJKE5vZGVJbXBsOjpJZCBf
aWQpIGNvbnN0Ci17Ci0gICAgaWYgKF9pZCA8PSBJRF9MQVNUX1RBRykKLSAgICAgICAgcmV0dXJu
IGh0bWxNb2RlKCkgPT0gWEh0bWwgPyBYbWxOYW1lc3BhY2VUYWJsZTo6Z2V0TmFtZXNwYWNlVVJJ
KHhodG1sTmFtZXNwYWNlKS5pbXBsZW1lbnRhdGlvbigpIDogMDsKLQotICAgIHVuc2lnbmVkIHNo
b3J0IG5zID0gX2lkID4+IDE2OwotCi0gICAgaWYgKCFucykgcmV0dXJuIDA7Ci0KLSAgICByZXR1
cm4gWG1sTmFtZXNwYWNlVGFibGU6OmdldE5hbWVzcGFjZVVSSShucykuaW1wbGVtZW50YXRpb24o
KTsKLX0KLQogU3R5bGVTaGVldExpc3RJbXBsKiBEb2N1bWVudEltcGw6OnN0eWxlU2hlZXRzKCkK
IHsKICAgICByZXR1cm4gbV9zdHlsZVNoZWV0czsKQEAgLTI0MTksMTEgKzIwNzYsMTEgQEAgdm9p
ZCBEb2N1bWVudEltcGw6OnJlY2FsY1N0eWxlU2VsZWN0b3IoKQogICAgICAgICAgICAgfQogCiAg
ICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAobi0+aXNIVE1MRWxlbWVudCgpICYmIChuLT5pZCgp
ID09IElEX0xJTksgfHwgbi0+aWQoKSA9PSBJRF9TVFlMRSkpIHsKLSAgICAgICAgICAgIEVsZW1l
bnRJbXBsICplID0gc3RhdGljX2Nhc3Q8RWxlbWVudEltcGwgKj4obik7CisgICAgICAgIGVsc2Ug
aWYgKG4tPmlzSFRNTEVsZW1lbnQoKSAmJiAobi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omxpbmso
KSkgfHwgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnN0eWxlKCkpKSkgeworICAgICAgICAgICAg
SFRNTEVsZW1lbnRJbXBsICplID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KG4pOwog
ICAgICAgICAgICAgUVN0cmluZyB0aXRsZSA9IGUtPmdldEF0dHJpYnV0ZSggQVRUUl9USVRMRSAp
LnN0cmluZygpOwogICAgICAgICAgICAgYm9vbCBlbmFibGVkVmlhU2NyaXB0ID0gZmFsc2U7Ci0g
ICAgICAgICAgICBpZiAobi0+aWQoKSA9PSBJRF9MSU5LKSB7CisgICAgICAgICAgICBpZiAoZS0+
aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6bGluaygpKSkgewogICAgICAgICAgICAgICAgIC8vIDxM
SU5LPiBlbGVtZW50CiAgICAgICAgICAgICAgICAgSFRNTExpbmtFbGVtZW50SW1wbCogbCA9IHN0
YXRpY19jYXN0PEhUTUxMaW5rRWxlbWVudEltcGwqPihuKTsKICAgICAgICAgICAgICAgICBpZiAo
bC0+aXNMb2FkaW5nKCkgfHwgbC0+aXNEaXNhYmxlZCgpKQpAQCAtMjQzNSw3ICsyMDkyLDcgQEAg
dm9pZCBEb2N1bWVudEltcGw6OnJlY2FsY1N0eWxlU2VsZWN0b3IoKQogCiAgICAgICAgICAgICAv
LyBHZXQgdGhlIGN1cnJlbnQgcHJlZmVycmVkIHN0eWxlc2V0LiAgVGhpcyBpcyB0aGUKICAgICAg
ICAgICAgIC8vIHNldCBvZiBzaGVldHMgdGhhdCB3aWxsIGJlIGVuYWJsZWQuCi0gICAgICAgICAg
ICBpZiAoIG4tPmlkKCkgPT0gSURfTElOSyApCisgICAgICAgICAgICBpZiAoZS0+aGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6bGluaygpKSkKICAgICAgICAgICAgICAgICBzaGVldCA9IHN0YXRpY19j
YXN0PEhUTUxMaW5rRWxlbWVudEltcGwqPihuKS0+c2hlZXQoKTsKICAgICAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgICAgICAvLyA8U1RZTEU+IGVsZW1lbnQKQEAgLTI0NTIsNyArMjEwOSw3IEBA
IHZvaWQgRG9jdW1lbnRJbXBsOjpyZWNhbGNTdHlsZVNlbGVjdG9yKCkKICAgICAgICAgICAgICAg
ICAgICAgLy8gdXMgYXMgdGhlIHByZWZlcnJlZCBzZXQuICBPdGhlcndpc2UsIGp1c3QgaWdub3Jl
CiAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgc2hlZXQuCiAgICAgICAgICAgICAgICAgICAg
IFFTdHJpbmcgcmVsID0gZS0+Z2V0QXR0cmlidXRlKCBBVFRSX1JFTCApLnN0cmluZygpOwotICAg
ICAgICAgICAgICAgICAgICBpZiAobi0+aWQoKSA9PSBJRF9TVFlMRSB8fCAhcmVsLmNvbnRhaW5z
KCJhbHRlcm5hdGUiKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKGUtPmhhc0xvY2FsTmFtZShI
VE1MTmFtZXM6OnN0eWxlKCkpIHx8ICFyZWwuY29udGFpbnMoImFsdGVybmF0ZSIpKQogICAgICAg
ICAgICAgICAgICAgICAgICAgbV9wcmVmZXJyZWRTdHlsZXNoZWV0U2V0ID0gdmlldygpLT5wYXJ0
KCktPmQtPm1fc2hlZXRVc2VkID0gdGl0bGU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICAgIApAQCAtMjQ3MSw3ICsyMTI4LDcgQEAgdm9pZCBEb2N1bWVudEltcGw6OnJl
Y2FsY1N0eWxlU2VsZWN0b3IoKQogICAgIAogICAgICAgICAvLyBGb3IgSFRNTCBkb2N1bWVudHMs
IHN0eWxlc2hlZXRzIGFyZSBub3QgYWxsb3dlZCB3aXRoaW4vYWZ0ZXIgdGhlIDxCT0RZPiB0YWcu
IFNvIHdlCiAgICAgICAgIC8vIGNhbiBzdG9wIHNlYXJjaGluZyBoZXJlLgotICAgICAgICBpZiAo
aXNIVE1MRG9jdW1lbnQoKSAmJiBuLT5pZCgpID09IElEX0JPRFkpCisgICAgICAgIGlmIChpc0hU
TUxEb2N1bWVudCgpICYmIG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpib2R5KCkpKQogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgfQogCkluZGV4OiBraHRtbC94bWwvZG9tX2RvY2ltcGwuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC94bWwvZG9tX2RvY2ltcGwu
aCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMTUKZGlmZiAtdSAtcCAtcjEuMTE1IGtodG1sL3ht
bC9kb21fZG9jaW1wbC5oCi0tLSBraHRtbC94bWwvZG9tX2RvY2ltcGwuaAkyMiBKdW4gMjAwNSAx
ODoyMjowMiAtMDAwMAkxLjExNQorKysga2h0bWwveG1sL2RvbV9kb2NpbXBsLmgJMjQgSnVuIDIw
MDUgMDM6MTA6NDkgLTAwMDAKQEAgLTIxOCw5ICsyMTgsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCBib29sIGlzRG9jdW1lbnROb2RlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1
YWwgYm9vbCBpc0hUTUxEb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICBF
bGVtZW50SW1wbCAqY3JlYXRlSFRNTEVsZW1lbnQoY29uc3QgRE9NU3RyaW5nICZ0YWdOYW1lLCBp
bnQgJmV4Y2VwdGlvbmNvZGUpOwotICAgIEVsZW1lbnRJbXBsICpjcmVhdGVIVE1MRWxlbWVudCh1
bnNpZ25lZCBzaG9ydCB0YWdJRCk7Ci0KICAgICBraHRtbDo6Q1NTU3R5bGVTZWxlY3RvciAqc3R5
bGVTZWxlY3RvcigpIHsgcmV0dXJuIG1fc3R5bGVTZWxlY3RvcjsgfQogCiAgICAgRWxlbWVudElt
cGwgKkRvY3VtZW50SW1wbDo6Z2V0RWxlbWVudEJ5QWNjZXNzS2V5KCBjb25zdCBET01TdHJpbmcg
JmtleSApOwpAQCAtMzg3LDkgKzM4NCw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlc2V0VmlzaXRl
ZExpbmtDb2xvcigpOwogICAgIHZvaWQgcmVzZXRBY3RpdmVMaW5rQ29sb3IoKTsKICAgICAKLSAg
ICAvLyBpbnRlcm5hbAotICAgIE5vZGVJbXBsICpmaW5kRWxlbWVudCggSWQgaWQgKTsKLQogICAg
IGJvb2wgcHJlcGFyZU1vdXNlRXZlbnQoIGJvb2wgcmVhZG9ubHksIGludCB4LCBpbnQgeSwgTW91
c2VFdmVudCAqZXYgKTsKIAogICAgIHZpcnR1YWwgYm9vbCBjaGlsZEFsbG93ZWQoIE5vZGVJbXBs
ICpuZXdDaGlsZCApOwpAQCAtMzk5LDE2ICszOTMsOSBAQCBwdWJsaWM6CiAgICAgLy8gIyMjIHRo
aW5rIGFib3V0IGltcGxlbWVudGluZyByZWYnY291bnRpbmcgZm9yIHRoZSBpZCdzCiAgICAgLy8g
aW4gb3JkZXIgdG8gYmUgYWJsZSB0byByZWFzc2lnbiB0aG9zZSB0aGF0IGFyZSBubyBsb25nZXIg
aW4gdXNlCiAgICAgLy8gKGNvdWxkIG1ha2UgcHJvYmxlbXMgd2hlbiBpdCBpcyBzdGlsbCBrZXB0
IHNvbWV3aGVyZSBhcm91bmQsIGkuZS4gc3R5bGVzZWxlY3RvcikKLSAgICBOb2RlSW1wbDo6SWQg
dGFnSWQoRE9NU3RyaW5nSW1wbCogX25hbWVzcGFjZVVSSSwgRE9NU3RyaW5nSW1wbCAqX25hbWUs
IGJvb2wgcmVhZG9ubHkpOwotICAgIERPTVN0cmluZyB0YWdOYW1lKE5vZGVJbXBsOjpJZCBfaWQp
IGNvbnN0OwotCiAgICAgTm9kZUltcGw6OklkIGF0dHJJZChET01TdHJpbmdJbXBsKiBfbmFtZXNw
YWNlVVJJLCBET01TdHJpbmdJbXBsICpfbmFtZSwgYm9vbCByZWFkb25seSk7CiAgICAgRE9NU3Ry
aW5nIGF0dHJOYW1lKE5vZGVJbXBsOjpJZCBfaWQpIGNvbnN0OwogCi0gICAgLy8gdGhlIG5hbWVz
cGFjZSB1cmkgaXMgbWFwcGVkIHRvIHRoZSBzYW1lIGlkIGZvciBib3RoCi0gICAgLy8gdGFnbmFt
ZXMgYXMgd2VsbCBhcyBhdHRyaWJ1dGVzLgotICAgIERPTVN0cmluZ0ltcGwqIG5hbWVzcGFjZVVS
SShOb2RlSW1wbDo6SWQgX2lkKSBjb25zdDsKLQogICAgIFN0eWxlU2hlZXRMaXN0SW1wbCogc3R5
bGVTaGVldHMoKTsKIAogICAgIC8qIE5ld2x5IHByb3Bvc2VkIENTUzMgbWVjaGFuaXNtIGZvciBz
ZWxlY3RpbmcgYWx0ZXJuYXRlCkluZGV4OiBraHRtbC94bWwvZG9tX2VsZW1lbnRpbXBsLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC94bWwvZG9tX2VsZW1l
bnRpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS42NwpkaWZmIC11IC1wIC1yMS42NyBr
aHRtbC94bWwvZG9tX2VsZW1lbnRpbXBsLmNwcAotLS0ga2h0bWwveG1sL2RvbV9lbGVtZW50aW1w
bC5jcHAJMTEgTWF5IDIwMDUgMDU6NDk6MzUgLTAwMDAJMS42NworKysga2h0bWwveG1sL2RvbV9l
bGVtZW50aW1wbC5jcHAJMjQgSnVuIDIwMDUgMDM6MTA6NTAgLTAwMDAKQEAgLTkwLDE4ICs5MCwx
OCBAQCB1bnNpZ25lZCBzaG9ydCBBdHRySW1wbDo6bm9kZVR5cGUoKSBjb25zCiAgICAgcmV0dXJu
IE5vZGU6OkFUVFJJQlVURV9OT0RFOwogfQogCi1ET01TdHJpbmcgQXR0ckltcGw6OnByZWZpeCgp
IGNvbnN0Citjb25zdCBBdG9taWNTdHJpbmcmIEF0dHJJbXBsOjpwcmVmaXgoKSBjb25zdAogewog
ICAgIHJldHVybiBtX2F0dHJpYnV0ZS0+cHJlZml4KCk7CiB9CiAKLXZvaWQgQXR0ckltcGw6OnNl
dFByZWZpeChjb25zdCBET01TdHJpbmcgJl9wcmVmaXgsIGludCAmZXhjZXB0aW9uY29kZSApCit2
b2lkIEF0dHJJbXBsOjpzZXRQcmVmaXgoY29uc3QgQXRvbWljU3RyaW5nICZfcHJlZml4LCBpbnQg
JmV4Y2VwdGlvbmNvZGUgKQogewogICAgIGNoZWNrU2V0UHJlZml4KF9wcmVmaXgsIGV4Y2VwdGlv
bmNvZGUpOwogICAgIGlmIChleGNlcHRpb25jb2RlKQogICAgICAgICByZXR1cm47CiAKLSAgICBt
X2F0dHJpYnV0ZS0+c2V0UHJlZml4KF9wcmVmaXguaW1wbGVtZW50YXRpb24oKSk7CisgICAgbV9h
dHRyaWJ1dGUtPnNldFByZWZpeChfcHJlZml4KTsKIH0KIAogRE9NU3RyaW5nIEF0dHJJbXBsOjpu
b2RlVmFsdWUoKSBjb25zdApAQCAtMjAyLDExICsyMDIsMTAgQEAgRE9NU3RyaW5nIEF0dHJJbXBs
Ojp2YWx1ZSgpIGNvbnN0CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotRWxlbWVudEltcGw6OkVs
ZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0gICAgOiBDb250YWluZXJOb2RlSW1wbChkb2Mp
CitFbGVtZW50SW1wbDo6RWxlbWVudEltcGwoY29uc3QgUXVhbGlmaWVkTmFtZSYgcU5hbWUsIERv
Y3VtZW50UHRyICpkb2MpCisgICAgOiBDb250YWluZXJOb2RlSW1wbChkb2MpLCBtX3RhZ05hbWUo
cU5hbWUpCiB7CiAgICAgbmFtZWRBdHRyTWFwID0gMDsKLSAgICBtX3ByZWZpeCA9IDA7CiB9CiAK
IEVsZW1lbnRJbXBsOjp+RWxlbWVudEltcGwoKQpAQCAtMjE1LDkgKzIxNCw2IEBAIEVsZW1lbnRJ
bXBsOjp+RWxlbWVudEltcGwoKQogICAgICAgICBuYW1lZEF0dHJNYXAtPmRldGFjaEZyb21FbGVt
ZW50KCk7CiAgICAgICAgIG5hbWVkQXR0ck1hcC0+ZGVyZWYoKTsKICAgICB9Ci0KLSAgICBpZiAo
bV9wcmVmaXgpCi0gICAgICAgIG1fcHJlZml4LT5kZXJlZigpOwogfQogCiB2b2lkIEVsZW1lbnRJ
bXBsOjpyZW1vdmVBdHRyaWJ1dGUoIE5vZGVJbXBsOjpJZCBpZCwgaW50ICZleGNlcHRpb25jb2Rl
ICkKQEAgLTM1MSwzNiArMzQ3LDI0IEBAIHZvaWQgRWxlbWVudEltcGw6OnNldEF0dHJpYnV0ZU1h
cCggTmFtZWQKIGJvb2wgRWxlbWVudEltcGw6Omhhc0F0dHJpYnV0ZXMoKSBjb25zdAogewogICAg
IHVwZGF0ZVN0eWxlQXR0cmlidXRlSWZOZWVkZWQoKTsKLQogICAgIHJldHVybiBuYW1lZEF0dHJN
YXAgJiYgbmFtZWRBdHRyTWFwLT5sZW5ndGgoKSA+IDA7CiB9CiAKIERPTVN0cmluZyBFbGVtZW50
SW1wbDo6bm9kZU5hbWUoKSBjb25zdAogewotICAgIHJldHVybiB0YWdOYW1lKCk7Ci19Ci0KLURP
TVN0cmluZyBFbGVtZW50SW1wbDo6dGFnTmFtZSgpIGNvbnN0Ci17Ci0gICAgRE9NU3RyaW5nIHRu
ID0gZ2V0RG9jdW1lbnQoKS0+dGFnTmFtZShpZCgpKTsKLQotICAgIGlmIChtX3ByZWZpeCkKLSAg
ICAgICAgcmV0dXJuIERPTVN0cmluZyhtX3ByZWZpeCkgKyAiOiIgKyB0bjsKLQorICAgIERPTVN0
cmluZyB0biA9IG1fdGFnTmFtZS5sb2NhbE5hbWUoKTsKKyAgICBpZiAobV90YWdOYW1lLmhhc1By
ZWZpeCgpKQorICAgICAgICByZXR1cm4gRE9NU3RyaW5nKG1fdGFnTmFtZS5wcmVmaXgoKSkgKyAi
OiIgKyB0bjsKICAgICByZXR1cm4gdG47CiB9CiAKLXZvaWQgRWxlbWVudEltcGw6OnNldFByZWZp
eCggY29uc3QgRE9NU3RyaW5nICZfcHJlZml4LCBpbnQgJmV4Y2VwdGlvbmNvZGUgKQordm9pZCBF
bGVtZW50SW1wbDo6c2V0UHJlZml4KGNvbnN0IEF0b21pY1N0cmluZyAmX3ByZWZpeCwgaW50ICZl
eGNlcHRpb25jb2RlKQogewogICAgIGNoZWNrU2V0UHJlZml4KF9wcmVmaXgsIGV4Y2VwdGlvbmNv
ZGUpOwogICAgIGlmIChleGNlcHRpb25jb2RlKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAo
bV9wcmVmaXgpCi0gICAgICAgIG1fcHJlZml4LT5kZXJlZigpOwotICAgIG1fcHJlZml4ID0gX3By
ZWZpeC5pbXBsZW1lbnRhdGlvbigpOwotICAgIGlmIChtX3ByZWZpeCkKLSAgICAgICAgbV9wcmVm
aXgtPnJlZigpOworICAgIG1fdGFnTmFtZS5zZXRQcmVmaXgoX3ByZWZpeCk7CiB9CiAKIHZvaWQg
RWxlbWVudEltcGw6OmNyZWF0ZUF0dHJpYnV0ZU1hcCgpIGNvbnN0CkBAIC01MjgsOCArNTEyLDEw
IEBAIGJvb2wgRWxlbWVudEltcGw6OmNoaWxkQWxsb3dlZCggTm9kZUltcGwKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgLy8gRm9yIFhNTCBkb2N1bWVudHMsIHdlIGFyZSBub24tdmFsaWRh
dGluZyBhbmQgZG8gbm90IGNoZWNrIGFnYWluc3QgYSBEVEQsIGV2ZW4gZm9yIEhUTUwgZWxlbWVu
dHMuCisgICAgLyogRklYTUU6IFJlLWltcGxlbWVudCBjaGVja0NoaWxkCiAgICAgaWYgKGdldERv
Y3VtZW50KCktPmlzSFRNTERvY3VtZW50KCkpCiAgICAgICAgIHJldHVybiBjaGVja0NoaWxkKGlk
KCksIG5ld0NoaWxkLT5pZCgpLCAhZ2V0RG9jdW1lbnQoKS0+aW5Db21wYXRNb2RlKCkpOworICAg
ICovCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTU2OSw3ICs1NTUsNyBAQCB2b2lkIEVsZW1l
bnRJbXBsOjpkaXNwYXRjaEF0dHJBZGRpdGlvbkV2CiAKIERPTVN0cmluZyBFbGVtZW50SW1wbDo6
b3BlblRhZ1N0YXJ0VG9TdHJpbmcoKSBjb25zdAogewotICAgIERPTVN0cmluZyByZXN1bHQgPSBE
T01TdHJpbmcoIjwiKSArIHRhZ05hbWUoKTsKKyAgICBET01TdHJpbmcgcmVzdWx0ID0gRE9NU3Ry
aW5nKCI8IikgKyBub2RlTmFtZSgpOwogCiAgICAgTmFtZWRBdHRyTWFwSW1wbCAqYXR0ck1hcCA9
IGF0dHJpYnV0ZXModHJ1ZSk7CiAKQEAgLTYxMCw3ICs1OTYsNyBAQCBET01TdHJpbmcgRWxlbWVu
dEltcGw6OnRvU3RyaW5nKCkgY29uc3QKIAl9CiAKIAlyZXN1bHQgKz0gIjwvIjsKLQlyZXN1bHQg
Kz0gdGFnTmFtZSgpOworCXJlc3VsdCArPSBub2RlTmFtZSgpOwogCXJlc3VsdCArPSAiPiI7CiAg
ICAgfSBlbHNlIHsKIAlyZXN1bHQgKz0gIiAvPiI7CkBAIC03NTksMTIgKzc0NSw3IEBAIENTU1N0
eWxlRGVjbGFyYXRpb25JbXBsICpFbGVtZW50SW1wbDo6c3QKIAogLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQogCi1YTUxFbGVtZW50SW1wbDo6WE1MRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgRE9N
U3RyaW5nSW1wbCAqX3RhZ05hbWUpCi0gICAgOiBFbGVtZW50SW1wbChkb2MpCi17Ci0gICAgbV9p
ZCA9IGRvYy0+ZG9jdW1lbnQoKS0+dGFnSWQoMCAvKiBubyBuYW1lc3BhY2UgKi8sIF90YWdOYW1l
LCAgZmFsc2UgLyogYWxsb2NhdGUgKi8pOwotfQotCisvKgogWE1MRWxlbWVudEltcGw6OlhNTEVs
ZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIERPTVN0cmluZ0ltcGwgKl9xdWFsaWZpZWROYW1l
LCBET01TdHJpbmdJbXBsICpfbmFtZXNwYWNlVVJJKQogICAgIDogRWxlbWVudEltcGwoZG9jKQog
ewpAQCAtNzgwLDMxICs3NjEsMjEgQEAgWE1MRWxlbWVudEltcGw6OlhNTEVsZW1lbnRJbXBsKERv
Y3VtZW50UAogICAgICAgICBET01TdHJpbmdJbXBsKiBsb2NhbE5hbWUgPSBfcXVhbGlmaWVkTmFt
ZS0+Y29weSgpOwogICAgICAgICBsb2NhbE5hbWUtPnJlZigpOwogICAgICAgICBsb2NhbE5hbWUt
PnJlbW92ZSgwLGNvbG9ucG9zKzEpOwotICAgICAgICBtX2lkID0gZG9jLT5kb2N1bWVudCgpLT50
YWdJZChfbmFtZXNwYWNlVVJJLCBsb2NhbE5hbWUsIGZhbHNlIC8qIGFsbG9jYXRlICovKTsKKyAg
ICAgICAgbV9pZCA9IGRvYy0+ZG9jdW1lbnQoKS0+dGFnSWQoX25hbWVzcGFjZVVSSSwgbG9jYWxO
YW1lLCBmYWxzZSk7CiAgICAgICAgIGxvY2FsTmFtZS0+ZGVyZWYoKTsKLSAgICAgICAgbV9wcmVm
aXggPSBfcXVhbGlmaWVkTmFtZS0+Y29weSgpOwotICAgICAgICBtX3ByZWZpeC0+cmVmKCk7Ci0g
ICAgICAgIG1fcHJlZml4LT50cnVuY2F0ZShjb2xvbnBvcyk7CisgICAgICAgIAorICAgICAgICAv
LyBGSVhNRTogVGhpcyBpcyBhIHRlbXBvcmFyeSBzaXR1YXRpb24gZm9yIHN0YWdlIG9uZSBvZiB0
aGUgUXVhbGlmaWVkTmFtZSBwYXRjaC4gIFRoaXMgaXMgYWxzbyBhIHJlYWxseSBzdHVwaWQgd2F5
IHRvCisgICAgICAgIC8vIGhhdmUgdG8gaGFuZGxlIHRoZSBwcmVmaXguICBXYXkgdG9vIG11Y2gg
Y29weWluZy4gIFdlIHNob3VsZCBtYWtlIHN1cmUgdGhlIFhNTCB0b2tlbml6ZXIgaGFzIGRvbmUg
dGhlIHNwbGl0CisgICAgICAgIC8vIGFscmVhZHkgaW50byBwcmVmaXggYW5kIGxvY2FsTmFtZS4K
KyAgICAgICAgRE9NU3RyaW5nSW1wbCogcHJlZml4ID0gX3F1YWxpZmllZE5hbWUtPmNvcHkoKTsK
KyAgICAgICAgcHJlZml4LT5yZWYoKTsKKyAgICAgICAgcHJlZml4LT50cnVuY2F0ZShjb2xvbnBv
cyk7CisgICAgICAgIG1fdGFnTmFtZSA9IFF1YWxpZmllZE5hbWUocHJlZml4LCBudWxsQXRvbSwg
bnVsbEF0b20pOworICAgICAgICBwcmVmaXgtPmRlcmVmKCk7CiAgICAgfQotICAgIGVsc2Ugewor
ICAgIGVsc2UKICAgICAgICAgLy8gbm8gcHJlZml4Ci0gICAgICAgIG1faWQgPSBkb2MtPmRvY3Vt
ZW50KCktPnRhZ0lkKF9uYW1lc3BhY2VVUkksIF9xdWFsaWZpZWROYW1lLCBmYWxzZSAvKiBhbGxv
Y2F0ZSAqLyk7Ci0gICAgICAgIG1fcHJlZml4ID0gMDsKLSAgICB9Ci19Ci0KLVhNTEVsZW1lbnRJ
bXBsOjp+WE1MRWxlbWVudEltcGwoKQotewotfQotCi1ET01TdHJpbmcgWE1MRWxlbWVudEltcGw6
OmxvY2FsTmFtZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldERvY3VtZW50KCktPnRhZ05hbWUo
bV9pZCk7Ci19Ci0KLURPTVN0cmluZyBYTUxFbGVtZW50SW1wbDo6bmFtZXNwYWNlVVJJKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gZ2V0RG9jdW1lbnQoKS0+bmFtZXNwYWNlVVJJKG1faWQpOworICAg
ICAgICBtX2lkID0gZG9jLT5kb2N1bWVudCgpLT50YWdJZChfbmFtZXNwYWNlVVJJLCBfcXVhbGlm
aWVkTmFtZSwgZmFsc2UpOwogfQogCiBOb2RlSW1wbCAqWE1MRWxlbWVudEltcGw6OmNsb25lTm9k
ZSAoIGJvb2wgZGVlcCApCkBAIC04MjMsNiArNzk0LDcgQEAgTm9kZUltcGwgKlhNTEVsZW1lbnRJ
bXBsOjpjbG9uZU5vZGUgKCBibwogCiAgICAgcmV0dXJuIGNsb25lOwogfQorKi8KIAogLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQogCkBAIC0xMjcwLDggKzEyNDIsOCBAQCB2b2lkIE5hbWVkTWFwcGVkQXR0
ck1hcEltcGw6OnBhcnNlQ2xhc3NBCiAgICAgfQogfQogCi1TdHlsZWRFbGVtZW50SW1wbDo6U3R5
bGVkRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgICA6IEVsZW1lbnRJbXBsKGRvYykK
K1N0eWxlZEVsZW1lbnRJbXBsOjpTdHlsZWRFbGVtZW50SW1wbChjb25zdCBRdWFsaWZpZWROYW1l
JiBuYW1lLCBEb2N1bWVudFB0ciAqZG9jKQorICAgIDogRWxlbWVudEltcGwobmFtZSwgZG9jKQog
ewogICAgIG1faW5saW5lU3R5bGVEZWNsID0gMDsKICAgICBtX2lzU3R5bGVBdHRyaWJ1dGVWYWxp
ZCA9IHRydWU7CkluZGV4OiBraHRtbC94bWwvZG9tX2VsZW1lbnRpbXBsLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwveG1sL2RvbV9lbGVtZW50aW1wbC5oLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjQxCmRpZmYgLXUgLXAgLXIxLjQxIGtodG1sL3htbC9kb21f
ZWxlbWVudGltcGwuaAotLS0ga2h0bWwveG1sL2RvbV9lbGVtZW50aW1wbC5oCTEyIE1heSAyMDA1
IDE3OjExOjIyIC0wMDAwCTEuNDEKKysrIGtodG1sL3htbC9kb21fZWxlbWVudGltcGwuaAkyNCBK
dW4gMjAwNSAwMzoxMDo1MCAtMDAwMApAQCAtMjMsMTMgKzIzLDE0IEBACiAgKiBCb3N0b24sIE1B
IDAyMTExLTEzMDcsIFVTQS4KICAqCiAgKi8KLSNpZm5kZWYgX0RPTV9FTEVNRU5USW1wbF9oXwot
I2RlZmluZSBfRE9NX0VMRU1FTlRJbXBsX2hfCisjaWZuZGVmIF9ET01fRUxFTUVOVElNUExfaF8K
KyNkZWZpbmUgX0RPTV9FTEVNRU5USU1QTF9oXwogCiAjaW5jbHVkZSAiZG9tX25vZGVpbXBsLmgi
CiAjaW5jbHVkZSAieG1sL2RvbV9zdHJpbmdpbXBsLmgiCiAjaW5jbHVkZSAibWlzYy9zaGFyZWQu
aCIKICNpbmNsdWRlICJjc3MvY3NzX3ZhbHVlaW1wbC5oIgorI2luY2x1ZGUgImRvbV9xbmFtZS5o
IgogCiAjaWYgQVBQTEVfQ0hBTkdFUwogI2lmZGVmIF9fT0JKQ19fCkBAIC0xMjgsOCArMTI5LDgg
QEAgcHVibGljOgogICAgIC8vIERPTSBtZXRob2RzIG92ZXJyaWRkZW4gZnJvbSAgcGFyZW50IGNs
YXNzZXMKICAgICB2aXJ0dWFsIERPTVN0cmluZyBub2RlTmFtZSgpIGNvbnN0OwogICAgIHZpcnR1
YWwgdW5zaWduZWQgc2hvcnQgbm9kZVR5cGUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIERPTVN0cmlu
ZyBwcmVmaXgoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0UHJlZml4KGNvbnN0IERPTVN0
cmluZyAmX3ByZWZpeCwgaW50ICZleGNlcHRpb25jb2RlICk7CisgICAgdmlydHVhbCBjb25zdCBB
dG9taWNTdHJpbmcmIHByZWZpeCgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRQcmVmaXgo
Y29uc3QgQXRvbWljU3RyaW5nICZfcHJlZml4LCBpbnQgJmV4Y2VwdGlvbmNvZGUgKTsKIAogICAg
IHZpcnR1YWwgRE9NU3RyaW5nIG5vZGVWYWx1ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBz
ZXROb2RlVmFsdWUoIGNvbnN0IERPTVN0cmluZyAmLCBpbnQgJmV4Y2VwdGlvbmNvZGUgKTsKQEAg
LTE1Niw3ICsxNTcsNyBAQCBjbGFzcyBFbGVtZW50SW1wbCA6IHB1YmxpYyBDb250YWluZXJOb2Rl
CiAgICAgZnJpZW5kIGNsYXNzIE5vZGVJbXBsOwogICAgIGZyaWVuZCBjbGFzcyBraHRtbDo6Q1NT
U3R5bGVTZWxlY3RvcjsKIHB1YmxpYzoKLSAgICBFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9j
KTsKKyAgICBFbGVtZW50SW1wbChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVu
dFB0ciAqZG9jKTsKICAgICB+RWxlbWVudEltcGwoKTsKIAogICAgIC8vIFVzZWQgdG8gcXVpY2ts
eSBkZXRlcm1pbmUgd2hldGhlciBvciBub3QgYW4gZWxlbWVudCBoYXMgYSBnaXZlbiBDU1MgY2xh
c3MuCkBAIC0xODYsMTMgKzE4NywyMiBAQCBwdWJsaWM6CiAgICAgU2hhcmVkUHRyPEF0dHJJbXBs
PiBzZXRBdHRyaWJ1dGVOb2RlTlMoQXR0ckltcGwgKm5ld0F0dHIsIGludCAmZXhjZXB0aW9uKSB7
IHJldHVybiBzZXRBdHRyaWJ1dGVOb2RlKG5ld0F0dHIsIGV4Y2VwdGlvbik7IH0KICAgICBTaGFy
ZWRQdHI8QXR0ckltcGw+IHJlbW92ZUF0dHJpYnV0ZU5vZGUoQXR0ckltcGwgKm9sZEF0dHIsIGlu
dCAmZXhjZXB0aW9uKTsKICAgICAKLSAgICBET01TdHJpbmcgcHJlZml4KCkgY29uc3QgeyByZXR1
cm4gbV9wcmVmaXg7IH0KLSAgICB2b2lkIHNldFByZWZpeChjb25zdCBET01TdHJpbmcgJl9wcmVm
aXgsIGludCAmZXhjZXB0aW9uY29kZSApOwotCiAgICAgdmlydHVhbCBDU1NTdHlsZURlY2xhcmF0
aW9uSW1wbCAqc3R5bGUoKTsKIAorICAgIHZpcnR1YWwgY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFn
TmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFnTmFtZTsgfQorICAgIHZpcnR1YWwgYm9vbCBoYXNU
YWdOYW1lKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUpIGNvbnN0IHsgcmV0dXJuIG1fdGFn
TmFtZS5tYXRjaGVzKHRhZ05hbWUpOyB9CisgICAgCisgICAgLy8gQSBtb3JlIGxpZ2h0d2VpZ2h0
IGNoZWNrIHRoYW4gaGFzVGFnTmFtZS4gIFVzZSB0aGlzIGNoZWNrIHdoZW4geW91IGtub3cgdGhl
IG5hbWVzcGFjZXMgb2YgdGhlIHR3byBRdWFsaWZpZWROYW1lcyBtYXRjaCwgZS5nLiwgdGhhdCB0
aGV5J3JlCisgICAgLy8gYm90aCBIVE1MIG5hbWVzLgorICAgIGJvb2wgaGFzTG9jYWxOYW1lKGNv
bnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUpIGNvbnN0IHsgcmV0dXJuIG1fdGFnTmFtZS5sb2Nh
bE5hbWUoKSA9PSB0YWdOYW1lLmxvY2FsTmFtZSgpOyB9CisgICAgYm9vbCBoYXNMb2NhbE5hbWUo
Y29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUpIGNvbnN0IHsgcmV0dXJuIG1fdGFnTmFtZS5s
b2NhbE5hbWUoKSA9PSBsb2NhbE5hbWU7IH0KKworICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3Ry
aW5nJiBsb2NhbE5hbWUoKSBjb25zdCB7IHJldHVybiBtX3RhZ05hbWUubG9jYWxOYW1lKCk7IH0K
KyAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4KCkgY29uc3QgeyByZXR1cm4g
bV90YWdOYW1lLnByZWZpeCgpOyB9CisgICAgdmlydHVhbCB2b2lkIHNldFByZWZpeChjb25zdCBB
dG9taWNTdHJpbmcgJl9wcmVmaXgsIGludCAmZXhjZXB0aW9uY29kZSk7CisgICAgdmlydHVhbCBj
b25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFnTmFt
ZS5uYW1lc3BhY2VVUkkoKTsgfQorICAgIAogICAgIC8vIERPTSBtZXRob2RzIG92ZXJyaWRkZW4g
ZnJvbSAgcGFyZW50IGNsYXNzZXMKLSAgICB2aXJ0dWFsIERPTVN0cmluZyB0YWdOYW1lKCkgY29u
c3Q7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCBub2RlVHlwZSgpIGNvbnN0OwogICAgIHZp
cnR1YWwgTm9kZUltcGwgKmNsb25lTm9kZSAoIGJvb2wgZGVlcCApID0gMDsKICAgICB2aXJ0dWFs
IERPTVN0cmluZyBub2RlTmFtZSgpIGNvbnN0OwpAQCAtMjU0LDI5ICsyNjQsNyBAQCBwcml2YXRl
OgogCiBwcm90ZWN0ZWQ6IC8vIG1lbWJlciB2YXJpYWJsZXMKICAgICBtdXRhYmxlIE5hbWVkQXR0
ck1hcEltcGwgKm5hbWVkQXR0ck1hcDsKLSAgICBET01TdHJpbmdJbXBsICptX3ByZWZpeDsKLX07
Ci0KLQotY2xhc3MgWE1MRWxlbWVudEltcGwgOiBwdWJsaWMgRWxlbWVudEltcGwKLXsKLQotcHVi
bGljOgotICAgIFhNTEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIERPTVN0cmluZ0ltcGwg
Kl90YWdOYW1lKTsKLSAgICBYTUxFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCBET01TdHJp
bmdJbXBsICpfcXVhbGlmaWVkTmFtZSwgRE9NU3RyaW5nSW1wbCAqX25hbWVzcGFjZVVSSSk7Ci0g
ICAgflhNTEVsZW1lbnRJbXBsKCk7Ci0KLSAgICAvLyBET00gbWV0aG9kcyBvdmVycmlkZGVuIGZy
b20gIHBhcmVudCBjbGFzc2VzCi0gICAgdmlydHVhbCBET01TdHJpbmcgbmFtZXNwYWNlVVJJKCkg
Y29uc3Q7Ci0gICAgdmlydHVhbCBET01TdHJpbmcgbG9jYWxOYW1lKCkgY29uc3Q7Ci0gICAgdmly
dHVhbCBOb2RlSW1wbCAqY2xvbmVOb2RlICggYm9vbCBkZWVwICk7Ci0KLSAgICAvLyBPdGhlciBt
ZXRob2RzIChub3QgcGFydCBvZiBET00pCi0gICAgdmlydHVhbCBib29sIGlzWE1MRWxlbWVudE5v
ZGUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0IHsg
cmV0dXJuIG1faWQ7IH0KLQotcHJvdGVjdGVkOgotICAgIElkIG1faWQ7CisgICAgUXVhbGlmaWVk
TmFtZSBtX3RhZ05hbWU7CiB9OwogCiAvLyB0aGUgbWFwIG9mIGF0dHJpYnV0ZXMgb2YgYW4gZWxl
bWVudApAQCAtNDE0LDcgKzQwMiw3IEBAIHByaXZhdGU6CiBjbGFzcyBTdHlsZWRFbGVtZW50SW1w
bCA6IHB1YmxpYyBFbGVtZW50SW1wbAogewogcHVibGljOgotICAgIFN0eWxlZEVsZW1lbnRJbXBs
KERvY3VtZW50UHRyICpkb2MpOworICAgIFN0eWxlZEVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmll
ZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50UHRyICpkb2MpOwogICAgIHZpcnR1YWwgflN0eWxlZEVs
ZW1lbnRJbXBsKCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNTdHlsZWRFbGVtZW50KCkgY29uc3Qg
eyByZXR1cm4gdHJ1ZTsgfQpJbmRleDoga2h0bWwveG1sL2RvbV9ub2RlaW1wbC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwveG1sL2RvbV9ub2RlaW1wbC5j
cHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTU2CmRpZmYgLXUgLXAgLXIxLjE1NiBraHRtbC94
bWwvZG9tX25vZGVpbXBsLmNwcAotLS0ga2h0bWwveG1sL2RvbV9ub2RlaW1wbC5jcHAJMjMgSnVu
IDIwMDUgMTk6NDc6NTAgLTAwMDAJMS4xNTYKKysrIGtodG1sL3htbC9kb21fbm9kZWltcGwuY3Bw
CTI0IEp1biAyMDA1IDAzOjEwOjUyIC0wMDAwCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5jbHVkZSAi
ZG9tL2RvbV9leGNlcHRpb24uaCIKICNpbmNsdWRlICJkb20vZG9tMl9ldmVudHMuaCIKICNpbmNs
dWRlICJtaXNjL2h0bWxhdHRycy5oIgotI2luY2x1ZGUgIm1pc2MvaHRtbHRhZ3MuaCIKICNpbmNs
dWRlICJ4bWwvZG9tX2VsZW1lbnRpbXBsLmgiCiAjaW5jbHVkZSAieG1sL2RvbV90ZXh0aW1wbC5o
IgogI2luY2x1ZGUgInhtbC9kb20yX2V2ZW50c2ltcGwuaCIKQEAgLTUwLDcgKzQ5LDggQEAKICNp
bmNsdWRlICJraHRtbHZpZXcuaCIKICNpbmNsdWRlICJraHRtbF9wYXJ0LmgiCiAKLSNpbmNsdWRl
ICJodG1sL2R0ZC5oIgorLy8gRklYTUU6IFNob3VsZCBub3QgaGF2ZSB0byBpbmNsdWRlIHRoaXMu
ICBDdXQgdGhlIEhUTUwgZGVwZW5kZW5jeSEKKyNpbmNsdWRlICJodG1sbmFtZXMuaCIKIAogI2lm
bmRlZiBLSFRNTF9OT19YQkwKICNpbmNsdWRlICJ4YmwveGJsX2JpbmRpbmdfbWFuYWdlci5oIgpA
QCAtMTU0LDcgKzE1NCw3IEBAIE5vZGVJbXBsICpOb2RlSW1wbDo6bGFzdENoaWxkKCkgY29uc3QK
ICAgcmV0dXJuIDA7CiB9CiAKLU5vZGVJbXBsICpOb2RlSW1wbDo6bGFzdERlc2NlbmRlbnQoKSBj
b25zdAorTm9kZUltcGwgKk5vZGVJbXBsOjpsYXN0RGVzY2VuZGFudCgpIGNvbnN0CiB7CiAgICAg
Tm9kZUltcGwgKm4gPSBjb25zdF9jYXN0PE5vZGVJbXBsICo+KHRoaXMpOwogICAgIHdoaWxlIChu
ICYmIG4tPmxhc3RDaGlsZCgpKQpAQCAtMjM5LDEzICsyMzksMTMgQEAgdm9pZCBOb2RlSW1wbDo6
bm9ybWFsaXplICgpCiAgICAgfQogfQogCi1ET01TdHJpbmcgTm9kZUltcGw6OnByZWZpeCgpIGNv
bnN0Citjb25zdCBBdG9taWNTdHJpbmcmIE5vZGVJbXBsOjpwcmVmaXgoKSBjb25zdAogewogICAg
IC8vIEZvciBub2RlcyBvdGhlciB0aGFuIGVsZW1lbnRzIGFuZCBhdHRyaWJ1dGVzLCB0aGUgcHJl
Zml4IGlzIGFsd2F5cyBudWxsCi0gICAgcmV0dXJuIERPTVN0cmluZygpOworICAgIHJldHVybiBu
dWxsQXRvbTsKIH0KIAotdm9pZCBOb2RlSW1wbDo6c2V0UHJlZml4KGNvbnN0IERPTVN0cmluZyAm
LypfcHJlZml4Ki8sIGludCAmZXhjZXB0aW9uY29kZSApCit2b2lkIE5vZGVJbXBsOjpzZXRQcmVm
aXgoY29uc3QgQXRvbWljU3RyaW5nICYvKl9wcmVmaXgqLywgaW50ICZleGNlcHRpb25jb2RlICkK
IHsKICAgICAvLyBUaGUgc3BlYyBzYXlzIHRoYXQgZm9yIG5vZGVzIG90aGVyIHRoYW4gZWxlbWVu
dHMgYW5kIGF0dHJpYnV0ZXMsIHByZWZpeCBpcyBhbHdheXMgbnVsbC4KICAgICAvLyBJdCBkb2Vz
IG5vdCBzYXkgd2hhdCB0byBkbyB3aGVuIHRoZSB1c2VyIHRyaWVzIHRvIHNldCB0aGUgcHJlZml4
IG9uIGFub3RoZXIgdHlwZSBvZgpAQCAtMjUzLDE0ICsyNTMsMTQgQEAgdm9pZCBOb2RlSW1wbDo6
c2V0UHJlZml4KGNvbnN0IERPTVN0cmluZwogICAgIGV4Y2VwdGlvbmNvZGUgPSBET01FeGNlcHRp
b246Ok5BTUVTUEFDRV9FUlI7CiB9CiAKLURPTVN0cmluZyBOb2RlSW1wbDo6bG9jYWxOYW1lKCkg
Y29uc3QKK2NvbnN0IEF0b21pY1N0cmluZyYgTm9kZUltcGw6OmxvY2FsTmFtZSgpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIERPTVN0cmluZygpOworICAgIHJldHVybiBlbXB0eUF0b207CiB9CiAKLURP
TVN0cmluZyBOb2RlSW1wbDo6bmFtZXNwYWNlVVJJKCkgY29uc3QKK2NvbnN0IEF0b21pY1N0cmlu
ZyYgTm9kZUltcGw6Om5hbWVzcGFjZVVSSSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIERPTVN0cmlu
ZygpOworICAgIHJldHVybiBlbXB0eUF0b207CiB9CiAKIHZvaWQgTm9kZUltcGw6OnNldEZpcnN0
Q2hpbGQoTm9kZUltcGwgKikKQEAgLTMwNiwxMiArMzA2LDYgQEAgdm9pZCBOb2RlSW1wbDo6c2V0
Q2hhbmdlZChib29sIGIpCiAgICAgfQogfQogCi1ib29sIE5vZGVJbXBsOjppc0lubGluZSgpIGNv
bnN0Ci17Ci0gICAgaWYgKG1fcmVuZGVyKSByZXR1cm4gbV9yZW5kZXItPnN0eWxlKCktPmRpc3Bs
YXkoKSA9PSBraHRtbDo6SU5MSU5FOwotICAgIHJldHVybiAhaXNFbGVtZW50Tm9kZSgpOwotfQot
CiBib29sIE5vZGVJbXBsOjppc0ZvY3VzYWJsZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGZhbHNl
OwpAQCAtMTAwNiw0MyArMTAwMCwzNCBAQCBOb2RlSW1wbCAqTm9kZUltcGw6OnRyYXZlcnNlUHJl
dmlvdXNOb2RlCiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgTm9kZUltcGw6OmNoZWNrU2V0UHJl
Zml4KGNvbnN0IERPTVN0cmluZyAmX3ByZWZpeCwgaW50ICZleGNlcHRpb25jb2RlKQordm9pZCBO
b2RlSW1wbDo6Y2hlY2tTZXRQcmVmaXgoY29uc3QgQXRvbWljU3RyaW5nICZfcHJlZml4LCBpbnQg
JmV4Y2VwdGlvbmNvZGUpCiB7CiAgICAgLy8gUGVyZm9ybSBlcnJvciBjaGVja2luZyBhcyByZXF1
aXJlZCBieSBzcGVjIGZvciBzZXR0aW5nIE5vZGUucHJlZml4LiBVc2VkIGJ5CiAgICAgLy8gRWxl
bWVudEltcGw6OnNldFByZWZpeCgpIGFuZCBBdHRySW1wbDo6c2V0UHJlZml4KCkKIAotI2lmIDAK
LSAgICAvLyBGSVhNRTogQWRkIHRoaXMgY2hlY2sgKGJ1dCBub3QgaW4gYSB3YXkgdGhhdCBkZXBl
bmRzIG9uIHRoZSBDKysgRE9NISkKLSAgICAvLyBJTlZBTElEX0NIQVJBQ1RFUl9FUlI6IFJhaXNl
ZCBpZiB0aGUgc3BlY2lmaWVkIHByZWZpeCBjb250YWlucyBhbiBpbGxlZ2FsIGNoYXJhY3Rlci4K
LSAgICBpZiAoIUVsZW1lbnQ6OmtodG1sVmFsaWRQcmVmaXgoX3ByZWZpeCkpIHsKLSAgICAgICAg
ZXhjZXB0aW9uY29kZSA9IERPTUV4Y2VwdGlvbjo6SU5WQUxJRF9DSEFSQUNURVJfRVJSOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHN1
cHBvcnQgZm9yIElOVkFMSURfQ0hBUkFDVEVSX0VSUjogUmFpc2VkIGlmIHRoZSBzcGVjaWZpZWQg
cHJlZml4IGNvbnRhaW5zIGFuIGlsbGVnYWwgY2hhcmFjdGVyLgorICAgIAogICAgIC8vIE5PX01P
RElGSUNBVElPTl9BTExPV0VEX0VSUjogUmFpc2VkIGlmIHRoaXMgbm9kZSBpcyByZWFkb25seS4K
ICAgICBpZiAoaXNSZWFkT25seSgpKSB7CiAgICAgICAgIGV4Y2VwdGlvbmNvZGUgPSBET01FeGNl
cHRpb246Ok5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUjsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIC8vIE5BTUVTUEFDRV9FUlI6IC0gUmFpc2VkIGlmIHRoZSBzcGVjaWZpZWQgcHJl
Zml4IGlzIG1hbGZvcm1lZAorICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgTkFNRVNQQUNFX0VSUjog
LSBSYWlzZWQgaWYgdGhlIHNwZWNpZmllZCBwcmVmaXggaXMgbWFsZm9ybWVkCisgICAgLy8gV2Ug
aGF2ZSB0byBjb21tZW50IHRoaXMgb3V0LCBzaW5jZSBpdCdzIHVzZWQgZm9yIGF0dHJpYnV0ZXMg
YW5kIHRhZyBuYW1lcywgYW5kIHdlJ3ZlIG9ubHkKKyAgICAvLyBzd2l0Y2hlZCBvbmUgb3Zlci4K
KyAgICAvKgogICAgIC8vIC0gaWYgdGhlIG5hbWVzcGFjZVVSSSBvZiB0aGlzIG5vZGUgaXMgbnVs
bCwKICAgICAvLyAtIGlmIHRoZSBzcGVjaWZpZWQgcHJlZml4IGlzICJ4bWwiIGFuZCB0aGUgbmFt
ZXNwYWNlVVJJIG9mIHRoaXMgbm9kZSBpcyBkaWZmZXJlbnQgZnJvbQogICAgIC8vICAgImh0dHA6
Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIsCiAgICAgLy8gLSBpZiB0aGlzIG5vZGUg
aXMgYW4gYXR0cmlidXRlIGFuZCB0aGUgc3BlY2lmaWVkIHByZWZpeCBpcyAieG1sbnMiIGFuZAog
ICAgIC8vICAgdGhlIG5hbWVzcGFjZVVSSSBvZiB0aGlzIG5vZGUgaXMgZGlmZmVyZW50IGZyb20g
Imh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIiwKICAgICAvLyAtIG9yIGlmIHRoaXMgbm9k
ZSBpcyBhbiBhdHRyaWJ1dGUgYW5kIHRoZSBxdWFsaWZpZWROYW1lIG9mIHRoaXMgbm9kZSBpcyAi
eG1sbnMiIFtOYW1lc3BhY2VzXS4KLSAgICBpZiAoCi0jaWYgMAotICAgICAgICAvLyBGSVhNRTog
QWRkIHRoaXMgY2hlY2sgKGJ1dCBub3QgaW4gYSB3YXkgdGhhdCBkZXBlbmRzIG9uIHRoZSBDKysg
RE9NISkKLSAgICAgICAgRWxlbWVudDo6a2h0bWxNYWxmb3JtZWRQcmVmaXgoX3ByZWZpeCkgfHwK
LSNlbmRpZgotICAgICAgICAobmFtZXNwYWNlUGFydChpZCgpKSA9PSBub05hbWVzcGFjZSAmJiBp
ZCgpID4gSURfTEFTVF9UQUcpIHx8CisgICAgaWYgKChuYW1lc3BhY2VQYXJ0KGlkKCkpID09IG5v
TmFtZXNwYWNlICYmIGlkKCkgPiBJRF9MQVNUX1RBRykgfHwKICAgICAgICAgKF9wcmVmaXggPT0g
InhtbCIgJiYgRE9NU3RyaW5nKGdldERvY3VtZW50KCktPm5hbWVzcGFjZVVSSShpZCgpKSkgIT0g
Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIpKSB7CiAgICAgICAgIGV4Y2Vw
dGlvbmNvZGUgPSBET01FeGNlcHRpb246Ok5BTUVTUEFDRV9FUlI7CiAgICAgICAgIHJldHVybjsK
LSAgICB9CisgICAgfSovCiB9CiAKIHZvaWQgTm9kZUltcGw6OmNoZWNrQWRkQ2hpbGQoTm9kZUlt
cGwgKm5ld0NoaWxkLCBpbnQgJmV4Y2VwdGlvbmNvZGUpCkBAIC0xMjgzLDkgKzEyNjgsMTAgQEAg
UmVuZGVyT2JqZWN0ICogTm9kZUltcGw6Om5leHRSZW5kZXJlcigpCiAgICAgcmV0dXJuIDA7CiB9
CiAKKy8vIEZJWE1FOiBUaGlzIGNvZGUgaXMgdXNlZCBieSBlZGl0aW5nLiAgU2VlbXMgbGlrZSBp
dCBjb3VsZCBtb3ZlIG92ZXIgdGhlcmUgYW5kIG5vdCBwb2xsdXRlIE5vZGVJbXBsLgogYm9vbCBO
b2RlSW1wbDo6aXNBdG9taWNOb2RlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gIWhhc0NoaWxkTm9k
ZXMoKSB8fCAoaWQoKSA9PSBJRF9PQkpFQ1QgJiYgcmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5p
c1JlcGxhY2VkKCkpOworICAgIHJldHVybiAhaGFzQ2hpbGROb2RlcygpIHx8IChyZW5kZXJlcigp
ICYmIHJlbmRlcmVyKCktPmlzV2lkZ2V0KCkpOwogfQogCiBOb2RlSW1wbCAqTm9kZUltcGw6OnBy
ZXZpb3VzTm9kZUNvbnNpZGVyaW5nQXRvbWljTm9kZXMoKSBjb25zdApAQCAtMTQwMiwxMyArMTM4
OCwxNSBAQCBsb25nIE5vZGVJbXBsOjptYXhPZmZzZXQoKSBjb25zdAogICAgIHJldHVybiAxOwog
fQogCisvLyBGSVhNRTogU2hvdWxkbid0IHRoZXNlIGZ1bmN0aW9ucyBiZSBpbiB0aGUgZWRpdGlu
ZyBjb2RlPyAgQ29kZSB0aGF0IGFza3MgcXVlc3Rpb25zIGFib3V0IEhUTUwgaW4gdGhlIGNvcmUg
RE9NIGNsYXNzCisvLyBpcyBvYnZpb3VzbHkgbWlzcGxhY2VkLgogLy8gbWV0aG9kIGZvciBlZGl0
aW5nIG1hZG5lc3MsIHdoaWNoIGFsbG93cyBCUiwxIGFzIGEgcG9zaXRpb24sIHRob3VnaCB0aGF0
IGlzIGluY29ycmVjdAogbG9uZyBOb2RlSW1wbDo6bWF4RGVlcE9mZnNldCgpIGNvbnN0CiB7CiAg
ICAgaWYgKG9mZnNldEluQ2hhcmFjdGVycyhub2RlVHlwZSgpKSkKICAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PGNvbnN0IFRleHRJbXBsKj4odGhpcyktPmxlbmd0aCgpOwogICAgICAgICAKLSAg
ICBpZiAoaWQoKSA9PSBJRF9CUiB8fCAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5pc1JlcGxh
Y2VkKCkpKQorICAgIGlmIChoYXNUYWdOYW1lKEhUTUxOYW1lczo6YnIoKSkgfHwgKHJlbmRlcmVy
KCkgJiYgcmVuZGVyZXIoKS0+aXNSZXBsYWNlZCgpKSkKICAgICAgICAgcmV0dXJuIDE7CiAKICAg
ICByZXR1cm4gY2hpbGROb2RlQ291bnQoKTsKQEAgLTE0NjQsNyArMTQ1Miw3IEBAIEVsZW1lbnRJ
bXBsICpOb2RlSW1wbDo6ZW5jbG9zaW5nQmxvY2tGbG8KICAgICAgICAgbiA9IG4tPnBhcmVudE5v
ZGUoKTsKICAgICAgICAgaWYgKCFuKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGlmIChu
LT5pc0Jsb2NrRmxvd09yVGFibGUoKSB8fCBuLT5pZCgpID09IElEX0JPRFkpCisgICAgICAgIGlm
IChuLT5pc0Jsb2NrRmxvd09yVGFibGUoKSB8fCBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Ym9k
eSgpKSkKICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxFbGVtZW50SW1wbCAqPihuKTsK
ICAgICB9CiAgICAgcmV0dXJuIDA7CkBAIC0xNDgwLDcgKzE0NjgsNyBAQCBFbGVtZW50SW1wbCAq
Tm9kZUltcGw6OmVuY2xvc2luZ0Jsb2NrRmxvCiAgICAgICAgIG4gPSBuLT5wYXJlbnROb2RlKCk7
CiAgICAgICAgIGlmICghbikKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBpZiAobi0+aXNC
bG9ja0Zsb3coKSB8fCBuLT5pZCgpID09IElEX0JPRFkpCisgICAgICAgIGlmIChuLT5pc0Jsb2Nr
RmxvdygpIHx8IG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpib2R5KCkpKQogICAgICAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsICo+KG4pOwogICAgIH0KICAgICByZXR1cm4g
MDsKQEAgLTE0OTMsNyArMTQ4MSw3IEBAIEVsZW1lbnRJbXBsICpOb2RlSW1wbDo6ZW5jbG9zaW5n
SW5saW5lRWwKIAogICAgIHdoaWxlICgxKSB7CiAgICAgICAgIHAgPSBuLT5wYXJlbnROb2RlKCk7
Ci0gICAgICAgIGlmICghcCB8fCBwLT5pc0Jsb2NrRmxvdygpIHx8IHAtPmlkKCkgPT0gSURfQk9E
WSkKKyAgICAgICAgaWYgKCFwIHx8IHAtPmlzQmxvY2tGbG93KCkgfHwgcC0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OmJvZHkoKSkpCiAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RWxlbWVu
dEltcGwgKj4obik7CiAgICAgICAgIC8vIEFsc28gc3RvcCBpZiBhbnkgcHJldmlvdXMgc2libGlu
ZyBpcyBhIGJsb2NrCiAgICAgICAgIGZvciAoTm9kZUltcGwgKnNpYmxpbmcgPSBuLT5wcmV2aW91
c1NpYmxpbmcoKTsgc2libGluZzsgc2libGluZyA9IHNpYmxpbmctPnByZXZpb3VzU2libGluZygp
KSB7CkBAIC0xNTEyLDcgKzE1MDAsNyBAQCBFbGVtZW50SW1wbCAqTm9kZUltcGw6OnJvb3RFZGl0
YWJsZUVsZW1lCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgTm9kZUltcGwgKm4gPSBjb25zdF9j
YXN0PE5vZGVJbXBsICo+KHRoaXMpOwotICAgIGlmIChuLT5pZCgpID09IElEX0JPRFkpCisgICAg
aWYgKG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpib2R5KCkpKQogICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8RWxlbWVudEltcGwgKj4obik7CiAKICAgICBOb2RlSW1wbCAqcmVzdWx0ID0gbi0+
aXNFZGl0YWJsZUJsb2NrKCkgPyBuIDogMDsKQEAgLTE1MjAsNyArMTUwOCw3IEBAIEVsZW1lbnRJ
bXBsICpOb2RlSW1wbDo6cm9vdEVkaXRhYmxlRWxlbWUKICAgICAgICAgbiA9IG4tPnBhcmVudE5v
ZGUoKTsKICAgICAgICAgaWYgKCFuIHx8ICFuLT5pc0NvbnRlbnRFZGl0YWJsZSgpKQogICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGlmIChuLT5pZCgpID09IElEX0JPRFkpIHsKKyAgICAgICAg
aWYgKG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpib2R5KCkpKSB7CiAgICAgICAgICAgICByZXN1
bHQgPSBuOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTE1NDAsNiArMTUyOCw4
IEBAIGJvb2wgTm9kZUltcGw6OmluU2FtZUNvbnRhaW5pbmdCbG9ja0Zsb3cKICAgICByZXR1cm4g
biA/IGVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQoKSA9PSBuLT5lbmNsb3NpbmdCbG9ja0Zsb3dF
bGVtZW50KCkgOiBmYWxzZTsKIH0KIAorLy8gRklYTUU6IEVuZCBvZiBvYnZpb3VzbHkgbWlzcGxh
Y2VkIEhUTUwgZWRpdGluZyBmdW5jdGlvbnMuICBUcnkgdG8gbW92ZSB0aGVzZSBvdXQgb2YgTm9k
ZUltcGwuCisKIHZvaWQgTm9kZUltcGw6OmFkZEV2ZW50TGlzdGVuZXIoY29uc3QgRE9NU3RyaW5n
ICZ0eXBlLCBFdmVudExpc3RlbmVyICpsaXN0ZW5lciwgYm9vbCB1c2VDYXB0dXJlKQogewogICAg
IGFkZEV2ZW50TGlzdGVuZXIoRXZlbnRJbXBsOjp0eXBlVG9JZCh0eXBlKSwgbGlzdGVuZXIsIHVz
ZUNhcHR1cmUpOwpAQCAtMTU1MCw3ICsxNTQwLDcgQEAgdm9pZCBOb2RlSW1wbDo6cmVtb3ZlRXZl
bnRMaXN0ZW5lcihjb25zdAogICAgIHJlbW92ZUV2ZW50TGlzdGVuZXIoRXZlbnRJbXBsOjp0eXBl
VG9JZCh0eXBlKSwgbGlzdGVuZXIsIHVzZUNhcHR1cmUpOwogfQogCi1TaGFyZWRQdHI8Tm9kZUxp
c3RJbXBsPiBOb2RlSW1wbDo6Z2V0RWxlbWVudHNCeVRhZ05hbWVOUyAoIGNvbnN0IERPTVN0cmlu
ZyAmbmFtZXNwYWNlVVJJLCBjb25zdCBET01TdHJpbmcgJmxvY2FsTmFtZSApCitTaGFyZWRQdHI8
Tm9kZUxpc3RJbXBsPiBOb2RlSW1wbDo6Z2V0RWxlbWVudHNCeVRhZ05hbWVOUyhjb25zdCBET01T
dHJpbmcgJm5hbWVzcGFjZVVSSSwgY29uc3QgRE9NU3RyaW5nICZsb2NhbE5hbWUpCiB7CiAgICAg
aWYgKGxvY2FsTmFtZS5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIFNoYXJlZFB0cjxOb2RlTGlz
dEltcGw+KCk7CkBAIC0xNTYyLDExICsxNTUyLDEyIEBAIFNoYXJlZFB0cjxOb2RlTGlzdEltcGw+
IE5vZGVJbXBsOjpnZXRFbGUKICAgICAgICAgaWRNYXNrICY9IH5uYW1lc3BhY2VNYXNrOwogCiAg
ICAgSWQgaWQgPSAwOyAvLyAwIG1lYW5zICJhbGwgaXRlbXMiCisgICAgLyogRklYTUU6IFJlLWlt
cGxlbWVudCB0aGlzIG1ldGhvZAogICAgIGlmICgoaWRNYXNrICYgbG9jYWxOYW1lTWFzaykgfHwg
IW5hbWVzcGFjZVVSSS5pc051bGwoKSkgeyAvLyBub3QgZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioi
KQogICAgICAgICBpZCA9IGdldERvY3VtZW50KCktPnRhZ0lkKG5hbWVzcGFjZVVSSS5pbXBsZW1l
bnRhdGlvbigpLCBsb2NhbE5hbWUuaW1wbGVtZW50YXRpb24oKSwgdHJ1ZSk7CiAgICAgICAgIGlm
ICggIWlkICkgLy8gbm90IGZvdW5kIC0+IHdlIHdhbnQgdG8gcmV0dXJuIGFuIGVtcHR5IGxpc3Qs
IG5vdCAiYWxsIGl0ZW1zIgogICAgICAgICAgICAgaWQgPSAoSWQpLTE7IC8vIEhBQ0suIEhFQUQg
aGFzIGEgY2xlYW5lciBpbXBsZW1lbnRhdGlvbiBvZiBUYWdOb2RlTGlzdEltcGwgaXQgc2VlbXMu
Ci0gICAgfQorICAgIH0qLwogCiAgICAgcmV0dXJuIFNoYXJlZFB0cjxOb2RlTGlzdEltcGw+KG5l
dyBUYWdOb2RlTGlzdEltcGwodGhpcywgaWQsIGlkTWFzaykpOwogfQpAQCAtMTU5MiwxMyArMTU4
Myw2IEBAIE5hbWVkQXR0ck1hcEltcGwgKk5vZGVJbXBsOjphdHRyaWJ1dGVzKCkKICAgICByZXR1
cm4gMDsKIH0KIAotI2lmIEFQUExFX0NIQU5HRVMKLU5vZGVJbXBsOjpJZCBOb2RlSW1wbDo6aWRl
bnRpZmllcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGlkKCk7Ci19Ci0jZW5kaWYKLQogI2lmbmRl
ZiBOREVCVUcKIAogc3RhdGljIHZvaWQgYXBwZW5kQXR0cmlidXRlRGVzYyhjb25zdCBOb2RlSW1w
bCAqbm9kZSwgUVN0cmluZyAmc3RyaW5nLCBOb2RlSW1wbDo6SWQgYXR0cklELCBRU3RyaW5nIGF0
dHJEZXNjKQpAQCAtMTYzOCw3ICsxNjIyLDcgQEAgdm9pZCBOb2RlSW1wbDo6c2hvd1RyZWVBbmRN
YXJrKE5vZGVJbXBsIAogewogICAgIE5vZGVJbXBsICpyb290Tm9kZTsKICAgICBOb2RlSW1wbCAq
bm9kZSA9IChOb2RlSW1wbCAqKXRoaXM7Ci0gICAgd2hpbGUobm9kZS0+cGFyZW50Tm9kZSgpICE9
IE5VTEwgJiYgbm9kZS0+aWQoKSAhPSBJRF9CT0RZKQorICAgIHdoaWxlIChub2RlLT5wYXJlbnRO
b2RlKCkgJiYgIW5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpib2R5KCkpKQogICAgICAgICBu
b2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpOwogICAgIHJvb3ROb2RlID0gbm9kZTsKIAkKQEAgLTI1
NTUsOCArMjUzOSwxMCBAQCBOb2RlSW1wbCAqVGFnTm9kZUxpc3RJbXBsOjppdGVtICggdW5zaWdu
CiAKIGJvb2wgVGFnTm9kZUxpc3RJbXBsOjpub2RlTWF0Y2hlcyggTm9kZUltcGwgKnRlc3ROb2Rl
ICkgY29uc3QKIHsKKyAgICByZXR1cm4gdHJ1ZTsKKyAgICAvKiBGSVhNRTogUmUtaW1wbGVtZW50
IHRoaXMuCiAgICAgcmV0dXJuICggdGVzdE5vZGUtPmlzRWxlbWVudE5vZGUoKSAmJgotICAgICAg
ICAgICAgICh0ZXN0Tm9kZS0+aWQoKSAmIG1faWRNYXNrKSA9PSBtX2lkKTsKKyAgICAgICAgICAg
ICAodGVzdE5vZGUtPmlkKCkgJiBtX2lkTWFzaykgPT0gbV9pZCk7Ki8KIH0KIAogTmFtZU5vZGVM
aXN0SW1wbDo6TmFtZU5vZGVMaXN0SW1wbChOb2RlSW1wbCAqbiwgY29uc3QgRE9NU3RyaW5nICZ0
ICkKSW5kZXg6IGtodG1sL3htbC9kb21fbm9kZWltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC94bWwvZG9tX25vZGVpbXBsLmgsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuODcKZGlmZiAtdSAtcCAtcjEuODcga2h0bWwveG1sL2RvbV9ub2RlaW1wbC5oCi0t
LSBraHRtbC94bWwvZG9tX25vZGVpbXBsLmgJMjMgSnVuIDIwMDUgMTk6NDc6NTAgLTAwMDAJMS44
NworKysga2h0bWwveG1sL2RvbV9ub2RlaW1wbC5oCTI0IEp1biAyMDA1IDAzOjEwOjUzIC0wMDAw
CkBAIC01OSw2ICs1OSw3IEBAIGNsYXNzIEV2ZW50SW1wbDsKIGNsYXNzIEV2ZW50TGlzdGVuZXI7
CiBjbGFzcyBOb2RlTGlzdEltcGw7CiBjbGFzcyBOYW1lZEF0dHJNYXBJbXBsOworY2xhc3MgUXVh
bGlmaWVkTmFtZTsKIGNsYXNzIFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyOwogCiAvLyBUaGUgbmFt
ZXNwYWNlIHVzZWQgZm9yIFhIVE1MIGVsZW1lbnRzCkBAIC0xMDIsNiArMTAzLDcgQEAgcHVibGlj
OgogICAgIE1BSU5fVEhSRUFEX0FMTE9DQVRFRDsKIAogICAgIC8vIERPTSBtZXRob2RzICYgYXR0
cmlidXRlcyBmb3IgTm9kZQorICAgIHZpcnR1YWwgYm9vbCBoYXNUYWdOYW1lKGNvbnN0IFF1YWxp
ZmllZE5hbWUmIHRhZ05hbWUpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBE
T01TdHJpbmcgbm9kZU5hbWUoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBET01TdHJpbmcgbm9k
ZVZhbHVlKCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHNldE5vZGVWYWx1ZSggY29uc3QgRE9N
U3RyaW5nICZfbm9kZVZhbHVlLCBpbnQgJmV4Y2VwdGlvbmNvZGUgKTsKQEAgLTEyMiwxNCArMTI0
LDE0IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlKGludCAmZXhjZXB0aW9uY29k
ZSk7CiAgICAgdmlydHVhbCBib29sIGhhc0NoaWxkTm9kZXMgKCAgKSBjb25zdDsKICAgICB2aXJ0
dWFsIE5vZGVJbXBsICpjbG9uZU5vZGUgKCBib29sIGRlZXAgKSA9IDA7Ci0gICAgdmlydHVhbCBE
T01TdHJpbmcgbG9jYWxOYW1lKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBET01TdHJpbmcgbmFtZXNw
YWNlVVJJKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBET01TdHJpbmcgcHJlZml4KCkgY29uc3Q7Ci0g
ICAgdmlydHVhbCB2b2lkIHNldFByZWZpeChjb25zdCBET01TdHJpbmcgJl9wcmVmaXgsIGludCAm
ZXhjZXB0aW9uY29kZSApOworICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5h
bWUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJ
KCkgY29uc3Q7CisgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCgpIGNvbnN0
OworICAgIHZpcnR1YWwgdm9pZCBzZXRQcmVmaXgoY29uc3QgQXRvbWljU3RyaW5nICZfcHJlZml4
LCBpbnQgJmV4Y2VwdGlvbmNvZGUpOwogICAgIHZvaWQgbm9ybWFsaXplICgpOwogICAgIHN0YXRp
YyBib29sIGlzU3VwcG9ydGVkKGNvbnN0IERPTVN0cmluZyAmZmVhdHVyZSwgY29uc3QgRE9NU3Ry
aW5nICZ2ZXJzaW9uKTsKIAotICAgIE5vZGVJbXBsICpsYXN0RGVzY2VuZGVudCgpIGNvbnN0Owor
ICAgIE5vZGVJbXBsICpsYXN0RGVzY2VuZGFudCgpIGNvbnN0OwogCiAgICAgLy8gT3RoZXIgbWV0
aG9kcyAobm90IHBhcnQgb2YgRE9NKQogICAgIHZpcnR1YWwgYm9vbCBpc0VsZW1lbnROb2RlKCkg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTEzNyw2ICsxMzksNyBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCBib29sIGlzU3R5bGVkRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAg
ICAgdmlydHVhbCBib29sIGlzQXR0cmlidXRlTm9kZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
CiAgICAgdmlydHVhbCBib29sIGlzVGV4dE5vZGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQor
ICAgIHZpcnR1YWwgYm9vbCBpc0NvbW1lbnROb2RlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
ICAgICB2aXJ0dWFsIGJvb2wgaXNEb2N1bWVudE5vZGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQogICAgIHZpcnR1YWwgYm9vbCBpc1hNTEVsZW1lbnROb2RlKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KICAgICBib29sIGlzQmxvY2tGbG93KCkgY29uc3Q7CkBAIC0xOTgsMjUgKzIwMSw4IEBA
IHB1YmxpYzoKICAgICAvLyB1bnRpbCB0aGV5IGtub3cgYWxsIG9mIHRoZWlyIG5lc3RlZCA8cGFy
YW0+cy4gWzM2MDMxOTEsIDQwNDA4NDhdCiAgICAgdmlydHVhbCB2b2lkIGNsb3NlUmVuZGVyZXIo
KSB7IH0KIAotICAgIHR5cGVkZWYgUV9VSU5UMzIgSWQ7Ci0gICAgLy8gaWQoKSBpcyB1c2VkIHRv
IGVhc2lseSBhbmQgZXhhY3RseSBpZGVudGlmeSBhIG5vZGUuIEl0Ci0gICAgLy8gaXMgb3B0aW1p
emVkIGZvciBxdWljayBjb21wYXJpc29uIGFuZCBsb3cgbWVtb3J5IGNvbnN1bXB0aW9uLgotICAg
IC8vIGl0cyB2YWx1ZSBkZXBlbmRzIG9uIHRoZSBvd25lciBkb2N1bWVudCBvZiB0aGUgbm9kZSBh
bmQgaXMKLSAgICAvLyBjYXRlZ29yaXplZCBpbiB0aGUgZm9sbG93aW5nIHdheToKLSAgICAvLyAx
Li5JRF9MQVNUX1RBRzogdGhlIG5vZGUgaW5oZXJpdHMgSFRNTEVsZW1lbnRJbXBsIGFuZCBpcwot
ICAgIC8vICAgICAgICAgICAgICAgICBwYXJ0IG9mIHRoZSBIVE1MIG5hbWVzcGFjZS4KLSAgICAv
LyAgICAgICAgICAgICAgICAgVGhlIEhUTUwgbmFtZXNwYWNlIGlzIGVpdGhlciB0aGUgZ2xvYmFs
Ci0gICAgLy8gICAgICAgICAgICAgICAgIG9uZSAobm8gbmFtZXNwYWNlKSBvciB0aGUgWEhUTUwg
bmFtZXNwYWNlCi0gICAgLy8gICAgICAgICAgICAgICAgIGRlcGVuZGluZyBvbiB0aGUgb3duZXIg
ZG9jdW1lbnQncyBkb2N0eXBlCi0gICAgLy8gSURfTEFTVF9UQUcrMS4uMHhmZmZmOiBub24tSFRN
TCBlbGVtZW50cyBpbiB0aGUgZ2xvYmFsIG5hbWVzcGFjZQotICAgIC8vIG90aGVycyAgICAgICBu
b24tSFRNTCBlbGVtZW50cyBpbiBhIG5hbWVzcGFjZS4KLSAgICAvLyAgICAgICAgICAgICAgICAg
dGhlIHVwcGVyIDE2IGJpdCBpZGVudGlmeSB0aGUgbmFtZXNwYWNlCi0gICAgLy8gICAgICAgICAg
ICAgICAgIHRoZSBsb3dlciAxNiBiaXQgaWRlbnRpZnkgdGhlIGxvY2FsIHBhcnQgb2YgdGhlCi0g
ICAgLy8gICAgICAgICAgICAgICAgIHF1YWxpZmllZCBlbGVtZW50IG5hbWUuCi0gICAgdmlydHVh
bCBJZCBpZCgpIGNvbnN0IHsgcmV0dXJuIDA7IH07Ci0jaWYgQVBQTEVfQ0hBTkdFUwotICAgIElk
IGlkZW50aWZpZXIoKSBjb25zdDsKLSNlbmRpZgorICAgIHR5cGVkZWYgUV9VSU5UMzIgSWQ7IC8v
IEZJWE1FOiBZYW5rIHRoaXMgb25jZSBhdHRyaWJ1dGVzIGFyZSBhbHNvIHN3aXRjaGVkIG92ZXIu
CisKICAgICBlbnVtIE1vdXNlRXZlbnRUeXBlIHsKICAgICAgICAgTW91c2VQcmVzcywKICAgICAg
ICAgTW91c2VSZWxlYXNlLApAQCAtMjc4LDggKzI2NCw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IGJvb2wgaXNLZXlib2FyZEZvY3VzYWJsZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBpc01v
dXNlRm9jdXNhYmxlKCkgY29uc3Q7CiAgICAgCi0gICAgdmlydHVhbCBib29sIGlzSW5saW5lKCkg
Y29uc3Q7Ci0gICAgCiAgICAgdmlydHVhbCBib29sIGlzQ29udGVudEVkaXRhYmxlKCkgY29uc3Q7
CiAgICAgdmlydHVhbCBRUmVjdCBnZXRSZWN0KCkgY29uc3Q7CiAKQEAgLTM2OSw3ICszNTMsNyBA
QCBwdWJsaWM6CiAgICAga2h0bWw6OlJlbmRlck9iamVjdCAqcHJldmlvdXNSZW5kZXJlcigpOwog
ICAgIHZvaWQgc2V0UmVuZGVyZXIoa2h0bWw6OlJlbmRlck9iamVjdCogcmVuZGVyZXIpIHsgbV9y
ZW5kZXIgPSByZW5kZXJlcjsgfQogICAgIAotICAgIHZvaWQgY2hlY2tTZXRQcmVmaXgoY29uc3Qg
RE9NU3RyaW5nICZfcHJlZml4LCBpbnQgJmV4Y2VwdGlvbmNvZGUpOworICAgIHZvaWQgY2hlY2tT
ZXRQcmVmaXgoY29uc3QgQXRvbWljU3RyaW5nICZfcHJlZml4LCBpbnQgJmV4Y2VwdGlvbmNvZGUp
OwogICAgIHZvaWQgY2hlY2tBZGRDaGlsZChOb2RlSW1wbCAqbmV3Q2hpbGQsIGludCAmZXhjZXB0
aW9uY29kZSk7CiAgICAgYm9vbCBpc0FuY2VzdG9yKGNvbnN0IE5vZGVJbXBsICopIGNvbnN0Owog
ICAgIHZpcnR1YWwgYm9vbCBjaGlsZEFsbG93ZWQoIE5vZGVJbXBsICpuZXdDaGlsZCApOwpJbmRl
eDoga2h0bWwveG1sL2RvbV9wb3NpdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L1dlYkNvcmUva2h0bWwveG1sL2RvbV9wb3NpdGlvbi5jcHAsdgpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuNzEKZGlmZiAtdSAtcCAtcjEuNzEga2h0bWwveG1sL2RvbV9wb3NpdGlvbi5jcHAKLS0t
IGtodG1sL3htbC9kb21fcG9zaXRpb24uY3BwCTIxIEp1biAyMDA1IDE4OjExOjEwIC0wMDAwCTEu
NzEKKysrIGtodG1sL3htbC9kb21fcG9zaXRpb24uY3BwCTI0IEp1biAyMDA1IDAzOjEwOjUzIC0w
MDAwCkBAIC0zNSw3ICszNSw2IEBACiAjaW5jbHVkZSAiZG9tMl9yYW5nZWltcGwuaCIKICNpbmNs
dWRlICJkb20yX3ZpZXdzaW1wbC5oIgogI2luY2x1ZGUgImhlbHBlci5oIgotI2luY2x1ZGUgImh0
bWx0YWdzLmgiCiAjaW5jbHVkZSAidGV4dF9hZmZpbml0eS5oIgogI2luY2x1ZGUgInZpc2libGVf
cG9zaXRpb24uaCIKICNpbmNsdWRlICJ2aXNpYmxlX3VuaXRzLmgiCkBAIC00NSw2ICs0NCw3IEBA
CiAjaW5jbHVkZSAicmVuZGVyaW5nL3JlbmRlcl9zdHlsZS5oIgogI2luY2x1ZGUgInJlbmRlcmlu
Zy9yZW5kZXJfdGV4dC5oIgogI2luY2x1ZGUgImVkaXRpbmcvdmlzaWJsZV90ZXh0LmgiCisjaW5j
bHVkZSAiaHRtbG5hbWVzLmgiCiAKICNpZiBBUFBMRV9DSEFOR0VTCiAjaW5jbHVkZSAiS1dRQXNz
ZXJ0aW9ucy5oIgpAQCAtNDQwLDcgKzQ0MCw3IEBAIFBvc2l0aW9uIFBvc2l0aW9uOjpkb3duc3Ry
ZWFtKCkgY29uc3QKIAogICAgICAgICAvLyBzdG9wIGJlZm9yZSBnb2luZyBhYm92ZSB0aGUgYm9k
eSwgdXAgaW50byB0aGUgaGVhZAogICAgICAgICAvLyByZXR1cm4gdGhlIGxhc3QgdmlzaWJsZSBz
dHJlYW1lciBwb3NpdGlvbgotICAgICAgICBpZiAoY3VycmVudE5vZGUtPmlkKCkgPT0gSURfQk9E
WSAmJiBjdXJyZW50T2Zmc2V0ID49IChpbnQpIGN1cnJlbnROb2RlLT5jaGlsZE5vZGVDb3VudCgp
KQorICAgICAgICBpZiAoY3VycmVudE5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpib2R5KCkp
ICYmIGN1cnJlbnRPZmZzZXQgPj0gKGludCkgY3VycmVudE5vZGUtPmNoaWxkTm9kZUNvdW50KCkp
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICAvLyBsaW1pdCB0cmF2
ZXJzYWwgdG8gYmxvY2sgb3IgdGFibGUgZW5jbG9zaW5nIHRoZSBvcmlnaW5hbCBlbGVtZW50CkBA
IC02OTQsNyArNjk0LDcgQEAgYm9vbCBQb3NpdGlvbjo6cmVuZGVyc0luRGlmZmVyZW50UG9zaXRp
bwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgaWYgKG5vZGUoKSA9PSBwb3Mubm9k
ZSgpKSB7Ci0gICAgICAgIGlmIChub2RlKCktPmlkKCkgPT0gSURfQlIpCisgICAgICAgIGlmIChu
b2RlKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpicigpKSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgICAgICBpZiAob2Zmc2V0KCkgPT0gcG9zLm9mZnNldCgpKQpAQCAtNzA2LDEw
ICs3MDYsMTAgQEAgYm9vbCBQb3NpdGlvbjo6cmVuZGVyc0luRGlmZmVyZW50UG9zaXRpbwogICAg
ICAgICB9CiAgICAgfQogICAgIAotICAgIGlmIChub2RlKCktPmlkKCkgPT0gSURfQlIgJiYgcG9z
LmluUmVuZGVyZWRDb250ZW50KCkpCisgICAgaWYgKG5vZGUoKS0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OmJyKCkpICYmIHBvcy5pblJlbmRlcmVkQ29udGVudCgpKQogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgICAgICAgICAKLSAgICBpZiAocG9zLm5vZGUoKS0+aWQoKSA9PSBJRF9CUiAm
JiBpblJlbmRlcmVkQ29udGVudCgpKQorICAgIGlmIChwb3Mubm9kZSgpLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6YnIoKSkgJiYgaW5SZW5kZXJlZENvbnRlbnQoKSkKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgICAgICAgICAgICAgCiAgICAgaWYgKG5vZGUoKS0+ZW5jbG9zaW5nQmxvY2tGbG93
RWxlbWVudCgpICE9IHBvcy5ub2RlKCktPmVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQoKSkKQEAg
LTc2NCw3ICs3NjQsNyBAQCBQb3NpdGlvbiBQb3NpdGlvbjo6bGVhZGluZ1doaXRlc3BhY2VQb3Np
CiAgICAgaWYgKGlzTnVsbCgpKQogICAgICAgICByZXR1cm4gUG9zaXRpb24oKTsKICAgICAKLSAg
ICBpZiAodXBzdHJlYW0oKS5ub2RlKCktPmlkKCkgPT0gSURfQlIpCisgICAgaWYgKHVwc3RyZWFt
KCkubm9kZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YnIoKSkpCiAgICAgICAgIHJldHVybiBQ
b3NpdGlvbigpOwogCiAgICAgUG9zaXRpb24gcHJldiA9IHByZXZpb3VzQ2hhcmFjdGVyUG9zaXRp
b24oYWZmaW5pdHkpOwpAQCAtNzk0LDcgKzc5NCw3IEBAIFBvc2l0aW9uIFBvc2l0aW9uOjp0cmFp
bGluZ1doaXRlc3BhY2VQb3MKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChkb3duc3RyZWFt
KCkubm9kZSgpLT5pZCgpID09IElEX0JSKQorICAgIGlmIChkb3duc3RyZWFtKCkubm9kZSgpLT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6YnIoKSkpCiAgICAgICAgIHJldHVybiBQb3NpdGlvbigpOwog
CiAgICAgUG9zaXRpb24gbmV4dCA9IG5leHRDaGFyYWN0ZXJQb3NpdGlvbihhZmZpbml0eSk7Cklu
ZGV4OiBraHRtbC94bWwvZG9tX3FuYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvV2ViQ29yZS9raHRtbC94bWwvZG9tX3FuYW1lLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS4yCmRpZmYgLXUgLXAgLXIxLjIga2h0bWwveG1sL2RvbV9xbmFtZS5jcHAKLS0tIGtodG1sL3ht
bC9kb21fcW5hbWUuY3BwCTE2IEp1biAyMDA1IDIxOjA2OjQ2IC0wMDAwCTEuMgorKysga2h0bWwv
eG1sL2RvbV9xbmFtZS5jcHAJMjQgSnVuIDIwMDUgMDM6MTA6NTMgLTAwMDAKQEAgLTI3LDYgKzI3
LDcgQEAgbmFtZXNwYWNlIERPTSB7CiBzdGF0aWMgUVB0ckRpY3Q8UVB0ckRpY3Q8UVB0ckRpY3Q8
UXVhbGlmaWVkTmFtZTo6UXVhbGlmaWVkTmFtZUltcGw+ID4gPiogZ05hbWVDYWNoZSA9IDA7CiAK
IFF1YWxpZmllZE5hbWU6OlF1YWxpZmllZE5hbWUoY29uc3QgQXRvbWljU3RyaW5nJiBwLCBjb25z
dCBBdG9taWNTdHJpbmcmIGwsIGNvbnN0IEF0b21pY1N0cmluZyYgbikKKzptX2ltcGwoMCkKIHsK
ICAgICAvLyBPYnRhaW4gYW4gYXBwcm9wcmlhdGUgaW5uZXIgZnJvbSBvdXIgZGljdGlvbmFyeS4K
ICAgICBRUHRyRGljdDxRUHRyRGljdDxRdWFsaWZpZWROYW1lSW1wbD4gPiogbmFtZXNwYWNlRGlj
dCA9IDA7CkBAIC04OCw3ICs4OSw3IEBAIGNvbnN0IFF1YWxpZmllZE5hbWUmIFF1YWxpZmllZE5h
bWU6Om9wZXIKIAogdm9pZCBRdWFsaWZpZWROYW1lOjpkZXJlZigpCiB7Ci0gICAgaWYgKG1faW1w
bC0+cmVmQ291bnQoKSA9PSAxKSB7CisgICAgaWYgKG1faW1wbC0+aGFzT25lUmVmKCkpIHsKICAg
ICAgICAgLy8gQmVmb3JlIGRlY3JlbWVudGluZyB0aGUgcmVmIHRvIDAsIHJlbW92ZSBvdXJzZWx2
ZXMgZnJvbSB0aGUgaGFzaCB0YWJsZS4KICAgICAgICAgUVB0ckRpY3Q8UVB0ckRpY3Q8UXVhbGlm
aWVkTmFtZUltcGw+ID4qIG5hbWVzcGFjZURpY3QgPSAwOwogICAgICAgICBRUHRyRGljdDxRdWFs
aWZpZWROYW1lSW1wbD4qIHByZWZpeERpY3QgPSAwOwpAQCAtMTA1LDYgKzEwNiwxMiBAQCB2b2lk
IFF1YWxpZmllZE5hbWU6OmRlcmVmKCkKICAgICBtX2ltcGwtPmRlcmVmKCk7CiB9CiAKK3ZvaWQg
UXVhbGlmaWVkTmFtZTo6c2V0UHJlZml4KGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4KQorewor
ICAgIFF1YWxpZmllZE5hbWUgb3RoZXIocHJlZml4LCBsb2NhbE5hbWUoKSwgbmFtZXNwYWNlVVJJ
KCkpOworICAgICp0aGlzID0gb3RoZXI7Cit9CisKIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBdG9t
aWNTdHJpbmcmIGEsIGNvbnN0IFF1YWxpZmllZE5hbWUmIHEpCiB7IAogICAgIHJldHVybiBhID09
IHEubG9jYWxOYW1lKCk7CkluZGV4OiBraHRtbC94bWwvZG9tX3FuYW1lLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwveG1sL2RvbV9xbmFtZS5oLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjIKZGlmZiAtdSAtcCAtcjEuMiBraHRtbC94bWwvZG9tX3FuYW1lLmgK
LS0tIGtodG1sL3htbC9kb21fcW5hbWUuaAkxNiBKdW4gMjAwNSAyMTowNjo0NiAtMDAwMAkxLjIK
KysrIGtodG1sL3htbC9kb21fcW5hbWUuaAkyNCBKdW4gMjAwNSAwMzoxMDo1NCAtMDAwMApAQCAt
NTQsNiArNTQsOSBAQCBwdWJsaWM6CiAKICAgICBib29sIG1hdGNoZXMoY29uc3QgUXVhbGlmaWVk
TmFtZSYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1faW1wbCA9PSBvdGhlci5tX2ltcGwgfHwgKGxv
Y2FsTmFtZSgpID09IG90aGVyLmxvY2FsTmFtZSgpICYmIG5hbWVzcGFjZVVSSSgpID09IG90aGVy
Lm5hbWVzcGFjZVVSSSgpKTsgfQogCisgICAgYm9vbCBoYXNQcmVmaXgoKSBjb25zdCB7IHJldHVy
biBtX2ltcGwtPm1fcHJlZml4ICE9IG51bGxBdG9tOyB9CisgICAgdm9pZCBzZXRQcmVmaXgoY29u
c3QgQXRvbWljU3RyaW5nJiBwcmVmaXgpOworCiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBwcmVm
aXgoKSBjb25zdCB7IHJldHVybiBtX2ltcGwtPm1fcHJlZml4OyB9CiAgICAgY29uc3QgQXRvbWlj
U3RyaW5nJiBsb2NhbE5hbWUoKSBjb25zdCB7IHJldHVybiBtX2ltcGwtPm1fbG9jYWxOYW1lOyB9
CiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkkoKSBjb25zdCB7IHJldHVybiBt
X2ltcGwtPm1fbmFtZXNwYWNlOyB9CkluZGV4OiBraHRtbC94bWwvZG9tX3RleHRpbXBsLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC94bWwvZG9tX3RleHRp
bXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yMwpkaWZmIC11IC1wIC1yMS4yMyBraHRt
bC94bWwvZG9tX3RleHRpbXBsLmNwcAotLS0ga2h0bWwveG1sL2RvbV90ZXh0aW1wbC5jcHAJMTkg
T2N0IDIwMDQgMjM6MDQ6MjkgLTAwMDAJMS4yMworKysga2h0bWwveG1sL2RvbV90ZXh0aW1wbC5j
cHAJMjQgSnVuIDIwMDUgMDM6MTA6NTQgLTAwMDAKQEAgLTMxOSwxMSArMzE5LDYgQEAgTm9kZUlt
cGwgKkNvbW1lbnRJbXBsOjpjbG9uZU5vZGUoYm9vbCAvKgogICAgIHJldHVybiBnZXREb2N1bWVu
dCgpLT5jcmVhdGVDb21tZW50KCBzdHIgKTsKIH0KIAotTm9kZUltcGw6OklkIENvbW1lbnRJbXBs
OjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0NPTU1FTlQ7Ci19Ci0KIC8vIERPTSBTZWN0
aW9uIDEuMS4xCiBib29sIENvbW1lbnRJbXBsOjpjaGlsZFR5cGVBbGxvd2VkKCB1bnNpZ25lZCBz
aG9ydCAvKnR5cGUqLyApCiB7CkBAIC00NjIsMTEgKzQ1Nyw2IEBAIHZvaWQgVGV4dEltcGw6OmF0
dGFjaCgpCiAgICAgQ2hhcmFjdGVyRGF0YUltcGw6OmF0dGFjaCgpOwogfQogCi1Ob2RlSW1wbDo6
SWQgVGV4dEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfVEVYVDsKLX0KLQogdm9p
ZCBUZXh0SW1wbDo6cmVjYWxjU3R5bGUoIFN0eWxlQ2hhbmdlIGNoYW5nZSApCiB7CiAvLyAgICAg
IHFEZWJ1ZygidGV4dEltcGw6OnJlY2FsY1N0eWxlIik7CkluZGV4OiBraHRtbC94bWwvZG9tX3Rl
eHRpbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwveG1s
L2RvbV90ZXh0aW1wbC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE2CmRpZmYgLXUgLXAgLXIx
LjE2IGtodG1sL3htbC9kb21fdGV4dGltcGwuaAotLS0ga2h0bWwveG1sL2RvbV90ZXh0aW1wbC5o
CTEwIE1heSAyMDA1IDIxOjU5OjE1IC0wMDAwCTEuMTYKKysrIGtodG1sL3htbC9kb21fdGV4dGlt
cGwuaAkyNCBKdW4gMjAwNSAwMzoxMDo1NCAtMDAwMApAQCAtMTAwLDggKzEwMCw3IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIE5vZGVJbXBsICpjbG9uZU5vZGUoYm9vbCBkZWVwKTsKIAogICAgIC8v
IE90aGVyIG1ldGhvZHMgKG5vdCBwYXJ0IG9mIERPTSkKLQotICAgIHZpcnR1YWwgSWQgaWQoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNDb21tZW50Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIHRy
dWU7IH0KICAgICB2aXJ0dWFsIGJvb2wgY2hpbGRUeXBlQWxsb3dlZCggdW5zaWduZWQgc2hvcnQg
dHlwZSApOwogCiAgICAgdmlydHVhbCBET01TdHJpbmcgdG9TdHJpbmcoKSBjb25zdDsKQEAgLTEy
OCw3ICsxMjcsNiBAQCBwdWJsaWM6CiAgICAgLy8gT3RoZXIgbWV0aG9kcyAobm90IHBhcnQgb2Yg
RE9NKQogCiAgICAgdmlydHVhbCBib29sIGlzVGV4dE5vZGUoKSBjb25zdCB7IHJldHVybiB0cnVl
OyB9Ci0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBhdHRhY2go
KTsKICAgICB2aXJ0dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRlZChraHRtbDo6UmVuZGVyU3R5bGUg
Kik7CiAgICAgdmlydHVhbCBraHRtbDo6UmVuZGVyT2JqZWN0ICpjcmVhdGVSZW5kZXJlcihSZW5k
ZXJBcmVuYSAqLCBraHRtbDo6UmVuZGVyU3R5bGUgKik7CkluZGV4OiBraHRtbC94bWwveG1sX25h
bWVzcGFjZV90YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZToga2h0bWwveG1sL3htbF9uYW1l
c3BhY2VfdGFibGUuY3BwCmRpZmYgLU4ga2h0bWwveG1sL3htbF9uYW1lc3BhY2VfdGFibGUuY3Bw
Ci0tLSBraHRtbC94bWwveG1sX25hbWVzcGFjZV90YWJsZS5jcHAJMjYgSmFuIDIwMDQgMjI6MzM6
MTkgLTAwMDAJMS4xCisrKyAvZGV2L251bGwJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMApAQCAt
MSw3OSArMCwwIEBACi0vKioKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1wbGVt
ZW50YXRpb24gZm9yIEtERS4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQgQXBwbGUgQ29tcHV0
ZXIsIEluYy4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1w
bGUgUGxhY2UgLSBTdWl0ZSAzMzAsCi0gKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KLSAq
LwotCi0jaW5jbHVkZSAieG1sX25hbWVzcGFjZV90YWJsZS5oIgotI2luY2x1ZGUgImRvbV9ub2Rl
aW1wbC5oIgotCi1uYW1lc3BhY2UgRE9NCi17Ci0KLVFEaWN0PFhtbE5hbWVzcGFjZUVudHJ5Piog
WG1sTmFtZXNwYWNlVGFibGU6OmdOYW1lc3BhY2VUYWJsZSA9IDA7Ci0KLWludCBYbWxOYW1lc3Bh
Y2VUYWJsZTo6Z2V0TmFtZXNwYWNlSUQoY29uc3QgRE9NU3RyaW5nJiB1cmksIGJvb2wgcmVhZG9u
bHkpCi17Ci0gICAgaWYgKHVyaSA9PSBYSFRNTF9OQU1FU1BBQ0UpCi0gICAgICAgIHJldHVybiB4
aHRtbE5hbWVzcGFjZTsKLSAgICAKLSAgICBpZiAodXJpLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuIG5vTmFtZXNwYWNlOwotICAgIAotICAgIFFTdHJpbmcgdXJpU3RyID0gdXJpLnN0cmluZygp
OwotCi0gICAgaWYgKCFnTmFtZXNwYWNlVGFibGUpIHsKLSAgICAgICAgZ05hbWVzcGFjZVRhYmxl
ID0gbmV3IFFEaWN0PFhtbE5hbWVzcGFjZUVudHJ5PjsKLSAgICAgICAgZ05hbWVzcGFjZVRhYmxl
LT5pbnNlcnQoWEhUTUxfTkFNRVNQQUNFLCBuZXcgWG1sTmFtZXNwYWNlRW50cnkoeGh0bWxOYW1l
c3BhY2UsIFhIVE1MX05BTUVTUEFDRSkpOwotICAgIH0KLSAgICAKLSAgICBYbWxOYW1lc3BhY2VF
bnRyeSogbnMgPSBnTmFtZXNwYWNlVGFibGUtPmZpbmQodXJpU3RyKTsKLSAgICBpZiAobnMpIHJl
dHVybiBucy0+bV9pZDsKLSAgICAKLSAgICBpZiAoIXJlYWRvbmx5KSB7Ci0gICAgICAgIHN0YXRp
YyBpbnQgaWQgPSB4aHRtbE5hbWVzcGFjZSsxOwotICAgICAgICBucyA9IG5ldyBYbWxOYW1lc3Bh
Y2VFbnRyeShpZCsrLCB1cmkpOwotICAgICAgICBnTmFtZXNwYWNlVGFibGUtPmluc2VydCh1cmlT
dHIsIG5zKTsKLSAgICAgICAgcmV0dXJuIG5zLT5tX2lkOwotICAgIH0KLSAgICAKLSAgICByZXR1
cm4gLTE7Ci19Ci0KLURPTVN0cmluZyBYbWxOYW1lc3BhY2VUYWJsZTo6Z2V0TmFtZXNwYWNlVVJJ
KGludCBpZCkKLXsKLSAgICBpZiAoaWQgPT0gbm9OYW1lc3BhY2UgfHwgaWQgPT0gYW55TmFtZXNw
YWNlIHx8ICFnTmFtZXNwYWNlVGFibGUpCi0gICAgICAgIHJldHVybiAiIjsKLQotICAgIGlmICgh
Z05hbWVzcGFjZVRhYmxlKSB7Ci0gICAgICAgIGdOYW1lc3BhY2VUYWJsZSA9IG5ldyBRRGljdDxY
bWxOYW1lc3BhY2VFbnRyeT47Ci0gICAgICAgIGdOYW1lc3BhY2VUYWJsZS0+aW5zZXJ0KFhIVE1M
X05BTUVTUEFDRSwgbmV3IFhtbE5hbWVzcGFjZUVudHJ5KHhodG1sTmFtZXNwYWNlLCBYSFRNTF9O
QU1FU1BBQ0UpKTsKLSAgICB9Ci0gICAgCi0gICAgLy8gSGF2ZSB0byBpdGVyYXRlIG92ZXIgdGhl
IGRpY3Rpb25hcnkgZW50cmllcyBsb29raW5nIGZvciBhIG1hdGNoLgotICAgIC8vIChUaGlzIHNo
b3VsZCBiZSBvaywgc2luY2UgdGhpcyBpcyBub3QgdGhlIGNvbW1vbiBkaXJlY3Rpb24uKQotICAg
IFFEaWN0SXRlcmF0b3I8WG1sTmFtZXNwYWNlRW50cnk+IGl0KCpnTmFtZXNwYWNlVGFibGUpOwot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpdC5jb3VudCgpOyBpKyssICsraXQpIHsKLSAg
ICAgICAgaWYgKGl0LmN1cnJlbnQoKS0+bV9pZCA9PSBpZCkKLSAgICAgICAgICAgIHJldHVybiBp
dC5jdXJyZW50KCktPm1fdXJpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gIiI7Ci19Ci0KLX0K
SW5kZXg6IGtodG1sL3htbC94bWxfbmFtZXNwYWNlX3RhYmxlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZToga2h0bWwveG1sL3htbF9uYW1lc3BhY2VfdGFibGUuaApkaWZmIC1OIGtodG1sL3htbC94bWxf
bmFtZXNwYWNlX3RhYmxlLmgKLS0tIGtodG1sL3htbC94bWxfbmFtZXNwYWNlX3RhYmxlLmgJMjYg
SmFuIDIwMDQgMjI6MzM6MTkgLTAwMDAJMS4xCisrKyAvZGV2L251bGwJMSBKYW4gMTk3MCAwMDow
MDowMCAtMDAwMApAQCAtMSw0NiArMCwwIEBACi0vKioKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9m
IHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDQgQXBwbGUgQ29tcHV0ZXIsIEluYy4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCi0gKiBCb3N0b24sIE1BIDAyMTEx
LTEzMDcsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8cWRpY3QuaD4KLSNpbmNsdWRlICJkb20vZG9t
X3N0cmluZy5oIgotCi1uYW1lc3BhY2UgRE9NCi17ICAgIAotc3RydWN0IFhtbE5hbWVzcGFjZUVu
dHJ5OwotCi1jbGFzcyBYbWxOYW1lc3BhY2VUYWJsZQotewotcHVibGljOgotICAgIHN0YXRpYyBp
bnQgZ2V0TmFtZXNwYWNlSUQoY29uc3QgRE9NU3RyaW5nJiB1cmksIGJvb2wgcmVhZG9ubHkgPSB0
cnVlKTsKLSAgICBzdGF0aWMgRE9NU3RyaW5nIGdldE5hbWVzcGFjZVVSSShpbnQgaWQpOwotICAg
IAotICAgIHN0YXRpYyBRRGljdDxYbWxOYW1lc3BhY2VFbnRyeT4qIGdOYW1lc3BhY2VUYWJsZTsK
LX07Ci0KLXN0cnVjdCBYbWxOYW1lc3BhY2VFbnRyeQotewotICAgIFhtbE5hbWVzcGFjZUVudHJ5
KGludCBpZCwgY29uc3QgRE9NU3RyaW5nJiB1cmkpIDptX2lkKGlkKSwgbV91cmkodXJpKSB7fQot
ICAgIAotICAgIGludCBtX2lkOwotICAgIERPTVN0cmluZyBtX3VyaTsKLX07Ci0KLX0KSW5kZXg6
IGtodG1sL3htbC94bWxfdG9rZW5pemVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvV2ViQ29yZS9raHRtbC94bWwveG1sX3Rva2VuaXplci5jcHAsdgpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuMzEKZGlmZiAtdSAtcCAtcjEuMzEga2h0bWwveG1sL3htbF90b2tlbml6ZXIuY3BwCi0t
LSBraHRtbC94bWwveG1sX3Rva2VuaXplci5jcHAJNCBNYXkgMjAwNSAyMToxMToyMyAtMDAwMAkx
LjMxCisrKyBraHRtbC94bWwveG1sX3Rva2VuaXplci5jcHAJMjQgSnVuIDIwMDUgMDM6MTA6NTUg
LTAwMDAKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlICJ4bWwvZG9tX3htbGltcGwuaCIKICNp
bmNsdWRlICJodG1sL2h0bWxfaGVhZGltcGwuaCIKICNpbmNsdWRlICJodG1sL2h0bWxfdGFibGVp
bXBsLmgiCi0jaW5jbHVkZSAibWlzYy9odG1sdGFncy5oIgorI2luY2x1ZGUgImh0bWxuYW1lcy5o
IgogI2luY2x1ZGUgIm1pc2MvaHRtbGF0dHJzLmgiCiAjaW5jbHVkZSAibWlzYy9sb2FkZXIuaCIK
IApAQCAtNDQsNiArNDQsNyBAQCB1c2luZyBET006OkRvY3VtZW50SW1wbDsKIHVzaW5nIERPTTo6
RG9jdW1lbnRQdHI7CiB1c2luZyBET006OkRPTVN0cmluZzsKIHVzaW5nIERPTTo6RWxlbWVudElt
cGw7Cit1c2luZyBET006OkhUTUxOYW1lczsKIHVzaW5nIERPTTo6SFRNTFNjcmlwdEVsZW1lbnRJ
bXBsOwogdXNpbmcgRE9NOjpIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGw7CiB1c2luZyBET006
Ok5vZGU7CkBAIC0zMjIsMTggKzMyMywxOCBAQCB2b2lkIFhNTFRva2VuaXplcjo6c3RhcnRFbGVt
ZW50KGNvbnN0IHhtCiAgICAgLy8gRklYTUU6IFRoaXMgaGFjayBlbnN1cmVzIGltcGxpY2l0IHRh
YmxlIGJvZGllcyBnZXQgY29uc3RydWN0ZWQgaW4gWEhUTUwgYW5kIFhNTCBmaWxlcy4KICAgICAv
LyBXZSB3YW50IHRvIGNvbnNvbGlkYXRlIHRoaXMgd2l0aCB0aGUgSFRNTCBwYXJzZXIgYW5kIEhU
TUwgRE9NIGNvZGUgYXQgc29tZSBwb2ludC4KICAgICAvLyBGb3Igbm93LCBpdCdzIHRvbyByaXNr
eSB0byByaXAgdGhhdCBjb2RlIHVwLgotICAgIGlmIChtX2N1cnJlbnROb2RlLT5pZCgpID09IElE
X1RBQkxFICYmCi0gICAgICAgIG5ld0VsZW1lbnQtPmlkKCkgPT0gSURfVFIgJiYKKyAgICBpZiAo
bV9jdXJyZW50Tm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRhYmxlKCkpICYmCisgICAgICAg
IG5ld0VsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0cigpKSAmJgogICAgICAgICBtX2N1
cnJlbnROb2RlLT5pc0hUTUxFbGVtZW50KCkgJiYgbmV3RWxlbWVudC0+aXNIVE1MRWxlbWVudCgp
KSB7CiAgICAgICAgIE5vZGVJbXBsKiBpbXBsaWNpdFRCb2R5ID0KLSAgICAgICAgICAgbmV3IEhU
TUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbCggbV9kb2MsIElEX1RCT0RZLCB0cnVlIC8qIGltcGxp
Y2l0ICovICk7CisgICAgICAgICAgIG5ldyBIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGwoSFRN
TE5hbWVzOjp0Ym9keSgpLCBtX2RvYywgdHJ1ZSAvKiBpbXBsaWNpdCAqLyk7CiAgICAgICAgIG1f
Y3VycmVudE5vZGUtPmFkZENoaWxkKGltcGxpY2l0VEJvZHkpOwogICAgICAgICBpZiAobV92aWV3
ICYmICFpbXBsaWNpdFRCb2R5LT5hdHRhY2hlZCgpKQogICAgICAgICAgICAgaW1wbGljaXRUQm9k
eS0+YXR0YWNoKCk7CiAgICAgICAgIG1fY3VycmVudE5vZGUgPSBpbXBsaWNpdFRCb2R5OwogICAg
IH0KIAotICAgIGlmIChuZXdFbGVtZW50LT5pZCgpID09IElEX1NDUklQVCkKKyAgICBpZiAobmV3
RWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnNjcmlwdCgpKSkKICAgICAgICAgc3RhdGlj
X2Nhc3Q8SFRNTFNjcmlwdEVsZW1lbnRJbXBsICo+KG5ld0VsZW1lbnQpLT5zZXRDcmVhdGVkQnlQ
YXJzZXIodHJ1ZSk7CiAKICAgICBpZiAobV9jdXJyZW50Tm9kZS0+YWRkQ2hpbGQobmV3RWxlbWVu
dCkpIHsKQEAgLTY1MCw3ICs2NTEsNyBAQCB2b2lkIFhNTFRva2VuaXplcjo6YWRkU2NyaXB0cyhO
b2RlSW1wbCAqCiAgICAgLy8gUmVjdXJzaXZlbHkgZ28gdGhyb3VnaCB0aGUgZW50aXJlIGRvY3Vt
ZW50IHRyZWUsIGxvb2tpbmcgZm9yIGh0bWwgPHNjcmlwdD4gdGFncy4gRm9yIGVhY2ggb2YgdGhl
c2UKICAgICAvLyB0aGF0IGlzIGZvdW5kLCBhZGQgaXQgdG8gdGhlIG1fc2NyaXB0cyBsaXN0IGZy
b20gd2hpY2ggdGhleSB3aWxsIGJlIGV4ZWN1dGVkCiAKLSAgICBpZiAobi0+aWQoKSA9PSBJRF9T
Q1JJUFQpIHsKKyAgICBpZiAobi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnNjcmlwdCgpKSkgewog
ICAgICAgICBtX3NjcmlwdHMuYXBwZW5kKHN0YXRpY19jYXN0PEhUTUxTY3JpcHRFbGVtZW50SW1w
bCo+KG4pKTsKICAgICB9CiAKSW5kZXg6IGt3cS9ET00ubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
L2N2cy9yb290L1dlYkNvcmUva3dxL0RPTS5tbSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zNgpk
aWZmIC11IC1wIC1yMS4zNiBrd3EvRE9NLm1tCi0tLSBrd3EvRE9NLm1tCTE5IE1heSAyMDA1IDE4
OjMyOjI3IC0wMDAwCTEuMzYKKysrIGt3cS9ET00ubW0JMjQgSnVuIDIwMDUgMDM6MTA6NTcgLTAw
MDAKQEAgLTQ0LDcgKzQ0LDYgQEAKICNpbXBvcnQgImRvbV90ZXh0aW1wbC5oIgogI2ltcG9ydCAi
ZG9tX3htbGltcGwuaCIKICNpbXBvcnQgImh0bWxfZWxlbWVudGltcGwuaCIKLSNpbXBvcnQgImh0
bWx0YWdzLmgiCiAKICNpbXBvcnQgImtodG1sX3BhcnQuaCIKIApAQCAtNzIsNiArNzEsNyBAQCB1
c2luZyBET006OkVsZW1lbnRJbXBsOwogdXNpbmcgRE9NOjpFbnRpdHlJbXBsOwogdXNpbmcgRE9N
OjpGaWx0ZXJOb2RlOwogdXNpbmcgRE9NOjpIVE1MRWxlbWVudEltcGw7Cit1c2luZyBET006OkhU
TUxOYW1lczsKIHVzaW5nIERPTTo6TmFtZWROb2RlTWFwSW1wbDsKIHVzaW5nIERPTTo6Tm9kZTsK
IHVzaW5nIERPTTo6Tm9kZUZpbHRlcjsKQEAgLTMzOCw3ICszMzgsOCBAQCB1c2luZyBraHRtbDo6
U2hhcmVkUHRyOwogICAgIEFTU0VSVChwcmVmaXgpOwogCiAgICAgaW50IGV4Y2VwdGlvbkNvZGUg
PSAwOwotICAgIFtzZWxmIF9ub2RlSW1wbF0tPnNldFByZWZpeChwcmVmaXgsIGV4Y2VwdGlvbkNv
ZGUpOworICAgIERPTVN0cmluZyBwcmVmaXhTdHIocHJlZml4KTsKKyAgICBbc2VsZiBfbm9kZUlt
cGxdLT5zZXRQcmVmaXgocHJlZml4U3RyLmltcGxlbWVudGF0aW9uKCksIGV4Y2VwdGlvbkNvZGUp
OwogICAgIHJhaXNlT25ET01FcnJvcihleGNlcHRpb25Db2RlKTsKIH0KIApAQCAtMzk5LDE1NCAr
NDAwLDEyMyBAQCB1c2luZyBraHRtbDo6U2hhcmVkUHRyOwogICAgIHN3aXRjaCAoaW1wbC0+bm9k
ZVR5cGUoKSkgewogICAgICAgICBjYXNlIE5vZGU6OkVMRU1FTlRfTk9ERToKICAgICAgICAgICAg
IGlmIChpbXBsLT5pc0hUTUxFbGVtZW50KCkpIHsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTog
VGhlcmUgYXJlIG5vIGlkZW50aWZpZXJzIGZvciBIVE1MSGVhZGluZ0VsZW1lbnQsIEhUTUxNb2RF
bGVtZW50LCAKLSAgICAgICAgICAgICAgICAvLyBIVE1MVGFibGVDYXB0aW9uRWxlbWVudCwgSFRN
TFRhYmxlQ29sRWxlbWVudCwgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQuCi0gICAgICAgICAgICAg
ICAgLy8gRmluZCBvdGhlciB3YXlzIHRvIGlkZW50aWZ5IHRoZW0uCi0gICAgICAgICAgICAgICAg
c3dpdGNoIChpbXBsLT5pZGVudGlmaWVyKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJ
RF9IVE1MOgotICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxI
dG1sRWxlbWVudCBjbGFzc107Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICAgICAgY2FzZSBJRF9IRUFEOgotICAgICAgICAgICAgICAgICAgICAgICAgd3Jh
cHBlckNsYXNzID0gW0RPTUhUTUxIZWFkRWxlbWVudCBjbGFzc107Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9MSU5LOgotICAgICAg
ICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxMaW5rRWxlbWVudCBjbGFz
c107Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAg
Y2FzZSBJRF9USVRMRToKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtE
T01IVE1MVGl0bGVFbGVtZW50IGNsYXNzXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX01FVEE6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTE1ldGFFbGVtZW50IGNsYXNzXTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0JBU0U6
Ci0gICAgICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTEJhc2VFbGVt
ZW50IGNsYXNzXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgICAgICBjYXNlIElEX0lTSU5ERVg6Ci0gICAgICAgICAgICAgICAgICAgICAgICB3cmFwcGVy
Q2xhc3MgPSBbRE9NSFRNTElzSW5kZXhFbGVtZW50IGNsYXNzXTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX1NUWUxFOgotICAgICAg
ICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxTdHlsZUVsZW1lbnQgY2xh
c3NdOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAg
IGNhc2UgSURfQk9EWToKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtE
T01IVE1MQm9keUVsZW1lbnQgY2xhc3NdOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfRk9STToKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MRm9ybUVsZW1lbnQgY2xhc3NdOwotICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfU0VMRUNU
OgotICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxTZWxlY3RF
bGVtZW50IGNsYXNzXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgICAgICBjYXNlIElEX09QVEdST1VQOgotICAgICAgICAgICAgICAgICAgICAgICAgd3Jh
cHBlckNsYXNzID0gW0RPTUhUTUxPcHRHcm91cEVsZW1lbnQgY2xhc3NdOwotICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfT1BUSU9OOgot
ICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxPcHRpb25FbGVt
ZW50IGNsYXNzXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgICAgICBjYXNlIElEX0lOUFVUOgotICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNs
YXNzID0gW0RPTUhUTUxJbnB1dEVsZW1lbnQgY2xhc3NdOwotICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfVEVYVEFSRUE6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTFRleHRBcmVhRWxlbWVudCBj
bGFzc107Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAg
ICAgY2FzZSBJRF9CVVRUT046Ci0gICAgICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3Mg
PSBbRE9NSFRNTEJ1dHRvbkVsZW1lbnQgY2xhc3NdOwotICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfTEFCRUw6Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTExhYmVsRWxlbWVudCBjbGFzc107Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsgIAotICAgICAgICAgICAgICAgICAgICBjYXNl
IElEX0ZJRUxEU0VUOgotICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RP
TUhUTUxGaWVsZFNldEVsZW1lbnQgY2xhc3NdOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7ICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfTEVHRU5EOgotICAgICAgICAg
ICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxMZWdlbmRFbGVtZW50IGNsYXNz
XTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBj
YXNlIElEX1VMOgotICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhU
TUxVTGlzdEVsZW1lbnQgY2xhc3NdOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgICAgIGNhc2UgSURfT0w6Ci0gICAgICAgICAgICAgICAgICAgICAgICB3
cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTE9MaXN0RWxlbWVudCBjbGFzc107Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9ETDoKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MRExpc3RFbGVtZW50IGNs
YXNzXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
ICBjYXNlIElEX0RJUjoKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtE
T01IVE1MRGlyZWN0b3J5RWxlbWVudCBjbGFzc107Ci0gICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9NRU5VOgotICAgICAgICAgICAgICAg
ICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxNZW51RWxlbWVudCBjbGFzc107Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9M
SToKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MTElFbGVt
ZW50IGNsYXNzXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgICAgICBjYXNlIElEX0RJVjoKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFz
cyA9IFtET01IVE1MRGl2RWxlbWVudCBjbGFzc107Ci0gICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9QOgotICAgICAgICAgICAgICAgICAg
ICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxQYXJhZ3JhcGhFbGVtZW50IGNsYXNzXTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIElE
X1E6Ci0gICAgICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTFF1b3Rl
RWxlbWVudCBjbGFzc107Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICAgICAgY2FzZSBJRF9QUkU6Ci0gICAgICAgICAgICAgICAgICAgICAgICB3cmFwcGVy
Q2xhc3MgPSBbRE9NSFRNTFByZUVsZW1lbnQgY2xhc3NdOwotICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfQlI6Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTEJSRWxlbWVudCBjbGFzc107Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9C
QVNFRk9OVDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1M
Rm9udEVsZW1lbnQgY2xhc3NdOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgICAgIGNhc2UgSURfRk9OVDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHdy
YXBwZXJDbGFzcyA9IFtET01IVE1MRm9udEVsZW1lbnQgY2xhc3NdOwotICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfSFI6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTEhSRWxlbWVudCBjbGFzc107
Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBJRF9BOgotICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxB
bmNob3JFbGVtZW50IGNsYXNzXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICBjYXNlIElEX0lNRzoKLSAgICAgICAgICAgICAgICAgICAgICAgIHdy
YXBwZXJDbGFzcyA9IFtET01IVE1MSW1hZ2VFbGVtZW50IGNsYXNzXTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX09CSkVDVDoKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MT2JqZWN0RWxlbWVu
dCBjbGFzc107Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICAgICAgY2FzZSBJRF9QQVJBTToKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFz
cyA9IFtET01IVE1MUGFyYW1FbGVtZW50IGNsYXNzXTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0FQUExFVDoKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MQXBwbGV0RWxlbWVudCBjbGFzc107
Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBJRF9NQVA6Ci0gICAgICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRN
TE1hcEVsZW1lbnQgY2xhc3NdOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgICAgIGNhc2UgSURfQVJFQToKLSAgICAgICAgICAgICAgICAgICAgICAgIHdy
YXBwZXJDbGFzcyA9IFtET01IVE1MQXJlYUVsZW1lbnQgY2xhc3NdOwotICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfU0NSSVBUOgotICAg
ICAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxTY3JpcHRFbGVtZW50
IGNsYXNzXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
ICAgICBjYXNlIElEX1RBQkxFOgotICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNz
ID0gW0RPTUhUTUxUYWJsZUVsZW1lbnQgY2xhc3NdOwotICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfVEQ6Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQgY2xhc3NdOwot
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2Ug
SURfVFI6Ci0gICAgICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTFRh
YmxlUm93RWxlbWVudCBjbGFzc107Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICAgICAgY2FzZSBJRF9GUkFNRVNFVDoKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MRnJhbWVTZXRFbGVtZW50IGNsYXNzXTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0ZS
QU1FOgotICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxGcmFt
ZUVsZW1lbnQgY2xhc3NdOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgICAgIGNhc2UgSURfSUZSQU1FOgotICAgICAgICAgICAgICAgICAgICAgICAgd3Jh
cHBlckNsYXNzID0gW0RPTUhUTUxJRnJhbWVFbGVtZW50IGNsYXNzXTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxFbGVtZW50IGNsYXNzXTsKLSAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFJlZmxlY3QgbWFycXVl
ZSBvbmNlIHRoZSBBUEkgaGFzIGJlZW4gZGV0ZXJtaW5lZC4KKyAgICAgICAgICAgICAgICAvLyBG
SVhNRTogV2UgY291bGQgbWFrZSB0aGUgSFRNTCBjbGFzc2VzIGhhbmQgYmFjayB0aGVpciBjbGFz
cyBuYW1lcyBhbmQgdGhlbiB1c2UgdGhhdCB0byBtYWtlCisgICAgICAgICAgICAgICAgLy8gdGhl
IGFwcHJvcHJpYXRlIE9iai1DIGNsYXNzIGZyb20gdGhlIHN0cmluZy4KKyAgICAgICAgICAgICAg
ICBIVE1MRWxlbWVudEltcGwqIGh0bWxFbHQgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwq
PihpbXBsKTsKKyAgICAgICAgICAgICAgICBpZiAoaHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxO
YW1lczo6aHRtbCgpKSkKKyAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhU
TUxIdG1sRWxlbWVudCBjbGFzc107CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaHRtbEVsdC0+
aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6aGVhZCgpKSkKKyAgICAgICAgICAgICAgICAgICAgd3Jh
cHBlckNsYXNzID0gW0RPTUhUTUxIZWFkRWxlbWVudCBjbGFzc107CisgICAgICAgICAgICAgICAg
ZWxzZSBpZiAoaHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6bGluaygpKSkKKyAgICAg
ICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxMaW5rRWxlbWVudCBjbGFzc107
CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1l
czo6dGl0bGUoKSkpCisgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1M
VGl0bGVFbGVtZW50IGNsYXNzXTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChodG1sRWx0LT5o
YXNMb2NhbE5hbWUoSFRNTE5hbWVzOjptZXRhKCkpKQorICAgICAgICAgICAgICAgICAgICB3cmFw
cGVyQ2xhc3MgPSBbRE9NSFRNTE1ldGFFbGVtZW50IGNsYXNzXTsKKyAgICAgICAgICAgICAgICBl
bHNlIGlmIChodG1sRWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpiYXNlKCkpKQorICAgICAg
ICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTEJhc2VFbGVtZW50IGNsYXNzXTsK
KyAgICAgICAgICAgICAgICBlbHNlIGlmIChodG1sRWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVz
Ojppc2luZGV4KCkpKQorICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRN
TElzSW5kZXhFbGVtZW50IGNsYXNzXTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChodG1sRWx0
LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpzdHlsZSgpKSkKKyAgICAgICAgICAgICAgICAgICAg
d3JhcHBlckNsYXNzID0gW0RPTUhUTUxTdHlsZUVsZW1lbnQgY2xhc3NdOworICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKGh0bWxFbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmJvZHkoKSkpCisg
ICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MQm9keUVsZW1lbnQgY2xh
c3NdOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGh0bWxFbHQtPmhhc0xvY2FsTmFtZShIVE1M
TmFtZXM6OmZvcm0oKSkpCisgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01I
VE1MRm9ybUVsZW1lbnQgY2xhc3NdOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGh0bWxFbHQt
Pmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnNlbGVjdCgpKSkKKyAgICAgICAgICAgICAgICAgICAg
d3JhcHBlckNsYXNzID0gW0RPTUhUTUxTZWxlY3RFbGVtZW50IGNsYXNzXTsKKyAgICAgICAgICAg
ICAgICBlbHNlIGlmIChodG1sRWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvcHRncm91cCgp
KSkKKyAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxPcHRHcm91cEVs
ZW1lbnQgY2xhc3NdOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGh0bWxFbHQtPmhhc0xvY2Fs
TmFtZShIVE1MTmFtZXM6Om9wdGlvbigpKSkKKyAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNs
YXNzID0gW0RPTUhUTUxPcHRpb25FbGVtZW50IGNsYXNzXTsKKyAgICAgICAgICAgICAgICBlbHNl
IGlmIChodG1sRWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjppbnB1dCgpKSkKKyAgICAgICAg
ICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxJbnB1dEVsZW1lbnQgY2xhc3NdOwor
ICAgICAgICAgICAgICAgIGVsc2UgaWYgKGh0bWxFbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6
OnRleHRhcmVhKCkpKQorICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRN
TFRleHRBcmVhRWxlbWVudCBjbGFzc107CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaHRtbEVs
dC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6YnV0dG9uKCkpKQorICAgICAgICAgICAgICAgICAg
ICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTEJ1dHRvbkVsZW1lbnQgY2xhc3NdOworICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKGh0bWxFbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmxhYmVsKCkp
KQorICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTExhYmVsRWxlbWVu
dCBjbGFzc107CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaHRtbEVsdC0+aGFzTG9jYWxOYW1l
KEhUTUxOYW1lczo6ZmllbGRzZXQoKSkpCisgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFz
cyA9IFtET01IVE1MRmllbGRTZXRFbGVtZW50IGNsYXNzXTsKKyAgICAgICAgICAgICAgICBlbHNl
IGlmIChodG1sRWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpsZWdlbmQoKSkpCisgICAgICAg
ICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MTGVnZW5kRWxlbWVudCBjbGFzc107
CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1l
czo6dWwoKSkpCisgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MVUxp
c3RFbGVtZW50IGNsYXNzXTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChodG1sRWx0LT5oYXNM
b2NhbE5hbWUoSFRNTE5hbWVzOjpvbCgpKSkgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTE9MaXN0RWxlbWVudCBjbGFzc107
CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1l
czo6ZGwoKSkpCisgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MRExp
c3RFbGVtZW50IGNsYXNzXTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChodG1sRWx0LT5oYXNM
b2NhbE5hbWUoSFRNTE5hbWVzOjpkaXIoKSkpCisgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJD
bGFzcyA9IFtET01IVE1MRGlyZWN0b3J5RWxlbWVudCBjbGFzc107CisgICAgICAgICAgICAgICAg
ZWxzZSBpZiAoaHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6bWVudSgpKSkKKyAgICAg
ICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxNZW51RWxlbWVudCBjbGFzc107
CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1l
czo6bGkoKSkpCisgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MTElF
bGVtZW50IGNsYXNzXTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChodG1sRWx0LT5oYXNMb2Nh
bE5hbWUoSFRNTE5hbWVzOjpkaXYoKSkpCisgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFz
cyA9IFtET01IVE1MRGl2RWxlbWVudCBjbGFzc107CisgICAgICAgICAgICAgICAgZWxzZSBpZiAo
aHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6cCgpKSkKKyAgICAgICAgICAgICAgICAg
ICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxQYXJhZ3JhcGhFbGVtZW50IGNsYXNzXTsKKyAgICAg
ICAgICAgICAgICBlbHNlIGlmIChodG1sRWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpoMSgp
KSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWxFbHQtPmhhc0xvY2FsTmFtZShIVE1M
TmFtZXM6OmgyKCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbEVsdC0+aGFzTG9j
YWxOYW1lKEhUTUxOYW1lczo6aDMoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICBodG1s
RWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpoNCgpKSB8fAorICAgICAgICAgICAgICAgICAg
ICAgICAgIGh0bWxFbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Omg1KCkpIHx8CisgICAgICAg
ICAgICAgICAgICAgICAgICAgaHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6aDYoKSkp
CisgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MSGVhZGluZ0VsZW1l
bnQgY2xhc3NdOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGh0bWxFbHQtPmhhc0xvY2FsTmFt
ZShIVE1MTmFtZXM6OnEoKSkpCisgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtE
T01IVE1MUXVvdGVFbGVtZW50IGNsYXNzXTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChodG1s
RWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpwcmUoKSkpCisgICAgICAgICAgICAgICAgICAg
IHdyYXBwZXJDbGFzcyA9IFtET01IVE1MUHJlRWxlbWVudCBjbGFzc107CisgICAgICAgICAgICAg
ICAgZWxzZSBpZiAoaHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6YnIoKSkpCisgICAg
ICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MQlJFbGVtZW50IGNsYXNzXTsK
KyAgICAgICAgICAgICAgICBlbHNlIGlmIChodG1sRWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVz
OjpiYXNlZm9udCgpKSkKKyAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhU
TUxCYXNlRm9udEVsZW1lbnQgY2xhc3NdOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGh0bWxF
bHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmZvbnQoKSkpCisgICAgICAgICAgICAgICAgICAg
IHdyYXBwZXJDbGFzcyA9IFtET01IVE1MRm9udEVsZW1lbnQgY2xhc3NdOworICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKGh0bWxFbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmhyKCkpKQorICAg
ICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTEhSRWxlbWVudCBjbGFzc107
CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1l
czo6YSgpKSkKKyAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxBbmNo
b3JFbGVtZW50IGNsYXNzXTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChodG1sRWx0LT5oYXNM
b2NhbE5hbWUoSFRNTE5hbWVzOjppbWcoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICBo
dG1sRWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpjYW52YXMoKSkpCisgICAgICAgICAgICAg
ICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MSW1hZ2VFbGVtZW50IGNsYXNzXTsKKyAgICAg
ICAgICAgICAgICBlbHNlIGlmIChodG1sRWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvYmpl
Y3QoKSkpCisgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MT2JqZWN0
RWxlbWVudCBjbGFzc107CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaHRtbEVsdC0+aGFzTG9j
YWxOYW1lKEhUTUxOYW1lczo6cGFyYW0oKSkpCisgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJD
bGFzcyA9IFtET01IVE1MUGFyYW1FbGVtZW50IGNsYXNzXTsKKyAgICAgICAgICAgICAgICBlbHNl
IGlmIChodG1sRWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjphcHBsZXQoKSkpCisgICAgICAg
ICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MQXBwbGV0RWxlbWVudCBjbGFzc107
CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1l
czo6bWFwKCkpKQorICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTE1h
cEVsZW1lbnQgY2xhc3NdOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGh0bWxFbHQtPmhhc0xv
Y2FsTmFtZShIVE1MTmFtZXM6OmFyZWEoKSkpCisgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJD
bGFzcyA9IFtET01IVE1MQXJlYUVsZW1lbnQgY2xhc3NdOworICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKGh0bWxFbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnNjcmlwdCgpKSkKKyAgICAgICAg
ICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxTY3JpcHRFbGVtZW50IGNsYXNzXTsK
KyAgICAgICAgICAgICAgICBlbHNlIGlmIChodG1sRWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVz
Ojp0YWJsZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxU
YWJsZUVsZW1lbnQgY2xhc3NdOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGh0bWxFbHQtPmhh
c0xvY2FsTmFtZShIVE1MTmFtZXM6OnRoZWFkKCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAg
ICAgaHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dGJvZHkoKSkgfHwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICBodG1sRWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0Zm9vdCgp
KSkKKyAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxUYWJsZVNlY3Rp
b25FbGVtZW50IGNsYXNzXTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChodG1sRWx0LT5oYXNM
b2NhbE5hbWUoSFRNTE5hbWVzOjp0ZCgpKSkKKyAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNs
YXNzID0gW0RPTUhUTUxUYWJsZUNlbGxFbGVtZW50IGNsYXNzXTsKKyAgICAgICAgICAgICAgICBl
bHNlIGlmIChodG1sRWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0cigpKSkKKyAgICAgICAg
ICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxUYWJsZVJvd0VsZW1lbnQgY2xhc3Nd
OworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGh0bWxFbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFt
ZXM6OmNvbCgpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWxFbHQtPmhhc0xvY2Fs
TmFtZShIVE1MTmFtZXM6OmNvbGdyb3VwKCkpKQorICAgICAgICAgICAgICAgICAgICB3cmFwcGVy
Q2xhc3MgPSBbRE9NSFRNTFRhYmxlQ29sRWxlbWVudCBjbGFzc107CisgICAgICAgICAgICAgICAg
ZWxzZSBpZiAoaHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6Y2FwdGlvbigpKSkKKyAg
ICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxUYWJsZUNhcHRpb25FbGVt
ZW50IGNsYXNzXTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChodG1sRWx0LT5oYXNMb2NhbE5h
bWUoSFRNTE5hbWVzOjpmcmFtZXNldCgpKSkKKyAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNs
YXNzID0gW0RPTUhUTUxGcmFtZVNldEVsZW1lbnQgY2xhc3NdOworICAgICAgICAgICAgICAgIGVs
c2UgaWYgKGh0bWxFbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmZyYW1lKCkpKQorICAgICAg
ICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTEZyYW1lRWxlbWVudCBjbGFzc107
CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1l
czo6aWZyYW1lKCkpKQorICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRN
TElGcmFtZUVsZW1lbnQgY2xhc3NdOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxFbGVtZW50IGNsYXNzXTsKICAgICAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUVsZW1lbnQg
Y2xhc3NdOwogICAgICAgICAgICAgfQpAQCAtMTI2OCw3ICsxMjM4LDcgQEAgdXNpbmcga2h0bWw6
OlNoYXJlZFB0cjsKIAogLSAoTlNTdHJpbmcgKil0YWdOYW1lCiB7Ci0gICAgcmV0dXJuIFtzZWxm
IF9lbGVtZW50SW1wbF0tPnRhZ05hbWUoKTsKKyAgICByZXR1cm4gW3NlbGYgX2VsZW1lbnRJbXBs
XS0+bm9kZU5hbWUoKTsKIH0KIAogLSAoRE9NTmFtZWROb2RlTWFwICopYXR0cmlidXRlcwpJbmRl
eDoga3dxL0RPTUhUTUwubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUv
a3dxL0RPTUhUTUwubW0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTgKZGlmZiAtdSAtcCAtcjEu
MTgga3dxL0RPTUhUTUwubW0KLS0tIGt3cS9ET01IVE1MLm1tCTEzIE1heSAyMDA1IDE2OjQ4OjUx
IC0wMDAwCTEuMTgKKysrIGt3cS9ET01IVE1MLm1tCTI0IEp1biAyMDA1IDAzOjEwOjU5IC0wMDAw
CkBAIC03NCw3ICs3NCw2IEBAIHVzaW5nIERPTTo6SFRNTEZvcm1Db2xsZWN0aW9uSW1wbDsKIHVz
aW5nIERPTTo6SFRNTEZvcm1FbGVtZW50SW1wbDsKIHVzaW5nIERPTTo6SFRNTEZyYW1lRWxlbWVu
dEltcGw7CiB1c2luZyBET006OkhUTUxGcmFtZVNldEVsZW1lbnRJbXBsOwotdXNpbmcgRE9NOjpI
VE1MR2VuZXJpY0VsZW1lbnRJbXBsOwogdXNpbmcgRE9NOjpIVE1MR2VuZXJpY0Zvcm1FbGVtZW50
SW1wbDsKIHVzaW5nIERPTTo6SFRNTEhlYWRFbGVtZW50SW1wbDsKIHVzaW5nIERPTTo6SFRNTEhl
YWRpbmdFbGVtZW50SW1wbDsKQEAgLTE5MDUsOSArMTkwNCw5IEBAIHVzaW5nIERPTTo6Tm9kZUlt
cGw7CiAKIEBpbXBsZW1lbnRhdGlvbiBET01IVE1MUXVvdGVFbGVtZW50CiAKLS0gKEhUTUxHZW5l
cmljRWxlbWVudEltcGwgKilfcXVvdGVFbGVtZW50SW1wbAorLSAoSFRNTEVsZW1lbnRJbXBsICop
X3F1b3RlRWxlbWVudEltcGwKIHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTEdlbmVyaWNF
bGVtZW50SW1wbCAqPihET01fY2FzdDxOb2RlSW1wbCAqPihfaW50ZXJuYWwpKTsKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KERPTV9jYXN0PE5vZGVJbXBsICo+KF9p
bnRlcm5hbCkpOwogfQogCiAtIChOU1N0cmluZyAqKWNpdGUKSW5kZXg6IGt3cS9LV1FBY2NPYmpl
Y3QubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva3dxL0tXUUFjY09i
amVjdC5tbSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS42OApkaWZmIC11IC1wIC1yMS42OCBrd3Ev
S1dRQWNjT2JqZWN0Lm1tCi0tLSBrd3EvS1dRQWNjT2JqZWN0Lm1tCTUgSnVuIDIwMDUgMDc6MDY6
NTIgLTAwMDAJMS42OAorKysga3dxL0tXUUFjY09iamVjdC5tbQkyNCBKdW4gMjAwNSAwMzoxMTow
MSAtMDAwMApAQCAtNDgsNyArNDgsNiBAQAogI2ltcG9ydCAiZG9tMl9ldmVudHNpbXBsLmgiCiAj
aW1wb3J0ICJkb20yX3JhbmdlLmgiCiAjaW1wb3J0ICJodG1sYXR0cnMuaCIKLSNpbXBvcnQgImh0
bWx0YWdzLmgiCiAjaW1wb3J0ICJraHRtbHZpZXcuaCIKICNpbXBvcnQgImtodG1sX3BhcnQuaCIK
ICNpbXBvcnQgInJlbmRlcl9jYW52YXMuaCIKQEAgLTc3LDYgKzc2LDcgQEAgdXNpbmcgRE9NOjpI
VE1MQ29sbGVjdGlvbkltcGw7CiB1c2luZyBET006OkhUTUxFbGVtZW50SW1wbDsKIHVzaW5nIERP
TTo6SFRNTElucHV0RWxlbWVudEltcGw7CiB1c2luZyBET006OkhUTUxNYXBFbGVtZW50SW1wbDsK
K3VzaW5nIERPTTo6SFRNTE5hbWVzOwogdXNpbmcgRE9NOjpOb2RlOwogdXNpbmcgRE9NOjpOb2Rl
SW1wbDsKIHVzaW5nIERPTTo6UG9zaXRpb247CkBAIC0zNjYsNyArMzY2LDcgQEAgdXNpbmcga2h0
bWw6OlZpc2libGVQb3NpdGlvbjsKICAgICB9CiAgICAgaWYgKG1fcmVuZGVyZXItPmlzTGlzdE1h
cmtlcigpKQogICAgICAgICByZXR1cm4gQCJBWExpc3RNYXJrZXIiOwotICAgIGlmIChtX3JlbmRl
cmVyLT5lbGVtZW50KCkgJiYgbV9yZW5kZXJlci0+ZWxlbWVudCgpLT5pZGVudGlmaWVyKCkgPT0g
SURfQlVUVE9OKQorICAgIGlmIChtX3JlbmRlcmVyLT5lbGVtZW50KCkgJiYgbV9yZW5kZXJlci0+
ZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YnV0dG9uKCkpKQogICAgICAgICByZXR1
cm4gTlNBY2Nlc3NpYmlsaXR5QnV0dG9uUm9sZTsKICAgICBpZiAobV9yZW5kZXJlci0+aXNUZXh0
KCkpCiAgICAgICAgIHJldHVybiBOU0FjY2Vzc2liaWxpdHlTdGF0aWNUZXh0Um9sZTsKQEAgLTUz
Miw3ICs1MzIsNyBAQCB1c2luZyBraHRtbDo6VmlzaWJsZVBvc2l0aW9uOwogICAgIGlmICghbV9y
ZW5kZXJlciB8fCBtX2FyZWFFbGVtZW50IHx8ICFtX3JlbmRlcmVyLT5lbGVtZW50KCkpCiAgICAg
ICAgIHJldHVybiBuaWw7CiAgICAgCi0gICAgaWYgKG1fcmVuZGVyZXItPmVsZW1lbnQoKS0+aXNI
VE1MRWxlbWVudCgpICYmIG1fcmVuZGVyZXItPmVsZW1lbnQoKS0+aWRlbnRpZmllcigpID09IElE
X0JVVFRPTikKKyAgICBpZiAobV9yZW5kZXJlci0+ZWxlbWVudCgpLT5pc0hUTUxFbGVtZW50KCkg
JiYgbV9yZW5kZXJlci0+ZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YnV0dG9uKCkp
KQogICAgICAgICByZXR1cm4gW3NlbGYgdGV4dFVuZGVyRWxlbWVudF07CiAgICAgaWYgKG1fcmVu
ZGVyZXItPmVsZW1lbnQoKS0+aXNMaW5rKCkpCiAgICAgICAgIHJldHVybiBbc2VsZiB0ZXh0VW5k
ZXJFbGVtZW50XTsKQEAgLTYyMiw3ICs2MjIsNyBAQCBzdGF0aWMgUVJlY3QgYm91bmRpbmdCb3hS
ZWN0KFJlbmRlck9iamVjCiAgICAgcmV0dXJuICghbV9yZW5kZXJlci0+aXNMaXN0TWFya2VyKCkg
JiYgIW1fcmVuZGVyZXItPmlzQ2FudmFzKCkgJiYgCiAgICAgICAgICAgICAhbV9yZW5kZXJlci0+
aXNJbWFnZSgpICYmCiAgICAgICAgICAgICAhKG1fcmVuZGVyZXItPmVsZW1lbnQoKSAmJiBtX3Jl
bmRlcmVyLT5lbGVtZW50KCktPmlzSFRNTEVsZW1lbnQoKSAmJgotICAgICAgICAgICAgICBtX3Jl
bmRlcmVyLT5lbGVtZW50KCktPmlkZW50aWZpZXIoKSA9PSBJRF9CVVRUT04pKTsKKyAgICAgICAg
ICAgICAgbV9yZW5kZXJlci0+ZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YnV0dG9u
KCkpKSk7CiB9CiAKIC0gKE5TQXJyYXkgKilhY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXMKSW5k
ZXg6IGt3cS9LV1FET01Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiBrd3EvS1dRRE9NTm9k
ZS5jcHAKZGlmZiAtTiBrd3EvS1dRRE9NTm9kZS5jcHAKLS0tIGt3cS9LV1FET01Ob2RlLmNwcAkx
MSBKdWwgMjAwMyAxNjoyNDozNyAtMDAwMAkxLjkKKysrIC9kZXYvbnVsbAkxIEphbiAxOTcwIDAw
OjAwOjAwIC0wMDAwCkBAIC0xLDM0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMg
QXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1
ZGUgIktXUURPTU5vZGUuaCIKLQotdXNpbmcgRE9NOjpOb2RlSW1wbDsKLQotLy8gVGhpcyBuZWVk
cyB0byBiZSBpbiBhIEMrKyBzb3VyY2UgZmlsZSBiZWNhdXNlIGlkIGlzIGEgcmVzZXJ2ZWQgd29y
ZCBpbiBPYmplY3RpdmUtQysrLgotTm9kZUltcGw6OklkIGlkRnJvbU5vZGUoTm9kZUltcGwgKm5v
ZGUpCi17Ci0gICAgcmV0dXJuIG5vZGUtPmlkKCk7Ci19CkluZGV4OiBrd3EvS1dRRE9NTm9kZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IGt3cS9LV1FET01Ob2RlLmgKZGlmZiAtTiBrd3EvS1dRRE9N
Tm9kZS5oCi0tLSBrd3EvS1dRRE9NTm9kZS5oCTExIEp1bCAyMDAzIDE2OjI0OjM3IC0wMDAwCTEu
NQorKysgL2Rldi9udWxsCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKQEAgLTEsMjggKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMyBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiZG9tX25vZGVpbXBsLmgiCi0KLURPTTo6
Tm9kZUltcGw6OklkIGlkRnJvbU5vZGUoRE9NOjpOb2RlSW1wbCAqKTsKSW5kZXg6IGt3cS9LV1FL
SFRNTFBhcnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9L
V1FLSFRNTFBhcnQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjkKZGlmZiAtdSAtcCAtcjEu
OSBrd3EvS1dRS0hUTUxQYXJ0LmNwcAotLS0ga3dxL0tXUUtIVE1MUGFydC5jcHAJMjcgTWFyIDIw
MDMgMDE6NTc6NDcgLTAwMDAJMS45CisrKyBrd3EvS1dRS0hUTUxQYXJ0LmNwcAkyNCBKdW4gMjAw
NSAwMzoxMTowMSAtMDAwMApAQCAtMzIsMTMgKzMyLDE1IEBACiAKIHVzaW5nIERPTTo6RG9jdW1l
bnRJbXBsOwogdXNpbmcgRE9NOjpIVE1MRG9jdW1lbnRJbXBsOwordXNpbmcgRE9NOjpIVE1MTmFt
ZXM7CiB1c2luZyBET006Ok5vZGVJbXBsOwogCisvLyBGSVhNRTogV2hhdCBvbiBlYXJ0aCBpcyB0
aGlzIHNpbmdsZSB0aW55IGZpbGUgd2l0aCBvbmx5IHRoaXMgbWV0aG9kIGRvaW5nIGhlcmU/CiBi
b29sIEtXUUtIVE1MUGFydDo6aXNGcmFtZVNldCgpIGNvbnN0CiB7CiAgICAgRG9jdW1lbnRJbXBs
ICpkb2N1bWVudCA9IGQtPm1fZG9jOwogICAgIGlmICghZG9jdW1lbnQgfHwgIWRvY3VtZW50LT5p
c0hUTUxEb2N1bWVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgTm9kZUltcGwgKmJv
ZHkgPSBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnRJbXBsICo+KGRvY3VtZW50KS0+Ym9keSgpOwot
ICAgIHJldHVybiBib2R5ICYmIGJvZHktPnJlbmRlcmVyKCkgJiYgYm9keS0+aWQoKSA9PSBJRF9G
UkFNRVNFVDsKKyAgICByZXR1cm4gYm9keSAmJiBib2R5LT5yZW5kZXJlcigpICYmIGJvZHktPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjpmcmFtZXNldCgpKTsKIH0KSW5kZXg6IGt3cS9LV1FLSFRNTFBh
cnQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva3dxL0tXUUtIVE1M
UGFydC5tbSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS42NDMKZGlmZiAtdSAtcCAtcjEuNjQzIGt3
cS9LV1FLSFRNTFBhcnQubW0KLS0tIGt3cS9LV1FLSFRNTFBhcnQubW0JMjYgTWF5IDIwMDUgMjA6
MzA6MTIgLTAwMDAJMS42NDMKKysrIGt3cS9LV1FLSFRNTFBhcnQubW0JMjQgSnVuIDIwMDUgMDM6
MTE6MDUgLTAwMDAKQEAgLTI4LDcgKzI4LDYgQEAKICNpbXBvcnQgIkRPTUludGVybmFsLmgiCiAK
ICNpbXBvcnQgIktXUUNsaXBib2FyZC5oIgotI2ltcG9ydCAiS1dRRE9NTm9kZS5oIgogI2ltcG9y
dCAiS1dRRHVtbXlWaWV3LmgiCiAjaW1wb3J0ICJLV1FFZGl0Q29tbWFuZC5oIgogI2ltcG9ydCAi
S1dRRXhjZXB0aW9ucy5oIgpAQCAtMTAwLDYgKzk5LDcgQEAgdXNpbmcgRE9NOjpIVE1MRWxlbWVu
dEltcGw7CiB1c2luZyBET006OkhUTUxGb3JtRWxlbWVudEltcGw7CiB1c2luZyBET006OkhUTUxG
cmFtZUVsZW1lbnRJbXBsOwogdXNpbmcgRE9NOjpIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbDsK
K3VzaW5nIERPTTo6SFRNTE5hbWVzOwogdXNpbmcgRE9NOjpIVE1MVGFibGVDZWxsRWxlbWVudElt
cGw7CiB1c2luZyBET006Ok5vZGU7CiB1c2luZyBET006Ok5vZGVJbXBsOwpAQCAtMzYxLDEzICsz
NjEsMTIgQEAgc3RhdGljIEhUTUxGb3JtRWxlbWVudEltcGwgKnNjYW5Gb3JGb3JtKAogewogICAg
IE5vZGVJbXBsICpuOwogICAgIGZvciAobiA9IHN0YXJ0OyBuOyBuID0gbi0+dHJhdmVyc2VOZXh0
Tm9kZSgpKSB7Ci0gICAgICAgIE5vZGVJbXBsOjpJZCBub2RlSUQgPSBpZEZyb21Ob2RlKG4pOwot
ICAgICAgICBpZiAobm9kZUlEID09IElEX0ZPUk0pIHsKKyAgICAgICAgaWYgKG4tPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjpmb3JtKCkpKSB7CiAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
SFRNTEZvcm1FbGVtZW50SW1wbCAqPihuKTsKICAgICAgICAgfSBlbHNlIGlmIChuLT5pc0hUTUxF
bGVtZW50KCkKICAgICAgICAgICAgICAgICAgICAmJiBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudElt
cGwgKj4obiktPmlzR2VuZXJpY0Zvcm1FbGVtZW50KCkpIHsKICAgICAgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbCAqPihuKS0+Zm9ybSgpOwotICAg
ICAgICB9IGVsc2UgaWYgKG5vZGVJRCA9PSBJRF9GUkFNRSB8fCBub2RlSUQgPT0gSURfSUZSQU1F
KSB7CisgICAgICAgIH0gZWxzZSBpZiAobi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZyYW1lKCkp
IHx8IG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppZnJhbWUoKSkpIHsKICAgICAgICAgICAgIE5v
ZGVJbXBsICpjaGlsZERvYyA9IHN0YXRpY19jYXN0PEhUTUxGcmFtZUVsZW1lbnRJbXBsICo+KG4p
LT5jb250ZW50RG9jdW1lbnQoKTsKICAgICAgICAgICAgIEhUTUxGb3JtRWxlbWVudEltcGwgKmZy
YW1lUmVzdWx0ID0gc2NhbkZvckZvcm0oY2hpbGREb2MpOwogICAgICAgICAgICAgaWYgKGZyYW1l
UmVzdWx0KSB7CkBAIC0zOTAsNyArMzg5LDcgQEAgSFRNTEZvcm1FbGVtZW50SW1wbCAqS1dRS0hU
TUxQYXJ0OjpjdXJyZQogICAgIC8vIHRyeSB3YWxraW5nIHVwIHRoZSBub2RlIHRyZWUgdG8gZmlu
ZCBhIGZvcm0gZWxlbWVudAogICAgIE5vZGVJbXBsICpuOwogICAgIGZvciAobiA9IHN0YXJ0OyBu
OyBuID0gbi0+cGFyZW50Tm9kZSgpKSB7Ci0gICAgICAgIGlmIChpZEZyb21Ob2RlKG4pID09IElE
X0ZPUk0pIHsKKyAgICAgICAgaWYgKG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpmb3JtKCkpKSB7
CiAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50SW1wbCAqPihu
KTsKICAgICAgICAgfSBlbHNlIGlmIChuLT5pc0hUTUxFbGVtZW50KCkKICAgICAgICAgICAgICAg
ICAgICAmJiBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwgKj4obiktPmlzR2VuZXJpY0Zvcm1F
bGVtZW50KCkpIHsKQEAgLTQ4OSw4ICs0ODgsNyBAQCBOU1N0cmluZyAqS1dRS0hUTUxQYXJ0Ojpz
ZWFyY2hGb3JMYWJlbHNBCiAgICAgICAgIGlmIChhYm92ZUNlbGwpIHsKICAgICAgICAgICAgIC8v
IHNlYXJjaCB3aXRoaW4gdGhlIGFib3ZlIGNlbGwgd2UgZm91bmQgZm9yIGEgbWF0Y2gKICAgICAg
ICAgICAgIGZvciAoTm9kZUltcGwgKm4gPSBhYm92ZUNlbGwtPmZpcnN0Q2hpbGQoKTsgbjsgbiA9
IG4tPnRyYXZlcnNlTmV4dE5vZGUoYWJvdmVDZWxsKSkgewotICAgICAgICAgICAgICAgIGlmIChp
ZEZyb21Ob2RlKG4pID09IElEX1RFWFQKLSAgICAgICAgICAgICAgICAgICAgJiYgbi0+cmVuZGVy
ZXIoKSAmJiBuLT5yZW5kZXJlcigpLT5zdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0gVklTSUJMRSkK
KyAgICAgICAgICAgICAgICBpZiAobi0+aXNUZXh0Tm9kZSgpICYmIG4tPnJlbmRlcmVyKCkgJiYg
bi0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUpCiAgICAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAvLyBGb3IgZWFjaCB0ZXh0IGNodW5rLCBy
dW4gdGhlIHJlZ2V4cAogICAgICAgICAgICAgICAgICAgICBRU3RyaW5nIG5vZGVTdHJpbmcgPSBu
LT5ub2RlVmFsdWUoKS5zdHJpbmcoKTsKQEAgLTUyNSwyMyArNTIzLDIxIEBAIE5TU3RyaW5nICpL
V1FLSFRNTFBhcnQ6OnNlYXJjaEZvckxhYmVsc0IKICAgICAgICAgIG4gJiYgbGVuZ3RoU2VhcmNo
ZWQgPCBjaGFyc1NlYXJjaGVkVGhyZXNob2xkOwogICAgICAgICAgbiA9IG4tPnRyYXZlcnNlUHJl
dmlvdXNOb2RlKCkpCiAgICAgewotICAgICAgICBOb2RlSW1wbDo6SWQgbm9kZUlEID0gaWRGcm9t
Tm9kZShuKTsKLSAgICAgICAgaWYgKG5vZGVJRCA9PSBJRF9GT1JNCisgICAgICAgIGlmIChuLT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6Zm9ybSgpKQogICAgICAgICAgICAgfHwgKG4tPmlzSFRNTEVs
ZW1lbnQoKQogICAgICAgICAgICAgICAgICYmIHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCAq
PihuKS0+aXNHZW5lcmljRm9ybUVsZW1lbnQoKSkpCiAgICAgICAgIHsKICAgICAgICAgICAgIC8v
IFdlIGhpdCBhbm90aGVyIGZvcm0gZWxlbWVudCBvciB0aGUgc3RhcnQgb2YgdGhlIGZvcm0gLSBi
YWlsIG91dAogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0gZWxzZSBpZiAobm9kZUlEID09
IElEX1REICYmICFzdGFydGluZ1RhYmxlQ2VsbCkgeworICAgICAgICB9IGVsc2UgaWYgKG4tPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjp0ZCgpKSAmJiAhc3RhcnRpbmdUYWJsZUNlbGwpIHsKICAgICAg
ICAgICAgIHN0YXJ0aW5nVGFibGVDZWxsID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ2VsbEVsZW1l
bnRJbXBsICo+KG4pOwotICAgICAgICB9IGVsc2UgaWYgKG5vZGVJRCA9PSBJRF9UUiAmJiBzdGFy
dGluZ1RhYmxlQ2VsbCkgeworICAgICAgICB9IGVsc2UgaWYgKG4tPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjp0cigpKSAmJiBzdGFydGluZ1RhYmxlQ2VsbCkgewogICAgICAgICAgICAgTlNTdHJpbmcg
KnJlc3VsdCA9IHNlYXJjaEZvckxhYmVsc0Fib3ZlQ2VsbChyZWdFeHAsIHN0YXJ0aW5nVGFibGVD
ZWxsKTsKICAgICAgICAgICAgIGlmIChyZXN1bHQpIHsKICAgICAgICAgICAgICAgICByZXR1cm4g
cmVzdWx0OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgc2VhcmNoZWRDZWxsQWJvdmUgPSB0
cnVlOwotICAgICAgICB9IGVsc2UgaWYgKG5vZGVJRCA9PSBJRF9URVhUCi0gICAgICAgICAgICAg
ICAgICAgJiYgbi0+cmVuZGVyZXIoKSAmJiBuLT5yZW5kZXJlcigpLT5zdHlsZSgpLT52aXNpYmls
aXR5KCkgPT0gVklTSUJMRSkKKyAgICAgICAgfSBlbHNlIGlmIChuLT5pc1RleHROb2RlKCkgJiYg
bi0+cmVuZGVyZXIoKSAmJiBuLT5yZW5kZXJlcigpLT5zdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0g
VklTSUJMRSkKICAgICAgICAgewogICAgICAgICAgICAgLy8gRm9yIGVhY2ggdGV4dCBjaHVuaywg
cnVuIHRoZSByZWdleHAKICAgICAgICAgICAgIFFTdHJpbmcgbm9kZVN0cmluZyA9IG4tPm5vZGVW
YWx1ZSgpLnN0cmluZygpOwpAQCAtMjg0OCwxNCArMjg0NCwxMCBAQCBOU0ZpbGVXcmFwcGVyICpL
V1FLSFRNTFBhcnQ6OmZpbGVXcmFwcGVyCiAKIHN0YXRpYyBFbGVtZW50SW1wbCAqbGlzdFBhcmVu
dChFbGVtZW50SW1wbCAqaXRlbSkKIHsKLSAgICAvLyBJY2shICBBdm9pZCB1c2Ugb2YgaXRlbS0+
aWQoKSB3aGljaCBjb25mdXNlcyBPYmpDKysuCi0gICAgdW5zaWduZWQgc2hvcnQgX2lkID0gaXRl
bS0+aWRlbnRpZmllcigpOwotICAgIAotICAgIHdoaWxlIChfaWQgIT0gSURfVUwgJiYgX2lkICE9
IElEX09MKSB7CisgICAgd2hpbGUgKCFpdGVtLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dWwoKSkg
JiYgIWl0ZW0tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvbCgpKSkgewogICAgICAgICBpdGVtID0g
c3RhdGljX2Nhc3Q8RWxlbWVudEltcGwgKj4oaXRlbS0+cGFyZW50Tm9kZSgpKTsKICAgICAgICAg
aWYgKCFpdGVtKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIF9pZCA9IGl0ZW0tPmlkZW50
aWZpZXIoKTsKICAgICB9CiAgICAgcmV0dXJuIGl0ZW07CiB9CkBAIC0yODY4LDcgKzI4NjAsNyBA
QCBzdGF0aWMgTm9kZUltcGwqIGlzVGV4dEZpcnN0SW5MaXN0SXRlbShOCiAgICAgd2hpbGUgKHBh
cikgewogICAgICAgICBpZiAocGFyLT5maXJzdENoaWxkKCkgIT0gZSkKICAgICAgICAgICAgIHJl
dHVybiAwOwotICAgICAgICBpZiAocGFyLT5pZGVudGlmaWVyKCkgPT0gSURfTEkpCisgICAgICAg
IGlmIChwYXItPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpsaSgpKSkKICAgICAgICAgICAgIHJldHVy
biBwYXI7CiAgICAgICAgIGUgPSBwYXI7CiAgICAgICAgIHBhciA9IHBhci0+cGFyZW50Tm9kZSgp
OwpAQCAtMzAyMiwxMDkgKzMwMTQsOTUgQEAgTlNBdHRyaWJ1dGVkU3RyaW5nICpLV1FLSFRNTFBh
cnQ6OmF0dHJpYgogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAvLyBUaGlz
IGlzIG91ciBzaW1wbGUgSFRNTCAtPiBBU0NJSSB0cmFuc2Zvcm1hdGlvbjoKICAgICAgICAgICAg
ICAgICBRU3RyaW5nIHRleHQ7Ci0gICAgICAgICAgICAgICAgTm9kZUltcGw6OklkIF9pZCA9IG4t
PmlkZW50aWZpZXIoKTsKLSAgICAgICAgICAgICAgICBzd2l0Y2goX2lkKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGNhc2UgSURfQToKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vdGUgdGhl
IHN0YXJ0IG9mIHRoZSA8YT4gZWxlbWVudC4gIFdlIHdpbGwgYWRkIHRoZSBOU0xpbmtBdHRyaWJ1
dGVOYW1lCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBhdHRyaWJ1dGUgdG8gdGhlIGF0dHJp
YnV0ZWQgc3RyaW5nIHdoZW4gbmF2aWdhdGluZyB0byB0aGUgbmV4dCBzaWJsaW5nIAotICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gb2YgdGhpcyBub2RlLgotICAgICAgICAgICAgICAgICAgICAg
ICAgbGlua1N0YXJ0TG9jYXRpb24gPSBbcmVzdWx0IGxlbmd0aF07Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBsaW5rU3RhcnROb2RlID0gc3RhdGljX2Nhc3Q8RWxlbWVudEltcGwqPihuKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgICAgIGNhc2Ug
SURfQlI6Ci0gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0ICs9ICJcbiI7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBoYXNOZXdMaW5lID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgIAotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0xJOgotICAgICAgICAg
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFTdHJpbmcgbGlz
dFRleHQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgRWxlbWVudEltcGwgKml0ZW1QYXJl
bnQgPSBsaXN0UGFyZW50KHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsICo+KG4pKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWhh
c05ld0xpbmUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RUZXh0ICs9ICdc
bic7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzTmV3TGluZSA9IHRydWU7Ci0gICAg
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdEl0ZW1zLmFwcGVuZChzdGF0aWNfY2Fz
dDxFbGVtZW50SW1wbCo+KG4pKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0SXRl
bUluZm8gaW5mbzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLnN0YXJ0ID0gW3Jl
c3VsdCBsZW5ndGhdOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8uZW5kID0gMDsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0SXRlbUxvY2F0aW9ucy5hcHBlbmQgKGlu
Zm8pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGxpc3RUZXh0ICs9ICdcdCc7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGl0ZW1QYXJlbnQgJiYgcmVuZGVyZXItPmlzTGlzdEl0ZW0oKSkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBSZW5kZXJMaXN0SXRlbSAqbGlzdFJlbmRlcmVyID0gc3RhdGljX2Nh
c3Q8UmVuZGVyTGlzdEl0ZW0qPihyZW5kZXJlcik7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbWF4TWFya2VyV2lkdGggPSBNQVgoW2ZvbnQgcG9pbnRTaXplXSwgbWF4TWFya2Vy
V2lkdGgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2goc3R5bGUtPmxp
c3RTdHlsZVR5cGUoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBraHRtbDo6RElTQzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBs
aXN0VGV4dCArPSAoKFFDaGFyKUJVTExFVF9DSEFSKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNhc2Uga2h0bWw6OkNJUkNMRToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBsaXN0VGV4dCArPSAoKFFDaGFyKUNJUkNMRV9DSEFSKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNhc2Uga2h0bWw6OlNRVUFSRToKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBsaXN0VGV4dCArPSAoKFFDaGFyKVNRVUFSRV9DSEFSKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNhc2Uga2h0bWw6OkxOT05FOgotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBRU3RyaW5nIG1hcmtlciA9IGxpc3RSZW5kZXJlci0+bWFya2VyU3RyaW5nVmFsdWUoKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0VGV4dCArPSBtYXJr
ZXI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVXNlIEFwcEtp
dCBtZXRyaWNzLiAgV2lsbCBiZSByZW5kZXJlZCBieSBBcHBLaXQuCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgbWFya2VyV2lkdGggPSBbZm9udCB3aWR0aE9m
U3RyaW5nOiBtYXJrZXIuZ2V0TlNTdHJpbmcoKV07Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbWF4TWFya2VyV2lkdGggPSBNQVgobWFya2VyV2lkdGgsIG1heE1hcmtl
cldpZHRoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGlmIChuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YSgpKSkgeworICAgICAgICAgICAgICAg
ICAgICAvLyBOb3RlIHRoZSBzdGFydCBvZiB0aGUgPGE+IGVsZW1lbnQuICBXZSB3aWxsIGFkZCB0
aGUgTlNMaW5rQXR0cmlidXRlTmFtZQorICAgICAgICAgICAgICAgICAgICAvLyBhdHRyaWJ1dGUg
dG8gdGhlIGF0dHJpYnV0ZWQgc3RyaW5nIHdoZW4gbmF2aWdhdGluZyB0byB0aGUgbmV4dCBzaWJs
aW5nIAorICAgICAgICAgICAgICAgICAgICAvLyBvZiB0aGlzIG5vZGUuCisgICAgICAgICAgICAg
ICAgICAgIGxpbmtTdGFydExvY2F0aW9uID0gW3Jlc3VsdCBsZW5ndGhdOworICAgICAgICAgICAg
ICAgICAgICBsaW5rU3RhcnROb2RlID0gc3RhdGljX2Nhc3Q8RWxlbWVudEltcGwqPihuKTsKKyAg
ICAgICAgICAgICAgICB9IGVsc2UgaWYgKG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpicigpKSkg
eworICAgICAgICAgICAgICAgICAgICB0ZXh0ICs9ICJcbiI7CisgICAgICAgICAgICAgICAgICAg
IGhhc05ld0xpbmUgPSB0cnVlOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobi0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OmxpKCkpKSB7CisgICAgICAgICAgICAgICAgICAgIFFTdHJpbmcgbGlz
dFRleHQ7CisgICAgICAgICAgICAgICAgICAgIEVsZW1lbnRJbXBsICppdGVtUGFyZW50ID0gbGlz
dFBhcmVudChzdGF0aWNfY2FzdDxFbGVtZW50SW1wbCAqPihuKSk7CisgICAgICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAoIWhhc05ld0xpbmUpCisgICAgICAgICAgICAg
ICAgICAgICAgICBsaXN0VGV4dCArPSAnXG4nOworICAgICAgICAgICAgICAgICAgICBoYXNOZXdM
aW5lID0gdHJ1ZTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0VGV4dCAr
PSAnICc7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RUZXh0ICs9ICdcdCc7
Ci0gICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5TTXV0YWJsZURpY3Rpb25h
cnkgKmF0dHJzOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGF0dHJzID0gW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgW2F0dHJzIHNldE9iamVjdDpmb250IGZvcktleTpOU0ZvbnRB
dHRyaWJ1dGVOYW1lXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0eWxl
ICYmIHN0eWxlLT5jb2xvcigpLmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFthdHRycyBzZXRPYmplY3Q6c3R5bGUtPmNvbG9yKCkuZ2V0TlNDb2xvcigpIGZv
cktleTpOU0ZvcmVncm91bmRDb2xvckF0dHJpYnV0ZU5hbWVdOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoc3R5bGUgJiYgc3R5bGUtPmJhY2tncm91bmRDb2xvcigpLmlzVmFs
aWQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRycyBzZXRPYmpl
Y3Q6c3R5bGUtPmJhY2tncm91bmRDb2xvcigpLmdldE5TQ29sb3IoKSBmb3JLZXk6TlNCYWNrZ3Jv
dW5kQ29sb3JBdHRyaWJ1dGVOYW1lXTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKnBhcnRpYWxTdHJpbmcgPSBbW05TQXR0
cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6bGlzdFRleHQuZ2V0TlNTdHJpbmco
KSBhdHRyaWJ1dGVzOmF0dHJzXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0
dHJzIHJlbGVhc2VdOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVzdWx0IGFw
cGVuZEF0dHJpYnV0ZWRTdHJpbmc6IHBhcnRpYWxTdHJpbmddOyAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BhcnRpYWxTdHJpbmcgcmVsZWFzZV07Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBsaXN0SXRl
bXMuYXBwZW5kKHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsKj4obikpOworICAgICAgICAgICAgICAg
ICAgICBMaXN0SXRlbUluZm8gaW5mbzsKKyAgICAgICAgICAgICAgICAgICAgaW5mby5zdGFydCA9
IFtyZXN1bHQgbGVuZ3RoXTsKKyAgICAgICAgICAgICAgICAgICAgaW5mby5lbmQgPSAwOworICAg
ICAgICAgICAgICAgICAgICBsaXN0SXRlbUxvY2F0aW9ucy5hcHBlbmQgKGluZm8pOworICAgICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgbGlzdFRleHQgKz0gJ1x0JzsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKGl0ZW1QYXJlbnQgJiYgcmVuZGVyZXItPmlzTGlzdEl0ZW0o
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVyTGlzdEl0ZW0gKmxpc3RSZW5kZXJl
ciA9IHN0YXRpY19jYXN0PFJlbmRlckxpc3RJdGVtKj4ocmVuZGVyZXIpOworCisgICAgICAgICAg
ICAgICAgICAgICAgICBtYXhNYXJrZXJXaWR0aCA9IE1BWChbZm9udCBwb2ludFNpemVdLCBtYXhN
YXJrZXJXaWR0aCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2goc3R5bGUtPmxpc3RT
dHlsZVR5cGUoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Uga2h0bWw6OkRJ
U0M6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RUZXh0ICs9ICgoUUNoYXIp
QlVMTEVUX0NIQVIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIGtodG1sOjpDSVJDTEU6CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGxpc3RUZXh0ICs9ICgoUUNoYXIpQ0lSQ0xFX0NIQVIpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjYXNlIGtodG1sOjpTUVVBUkU6CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGxpc3RUZXh0ICs9ICgoUUNoYXIpU1FVQVJFX0NIQVIpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNl
IGtodG1sOjpMTk9ORToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgUVN0cmluZyBtYXJrZXIgPSBsaXN0UmVuZGVyZXItPm1hcmtlclN0cmluZ1Zh
bHVlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RUZXh0ICs9IG1hcmtl
cjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVXNlIEFwcEtpdCBtZXRyaWNz
LiAgV2lsbCBiZSByZW5kZXJlZCBieSBBcHBLaXQuCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZsb2F0IG1hcmtlcldpZHRoID0gW2ZvbnQgd2lkdGhPZlN0cmluZzogbWFya2VyLmdl
dE5TU3RyaW5nKCldOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhNYXJrZXJX
aWR0aCA9IE1BWChtYXJrZXJXaWR0aCwgbWF4TWFya2VyV2lkdGgpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAg
ICAgICAgICAgY2FzZSBJRF9PTDoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9VTDoKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGxpc3RUZXh0ICs9ICcgJzsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGxpc3RUZXh0ICs9ICdcdCc7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIE5TTXV0
YWJsZURpY3Rpb25hcnkgKmF0dHJzOworCisgICAgICAgICAgICAgICAgICAgICAgICBhdHRycyA9
IFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF07CisgICAgICAgICAgICAgICAgICAg
ICAgICBbYXR0cnMgc2V0T2JqZWN0OmZvbnQgZm9yS2V5Ok5TRm9udEF0dHJpYnV0ZU5hbWVdOwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0eWxlICYmIHN0eWxlLT5jb2xvcigpLmlzVmFs
aWQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0cnMgc2V0T2JqZWN0OnN0eWxl
LT5jb2xvcigpLmdldE5TQ29sb3IoKSBmb3JLZXk6TlNGb3JlZ3JvdW5kQ29sb3JBdHRyaWJ1dGVO
YW1lXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHlsZSAmJiBzdHlsZS0+YmFja2dy
b3VuZENvbG9yKCkuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRy
cyBzZXRPYmplY3Q6c3R5bGUtPmJhY2tncm91bmRDb2xvcigpLmdldE5TQ29sb3IoKSBmb3JLZXk6
TlNCYWNrZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lXTsKKworICAgICAgICAgICAgICAgICAgICAg
ICAgTlNBdHRyaWJ1dGVkU3RyaW5nICpwYXJ0aWFsU3RyaW5nID0gW1tOU0F0dHJpYnV0ZWRTdHJp
bmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOmxpc3RUZXh0LmdldE5TU3RyaW5nKCkgYXR0cmlidXRl
czphdHRyc107CisgICAgICAgICAgICAgICAgICAgICAgICBbYXR0cnMgcmVsZWFzZV07CisgICAg
ICAgICAgICAgICAgICAgICAgICBbcmVzdWx0IGFwcGVuZEF0dHJpYnV0ZWRTdHJpbmc6IHBhcnRp
YWxTdHJpbmddOyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIFtwYXJ0
aWFsU3RyaW5nIHJlbGVhc2VdOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvbCgpKSB8fCBuLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6dWwoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgh
aGFzTmV3TGluZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0ICs9ICJcbiI7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBoYXNOZXdMaW5lID0gdHJ1ZTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfVEQ6Ci0gICAg
ICAgICAgICAgICAgICAgIGNhc2UgSURfVEg6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURf
SFI6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfREQ6Ci0gICAgICAgICAgICAgICAgICAg
IGNhc2UgSURfREw6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfRFQ6Ci0gICAgICAgICAg
ICAgICAgICAgIGNhc2UgSURfUFJFOgotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0JMT0NL
UVVPVEU6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfRElWOgorICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0ZCgpKSB8fAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0aCgpKSB8
fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjpocigpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjpkZCgpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4tPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjpkbCgpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpkdCgpKSB8fAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpwcmUoKSkgfHwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YmxvY2txdW90
ZSgpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjpkaXYoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaGFzTmV3TGlu
ZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0ICs9ICdcbic7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBoYXNOZXdMaW5lID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX1A6Ci0gICAgICAgICAgICAgICAg
ICAgIGNhc2UgSURfVFI6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfSDE6Ci0gICAgICAg
ICAgICAgICAgICAgIGNhc2UgSURfSDI6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfSDM6
Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfSDQ6Ci0gICAgICAgICAgICAgICAgICAgIGNh
c2UgSURfSDU6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfSDY6IHsKKyAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIGlmIChuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6cCgpKSB8fAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0cigp
KSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjpoMSgpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjpoMigpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4t
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoMygpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoNCgpKSB8fAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoNSgpKSB8fAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoNigpKSkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNOZXdMaW5lKQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRleHQgKz0gJ1xuJzsKICAgICAgICAgICAgICAgICAgICAgICAgIApA
QCAtMzEzOSwxMCArMzExNyw4IEBAIE5TQXR0cmlidXRlZFN0cmluZyAqS1dRS0hUTUxQYXJ0Ojph
dHRyaWIKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgICAgICAgICAgaGFzTmV3TGluZSA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfSU1HOgorICAgICAgICAg
ICAgICAgICAgICBlbHNlIGlmIChuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW1nKCkpKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAocGVuZGluZ1N0eWxlZFNwYWNlICE9IG5pbCkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsaW5rU3RhcnRMb2NhdGlvbiA9PSBbcmVz
dWx0IGxlbmd0aF0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKytsaW5rU3Rh
cnRMb2NhdGlvbjsKQEAgLTMxNTYsOCArMzEzMiw5IEBAIE5TQXR0cmlidXRlZFN0cmluZyAqS1dR
S0hUTUxQYXJ0OjphdHRyaWIKICAgICAgICAgICAgICAgICAgICAgICAgIE5TQXR0cmlidXRlZFN0
cmluZyAqaVN0cmluZyA9IFtOU0F0dHJpYnV0ZWRTdHJpbmcgYXR0cmlidXRlZFN0cmluZ1dpdGhB
dHRhY2htZW50OmF0dGFjaG1lbnRdOwogICAgICAgICAgICAgICAgICAgICAgICAgW3Jlc3VsdCBh
cHBlbmRBdHRyaWJ1dGVkU3RyaW5nOiBpU3RyaW5nXTsKICAgICAgICAgICAgICAgICAgICAgICAg
IFthdHRhY2htZW50IHJlbGVhc2VdOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CisKICAgICAgICAgICAgICAg
ICBOU0F0dHJpYnV0ZWRTdHJpbmcgKnBhcnRpYWxTdHJpbmcgPSBbW05TQXR0cmlidXRlZFN0cmlu
ZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6dGV4dC5nZXROU1N0cmluZygpXTsKICAgICAgICAgICAg
ICAgICBbcmVzdWx0IGFwcGVuZEF0dHJpYnV0ZWRTdHJpbmc6IHBhcnRpYWxTdHJpbmddOwogICAg
ICAgICAgICAgICAgIFtwYXJ0aWFsU3RyaW5nIHJlbGVhc2VdOwpAQCAtMzE3OSw3MSArMzE1Niw2
MCBAQCBOU0F0dHJpYnV0ZWRTdHJpbmcgKktXUUtIVE1MUGFydDo6YXR0cmliCiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICBuZXh0ID0gbi0+bmV4dFNpYmxpbmcoKTsKIAotICAg
ICAgICAgICAgTm9kZUltcGw6OklkIF9pZCA9IG4tPmlkZW50aWZpZXIoKTsKLSAgICAgICAgICAg
IHN3aXRjaChfaWQpIHsKLSAgICAgICAgICAgICAgICBjYXNlIElEX0E6Ci0gICAgICAgICAgICAg
ICAgICAgIC8vIEVuZCBvZiBhIDxhPiBlbGVtZW50LiAgQ3JlYXRlIGFuIGF0dHJpYnV0ZWQgc3Ry
aW5nIE5TTGlua0F0dHJpYnV0ZU5hbWUgYXR0cmlidXRlCi0gICAgICAgICAgICAgICAgICAgIC8v
IGZvciB0aGUgcmFuZ2Ugb2YgdGhlIGxpbmsuICBOb3RlIHRoYXQgd2UgY3JlYXRlIHRoZSBhdHRy
aWJ1dGVkIHN0cmluZyBmcm9tIHRoZSBET00sIHdoaWNoCi0gICAgICAgICAgICAgICAgICAgIC8v
IHdpbGwgaGF2ZSBjb3JyZWN0ZWQgYW55IGlsbGVnYWxseSBuZXN0ZWQgPGE+IGVsZW1lbnRzLgot
ICAgICAgICAgICAgICAgICAgICBpZiAobGlua1N0YXJ0Tm9kZSAmJiBuID09IGxpbmtTdGFydE5v
ZGUpewotICAgICAgICAgICAgICAgICAgICAgICAgRE9NU3RyaW5nIGhyZWYgPSBwYXJzZVVSTChs
aW5rU3RhcnROb2RlLT5nZXRBdHRyaWJ1dGUoQVRUUl9IUkVGKSk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBLVVJMIGtVUkwgPSBLV1EobGlua1N0YXJ0Tm9kZS0+Z2V0RG9jdW1lbnQoKS0+cGFy
dCgpKS0+Y29tcGxldGVVUkwoaHJlZi5zdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICAgICAgICAgIE5TVVJMICpVUkwgPSBrVVJMLmdldE5TVVJMKCk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBbcmVzdWx0IGFkZEF0dHJpYnV0ZTpOU0xpbmtBdHRy
aWJ1dGVOYW1lIHZhbHVlOlVSTCByYW5nZTpOU01ha2VSYW5nZShsaW5rU3RhcnRMb2NhdGlvbiwg
W3Jlc3VsdCBsZW5ndGhdLWxpbmtTdGFydExvY2F0aW9uKV07Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBsaW5rU3RhcnROb2RlID0gMDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChuLT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6YSgpKSkgeworICAgICAgICAgICAgICAgIC8vIEVuZCBvZiBhIDxhPiBlbGVtZW50LiAgQ3Jl
YXRlIGFuIGF0dHJpYnV0ZWQgc3RyaW5nIE5TTGlua0F0dHJpYnV0ZU5hbWUgYXR0cmlidXRlCisg
ICAgICAgICAgICAgICAgLy8gZm9yIHRoZSByYW5nZSBvZiB0aGUgbGluay4gIE5vdGUgdGhhdCB3
ZSBjcmVhdGUgdGhlIGF0dHJpYnV0ZWQgc3RyaW5nIGZyb20gdGhlIERPTSwgd2hpY2gKKyAgICAg
ICAgICAgICAgICAvLyB3aWxsIGhhdmUgY29ycmVjdGVkIGFueSBpbGxlZ2FsbHkgbmVzdGVkIDxh
PiBlbGVtZW50cy4KKyAgICAgICAgICAgICAgICBpZiAobGlua1N0YXJ0Tm9kZSAmJiBuID09IGxp
bmtTdGFydE5vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgRE9NU3RyaW5nIGhyZWYgPSBwYXJz
ZVVSTChsaW5rU3RhcnROb2RlLT5nZXRBdHRyaWJ1dGUoQVRUUl9IUkVGKSk7CisgICAgICAgICAg
ICAgICAgICAgIEtVUkwga1VSTCA9IEtXUShsaW5rU3RhcnROb2RlLT5nZXREb2N1bWVudCgpLT5w
YXJ0KCkpLT5jb21wbGV0ZVVSTChocmVmLnN0cmluZygpKTsKKyAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAgIE5TVVJMICpVUkwgPSBrVVJMLmdldE5TVVJMKCk7CisgICAg
ICAgICAgICAgICAgICAgIFtyZXN1bHQgYWRkQXR0cmlidXRlOk5TTGlua0F0dHJpYnV0ZU5hbWUg
dmFsdWU6VVJMIHJhbmdlOk5TTWFrZVJhbmdlKGxpbmtTdGFydExvY2F0aW9uLCBbcmVzdWx0IGxl
bmd0aF0tbGlua1N0YXJ0TG9jYXRpb24pXTsKKyAgICAgICAgICAgICAgICAgICAgbGlua1N0YXJ0
Tm9kZSA9IDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAg
ZWxzZSBpZiAobi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9sKCkpIHx8IG4tPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjp1bCgpKSkgeworICAgICAgICAgICAgICAgIGlmICghaGFzTmV3TGluZSkKKyAg
ICAgICAgICAgICAgICAgICAgdGV4dCArPSAnXG4nOworICAgICAgICAgICAgICAgIGhhc05ld0xp
bmUgPSB0cnVlOworICAgICAgICAgICAgfSBlbHNlIGlmIChuLT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6bGkoKSkpIHsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBjYXNlIElEX09M
OgotICAgICAgICAgICAgICAgIGNhc2UgSURfVUw6Ci0gICAgICAgICAgICAgICAgICAgIGlmICgh
aGFzTmV3TGluZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHRleHQgKz0gJ1xuJzsKLSAgICAg
ICAgICAgICAgICAgICAgaGFzTmV3TGluZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotCi0gICAgICAgICAgICAgICAgY2FzZSBJRF9MSToKLSAgICAgICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICAgICAgaW50IGksIGNvdW50ID0gbGlzdEl0ZW1zLmNvdW50
KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKyl7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpc3RJdGVtcy5hdChpKSA9PSBuKXsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdEl0ZW1Mb2NhdGlvbnNbaV0uZW5k
ID0gW3Jlc3VsdCBsZW5ndGhdOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgaW50IGksIGNvdW50ID0gbGlzdEl0ZW1zLmNvdW50KCk7Cisg
ICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspeworICAgICAgICAgICAg
ICAgICAgICBpZiAobGlzdEl0ZW1zLmF0KGkpID09IG4peworICAgICAgICAgICAgICAgICAgICAg
ICAgbGlzdEl0ZW1Mb2NhdGlvbnNbaV0uZW5kID0gW3Jlc3VsdCBsZW5ndGhdOworICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgaWYgKCFoYXNOZXdMaW5lKQotICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCAr
PSAnXG4nOwotICAgICAgICAgICAgICAgICAgICBoYXNOZXdMaW5lID0gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBjYXNlIElEX1REOgotICAgICAg
ICAgICAgICAgIGNhc2UgSURfVEg6Ci0gICAgICAgICAgICAgICAgY2FzZSBJRF9IUjoKLSAgICAg
ICAgICAgICAgICBjYXNlIElEX0REOgotICAgICAgICAgICAgICAgIGNhc2UgSURfREw6Ci0gICAg
ICAgICAgICAgICAgY2FzZSBJRF9EVDoKLSAgICAgICAgICAgICAgICBjYXNlIElEX1BSRToKLSAg
ICAgICAgICAgICAgICBjYXNlIElEX0JMT0NLUVVPVEU6Ci0gICAgICAgICAgICAgICAgY2FzZSBJ
RF9ESVY6Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaGFzTmV3TGluZSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHRleHQgKz0gJ1xuJzsKLSAgICAgICAgICAgICAgICAgICAgaGFzTmV3TGlu
ZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNh
c2UgSURfUDoKLSAgICAgICAgICAgICAgICBjYXNlIElEX1RSOgotICAgICAgICAgICAgICAgIGNh
c2UgSURfSDE6Ci0gICAgICAgICAgICAgICAgY2FzZSBJRF9IMjoKLSAgICAgICAgICAgICAgICBj
YXNlIElEX0gzOgotICAgICAgICAgICAgICAgIGNhc2UgSURfSDQ6Ci0gICAgICAgICAgICAgICAg
Y2FzZSBJRF9INToKLSAgICAgICAgICAgICAgICBjYXNlIElEX0g2OgotICAgICAgICAgICAgICAg
ICAgICBpZiAoIWhhc05ld0xpbmUpCi0gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0ICs9ICdc
bic7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEFuIGV4dHJhIG5ld2xpbmUgaXMgbmVlZGVkIGF0
IHRoZSBzdGFydCwgbm90IHRoZSBlbmQsIG9mIHRoZXNlIHR5cGVzIG9mIHRhZ3MsCi0gICAgICAg
ICAgICAgICAgICAgIC8vIHNvIGRvbid0IGFkZCBhbm90aGVyIGhlcmUuCi0gICAgICAgICAgICAg
ICAgICAgIGhhc05ld0xpbmUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCFoYXNOZXdMaW5lKQorICAgICAg
ICAgICAgICAgICAgICB0ZXh0ICs9ICdcbic7CisgICAgICAgICAgICAgICAgaGFzTmV3TGluZSA9
IHRydWU7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0
ZCgpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
dGgoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
OmhyKCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjpkZCgpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6ZGwoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OmR0KCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjpwcmUoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OmJsb2NrcXVvdGUoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OmRpdigpKSkgeworICAgICAgICAgICAgICAgIGlmICghaGFzTmV3TGlu
ZSkKKyAgICAgICAgICAgICAgICAgICAgdGV4dCArPSAnXG4nOworICAgICAgICAgICAgICAgIGhh
c05ld0xpbmUgPSB0cnVlOworICAgICAgICAgICAgfSBlbHNlIGlmIChuLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6cCgpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6dHIoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OmgxKCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjpoMigpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6aDMoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6Omg0KCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjpoNSgpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6aDYoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWhhc05ld0xpbmUp
CisgICAgICAgICAgICAgICAgICAgIHRleHQgKz0gJ1xuJzsKKyAgICAgICAgICAgICAgICAvLyBB
biBleHRyYSBuZXdsaW5lIGlzIG5lZWRlZCBhdCB0aGUgc3RhcnQsIG5vdCB0aGUgZW5kLCBvZiB0
aGVzZSB0eXBlcyBvZiB0YWdzLAorICAgICAgICAgICAgICAgIC8vIHNvIGRvbid0IGFkZCBhbm90
aGVyIGhlcmUuCisgICAgICAgICAgICAgICAgaGFzTmV3TGluZSA9IHRydWU7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIE5TQXR0cmlidXRlZFN0cmluZyAqcGFydGlh
bFN0cmluZyA9IFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzp0ZXh0
LmdldE5TU3RyaW5nKCldOwpAQCAtMzQ3Niw3ICszNDQyLDcgQEAgUmVuZGVyU3R5bGUgKktXUUtI
VE1MUGFydDo6c3R5bGVGb3JTZWxlYwogICAgICAgICByZXR1cm4gbm9kZS0+cmVuZGVyZXIoKS0+
c3R5bGUoKTsKIAogICAgIGludCBleGNlcHRpb25Db2RlID0gMDsKLSAgICBFbGVtZW50SW1wbCAq
c3R5bGVFbGVtZW50ID0geG1sRG9jSW1wbCgpLT5jcmVhdGVIVE1MRWxlbWVudCgic3BhbiIsIGV4
Y2VwdGlvbkNvZGUpOworICAgIEVsZW1lbnRJbXBsICpzdHlsZUVsZW1lbnQgPSB4bWxEb2NJbXBs
KCktPmNyZWF0ZUVsZW1lbnROUyhYSFRNTF9OQU1FU1BBQ0UsICJzcGFuIiwgZXhjZXB0aW9uQ29k
ZSk7CiAgICAgQVNTRVJUKGV4Y2VwdGlvbkNvZGUgPT0gMCk7CiAKICAgICBzdHlsZUVsZW1lbnQt
PnJlZigpOwpAQCAtMzcwMyw3ICszNjY5LDcgQEAgdm9pZCBLV1FLSFRNTFBhcnQ6OnNldFNlbGVj
dGlvbkZyb21Ob25lKAogICAgICAgICB3aGlsZSAobm9kZSkgewogICAgICAgICAgICAgLy8gTG9v
ayBmb3IgYSBibG9jayBmbG93LCBidXQgc2tpcCBvdmVyIHRoZSBIVE1MIGVsZW1lbnQsIHNpbmNl
IHdlIHJlYWxseQogICAgICAgICAgICAgLy8gd2FudCB0byBnZXQgYXQgbGVhc3QgYXMgZmFyIGFz
IHRoZSB0aGUgQk9EWSBlbGVtZW50IGluIGEgZG9jdW1lbnQuCi0gICAgICAgICAgICBpZiAobm9k
ZS0+aXNCbG9ja0Zsb3coKSAmJiBub2RlLT5pZGVudGlmaWVyKCkgIT0gSURfSFRNTCkKKyAgICAg
ICAgICAgIGlmIChub2RlLT5pc0Jsb2NrRmxvdygpICYmIG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjpodG1sKCkpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgbm9kZSA9
IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKTsKICAgICAgICAgfQpJbmRleDoga3dxL0tXUVJlbmRl
clRyZWVEZWJ1Zy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva3dx
L0tXUVJlbmRlclRyZWVEZWJ1Zy5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNDEKZGlmZiAt
dSAtcCAtcjEuNDEga3dxL0tXUVJlbmRlclRyZWVEZWJ1Zy5jcHAKLS0tIGt3cS9LV1FSZW5kZXJU
cmVlRGVidWcuY3BwCTE2IE1heSAyMDA1IDIyOjAzOjQ4IC0wMDAwCTEuNDEKKysrIGt3cS9LV1FS
ZW5kZXJUcmVlRGVidWcuY3BwCTI0IEp1biAyMDA1IDAzOjExOjA1IC0wMDAwCkBAIC0yNyw3ICsy
Nyw2IEBACiAKICNpbmNsdWRlICJkb21fZG9jaW1wbC5oIgogI2luY2x1ZGUgImRvbV9wb3NpdGlv
bi5oIgotI2luY2x1ZGUgImh0bWx0YWdzLmgiCiAjaW5jbHVkZSAianNlZGl0aW5nLmgiCiAjaW5j
bHVkZSAia2h0bWx2aWV3LmgiCiAjaW5jbHVkZSAicmVuZGVyX2NhbnZhcy5oIgpAQCAtMTE2LDgg
KzExNSw2IEBAIHN0YXRpYyBRU3RyaW5nIGdldFRhZ05hbWUoTm9kZUltcGwgKm4pCiB7CiAgICAg
aWYgKG4tPmlzRG9jdW1lbnROb2RlKCkpCiAgICAgICAgIHJldHVybiAiIjsKLSAgICBpZiAobi0+
aWQoKSA8PSBJRF9MQVNUX1RBRykKLSAgICAgICAgcmV0dXJuIGdldFRhZ05hbWUobi0+aWQoKSku
c3RyaW5nKCk7CiAgICAgcmV0dXJuIG4tPm5vZGVOYW1lKCkuc3RyaW5nKCk7CiB9CiAKSW5kZXg6
IGt3cS9XZWJDb3JlQnJpZGdlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJD
b3JlL2t3cS9XZWJDb3JlQnJpZGdlLm1tLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjM5NgpkaWZm
IC11IC1wIC1yMS4zOTYga3dxL1dlYkNvcmVCcmlkZ2UubW0KLS0tIGt3cS9XZWJDb3JlQnJpZGdl
Lm1tCTE0IEp1biAyMDA1IDAwOjIzOjQ1IC0wMDAwCTEuMzk2CisrKyBrd3EvV2ViQ29yZUJyaWRn
ZS5tbQkyNCBKdW4gMjAwNSAwMzoxMTowNyAtMDAwMApAQCAtMzksNyArMzksNiBAQAogI2ltcG9y
dCAiaHRtbF9pbWFnZWltcGwuaCIKICNpbXBvcnQgImh0bWxhdHRycy5oIgogI2ltcG9ydCAiaHRt
bGVkaXRpbmcuaCIKLSNpbXBvcnQgImh0bWx0YWdzLmgiCiAjaW1wb3J0ICJraHRtbF9wYXJ0Lmgi
CiAjaW1wb3J0ICJraHRtbHZpZXcuaCIKICNpbXBvcnQgImtqc19wcm94eS5oIgpAQCAtNjcsNyAr
NjYsNiBAQAogI2ltcG9ydCAiS1dRQXNzZXJ0aW9ucy5oIgogI2ltcG9ydCAiS1dRQ2hhcnNldHMu
aCIKICNpbXBvcnQgIktXUUNsaXBib2FyZC5oIgotI2ltcG9ydCAiS1dRRE9NTm9kZS5oIgogI2lt
cG9ydCAiS1dRRWRpdENvbW1hbmQuaCIKICNpbXBvcnQgIktXUUZvbnQuaCIKICNpbXBvcnQgIktX
UUZvdW5kYXRpb25FeHRyYXMuaCIKQEAgLTEwMCw2ICs5OCw3IEBAIHVzaW5nIERPTTo6SFRNTEZv
cm1FbGVtZW50SW1wbDsKIHVzaW5nIERPTTo6SFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGw7CiB1
c2luZyBET006OkhUTUxJbWFnZUVsZW1lbnRJbXBsOwogdXNpbmcgRE9NOjpIVE1MSW5wdXRFbGVt
ZW50SW1wbDsKK3VzaW5nIERPTTo6SFRNTE5hbWVzOwogdXNpbmcgRE9NOjpOb2RlSW1wbDsKIHVz
aW5nIERPTTo6UG9zaXRpb247CiB1c2luZyBET006OlJhbmdlSW1wbDsKQEAgLTkxMyw3ICs5MTIs
NyBAQCBzdGF0aWMgTlNWaWV3ICp2aWV3Rm9yRWxlbWVudChFbGVtZW50SW1wCiBzdGF0aWMgSFRN
TElucHV0RWxlbWVudEltcGwgKmlucHV0RWxlbWVudEZyb21ET01FbGVtZW50KERPTUVsZW1lbnQg
KmVsZW1lbnQpCiB7CiAgICAgTm9kZUltcGwgKm5vZGUgPSBbZWxlbWVudCBfbm9kZUltcGxdOwot
ICAgIGlmIChub2RlICYmIGlkRnJvbU5vZGUobm9kZSkgPT0gSURfSU5QVVQpIHsKKyAgICBpZiAo
bm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmlucHV0KCkpKSB7CiAgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50SW1wbCAqPihub2RlKTsKICAgICB9CiAgICAgcmV0
dXJuIG5pbDsKQEAgLTkyNiw3ICs5MjUsNyBAQCBzdGF0aWMgSFRNTEZvcm1FbGVtZW50SW1wbCAq
Zm9ybUVsZW1lbnRGCiAgICAgLy8gbWFwcy5nb29nbGUuY29tIGNyYXNoZXMgb3RoZXJ3aXNlIGJl
Y2F1c2UgaXQgaXMgYW4geHNsdCBmaWxlCiAgICAgLy8gdGhhdCBjb250YWlucyA8Zm9ybT4gZWxl
bWVudHMgdGhhdCBhcmVuJ3QgaW4gYW55IG5hbWVzcGFjZSwgc28KICAgICAvLyB0aGV5IGNvbWUg
b3V0IGFzIGdlbmVyaWMgQ01MIGVsZW1lbnRzCi0gICAgaWYgKG5vZGUgJiYgbm9kZS0+aXNIVE1M
RWxlbWVudCgpICYmIGlkRnJvbU5vZGUobm9kZSkgPT0gSURfRk9STSkgeworICAgIGlmIChub2Rl
ICYmIG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpmb3JtKCkpKSB7CiAgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnRJbXBsICo+KG5vZGUpOwogICAgIH0KICAgICBy
ZXR1cm4gbmlsOwpAQCAtMTA5Niw3ICsxMDk1LDcgQEAgc3RhdGljIEhUTUxGb3JtRWxlbWVudElt
cGwgKmZvcm1FbGVtZW50RgogICAgIAogICAgICAgICAgICAgLy8gRklYTUU6IENvZGUgY29waWVk
IGZyb20gUmVuZGVySW1hZ2U6OnVwZGF0ZUZyb21FbGVtZW50OyBzaG91bGQgc2hhcmUuCiAgICAg
ICAgICAgICBET01TdHJpbmcgYXR0cjsKLSAgICAgICAgICAgIGlmIChpZEZyb21Ob2RlKGkpID09
IElEX09CSkVDVCkgeworICAgICAgICAgICAgaWYgKGktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpv
YmplY3QoKSkpIHsKICAgICAgICAgICAgICAgICBhdHRyID0gaS0+Z2V0QXR0cmlidXRlKEFUVFJf
REFUQSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGF0dHIgPSBpLT5n
ZXRBdHRyaWJ1dGUoQVRUUl9TUkMpOwpAQCAtMTEwOCw5ICsxMTA3LDkgQEAgc3RhdGljIEhUTUxG
b3JtRWxlbWVudEltcGwgKmZvcm1FbGVtZW50RgogICAgICAgICAgICAgCiAgICAgICAgICAgICAv
LyBGSVhNRTogQ29kZSBjb3BpZWQgZnJvbSBSZW5kZXJJbWFnZTo6dXBkYXRlRnJvbUVsZW1lbnQ7
IHNob3VsZCBzaGFyZS4KICAgICAgICAgICAgIERPTVN0cmluZyBhbHQ7Ci0gICAgICAgICAgICBp
ZiAoaWRGcm9tTm9kZShpKSA9PSBJRF9JTlBVVCkKKyAgICAgICAgICAgIGlmIChpLT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6aW5wdXQoKSkpCiAgICAgICAgICAgICAgICAgYWx0ID0gc3RhdGljX2Nh
c3Q8SFRNTElucHV0RWxlbWVudEltcGwgKj4oaSktPmFsdFRleHQoKTsKLSAgICAgICAgICAgIGVs
c2UgaWYgKGlkRnJvbU5vZGUoaSkgPT0gSURfSU1HKQorICAgICAgICAgICAgZWxzZSBpZiAoaS0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OmltZygpKSkKICAgICAgICAgICAgICAgICBhbHQgPSBzdGF0
aWNfY2FzdDxIVE1MSW1hZ2VFbGVtZW50SW1wbCAqPihpKS0+YWx0VGV4dCgpOwogICAgICAgICAg
ICAgaWYgKCFhbHQuaXNOdWxsKCkpIHsKICAgICAgICAgICAgICAgICBRU3RyaW5nIGFsdFRleHQg
PSBhbHQuc3RyaW5nKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>2823</attachid>
            <date>2005-07-05 16:41:31 -0700</date>
            <delta_ts>2005-07-06 23:18:28 -0700</delta_ts>
            <desc>Patch that passes all layout tests</desc>
            <filename>patch-11.txt</filename>
            <type>text/plain</type>
            <size>713000</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUucGJwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvV2ViQ29yZS9XZWJDb3JlLnBicHJvai9wcm9qZWN0LnBieHByb2osdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuNTYwCmRpZmYgLXUgLXAgLXIxLjU2MCBXZWJDb3JlLnBicHJvai9w
cm9qZWN0LnBieHByb2oKLS0tIFdlYkNvcmUucGJwcm9qL3Byb2plY3QucGJ4cHJvagk1IEp1bCAy
MDA1IDA3OjU3OjQ3IC0wMDAwCTEuNTYwCisrKyBXZWJDb3JlLnBicHJvai9wcm9qZWN0LnBieHBy
b2oJNSBKdWwgMjAwNSAyMzoxOTo1NiAtMDAwMApAQCAtMjE0LDMyICsyMTQsNiBAQAogLy8yRDIK
IC8vMkQzCiAvLzJENAotLy8zNTAKLS8vMzUxCi0vLzM1MgotLy8zNTMKLS8vMzU0Ci0JCTM1NEYy
NDg5MDJFRTI4NTkwQUNBMkFDQSA9IHsKLQkJCWZpbGVFbmNvZGluZyA9IDMwOwotCQkJaXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsKLQkJCWxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
Ci0JCQlwYXRoID0gS1dRRE9NTm9kZS5oOwotCQkJcmVmVHlwZSA9IDQ7Ci0JCQlzb3VyY2VUcmVl
ID0gIjxncm91cD4iOwotCQl9OwotCQkzNTRGMjQ4QTAyRUUyODU5MEFDQTJBQ0EgPSB7Ci0JCQlm
aWxlRW5jb2RpbmcgPSAzMDsKLQkJCWlzYSA9IFBCWEZpbGVSZWZlcmVuY2U7Ci0JCQlsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsKLQkJCXBhdGggPSBLV1FET01Ob2RlLmNw
cDsKLQkJCXJlZlR5cGUgPSA0OwotCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsKLS8v
MzUwCi0vLzM1MQotLy8zNTIKLS8vMzUzCi0vLzM1NAogLy81MTAKIC8vNTExCiAvLzUxMgpAQCAt
MzY3LDYgKzM0MSwzNCBAQAogCQkJc2V0dGluZ3MgPSB7CiAJCQl9OwogCQl9OworCQk1NTM5MDEw
RDA4NkEyRjczMDAxRUQ3RkUgPSB7CisJCQlmaWxlRW5jb2RpbmcgPSAzMDsKKwkJCWlzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7CisJCQlsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOwor
CQkJcGF0aCA9IGh0bWxmYWN0b3J5Lmg7CisJCQlyZWZUeXBlID0gNDsKKwkJCXNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7CisJCX07CisJCTU1MzkwMTBFMDg2QTJGNzMwMDFFRDdGRSA9IHsKKwkJCWZp
bGVSZWYgPSA1NTM5MDEwRDA4NkEyRjczMDAxRUQ3RkU7CisJCQlpc2EgPSBQQlhCdWlsZEZpbGU7
CisJCQlzZXR0aW5ncyA9IHsKKwkJCX07CisJCX07CisJCTU1MzkwMTVGMDg2QTMzMkUwMDFFRDdG
RSA9IHsKKwkJCWZpbGVFbmNvZGluZyA9IDMwOworCQkJaXNhID0gUEJYRmlsZVJlZmVyZW5jZTsK
KwkJCWxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOworCQkJcGF0aCA9IGh0
bWxmYWN0b3J5LmNwcDsKKwkJCXJlZlR5cGUgPSA0OworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsKKwkJfTsKKwkJNTUzOTAxNjAwODZBMzMyRTAwMUVEN0ZFID0geworCQkJZmlsZVJlZiA9IDU1
MzkwMTVGMDg2QTMzMkUwMDFFRDdGRTsKKwkJCWlzYSA9IFBCWEJ1aWxkRmlsZTsKKwkJCXNldHRp
bmdzID0geworCQkJfTsKKwkJfTsKIAkJNTU5OThBNTcwNTJCNTk4RjAwMTdBNkMxID0gewogCQkJ
Y2hpbGRyZW4gPSAoCiAJCQkJNTU5OThBNUEwNTJCNTlDQzAwMTdBNkMxLApAQCAtMTkxMywyNCAr
MTkxNSw2IEBACiAJCQlzaGVsbFBhdGggPSAvYmluL3NoOwogCQkJc2hlbGxTY3JpcHQgPSAiXCIk
Q1JFQVRFX0hBU0hfVEFCTEVcIiBraHRtbC9lY21hL3htbHNlcmlhbGl6ZXIuY3BwID4gXCIkREVS
SVZFRF9GSUxFX0RJUi94bWxzZXJpYWxpemVyLmx1dC5oXCIiOwogCQl9OwotCQk5MzJGQzFDMDA4
MjRBQkI5MDA1QjNDNzUgPSB7Ci0JCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwotCQkJ
ZmlsZXMgPSAoCi0JCQkpOwotCQkJaW5wdXRQYXRocyA9ICgKLQkJCQlraHRtbC9taXNjL21ha2V0
YWdzLAotCQkJCWtodG1sL21pc2MvaHRtbHRhZ3MuaW4sCi0JCQkpOwotCQkJaXNhID0gUEJYU2hl
bGxTY3JpcHRCdWlsZFBoYXNlOwotCQkJbmFtZSA9IGh0bWx0YWdzLmMvaDsKLQkJCW91dHB1dFBh
dGhzID0gKAotCQkJCSIkKERFUklWRURfRklMRV9ESVIpL2h0bWx0YWdzLmMiLAotCQkJCSIkKERF
UklWRURfRklMRV9ESVIpL2h0bWx0YWdzLmgiLAotCQkJKTsKLQkJCXJ1bk9ubHlGb3JEZXBsb3lt
ZW50UG9zdHByb2Nlc3NpbmcgPSAwOwotCQkJc2hlbGxQYXRoID0gL2Jpbi9zaDsKLQkJCXNoZWxs
U2NyaXB0ID0gImNhdCBraHRtbC9taXNjL2h0bWx0YWdzLmluID4gXCIkREVSSVZFRF9GSUxFX0RJ
Ui9odG1sdGFncy5pblwiXG5jZCBcIiRERVJJVkVEX0ZJTEVfRElSXCJcbnBlcmwgXCIkU1JDUk9P
VC9raHRtbC9taXNjL21ha2V0YWdzXCIiOwotCQl9OwogCQk5MzJGQzI5NTA4MjRCMzQ1MDA1QjND
NzUgPSB7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAoCkBA
IC0yMzQ5LDcgKzIzMzMsNiBAQAogCQkJCTkzMkZDMkJDMDgyNEI0MjIwMDVCM0M3NSwKIAkJCQk5
MzJGQzBCNzA4MjRBMTc1MDA1QjNDNzUsCiAJCQkJOTMyRkMyOTUwODI0QjM0NTAwNUIzQzc1LAot
CQkJCTkzMkZDMUMwMDgyNEFCQjkwMDVCM0M3NSwKIAkJCQk5M0VBNjg2QzA4MjQ5QUY0MDA2ODdG
NTYsCiAJCQkJOTMyRkMxMEIwODI0QTRENDAwNUIzQzc1LAogCQkJCTkzMkZDMTYxMDgyNEE4RTMw
MDVCM0M3NSwKQEAgLTI0NTcsNyArMjQ0MCw2IEBACiAJCQkJOTNGMTk4REMwODI0NUU1OTAwMUU5
QUJDLAogCQkJCTkzRjE5OERFMDgyNDVFNTkwMDFFOUFCQywKIAkJCQk5M0YxOThFMDA4MjQ1RTU5
MDAxRTlBQkMsCi0JCQkJOTNGMTk4RTIwODI0NUU1OTAwMUU5QUJDLAogCQkJCTkzRjE5OEUzMDgy
NDVFNTkwMDFFOUFCQywKIAkJCQk5M0YxOThFNDA4MjQ1RTU5MDAxRTlBQkMsCiAJCQkJOTNGMTk4
RTUwODI0NUU1OTAwMUU5QUJDLApAQCAtMjUzNCw3ICsyNTE2LDYgQEAKIAkJCQk5M0YxOTkyRTA4
MjQ1RTU5MDAxRTlBQkMsCiAJCQkJOTNGMTk5MkYwODI0NUU1OTAwMUU5QUJDLAogCQkJCTkzRjE5
OTMwMDgyNDVFNTkwMDFFOUFCQywKLQkJCQk5M0YxOTkzMTA4MjQ1RTU5MDAxRTlBQkMsCiAJCQkJ
OTNGMTk5MzIwODI0NUU1OTAwMUU5QUJDLAogCQkJCTkzRjE5OTMzMDgyNDVFNTkwMDFFOUFCQywK
IAkJCQk5M0YxOTkzNDA4MjQ1RTU5MDAxRTlBQkMsCkBAIC0yNjg5LDcgKzI2NzAsNiBAQAogCQkJ
CTkzRjE5OUM5MDgyNDVFNTkwMDFFOUFCQywKIAkJCQk5M0YxOTlDQTA4MjQ1RTU5MDAxRTlBQkMs
CiAJCQkJOTNGMTk5Q0IwODI0NUU1OTAwMUU5QUJDLAotCQkJCTkzRjE5OUNDMDgyNDVFNTkwMDFF
OUFCQywKIAkJCQk5M0YxOTlDRTA4MjQ1RTU5MDAxRTlBQkMsCiAJCQkJOTNGMTk5Q0YwODI0NUU1
OTAwMUU5QUJDLAogCQkJCTkzRjE5OUQwMDgyNDVFNTkwMDFFOUFCQywKQEAgLTI3NjYsNiArMjc0
Niw3IEBACiAJCQkJMUE2OUQzODEwODU2Mjc0MTAwMDk4ODBELAogCQkJCTU1MEEwQkNBMDg1RjYw
MzkwMDczNTNENiwKIAkJCQk1NTBBMEJDRTA4NUY2MDREMDA3MzUzRDYsCisJCQkJNTUzOTAxMEUw
ODZBMkY3MzAwMUVEN0ZFLAogCQkJCTY1RjM3ODI5MDg3MEQ5NTgwMDBCMkY5NCwKIAkJCQk2NUYz
NzgyQjA4NzBEOTU4MDAwQjJGOTQsCiAJCQkJQTg1RDdDMTkwODdBNkVEOTAwNkE5MTcyLApAQCAt
MzAxMywxMiArMjk5NCw2IEBACiAJCQlzZXR0aW5ncyA9IHsKIAkJCX07CiAJCX07Ci0JCTkzRjE5
OEUyMDgyNDVFNTkwMDFFOUFCQyA9IHsKLQkJCWZpbGVSZWYgPSBGNTIzRDIzNjAyREU0Mzk2MDE4
NjM1Q0E7Ci0JCQlpc2EgPSBQQlhCdWlsZEZpbGU7Ci0JCQlzZXR0aW5ncyA9IHsKLQkJCX07Ci0J
CX07CiAJCTkzRjE5OEUzMDgyNDVFNTkwMDFFOUFCQyA9IHsKIAkJCWZpbGVSZWYgPSBGNTIzRDIz
ODAyREU0Mzk2MDE4NjM1Q0E7CiAJCQlpc2EgPSBQQlhCdWlsZEZpbGU7CkBAIC0zNDc1LDEyICsz
NDUwLDYgQEAKIAkJCXNldHRpbmdzID0gewogCQkJfTsKIAkJfTsKLQkJOTNGMTk5MzEwODI0NUU1
OTAwMUU5QUJDID0gewotCQkJZmlsZVJlZiA9IDM1NEYyNDg5MDJFRTI4NTkwQUNBMkFDQTsKLQkJ
CWlzYSA9IFBCWEJ1aWxkRmlsZTsKLQkJCXNldHRpbmdzID0gewotCQkJfTsKLQkJfTsKIAkJOTNG
MTk5MzIwODI0NUU1OTAwMUU5QUJDID0gewogCQkJZmlsZVJlZiA9IEY1ODc4Njg1MDJERTNCODYw
MUVBNDEyMjsKIAkJCWlzYSA9IFBCWEJ1aWxkRmlsZTsKQEAgLTQ0NDMsMTIgKzQ0MTIsNiBAQAog
CQkJc2V0dGluZ3MgPSB7CiAJCQl9OwogCQl9OwotCQk5M0YxOTlDQzA4MjQ1RTU5MDAxRTlBQkMg
PSB7Ci0JCQlmaWxlUmVmID0gQkM3RkRFMzIwNUMxRDlBQjAwNzBBOTAyOwotCQkJaXNhID0gUEJY
QnVpbGRGaWxlOwotCQkJc2V0dGluZ3MgPSB7Ci0JCQl9OwotCQl9OwogCQk5M0YxOTlDRTA4MjQ1
RTU5MDAxRTlBQkMgPSB7CiAJCQlmaWxlUmVmID0gQkMzQjM2NDYwNUM5RDVFMjAwRTQyOTAyOwog
CQkJaXNhID0gUEJYQnVpbGRGaWxlOwpAQCAtNDk4Myw3ICs0OTQ2LDYgQEAKIAkJCQk5M0YxOUE4
QjA4MjQ1RTU5MDAxRTlBQkMsCiAJCQkJOTNGMTlBOEMwODI0NUU1OTAwMUU5QUJDLAogCQkJCTkz
RjE5QThEMDgyNDVFNTkwMDFFOUFCQywKLQkJCQk5M0YxOUE4RTA4MjQ1RTU5MDAxRTlBQkMsCiAJ
CQkJOTNGMTlBOEYwODI0NUU1OTAwMUU5QUJDLAogCQkJCTkzRjE5QTkwMDgyNDVFNTkwMDFFOUFC
QywKIAkJCQk5M0YxOUE5MTA4MjQ1RTU5MDAxRTlBQkMsCkBAIC01MDM2LDcgKzQ5OTgsNiBAQAog
CQkJCTkzRjE5QUMwMDgyNDVFNTkwMDFFOUFCQywKIAkJCQk5M0YxOUFDMTA4MjQ1RTU5MDAxRTlB
QkMsCiAJCQkJOTNGMTlBQzIwODI0NUU1OTAwMUU5QUJDLAotCQkJCTkzRjE5QUMzMDgyNDVFNTkw
MDFFOUFCQywKIAkJCQk5M0YxOUFDNDA4MjQ1RTU5MDAxRTlBQkMsCiAJCQkJOTNGMTlBQzUwODI0
NUU1OTAwMUU5QUJDLAogCQkJCTkzRjE5QUM2MDgyNDVFNTkwMDFFOUFCQywKQEAgLTUwNzgsNyAr
NTAzOSw2IEBACiAJCQkJOTNGMTlBRUMwODI0NUU1OTAwMUU5QUJDLAogCQkJCTkzRjE5QUVEMDgy
NDVFNTkwMDFFOUFCQywKIAkJCQk5M0YxOUFFRTA4MjQ1RTU5MDAxRTlBQkMsCi0JCQkJOTNGMTlB
RUYwODI0NUU1OTAwMUU5QUJDLAogCQkJCTkzRjE5QUYwMDgyNDVFNTkwMDFFOUFCQywKIAkJCQk5
M0YxOUFGMTA4MjQ1RTU5MDAxRTlBQkMsCiAJCQkJOTNGMTlBRjIwODI0NUU1OTAwMUU5QUJDLApA
QCAtNTE0Miw2ICs1MTAyLDcgQEAKIAkJCQkxQTY5RDM4MjA4NTYyNzQxMDAwOTg4MEQsCiAJCQkJ
NTUwQTBCQzkwODVGNjAzOTAwNzM1M0Q2LAogCQkJCTU1MEEwQkNEMDg1RjYwNEQwMDczNTNENiwK
KwkJCQk1NTM5MDE2MDA4NkEzMzJFMDAxRUQ3RkUsCiAJCQkJNjVGMzc4MkEwODcwRDk1ODAwMEIy
Rjk0LAogCQkJCUE4NUQ3QzE4MDg3QTZFRDkwMDZBOTE3MiwKIAkJCSk7CkBAIC01Nzg0LDEyICs1
NzQ1LDYgQEAKIAkJCXNldHRpbmdzID0gewogCQkJfTsKIAkJfTsKLQkJOTNGMTlBOEUwODI0NUU1
OTAwMUU5QUJDID0gewotCQkJZmlsZVJlZiA9IEY1MjNEMjM1MDJERTQzOTYwMTg2MzVDQTsKLQkJ
CWlzYSA9IFBCWEJ1aWxkRmlsZTsKLQkJCXNldHRpbmdzID0gewotCQkJfTsKLQkJfTsKIAkJOTNG
MTlBOEYwODI0NUU1OTAwMUU5QUJDID0gewogCQkJZmlsZVJlZiA9IEY1MjNEMjM3MDJERTQzOTYw
MTg2MzVDQTsKIAkJCWlzYSA9IFBCWEJ1aWxkRmlsZTsKQEAgLTYxMDIsMTIgKzYwNTcsNiBAQAog
CQkJc2V0dGluZ3MgPSB7CiAJCQl9OwogCQl9OwotCQk5M0YxOUFDMzA4MjQ1RTU5MDAxRTlBQkMg
PSB7Ci0JCQlmaWxlUmVmID0gMzU0RjI0OEEwMkVFMjg1OTBBQ0EyQUNBOwotCQkJaXNhID0gUEJY
QnVpbGRGaWxlOwotCQkJc2V0dGluZ3MgPSB7Ci0JCQl9OwotCQl9OwogCQk5M0YxOUFDNDA4MjQ1
RTU5MDAxRTlBQkMgPSB7CiAJCQlmaWxlUmVmID0gRjUxMTdCQ0EwMkY5RkZFRjAxODYzNUNFOwog
CQkJaXNhID0gUEJYQnVpbGRGaWxlOwpAQCAtNjM1NCwxMiArNjMwMyw2IEBACiAJCQlzZXR0aW5n
cyA9IHsKIAkJCX07CiAJCX07Ci0JCTkzRjE5QUVGMDgyNDVFNTkwMDFFOUFCQyA9IHsKLQkJCWZp
bGVSZWYgPSBCQzdGREUzMTA1QzFEOUFCMDA3MEE5MDI7Ci0JCQlpc2EgPSBQQlhCdWlsZEZpbGU7
Ci0JCQlzZXR0aW5ncyA9IHsKLQkJCX07Ci0JCX07CiAJCTkzRjE5QUYwMDgyNDVFNTkwMDFFOUFC
QyA9IHsKIAkJCWZpbGVSZWYgPSBCQzNCMzY0NTA1QzlENUUyMDBFNDI5MDI7CiAJCQlpc2EgPSBQ
QlhCdWlsZEZpbGU7CkBAIC02OTQxLDIyICs2ODg0LDYgQEAKIAkJCXJlZlR5cGUgPSA0OwogCQkJ
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKLQkJQkM3RkRFMzEwNUMxRDlBQjAwNzBBOTAy
ID0gewotCQkJZmlsZUVuY29kaW5nID0gMzA7Ci0JCQlpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOwot
CQkJbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7Ci0JCQlwYXRoID0geG1s
X25hbWVzcGFjZV90YWJsZS5jcHA7Ci0JCQlyZWZUeXBlID0gNDsKLQkJCXNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7Ci0JCX07Ci0JCUJDN0ZERTMyMDVDMUQ5QUIwMDcwQTkwMiA9IHsKLQkJCWZpbGVF
bmNvZGluZyA9IDMwOwotCQkJaXNhID0gUEJYRmlsZVJlZmVyZW5jZTsKLQkJCWxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7Ci0JCQlwYXRoID0geG1sX25hbWVzcGFjZV90YWJsZS5o
OwotCQkJcmVmVHlwZSA9IDQ7Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwotCQl9OwogCQlC
QzgwQTY5MzA0NjhCNzgxMDBEQkNDOUMgPSB7CiAJCQlmaWxlRW5jb2RpbmcgPSAzMDsKIAkJCWlz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7CkBAIC03NTE3LDggKzc0NDQsNiBAQAogCQkJCTJEOTA2NjBD
MDY2NUQ5MzcwMDZCNkYxQSwKIAkJCQlGNTg3ODRDRDAyREUzNzU5MDFFQTQxMjIsCiAJCQkJRjU4
Nzg0REEwMkRFMzc1OTAxRUE0MTIyLAotCQkJCTM1NEYyNDg5MDJFRTI4NTkwQUNBMkFDQSwKLQkJ
CQkzNTRGMjQ4QTAyRUUyODU5MEFDQTJBQ0EsCiAJCQkJOTMxQzhBMTYwMzgwMjg4QjAwODYzNUNF
LAogCQkJCTkzMUM4QTE3MDM4MDI4OEIwMDg2MzVDRSwKIAkJCQlCRUY3RUVBMDA1RkY4RjBEMDA5
NzE3RUUsCkBAIC04NDg3LDIyICs4NDEyLDYgQEAKIAkJCXJlZlR5cGUgPSA0OwogCQkJc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKLQkJRjUyM0QyMzUwMkRFNDM5NjAxODYzNUNBID0gewot
CQkJZmlsZUVuY29kaW5nID0gMzA7Ci0JCQlpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOwotCQkJbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7Ci0JCQlwYXRoID0gZHRkLmNwcDsK
LQkJCXJlZlR5cGUgPSA0OwotCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsKLQkJRjUy
M0QyMzYwMkRFNDM5NjAxODYzNUNBID0gewotCQkJZmlsZUVuY29kaW5nID0gMzA7Ci0JCQlpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOwotCQkJbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsKLQkJCXBhdGggPSBkdGQuaDsKLQkJCXJlZlR5cGUgPSA0OwotCQkJc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsKLQkJfTsKIAkJRjUyM0QyMzcwMkRFNDM5NjAxODYzNUNBID0gewogCQkJZmlsZUVu
Y29kaW5nID0gMzA7CiAJCQlpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOwpAQCAtODczMSw4ICs4NjQw
LDggQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCTU1MEEwQkNCMDg1RjYwNEQwMDczNTNENiwKIAkJ
CQk1NTBBMEJDQzA4NUY2MDREMDA3MzUzRDYsCi0JCQkJRjUyM0QyMzUwMkRFNDM5NjAxODYzNUNB
LAotCQkJCUY1MjNEMjM2MDJERTQzOTYwMTg2MzVDQSwKKwkJCQk1NTM5MDEwRDA4NkEyRjczMDAx
RUQ3RkUsCisJCQkJNTUzOTAxNUYwODZBMzMyRTAwMUVEN0ZFLAogCQkJCUY1MjNEMjM3MDJERTQz
OTYwMTg2MzVDQSwKIAkJCQlGNTIzRDIzODAyREU0Mzk2MDE4NjM1Q0EsCiAJCQkJRjUyM0QyMzkw
MkRFNDM5NjAxODYzNUNBLApAQCAtOTQ0Miw4ICs5MzUxLDYgQEAKIAkJCQlGNTIzRDMwNjAyREU0
NDc2MDE4NjM1Q0EsCiAJCQkJRjUyM0QzMDcwMkRFNDQ3NjAxODYzNUNBLAogCQkJCUY1MjNEMzA4
MDJERTQ0NzYwMTg2MzVDQSwKLQkJCQlCQzdGREUzMTA1QzFEOUFCMDA3MEE5MDIsCi0JCQkJQkM3
RkRFMzIwNUMxRDlBQjAwNzBBOTAyLAogCQkJCUY1MjNEMzA5MDJERTQ0NzYwMTg2MzVDQSwKIAkJ
CQlGNTIzRDMwQTAyREU0NDc2MDE4NjM1Q0EsCiAJCQkpOwpJbmRleDoga2h0bWwva2h0bWxfcGFy
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwva2h0bWxf
cGFydC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzI1CmRpZmYgLXUgLXAgLXIxLjMyNSBr
aHRtbC9raHRtbF9wYXJ0LmNwcAotLS0ga2h0bWwva2h0bWxfcGFydC5jcHAJMjggSnVuIDIwMDUg
MjM6MjI6MTYgLTAwMDAJMS4zMjUKKysrIGtodG1sL2todG1sX3BhcnQuY3BwCTUgSnVsIDIwMDUg
MjM6MjA6MDAgLTAwMDAKQEAgLTU3MjQsNyArNTcyNCw3IEBAIENTU0NvbXB1dGVkU3R5bGVEZWNs
YXJhdGlvbkltcGwgKktIVE1MUGEKICAgICBpbnQgZXhjZXB0aW9uQ29kZSA9IDA7CiAKICAgICBp
ZiAoZC0+bV90eXBpbmdTdHlsZSkgewotICAgICAgICBzdHlsZUVsZW1lbnQgPSB4bWxEb2NJbXBs
KCktPmNyZWF0ZUhUTUxFbGVtZW50KCJzcGFuIiwgZXhjZXB0aW9uQ29kZSk7CisgICAgICAgIHN0
eWxlRWxlbWVudCA9IHhtbERvY0ltcGwoKS0+Y3JlYXRlRWxlbWVudE5TKFhIVE1MX05BTUVTUEFD
RSwgInNwYW4iLCBleGNlcHRpb25Db2RlKTsKICAgICAgICAgYXNzZXJ0KGV4Y2VwdGlvbkNvZGUg
PT0gMCk7CiAKICAgICAgICAgc3R5bGVFbGVtZW50LT5yZWYoKTsKSW5kZXg6IGtodG1sL2todG1s
dmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwva2h0
bWx2aWV3LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMzMKZGlmZiAtdSAtcCAtcjEuMTMz
IGtodG1sL2todG1sdmlldy5jcHAKLS0tIGtodG1sL2todG1sdmlldy5jcHAJMTEgTWF5IDIwMDUg
MDA6NTg6MjcgLTAwMDAJMS4xMzMKKysrIGtodG1sL2todG1sdmlldy5jcHAJNSBKdWwgMjAwNSAy
MzoyMDowMSAtMDAwMApAQCAtNjA3LDEyICs2MDcsMTIgQEAgdm9pZCBLSFRNTFZpZXc6OmxheW91
dCgpCiAgICAgaWYgKGRvY3VtZW50LT5pc0hUTUxEb2N1bWVudCgpKSB7CiAgICAgICAgIE5vZGVJ
bXBsICpib2R5ID0gc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50SW1wbCo+KGRvY3VtZW50KS0+Ym9k
eSgpOwogICAgICAgICBpZiAoYm9keSAmJiBib2R5LT5yZW5kZXJlcigpKSB7Ci0gICAgICAgICAg
ICBpZiAoYm9keS0+aWQoKSA9PSBJRF9GUkFNRVNFVCkgeworICAgICAgICAgICAgaWYgKGJvZHkt
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpmcmFtZXNldCgpKSkgewogICAgICAgICAgICAgICAgIGJv
ZHktPnJlbmRlcmVyKCktPnNldE5lZWRzTGF5b3V0KHRydWUpOwogICAgICAgICAgICAgICAgIHZN
b2RlID0gQWx3YXlzT2ZmOwogICAgICAgICAgICAgICAgIGhNb2RlID0gQWx3YXlzT2ZmOwogICAg
ICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoYm9keS0+aWQoKSA9PSBJRF9CT0RZKSB7
CisgICAgICAgICAgICBlbHNlIGlmIChib2R5LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Ym9keSgp
KSkgewogICAgICAgICAgICAgICAgIFJlbmRlck9iamVjdCogbyA9IChyb290UmVuZGVyZXItPnN0
eWxlKCktPm92ZXJmbG93KCkgPT0gT1ZJU0lCTEUpID8gYm9keS0+cmVuZGVyZXIoKSA6IHJvb3RS
ZW5kZXJlcjsKICAgICAgICAgICAgICAgICBhcHBseU92ZXJmbG93VG9WaWV3cG9ydChvLCBoTW9k
ZSwgdk1vZGUpOyAvLyBPbmx5IGFwcGxpZXMgdG8gSFRNTCBVQXMsIG5vdCB0byBYTUwvWEhUTUwg
VUFzCiAgICAgICAgICAgICB9CkBAIC04NzcsMTAgKzg3Nyw3IEBAIHZvaWQgS0hUTUxWaWV3Ojp2
aWV3cG9ydE1vdXNlRG91YmxlQ2xpY2sKIAogc3RhdGljIGJvb2wgaXNTdWJtaXRJbWFnZShET006
Ok5vZGVJbXBsICpub2RlKQogewotICAgIHJldHVybiBub2RlCi0gICAgICAgICYmIG5vZGUtPmlz
SFRNTEVsZW1lbnQoKQotICAgICAgICAmJiBub2RlLT5pZCgpID09IElEX0lOUFVUCi0gICAgICAg
ICYmIHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnRJbXBsKj4obm9kZSktPmlucHV0VHlwZSgp
ID09IEhUTUxJbnB1dEVsZW1lbnRJbXBsOjpJTUFHRTsKKyAgICByZXR1cm4gbm9kZSAmJiBub2Rl
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW5wdXQoKSkgJiYgc3RhdGljX2Nhc3Q8SFRNTElucHV0
RWxlbWVudEltcGwqPihub2RlKS0+aW5wdXRUeXBlKCkgPT0gSFRNTElucHV0RWxlbWVudEltcGw6
OklNQUdFOwogfQogCiB2b2lkIEtIVE1MVmlldzo6dmlld3BvcnRNb3VzZU1vdmVFdmVudCggUU1v
dXNlRXZlbnQgKiBfbW91c2UgKQpJbmRleDoga2h0bWwvY3NzL2Nzc19iYXNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9jc3MvY3NzX2Jhc2UuY3BwLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjE1CmRpZmYgLXUgLXAgLXIxLjE1IGtodG1sL2Nzcy9jc3Nf
YmFzZS5jcHAKLS0tIGtodG1sL2Nzcy9jc3NfYmFzZS5jcHAJMTIgSnVuIDIwMDUgMDQ6MDc6MzAg
LTAwMDAJMS4xNQorKysga2h0bWwvY3NzL2Nzc19iYXNlLmNwcAk1IEp1bCAyMDA1IDIzOjIwOjAx
IC0wMDAwCkBAIC05Myw5ICs5MywxNSBAQCBTdHlsZUxpc3RJbXBsOjp+U3R5bGVMaXN0SW1wbCgp
CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK2NvbnN0IFF1YWxpZmllZE5hbWUmIENT
U1NlbGVjdG9yOjphbnlUYWdOYW1lKCkKK3sKKyAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBhbnlO
YW1lKG51bGxBdG9tLCBzdGFyQXRvbSwgc3RhckF0b20pOworICAgIHJldHVybiBhbnlOYW1lOwor
fQorCiB2b2lkIENTU1NlbGVjdG9yOjpwcmludCh2b2lkKQogewotICAgIGtkRGVidWcoIDYwODAg
KSA8PCAiW1NlbGVjdG9yOiB0YWcgPSAiIDw8ICAgICAgIHRhZyA8PCAiLCBhdHRyID0gXCIiIDw8
IGF0dHIgPDwgIlwiLCBtYXRjaCA9IFwiIiA8PCBtYXRjaAorICAgIGtkRGVidWcoIDYwODAgKSA8
PCAiW1NlbGVjdG9yOiB0YWcgPSAiIDw8ICAgICAgIHRhZy5sb2NhbE5hbWUoKS5zdHJpbmcoKSA8
PCAiLCBhdHRyID0gXCIiIDw8IGF0dHIgPDwgIlwiLCBtYXRjaCA9IFwiIiA8PCBtYXRjaAogCQkg
ICAgPDwgIlwiIHZhbHVlID0gXCIiIDw8IHZhbHVlLnN0cmluZygpLmxhdGluMSgpIDw8ICJcIiBy
ZWxhdGlvbiA9ICIgPDwgKGludClyZWxhdGlvbgogCQkgICAgPDwgIl0iIDw8IGVuZGw7CiAgICAg
aWYgKCB0YWdIaXN0b3J5ICkKQEAgLTEwNyw3ICsxMTMsNyBAQCB1bnNpZ25lZCBpbnQgQ1NTU2Vs
ZWN0b3I6OnNwZWNpZmljaXR5KCkKIHsKICAgICAvLyBGSVhNRTogUHNldWRvLWVsZW1lbnRzIGFu
ZCBwc2V1ZG8tY2xhc3NlcyBkbyBub3QgaGF2ZSB0aGUgc2FtZSBzcGVjaWZpY2l0eS4gVGhpcyBm
dW5jdGlvbgogICAgIC8vIGlzbid0IHF1aXRlIGNvcnJlY3QuCi0gICAgaW50IHMgPSAoKGxvY2Fs
TmFtZVBhcnQodGFnKSA9PSBhbnlMb2NhbE5hbWUpID8gMCA6IDEpOworICAgIGludCBzID0gKHRh
Zy5sb2NhbE5hbWUoKSA9PSBzdGFyQXRvbSA/IDAgOiAxKTsKICAgICBzd2l0Y2gobWF0Y2gpCiAg
ICAgewogICAgIGNhc2UgSWQ6CkBAIC0yNDAsNjAgKzI0Niw1OSBAQCBib29sIENTU1NlbGVjdG9y
OjpvcGVyYXRvciA9PSAoIGNvbnN0IENTCiAKIERPTVN0cmluZyBDU1NTZWxlY3Rvcjo6c2VsZWN0
b3JUZXh0KCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogU3VwcG9ydCBuYW1lc3BhY2VzIHdoZW4g
ZHVtcGluZyB0aGUgc2VsZWN0b3IgdGV4dC4gIFRoaXMgcmVxdWlyZXMgcHJlc2VydmluZwotICAg
IC8vIHRoZSBvcmlnaW5hbCBuYW1lc3BhY2UgcHJlZml4IHVzZWQuIFVnaC4gLWR3aAorICAgIC8v
IEZJWE1FOiBTdXBwb3J0IG5hbWVzcGFjZXMgd2hlbiBkdW1waW5nIHRoZSBzZWxlY3RvciB0ZXh0
LiAtZHdoCiAgICAgRE9NU3RyaW5nIHN0cjsKICAgICBjb25zdCBDU1NTZWxlY3RvciogY3MgPSB0
aGlzOwotICAgIFFfVUlOVDE2IHRhZyA9IGxvY2FsTmFtZVBhcnQoY3MtPnRhZyk7Ci0gICAgaWYg
KCB0YWcgPT0gYW55TG9jYWxOYW1lICYmIGNzLT5hdHRyID09IEFUVFJfSUQgJiYgY3MtPm1hdGNo
ID09IENTU1NlbGVjdG9yOjpFeGFjdCApCisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5h
bWUgPSBjcy0+dGFnLmxvY2FsTmFtZSgpOworICAgIGlmIChsb2NhbE5hbWUgPT0gc3RhckF0b20g
JiYgY3MtPmF0dHIgPT0gQVRUUl9JRCAmJiBjcy0+bWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OkV4YWN0
KQogICAgIHsKICAgICAgICAgc3RyID0gIiMiOwogICAgICAgICBzdHIgKz0gY3MtPnZhbHVlLnN0
cmluZygpOwogICAgIH0KLSAgICBlbHNlIGlmICggdGFnID09IGFueUxvY2FsTmFtZSAmJiBjcy0+
YXR0ciA9PSBBVFRSX0NMQVNTICYmIGNzLT5tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6Q2xhc3MgKQor
ICAgIGVsc2UgaWYgKGxvY2FsTmFtZSA9PSBzdGFyQXRvbSAmJiBjcy0+YXR0ciA9PSBBVFRSX0NM
QVNTICYmIGNzLT5tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6Q2xhc3MpCiAgICAgewogICAgICAgICBz
dHIgPSAiLiI7CiAgICAgICAgIHN0ciArPSBjcy0+dmFsdWUuc3RyaW5nKCk7CiAgICAgfQotICAg
IGVsc2UgaWYgKCB0YWcgPT0gYW55TG9jYWxOYW1lICYmIGNzLT5tYXRjaCA9PSBDU1NTZWxlY3Rv
cjo6UHNldWRvQ2xhc3MgKQorICAgIGVsc2UgaWYgKGxvY2FsTmFtZSA9PSBzdGFyQXRvbSAgJiYg
Y3MtPm1hdGNoID09IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzcykKICAgICB7CiAgICAgICAgIHN0
ciA9ICI6IjsKICAgICAgICAgc3RyICs9IGNzLT52YWx1ZS5zdHJpbmcoKTsKICAgICB9Ci0gICAg
ZWxzZSBpZiAoIHRhZyA9PSBhbnlMb2NhbE5hbWUgJiYgY3MtPm1hdGNoID09IENTU1NlbGVjdG9y
OjpQc2V1ZG9FbGVtZW50ICkKKyAgICBlbHNlIGlmIChsb2NhbE5hbWUgPT0gc3RhckF0b20gJiYg
Y3MtPm1hdGNoID09IENTU1NlbGVjdG9yOjpQc2V1ZG9FbGVtZW50KQogICAgIHsKICAgICAgICAg
c3RyID0gIjo6IjsKICAgICAgICAgc3RyICs9IGNzLT52YWx1ZS5zdHJpbmcoKTsKICAgICB9CiAg
ICAgZWxzZQogICAgIHsKLSAgICAgICAgaWYgKCB0YWcgPT0gYW55TG9jYWxOYW1lICkKKyAgICAg
ICAgaWYgKGxvY2FsTmFtZSA9PSBzdGFyQXRvbSkKICAgICAgICAgICAgIHN0ciA9ICIqIjsKICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgc3RyID0gZ2V0VGFnTmFtZSggY3MtPnRhZyApOwotICAg
ICAgICBpZiAoIGNzLT5hdHRyID09IEFUVFJfSUQgJiYgY3MtPm1hdGNoID09IENTU1NlbGVjdG9y
OjpFeGFjdCApCisgICAgICAgICAgICBzdHIgPSBsb2NhbE5hbWU7CisgICAgICAgIGlmIChjcy0+
YXR0ciA9PSBBVFRSX0lEICYmIGNzLT5tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6RXhhY3QpCiAgICAg
ICAgIHsKICAgICAgICAgICAgIHN0ciArPSAiIyI7CiAgICAgICAgICAgICBzdHIgKz0gY3MtPnZh
bHVlLnN0cmluZygpOwogICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKCBjcy0+YXR0ciA9PSBB
VFRSX0NMQVNTICYmIGNzLT5tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6Q2xhc3MgKQorICAgICAgICBl
bHNlIGlmIChjcy0+YXR0ciA9PSBBVFRSX0NMQVNTICYmIGNzLT5tYXRjaCA9PSBDU1NTZWxlY3Rv
cjo6Q2xhc3MpCiAgICAgICAgIHsKICAgICAgICAgICAgIHN0ciArPSAiLiI7CiAgICAgICAgICAg
ICBzdHIgKz0gY3MtPnZhbHVlLnN0cmluZygpOwogICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYg
KCBjcy0+bWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzICkKKyAgICAgICAgZWxzZSBp
ZiAoY3MtPm1hdGNoID09IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzcykKICAgICAgICAgewogICAg
ICAgICAgICAgc3RyICs9ICI6IjsKICAgICAgICAgICAgIHN0ciArPSBjcy0+dmFsdWUuc3RyaW5n
KCk7CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoIGNzLT5tYXRjaCA9PSBDU1NTZWxlY3Rv
cjo6UHNldWRvRWxlbWVudCApCisgICAgICAgIGVsc2UgaWYgKGNzLT5tYXRjaCA9PSBDU1NTZWxl
Y3Rvcjo6UHNldWRvRWxlbWVudCkKICAgICAgICAgewogICAgICAgICAgICAgc3RyICs9ICI6OiI7
CiAgICAgICAgICAgICBzdHIgKz0gY3MtPnZhbHVlLnN0cmluZygpOwogICAgICAgICB9CiAgICAg
ICAgIC8vIG9wdGlvbmFsIGF0dHJpYnV0ZQotICAgICAgICBpZiAoIGNzLT5hdHRyICkgewotICAg
ICAgICAgICAgRE9NU3RyaW5nIGF0dHJOYW1lID0gZ2V0QXR0ck5hbWUoIGNzLT5hdHRyICk7Cisg
ICAgICAgIGlmIChjcy0+YXR0cikgeworICAgICAgICAgICAgRE9NU3RyaW5nIGF0dHJOYW1lID0g
Z2V0QXR0ck5hbWUoY3MtPmF0dHIpOwogICAgICAgICAgICAgc3RyICs9ICJbIjsKICAgICAgICAg
ICAgIHN0ciArPSBhdHRyTmFtZTsKICAgICAgICAgICAgIHN3aXRjaCAoY3MtPm1hdGNoKSB7Cklu
ZGV4OiBraHRtbC9jc3MvY3NzX2Jhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3Qv
V2ViQ29yZS9raHRtbC9jc3MvY3NzX2Jhc2UuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMgpk
aWZmIC11IC1wIC1yMS4xMiBraHRtbC9jc3MvY3NzX2Jhc2UuaAotLS0ga2h0bWwvY3NzL2Nzc19i
YXNlLmgJMTIgSnVuIDIwMDUgMDQ6MDc6MzAgLTAwMDAJMS4xMgorKysga2h0bWwvY3NzL2Nzc19i
YXNlLmgJNSBKdWwgMjAwNSAyMzoyMDowMSAtMDAwMApAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1
ZGUgImRvbS9kb21fc3RyaW5nLmgiCiAjaW5jbHVkZSAiZG9tL2RvbV9taXNjLmgiCiAjaW5jbHVk
ZSAieG1sL2RvbV9ub2RlaW1wbC5oIgorI2luY2x1ZGUgImRvbV9xbmFtZS5oIgogI2luY2x1ZGUg
Im1pc2Mvc2hhcmVkLmgiCiAjaW5jbHVkZSA8cWRhdGV0aW1lLmg+CiAjaW5jbHVkZSA8cXB0cmxp
c3QuaD4KQEAgLTQ2LDIwICs0NywyMCBAQCBuYW1lc3BhY2UgRE9NIHsKICAgICBjbGFzcyBEb2N1
bWVudEltcGw7CiAKICAgICBzdHJ1Y3QgQ1NTTmFtZXNwYWNlIHsKLSAgICAgICAgRE9NU3RyaW5n
IG1fcHJlZml4OwotICAgICAgICBET01TdHJpbmcgbV91cmk7CisgICAgICAgIEF0b21pY1N0cmlu
ZyBtX3ByZWZpeDsKKyAgICAgICAgQXRvbWljU3RyaW5nIG1fdXJpOwogICAgICAgICBDU1NOYW1l
c3BhY2UqIG1fcGFyZW50OwogCiAgICAgICAgIE1BSU5fVEhSRUFEX0FMTE9DQVRFRDsKIAotICAg
ICAgICBDU1NOYW1lc3BhY2UoY29uc3QgRE9NU3RyaW5nJiBwLCBjb25zdCBET01TdHJpbmcmIHUs
IENTU05hbWVzcGFjZSogcGFyZW50KSAKKyAgICAgICAgQ1NTTmFtZXNwYWNlKGNvbnN0IEF0b21p
Y1N0cmluZyYgcCwgY29uc3QgQXRvbWljU3RyaW5nJiB1LCBDU1NOYW1lc3BhY2UqIHBhcmVudCkg
CiAgICAgICAgICAgICA6bV9wcmVmaXgocCksIG1fdXJpKHUpLCBtX3BhcmVudChwYXJlbnQpIHt9
CiAgICAgICAgIH5DU1NOYW1lc3BhY2UoKSB7IGRlbGV0ZSBtX3BhcmVudDsgfQogICAgICAgICAK
LSAgICAgICAgY29uc3QgRE9NU3RyaW5nJiB1cmkoKSB7IHJldHVybiBtX3VyaTsgfQotICAgICAg
ICBjb25zdCBET01TdHJpbmcmIHByZWZpeCgpIHsgcmV0dXJuIG1fcHJlZml4OyB9CisgICAgICAg
IGNvbnN0IEF0b21pY1N0cmluZyYgdXJpKCkgeyByZXR1cm4gbV91cmk7IH0KKyAgICAgICAgY29u
c3QgQXRvbWljU3RyaW5nJiBwcmVmaXgoKSB7IHJldHVybiBtX3ByZWZpeDsgfQogICAgICAgICAK
LSAgICAgICAgQ1NTTmFtZXNwYWNlKiBuYW1lc3BhY2VGb3JQcmVmaXgoY29uc3QgRE9NU3RyaW5n
JiBwcmVmaXgpIHsKKyAgICAgICAgQ1NTTmFtZXNwYWNlKiBuYW1lc3BhY2VGb3JQcmVmaXgoY29u
c3QgQXRvbWljU3RyaW5nJiBwcmVmaXgpIHsKICAgICAgICAgICAgIGlmIChwcmVmaXggPT0gbV9w
cmVmaXgpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgICAgICBpZiAobV9w
YXJlbnQpCkBAIC03Miw4ICs3MywxNCBAQCBuYW1lc3BhY2UgRE9NIHsKICAgICBjbGFzcyBDU1NT
ZWxlY3RvcgogICAgIHsKICAgICBwdWJsaWM6Ci0JQ1NTU2VsZWN0b3IoKQotCSAgICA6IHRhZ0hp
c3RvcnkoMCksIHNpbXBsZVNlbGVjdG9yKDApLCBuZXh0U2VsZWN0b3IoMCksIGF0dHIoMCksIHRh
ZyhhbnlRTmFtZSksCisgICAgICAgIENTU1NlbGVjdG9yKCkKKyAgICAgICAgICAgIDogdGFnSGlz
dG9yeSgwKSwgc2ltcGxlU2VsZWN0b3IoMCksIG5leHRTZWxlY3RvcigwKSwgYXR0cigwKSwgdGFn
KGFueVRhZ05hbWUoKSksCisgICAgICAgICAgICAgIHJlbGF0aW9uKCBEZXNjZW5kYW50ICksIG1h
dGNoKCBOb25lICksCisgICAgICAgICAgICAgIHBzZXVkb0lkKCAwICksIF9wc2V1ZG9UeXBlKFBz
ZXVkb05vdFBhcnNlZCkKKyAgICAgICAge30KKyAgICAgICAgCisJQ1NTU2VsZWN0b3IoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgcU5hbWUpCisJICAgIDogdGFnSGlzdG9yeSgwKSwgc2ltcGxlU2VsZWN0
b3IoMCksIG5leHRTZWxlY3RvcigwKSwgYXR0cigwKSwgdGFnKHFOYW1lKSwKICAgICAgICAgICAg
ICAgcmVsYXRpb24oIERlc2NlbmRhbnQgKSwgbWF0Y2goIE5vbmUgKSwKICAgICAgICAgICAgICAg
cHNldWRvSWQoIDAgKSwgX3BzZXVkb1R5cGUoUHNldWRvTm90UGFyc2VkKQogICAgICAgICB7fQpA
QCAtMTY3LDEyICsxNzQsMTcgQEAgbmFtZXNwYWNlIERPTSB7CiAgICAgICAgICAgICByZXR1cm4g
X3BzZXVkb1R5cGU7CiAgICAgICAgIH0KIAorICAgICAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVk
TmFtZSYgYW55VGFnTmFtZSgpOworCisgICAgICAgIGJvb2wgaGFzVGFnKCkgY29uc3QgeyByZXR1
cm4gdGFnICE9IGFueVRhZ05hbWUoKTsgfQorCiAJbXV0YWJsZSBET006OkF0b21pY1N0cmluZyB2
YWx1ZTsKIAlDU1NTZWxlY3RvciogdGFnSGlzdG9yeTsKICAgICAgICAgQ1NTU2VsZWN0b3IqIHNp
bXBsZVNlbGVjdG9yOyAvLyBVc2VkIGZvciA6bm90LgogICAgICAgICBDU1NTZWxlY3RvciogbmV4
dFNlbGVjdG9yOyAvLyB1c2VkIGZvciAsLWNoYWluZWQgc2VsZWN0b3JzCiAJUV9VSU5UMzIgICAg
IGF0dHI7Ci0JUV9VSU5UMzIgICAgIHRhZzsKKwkKKyAgICAgICAgUXVhbGlmaWVkTmFtZSB0YWc7
CiAKICAgICAgICAgUmVsYXRpb24gcmVsYXRpb24gICAgICAgICAgICAgIDogMzsKIAltdXRhYmxl
IE1hdGNoICBtYXRjaCAgICAgICAgICAgOiA0OwpJbmRleDoga2h0bWwvY3NzL2Nzc19ydWxlaW1w
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvY3NzL2Nz
c19ydWxlaW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTgKZGlmZiAtdSAtcCAtcjEu
MTgga2h0bWwvY3NzL2Nzc19ydWxlaW1wbC5jcHAKLS0tIGtodG1sL2Nzcy9jc3NfcnVsZWltcGwu
Y3BwCTExIE1heSAyMDA1IDA1OjQ5OjM0IC0wMDAwCTEuMTgKKysrIGtodG1sL2Nzcy9jc3NfcnVs
ZWltcGwuY3BwCTUgSnVsIDIwMDUgMjM6MjA6MDIgLTAwMDAKQEAgLTMxLDcgKzMxLDYgQEAKICNp
bmNsdWRlICJjc3MvY3NzX3J1bGVpbXBsLmgiCiAKICNpbmNsdWRlICJtaXNjL2xvYWRlci5oIgot
I2luY2x1ZGUgIm1pc2MvaHRtbHRhZ3MuaCIKICNpbmNsdWRlICJtaXNjL2h0bWxhdHRycy5oIgog
I2luY2x1ZGUgInhtbC9kb21fZG9jaW1wbC5oIgogCkluZGV4OiBraHRtbC9jc3MvY3NzX3N0eWxl
c2hlZXRpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRt
bC9jc3MvY3NzX3N0eWxlc2hlZXRpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMgpk
aWZmIC11IC1wIC1yMS4xMiBraHRtbC9jc3MvY3NzX3N0eWxlc2hlZXRpbXBsLmNwcAotLS0ga2h0
bWwvY3NzL2Nzc19zdHlsZXNoZWV0aW1wbC5jcHAJMTEgTWF5IDIwMDUgMDA6NTg6MjcgLTAwMDAJ
MS4xMgorKysga2h0bWwvY3NzL2Nzc19zdHlsZXNoZWV0aW1wbC5jcHAJNSBKdWwgMjAwNSAyMzoy
MDowMiAtMDAwMApAQCAtMzgsOCArMzgsNiBAQAogI2luY2x1ZGUgImh0bWwvaHRtbF9kb2N1bWVu
dGltcGwuaCIKICNpbmNsdWRlICJtaXNjL2xvYWRlci5oIgogCi0jaW5jbHVkZSAieG1sX25hbWVz
cGFjZV90YWJsZS5oIgotCiAjaW5jbHVkZSA8a2RlYnVnLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBE
T007CkBAIC0yMTAsNyArMjA4LDcgQEAgdm9pZCBDU1NTdHlsZVNoZWV0SW1wbDo6ZGVsZXRlUnVs
ZSggdW5zaQogICAgIGItPmRlcmVmKCk7CiB9CiAKLXZvaWQgQ1NTU3R5bGVTaGVldEltcGw6OmFk
ZE5hbWVzcGFjZShDU1NQYXJzZXIqIHAsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBwcmVmaXgsIGNv
bnN0IERPTTo6RE9NU3RyaW5nJiB1cmkpCit2b2lkIENTU1N0eWxlU2hlZXRJbXBsOjphZGROYW1l
c3BhY2UoQ1NTUGFyc2VyKiBwLCBjb25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCwgY29uc3QgQXRv
bWljU3RyaW5nJiB1cmkpCiB7CiAgICAgaWYgKHVyaS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
bjsKQEAgLTIyMCwyNiArMjE4LDIxIEBAIHZvaWQgQ1NTU3R5bGVTaGVldEltcGw6OmFkZE5hbWVz
cGFjZShDU1MKICAgICBpZiAocHJlZml4LmlzRW1wdHkoKSkKICAgICAgICAgLy8gU2V0IHRoZSBk
ZWZhdWx0IG5hbWVzcGFjZSBvbiB0aGUgcGFyc2VyIHNvIHRoYXQgc2VsZWN0b3JzIHRoYXQgb21p
dCBuYW1lc3BhY2UgaW5mbyB3aWxsCiAgICAgICAgIC8vIGJlIGFibGUgdG8gcGljayBpdCB1cCBl
YXNpbHkuCi0gICAgICAgIHAtPmRlZmF1bHROYW1lc3BhY2UgPSBYbWxOYW1lc3BhY2VUYWJsZTo6
Z2V0TmFtZXNwYWNlSUQodXJpLCBmYWxzZSk7CisgICAgICAgIHAtPmRlZmF1bHROYW1lc3BhY2Ug
PSB1cmk7CiB9CiAKLXZvaWQgQ1NTU3R5bGVTaGVldEltcGw6OmRldGVybWluZU5hbWVzcGFjZShR
X1VJTlQzMiYgaWQsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBwcmVmaXgpCitjb25zdCBBdG9taWNT
dHJpbmcmIENTU1N0eWxlU2hlZXRJbXBsOjpkZXRlcm1pbmVOYW1lc3BhY2UoY29uc3QgQXRvbWlj
U3RyaW5nJiBwcmVmaXgpCiB7Ci0gICAgLy8gSWYgdGhlIHN0eWxlc2hlZXQgaGFzIG5vIG5hbWVz
cGFjZXMgd2UgY2FuIGp1c3QgcmV0dXJuLiAgVGhlcmUgd29uJ3QgYmUgYW55IG5lZWQgdG8gZXZl
ciBjaGVjawotICAgIC8vIG5hbWVzcGFjZSB2YWx1ZXMgaW4gc2VsZWN0b3JzLgotICAgIGlmICgh
bV9uYW1lc3BhY2VzKQotICAgICAgICByZXR1cm47Ci0gICAgCiAgICAgaWYgKHByZWZpeC5pc0Vt
cHR5KCkpCi0gICAgICAgIGlkID0gbWFrZUlkKG5vTmFtZXNwYWNlLCBsb2NhbE5hbWVQYXJ0KGlk
KSk7IC8vIE5vIG5hbWVzcGFjZS4gSWYgYW4gZWxlbWVudC9hdHRyaWJ1dGUgaGFzIGEgbmFtZXNw
YWNlLCB3ZSB3b24ndCBtYXRjaCBpdC4KLSAgICBlbHNlIGlmIChwcmVmaXggPT0gIioiKQotICAg
ICAgICBpZCA9IG1ha2VJZChhbnlOYW1lc3BhY2UsIGxvY2FsTmFtZVBhcnQoaWQpKTsgLy8gV2Un
bGwgbWF0Y2ggYW55IG5hbWVzcGFjZS4KLSAgICBlbHNlIHsKKyAgICAgICAgcmV0dXJuIGVtcHR5
QXRvbTsgLy8gTm8gbmFtZXNwYWNlLiBJZiBhbiBlbGVtZW50L2F0dHJpYnV0ZSBoYXMgYSBuYW1l
c3BhY2UsIHdlIHdvbid0IG1hdGNoIGl0LgorICAgIGVsc2UgaWYgKHByZWZpeCA9PSBzdGFyQXRv
bSkKKyAgICAgICAgcmV0dXJuIHN0YXJBdG9tOyAvLyBXZSdsbCBtYXRjaCBhbnkgbmFtZXNwYWNl
LgorICAgIGVsc2UgaWYgKG1fbmFtZXNwYWNlcykgewogICAgICAgICBDU1NOYW1lc3BhY2UqIG5z
ID0gbV9uYW1lc3BhY2VzLT5uYW1lc3BhY2VGb3JQcmVmaXgocHJlZml4KTsKICAgICAgICAgaWYg
KG5zKQotICAgICAgICAgICAgLy8gTG9vayB1cCB0aGUgaWQgZm9yIHRoaXMgbmFtZXNwYWNlIFVS
SS4KLSAgICAgICAgICAgIGlkID0gbWFrZUlkKFhtbE5hbWVzcGFjZVRhYmxlOjpnZXROYW1lc3Bh
Y2VJRChucy0+dXJpKCksIGZhbHNlKSwgbG9jYWxOYW1lUGFydChpZCkpOworICAgICAgICAgICAg
cmV0dXJuIG5zLT51cmkoKTsKICAgICB9CisgICAgcmV0dXJuIGVtcHR5QXRvbTsgLy8gQXNzdW1l
IHdlIHdvbnQgbWF0Y2ggYW55IG5hbWVzcGFjZXMuCiB9CiAKIGJvb2wgQ1NTU3R5bGVTaGVldElt
cGw6OnBhcnNlU3RyaW5nKGNvbnN0IERPTVN0cmluZyAmc3RyaW5nLCBib29sIHN0cmljdCkKSW5k
ZXg6IGtodG1sL2Nzcy9jc3Nfc3R5bGVzaGVldGltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9jc3MvY3NzX3N0eWxlc2hlZXRpbXBsLmgsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuMTEKZGlmZiAtdSAtcCAtcjEuMTEga2h0bWwvY3NzL2Nzc19zdHlsZXNo
ZWV0aW1wbC5oCi0tLSBraHRtbC9jc3MvY3NzX3N0eWxlc2hlZXRpbXBsLmgJMTEgTWF5IDIwMDUg
MDA6NTg6MjcgLTAwMDAJMS4xMQorKysga2h0bWwvY3NzL2Nzc19zdHlsZXNoZWV0aW1wbC5oCTUg
SnVsIDIwMDUgMjM6MjA6MDIgLTAwMDAKQEAgLTEwNCw4ICsxMDQsOCBAQCBwdWJsaWM6CiAgICAg
dm9pZCBkZWxldGVSdWxlICggdW5zaWduZWQgbG9uZyBpbmRleCwgaW50ICZleGNlcHRpb25jb2Rl
ICk7CiAgICAgdW5zaWduZWQgbG9uZyBhZGRSdWxlICggY29uc3QgRE9NU3RyaW5nICZzZWxlY3Rv
ciwgY29uc3QgRE9NU3RyaW5nICZzdHlsZSwgbG9uZyBpbmRleCwgaW50ICZleGNlcHRpb25jb2Rl
ICk7CiAKLSAgICB2b2lkIGFkZE5hbWVzcGFjZShDU1NQYXJzZXIqIHAsIGNvbnN0IERPTTo6RE9N
U3RyaW5nJiBwcmVmaXgsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiB1cmkpOwotICAgIHZvaWQgZGV0
ZXJtaW5lTmFtZXNwYWNlKFFfVUlOVDMyJiBpZCwgY29uc3QgRE9NOjpET01TdHJpbmcmIHByZWZp
eCk7CisgICAgdm9pZCBhZGROYW1lc3BhY2UoQ1NTUGFyc2VyKiBwLCBjb25zdCBBdG9taWNTdHJp
bmcmIHByZWZpeCwgY29uc3QgQXRvbWljU3RyaW5nJiB1cmkpOworICAgIGNvbnN0IEF0b21pY1N0
cmluZyYgZGV0ZXJtaW5lTmFtZXNwYWNlKGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4KTsKICAg
ICAKICAgICB2aXJ0dWFsIGJvb2wgcGFyc2VTdHJpbmcoIGNvbnN0IERPTVN0cmluZyAmc3RyaW5n
LCBib29sIHN0cmljdCA9IHRydWUgKTsKIApJbmRleDoga2h0bWwvY3NzL2Nzc3BhcnNlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvY3NzL2Nzc3BhcnNl
ci5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuOTgKZGlmZiAtdSAtcCAtcjEuOTgga2h0bWwv
Y3NzL2Nzc3BhcnNlci5jcHAKLS0tIGtodG1sL2Nzcy9jc3NwYXJzZXIuY3BwCTExIE1heSAyMDA1
IDAyOjEwOjA5IC0wMDAwCTEuOTgKKysrIGtodG1sL2Nzcy9jc3NwYXJzZXIuY3BwCTUgSnVsIDIw
MDUgMjM6MjA6MDQgLTAwMDAKQEAgLTEwMiw3ICsxMDIsNyBAQCBDU1NQYXJzZXI6OkNTU1BhcnNl
ciggYm9vbCBzdHJpY3RQYXJzaW5nCiAgICAgaW1wb3J0YW50ID0gZmFsc2U7CiAgICAgaW5QYXJz
ZVNob3J0SGFuZCA9IGZhbHNlOwogICAgIAotICAgIGRlZmF1bHROYW1lc3BhY2UgPSBhbnlOYW1l
c3BhY2U7CisgICAgZGVmYXVsdE5hbWVzcGFjZSA9IHN0YXJBdG9tOwogICAgIAogICAgIHl5X3N0
YXJ0ID0gMTsKIApAQCAtMTYxLDcgKzE2MSw3IEBAIHZvaWQgQ1NTUGFyc2VyOjpzZXR1cFBhcnNl
cihjb25zdCBjaGFyICoKIHZvaWQgQ1NTUGFyc2VyOjpwYXJzZVNoZWV0KCBDU1NTdHlsZVNoZWV0
SW1wbCAqc2hlZXQsIGNvbnN0IERPTVN0cmluZyAmc3RyaW5nICkKIHsKICAgICBzdHlsZUVsZW1l
bnQgPSBzaGVldDsKLSAgICBkZWZhdWx0TmFtZXNwYWNlID0gYW55TmFtZXNwYWNlOyAvLyBSZXNl
dCB0aGUgZGVmYXVsdCBuYW1lc3BhY2UuCisgICAgZGVmYXVsdE5hbWVzcGFjZSA9IHN0YXJBdG9t
OyAvLyBSZXNldCB0aGUgZGVmYXVsdCBuYW1lc3BhY2UuCiAgICAgCiAgICAgc2V0dXBQYXJzZXIg
KCIiLCBzdHJpbmcsICIiKTsKIApJbmRleDoga2h0bWwvY3NzL2Nzc3BhcnNlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2Nzcy9jc3NwYXJzZXIuaCx2CnJl
dHJpZXZpbmcgcmV2aXNpb24gMS4zMApkaWZmIC11IC1wIC1yMS4zMCBraHRtbC9jc3MvY3NzcGFy
c2VyLmgKLS0tIGtodG1sL2Nzcy9jc3NwYXJzZXIuaAkxOSBOb3YgMjAwNCAwMDoxMjoyMCAtMDAw
MAkxLjMwCisrKyBraHRtbC9jc3MvY3NzcGFyc2VyLmgJNSBKdWwgMjAwNSAyMzoyMDowNCAtMDAw
MApAQCAtMTY0LDcgKzE2NCw3IEBAIG5hbWVzcGFjZSBET00gewogCWludCBtYXhQYXJzZWRQcm9w
ZXJ0aWVzOwogCWJvb2wgaW5QYXJzZVNob3J0SGFuZDsKIAotICAgICAgICBRX1VJTlQxNiBkZWZh
dWx0TmFtZXNwYWNlOworICAgICAgICBBdG9taWNTdHJpbmcgZGVmYXVsdE5hbWVzcGFjZTsKICAg
ICAgICAgCiAJc3RhdGljIENTU1BhcnNlciAqY3VycmVudFBhcnNlcjsKIApJbmRleDoga2h0bWwv
Y3NzL2Nzc3N0eWxlc2VsZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9X
ZWJDb3JlL2todG1sL2Nzcy9jc3NzdHlsZXNlbGVjdG9yLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS4xODcKZGlmZiAtdSAtcCAtcjEuMTg3IGtodG1sL2Nzcy9jc3NzdHlsZXNlbGVjdG9yLmNw
cAotLS0ga2h0bWwvY3NzL2Nzc3N0eWxlc2VsZWN0b3IuY3BwCTEyIEp1biAyMDA1IDA0OjA3OjMw
IC0wMDAwCTEuMTg3CisrKyBraHRtbC9jc3MvY3Nzc3R5bGVzZWxlY3Rvci5jcHAJNSBKdWwgMjAw
NSAyMzoyMDowNyAtMDAwMApAQCAtMzM5LDcgKzMzOSw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rv
cjo6bWF0Y2hSdWxlcyhDU1NSdWwKICAgICAgICAgICAgIG1hdGNoUnVsZXNGb3JMaXN0KHJ1bGVz
LT5nZXRDbGFzc1J1bGVzKHNpbmdsZUNsYXNzLT5zdHJpbmcoKS5pbXBsZW1lbnRhdGlvbigpKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0
UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4KTsKICAgICB9Ci0gICAgbWF0Y2hSdWxlc0Zvckxpc3Qo
cnVsZXMtPmdldFRhZ1J1bGVzKCh2b2lkKikoaW50KWxvY2FsTmFtZVBhcnQoZWxlbWVudC0+aWQo
KSkpLAorICAgIG1hdGNoUnVsZXNGb3JMaXN0KHJ1bGVzLT5nZXRUYWdSdWxlcyhlbGVtZW50LT5s
b2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpKSwKICAgICAgICAgICAgICAgICAgICAgICBmaXJz
dFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCk7CiAgICAgbWF0Y2hSdWxlc0Zvckxpc3QocnVsZXMt
PmdldFVuaXZlcnNhbFJ1bGVzKCksIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4KTsKICAg
ICAKQEAgLTM2MCw5ICszNjAsOSBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUnVsZXNG
b3JMaXN0CiAgICAgaWYgKCFydWxlcykgcmV0dXJuOwogICAgIGZvciAoQ1NTUnVsZURhdGEqIGQg
PSBydWxlcy0+Zmlyc3QoKTsgZDsgZCA9IGQtPm5leHQoKSkgewogICAgICAgICBDU1NTdHlsZVJ1
bGVJbXBsKiBydWxlID0gZC0+cnVsZSgpOwotICAgICAgICBRX1VJTlQxNiBjc3NUYWdJZCA9IGxv
Y2FsTmFtZVBhcnQoZWxlbWVudC0+aWQoKSk7Ci0gICAgICAgIFFfVUlOVDE2IHRhZyA9IGxvY2Fs
TmFtZVBhcnQoZC0+c2VsZWN0b3IoKS0+dGFnKTsKLSAgICAgICAgaWYgKChjc3NUYWdJZCA9PSB0
YWcgfHwgdGFnID09IGFueUxvY2FsTmFtZSkgJiYgY2hlY2tTZWxlY3RvcihkLT5zZWxlY3Rvcigp
LCBlbGVtZW50KSkgeworICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSA9IGVs
ZW1lbnQtPmxvY2FsTmFtZSgpOworICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHNlbGVjdG9y
TG9jYWxOYW1lID0gZC0+c2VsZWN0b3IoKS0+dGFnLmxvY2FsTmFtZSgpOworICAgICAgICBpZiAo
KGxvY2FsTmFtZSA9PSBzZWxlY3RvckxvY2FsTmFtZSB8fCBzZWxlY3RvckxvY2FsTmFtZSA9PSBz
dGFyQXRvbSkgJiYgY2hlY2tTZWxlY3RvcihkLT5zZWxlY3RvcigpLCBlbGVtZW50KSkgewogICAg
ICAgICAgICAgLy8gSWYgdGhlIHJ1bGUgaGFzIG5vIHByb3BlcnRpZXMgdG8gYXBwbHksIHRoZW4g
aWdub3JlIGl0LgogICAgICAgICAgICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25JbXBsKiBk
ZWNsID0gcnVsZS0+ZGVjbGFyYXRpb24oKTsKICAgICAgICAgICAgIGlmICghZGVjbCB8fCAhZGVj
bC0+bGVuZ3RoKCkpIGNvbnRpbnVlOwpAQCAtNjA5LDcgKzYwOSw3IEBAIGJvb2wgQ1NTU3R5bGVT
ZWxlY3Rvcjo6Y2FuU2hhcmVTdHlsZVdpdGgKICAgICBpZiAobi0+aXNTdHlsZWRFbGVtZW50KCkp
IHsKICAgICAgICAgYm9vbCBtb3VzZUluc2lkZSA9IGVsZW1lbnQtPnJlbmRlcmVyKCkgPyBlbGVt
ZW50LT5yZW5kZXJlcigpLT5tb3VzZUluc2lkZSgpIDogZmFsc2U7CiAgICAgICAgIFN0eWxlZEVs
ZW1lbnRJbXBsKiBzID0gc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudEltcGwqPihuKTsKLSAgICAg
ICAgaWYgKHMtPnJlbmRlcmVyKCkgJiYgKHMtPmlkKCkgPT0gZWxlbWVudC0+aWQoKSkgJiYgIXMt
Pmhhc0lEKCkgJiYKKyAgICAgICAgaWYgKHMtPnJlbmRlcmVyKCkgJiYgKHMtPnRhZ05hbWUoKSA9
PSBlbGVtZW50LT50YWdOYW1lKCkpICYmICFzLT5oYXNJRCgpICYmCiAgICAgICAgICAgICAocy0+
aGFzQ2xhc3MoKSA9PSBlbGVtZW50LT5oYXNDbGFzcygpKSAmJiAhcy0+aW5saW5lU3R5bGVEZWNs
KCkgJiYKICAgICAgICAgICAgIChzLT5oYXNNYXBwZWRBdHRyaWJ1dGVzKCkgPT0gc3R5bGVkRWxl
bWVudC0+aGFzTWFwcGVkQXR0cmlidXRlcygpKSAmJgogICAgICAgICAgICAgKHMtPmlzTGluaygp
ID09IGVsZW1lbnQtPmlzTGluaygpKSAmJiAKQEAgLTg4NSwyMyArODg1LDIzIEBAIHZvaWQgQ1NT
U3R5bGVTZWxlY3Rvcjo6YWRqdXN0UmVuZGVyU3R5bGUKICAgICAgICAgLy8gU2l0ZXMgYWxzbyBj
b21tb25seSB1c2UgZGlzcGxheTppbmxpbmUvYmxvY2sgb24gPHRkPnMgYW5kIDx0YWJsZT5zLiAg
SW4gcXVpcmtzIG1vZGUgd2UgZm9yY2UKICAgICAgICAgLy8gdGhlc2UgdGFncyB0byByZXRhaW4g
dGhlaXIgZGlzcGxheSB0eXBlcy4KICAgICAgICAgaWYgKCFzdHJpY3RQYXJzaW5nICYmIGUpIHsK
LSAgICAgICAgICAgIGlmIChlLT5pZCgpID09IElEX1REKSB7CisgICAgICAgICAgICBpZiAoZS0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRkKCkpKSB7CiAgICAgICAgICAgICAgICAgc3R5bGUtPnNl
dERpc3BsYXkoVEFCTEVfQ0VMTCk7CiAgICAgICAgICAgICAgICAgc3R5bGUtPnNldEZsb2F0aW5n
KEZOT05FKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGUtPmlkKCkgPT0g
SURfVEFCTEUpCisgICAgICAgICAgICBlbHNlIGlmIChlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
dGFibGUoKSkpCiAgICAgICAgICAgICAgICAgc3R5bGUtPnNldERpc3BsYXkoc3R5bGUtPmlzRGlz
cGxheUlubGluZVR5cGUoKSA/IElOTElORV9UQUJMRSA6IFRBQkxFKTsKICAgICAgICAgfQogCiAg
ICAgICAgIC8vIEZyYW1lcyBhbmQgZnJhbWVzZXRzIG5ldmVyIGhvbm9yIHBvc2l0aW9uOnJlbGF0
aXZlIG9yIHBvc2l0aW9uOmFic29sdXRlLiAgVGhpcyBpcyBuZWNlc3NhcnkgdG8KICAgICAgICAg
Ly8gZml4IGEgY3Jhc2ggd2hlcmUgYSBzaXRlIHRyaWVzIHRvIHBvc2l0aW9uIHRoZXNlIG9iamVj
dHMuICBUaGV5IGFsc28gbmV2ZXIgaG9ub3IgZGlzcGxheS4KLSAgICAgICAgaWYgKGUgJiYgKGUt
PmlkKCkgPT0gSURfRlJBTUUgfHwgZS0+aWQoKSA9PSBJRF9GUkFNRVNFVCkpIHsKKyAgICAgICAg
aWYgKGUgJiYgKGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpmcmFtZSgpKSB8fCBlLT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6ZnJhbWVzZXQoKSkpKSB7CiAgICAgICAgICAgICBzdHlsZS0+c2V0UG9z
aXRpb24oU1RBVElDKTsKICAgICAgICAgICAgIHN0eWxlLT5zZXREaXNwbGF5KEJMT0NLKTsKICAg
ICAgICAgfQogCiAgICAgICAgIC8vIFRhYmxlIGhlYWRlcnMgd2l0aCBhIHRleHQtYWxpZ24gb2Yg
YXV0byB3aWxsIGNoYW5nZSB0aGUgdGV4dC1hbGlnbiB0byBjZW50ZXIuCi0gICAgICAgIGlmIChl
ICYmIGUtPmlkKCkgPT0gSURfVEggJiYgc3R5bGUtPnRleHRBbGlnbigpID09IFRBQVVUTykKKyAg
ICAgICAgaWYgKGUgJiYgZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRoKCkpICYmIHN0eWxlLT50
ZXh0QWxpZ24oKSA9PSBUQUFVVE8pCiAgICAgICAgICAgICBzdHlsZS0+c2V0VGV4dEFsaWduKENF
TlRFUik7CiAgICAgICAgIAogICAgICAgICAvLyBNdXRhdGUgdGhlIGRpc3BsYXkgdG8gQkxPQ0sg
b3IgVEFCTEUgZm9yIGNlcnRhaW4gY2FzZXMsIGUuZy4sIGlmIHNvbWVvbmUgYXR0ZW1wdHMgdG8K
QEAgLTk3OSw3ICs5NzksNyBAQCBib29sIENTU1N0eWxlU2VsZWN0b3I6OmNoZWNrU2VsZWN0b3Io
Q1NTCiAgICAgLy8gV2UgdHJhY2sgd2hldGhlciBvciBub3QgdGhlIHJ1bGUgY29udGFpbnMgb25s
eSA6aG92ZXIgYW5kIDphY3RpdmUgaW4gYSBzaW1wbGUgc2VsZWN0b3IuIElmCiAgICAgLy8gc28s
IHdlIGNhbid0IGFsbG93IHRoYXQgdG8gYXBwbHkgdG8gZXZlcnkgZWxlbWVudCBvbiB0aGUgcGFn
ZS4gIFdlIGFzc3VtZSB0aGUgYXV0aG9yIGludGVuZGVkCiAgICAgLy8gdG8gYXBwbHkgdGhlIHJ1
bGVzIG9ubHkgdG8gbGlua3MuCi0gICAgYm9vbCBvbmx5SG92ZXJBY3RpdmUgPSAoc2VsLT50YWcg
PT0gYW55UU5hbWUgJiYKKyAgICBib29sIG9ubHlIb3ZlckFjdGl2ZSA9ICghc2VsLT5oYXNUYWco
KSAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWwtPm1hdGNoID09IENTU1NlbGVj
dG9yOjpQc2V1ZG9DbGFzcyAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbC0+
cHNldWRvVHlwZSgpID09IENTU1NlbGVjdG9yOjpQc2V1ZG9Ib3ZlciB8fAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNlbC0+cHNldWRvVHlwZSgpID09IENTU1NlbGVjdG9yOjpQc2V1
ZG9BY3RpdmUpKSk7CkBAIC0xMDk2LDE5ICsxMDk2LDE0IEBAIGJvb2wgQ1NTU3R5bGVTZWxlY3Rv
cjo6Y2hlY2tPbmVTZWxlY3RvcigKICAgICBpZighZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgaWYgKHNlbC0+dGFnICE9IGFueVFOYW1lKSB7Ci0gICAgICAgIGludCBlbHRJRCA9IGUt
PmlkKCk7Ci0gICAgICAgIFFfVUlOVDE2IGxvY2FsTmFtZSA9IGxvY2FsTmFtZVBhcnQoZWx0SUQp
OwotICAgICAgICBRX1VJTlQxNiBucyA9IG5hbWVzcGFjZVBhcnQoZWx0SUQpOwotICAgICAgICBR
X1VJTlQxNiBzZWxMb2NhbE5hbWUgPSBsb2NhbE5hbWVQYXJ0KHNlbC0+dGFnKTsKLSAgICAgICAg
UV9VSU5UMTYgc2VsTlMgPSBuYW1lc3BhY2VQYXJ0KHNlbC0+dGFnKTsKLSAgICAgICAgCi0gICAg
ICAgIGlmIChsb2NhbE5hbWUgPD0gSURfTEFTVF9UQUcgJiYgZS0+aXNIVE1MRWxlbWVudCgpKQot
ICAgICAgICAgICAgbnMgPSB4aHRtbE5hbWVzcGFjZTsgLy8gRklYTUU6IFJlYWxseSB3YW50IHRv
IG1vdmUgYXdheSBmcm9tIHRoaXMgY29tcGxpY2F0ZWQgaGFja2VyeSBhbmQganVzdAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3dpdGNoIHRhZ3MgYW5kIGF0dHIgbmFtZXMg
b3ZlciB0byBBdG9taWNTdHJpbmdzLgotICAgICAgICAKLSAgICAgICAgaWYgKChzZWxMb2NhbE5h
bWUgIT0gYW55TG9jYWxOYW1lICYmIGxvY2FsTmFtZSAhPSBzZWxMb2NhbE5hbWUpIHx8Ci0gICAg
ICAgICAgICAoc2VsTlMgIT0gYW55TmFtZXNwYWNlICYmIG5zICE9IHNlbE5TKSkKKyAgICBpZiAo
c2VsLT5oYXNUYWcoKSkgeworICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSA9
IGUtPmxvY2FsTmFtZSgpOworICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5zID0gZS0+bmFt
ZXNwYWNlVVJJKCk7CisgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgc2VsTG9jYWxOYW1lID0g
c2VsLT50YWcubG9jYWxOYW1lKCk7CisgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgc2VsTlMg
PSBzZWwtPnRhZy5uYW1lc3BhY2VVUkkoKTsKKyAgICAKKyAgICAgICAgaWYgKChzZWxMb2NhbE5h
bWUgIT0gc3RhckF0b20gJiYgbG9jYWxOYW1lICE9IHNlbExvY2FsTmFtZSkgfHwKKyAgICAgICAg
ICAgIChzZWxOUyAhPSBzdGFyQXRvbSAmJiBucyAhPSBzZWxOUykpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogCkBAIC0xMjk1LDcgKzEyOTAsNyBAQCBib29sIENTU1N0eWxlU2Vs
ZWN0b3I6OmNoZWNrT25lU2VsZWN0b3IoCiAgICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQ
c2V1ZG9Ib3ZlcjogewogICAgICAgICAgICAgICAgIC8vIElmIHdlJ3JlIGluIHF1aXJrcyBtb2Rl
LCB0aGVuIGhvdmVyIHNob3VsZCBuZXZlciBtYXRjaCBhbmNob3JzIHdpdGggbm8KICAgICAgICAg
ICAgICAgICAvLyBocmVmLiAgVGhpcyBpcyBpbXBvcnRhbnQgZm9yIHNpdGVzIGxpa2Ugd3NqLmNv
bS4KLSAgICAgICAgICAgICAgICBpZiAoc3RyaWN0UGFyc2luZyB8fCBlLT5pZCgpICE9IElEX0Eg
fHwgZS0+aXNMaW5rKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoc3RyaWN0UGFyc2luZyB8fCAh
ZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmEoKSkgfHwgZS0+aXNMaW5rKCkpIHsKICAgICAgICAg
ICAgICAgICAgICAgaWYgKGVsZW1lbnQgPT0gZSAmJiBzdHlsZSkKICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0eWxlLT5zZXRBZmZlY3RlZEJ5SG92ZXJSdWxlcyh0cnVlKTsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKGUtPnJlbmRlcmVyKCkpIHsKQEAgLTEzMjYsNyArMTMyMSw3IEBAIGJvb2wg
Q1NTU3R5bGVTZWxlY3Rvcjo6Y2hlY2tPbmVTZWxlY3RvcigKICAgICAgICAgICAgIGNhc2UgQ1NT
U2VsZWN0b3I6OlBzZXVkb0FjdGl2ZToKICAgICAgICAgICAgICAgICAvLyBJZiB3ZSdyZSBpbiBx
dWlya3MgbW9kZSwgdGhlbiA6YWN0aXZlIHNob3VsZCBuZXZlciBtYXRjaCBhbmNob3JzIHdpdGgg
bm8KICAgICAgICAgICAgICAgICAvLyBocmVmLiAKLSAgICAgICAgICAgICAgICBpZiAoc3RyaWN0
UGFyc2luZyB8fCBlLT5pZCgpICE9IElEX0EgfHwgZS0+aXNMaW5rKCkpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoc3RyaWN0UGFyc2luZyB8fCAhZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmEoKSkg
fHwgZS0+aXNMaW5rKCkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQgPT0gZSAm
JiBzdHlsZSkKICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlLT5zZXRBZmZlY3RlZEJ5QWN0
aXZlUnVsZXModHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGUtPnJlbmRlcmVy
KCkpCkBAIC0xNDI1LDkgKzE0MjAsOSBAQCB2b2lkIENTU1J1bGVTZXQ6OmFkZFJ1bGUoQ1NTU3R5
bGVSdWxlSW1wCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgIAotICAgIFFfVUlOVDE2IGxv
Y2FsTmFtZSA9IGxvY2FsTmFtZVBhcnQoc2VsLT50YWcpOwotICAgIGlmIChsb2NhbE5hbWUgIT0g
YW55TG9jYWxOYW1lKSB7Ci0gICAgICAgIGFkZFRvUnVsZVNldCgodm9pZCopKGludClsb2NhbE5h
bWUsIG1fdGFnUnVsZXMsIHJ1bGUsIHNlbCk7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBsb2Nh
bE5hbWUgPSBzZWwtPnRhZy5sb2NhbE5hbWUoKTsKKyAgICBpZiAobG9jYWxOYW1lICE9IHN0YXJB
dG9tKSB7CisgICAgICAgIGFkZFRvUnVsZVNldChsb2NhbE5hbWUuaW1wbGVtZW50YXRpb24oKSwg
bV90YWdSdWxlcywgcnVsZSwgc2VsKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKSW5k
ZXg6IGtodG1sL2Nzcy9wYXJzZXIueQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2Vi
Q29yZS9raHRtbC9jc3MvcGFyc2VyLnksdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzkKZGlmZiAt
dSAtcCAtcjEuMzkga2h0bWwvY3NzL3BhcnNlci55Ci0tLSBraHRtbC9jc3MvcGFyc2VyLnkJMjIg
SnVuIDIwMDUgMjE6MDU6NTkgLTAwMDAJMS4zOQorKysga2h0bWwvY3NzL3BhcnNlci55CTUgSnVs
IDIwMDUgMjM6MjA6MDggLTAwMDAKQEAgLTM0LDkgKzM0LDcgQEAKICNpbmNsdWRlIDxjc3MvY3Nz
X3ZhbHVlaW1wbC5oPgogI2luY2x1ZGUgPG1pc2MvaHRtbGhhc2hlcy5oPgogI2luY2x1ZGUgImNz
c3BhcnNlci5oIgotCi0jaW5jbHVkZSAieG1sX25hbWVzcGFjZV90YWJsZS5oIgotICAgIAorICAg
CiAjaW5jbHVkZSA8YXNzZXJ0Lmg+CiAjaW5jbHVkZSA8a2RlYnVnLmg+CiAvLyAjZGVmaW5lIENT
U19ERUJVRwpAQCAtMTMxLDcgKzEyOSw2IEBAIHN0YXRpYyBpbmxpbmUgaW50IGdldFZhbHVlSUQo
Y29uc3QgY2hhciAKICAgICBmbG9hdCB2YWw7CiAgICAgaW50IHByb3BfaWQ7CiAgICAgaW50IGF0
dHJpYnV0ZTsKLSAgICBpbnQgZWxlbWVudDsKICAgICBDU1NTZWxlY3Rvcjo6UmVsYXRpb24gcmVs
YXRpb247CiAgICAgYm9vbCBiOwogICAgIGludCBpOwpAQCAtMTc3LDYgKzE3NCw4IEBAIHN0YXRp
YyBpbnQgY3NzeXlsZXgoIFlZU1RZUEUgKnl5bHZhbCApIHsKICV0b2tlbiAnLicKICV0b2tlbiAn
WycKIAorJXRva2VuIDxzdHJpbmc+ICcqJworCiAldG9rZW4gSU1QT1JUX1NZTQogJXRva2VuIFBB
R0VfU1lNCiAldG9rZW4gTUVESUFfU1lNCkBAIC0yNjYsNyArMjY1LDcgQEAgc3RhdGljIGludCBj
c3N5eWxleCggWVlTVFlQRSAqeXlsdmFsICkgewogJXR5cGUgPHZhbHVlPiB1bmFyeV90ZXJtCiAl
dHlwZSA8dmFsdWU+IGZ1bmN0aW9uCiAKLSV0eXBlIDxlbGVtZW50PiBlbGVtZW50X25hbWUKKyV0
eXBlIDxzdHJpbmc+IGVsZW1lbnRfbmFtZQogCiAldHlwZSA8YXR0cmlidXRlPiBhdHRyaWJfaWQK
IApAQCAtNDA2LDcgKzQwNSw3IEBAIE5BTUVTUEFDRV9TWU0gbWF5YmVfc3BhY2UgbWF5YmVfbnNf
cHJlZmkKICNlbmRpZgogICAgIENTU1BhcnNlciAqcCA9IHN0YXRpY19jYXN0PENTU1BhcnNlciAq
PihwYXJzZXIpOwogICAgIGlmIChwLT5zdHlsZUVsZW1lbnQgJiYgcC0+c3R5bGVFbGVtZW50LT5p
c0NTU1N0eWxlU2hlZXQoKSkKLSAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldEltcGwq
PihwLT5zdHlsZUVsZW1lbnQpLT5hZGROYW1lc3BhY2UocCwgZG9tU3RyaW5nKCQzKSwgZG9tU3Ry
aW5nKCQ0KSk7CisgICAgICAgIHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXRJbXBsKj4ocC0+c3R5
bGVFbGVtZW50KS0+YWRkTmFtZXNwYWNlKHAsIGF0b21pY1N0cmluZygkMyksIGF0b21pY1N0cmlu
ZygkNCkpOwogfQogfCBOQU1FU1BBQ0VfU1lNIGVycm9yIGludmFsaWRfYmxvY2sKIHwgTkFNRVNQ
QUNFX1NZTSBlcnJvciAnOycKQEAgLTYyNSw2NSArNjI0LDcxIEBAIG5hbWVzcGFjZV9zZWxlY3Rv
cjoKIAogc2ltcGxlX3NlbGVjdG9yOgogICAgIGVsZW1lbnRfbmFtZSBtYXliZV9zcGFjZSB7Ci0J
JCQgPSBuZXcgQ1NTU2VsZWN0b3IoKTsKLQkkJC0+dGFnID0gJDE7CisgICAgICAgIENTU1BhcnNl
ciAqcCA9IHN0YXRpY19jYXN0PENTU1BhcnNlciAqPihwYXJzZXIpOworCSQkID0gbmV3IENTU1Nl
bGVjdG9yKFF1YWxpZmllZE5hbWUobnVsbEF0b20sIGF0b21pY1N0cmluZygkMSksIHAtPmRlZmF1
bHROYW1lc3BhY2UpKTsKICAgICB9CiAgICAgfCBlbGVtZW50X25hbWUgc3BlY2lmaWVyX2xpc3Qg
bWF5YmVfc3BhY2UgewotCSQkID0gJDI7Ci0JaWYgKCAkJCApCi0gICAgICAgICAgICAkJC0+dGFn
ID0gJDE7CisgICAgICAgICQkID0gJDI7CisJaWYgKCQkKSB7CisgICAgICAgICAgICBDU1NQYXJz
ZXIgKnAgPSBzdGF0aWNfY2FzdDxDU1NQYXJzZXIgKj4ocGFyc2VyKTsKKyAgICAgICAgICAgICQk
LT50YWcgPSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCBhdG9taWNTdHJpbmcoJDEpLCBwLT5kZWZh
dWx0TmFtZXNwYWNlKTsKKyAgICAgICAgfQogICAgIH0KICAgICB8IHNwZWNpZmllcl9saXN0IG1h
eWJlX3NwYWNlIHsKIAkkJCA9ICQxOwotICAgICAgICBpZiAoJCQpCi0gICAgICAgICAgICAkJC0+
dGFnID0gbWFrZUlkKHN0YXRpY19jYXN0PENTU1BhcnNlcio+KHBhcnNlciktPmRlZmF1bHROYW1l
c3BhY2UsIGFueUxvY2FsTmFtZSk7OworICAgICAgICBDU1NQYXJzZXIgKnAgPSBzdGF0aWNfY2Fz
dDxDU1NQYXJzZXIgKj4ocGFyc2VyKTsKKyAgICAgICAgaWYgKCQkICYmIHAtPmRlZmF1bHROYW1l
c3BhY2UgIT0gc3RhckF0b20pCisgICAgICAgICAgICAkJC0+dGFnID0gUXVhbGlmaWVkTmFtZShu
dWxsQXRvbSwgc3RhckF0b20sIHAtPmRlZmF1bHROYW1lc3BhY2UpOwogICAgIH0KICAgICB8IG5h
bWVzcGFjZV9zZWxlY3RvciAnfCcgZWxlbWVudF9uYW1lIG1heWJlX3NwYWNlIHsKLSAgICAgICAg
JCQgPSBuZXcgQ1NTU2VsZWN0b3IoKTsKLSAgICAgICAgJCQtPnRhZyA9ICQzOworICAgICAgICBB
dG9taWNTdHJpbmcgbmFtZXNwYWNlUHJlZml4ID0gYXRvbWljU3RyaW5nKCQxKTsKICAgICAgICAg
Q1NTUGFyc2VyICpwID0gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyICo+KHBhcnNlcik7CiAgICAgICAg
IGlmIChwLT5zdHlsZUVsZW1lbnQgJiYgcC0+c3R5bGVFbGVtZW50LT5pc0NTU1N0eWxlU2hlZXQo
KSkKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXRJbXBsKj4ocC0+c3R5bGVF
bGVtZW50KS0+ZGV0ZXJtaW5lTmFtZXNwYWNlKCQkLT50YWcsIGRvbVN0cmluZygkMSkpOworICAg
ICAgICAgICAgJCQgPSBuZXcgQ1NTU2VsZWN0b3IoUXVhbGlmaWVkTmFtZShuYW1lc3BhY2VQcmVm
aXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0b21p
Y1N0cmluZygkMyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXRJbXBsKj4ocC0+c3R5bGVFbGVtZW50KS0+ZGV0
ZXJtaW5lTmFtZXNwYWNlKG5hbWVzcGFjZVByZWZpeCkpKTsKKyAgICAgICAgZWxzZSAvLyBGSVhN
RTogU2hvdWxkbid0IHRoaXMgY2FzZSBiZSBhbiBlcnJvcj8KKyAgICAgICAgICAgICQkID0gbmV3
IENTU1NlbGVjdG9yKFF1YWxpZmllZE5hbWUobnVsbEF0b20sIGF0b21pY1N0cmluZygkMyksIHAt
PmRlZmF1bHROYW1lc3BhY2UpKTsKICAgICB9CiAgICAgfCBuYW1lc3BhY2Vfc2VsZWN0b3IgJ3wn
IGVsZW1lbnRfbmFtZSBzcGVjaWZpZXJfbGlzdCBtYXliZV9zcGFjZSB7CiAgICAgICAgICQkID0g
JDQ7CiAgICAgICAgIGlmICgkJCkgewotICAgICAgICAgICAgJCQtPnRhZyA9ICQzOworICAgICAg
ICAgICAgQXRvbWljU3RyaW5nIG5hbWVzcGFjZVByZWZpeCA9IGF0b21pY1N0cmluZygkMSk7CiAg
ICAgICAgICAgICBDU1NQYXJzZXIgKnAgPSBzdGF0aWNfY2FzdDxDU1NQYXJzZXIgKj4ocGFyc2Vy
KTsKICAgICAgICAgICAgIGlmIChwLT5zdHlsZUVsZW1lbnQgJiYgcC0+c3R5bGVFbGVtZW50LT5p
c0NTU1N0eWxlU2hlZXQoKSkKLSAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxDU1NTdHlsZVNo
ZWV0SW1wbCo+KHAtPnN0eWxlRWxlbWVudCktPmRldGVybWluZU5hbWVzcGFjZSgkJC0+dGFnLCBk
b21TdHJpbmcoJDEpKTsKKyAgICAgICAgICAgICAgICAkJC0+dGFnID0gUXVhbGlmaWVkTmFtZShu
YW1lc3BhY2VQcmVmaXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YXRvbWljU3RyaW5nKCQzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0SW1wbCo+KHAtPnN0eWxlRWxlbWVudCktPmRldGVy
bWluZU5hbWVzcGFjZShuYW1lc3BhY2VQcmVmaXgpKTsKKyAgICAgICAgICAgIGVsc2UgLy8gRklY
TUU6IFNob3VsZG4ndCB0aGlzIGNhc2UgYmUgYW4gZXJyb3I/CisgICAgICAgICAgICAgICAgJCQt
PnRhZyA9IFF1YWxpZmllZE5hbWUobnVsbEF0b20sIGF0b21pY1N0cmluZygkMyksIHAtPmRlZmF1
bHROYW1lc3BhY2UpOwogICAgICAgICB9CiAgICAgfQogICAgIHwgbmFtZXNwYWNlX3NlbGVjdG9y
ICd8JyBzcGVjaWZpZXJfbGlzdCBtYXliZV9zcGFjZSB7CiAgICAgICAgICQkID0gJDM7CiAgICAg
ICAgIGlmICgkJCkgewotICAgICAgICAgICAgJCQtPnRhZyA9IG1ha2VJZChhbnlOYW1lc3BhY2Us
IGFueUxvY2FsTmFtZSk7CisgICAgICAgICAgICBBdG9taWNTdHJpbmcgbmFtZXNwYWNlUHJlZml4
ID0gYXRvbWljU3RyaW5nKCQxKTsKICAgICAgICAgICAgIENTU1BhcnNlciAqcCA9IHN0YXRpY19j
YXN0PENTU1BhcnNlciAqPihwYXJzZXIpOwogICAgICAgICAgICAgaWYgKHAtPnN0eWxlRWxlbWVu
dCAmJiBwLT5zdHlsZUVsZW1lbnQtPmlzQ1NTU3R5bGVTaGVldCgpKQotICAgICAgICAgICAgICAg
IHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXRJbXBsKj4ocC0+c3R5bGVFbGVtZW50KS0+ZGV0ZXJt
aW5lTmFtZXNwYWNlKCQkLT50YWcsIGRvbVN0cmluZygkMSkpOworICAgICAgICAgICAgICAgICQk
LT50YWcgPSBRdWFsaWZpZWROYW1lKG5hbWVzcGFjZVByZWZpeCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdGFyQXRvbSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0SW1wbCo+KHAtPnN0eWxl
RWxlbWVudCktPmRldGVybWluZU5hbWVzcGFjZShuYW1lc3BhY2VQcmVmaXgpKTsKICAgICAgICAg
fQogICAgIH0KICAgOwogCiBlbGVtZW50X25hbWU6CiAgICAgSURFTlQgewotCUNTU1BhcnNlciAq
cCA9IHN0YXRpY19jYXN0PENTU1BhcnNlciAqPihwYXJzZXIpOworICAgICAgICBQYXJzZVN0cmlu
ZyYgc3RyID0gJDE7CisgICAgICAgIENTU1BhcnNlciAqcCA9IHN0YXRpY19jYXN0PENTU1BhcnNl
ciAqPihwYXJzZXIpOwogCURPTTo6RG9jdW1lbnRJbXBsICpkb2MgPSBwLT5kb2N1bWVudCgpOwot
CVFTdHJpbmcgdGFnID0gcVN0cmluZygkMSk7Ci0JaWYgKCBkb2MgKSB7Ci0JICAgIGlmIChkb2Mt
PmlzSFRNTERvY3VtZW50KCkpCi0JCXRhZyA9IHRhZy5sb3dlcigpOwotCSAgICBjb25zdCBET01T
dHJpbmcgZHRhZyh0YWcpOwotICAgICAgICAgICAgJCQgPSBtYWtlSWQocC0+ZGVmYXVsdE5hbWVz
cGFjZSwgZG9jLT50YWdJZCgwLCBkdGFnLmltcGxlbWVudGF0aW9uKCksIGZhbHNlKSk7Ci0JfSBl
bHNlIHsKLQkgICAgJCQgPSBtYWtlSWQocC0+ZGVmYXVsdE5hbWVzcGFjZSwga2h0bWw6OmdldFRh
Z0lEKHRhZy5sb3dlcigpLmFzY2lpKCksIHRhZy5sZW5ndGgoKSkpOwotCSAgICAvLyB0aGlzIGNh
c2Ugc2hvdWxkIG5ldmVyIGhhcHBlbiAtIG9ubHkgd2hlbiBsb2FkaW5nCi0JICAgIC8vIHRoZSBk
ZWZhdWx0IHN0eWxlc2hlZXQgLSB3aGljaCBtdXN0IG5vdCBjb250YWluIHVua25vd24gdGFncwot
Ly8gCSAgICBhc3NlcnQoJCQgIT0gMCk7Ci0JfQorCWlmIChkb2MgJiYgZG9jLT5pc0hUTUxEb2N1
bWVudCgpKQorICAgICAgICAgICAgc3RyLmxvd2VyKCk7CisgICAgICAgICQkID0gc3RyOwogICAg
IH0KICAgICB8ICcqJyB7Ci0JJCQgPSBtYWtlSWQoc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyKj4ocGFy
c2VyKS0+ZGVmYXVsdE5hbWVzcGFjZSwgYW55TG9jYWxOYW1lKTsKKwlzdGF0aWMgdW5zaWduZWQg
c2hvcnQgc3RhciA9ICcqJzsKKyAgICAgICAgJCQuc3RyaW5nID0gJnN0YXI7CisgICAgICAgICQk
Lmxlbmd0aCA9IDE7CiAgICAgfQogICA7CiAKQEAgLTc3MCwxOCArNzc1LDIyIEBAIGF0dHJpYjoK
ICAgICAgICAgJCQgPSBuZXcgQ1NTU2VsZWN0b3IoKTsKICAgICAgICAgJCQtPmF0dHIgPSAkNTsK
ICAgICAgICAgJCQtPm1hdGNoID0gQ1NTU2VsZWN0b3I6OlNldDsKLSAgICAgICAgQ1NTUGFyc2Vy
ICpwID0gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyICo+KHBhcnNlcik7Ci0gICAgICAgIGlmIChwLT5z
dHlsZUVsZW1lbnQgJiYgcC0+c3R5bGVFbGVtZW50LT5pc0NTU1N0eWxlU2hlZXQoKSkKLSAgICAg
ICAgICAgIHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXRJbXBsKj4ocC0+c3R5bGVFbGVtZW50KS0+
ZGV0ZXJtaW5lTmFtZXNwYWNlKCQkLT5hdHRyLCBkb21TdHJpbmcoJDMpKTsKKyAgICAgICAgLy8g
RklYTUU6IEZvciBub3cgd2UncmUgYnJlYWtpbmcgbmFtZXNwYWNlIHN1cHBvcnQgb24gYXR0cmli
dXRlcy4gIFdoZW4gd2Ugc3dpdGNoIHRvIGF0b21pY3N0cmluZywgdGhlbiB3ZSBjYW4gbWFrZQor
ICAgICAgICAvLyBpdCB3b3JrIGFnYWluLgorICAgICAgICAvL0NTU1BhcnNlciAqcCA9IHN0YXRp
Y19jYXN0PENTU1BhcnNlciAqPihwYXJzZXIpOworICAgICAgICAvL2lmIChwLT5zdHlsZUVsZW1l
bnQgJiYgcC0+c3R5bGVFbGVtZW50LT5pc0NTU1N0eWxlU2hlZXQoKSkKKyAgICAgICAgLy8gICAg
c3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldEltcGwqPihwLT5zdHlsZUVsZW1lbnQpLT5kZXRlcm1p
bmVOYW1lc3BhY2UoJCQtPmF0dHIsIGRvbVN0cmluZygkMykpOwogICAgIH0KICAgICB8ICdbJyBt
YXliZV9zcGFjZSBuYW1lc3BhY2Vfc2VsZWN0b3IgJ3wnIGF0dHJpYl9pZCBtYXRjaCBtYXliZV9z
cGFjZSBpZGVudF9vcl9zdHJpbmcgbWF5YmVfc3BhY2UgJ10nIHsKICAgICAgICAgJCQgPSBuZXcg
Q1NTU2VsZWN0b3IoKTsKICAgICAgICAgJCQtPmF0dHIgPSAkNTsKICAgICAgICAgJCQtPm1hdGNo
ID0gKENTU1NlbGVjdG9yOjpNYXRjaCkkNjsKICAgICAgICAgJCQtPnZhbHVlID0gYXRvbWljU3Ry
aW5nKCQ4KTsKLSAgICAgICAgQ1NTUGFyc2VyICpwID0gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyICo+
KHBhcnNlcik7Ci0gICAgICAgIGlmIChwLT5zdHlsZUVsZW1lbnQgJiYgcC0+c3R5bGVFbGVtZW50
LT5pc0NTU1N0eWxlU2hlZXQoKSkKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PENTU1N0eWxlU2hl
ZXRJbXBsKj4ocC0+c3R5bGVFbGVtZW50KS0+ZGV0ZXJtaW5lTmFtZXNwYWNlKCQkLT5hdHRyLCBk
b21TdHJpbmcoJDMpKTsKKyAgICAgICAgLy8gRklYTUU6IEZvciBub3cgd2UncmUgYnJlYWtpbmcg
bmFtZXNwYWNlIHN1cHBvcnQgb24gYXR0cmlidXRlcy4gIFdoZW4gd2Ugc3dpdGNoIHRvIGF0b21p
Y3N0cmluZywgdGhlbiB3ZSBjYW4gbWFrZQorICAgICAgICAvLyBpdCB3b3JrIGFnYWluLgorICAg
ICAgICAvL0NTU1BhcnNlciAqcCA9IHN0YXRpY19jYXN0PENTU1BhcnNlciAqPihwYXJzZXIpOwor
ICAgICAgICAvL2lmIChwLT5zdHlsZUVsZW1lbnQgJiYgcC0+c3R5bGVFbGVtZW50LT5pc0NTU1N0
eWxlU2hlZXQoKSkKKyAgICAgICAgLy8gICAgc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldEltcGwq
PihwLT5zdHlsZUVsZW1lbnQpLT5kZXRlcm1pbmVOYW1lc3BhY2UoJCQtPmF0dHIsIGRvbVN0cmlu
ZygkMykpOwogICAgIH0KICAgOwogCkluZGV4OiBraHRtbC9kb20vY3NzX3N0eWxlc2hlZXQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2RvbS9jc3Nfc3R5
bGVzaGVldC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuOApkaWZmIC11IC1wIC1yMS44IGto
dG1sL2RvbS9jc3Nfc3R5bGVzaGVldC5jcHAKLS0tIGtodG1sL2RvbS9jc3Nfc3R5bGVzaGVldC5j
cHAJMjAgTWF5IDIwMDQgMTU6MDk6MzIgLTAwMDAJMS44CisrKyBraHRtbC9kb20vY3NzX3N0eWxl
c2hlZXQuY3BwCTUgSnVsIDIwMDUgMjM6MjA6MDkgLTAwMDAKQEAgLTM4NSw3ICszODUsNyBAQCBM
aW5rU3R5bGUgJiBMaW5rU3R5bGU6Om9wZXJhdG9yID0gKGNvbnN0CiAKICAgICAvLyAjIyMgY2hl
Y2sgbGluayBpcyByZWFsbHkgbGlua2luZyBhIHN0eWxlIHNoZWV0CiAgICAgaWYoIG4gJiYgbi0+
aXNFbGVtZW50Tm9kZSgpICYmCi0JKG4tPmlkKCkgPT0gSURfU1RZTEUgfHwgbi0+aWQoKSA9PSBJ
RF9MSU5LKSApIHsKKwkobi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnN0eWxlKCkpIHx8IG4tPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjpsaW5rKCkpKSkgewogICAgIG5vZGUgPSBuOwogICAgIGlmKG5v
ZGUpIG5vZGUtPnJlZigpOwogICAgIH0KQEAgLTM5OSwxMiArMzk5LDE0IEBAIExpbmtTdHlsZTo6
fkxpbmtTdHlsZSgpCiAKIFN0eWxlU2hlZXQgTGlua1N0eWxlOjpzaGVldCgpCiB7Ci0gICAgaW50
IGlkID0gbm9kZSA/IG5vZGUtPmlkKCkgOiAwOworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0
dXJuIFN0eWxlU2hlZXQoKTsKKwogICAgIC8vICMjIyBhZGQgUEkKICAgICByZXR1cm4gCi0JKCBp
ZCA9PSBJRF9TVFlMRSkgPworCShub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c3R5bGUoKSkp
ID8KIAlzdGF0aWNfY2FzdDxIVE1MU3R5bGVFbGVtZW50SW1wbCAqPihub2RlKS0+c2hlZXQoKQot
CTogKCAoaWQgPT0gSURfTElOSykgPworCTogKCBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
bGluaygpKSA/CiAJICAgIHN0YXRpY19jYXN0PEhUTUxMaW5rRWxlbWVudEltcGwgKj4obm9kZSkt
PnNoZWV0KCkKIAkgICAgOiBTdHlsZVNoZWV0KCkgKTsKIH0KSW5kZXg6IGtodG1sL2RvbS9kb21f
ZWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwv
ZG9tL2RvbV9lbGVtZW50LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMgpkaWZmIC11IC1w
IC1yMS4xMiBraHRtbC9kb20vZG9tX2VsZW1lbnQuY3BwCi0tLSBraHRtbC9kb20vZG9tX2VsZW1l
bnQuY3BwCTEyIE1heSAyMDA1IDE3OjExOjIxIC0wMDAwCTEuMTIKKysrIGtodG1sL2RvbS9kb21f
ZWxlbWVudC5jcHAJNSBKdWwgMjAwNSAyMzoyMDowOSAtMDAwMApAQCAtMTQxLDcgKzE0MSw3IEBA
IEVsZW1lbnQ6On5FbGVtZW50KCkKIERPTVN0cmluZyBFbGVtZW50Ojp0YWdOYW1lKCkgY29uc3QK
IHsKICAgICBpZiAoIWltcGwpIHRocm93IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb246Ok5PVF9G
T1VORF9FUlIpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxFbGVtZW50SW1wbCo+KGltcGwpLT50
YWdOYW1lKCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsKj4oaW1wbCktPm5v
ZGVOYW1lKCk7CiB9CiAKIERPTVN0cmluZyBFbGVtZW50OjpnZXRBdHRyaWJ1dGUoIGNvbnN0IERP
TVN0cmluZyAmbmFtZSApCkluZGV4OiBraHRtbC9kb20vZG9tX25vZGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2RvbS9kb21fbm9kZS5jcHAsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuMTIKZGlmZiAtdSAtcCAtcjEuMTIga2h0bWwvZG9tL2RvbV9ub2Rl
LmNwcAotLS0ga2h0bWwvZG9tL2RvbV9ub2RlLmNwcAkxMSBNYXkgMjAwNSAwMDo1ODoyOCAtMDAw
MAkxLjEyCisrKyBraHRtbC9kb20vZG9tX25vZGUuY3BwCTUgSnVsIDIwMDUgMjM6MjA6MDkgLTAw
MDAKQEAgLTMyNCw3ICszMjQsNyBAQCBib29sIE5vZGU6OmlzU3VwcG9ydGVkKCBjb25zdCBET01T
dHJpbmcgCiBET01TdHJpbmcgTm9kZTo6bmFtZXNwYWNlVVJJKCAgKSBjb25zdAogewogICAgIGlm
ICghaW1wbCkgcmV0dXJuIERPTVN0cmluZygpOwotICAgIHJldHVybiBpbXBsLT5nZXREb2N1bWVu
dCgpLT5uYW1lc3BhY2VVUkkoaW1wbC0+aWQoKSk7CisgICAgcmV0dXJuIGltcGwtPm5hbWVzcGFj
ZVVSSSgpOwogfQogCiBET01TdHJpbmcgTm9kZTo6cHJlZml4KCAgKSBjb25zdApAQCAtMzM3LDcg
KzMzNyw3IEBAIHZvaWQgTm9kZTo6c2V0UHJlZml4KGNvbnN0IERPTVN0cmluZyAmcHIKIHsKICAg
ICBpZiAoIWltcGwpIHRocm93IERPTUV4Y2VwdGlvbihET01FeGNlcHRpb246Ok5PVF9GT1VORF9F
UlIpOwogICAgIGludCBleGNlcHRpb25jb2RlID0gMDsKLSAgICBpbXBsLT5zZXRQcmVmaXgocHJl
Zml4LGV4Y2VwdGlvbmNvZGUpOworICAgIGltcGwtPnNldFByZWZpeChwcmVmaXguaW1wbGVtZW50
YXRpb24oKSxleGNlcHRpb25jb2RlKTsKICAgICBpZiAoZXhjZXB0aW9uY29kZSkKICAgICAgICAg
dGhyb3cgRE9NRXhjZXB0aW9uKGV4Y2VwdGlvbmNvZGUpOwogfQpAQCAtMzc2LDEzICszNzYsNiBA
QCBib29sIE5vZGU6OmRpc3BhdGNoRXZlbnQoY29uc3QgRXZlbnQgJmV2CiAgICAgcmV0dXJuIHI7
CiB9CiAKLQotdW5zaWduZWQgaW50IE5vZGU6OmVsZW1lbnRJZCgpIGNvbnN0Ci17Ci0gICAgaWYg
KCFpbXBsKSByZXR1cm4gMDsKLSAgICByZXR1cm4gaW1wbC0+aWQoKTsKLX0KLQogdW5zaWduZWQg
bG9uZyBOb2RlOjppbmRleCgpIGNvbnN0CiB7CiAgICAgaWYgKCFpbXBsKSByZXR1cm4gMDsKSW5k
ZXg6IGtodG1sL2RvbS9kb21fbm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9X
ZWJDb3JlL2todG1sL2RvbS9kb21fbm9kZS5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEyCmRp
ZmYgLXUgLXAgLXIxLjEyIGtodG1sL2RvbS9kb21fbm9kZS5oCi0tLSBraHRtbC9kb20vZG9tX25v
ZGUuaAkxOCBNYXkgMjAwNSAyMToxMDoyNCAtMDAwMAkxLjEyCisrKyBraHRtbC9kb20vZG9tX25v
ZGUuaAk1IEp1bCAyMDA1IDIzOjIwOjEwIC0wMDAwCkBAIC04NTUsMTMgKzg1NSw2IEBAIHB1Ymxp
YzoKICAgICBib29sIGRpc3BhdGNoRXZlbnQoY29uc3QgRXZlbnQgJmV2dCk7CiAKICAgICAvKioK
LSAgICAgKiBAaW50ZXJuYWwKLSAgICAgKiBub3QgcGFydCBvZiB0aGUgRE9NLgotICAgICAqIEBy
ZXR1cm5zIHRoZSBlbGVtZW50IGlkLCBpbiBjYXNlIHRoaXMgaXMgYW4gZWxlbWVudCwgMCBvdGhl
cndpc2UKLSAgICAgKi8KLSAgICBRX1VJTlQzMiBlbGVtZW50SWQoKSBjb25zdDsKLQotICAgIC8q
KgogICAgICAqIHRlc3RzIGlmIHRoaXMgTm9kZSBpcyAwLiBVc2VmdWwgZXNwZWNpYWxseSwgaWYg
Y2FzdGluZyB0byBhIGRlcml2ZWQKICAgICAgKiBjbGFzczoKICAgICAgKgpJbmRleDoga2h0bWwv
ZG9tL2h0bWxfYmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUv
a2h0bWwvZG9tL2h0bWxfYmFzZS5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNgpkaWZmIC11
IC1wIC1yMS42IGtodG1sL2RvbS9odG1sX2Jhc2UuY3BwCi0tLSBraHRtbC9kb20vaHRtbF9iYXNl
LmNwcAkzIE5vdiAyMDAzIDA2OjMyOjA0IC0wMDAwCTEuNgorKysga2h0bWwvZG9tL2h0bWxfYmFz
ZS5jcHAJNSBKdWwgMjAwNSAyMzoyMDoxMCAtMDAwMApAQCAtNDEsNyArNDEsNyBAQCBIVE1MQm9k
eUVsZW1lbnQ6OkhUTUxCb2R5RWxlbWVudChIVE1MQm9kCiAKIEhUTUxCb2R5RWxlbWVudCAmSFRN
TEJvZHlFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3Np
Z25PdGhlciggb3RoZXIsIElEX0JPRFkgKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxO
YW1lczo6Ym9keSgpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC0xMzUsNyArMTM1LDcg
QEAgSFRNTEZyYW1lRWxlbWVudDo6SFRNTEZyYW1lRWxlbWVudChIVE1MRgogCiBIVE1MRnJhbWVF
bGVtZW50ICZIVE1MRnJhbWVFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikK
IHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0ZSQU1FICk7CisgICAgYXNzaWduT3RoZXIo
IG90aGVyLCBIVE1MTmFtZXM6OmZyYW1lKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAg
LTI2NSw3ICsyNjUsNyBAQCBIVE1MSUZyYW1lRWxlbWVudDo6SFRNTElGcmFtZUVsZW1lbnQoSFRN
CiAKIEhUTUxJRnJhbWVFbGVtZW50ICZIVE1MSUZyYW1lRWxlbWVudDo6b3BlcmF0b3IgPSAoY29u
c3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9JRlJBTUUgKTsK
KyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6aWZyYW1lKCkgKTsKICAgICByZXR1
cm4gKnRoaXM7CiB9CiAKQEAgLTQxNCw3ICs0MTQsNyBAQCBIVE1MRnJhbWVTZXRFbGVtZW50OjpI
VE1MRnJhbWVTZXRFbGVtZW50CiAKIEhUTUxGcmFtZVNldEVsZW1lbnQgJkhUTUxGcmFtZVNldEVs
ZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVy
KCBvdGhlciwgSURfRlJBTUVTRVQgKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1l
czo6ZnJhbWVzZXQoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtNDY2LDcgKzQ2Niw3
IEBAIEhUTUxIZWFkRWxlbWVudDo6SFRNTEhlYWRFbGVtZW50KEhUTUxIZWEKIAogSFRNTEhlYWRF
bGVtZW50ICZIVE1MSGVhZEVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQog
ewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfSEVBRCApOworICAgIGFzc2lnbk90aGVyKCBv
dGhlciwgSFRNTE5hbWVzOjpoZWFkKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTUw
Nyw3ICs1MDcsNyBAQCBIVE1MSHRtbEVsZW1lbnQ6OkhUTUxIdG1sRWxlbWVudChIVE1MSHRtCiAK
IEhUTUxIdG1sRWxlbWVudCAmSFRNTEh0bWxFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2Rl
ICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0hUTUwgKTsKKyAgICBhc3Np
Z25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6aHRtbCgpICk7CiAgICAgcmV0dXJuICp0aGlzOwog
fQogCkluZGV4OiBraHRtbC9kb20vaHRtbF9ibG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
L2N2cy9yb290L1dlYkNvcmUva2h0bWwvZG9tL2h0bWxfYmxvY2suY3BwLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjQKZGlmZiAtdSAtcCAtcjEuNCBraHRtbC9kb20vaHRtbF9ibG9jay5jcHAKLS0t
IGtodG1sL2RvbS9odG1sX2Jsb2NrLmNwcAkxMCBKdW4gMjAwMiAyMDowNzozNCAtMDAwMAkxLjQK
KysrIGtodG1sL2RvbS9odG1sX2Jsb2NrLmNwcAk1IEp1bCAyMDA1IDIzOjIwOjEwIC0wMDAwCkBA
IC00Myw3ICs0Myw3IEBAIEhUTUxCbG9ja3F1b3RlRWxlbWVudDo6SFRNTEJsb2NrcXVvdGVFbGUK
IAogSFRNTEJsb2NrcXVvdGVFbGVtZW50ICZIVE1MQmxvY2txdW90ZUVsZW1lbnQ6Om9wZXJhdG9y
ID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfQkxP
Q0tRVU9URSApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpibG9ja3F1b3Rl
KCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTg0LDcgKzg0LDcgQEAgSFRNTERpdkVs
ZW1lbnQ6OkhUTUxEaXZFbGVtZW50KEhUTUxEaXZFbAogCiBIVE1MRGl2RWxlbWVudCAmSFRNTERp
dkVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90
aGVyKCBvdGhlciwgSURfRElWICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6
OmRpdigpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC0xMjUsNyArMTI1LDcgQEAgSFRN
TEhSRWxlbWVudDo6SFRNTEhSRWxlbWVudChIVE1MSFJFbGVtZQogCiBIVE1MSFJFbGVtZW50ICZI
VE1MSFJFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3Np
Z25PdGhlciggb3RoZXIsIElEX0hSICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFt
ZXM6OmhyKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTIwNSwxNiArMjA1LDE3IEBA
IEhUTUxIZWFkaW5nRWxlbWVudDo6SFRNTEhlYWRpbmdFbGVtZW50KEgKIAogSFRNTEhlYWRpbmdF
bGVtZW50ICZIVE1MSGVhZGluZ0VsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVy
KQogewotICAgIGlmKG90aGVyLmVsZW1lbnRJZCgpICE9IElEX0gxIHx8Ci0gICAgICAgb3RoZXIu
ZWxlbWVudElkKCkgIT0gSURfSDIgfHwKLSAgICAgICBvdGhlci5lbGVtZW50SWQoKSAhPSBJRF9I
MyB8fAotICAgICAgIG90aGVyLmVsZW1lbnRJZCgpICE9IElEX0g0IHx8Ci0gICAgICAgb3RoZXIu
ZWxlbWVudElkKCkgIT0gSURfSDUgfHwKLSAgICAgICBvdGhlci5lbGVtZW50SWQoKSAhPSBJRF9I
NiApCisgICAgaWYgKCFvdGhlci5oYW5kbGUoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmgxKCkp
ICYmCisgICAgICAgICFvdGhlci5oYW5kbGUoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmgyKCkp
ICYmCisgICAgICAgICFvdGhlci5oYW5kbGUoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmgzKCkp
ICYmCisgICAgICAgICFvdGhlci5oYW5kbGUoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omg0KCkp
ICYmCisgICAgICAgICFvdGhlci5oYW5kbGUoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omg1KCkp
ICYmCisgICAgICAgICFvdGhlci5oYW5kbGUoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omg2KCkp
KQogICAgIHsKIAlpZiAoIGltcGwgKSBpbXBsLT5kZXJlZigpOwogCWltcGwgPSAwOwogICAgIH0g
ZWxzZSB7CisKICAgICBOb2RlOjpvcGVyYXRvciA9IChvdGhlcik7CiAgICAgfQogICAgIHJldHVy
biAqdGhpczsKQEAgLTI1Nyw3ICsyNTgsNyBAQCBIVE1MUGFyYWdyYXBoRWxlbWVudDo6SFRNTFBh
cmFncmFwaEVsZW1lCiAKIEhUTUxQYXJhZ3JhcGhFbGVtZW50ICZIVE1MUGFyYWdyYXBoRWxlbWVu
dDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90
aGVyLCBJRF9QICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OnAoKSApOwog
ICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtMjk4LDcgKzI5OSw3IEBAIEhUTUxQcmVFbGVtZW50
OjpIVE1MUHJlRWxlbWVudChIVE1MUHJlRWwKIAogSFRNTFByZUVsZW1lbnQgJkhUTUxQcmVFbGVt
ZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlcigg
b3RoZXIsIElEX1BSRSApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpwcmUo
KSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApJbmRleDoga2h0bWwvZG9tL2h0bWxfZWxlbWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZG9tL2h0
bWxfZWxlbWVudC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTQKZGlmZiAtdSAtcCAtcjEu
MTQga2h0bWwvZG9tL2h0bWxfZWxlbWVudC5jcHAKLS0tIGtodG1sL2RvbS9odG1sX2VsZW1lbnQu
Y3BwCTExIE1heSAyMDA1IDAwOjU4OjI4IC0wMDAwCTEuMTQKKysrIGtodG1sL2RvbS9odG1sX2Vs
ZW1lbnQuY3BwCTUgSnVsIDIwMDUgMjM6MjA6MTAgLTAwMDAKQEAgLTE4Miw5ICsxODIsOSBAQCBI
VE1MQ29sbGVjdGlvbiBIVE1MRWxlbWVudDo6Y2hpbGRyZW4oKSBjCiAgICAgcmV0dXJuIEhUTUxD
b2xsZWN0aW9uKGltcGwsIEhUTUxDb2xsZWN0aW9uSW1wbDo6Tk9ERV9DSElMRFJFTik7CiB9CiAK
LXZvaWQgSFRNTEVsZW1lbnQ6OmFzc2lnbk90aGVyKCBjb25zdCBOb2RlICZvdGhlciwgaW50IGVs
ZW1lbnRJZCApCit2b2lkIEhUTUxFbGVtZW50Ojphc3NpZ25PdGhlciggY29uc3QgTm9kZSAmb3Ro
ZXIsIGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUgKQogewotICAgIGlmKChpbnQpb3RoZXIu
ZWxlbWVudElkKCkgIT0gZWxlbWVudElkKSB7CisgICAgaWYgKCFvdGhlci5oYW5kbGUoKS0+aGFz
VGFnTmFtZSh0YWdOYW1lKSkgewogCWlmICggaW1wbCApIGltcGwtPmRlcmVmKCk7CiAJaW1wbCA9
IDA7CiAgICAgfSBlbHNlIHsKSW5kZXg6IGtodG1sL2RvbS9odG1sX2VsZW1lbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9kb20vaHRtbF9lbGVtZW50Lmgs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuOApkaWZmIC11IC1wIC1yMS44IGtodG1sL2RvbS9odG1s
X2VsZW1lbnQuaAotLS0ga2h0bWwvZG9tL2h0bWxfZWxlbWVudC5oCTIyIE1heSAyMDA0IDAxOjUw
OjQ4IC0wMDAwCTEuOAorKysga2h0bWwvZG9tL2h0bWxfZWxlbWVudC5oCTUgSnVsIDIwMDUgMjM6
MjA6MTAgLTAwMDAKQEAgLTMwLDYgKzMwLDggQEAKICNkZWZpbmUgSFRNTF9FTEVNRU5UX0gKIAog
I2luY2x1ZGUgPGRvbS9kb21fZWxlbWVudC5oPgorI2luY2x1ZGUgImRvbV9xbmFtZS5oIgorCiBj
bGFzcyBLSFRNTFZpZXc7CiAKIG5hbWVzcGFjZSBET00gewpAQCAtMjI1LDcgKzIyNyw3IEBAIHBy
b3RlY3RlZDoKICAgICAvKgogICAgICAqIEBpbnRlcm5hbAogICAgICAqLwotICAgIHZvaWQgYXNz
aWduT3RoZXIoIGNvbnN0IE5vZGUgJm90aGVyLCBpbnQgZWxlbWVudElkICk7CisgICAgdm9pZCBh
c3NpZ25PdGhlciggY29uc3QgTm9kZSAmb3RoZXIsIGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05h
bWUgKTsKIH07CiAKIH07IC8vbmFtZXNwYWNlCkluZGV4OiBraHRtbC9kb20vaHRtbF9mb3JtLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9kb20vaHRtbF9m
b3JtLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMQpkaWZmIC11IC1wIC1yMS4xMSBraHRt
bC9kb20vaHRtbF9mb3JtLmNwcAotLS0ga2h0bWwvZG9tL2h0bWxfZm9ybS5jcHAJMTEgTWF5IDIw
MDUgMDA6NTg6MjggLTAwMDAJMS4xMQorKysga2h0bWwvZG9tL2h0bWxfZm9ybS5jcHAJNSBKdWwg
MjAwNSAyMzoyMDoxMSAtMDAwMApAQCAtNDcsNyArNDcsNyBAQCBIVE1MQnV0dG9uRWxlbWVudDo6
SFRNTEJ1dHRvbkVsZW1lbnQoSFRNCiAKIEhUTUxCdXR0b25FbGVtZW50ICZIVE1MQnV0dG9uRWxl
bWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIo
IG90aGVyLCBJRF9CVVRUT04gKTsJCisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6
OmJ1dHRvbigpICk7CQogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtMTU3LDcgKzE1Nyw3IEBA
IEhUTUxGaWVsZFNldEVsZW1lbnQ6OkhUTUxGaWVsZFNldEVsZW1lbnQKIAogSFRNTEZpZWxkU2V0
RWxlbWVudCAmSFRNTEZpZWxkU2V0RWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3Ro
ZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9GSUVMRFNFVCApOworICAgIGFzc2ln
bk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpmaWVsZHNldCgpICk7CiAgICAgcmV0dXJuICp0aGlz
OwogfQogCkBAIC0xOTMsNyArMTkzLDcgQEAgSFRNTEZvcm1FbGVtZW50OjpIVE1MRm9ybUVsZW1l
bnQoSFRNTEZvcgogCiBIVE1MRm9ybUVsZW1lbnQgJkhUTUxGb3JtRWxlbWVudDo6b3BlcmF0b3Ig
PSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9GT1JN
ICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OmZvcm0oKSApOwogICAgIHJl
dHVybiAqdGhpczsKIH0KIApAQCAtMzExLDcgKzMxMSw3IEBAIEhUTUxJbnB1dEVsZW1lbnQ6OkhU
TUxJbnB1dEVsZW1lbnQoSFRNTEkKIAogSFRNTElucHV0RWxlbWVudCAmSFRNTElucHV0RWxlbWVu
dDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90
aGVyLCBJRF9JTlBVVCApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjppbnB1
dCgpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC01NzQsNyArNTc0LDcgQEAgSFRNTExh
YmVsRWxlbWVudDo6SFRNTExhYmVsRWxlbWVudChIVE1MTAogCiBIVE1MTGFiZWxFbGVtZW50ICZI
VE1MTGFiZWxFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBh
c3NpZ25PdGhlciggb3RoZXIsIElEX0xBQkVMICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBI
VE1MTmFtZXM6OmxhYmVsKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTYzMyw3ICs2
MzMsNyBAQCBIVE1MTGVnZW5kRWxlbWVudDo6SFRNTExlZ2VuZEVsZW1lbnQoSFRNCiAKIEhUTUxM
ZWdlbmRFbGVtZW50ICZIVE1MTGVnZW5kRWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAm
b3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9MRUdFTkQgKTsKKyAgICBhc3Np
Z25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6bGVnZW5kKCkgKTsKICAgICByZXR1cm4gKnRoaXM7
CiB9CiAKQEAgLTY5MSw3ICs2OTEsNyBAQCBIVE1MT3B0R3JvdXBFbGVtZW50OjpIVE1MT3B0R3Jv
dXBFbGVtZW50CiAKIEhUTUxPcHRHcm91cEVsZW1lbnQgJkhUTUxPcHRHcm91cEVsZW1lbnQ6Om9w
ZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwg
SURfT1BUR1JPVVAgKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6b3B0Z3Jv
dXAoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtNzQ0LDcgKzc0NCw3IEBAIEhUTUxT
ZWxlY3RFbGVtZW50OjpIVE1MU2VsZWN0RWxlbWVudChIVE0KIAogSFRNTFNlbGVjdEVsZW1lbnQg
JkhUTUxTZWxlY3RFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAg
ICBhc3NpZ25PdGhlciggb3RoZXIsIElEX1NFTEVDVCApOworICAgIGFzc2lnbk90aGVyKCBvdGhl
ciwgSFRNTE5hbWVzOjpzZWxlY3QoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtOTA2
LDcgKzkwNiw3IEBAIEhUTUxUZXh0QXJlYUVsZW1lbnQ6OkhUTUxUZXh0QXJlYUVsZW1lbnQKIAog
SFRNTFRleHRBcmVhRWxlbWVudCAmSFRNTFRleHRBcmVhRWxlbWVudDo6b3BlcmF0b3IgPSAoY29u
c3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9URVhUQVJFQSAp
OworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjp0ZXh0YXJlYSgpICk7CiAgICAg
cmV0dXJuICp0aGlzOwogfQogCkBAIC0xMDc0LDcgKzEwNzQsNyBAQCBIVE1MT3B0aW9uRWxlbWVu
dDo6SFRNTE9wdGlvbkVsZW1lbnQoSFRNCiAKIEhUTUxPcHRpb25FbGVtZW50ICZIVE1MT3B0aW9u
RWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3Ro
ZXIoIG90aGVyLCBJRF9PUFRJT04gKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1l
czo6b3B0aW9uKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTExODIsNyArMTE4Miw3
IEBAIEhUTUxJc0luZGV4RWxlbWVudDo6SFRNTElzSW5kZXhFbGVtZW50KEgKIAogSFRNTElzSW5k
ZXhFbGVtZW50ICZIVE1MSXNJbmRleEVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90
aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfSVNJTkRFWCApOworICAgIGFzc2ln
bk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjppc2luZGV4KCkgKTsKICAgICByZXR1cm4gKnRoaXM7
CiB9CiAKSW5kZXg6IGtodG1sL2RvbS9odG1sX2hlYWQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2RvbS9odG1sX2hlYWQuY3BwLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjEwCmRpZmYgLXUgLXAgLXIxLjEwIGtodG1sL2RvbS9odG1sX2hlYWQuY3BwCi0t
LSBraHRtbC9kb20vaHRtbF9oZWFkLmNwcAkyMiBKdW4gMjAwNSAxODoyMjowMSAtMDAwMAkxLjEw
CisrKyBraHRtbC9kb20vaHRtbF9oZWFkLmNwcAk1IEp1bCAyMDA1IDIzOjIwOjExIC0wMDAwCkBA
IC00Miw3ICs0Miw3IEBAIEhUTUxCYXNlRWxlbWVudDo6SFRNTEJhc2VFbGVtZW50KEhUTUxCYXMK
IAogSFRNTEJhc2VFbGVtZW50ICZIVE1MQmFzZUVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5v
ZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfQkFTRSApOworICAgIGFz
c2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpiYXNlKCkgKTsKICAgICByZXR1cm4gKnRoaXM7
CiB9CiAKQEAgLTk3LDcgKzk3LDcgQEAgSFRNTExpbmtFbGVtZW50OjpIVE1MTGlua0VsZW1lbnQo
SFRNTExpbgogCiBIVE1MTGlua0VsZW1lbnQgJkhUTUxMaW5rRWxlbWVudDo6b3BlcmF0b3IgPSAo
Y29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9MSU5LICk7
CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OmxpbmsoKSApOwogICAgIHJldHVy
biAqdGhpczsKIH0KIApAQCAtMjM4LDcgKzIzOCw3IEBAIEhUTUxNZXRhRWxlbWVudDo6SFRNTE1l
dGFFbGVtZW50KEhUTUxNZXQKIAogSFRNTE1ldGFFbGVtZW50ICZIVE1MTWV0YUVsZW1lbnQ6Om9w
ZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwg
SURfTUVUQSApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjptZXRhKCkgKTsK
ICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTMxMiw3ICszMTIsNyBAQCBIVE1MU2NyaXB0RWxl
bWVudDo6SFRNTFNjcmlwdEVsZW1lbnQoSFRNCiAKIEhUTUxTY3JpcHRFbGVtZW50ICZIVE1MU2Ny
aXB0RWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWdu
T3RoZXIoIG90aGVyLCBJRF9TQ1JJUFQgKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxO
YW1lczo6c2NyaXB0KCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTQyNCw3ICs0MjQs
NyBAQCBIVE1MU3R5bGVFbGVtZW50OjpIVE1MU3R5bGVFbGVtZW50KEhUTUxTCiAKIEhUTUxTdHls
ZUVsZW1lbnQgJkhUTUxTdHlsZUVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVy
KQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfU1RZTEUgKTsKKyAgICBhc3NpZ25PdGhl
ciggb3RoZXIsIEhUTUxOYW1lczo6c3R5bGUoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApA
QCAtNDk2LDcgKzQ5Niw3IEBAIEhUTUxUaXRsZUVsZW1lbnQ6OkhUTUxUaXRsZUVsZW1lbnQoSFRN
TFQKIAogSFRNTFRpdGxlRWxlbWVudCAmSFRNTFRpdGxlRWxlbWVudDo6b3BlcmF0b3IgPSAoY29u
c3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9USVRMRSApOwor
ICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjp0aXRsZSgpICk7CiAgICAgcmV0dXJu
ICp0aGlzOwogfQogCkluZGV4OiBraHRtbC9kb20vaHRtbF9pbWFnZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZG9tL2h0bWxfaW1hZ2UuY3BwLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjkKZGlmZiAtdSAtcCAtcjEuOSBraHRtbC9kb20vaHRtbF9pbWFn
ZS5jcHAKLS0tIGtodG1sL2RvbS9odG1sX2ltYWdlLmNwcAkzIE5vdiAyMDAzIDA2OjMyOjA0IC0w
MDAwCTEuOQorKysga2h0bWwvZG9tL2h0bWxfaW1hZ2UuY3BwCTUgSnVsIDIwMDUgMjM6MjA6MTIg
LTAwMDAKQEAgLTQ2LDcgKzQ2LDcgQEAgSFRNTEFyZWFFbGVtZW50OjpIVE1MQXJlYUVsZW1lbnQo
SFRNTEFyZQogCiBIVE1MQXJlYUVsZW1lbnQgJkhUTUxBcmVhRWxlbWVudDo6b3BlcmF0b3IgPSAo
Y29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9BUkVBICk7
CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OmFyZWEoKSApOwogICAgIHJldHVy
biAqdGhpczsKIH0KIApAQCAtMTc2LDcgKzE3Niw3IEBAIEhUTUxJbWFnZUVsZW1lbnQ6OkhUTUxJ
bWFnZUVsZW1lbnQoSFRNTEkKIAogSFRNTEltYWdlRWxlbWVudCAmSFRNTEltYWdlRWxlbWVudDo6
b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVy
LCBJRF9JTUcgKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6aW1nKCkgKTsK
ICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTM3Miw3ICszNzIsNyBAQCBIVE1MTWFwRWxlbWVu
dDo6SFRNTE1hcEVsZW1lbnQoSFRNTE1hcEVsCiAKIEhUTUxNYXBFbGVtZW50ICZIVE1MTWFwRWxl
bWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIo
IG90aGVyLCBJRF9NQVAgKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6bWFw
KCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKSW5kZXg6IGtodG1sL2RvbS9odG1sX2lubGlu
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZG9tL2h0
bWxfaW5saW5lLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS43CmRpZmYgLXUgLXAgLXIxLjcg
a2h0bWwvZG9tL2h0bWxfaW5saW5lLmNwcAotLS0ga2h0bWwvZG9tL2h0bWxfaW5saW5lLmNwcAkx
MSBNYXkgMjAwNSAwMDo1ODoyOCAtMDAwMAkxLjcKKysrIGtodG1sL2RvbS9odG1sX2lubGluZS5j
cHAJNSBKdWwgMjAwNSAyMzoyMDoxMiAtMDAwMApAQCAtNDUsNyArNDUsNyBAQCBIVE1MQW5jaG9y
RWxlbWVudDo6SFRNTEFuY2hvckVsZW1lbnQoSFRNCiAKIEhUTUxBbmNob3JFbGVtZW50ICZIVE1M
QW5jaG9yRWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNz
aWduT3RoZXIoIG90aGVyLCBJRF9BICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFt
ZXM6OmEoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtMjE3LDcgKzIxNyw3IEBAIEhU
TUxCUkVsZW1lbnQ6OkhUTUxCUkVsZW1lbnQoSFRNTEJSRWxlbWUKIAogSFRNTEJSRWxlbWVudCAm
SFRNTEJSRWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNz
aWduT3RoZXIoIG90aGVyLCBJRF9CUiApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5h
bWVzOjpicigpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC0yNTgsNyArMjU4LDcgQEAg
SFRNTEZvbnRFbGVtZW50OjpIVE1MRm9udEVsZW1lbnQoSFRNTEZvbgogCiBIVE1MRm9udEVsZW1l
bnQgJkhUTUxGb250RWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0g
ICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9GT05UICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVy
LCBIVE1MTmFtZXM6OmZvbnQoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtMzE5LDcg
KzMxOSw3IEBAIEhUTUxNb2RFbGVtZW50OjpIVE1MTW9kRWxlbWVudChjb25zdCBIVE0KIEhUTUxN
b2RFbGVtZW50OjpIVE1MTW9kRWxlbWVudChIVE1MRWxlbWVudEltcGwgKl9pbXBsKQogICAgIDog
SFRNTEVsZW1lbnQoKQogewotICAgIGlmIChfaW1wbCAmJiAoX2ltcGwtPmlkKCkgPT0gSURfSU5T
IHx8IF9pbXBsLT5pZCgpID09IElEX0RFTCkpCisgICAgaWYgKF9pbXBsICYmIChfaW1wbC0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OmlucygpKSB8fCBfaW1wbC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
OmRlbCgpKSkpCiAgICAgICAgIGltcGwgPSBfaW1wbDsKICAgICBlbHNlCiAgICAgICAgIGltcGwg
PSAwOwpAQCAtMzI4LDkgKzMyOCw4IEBAIEhUTUxNb2RFbGVtZW50OjpIVE1MTW9kRWxlbWVudChI
VE1MRWxlbWUKIAogSFRNTE1vZEVsZW1lbnQgJkhUTUxNb2RFbGVtZW50OjpvcGVyYXRvciA9IChj
b25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBpZiggb3RoZXIuZWxlbWVudElkKCkgIT0gSURfSU5T
ICYmCi0Jb3RoZXIuZWxlbWVudElkKCkgIT0gSURfREVMICkKLSAgICB7CisgICAgaWYgKCFvdGhl
ci5oYW5kbGUoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmlucygpKSAmJgorICAgICAgICAhb3Ro
ZXIuaGFuZGxlKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpkZWwoKSkpIHsKIAlpZiAoIGltcGwg
KSBpbXBsLT5kZXJlZigpOwogCWltcGwgPSAwOwogICAgIH0gZWxzZSB7CkBAIC0zODEsMTkgKzM4
MCwxNiBAQCBIVE1MUXVvdGVFbGVtZW50OjpIVE1MUXVvdGVFbGVtZW50KGNvbnN0CiB7CiB9CiAK
LUhUTUxRdW90ZUVsZW1lbnQ6OkhUTUxRdW90ZUVsZW1lbnQoSFRNTEdlbmVyaWNFbGVtZW50SW1w
bCAqX2ltcGwpCitIVE1MUXVvdGVFbGVtZW50OjpIVE1MUXVvdGVFbGVtZW50KEhUTUxRdW90ZUVs
ZW1lbnRJbXBsICpfaW1wbCkKICAgICA6IEhUTUxFbGVtZW50KCkKIHsKLSAgICBpZiAoX2ltcGwg
JiYgX2ltcGwtPmlkKCkgPT0gSURfUSkKLSAgICAgICAgaW1wbCA9IF9pbXBsOwotICAgIGVsc2UK
LSAgICAgICAgaW1wbCA9IDA7CisgICAgaW1wbCA9IF9pbXBsOwogICAgIGlmICggaW1wbCApIGlt
cGwtPnJlZigpOwogfQogCiBIVE1MUXVvdGVFbGVtZW50ICZIVE1MUXVvdGVFbGVtZW50OjpvcGVy
YXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElE
X1EgKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6cSgpICk7CiAgICAgcmV0
dXJuICp0aGlzOwogfQogCkluZGV4OiBraHRtbC9kb20vaHRtbF9pbmxpbmUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9kb20vaHRtbF9pbmxpbmUuaCx2CnJl
dHJpZXZpbmcgcmV2aXNpb24gMS4zCmRpZmYgLXUgLXAgLXIxLjMga2h0bWwvZG9tL2h0bWxfaW5s
aW5lLmgKLS0tIGtodG1sL2RvbS9odG1sX2lubGluZS5oCTE1IEFwciAyMDAyIDIzOjQyOjAxIC0w
MDAwCTEuMworKysga2h0bWwvZG9tL2h0bWxfaW5saW5lLmgJNSBKdWwgMjAwNSAyMzoyMDoxMiAt
MDAwMApAQCAtNDI1LDcgKzQyNSw3IEBAIHB1YmxpYzoKICAgICBIVE1MUXVvdGVFbGVtZW50KGNv
bnN0IE5vZGUgJm90aGVyKSA6IEhUTUxFbGVtZW50KCkKICAgICAgICAgIHsoKnRoaXMpPW90aGVy
O30KIHByb3RlY3RlZDoKLSAgICBIVE1MUXVvdGVFbGVtZW50KEhUTUxHZW5lcmljRWxlbWVudElt
cGwgKmltcGwpOworICAgIEhUTUxRdW90ZUVsZW1lbnQoSFRNTFF1b3RlRWxlbWVudEltcGwgKmlt
cGwpOwogcHVibGljOgogCiAgICAgSFRNTFF1b3RlRWxlbWVudCAmIG9wZXJhdG9yID0gKGNvbnN0
IEhUTUxRdW90ZUVsZW1lbnQgJm90aGVyKTsKSW5kZXg6IGtodG1sL2RvbS9odG1sX2xpc3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2RvbS9odG1sX2xp
c3QuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjQKZGlmZiAtdSAtcCAtcjEuNCBraHRtbC9k
b20vaHRtbF9saXN0LmNwcAotLS0ga2h0bWwvZG9tL2h0bWxfbGlzdC5jcHAJMTAgSnVuIDIwMDIg
MjA6MDc6MzYgLTAwMDAJMS40CisrKyBraHRtbC9kb20vaHRtbF9saXN0LmNwcAk1IEp1bCAyMDA1
IDIzOjIwOjEyIC0wMDAwCkBAIC00MSw3ICs0MSw3IEBAIEhUTUxETGlzdEVsZW1lbnQ6OkhUTUxE
TGlzdEVsZW1lbnQoSFRNTEQKIAogSFRNTERMaXN0RWxlbWVudCAmSFRNTERMaXN0RWxlbWVudDo6
b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVy
LCBJRF9ETCApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpkbCgpICk7CiAg
ICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC04OCw3ICs4OCw3IEBAIEhUTUxEaXJlY3RvcnlFbGVt
ZW50OjpIVE1MRGlyZWN0b3J5RWxlbWUKIAogSFRNTERpcmVjdG9yeUVsZW1lbnQgJkhUTUxEaXJl
Y3RvcnlFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3Np
Z25PdGhlciggb3RoZXIsIElEX0RJUiApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5h
bWVzOjpkaXIoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtMTM1LDcgKzEzNSw3IEBA
IEhUTUxMSUVsZW1lbnQ6OkhUTUxMSUVsZW1lbnQoSFRNTExJRWxlbWUKIAogSFRNTExJRWxlbWVu
dCAmSFRNTExJRWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAg
YXNzaWduT3RoZXIoIG90aGVyLCBJRF9MSSApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRN
TE5hbWVzOjpsaSgpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC0xOTAsNyArMTkwLDcg
QEAgSFRNTE1lbnVFbGVtZW50OjpIVE1MTWVudUVsZW1lbnQoSFRNTE1lbgogCiBIVE1MTWVudUVs
ZW1lbnQgJkhUTUxNZW51RWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7
Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9NRU5VICk7CisgICAgYXNzaWduT3RoZXIoIG90
aGVyLCBIVE1MTmFtZXM6Om1lbnUoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtMjM3
LDcgKzIzNyw3IEBAIEhUTUxPTGlzdEVsZW1lbnQ6OkhUTUxPTGlzdEVsZW1lbnQoSFRNTE8KIAog
SFRNTE9MaXN0RWxlbWVudCAmSFRNTE9MaXN0RWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9k
ZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9PTCApOworICAgIGFzc2ln
bk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpvbCgpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQog
CkBAIC0zMTAsNyArMzEwLDcgQEAgSFRNTFVMaXN0RWxlbWVudDo6SFRNTFVMaXN0RWxlbWVudChI
VE1MVQogCiBIVE1MVUxpc3RFbGVtZW50ICZIVE1MVUxpc3RFbGVtZW50OjpvcGVyYXRvciA9IChj
b25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX1VMICk7Cisg
ICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OnVsKCkgKTsKICAgICByZXR1cm4gKnRo
aXM7CiB9CiAKSW5kZXg6IGtodG1sL2RvbS9odG1sX21pc2MuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2RvbS9odG1sX21pc2MuY3BwLHYKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjcKZGlmZiAtdSAtcCAtcjEuNyBraHRtbC9kb20vaHRtbF9taXNjLmNwcAot
LS0ga2h0bWwvZG9tL2h0bWxfbWlzYy5jcHAJMTEgTWF5IDIwMDUgMDA6NTg6MjggLTAwMDAJMS43
CisrKyBraHRtbC9kb20vaHRtbF9taXNjLmNwcAk1IEp1bCAyMDA1IDIzOjIwOjEyIC0wMDAwCkBA
IC00MSw3ICs0MSw3IEBAIEhUTUxCYXNlRm9udEVsZW1lbnQ6OkhUTUxCYXNlRm9udEVsZW1lbnQK
IAogSFRNTEJhc2VGb250RWxlbWVudCAmSFRNTEJhc2VGb250RWxlbWVudDo6b3BlcmF0b3IgPSAo
Y29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9CQVNFRk9O
VCApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpiYXNlZm9udCgpICk7CiAg
ICAgcmV0dXJuICp0aGlzOwogfQogCkluZGV4OiBraHRtbC9kb20vaHRtbF9vYmplY3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2RvbS9odG1sX29iamVj
dC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNQpkaWZmIC11IC1wIC1yMS41IGtodG1sL2Rv
bS9odG1sX29iamVjdC5jcHAKLS0tIGtodG1sL2RvbS9odG1sX29iamVjdC5jcHAJMSBNYXIgMjAw
NCAxNzowNDoyNCAtMDAwMAkxLjUKKysrIGtodG1sL2RvbS9odG1sX29iamVjdC5jcHAJNSBKdWwg
MjAwNSAyMzoyMDoxMyAtMDAwMApAQCAtNDMsNyArNDMsNyBAQCBIVE1MQXBwbGV0RWxlbWVudDo6
SFRNTEFwcGxldEVsZW1lbnQoSFRNCiAKIEhUTUxBcHBsZXRFbGVtZW50ICZIVE1MQXBwbGV0RWxl
bWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIo
IG90aGVyLCBJRF9BUFBMRVQgKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6
YXBwbGV0KCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTE5NCw3ICsxOTQsNyBAQCBI
VE1MT2JqZWN0RWxlbWVudDo6SFRNTE9iamVjdEVsZW1lbnQoSFRNCiAKIEhUTUxPYmplY3RFbGVt
ZW50ICZIVE1MT2JqZWN0RWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7
Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9PQkpFQ1QgKTsKKyAgICBhc3NpZ25PdGhlcigg
b3RoZXIsIEhUTUxOYW1lczo6b2JqZWN0KCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAg
LTQzMiw3ICs0MzIsNyBAQCBIVE1MUGFyYW1FbGVtZW50OjpIVE1MUGFyYW1FbGVtZW50KEhUTUxQ
CiAKIEhUTUxQYXJhbUVsZW1lbnQgJkhUTUxQYXJhbUVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0
IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfUEFSQU0gKTsKKyAg
ICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6cGFyYW0oKSApOwogICAgIHJldHVybiAq
dGhpczsKIH0KIApJbmRleDoga2h0bWwvZG9tL2h0bWxfdGFibGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2RvbS9odG1sX3RhYmxlLmNwcCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS42CmRpZmYgLXUgLXAgLXIxLjYga2h0bWwvZG9tL2h0bWxfdGFibGUu
Y3BwCi0tLSBraHRtbC9kb20vaHRtbF90YWJsZS5jcHAJMzEgT2N0IDIwMDMgMDA6NDc6MTYgLTAw
MDAJMS42CisrKyBraHRtbC9kb20vaHRtbF90YWJsZS5jcHAJNSBKdWwgMjAwNSAyMzoyMDoxMyAt
MDAwMApAQCAtNDUsNyArNDUsNyBAQCBIVE1MVGFibGVDYXB0aW9uRWxlbWVudDo6SFRNTFRhYmxl
Q2FwdGlvCiAKIEhUTUxUYWJsZUNhcHRpb25FbGVtZW50ICZIVE1MVGFibGVDYXB0aW9uRWxlbWVu
dDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90
aGVyLCBJRF9DQVBUSU9OICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OmNh
cHRpb24oKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtODYsOSArODYsOCBAQCBIVE1M
VGFibGVDZWxsRWxlbWVudDo6SFRNTFRhYmxlQ2VsbEVsZW1lCiAKIEhUTUxUYWJsZUNlbGxFbGVt
ZW50ICZIVE1MVGFibGVDZWxsRWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIp
CiB7Ci0gICAgaWYoIG90aGVyLmVsZW1lbnRJZCgpICE9IElEX1REICYmCi0Jb3RoZXIuZWxlbWVu
dElkKCkgIT0gSURfVEggKQotICAgIHsKKyAgICBpZiAoIW90aGVyLmhhbmRsZSgpLT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6dGQoKSkgfHwKKyAgICAgICAgIW90aGVyLmhhbmRsZSgpLT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6dGgoKSkpIHsKIAlpZiAoIGltcGwgKSBpbXBsLT5kZXJlZigpOwogCWlt
cGwgPSAwOwogICAgIH0gZWxzZSB7CkBAIC0yOTUsOSArMjk0LDggQEAgSFRNTFRhYmxlQ29sRWxl
bWVudDo6SFRNTFRhYmxlQ29sRWxlbWVudAogCiBIVE1MVGFibGVDb2xFbGVtZW50ICZIVE1MVGFi
bGVDb2xFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBpZigg
b3RoZXIuZWxlbWVudElkKCkgIT0gSURfQ09MICYmCi0Jb3RoZXIuZWxlbWVudElkKCkgIT0gSURf
Q09MR1JPVVAgKQotICAgIHsKKyAgICBpZiAoIW90aGVyLmhhbmRsZSgpLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6Y29sKCkpICYmCisgICAgICAgICFvdGhlci5oYW5kbGUoKS0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OmNvbGdyb3VwKCkpKSB7CiAJaWYgKCBpbXBsICkgaW1wbC0+ZGVyZWYoKTsKIAlp
bXBsID0gMDsKICAgICB9IGVsc2UgewpAQCAtNDAxLDcgKzM5OSw3IEBAIEhUTUxUYWJsZUVsZW1l
bnQ6OkhUTUxUYWJsZUVsZW1lbnQoSFRNTFQKIAogSFRNTFRhYmxlRWxlbWVudCAmSFRNTFRhYmxl
RWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3Ro
ZXIoIG90aGVyLCBJRF9UQUJMRSApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVz
Ojp0YWJsZSgpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC02MzgsNyArNjM2LDcgQEAg
SFRNTFRhYmxlUm93RWxlbWVudDo6SFRNTFRhYmxlUm93RWxlbWVudAogCiBIVE1MVGFibGVSb3dF
bGVtZW50ICZIVE1MVGFibGVSb3dFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhl
cikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX1RSICk7CisgICAgYXNzaWduT3RoZXIo
IG90aGVyLCBIVE1MTmFtZXM6OnRyKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTc3
NSwxMCArNzczLDkgQEAgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ6OkhUTUxUYWJsZVNlY3Rpbwog
CiBIVE1MVGFibGVTZWN0aW9uRWxlbWVudCAmSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ6Om9wZXJh
dG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGlmKG90aGVyLmVsZW1lbnRJZCgpICE9
IElEX1RCT0RZICYmCi0gICAgICAgb3RoZXIuZWxlbWVudElkKCkgIT0gSURfVEhFQUQgJiYKLSAg
ICAgICBvdGhlci5lbGVtZW50SWQoKSAhPSBJRF9URk9PVCApCi0gICAgeworICAgIGlmICghb3Ro
ZXIuaGFuZGxlKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0Ym9keSgpKSAmJgorICAgICAgICAh
b3RoZXIuaGFuZGxlKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0aGVhZCgpKSAmJgorICAgICAg
ICAhb3RoZXIuaGFuZGxlKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0Zm9vdCgpKSkgewogCWlm
ICggaW1wbCApIGltcGwtPmRlcmVmKCk7CiAJaW1wbCA9IDA7CiAgICAgfSBlbHNlIHsKSW5kZXg6
IGtodG1sL2VjbWEva2pzX2Nzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dl
YkNvcmUva2h0bWwvZWNtYS9ranNfY3NzLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yNwpk
aWZmIC11IC1wIC1yMS4yNyBraHRtbC9lY21hL2tqc19jc3MuY3BwCi0tLSBraHRtbC9lY21hL2tq
c19jc3MuY3BwCTMgSnVsIDIwMDUgMTA6NDc6NTUgLTAwMDAJMS4yNworKysga2h0bWwvZWNtYS9r
anNfY3NzLmNwcAk1IEp1bCAyMDA1IDIzOjIwOjE0IC0wMDAwCkBAIC0yOSw3ICsyOSw3IEBACiAj
aW5jbHVkZSAieG1sL2RvbV9kb2NpbXBsLmgiCiAjaW5jbHVkZSAiaHRtbC9odG1sX2hlYWRpbXBs
LmgiIC8vIGZvciBIVE1MU3R5bGVFbGVtZW50CiAjaW5jbHVkZSAia2pzX2RvbS5oIgotI2luY2x1
ZGUgIm1pc2MvaHRtbHRhZ3MuaCIKKyNpbmNsdWRlICJodG1sbmFtZXMuaCIKIAogI2luY2x1ZGUg
PGtkZWJ1Zy5oPgogCkBAIC01NSw2ICs1NSw3IEBAIHVzaW5nIERPTTo6Q291bnRlckltcGw7CiB1
c2luZyBET006OkRvY3VtZW50SW1wbDsKIHVzaW5nIERPTTo6RE9NU3RyaW5nOwogdXNpbmcgRE9N
OjpFbGVtZW50SW1wbDsKK3VzaW5nIERPTTo6SFRNTE5hbWVzOwogdXNpbmcgRE9NOjpIVE1MU3R5
bGVFbGVtZW50SW1wbDsKIHVzaW5nIERPTTo6TWVkaWFMaXN0SW1wbDsKIHVzaW5nIERPTTo6UmVj
dEltcGw7CkBAIC00MDQsNyArNDA1LDcgQEAgVmFsdWUgRE9NU3R5bGVTaGVldExpc3Q6OnRyeUdl
dChFeGVjU3RhdAogICAvLyBhbmQgZG9lc24ndCBsb29rIGZvciBuYW1lIGF0dHJpYnV0ZSAoc2Vl
IGltcGxlbWVudGF0aW9uIGFib3ZlKS4KICAgLy8gQnV0IHVuaWNpdHkgb2Ygc3R5bGVzaGVldCBp
ZHMgaXMgZ29vZCBwcmFjdGljZSBhbnl3YXkgOykKICAgRWxlbWVudEltcGwgKmVsZW1lbnQgPSBt
X2RvYy0+Z2V0RWxlbWVudEJ5SWQocC5zdHJpbmcoKSk7Ci0gIGlmIChlbGVtZW50ICYmIGVsZW1l
bnQtPmlkKCkgPT0gSURfU1RZTEUpCisgIGlmIChlbGVtZW50ICYmIGVsZW1lbnQtPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjpzdHlsZSgpKSkKICAgICByZXR1cm4gZ2V0RE9NU3R5bGVTaGVldChleGVj
LCBzdGF0aWNfY2FzdDxIVE1MU3R5bGVFbGVtZW50SW1wbCAqPihlbGVtZW50KS0+c2hlZXQoKSk7
CiAKICAgcmV0dXJuIERPTU9iamVjdDo6dHJ5R2V0KGV4ZWMsIHApOwpJbmRleDoga2h0bWwvZWNt
YS9ranNfZG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRt
bC9lY21hL2tqc19kb20uY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjc3CmRpZmYgLXUgLXAg
LXIxLjc3IGtodG1sL2VjbWEva2pzX2RvbS5jcHAKLS0tIGtodG1sL2VjbWEva2pzX2RvbS5jcHAJ
MyBKdWwgMjAwNSAxMDo0Nzo1NSAtMDAwMAkxLjc3CisrKyBraHRtbC9lY21hL2tqc19kb20uY3Bw
CTUgSnVsIDIwMDUgMjM6MjA6MTYgLTAwMDAKQEAgLTQ3LDggKzQ3LDYgQEAKIAogI2luY2x1ZGUg
Imh0bWxfb2JqZWN0aW1wbC5oIgogCi0jaW5jbHVkZSAibWlzYy9odG1sdGFncy5oIgotCiAjaWYg
QVBQTEVfQ0hBTkdFUwogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL3J1bnRpbWVfb2JqZWN0Lmg+
CiAjZW5kaWYKQEAgLTY3LDYgKzY1LDcgQEAgdXNpbmcgRE9NOjpIVE1MQXBwbGV0RWxlbWVudElt
cGw7CiB1c2luZyBET006OkhUTUxEb2N1bWVudEltcGw7CiB1c2luZyBET006OkhUTUxFbGVtZW50
SW1wbDsKIHVzaW5nIERPTTo6SFRNTEVtYmVkRWxlbWVudEltcGw7Cit1c2luZyBET006OkhUTUxO
YW1lczsKIHVzaW5nIERPTTo6SFRNTE9iamVjdEVsZW1lbnRJbXBsOwogdXNpbmcgRE9NOjpOYW1l
ZE5vZGVNYXBJbXBsOwogdXNpbmcgRE9NOjpOb2RlOwpAQCAtNDYyLDcgKzQ2MSw3IEBAIHZvaWQg
RE9NTm9kZTo6cHV0VmFsdWUoRXhlY1N0YXRlICpleGVjLCAKICAgICBub2RlLnNldE5vZGVWYWx1
ZSh2YWx1ZS50b1N0cmluZyhleGVjKS5zdHJpbmcoKSwgZXhjZXB0aW9uKTsKICAgICBicmVhazsK
ICAgY2FzZSBQcmVmaXg6Ci0gICAgbm9kZS5zZXRQcmVmaXgodmFsdWUudG9TdHJpbmcoZXhlYyku
c3RyaW5nKCksIGV4Y2VwdGlvbik7CisgICAgbm9kZS5zZXRQcmVmaXgodmFsdWUudG9TdHJpbmco
ZXhlYykuc3RyaW5nKCkuaW1wbGVtZW50YXRpb24oKSwgZXhjZXB0aW9uKTsKICAgICBicmVhazsK
ICAgY2FzZSBPbkFib3J0OgogICAgIHNldExpc3RlbmVyKGV4ZWMsRE9NOjpFdmVudEltcGw6OkFC
T1JUX0VWRU5ULHZhbHVlKTsKQEAgLTExODcsNyArMTE4Niw3IEBAIFZhbHVlIERPTUVsZW1lbnQ6
OnRyeUdldChFeGVjU3RhdGUgKmV4ZWMKICAgewogICAgIHN3aXRjaCggZW50cnktPnZhbHVlICkg
ewogICAgIGNhc2UgVGFnTmFtZToKLSAgICAgIHJldHVybiBnZXRTdHJpbmdPck51bGwoZWxlbWVu
dC50YWdOYW1lKCkpOworICAgICAgcmV0dXJuIGdldFN0cmluZ09yTnVsbChlbGVtZW50Lm5vZGVO
YW1lKCkpOwogICAgIGNhc2UgU3R5bGU6CiAgICAgICByZXR1cm4gZ2V0RE9NQ1NTU3R5bGVEZWNs
YXJhdGlvbihleGVjLGVsZW1lbnQuc3R5bGUoKSk7CiAgICAgZGVmYXVsdDoKQEAgLTE3MTAsMjYg
KzE3MDksMjEgQEAgVmFsdWVJbXAgKmdldFJ1bnRpbWVPYmplY3QoRXhlY1N0YXRlICpleAogICAg
IGlmICghbikKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBzd2l0Y2ggKG4tPmlkKCkpIHsKLSAg
ICAgICAgY2FzZSBJRF9BUFBMRVQ6IHsKLSAgICAgICAgICAgIEhUTUxBcHBsZXRFbGVtZW50SW1w
bCAqYXBwbGV0RWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxBcHBsZXRFbGVtZW50SW1wbCAqPihu
KTsKLSAgICAgICAgICAgIGlmIChhcHBsZXRFbGVtZW50LT5nZXRBcHBsZXRJbnN0YW5jZSgpKQot
ICAgICAgICAgICAgICAgIC8vIFRoZSBpbnN0YW5jZSBpcyBvd25lZCBieSB0aGUgYXBwbGV0IGVs
ZW1lbnQuCi0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBSdW50aW1lT2JqZWN0SW1wKGFwcGxl
dEVsZW1lbnQtPmdldEFwcGxldEluc3RhbmNlKCksIGZhbHNlKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgSURfRU1CRUQ6IHsKLSAgICAgICAgICAgIEhUTUxF
bWJlZEVsZW1lbnRJbXBsICplbWJlZEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRW1iZWRFbGVt
ZW50SW1wbCAqPihuKTsKLSAgICAgICAgICAgIGlmIChlbWJlZEVsZW1lbnQtPmdldEVtYmVkSW5z
dGFuY2UoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFJ1bnRpbWVPYmplY3RJbXAoZW1i
ZWRFbGVtZW50LT5nZXRFbWJlZEluc3RhbmNlKCksIGZhbHNlKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgSURfT0JKRUNUOiB7Ci0gICAgICAgICAgICBIVE1M
T2JqZWN0RWxlbWVudEltcGwgKm9iamVjdEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MT2JqZWN0
RWxlbWVudEltcGwgKj4obik7Ci0gICAgICAgICAgICBpZiAob2JqZWN0RWxlbWVudC0+Z2V0T2Jq
ZWN0SW5zdGFuY2UoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFJ1bnRpbWVPYmplY3RJ
bXAob2JqZWN0RWxlbWVudC0+Z2V0T2JqZWN0SW5zdGFuY2UoKSwgZmFsc2UpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KKyAgICBpZiAobi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmFw
cGxldCgpKSkgeworICAgICAgICBIVE1MQXBwbGV0RWxlbWVudEltcGwgKmFwcGxldEVsZW1lbnQg
PSBzdGF0aWNfY2FzdDxIVE1MQXBwbGV0RWxlbWVudEltcGwgKj4obik7CisgICAgICAgIGlmIChh
cHBsZXRFbGVtZW50LT5nZXRBcHBsZXRJbnN0YW5jZSgpKQorICAgICAgICAgICAgLy8gVGhlIGlu
c3RhbmNlIGlzIG93bmVkIGJ5IHRoZSBhcHBsZXQgZWxlbWVudC4KKyAgICAgICAgICAgIHJldHVy
biBuZXcgUnVudGltZU9iamVjdEltcChhcHBsZXRFbGVtZW50LT5nZXRBcHBsZXRJbnN0YW5jZSgp
LCBmYWxzZSk7CisgICAgfQorICAgIGVsc2UgaWYgKG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpl
bWJlZCgpKSkgeworICAgICAgICBIVE1MRW1iZWRFbGVtZW50SW1wbCAqZW1iZWRFbGVtZW50ID0g
c3RhdGljX2Nhc3Q8SFRNTEVtYmVkRWxlbWVudEltcGwgKj4obik7CisgICAgICAgIGlmIChlbWJl
ZEVsZW1lbnQtPmdldEVtYmVkSW5zdGFuY2UoKSkKKyAgICAgICAgICAgIHJldHVybiBuZXcgUnVu
dGltZU9iamVjdEltcChlbWJlZEVsZW1lbnQtPmdldEVtYmVkSW5zdGFuY2UoKSwgZmFsc2UpOwor
ICAgIH0KKyAgICBlbHNlIGlmIChuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b2JqZWN0KCkpKSB7
CisgICAgICAgIEhUTUxPYmplY3RFbGVtZW50SW1wbCAqb2JqZWN0RWxlbWVudCA9IHN0YXRpY19j
YXN0PEhUTUxPYmplY3RFbGVtZW50SW1wbCAqPihuKTsKKyAgICAgICAgaWYgKG9iamVjdEVsZW1l
bnQtPmdldE9iamVjdEluc3RhbmNlKCkpCisgICAgICAgICAgICByZXR1cm4gbmV3IFJ1bnRpbWVP
YmplY3RJbXAob2JqZWN0RWxlbWVudC0+Z2V0T2JqZWN0SW5zdGFuY2UoKSwgZmFsc2UpOwogICAg
IH0KICAgICAKICAgICAvLyBJZiB3ZSBkb24ndCBoYXZlIGEgcnVudGltZSBvYmplY3QgcmV0dXJu
IDAuCkluZGV4OiBraHRtbC9lY21hL2tqc19odG1sLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lY21hL2tqc19odG1sLmNwcCx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS4xMjEKZGlmZiAtdSAtcCAtcjEuMTIxIGtodG1sL2VjbWEva2pzX2h0bWwuY3BwCi0t
LSBraHRtbC9lY21hL2tqc19odG1sLmNwcAkzIEp1bCAyMDA1IDEwOjQ3OjU2IC0wMDAwCTEuMTIx
CisrKyBraHRtbC9lY21hL2tqc19odG1sLmNwcAk1IEp1bCAyMDA1IDIzOjIwOjIxIC0wMDAwCkBA
IC00Niw4ICs0Niw2IEBACiAjaW5jbHVkZSAia2pzX2V2ZW50cy5oIgogI2luY2x1ZGUgImtqc19w
cm94eS5oIgogCi0jaW5jbHVkZSAibWlzYy9odG1sdGFncy5oIgotCiAjaW5jbHVkZSAicmVuZGVy
aW5nL3JlbmRlcl9jYW52YXNpbWFnZS5oIgogI2luY2x1ZGUgInJlbmRlcmluZy9yZW5kZXJfb2Jq
ZWN0LmgiCiAjaW5jbHVkZSAicmVuZGVyaW5nL3JlbmRlcl9sYXllci5oIgpAQCAtMTA5LDYgKzEw
Nyw3IEBAIHVzaW5nIERPTTo6SFRNTE1hcEVsZW1lbnRJbXBsOwogdXNpbmcgRE9NOjpIVE1MTWVu
dUVsZW1lbnRJbXBsOwogdXNpbmcgRE9NOjpIVE1MTWV0YUVsZW1lbnRJbXBsOwogdXNpbmcgRE9N
OjpIVE1MTW9kRWxlbWVudEltcGw7Cit1c2luZyBET006OkhUTUxOYW1lczsKIHVzaW5nIERPTTo6
SFRNTE9MaXN0RWxlbWVudEltcGw7CiB1c2luZyBET006OkhUTUxPYmplY3RFbGVtZW50SW1wbDsK
IHVzaW5nIERPTTo6SFRNTE9wdEdyb3VwRWxlbWVudEltcGw7CkBAIC0zNTMsNyArMzUyLDcgQEAg
VmFsdWUgSFRNTERvY3VtZW50Ojp0cnlHZXQoRXhlY1N0YXRlICpleAogICBpZiAodmFsKQogICAg
IHJldHVybiBWYWx1ZSh2YWwpOwogCi0gIEhUTUxCb2R5RWxlbWVudEltcGwgKmJvZHlFbGVtZW50
ID0gKGJvZHkgJiYgYm9keS0+aWQoKSA9PSBJRF9CT0RZKSA/IHN0YXRpY19jYXN0PEhUTUxCb2R5
RWxlbWVudEltcGwgKj4oYm9keSkgOiAwOworICBIVE1MQm9keUVsZW1lbnRJbXBsICpib2R5RWxl
bWVudCA9IChib2R5ICYmIGJvZHktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpib2R5KCkpKSA/IHN0
YXRpY19jYXN0PEhUTUxCb2R5RWxlbWVudEltcGwgKj4oYm9keSkgOiAwOwogCiAgIGlmIChlbnRy
eSkgewogICAgIHN3aXRjaCAoZW50cnktPnZhbHVlKSB7CkBAIC00MjksNyArNDI4LDcgQEAgdm9p
ZCBLSlM6OkhUTUxEb2N1bWVudDo6cHV0VmFsdWUoRXhlY1N0YQogICBET01FeGNlcHRpb25UcmFu
c2xhdG9yIGV4Y2VwdGlvbihleGVjKTsKICAgSFRNTERvY3VtZW50SW1wbCAmZG9jID0gKnN0YXRp
Y19jYXN0PEhUTUxEb2N1bWVudEltcGwgKj4oaW1wbCgpKTsKICAgSFRNTEVsZW1lbnRJbXBsICpi
b2R5ID0gZG9jLmJvZHkoKTsKLSAgSFRNTEJvZHlFbGVtZW50SW1wbCAqYm9keUVsZW1lbnQgPSAo
Ym9keSAmJiBib2R5LT5pZCgpID09IElEX0JPRFkpID8gc3RhdGljX2Nhc3Q8SFRNTEJvZHlFbGVt
ZW50SW1wbCAqPihib2R5KSA6IDA7CisgIEhUTUxCb2R5RWxlbWVudEltcGwgKmJvZHlFbGVtZW50
ID0gKGJvZHkgJiYgYm9keS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJvZHkoKSkpID8gc3RhdGlj
X2Nhc3Q8SFRNTEJvZHlFbGVtZW50SW1wbCAqPihib2R5KSA6IDA7CiAKICAgc3dpdGNoICh0b2tl
bikgewogICBjYXNlIFRpdGxlOgpAQCAtNTgzLDEzMyArNTgyLDIxOCBAQCBjb25zdCBDbGFzc0lu
Zm8gS0pTOjpIVE1MRWxlbWVudDo6bWFycXVlCiAKIGNvbnN0IENsYXNzSW5mbyogS0pTOjpIVE1M
RWxlbWVudDo6Y2xhc3NJbmZvKCkgY29uc3QKIHsKLSAgc3dpdGNoIChpbXBsKCktPmlkKCkpIHsK
LSAgY2FzZSBJRF9IVE1MOgotICAgIHJldHVybiAmaHRtbF9pbmZvOwotICBjYXNlIElEX0hFQUQ6
Ci0gICAgcmV0dXJuICZoZWFkX2luZm87Ci0gIGNhc2UgSURfTElOSzoKLSAgICByZXR1cm4gJmxp
bmtfaW5mbzsKLSAgY2FzZSBJRF9USVRMRToKLSAgICByZXR1cm4gJnRpdGxlX2luZm87Ci0gIGNh
c2UgSURfTUVUQToKLSAgICByZXR1cm4gJm1ldGFfaW5mbzsKLSAgY2FzZSBJRF9CQVNFOgotICAg
IHJldHVybiAmYmFzZV9pbmZvOwotICBjYXNlIElEX0lTSU5ERVg6Ci0gICAgcmV0dXJuICZpc0lu
ZGV4X2luZm87Ci0gIGNhc2UgSURfU1RZTEU6Ci0gICAgcmV0dXJuICZzdHlsZV9pbmZvOwotICBj
YXNlIElEX0JPRFk6Ci0gICAgcmV0dXJuICZib2R5X2luZm87Ci0gIGNhc2UgSURfRk9STToKLSAg
ICByZXR1cm4gJmZvcm1faW5mbzsKLSAgY2FzZSBJRF9TRUxFQ1Q6Ci0gICAgcmV0dXJuICZzZWxl
Y3RfaW5mbzsKLSAgY2FzZSBJRF9PUFRHUk9VUDoKLSAgICByZXR1cm4gJm9wdEdyb3VwX2luZm87
Ci0gIGNhc2UgSURfT1BUSU9OOgotICAgIHJldHVybiAmb3B0aW9uX2luZm87Ci0gIGNhc2UgSURf
SU5QVVQ6Ci0gICAgcmV0dXJuICZpbnB1dF9pbmZvOwotICBjYXNlIElEX1RFWFRBUkVBOgotICAg
IHJldHVybiAmdGV4dEFyZWFfaW5mbzsKLSAgY2FzZSBJRF9CVVRUT046Ci0gICAgcmV0dXJuICZi
dXR0b25faW5mbzsKLSAgY2FzZSBJRF9MQUJFTDoKLSAgICByZXR1cm4gJmxhYmVsX2luZm87Ci0g
IGNhc2UgSURfRklFTERTRVQ6Ci0gICAgcmV0dXJuICZmaWVsZFNldF9pbmZvOwotICBjYXNlIElE
X0xFR0VORDoKLSAgICByZXR1cm4gJmxlZ2VuZF9pbmZvOwotICBjYXNlIElEX1VMOgotICAgIHJl
dHVybiAmdWxfaW5mbzsKLSAgY2FzZSBJRF9PTDoKLSAgICByZXR1cm4gJm9sX2luZm87Ci0gIGNh
c2UgSURfREw6Ci0gICAgcmV0dXJuICZkbF9pbmZvOwotICBjYXNlIElEX0RJUjoKLSAgICByZXR1
cm4gJmRpcl9pbmZvOwotICBjYXNlIElEX01FTlU6Ci0gICAgcmV0dXJuICZtZW51X2luZm87Ci0g
IGNhc2UgSURfTEk6Ci0gICAgcmV0dXJuICZsaV9pbmZvOwotICBjYXNlIElEX0RJVjoKLSAgICBy
ZXR1cm4gJmRpdl9pbmZvOwotICBjYXNlIElEX1A6Ci0gICAgcmV0dXJuICZwX2luZm87Ci0gIGNh
c2UgSURfSDE6Ci0gIGNhc2UgSURfSDI6Ci0gIGNhc2UgSURfSDM6Ci0gIGNhc2UgSURfSDQ6Ci0g
IGNhc2UgSURfSDU6Ci0gIGNhc2UgSURfSDY6Ci0gICAgcmV0dXJuICZoZWFkaW5nX2luZm87Ci0g
IGNhc2UgSURfQkxPQ0tRVU9URToKLSAgICByZXR1cm4gJmJsb2NrUXVvdGVfaW5mbzsKLSAgY2Fz
ZSBJRF9ROgotICAgIHJldHVybiAmcV9pbmZvOwotICBjYXNlIElEX1BSRToKLSAgICByZXR1cm4g
JnByZV9pbmZvOwotICBjYXNlIElEX0JSOgotICAgIHJldHVybiAmYnJfaW5mbzsKLSAgY2FzZSBJ
RF9CQVNFRk9OVDoKLSAgICByZXR1cm4gJmJhc2VGb250X2luZm87Ci0gIGNhc2UgSURfRk9OVDoK
LSAgICByZXR1cm4gJmZvbnRfaW5mbzsKLSAgY2FzZSBJRF9IUjoKLSAgICByZXR1cm4gJmhyX2lu
Zm87Ci0gIGNhc2UgSURfSU5TOgotICBjYXNlIElEX0RFTDoKLSAgICByZXR1cm4gJm1vZF9pbmZv
OwotICBjYXNlIElEX0E6Ci0gICAgcmV0dXJuICZhX2luZm87Ci0gIGNhc2UgSURfQ0FOVkFTOgot
ICAgIHJldHVybiAmY2FudmFzX2luZm87Ci0gIGNhc2UgSURfSU1HOgotICAgIHJldHVybiAmaW1n
X2luZm87Ci0gIGNhc2UgSURfT0JKRUNUOgotICAgIHJldHVybiAmb2JqZWN0X2luZm87Ci0gIGNh
c2UgSURfUEFSQU06Ci0gICAgcmV0dXJuICZwYXJhbV9pbmZvOwotICBjYXNlIElEX0FQUExFVDoK
LSAgICByZXR1cm4gJmFwcGxldF9pbmZvOwotICBjYXNlIElEX01BUDoKLSAgICByZXR1cm4gJm1h
cF9pbmZvOwotICBjYXNlIElEX0FSRUE6Ci0gICAgcmV0dXJuICZhcmVhX2luZm87Ci0gIGNhc2Ug
SURfU0NSSVBUOgotICAgIHJldHVybiAmc2NyaXB0X2luZm87Ci0gIGNhc2UgSURfVEFCTEU6Ci0g
ICAgcmV0dXJuICZ0YWJsZV9pbmZvOwotICBjYXNlIElEX0NBUFRJT046Ci0gICAgcmV0dXJuICZj
YXB0aW9uX2luZm87Ci0gIGNhc2UgSURfQ09MOgotICAgIHJldHVybiAmY29sX2luZm87Ci0gIGNh
c2UgSURfVEhFQUQ6Ci0gICAgcmV0dXJuICZ0YWJsZXNlY3Rpb25faW5mbzsKLSAgY2FzZSBJRF9U
Qk9EWToKLSAgICByZXR1cm4gJnRhYmxlc2VjdGlvbl9pbmZvOwotICBjYXNlIElEX1RGT09UOgot
ICAgIHJldHVybiAmdGFibGVzZWN0aW9uX2luZm87Ci0gIGNhc2UgSURfVFI6Ci0gICAgcmV0dXJu
ICZ0cl9pbmZvOwotICBjYXNlIElEX1RIOgotICAgIHJldHVybiAmdGFibGVjZWxsX2luZm87Ci0g
IGNhc2UgSURfVEQ6Ci0gICAgcmV0dXJuICZ0YWJsZWNlbGxfaW5mbzsKLSAgY2FzZSBJRF9GUkFN
RVNFVDoKLSAgICByZXR1cm4gJmZyYW1lU2V0X2luZm87Ci0gIGNhc2UgSURfRlJBTUU6Ci0gICAg
cmV0dXJuICZmcmFtZV9pbmZvOwotICBjYXNlIElEX0lGUkFNRToKLSAgICByZXR1cm4gJmlGcmFt
ZV9pbmZvOwotICBjYXNlIElEX01BUlFVRUU6Ci0gICAgcmV0dXJuICZtYXJxdWVlX2luZm87Ci0g
IGRlZmF1bHQ6CisgICAgLy8gV2UgYWxyZWFkeSBrbm93IHdlIGhhdmUgYW4gSFRNTCBlbGVtZW50
LCBzbyB3ZSBvbmx5IG5lZWQgdG8gY29tcGFyZSB0aGUgbG9jYWxOYW1lIGNvbXBvbmVudCBvZiB0
aGUgcXVhbGlmaWVkIG5hbWUuCisgICAgc3RhdGljIFFQdHJEaWN0PGNvbnN0IENsYXNzSW5mbz4g
Y2xhc3NJbmZvRGljdDsKKyAgICBpZiAoY2xhc3NJbmZvRGljdC5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjphKCkubG9jYWxOYW1lUHRyKCksICZh
X2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmFwcGxldCgp
LmxvY2FsTmFtZVB0cigpLCAmYXBwbGV0X2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmlu
c2VydChIVE1MTmFtZXM6OmFyZWEoKS5sb2NhbE5hbWVQdHIoKSwgJmFyZWFfaW5mbyk7CisgICAg
ICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6YmFzZSgpLmxvY2FsTmFtZVB0cigp
LCAmYmFzZV9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpi
YXNlZm9udCgpLmxvY2FsTmFtZVB0cigpLCAmYmFzZUZvbnRfaW5mbyk7CisgICAgICAgIGNsYXNz
SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6YmxvY2txdW90ZSgpLmxvY2FsTmFtZVB0cigpLCAm
YmxvY2tRdW90ZV9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVz
Ojpib2R5KCkubG9jYWxOYW1lUHRyKCksICZib2R5X2luZm8pOworICAgICAgICBjbGFzc0luZm9E
aWN0Lmluc2VydChIVE1MTmFtZXM6OmJyKCkubG9jYWxOYW1lUHRyKCksICZicl9pbmZvKTsKKyAg
ICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpidXR0b24oKS5sb2NhbE5hbWVQ
dHIoKSwgJmJ1dHRvbl9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5h
bWVzOjpjYW52YXMoKS5sb2NhbE5hbWVQdHIoKSwgJmNhbnZhc19pbmZvKTsKKyAgICAgICAgY2xh
c3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpjYXB0aW9uKCkubG9jYWxOYW1lUHRyKCksICZj
YXB0aW9uX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmNv
bCgpLmxvY2FsTmFtZVB0cigpLCAmY29sX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmlu
c2VydChIVE1MTmFtZXM6OmNvbGdyb3VwKCkubG9jYWxOYW1lUHRyKCksICZjb2xfaW5mbyk7Cisg
ICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6ZGVsKCkubG9jYWxOYW1lUHRy
KCksICZtb2RfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6
ZGlyKCkubG9jYWxOYW1lUHRyKCksICZkaXJfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3Qu
aW5zZXJ0KEhUTUxOYW1lczo6ZGl2KCkubG9jYWxOYW1lUHRyKCksICZkaXZfaW5mbyk7CisgICAg
ICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6ZGwoKS5sb2NhbE5hbWVQdHIoKSwg
JmRsX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmZpZWxk
c2V0KCkubG9jYWxOYW1lUHRyKCksICZmaWVsZFNldF9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZv
RGljdC5pbnNlcnQoSFRNTE5hbWVzOjpmb250KCkubG9jYWxOYW1lUHRyKCksICZmb250X2luZm8p
OworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmZvcm0oKS5sb2NhbE5h
bWVQdHIoKSwgJmZvcm1faW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxO
YW1lczo6ZnJhbWUoKS5sb2NhbE5hbWVQdHIoKSwgJmZyYW1lX2luZm8pOworICAgICAgICBjbGFz
c0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmZyYW1lc2V0KCkubG9jYWxOYW1lUHRyKCksICZm
cmFtZVNldF9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpo
MSgpLmxvY2FsTmFtZVB0cigpLCAmaGVhZGluZ19pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGlj
dC5pbnNlcnQoSFRNTE5hbWVzOjpoMigpLmxvY2FsTmFtZVB0cigpLCAmaGVhZGluZ19pbmZvKTsK
KyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpoMygpLmxvY2FsTmFtZVB0
cigpLCAmaGVhZGluZ19pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5h
bWVzOjpoNCgpLmxvY2FsTmFtZVB0cigpLCAmaGVhZGluZ19pbmZvKTsKKyAgICAgICAgY2xhc3NJ
bmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpoNSgpLmxvY2FsTmFtZVB0cigpLCAmaGVhZGluZ19p
bmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpoNigpLmxvY2Fs
TmFtZVB0cigpLCAmaGVhZGluZ19pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQo
SFRNTE5hbWVzOjpoZWFkKCkubG9jYWxOYW1lUHRyKCksICZoZWFkX2luZm8pOworICAgICAgICBj
bGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmhyKCkubG9jYWxOYW1lUHRyKCksICZocl9p
bmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpodG1sKCkubG9j
YWxOYW1lUHRyKCksICZodG1sX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChI
VE1MTmFtZXM6OmlmcmFtZSgpLmxvY2FsTmFtZVB0cigpLCAmaUZyYW1lX2luZm8pOworICAgICAg
ICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmltZygpLmxvY2FsTmFtZVB0cigpLCAm
aW1nX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmlucHV0
KCkubG9jYWxOYW1lUHRyKCksICZpbnB1dF9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5p
bnNlcnQoSFRNTE5hbWVzOjppbnMoKS5sb2NhbE5hbWVQdHIoKSwgJm1vZF9pbmZvKTsKKyAgICAg
ICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjppc2luZGV4KCkubG9jYWxOYW1lUHRy
KCksICZpc0luZGV4X2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFt
ZXM6OmxhYmVsKCkubG9jYWxOYW1lUHRyKCksICZsYWJlbF9pbmZvKTsKKyAgICAgICAgY2xhc3NJ
bmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpsZWdlbmQoKS5sb2NhbE5hbWVQdHIoKSwgJmxlZ2Vu
ZF9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpsaSgpLmxv
Y2FsTmFtZVB0cigpLCAmbGlfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhU
TUxOYW1lczo6bGluaygpLmxvY2FsTmFtZVB0cigpLCAmbGlua19pbmZvKTsKKyAgICAgICAgY2xh
c3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjptYXAoKS5sb2NhbE5hbWVQdHIoKSwgJm1hcF9p
bmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjptYXJxdWVlKCku
bG9jYWxOYW1lUHRyKCksICZtYXJxdWVlX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmlu
c2VydChIVE1MTmFtZXM6Om1lbnUoKS5sb2NhbE5hbWVQdHIoKSwgJm1lbnVfaW5mbyk7CisgICAg
ICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6bWV0YSgpLmxvY2FsTmFtZVB0cigp
LCAmbWV0YV9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpv
YmplY3QoKS5sb2NhbE5hbWVQdHIoKSwgJm9iamVjdF9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZv
RGljdC5pbnNlcnQoSFRNTE5hbWVzOjpvbCgpLmxvY2FsTmFtZVB0cigpLCAmb2xfaW5mbyk7Cisg
ICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6b3B0aW9uKCkubG9jYWxOYW1l
UHRyKCksICZvcHRpb25faW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxO
YW1lczo6b3B0Z3JvdXAoKS5sb2NhbE5hbWVQdHIoKSwgJm9wdEdyb3VwX2luZm8pOworICAgICAg
ICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OnAoKS5sb2NhbE5hbWVQdHIoKSwgJnBf
aW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6cGFyYW0oKS5s
b2NhbE5hbWVQdHIoKSwgJnBhcmFtX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2Vy
dChIVE1MTmFtZXM6OnByZSgpLmxvY2FsTmFtZVB0cigpLCAmcHJlX2luZm8pOworICAgICAgICBj
bGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OnEoKS5sb2NhbE5hbWVQdHIoKSwgJnFfaW5m
byk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6c2NyaXB0KCkubG9j
YWxOYW1lUHRyKCksICZzY3JpcHRfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0
KEhUTUxOYW1lczo6c2VsZWN0KCkubG9jYWxOYW1lUHRyKCksICZzZWxlY3RfaW5mbyk7CisgICAg
ICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6c3R5bGUoKS5sb2NhbE5hbWVQdHIo
KSwgJnN0eWxlX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6
OnRhYmxlKCkubG9jYWxOYW1lUHRyKCksICZ0YWJsZV9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZv
RGljdC5pbnNlcnQoSFRNTE5hbWVzOjp0Ym9keSgpLmxvY2FsTmFtZVB0cigpLCAmdGFibGVzZWN0
aW9uX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OnRkKCku
bG9jYWxOYW1lUHRyKCksICZ0YWJsZWNlbGxfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3Qu
aW5zZXJ0KEhUTUxOYW1lczo6dGV4dGFyZWEoKS5sb2NhbE5hbWVQdHIoKSwgJnRleHRBcmVhX2lu
Zm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OnRoKCkubG9jYWxO
YW1lUHRyKCksICZ0YWJsZWNlbGxfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0
KEhUTUxOYW1lczo6dGhlYWQoKS5sb2NhbE5hbWVQdHIoKSwgJnRhYmxlc2VjdGlvbl9pbmZvKTsK
KyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjp0Zm9vdCgpLmxvY2FsTmFt
ZVB0cigpLCAmdGFibGVzZWN0aW9uX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2Vy
dChIVE1MTmFtZXM6OnRpdGxlKCkubG9jYWxOYW1lUHRyKCksICZ0aXRsZV9pbmZvKTsKKyAgICAg
ICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjp0cigpLmxvY2FsTmFtZVB0cigpLCAm
dHJfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6dWwoKS5s
b2NhbE5hbWVQdHIoKSwgJnVsX2luZm8pOworICAgIH0KKyAgICAKKyAgICBIVE1MRWxlbWVudElt
cGwqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwqPihpbXBsKCkpOworICAg
IGNvbnN0IENsYXNzSW5mbyogcmVzdWx0ID0gY2xhc3NJbmZvRGljdC5maW5kKGVsZW1lbnQtPmxv
Y2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCkpOworICAgIGlmIChyZXN1bHQpCisgICAgICAgIHJl
dHVybiByZXN1bHQ7CiAgICAgcmV0dXJuICZpbmZvOwotICB9CiB9CisKK2NvbnN0IEhUTUxFbGVt
ZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjpodG1sX2dldHNldCA9IHsgJkhUTUxFbGVtZW50
OjpodG1sR2V0dGVyLCAmSFRNTEVsZW1lbnQ6Omh0bWxTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVt
ZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjpoZWFkX2dldHNldCA9IHsgJkhUTUxFbGVtZW50
OjpoZWFkR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmhlYWRTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVt
ZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjpsaW5rX2dldHNldCA9IHsgJkhUTUxFbGVtZW50
OjpsaW5rR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmxpbmtTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVt
ZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50Ojp0aXRsZV9nZXRzZXQgPSB7ICZIVE1MRWxlbWVu
dDo6dGl0bGVHZXR0ZXIsICZIVE1MRWxlbWVudDo6dGl0bGVTZXR0ZXIgfTsKK2NvbnN0IEhUTUxF
bGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjptZXRhX2dldHNldCA9IHsgJkhUTUxFbGVt
ZW50OjptZXRhR2V0dGVyLCAmSFRNTEVsZW1lbnQ6Om1ldGFTZXR0ZXIgfTsKK2NvbnN0IEhUTUxF
bGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjpiYXNlX2dldHNldCA9IHsgJkhUTUxFbGVt
ZW50OjpiYXNlR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmJhc2VTZXR0ZXIgfTsKK2NvbnN0IEhUTUxF
bGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50Ojppc0luZGV4X2dldHNldCA9IHsgJkhUTUxF
bGVtZW50Ojppc0luZGV4R2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmlzSW5kZXhTZXR0ZXIgfTsKK2Nv
bnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjpzdHlsZV9nZXRzZXQgPSB7
ICZIVE1MRWxlbWVudDo6c3R5bGVHZXR0ZXIsICZIVE1MRWxlbWVudDo6c3R5bGVTZXR0ZXIgfTsK
K2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50Ojpib2R5X2dldHNldCA9
IHsgJkhUTUxFbGVtZW50Ojpib2R5R2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmJvZHlTZXR0ZXIgfTsK
K2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50Ojpmb3JtX2dldHNldCA9
IHsgJkhUTUxFbGVtZW50Ojpmb3JtR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmZvcm1TZXR0ZXIgfTsK
K2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjpzZWxlY3RfZ2V0c2V0
ID0geyAmSFRNTEVsZW1lbnQ6OnNlbGVjdEdldHRlciwgJkhUTUxFbGVtZW50OjpzZWxlY3RTZXR0
ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjpvcHRHcm91
cF9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6b3B0R3JvdXBHZXR0ZXIsICZIVE1MRWxlbWVudDo6
b3B0R3JvdXBTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVt
ZW50OjpvcHRpb25fZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6Om9wdGlvbkdldHRlciwgJkhUTUxF
bGVtZW50OjpvcHRpb25TZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhU
TUxFbGVtZW50OjppbnB1dF9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6aW5wdXRHZXR0ZXIsICZI
VE1MRWxlbWVudDo6aW5wdXRTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZv
IEhUTUxFbGVtZW50Ojp0ZXh0QXJlYV9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6dGV4dEFyZWFH
ZXR0ZXIsICZIVE1MRWxlbWVudDo6dGV4dEFyZWFTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50
OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjpidXR0b25fZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6
OmJ1dHRvbkdldHRlciwgJkhUTUxFbGVtZW50OjpidXR0b25TZXR0ZXIgfTsKK2NvbnN0IEhUTUxF
bGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjpsYWJlbF9nZXRzZXQgPSB7ICZIVE1MRWxl
bWVudDo6bGFiZWxHZXR0ZXIsICZIVE1MRWxlbWVudDo6bGFiZWxTZXR0ZXIgfTsKK2NvbnN0IEhU
TUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjpmaWVsZFNldF9nZXRzZXQgPSB7ICZI
VE1MRWxlbWVudDo6ZmllbGRTZXRHZXR0ZXIsICZIVE1MRWxlbWVudDo6ZmllbGRTZXRTZXR0ZXIg
fTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjpsZWdlbmRfZ2V0
c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmxlZ2VuZEdldHRlciwgJkhUTUxFbGVtZW50OjpsZWdlbmRT
ZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50Ojp1bF9n
ZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6dUxpc3RHZXR0ZXIsICZIVE1MRWxlbWVudDo6dUxpc3RT
ZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjpvbF9n
ZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6b0xpc3RHZXR0ZXIsICZIVE1MRWxlbWVudDo6b0xpc3RT
ZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjpkbF9n
ZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6ZExpc3RHZXR0ZXIsICZIVE1MRWxlbWVudDo6ZExpc3RT
ZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjpkaXJf
Z2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmRpckdldHRlciwgJkhUTUxFbGVtZW50OjpkaXJTZXR0
ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjptZW51X2dl
dHNldCA9IHsgJkhUTUxFbGVtZW50OjptZW51R2V0dGVyLCAmSFRNTEVsZW1lbnQ6Om1lbnVTZXR0
ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjpsaV9nZXRz
ZXQgPSB7ICZIVE1MRWxlbWVudDo6bGlHZXR0ZXIsICZIVE1MRWxlbWVudDo6bGlTZXR0ZXIgfTsK
K2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjpkaXZfZ2V0c2V0ID0g
eyAmSFRNTEVsZW1lbnQ6OmRpdkdldHRlciwgJkhUTUxFbGVtZW50OjpkaXZTZXR0ZXIgfTsKK2Nv
bnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjpwX2dldHNldCA9IHsgJkhU
TUxFbGVtZW50OjpwYXJhZ3JhcGhHZXR0ZXIsICZIVE1MRWxlbWVudDo6cGFyYWdyYXBoU2V0dGVy
IH07Citjb25zdCBIVE1MRWxlbWVudDo6R2V0U2V0SW5mbyBIVE1MRWxlbWVudDo6aGVhZGluZ19n
ZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6aGVhZGluZ0dldHRlciwgJkhUTUxFbGVtZW50OjpoZWFk
aW5nU2V0dGVyIH07Citjb25zdCBIVE1MRWxlbWVudDo6R2V0U2V0SW5mbyBIVE1MRWxlbWVudDo6
YmxvY2tRdW90ZV9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6YmxvY2tRdW90ZUdldHRlciwgJkhU
TUxFbGVtZW50OjpibG9ja1F1b3RlU2V0dGVyIH07Citjb25zdCBIVE1MRWxlbWVudDo6R2V0U2V0
SW5mbyBIVE1MRWxlbWVudDo6cV9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6cXVvdGVHZXR0ZXIs
ICZIVE1MRWxlbWVudDo6cXVvdGVTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJ
bmZvIEhUTUxFbGVtZW50OjpwcmVfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OnByZUdldHRlciwg
JkhUTUxFbGVtZW50OjpwcmVTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZv
IEhUTUxFbGVtZW50Ojpicl9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6YnJHZXR0ZXIsICZIVE1M
RWxlbWVudDo6YnJTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxF
bGVtZW50OjpiYXNlRm9udF9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6YmFzZUZvbnRHZXR0ZXIs
ICZIVE1MRWxlbWVudDo6YmFzZUZvbnRTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRT
ZXRJbmZvIEhUTUxFbGVtZW50Ojpmb250X2dldHNldCA9IHsgJkhUTUxFbGVtZW50Ojpmb250R2V0
dGVyLCAmSFRNTEVsZW1lbnQ6OmZvbnRTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRT
ZXRJbmZvIEhUTUxFbGVtZW50Ojpocl9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6aHJHZXR0ZXIs
ICZIVE1MRWxlbWVudDo6aHJTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZv
IEhUTUxFbGVtZW50Ojptb2RfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6Om1vZEdldHRlciwgJkhU
TUxFbGVtZW50Ojptb2RTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhU
TUxFbGVtZW50OjphX2dldHNldCA9IHsgJkhUTUxFbGVtZW50OjphbmNob3JHZXR0ZXIsICZIVE1M
RWxlbWVudDo6YW5jaG9yU2V0dGVyIH07Citjb25zdCBIVE1MRWxlbWVudDo6R2V0U2V0SW5mbyBI
VE1MRWxlbWVudDo6Y2FudmFzX2dldHNldCA9IHsgJkhUTUxFbGVtZW50OjppbWFnZUdldHRlciwg
JkhUTUxFbGVtZW50OjppbWFnZVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldElu
Zm8gSFRNTEVsZW1lbnQ6OmltZ19nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6aW1hZ2VHZXR0ZXIs
ICZIVE1MRWxlbWVudDo6aW1hZ2VTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJ
bmZvIEhUTUxFbGVtZW50OjpvYmplY3RfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6Om9iamVjdEdl
dHRlciwgJkhUTUxFbGVtZW50OjpvYmplY3RTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpH
ZXRTZXRJbmZvIEhUTUxFbGVtZW50OjpwYXJhbV9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6cGFy
YW1HZXR0ZXIsICZIVE1MRWxlbWVudDo6cGFyYW1TZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50
OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjphcHBsZXRfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6
OmFwcGxldEdldHRlciwgJkhUTUxFbGVtZW50OjphcHBsZXRTZXR0ZXIgfTsKK2NvbnN0IEhUTUxF
bGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjptYXBfZ2V0c2V0ID0geyAmSFRNTEVsZW1l
bnQ6Om1hcEdldHRlciwgJkhUTUxFbGVtZW50OjptYXBTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVt
ZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjphcmVhX2dldHNldCA9IHsgJkhUTUxFbGVtZW50
OjphcmVhR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmFyZWFTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVt
ZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjpzY3JpcHRfZ2V0c2V0ID0geyAmSFRNTEVsZW1l
bnQ6OnNjcmlwdEdldHRlciwgJkhUTUxFbGVtZW50OjpzY3JpcHRTZXR0ZXIgfTsKK2NvbnN0IEhU
TUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50Ojp0YWJsZV9nZXRzZXQgPSB7ICZIVE1M
RWxlbWVudDo6dGFibGVHZXR0ZXIsICZIVE1MRWxlbWVudDo6dGFibGVTZXR0ZXIgfTsKK2NvbnN0
IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjpjYXB0aW9uX2dldHNldCA9IHsg
JkhUTUxFbGVtZW50Ojp0YWJsZUNhcHRpb25HZXR0ZXIsICZIVE1MRWxlbWVudDo6dGFibGVDYXB0
aW9uU2V0dGVyIH07Citjb25zdCBIVE1MRWxlbWVudDo6R2V0U2V0SW5mbyBIVE1MRWxlbWVudDo6
Y29sX2dldHNldCA9IHsgJkhUTUxFbGVtZW50Ojp0YWJsZUNvbEdldHRlciwgJkhUTUxFbGVtZW50
Ojp0YWJsZUNvbFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVs
ZW1lbnQ6OnRhYmxlc2VjdGlvbl9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6dGFibGVTZWN0aW9u
R2V0dGVyLCAmSFRNTEVsZW1lbnQ6OnRhYmxlU2VjdGlvblNldHRlciB9OworY29uc3QgSFRNTEVs
ZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OnRyX2dldHNldCA9IHsgJkhUTUxFbGVtZW50
Ojp0YWJsZVJvd0dldHRlciwgJkhUTUxFbGVtZW50Ojp0YWJsZVJvd1NldHRlciB9OworY29uc3Qg
SFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OnRhYmxlY2VsbF9nZXRzZXQgPSB7
ICZIVE1MRWxlbWVudDo6dGFibGVDZWxsR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OnRhYmxlQ2VsbFNl
dHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmZyYW1l
U2V0X2dldHNldCA9IHsgJkhUTUxFbGVtZW50OjpmcmFtZVNldEdldHRlciwgJkhUTUxFbGVtZW50
OjpmcmFtZVNldFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVs
ZW1lbnQ6OmZyYW1lX2dldHNldCA9IHsgJkhUTUxFbGVtZW50OjpmcmFtZUdldHRlciwgJkhUTUxF
bGVtZW50OjpmcmFtZVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRN
TEVsZW1lbnQ6OmlGcmFtZV9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6aUZyYW1lR2V0dGVyLCAm
SFRNTEVsZW1lbnQ6OmlGcmFtZVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldElu
Zm8gSFRNTEVsZW1lbnQ6Om1hcnF1ZWVfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6Om1hcnF1ZWVH
ZXR0ZXIsICZIVE1MRWxlbWVudDo6bWFycXVlZVNldHRlciB9OworCitjb25zdCBIVE1MRWxlbWVu
dDo6R2V0U2V0SW5mbyogSFRNTEVsZW1lbnQ6OmdldFNldEluZm8oKSBjb25zdAoreworICAgIC8v
IFdlIGFscmVhZHkga25vdyB3ZSBoYXZlIGFuIEhUTUwgZWxlbWVudCwgc28gd2Ugb25seSBuZWVk
IHRvIGNvbXBhcmUgdGhlIGxvY2FsTmFtZSBjb21wb25lbnQgb2YgdGhlIHF1YWxpZmllZCBuYW1l
LgorICAgIHN0YXRpYyBRUHRyRGljdDxjb25zdCBIVE1MRWxlbWVudDo6R2V0U2V0SW5mbz4gZ2V0
U2V0SW5mb0RpY3Q7CisgICAgaWYgKGdldFNldEluZm9EaWN0LmlzRW1wdHkoKSkgeworICAgICAg
ICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjphKCkubG9jYWxOYW1lUHRyKCksICZh
X2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmFwcGxl
dCgpLmxvY2FsTmFtZVB0cigpLCAmYXBwbGV0X2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9E
aWN0Lmluc2VydChIVE1MTmFtZXM6OmFyZWEoKS5sb2NhbE5hbWVQdHIoKSwgJmFyZWFfZ2V0c2V0
KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6YmFzZSgpLmxvY2Fs
TmFtZVB0cigpLCAmYmFzZV9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQo
SFRNTE5hbWVzOjpiYXNlZm9udCgpLmxvY2FsTmFtZVB0cigpLCAmYmFzZUZvbnRfZ2V0c2V0KTsK
KyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6YmxvY2txdW90ZSgpLmxv
Y2FsTmFtZVB0cigpLCAmYmxvY2tRdW90ZV9nZXRzZXQpOyAKKyAgICAgICAgZ2V0U2V0SW5mb0Rp
Y3QuaW5zZXJ0KEhUTUxOYW1lczo6Ym9keSgpLmxvY2FsTmFtZVB0cigpLCAmYm9keV9nZXRzZXQp
OworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpicigpLmxvY2FsTmFt
ZVB0cigpLCAmYnJfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxO
YW1lczo6YnV0dG9uKCkubG9jYWxOYW1lUHRyKCksICZidXR0b25fZ2V0c2V0KTsKKyAgICAgICAg
Z2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6Y2FudmFzKCkubG9jYWxOYW1lUHRyKCks
ICZjYW52YXNfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1l
czo6Y2FwdGlvbigpLmxvY2FsTmFtZVB0cigpLCAmY2FwdGlvbl9nZXRzZXQpOworICAgICAgICBn
ZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpjb2woKS5sb2NhbE5hbWVQdHIoKSwgJmNv
bF9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpjb2xn
cm91cCgpLmxvY2FsTmFtZVB0cigpLCAmY29sX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9E
aWN0Lmluc2VydChIVE1MTmFtZXM6OmRlbCgpLmxvY2FsTmFtZVB0cigpLCAmbW9kX2dldHNldCk7
CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmRpcigpLmxvY2FsTmFt
ZVB0cigpLCAmZGlyX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1M
TmFtZXM6OmRpdigpLmxvY2FsTmFtZVB0cigpLCAmZGl2X2dldHNldCk7CisgICAgICAgIGdldFNl
dEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmRsKCkubG9jYWxOYW1lUHRyKCksICZkbF9nZXRz
ZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpmaWVsZHNldCgp
LmxvY2FsTmFtZVB0cigpLCAmZmllbGRTZXRfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0Rp
Y3QuaW5zZXJ0KEhUTUxOYW1lczo6Zm9udCgpLmxvY2FsTmFtZVB0cigpLCAmZm9udF9nZXRzZXQp
OworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpmb3JtKCkubG9jYWxO
YW1lUHRyKCksICZmb3JtX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChI
VE1MTmFtZXM6OmZyYW1lKCkubG9jYWxOYW1lUHRyKCksICZmcmFtZV9nZXRzZXQpOworICAgICAg
ICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpmcmFtZXNldCgpLmxvY2FsTmFtZVB0
cigpLCAmZnJhbWVTZXRfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhU
TUxOYW1lczo6aDEoKS5sb2NhbE5hbWVQdHIoKSwgJmhlYWRpbmdfZ2V0c2V0KTsKKyAgICAgICAg
Z2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6aDIoKS5sb2NhbE5hbWVQdHIoKSwgJmhl
YWRpbmdfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6
aDMoKS5sb2NhbE5hbWVQdHIoKSwgJmhlYWRpbmdfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5m
b0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6aDQoKS5sb2NhbE5hbWVQdHIoKSwgJmhlYWRpbmdfZ2V0
c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6aDUoKS5sb2Nh
bE5hbWVQdHIoKSwgJmhlYWRpbmdfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5z
ZXJ0KEhUTUxOYW1lczo6aDYoKS5sb2NhbE5hbWVQdHIoKSwgJmhlYWRpbmdfZ2V0c2V0KTsKKyAg
ICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6aGVhZCgpLmxvY2FsTmFtZVB0
cigpLCAmaGVhZF9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5h
bWVzOjpocigpLmxvY2FsTmFtZVB0cigpLCAmaHJfZ2V0c2V0KTsgCisgICAgICAgIGdldFNldElu
Zm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Omh0bWwoKS5sb2NhbE5hbWVQdHIoKSwgJmh0bWxfZ2V0
c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6aWZyYW1lKCku
bG9jYWxOYW1lUHRyKCksICZpRnJhbWVfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3Qu
aW5zZXJ0KEhUTUxOYW1lczo6aW1nKCkubG9jYWxOYW1lUHRyKCksICZpbWdfZ2V0c2V0KTsKKyAg
ICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6aW5wdXQoKS5sb2NhbE5hbWVQ
dHIoKSwgJmlucHV0X2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1M
TmFtZXM6OmlucygpLmxvY2FsTmFtZVB0cigpLCAmbW9kX2dldHNldCk7CisgICAgICAgIGdldFNl
dEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmlzaW5kZXgoKS5sb2NhbE5hbWVQdHIoKSwgJmlz
SW5kZXhfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6
bGFiZWwoKS5sb2NhbE5hbWVQdHIoKSwgJmxhYmVsX2dldHNldCk7CisgICAgICAgIGdldFNldElu
Zm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmxlZ2VuZCgpLmxvY2FsTmFtZVB0cigpLCAmbGVnZW5k
X2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmxpKCku
bG9jYWxOYW1lUHRyKCksICZsaV9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNl
cnQoSFRNTE5hbWVzOjpsaW5rKCkubG9jYWxOYW1lUHRyKCksICZsaW5rX2dldHNldCk7CisgICAg
ICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Om1hcCgpLmxvY2FsTmFtZVB0cigp
LCAmbWFwX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6
Om1hcnF1ZWUoKS5sb2NhbE5hbWVQdHIoKSwgJm1hcnF1ZWVfZ2V0c2V0KTsKKyAgICAgICAgZ2V0
U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6bWVudSgpLmxvY2FsTmFtZVB0cigpLCAmbWVu
dV9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjptZXRh
KCkubG9jYWxOYW1lUHRyKCksICZtZXRhX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0
Lmluc2VydChIVE1MTmFtZXM6Om9iamVjdCgpLmxvY2FsTmFtZVB0cigpLCAmb2JqZWN0X2dldHNl
dCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Om9sKCkubG9jYWxO
YW1lUHRyKCksICZvbF9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRN
TE5hbWVzOjpvcHRpb24oKS5sb2NhbE5hbWVQdHIoKSwgJm9wdGlvbl9nZXRzZXQpOworICAgICAg
ICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpvcHRncm91cCgpLmxvY2FsTmFtZVB0
cigpLCAmb3B0R3JvdXBfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhU
TUxOYW1lczo6cCgpLmxvY2FsTmFtZVB0cigpLCAmcF9nZXRzZXQpOworICAgICAgICBnZXRTZXRJ
bmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpwYXJhbSgpLmxvY2FsTmFtZVB0cigpLCAmcGFyYW1f
Z2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6cHJlKCku
bG9jYWxOYW1lUHRyKCksICZwcmVfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5z
ZXJ0KEhUTUxOYW1lczo6cSgpLmxvY2FsTmFtZVB0cigpLCAmcV9nZXRzZXQpOworICAgICAgICBn
ZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpzY3JpcHQoKS5sb2NhbE5hbWVQdHIoKSwg
JnNjcmlwdF9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVz
OjpzZWxlY3QoKS5sb2NhbE5hbWVQdHIoKSwgJnNlbGVjdF9nZXRzZXQpOworICAgICAgICBnZXRT
ZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpzdHlsZSgpLmxvY2FsTmFtZVB0cigpLCAmc3R5
bGVfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6dGFi
bGUoKS5sb2NhbE5hbWVQdHIoKSwgJnRhYmxlX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9E
aWN0Lmluc2VydChIVE1MTmFtZXM6OnRib2R5KCkubG9jYWxOYW1lUHRyKCksICZ0YWJsZXNlY3Rp
b25fZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6dGQo
KS5sb2NhbE5hbWVQdHIoKSwgJnRhYmxlY2VsbF9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZv
RGljdC5pbnNlcnQoSFRNTE5hbWVzOjp0ZXh0YXJlYSgpLmxvY2FsTmFtZVB0cigpLCAmdGV4dEFy
ZWFfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6dGgo
KS5sb2NhbE5hbWVQdHIoKSwgJnRhYmxlY2VsbF9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZv
RGljdC5pbnNlcnQoSFRNTE5hbWVzOjp0aGVhZCgpLmxvY2FsTmFtZVB0cigpLCAmdGFibGVzZWN0
aW9uX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OnRm
b290KCkubG9jYWxOYW1lUHRyKCksICZ0YWJsZXNlY3Rpb25fZ2V0c2V0KTsKKyAgICAgICAgZ2V0
U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6dGl0bGUoKS5sb2NhbE5hbWVQdHIoKSwgJnRp
dGxlX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OnRy
KCkubG9jYWxOYW1lUHRyKCksICZ0cl9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5p
bnNlcnQoSFRNTE5hbWVzOjp1bCgpLmxvY2FsTmFtZVB0cigpLCAmdWxfZ2V0c2V0KTsKKyAgICB9
CisgICAgCisgICAgSFRNTEVsZW1lbnRJbXBsKiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEVs
ZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBjb25zdCBIVE1MRWxlbWVudDo6R2V0U2V0SW5mbyog
cmVzdWx0ID0gZ2V0U2V0SW5mb0RpY3QuZmluZChlbGVtZW50LT5sb2NhbE5hbWUoKS5pbXBsZW1l
bnRhdGlvbigpKTsKKyAgICBpZiAocmVzdWx0KQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
IHJldHVybiAwOworfQorCiAvKgogQGJlZ2luIEhUTUxFbGVtZW50VGFibGUgMTQKICAgaWQJCUtK
Uzo6SFRNTEVsZW1lbnQ6OkVsZW1lbnRJZAlEb250RGVsZXRlCkBAIC0xMTg0LDcgKzEyNjgsNyBA
QCBjb25zdCBDbGFzc0luZm8qIEtKUzo6SFRNTEVsZW1lbnQ6OmNsYXNzCiBAZW5kCiAKIEBiZWdp
biBIVE1MQ2FudmFzRWxlbWVudFRhYmxlIDEKLSAgZ2V0Q29udGV4dCAgICAgIEtKUzo6SFRNTEVs
ZW1lbnQ6OkdldENvbnRleHQgICAgICAgICAgICAgICAgICBEb250RGVsZXRlfEZ1bmN0aW9uIDAK
KyAgZ2V0Q29udGV4dCAgICAgIEtKUzo6SFRNTEVsZW1lbnQ6OkdldENvbnRleHQgICAgICAgICAg
ICAgICAgICBEb250RGVsZXRlfEZ1bmN0aW9uIDEKIEBlbmQKICovCiAKQEAgLTExOTUsMzUgKzEy
NzksMzIgQEAgSFRNTEVsZW1lbnQ6OkhUTUxFbGVtZW50KEV4ZWNTdGF0ZSAqZXhlYwogCiBWYWx1
ZSBLSlM6OkhUTUxFbGVtZW50Ojp0cnlHZXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlm
aWVyICZwcm9wZXJ0eU5hbWUpIGNvbnN0CiB7Ci0gIEhUTUxFbGVtZW50SW1wbCAmZWxlbWVudCA9
ICpzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwgKj4oaW1wbCgpKTsKKyAgICBIVE1MRWxlbWVu
dEltcGwgJmVsZW1lbnQgPSAqc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KGltcGwoKSk7
CiAjaWZkZWYgS0pTX1ZFUkJPU0UKLSAga2REZWJ1Zyg2MDcwKSA8PCAiS0pTOjpIVE1MRWxlbWVu
dDo6dHJ5R2V0ICIgPDwgcHJvcGVydHlOYW1lLnFzdHJpbmcoKSA8PCAiIHRoaXNUYWc9IiA8PCBl
bGVtZW50LnRhZ05hbWUoKS5zdHJpbmcoKSA8PCBlbmRsOworICAgIGtkRGVidWcoNjA3MCkgPDwg
IktKUzo6SFRNTEVsZW1lbnQ6OnRyeUdldCAiIDw8IHByb3BlcnR5TmFtZS5xc3RyaW5nKCkgPDwg
IiB0aGlzVGFnPSIgPDwgZWxlbWVudC50YWdOYW1lKCkuc3RyaW5nKCkgPDwgZW5kbDsKICNlbmRp
ZgotICAvLyBGaXJzdCBsb29rIGF0IGR5bmFtaWMgcHJvcGVydGllcwotICBzd2l0Y2ggKGVsZW1l
bnQuaWQoKSkgewotICAgIGNhc2UgSURfRk9STTogewotICAgICAgSFRNTEZvcm1FbGVtZW50SW1w
bCAmZm9ybSA9IHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0g
ICAgICAvLyBDaGVjayBpZiB3ZSdyZSByZXRyaWV2aW5nIGFuIGVsZW1lbnQgKGJ5IGluZGV4IG9y
IGJ5IG5hbWUpCi0gICAgICBib29sIG9rOwotICAgICAgdWludCB1ID0gcHJvcGVydHlOYW1lLnRv
VUxvbmcoJm9rKTsKLSAgICAgIGlmIChvaykKLSAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhl
YywgZm9ybS5lbGVtZW50cygpLT5pdGVtKHUpKTsKLSAgICAgIFZhbHVlSW1wICpuYW1lZEl0ZW1z
ID0gSFRNTENvbGxlY3Rpb24oZXhlYywgZm9ybS5lbGVtZW50cygpLmdldCgpKS5nZXROYW1lZEl0
ZW1zKGV4ZWMsIHByb3BlcnR5TmFtZSk7Ci0gICAgICBpZiAoIW5hbWVkSXRlbXMtPmlzVW5kZWZp
bmVkKCkpCi0gICAgICAgIHJldHVybiBuYW1lZEl0ZW1zOwotICAgIH0KLSAgICAgIGJyZWFrOwot
ICAgIGNhc2UgSURfU0VMRUNUOiB7Ci0gICAgICBIVE1MU2VsZWN0RWxlbWVudEltcGwgJnNlbGVj
dCA9IHN0YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAg
IGJvb2wgb2s7Ci0gICAgICB1aW50IHUgPSBwcm9wZXJ0eU5hbWUudG9VTG9uZygmb2spOwotICAg
ICAgaWYgKG9rKQotICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLCBzZWxlY3Qub3B0aW9u
c0hUTUxDb2xsZWN0aW9uKCktPml0ZW0odSkpOyAvLyBub3Qgc3BlY2lmaWVkIGJ5IERPTSg/KSBi
dXQgc3VwcG9ydGVkIGluIG5ldHNjYXBlL0lFCisgICAgLy8gRmlyc3QgbG9vayBhdCBkeW5hbWlj
IHByb3BlcnRpZXMKKyAgICBpZiAoZWxlbWVudC5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpmb3Jt
KCkpKSB7CisgICAgICAgIEhUTUxGb3JtRWxlbWVudEltcGwgJmZvcm0gPSBzdGF0aWNfY2FzdDxI
VE1MRm9ybUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgICAgICAvLyBDaGVjayBpZiB3ZSdy
ZSByZXRyaWV2aW5nIGFuIGVsZW1lbnQgKGJ5IGluZGV4IG9yIGJ5IG5hbWUpCisgICAgICAgIGJv
b2wgb2s7CisgICAgICAgIHVpbnQgdSA9IHByb3BlcnR5TmFtZS50b1VMb25nKCZvayk7CisgICAg
ICAgIGlmIChvaykKKyAgICAgICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsIGZvcm0uZWxl
bWVudHMoKS0+aXRlbSh1KSk7CisgICAgICAgIFZhbHVlSW1wICpuYW1lZEl0ZW1zID0gSFRNTENv
bGxlY3Rpb24oZXhlYywgZm9ybS5lbGVtZW50cygpLmdldCgpKS5nZXROYW1lZEl0ZW1zKGV4ZWMs
IHByb3BlcnR5TmFtZSk7CisgICAgICAgIGlmICghbmFtZWRJdGVtcy0+aXNVbmRlZmluZWQoKSkK
KyAgICAgICAgICAgIHJldHVybiBuYW1lZEl0ZW1zOworICAgIH0KKyAgICBlbHNlIGlmIChlbGVt
ZW50Lmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnNlbGVjdCgpKSkgeworICAgICAgICBIVE1MU2Vs
ZWN0RWxlbWVudEltcGwgJnNlbGVjdCA9IHN0YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50SW1w
bCAmPihlbGVtZW50KTsKKyAgICAgICAgYm9vbCBvazsKKyAgICAgICAgdWludCB1ID0gcHJvcGVy
dHlOYW1lLnRvVUxvbmcoJm9rKTsKKyAgICAgICAgaWYgKG9rKQorICAgICAgICAgICAgcmV0dXJu
IGdldERPTU5vZGUoZXhlYywgc2VsZWN0Lm9wdGlvbnNIVE1MQ29sbGVjdGlvbigpLT5pdGVtKHUp
KTsgLy8gbm90IHNwZWNpZmllZCBieSBET00oPykgYnV0IHN1cHBvcnRlZCBpbiBuZXRzY2FwZS9J
RQogICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgSURfRlJBTUVTRVQ6IHsKKyAgICBlbHNl
IGlmIChlbGVtZW50Lmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmZyYW1lc2V0KCkpKSB7CiAgICAg
ICAgIE5vZGVJbXBsICpmcmFtZSA9IGVsZW1lbnQuY2hpbGRyZW4oKS0+bmFtZWRJdGVtKHByb3Bl
cnR5TmFtZS5zdHJpbmcoKSk7Ci0gICAgICAgIGlmIChmcmFtZSAmJiBmcmFtZS0+aWQoKSA9PSBJ
RF9GUkFNRSkgeworICAgICAgICBpZiAoZnJhbWUgJiYgZnJhbWUtPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjpmcmFtZSgpKSkgewogICAgICAgICAgICAgRG9jdW1lbnRJbXBsKiBkb2MgPSBzdGF0aWNf
Y2FzdDxIVE1MRnJhbWVFbGVtZW50SW1wbCAqPihmcmFtZSktPmNvbnRlbnREb2N1bWVudCgpOwog
ICAgICAgICAgICAgaWYgKGRvYykgewogICAgICAgICAgICAgICAgIEtIVE1MUGFydCogcGFydCA9
IGRvYy0+cGFydCgpOwpAQCAtMTIzNiw3MyArMTMxNyw1NyBAQCBWYWx1ZSBLSlM6OkhUTUxFbGVt
ZW50Ojp0cnlHZXQoRXhlY1N0YXRlCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgSURfRlJBTUU6Ci0gICAgY2FzZSBJRF9JRlJBTUU6IHsK
KyAgICBlbHNlIGlmIChlbGVtZW50Lmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmZyYW1lKCkpIHx8
IGVsZW1lbnQuaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6aWZyYW1lKCkpKSB7CiAgICAgICAgIERv
Y3VtZW50SW1wbCogZG9jID0gc3RhdGljX2Nhc3Q8SFRNTEZyYW1lRWxlbWVudEltcGwgJj4oZWxl
bWVudCkuY29udGVudERvY3VtZW50KCk7Ci0gICAgICAgIGlmICggZG9jICkgeworICAgICAgICBp
ZiAoZG9jKSB7CiAgICAgICAgICAgICBLSFRNTFBhcnQqIHBhcnQgPSBkb2MtPnBhcnQoKTsKLSAg
ICAgICAgICAgIGlmICggcGFydCApIHsKKyAgICAgICAgICAgIGlmIChwYXJ0KSB7CiAgICAgICAg
ICAgICAgIFdpbmRvdyAqd2luZG93ID0gV2luZG93OjpyZXRyaWV2ZVdpbmRvdyhwYXJ0KTsKIAkg
ICAgICBpZiAod2luZG93ICYmIHdpbmRvdy0+aGFzUHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1l
KSkKICAgICAgICAgICAgICAgICByZXR1cm4gd2luZG93LT5nZXQoZXhlYywgcHJvcGVydHlOYW1l
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICAgIGJyZWFrOwogI2lmIEFQ
UExFX0NIQU5HRVMKLSAgICBjYXNlIElEX0VNQkVEOgotICAgIGNhc2UgSURfT0JKRUNUOgotICAg
IGNhc2UgSURfQVBQTEVUOiB7Ci0JaWYgKHByb3BlcnR5TmFtZSA9PSAiX19hcHBsZV9ydW50aW1l
X29iamVjdCIpIHsKKyAgICBlbHNlIGlmIChlbGVtZW50Lmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6
OmVtYmVkKCkpIHx8IGVsZW1lbnQuaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b2JqZWN0KCkpIHx8
CisgICAgICAgICAgICAgZWxlbWVudC5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjphcHBsZXQoKSkp
IHsKKwlpZiAocHJvcGVydHlOYW1lID09ICJfX2FwcGxlX3J1bnRpbWVfb2JqZWN0IikKIAkgICAg
cmV0dXJuIGdldFJ1bnRpbWVPYmplY3QoZXhlYywmZWxlbWVudCk7Ci0JfQotCiAJVmFsdWUgcnVu
dGltZU9iamVjdCA9IGdldFJ1bnRpbWVPYmplY3QoZXhlYywmZWxlbWVudCk7CiAJaWYgKCFydW50
aW1lT2JqZWN0LmlzTnVsbCgpKSB7CiAJICAgIE9iamVjdEltcCAqaW1wID0gc3RhdGljX2Nhc3Q8
T2JqZWN0SW1wICo+KHJ1bnRpbWVPYmplY3QuaW1wKCkpOwotCSAgICBpZiAoaW1wLT5oYXNQcm9w
ZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUpKSB7CisJICAgIGlmIChpbXAtPmhhc1Byb3BlcnR5KGV4
ZWMsIHByb3BlcnR5TmFtZSkpCiAJCXJldHVybiBpbXAtPmdldCAoZXhlYywgcHJvcGVydHlOYW1l
KTsKLQkgICAgfQogCX0KICAgICB9Ci0gICAgICBicmVhazsKICNlbmRpZgotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KIAotICBjb25zdCBIYXNoVGFibGUqIHRhYmxlID0gY2xh
c3NJbmZvKCktPnByb3BIYXNoVGFibGU7IC8vIGdldCB0aGUgcmlnaHQgaGFzaHRhYmxlCi0gIGNv
bnN0IEhhc2hFbnRyeSogZW50cnkgPSBMb29rdXA6OmZpbmRFbnRyeSh0YWJsZSwgcHJvcGVydHlO
YW1lKTsKLSAgaWYgKGVudHJ5KSB7Ci0gICAgaWYgKGVudHJ5LT5hdHRyICYgRnVuY3Rpb24pCi0g
ICAgICByZXR1cm4gbG9va3VwT3JDcmVhdGVGdW5jdGlvbjxLSlM6OkhUTUxFbGVtZW50RnVuY3Rp
b24+KGV4ZWMsIHByb3BlcnR5TmFtZSwgdGhpcywgZW50cnktPnZhbHVlLCBlbnRyeS0+cGFyYW1z
LCBlbnRyeS0+YXR0cik7Ci0gICAgcmV0dXJuIGdldFZhbHVlUHJvcGVydHkoZXhlYywgZW50cnkt
PnZhbHVlKTsKLSAgfQorICAgIGNvbnN0IEhhc2hUYWJsZSogdGFibGUgPSBjbGFzc0luZm8oKS0+
cHJvcEhhc2hUYWJsZTsgLy8gZ2V0IHRoZSByaWdodCBoYXNodGFibGUKKyAgICBjb25zdCBIYXNo
RW50cnkqIGVudHJ5ID0gTG9va3VwOjpmaW5kRW50cnkodGFibGUsIHByb3BlcnR5TmFtZSk7Cisg
ICAgaWYgKGVudHJ5KSB7CisgICAgICAgIGlmIChlbnRyeS0+YXR0ciAmIEZ1bmN0aW9uKQorICAg
ICAgICAgICAgcmV0dXJuIGxvb2t1cE9yQ3JlYXRlRnVuY3Rpb248S0pTOjpIVE1MRWxlbWVudEZ1
bmN0aW9uPihleGVjLCBwcm9wZXJ0eU5hbWUsIHRoaXMsIGVudHJ5LT52YWx1ZSwgZW50cnktPnBh
cmFtcywgZW50cnktPmF0dHIpOworICAgICAgICByZXR1cm4gZ2V0VmFsdWVQcm9wZXJ0eShleGVj
LCBlbnRyeS0+dmFsdWUpOworICAgIH0KIAotICAvLyBCYXNlIEhUTUxFbGVtZW50IHN0dWZmIG9y
IHBhcmVudCBjbGFzcyBmb3J3YXJkLCBhcyB1c3VhbAotICByZXR1cm4gRE9NT2JqZWN0TG9va3Vw
R2V0PEtKUzo6SFRNTEVsZW1lbnRGdW5jdGlvbiwgS0pTOjpIVE1MRWxlbWVudCwgRE9NRWxlbWVu
dD4oZXhlYywgcHJvcGVydHlOYW1lLCAmSFRNTEVsZW1lbnRUYWJsZSwgdGhpcyk7CisgICAgLy8g
QmFzZSBIVE1MRWxlbWVudCBzdHVmZiBvciBwYXJlbnQgY2xhc3MgZm9yd2FyZCwgYXMgdXN1YWwK
KyAgICByZXR1cm4gRE9NT2JqZWN0TG9va3VwR2V0PEtKUzo6SFRNTEVsZW1lbnRGdW5jdGlvbiwg
S0pTOjpIVE1MRWxlbWVudCwgRE9NRWxlbWVudD4oZXhlYywgcHJvcGVydHlOYW1lLCAmSFRNTEVs
ZW1lbnRUYWJsZSwgdGhpcyk7CiB9CiAKIGJvb2wgS0pTOjpIVE1MRWxlbWVudDo6aW1wbGVtZW50
c0NhbGwoKSBjb25zdAogewogICAgIEhUTUxFbGVtZW50SW1wbCAqZWxlbWVudCA9IHN0YXRpY19j
YXN0PEhUTUxFbGVtZW50SW1wbCAqPihpbXBsKCkpOwotICAgIHN3aXRjaCAoZWxlbWVudC0+aWQo
KSkgewotCWNhc2UgSURfRU1CRUQ6Ci0JY2FzZSBJRF9PQkpFQ1Q6Ci0JY2FzZSBJRF9BUFBMRVQ6
IHsKLQkJRG9jdW1lbnRJbXBsKiBkb2MgPSBlbGVtZW50LT5nZXREb2N1bWVudCgpOwotCQlLSlNQ
cm94eSAqcHJveHkgPSBLSlNQcm94eTo6cHJveHkoZG9jLT5wYXJ0KCkpOwotCQlFeGVjU3RhdGUg
KmV4ZWMgPSBwcm94eS0+aW50ZXJwcmV0ZXIoKS0+Z2xvYmFsRXhlYygpOwotCQlWYWx1ZSBydW50
aW1lT2JqZWN0ID0gZ2V0UnVudGltZU9iamVjdChleGVjLGVsZW1lbnQpOwotCQlpZiAoIXJ1bnRp
bWVPYmplY3QuaXNOdWxsKCkpIHsKLQkJICAgIE9iamVjdEltcCAqaW1wID0gc3RhdGljX2Nhc3Q8
T2JqZWN0SW1wICo+KHJ1bnRpbWVPYmplY3QuaW1wKCkpOwotCQkgICAgcmV0dXJuIGltcC0+aW1w
bGVtZW50c0NhbGwgKCk7Ci0JCX0KLQkgICAgfQotCSAgICBicmVhazsKLQlkZWZhdWx0OgotCSAg
ICBicmVhazsKKyAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmVtYmVkKCkp
IHx8CisgICAgICAgIGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvYmplY3QoKSkgfHwK
KyAgICAgICAgZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmFwcGxldCgpKSkgeworICAg
CURvY3VtZW50SW1wbCogZG9jID0gZWxlbWVudC0+Z2V0RG9jdW1lbnQoKTsKKyAgICAgICAgS0pT
UHJveHkgKnByb3h5ID0gS0pTUHJveHk6OnByb3h5KGRvYy0+cGFydCgpKTsKKyAgICAgICAgRXhl
Y1N0YXRlICpleGVjID0gcHJveHktPmludGVycHJldGVyKCktPmdsb2JhbEV4ZWMoKTsKKyAgICAg
ICAgVmFsdWUgcnVudGltZU9iamVjdCA9IGdldFJ1bnRpbWVPYmplY3QoZXhlYyxlbGVtZW50KTsK
KyAgICAgICAgaWYgKCFydW50aW1lT2JqZWN0LmlzTnVsbCgpKSB7CisgICAgICAgICAgICBPYmpl
Y3RJbXAgKmltcCA9IHN0YXRpY19jYXN0PE9iamVjdEltcCAqPihydW50aW1lT2JqZWN0LmltcCgp
KTsKKyAgICAgICAgICAgIHJldHVybiBpbXAtPmltcGxlbWVudHNDYWxsICgpOworICAgICAgICB9
CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTEzMTAsODE5ICsxMzc1LDkwOCBAQCBi
b29sIEtKUzo6SFRNTEVsZW1lbnQ6OmltcGxlbWVudHNDYWxsKCkgCiBWYWx1ZSBLSlM6OkhUTUxF
bGVtZW50OjpjYWxsKEV4ZWNTdGF0ZSAqZXhlYywgT2JqZWN0ICZ0aGlzT2JqLCBjb25zdCBMaXN0
JmFyZ3MpCiB7CiAgICAgSFRNTEVsZW1lbnRJbXBsICplbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRN
TEVsZW1lbnRJbXBsICo+KGltcGwoKSk7Ci0gICAgc3dpdGNoIChlbGVtZW50LT5pZCgpKSB7Ci0J
Y2FzZSBJRF9FTUJFRDoKLQljYXNlIElEX09CSkVDVDoKLQljYXNlIElEX0FQUExFVDogewotCQlW
YWx1ZSBydW50aW1lT2JqZWN0ID0gZ2V0UnVudGltZU9iamVjdChleGVjLGVsZW1lbnQpOwotCQlp
ZiAoIXJ1bnRpbWVPYmplY3QuaXNOdWxsKCkpIHsKLQkJICAgIE9iamVjdEltcCAqaW1wID0gc3Rh
dGljX2Nhc3Q8T2JqZWN0SW1wICo+KHJ1bnRpbWVPYmplY3QuaW1wKCkpOwotCQkgICAgcmV0dXJu
IGltcC0+Y2FsbCAoZXhlYywgdGhpc09iaiwgYXJncyk7Ci0JCX0KLQkgICAgfQotCSAgICBicmVh
azsKLQlkZWZhdWx0OgotCSAgICBicmVhazsKKyAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OmVtYmVkKCkpIHx8CisgICAgICAgIGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjpvYmplY3QoKSkgfHwKKyAgICAgICAgZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
OmFwcGxldCgpKSkgeworICAgICAgICBWYWx1ZSBydW50aW1lT2JqZWN0ID0gZ2V0UnVudGltZU9i
amVjdChleGVjLGVsZW1lbnQpOworICAgICAgICBpZiAoIXJ1bnRpbWVPYmplY3QuaXNOdWxsKCkp
IHsKKyAgICAgICAgICAgIE9iamVjdEltcCAqaW1wID0gc3RhdGljX2Nhc3Q8T2JqZWN0SW1wICo+
KHJ1bnRpbWVPYmplY3QuaW1wKCkpOworICAgICAgICAgICAgcmV0dXJuIGltcC0+Y2FsbCAoZXhl
YywgdGhpc09iaiwgYXJncyk7CisgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIFVuZGVmaW5l
ZCgpOwogfQogCi1zdGF0aWMgVmFsdWUgZ2V0SW5wdXRTZWxlY3Rpb25TdGFydChIVE1MSW5wdXRF
bGVtZW50SW1wbCAmaW5wdXQpCitWYWx1ZSBIVE1MRWxlbWVudDo6aHRtbEdldHRlcihFeGVjU3Rh
dGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKLSAgaWYgKGlucHV0LmNhbkhhdmVTZWxlY3Rp
b24oKSkgewotICAgIHJldHVybiBOdW1iZXIoaW5wdXQuc2VsZWN0aW9uU3RhcnQoKSk7Ci0gIH0K
LSAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAgIEhUTUxIdG1sRWxlbWVudEltcGwmIGh0bWwgPSAq
c3RhdGljX2Nhc3Q8SFRNTEh0bWxFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2Vu
ID09IEh0bWxWZXJzaW9uKQorICAgICAgICByZXR1cm4gU3RyaW5nKGh0bWwudmVyc2lvbigpKTsK
KyAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBWYWx1ZSBnZXRJbnB1dFNlbGVj
dGlvbkVuZChIVE1MSW5wdXRFbGVtZW50SW1wbCAmaW5wdXQpCitWYWx1ZSBIVE1MRWxlbWVudDo6
aGVhZEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKLSAgaWYgKGlu
cHV0LmNhbkhhdmVTZWxlY3Rpb24oKSkgewotICAgIHJldHVybiBOdW1iZXIoaW5wdXQuc2VsZWN0
aW9uRW5kKCkpOwotICB9Ci0gIHJldHVybiBVbmRlZmluZWQoKTsKKyAgICBIVE1MSGVhZEVsZW1l
bnRJbXBsICZoZWFkID0gKnN0YXRpY19jYXN0PEhUTUxIZWFkRWxlbWVudEltcGwqPihpbXBsKCkp
OworICAgIGlmICh0b2tlbiA9PSBIZWFkUHJvZmlsZSkKKyAgICAgICAgcmV0dXJuIFN0cmluZyho
ZWFkLnByb2ZpbGUoKSk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCi1WYWx1ZSBLSlM6
OkhUTUxFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
KSBjb25zdAorVmFsdWUgSFRNTEVsZW1lbnQ6OmxpbmtHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBp
bnQgdG9rZW4pIGNvbnN0CiB7Ci0gIEhUTUxFbGVtZW50SW1wbCAmZWxlbWVudCA9ICpzdGF0aWNf
Y2FzdDxIVE1MRWxlbWVudEltcGwgKj4oaW1wbCgpKTsKLSAgc3dpdGNoIChlbGVtZW50LmlkKCkp
IHsKLSAgY2FzZSBJRF9IVE1MOiB7Ci0gICAgSFRNTEh0bWxFbGVtZW50SW1wbCAmaHRtbCA9IHN0
YXRpY19jYXN0PEhUTUxIdG1sRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgaWYgICAgICAo
dG9rZW4gPT0gSHRtbFZlcnNpb24pICAgICAgICAgcmV0dXJuIFN0cmluZyhodG1sLnZlcnNpb24o
KSk7Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfSEVBRDogewotICAgIEhUTUxIZWFkRWxlbWVu
dEltcGwgJmhlYWQgPSBzdGF0aWNfY2FzdDxIVE1MSGVhZEVsZW1lbnRJbXBsICY+KGVsZW1lbnQp
OwotICAgIGlmICAgICAgKHRva2VuID09IEhlYWRQcm9maWxlKSAgICAgICAgIHJldHVybiBTdHJp
bmcoaGVhZC5wcm9maWxlKCkpOwotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX0xJTks6IHsKLSAg
ICBIVE1MTGlua0VsZW1lbnRJbXBsICZsaW5rID0gc3RhdGljX2Nhc3Q8SFRNTExpbmtFbGVtZW50
SW1wbCAmPihlbGVtZW50KTsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBMaW5rRGlz
YWJsZWQ6ICAgICAgICByZXR1cm4gQm9vbGVhbihsaW5rLmRpc2FibGVkKCkpOwotICAgIGNhc2Ug
TGlua0NoYXJzZXQ6ICAgICAgICAgcmV0dXJuIFN0cmluZyhsaW5rLmNoYXJzZXQoKSk7Ci0gICAg
Y2FzZSBMaW5rSHJlZjogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGxpbmsuaHJlZigpKTsKLSAg
ICBjYXNlIExpbmtIcmVmTGFuZzogICAgICAgIHJldHVybiBTdHJpbmcobGluay5ocmVmbGFuZygp
KTsKLSAgICBjYXNlIExpbmtNZWRpYTogICAgICAgICAgIHJldHVybiBTdHJpbmcobGluay5tZWRp
YSgpKTsKLSAgICBjYXNlIExpbmtSZWw6ICAgICAgICAgICAgIHJldHVybiBTdHJpbmcobGluay5y
ZWwoKSk7Ci0gICAgY2FzZSBMaW5rUmV2OiAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGxpbmsu
cmV2KCkpOwotICAgIGNhc2UgTGlua1RhcmdldDogICAgICAgICAgcmV0dXJuIFN0cmluZyhsaW5r
LnRhcmdldCgpKTsKLSAgICBjYXNlIExpbmtUeXBlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmco
bGluay50eXBlKCkpOwotICAgIGNhc2UgTGlua1NoZWV0OiAgICAgICAgICAgcmV0dXJuIGdldERP
TVN0eWxlU2hlZXQoZXhlYywgbGluay5zaGVldCgpKTsKLSAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0g
IGNhc2UgSURfVElUTEU6IHsKLSAgICBIVE1MVGl0bGVFbGVtZW50SW1wbCAmdGl0bGUgPSBzdGF0
aWNfY2FzdDxIVE1MVGl0bGVFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICBIVE1MTGlua0Vs
ZW1lbnRJbXBsICZsaW5rID0gKnN0YXRpY19jYXN0PEhUTUxMaW5rRWxlbWVudEltcGwqPihpbXBs
KCkpOwogICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIFRpdGxlVGV4dDogICAgICAgICAg
ICAgICAgIHJldHVybiBTdHJpbmcodGl0bGUudGV4dCgpKTsKLSAgICB9Ci0gIH0KLSAgYnJlYWs7
Ci0gIGNhc2UgSURfTUVUQTogewotICAgIEhUTUxNZXRhRWxlbWVudEltcGwgJm1ldGEgPSBzdGF0
aWNfY2FzdDxIVE1MTWV0YUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgIHN3aXRjaCAodG9r
ZW4pIHsKLSAgICBjYXNlIE1ldGFDb250ZW50OiAgICAgICAgIHJldHVybiBTdHJpbmcobWV0YS5j
b250ZW50KCkpOwotICAgIGNhc2UgTWV0YUh0dHBFcXVpdjogICAgICAgcmV0dXJuIFN0cmluZyht
ZXRhLmh0dHBFcXVpdigpKTsKLSAgICBjYXNlIE1ldGFOYW1lOiAgICAgICAgICAgIHJldHVybiBT
dHJpbmcobWV0YS5uYW1lKCkpOwotICAgIGNhc2UgTWV0YVNjaGVtZTogICAgICAgICAgcmV0dXJu
IFN0cmluZyhtZXRhLnNjaGVtZSgpKTsKKyAgICAgICAgY2FzZSBMaW5rRGlzYWJsZWQ6CisgICAg
ICAgICAgICByZXR1cm4gQm9vbGVhbihsaW5rLmRpc2FibGVkKCkpOworICAgICAgICBjYXNlIExp
bmtDaGFyc2V0OgorICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhsaW5rLmNoYXJzZXQoKSk7Cisg
ICAgICAgIGNhc2UgTGlua0hyZWY6CisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGxpbmsuaHJl
ZigpKTsKKyAgICAgICAgY2FzZSBMaW5rSHJlZkxhbmc6CisgICAgICAgICAgICByZXR1cm4gU3Ry
aW5nKGxpbmsuaHJlZmxhbmcoKSk7CisgICAgICAgIGNhc2UgTGlua01lZGlhOiAgICAgICAgICAg
CisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGxpbmsubWVkaWEoKSk7CisgICAgICAgIGNhc2Ug
TGlua1JlbDogICAgICAgICAgICAgCisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGxpbmsucmVs
KCkpOworICAgICAgICBjYXNlIExpbmtSZXY6ICAgICAgICAgICAgCisgICAgICAgICAgICByZXR1
cm4gU3RyaW5nKGxpbmsucmV2KCkpOworICAgICAgICBjYXNlIExpbmtUYXJnZXQ6ICAgICAgICAg
IAorICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhsaW5rLnRhcmdldCgpKTsKKyAgICAgICAgY2Fz
ZSBMaW5rVHlwZTogICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcobGluay50
eXBlKCkpOworICAgICAgICBjYXNlIExpbmtTaGVldDogICAgICAgICAgIAorICAgICAgICAgICAg
cmV0dXJuIGdldERPTVN0eWxlU2hlZXQoZXhlYywgbGluay5zaGVldCgpKTsKICAgICB9Ci0gIH0K
LSAgYnJlYWs7Ci0gIGNhc2UgSURfQkFTRTogewotICAgIEhUTUxCYXNlRWxlbWVudEltcGwgJmJh
c2UgPSBzdGF0aWNfY2FzdDxIVE1MQmFzZUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgIHJl
dHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OnRpdGxlR2V0dGVyKEV4
ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxUaXRsZUVsZW1lbnRJ
bXBsJiB0aXRsZSA9ICpzdGF0aWNfY2FzdDxIVE1MVGl0bGVFbGVtZW50SW1wbCo+KGltcGwoKSk7
CisgICAgaWYgKHRva2VuID09IFRpdGxlVGV4dCkKKyAgICAgICAgcmV0dXJuIFN0cmluZyh0aXRs
ZS50ZXh0KCkpOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1l
bnQ6Om1ldGFHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAg
SFRNTE1ldGFFbGVtZW50SW1wbCYgbWV0YSA9ICpzdGF0aWNfY2FzdDxIVE1MTWV0YUVsZW1lbnRJ
bXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBCYXNlSHJlZjog
ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGJhc2UuaHJlZigpKTsKLSAgICBjYXNlIEJhc2VUYXJn
ZXQ6ICAgICAgICAgIHJldHVybiBTdHJpbmcoYmFzZS50YXJnZXQoKSk7CisgICAgICAgIGNhc2Ug
TWV0YUNvbnRlbnQ6ICAgICAgICAgcmV0dXJuIFN0cmluZyhtZXRhLmNvbnRlbnQoKSk7CisgICAg
ICAgIGNhc2UgTWV0YUh0dHBFcXVpdjogICAgICAgcmV0dXJuIFN0cmluZyhtZXRhLmh0dHBFcXVp
digpKTsKKyAgICAgICAgY2FzZSBNZXRhTmFtZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKG1l
dGEubmFtZSgpKTsKKyAgICAgICAgY2FzZSBNZXRhU2NoZW1lOiAgICAgICAgICByZXR1cm4gU3Ry
aW5nKG1ldGEuc2NoZW1lKCkpOwogICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9JU0lO
REVYOiB7Ci0gICAgSFRNTElzSW5kZXhFbGVtZW50SW1wbCAmaXNpbmRleCA9IHN0YXRpY19jYXN0
PEhUTUxJc0luZGV4RWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgcmV0dXJuIFVuZGVmaW5l
ZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6YmFzZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMs
IGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MQmFzZUVsZW1lbnRJbXBsJiBiYXNlID0gKnN0
YXRpY19jYXN0PEhUTUxCYXNlRWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAodG9r
ZW4pIHsKLSAgICBjYXNlIElzSW5kZXhGb3JtOiAgICAgICAgICAgIHJldHVybiBnZXRET01Ob2Rl
KGV4ZWMsIGlzaW5kZXguZm9ybSgpKTsgLy8gdHlwZSBIVE1MRm9ybUVsZW1lbnQKLSAgICBjYXNl
IElzSW5kZXhQcm9tcHQ6ICAgICAgICAgIHJldHVybiBTdHJpbmcoaXNpbmRleC5wcm9tcHQoKSk7
Ci0gICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX1NUWUxFOiB7Ci0gICAgSFRNTFN0eWxl
RWxlbWVudEltcGwgJnN0eWxlID0gc3RhdGljX2Nhc3Q8SFRNTFN0eWxlRWxlbWVudEltcGwgJj4o
ZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgU3R5bGVEaXNhYmxlZDog
ICAgICAgIHJldHVybiBCb29sZWFuKHN0eWxlLmRpc2FibGVkKCkpOwotICAgIGNhc2UgU3R5bGVN
ZWRpYTogICAgICAgICAgIHJldHVybiBTdHJpbmcoc3R5bGUubWVkaWEoKSk7Ci0gICAgY2FzZSBT
dHlsZVR5cGU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhzdHlsZS50eXBlKCkpOwotICAgIGNh
c2UgU3R5bGVTaGVldDogICAgICAgICAgIHJldHVybiBnZXRET01TdHlsZVNoZWV0KGV4ZWMsIHN0
eWxlLnNoZWV0KCkpOwotICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9CT0RZOiB7Ci0g
ICAgSFRNTEJvZHlFbGVtZW50SW1wbCAmYm9keSA9IHN0YXRpY19jYXN0PEhUTUxCb2R5RWxlbWVu
dEltcGwgJj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgQm9keUFM
aW5rOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhib2R5LmFMaW5rKCkpOwotICAgIGNhc2UgQm9k
eUJhY2tncm91bmQ6ICAgICAgcmV0dXJuIFN0cmluZyhib2R5LmJhY2tncm91bmQoKSk7Ci0gICAg
Y2FzZSBCb2R5QmdDb2xvcjogICAgICAgICByZXR1cm4gU3RyaW5nKGJvZHkuYmdDb2xvcigpKTsK
LSAgICBjYXNlIEJvZHlMaW5rOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYm9keS5saW5rKCkp
OwotICAgIGNhc2UgQm9keVRleHQ6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhib2R5LnRleHQo
KSk7Ci0gICAgY2FzZSBCb2R5Vkxpbms6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGJvZHkudkxp
bmsoKSk7Ci0gICAgZGVmYXVsdDoKLSAgICAgIC8vIFVwZGF0ZSB0aGUgZG9jdW1lbnQncyBsYXlv
dXQgYmVmb3JlIHdlIGNvbXB1dGUgdGhlc2UgYXR0cmlidXRlcy4KLSAgICAgIERvY3VtZW50SW1w
bCAqZG9jID0gYm9keS5nZXREb2N1bWVudCgpOwotICAgICAgaWYgKGRvYykKLSAgICAgICAgZG9j
LT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKLSAgICAgIEtIVE1MVmll
dyAqdmlldyA9IGRvYyA/IGRvYy0+dmlldygpIDogMDsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsK
LSAgICAgICAgY2FzZSBCb2R5U2Nyb2xsTGVmdDoKLSAgICAgICAgICAgIHJldHVybiBOdW1iZXIo
dmlldyA/IHZpZXctPmNvbnRlbnRzWCgpIDogMCk7Ci0gICAgICAgIGNhc2UgQm9keVNjcm9sbFRv
cDoKLSAgICAgICAgICAgIHJldHVybiBOdW1iZXIodmlldyA/IHZpZXctPmNvbnRlbnRzWSgpIDog
MCk7Ci0gICAgICAgIGNhc2UgQm9keVNjcm9sbEhlaWdodDogICByZXR1cm4gTnVtYmVyKHZpZXcg
PyB2aWV3LT5jb250ZW50c0hlaWdodCgpIDogMCk7Ci0gICAgICAgIGNhc2UgQm9keVNjcm9sbFdp
ZHRoOiAgICByZXR1cm4gTnVtYmVyKHZpZXcgPyB2aWV3LT5jb250ZW50c1dpZHRoKCkgOiAwKTsK
LSAgICAgIH0KKyAgICAgICAgY2FzZSBCYXNlSHJlZjogICAgICAgICAgICByZXR1cm4gU3RyaW5n
KGJhc2UuaHJlZigpKTsKKyAgICAgICAgY2FzZSBCYXNlVGFyZ2V0OiAgICAgICAgICByZXR1cm4g
U3RyaW5nKGJhc2UudGFyZ2V0KCkpOwogICAgIH0KLSAgfQotICBicmVhazsKKyAgICByZXR1cm4g
VW5kZWZpbmVkKCk7Cit9CiAKLSAgY2FzZSBJRF9GT1JNOiB7Ci0gICAgSFRNTEZvcm1FbGVtZW50
SW1wbCAmZm9ybSA9IHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudEltcGwgJj4oZWxlbWVudCk7
CitWYWx1ZSBIVE1MRWxlbWVudDo6aXNJbmRleEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0
b2tlbikgY29uc3QKK3sKKyAgICBIVE1MSXNJbmRleEVsZW1lbnRJbXBsJiBpc2luZGV4ID0gKnN0
YXRpY19jYXN0PEhUTUxJc0luZGV4RWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAo
dG9rZW4pIHsKLSAgICBjYXNlIEZvcm1FbGVtZW50czogICAgICAgIHJldHVybiBnZXRIVE1MQ29s
bGVjdGlvbihleGVjLCBmb3JtLmVsZW1lbnRzKCkuZ2V0KCkpOwotICAgIGNhc2UgRm9ybUxlbmd0
aDogICAgICAgICAgcmV0dXJuIE51bWJlcihmb3JtLmxlbmd0aCgpKTsKLSAgICBjYXNlIEZvcm1O
YW1lOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoZm9ybS5uYW1lKCkpOwotICAgIGNhc2UgRm9y
bUFjY2VwdENoYXJzZXQ6ICAgcmV0dXJuIFN0cmluZyhmb3JtLmFjY2VwdENoYXJzZXQoKSk7Ci0g
ICAgY2FzZSBGb3JtQWN0aW9uOiAgICAgICAgICByZXR1cm4gU3RyaW5nKGZvcm0uYWN0aW9uKCkp
OwotICAgIGNhc2UgRm9ybUVuY1R5cGU6ICAgICAgICAgcmV0dXJuIFN0cmluZyhmb3JtLmVuY3R5
cGUoKSk7Ci0gICAgY2FzZSBGb3JtTWV0aG9kOiAgICAgICAgICByZXR1cm4gU3RyaW5nKGZvcm0u
bWV0aG9kKCkpOwotICAgIGNhc2UgRm9ybVRhcmdldDogICAgICAgICAgcmV0dXJuIFN0cmluZyhm
b3JtLnRhcmdldCgpKTsKLSAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfU0VMRUNUOiB7
Ci0gICAgSFRNTFNlbGVjdEVsZW1lbnRJbXBsICZzZWxlY3QgPSBzdGF0aWNfY2FzdDxIVE1MU2Vs
ZWN0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNh
c2UgU2VsZWN0VHlwZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKHNlbGVjdC50eXBlKCkpOwot
ICAgIGNhc2UgU2VsZWN0U2VsZWN0ZWRJbmRleDogICByZXR1cm4gTnVtYmVyKHNlbGVjdC5zZWxl
Y3RlZEluZGV4KCkpOwotICAgIGNhc2UgU2VsZWN0VmFsdWU6ICAgICAgICAgICByZXR1cm4gU3Ry
aW5nKHNlbGVjdC52YWx1ZSgpKTsKLSAgICBjYXNlIFNlbGVjdExlbmd0aDogICAgICAgICAgcmV0
dXJuIE51bWJlcihzZWxlY3QubGVuZ3RoKCkpOwotICAgIGNhc2UgU2VsZWN0Rm9ybTogICAgICAg
ICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLCBzZWxlY3QuZm9ybSgpKTsgLy8gdHlwZSBIVE1M
Rm9ybUVsZW1lbnQKLSAgICBjYXNlIFNlbGVjdE9wdGlvbnM6ICAgICAgICAgcmV0dXJuIGdldFNl
bGVjdEhUTUxDb2xsZWN0aW9uKGV4ZWMsIHNlbGVjdC5vcHRpb25zSFRNTENvbGxlY3Rpb24oKS5n
ZXQoKSwgJnNlbGVjdCk7IC8vIHR5cGUgSFRNTENvbGxlY3Rpb24KLSAgICBjYXNlIFNlbGVjdERp
c2FibGVkOiAgICAgICAgcmV0dXJuIEJvb2xlYW4oc2VsZWN0LmRpc2FibGVkKCkpOwotICAgIGNh
c2UgU2VsZWN0TXVsdGlwbGU6ICAgICAgICByZXR1cm4gQm9vbGVhbihzZWxlY3QubXVsdGlwbGUo
KSk7Ci0gICAgY2FzZSBTZWxlY3ROYW1lOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoc2VsZWN0
Lm5hbWUoKSk7Ci0gICAgY2FzZSBTZWxlY3RTaXplOiAgICAgICAgICAgIHJldHVybiBOdW1iZXIo
c2VsZWN0LnNpemUoKSk7Ci0gICAgY2FzZSBTZWxlY3RUYWJJbmRleDogICAgICAgIHJldHVybiBO
dW1iZXIoc2VsZWN0LnRhYkluZGV4KCkpOworICAgICAgICBjYXNlIElzSW5kZXhGb3JtOiAgICAg
ICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsIGlzaW5kZXguZm9ybSgpKTsgLy8gdHlwZSBI
VE1MRm9ybUVsZW1lbnQKKyAgICAgICAgY2FzZSBJc0luZGV4UHJvbXB0OiAgICAgICAgICByZXR1
cm4gU3RyaW5nKGlzaW5kZXgucHJvbXB0KCkpOwogICAgIH0KLSAgfQotICBicmVhazsKLSAgY2Fz
ZSBJRF9PUFRHUk9VUDogewotICAgIEhUTUxPcHRHcm91cEVsZW1lbnRJbXBsICZvcHRncm91cCA9
IHN0YXRpY19jYXN0PEhUTUxPcHRHcm91cEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgIHJl
dHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OnN0eWxlR2V0dGVyKEV4
ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxTdHlsZUVsZW1lbnRJ
bXBsJiBzdHlsZSA9ICpzdGF0aWNfY2FzdDxIVE1MU3R5bGVFbGVtZW50SW1wbCo+KGltcGwoKSk7
CiAgICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgT3B0R3JvdXBEaXNhYmxlZDogICAgICAg
IHJldHVybiBCb29sZWFuKG9wdGdyb3VwLmRpc2FibGVkKCkpOwotICAgIGNhc2UgT3B0R3JvdXBM
YWJlbDogICAgICAgICAgIHJldHVybiBTdHJpbmcob3B0Z3JvdXAubGFiZWwoKSk7Ci0gICAgfQot
ICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX09QVElPTjogewotICAgIEhUTUxPcHRpb25FbGVtZW50
SW1wbCAmb3B0aW9uID0gc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnRJbXBsICY+KGVsZW1l
bnQpOwotICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIE9wdGlvbkZvcm06ICAgICAgICAg
ICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyxvcHRpb24uZm9ybSgpKTsgLy8gdHlwZSBIVE1MRm9y
bUVsZW1lbnQKLSAgICBjYXNlIE9wdGlvbkRlZmF1bHRTZWxlY3RlZDogcmV0dXJuIEJvb2xlYW4o
b3B0aW9uLmRlZmF1bHRTZWxlY3RlZCgpKTsKLSAgICBjYXNlIE9wdGlvblRleHQ6ICAgICAgICAg
ICAgcmV0dXJuIFN0cmluZyhvcHRpb24udGV4dCgpKTsKLSAgICBjYXNlIE9wdGlvbkluZGV4OiAg
ICAgICAgICAgcmV0dXJuIE51bWJlcihvcHRpb24uaW5kZXgoKSk7Ci0gICAgY2FzZSBPcHRpb25E
aXNhYmxlZDogICAgICAgIHJldHVybiBCb29sZWFuKG9wdGlvbi5kaXNhYmxlZCgpKTsKLSAgICBj
YXNlIE9wdGlvbkxhYmVsOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhvcHRpb24ubGFiZWwoKSk7
Ci0gICAgY2FzZSBPcHRpb25TZWxlY3RlZDogICAgICAgIHJldHVybiBCb29sZWFuKG9wdGlvbi5z
ZWxlY3RlZCgpKTsKLSAgICBjYXNlIE9wdGlvblZhbHVlOiAgICAgICAgICAgcmV0dXJuIFN0cmlu
ZyhvcHRpb24udmFsdWUoKSk7Ci0gICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX0lOUFVU
OiB7Ci0gICAgSFRNTElucHV0RWxlbWVudEltcGwgJmlucHV0ID0gc3RhdGljX2Nhc3Q8SFRNTElu
cHV0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNh
c2UgSW5wdXREZWZhdWx0VmFsdWU6ICAgIHJldHVybiBTdHJpbmcoaW5wdXQuZGVmYXVsdFZhbHVl
KCkpOwotICAgIGNhc2UgSW5wdXREZWZhdWx0Q2hlY2tlZDogIHJldHVybiBCb29sZWFuKGlucHV0
LmRlZmF1bHRDaGVja2VkKCkpOwotICAgIGNhc2UgSW5wdXRGb3JtOiAgICAgICAgICAgIHJldHVy
biBnZXRET01Ob2RlKGV4ZWMsaW5wdXQuZm9ybSgpKTsgLy8gdHlwZSBIVE1MRm9ybUVsZW1lbnQK
LSAgICBjYXNlIElucHV0QWNjZXB0OiAgICAgICAgICByZXR1cm4gU3RyaW5nKGlucHV0LmFjY2Vw
dCgpKTsKLSAgICBjYXNlIElucHV0QWNjZXNzS2V5OiAgICAgICByZXR1cm4gU3RyaW5nKGlucHV0
LmFjY2Vzc0tleSgpKTsKLSAgICBjYXNlIElucHV0QWxpZ246ICAgICAgICAgICByZXR1cm4gU3Ry
aW5nKGlucHV0LmFsaWduKCkpOwotICAgIGNhc2UgSW5wdXRBbHQ6ICAgICAgICAgICAgIHJldHVy
biBTdHJpbmcoaW5wdXQuYWx0KCkpOwotICAgIGNhc2UgSW5wdXRDaGVja2VkOiAgICAgICAgIHJl
dHVybiBCb29sZWFuKGlucHV0LmNoZWNrZWQoKSk7Ci0gICAgY2FzZSBJbnB1dERpc2FibGVkOiAg
ICAgICAgcmV0dXJuIEJvb2xlYW4oaW5wdXQuZGlzYWJsZWQoKSk7Ci0gICAgY2FzZSBJbnB1dE1h
eExlbmd0aDogICAgICAgcmV0dXJuIE51bWJlcihpbnB1dC5tYXhMZW5ndGgoKSk7Ci0gICAgY2Fz
ZSBJbnB1dE5hbWU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpbnB1dC5uYW1lKCkpOwotICAg
IGNhc2UgSW5wdXRSZWFkT25seTogICAgICAgIHJldHVybiBCb29sZWFuKGlucHV0LnJlYWRPbmx5
KCkpOwotICAgIGNhc2UgSW5wdXRTZWxlY3Rpb25TdGFydDogIHJldHVybiBnZXRJbnB1dFNlbGVj
dGlvblN0YXJ0KGlucHV0KTsKLSAgICBjYXNlIElucHV0U2VsZWN0aW9uRW5kOiAgICByZXR1cm4g
Z2V0SW5wdXRTZWxlY3Rpb25FbmQoaW5wdXQpOwotICAgIGNhc2UgSW5wdXRTaXplOiAgICAgICAg
ICAgIHJldHVybiBTdHJpbmcoaW5wdXQuc2l6ZURPTSgpKTsKLSAgICBjYXNlIElucHV0U3JjOiAg
ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGlucHV0LnNyYygpKTsKLSAgICBjYXNlIElucHV0VGFi
SW5kZXg6ICAgICAgICByZXR1cm4gTnVtYmVyKGlucHV0LnRhYkluZGV4KCkpOwotICAgIGNhc2Ug
SW5wdXRUeXBlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoaW5wdXQudHlwZSgpKTsKLSAgICBj
YXNlIElucHV0VXNlTWFwOiAgICAgICAgICByZXR1cm4gU3RyaW5nKGlucHV0LnVzZU1hcCgpKTsK
LSAgICBjYXNlIElucHV0VmFsdWU6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGlucHV0LnZhbHVl
KCkpOworICAgICAgICBjYXNlIFN0eWxlRGlzYWJsZWQ6ICAgICAgICByZXR1cm4gQm9vbGVhbihz
dHlsZS5kaXNhYmxlZCgpKTsKKyAgICAgICAgY2FzZSBTdHlsZU1lZGlhOiAgICAgICAgICAgcmV0
dXJuIFN0cmluZyhzdHlsZS5tZWRpYSgpKTsKKyAgICAgICAgY2FzZSBTdHlsZVR5cGU6ICAgICAg
ICAgICAgcmV0dXJuIFN0cmluZyhzdHlsZS50eXBlKCkpOworICAgICAgICBjYXNlIFN0eWxlU2hl
ZXQ6ICAgICAgICAgICByZXR1cm4gZ2V0RE9NU3R5bGVTaGVldChleGVjLCBzdHlsZS5zaGVldCgp
KTsKICAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfVEVYVEFSRUE6IHsKLSAgICBIVE1M
VGV4dEFyZWFFbGVtZW50SW1wbCAmdGV4dGFyZWEgPSBzdGF0aWNfY2FzdDxIVE1MVGV4dEFyZWFF
bGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBU
ZXh0QXJlYURlZmF1bHRWYWx1ZTogICAgcmV0dXJuIFN0cmluZyh0ZXh0YXJlYS5kZWZhdWx0VmFs
dWUoKSk7Ci0gICAgY2FzZSBUZXh0QXJlYUZvcm06ICAgICAgICAgICAgcmV0dXJuIGdldERPTU5v
ZGUoZXhlYyx0ZXh0YXJlYS5mb3JtKCkpOyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVudAotICAgIGNh
c2UgVGV4dEFyZWFBY2Nlc3NLZXk6ICAgICAgIHJldHVybiBTdHJpbmcodGV4dGFyZWEuYWNjZXNz
S2V5KCkpOwotICAgIGNhc2UgVGV4dEFyZWFDb2xzOiAgICAgICAgICAgIHJldHVybiBOdW1iZXIo
dGV4dGFyZWEuY29scygpKTsKLSAgICBjYXNlIFRleHRBcmVhRGlzYWJsZWQ6ICAgICAgICByZXR1
cm4gQm9vbGVhbih0ZXh0YXJlYS5kaXNhYmxlZCgpKTsKLSAgICBjYXNlIFRleHRBcmVhTmFtZTog
ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRleHRhcmVhLm5hbWUoKSk7Ci0gICAgY2FzZSBUZXh0
QXJlYVJlYWRPbmx5OiAgICAgICAgcmV0dXJuIEJvb2xlYW4odGV4dGFyZWEucmVhZE9ubHkoKSk7
Ci0gICAgY2FzZSBUZXh0QXJlYVJvd3M6ICAgICAgICAgICAgcmV0dXJuIE51bWJlcih0ZXh0YXJl
YS5yb3dzKCkpOwotICAgIGNhc2UgVGV4dEFyZWFTZWxlY3Rpb25TdGFydDogIHJldHVybiBOdW1i
ZXIodGV4dGFyZWEuc2VsZWN0aW9uU3RhcnQoKSk7Ci0gICAgY2FzZSBUZXh0QXJlYVNlbGVjdGlv
bkVuZDogICAgcmV0dXJuIE51bWJlcih0ZXh0YXJlYS5zZWxlY3Rpb25FbmQoKSk7Ci0gICAgY2Fz
ZSBUZXh0QXJlYVRhYkluZGV4OiAgICAgICAgcmV0dXJuIE51bWJlcih0ZXh0YXJlYS50YWJJbmRl
eCgpKTsKLSAgICBjYXNlIFRleHRBcmVhVHlwZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRl
eHRhcmVhLnR5cGUoKSk7Ci0gICAgY2FzZSBUZXh0QXJlYVZhbHVlOiAgICAgICAgICAgcmV0dXJu
IFN0cmluZyh0ZXh0YXJlYS52YWx1ZSgpKTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisK
K1ZhbHVlIEhUTUxFbGVtZW50Ojpib2R5R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2Vu
KSBjb25zdAoreworICAgIEhUTUxCb2R5RWxlbWVudEltcGwmIGJvZHkgPSAqc3RhdGljX2Nhc3Q8
SFRNTEJvZHlFbGVtZW50SW1wbCo+KGltcGwoKSk7CisJc3dpdGNoICh0b2tlbikgeworICAgICAg
ICBjYXNlIEJvZHlBTGluazogICAgICAgICAgIHJldHVybiBTdHJpbmcoYm9keS5hTGluaygpKTsK
KyAgICAgICAgY2FzZSBCb2R5QmFja2dyb3VuZDogICAgICByZXR1cm4gU3RyaW5nKGJvZHkuYmFj
a2dyb3VuZCgpKTsKKyAgICAgICAgY2FzZSBCb2R5QmdDb2xvcjogICAgICAgICByZXR1cm4gU3Ry
aW5nKGJvZHkuYmdDb2xvcigpKTsKKyAgICAgICAgY2FzZSBCb2R5TGluazogICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKGJvZHkubGluaygpKTsKKyAgICAgICAgY2FzZSBCb2R5VGV4dDogICAgICAg
ICAgICByZXR1cm4gU3RyaW5nKGJvZHkudGV4dCgpKTsKKyAgICAgICAgY2FzZSBCb2R5Vkxpbms6
ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGJvZHkudkxpbmsoKSk7CisgICAgICAgIGRlZmF1bHQ6
IHsKKyAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgZG9jdW1lbnQncyBsYXlvdXQgYmVmb3JlIHdl
IGNvbXB1dGUgdGhlc2UgYXR0cmlidXRlcy4KKyAgICAgICAgICAgIERvY3VtZW50SW1wbCAqZG9j
ID0gYm9keS5nZXREb2N1bWVudCgpOworICAgICAgICAgICAgaWYgKGRvYykKKyAgICAgICAgICAg
ICAgICBkb2MtPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOworICAgICAg
ICAgICAgS0hUTUxWaWV3ICp2aWV3ID0gZG9jID8gZG9jLT52aWV3KCkgOiAwOworICAgICAgICAg
ICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICAgICAgICAgIGNhc2UgQm9keVNjcm9sbExlZnQ6
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOdW1iZXIodmlldyA/IHZpZXctPmNvbnRlbnRz
WCgpIDogMCk7CisgICAgICAgICAgICAgICAgY2FzZSBCb2R5U2Nyb2xsVG9wOgorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gTnVtYmVyKHZpZXcgPyB2aWV3LT5jb250ZW50c1koKSA6IDApOwor
ICAgICAgICAgICAgICAgIGNhc2UgQm9keVNjcm9sbEhlaWdodDoKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIE51bWJlcih2aWV3ID8gdmlldy0+Y29udGVudHNIZWlnaHQoKSA6IDApOworICAg
ICAgICAgICAgICAgIGNhc2UgQm9keVNjcm9sbFdpZHRoOgorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gTnVtYmVyKHZpZXcgPyB2aWV3LT5jb250ZW50c1dpZHRoKCkgOiAwKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQogICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9CVVRUT046
IHsKLSAgICBIVE1MQnV0dG9uRWxlbWVudEltcGwgJmJ1dHRvbiA9IHN0YXRpY19jYXN0PEhUTUxC
dXR0b25FbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAg
Y2FzZSBCdXR0b25Gb3JtOiAgICAgICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsYnV0dG9u
LmZvcm0oKSk7IC8vIHR5cGUgSFRNTEZvcm1FbGVtZW50Ci0gICAgY2FzZSBCdXR0b25BY2Nlc3NL
ZXk6ICAgICAgIHJldHVybiBTdHJpbmcoYnV0dG9uLmFjY2Vzc0tleSgpKTsKLSAgICBjYXNlIEJ1
dHRvbkRpc2FibGVkOiAgICAgICAgcmV0dXJuIEJvb2xlYW4oYnV0dG9uLmRpc2FibGVkKCkpOwot
ICAgIGNhc2UgQnV0dG9uTmFtZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGJ1dHRvbi5uYW1l
KCkpOwotICAgIGNhc2UgQnV0dG9uVGFiSW5kZXg6ICAgICAgICByZXR1cm4gTnVtYmVyKGJ1dHRv
bi50YWJJbmRleCgpKTsKLSAgICBjYXNlIEJ1dHRvblR5cGU6ICAgICAgICAgICAgcmV0dXJuIFN0
cmluZyhidXR0b24udHlwZSgpKTsKLSAgICBjYXNlIEJ1dHRvblZhbHVlOiAgICAgICAgICAgcmV0
dXJuIFN0cmluZyhidXR0b24udmFsdWUoKSk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQor
CitWYWx1ZSBIVE1MRWxlbWVudDo6Zm9ybUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tl
bikgY29uc3QKK3sKKyAgICBIVE1MRm9ybUVsZW1lbnRJbXBsJiBmb3JtID0gKnN0YXRpY19jYXN0
PEhUTUxGb3JtRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAg
ICAgICAgY2FzZSBGb3JtRWxlbWVudHM6ICAgICAgICByZXR1cm4gZ2V0SFRNTENvbGxlY3Rpb24o
ZXhlYywgZm9ybS5lbGVtZW50cygpLmdldCgpKTsKKyAgICAgICAgY2FzZSBGb3JtTGVuZ3RoOiAg
ICAgICAgICByZXR1cm4gTnVtYmVyKGZvcm0ubGVuZ3RoKCkpOworICAgICAgICBjYXNlIEZvcm1O
YW1lOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoZm9ybS5uYW1lKCkpOworICAgICAgICBjYXNl
IEZvcm1BY2NlcHRDaGFyc2V0OiAgIHJldHVybiBTdHJpbmcoZm9ybS5hY2NlcHRDaGFyc2V0KCkp
OworICAgICAgICBjYXNlIEZvcm1BY3Rpb246ICAgICAgICAgIHJldHVybiBTdHJpbmcoZm9ybS5h
Y3Rpb24oKSk7CisgICAgICAgIGNhc2UgRm9ybUVuY1R5cGU6ICAgICAgICAgcmV0dXJuIFN0cmlu
Zyhmb3JtLmVuY3R5cGUoKSk7CisgICAgICAgIGNhc2UgRm9ybU1ldGhvZDogICAgICAgICAgcmV0
dXJuIFN0cmluZyhmb3JtLm1ldGhvZCgpKTsKKyAgICAgICAgY2FzZSBGb3JtVGFyZ2V0OiAgICAg
ICAgICByZXR1cm4gU3RyaW5nKGZvcm0udGFyZ2V0KCkpOwogICAgIH0KLSAgfQotICBicmVhazsK
LSAgY2FzZSBJRF9MQUJFTDogewotICAgIEhUTUxMYWJlbEVsZW1lbnRJbXBsICZsYWJlbCA9IHN0
YXRpY19jYXN0PEhUTUxMYWJlbEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgIHN3aXRjaCAo
dG9rZW4pIHsKLSAgICBjYXNlIExhYmVsRm9ybTogICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9k
ZShleGVjLGxhYmVsLmZvcm0oKSk7IC8vIHR5cGUgSFRNTEZvcm1FbGVtZW50Ci0gICAgY2FzZSBM
YWJlbEFjY2Vzc0tleTogICAgICAgcmV0dXJuIFN0cmluZyhsYWJlbC5hY2Nlc3NLZXkoKSk7Ci0g
ICAgY2FzZSBMYWJlbEh0bWxGb3I6ICAgICAgICAgcmV0dXJuIFN0cmluZyhsYWJlbC5odG1sRm9y
KCkpOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OnNl
bGVjdEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1M
U2VsZWN0RWxlbWVudEltcGwmIHNlbGVjdCA9ICpzdGF0aWNfY2FzdDxIVE1MU2VsZWN0RWxlbWVu
dEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBTZWxl
Y3RUeXBlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoc2VsZWN0LnR5cGUoKSk7CisgICAgICAg
IGNhc2UgU2VsZWN0U2VsZWN0ZWRJbmRleDogICByZXR1cm4gTnVtYmVyKHNlbGVjdC5zZWxlY3Rl
ZEluZGV4KCkpOworICAgICAgICBjYXNlIFNlbGVjdFZhbHVlOiAgICAgICAgICAgcmV0dXJuIFN0
cmluZyhzZWxlY3QudmFsdWUoKSk7CisgICAgICAgIGNhc2UgU2VsZWN0TGVuZ3RoOiAgICAgICAg
ICByZXR1cm4gTnVtYmVyKHNlbGVjdC5sZW5ndGgoKSk7CisgICAgICAgIGNhc2UgU2VsZWN0Rm9y
bTogICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLCBzZWxlY3QuZm9ybSgpKTsgLy8g
dHlwZSBIVE1MRm9ybUVsZW1lbnQKKyAgICAgICAgY2FzZSBTZWxlY3RPcHRpb25zOiAgICAgICAg
IHJldHVybiBnZXRTZWxlY3RIVE1MQ29sbGVjdGlvbihleGVjLCBzZWxlY3Qub3B0aW9uc0hUTUxD
b2xsZWN0aW9uKCkuZ2V0KCksICZzZWxlY3QpOyAvLyB0eXBlIEhUTUxDb2xsZWN0aW9uCisgICAg
ICAgIGNhc2UgU2VsZWN0RGlzYWJsZWQ6ICAgICAgICByZXR1cm4gQm9vbGVhbihzZWxlY3QuZGlz
YWJsZWQoKSk7CisgICAgICAgIGNhc2UgU2VsZWN0TXVsdGlwbGU6ICAgICAgICByZXR1cm4gQm9v
bGVhbihzZWxlY3QubXVsdGlwbGUoKSk7CisgICAgICAgIGNhc2UgU2VsZWN0TmFtZTogICAgICAg
ICAgICByZXR1cm4gU3RyaW5nKHNlbGVjdC5uYW1lKCkpOworICAgICAgICBjYXNlIFNlbGVjdFNp
emU6ICAgICAgICAgICAgcmV0dXJuIE51bWJlcihzZWxlY3Quc2l6ZSgpKTsKKyAgICAgICAgY2Fz
ZSBTZWxlY3RUYWJJbmRleDogICAgICAgIHJldHVybiBOdW1iZXIoc2VsZWN0LnRhYkluZGV4KCkp
OwogICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9GSUVMRFNFVDogewotICAgIEhUTUxG
aWVsZFNldEVsZW1lbnRJbXBsICZmaWVsZFNldCA9IHN0YXRpY19jYXN0PEhUTUxGaWVsZFNldEVs
ZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFs
dWUgSFRNTEVsZW1lbnQ6Om9wdEdyb3VwR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2Vu
KSBjb25zdAoreworICAgIEhUTUxPcHRHcm91cEVsZW1lbnRJbXBsJiBvcHRncm91cCA9ICpzdGF0
aWNfY2FzdDxIVE1MT3B0R3JvdXBFbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0
b2tlbikgewotICAgIGNhc2UgRmllbGRTZXRGb3JtOiAgICAgICAgICAgIHJldHVybiBnZXRET01O
b2RlKGV4ZWMsZmllbGRTZXQuZm9ybSgpKTsgLy8gdHlwZSBIVE1MRm9ybUVsZW1lbnQKKyAgICAg
ICAgY2FzZSBPcHRHcm91cERpc2FibGVkOiAgICAgICAgcmV0dXJuIEJvb2xlYW4ob3B0Z3JvdXAu
ZGlzYWJsZWQoKSk7CisgICAgICAgIGNhc2UgT3B0R3JvdXBMYWJlbDogICAgICAgICAgIHJldHVy
biBTdHJpbmcob3B0Z3JvdXAubGFiZWwoKSk7CiAgICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNl
IElEX0xFR0VORDogewotICAgIEhUTUxMZWdlbmRFbGVtZW50SW1wbCAmbGVnZW5kID0gc3RhdGlj
X2Nhc3Q8SFRNTExlZ2VuZEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgIHN3aXRjaCAodG9r
ZW4pIHsKLSAgICBjYXNlIExlZ2VuZEZvcm06ICAgICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUo
ZXhlYyxsZWdlbmQuZm9ybSgpKTsgLy8gdHlwZSBIVE1MRm9ybUVsZW1lbnQKLSAgICBjYXNlIExl
Z2VuZEFjY2Vzc0tleTogICAgICAgcmV0dXJuIFN0cmluZyhsZWdlbmQuYWNjZXNzS2V5KCkpOwot
ICAgIGNhc2UgTGVnZW5kQWxpZ246ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGxlZ2VuZC5hbGln
bigpKTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50Ojpv
cHRpb25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRN
TE9wdGlvbkVsZW1lbnRJbXBsJiBvcHRpb24gPSAqc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1l
bnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgT3B0
aW9uRm9ybTogICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLG9wdGlvbi5mb3JtKCkp
OyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVudAorICAgICAgICBjYXNlIE9wdGlvbkRlZmF1bHRTZWxl
Y3RlZDogcmV0dXJuIEJvb2xlYW4ob3B0aW9uLmRlZmF1bHRTZWxlY3RlZCgpKTsKKyAgICAgICAg
Y2FzZSBPcHRpb25UZXh0OiAgICAgICAgICAgIHJldHVybiBTdHJpbmcob3B0aW9uLnRleHQoKSk7
CisgICAgICAgIGNhc2UgT3B0aW9uSW5kZXg6ICAgICAgICAgICByZXR1cm4gTnVtYmVyKG9wdGlv
bi5pbmRleCgpKTsKKyAgICAgICAgY2FzZSBPcHRpb25EaXNhYmxlZDogICAgICAgIHJldHVybiBC
b29sZWFuKG9wdGlvbi5kaXNhYmxlZCgpKTsKKyAgICAgICAgY2FzZSBPcHRpb25MYWJlbDogICAg
ICAgICAgIHJldHVybiBTdHJpbmcob3B0aW9uLmxhYmVsKCkpOworICAgICAgICBjYXNlIE9wdGlv
blNlbGVjdGVkOiAgICAgICAgcmV0dXJuIEJvb2xlYW4ob3B0aW9uLnNlbGVjdGVkKCkpOworICAg
ICAgICBjYXNlIE9wdGlvblZhbHVlOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhvcHRpb24udmFs
dWUoKSk7CiAgICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX1VMOiB7Ci0gICAgSFRNTFVM
aXN0RWxlbWVudEltcGwgJnVMaXN0ID0gc3RhdGljX2Nhc3Q8SFRNTFVMaXN0RWxlbWVudEltcGwg
Jj4oZWxlbWVudCk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitzdGF0aWMgVmFsdWUg
Z2V0SW5wdXRTZWxlY3Rpb25TdGFydChIVE1MSW5wdXRFbGVtZW50SW1wbCAmaW5wdXQpCit7Cisg
ICAgaWYgKGlucHV0LmNhbkhhdmVTZWxlY3Rpb24oKSkKKyAgICAgICAgcmV0dXJuIE51bWJlcihp
bnB1dC5zZWxlY3Rpb25TdGFydCgpKTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK3N0
YXRpYyBWYWx1ZSBnZXRJbnB1dFNlbGVjdGlvbkVuZChIVE1MSW5wdXRFbGVtZW50SW1wbCAmaW5w
dXQpCit7CisgICAgaWYgKGlucHV0LmNhbkhhdmVTZWxlY3Rpb24oKSkKKyAgICAgICAgcmV0dXJu
IE51bWJlcihpbnB1dC5zZWxlY3Rpb25FbmQoKSk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwor
fQorCitWYWx1ZSBIVE1MRWxlbWVudDo6aW5wdXRHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQg
dG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTElucHV0RWxlbWVudEltcGwmIGlucHV0ID0gKnN0YXRp
Y19jYXN0PEhUTUxJbnB1dEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2Vu
KSB7Ci0gICAgY2FzZSBVTGlzdENvbXBhY3Q6ICAgICAgICAgcmV0dXJuIEJvb2xlYW4odUxpc3Qu
Y29tcGFjdCgpKTsKLSAgICBjYXNlIFVMaXN0VHlwZTogICAgICAgICAgICByZXR1cm4gU3RyaW5n
KHVMaXN0LnR5cGUoKSk7CisgICAgICAgIGNhc2UgSW5wdXREZWZhdWx0VmFsdWU6ICAgIHJldHVy
biBTdHJpbmcoaW5wdXQuZGVmYXVsdFZhbHVlKCkpOworICAgICAgICBjYXNlIElucHV0RGVmYXVs
dENoZWNrZWQ6ICByZXR1cm4gQm9vbGVhbihpbnB1dC5kZWZhdWx0Q2hlY2tlZCgpKTsKKyAgICAg
ICAgY2FzZSBJbnB1dEZvcm06ICAgICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyxpbnB1
dC5mb3JtKCkpOyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVudAorICAgICAgICBjYXNlIElucHV0QWNj
ZXB0OiAgICAgICAgICByZXR1cm4gU3RyaW5nKGlucHV0LmFjY2VwdCgpKTsKKyAgICAgICAgY2Fz
ZSBJbnB1dEFjY2Vzc0tleTogICAgICAgcmV0dXJuIFN0cmluZyhpbnB1dC5hY2Nlc3NLZXkoKSk7
CisgICAgICAgIGNhc2UgSW5wdXRBbGlnbjogICAgICAgICAgIHJldHVybiBTdHJpbmcoaW5wdXQu
YWxpZ24oKSk7CisgICAgICAgIGNhc2UgSW5wdXRBbHQ6ICAgICAgICAgICAgIHJldHVybiBTdHJp
bmcoaW5wdXQuYWx0KCkpOworICAgICAgICBjYXNlIElucHV0Q2hlY2tlZDogICAgICAgICByZXR1
cm4gQm9vbGVhbihpbnB1dC5jaGVja2VkKCkpOworICAgICAgICBjYXNlIElucHV0RGlzYWJsZWQ6
ICAgICAgICByZXR1cm4gQm9vbGVhbihpbnB1dC5kaXNhYmxlZCgpKTsKKyAgICAgICAgY2FzZSBJ
bnB1dE1heExlbmd0aDogICAgICAgcmV0dXJuIE51bWJlcihpbnB1dC5tYXhMZW5ndGgoKSk7Cisg
ICAgICAgIGNhc2UgSW5wdXROYW1lOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoaW5wdXQubmFt
ZSgpKTsKKyAgICAgICAgY2FzZSBJbnB1dFJlYWRPbmx5OiAgICAgICAgcmV0dXJuIEJvb2xlYW4o
aW5wdXQucmVhZE9ubHkoKSk7CisgICAgICAgIGNhc2UgSW5wdXRTZWxlY3Rpb25TdGFydDogIHJl
dHVybiBnZXRJbnB1dFNlbGVjdGlvblN0YXJ0KGlucHV0KTsKKyAgICAgICAgY2FzZSBJbnB1dFNl
bGVjdGlvbkVuZDogICAgcmV0dXJuIGdldElucHV0U2VsZWN0aW9uRW5kKGlucHV0KTsKKyAgICAg
ICAgY2FzZSBJbnB1dFNpemU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpbnB1dC5zaXplRE9N
KCkpOworICAgICAgICBjYXNlIElucHV0U3JjOiAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGlu
cHV0LnNyYygpKTsKKyAgICAgICAgY2FzZSBJbnB1dFRhYkluZGV4OiAgICAgICAgcmV0dXJuIE51
bWJlcihpbnB1dC50YWJJbmRleCgpKTsKKyAgICAgICAgY2FzZSBJbnB1dFR5cGU6ICAgICAgICAg
ICAgcmV0dXJuIFN0cmluZyhpbnB1dC50eXBlKCkpOworICAgICAgICBjYXNlIElucHV0VXNlTWFw
OiAgICAgICAgICByZXR1cm4gU3RyaW5nKGlucHV0LnVzZU1hcCgpKTsKKyAgICAgICAgY2FzZSBJ
bnB1dFZhbHVlOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpbnB1dC52YWx1ZSgpKTsKICAgICB9
Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfT0w6IHsKLSAgICBIVE1MT0xpc3RFbGVtZW50SW1w
bCAmb0xpc3QgPSBzdGF0aWNfY2FzdDxIVE1MT0xpc3RFbGVtZW50SW1wbCAmPihlbGVtZW50KTsK
LSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBPTGlzdENvbXBhY3Q6ICAgICAgICAgcmV0
dXJuIEJvb2xlYW4ob0xpc3QuY29tcGFjdCgpKTsKLSAgICBjYXNlIE9MaXN0U3RhcnQ6ICAgICAg
ICAgICByZXR1cm4gTnVtYmVyKG9MaXN0LnN0YXJ0KCkpOwotICAgIGNhc2UgT0xpc3RUeXBlOiAg
ICAgICAgICAgIHJldHVybiBTdHJpbmcob0xpc3QudHlwZSgpKTsKKyAgICByZXR1cm4gVW5kZWZp
bmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50Ojp0ZXh0QXJlYUdldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MVGV4dEFyZWFFbGVtZW50SW1wbCYg
dGV4dGFyZWEgPSAqc3RhdGljX2Nhc3Q8SFRNTFRleHRBcmVhRWxlbWVudEltcGwqPihpbXBsKCkp
OworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBUZXh0QXJlYURlZmF1bHRWYWx1
ZTogICAgcmV0dXJuIFN0cmluZyh0ZXh0YXJlYS5kZWZhdWx0VmFsdWUoKSk7CisgICAgICAgIGNh
c2UgVGV4dEFyZWFGb3JtOiAgICAgICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsdGV4dGFy
ZWEuZm9ybSgpKTsgLy8gdHlwZSBIVE1MRm9ybUVsZW1lbnQKKyAgICAgICAgY2FzZSBUZXh0QXJl
YUFjY2Vzc0tleTogICAgICAgcmV0dXJuIFN0cmluZyh0ZXh0YXJlYS5hY2Nlc3NLZXkoKSk7Cisg
ICAgICAgIGNhc2UgVGV4dEFyZWFDb2xzOiAgICAgICAgICAgIHJldHVybiBOdW1iZXIodGV4dGFy
ZWEuY29scygpKTsKKyAgICAgICAgY2FzZSBUZXh0QXJlYURpc2FibGVkOiAgICAgICAgcmV0dXJu
IEJvb2xlYW4odGV4dGFyZWEuZGlzYWJsZWQoKSk7CisgICAgICAgIGNhc2UgVGV4dEFyZWFOYW1l
OiAgICAgICAgICAgIHJldHVybiBTdHJpbmcodGV4dGFyZWEubmFtZSgpKTsKKyAgICAgICAgY2Fz
ZSBUZXh0QXJlYVJlYWRPbmx5OiAgICAgICAgcmV0dXJuIEJvb2xlYW4odGV4dGFyZWEucmVhZE9u
bHkoKSk7CisgICAgICAgIGNhc2UgVGV4dEFyZWFSb3dzOiAgICAgICAgICAgIHJldHVybiBOdW1i
ZXIodGV4dGFyZWEucm93cygpKTsKKyAgICAgICAgY2FzZSBUZXh0QXJlYVNlbGVjdGlvblN0YXJ0
OiAgcmV0dXJuIE51bWJlcih0ZXh0YXJlYS5zZWxlY3Rpb25TdGFydCgpKTsKKyAgICAgICAgY2Fz
ZSBUZXh0QXJlYVNlbGVjdGlvbkVuZDogICAgcmV0dXJuIE51bWJlcih0ZXh0YXJlYS5zZWxlY3Rp
b25FbmQoKSk7CisgICAgICAgIGNhc2UgVGV4dEFyZWFUYWJJbmRleDogICAgICAgIHJldHVybiBO
dW1iZXIodGV4dGFyZWEudGFiSW5kZXgoKSk7CisgICAgICAgIGNhc2UgVGV4dEFyZWFUeXBlOiAg
ICAgICAgICAgIHJldHVybiBTdHJpbmcodGV4dGFyZWEudHlwZSgpKTsKKyAgICAgICAgY2FzZSBU
ZXh0QXJlYVZhbHVlOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0ZXh0YXJlYS52YWx1ZSgpKTsK
ICAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfREw6IHsKLSAgICBIVE1MRExpc3RFbGVt
ZW50SW1wbCAmZExpc3QgPSBzdGF0aWNfY2FzdDxIVE1MRExpc3RFbGVtZW50SW1wbCAmPihlbGVt
ZW50KTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50Ojpi
dXR0b25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRN
TEJ1dHRvbkVsZW1lbnRJbXBsJiBidXR0b24gPSAqc3RhdGljX2Nhc3Q8SFRNTEJ1dHRvbkVsZW1l
bnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBETGlzdENv
bXBhY3Q6ICAgICAgICAgcmV0dXJuIEJvb2xlYW4oZExpc3QuY29tcGFjdCgpKTsKKyAgICAgICAg
Y2FzZSBCdXR0b25Gb3JtOiAgICAgICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsYnV0dG9u
LmZvcm0oKSk7IC8vIHR5cGUgSFRNTEZvcm1FbGVtZW50CisgICAgICAgIGNhc2UgQnV0dG9uQWNj
ZXNzS2V5OiAgICAgICByZXR1cm4gU3RyaW5nKGJ1dHRvbi5hY2Nlc3NLZXkoKSk7CisgICAgICAg
IGNhc2UgQnV0dG9uRGlzYWJsZWQ6ICAgICAgICByZXR1cm4gQm9vbGVhbihidXR0b24uZGlzYWJs
ZWQoKSk7CisgICAgICAgIGNhc2UgQnV0dG9uTmFtZTogICAgICAgICAgICByZXR1cm4gU3RyaW5n
KGJ1dHRvbi5uYW1lKCkpOworICAgICAgICBjYXNlIEJ1dHRvblRhYkluZGV4OiAgICAgICAgcmV0
dXJuIE51bWJlcihidXR0b24udGFiSW5kZXgoKSk7CisgICAgICAgIGNhc2UgQnV0dG9uVHlwZTog
ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGJ1dHRvbi50eXBlKCkpOworICAgICAgICBjYXNlIEJ1
dHRvblZhbHVlOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhidXR0b24udmFsdWUoKSk7CiAgICAg
fQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX0RJUjogewotICAgIEhUTUxEaXJlY3RvcnlFbGVt
ZW50SW1wbCAmZGlyZWN0b3J5ID0gc3RhdGljX2Nhc3Q8SFRNTERpcmVjdG9yeUVsZW1lbnRJbXBs
ICY+KGVsZW1lbnQpOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVs
ZW1lbnQ6OmxhYmVsR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAorewor
ICAgIEhUTUxMYWJlbEVsZW1lbnRJbXBsJiBsYWJlbCA9ICpzdGF0aWNfY2FzdDxIVE1MTGFiZWxF
bGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgRGly
ZWN0b3J5Q29tcGFjdDogICAgICAgICByZXR1cm4gQm9vbGVhbihkaXJlY3RvcnkuY29tcGFjdCgp
KTsKKyAgICAgICAgY2FzZSBMYWJlbEZvcm06ICAgICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUo
ZXhlYyxsYWJlbC5mb3JtKCkpOyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVudAorICAgICAgICBjYXNl
IExhYmVsQWNjZXNzS2V5OiAgICAgICByZXR1cm4gU3RyaW5nKGxhYmVsLmFjY2Vzc0tleSgpKTsK
KyAgICAgICAgY2FzZSBMYWJlbEh0bWxGb3I6ICAgICAgICAgcmV0dXJuIFN0cmluZyhsYWJlbC5o
dG1sRm9yKCkpOwogICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9NRU5VOiB7Ci0gICAg
SFRNTE1lbnVFbGVtZW50SW1wbCAmbWVudSA9IHN0YXRpY19jYXN0PEhUTUxNZW51RWxlbWVudElt
cGwgJj4oZWxlbWVudCk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1M
RWxlbWVudDo6ZmllbGRTZXRHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0
Cit7CisgICAgSFRNTEZpZWxkU2V0RWxlbWVudEltcGwmIGZpZWxkU2V0ID0gKnN0YXRpY19jYXN0
PEhUTUxGaWVsZFNldEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBpZiAodG9rZW4gPT0gRmll
bGRTZXRGb3JtKQorICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLGZpZWxkU2V0LmZvcm0o
KSk7IC8vIHR5cGUgSFRNTEZvcm1FbGVtZW50CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQor
CitWYWx1ZSBIVE1MRWxlbWVudDo6bGVnZW5kR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRv
a2VuKSBjb25zdAoreworICAgIEhUTUxMZWdlbmRFbGVtZW50SW1wbCYgbGVnZW5kID0gKnN0YXRp
Y19jYXN0PEhUTUxMZWdlbmRFbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tl
bikgewotICAgIGNhc2UgTWVudUNvbXBhY3Q6ICAgICAgICAgcmV0dXJuIEJvb2xlYW4obWVudS5j
b21wYWN0KCkpOworICAgICAgICBjYXNlIExlZ2VuZEZvcm06ICAgICAgICAgICAgcmV0dXJuIGdl
dERPTU5vZGUoZXhlYyxsZWdlbmQuZm9ybSgpKTsgLy8gdHlwZSBIVE1MRm9ybUVsZW1lbnQKKyAg
ICAgICAgY2FzZSBMZWdlbmRBY2Nlc3NLZXk6ICAgICAgIHJldHVybiBTdHJpbmcobGVnZW5kLmFj
Y2Vzc0tleSgpKTsKKyAgICAgICAgY2FzZSBMZWdlbmRBbGlnbjogICAgICAgICAgIHJldHVybiBT
dHJpbmcobGVnZW5kLmFsaWduKCkpOwogICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9M
STogewotICAgIEhUTUxMSUVsZW1lbnRJbXBsICZsaSA9IHN0YXRpY19jYXN0PEhUTUxMSUVsZW1l
bnRJbXBsICY+KGVsZW1lbnQpOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUg
SFRNTEVsZW1lbnQ6OnVMaXN0R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25z
dAoreworICAgIEhUTUxVTGlzdEVsZW1lbnRJbXBsJiB1TGlzdCA9ICpzdGF0aWNfY2FzdDxIVE1M
VUxpc3RFbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tlbikgewotICAgIGNh
c2UgTElUeXBlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcobGkudHlwZSgpKTsKLSAgICBjYXNl
IExJVmFsdWU6ICAgICAgICAgICByZXR1cm4gTnVtYmVyKGxpLnZhbHVlKCkpOworICAgICAgICBj
YXNlIFVMaXN0Q29tcGFjdDogICAgICAgICByZXR1cm4gQm9vbGVhbih1TGlzdC5jb21wYWN0KCkp
OworICAgICAgICBjYXNlIFVMaXN0VHlwZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKHVMaXN0
LnR5cGUoKSk7CiAgICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX0RJVjogewotICAgIEhU
TUxEaXZFbGVtZW50SW1wbCAmZGl2ID0gc3RhdGljX2Nhc3Q8SFRNTERpdkVsZW1lbnRJbXBsICY+
KGVsZW1lbnQpOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1l
bnQ6Om9MaXN0R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAg
IEhUTUxPTGlzdEVsZW1lbnRJbXBsJiBvTGlzdCA9ICpzdGF0aWNfY2FzdDxIVE1MT0xpc3RFbGVt
ZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgRGl2QWxp
Z246ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGRpdi5hbGlnbigpKTsKKyAgICAgICAgY2FzZSBP
TGlzdENvbXBhY3Q6ICAgICAgICAgcmV0dXJuIEJvb2xlYW4ob0xpc3QuY29tcGFjdCgpKTsKKyAg
ICAgICAgY2FzZSBPTGlzdFN0YXJ0OiAgICAgICAgICAgcmV0dXJuIE51bWJlcihvTGlzdC5zdGFy
dCgpKTsKKyAgICAgICAgY2FzZSBPTGlzdFR5cGU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhv
TGlzdC50eXBlKCkpOwogICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9QOiB7Ci0gICAg
SFRNTFBhcmFncmFwaEVsZW1lbnRJbXBsICZwYXJhZ3JhcGggPSBzdGF0aWNfY2FzdDxIVE1MUGFy
YWdyYXBoRWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwor
fQorCitWYWx1ZSBIVE1MRWxlbWVudDo6ZExpc3RHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQg
dG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTERMaXN0RWxlbWVudEltcGwmIGRMaXN0ID0gKnN0YXRp
Y19jYXN0PEhUTUxETGlzdEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBpZiAodG9rZW4gPT0g
RExpc3RDb21wYWN0KQorICAgICAgICByZXR1cm4gQm9vbGVhbihkTGlzdC5jb21wYWN0KCkpOwor
ICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OmRpckdldHRl
cihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MRGlyZWN0b3J5
RWxlbWVudEltcGwmIGRpciA9ICpzdGF0aWNfY2FzdDxIVE1MRGlyZWN0b3J5RWxlbWVudEltcGwq
PihpbXBsKCkpOworICAgIGlmICh0b2tlbiA9PSBEaXJlY3RvcnlDb21wYWN0KQorICAgICAgICBy
ZXR1cm4gQm9vbGVhbihkaXIuY29tcGFjdCgpKTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9
CisKK1ZhbHVlIEhUTUxFbGVtZW50OjptZW51R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRv
a2VuKSBjb25zdAoreworICAgIEhUTUxNZW51RWxlbWVudEltcGwmIG1lbnUgPSAqc3RhdGljX2Nh
c3Q8SFRNTE1lbnVFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IE1lbnVD
b21wYWN0KQorICAgICAgICByZXR1cm4gQm9vbGVhbihtZW51LmNvbXBhY3QoKSk7CisgICAgcmV0
dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6bGlHZXR0ZXIoRXhlY1N0
YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTExJRWxlbWVudEltcGwmIGxp
ID0gKnN0YXRpY19jYXN0PEhUTUxMSUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2gg
KHRva2VuKSB7Ci0gICAgY2FzZSBQYXJhZ3JhcGhBbGlnbjogICAgICAgICAgIHJldHVybiBTdHJp
bmcocGFyYWdyYXBoLmFsaWduKCkpOworICAgICAgICBjYXNlIExJVHlwZTogICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKGxpLnR5cGUoKSk7CisgICAgICAgIGNhc2UgTElWYWx1ZTogICAgICAgICAg
IHJldHVybiBOdW1iZXIobGkudmFsdWUoKSk7CiAgICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNl
IElEX0gxOgotICBjYXNlIElEX0gyOgotICBjYXNlIElEX0gzOgotICBjYXNlIElEX0g0OgotICBj
YXNlIElEX0g1OgotICBjYXNlIElEX0g2OiB7Ci0gICAgSFRNTEhlYWRpbmdFbGVtZW50SW1wbCAm
aGVhZGluZyA9IHN0YXRpY19jYXN0PEhUTUxIZWFkaW5nRWxlbWVudEltcGwgJj4oZWxlbWVudCk7
CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6ZGl2R2V0
dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxEaXZFbGVt
ZW50SW1wbCYgZGl2ID0gKnN0YXRpY19jYXN0PEhUTUxEaXZFbGVtZW50SW1wbCo+KGltcGwoKSk7
CisgICAgaWYgKHRva2VuID09IERpdkFsaWduKQorICAgICAgICByZXR1cm4gU3RyaW5nKGRpdi5h
bGlnbigpKTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50
OjpwYXJhZ3JhcGhHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7Cisg
ICAgSFRNTFBhcmFncmFwaEVsZW1lbnRJbXBsJiBwID0gKnN0YXRpY19jYXN0PEhUTUxQYXJhZ3Jh
cGhFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IFBhcmFncmFwaEFsaWdu
KQorICAgICAgICByZXR1cm4gU3RyaW5nKHAuYWxpZ24oKSk7CisgICAgcmV0dXJuIFVuZGVmaW5l
ZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6aGVhZGluZ0dldHRlcihFeGVjU3RhdGUqIGV4
ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MSGVhZGluZ0VsZW1lbnRJbXBsJiBoID0g
KnN0YXRpY19jYXN0PEhUTUxIZWFkaW5nRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIGlmICh0
b2tlbiA9PSBIZWFkaW5nQWxpZ24pCisgICAgICAgIHJldHVybiBTdHJpbmcoaC5hbGlnbigpKTsK
KyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50OjpibG9ja1F1
b3RlR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxC
bG9ja3F1b3RlRWxlbWVudEltcGwmIGJsb2NrUXVvdGUgPSAqc3RhdGljX2Nhc3Q8SFRNTEJsb2Nr
cXVvdGVFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IEJsb2NrUXVvdGVD
aXRlKQorICAgICAgICByZXR1cm4gU3RyaW5nKGJsb2NrUXVvdGUuY2l0ZSgpKTsKKyAgICByZXR1
cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50OjpxdW90ZUdldHRlcihFeGVj
U3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MUXVvdGVFbGVtZW50SW1w
bCYgcXVvdGUgPSAqc3RhdGljX2Nhc3Q8SFRNTFF1b3RlRWxlbWVudEltcGwqPihpbXBsKCkpOwor
ICAgIGlmICh0b2tlbiA9PSBRdW90ZUNpdGUpCisgICAgICAgIHJldHVybiBTdHJpbmcocXVvdGUu
Y2l0ZSgpKTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50
OjpwcmVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgLy8g
RklYTUU6IEFkZCBzdXBwb3J0IGZvciAnd3JhcCcgd2hlbiB3aGl0ZS1zcGFjZTogcHJlLXdyYXAg
aXMgaW1wbGVtZW50ZWQuCisgICAgSFRNTFByZUVsZW1lbnRJbXBsJiBwcmUgPSAqc3RhdGljX2Nh
c3Q8SFRNTFByZUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBpZiAodG9rZW4gPT0gUHJlV2lk
dGgpCisgICAgICAgIHJldHVybiBOdW1iZXIocHJlLndpZHRoKCkpOworICAgIHJldHVybiBVbmRl
ZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OmJyR2V0dGVyKEV4ZWNTdGF0ZSogZXhl
YywgaW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxCUkVsZW1lbnRJbXBsJiBiciA9ICpzdGF0
aWNfY2FzdDxIVE1MQlJFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IEJS
Q2xlYXIpCisgICAgICAgIHJldHVybiBTdHJpbmcoYnIuY2xlYXIoKSk7CisgICAgcmV0dXJuIFVu
ZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6YmFzZUZvbnRHZXR0ZXIoRXhlY1N0
YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTEJhc2VGb250RWxlbWVudElt
cGwmIGJhc2VGb250ID0gKnN0YXRpY19jYXN0PEhUTUxCYXNlRm9udEVsZW1lbnRJbXBsKj4oaW1w
bCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBIZWFkaW5nQWxpZ246ICAgICAg
ICAgICByZXR1cm4gU3RyaW5nKGhlYWRpbmcuYWxpZ24oKSk7CisgICAgICAgIGNhc2UgQmFzZUZv
bnRDb2xvcjogICAgICAgICAgIHJldHVybiBTdHJpbmcoYmFzZUZvbnQuY29sb3IoKSk7CisgICAg
ICAgIGNhc2UgQmFzZUZvbnRGYWNlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYmFzZUZvbnQu
ZmFjZSgpKTsKKyAgICAgICAgY2FzZSBCYXNlRm9udFNpemU6ICAgICAgICAgICAgcmV0dXJuIFN0
cmluZyhiYXNlRm9udC5zaXplKCkpOwogICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9C
TE9DS1FVT1RFOiB7Ci0gICAgSFRNTEJsb2NrcXVvdGVFbGVtZW50SW1wbCAmYmxvY2txdW90ZSA9
IHN0YXRpY19jYXN0PEhUTUxCbG9ja3F1b3RlRWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAg
cmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6Zm9udEdldHRlcihF
eGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MRm9udEVsZW1lbnRJ
bXBsJiBmb250ID0gKnN0YXRpY19jYXN0PEhUTUxGb250RWxlbWVudEltcGwqPihpbXBsKCkpOwog
ICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIEJsb2NrUXVvdGVDaXRlOiAgICAgICAgICAg
IHJldHVybiBTdHJpbmcoYmxvY2txdW90ZS5jaXRlKCkpOworICAgICAgICBjYXNlIEZvbnRDb2xv
cjogICAgICAgICAgIHJldHVybiBTdHJpbmcoZm9udC5jb2xvcigpKTsKKyAgICAgICAgY2FzZSBG
b250RmFjZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGZvbnQuZmFjZSgpKTsKKyAgICAgICAg
Y2FzZSBGb250U2l6ZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGZvbnQuc2l6ZSgpKTsKICAg
ICB9Ci0gIH0KLSAgY2FzZSBJRF9ROiB7Ci0gICAgSFRNTFF1b3RlRWxlbWVudEltcGwgJnF1b3Rl
ID0gc3RhdGljX2Nhc3Q8SFRNTFF1b3RlRWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgcmV0
dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6aHJHZXR0ZXIoRXhlY1N0
YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTEhSRWxlbWVudEltcGwmIGhy
ID0gKnN0YXRpY19jYXN0PEhUTUxIUkVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2gg
KHRva2VuKSB7Ci0gICAgY2FzZSBRdW90ZUNpdGU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhx
dW90ZS5jaXRlKCkpOworICAgICAgICBjYXNlIEhSQWxpZ246ICAgICAgICAgICByZXR1cm4gU3Ry
aW5nKGhyLmFsaWduKCkpOworICAgICAgICBjYXNlIEhSTm9TaGFkZTogICAgICAgICByZXR1cm4g
Qm9vbGVhbihoci5ub1NoYWRlKCkpOworICAgICAgICBjYXNlIEhSU2l6ZTogICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKGhyLnNpemUoKSk7CisgICAgICAgIGNhc2UgSFJXaWR0aDogICAgICAgICAg
IHJldHVybiBTdHJpbmcoaHIud2lkdGgoKSk7CiAgICAgfQotICB9Ci0gIGNhc2UgSURfUFJFOiB7
Ci0gICAgSFRNTFByZUVsZW1lbnRJbXBsICZwcmUgPSBzdGF0aWNfY2FzdDxIVE1MUHJlRWxlbWVu
dEltcGwgJj4oZWxlbWVudCk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBI
VE1MRWxlbWVudDo6bW9kR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAor
eworICAgIEhUTUxNb2RFbGVtZW50SW1wbCYgbW9kID0gKnN0YXRpY19jYXN0PEhUTUxNb2RFbGVt
ZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgUHJlV2lk
dGg6ICAgICAgICAgICByZXR1cm4gTnVtYmVyKHByZS53aWR0aCgpKTsKKyAgICAgICAgY2FzZSBN
b2RDaXRlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcobW9kLmNpdGUoKSk7CisgICAgICAgIGNh
c2UgTW9kRGF0ZVRpbWU6ICAgICAgICByZXR1cm4gU3RyaW5nKG1vZC5kYXRlVGltZSgpKTsKICAg
ICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfQlI6IHsKLSAgICBIVE1MQlJFbGVtZW50SW1w
bCAmYnIgPSBzdGF0aWNfY2FzdDxIVE1MQlJFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICBy
ZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50OjphbmNob3JHZXR0ZXIo
RXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTEFuY2hvckVsZW1l
bnRJbXBsJiBhbmNob3IgPSAqc3RhdGljX2Nhc3Q8SFRNTEFuY2hvckVsZW1lbnRJbXBsKj4oaW1w
bCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBCUkNsZWFyOiAgICAgICAgICAg
cmV0dXJuIFN0cmluZyhici5jbGVhcigpKTsKKyAgICAgICAgY2FzZSBBbmNob3JBY2Nlc3NLZXk6
ICAgICAgIHJldHVybiBTdHJpbmcoYW5jaG9yLmFjY2Vzc0tleSgpKTsKKyAgICAgICAgY2FzZSBB
bmNob3JDaGFyc2V0OiAgICAgICAgIHJldHVybiBTdHJpbmcoYW5jaG9yLmNoYXJzZXQoKSk7Cisg
ICAgICAgIGNhc2UgQW5jaG9yQ29vcmRzOiAgICAgICAgICByZXR1cm4gU3RyaW5nKGFuY2hvci5j
b29yZHMoKSk7CisgICAgICAgIGNhc2UgQW5jaG9ySHJlZjogICAgICAgICAgICByZXR1cm4gU3Ry
aW5nKGFuY2hvci5ocmVmKCkpOworICAgICAgICBjYXNlIEFuY2hvckhyZWZMYW5nOiAgICAgICAg
cmV0dXJuIFN0cmluZyhhbmNob3IuaHJlZmxhbmcoKSk7CisgICAgICAgIGNhc2UgQW5jaG9ySGFz
aDogICAgICAgICAgICByZXR1cm4gU3RyaW5nKCcjJytLVVJMKGFuY2hvci5ocmVmKCkuc3RyaW5n
KCkpLnJlZigpKTsKKyAgICAgICAgY2FzZSBBbmNob3JIb3N0OiAgICAgICAgICAgIHJldHVybiBT
dHJpbmcoS1VSTChhbmNob3IuaHJlZigpLnN0cmluZygpKS5ob3N0KCkpOworICAgICAgICBjYXNl
IEFuY2hvckhvc3RuYW1lOiB7CisgICAgICAgICAgICBLVVJMIHVybChhbmNob3IuaHJlZigpLnN0
cmluZygpKTsKKyAgICAgICAgICAgIGtkRGVidWcoNjA3MCkgPDwgImFuY2hvcjo6aG9zdG5hbWUg
dXNlczoiIDw8dXJsLnVybCgpPDxlbmRsOworICAgICAgICAgICAgaWYgKHVybC5wb3J0KCk9PTAp
CisgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh1cmwuaG9zdCgpKTsKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKHVybC5ob3N0KCkgKyAiOiIgKyBR
U3RyaW5nOjpudW1iZXIodXJsLnBvcnQoKSkpOworICAgICAgICB9CisgICAgICAgIGNhc2UgQW5j
aG9yUGF0aE5hbWU6ICAgICAgICByZXR1cm4gU3RyaW5nKEtVUkwoYW5jaG9yLmhyZWYoKS5zdHJp
bmcoKSkucGF0aCgpKTsKKyAgICAgICAgY2FzZSBBbmNob3JQb3J0OiAgICAgICAgICAgIHJldHVy
biBTdHJpbmcoUVN0cmluZzo6bnVtYmVyKEtVUkwoYW5jaG9yLmhyZWYoKS5zdHJpbmcoKSkucG9y
dCgpKSk7CisgICAgICAgIGNhc2UgQW5jaG9yUHJvdG9jb2w6ICAgICAgICByZXR1cm4gU3RyaW5n
KEtVUkwoYW5jaG9yLmhyZWYoKS5zdHJpbmcoKSkucHJvdG9jb2woKSsiOiIpOworICAgICAgICBj
YXNlIEFuY2hvclNlYXJjaDogICAgICAgICAgcmV0dXJuIFN0cmluZyhLVVJMKGFuY2hvci5ocmVm
KCkuc3RyaW5nKCkpLnF1ZXJ5KCkpOworICAgICAgICBjYXNlIEFuY2hvck5hbWU6ICAgICAgICAg
ICAgcmV0dXJuIFN0cmluZyhhbmNob3IubmFtZSgpKTsKKyAgICAgICAgY2FzZSBBbmNob3JSZWw6
ICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYW5jaG9yLnJlbCgpKTsKKyAgICAgICAgY2FzZSBB
bmNob3JSZXY6ICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYW5jaG9yLnJldigpKTsKKyAgICAg
ICAgY2FzZSBBbmNob3JTaGFwZTogICAgICAgICAgIHJldHVybiBTdHJpbmcoYW5jaG9yLnNoYXBl
KCkpOworICAgICAgICBjYXNlIEFuY2hvclRhYkluZGV4OiAgICAgICAgcmV0dXJuIE51bWJlcihh
bmNob3IudGFiSW5kZXgoKSk7CisgICAgICAgIGNhc2UgQW5jaG9yVGFyZ2V0OiAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKGFuY2hvci50YXJnZXQoKSk7CisgICAgICAgIGNhc2UgQW5jaG9yVHlwZTog
ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGFuY2hvci50eXBlKCkpOworICAgICAgICBjYXNlIEFu
Y2hvclRleHQ6CisgICAgICAgICAgICBpZiAoRG9jdW1lbnRJbXBsKiBkb2MgPSBhbmNob3IuZ2V0
RG9jdW1lbnQoKSkKKyAgICAgICAgICAgICAgICBkb2MtPnVwZGF0ZUxheW91dElnbm9yZVBlbmRp
bmdTdHlsZXNoZWV0cygpOworICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhhbmNob3IuaW5uZXJU
ZXh0KCkpOwogICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9CQVNFRk9OVDogewotICAg
IEhUTUxCYXNlRm9udEVsZW1lbnRJbXBsICZiYXNlRm9udCA9IHN0YXRpY19jYXN0PEhUTUxCYXNl
Rm9udEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBj
YXNlIEJhc2VGb250Q29sb3I6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGJhc2VGb250LmNvbG9y
KCkpOwotICAgIGNhc2UgQmFzZUZvbnRGYWNlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYmFz
ZUZvbnQuZmFjZSgpKTsKLSAgICBjYXNlIEJhc2VGb250U2l6ZTogICAgICAgICAgICByZXR1cm4g
U3RyaW5nKGJhc2VGb250LnNpemUoKSk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitW
YWx1ZSBIVE1MRWxlbWVudDo6aW1hZ2VHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4p
IGNvbnN0Cit7CisgICAgSFRNTEltYWdlRWxlbWVudEltcGwmIGltYWdlID0gKnN0YXRpY19jYXN0
PEhUTUxJbWFnZUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7Cisg
ICAgICAgIGNhc2UgSW1hZ2VOYW1lOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoaW1hZ2UubmFt
ZSgpKTsKKyAgICAgICAgY2FzZSBJbWFnZUFsaWduOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhp
bWFnZS5hbGlnbigpKTsKKyAgICAgICAgY2FzZSBJbWFnZUFsdDogICAgICAgICAgICAgcmV0dXJu
IFN0cmluZyhpbWFnZS5hbHQoKSk7CisgICAgICAgIGNhc2UgSW1hZ2VCb3JkZXI6ICAgICAgICAg
IHJldHVybiBOdW1iZXIoaW1hZ2UuYm9yZGVyKCkpOworICAgICAgICBjYXNlIEltYWdlSGVpZ2h0
OiAgICAgICAgICByZXR1cm4gTnVtYmVyKGltYWdlLmhlaWdodCh0cnVlKSk7CisgICAgICAgIGNh
c2UgSW1hZ2VIc3BhY2U6ICAgICAgICAgIHJldHVybiBOdW1iZXIoaW1hZ2UuaHNwYWNlKCkpOwor
ICAgICAgICBjYXNlIEltYWdlSXNNYXA6ICAgICAgICAgICByZXR1cm4gQm9vbGVhbihpbWFnZS5p
c01hcCgpKTsKKyAgICAgICAgY2FzZSBJbWFnZUxvbmdEZXNjOiAgICAgICAgcmV0dXJuIFN0cmlu
ZyhpbWFnZS5sb25nRGVzYygpKTsKKyAgICAgICAgY2FzZSBJbWFnZVNyYzogICAgICAgICAgICAg
cmV0dXJuIFN0cmluZyhpbWFnZS5zcmMoKSk7CisgICAgICAgIGNhc2UgSW1hZ2VVc2VNYXA6ICAg
ICAgICAgIHJldHVybiBTdHJpbmcoaW1hZ2UudXNlTWFwKCkpOworICAgICAgICBjYXNlIEltYWdl
VnNwYWNlOiAgICAgICAgICByZXR1cm4gTnVtYmVyKGltYWdlLnZzcGFjZSgpKTsKKyAgICAgICAg
Y2FzZSBJbWFnZVdpZHRoOiAgICAgICAgICAgcmV0dXJuIE51bWJlcihpbWFnZS53aWR0aCh0cnVl
KSk7CisgICAgICAgIGNhc2UgSW1hZ2VYOiAgICAgICAgICAgICAgIHJldHVybiBOdW1iZXIoaW1h
Z2UueCgpKTsKKyAgICAgICAgY2FzZSBJbWFnZVk6ICAgICAgICAgICAgICAgcmV0dXJuIE51bWJl
cihpbWFnZS55KCkpOwogICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9GT05UOiB7Ci0g
ICAgSFRNTEZvbnRFbGVtZW50SW1wbCAmZm9udCA9IHN0YXRpY19jYXN0PEhUTUxGb250RWxlbWVu
dEltcGwgJj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgRm9udENv
bG9yOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhmb250LmNvbG9yKCkpOwotICAgIGNhc2UgRm9u
dEZhY2U6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhmb250LmZhY2UoKSk7Ci0gICAgY2FzZSBG
b250U2l6ZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGZvbnQuc2l6ZSgpKTsKKyAgICByZXR1
cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50OjpvYmplY3RHZXR0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTE9iamVjdEVsZW1lbnRJ
bXBsJiBvYmplY3QgPSAqc3RhdGljX2Nhc3Q8SFRNTE9iamVjdEVsZW1lbnRJbXBsKj4oaW1wbCgp
KTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgT2JqZWN0Rm9ybTogICAgICAg
ICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLG9iamVjdC5mb3JtKCkpOyAvLyB0eXBlIEhUTUxG
b3JtRWxlbWVudAorICAgICAgICBjYXNlIE9iamVjdENvZGU6ICAgICAgICAgICAgcmV0dXJuIFN0
cmluZyhvYmplY3QuY29kZSgpKTsKKyAgICAgICAgY2FzZSBPYmplY3RBbGlnbjogICAgICAgICAg
IHJldHVybiBTdHJpbmcob2JqZWN0LmFsaWduKCkpOworICAgICAgICBjYXNlIE9iamVjdEFyY2hp
dmU6ICAgICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3QuYXJjaGl2ZSgpKTsKKyAgICAgICAgY2Fz
ZSBPYmplY3RCb3JkZXI6ICAgICAgICAgIHJldHVybiBTdHJpbmcob2JqZWN0LmJvcmRlcigpKTsK
KyAgICAgICAgY2FzZSBPYmplY3RDb2RlQmFzZTogICAgICAgIHJldHVybiBTdHJpbmcob2JqZWN0
LmNvZGVCYXNlKCkpOworICAgICAgICBjYXNlIE9iamVjdENvZGVUeXBlOiAgICAgICAgcmV0dXJu
IFN0cmluZyhvYmplY3QuY29kZVR5cGUoKSk7CisgICAgICAgIGNhc2UgT2JqZWN0Q29udGVudERv
Y3VtZW50OiByZXR1cm4gY2hlY2tOb2RlU2VjdXJpdHkoZXhlYyxvYmplY3QuY29udGVudERvY3Vt
ZW50KCkpID8gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0
RE9NTm9kZShleGVjLCBvYmplY3QuY29udGVudERvY3VtZW50KCkpIDogVW5kZWZpbmVkKCk7Cisg
ICAgICAgIGNhc2UgT2JqZWN0RGF0YTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKG9iamVjdC5k
YXRhKCkpOworICAgICAgICBjYXNlIE9iamVjdERlY2xhcmU6ICAgICAgICAgcmV0dXJuIEJvb2xl
YW4ob2JqZWN0LmRlY2xhcmUoKSk7CisgICAgICAgIGNhc2UgT2JqZWN0SGVpZ2h0OiAgICAgICAg
ICByZXR1cm4gU3RyaW5nKG9iamVjdC5oZWlnaHQoKSk7CisgICAgICAgIGNhc2UgT2JqZWN0SHNw
YWNlOiAgICAgICAgICByZXR1cm4gU3RyaW5nKG9iamVjdC5oc3BhY2UoKSk7CisgICAgICAgIGNh
c2UgT2JqZWN0TmFtZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKG9iamVjdC5uYW1lKCkpOwor
ICAgICAgICBjYXNlIE9iamVjdFN0YW5kYnk6ICAgICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3Qu
c3RhbmRieSgpKTsKKyAgICAgICAgY2FzZSBPYmplY3RUYWJJbmRleDogICAgICAgIHJldHVybiBO
dW1iZXIob2JqZWN0LnRhYkluZGV4KCkpOworICAgICAgICBjYXNlIE9iamVjdFR5cGU6ICAgICAg
ICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3QudHlwZSgpKTsKKyAgICAgICAgY2FzZSBPYmplY3RV
c2VNYXA6ICAgICAgICAgIHJldHVybiBTdHJpbmcob2JqZWN0LnVzZU1hcCgpKTsKKyAgICAgICAg
Y2FzZSBPYmplY3RWc3BhY2U6ICAgICAgICAgIHJldHVybiBTdHJpbmcob2JqZWN0LnZzcGFjZSgp
KTsKKyAgICAgICAgY2FzZSBPYmplY3RXaWR0aDogICAgICAgICAgIHJldHVybiBTdHJpbmcob2Jq
ZWN0LndpZHRoKCkpOwogICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9IUjogewotICAg
IEhUTUxIUkVsZW1lbnRJbXBsICZociA9IHN0YXRpY19jYXN0PEhUTUxIUkVsZW1lbnRJbXBsICY+
KGVsZW1lbnQpOwotICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIEhSQWxpZ246ICAgICAg
ICAgICByZXR1cm4gU3RyaW5nKGhyLmFsaWduKCkpOwotICAgIGNhc2UgSFJOb1NoYWRlOiAgICAg
ICAgIHJldHVybiBCb29sZWFuKGhyLm5vU2hhZGUoKSk7Ci0gICAgY2FzZSBIUlNpemU6ICAgICAg
ICAgICAgcmV0dXJuIFN0cmluZyhoci5zaXplKCkpOwotICAgIGNhc2UgSFJXaWR0aDogICAgICAg
ICAgIHJldHVybiBTdHJpbmcoaHIud2lkdGgoKSk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwor
fQorCitWYWx1ZSBIVE1MRWxlbWVudDo6cGFyYW1HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQg
dG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTFBhcmFtRWxlbWVudEltcGwmIHBhcmFtID0gKnN0YXRp
Y19jYXN0PEhUTUxQYXJhbUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2Vu
KSB7CisgICAgICAgIGNhc2UgUGFyYW1OYW1lOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcocGFy
YW0ubmFtZSgpKTsKKyAgICAgICAgY2FzZSBQYXJhbVR5cGU6ICAgICAgICAgICAgcmV0dXJuIFN0
cmluZyhwYXJhbS50eXBlKCkpOworICAgICAgICBjYXNlIFBhcmFtVmFsdWU6ICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKHBhcmFtLnZhbHVlKCkpOworICAgICAgICBjYXNlIFBhcmFtVmFsdWVUeXBl
OiAgICAgICByZXR1cm4gU3RyaW5nKHBhcmFtLnZhbHVlVHlwZSgpKTsKICAgICB9Ci0gIH0KLSAg
YnJlYWs7Ci0gIGNhc2UgSURfSU5TOgotICBjYXNlIElEX0RFTDogewotICAgIEhUTUxNb2RFbGVt
ZW50SW1wbCAmbW9kID0gc3RhdGljX2Nhc3Q8SFRNTE1vZEVsZW1lbnRJbXBsICY+KGVsZW1lbnQp
OworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OmFwcGxl
dEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MQXBw
bGV0RWxlbWVudEltcGwmIGFwcGxldCA9ICpzdGF0aWNfY2FzdDxIVE1MQXBwbGV0RWxlbWVudElt
cGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIE1vZENpdGU6ICAg
ICAgICAgICAgcmV0dXJuIFN0cmluZyhtb2QuY2l0ZSgpKTsKLSAgICBjYXNlIE1vZERhdGVUaW1l
OiAgICAgICAgcmV0dXJuIFN0cmluZyhtb2QuZGF0ZVRpbWUoKSk7CisgICAgICAgIGNhc2UgQXBw
bGV0QWxpZ246ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGFwcGxldC5hbGlnbigpKTsKKyAgICAg
ICAgY2FzZSBBcHBsZXRBbHQ6ICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYXBwbGV0LmFsdCgp
KTsKKyAgICAgICAgY2FzZSBBcHBsZXRBcmNoaXZlOiAgICAgICAgIHJldHVybiBTdHJpbmcoYXBw
bGV0LmFyY2hpdmUoKSk7CisgICAgICAgIGNhc2UgQXBwbGV0Q29kZTogICAgICAgICAgICByZXR1
cm4gU3RyaW5nKGFwcGxldC5jb2RlKCkpOworICAgICAgICBjYXNlIEFwcGxldENvZGVCYXNlOiAg
ICAgICAgcmV0dXJuIFN0cmluZyhhcHBsZXQuY29kZUJhc2UoKSk7CisgICAgICAgIGNhc2UgQXBw
bGV0SGVpZ2h0OiAgICAgICAgICByZXR1cm4gU3RyaW5nKGFwcGxldC5oZWlnaHQoKSk7CisgICAg
ICAgIGNhc2UgQXBwbGV0SHNwYWNlOiAgICAgICAgICByZXR1cm4gU3RyaW5nKGFwcGxldC5oc3Bh
Y2UoKSk7CisgICAgICAgIGNhc2UgQXBwbGV0TmFtZTogICAgICAgICAgICByZXR1cm4gU3RyaW5n
KGFwcGxldC5uYW1lKCkpOworICAgICAgICBjYXNlIEFwcGxldE9iamVjdDogICAgICAgICAgcmV0
dXJuIFN0cmluZyhhcHBsZXQub2JqZWN0KCkpOworICAgICAgICBjYXNlIEFwcGxldFZzcGFjZTog
ICAgICAgICAgcmV0dXJuIFN0cmluZyhhcHBsZXQudnNwYWNlKCkpOworICAgICAgICBjYXNlIEFw
cGxldFdpZHRoOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhhcHBsZXQud2lkdGgoKSk7CiAgICAg
fQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX0E6IHsKLSAgICBIVE1MQW5jaG9yRWxlbWVudElt
cGwgJmFuY2hvciA9IHN0YXRpY19jYXN0PEhUTUxBbmNob3JFbGVtZW50SW1wbCAmPihlbGVtZW50
KTsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBBbmNob3JBY2Nlc3NLZXk6ICAgICAg
IHJldHVybiBTdHJpbmcoYW5jaG9yLmFjY2Vzc0tleSgpKTsKLSAgICBjYXNlIEFuY2hvckNoYXJz
ZXQ6ICAgICAgICAgcmV0dXJuIFN0cmluZyhhbmNob3IuY2hhcnNldCgpKTsKLSAgICBjYXNlIEFu
Y2hvckNvb3JkczogICAgICAgICAgcmV0dXJuIFN0cmluZyhhbmNob3IuY29vcmRzKCkpOwotICAg
IGNhc2UgQW5jaG9ySHJlZjogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGFuY2hvci5ocmVmKCkp
OwotICAgIGNhc2UgQW5jaG9ySHJlZkxhbmc6ICAgICAgICByZXR1cm4gU3RyaW5nKGFuY2hvci5o
cmVmbGFuZygpKTsKLSAgICBjYXNlIEFuY2hvckhhc2g6ICAgICAgICAgICAgcmV0dXJuIFN0cmlu
ZygnIycrS1VSTChhbmNob3IuaHJlZigpLnN0cmluZygpKS5yZWYoKSk7Ci0gICAgY2FzZSBBbmNo
b3JIb3N0OiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoS1VSTChhbmNob3IuaHJlZigpLnN0cmlu
ZygpKS5ob3N0KCkpOwotICAgIGNhc2UgQW5jaG9ySG9zdG5hbWU6IHsKLSAgICAgIEtVUkwgdXJs
KGFuY2hvci5ocmVmKCkuc3RyaW5nKCkpOwotICAgICAga2REZWJ1Zyg2MDcwKSA8PCAiYW5jaG9y
Ojpob3N0bmFtZSB1c2VzOiIgPDx1cmwudXJsKCk8PGVuZGw7Ci0gICAgICBpZiAodXJsLnBvcnQo
KT09MCkKLSAgICAgICAgcmV0dXJuIFN0cmluZyh1cmwuaG9zdCgpKTsKLSAgICAgIGVsc2UKLSAg
ICAgICAgcmV0dXJuIFN0cmluZyh1cmwuaG9zdCgpICsgIjoiICsgUVN0cmluZzo6bnVtYmVyKHVy
bC5wb3J0KCkpKTsKLSAgICB9Ci0gICAgY2FzZSBBbmNob3JQYXRoTmFtZTogICAgICAgIHJldHVy
biBTdHJpbmcoS1VSTChhbmNob3IuaHJlZigpLnN0cmluZygpKS5wYXRoKCkpOwotICAgIGNhc2Ug
QW5jaG9yUG9ydDogICAgICAgICAgICByZXR1cm4gU3RyaW5nKFFTdHJpbmc6Om51bWJlcihLVVJM
KGFuY2hvci5ocmVmKCkuc3RyaW5nKCkpLnBvcnQoKSkpOwotICAgIGNhc2UgQW5jaG9yUHJvdG9j
b2w6ICAgICAgICByZXR1cm4gU3RyaW5nKEtVUkwoYW5jaG9yLmhyZWYoKS5zdHJpbmcoKSkucHJv
dG9jb2woKSsiOiIpOwotICAgIGNhc2UgQW5jaG9yU2VhcmNoOiAgICAgICAgICByZXR1cm4gU3Ry
aW5nKEtVUkwoYW5jaG9yLmhyZWYoKS5zdHJpbmcoKSkucXVlcnkoKSk7Ci0gICAgY2FzZSBBbmNo
b3JOYW1lOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYW5jaG9yLm5hbWUoKSk7Ci0gICAgY2Fz
ZSBBbmNob3JSZWw6ICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYW5jaG9yLnJlbCgpKTsKLSAg
ICBjYXNlIEFuY2hvclJldjogICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhhbmNob3IucmV2KCkp
OwotICAgIGNhc2UgQW5jaG9yU2hhcGU6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGFuY2hvci5z
aGFwZSgpKTsKLSAgICBjYXNlIEFuY2hvclRhYkluZGV4OiAgICAgICAgcmV0dXJuIE51bWJlcihh
bmNob3IudGFiSW5kZXgoKSk7Ci0gICAgY2FzZSBBbmNob3JUYXJnZXQ6ICAgICAgICAgIHJldHVy
biBTdHJpbmcoYW5jaG9yLnRhcmdldCgpKTsKLSAgICBjYXNlIEFuY2hvclR5cGU6ICAgICAgICAg
ICAgcmV0dXJuIFN0cmluZyhhbmNob3IudHlwZSgpKTsKLSAgICBjYXNlIEFuY2hvclRleHQ6Ci0g
ICAgICBpZiAoRG9jdW1lbnRJbXBsKiBkb2MgPSBhbmNob3IuZ2V0RG9jdW1lbnQoKSkKLSAgICAg
ICAgZG9jLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKLSAgICAgIHJl
dHVybiBTdHJpbmcoYW5jaG9yLmlubmVyVGV4dCgpKTsKLSAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0g
IGNhc2UgSURfSU1HOiB7Ci0gICAgSFRNTEltYWdlRWxlbWVudEltcGwgJmltYWdlID0gc3RhdGlj
X2Nhc3Q8SFRNTEltYWdlRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tl
bikgewotICAgIGNhc2UgSW1hZ2VOYW1lOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoaW1hZ2Uu
bmFtZSgpKTsKLSAgICBjYXNlIEltYWdlQWxpZ246ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGlt
YWdlLmFsaWduKCkpOwotICAgIGNhc2UgSW1hZ2VBbHQ6ICAgICAgICAgICAgIHJldHVybiBTdHJp
bmcoaW1hZ2UuYWx0KCkpOwotICAgIGNhc2UgSW1hZ2VCb3JkZXI6ICAgICAgICAgIHJldHVybiBO
dW1iZXIoaW1hZ2UuYm9yZGVyKCkpOwotICAgIGNhc2UgSW1hZ2VIZWlnaHQ6ICAgICAgICAgIHJl
dHVybiBOdW1iZXIoaW1hZ2UuaGVpZ2h0KHRydWUpKTsKLSAgICBjYXNlIEltYWdlSHNwYWNlOiAg
ICAgICAgICByZXR1cm4gTnVtYmVyKGltYWdlLmhzcGFjZSgpKTsKLSAgICBjYXNlIEltYWdlSXNN
YXA6ICAgICAgICAgICByZXR1cm4gQm9vbGVhbihpbWFnZS5pc01hcCgpKTsKLSAgICBjYXNlIElt
YWdlTG9uZ0Rlc2M6ICAgICAgICByZXR1cm4gU3RyaW5nKGltYWdlLmxvbmdEZXNjKCkpOwotICAg
IGNhc2UgSW1hZ2VTcmM6ICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoaW1hZ2Uuc3JjKCkpOwot
ICAgIGNhc2UgSW1hZ2VVc2VNYXA6ICAgICAgICAgIHJldHVybiBTdHJpbmcoaW1hZ2UudXNlTWFw
KCkpOwotICAgIGNhc2UgSW1hZ2VWc3BhY2U6ICAgICAgICAgIHJldHVybiBOdW1iZXIoaW1hZ2Uu
dnNwYWNlKCkpOwotICAgIGNhc2UgSW1hZ2VXaWR0aDogICAgICAgICAgIHJldHVybiBOdW1iZXIo
aW1hZ2Uud2lkdGgodHJ1ZSkpOwotICAgIGNhc2UgSW1hZ2VYOiAgICAgICAgICAgICAgIHJldHVy
biBOdW1iZXIoaW1hZ2UueCgpKTsKLSAgICBjYXNlIEltYWdlWTogICAgICAgICAgICAgICByZXR1
cm4gTnVtYmVyKGltYWdlLnkoKSk7Ci0gICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX09C
SkVDVDogewotICAgIEhUTUxPYmplY3RFbGVtZW50SW1wbCAmb2JqZWN0ID0gc3RhdGljX2Nhc3Q8
SFRNTE9iamVjdEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgIHN3aXRjaCAodG9rZW4pIHsK
LSAgICBjYXNlIE9iamVjdEZvcm06ICAgICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyxv
YmplY3QuZm9ybSgpKTsgLy8gdHlwZSBIVE1MRm9ybUVsZW1lbnQKLSAgICBjYXNlIE9iamVjdENv
ZGU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3QuY29kZSgpKTsKLSAgICBjYXNlIE9i
amVjdEFsaWduOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3QuYWxpZ24oKSk7Ci0gICAg
Y2FzZSBPYmplY3RBcmNoaXZlOiAgICAgICAgIHJldHVybiBTdHJpbmcob2JqZWN0LmFyY2hpdmUo
KSk7Ci0gICAgY2FzZSBPYmplY3RCb3JkZXI6ICAgICAgICAgIHJldHVybiBTdHJpbmcob2JqZWN0
LmJvcmRlcigpKTsKLSAgICBjYXNlIE9iamVjdENvZGVCYXNlOiAgICAgICAgcmV0dXJuIFN0cmlu
ZyhvYmplY3QuY29kZUJhc2UoKSk7Ci0gICAgY2FzZSBPYmplY3RDb2RlVHlwZTogICAgICAgIHJl
dHVybiBTdHJpbmcob2JqZWN0LmNvZGVUeXBlKCkpOwotICAgIGNhc2UgT2JqZWN0Q29udGVudERv
Y3VtZW50OiByZXR1cm4gY2hlY2tOb2RlU2VjdXJpdHkoZXhlYyxvYmplY3QuY29udGVudERvY3Vt
ZW50KCkpID8gCi0JCQkJICAgICAgIGdldERPTU5vZGUoZXhlYywgb2JqZWN0LmNvbnRlbnREb2N1
bWVudCgpKSA6IFVuZGVmaW5lZCgpOwotICAgIGNhc2UgT2JqZWN0RGF0YTogICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKG9iamVjdC5kYXRhKCkpOwotICAgIGNhc2UgT2JqZWN0RGVjbGFyZTogICAg
ICAgICByZXR1cm4gQm9vbGVhbihvYmplY3QuZGVjbGFyZSgpKTsKLSAgICBjYXNlIE9iamVjdEhl
aWdodDogICAgICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3QuaGVpZ2h0KCkpOwotICAgIGNhc2Ug
T2JqZWN0SHNwYWNlOiAgICAgICAgICByZXR1cm4gU3RyaW5nKG9iamVjdC5oc3BhY2UoKSk7Ci0g
ICAgY2FzZSBPYmplY3ROYW1lOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcob2JqZWN0Lm5hbWUo
KSk7Ci0gICAgY2FzZSBPYmplY3RTdGFuZGJ5OiAgICAgICAgIHJldHVybiBTdHJpbmcob2JqZWN0
LnN0YW5kYnkoKSk7Ci0gICAgY2FzZSBPYmplY3RUYWJJbmRleDogICAgICAgIHJldHVybiBOdW1i
ZXIob2JqZWN0LnRhYkluZGV4KCkpOwotICAgIGNhc2UgT2JqZWN0VHlwZTogICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKG9iamVjdC50eXBlKCkpOwotICAgIGNhc2UgT2JqZWN0VXNlTWFwOiAgICAg
ICAgICByZXR1cm4gU3RyaW5nKG9iamVjdC51c2VNYXAoKSk7Ci0gICAgY2FzZSBPYmplY3RWc3Bh
Y2U6ICAgICAgICAgIHJldHVybiBTdHJpbmcob2JqZWN0LnZzcGFjZSgpKTsKLSAgICBjYXNlIE9i
amVjdFdpZHRoOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3Qud2lkdGgoKSk7Ci0gICAg
fQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX1BBUkFNOiB7Ci0gICAgSFRNTFBhcmFtRWxlbWVu
dEltcGwgJnBhcmFtID0gc3RhdGljX2Nhc3Q8SFRNTFBhcmFtRWxlbWVudEltcGwgJj4oZWxlbWVu
dCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgUGFyYW1OYW1lOiAgICAgICAgICAg
IHJldHVybiBTdHJpbmcocGFyYW0ubmFtZSgpKTsKLSAgICBjYXNlIFBhcmFtVHlwZTogICAgICAg
ICAgICByZXR1cm4gU3RyaW5nKHBhcmFtLnR5cGUoKSk7Ci0gICAgY2FzZSBQYXJhbVZhbHVlOiAg
ICAgICAgICAgcmV0dXJuIFN0cmluZyhwYXJhbS52YWx1ZSgpKTsKLSAgICBjYXNlIFBhcmFtVmFs
dWVUeXBlOiAgICAgICByZXR1cm4gU3RyaW5nKHBhcmFtLnZhbHVlVHlwZSgpKTsKLSAgICB9Ci0g
IH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfQVBQTEVUOiB7Ci0gICAgSFRNTEFwcGxldEVsZW1lbnRJ
bXBsICZhcHBsZXQgPSBzdGF0aWNfY2FzdDxIVE1MQXBwbGV0RWxlbWVudEltcGwgJj4oZWxlbWVu
dCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgQXBwbGV0QWxpZ246ICAgICAgICAg
ICByZXR1cm4gU3RyaW5nKGFwcGxldC5hbGlnbigpKTsKLSAgICBjYXNlIEFwcGxldEFsdDogICAg
ICAgICAgICAgcmV0dXJuIFN0cmluZyhhcHBsZXQuYWx0KCkpOwotICAgIGNhc2UgQXBwbGV0QXJj
aGl2ZTogICAgICAgICByZXR1cm4gU3RyaW5nKGFwcGxldC5hcmNoaXZlKCkpOwotICAgIGNhc2Ug
QXBwbGV0Q29kZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGFwcGxldC5jb2RlKCkpOwotICAg
IGNhc2UgQXBwbGV0Q29kZUJhc2U6ICAgICAgICByZXR1cm4gU3RyaW5nKGFwcGxldC5jb2RlQmFz
ZSgpKTsKLSAgICBjYXNlIEFwcGxldEhlaWdodDogICAgICAgICAgcmV0dXJuIFN0cmluZyhhcHBs
ZXQuaGVpZ2h0KCkpOwotICAgIGNhc2UgQXBwbGV0SHNwYWNlOiAgICAgICAgICByZXR1cm4gU3Ry
aW5nKGFwcGxldC5oc3BhY2UoKSk7Ci0gICAgY2FzZSBBcHBsZXROYW1lOiAgICAgICAgICAgIHJl
dHVybiBTdHJpbmcoYXBwbGV0Lm5hbWUoKSk7Ci0gICAgY2FzZSBBcHBsZXRPYmplY3Q6ICAgICAg
ICAgIHJldHVybiBTdHJpbmcoYXBwbGV0Lm9iamVjdCgpKTsKLSAgICBjYXNlIEFwcGxldFZzcGFj
ZTogICAgICAgICAgcmV0dXJuIFN0cmluZyhhcHBsZXQudnNwYWNlKCkpOwotICAgIGNhc2UgQXBw
bGV0V2lkdGg6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGFwcGxldC53aWR0aCgpKTsKLSAgICB9
Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfTUFQOiB7Ci0gICAgSFRNTE1hcEVsZW1lbnRJbXBs
ICZtYXAgPSBzdGF0aWNfY2FzdDxIVE1MTWFwRWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAg
cmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6bWFwR2V0dGVyKEV4
ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxNYXBFbGVtZW50SW1w
bCYgbWFwID0gKnN0YXRpY19jYXN0PEhUTUxNYXBFbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAg
c3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgTWFwQXJlYXM6ICAgICAgICAgICByZXR1cm4gZ2V0
SFRNTENvbGxlY3Rpb24oZXhlYywgbWFwLmFyZWFzKCkuZ2V0KCkpOyAvLyB0eXBlIEhUTUxDb2xs
ZWN0aW9uCi0gICAgY2FzZSBNYXBOYW1lOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcobWFwLm5h
bWUoKSk7Ci0gICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX0FSRUE6IHsKLSAgICBIVE1M
QXJlYUVsZW1lbnRJbXBsICZhcmVhID0gc3RhdGljX2Nhc3Q8SFRNTEFyZWFFbGVtZW50SW1wbCAm
PihlbGVtZW50KTsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBBcmVhQWNjZXNzS2V5
OiAgICAgICByZXR1cm4gU3RyaW5nKGFyZWEuYWNjZXNzS2V5KCkpOwotICAgIGNhc2UgQXJlYUFs
dDogICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhhcmVhLmFsdCgpKTsKLSAgICBjYXNlIEFyZWFD
b29yZHM6ICAgICAgICAgIHJldHVybiBTdHJpbmcoYXJlYS5jb29yZHMoKSk7Ci0gICAgY2FzZSBB
cmVhSHJlZjogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGFyZWEuaHJlZigpKTsKLSAgICBjYXNl
IEFyZWFIYXNoOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoJyMnK0tVUkwoYXJlYS5ocmVmKCku
c3RyaW5nKCkpLnJlZigpKTsKLSAgICBjYXNlIEFyZWFIb3N0OiAgICAgICAgICAgIHJldHVybiBT
dHJpbmcoS1VSTChhcmVhLmhyZWYoKS5zdHJpbmcoKSkuaG9zdCgpKTsKLSAgICBjYXNlIEFyZWFI
b3N0TmFtZTogewotICAgICAgS1VSTCB1cmwoYXJlYS5ocmVmKCkuc3RyaW5nKCkpOwotICAgICAg
a2REZWJ1Zyg2MDcwKSA8PCAibGluazo6aG9zdG5hbWUgdXNlczoiIDw8dXJsLnVybCgpPDxlbmRs
OwotICAgICAgaWYgKHVybC5wb3J0KCk9PTApCi0gICAgICAgIHJldHVybiBTdHJpbmcodXJsLmhv
c3QoKSk7Ci0gICAgICBlbHNlCi0gICAgICAgIHJldHVybiBTdHJpbmcodXJsLmhvc3QoKSArICI6
IiArIFFTdHJpbmc6Om51bWJlcih1cmwucG9ydCgpKSk7CisgICAgICAgIGNhc2UgTWFwQXJlYXM6
ICAgICAgICAgICByZXR1cm4gZ2V0SFRNTENvbGxlY3Rpb24oZXhlYywgbWFwLmFyZWFzKCkuZ2V0
KCkpOyAvLyB0eXBlIEhUTUxDb2xsZWN0aW9uCisgICAgICAgIGNhc2UgTWFwTmFtZTogICAgICAg
ICAgICByZXR1cm4gU3RyaW5nKG1hcC5uYW1lKCkpOwogICAgIH0KLSAgICBjYXNlIEFyZWFQYXRo
TmFtZTogICAgICAgIHJldHVybiBTdHJpbmcoS1VSTChhcmVhLmhyZWYoKS5zdHJpbmcoKSkucGF0
aCgpKTsKLSAgICBjYXNlIEFyZWFQb3J0OiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoUVN0cmlu
Zzo6bnVtYmVyKEtVUkwoYXJlYS5ocmVmKCkuc3RyaW5nKCkpLnBvcnQoKSkpOwotICAgIGNhc2Ug
QXJlYVByb3RvY29sOiAgICAgICAgcmV0dXJuIFN0cmluZyhLVVJMKGFyZWEuaHJlZigpLnN0cmlu
ZygpKS5wcm90b2NvbCgpKyI6Iik7Ci0gICAgY2FzZSBBcmVhU2VhcmNoOiAgICAgICAgICByZXR1
cm4gU3RyaW5nKEtVUkwoYXJlYS5ocmVmKCkuc3RyaW5nKCkpLnF1ZXJ5KCkpOwotICAgIGNhc2Ug
QXJlYU5vSHJlZjogICAgICAgICAgcmV0dXJuIEJvb2xlYW4oYXJlYS5ub0hyZWYoKSk7Ci0gICAg
Y2FzZSBBcmVhU2hhcGU6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGFyZWEuc2hhcGUoKSk7Ci0g
ICAgY2FzZSBBcmVhVGFiSW5kZXg6ICAgICAgICByZXR1cm4gTnVtYmVyKGFyZWEudGFiSW5kZXgo
KSk7Ci0gICAgY2FzZSBBcmVhVGFyZ2V0OiAgICAgICAgICByZXR1cm4gU3RyaW5nKGFyZWEudGFy
Z2V0KCkpOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6
OmFyZWFHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRN
TEFyZWFFbGVtZW50SW1wbCYgYXJlYSA9ICpzdGF0aWNfY2FzdDxIVE1MQXJlYUVsZW1lbnRJbXBs
Kj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgQXJlYUFjY2Vz
c0tleTogICAgICAgcmV0dXJuIFN0cmluZyhhcmVhLmFjY2Vzc0tleSgpKTsKKyAgICAgICAgY2Fz
ZSBBcmVhQWx0OiAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGFyZWEuYWx0KCkpOworICAgICAg
ICBjYXNlIEFyZWFDb29yZHM6ICAgICAgICAgIHJldHVybiBTdHJpbmcoYXJlYS5jb29yZHMoKSk7
CisgICAgICAgIGNhc2UgQXJlYUhyZWY6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhhcmVhLmhy
ZWYoKSk7CisgICAgICAgIGNhc2UgQXJlYUhhc2g6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZygn
IycrS1VSTChhcmVhLmhyZWYoKS5zdHJpbmcoKSkucmVmKCkpOworICAgICAgICBjYXNlIEFyZWFI
b3N0OiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoS1VSTChhcmVhLmhyZWYoKS5zdHJpbmcoKSku
aG9zdCgpKTsKKyAgICAgICAgY2FzZSBBcmVhSG9zdE5hbWU6IHsKKyAgICAgICAgICAgIEtVUkwg
dXJsKGFyZWEuaHJlZigpLnN0cmluZygpKTsKKyAgICAgICAgICAgIGtkRGVidWcoNjA3MCkgPDwg
Imxpbms6Omhvc3RuYW1lIHVzZXM6IiA8PHVybC51cmwoKTw8ZW5kbDsKKyAgICAgICAgICAgIGlm
ICh1cmwucG9ydCgpPT0wKQorICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcodXJsLmhvc3Qo
KSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh1cmwu
aG9zdCgpICsgIjoiICsgUVN0cmluZzo6bnVtYmVyKHVybC5wb3J0KCkpKTsKKyAgICAgICAgfQor
ICAgICAgICBjYXNlIEFyZWFQYXRoTmFtZTogICAgICAgIHJldHVybiBTdHJpbmcoS1VSTChhcmVh
LmhyZWYoKS5zdHJpbmcoKSkucGF0aCgpKTsKKyAgICAgICAgY2FzZSBBcmVhUG9ydDogICAgICAg
ICAgICByZXR1cm4gU3RyaW5nKFFTdHJpbmc6Om51bWJlcihLVVJMKGFyZWEuaHJlZigpLnN0cmlu
ZygpKS5wb3J0KCkpKTsKKyAgICAgICAgY2FzZSBBcmVhUHJvdG9jb2w6ICAgICAgICByZXR1cm4g
U3RyaW5nKEtVUkwoYXJlYS5ocmVmKCkuc3RyaW5nKCkpLnByb3RvY29sKCkrIjoiKTsKKyAgICAg
ICAgY2FzZSBBcmVhU2VhcmNoOiAgICAgICAgICByZXR1cm4gU3RyaW5nKEtVUkwoYXJlYS5ocmVm
KCkuc3RyaW5nKCkpLnF1ZXJ5KCkpOworICAgICAgICBjYXNlIEFyZWFOb0hyZWY6ICAgICAgICAg
IHJldHVybiBCb29sZWFuKGFyZWEubm9IcmVmKCkpOworICAgICAgICBjYXNlIEFyZWFTaGFwZTog
ICAgICAgICAgIHJldHVybiBTdHJpbmcoYXJlYS5zaGFwZSgpKTsKKyAgICAgICAgY2FzZSBBcmVh
VGFiSW5kZXg6ICAgICAgICByZXR1cm4gTnVtYmVyKGFyZWEudGFiSW5kZXgoKSk7CisgICAgICAg
IGNhc2UgQXJlYVRhcmdldDogICAgICAgICAgcmV0dXJuIFN0cmluZyhhcmVhLnRhcmdldCgpKTsK
ICAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfU0NSSVBUOiB7Ci0gICAgSFRNTFNjcmlw
dEVsZW1lbnRJbXBsICZzY3JpcHQgPSBzdGF0aWNfY2FzdDxIVE1MU2NyaXB0RWxlbWVudEltcGwg
Jj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgU2NyaXB0VGV4dDog
ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHNjcmlwdC50ZXh0KCkpOwotICAgIGNhc2UgU2NyaXB0
SHRtbEZvcjogICAgICAgICByZXR1cm4gU3RyaW5nKHNjcmlwdC5odG1sRm9yKCkpOwotICAgIGNh
c2UgU2NyaXB0RXZlbnQ6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHNjcmlwdC5ldmVudCgpKTsK
LSAgICBjYXNlIFNjcmlwdENoYXJzZXQ6ICAgICAgICAgcmV0dXJuIFN0cmluZyhzY3JpcHQuY2hh
cnNldCgpKTsKLSAgICBjYXNlIFNjcmlwdERlZmVyOiAgICAgICAgICAgcmV0dXJuIEJvb2xlYW4o
c2NyaXB0LmRlZmVyKCkpOwotICAgIGNhc2UgU2NyaXB0U3JjOiAgICAgICAgICAgICByZXR1cm4g
U3RyaW5nKHNjcmlwdC5zcmMoKSk7Ci0gICAgY2FzZSBTY3JpcHRUeXBlOiAgICAgICAgICAgIHJl
dHVybiBTdHJpbmcoc2NyaXB0LnR5cGUoKSk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQor
CitWYWx1ZSBIVE1MRWxlbWVudDo6c2NyaXB0R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRv
a2VuKSBjb25zdAoreworICAgIEhUTUxTY3JpcHRFbGVtZW50SW1wbCYgc2NyaXB0ID0gKnN0YXRp
Y19jYXN0PEhUTUxTY3JpcHRFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tl
bikgeworICAgICAgICBjYXNlIFNjcmlwdFRleHQ6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhz
Y3JpcHQudGV4dCgpKTsKKyAgICAgICAgY2FzZSBTY3JpcHRIdG1sRm9yOiAgICAgICAgIHJldHVy
biBTdHJpbmcoc2NyaXB0Lmh0bWxGb3IoKSk7CisgICAgICAgIGNhc2UgU2NyaXB0RXZlbnQ6ICAg
ICAgICAgICByZXR1cm4gU3RyaW5nKHNjcmlwdC5ldmVudCgpKTsKKyAgICAgICAgY2FzZSBTY3Jp
cHRDaGFyc2V0OiAgICAgICAgIHJldHVybiBTdHJpbmcoc2NyaXB0LmNoYXJzZXQoKSk7CisgICAg
ICAgIGNhc2UgU2NyaXB0RGVmZXI6ICAgICAgICAgICByZXR1cm4gQm9vbGVhbihzY3JpcHQuZGVm
ZXIoKSk7CisgICAgICAgIGNhc2UgU2NyaXB0U3JjOiAgICAgICAgICAgICByZXR1cm4gU3RyaW5n
KHNjcmlwdC5zcmMoKSk7CisgICAgICAgIGNhc2UgU2NyaXB0VHlwZTogICAgICAgICAgICByZXR1
cm4gU3RyaW5nKHNjcmlwdC50eXBlKCkpOwogICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJ
RF9UQUJMRTogewotICAgIEhUTUxUYWJsZUVsZW1lbnRJbXBsICZ0YWJsZSA9IHN0YXRpY19jYXN0
PEhUTUxUYWJsZUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgIHN3aXRjaCAodG9rZW4pIHsK
LSAgICBjYXNlIFRhYmxlQ2FwdGlvbjogICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLHRh
YmxlLmNhcHRpb24oKSk7IC8vIHR5cGUgSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQKLSAgICBjYXNl
IFRhYmxlVEhlYWQ6ICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLHRhYmxlLnRIZWFk
KCkpOyAvLyB0eXBlIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50Ci0gICAgY2FzZSBUYWJsZVRGb290
OiAgICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyx0YWJsZS50Rm9vdCgpKTsgLy8gdHlw
ZSBIVE1MVGFibGVTZWN0aW9uRWxlbWVudAotICAgIGNhc2UgVGFibGVSb3dzOiAgICAgICAgICAg
IHJldHVybiBnZXRIVE1MQ29sbGVjdGlvbihleGVjLCB0YWJsZS5yb3dzKCkuZ2V0KCkpOyAvLyB0
eXBlIEhUTUxDb2xsZWN0aW9uCi0gICAgY2FzZSBUYWJsZVRCb2RpZXM6ICAgICAgICAgcmV0dXJu
IGdldEhUTUxDb2xsZWN0aW9uKGV4ZWMsIHRhYmxlLnRCb2RpZXMoKS5nZXQoKSk7IC8vIHR5cGUg
SFRNTENvbGxlY3Rpb24KLSAgICBjYXNlIFRhYmxlQWxpZ246ICAgICAgICAgICByZXR1cm4gU3Ry
aW5nKHRhYmxlLmFsaWduKCkpOwotICAgIGNhc2UgVGFibGVCZ0NvbG9yOiAgICAgICAgIHJldHVy
biBTdHJpbmcodGFibGUuYmdDb2xvcigpKTsKLSAgICBjYXNlIFRhYmxlQm9yZGVyOiAgICAgICAg
ICByZXR1cm4gU3RyaW5nKHRhYmxlLmJvcmRlcigpKTsKLSAgICBjYXNlIFRhYmxlQ2VsbFBhZGRp
bmc6ICAgICByZXR1cm4gU3RyaW5nKHRhYmxlLmNlbGxQYWRkaW5nKCkpOwotICAgIGNhc2UgVGFi
bGVDZWxsU3BhY2luZzogICAgIHJldHVybiBTdHJpbmcodGFibGUuY2VsbFNwYWNpbmcoKSk7Ci0g
ICAgY2FzZSBUYWJsZUZyYW1lOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZS5mcmFtZSgp
KTsKLSAgICBjYXNlIFRhYmxlUnVsZXM6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlLnJ1
bGVzKCkpOwotICAgIGNhc2UgVGFibGVTdW1tYXJ5OiAgICAgICAgIHJldHVybiBTdHJpbmcodGFi
bGUuc3VtbWFyeSgpKTsKLSAgICBjYXNlIFRhYmxlV2lkdGg6ICAgICAgICAgICByZXR1cm4gU3Ry
aW5nKHRhYmxlLndpZHRoKCkpOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUg
SFRNTEVsZW1lbnQ6OnRhYmxlR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25z
dAoreworICAgIEhUTUxUYWJsZUVsZW1lbnRJbXBsJiB0YWJsZSA9ICpzdGF0aWNfY2FzdDxIVE1M
VGFibGVFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAg
ICBjYXNlIFRhYmxlQ2FwdGlvbjogICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLHRhYmxl
LmNhcHRpb24oKSk7IC8vIHR5cGUgSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQKKyAgICAgICAgY2Fz
ZSBUYWJsZVRIZWFkOiAgICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyx0YWJsZS50SGVh
ZCgpKTsgLy8gdHlwZSBIVE1MVGFibGVTZWN0aW9uRWxlbWVudAorICAgICAgICBjYXNlIFRhYmxl
VEZvb3Q6ICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLHRhYmxlLnRGb290KCkpOyAv
LyB0eXBlIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50CisgICAgICAgIGNhc2UgVGFibGVSb3dzOiAg
ICAgICAgICAgIHJldHVybiBnZXRIVE1MQ29sbGVjdGlvbihleGVjLCB0YWJsZS5yb3dzKCkuZ2V0
KCkpOyAvLyB0eXBlIEhUTUxDb2xsZWN0aW9uCisgICAgICAgIGNhc2UgVGFibGVUQm9kaWVzOiAg
ICAgICAgIHJldHVybiBnZXRIVE1MQ29sbGVjdGlvbihleGVjLCB0YWJsZS50Qm9kaWVzKCkuZ2V0
KCkpOyAvLyB0eXBlIEhUTUxDb2xsZWN0aW9uCisgICAgICAgIGNhc2UgVGFibGVBbGlnbjogICAg
ICAgICAgIHJldHVybiBTdHJpbmcodGFibGUuYWxpZ24oKSk7CisgICAgICAgIGNhc2UgVGFibGVC
Z0NvbG9yOiAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGUuYmdDb2xvcigpKTsKKyAgICAgICAg
Y2FzZSBUYWJsZUJvcmRlcjogICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZS5ib3JkZXIoKSk7
CisgICAgICAgIGNhc2UgVGFibGVDZWxsUGFkZGluZzogICAgIHJldHVybiBTdHJpbmcodGFibGUu
Y2VsbFBhZGRpbmcoKSk7CisgICAgICAgIGNhc2UgVGFibGVDZWxsU3BhY2luZzogICAgIHJldHVy
biBTdHJpbmcodGFibGUuY2VsbFNwYWNpbmcoKSk7CisgICAgICAgIGNhc2UgVGFibGVGcmFtZTog
ICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGUuZnJhbWUoKSk7CisgICAgICAgIGNhc2UgVGFi
bGVSdWxlczogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGUucnVsZXMoKSk7CisgICAgICAg
IGNhc2UgVGFibGVTdW1tYXJ5OiAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGUuc3VtbWFyeSgp
KTsKKyAgICAgICAgY2FzZSBUYWJsZVdpZHRoOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJs
ZS53aWR0aCgpKTsKICAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfQ0FQVElPTjogewot
ICAgIEhUTUxUYWJsZUNhcHRpb25FbGVtZW50SW1wbCAmdGFibGVDYXB0aW9uID0gc3RhdGljX2Nh
c3Q8SFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgIHJldHVybiBV
bmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OnRhYmxlQ2FwdGlvbkdldHRlcihF
eGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MVGFibGVDYXB0aW9u
RWxlbWVudEltcGwmIHRhYmxlQ2FwdGlvbiA9ICpzdGF0aWNfY2FzdDxIVE1MVGFibGVDYXB0aW9u
RWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIGlmICh0b2tlbiA9PSBUYWJsZUNhcHRpb25BbGln
bikKKyAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNhcHRpb24uYWxpZ24oKSk7CisgICAgcmV0
dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6dGFibGVDb2xHZXR0ZXIo
RXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTFRhYmxlQ29sRWxl
bWVudEltcGwmIHRhYmxlQ29sID0gKnN0YXRpY19jYXN0PEhUTUxUYWJsZUNvbEVsZW1lbnRJbXBs
Kj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBUYWJsZUNhcHRpb25B
bGlnbjogICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNhcHRpb24uYWxpZ24oKSk7CisgICAgICAg
IGNhc2UgVGFibGVDb2xBbGlnbjogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVDb2wuYWxp
Z24oKSk7CisgICAgICAgIGNhc2UgVGFibGVDb2xDaDogICAgICAgICAgICAgIHJldHVybiBTdHJp
bmcodGFibGVDb2wuY2goKSk7CisgICAgICAgIGNhc2UgVGFibGVDb2xDaE9mZjogICAgICAgICAg
IHJldHVybiBTdHJpbmcodGFibGVDb2wuY2hPZmYoKSk7CisgICAgICAgIGNhc2UgVGFibGVDb2xT
cGFuOiAgICAgICAgICAgIHJldHVybiBOdW1iZXIodGFibGVDb2wuc3BhbigpKTsKKyAgICAgICAg
Y2FzZSBUYWJsZUNvbFZBbGlnbjogICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNvbC52QWxp
Z24oKSk7CisgICAgICAgIGNhc2UgVGFibGVDb2xXaWR0aDogICAgICAgICAgIHJldHVybiBTdHJp
bmcodGFibGVDb2wud2lkdGgoKSk7CiAgICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX0NP
TDogewotICAgIEhUTUxUYWJsZUNvbEVsZW1lbnRJbXBsICZ0YWJsZUNvbCA9IHN0YXRpY19jYXN0
PEhUTUxUYWJsZUNvbEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgIHN3aXRjaCAodG9rZW4p
IHsKLSAgICBjYXNlIFRhYmxlQ29sQWxpZ246ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxl
Q29sLmFsaWduKCkpOwotICAgIGNhc2UgVGFibGVDb2xDaDogICAgICAgICAgICAgIHJldHVybiBT
dHJpbmcodGFibGVDb2wuY2goKSk7Ci0gICAgY2FzZSBUYWJsZUNvbENoT2ZmOiAgICAgICAgICAg
cmV0dXJuIFN0cmluZyh0YWJsZUNvbC5jaE9mZigpKTsKLSAgICBjYXNlIFRhYmxlQ29sU3Bhbjog
ICAgICAgICAgICByZXR1cm4gTnVtYmVyKHRhYmxlQ29sLnNwYW4oKSk7Ci0gICAgY2FzZSBUYWJs
ZUNvbFZBbGlnbjogICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNvbC52QWxpZ24oKSk7Ci0g
ICAgY2FzZSBUYWJsZUNvbFdpZHRoOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNvbC53
aWR0aCgpKTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50
Ojp0YWJsZVNlY3Rpb25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7
CisgICAgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsJiB0YWJsZVNlY3Rpb24gPSAqc3RhdGlj
X2Nhc3Q8SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2gg
KHRva2VuKSB7CisgICAgICAgIGNhc2UgVGFibGVTZWN0aW9uQWxpZ246ICAgICAgICAgICByZXR1
cm4gU3RyaW5nKHRhYmxlU2VjdGlvbi5hbGlnbigpKTsKKyAgICAgICAgY2FzZSBUYWJsZVNlY3Rp
b25DaDogICAgICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVTZWN0aW9uLmNoKCkpOworICAg
ICAgICBjYXNlIFRhYmxlU2VjdGlvbkNoT2ZmOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJs
ZVNlY3Rpb24uY2hPZmYoKSk7CisgICAgICAgIGNhc2UgVGFibGVTZWN0aW9uVkFsaWduOiAgICAg
ICAgICByZXR1cm4gU3RyaW5nKHRhYmxlU2VjdGlvbi52QWxpZ24oKSk7CisgICAgICAgIGNhc2Ug
VGFibGVTZWN0aW9uUm93czogICAgICAgICAgICByZXR1cm4gZ2V0SFRNTENvbGxlY3Rpb24oZXhl
YywgdGFibGVTZWN0aW9uLnJvd3MoKS5nZXQoKSk7IC8vIHR5cGUgSFRNTENvbGxlY3Rpb24KICAg
ICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfVEhFQUQ6Ci0gIGNhc2UgSURfVEJPRFk6Ci0g
IGNhc2UgSURfVEZPT1Q6IHsKLSAgICBIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGwgJnRhYmxl
U2VjdGlvbiA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbCAmPihlbGVt
ZW50KTsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBUYWJsZVNlY3Rpb25BbGlnbjog
ICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVTZWN0aW9uLmFsaWduKCkpOwotICAgIGNhc2Ug
VGFibGVTZWN0aW9uQ2g6ICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlU2VjdGlvbi5j
aCgpKTsKLSAgICBjYXNlIFRhYmxlU2VjdGlvbkNoT2ZmOiAgICAgICAgICAgcmV0dXJuIFN0cmlu
Zyh0YWJsZVNlY3Rpb24uY2hPZmYoKSk7Ci0gICAgY2FzZSBUYWJsZVNlY3Rpb25WQWxpZ246ICAg
ICAgICAgIHJldHVybiBTdHJpbmcodGFibGVTZWN0aW9uLnZBbGlnbigpKTsKLSAgICBjYXNlIFRh
YmxlU2VjdGlvblJvd3M6ICAgICAgICAgICAgcmV0dXJuIGdldEhUTUxDb2xsZWN0aW9uKGV4ZWMs
IHRhYmxlU2VjdGlvbi5yb3dzKCkuZ2V0KCkpOyAvLyB0eXBlIEhUTUxDb2xsZWN0aW9uCisgICAg
cmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6dGFibGVSb3dHZXR0
ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTFRhYmxlUm93
RWxlbWVudEltcGwmIHRhYmxlUm93ID0gKnN0YXRpY19jYXN0PEhUTUxUYWJsZVJvd0VsZW1lbnRJ
bXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgVGFibGVS
b3dSb3dJbmRleDogICAgICAgIHJldHVybiBOdW1iZXIodGFibGVSb3cucm93SW5kZXgoKSk7Cisg
ICAgICAgIGNhc2UgVGFibGVSb3dTZWN0aW9uUm93SW5kZXg6IHJldHVybiBOdW1iZXIodGFibGVS
b3cuc2VjdGlvblJvd0luZGV4KCkpOworICAgICAgICBjYXNlIFRhYmxlUm93Q2VsbHM6ICAgICAg
ICAgICByZXR1cm4gZ2V0SFRNTENvbGxlY3Rpb24oZXhlYywgdGFibGVSb3cuY2VsbHMoKS5nZXQo
KSk7IC8vIHR5cGUgSFRNTENvbGxlY3Rpb24KKyAgICAgICAgY2FzZSBUYWJsZVJvd0FsaWduOiAg
ICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZVJvdy5hbGlnbigpKTsKKyAgICAgICAgY2FzZSBU
YWJsZVJvd0JnQ29sb3I6ICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZVJvdy5iZ0NvbG9yKCkp
OworICAgICAgICBjYXNlIFRhYmxlUm93Q2g6ICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRh
YmxlUm93LmNoKCkpOworICAgICAgICBjYXNlIFRhYmxlUm93Q2hPZmY6ICAgICAgICAgICByZXR1
cm4gU3RyaW5nKHRhYmxlUm93LmNoT2ZmKCkpOworICAgICAgICBjYXNlIFRhYmxlUm93VkFsaWdu
OiAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlUm93LnZBbGlnbigpKTsKICAgICB9Ci0gIH0K
LSAgYnJlYWs7Ci0gIGNhc2UgSURfVFI6IHsKLSAgIEhUTUxUYWJsZVJvd0VsZW1lbnRJbXBsICZ0
YWJsZVJvdyA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZVJvd0VsZW1lbnRJbXBsICY+KGVsZW1lbnQp
OwotICAgc3dpdGNoICh0b2tlbikgewotICAgY2FzZSBUYWJsZVJvd1Jvd0luZGV4OiAgICAgICAg
cmV0dXJuIE51bWJlcih0YWJsZVJvdy5yb3dJbmRleCgpKTsKLSAgIGNhc2UgVGFibGVSb3dTZWN0
aW9uUm93SW5kZXg6IHJldHVybiBOdW1iZXIodGFibGVSb3cuc2VjdGlvblJvd0luZGV4KCkpOwot
ICAgY2FzZSBUYWJsZVJvd0NlbGxzOiAgICAgICAgICAgcmV0dXJuIGdldEhUTUxDb2xsZWN0aW9u
KGV4ZWMsIHRhYmxlUm93LmNlbGxzKCkuZ2V0KCkpOyAvLyB0eXBlIEhUTUxDb2xsZWN0aW9uCi0g
ICBjYXNlIFRhYmxlUm93QWxpZ246ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlUm93LmFs
aWduKCkpOwotICAgY2FzZSBUYWJsZVJvd0JnQ29sb3I6ICAgICAgICAgcmV0dXJuIFN0cmluZyh0
YWJsZVJvdy5iZ0NvbG9yKCkpOwotICAgY2FzZSBUYWJsZVJvd0NoOiAgICAgICAgICAgICAgcmV0
dXJuIFN0cmluZyh0YWJsZVJvdy5jaCgpKTsKLSAgIGNhc2UgVGFibGVSb3dDaE9mZjogICAgICAg
ICAgIHJldHVybiBTdHJpbmcodGFibGVSb3cuY2hPZmYoKSk7Ci0gICBjYXNlIFRhYmxlUm93VkFs
aWduOiAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlUm93LnZBbGlnbigpKTsKLSAgIH0KLSAg
fQotICBicmVhazsKLSAgY2FzZSBJRF9USDoKLSAgY2FzZSBJRF9URDogewotICAgIEhUTUxUYWJs
ZUNlbGxFbGVtZW50SW1wbCAmdGFibGVDZWxsID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ2VsbEVs
ZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIFRh
YmxlQ2VsbENlbGxJbmRleDogICAgICAgcmV0dXJuIE51bWJlcih0YWJsZUNlbGwuY2VsbEluZGV4
KCkpOwotICAgIGNhc2UgVGFibGVDZWxsQWJicjogICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRh
YmxlQ2VsbC5hYmJyKCkpOwotICAgIGNhc2UgVGFibGVDZWxsQWxpZ246ICAgICAgICAgICByZXR1
cm4gU3RyaW5nKHRhYmxlQ2VsbC5hbGlnbigpKTsKLSAgICBjYXNlIFRhYmxlQ2VsbEF4aXM6ICAg
ICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNlbGwuYXhpcygpKTsKLSAgICBjYXNlIFRhYmxl
Q2VsbEJnQ29sb3I6ICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNlbGwuYmdDb2xvcigpKTsK
LSAgICBjYXNlIFRhYmxlQ2VsbENoOiAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNl
bGwuY2goKSk7Ci0gICAgY2FzZSBUYWJsZUNlbGxDaE9mZjogICAgICAgICAgIHJldHVybiBTdHJp
bmcodGFibGVDZWxsLmNoT2ZmKCkpOwotICAgIGNhc2UgVGFibGVDZWxsQ29sU3BhbjogICAgICAg
ICByZXR1cm4gTnVtYmVyKHRhYmxlQ2VsbC5jb2xTcGFuKCkpOwotICAgIGNhc2UgVGFibGVDZWxs
SGVhZGVyczogICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ2VsbC5oZWFkZXJzKCkpOwotICAg
IGNhc2UgVGFibGVDZWxsSGVpZ2h0OiAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ2VsbC5o
ZWlnaHQoKSk7Ci0gICAgY2FzZSBUYWJsZUNlbGxOb1dyYXA6ICAgICAgICAgIHJldHVybiBCb29s
ZWFuKHRhYmxlQ2VsbC5ub1dyYXAoKSk7Ci0gICAgY2FzZSBUYWJsZUNlbGxSb3dTcGFuOiAgICAg
ICAgIHJldHVybiBOdW1iZXIodGFibGVDZWxsLnJvd1NwYW4oKSk7Ci0gICAgY2FzZSBUYWJsZUNl
bGxTY29wZTogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVDZWxsLnNjb3BlKCkpOwotICAg
IGNhc2UgVGFibGVDZWxsVkFsaWduOiAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ2VsbC52
QWxpZ24oKSk7Ci0gICAgY2FzZSBUYWJsZUNlbGxXaWR0aDogICAgICAgICAgIHJldHVybiBTdHJp
bmcodGFibGVDZWxsLndpZHRoKCkpOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFs
dWUgSFRNTEVsZW1lbnQ6OnRhYmxlQ2VsbEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tl
bikgY29uc3QKK3sKKyAgICBIVE1MVGFibGVDZWxsRWxlbWVudEltcGwmIHRhYmxlQ2VsbCA9ICpz
dGF0aWNfY2FzdDxIVE1MVGFibGVDZWxsRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRj
aCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBUYWJsZUNlbGxDZWxsSW5kZXg6ICAgICAgIHJldHVy
biBOdW1iZXIodGFibGVDZWxsLmNlbGxJbmRleCgpKTsKKyAgICAgICAgY2FzZSBUYWJsZUNlbGxB
YmJyOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVDZWxsLmFiYnIoKSk7CisgICAgICAg
IGNhc2UgVGFibGVDZWxsQWxpZ246ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ2VsbC5h
bGlnbigpKTsKKyAgICAgICAgY2FzZSBUYWJsZUNlbGxBeGlzOiAgICAgICAgICAgIHJldHVybiBT
dHJpbmcodGFibGVDZWxsLmF4aXMoKSk7CisgICAgICAgIGNhc2UgVGFibGVDZWxsQmdDb2xvcjog
ICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ2VsbC5iZ0NvbG9yKCkpOworICAgICAgICBjYXNl
IFRhYmxlQ2VsbENoOiAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNlbGwuY2goKSk7
CisgICAgICAgIGNhc2UgVGFibGVDZWxsQ2hPZmY6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRh
YmxlQ2VsbC5jaE9mZigpKTsKKyAgICAgICAgY2FzZSBUYWJsZUNlbGxDb2xTcGFuOiAgICAgICAg
IHJldHVybiBOdW1iZXIodGFibGVDZWxsLmNvbFNwYW4oKSk7CisgICAgICAgIGNhc2UgVGFibGVD
ZWxsSGVhZGVyczogICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ2VsbC5oZWFkZXJzKCkpOwor
ICAgICAgICBjYXNlIFRhYmxlQ2VsbEhlaWdodDogICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJs
ZUNlbGwuaGVpZ2h0KCkpOworICAgICAgICBjYXNlIFRhYmxlQ2VsbE5vV3JhcDogICAgICAgICAg
cmV0dXJuIEJvb2xlYW4odGFibGVDZWxsLm5vV3JhcCgpKTsKKyAgICAgICAgY2FzZSBUYWJsZUNl
bGxSb3dTcGFuOiAgICAgICAgIHJldHVybiBOdW1iZXIodGFibGVDZWxsLnJvd1NwYW4oKSk7Cisg
ICAgICAgIGNhc2UgVGFibGVDZWxsU2NvcGU6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxl
Q2VsbC5zY29wZSgpKTsKKyAgICAgICAgY2FzZSBUYWJsZUNlbGxWQWxpZ246ICAgICAgICAgIHJl
dHVybiBTdHJpbmcodGFibGVDZWxsLnZBbGlnbigpKTsKKyAgICAgICAgY2FzZSBUYWJsZUNlbGxX
aWR0aDogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVDZWxsLndpZHRoKCkpOwogICAgIH0K
LSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9GUkFNRVNFVDogewotICAgIEhUTUxGcmFtZVNldEVs
ZW1lbnRJbXBsICZmcmFtZVNldCA9IHN0YXRpY19jYXN0PEhUTUxGcmFtZVNldEVsZW1lbnRJbXBs
ICY+KGVsZW1lbnQpOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVs
ZW1lbnQ6OmZyYW1lU2V0R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAor
eworICAgIEhUTUxGcmFtZVNldEVsZW1lbnRJbXBsJiBmcmFtZVNldCA9ICpzdGF0aWNfY2FzdDxI
VE1MRnJhbWVTZXRFbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tlbikgewot
ICAgIGNhc2UgRnJhbWVTZXRDb2xzOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoZnJhbWVTZXQu
Y29scygpKTsKLSAgICBjYXNlIEZyYW1lU2V0Um93czogICAgICAgICAgICByZXR1cm4gU3RyaW5n
KGZyYW1lU2V0LnJvd3MoKSk7CisgICAgICAgIGNhc2UgRnJhbWVTZXRDb2xzOiAgICAgICAgICAg
IHJldHVybiBTdHJpbmcoZnJhbWVTZXQuY29scygpKTsKKyAgICAgICAgY2FzZSBGcmFtZVNldFJv
d3M6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhmcmFtZVNldC5yb3dzKCkpOwogICAgIH0KLSAg
fQotICBicmVhazsKLSAgY2FzZSBJRF9GUkFNRTogewotICAgIEhUTUxGcmFtZUVsZW1lbnRJbXBs
ICZmcmFtZUVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRnJhbWVFbGVtZW50SW1wbCAmPihlbGVt
ZW50KTsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBGcmFtZUNvbnRlbnREb2N1bWVu
dDogcmV0dXJuIGNoZWNrTm9kZVNlY3VyaXR5KGV4ZWMsZnJhbWVFbGVtZW50LmNvbnRlbnREb2N1
bWVudCgpKSA/IAotCQkJCSAgICAgIGdldERPTU5vZGUoZXhlYywgZnJhbWVFbGVtZW50LmNvbnRl
bnREb2N1bWVudCgpKSA6IFVuZGVmaW5lZCgpOwotICAgIGNhc2UgRnJhbWVDb250ZW50V2luZG93
OiAgIHJldHVybiBjaGVja05vZGVTZWN1cml0eShleGVjLGZyYW1lRWxlbWVudC5jb250ZW50RG9j
dW1lbnQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gV2luZG93Ojpy
ZXRyaWV2ZShmcmFtZUVsZW1lbnQuY29udGVudFBhcnQoKSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDogVW5kZWZpbmVkKCk7Ci0gICAgY2FzZSBGcmFtZUZyYW1lQm9yZGVy
OiAgICAgcmV0dXJuIFN0cmluZyhmcmFtZUVsZW1lbnQuZnJhbWVCb3JkZXIoKSk7Ci0gICAgY2Fz
ZSBGcmFtZUxvbmdEZXNjOiAgICAgICAgcmV0dXJuIFN0cmluZyhmcmFtZUVsZW1lbnQubG9uZ0Rl
c2MoKSk7Ci0gICAgY2FzZSBGcmFtZU1hcmdpbkhlaWdodDogICAgcmV0dXJuIFN0cmluZyhmcmFt
ZUVsZW1lbnQubWFyZ2luSGVpZ2h0KCkpOwotICAgIGNhc2UgRnJhbWVNYXJnaW5XaWR0aDogICAg
IHJldHVybiBTdHJpbmcoZnJhbWVFbGVtZW50Lm1hcmdpbldpZHRoKCkpOwotICAgIGNhc2UgRnJh
bWVOYW1lOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoZnJhbWVFbGVtZW50Lm5hbWUoKSk7Ci0g
ICAgY2FzZSBGcmFtZU5vUmVzaXplOiAgICAgICAgcmV0dXJuIEJvb2xlYW4oZnJhbWVFbGVtZW50
Lm5vUmVzaXplKCkpOwotICAgIGNhc2UgRnJhbWVTY3JvbGxpbmc6ICAgICAgIHJldHVybiBTdHJp
bmcoZnJhbWVFbGVtZW50LnNjcm9sbGluZygpKTsKLSAgICBjYXNlIEZyYW1lU3JjOgotICAgIGNh
c2UgRnJhbWVMb2NhdGlvbjogICAgICAgIHJldHVybiBTdHJpbmcoZnJhbWVFbGVtZW50LnNyYygp
KTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50OjpmcmFt
ZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MRnJh
bWVFbGVtZW50SW1wbCYgZnJhbWVFbGVtZW50ID0gKnN0YXRpY19jYXN0PEhUTUxGcmFtZUVsZW1l
bnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgRnJh
bWVDb250ZW50RG9jdW1lbnQ6IHJldHVybiBjaGVja05vZGVTZWN1cml0eShleGVjLGZyYW1lRWxl
bWVudC5jb250ZW50RG9jdW1lbnQoKSkgPyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdldERPTU5vZGUoZXhlYywgZnJhbWVFbGVtZW50LmNvbnRlbnREb2N1bWVu
dCgpKSA6IFVuZGVmaW5lZCgpOworICAgICAgICBjYXNlIEZyYW1lQ29udGVudFdpbmRvdzogICBy
ZXR1cm4gY2hlY2tOb2RlU2VjdXJpdHkoZXhlYyxmcmFtZUVsZW1lbnQuY29udGVudERvY3VtZW50
KCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBXaW5kb3c6OnJl
dHJpZXZlKGZyYW1lRWxlbWVudC5jb250ZW50UGFydCgpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDogVW5kZWZpbmVkKCk7CisgICAgICAgIGNhc2UgRnJhbWVGcmFt
ZUJvcmRlcjogICAgIHJldHVybiBTdHJpbmcoZnJhbWVFbGVtZW50LmZyYW1lQm9yZGVyKCkpOwor
ICAgICAgICBjYXNlIEZyYW1lTG9uZ0Rlc2M6ICAgICAgICByZXR1cm4gU3RyaW5nKGZyYW1lRWxl
bWVudC5sb25nRGVzYygpKTsKKyAgICAgICAgY2FzZSBGcmFtZU1hcmdpbkhlaWdodDogICAgcmV0
dXJuIFN0cmluZyhmcmFtZUVsZW1lbnQubWFyZ2luSGVpZ2h0KCkpOworICAgICAgICBjYXNlIEZy
YW1lTWFyZ2luV2lkdGg6ICAgICByZXR1cm4gU3RyaW5nKGZyYW1lRWxlbWVudC5tYXJnaW5XaWR0
aCgpKTsKKyAgICAgICAgY2FzZSBGcmFtZU5hbWU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhm
cmFtZUVsZW1lbnQubmFtZSgpKTsKKyAgICAgICAgY2FzZSBGcmFtZU5vUmVzaXplOiAgICAgICAg
cmV0dXJuIEJvb2xlYW4oZnJhbWVFbGVtZW50Lm5vUmVzaXplKCkpOworICAgICAgICBjYXNlIEZy
YW1lU2Nyb2xsaW5nOiAgICAgICByZXR1cm4gU3RyaW5nKGZyYW1lRWxlbWVudC5zY3JvbGxpbmco
KSk7CisgICAgICAgIGNhc2UgRnJhbWVTcmM6CisgICAgICAgIGNhc2UgRnJhbWVMb2NhdGlvbjog
ICAgICAgIHJldHVybiBTdHJpbmcoZnJhbWVFbGVtZW50LnNyYygpKTsKICAgICB9Ci0gIH0KLSAg
YnJlYWs7Ci0gIGNhc2UgSURfSUZSQU1FOiB7Ci0gICAgSFRNTElGcmFtZUVsZW1lbnRJbXBsICZp
RnJhbWUgPSBzdGF0aWNfY2FzdDxIVE1MSUZyYW1lRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0g
ICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgSUZyYW1lQWxpZ246ICAgICAgICAgICAgICAg
IHJldHVybiBTdHJpbmcoaUZyYW1lLmFsaWduKCkpOwotICAgICAgLy8gIyMjIHNlY3VyaXR5IGNo
ZWNrID8KLSAgICBjYXNlIElGcmFtZURvY3VtZW50OiAvLyBub24tc3RhbmRhcmQsIG1hcHBlZCB0
byBjb250ZW50RG9jdW1lbnQKLSAgICBjYXNlIElGcmFtZUNvbnRlbnREb2N1bWVudDogcmV0dXJu
IGNoZWNrTm9kZVNlY3VyaXR5KGV4ZWMsaUZyYW1lLmNvbnRlbnREb2N1bWVudCgpKSA/IAotCQkJ
CSAgZ2V0RE9NTm9kZShleGVjLCBpRnJhbWUuY29udGVudERvY3VtZW50KCkpIDogVW5kZWZpbmVk
KCk7Ci0gICAgY2FzZSBJRnJhbWVDb250ZW50V2luZG93OglyZXR1cm4gY2hlY2tOb2RlU2VjdXJp
dHkoZXhlYyxpRnJhbWUuY29udGVudERvY3VtZW50KCkpIAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgPyBXaW5kb3c6OnJldHJpZXZlKGlGcmFtZS5jb250ZW50UGFydCgpKQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBVbmRlZmluZWQoKTsKLSAgICBj
YXNlIElGcmFtZUZyYW1lQm9yZGVyOiAgICAgcmV0dXJuIFN0cmluZyhpRnJhbWUuZnJhbWVCb3Jk
ZXIoKSk7Ci0gICAgY2FzZSBJRnJhbWVIZWlnaHQ6ICAgICAgICAgIHJldHVybiBTdHJpbmcoaUZy
YW1lLmhlaWdodCgpKTsKLSAgICBjYXNlIElGcmFtZUxvbmdEZXNjOiAgICAgICAgcmV0dXJuIFN0
cmluZyhpRnJhbWUubG9uZ0Rlc2MoKSk7Ci0gICAgY2FzZSBJRnJhbWVNYXJnaW5IZWlnaHQ6ICAg
IHJldHVybiBTdHJpbmcoaUZyYW1lLm1hcmdpbkhlaWdodCgpKTsKLSAgICBjYXNlIElGcmFtZU1h
cmdpbldpZHRoOiAgICAgcmV0dXJuIFN0cmluZyhpRnJhbWUubWFyZ2luV2lkdGgoKSk7Ci0gICAg
Y2FzZSBJRnJhbWVOYW1lOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoaUZyYW1lLm5hbWUoKSk7
Ci0gICAgY2FzZSBJRnJhbWVTY3JvbGxpbmc6ICAgICAgIHJldHVybiBTdHJpbmcoaUZyYW1lLnNj
cm9sbGluZygpKTsKLSAgICBjYXNlIElGcmFtZVNyYzogICAgICAgICAgICAgcmV0dXJuIFN0cmlu
ZyhpRnJhbWUuc3JjKCkpOwotICAgIGNhc2UgSUZyYW1lV2lkdGg6ICAgICAgICAgICByZXR1cm4g
U3RyaW5nKGlGcmFtZS53aWR0aCgpKTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1Zh
bHVlIEhUTUxFbGVtZW50OjppRnJhbWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4p
IGNvbnN0Cit7CisgICAgSFRNTElGcmFtZUVsZW1lbnRJbXBsJiBpRnJhbWUgPSAqc3RhdGljX2Nh
c3Q8SFRNTElGcmFtZUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7
CisgICAgICAgIGNhc2UgSUZyYW1lQWxpZ246ICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmco
aUZyYW1lLmFsaWduKCkpOworICAgICAgICAgIC8vICMjIyBzZWN1cml0eSBjaGVjayA/CisgICAg
ICAgIGNhc2UgSUZyYW1lRG9jdW1lbnQ6IC8vIG5vbi1zdGFuZGFyZCwgbWFwcGVkIHRvIGNvbnRl
bnREb2N1bWVudAorICAgICAgICBjYXNlIElGcmFtZUNvbnRlbnREb2N1bWVudDogcmV0dXJuIGNo
ZWNrTm9kZVNlY3VyaXR5KGV4ZWMsaUZyYW1lLmNvbnRlbnREb2N1bWVudCgpKSA/IAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRET01Ob2RlKGV4ZWMsIGlGcmFtZS5j
b250ZW50RG9jdW1lbnQoKSkgOiBVbmRlZmluZWQoKTsKKyAgICAgICAgY2FzZSBJRnJhbWVDb250
ZW50V2luZG93OglyZXR1cm4gY2hlY2tOb2RlU2VjdXJpdHkoZXhlYyxpRnJhbWUuY29udGVudERv
Y3VtZW50KCkpIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gV2lu
ZG93OjpyZXRyaWV2ZShpRnJhbWUuY29udGVudFBhcnQoKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA6IFVuZGVmaW5lZCgpOworICAgICAgICBjYXNlIElGcmFtZUZy
YW1lQm9yZGVyOiAgICAgcmV0dXJuIFN0cmluZyhpRnJhbWUuZnJhbWVCb3JkZXIoKSk7CisgICAg
ICAgIGNhc2UgSUZyYW1lSGVpZ2h0OiAgICAgICAgICByZXR1cm4gU3RyaW5nKGlGcmFtZS5oZWln
aHQoKSk7CisgICAgICAgIGNhc2UgSUZyYW1lTG9uZ0Rlc2M6ICAgICAgICByZXR1cm4gU3RyaW5n
KGlGcmFtZS5sb25nRGVzYygpKTsKKyAgICAgICAgY2FzZSBJRnJhbWVNYXJnaW5IZWlnaHQ6ICAg
IHJldHVybiBTdHJpbmcoaUZyYW1lLm1hcmdpbkhlaWdodCgpKTsKKyAgICAgICAgY2FzZSBJRnJh
bWVNYXJnaW5XaWR0aDogICAgIHJldHVybiBTdHJpbmcoaUZyYW1lLm1hcmdpbldpZHRoKCkpOwor
ICAgICAgICBjYXNlIElGcmFtZU5hbWU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpRnJhbWUu
bmFtZSgpKTsKKyAgICAgICAgY2FzZSBJRnJhbWVTY3JvbGxpbmc6ICAgICAgIHJldHVybiBTdHJp
bmcoaUZyYW1lLnNjcm9sbGluZygpKTsKKyAgICAgICAgY2FzZSBJRnJhbWVTcmM6ICAgICAgICAg
ICAgIHJldHVybiBTdHJpbmcoaUZyYW1lLnNyYygpKTsKKyAgICAgICAgY2FzZSBJRnJhbWVXaWR0
aDogICAgICAgICAgIHJldHVybiBTdHJpbmcoaUZyYW1lLndpZHRoKCkpOwogICAgIH0KLSAgICBi
cmVhazsKLSAgfQotICB9IC8vIHhlbWFjcyAob3IgYXJudCkgY291bGQgYmUgYSBiaXQgc21hcnRl
ciB3aGVuIGl0IGNvbWVzIHRvIGluZGVudGluZyBzd2l0Y2goKWVzIDspCi0gIC8vIGl0cyBub3Qg
YXJudCB0byBibGFtZSAtIGl0cyB0aGUgb3JpZ2luYWwgU3Ryb3VzdHJ1cCBzdHlsZSB3ZSBsaWtl
IDopIChEaXJrKQorICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KIAotICAvLyBnZW5lcmljIHBy
b3BlcnRpZXMKLSAgc3dpdGNoICh0b2tlbikgewotICBjYXNlIEVsZW1lbnRJZDoKLSAgICAgIC8v
IGlodC5jb20gcmVsaWVzIG9uIHRoaXMgdmFsdWUgYmVpbmcgIiIgd2hlbiBubyBpZCBpcyBwcmVz
ZW50LiAgT3RoZXIgYnJvd3NlcnMgZG8gdGhpcyBhcyB3ZWxsLgotICAgICAgLy8gU28gd2UgdXNl
IFN0cmluZygpIGluc3RlYWQgb2YgU3RyaW5nKCkgaGVyZS4KLSAgICByZXR1cm4gU3RyaW5nKGVs
ZW1lbnQuaWRET00oKSk7Ci0gIGNhc2UgRWxlbWVudFRpdGxlOgotICAgIHJldHVybiBTdHJpbmco
ZWxlbWVudC50aXRsZSgpKTsKLSAgY2FzZSBFbGVtZW50TGFuZzoKLSAgICByZXR1cm4gU3RyaW5n
KGVsZW1lbnQubGFuZygpKTsKLSAgY2FzZSBFbGVtZW50RGlyOgotICAgIHJldHVybiBTdHJpbmco
ZWxlbWVudC5kaXIoKSk7Ci0gIGNhc2UgRWxlbWVudENsYXNzTmFtZToKLSAgICByZXR1cm4gU3Ry
aW5nKGVsZW1lbnQuY2xhc3NOYW1lKCkpOwotICBjYXNlIEVsZW1lbnRJbm5lckhUTUw6Ci0gICAg
cmV0dXJuIFN0cmluZyhlbGVtZW50LmlubmVySFRNTCgpKTsKLSAgY2FzZSBFbGVtZW50SW5uZXJU
ZXh0OgotICAgIGlmIChEb2N1bWVudEltcGwqIGRvYyA9IGltcGwoKS0+Z2V0RG9jdW1lbnQoKSkK
LSAgICAgIGRvYy0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7Ci0gICAg
cmV0dXJuIFN0cmluZyhlbGVtZW50LmlubmVyVGV4dCgpKTsKLSAgY2FzZSBFbGVtZW50T3V0ZXJI
VE1MOgotICAgIHJldHVybiBTdHJpbmcoZWxlbWVudC5vdXRlckhUTUwoKSk7Ci0gIGNhc2UgRWxl
bWVudE91dGVyVGV4dDoKLSAgICByZXR1cm4gU3RyaW5nKGVsZW1lbnQub3V0ZXJUZXh0KCkpOwot
ICBjYXNlIEVsZW1lbnREb2N1bWVudDoKLSAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLGVsZW1l
bnQub3duZXJEb2N1bWVudCgpKTsKLSAgY2FzZSBFbGVtZW50Q2hpbGRyZW46Ci0gICAgcmV0dXJu
IGdldEhUTUxDb2xsZWN0aW9uKGV4ZWMsIGVsZW1lbnQuY2hpbGRyZW4oKS5nZXQoKSk7Ci0gIGNh
c2UgRWxlbWVudENvbnRlbnRFZGl0YWJsZToKLSAgICByZXR1cm4gU3RyaW5nKGVsZW1lbnQuY29u
dGVudEVkaXRhYmxlKCkpOwotICBjYXNlIEVsZW1lbnRJc0NvbnRlbnRFZGl0YWJsZToKLSAgICBy
ZXR1cm4gQm9vbGVhbihlbGVtZW50LmlzQ29udGVudEVkaXRhYmxlKCkpOwotICAvLyAjIyMgd2hh
dCBhYm91dCBzdHlsZT8gb3IgaXMgdGhpcyB1c2VkIGluc3RlYWQgZm9yIERPTTIgc3R5bGVzaGVl
dHM/Ci0gIH0KLSAga2RXYXJuaW5nKCkgPDwgIkhUTUxFbGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5
IHVuaGFuZGxlZCB0b2tlbiAiIDw8IHRva2VuIDw8IGVuZGw7Ci0gIHJldHVybiBVbmRlZmluZWQo
KTsKK1ZhbHVlIEhUTUxFbGVtZW50OjptYXJxdWVlR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50
IHRva2VuKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBGaW5kIG91dCB3aGF0IFdpbklFIGV4cG9z
ZXMgYXMgcHJvcGVydGllcyBhbmQgaW1wbGVtZW50IHRoaXMuCisgICAgcmV0dXJuIFVuZGVmaW5l
ZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICAvLyBDaGVjayBvdXIgc2V0IG9mIGdlbmVy
aWMgcHJvcGVydGllcyBmaXJzdC4KKyAgICBIVE1MRWxlbWVudEltcGwgJmVsZW1lbnQgPSAqc3Rh
dGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikg
eworICAgICAgICBjYXNlIEVsZW1lbnRJZDoKKyAgICAgICAgLy8gaWh0LmNvbSByZWxpZXMgb24g
dGhpcyB2YWx1ZSBiZWluZyAiIiB3aGVuIG5vIGlkIGlzIHByZXNlbnQuICBPdGhlciBicm93c2Vy
cyBkbyB0aGlzIGFzIHdlbGwuCisgICAgICAgIC8vIFNvIHdlIHVzZSBTdHJpbmcoKSBpbnN0ZWFk
IG9mIFN0cmluZygpIGhlcmUuCisgICAgICAgIHJldHVybiBTdHJpbmcoZWxlbWVudC5pZCgpKTsK
KyAgICAgICAgY2FzZSBFbGVtZW50VGl0bGU6CisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGVs
ZW1lbnQudGl0bGUoKSk7CisgICAgICAgIGNhc2UgRWxlbWVudExhbmc6CisgICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKGVsZW1lbnQubGFuZygpKTsKKyAgICAgICAgY2FzZSBFbGVtZW50RGlyOgor
ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhlbGVtZW50LmRpcigpKTsKKyAgICAgICAgY2FzZSBF
bGVtZW50Q2xhc3NOYW1lOgorICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhlbGVtZW50LmNsYXNz
TmFtZSgpKTsKKyAgICAgICAgY2FzZSBFbGVtZW50SW5uZXJIVE1MOgorICAgICAgICAgICAgcmV0
dXJuIFN0cmluZyhlbGVtZW50LmlubmVySFRNTCgpKTsKKyAgICAgICAgY2FzZSBFbGVtZW50SW5u
ZXJUZXh0OgorICAgICAgICAgICAgaWYgKERvY3VtZW50SW1wbCogZG9jID0gaW1wbCgpLT5nZXRE
b2N1bWVudCgpKQorICAgICAgICAgICAgICAgIGRvYy0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGlu
Z1N0eWxlc2hlZXRzKCk7CisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGVsZW1lbnQuaW5uZXJU
ZXh0KCkpOworICAgICAgICBjYXNlIEVsZW1lbnRPdXRlckhUTUw6CisgICAgICAgICAgICByZXR1
cm4gU3RyaW5nKGVsZW1lbnQub3V0ZXJIVE1MKCkpOworICAgICAgICBjYXNlIEVsZW1lbnRPdXRl
clRleHQ6CisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGVsZW1lbnQub3V0ZXJUZXh0KCkpOwor
ICAgICAgICBjYXNlIEVsZW1lbnREb2N1bWVudDoKKyAgICAgICAgICAgIHJldHVybiBnZXRET01O
b2RlKGV4ZWMsZWxlbWVudC5vd25lckRvY3VtZW50KCkpOworICAgICAgICBjYXNlIEVsZW1lbnRD
aGlsZHJlbjoKKyAgICAgICAgICAgIHJldHVybiBnZXRIVE1MQ29sbGVjdGlvbihleGVjLCBlbGVt
ZW50LmNoaWxkcmVuKCkuZ2V0KCkpOworICAgICAgICBjYXNlIEVsZW1lbnRDb250ZW50RWRpdGFi
bGU6CisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGVsZW1lbnQuY29udGVudEVkaXRhYmxlKCkp
OworICAgICAgICBjYXNlIEVsZW1lbnRJc0NvbnRlbnRFZGl0YWJsZToKKyAgICAgICAgICAgIHJl
dHVybiBCb29sZWFuKGVsZW1lbnQuaXNDb250ZW50RWRpdGFibGUoKSk7CisgICAgfQorCisgICAg
Ly8gTm93IGNoZWNrIHRoZSBwcm9wZXJ0aWVzIHNwZWNpZmljIHRvIG91ciBlbGVtZW50IHR5cGUu
CisgICAgY29uc3QgR2V0U2V0SW5mbyogaW5mbyA9IGdldFNldEluZm8oKTsKKyAgICBpZiAoaW5m
byAmJiBpbmZvLT5tX2dldHRlcikKKyAgICAgICAgcmV0dXJuICh0aGlzLT4qKGluZm8tPm1fZ2V0
dGVyKSkoZXhlYywgdG9rZW4pOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAogYm9vbCBL
SlM6OkhUTUxFbGVtZW50OjpoYXNPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElk
ZW50aWZpZXIgJnByb3BlcnR5TmFtZSkgY29uc3QKIHsKICNpZmRlZiBLSlNfVkVSQk9TRQotICAv
L2tkRGVidWcoNjA3MCkgPDwgIkhUTUxFbGVtZW50OjpoYXNQcm9wZXJ0eSAiIDw8IHByb3BlcnR5
TmFtZS5xc3RyaW5nKCkgPDwgZW5kbDsKKyAgICAvL2tkRGVidWcoNjA3MCkgPDwgIkhUTUxFbGVt
ZW50OjpoYXNQcm9wZXJ0eSAiIDw8IHByb3BlcnR5TmFtZS5xc3RyaW5nKCkgPDwgZW5kbDsKICNl
bmRpZgotICBIVE1MRWxlbWVudEltcGwgJmVsZW1lbnQgPSAqc3RhdGljX2Nhc3Q8SFRNTEVsZW1l
bnRJbXBsICo+KGltcGwoKSk7Ci0gIC8vIEZpcnN0IGxvb2sgYXQgZHluYW1pYyBwcm9wZXJ0aWVz
IC0ga2VlcCB0aGlzIGluIHN5bmMgd2l0aCB0cnlHZXQKLSAgc3dpdGNoIChlbGVtZW50LmlkKCkp
IHsKLSAgICBjYXNlIElEX0ZPUk06IHsKLSAgICAgIEhUTUxGb3JtRWxlbWVudEltcGwgJmZvcm0g
PSBzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgLy8g
Q2hlY2sgaWYgd2UncmUgcmV0cmlldmluZyBhbiBlbGVtZW50IChieSBpbmRleCBvciBieSBuYW1l
KQotICAgICAgYm9vbCBvazsKLSAgICAgIHVpbnQgdSA9IHByb3BlcnR5TmFtZS50b1VMb25nKCZv
ayk7Ci0gICAgICBpZiAob2sgJiYgZm9ybS5lbGVtZW50cygpLT5pdGVtKHUpKQotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgIGlmIChmb3JtLmVsZW1lbnRzKCktPm5hbWVkSXRlbShwcm9wZXJ0
eU5hbWUuc3RyaW5nKCkpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIGJyZWFrOwotICAg
IH0KLSAgICBjYXNlIElEX1NFTEVDVDogewotICAgICAgSFRNTFNlbGVjdEVsZW1lbnRJbXBsICZz
ZWxlY3QgPSBzdGF0aWNfY2FzdDxIVE1MU2VsZWN0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0g
ICAgICBib29sIG9rOwotICAgICAgdWludCB1ID0gcHJvcGVydHlOYW1lLnRvVUxvbmcoJm9rKTsK
LSAgICAgIGlmIChvayAmJiBzZWxlY3Qub3B0aW9uc0hUTUxDb2xsZWN0aW9uKCktPml0ZW0odSkp
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgSURf
SU5QVVQ6IHsKLSAgICAgIEhUTUxJbnB1dEVsZW1lbnRJbXBsICZpbnB1dCA9IHN0YXRpY19jYXN0
PEhUTUxJbnB1dEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgY29uc3QgSGFzaFRhYmxl
KiB0YWJsZSA9IGNsYXNzSW5mbygpLT5wcm9wSGFzaFRhYmxlOwotICAgICAgY29uc3QgSGFzaEVu
dHJ5KiBlbnRyeSA9IExvb2t1cDo6ZmluZEVudHJ5KHRhYmxlLCBwcm9wZXJ0eU5hbWUpOwotICAg
ICAgaWYgKGVudHJ5KSB7Ci0gICAgICAgIHN3aXRjaChlbnRyeS0+dmFsdWUpIHsKLSAgICAgICAg
ICBjYXNlIElucHV0U2VsZWN0aW9uU3RhcnQ6Ci0gICAgICAgICAgY2FzZSBJbnB1dFNlbGVjdGlv
bkVuZDoKLSAgICAgICAgICBjYXNlIElucHV0U2V0U2VsZWN0aW9uUmFuZ2U6Ci0gICAgICAgICAg
ICByZXR1cm4gaW5wdXQuY2FuSGF2ZVNlbGVjdGlvbigpOwotICAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICBicmVhazsKKyAgICBIVE1MRWxlbWVudEltcGwgJmVsZW1lbnQgPSAqc3RhdGlj
X2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KGltcGwoKSk7CisgICAgLy8gRmlyc3QgbG9vayBhdCBk
eW5hbWljIHByb3BlcnRpZXMgLSBrZWVwIHRoaXMgaW4gc3luYyB3aXRoIHRyeUdldAorICAgIGlm
IChlbGVtZW50Lmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmZvcm0oKSkpIHsKKyAgICAgICAgSFRN
TEZvcm1FbGVtZW50SW1wbCAmZm9ybSA9IHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudEltcGwg
Jj4oZWxlbWVudCk7CisgICAgICAgIC8vIENoZWNrIGlmIHdlJ3JlIHJldHJpZXZpbmcgYW4gZWxl
bWVudCAoYnkgaW5kZXggb3IgYnkgbmFtZSkKKyAgICAgICAgYm9vbCBvazsKKyAgICAgICAgdWlu
dCB1ID0gcHJvcGVydHlOYW1lLnRvVUxvbmcoJm9rKTsKKyAgICAgICAgaWYgKG9rICYmIGZvcm0u
ZWxlbWVudHMoKS0+aXRlbSh1KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBp
ZiAoZm9ybS5lbGVtZW50cygpLT5uYW1lZEl0ZW0ocHJvcGVydHlOYW1lLnN0cmluZygpKSkKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBlbHNlIGlmIChlbGVtZW50Lmhhc0xv
Y2FsTmFtZShIVE1MTmFtZXM6OnNlbGVjdCgpKSkgeworICAgICAgICBIVE1MU2VsZWN0RWxlbWVu
dEltcGwgJnNlbGVjdCA9IHN0YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50SW1wbCAmPihlbGVt
ZW50KTsKKyAgICAgICAgYm9vbCBvazsKKyAgICAgICAgdWludCB1ID0gcHJvcGVydHlOYW1lLnRv
VUxvbmcoJm9rKTsKKyAgICAgICAgaWYgKG9rICYmIHNlbGVjdC5vcHRpb25zSFRNTENvbGxlY3Rp
b24oKS0+aXRlbSh1KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBlbHNl
IGlmIChlbGVtZW50Lmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmlucHV0KCkpKSB7CisgICAgICAg
IEhUTUxJbnB1dEVsZW1lbnRJbXBsICZpbnB1dCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1l
bnRJbXBsICY+KGVsZW1lbnQpOworICAgICAgICBjb25zdCBIYXNoVGFibGUqIHRhYmxlID0gY2xh
c3NJbmZvKCktPnByb3BIYXNoVGFibGU7CisgICAgICAgIGNvbnN0IEhhc2hFbnRyeSogZW50cnkg
PSBMb29rdXA6OmZpbmRFbnRyeSh0YWJsZSwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgaWYgKGVu
dHJ5KSB7CisgICAgICAgICAgICBzd2l0Y2goZW50cnktPnZhbHVlKSB7CisgICAgICAgICAgICBj
YXNlIElucHV0U2VsZWN0aW9uU3RhcnQ6CisgICAgICAgICAgICBjYXNlIElucHV0U2VsZWN0aW9u
RW5kOgorICAgICAgICAgICAgY2FzZSBJbnB1dFNldFNlbGVjdGlvblJhbmdlOgorICAgICAgICAg
ICAgICAgIHJldHVybiBpbnB1dC5jYW5IYXZlU2VsZWN0aW9uKCk7CisgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICB9Ci0g
ICAgICB9Ci0gICAgICBicmVhazsKICAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOwot
ICB9CiAKLSAgcmV0dXJuIERPTUVsZW1lbnQ6Omhhc093blByb3BlcnR5KGV4ZWMsIHByb3BlcnR5
TmFtZSk7CisgICAgcmV0dXJuIERPTUVsZW1lbnQ6Omhhc093blByb3BlcnR5KGV4ZWMsIHByb3Bl
cnR5TmFtZSk7CiB9CiAKIFVTdHJpbmcgS0pTOjpIVE1MRWxlbWVudDo6dG9TdHJpbmcoRXhlY1N0
YXRlICpleGVjKSBjb25zdAogewotICBpZiAoaW1wbCgpLT5pZCgpID09IElEX0EpCi0gICAgcmV0
dXJuIFVTdHJpbmcoc3RhdGljX2Nhc3Q8Y29uc3QgSFRNTEFuY2hvckVsZW1lbnRJbXBsICo+KGlt
cGwoKSktPmhyZWYoKSk7Ci0gIGVsc2UKLSAgICByZXR1cm4gRE9NRWxlbWVudDo6dG9TdHJpbmco
ZXhlYyk7CisgICAgaWYgKGltcGwoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmEoKSkpCisgICAg
ICAgIHJldHVybiBVU3RyaW5nKHN0YXRpY19jYXN0PGNvbnN0IEhUTUxBbmNob3JFbGVtZW50SW1w
bCAqPihpbXBsKCkpLT5ocmVmKCkpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIERPTUVsZW1l
bnQ6OnRvU3RyaW5nKGV4ZWMpOwogfQogCiBzdGF0aWMgSFRNTEZvcm1FbGVtZW50SW1wbCAqZ2V0
Rm9ybShIVE1MRWxlbWVudEltcGwgKmVsZW1lbnQpCiB7Ci0gIGlmIChlbGVtZW50LT5pc0dlbmVy
aWNGb3JtRWxlbWVudCgpKQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MR2VuZXJpY0Zvcm1F
bGVtZW50SW1wbCAqPihlbGVtZW50KS0+Zm9ybSgpOwotCi0gIHN3aXRjaCAoZWxlbWVudC0+aWQo
KSkgewotICAgIGNhc2UgSURfTEFCRUw6Ci0gICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTExh
YmVsRWxlbWVudEltcGwgKj4oZWxlbWVudCktPmZvcm0oKTsKLSAgICBjYXNlIElEX09CSkVDVDoK
LSAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MT2JqZWN0RWxlbWVudEltcGwgKj4oZWxlbWVu
dCktPmZvcm0oKTsKLSAgfQorICAgIGlmIChlbGVtZW50LT5pc0dlbmVyaWNGb3JtRWxlbWVudCgp
KQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwg
Kj4oZWxlbWVudCktPmZvcm0oKTsKKyAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OmxhYmVsKCkpKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTExhYmVsRWxlbWVu
dEltcGwgKj4oZWxlbWVudCktPmZvcm0oKTsKKyAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6Om9iamVjdCgpKSkKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxPYmpl
Y3RFbGVtZW50SW1wbCAqPihlbGVtZW50KS0+Zm9ybSgpOwogCi0gIHJldHVybiAwOworICAgIHJl
dHVybiAwOwogfQogCiB2b2lkIEtKUzo6SFRNTEVsZW1lbnQ6OnB1c2hFdmVudEhhbmRsZXJTY29w
ZShFeGVjU3RhdGUgKmV4ZWMsIFNjb3BlQ2hhaW4gJnNjb3BlKSBjb25zdApAQCAtMjE0Miw3ICsy
Mjk2LDcgQEAgdm9pZCBLSlM6OkhUTUxFbGVtZW50OjpwdXNoRXZlbnRIYW5kbGVyUwogICAgIHNj
b3BlLnB1c2goc3RhdGljX2Nhc3Q8T2JqZWN0SW1wICo+KGdldERPTU5vZGUoZXhlYywgZm9ybSkp
KTsKICAgZWxzZSB7CiAgICAgTm9kZUltcGwgKmZvcm0gPSBlbGVtZW50LT5wYXJlbnROb2RlKCk7
Ci0gICAgd2hpbGUgKGZvcm0gJiYgZm9ybS0+aWQoKSAhPSBJRF9GT1JNKQorICAgIHdoaWxlIChm
b3JtICYmICFmb3JtLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Zm9ybSgpKSkKICAgICAgIGZvcm0g
PSBmb3JtLT5wYXJlbnROb2RlKCk7CiAgICAgCiAgICAgaWYgKGZvcm0pCkBAIC0yMTYyLDE4OCAr
MjMxNiwxNzMgQEAgSFRNTEVsZW1lbnRGdW5jdGlvbjo6SFRNTEVsZW1lbnRGdW5jdGlvbgogCiBW
YWx1ZSBLSlM6OkhUTUxFbGVtZW50RnVuY3Rpb246OnRyeUNhbGwoRXhlY1N0YXRlICpleGVjLCBP
YmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3MpCiB7Ci0gIGlmICghdGhpc09iai5pbmhl
cml0cygmS0pTOjpIVE1MRWxlbWVudDo6aW5mbykpIHsKLSAgICBPYmplY3QgZXJyID0gRXJyb3I6
OmNyZWF0ZShleGVjLFR5cGVFcnJvcik7Ci0gICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7Ci0g
ICAgcmV0dXJuIGVycjsKLSAgfQotICBrZERlYnVnKCkgPDwgIktKUzo6SFRNTEVsZW1lbnRGdW5j
dGlvbjo6dHJ5Q2FsbCAiIDw8IGVuZGw7Ci0gIERPTUV4Y2VwdGlvblRyYW5zbGF0b3IgZXhjZXB0
aW9uKGV4ZWMpOwotICBIVE1MRWxlbWVudEltcGwgJmVsZW1lbnQgPSAqc3RhdGljX2Nhc3Q8SFRN
TEVsZW1lbnRJbXBsICo+KHN0YXRpY19jYXN0PEhUTUxFbGVtZW50ICo+KHRoaXNPYmouaW1wKCkp
LT5pbXBsKCkpOwotCi0gIHN3aXRjaCAoZWxlbWVudC5pZCgpKSB7Ci0gICAgY2FzZSBJRF9GT1JN
OiB7Ci0gICAgICBIVE1MRm9ybUVsZW1lbnRJbXBsICZmb3JtID0gc3RhdGljX2Nhc3Q8SFRNTEZv
cm1FbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVt
ZW50OjpGb3JtU3VibWl0KSB7Ci0gICAgICAgIGZvcm0uc3VibWl0KCk7Ci0gICAgICAgIHJldHVy
biBVbmRlZmluZWQoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVs
ZW1lbnQ6OkZvcm1SZXNldCkgewotICAgICAgICBmb3JtLnJlc2V0KCk7Ci0gICAgICAgIHJldHVy
biBVbmRlZmluZWQoKTsKLSAgICAgIH0KKyAgICBpZiAoIXRoaXNPYmouaW5oZXJpdHMoJktKUzo6
SFRNTEVsZW1lbnQ6OmluZm8pKSB7CisgICAgICAgIE9iamVjdCBlcnIgPSBFcnJvcjo6Y3JlYXRl
KGV4ZWMsVHlwZUVycm9yKTsKKyAgICAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKGVycik7CisgICAg
ICAgIHJldHVybiBlcnI7CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfU0VMRUNUOiB7
Ci0gICAgICBIVE1MU2VsZWN0RWxlbWVudEltcGwgJnNlbGVjdCA9IHN0YXRpY19jYXN0PEhUTUxT
ZWxlY3RFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIGlmIChpZCA9PSBLSlM6OkhUTUxF
bGVtZW50OjpTZWxlY3RBZGQpIHsKLSAgICAgICAgc2VsZWN0LmFkZCh0b0hUTUxFbGVtZW50KGFy
Z3NbMF0pLCB0b0hUTUxFbGVtZW50KGFyZ3NbMV0pKTsKLSAgICAgICAgcmV0dXJuIFVuZGVmaW5l
ZCgpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6U2Vs
ZWN0UmVtb3ZlKSB7Ci0gICAgICAgIHNlbGVjdC5yZW1vdmUoaW50KGFyZ3NbMF0udG9OdW1iZXIo
ZXhlYykpKTsKLSAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwotICAgICAgfQotICAgICAgZWxz
ZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6U2VsZWN0Qmx1cikgewotICAgICAgICBzZWxl
Y3QuYmx1cigpOwotICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9Ci0gICAgICBl
bHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpTZWxlY3RGb2N1cykgewotICAgICAgICBz
ZWxlY3QuZm9jdXMoKTsKLSAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwotICAgICAgfQorICAg
IGtkRGVidWcoKSA8PCAiS0pTOjpIVE1MRWxlbWVudEZ1bmN0aW9uOjp0cnlDYWxsICIgPDwgZW5k
bDsKKyAgICBET01FeGNlcHRpb25UcmFuc2xhdG9yIGV4Y2VwdGlvbihleGVjKTsKKyAgICBIVE1M
RWxlbWVudEltcGwgJmVsZW1lbnQgPSAqc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KHN0
YXRpY19jYXN0PEhUTUxFbGVtZW50ICo+KHRoaXNPYmouaW1wKCkpLT5pbXBsKCkpOworCisgICAg
aWYgKGVsZW1lbnQuaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6Zm9ybSgpKSkgeworICAgICAgICBI
VE1MRm9ybUVsZW1lbnRJbXBsICZmb3JtID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50SW1w
bCAmPihlbGVtZW50KTsKKyAgICAgICAgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OkZvcm1T
dWJtaXQpIHsKKyAgICAgICAgICAgIGZvcm0uc3VibWl0KCk7CisgICAgICAgICAgICByZXR1cm4g
VW5kZWZpbmVkKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1M
RWxlbWVudDo6Rm9ybVJlc2V0KSB7CisgICAgICAgICAgICBmb3JtLnJlc2V0KCk7CisgICAgICAg
ICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CisgICAgICAgIH0KICAgICB9Ci0gICAgYnJlYWs7Ci0g
ICAgY2FzZSBJRF9JTlBVVDogewotICAgICAgSFRNTElucHV0RWxlbWVudEltcGwgJmlucHV0ID0g
c3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBpZiAo
aWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6SW5wdXRCbHVyKSB7Ci0gICAgICAgIGlucHV0LmJsdXIo
KTsKLSAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAo
aWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6SW5wdXRGb2N1cykgewotICAgICAgICBpbnB1dC5mb2N1
cygpOwotICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlm
IChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpJbnB1dFNlbGVjdCkgewotICAgICAgICBpbnB1dC5z
ZWxlY3QoKTsKLSAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwotICAgICAgfQotICAgICAgZWxz
ZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6SW5wdXRDbGljaykgewotICAgICAgICBpbnB1
dC5jbGljaygpOwotICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9Ci0gICAgICBl
bHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpJbnB1dFNldFNlbGVjdGlvblJhbmdlKSB7
Ci0gICAgICAgIGlucHV0LnNldFNlbGVjdGlvblJhbmdlKGFyZ3NbMF0udG9JbnQzMihleGVjKSwg
YXJnc1sxXS50b0ludDMyKGV4ZWMpKTsKLSAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwotICAg
ICAgfQorICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6c2VsZWN0
KCkpKSB7CisgICAgICAgIEhUTUxTZWxlY3RFbGVtZW50SW1wbCAmc2VsZWN0ID0gc3RhdGljX2Nh
c3Q8SFRNTFNlbGVjdEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgICAgICBpZiAoaWQgPT0g
S0pTOjpIVE1MRWxlbWVudDo6U2VsZWN0QWRkKSB7CisgICAgICAgICAgICBzZWxlY3QuYWRkKHRv
SFRNTEVsZW1lbnQoYXJnc1swXSksIHRvSFRNTEVsZW1lbnQoYXJnc1sxXSkpOworICAgICAgICAg
ICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGlkID09
IEtKUzo6SFRNTEVsZW1lbnQ6OlNlbGVjdFJlbW92ZSkgeworICAgICAgICAgICAgc2VsZWN0LnJl
bW92ZShpbnQoYXJnc1swXS50b051bWJlcihleGVjKSkpOworICAgICAgICAgICAgcmV0dXJuIFVu
ZGVmaW5lZCgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVs
ZW1lbnQ6OlNlbGVjdEJsdXIpIHsKKyAgICAgICAgICAgIHNlbGVjdC5ibHVyKCk7CisgICAgICAg
ICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoaWQg
PT0gS0pTOjpIVE1MRWxlbWVudDo6U2VsZWN0Rm9jdXMpIHsKKyAgICAgICAgICAgIHNlbGVjdC5m
b2N1cygpOworICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAgICAgICB9CiAgICAg
fQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfTEFCRUw6IHsKLSAgICAgIEhUTUxMYWJlbEVsZW1l
bnRJbXBsICZsYWJlbCA9IHN0YXRpY19jYXN0PEhUTUxMYWJlbEVsZW1lbnRJbXBsICY+KGVsZW1l
bnQpOwotICAgICAgCi0gICAgICBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6TGFiZWxGb2N1
cykgewotICAgICAgICAgIGxhYmVsLmZvY3VzKCk7Ci0gICAgICAgICAgcmV0dXJuIFVuZGVmaW5l
ZCgpOwotICAgICAgfQorICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFzTG9jYWxOYW1lKEhUTUxOYW1l
czo6aW5wdXQoKSkpIHsKKyAgICAgICAgSFRNTElucHV0RWxlbWVudEltcGwgJmlucHV0ID0gc3Rh
dGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgICAgIGlmIChp
ZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpJbnB1dEJsdXIpIHsKKyAgICAgICAgICAgIGlucHV0LmJs
dXIoKTsKKyAgICAgICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKKyAgICAgICAgfQorICAgICAg
ICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpJbnB1dEZvY3VzKSB7CisgICAgICAg
ICAgICBpbnB1dC5mb2N1cygpOworICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAg
ICAgICB9CisgICAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OklucHV0U2Vs
ZWN0KSB7CisgICAgICAgICAgICBpbnB1dC5zZWxlY3QoKTsKKyAgICAgICAgICAgIHJldHVybiBV
bmRlZmluZWQoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxF
bGVtZW50OjpJbnB1dENsaWNrKSB7CisgICAgICAgICAgICBpbnB1dC5jbGljaygpOworICAgICAg
ICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGlk
ID09IEtKUzo6SFRNTEVsZW1lbnQ6OklucHV0U2V0U2VsZWN0aW9uUmFuZ2UpIHsKKyAgICAgICAg
ICAgIGlucHV0LnNldFNlbGVjdGlvblJhbmdlKGFyZ3NbMF0udG9JbnQzMihleGVjKSwgYXJnc1sx
XS50b0ludDMyKGV4ZWMpKTsKKyAgICAgICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKKyAgICAg
ICAgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0xFR0VORDogewotICAgICAgSFRN
TExlZ2VuZEVsZW1lbnRJbXBsICZsZWdlbmQgPSBzdGF0aWNfY2FzdDxIVE1MTGVnZW5kRWxlbWVu
dEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICAgIAotICAgICAgaWYgKGlkID09IEtKUzo6SFRNTEVs
ZW1lbnQ6OkxlZ2VuZEZvY3VzKSB7Ci0gICAgICAgICAgbGVnZW5kLmZvY3VzKCk7Ci0gICAgICAg
ICAgcmV0dXJuIFVuZGVmaW5lZCgpOwotICAgICAgfQorICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFz
TG9jYWxOYW1lKEhUTUxOYW1lczo6YnV0dG9uKCkpKSB7CisgICAgICAgIEhUTUxCdXR0b25FbGVt
ZW50SW1wbCAmYnV0dG9uID0gc3RhdGljX2Nhc3Q8SFRNTEJ1dHRvbkVsZW1lbnRJbXBsICY+KGVs
ZW1lbnQpOworICAgICAgICBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6QnV0dG9uQmx1cikg
eworICAgICAgICAgICAgYnV0dG9uLmJsdXIoKTsKKyAgICAgICAgICAgIHJldHVybiBVbmRlZmlu
ZWQoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50
OjpCdXR0b25Gb2N1cykgeworICAgICAgICAgICAgYnV0dG9uLmZvY3VzKCk7CisgICAgICAgICAg
ICByZXR1cm4gVW5kZWZpbmVkKCk7CisgICAgICAgIH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAg
Y2FzZSBJRF9CVVRUT046IHsKLSAgICAgIEhUTUxCdXR0b25FbGVtZW50SW1wbCAmYnV0dG9uID0g
c3RhdGljX2Nhc3Q8SFRNTEJ1dHRvbkVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgCi0g
ICAgICBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6QnV0dG9uQmx1cikgewotICAgICAgICBi
dXR0b24uYmx1cigpOwotICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9Ci0gICAg
ICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpCdXR0b25Gb2N1cykgewotICAgICAg
ICBidXR0b24uZm9jdXMoKTsKLSAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwotICAgICAgfQor
ICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6bGFiZWwoKSkpIHsK
KyAgICAgICAgSFRNTExhYmVsRWxlbWVudEltcGwgJmxhYmVsID0gc3RhdGljX2Nhc3Q8SFRNTExh
YmVsRWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgICAgIGlmIChpZCA9PSBLSlM6OkhUTUxF
bGVtZW50OjpMYWJlbEZvY3VzKSB7CisgICAgICAgICAgICBsYWJlbC5mb2N1cygpOworICAgICAg
ICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAgICAgICB9CiAgICAgfQotICAgIGJyZWFrOwot
ICAgIGNhc2UgSURfVEVYVEFSRUE6IHsKLSAgICAgIEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBsICZ0
ZXh0YXJlYSA9IHN0YXRpY19jYXN0PEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBsICY+KGVsZW1lbnQp
OwotICAgICAgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRleHRBcmVhQmx1cikgewotICAg
ICAgICB0ZXh0YXJlYS5ibHVyKCk7Ci0gICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKLSAgICAg
IH0KLSAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRleHRBcmVhRm9jdXMp
IHsKLSAgICAgICAgdGV4dGFyZWEuZm9jdXMoKTsKLSAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgp
OwotICAgICAgfQotICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6VGV4dEFy
ZWFTZWxlY3QpIHsKLSAgICAgICAgdGV4dGFyZWEuc2VsZWN0KCk7Ci0gICAgICAgIHJldHVybiBV
bmRlZmluZWQoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1l
bnQ6OlRleHRBcmVhU2V0U2VsZWN0aW9uUmFuZ2UpIHsKLSAgICAgICAgdGV4dGFyZWEuc2V0U2Vs
ZWN0aW9uUmFuZ2UoYXJnc1swXS50b0ludDMyKGV4ZWMpLCBhcmdzWzFdLnRvSW50MzIoZXhlYykp
OwotICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9CisgICAgZWxzZSBpZiAoZWxl
bWVudC5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpsZWdlbmQoKSkpIHsKKyAgICAgICAgSFRNTExl
Z2VuZEVsZW1lbnRJbXBsICZsZWdlbmQgPSBzdGF0aWNfY2FzdDxIVE1MTGVnZW5kRWxlbWVudElt
cGwgJj4oZWxlbWVudCk7CisgICAgICAgIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpMZWdl
bmRGb2N1cykgeworICAgICAgICAgICAgbGVnZW5kLmZvY3VzKCk7CisgICAgICAgICAgICByZXR1
cm4gVW5kZWZpbmVkKCk7CisgICAgICAgIH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJ
RF9BOiB7Ci0gICAgICBIVE1MQW5jaG9yRWxlbWVudEltcGwgJmFuY2hvciA9IHN0YXRpY19jYXN0
PEhUTUxBbmNob3JFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIGlmIChpZCA9PSBLSlM6
OkhUTUxFbGVtZW50OjpBbmNob3JCbHVyKSB7Ci0gICAgICAgIGFuY2hvci5ibHVyKCk7Ci0gICAg
ICAgIHJldHVybiBVbmRlZmluZWQoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGlkID09IEtK
Uzo6SFRNTEVsZW1lbnQ6OkFuY2hvckZvY3VzKSB7Ci0gICAgICAgIGFuY2hvci5mb2N1cygpOwot
ICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9IAotICAgICAgZWxzZSBpZiAoaWQg
PT0gS0pTOjpIVE1MRWxlbWVudDo6QW5jaG9yVG9TdHJpbmcpIHsKLQlyZXR1cm4gU3RyaW5nKHRo
aXNPYmoudG9TdHJpbmcoZXhlYykpOwotICAgICAgfQorICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFz
TG9jYWxOYW1lKEhUTUxOYW1lczo6dGV4dGFyZWEoKSkpIHsKKyAgICAgICAgSFRNTFRleHRBcmVh
RWxlbWVudEltcGwgJnRleHRhcmVhID0gc3RhdGljX2Nhc3Q8SFRNTFRleHRBcmVhRWxlbWVudElt
cGwgJj4oZWxlbWVudCk7CisgICAgICAgIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUZXh0
QXJlYUJsdXIpIHsKKyAgICAgICAgICAgIHRleHRhcmVhLmJsdXIoKTsKKyAgICAgICAgICAgIHJl
dHVybiBVbmRlZmluZWQoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChpZCA9PSBLSlM6
OkhUTUxFbGVtZW50OjpUZXh0QXJlYUZvY3VzKSB7CisgICAgICAgICAgICB0ZXh0YXJlYS5mb2N1
cygpOworICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAgICAgICB9CisgICAgICAg
IGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRleHRBcmVhU2VsZWN0KSB7CisgICAg
ICAgICAgICB0ZXh0YXJlYS5zZWxlY3QoKTsKKyAgICAgICAgICAgIHJldHVybiBVbmRlZmluZWQo
KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpU
ZXh0QXJlYVNldFNlbGVjdGlvblJhbmdlKSB7CisgICAgICAgICAgICB0ZXh0YXJlYS5zZXRTZWxl
Y3Rpb25SYW5nZShhcmdzWzBdLnRvSW50MzIoZXhlYyksIGFyZ3NbMV0udG9JbnQzMihleGVjKSk7
CisgICAgICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CisgICAgICAgIH0KICAgICB9Ci0gICAg
YnJlYWs7Ci0gICAgY2FzZSBJRF9UQUJMRTogewotICAgICAgSFRNTFRhYmxlRWxlbWVudEltcGwg
JnRhYmxlID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0g
ICAgICBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6VGFibGVDcmVhdGVUSGVhZCkKLSAgICAg
ICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyx0YWJsZS5jcmVhdGVUSGVhZCgpKTsKLSAgICAgIGVs
c2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRhYmxlRGVsZXRlVEhlYWQpIHsKLSAgICAg
ICAgdGFibGUuZGVsZXRlVEhlYWQoKTsKLSAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwotICAg
ICAgfQotICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6VGFibGVDcmVhdGVU
Rm9vdCkKLSAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyx0YWJsZS5jcmVhdGVURm9vdCgp
KTsKLSAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRhYmxlRGVsZXRlVEZv
b3QpIHsKLSAgICAgICAgdGFibGUuZGVsZXRlVEZvb3QoKTsKLSAgICAgICAgcmV0dXJuIFVuZGVm
aW5lZCgpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6
VGFibGVDcmVhdGVDYXB0aW9uKQotICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLHRhYmxl
LmNyZWF0ZUNhcHRpb24oKSk7Ci0gICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50
OjpUYWJsZURlbGV0ZUNhcHRpb24pIHsKLSAgICAgICAgdGFibGUuZGVsZXRlQ2FwdGlvbigpOwot
ICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChpZCA9
PSBLSlM6OkhUTUxFbGVtZW50OjpUYWJsZUluc2VydFJvdykKLSAgICAgICAgcmV0dXJuIGdldERP
TU5vZGUoZXhlYyx0YWJsZS5pbnNlcnRSb3coYXJnc1swXS50b0ludDMyKGV4ZWMpLCBleGNlcHRp
b24pKTsKLSAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRhYmxlRGVsZXRl
Um93KSB7Ci0gICAgICAgIHRhYmxlLmRlbGV0ZVJvdyhhcmdzWzBdLnRvSW50MzIoZXhlYyksIGV4
Y2VwdGlvbik7Ci0gICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKLSAgICAgIH0KKyAgICBlbHNl
IGlmIChlbGVtZW50Lmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmEoKSkpIHsKKyAgICAgICAgSFRN
TEFuY2hvckVsZW1lbnRJbXBsICZhbmNob3IgPSBzdGF0aWNfY2FzdDxIVE1MQW5jaG9yRWxlbWVu
dEltcGwgJj4oZWxlbWVudCk7CisgICAgICAgIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpB
bmNob3JCbHVyKSB7CisgICAgICAgICAgICBhbmNob3IuYmx1cigpOworICAgICAgICAgICAgcmV0
dXJuIFVuZGVmaW5lZCgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6
SFRNTEVsZW1lbnQ6OkFuY2hvckZvY3VzKSB7CisgICAgICAgICAgICBhbmNob3IuZm9jdXMoKTsK
KyAgICAgICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNl
IGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpBbmNob3JUb1N0cmluZykKKyAgICAgICAgICAg
IHJldHVybiBTdHJpbmcodGhpc09iai50b1N0cmluZyhleGVjKSk7CiAgICAgfQotICAgIGJyZWFr
OwotICAgIGNhc2UgSURfVEhFQUQ6Ci0gICAgY2FzZSBJRF9UQk9EWToKLSAgICBjYXNlIElEX1RG
T09UOiB7Ci0gICAgICBIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGwgJnRhYmxlU2VjdGlvbiA9
IHN0YXRpY19jYXN0PEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAg
ICAgIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUYWJsZVNlY3Rpb25JbnNlcnRSb3cpCi0g
ICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsIHRhYmxlU2VjdGlvbi5pbnNlcnRSb3coYXJn
c1swXS50b0ludDMyKGV4ZWMpLCBleGNlcHRpb24pKTsKLSAgICAgIGVsc2UgaWYgKGlkID09IEtK
Uzo6SFRNTEVsZW1lbnQ6OlRhYmxlU2VjdGlvbkRlbGV0ZVJvdykgewotICAgICAgICB0YWJsZVNl
Y3Rpb24uZGVsZXRlUm93KGFyZ3NbMF0udG9JbnQzMihleGVjKSwgZXhjZXB0aW9uKTsKLSAgICAg
ICAgcmV0dXJuIFVuZGVmaW5lZCgpOwotICAgICAgfQorICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFz
TG9jYWxOYW1lKEhUTUxOYW1lczo6dGFibGUoKSkpIHsKKyAgICAgICAgSFRNTFRhYmxlRWxlbWVu
dEltcGwgJnRhYmxlID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlRWxlbWVudEltcGwgJj4oZWxlbWVu
dCk7CisgICAgICAgIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUYWJsZUNyZWF0ZVRIZWFk
KQorICAgICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyx0YWJsZS5jcmVhdGVUSGVhZCgp
KTsKKyAgICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6VGFibGVEZWxldGVU
SGVhZCkgeworICAgICAgICAgICAgdGFibGUuZGVsZXRlVEhlYWQoKTsKKyAgICAgICAgICAgIHJl
dHVybiBVbmRlZmluZWQoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChpZCA9PSBLSlM6
OkhUTUxFbGVtZW50OjpUYWJsZUNyZWF0ZVRGb290KQorICAgICAgICAgICAgcmV0dXJuIGdldERP
TU5vZGUoZXhlYyx0YWJsZS5jcmVhdGVURm9vdCgpKTsKKyAgICAgICAgZWxzZSBpZiAoaWQgPT0g
S0pTOjpIVE1MRWxlbWVudDo6VGFibGVEZWxldGVURm9vdCkgeworICAgICAgICAgICAgdGFibGUu
ZGVsZXRlVEZvb3QoKTsKKyAgICAgICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKKyAgICAgICAg
fQorICAgICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUYWJsZUNyZWF0ZUNh
cHRpb24pCisgICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLHRhYmxlLmNyZWF0ZUNh
cHRpb24oKSk7CisgICAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRhYmxl
RGVsZXRlQ2FwdGlvbikgeworICAgICAgICAgICAgdGFibGUuZGVsZXRlQ2FwdGlvbigpOworICAg
ICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYg
KGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRhYmxlSW5zZXJ0Um93KQorICAgICAgICAgICAgcmV0
dXJuIGdldERPTU5vZGUoZXhlYyx0YWJsZS5pbnNlcnRSb3coYXJnc1swXS50b0ludDMyKGV4ZWMp
LCBleGNlcHRpb24pKTsKKyAgICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6
VGFibGVEZWxldGVSb3cpIHsKKyAgICAgICAgICAgIHRhYmxlLmRlbGV0ZVJvdyhhcmdzWzBdLnRv
SW50MzIoZXhlYyksIGV4Y2VwdGlvbik7CisgICAgICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7
CisgICAgICAgIH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9UUjogewotICAgICAg
SFRNTFRhYmxlUm93RWxlbWVudEltcGwgJnRhYmxlUm93ID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxl
Um93RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBpZiAoaWQgPT0gS0pTOjpIVE1MRWxl
bWVudDo6VGFibGVSb3dJbnNlcnRDZWxsKQotICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVj
LHRhYmxlUm93Lmluc2VydENlbGwoYXJnc1swXS50b0ludDMyKGV4ZWMpLCBleGNlcHRpb24pKTsK
LSAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRhYmxlUm93RGVsZXRlQ2Vs
bCkgewotICAgICAgICB0YWJsZVJvdy5kZWxldGVDZWxsKGFyZ3NbMF0udG9JbnQzMihleGVjKSwg
ZXhjZXB0aW9uKTsKLSAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwotICAgICAgfQorICAgIGVs
c2UgaWYgKGVsZW1lbnQuaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dGhlYWQoKSkgfHwKKyAgICAg
ICAgICAgICBlbGVtZW50Lmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnRib2R5KCkpIHx8CisgICAg
ICAgICAgICAgZWxlbWVudC5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0Zm9vdCgpKSkgeworICAg
ICAgICBIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGwgJnRhYmxlU2VjdGlvbiA9IHN0YXRpY19j
YXN0PEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICAgICAgaWYg
KGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRhYmxlU2VjdGlvbkluc2VydFJvdykKKyAgICAgICAg
ICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsIHRhYmxlU2VjdGlvbi5pbnNlcnRSb3coYXJnc1sw
XS50b0ludDMyKGV4ZWMpLCBleGNlcHRpb24pKTsKKyAgICAgICAgZWxzZSBpZiAoaWQgPT0gS0pT
OjpIVE1MRWxlbWVudDo6VGFibGVTZWN0aW9uRGVsZXRlUm93KSB7CisgICAgICAgICAgICB0YWJs
ZVNlY3Rpb24uZGVsZXRlUm93KGFyZ3NbMF0udG9JbnQzMihleGVjKSwgZXhjZXB0aW9uKTsKKyAg
ICAgICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKKyAgICAgICAgfQogICAgIH0KLSAgICBjYXNl
IElEX01BUlFVRUU6IHsKKyAgICBlbHNlIGlmIChlbGVtZW50Lmhhc0xvY2FsTmFtZShIVE1MTmFt
ZXM6OnRyKCkpKSB7CisgICAgICAgIEhUTUxUYWJsZVJvd0VsZW1lbnRJbXBsICZ0YWJsZVJvdyA9
IHN0YXRpY19jYXN0PEhUTUxUYWJsZVJvd0VsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgICAg
ICBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6VGFibGVSb3dJbnNlcnRDZWxsKQorICAgICAg
ICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyx0YWJsZVJvdy5pbnNlcnRDZWxsKGFyZ3NbMF0u
dG9JbnQzMihleGVjKSwgZXhjZXB0aW9uKSk7CisgICAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6
SFRNTEVsZW1lbnQ6OlRhYmxlUm93RGVsZXRlQ2VsbCkgeworICAgICAgICAgICAgdGFibGVSb3cu
ZGVsZXRlQ2VsbChhcmdzWzBdLnRvSW50MzIoZXhlYyksIGV4Y2VwdGlvbik7CisgICAgICAgICAg
ICByZXR1cm4gVW5kZWZpbmVkKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoZWxl
bWVudC5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjptYXJxdWVlKCkpKSB7CiAgICAgICAgIGlmIChp
ZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpNYXJxdWVlU3RhcnQgJiYgZWxlbWVudC5yZW5kZXJlcigp
ICYmIAogICAgICAgICAgICAgZWxlbWVudC5yZW5kZXJlcigpLT5sYXllcigpICYmCiAgICAgICAg
ICAgICBlbGVtZW50LnJlbmRlcmVyKCktPmxheWVyKCktPm1hcnF1ZWUoKSkgewpAQCAtMjM1MSwx
NCArMjQ5MCwxNCBAQCBWYWx1ZSBLSlM6OkhUTUxFbGVtZW50RnVuY3Rpb246OnRyeUNhbGwoCiAg
ICAgICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGlk
ID09IEtKUzo6SFRNTEVsZW1lbnQ6Ok1hcnF1ZWVTdG9wICYmIGVsZW1lbnQucmVuZGVyZXIoKSAm
JiAKLSAgICAgICAgICAgICAgICAgZWxlbWVudC5yZW5kZXJlcigpLT5sYXllcigpICYmCi0gICAg
ICAgICAgICAgICAgIGVsZW1lbnQucmVuZGVyZXIoKS0+bGF5ZXIoKS0+bWFycXVlZSgpKSB7Cisg
ICAgICAgICAgICBlbGVtZW50LnJlbmRlcmVyKCktPmxheWVyKCkgJiYKKyAgICAgICAgICAgIGVs
ZW1lbnQucmVuZGVyZXIoKS0+bGF5ZXIoKS0+bWFycXVlZSgpKSB7CiAgICAgICAgICAgICBlbGVt
ZW50LnJlbmRlcmVyKCktPmxheWVyKCktPm1hcnF1ZWUoKS0+c3RvcCgpOwogICAgICAgICAgICAg
cmV0dXJuIFVuZGVmaW5lZCgpOwogICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwogICAgIH0KLSAg
ICBjYXNlIElEX0NBTlZBUzogeworI2lmIEFQUExFX0NIQU5HRVMKKyAgICBlbHNlIGlmIChlbGVt
ZW50Lmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmNhbnZhcygpKSkgewogICAgICAgICBpZiAoaWQg
PT0gS0pTOjpIVE1MRWxlbWVudDo6R2V0Q29udGV4dCkgewogICAgICAgICAgICAgaWYgKGFyZ3Mu
c2l6ZSgpID09IDAgfHwgKGFyZ3Muc2l6ZSgpID09IDEgJiYgYXJnc1swXS50b1N0cmluZyhleGVj
KS5xc3RyaW5nKCkubG93ZXIoKSA9PSAiMmQiKSkgewogICAgICAgICAgICAgICAgIHJldHVybiBP
YmplY3QobmV3IENvbnRleHQyRCgmZWxlbWVudCkpOwpAQCAtMjM2Niw3NDIgKzI1MDUsNzY0IEBA
IFZhbHVlIEtKUzo6SFRNTEVsZW1lbnRGdW5jdGlvbjo6dHJ5Q2FsbCgKICAgICAgICAgICAgIHJl
dHVybiBVbmRlZmluZWQoKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKLSAgICBicmVhazsKLSAg
fQorI2VuZGlmCiAKLSAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAgIHJldHVybiBVbmRlZmluZWQo
KTsKIH0KIAogdm9pZCBLSlM6OkhUTUxFbGVtZW50Ojp0cnlQdXQoRXhlY1N0YXRlICpleGVjLCBj
b25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIGNvbnN0IFZhbHVlJiB2YWx1ZSwgaW50IGF0
dHIpCiB7CiAjaWZkZWYgS0pTX1ZFUkJPU0UKLSAgRE9NOjpET01TdHJpbmcgc3RyID0gdmFsdWUu
aXNBKE51bGxUeXBlKSA/IERPTTo6RE9NU3RyaW5nKCkgOiB2YWx1ZS50b1N0cmluZyhleGVjKS5z
dHJpbmcoKTsKKyAgICBET006OkRPTVN0cmluZyBzdHIgPSB2YWx1ZS5pc0EoTnVsbFR5cGUpID8g
RE9NOjpET01TdHJpbmcoKSA6IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpOwogI2VuZGlm
Ci0gIEhUTUxFbGVtZW50SW1wbCAmZWxlbWVudCA9ICpzdGF0aWNfY2FzdDxIVE1MRWxlbWVudElt
cGwgKj4oaW1wbCgpKTsKKyAgICBIVE1MRWxlbWVudEltcGwgJmVsZW1lbnQgPSAqc3RhdGljX2Nh
c3Q8SFRNTEVsZW1lbnRJbXBsICo+KGltcGwoKSk7CiAjaWZkZWYgS0pTX1ZFUkJPU0UKLSAga2RE
ZWJ1Zyg2MDcwKSA8PCAiS0pTOjpIVE1MRWxlbWVudDo6dHJ5UHV0ICIgPDwgcHJvcGVydHlOYW1l
LnFzdHJpbmcoKQotICAgICAgICAgICAgICAgIDw8ICIgdGhpc1RhZz0iIDw8IGVsZW1lbnQudGFn
TmFtZSgpLnN0cmluZygpCi0gICAgICAgICAgICAgICAgPDwgIiBzdHI9IiA8PCBzdHIuc3RyaW5n
KCkgPDwgZW5kbDsKKyAgICBrZERlYnVnKDYwNzApIDw8ICJLSlM6OkhUTUxFbGVtZW50Ojp0cnlQ
dXQgIiA8PCBwcm9wZXJ0eU5hbWUucXN0cmluZygpCisgICAgICAgICAgICAgICAgICA8PCAiIHRo
aXNUYWc9IiA8PCBlbGVtZW50LnRhZ05hbWUoKS5zdHJpbmcoKQorICAgICAgICAgICAgICAgICAg
PDwgIiBzdHI9IiA8PCBzdHIuc3RyaW5nKCkgPDwgZW5kbDsKICNlbmRpZgotICAvLyBGaXJzdCBs
b29rIGF0IGR5bmFtaWMgcHJvcGVydGllcwotICBzd2l0Y2ggKGVsZW1lbnQuaWQoKSkgewotICAg
IGNhc2UgSURfU0VMRUNUOiB7Ci0gICAgICBIVE1MU2VsZWN0RWxlbWVudEltcGwgJnNlbGVjdCA9
IHN0YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIGJv
b2wgb2s7Ci0gICAgICAvKnVpbnQgdSA9Ki8gcHJvcGVydHlOYW1lLnRvVUxvbmcoJm9rKTsKLSAg
ICAgIGlmIChvaykgewotICAgICAgICBPYmplY3QgY29sbCA9IE9iamVjdDo6ZHluYW1pY0Nhc3Qo
IGdldFNlbGVjdEhUTUxDb2xsZWN0aW9uKGV4ZWMsIHNlbGVjdC5vcHRpb25zSFRNTENvbGxlY3Rp
b24oKS5nZXQoKSwgJnNlbGVjdCkgKTsKLSAgICAgICAgaWYgKCAhY29sbC5pc051bGwoKSApCi0g
ICAgICAgICAgY29sbC5wdXQoZXhlYyxwcm9wZXJ0eU5hbWUsdmFsdWUpOwotICAgICAgICByZXR1
cm47Ci0gICAgICB9CisgICAgLy8gRmlyc3QgbG9vayBhdCBkeW5hbWljIHByb3BlcnRpZXMKKyAg
ICBpZiAoZWxlbWVudC5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpzZWxlY3QoKSkpIHsKKyAgICAg
ICAgSFRNTFNlbGVjdEVsZW1lbnRJbXBsICZzZWxlY3QgPSBzdGF0aWNfY2FzdDxIVE1MU2VsZWN0
RWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgICAgIGJvb2wgb2s7CisgICAgICAgIC8qdWlu
dCB1ID0qLyBwcm9wZXJ0eU5hbWUudG9VTG9uZygmb2spOworICAgICAgICBpZiAob2spIHsKKyAg
ICAgICAgICAgIE9iamVjdCBjb2xsID0gT2JqZWN0OjpkeW5hbWljQ2FzdCggZ2V0U2VsZWN0SFRN
TENvbGxlY3Rpb24oZXhlYywgc2VsZWN0Lm9wdGlvbnNIVE1MQ29sbGVjdGlvbigpLmdldCgpLCAm
c2VsZWN0KSApOworICAgICAgICAgICAgaWYgKCFjb2xsLmlzTnVsbCgpKQorICAgICAgICAgICAg
ICAgIGNvbGwucHV0KGV4ZWMscHJvcGVydHlOYW1lLHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQogICAgIH0KICNpZiBBUFBMRV9DSEFOR0VTCi0gICAgY2FzZSBJRF9FTUJF
RDoKLSAgICBjYXNlIElEX09CSkVDVDoKLSAgICBjYXNlIElEX0FQUExFVDogeworICAgIGVsc2Ug
aWYgKGVsZW1lbnQuaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6ZW1iZWQoKSkgfHwKKyAgICAgICAg
ICAgICBlbGVtZW50Lmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9iamVjdCgpKSB8fAorICAgICAg
ICAgICAgIGVsZW1lbnQuaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6YXBwbGV0KCkpKSB7CiAJVmFs
dWUgcnVudGltZU9iamVjdCA9IGdldFJ1bnRpbWVPYmplY3QoZXhlYywmZWxlbWVudCk7CiAJaWYg
KCFydW50aW1lT2JqZWN0LmlzTnVsbCgpKSB7CiAJICAgIE9iamVjdEltcCAqaW1wID0gc3RhdGlj
X2Nhc3Q8T2JqZWN0SW1wICo+KHJ1bnRpbWVPYmplY3QuaW1wKCkpOwotCSAgICBpZiAoaW1wLT5j
YW5QdXQoZXhlYywgcHJvcGVydHlOYW1lKSkgeworCSAgICBpZiAoaW1wLT5jYW5QdXQoZXhlYywg
cHJvcGVydHlOYW1lKSkKIAkJcmV0dXJuIGltcC0+cHV0IChleGVjLCBwcm9wZXJ0eU5hbWUsIHZh
bHVlKTsKLQkgICAgfQogCX0KICAgICB9Ci0gICAgICBicmVhazsKICNlbmRpZgotICAgIGJyZWFr
OwotICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KIAotICBjb25zdCBIYXNoVGFibGUqIHRh
YmxlID0gY2xhc3NJbmZvKCktPnByb3BIYXNoVGFibGU7IC8vIGdldCB0aGUgcmlnaHQgaGFzaHRh
YmxlCi0gIGNvbnN0IEhhc2hFbnRyeSogZW50cnkgPSBMb29rdXA6OmZpbmRFbnRyeSh0YWJsZSwg
cHJvcGVydHlOYW1lKTsKLSAgaWYgKGVudHJ5KSB7Ci0gICAgaWYgKGVudHJ5LT5hdHRyICYgRnVu
Y3Rpb24pIC8vIGZ1bmN0aW9uOiBwdXQgYXMgb3ZlcnJpZGUgcHJvcGVydHkKLSAgICB7Ci0gICAg
ICBPYmplY3RJbXA6OnB1dChleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBhdHRyKTsKLSAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgZWxzZSBpZiAoKGVudHJ5LT5hdHRyICYgUmVhZE9ubHkpID09
IDApIC8vIGxldCBET01PYmplY3RMb29rdXBQdXQgcHJpbnQgdGhlIHdhcm5pbmcgaWYgbm90Ci0g
ICAgewotICAgICAgcHV0VmFsdWUoZXhlYywgZW50cnktPnZhbHVlLCB2YWx1ZSwgYXR0cik7Ci0g
ICAgICByZXR1cm47CisgICAgY29uc3QgSGFzaFRhYmxlKiB0YWJsZSA9IGNsYXNzSW5mbygpLT5w
cm9wSGFzaFRhYmxlOyAvLyBnZXQgdGhlIHJpZ2h0IGhhc2h0YWJsZQorICAgIGNvbnN0IEhhc2hF
bnRyeSogZW50cnkgPSBMb29rdXA6OmZpbmRFbnRyeSh0YWJsZSwgcHJvcGVydHlOYW1lKTsKKyAg
ICBpZiAoZW50cnkpIHsKKyAgICAgICAgaWYgKGVudHJ5LT5hdHRyICYgRnVuY3Rpb24pIHsgLy8g
ZnVuY3Rpb246IHB1dCBhcyBvdmVycmlkZSBwcm9wZXJ0eQorICAgICAgICAgICAgT2JqZWN0SW1w
OjpwdXQoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgYXR0cik7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoKGVudHJ5LT5hdHRyICYgUmVhZE9ubHkp
ID09IDApIHsgLy8gbGV0IERPTU9iamVjdExvb2t1cFB1dCBwcmludCB0aGUgd2FybmluZyBpZiBu
b3QKKyAgICAgICAgICAgIHB1dFZhbHVlKGV4ZWMsIGVudHJ5LT52YWx1ZSwgdmFsdWUsIGF0dHIp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgfQotICB9Ci0gIERPTU9iamVj
dExvb2t1cFB1dDxLSlM6OkhUTUxFbGVtZW50LCBET01FbGVtZW50PihleGVjLCBwcm9wZXJ0eU5h
bWUsIHZhbHVlLCBhdHRyLCAmSFRNTEVsZW1lbnRUYWJsZSwgdGhpcyk7CisKKyAgICBET01PYmpl
Y3RMb29rdXBQdXQ8S0pTOjpIVE1MRWxlbWVudCwgRE9NRWxlbWVudD4oZXhlYywgcHJvcGVydHlO
YW1lLCB2YWx1ZSwgYXR0ciwgJkhUTUxFbGVtZW50VGFibGUsIHRoaXMpOwogfQogCi12b2lkIEhU
TUxFbGVtZW50OjpwdXRWYWx1ZShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFs
dWUmIHZhbHVlLCBpbnQpCit2b2lkIEhUTUxFbGVtZW50OjpodG1sU2V0dGVyKEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5n
JiBzdHIpCiB7Ci0gIERPTUV4Y2VwdGlvblRyYW5zbGF0b3IgZXhjZXB0aW9uKGV4ZWMpOwotICBE
T006OkRPTVN0cmluZyBzdHIgPSB2YWx1ZS5pc0EoTnVsbFR5cGUpID8gRE9NOjpET01TdHJpbmco
KSA6IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpOwotICBIVE1MRWxlbWVudEltcGwgJmVs
ZW1lbnQgPSAqc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KGltcGwoKSk7Ci0jaWZkZWYg
S0pTX1ZFUkJPU0UKLSAga2REZWJ1Zyg2MDcwKSA8PCAiS0pTOjpIVE1MRWxlbWVudDo6cHV0VmFs
dWUgIgotICAgICAgICAgICAgICAgIDw8ICIgdGhpc1RhZz0iIDw8IGVsZW1lbnQudGFnTmFtZSgp
LnN0cmluZygpCi0gICAgICAgICAgICAgICAgPDwgIiB0b2tlbj0iIDw8IHRva2VuIDw8IGVuZGw7
Ci0jZW5kaWYKKyAgICBIVE1MSGVhZEVsZW1lbnRJbXBsICZoZWFkID0gKnN0YXRpY19jYXN0PEhU
TUxIZWFkRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIGlmICh0b2tlbiA9PSBIZWFkUHJvZmls
ZSkgCisgICAgICAgIGhlYWQuc2V0UHJvZmlsZShzdHIpOworfQogCi0gIHN3aXRjaCAoZWxlbWVu
dC5pZCgpKSB7Ci0gIGNhc2UgSURfSFRNTDogewotICAgICAgSFRNTEh0bWxFbGVtZW50SW1wbCAm
aHRtbCA9IHN0YXRpY19jYXN0PEhUTUxIdG1sRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAg
ICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIEh0bWxWZXJzaW9uOiAgICAgICAgIHsgaHRt
bC5zZXRWZXJzaW9uKHN0cik7IHJldHVybjsgfQotICAgICAgfQotICB9Ci0gIGJyZWFrOwotICBj
YXNlIElEX0hFQUQ6IHsKLSAgICBIVE1MSGVhZEVsZW1lbnRJbXBsICZoZWFkID0gc3RhdGljX2Nh
c3Q8SFRNTEhlYWRFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKK3ZvaWQgSFRNTEVsZW1lbnQ6Omhl
YWRTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwg
Y29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MSGVhZEVsZW1lbnRJbXBsICZo
ZWFkID0gKnN0YXRpY19jYXN0PEhUTUxIZWFkRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIGlm
ICh0b2tlbiA9PSBIZWFkUHJvZmlsZSkgCisgICAgICAgIGhlYWQuc2V0UHJvZmlsZShzdHIpOwor
fQorCit2b2lkIEhUTUxFbGVtZW50OjpsaW5rU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7Cisg
ICAgSFRNTExpbmtFbGVtZW50SW1wbCAmbGluayA9ICpzdGF0aWNfY2FzdDxIVE1MTGlua0VsZW1l
bnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBIZWFkUHJv
ZmlsZTogICAgICAgICB7IGhlYWQuc2V0UHJvZmlsZShzdHIpOyByZXR1cm47IH0KLSAgICB9Ci0g
IH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfTElOSzogewotICAgIEhUTUxMaW5rRWxlbWVudEltcGwg
JmxpbmsgPSBzdGF0aWNfY2FzdDxIVE1MTGlua0VsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAg
IHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgTGlua0Rpc2FibGVkOiAgICAgICAgeyBsaW5r
LnNldERpc2FibGVkKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2Fz
ZSBMaW5rQ2hhcnNldDogICAgICAgICB7IGxpbmsuc2V0Q2hhcnNldChzdHIpOyByZXR1cm47IH0K
LSAgICAgIGNhc2UgTGlua0hyZWY6ICAgICAgICAgICAgeyBsaW5rLnNldEhyZWYoc3RyKTsgcmV0
dXJuOyB9Ci0gICAgICBjYXNlIExpbmtIcmVmTGFuZzogICAgICAgIHsgbGluay5zZXRIcmVmbGFu
ZyhzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgTGlua01lZGlhOiAgICAgICAgICAgeyBsaW5r
LnNldE1lZGlhKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBMaW5rUmVsOiAgICAgICAgICAg
ICB7IGxpbmsuc2V0UmVsKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBMaW5rUmV2OiAgICAg
ICAgICAgICB7IGxpbmsuc2V0UmV2KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBMaW5rVGFy
Z2V0OiAgICAgICAgICB7IGxpbmsuc2V0VGFyZ2V0KHN0cik7IHJldHVybjsgfQotICAgICAgY2Fz
ZSBMaW5rVHlwZTogICAgICAgICAgICB7IGxpbmsuc2V0VHlwZShzdHIpOyByZXR1cm47IH0KLSAg
ICAgIH0KLSAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9USVRMRTogewotICAgICAgSFRN
TFRpdGxlRWxlbWVudEltcGwgJnRpdGxlID0gc3RhdGljX2Nhc3Q8SFRNTFRpdGxlRWxlbWVudElt
cGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIFRpdGxl
VGV4dDogICAgICAgICAgICAgICAgIHsgdGl0bGUuc2V0VGV4dChzdHIpOyByZXR1cm47IH0KLSAg
ICAgIH0KLSAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9NRVRBOiB7Ci0gICAgICBIVE1M
TWV0YUVsZW1lbnRJbXBsICZtZXRhID0gc3RhdGljX2Nhc3Q8SFRNTE1ldGFFbGVtZW50SW1wbCAm
PihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgTWV0YUNvbnRl
bnQ6ICAgICAgICAgeyBtZXRhLnNldENvbnRlbnQoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNl
IE1ldGFIdHRwRXF1aXY6ICAgICAgIHsgbWV0YS5zZXRIdHRwRXF1aXYoc3RyKTsgcmV0dXJuOyB9
Ci0gICAgICBjYXNlIE1ldGFOYW1lOiAgICAgICAgICAgIHsgbWV0YS5zZXROYW1lKHN0cik7IHJl
dHVybjsgfQotICAgICAgY2FzZSBNZXRhU2NoZW1lOiAgICAgICAgICB7IG1ldGEuc2V0U2NoZW1l
KHN0cik7IHJldHVybjsgfQotICAgICAgfQorICAgICAgICBjYXNlIExpbmtEaXNhYmxlZDogICAg
ICAgIHsgbGluay5zZXREaXNhYmxlZCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0K
KyAgICAgICAgY2FzZSBMaW5rQ2hhcnNldDogICAgICAgICB7IGxpbmsuc2V0Q2hhcnNldChzdHIp
OyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBMaW5rSHJlZjogICAgICAgICAgICB7IGxpbmsuc2V0
SHJlZihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBMaW5rSHJlZkxhbmc6ICAgICAgICB7
IGxpbmsuc2V0SHJlZmxhbmcoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgTGlua01lZGlh
OiAgICAgICAgICAgeyBsaW5rLnNldE1lZGlhKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNl
IExpbmtSZWw6ICAgICAgICAgICAgIHsgbGluay5zZXRSZWwoc3RyKTsgcmV0dXJuOyB9CisgICAg
ICAgIGNhc2UgTGlua1JldjogICAgICAgICAgICAgeyBsaW5rLnNldFJldihzdHIpOyByZXR1cm47
IH0KKyAgICAgICAgY2FzZSBMaW5rVGFyZ2V0OiAgICAgICAgICB7IGxpbmsuc2V0VGFyZ2V0KHN0
cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIExpbmtUeXBlOiAgICAgICAgICAgIHsgbGluay5z
ZXRUeXBlKHN0cik7IHJldHVybjsgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0JB
U0U6IHsKLSAgICAgIEhUTUxCYXNlRWxlbWVudEltcGwgJmJhc2UgPSBzdGF0aWNfY2FzdDxIVE1M
QmFzZUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAg
ICAgY2FzZSBCYXNlSHJlZjogICAgICAgICAgICB7IGJhc2Uuc2V0SHJlZihzdHIpOyByZXR1cm47
IH0KLSAgICAgIGNhc2UgQmFzZVRhcmdldDogICAgICAgICAgeyBiYXNlLnNldFRhcmdldChzdHIp
OyByZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6dGl0bGVTZXR0ZXIo
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9N
OjpET01TdHJpbmcmIHN0cikKK3sKKyAgICAgSFRNTFRpdGxlRWxlbWVudEltcGwmIHRpdGxlID0g
KnN0YXRpY19jYXN0PEhUTUxUaXRsZUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICAgaWYgKHRv
a2VuID09IFRpdGxlVGV4dCkKKyAgICAgICAgdGl0bGUuc2V0VGV4dChzdHIpOworfQorCit2b2lk
IEhUTUxFbGVtZW50OjptZXRhU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25z
dCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTE1l
dGFFbGVtZW50SW1wbCYgbWV0YSA9ICpzdGF0aWNfY2FzdDxIVE1MTWV0YUVsZW1lbnRJbXBsKj4o
aW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgTWV0YUNvbnRlbnQ6
ICAgICAgICAgeyBtZXRhLnNldENvbnRlbnQoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2Ug
TWV0YUh0dHBFcXVpdjogICAgICAgeyBtZXRhLnNldEh0dHBFcXVpdihzdHIpOyByZXR1cm47IH0K
KyAgICAgICAgY2FzZSBNZXRhTmFtZTogICAgICAgICAgICB7IG1ldGEuc2V0TmFtZShzdHIpOyBy
ZXR1cm47IH0KKyAgICAgICAgY2FzZSBNZXRhU2NoZW1lOiAgICAgICAgICB7IG1ldGEuc2V0U2No
ZW1lKHN0cik7IHJldHVybjsgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0lTSU5E
RVg6IHsKLSAgICAgIEhUTUxJc0luZGV4RWxlbWVudEltcGwgJmlzaW5kZXggPSBzdGF0aWNfY2Fz
dDxIVE1MSXNJbmRleEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tl
bikgewotICAgICAgLy8gcmVhZC1vbmx5OiBmb3JtCi0gICAgICBjYXNlIElzSW5kZXhQcm9tcHQ6
ICAgICAgICAgICAgICAgeyBpc2luZGV4LnNldFByb21wdChzdHIpOyByZXR1cm47IH0KLSAgICAg
IH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6YmFzZVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQor
eworICAgIEhUTUxCYXNlRWxlbWVudEltcGwmIGJhc2UgPSAqc3RhdGljX2Nhc3Q8SFRNTEJhc2VF
bGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNl
IEJhc2VIcmVmOiAgICAgICAgICAgIHsgYmFzZS5zZXRIcmVmKHN0cik7IHJldHVybjsgfQorICAg
ICAgICBjYXNlIEJhc2VUYXJnZXQ6ICAgICAgICAgIHsgYmFzZS5zZXRUYXJnZXQoc3RyKTsgcmV0
dXJuOyB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfU1RZTEU6IHsKLSAgICAgIEhU
TUxTdHlsZUVsZW1lbnRJbXBsICZzdHlsZSA9IHN0YXRpY19jYXN0PEhUTUxTdHlsZUVsZW1lbnRJ
bXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgY2FzZSBTdHls
ZURpc2FibGVkOiAgICAgICAgeyBzdHlsZS5zZXREaXNhYmxlZCh2YWx1ZS50b0Jvb2xlYW4oZXhl
YykpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgU3R5bGVNZWRpYTogICAgICAgICAgIHsgc3R5bGUu
c2V0TWVkaWEoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFN0eWxlVHlwZTogICAgICAgICAg
ICB7IHN0eWxlLnNldFR5cGUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICB9Cit9CisKK3ZvaWQgSFRN
TEVsZW1lbnQ6OmlzSW5kZXhTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0
IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MSXNJ
bmRleEVsZW1lbnRJbXBsJiBpc2luZGV4ID0gKnN0YXRpY19jYXN0PEhUTUxJc0luZGV4RWxlbWVu
dEltcGwqPihpbXBsKCkpOworICAgIGlmICh0b2tlbiA9PSBJc0luZGV4UHJvbXB0KQorICAgICAg
ICBpc2luZGV4LnNldFByb21wdChzdHIpOworfQorCit2b2lkIEhUTUxFbGVtZW50OjpzdHlsZVNl
dHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25z
dCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxTdHlsZUVsZW1lbnRJbXBsJiBzdHls
ZSA9ICpzdGF0aWNfY2FzdDxIVE1MU3R5bGVFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dp
dGNoICh0b2tlbikgeworICAgICAgICBjYXNlIFN0eWxlRGlzYWJsZWQ6ICAgICAgICB7IHN0eWxl
LnNldERpc2FibGVkKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBj
YXNlIFN0eWxlTWVkaWE6ICAgICAgICAgICB7IHN0eWxlLnNldE1lZGlhKHN0cik7IHJldHVybjsg
fQorICAgICAgICBjYXNlIFN0eWxlVHlwZTogICAgICAgICAgICB7IHN0eWxlLnNldFR5cGUoc3Ry
KTsgcmV0dXJuOyB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfQk9EWTogewotICAg
ICAgSFRNTEJvZHlFbGVtZW50SW1wbCAmYm9keSA9IHN0YXRpY19jYXN0PEhUTUxCb2R5RWxlbWVu
dEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIEJv
ZHlBTGluazogICAgICAgICAgIHsgYm9keS5zZXRBTGluayhzdHIpOyByZXR1cm47IH0KLSAgICAg
IGNhc2UgQm9keUJhY2tncm91bmQ6ICAgICAgeyBib2R5LnNldEJhY2tncm91bmQoc3RyKTsgcmV0
dXJuOyB9Ci0gICAgICBjYXNlIEJvZHlCZ0NvbG9yOiAgICAgICAgIHsgYm9keS5zZXRCZ0NvbG9y
KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBCb2R5TGluazogICAgICAgICAgICB7IGJvZHku
c2V0TGluayhzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQm9keVRleHQ6ICAgICAgICAgICAg
eyBib2R5LnNldFRleHQoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEJvZHlWTGluazogICAg
ICAgICAgIHsgYm9keS5zZXRWTGluayhzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQm9keVNj
cm9sbExlZnQ6Ci0gICAgICBjYXNlIEJvZHlTY3JvbGxUb3A6IHsKLSAgICAgICAgICBRU2Nyb2xs
Vmlldyogc3ZpZXcgPSBib2R5Lm93bmVyRG9jdW1lbnQoKS0+dmlldygpOwotICAgICAgICAgIGlm
IChzdmlldykgewotICAgICAgICAgICAgICAvLyBVcGRhdGUgdGhlIGRvY3VtZW50J3MgbGF5b3V0
IGJlZm9yZSB3ZSBjb21wdXRlIHRoZXNlIGF0dHJpYnV0ZXMuCi0gICAgICAgICAgICAgIGlmIChE
b2N1bWVudEltcGwqIGRvYyA9IGJvZHkuZ2V0RG9jdW1lbnQoKSkKLSAgICAgICAgICAgICAgICAg
IGRvYy0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7Ci0gICAgICAgICAg
ICAgIGlmICh0b2tlbiA9PSBCb2R5U2Nyb2xsTGVmdCkKLSAgICAgICAgICAgICAgICAgIHN2aWV3
LT5zZXRDb250ZW50c1Bvcyh2YWx1ZS50b0ludDMyKGV4ZWMpLCBzdmlldy0+Y29udGVudHNZKCkp
OwotICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICBzdmlldy0+c2V0Q29udGVu
dHNQb3Moc3ZpZXctPmNvbnRlbnRzWCgpLCB2YWx1ZS50b0ludDMyKGV4ZWMpKTsKLSAgICAgICAg
ICB9Ci0gICAgICAgICAgcmV0dXJuOworfQorCit2b2lkIEhUTUxFbGVtZW50Ojpib2R5U2V0dGVy
KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERP
TTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTEJvZHlFbGVtZW50SW1wbCYgYm9keSA9ICpz
dGF0aWNfY2FzdDxIVE1MQm9keUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRv
a2VuKSB7CisgICAgICAgIGNhc2UgQm9keUFMaW5rOiAgICAgICAgICAgeyBib2R5LnNldEFMaW5r
KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEJvZHlCYWNrZ3JvdW5kOiAgICAgIHsgYm9k
eS5zZXRCYWNrZ3JvdW5kKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEJvZHlCZ0NvbG9y
OiAgICAgICAgIHsgYm9keS5zZXRCZ0NvbG9yKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNl
IEJvZHlMaW5rOiAgICAgICAgICAgIHsgYm9keS5zZXRMaW5rKHN0cik7IHJldHVybjsgfQorICAg
ICAgICBjYXNlIEJvZHlUZXh0OiAgICAgICAgICAgIHsgYm9keS5zZXRUZXh0KHN0cik7IHJldHVy
bjsgfQorICAgICAgICBjYXNlIEJvZHlWTGluazogICAgICAgICAgIHsgYm9keS5zZXRWTGluayhz
dHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBCb2R5U2Nyb2xsTGVmdDoKKyAgICAgICAgY2Fz
ZSBCb2R5U2Nyb2xsVG9wOiB7CisgICAgICAgICAgICBRU2Nyb2xsVmlldyogc3ZpZXcgPSBib2R5
Lm93bmVyRG9jdW1lbnQoKS0+dmlldygpOworICAgICAgICAgICAgaWYgKHN2aWV3KSB7CisgICAg
ICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBkb2N1bWVudCdzIGxheW91dCBiZWZvcmUgd2UgY29t
cHV0ZSB0aGVzZSBhdHRyaWJ1dGVzLgorICAgICAgICAgICAgICAgIGlmIChEb2N1bWVudEltcGwq
IGRvYyA9IGJvZHkuZ2V0RG9jdW1lbnQoKSkKKyAgICAgICAgICAgICAgICAgICAgZG9jLT51cGRh
dGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKKyAgICAgICAgICAgICAgICBpZiAo
dG9rZW4gPT0gQm9keVNjcm9sbExlZnQpCisgICAgICAgICAgICAgICAgICAgIHN2aWV3LT5zZXRD
b250ZW50c1Bvcyh2YWx1ZS50b0ludDMyKGV4ZWMpLCBzdmlldy0+Y29udGVudHNZKCkpOworICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgc3ZpZXctPnNldENvbnRlbnRz
UG9zKHN2aWV3LT5jb250ZW50c1goKSwgdmFsdWUudG9JbnQzMihleGVjKSk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgIH0KICAgICB9Ci0gICAg
YnJlYWs7Ci0gICAgY2FzZSBJRF9GT1JNOiB7Ci0gICAgICBIVE1MRm9ybUVsZW1lbnRJbXBsICZm
b3JtID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAg
IHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIC8vIHJlYWQtb25seTogZWxlbWVudHMKLSAgICAgIC8v
IHJlYWQtb25seTogbGVuZ3RoCi0gICAgICBjYXNlIEZvcm1OYW1lOiAgICAgICAgICAgIHsgZm9y
bS5zZXROYW1lKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBGb3JtQWNjZXB0Q2hhcnNldDog
ICB7IGZvcm0uc2V0QWNjZXB0Q2hhcnNldChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgRm9y
bUFjdGlvbjogICAgICAgICAgeyBmb3JtLnNldEFjdGlvbihzdHIpOyByZXR1cm47IH0KLSAgICAg
IGNhc2UgRm9ybUVuY1R5cGU6ICAgICAgICAgeyBmb3JtLnNldEVuY3R5cGUoc3RyKTsgcmV0dXJu
OyB9Ci0gICAgICBjYXNlIEZvcm1NZXRob2Q6ICAgICAgICAgIHsgZm9ybS5zZXRNZXRob2Qoc3Ry
KTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEZvcm1UYXJnZXQ6ICAgICAgICAgIHsgZm9ybS5zZXRU
YXJnZXQoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OmZv
cm1TZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwg
Y29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MRm9ybUVsZW1lbnRJbXBsJiBm
b3JtID0gKnN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3
aXRjaCAodG9rZW4pIHsKKyAgICAgICAgLy8gcmVhZC1vbmx5OiBlbGVtZW50cworICAgICAgICAv
LyByZWFkLW9ubHk6IGxlbmd0aAorICAgICAgICBjYXNlIEZvcm1OYW1lOiAgICAgICAgICAgIHsg
Zm9ybS5zZXROYW1lKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEZvcm1BY2NlcHRDaGFy
c2V0OiAgIHsgZm9ybS5zZXRBY2NlcHRDaGFyc2V0KHN0cik7IHJldHVybjsgfQorICAgICAgICBj
YXNlIEZvcm1BY3Rpb246ICAgICAgICAgIHsgZm9ybS5zZXRBY3Rpb24oc3RyKTsgcmV0dXJuOyB9
CisgICAgICAgIGNhc2UgRm9ybUVuY1R5cGU6ICAgICAgICAgeyBmb3JtLnNldEVuY3R5cGUoc3Ry
KTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgRm9ybU1ldGhvZDogICAgICAgICAgeyBmb3JtLnNl
dE1ldGhvZChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBGb3JtVGFyZ2V0OiAgICAgICAg
ICB7IGZvcm0uc2V0VGFyZ2V0KHN0cik7IHJldHVybjsgfQogICAgIH0KLSAgICBicmVhazsKLSAg
ICBjYXNlIElEX1NFTEVDVDogewotICAgICAgSFRNTFNlbGVjdEVsZW1lbnRJbXBsICZzZWxlY3Qg
PSBzdGF0aWNfY2FzdDxIVE1MU2VsZWN0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBz
d2l0Y2ggKHRva2VuKSB7Ci0gICAgICAvLyByZWFkLW9ubHk6IHR5cGUKLSAgICAgIGNhc2UgU2Vs
ZWN0U2VsZWN0ZWRJbmRleDogICB7IHNlbGVjdC5zZXRTZWxlY3RlZEluZGV4KHZhbHVlLnRvSW50
MzIoZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgU2VsZWN0VmFsdWU6ICAgICAgICAgICB7
IHNlbGVjdC5zZXRWYWx1ZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgU2VsZWN0TGVuZ3Ro
OiAgICAgICAgICB7IC8vIHJlYWQtb25seSBhY2NvcmRpbmcgdG8gdGhlIE5TIHNwZWMsIGJ1dCB3
ZWJwYWdlcyBuZWVkIGl0IHdyaXRlYWJsZQorfQorCit2b2lkIEhUTUxFbGVtZW50OjpzZWxlY3RT
ZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29u
c3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MU2VsZWN0RWxlbWVudEltcGwmIHNl
bGVjdCA9ICpzdGF0aWNfY2FzdDxIVE1MU2VsZWN0RWxlbWVudEltcGwqPihpbXBsKCkpOworICAg
IHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgLy8gcmVhZC1vbmx5OiB0eXBlCisgICAgICAgIGNh
c2UgU2VsZWN0U2VsZWN0ZWRJbmRleDogICB7IHNlbGVjdC5zZXRTZWxlY3RlZEluZGV4KHZhbHVl
LnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBTZWxlY3RWYWx1ZTogICAg
ICAgICAgIHsgc2VsZWN0LnNldFZhbHVlKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFNl
bGVjdExlbmd0aDogICAgICAgICAgeyAvLyByZWFkLW9ubHkgYWNjb3JkaW5nIHRvIHRoZSBOUyBz
cGVjLCBidXQgd2VicGFnZXMgbmVlZCBpdCB3cml0ZWFibGUKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgT2JqZWN0IGNvbGwgPSBPYmplY3Q6OmR5bmFtaWNDYXN0KCBn
ZXRTZWxlY3RIVE1MQ29sbGVjdGlvbihleGVjLCBzZWxlY3Qub3B0aW9uc0hUTUxDb2xsZWN0aW9u
KCkuZ2V0KCksICZzZWxlY3QpICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICggIWNvbGwuaXNOdWxsKCkgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbGwucHV0KGV4ZWMsbGVuZ3RoUHJvcGVydHlOYW1lLHZhbHVlKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgLy8gcmVhZC1vbmx5OiBm
b3JtCi0gICAgICAvLyByZWFkLW9ubHk6IG9wdGlvbnMKLSAgICAgIGNhc2UgU2VsZWN0RGlzYWJs
ZWQ6ICAgICAgICB7IHNlbGVjdC5zZXREaXNhYmxlZCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyBy
ZXR1cm47IH0KLSAgICAgIGNhc2UgU2VsZWN0TXVsdGlwbGU6ICAgICAgICB7IHNlbGVjdC5zZXRN
dWx0aXBsZSh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgU2Vs
ZWN0TmFtZTogICAgICAgICAgICB7IHNlbGVjdC5zZXROYW1lKHN0cik7IHJldHVybjsgfQotICAg
ICAgY2FzZSBTZWxlY3RTaXplOiAgICAgICAgICAgIHsgc2VsZWN0LnNldFNpemUodmFsdWUudG9J
bnQzMihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBTZWxlY3RUYWJJbmRleDogICAgICAg
IHsgc2VsZWN0LnNldFRhYkluZGV4KHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KLSAg
ICAgIH0KLSAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9PUFRHUk9VUDogewotICAgICAg
SFRNTE9wdEdyb3VwRWxlbWVudEltcGwgJm9wdGdyb3VwID0gc3RhdGljX2Nhc3Q8SFRNTE9wdEdy
b3VwRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAg
ICBjYXNlIE9wdEdyb3VwRGlzYWJsZWQ6ICAgICAgICB7IG9wdGdyb3VwLnNldERpc2FibGVkKHZh
bHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBPcHRHcm91cExhYmVs
OiAgICAgICAgICAgeyBvcHRncm91cC5zZXRMYWJlbChzdHIpOyByZXR1cm47IH0KLSAgICAgIH0K
LSAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9PUFRJT046IHsKLSAgICAgIEhUTUxPcHRp
b25FbGVtZW50SW1wbCAmb3B0aW9uID0gc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnRJbXBs
ICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgLy8gcmVhZC1vbmx5
OiBmb3JtCi0gICAgICBjYXNlIE9wdGlvbkRlZmF1bHRTZWxlY3RlZDogeyBvcHRpb24uc2V0RGVm
YXVsdFNlbGVjdGVkKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2Fz
ZSBPcHRpb25UZXh0OiAgICAgICAgICAgIHsgb3B0aW9uLnNldFRleHQoc3RyLCBleGNlcHRpb24p
OyByZXR1cm47IH0KLSAgICAgIC8vIHJlYWQtb25seTogaW5kZXgKLSAgICAgIGNhc2UgT3B0aW9u
RGlzYWJsZWQ6ICAgICAgICB7IG9wdGlvbi5zZXREaXNhYmxlZCh2YWx1ZS50b0Jvb2xlYW4oZXhl
YykpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgT3B0aW9uTGFiZWw6ICAgICAgICAgICB7IG9wdGlv
bi5zZXRMYWJlbChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgT3B0aW9uU2VsZWN0ZWQ6ICAg
ICAgICB7IG9wdGlvbi5zZXRTZWxlY3RlZCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47
IH0KLSAgICAgIGNhc2UgT3B0aW9uVmFsdWU6ICAgICAgICAgICB7IG9wdGlvbi5zZXRWYWx1ZShz
dHIpOyByZXR1cm47IH0KLSAgICAgIH0KLSAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9J
TlBVVDogewotICAgICAgSFRNTElucHV0RWxlbWVudEltcGwgJmlucHV0ID0gc3RhdGljX2Nhc3Q8
SFRNTElucHV0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7
Ci0gICAgICBjYXNlIElucHV0RGVmYXVsdFZhbHVlOiAgICB7IGlucHV0LnNldERlZmF1bHRWYWx1
ZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSW5wdXREZWZhdWx0Q2hlY2tlZDogIHsgaW5w
dXQuc2V0RGVmYXVsdENoZWNrZWQodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9Ci0g
ICAgICAvLyByZWFkLW9ubHk6IGZvcm0KLSAgICAgIGNhc2UgSW5wdXRBY2NlcHQ6ICAgICAgICAg
IHsgaW5wdXQuc2V0QWNjZXB0KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBJbnB1dEFjY2Vz
c0tleTogICAgICAgeyBpbnB1dC5zZXRBY2Nlc3NLZXkoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBj
YXNlIElucHV0QWxpZ246ICAgICAgICAgICB7IGlucHV0LnNldEFsaWduKHN0cik7IHJldHVybjsg
fQotICAgICAgY2FzZSBJbnB1dEFsdDogICAgICAgICAgICAgeyBpbnB1dC5zZXRBbHQoc3RyKTsg
cmV0dXJuOyB9Ci0gICAgICBjYXNlIElucHV0Q2hlY2tlZDogICAgICAgICB7IGlucHV0LnNldENo
ZWNrZWQodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElucHV0
RGlzYWJsZWQ6ICAgICAgICB7IGlucHV0LnNldERpc2FibGVkKHZhbHVlLnRvQm9vbGVhbihleGVj
KSk7IHJldHVybjsgfQotICAgICAgY2FzZSBJbnB1dE1heExlbmd0aDogICAgICAgeyBpbnB1dC5z
ZXRNYXhMZW5ndGgodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBJ
bnB1dE5hbWU6ICAgICAgICAgICAgeyBpbnB1dC5zZXROYW1lKHN0cik7IHJldHVybjsgfQotICAg
ICAgY2FzZSBJbnB1dFJlYWRPbmx5OiAgICAgICAgeyBpbnB1dC5zZXRSZWFkT25seSh2YWx1ZS50
b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSW5wdXRTZWxlY3Rpb25TdGFy
dDogIHsgaW5wdXQuc2V0U2VsZWN0aW9uU3RhcnQodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVy
bjsgfQotICAgICAgY2FzZSBJbnB1dFNlbGVjdGlvbkVuZDogICAgeyBpbnB1dC5zZXRTZWxlY3Rp
b25FbmQodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBJbnB1dFNp
emU6ICAgICAgICAgICAgeyBpbnB1dC5zZXRTaXplKHN0cik7IHJldHVybjsgfQotICAgICAgY2Fz
ZSBJbnB1dFNyYzogICAgICAgICAgICAgeyBpbnB1dC5zZXRTcmMoc3RyKTsgcmV0dXJuOyB9Ci0g
ICAgICBjYXNlIElucHV0VGFiSW5kZXg6ICAgICAgICB7IGlucHV0LnNldFRhYkluZGV4KHZhbHVl
LnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSW5wdXRUeXBlOiAgICAgICAg
ICAgIHsgaW5wdXQuc2V0VHlwZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSW5wdXRVc2VN
YXA6ICAgICAgICAgIHsgaW5wdXQuc2V0VXNlTWFwKHN0cik7IHJldHVybjsgfQotICAgICAgY2Fz
ZSBJbnB1dFZhbHVlOiAgICAgICAgICAgeyBpbnB1dC5zZXRWYWx1ZShzdHIpOyByZXR1cm47IH0K
LSAgICAgIH0KLSAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9URVhUQVJFQTogewotICAg
ICAgSFRNTFRleHRBcmVhRWxlbWVudEltcGwgJnRleHRhcmVhID0gc3RhdGljX2Nhc3Q8SFRNTFRl
eHRBcmVhRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0g
ICAgICBjYXNlIFRleHRBcmVhRGVmYXVsdFZhbHVlOiAgICB7IHRleHRhcmVhLnNldERlZmF1bHRW
YWx1ZShzdHIpOyByZXR1cm47IH0KLSAgICAgIC8vIHJlYWQtb25seTogZm9ybQotICAgICAgY2Fz
ZSBUZXh0QXJlYUFjY2Vzc0tleTogICAgICAgeyB0ZXh0YXJlYS5zZXRBY2Nlc3NLZXkoc3RyKTsg
cmV0dXJuOyB9Ci0gICAgICBjYXNlIFRleHRBcmVhQ29sczogICAgICAgICAgICB7IHRleHRhcmVh
LnNldENvbHModmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBUZXh0
QXJlYURpc2FibGVkOiAgICAgICAgeyB0ZXh0YXJlYS5zZXREaXNhYmxlZCh2YWx1ZS50b0Jvb2xl
YW4oZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGV4dEFyZWFOYW1lOiAgICAgICAgICAg
IHsgdGV4dGFyZWEuc2V0TmFtZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGV4dEFyZWFS
ZWFkT25seTogICAgICAgIHsgdGV4dGFyZWEuc2V0UmVhZE9ubHkodmFsdWUudG9Cb29sZWFuKGV4
ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRleHRBcmVhUm93czogICAgICAgICAgICB7IHRl
eHRhcmVhLnNldFJvd3ModmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2Fz
ZSBUZXh0QXJlYVNlbGVjdGlvblN0YXJ0OiAgeyB0ZXh0YXJlYS5zZXRTZWxlY3Rpb25TdGFydCh2
YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRleHRBcmVhU2VsZWN0
aW9uRW5kOiAgICB7IHRleHRhcmVhLnNldFNlbGVjdGlvbkVuZCh2YWx1ZS50b0ludDMyKGV4ZWMp
KTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRleHRBcmVhVGFiSW5kZXg6ICAgICAgICB7IHRleHRh
cmVhLnNldFRhYkluZGV4KHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KLSAgICAgIC8v
IHJlYWQtb25seTogdHlwZQotICAgICAgY2FzZSBUZXh0QXJlYVZhbHVlOiAgICAgICAgICAgeyB0
ZXh0YXJlYS5zZXRWYWx1ZShzdHIpOyByZXR1cm47IH0KLSAgICAgIH0KLSAgICB9Ci0gICAgYnJl
YWs7Ci0gICAgY2FzZSBJRF9CVVRUT046IHsKLSAgICAgIEhUTUxCdXR0b25FbGVtZW50SW1wbCAm
YnV0dG9uID0gc3RhdGljX2Nhc3Q8SFRNTEJ1dHRvbkVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwot
ICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgLy8gcmVhZC1vbmx5OiBmb3JtCi0gICAgICBj
YXNlIEJ1dHRvbkFjY2Vzc0tleTogICAgICAgeyBidXR0b24uc2V0QWNjZXNzS2V5KHN0cik7IHJl
dHVybjsgfQotICAgICAgY2FzZSBCdXR0b25EaXNhYmxlZDogICAgICAgIHsgYnV0dG9uLnNldERp
c2FibGVkKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBCdXR0
b25OYW1lOiAgICAgICAgICAgIHsgYnV0dG9uLnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9Ci0gICAg
ICBjYXNlIEJ1dHRvblRhYkluZGV4OiAgICAgICAgeyBidXR0b24uc2V0VGFiSW5kZXgodmFsdWUu
dG9JbnQzMihleGVjKSk7IHJldHVybjsgfQotICAgICAgLy8gcmVhZC1vbmx5OiB0eXBlCi0gICAg
ICBjYXNlIEJ1dHRvblZhbHVlOiAgICAgICAgICAgeyBidXR0b24uc2V0VmFsdWUoc3RyKTsgcmV0
dXJuOyB9Ci0gICAgICB9Ci0gICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfTEFCRUw6IHsK
LSAgICAgIEhUTUxMYWJlbEVsZW1lbnRJbXBsICZsYWJlbCA9IHN0YXRpY19jYXN0PEhUTUxMYWJl
bEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAg
Ly8gcmVhZC1vbmx5OiBmb3JtCi0gICAgICBjYXNlIExhYmVsQWNjZXNzS2V5OiAgICAgICB7IGxh
YmVsLnNldEFjY2Vzc0tleShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgTGFiZWxIdG1sRm9y
OiAgICAgICAgIHsgbGFiZWwuc2V0SHRtbEZvcihzdHIpOyByZXR1cm47IH0KLSAgICAgIH0KLSAg
ICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9MRUdFTkQ6IHsKLSAgICAgIEhUTUxMZWdlbmRF
bGVtZW50SW1wbCAmbGVnZW5kID0gc3RhdGljX2Nhc3Q8SFRNTExlZ2VuZEVsZW1lbnRJbXBsICY+
KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgLy8gcmVhZC1vbmx5OiBm
b3JtCi0gICAgICBjYXNlIExlZ2VuZEFjY2Vzc0tleTogICAgICAgeyBsZWdlbmQuc2V0QWNjZXNz
S2V5KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBMZWdlbmRBbGlnbjogICAgICAgICAgIHsg
bGVnZW5kLnNldEFsaWduKHN0cik7IHJldHVybjsgfQotICAgICAgfQotICAgIH0KLSAgICBicmVh
azsKLSAgICBjYXNlIElEX1VMOiB7Ci0gICAgICBIVE1MVUxpc3RFbGVtZW50SW1wbCAmdUxpc3Qg
PSBzdGF0aWNfY2FzdDxIVE1MVUxpc3RFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3
aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgVUxpc3RDb21wYWN0OiAgICAgICAgIHsgdUxpc3Qu
c2V0Q29tcGFjdCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2Ug
VUxpc3RUeXBlOiAgICAgICAgICAgIHsgdUxpc3Quc2V0VHlwZShzdHIpOyByZXR1cm47IH0KLSAg
ICAgIH0KLSAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9PTDogewotICAgICAgSFRNTE9M
aXN0RWxlbWVudEltcGwgJm9MaXN0ID0gc3RhdGljX2Nhc3Q8SFRNTE9MaXN0RWxlbWVudEltcGwg
Jj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIE9MaXN0Q29t
cGFjdDogICAgICAgICB7IG9MaXN0LnNldENvbXBhY3QodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsg
cmV0dXJuOyB9Ci0gICAgICBjYXNlIE9MaXN0U3RhcnQ6ICAgICAgICAgICB7IG9MaXN0LnNldFN0
YXJ0KHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgT0xpc3RUeXBl
OiAgICAgICAgICAgIHsgb0xpc3Quc2V0VHlwZShzdHIpOyByZXR1cm47IH0KLSAgICAgIH0KLSAg
ICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9ETDogewotICAgICAgSFRNTERMaXN0RWxlbWVu
dEltcGwgJmRMaXN0ID0gc3RhdGljX2Nhc3Q8SFRNTERMaXN0RWxlbWVudEltcGwgJj4oZWxlbWVu
dCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIERMaXN0Q29tcGFjdDogICAg
ICAgICB7IGRMaXN0LnNldENvbXBhY3QodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9
Ci0gICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
IC8vIHJlYWQtb25seTogZm9ybQorICAgICAgICAvLyByZWFkLW9ubHk6IG9wdGlvbnMKKyAgICAg
ICAgY2FzZSBTZWxlY3REaXNhYmxlZDogICAgICAgIHsgc2VsZWN0LnNldERpc2FibGVkKHZhbHVl
LnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIFNlbGVjdE11bHRpcGxl
OiAgICAgICAgeyBzZWxlY3Quc2V0TXVsdGlwbGUodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0
dXJuOyB9CisgICAgICAgIGNhc2UgU2VsZWN0TmFtZTogICAgICAgICAgICB7IHNlbGVjdC5zZXRO
YW1lKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFNlbGVjdFNpemU6ICAgICAgICAgICAg
eyBzZWxlY3Quc2V0U2l6ZSh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAg
IGNhc2UgU2VsZWN0VGFiSW5kZXg6ICAgICAgICB7IHNlbGVjdC5zZXRUYWJJbmRleCh2YWx1ZS50
b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURf
RElSOiB7Ci0gICAgICBIVE1MRGlyZWN0b3J5RWxlbWVudEltcGwgJmRpcmVjdG9yeSA9IHN0YXRp
Y19jYXN0PEhUTUxEaXJlY3RvcnlFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRj
aCAodG9rZW4pIHsKLSAgICAgIGNhc2UgRGlyZWN0b3J5Q29tcGFjdDogICAgIHsgZGlyZWN0b3J5
LnNldENvbXBhY3QodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICB9Ci0g
ICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfTUVOVTogewotICAgICAgSFRNTE1lbnVFbGVt
ZW50SW1wbCAmbWVudSA9IHN0YXRpY19jYXN0PEhUTUxNZW51RWxlbWVudEltcGwgJj4oZWxlbWVu
dCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIE1lbnVDb21wYWN0OiAgICAg
ICAgIHsgbWVudS5zZXRDb21wYWN0KHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQot
ICAgICAgfQotICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0xJOiB7Ci0gICAgICBIVE1M
TElFbGVtZW50SW1wbCAmbGkgPSBzdGF0aWNfY2FzdDxIVE1MTElFbGVtZW50SW1wbCAmPihlbGVt
ZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgTElUeXBlOiAgICAgICAg
ICAgIHsgbGkuc2V0VHlwZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgTElWYWx1ZTogICAg
ICAgICAgIHsgbGkuc2V0VmFsdWUodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQotICAg
ICAgfQorfQorCit2b2lkIEhUTUxFbGVtZW50OjpvcHRHcm91cFNldHRlcihFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYg
c3RyKQoreworICAgIEhUTUxPcHRHcm91cEVsZW1lbnRJbXBsJiBvcHRncm91cCA9ICpzdGF0aWNf
Y2FzdDxIVE1MT3B0R3JvdXBFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tl
bikgeworICAgICAgICBjYXNlIE9wdEdyb3VwRGlzYWJsZWQ6ICAgICAgICB7IG9wdGdyb3VwLnNl
dERpc2FibGVkKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNl
IE9wdEdyb3VwTGFiZWw6ICAgICAgICAgICB7IG9wdGdyb3VwLnNldExhYmVsKHN0cik7IHJldHVy
bjsgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0RJVjogewotICAgICAgSFRNTERp
dkVsZW1lbnRJbXBsICZkaXYgPSBzdGF0aWNfY2FzdDxIVE1MRGl2RWxlbWVudEltcGwgJj4oZWxl
bWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIERpdkFsaWduOiAgICAg
ICAgICAgeyBkaXYuc2V0QWxpZ24oc3RyKTsgcmV0dXJuOyB9Ci0gICAgICB9Cit9CisKK3ZvaWQg
SFRNTEVsZW1lbnQ6Om9wdGlvblNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29u
c3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIERPTUV4
Y2VwdGlvblRyYW5zbGF0b3IgZXhjZXB0aW9uKGV4ZWMpOworICAgIEhUTUxPcHRpb25FbGVtZW50
SW1wbCYgb3B0aW9uID0gKnN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50SW1wbCo+KGltcGwo
KSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICAvLyByZWFkLW9ubHk6IGZvcm0KKyAg
ICAgICAgY2FzZSBPcHRpb25EZWZhdWx0U2VsZWN0ZWQ6IHsgb3B0aW9uLnNldERlZmF1bHRTZWxl
Y3RlZCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBPcHRp
b25UZXh0OiAgICAgICAgICAgIHsgb3B0aW9uLnNldFRleHQoc3RyLCBleGNlcHRpb24pOyByZXR1
cm47IH0KKyAgICAgICAgLy8gcmVhZC1vbmx5OiBpbmRleAorICAgICAgICBjYXNlIE9wdGlvbkRp
c2FibGVkOiAgICAgICAgeyBvcHRpb24uc2V0RGlzYWJsZWQodmFsdWUudG9Cb29sZWFuKGV4ZWMp
KTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgT3B0aW9uTGFiZWw6ICAgICAgICAgICB7IG9wdGlv
bi5zZXRMYWJlbChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBPcHRpb25TZWxlY3RlZDog
ICAgICAgIHsgb3B0aW9uLnNldFNlbGVjdGVkKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVy
bjsgfQorICAgICAgICBjYXNlIE9wdGlvblZhbHVlOiAgICAgICAgICAgeyBvcHRpb24uc2V0VmFs
dWUoc3RyKTsgcmV0dXJuOyB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfUDogewot
ICAgICAgSFRNTFBhcmFncmFwaEVsZW1lbnRJbXBsICZwYXJhZ3JhcGggPSBzdGF0aWNfY2FzdDxI
VE1MUGFyYWdyYXBoRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2Vu
KSB7Ci0gICAgICBjYXNlIFBhcmFncmFwaEFsaWduOiAgICAgeyBwYXJhZ3JhcGguc2V0QWxpZ24o
c3RyKTsgcmV0dXJuOyB9Ci0gICAgICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OmlucHV0U2V0
dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0
IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTElucHV0RWxlbWVudEltcGwmIGlucHV0
ID0gKnN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0
Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgSW5wdXREZWZhdWx0VmFsdWU6ICAgIHsgaW5wdXQu
c2V0RGVmYXVsdFZhbHVlKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIElucHV0RGVmYXVs
dENoZWNrZWQ6ICB7IGlucHV0LnNldERlZmF1bHRDaGVja2VkKHZhbHVlLnRvQm9vbGVhbihleGVj
KSk7IHJldHVybjsgfQorICAgICAgICAvLyByZWFkLW9ubHk6IGZvcm0KKyAgICAgICAgY2FzZSBJ
bnB1dEFjY2VwdDogICAgICAgICAgeyBpbnB1dC5zZXRBY2NlcHQoc3RyKTsgcmV0dXJuOyB9Cisg
ICAgICAgIGNhc2UgSW5wdXRBY2Nlc3NLZXk6ICAgICAgIHsgaW5wdXQuc2V0QWNjZXNzS2V5KHN0
cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIElucHV0QWxpZ246ICAgICAgICAgICB7IGlucHV0
LnNldEFsaWduKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIElucHV0QWx0OiAgICAgICAg
ICAgICB7IGlucHV0LnNldEFsdChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJbnB1dENo
ZWNrZWQ6ICAgICAgICAgeyBpbnB1dC5zZXRDaGVja2VkKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7
IHJldHVybjsgfQorICAgICAgICBjYXNlIElucHV0RGlzYWJsZWQ6ICAgICAgICB7IGlucHV0LnNl
dERpc2FibGVkKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNl
IElucHV0TWF4TGVuZ3RoOiAgICAgICB7IGlucHV0LnNldE1heExlbmd0aCh2YWx1ZS50b0ludDMy
KGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgSW5wdXROYW1lOiAgICAgICAgICAgIHsg
aW5wdXQuc2V0TmFtZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJbnB1dFJlYWRPbmx5
OiAgICAgICAgeyBpbnB1dC5zZXRSZWFkT25seSh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1
cm47IH0KKyAgICAgICAgY2FzZSBJbnB1dFNpemU6ICAgICAgICAgICAgeyBpbnB1dC5zZXRTaXpl
KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIElucHV0U2VsZWN0aW9uU3RhcnQ6ICB7IGlu
cHV0LnNldFNlbGVjdGlvblN0YXJ0KHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KKyAg
ICAgICAgY2FzZSBJbnB1dFNlbGVjdGlvbkVuZDogICAgeyBpbnB1dC5zZXRTZWxlY3Rpb25FbmQo
dmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIElucHV0U3JjOiAg
ICAgICAgICAgICB7IGlucHV0LnNldFNyYyhzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJ
bnB1dFRhYkluZGV4OiAgICAgICAgeyBpbnB1dC5zZXRUYWJJbmRleCh2YWx1ZS50b0ludDMyKGV4
ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgSW5wdXRUeXBlOiAgICAgICAgICAgIHsgaW5w
dXQuc2V0VHlwZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJbnB1dFVzZU1hcDogICAg
ICAgICAgeyBpbnB1dC5zZXRVc2VNYXAoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgSW5w
dXRWYWx1ZTogICAgICAgICAgIHsgaW5wdXQuc2V0VmFsdWUoc3RyKTsgcmV0dXJuOyB9CiAgICAg
fQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfSDE6Ci0gICAgY2FzZSBJRF9IMjoKLSAgICBjYXNl
IElEX0gzOgotICAgIGNhc2UgSURfSDQ6Ci0gICAgY2FzZSBJRF9INToKLSAgICBjYXNlIElEX0g2
OiB7Ci0gICAgICBIVE1MSGVhZGluZ0VsZW1lbnRJbXBsICZoZWFkaW5nID0gc3RhdGljX2Nhc3Q8
SFRNTEhlYWRpbmdFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4p
IHsKLSAgICAgIGNhc2UgSGVhZGluZ0FsaWduOiAgICAgICAgIHsgaGVhZGluZy5zZXRBbGlnbihz
dHIpOyByZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6dGV4dEFyZWFT
ZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29u
c3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MVGV4dEFyZWFFbGVtZW50SW1wbCYg
dGV4dGFyZWEgPSAqc3RhdGljX2Nhc3Q8SFRNTFRleHRBcmVhRWxlbWVudEltcGwqPihpbXBsKCkp
OworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBUZXh0QXJlYURlZmF1bHRWYWx1
ZTogICAgeyB0ZXh0YXJlYS5zZXREZWZhdWx0VmFsdWUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAg
IC8vIHJlYWQtb25seTogZm9ybQorICAgICAgICBjYXNlIFRleHRBcmVhQWNjZXNzS2V5OiAgICAg
ICB7IHRleHRhcmVhLnNldEFjY2Vzc0tleShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBU
ZXh0QXJlYUNvbHM6ICAgICAgICAgICAgeyB0ZXh0YXJlYS5zZXRDb2xzKHZhbHVlLnRvSW50MzIo
ZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUZXh0QXJlYURpc2FibGVkOiAgICAgICAg
eyB0ZXh0YXJlYS5zZXREaXNhYmxlZCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0K
KyAgICAgICAgY2FzZSBUZXh0QXJlYU5hbWU6ICAgICAgICAgICAgeyB0ZXh0YXJlYS5zZXROYW1l
KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRleHRBcmVhUmVhZE9ubHk6ICAgICAgICB7
IHRleHRhcmVhLnNldFJlYWRPbmx5KHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQor
ICAgICAgICBjYXNlIFRleHRBcmVhUm93czogICAgICAgICAgICB7IHRleHRhcmVhLnNldFJvd3Mo
dmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRleHRBcmVhU2Vs
ZWN0aW9uU3RhcnQ6ICB7IHRleHRhcmVhLnNldFNlbGVjdGlvblN0YXJ0KHZhbHVlLnRvSW50MzIo
ZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUZXh0QXJlYVNlbGVjdGlvbkVuZDogICAg
eyB0ZXh0YXJlYS5zZXRTZWxlY3Rpb25FbmQodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsg
fQorICAgICAgICBjYXNlIFRleHRBcmVhVGFiSW5kZXg6ICAgICAgICB7IHRleHRhcmVhLnNldFRh
YkluZGV4KHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgLy8gcmVhZC1v
bmx5OiB0eXBlCisgICAgICAgIGNhc2UgVGV4dEFyZWFWYWx1ZTogICAgICAgICAgIHsgdGV4dGFy
ZWEuc2V0VmFsdWUoc3RyKTsgcmV0dXJuOyB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2Ug
SURfQkxPQ0tRVU9URTogewotICAgICAgSFRNTEJsb2NrcXVvdGVFbGVtZW50SW1wbCAmYmxvY2tx
dW90ZSA9IHN0YXRpY19jYXN0PEhUTUxCbG9ja3F1b3RlRWxlbWVudEltcGwgJj4oZWxlbWVudCk7
Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIEJsb2NrUXVvdGVDaXRlOiAgICAg
ICB7IGJsb2NrcXVvdGUuc2V0Q2l0ZShzdHIpOyByZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9p
ZCBIVE1MRWxlbWVudDo6YnV0dG9uU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBj
b25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRN
TEJ1dHRvbkVsZW1lbnRJbXBsJiBidXR0b24gPSAqc3RhdGljX2Nhc3Q8SFRNTEJ1dHRvbkVsZW1l
bnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIC8vIHJlYWQt
b25seTogZm9ybQorICAgICAgICBjYXNlIEJ1dHRvbkFjY2Vzc0tleTogICAgICAgeyBidXR0b24u
c2V0QWNjZXNzS2V5KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEJ1dHRvbkRpc2FibGVk
OiAgICAgICAgeyBidXR0b24uc2V0RGlzYWJsZWQodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0
dXJuOyB9CisgICAgICAgIGNhc2UgQnV0dG9uTmFtZTogICAgICAgICAgICB7IGJ1dHRvbi5zZXRO
YW1lKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEJ1dHRvblRhYkluZGV4OiAgICAgICAg
eyBidXR0b24uc2V0VGFiSW5kZXgodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQorICAg
ICAgICAvLyByZWFkLW9ubHk6IHR5cGUKKyAgICAgICAgY2FzZSBCdXR0b25WYWx1ZTogICAgICAg
ICAgIHsgYnV0dG9uLnNldFZhbHVlKHN0cik7IHJldHVybjsgfQogICAgIH0KLSAgICBicmVhazsK
LSAgICBjYXNlIElEX1E6IHsKLSAgICAgIEhUTUxRdW90ZUVsZW1lbnRJbXBsICZxdW90ZSA9IHN0
YXRpY19jYXN0PEhUTUxRdW90ZUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNo
ICh0b2tlbikgewotICAgICAgY2FzZSBRdW90ZUNpdGU6ICAgICAgICAgICAgeyBxdW90ZS5zZXRD
aXRlKHN0cik7IHJldHVybjsgfQotICAgICAgfQorfQorCit2b2lkIEhUTUxFbGVtZW50OjpsYWJl
bFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBj
b25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxMYWJlbEVsZW1lbnRJbXBsJiBs
YWJlbCA9ICpzdGF0aWNfY2FzdDxIVE1MTGFiZWxFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAg
c3dpdGNoICh0b2tlbikgeworICAgICAgICAvLyByZWFkLW9ubHk6IGZvcm0KKyAgICAgICAgY2Fz
ZSBMYWJlbEFjY2Vzc0tleTogICAgICAgeyBsYWJlbC5zZXRBY2Nlc3NLZXkoc3RyKTsgcmV0dXJu
OyB9CisgICAgICAgIGNhc2UgTGFiZWxIdG1sRm9yOiAgICAgICAgIHsgbGFiZWwuc2V0SHRtbEZv
cihzdHIpOyByZXR1cm47IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9QUkU6IHsK
LSAgICAgIEhUTUxQcmVFbGVtZW50SW1wbCAmcHJlID0gc3RhdGljX2Nhc3Q8SFRNTFByZUVsZW1l
bnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgY2FzZSBQ
cmVXaWR0aDogICAgICAgICAgIHsgcHJlLnNldFdpZHRoKHZhbHVlLnRvSW50MzIoZXhlYykpOyBy
ZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6ZmllbGRTZXRTZXR0ZXIo
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9N
OjpET01TdHJpbmcmIHN0cikKK3sKK30KKwordm9pZCBIVE1MRWxlbWVudDo6bGVnZW5kU2V0dGVy
KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERP
TTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTExlZ2VuZEVsZW1lbnRJbXBsJiBsZWdlbmQg
PSAqc3RhdGljX2Nhc3Q8SFRNTExlZ2VuZEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0
Y2ggKHRva2VuKSB7CisgICAgICAgIC8vIHJlYWQtb25seTogZm9ybQorICAgICAgICBjYXNlIExl
Z2VuZEFjY2Vzc0tleTogICAgICAgeyBsZWdlbmQuc2V0QWNjZXNzS2V5KHN0cik7IHJldHVybjsg
fQorICAgICAgICBjYXNlIExlZ2VuZEFsaWduOiAgICAgICAgICAgeyBsZWdlbmQuc2V0QWxpZ24o
c3RyKTsgcmV0dXJuOyB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfQlI6IHsKLSAg
ICAgIEhUTUxCUkVsZW1lbnRJbXBsICZiciA9IHN0YXRpY19jYXN0PEhUTUxCUkVsZW1lbnRJbXBs
ICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgY2FzZSBCUkNsZWFy
OiAgICAgICAgICAgeyBici5zZXRDbGVhcihzdHIpOyByZXR1cm47IH0KLSAgICAgIH0KK30KKwor
dm9pZCBIVE1MRWxlbWVudDo6dUxpc3RTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4s
IGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBI
VE1MVUxpc3RFbGVtZW50SW1wbCYgdUxpc3QgPSAqc3RhdGljX2Nhc3Q8SFRNTFVMaXN0RWxlbWVu
dEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBVTGlz
dENvbXBhY3Q6ICAgICAgICAgeyB1TGlzdC5zZXRDb21wYWN0KHZhbHVlLnRvQm9vbGVhbihleGVj
KSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIFVMaXN0VHlwZTogICAgICAgICAgICB7IHVMaXN0
LnNldFR5cGUoc3RyKTsgcmV0dXJuOyB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURf
QkFTRUZPTlQ6IHsKLSAgICAgIEhUTUxCYXNlRm9udEVsZW1lbnRJbXBsICZiYXNlRm9udCA9IHN0
YXRpY19jYXN0PEhUTUxCYXNlRm9udEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dp
dGNoICh0b2tlbikgewotICAgICAgY2FzZSBCYXNlRm9udENvbG9yOiAgICAgICAgICAgeyBiYXNl
Rm9udC5zZXRDb2xvcihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQmFzZUZvbnRGYWNlOiAg
ICAgICAgICAgIHsgYmFzZUZvbnQuc2V0RmFjZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2Ug
QmFzZUZvbnRTaXplOiAgICAgICAgICAgIHsgYmFzZUZvbnQuc2V0U2l6ZShzdHIpOyByZXR1cm47
IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6b0xpc3RTZXR0ZXIoRXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJp
bmcmIHN0cikKK3sKKyAgICBIVE1MT0xpc3RFbGVtZW50SW1wbCYgb0xpc3QgPSAqc3RhdGljX2Nh
c3Q8SFRNTE9MaXN0RWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsK
KyAgICAgICAgY2FzZSBPTGlzdENvbXBhY3Q6ICAgICAgICAgeyBvTGlzdC5zZXRDb21wYWN0KHZh
bHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIE9MaXN0U3RhcnQ6
ICAgICAgICAgICB7IG9MaXN0LnNldFN0YXJ0KHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47
IH0KKyAgICAgICAgY2FzZSBPTGlzdFR5cGU6ICAgICAgICAgICAgeyBvTGlzdC5zZXRUeXBlKHN0
cik7IHJldHVybjsgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0ZPTlQ6IHsKLSAg
ICAgIEhUTUxGb250RWxlbWVudEltcGwgJmZvbnQgPSBzdGF0aWNfY2FzdDxIVE1MRm9udEVsZW1l
bnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgY2FzZSBG
b250Q29sb3I6ICAgICAgICAgICB7IGZvbnQuc2V0Q29sb3Ioc3RyKTsgcmV0dXJuOyB9Ci0gICAg
ICBjYXNlIEZvbnRGYWNlOiAgICAgICAgICAgIHsgZm9udC5zZXRGYWNlKHN0cik7IHJldHVybjsg
fQotICAgICAgY2FzZSBGb250U2l6ZTogICAgICAgICAgICB7IGZvbnQuc2V0U2l6ZShzdHIpOyBy
ZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6ZExpc3RTZXR0ZXIoRXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpE
T01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MRExpc3RFbGVtZW50SW1wbCYgZExpc3QgPSAqc3Rh
dGljX2Nhc3Q8SFRNTERMaXN0RWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIGlmICh0b2tlbiA9
PSBETGlzdENvbXBhY3QpCisgICAgICAgIGRMaXN0LnNldENvbXBhY3QodmFsdWUudG9Cb29sZWFu
KGV4ZWMpKTsKK30KKwordm9pZCBIVE1MRWxlbWVudDo6ZGlyU2V0dGVyKEV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBz
dHIpCit7CisgICAgSFRNTERpcmVjdG9yeUVsZW1lbnRJbXBsJiBkaXJlY3RvcnkgPSAqc3RhdGlj
X2Nhc3Q8SFRNTERpcmVjdG9yeUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBpZiAodG9rZW4g
PT0gRGlyZWN0b3J5Q29tcGFjdCkKKyAgICAgICAgZGlyZWN0b3J5LnNldENvbXBhY3QodmFsdWUu
dG9Cb29sZWFuKGV4ZWMpKTsKK30KKwordm9pZCBIVE1MRWxlbWVudDo6bWVudVNldHRlcihFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRP
TVN0cmluZyYgc3RyKQoreworICAgIEhUTUxNZW51RWxlbWVudEltcGwmIG1lbnUgPSAqc3RhdGlj
X2Nhc3Q8SFRNTE1lbnVFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IE1l
bnVDb21wYWN0KQorICAgICAgICBtZW51LnNldENvbXBhY3QodmFsdWUudG9Cb29sZWFuKGV4ZWMp
KTsKK30KKwordm9pZCBIVE1MRWxlbWVudDo6bGlTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sK
KyAgICBIVE1MTElFbGVtZW50SW1wbCYgbGkgPSAqc3RhdGljX2Nhc3Q8SFRNTExJRWxlbWVudElt
cGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBMSVR5cGU6
ICAgICAgICAgICAgeyBsaS5zZXRUeXBlKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIExJ
VmFsdWU6ICAgICAgICAgICB7IGxpLnNldFZhbHVlKHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1
cm47IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9IUjogewotICAgICAgSFRNTEhS
RWxlbWVudEltcGwgJmhyID0gc3RhdGljX2Nhc3Q8SFRNTEhSRWxlbWVudEltcGwgJj4oZWxlbWVu
dCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIEhSQWxpZ246ICAgICAgICAg
ICB7IGhyLnNldEFsaWduKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBIUk5vU2hhZGU6ICAg
ICAgICAgeyBoci5zZXROb1NoYWRlKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQot
ICAgICAgY2FzZSBIUlNpemU6ICAgICAgICAgICAgeyBoci5zZXRTaXplKHN0cik7IHJldHVybjsg
fQotICAgICAgY2FzZSBIUldpZHRoOiAgICAgICAgICAgeyBoci5zZXRXaWR0aChzdHIpOyByZXR1
cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6ZGl2U2V0dGVyKEV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3Ry
aW5nJiBzdHIpCit7CisgICAgSFRNTERpdkVsZW1lbnRJbXBsJiBkaXYgPSAqc3RhdGljX2Nhc3Q8
SFRNTERpdkVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBpZiAodG9rZW4gPT0gRGl2QWxpZ24p
CisgICAgICAgIGRpdi5zZXRBbGlnbihzdHIpOworfQorCit2b2lkIEhUTUxFbGVtZW50OjpwYXJh
Z3JhcGhTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1
ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MUGFyYWdyYXBoRWxlbWVu
dEltcGwmIHBhcmFncmFwaCA9ICpzdGF0aWNfY2FzdDxIVE1MUGFyYWdyYXBoRWxlbWVudEltcGwq
PihpbXBsKCkpOworICAgIGlmICh0b2tlbiA9PSBQYXJhZ3JhcGhBbGlnbikKKyAgICAgICAgcGFy
YWdyYXBoLnNldEFsaWduKHN0cik7Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OmhlYWRpbmdTZXR0
ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3Qg
RE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MSGVhZGluZ0VsZW1lbnRJbXBsJiBoZWFk
aW5nID0gKnN0YXRpY19jYXN0PEhUTUxIZWFkaW5nRWxlbWVudEltcGwqPihpbXBsKCkpOworICAg
IGlmICh0b2tlbiA9PSBIZWFkaW5nQWxpZ24pCisgICAgICAgIGhlYWRpbmcuc2V0QWxpZ24oc3Ry
KTsKK30KKwordm9pZCBIVE1MRWxlbWVudDo6YmxvY2tRdW90ZVNldHRlcihFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYg
c3RyKQoreworICAgIEhUTUxCbG9ja3F1b3RlRWxlbWVudEltcGwmIGJsb2NrUXVvdGUgPSAqc3Rh
dGljX2Nhc3Q8SFRNTEJsb2NrcXVvdGVFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRv
a2VuID09IEJsb2NrUXVvdGVDaXRlKQorICAgICAgICBibG9ja1F1b3RlLnNldENpdGUoc3RyKTsK
K30KKwordm9pZCBIVE1MRWxlbWVudDo6cXVvdGVTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sK
KyAgICBIVE1MUXVvdGVFbGVtZW50SW1wbCYgcXVvdGUgPSAqc3RhdGljX2Nhc3Q8SFRNTFF1b3Rl
RWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIGlmICh0b2tlbiA9PSBRdW90ZUNpdGUpCisgICAg
ICAgIHF1b3RlLnNldENpdGUoc3RyKTsKK30KKwordm9pZCBIVE1MRWxlbWVudDo6cHJlU2V0dGVy
KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERP
TTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciAnd3Jh
cCcgd2hlbiB3aGl0ZS1zcGFjZTogcHJlLXdyYXAgaXMgaW1wbGVtZW50ZWQuCisgICAgSFRNTFBy
ZUVsZW1lbnRJbXBsJiBwcmUgPSAqc3RhdGljX2Nhc3Q8SFRNTFByZUVsZW1lbnRJbXBsKj4oaW1w
bCgpKTsKKyAgICBpZiAodG9rZW4gPT0gUHJlV2lkdGgpCisgICAgICAgIHByZS5zZXRXaWR0aCh2
YWx1ZS50b0ludDMyKGV4ZWMpKTsKK30KKwordm9pZCBIVE1MRWxlbWVudDo6YnJTZXR0ZXIoRXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpE
T01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MQlJFbGVtZW50SW1wbCYgYnIgPSAqc3RhdGljX2Nh
c3Q8SFRNTEJSRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIGlmICh0b2tlbiA9PSBCUkNsZWFy
KQorICAgICAgICBici5zZXRDbGVhcihzdHIpOworfQorCit2b2lkIEhUTUxFbGVtZW50OjpiYXNl
Rm9udFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVl
LCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxCYXNlRm9udEVsZW1lbnRJ
bXBsJiBiYXNlRm9udCA9ICpzdGF0aWNfY2FzdDxIVE1MQmFzZUZvbnRFbGVtZW50SW1wbCo+KGlt
cGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNlIEJhc2VGb250Q29sb3I6
ICAgICAgICAgICB7IGJhc2VGb250LnNldENvbG9yKHN0cik7IHJldHVybjsgfQorICAgICAgICBj
YXNlIEJhc2VGb250RmFjZTogICAgICAgICAgICB7IGJhc2VGb250LnNldEZhY2Uoc3RyKTsgcmV0
dXJuOyB9CisgICAgICAgIGNhc2UgQmFzZUZvbnRTaXplOiAgICAgICAgICAgIHsgYmFzZUZvbnQu
c2V0U2l6ZShzdHIpOyByZXR1cm47IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9J
TlM6Ci0gICAgY2FzZSBJRF9ERUw6IHsKLSAgICAgIEhUTUxNb2RFbGVtZW50SW1wbCAmbW9kID0g
c3RhdGljX2Nhc3Q8SFRNTE1vZEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNo
ICh0b2tlbikgewotICAgICAgY2FzZSBNb2RDaXRlOiAgICAgICAgICAgIHsgbW9kLnNldENpdGUo
c3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIE1vZERhdGVUaW1lOiAgICAgICAgeyBtb2Quc2V0
RGF0ZVRpbWUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6
OmZvbnRTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1
ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MRm9udEVsZW1lbnRJbXBs
JiBmb250ID0gKnN0YXRpY19jYXN0PEhUTUxGb250RWxlbWVudEltcGwqPihpbXBsKCkpOworICAg
IHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBGb250Q29sb3I6ICAgICAgICAgICB7IGZv
bnQuc2V0Q29sb3Ioc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgRm9udEZhY2U6ICAgICAg
ICAgICAgeyBmb250LnNldEZhY2Uoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgRm9udFNp
emU6ICAgICAgICAgICAgeyBmb250LnNldFNpemUoc3RyKTsgcmV0dXJuOyB9CiAgICAgfQotICAg
IGJyZWFrOwotICAgIGNhc2UgSURfQTogewotICAgICAgSFRNTEFuY2hvckVsZW1lbnRJbXBsICZh
bmNob3IgPSBzdGF0aWNfY2FzdDxIVE1MQW5jaG9yRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0g
ICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIEFuY2hvckFjY2Vzc0tleTogICAgICAg
eyBhbmNob3Iuc2V0QWNjZXNzS2V5KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBBbmNob3JD
aGFyc2V0OiAgICAgICAgIHsgYW5jaG9yLnNldENoYXJzZXQoc3RyKTsgcmV0dXJuOyB9Ci0gICAg
ICBjYXNlIEFuY2hvckNvb3JkczogICAgICAgICAgeyBhbmNob3Iuc2V0Q29vcmRzKHN0cik7IHJl
dHVybjsgfQotICAgICAgY2FzZSBBbmNob3JIcmVmOiAgICAgICAgICAgIHsgYW5jaG9yLnNldEhy
ZWYoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEFuY2hvckhyZWZMYW5nOiAgICAgICAgeyBh
bmNob3Iuc2V0SHJlZmxhbmcoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEFuY2hvck5hbWU6
ICAgICAgICAgICAgeyBhbmNob3Iuc2V0TmFtZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2Ug
QW5jaG9yUmVsOiAgICAgICAgICAgICB7IGFuY2hvci5zZXRSZWwoc3RyKTsgcmV0dXJuOyB9Ci0g
ICAgICBjYXNlIEFuY2hvclJldjogICAgICAgICAgICAgeyBhbmNob3Iuc2V0UmV2KHN0cik7IHJl
dHVybjsgfQotICAgICAgY2FzZSBBbmNob3JTaGFwZTogICAgICAgICAgIHsgYW5jaG9yLnNldFNo
YXBlKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBBbmNob3JUYWJJbmRleDogICAgICAgIHsg
YW5jaG9yLnNldFRhYkluZGV4KHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KLSAgICAg
IGNhc2UgQW5jaG9yVGFyZ2V0OiAgICAgICAgICB7IGFuY2hvci5zZXRUYXJnZXQoc3RyKTsgcmV0
dXJuOyB9Ci0gICAgICBjYXNlIEFuY2hvclR5cGU6ICAgICAgICAgICAgeyBhbmNob3Iuc2V0VHlw
ZShzdHIpOyByZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6aHJTZXR0
ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3Qg
RE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MSFJFbGVtZW50SW1wbCYgaHIgPSAqc3Rh
dGljX2Nhc3Q8SFRNTEhSRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4p
IHsKKyAgICAgICAgY2FzZSBIUkFsaWduOiAgICAgICAgICAgeyBoci5zZXRBbGlnbihzdHIpOyBy
ZXR1cm47IH0KKyAgICAgICAgY2FzZSBIUk5vU2hhZGU6ICAgICAgICAgeyBoci5zZXROb1NoYWRl
KHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIEhSU2l6ZTog
ICAgICAgICAgICB7IGhyLnNldFNpemUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgSFJX
aWR0aDogICAgICAgICAgIHsgaHIuc2V0V2lkdGgoc3RyKTsgcmV0dXJuOyB9CiAgICAgfQotICAg
IGJyZWFrOwotICAgIGNhc2UgSURfSU1HOiB7Ci0gICAgICBIVE1MSW1hZ2VFbGVtZW50SW1wbCAm
aW1hZ2UgPSBzdGF0aWNfY2FzdDxIVE1MSW1hZ2VFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAg
ICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgSW1hZ2VOYW1lOiAgICAgICAgICAgIHsg
aW1hZ2Uuc2V0TmFtZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSW1hZ2VBbGlnbjogICAg
ICAgICAgIHsgaW1hZ2Uuc2V0QWxpZ24oc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEltYWdl
QWx0OiAgICAgICAgICAgICB7IGltYWdlLnNldEFsdChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNh
c2UgSW1hZ2VCb3JkZXI6ICAgICAgICAgIHsgaW1hZ2Uuc2V0Qm9yZGVyKHZhbHVlLnRvSW50MzIo
ZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSW1hZ2VIZWlnaHQ6ICAgICAgICAgIHsgaW1h
Z2Uuc2V0SGVpZ2h0KHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2Ug
SW1hZ2VIc3BhY2U6ICAgICAgICAgIHsgaW1hZ2Uuc2V0SHNwYWNlKHZhbHVlLnRvSW50MzIoZXhl
YykpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSW1hZ2VJc01hcDogICAgICAgICAgIHsgaW1hZ2Uu
c2V0SXNNYXAodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElt
YWdlTG9uZ0Rlc2M6ICAgICAgICB7IGltYWdlLnNldExvbmdEZXNjKHN0cik7IHJldHVybjsgfQot
ICAgICAgY2FzZSBJbWFnZVNyYzogICAgICAgICAgICAgeyBpbWFnZS5zZXRTcmMoc3RyKTsgcmV0
dXJuOyB9Ci0gICAgICBjYXNlIEltYWdlVXNlTWFwOiAgICAgICAgICB7IGltYWdlLnNldFVzZU1h
cChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSW1hZ2VWc3BhY2U6ICAgICAgICAgIHsgaW1h
Z2Uuc2V0VnNwYWNlKHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2Ug
SW1hZ2VXaWR0aDogICAgICAgICAgIHsgaW1hZ2Uuc2V0V2lkdGgodmFsdWUudG9JbnQzMihleGVj
KSk7IHJldHVybjsgfQotICAgICAgfQorfQorCit2b2lkIEhUTUxFbGVtZW50Ojptb2RTZXR0ZXIo
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9N
OjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MTW9kRWxlbWVudEltcGwmIG1vZCA9ICpzdGF0
aWNfY2FzdDxIVE1MTW9kRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4p
IHsKKyAgICAgICAgY2FzZSBNb2RDaXRlOiAgICAgICAgICAgIHsgbW9kLnNldENpdGUoc3RyKTsg
cmV0dXJuOyB9CisgICAgICAgIGNhc2UgTW9kRGF0ZVRpbWU6ICAgICAgICB7IG1vZC5zZXREYXRl
VGltZShzdHIpOyByZXR1cm47IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9PQkpF
Q1Q6IHsKLSAgICAgIEhUTUxPYmplY3RFbGVtZW50SW1wbCAmb2JqZWN0ID0gc3RhdGljX2Nhc3Q8
SFRNTE9iamVjdEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikg
ewotICAgICAgLy8gcmVhZC1vbmx5OiBmb3JtCi0gICAgICBjYXNlIE9iamVjdENvZGU6ICAgICAg
ICAgICAgICAgICB7IG9iamVjdC5zZXRDb2RlKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBP
YmplY3RBbGlnbjogICAgICAgICAgIHsgb2JqZWN0LnNldEFsaWduKHN0cik7IHJldHVybjsgfQot
ICAgICAgY2FzZSBPYmplY3RBcmNoaXZlOiAgICAgICAgIHsgb2JqZWN0LnNldEFyY2hpdmUoc3Ry
KTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIE9iamVjdEJvcmRlcjogICAgICAgICAgeyBvYmplY3Qu
c2V0Qm9yZGVyKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBPYmplY3RDb2RlQmFzZTogICAg
ICAgIHsgb2JqZWN0LnNldENvZGVCYXNlKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBPYmpl
Y3RDb2RlVHlwZTogICAgICAgIHsgb2JqZWN0LnNldENvZGVUeXBlKHN0cik7IHJldHVybjsgfQot
ICAgICAgLy8gcmVhZC1vbmx5OiBPYmplY3RDb250ZW50RG9jdW1lbnQKLSAgICAgIGNhc2UgT2Jq
ZWN0RGF0YTogICAgICAgICAgICB7IG9iamVjdC5zZXREYXRhKHN0cik7IHJldHVybjsgfQotICAg
ICAgY2FzZSBPYmplY3REZWNsYXJlOiAgICAgICAgIHsgb2JqZWN0LnNldERlY2xhcmUodmFsdWUu
dG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIE9iamVjdEhlaWdodDogICAg
ICAgICAgeyBvYmplY3Quc2V0SGVpZ2h0KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBPYmpl
Y3RIc3BhY2U6ICAgICAgICAgIHsgb2JqZWN0LnNldEhzcGFjZShzdHIpOyByZXR1cm47IH0KLSAg
ICAgIGNhc2UgT2JqZWN0TmFtZTogICAgICAgICAgICB7IG9iamVjdC5zZXROYW1lKHN0cik7IHJl
dHVybjsgfQotICAgICAgY2FzZSBPYmplY3RTdGFuZGJ5OiAgICAgICAgIHsgb2JqZWN0LnNldFN0
YW5kYnkoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIE9iamVjdFRhYkluZGV4OiAgICAgICAg
eyBvYmplY3Quc2V0VGFiSW5kZXgodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQotICAg
ICAgY2FzZSBPYmplY3RUeXBlOiAgICAgICAgICAgIHsgb2JqZWN0LnNldFR5cGUoc3RyKTsgcmV0
dXJuOyB9Ci0gICAgICBjYXNlIE9iamVjdFVzZU1hcDogICAgICAgICAgeyBvYmplY3Quc2V0VXNl
TWFwKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBPYmplY3RWc3BhY2U6ICAgICAgICAgIHsg
b2JqZWN0LnNldFZzcGFjZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgT2JqZWN0V2lkdGg6
ICAgICAgICAgICB7IG9iamVjdC5zZXRXaWR0aChzdHIpOyByZXR1cm47IH0KLSAgICAgIH0KK30K
Kwordm9pZCBIVE1MRWxlbWVudDo6YW5jaG9yU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7Cisg
ICAgSFRNTEFuY2hvckVsZW1lbnRJbXBsJiBhbmNob3IgPSAqc3RhdGljX2Nhc3Q8SFRNTEFuY2hv
ckVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNh
c2UgQW5jaG9yQWNjZXNzS2V5OiAgICAgICB7IGFuY2hvci5zZXRBY2Nlc3NLZXkoc3RyKTsgcmV0
dXJuOyB9CisgICAgICAgIGNhc2UgQW5jaG9yQ2hhcnNldDogICAgICAgICB7IGFuY2hvci5zZXRD
aGFyc2V0KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEFuY2hvckNvb3JkczogICAgICAg
ICAgeyBhbmNob3Iuc2V0Q29vcmRzKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEFuY2hv
ckhyZWY6ICAgICAgICAgICAgeyBhbmNob3Iuc2V0SHJlZihzdHIpOyByZXR1cm47IH0KKyAgICAg
ICAgY2FzZSBBbmNob3JIcmVmTGFuZzogICAgICAgIHsgYW5jaG9yLnNldEhyZWZsYW5nKHN0cik7
IHJldHVybjsgfQorICAgICAgICBjYXNlIEFuY2hvck5hbWU6ICAgICAgICAgICAgeyBhbmNob3Iu
c2V0TmFtZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBBbmNob3JSZWw6ICAgICAgICAg
ICAgIHsgYW5jaG9yLnNldFJlbChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBBbmNob3JS
ZXY6ICAgICAgICAgICAgIHsgYW5jaG9yLnNldFJldihzdHIpOyByZXR1cm47IH0KKyAgICAgICAg
Y2FzZSBBbmNob3JTaGFwZTogICAgICAgICAgIHsgYW5jaG9yLnNldFNoYXBlKHN0cik7IHJldHVy
bjsgfQorICAgICAgICBjYXNlIEFuY2hvclRhYkluZGV4OiAgICAgICAgeyBhbmNob3Iuc2V0VGFi
SW5kZXgodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIEFuY2hv
clRhcmdldDogICAgICAgICAgeyBhbmNob3Iuc2V0VGFyZ2V0KHN0cik7IHJldHVybjsgfQorICAg
ICAgICBjYXNlIEFuY2hvclR5cGU6ICAgICAgICAgICAgeyBhbmNob3Iuc2V0VHlwZShzdHIpOyBy
ZXR1cm47IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9QQVJBTTogewotICAgICAg
SFRNTFBhcmFtRWxlbWVudEltcGwgJnBhcmFtID0gc3RhdGljX2Nhc3Q8SFRNTFBhcmFtRWxlbWVu
dEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIFBh
cmFtTmFtZTogICAgICAgICAgICB7IHBhcmFtLnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9Ci0gICAg
ICBjYXNlIFBhcmFtVHlwZTogICAgICAgICAgICB7IHBhcmFtLnNldFR5cGUoc3RyKTsgcmV0dXJu
OyB9Ci0gICAgICBjYXNlIFBhcmFtVmFsdWU6ICAgICAgICAgICB7IHBhcmFtLnNldFZhbHVlKHN0
cik7IHJldHVybjsgfQotICAgICAgY2FzZSBQYXJhbVZhbHVlVHlwZTogICAgICAgeyBwYXJhbS5z
ZXRWYWx1ZVR5cGUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1l
bnQ6OmltYWdlU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYg
dmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTEltYWdlRWxlbWVu
dEltcGwmIGltYWdlID0gKnN0YXRpY19jYXN0PEhUTUxJbWFnZUVsZW1lbnRJbXBsKj4oaW1wbCgp
KTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgSW1hZ2VOYW1lOiAgICAgICAg
ICAgIHsgaW1hZ2Uuc2V0TmFtZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJbWFnZUFs
aWduOiAgICAgICAgICAgeyBpbWFnZS5zZXRBbGlnbihzdHIpOyByZXR1cm47IH0KKyAgICAgICAg
Y2FzZSBJbWFnZUFsdDogICAgICAgICAgICAgeyBpbWFnZS5zZXRBbHQoc3RyKTsgcmV0dXJuOyB9
CisgICAgICAgIGNhc2UgSW1hZ2VCb3JkZXI6ICAgICAgICAgIHsgaW1hZ2Uuc2V0Qm9yZGVyKHZh
bHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJbWFnZUhlaWdodDog
ICAgICAgICAgeyBpbWFnZS5zZXRIZWlnaHQodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsg
fQorICAgICAgICBjYXNlIEltYWdlSHNwYWNlOiAgICAgICAgICB7IGltYWdlLnNldEhzcGFjZSh2
YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgSW1hZ2VJc01hcDog
ICAgICAgICAgIHsgaW1hZ2Uuc2V0SXNNYXAodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJu
OyB9CisgICAgICAgIGNhc2UgSW1hZ2VMb25nRGVzYzogICAgICAgIHsgaW1hZ2Uuc2V0TG9uZ0Rl
c2Moc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgSW1hZ2VTcmM6ICAgICAgICAgICAgIHsg
aW1hZ2Uuc2V0U3JjKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEltYWdlVXNlTWFwOiAg
ICAgICAgICB7IGltYWdlLnNldFVzZU1hcChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJ
bWFnZVZzcGFjZTogICAgICAgICAgeyBpbWFnZS5zZXRWc3BhY2UodmFsdWUudG9JbnQzMihleGVj
KSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIEltYWdlV2lkdGg6ICAgICAgICAgICB7IGltYWdl
LnNldFdpZHRoKHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KICAgICB9Ci0gICAgYnJl
YWs7Ci0gICAgY2FzZSBJRF9BUFBMRVQ6IHsKLSAgICAgIEhUTUxBcHBsZXRFbGVtZW50SW1wbCAm
YXBwbGV0ID0gc3RhdGljX2Nhc3Q8SFRNTEFwcGxldEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwot
ICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgY2FzZSBBcHBsZXRBbGlnbjogICAgICAgICAg
IHsgYXBwbGV0LnNldEFsaWduKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBBcHBsZXRBbHQ6
ICAgICAgICAgICAgIHsgYXBwbGV0LnNldEFsdChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2Ug
QXBwbGV0QXJjaGl2ZTogICAgICAgICB7IGFwcGxldC5zZXRBcmNoaXZlKHN0cik7IHJldHVybjsg
fQotICAgICAgY2FzZSBBcHBsZXRDb2RlOiAgICAgICAgICAgIHsgYXBwbGV0LnNldENvZGUoc3Ry
KTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEFwcGxldENvZGVCYXNlOiAgICAgICAgeyBhcHBsZXQu
c2V0Q29kZUJhc2Uoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEFwcGxldEhlaWdodDogICAg
ICAgICAgeyBhcHBsZXQuc2V0SGVpZ2h0KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBBcHBs
ZXRIc3BhY2U6ICAgICAgICAgIHsgYXBwbGV0LnNldEhzcGFjZShzdHIpOyByZXR1cm47IH0KLSAg
ICAgIGNhc2UgQXBwbGV0TmFtZTogICAgICAgICAgICB7IGFwcGxldC5zZXROYW1lKHN0cik7IHJl
dHVybjsgfQotICAgICAgY2FzZSBBcHBsZXRPYmplY3Q6ICAgICAgICAgIHsgYXBwbGV0LnNldE9i
amVjdChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQXBwbGV0VnNwYWNlOiAgICAgICAgICB7
IGFwcGxldC5zZXRWc3BhY2Uoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEFwcGxldFdpZHRo
OiAgICAgICAgICAgeyBhcHBsZXQuc2V0V2lkdGgoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICB9Cit9
CisKK3ZvaWQgSFRNTEVsZW1lbnQ6Om9iamVjdFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQorewor
ICAgIEhUTUxPYmplY3RFbGVtZW50SW1wbCYgb2JqZWN0ID0gKnN0YXRpY19jYXN0PEhUTUxPYmpl
Y3RFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICAv
LyByZWFkLW9ubHk6IGZvcm0KKyAgICAgICAgY2FzZSBPYmplY3RDb2RlOiAgICAgICAgICAgIHsg
b2JqZWN0LnNldENvZGUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgT2JqZWN0QWxpZ246
ICAgICAgICAgICB7IG9iamVjdC5zZXRBbGlnbihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2Fz
ZSBPYmplY3RBcmNoaXZlOiAgICAgICAgIHsgb2JqZWN0LnNldEFyY2hpdmUoc3RyKTsgcmV0dXJu
OyB9CisgICAgICAgIGNhc2UgT2JqZWN0Qm9yZGVyOiAgICAgICAgICB7IG9iamVjdC5zZXRCb3Jk
ZXIoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgT2JqZWN0Q29kZUJhc2U6ICAgICAgICB7
IG9iamVjdC5zZXRDb2RlQmFzZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBPYmplY3RD
b2RlVHlwZTogICAgICAgIHsgb2JqZWN0LnNldENvZGVUeXBlKHN0cik7IHJldHVybjsgfQorICAg
ICAgICAvLyByZWFkLW9ubHk6IE9iamVjdENvbnRlbnREb2N1bWVudAorICAgICAgICBjYXNlIE9i
amVjdERhdGE6ICAgICAgICAgICAgeyBvYmplY3Quc2V0RGF0YShzdHIpOyByZXR1cm47IH0KKyAg
ICAgICAgY2FzZSBPYmplY3REZWNsYXJlOiAgICAgICAgIHsgb2JqZWN0LnNldERlY2xhcmUodmFs
dWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgT2JqZWN0SGVpZ2h0
OiAgICAgICAgICB7IG9iamVjdC5zZXRIZWlnaHQoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNh
c2UgT2JqZWN0SHNwYWNlOiAgICAgICAgICB7IG9iamVjdC5zZXRIc3BhY2Uoc3RyKTsgcmV0dXJu
OyB9CisgICAgICAgIGNhc2UgT2JqZWN0TmFtZTogICAgICAgICAgICB7IG9iamVjdC5zZXROYW1l
KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIE9iamVjdFN0YW5kYnk6ICAgICAgICAgeyBv
YmplY3Quc2V0U3RhbmRieShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBPYmplY3RUYWJJ
bmRleDogICAgICAgIHsgb2JqZWN0LnNldFRhYkluZGV4KHZhbHVlLnRvSW50MzIoZXhlYykpOyBy
ZXR1cm47IH0KKyAgICAgICAgY2FzZSBPYmplY3RUeXBlOiAgICAgICAgICAgIHsgb2JqZWN0LnNl
dFR5cGUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgT2JqZWN0VXNlTWFwOiAgICAgICAg
ICB7IG9iamVjdC5zZXRVc2VNYXAoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgT2JqZWN0
VnNwYWNlOiAgICAgICAgICB7IG9iamVjdC5zZXRWc3BhY2Uoc3RyKTsgcmV0dXJuOyB9CisgICAg
ICAgIGNhc2UgT2JqZWN0V2lkdGg6ICAgICAgICAgICB7IG9iamVjdC5zZXRXaWR0aChzdHIpOyBy
ZXR1cm47IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9NQVA6IHsKLSAgICAgIEhU
TUxNYXBFbGVtZW50SW1wbCAmbWFwID0gc3RhdGljX2Nhc3Q8SFRNTE1hcEVsZW1lbnRJbXBsICY+
KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgLy8gcmVhZC1vbmx5OiBh
cmVhcwotICAgICAgY2FzZSBNYXBOYW1lOiAgICAgICAgICAgICAgICAgeyBtYXAuc2V0TmFtZShz
dHIpOyByZXR1cm47IH0KLSAgICAgfQorfQorCit2b2lkIEhUTUxFbGVtZW50OjpwYXJhbVNldHRl
cihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBE
T006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxQYXJhbUVsZW1lbnRJbXBsJiBwYXJhbSA9
ICpzdGF0aWNfY2FzdDxIVE1MUGFyYW1FbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNo
ICh0b2tlbikgeworICAgICAgICBjYXNlIFBhcmFtTmFtZTogICAgICAgICAgICB7IHBhcmFtLnNl
dE5hbWUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgUGFyYW1UeXBlOiAgICAgICAgICAg
IHsgcGFyYW0uc2V0VHlwZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBQYXJhbVZhbHVl
OiAgICAgICAgICAgeyBwYXJhbS5zZXRWYWx1ZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2Fz
ZSBQYXJhbVZhbHVlVHlwZTogICAgICAgeyBwYXJhbS5zZXRWYWx1ZVR5cGUoc3RyKTsgcmV0dXJu
OyB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfQVJFQTogewotICAgICAgSFRNTEFy
ZWFFbGVtZW50SW1wbCAmYXJlYSA9IHN0YXRpY19jYXN0PEhUTUxBcmVhRWxlbWVudEltcGwgJj4o
ZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIEFyZWFBY2Nlc3NL
ZXk6ICAgICAgIHsgYXJlYS5zZXRBY2Nlc3NLZXkoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNl
IEFyZWFBbHQ6ICAgICAgICAgICAgIHsgYXJlYS5zZXRBbHQoc3RyKTsgcmV0dXJuOyB9Ci0gICAg
ICBjYXNlIEFyZWFDb29yZHM6ICAgICAgICAgIHsgYXJlYS5zZXRDb29yZHMoc3RyKTsgcmV0dXJu
OyB9Ci0gICAgICBjYXNlIEFyZWFIcmVmOiAgICAgICAgICAgIHsgYXJlYS5zZXRIcmVmKHN0cik7
IHJldHVybjsgfQotICAgICAgY2FzZSBBcmVhTm9IcmVmOiAgICAgICAgICB7IGFyZWEuc2V0Tm9I
cmVmKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBBcmVhU2hh
cGU6ICAgICAgICAgICB7IGFyZWEuc2V0U2hhcGUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNl
IEFyZWFUYWJJbmRleDogICAgICAgIHsgYXJlYS5zZXRUYWJJbmRleCh2YWx1ZS50b0ludDMyKGV4
ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEFyZWFUYXJnZXQ6ICAgICAgICAgIHsgYXJlYS5z
ZXRUYXJnZXQoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6
OmFwcGxldFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZh
bHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxBcHBsZXRFbGVtZW50
SW1wbCYgYXBwbGV0ID0gKnN0YXRpY19jYXN0PEhUTUxBcHBsZXRFbGVtZW50SW1wbCo+KGltcGwo
KSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNlIEFwcGxldEFsaWduOiAgICAg
ICAgICAgeyBhcHBsZXQuc2V0QWxpZ24oc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQXBw
bGV0QWx0OiAgICAgICAgICAgICB7IGFwcGxldC5zZXRBbHQoc3RyKTsgcmV0dXJuOyB9CisgICAg
ICAgIGNhc2UgQXBwbGV0QXJjaGl2ZTogICAgICAgICB7IGFwcGxldC5zZXRBcmNoaXZlKHN0cik7
IHJldHVybjsgfQorICAgICAgICBjYXNlIEFwcGxldENvZGU6ICAgICAgICAgICAgeyBhcHBsZXQu
c2V0Q29kZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBBcHBsZXRDb2RlQmFzZTogICAg
ICAgIHsgYXBwbGV0LnNldENvZGVCYXNlKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEFw
cGxldEhlaWdodDogICAgICAgICAgeyBhcHBsZXQuc2V0SGVpZ2h0KHN0cik7IHJldHVybjsgfQor
ICAgICAgICBjYXNlIEFwcGxldEhzcGFjZTogICAgICAgICAgeyBhcHBsZXQuc2V0SHNwYWNlKHN0
cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEFwcGxldE5hbWU6ICAgICAgICAgICAgeyBhcHBs
ZXQuc2V0TmFtZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBBcHBsZXRPYmplY3Q6ICAg
ICAgICAgIHsgYXBwbGV0LnNldE9iamVjdChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBB
cHBsZXRWc3BhY2U6ICAgICAgICAgIHsgYXBwbGV0LnNldFZzcGFjZShzdHIpOyByZXR1cm47IH0K
KyAgICAgICAgY2FzZSBBcHBsZXRXaWR0aDogICAgICAgICAgIHsgYXBwbGV0LnNldFdpZHRoKHN0
cik7IHJldHVybjsgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX1NDUklQVDogewot
ICAgICAgSFRNTFNjcmlwdEVsZW1lbnRJbXBsICZzY3JpcHQgPSBzdGF0aWNfY2FzdDxIVE1MU2Ny
aXB0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAg
ICBjYXNlIFNjcmlwdFRleHQ6ICAgICAgICAgICAgeyBzY3JpcHQuc2V0VGV4dChzdHIpOyByZXR1
cm47IH0KLSAgICAgIGNhc2UgU2NyaXB0SHRtbEZvcjogICAgICAgICB7IHNjcmlwdC5zZXRIdG1s
Rm9yKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBTY3JpcHRFdmVudDogICAgICAgICAgIHsg
c2NyaXB0LnNldEV2ZW50KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBTY3JpcHRDaGFyc2V0
OiAgICAgICAgIHsgc2NyaXB0LnNldENoYXJzZXQoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNl
IFNjcmlwdERlZmVyOiAgICAgICAgICAgeyBzY3JpcHQuc2V0RGVmZXIodmFsdWUudG9Cb29sZWFu
KGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFNjcmlwdFNyYzogICAgICAgICAgICAgeyBz
Y3JpcHQuc2V0U3JjKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBTY3JpcHRUeXBlOiAgICAg
ICAgICAgIHsgc2NyaXB0LnNldFR5cGUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICB9Cit9CisKK3Zv
aWQgSFRNTEVsZW1lbnQ6Om1hcFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29u
c3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxN
YXBFbGVtZW50SW1wbCYgbWFwID0gKnN0YXRpY19jYXN0PEhUTUxNYXBFbGVtZW50SW1wbCo+KGlt
cGwoKSk7CisgICAgaWYgKHRva2VuID09IE1hcE5hbWUpCisgICAgICAgIC8vIHJlYWQtb25seTog
YXJlYXMKKyAgICAgICAgbWFwLnNldE5hbWUoc3RyKTsKK30KKwordm9pZCBIVE1MRWxlbWVudDo6
YXJlYVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVl
LCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxBcmVhRWxlbWVudEltcGwm
IGFyZWEgPSAqc3RhdGljX2Nhc3Q8SFRNTEFyZWFFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAg
c3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNlIEFyZWFBY2Nlc3NLZXk6ICAgICAgIHsgYXJl
YS5zZXRBY2Nlc3NLZXkoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQXJlYUFsdDogICAg
ICAgICAgICAgeyBhcmVhLnNldEFsdChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBBcmVh
Q29vcmRzOiAgICAgICAgICB7IGFyZWEuc2V0Q29vcmRzKHN0cik7IHJldHVybjsgfQorICAgICAg
ICBjYXNlIEFyZWFIcmVmOiAgICAgICAgICAgIHsgYXJlYS5zZXRIcmVmKHN0cik7IHJldHVybjsg
fQorICAgICAgICBjYXNlIEFyZWFOb0hyZWY6ICAgICAgICAgIHsgYXJlYS5zZXROb0hyZWYodmFs
dWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQXJlYVNoYXBlOiAg
ICAgICAgICAgeyBhcmVhLnNldFNoYXBlKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEFy
ZWFUYWJJbmRleDogICAgICAgIHsgYXJlYS5zZXRUYWJJbmRleCh2YWx1ZS50b0ludDMyKGV4ZWMp
KTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQXJlYVRhcmdldDogICAgICAgICAgeyBhcmVhLnNl
dFRhcmdldChzdHIpOyByZXR1cm47IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9U
QUJMRTogewotICAgICAgSFRNTFRhYmxlRWxlbWVudEltcGwgJnRhYmxlID0gc3RhdGljX2Nhc3Q8
SFRNTFRhYmxlRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7
Ci0gICAgICBjYXNlIFRhYmxlQ2FwdGlvbjogICAgICAgICB7IHRhYmxlLnNldENhcHRpb24odG9I
VE1MVGFibGVDYXB0aW9uRWxlbWVudCh2YWx1ZSkpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFi
bGVUSGVhZDogICAgICAgICAgIHsgdGFibGUuc2V0VEhlYWQodG9IVE1MVGFibGVTZWN0aW9uRWxl
bWVudCh2YWx1ZSkpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVURm9vdDogICAgICAgICAg
IHsgdGFibGUuc2V0VEZvb3QodG9IVE1MVGFibGVTZWN0aW9uRWxlbWVudCh2YWx1ZSkpOyByZXR1
cm47IH0KLSAgICAgIC8vIHJlYWQtb25seTogcm93cwotICAgICAgLy8gcmVhZC1vbmx5OiB0Ym9k
aWVzCi0gICAgICBjYXNlIFRhYmxlQWxpZ246ICAgICAgICAgICB7IHRhYmxlLnNldEFsaWduKHN0
cik7IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJsZUJnQ29sb3I6ICAgICAgICAgeyB0YWJsZS5z
ZXRCZ0NvbG9yKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJsZUJvcmRlcjogICAgICAg
ICAgeyB0YWJsZS5zZXRCb3JkZXIoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlQ2Vs
bFBhZGRpbmc6ICAgICB7IHRhYmxlLnNldENlbGxQYWRkaW5nKHN0cik7IHJldHVybjsgfQotICAg
ICAgY2FzZSBUYWJsZUNlbGxTcGFjaW5nOiAgICAgeyB0YWJsZS5zZXRDZWxsU3BhY2luZyhzdHIp
OyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVGcmFtZTogICAgICAgICAgIHsgdGFibGUuc2V0
RnJhbWUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlUnVsZXM6ICAgICAgICAgICB7
IHRhYmxlLnNldFJ1bGVzKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJsZVN1bW1hcnk6
ICAgICAgICAgeyB0YWJsZS5zZXRTdW1tYXJ5KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBU
YWJsZVdpZHRoOiAgICAgICAgICAgeyB0YWJsZS5zZXRXaWR0aChzdHIpOyByZXR1cm47IH0KLSAg
ICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6c2NyaXB0U2V0dGVyKEV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBz
dHIpCit7CisgICAgSFRNTFNjcmlwdEVsZW1lbnRJbXBsJiBzY3JpcHQgPSAqc3RhdGljX2Nhc3Q8
SFRNTFNjcmlwdEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7Cisg
ICAgICAgIGNhc2UgU2NyaXB0VGV4dDogICAgICAgICAgICB7IHNjcmlwdC5zZXRUZXh0KHN0cik7
IHJldHVybjsgfQorICAgICAgICBjYXNlIFNjcmlwdEh0bWxGb3I6ICAgICAgICAgeyBzY3JpcHQu
c2V0SHRtbEZvcihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBTY3JpcHRFdmVudDogICAg
ICAgICAgIHsgc2NyaXB0LnNldEV2ZW50KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFNj
cmlwdENoYXJzZXQ6ICAgICAgICAgeyBzY3JpcHQuc2V0Q2hhcnNldChzdHIpOyByZXR1cm47IH0K
KyAgICAgICAgY2FzZSBTY3JpcHREZWZlcjogICAgICAgICAgIHsgc2NyaXB0LnNldERlZmVyKHZh
bHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIFNjcmlwdFNyYzog
ICAgICAgICAgICAgeyBzY3JpcHQuc2V0U3JjKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNl
IFNjcmlwdFR5cGU6ICAgICAgICAgICAgeyBzY3JpcHQuc2V0VHlwZShzdHIpOyByZXR1cm47IH0K
ICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9DQVBUSU9OOiB7Ci0gICAgICBIVE1MVGFi
bGVDYXB0aW9uRWxlbWVudEltcGwgJnRhYmxlQ2FwdGlvbiA9IHN0YXRpY19jYXN0PEhUTUxUYWJs
ZUNhcHRpb25FbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsK
LSAgICAgIGNhc2UgVGFibGVBbGlnbjogICAgICAgICAgIHsgdGFibGVDYXB0aW9uLnNldEFsaWdu
KHN0cik7IHJldHVybjsgfQotICAgICAgfQorfQorCit2b2lkIEhUTUxFbGVtZW50Ojp0YWJsZVNl
dHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25z
dCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxUYWJsZUVsZW1lbnRJbXBsJiB0YWJs
ZSA9ICpzdGF0aWNfY2FzdDxIVE1MVGFibGVFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dp
dGNoICh0b2tlbikgeworICAgICAgICBjYXNlIFRhYmxlQ2FwdGlvbjogICAgICAgICB7IHRhYmxl
LnNldENhcHRpb24odG9IVE1MVGFibGVDYXB0aW9uRWxlbWVudCh2YWx1ZSkpOyByZXR1cm47IH0K
KyAgICAgICAgY2FzZSBUYWJsZVRIZWFkOiAgICAgICAgICAgeyB0YWJsZS5zZXRUSGVhZCh0b0hU
TUxUYWJsZVNlY3Rpb25FbGVtZW50KHZhbHVlKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRh
YmxlVEZvb3Q6ICAgICAgICAgICB7IHRhYmxlLnNldFRGb290KHRvSFRNTFRhYmxlU2VjdGlvbkVs
ZW1lbnQodmFsdWUpKTsgcmV0dXJuOyB9CisgICAgICAgIC8vIHJlYWQtb25seTogcm93cworICAg
ICAgICAvLyByZWFkLW9ubHk6IHRib2RpZXMKKyAgICAgICAgY2FzZSBUYWJsZUFsaWduOiAgICAg
ICAgICAgeyB0YWJsZS5zZXRBbGlnbihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJs
ZUJnQ29sb3I6ICAgICAgICAgeyB0YWJsZS5zZXRCZ0NvbG9yKHN0cik7IHJldHVybjsgfQorICAg
ICAgICBjYXNlIFRhYmxlQm9yZGVyOiAgICAgICAgICB7IHRhYmxlLnNldEJvcmRlcihzdHIpOyBy
ZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZUNlbGxQYWRkaW5nOiAgICAgeyB0YWJsZS5zZXRD
ZWxsUGFkZGluZyhzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZUNlbGxTcGFjaW5n
OiAgICAgeyB0YWJsZS5zZXRDZWxsU3BhY2luZyhzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2Fz
ZSBUYWJsZUZyYW1lOiAgICAgICAgICAgeyB0YWJsZS5zZXRGcmFtZShzdHIpOyByZXR1cm47IH0K
KyAgICAgICAgY2FzZSBUYWJsZVJ1bGVzOiAgICAgICAgICAgeyB0YWJsZS5zZXRSdWxlcyhzdHIp
OyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZVN1bW1hcnk6ICAgICAgICAgeyB0YWJsZS5z
ZXRTdW1tYXJ5KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxlV2lkdGg6ICAgICAg
ICAgICB7IHRhYmxlLnNldFdpZHRoKHN0cik7IHJldHVybjsgfQogICAgIH0KLSAgICBicmVhazsK
LSAgICBjYXNlIElEX0NPTDogewotICAgICAgSFRNTFRhYmxlQ29sRWxlbWVudEltcGwgJnRhYmxl
Q29sID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ29sRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0g
ICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIFRhYmxlQ29sQWxpZ246ICAgICAgICAg
ICB7IHRhYmxlQ29sLnNldEFsaWduKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJsZUNv
bENoOiAgICAgICAgICAgICAgeyB0YWJsZUNvbC5zZXRDaChzdHIpOyByZXR1cm47IH0KLSAgICAg
IGNhc2UgVGFibGVDb2xDaE9mZjogICAgICAgICAgIHsgdGFibGVDb2wuc2V0Q2hPZmYoc3RyKTsg
cmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlQ29sU3BhbjogICAgICAgICAgICB7IHRhYmxlQ29s
LnNldFNwYW4odmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJs
ZUNvbFZBbGlnbjogICAgICAgICAgeyB0YWJsZUNvbC5zZXRWQWxpZ24oc3RyKTsgcmV0dXJuOyB9
Ci0gICAgICBjYXNlIFRhYmxlQ29sV2lkdGg6ICAgICAgICAgICB7IHRhYmxlQ29sLnNldFdpZHRo
KHN0cik7IHJldHVybjsgfQotICAgICAgfQorfQorCit2b2lkIEhUTUxFbGVtZW50Ojp0YWJsZUNh
cHRpb25TZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1
ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MVGFibGVDYXB0aW9uRWxl
bWVudEltcGwmIHRhYmxlQ2FwdGlvbiA9ICpzdGF0aWNfY2FzdDxIVE1MVGFibGVDYXB0aW9uRWxl
bWVudEltcGwqPihpbXBsKCkpOworICAgIGlmICh0b2tlbiA9PSBUYWJsZUNhcHRpb25BbGlnbikK
KyAgICAgICAgdGFibGVDYXB0aW9uLnNldEFsaWduKHN0cik7Cit9CisKK3ZvaWQgSFRNTEVsZW1l
bnQ6OnRhYmxlQ29sU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1
ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTFRhYmxlQ29s
RWxlbWVudEltcGwmIHRhYmxlQ29sID0gKnN0YXRpY19jYXN0PEhUTUxUYWJsZUNvbEVsZW1lbnRJ
bXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgVGFibGVD
b2xBbGlnbjogICAgICAgICAgIHsgdGFibGVDb2wuc2V0QWxpZ24oc3RyKTsgcmV0dXJuOyB9Cisg
ICAgICAgIGNhc2UgVGFibGVDb2xDaDogICAgICAgICAgICAgIHsgdGFibGVDb2wuc2V0Q2goc3Ry
KTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGFibGVDb2xDaE9mZjogICAgICAgICAgIHsgdGFi
bGVDb2wuc2V0Q2hPZmYoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGFibGVDb2xTcGFu
OiAgICAgICAgICAgIHsgdGFibGVDb2wuc2V0U3Bhbih2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0
dXJuOyB9CisgICAgICAgIGNhc2UgVGFibGVDb2xWQWxpZ246ICAgICAgICAgIHsgdGFibGVDb2wu
c2V0VkFsaWduKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxlQ29sV2lkdGg6ICAg
ICAgICAgICB7IHRhYmxlQ29sLnNldFdpZHRoKHN0cik7IHJldHVybjsgfQogICAgIH0KLSAgICBi
cmVhazsKLSAgICBjYXNlIElEX1RIRUFEOgotICAgIGNhc2UgSURfVEJPRFk6Ci0gICAgY2FzZSBJ
RF9URk9PVDogewotICAgICAgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsICZ0YWJsZVNlY3Rp
b24gPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGwgJj4oZWxlbWVudCk7
Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIFRhYmxlU2VjdGlvbkFsaWduOiAg
ICAgICAgICAgeyB0YWJsZVNlY3Rpb24uc2V0QWxpZ24oc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBj
YXNlIFRhYmxlU2VjdGlvbkNoOiAgICAgICAgICAgICAgeyB0YWJsZVNlY3Rpb24uc2V0Q2goc3Ry
KTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlU2VjdGlvbkNoT2ZmOiAgICAgICAgICAgeyB0
YWJsZVNlY3Rpb24uc2V0Q2hPZmYoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlU2Vj
dGlvblZBbGlnbjogICAgICAgICAgeyB0YWJsZVNlY3Rpb24uc2V0VkFsaWduKHN0cik7IHJldHVy
bjsgfQotICAgICAgLy8gcmVhZC1vbmx5OiByb3dzCi0gICAgICB9Cit9CisKK3ZvaWQgSFRNTEVs
ZW1lbnQ6OnRhYmxlU2VjdGlvblNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29u
c3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxU
YWJsZVNlY3Rpb25FbGVtZW50SW1wbCYgdGFibGVTZWN0aW9uID0gKnN0YXRpY19jYXN0PEhUTUxU
YWJsZVNlY3Rpb25FbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgewor
ICAgICAgICBjYXNlIFRhYmxlU2VjdGlvbkFsaWduOiAgICAgICAgICAgeyB0YWJsZVNlY3Rpb24u
c2V0QWxpZ24oc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGFibGVTZWN0aW9uQ2g6ICAg
ICAgICAgICAgICB7IHRhYmxlU2VjdGlvbi5zZXRDaChzdHIpOyByZXR1cm47IH0KKyAgICAgICAg
Y2FzZSBUYWJsZVNlY3Rpb25DaE9mZjogICAgICAgICAgIHsgdGFibGVTZWN0aW9uLnNldENoT2Zm
KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxlU2VjdGlvblZBbGlnbjogICAgICAg
ICAgeyB0YWJsZVNlY3Rpb24uc2V0VkFsaWduKHN0cik7IHJldHVybjsgfQorICAgICAgICAvLyBy
ZWFkLW9ubHk6IHJvd3MKICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9UUjogewotICAg
ICAgSFRNTFRhYmxlUm93RWxlbWVudEltcGwgJnRhYmxlUm93ID0gc3RhdGljX2Nhc3Q8SFRNTFRh
YmxlUm93RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0g
ICAgICAvLyByZWFkLW9ubHk6IHJvd0luZGV4Ci0gICAgICAvLyByZWFkLW9ubHk6IHNlY3Rpb25S
b3dJbmRleAotICAgICAgLy8gcmVhZC1vbmx5OiBjZWxscwotICAgICAgY2FzZSBUYWJsZVJvd0Fs
aWduOiAgICAgICAgICAgeyB0YWJsZVJvdy5zZXRBbGlnbihzdHIpOyByZXR1cm47IH0KLSAgICAg
IGNhc2UgVGFibGVSb3dCZ0NvbG9yOiAgICAgICAgIHsgdGFibGVSb3cuc2V0QmdDb2xvcihzdHIp
OyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVSb3dDaDogICAgICAgICAgICAgIHsgdGFibGVS
b3cuc2V0Q2goc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlUm93Q2hPZmY6ICAgICAg
ICAgICB7IHRhYmxlUm93LnNldENoT2ZmKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJs
ZVJvd1ZBbGlnbjogICAgICAgICAgeyB0YWJsZVJvdy5zZXRWQWxpZ24oc3RyKTsgcmV0dXJuOyB9
Ci0gICAgICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OnRhYmxlUm93U2V0dGVyKEV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3Ry
aW5nJiBzdHIpCit7CisgICAgSFRNTFRhYmxlUm93RWxlbWVudEltcGwmIHRhYmxlUm93ID0gKnN0
YXRpY19jYXN0PEhUTUxUYWJsZVJvd0VsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2gg
KHRva2VuKSB7CisgICAgICAgIC8vIHJlYWQtb25seTogcm93SW5kZXgKKyAgICAgICAgLy8gcmVh
ZC1vbmx5OiBzZWN0aW9uUm93SW5kZXgKKyAgICAgICAgLy8gcmVhZC1vbmx5OiBjZWxscworICAg
ICAgICBjYXNlIFRhYmxlUm93QWxpZ246ICAgICAgICAgICB7IHRhYmxlUm93LnNldEFsaWduKHN0
cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxlUm93QmdDb2xvcjogICAgICAgICB7IHRh
YmxlUm93LnNldEJnQ29sb3Ioc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGFibGVSb3dD
aDogICAgICAgICAgICAgIHsgdGFibGVSb3cuc2V0Q2goc3RyKTsgcmV0dXJuOyB9CisgICAgICAg
IGNhc2UgVGFibGVSb3dDaE9mZjogICAgICAgICAgIHsgdGFibGVSb3cuc2V0Q2hPZmYoc3RyKTsg
cmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGFibGVSb3dWQWxpZ246ICAgICAgICAgIHsgdGFibGVS
b3cuc2V0VkFsaWduKHN0cik7IHJldHVybjsgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNl
IElEX1RIOgotICAgIGNhc2UgSURfVEQ6IHsKLSAgICAgIEhUTUxUYWJsZUNlbGxFbGVtZW50SW1w
bCAmdGFibGVDZWxsID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsICY+KGVs
ZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgLy8gcmVhZC1vbmx5OiBjZWxs
SW5kZXgKLSAgICAgIGNhc2UgVGFibGVDZWxsQWJicjogICAgICAgICAgICB7IHRhYmxlQ2VsbC5z
ZXRBYmJyKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJsZUNlbGxBbGlnbjogICAgICAg
ICAgIHsgdGFibGVDZWxsLnNldEFsaWduKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJs
ZUNlbGxBeGlzOiAgICAgICAgICAgIHsgdGFibGVDZWxsLnNldEF4aXMoc3RyKTsgcmV0dXJuOyB9
Ci0gICAgICBjYXNlIFRhYmxlQ2VsbEJnQ29sb3I6ICAgICAgICAgeyB0YWJsZUNlbGwuc2V0QmdD
b2xvcihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVDZWxsQ2g6ICAgICAgICAgICAg
ICB7IHRhYmxlQ2VsbC5zZXRDaChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVDZWxs
Q2hPZmY6ICAgICAgICAgICB7IHRhYmxlQ2VsbC5zZXRDaE9mZihzdHIpOyByZXR1cm47IH0KLSAg
ICAgIGNhc2UgVGFibGVDZWxsQ29sU3BhbjogICAgICAgICB7IHRhYmxlQ2VsbC5zZXRDb2xTcGFu
KHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVDZWxsSGVh
ZGVyczogICAgICAgICB7IHRhYmxlQ2VsbC5zZXRIZWFkZXJzKHN0cik7IHJldHVybjsgfQotICAg
ICAgY2FzZSBUYWJsZUNlbGxIZWlnaHQ6ICAgICAgICAgIHsgdGFibGVDZWxsLnNldEhlaWdodChz
dHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVDZWxsTm9XcmFwOiAgICAgICAgICB7IHRh
YmxlQ2VsbC5zZXROb1dyYXAodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAg
ICBjYXNlIFRhYmxlQ2VsbFJvd1NwYW46ICAgICAgICAgeyB0YWJsZUNlbGwuc2V0Um93U3Bhbih2
YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlQ2VsbFNjb3Bl
OiAgICAgICAgICAgeyB0YWJsZUNlbGwuc2V0U2NvcGUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBj
YXNlIFRhYmxlQ2VsbFZBbGlnbjogICAgICAgICAgeyB0YWJsZUNlbGwuc2V0VkFsaWduKHN0cik7
IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJsZUNlbGxXaWR0aDogICAgICAgICAgIHsgdGFibGVD
ZWxsLnNldFdpZHRoKHN0cik7IHJldHVybjsgfQotICAgICAgfQorfQorCit2b2lkIEhUTUxFbGVt
ZW50Ojp0YWJsZUNlbGxTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZh
bHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MVGFibGVD
ZWxsRWxlbWVudEltcGwmIHRhYmxlQ2VsbCA9ICpzdGF0aWNfY2FzdDxIVE1MVGFibGVDZWxsRWxl
bWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgLy8gcmVh
ZC1vbmx5OiBjZWxsSW5kZXgKKyAgICAgICAgY2FzZSBUYWJsZUNlbGxBYmJyOiAgICAgICAgICAg
IHsgdGFibGVDZWxsLnNldEFiYnIoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGFibGVD
ZWxsQWxpZ246ICAgICAgICAgICB7IHRhYmxlQ2VsbC5zZXRBbGlnbihzdHIpOyByZXR1cm47IH0K
KyAgICAgICAgY2FzZSBUYWJsZUNlbGxBeGlzOiAgICAgICAgICAgIHsgdGFibGVDZWxsLnNldEF4
aXMoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGFibGVDZWxsQmdDb2xvcjogICAgICAg
ICB7IHRhYmxlQ2VsbC5zZXRCZ0NvbG9yKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRh
YmxlQ2VsbENoOiAgICAgICAgICAgICAgeyB0YWJsZUNlbGwuc2V0Q2goc3RyKTsgcmV0dXJuOyB9
CisgICAgICAgIGNhc2UgVGFibGVDZWxsQ2hPZmY6ICAgICAgICAgICB7IHRhYmxlQ2VsbC5zZXRD
aE9mZihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZUNlbGxDb2xTcGFuOiAgICAg
ICAgIHsgdGFibGVDZWxsLnNldENvbFNwYW4odmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsg
fQorICAgICAgICBjYXNlIFRhYmxlQ2VsbEhlYWRlcnM6ICAgICAgICAgeyB0YWJsZUNlbGwuc2V0
SGVhZGVycyhzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZUNlbGxIZWlnaHQ6ICAg
ICAgICAgIHsgdGFibGVDZWxsLnNldEhlaWdodChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2Fz
ZSBUYWJsZUNlbGxOb1dyYXA6ICAgICAgICAgIHsgdGFibGVDZWxsLnNldE5vV3JhcCh2YWx1ZS50
b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZUNlbGxSb3dTcGFu
OiAgICAgICAgIHsgdGFibGVDZWxsLnNldFJvd1NwYW4odmFsdWUudG9JbnQzMihleGVjKSk7IHJl
dHVybjsgfQorICAgICAgICBjYXNlIFRhYmxlQ2VsbFNjb3BlOiAgICAgICAgICAgeyB0YWJsZUNl
bGwuc2V0U2NvcGUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGFibGVDZWxsVkFsaWdu
OiAgICAgICAgICB7IHRhYmxlQ2VsbC5zZXRWQWxpZ24oc3RyKTsgcmV0dXJuOyB9CisgICAgICAg
IGNhc2UgVGFibGVDZWxsV2lkdGg6ICAgICAgICAgICB7IHRhYmxlQ2VsbC5zZXRXaWR0aChzdHIp
OyByZXR1cm47IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9GUkFNRVNFVDogewot
ICAgICAgSFRNTEZyYW1lU2V0RWxlbWVudEltcGwgJmZyYW1lU2V0ID0gc3RhdGljX2Nhc3Q8SFRN
TEZyYW1lU2V0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7
Ci0gICAgICBjYXNlIEZyYW1lU2V0Q29sczogICAgICAgICAgICB7IGZyYW1lU2V0LnNldENvbHMo
c3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEZyYW1lU2V0Um93czogICAgICAgICAgICB7IGZy
YW1lU2V0LnNldFJvd3Moc3RyKTsgcmV0dXJuOyB9Ci0gICAgICB9Cit9CisKK3ZvaWQgSFRNTEVs
ZW1lbnQ6OmZyYW1lU2V0U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBW
YWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTEZyYW1l
U2V0RWxlbWVudEltcGwmIGZyYW1lU2V0ID0gKnN0YXRpY19jYXN0PEhUTUxGcmFtZVNldEVsZW1l
bnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgRnJh
bWVTZXRDb2xzOiAgICAgICAgICAgIHsgZnJhbWVTZXQuc2V0Q29scyhzdHIpOyByZXR1cm47IH0K
KyAgICAgICAgY2FzZSBGcmFtZVNldFJvd3M6ICAgICAgICAgICAgeyBmcmFtZVNldC5zZXRSb3dz
KHN0cik7IHJldHVybjsgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0ZSQU1FOiB7
Ci0gICAgICBIVE1MRnJhbWVFbGVtZW50SW1wbCAmZnJhbWVFbGVtZW50ID0gc3RhdGljX2Nhc3Q8
SFRNTEZyYW1lRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7
Ci0gICAgICAgLy8gcmVhZC1vbmx5OiBGcmFtZUNvbnRlbnREb2N1bWVudDoKLSAgICAgIGNhc2Ug
RnJhbWVGcmFtZUJvcmRlcjogICAgIHsgZnJhbWVFbGVtZW50LnNldEZyYW1lQm9yZGVyKHN0cik7
IHJldHVybjsgfQotICAgICAgY2FzZSBGcmFtZUxvbmdEZXNjOiAgICAgICAgeyBmcmFtZUVsZW1l
bnQuc2V0TG9uZ0Rlc2Moc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEZyYW1lTWFyZ2luSGVp
Z2h0OiAgICB7IGZyYW1lRWxlbWVudC5zZXRNYXJnaW5IZWlnaHQoc3RyKTsgcmV0dXJuOyB9Ci0g
ICAgICBjYXNlIEZyYW1lTWFyZ2luV2lkdGg6ICAgICB7IGZyYW1lRWxlbWVudC5zZXRNYXJnaW5X
aWR0aChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgRnJhbWVOYW1lOiAgICAgICAgICAgIHsg
ZnJhbWVFbGVtZW50LnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEZyYW1lTm9S
ZXNpemU6ICAgICAgICB7IGZyYW1lRWxlbWVudC5zZXROb1Jlc2l6ZSh2YWx1ZS50b0Jvb2xlYW4o
ZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgRnJhbWVTY3JvbGxpbmc6ICAgICAgIHsgZnJh
bWVFbGVtZW50LnNldFNjcm9sbGluZyhzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgRnJhbWVT
cmM6ICAgICAgICAgICAgIHsgZnJhbWVFbGVtZW50LnNldFNyYyhzdHIpOyByZXR1cm47IH0KLSAg
ICAgIGNhc2UgRnJhbWVMb2NhdGlvbjogICAgICAgIHsgZnJhbWVFbGVtZW50LnNldExvY2F0aW9u
KHN0cik7IHJldHVybjsgfQotICAgICAgfQorfQorCit2b2lkIEhUTUxFbGVtZW50OjpmcmFtZVNl
dHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25z
dCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxGcmFtZUVsZW1lbnRJbXBsJiBmcmFt
ZUVsZW1lbnQgPSAqc3RhdGljX2Nhc3Q8SFRNTEZyYW1lRWxlbWVudEltcGwqPihpbXBsKCkpOwor
ICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgLy8gcmVhZC1vbmx5OiBGcmFtZUNvbnRlbnRE
b2N1bWVudDoKKyAgICAgICAgY2FzZSBGcmFtZUZyYW1lQm9yZGVyOiAgICAgeyBmcmFtZUVsZW1l
bnQuc2V0RnJhbWVCb3JkZXIoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgRnJhbWVMb25n
RGVzYzogICAgICAgIHsgZnJhbWVFbGVtZW50LnNldExvbmdEZXNjKHN0cik7IHJldHVybjsgfQor
ICAgICAgICBjYXNlIEZyYW1lTWFyZ2luSGVpZ2h0OiAgICB7IGZyYW1lRWxlbWVudC5zZXRNYXJn
aW5IZWlnaHQoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgRnJhbWVNYXJnaW5XaWR0aDog
ICAgIHsgZnJhbWVFbGVtZW50LnNldE1hcmdpbldpZHRoKHN0cik7IHJldHVybjsgfQorICAgICAg
ICBjYXNlIEZyYW1lTmFtZTogICAgICAgICAgICB7IGZyYW1lRWxlbWVudC5zZXROYW1lKHN0cik7
IHJldHVybjsgfQorICAgICAgICBjYXNlIEZyYW1lTm9SZXNpemU6ICAgICAgICB7IGZyYW1lRWxl
bWVudC5zZXROb1Jlc2l6ZSh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KKyAgICAg
ICAgY2FzZSBGcmFtZVNjcm9sbGluZzogICAgICAgeyBmcmFtZUVsZW1lbnQuc2V0U2Nyb2xsaW5n
KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEZyYW1lU3JjOiAgICAgICAgICAgICB7IGZy
YW1lRWxlbWVudC5zZXRTcmMoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgRnJhbWVMb2Nh
dGlvbjogICAgICAgIHsgZnJhbWVFbGVtZW50LnNldExvY2F0aW9uKHN0cik7IHJldHVybjsgfQog
ICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0lGUkFNRTogewotICAgICAgSFRNTElGcmFt
ZUVsZW1lbnRJbXBsICZpRnJhbWUgPSBzdGF0aWNfY2FzdDxIVE1MSUZyYW1lRWxlbWVudEltcGwg
Jj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIElGcmFtZUFs
aWduOiAgICAgICAgICAgeyBpRnJhbWUuc2V0QWxpZ24oc3RyKTsgcmV0dXJuOyB9Ci0gICAgICAv
LyByZWFkLW9ubHk6IElGcmFtZUNvbnRlbnREb2N1bWVudAotICAgICAgY2FzZSBJRnJhbWVGcmFt
ZUJvcmRlcjogICAgIHsgaUZyYW1lLnNldEZyYW1lQm9yZGVyKHN0cik7IHJldHVybjsgfQotICAg
ICAgY2FzZSBJRnJhbWVIZWlnaHQ6ICAgICAgICAgIHsgaUZyYW1lLnNldEhlaWdodChzdHIpOyBy
ZXR1cm47IH0KLSAgICAgIGNhc2UgSUZyYW1lTG9uZ0Rlc2M6ICAgICAgICB7IGlGcmFtZS5zZXRM
b25nRGVzYyhzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSUZyYW1lTWFyZ2luSGVpZ2h0OiAg
ICB7IGlGcmFtZS5zZXRNYXJnaW5IZWlnaHQoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElG
cmFtZU1hcmdpbldpZHRoOiAgICAgeyBpRnJhbWUuc2V0TWFyZ2luV2lkdGgoc3RyKTsgcmV0dXJu
OyB9Ci0gICAgICBjYXNlIElGcmFtZU5hbWU6ICAgICAgICAgICAgeyBpRnJhbWUuc2V0TmFtZShz
dHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSUZyYW1lU2Nyb2xsaW5nOiAgICAgICB7IGlGcmFt
ZS5zZXRTY3JvbGxpbmcoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElGcmFtZVNyYzogICAg
ICAgICAgICAgeyBpRnJhbWUuc2V0U3JjKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBJRnJh
bWVXaWR0aDogICAgICAgICAgIHsgaUZyYW1lLnNldFdpZHRoKHN0cik7IHJldHVybjsgfQotICAg
ICAgfQotICAgICAgYnJlYWs7Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OmlGcmFtZVNldHRlcihF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006
OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxJRnJhbWVFbGVtZW50SW1wbCYgaUZyYW1lID0g
KnN0YXRpY19jYXN0PEhUTUxJRnJhbWVFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNo
ICh0b2tlbikgeworICAgICAgICBjYXNlIElGcmFtZUFsaWduOiAgICAgICAgICAgeyBpRnJhbWUu
c2V0QWxpZ24oc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIC8vIHJlYWQtb25seTogSUZyYW1lQ29u
dGVudERvY3VtZW50CisgICAgICAgIGNhc2UgSUZyYW1lRnJhbWVCb3JkZXI6ICAgICB7IGlGcmFt
ZS5zZXRGcmFtZUJvcmRlcihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJRnJhbWVIZWln
aHQ6ICAgICAgICAgIHsgaUZyYW1lLnNldEhlaWdodChzdHIpOyByZXR1cm47IH0KKyAgICAgICAg
Y2FzZSBJRnJhbWVMb25nRGVzYzogICAgICAgIHsgaUZyYW1lLnNldExvbmdEZXNjKHN0cik7IHJl
dHVybjsgfQorICAgICAgICBjYXNlIElGcmFtZU1hcmdpbkhlaWdodDogICAgeyBpRnJhbWUuc2V0
TWFyZ2luSGVpZ2h0KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIElGcmFtZU1hcmdpbldp
ZHRoOiAgICAgeyBpRnJhbWUuc2V0TWFyZ2luV2lkdGgoc3RyKTsgcmV0dXJuOyB9CisgICAgICAg
IGNhc2UgSUZyYW1lTmFtZTogICAgICAgICAgICB7IGlGcmFtZS5zZXROYW1lKHN0cik7IHJldHVy
bjsgfQorICAgICAgICBjYXNlIElGcmFtZVNjcm9sbGluZzogICAgICAgeyBpRnJhbWUuc2V0U2Ny
b2xsaW5nKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIElGcmFtZVNyYzogICAgICAgICAg
ICAgeyBpRnJhbWUuc2V0U3JjKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIElGcmFtZVdp
ZHRoOiAgICAgICAgICAgeyBpRnJhbWUuc2V0V2lkdGgoc3RyKTsgcmV0dXJuOyB9CiAgICAgfQot
ICB9Cit9CiAKLSAgLy8gZ2VuZXJpYyBwcm9wZXJ0aWVzCi0gIHN3aXRjaCAodG9rZW4pIHsKLSAg
Y2FzZSBFbGVtZW50SWQ6Ci0gICAgZWxlbWVudC5zZXRJZChzdHIpOwotICAgIHJldHVybjsKLSAg
Y2FzZSBFbGVtZW50VGl0bGU6Ci0gICAgZWxlbWVudC5zZXRUaXRsZShzdHIpOwotICAgIHJldHVy
bjsKLSAgY2FzZSBFbGVtZW50TGFuZzoKLSAgICBlbGVtZW50LnNldExhbmcoc3RyKTsKLSAgICBy
ZXR1cm47Ci0gIGNhc2UgRWxlbWVudERpcjoKLSAgICBlbGVtZW50LnNldERpcihzdHIpOwotICAg
IHJldHVybjsKLSAgY2FzZSBFbGVtZW50Q2xhc3NOYW1lOgotICAgIGVsZW1lbnQuc2V0Q2xhc3NO
YW1lKHN0cik7Ci0gICAgcmV0dXJuOwotICBjYXNlIEVsZW1lbnRJbm5lckhUTUw6Ci0gICAgZWxl
bWVudC5zZXRJbm5lckhUTUwoc3RyLCBleGNlcHRpb24pOwotICAgIHJldHVybjsKLSAgY2FzZSBF
bGVtZW50SW5uZXJUZXh0OgotICAgIGVsZW1lbnQuc2V0SW5uZXJUZXh0KHN0ciwgZXhjZXB0aW9u
KTsKLSAgICByZXR1cm47Ci0gIGNhc2UgRWxlbWVudE91dGVySFRNTDoKLSAgICBlbGVtZW50LnNl
dE91dGVySFRNTChzdHIsIGV4Y2VwdGlvbik7Ci0gICAgcmV0dXJuOwotICBjYXNlIEVsZW1lbnRP
dXRlclRleHQ6Ci0gICAgZWxlbWVudC5zZXRPdXRlclRleHQoc3RyLCBleGNlcHRpb24pOwotICAg
IHJldHVybjsKLSAgY2FzZSBFbGVtZW50Q29udGVudEVkaXRhYmxlOgotICAgIGVsZW1lbnQuc2V0
Q29udGVudEVkaXRhYmxlKHN0cik7Ci0gICAgcmV0dXJuOwotICBkZWZhdWx0OgotICAgIGtkV2Fy
bmluZygpIDw8ICJLSlM6OkhUTUxFbGVtZW50OjpwdXRWYWx1ZSB1bmhhbmRsZWQgdG9rZW4gIiA8
PCB0b2tlbiA8PCAiIHRoaXNUYWc9IiA8PCBlbGVtZW50LnRhZ05hbWUoKS5zdHJpbmcoKSA8PCAi
IHN0cj0iIDw8IHN0ci5zdHJpbmcoKSA8PCBlbmRsOwotICB9Cit2b2lkIEhUTUxFbGVtZW50Ojpt
YXJxdWVlU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFs
dWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgLy8gRklYTUU6IEZpbmQgb3V0
IHdoYXQgV2luSUUgc3VwcG9ydHMgYW5kIGltcGxlbWVudCBpdC4KK30KKwordm9pZCBIVE1MRWxl
bWVudDo6cHV0VmFsdWUoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2
YWx1ZSwgaW50KQoreworICAgIERPTUV4Y2VwdGlvblRyYW5zbGF0b3IgZXhjZXB0aW9uKGV4ZWMp
OworICAgIERPTTo6RE9NU3RyaW5nIHN0ciA9IHZhbHVlLmlzQShOdWxsVHlwZSkgPyBET006OkRP
TVN0cmluZygpIDogdmFsdWUudG9TdHJpbmcoZXhlYykuc3RyaW5nKCk7CisgCisgICAgLy8gQ2hl
Y2sgb3VyIHNldCBvZiBnZW5lcmljIHByb3BlcnRpZXMgZmlyc3QuCisgICAgSFRNTEVsZW1lbnRJ
bXBsICZlbGVtZW50ID0gKnN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCAqPihpbXBsKCkpOwor
ICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBFbGVtZW50SWQ6CisgICAgICAgICAg
ICBlbGVtZW50LnNldElkKHN0cik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2Ug
RWxlbWVudFRpdGxlOgorICAgICAgICAgICAgZWxlbWVudC5zZXRUaXRsZShzdHIpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIEVsZW1lbnRMYW5nOgorICAgICAgICAgICAgZWxl
bWVudC5zZXRMYW5nKHN0cik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgRWxl
bWVudERpcjoKKyAgICAgICAgICAgIGVsZW1lbnQuc2V0RGlyKHN0cik7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIGNhc2UgRWxlbWVudENsYXNzTmFtZToKKyAgICAgICAgICAgIGVsZW1l
bnQuc2V0Q2xhc3NOYW1lKHN0cik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2Ug
RWxlbWVudElubmVySFRNTDoKKyAgICAgICAgICAgIGVsZW1lbnQuc2V0SW5uZXJIVE1MKHN0ciwg
ZXhjZXB0aW9uKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBFbGVtZW50SW5u
ZXJUZXh0OgorICAgICAgICAgICAgZWxlbWVudC5zZXRJbm5lclRleHQoc3RyLCBleGNlcHRpb24p
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIEVsZW1lbnRPdXRlckhUTUw6Cisg
ICAgICAgICAgICBlbGVtZW50LnNldE91dGVySFRNTChzdHIsIGV4Y2VwdGlvbik7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIGNhc2UgRWxlbWVudE91dGVyVGV4dDoKKyAgICAgICAgICAg
IGVsZW1lbnQuc2V0T3V0ZXJUZXh0KHN0ciwgZXhjZXB0aW9uKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgY2FzZSBFbGVtZW50Q29udGVudEVkaXRhYmxlOgorICAgICAgICAgICAgZWxl
bWVudC5zZXRDb250ZW50RWRpdGFibGUoc3RyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICAvLyBOb3cgY2hlY2sgZm9yIHByb3BlcnRpZXMgdGhhdCBhcHBseSB0byBhIHNwZWNp
ZmljIGVsZW1lbnQgdHlwZS4KKyAgICBjb25zdCBHZXRTZXRJbmZvKiBpbmZvID0gZ2V0U2V0SW5m
bygpOworICAgIGlmIChpbmZvICYmIGluZm8tPm1fc2V0dGVyKQorICAgICAgICByZXR1cm4gKHRo
aXMtPiooaW5mby0+bV9zZXR0ZXIpKShleGVjLCB0b2tlbiwgdmFsdWUsIHN0cik7ICAKIH0KIAog
SFRNTEVsZW1lbnRJbXBsICp0b0hUTUxFbGVtZW50KFZhbHVlSW1wICp2YWwpCkBAIC0zMTEzLDIz
ICszMjc0LDE3IEBAIEhUTUxFbGVtZW50SW1wbCAqdG9IVE1MRWxlbWVudChWYWx1ZUltcCAKIAog
SFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnRJbXBsICp0b0hUTUxUYWJsZUNhcHRpb25FbGVtZW50KFZh
bHVlSW1wICp2YWwpCiB7Ci0gICAgaWYgKEhUTUxFbGVtZW50SW1wbCAqZSA9IHRvSFRNTEVsZW1l
bnQodmFsKSkKLSAgICAgICAgc3dpdGNoIChlLT5pZCgpKSB7Ci0gICAgICAgICAgICBjYXNlIElE
X0NBUFRJT046Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxUYWJsZUNh
cHRpb25FbGVtZW50SW1wbCAqPihlKTsKLSAgICAgICAgfQorICAgIEhUTUxFbGVtZW50SW1wbCAq
ZSA9IHRvSFRNTEVsZW1lbnQodmFsKTsKKyAgICBpZiAoZSAmJiBlLT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6Y2FwdGlvbigpKSkKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxUYWJsZUNh
cHRpb25FbGVtZW50SW1wbCAqPihlKTsKICAgICByZXR1cm4gMDsKIH0KIAogSFRNTFRhYmxlU2Vj
dGlvbkVsZW1lbnRJbXBsICp0b0hUTUxUYWJsZVNlY3Rpb25FbGVtZW50KFZhbHVlSW1wICp2YWwp
CiB7Ci0gICAgaWYgKEhUTUxFbGVtZW50SW1wbCAqZSA9IHRvSFRNTEVsZW1lbnQodmFsKSkKLSAg
ICAgICAgc3dpdGNoIChlLT5pZCgpKSB7Ci0gICAgICAgICAgICBjYXNlIElEX1RIRUFEOgotICAg
ICAgICAgICAgY2FzZSBJRF9UQk9EWToKLSAgICAgICAgICAgIGNhc2UgSURfVEZPT1Q6Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1w
bCAqPihlKTsKLSAgICAgICAgfQorICAgIEhUTUxFbGVtZW50SW1wbCAqZSA9IHRvSFRNTEVsZW1l
bnQodmFsKTsKKyAgICBpZiAoZSAmJiAoZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRoZWFkKCkp
IHx8IGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0Ym9keSgpKSB8fCBlLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6dGZvb3QoKSkpKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTFRhYmxl
U2VjdGlvbkVsZW1lbnRJbXBsICo+KGUpOwogICAgIHJldHVybiAwOwogfQogCkBAIC0zMTc4LDEw
ICszMzMzLDEwIEBAIFZhbHVlIEtKUzo6SFRNTENvbGxlY3Rpb246OnRyeUdldChFeGVjU3QKICAg
ZWxzZSBpZiAocHJvcGVydHlOYW1lID09ICJzZWxlY3RlZEluZGV4IikgewogICAgIC8vIE5PTi1T
VEFOREFSRCBvcHRpb25zLnNlbGVjdGVkSW5kZXgKICAgICBOb2RlSW1wbCAqb3B0aW9uID0gY29s
bGVjdGlvbi5pdGVtKDApOwotICAgIGlmIChvcHRpb24tPmlkKCkgPT0gSURfT1BUSU9OKSB7Cisg
ICAgaWYgKG9wdGlvbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9wdGlvbigpKSkgewogICAgICAg
Tm9kZUltcGwgKnNlbGVjdCA9IG9wdGlvbjsKICAgICAgIHdoaWxlICgoc2VsZWN0ID0gc2VsZWN0
LT5wYXJlbnROb2RlKCkpKQotICAgICAgICBpZiAoc2VsZWN0LT5pZCgpID09IElEX1NFTEVDVCkK
KyAgICAgICAgaWYgKHNlbGVjdC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnNlbGVjdCgpKSkKIAkg
IHJldHVybiBOdW1iZXIoc3RhdGljX2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnRJbXBsICo+KHNlbGVj
dCktPnNlbGVjdGVkSW5kZXgoKSk7CiAgICAgfQogICAgIHJldHVybiBVbmRlZmluZWQoKTsKQEAg
LTMzNjksNyArMzUyNCw3IEBAIHZvaWQgS0pTOjpIVE1MU2VsZWN0Q29sbGVjdGlvbjo6dHJ5UHV0
KEUKIAogICAvLyBpcyB2IGFuIG9wdGlvbiBlbGVtZW50ID8KICAgTm9kZUltcGwgKm9wdGlvbiA9
IHRvTm9kZSh2YWx1ZSk7Ci0gIGlmICghb3B0aW9uIHx8IG9wdGlvbi0+aWQoKSAhPSBJRF9PUFRJ
T04pCisgIGlmICghb3B0aW9uIHx8ICFvcHRpb24tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvcHRp
b24oKSkpCiAgICAgcmV0dXJuOwogCiAgIGludCBleGNlcHRpb24gPSAwOwpJbmRleDoga2h0bWwv
ZWNtYS9ranNfaHRtbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2to
dG1sL2VjbWEva2pzX2h0bWwuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40OQpkaWZmIC11IC1w
IC1yMS40OSBraHRtbC9lY21hL2tqc19odG1sLmgKLS0tIGtodG1sL2VjbWEva2pzX2h0bWwuaAkz
IEp1bCAyMDA1IDEwOjQ3OjU2IC0wMDAwCTEuNDkKKysrIGtodG1sL2VjbWEva2pzX2h0bWwuaAk1
IEp1bCAyMDA1IDIzOjIwOjIyIC0wMDAwCkBAIC04NSw2ICs4NSwxMzEgQEAgbmFtZXNwYWNlIEtK
UyB7CiAgICAgICBjYXB0aW9uX2luZm8sIGNvbF9pbmZvLCB0YWJsZXNlY3Rpb25faW5mbywgdHJf
aW5mbywKICAgICAgIHRhYmxlY2VsbF9pbmZvLCBmcmFtZVNldF9pbmZvLCBmcmFtZV9pbmZvLCBp
RnJhbWVfaW5mbywgbWFycXVlZV9pbmZvOwogCisgICAgLy8gRklYTUU6IE1pZ2h0IG1ha2Ugc2Vu
c2UgdG8gY29tYmluZSB0aGlzIHdpdGggQ2xhc3NJbmZvIHNvbWUgZGF5LgorICAgIHR5cGVkZWYg
VmFsdWUgKEhUTUxFbGVtZW50OjoqR2V0dGVyRnVuY3Rpb24pKEV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuKSBjb25zdDsKKyAgICB0eXBlZGVmIHZvaWQgKEhUTUxFbGVtZW50OjoqU2V0dGVyRnVu
Y3Rpb24pKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNv
bnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIHN0cnVjdCBHZXRTZXRJbmZvIHsgR2V0dGVy
RnVuY3Rpb24gbV9nZXR0ZXI7IFNldHRlckZ1bmN0aW9uIG1fc2V0dGVyOyB9OworICAgIGNvbnN0
IEdldFNldEluZm8qIGdldFNldEluZm8oKSBjb25zdDsKKyAgICBzdGF0aWMgY29uc3QgR2V0U2V0
SW5mbyBodG1sX2dldHNldCwgaGVhZF9nZXRzZXQsIGxpbmtfZ2V0c2V0LCB0aXRsZV9nZXRzZXQs
CisgICAgICBtZXRhX2dldHNldCwgYmFzZV9nZXRzZXQsIGlzSW5kZXhfZ2V0c2V0LCBzdHlsZV9n
ZXRzZXQsIGJvZHlfZ2V0c2V0LCBmb3JtX2dldHNldCwKKyAgICAgIHNlbGVjdF9nZXRzZXQsIG9w
dEdyb3VwX2dldHNldCwgb3B0aW9uX2dldHNldCwgaW5wdXRfZ2V0c2V0LCB0ZXh0QXJlYV9nZXRz
ZXQsCisgICAgICBidXR0b25fZ2V0c2V0LCBsYWJlbF9nZXRzZXQsIGZpZWxkU2V0X2dldHNldCwg
bGVnZW5kX2dldHNldCwgdWxfZ2V0c2V0LCBvbF9nZXRzZXQsCisgICAgICBkbF9nZXRzZXQsIGRp
cl9nZXRzZXQsIG1lbnVfZ2V0c2V0LCBsaV9nZXRzZXQsIGRpdl9nZXRzZXQsIHBfZ2V0c2V0LCBo
ZWFkaW5nX2dldHNldCwKKyAgICAgIGJsb2NrUXVvdGVfZ2V0c2V0LCBxX2dldHNldCwgcHJlX2dl
dHNldCwgYnJfZ2V0c2V0LCBiYXNlRm9udF9nZXRzZXQsIGZvbnRfZ2V0c2V0LAorICAgICAgaHJf
Z2V0c2V0LCBtb2RfZ2V0c2V0LCBhX2dldHNldCwgY2FudmFzX2dldHNldCwgaW1nX2dldHNldCwg
b2JqZWN0X2dldHNldCwgcGFyYW1fZ2V0c2V0LAorICAgICAgYXBwbGV0X2dldHNldCwgbWFwX2dl
dHNldCwgYXJlYV9nZXRzZXQsIHNjcmlwdF9nZXRzZXQsIHRhYmxlX2dldHNldCwKKyAgICAgIGNh
cHRpb25fZ2V0c2V0LCBjb2xfZ2V0c2V0LCB0YWJsZXNlY3Rpb25fZ2V0c2V0LCB0cl9nZXRzZXQs
CisgICAgICB0YWJsZWNlbGxfZ2V0c2V0LCBmcmFtZVNldF9nZXRzZXQsIGZyYW1lX2dldHNldCwg
aUZyYW1lX2dldHNldCwgbWFycXVlZV9nZXRzZXQ7CisKKyAgICBWYWx1ZSBodG1sR2V0dGVyKEV4
ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBodG1sU2V0dGVyKEV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6
RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIGhlYWRHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBp
bnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGhlYWRTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7
CisgICAgVmFsdWUgbGlua0dldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7
CisgICAgdm9pZCAgbGlua1NldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3Qg
VmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSB0aXRs
ZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgdGl0
bGVTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwg
Y29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgbWV0YUdldHRlcihFeGVjU3Rh
dGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgbWV0YVNldHRlcihFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0
cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBiYXNlR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRv
a2VuKSBjb25zdDsKKyAgICB2b2lkICBiYXNlU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAg
IFZhbHVlIGlzSW5kZXhHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Owor
ICAgIHZvaWQgIGlzSW5kZXhTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0
IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgc3R5
bGVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIHN0
eWxlU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUs
IGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIGJvZHlHZXR0ZXIoRXhlY1N0
YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGJvZHlTZXR0ZXIoRXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01T
dHJpbmcmIHN0cik7CisgICAgVmFsdWUgZm9ybUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0
b2tlbikgY29uc3Q7CisgICAgdm9pZCAgZm9ybVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAg
ICBWYWx1ZSBzZWxlY3RHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Owor
ICAgIHZvaWQgIHNlbGVjdFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3Qg
VmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBvcHRH
cm91cEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAg
b3B0R3JvdXBTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2
YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgb3B0aW9uR2V0dGVy
KEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBvcHRpb25TZXR0
ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3Qg
RE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgaW5wdXRHZXR0ZXIoRXhlY1N0YXRlKiBl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGlucHV0U2V0dGVyKEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5n
JiBzdHIpOworICAgIFZhbHVlIHRleHRBcmVhR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRv
a2VuKSBjb25zdDsKKyAgICB2b2lkICB0ZXh0QXJlYVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsK
KyAgICBWYWx1ZSBidXR0b25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0
OworICAgIHZvaWQgIGJ1dHRvblNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29u
c3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBs
YWJlbEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAg
bGFiZWxTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1
ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgZmllbGRTZXRHZXR0ZXIo
RXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGZpZWxkU2V0U2V0
dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0
IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIGxlZ2VuZEdldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgbGVnZW5kU2V0dGVyKEV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3Ry
aW5nJiBzdHIpOworICAgIFZhbHVlIHVMaXN0R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRv
a2VuKSBjb25zdDsKKyAgICB2b2lkICB1TGlzdFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAg
ICBWYWx1ZSBvTGlzdEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7Cisg
ICAgdm9pZCAgb0xpc3RTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZh
bHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgZExpc3RH
ZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGRMaXN0
U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNv
bnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIGRpckdldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgZGlyU2V0dGVyKEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5n
JiBzdHIpOworICAgIFZhbHVlIG1lbnVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4p
IGNvbnN0OworICAgIHZvaWQgIG1lbnVTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4s
IGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFs
dWUgbGlHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQg
IGxpU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUs
IGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIGRpdkdldHRlcihFeGVjU3Rh
dGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgZGl2U2V0dGVyKEV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3Ry
aW5nJiBzdHIpOworICAgIFZhbHVlIHBhcmFncmFwaEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGlu
dCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgcGFyYWdyYXBoU2V0dGVyKEV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBz
dHIpOworICAgIFZhbHVlIGhlYWRpbmdHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4p
IGNvbnN0OworICAgIHZvaWQgIGhlYWRpbmdTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAg
VmFsdWUgYmxvY2tRdW90ZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7
CisgICAgdm9pZCAgYmxvY2tRdW90ZVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwg
Y29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1
ZSBxdW90ZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9p
ZCAgcXVvdGVTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2
YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgcHJlR2V0dGVyKEV4
ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBwcmVTZXR0ZXIoRXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpE
T01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgYnJHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQg
dG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGJyU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAg
IFZhbHVlIGJhc2VGb250R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsK
KyAgICB2b2lkICBiYXNlRm9udFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29u
c3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBm
b250R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBm
b250U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUs
IGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIGhyR2V0dGVyKEV4ZWNTdGF0
ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBoclNldHRlcihFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmlu
ZyYgc3RyKTsKKyAgICBWYWx1ZSBtb2RHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4p
IGNvbnN0OworICAgIHZvaWQgIG1vZFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwg
Y29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1
ZSBhbmNob3JHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZv
aWQgIGFuY2hvclNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUm
IHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBpbWFnZUdldHRl
cihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgaW1hZ2VTZXR0
ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3Qg
RE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgb2JqZWN0R2V0dGVyKEV4ZWNTdGF0ZSog
ZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBvYmplY3RTZXR0ZXIoRXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJp
bmcmIHN0cik7CisgICAgVmFsdWUgcGFyYW1HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0OworICAgIHZvaWQgIHBhcmFtU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAg
IFZhbHVlIGFwcGxldEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7Cisg
ICAgdm9pZCAgYXBwbGV0U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBW
YWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIG1hcEdl
dHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgbWFwU2V0
dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0
IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIGFyZWFHZXR0ZXIoRXhlY1N0YXRlKiBl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGFyZWFTZXR0ZXIoRXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcm
IHN0cik7CisgICAgVmFsdWUgc2NyaXB0R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2Vu
KSBjb25zdDsKKyAgICB2b2lkICBzY3JpcHRTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAg
VmFsdWUgdGFibGVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAg
IHZvaWQgIHRhYmxlU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1
ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIHRhYmxlQ2Fw
dGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAg
dGFibGVDYXB0aW9uU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1
ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIHRhYmxlQ29s
R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICB0YWJs
ZUNvbFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVl
LCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSB0YWJsZVNlY3Rpb25HZXR0
ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIHRhYmxlU2Vj
dGlvblNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVl
LCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSB0YWJsZVJvd0dldHRlcihF
eGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgdGFibGVSb3dTZXR0
ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3Qg
RE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgdGFibGVDZWxsR2V0dGVyKEV4ZWNTdGF0
ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICB0YWJsZUNlbGxTZXR0ZXIoRXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpE
T01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgZnJhbWVTZXRHZXR0ZXIoRXhlY1N0YXRlKiBleGVj
LCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGZyYW1lU2V0U2V0dGVyKEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5n
JiBzdHIpOworICAgIFZhbHVlIGZyYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2Vu
KSBjb25zdDsKKyAgICB2b2lkICBmcmFtZVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
biwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBW
YWx1ZSBpRnJhbWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAg
IHZvaWQgIGlGcmFtZVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFs
dWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBtYXJxdWVl
R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBtYXJx
dWVlU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUs
IGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworCiAgICAgZW51bSB7IEh0bWxWZXJzaW9uLCBI
ZWFkUHJvZmlsZSwgTGlua0hyZWYsIExpbmtSZWwsIExpbmtNZWRpYSwKICAgICAgICAgICAgTGlu
a0NoYXJzZXQsIExpbmtEaXNhYmxlZCwgTGlua0hyZWZMYW5nLCBMaW5rUmV2LCBMaW5rVGFyZ2V0
LCBMaW5rVHlwZSwKICAgICAgICAgICAgTGlua1NoZWV0LCBUaXRsZVRleHQsIE1ldGFOYW1lLCBN
ZXRhSHR0cEVxdWl2LCBNZXRhQ29udGVudCwgTWV0YVNjaGVtZSwKSW5kZXg6IGtodG1sL2VjbWEv
a2pzX3dpbmRvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0
bWwvZWNtYS9ranNfd2luZG93LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNjIKZGlmZiAt
dSAtcCAtcjEuMTYyIGtodG1sL2VjbWEva2pzX3dpbmRvdy5jcHAKLS0tIGtodG1sL2VjbWEva2pz
X3dpbmRvdy5jcHAJMyBKdWwgMjAwNSAxMDo0Nzo1NiAtMDAwMAkxLjE2MgorKysga2h0bWwvZWNt
YS9ranNfd2luZG93LmNwcAk1IEp1bCAyMDA1IDIzOjIwOjI0IC0wMDAwCkBAIC02OCw3ICs2OCw2
IEBACiAjaW5jbHVkZSAiaHRtbC9odG1sX2RvY3VtZW50aW1wbC5oIgogI2luY2x1ZGUgImNzcy9j
c3NfcnVsZWltcGwuaCIKICNpbmNsdWRlICJjc3MvY3NzX3N0eWxlc2hlZXRpbXBsLmgiCi0jaW5j
bHVkZSAibWlzYy9odG1sdGFncy5oIgogCiAvLyBNdXN0IGluY2x1ZGUgPGNtYXRoPiBpbnN0ZWFk
IG9mIDxtYXRoLmg+IGJlY2F1c2Ugb2YgYSBidWcgaW4gdGhlCiAvLyBnY2MgMy4zIGxpYnJhcnkg
dmVyc2lvbiBvZiA8bWF0aC5oPiB3aGVyZSBpZiB5b3UgaW5jbHVkZSBib3RoCkluZGV4OiBraHRt
bC9lZGl0aW5nL2FwcGx5X3N0eWxlX2NvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9XZWJDb3JlL2todG1sL2VkaXRpbmcvYXBwbHlfc3R5bGVfY29tbWFuZC5jcHAsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuMwpkaWZmIC11IC1wIC1yMS4zIGtodG1sL2VkaXRpbmcvYXBw
bHlfc3R5bGVfY29tbWFuZC5jcHAKLS0tIGtodG1sL2VkaXRpbmcvYXBwbHlfc3R5bGVfY29tbWFu
ZC5jcHAJMzAgSnVuIDIwMDUgMDE6Mjc6MzggLTAwMDAJMS4zCisrKyBraHRtbC9lZGl0aW5nL2Fw
cGx5X3N0eWxlX2NvbW1hbmQuY3BwCTUgSnVsIDIwMDUgMjM6MjA6MjUgLTAwMDAKQEAgLTM0LDcg
KzM0LDcgQEAKICNpbmNsdWRlICJkb20vZG9tX3N0cmluZy5oIgogI2luY2x1ZGUgImh0bWxlZGl0
aW5nLmgiCiAjaW5jbHVkZSAiaHRtbC9odG1sX2VsZW1lbnRpbXBsLmgiCi0jaW5jbHVkZSAibWlz
Yy9odG1sdGFncy5oIgorI2luY2x1ZGUgImh0bWxuYW1lcy5oIgogI2luY2x1ZGUgIm1pc2MvaHRt
bGF0dHJzLmgiCiAjaW5jbHVkZSAicmVuZGVyaW5nL3JlbmRlcl9vYmplY3QuaCIKICNpbmNsdWRl
ICJ4bWwvZG9tX2RvY2ltcGwuaCIKQEAgLTY2LDYgKzY2LDcgQEAgdXNpbmcgRE9NOjpOb2RlSW1w
bDsKIHVzaW5nIERPTTo6UG9zaXRpb247CiB1c2luZyBET006OlJhbmdlSW1wbDsKIHVzaW5nIERP
TTo6VGV4dEltcGw7Cit1c2luZyBET006OkhUTUxOYW1lczsKIAogbmFtZXNwYWNlIGtodG1sIHsK
IApAQCAtMjUwLDEyICsyNTEsMTIgQEAgYm9vbCBpc1N0eWxlU3Bhbihjb25zdCBOb2RlSW1wbCAq
bm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgY29uc3QgSFRNTEVsZW1lbnRJbXBs
ICplbGVtID0gc3RhdGljX2Nhc3Q8Y29uc3QgSFRNTEVsZW1lbnRJbXBsICo+KG5vZGUpOwotICAg
IHJldHVybiBlbGVtLT5pZCgpID09IElEX1NQQU4gJiYgZWxlbS0+Z2V0QXR0cmlidXRlKEFUVFJf
Q0xBU1MpID09IHN0eWxlU3BhbkNsYXNzU3RyaW5nKCk7CisgICAgcmV0dXJuIGVsZW0tPmhhc0xv
Y2FsTmFtZShIVE1MTmFtZXM6OnNwYW4oKSkgJiYgZWxlbS0+Z2V0QXR0cmlidXRlKEFUVFJfQ0xB
U1MpID09IHN0eWxlU3BhbkNsYXNzU3RyaW5nKCk7CiB9CiAKIHN0YXRpYyBib29sIGlzRW1wdHlT
dHlsZVNwYW4oY29uc3QgTm9kZUltcGwgKm5vZGUpCiB7Ci0gICAgaWYgKCFub2RlIHx8ICFub2Rl
LT5pc0hUTUxFbGVtZW50KCkgfHwgbm9kZS0+aWQoKSAhPSBJRF9TUEFOKQorICAgIGlmICghbm9k
ZSB8fCAhbm9kZS0+aXNIVE1MRWxlbWVudCgpIHx8ICFub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6c3BhbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgY29uc3QgSFRNTEVsZW1l
bnRJbXBsICplbGVtID0gc3RhdGljX2Nhc3Q8Y29uc3QgSFRNTEVsZW1lbnRJbXBsICo+KG5vZGUp
OwpAQCAtMjY1LDcgKzI2Niw3IEBAIHN0YXRpYyBib29sIGlzRW1wdHlTdHlsZVNwYW4oY29uc3Qg
Tm9kZUkKIAogc3RhdGljIGJvb2wgaXNFbXB0eUZvbnRUYWcoY29uc3QgTm9kZUltcGwgKm5vZGUp
CiB7Ci0gICAgaWYgKCFub2RlIHx8IG5vZGUtPmlkKCkgIT0gSURfRk9OVCkKKyAgICBpZiAoIW5v
ZGUgfHwgIW5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpmb250KCkpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICBjb25zdCBFbGVtZW50SW1wbCAqZWxlbSA9IHN0YXRpY19jYXN0PGNv
bnN0IEVsZW1lbnRJbXBsICo+KG5vZGUpOwpAQCAtMjc2LDcgKzI3Nyw3IEBAIHN0YXRpYyBib29s
IGlzRW1wdHlGb250VGFnKGNvbnN0IE5vZGVJbXAKIHN0YXRpYyBFbGVtZW50SW1wbCAqY3JlYXRl
Rm9udEVsZW1lbnQoRG9jdW1lbnRJbXBsICpkb2N1bWVudCkKIHsKICAgICBpbnQgZXhjZXB0aW9u
Q29kZSA9IDA7Ci0gICAgRWxlbWVudEltcGwgKmZvbnROb2RlID0gZG9jdW1lbnQtPmNyZWF0ZUhU
TUxFbGVtZW50KCJmb250IiwgZXhjZXB0aW9uQ29kZSk7CisgICAgRWxlbWVudEltcGwgKmZvbnRO
b2RlID0gZG9jdW1lbnQtPmNyZWF0ZUVsZW1lbnROUyhYSFRNTF9OQU1FU1BBQ0UsICJmb250Iiwg
ZXhjZXB0aW9uQ29kZSk7CiAgICAgQVNTRVJUKGV4Y2VwdGlvbkNvZGUgPT0gMCk7CiAgICAgZm9u
dE5vZGUtPnNldEF0dHJpYnV0ZShBVFRSX0NMQVNTLCBzdHlsZVNwYW5DbGFzc1N0cmluZygpKTsK
ICAgICByZXR1cm4gZm9udE5vZGU7CkBAIC0yODUsNyArMjg2LDcgQEAgc3RhdGljIEVsZW1lbnRJ
bXBsICpjcmVhdGVGb250RWxlbWVudChEbwogRWxlbWVudEltcGwgKmNyZWF0ZVN0eWxlU3BhbkVs
ZW1lbnQoRG9jdW1lbnRJbXBsICpkb2N1bWVudCkKIHsKICAgICBpbnQgZXhjZXB0aW9uQ29kZSA9
IDA7Ci0gICAgRWxlbWVudEltcGwgKnN0eWxlRWxlbWVudCA9IGRvY3VtZW50LT5jcmVhdGVIVE1M
RWxlbWVudCgic3BhbiIsIGV4Y2VwdGlvbkNvZGUpOworICAgIEVsZW1lbnRJbXBsICpzdHlsZUVs
ZW1lbnQgPSBkb2N1bWVudC0+Y3JlYXRlRWxlbWVudE5TKFhIVE1MX05BTUVTUEFDRSwgInNwYW4i
LCBleGNlcHRpb25Db2RlKTsKICAgICBBU1NFUlQoZXhjZXB0aW9uQ29kZSA9PSAwKTsKICAgICBz
dHlsZUVsZW1lbnQtPnNldEF0dHJpYnV0ZShBVFRSX0NMQVNTLCBzdHlsZVNwYW5DbGFzc1N0cmlu
ZygpKTsKICAgICByZXR1cm4gc3R5bGVFbGVtZW50OwpAQCAtNTg3LDcgKzU4OCw3IEBAIHZvaWQg
QXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5SW5saW5lU3R5bGUKICAgICAgICAgICAgICAgICAgICAg
Ly8gdGhlIGN1cnJlbnQgZ3JvdXAuCiAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlID09IGVu
ZC5ub2RlKCkgfHwgCiAgICAgICAgICAgICAgICAgICAgICAgICBydW5TdGFydC0+cGFyZW50Tm9k
ZSgpICE9IG5leHQtPnBhcmVudE5vZGUoKSB8fCAKLSAgICAgICAgICAgICAgICAgICAgICAgIChu
ZXh0LT5pc0hUTUxFbGVtZW50KCkgJiYgbmV4dC0+aWQoKSAhPSBJRF9CUikgfHwgCisgICAgICAg
ICAgICAgICAgICAgICAgICAobmV4dC0+aXNFbGVtZW50Tm9kZSgpICYmICFuZXh0LT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6YnIoKSkpIHx8IAogICAgICAgICAgICAgICAgICAgICAgICAgKG5leHQt
PnJlbmRlcmVyKCkgJiYgIW5leHQtPnJlbmRlcmVyKCktPmlzSW5saW5lKCkpKQogICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBuZXh0OwpA
QCAtNjEyLDExICs2MTMsMTEgQEAgYm9vbCBBcHBseVN0eWxlQ29tbWFuZDo6aXNIVE1MU3R5bGVO
b2RlKAogICAgIGZvciAoUVZhbHVlTGlzdENvbnN0SXRlcmF0b3I8Q1NTUHJvcGVydHk+IGl0ID0g
c3R5bGUtPnZhbHVlc0l0ZXJhdG9yKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBzd2l0
Y2ggKCgqaXQpLmlkKCkpIHsKICAgICAgICAgICAgIGNhc2UgQ1NTX1BST1BfRk9OVF9XRUlHSFQ6
Ci0gICAgICAgICAgICAgICAgaWYgKGVsZW0tPmlkKCkgPT0gSURfQikKKyAgICAgICAgICAgICAg
ICBpZiAoZWxlbS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6YigpKSkKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBj
YXNlIENTU19QUk9QX0ZPTlRfU1RZTEU6Ci0gICAgICAgICAgICAgICAgaWYgKGVsZW0tPmlkKCkg
PT0gSURfSSkKKyAgICAgICAgICAgICAgICBpZiAoZWxlbS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1l
czo6aSgpKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAg
ICB9CkBAIC02MzksNyArNjQwLDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlSFRN
TEZvbnRTdAogICAgIEFTU0VSVChzdHlsZSk7CiAgICAgQVNTRVJUKGVsZW0pOwogCi0gICAgaWYg
KGVsZW0tPmlkKCkgIT0gSURfRk9OVCkKKyAgICBpZiAoIWVsZW0tPmhhc0xvY2FsTmFtZShIVE1M
TmFtZXM6OmZvbnQoKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGludCBleGNlcHRpb25Db2Rl
ID0gMDsKQEAgLTEwNTAsNyArMTA1MSw3IEBAIHN0YXRpYyBib29sIGFyZUlkZW50aWNhbEVsZW1l
bnRzKE5vZGVJbXAKICAgICBFbGVtZW50SW1wbCAqZmlyc3RFbGVtZW50ID0gc3RhdGljX2Nhc3Q8
RWxlbWVudEltcGwgKj4oZmlyc3QpOwogICAgIEVsZW1lbnRJbXBsICpzZWNvbmRFbGVtZW50ID0g
c3RhdGljX2Nhc3Q8RWxlbWVudEltcGwgKj4oc2Vjb25kKTsKICAgICAKLSAgICBpZiAoZmlyc3RF
bGVtZW50LT5pZCgpICE9IHNlY29uZEVsZW1lbnQtPmlkKCkpCisgICAgaWYgKCFmaXJzdEVsZW1l
bnQtPnRhZ05hbWUoKS5tYXRjaGVzKHNlY29uZEVsZW1lbnQtPnRhZ05hbWUoKSkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgIE5hbWVkQXR0ck1hcEltcGwgKmZpcnN0TWFwID0gZmlyc3RF
bGVtZW50LT5hdHRyaWJ1dGVzKCk7CkBAIC0xMTMyLDcgKzExMzMsNyBAQCBib29sIEFwcGx5U3R5
bGVDb21tYW5kOjptZXJnZUVuZFdpdGhOZXh0CiAgICAgICAgIGVuZE9mZnNldCA9IHBhcmVudExh
c3RPZmZzZXQ7CiAgICAgfQogCi0gICAgaWYgKCFlbmROb2RlLT5pc0VsZW1lbnROb2RlKCkgfHwg
ZW5kTm9kZS0+aWQoKSA9PSBJRF9CUikKKyAgICBpZiAoIWVuZE5vZGUtPmlzRWxlbWVudE5vZGUo
KSB8fCBlbmROb2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YnIoKSkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgIE5vZGVJbXBsICpuZXh0U2libGluZyA9IGVuZE5vZGUtPm5leHRTaWJs
aW5nKCk7CkBAIC0xMjgxLDE0ICsxMjgyLDE0IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFk
ZElubGluZVN0eWxlSWYKICAgICB9CiAKICAgICBpZiAoc3R5bGVDaGFuZ2UuYXBwbHlCb2xkKCkp
IHsKLSAgICAgICAgRWxlbWVudEltcGwgKmJvbGRFbGVtZW50ID0gZG9jdW1lbnQoKS0+Y3JlYXRl
SFRNTEVsZW1lbnQoIkIiLCBleGNlcHRpb25Db2RlKTsKKyAgICAgICAgRWxlbWVudEltcGwgKmJv
bGRFbGVtZW50ID0gZG9jdW1lbnQoKS0+Y3JlYXRlRWxlbWVudE5TKFhIVE1MX05BTUVTUEFDRSwg
ImIiLCBleGNlcHRpb25Db2RlKTsKICAgICAgICAgQVNTRVJUKGV4Y2VwdGlvbkNvZGUgPT0gMCk7
CiAgICAgICAgIGluc2VydE5vZGVCZWZvcmUoYm9sZEVsZW1lbnQsIHN0YXJ0Tm9kZSk7CiAgICAg
ICAgIHN1cnJvdW5kTm9kZVJhbmdlV2l0aEVsZW1lbnQoc3RhcnROb2RlLCBlbmROb2RlLCBib2xk
RWxlbWVudCk7CiAgICAgfQogCiAgICAgaWYgKHN0eWxlQ2hhbmdlLmFwcGx5SXRhbGljKCkpIHsK
LSAgICAgICAgRWxlbWVudEltcGwgKml0YWxpY0VsZW1lbnQgPSBkb2N1bWVudCgpLT5jcmVhdGVI
VE1MRWxlbWVudCgiSSIsIGV4Y2VwdGlvbkNvZGUpOworICAgICAgICBFbGVtZW50SW1wbCAqaXRh
bGljRWxlbWVudCA9IGRvY3VtZW50KCktPmNyZWF0ZUVsZW1lbnROUyhYSFRNTF9OQU1FU1BBQ0Us
ICJpIiwgZXhjZXB0aW9uQ29kZSk7CiAgICAgICAgIEFTU0VSVChleGNlcHRpb25Db2RlID09IDAp
OwogICAgICAgICBpbnNlcnROb2RlQmVmb3JlKGl0YWxpY0VsZW1lbnQsIHN0YXJ0Tm9kZSk7CiAg
ICAgICAgIHN1cnJvdW5kTm9kZVJhbmdlV2l0aEVsZW1lbnQoc3RhcnROb2RlLCBlbmROb2RlLCBp
dGFsaWNFbGVtZW50KTsKSW5kZXg6IGtodG1sL2VkaXRpbmcvYnJlYWtfYmxvY2txdW90ZV9jb21t
YW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0
aW5nL2JyZWFrX2Jsb2NrcXVvdGVfY29tbWFuZC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
MQpkaWZmIC11IC1wIC1yMS4xIGtodG1sL2VkaXRpbmcvYnJlYWtfYmxvY2txdW90ZV9jb21tYW5k
LmNwcAotLS0ga2h0bWwvZWRpdGluZy9icmVha19ibG9ja3F1b3RlX2NvbW1hbmQuY3BwCTI0IE1h
eSAyMDA1IDA3OjIxOjQ3IC0wMDAwCTEuMQorKysga2h0bWwvZWRpdGluZy9icmVha19ibG9ja3F1
b3RlX2NvbW1hbmQuY3BwCTUgSnVsIDIwMDUgMjM6MjA6MjUgLTAwMDAKQEAgLTI4LDcgKzI4LDcg
QEAKICNpbmNsdWRlICJodG1sZWRpdGluZy5oIgogI2luY2x1ZGUgInZpc2libGVfcG9zaXRpb24u
aCIKIAotI2luY2x1ZGUgIm1pc2MvaHRtbHRhZ3MuaCIKKyNpbmNsdWRlICJodG1sbmFtZXMuaCIK
ICNpbmNsdWRlICJ4bWwvZG9tX2VsZW1lbnRpbXBsLmgiCiAjaW5jbHVkZSAieG1sL2RvbV90ZXh0
aW1wbC5oIgogCkBAIC00Myw2ICs0Myw3IEBAIHVzaW5nIERPTTo6RWxlbWVudEltcGw7CiB1c2lu
ZyBET006Ok5vZGVJbXBsOwogdXNpbmcgRE9NOjpQb3NpdGlvbjsKIHVzaW5nIERPTTo6VGV4dElt
cGw7Cit1c2luZyBET006OkhUTUxOYW1lczsKIAogbmFtZXNwYWNlIGtodG1sIHsKIApAQCAtMTQ2
LDcgKzE0Nyw3IEBAIHZvaWQgQnJlYWtCbG9ja3F1b3RlQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAg
ICAgIGJvb2wgc3RhcnRJc0JSID0gZmFsc2U7CiAgICAgICAgIGlmIChzdGFydE5vZGUgIT0gdG9w
QmxvY2txdW90ZSkgewogICAgICAgICAgICAgTm9kZUltcGwgKm4gPSBzdGFydE5vZGU7Ci0gICAg
ICAgICAgICBzdGFydElzQlIgPSBuLT5pZCgpID09IElEX0JSOworICAgICAgICAgICAgc3RhcnRJ
c0JSID0gbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJyKCkpOwogICAgICAgICAgICAgaWYgKHN0
YXJ0SXNCUikKICAgICAgICAgICAgICAgICBuID0gbi0+bmV4dFNpYmxpbmcoKTsKICAgICAgICAg
ICAgIHdoaWxlIChuKSB7CkluZGV4OiBraHRtbC9lZGl0aW5nL2NvbXBvc2l0ZV9lZGl0X2NvbW1h
bmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VkaXRp
bmcvY29tcG9zaXRlX2VkaXRfY29tbWFuZC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMwpk
aWZmIC11IC1wIC1yMS4zIGtodG1sL2VkaXRpbmcvY29tcG9zaXRlX2VkaXRfY29tbWFuZC5jcHAK
LS0tIGtodG1sL2VkaXRpbmcvY29tcG9zaXRlX2VkaXRfY29tbWFuZC5jcHAJMjQgTWF5IDIwMDUg
MDc6MjE6NDcgLTAwMDAJMS4zCisrKyBraHRtbC9lZGl0aW5nL2NvbXBvc2l0ZV9lZGl0X2NvbW1h
bmQuY3BwCTUgSnVsIDIwMDUgMjM6MjA6MjYgLTAwMDAKQEAgLTQ3LDcgKzQ3LDcgQEAKICNpbmNs
dWRlICJ3cmFwX2NvbnRlbnRzX2luX2R1bW15X3NwYW5fY29tbWFuZC5oIgogCiAjaW5jbHVkZSAi
bWlzYy9odG1sYXR0cnMuaCIKLSNpbmNsdWRlICJtaXNjL2h0bWx0YWdzLmgiCisjaW5jbHVkZSAi
aHRtbG5hbWVzLmgiCiAjaW5jbHVkZSAicmVuZGVyaW5nL3JlbmRlcl90ZXh0LmgiCiAjaW5jbHVk
ZSAieG1sL2RvbTJfcmFuZ2VpbXBsLmgiCiAjaW5jbHVkZSAieG1sL2RvbV90ZXh0aW1wbC5oIgpA
QCAtNjcsNiArNjcsNyBAQCB1c2luZyBET006Ok5vZGVJbXBsOwogdXNpbmcgRE9NOjpQb3NpdGlv
bjsKIHVzaW5nIERPTTo6UmFuZ2VJbXBsOwogdXNpbmcgRE9NOjpUZXh0SW1wbDsKK3VzaW5nIERP
TTo6SFRNTE5hbWVzOwogCiBuYW1lc3BhY2Uga2h0bWwgewogCkBAIC0xMjcsMTQgKzEyOCwxNCBA
QCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjppbnNlcnRQYXJhZ3JhCiAKIHZvaWQgQ29tcG9z
aXRlRWRpdENvbW1hbmQ6Omluc2VydE5vZGVCZWZvcmUoTm9kZUltcGwgKmluc2VydENoaWxkLCBO
b2RlSW1wbCAqcmVmQ2hpbGQpCiB7Ci0gICAgQVNTRVJUKHJlZkNoaWxkLT5pZCgpICE9IElEX0JP
RFkpOworICAgIEFTU0VSVCghcmVmQ2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpib2R5KCkp
KTsKICAgICBFZGl0Q29tbWFuZFB0ciBjbWQobmV3IEluc2VydE5vZGVCZWZvcmVDb21tYW5kKGRv
Y3VtZW50KCksIGluc2VydENoaWxkLCByZWZDaGlsZCkpOwogICAgIGFwcGx5Q29tbWFuZFRvQ29t
cG9zaXRlKGNtZCk7CiB9CiAKIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6Omluc2VydE5vZGVB
ZnRlcihOb2RlSW1wbCAqaW5zZXJ0Q2hpbGQsIE5vZGVJbXBsICpyZWZDaGlsZCkKIHsKLSAgICBB
U1NFUlQocmVmQ2hpbGQtPmlkKCkgIT0gSURfQk9EWSk7CisgICAgQVNTRVJUKCFyZWZDaGlsZC0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJvZHkoKSkpOwogICAgIGlmIChyZWZDaGlsZC0+cGFyZW50
Tm9kZSgpLT5sYXN0Q2hpbGQoKSA9PSByZWZDaGlsZCkgewogICAgICAgICBhcHBlbmROb2RlKGlu
c2VydENoaWxkLCByZWZDaGlsZC0+cGFyZW50Tm9kZSgpKTsKICAgICB9CkBAIC01NDUsNyArNTQ2
LDcgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6bW92ZVBhcmFncmFwaAogICAgIC8vICAg
ICAgIGFkZGl0aW9uYWwgbGV2ZWwgb2YgcXVvdGluZy4KICAgICBOb2RlSW1wbCAqc3RhcnRCbG9j
ayA9IHBhcmFncmFwaFN0YXJ0Lm5vZGUoKS0+ZW5jbG9zaW5nQmxvY2tGbG93RWxlbWVudCgpOwog
ICAgIE5vZGVJbXBsICpuZXdCbG9jayA9IDA7Ci0gICAgaWYgKHN0YXJ0QmxvY2stPmlkKCkgPT0g
SURfQk9EWSB8fCAoaXNNYWlsQmxvY2txdW90ZShzdGFydEJsb2NrKSAmJiBwYXJhZ3JhcGhTdGFy
dC5ub2RlKCkgIT0gc3RhcnRCbG9jaykpCisgICAgaWYgKHN0YXJ0QmxvY2stPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjpib2R5KCkpIHx8IChpc01haWxCbG9ja3F1b3RlKHN0YXJ0QmxvY2spICYmIHBh
cmFncmFwaFN0YXJ0Lm5vZGUoKSAhPSBzdGFydEJsb2NrKSkKICAgICAgICAgbmV3QmxvY2sgPSBj
cmVhdGVEZWZhdWx0UGFyYWdyYXBoRWxlbWVudChkb2N1bWVudCgpKTsKICAgICBlbHNlCiAgICAg
ICAgIG5ld0Jsb2NrID0gc3RhcnRCbG9jay0+Y2xvbmVOb2RlKGZhbHNlKTsKQEAgLTU1NSwxMCAr
NTU2LDEwIEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6Om1vdmVQYXJhZ3JhcGgKICAgICAg
ICAgbW92ZU5vZGUgPSBtb3ZlTm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpOwogICAgIE5vZGVJbXBs
ICplbmROb2RlID0gcGFyYWdyYXBoRW5kLm5vZGUoKTsKIAotICAgIGlmIChwYXJhZ3JhcGhTdGFy
dC5ub2RlKCktPmlkKCkgPT0gSURfQk9EWSkgeworICAgIGlmIChwYXJhZ3JhcGhTdGFydC5ub2Rl
KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpib2R5KCkpKSB7CiAgICAgICAgIGluc2VydE5vZGVB
dChuZXdCbG9jaywgcGFyYWdyYXBoU3RhcnQubm9kZSgpLCAwKTsKICAgICB9Ci0gICAgZWxzZSBp
ZiAocGFyYWdyYXBoU3RhcnQubm9kZSgpLT5pZCgpID09IElEX0JSKSB7CisgICAgZWxzZSBpZiAo
cGFyYWdyYXBoU3RhcnQubm9kZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YnIoKSkpIHsKICAg
ICAgICAgaW5zZXJ0Tm9kZUFmdGVyKG5ld0Jsb2NrLCBwYXJhZ3JhcGhTdGFydC5ub2RlKCkpOwog
ICAgIH0KICAgICBlbHNlIHsKQEAgLTU3OCw3ICs1NzksNyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRD
b21tYW5kOjptb3ZlUGFyYWdyYXBoCiBFbGVtZW50SW1wbCAqY3JlYXRlQmxvY2tQbGFjZWhvbGRl
ckVsZW1lbnQoRG9jdW1lbnRJbXBsICpkb2N1bWVudCkKIHsKICAgICBpbnQgZXhjZXB0aW9uQ29k
ZSA9IDA7Ci0gICAgRWxlbWVudEltcGwgKmJyZWFrTm9kZSA9IGRvY3VtZW50LT5jcmVhdGVIVE1M
RWxlbWVudCgiYnIiLCBleGNlcHRpb25Db2RlKTsKKyAgICBFbGVtZW50SW1wbCAqYnJlYWtOb2Rl
ID0gZG9jdW1lbnQtPmNyZWF0ZUVsZW1lbnROUyhYSFRNTF9OQU1FU1BBQ0UsICJiciIsIGV4Y2Vw
dGlvbkNvZGUpOwogICAgIEFTU0VSVChleGNlcHRpb25Db2RlID09IDApOwogICAgIGJyZWFrTm9k
ZS0+c2V0QXR0cmlidXRlKEFUVFJfQ0xBU1MsIGJsb2NrUGxhY2Vob2xkZXJDbGFzc1N0cmluZygp
KTsKICAgICByZXR1cm4gYnJlYWtOb2RlOwpJbmRleDoga2h0bWwvZWRpdGluZy9kZWxldGVfc2Vs
ZWN0aW9uX2NvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3Jl
L2todG1sL2VkaXRpbmcvZGVsZXRlX3NlbGVjdGlvbl9jb21tYW5kLmNwcCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS4zCmRpZmYgLXUgLXAgLXIxLjMga2h0bWwvZWRpdGluZy9kZWxldGVfc2VsZWN0
aW9uX2NvbW1hbmQuY3BwCi0tLSBraHRtbC9lZGl0aW5nL2RlbGV0ZV9zZWxlY3Rpb25fY29tbWFu
ZC5jcHAJMzAgSnVuIDIwMDUgMDE6Mjc6MzggLTAwMDAJMS4zCisrKyBraHRtbC9lZGl0aW5nL2Rl
bGV0ZV9zZWxlY3Rpb25fY29tbWFuZC5jcHAJNSBKdWwgMjAwNSAyMzoyMDoyNyAtMDAwMApAQCAt
MjgsNyArMjgsNyBAQAogI2luY2x1ZGUgImNzcy9jc3NfY29tcHV0ZWRzdHlsZS5oIgogI2luY2x1
ZGUgImh0bWxlZGl0aW5nLmgiCiAjaW5jbHVkZSAia2h0bWxfcGFydC5oIgotI2luY2x1ZGUgIm1p
c2MvaHRtbHRhZ3MuaCIKKyNpbmNsdWRlICJodG1sbmFtZXMuaCIKICNpbmNsdWRlICJyZW5kZXJp
bmcvcmVuZGVyX2xpbmUuaCIKICNpbmNsdWRlICJyZW5kZXJpbmcvcmVuZGVyX29iamVjdC5oIgog
I2luY2x1ZGUgInZpc2libGVfdGV4dC5oIgpAQCAtNTMsNiArNTMsNyBAQCB1c2luZyBET006Ok5v
ZGVJbXBsOwogdXNpbmcgRE9NOjpQb3NpdGlvbjsKIHVzaW5nIERPTTo6UmFuZ2VJbXBsOwogdXNp
bmcgRE9NOjpUZXh0SW1wbDsKK3VzaW5nIERPTTo6SFRNTE5hbWVzOwogCiBuYW1lc3BhY2Uga2h0
bWwgewogCkBAIC02MSw5ICs2MiwxMyBAQCBzdGF0aWMgYm9vbCBpc0xpc3RTdHJ1Y3R1cmVOb2Rl
KGNvbnN0IE5vCiAgICAgLy8gRklYTUU6IElycml0YXRpbmcgdGhhdCB3ZSBjYW4gZ2V0IGF3YXkg
d2l0aCBqdXN0IGdvaW5nIGF0IHRoZSByZW5kZXIgdHJlZSBmb3IgaXNUYWJsZVN0cnVjdHVyZU5v
ZGUsCiAgICAgLy8gYnV0IGhlcmUgd2UgYWxzbyBoYXZlIHRvIHBlZWsgYXQgdGhlIHR5cGUgb2Yg
RE9NIG5vZGU/CiAgICAgUmVuZGVyT2JqZWN0ICpyID0gbm9kZS0+cmVuZGVyZXIoKTsKLSAgICBO
b2RlSW1wbDo6SWQgbm9kZUlEID0gbm9kZS0+aWQoKTsKICAgICByZXR1cm4gKHIgJiYgci0+aXNM
aXN0SXRlbSgpKQotICAgICAgICB8fCAobm9kZUlEID09IElEX09MIHx8IG5vZGVJRCA9PSBJRF9V
TCB8fCBub2RlSUQgPT0gSURfREQgfHwgbm9kZUlEID09IElEX0RUIHx8IG5vZGVJRCA9PSBJRF9E
SVIgfHwgbm9kZUlEID09IElEX01FTlUpOworICAgICAgICB8fCBub2RlLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6b2woKSkKKyAgICAgICAgfHwgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnVs
KCkpCisgICAgICAgIHx8IG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpkZCgpKQorICAgICAg
ICB8fCBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZHQoKSkKKyAgICAgICAgfHwgbm9kZS0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OmRpcigpKQorICAgICAgICB8fCBub2RlLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6bWVudSgpKTsKIH0KIAogc3RhdGljIGludCBtYXhEZWVwT2Zmc2V0KE5vZGVJ
bXBsICpuKQpAQCAtMjc3LDggKzI4Miw4IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6
c2F2ZVR5cGluZ1MKIGJvb2wgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6aGFuZGxlU3BlY2lhbENh
c2VCUkRlbGV0ZSgpCiB7CiAgICAgLy8gQ2hlY2sgZm9yIHNwZWNpYWwtY2FzZSB3aGVyZSB0aGUg
c2VsZWN0aW9uIGNvbnRhaW5zIG9ubHkgYSBCUiBvbiBhIGxpbmUgYnkgaXRzZWxmIGFmdGVyIGFu
b3RoZXIgQlIuCi0gICAgYm9vbCB1cHN0cmVhbVN0YXJ0SXNCUiA9IG1fc3RhcnROb2RlLT5pZCgp
ID09IElEX0JSOwotICAgIGJvb2wgZG93bnN0cmVhbVN0YXJ0SXNCUiA9IG1fZG93bnN0cmVhbVN0
YXJ0Lm5vZGUoKS0+aWQoKSA9PSBJRF9CUjsKKyAgICBib29sIHVwc3RyZWFtU3RhcnRJc0JSID0g
bV9zdGFydE5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpicigpKTsKKyAgICBib29sIGRvd25z
dHJlYW1TdGFydElzQlIgPSBtX2Rvd25zdHJlYW1TdGFydC5ub2RlKCktPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjpicigpKTsKICAgICBib29sIGlzQlJPbkxpbmVCeUl0c2VsZiA9IHVwc3RyZWFtU3Rh
cnRJc0JSICYmIGRvd25zdHJlYW1TdGFydElzQlIgJiYgbV9kb3duc3RyZWFtU3RhcnQubm9kZSgp
ID09IG1fdXBzdHJlYW1FbmQubm9kZSgpOwogICAgIGlmIChpc0JST25MaW5lQnlJdHNlbGYpIHsK
ICAgICAgICAgcmVtb3ZlTm9kZShtX2Rvd25zdHJlYW1TdGFydC5ub2RlKCkpOwpAQCAtMzI2LDEx
ICszMzEsMTEgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpoYW5kbGVHZW5lcgogICAg
IC8vIGVuZCBvZiBhIGJsb2NrIG90aGVyIHRoYW4gdGhlIGJsb2NrIGNvbnRhaW5pbmcgdGhlIHNl
bGVjdGlvbiBzdGFydCwgdGhlbiBkbyBub3QgZGVsZXRlIHRoZSAKICAgICAvLyBzdGFydCBibG9j
aywgb3RoZXJ3aXNlIGRlbGV0ZSB0aGUgc3RhcnQgYmxvY2suCiAgICAgLy8gQSBzaW1pbGFyIGNh
c2UgaXMgcHJvdmlkZWQgdG8gY292ZXIgc2VsZWN0aW9ucyBzdGFydGluZyBpbiBCUiBlbGVtZW50
cy4KLSAgICBpZiAoc3RhcnRPZmZzZXQgPT0gMSAmJiBtX3N0YXJ0Tm9kZSAmJiBtX3N0YXJ0Tm9k
ZS0+aWQoKSA9PSBJRF9CUikgeworICAgIGlmIChzdGFydE9mZnNldCA9PSAxICYmIG1fc3RhcnRO
b2RlICYmIG1fc3RhcnROb2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YnIoKSkpIHsKICAgICAg
ICAgc2V0U3RhcnROb2RlKG1fc3RhcnROb2RlLT50cmF2ZXJzZU5leHROb2RlKCkpOwogICAgICAg
ICBzdGFydE9mZnNldCA9IDA7CiAgICAgfQotICAgIGlmIChtX3N0YXJ0QmxvY2sgIT0gbV9lbmRC
bG9jayAmJiBzdGFydE9mZnNldCA9PSAwICYmIG1fc3RhcnROb2RlICYmIG1fc3RhcnROb2RlLT5p
ZCgpID09IElEX0JSICYmIGVuZEF0RW5kT2ZCbG9jaykgeworICAgIGlmIChtX3N0YXJ0QmxvY2sg
IT0gbV9lbmRCbG9jayAmJiBzdGFydE9mZnNldCA9PSAwICYmIG1fc3RhcnROb2RlICYmIG1fc3Rh
cnROb2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YnIoKSkgJiYgZW5kQXRFbmRPZkJsb2NrKSB7
CiAgICAgICAgIC8vIERvbid0IGRlbGV0ZSB0aGUgQlIgZWxlbWVudAogICAgICAgICBzZXRTdGFy
dE5vZGUobV9zdGFydE5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKSk7CiAgICAgfQpAQCAtNTUyLDcg
KzU1Nyw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6bW92ZU5vZGVzQWYKICAgICAg
ICAgTm9kZUltcGwgKm1vdmVOb2RlID0gbm9kZTsKICAgICAgICAgbm9kZSA9IG5vZGUtPm5leHRT
aWJsaW5nKCk7CiAgICAgICAgIHJlbW92ZU5vZGUobW92ZU5vZGUpOwotICAgICAgICBpZiAobW92
ZU5vZGUtPmlkKCkgPT0gSURfQlIgJiYgIW1vdmVOb2RlLT5yZW5kZXJlcigpKSB7CisgICAgICAg
IGlmIChtb3ZlTm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJyKCkpICYmICFtb3ZlTm9kZS0+
cmVuZGVyZXIoKSkgewogICAgICAgICAgICAgLy8gSnVzdCByZW1vdmUgdGhpcyBub2RlLCBhbmQg
ZG9uJ3QgcHV0IGl0IGJhY2suCiAgICAgICAgICAgICAvLyBJZiB0aGUgQlIgd2FzIG5vdCByZW5k
ZXJlZCAoc2luY2UgaXQgd2FzIGF0IHRoZSBlbmQgb2YgYSBibG9jaywgZm9yIGluc3RhbmNlKSwg
CiAgICAgICAgICAgICAvLyBwdXR0aW5nIGl0IGJhY2sgaW4gdGhlIGRvY3VtZW50IG1pZ2h0IG1h
a2UgaXQgYXBwZWFyLCBhbmQgdGhhdCBpcyBub3QgZGVzaXJhYmxlLgpAQCAtNTYzLDcgKzU2OCw3
IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6bW92ZU5vZGVzQWYKICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgaW5zZXJ0Tm9kZUFmdGVyKG1vdmVOb2RlLCByZWZOb2RlKTsKICAgICAg
ICAgcmVmTm9kZSA9IG1vdmVOb2RlOwotICAgICAgICBpZiAobW92ZU5vZGUtPmlkKCkgPT0gSURf
QlIpCisgICAgICAgIGlmIChtb3ZlTm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJyKCkpKQog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogCkluZGV4OiBraHRtbC9lZGl0aW5nL2h0bWxlZGl0
aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0
aW5nL2h0bWxlZGl0aW5nLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yNDgKZGlmZiAtdSAt
cCAtcjEuMjQ4IGtodG1sL2VkaXRpbmcvaHRtbGVkaXRpbmcuY3BwCi0tLSBraHRtbC9lZGl0aW5n
L2h0bWxlZGl0aW5nLmNwcAkzMCBKdW4gMjAwNSAwMToyNzozOCAtMDAwMAkxLjI0OAorKysga2h0
bWwvZWRpdGluZy9odG1sZWRpdGluZy5jcHAJNSBKdWwgMjAwNSAyMzoyMDoyNyAtMDAwMApAQCAt
NDIsNyArNDIsNyBAQAogI2luY2x1ZGUgImh0bWxfaW1hZ2VpbXBsLmgiCiAjaW5jbHVkZSAiaHRt
bF9pbnRlcmNoYW5nZS5oIgogI2luY2x1ZGUgImh0bWxhdHRycy5oIgotI2luY2x1ZGUgImh0bWx0
YWdzLmgiCisjaW5jbHVkZSAiaHRtbG5hbWVzLmgiCiAjaW5jbHVkZSAia2h0bWxfcGFydC5oIgog
I2luY2x1ZGUgImtodG1sX3BhcnQuaCIKICNpbmNsdWRlICJraHRtbHZpZXcuaCIKQEAgLTgxLDYg
KzgxLDcgQEAgdXNpbmcgRE9NOjpQb3NpdGlvbjsKIHVzaW5nIERPTTo6UmFuZ2VJbXBsOwogdXNp
bmcgRE9NOjpUZXh0SW1wbDsKIHVzaW5nIERPTTo6VHJlZVdhbGtlckltcGw7Cit1c2luZyBET006
OkhUTUxOYW1lczsKIAogI2lmIEFQUExFX0NIQU5HRVMKICNpbmNsdWRlICJLV1FBc3NlcnRpb25z
LmgiCkBAIC0xMzQsMTAgKzEzNSwxMCBAQCBib29sIGlzU3BlY2lhbEVsZW1lbnQoY29uc3QgTm9k
ZUltcGwgKm4pCiAgICAgaWYgKCFuLT5pc0hUTUxFbGVtZW50KCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIGlmIChuLT5pZCgpID09IElEX0EgJiYgbi0+aXNMaW5rKCkpCisgICAgaWYg
KG4tPmlzTGluaygpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGlmIChuLT5pZCgpID09
IElEX1VMIHx8IG4tPmlkKCkgPT0gSURfT0wgfHwgbi0+aWQoKSA9PSBJRF9ETCkKKyAgICBpZiAo
bi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnVsKCkpIHx8IG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjpvbCgpKSB8fCBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZGwoKSkpCiAgICAgICAgIHJldHVy
biB0cnVlOwogCiAgICAgUmVuZGVyT2JqZWN0ICpyZW5kZXJlciA9IG4tPnJlbmRlcmVyKCk7CkBA
IC0yNzIsNyArMjczLDcgQEAgRWxlbWVudEltcGwgKmNyZWF0ZURlZmF1bHRQYXJhZ3JhcGhFbGVt
ZQogICAgIC8vIFdlIHdvdWxkIG5lZWQgdGhpcyBtYXJnaW4temVyb2luZyBjb2RlIGJhY2sgaWYg
d2UgZXZlciByZXR1cm4gdG8gdXNpbmcgPHA+IGVsZW1lbnRzIGZvciBkZWZhdWx0IHBhcmFncmFw
aHMuCiAgICAgLy8gc3RhdGljIGNvbnN0IERPTVN0cmluZyBkZWZhdWx0UGFyYWdyYXBoU3R5bGUo
Im1hcmdpbi10b3A6IDA7IG1hcmdpbi1ib3R0b206IDAiKTsgICAgCiAgICAgaW50IGV4Y2VwdGlv
bkNvZGUgPSAwOwotICAgIEVsZW1lbnRJbXBsICplbGVtZW50ID0gZG9jdW1lbnQtPmNyZWF0ZUhU
TUxFbGVtZW50KCJkaXYiLCBleGNlcHRpb25Db2RlKTsKKyAgICBFbGVtZW50SW1wbCAqZWxlbWVu
dCA9IGRvY3VtZW50LT5jcmVhdGVFbGVtZW50TlMoWEhUTUxfTkFNRVNQQUNFLCAiZGl2IiwgZXhj
ZXB0aW9uQ29kZSk7CiAgICAgQVNTRVJUKGV4Y2VwdGlvbkNvZGUgPT0gMCk7CiAgICAgcmV0dXJu
IGVsZW1lbnQ7CiB9CkBAIC0yODAsNyArMjgxLDcgQEAgRWxlbWVudEltcGwgKmNyZWF0ZURlZmF1
bHRQYXJhZ3JhcGhFbGVtZQogRWxlbWVudEltcGwgKmNyZWF0ZUJyZWFrRWxlbWVudChEb2N1bWVu
dEltcGwgKmRvY3VtZW50KQogewogICAgIGludCBleGNlcHRpb25Db2RlID0gMDsKLSAgICBFbGVt
ZW50SW1wbCAqYnJlYWtOb2RlID0gZG9jdW1lbnQtPmNyZWF0ZUhUTUxFbGVtZW50KCJiciIsIGV4
Y2VwdGlvbkNvZGUpOworICAgIEVsZW1lbnRJbXBsICpicmVha05vZGUgPSBkb2N1bWVudC0+Y3Jl
YXRlRWxlbWVudE5TKFhIVE1MX05BTUVTUEFDRSwgImJyIiwgZXhjZXB0aW9uQ29kZSk7CiAgICAg
QVNTRVJUKGV4Y2VwdGlvbkNvZGUgPT0gMCk7CiAgICAgcmV0dXJuIGJyZWFrTm9kZTsKIH0KQEAg
LTMxMCw3ICszMTEsNyBAQCBFbGVtZW50SW1wbCAqY3JlYXRlVGFiU3BhbkVsZW1lbnQoRG9jdW1l
CiB7CiAgICAgLy8gbWFrZSB0aGUgc3BhbiB0byBob2xkIHRoZSB0YWIKICAgICBpbnQgZXhjZXB0
aW9uQ29kZSA9IDA7Ci0gICAgRWxlbWVudEltcGwgKnNwYW5FbGVtZW50ID0gZG9jdW1lbnQtPmNy
ZWF0ZUhUTUxFbGVtZW50KCJzcGFuIiwgZXhjZXB0aW9uQ29kZSk7CisgICAgRWxlbWVudEltcGwg
KnNwYW5FbGVtZW50ID0gZG9jdW1lbnQtPmNyZWF0ZUVsZW1lbnROUyhYSFRNTF9OQU1FU1BBQ0Us
ICJzcGFuIiwgZXhjZXB0aW9uQ29kZSk7CiAgICAgYXNzZXJ0KGV4Y2VwdGlvbkNvZGUgPT0gMCk7
CiAgICAgc3BhbkVsZW1lbnQtPnNldEF0dHJpYnV0ZShBVFRSX0NMQVNTLCBBcHBsZVRhYlNwYW5D
bGFzcyk7CiAgICAgc3BhbkVsZW1lbnQtPnNldEF0dHJpYnV0ZShBVFRSX1NUWUxFLCAid2hpdGUt
c3BhY2U6cHJlIik7CkBAIC0zNTIsNyArMzUzLDcgQEAgTm9kZUltcGwgKm5lYXJlc3RNYWlsQmxv
Y2txdW90ZShjb25zdCBObwogCiBib29sIGlzTWFpbEJsb2NrcXVvdGUoY29uc3QgTm9kZUltcGwg
Km5vZGUpCiB7Ci0gICAgaWYgKCFub2RlIHx8ICFub2RlLT5yZW5kZXJlcigpIHx8ICFub2RlLT5p
c0VsZW1lbnROb2RlKCkgJiYgbm9kZS0+aWQoKSAhPSBJRF9CTE9DS1FVT1RFKQorICAgIGlmICgh
bm9kZSB8fCAhbm9kZS0+cmVuZGVyZXIoKSB8fCAhbm9kZS0+aXNFbGVtZW50Tm9kZSgpICYmICFu
b2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YmxvY2txdW90ZSgpKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICAKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgRWxlbWVudElt
cGwgKj4obm9kZSktPmdldEF0dHJpYnV0ZSgidHlwZSIpID09ICJjaXRlIjsKSW5kZXg6IGtodG1s
L2VkaXRpbmcvaW5zZXJ0X2xpbmVfYnJlYWtfY29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWRpdGluZy9pbnNlcnRfbGluZV9icmVha19jb21t
YW5kLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXUgLXAgLXIxLjEga2h0bWwv
ZWRpdGluZy9pbnNlcnRfbGluZV9icmVha19jb21tYW5kLmNwcAotLS0ga2h0bWwvZWRpdGluZy9p
bnNlcnRfbGluZV9icmVha19jb21tYW5kLmNwcAkyNCBNYXkgMjAwNSAwNzoyMTo0NyAtMDAwMAkx
LjEKKysrIGtodG1sL2VkaXRpbmcvaW5zZXJ0X2xpbmVfYnJlYWtfY29tbWFuZC5jcHAJNSBKdWwg
MjAwNSAyMzoyMDoyNyAtMDAwMApAQCAtMjksNyArMjksNyBAQAogI2luY2x1ZGUgInZpc2libGVf
cG9zaXRpb24uaCIKICNpbmNsdWRlICJ2aXNpYmxlX3VuaXRzLmgiCiAKLSNpbmNsdWRlICJtaXNj
L2h0bWx0YWdzLmgiCisjaW5jbHVkZSAiaHRtbG5hbWVzLmgiCiAjaW5jbHVkZSAieG1sL2RvbV9k
b2NpbXBsLmgiCiAjaW5jbHVkZSAieG1sL2RvbV9lbGVtZW50aW1wbC5oIgogI2luY2x1ZGUgInht
bC9kb20yX3JhbmdlaW1wbC5oIgpAQCAtNTAsNiArNTAsNyBAQCB1c2luZyBET006Ok5vZGVJbXBs
OwogdXNpbmcgRE9NOjpQb3NpdGlvbjsKIHVzaW5nIERPTTo6VGV4dEltcGw7CiB1c2luZyBET006
OkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uSW1wbDsKK3VzaW5nIERPTTo6SFRNTE5hbWVzOwog
CiBuYW1lc3BhY2Uga2h0bWwgewogCkBAIC0xMTEsMTMgKzExMiwxMyBAQCB2b2lkIEluc2VydExp
bmVCcmVha0NvbW1hbmQ6OmRvQXBwbHkoKQogICAgICAgICAvLyBUaGlzIG1ha2VzIHRoZSAicmVh
bCIgQlIgd2Ugd2FudCB0byBpbnNlcnQgYXBwZWFyIGluIHRoZSByZW5kZXJpbmcgd2l0aG91dCBh
bnkgCiAgICAgICAgIC8vIHNpZ25pZmljYW50IHNpZGUgZWZmZWN0cyAoYW5kIG5vIHJlYWwgd29y
cmllcyBlaXRoZXIgc2luY2UgeW91IGNhbid0IGFycm93IHBhc3QgCiAgICAgICAgIC8vIHRoaXMg
ZXh0cmEgb25lLgotICAgICAgICBpZiAocG9zLm5vZGUoKS0+aWQoKSA9PSBJRF9CUiAmJiBwb3Mu
b2Zmc2V0KCkgPT0gMCkgeworICAgICAgICBpZiAocG9zLm5vZGUoKS0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OmJyKCkpICYmIHBvcy5vZmZzZXQoKSA9PSAwKSB7CiAgICAgICAgICAgICAvLyBBbHJl
YWR5IHBsYWNlZCBpbiBhIHRyYWlsaW5nIEJSLiBJbnNlcnQgInJlYWwiIEJSIGJlZm9yZSBpdCBh
bmQgbGVhdmUgdGhlIHNlbGVjdGlvbiBhbG9uZS4KICAgICAgICAgICAgIGluc2VydE5vZGVCZWZv
cmUobm9kZVRvSW5zZXJ0LCBwb3Mubm9kZSgpKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsK
ICAgICAgICAgICAgIE5vZGVJbXBsICpuZXh0ID0gcG9zLm5vZGUoKS0+dHJhdmVyc2VOZXh0Tm9k
ZSgpOwotICAgICAgICAgICAgYm9vbCBoYXNUcmFpbGluZ0JSID0gbmV4dCAmJiBuZXh0LT5pZCgp
ID09IElEX0JSICYmIHBvcy5ub2RlKCktPmVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQoKSA9PSBu
ZXh0LT5lbmNsb3NpbmdCbG9ja0Zsb3dFbGVtZW50KCk7CisgICAgICAgICAgICBib29sIGhhc1Ry
YWlsaW5nQlIgPSBuZXh0ICYmIG5leHQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpicigpKSAmJiBw
b3Mubm9kZSgpLT5lbmNsb3NpbmdCbG9ja0Zsb3dFbGVtZW50KCkgPT0gbmV4dC0+ZW5jbG9zaW5n
QmxvY2tGbG93RWxlbWVudCgpOwogICAgICAgICAgICAgaW5zZXJ0Tm9kZUFmdGVyUG9zaXRpb24o
bm9kZVRvSW5zZXJ0LCBwb3MpOwogICAgICAgICAgICAgaWYgKGhhc1RyYWlsaW5nQlIpIHsKICAg
ICAgICAgICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oU2VsZWN0aW9uKFBvc2l0aW9uKG5leHQs
IDApLCBET1dOU1RSRUFNKSk7CkluZGV4OiBraHRtbC9lZGl0aW5nL2luc2VydF9wYXJhZ3JhcGhf
c2VwYXJhdG9yX2NvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJD
b3JlL2todG1sL2VkaXRpbmcvaW5zZXJ0X3BhcmFncmFwaF9zZXBhcmF0b3JfY29tbWFuZC5jcHAs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC11IC1wIC1yMS4xIGtodG1sL2VkaXRpbmcv
aW5zZXJ0X3BhcmFncmFwaF9zZXBhcmF0b3JfY29tbWFuZC5jcHAKLS0tIGtodG1sL2VkaXRpbmcv
aW5zZXJ0X3BhcmFncmFwaF9zZXBhcmF0b3JfY29tbWFuZC5jcHAJMjQgTWF5IDIwMDUgMDc6MjE6
NDcgLTAwMDAJMS4xCisrKyBraHRtbC9lZGl0aW5nL2luc2VydF9wYXJhZ3JhcGhfc2VwYXJhdG9y
X2NvbW1hbmQuY3BwCTUgSnVsIDIwMDUgMjM6MjA6MjcgLTAwMDAKQEAgLTMxLDcgKzMxLDcgQEAK
IAogI2luY2x1ZGUgImNzcy9jc3NfY29tcHV0ZWRzdHlsZS5oIgogI2luY2x1ZGUgImNzcy9jc3Nf
dmFsdWVpbXBsLmgiCi0jaW5jbHVkZSAibWlzYy9odG1sdGFncy5oIgorI2luY2x1ZGUgImh0bWxu
YW1lcy5oIgogI2luY2x1ZGUgInhtbC9kb21fZG9jaW1wbC5oIgogI2luY2x1ZGUgInhtbC9kb21f
ZWxlbWVudGltcGwuaCIKICNpbmNsdWRlICJ4bWwvZG9tX3RleHRpbXBsLmgiCkBAIC01MCw2ICs1
MCw3IEBAIHVzaW5nIERPTTo6RWxlbWVudEltcGw7CiB1c2luZyBET006Ok5vZGVJbXBsOwogdXNp
bmcgRE9NOjpQb3NpdGlvbjsKIHVzaW5nIERPTTo6VGV4dEltcGw7Cit1c2luZyBET006OkhUTUxO
YW1lczsKIAogbmFtZXNwYWNlIGtodG1sIHsKIApAQCAtMjEzLDcgKzIxNCw3IEBAIHZvaWQgSW5z
ZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZDo6ZG8KICAgICAvLyB0aGVuIHRoaXMgPGJyPiB3
aWxsIGNvbGxhcHNlIGF3YXkgd2hlbiB3ZSBhZGQgYSBibG9jayBhZnRlciBpdC4gQWRkIGFuIGV4
dHJhIDxicj4uCiAgICAgaWYgKCFkb2N1bWVudCgpLT5pblN0cmljdE1vZGUoKSkgewogICAgICAg
ICBQb3NpdGlvbiB1cHN0cmVhbVBvcyA9IHBvcy51cHN0cmVhbSgpOwotICAgICAgICBpZiAodXBz
dHJlYW1Qb3Mubm9kZSgpLT5pZCgpID09IElEX0JSKQorICAgICAgICBpZiAodXBzdHJlYW1Qb3Mu
bm9kZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YnIoKSkpCiAgICAgICAgICAgICBpbnNlcnRO
b2RlQWZ0ZXIoY3JlYXRlQnJlYWtFbGVtZW50KGRvY3VtZW50KCkpLCB1cHN0cmVhbVBvcy5ub2Rl
KCkpOwogICAgIH0KICAgICAKSW5kZXg6IGtodG1sL2VkaXRpbmcvbWFya3VwLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL21hcmt1cC5jcHAs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjIKZGlmZiAtdSAtcCAtcjEuMjIga2h0bWwvZWRpdGlu
Zy9tYXJrdXAuY3BwCi0tLSBraHRtbC9lZGl0aW5nL21hcmt1cC5jcHAJMzAgSnVuIDIwMDUgMDE6
NTY6MTIgLTAwMDAJMS4yMgorKysga2h0bWwvZWRpdGluZy9tYXJrdXAuY3BwCTUgSnVsIDIwMDUg
MjM6MjA6MjggLTAwMDAKQEAgLTM2LDcgKzM2LDcgQEAKICNpbmNsdWRlICJ4bWwvZG9tMl9yYW5n
ZWltcGwuaCIKICNpbmNsdWRlICJyZW5kZXJpbmcvcmVuZGVyX3RleHQuaCIKICNpbmNsdWRlICJt
aXNjL2h0bWxhdHRycy5oIgotI2luY2x1ZGUgIm1pc2MvaHRtbHRhZ3MuaCIKKyNpbmNsdWRlICJo
dG1sbmFtZXMuaCIKICNpbmNsdWRlICJodG1sL2R0ZC5oIgogCiB1c2luZyBET006OkF0dHJpYnV0
ZUltcGw7CkBAIC00Nyw5ICs0Nyw5IEBAIHVzaW5nIERPTTo6RG9jdW1lbnRGcmFnbWVudEltcGw7
CiB1c2luZyBET006OkRvY3VtZW50SW1wbDsKIHVzaW5nIERPTTo6RE9NU3RyaW5nOwogdXNpbmcg
RE9NOjpFbGVtZW50SW1wbDsKLXVzaW5nIERPTTo6Rk9SQklEREVOOwotdXNpbmcgRE9NOjplbmRU
YWdSZXF1aXJlbWVudDsKK3VzaW5nIERPTTo6VGFnU3RhdHVzRm9yYmlkZGVuOwogdXNpbmcgRE9N
OjpIVE1MRWxlbWVudEltcGw7Cit1c2luZyBET006OkhUTUxOYW1lczsKIHVzaW5nIERPTTo6TmFt
ZWRBdHRyTWFwSW1wbDsKIHVzaW5nIERPTTo6Tm9kZTsKIHVzaW5nIERPTTo6Tm9kZUltcGw7CkBA
IC0xNzcsMTMgKzE3NywxMSBAQCBzdGF0aWMgUVN0cmluZyBzdGFydE1hcmt1cChjb25zdCBOb2Rl
SW1wCiAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgICAgIGNhc2UgTm9kZTo6VEVYVF9OT0RFOiB7
CiAgICAgICAgICAgICBpZiAobm9kZS0+cGFyZW50Tm9kZSgpKSB7Ci0gICAgICAgICAgICAgICAg
c3dpdGNoIChub2RlLT5wYXJlbnROb2RlKCktPmlkKCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
Y2FzZSBJRF9QUkU6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfU0NSSVBUOgotICAgICAg
ICAgICAgICAgICAgICBjYXNlIElEX1NUWUxFOgotICAgICAgICAgICAgICAgICAgICBjYXNlIElE
X1RFWFRBUkVBOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0cmluZ1ZhbHVlRm9y
UmFuZ2Uobm9kZSwgcmFuZ2UpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBp
ZiAobm9kZS0+cGFyZW50Tm9kZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6cHJlKCkpIHx8Cisg
ICAgICAgICAgICAgICAgICAgIG5vZGUtPnBhcmVudE5vZGUoKS0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OnNjcmlwdCgpKSB8fAorICAgICAgICAgICAgICAgICAgICBub2RlLT5wYXJlbnROb2RlKCkt
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzdHlsZSgpKSB8fAorICAgICAgICAgICAgICAgICAgICBu
b2RlLT5wYXJlbnROb2RlKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0ZXh0YXJlYSgpKSkKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0cmluZ1ZhbHVlRm9yUmFuZ2Uobm9kZSwgcmFuZ2Up
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgUVN0cmluZyBtYXJrdXAgPSBhbm5vdGF0ZSA/
IGVzY2FwZUhUTUwocmVuZGVyZWRUZXh0KG5vZGUsIHJhbmdlKSkgOiBlc2NhcGVIVE1MKHN0cmlu
Z1ZhbHVlRm9yUmFuZ2Uobm9kZSwgcmFuZ2UpKTsgICAgICAgICAgICAKICAgICAgICAgICAgIGlm
IChkZWZhdWx0U3R5bGUpIHsKQEAgLTI0OCw5ICsyNDYsMTMgQEAgc3RhdGljIFFTdHJpbmcgc3Rh
cnRNYXJrdXAoY29uc3QgTm9kZUltcAogCiBzdGF0aWMgUVN0cmluZyBlbmRNYXJrdXAoY29uc3Qg
Tm9kZUltcGwgKm5vZGUpCiB7Ci0gICAgaWYgKCghbm9kZS0+aXNIVE1MRWxlbWVudCgpIHx8IGVu
ZFRhZ1JlcXVpcmVtZW50KG5vZGUtPmlkKCkpICE9IEZPUkJJRERFTikgJiYgbm9kZS0+bm9kZVR5
cGUoKSAhPSBOb2RlOjpURVhUX05PREUgJiYgbm9kZS0+bm9kZVR5cGUoKSAhPSBOb2RlOjpET0NV
TUVOVF9OT0RFKSB7Ci0gICAgICAgIHJldHVybiAiPC8iICsgbm9kZS0+bm9kZU5hbWUoKS5zdHJp
bmcoKSArICI+IjsKKyAgICBib29sIGhhc0VuZFRhZyA9IG5vZGUtPmlzRWxlbWVudE5vZGUoKTsK
KyAgICBpZiAobm9kZS0+aXNIVE1MRWxlbWVudCgpKSB7CisgICAgICAgIGNvbnN0IEhUTUxFbGVt
ZW50SW1wbCogaHRtbEVsdCA9IHN0YXRpY19jYXN0PGNvbnN0IEhUTUxFbGVtZW50SW1wbCo+KG5v
ZGUpOworICAgICAgICBoYXNFbmRUYWcgPSAoaHRtbEVsdC0+ZW5kVGFnUmVxdWlyZW1lbnQoKSAh
PSBUYWdTdGF0dXNGb3JiaWRkZW4pOwogICAgIH0KKyAgICBpZiAoaGFzRW5kVGFnKQorICAgICAg
ICByZXR1cm4gIjwvIiArIG5vZGUtPm5vZGVOYW1lKCkuc3RyaW5nKCkgKyAiPiI7CiAgICAgcmV0
dXJuICIiOwogfQogCkBAIC0yNjUsOCArMjY3LDE0IEBAIHN0YXRpYyBRU3RyaW5nIG1hcmt1cChj
b25zdCBOb2RlSW1wbCAqc3QKICAgICAgICAgICAgICAgICBub2Rlcy0+YXBwZW5kKGN1cnJlbnQp
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbWUgKz0gc3RhcnRNYXJrdXAoY3VycmVudCwg
MCwgRG9Ob3RBbm5vdGF0ZUZvckludGVyY2hhbmdlLCAwKTsKLSAgICAgICAgfSAgICAgICAgCi0g
ICAgICAgIGlmICghY3VycmVudC0+aXNIVE1MRWxlbWVudCgpIHx8IGVuZFRhZ1JlcXVpcmVtZW50
KGN1cnJlbnQtPmlkKCkpICE9IEZPUkJJRERFTikgeworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBib29sIGNvbnRhaW5lciA9IHRydWU7CisgICAgICAgIGlmIChjdXJyZW50LT5pc0hUTUxF
bGVtZW50KCkpIHsKKyAgICAgICAgICAgIGNvbnN0IEhUTUxFbGVtZW50SW1wbCogaCA9IHN0YXRp
Y19jYXN0PGNvbnN0IEhUTUxFbGVtZW50SW1wbCo+KGN1cnJlbnQpOworICAgICAgICAgICAgY29u
dGFpbmVyID0gaC0+ZW5kVGFnUmVxdWlyZW1lbnQoKSAhPSBUYWdTdGF0dXNGb3JiaWRkZW47Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKGNvbnRhaW5lcikgewogICAgICAgICAgICAgLy8gcHJpbnQg
Y2hpbGRyZW4KICAgICAgICAgICAgIGlmIChOb2RlSW1wbCAqbiA9IGN1cnJlbnQtPmZpcnN0Q2hp
bGQoKSkgewogICAgICAgICAgICAgICAgIG1lICs9IG1hcmt1cChuLCBmYWxzZSwgdHJ1ZSwgbm9k
ZXMpOwpAQCAtNDE0LDkgKzQyMiw5IEBAIFFTdHJpbmcgY3JlYXRlTWFya3VwKGNvbnN0IFJhbmdl
SW1wbCAqcmEKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJvb2wgYnJlYWtBdEVuZCA9IGZh
bHNlOwogICAgICAgICAgICAgaWYgKGNvbW1vbkFuY2VzdG9yQmxvY2sgPT0gYW5jZXN0b3IpIHsK
LSAgICAgICAgICAgICAgICBOb2RlSW1wbDo6SWQgaWQgPSBhbmNlc3Rvci0+aWQoKTsKICAgICAg
ICAgICAgICAgICAvLyBJbmNsdWRlIGFuY2VzdG9ycyB0aGF0IGFyZSByZXF1aXJlZCB0byByZXRh
aW4gdGhlIGFwcGVhcmFuY2Ugb2YgdGhlIGNvcGllZCBtYXJrdXAuCi0gICAgICAgICAgICAgICAg
aWYgKGlkID09IElEX1BSRSB8fCBpZCA9PSBJRF9UQUJMRSB8fCBpZCA9PSBJRF9PTCB8fCBpZCA9
PSBJRF9VTCkgeworICAgICAgICAgICAgICAgIGlmIChhbmNlc3Rvci0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OnByZSgpKSB8fCBhbmNlc3Rvci0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRhYmxlKCkp
IHx8CisgICAgICAgICAgICAgICAgICAgIGFuY2VzdG9yLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
b2woKSkgfHwgYW5jZXN0b3ItPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp1bCgpKSkgewogICAgICAg
ICAgICAgICAgICAgICBicmVha0F0RW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTU4Miw3ICs1OTAsNyBAQCBET006OkRv
Y3VtZW50RnJhZ21lbnRJbXBsICpjcmVhdGVGcmFnbWVuCiAgICAgICAgICAgICBFbGVtZW50SW1w
bCAqZWxlbWVudDsKICAgICAgICAgICAgIGlmIChzLmlzRW1wdHkoKSAmJiBsaXN0LmlzRW1wdHko
KSkgewogICAgICAgICAgICAgICAgIC8vIEZvciBsYXN0IGxpbmUsIHVzZSB0aGUgIm1hZ2ljIEJS
IiByYXRoZXIgdGhhbiBhIFAuCi0gICAgICAgICAgICAgICAgZWxlbWVudCA9IGRvY3VtZW50LT5j
cmVhdGVIVE1MRWxlbWVudCgiYnIiLCBleGNlcHRpb25Db2RlKTsKKyAgICAgICAgICAgICAgICBl
bGVtZW50ID0gZG9jdW1lbnQtPmNyZWF0ZUVsZW1lbnROUyhYSFRNTF9OQU1FU1BBQ0UsICJiciIs
IGV4Y2VwdGlvbkNvZGUpOwogICAgICAgICAgICAgICAgIEFTU0VSVChleGNlcHRpb25Db2RlID09
IDApOwogICAgICAgICAgICAgICAgIGVsZW1lbnQtPnJlZigpOwogICAgICAgICAgICAgICAgIGVs
ZW1lbnQtPnNldEF0dHJpYnV0ZShBVFRSX0NMQVNTLCBBcHBsZUludGVyY2hhbmdlTmV3bGluZSk7
ICAgICAgICAgICAgCkluZGV4OiBraHRtbC9lZGl0aW5nL3JlcGxhY2Vfc2VsZWN0aW9uX2NvbW1h
bmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VkaXRp
bmcvcmVwbGFjZV9zZWxlY3Rpb25fY29tbWFuZC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
MwpkaWZmIC11IC1wIC1yMS4zIGtodG1sL2VkaXRpbmcvcmVwbGFjZV9zZWxlY3Rpb25fY29tbWFu
ZC5jcHAKLS0tIGtodG1sL2VkaXRpbmcvcmVwbGFjZV9zZWxlY3Rpb25fY29tbWFuZC5jcHAJMzAg
SnVuIDIwMDUgMDE6Mjc6MzggLTAwMDAJMS4zCisrKyBraHRtbC9lZGl0aW5nL3JlcGxhY2Vfc2Vs
ZWN0aW9uX2NvbW1hbmQuY3BwCTUgSnVsIDIwMDUgMjM6MjA6MjkgLTAwMDAKQEAgLTI3LDcgKzI3
LDcgQEAKIAogI2luY2x1ZGUgInZpc2libGVfcG9zaXRpb24uaCIKICNpbmNsdWRlICJtaXNjL2h0
bWxhdHRycy5oIgotI2luY2x1ZGUgIm1pc2MvaHRtbHRhZ3MuaCIKKyNpbmNsdWRlICJodG1sbmFt
ZXMuaCIKICNpbmNsdWRlICJ4bWwvZG9tX2RvY2ltcGwuaCIKICNpbmNsdWRlICJodG1sX2ludGVy
Y2hhbmdlLmgiCiAjaW5jbHVkZSAieG1sL2RvbV90ZXh0aW1wbC5oIgpAQCAtNTgsNiArNTgsNyBA
QCB1c2luZyBET006OkRPTVN0cmluZzsKIHVzaW5nIERPTTo6SFRNTEVsZW1lbnRJbXBsOwogdXNp
bmcgRE9NOjpDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbkltcGw7CiB1c2luZyBET006OlBvc2l0
aW9uOwordXNpbmcgRE9NOjpIVE1MTmFtZXM7CiAKIG5hbWVzcGFjZSBraHRtbCB7CiAKQEAgLTE2
NywzMCArMTY4LDE0IEBAIHN0YXRpYyBib29sIGlzUHJvYmFibHlCbG9jayhjb25zdCBOb2RlSW0K
ICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBzd2l0Y2gg
KG5vZGUtPmlkKCkpIHsKLSAgICAgICAgY2FzZSBJRF9CTE9DS1FVT1RFOgotICAgICAgICBjYXNl
IElEX0REOgotICAgICAgICBjYXNlIElEX0RJVjoKLSAgICAgICAgY2FzZSBJRF9ETDoKLSAgICAg
ICAgY2FzZSBJRF9EVDoKLSAgICAgICAgY2FzZSBJRF9IMToKLSAgICAgICAgY2FzZSBJRF9IMjoK
LSAgICAgICAgY2FzZSBJRF9IMzoKLSAgICAgICAgY2FzZSBJRF9INDoKLSAgICAgICAgY2FzZSBJ
RF9INToKLSAgICAgICAgY2FzZSBJRF9INjoKLSAgICAgICAgY2FzZSBJRF9IUjoKLSAgICAgICAg
Y2FzZSBJRF9MSToKLSAgICAgICAgY2FzZSBJRF9PTDoKLSAgICAgICAgY2FzZSBJRF9QOgotICAg
ICAgICBjYXNlIElEX1BSRToKLSAgICAgICAgY2FzZSBJRF9URDoKLSAgICAgICAgY2FzZSBJRF9U
SDoKLSAgICAgICAgY2FzZSBJRF9VTDoKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0K
LSAgICAKLSAgICByZXR1cm4gZmFsc2U7CisgICAgLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24gc2Vl
bXMgcmVhbGx5IGJyb2tlbiB0byBtZS4gIEl0IGlzbid0IGV2ZW4gaW5jbHVkaW5nIGFsbCB0aGUg
YmxvY2stbGV2ZWwgZWxlbWVudHMuCisgICAgcmV0dXJuIChub2RlLT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6YmxvY2txdW90ZSgpKSB8fCBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZGQoKSkg
fHwgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmRpdigpKSB8fAorICAgICAgICAgICAgbm9k
ZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmRsKCkpIHx8IG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjpkdCgpKSB8fCBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDEoKSkgfHwKKyAgICAg
ICAgICAgIG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoMigpKSB8fCBub2RlLT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6aDMoKSkgfHwgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omg0KCkp
IHx8CisgICAgICAgICAgICBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDUoKSkgfHwgbm9k
ZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omg2KCkpIHx8IG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjpocigpKSB8fAorICAgICAgICAgICAgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omxp
KCkpIHx8IG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvbCgpKSB8fCBub2RlLT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6cCgpKSB8fAorICAgICAgICAgICAgbm9kZS0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OnByZSgpKSB8fCBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGQoKSkgfHwgbm9k
ZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRoKCkpIHx8CisgICAgICAgICAgICBub2RlLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6dWwoKSkpOwogfQogCiBzdGF0aWMgYm9vbCBpc01haWxQYXN0ZUFz
UXVvdGF0aW9uTm9kZShjb25zdCBOb2RlSW1wbCAqbm9kZSkKQEAgLTIxNCwxNiArMTk5LDggQEAg
c3RhdGljIGJvb2wgaXNQcm9iYWJseVRhYmxlU3RydWN0dXJlTm9kZQogICAgIGlmICghbm9kZSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIHN3aXRjaCAobm9kZS0+aWQoKSkgewot
ICAgICAgICBjYXNlIElEX1RBQkxFOgotICAgICAgICBjYXNlIElEX1RCT0RZOgotICAgICAgICBj
YXNlIElEX1REOgotICAgICAgICBjYXNlIElEX1RGT09UOgotICAgICAgICBjYXNlIElEX1RIRUFE
OgotICAgICAgICBjYXNlIElEX1RSOgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQot
ICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gKG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVz
Ojp0YWJsZSgpKSB8fCBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGJvZHkoKSkgfHwgbm9k
ZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRkKCkpIHx8CisgICAgICAgICAgICBub2RlLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6dGZvb3QoKSkgfHwgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
OnRoZWFkKCkpIHx8IG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0cigpKSk7CiB9CiAKIHZv
aWQgUmVwbGFjZW1lbnRGcmFnbWVudDo6cHJ1bmVFbXB0eU5vZGVzKCkKQEAgLTI1MCw3ICsyMjcs
NyBAQCB2b2lkIFJlcGxhY2VtZW50RnJhZ21lbnQ6OnBydW5lRW1wdHlOb2RlCiBib29sIFJlcGxh
Y2VtZW50RnJhZ21lbnQ6OmlzSW50ZXJjaGFuZ2VOZXdsaW5lTm9kZShjb25zdCBOb2RlSW1wbCAq
bm9kZSkKIHsKICAgICBzdGF0aWMgRE9NU3RyaW5nIGludGVyY2hhbmdlTmV3bGluZUNsYXNzU3Ry
aW5nKEFwcGxlSW50ZXJjaGFuZ2VOZXdsaW5lKTsKLSAgICByZXR1cm4gbm9kZSAmJiBub2RlLT5p
ZCgpID09IElEX0JSICYmIHN0YXRpY19jYXN0PGNvbnN0IEVsZW1lbnRJbXBsICo+KG5vZGUpLT5n
ZXRBdHRyaWJ1dGUoQVRUUl9DTEFTUykgPT0gaW50ZXJjaGFuZ2VOZXdsaW5lQ2xhc3NTdHJpbmc7
CisgICAgcmV0dXJuIG5vZGUgJiYgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJyKCkpICYm
IHN0YXRpY19jYXN0PGNvbnN0IEVsZW1lbnRJbXBsICo+KG5vZGUpLT5nZXRBdHRyaWJ1dGUoQVRU
Ul9DTEFTUykgPT0gaW50ZXJjaGFuZ2VOZXdsaW5lQ2xhc3NTdHJpbmc7CiB9CiAKIGJvb2wgUmVw
bGFjZW1lbnRGcmFnbWVudDo6aXNJbnRlcmNoYW5nZUNvbnZlcnRlZFNwYWNlU3Bhbihjb25zdCBO
b2RlSW1wbCAqbm9kZSkKQEAgLTUwNywxOCArNDg0LDE5IEBAIHZvaWQgUmVwbGFjZW1lbnRGcmFn
bWVudDo6cmVtb3ZlU3R5bGVOb2QKICAgICAgICAgTm9kZUltcGwgKm5leHQgPSBub2RlLT50cmF2
ZXJzZU5leHROb2RlKCk7CiAgICAgICAgIC8vIFRoaXMgbGlzdCBvZiB0YWdzIGNoYW5nZSB0aGUg
YXBwZWFyYW5jZSBvZiBjb250ZW50CiAgICAgICAgIC8vIGluIHdheXMgd2UgY2FuIGFkZCBiYWNr
IG9uIGxhdGVyIHdpdGggQ1NTLCBpZiBuZWNlc3NhcnkuCi0gICAgICAgIGlmIChub2RlLT5pZCgp
ID09IElEX0IgfHwgCi0gICAgICAgICAgICBub2RlLT5pZCgpID09IElEX0JJRyB8fCAKLSAgICAg
ICAgICAgIG5vZGUtPmlkKCkgPT0gSURfQ0VOVEVSIHx8IAotICAgICAgICAgICAgbm9kZS0+aWQo
KSA9PSBJRF9GT05UIHx8IAotICAgICAgICAgICAgbm9kZS0+aWQoKSA9PSBJRF9JIHx8IAotICAg
ICAgICAgICAgbm9kZS0+aWQoKSA9PSBJRF9TIHx8IAotICAgICAgICAgICAgbm9kZS0+aWQoKSA9
PSBJRF9TTUFMTCB8fCAKLSAgICAgICAgICAgIG5vZGUtPmlkKCkgPT0gSURfU1RSSUtFIHx8IAot
ICAgICAgICAgICAgbm9kZS0+aWQoKSA9PSBJRF9TVUIgfHwgCi0gICAgICAgICAgICBub2RlLT5p
ZCgpID09IElEX1NVUCB8fCAKLSAgICAgICAgICAgIG5vZGUtPmlkKCkgPT0gSURfVFQgfHwgCi0g
ICAgICAgICAgICBub2RlLT5pZCgpID09IElEX1UgfHwgCisgICAgICAgIC8vICBGSVhNRTogVGhp
cyBsaXN0IGlzIGluY29tcGxldGUKKyAgICAgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjpiKCkpIHx8IAorICAgICAgICAgICAgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJp
ZygpKSB8fCAKKyAgICAgICAgICAgIG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpjZW50ZXIo
KSkgfHwgCisgICAgICAgICAgICBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Zm9udCgpKSB8
fCAKKyAgICAgICAgICAgIG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppKCkpIHx8IAorICAg
ICAgICAgICAgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnMoKSkgfHwgCisgICAgICAgICAg
ICBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c21hbGwoKSkgfHwgCisgICAgICAgICAgICBu
b2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c3RyaWtlKCkpIHx8IAorICAgICAgICAgICAgbm9k
ZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnN1YigpKSB8fCAKKyAgICAgICAgICAgIG5vZGUtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjpzdXAoKSkgfHwgCisgICAgICAgICAgICBub2RlLT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6dHQoKSkgfHwgCisgICAgICAgICAgICBub2RlLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6dSgpKSB8fCAKICAgICAgICAgICAgIGlzU3R5bGVTcGFuKG5vZGUpKSB7CiAgICAg
ICAgICAgICByZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuKG5vZGUpOwogICAgICAgICB9CkBA
IC03NDYsNyArNzI0LDcgQEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgp
CiAgICAgaWYgKCFsaW5lUGxhY2Vob2xkZXIpIHsKICAgICAgICAgUG9zaXRpb24gZG93bnN0cmVh
bSA9IHN0YXJ0UG9zLmRvd25zdHJlYW0oKTsKICAgICAgICAgZG93bnN0cmVhbSA9IHBvc2l0aW9u
T3V0c2lkZUNvbnRhaW5pbmdTcGVjaWFsRWxlbWVudChkb3duc3RyZWFtKTsKLSAgICAgICAgaWYg
KGRvd25zdHJlYW0ubm9kZSgpLT5pZCgpID09IElEX0JSICYmIGRvd25zdHJlYW0ub2Zmc2V0KCkg
PT0gMCAmJiAKKyAgICAgICAgaWYgKGRvd25zdHJlYW0ubm9kZSgpLT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6YnIoKSkgJiYgZG93bnN0cmVhbS5vZmZzZXQoKSA9PSAwICYmIAogICAgICAgICAgICAg
bV9mcmFnbWVudC5oYXNJbnRlcmNoYW5nZU5ld2xpbmVBdEVuZCgpICYmCiAgICAgICAgICAgICBp
c1N0YXJ0T2ZMaW5lKFZpc2libGVQb3NpdGlvbihkb3duc3RyZWFtLCBWUF9ERUZBVUxUX0FGRklO
SVRZKSkpCiAgICAgICAgICAgICBsaW5lUGxhY2Vob2xkZXIgPSBkb3duc3RyZWFtLm5vZGUoKTsK
QEAgLTkwOCwxMiArODg2LDEyIEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBw
bHkoKQogICAgICAgICB9CiAgICAgfSAKICAgICBlbHNlIHsKLSAgICAgICAgaWYgKG1fbGFzdE5v
ZGVJbnNlcnRlZCAmJiBtX2xhc3ROb2RlSW5zZXJ0ZWQtPmlkKCkgPT0gSURfQlIgJiYgIWRvY3Vt
ZW50KCktPmluU3RyaWN0TW9kZSgpKSB7CisgICAgICAgIGlmIChtX2xhc3ROb2RlSW5zZXJ0ZWQg
JiYgbV9sYXN0Tm9kZUluc2VydGVkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YnIoKSkgJiYgIWRv
Y3VtZW50KCktPmluU3RyaWN0TW9kZSgpKSB7CiAgICAgICAgICAgICBkb2N1bWVudCgpLT51cGRh
dGVMYXlvdXQoKTsKICAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiBwb3MoUG9zaXRpb24obV9s
YXN0Tm9kZUluc2VydGVkLCAxKSwgRE9XTlNUUkVBTSk7CiAgICAgICAgICAgICBpZiAoaXNFbmRP
ZkJsb2NrKHBvcykpIHsKICAgICAgICAgICAgICAgICBOb2RlSW1wbCAqbmV4dCA9IG1fbGFzdE5v
ZGVJbnNlcnRlZC0+dHJhdmVyc2VOZXh0Tm9kZSgpOwotICAgICAgICAgICAgICAgIGJvb2wgaGFz
VHJhaWxpbmdCUiA9IG5leHQgJiYgbmV4dC0+aWQoKSA9PSBJRF9CUiAmJiBtX2xhc3ROb2RlSW5z
ZXJ0ZWQtPmVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQoKSA9PSBuZXh0LT5lbmNsb3NpbmdCbG9j
a0Zsb3dFbGVtZW50KCk7CisgICAgICAgICAgICAgICAgYm9vbCBoYXNUcmFpbGluZ0JSID0gbmV4
dCAmJiBuZXh0LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YnIoKSkgJiYgbV9sYXN0Tm9kZUluc2Vy
dGVkLT5lbmNsb3NpbmdCbG9ja0Zsb3dFbGVtZW50KCkgPT0gbmV4dC0+ZW5jbG9zaW5nQmxvY2tG
bG93RWxlbWVudCgpOwogICAgICAgICAgICAgICAgIGlmICghaGFzVHJhaWxpbmdCUikgewogICAg
ICAgICAgICAgICAgICAgICAvLyBJbnNlcnQgYW4gImV4dHJhIiBCUiBhdCB0aGUgZW5kIG9mIHRo
ZSBibG9jay4gCiAgICAgICAgICAgICAgICAgICAgIGluc2VydE5vZGVCZWZvcmUoY3JlYXRlQnJl
YWtFbGVtZW50KGRvY3VtZW50KCkpLCBtX2xhc3ROb2RlSW5zZXJ0ZWQpOwpAQCAtOTQwLDcgKzkx
OCw3IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkoKQogICAgICAgICAg
ICAgICAgIGluc2VydE5vZGVBZnRlcihub2RlLCByZWZOb2RlKTsKICAgICAgICAgICAgICAgICBy
ZWZOb2RlID0gbm9kZTsKICAgICAgICAgICAgICAgICAvLyBXZSB3YW50IHRvIG1vdmUgdGhlIGZp
cnN0IEJSIHdlIHNlZSwgc28gY2hlY2sgZm9yIHRoYXQgaGVyZS4KLSAgICAgICAgICAgICAgICBp
ZiAobm9kZS0+aWQoKSA9PSBJRF9CUikKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OmJyKCkpKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICBub2RlID0gbmV4dDsKICAgICAgICAgICAgIH0KQEAgLTEwODgsNyArMTA2Niw3
IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OnVwZGF0ZU5vZGUKICAgICAKICAgICAv
LyB1cGRhdGUgbV9sYXN0Tm9kZUluc2VydGVkCiAgICAgTm9kZUltcGwgKm9sZCA9IG1fbGFzdE5v
ZGVJbnNlcnRlZDsKLSAgICBtX2xhc3ROb2RlSW5zZXJ0ZWQgPSBub2RlLT5sYXN0RGVzY2VuZGVu
dCgpOworICAgIG1fbGFzdE5vZGVJbnNlcnRlZCA9IG5vZGUtPmxhc3REZXNjZW5kYW50KCk7CiAg
ICAgbV9sYXN0Tm9kZUluc2VydGVkLT5yZWYoKTsKICAgICBpZiAob2xkKQogICAgICAgICBvbGQt
PmRlcmVmKCk7CkluZGV4OiBraHRtbC9lZGl0aW5nL3NlbGVjdGlvbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWRpdGluZy9zZWxlY3Rpb24uY3BwLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjg5CmRpZmYgLXUgLXAgLXIxLjg5IGtodG1sL2VkaXRpbmcv
c2VsZWN0aW9uLmNwcAotLS0ga2h0bWwvZWRpdGluZy9zZWxlY3Rpb24uY3BwCTIzIEp1biAyMDA1
IDE5OjQ3OjQ4IC0wMDAwCTEuODkKKysrIGtodG1sL2VkaXRpbmcvc2VsZWN0aW9uLmNwcAk1IEp1
bCAyMDA1IDIzOjIwOjI5IC0wMDAwCkBAIC0zMyw3ICszMyw2IEBACiAjaW5jbHVkZSAiZG9tL2Rv
bV9zdHJpbmcuaCIKICNpbmNsdWRlICJraHRtbF9wYXJ0LmgiCiAjaW5jbHVkZSAia2h0bWx2aWV3
LmgiCi0jaW5jbHVkZSAibWlzYy9odG1sdGFncy5oIgogI2luY2x1ZGUgInJlbmRlcmluZy9yZW5k
ZXJfb2JqZWN0LmgiCiAjaW5jbHVkZSAicmVuZGVyaW5nL3JlbmRlcl9zdHlsZS5oIgogI2luY2x1
ZGUgInJlbmRlcmluZy9yZW5kZXJfdGV4dC5oIgpAQCAtOTM4LDcgKzkzNyw3IEBAIHZvaWQgU2Vs
ZWN0aW9uOjpkZWJ1Z1JlbmRlcmVyKFJlbmRlck9iamUKIHsKICAgICBpZiAoci0+bm9kZSgpLT5p
c0VsZW1lbnROb2RlKCkpIHsKICAgICAgICAgRWxlbWVudEltcGwgKmVsZW1lbnQgPSBzdGF0aWNf
Y2FzdDxFbGVtZW50SW1wbCAqPihyLT5ub2RlKCkpOwotICAgICAgICBmcHJpbnRmKHN0ZGVyciwg
IiVzJXNcbiIsIHNlbGVjdGVkID8gIj09PiAiIDogIiAgICAiLCBlbGVtZW50LT50YWdOYW1lKCku
c3RyaW5nKCkubGF0aW4xKCkpOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzJXNcbiIsIHNl
bGVjdGVkID8gIj09PiAiIDogIiAgICAiLCBlbGVtZW50LT5sb2NhbE5hbWUoKS5zdHJpbmcoKS5s
YXRpbjEoKSk7CiAgICAgfQogICAgIGVsc2UgaWYgKHItPmlzVGV4dCgpKSB7CiAgICAgICAgIFJl
bmRlclRleHQgKnRleHRSZW5kZXJlciA9IHN0YXRpY19jYXN0PFJlbmRlclRleHQgKj4ocik7Cklu
ZGV4OiBraHRtbC9lZGl0aW5nL3Zpc2libGVfcG9zaXRpb24uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VkaXRpbmcvdmlzaWJsZV9wb3NpdGlvbi5jcHAs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNTEKZGlmZiAtdSAtcCAtcjEuNTEga2h0bWwvZWRpdGlu
Zy92aXNpYmxlX3Bvc2l0aW9uLmNwcAotLS0ga2h0bWwvZWRpdGluZy92aXNpYmxlX3Bvc2l0aW9u
LmNwcAkyMyBKdW4gMjAwNSAxOTo0Nzo0OSAtMDAwMAkxLjUxCisrKyBraHRtbC9lZGl0aW5nL3Zp
c2libGVfcG9zaXRpb24uY3BwCTUgSnVsIDIwMDUgMjM6MjA6MzAgLTAwMDAKQEAgLTI2LDcgKzI2
LDcgQEAKICNpbmNsdWRlICJ2aXNpYmxlX3Bvc2l0aW9uLmgiCiAjaW5jbHVkZSAidmlzaWJsZV91
bml0cy5oIgogCi0jaW5jbHVkZSAibWlzYy9odG1sdGFncy5oIgorI2luY2x1ZGUgImh0bWxuYW1l
cy5oIgogI2luY2x1ZGUgInJlbmRlcmluZy9yZW5kZXJfbGluZS5oIgogI2luY2x1ZGUgInJlbmRl
cmluZy9yZW5kZXJfb2JqZWN0LmgiCiAjaW5jbHVkZSAicmVuZGVyaW5nL3JlbmRlcl90ZXh0Lmgi
CkBAIC01MCw2ICs1MCw3IEBAIHVzaW5nIERPTTo6UG9zaXRpb247CiB1c2luZyBET006OlJhbmdl
OwogdXNpbmcgRE9NOjpSYW5nZUltcGw7CiB1c2luZyBET006OlRleHRJbXBsOwordXNpbmcgRE9N
OjpIVE1MTmFtZXM7CiAKIG5hbWVzcGFjZSBraHRtbCB7CiAKQEAgLTc0LDcgKzc1LDcgQEAgdm9p
ZCBWaXNpYmxlUG9zaXRpb246OmluaXQoY29uc3QgUG9zaXRpbwogICAgIG1fYWZmaW5pdHkgPSBh
ZmZpbml0eTsKIAogICAgIC8vIEZvciA8YnI+IDAsIGl0J3MgaW1wb3J0YW50IG5vdCB0byBtb3Zl
IHBhc3QgdGhlIDxicj4uCi0gICAgaWYgKHBvcy5ub2RlKCkgJiYgcG9zLm5vZGUoKS0+aWQoKSA9
PSBJRF9CUiAmJiBwb3Mub2Zmc2V0KCkgPT0gMCkKKyAgICBpZiAocG9zLm5vZGUoKSAmJiBwb3Mu
bm9kZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YnIoKSkgJiYgcG9zLm9mZnNldCgpID09IDAp
CiAgICAgICAgIGluaXRVcHN0cmVhbShwb3MpOwogICAgIGVsc2UKICAgICAgICAgaW5pdERvd25z
dHJlYW0ocG9zKTsKQEAgLTI3NCw3ICsyNzUsNyBAQCBib29sIFZpc2libGVQb3NpdGlvbjo6aXND
YW5kaWRhdGUoY29uc3QgCiAgICAgfQogICAgIAogICAgIGlmIChyZW5kZXJlci0+aXNCbG9ja0Zs
b3coKSAmJiAoIXJlbmRlcmVyLT5maXJzdENoaWxkKCkgfHwgIXBvcy5ub2RlKCktPmZpcnN0Q2hp
bGQoKSkgJiYgCi0gICAgICAgKHJlbmRlcmVyLT5oZWlnaHQoKSB8fCBwb3Mubm9kZSgpLT5pZCgp
ID09IElEX0JPRFkpKSB7CisgICAgICAgKHJlbmRlcmVyLT5oZWlnaHQoKSB8fCBwb3Mubm9kZSgp
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Ym9keSgpKSkpIHsKICAgICAgICAgLy8gcmV0dXJuIHRy
dWUgZm9yIG9mZnNldCAwIGludG8gcmVuZGVyZWQgYmxvY2tzIHRoYXQgYXJlIGVtcHR5IG9mIHJl
bmRlcmVkIGtpZHMsIGJ1dCBoYXZlIGEgaGVpZ2h0CiAgICAgICAgIHJldHVybiBwb3Mub2Zmc2V0
KCkgPT0gMDsKICAgICB9CkBAIC0zNTksNyArMzYwLDcgQEAgbG9uZyBWaXNpYmxlUG9zaXRpb246
Om1heE9mZnNldChjb25zdCBObwogCiBib29sIFZpc2libGVQb3NpdGlvbjo6aXNBdG9taWNOb2Rl
KGNvbnN0IE5vZGVJbXBsICpub2RlKQogewotICAgIHJldHVybiBub2RlICYmICghbm9kZS0+aGFz
Q2hpbGROb2RlcygpIHx8IChub2RlLT5pZCgpID09IElEX09CSkVDVCAmJiBub2RlLT5yZW5kZXJl
cigpICYmIG5vZGUtPnJlbmRlcmVyKCktPmlzUmVwbGFjZWQoKSkpOworICAgIHJldHVybiBub2Rl
ICYmICghbm9kZS0+aGFzQ2hpbGROb2RlcygpIHx8IChub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6b2JqZWN0KCkpICYmIG5vZGUtPnJlbmRlcmVyKCkgJiYgbm9kZS0+cmVuZGVyZXIoKS0+aXNS
ZXBsYWNlZCgpKSk7CiB9CiAKIFFDaGFyIFZpc2libGVQb3NpdGlvbjo6Y2hhcmFjdGVyKCkgY29u
c3QKSW5kZXg6IGtodG1sL2VkaXRpbmcvdmlzaWJsZV90ZXh0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL3Zpc2libGVfdGV4dC5jcHAsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuMjcKZGlmZiAtdSAtcCAtcjEuMjcga2h0bWwvZWRpdGluZy92
aXNpYmxlX3RleHQuY3BwCi0tLSBraHRtbC9lZGl0aW5nL3Zpc2libGVfdGV4dC5jcHAJMTMgTWF5
IDIwMDUgMTY6NDg6NTEgLTAwMDAJMS4yNworKysga2h0bWwvZWRpdGluZy92aXNpYmxlX3RleHQu
Y3BwCTUgSnVsIDIwMDUgMjM6MjA6MzEgLTAwMDAKQEAgLTI1LDcgKzI1LDcgQEAKIAogI2luY2x1
ZGUgInZpc2libGVfdGV4dC5oIgogCi0jaW5jbHVkZSAibWlzYy9odG1sdGFncy5oIgorI2luY2x1
ZGUgImh0bWxuYW1lcy5oIgogI2luY2x1ZGUgInJlbmRlcmluZy9yZW5kZXJfdGV4dC5oIgogI2lu
Y2x1ZGUgInhtbC9kb21fbm9kZWltcGwuaCIKICNpbmNsdWRlICJ4bWwvZG9tX3Bvc2l0aW9uLmgi
CkBAIC0zNyw2ICszNyw3IEBAIHVzaW5nIERPTTo6Tm9kZTsKIHVzaW5nIERPTTo6Tm9kZUltcGw7
CiB1c2luZyBET006Om9mZnNldEluQ2hhcmFjdGVyczsKIHVzaW5nIERPTTo6UmFuZ2VJbXBsOwor
dXNpbmcgRE9NOjpIVE1MTmFtZXM7CiAKIC8vIEZJWE1FOiBUaGVzZSBjbGFzc2VzIHNob3VsZCBw
cm9iYWJseSB1c2UgdGhlIHJlbmRlciB0cmVlIGFuZCBub3QgdGhlIERPTSB0cmVlLCBzaW5jZSBl
bGVtZW50cyBjb3VsZAogLy8gYmUgaGlkZGVuIHVzaW5nIENTUywgb3IgYWRkaXRpb25hbCBnZW5l
cmF0ZWQgY29udGVudCBjb3VsZCBiZSBhZGRlZC4gIEZvciBub3csIHdlIGp1c3QgbWFrZSBzdXJl
CkBAIC0zMzYsNDEgKzMzNywyNSBAQCBib29sIFRleHRJdGVyYXRvcjo6aGFuZGxlUmVwbGFjZWRF
bGVtZW50CiAKIGJvb2wgVGV4dEl0ZXJhdG9yOjpoYW5kbGVOb25UZXh0Tm9kZSgpCiB7Ci0gICAg
c3dpdGNoIChtX25vZGUtPmlkKCkpIHsKLSAgICAgICAgY2FzZSBJRF9CUjogewotICAgICAgICAg
ICAgZW1pdENoYXJhY3RlcignXG4nLCBtX25vZGUtPnBhcmVudE5vZGUoKSwgbV9ub2RlLCAwLCAx
KTsKLSAgICAgICAgICAgIGJyZWFrOworICAgIGlmIChtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjpicigpKSkgeworICAgICAgICBlbWl0Q2hhcmFjdGVyKCdcbicsIG1fbm9kZS0+cGFyZW50
Tm9kZSgpLCBtX25vZGUsIDAsIDEpOworICAgIH0gZWxzZSBpZiAobV9ub2RlLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6dGQoKSkgfHwgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGgoKSkp
IHsKKyAgICAgICAgaWYgKG1fbGFzdENoYXJhY3RlciAhPSAnXG4nICYmIG1fbGFzdFRleHROb2Rl
KSB7CisgICAgICAgICAgICBlbWl0Q2hhcmFjdGVyKCdcdCcsIG1fbGFzdFRleHROb2RlLT5wYXJl
bnROb2RlKCksIG1fbGFzdFRleHROb2RlLCAwLCAxKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBp
ZiAobV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YmxvY2txdW90ZSgpKSB8fCBtX25vZGUt
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpkZCgpKSB8fAorICAgICAgICAgICAgICAgbV9ub2RlLT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6ZGl2KCkpIHx8CisgICAgICAgICAgICAgICBtX25vZGUtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjpkbCgpKSB8fCBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjpkdCgpKSB8fCAKKyAgICAgICAgICAgICAgIG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
OmgxKCkpIHx8IG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmgyKCkpIHx8CisgICAgICAg
ICAgICAgICBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoMygpKSB8fCBtX25vZGUtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjpoNCgpKSB8fAorICAgICAgICAgICAgICAgbV9ub2RlLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6aDUoKSkgfHwgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
aDYoKSkgfHwKKyAgICAgICAgICAgICAgIG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omhy
KCkpIHx8IG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmxpKCkpIHx8CisgICAgICAgICAg
ICAgICBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvbCgpKSB8fCBtX25vZGUtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjpwKCkpIHx8CisgICAgICAgICAgICAgICBtX25vZGUtPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjpwcmUoKSkgfHwgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dHIo
KSkgfHwKKyAgICAgICAgICAgICAgIG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnVsKCkp
KSB7CisgICAgICAgIGlmIChtX2xhc3RDaGFyYWN0ZXIgIT0gJ1xuJyAmJiBtX2xhc3RUZXh0Tm9k
ZSkgeworICAgICAgICAgICAgZW1pdENoYXJhY3RlcignXG4nLCBtX2xhc3RUZXh0Tm9kZS0+cGFy
ZW50Tm9kZSgpLCBtX2xhc3RUZXh0Tm9kZSwgMCwgMSk7CiAgICAgICAgIH0KLQotICAgICAgICBj
YXNlIElEX1REOgotICAgICAgICBjYXNlIElEX1RIOgotICAgICAgICAgICAgaWYgKG1fbGFzdENo
YXJhY3RlciAhPSAnXG4nICYmIG1fbGFzdFRleHROb2RlKSB7Ci0gICAgICAgICAgICAgICAgZW1p
dENoYXJhY3RlcignXHQnLCBtX2xhc3RUZXh0Tm9kZS0+cGFyZW50Tm9kZSgpLCBtX2xhc3RUZXh0
Tm9kZSwgMCwgMSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAg
ICBjYXNlIElEX0JMT0NLUVVPVEU6Ci0gICAgICAgIGNhc2UgSURfREQ6Ci0gICAgICAgIGNhc2Ug
SURfRElWOgotICAgICAgICBjYXNlIElEX0RMOgotICAgICAgICBjYXNlIElEX0RUOgotICAgICAg
ICBjYXNlIElEX0gxOgotICAgICAgICBjYXNlIElEX0gyOgotICAgICAgICBjYXNlIElEX0gzOgot
ICAgICAgICBjYXNlIElEX0g0OgotICAgICAgICBjYXNlIElEX0g1OgotICAgICAgICBjYXNlIElE
X0g2OgotICAgICAgICBjYXNlIElEX0hSOgotICAgICAgICBjYXNlIElEX0xJOgotICAgICAgICBj
YXNlIElEX09MOgotICAgICAgICBjYXNlIElEX1A6Ci0gICAgICAgIGNhc2UgSURfUFJFOgotICAg
ICAgICBjYXNlIElEX1RSOgotICAgICAgICBjYXNlIElEX1VMOgotICAgICAgICAgICAgaWYgKG1f
bGFzdENoYXJhY3RlciAhPSAnXG4nICYmIG1fbGFzdFRleHROb2RlKSB7Ci0gICAgICAgICAgICAg
ICAgZW1pdENoYXJhY3RlcignXG4nLCBtX2xhc3RUZXh0Tm9kZS0+cGFyZW50Tm9kZSgpLCBtX2xh
c3RUZXh0Tm9kZSwgMCwgMSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKICAg
ICB9CiAKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTM4MSw0OSArMzY2LDM3IEBAIHZvaWQgVGV4dEl0
ZXJhdG9yOjpleGl0Tm9kZSgpCiAgICAgYm9vbCBlbmRMaW5lID0gZmFsc2U7CiAgICAgYm9vbCBh
ZGROZXdsaW5lID0gZmFsc2U7CiAKLSAgICBzd2l0Y2ggKG1fbm9kZS0+aWQoKSkgewotICAgICAg
ICBjYXNlIElEX0JMT0NLUVVPVEU6Ci0gICAgICAgIGNhc2UgSURfREQ6Ci0gICAgICAgIGNhc2Ug
SURfRElWOgotICAgICAgICBjYXNlIElEX0RMOgotICAgICAgICBjYXNlIElEX0RUOgotICAgICAg
ICBjYXNlIElEX0hSOgotICAgICAgICBjYXNlIElEX0xJOgotICAgICAgICBjYXNlIElEX09MOgot
ICAgICAgICBjYXNlIElEX1BSRToKLSAgICAgICAgY2FzZSBJRF9UUjoKLSAgICAgICAgY2FzZSBJ
RF9VTDoKLSAgICAgICAgICAgIGVuZExpbmUgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0K
LSAgICAgICAgY2FzZSBJRF9IMToKLSAgICAgICAgY2FzZSBJRF9IMjoKLSAgICAgICAgY2FzZSBJ
RF9IMzoKLSAgICAgICAgY2FzZSBJRF9INDoKLSAgICAgICAgY2FzZSBJRF9INToKLSAgICAgICAg
Y2FzZSBJRF9INjoKLSAgICAgICAgY2FzZSBJRF9QOiB7Ci0gICAgICAgICAgICBlbmRMaW5lID0g
dHJ1ZTsKLQotICAgICAgICAgICAgLy8gSW4gY2VydGFpbiBjYXNlcywgZW1pdCBhIG5ldyBuZXds
aW5lIGNoYXJhY3RlciBmb3IgdGhpcyBub2RlCi0gICAgICAgICAgICAvLyByZWdhcmRsZXNzIG9m
IHdoZXRoZXIgd2UgZW1pdCBhbm90aGVyIG9uZS4KLSAgICAgICAgICAgIC8vIEZJWE1FOiBTb21l
IGRheSB3ZSBjb3VsZCBkbyB0aGlzIGZvciBvdGhlciB0YWdzLgotICAgICAgICAgICAgLy8gSG93
ZXZlciwgZG9pbmcgaXQganVzdCBmb3IgdGhlIHRhZ3MgYWJvdmUgbWFrZXMgaXQgbW9yZSBsaWtl
bHkKLSAgICAgICAgICAgIC8vIHdlJ2xsIGVuZCB1cCBnZXR0aW5nIHRoZSByaWdodCByZXN1bHQg
d2l0aG91dCBtYXJnaW4gY29sbGFwc2luZy4KLSAgICAgICAgICAgIC8vIEZvciBleGFtcGxlOiA8
ZGl2PjxwPnRleHQ8L3A+PC9kaXY+IHdpbGwgd29yayByaWdodCBldmVuIGlmIGJvdGgKLSAgICAg
ICAgICAgIC8vIHRoZSA8ZGl2PiBhbmQgdGhlIDxwPiBoYXZlIGJvdHRvbSBtYXJnaW5zLgotICAg
ICAgICAgICAgUmVuZGVyT2JqZWN0ICpyZW5kZXJlciA9IG1fbm9kZS0+cmVuZGVyZXIoKTsKLSAg
ICAgICAgICAgIGlmIChyZW5kZXJlcikgewotICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlICpz
dHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpOwotICAgICAgICAgICAgICAgIGlmIChzdHlsZSkgewot
ICAgICAgICAgICAgICAgICAgICBpbnQgYm90dG9tTWFyZ2luID0gcmVuZGVyZXItPmNvbGxhcHNl
ZE1hcmdpbkJvdHRvbSgpOwotICAgICAgICAgICAgICAgICAgICBpbnQgZm9udFNpemUgPSBzdHls
ZS0+aHRtbEZvbnQoKS5nZXRGb250RGVmKCkuY29tcHV0ZWRQaXhlbFNpemUoKTsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKGJvdHRvbU1hcmdpbiAqIDIgPj0gZm9udFNpemUpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGFkZE5ld2xpbmUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICB9
CisgICAgaWYgKG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJsb2NrcXVvdGUoKSkgfHwg
bV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZGQoKSkgfHwKKyAgICAgICAgICAgICAgIG1f
bm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmRpdigpKSB8fAorICAgICAgICAgICAgICAgbV9u
b2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZGwoKSkgfHwgbV9ub2RlLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6ZHQoKSkgfHwgCisgICAgICAgICAgICAgICBtX25vZGUtPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjpocigpKSB8fCBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpsaSgpKSB8fAor
ICAgICAgICAgICAgICAgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b2woKSkgfHwKKyAg
ICAgICAgICAgICAgIG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnByZSgpKSB8fCBtX25v
ZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0cigpKSB8fAorICAgICAgICAgICAgICAgbV9ub2Rl
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dWwoKSkpCisgICAgICAgIGVuZExpbmUgPSB0cnVlOwor
ICAgIGVsc2UgaWYgKG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmgxKCkpIHx8IG1fbm9k
ZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmgyKCkpIHx8CisgICAgICAgICAgICAgbV9ub2RlLT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6aDMoKSkgfHwgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6aDQoKSkgfHwKKyAgICAgICAgICAgICBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpo
NSgpKSB8fCBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoNigpKSB8fAorICAgICAgICAg
ICAgIG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnAoKSkpIHsKKyAgICAgICAgZW5kTGlu
ZSA9IHRydWU7CisKKyAgICAgICAgLy8gSW4gY2VydGFpbiBjYXNlcywgZW1pdCBhIG5ldyBuZXds
aW5lIGNoYXJhY3RlciBmb3IgdGhpcyBub2RlCisgICAgICAgIC8vIHJlZ2FyZGxlc3Mgb2Ygd2hl
dGhlciB3ZSBlbWl0IGFub3RoZXIgb25lLgorICAgICAgICAvLyBGSVhNRTogU29tZSBkYXkgd2Ug
Y291bGQgZG8gdGhpcyBmb3Igb3RoZXIgdGFncy4KKyAgICAgICAgLy8gSG93ZXZlciwgZG9pbmcg
aXQganVzdCBmb3IgdGhlIHRhZ3MgYWJvdmUgbWFrZXMgaXQgbW9yZSBsaWtlbHkKKyAgICAgICAg
Ly8gd2UnbGwgZW5kIHVwIGdldHRpbmcgdGhlIHJpZ2h0IHJlc3VsdCB3aXRob3V0IG1hcmdpbiBj
b2xsYXBzaW5nLgorICAgICAgICAvLyBGb3IgZXhhbXBsZTogPGRpdj48cD50ZXh0PC9wPjwvZGl2
PiB3aWxsIHdvcmsgcmlnaHQgZXZlbiBpZiBib3RoCisgICAgICAgIC8vIHRoZSA8ZGl2PiBhbmQg
dGhlIDxwPiBoYXZlIGJvdHRvbSBtYXJnaW5zLgorICAgICAgICBSZW5kZXJPYmplY3QgKnJlbmRl
cmVyID0gbV9ub2RlLT5yZW5kZXJlcigpOworICAgICAgICBpZiAocmVuZGVyZXIpIHsKKyAgICAg
ICAgICAgIFJlbmRlclN0eWxlICpzdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpOworICAgICAgICAg
ICAgaWYgKHN0eWxlKSB7CisgICAgICAgICAgICAgICAgaW50IGJvdHRvbU1hcmdpbiA9IHJlbmRl
cmVyLT5jb2xsYXBzZWRNYXJnaW5Cb3R0b20oKTsKKyAgICAgICAgICAgICAgICBpbnQgZm9udFNp
emUgPSBzdHlsZS0+aHRtbEZvbnQoKS5nZXRGb250RGVmKCkuY29tcHV0ZWRQaXhlbFNpemUoKTsK
KyAgICAgICAgICAgICAgICBpZiAoYm90dG9tTWFyZ2luICogMiA+PSBmb250U2l6ZSkgeworICAg
ICAgICAgICAgICAgICAgICBhZGROZXdsaW5lID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KIApAQCAt
NjYwLDM0ICs2MzMsMjIgQEAgYm9vbCBTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yOjpo
YQogCiBib29sIFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3I6OmhhbmRsZU5vblRleHRO
b2RlKCkKIHsKLSAgICBzd2l0Y2ggKG1fbm9kZS0+aWQoKSkgewotICAgICAgICBjYXNlIElEX0JS
OgotICAgICAgICAgICAgZW1pdE5ld2xpbmVGb3JCUk9yVGV4dCgpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgSURfVEQ6Ci0gICAgICAgIGNhc2UgSURfVEg6Ci0gICAgICAgIGNh
c2UgSURfQkxPQ0tRVU9URToKLSAgICAgICAgY2FzZSBJRF9ERDoKLSAgICAgICAgY2FzZSBJRF9E
SVY6Ci0gICAgICAgIGNhc2UgSURfREw6Ci0gICAgICAgIGNhc2UgSURfRFQ6Ci0gICAgICAgIGNh
c2UgSURfSDE6Ci0gICAgICAgIGNhc2UgSURfSDI6Ci0gICAgICAgIGNhc2UgSURfSDM6Ci0gICAg
ICAgIGNhc2UgSURfSDQ6Ci0gICAgICAgIGNhc2UgSURfSDU6Ci0gICAgICAgIGNhc2UgSURfSDY6
Ci0gICAgICAgIGNhc2UgSURfSFI6Ci0gICAgICAgIGNhc2UgSURfUDoKLSAgICAgICAgY2FzZSBJ
RF9QUkU6Ci0gICAgICAgIGNhc2UgSURfVFI6Ci0gICAgICAgIGNhc2UgSURfT0w6Ci0gICAgICAg
IGNhc2UgSURfVUw6Ci0gICAgICAgIGNhc2UgSURfTEk6Ci0gICAgICAgICAgICAvLyBFbWl0IGEg
c3BhY2UgdG8gImJyZWFrIHVwIiBjb250ZW50LiBBbnkgd29yZCBicmVhawotICAgICAgICAgICAg
Ly8gY2hhcmFjdGVyIHdpbGwgZG8uCi0gICAgICAgICAgICBlbWl0Q2hhcmFjdGVyKCcgJywgbV9u
b2RlLCAwLCAwKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgIGlmIChtX25vZGUtPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjpicigpKSkKKyAgICAgICAgZW1pdE5ld2xpbmVGb3JCUk9yVGV4dCgpOwor
ICAgIGVsc2UgaWYgKG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRkICgpKSB8fCBtX25v
ZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0aCgpKSB8fAorICAgICAgICAgICAgIG1fbm9kZS0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJsb2NrcXVvdGUoKSkgfHwgbV9ub2RlLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6ZGQoKSkgfHwKKyAgICAgICAgICAgICBtX25vZGUtPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjpkaXYoKSkgfHwKKyAgICAgICAgICAgICBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjpkbCgpKSB8fCBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpkdCgpKSB8fCAKKyAg
ICAgICAgICAgICBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoMSgpKSB8fCBtX25vZGUt
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoMigpKSB8fAorICAgICAgICAgICAgIG1fbm9kZS0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OmgzKCkpIHx8IG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
Omg0KCkpIHx8CisgICAgICAgICAgICAgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDUo
KSkgfHwgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDYoKSkgfHwKKyAgICAgICAgICAg
ICBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpocigpKSB8fCBtX25vZGUtPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjpsaSgpKSB8fAorICAgICAgICAgICAgIG1fbm9kZS0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6Om9sKCkpIHx8IG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnAoKSkgfHwK
KyAgICAgICAgICAgICBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpwcmUoKSkgfHwgbV9u
b2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dHIoKSkgfHwKKyAgICAgICAgICAgICBtX25vZGUt
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp1bCgpKSkgeworICAgICAgICAvLyBFbWl0IGEgc3BhY2Ug
dG8gImJyZWFrIHVwIiBjb250ZW50LiBBbnkgd29yZCBicmVhaworICAgICAgICAvLyBjaGFyYWN0
ZXIgd2lsbCBkby4KKyAgICAgICAgZW1pdENoYXJhY3RlcignICcsIG1fbm9kZSwgMCwgMCk7CiAg
ICAgfQogCiAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBraHRtbC9lZGl0aW5nL3Zpc2libGVfdW5p
dHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VkaXRp
bmcvdmlzaWJsZV91bml0cy5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzQKZGlmZiAtdSAt
cCAtcjEuMzQga2h0bWwvZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcAotLS0ga2h0bWwvZWRpdGlu
Zy92aXNpYmxlX3VuaXRzLmNwcAkyNiBNYXkgMjAwNSAyMDozMDoxMiAtMDAwMAkxLjM0CisrKyBr
aHRtbC9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwCTUgSnVsIDIwMDUgMjM6MjA6MzEgLTAwMDAK
QEAgLTI3LDcgKzI3LDcgQEAKIAogI2luY2x1ZGUgPHFzdHJpbmcuaD4KIAotI2luY2x1ZGUgImh0
bWx0YWdzLmgiCisjaW5jbHVkZSAiaHRtbG5hbWVzLmgiCiAjaW5jbHVkZSAibWlzYy9oZWxwZXIu
aCIKICNpbmNsdWRlICJyZW5kZXJpbmcvcmVuZGVyX3RleHQuaCIKICNpbmNsdWRlICJyZW5kZXJp
bmcvcmVuZGVyX2Jsb2NrLmgiCkBAIC00MSw2ICs0MSw3IEBAIHVzaW5nIERPTTo6RWxlbWVudElt
cGw7CiB1c2luZyBET006Ok5vZGVJbXBsOwogdXNpbmcgRE9NOjpQb3NpdGlvbjsKIHVzaW5nIERP
TTo6UmFuZ2VJbXBsOwordXNpbmcgRE9NOjpIVE1MTmFtZXM7CiAKIG5hbWVzcGFjZSBraHRtbCB7
CiAKQEAgLTMzMiw3ICszMzMsNyBAQCBWaXNpYmxlUG9zaXRpb24gZW5kT2ZMaW5lKGNvbnN0IFZp
c2libGVQCiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKIAogICAgIGxvbmcgZW5k
T2Zmc2V0ID0gMTsKLSAgICBpZiAoZW5kTm9kZS0+aWQoKSA9PSBJRF9CUikgeworICAgIGlmIChl
bmROb2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YnIoKSkpIHsKICAgICAgICAgZW5kT2Zmc2V0
ID0gMDsKICAgICB9IGVsc2UgaWYgKGVuZEJveC0+aXNJbmxpbmVUZXh0Qm94KCkpIHsKICAgICAg
ICAgSW5saW5lVGV4dEJveCAqZW5kVGV4dEJveCA9IHN0YXRpY19jYXN0PElubGluZVRleHRCb3gg
Kj4oZW5kQm94KTsKSW5kZXg6IGtodG1sL2h0bWwvZHRkLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
L2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9kdGQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS41CmRpZmYgLXUgLXAgLXIxLjUga2h0bWwvaHRtbC9kdGQuaAotLS0ga2h0bWwvaHRtbC9kdGQu
aAkxMiBBcHIgMjAwNSAyMjo0OTo0MSAtMDAwMAkxLjUKKysrIGtodG1sL2h0bWwvZHRkLmgJNSBK
dWwgMjAwNSAyMzoyMDozMSAtMDAwMApAQCAtMjMsMzYgKzIzLDExIEBACiAjZGVmaW5lIF9ET01f
ZHRkX2hfCiAKICNpbmNsdWRlICJkb20vZG9tX3N0cmluZy5oIgotI2luY2x1ZGUgIm1pc2MvaHRt
bHRhZ3MuaCIKIAogbmFtZXNwYWNlIERPTQogewogCi12b2lkIGFkZEZvcmJpZGRlbihpbnQgdGFn
SWQsIHVzaG9ydCAqZm9yYmlkZGVuVGFncyk7Ci12b2lkIHJlbW92ZUZvcmJpZGRlbihpbnQgdGFn
SWQsIHVzaG9ydCAqZm9yYmlkZGVuVGFncyk7Ci0KLWVudW0gdGFnU3RhdHVzIHsgT1BUSU9OQUws
IFJFUVVJUkVELCBGT1JCSURERU4gfTsKLQogYm9vbCBjaGVja0NoaWxkKHVzaG9ydCB0YWdJRCwg
dXNob3J0IGNoaWxkSUQsIGJvb2wgc3RyaWN0KTsKIAotZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIHNo
b3J0IHRhZ1ByaW9yaXR5QXJyYXlbXTsKLWV4dGVybiBjb25zdCB0YWdTdGF0dXMgZW5kVGFnQXJy
YXlbXTsKLQotaW5saW5lIHVuc2lnbmVkIHNob3J0IHRhZ1ByaW9yaXR5KFFfVUlOVDMyIHRhZ0lk
KQotewotICAgIC8vIFRyZWF0IGN1c3RvbSBlbGVtZW50cyB0aGUgc2FtZSBhcyA8c3Bhbj47IGFs
c28gZG9uJ3QgcmVhZCBwYXN0IHRoZSBlbmQgb2YgdGhlIGFycmF5LgotICAgIGlmICh0YWdJZCA+
IElEX0xBU1RfVEFHKQotICAgICAgICByZXR1cm4gdGFnUHJpb3JpdHlBcnJheVtJRF9TUEFOXTsK
LSAgICByZXR1cm4gdGFnUHJpb3JpdHlBcnJheVt0YWdJZF07Ci19Ci0KLWlubGluZSB0YWdTdGF0
dXMgZW5kVGFnUmVxdWlyZW1lbnQoUV9VSU5UMzIgdGFnSWQpCi17Ci0gICAgLy8gVHJlYXQgY3Vz
dG9tIGVsZW1lbnRzIHRoZSBzYW1lIGFzIDxzcGFuPjsgYWxzbyBkb24ndCByZWFkIHBhc3QgdGhl
IGVuZCBvZiB0aGUgYXJyYXkuCi0gICAgaWYgKHRhZ0lkID4gSURfTEFTVF9UQUcpCi0gICAgICAg
IHJldHVybiBlbmRUYWdBcnJheVtJRF9TUEFOXTsKLSAgICByZXR1cm4gZW5kVGFnQXJyYXlbdGFn
SWRdOwotfQotCiB9IC8vbmFtZXNwYWNlIERPTQogI2VuZGlmCkluZGV4OiBraHRtbC9odG1sL2h0
bWxfYmFzZWltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2to
dG1sL2h0bWwvaHRtbF9iYXNlaW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNzIKZGlm
ZiAtdSAtcCAtcjEuNzIga2h0bWwvaHRtbC9odG1sX2Jhc2VpbXBsLmNwcAotLS0ga2h0bWwvaHRt
bC9odG1sX2Jhc2VpbXBsLmNwcAkxMiBNYXkgMjAwNSAxNzoxMToyMSAtMDAwMAkxLjcyCisrKyBr
aHRtbC9odG1sL2h0bWxfYmFzZWltcGwuY3BwCTUgSnVsIDIwMDUgMjM6MjA6MzIgLTAwMDAKQEAg
LTQ4LDcgKzQ4LDcgQEAgdXNpbmcgbmFtZXNwYWNlIERPTTsKIHVzaW5nIG5hbWVzcGFjZSBraHRt
bDsKIAogSFRNTEJvZHlFbGVtZW50SW1wbDo6SFRNTEJvZHlFbGVtZW50SW1wbChEb2N1bWVudFB0
ciAqZG9jKQotICAgIDogSFRNTEVsZW1lbnRJbXBsKGRvYyksIG1fbGlua0RlY2woMCkKKyAgICA6
IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6OmJvZHkoKSwgZG9jKSwgbV9saW5rRGVjbCgwKQog
ewogfQogCkBAIC02MSwxMSArNjEsNiBAQCBIVE1MQm9keUVsZW1lbnRJbXBsOjp+SFRNTEJvZHlF
bGVtZW50SW1wCiAgICAgfQogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTEJvZHlFbGVtZW50SW1wbDo6
aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9CT0RZOwotfQotCiB2b2lkIEhUTUxCb2R5RWxl
bWVudEltcGw6OmNyZWF0ZUxpbmtEZWNsKCkKIHsKICAgICBtX2xpbmtEZWNsID0gbmV3IENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uSW1wbDsKQEAgLTI4OSw3ICsyODQsMTggQEAgdm9pZCBIVE1M
Qm9keUVsZW1lbnRJbXBsOjpzZXRWTGluayhjb25zdAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBI
VE1MRnJhbWVFbGVtZW50SW1wbDo6SFRNTEZyYW1lRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRv
YykKLSAgICA6IEhUTUxFbGVtZW50SW1wbChkb2MpCisgICAgOiBIVE1MRWxlbWVudEltcGwoSFRN
TE5hbWVzOjpmcmFtZSgpLCBkb2MpCit7CisgICAgaW5pdCgpOworfQorCitIVE1MRnJhbWVFbGVt
ZW50SW1wbDo6SFRNTEZyYW1lRWxlbWVudEltcGwoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFt
ZSwgRG9jdW1lbnRQdHIgKmRvYykKKyAgICA6IEhUTUxFbGVtZW50SW1wbCh0YWdOYW1lLCBkb2Mp
Cit7CisgICAgaW5pdCgpOworfQorCit2b2lkIEhUTUxGcmFtZUVsZW1lbnRJbXBsOjppbml0KCkK
IHsKICAgICBtX2ZyYW1lQm9yZGVyID0gdHJ1ZTsKICAgICBtX2ZyYW1lQm9yZGVyU2V0ID0gZmFs
c2U7CkBAIC0zMDMsMTEgKzMwOSw2IEBAIEhUTUxGcmFtZUVsZW1lbnRJbXBsOjp+SFRNTEZyYW1l
RWxlbWVudEkKIHsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxGcmFtZUVsZW1lbnRJbXBsOjppZCgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0ZSQU1FOwotfQotCiBib29sIEhUTUxGcmFtZUVsZW1l
bnRJbXBsOjppc1VSTEFsbG93ZWQoY29uc3QgQXRvbWljU3RyaW5nICZVUkxTdHJpbmcpIGNvbnN0
CiB7CiAgICAgaWYgKFVSTFN0cmluZy5pc0VtcHR5KCkpIHsKQEAgLTQ4Miw3ICs0ODMsNyBAQCB2
b2lkIEhUTUxGcmFtZUVsZW1lbnRJbXBsOjphdHRhY2goKQogCiAgICAgLy8gaW5oZXJpdCBkZWZh
dWx0IHNldHRpbmdzIGZyb20gcGFyZW50IGZyYW1lc2V0CiAgICAgZm9yIChOb2RlSW1wbCAqbm9k
ZSA9IHBhcmVudE5vZGUoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKSkKLSAgICAg
ICAgaWYgKG5vZGUtPmlkKCkgPT0gSURfRlJBTUVTRVQpIHsKKyAgICAgICAgaWYgKG5vZGUtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjpmcmFtZXNldCgpKSkgewogICAgICAgICAgICAgSFRNTEZyYW1l
U2V0RWxlbWVudEltcGwqIGZyYW1lc2V0ID0gc3RhdGljX2Nhc3Q8SFRNTEZyYW1lU2V0RWxlbWVu
dEltcGwqPihub2RlKTsKICAgICAgICAgICAgIGlmICghbV9mcmFtZUJvcmRlclNldCkKICAgICAg
ICAgICAgICAgICBtX2ZyYW1lQm9yZGVyID0gZnJhbWVzZXQtPmZyYW1lQm9yZGVyKCk7CkBAIC02
NjEsNyArNjYyLDcgQEAgdm9pZCBIVE1MRnJhbWVFbGVtZW50SW1wbDo6c2V0U3JjKGNvbnN0IAog
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MRnJhbWVTZXRFbGVtZW50SW1wbDo6SFRNTEZyYW1l
U2V0RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50SW1wbChk
b2MpCisgICAgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjpmcmFtZXNldCgpLCBkb2MpCiB7
CiAgICAgLy8gZGVmYXVsdCB2YWx1ZSBmb3Igcm93cyBhbmQgY29scy4uLgogICAgIG1fdG90YWxS
b3dzID0gMTsKQEAgLTY4NSw5ICs2ODYsMTEgQEAgSFRNTEZyYW1lU2V0RWxlbWVudEltcGw6On5I
VE1MRnJhbWVTZXRFbAogICAgICAgICBkZWxldGUgW10gbV9jb2xzOwogfQogCi1Ob2RlSW1wbDo6
SWQgSFRNTEZyYW1lU2V0RWxlbWVudEltcGw6OmlkKCkgY29uc3QKK2Jvb2wgSFRNTEZyYW1lU2V0
RWxlbWVudEltcGw6OmNoZWNrRFREKGNvbnN0IE5vZGVJbXBsKiBuZXdDaGlsZCkKIHsKLSAgICBy
ZXR1cm4gSURfRlJBTUVTRVQ7CisJLy8gRklYTUU6IE9sZCBjb2RlIGhhZCBhZGphY2VudCBkb3Vi
bGUgcmV0dXJucyBhbmQgc2VlbWVkIHRvIHdhbnQgdG8gZG8gc29tZXRoaW5nIHdpdGggTk9GUkFN
RVMgKGJ1dCBkaWRuJ3QpLgorCS8vIFdoYXQgaXMgdGhlIGNvcnJlY3QgYmVoYXZpb3I/CisJcmV0
dXJuIG5ld0NoaWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZnJhbWVzZXQoKSkgfHwgbmV3Q2hp
bGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpmcmFtZSgpKTsKIH0KIAogdm9pZCBIVE1MRnJhbWVT
ZXRFbGVtZW50SW1wbDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAq
YXR0cikKQEAgLTc1Miw4ICs3NTUsNyBAQCB2b2lkIEhUTUxGcmFtZVNldEVsZW1lbnRJbXBsOjph
dHRhY2goKQogICAgIEhUTUxFbGVtZW50SW1wbCogbm9kZSA9IHN0YXRpY19jYXN0PEhUTUxFbGVt
ZW50SW1wbCo+KHBhcmVudE5vZGUoKSk7CiAgICAgd2hpbGUobm9kZSkKICAgICB7Ci0gICAgICAg
IGlmKG5vZGUtPmlkKCkgPT0gSURfRlJBTUVTRVQpCi0gICAgICAgIHsKKyAgICAgICAgaWYgKG5v
ZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpmcmFtZXNldCgpKSkgewogICAgICAgICAgICAgSFRN
TEZyYW1lU2V0RWxlbWVudEltcGwqIGZyYW1lc2V0ID0gc3RhdGljX2Nhc3Q8SFRNTEZyYW1lU2V0
RWxlbWVudEltcGwqPihub2RlKTsKICAgICAgICAgICAgIGlmKCFmcmFtZUJvcmRlclNldCkgIGZy
YW1lYm9yZGVyID0gZnJhbWVzZXQtPmZyYW1lQm9yZGVyKCk7CiAgICAgICAgICAgICBpZighbm9y
ZXNpemUpICBub3Jlc2l6ZSA9IGZyYW1lc2V0LT5ub1Jlc2l6ZSgpOwpAQCAtODE3LDcgKzgxOSw3
IEBAIHZvaWQgSFRNTEZyYW1lU2V0RWxlbWVudEltcGw6OnNldFJvd3MoY28KIC8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KIAogSFRNTEhlYWRFbGVtZW50SW1wbDo6SFRNTEhlYWRFbGVtZW50SW1wbChEb2N1
bWVudFB0ciAqZG9jKQotICAgIDogSFRNTEVsZW1lbnRJbXBsKGRvYykKKyAgICA6IEhUTUxFbGVt
ZW50SW1wbChIVE1MTmFtZXM6OmhlYWQoKSwgZG9jKQogewogfQogCkBAIC04MjUsMTEgKzgyNyw2
IEBAIEhUTUxIZWFkRWxlbWVudEltcGw6On5IVE1MSGVhZEVsZW1lbnRJbXAKIHsKIH0KIAotTm9k
ZUltcGw6OklkIEhUTUxIZWFkRWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
SURfSEVBRDsKLX0KLQogRE9NU3RyaW5nIEhUTUxIZWFkRWxlbWVudEltcGw6OnByb2ZpbGUoKSBj
b25zdAogewogICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoQVRUUl9QUk9GSUxFKTsKQEAgLTg0MCwx
MCArODM3LDE4IEBAIHZvaWQgSFRNTEhlYWRFbGVtZW50SW1wbDo6c2V0UHJvZmlsZShjb24KICAg
ICBzZXRBdHRyaWJ1dGUoQVRUUl9QUk9GSUxFLCB2YWx1ZSk7CiB9CiAKK2Jvb2wgSFRNTEhlYWRF
bGVtZW50SW1wbDo6Y2hlY2tEVEQoY29uc3QgTm9kZUltcGwqIG5ld0NoaWxkKQoreworCXJldHVy
biBuZXdDaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRpdGxlKCkpIHx8IG5ld0NoaWxkLT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6aXNpbmRleCgpKSB8fAorCQkgICBuZXdDaGlsZC0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OmJhc2UoKSkgfHwgbmV3Q2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjpzY3JpcHQoKSkgfHwKKwkJICAgbmV3Q2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzdHls
ZSgpKSB8fCBuZXdDaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om1ldGEoKSkgfHwKKwkJICAg
bmV3Q2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpsaW5rKCkpIHx8IG5ld0NoaWxkLT5pc1Rl
eHROb2RlKCk7Cit9CisKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogSFRNTEh0bWxFbGVtZW50SW1w
bDo6SFRNTEh0bWxFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAgIDogSFRNTEVsZW1l
bnRJbXBsKGRvYykKKyAgICA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6Omh0bWwoKSwgZG9j
KQogewogfQogCkBAIC04NTEsMTEgKzg1Niw2IEBAIEhUTUxIdG1sRWxlbWVudEltcGw6On5IVE1M
SHRtbEVsZW1lbnRJbXAKIHsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxIdG1sRWxlbWVudEltcGw6
OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfSFRNTDsKLX0KLQogRE9NU3RyaW5nIEhUTUxI
dG1sRWxlbWVudEltcGw6OnZlcnNpb24oKSBjb25zdAogewogICAgIHJldHVybiBnZXRBdHRyaWJ1
dGUoQVRUUl9WRVJTSU9OKTsKQEAgLTg2Niw5ICs4NjYsMTcgQEAgdm9pZCBIVE1MSHRtbEVsZW1l
bnRJbXBsOjpzZXRWZXJzaW9uKGNvbgogICAgIHNldEF0dHJpYnV0ZShBVFRSX1ZFUlNJT04sIHZh
bHVlKTsKIH0KIAorYm9vbCBIVE1MSHRtbEVsZW1lbnRJbXBsOjpjaGVja0RURChjb25zdCBOb2Rl
SW1wbCogbmV3Q2hpbGQpCit7CisJLy8gRklYTUU6IFdoeSBpcyA8c2NyaXB0PiBhbGxvd2VkIGhl
cmU/CisJcmV0dXJuIG5ld0NoaWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aGVhZCgpKSB8fCBu
ZXdDaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJvZHkoKSkgfHwKKwkJICAgbmV3Q2hpbGQt
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpmcmFtZXNldCgpKSB8fCBuZXdDaGlsZC0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6Om5vZnJhbWVzKCkpIHx8CisJCSAgIG5ld0NoaWxkLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6c2NyaXB0KCkpOworfQorCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUhUTUxJRnJh
bWVFbGVtZW50SW1wbDo6SFRNTElGcmFtZUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpIDog
SFRNTEZyYW1lRWxlbWVudEltcGwoZG9jKQorSFRNTElGcmFtZUVsZW1lbnRJbXBsOjpIVE1MSUZy
YW1lRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykgOiBIVE1MRnJhbWVFbGVtZW50SW1wbChI
VE1MTmFtZXM6OmlmcmFtZSgpLCBkb2MpCiB7CiAgICAgbV9mcmFtZUJvcmRlciA9IGZhbHNlOwog
ICAgIG1fbWFyZ2luV2lkdGggPSAtMTsKQEAgLTg4MCwxMSArODg4LDYgQEAgSFRNTElGcmFtZUVs
ZW1lbnRJbXBsOjp+SFRNTElGcmFtZUVsZW1lbgogewogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTElG
cmFtZUVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0lGUkFNRTsKLX0K
LQogYm9vbCBIVE1MSUZyYW1lRWxlbWVudEltcGw6Om1hcFRvRW50cnkoTm9kZUltcGw6OklkIGF0
dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChh
dHRyKSB7CkluZGV4OiBraHRtbC9odG1sL2h0bWxfYmFzZWltcGwuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfYmFzZWltcGwuaCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS4yNwpkaWZmIC11IC1wIC1yMS4yNyBraHRtbC9odG1sL2h0bWxfYmFz
ZWltcGwuaAotLS0ga2h0bWwvaHRtbC9odG1sX2Jhc2VpbXBsLmgJMTEgTWF5IDIwMDUgMDU6NDk6
MzQgLTAwMDAJMS4yNworKysga2h0bWwvaHRtbC9odG1sX2Jhc2VpbXBsLmgJNSBKdWwgMjAwNSAy
MzoyMDozMiAtMDAwMApAQCAtMjYsNyArMjYsNiBAQAogI2lmbmRlZiBIVE1MX0JBU0VJTVBMX0gK
ICNkZWZpbmUgSFRNTF9CQVNFSU1QTF9ICiAKLSNpbmNsdWRlICJodG1sL2R0ZC5oIgogI2luY2x1
ZGUgImh0bWwvaHRtbF9lbGVtZW50aW1wbC5oIgogI2luY2x1ZGUgIm1pc2Mva2h0bWxsYXlvdXQu
aCIKIApAQCAtNTUsOCArNTQsOSBAQCBwdWJsaWM6CiAgICAgSFRNTEJvZHlFbGVtZW50SW1wbChE
b2N1bWVudFB0ciAqZG9jKTsKICAgICB+SFRNTEJvZHlFbGVtZW50SW1wbCgpOwogCi0gICAgdmly
dHVhbCBJZCBpZCgpIGNvbnN0OwotCisgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1Jl
cXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzUmVxdWlyZWQ7IH0KKyAgICB2aXJ0
dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDEwOyB9CisgICAgCiAgICAgdmly
dHVhbCBib29sIG1hcFRvRW50cnkoTm9kZUltcGw6OklkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVu
dHJ5JiByZXN1bHQpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0
ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICopOwogCkBAIC05MiwxMSArOTIsMTQgQEAgY2xhc3MgSFRN
TEZyYW1lRWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTAogCiBwdWJsaWM6CiAgICAgSFRNTEZyYW1l
RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYyk7Ci0KKyAgICBIVE1MRnJhbWVFbGVtZW50SW1w
bChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudFB0ciogZG9jKTsKICAgICB+
SFRNTEZyYW1lRWxlbWVudEltcGwoKTsKIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKKyAg
ICB2b2lkIGluaXQoKTsKIAorICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJl
bWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c0ZvcmJpZGRlbjsgfQorICAgIHZpcnR1YWwg
aW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMDsgfQorICAKICAgICB2aXJ0dWFsIHZv
aWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqKTsKICAgICB2aXJ0
dWFsIHZvaWQgYXR0YWNoKCk7CiAgICAgdmlydHVhbCB2b2lkIGRldGFjaCgpOwpAQCAtMTY4LDEw
ICsxNzEsMTEgQEAgY2xhc3MgSFRNTEZyYW1lU2V0RWxlbWVudEltcGwgOiBwdWJsaWMgSAogICAg
IGZyaWVuZCBjbGFzcyBraHRtbDo6UmVuZGVyRnJhbWVTZXQ7CiBwdWJsaWM6CiAgICAgSFRNTEZy
YW1lU2V0RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYyk7Ci0KICAgICB+SFRNTEZyYW1lU2V0
RWxlbWVudEltcGwoKTsKIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0
dXNSZXF1aXJlZDsgfQorICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1
cm4gMTA7IH0KKwl2aXJ0dWFsIGJvb2wgY2hlY2tEVEQoY29uc3QgTm9kZUltcGwqIG5ld0NoaWxk
KTsKIAogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1
dGVJbXBsICopOwogICAgIHZpcnR1YWwgdm9pZCBhdHRhY2goKTsKQEAgLTIxNiwxMCArMjIwLDEx
IEBAIGNsYXNzIEhUTUxIZWFkRWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTEUKIHsKIHB1YmxpYzoK
ICAgICBIVE1MSGVhZEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpOwotCiAgICAgfkhUTUxI
ZWFkRWxlbWVudEltcGwoKTsKIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdT
dGF0dXNPcHRpb25hbDsgfQorICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyBy
ZXR1cm4gMTA7IH0KKwl2aXJ0dWFsIGJvb2wgY2hlY2tEVEQoY29uc3QgTm9kZUltcGwqIG5ld0No
aWxkKTsKIAogICAgIERPTVN0cmluZyBwcm9maWxlKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRQcm9m
aWxlKGNvbnN0IERPTVN0cmluZyAmKTsKQEAgLTIzMyw3ICsyMzgsOSBAQCBwdWJsaWM6CiAgICAg
SFRNTEh0bWxFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKTsKICAgICB+SFRNTEh0bWxFbGVt
ZW50SW1wbCgpOwogCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OworICAgIHZpcnR1YWwgSFRN
TFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1Jl
cXVpcmVkOyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAx
MTsgfQorCXZpcnR1YWwgYm9vbCBjaGVja0RURChjb25zdCBOb2RlSW1wbCogbmV3Q2hpbGQpOwog
CiAgICAgRE9NU3RyaW5nIHZlcnNpb24oKSBjb25zdDsKICAgICB2b2lkIHNldFZlcnNpb24oY29u
c3QgRE9NU3RyaW5nICYpOwpAQCAtMjQ2LDEwICsyNTMsMTAgQEAgY2xhc3MgSFRNTElGcmFtZUVs
ZW1lbnRJbXBsIDogcHVibGljIEhUTQogewogcHVibGljOgogICAgIEhUTUxJRnJhbWVFbGVtZW50
SW1wbChEb2N1bWVudFB0ciAqZG9jKTsKLQogICAgIH5IVE1MSUZyYW1lRWxlbWVudEltcGwoKTsK
IAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMg
ZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQor
ICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMTsgfQogCiAgICAg
dmlydHVhbCBib29sIG1hcFRvRW50cnkoTm9kZUltcGw6OklkIGF0dHIsIE1hcHBlZEF0dHJpYnV0
ZUVudHJ5JiByZXN1bHQpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJp
YnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICphdHRyKTsKSW5kZXg6IGtodG1sL2h0bWwvaHRtbF9i
bG9ja2ltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1s
L2h0bWwvaHRtbF9ibG9ja2ltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE3CmRpZmYg
LXUgLXAgLXIxLjE3IGtodG1sL2h0bWwvaHRtbF9ibG9ja2ltcGwuY3BwCi0tLSBraHRtbC9odG1s
L2h0bWxfYmxvY2tpbXBsLmNwcAkxMSBNYXkgMjAwNSAwNTo0OTozNCAtMDAwMAkxLjE3CisrKyBr
aHRtbC9odG1sL2h0bWxfYmxvY2tpbXBsLmNwcAk1IEp1bCAyMDA1IDIzOjIwOjMyIC0wMDAwCkBA
IC0zNyw3ICszNyw3IEBAIHVzaW5nIG5hbWVzcGFjZSBraHRtbDsKIHVzaW5nIG5hbWVzcGFjZSBE
T007CiAKIEhUTUxCbG9ja3F1b3RlRWxlbWVudEltcGw6OkhUTUxCbG9ja3F1b3RlRWxlbWVudElt
cGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50SW1wbChkb2MpCisgICAgOiBI
VE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjpibG9ja3F1b3RlKCksIGRvYykKIHsKIH0KIApAQCAt
NDUsMTEgKzQ1LDYgQEAgSFRNTEJsb2NrcXVvdGVFbGVtZW50SW1wbDo6fkhUTUxCbG9ja3F1bwog
ewogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTEJsb2NrcXVvdGVFbGVtZW50SW1wbDo6aWQoKSBjb25z
dAotewotICAgIHJldHVybiBJRF9CTE9DS1FVT1RFOwotfQotCiBET01TdHJpbmcgSFRNTEJsb2Nr
cXVvdGVFbGVtZW50SW1wbDo6Y2l0ZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGdldEF0dHJpYnV0
ZShBVFRSX0NJVEUpOwpAQCAtNjMsNyArNTgsNyBAQCB2b2lkIEhUTUxCbG9ja3F1b3RlRWxlbWVu
dEltcGw6OnNldENpdGUoCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxEaXZFbGVtZW50SW1w
bDo6SFRNTERpdkVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0gICAgOiBIVE1MRWxlbWVu
dEltcGwoZG9jKQorICAgIDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6ZGl2KCksIGRvYykK
IHsKIH0KIApAQCAtNzEsMTEgKzY2LDYgQEAgSFRNTERpdkVsZW1lbnRJbXBsOjp+SFRNTERpdkVs
ZW1lbnRJbXBsKAogewogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTERpdkVsZW1lbnRJbXBsOjppZCgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0RJVjsKLX0KLQogYm9vbCBIVE1MRGl2RWxlbWVudElt
cGw6Om1hcFRvRW50cnkoTm9kZUltcGw6OklkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiBy
ZXN1bHQpIGNvbnN0CiB7CiAgICAgaWYgKGF0dHIgPT0gQVRUUl9BTElHTikgewpAQCAtMTIwLDcg
KzExMCw3IEBAIHZvaWQgSFRNTERpdkVsZW1lbnRJbXBsOjpzZXRBbGlnbihjb25zdCAKIC8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KIAogSFRNTEhSRWxlbWVudEltcGw6OkhUTUxIUkVsZW1lbnRJbXBsKERv
Y3VtZW50UHRyICpkb2MpCi0gICAgOiBIVE1MRWxlbWVudEltcGwoZG9jKQorICAgIDogSFRNTEVs
ZW1lbnRJbXBsKEhUTUxOYW1lczo6aHIoKSwgZG9jKQogewogfQogCkBAIC0xMjgsMTEgKzExOCw2
IEBAIEhUTUxIUkVsZW1lbnRJbXBsOjp+SFRNTEhSRWxlbWVudEltcGwoKQogewogfQogCi1Ob2Rl
SW1wbDo6SWQgSFRNTEhSRWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURf
SFI7Ci19Ci0KIGJvb2wgSFRNTEhSRWxlbWVudEltcGw6Om1hcFRvRW50cnkoTm9kZUltcGw6Oklk
IGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0CiB7CiAgICAgc3dpdGNo
IChhdHRyKSB7CkBAIC0yNTIsMTEgKzIzNywyMSBAQCB2b2lkIEhUTUxIUkVsZW1lbnRJbXBsOjpz
ZXRXaWR0aChjb25zdCBECiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSFRNTEhlYWRpbmdFbGVt
ZW50SW1wbDo6SFRNTEhlYWRpbmdFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCB1c2hvcnQg
X3RhZ2lkKQotICAgIDogSFRNTEdlbmVyaWNFbGVtZW50SW1wbChkb2MsIF90YWdpZCkKK0hUTUxI
ZWFkaW5nRWxlbWVudEltcGw6OkhUTUxIZWFkaW5nRWxlbWVudEltcGwoY29uc3QgUXVhbGlmaWVk
TmFtZSYgdGFnTmFtZSwgRG9jdW1lbnRQdHIgKmRvYykKKyAgICA6IEhUTUxFbGVtZW50SW1wbCh0
YWdOYW1lLCBkb2MpCiB7CiB9CiAKK2Jvb2wgSFRNTEhlYWRpbmdFbGVtZW50SW1wbDo6Y2hlY2tE
VEQoY29uc3QgTm9kZUltcGwqIG5ld0NoaWxkKQoreworICAgIGlmIChuZXdDaGlsZC0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OmgxKCkpIHx8IG5ld0NoaWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
aDIoKSkgfHwKKyAgICAgICAgbmV3Q2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoMygpKSB8
fCBuZXdDaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omg0KCkpIHx8CisgICAgICAgIG5ld0No
aWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDUoKSkgfHwgbmV3Q2hpbGQtPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjpoNigpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIGlu
RWl0aGVyVGFnTGlzdChuZXdDaGlsZCk7Cit9CisKIERPTVN0cmluZyBIVE1MSGVhZGluZ0VsZW1l
bnRJbXBsOjphbGlnbigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGdldEF0dHJpYnV0ZShBVFRSX0FM
SUdOKTsKQEAgLTI3MCwxMyArMjY1LDEzIEBAIHZvaWQgSFRNTEhlYWRpbmdFbGVtZW50SW1wbDo6
c2V0QWxpZ24oY28KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogSFRNTFBhcmFncmFwaEVsZW1lbnRJ
bXBsOjpIVE1MUGFyYWdyYXBoRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgICA6IEhU
TUxFbGVtZW50SW1wbChkb2MpCisgICAgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjpwKCks
IGRvYykKIHsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxQYXJhZ3JhcGhFbGVtZW50SW1wbDo6aWQo
KSBjb25zdAorYm9vbCBIVE1MUGFyYWdyYXBoRWxlbWVudEltcGw6OmNoZWNrRFREKGNvbnN0IE5v
ZGVJbXBsKiBuZXdDaGlsZCkKIHsKLSAgICByZXR1cm4gSURfUDsKKyAgICByZXR1cm4gaW5Jbmxp
bmVUYWdMaXN0KG5ld0NoaWxkKSB8fCAoZ2V0RG9jdW1lbnQoKS0+aW5Db21wYXRNb2RlKCkgJiYg
bmV3Q2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0YWJsZSgpKSk7CiB9CiAKIGJvb2wgSFRN
TFBhcmFncmFwaEVsZW1lbnRJbXBsOjptYXBUb0VudHJ5KE5vZGVJbXBsOjpJZCBhdHRyLCBNYXBw
ZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdApAQCAtMzIyLDggKzMxNyw4IEBAIHZvaWQg
SFRNTFBhcmFncmFwaEVsZW1lbnRJbXBsOjpzZXRBbGlnbigKIAogLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQogCi1IVE1MUHJlRWxlbWVudEltcGw6OkhUTUxQcmVFbGVtZW50SW1wbChEb2N1bWVudFB0ciAq
ZG9jLCB1bnNpZ25lZCBzaG9ydCBfdGFnaWQpCi0gICAgOiBIVE1MR2VuZXJpY0VsZW1lbnRJbXBs
KGRvYywgX3RhZ2lkKQorSFRNTFByZUVsZW1lbnRJbXBsOjpIVE1MUHJlRWxlbWVudEltcGwoY29u
c3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnRQdHIgKmRvYykKKyAgICA6IEhUTUxF
bGVtZW50SW1wbCh0YWdOYW1lLCBkb2MpCiB7CiB9CiAKQEAgLTM0MywxNiArMzM4LDExIEBAIHZv
aWQgSFRNTFByZUVsZW1lbnRJbXBsOjpzZXRXaWR0aChsb25nIHcKIGNvbnN0IGludCBkZWZhdWx0
TWluaW11bURlbGF5ID0gNjA7CiAKIEhUTUxNYXJxdWVlRWxlbWVudEltcGw6OkhUTUxNYXJxdWVl
RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLTogSFRNTEVsZW1lbnRJbXBsKGRvYyksCis6
IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6Om1hcnF1ZWUoKSwgZG9jKSwKICAgbV9taW5pbXVt
RGVsYXkoZGVmYXVsdE1pbmltdW1EZWxheSkKIHsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxNYXJx
dWVlRWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfTUFSUVVFRTsKLX0K
LQogYm9vbCBIVE1MTWFycXVlZUVsZW1lbnRJbXBsOjptYXBUb0VudHJ5KE5vZGVJbXBsOjpJZCBh
dHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdAogewogICAgIHN3aXRjaCAo
YXR0cikgewpAQCAtNDM0LDE5ICs0MjQsMyBAQCB2b2lkIEhUTUxNYXJxdWVlRWxlbWVudEltcGw6
OnBhcnNlTWFwcGVkCiAgICAgICAgICAgICBIVE1MRWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXR0
cmlidXRlKGF0dHIpOwogICAgIH0KIH0KLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUhUTUxMYXll
ckVsZW1lbnRJbXBsOjpIVE1MTGF5ZXJFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAg
IDogSFRNTERpdkVsZW1lbnRJbXBsKCBkb2MgKQotewotfQotCi1IVE1MTGF5ZXJFbGVtZW50SW1w
bDo6fkhUTUxMYXllckVsZW1lbnRJbXBsKCkKLXsKLX0KLQotTm9kZUltcGw6OklkIEhUTUxMYXll
ckVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0xBWUVSOwotfQpJbmRl
eDoga2h0bWwvaHRtbC9odG1sX2Jsb2NraW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbF9ibG9ja2ltcGwuaCx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS45CmRpZmYgLXUgLXAgLXIxLjkga2h0bWwvaHRtbC9odG1sX2Jsb2NraW1wbC5oCi0t
LSBraHRtbC9odG1sL2h0bWxfYmxvY2tpbXBsLmgJMTEgTWF5IDIwMDUgMDU6NDk6MzQgLTAwMDAJ
MS45CisrKyBraHRtbC9odG1sL2h0bWxfYmxvY2tpbXBsLmgJNSBKdWwgMjAwNSAyMzoyMDozMiAt
MDAwMApAQCAtMjYsNyArMjYsNiBAQAogI2RlZmluZSBIVE1MX0JMT0NLSU1QTF9ICiAKICNpbmNs
dWRlICJodG1sX2VsZW1lbnRpbXBsLmgiCi0jaW5jbHVkZSAiZHRkLmgiCiAKIG5hbWVzcGFjZSBE
T00gewogCkBAIC00MCw4ICszOSw5IEBAIHB1YmxpYzoKICAgICBIVE1MQmxvY2txdW90ZUVsZW1l
bnRJbXBsKERvY3VtZW50UHRyICpkb2MpOwogICAgIH5IVE1MQmxvY2txdW90ZUVsZW1lbnRJbXBs
KCk7CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7Ci0KKyAgICB2aXJ0dWFsIEhUTUxUYWdT
dGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJl
ZDsgfQorICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gNTsgfQor
ICAgIAogICAgIERPTVN0cmluZyBjaXRlKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRDaXRlKGNvbnN0
IERPTVN0cmluZyAmKTsKIH07CkBAIC01NSw4ICs1NSw5IEBAIGNsYXNzIEhUTUxEaXZFbGVtZW50
SW1wbCA6IHB1YmxpYyBIVE1MRWwKIHB1YmxpYzoKICAgICBIVE1MRGl2RWxlbWVudEltcGwoRG9j
dW1lbnRQdHIgKmRvYyk7CiAgICAgfkhUTUxEaXZFbGVtZW50SW1wbCgpOwotCi0gICAgdmlydHVh
bCBJZCBpZCgpIGNvbnN0OworICAgIAorICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdS
ZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9CisgICAgdmly
dHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiA1OyB9CiAgICAgCiAgICAgdmly
dHVhbCBib29sIG1hcFRvRW50cnkoSWQgYXR0ciwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3Vs
dCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0
dHJpYnV0ZUltcGwgKnRva2VuKTsKQEAgLTcyLDggKzczLDkgQEAgY2xhc3MgSFRNTEhSRWxlbWVu
dEltcGwgOiBwdWJsaWMgSFRNTEVsZQogcHVibGljOgogICAgIEhUTUxIUkVsZW1lbnRJbXBsKERv
Y3VtZW50UHRyICpkb2MpOwogICAgIH5IVE1MSFJFbGVtZW50SW1wbCgpOwotCi0gICAgdmlydHVh
bCBJZCBpZCgpIGNvbnN0OworICAgIAorICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdS
ZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c0ZvcmJpZGRlbjsgfQorICAgIHZp
cnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMDsgfQogICAgIAogICAgIHZp
cnR1YWwgYm9vbCBtYXBUb0VudHJ5KElkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1
bHQpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRB
dHRyaWJ1dGVJbXBsICopOwpAQCAtOTMsMTAgKzk1LDE0IEBAIHB1YmxpYzoKIAogLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQogCi1jbGFzcyBIVE1MSGVhZGluZ0VsZW1lbnRJbXBsIDogcHVibGljIEhUTUxH
ZW5lcmljRWxlbWVudEltcGwKK2NsYXNzIEhUTUxIZWFkaW5nRWxlbWVudEltcGwgOiBwdWJsaWMg
SFRNTEVsZW1lbnRJbXBsCiB7CiBwdWJsaWM6Ci0gICAgSFRNTEhlYWRpbmdFbGVtZW50SW1wbChE
b2N1bWVudFB0ciAqZG9jLCB1c2hvcnQgX3RhZ2lkKTsKKyAgICBIVE1MSGVhZGluZ0VsZW1lbnRJ
bXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50UHRyICpkb2MpOworCisg
ICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1
cm4gVGFnU3RhdHVzUmVxdWlyZWQ7IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNv
bnN0IHsgcmV0dXJuIDU7IH0KKwl2aXJ0dWFsIGJvb2wgY2hlY2tEVEQoY29uc3QgTm9kZUltcGwq
IG5ld0NoaWxkKTsKIAogICAgIERPTVN0cmluZyBhbGlnbigpIGNvbnN0OwogICAgIHZvaWQgc2V0
QWxpZ24oY29uc3QgRE9NU3RyaW5nICYpOwpAQCAtMTA0LDIxICsxMTAsMTcgQEAgcHVibGljOgog
CiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLS8qCi0gKiB3ZXJlIG5vdCB1c2luZyBIVE1MRWxlbWVu
dEltcGwgYXMgcGFyZW50IGNsYXNzLCBzaW5jZSBhCi0gKiBwYXJhZ3JhcGggc2hvdWxkIGJlIGFi
bGUgdG8gZmxvdyBhcm91bmQgYWxpZ25lZCBvYmplY3RzLiBUaHVzCi0gKiBhIDxwPiBlbGVtZW50
IGhhcyB0byBiZSBpbmxpbmUsIGFuZCBpcyByZW5kZXJlZCBieQotICogSFRNTEJsb2NrSW1wbDo6
Y2FsY1BhcmFncmFwaAotICovCiBjbGFzcyBIVE1MUGFyYWdyYXBoRWxlbWVudEltcGwgOiBwdWJs
aWMgSFRNTEVsZW1lbnRJbXBsCiB7CiBwdWJsaWM6CiAgICAgSFRNTFBhcmFncmFwaEVsZW1lbnRJ
bXBsKERvY3VtZW50UHRyICpkb2MpOwogCisgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRh
Z1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzT3B0aW9uYWw7IH0KKyAgICB2
aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDM7IH0KKyAgICB2aXJ0dWFs
IGJvb2wgY2hlY2tEVEQoY29uc3QgTm9kZUltcGwqIG5ld0NoaWxkKTsKKwogICAgIHZpcnR1YWwg
Ym9vbCBtYXBUb0VudHJ5KElkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNv
bnN0OwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1
dGVJbXBsICphdHRyKTsKLSAgICAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CiAKICAgICBE
T01TdHJpbmcgYWxpZ24oKSBjb25zdDsKICAgICB2b2lkIHNldEFsaWduKGNvbnN0IERPTVN0cmlu
ZyAmKTsKQEAgLTEyNiwxMyArMTI4LDE2IEBAIHB1YmxpYzoKIAogLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQogCi1jbGFzcyBIVE1MUHJlRWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTEdlbmVyaWNFbGVtZW50
SW1wbAorY2xhc3MgSFRNTFByZUVsZW1lbnRJbXBsIDogcHVibGljIEhUTUxFbGVtZW50SW1wbAog
ewogcHVibGljOgotICAgIEhUTUxQcmVFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCB1c2hv
cnQgX3RhZ2lkKTsKKyAgICBIVE1MUHJlRWxlbWVudEltcGwoY29uc3QgUXVhbGlmaWVkTmFtZSYg
dGFnTmFtZSwgRG9jdW1lbnRQdHIgKmRvYyk7CisKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMg
ZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQor
ICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gNTsgfQogCiAgICAg
bG9uZyB3aWR0aCgpIGNvbnN0OwotICAgIHZvaWQgc2V0V2lkdGgoIGxvbmcgdyApOworICAgIHZv
aWQgc2V0V2lkdGgobG9uZyB3KTsKIH07CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTE0MSw5
ICsxNDYsMTAgQEAgY2xhc3MgSFRNTE1hcnF1ZWVFbGVtZW50SW1wbCA6IHB1YmxpYyBIVAogewog
cHVibGljOgogICAgIEhUTUxNYXJxdWVlRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYyk7Ci0K
LSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CiAgICAgCisgICAgdmlydHVhbCBIVE1MVGFnU3Rh
dHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzUmVxdWlyZWQ7
IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDM7IH0KKwog
ICAgIHZpcnR1YWwgYm9vbCBtYXBUb0VudHJ5KElkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5
JiByZXN1bHQpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShN
YXBwZWRBdHRyaWJ1dGVJbXBsICp0b2tlbik7CiAKQEAgLTE1MywxOCArMTU5LDUgQEAgcHJpdmF0
ZToKICAgICBpbnQgbV9taW5pbXVtRGVsYXk7CiB9OwogCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0K
LWNsYXNzIEhUTUxMYXllckVsZW1lbnRJbXBsIDogcHVibGljIEhUTUxEaXZFbGVtZW50SW1wbAot
ewotcHVibGljOgotICAgIEhUTUxMYXllckVsZW1lbnRJbXBsKCBEb2N1bWVudFB0ciAqZG9jICk7
Ci0gICAgfkhUTUxMYXllckVsZW1lbnRJbXBsKCk7Ci0KLSAgICB2aXJ0dWFsIElkIGlkKCkgY29u
c3Q7Ci0KLSAgICBib29sIGZpeGVkOwotfTsKLQogfTsgLy9uYW1lc3BhY2UKICNlbmRpZgpJbmRl
eDoga2h0bWwvaHRtbC9odG1sX2NhbnZhc2ltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbF9jYW52YXNpbXBsLmNwcCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS4zCmRpZmYgLXUgLXAgLXIxLjMga2h0bWwvaHRtbC9odG1sX2NhbnZhc2lt
cGwuY3BwCi0tLSBraHRtbC9odG1sL2h0bWxfY2FudmFzaW1wbC5jcHAJMTEgTWF5IDIwMDUgMDU6
NDk6MzQgLTAwMDAJMS4zCisrKyBraHRtbC9odG1sL2h0bWxfY2FudmFzaW1wbC5jcHAJNSBKdWwg
MjAwNSAyMzoyMDozMiAtMDAwMApAQCAtNTUsNyArNTUsNyBAQCB1c2luZyBuYW1lc3BhY2Uga2h0
bWw7CiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxDYW52YXNFbGVtZW50SW1wbDo6SFRNTENh
bnZhc0VsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0gICAgOiBIVE1MSW1hZ2VFbGVtZW50
SW1wbChkb2MpCisgICAgOiBIVE1MSW1hZ2VFbGVtZW50SW1wbChIVE1MTmFtZXM6OmNhbnZhcygp
LCBkb2MpCiB7CiB9CiAKQEAgLTYzLDExICs2Myw2IEBAIEhUTUxDYW52YXNFbGVtZW50SW1wbDo6
fkhUTUxDYW52YXNFbGVtZW4KIHsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxDYW52YXNFbGVtZW50
SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9DQU5WQVM7Ci19Ci0KIGJvb2wgSFRN
TENhbnZhc0VsZW1lbnRJbXBsOjptYXBUb0VudHJ5KE5vZGVJbXBsOjpJZCBhdHRyLCBNYXBwZWRB
dHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdAogewogICAgIHJldHVybiBIVE1MSW1hZ2VFbGVt
ZW50SW1wbDo6bWFwVG9FbnRyeShhdHRyLCByZXN1bHQpOwpJbmRleDoga2h0bWwvaHRtbC9odG1s
X2NhbnZhc2ltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRt
bC9odG1sL2h0bWxfY2FudmFzaW1wbC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIKZGlmZiAt
dSAtcCAtcjEuMiBraHRtbC9odG1sL2h0bWxfY2FudmFzaW1wbC5oCi0tLSBraHRtbC9odG1sL2h0
bWxfY2FudmFzaW1wbC5oCTExIE1heSAyMDA1IDA1OjQ5OjM0IC0wMDAwCTEuMgorKysga2h0bWwv
aHRtbC9odG1sX2NhbnZhc2ltcGwuaAk1IEp1bCAyMDA1IDIzOjIwOjMzIC0wMDAwCkBAIC00Mywx
MSArNDMsOCBAQCBjbGFzcyBIVE1MQ2FudmFzRWxlbWVudEltcGwKIHsKIHB1YmxpYzoKICAgICBI
VE1MQ2FudmFzRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYyk7Ci0KICAgICB+SFRNTENhbnZh
c0VsZW1lbnRJbXBsKCk7CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7Ci0KICAgICB2aXJ0
dWFsIGJvb2wgbWFwVG9FbnRyeShOb2RlSW1wbDo6SWQgYXR0ciwgTWFwcGVkQXR0cmlidXRlRW50
cnkmIHJlc3VsdCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRl
KE1hcHBlZEF0dHJpYnV0ZUltcGwgKik7CiAKSW5kZXg6IGtodG1sL2h0bWwvaHRtbF9kb2N1bWVu
dGltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0
bWwvaHRtbF9kb2N1bWVudGltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjYwCmRpZmYg
LXUgLXAgLXIxLjYwIGtodG1sL2h0bWwvaHRtbF9kb2N1bWVudGltcGwuY3BwCi0tLSBraHRtbC9o
dG1sL2h0bWxfZG9jdW1lbnRpbXBsLmNwcAkxMSBNYXkgMjAwNSAwMDo1ODoyOCAtMDAwMAkxLjYw
CisrKyBraHRtbC9odG1sL2h0bWxfZG9jdW1lbnRpbXBsLmNwcAk1IEp1bCAyMDA1IDIzOjIwOjMz
IC0wMDAwCkBAIC02MCw2ICs2MCw3IEBACiAjaW5jbHVkZSAiaHRtbC9odG1sX21pc2NpbXBsLmgi
CiAjaW5jbHVkZSAiaHRtbC9odG1sX2ltYWdlaW1wbC5oIgogI2luY2x1ZGUgImh0bWwvaHRtbF9m
b3JtaW1wbC5oIgorI2luY2x1ZGUgImh0bWxmYWN0b3J5LmgiCiAKICNpbmNsdWRlICJraHRtbHZp
ZXcuaCIKICNpbmNsdWRlICJraHRtbF9wYXJ0LmgiCkBAIC0yNDYsMTIgKzI0NywxOCBAQCBUb2tl
bml6ZXIgKkhUTUxEb2N1bWVudEltcGw6OmNyZWF0ZVRva2VuCiBib29sIEhUTUxEb2N1bWVudElt
cGw6OmNoaWxkQWxsb3dlZCggTm9kZUltcGwgKm5ld0NoaWxkICkKIHsKICAgICAvLyAjIyMgc3Vw
cG9ydCBjb21tZW50cy4gZXRjIGFzIGEgY2hpbGQKLSAgICByZXR1cm4gKG5ld0NoaWxkLT5pZCgp
ID09IElEX0hUTUwgfHwgbmV3Q2hpbGQtPmlkKCkgPT0gSURfQ09NTUVOVCk7CisgICAgcmV0dXJu
IChuZXdDaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omh0bWwoKSkgfHwgbmV3Q2hpbGQtPmlz
Q29tbWVudE5vZGUoKSk7CiB9CiAKLUVsZW1lbnRJbXBsICpIVE1MRG9jdW1lbnRJbXBsOjpjcmVh
dGVFbGVtZW50KCBjb25zdCBET01TdHJpbmcgJm5hbWUsIGludCAmZXhjZXB0aW9uY29kZSApCitF
bGVtZW50SW1wbCAqSFRNTERvY3VtZW50SW1wbDo6Y3JlYXRlRWxlbWVudChjb25zdCBET01TdHJp
bmcgJm5hbWUsIGludCAmZXhjZXB0aW9uY29kZSkKIHsKLSAgICByZXR1cm4gY3JlYXRlSFRNTEVs
ZW1lbnQobmFtZSwgZXhjZXB0aW9uY29kZSk7CisgICAgaWYgKCFpc1ZhbGlkTmFtZShuYW1lKSkg
eworICAgICAgICBleGNlcHRpb25jb2RlID0gRE9NRXhjZXB0aW9uOjpJTlZBTElEX0NIQVJBQ1RF
Ul9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIERPTVN0cmluZyBsb3dlck5h
bWUobmFtZS5sb3dlcigpKTsKKyAgICByZXR1cm4gSFRNTEVsZW1lbnRGYWN0b3J5OjpjcmVhdGVI
VE1MRWxlbWVudChBdG9taWNTdHJpbmcobG93ZXJOYW1lKSwgdGhpcywgMCwgZmFsc2UpOwogfQog
CiB2b2lkIEhUTUxEb2N1bWVudEltcGw6OnNsb3RIaXN0b3J5Q2hhbmdlZCgpCkluZGV4OiBraHRt
bC9odG1sL2h0bWxfZG9jdW1lbnRpbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sX2RvY3VtZW50aW1wbC5oLHYKcmV0cmlldmluZyByZXZp
c2lvbiAxLjI5CmRpZmYgLXUgLXAgLXIxLjI5IGtodG1sL2h0bWwvaHRtbF9kb2N1bWVudGltcGwu
aAotLS0ga2h0bWwvaHRtbC9odG1sX2RvY3VtZW50aW1wbC5oCTExIE1heSAyMDA1IDAwOjU4OjI4
IC0wMDAwCTEuMjkKKysrIGtodG1sL2h0bWwvaHRtbF9kb2N1bWVudGltcGwuaAk1IEp1bCAyMDA1
IDIzOjIwOjMzIC0wMDAwCkBAIC0zNCw3ICszNCw3IEBAIGNsYXNzIFFTdHJpbmc7CiAKIG5hbWVz
cGFjZSBET00gewogCi0gICAgY2xhc3MgSFRNTEVsZW1lbnRJbXBsOworY2xhc3MgSFRNTEVsZW1l
bnRJbXBsOwogCiBjbGFzcyBIVE1MRG9jdW1lbnRJbXBsIDogcHVibGljIERPTTo6RG9jdW1lbnRJ
bXBsLCBwdWJsaWMga2h0bWw6OkNhY2hlZE9iamVjdENsaWVudAogewpJbmRleDoga2h0bWwvaHRt
bC9odG1sX2VsZW1lbnRpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2Vi
Q29yZS9raHRtbC9odG1sL2h0bWxfZWxlbWVudGltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjg3CmRpZmYgLXUgLXAgLXIxLjg3IGtodG1sL2h0bWwvaHRtbF9lbGVtZW50aW1wbC5jcHAK
LS0tIGtodG1sL2h0bWwvaHRtbF9lbGVtZW50aW1wbC5jcHAJMTMgTWF5IDIwMDUgMTY6NDg6NTEg
LTAwMDAJMS44NworKysga2h0bWwvaHRtbC9odG1sX2VsZW1lbnRpbXBsLmNwcAk1IEp1bCAyMDA1
IDIzOjIwOjM0IC0wMDAwCkBAIC0yOCwxMCArMjgsMTAgQEAKIC8vI2RlZmluZSBFVkVOVF9ERUJV
RwogLy8jZGVmaW5lIFVOU1VQUE9SVEVEX0FUVFIKIAotI2luY2x1ZGUgImh0bWwvZHRkLmgiCiAj
aW5jbHVkZSAiaHRtbC9odG1sX2VsZW1lbnRpbXBsLmgiCiAjaW5jbHVkZSAiaHRtbC9odG1sX2Rv
Y3VtZW50aW1wbC5oIgogI2luY2x1ZGUgImh0bWwvaHRtbHRva2VuaXplci5oIgorI2luY2x1ZGUg
Imh0bWxmYWN0b3J5LmgiCiAKICNpbmNsdWRlICJtaXNjL2h0bWxoYXNoZXMuaCIKICNpbmNsdWRl
ICJlZGl0aW5nL3Zpc2libGVfdGV4dC5oIgpAQCAtNTgsOCArNTgsOCBAQCB1c2luZyBuYW1lc3Bh
Y2Uga2h0bWw7CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1IVE1MRWxlbWVudEltcGw6OkhUTUxFbGVtZW50
SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAgIDogU3R5bGVkRWxlbWVudEltcGwoZG9jKQorSFRN
TEVsZW1lbnRJbXBsOjpIVE1MRWxlbWVudEltcGwoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFt
ZSwgRG9jdW1lbnRQdHIgKmRvYykKKyAgICA6IFN0eWxlZEVsZW1lbnRJbXBsKHRhZ05hbWUsIGRv
YykKIHsKIH0KIApAQCAtNjcsNTEgKzY3LDQwIEBAIEhUTUxFbGVtZW50SW1wbDo6fkhUTUxFbGVt
ZW50SW1wbCgpCiB7CiB9CiAKLWJvb2wgSFRNTEVsZW1lbnRJbXBsOjppc0lubGluZSgpIGNvbnN0
CitET01TdHJpbmcgSFRNTEVsZW1lbnRJbXBsOjpub2RlTmFtZSgpIGNvbnN0CiB7Ci0gICAgaWYg
KHJlbmRlcmVyKCkpCi0gICAgICAgIHJldHVybiBFbGVtZW50SW1wbDo6aXNJbmxpbmUoKTsKLSAg
ICAKLSAgICBzd2l0Y2goaWQoKSkgewotICAgICAgICBjYXNlIElEX0E6Ci0gICAgICAgIGNhc2Ug
SURfRk9OVDoKLSAgICAgICAgY2FzZSBJRF9UVDoKLSAgICAgICAgY2FzZSBJRF9VOgotICAgICAg
ICBjYXNlIElEX0I6Ci0gICAgICAgIGNhc2UgSURfSToKLSAgICAgICAgY2FzZSBJRF9TOgotICAg
ICAgICBjYXNlIElEX1NUUklLRToKLSAgICAgICAgY2FzZSBJRF9CSUc6Ci0gICAgICAgIGNhc2Ug
SURfU01BTEw6Ci0gICAgCi0gICAgICAgICAgICAvLyAlcGhyYXNlCi0gICAgICAgIGNhc2UgSURf
RU06Ci0gICAgICAgIGNhc2UgSURfU1RST05HOgotICAgICAgICBjYXNlIElEX0RGTjoKLSAgICAg
ICAgY2FzZSBJRF9DT0RFOgotICAgICAgICBjYXNlIElEX1NBTVA6Ci0gICAgICAgIGNhc2UgSURf
S0JEOgotICAgICAgICBjYXNlIElEX1ZBUjoKLSAgICAgICAgY2FzZSBJRF9DSVRFOgotICAgICAg
ICBjYXNlIElEX0FCQlI6Ci0gICAgICAgIGNhc2UgSURfQUNST05ZTToKKyAgICAvLyBGSVhNRTog
V291bGQgYmUgbmljZSB0byBoYXZlIGFuIGF0b21pY3N0cmluZyBsb29rdXAgYmFzZWQgb2ZmIHVw
cGVyY2FzZSBjaGFycyB0aGF0IGRvZXMgbm90IGhhdmUgdG8gY29weQorICAgIC8vIHRoZSBzdHJp
bmcgb24gYSBoaXQgaW4gdGhlIGhhc2guCisgICAgaWYgKGdldERvY3VtZW50KCktPmlzSFRNTERv
Y3VtZW50KCkpCisgICAgICAgIHJldHVybiBtX3RhZ05hbWUubG9jYWxOYW1lKCkuaW1wbGVtZW50
YXRpb24oKS0+dXBwZXIoKTsKKyAgICByZXR1cm4gRWxlbWVudEltcGw6Om5vZGVOYW1lKCk7Cit9
CiAgICAgCi0gICAgICAgICAgICAvLyAlc3BlY2lhbAotICAgICAgICBjYXNlIElEX1NVQjoKLSAg
ICAgICAgY2FzZSBJRF9TVVA6Ci0gICAgICAgIGNhc2UgSURfU1BBTjoKLSAgICAgICAgY2FzZSBJ
RF9OT0JSOgotICAgICAgICBjYXNlIElEX1dCUjoKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gRWxlbWVu
dEltcGw6OmlzSW5saW5lKCk7Ci0gICAgfQorSFRNTFRhZ1N0YXR1cyBIVE1MRWxlbWVudEltcGw6
OmVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QKK3sKKyAgICBpZiAoaGFzTG9jYWxOYW1lKEhUTUxO
YW1lczo6ZHQoKSkgfHwgaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6ZGQoKSkpCisgICAgICAgIHJl
dHVybiBUYWdTdGF0dXNPcHRpb25hbDsKKworICAgIC8vIFNhbWUgdmFsdWVzIGFzIDxzcGFuPi4g
IFRoaXMgd2F5IGN1c3RvbSB0YWcgbmFtZSBlbGVtZW50cyB3aWxsIGJlaGF2ZSBsaWtlIGlubGlu
ZSBzcGFucy4KKyAgICByZXR1cm4gVGFnU3RhdHVzUmVxdWlyZWQ7Cit9CisKK2ludCBIVE1MRWxl
bWVudEltcGw6OnRhZ1ByaW9yaXR5KCkgY29uc3QKK3sKKyAgICBpZiAoaGFzTG9jYWxOYW1lKEhU
TUxOYW1lczo6YWRkcmVzcygpKSB8fCBoYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpkZCgpKSB8fCBo
YXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpkdCgpKSB8fCBoYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpu
b3NjcmlwdCgpKSkKKyAgICAgICAgcmV0dXJuIDM7CisgICAgaWYgKGhhc0xvY2FsTmFtZShIVE1M
TmFtZXM6OmNlbnRlcigpKSB8fCBoYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpub2JyKCkpKQorICAg
ICAgICByZXR1cm4gNTsKKyAgICBpZiAoaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6bm9lbWJlZCgp
KSB8fCBoYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpub2ZyYW1lcygpKSkKKyAgICAgICAgcmV0dXJu
IDEwOworCisgICAgLy8gU2FtZSB2YWx1ZXMgYXMgPHNwYW4+LiAgVGhpcyB3YXkgY3VzdG9tIHRh
ZyBuYW1lIGVsZW1lbnRzIHdpbGwgYmVoYXZlIGxpa2UgaW5saW5lIHNwYW5zLgorICAgIHJldHVy
biAxOwogfQogCiBOb2RlSW1wbCAqSFRNTEVsZW1lbnRJbXBsOjpjbG9uZU5vZGUoYm9vbCBkZWVw
KQogewotICAgIEhUTUxFbGVtZW50SW1wbCAqY2xvbmUgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVu
dEltcGwgKj4oZ2V0RG9jdW1lbnQoKS0+Y3JlYXRlSFRNTEVsZW1lbnQobG9jYWxOYW1lUGFydChp
ZCgpKSkpOworICAgIEhUTUxFbGVtZW50SW1wbCAqY2xvbmUgPSBIVE1MRWxlbWVudEZhY3Rvcnk6
OmNyZWF0ZUhUTUxFbGVtZW50KGxvY2FsTmFtZSgpLCBnZXREb2N1bWVudCgpLCAwLCBmYWxzZSk7
CiAgICAgaWYgKCFjbG9uZSkKICAgICAgICAgcmV0dXJuIDA7CiAKQEAgLTMyNSwyNiArMzE0LDE3
IEBAIERPTVN0cmluZyBIVE1MRWxlbWVudEltcGw6Om91dGVyVGV4dCgpIGMKIERvY3VtZW50RnJh
Z21lbnRJbXBsICpIVE1MRWxlbWVudEltcGw6OmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudChjb25z
dCBET01TdHJpbmcgJmh0bWwpCiB7CiAgICAgLy8gdGhlIGZvbGxvd2luZyBpcyBpbiBhY2NvcmRh
bmNlIHdpdGggdGhlIGRlZmluaXRpb24gYXMgdXNlZCBieSBJRQotICAgIGlmKCBlbmRUYWdSZXF1
aXJlbWVudChpZCgpKSA9PSBGT1JCSURERU4gKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAv
LyBJRSBkaXNhbGxvd3MgaW5uZXJIVE1MIG9uIGlubGluZSBlbGVtZW50cy4gSSBkb24ndCBzZWUg
d2h5IHdlIHNob3VsZCBoYXZlIHRoaXMgcmVzdHJpY3Rpb24sIGFzIG91cgotICAgIC8vIGRodG1s
IGVuZ2luZSBjYW4gY29wZSB3aXRoIGl0LiBMYXJzCi0gICAgLy9pZiAoIGlzSW5saW5lKCkgKSBy
ZXR1cm4gZmFsc2U7Ci0gICAgc3dpdGNoKCBpZCgpICkgewotICAgICAgICBjYXNlIElEX0NPTDoK
LSAgICAgICAgY2FzZSBJRF9DT0xHUk9VUDoKLSAgICAgICAgY2FzZSBJRF9GUkFNRVNFVDoKLSAg
ICAgICAgY2FzZSBJRF9IRUFEOgotICAgICAgICBjYXNlIElEX1NUWUxFOgotICAgICAgICBjYXNl
IElEX1RJVExFOgotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgaWYgKCAhZ2V0RG9jdW1lbnQoKS0+aXNIVE1M
RG9jdW1lbnQoKSApCi0gICAgICAgIHJldHVybiBOVUxMOworICAgIGlmIChlbmRUYWdSZXF1aXJl
bWVudCgpID09IFRhZ1N0YXR1c0ZvcmJpZGRlbikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBp
ZiAoaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6Y29sKCkpIHx8IGhhc0xvY2FsTmFtZShIVE1MTmFt
ZXM6OmNvbGdyb3VwKCkpIHx8IGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmZyYW1lc2V0KCkpIHx8
CisgICAgICAgIGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmhlYWQoKSkgfHwgaGFzTG9jYWxOYW1l
KEhUTUxOYW1lczo6c3R5bGUoKSkgfHwgaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dGl0bGUoKSkp
CisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKCFnZXREb2N1bWVudCgpLT5pc0hUTUxEb2N1
bWVudCgpKQorICAgICAgICByZXR1cm4gMDsKIAotICAgIERvY3VtZW50RnJhZ21lbnRJbXBsICpm
cmFnbWVudCA9IG5ldyBEb2N1bWVudEZyYWdtZW50SW1wbCggZG9jUHRyKCkgKTsKKyAgICBEb2N1
bWVudEZyYWdtZW50SW1wbCAqZnJhZ21lbnQgPSBuZXcgRG9jdW1lbnRGcmFnbWVudEltcGwoZG9j
UHRyKCkpOwogICAgIGZyYWdtZW50LT5yZWYoKTsKICAgICB7CiAgICAgICAgIEhUTUxUb2tlbml6
ZXIgdG9rKGRvY1B0cigpLCBmcmFnbWVudCk7CkBAIC0zNTgsMTQgKzMzOCwxNCBAQCBEb2N1bWVu
dEZyYWdtZW50SW1wbCAqSFRNTEVsZW1lbnRJbXBsOjpjCiAgICAgaW50IGlnbm9yZWRFeGNlcHRp
b25Db2RlOwogCiAgICAgLy8gd2UgbmVlZCB0byBwb3AgPGh0bWw+IGFuZCA8Ym9keT4gZWxlbWVu
dHMgYW5kIHJlbW92ZSA8aGVhZD4gdG8KLSAgICAvLyBhY2NvbWFkYXRlIGZvbGtzIHBhc3Npbmcg
Y29tcGxldGUgSFRNTCBkb2N1bWVudHMgdG8gbWFrZSB0aGUKKyAgICAvLyBhY2NvbW1vZGF0ZSBm
b2xrcyBwYXNzaW5nIGNvbXBsZXRlIEhUTUwgZG9jdW1lbnRzIHRvIG1ha2UgdGhlCiAgICAgLy8g
Y2hpbGQgb2YgYW4gZWxlbWVudC4KIAogICAgIE5vZGVJbXBsICpuZXh0Tm9kZTsKICAgICBmb3Ig
KE5vZGVJbXBsICpub2RlID0gZnJhZ21lbnQtPmZpcnN0Q2hpbGQoKTsgbm9kZSAhPSBOVUxMOyBu
b2RlID0gbmV4dE5vZGUpIHsKICAgICAgICAgbmV4dE5vZGUgPSBub2RlLT5uZXh0U2libGluZygp
OwogCW5vZGUtPnJlZigpOwotICAgICAgICBpZiAobm9kZS0+aWQoKSA9PSBJRF9IVE1MIHx8IG5v
ZGUtPmlkKCkgPT0gSURfQk9EWSkgeworICAgICAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6Omh0bWwoKSkgfHwgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJvZHkoKSkpIHsK
IAkgICAgTm9kZUltcGwgKmZpcnN0Q2hpbGQgPSBub2RlLT5maXJzdENoaWxkKCk7CiAgICAgICAg
ICAgICBpZiAoZmlyc3RDaGlsZCAhPSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgbmV4dE5vZGUg
PSBmaXJzdENoaWxkOwpAQCAtMzc5LDkgKzM1OSw5IEBAIERvY3VtZW50RnJhZ21lbnRJbXBsICpI
VE1MRWxlbWVudEltcGw6OmMKICAgICAgICAgICAgICAgICBjaGlsZC0+ZGVyZWYoKTsKIAkgICAg
fQogICAgICAgICAgICAgZnJhZ21lbnQtPnJlbW92ZUNoaWxkKG5vZGUsIGlnbm9yZWRFeGNlcHRp
b25Db2RlKTsKLQl9IGVsc2UgaWYgKG5vZGUtPmlkKCkgPT0gSURfSEVBRCkgeworCX0gZWxzZSBp
ZiAobm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmhlYWQoKSkpCiAJICAgIGZyYWdtZW50LT5y
ZW1vdmVDaGlsZChub2RlLCBpZ25vcmVkRXhjZXB0aW9uQ29kZSk7Ci0JfQorCiAgICAgICAgIC8v
IEltcG9ydGFudCB0byBkbyB0aGlzIGRlcmVmIGFmdGVyIHJlbW92ZUNoaWxkLCBiZWNhdXNlIGlm
IHRoZSBvbmx5IHRoaW5nCiAgICAgICAgIC8vIGtlZXBpbmcgYSBub2RlIGFyb3VuZCBpcyBhIHBh
cmVudCB0aGF0IGlzIG5vbi0wLCByZW1vdmVDaGlsZCB3aWxsIG5vdAogICAgICAgICAvLyBkZWxl
dGUgdGhlIG5vZGUuIFRoaXMgd29ya3MgZmluZSBpbiBKYXZhU2NyaXB0IGJlY2F1c2UgdGhlcmUn
cyBhbHdheXMKQEAgLTQwMCw3ICszODAsNyBAQCBEb2N1bWVudEZyYWdtZW50SW1wbCAqSFRNTEVs
ZW1lbnRJbXBsOjpjCiAKIHZvaWQgSFRNTEVsZW1lbnRJbXBsOjpzZXRJbm5lckhUTUwoY29uc3Qg
RE9NU3RyaW5nICZodG1sLCBpbnQgJmV4Y2VwdGlvbikKIHsKLSAgICBEb2N1bWVudEZyYWdtZW50
SW1wbCAqZnJhZ21lbnQgPSBjcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoIGh0bWwgKTsKKyAgICBE
b2N1bWVudEZyYWdtZW50SW1wbCAqZnJhZ21lbnQgPSBjcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQo
aHRtbCk7CiAgICAgaWYgKGZyYWdtZW50ID09IE5VTEwpIHsKIAlleGNlcHRpb24gPSBET01FeGNl
cHRpb246Ok5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUjsKICAgICAgICAgcmV0dXJuOwpAQCAt
NDE4LDcgKzM5OCw3IEBAIHZvaWQgSFRNTEVsZW1lbnRJbXBsOjpzZXRPdXRlckhUTUwoY29uc3QK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBIVE1MRWxlbWVudEltcGwgKnBhcmVudCA9IHN0
YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCAqPihwKTsKLSAgICBEb2N1bWVudEZyYWdtZW50SW1w
bCAqZnJhZ21lbnQgPSBwYXJlbnQtPmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCggaHRtbCApOwor
ICAgIERvY3VtZW50RnJhZ21lbnRJbXBsICpmcmFnbWVudCA9IHBhcmVudC0+Y3JlYXRlQ29udGV4
dHVhbEZyYWdtZW50KGh0bWwpOwogCiAgICAgaWYgKCFmcmFnbWVudCkgewogCWV4Y2VwdGlvbiA9
IERPTUV4Y2VwdGlvbjo6Tk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOwpAQCAtNDM0LDI5ICs0
MTQsMTcgQEAgdm9pZCBIVE1MRWxlbWVudEltcGw6OnNldE91dGVySFRNTChjb25zdAogdm9pZCBI
VE1MRWxlbWVudEltcGw6OnNldElubmVyVGV4dChjb25zdCBET01TdHJpbmcgJnRleHQsIGludCAm
ZXhjZXB0aW9uKQogewogICAgIC8vIGZvbGxvd2luZyB0aGUgSUUgc3BlY3MuCi0gICAgaWYgKGVu
ZFRhZ1JlcXVpcmVtZW50KGlkKCkpID09IEZPUkJJRERFTikgeworICAgIGlmIChlbmRUYWdSZXF1
aXJlbWVudCgpID09IFRhZ1N0YXR1c0ZvcmJpZGRlbikgewogCWV4Y2VwdGlvbiA9IERPTUV4Y2Vw
dGlvbjo6Tk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgLy8gSUUgZGlzYWxsb3dzIGlubmVyVGV4dCBvbiBpbmxpbmUgZWxlbWVudHMuIEkg
ZG9uJ3Qgc2VlIHdoeSB3ZSBzaG91bGQgaGF2ZSB0aGlzIHJlc3RyaWN0aW9uLCBhcyBvdXIKLSAg
ICAvLyBkaHRtbCBlbmdpbmUgY2FuIGNvcGUgd2l0aCBpdC4gTGFycwotICAgIC8vaWYgKCBpc0lu
bGluZSgpICkgcmV0dXJuIGZhbHNlOwotICAgIHN3aXRjaCggaWQoKSApIHsKLSAgICAgICAgY2Fz
ZSBJRF9DT0w6Ci0gICAgICAgIGNhc2UgSURfQ09MR1JPVVA6Ci0gICAgICAgIGNhc2UgSURfRlJB
TUVTRVQ6Ci0gICAgICAgIGNhc2UgSURfSEVBRDoKLSAgICAgICAgY2FzZSBJRF9IVE1MOgotICAg
ICAgICBjYXNlIElEX1RBQkxFOgotICAgICAgICBjYXNlIElEX1RCT0RZOgotICAgICAgICBjYXNl
IElEX1RGT09UOgotICAgICAgICBjYXNlIElEX1RIRUFEOgotICAgICAgICBjYXNlIElEX1RSOgot
ICAgICAgICAgICAgZXhjZXB0aW9uID0gRE9NRXhjZXB0aW9uOjpOT19NT0RJRklDQVRJT05fQUxM
T1dFRF9FUlI7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICBicmVhazsKKyAgICBpZiAoaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6Y29sKCkpIHx8IGhh
c0xvY2FsTmFtZShIVE1MTmFtZXM6OmNvbGdyb3VwKCkpIHx8IGhhc0xvY2FsTmFtZShIVE1MTmFt
ZXM6OmZyYW1lc2V0KCkpIHx8CisgICAgICAgIGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmhlYWQo
KSkgfHwgaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6aHRtbCgpKSB8fCBoYXNMb2NhbE5hbWUoSFRN
TE5hbWVzOjp0YWJsZSgpKSB8fCAKKyAgICAgICAgaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dGJv
ZHkoKSkgfHwgaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dGZvb3QoKSkgfHwgaGFzTG9jYWxOYW1l
KEhUTUxOYW1lczo6dGhlYWQoKSkgfHwKKyAgICAgICAgaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6
dHIoKSkpIHsKKyAgICAgICAgZXhjZXB0aW9uID0gRE9NRXhjZXB0aW9uOjpOT19NT0RJRklDQVRJ
T05fQUxMT1dFRF9FUlI7CisgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICByZW1vdmVDaGls
ZHJlbigpOwpAQCAtNDY2LDI1ICs0MzQsMTcgQEAgdm9pZCBIVE1MRWxlbWVudEltcGw6OnNldElu
bmVyVGV4dChjb25zdAogdm9pZCBIVE1MRWxlbWVudEltcGw6OnNldE91dGVyVGV4dChjb25zdCBE
T01TdHJpbmcgJnRleHQsIGludCAmZXhjZXB0aW9uKQogewogICAgIC8vIGZvbGxvd2luZyB0aGUg
SUUgc3BlY3MuCi0gICAgaWYoIGVuZFRhZ1JlcXVpcmVtZW50KGlkKCkpID09IEZPUkJJRERFTiAp
IHsKKyAgICBpZiAoZW5kVGFnUmVxdWlyZW1lbnQoKSA9PSBUYWdTdGF0dXNGb3JiaWRkZW4pIHsK
IAlleGNlcHRpb24gPSBET01FeGNlcHRpb246Ok5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUjsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBzd2l0Y2goIGlkKCkgKSB7Ci0gICAgICAgIGNh
c2UgSURfQ09MOgotICAgICAgICBjYXNlIElEX0NPTEdST1VQOgotICAgICAgICBjYXNlIElEX0ZS
QU1FU0VUOgotICAgICAgICBjYXNlIElEX0hFQUQ6Ci0gICAgICAgIGNhc2UgSURfSFRNTDoKLSAg
ICAgICAgY2FzZSBJRF9UQUJMRToKLSAgICAgICAgY2FzZSBJRF9UQk9EWToKLSAgICAgICAgY2Fz
ZSBJRF9URk9PVDoKLSAgICAgICAgY2FzZSBJRF9USEVBRDoKLSAgICAgICAgY2FzZSBJRF9UUjoK
LSAgICAgICAgICAgIGV4Y2VwdGlvbiA9IERPTUV4Y2VwdGlvbjo6Tk9fTU9ESUZJQ0FUSU9OX0FM
TE9XRURfRVJSOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICBpZiAoaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6Y29sKCkpIHx8
IGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmNvbGdyb3VwKCkpIHx8IGhhc0xvY2FsTmFtZShIVE1M
TmFtZXM6OmZyYW1lc2V0KCkpIHx8CisgICAgICAgIGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Omhl
YWQoKSkgfHwgaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6aHRtbCgpKSB8fCBoYXNMb2NhbE5hbWUo
SFRNTE5hbWVzOjp0YWJsZSgpKSB8fCAKKyAgICAgICAgaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6
dGJvZHkoKSkgfHwgaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dGZvb3QoKSkgfHwgaGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6dGhlYWQoKSkgfHwKKyAgICAgICAgaGFzTG9jYWxOYW1lKEhUTUxOYW1l
czo6dHIoKSkpIHsKKyAgICAgICAgZXhjZXB0aW9uID0gRE9NRXhjZXB0aW9uOjpOT19NT0RJRklD
QVRJT05fQUxMT1dFRF9FUlI7CisgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBOb2RlSW1w
bCAqcGFyZW50ID0gcGFyZW50Tm9kZSgpOwpAQCAtNTI1LDE3ICs0ODUsNiBAQCB2b2lkIEhUTUxF
bGVtZW50SW1wbDo6c2V0T3V0ZXJUZXh0KGNvbnN0CiAgICAgfQogfQogCi0KLURPTVN0cmluZyBI
VE1MRWxlbWVudEltcGw6Om5hbWVzcGFjZVVSSSgpIGNvbnN0Ci17Ci0gICAgLy8gRm9yIEhUTUwg
ZG9jdW1lbnRzLCB3ZSB0cmVhdCBIVE1MIGVsZW1lbnRzIGFzIGhhdmluZyBubyBuYW1lc3BhY2Uu
IEJ1dCBmb3IgWE1MIGRvY3VtZW50cwotICAgIC8vIHRoZSBlbGVtZW50cyBoYXZlIHRoZSBuYW1l
c3BhY2UgZGVmaW5lZCBpbiB0aGUgWEhUTUwgc3BlYwotICAgIGlmIChnZXREb2N1bWVudCgpLT5p
c0hUTUxEb2N1bWVudCgpKQotICAgICAgICByZXR1cm4gRE9NU3RyaW5nKCk7Ci0gICAgZWxzZQot
ICAgICAgICByZXR1cm4gWEhUTUxfTkFNRVNQQUNFOwotfQotCiB2b2lkIEhUTUxFbGVtZW50SW1w
bDo6YWRkSFRNTEFsaWdubWVudChNYXBwZWRBdHRyaWJ1dGVJbXBsKiBhdHRyKQogewogICAgIC8v
cURlYnVnKCJhbGlnbm1lbnQgaXMgJXMiLCBhbGlnbm1lbnQuc3RyaW5nKCkubGF0aW4xKCkgKTsK
QEAgLTY4Miw5ICs2MzEsOSBAQCBET01TdHJpbmcgSFRNTEVsZW1lbnRJbXBsOjp0b1N0cmluZygp
IGNvCiAJRE9NU3RyaW5nIHJlc3VsdCA9IG9wZW5UYWdTdGFydFRvU3RyaW5nKCk7CiAJcmVzdWx0
ICs9ICI+IjsKIAotCWlmIChlbmRUYWdSZXF1aXJlbWVudChpZCgpKSA9PSBSRVFVSVJFRCkgewor
CWlmIChlbmRUYWdSZXF1aXJlbWVudCgpID09IFRhZ1N0YXR1c1JlcXVpcmVkKSB7CiAJICAgIHJl
c3VsdCArPSAiPC8iOwotCSAgICByZXN1bHQgKz0gdGFnTmFtZSgpOworCSAgICByZXN1bHQgKz0g
bm9kZU5hbWUoKTsKIAkgICAgcmVzdWx0ICs9ICI+IjsKIAl9CiAKQEAgLTY5NCw3ICs2NDMsNyBA
QCBET01TdHJpbmcgSFRNTEVsZW1lbnRJbXBsOjp0b1N0cmluZygpIGNvCiAgICAgcmV0dXJuIEVs
ZW1lbnRJbXBsOjp0b1N0cmluZygpOwogfQogCi1ET01TdHJpbmcgSFRNTEVsZW1lbnRJbXBsOjpp
ZERPTSgpIGNvbnN0CitET01TdHJpbmcgSFRNTEVsZW1lbnRJbXBsOjppZCgpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIGdldEF0dHJpYnV0ZShBVFRSX0lEKTsKIH0KQEAgLTc0OSwxNSArNjk4LDE3NiBA
QCBTaGFyZWRQdHI8SFRNTENvbGxlY3Rpb25JbXBsPiBIVE1MRWxlbWVuCiAgICAgcmV0dXJuIFNo
YXJlZFB0cjxIVE1MQ29sbGVjdGlvbkltcGw+KG5ldyBIVE1MQ29sbGVjdGlvbkltcGwodGhpcywg
SFRNTENvbGxlY3Rpb25JbXBsOjpOT0RFX0NISUxEUkVOKSk7CiB9CiAKLS8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKy8vIERPTSBTZWN0aW9uIDEuMS4xCitib29sIEhUTUxFbGVtZW50SW1wbDo6Y2hpbGRB
bGxvd2VkKE5vZGVJbXBsICpuZXdDaGlsZCkKK3sKKyAgICBpZiAoIUVsZW1lbnRJbXBsOjpjaGls
ZEFsbG93ZWQobmV3Q2hpbGQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLUhUTUxHZW5lcmlj
RWxlbWVudEltcGw6OkhUTUxHZW5lcmljRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgdXNo
b3J0IGkpCi0gICAgOiBIVE1MRWxlbWVudEltcGwoZG9jKQorICAgIC8vIEZvciBYTUwgZG9jdW1l
bnRzLCB3ZSBhcmUgbm9uLXZhbGlkYXRpbmcgYW5kIGRvIG5vdCBjaGVjayBhZ2FpbnN0IGEgRFRE
LCBldmVuIGZvciBIVE1MIGVsZW1lbnRzLgorCWlmICghZ2V0RG9jdW1lbnQoKS0+aXNIVE1MRG9j
dW1lbnQoKSkKKwkJcmV0dXJuIHRydWU7CisJCisJLy8gRnV0dXJlLXByb29mIGZvciBYTUwgY29u
dGVudCBpbnNpZGUgSFRNTCBkb2N1bWVudHMgKHdlIG1heSBhbGxvdyB0aGlzIHNvbWUgZGF5KS4K
KwlpZiAobmV3Q2hpbGQtPmlzRWxlbWVudE5vZGUoKSAmJiAhbmV3Q2hpbGQtPmlzSFRNTEVsZW1l
bnQoKSkKKwkJcmV0dXJuIHRydWU7CisKKwkvLyBFbGVtZW50cyB3aXRoIGZvcmJpZGRlbiB0YWcg
c3RhdHVzIGNhbiBuZXZlciBoYXZlIGNoaWxkcmVuCisJaWYgKGVuZFRhZ1JlcXVpcmVtZW50KCkg
PT0gVGFnU3RhdHVzRm9yYmlkZGVuKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvLyBDb21tZW50IG5v
ZGVzIGFyZSBhbHdheXMgYWxsb3dlZC4KKwlpZiAobmV3Q2hpbGQtPmlzQ29tbWVudE5vZGUoKSkK
KwkJcmV0dXJuIHRydWU7CisKKyAgICAvLyBOb3cgY2FsbCBjaGVja0RURC4KKwlyZXR1cm4gY2hl
Y2tEVEQobmV3Q2hpbGQpOworfQorCisvLyBEVEQgU3R1ZmYKKworLy8gVGhlIHRlcm1zIGlubGlu
ZSBhbmQgYmxvY2sgYXJlIHVzZWQgaGVyZSBsb29zZWx5LiAgRG9uJ3QgbWFrZSB0aGUgbWlzdGFr
ZSBvZiBhc3N1bWluZyBhbGwgaW5saW5lcyBvciBhbGwgYmxvY2tzCisvLyBuZWVkIHRvIGJlIGlu
IHRoZXNlIHR3byBsaXN0cy4KK1FQdHJEaWN0PERPTVN0cmluZ0ltcGw+KiBIVE1MRWxlbWVudElt
cGw6OmlubGluZVRhZ0xpc3QoKSB7CisgICAgc3RhdGljIFFQdHJEaWN0PERPTVN0cmluZ0ltcGw+
IHRhZ0xpc3Q7CisgICAgaWYgKHRhZ0xpc3QuaXNFbXB0eSgpKSB7CisgICAgICAgIHRhZ0xpc3Qu
aW5zZXJ0KEhUTUxOYW1lczo6dHQoKS5sb2NhbE5hbWVQdHIoKSwgSFRNTE5hbWVzOjp0dCgpLmxv
Y2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjppKCkubG9j
YWxOYW1lUHRyKCksIEhUTUxOYW1lczo6aSgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFn
TGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpiKCkubG9jYWxOYW1lUHRyKCksIEhUTUxOYW1lczo6Yigp
LmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjp1KCku
bG9jYWxOYW1lUHRyKCksIEhUTUxOYW1lczo6dSgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAg
dGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpzKCkubG9jYWxOYW1lUHRyKCksIEhUTUxOYW1lczo6
cygpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpz
dHJpa2UoKS5sb2NhbE5hbWVQdHIoKSwgSFRNTE5hbWVzOjpzdHJpa2UoKS5sb2NhbE5hbWVQdHIo
KSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6YmlnKCkubG9jYWxOYW1lUHRy
KCksIEhUTUxOYW1lczo6YmlnKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmlu
c2VydChIVE1MTmFtZXM6OnNtYWxsKCkubG9jYWxOYW1lUHRyKCksIEhUTUxOYW1lczo6c21hbGwo
KS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6ZW0o
KS5sb2NhbE5hbWVQdHIoKSwgSFRNTE5hbWVzOjplbSgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAg
ICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpzdHJvbmcoKS5sb2NhbE5hbWVQdHIoKSwgSFRN
TE5hbWVzOjpzdHJvbmcoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0
KEhUTUxOYW1lczo6ZGZuKCkubG9jYWxOYW1lUHRyKCksIEhUTUxOYW1lczo6ZGZuKCkubG9jYWxO
YW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmNvZGUoKS5sb2Nh
bE5hbWVQdHIoKSwgSFRNTE5hbWVzOjpjb2RlKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0
YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnNhbXAoKS5sb2NhbE5hbWVQdHIoKSwgSFRNTE5hbWVz
OjpzYW1wKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFt
ZXM6OmtiZCgpLmxvY2FsTmFtZVB0cigpLCBIVE1MTmFtZXM6OmtiZCgpLmxvY2FsTmFtZVB0cigp
KTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjp2YXIoKS5sb2NhbE5hbWVQdHIo
KSwgSFRNTE5hbWVzOjp2YXIoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5z
ZXJ0KEhUTUxOYW1lczo6Y2l0ZSgpLmxvY2FsTmFtZVB0cigpLCBIVE1MTmFtZXM6OmNpdGUoKS5s
b2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6YWJicigp
LmxvY2FsTmFtZVB0cigpLCBIVE1MTmFtZXM6OmFiYnIoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAg
ICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6YWNyb255bSgpLmxvY2FsTmFtZVB0cigpLCBI
VE1MTmFtZXM6OmFjcm9ueW0oKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5z
ZXJ0KEhUTUxOYW1lczo6YSgpLmxvY2FsTmFtZVB0cigpLCBIVE1MTmFtZXM6OmEoKS5sb2NhbE5h
bWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6Y2FudmFzKCkubG9j
YWxOYW1lUHRyKCksIEhUTUxOYW1lczo6Y2FudmFzKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAg
ICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmltZygpLmxvY2FsTmFtZVB0cigpLCBIVE1MTmFt
ZXM6OmltZygpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5h
bWVzOjphcHBsZXQoKS5sb2NhbE5hbWVQdHIoKSwgSFRNTE5hbWVzOjphcHBsZXQoKS5sb2NhbE5h
bWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6b2JqZWN0KCkubG9j
YWxOYW1lUHRyKCksIEhUTUxOYW1lczo6b2JqZWN0KCkubG9jYWxOYW1lUHRyKCkpOworICAgICAg
ICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmVtYmVkKCkubG9jYWxOYW1lUHRyKCksIEhUTUxO
YW1lczo6ZW1iZWQoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhU
TUxOYW1lczo6Zm9udCgpLmxvY2FsTmFtZVB0cigpLCBIVE1MTmFtZXM6OmZvbnQoKS5sb2NhbE5h
bWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6YmFzZWZvbnQoKS5s
b2NhbE5hbWVQdHIoKSwgSFRNTE5hbWVzOjpiYXNlZm9udCgpLmxvY2FsTmFtZVB0cigpKTsKKyAg
ICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpicigpLmxvY2FsTmFtZVB0cigpLCBIVE1M
TmFtZXM6OmJyKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1M
TmFtZXM6OnNjcmlwdCgpLmxvY2FsTmFtZVB0cigpLCBIVE1MTmFtZXM6OnNjcmlwdCgpLmxvY2Fs
TmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjptYXAoKS5sb2Nh
bE5hbWVQdHIoKSwgSFRNTE5hbWVzOjptYXAoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRh
Z0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6cSgpLmxvY2FsTmFtZVB0cigpLCBIVE1MTmFtZXM6OnEo
KS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6c3Vi
KCkubG9jYWxOYW1lUHRyKCksIEhUTUxOYW1lczo6c3ViKCkubG9jYWxOYW1lUHRyKCkpOworICAg
ICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnN1cCgpLmxvY2FsTmFtZVB0cigpLCBIVE1M
TmFtZXM6OnN1cCgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRN
TE5hbWVzOjpzcGFuKCkubG9jYWxOYW1lUHRyKCksIEhUTUxOYW1lczo6c3BhbigpLmxvY2FsTmFt
ZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpiZG8oKS5sb2NhbE5h
bWVQdHIoKSwgSFRNTE5hbWVzOjpiZG8oKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xp
c3QuaW5zZXJ0KEhUTUxOYW1lczo6aWZyYW1lKCkubG9jYWxOYW1lUHRyKCksIEhUTUxOYW1lczo6
aWZyYW1lKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFt
ZXM6OmlucHV0KCkubG9jYWxOYW1lUHRyKCksIEhUTUxOYW1lczo6aW5wdXQoKS5sb2NhbE5hbWVQ
dHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6a2V5Z2VuKCkubG9jYWxO
YW1lUHRyKCksIEhUTUxOYW1lczo6a2V5Z2VuKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0
YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnNlbGVjdCgpLmxvY2FsTmFtZVB0cigpLCBIVE1MTmFt
ZXM6OnNlbGVjdCgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRN
TE5hbWVzOjp0ZXh0YXJlYSgpLmxvY2FsTmFtZVB0cigpLCBIVE1MTmFtZXM6OnRleHRhcmVhKCku
bG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmxhYmVs
KCkubG9jYWxOYW1lUHRyKCksIEhUTUxOYW1lczo6bGFiZWwoKS5sb2NhbE5hbWVQdHIoKSk7Cisg
ICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6YnV0dG9uKCkubG9jYWxOYW1lUHRyKCks
IEhUTUxOYW1lczo6YnV0dG9uKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmlu
c2VydChIVE1MTmFtZXM6OmlucygpLmxvY2FsTmFtZVB0cigpLCBIVE1MTmFtZXM6OmlucygpLmxv
Y2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpkZWwoKS5s
b2NhbE5hbWVQdHIoKSwgSFRNTE5hbWVzOjpkZWwoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAg
IHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6bm9icigpLmxvY2FsTmFtZVB0cigpLCBIVE1MTmFt
ZXM6Om5vYnIoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxO
YW1lczo6d2JyKCkubG9jYWxOYW1lUHRyKCksIEhUTUxOYW1lczo6d2JyKCkubG9jYWxOYW1lUHRy
KCkpOworICAgIH0KKyAgICByZXR1cm4gJnRhZ0xpc3Q7Cit9CisKK1FQdHJEaWN0PERPTVN0cmlu
Z0ltcGw+KiBIVE1MRWxlbWVudEltcGw6OmJsb2NrVGFnTGlzdCgpIHsKKyAgICBzdGF0aWMgUVB0
ckRpY3Q8RE9NU3RyaW5nSW1wbD4gdGFnTGlzdDsKKyAgICBpZiAodGFnTGlzdC5pc0VtcHR5KCkp
IHsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpwKCkubG9jYWxOYW1lUHRyKCks
IEhUTUxOYW1lczo6cCgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQo
SFRNTE5hbWVzOjpoMSgpLmxvY2FsTmFtZVB0cigpLCBIVE1MTmFtZXM6OmgxKCkubG9jYWxOYW1l
UHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmgyKCkubG9jYWxOYW1l
UHRyKCksIEhUTUxOYW1lczo6aDIoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3Qu
aW5zZXJ0KEhUTUxOYW1lczo6aDMoKS5sb2NhbE5hbWVQdHIoKSwgSFRNTE5hbWVzOjpoMygpLmxv
Y2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpoNCgpLmxv
Y2FsTmFtZVB0cigpLCBIVE1MTmFtZXM6Omg0KCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0
YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6Omg1KCkubG9jYWxOYW1lUHRyKCksIEhUTUxOYW1lczo6
aDUoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6
aDYoKS5sb2NhbE5hbWVQdHIoKSwgSFRNTE5hbWVzOjpoNigpLmxvY2FsTmFtZVB0cigpKTsKKyAg
ICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjp1bCgpLmxvY2FsTmFtZVB0cigpLCBIVE1M
TmFtZXM6OnVsKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1M
TmFtZXM6Om9sKCkubG9jYWxOYW1lUHRyKCksIEhUTUxOYW1lczo6b2woKS5sb2NhbE5hbWVQdHIo
KSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6ZGlyKCkubG9jYWxOYW1lUHRy
KCksIEhUTUxOYW1lczo6ZGlyKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmlu
c2VydChIVE1MTmFtZXM6Om1lbnUoKS5sb2NhbE5hbWVQdHIoKSwgSFRNTE5hbWVzOjptZW51KCku
bG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnByZSgp
LmxvY2FsTmFtZVB0cigpLCBIVE1MTmFtZXM6OnByZSgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAg
ICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpwbGFpbnRleHQoKS5sb2NhbE5hbWVQdHIoKSwg
SFRNTE5hbWVzOjpwbGFpbnRleHQoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3Qu
aW5zZXJ0KEhUTUxOYW1lczo6eG1wKCkubG9jYWxOYW1lUHRyKCksIEhUTUxOYW1lczo6eG1wKCku
bG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmRsKCku
bG9jYWxOYW1lUHRyKCksIEhUTUxOYW1lczo6ZGwoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAg
IHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6ZGl2KCkubG9jYWxOYW1lUHRyKCksIEhUTUxOYW1l
czo6ZGl2KCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFt
ZXM6OmxheWVyKCkubG9jYWxOYW1lUHRyKCksIEhUTUxOYW1lczo6bGF5ZXIoKS5sb2NhbE5hbWVQ
dHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6Y2VudGVyKCkubG9jYWxO
YW1lUHRyKCksIEhUTUxOYW1lczo6Y2VudGVyKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0
YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6Om5vc2NyaXB0KCkubG9jYWxOYW1lUHRyKCksIEhUTUxO
YW1lczo6bm9zY3JpcHQoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0
KEhUTUxOYW1lczo6bm9mcmFtZXMoKS5sb2NhbE5hbWVQdHIoKSwgSFRNTE5hbWVzOjpub2ZyYW1l
cygpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpi
bG9ja3F1b3RlKCkubG9jYWxOYW1lUHRyKCksIEhUTUxOYW1lczo6YmxvY2txdW90ZSgpLmxvY2Fs
TmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpmb3JtKCkubG9j
YWxOYW1lUHRyKCksIEhUTUxOYW1lczo6Zm9ybSgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAg
dGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjppc2luZGV4KCkubG9jYWxOYW1lUHRyKCksIEhUTUxO
YW1lczo6aXNpbmRleCgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQo
SFRNTE5hbWVzOjpocigpLmxvY2FsTmFtZVB0cigpLCBIVE1MTmFtZXM6OmhyKCkubG9jYWxOYW1l
UHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnRhYmxlKCkubG9jYWxO
YW1lUHRyKCksIEhUTUxOYW1lczo6dGFibGUoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRh
Z0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6ZmllbGRzZXQoKS5sb2NhbE5hbWVQdHIoKSwgSFRNTE5h
bWVzOjpmaWVsZHNldCgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQo
SFRNTE5hbWVzOjphZGRyZXNzKCkubG9jYWxOYW1lUHRyKCksIEhUTUxOYW1lczo6YWRkcmVzcygp
LmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpsaSgp
LmxvY2FsTmFtZVB0cigpLCBIVE1MTmFtZXM6OmxpKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAg
ICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmRkKCkubG9jYWxOYW1lUHRyKCksIEhUTUxOYW1l
czo6ZGQoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1l
czo6ZHQoKS5sb2NhbE5hbWVQdHIoKSwgSFRNTE5hbWVzOjpkdCgpLmxvY2FsTmFtZVB0cigpKTsK
KyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjptYXJxdWVlKCkubG9jYWxOYW1lUHRy
KCksIEhUTUxOYW1lczo6bWFycXVlZSgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICB9CisgICAgcmV0
dXJuICZ0YWdMaXN0OworfQorCitib29sIEhUTUxFbGVtZW50SW1wbDo6aW5FaXRoZXJUYWdMaXN0
KGNvbnN0IE5vZGVJbXBsKiBuZXdDaGlsZCkKIHsKLSAgICBtX2VsZW1lbnRJZCA9IGk7CisgICAg
aWYgKG5ld0NoaWxkLT5pc1RleHROb2RlKCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICAKKyAgICBpZiAobmV3Q2hpbGQtPmlzSFRNTEVsZW1lbnQoKSkgeworICAgICAgICBjb25zdCBI
VE1MRWxlbWVudEltcGwqIGNoaWxkID0gc3RhdGljX2Nhc3Q8Y29uc3QgSFRNTEVsZW1lbnRJbXBs
Kj4obmV3Q2hpbGQpOworICAgICAgICBpZiAoaW5saW5lVGFnTGlzdCgpLT5maW5kKGNoaWxkLT50
YWdOYW1lKCkubG9jYWxOYW1lUHRyKCkpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIGlmIChibG9ja1RhZ0xpc3QoKS0+ZmluZChjaGlsZC0+dGFnTmFtZSgpLmxvY2FsTmFtZVB0
cigpKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gIUhUTUxOYW1l
czo6aXNSZWNvZ25pemVkVGFnTmFtZShjaGlsZC0+dGFnTmFtZSgpKTsgLy8gQWNjZXB0IGN1c3Rv
bSBodG1sIHRhZ3MKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU5vZGVJbXBsOjpJ
ZCBIVE1MR2VuZXJpY0VsZW1lbnRJbXBsOjppZCgpIGNvbnN0Citib29sIEhUTUxFbGVtZW50SW1w
bDo6aW5JbmxpbmVUYWdMaXN0KGNvbnN0IE5vZGVJbXBsKiBuZXdDaGlsZCkKIHsKLSAgICByZXR1
cm4gbV9lbGVtZW50SWQ7CisgICAgaWYgKG5ld0NoaWxkLT5pc1RleHROb2RlKCkpCisgICAgICAg
IHJldHVybiB0cnVlOworCisgICAgaWYgKG5ld0NoaWxkLT5pc0hUTUxFbGVtZW50KCkpIHsKKyAg
ICAgICAgY29uc3QgSFRNTEVsZW1lbnRJbXBsKiBjaGlsZCA9IHN0YXRpY19jYXN0PGNvbnN0IEhU
TUxFbGVtZW50SW1wbCo+KG5ld0NoaWxkKTsKKyAgICAgICAgaWYgKGlubGluZVRhZ0xpc3QoKS0+
ZmluZChjaGlsZC0+dGFnTmFtZSgpLmxvY2FsTmFtZVB0cigpKSkKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICByZXR1cm4gIUhUTUxOYW1lczo6aXNSZWNvZ25pemVkVGFnTmFtZShj
aGlsZC0+dGFnTmFtZSgpKTsgLy8gQWNjZXB0IGN1c3RvbSBodG1sIHRhZ3MKKyAgICB9CisKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgSFRNTEVsZW1lbnRJbXBsOjppbkJsb2NrVGFnTGlz
dChjb25zdCBOb2RlSW1wbCogbmV3Q2hpbGQpCit7CisgICAgaWYgKG5ld0NoaWxkLT5pc1RleHRO
b2RlKCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgCisgICAgaWYgKG5ld0No
aWxkLT5pc0hUTUxFbGVtZW50KCkpIHsKKyAgICAgICAgY29uc3QgSFRNTEVsZW1lbnRJbXBsKiBj
aGlsZCA9IHN0YXRpY19jYXN0PGNvbnN0IEhUTUxFbGVtZW50SW1wbCo+KG5ld0NoaWxkKTsKKyAg
ICAgICAgaWYgKGJsb2NrVGFnTGlzdCgpLT5maW5kKGNoaWxkLT50YWdOYW1lKCkubG9jYWxOYW1l
UHRyKCkpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiAhSFRNTE5h
bWVzOjppc1JlY29nbml6ZWRUYWdOYW1lKGNoaWxkLT50YWdOYW1lKCkpOyAvLyBBY2NlcHQgY3Vz
dG9tIGh0bWwgdGFncworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBIVE1M
RWxlbWVudEltcGw6OmNoZWNrRFREKGNvbnN0IE5vZGVJbXBsKiBuZXdDaGlsZCkKK3sKKyAgICBp
ZiAoaGFzVGFnTmFtZShIVE1MTmFtZXM6OmFkZHJlc3MoKSkgJiYgbmV3Q2hpbGQtPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjpwKCkpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gaW5F
aXRoZXJUYWdMaXN0KG5ld0NoaWxkKTsKIH0KSW5kZXg6IGtodG1sL2h0bWwvaHRtbF9lbGVtZW50
aW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwv
aHRtbF9lbGVtZW50aW1wbC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjM1CmRpZmYgLXUgLXAg
LXIxLjM1IGtodG1sL2h0bWwvaHRtbF9lbGVtZW50aW1wbC5oCi0tLSBraHRtbC9odG1sL2h0bWxf
ZWxlbWVudGltcGwuaAkxMSBNYXkgMjAwNSAwNTo0OTozNCAtMDAwMAkxLjM1CisrKyBraHRtbC9o
dG1sL2h0bWxfZWxlbWVudGltcGwuaAk1IEp1bCAyMDA1IDIzOjIwOjM0IC0wMDAwCkBAIC0yNSwy
NyArMjUsMjYgQEAKICNkZWZpbmUgSFRNTF9FTEVNRU5USU1QTF9ICiAKICNpbmNsdWRlICJ4bWwv
ZG9tX2VsZW1lbnRpbXBsLmgiCi0jaW5jbHVkZSA8cXB0cmRpY3QuaD4KKyNpbmNsdWRlICJodG1s
bmFtZXMuaCIKIAogbmFtZXNwYWNlIERPTSB7CiAKIGNsYXNzIERvY3VtZW50RnJhZ21lbnRJbXBs
OwogY2xhc3MgRE9NU3RyaW5nOwogY2xhc3MgSFRNTENvbGxlY3Rpb25JbXBsOwotICAgIAorCitl
bnVtIEhUTUxUYWdTdGF0dXMgeyBUYWdTdGF0dXNPcHRpb25hbCwgVGFnU3RhdHVzUmVxdWlyZWQs
IFRhZ1N0YXR1c0ZvcmJpZGRlbiB9OworICAgICAgICAgICAgICAgICAgICAgICAKIGNsYXNzIEhU
TUxFbGVtZW50SW1wbCA6IHB1YmxpYyBTdHlsZWRFbGVtZW50SW1wbAogewogcHVibGljOgotICAg
IEhUTUxFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKTsKLQorICAgIEhUTUxFbGVtZW50SW1w
bChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudFB0ciAqZG9jKTsKICAgICB2
aXJ0dWFsIH5IVE1MRWxlbWVudEltcGwoKTsKIAogICAgIHZpcnR1YWwgYm9vbCBpc0hUTUxFbGVt
ZW50KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgdmlydHVhbCBib29sIGlzSW5saW5l
KCkgY29uc3Q7Ci0gICAgIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdCA9IDA7Ci0gICAgCisJ
dmlydHVhbCBET01TdHJpbmcgbm9kZU5hbWUoKSBjb25zdDsKKwogICAgIHZpcnR1YWwgYm9vbCBt
YXBUb0VudHJ5KElkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0Owog
ICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBs
KiBhdHRyKTsKIApAQCAtNTMsNyArNTIsNyBAQCBwdWJsaWM6CiAKICAgICBTaGFyZWRQdHI8SFRN
TENvbGxlY3Rpb25JbXBsPiBjaGlsZHJlbigpOwogICAgIAotICAgIERPTVN0cmluZyBpZERPTSgp
IGNvbnN0OyAvLyByZW5hbWUgdG8gaWQgYWZ0ZXIgZWxpbWluYXRpbmcgTm9kZUltcGw6OmlkIHNv
bWUgZGF5CisgICAgRE9NU3RyaW5nIGlkKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRJZChjb25zdCBE
T01TdHJpbmcgJnZhbHVlKTsKICAgICBET01TdHJpbmcgdGl0bGUoKSBjb25zdDsKICAgICB2b2lk
IHNldFRpdGxlKGNvbnN0IERPTVN0cmluZyAmdmFsdWUpOwpAQCAtNzMsOCArNzIsNiBAQCBwdWJs
aWM6CiAgICAgdm9pZCBzZXRPdXRlckhUTUwoY29uc3QgRE9NU3RyaW5nICZodG1sLCBpbnQgJmV4
Y2VwdGlvbik7CiAgICAgdm9pZCBzZXRJbm5lclRleHQoY29uc3QgRE9NU3RyaW5nICZ0ZXh0LCBp
bnQgJmV4Y2VwdGlvbik7CiAgICAgdm9pZCBzZXRPdXRlclRleHQoY29uc3QgRE9NU3RyaW5nICZ0
ZXh0LCBpbnQgJmV4Y2VwdGlvbik7Ci0KLSAgICB2aXJ0dWFsIERPTVN0cmluZyBuYW1lc3BhY2VV
UkkoKSBjb25zdDsKICAgICAKICAgICB2aXJ0dWFsIGJvb2wgaXNGb2N1c2FibGUoKSBjb25zdDsK
ICAgICB2aXJ0dWFsIGJvb2wgaXNDb250ZW50RWRpdGFibGUoKSBjb25zdDsKQEAgLTg5LDIyICs4
NiwyNCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIERPTVN0cmluZyB0b1N0cmluZygpIGNvbnN0
OwogCisgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3Q7
CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wg
Y2hpbGRBbGxvd2VkKE5vZGVJbXBsKiBuZXdDaGlsZCk7IC8vIEVycm9yLWNoZWNraW5nIGR1cmlu
ZyBwYXJzaW5nIHRoYXQgY2hlY2tzIHRoZSBEVEQKKworCS8vIEhlbHBlciBmdW5jdGlvbiB0byBj
aGVjayB0aGUgRFREIGZvciBhIGdpdmVuIGNoaWxkIG5vZGUuCisJdmlydHVhbCBib29sIGNoZWNr
RFREKGNvbnN0IE5vZGVJbXBsKiBuZXdDaGlsZCk7CisJc3RhdGljIFFQdHJEaWN0PERPTVN0cmlu
Z0ltcGw+KiBpbmxpbmVUYWdMaXN0KCk7CisJc3RhdGljIFFQdHJEaWN0PERPTVN0cmluZ0ltcGw+
KiBibG9ja1RhZ0xpc3QoKTsKKwlzdGF0aWMgYm9vbCBpbkVpdGhlclRhZ0xpc3QoY29uc3QgTm9k
ZUltcGwqIG5ld0NoaWxkKTsKKwlzdGF0aWMgYm9vbCBpbklubGluZVRhZ0xpc3QoY29uc3QgTm9k
ZUltcGwqIG5ld0NoaWxkKTsKKwlzdGF0aWMgYm9vbCBpbkJsb2NrVGFnTGlzdChjb25zdCBOb2Rl
SW1wbCogbmV3Q2hpbGQpOworCiBwcm90ZWN0ZWQ6CiAKICAgICAvLyBmb3IgSU1HLCBPQkpFQ1Qg
YW5kIEFQUExFVAogICAgIHZvaWQgYWRkSFRNTEFsaWdubWVudChNYXBwZWRBdHRyaWJ1dGVJbXBs
KiBodG1sQXR0cik7CiB9OwogCi1jbGFzcyBIVE1MR2VuZXJpY0VsZW1lbnRJbXBsIDogcHVibGlj
IEhUTUxFbGVtZW50SW1wbAotewotcHVibGljOgotICAgIEhUTUxHZW5lcmljRWxlbWVudEltcGwo
RG9jdW1lbnRQdHIgKmRvYywgdXNob3J0IGVsZW1lbnRJZCk7Ci0gICAgdmlydHVhbCBJZCBpZCgp
IGNvbnN0OwotCi1wcm90ZWN0ZWQ6Ci0gICAgdXNob3J0IG1fZWxlbWVudElkOwotfTsKLQogfSAv
L25hbWVzcGFjZQogCiAjZW5kaWYKSW5kZXg6IGtodG1sL2h0bWwvaHRtbF9mb3JtaW1wbC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sX2Zv
cm1pbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNzAKZGlmZiAtdSAtcCAtcjEuMTcw
IGtodG1sL2h0bWwvaHRtbF9mb3JtaW1wbC5jcHAKLS0tIGtodG1sL2h0bWwvaHRtbF9mb3JtaW1w
bC5jcHAJMjkgSnVuIDIwMDUgMjA6MTQ6NTcgLTAwMDAJMS4xNzAKKysrIGtodG1sL2h0bWwvaHRt
bF9mb3JtaW1wbC5jcHAJNSBKdWwgMjAwNSAyMzoyMDozNiAtMDAwMApAQCAtMTAzLDcgKzEwMyw3
IEBAIHByaXZhdGU6CiB9OwogCiBIVE1MRm9ybUVsZW1lbnRJbXBsOjpIVE1MRm9ybUVsZW1lbnRJ
bXBsKERvY3VtZW50UHRyICpkb2MpCi0gICAgOiBIVE1MRWxlbWVudEltcGwoZG9jKQorICAgIDog
SFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6Zm9ybSgpLCBkb2MpCiB7CiAgICAgY29sbGVjdGlv
bkluZm8gPSAwOwogICAgIG1fcG9zdCA9IGZhbHNlOwpAQCAtMTMwLDExICsxMzAsNiBAQCBIVE1M
Rm9ybUVsZW1lbnRJbXBsOjp+SFRNTEZvcm1FbGVtZW50SW1wCiAgICAgICAgIGltZ0VsZW1lbnRz
W2ldLT5tX2Zvcm0gPSAwOwogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTEZvcm1FbGVtZW50SW1wbDo6
aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9GT1JNOwotfQotCiAjaWYgQVBQTEVfQ0hBTkdF
UwogCiBib29sIEhUTUxGb3JtRWxlbWVudEltcGw6OmZvcm1Xb3VsZEhhdmVTZWN1cmVTdWJtaXNz
aW9uKGNvbnN0IERPTVN0cmluZyAmdXJsKQpAQCAtMTkyLDcgKzE4Nyw3IEBAIHZvaWQgSFRNTEZv
cm1FbGVtZW50SW1wbDo6c3VibWl0Q2xpY2soKQogewogICAgIGJvb2wgc3VibWl0Rm91bmQgPSBm
YWxzZTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZm9ybUVsZW1lbnRzLmNvdW50KCk7
ICsraSkgewotICAgICAgICBpZiAoZm9ybUVsZW1lbnRzW2ldLT5pZCgpID09IElEX0lOUFVUKSB7
CisgICAgICAgIGlmIChmb3JtRWxlbWVudHNbaV0tPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Omlu
cHV0KCkpKSB7CiAgICAgICAgICAgICBIVE1MSW5wdXRFbGVtZW50SW1wbCAqZWxlbWVudCA9IHN0
YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnRJbXBsICo+KGZvcm1FbGVtZW50c1tpXSk7CiAgICAg
ICAgICAgICBpZiAoZWxlbWVudC0+aXNTdWNjZXNzZnVsU3VibWl0QnV0dG9uKCkgJiYgZWxlbWVu
dC0+cmVuZGVyZXIoKSkgewogICAgICAgICAgICAgICAgIHN1Ym1pdEZvdW5kID0gdHJ1ZTsKQEAg
LTM5OSw3ICszOTQsNyBAQCBib29sIEhUTUxGb3JtRWxlbWVudEltcGw6OmZvcm1EYXRhKEZvcm1E
CiAKICAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGhlIGN1cnJlbnQgdHlwZSBpcyBGSUxFLCB0
aGVuIHdlIGFsc28gbmVlZCB0bwogICAgICAgICAgICAgICAgICAgICAvLyBpbmNsdWRlIHRoZSBm
aWxlbmFtZQotICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudC0+bm9kZVR5cGUoKSA9PSBO
b2RlOjpFTEVNRU5UX05PREUgJiYgY3VycmVudC0+aWQoKSA9PSBJRF9JTlBVVCAmJgorICAgICAg
ICAgICAgICAgICAgICBpZiAoY3VycmVudC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6aW5wdXQo
KSkgJiYKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1l
bnRJbXBsKj4oY3VycmVudCktPmlucHV0VHlwZSgpID09IEhUTUxJbnB1dEVsZW1lbnRJbXBsOjpG
SUxFKQogICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICBRU3Ry
aW5nIHBhdGggPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50SW1wbCo+KGN1cnJlbnQpLT52
YWx1ZSgpLnN0cmluZygpOwpAQCAtNTQ3LDcgKzU0Miw3IEBAIHZvaWQgSFRNTEZvcm1FbGVtZW50
SW1wbDo6c3VibWl0KCBib29sIGEKICNpZiBBUFBMRV9DSEFOR0VTCiAgICAgICAgIC8vIE91ciBh
cHAgbmVlZHMgdG8gZ2V0IGZvcm0gdmFsdWVzIGZvciBwYXNzd29yZCBmaWVsZHMgZm9yIGRvaW5n
IHBhc3N3b3JkIGF1dG9jb21wbGV0ZSwKICAgICAgICAgLy8gc28gd2UgYXJlIG1vcmUgbGVuaWVu
dCBpbiBwdXNoaW5nIHZhbHVlcywgYW5kIGxldCB0aGUgYXBwIGRlY2lkZSB3aGF0IHRvIHNhdmUg
d2hlbi4KLSAgICAgICAgaWYgKGN1cnJlbnQtPmlkKCkgPT0gSURfSU5QVVQpIHsKKyAgICAgICAg
aWYgKGN1cnJlbnQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmlucHV0KCkpKSB7CiAgICAgICAg
ICAgICBIVE1MSW5wdXRFbGVtZW50SW1wbCAqaW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRF
bGVtZW50SW1wbCo+KGN1cnJlbnQpOwogICAgICAgICAgICAgaWYgKGlucHV0LT5pbnB1dFR5cGUo
KSA9PSBIVE1MSW5wdXRFbGVtZW50SW1wbDo6VEVYVAogICAgICAgICAgICAgICAgIHx8IGlucHV0
LT5pbnB1dFR5cGUoKSA9PSAgSFRNTElucHV0RWxlbWVudEltcGw6OlBBU1NXT1JECkBAIC03MDks
NyArNzA0LDcgQEAgdm9pZCBIVE1MRm9ybUVsZW1lbnRJbXBsOjpyYWRpb0NsaWNrZWQoIAogewog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmb3JtRWxlbWVudHMuY291bnQoKTsgKytpKSB7
CiAgICAgICAgIEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsICpjdXJyZW50ID0gZm9ybUVsZW1l
bnRzW2ldOwotICAgICAgICBpZiAoY3VycmVudC0+aWQoKSA9PSBJRF9JTlBVVCAmJgorICAgICAg
ICBpZiAoY3VycmVudC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6aW5wdXQoKSkgJiYKICAgICAg
ICAgICAgIHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnRJbXBsKj4oY3VycmVudCktPmlucHV0
VHlwZSgpID09IEhUTUxJbnB1dEVsZW1lbnRJbXBsOjpSQURJTyAmJgogICAgICAgICAgICAgY3Vy
cmVudCAhPSBjYWxsZXIgJiYgY3VycmVudC0+Zm9ybSgpID09IGNhbGxlci0+Zm9ybSgpICYmIGN1
cnJlbnQtPm5hbWUoKSA9PSBjYWxsZXItPm5hbWUoKSkgewogICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8SFRNTElucHV0RWxlbWVudEltcGwqPihjdXJyZW50KS0+c2V0Q2hlY2tlZChmYWxzZSk7CkBA
IC04NjQsOCArODU5LDggQEAgdm9pZCBIVE1MRm9ybUVsZW1lbnRJbXBsOjpzZXRUYXJnZXQoY29u
cwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsOjpI
VE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1l
bnRJbXBsICpmKQotICAgIDogSFRNTEVsZW1lbnRJbXBsKGRvYykKK0hUTUxHZW5lcmljRm9ybUVs
ZW1lbnRJbXBsOjpIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbChjb25zdCBRdWFsaWZpZWROYW1l
JiB0YWdOYW1lLCBEb2N1bWVudFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmKQorICAg
IDogSFRNTEVsZW1lbnRJbXBsKHRhZ05hbWUsIGRvYykKIHsKICAgICBtX2Rpc2FibGVkID0gbV9y
ZWFkT25seSA9IGZhbHNlOwogICAgIG1fZG9ybWFudCA9IGZhbHNlOwpAQCAtOTY3LDkgKzk2Miw4
IEBAIHZvaWQgSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGw6OnJlbW92ZWQKIEhUTUxGb3JtRWxl
bWVudEltcGwgKkhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsOjpnZXRGb3JtKCkgY29uc3QKIHsK
ICAgICBOb2RlSW1wbCAqcCA9IHBhcmVudE5vZGUoKTsKLSAgICB3aGlsZShwKQotICAgIHsKLSAg
ICAgICAgaWYoIHAtPmlkKCkgPT0gSURfRk9STSApCisgICAgd2hpbGUocCkgeworICAgICAgICBp
ZiAocC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZvcm0oKSkpCiAgICAgICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50SW1wbCAqPihwKTsKICAgICAgICAgcCA9IHAtPnBh
cmVudE5vZGUoKTsKICAgICB9CkBAIC0xMTg5LDcgKzExODMsNyBAQCB2b2lkIEhUTUxHZW5lcmlj
Rm9ybUVsZW1lbnRJbXBsOjpzZXRUYWJJCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxCdXR0
b25FbGVtZW50SW1wbDo6SFRNTEJ1dHRvbkVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIEhU
TUxGb3JtRWxlbWVudEltcGwgKmYpCi0gICAgOiBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbChk
b2MsIGYpCisgICAgOiBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbChIVE1MTmFtZXM6OmJ1dHRv
bigpLCBkb2MsIGYpCiB7CiAgICAgbV90eXBlID0gU1VCTUlUOwogICAgIG1fZGlydHkgPSB0cnVl
OwpAQCAtMTIwMCwxMSArMTE5NCw2IEBAIEhUTUxCdXR0b25FbGVtZW50SW1wbDo6fkhUTUxCdXR0
b25FbGVtZW4KIHsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxCdXR0b25FbGVtZW50SW1wbDo6aWQo
KSBjb25zdAotewotICAgIHJldHVybiBJRF9CVVRUT047Ci19Ci0KIERPTVN0cmluZyBIVE1MQnV0
dG9uRWxlbWVudEltcGw6OnR5cGUoKSBjb25zdAogewogICAgIHJldHVybiBnZXRBdHRyaWJ1dGUo
QVRUUl9UWVBFKTsKQEAgLTEzMjYsNyArMTMxNSw3IEBAIHZvaWQgSFRNTEJ1dHRvbkVsZW1lbnRJ
bXBsOjpzZXRWYWx1ZShjb24KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogSFRNTEZpZWxkU2V0RWxl
bWVudEltcGw6OkhUTUxGaWVsZFNldEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIEhUTUxG
b3JtRWxlbWVudEltcGwgKmYpCi0gICA6IEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKGRvYywg
ZikKKyAgIDogSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwoSFRNTE5hbWVzOjpmaWVsZHNldCgp
LCBkb2MsIGYpCiB7CiB9CiAKQEAgLTEzMzQsMTQgKzEzMjMsMTQgQEAgSFRNTEZpZWxkU2V0RWxl
bWVudEltcGw6On5IVE1MRmllbGRTZXRFbAogewogfQogCi1ib29sIEhUTUxGaWVsZFNldEVsZW1l
bnRJbXBsOjppc0ZvY3VzYWJsZSgpIGNvbnN0Citib29sIEhUTUxGaWVsZFNldEVsZW1lbnRJbXBs
OjpjaGVja0RURChjb25zdCBOb2RlSW1wbCogbmV3Q2hpbGQpCiB7Ci0gICAgcmV0dXJuIGZhbHNl
OworCXJldHVybiBuZXdDaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmxlZ2VuZCgpKSB8fCBI
VE1MRWxlbWVudEltcGw6OmNoZWNrRFREKG5ld0NoaWxkKTsKIH0KIAotTm9kZUltcGw6OklkIEhU
TUxGaWVsZFNldEVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Citib29sIEhUTUxGaWVsZFNldEVsZW1l
bnRJbXBsOjppc0ZvY3VzYWJsZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIElEX0ZJRUxEU0VUOwor
ICAgIHJldHVybiBmYWxzZTsKIH0KIAogRE9NU3RyaW5nIEhUTUxGaWVsZFNldEVsZW1lbnRJbXBs
Ojp0eXBlKCkgY29uc3QKQEAgLTEzNTcsOCArMTM0NiwyMSBAQCBSZW5kZXJPYmplY3QqIEhUTUxG
aWVsZFNldEVsZW1lbnRJbXBsOjpjCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxJbnB1dEVs
ZW1lbnRJbXBsOjpIVE1MSW5wdXRFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCBIVE1MRm9y
bUVsZW1lbnRJbXBsICpmKQotICAgIDogSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwoZG9jLCBm
KSwgbV9pbWFnZUxvYWRlcigwKSwgbV92YWx1ZU1hdGNoZXNSZW5kZXJlcihmYWxzZSkKKyAgICA6
IEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKEhUTUxOYW1lczo6aW5wdXQoKSwgZG9jLCBmKQor
eworICAgIGluaXQoKTsKK30KKworSFRNTElucHV0RWxlbWVudEltcGw6OkhUTUxJbnB1dEVsZW1l
bnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50UHRyICpkb2MsIEhU
TUxGb3JtRWxlbWVudEltcGwgKmYpCisgICAgOiBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbCh0
YWdOYW1lLCBkb2MsIGYpCiB7CisgICAgaW5pdCgpOworfQorCit2b2lkIEhUTUxJbnB1dEVsZW1l
bnRJbXBsOjppbml0KCkKK3sKKyAgICBtX2ltYWdlTG9hZGVyID0gMDsKKyAgICBtX3ZhbHVlTWF0
Y2hlc1JlbmRlcmVyID0gZmFsc2U7CiAgICAgbV90eXBlID0gVEVYVDsKICAgICBtX21heExlbiA9
IC0xOwogICAgIG1fc2l6ZSA9IDIwOwpAQCAtMTM3Niw4ICsxMzc4LDggQEAgSFRNTElucHV0RWxl
bWVudEltcGw6OkhUTUxJbnB1dEVsZW1lbnRJbQogCiAgICAgbV9tYXhSZXN1bHRzID0gLTE7CiAK
LSAgICBpZiAoIG1fZm9ybSApCi0gICAgICAgIG1fYXV0b2NvbXBsZXRlID0gZi0+YXV0b0NvbXBs
ZXRlKCk7CisgICAgaWYgKG1fZm9ybSkKKyAgICAgICAgbV9hdXRvY29tcGxldGUgPSBtX2Zvcm0t
PmF1dG9Db21wbGV0ZSgpOwogfQogCiBIVE1MSW5wdXRFbGVtZW50SW1wbDo6fkhUTUxJbnB1dEVs
ZW1lbnRJbXBsKCkKQEAgLTEzODYsMTEgKzEzODgsNiBAQCBIVE1MSW5wdXRFbGVtZW50SW1wbDo6
fkhUTUxJbnB1dEVsZW1lbnRJCiAgICAgZGVsZXRlIG1faW1hZ2VMb2FkZXI7CiB9CiAKLU5vZGVJ
bXBsOjpJZCBIVE1MSW5wdXRFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJ
RF9JTlBVVDsKLX0KLQogdm9pZCBIVE1MSW5wdXRFbGVtZW50SW1wbDo6c2V0VHlwZShjb25zdCBE
T01TdHJpbmcmIHQpCiB7CiAgICAgdHlwZUVudW0gbmV3VHlwZTsKQEAgLTI0NjgsNyArMjQ2NSw3
IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudEltcGw6OnNldFVzZU1hcChjb24KIC8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KIAogSFRNTExhYmVsRWxlbWVudEltcGw6OkhUTUxMYWJlbEVsZW1lbnRJbXBsKERv
Y3VtZW50UHRyICpkb2MpCi0gICAgOiBIVE1MRWxlbWVudEltcGwoZG9jKQorICAgIDogSFRNTEVs
ZW1lbnRJbXBsKEhUTUxOYW1lczo6bGFiZWwoKSwgZG9jKQogewogfQogCkBAIC0yNDgxLDExICsy
NDc4LDYgQEAgYm9vbCBIVE1MTGFiZWxFbGVtZW50SW1wbDo6aXNGb2N1c2FibGUoKQogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxMYWJlbEVsZW1lbnRJbXBsOjppZCgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0xBQkVMOwotfQotCiB2b2lkIEhUTUxMYWJlbEVsZW1l
bnRJbXBsOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICphdHRyKQog
ewogICAgIHN3aXRjaChhdHRyLT5pZCgpKQpAQCAtMjUzOSw3ICsyNTMxLDcgQEAgdm9pZCBIVE1M
TGFiZWxFbGVtZW50SW1wbDo6YWNjZXNzS2V5QWN0aQogSFRNTEZvcm1FbGVtZW50SW1wbCAqSFRN
TExhYmVsRWxlbWVudEltcGw6OmZvcm0oKQogewogICAgIGZvciAoTm9kZUltcGwgKnAgPSBwYXJl
bnROb2RlKCk7IHAgIT0gMDsgcCA9IHAtPnBhcmVudE5vZGUoKSkgewotICAgICAgICBpZiAocC0+
aWQoKSA9PSBJRF9GT1JNKQorICAgICAgICBpZiAocC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZv
cm0oKSkpCiAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50SW1w
bCAqPihwKTsKICAgICB9CiAgICAgCkBAIC0yNTY5LDcgKzI1NjEsNyBAQCB2b2lkIEhUTUxMYWJl
bEVsZW1lbnRJbXBsOjpzZXRIdG1sRm9yKGNvCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxM
ZWdlbmRFbGVtZW50SW1wbDo6SFRNTExlZ2VuZEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2Ms
IEhUTUxGb3JtRWxlbWVudEltcGwgKmYpCi06IEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKGRv
YywgZikKKzogSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwoSFRNTE5hbWVzOjpsZWdlbmQoKSwg
ZG9jLCBmKQogewogfQogCkBAIC0yNTgyLDExICsyNTc0LDYgQEAgYm9vbCBIVE1MTGVnZW5kRWxl
bWVudEltcGw6OmlzRm9jdXNhYmxlKAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotTm9kZUltcGw6
OklkIEhUTUxMZWdlbmRFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9M
RUdFTkQ7Ci19Ci0KIFJlbmRlck9iamVjdCogSFRNTExlZ2VuZEVsZW1lbnRJbXBsOjpjcmVhdGVS
ZW5kZXJlcihSZW5kZXJBcmVuYSogYXJlbmEsIFJlbmRlclN0eWxlKiBzdHlsZSkKIHsKICAgICBy
ZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVyTGVnZW5kKHRoaXMpOwpAQCAtMjYyMSw3ICsyNjA4LDcg
QEAgRWxlbWVudEltcGwgKkhUTUxMZWdlbmRFbGVtZW50SW1wbDo6Zm9ybQogewogICAgIC8vIENo
ZWNrIGlmIHRoZXJlJ3MgYSBmaWVsZHNldCBiZWxvbmdpbmcgdG8gdGhpcyBsZWdlbmQuCiAgICAg
Tm9kZUltcGwgKmZpZWxkc2V0ID0gcGFyZW50Tm9kZSgpOwotICAgIHdoaWxlIChmaWVsZHNldCAm
JiBmaWVsZHNldC0+aWQoKSAhPSBJRF9GSUVMRFNFVCkKKyAgICB3aGlsZSAoZmllbGRzZXQgJiYg
IWZpZWxkc2V0LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZmllbGRzZXQoKSkpCiAgICAgICAgIGZp
ZWxkc2V0ID0gZmllbGRzZXQtPnBhcmVudE5vZGUoKTsKICAgICBpZiAoIWZpZWxkc2V0KQogICAg
ICAgICByZXR1cm4gMDsKQEAgLTI2MzIsNyArMjYxOSw3IEBAIEVsZW1lbnRJbXBsICpIVE1MTGVn
ZW5kRWxlbWVudEltcGw6OmZvcm0KICAgICB3aGlsZSAoKG5vZGUgPSBub2RlLT50cmF2ZXJzZU5l
eHROb2RlKGZpZWxkc2V0KSkpIHsKICAgICAgICAgaWYgKG5vZGUtPmlzSFRNTEVsZW1lbnQoKSkg
ewogICAgICAgICAgICAgSFRNTEVsZW1lbnRJbXBsICplbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRN
TEVsZW1lbnRJbXBsICo+KG5vZGUpOwotICAgICAgICAgICAgaWYgKGVsZW1lbnQtPmlkKCkgIT0g
SURfTEVHRU5EICYmIGVsZW1lbnQtPmlzR2VuZXJpY0Zvcm1FbGVtZW50KCkpCisgICAgICAgICAg
ICBpZiAoIWVsZW1lbnQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmxlZ2VuZCgpKSAmJiBlbGVt
ZW50LT5pc0dlbmVyaWNGb3JtRWxlbWVudCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBlbGVt
ZW50OwogICAgICAgICB9CiAgICAgfQpAQCAtMjY1NSw4ICsyNjQyLDIwIEBAIHZvaWQgSFRNTExl
Z2VuZEVsZW1lbnRJbXBsOjphY2Nlc3NLZXlBY3QKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogSFRN
TFNlbGVjdEVsZW1lbnRJbXBsOjpIVE1MU2VsZWN0RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRv
YywgSFRNTEZvcm1FbGVtZW50SW1wbCAqZikKLSAgICA6IEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJ
bXBsKGRvYywgZiksIG1fb3B0aW9ucygwKQorICAgIDogSFRNTEdlbmVyaWNGb3JtRWxlbWVudElt
cGwoSFRNTE5hbWVzOjpzZWxlY3QoKSwgZG9jLCBmKSwgbV9vcHRpb25zKDApCiB7CisgICAgaW5p
dCgpOworfQorCitIVE1MU2VsZWN0RWxlbWVudEltcGw6OkhUTUxTZWxlY3RFbGVtZW50SW1wbChj
b25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudFB0ciAqZG9jLCBIVE1MRm9ybUVs
ZW1lbnRJbXBsICpmKQorICAgIDogSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwodGFnTmFtZSwg
ZG9jLCBmKSwgbV9vcHRpb25zKDApCit7CisgICAgaW5pdCgpOworfQorCit2b2lkIEhUTUxTZWxl
Y3RFbGVtZW50SW1wbDo6aW5pdCgpCit7CisgICAgbV9vcHRpb25zID0gMDsKICAgICBtX211bHRp
cGxlID0gZmFsc2U7CiAgICAgbV9yZWNhbGNMaXN0SXRlbXMgPSBmYWxzZTsKICAgICAvLyAwIG1l
YW5zIGludmFsaWQgKGkuZS4gbm90IHNldCkKQEAgLTI2NzMsOSArMjY3MiwxMCBAQCBIVE1MU2Vs
ZWN0RWxlbWVudEltcGw6On5IVE1MU2VsZWN0RWxlbWVuCiAgICAgfQogfQogCi1Ob2RlSW1wbDo6
SWQgSFRNTFNlbGVjdEVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Citib29sIEhUTUxTZWxlY3RFbGVt
ZW50SW1wbDo6Y2hlY2tEVEQoY29uc3QgTm9kZUltcGwqIG5ld0NoaWxkKQogewotICAgIHJldHVy
biBJRF9TRUxFQ1Q7CisJcmV0dXJuIG5ld0NoaWxkLT5pc1RleHROb2RlKCkgfHwgbmV3Q2hpbGQt
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvcHRpb24oKSkgfHwgbmV3Q2hpbGQtPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjpvcHRncm91cCgpKSB8fAorCQkgICBuZXdDaGlsZC0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OnNjcmlwdCgpKTsKIH0KIAogdm9pZCBIVE1MU2VsZWN0RWxlbWVudEltcGw6OnJlY2Fs
Y1N0eWxlKCBTdHlsZUNoYW5nZSBjaCApCkBAIC0yNjk5LDcgKzI2OTksNyBAQCBsb25nIEhUTUxT
ZWxlY3RFbGVtZW50SW1wbDo6c2VsZWN0ZWRJbmRlCiAgICAgdWludCBvID0gMDsKICAgICBRTWVt
QXJyYXk8SFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwqPiBpdGVtcyA9IGxpc3RJdGVtcygpOwog
ICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyBpKyspIHsKLSAg
ICAgICAgaWYgKGl0ZW1zW2ldLT5pZCgpID09IElEX09QVElPTikgeworICAgICAgICBpZiAoaXRl
bXNbaV0tPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9wdGlvbigpKSkgewogICAgICAgICAgICAg
aWYgKHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50SW1wbCo+KGl0ZW1zW2ldKS0+c2VsZWN0
ZWQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gbzsKICAgICAgICAgICAgIG8rKzsKQEAgLTI3
MTUsNyArMjcxNSw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnRJbXBsOjpzZXRTZWxlY3RlZEkK
ICAgICBRTWVtQXJyYXk8SFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwqPiBpdGVtcyA9IGxpc3RJ
dGVtcygpOwogICAgIGludCBsaXN0SW5kZXg7CiAgICAgZm9yIChsaXN0SW5kZXggPSAwOyBsaXN0
SW5kZXggPCBpbnQoaXRlbXMuc2l6ZSgpKTsgbGlzdEluZGV4KyspIHsKLSAgICAgICAgaWYgKGl0
ZW1zW2xpc3RJbmRleF0tPmlkKCkgPT0gSURfT1BUSU9OKQorICAgICAgICBpZiAoaXRlbXNbbGlz
dEluZGV4XS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpKQogICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnRJbXBsKj4oaXRlbXNbbGlzdEluZGV4XSktPnNl
dFNlbGVjdGVkKGZhbHNlKTsKICAgICB9CiAgICAgbGlzdEluZGV4ID0gb3B0aW9uVG9MaXN0SW5k
ZXgoaW5kZXgpOwpAQCAtMjczMSw3ICsyNzMxLDcgQEAgbG9uZyBIVE1MU2VsZWN0RWxlbWVudElt
cGw6Omxlbmd0aCgpIGNvbgogICAgIHVpbnQgaTsKICAgICBRTWVtQXJyYXk8SFRNTEdlbmVyaWNG
b3JtRWxlbWVudEltcGwqPiBpdGVtcyA9IGxpc3RJdGVtcygpOwogICAgIGZvciAoaSA9IDA7IGkg
PCBpdGVtcy5zaXplKCk7IGkrKykgewotICAgICAgICBpZiAoaXRlbXNbaV0tPmlkKCkgPT0gSURf
T1BUSU9OKQorICAgICAgICBpZiAoaXRlbXNbaV0tPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9w
dGlvbigpKSkKICAgICAgICAgICAgIGxlbisrOwogICAgIH0KICAgICByZXR1cm4gbGVuOwpAQCAt
MjczOSw3ICsyNzM5LDcgQEAgbG9uZyBIVE1MU2VsZWN0RWxlbWVudEltcGw6Omxlbmd0aCgpIGNv
bgogCiB2b2lkIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6YWRkKCBIVE1MRWxlbWVudEltcGwgKmVs
ZW1lbnQsIEhUTUxFbGVtZW50SW1wbCAqYmVmb3JlICkKIHsKLSAgICBpZiAoIWVsZW1lbnQgfHwg
ZWxlbWVudC0+aWQoKSAhPSBJRF9PUFRJT04pCisgICAgaWYgKCFlbGVtZW50IHx8ICFlbGVtZW50
LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIGludCBleGNlcHRpb25jb2RlID0gMDsKQEAgLTI3NzMsMTMgKzI3NzMsMTIgQEAgdm9pZCBI
VE1MU2VsZWN0RWxlbWVudEltcGw6OmZvY3VzKCkKICAgICBnZXREb2N1bWVudCgpLT5zZXRGb2N1
c05vZGUodGhpcyk7CiB9CiAKLURPTVN0cmluZyBIVE1MU2VsZWN0RWxlbWVudEltcGw6OnZhbHVl
KCApCitET01TdHJpbmcgSFRNTFNlbGVjdEVsZW1lbnRJbXBsOjp2YWx1ZSgpCiB7CiAgICAgdWlu
dCBpOwogICAgIFFNZW1BcnJheTxIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbCo+IGl0ZW1zID0g
bGlzdEl0ZW1zKCk7CiAgICAgZm9yIChpID0gMDsgaSA8IGl0ZW1zLnNpemUoKTsgaSsrKSB7Ci0g
ICAgICAgIGlmICggaXRlbXNbaV0tPmlkKCkgPT0gSURfT1BUSU9OCi0gICAgICAgICAgICAmJiBz
dGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudEltcGwqPihpdGVtc1tpXSktPnNlbGVjdGVkKCkp
CisgICAgICAgIGlmIChpdGVtc1tpXS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkp
ICYmIHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50SW1wbCo+KGl0ZW1zW2ldKS0+c2VsZWN0
ZWQoKSkKICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudElt
cGwqPihpdGVtc1tpXSktPnZhbHVlKCk7CiAgICAgfQogICAgIHJldHVybiBET01TdHJpbmcoIiIp
OwpAQCAtMjc5MywxMyArMjc5MiwxMyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6c2V0
VmFsdWUoY29uCiAgICAgLy8gYW5kIG1ha2UgaXQgdGhlIGN1cnJlbnQgc2VsZWN0aW9uLgogICAg
IFFNZW1BcnJheTxIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbCo+IGl0ZW1zID0gbGlzdEl0ZW1z
KCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGl0ZW1zLnNpemUoKTsgaSsrKQotICAg
ICAgICBpZiAoaXRlbXNbaV0tPmlkKCkgPT0gSURfT1BUSU9OICYmIHN0YXRpY19jYXN0PEhUTUxP
cHRpb25FbGVtZW50SW1wbCo+KGl0ZW1zW2ldKS0+dmFsdWUoKSA9PSB2YWx1ZSkgeworICAgICAg
ICBpZiAoaXRlbXNbaV0tPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9wdGlvbigpKSAmJiBzdGF0
aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudEltcGwqPihpdGVtc1tpXSktPnZhbHVlKCkgPT0gdmFs
dWUpIHsKICAgICAgICAgICAgIHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50SW1wbCo+KGl0
ZW1zW2ldKS0+c2V0U2VsZWN0ZWQodHJ1ZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KIH0KIAotUVN0cmluZyBIVE1MU2VsZWN0RWxlbWVudEltcGw6OnN0YXRlKCApCitRU3RyaW5n
IEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6c3RhdGUoKQogewogI2lmICFBUFBMRV9DSEFOR0VTCiAg
ICAgUVN0cmluZyBzdGF0ZTsKQEAgLTI4MTIsNyArMjgxMSw3IEBAIFFTdHJpbmcgSFRNTFNlbGVj
dEVsZW1lbnRJbXBsOjpzdGF0ZSggKQogICAgIFFDaGFyIHN0YXRlQ2hhcnNbbF07CiAgICAgCiAg
ICAgZm9yKGludCBpID0gMDsgaSA8IGw7IGkrKykKLSAgICAgICAgaWYoaXRlbXNbaV0tPmlkKCkg
PT0gSURfT1BUSU9OICYmIHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50SW1wbCo+KGl0ZW1z
W2ldKS0+c2VsZWN0ZWQoKSkKKyAgICAgICAgaWYoaXRlbXNbaV0tPmhhc0xvY2FsTmFtZShIVE1M
TmFtZXM6Om9wdGlvbigpKSAmJiBzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudEltcGwqPihp
dGVtc1tpXSktPnNlbGVjdGVkKCkpCiAgICAgICAgICAgICBzdGF0ZUNoYXJzW2ldID0gJ1gnOwog
ICAgICAgICBlbHNlCiAgICAgICAgICAgICBzdGF0ZUNoYXJzW2ldID0gJy4nOwpAQCAtMjg0OSw3
ICsyODQ4LDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudEltcGw6OnJlc3RvcmVTdGF0ZQogCiAg
ICAgaW50IGwgPSBpdGVtcy5jb3VudCgpOwogICAgIGZvcihpbnQgaSA9IDA7IGkgPCBsOyBpKysp
IHsKLSAgICAgICAgaWYoaXRlbXNbaV0tPmlkKCkgPT0gSURfT1BUSU9OKSB7CisgICAgICAgIGlm
KGl0ZW1zW2ldLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvcHRpb24oKSkpIHsKICAgICAgICAg
ICAgIEhUTUxPcHRpb25FbGVtZW50SW1wbCogb2UgPSBzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxl
bWVudEltcGwqPihpdGVtc1tpXSk7CiAgICAgICAgICAgICBvZS0+c2V0U2VsZWN0ZWQoc3RhdGVb
aV0gPT0gJ1gnKTsKICAgICAgICAgfQpAQCAtMjk0MSw3ICsyOTQwLDcgQEAgYm9vbCBIVE1MU2Vs
ZWN0RWxlbWVudEltcGw6OmFwcGVuZEZvcm1EYQogCiAgICAgdWludCBpOwogICAgIGZvciAoaSA9
IDA7IGkgPCBpdGVtcy5zaXplKCk7IGkrKykgewotICAgICAgICBpZiAoaXRlbXNbaV0tPmlkKCkg
PT0gSURfT1BUSU9OKSB7CisgICAgICAgIGlmIChpdGVtc1tpXS0+aGFzTG9jYWxOYW1lKEhUTUxO
YW1lczo6b3B0aW9uKCkpKSB7CiAgICAgICAgICAgICBIVE1MT3B0aW9uRWxlbWVudEltcGwgKm9w
dGlvbiA9IHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50SW1wbCo+KGl0ZW1zW2ldKTsKICAg
ICAgICAgICAgIGlmIChvcHRpb24tPnNlbGVjdGVkKCkpIHsKICAgICAgICAgICAgICAgICBlbmNv
ZGVkX3ZhbHVlcy5hcHBlbmREYXRhKG5hbWUoKSwgb3B0aW9uLT52YWx1ZSgpKTsKQEAgLTI5NTQs
NyArMjk1Myw3IEBAIGJvb2wgSFRNTFNlbGVjdEVsZW1lbnRJbXBsOjphcHBlbmRGb3JtRGEKICAg
ICAvLyBpbiBhbnkgY2FzZS4gb3RoZXJ3aXNlIHdlIGhhdmUgbm8gY29uc2lzdGVuY3kgd2l0aCB0
aGUgRE9NIGludGVyZmFjZS4gRklYTUUhCiAgICAgLy8gd2UgcmV0dXJuIHRoZSBmaXJzdCBvbmUg
aWYgaXQgd2FzIGEgY29tYm9ib3ggc2VsZWN0CiAgICAgaWYgKCFzdWNjZXNzZnVsICYmICFtX211
bHRpcGxlICYmIG1fc2l6ZSA8PSAxICYmIGl0ZW1zLnNpemUoKSAmJgotICAgICAgICAoaXRlbXNb
MF0tPmlkKCkgPT0gSURfT1BUSU9OKSApIHsKKyAgICAgICAgKGl0ZW1zWzBdLT5oYXNMb2NhbE5h
bWUoSFRNTE5hbWVzOjpvcHRpb24oKSkpKSB7CiAgICAgICAgIEhUTUxPcHRpb25FbGVtZW50SW1w
bCAqb3B0aW9uID0gc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnRJbXBsKj4oaXRlbXNbMF0p
OwogICAgICAgICBpZiAob3B0aW9uLT52YWx1ZSgpLmlzTnVsbCgpKQogICAgICAgICAgICAgZW5j
b2RlZF92YWx1ZXMuYXBwZW5kRGF0YShuYW1lKCksIG9wdGlvbi0+dGV4dCgpLnN0cmluZygpLnN0
cmlwV2hpdGVTcGFjZSgpKTsKQEAgLTI5NzcsNyArMjk3Niw3IEBAIGludCBIVE1MU2VsZWN0RWxl
bWVudEltcGw6Om9wdGlvblRvTGlzdEkKICAgICBmb3IgKDsKICAgICAgICAgIG9wdGlvbkluZGV4
MiA8IGludChpdGVtcy5zaXplKCkpICYmIG9wdGlvbkluZGV4MiA8PSBvcHRpb25JbmRleDsKICAg
ICAgICAgIGxpc3RJbmRleCsrKSB7IC8vIG5vdCBhIHR5cG8hCi0gICAgICAgIGlmIChpdGVtc1ts
aXN0SW5kZXhdLT5pZCgpID09IElEX09QVElPTikKKyAgICAgICAgaWYgKGl0ZW1zW2xpc3RJbmRl
eF0tPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9wdGlvbigpKSkKICAgICAgICAgICAgIG9wdGlv
bkluZGV4MisrOwogICAgIH0KICAgICBsaXN0SW5kZXgtLTsKQEAgLTI5ODgsMTMgKzI5ODcsMTMg
QEAgaW50IEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6bGlzdFRvT3B0aW9uSQogewogICAgIFFNZW1B
cnJheTxIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbCo+IGl0ZW1zID0gbGlzdEl0ZW1zKCk7CiAg
ICAgaWYgKGxpc3RJbmRleCA8IDAgfHwgbGlzdEluZGV4ID49IGludChpdGVtcy5zaXplKCkpIHx8
Ci0gICAgICAgIGl0ZW1zW2xpc3RJbmRleF0tPmlkKCkgIT0gSURfT1BUSU9OKQorICAgICAgICAh
aXRlbXNbbGlzdEluZGV4XS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpKQogICAg
ICAgICByZXR1cm4gLTE7CiAKICAgICBpbnQgb3B0aW9uSW5kZXggPSAwOyAvLyBhY3R1YWwgaW5k
ZXggb2Ygb3B0aW9uIG5vdCBjb3VudGluZyBPUFRHUk9VUCBlbnRyaWVzIHRoYXQgbWF5IGJlIGlu
IGxpc3QKICAgICBpbnQgaTsKICAgICBmb3IgKGkgPSAwOyBpIDwgbGlzdEluZGV4OyBpKyspCi0g
ICAgICAgIGlmIChpdGVtc1tpXS0+aWQoKSA9PSBJRF9PUFRJT04pCisgICAgICAgIGlmIChpdGVt
c1tpXS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpKQogICAgICAgICAgICAgb3B0
aW9uSW5kZXgrKzsKICAgICByZXR1cm4gb3B0aW9uSW5kZXg7CiB9CkBAIC0zMDIwLDEzICszMDE5
LDEzIEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnRJbXBsOjpyZWNhbGNMaXN0SXQKICAgICBtX2xp
c3RJdGVtcy5yZXNpemUoMCk7CiAgICAgSFRNTE9wdGlvbkVsZW1lbnRJbXBsKiBmb3VuZFNlbGVj
dGVkID0gMDsKICAgICB3aGlsZShjdXJyZW50KSB7Ci0gICAgICAgIGlmIChjdXJyZW50LT5pZCgp
ID09IElEX09QVEdST1VQICYmIGN1cnJlbnQtPmZpcnN0Q2hpbGQoKSkgeworICAgICAgICBpZiAo
Y3VycmVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9wdGdyb3VwKCkpICYmIGN1cnJlbnQtPmZp
cnN0Q2hpbGQoKSkgewogICAgICAgICAgICAgLy8gIyMjIHdoYXQgaWYgb3B0Z3JvdXAgY29udGFp
bnMganVzdCBjb21tZW50cz8gZG9uJ3Qgd2FudCBvbmUgb2Ygbm8gb3B0aW9ucyBpbiBpdC4uLgog
ICAgICAgICAgICAgbV9saXN0SXRlbXMucmVzaXplKG1fbGlzdEl0ZW1zLnNpemUoKSsxKTsKICAg
ICAgICAgICAgIG1fbGlzdEl0ZW1zW21fbGlzdEl0ZW1zLnNpemUoKS0xXSA9IHN0YXRpY19jYXN0
PEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKj4oY3VycmVudCk7CiAgICAgICAgICAgICBjdXJy
ZW50ID0gY3VycmVudC0+Zmlyc3RDaGlsZCgpOwogICAgICAgICB9Ci0gICAgICAgIGlmIChjdXJy
ZW50LT5pZCgpID09IElEX09QVElPTikgeworICAgICAgICBpZiAoY3VycmVudC0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6Om9wdGlvbigpKSkgewogICAgICAgICAgICAgbV9saXN0SXRlbXMucmVzaXpl
KG1fbGlzdEl0ZW1zLnNpemUoKSsxKTsKICAgICAgICAgICAgIG1fbGlzdEl0ZW1zW21fbGlzdEl0
ZW1zLnNpemUoKS0xXSA9IHN0YXRpY19jYXN0PEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKj4o
Y3VycmVudCk7CiAgICAgICAgICAgICBpZiAoIWZvdW5kU2VsZWN0ZWQgJiYgIW1fbXVsdGlwbGUg
JiYgbV9zaXplIDw9IDEpIHsKQEAgLTMwNjgsNyArMzA2Nyw3IEBAIHZvaWQgSFRNTFNlbGVjdEVs
ZW1lbnRJbXBsOjpyZXNldCgpCiAgICAgUU1lbUFycmF5PEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJ
bXBsKj4gaXRlbXMgPSBsaXN0SXRlbXMoKTsKICAgICB1aW50IGk7CiAgICAgZm9yIChpID0gMDsg
aSA8IGl0ZW1zLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIGlmIChpdGVtc1tpXS0+aWQoKSA9PSBJ
RF9PUFRJT04pIHsKKyAgICAgICAgaWYgKGl0ZW1zW2ldLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVz
OjpvcHRpb24oKSkpIHsKICAgICAgICAgICAgIEhUTUxPcHRpb25FbGVtZW50SW1wbCAqb3B0aW9u
ID0gc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnRJbXBsKj4oaXRlbXNbaV0pOwogICAgICAg
ICAgICAgYm9vbCBzZWxlY3RlZCA9ICghb3B0aW9uLT5nZXRBdHRyaWJ1dGUoQVRUUl9TRUxFQ1RF
RCkuaXNOdWxsKCkpOwogICAgICAgICAgICAgb3B0aW9uLT5zZXRTZWxlY3RlZChzZWxlY3RlZCk7
CkBAIC0zMDg2LDcgKzMwODUsNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6bm90aWZ5
T3B0aW9uCiAgICAgICAgIFFNZW1BcnJheTxIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbCo+IGl0
ZW1zID0gbGlzdEl0ZW1zKCk7CiAgICAgICAgIHVpbnQgaTsKICAgICAgICAgZm9yIChpID0gMDsg
aSA8IGl0ZW1zLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAoaXRlbXNbaV0tPmlkKCkg
PT0gSURfT1BUSU9OKQorICAgICAgICAgICAgaWYgKGl0ZW1zW2ldLT5oYXNMb2NhbE5hbWUoSFRN
TE5hbWVzOjpvcHRpb24oKSkpCiAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTE9wdGlv
bkVsZW1lbnRJbXBsKj4oaXRlbXNbaV0pLT5tX3NlbGVjdGVkID0gKGl0ZW1zW2ldID09IHNlbGVj
dGVkT3B0aW9uKTsKICAgICAgICAgfQogICAgIH0KQEAgLTMxMzMsNyArMzEzMiw3IEBAIHZvaWQg
SFRNTFNlbGVjdEVsZW1lbnRJbXBsOjpzZXRTaXplKGxvbmcKIC8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
IAogSFRNTEtleWdlbkVsZW1lbnRJbXBsOjpIVE1MS2V5Z2VuRWxlbWVudEltcGwoRG9jdW1lbnRQ
dHIqIGRvYywgSFRNTEZvcm1FbGVtZW50SW1wbCogZikKLSAgICA6IEhUTUxTZWxlY3RFbGVtZW50
SW1wbChkb2MsIGYpCisgICAgOiBIVE1MU2VsZWN0RWxlbWVudEltcGwoSFRNTE5hbWVzOjprZXln
ZW4oKSwgZG9jLCBmKQogewogICAgIFFTdHJpbmdMaXN0IGtleXMgPSBLU1NMS2V5R2VuOjpzdXBw
b3J0ZWRLZXlTaXplcygpOwogICAgIGZvciAoUVN0cmluZ0xpc3Q6Okl0ZXJhdG9yIGkgPSBrZXlz
LmJlZ2luKCk7IGkgIT0ga2V5cy5lbmQoKTsgKytpKSB7CkBAIC0zMTQzLDExICszMTQyLDYgQEAg
SFRNTEtleWdlbkVsZW1lbnRJbXBsOjpIVE1MS2V5Z2VuRWxlbWVudAogICAgIH0KIH0KIAotTm9k
ZUltcGw6OklkIEhUTUxLZXlnZW5FbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVy
biBJRF9LRVlHRU47Ci19Ci0KIERPTVN0cmluZyBIVE1MS2V5Z2VuRWxlbWVudEltcGw6OnR5cGUo
KSBjb25zdAogewogICAgIHJldHVybiAia2V5Z2VuIjsKQEAgLTMyMDIsNyArMzE5Niw3IEBAIGJv
b2wgSFRNTEtleWdlbkVsZW1lbnRJbXBsOjphcHBlbmRGb3JtRGEKIC8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KIAogSFRNTE9wdEdyb3VwRWxlbWVudEltcGw6OkhUTUxPcHRHcm91cEVsZW1lbnRJbXBsKERv
Y3VtZW50UHRyICpkb2MsIEhUTUxGb3JtRWxlbWVudEltcGwgKmYpCi0gICAgOiBIVE1MR2VuZXJp
Y0Zvcm1FbGVtZW50SW1wbChkb2MsIGYpCisgICAgOiBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1w
bChIVE1MTmFtZXM6Om9wdGdyb3VwKCksIGRvYywgZikKIHsKIH0KIApAQCAtMzIxNSwxMSArMzIw
OSw2IEBAIGJvb2wgSFRNTE9wdEdyb3VwRWxlbWVudEltcGw6OmlzRm9jdXNhYmwKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MT3B0R3JvdXBFbGVtZW50SW1wbDo6aWQo
KSBjb25zdAotewotICAgIHJldHVybiBJRF9PUFRHUk9VUDsKLX0KLQogRE9NU3RyaW5nIEhUTUxP
cHRHcm91cEVsZW1lbnRJbXBsOjp0eXBlKCkgY29uc3QKIHsKICAgICByZXR1cm4gIm9wdGdyb3Vw
IjsKQEAgLTMyNzMsNyArMzI2Miw3IEBAIHZvaWQgSFRNTE9wdEdyb3VwRWxlbWVudEltcGw6OnBh
cnNlTWFwcGUKIHZvaWQgSFRNTE9wdEdyb3VwRWxlbWVudEltcGw6OnJlY2FsY1NlbGVjdE9wdGlv
bnMoKQogewogICAgIE5vZGVJbXBsICpzZWxlY3QgPSBwYXJlbnROb2RlKCk7Ci0gICAgd2hpbGUg
KHNlbGVjdCAmJiBzZWxlY3QtPmlkKCkgIT0gSURfU0VMRUNUKQorICAgIHdoaWxlIChzZWxlY3Qg
JiYgIXNlbGVjdC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnNlbGVjdCgpKSkKICAgICAgICAgc2Vs
ZWN0ID0gc2VsZWN0LT5wYXJlbnROb2RlKCk7CiAgICAgaWYgKHNlbGVjdCkKICAgICAgICAgc3Rh
dGljX2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnRJbXBsKj4oc2VsZWN0KS0+c2V0UmVjYWxjTGlzdEl0
ZW1zKCk7CkBAIC0zMjkyLDcgKzMyODEsNyBAQCB2b2lkIEhUTUxPcHRHcm91cEVsZW1lbnRJbXBs
OjpzZXRMYWJlbChjCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxPcHRpb25FbGVtZW50SW1w
bDo6SFRNTE9wdGlvbkVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIEhUTUxGb3JtRWxlbWVu
dEltcGwgKmYpCi0gICAgOiBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbChkb2MsIGYpCisgICAg
OiBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbChIVE1MTmFtZXM6Om9wdGlvbigpLCBkb2MsIGYp
CiB7CiAgICAgbV9zZWxlY3RlZCA9IGZhbHNlOwogfQpAQCAtMzMwMiwxMSArMzI5MSw2IEBAIGJv
b2wgSFRNTE9wdGlvbkVsZW1lbnRJbXBsOjppc0ZvY3VzYWJsZSgKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MT3B0aW9uRWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gSURfT1BUSU9OOwotfQotCiBET01TdHJpbmcgSFRNTE9wdGlvbkVsZW1lbnRJ
bXBsOjp0eXBlKCkgY29uc3QKIHsKICAgICByZXR1cm4gIm9wdGlvbiI7CkBAIC0zMzUzLDggKzMz
MzcsNyBAQCBsb25nIEhUTUxPcHRpb25FbGVtZW50SW1wbDo6aW5kZXgoKSBjb25zCiAgICAgaW50
IGwgPSBpdGVtcy5jb3VudCgpOwogICAgIGludCBvcHRpb25JbmRleCA9IDA7CiAgICAgZm9yKGlu
dCBpID0gMDsgaSA8IGw7IGkrKykgewotICAgICAgICBpZihpdGVtc1tpXS0+aWQoKSA9PSBJRF9P
UFRJT04pCi0gICAgICAgIHsKKyAgICAgICAgaWYgKGl0ZW1zW2ldLT5oYXNMb2NhbE5hbWUoSFRN
TE5hbWVzOjpvcHRpb24oKSkpIHsKICAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxIVE1MT3B0
aW9uRWxlbWVudEltcGwqPihpdGVtc1tpXSkgPT0gdGhpcykKICAgICAgICAgICAgICAgICByZXR1
cm4gb3B0aW9uSW5kZXg7CiAgICAgICAgICAgICBvcHRpb25JbmRleCsrOwpAQCAtMzQxOSw3ICsz
NDAyLDcgQEAgdm9pZCBIVE1MT3B0aW9uRWxlbWVudEltcGw6OmNoaWxkcmVuQ2hhbgogSFRNTFNl
bGVjdEVsZW1lbnRJbXBsICpIVE1MT3B0aW9uRWxlbWVudEltcGw6OmdldFNlbGVjdCgpIGNvbnN0
CiB7CiAgICAgTm9kZUltcGwgKnNlbGVjdCA9IHBhcmVudE5vZGUoKTsKLSAgICB3aGlsZSAoc2Vs
ZWN0ICYmIHNlbGVjdC0+aWQoKSAhPSBJRF9TRUxFQ1QpCisgICAgd2hpbGUgKHNlbGVjdCAmJiAh
c2VsZWN0LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c2VsZWN0KCkpKQogICAgICAgICBzZWxlY3Qg
PSBzZWxlY3QtPnBhcmVudE5vZGUoKTsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTFNlbGVj
dEVsZW1lbnRJbXBsKj4oc2VsZWN0KTsKIH0KQEAgLTM0NDcsNyArMzQzMCw3IEBAIHZvaWQgSFRN
TE9wdGlvbkVsZW1lbnRJbXBsOjpzZXRMYWJlbChjb24KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAog
SFRNTFRleHRBcmVhRWxlbWVudEltcGw6OkhUTUxUZXh0QXJlYUVsZW1lbnRJbXBsKERvY3VtZW50
UHRyICpkb2MsIEhUTUxGb3JtRWxlbWVudEltcGwgKmYpCi0gICAgOiBIVE1MR2VuZXJpY0Zvcm1F
bGVtZW50SW1wbChkb2MsIGYpLCBtX3ZhbHVlSXNWYWxpZChmYWxzZSksIG1fdmFsdWVNYXRjaGVz
UmVuZGVyZXIoZmFsc2UpCisgICAgOiBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbChIVE1MTmFt
ZXM6OnRleHRhcmVhKCksIGRvYywgZiksIG1fdmFsdWVJc1ZhbGlkKGZhbHNlKSwgbV92YWx1ZU1h
dGNoZXNSZW5kZXJlcihmYWxzZSkKIHsKICAgICAvLyBEVEQgcmVxdWlyZXMgcm93cyAmIGNvbHMg
YmUgc3BlY2lmaWVkLCBidXQgd2Ugd2lsbCBwcm92aWRlIHJlYXNvbmFibGUgZGVmYXVsdHMKICAg
ICBtX3Jvd3MgPSAyOwpAQCAtMzQ2MCwxMSArMzQ0Myw2IEBAIEhUTUxUZXh0QXJlYUVsZW1lbnRJ
bXBsOjp+SFRNTFRleHRBcmVhRWwKICAgICBpZiAoZ2V0RG9jdW1lbnQoKSkgZ2V0RG9jdW1lbnQo
KS0+ZGVyZWdpc3Rlck1haW50YWluc1N0YXRlKHRoaXMpOwogfQogCi1Ob2RlSW1wbDo6SWQgSFRN
TFRleHRBcmVhRWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfVEVYVEFS
RUE7Ci19Ci0KIERPTVN0cmluZyBIVE1MVGV4dEFyZWFFbGVtZW50SW1wbDo6dHlwZSgpIGNvbnN0
CiB7CiAgICAgcmV0dXJuICJ0ZXh0YXJlYSI7CkBAIC0zNzE0LDE3ICszNjkyLDEyIEBAIHZvaWQg
SFRNTFRleHRBcmVhRWxlbWVudEltcGw6OnNldFJvd3MobG8KIC8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
IAogSFRNTElzSW5kZXhFbGVtZW50SW1wbDo6SFRNTElzSW5kZXhFbGVtZW50SW1wbChEb2N1bWVu
dFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmKQotICAgIDogSFRNTElucHV0RWxlbWVu
dEltcGwoZG9jLCBmKQorICAgIDogSFRNTElucHV0RWxlbWVudEltcGwoSFRNTE5hbWVzOjppc2lu
ZGV4KCksIGRvYywgZikKIHsKICAgICBtX3R5cGUgPSBURVhUOwogICAgIHNldE92ZXJyaWRlTmFt
ZSgiaXNpbmRleCIpOwogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTElzSW5kZXhFbGVtZW50SW1wbDo6
aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9JU0lOREVYOwotfQotCiB2b2lkIEhUTUxJc0lu
ZGV4RWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwq
IGF0dHIpCiB7CiAgICAgc3dpdGNoKGF0dHItPmlkKCkpCkluZGV4OiBraHRtbC9odG1sL2h0bWxf
Zm9ybWltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9o
dG1sL2h0bWxfZm9ybWltcGwuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS43NQpkaWZmIC11IC1w
IC1yMS43NSBraHRtbC9odG1sL2h0bWxfZm9ybWltcGwuaAotLS0ga2h0bWwvaHRtbC9odG1sX2Zv
cm1pbXBsLmgJMjQgSnVuIDIwMDUgMDU6NTM6MjcgLTAwMDAJMS43NQorKysga2h0bWwvaHRtbC9o
dG1sX2Zvcm1pbXBsLmgJNSBKdWwgMjAwNSAyMzoyMDozNyAtMDAwMApAQCAtNjcsNyArNjcsOCBA
QCBwdWJsaWM6CiAgICAgSFRNTEZvcm1FbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKTsKICAg
ICB2aXJ0dWFsIH5IVE1MRm9ybUVsZW1lbnRJbXBsKCk7CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkg
Y29uc3Q7CisgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29u
c3QgeyByZXR1cm4gVGFnU3RhdHVzUmVxdWlyZWQ7IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQcmlv
cml0eSgpIGNvbnN0IHsgcmV0dXJuIDM7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBhdHRhY2goKTsK
ICAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoKCk7CkBAIC0xNjEsOSArMTYyLDEyIEBAIGNsYXNzIEhU
TUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsIDogcHVibGkKICAgICBmcmllbmQgY2xhc3Mga2h0bWw6
OlJlbmRlckZvcm1FbGVtZW50OwogCiBwdWJsaWM6Ci0gICAgSFRNTEdlbmVyaWNGb3JtRWxlbWVu
dEltcGwoRG9jdW1lbnRQdHIgKmRvYywgSFRNTEZvcm1FbGVtZW50SW1wbCAqZiA9IDApOworICAg
IEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUs
IERvY3VtZW50UHRyICpkb2MsIEhUTUxGb3JtRWxlbWVudEltcGwgKmYgPSAwKTsKICAgICB2aXJ0
dWFsIH5IVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbCgpOwogCisgICAgdmlydHVhbCBIVE1MVGFn
U3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzUmVxdWly
ZWQ7IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDE7IH0K
KwogICAgIEhUTUxGb3JtRWxlbWVudEltcGwgKmZvcm0oKSB7IHJldHVybiBtX2Zvcm07IH0KIAog
ICAgIHZpcnR1YWwgRE9NU3RyaW5nIHR5cGUoKSBjb25zdCA9IDA7CkBAIC0yMzUsNyArMjM5LDYg
QEAgY2xhc3MgSFRNTEJ1dHRvbkVsZW1lbnRJbXBsIDogcHVibGljIEhUTQogewogcHVibGljOgog
ICAgIEhUTUxCdXR0b25FbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1l
bnRJbXBsICpmID0gMCk7Ci0KICAgICB2aXJ0dWFsIH5IVE1MQnV0dG9uRWxlbWVudEltcGwoKTsK
IAogICAgIGVudW0gdHlwZUVudW0gewpAQCAtMjQ0LDcgKzI0Nyw2IEBAIHB1YmxpYzoKICAgICAg
ICAgQlVUVE9OCiAgICAgfTsKIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKICAgICBET01T
dHJpbmcgdHlwZSgpIGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmli
dXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIpOwpAQCAtMjgwLDExICsyODIsMTEgQEAgY2xh
c3MgSFRNTEZpZWxkU2V0RWxlbWVudEltcGwgOiBwdWJsaWMgSAogewogcHVibGljOgogICAgIEhU
TUxGaWVsZFNldEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIEhUTUxGb3JtRWxlbWVudElt
cGwgKmYgPSAwKTsKLQogICAgIHZpcnR1YWwgfkhUTUxGaWVsZFNldEVsZW1lbnRJbXBsKCk7Ci0K
LSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CiAgICAgCisgICAgdmlydHVhbCBpbnQgdGFnUHJp
b3JpdHkoKSBjb25zdCB7IHJldHVybiAzOyB9CisJdmlydHVhbCBib29sIGNoZWNrRFREKGNvbnN0
IE5vZGVJbXBsKiBuZXdDaGlsZCk7CisKICAgICB2aXJ0dWFsIGJvb2wgaXNGb2N1c2FibGUoKSBj
b25zdDsKICAgICAKICAgICB2aXJ0dWFsIGtodG1sOjpSZW5kZXJPYmplY3QgKmNyZWF0ZVJlbmRl
cmVyKFJlbmRlckFyZW5hICosIGtodG1sOjpSZW5kZXJTdHlsZSAqKTsKQEAgLTMyNiw5ICszMjgs
MTIgQEAgcHVibGljOgogICAgIH07CiAKICAgICBIVE1MSW5wdXRFbGVtZW50SW1wbChEb2N1bWVu
dFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmID0gMCk7CisgICAgSFRNTElucHV0RWxl
bWVudEltcGwoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnRQdHIgKmRvYywg
SFRNTEZvcm1FbGVtZW50SW1wbCAqZiA9IDApOwogICAgIHZpcnR1YWwgfkhUTUxJbnB1dEVsZW1l
bnRJbXBsKCk7CisgICAgdm9pZCBpbml0KCk7CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7
CisgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyBy
ZXR1cm4gVGFnU3RhdHVzRm9yYmlkZGVuOyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHko
KSBjb25zdCB7IHJldHVybiAwOyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNFbnVtZXJhdGFibGUo
KSBjb25zdCB7IHJldHVybiBpbnB1dFR5cGUoKSAhPSBJTUFHRTsgfQogCkBAIC00NTksOSArNDY0
LDkgQEAgcHVibGljOgogICAgIEhUTUxMYWJlbEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2Mp
OwogICAgIHZpcnR1YWwgfkhUTUxMYWJlbEVsZW1lbnRJbXBsKCk7CiAKKyAgICB2aXJ0dWFsIGlu
dCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDU7IH0KKwogICAgIHZpcnR1YWwgYm9vbCBp
c0ZvY3VzYWJsZSgpIGNvbnN0OwotICAgIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKIAog
ICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBs
ICphdHRyKTsKIApAQCAtNDk2LDcgKzUwMSw2IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9v
bCBpc0ZvY3VzYWJsZSgpIGNvbnN0OwogICAgIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsK
ICAgICB2aXJ0dWFsIGtodG1sOjpSZW5kZXJPYmplY3QgKmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFy
ZW5hICosIGtodG1sOjpSZW5kZXJTdHlsZSAqKTsKIAogICAgIHZpcnR1YWwgRE9NU3RyaW5nIHR5
cGUoKSBjb25zdDsKQEAgLTUyNSw5ICs1MjksMTMgQEAgY2xhc3MgSFRNTFNlbGVjdEVsZW1lbnRJ
bXBsIDogcHVibGljIEhUTQogCiBwdWJsaWM6CiAgICAgSFRNTFNlbGVjdEVsZW1lbnRJbXBsKERv
Y3VtZW50UHRyICpkb2MsIEhUTUxGb3JtRWxlbWVudEltcGwgKmYgPSAwKTsKKyAgICBIVE1MU2Vs
ZWN0RWxlbWVudEltcGwoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnRQdHIg
KmRvYywgSFRNTEZvcm1FbGVtZW50SW1wbCAqZiA9IDApOwogICAgIH5IVE1MU2VsZWN0RWxlbWVu
dEltcGwoKTsKKyAgICB2b2lkIGluaXQoKTsKKworICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5
KCkgY29uc3QgeyByZXR1cm4gNjsgfQorCXZpcnR1YWwgYm9vbCBjaGVja0RURChjb25zdCBOb2Rl
SW1wbCogbmV3Q2hpbGQpOwogCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwogICAgIERPTVN0
cmluZyB0eXBlKCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgcmVjYWxjU3R5bGUoIFN0eWxl
Q2hhbmdlICk7CkBAIC02MTQsNyArNjIyLDcgQEAgY2xhc3MgSFRNTEtleWdlbkVsZW1lbnRJbXBs
IDogcHVibGljIEhUTQogcHVibGljOgogICAgIEhUTUxLZXlnZW5FbGVtZW50SW1wbChEb2N1bWVu
dFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmID0gMCk7CiAKLSAgICB2aXJ0dWFsIElk
IGlkKCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVy
biAwOyB9CiAKICAgICBET01TdHJpbmcgdHlwZSgpIGNvbnN0OwogCkBAIC02MzYsNyArNjQ0LDgg
QEAgcHVibGljOgogICAgIEhUTUxPcHRHcm91cEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2Ms
IEhUTUxGb3JtRWxlbWVudEltcGwgKmYgPSAwKTsKICAgICB2aXJ0dWFsIH5IVE1MT3B0R3JvdXBF
bGVtZW50SW1wbCgpOwogCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OworCXZpcnR1YWwgYm9v
bCBjaGVja0RURChjb25zdCBOb2RlSW1wbCogbmV3Q2hpbGQpIHsgcmV0dXJuIG5ld0NoaWxkLT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpOyB9CisKICAgICBET01TdHJpbmcgdHlwZSgp
IGNvbnN0OwogCiAgICAgdmlydHVhbCBib29sIGlzRm9jdXNhYmxlKCkgY29uc3Q7CkBAIC02NjQs
OSArNjczLDEyIEBAIGNsYXNzIEhUTUxPcHRpb25FbGVtZW50SW1wbCA6IHB1YmxpYyBIVE0KIHB1
YmxpYzoKICAgICBIVE1MT3B0aW9uRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgSFRNTEZv
cm1FbGVtZW50SW1wbCAqZiA9IDApOwogCisgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRh
Z1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzT3B0aW9uYWw7IH0KKyAgICB2
aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDI7IH0KKwl2aXJ0dWFsIGJv
b2wgY2hlY2tEVEQoY29uc3QgTm9kZUltcGwqIG5ld0NoaWxkKSB7IHJldHVybiBuZXdDaGlsZC0+
aXNUZXh0Tm9kZSgpOyB9CisKICAgICB2aXJ0dWFsIGJvb2wgaXNGb2N1c2FibGUoKSBjb25zdDsK
LSAgICAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CisKICAgICBET01TdHJpbmcgdHlwZSgp
IGNvbnN0OwogCiAgICAgRE9NU3RyaW5nIHRleHQoKSBjb25zdDsKQEAgLTcxNCwxMCArNzI2LDkg
QEAgcHVibGljOgogICAgIEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2Ms
IEhUTUxGb3JtRWxlbWVudEltcGwgKmYgPSAwKTsKICAgICB+SFRNTFRleHRBcmVhRWxlbWVudElt
cGwoKTsKIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKKwl2aXJ0dWFsIGJvb2wgY2hlY2tE
VEQoY29uc3QgTm9kZUltcGwqIG5ld0NoaWxkKSB7IHJldHVybiBuZXdDaGlsZC0+aXNUZXh0Tm9k
ZSgpOyB9CiAKICAgICBsb25nIGNvbHMoKSBjb25zdCB7IHJldHVybiBtX2NvbHM7IH0KLQogICAg
IGxvbmcgcm93cygpIGNvbnN0IHsgcmV0dXJuIG1fcm93czsgfQogCiAgICAgV3JhcE1ldGhvZCB3
cmFwKCkgY29uc3QgeyByZXR1cm4gbV93cmFwOyB9CkBAIC03ODUsNyArNzk2LDggQEAgY2xhc3Mg
SFRNTElzSW5kZXhFbGVtZW50SW1wbCA6IHB1YmxpYyBIVAogcHVibGljOgogICAgIEhUTUxJc0lu
ZGV4RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgSFRNTEZvcm1FbGVtZW50SW1wbCAqZiA9
IDApOwogCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OworICAgIHZpcnR1YWwgSFRNTFRhZ1N0
YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c0ZvcmJpZGRl
bjsgfQorICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMDsgfQog
CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUlt
cGwgKmF0dHIpOwogCkluZGV4OiBraHRtbC9odG1sL2h0bWxfaGVhZGltcGwuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbF9oZWFkaW1wbC5j
cHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNTAKZGlmZiAtdSAtcCAtcjEuNTAga2h0bWwvaHRt
bC9odG1sX2hlYWRpbXBsLmNwcAotLS0ga2h0bWwvaHRtbC9odG1sX2hlYWRpbXBsLmNwcAkyMiBK
dW4gMjAwNSAxODoyMjowMSAtMDAwMAkxLjUwCisrKyBraHRtbC9odG1sL2h0bWxfaGVhZGltcGwu
Y3BwCTUgSnVsIDIwMDUgMjM6MjA6MzggLTAwMDAKQEAgLTQ2LDcgKzQ2LDcgQEAgdXNpbmcgbmFt
ZXNwYWNlIERPTTsKIHVzaW5nIG5hbWVzcGFjZSBraHRtbDsKIAogSFRNTEJhc2VFbGVtZW50SW1w
bDo6SFRNTEJhc2VFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAgIDogSFRNTEVsZW1l
bnRJbXBsKGRvYykKKyAgICA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6OmJhc2UoKSwgZG9j
KQogewogfQogCkBAIC01NCwxMSArNTQsNiBAQCBIVE1MQmFzZUVsZW1lbnRJbXBsOjp+SFRNTEJh
c2VFbGVtZW50SW1wCiB7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MQmFzZUVsZW1lbnRJbXBsOjpp
ZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0JBU0U7Ci19Ci0KIHZvaWQgSFRNTEJhc2VFbGVt
ZW50SW1wbDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqYXR0cikK
IHsKICAgICBzd2l0Y2goYXR0ci0+aWQoKSkKQEAgLTExOSw3ICsxMTQsNyBAQCB2b2lkIEhUTUxC
YXNlRWxlbWVudEltcGw6OnNldFRhcmdldChjb25zCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhU
TUxMaW5rRWxlbWVudEltcGw6OkhUTUxMaW5rRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykK
LSAgICA6IEhUTUxFbGVtZW50SW1wbChkb2MpCisgICAgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5h
bWVzOjpsaW5rKCksIGRvYykKIHsKICAgICBtX3NoZWV0ID0gMDsKICAgICBtX2xvYWRpbmcgPSBm
YWxzZTsKQEAgLTEzNCwxMSArMTI5LDYgQEAgSFRNTExpbmtFbGVtZW50SW1wbDo6fkhUTUxMaW5r
RWxlbWVudEltcAogICAgIGlmKG1fY2FjaGVkU2hlZXQpIG1fY2FjaGVkU2hlZXQtPmRlcmVmKHRo
aXMpOwogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTExpbmtFbGVtZW50SW1wbDo6aWQoKSBjb25zdAot
ewotICAgIHJldHVybiBJRF9MSU5LOwotfQotCiB2b2lkIEhUTUxMaW5rRWxlbWVudEltcGw6OnNl
dERpc2FibGVkU3RhdGUoYm9vbCBfZGlzYWJsZWQpCiB7CiAgICAgaW50IG9sZERpc2FibGVkU3Rh
dGUgPSBtX2Rpc2FibGVkU3RhdGU7CkBAIC00MjMsNyArNDEzLDcgQEAgdm9pZCBIVE1MTGlua0Vs
ZW1lbnRJbXBsOjpzZXRUeXBlKGNvbnN0IAogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUhUTUxN
ZXRhRWxlbWVudEltcGw6OkhUTUxNZXRhRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykgOiBI
VE1MRWxlbWVudEltcGwoZG9jKQorSFRNTE1ldGFFbGVtZW50SW1wbDo6SFRNTE1ldGFFbGVtZW50
SW1wbChEb2N1bWVudFB0ciAqZG9jKSA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6Om1ldGEo
KSwgZG9jKQogewogfQogCkBAIC00MzEsMTEgKzQyMSw2IEBAIEhUTUxNZXRhRWxlbWVudEltcGw6
On5IVE1MTWV0YUVsZW1lbnRJbXAKIHsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxNZXRhRWxlbWVu
dEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfTUVUQTsKLX0KLQogdm9pZCBIVE1M
TWV0YUVsZW1lbnRJbXBsOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBs
ICphdHRyKQogewogICAgIHN3aXRjaChhdHRyLT5pZCgpKQpAQCAtNTEyLDcgKzQ5Nyw3IEBAIHZv
aWQgSFRNTE1ldGFFbGVtZW50SW1wbDo6c2V0U2NoZW1lKGNvbnMKIC8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KIAogSFRNTFNjcmlwdEVsZW1lbnRJbXBsOjpIVE1MU2NyaXB0RWxlbWVudEltcGwoRG9jdW1l
bnRQdHIgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50SW1wbChkb2MpLCBtX2NhY2hlZFNjcmlwdCgw
KSwgbV9jcmVhdGVkQnlQYXJzZXIoZmFsc2UpLCBtX2V2YWx1YXRlZChmYWxzZSkKKyAgICA6IEhU
TUxFbGVtZW50SW1wbChIVE1MTmFtZXM6OnNjcmlwdCgpLCBkb2MpLCBtX2NhY2hlZFNjcmlwdCgw
KSwgbV9jcmVhdGVkQnlQYXJzZXIoZmFsc2UpLCBtX2V2YWx1YXRlZChmYWxzZSkKIHsKIH0KIApA
QCAtNTIyLDExICs1MDcsNiBAQCBIVE1MU2NyaXB0RWxlbWVudEltcGw6On5IVE1MU2NyaXB0RWxl
bWVuCiAgICAgICAgIG1fY2FjaGVkU2NyaXB0LT5kZXJlZih0aGlzKTsKIH0KIAotTm9kZUltcGw6
OklkIEhUTUxTY3JpcHRFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9T
Q1JJUFQ7Ci19Ci0KIGJvb2wgSFRNTFNjcmlwdEVsZW1lbnRJbXBsOjppc1VSTEF0dHJpYnV0ZShB
dHRyaWJ1dGVJbXBsICphdHRyKSBjb25zdAogewogICAgIHJldHVybiBhdHRyLT5pZCgpID09IEFU
VFJfU1JDOwpAQCAtNjk3LDcgKzY3Nyw3IEBAIHZvaWQgSFRNTFNjcmlwdEVsZW1lbnRJbXBsOjpz
ZXRUeXBlKGNvbnMKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1IVE1MU3R5bGVFbGVtZW50SW1w
bDo6SFRNTFN0eWxlRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykgOiBIVE1MRWxlbWVudElt
cGwoZG9jKQorSFRNTFN0eWxlRWxlbWVudEltcGw6OkhUTUxTdHlsZUVsZW1lbnRJbXBsKERvY3Vt
ZW50UHRyICpkb2MpIDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6c3R5bGUoKSwgZG9jKQog
ewogICAgIG1fc2hlZXQgPSAwOwogICAgIG1fbG9hZGluZyA9IGZhbHNlOwpAQCAtNzA4LDExICs2
ODgsNiBAQCBIVE1MU3R5bGVFbGVtZW50SW1wbDo6fkhUTUxTdHlsZUVsZW1lbnRJCiAgICAgaWYo
bV9zaGVldCkgbV9zaGVldC0+ZGVyZWYoKTsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxTdHlsZUVs
ZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX1NUWUxFOwotfQotCiAvLyBv
dGhlciBzdHVmZi4uLgogdm9pZCBIVE1MU3R5bGVFbGVtZW50SW1wbDo6cGFyc2VNYXBwZWRBdHRy
aWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqYXR0cikKIHsKQEAgLTgyNCw3ICs3OTksNyBAQCB2
b2lkIEhUTUxTdHlsZUVsZW1lbnRJbXBsOjpzZXRUeXBlKGNvbnN0CiAvLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCiAKIEhUTUxUaXRsZUVsZW1lbnRJbXBsOjpIVE1MVGl0bGVFbGVtZW50SW1wbChEb2N1bWVu
dFB0ciAqZG9jKQotICAgIDogSFRNTEVsZW1lbnRJbXBsKGRvYyksIG1fdGl0bGUoIiIpCisgICAg
OiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjp0aXRsZSgpLCBkb2MpLCBtX3RpdGxlKCIiKQog
ewogfQogCkBAIC04MzIsMTEgKzgwNyw2IEBAIEhUTUxUaXRsZUVsZW1lbnRJbXBsOjp+SFRNTFRp
dGxlRWxlbWVudEkKIHsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxUaXRsZUVsZW1lbnRJbXBsOjpp
ZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX1RJVExFOwotfQotCiB2b2lkIEhUTUxUaXRsZUVs
ZW1lbnRJbXBsOjppbnNlcnRlZEludG9Eb2N1bWVudCgpCiB7CiAgICAgSFRNTEVsZW1lbnRJbXBs
OjppbnNlcnRlZEludG9Eb2N1bWVudCgpOwpJbmRleDoga2h0bWwvaHRtbC9odG1sX2hlYWRpbXBs
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1s
X2hlYWRpbXBsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjAKZGlmZiAtdSAtcCAtcjEuMjAg
a2h0bWwvaHRtbC9odG1sX2hlYWRpbXBsLmgKLS0tIGtodG1sL2h0bWwvaHRtbF9oZWFkaW1wbC5o
CTE5IEp1biAyMDA1IDA1OjQ0OjI4IC0wMDAwCTEuMjAKKysrIGtodG1sL2h0bWwvaHRtbF9oZWFk
aW1wbC5oCTUgSnVsIDIwMDUgMjM6MjA6MzggLTAwMDAKQEAgLTQ5LDEwICs0OSwxMiBAQCBwdWJs
aWM6CiAgICAgSFRNTEJhc2VFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKTsKICAgICB+SFRN
TEJhc2VFbGVtZW50SW1wbCgpOwogCisgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1Jl
cXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzRm9yYmlkZGVuOyB9CisgICAgdmly
dHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAwOyB9CisKICAgICBET01TdHJp
bmcgaHJlZigpIGNvbnN0IHsgcmV0dXJuIG1faHJlZjsgfQogICAgIERPTVN0cmluZyB0YXJnZXQo
KSBjb25zdCB7IHJldHVybiBtX3RhcmdldDsgfQogCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0
OwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJ
bXBsICphdHRyKTsKICAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKICAg
ICB2aXJ0dWFsIHZvaWQgcmVtb3ZlZEZyb21Eb2N1bWVudCgpOwpAQCAtNzcsNyArNzksOCBAQCBw
dWJsaWM6CiAgICAgSFRNTExpbmtFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKTsKICAgICB+
SFRNTExpbmtFbGVtZW50SW1wbCgpOwogCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OworICAg
IHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJu
IFRhZ1N0YXR1c0ZvcmJpZGRlbjsgfQorICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29u
c3QgeyByZXR1cm4gMDsgfQogCiAgICAgYm9vbCBkaXNhYmxlZCgpIGNvbnN0OwogICAgIHZvaWQg
c2V0RGlzYWJsZWQoYm9vbCk7CkBAIC0xNTIsMTAgKzE1NSwxMSBAQCBjbGFzcyBIVE1MTWV0YUVs
ZW1lbnRJbXBsIDogcHVibGljIEhUTUxFCiB7CiBwdWJsaWM6CiAgICAgSFRNTE1ldGFFbGVtZW50
SW1wbChEb2N1bWVudFB0ciAqZG9jKTsKLQogICAgIH5IVE1MTWV0YUVsZW1lbnRJbXBsKCk7CiAK
LSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CisgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVu
ZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzRm9yYmlkZGVuOyB9Cisg
ICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAwOyB9CisKICAgICB2
aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqYXR0
cik7CiAgICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b0RvY3VtZW50KCk7CiAKQEAgLTE4NSwx
MyArMTg5LDE3IEBAIGNsYXNzIEhUTUxTY3JpcHRFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE0KIHB1
YmxpYzoKICAgICBIVE1MU2NyaXB0RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYyk7CiAgICAg
fkhUTUxTY3JpcHRFbGVtZW50SW1wbCgpOwotICAgIAorCisgICAgdmlydHVhbCBIVE1MVGFnU3Rh
dHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzUmVxdWlyZWQ7
IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDE7IH0KKwl2
aXJ0dWFsIGJvb2wgY2hlY2tEVEQoY29uc3QgTm9kZUltcGwqIG5ld0NoaWxkKSB7IHJldHVybiBu
ZXdDaGlsZC0+aXNUZXh0Tm9kZSgpOyB9CisKICAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJbnRv
RG9jdW1lbnQoKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlZEZyb21Eb2N1bWVudCgpOwogICAg
IHZpcnR1YWwgdm9pZCBub3RpZnlGaW5pc2hlZChraHRtbDo6Q2FjaGVkT2JqZWN0ICpmaW5pc2hl
ZE9iaik7CisKICAgICB2aXJ0dWFsIHZvaWQgY2hpbGRyZW5DaGFuZ2VkKCk7Ci0gICAgCi0gICAg
dmlydHVhbCBJZCBpZCgpIGNvbnN0OworCiAgICAgdmlydHVhbCBib29sIGlzVVJMQXR0cmlidXRl
KEF0dHJpYnV0ZUltcGwgKmF0dHIpIGNvbnN0OwogCiAgICAgdm9pZCBzZXRDcmVhdGVkQnlQYXJz
ZXIoYm9vbCBjcmVhdGVkQnlQYXJzZXIpIHsgbV9jcmVhdGVkQnlQYXJzZXIgPSBjcmVhdGVkQnlQ
YXJzZXI7IH0KQEAgLTIzMyw3ICsyNDEsOSBAQCBwdWJsaWM6CiAgICAgSFRNTFN0eWxlRWxlbWVu
dEltcGwoRG9jdW1lbnRQdHIgKmRvYyk7CiAgICAgfkhUTUxTdHlsZUVsZW1lbnRJbXBsKCk7CiAK
LSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CisgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVu
ZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzUmVxdWlyZWQ7IH0KKyAg
ICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDE7IH0KKwl2aXJ0dWFs
IGJvb2wgY2hlY2tEVEQoY29uc3QgTm9kZUltcGwqIG5ld0NoaWxkKSB7IHJldHVybiBuZXdDaGls
ZC0+aXNUZXh0Tm9kZSgpOyB9CiAKICAgICBTdHlsZVNoZWV0SW1wbCAqc2hlZXQoKSBjb25zdCB7
IHJldHVybiBtX3NoZWV0OyB9CiAKQEAgLTI2OCwxMCArMjc4LDkgQEAgY2xhc3MgSFRNTFRpdGxl
RWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTAogewogcHVibGljOgogICAgIEhUTUxUaXRsZUVsZW1l
bnRJbXBsKERvY3VtZW50UHRyICpkb2MpOwotCiAgICAgfkhUTUxUaXRsZUVsZW1lbnRJbXBsKCk7
CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CisJdmlydHVhbCBib29sIGNoZWNrRFREKGNv
bnN0IE5vZGVJbXBsKiBuZXdDaGlsZCkgeyByZXR1cm4gbmV3Q2hpbGQtPmlzVGV4dE5vZGUoKTsg
fQogCiAgICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b0RvY3VtZW50KCk7CiAgICAgdmlydHVh
bCB2b2lkIHJlbW92ZWRGcm9tRG9jdW1lbnQoKTsKSW5kZXg6IGtodG1sL2h0bWwvaHRtbF9pbWFn
ZWltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0
bWwvaHRtbF9pbWFnZWltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjQzCmRpZmYgLXUg
LXAgLXIxLjQzIGtodG1sL2h0bWwvaHRtbF9pbWFnZWltcGwuY3BwCi0tLSBraHRtbC9odG1sL2h0
bWxfaW1hZ2VpbXBsLmNwcAkyMSBKdW4gMjAwNSAyMjoyNzo1NSAtMDAwMAkxLjQzCisrKyBraHRt
bC9odG1sL2h0bWxfaW1hZ2VpbXBsLmNwcAk1IEp1bCAyMDA1IDIzOjIwOjM4IC0wMDAwCkBAIC01
MSw3ICs1MSw3IEBACiB1c2luZyBuYW1lc3BhY2UgRE9NOwogdXNpbmcgbmFtZXNwYWNlIGtodG1s
OwogCi0vLyNkZWZpbmUgSU5TVFJVTUVOVF9MQVlPVVRfU0NIRURVTElORyAxCisvLyAjZGVmaW5l
IElOU1RSVU1FTlRfTEFZT1VUX1NDSEVEVUxJTkcgMQogCiBIVE1MSW1hZ2VMb2FkZXI6OkhUTUxJ
bWFnZUxvYWRlcihFbGVtZW50SW1wbCogZWx0KQogOm1fZWxlbWVudChlbHQpLCBtX2ltYWdlKDAp
LCBtX2ZpcmVkTG9hZCh0cnVlKSwgbV9pbWFnZUNvbXBsZXRlKHRydWUpCkBAIC03NSw3ICs3NSw3
IEBAIHZvaWQgSFRNTEltYWdlTG9hZGVyOjp1cGRhdGVGcm9tRWxlbWVudCgKICAgICAgICAgcmV0
dXJuOwogCiAgICAgQXRvbWljU3RyaW5nIGF0dHI7Ci0gICAgaWYgKGVsZW1lbnQoKS0+aWQoKSA9
PSBJRF9PQkpFQ1QpCisgICAgaWYgKGVsZW1lbnQoKS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6
b2JqZWN0KCkpKQogICAgICAgICBhdHRyID0gZWxlbWVudCgpLT5nZXRBdHRyaWJ1dGUoQVRUUl9E
QVRBKTsKICAgICBlbHNlCiAgICAgICAgIGF0dHIgPSBlbGVtZW50KCktPmdldEF0dHJpYnV0ZShB
VFRSX1NSQyk7CkBAIC04Niw2ICs4NiwxMCBAQCB2b2lkIEhUTUxJbWFnZUxvYWRlcjo6dXBkYXRl
RnJvbUVsZW1lbnQoCiAgICAgICAgIG5ld0ltYWdlID0gZWxlbWVudCgpLT5nZXREb2N1bWVudCgp
LT5kb2NMb2FkZXIoKS0+cmVxdWVzdEltYWdlKGtodG1sOjpwYXJzZVVSTChhdHRyKSk7CiAKICAg
ICBpZiAobmV3SW1hZ2UgIT0gbV9pbWFnZSkgeworI2lmZGVmIElOU1RSVU1FTlRfTEFZT1VUX1ND
SEVEVUxJTkcKKyAgICAgICAgaWYgKCFkb2N1bWVudC0+b3duZXJFbGVtZW50KCkgJiYgbmV3SW1h
Z2UpCisgICAgICAgICAgICBwcmludGYoIkltYWdlIHJlcXVlc3RlZCBhdCAlZFxuIiwgZWxlbWVu
dCgpLT5nZXREb2N1bWVudCgpLT5lbGFwc2VkVGltZSgpKTsKKyNlbmRpZgogICAgICAgICBtX2Zp
cmVkTG9hZCA9IGZhbHNlOwogICAgICAgICBtX2ltYWdlQ29tcGxldGUgPSBmYWxzZTsKICAgICAg
ICAgQ2FjaGVkSW1hZ2UqIG9sZEltYWdlID0gbV9pbWFnZTsKQEAgLTEzMywyMSArMTM3LDIxIEBA
IHZvaWQgSFRNTEltYWdlTG9hZGVyOjpub3RpZnlGaW5pc2hlZChDYWMKIC8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KIAogSFRNTEltYWdlRWxlbWVudEltcGw6OkhUTUxJbWFnZUVsZW1lbnRJbXBsKERvY3Vt
ZW50UHRyICpkb2MsIEhUTUxGb3JtRWxlbWVudEltcGwgKmYpCi0gICAgOiBIVE1MRWxlbWVudElt
cGwoZG9jKSwgbV9pbWFnZUxvYWRlcih0aGlzKSwgaXNtYXAoZmFsc2UpLCBtX2Zvcm0oZikKKyAg
ICA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6OmltZygpLCBkb2MpLCBtX2ltYWdlTG9hZGVy
KHRoaXMpLCBpc21hcChmYWxzZSksIG1fZm9ybShmKQogewogICAgIGlmIChtX2Zvcm0pCiAgICAg
ICAgIG1fZm9ybS0+cmVnaXN0ZXJJbWdFbGVtZW50KHRoaXMpOwogfQogCi1IVE1MSW1hZ2VFbGVt
ZW50SW1wbDo6fkhUTUxJbWFnZUVsZW1lbnRJbXBsKCkKK0hUTUxJbWFnZUVsZW1lbnRJbXBsOjpI
VE1MSW1hZ2VFbGVtZW50SW1wbChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVu
dFB0ciAqZG9jKQorICAgIDogSFRNTEVsZW1lbnRJbXBsKHRhZ05hbWUsIGRvYyksIG1faW1hZ2VM
b2FkZXIodGhpcyksIGlzbWFwKGZhbHNlKSwgbV9mb3JtKDApCiB7Ci0gICAgaWYgKG1fZm9ybSkK
LSAgICAgICAgbV9mb3JtLT5yZW1vdmVJbWdFbGVtZW50KHRoaXMpOwogfQogCi1Ob2RlSW1wbDo6
SWQgSFRNTEltYWdlRWxlbWVudEltcGw6OmlkKCkgY29uc3QKK0hUTUxJbWFnZUVsZW1lbnRJbXBs
Ojp+SFRNTEltYWdlRWxlbWVudEltcGwoKQogewotICAgIHJldHVybiBJRF9JTUc7CisgICAgaWYg
KG1fZm9ybSkKKyAgICAgICAgbV9mb3JtLT5yZW1vdmVJbWdFbGVtZW50KHRoaXMpOwogfQogCiBi
b29sIEhUTUxJbWFnZUVsZW1lbnRJbXBsOjptYXBUb0VudHJ5KE5vZGVJbXBsOjpJZCBhdHRyLCBN
YXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdApAQCAtNTI4LDcgKzUzMiw3IEBAIGxv
bmcgSFRNTEltYWdlRWxlbWVudEltcGw6OnkoKSBjb25zdAogLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQog
CiBIVE1MTWFwRWxlbWVudEltcGw6OkhUTUxNYXBFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9j
KQotICAgIDogSFRNTEVsZW1lbnRJbXBsKGRvYykKKyAgICA6IEhUTUxFbGVtZW50SW1wbChIVE1M
TmFtZXM6Om1hcCgpLCBkb2MpCiB7CiB9CiAKQEAgLTUzOCw5ICs1NDIsMTEgQEAgSFRNTE1hcEVs
ZW1lbnRJbXBsOjp+SFRNTE1hcEVsZW1lbnRJbXBsKAogICAgICAgICBnZXREb2N1bWVudCgpLT5y
ZW1vdmVJbWFnZU1hcCh0aGlzKTsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxNYXBFbGVtZW50SW1w
bDo6aWQoKSBjb25zdAorYm9vbCBIVE1MTWFwRWxlbWVudEltcGw6OmNoZWNrRFREKGNvbnN0IE5v
ZGVJbXBsKiBuZXdDaGlsZCkKIHsKLSAgICByZXR1cm4gSURfTUFQOworCS8vIEZJWE1FOiBUaGlz
IHNlZW1zIHJlYWxseSBvZGQsIGFsbG93aW5nIG9ubHkgYmxvY2tzIGluc2lkZSBtYXAuCisJcmV0
dXJuIG5ld0NoaWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YXJlYSgpKSB8fCBuZXdDaGlsZC0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OnNjcmlwdCgpKSB8fAorCQkgICBpbkJsb2NrVGFnTGlzdChu
ZXdDaGlsZCk7CiB9CiAKIGJvb2wKQEAgLTU1MiwzMiArNTU4LDI4IEBAIEhUTUxNYXBFbGVtZW50
SW1wbDo6bWFwTW91c2VFdmVudChpbnQgeF8KICAgICBRUHRyU3RhY2s8Tm9kZUltcGw+IG5vZGVT
dGFjazsKIAogICAgIE5vZGVJbXBsICpjdXJyZW50ID0gZmlyc3RDaGlsZCgpOwotICAgIHdoaWxl
KDEpCi0gICAgewotICAgICAgICBpZighY3VycmVudCkKLSAgICAgICAgeworICAgIHdoaWxlICgx
KSB7CisgICAgICAgIGlmICghY3VycmVudCkgewogICAgICAgICAgICAgaWYobm9kZVN0YWNrLmlz
RW1wdHkoKSkgYnJlYWs7CiAgICAgICAgICAgICBjdXJyZW50ID0gbm9kZVN0YWNrLnBvcCgpOwog
ICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQtPm5leHRTaWJsaW5nKCk7CiAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICBpZihjdXJyZW50LT5pZCgpPT1JRF9BUkVB
KQotICAgICAgICB7CisgICAgICAgIAorICAgICAgICBpZiAoY3VycmVudC0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OmFyZWEoKSkpIHsKICAgICAgICAgICAgIC8vY291dCA8PCAiYXJlYSBmb3VuZCAi
IDw8IGVuZGw7Ci0gICAgICAgICAgICBIVE1MQXJlYUVsZW1lbnRJbXBsKiBhcmVhPXN0YXRpY19j
YXN0PEhUTUxBcmVhRWxlbWVudEltcGwqPihjdXJyZW50KTsKKyAgICAgICAgICAgIEhUTUxBcmVh
RWxlbWVudEltcGwqIGFyZWEgPSBzdGF0aWNfY2FzdDxIVE1MQXJlYUVsZW1lbnRJbXBsKj4oY3Vy
cmVudCk7CiAgICAgICAgICAgICBpZiAoYXJlYS0+bWFwTW91c2VFdmVudCh4Xyx5Xyx3aWR0aF8s
aGVpZ2h0XywgaW5mbykpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0K
KyAgICAgICAgCiAgICAgICAgIE5vZGVJbXBsICpjaGlsZCA9IGN1cnJlbnQtPmZpcnN0Q2hpbGQo
KTsKLSAgICAgICAgaWYoY2hpbGQpCi0gICAgICAgIHsKKyAgICAgICAgaWYgKGNoaWxkKSB7CiAg
ICAgICAgICAgICBub2RlU3RhY2sucHVzaChjdXJyZW50KTsKICAgICAgICAgICAgIGN1cnJlbnQg
PSBjaGlsZDsKICAgICAgICAgfQogICAgICAgICBlbHNlCi0gICAgICAgIHsKICAgICAgICAgICAg
IGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0U2libGluZygpOwotICAgICAgICB9CiAgICAgfQogCiAg
ICAgcmV0dXJuIGZhbHNlOwpAQCAtNjIyLDcgKzYyNCw3IEBAIHZvaWQgSFRNTE1hcEVsZW1lbnRJ
bXBsOjpzZXROYW1lKGNvbnN0IEQKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogSFRNTEFyZWFFbGVt
ZW50SW1wbDo6SFRNTEFyZWFFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAgIDogSFRN
TEFuY2hvckVsZW1lbnRJbXBsKGRvYykKKyAgICA6IEhUTUxBbmNob3JFbGVtZW50SW1wbChIVE1M
TmFtZXM6OmFyZWEoKSwgZG9jKQogewogICAgIG1fY29vcmRzPTA7CiAgICAgbV9jb29yZHNMZW4g
PSAwOwpAQCAtNjM1LDExICs2MzcsNiBAQCBIVE1MQXJlYUVsZW1lbnRJbXBsOjp+SFRNTEFyZWFF
bGVtZW50SW1wCiAgICAgaWYgKG1fY29vcmRzKSBkZWxldGUgW10gbV9jb29yZHM7CiB9CiAKLU5v
ZGVJbXBsOjpJZCBIVE1MQXJlYUVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IElEX0FSRUE7Ci19Ci0KIHZvaWQgSFRNTEFyZWFFbGVtZW50SW1wbDo6cGFyc2VNYXBwZWRBdHRy
aWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqYXR0cikKIHsKICAgICBzd2l0Y2ggKGF0dHItPmlk
KCkpCkluZGV4OiBraHRtbC9odG1sL2h0bWxfaW1hZ2VpbXBsLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sX2ltYWdlaW1wbC5oLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjIxCmRpZmYgLXUgLXAgLXIxLjIxIGtodG1sL2h0bWwvaHRtbF9pbWFn
ZWltcGwuaAotLS0ga2h0bWwvaHRtbC9odG1sX2ltYWdlaW1wbC5oCTExIE1heSAyMDA1IDA1OjQ5
OjM0IC0wMDAwCTEuMjEKKysrIGtodG1sL2h0bWwvaHRtbF9pbWFnZWltcGwuaAk1IEp1bCAyMDA1
IDIzOjIwOjM4IC0wMDAwCkBAIC03NSw5ICs3NSwxMSBAQCBjbGFzcyBIVE1MSW1hZ2VFbGVtZW50
SW1wbAogICAgIGZyaWVuZCBjbGFzcyBIVE1MRm9ybUVsZW1lbnRJbXBsOwogcHVibGljOgogICAg
IEhUTUxJbWFnZUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIEhUTUxGb3JtRWxlbWVudElt
cGwgKmYgPSAwKTsKKyAgICBIVE1MSW1hZ2VFbGVtZW50SW1wbChjb25zdCBRdWFsaWZpZWROYW1l
JiB0YWdOYW1lLCBEb2N1bWVudFB0ciogZG9jKTsKICAgICB+SFRNTEltYWdlRWxlbWVudEltcGwo
KTsKIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0
dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNGb3JiaWRkZW47
IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KIAog
ICAgIHZpcnR1YWwgYm9vbCBtYXBUb0VudHJ5KE5vZGVJbXBsOjpJZCBhdHRyLCBNYXBwZWRBdHRy
aWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRB
dHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqKTsKQEAgLTE2MSw3ICsxNjMsOCBAQCBwdWJs
aWM6CiAgICAgSFRNTEFyZWFFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKTsKICAgICB+SFRN
TEFyZWFFbGVtZW50SW1wbCgpOwogCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OworICAgIHZp
cnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRh
Z1N0YXR1c0ZvcmJpZGRlbjsgfQorICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3Qg
eyByZXR1cm4gMDsgfQogCiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1h
cHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIpOwogCkBAIC0yMTIsMTAgKzIxNSwxMSBAQCBjbGFzcyBI
VE1MTWFwRWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTEVsCiB7CiBwdWJsaWM6CiAgICAgSFRNTE1h
cEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpOwotCiAgICAgfkhUTUxNYXBFbGVtZW50SW1w
bCgpOwogCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OworICAgIHZpcnR1YWwgSFRNTFRhZ1N0
YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVk
OyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAxOyB9CisJ
dmlydHVhbCBib29sIGNoZWNrRFREKGNvbnN0IE5vZGVJbXBsKiBuZXdDaGlsZCk7CiAKICAgICB2
aXJ0dWFsIERPTVN0cmluZyBnZXROYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9CiAKSW5k
ZXg6IGtodG1sL2h0bWwvaHRtbF9pbmxpbmVpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfaW5saW5laW1wbC5jcHAsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuNDIKZGlmZiAtdSAtcCAtcjEuNDIga2h0bWwvaHRtbC9odG1sX2lubGlu
ZWltcGwuY3BwCi0tLSBraHRtbC9odG1sL2h0bWxfaW5saW5laW1wbC5jcHAJMTEgTWF5IDIwMDUg
MDU6NDk6MzQgLTAwMDAJMS40MgorKysga2h0bWwvaHRtbC9odG1sX2lubGluZWltcGwuY3BwCTUg
SnVsIDIwMDUgMjM6MjA6MzggLTAwMDAKQEAgLTQ1LDcgKzQ1LDEzIEBAIHVzaW5nIG5hbWVzcGFj
ZSBraHRtbDsKIG5hbWVzcGFjZSBET00gewogCiBIVE1MQW5jaG9yRWxlbWVudEltcGw6OkhUTUxB
bmNob3JFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAgIDogSFRNTEVsZW1lbnRJbXBs
KGRvYykKKyAgICA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6OmEoKSwgZG9jKQoreworICAg
IG1faGFzVGFyZ2V0ID0gZmFsc2U7Cit9CisKK0hUTUxBbmNob3JFbGVtZW50SW1wbDo6SFRNTEFu
Y2hvckVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50UHRy
ICpkb2MpCisgICAgOiBIVE1MRWxlbWVudEltcGwodGFnTmFtZSwgZG9jKQogewogICAgIG1faGFz
VGFyZ2V0ID0gZmFsc2U7CiB9CkBAIC0xMDQsMTEgKzExMCw2IEBAIGJvb2wgSFRNTEFuY2hvckVs
ZW1lbnRJbXBsOjppc0tleWJvYXJkRm8KICAgICByZXR1cm4gZ2V0RG9jdW1lbnQoKS0+cGFydCgp
LT50YWJzVG9MaW5rcygpOwogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTEFuY2hvckVsZW1lbnRJbXBs
OjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0E7Ci19Ci0KIHZvaWQgSFRNTEFuY2hvckVs
ZW1lbnRJbXBsOjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50SW1wbCAqZXZ0KQogewogICAgIC8v
IFJlYWN0IG9uIGNsaWNrcyBhbmQgb24ga2V5cHJlc3Nlcy4KQEAgLTE1Miw3ICsxNTMsNyBAQCB2
b2lkIEhUTUxBbmNob3JFbGVtZW50SW1wbDo6ZGVmYXVsdEV2ZW50CiAgICAgICAgIGlmICggZSAm
JiBlLT5idXR0b24oKSA9PSAxICkKICAgICAgICAgICAgIHV0YXJnZXQgPSAiX2JsYW5rIjsKIAot
ICAgICAgICBpZiAoIGV2dC0+dGFyZ2V0KCktPmlkKCkgPT0gSURfSU1HICkgeworICAgICAgICBp
ZiAoZXZ0LT50YXJnZXQoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmltZygpKSkgewogICAgICAg
ICAgICAgSFRNTEltYWdlRWxlbWVudEltcGwqIGltZyA9IHN0YXRpY19jYXN0PEhUTUxJbWFnZUVs
ZW1lbnRJbXBsKj4oIGV2dC0+dGFyZ2V0KCkgKTsKICAgICAgICAgICAgIGlmICggaW1nICYmIGlt
Zy0+aXNTZXJ2ZXJNYXAoKSApCiAgICAgICAgICAgICB7CkBAIC0zODIsNyArMzgzLDcgQEAgdm9p
ZCBIVE1MQW5jaG9yRWxlbWVudEltcGw6OmZvY3VzKCkKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQog
Ci1IVE1MQlJFbGVtZW50SW1wbDo6SFRNTEJSRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykg
OiBIVE1MRWxlbWVudEltcGwoZG9jKQorSFRNTEJSRWxlbWVudEltcGw6OkhUTUxCUkVsZW1lbnRJ
bXBsKERvY3VtZW50UHRyICpkb2MpIDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6YnIoKSwg
ZG9jKQogewogfQogCkBAIC0zOTAsMTEgKzM5MSw2IEBAIEhUTUxCUkVsZW1lbnRJbXBsOjp+SFRN
TEJSRWxlbWVudEltcGwoKQogewogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTEJSRWxlbWVudEltcGw6
OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfQlI7Ci19Ci0KIGJvb2wgSFRNTEJSRWxlbWVu
dEltcGw6Om1hcFRvRW50cnkoTm9kZUltcGw6OklkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5
JiByZXN1bHQpIGNvbnN0CiB7CiAgICAgaWYgKGF0dHIgPT0gQVRUUl9DTEVBUikgewpAQCAtNDQ1
LDcgKzQ0MSw3IEBAIHZvaWQgSFRNTEJSRWxlbWVudEltcGw6OnNldENsZWFyKGNvbnN0IEQKIC8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KIAogSFRNTEZvbnRFbGVtZW50SW1wbDo6SFRNTEZvbnRFbGVtZW50
SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAgIDogSFRNTEVsZW1lbnRJbXBsKGRvYykKKyAgICA6
IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6OmZvbnQoKSwgZG9jKQogewogfQogCkBAIC00NTMs
MTEgKzQ0OSw2IEBAIEhUTUxGb250RWxlbWVudEltcGw6On5IVE1MRm9udEVsZW1lbnRJbXAKIHsK
IH0KIAotTm9kZUltcGw6OklkIEhUTUxGb250RWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gSURfRk9OVDsKLX0KLQogLy8gQWxsb3dzIGxlYWRpbmcgc3BhY2VzLgogLy8gQWxs
b3dzIHRyYWlsaW5nIG5vbm51bWVyaWMgY2hhcmFjdGVycy4KIC8vIFJldHVybnMgMTAgZm9yIGFu
eSBzaXplIGdyZWF0ZXIgdGhhbiA5LgpAQCAtNTkwLDggKzU4MSw4IEBAIHZvaWQgSFRNTEZvbnRF
bGVtZW50SW1wbDo6c2V0U2l6ZShjb25zdCAKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1IVE1M
TW9kRWxlbWVudEltcGw6OkhUTUxNb2RFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCB1c2hv
cnQgZWxlbWVudElkKQotICAgIDogSFRNTEdlbmVyaWNFbGVtZW50SW1wbChkb2MsIGVsZW1lbnRJ
ZCkKK0hUTUxNb2RFbGVtZW50SW1wbDo6SFRNTE1vZEVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmll
ZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50UHRyICpkb2MpCisgICAgOiBIVE1MRWxlbWVudEltcGwo
dGFnTmFtZSwgZG9jKQogewogfQogCkBAIC02MTgsMTUgKzYwOSwxMCBAQCB2b2lkIEhUTUxNb2RF
bGVtZW50SW1wbDo6c2V0RGF0ZVRpbWUoY29uCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxR
dW90ZUVsZW1lbnRJbXBsOjpIVE1MUXVvdGVFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQot
ICAgIDogSFRNTEVsZW1lbnRJbXBsKGRvYykKKyAgICA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFt
ZXM6OnEoKSwgZG9jKQogewogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTFF1b3RlRWxlbWVudEltcGw6
OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfUTsKLX0KLSAgICAKIERPTVN0cmluZyBIVE1M
UXVvdGVFbGVtZW50SW1wbDo6Y2l0ZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGdldEF0dHJpYnV0
ZShBVFRSX0NJVEUpOwpJbmRleDoga2h0bWwvaHRtbC9odG1sX2lubGluZWltcGwuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfaW5saW5laW1w
bC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE5CmRpZmYgLXUgLXAgLXIxLjE5IGtodG1sL2h0
bWwvaHRtbF9pbmxpbmVpbXBsLmgKLS0tIGtodG1sL2h0bWwvaHRtbF9pbmxpbmVpbXBsLmgJMTEg
TWF5IDIwMDUgMDU6NDk6MzQgLTAwMDAJMS4xOQorKysga2h0bWwvaHRtbC9odG1sX2lubGluZWlt
cGwuaAk1IEp1bCAyMDA1IDIzOjIwOjM5IC0wMDAwCkBAIC0zNCwxMiArMzQsMTUgQEAgY2xhc3Mg
SFRNTEFuY2hvckVsZW1lbnRJbXBsIDogcHVibGljIEhUTQogewogcHVibGljOgogICAgIEhUTUxB
bmNob3JFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKTsKKyAgICBIVE1MQW5jaG9yRWxlbWVu
dEltcGwoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnRQdHIqIGRvYyk7CiAg
ICAgfkhUTUxBbmNob3JFbGVtZW50SW1wbCgpOwogCisgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVz
IGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzUmVxdWlyZWQ7IH0K
KyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDE7IH0KKwogICAg
IHZpcnR1YWwgYm9vbCBpc01vdXNlRm9jdXNhYmxlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29s
IGlzS2V5Ym9hcmRGb2N1c2FibGUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNGb2N1c2Fi
bGUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lk
IHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIpOwogICAgIHZp
cnR1YWwgdm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50SW1wbCAqZXZ0KTsKICAgICB2aXJ0
dWFsIHZvaWQgYWNjZXNzS2V5QWN0aW9uKGJvb2wgZnVsbEFjdGlvbik7CkBAIC05Nyw5ICsxMDAs
MTAgQEAgY2xhc3MgSFRNTEJSRWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTEVsZQogcHVibGljOgog
ICAgIEhUTUxCUkVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpOwogICAgIH5IVE1MQlJFbGVt
ZW50SW1wbCgpOwotCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwogICAgIAorICAgIHZpcnR1
YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0
YXR1c0ZvcmJpZGRlbjsgfQorICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyBy
ZXR1cm4gMDsgfQorCiAgICAgdmlydHVhbCBib29sIG1hcFRvRW50cnkoSWQgYXR0ciwgTWFwcGVk
QXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFw
cGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIpOwogICAgIApAQCAtMTE2LDkg
KzEyMCwxMCBAQCBjbGFzcyBIVE1MRm9udEVsZW1lbnRJbXBsIDogcHVibGljIEhUTUxFCiBwdWJs
aWM6CiAgICAgSFRNTEZvbnRFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKTsKICAgICB+SFRN
TEZvbnRFbGVtZW50SW1wbCgpOwotCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwogICAgIAor
ICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0
dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBj
b25zdCB7IHJldHVybiAxOyB9CisKICAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShJZCBhdHRy
LCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQg
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqYXR0cik7CiAKQEAgLTEz
NCwxMCArMTM5LDEzIEBAIHB1YmxpYzoKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1jbGFzcyBI
VE1MTW9kRWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTEdlbmVyaWNFbGVtZW50SW1wbAorY2xhc3Mg
SFRNTE1vZEVsZW1lbnRJbXBsIDogcHVibGljIEhUTUxFbGVtZW50SW1wbAogewogcHVibGljOgot
ICAgIEhUTUxNb2RFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCB1c2hvcnQgZWxlbWVudElk
KTsKKyAgICBIVE1MTW9kRWxlbWVudEltcGwoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwg
RG9jdW1lbnRQdHIgKmRvYyk7CisKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVx
dWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQorICAgIHZpcnR1
YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMTsgfQogCiAgICAgRE9NU3RyaW5n
IGNpdGUoKSBjb25zdDsKICAgICB2b2lkIHNldENpdGUoY29uc3QgRE9NU3RyaW5nICYpOwpAQCAt
MTUyLDkgKzE2MCwxMCBAQCBjbGFzcyBIVE1MUXVvdGVFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1M
CiB7CiBwdWJsaWM6CiAgICAgSFRNTFF1b3RlRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYyk7
Ci0KLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CiAgICAgCisgICAgdmlydHVhbCBIVE1MVGFn
U3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzUmVxdWly
ZWQ7IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDE7IH0K
KwogICAgIERPTVN0cmluZyBjaXRlKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRDaXRlKGNvbnN0IERP
TVN0cmluZyAmKTsKIH07CkluZGV4OiBraHRtbC9odG1sL2h0bWxfbGlzdGltcGwuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbF9saXN0aW1w
bC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuOQpkaWZmIC11IC1wIC1yMS45IGtodG1sL2h0
bWwvaHRtbF9saXN0aW1wbC5jcHAKLS0tIGtodG1sL2h0bWwvaHRtbF9saXN0aW1wbC5jcHAJMTEg
TWF5IDIwMDUgMDU6NDk6MzQgLTAwMDAJMS45CisrKyBraHRtbC9odG1sL2h0bWxfbGlzdGltcGwu
Y3BwCTUgSnVsIDIwMDUgMjM6MjA6MzkgLTAwMDAKQEAgLTMyLDExICszMiw2IEBAIHVzaW5nIG5h
bWVzcGFjZSBraHRtbDsKIAogbmFtZXNwYWNlIERPTSB7CiAKLU5vZGVJbXBsOjpJZCBIVE1MVUxp
c3RFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9VTDsKLX0KLQogYm9v
bCBIVE1MVUxpc3RFbGVtZW50SW1wbDo6bWFwVG9FbnRyeShOb2RlSW1wbDo6SWQgYXR0ciwgTWFw
cGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3QKIHsKICAgICBzd2l0Y2ggKGF0dHIpIHsK
QEAgLTg0LDExICs3OSw2IEBAIHZvaWQgSFRNTFVMaXN0RWxlbWVudEltcGw6OnNldFR5cGUoY29u
c3QKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Ob2RlSW1wbDo6SWQgSFRNTERpcmVjdG9yeUVs
ZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0RJUjsKLX0KLQogYm9vbCBI
VE1MRGlyZWN0b3J5RWxlbWVudEltcGw6OmNvbXBhY3QoKSBjb25zdAogewogICAgIHJldHVybiAh
Z2V0QXR0cmlidXRlKEFUVFJfQ09NUEFDVCkuaXNOdWxsKCk7CkBAIC0xMDEsMTEgKzkxLDYgQEAg
dm9pZCBIVE1MRGlyZWN0b3J5RWxlbWVudEltcGw6OnNldENvbXBhYwogCiAvLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCiAKLU5vZGVJbXBsOjpJZCBIVE1MTWVudUVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIElEX01FTlU7Ci19Ci0KIGJvb2wgSFRNTE1lbnVFbGVtZW50SW1wbDo6Y29t
cGFjdCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuICFnZXRBdHRyaWJ1dGUoQVRUUl9DT01QQUNUKS5p
c051bGwoKTsKQEAgLTExOCwxMSArMTAzLDYgQEAgdm9pZCBIVE1MTWVudUVsZW1lbnRJbXBsOjpz
ZXRDb21wYWN0KGJvbwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLU5vZGVJbXBsOjpJZCBIVE1M
T0xpc3RFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9PTDsKLX0KLQog
Ym9vbCBIVE1MT0xpc3RFbGVtZW50SW1wbDo6bWFwVG9FbnRyeShOb2RlSW1wbDo6SWQgYXR0ciwg
TWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3QKIHsKICAgICBzd2l0Y2ggKGF0dHIp
IHsKQEAgLTE1NSw3ICsxMzUsNyBAQCB2b2lkIEhUTUxPTGlzdEVsZW1lbnRJbXBsOjpwYXJzZU1h
cHBlZEF0CiAgICAgY2FzZSBBVFRSX1NUQVJUOgogICAgICAgICAgICAgX3N0YXJ0ID0gIWF0dHIt
PmlzTnVsbCgpID8gYXR0ci0+dmFsdWUoKS50b0ludCgpIDogMTsKICAgICBkZWZhdWx0OgotICAg
ICAgICBIVE1MVUxpc3RFbGVtZW50SW1wbDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7Cisg
ICAgICAgIEhUTUxFbGVtZW50SW1wbDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CiAgICAg
fQogfQogCkBAIC0xODYsMTEgKzE2Niw2IEBAIHZvaWQgSFRNTE9MaXN0RWxlbWVudEltcGw6OnNl
dFR5cGUoY29uc3QKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Ob2RlSW1wbDo6SWQgSFRNTExJ
RWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfTEk7Ci19Ci0KIGJvb2wg
SFRNTExJRWxlbWVudEltcGw6Om1hcFRvRW50cnkoTm9kZUltcGw6OklkIGF0dHIsIE1hcHBlZEF0
dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChhdHRyKSB7CkBAIC0y
NTIsMTEgKzIyNyw4IEBAIHZvaWQgSFRNTExJRWxlbWVudEltcGw6OmF0dGFjaCgpCiAgICAgICAg
IE5vZGVJbXBsICpsaXN0Tm9kZSA9IDA7CiAgICAgICAgIE5vZGVJbXBsICpuID0gdGhpczsKICAg
ICAgICAgd2hpbGUgKCFsaXN0Tm9kZSAmJiAobiA9IG4tPnBhcmVudE5vZGUoKSkpIHsKLSAgICAg
ICAgICAgIHN3aXRjaCAobi0+aWQoKSkgewotICAgICAgICAgICAgICAgIGNhc2UgSURfVUw6Ci0g
ICAgICAgICAgICAgICAgY2FzZSBJRF9PTDoKLSAgICAgICAgICAgICAgICAgICAgbGlzdE5vZGUg
PSBuOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG4tPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjp1bCgpKSB8fCBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b2woKSkpCisgICAgICAgICAg
ICAgICAgbGlzdE5vZGUgPSBuOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyBJZiB3
ZSBhcmUgbm90IGluIGEgbGlzdCwgdGVsbCB0aGUgcmVuZGVyZXIgc28gaXQgY2FuIHBvc2l0aW9u
IHVzIGluc2lkZS4KQEAgLTI2NSw3ICsyMzcsNyBAQCB2b2lkIEhUTUxMSUVsZW1lbnRJbXBsOjph
dHRhY2goKQogICAgICAgICAgICAgcmVuZGVyLT5zZXROb3RJbkxpc3QodHJ1ZSk7CiAKIAkvLyBJ
ZiB3ZSBhcmUgZmlyc3QsIGFuZCB0aGUgT0wgaGFzIGEgc3RhcnQgYXR0ciwgc2V0IHRoZSB2YWx1
ZS4KLQlpZiAobGlzdE5vZGUgJiYgbGlzdE5vZGUtPmlkKCkgPT0gSURfT0wgJiYgIW1fcmVuZGVy
LT5wcmV2aW91c1NpYmxpbmcoKSkgeworCWlmIChsaXN0Tm9kZSAmJiBsaXN0Tm9kZS0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6Om9sKCkpICYmICFtX3JlbmRlci0+cHJldmlvdXNTaWJsaW5nKCkpIHsK
IAkgICAgSFRNTE9MaXN0RWxlbWVudEltcGwgKm9sID0gc3RhdGljX2Nhc3Q8SFRNTE9MaXN0RWxl
bWVudEltcGwgKj4obGlzdE5vZGUpOwogICAgICAgICAgICAgcmVuZGVyLT5zZXRWYWx1ZShvbC0+
c3RhcnQoKSk7CiAJfQpAQCAtMjk1LDEyICsyNjcsOCBAQCB2b2lkIEhUTUxMSUVsZW1lbnRJbXBs
OjpzZXRWYWx1ZShsb25nIHZhCiB7CiAgICAgc2V0QXR0cmlidXRlKEFUVFJfVkFMVUUsIFFTdHJp
bmc6Om51bWJlcih2YWx1ZSkpOwogfQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Ob2RlSW1wbDo6
SWQgSFRNTERMaXN0RWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfREw7
Ci19CisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIGJvb2wgSFRNTERMaXN0RWxlbWVudEltcGw6OmNv
bXBhY3QoKSBjb25zdAogewpJbmRleDoga2h0bWwvaHRtbC9odG1sX2xpc3RpbXBsLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sX2xpc3RpbXBs
LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNwpkaWZmIC11IC1wIC1yMS43IGtodG1sL2h0bWwv
aHRtbF9saXN0aW1wbC5oCi0tLSBraHRtbC9odG1sL2h0bWxfbGlzdGltcGwuaAkxMSBNYXkgMjAw
NSAwNTo0OTozNCAtMDAwMAkxLjcKKysrIGtodG1sL2h0bWwvaHRtbF9saXN0aW1wbC5oCTUgSnVs
IDIwMDUgMjM6MjA6MzkgLTAwMDAKQEAgLTM1LDEwICszNSwxMSBAQCBuYW1lc3BhY2UgRE9NCiBj
bGFzcyBIVE1MVUxpc3RFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MRWxlbWVudEltcGwKIHsKIHB1
YmxpYzoKLSAgICBIVE1MVUxpc3RFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKSA6IEhUTUxF
bGVtZW50SW1wbChkb2MpIHt9CisgICAgSFRNTFVMaXN0RWxlbWVudEltcGwoRG9jdW1lbnRQdHIg
KmRvYykgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjp1bCgpLCBkb2MpIHt9CiAgICAgdmly
dHVhbCB+SFRNTFVMaXN0RWxlbWVudEltcGwoKSB7fQogCi0gICAgdmlydHVhbCBJZCBpZCgpIGNv
bnN0OworICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0
IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3Jp
dHkoKSBjb25zdCB7IHJldHVybiA1OyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShJ
ZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdDsKICAgICB2aXJ0dWFs
IHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqKTsKQEAgLTU3
LDkgKzU4LDEwIEBAIHB1YmxpYzoKIGNsYXNzIEhUTUxEaXJlY3RvcnlFbGVtZW50SW1wbCA6IHB1
YmxpYyBIVE1MRWxlbWVudEltcGwKIHsKIHB1YmxpYzoKLSAgICBIVE1MRGlyZWN0b3J5RWxlbWVu
dEltcGwoRG9jdW1lbnRQdHIgKmRvYykgOiBIVE1MRWxlbWVudEltcGwoZG9jKSB7fQorICAgIEhU
TUxEaXJlY3RvcnlFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKSA6IEhUTUxFbGVtZW50SW1w
bChIVE1MTmFtZXM6OmRpcigpLCBkb2MpIHt9CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7
CisgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyBy
ZXR1cm4gVGFnU3RhdHVzUmVxdWlyZWQ7IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgp
IGNvbnN0IHsgcmV0dXJuIDU7IH0KIAogICAgIGJvb2wgY29tcGFjdCgpIGNvbnN0OwogICAgIHZv
aWQgc2V0Q29tcGFjdChib29sKTsKQEAgLTcwLDkgKzcyLDEwIEBAIHB1YmxpYzoKIGNsYXNzIEhU
TUxNZW51RWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTEVsZW1lbnRJbXBsCiB7CiBwdWJsaWM6Ci0g
ICAgSFRNTE1lbnVFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKSA6IEhUTUxFbGVtZW50SW1w
bChkb2MpIHt9CisgICAgSFRNTE1lbnVFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKSA6IEhU
TUxFbGVtZW50SW1wbChIVE1MTmFtZXM6Om1lbnUoKSwgZG9jKSB7fQogCi0gICAgdmlydHVhbCBJ
ZCBpZCgpIGNvbnN0OworICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVu
dCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9CisgICAgdmlydHVhbCBpbnQg
dGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiA1OyB9CiAKICAgICBib29sIGNvbXBhY3QoKSBj
b25zdDsKICAgICB2b2lkIHNldENvbXBhY3QoYm9vbCk7CkBAIC04MCwxNCArODMsMTUgQEAgcHVi
bGljOgogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLWNsYXNzIEhUTUxPTGlzdEVsZW1lbnRJbXBs
IDogcHVibGljIEhUTUxVTGlzdEVsZW1lbnRJbXBsCitjbGFzcyBIVE1MT0xpc3RFbGVtZW50SW1w
bCA6IHB1YmxpYyBIVE1MRWxlbWVudEltcGwKIHsKIHB1YmxpYzoKICAgICBIVE1MT0xpc3RFbGVt
ZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAgICAgICA6IEhUTUxVTGlzdEVsZW1lbnRJbXBs
KGRvYykgeyBfc3RhcnQgPSAxOyB9Ci0KLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CisgICAg
ICAgIDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6b2woKSwgZG9jKSB7IF9zdGFydCA9IDE7
IH0KICAgICAKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBj
b25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQorICAgIHZpcnR1YWwgaW50IHRhZ1By
aW9yaXR5KCkgY29uc3QgeyByZXR1cm4gNTsgfQorCiAgICAgdmlydHVhbCBib29sIG1hcFRvRW50
cnkoSWQgYXR0ciwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3Q7CiAgICAgdmly
dHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKik7CiAK
QEAgLTExMCwxMCArMTE0LDExIEBAIGNsYXNzIEhUTUxMSUVsZW1lbnRJbXBsIDogcHVibGljIEhU
TUxFbGUKIHsKIHB1YmxpYzoKICAgICBIVE1MTElFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9j
KQotICAgICAgICA6IEhUTUxFbGVtZW50SW1wbChkb2MpIHsgaXNWYWx1ZWQgPSBmYWxzZTsgfQor
ICAgICAgICA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6OmxpKCksIGRvYykgeyBpc1ZhbHVl
ZCA9IGZhbHNlOyB9CiAgICAgdmlydHVhbCB+SFRNTExJRWxlbWVudEltcGwoKSB7fQogCi0gICAg
dmlydHVhbCBJZCBpZCgpIGNvbnN0OworICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdS
ZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c09wdGlvbmFsOyB9CisgICAgdmly
dHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAzOyB9CiAKICAgICB2aXJ0dWFs
IGJvb2wgbWFwVG9FbnRyeShOb2RlSW1wbDo6SWQgYXR0ciwgTWFwcGVkQXR0cmlidXRlRW50cnkm
IHJlc3VsdCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1h
cHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIpOwpAQCAtMTM2LDEwICsxNDEsMTEgQEAgcHJpdmF0ZToK
IGNsYXNzIEhUTUxETGlzdEVsZW1lbnRJbXBsIDogcHVibGljIEhUTUxFbGVtZW50SW1wbAogewog
cHVibGljOgotICAgIEhUTUxETGlzdEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpIDogSFRN
TEVsZW1lbnRJbXBsKGRvYykge30KKyAgICBIVE1MRExpc3RFbGVtZW50SW1wbChEb2N1bWVudFB0
ciAqZG9jKSA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6OmRsKCksIGRvYykge30KICAgICB2
aXJ0dWFsIH5IVE1MRExpc3RFbGVtZW50SW1wbCgpIHt9CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkg
Y29uc3Q7CisgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29u
c3QgeyByZXR1cm4gVGFnU3RhdHVzUmVxdWlyZWQ7IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQcmlv
cml0eSgpIGNvbnN0IHsgcmV0dXJuIDU7IH0KIAogICAgIGJvb2wgY29tcGFjdCgpIGNvbnN0Owog
ICAgIHZvaWQgc2V0Q29tcGFjdChib29sKTsKSW5kZXg6IGtodG1sL2h0bWwvaHRtbF9taXNjaW1w
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9o
dG1sX21pc2NpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yNgpkaWZmIC11IC1wIC1y
MS4yNiBraHRtbC9odG1sL2h0bWxfbWlzY2ltcGwuY3BwCi0tLSBraHRtbC9odG1sL2h0bWxfbWlz
Y2ltcGwuY3BwCTExIEp1biAyMDA1IDA5OjUxOjAxIC0wMDAwCTEuMjYKKysrIGtodG1sL2h0bWwv
aHRtbF9taXNjaW1wbC5jcHAJNSBKdWwgMjAwNSAyMzoyMDozOSAtMDAwMApAQCAtMzUsMTUgKzM1
LDEwIEBACiBuYW1lc3BhY2UgRE9NIHsKIAogSFRNTEJhc2VGb250RWxlbWVudEltcGw6OkhUTUxC
YXNlRm9udEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0gICAgOiBIVE1MRWxlbWVudElt
cGwoZG9jKQorICAgIDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6YmFzZWZvbnQoKSwgZG9j
KQogewogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTEJhc2VGb250RWxlbWVudEltcGw6OmlkKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gSURfQkFTRUZPTlQ7Ci19Ci0KIERPTVN0cmluZyBIVE1MQmFzZUZv
bnRFbGVtZW50SW1wbDo6Y29sb3IoKSBjb25zdAogewogICAgIHJldHVybiBnZXRBdHRyaWJ1dGUo
QVRUUl9DT0xPUik7CkBAIC0xNDEsNzIgKzEzNiw3MiBAQCBOb2RlSW1wbCAqSFRNTENvbGxlY3Rp
b25JbXBsOjp0cmF2ZXJzZU5lCiAgICAgICAgICAgICBIVE1MRWxlbWVudEltcGwgKmUgPSBzdGF0
aWNfY2FzdDxIVE1MRWxlbWVudEltcGwgKj4oY3VycmVudCk7CiAgICAgICAgICAgICBzd2l0Y2go
dHlwZSkgewogICAgICAgICAgICAgY2FzZSBET0NfSU1BR0VTOgotICAgICAgICAgICAgICAgIGlm
KGUtPmlkKCkgPT0gSURfSU1HKQorICAgICAgICAgICAgICAgIGlmIChlLT5oYXNMb2NhbE5hbWUo
SFRNTE5hbWVzOjppbWcoKSkpCiAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgRE9DX0ZPUk1TOgotICAgICAg
ICAgICAgICAgIGlmKGUtPmlkKCkgPT0gSURfRk9STSkKKyAgICAgICAgICAgICAgICBpZihlLT5o
YXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpmb3JtKCkpKQogICAgICAgICAgICAgICAgICAgICBmb3Vu
ZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIERPQ19O
QU1FQUJMRV9JVEVNUzoKLSAgICAgICAgICAgICAgICBpZihlLT5pZCgpID09IElEX0lNRykKKyAg
ICAgICAgICAgICAgICBpZiAoZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6aW1nKCkpKQogICAg
ICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgaWYoZS0+aWQo
KSA9PSBJRF9GT1JNKQorICAgICAgICAgICAgICAgIGlmIChlLT5oYXNMb2NhbE5hbWUoSFRNTE5h
bWVzOjpmb3JtKCkpKQogICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAgICAg
ICAgICAgICAgaWYoZS0+aWQoKSA9PSBJRF9BUFBMRVQpCisgICAgICAgICAgICAgICAgaWYgKGUt
Pmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmFwcGxldCgpKSkKICAgICAgICAgICAgICAgICAgICAg
Zm91bmQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGlmKGUtPmlkKCkgPT0gSURfRU1CRUQpCisg
ICAgICAgICAgICAgICAgaWYgKGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmVtYmVkKCkpKQog
ICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgaWYoZS0+
aWQoKSA9PSBJRF9PQkpFQ1QpCisgICAgICAgICAgICAgICAgaWYgKGUtPmhhc0xvY2FsTmFtZShI
VE1MTmFtZXM6Om9iamVjdCgpKSkKICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBUQUJMRV9UQk9ESUVTOgot
ICAgICAgICAgICAgICAgIGlmKGUtPmlkKCkgPT0gSURfVEJPRFkpCisgICAgICAgICAgICAgICAg
aWYgKGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnRib2R5KCkpKQogICAgICAgICAgICAgICAg
ICAgICBmb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZihlLT5pZCgpID09IElE
X1RBQkxFKQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKGUtPmhhc0xvY2FsTmFtZShIVE1MTmFt
ZXM6OnRhYmxlKCkpKQogICAgICAgICAgICAgICAgICAgICBkZWVwID0gZmFsc2U7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFRSX0NFTExTOgotICAgICAgICAgICAg
ICAgIGlmKGUtPmlkKCkgPT0gSURfVEQgfHwgZS0+aWQoKSA9PSBJRF9USCkKKyAgICAgICAgICAg
ICAgICBpZiAoZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dGQoKSkgfHwgZS0+aGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6dGgoKSkpCiAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsK
LSAgICAgICAgICAgICAgICBlbHNlIGlmKGUtPmlkKCkgPT0gSURfVEFCTEUpCisgICAgICAgICAg
ICAgICAgZWxzZSBpZiAoZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dGFibGUoKSkpCiAgICAg
ICAgICAgICAgICAgICAgIGRlZXAgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIGNhc2UgVEFCTEVfUk9XUzoKICAgICAgICAgICAgIGNhc2UgVFNFQ1RJT05fUk9X
UzoKLSAgICAgICAgICAgICAgICBpZihlLT5pZCgpID09IElEX1RSKQorICAgICAgICAgICAgICAg
IGlmIChlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0cigpKSkKICAgICAgICAgICAgICAgICAg
ICAgZm91bmQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGVsc2UgaWYoZS0+aWQoKSA9PSBJRF9U
QUJMRSkKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVz
Ojp0YWJsZSgpKSkKICAgICAgICAgICAgICAgICAgICAgZGVlcCA9IGZhbHNlOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBTRUxFQ1RfT1BUSU9OUzoKLSAgICAgICAg
ICAgICAgICBpZihlLT5pZCgpID09IElEX09QVElPTikKKyAgICAgICAgICAgICAgICBpZiAoZS0+
aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpKQogICAgICAgICAgICAgICAgICAgICBm
b3VuZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIE1B
UF9BUkVBUzoKLSAgICAgICAgICAgICAgICBpZihlLT5pZCgpID09IElEX0FSRUEpCisgICAgICAg
ICAgICAgICAgaWYgKGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmFyZWEoKSkpCiAgICAgICAg
ICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIGNhc2UgRE9DX0FQUExFVFM6ICAgLy8gYWxsIE9CSkVDVCBhbmQgQVBQTEVUIGVsZW1l
bnRzCi0gICAgICAgICAgICAgICAgaWYoZS0+aWQoKSA9PSBJRF9PQkpFQ1QgfHwgZS0+aWQoKSA9
PSBJRF9BUFBMRVQpCisgICAgICAgICAgICAgICAgaWYgKGUtPmhhc0xvY2FsTmFtZShIVE1MTmFt
ZXM6Om9iamVjdCgpKSB8fCBlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjphcHBsZXQoKSkpCiAg
ICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIGNhc2UgRE9DX0VNQkVEUzogICAvLyBhbGwgRU1CRUQgZWxlbWVudHMKLSAg
ICAgICAgICAgICAgICBpZihlLT5pZCgpID09IElEX0VNQkVEKQorICAgICAgICAgICAgICAgIGlm
IChlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjplbWJlZCgpKSkKICAgICAgICAgICAgICAgICAg
ICAgZm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2Fz
ZSBET0NfT0JKRUNUUzogICAvLyBhbGwgT0JKRUNUIGVsZW1lbnRzCi0gICAgICAgICAgICAgICAg
aWYoZS0+aWQoKSA9PSBJRF9PQkpFQ1QpCisgICAgICAgICAgICAgICAgaWYgKGUtPmhhc0xvY2Fs
TmFtZShIVE1MTmFtZXM6Om9iamVjdCgpKSkKICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0
cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBET0NfTElOS1M6
ICAgICAvLyBhbGwgQSBfYW5kXyBBUkVBIGVsZW1lbnRzIHdpdGggYSB2YWx1ZSBmb3IgaHJlZgot
ICAgICAgICAgICAgICAgIGlmKGUtPmlkKCkgPT0gSURfQSB8fCBlLT5pZCgpID09IElEX0FSRUEp
Ci0gICAgICAgICAgICAgICAgICAgIGlmKCFlLT5nZXRBdHRyaWJ1dGUoQVRUUl9IUkVGKS5pc051
bGwoKSkKKyAgICAgICAgICAgICAgICBpZiAoZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6YSgp
KSB8fCBlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjphcmVhKCkpKQorICAgICAgICAgICAgICAg
ICAgICBpZiAoIWUtPmdldEF0dHJpYnV0ZShBVFRSX0hSRUYpLmlzTnVsbCgpKQogICAgICAgICAg
ICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgY2FzZSBET0NfQU5DSE9SUzogICAgICAvLyBhbGwgQSBlbGVtZW50cyB3aXRoIGEg
dmFsdWUgZm9yIG5hbWUgb3IgYW4gaWQgYXR0cmlidXRlCi0gICAgICAgICAgICAgICAgaWYoZS0+
aWQoKSA9PSBJRF9BKQotICAgICAgICAgICAgICAgICAgICBpZighZS0+Z2V0QXR0cmlidXRlKEFU
VFJfTkFNRSkuaXNOdWxsKCkpCisgICAgICAgICAgICAgICAgaWYgKGUtPmhhc0xvY2FsTmFtZShI
VE1MTmFtZXM6OmEoKSkpCisgICAgICAgICAgICAgICAgICAgIGlmICghZS0+Z2V0QXR0cmlidXRl
KEFUVFJfTkFNRSkuaXNOdWxsKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRy
dWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIERPQ19BTEw6CkBA
IC0yMTksOSArMjE0LDkgQEAgTm9kZUltcGwgKkhUTUxDb2xsZWN0aW9uSW1wbDo6dHJhdmVyc2VO
ZQogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBrZERlYnVnKCA2MDMwICkg
PDwgIkVycm9yIGluIEhUTUxDb2xsZWN0aW9uLCB3cm9uZyB0YWdJZCEiIDw8IGVuZGw7CiAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoZm91bmQpIHsKKworICAgICAgICAgICAgaWYgKGZv
dW5kKQogICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50OwotICAgICAgICAgICAgfQogICAg
ICAgICAgICAgaWYgKGRlZXApIHsKICAgICAgICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC0+
dHJhdmVyc2VOZXh0Tm9kZShtX2Jhc2UuZ2V0KCkpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwpAQCAtMjk4LDI5ICsyOTMsMzEgQEAgTm9kZUltcGwgKkhUTUxDb2xsZWN0aW9uSW1wbDo6bmV4
dEl0ZW0oKQogCiBib29sIEhUTUxDb2xsZWN0aW9uSW1wbDo6Y2hlY2tGb3JOYW1lTWF0Y2goTm9k
ZUltcGwgKm5vZGUsIGJvb2wgY2hlY2tOYW1lLCBjb25zdCBET01TdHJpbmcgJm5hbWUsIGJvb2wg
Y2FzZVNlbnNpdGl2ZSkgY29uc3QKIHsKLSAgICBFbGVtZW50SW1wbCAqZSA9IHN0YXRpY19jYXN0
PEVsZW1lbnRJbXBsICo+KG5vZGUpOworICAgIGlmICghbm9kZS0+aXNIVE1MRWxlbWVudCgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgSFRNTEVsZW1lbnRJbXBsICplID0gc3Rh
dGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsKj4obm9kZSk7CiAgICAgaWYgKGNhc2VTZW5zaXRpdmUp
IHsKICAgICAgICAgaWYgKGNoZWNrTmFtZSkgewogICAgICAgICAgICAgLy8gZG9jdW1lbnQuYWxs
IHJldHVybnMgb25seSBpbWFnZXMsIGZvcm1zLCBhcHBsZXRzLCBvYmplY3RzIGFuZCBlbWJlZHMK
ICAgICAgICAgICAgIC8vIGJ5IG5hbWUgKHRob3VnaCBldmVyeXRoaW5nIGJ5IGlkKQogICAgICAg
ICAgICAgaWYgKHR5cGUgPT0gRE9DX0FMTCAmJiAKLSAgICAgICAgICAgICAgICAhKGUtPmlkKCkg
PT0gSURfSU1HIHx8IGUtPmlkKCkgPT0gSURfRk9STSB8fAotICAgICAgICAgICAgICAgICAgZS0+
aWQoKSA9PSBJRF9BUFBMRVQgfHwgZS0+aWQoKSA9PSBJRF9PQkpFQ1QgfHwKLSAgICAgICAgICAg
ICAgICAgIGUtPmlkKCkgPT0gSURfRU1CRUQpKQorICAgICAgICAgICAgICAgICEoZS0+aGFzTG9j
YWxOYW1lKEhUTUxOYW1lczo6aW1nKCkpIHx8IGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmZv
cm0oKSkgfHwKKyAgICAgICAgICAgICAgICAgIGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmFw
cGxldCgpKSB8fCBlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvYmplY3QoKSkgfHwKKyAgICAg
ICAgICAgICAgICAgIGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmVtYmVkKCkpKSkKICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgICAgIHJldHVybiBlLT5nZXRBdHRy
aWJ1dGUoQVRUUl9OQU1FKSA9PSBuYW1lICYmIGUtPmdldEF0dHJpYnV0ZShBVFRSX0lEKSAhPSBu
YW1lOwotICAgICAgICB9IGVsc2UgeworICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIHJldHVy
biBlLT5nZXRBdHRyaWJ1dGUoQVRUUl9JRCkgPT0gbmFtZTsKLSAgICAgICAgfQogICAgIH0gZWxz
ZSB7CiAgICAgICAgIGlmIChjaGVja05hbWUpIHsKICAgICAgICAgICAgIC8vIGRvY3VtZW50LmFs
bCByZXR1cm5zIG9ubHkgaW1hZ2VzLCBmb3JtcywgYXBwbGV0cywgb2JqZWN0cyBhbmQgZW1iZWRz
CiAgICAgICAgICAgICAvLyBieSBuYW1lICh0aG91Z2ggZXZlcnl0aGluZyBieSBpZCkKICAgICAg
ICAgICAgIGlmICh0eXBlID09IERPQ19BTEwgJiYgCi0gICAgICAgICAgICAgICAgIShlLT5pZCgp
ID09IElEX0lNRyB8fCBlLT5pZCgpID09IElEX0ZPUk0gfHwKLSAgICAgICAgICAgICAgICAgIGUt
PmlkKCkgPT0gSURfQVBQTEVUIHx8IGUtPmlkKCkgPT0gSURfT0JKRUNUIHx8Ci0gICAgICAgICAg
ICAgICAgICBlLT5pZCgpID09IElEX0VNQkVEKSkKKyAgICAgICAgICAgICAgICAhKGUtPmhhc0xv
Y2FsTmFtZShIVE1MTmFtZXM6OmltZygpKSB8fCBlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpm
b3JtKCkpIHx8CisgICAgICAgICAgICAgICAgICBlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjph
cHBsZXQoKSkgfHwgZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b2JqZWN0KCkpIHx8CisgICAg
ICAgICAgICAgICAgICBlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjplbWJlZCgpKSkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAgICByZXR1cm4gZS0+Z2V0QXR0
cmlidXRlKEFUVFJfTkFNRSkuZG9tU3RyaW5nKCkubG93ZXIoKSA9PSBuYW1lLmxvd2VyKCkgJiYK
QEAgLTM3OSw3ICszNzYsOSBAQCB2b2lkIEhUTUxDb2xsZWN0aW9uSW1wbDo6dXBkYXRlTmFtZUNh
Y2hlCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBmb3IgKE5vZGVJbXBsICpuID0gdHJhdmVy
c2VOZXh0SXRlbShtX2Jhc2UuZ2V0KCkpOyBuOyBuID0gdHJhdmVyc2VOZXh0SXRlbShuKSkgewot
ICAgICAgICBFbGVtZW50SW1wbCAqZSA9IHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsICo+KG4pOwor
ICAgICAgICBpZiAoIW4tPmlzSFRNTEVsZW1lbnQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICBIVE1MRWxlbWVudEltcGwqIGUgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwq
PihuKTsKICAgICAgICAgUVN0cmluZyBpZEF0dHIgPSBlLT5nZXRBdHRyaWJ1dGUoQVRUUl9JRCku
c3RyaW5nKCk7CiAgICAgICAgIFFTdHJpbmcgbmFtZUF0dHIgPSBlLT5nZXRBdHRyaWJ1dGUoQVRU
Ul9OQU1FKS5zdHJpbmcoKTsKICAgICAgICAgaWYgKCFpZEF0dHIuaXNFbXB0eSgpKSB7CkBAIC0z
OTMsOSArMzkyLDkgQEAgdm9pZCBIVE1MQ29sbGVjdGlvbkltcGw6OnVwZGF0ZU5hbWVDYWNoZQog
ICAgICAgICB9CiAgICAgICAgIGlmICghbmFtZUF0dHIuaXNFbXB0eSgpICYmIGlkQXR0ciAhPSBu
YW1lQXR0cgogICAgICAgICAgICAgJiYgKHR5cGUgIT0gRE9DX0FMTCB8fCAKLSAgICAgICAgICAg
ICAgICAoZS0+aWQoKSA9PSBJRF9JTUcgfHwgZS0+aWQoKSA9PSBJRF9GT1JNIHx8Ci0gICAgICAg
ICAgICAgICAgIGUtPmlkKCkgPT0gSURfQVBQTEVUIHx8IGUtPmlkKCkgPT0gSURfT0JKRUNUIHx8
Ci0gICAgICAgICAgICAgICAgIGUtPmlkKCkgPT0gSURfRU1CRUQpKSkgeworICAgICAgICAgICAg
ICAgIChlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjppbWcoKSkgfHwgZS0+aGFzTG9jYWxOYW1l
KEhUTUxOYW1lczo6Zm9ybSgpKSB8fAorICAgICAgICAgICAgICAgICBlLT5oYXNMb2NhbE5hbWUo
SFRNTE5hbWVzOjphcHBsZXQoKSkgfHwgZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b2JqZWN0
KCkpIHx8CisgICAgICAgICAgICAgICAgIGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmVtYmVk
KCkpKSkpIHsKICAgICAgICAgICAgIC8vIGFkZCB0byBuYW1lIGNhY2hlCiAgICAgICAgICAgICBR
UHRyVmVjdG9yPE5vZGVJbXBsPiAqbmFtZVZlY3RvciA9IGluZm8tPm5hbWVDYWNoZS5maW5kKG5h
bWVBdHRyKTsKICAgICAgICAgICAgIGlmICghbmFtZVZlY3RvcikgewpAQCAtNTMyLDEyICs1MzEs
MTAgQEAgTm9kZUltcGwqIEhUTUxGb3JtQ29sbGVjdGlvbkltcGw6OmdldE5hbQogCiBOb2RlSW1w
bCogSFRNTEZvcm1Db2xsZWN0aW9uSW1wbDo6Z2V0TmFtZWRGb3JtSXRlbShpbnQgYXR0cl9pZCwg
Y29uc3QgRE9NU3RyaW5nJiBuYW1lLCBpbnQgZHVwbGljYXRlTnVtYmVyLCBib29sIGNhc2VTZW5z
aXRpdmUpIGNvbnN0CiB7Ci0gICAgaWYobV9iYXNlLT5ub2RlVHlwZSgpID09IE5vZGU6OkVMRU1F
TlRfTk9ERSkKLSAgICB7CisgICAgaWYgKG1fYmFzZS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpFTEVN
RU5UX05PREUpIHsKICAgICAgICAgSFRNTEVsZW1lbnRJbXBsKiBiYXNlRWxlbWVudCA9IHN0YXRp
Y19jYXN0PEhUTUxFbGVtZW50SW1wbCo+KG1fYmFzZS5nZXQoKSk7CiAgICAgICAgIGJvb2wgZm91
bmRJbnB1dEVsZW1lbnRzID0gZmFsc2U7Ci0gICAgICAgIGlmKGJhc2VFbGVtZW50LT5pZCgpID09
IElEX0ZPUk0pCi0gICAgICAgIHsKKyAgICAgICAgaWYgKGJhc2VFbGVtZW50LT5oYXNMb2NhbE5h
bWUoSFRNTE5hbWVzOjpmb3JtKCkpKSB7CiAgICAgICAgICAgICBIVE1MRm9ybUVsZW1lbnRJbXBs
KiBmID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50SW1wbCo+KGJhc2VFbGVtZW50KTsKICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmLT5mb3JtRWxlbWVudHMuY291bnQo
KTsgKytpKSB7CiAgICAgICAgICAgICAgICAgSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwqIGUg
PSBmLT5mb3JtRWxlbWVudHNbaV07CkBAIC01NTcsOCArNTU0LDcgQEAgTm9kZUltcGwqIEhUTUxG
b3JtQ29sbGVjdGlvbkltcGw6OmdldE5hbQogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAg
ICAgICAgaWYgKCAhZm91bmRJbnB1dEVsZW1lbnRzICkKLSAgICAgICAgeworICAgICAgICBpZiAo
IWZvdW5kSW5wdXRFbGVtZW50cykgewogICAgICAgICAgICAgSFRNTEZvcm1FbGVtZW50SW1wbCog
ZiA9IHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudEltcGwqPihiYXNlRWxlbWVudCk7CiAKICAg
ICAgICAgICAgIGZvcih1bnNpZ25lZCBpID0gMDsgaSA8IGYtPmltZ0VsZW1lbnRzLmNvdW50KCk7
ICsraSkKQEAgLTY1MCw3ICs2NDYsNyBAQCB2b2lkIEhUTUxGb3JtQ29sbGVjdGlvbkltcGw6OnVw
ZGF0ZU5hbWVDCiAKICAgICBRRGljdDxjaGFyPiBmb3VuZElucHV0RWxlbWVudHM7CiAKLSAgICBp
ZiAobV9iYXNlLT5pZCgpICE9IElEX0ZPUk0pIHsKKyAgICBpZiAoIW1fYmFzZS0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OmZvcm0oKSkpIHsKICAgICAgICAgaW5mby0+aGFzTmFtZUNhY2hlID0gdHJ1
ZTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KSW5kZXg6IGtodG1sL2h0bWwvaHRtbF9taXNjaW1w
bC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRt
bF9taXNjaW1wbC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE2CmRpZmYgLXUgLXAgLXIxLjE2
IGtodG1sL2h0bWwvaHRtbF9taXNjaW1wbC5oCi0tLSBraHRtbC9odG1sL2h0bWxfbWlzY2ltcGwu
aAkxMSBNYXkgMjAwNSAwMDo1ODoyOCAtMDAwMAkxLjE2CisrKyBraHRtbC9odG1sL2h0bWxfbWlz
Y2ltcGwuaAk1IEp1bCAyMDA1IDIzOjIwOjQwIC0wMDAwCkBAIC0zOSw3ICszOSw4IEBAIGNsYXNz
IEhUTUxCYXNlRm9udEVsZW1lbnRJbXBsIDogcHVibGljIEgKIHB1YmxpYzoKICAgICBIVE1MQmFz
ZUZvbnRFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKTsKIAotICAgIHZpcnR1YWwgSWQgaWQo
KSBjb25zdDsKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBj
b25zdCB7IHJldHVybiBUYWdTdGF0dXNGb3JiaWRkZW47IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQ
cmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KIAogICAgIERPTVN0cmluZyBjb2xvcigpIGNv
bnN0OwogICAgIHZvaWQgc2V0Q29sb3IoY29uc3QgRE9NU3RyaW5nICYpOwpJbmRleDoga2h0bWwv
aHRtbC9odG1sX29iamVjdGltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9X
ZWJDb3JlL2todG1sL2h0bWwvaHRtbF9vYmplY3RpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS42NwpkaWZmIC11IC1wIC1yMS42NyBraHRtbC9odG1sL2h0bWxfb2JqZWN0aW1wbC5jcHAK
LS0tIGtodG1sL2h0bWwvaHRtbF9vYmplY3RpbXBsLmNwcAkyOSBKdW4gMjAwNSAxNzo1MDoyNCAt
MDAwMAkxLjY3CisrKyBraHRtbC9odG1sL2h0bWxfb2JqZWN0aW1wbC5jcHAJNSBKdWwgMjAwNSAy
MzoyMDo0MCAtMDAwMApAQCAtNTgsNyArNTgsNyBAQCBuYW1lc3BhY2UgRE9NIHsKIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KIAogSFRNTEFwcGxldEVsZW1lbnRJbXBsOjpIVE1MQXBwbGV0RWxlbWVudElt
cGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgOiBIVE1MRWxlbWVudEltcGwoZG9jKQorICA6IEhUTUxF
bGVtZW50SW1wbChIVE1MTmFtZXM6OmFwcGxldCgpLCBkb2MpCiB7CiAgICAgYXBwbGV0SW5zdGFu
Y2UgPSAwOwogICAgIG1fYWxsUGFyYW1zQXZhaWxhYmxlID0gZmFsc2U7CkBAIC02OSw5ICs2OSw5
IEBAIEhUTUxBcHBsZXRFbGVtZW50SW1wbDo6fkhUTUxBcHBsZXRFbGVtZW4KICAgICBkZWxldGUg
YXBwbGV0SW5zdGFuY2U7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MQXBwbGV0RWxlbWVudEltcGw6
OmlkKCkgY29uc3QKK2Jvb2wgSFRNTEFwcGxldEVsZW1lbnRJbXBsOjpjaGVja0RURChjb25zdCBO
b2RlSW1wbCogbmV3Q2hpbGQpCiB7Ci0gICAgcmV0dXJuIElEX0FQUExFVDsKKwlyZXR1cm4gbmV3
Q2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpwYXJhbSgpKSB8fCBIVE1MRWxlbWVudEltcGw6
OmNoZWNrRFREKG5ld0NoaWxkKTsKIH0KIAogYm9vbCBIVE1MQXBwbGV0RWxlbWVudEltcGw6Om1h
cFRvRW50cnkoTm9kZUltcGw6OklkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQp
IGNvbnN0CkBAIC0zNTMsMTYgKzM1MywxNiBAQCB2b2lkIEhUTUxBcHBsZXRFbGVtZW50SW1wbDo6
c2V0V2lkdGgoY29uCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxFbWJlZEVsZW1lbnRJbXBs
OjpIVE1MRW1iZWRFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAgIDogSFRNTEVsZW1l
bnRJbXBsKGRvYyksIGVtYmVkSW5zdGFuY2UoMCkKKyAgICA6IEhUTUxFbGVtZW50SW1wbChIVE1M
TmFtZXM6OmVtYmVkKCksIGRvYyksIGVtYmVkSW5zdGFuY2UoMCkKIHt9CiAKIEhUTUxFbWJlZEVs
ZW1lbnRJbXBsOjp+SFRNTEVtYmVkRWxlbWVudEltcGwoKQogewogfQogCi1Ob2RlSW1wbDo6SWQg
SFRNTEVtYmVkRWxlbWVudEltcGw6OmlkKCkgY29uc3QKK2Jvb2wgSFRNTEVtYmVkRWxlbWVudElt
cGw6OmNoZWNrRFREKGNvbnN0IE5vZGVJbXBsKiBuZXdDaGlsZCkKIHsKLSAgICByZXR1cm4gSURf
RU1CRUQ7CisJcmV0dXJuIG5ld0NoaWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6cGFyYW0oKSkg
fHwgSFRNTEVsZW1lbnRJbXBsOjpjaGVja0RURChuZXdDaGlsZCk7CiB9CiAKICNpZiBBUFBMRV9D
SEFOR0VTCkBAIC00NzksNyArNDc5LDcgQEAgYm9vbCBIVE1MRW1iZWRFbGVtZW50SW1wbDo6cmVu
ZGVyZXJJc05lZQogICAgIEtIVE1MUGFydCAqcGFydCA9IGdldERvY3VtZW50KCktPnBhcnQoKTsK
ICAgICBpZiAoIXBhcnQpCiAJcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBwYXJ0LT5wbHVnaW5z
RW5hYmxlZCgpICYmIHBhcmVudE5vZGUoKS0+aWQoKSAhPSBJRF9PQkpFQ1Q7CisgICAgcmV0dXJu
IHBhcnQtPnBsdWdpbnNFbmFibGVkKCkgJiYgIXBhcmVudE5vZGUoKS0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6Om9iamVjdCgpKTsKIH0KIAogUmVuZGVyT2JqZWN0ICpIVE1MRW1iZWRFbGVtZW50SW1w
bDo6Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEgKmFyZW5hLCBSZW5kZXJTdHlsZSAqc3R5bGUp
CkBAIC01MDQsOSArNTA0LDkgQEAgYm9vbCBIVE1MRW1iZWRFbGVtZW50SW1wbDo6aXNVUkxBdHRy
aWJ1dAogCiBIVE1MT2JqZWN0RWxlbWVudEltcGw6OkhUTUxPYmplY3RFbGVtZW50SW1wbChEb2N1
bWVudFB0ciAqZG9jKSAKICNpZiBBUFBMRV9DSEFOR0VTCi06IEhUTUxFbGVtZW50SW1wbChkb2Mp
LCBtX2ltYWdlTG9hZGVyKDApLCBvYmplY3RJbnN0YW5jZSgwKQorOiBIVE1MRWxlbWVudEltcGwo
SFRNTE5hbWVzOjpvYmplY3QoKSwgZG9jKSwgbV9pbWFnZUxvYWRlcigwKSwgb2JqZWN0SW5zdGFu
Y2UoMCkKICNlbHNlCi06IEhUTUxFbGVtZW50SW1wbChkb2MpLCBtX2ltYWdlTG9hZGVyKDApCis6
IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6Om9iamVjdCgpLCBkb2MpLCBtX2ltYWdlTG9hZGVy
KDApCiAjZW5kaWYKIHsKICAgICBuZWVkV2lkZ2V0VXBkYXRlID0gZmFsc2U7CkBAIC01MTgsOSAr
NTE4LDkgQEAgSFRNTE9iamVjdEVsZW1lbnRJbXBsOjp+SFRNTE9iamVjdEVsZW1lbgogICAgIGRl
bGV0ZSBtX2ltYWdlTG9hZGVyOwogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTE9iamVjdEVsZW1lbnRJ
bXBsOjppZCgpIGNvbnN0Citib29sIEhUTUxPYmplY3RFbGVtZW50SW1wbDo6Y2hlY2tEVEQoY29u
c3QgTm9kZUltcGwqIG5ld0NoaWxkKQogewotICAgIHJldHVybiBJRF9PQkpFQ1Q7CisJcmV0dXJu
IG5ld0NoaWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6cGFyYW0oKSkgfHwgSFRNTEVsZW1lbnRJ
bXBsOjpjaGVja0RURChuZXdDaGlsZCk7CiB9CiAKICNpZiBBUFBMRV9DSEFOR0VTCkBAIC01NTUs
NyArNTU1LDcgQEAgS0pTOjpCaW5kaW5nczo6SW5zdGFuY2UgKkhUTUxPYmplY3RFbGVtZQogSFRN
TEZvcm1FbGVtZW50SW1wbCAqSFRNTE9iamVjdEVsZW1lbnRJbXBsOjpmb3JtKCkgY29uc3QKIHsK
ICAgICBmb3IgKE5vZGVJbXBsICpwID0gcGFyZW50Tm9kZSgpOyBwICE9IDA7IHAgPSBwLT5wYXJl
bnROb2RlKCkpIHsKLSAgICAgICAgaWYgKHAtPmlkKCkgPT0gSURfRk9STSkKKyAgICAgICAgaWYg
KHAtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpmb3JtKCkpKQogICAgICAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudEltcGwgKj4ocCk7CiAgICAgfQogICAgIApAQCAtOTUw
LDcgKzk1MCw3IEBAIHZvaWQgSFRNTE9iamVjdEVsZW1lbnRJbXBsOjpzZXRXaWR0aChjb24KIC8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KIAogSFRNTFBhcmFtRWxlbWVudEltcGw6OkhUTUxQYXJhbUVsZW1l
bnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0gICAgOiBIVE1MRWxlbWVudEltcGwoZG9jKQorICAg
IDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6cGFyYW0oKSwgZG9jKQogewogfQogCkBAIC05
NTgsMTEgKzk1OCw2IEBAIEhUTUxQYXJhbUVsZW1lbnRJbXBsOjp+SFRNTFBhcmFtRWxlbWVudEkK
IHsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxQYXJhbUVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIElEX1BBUkFNOwotfQotCiB2b2lkIEhUTUxQYXJhbUVsZW1lbnRJbXBsOjpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICphdHRyKQogewogICAgIHN3
aXRjaCggYXR0ci0+aWQoKSApCkluZGV4OiBraHRtbC9odG1sL2h0bWxfb2JqZWN0aW1wbC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbF9vYmpl
Y3RpbXBsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzEKZGlmZiAtdSAtcCAtcjEuMzEga2h0
bWwvaHRtbC9odG1sX29iamVjdGltcGwuaAotLS0ga2h0bWwvaHRtbC9odG1sX29iamVjdGltcGwu
aAkxMSBNYXkgMjAwNSAwNTo0OTozNCAtMDAwMAkxLjMxCisrKyBraHRtbC9odG1sL2h0bWxfb2Jq
ZWN0aW1wbC5oCTUgSnVsIDIwMDUgMjM6MjA6NDAgLTAwMDAKQEAgLTQyLDExICs0MiwxMiBAQCBj
bGFzcyBIVE1MQXBwbGV0RWxlbWVudEltcGwgOiBwdWJsaWMgSFRNCiB7CiBwdWJsaWM6CiAgICAg
SFRNTEFwcGxldEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpOwotCiAgICAgfkhUTUxBcHBs
ZXRFbGVtZW50SW1wbCgpOwogCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwotCisgICAgdmly
dHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFn
U3RhdHVzUmVxdWlyZWQ7IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsg
cmV0dXJuIDE7IH0KKwl2aXJ0dWFsIGJvb2wgY2hlY2tEVEQoY29uc3QgTm9kZUltcGwqIG5ld0No
aWxkKTsKKwkKICAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShJZCBhdHRyLCBNYXBwZWRBdHRy
aWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRB
dHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqdG9rZW4pOwogICAgIApAQCAtMTEyLDEwICsx
MTMsMTEgQEAgY2xhc3MgSFRNTEVtYmVkRWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTAogewogcHVi
bGljOgogICAgIEhUTUxFbWJlZEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpOwotCiAgICAg
fkhUTUxFbWJlZEVsZW1lbnRJbXBsKCk7CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7Cisg
ICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1
cm4gVGFnU3RhdHVzUmVxdWlyZWQ7IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNv
bnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIGJvb2wgY2hlY2tEVEQoY29uc3QgTm9kZUlt
cGwqIG5ld0NoaWxkKTsKIAogICAgIHZpcnR1YWwgYm9vbCBtYXBUb0VudHJ5KElkIGF0dHIsIE1h
cHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICphdHRyKTsKQEAgLTE0NiwxMCAr
MTQ4LDExIEBAIGNsYXNzIEhUTUxPYmplY3RFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE0KIHsKIHB1
YmxpYzoKICAgICBIVE1MT2JqZWN0RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYyk7Ci0KICAg
ICB+SFRNTE9iamVjdEVsZW1lbnRJbXBsKCk7CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7
CisgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyBy
ZXR1cm4gVGFnU3RhdHVzUmVxdWlyZWQ7IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgp
IGNvbnN0IHsgcmV0dXJuIDc7IH0KKwl2aXJ0dWFsIGJvb2wgY2hlY2tEVEQoY29uc3QgTm9kZUlt
cGwqIG5ld0NoaWxkKTsKIAogICAgIEhUTUxGb3JtRWxlbWVudEltcGwgKmZvcm0oKSBjb25zdDsK
IApAQCAtMjQ3LDEwICsyNTAsMTAgQEAgY2xhc3MgSFRNTFBhcmFtRWxlbWVudEltcGwgOiBwdWJs
aWMgSFRNTAogICAgIGZyaWVuZCBjbGFzcyBIVE1MQXBwbGV0RWxlbWVudEltcGw7CiBwdWJsaWM6
CiAgICAgSFRNTFBhcmFtRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYyk7Ci0KICAgICB+SFRN
TFBhcmFtRWxlbWVudEltcGwoKTsKIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKKyAgICB2
aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBU
YWdTdGF0dXNGb3JiaWRkZW47IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0
IHsgcmV0dXJuIDA7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShN
YXBwZWRBdHRyaWJ1dGVJbXBsICp0b2tlbik7CiAKSW5kZXg6IGtodG1sL2h0bWwvaHRtbF90YWJs
ZWltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0
bWwvaHRtbF90YWJsZWltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjUzCmRpZmYgLXUg
LXAgLXIxLjUzIGtodG1sL2h0bWwvaHRtbF90YWJsZWltcGwuY3BwCi0tLSBraHRtbC9odG1sL2h0
bWxfdGFibGVpbXBsLmNwcAkxNyBKdW4gMjAwNSAyMTo1NTozOSAtMDAwMAkxLjUzCisrKyBraHRt
bC9odG1sL2h0bWxfdGFibGVpbXBsLmNwcAk1IEp1bCAyMDA1IDIzOjIwOjQyIC0wMDAwCkBAIC01
MSw3ICs1MSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBraHRtbDsKIG5hbWVzcGFjZSBET00gewogCiBI
VE1MVGFibGVFbGVtZW50SW1wbDo6SFRNTFRhYmxlRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRv
YykKLSAgOiBIVE1MRWxlbWVudEltcGwoZG9jKQorICA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFt
ZXM6OnRhYmxlKCksIGRvYykKIHsKICAgICB0Q2FwdGlvbiA9IDA7CiAgICAgaGVhZCA9IDA7CkBA
IC03Myw5ICs3MywxMyBAQCBIVE1MVGFibGVFbGVtZW50SW1wbDo6fkhUTUxUYWJsZUVsZW1lbnRJ
CiB7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MVGFibGVFbGVtZW50SW1wbDo6aWQoKSBjb25zdAor
Ym9vbCBIVE1MVGFibGVFbGVtZW50SW1wbDo6Y2hlY2tEVEQoY29uc3QgTm9kZUltcGwqIG5ld0No
aWxkKQogewotICAgIHJldHVybiBJRF9UQUJMRTsKKyAgICByZXR1cm4gbmV3Q2hpbGQtPmlzVGV4
dE5vZGUoKSB8fCBuZXdDaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmNhcHRpb24oKSkgfHwK
KyAgICAgICAgICAgbmV3Q2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpjb2woKSkgfHwgbmV3
Q2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpjb2xncm91cCgpKSB8fAorICAgICAgICAgICBu
ZXdDaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRoZWFkKCkpIHx8IG5ld0NoaWxkLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6dGZvb3QoKSkgfHwKKyAgICAgICAgICAgbmV3Q2hpbGQtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjp0Ym9keSgpKSB8fCBuZXdDaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OmZvcm0oKSkgfHwKKyAgICAgICAgICAgbmV3Q2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjpzY3JpcHQoKSk7CiB9CiAKIE5vZGVJbXBsKiBIVE1MVGFibGVFbGVtZW50SW1wbDo6c2V0Q2Fw
dGlvbiggSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnRJbXBsICpjICkKQEAgLTE0Niw3ICsxNTAsNyBA
QCBIVE1MRWxlbWVudEltcGwgKkhUTUxUYWJsZUVsZW1lbnRJbXBsOjpjCiAgICAgaWYoIWhlYWQp
CiAgICAgewogICAgICAgICBpbnQgZXhjZXB0aW9uY29kZSA9IDA7Ci0gICAgICAgIGhlYWQgPSBu
ZXcgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsKGRvY1B0cigpLCBJRF9USEVBRCwgdHJ1ZSAv
KiBpbXBsaWNpdCAqLyk7CisgICAgICAgIGhlYWQgPSBuZXcgSFRNTFRhYmxlU2VjdGlvbkVsZW1l
bnRJbXBsKEhUTUxOYW1lczo6dGhlYWQoKSwgZG9jUHRyKCksIHRydWUgLyogaW1wbGljaXQgKi8p
OwogICAgICAgICBpZihmb290KQogICAgICAgICAgICAgaW5zZXJ0QmVmb3JlKCBoZWFkLCBmb290
LCBleGNlcHRpb25jb2RlICk7CiAgICAgICAgIGVsc2UgaWYoZmlyc3RCb2R5KQpAQCAtMTcxLDcg
KzE3NSw3IEBAIEhUTUxFbGVtZW50SW1wbCAqSFRNTFRhYmxlRWxlbWVudEltcGw6OmMKICAgICBp
ZighZm9vdCkKICAgICB7CiAgICAgICAgIGludCBleGNlcHRpb25jb2RlID0gMDsKLSAgICAgICAg
Zm9vdCA9IG5ldyBIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGwoZG9jUHRyKCksIElEX1RGT09U
LCB0cnVlIC8qaW1wbGljaXQgKi8pOworICAgICAgICBmb290ID0gbmV3IEhUTUxUYWJsZVNlY3Rp
b25FbGVtZW50SW1wbChIVE1MTmFtZXM6OnRmb290KCksIGRvY1B0cigpLCB0cnVlIC8qaW1wbGlj
aXQgKi8pOwogICAgICAgICBpZihmaXJzdEJvZHkpCiAgICAgICAgICAgICBpbnNlcnRCZWZvcmUo
IGZvb3QsIGZpcnN0Qm9keSwgZXhjZXB0aW9uY29kZSApOwogICAgICAgICBlbHNlCkBAIC0yMTYs
NyArMjIwLDcgQEAgSFRNTEVsZW1lbnRJbXBsICpIVE1MVGFibGVFbGVtZW50SW1wbDo6aQogICAg
IC8vIChub3RlOiB0aGlzIGlzIGRpZmZlcmVudCBmcm9tICJpZiB0aGUgdGFibGUgaGFzIG5vIHNl
Y3Rpb25zIiwgc2luY2Ugd2UgY2FuIGhhdmUKICAgICAvLyA8VEFCTEU+PFRSPikKICAgICBpZigh
Zmlyc3RCb2R5ICYmICFoZWFkICYmICFmb290ICYmICFoYXNDaGlsZE5vZGVzKCkpCi0gICAgICAg
IHNldFRCb2R5KCBuZXcgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsKGRvY1B0cigpLCBJRF9U
Qk9EWSwgdHJ1ZSAvKiBpbXBsaWNpdCAqLykgKTsKKyAgICAgICAgc2V0VEJvZHkoIG5ldyBIVE1M
VGFibGVTZWN0aW9uRWxlbWVudEltcGwoSFRNTE5hbWVzOjp0Ym9keSgpLCBkb2NQdHIoKSwgdHJ1
ZSAvKiBpbXBsaWNpdCAqLykgKTsKIAogICAgIC8va2REZWJ1Zyg2MDMwKSA8PCBrX2Z1bmNpbmZv
IDw8IGluZGV4IDw8IGVuZGw7CiAgICAgLy8gSUUgdHJlYXRzIGluZGV4PS0xIGFzIGRlZmF1bHQg
dmFsdWUgbWVhbmluZyAnYXBwZW5kIGFmdGVyIGxhc3QnCkBAIC0yMzAsNyArMjM0LDggQEAgSFRN
TEVsZW1lbnRJbXBsICpIVE1MVGFibGVFbGVtZW50SW1wbDo6aQogICAgIHsKIAkvLyB0aGVyZSBj
b3VsZCBiZSAyIHRmb290IGVsZW1lbnRzIGluIHRoZSB0YWJsZS4gT25seSB0aGUgZmlyc3Qgb25l
IGlzIHRoZSAiZm9vdCIsIHRoYXQncyB3aHkgd2UgaGF2ZSB0aGUgbW9yZQogCS8vIGNvbXBsaWNh
dGVkIGlmIHN0YXRlbWVudCBiZWxvdy4KLSAgICAgICAgaWYgKCBub2RlICE9IGZvb3QgJiYgKG5v
ZGUtPmlkKCkgPT0gSURfVEhFQUQgfHwgbm9kZS0+aWQoKSA9PSBJRF9URk9PVCB8fCBub2RlLT5p
ZCgpID09IElEX1RCT0RZKSApCisgICAgICAgIGlmIChub2RlICE9IGZvb3QgJiYgKG5vZGUtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjp0aGVhZCgpKSB8fCBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6dGZvb3QoKSkgfHwgCisgICAgICAgICAgICBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
dGJvZHkoKSkpKQogICAgICAgICB7CiAgICAgICAgICAgICBzZWN0aW9uID0gc3RhdGljX2Nhc3Q8
SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsICo+KG5vZGUpOwogICAgICAgICAgICAgbGFzdFNl
Y3Rpb24gPSBzZWN0aW9uOwpAQCAtMjc2LDggKzI4MSw4IEBAIHZvaWQgSFRNTFRhYmxlRWxlbWVu
dEltcGw6OmRlbGV0ZVJvdyggbG8KICAgICBib29sIGZvdW5kID0gZmFsc2U7CiAgICAgZm9yICgg
OyBub2RlIDsgbm9kZSA9IG5vZGUtPm5leHRTaWJsaW5nKCkgKQogICAgIHsKLSAgICAgICAgaWYg
KCBub2RlICE9IGZvb3QgJiYgKG5vZGUtPmlkKCkgPT0gSURfVEhFQUQgfHwgbm9kZS0+aWQoKSA9
PSBJRF9URk9PVCB8fCBub2RlLT5pZCgpID09IElEX1RCT0RZKSApCi0gICAgICAgIHsKKyAgICAg
ICAgaWYgKG5vZGUgIT0gZm9vdCAmJiAobm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRoZWFk
KCkpIHx8IG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0Zm9vdCgpKSB8fCAKKyAgICAgICAg
ICAgIG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0Ym9keSgpKSkpIHsKICAgICAgICAgICAg
IHNlY3Rpb24gPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGwgKj4obm9k
ZSk7CiAgICAgICAgICAgICBsYXN0U2VjdGlvbiA9IHNlY3Rpb247CiAgICAgICAgICAgICBpbnQg
cm93cyA9IHNlY3Rpb24tPm51bVJvd3MoKTsKQEAgLTMwOSw3ICszMTQsNyBAQCBOb2RlSW1wbCAq
SFRNTFRhYmxlRWxlbWVudEltcGw6OmFkZENoaWxkCiAgICAga2REZWJ1ZyggNjAzMCApIDw8IG5v
ZGVOYW1lKCkuc3RyaW5nKCkgPDwgIihUYWJsZSk6OmFkZENoaWxkKCAiIDw8IGNoaWxkLT5ub2Rl
TmFtZSgpLnN0cmluZygpIDw8ICIgKSIgPDwgZW5kbDsKICNlbmRpZgogCi0gICAgaWYgKGNoaWxk
LT5pZCgpID09IElEX0ZPUk0pIHsKKyAgICBpZiAoY2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVz
Ojpmb3JtKCkpKSB7CiAgICAgICAgIC8vIEZpcnN0IGFkZCB0aGUgY2hpbGQuCiAgICAgICAgIEhU
TUxFbGVtZW50SW1wbDo6YWRkQ2hpbGQoY2hpbGQpOwogICAgICAgICAvLyBOb3cgc2ltcGx5IHJl
dHVybiBvdXJzZWx2ZXMgYXMgdGhlIG5ld25vZGUuICBUaGlzIGhhcyB0aGUgZWZmZWN0IG9mCkBA
IC0zMzcsMjggKzM0MiwxNSBAQCBOb2RlSW1wbCAqSFRNTFRhYmxlRWxlbWVudEltcGw6OmFkZENo
aWxkCiAKICAgICBpbnQgZXhjZXB0aW9uY29kZSA9IDA7CiAgICAgTm9kZUltcGwgKnJldHZhbCA9
IGFwcGVuZENoaWxkKCBjaGlsZCwgZXhjZXB0aW9uY29kZSApOwotICAgIGlmICggcmV0dmFsICkg
ewotCXN3aXRjaChjaGlsZC0+aWQoKSkgewotCWNhc2UgSURfQ0FQVElPTjoKLQkgICAgaWYgKCAh
dENhcHRpb24gKQotCQl0Q2FwdGlvbiA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZUNhcHRpb25FbGVt
ZW50SW1wbCAqPihjaGlsZCk7Ci0JICAgIGJyZWFrOwotCWNhc2UgSURfQ09MOgotCWNhc2UgSURf
Q09MR1JPVVA6Ci0JICAgIGJyZWFrOwotCWNhc2UgSURfVEhFQUQ6Ci0JICAgIGlmICggIWhlYWQg
KQotCQloZWFkID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsICo+KGNo
aWxkKTsKLQkgICAgYnJlYWs7Ci0JY2FzZSBJRF9URk9PVDoKLQkgICAgaWYgKCAhZm9vdCApCi0J
CWZvb3QgPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGwgKj4oY2hpbGQp
OwotCSAgICBicmVhazsKLQljYXNlIElEX1RCT0RZOgotCSAgICBpZiAoICFmaXJzdEJvZHkgKQot
CQlmaXJzdEJvZHkgPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGwgKj4o
Y2hpbGQpOwotCSAgICBicmVhazsKLQl9CisgICAgaWYgKHJldHZhbCkgeworICAgICAgICBpZiAo
IXRDYXB0aW9uICYmIGNoaWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Y2FwdGlvbigpKSkKKyAg
ICAgICAgICAgIHRDYXB0aW9uID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnRJ
bXBsICo+KGNoaWxkKTsKKyAgICAgICAgZWxzZSBpZiAoIWhlYWQgJiYgY2hpbGQtPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjp0aGVhZCgpKSkKKyAgICAgICAgICAgIGhlYWQgPSBzdGF0aWNfY2FzdDxI
VE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGwgKj4oY2hpbGQpOworICAgICAgICBlbHNlIGlmICgh
Zm9vdCAmJiBjaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRmb290KCkpKQorICAgICAgICAg
ICAgZm9vdCA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbCAqPihjaGls
ZCk7CisJZWxzZSBpZiAoIWZpcnN0Qm9keSAmJiBjaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
OnRib2R5KCkpKQorCSAgICBmaXJzdEJvZHkgPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVTZWN0aW9u
RWxlbWVudEltcGwgKj4oY2hpbGQpOwogICAgIH0KICAgICByZXR1cm4gcmV0dmFsOwogfQpAQCAt
ODAyLDE3ICs3OTQsMTYgQEAgdm9pZCBIVE1MVGFibGVQYXJ0RWxlbWVudEltcGw6OnBhcnNlTWFw
cAogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbDo6
SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2hvcnQgdGFn
aWQsIGJvb2wgaW1wbGljaXQpCi0gICAgOiBIVE1MVGFibGVQYXJ0RWxlbWVudEltcGwoZG9jKQor
SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsOjpIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGwo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnRQdHIgKmRvYywgYm9vbCBpbXBs
aWNpdCkKKyAgICA6IEhUTUxUYWJsZVBhcnRFbGVtZW50SW1wbCh0YWdOYW1lLCBkb2MpCiB7Ci0g
ICAgX2lkID0gdGFnaWQ7CiAgICAgbV9pbXBsaWNpdCA9IGltcGxpY2l0OwogfQogCi1Ob2RlSW1w
bDo6SWQgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Citib29sIEhUTUxU
YWJsZVNlY3Rpb25FbGVtZW50SW1wbDo6Y2hlY2tEVEQoY29uc3QgTm9kZUltcGwqIG5ld0NoaWxk
KQogewotICAgIHJldHVybiBfaWQ7CisgICAgcmV0dXJuIG5ld0NoaWxkLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6dHIoKSkgfHwgbmV3Q2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpmb3JtKCkp
IHx8CisgICAgICAgICAgIG5ld0NoaWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c2NyaXB0KCkp
OwogfQogCiBOb2RlSW1wbCAqSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsOjphZGRDaGlsZChO
b2RlSW1wbCAqY2hpbGQpCkBAIC04MjEsNyArODEyLDcgQEAgTm9kZUltcGwgKkhUTUxUYWJsZVNl
Y3Rpb25FbGVtZW50SW1wbDo6YQogICAgIGtkRGVidWcoIDYwMzAgKSA8PCBub2RlTmFtZSgpLnN0
cmluZygpIDw8ICIoVGJvZHkpOjphZGRDaGlsZCggIiA8PCBjaGlsZC0+bm9kZU5hbWUoKS5zdHJp
bmcoKSA8PCAiICkiIDw8IGVuZGw7CiAjZW5kaWYKIAotICAgIGlmIChjaGlsZC0+aWQoKSA9PSBJ
RF9GT1JNKSB7CisgICAgaWYgKGNoaWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Zm9ybSgpKSkg
ewogICAgICAgICAvLyBGaXJzdCBhZGQgdGhlIGNoaWxkLgogICAgICAgICBIVE1MRWxlbWVudElt
cGw6OmFkZENoaWxkKGNoaWxkKTsKICAgICAgICAgLy8gTm93IHNpbXBseSByZXR1cm4gb3Vyc2Vs
dmVzIGFzIHRoZSBuZXdub2RlLiAgVGhpcyBoYXMgdGhlIGVmZmVjdCBvZgpAQCAtODc3LDcgKzg2
OCw3IEBAIGludCBIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGw6Om51bVJvd3MKICAgICBpbnQg
cm93cyA9IDA7CiAgICAgY29uc3QgTm9kZUltcGwgKm4gPSBmaXJzdENoaWxkKCk7CiAgICAgd2hp
bGUgKG4pIHsKLSAgICAgICAgaWYgKG4tPmlkKCkgPT0gSURfVFIpCisgICAgICAgIGlmIChuLT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6dHIoKSkpCiAgICAgICAgICAgICByb3dzKys7CiAgICAgICAg
IG4gPSBuLT5uZXh0U2libGluZygpOwogICAgIH0KQEAgLTkzMiw5ICs5MjMsMTAgQEAgU2hhcmVk
UHRyPEhUTUxDb2xsZWN0aW9uSW1wbD4gSFRNTFRhYmxlUwogCiAvLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CiAKLU5vZGVJbXBsOjpJZCBIVE1MVGFibGVSb3dFbGVtZW50SW1wbDo6aWQoKSBjb25zdAorYm9v
bCBIVE1MVGFibGVSb3dFbGVtZW50SW1wbDo6Y2hlY2tEVEQoY29uc3QgTm9kZUltcGwqIG5ld0No
aWxkKQogewotICAgIHJldHVybiBJRF9UUjsKKyAgICByZXR1cm4gbmV3Q2hpbGQtPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjp0ZCgpKSB8fCBuZXdDaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRo
KCkpIHx8CisgICAgICAgICAgIG5ld0NoaWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Zm9ybSgp
KSB8fCBuZXdDaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnNjcmlwdCgpKTsKIH0KIAogTm9k
ZUltcGwgKkhUTUxUYWJsZVJvd0VsZW1lbnRJbXBsOjphZGRDaGlsZChOb2RlSW1wbCAqY2hpbGQp
CkBAIC05NDMsNyArOTM1LDcgQEAgTm9kZUltcGwgKkhUTUxUYWJsZVJvd0VsZW1lbnRJbXBsOjph
ZGRDaAogICAgIGtkRGVidWcoIDYwMzAgKSA8PCBub2RlTmFtZSgpLnN0cmluZygpIDw8ICIoVHJv
dyk6OmFkZENoaWxkKCAiIDw8IGNoaWxkLT5ub2RlTmFtZSgpLnN0cmluZygpIDw8ICIgKSIgPDwg
ZW5kbDsKICNlbmRpZgogCi0gICAgaWYgKGNoaWxkLT5pZCgpID09IElEX0ZPUk0pIHsKKyAgICBp
ZiAoY2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpmb3JtKCkpKSB7CiAgICAgICAgIC8vIEZp
cnN0IGFkZCB0aGUgY2hpbGQuCiAgICAgICAgIEhUTUxFbGVtZW50SW1wbDo6YWRkQ2hpbGQoY2hp
bGQpOwogICAgICAgICAvLyBOb3cgc2ltcGx5IHJldHVybiBvdXJzZWx2ZXMgYXMgdGhlIG5ld25v
ZGUuICBUaGlzIGhhcyB0aGUgZWZmZWN0IG9mCkBAIC05NTgsMTYgKzk1MCwxNiBAQCBsb25nIEhU
TUxUYWJsZVJvd0VsZW1lbnRJbXBsOjpyb3dJbmRleCgpCiAgICAgaW50IHJJbmRleCA9IDA7CiAK
ICAgICBOb2RlSW1wbCAqdGFibGUgPSBwYXJlbnROb2RlKCk7Ci0gICAgaWYgKCAhdGFibGUgKQor
ICAgIGlmICghdGFibGUpCiAJcmV0dXJuIC0xOwogICAgIHRhYmxlID0gdGFibGUtPnBhcmVudE5v
ZGUoKTsKLSAgICBpZiAoICF0YWJsZSB8fCB0YWJsZS0+aWQoKSAhPSBJRF9UQUJMRSApCisgICAg
aWYgKCF0YWJsZSB8fCAhdGFibGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0YWJsZSgpKSkKIAly
ZXR1cm4gLTE7CiAKICAgICBIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGwgKmZvb3QgPSBzdGF0
aWNfY2FzdDxIVE1MVGFibGVFbGVtZW50SW1wbCAqPih0YWJsZSktPnRGb290KCk7CiAgICAgTm9k
ZUltcGwgKm5vZGUgPSB0YWJsZS0+Zmlyc3RDaGlsZCgpOwotICAgIHdoaWxlICggbm9kZSApIHsK
LSAgICAgICAgaWYgKCBub2RlICE9IGZvb3QgJiYgKG5vZGUtPmlkKCkgPT0gSURfVEhFQUQgfHwg
bm9kZS0+aWQoKSA9PSBJRF9URk9PVCB8fCBub2RlLT5pZCgpID09IElEX1RCT0RZKSApIHsKKyAg
ICB3aGlsZSAobm9kZSkgeworICAgICAgICBpZiAobm9kZSAhPSBmb290ICYmIChub2RlLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6dGhlYWQoKSkgfHwgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
OnRmb290KCkpIHx8IG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0Ym9keSgpKSkpIHsKIAkg
ICAgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsKiBzZWN0aW9uID0gc3RhdGljX2Nhc3Q8SFRN
TFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsICo+KG5vZGUpOwogCSAgICBjb25zdCBOb2RlSW1wbCAq
cm93ID0gc2VjdGlvbi0+Zmlyc3RDaGlsZCgpOwogCSAgICB3aGlsZSAoIHJvdyApIHsKQEAgLTk5
Niw3ICs5ODgsNyBAQCBsb25nIEhUTUxUYWJsZVJvd0VsZW1lbnRJbXBsOjpzZWN0aW9uUm93CiAg
ICAgY29uc3QgTm9kZUltcGwgKm4gPSB0aGlzOwogICAgIGRvIHsKICAgICAgICAgbiA9IG4tPnBy
ZXZpb3VzU2libGluZygpOwotICAgICAgICBpZiAobiAmJiBuLT5pc0VsZW1lbnROb2RlKCkgJiYg
bi0+aWQoKSA9PSBJRF9UUikKKyAgICAgICAgaWYgKG4gJiYgbi0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OnRyKCkpKQogICAgICAgICAgICAgckluZGV4Kys7CiAgICAgfQogICAgIHdoaWxlIChuKTsK
QEAgLTEwMTMsNyArMTAwNSw3IEBAIEhUTUxFbGVtZW50SW1wbCAqSFRNTFRhYmxlUm93RWxlbWVu
dEltcGwKICAgICAgICAgZXhjZXB0aW9uY29kZSA9IERPTUV4Y2VwdGlvbjo6SU5ERVhfU0laRV9F
UlI7IC8vIHBlciB0aGUgRE9NCiAgICAgZWxzZQogICAgIHsKLSAgICAgICAgYyA9IG5ldyBIVE1M
VGFibGVDZWxsRWxlbWVudEltcGwoZG9jUHRyKCksIElEX1REKTsKKyAgICAgICAgYyA9IG5ldyBI
VE1MVGFibGVDZWxsRWxlbWVudEltcGwoSFRNTE5hbWVzOjp0ZCgpLCBkb2NQdHIoKSk7CiAgICAg
ICAgIGlmKG51bUNlbGxzID09IGluZGV4IHx8IGluZGV4ID09IC0xKQogICAgICAgICAgICAgYXBw
ZW5kQ2hpbGQoYywgZXhjZXB0aW9uY29kZSk7CiAgICAgICAgIGVsc2UgewpAQCAtMTEwMywxNSAr
MTA5NSwxNCBAQCB2b2lkIEhUTUxUYWJsZVJvd0VsZW1lbnRJbXBsOjpzZXRWQWxpZ24oCiAKIC8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KIAotSFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsOjpIVE1MVGFibGVD
ZWxsRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgaW50IHRhZykKLSAgOiBIVE1MVGFibGVQ
YXJ0RWxlbWVudEltcGwoZG9jKQorSFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsOjpIVE1MVGFibGVD
ZWxsRWxlbWVudEltcGwoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnRQdHIg
KmRvYykKKyAgOiBIVE1MVGFibGVQYXJ0RWxlbWVudEltcGwodGFnTmFtZSwgZG9jKQogewotICBf
Y29sID0gLTE7Ci0gIF9yb3cgPSAtMTsKLSAgY1NwYW4gPSByU3BhbiA9IDE7Ci0gIF9pZCA9IHRh
ZzsKLSAgcm93SGVpZ2h0ID0gMDsKLSAgbV9zb2xpZCA9IGZhbHNlOworICAgIF9jb2wgPSAtMTsK
KyAgICBfcm93ID0gLTE7CisgICAgY1NwYW4gPSByU3BhbiA9IDE7CisgICAgcm93SGVpZ2h0ID0g
MDsKKyAgICBtX3NvbGlkID0gZmFsc2U7CiB9CiAKIEhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbDo6
fkhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbCgpCkBAIC0xMTIyLDcgKzExMTMsNyBAQCBsb25nIEhU
TUxUYWJsZUNlbGxFbGVtZW50SW1wbDo6Y2VsbEluZGV4CiB7CiAgICAgaW50IGluZGV4ID0gMDsK
ICAgICBmb3IgKGNvbnN0IE5vZGVJbXBsICogbm9kZSA9IHByZXZpb3VzU2libGluZygpOyBub2Rl
OyBub2RlID0gbm9kZS0+cHJldmlvdXNTaWJsaW5nKCkpIHsKLSAgICAgICAgaWYgKG5vZGUtPmlk
KCkgPT0gSURfVEQgfHwgbm9kZS0+aWQoKSA9PSBJRF9USCkKKyAgICAgICAgaWYgKG5vZGUtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjp0ZCgpKSB8fCBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
dGgoKSkpCiAgICAgICAgICAgICBpbmRleCsrOwogICAgIH0KICAgICAKQEAgLTExODksOSArMTE4
MCw5IEBAIHZvaWQgSFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsOjpwYXJzZU1hcHAKIC8vIHVzZWQg
YnkgdGFibGUgY2VsbHMgdG8gc2hhcmUgc3R5bGUgZGVjbHMgY3JlYXRlZCBieSB0aGUgZW5jbG9z
aW5nIHRhYmxlLgogQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25JbXBsKiBIVE1MVGFibGVDZWxs
RWxlbWVudEltcGw6OmFkZGl0aW9uYWxBdHRyaWJ1dGVTdHlsZURlY2woKQogewotICAgIEhUTUxF
bGVtZW50SW1wbCogcCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCo+KHBhcmVudE5vZGUo
KSk7Ci0gICAgd2hpbGUocCAmJiBwLT5pZCgpICE9IElEX1RBQkxFKQotICAgICAgICBwID0gc3Rh
dGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsKj4ocC0+cGFyZW50Tm9kZSgpKTsKKyAgICBOb2RlSW1w
bCogcCA9IHBhcmVudE5vZGUoKTsKKyAgICB3aGlsZSAocCAmJiAhcC0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OnRhYmxlKCkpKQorICAgICAgICBwID0gcC0+cGFyZW50Tm9kZSgpOwogCiAgICAgaWYg
KHApIHsKICAgICAgICAgSFRNTFRhYmxlRWxlbWVudEltcGwqIHRhYmxlID0gc3RhdGljX2Nhc3Q8
SFRNTFRhYmxlRWxlbWVudEltcGwqPihwKTsKQEAgLTEyMDEsMTUgKzExOTIsNiBAQCBDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbkltcGwqIEhUTUxUYWJsCiAgICAgcmV0dXJuIDA7CiB9CiAKLXZv
aWQgSFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsOjphdHRhY2goKQotewotICAgIEhUTUxFbGVtZW50
SW1wbCogcCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCo+KHBhcmVudE5vZGUoKSk7Ci0g
ICAgd2hpbGUocCAmJiBwLT5pZCgpICE9IElEX1RBQkxFKQotICAgICAgICBwID0gc3RhdGljX2Nh
c3Q8SFRNTEVsZW1lbnRJbXBsKj4ocC0+cGFyZW50Tm9kZSgpKTsKLQotICAgIEhUTUxUYWJsZVBh
cnRFbGVtZW50SW1wbDo6YXR0YWNoKCk7Ci19Ci0KIGJvb2wgSFRNTFRhYmxlQ2VsbEVsZW1lbnRJ
bXBsOjppc1VSTEF0dHJpYnV0ZShBdHRyaWJ1dGVJbXBsICphdHRyKSBjb25zdAogewogICAgIHJl
dHVybiBhdHRyLT5pZCgpID09IEFUVFJfQkFDS0dST1VORDsKQEAgLTEzNDcsMTYgKzEzMjksMTAg
QEAgdm9pZCBIVE1MVGFibGVDZWxsRWxlbWVudEltcGw6OnNldFdpZHRoKAogCiAvLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCiAKLUhUTUxUYWJsZUNvbEVsZW1lbnRJbXBsOjpIVE1MVGFibGVDb2xFbGVtZW50
SW1wbChEb2N1bWVudFB0ciAqZG9jLCB1c2hvcnQgaSkKLSAgICA6IEhUTUxUYWJsZVBhcnRFbGVt
ZW50SW1wbChkb2MpCitIVE1MVGFibGVDb2xFbGVtZW50SW1wbDo6SFRNTFRhYmxlQ29sRWxlbWVu
dEltcGwoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnRQdHIgKmRvYykKKyAg
ICA6IEhUTUxUYWJsZVBhcnRFbGVtZW50SW1wbCh0YWdOYW1lLCBkb2MpCiB7Ci0gICAgX2lkID0g
aTsKLSAgICBfc3BhbiA9IChfaWQgPT0gSURfQ09MR1JPVVAgPyAwIDogMSk7Ci19Ci0KLU5vZGVJ
bXBsOjpJZCBIVE1MVGFibGVDb2xFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVy
biBfaWQ7CisgICAgX3NwYW4gPSAodGFnTmFtZS5tYXRjaGVzKEhUTUxOYW1lczo6Y29sZ3JvdXAo
KSkgPyAwIDogMSk7CiB9CiAKIGJvb2wgSFRNTFRhYmxlQ29sRWxlbWVudEltcGw6Om1hcFRvRW50
cnkoTm9kZUltcGw6OklkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0
CkBAIC0xNDQ3LDExICsxNDIzLDYgQEAgdm9pZCBIVE1MVGFibGVDb2xFbGVtZW50SW1wbDo6c2V0
V2lkdGgoYwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLU5vZGVJbXBsOjpJZCBIVE1MVGFibGVD
YXB0aW9uRWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfQ0FQVElPTjsK
LX0KLQogYm9vbCBIVE1MVGFibGVDYXB0aW9uRWxlbWVudEltcGw6Om1hcFRvRW50cnkoTm9kZUlt
cGw6OklkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0CiB7CiAgICAg
aWYgKGF0dHIgPT0gQVRUUl9BTElHTikgewpJbmRleDoga2h0bWwvaHRtbC9odG1sX3RhYmxlaW1w
bC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRt
bF90YWJsZWltcGwuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yMQpkaWZmIC11IC1wIC1yMS4y
MSBraHRtbC9odG1sL2h0bWxfdGFibGVpbXBsLmgKLS0tIGtodG1sL2h0bWwvaHRtbF90YWJsZWlt
cGwuaAkxNyBKdW4gMjAwNSAyMTo1NTozOSAtMDAwMAkxLjIxCisrKyBraHRtbC9odG1sL2h0bWxf
dGFibGVpbXBsLmgJNSBKdWwgMjAwNSAyMzoyMDo0MiAtMDAwMApAQCAtNjIsNyArNjIsOSBAQCBw
dWJsaWM6CiAgICAgSFRNTFRhYmxlRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYyk7CiAgICAg
fkhUTUxUYWJsZUVsZW1lbnRJbXBsKCk7CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7Cisg
ICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1
cm4gVGFnU3RhdHVzUmVxdWlyZWQ7IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNv
bnN0IHsgcmV0dXJuIDk7IH0KKyAgICB2aXJ0dWFsIGJvb2wgY2hlY2tEVEQoY29uc3QgTm9kZUlt
cGwqIG5ld0NoaWxkKTsKIAogICAgIEhUTUxUYWJsZUNhcHRpb25FbGVtZW50SW1wbCAqY2FwdGlv
bigpIGNvbnN0IHsgcmV0dXJuIHRDYXB0aW9uOyB9CiAgICAgTm9kZUltcGwgKnNldENhcHRpb24o
IEhUTUxUYWJsZUNhcHRpb25FbGVtZW50SW1wbCAqICk7CkBAIC0xNDcsOCArMTQ5LDggQEAgY2xh
c3MgSFRNTFRhYmxlUGFydEVsZW1lbnRJbXBsIDogcHVibGljIAogCiB7CiBwdWJsaWM6Ci0gICAg
SFRNTFRhYmxlUGFydEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0gICAgICAgIDogSFRN
TEVsZW1lbnRJbXBsKGRvYykKKyAgICBIVE1MVGFibGVQYXJ0RWxlbWVudEltcGwoY29uc3QgUXVh
bGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnRQdHIgKmRvYykKKyAgICAgICAgOiBIVE1MRWxl
bWVudEltcGwodGFnTmFtZSwgZG9jKQogICAgICAgICB7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBt
YXBUb0VudHJ5KE5vZGVJbXBsOjpJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0
KSBjb25zdDsKQEAgLTE2MCw5ICsxNjIsMTEgQEAgcHVibGljOgogY2xhc3MgSFRNTFRhYmxlU2Vj
dGlvbkVsZW1lbnRJbXBsIDogcHVibGljIEhUTUxUYWJsZVBhcnRFbGVtZW50SW1wbAogewogcHVi
bGljOgotICAgIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCB1
c2hvcnQgdGFnaWQsIGJvb2wgaW1wbGljaXQpOworICAgIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50
SW1wbChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudFB0ciAqZG9jLCBib29s
IGltcGxpY2l0KTsKIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEhU
TUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNP
cHRpb25hbDsgfQorICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4g
ODsgfQorICAgIHZpcnR1YWwgYm9vbCBjaGVja0RURChjb25zdCBOb2RlSW1wbCogbmV3Q2hpbGQp
OwogCiAgICAgdmlydHVhbCBOb2RlSW1wbCAqYWRkQ2hpbGQoTm9kZUltcGwgKmNoaWxkKTsKICAg
ICAKQEAgLTE4NCw5ICsxODgsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRWQWxpZ24oIGNvbnN0
IERPTVN0cmluZyAmICk7CiAKICAgICBraHRtbDo6U2hhcmVkUHRyPEhUTUxDb2xsZWN0aW9uSW1w
bD4gcm93cygpOwotCi1wcm90ZWN0ZWQ6Ci0gICAgdXNob3J0IF9pZDsKIH07CiAKIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KQEAgLTE5NSwxMCArMTk2LDEyIEBAIGNsYXNzIEhUTUxUYWJsZVJvd0VsZW1l
bnRJbXBsIDogcHVibGljIEgKIHsKIHB1YmxpYzoKICAgICBIVE1MVGFibGVSb3dFbGVtZW50SW1w
bChEb2N1bWVudFB0ciAqZG9jKQotICAgICAgICA6IEhUTUxUYWJsZVBhcnRFbGVtZW50SW1wbChk
b2MpIHt9Ci0KLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CisgICAgICAgIDogSFRNTFRhYmxl
UGFydEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6dHIoKSwgZG9jKSB7fQogCisgICAgdmlydHVhbCBI
VE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVz
T3B0aW9uYWw7IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJu
IDc7IH0KKyAgICB2aXJ0dWFsIGJvb2wgY2hlY2tEVEQoY29uc3QgTm9kZUltcGwqIG5ld0NoaWxk
KTsKKwkKICAgICB2aXJ0dWFsIE5vZGVJbXBsICphZGRDaGlsZChOb2RlSW1wbCAqY2hpbGQpOwog
ICAgIAogICAgIGxvbmcgcm93SW5kZXgoKSBjb25zdDsKQEAgLTIzOCwxMCArMjQxLDEyIEBAIHBy
b3RlY3RlZDoKIGNsYXNzIEhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MVGFi
bGVQYXJ0RWxlbWVudEltcGwKIHsKIHB1YmxpYzoKLSAgICBIVE1MVGFibGVDZWxsRWxlbWVudElt
cGwoRG9jdW1lbnRQdHIgKmRvYywgaW50IHRhZ0lkKTsKKyAgICBIVE1MVGFibGVDZWxsRWxlbWVu
dEltcGwoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnRQdHIgKmRvYyk7CiAg
ICAgfkhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbCgpOwogCi0gICAgLy8gIyMjIEZJWCB0aGVzZSB0
d28uLi4KKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25z
dCB7IHJldHVybiBUYWdTdGF0dXNPcHRpb25hbDsgfQorICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9y
aXR5KCkgY29uc3QgeyByZXR1cm4gNjsgfQorCiAgICAgbG9uZyBjZWxsSW5kZXgoKSBjb25zdDsK
IAogICAgIGludCBjb2woKSBjb25zdCB7IHJldHVybiBfY29sOyB9CkBAIC0yNTEsMTQgKzI1Niwx
MCBAQCBwdWJsaWM6CiAKICAgICBpbnQgY29sU3BhbigpIGNvbnN0IHsgcmV0dXJuIGNTcGFuOyB9
CiAgICAgaW50IHJvd1NwYW4oKSBjb25zdCB7IHJldHVybiByU3BhbjsgfQotICAgIAotICAgIHZp
cnR1YWwgSWQgaWQoKSBjb25zdCB7IHJldHVybiBfaWQ7IH0KLSAgICAKKwogICAgIHZpcnR1YWwg
Ym9vbCBtYXBUb0VudHJ5KE5vZGVJbXBsOjpJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYg
cmVzdWx0KSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFw
cGVkQXR0cmlidXRlSW1wbCAqYXR0cik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoKCk7Ci0K
ICAgICAvLyB1c2VkIGJ5IHRhYmxlIGNlbGxzIHRvIHNoYXJlIHN0eWxlIGRlY2xzIGNyZWF0ZWQg
YnkgdGhlIGVuY2xvc2luZyB0YWJsZS4KICAgICB2aXJ0dWFsIENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uSW1wbCogYWRkaXRpb25hbEF0dHJpYnV0ZVN0eWxlRGVjbCgpOwogICAgIApAQCAtMzEx
LDcgKzMxMiw2IEBAIHByb3RlY3RlZDoKICAgICBpbnQgX2NvbDsKICAgICBpbnQgclNwYW47CiAg
ICAgaW50IGNTcGFuOwotICAgIGludCBfaWQ7CiAgICAgaW50IHJvd0hlaWdodDsKICAgICBib29s
IG1fc29saWQgICAgICAgIDogMTsKIH07CkBAIC0zMjEsMTAgKzMyMSwxMSBAQCBwcm90ZWN0ZWQ6
CiBjbGFzcyBIVE1MVGFibGVDb2xFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MVGFibGVQYXJ0RWxl
bWVudEltcGwKIHsKIHB1YmxpYzoKLSAgICBIVE1MVGFibGVDb2xFbGVtZW50SW1wbChEb2N1bWVu
dFB0ciAqZG9jLCB1c2hvcnQgaSk7Ci0KLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CisgICAg
SFRNTFRhYmxlQ29sRWxlbWVudEltcGwoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9j
dW1lbnRQdHIgKmRvYyk7CiAKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWly
ZW1lbnQoKSBjb25zdCB7IHJldHVybiBoYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpjb2woKSkgPyBU
YWdTdGF0dXNGb3JiaWRkZW4gOiBUYWdTdGF0dXNPcHRpb25hbDsgfQorICAgIHZpcnR1YWwgaW50
IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6Y29s
KCkpID8gMCA6IDE7IH0KKyAgICB2aXJ0dWFsIGJvb2wgY2hlY2tEVEQoY29uc3QgTm9kZUltcGwq
IG5ld0NoaWxkKSB7IHJldHVybiBoYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpjb2xncm91cCgpKSAm
JiBuZXdDaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmNvbCgpKTsgfQogICAgIHZvaWQgc2V0
VGFibGUoSFRNTFRhYmxlRWxlbWVudEltcGwgKnQpIHsgdGFibGUgPSB0OyB9CiAKICAgICAvLyBv
dmVycmlkZXMKQEAgLTM1MSwxMCArMzUyLDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0V2lkdGgo
IGNvbnN0IERPTVN0cmluZyAmICk7CiAKIHByb3RlY3RlZDoKLSAgICAvLyBjb3VsZCBiZSBJRF9D
T0wgb3IgSURfQ09MR1JPVVAgLi4uIFRoZSBET00gaXMgbm90IHF1aXRlIGNsZWFyIG9uCi0gICAg
Ly8gdGhpcywgYnV0IHNpbmNlIGJvdGggZWxlbWVudHMgd29yayBxdWl0ZSBzaW1pbGFyLCB3ZSB1
c2Ugb25lCi0gICAgLy8gRE9NRWxlbWVudCBmb3IgdGhlbS4uLgotICAgIHVzaG9ydCBfaWQ7CiAg
ICAgaW50IF9zcGFuOwogICAgIEhUTUxUYWJsZUVsZW1lbnRJbXBsICp0YWJsZTsKIH07CkBAIC0z
NjUsOSArMzYyLDEwIEBAIGNsYXNzIEhUTUxUYWJsZUNhcHRpb25FbGVtZW50SW1wbCA6IHB1YmwK
IHsKIHB1YmxpYzoKICAgICBIVE1MVGFibGVDYXB0aW9uRWxlbWVudEltcGwoRG9jdW1lbnRQdHIg
KmRvYykKLSAgICAgICAgOiBIVE1MVGFibGVQYXJ0RWxlbWVudEltcGwoZG9jKSB7fQorICAgICAg
ICA6IEhUTUxUYWJsZVBhcnRFbGVtZW50SW1wbChIVE1MTmFtZXM6OmNhcHRpb24oKSwgZG9jKSB7
fQogCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OworICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1
cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9
CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiA1OyB9CiAgICAg
CiAgICAgdmlydHVhbCBib29sIG1hcFRvRW50cnkoTm9kZUltcGw6OklkIGF0dHIsIE1hcHBlZEF0
dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICphdHRyKTsKSW5kZXg6IGtodG1sL2h0bWwv
aHRtbG5hbWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRt
bC9odG1sL2h0bWxuYW1lcy5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMgpkaWZmIC11IC1w
IC1yMS4yIGtodG1sL2h0bWwvaHRtbG5hbWVzLmNwcAotLS0ga2h0bWwvaHRtbC9odG1sbmFtZXMu
Y3BwCTE2IEp1biAyMDA1IDIwOjMzOjU3IC0wMDAwCTEuMgorKysga2h0bWwvaHRtbC9odG1sbmFt
ZXMuY3BwCTUgSnVsIDIwMDUgMjM6MjA6NDIgLTAwMDAKQEAgLTIwLDYgKzIwLDcgQEAKICAqCiAg
Ki8KIAorI2luY2x1ZGUgPHFwdHJkaWN0Lmg+CiAjaW5jbHVkZSAiaHRtbG5hbWVzLmgiCiAjaW5j
bHVkZSAiZG9tX3FuYW1lLmgiCiAKQEAgLTM5LDYgKzQwLDE4IEBAIGNvbnN0IFF1YWxpZmllZE5h
bWUmIEhUTUxOYW1lczo6YSgpCiAgICAgcmV0dXJuIGE7CiB9CiAKK2NvbnN0IFF1YWxpZmllZE5h
bWUmIEhUTUxOYW1lczo6YWJicigpCit7CisgICAgc3RhdGljIFF1YWxpZmllZE5hbWUgYWJicihu
dWxsQXRvbSwgImFiYnIiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKKyAgICByZXR1cm4gYWJicjsK
K30KKworY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjphY3JvbnltKCkKK3sKKyAgICBz
dGF0aWMgUXVhbGlmaWVkTmFtZSBhY3JvbnltKG51bGxBdG9tLCAiYWNyb255bSIsIHhodG1sTmFt
ZXNwYWNlVVJJKCkpOworICAgIHJldHVybiBhY3JvbnltOworfQorCiBjb25zdCBRdWFsaWZpZWRO
YW1lJiBIVE1MTmFtZXM6OmFkZHJlc3MoKQogewogICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIGFk
ZHJlc3MobnVsbEF0b20sICJhZGRyZXNzIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7CkBAIC03NSw2
ICs4OCwxMiBAQCBjb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OmJhc2Vmb250CiAgICAg
cmV0dXJuIGJhc2Vmb250OwogfQogCitjb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OmJk
bygpCit7CisgICAgc3RhdGljIFF1YWxpZmllZE5hbWUgYmRvKG51bGxBdG9tLCAiYmRvIiwgeGh0
bWxOYW1lc3BhY2VVUkkoKSk7CisgICAgcmV0dXJuIGJkbzsKK30KKwogY29uc3QgUXVhbGlmaWVk
TmFtZSYgSFRNTE5hbWVzOjpiaWcoKQogewogICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIGJpZyhu
dWxsQXRvbSwgImJpZyIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwpAQCAtMTIzLDYgKzE0MiwxMiBA
QCBjb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OmNlbnRlcigpCiAgICAgcmV0dXJuIGNl
bnRlcjsKIH0KIAorY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpjaXRlKCkKK3sKKyAg
ICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBjaXRlKG51bGxBdG9tLCAiY2l0ZSIsIHhodG1sTmFtZXNw
YWNlVVJJKCkpOworICAgIHJldHVybiBjaXRlOworfQorCiBjb25zdCBRdWFsaWZpZWROYW1lJiBI
VE1MTmFtZXM6OmNvZGUoKQogewogICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIGNvZGUobnVsbEF0
b20sICJjb2RlIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7CkBAIC0zMzMsNiArMzU4LDEyIEBAIGNv
bnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6bGFiZWwoKQogICAgIHJldHVybiBsYWJlbDsK
IH0KIAorY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpsYXllcigpCit7CisgICAgc3Rh
dGljIFF1YWxpZmllZE5hbWUgbGF5ZXIobnVsbEF0b20sICJsYXllciIsIHhodG1sTmFtZXNwYWNl
VVJJKCkpOworICAgIHJldHVybiBsYXllcjsKK30KKwogY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRN
TE5hbWVzOjpsZWdlbmQoKQogewogICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIGxlZ2VuZChudWxs
QXRvbSwgImxlZ2VuZCIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwpAQCAtMzc1LDYgKzQwNiwxMiBA
QCBjb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6Om1ldGEoKQogICAgIHJldHVybiBtZXRh
OwogfQogCitjb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6Om5vYnIoKQoreworICAgIHN0
YXRpYyBRdWFsaWZpZWROYW1lIG5vYnIobnVsbEF0b20sICJub2JyIiwgeGh0bWxOYW1lc3BhY2VV
UkkoKSk7CisgICAgcmV0dXJuIG5vYnI7Cit9CisKIGNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxO
YW1lczo6bm9lbWJlZCgpCiB7CiAgICAgc3RhdGljIFF1YWxpZmllZE5hbWUgbm9lbWJlZChudWxs
QXRvbSwgIm5vZW1iZWQiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKQEAgLTM4Nyw2ICs0MjQsMTIg
QEAgY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpub2ZyYW1lcwogICAgIHJldHVybiBu
b2ZyYW1lczsKIH0KIAorY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpub2xheWVyKCkK
K3sKKyAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBub2xheWVyKG51bGxBdG9tLCAibm9sYXllciIs
IHhodG1sTmFtZXNwYWNlVVJJKCkpOworICAgIHJldHVybiBub2xheWVyOworfQorCiBjb25zdCBR
dWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6Om5vc2NyaXB0KCkKIHsKICAgICBzdGF0aWMgUXVhbGlm
aWVkTmFtZSBub3NjcmlwdChudWxsQXRvbSwgIm5vc2NyaXB0IiwgeGh0bWxOYW1lc3BhY2VVUkko
KSk7CkBAIC00MTEsNiArNDU0LDEyIEBAIGNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6
b3B0Z3JvdXAKICAgICByZXR1cm4gb3B0Z3JvdXA7CiB9CiAKK2NvbnN0IFF1YWxpZmllZE5hbWUm
IEhUTUxOYW1lczo6b3B0aW9uKCkKK3sKKyAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBvcHRpb24o
bnVsbEF0b20sICJvcHRpb24iLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKKyAgICByZXR1cm4gb3B0
aW9uOworfQorCiBjb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OnAoKQogewogICAgIHN0
YXRpYyBRdWFsaWZpZWROYW1lIHAobnVsbEF0b20sICJwIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7
CkBAIC00MjMsNiArNDcyLDEyIEBAIGNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6cGFy
YW0oKQogICAgIHJldHVybiBwYXJhbTsKIH0KIAorY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5h
bWVzOjpwbGFpbnRleHQoKQoreworICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIHBsYWludGV4dChu
dWxsQXRvbSwgInBsYWludGV4dCIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOworICAgIHJldHVybiBw
bGFpbnRleHQ7Cit9CisKIGNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6cHJlKCkKIHsK
ICAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBwcmUobnVsbEF0b20sICJwcmUiLCB4aHRtbE5hbWVz
cGFjZVVSSSgpKTsKQEAgLTQ2NSw2ICs1MjAsMTIgQEAgY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRN
TE5hbWVzOjpzbWFsbCgpCiAgICAgcmV0dXJuIHNtYWxsOwogfQogCitjb25zdCBRdWFsaWZpZWRO
YW1lJiBIVE1MTmFtZXM6OnNwYW4oKQoreworICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIHNwYW4o
bnVsbEF0b20sICJzcGFuIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7CisgICAgcmV0dXJuIHNwYW47
Cit9CisKIGNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6c3RyaWtlKCkKIHsKICAgICBz
dGF0aWMgUXVhbGlmaWVkTmFtZSBzdHJpa2UobnVsbEF0b20sICJzdHJpa2UiLCB4aHRtbE5hbWVz
cGFjZVVSSSgpKTsKQEAgLTQ4Myw2ICs1NDQsMTggQEAgY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRN
TE5hbWVzOjpzdHlsZSgpCiAgICAgcmV0dXJuIHN0eWxlOwogfQogCitjb25zdCBRdWFsaWZpZWRO
YW1lJiBIVE1MTmFtZXM6OnN1YigpCit7CisgICAgc3RhdGljIFF1YWxpZmllZE5hbWUgc3ViKG51
bGxBdG9tLCAic3ViIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7CisgICAgcmV0dXJuIHN1YjsKK30K
KworY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpzdXAoKQoreworICAgIHN0YXRpYyBR
dWFsaWZpZWROYW1lIHN1cChudWxsQXRvbSwgInN1cCIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwor
ICAgIHJldHVybiBzdXA7Cit9CisKIGNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6dGFi
bGUoKQogewogICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIHRhYmxlKG51bGxBdG9tLCAidGFibGUi
LCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKQEAgLTU2MSwxMCArNjM0LDEyNyBAQCBjb25zdCBRdWFs
aWZpZWROYW1lJiBIVE1MTmFtZXM6OnZhcigpCiAgICAgcmV0dXJuIHZhcjsKIH0KIAorY29uc3Qg
UXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjp3YnIoKQoreworICAgIHN0YXRpYyBRdWFsaWZpZWRO
YW1lIHdicihudWxsQXRvbSwgIndiciIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOworICAgIHJldHVy
biB3YnI7Cit9CisKIGNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6eG1wKCkKIHsKICAg
ICBzdGF0aWMgUXVhbGlmaWVkTmFtZSB4bXAobnVsbEF0b20sICJ4bXAiLCB4aHRtbE5hbWVzcGFj
ZVVSSSgpKTsKICAgICByZXR1cm4geG1wOwogfQogCitib29sIEhUTUxOYW1lczo6aXNSZWNvZ25p
emVkVGFnTmFtZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lKQoreworICAgIHN0YXRpYyBR
UHRyRGljdDxET01TdHJpbmdJbXBsPiB0YWdMaXN0OworICAgIGlmICh0YWdMaXN0LmlzRW1wdHko
KSkgeworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmEoKS5sb2NhbE5hbWVQdHIo
KSwgSFRNTE5hbWVzOjphKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2Vy
dChIVE1MTmFtZXM6OmFiYnIoKS5sb2NhbE5hbWVQdHIoKSwgSFRNTE5hbWVzOjphYmJyKCkubG9j
YWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmFjcm9ueW0o
KS5sb2NhbE5hbWVQdHIoKSwgSFRNTE5hbWVzOjphY3JvbnltKCkubG9jYWxOYW1lUHRyKCkpOwor
ICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmFkZHJlc3MoKS5sb2NhbE5hbWVQdHIo
KSwgSFRNTE5hbWVzOjphZGRyZXNzKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0
Lmluc2VydChIVE1MTmFtZXM6OmFwcGxldCgpLmxvY2FsTmFtZVB0cigpLCBIVE1MTmFtZXM6OmFw
cGxldCgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVz
OjphcmVhKCkubG9jYWxOYW1lUHRyKCksIEhUTUxOYW1lczo6YXJlYSgpLmxvY2FsTmFtZVB0cigp
KTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpiKCkubG9jYWxOYW1lUHRyKCks
IEhUTUxOYW1lczo6YigpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQo
SFRNTE5hbWVzOjpiYXNlKCkubG9jYWxOYW1lUHRyKCksIEhUTUxOYW1lczo6YmFzZSgpLmxvY2Fs
TmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpiYXNlZm9udCgp
LmxvY2FsTmFtZVB0cigpLCBIVE1MTmFtZXM6OmJhc2Vmb250KCkubG9jYWxOYW1lUHRyKCkpOwor
ICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmJkbygpLmxvY2FsTmFtZVB0cigpLCBI
VE1MTmFtZXM6OmJkbygpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQo
SFRNTE5hbWVzOjpiaWcoKS5sb2NhbE5hbWVQdHIoKSwgSFRNTE5hbWVzOjpiaWcoKS5sb2NhbE5h
bWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6YmxvY2txdW90ZSgp
LmxvY2FsTmFtZVB0cigpLCBIVE1MTmFtZXM6OmJsb2NrcXVvdGUoKS5sb2NhbE5hbWVQdHIoKSk7
CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6Ym9keSgpLmxvY2FsTmFtZVB0cigp
LCBIVE1MTmFtZXM6OmJvZHkoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5z
ZXJ0KEhUTUxOYW1lczo6YnIoKS5sb2NhbE5hbWVQdHIoKSwgSFRNTE5hbWVzOjpicigpLmxvY2Fs
TmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpidXR0b24oKS5s
b2NhbE5hbWVQdHIoKSwgSFRNTE5hbWVzOjpidXR0b24oKS5sb2NhbE5hbWVQdHIoKSk7CisgICAg
ICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6Y2FudmFzKCkubG9jYWxOYW1lUHRyKCksIEhU
TUxOYW1lczo6Y2FudmFzKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2Vy
dChIVE1MTmFtZXM6OmNhcHRpb24oKS5sb2NhbE5hbWVQdHIoKSwgSFRNTE5hbWVzOjpjYXB0aW9u
KCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmNl
bnRlcigpLmxvY2FsTmFtZVB0cigpLCBIVE1MTmFtZXM6OmNlbnRlcigpLmxvY2FsTmFtZVB0cigp
KTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpjaXRlKCkubG9jYWxOYW1lUHRy
KCksIEhUTUxOYW1lczo6Y2l0ZSgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5p
bnNlcnQoSFRNTE5hbWVzOjpjb2RlKCkubG9jYWxOYW1lUHRyKCksIEhUTUxOYW1lczo6Y29kZSgp
LmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpjb2wo
KS5sb2NhbE5hbWVQdHIoKSwgSFRNTE5hbWVzOjpjb2woKS5sb2NhbE5hbWVQdHIoKSk7CisgICAg
ICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6Y29sZ3JvdXAoKS5sb2NhbE5hbWVQdHIoKSwg
SFRNTE5hbWVzOjpjb2xncm91cCgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5p
bnNlcnQoSFRNTE5hbWVzOjpkZCgpLmxvY2FsTmFtZVB0cigpLCBIVE1MTmFtZXM6OmRkKCkubG9j
YWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmRlbCgpLmxv
Y2FsTmFtZVB0cigpLCBIVE1MTmFtZXM6OmRlbCgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAg
dGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpkZm4oKS5sb2NhbE5hbWVQdHIoKSwgSFRNTE5hbWVz
OjpkZm4oKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1l
czo6ZGlyKCkubG9jYWxOYW1lUHRyKCksIEhUTUxOYW1lczo6ZGlyKCkubG9jYWxOYW1lUHRyKCkp
OworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmRpdigpLmxvY2FsTmFtZVB0cigp
LCBIVE1MTmFtZXM6OmRpdigpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNl
cnQoSFRNTE5hbWVzOjpkbCgpLmxvY2FsTmFtZVB0cigpLCBIVE1MTmFtZXM6OmRsKCkubG9jYWxO
YW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmR0KCkubG9jYWxO
YW1lUHRyKCksIEhUTUxOYW1lczo6ZHQoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xp
c3QuaW5zZXJ0KEhUTUxOYW1lczo6ZW0oKS5sb2NhbE5hbWVQdHIoKSwgSFRNTE5hbWVzOjplbSgp
LmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjplbWJl
ZCgpLmxvY2FsTmFtZVB0cigpLCBIVE1MTmFtZXM6OmVtYmVkKCkubG9jYWxOYW1lUHRyKCkpOwor
ICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmZpZWxkc2V0KCkubG9jYWxOYW1lUHRy
KCksIEhUTUxOYW1lczo6ZmllbGRzZXQoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xp
c3QuaW5zZXJ0KEhUTUxOYW1lczo6Zm9udCgpLmxvY2FsTmFtZVB0cigpLCBIVE1MTmFtZXM6OmZv
bnQoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6
Zm9ybSgpLmxvY2FsTmFtZVB0cigpLCBIVE1MTmFtZXM6OmZvcm0oKS5sb2NhbE5hbWVQdHIoKSk7
CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6ZnJhbWUoKS5sb2NhbE5hbWVQdHIo
KSwgSFRNTE5hbWVzOjpmcmFtZSgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5p
bnNlcnQoSFRNTE5hbWVzOjpmcmFtZXNldCgpLmxvY2FsTmFtZVB0cigpLCBIVE1MTmFtZXM6OmZy
YW1lc2V0KCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFt
ZXM6OmhlYWQoKS5sb2NhbE5hbWVQdHIoKSwgSFRNTE5hbWVzOjpoZWFkKCkubG9jYWxOYW1lUHRy
KCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmgxKCkubG9jYWxOYW1lUHRy
KCksIEhUTUxOYW1lczo6aDEoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5z
ZXJ0KEhUTUxOYW1lczo6aDIoKS5sb2NhbE5hbWVQdHIoKSwgSFRNTE5hbWVzOjpoMigpLmxvY2Fs
TmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpoMygpLmxvY2Fs
TmFtZVB0cigpLCBIVE1MTmFtZXM6OmgzKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdM
aXN0Lmluc2VydChIVE1MTmFtZXM6Omg0KCkubG9jYWxOYW1lUHRyKCksIEhUTUxOYW1lczo6aDQo
KS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6aDUo
KS5sb2NhbE5hbWVQdHIoKSwgSFRNTE5hbWVzOjpoNSgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAg
ICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpoNigpLmxvY2FsTmFtZVB0cigpLCBIVE1MTmFt
ZXM6Omg2KCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFt
ZXM6OmhyKCkubG9jYWxOYW1lUHRyKCksIEhUTUxOYW1lczo6aHIoKS5sb2NhbE5hbWVQdHIoKSk7
CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6aHRtbCgpLmxvY2FsTmFtZVB0cigp
LCBIVE1MTmFtZXM6Omh0bWwoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5z
ZXJ0KEhUTUxOYW1lczo6aSgpLmxvY2FsTmFtZVB0cigpLCBIVE1MTmFtZXM6OmkoKS5sb2NhbE5h
bWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6aWZyYW1lKCkubG9j
YWxOYW1lUHRyKCksIEhUTUxOYW1lczo6aWZyYW1lKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAg
ICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmltZygpLmxvY2FsTmFtZVB0cigpLCBIVE1MTmFt
ZXM6OmltZygpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5h
bWVzOjppbnB1dCgpLmxvY2FsTmFtZVB0cigpLCBIVE1MTmFtZXM6OmlucHV0KCkubG9jYWxOYW1l
UHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmlucygpLmxvY2FsTmFt
ZVB0cigpLCBIVE1MTmFtZXM6OmlucygpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlz
dC5pbnNlcnQoSFRNTE5hbWVzOjppc2luZGV4KCkubG9jYWxOYW1lUHRyKCksIEhUTUxOYW1lczo6
aXNpbmRleCgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5h
bWVzOjprYmQoKS5sb2NhbE5hbWVQdHIoKSwgSFRNTE5hbWVzOjprYmQoKS5sb2NhbE5hbWVQdHIo
KSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6a2V5Z2VuKCkubG9jYWxOYW1l
UHRyKCksIEhUTUxOYW1lczo6a2V5Z2VuKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdM
aXN0Lmluc2VydChIVE1MTmFtZXM6OmxhYmVsKCkubG9jYWxOYW1lUHRyKCksIEhUTUxOYW1lczo6
bGFiZWwoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1l
czo6bGF5ZXIoKS5sb2NhbE5hbWVQdHIoKSwgSFRNTE5hbWVzOjpsYXllcigpLmxvY2FsTmFtZVB0
cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpsZWdlbmQoKS5sb2NhbE5h
bWVQdHIoKSwgSFRNTE5hbWVzOjpsZWdlbmQoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRh
Z0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6bGkoKS5sb2NhbE5hbWVQdHIoKSwgSFRNTE5hbWVzOjps
aSgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjps
aW5rKCkubG9jYWxOYW1lUHRyKCksIEhUTUxOYW1lczo6bGluaygpLmxvY2FsTmFtZVB0cigpKTsK
KyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjptYXAoKS5sb2NhbE5hbWVQdHIoKSwg
SFRNTE5hbWVzOjptYXAoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0
KEhUTUxOYW1lczo6bWFycXVlZSgpLmxvY2FsTmFtZVB0cigpLCBIVE1MTmFtZXM6Om1hcnF1ZWUo
KS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6bWVu
dSgpLmxvY2FsTmFtZVB0cigpLCBIVE1MTmFtZXM6Om1lbnUoKS5sb2NhbE5hbWVQdHIoKSk7Cisg
ICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6bWV0YSgpLmxvY2FsTmFtZVB0cigpLCBI
VE1MTmFtZXM6Om1ldGEoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0
KEhUTUxOYW1lczo6bm9icigpLmxvY2FsTmFtZVB0cigpLCBIVE1MTmFtZXM6Om5vYnIoKS5sb2Nh
bE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6bm9lbWJlZCgp
LmxvY2FsTmFtZVB0cigpLCBIVE1MTmFtZXM6Om5vZW1iZWQoKS5sb2NhbE5hbWVQdHIoKSk7Cisg
ICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6bm9mcmFtZXMoKS5sb2NhbE5hbWVQdHIo
KSwgSFRNTE5hbWVzOjpub2ZyYW1lcygpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlz
dC5pbnNlcnQoSFRNTE5hbWVzOjpub2xheWVyKCkubG9jYWxOYW1lUHRyKCksIEhUTUxOYW1lczo6
bm9sYXllcigpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5h
bWVzOjpub3NjcmlwdCgpLmxvY2FsTmFtZVB0cigpLCBIVE1MTmFtZXM6Om5vc2NyaXB0KCkubG9j
YWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6Om9iamVjdCgp
LmxvY2FsTmFtZVB0cigpLCBIVE1MTmFtZXM6Om9iamVjdCgpLmxvY2FsTmFtZVB0cigpKTsKKyAg
ICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpvbCgpLmxvY2FsTmFtZVB0cigpLCBIVE1M
TmFtZXM6Om9sKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1M
TmFtZXM6Om9wdGdyb3VwKCkubG9jYWxOYW1lUHRyKCksIEhUTUxOYW1lczo6b3B0Z3JvdXAoKS5s
b2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6b3B0aW9u
KCkubG9jYWxOYW1lUHRyKCksIEhUTUxOYW1lczo6b3B0aW9uKCkubG9jYWxOYW1lUHRyKCkpOwor
ICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnAoKS5sb2NhbE5hbWVQdHIoKSwgSFRN
TE5hbWVzOjpwKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1M
TmFtZXM6OnBhcmFtKCkubG9jYWxOYW1lUHRyKCksIEhUTUxOYW1lczo6cGFyYW0oKS5sb2NhbE5h
bWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6cGxhaW50ZXh0KCku
bG9jYWxOYW1lUHRyKCksIEhUTUxOYW1lczo6cGxhaW50ZXh0KCkubG9jYWxOYW1lUHRyKCkpOwor
ICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnByZSgpLmxvY2FsTmFtZVB0cigpLCBI
VE1MTmFtZXM6OnByZSgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQo
SFRNTE5hbWVzOjpxKCkubG9jYWxOYW1lUHRyKCksIEhUTUxOYW1lczo6cSgpLmxvY2FsTmFtZVB0
cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpzKCkubG9jYWxOYW1lUHRy
KCksIEhUTUxOYW1lczo6cygpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNl
cnQoSFRNTE5hbWVzOjpzYW1wKCkubG9jYWxOYW1lUHRyKCksIEhUTUxOYW1lczo6c2FtcCgpLmxv
Y2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpzY3JpcHQo
KS5sb2NhbE5hbWVQdHIoKSwgSFRNTE5hbWVzOjpzY3JpcHQoKS5sb2NhbE5hbWVQdHIoKSk7Cisg
ICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6c2VsZWN0KCkubG9jYWxOYW1lUHRyKCks
IEhUTUxOYW1lczo6c2VsZWN0KCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmlu
c2VydChIVE1MTmFtZXM6OnNtYWxsKCkubG9jYWxOYW1lUHRyKCksIEhUTUxOYW1lczo6c21hbGwo
KS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6c3Bh
bigpLmxvY2FsTmFtZVB0cigpLCBIVE1MTmFtZXM6OnNwYW4oKS5sb2NhbE5hbWVQdHIoKSk7Cisg
ICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6c3RyaWtlKCkubG9jYWxOYW1lUHRyKCks
IEhUTUxOYW1lczo6c3RyaWtlKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmlu
c2VydChIVE1MTmFtZXM6OnN0cm9uZygpLmxvY2FsTmFtZVB0cigpLCBIVE1MTmFtZXM6OnN0cm9u
ZygpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpz
dHlsZSgpLmxvY2FsTmFtZVB0cigpLCBIVE1MTmFtZXM6OnN0eWxlKCkubG9jYWxOYW1lUHRyKCkp
OworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnN1YigpLmxvY2FsTmFtZVB0cigp
LCBIVE1MTmFtZXM6OnN1YigpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNl
cnQoSFRNTE5hbWVzOjpzdXAoKS5sb2NhbE5hbWVQdHIoKSwgSFRNTE5hbWVzOjpzdXAoKS5sb2Nh
bE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6dGFibGUoKS5s
b2NhbE5hbWVQdHIoKSwgSFRNTE5hbWVzOjp0YWJsZSgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAg
ICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjp0Ym9keSgpLmxvY2FsTmFtZVB0cigpLCBIVE1M
TmFtZXM6OnRib2R5KCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChI
VE1MTmFtZXM6OnRkKCkubG9jYWxOYW1lUHRyKCksIEhUTUxOYW1lczo6dGQoKS5sb2NhbE5hbWVQ
dHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6dGV4dGFyZWEoKS5sb2Nh
bE5hbWVQdHIoKSwgSFRNTE5hbWVzOjp0ZXh0YXJlYSgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAg
ICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjp0Zm9vdCgpLmxvY2FsTmFtZVB0cigpLCBIVE1M
TmFtZXM6OnRmb290KCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChI
VE1MTmFtZXM6OnRoKCkubG9jYWxOYW1lUHRyKCksIEhUTUxOYW1lczo6dGgoKS5sb2NhbE5hbWVQ
dHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6dGhlYWQoKS5sb2NhbE5h
bWVQdHIoKSwgSFRNTE5hbWVzOjp0aGVhZCgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFn
TGlzdC5pbnNlcnQoSFRNTE5hbWVzOjp0aXRsZSgpLmxvY2FsTmFtZVB0cigpLCBIVE1MTmFtZXM6
OnRpdGxlKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFt
ZXM6OnRyKCkubG9jYWxOYW1lUHRyKCksIEhUTUxOYW1lczo6dHIoKS5sb2NhbE5hbWVQdHIoKSk7
CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6dHQoKS5sb2NhbE5hbWVQdHIoKSwg
SFRNTE5hbWVzOjp0dCgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQo
SFRNTE5hbWVzOjp1KCkubG9jYWxOYW1lUHRyKCksIEhUTUxOYW1lczo6dSgpLmxvY2FsTmFtZVB0
cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjp1bCgpLmxvY2FsTmFtZVB0
cigpLCBIVE1MTmFtZXM6OnVsKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmlu
c2VydChIVE1MTmFtZXM6OnZhcigpLmxvY2FsTmFtZVB0cigpLCBIVE1MTmFtZXM6OnZhcigpLmxv
Y2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjp3YnIoKS5s
b2NhbE5hbWVQdHIoKSwgSFRNTE5hbWVzOjp3YnIoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAg
IHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6eG1wKCkubG9jYWxOYW1lUHRyKCksIEhUTUxOYW1l
czo6eG1wKCkubG9jYWxOYW1lUHRyKCkpOworICAgIH0KKworICAgIHJldHVybiB0YWdMaXN0LmZp
bmQodGFnTmFtZS5sb2NhbE5hbWVQdHIoKSk7Cit9CisKIH0KSW5kZXg6IGtodG1sL2h0bWwvaHRt
bG5hbWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRt
bC9odG1sbmFtZXMuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yCmRpZmYgLXUgLXAgLXIxLjIg
a2h0bWwvaHRtbC9odG1sbmFtZXMuaAotLS0ga2h0bWwvaHRtbC9odG1sbmFtZXMuaAkxNiBKdW4g
MjAwNSAyMDozMzo1NyAtMDAwMAkxLjIKKysrIGtodG1sL2h0bWwvaHRtbG5hbWVzLmgJNSBKdWwg
MjAwNSAyMzoyMDo0MiAtMDAwMApAQCAtMjIsNyArMjIsNyBAQAogI2lmbmRlZiBIVE1MTkFNRVNf
SAogI2RlZmluZSBIVE1MTkFNRVNfSAogCi0jaW5jbHVkZSAieG1sL2RvbV9lbGVtZW50aW1wbC5o
IgorI2luY2x1ZGUgImRvbV9xbmFtZS5oIgogCiBuYW1lc3BhY2UgRE9NCiB7CkBAIC0zNywxMiAr
MzcsMTUgQEAgcHVibGljOgogICAgIAogICAgIC8vIEZ1bGwgdGFnIG5hbWVzLgogICAgIHN0YXRp
YyBjb25zdCBRdWFsaWZpZWROYW1lJiBhKCk7CisgICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5h
bWUmIGFiYnIoKTsKKyAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgYWNyb255bSgpOwog
ICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBhZGRyZXNzKCk7CiAgICAgc3RhdGljIGNv
bnN0IFF1YWxpZmllZE5hbWUmIGFwcGxldCgpOwogICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWRO
YW1lJiBhcmVhKCk7CiAgICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGIoKTsKICAgICBz
dGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgYmFzZSgpOwogICAgIHN0YXRpYyBjb25zdCBRdWFs
aWZpZWROYW1lJiBiYXNlZm9udCgpOworICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBi
ZG8oKTsKICAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgYmlnKCk7CiAgICAgc3RhdGlj
IGNvbnN0IFF1YWxpZmllZE5hbWUmIGJsb2NrcXVvdGUoKTsKICAgICBzdGF0aWMgY29uc3QgUXVh
bGlmaWVkTmFtZSYgYm9keSgpOwpAQCAtNTEsNiArNTQsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IGNvbnN0IFF1YWxpZmllZE5hbWUmIGNhbnZhcygpOwogICAgIHN0YXRpYyBjb25zdCBRdWFsaWZp
ZWROYW1lJiBjYXB0aW9uKCk7CiAgICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGNlbnRl
cigpOworICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBjaXRlKCk7CiAgICAgc3RhdGlj
IGNvbnN0IFF1YWxpZmllZE5hbWUmIGNvZGUoKTsKICAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVk
TmFtZSYgY29sKCk7CiAgICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGNvbGdyb3VwKCk7
CkBAIC04Niw2ICs5MCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFt
ZSYga2JkKCk7CiAgICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGtleWdlbigpOwogICAg
IHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBsYWJlbCgpOworICAgIHN0YXRpYyBjb25zdCBR
dWFsaWZpZWROYW1lJiBsYXllcigpOwogICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBs
ZWdlbmQoKTsKICAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgbGkoKTsKICAgICBzdGF0
aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgbGluaygpOwpAQCAtOTMsOCArOTgsMTAgQEAgcHVibGlj
OgogICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBtYXJxdWVlKCk7CiAgICAgc3RhdGlj
IGNvbnN0IFF1YWxpZmllZE5hbWUmIG1lbnUoKTsKICAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVk
TmFtZSYgbWV0YSgpOworICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBub2JyKCk7CiAg
ICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIG5vZW1iZWQoKTsKICAgICBzdGF0aWMgY29u
c3QgUXVhbGlmaWVkTmFtZSYgbm9mcmFtZXMoKTsKKyAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVk
TmFtZSYgbm9sYXllcigpOwogICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBub3Njcmlw
dCgpOwogICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBvYmplY3QoKTsKICAgICBzdGF0
aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgb2woKTsKQEAgLTEwMiw2ICsxMDksNyBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIG9wdGlvbigpOwogICAgIHN0YXRpYyBj
b25zdCBRdWFsaWZpZWROYW1lJiBwKCk7CiAgICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUm
IHBhcmFtKCk7CisgICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIHBsYWludGV4dCgpOwog
ICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBwcmUoKTsKICAgICBzdGF0aWMgY29uc3Qg
UXVhbGlmaWVkTmFtZSYgcSgpOwogICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBzKCk7
CkBAIC0xMDksOSArMTE3LDEyIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVk
TmFtZSYgc2NyaXB0KCk7CiAgICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIHNlbGVjdCgp
OwogICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBzbWFsbCgpOworICAgIHN0YXRpYyBj
b25zdCBRdWFsaWZpZWROYW1lJiBzcGFuKCk7CiAgICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5h
bWUmIHN0cmlrZSgpOwogICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBzdHJvbmcoKTsK
ICAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgc3R5bGUoKTsKKyAgICBzdGF0aWMgY29u
c3QgUXVhbGlmaWVkTmFtZSYgc3ViKCk7CisgICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUm
IHN1cCgpOwogICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiB0YWJsZSgpOwogICAgIHN0
YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiB0Ym9keSgpOwogICAgIHN0YXRpYyBjb25zdCBRdWFs
aWZpZWROYW1lJiB0ZCgpOwpAQCAtMTI1LDggKzEzNiwxMSBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IGNvbnN0IFF1YWxpZmllZE5hbWUmIHUoKTsKICAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFt
ZSYgdWwoKTsKICAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgdmFyKCk7CisgICAgc3Rh
dGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIHdicigpOwogICAgIHN0YXRpYyBjb25zdCBRdWFsaWZp
ZWROYW1lJiB4bXAoKTsKIAorICAgIHN0YXRpYyBib29sIGlzUmVjb2duaXplZFRhZ05hbWUoY29u
c3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSk7CisKICAgICAvLyBBdHRyaWJ1dGUgbmFtZXMuCiB9
OwogCkluZGV4OiBraHRtbC9odG1sL2h0bWxwYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbHBhcnNlci5jcHAsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuOTYKZGlmZiAtdSAtcCAtcjEuOTYga2h0bWwvaHRtbC9odG1scGFyc2VyLmNw
cAotLS0ga2h0bWwvaHRtbC9odG1scGFyc2VyLmNwcAkxMSBNYXkgMjAwNSAwMDo1ODoyOCAtMDAw
MAkxLjk2CisrKyBraHRtbC9odG1sL2h0bWxwYXJzZXIuY3BwCTUgSnVsIDIwMDUgMjM6MjA6NDMg
LTAwMDAKQEAgLTQ0LDYgKzQ0LDcgQEAKICNpbmNsdWRlICJodG1sL2h0bWxfbWlzY2ltcGwuaCIK
ICNpbmNsdWRlICJodG1sL2h0bWxfdGFibGVpbXBsLmgiCiAjaW5jbHVkZSAiaHRtbC9odG1sX29i
amVjdGltcGwuaCIKKyNpbmNsdWRlICJodG1sZmFjdG9yeS5oIgogI2luY2x1ZGUgInhtbC9kb21f
dGV4dGltcGwuaCIKICNpbmNsdWRlICJ4bWwvZG9tX25vZGVpbXBsLmgiCiAjaW5jbHVkZSAibWlz
Yy9odG1saGFzaGVzLmgiCkBAIC02OSwyNCArNzAsMjQgQEAgdXNpbmcgbmFtZXNwYWNlIGtodG1s
OwogY2xhc3MgSFRNTFN0YWNrRWxlbQogewogcHVibGljOgotICAgIEhUTUxTdGFja0VsZW0oIGlu
dCBfaWQsCi0gICAgICAgICAgICAgICAgICAgaW50IF9sZXZlbCwKLSAgICAgICAgICAgICAgICAg
ICBET006Ok5vZGVJbXBsICpfbm9kZSwKLSAgICAgICAgICAgICAgICAgICBIVE1MU3RhY2tFbGVt
ICogX25leHQKKyAgICBIVE1MU3RhY2tFbGVtKGNvbnN0IEF0b21pY1N0cmluZyYgX3RhZ05hbWUs
CisgICAgICAgICAgICAgICAgICBpbnQgX2xldmVsLAorICAgICAgICAgICAgICAgICAgRE9NOjpO
b2RlSW1wbCAqX25vZGUsCisgICAgICAgICAgICAgICAgICBIVE1MU3RhY2tFbGVtICogX25leHQK
ICAgICAgICAgKQogICAgICAgICA6Ci0gICAgICAgIGlkKF9pZCksCisgICAgICAgIHRhZ05hbWUo
X3RhZ05hbWUpLAogICAgICAgICBsZXZlbChfbGV2ZWwpLAogICAgICAgICBzdHJheVRhYmxlQ29u
dGVudChmYWxzZSksCiAgICAgICAgIG5vZGUoX25vZGUpLAogICAgICAgICBuZXh0KF9uZXh0KQog
ICAgICAgICB7IH0KIAotICAgIGludCAgICAgICBpZDsKLSAgICBpbnQgICAgICAgbGV2ZWw7Ci0g
ICAgYm9vbCAgICAgIHN0cmF5VGFibGVDb250ZW50OwotICAgIE5vZGVJbXBsICpub2RlOwotICAg
IEhUTUxTdGFja0VsZW0gKm5leHQ7CisgICAgQXRvbWljU3RyaW5nIHRhZ05hbWU7CisgICAgaW50
IGxldmVsOworICAgIGJvb2wgc3RyYXlUYWJsZUNvbnRlbnQ7CisgICAgTm9kZUltcGwqIG5vZGU7
CisgICAgSFRNTFN0YWNrRWxlbSogbmV4dDsKIH07CiAKIC8qKgpAQCAtMTEyLDE0ICsxMTMsOSBA
QCBwdWJsaWM6CiAgKiAgICBlbGVtZW50IG9yIGlnbm9yZSB0aGUgdGFnLgogICoKICAqLwotS0hU
TUxQYXJzZXI6OktIVE1MUGFyc2VyKEtIVE1MVmlldyAqX3BhcmVudCwgRG9jdW1lbnRQdHIgKmRv
YywgYm9vbCBpbmNsdWRlc0NvbW1lbnRzKSAKK0hUTUxQYXJzZXI6OkhUTUxQYXJzZXIoS0hUTUxW
aWV3ICpfcGFyZW50LCBEb2N1bWVudFB0ciAqZG9jLCBib29sIGluY2x1ZGVzQ29tbWVudHMpIAog
ICAgIDogY3VycmVudCgwKSwgY3VycmVudElzUmVmZXJlbmNlZChmYWxzZSksIGluY2x1ZGVzQ29t
bWVudHNJbkRPTShpbmNsdWRlc0NvbW1lbnRzKQogewotICAgIC8va2REZWJ1ZyggNjAzNSApIDw8
ICJwYXJzZXIgY29uc3RydWN0b3IiIDw8IGVuZGw7Ci0jaWYgU1BFRURfREVCVUcgPiAwCi0gICAg
cXQuc3RhcnQoKTsKLSNlbmRpZgotCiAgICAgSFRNTFdpZGdldCAgICA9IF9wYXJlbnQ7CiAgICAg
ZG9jdW1lbnQgICAgICA9IGRvYzsKICAgICBkb2N1bWVudC0+cmVmKCk7CkBAIC0xMjksNyArMTI1
LDcgQEAgS0hUTUxQYXJzZXI6OktIVE1MUGFyc2VyKEtIVE1MVmlldyAqX3BhcgogICAgIHJlc2V0
KCk7CiB9CiAKLUtIVE1MUGFyc2VyOjpLSFRNTFBhcnNlcihET006OkRvY3VtZW50RnJhZ21lbnRJ
bXBsICppLCBEb2N1bWVudFB0ciAqZG9jLCBib29sIGluY2x1ZGVzQ29tbWVudHMpCitIVE1MUGFy
c2VyOjpIVE1MUGFyc2VyKERPTTo6RG9jdW1lbnRGcmFnbWVudEltcGwgKmksIERvY3VtZW50UHRy
ICpkb2MsIGJvb2wgaW5jbHVkZXNDb21tZW50cykKICAgICA6IGN1cnJlbnQoMCksIGN1cnJlbnRJ
c1JlZmVyZW5jZWQoZmFsc2UpLCBpbmNsdWRlc0NvbW1lbnRzSW5ET00oaW5jbHVkZXNDb21tZW50
cykKIHsKICAgICBIVE1MV2lkZ2V0ID0gMDsKQEAgLTE0MywxMiArMTM5LDggQEAgS0hUTUxQYXJz
ZXI6OktIVE1MUGFyc2VyKERPTTo6RG9jdW1lbnRGcgogICAgIGluQm9keSA9IHRydWU7CiB9CiAK
LUtIVE1MUGFyc2VyOjp+S0hUTUxQYXJzZXIoKQorSFRNTFBhcnNlcjo6fkhUTUxQYXJzZXIoKQog
ewotI2lmIFNQRUVEX0RFQlVHID4gMAotICAgIGtkRGVidWcoICkgPDwgIlRJTUU6IHBhcnNpbmcg
dGltZSB3YXMgPSAiIDw8IHF0LmVsYXBzZWQoKSA8PCBlbmRsOwotI2VuZGlmCi0KICAgICBmcmVl
QmxvY2soKTsKIAogICAgIHNldEN1cnJlbnQoMCk7CkBAIC0xNTksMTUgKzE1MSwxMiBAQCBLSFRN
TFBhcnNlcjo6fktIVE1MUGFyc2VyKCkKICAgICAgICAgaXNpbmRleC0+ZGVyZWYoKTsKIH0KIAot
dm9pZCBLSFRNTFBhcnNlcjo6cmVzZXQoKQordm9pZCBIVE1MUGFyc2VyOjpyZXNldCgpCiB7CiAg
ICAgc2V0Q3VycmVudChkb2MoKSk7CiAKICAgICBmcmVlQmxvY2soKTsKIAotICAgIC8vIGJlZm9y
ZSBwYXJzaW5nLCBubyB0YWdzIGFyZSBmb3JiaWRkZW4KLSAgICBtZW1zZXQoZm9yYmlkZGVuVGFn
LCAwLCBzaXplb2YoZm9yYmlkZGVuVGFnKSk7Ci0KICAgICBpbkJvZHkgPSBmYWxzZTsKICAgICBo
YXZlRnJhbWVTZXQgPSBmYWxzZTsKICAgICBoYXZlQ29udGVudCA9IGZhbHNlOwpAQCAtMTgwLDEw
ICsxNjksMTAgQEAgdm9pZCBLSFRNTFBhcnNlcjo6cmVzZXQoKQogICAgIGVuZCA9IGZhbHNlOwog
ICAgIGlzaW5kZXggPSAwOwogICAgIAotICAgIGRpc2NhcmRfdW50aWwgPSAwOworICAgIGRpc2Nh
cmRfdW50aWwgPSBudWxsQXRvbTsKIH0KIAotdm9pZCBLSFRNTFBhcnNlcjo6c2V0Q3VycmVudChE
T006Ok5vZGVJbXBsICpuZXdDdXJyZW50KSAKK3ZvaWQgSFRNTFBhcnNlcjo6c2V0Q3VycmVudChE
T006Ok5vZGVJbXBsICpuZXdDdXJyZW50KSAKIHsKICAgICBib29sIG5ld0N1cnJlbnRJc1JlZmVy
ZW5jZWQgPSBuZXdDdXJyZW50ICYmIG5ld0N1cnJlbnQgIT0gZG9jKCk7CiAgICAgaWYgKG5ld0N1
cnJlbnRJc1JlZmVyZW5jZWQpIApAQCAtMTk0LDE0NCArMTgzLDEwOCBAQCB2b2lkIEtIVE1MUGFy
c2VyOjpzZXRDdXJyZW50KERPTTo6Tm9kZUltCiAgICAgY3VycmVudElzUmVmZXJlbmNlZCA9IG5l
d0N1cnJlbnRJc1JlZmVyZW5jZWQ7CiB9CiAKLXZvaWQgS0hUTUxQYXJzZXI6OnBhcnNlVG9rZW4o
VG9rZW4gKnQpCit2b2lkIEhUTUxQYXJzZXI6OnBhcnNlVG9rZW4oVG9rZW4gKnQpCiB7Ci0gICAg
aWYoZGlzY2FyZF91bnRpbCkgewotICAgICAgICBpZih0LT5pZCA9PSBkaXNjYXJkX3VudGlsKQot
ICAgICAgICAgICAgZGlzY2FyZF91bnRpbCA9IDA7CisgICAgaWYgKCFkaXNjYXJkX3VudGlsLmlz
TnVsbCgpKSB7CisgICAgICAgIGlmICh0LT50YWdOYW1lID09IGRpc2NhcmRfdW50aWwgJiYgIXQt
PmJlZ2luVGFnKQorICAgICAgICAgICAgZGlzY2FyZF91bnRpbCA9IG51bGxBdG9tOwogCiAgICAg
ICAgIC8vIGRvIG5vdCBza2lwIDwvaWZyYW1lPgotICAgICAgICBpZiAoIGRpc2NhcmRfdW50aWwg
fHwgY3VycmVudC0+aWQoKSArIElEX0NMT1NFX1RBRyAhPSB0LT5pZCApCisgICAgICAgIGlmICgh
ZGlzY2FyZF91bnRpbC5pc051bGwoKSB8fCAoY3VycmVudC0+bG9jYWxOYW1lKCkgIT0gdC0+dGFn
TmFtZSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogCi0jaWZkZWYgUEFSU0VSX0RFQlVH
Ci0gICAga2REZWJ1ZyggNjAzNSApIDw8ICJcblxuPT0+IHBhcnNlcjogcHJvY2Vzc2luZyB0b2tl
biAiIDw8IGdldFRhZ05hbWUodC0+aWQpLnN0cmluZygpIDw8ICIoIiA8PCB0LT5pZCA8PCAiKSIK
LSAgICAgICAgICAgICAgICAgICAgPDwgIiBjdXJyZW50ID0gIiA8PCBnZXRUYWdOYW1lKGN1cnJl
bnQtPmlkKCkpLnN0cmluZygpIDw8ICIoIiA8PCBjdXJyZW50LT5pZCgpIDw8ICIpIiA8PCBlbmRs
OwotICAgIGtkRGVidWcoNjAzNSkgPDwgIiBpbkJvZHk9IiA8PCBpbkJvZHkgPDwgIiBoYXZlRnJh
bWVTZXQ9IiA8PCBoYXZlRnJhbWVTZXQgPDwgZW5kbDsKLSNlbmRpZgotCi0gICAgLy8gaG9seSBz
aGl0LiBhcHBhcmVudGx5IHNvbWUgc2l0ZXMgdXNlIDwvYnI+IGluc3RlYWQgb2YgPGJyPgotICAg
IC8vIGJlIGNvbXBhdGlibGUgd2l0aCBJRSBhbmQgTlMKLSAgICBpZiAodC0+aWQgPT0gSURfQlIg
KyBJRF9DTE9TRV9UQUcgJiYgZG9jKCktPmluQ29tcGF0TW9kZSgpKQotICAgICAgICB0LT5pZCA9
IElEX0JSOworICAgIC8vIEFwcGFyZW50bHkgc29tZSBzaXRlcyB1c2UgPC9icj4gaW5zdGVhZCBv
ZiA8YnI+LiAgQmUgY29tcGF0aWJsZSB3aXRoIElFIGFuZCBGaXJlZm94IGFuZCB0cmVhdCB0aGlz
IGxpa2UgPGJyPi4KKyAgICBpZiAodC0+aXNDbG9zZVRhZyhIVE1MTmFtZXM6OmJyKCkpICYmIGRv
YygpLT5pbkNvbXBhdE1vZGUoKSkKKyAgICAgICAgdC0+YmVnaW5UYWcgPSB0cnVlOwogCi0gICAg
aWYgKHQtPmlkID4gSURfQ0xPU0VfVEFHKQotICAgIHsKKyAgICBpZiAoIXQtPmJlZ2luVGFnKSB7
CiAgICAgICAgIHByb2Nlc3NDbG9zZVRhZyh0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAog
ICAgIC8vIGlnbm9yZSBzcGFjZXMsIGlmIHdlJ3JlIG5vdCBpbnNpZGUgYSBwYXJhZ3JhcGggb3Ig
b3RoZXIgaW5saW5lIGNvZGUKLSAgICBpZiggdC0+aWQgPT0gSURfVEVYVCAmJiB0LT50ZXh0ICkg
ewotICAgICAgICBpZihpbkJvZHkgJiYgIXNraXBNb2RlKCkgJiYgY3VycmVudC0+aWQoKSAhPSBJ
RF9TVFlMRSAKLSAgICAgICAgICAgICYmIGN1cnJlbnQtPmlkKCkgIT0gSURfVElUTEUgJiYgY3Vy
cmVudC0+aWQoKSAhPSBJRF9TQ1JJUFQgJiYKLSAgICAgICAgICAgICF0LT50ZXh0LT5jb250YWlu
c09ubHlXaGl0ZXNwYWNlKCkpIAorICAgIGlmICh0LT50YWdOYW1lID09IHRleHRBdG9tICYmIHQt
PnRleHQpIHsKKyAgICAgICAgaWYgKGluQm9keSAmJiAhc2tpcE1vZGUoKSAmJiBjdXJyZW50LT5s
b2NhbE5hbWUoKSAhPSBIVE1MTmFtZXM6OnN0eWxlKCkgJiYgY3VycmVudC0+bG9jYWxOYW1lKCkg
IT0gSFRNTE5hbWVzOjp0aXRsZSgpICYmIAorICAgICAgICAgICAgY3VycmVudC0+bG9jYWxOYW1l
KCkgIT0gSFRNTE5hbWVzOjpzY3JpcHQoKSAmJiAhdC0+dGV4dC0+Y29udGFpbnNPbmx5V2hpdGVz
cGFjZSgpKSAKICAgICAgICAgICAgIGhhdmVDb250ZW50ID0gdHJ1ZTsKLSNpZmRlZiBQQVJTRVJf
REVCVUcKLSAgICAgICAga2REZWJ1Zyg2MDM1KSA8PCAibGVuZ3RoPSI8PCB0LT50ZXh0LT5sIDw8
ICIgdGV4dD0nIiA8PCBRQ29uc3RTdHJpbmcodC0+dGV4dC0+cywgdC0+dGV4dC0+bCkuc3RyaW5n
KCkgPDwgIiciIDw8IGVuZGw7Ci0jZW5kaWYKICAgICB9CiAKLSAgICBOb2RlSW1wbCAqbiA9IGdl
dEVsZW1lbnQodCk7CisgICAgTm9kZUltcGwgKm4gPSBnZXROb2RlKHQpOwogICAgIC8vIGp1c3Qg
dG8gYmUgc3VyZSwgYW5kIHRvIGNhdGNoIGN1cnJlbnRseSB1bmltcGxlbWVudGVkIHN0dWZmCi0g
ICAgaWYoIW4pCisgICAgaWYgKCFuKQogICAgICAgICByZXR1cm47CiAKICAgICBTaGFyZWRQdHI8
Tm9kZUltcGw+IHByb3RlY3ROb2RlKG4pOwogCiAgICAgLy8gc2V0IGF0dHJpYnV0ZXMKLSAgICBp
ZihuLT5pc0VsZW1lbnROb2RlKCkpCi0gICAgewotICAgICAgICBFbGVtZW50SW1wbCAqZSA9IHN0
YXRpY19jYXN0PEVsZW1lbnRJbXBsICo+KG4pOworICAgIGlmIChuLT5pc0hUTUxFbGVtZW50KCkp
IHsKKyAgICAgICAgSFRNTEVsZW1lbnRJbXBsICplID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJ
bXBsKj4obik7CiAgICAgICAgIGUtPnNldEF0dHJpYnV0ZU1hcCh0LT5hdHRycyk7CiAKICAgICAg
ICAgLy8gdGFrZSBjYXJlIG9mIG9wdGlvbmFsIGNsb3NlIHRhZ3MKLSAgICAgICAgaWYoZW5kVGFn
UmVxdWlyZW1lbnQoZS0+aWQoKSkgPT0gRE9NOjpPUFRJT05BTCkKLSAgICAgICAgICAgIHBvcEJs
b2NrKHQtPmlkKTsKKyAgICAgICAgaWYgKGUtPmVuZFRhZ1JlcXVpcmVtZW50KCkgPT0gVGFnU3Rh
dHVzT3B0aW9uYWwpCisgICAgICAgICAgICBwb3BCbG9jayh0LT50YWdOYW1lKTsKICAgICAgICAg
ICAgIAotICAgICAgICBpZiAoaXNIZWFkZXJUYWcodC0+aWQpKQorICAgICAgICBpZiAoaXNIZWFk
ZXJUYWcodC0+dGFnTmFtZSkpCiAgICAgICAgICAgICAvLyBEbyBub3QgYWxsb3cgdHdvIGhlYWRl
ciB0YWdzIHRvIGJlIG5lc3RlZCBpZiB0aGUgaW50ZXJ2ZW5pbmcgdGFncyBhcmUgaW5saW5lcy4K
ICAgICAgICAgICAgIHBvcE5lc3RlZEhlYWRlclRhZygpOwogICAgIH0KIAotICAgIC8vIGlmIHRo
aXMgdGFnIGlzIGZvcmJpZGRlbiBpbnNpZGUgdGhlIGN1cnJlbnQgY29udGV4dCwgcG9wCi0gICAg
Ly8gYmxvY2tzIHVudGlsIHdlIGFyZSBhbGxvd2VkIHRvIGFkZCBpdC4uLgotICAgIHdoaWxlIChi
bG9ja1N0YWNrICYmIHQtPmlkIDw9IElEX0xBU1RfVEFHICYmIGZvcmJpZGRlblRhZ1t0LT5pZF0p
IHsKLSNpZmRlZiBQQVJTRVJfREVCVUcKLSAgICAgICAga2REZWJ1ZyggNjAzNSApIDw8ICJ0LT5p
ZDogIiA8PCB0LT5pZCA8PCAiIGlzIGZvcmJpZGRlbiA6LSggIiA8PCBlbmRsOwotI2VuZGlmCi0g
ICAgICAgIHBvcE9uZUJsb2NrKCk7Ci0gICAgfQotCi0gICAgaWYgKCFpbnNlcnROb2RlKG4sIHQt
PmZsYXQpKSAKLSAgICB7CisgICAgaWYgKCFpbnNlcnROb2RlKG4sIHQtPmZsYXQpKSB7CiAgICAg
ICAgIC8vIHdlIGNvdWxkbid0IGluc2VydCB0aGUgbm9kZS4uLgotICAgICAgICAKLSAgICAgICAg
aWYobi0+aXNFbGVtZW50Tm9kZSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBFbGVtZW50SW1w
bCAqZSA9IHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsICo+KG4pOworICAgICAgICBpZiAobi0+aXNF
bGVtZW50Tm9kZSgpKSB7CisgICAgICAgICAgICBFbGVtZW50SW1wbCogZSA9IHN0YXRpY19jYXN0
PEVsZW1lbnRJbXBsKj4obik7CiAgICAgICAgICAgICBlLT5zZXRBdHRyaWJ1dGVNYXAoMCk7CiAg
ICAgICAgIH0KICAgICAgICAgICAgIAotI2lmZGVmIFBBUlNFUl9ERUJVRwotICAgICAgICBrZERl
YnVnKCA2MDM1ICkgPDwgImluc2VydE5vZGUgZmFpbGVkIGN1cnJlbnQ9IiA8PCBjdXJyZW50LT5p
ZCgpIDw8ICIsIG5ldz0iIDw8IG4tPmlkKCkgPDwgIiEiIDw8IGVuZGw7Ci0jZW5kaWYKICAgICAg
ICAgaWYgKG1hcCA9PSBuKQotICAgICAgICB7Ci0jaWZkZWYgUEFSU0VSX0RFQlVHCi0gICAgICAg
ICAgICBrZERlYnVnKCA2MDM1ICkgPDwgIiAgLS0+IHJlc2V0dGluZyBtYXAhIiA8PCBlbmRsOwot
I2VuZGlmCiAgICAgICAgICAgICBtYXAgPSAwOwotICAgICAgICB9CisKICAgICAgICAgaWYgKGZv
cm0gPT0gbikKLSAgICAgICAgewotI2lmZGVmIFBBUlNFUl9ERUJVRwotICAgICAgICAgICAga2RE
ZWJ1ZyggNjAzNSApIDw8ICIgICAtLT4gcmVzZXR0aW5nIGZvcm0hIiA8PCBlbmRsOwotI2VuZGlm
CiAgICAgICAgICAgICBmb3JtID0gMDsKLSAgICAgICAgfQogICAgIH0KIH0KIAotc3RhdGljIGJv
b2wgaXNUYWJsZVJlbGF0ZWRUYWcoaW50IGlkKQorc3RhdGljIGJvb2wgaXNUYWJsZVNlY3Rpb24o
Tm9kZUltcGwqIG4pCiB7Ci0gICAgcmV0dXJuIChpZCA9PSBJRF9UUiB8fCBpZCA9PSBJRF9URCB8
fCBpZCA9PSBJRF9UQUJMRSB8fCBpZCA9PSBJRF9UQk9EWSB8fCBpZCA9PSBJRF9URk9PVCB8fCBp
ZCA9PSBJRF9USEVBRCB8fAotICAgICAgICAgICAgaWQgPT0gSURfVEgpOworICAgIHJldHVybiBu
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGJvZHkoKSkgfHwgbi0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OnRmb290KCkpIHx8IG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0aGVhZCgpKTsKIH0KIAot
Ym9vbCBLSFRNTFBhcnNlcjo6aW5zZXJ0Tm9kZShOb2RlSW1wbCAqbiwgYm9vbCBmbGF0KQorc3Rh
dGljIGJvb2wgaXNUYWJsZVBhcnQoTm9kZUltcGwqIG4pCiB7Ci0gICAgU2hhcmVkUHRyPE5vZGVJ
bXBsPiBwcm90ZWN0Tm9kZShuKTsKKyAgICByZXR1cm4gbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
OnRyKCkpIHx8IG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0ZCgpKSB8fCBuLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6dGgoKSkgfHwKKyAgICAgICAgICAgaXNUYWJsZVNlY3Rpb24obik7Cit9CiAK
LSAgICBpbnQgaWQgPSBuLT5pZCgpOworc3RhdGljIGJvb2wgaXNUYWJsZVJlbGF0ZWQoTm9kZUlt
cGwqIG4pCit7CisgICAgcmV0dXJuIG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0YWJsZSgpKSB8
fCBpc1RhYmxlUGFydChuKTsKK30KIAorYm9vbCBIVE1MUGFyc2VyOjppbnNlcnROb2RlKE5vZGVJ
bXBsICpuLCBib29sIGZsYXQpCit7CisgICAgU2hhcmVkUHRyPE5vZGVJbXBsPiBwcm90ZWN0Tm9k
ZShuKTsKKworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lID0gbi0+bG9jYWxOYW1l
KCk7CisgICAgaW50IHRhZ1ByaW9yaXR5ID0gbi0+aXNIVE1MRWxlbWVudCgpID8gc3RhdGljX2Nh
c3Q8SFRNTEVsZW1lbnRJbXBsKj4obiktPnRhZ1ByaW9yaXR5KCkgOiAwOworICAgICAgICAKICAg
ICAvLyBsZXQncyBiZSBzdHVwaWQgYW5kIGp1c3QgdHJ5IHRvIGluc2VydCBpdC4KLSAgICAvLyB0
aGlzIHNob3VsZCB3b3JrIGlmIHRoZSBkb2N1bWVudCBpcyB3ZWxsZm9ybWVkCi0jaWZkZWYgUEFS
U0VSX0RFQlVHCi0gICAgTm9kZUltcGwgKnRtcCA9IGN1cnJlbnQ7Ci0jZW5kaWYKKyAgICAvLyB0
aGlzIHNob3VsZCB3b3JrIGlmIHRoZSBkb2N1bWVudCBpcyB3ZWxsLWZvcm1lZAogICAgIE5vZGVJ
bXBsICpuZXdOb2RlID0gY3VycmVudC0+YWRkQ2hpbGQobik7Ci0gICAgaWYgKCBuZXdOb2RlICkg
ewotI2lmZGVmIFBBUlNFUl9ERUJVRwotICAgICAgICBrZERlYnVnKCA2MDM1ICkgPDwgImFkZGVk
ICIgPDwgbi0+bm9kZU5hbWUoKS5zdHJpbmcoKSA8PCAiIHRvICIgPDwgdG1wLT5ub2RlTmFtZSgp
LnN0cmluZygpIDw8ICIsIG5ldyBjdXJyZW50PSIgPDwgbmV3Tm9kZS0+bm9kZU5hbWUoKS5zdHJp
bmcoKSA8PCBlbmRsOwotI2VuZGlmCi0gICAgICAgIC8vIGRvbid0IHB1c2ggZWxlbWVudHMgd2l0
aG91dCBlbmQgdGFnIG9uIHRoZSBzdGFjawotICAgICAgICBpZih0YWdQcmlvcml0eShpZCkgIT0g
MCAmJiAhZmxhdCkKLSAgICAgICAgewotICAgICAgICAgICAgcHVzaEJsb2NrKGlkLCB0YWdQcmlv
cml0eShpZCkpOworICAgIGlmIChuZXdOb2RlKSB7CisgICAgICAgIC8vIGRvbid0IHB1c2ggZWxl
bWVudHMgd2l0aG91dCBlbmQgdGFncyAoZS5nLiwgPGltZz4pIG9uIHRoZSBzdGFjaworICAgICAg
ICBpZiAodGFnUHJpb3JpdHkgPiAwICYmICFmbGF0KSB7CisgICAgICAgICAgICBwdXNoQmxvY2so
bG9jYWxOYW1lLCB0YWdQcmlvcml0eSk7CiAgICAgICAgICAgICBpZiAobmV3Tm9kZSA9PSBjdXJy
ZW50KQotICAgICAgICAgICAgICAgIHBvcEJsb2NrKGlkKTsKKyAgICAgICAgICAgICAgICBwb3BC
bG9jayhsb2NhbE5hbWUpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHNldEN1
cnJlbnQobmV3Tm9kZSk7Ci0jaWYgU1BFRURfREVCVUcgPCAyCi0gICAgICAgICAgICBpZighbi0+
YXR0YWNoZWQoKSAmJiBIVE1MV2lkZ2V0KQorICAgICAgICAgICAgaWYgKCFuLT5hdHRhY2hlZCgp
ICYmIEhUTUxXaWRnZXQpCiAgICAgICAgICAgICAgICAgbi0+YXR0YWNoKCk7Ci0jZW5kaWYKICAg
ICAgICAgfQogICAgICAgICBlbHNlIHsKLSNpZiBTUEVFRF9ERUJVRyA8IDIKLSAgICAgICAgICAg
IGlmKCFuLT5hdHRhY2hlZCgpICYmIEhUTUxXaWRnZXQpCisgICAgICAgICAgICBpZiAoIW4tPmF0
dGFjaGVkKCkgJiYgSFRNTFdpZGdldCkKICAgICAgICAgICAgICAgICBuLT5hdHRhY2goKTsKICAg
ICAgICAgICAgIGlmIChuLT5tYWludGFpbnNTdGF0ZSgpKSB7CiAgICAgICAgICAgICAgICAgZG9j
KCktPnJlZ2lzdGVyTWFpbnRhaW5zU3RhdGUobik7CkBAIC0zNDAsMTA0ICsyOTMsODYgQEAgYm9v
bCBLSFRNTFBhcnNlcjo6aW5zZXJ0Tm9kZShOb2RlSW1wbCAqbgogICAgICAgICAgICAgICAgICAg
ICBuLT5yZXN0b3JlU3RhdGUoc3RhdGVzKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG4t
PmNsb3NlUmVuZGVyZXIoKTsKLSNlbmRpZgogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgfSBlbHNlIHsKLSNpZmRlZiBQQVJTRVJfREVCVUcKLSAgICAgICAga2REZWJ1Zygg
NjAzNSApIDw8ICJBRERJTkcgTk9ERSBGQUlMRUQhISEhIGN1cnJlbnQgPSAiIDw8IGN1cnJlbnQt
Pm5vZGVOYW1lKCkuc3RyaW5nKCkgPDwgIiwgbmV3ID0gIiA8PCBuLT5ub2RlTmFtZSgpLnN0cmlu
ZygpIDw8IGVuZGw7Ci0jZW5kaWYKLSAgICAgICAgLy8gZXJyb3IgaGFuZGxpbmcuLi4KLSAgICAg
ICAgSFRNTEVsZW1lbnRJbXBsICplOwotICAgICAgICBib29sIGhhbmRsZWQgPSBmYWxzZTsKLQot
ICAgICAgICAvLyBzd2l0Y2ggYWNjb3JkaW5nIHRvIHRoZSBlbGVtZW50IHRvIGluc2VydAotICAg
ICAgICBzd2l0Y2goaWQpCi0gICAgICAgIHsKLSAgICAgICAgY2FzZSBJRF9UUjoKLSAgICAgICAg
Y2FzZSBJRF9USDoKLSAgICAgICAgY2FzZSBJRF9URDoKLSAgICAgICAgICAgIGlmIChpblN0cmF5
VGFibGVDb250ZW50ICYmICFpc1RhYmxlUmVsYXRlZFRhZyhjdXJyZW50LT5pZCgpKSkgeworICAg
IH0gZWxzZQorICAgICAgICByZXR1cm4gaGFuZGxlRXJyb3IobiwgZmxhdCwgbG9jYWxOYW1lLCB0
YWdQcmlvcml0eSk7IC8vIFRyeSB0byBoYW5kbGUgdGhlIGVycm9yLgorfQorCitib29sIEhUTUxQ
YXJzZXI6OmhhbmRsZUVycm9yKE5vZGVJbXBsKiBuLCBib29sIGZsYXQsIGNvbnN0IEF0b21pY1N0
cmluZyYgbG9jYWxOYW1lLCBpbnQgdGFnUHJpb3JpdHkpCit7CisgICAgLy8gRXJyb3IgaGFuZGxp
bmcgY29kZS4gIFRoaXMgaXMganVzdCBhZCBob2MgaGFuZGxpbmcgb2Ygc3BlY2lmaWMgcGFyZW50
L2NoaWxkIGNvbWJpbmF0aW9ucy4KKyAgICBIVE1MRWxlbWVudEltcGwgKmU7CisgICAgYm9vbCBo
YW5kbGVkID0gZmFsc2U7CisKKyAgICAvLyAxLiBDaGVjayBvdXQgdGhlIGVsZW1lbnQncyB0YWcg
bmFtZSB0byBkZWNpZGUgaG93IHRvIGRlYWwgd2l0aCBlcnJvcnMuCisgICAgaWYgKG4tPmlzVGV4
dE5vZGUoKSkgeworICAgICAgICBpZiAoY3VycmVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnNl
bGVjdCgpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9IGVsc2UgaWYgKG4tPmlz
SFRNTEVsZW1lbnQoKSkgeworICAgICAgICBIVE1MRWxlbWVudEltcGwqIGggPSBzdGF0aWNfY2Fz
dDxIVE1MRWxlbWVudEltcGwqPihuKTsKKyAgICAgICAgaWYgKGgtPmhhc0xvY2FsTmFtZShIVE1M
TmFtZXM6OnRyKCkpIHx8IGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnRoKCkpIHx8CisgICAg
ICAgICAgICBoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0ZCgpKSkgeworICAgICAgICAgICAg
aWYgKGluU3RyYXlUYWJsZUNvbnRlbnQgJiYgIWlzVGFibGVSZWxhdGVkKGN1cnJlbnQpKSB7CiAg
ICAgICAgICAgICAgICAgLy8gcG9wIG91dCB0byB0aGUgbmVhcmVzdCBlbmNsb3NpbmcgdGFibGUt
cmVsYXRlZCB0YWcuCi0gICAgICAgICAgICAgICAgd2hpbGUgKGJsb2NrU3RhY2sgJiYgIWlzVGFi
bGVSZWxhdGVkVGFnKGN1cnJlbnQtPmlkKCkpKQorICAgICAgICAgICAgICAgIHdoaWxlIChibG9j
a1N0YWNrICYmICFpc1RhYmxlUmVsYXRlZChjdXJyZW50KSkKICAgICAgICAgICAgICAgICAgICAg
cG9wT25lQmxvY2soKTsKICAgICAgICAgICAgICAgICByZXR1cm4gaW5zZXJ0Tm9kZShuKTsKICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElEX0NPTU1FTlQ6
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJRF9IRUFEOgotICAgICAgICAgICAg
Ly8gIyMjIGFsbGxvdyBub3QgaGF2aW5nIDxIVE1MPiBpbiBhdCBhbGwsIGFzIHBlciBIVE1MIHNw
ZWMKLSAgICAgICAgICAgIGlmICghY3VycmVudC0+aXNEb2N1bWVudE5vZGUoKSAmJiBjdXJyZW50
LT5pZCgpICE9IElEX0hUTUwgKQorICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFtZShI
VE1MTmFtZXM6OmhlYWQoKSkpIHsKKyAgICAgICAgICAgIGlmICghY3VycmVudC0+aXNEb2N1bWVu
dE5vZGUoKSAmJiAhY3VycmVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omh0bWwoKSkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAvLyBXZSBjYW4gZGVhbCB3aXRoIGEgYmFzZSwgbWV0YSBhbmQgbGluayBlbGVtZW50IGluIHRo
ZSBib2R5LCBieSBqdXN0IGFkZGluZyB0aGUgZWxlbWVudCB0byBoZWFkLgotICAgICAgICBjYXNl
IElEX01FVEE6Ci0gICAgICAgIGNhc2UgSURfTElOSzoKLSAgICAgICAgY2FzZSBJRF9CQVNFOgot
ICAgICAgICAgICAgaWYoICFoZWFkICkKKyAgICAgICAgfSBlbHNlIGlmIChoLT5oYXNMb2NhbE5h
bWUoSFRNTE5hbWVzOjptZXRhKCkpIHx8IGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Omxpbmso
KSkgfHwgaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6YmFzZSgpKSkgeworICAgICAgICAgICAg
aWYgKCFoZWFkKQogICAgICAgICAgICAgICAgIGNyZWF0ZUhlYWQoKTsKLSAgICAgICAgICAgIGlm
KCBoZWFkICkgewotICAgICAgICAgICAgICAgIGlmICggaGVhZC0+YWRkQ2hpbGQobikgKSB7Ci0j
aWYgU1BFRURfREVCVUcgPCAyCi0gICAgICAgICAgICAgICAgICAgIGlmKCFuLT5hdHRhY2hlZCgp
ICYmIEhUTUxXaWRnZXQpCisgICAgICAgICAgICBpZiAoaGVhZCkgeworICAgICAgICAgICAgICAg
IGlmIChoZWFkLT5hZGRDaGlsZChuKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIW4tPmF0
dGFjaGVkKCkgJiYgSFRNTFdpZGdldCkKICAgICAgICAgICAgICAgICAgICAgICAgIG4tPmF0dGFj
aCgpOwotI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotCQl9IGVsc2Ug
ewotCQkgICAgcmV0dXJuIGZhbHNlOwotCQl9CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIElEX0hUTUw6CisgICAgICAgIH0gZWxzZSBpZiAoaC0+aGFz
TG9jYWxOYW1lKEhUTUxOYW1lczo6aHRtbCgpKSkgewogICAgICAgICAgICAgaWYgKCFjdXJyZW50
LT5pc0RvY3VtZW50Tm9kZSgpICkgewotCQlpZiAoIGRvYygpLT5maXJzdENoaWxkKCktPmlkKCkg
PT0gSURfSFRNTCkgewotCQkgICAgLy8gd2UgaGF2ZSBhbm90aGVyIDxIVE1MPiBlbGVtZW50Li4u
LiBhcHBseSBhdHRyaWJ1dGVzIHRvIGV4aXN0aW5nIG9uZQotCQkgICAgLy8gbWFrZSBzdXJlIHdl
IGRvbid0IG92ZXJ3cml0ZSBhbHJlYWR5IGV4aXN0aW5nIGF0dHJpYnV0ZXMKLQkJICAgIE5hbWVk
QXR0ck1hcEltcGwgKm1hcCA9IHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsKj4obiktPmF0dHJpYnV0
ZXModHJ1ZSk7Ci0JCSAgICBOYW1lZEF0dHJNYXBJbXBsICpibWFwID0gc3RhdGljX2Nhc3Q8RWxl
bWVudEltcGwqPihkb2MoKS0+Zmlyc3RDaGlsZCgpKS0+YXR0cmlidXRlcyhmYWxzZSk7Ci0JCSAg
ICBib29sIGNoYW5nZWQgPSBmYWxzZTsKLQkJICAgIGZvciAodW5zaWduZWQgbG9uZyBsID0gMDsg
bWFwICYmIGwgPCBtYXAtPmxlbmd0aCgpOyArK2wpIHsKLQkJCUF0dHJpYnV0ZUltcGwqIGl0ID0g
bWFwLT5hdHRyaWJ1dGVJdGVtKGwpOwotCQkJY2hhbmdlZCA9ICFibWFwLT5nZXRBdHRyaWJ1dGVJ
dGVtKGl0LT5pZCgpKTsKLQkJCWJtYXAtPmluc2VydEF0dHJpYnV0ZShpdC0+Y2xvbmUoZmFsc2Up
KTsKLQkJICAgIH0KLQkJICAgIGlmICggY2hhbmdlZCApCi0JCQlkb2MoKS0+cmVjYWxjU3R5bGUo
IE5vZGVJbXBsOjpJbmhlcml0ICk7Ci0JCX0KKyAgICAgICAgICAgICAgICBpZiAoZG9jKCktPmZp
cnN0Q2hpbGQoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omh0bWwoKSkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgLy8gd2UgaGF2ZSBhbm90aGVyIDxIVE1MPiBlbGVtZW50Li4uLiBhcHBseSBhdHRy
aWJ1dGVzIHRvIGV4aXN0aW5nIG9uZQorICAgICAgICAgICAgICAgICAgICAvLyBtYWtlIHN1cmUg
d2UgZG9uJ3Qgb3ZlcndyaXRlIGFscmVhZHkgZXhpc3RpbmcgYXR0cmlidXRlcworICAgICAgICAg
ICAgICAgICAgICBOYW1lZEF0dHJNYXBJbXBsICptYXAgPSBzdGF0aWNfY2FzdDxFbGVtZW50SW1w
bCo+KG4pLT5hdHRyaWJ1dGVzKHRydWUpOworICAgICAgICAgICAgICAgICAgICBOYW1lZEF0dHJN
YXBJbXBsICpibWFwID0gc3RhdGljX2Nhc3Q8RWxlbWVudEltcGwqPihkb2MoKS0+Zmlyc3RDaGls
ZCgpKS0+YXR0cmlidXRlcyhmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgIGJvb2wgY2hhbmdl
ZCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGxvbmcgbCA9IDA7
IG1hcCAmJiBsIDwgbWFwLT5sZW5ndGgoKTsgKytsKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBBdHRyaWJ1dGVJbXBsKiBpdCA9IG1hcC0+YXR0cmlidXRlSXRlbShsKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNoYW5nZWQgPSAhYm1hcC0+Z2V0QXR0cmlidXRlSXRlbShpdC0+aWQoKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBibWFwLT5pbnNlcnRBdHRyaWJ1dGUoaXQtPmNsb25l
KGZhbHNlKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYg
KGNoYW5nZWQpCisgICAgICAgICAgICAgICAgICAgICAgICBkb2MoKS0+cmVjYWxjU3R5bGUoTm9k
ZUltcGw6OkluaGVyaXQpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0JICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElEX1RJ
VExFOgotICAgICAgICBjYXNlIElEX1NUWUxFOgotICAgICAgICAgICAgaWYgKCAhaGVhZCApCisg
ICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1l
czo6dGl0bGUoKSkgfHwgaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6c3R5bGUoKSkpIHsKKyAg
ICAgICAgICAgIGlmICghaGVhZCkKICAgICAgICAgICAgICAgICBjcmVhdGVIZWFkKCk7Ci0gICAg
ICAgICAgICBpZiAoIGhlYWQgKSB7CisgICAgICAgICAgICBpZiAoaGVhZCkgewogICAgICAgICAg
ICAgICAgIERPTTo6Tm9kZUltcGwgKm5ld05vZGUgPSBoZWFkLT5hZGRDaGlsZChuKTsKLSAgICAg
ICAgICAgICAgICBpZiAoIG5ld05vZGUgKSB7Ci0gICAgICAgICAgICAgICAgICAgIHB1c2hCbG9j
ayhpZCwgdGFnUHJpb3JpdHkoaWQpKTsKKyAgICAgICAgICAgICAgICBpZiAobmV3Tm9kZSkgewor
ICAgICAgICAgICAgICAgICAgICBwdXNoQmxvY2sobG9jYWxOYW1lLCB0YWdQcmlvcml0eSk7CiAg
ICAgICAgICAgICAgICAgICAgIHNldEN1cnJlbnQobmV3Tm9kZSk7Ci0jaWYgU1BFRURfREVCVUcg
PCAyCi0JCSAgICBpZighbi0+YXR0YWNoZWQoKSAmJiBIVE1MV2lkZ2V0KQorICAgICAgICAgICAg
ICAgICAgICBpZiAoIW4tPmF0dGFjaGVkKCkgJiYgSFRNTFdpZGdldCkKICAgICAgICAgICAgICAg
ICAgICAgICAgIG4tPmF0dGFjaCgpOwotI2VuZGlmCiAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
LSNpZmRlZiBQQVJTRVJfREVCVUcKLSAgICAgICAgICAgICAgICAgICAga2REZWJ1ZyggNjAzNSAp
IDw8ICJhZGRpbmcgc3R5bGUgYmVmb3JlIHRvIGJvZHkgZmFpbGVkISEhISIgPDwgZW5kbDsKLSNl
bmRpZgotICAgICAgICAgICAgICAgICAgICBkaXNjYXJkX3VudGlsID0gSURfU1RZTEUgKyBJRF9D
TE9TRV9UQUc7CisgICAgICAgICAgICAgICAgICAgIHNldFNraXBNb2RlKEhUTUxOYW1lczo6c3R5
bGUoKSk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9IGVsc2UgaWYo
aW5Cb2R5KSB7Ci0gICAgICAgICAgICAgICAgZGlzY2FyZF91bnRpbCA9IElEX1NUWUxFICsgSURf
Q0xPU0VfVEFHOworICAgICAgICAgICAgICAgIHNldFNraXBNb2RlKEhUTUxOYW1lczo6c3R5bGUo
KSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAvLyBTQ1JJUFQgYW5kIE9CSkVDVCBhcmUgYWxsb3dl
ZCBpbiB0aGUgYm9keS4KLSAgICAgICAgY2FzZSBJRF9CT0RZOgotICAgICAgICAgICAgaWYoaW5C
b2R5ICYmIGRvYygpLT5ib2R5KCkpIHsKKyAgICAgICAgfSBlbHNlIGlmIChoLT5oYXNMb2NhbE5h
bWUoSFRNTE5hbWVzOjpib2R5KCkpKSB7CisgICAgICAgICAgICBpZiAoaW5Cb2R5ICYmIGRvYygp
LT5ib2R5KCkpIHsKICAgICAgICAgICAgICAgICAvLyB3ZSBoYXZlIGFub3RoZXIgPEJPRFk+IGVs
ZW1lbnQuLi4uIGFwcGx5IGF0dHJpYnV0ZXMgdG8gZXhpc3Rpbmcgb25lCiAgICAgICAgICAgICAg
ICAgLy8gbWFrZSBzdXJlIHdlIGRvbid0IG92ZXJ3cml0ZSBhbHJlYWR5IGV4aXN0aW5nIGF0dHJp
YnV0ZXMKICAgICAgICAgICAgICAgICAvLyBzb21lIHNpdGVzIHVzZSA8Ym9keSBiZ2NvbG9yPXJp
Z2h0Y29sb3I+Li4uPGJvZHkgYmdjb2xvcj13cm9uZ2NvbG9yPgpAQCAtNDQ5LDM2MCArMzg0LDI1
OCBAQCBib29sIEtIVE1MUGFyc2VyOjppbnNlcnROb2RlKE5vZGVJbXBsICpuCiAgICAgICAgICAg
ICAgICAgICAgIGNoYW5nZWQgPSAhYm1hcC0+Z2V0QXR0cmlidXRlSXRlbShpdC0+aWQoKSk7CiAg
ICAgICAgICAgICAgICAgICAgIGJtYXAtPmluc2VydEF0dHJpYnV0ZShpdC0+Y2xvbmUoZmFsc2Up
KTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKCBjaGFuZ2VkICkKLSAg
ICAgICAgICAgICAgICAgICAgZG9jKCktPnJlY2FsY1N0eWxlKCBOb2RlSW1wbDo6SW5oZXJpdCAp
OwotICAgICAgICAgICAgfSBlbHNlIGlmICggY3VycmVudC0+aXNEb2N1bWVudE5vZGUoKSApCi0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
ICAgICBicmVhazsKLQotICAgICAgICAgICAgLy8gdGhlIGZvbGxvd2luZyBpcyBhIGhhY2sgdG8g
bW92ZSBub24gcmVuZGVyZWQgZWxlbWVudHMKLSAgICAgICAgICAgIC8vIG91dHNpZGUgb2YgdGFi
bGVzLgotICAgICAgICAgICAgLy8gbmVlZGVkIGZvciBicm9rZW4gY29uc3RydWN0cyBsaWtlIDx0
YWJsZT48Zm9ybSAuLi4+PHRyPi4uLi4KLSAgICAgICAgY2FzZSBJRF9JTlBVVDoKLSAgICAgICAg
ewotICAgICAgICAgICAgRWxlbWVudEltcGwgKmUgPSBzdGF0aWNfY2FzdDxFbGVtZW50SW1wbCAq
PihuKTsKLSAgICAgICAgICAgIERPTVN0cmluZyB0eXBlID0gZS0+Z2V0QXR0cmlidXRlKEFUVFJf
VFlQRSk7Ci0KLSAgICAgICAgICAgIGlmICggc3RyY2FzZWNtcCggdHlwZSwgImhpZGRlbiIgKSA9
PSAwICYmIGZvcm0pIHsKKyAgICAgICAgICAgICAgICBpZiAoY2hhbmdlZCkKKyAgICAgICAgICAg
ICAgICAgICAgZG9jKCktPnJlY2FsY1N0eWxlKE5vZGVJbXBsOjpJbmhlcml0KTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlm
ICghY3VycmVudC0+aXNEb2N1bWVudE5vZGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0gZWxzZSBpZiAoaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6aW5wdXQo
KSkpIHsKKyAgICAgICAgICAgIERPTVN0cmluZyB0eXBlID0gaC0+Z2V0QXR0cmlidXRlKEFUVFJf
VFlQRSk7CisgICAgICAgICAgICBpZiAoc3RyY2FzZWNtcCh0eXBlLCAiaGlkZGVuIikgPT0gMCAm
JiBmb3JtKSB7CiAgICAgICAgICAgICAgICAgZm9ybS0+YWRkQ2hpbGQobik7Ci0jaWYgU1BFRURf
REVCVUcgPCAyCi0gICAgICAgICAgICAgICAgaWYoIW4tPmF0dGFjaGVkKCkgJiYgSFRNTFdpZGdl
dCkKKyAgICAgICAgICAgICAgICBpZiAoIW4tPmF0dGFjaGVkKCkgJiYgSFRNTFdpZGdldCkKICAg
ICAgICAgICAgICAgICAgICAgbi0+YXR0YWNoKCk7Ci0jZW5kaWYKICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIGNhc2UgSURfVEVYVDoKLSAgICAgICAgICAgIC8vIGlnbm9yZSB0ZXh0IGluc2lk
ZSB0aGUgZm9sbG93aW5nIGVsZW1lbnRzLgotICAgICAgICAgICAgc3dpdGNoKGN1cnJlbnQtPmlk
KCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICBjYXNlIElEX1NFTEVDVDoKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
ICAgIDsKLSAgICAgICAgICAgICAgICAvLyBmYWxsIHRocm91Z2ghIQotICAgICAgICAgICAgfTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElEX0REOgotICAgICAgICBjYXNlIElE
X0RUOgorICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmRkKCkp
IHx8IGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmR0KCkpKSB7CiAgICAgICAgICAgICBlID0g
bmV3IEhUTUxETGlzdEVsZW1lbnRJbXBsKGRvY3VtZW50KTsKLSAgICAgICAgICAgIGlmICggaW5z
ZXJ0Tm9kZShlKSApIHsKKyAgICAgICAgICAgIGlmIChpbnNlcnROb2RlKGUpKSB7CiAgICAgICAg
ICAgICAgICAgaW5zZXJ0Tm9kZShuKTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElEX0FSRUE6Ci0g
ICAgICAgIHsKLSAgICAgICAgICAgIGlmKG1hcCkKLSAgICAgICAgICAgIHsKKyAgICAgICAgfSBl
bHNlIGlmIChoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjphcmVhKCkpKSB7CisgICAgICAgICAg
ICBpZiAobWFwKSB7CiAgICAgICAgICAgICAgICAgbWFwLT5hZGRDaGlsZChuKTsKLSNpZiBTUEVF
RF9ERUJVRyA8IDIKLSAgICAgICAgICAgICAgICBpZighbi0+YXR0YWNoZWQoKSAmJiBIVE1MV2lk
Z2V0KQorICAgICAgICAgICAgICAgIGlmICghbi0+YXR0YWNoZWQoKSAmJiBIVE1MV2lkZ2V0KQog
ICAgICAgICAgICAgICAgICAgICBuLT5hdHRhY2goKTsKLSNlbmRpZgogICAgICAgICAgICAgICAg
IGhhbmRsZWQgPSB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICB9Ci0gICAgICAgIGNhc2UgSURfQ0FQVElPTjogewotICAgICAgICAgICAgc3dpdGNoIChjdXJy
ZW50LT5pZCgpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBJRF9USEVBRDoKLSAgICAgICAgICAg
ICAgICBjYXNlIElEX1RCT0RZOgotICAgICAgICAgICAgICAgIGNhc2UgSURfVEZPT1Q6Ci0gICAg
ICAgICAgICAgICAgY2FzZSBJRF9UUjoKLSAgICAgICAgICAgICAgICBjYXNlIElEX1RIOgotICAg
ICAgICAgICAgICAgIGNhc2UgSURfVEQ6IHsKLSAgICAgICAgICAgICAgICAgICAgTm9kZUltcGwq
IHRzZWN0aW9uID0gY3VycmVudDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQtPmlk
KCkgPT0gSURfVFIpCi0gICAgICAgICAgICAgICAgICAgICAgICB0c2VjdGlvbiA9IGN1cnJlbnQt
PnBhcmVudCgpOwotICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjdXJyZW50LT5pZCgpID09
IElEX1REIHx8IGN1cnJlbnQtPmlkKCkgPT0gSURfVEgpCi0gICAgICAgICAgICAgICAgICAgICAg
ICB0c2VjdGlvbiA9IGN1cnJlbnQtPnBhcmVudCgpLT5wYXJlbnQoKTsKLSAgICAgICAgICAgICAg
ICAgICAgTm9kZUltcGwqIHRhYmxlID0gdHNlY3Rpb24tPnBhcmVudCgpOwotICAgICAgICAgICAg
ICAgICAgICBpbnQgZXhjZXB0aW9uY29kZSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIHRhYmxl
LT5pbnNlcnRCZWZvcmUobiwgdHNlY3Rpb24sIGV4Y2VwdGlvbmNvZGUpOwotICAgICAgICAgICAg
ICAgICAgICBwdXNoQmxvY2soaWQsIHRhZ1ByaW9yaXR5KGlkKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIHNldEN1cnJlbnQobik7Ci0gICAgICAgICAgICAgICAgICAgIGluU3RyYXlUYWJsZUNvbnRl
bnQrKzsKLSAgICAgICAgICAgICAgICAgICAgYmxvY2tTdGFjay0+c3RyYXlUYWJsZUNvbnRlbnQg
PSB0cnVlOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0gZWxzZSBpZiAoaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6Y2FwdGlvbigp
KSkgeworICAgICAgICAgICAgaWYgKGlzVGFibGVQYXJ0KGN1cnJlbnQpKSB7CisgICAgICAgICAg
ICAgICAgTm9kZUltcGwqIHRzZWN0aW9uID0gY3VycmVudDsKKyAgICAgICAgICAgICAgICBpZiAo
Y3VycmVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRyKCkpKQorICAgICAgICAgICAgICAgICAg
ICB0c2VjdGlvbiA9IGN1cnJlbnQtPnBhcmVudCgpOworICAgICAgICAgICAgICAgIGVsc2UgaWYg
KGN1cnJlbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0ZCgpKSB8fCBjdXJyZW50LT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6dGgoKSkpCisgICAgICAgICAgICAgICAgICAgIHRzZWN0aW9uID0gY3Vy
cmVudC0+cGFyZW50KCktPnBhcmVudCgpOworICAgICAgICAgICAgICAgIE5vZGVJbXBsKiB0YWJs
ZSA9IHRzZWN0aW9uLT5wYXJlbnQoKTsKKyAgICAgICAgICAgICAgICBpbnQgZXhjZXB0aW9uY29k
ZSA9IDA7CisgICAgICAgICAgICAgICAgdGFibGUtPmluc2VydEJlZm9yZShuLCB0c2VjdGlvbiwg
ZXhjZXB0aW9uY29kZSk7CisgICAgICAgICAgICAgICAgcHVzaEJsb2NrKGxvY2FsTmFtZSwgdGFn
UHJpb3JpdHkpOworICAgICAgICAgICAgICAgIHNldEN1cnJlbnQobik7CisgICAgICAgICAgICAg
ICAgaW5TdHJheVRhYmxlQ29udGVudCsrOworICAgICAgICAgICAgICAgIGJsb2NrU3RhY2stPnN0
cmF5VGFibGVDb250ZW50ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
SURfVEhFQUQ6Ci0gICAgICAgIGNhc2UgSURfVEJPRFk6Ci0gICAgICAgIGNhc2UgSURfVEZPT1Q6
Ci0gICAgICAgIGNhc2UgSURfQ09MR1JPVVA6IHsKLSAgICAgICAgICAgIGlmIChpc1RhYmxlUmVs
YXRlZFRhZyhjdXJyZW50LT5pZCgpKSkgewotICAgICAgICAgICAgICAgIHdoaWxlIChibG9ja1N0
YWNrICYmIGN1cnJlbnQtPmlkKCkgIT0gSURfVEFCTEUgJiYgaXNUYWJsZVJlbGF0ZWRUYWcoY3Vy
cmVudC0+aWQoKSkpCisgICAgICAgIH0gZWxzZSBpZiAoaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1l
czo6dGhlYWQoKSkgfHwgaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dGJvZHkoKSkgfHwKKyAg
ICAgICAgICAgICAgICAgICBoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0Zm9vdCgpKSB8fCBo
LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpjb2xncm91cCgpKSkgeworICAgICAgICAgICAgaWYg
KGlzVGFibGVSZWxhdGVkKGN1cnJlbnQpKSB7CisgICAgICAgICAgICAgICAgd2hpbGUgKGJsb2Nr
U3RhY2sgJiYgaXNUYWJsZVBhcnQoY3VycmVudCkpCiAgICAgICAgICAgICAgICAgICAgIHBvcE9u
ZUJsb2NrKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGluc2VydE5vZGUobik7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0KLSAgICAgICAgLy8gc3dpdGNoIG9uIHRoZSBjdXJyZW50bHkgYWN0aXZlIGVs
ZW1lbnQKLSAgICAgICAgc3dpdGNoKGN1cnJlbnQtPmlkKCkpCi0gICAgICAgIHsKLSAgICAgICAg
Y2FzZSBJRF9IVE1MOgotICAgICAgICAgICAgc3dpdGNoKGlkKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgY2FzZSBJRF9TQ1JJUFQ6Ci0gICAgICAgICAgICBjYXNlIElEX1NUWUxFOgotICAg
ICAgICAgICAgY2FzZSBJRF9NRVRBOgotICAgICAgICAgICAgY2FzZSBJRF9MSU5LOgotICAgICAg
ICAgICAgY2FzZSBJRF9PQkpFQ1Q6Ci0gICAgICAgICAgICBjYXNlIElEX0VNQkVEOgotICAgICAg
ICAgICAgY2FzZSBJRF9USVRMRToKLSAgICAgICAgICAgIGNhc2UgSURfSVNJTkRFWDoKLSAgICAg
ICAgICAgIGNhc2UgSURfQkFTRToKLSAgICAgICAgICAgICAgICBpZighaGVhZCkgeworICAgIH0K
KyAgICAKKyAgICAvLyAyLiBOZXh0IHdlIGV4YW1pbmUgb3VyIGN1cnJlbnRseSBhY3RpdmUgZWxl
bWVudCB0byBkbyBzb21lIGZ1cnRoZXIgZXJyb3IgaGFuZGxpbmcuCisgICAgaWYgKGN1cnJlbnQt
PmlzSFRNTEVsZW1lbnQoKSkgeworICAgICAgICBIVE1MRWxlbWVudEltcGwqIGggPSBzdGF0aWNf
Y2FzdDxIVE1MRWxlbWVudEltcGwqPihjdXJyZW50KTsKKyAgICAgICAgY29uc3QgQXRvbWljU3Ry
aW5nJiBjdXJyZW50VGFnTmFtZSA9IGN1cnJlbnQtPmxvY2FsTmFtZSgpOworICAgICAgICBpZiAo
aC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6aHRtbCgpKSkgeworICAgICAgICAgICAgSFRNTEVs
ZW1lbnRJbXBsKiBlbHQgPSBuLT5pc0hUTUxFbGVtZW50KCkgPyBzdGF0aWNfY2FzdDxIVE1MRWxl
bWVudEltcGwqPihuKSA6IDA7CisgICAgICAgICAgICBpZiAoZWx0ICYmIChlbHQtPmhhc0xvY2Fs
TmFtZShIVE1MTmFtZXM6OnNjcmlwdCgpKSB8fCBlbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6
OnN0eWxlKCkpIHx8CisgICAgICAgICAgICAgICAgZWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVz
OjptZXRhKCkpIHx8IGVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6bGluaygpKSB8fAorICAg
ICAgICAgICAgICAgIGVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b2JqZWN0KCkpIHx8IGVs
dC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6ZW1iZWQoKSkgfHwKKyAgICAgICAgICAgICAgICBl
bHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnRpdGxlKCkpIHx8IGVsdC0+aGFzTG9jYWxOYW1l
KEhUTUxOYW1lczo6aXNpbmRleCgpKSB8fAorICAgICAgICAgICAgICAgIGVsdC0+aGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6YmFzZSgpKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWhlYWQpIHsK
ICAgICAgICAgICAgICAgICAgICAgaGVhZCA9IG5ldyBIVE1MSGVhZEVsZW1lbnRJbXBsKGRvY3Vt
ZW50KTsKICAgICAgICAgICAgICAgICAgICAgZSA9IGhlYWQ7CiAgICAgICAgICAgICAgICAgICAg
IGluc2VydE5vZGUoZSk7CiAgICAgICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwogICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2Ug
SURfVEVYVDogewotICAgICAgICAgICAgICAgIFRleHRJbXBsICp0ID0gc3RhdGljX2Nhc3Q8VGV4
dEltcGwgKj4obik7Ci0gICAgICAgICAgICAgICAgaWYgKHQtPmNvbnRhaW5zT25seVdoaXRlc3Bh
Y2UoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAg
IC8qIEZhbGwgdGhyb3VnaCB0byBkZWZhdWx0ICovCisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIGlmIChuLT5pc1RleHROb2RlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
VGV4dEltcGwgKnQgPSBzdGF0aWNfY2FzdDxUZXh0SW1wbCAqPihuKTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHQtPmNvbnRhaW5zT25seVdoaXRlc3BhY2UoKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKwkJCQl9CisJCQkJaWYgKCFoYXZlRnJhbWVTZXQpIHsKKwkJ
CQkJZSA9IG5ldyBIVE1MQm9keUVsZW1lbnRJbXBsKGRvY3VtZW50KTsKKwkJCQkJc3RhcnRCb2R5
KCk7CisJCQkJCWluc2VydE5vZGUoZSk7CisJCQkJCWhhbmRsZWQgPSB0cnVlOworCQkJCX0KICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgaWYgKCBo
YXZlRnJhbWVTZXQgKSBicmVhazsKLSAgICAgICAgICAgICAgICBlID0gbmV3IEhUTUxCb2R5RWxl
bWVudEltcGwoZG9jdW1lbnQpOwotICAgICAgICAgICAgICAgIHN0YXJ0Qm9keSgpOwotICAgICAg
ICAgICAgICAgIGluc2VydE5vZGUoZSk7Ci0gICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBJRF9IRUFEOgotICAgICAgICAgICAgLy8gd2UgY2FuIGdldCBoZXJl
IG9ubHkgaWYgdGhlIGVsZW1lbnQgaXMgbm90IGFsbG93ZWQgaW4gaGVhZC4KLSAgICAgICAgICAg
IGlmIChpZCA9PSBJRF9IVE1MKQorICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFtZShI
VE1MTmFtZXM6OmhlYWQoKSkpIHsKKyAgICAgICAgICAgIGlmIChuLT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6aHRtbCgpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAg
ICBlbHNlIHsKICAgICAgICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHRoZSBib2R5IHN0YXJ0cyBo
ZXJlLi4uCi0gICAgICAgICAgICAgICAgaWYgKCBoYXZlRnJhbWVTZXQgKSBicmVhazsKLSAgICAg
ICAgICAgICAgICBwb3BCbG9jayhJRF9IRUFEKTsKLSAgICAgICAgICAgICAgICBlID0gbmV3IEhU
TUxCb2R5RWxlbWVudEltcGwoZG9jdW1lbnQpOwotICAgICAgICAgICAgICAgIHN0YXJ0Qm9keSgp
OwotICAgICAgICAgICAgICAgIGluc2VydE5vZGUoZSk7Ci0gICAgICAgICAgICAgICAgaGFuZGxl
ZCA9IHRydWU7CisgICAgICAgICAgICAgICAgaWYgKCFoYXZlRnJhbWVTZXQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgcG9wQmxvY2soY3VycmVudFRhZ05hbWUpOworICAgICAgICAgICAgICAgICAg
ICBlID0gbmV3IEhUTUxCb2R5RWxlbWVudEltcGwoZG9jdW1lbnQpOworICAgICAgICAgICAgICAg
ICAgICBzdGFydEJvZHkoKTsKKyAgICAgICAgICAgICAgICAgICAgaW5zZXJ0Tm9kZShlKTsKKyAg
ICAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSURfQk9EWToKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElEX0NBUFRJT046CisgICAgICAgIH0gZWxz
ZSBpZiAoaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6Y2FwdGlvbigpKSkgewogICAgICAgICAg
ICAgLy8gSWxsZWdhbCBjb250ZW50IGluIGEgY2FwdGlvbi4gQ2xvc2UgdGhlIGNhcHRpb24gYW5k
IHRyeSBhZ2Fpbi4KLSAgICAgICAgICAgIHBvcEJsb2NrKElEX0NBUFRJT04pOwotICAgICAgICAg
ICAgc3dpdGNoKCBpZCApIHsKLSAgICAgICAgICAgIGNhc2UgSURfVEhFQUQ6Ci0gICAgICAgICAg
ICBjYXNlIElEX1RGT09UOgotICAgICAgICAgICAgY2FzZSBJRF9UQk9EWToKLSAgICAgICAgICAg
IGNhc2UgSURfVFI6Ci0gICAgICAgICAgICBjYXNlIElEX1REOgotICAgICAgICAgICAgY2FzZSBJ
RF9USDoKKyAgICAgICAgICAgIHBvcEJsb2NrKGN1cnJlbnRUYWdOYW1lKTsKKyAgICAgICAgICAg
IGlmIChpc1RhYmxlUGFydChuKSkKICAgICAgICAgICAgICAgICByZXR1cm4gaW5zZXJ0Tm9kZShu
LCBmbGF0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IElEX1RBQkxFOgotICAgICAgICBjYXNlIElEX1RIRUFEOgotICAgICAgICBjYXNlIElEX1RGT09U
OgotICAgICAgICBjYXNlIElEX1RCT0RZOgotICAgICAgICBjYXNlIElEX1RSOgotICAgICAgICAg
ICAgc3dpdGNoKGlkKQotICAgICAgICAgICAgewotICAgICAgICAgICAgY2FzZSBJRF9UQUJMRToK
LSAgICAgICAgICAgICAgICBwb3BCbG9jayhJRF9UQUJMRSk7IC8vIGVuZCB0aGUgdGFibGUKKyAg
ICAgICAgfSBlbHNlIGlmIChoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0YWJsZSgpKSB8fCBo
LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0cigpKSB8fCBpc1RhYmxlU2VjdGlvbihoKSkgewor
ICAgICAgICAgICAgaWYgKG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0YWJsZSgpKSkgeworICAg
ICAgICAgICAgICAgIHBvcEJsb2NrKGxvY2FsTmFtZSk7IC8vIGVuZCB0aGUgdGFibGUKICAgICAg
ICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsgICAgICAvLyAuLi5hbmQgc3RhcnQgYSBuZXcgb25l
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0JICAgIGNhc2UgSURfVEVYVDoKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBUZXh0SW1wbCAqdCA9IHN0YXRpY19jYXN0PFRleHRJbXBsICo+
KG4pOwotICAgICAgICAgICAgICAgIGlmICh0LT5jb250YWluc09ubHlXaGl0ZXNwYWNlKCkpCi0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICBET01TdHJp
bmdJbXBsICppID0gdC0+c3RyaW5nKCk7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHBv
cyA9IDA7Ci0gICAgICAgICAgICAgICAgd2hpbGUocG9zIDwgaS0+bCAmJiAoICooaS0+cytwb3Mp
ID09IFFDaGFyKCcgJykgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KihpLT5zK3BvcykgPT0gUUNoYXIoMHhhMCkpKSBwb3MrKzsKLSAgICAgICAgICAgICAgICBpZihw
b3MgPT0gaS0+bCkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIE5vZGVJ
bXBsICpub2RlID0gY3VycmVudDsKLSAgICAgICAgICAgICAgICBOb2RlSW1wbCAqcGFyZW50ID0g
bm9kZS0+cGFyZW50Tm9kZSgpOwotCi0gICAgICAgICAgICAgICAgTm9kZUltcGwgKnBhcmVudHBh
cmVudCA9IHBhcmVudC0+cGFyZW50Tm9kZSgpOwotCi0gICAgICAgICAgICAgICAgaWYgKG4tPmlz
VGV4dE5vZGUoKSB8fAotICAgICAgICAgICAgICAgICAgICAoIG5vZGUtPmlkKCkgPT0gSURfVFIg
JiYKLSAgICAgICAgICAgICAgICAgICAgICggcGFyZW50LT5pZCgpID09IElEX1RIRUFEIHx8Ci0g
ICAgICAgICAgICAgICAgICAgICAgcGFyZW50LT5pZCgpID09IElEX1RCT0RZIHx8Ci0gICAgICAg
ICAgICAgICAgICAgICAgcGFyZW50LT5pZCgpID09IElEX1RGT09UICkgJiYgcGFyZW50cGFyZW50
LT5pZCgpID09IElEX1RBQkxFICkgfHwKLSAgICAgICAgICAgICAgICAgICAgKCAhY2hlY2tDaGls
ZChJRF9UUiwgaWQsICFkb2MoKS0+aW5Db21wYXRNb2RlKCkpICYmICggbm9kZS0+aWQoKSA9PSBJ
RF9USEVBRCB8fCBub2RlLT5pZCgpID09IElEX1RCT0RZIHx8IG5vZGUtPmlkKCkgPT0gSURfVEZP
T1QgKSAmJgotICAgICAgICAgICAgICAgICAgICAgcGFyZW50LT5pZCgpID09IElEX1RBQkxFICkp
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBub2RlID0gKG5vZGUtPmlk
KCkgPT0gSURfVEFCTEUpID8gbm9kZSA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKChu
b2RlLT5pZCgpID09IElEX1RSKSA/IHBhcmVudHBhcmVudCA6IHBhcmVudCk7CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGJvb2wgcG9zc2libHlNb3ZlU3RyYXlDb250ZW50
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBpbnQgZXhjZXB0aW9uQ29kZSA9IDA7CisgICAgICAg
ICAgICAgICAgaWYgKG4tPmlzVGV4dE5vZGUoKSkgeworICAgICAgICAgICAgICAgICAgICBUZXh0
SW1wbCAqdCA9IHN0YXRpY19jYXN0PFRleHRJbXBsICo+KG4pOworICAgICAgICAgICAgICAgICAg
ICBpZiAodC0+Y29udGFpbnNPbmx5V2hpdGVzcGFjZSgpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICBET01TdHJpbmdJbXBsICppID0g
dC0+c3RyaW5nKCk7CisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBwb3MgPSAwOwor
ICAgICAgICAgICAgICAgICAgICB3aGlsZSAocG9zIDwgaS0+bCAmJiAoKihpLT5zK3BvcykgPT0g
UUNoYXIoJyAnKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KihpLT5zK3BvcykgPT0gUUNoYXIoMHhhMCkpKSBwb3MrKzsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKHBvcyA9PSBpLT5sKQorICAgICAgICAgICAgICAgICAgICAgICAgcG9zc2libHlNb3ZlU3Ry
YXlDb250ZW50ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlm
IChwb3NzaWJseU1vdmVTdHJheUNvbnRlbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgTm9kZUlt
cGwgKm5vZGUgPSBjdXJyZW50OwogICAgICAgICAgICAgICAgICAgICBOb2RlSW1wbCAqcGFyZW50
ID0gbm9kZS0+cGFyZW50Tm9kZSgpOwotICAgICAgICAgICAgICAgICAgICBpbnQgZXhjZXB0aW9u
Y29kZSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIHBhcmVudC0+aW5zZXJ0QmVmb3JlKCBuLCBu
b2RlLCBleGNlcHRpb25jb2RlICk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICggZXhjZXB0aW9u
Y29kZSApIHsKLSNpZmRlZiBQQVJTRVJfREVCVUcKLSAgICAgICAgICAgICAgICAgICAgICAgIGtk
RGVidWcoIDYwMzUgKSA8PCAiYWRkaW5nIGNvbnRlbnQgYmVmb3JlIHRhYmxlIGZhaWxlZCEiIDw8
IGVuZGw7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICBOb2RlSW1wbCAqZ3JhbmRwYXJlbnQgPSBwYXJlbnQtPnBhcmVudE5vZGUoKTsK
KworICAgICAgICAgICAgICAgICAgICBpZiAobi0+aXNUZXh0Tm9kZSgpIHx8CisgICAgICAgICAg
ICAgICAgICAgICAgICAoaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dHIoKSkgJiYKKyAgICAg
ICAgICAgICAgICAgICAgICAgICBpc1RhYmxlU2VjdGlvbihwYXJlbnQpICYmIGdyYW5kcGFyZW50
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGFibGUoKSkpIHx8CisgICAgICAgICAgICAgICAgICAg
ICAgICAgKCghbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRkKCkpICYmICFuLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6dGgoKSkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICFuLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6Zm9ybSgpKSAmJiAhbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnNj
cmlwdCgpKSkgJiYgaXNUYWJsZVNlY3Rpb24obm9kZSkgJiYKKyAgICAgICAgICAgICAgICAgICAg
ICAgICBwYXJlbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0YWJsZSgpKSkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG5vZGUgPSAobm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRhYmxl
KCkpKSA/IG5vZGUgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKG5vZGUtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjp0cigpKSkgPyBncmFuZHBhcmVudCA6IHBhcmVudCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBOb2RlSW1wbCAqcGFyZW50ID0gbm9kZS0+cGFyZW50Tm9kZSgp
OworICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50LT5pbnNlcnRCZWZvcmUobiwgbm9kZSwg
ZXhjZXB0aW9uQ29kZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWV4Y2VwdGlvbkNv
ZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobi0+aXNIVE1MRWxlbWVudCgp
ICYmIHRhZ1ByaW9yaXR5ID4gMCAmJiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IWZsYXQgJiYgc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsKj4obiktPmVuZFRhZ1JlcXVpcmVt
ZW50KCkgIT0gVGFnU3RhdHVzRm9yYmlkZGVuKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaEJsb2NrKGxvY2FsTmFtZSwg
dGFnUHJpb3JpdHkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDdXJyZW50
KG4pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpblN0cmF5VGFibGVDb250ZW50
Kys7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrU3RhY2stPnN0cmF5VGFi
bGVDb250ZW50ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKG4tPmlz
RWxlbWVudE5vZGUoKSAmJiB0YWdQcmlvcml0eShpZCkgIT0gMCAmJiAKLSAgICAgICAgICAgICAg
ICAgICAgICAgICFmbGF0ICYmIGVuZFRhZ1JlcXVpcmVtZW50KGlkKSAhPSBET006OkZPUkJJRERF
TikKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcHVzaEJs
b2NrKGlkLCB0YWdQcmlvcml0eShpZCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q3Vy
cmVudChuKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGluU3RyYXlUYWJsZUNvbnRlbnQrKzsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrU3RhY2stPnN0cmF5VGFibGVDb250ZW50ID0g
dHJ1ZTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoIWV4Y2VwdGlvbkNvZGUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dHIo
KSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZSA9IG5ldyBIVE1MVGFibGVDZWxsRWxl
bWVudEltcGwoSFRNTE5hbWVzOjp0ZCgpLCBkb2N1bWVudCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBlbHNlIGlmIChjdXJyZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGFibGUoKSkpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZSA9IG5ldyBIVE1MVGFibGVTZWN0aW9uRWxlbWVu
dEltcGwoSFRNTE5hbWVzOjp0Ym9keSgpLCBkb2N1bWVudCwgdHJ1ZSk7IC8vIGltcGxpY2l0IAor
ICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGUgPSBuZXcgSFRNTFRhYmxlUm93RWxlbWVudEltcGwoZG9jdW1lbnQpOworICAgICAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnROb2RlKGUpOworICAg
ICAgICAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgaWYgKCBjdXJyZW50LT5pZCgpID09IElEX1RSICkKLSAgICAgICAg
ICAgICAgICAgICAgZSA9IG5ldyBIVE1MVGFibGVDZWxsRWxlbWVudEltcGwoZG9jdW1lbnQsIElE
X1REKTsKLSAgICAgICAgICAgICAgICBlbHNlIGlmICggY3VycmVudC0+aWQoKSA9PSBJRF9UQUJM
RSApCi0gICAgICAgICAgICAgICAgICAgIGUgPSBuZXcgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJ
bXBsKCBkb2N1bWVudCwgSURfVEJPRFksIHRydWUgLyogaW1wbGljaXQgKi8gKTsKLSAgICAgICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGUgPSBuZXcgSFRNTFRhYmxlUm93RWxl
bWVudEltcGwoIGRvY3VtZW50ICk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
aW5zZXJ0Tm9kZShlKTsKLSAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0gLy8gZW5kIGRlZmF1bHQKLSAgICAgICAgICAg
IH0gLy8gZW5kIHN3aXRjaAotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSURfT0JK
RUNUOgotICAgICAgICAgICAgZGlzY2FyZF91bnRpbCA9IElEX09CSkVDVCArIElEX0NMT1NFX1RB
RzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChoLT5oYXNMb2Nh
bE5hbWUoSFRNTE5hbWVzOjpvYmplY3QoKSkpIHsKKyAgICAgICAgICAgIHNldFNraXBNb2RlKEhU
TUxOYW1lczo6b2JqZWN0KCkpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBj
YXNlIElEX1VMOgotICAgICAgICBjYXNlIElEX09MOgotICAgICAgICBjYXNlIElEX0RJUjoKLSAg
ICAgICAgY2FzZSBJRF9NRU5VOgorICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFtZShI
VE1MTmFtZXM6OnVsKCkpIHx8IGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9sKCkpIHx8Cisg
ICAgICAgICAgICAgICAgIGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmRpcigpKSB8fCBoLT5o
YXNMb2NhbE5hbWUoSFRNTE5hbWVzOjptZW51KCkpKSB7CiAgICAgICAgICAgICBlID0gbmV3IEhU
TUxEaXZFbGVtZW50SW1wbChkb2N1bWVudCk7CiAgICAgICAgICAgICBpbnNlcnROb2RlKGUpOwog
ICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIGNhc2UgSURfREw6Ci0gICAgICAgICAgICAgICAgcG9wQmxvY2soSURfREwpOwotICAgICAg
ICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgY2FzZSBJRF9EVDoKLSAgICAgICAgICAgICAgICBwb3BCbG9jayhJRF9EVCk7Ci0gICAg
ICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgSURfU0VMRUNUOgotICAgICAgICAgICAgaWYoIG4tPmlzSW5saW5lKCkgKQorICAg
ICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmRsKCkpIHx8IGgtPmhh
c0xvY2FsTmFtZShIVE1MTmFtZXM6OmR0KCkpKSB7CisgICAgICAgICAgICBwb3BCbG9jayhjdXJy
ZW50VGFnTmFtZSk7CisgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNl
IGlmIChoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpzZWxlY3QoKSkpIHsKKyAgICAgICAgICAg
IGlmIChpc0lubGluZShuKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJRF9QOgotICAgICAgICBjYXNlIElEX0gxOgotICAg
ICAgICBjYXNlIElEX0gyOgotICAgICAgICBjYXNlIElEX0gzOgotICAgICAgICBjYXNlIElEX0g0
OgotICAgICAgICBjYXNlIElEX0g1OgotICAgICAgICBjYXNlIElEX0g2OgotICAgICAgICAgICAg
aWYoIW4tPmlzSW5saW5lKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcG9wQmxv
Y2soY3VycmVudC0+aWQoKSk7CisgICAgICAgIH0gZWxzZSBpZiAoaC0+aGFzTG9jYWxOYW1lKEhU
TUxOYW1lczo6cCgpKSB8fCBpc0hlYWRlclRhZyhjdXJyZW50VGFnTmFtZSkpIHsKKyAgICAgICAg
ICAgIGlmICghaXNJbmxpbmUobikpIHsKKyAgICAgICAgICAgICAgICBwb3BCbG9jayhjdXJyZW50
VGFnTmFtZSk7CiAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7CiAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJRF9PUFRJT046Ci0gICAgICAgIGNh
c2UgSURfT1BUR1JPVVA6Ci0gICAgICAgICAgICBpZiAoaWQgPT0gSURfT1BUR1JPVVApCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcG9wQmxvY2soY3VycmVudC0+aWQoKSk7CisgICAg
ICAgIH0gZWxzZSBpZiAoaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpIHx8IGgt
Pmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9wdGdyb3VwKCkpKSB7CisgICAgICAgICAgICBpZiAo
bG9jYWxOYW1lID09IEhUTUxOYW1lczo6b3B0Z3JvdXAoKSkgeworICAgICAgICAgICAgICAgIHBv
cEJsb2NrKGN1cnJlbnRUYWdOYW1lKTsKICAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYoaWQgPT0gSURfU0VMRUNUKQotICAg
ICAgICAgICAgeworICAgICAgICAgICAgZWxzZSBpZiAobG9jYWxOYW1lID09IEhUTUxOYW1lczo6
c2VsZWN0KCkpIHsKICAgICAgICAgICAgICAgICAvLyBJRSB0cmVhdHMgYSBuZXN0ZWQgc2VsZWN0
IGFzIDwvc2VsZWN0Pi4gTGV0J3MgZG8gdGhlIHNhbWUKLSAgICAgICAgICAgICAgICBwb3BCbG9j
ayggSURfU0VMRUNUICk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
cG9wQmxvY2sobG9jYWxOYW1lKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgLy8gaGVhZCBlbGVtZW50cyBpbiB0aGUgYm9keSBzaG91bGQgYmUgaWdub3Jl
ZC4KLSAgICAgICAgY2FzZSBJRF9BRERSRVNTOgotICAgICAgICAgICAgcG9wQmxvY2soSURfQURE
UkVTUyk7CisgICAgICAgIH0gZWxzZSBpZiAoaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6YWRk
cmVzcygpKSkgeworICAgICAgICAgICAgcG9wQmxvY2soY3VycmVudFRhZ05hbWUpOwogICAgICAg
ICAgICAgaGFuZGxlZCA9IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJ
RF9DT0xHUk9VUDoKLSAgICAgICAgICAgIGlmIChpZCAhPSBJRF9URVhUKSB7Ci0gICAgICAgICAg
ICAgICAgcG9wQmxvY2soSURfQ09MR1JPVVApOworICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xv
Y2FsTmFtZShIVE1MTmFtZXM6OmNvbGdyb3VwKCkpKSB7CisgICAgICAgICAgICBpZiAoIW4tPmlz
VGV4dE5vZGUoKSkgeworICAgICAgICAgICAgICAgIHBvcEJsb2NrKGN1cnJlbnRUYWdOYW1lKTsK
ICAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIElEX0ZPTlQ6Ci0gICAgICAgICAgICBwb3BCbG9jayhJ
RF9GT05UKTsKKyAgICAgICAgfSBlbHNlIGlmIChoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpm
b250KCkpKSB7CisgICAgICAgICAgICBwb3BCbG9jayhjdXJyZW50VGFnTmFtZSk7CiAgICAgICAg
ICAgICBoYW5kbGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgaWYoY3VycmVudC0+aXNEb2N1bWVudE5vZGUoKSkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBpZihjdXJyZW50LT5maXJzdENoaWxkKCkgPT0gMCkgewotICAg
ICAgICAgICAgICAgICAgICBlID0gbmV3IEhUTUxIdG1sRWxlbWVudEltcGwoZG9jdW1lbnQpOwot
ICAgICAgICAgICAgICAgICAgICBpbnNlcnROb2RlKGUpOwotICAgICAgICAgICAgICAgICAgICBo
YW5kbGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBlbHNlIGlmKGN1cnJlbnQtPmlzSW5saW5lKCkpCi0gICAgICAgICAgICB7CisgICAgICAg
IH0gZWxzZSBpZiAoIWgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmJvZHkoKSkpIHsKKyAgICAg
ICAgICAgIGlmIChpc0lubGluZShjdXJyZW50KSkgewogICAgICAgICAgICAgICAgIHBvcElubGlu
ZUJsb2NrcygpOwogICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwogICAgICAgICAgICAg
fQogICAgICAgICB9Ci0KLSAgICAgICAgLy8gaWYgd2UgY291bGRuJ3QgaGFuZGxlIHRoZSBlcnJv
ciwganVzdCByZXRocm93IHRoZSBleGNlcHRpb24uLi4KLSAgICAgICAgaWYoIWhhbmRsZWQpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIC8va2REZWJ1ZyggNjAzNSApIDw8ICJFeGNlcHRpb24gaGFu
ZGxlciBmYWlsZWQgaW4gSFRNTFBBcnNlcjo6aW5zZXJ0Tm9kZSgpIiA8PCBlbmRsOwotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBlbHNlIGlmIChjdXJyZW50LT5pc0RvY3Vt
ZW50Tm9kZSgpKSB7CisgICAgICAgIGlmIChjdXJyZW50LT5maXJzdENoaWxkKCkgPT0gMCkgewor
ICAgICAgICAgICAgZSA9IG5ldyBIVE1MSHRtbEVsZW1lbnRJbXBsKGRvY3VtZW50KTsKKyAgICAg
ICAgICAgIGluc2VydE5vZGUoZSk7CisgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKICAgICAg
ICAgfQotCi0gICAgICAgIHJldHVybiBpbnNlcnROb2RlKG4pOwogICAgIH0KKworICAgIC8vIDMu
IElmIHdlIGNvdWxkbid0IGhhbmRsZSB0aGUgZXJyb3IsIGp1c3QgcmV0dXJuIGZhbHNlIGFuZCBh
dHRlbXB0IHRvIGVycm9yLWNvcnJlY3QgYWdhaW4uCisgICAgaWYgKCFoYW5kbGVkKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGluc2VydE5vZGUobik7CiB9CiAKLU5vZGVJbXBs
ICpLSFRNTFBhcnNlcjo6Z2V0RWxlbWVudChUb2tlbiogdCkKK05vZGVJbXBsICpIVE1MUGFyc2Vy
OjpnZXROb2RlKFRva2VuKiB0KQogewotICAgIHN3aXRjaCAodC0+aWQpCi0gICAgewotICAgIGNh
c2UgSURfSEVBRDoKLSAgICAgICAgaWYgKCFoZWFkICYmIGN1cnJlbnQtPmlkKCkgPT0gSURfSFRN
TCkgewotICAgICAgICAgICAgaGVhZCA9IG5ldyBIVE1MSGVhZEVsZW1lbnRJbXBsKGRvY3VtZW50
KTsKLSAgICAgICAgICAgIHJldHVybiBoZWFkOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAw
OwotICAgIGNhc2UgSURfQk9EWToKKyAgICAvLyBIYW5kbGUgbm9uLWVsZW1lbnRzIGZpcnN0Lgor
ICAgIGlmICh0LT50YWdOYW1lID09IHRleHRBdG9tKQorICAgICAgICByZXR1cm4gbmV3IFRleHRJ
bXBsKGRvY3VtZW50LCB0LT50ZXh0KTsKKyAgICBpZiAodC0+dGFnTmFtZSA9PSBjb21tZW50QXRv
bSkgeworICAgICAgICBpZiAoIWluY2x1ZGVzQ29tbWVudHNJbkRPTSkKKyAgICAgICAgICAgIHJl
dHVybiAwOworICAgICAgICByZXR1cm4gbmV3IENvbW1lbnRJbXBsKGRvY3VtZW50LCB0LT50ZXh0
KTsKKyAgICB9CisKKyAgICAvLyBOb3cgaGFuZGxlIGVsZW1lbnRzLgorICAgIGlmICh0LT50YWdO
YW1lID09IEhUTUxOYW1lczo6aGVhZCgpKSB7CisgICAgICAgIGlmIChoZWFkIHx8IGN1cnJlbnQt
PmxvY2FsTmFtZSgpICE9IEhUTUxOYW1lczo6aHRtbCgpKQorICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgfSBlbHNlIGlmICh0LT50YWdOYW1lID09IEhUTUxOYW1lczo6Ym9keSgpKSB7CiAgICAg
ICAgIC8vIGJvZHkgbm8gbG9uZ2VyIGFsbG93ZWQgaWYgd2UgaGF2ZSBhIGZyYW1lc2V0CiAgICAg
ICAgIGlmIChoYXZlRnJhbWVTZXQpCiAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgcG9w
QmxvY2soSURfSEVBRCk7CisgICAgICAgIHBvcEJsb2NrKEhUTUxOYW1lczo6aGVhZCgpKTsKICAg
ICAgICAgc3RhcnRCb2R5KCk7Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTEJvZHlFbGVtZW50SW1w
bChkb2N1bWVudCk7CisgICAgfQogCiAvLyBmcmFtZXMKLSAgICBjYXNlIElEX0ZSQU1FU0VUOgot
ICAgICAgICBwb3BCbG9jayhJRF9IRUFEKTsKKyAgICBlbHNlIGlmICh0LT50YWdOYW1lID09IEhU
TUxOYW1lczo6ZnJhbWVzZXQoKSkgeworICAgICAgICBwb3BCbG9jayhIVE1MTmFtZXM6OmhlYWQo
KSk7CiAgICAgICAgIGlmIChpbkJvZHkgJiYgIWhhdmVGcmFtZVNldCAmJiAhaGF2ZUNvbnRlbnQp
IHsKLSAgICAgICAgICAgIHBvcEJsb2NrKElEX0JPRFkpOworICAgICAgICAgICAgcG9wQmxvY2so
SFRNTE5hbWVzOjpib2R5KCkpOwogICAgICAgICAgICAgLy8gIyMjIGFjdHVhbGx5IGZvciBJRSBk
b2N1bWVudC5ib2R5IHJldHVybnMgdGhlIG5vdyBoaWRkZW4gImJvZHkiIGVsZW1lbnQKICAgICAg
ICAgICAgIC8vIHdlIGNhbid0IGltcGxlbWVudCB0aGF0IGJlaGF2aW91ciBub3cgYmVjYXVzZSBp
dCBjb3VsZCBjYXVzZSB0b28gbWFueQogICAgICAgICAgICAgLy8gcmVncmVzc2lvbnMgYW5kIHRo
ZSBoZWFkYWNoZXMgYXJlIG5vdCB3b3J0aCB0aGUgd29yayBhcyBsb25nIGFzIHRoZXJlIGlzCkBA
IC04MTEsMzIgKzY0NCwyMSBAQCBOb2RlSW1wbCAqS0hUTUxQYXJzZXI6OmdldEVsZW1lbnQoVG9r
ZW4qCiAgICAgICAgICAgICAgICAgZG9jKCktPmJvZHkoKS0+c2V0QXR0cmlidXRlKEFUVFJfU1RZ
TEUsICJkaXNwbGF5Om5vbmUiKTsKICAgICAgICAgICAgIGluQm9keSA9IGZhbHNlOwogICAgICAg
ICB9Ci0gICAgICAgIGlmICgoaGF2ZUNvbnRlbnQgfHwgaGF2ZUZyYW1lU2V0KSAmJiBjdXJyZW50
LT5pZCgpID09IElEX0hUTUwpCisgICAgICAgIGlmICgoaGF2ZUNvbnRlbnQgfHwgaGF2ZUZyYW1l
U2V0KSAmJiBjdXJyZW50LT5sb2NhbE5hbWUoKSA9PSBIVE1MTmFtZXM6Omh0bWwoKSkKICAgICAg
ICAgICAgIHJldHVybiAwOwogICAgICAgICBoYXZlRnJhbWVTZXQgPSB0cnVlOwogICAgICAgICBz
dGFydEJvZHkoKTsKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MRnJhbWVTZXRFbGVtZW50SW1wbChk
b2N1bWVudCk7Ci0KLSAgICAvLyBhIGJpdCBvZiBhIHNwZWNpYWwgY2FzZSwgc2luY2UgdGhlIGZy
YW1lIGlzIGlubGluZWQKLSAgICBjYXNlIElEX0lGUkFNRToKLSAgICAgICAgZGlzY2FyZF91bnRp
bCA9IElEX0lGUkFNRSArIElEX0NMT1NFX1RBRzsKLSAgICAgICAgYnJlYWs7Ci0KKyAgICB9IGVs
c2UgaWYgKHQtPnRhZ05hbWUgPT0gSFRNTE5hbWVzOjppZnJhbWUoKSkKKyAgICAgICAgLy8gYSBi
aXQgb2YgYSBzcGVjaWFsIGNhc2UsIHNpbmNlIHRoZSBmcmFtZSBpcyBpbmxpbmVkCisgICAgICAg
IHNldFNraXBNb2RlKEhUTUxOYW1lczo6aWZyYW1lKCkpOworICAgICAgICAKIC8vIGZvcm0gZWxl
bWVudHMKLSAgICBjYXNlIElEX0ZPUk06CisgICAgZWxzZSBpZiAodC0+dGFnTmFtZSA9PSBIVE1M
TmFtZXM6OmZvcm0oKSkgewogICAgICAgICAvLyBPbmx5IGNyZWF0ZSBhIG5ldyBmb3JtIGlmIHdl
J3JlIG5vdCBhbHJlYWR5IGluc2lkZSBvbmUuCiAgICAgICAgIC8vIFRoaXMgaXMgY29uc2lzdGVu
dCB3aXRoIG90aGVyIGJyb3dzZXJzJyBiZWhhdmlvci4KICAgICAgICAgaWYgKGZvcm0pCiAgICAg
ICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgZm9ybSA9IG5ldyBIVE1MRm9ybUVsZW1lbnRJbXBs
KGRvY3VtZW50KTsKLSAgICAgICAgcmV0dXJuIGZvcm07Ci0gICAgY2FzZSBJRF9CVVRUT046Ci0g
ICAgICAgIHJldHVybiBuZXcgSFRNTEJ1dHRvbkVsZW1lbnRJbXBsKGRvY3VtZW50LCBmb3JtKTsK
LSAgICBjYXNlIElEX0ZJRUxEU0VUOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxGaWVsZFNldEVs
ZW1lbnRJbXBsKGRvY3VtZW50LCBmb3JtKTsKLSAgICBjYXNlIElEX0lOUFVUOgotICAgICAgICBy
ZXR1cm4gbmV3IEhUTUxJbnB1dEVsZW1lbnRJbXBsKGRvY3VtZW50LCBmb3JtKTsKLSAgICBjYXNl
IElEX0lTSU5ERVg6IHsKKyAgICB9IGVsc2UgaWYgKHQtPnRhZ05hbWUgPT0gSFRNTE5hbWVzOjpp
c2luZGV4KCkpIHsKICAgICAgICAgTm9kZUltcGwgKm4gPSBoYW5kbGVJc2luZGV4KHQpOwogICAg
ICAgICBpZiAoIWluQm9keSkgewogICAgICAgICAgICAgaWYgKGlzaW5kZXgpCkBAIC04NDgsMjYy
ICs2NzAsMTgyIEBAIE5vZGVJbXBsICpLSFRNTFBhcnNlcjo6Z2V0RWxlbWVudChUb2tlbioKICAg
ICAgICAgdC0+ZmxhdCA9IHRydWU7CiAgICAgICAgIHJldHVybiBuOwogICAgIH0KLSAgICBjYXNl
IElEX0tFWUdFTjoKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MS2V5Z2VuRWxlbWVudEltcGwoZG9j
dW1lbnQsIGZvcm0pOwotICAgIGNhc2UgSURfTEVHRU5EOgotICAgICAgICByZXR1cm4gbmV3IEhU
TUxMZWdlbmRFbGVtZW50SW1wbChkb2N1bWVudCwgZm9ybSk7Ci0gICAgY2FzZSBJRF9PUFRHUk9V
UDoKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MT3B0R3JvdXBFbGVtZW50SW1wbChkb2N1bWVudCwg
Zm9ybSk7Ci0gICAgY2FzZSBJRF9PUFRJT046Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTE9wdGlv
bkVsZW1lbnRJbXBsKGRvY3VtZW50LCBmb3JtKTsKLSAgICBjYXNlIElEX1NFTEVDVDoKKyAgICBl
bHNlIGlmICh0LT50YWdOYW1lID09IEhUTUxOYW1lczo6c2VsZWN0KCkpCiAgICAgICAgIGluU2Vs
ZWN0ID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MU2VsZWN0RWxlbWVudEltcGwoZG9j
dW1lbnQsIGZvcm0pOwotICAgIGNhc2UgSURfVEVYVEFSRUE6Ci0gICAgICAgIHJldHVybiBuZXcg
SFRNTFRleHRBcmVhRWxlbWVudEltcGwoZG9jdW1lbnQsIGZvcm0pOwogCiAvLyBsaXN0cwotICAg
IGNhc2UgSURfREQ6Ci0gICAgICAgIHBvcEJsb2NrKElEX0RUKTsKLSAgICAgICAgcG9wQmxvY2so
SURfREQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIElEX0RUOgotICAgICAgICBwb3BCbG9j
ayhJRF9ERCk7Ci0gICAgICAgIHBvcEJsb2NrKElEX0RUKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBJRF9MSToKLSAgICAgICAgcG9wQmxvY2soSURfTEkpOwotICAgICAgICBicmVhazsKLQot
Ly8gYW5jaG9yCi0gICAgY2FzZSBJRF9BOgorICAgIGVsc2UgaWYgKHQtPnRhZ05hbWUgPT0gSFRN
TE5hbWVzOjpkZCgpKSB7CisgICAgICAgIHBvcEJsb2NrKEhUTUxOYW1lczo6ZHQoKSk7CisgICAg
ICAgIHBvcEJsb2NrKEhUTUxOYW1lczo6ZGQoKSk7CisgICAgfQorICAgIGVsc2UgaWYgKHQtPnRh
Z05hbWUgPT0gSFRNTE5hbWVzOjpkdCgpKSB7CisgICAgICAgIHBvcEJsb2NrKEhUTUxOYW1lczo6
ZGQoKSk7CisgICAgICAgIHBvcEJsb2NrKEhUTUxOYW1lczo6ZHQoKSk7CisgICAgfQorICAgIGVs
c2UgaWYgKHQtPnRhZ05hbWUgPT0gSFRNTE5hbWVzOjpsaSgpKQorICAgICAgICBwb3BCbG9jayh0
LT50YWdOYW1lKTsKKyAgICBlbHNlIGlmICh0LT50YWdOYW1lID09IEhUTUxOYW1lczo6YSgpKSAv
LyBhbmNob3IKICAgICAgICAgLy8gTmV2ZXIgYWxsb3cgbmVzdGVkIDxhPnMuCi0gICAgICAgIHBv
cEJsb2NrKElEX0EpOwotICAgICAgICBicmVhazsKLQotLy8gaW1hZ2VzCi0gICAgY2FzZSBJRF9J
TUc6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTEltYWdlRWxlbWVudEltcGwoZG9jdW1lbnQsIGZv
cm0pOwotICAgIGNhc2UgSURfTUFQOgotICAgICAgICBtYXAgPSBuZXcgSFRNTE1hcEVsZW1lbnRJ
bXBsKGRvY3VtZW50KTsKLSAgICAgICAgcmV0dXJuIG1hcDsKKyAgICAgICAgcG9wQmxvY2sodC0+
dGFnTmFtZSk7CiAKIC8vIHRhYmxlcwotICAgIGNhc2UgSURfVFI6Ci0gICAgICAgIHBvcEJsb2Nr
KElEX1RSKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9URDoKLSAgICBjYXNlIElEX1RI
OgotICAgICAgICBwb3BCbG9jayhJRF9USCk7Ci0gICAgICAgIHBvcEJsb2NrKElEX1REKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9UQk9EWToKLSAgICBjYXNlIElEX1RIRUFEOgotICAg
IGNhc2UgSURfVEZPT1Q6Ci0gICAgICAgIHBvcEJsb2NrKElEX1RIRUFEKTsKLSAgICAgICAgcG9w
QmxvY2soSURfVEJPRFkpOwotICAgICAgICBwb3BCbG9jayhJRF9URk9PVCk7Ci0gICAgICAgIGJy
ZWFrOworICAgIGVsc2UgaWYgKHQtPnRhZ05hbWUgPT0gSFRNTE5hbWVzOjp0cigpKQorICAgICAg
ICBwb3BCbG9jayh0LT50YWdOYW1lKTsKKyAgICBlbHNlIGlmICh0LT50YWdOYW1lID09IEhUTUxO
YW1lczo6dGQoKSB8fCB0LT50YWdOYW1lID09IEhUTUxOYW1lczo6dGgoKSkgeworICAgICAgICBw
b3BCbG9jayhIVE1MTmFtZXM6OnRoKCkpOworICAgICAgICBwb3BCbG9jayhIVE1MTmFtZXM6OnRk
KCkpOworICAgIH0gZWxzZSBpZiAodC0+dGFnTmFtZSA9PSBIVE1MTmFtZXM6OnRib2R5KCkgfHwg
dC0+dGFnTmFtZSA9PSBIVE1MTmFtZXM6OnRoZWFkKCkgfHwgdC0+dGFnTmFtZSA9PSBIVE1MTmFt
ZXM6OnRmb290KCkpIHsKKyAgICAgICAgcG9wQmxvY2soSFRNTE5hbWVzOjp0aGVhZCgpKTsKKyAg
ICAgICAgcG9wQmxvY2soSFRNTE5hbWVzOjp0Ym9keSgpKTsKKyAgICAgICAgcG9wQmxvY2soSFRN
TE5hbWVzOjp0Zm9vdCgpKTsKKyAgICB9CiAKIC8vIGVsZW1lbnRzIHdpdGggbm8gc3BlY2lhbCBy
ZXByZXNlbnRhdGlvbiBpbiB0aGUgRE9NCi0gICAgY2FzZSBJRF9UVDoKLSAgICBjYXNlIElEX1U6
Ci0gICAgY2FzZSBJRF9COgotICAgIGNhc2UgSURfSToKLSAgICBjYXNlIElEX1M6Ci0gICAgY2Fz
ZSBJRF9TVFJJS0U6Ci0gICAgY2FzZSBJRF9CSUc6Ci0gICAgY2FzZSBJRF9TTUFMTDoKLSAgICAg
ICAgaWYgKCFhbGxvd05lc3RlZFJlZHVuZGFudFRhZyh0LT5pZCkpCisgICAgZWxzZSBpZiAodC0+
dGFnTmFtZSA9PSBIVE1MTmFtZXM6OnR0KCkgfHwgdC0+dGFnTmFtZSA9PSBIVE1MTmFtZXM6OnUo
KSB8fCB0LT50YWdOYW1lID09IEhUTUxOYW1lczo6YigpIHx8CisgICAgICAgICAgICAgdC0+dGFn
TmFtZSA9PSBIVE1MTmFtZXM6OmkoKSB8fCB0LT50YWdOYW1lID09IEhUTUxOYW1lczo6cygpIHx8
IHQtPnRhZ05hbWUgPT0gSFRNTE5hbWVzOjpzdHJpa2UoKSB8fAorICAgICAgICAgICAgIHQtPnRh
Z05hbWUgPT0gSFRNTE5hbWVzOjpiaWcoKSB8fCB0LT50YWdOYW1lID09IEhUTUxOYW1lczo6c21h
bGwoKSkgeworICAgICAgICBpZiAoIWFsbG93TmVzdGVkUmVkdW5kYW50VGFnKHQtPnRhZ05hbWUp
KQogICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBJRF9O
T0JSOgotICAgIGNhc2UgSURfV0JSOgotICAgICAgICBwb3BCbG9jayh0LT5pZCk7IC8vIERvbid0
IGFsbG93IG5lc3RlZCA8bm9icj4gb3IgPHdicj4KLSAgICAgICAgYnJlYWs7CisgICAgfQorICAg
IGVsc2UgaWYgKHQtPnRhZ05hbWUgPT0gSFRNTE5hbWVzOjpub2JyKCkgfHwgdC0+dGFnTmFtZSA9
PSBIVE1MTmFtZXM6OndicigpKQorICAgICAgICBwb3BCbG9jayh0LT50YWdOYW1lKTsgLy8gRG9u
J3QgYWxsb3cgbmVzdGVkIDxub2JyPiBvciA8d2JyPgogCiAvLyB0aGVzZSBhcmUgc3BlY2lhbCwg
YW5kIG5vcm1hbGx5IG5vdCByZW5kZXJlZAotICAgIGNhc2UgSURfTk9FTUJFRDoKLSAgICAgICAg
ZGlzY2FyZF91bnRpbCA9IElEX05PRU1CRUQgKyBJRF9DTE9TRV9UQUc7CisgICAgZWxzZSBpZiAo
dC0+dGFnTmFtZSA9PSBIVE1MTmFtZXM6Om5vZW1iZWQoKSkgeworICAgICAgICBzZXRTa2lwTW9k
ZShIVE1MTmFtZXM6Om5vZW1iZWQoKSk7CiAgICAgICAgIHJldHVybiAwOwotICAgIGNhc2UgSURf
Tk9GUkFNRVM6Ci0gICAgICAgIGRpc2NhcmRfdW50aWwgPSBJRF9OT0ZSQU1FUyArIElEX0NMT1NF
X1RBRzsKKyAgICB9CisgICAgZWxzZSBpZiAodC0+dGFnTmFtZSA9PSBIVE1MTmFtZXM6Om5vZnJh
bWVzKCkpIHsKKyAgICAgICAgc2V0U2tpcE1vZGUoSFRNTE5hbWVzOjpub2ZyYW1lcygpKTsKICAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgY2FzZSBJRF9OT1NDUklQVDoKKyAgICB9CisgICAgZWxzZSBp
ZiAodC0+dGFnTmFtZSA9PSBIVE1MTmFtZXM6Om5vc2NyaXB0KCkpIHsKICAgICAgICAgaWYgKEhU
TUxXaWRnZXQgJiYgSFRNTFdpZGdldC0+cGFydCgpLT5qU2NyaXB0RW5hYmxlZCgpKQotICAgICAg
ICAgICAgZGlzY2FyZF91bnRpbCA9IElEX05PU0NSSVBUICsgSURfQ0xPU0VfVEFHOworICAgICAg
ICAgICAgc2V0U2tpcE1vZGUoSFRNTE5hbWVzOjpub3NjcmlwdCgpKTsKICAgICAgICAgcmV0dXJu
IDA7Ci0gICAgY2FzZSBJRF9OT0xBWUVSOgotICAgICAgICAvL2Rpc2NhcmRfdW50aWwgPSBJRF9O
T0xBWUVSICsgSURfQ0xPU0VfVEFHOwotICAgICAgICByZXR1cm4gMDsKLSAgICBjYXNlIElEX1RF
WFQ6Ci0gICAgICAgIHJldHVybiBuZXcgVGV4dEltcGwoZG9jdW1lbnQsIHQtPnRleHQpOwotICAg
IGNhc2UgSURfQ09NTUVOVDoKLSAgICAgICAgaWYgKCFpbmNsdWRlc0NvbW1lbnRzSW5ET00pCi0g
ICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIElEX1NDUklQ
VDoKLSAgICAgICAgewotICAgICAgICAgICAgSFRNTFNjcmlwdEVsZW1lbnRJbXBsICpzY3JpcHRF
bGVtZW50ID0gbmV3IEhUTUxTY3JpcHRFbGVtZW50SW1wbChkb2N1bWVudCk7Ci0gICAgICAgICAg
ICBzY3JpcHRFbGVtZW50LT5zZXRDcmVhdGVkQnlQYXJzZXIodHJ1ZSk7Ci0gICAgICAgICAgICBy
ZXR1cm4gc2NyaXB0RWxlbWVudDsKLSAgICAgICAgfQogICAgIH0KLQotICAgIHJldHVybiBkb2N1
bWVudC0+ZG9jdW1lbnQoKS0+Y3JlYXRlSFRNTEVsZW1lbnQodC0+aWQpOworICAgIGVsc2UgaWYg
KHQtPnRhZ05hbWUgPT0gSFRNTE5hbWVzOjpub2xheWVyKCkpCisgICAgICAgIHJldHVybiAwOwor
ICAgIAorICAgIEVsZW1lbnRJbXBsKiByZXN1bHQgPSBIVE1MRWxlbWVudEZhY3Rvcnk6OmNyZWF0
ZUhUTUxFbGVtZW50KHQtPnRhZ05hbWUsIGRvYygpLCBmb3JtKTsKKyAgICBpZiAodC0+dGFnTmFt
ZSA9PSBIVE1MTmFtZXM6OmZvcm0oKSkKKyAgICAgICAgZm9ybSA9IHN0YXRpY19jYXN0PEhUTUxG
b3JtRWxlbWVudEltcGwqPihyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKICNkZWZp
bmUgTUFYX1JFRFVOREFOVCAyMAogCi1ib29sIEtIVE1MUGFyc2VyOjphbGxvd05lc3RlZFJlZHVu
ZGFudFRhZyhpbnQgX2lkKQorYm9vbCBIVE1MUGFyc2VyOjphbGxvd05lc3RlZFJlZHVuZGFudFRh
Zyhjb25zdCBBdG9taWNTdHJpbmcmIF90YWdOYW1lKQogewogICAgIC8vIHd3dy5saWNlby5lZHUu
bXggaXMgYW4gZXhhbXBsZSBvZiBhIHNpdGUgdGhhdCBhY2hpZXZlcyBhIGxldmVsIG9mIG5lc3Rp
bmcgb2YKICAgICAvLyBhYm91dCAxNTAwIHRhZ3MsIGFsbCBmcm9tIGEgYnVuY2ggb2YgPGI+cy4g
IFdlIHdpbGwgb25seSBhbGxvdyBhdCBtb3N0IDIwCiAgICAgLy8gbmVzdGVkIHRhZ3Mgb2YgdGhl
IHNhbWUgdHlwZSBiZWZvcmUganVzdCBpZ25vcmluZyB0aGVtIGFsbCB0b2dldGhlci4KICAgICBp
bnQgaSA9IDA7CiAgICAgZm9yIChIVE1MU3RhY2tFbGVtKiBjdXJyID0gYmxvY2tTdGFjazsKLSAg
ICAgICAgIGkgPCBNQVhfUkVEVU5EQU5UICYmIGN1cnIgJiYgY3Vyci0+aWQgPT0gX2lkOworICAg
ICAgICAgaSA8IE1BWF9SRURVTkRBTlQgJiYgY3VyciAmJiBjdXJyLT50YWdOYW1lID09IF90YWdO
YW1lOwogICAgICAgICAgY3VyciA9IGN1cnItPm5leHQsIGkrKyk7CiAgICAgcmV0dXJuIGkgIT0g
TUFYX1JFRFVOREFOVDsKIH0KIAotdm9pZCBLSFRNTFBhcnNlcjo6cHJvY2Vzc0Nsb3NlVGFnKFRv
a2VuICp0KQordm9pZCBIVE1MUGFyc2VyOjpwcm9jZXNzQ2xvc2VUYWcoVG9rZW4gKnQpCiB7Ci0g
ICAgLy8gc3VwcG9ydCBmb3IgcmVhbGx5IGJyb2tlbiBodG1sLiBDYW4ndCBiZWxpZXZlIEknbSBz
dXBwb3J0aW5nIHN1Y2ggY3JhcCAobGFycykKLSAgICBzd2l0Y2godC0+aWQpCi0gICAgewotICAg
IGNhc2UgSURfSFRNTCtJRF9DTE9TRV9UQUc6Ci0gICAgY2FzZSBJRF9CT0RZK0lEX0NMT1NFX1RB
RzoKLSAgICAgICAgLy8gd2UgbmV2ZXIgY2xvc2UgdGhlIGJvZHkgdGFnLCBzaW5jZSBzb21lIHN0
dXBpZCB3ZWIgcGFnZXMgY2xvc2UgaXQgYmVmb3JlIHRoZSBhY3R1YWwgZW5kIG9mIHRoZSBkb2Mu
Ci0gICAgICAgIC8vIGxldCdzIHJlbHkgb24gdGhlIGVuZCgpIGNhbGwgdG8gY2xvc2UgdGhpbmdz
LgorICAgIC8vIFN1cHBvcnQgZm9yIHJlYWxseSBicm9rZW4gaHRtbC4KKyAgICAvLyB3ZSBuZXZl
ciBjbG9zZSB0aGUgYm9keSB0YWcsIHNpbmNlIHNvbWUgc3R1cGlkIHdlYiBwYWdlcyBjbG9zZSBp
dCBiZWZvcmUgdGhlIGFjdHVhbCBlbmQgb2YgdGhlIGRvYy4KKyAgICAvLyBsZXQncyByZWx5IG9u
IHRoZSBlbmQoKSBjYWxsIHRvIGNsb3NlIHRoaW5ncy4KKyAgICBpZiAodC0+dGFnTmFtZSA9PSBI
VE1MTmFtZXM6Omh0bWwoKSB8fCB0LT50YWdOYW1lID09IEhUTUxOYW1lczo6Ym9keSgpKQogICAg
ICAgICByZXR1cm47Ci0gICAgY2FzZSBJRF9GT1JNK0lEX0NMT1NFX1RBRzoKKyAgICAKKyAgICBp
ZiAodC0+dGFnTmFtZSA9PSBIVE1MTmFtZXM6OmZvcm0oKSkKICAgICAgICAgZm9ybSA9IDA7Ci0g
ICAgICAgIC8vIHRoaXMgb25lIGlzIHRvIGdldCB0aGUgcmlnaHQgc3R5bGUgb24gdGhlIGJvZHkg
ZWxlbWVudAotICAgICAgICBicmVhazsKLSAgICBjYXNlIElEX01BUCtJRF9DTE9TRV9UQUc6Cisg
ICAgZWxzZSBpZiAodC0+dGFnTmFtZSA9PSBIVE1MTmFtZXM6Om1hcCgpKQogICAgICAgICBtYXAg
PSAwOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIElEX1NFTEVDVCtJRF9DTE9TRV9UQUc6Cisg
ICAgZWxzZSBpZiAodC0+dGFnTmFtZSA9PSBIVE1MTmFtZXM6OnNlbGVjdCgpKQogICAgICAgICBp
blNlbGVjdCA9IGZhbHNlOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBi
cmVhazsKLSAgICB9Ci0KLSNpZmRlZiBQQVJTRVJfREVCVUcKLSAgICBrZERlYnVnKCA2MDM1ICkg
PDwgImFkZGVkIHRoZSBmb2xsb3dpbmcgY2hpbGRzIHRvICIgPDwgY3VycmVudC0+bm9kZU5hbWUo
KS5zdHJpbmcoKSA8PCBlbmRsOwotICAgIE5vZGVJbXBsICpjaGlsZCA9IGN1cnJlbnQtPmZpcnN0
Q2hpbGQoKTsKLSAgICB3aGlsZShjaGlsZCAhPSAwKQotICAgIHsKLSAgICAgICAga2REZWJ1Zygg
NjAzNSApIDw8ICIgICAgIiA8PCBjaGlsZC0+bm9kZU5hbWUoKS5zdHJpbmcoKSA8PCBlbmRsOwot
ICAgICAgICBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpOwotICAgIH0KLSNlbmRpZgorICAg
ICAgICAKICAgICBIVE1MU3RhY2tFbGVtKiBvbGRFbGVtID0gYmxvY2tTdGFjazsKLSAgICBwb3BC
bG9jayh0LT5pZC1JRF9DTE9TRV9UQUcpOwotICAgIGlmIChvbGRFbGVtID09IGJsb2NrU3RhY2sg
JiYgdC0+aWQgPT0gSURfUCtJRF9DTE9TRV9UQUcpIHsKKyAgICBwb3BCbG9jayh0LT50YWdOYW1l
KTsKKyAgICBpZiAob2xkRWxlbSA9PSBibG9ja1N0YWNrICYmIHQtPnRhZ05hbWUgPT0gSFRNTE5h
bWVzOjpwKCkpIHsKICAgICAgICAgLy8gV2UgZW5jb3VudGVyZWQgYSBzdHJheSA8L3A+LiAgQW1h
emluZ2x5IEdlY2tvLCBXaW5JRSwgYW5kIE1hY0lFIGFsbCB0cmVhdAogICAgICAgICAvLyB0aGlz
IGFzIGEgdmFsaWQgYnJlYWssIGkuZS4sIDxwPjwvcD4uICBTbyBnbyBhaGVhZCBhbmQgbWFrZSB0
aGUgZW1wdHkKICAgICAgICAgLy8gcGFyYWdyYXBoLgotICAgICAgICB0LT5pZC09SURfQ0xPU0Vf
VEFHOworICAgICAgICB0LT5iZWdpblRhZyA9IHRydWU7CiAgICAgICAgIHBhcnNlVG9rZW4odCk7
Ci0gICAgICAgIHBvcEJsb2NrKElEX1ApOworICAgICAgICBwb3BCbG9jayh0LT50YWdOYW1lKTsK
ICAgICB9CiAjaWZkZWYgUEFSU0VSX0RFQlVHCiAgICAga2REZWJ1ZyggNjAzNSApIDw8ICJjbG9z
ZVRhZyAtLT4gY3VycmVudCA9ICIgPDwgY3VycmVudC0+bm9kZU5hbWUoKS5zdHJpbmcoKSA8PCBl
bmRsOwogI2VuZGlmCiB9CiAKLWJvb2wgS0hUTUxQYXJzZXI6OmlzSGVhZGVyVGFnKGludCBfaWQp
Citib29sIEhUTUxQYXJzZXI6OmlzSGVhZGVyVGFnKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFt
ZSkKIHsKLSAgICBzd2l0Y2ggKF9pZCkgewotICAgICAgICBjYXNlIElEX0gxOgotICAgICAgICBj
YXNlIElEX0gyOgotICAgICAgICBjYXNlIElEX0gzOgotICAgICAgICBjYXNlIElEX0g0OgotICAg
ICAgICBjYXNlIElEX0g1OgotICAgICAgICBjYXNlIElEX0g2OgotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQorICAgIHJldHVybiB0YWdOYW1lID09IEhUTUxOYW1lczo6aDEoKSB8fAorICAgICAgICAgICB0
YWdOYW1lID09IEhUTUxOYW1lczo6aDIoKSB8fAorICAgICAgICAgICB0YWdOYW1lID09IEhUTUxO
YW1lczo6aDMoKSB8fAorICAgICAgICAgICB0YWdOYW1lID09IEhUTUxOYW1lczo6aDQoKSB8fAor
ICAgICAgICAgICB0YWdOYW1lID09IEhUTUxOYW1lczo6aDUoKSB8fAorICAgICAgICAgICB0YWdO
YW1lID09IEhUTUxOYW1lczo6aDYoKTsKIH0KIAotdm9pZCBLSFRNTFBhcnNlcjo6cG9wTmVzdGVk
SGVhZGVyVGFnKCkKK3ZvaWQgSFRNTFBhcnNlcjo6cG9wTmVzdGVkSGVhZGVyVGFnKCkKIHsKICAg
ICAvLyBUaGlzIGZ1bmN0aW9uIG9ubHkgY2FyZXMgYWJvdXQgY2hlY2tpbmcgZm9yIG5lc3RlZCBo
ZWFkZXJzIHRoYXQgaGF2ZSBvbmx5IGlubGluZXMgaW4gYmV0d2VlbiB0aGVtLgogICAgIE5vZGVJ
bXBsKiBjdXJyTm9kZSA9IGN1cnJlbnQ7CiAgICAgZm9yIChIVE1MU3RhY2tFbGVtKiBjdXJyID0g
YmxvY2tTdGFjazsgY3VycjsgY3VyciA9IGN1cnItPm5leHQpIHsKLSAgICAgICAgaWYgKGlzSGVh
ZGVyVGFnKGN1cnItPmlkKSkgewotICAgICAgICAgICAgcG9wQmxvY2soY3Vyci0+aWQpOworICAg
ICAgICBpZiAoaXNIZWFkZXJUYWcoY3Vyci0+dGFnTmFtZSkpIHsKKyAgICAgICAgICAgIHBvcEJs
b2NrKGN1cnItPnRhZ05hbWUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAg
ICAgIGlmIChjdXJyTm9kZSAmJiAhY3Vyck5vZGUtPmlzSW5saW5lKCkpCisgICAgICAgIGlmIChj
dXJyTm9kZSAmJiAhaXNJbmxpbmUoY3Vyck5vZGUpKQogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICBjdXJyTm9kZSA9IGN1cnItPm5vZGU7CiAgICAgfQogfQogCi1ib29sIEtIVE1MUGFyc2Vy
Ojppc1Jlc2lkdWFsU3R5bGVUYWcoaW50IF9pZCkKK2Jvb2wgSFRNTFBhcnNlcjo6aXNJbmxpbmUo
RE9NOjpOb2RlSW1wbCogbm9kZSkgY29uc3QKIHsKLSAgICBzd2l0Y2ggKF9pZCkgewotICAgICAg
ICBjYXNlIElEX0E6Ci0gICAgICAgIGNhc2UgSURfRk9OVDoKLSAgICAgICAgY2FzZSBJRF9UVDoK
LSAgICAgICAgY2FzZSBJRF9VOgotICAgICAgICBjYXNlIElEX0I6Ci0gICAgICAgIGNhc2UgSURf
SToKLSAgICAgICAgY2FzZSBJRF9TOgotICAgICAgICBjYXNlIElEX1NUUklLRToKLSAgICAgICAg
Y2FzZSBJRF9CSUc6Ci0gICAgICAgIGNhc2UgSURfU01BTEw6Ci0gICAgICAgIGNhc2UgSURfRU06
Ci0gICAgICAgIGNhc2UgSURfU1RST05HOgotICAgICAgICBjYXNlIElEX0RGTjoKLSAgICAgICAg
Y2FzZSBJRF9DT0RFOgotICAgICAgICBjYXNlIElEX1NBTVA6Ci0gICAgICAgIGNhc2UgSURfS0JE
OgotICAgICAgICBjYXNlIElEX1ZBUjoKKyAgICBpZiAobm9kZS0+aXNUZXh0Tm9kZSgpKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChub2RlLT5pc0hUTUxFbGVtZW50KCkpIHsKKyAg
ICAgICAgSFRNTEVsZW1lbnRJbXBsKiBlID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsKj4o
bm9kZSk7CisgICAgICAgIGlmIChlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjphKCkpIHx8IGUt
Pmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmZvbnQoKSkgfHwgZS0+aGFzTG9jYWxOYW1lKEhUTUxO
YW1lczo6dHQoKSkgfHwKKyAgICAgICAgICAgIGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnUo
KSkgfHwgZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6YigpKSB8fCBlLT5oYXNMb2NhbE5hbWUo
SFRNTE5hbWVzOjppKCkpIHx8CisgICAgICAgICAgICBlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVz
OjpzKCkpIHx8IGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnN0cmlrZSgpKSB8fCBlLT5oYXNM
b2NhbE5hbWUoSFRNTE5hbWVzOjpiaWcoKSkgfHwKKyAgICAgICAgICAgIGUtPmhhc0xvY2FsTmFt
ZShIVE1MTmFtZXM6OnNtYWxsKCkpIHx8IGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmVtKCkp
IHx8IGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnN0cm9uZygpKSB8fAorICAgICAgICAgICAg
ZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6ZGZuKCkpIHx8IGUtPmhhc0xvY2FsTmFtZShIVE1M
TmFtZXM6OmNvZGUoKSkgfHwgZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6c2FtcCgpKSB8fAor
ICAgICAgICAgICAgZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6a2JkKCkpIHx8IGUtPmhhc0xv
Y2FsTmFtZShIVE1MTmFtZXM6OnZhcigpKSB8fCBlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpj
aXRlKCkpIHx8CisgICAgICAgICAgICBlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjphYmJyKCkp
IHx8IGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmFjcm9ueW0oKSkgfHwgZS0+aGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6c3ViKCkpIHx8CisgICAgICAgICAgICBlLT5oYXNMb2NhbE5hbWUoSFRN
TE5hbWVzOjpzdXAoKSkgfHwgZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6c3BhbigpKSB8fCBl
LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpub2JyKCkpIHx8CisgICAgICAgICAgICBlLT5oYXNM
b2NhbE5hbWUoSFRNTE5hbWVzOjp3YnIoKSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CisgICAgCisg
ICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIEtIVE1MUGFyc2VyOjppc0FmZmVjdGVkQnlSZXNp
ZHVhbFN0eWxlKGludCBfaWQpCitib29sIEhUTUxQYXJzZXI6OmlzUmVzaWR1YWxTdHlsZVRhZyhj
b25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUpCiB7Ci0gICAgaWYgKGlzUmVzaWR1YWxTdHlsZVRh
ZyhfaWQpKQorICAgIHJldHVybiB0YWdOYW1lID09IEhUTUxOYW1lczo6YSgpIHx8IHRhZ05hbWUg
PT0gSFRNTE5hbWVzOjpmb250KCkgfHwgdGFnTmFtZSA9PSBIVE1MTmFtZXM6OnR0KCkgfHwKKyAg
ICAgICAgICAgdGFnTmFtZSA9PSBIVE1MTmFtZXM6OnUoKSB8fCB0YWdOYW1lID09IEhUTUxOYW1l
czo6YigpIHx8IHRhZ05hbWUgPT0gSFRNTE5hbWVzOjppKCkgfHwKKyAgICAgICAgICAgdGFnTmFt
ZSA9PSBIVE1MTmFtZXM6OnMoKSB8fCB0YWdOYW1lID09IEhUTUxOYW1lczo6c3RyaWtlKCkgfHwg
dGFnTmFtZSA9PSBIVE1MTmFtZXM6OmJpZygpIHx8CisgICAgICAgICAgIHRhZ05hbWUgPT0gSFRN
TE5hbWVzOjpzbWFsbCgpIHx8IHRhZ05hbWUgPT0gSFRNTE5hbWVzOjplbSgpIHx8IHRhZ05hbWUg
PT0gSFRNTE5hbWVzOjpzdHJvbmcoKSB8fAorICAgICAgICAgICB0YWdOYW1lID09IEhUTUxOYW1l
czo6ZGZuKCkgfHwgdGFnTmFtZSA9PSBIVE1MTmFtZXM6OmNvZGUoKSB8fCB0YWdOYW1lID09IEhU
TUxOYW1lczo6c2FtcCgpIHx8CisgICAgICAgICAgIHRhZ05hbWUgPT0gSFRNTE5hbWVzOjprYmQo
KSB8fCB0YWdOYW1lID09IEhUTUxOYW1lczo6dmFyKCk7Cit9CisKK2Jvb2wgSFRNTFBhcnNlcjo6
aXNBZmZlY3RlZEJ5UmVzaWR1YWxTdHlsZShjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUpCit7
CisgICAgaWYgKGlzUmVzaWR1YWxTdHlsZVRhZyh0YWdOYW1lKSB8fCBpc0hlYWRlclRhZyh0YWdO
YW1lKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgCi0gICAgc3dpdGNoIChfaWQpIHsKLSAg
ICAgICAgY2FzZSBJRF9QOgotICAgICAgICBjYXNlIElEX0RJVjoKLSAgICAgICAgY2FzZSBJRF9C
TE9DS1FVT1RFOgotICAgICAgICBjYXNlIElEX0FERFJFU1M6Ci0gICAgICAgIGNhc2UgSURfSDE6
Ci0gICAgICAgIGNhc2UgSURfSDI6Ci0gICAgICAgIGNhc2UgSURfSDM6Ci0gICAgICAgIGNhc2Ug
SURfSDQ6Ci0gICAgICAgIGNhc2UgSURfSDU6Ci0gICAgICAgIGNhc2UgSURfSDY6Ci0gICAgICAg
IGNhc2UgSURfQ0VOVEVSOgotICAgICAgICBjYXNlIElEX1VMOgotICAgICAgICBjYXNlIElEX09M
OgotICAgICAgICBjYXNlIElEX0xJOgotICAgICAgICBjYXNlIElEX0RMOgotICAgICAgICBjYXNl
IElEX0RUOgotICAgICAgICBjYXNlIElEX0REOgotICAgICAgICBjYXNlIElEX1BSRToKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KKyAgICByZXR1cm4gdGFnTmFtZSA9PSBIVE1MTmFtZXM6OnAoKSB8fCB0
YWdOYW1lID09IEhUTUxOYW1lczo6ZGl2KCkgfHwgdGFnTmFtZSA9PSBIVE1MTmFtZXM6OmJsb2Nr
cXVvdGUoKSB8fAorICAgICAgICAgICB0YWdOYW1lID09IEhUTUxOYW1lczo6YWRkcmVzcygpIHx8
IHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpjZW50ZXIoKSB8fCB0YWdOYW1lID09IEhUTUxOYW1lczo6
dWwoKSB8fAorICAgICAgICAgICB0YWdOYW1lID09IEhUTUxOYW1lczo6b2woKSB8fCB0YWdOYW1l
ID09IEhUTUxOYW1lczo6bGkoKSB8fCB0YWdOYW1lID09IEhUTUxOYW1lczo6ZGwoKSB8fAorICAg
ICAgICAgICB0YWdOYW1lID09IEhUTUxOYW1lczo6ZHQoKSB8fCB0YWdOYW1lID09IEhUTUxOYW1l
czo6ZGQoKSB8fCB0YWdOYW1lID09IEhUTUxOYW1lczo6cHJlKCk7CiB9CiAKLXZvaWQgS0hUTUxQ
YXJzZXI6OmhhbmRsZVJlc2lkdWFsU3R5bGVDbG9zZVRhZ0Fjcm9zc0Jsb2NrcyhIVE1MU3RhY2tF
bGVtKiBlbGVtKQordm9pZCBIVE1MUGFyc2VyOjpoYW5kbGVSZXNpZHVhbFN0eWxlQ2xvc2VUYWdB
Y3Jvc3NCbG9ja3MoSFRNTFN0YWNrRWxlbSogZWxlbSkKIHsKICAgICAvLyBGaW5kIHRoZSBlbGVt
ZW50IHRoYXQgY3Jvc3NlcyBvdmVyIHRvIGEgaGlnaGVyIGxldmVsLiAgIEZvciBub3csIGlmIHRo
ZXJlIGlzIG1vcmUgdGhhbgogICAgIC8vIG9uZSwgd2Ugd2lsbCBqdXN0IGdpdmUgdXAgYW5kIG5v
dCBhdHRlbXB0IGFueSBzb3J0IG9mIGNvcnJlY3Rpb24uICBJdCdzIGhpZ2hseSB1bmxpa2VseSB0
aGF0CkBAIC0xMTI1LDcgKzg2Nyw3IEBAIHZvaWQgS0hUTUxQYXJzZXI6OmhhbmRsZVJlc2lkdWFs
U3R5bGVDbG8KICAgICAgICAgY3VyciA9IGN1cnItPm5leHQ7CiAgICAgfQogCi0gICAgaWYgKCFj
dXJyIHx8ICFtYXhFbGVtIHx8ICFpc0FmZmVjdGVkQnlSZXNpZHVhbFN0eWxlKG1heEVsZW0tPmlk
KSkgcmV0dXJuOworICAgIGlmICghY3VyciB8fCAhbWF4RWxlbSB8fCAhaXNBZmZlY3RlZEJ5UmVz
aWR1YWxTdHlsZShtYXhFbGVtLT50YWdOYW1lKSkgcmV0dXJuOwogCiAgICAgTm9kZUltcGwqIHJl
c2lkdWFsRWxlbSA9IHByZXYtPm5vZGU7CiAgICAgTm9kZUltcGwqIGJsb2NrRWxlbSA9IHByZXZN
YXhFbGVtID8gcHJldk1heEVsZW0tPm5vZGUgOiBjdXJyZW50OwpAQCAtMTE0Nyw3ICs4ODksNyBA
QCB2b2lkIEtIVE1MUGFyc2VyOjpoYW5kbGVSZXNpZHVhbFN0eWxlQ2xvCiAgICAgICAgIEhUTUxT
dGFja0VsZW0qIHByZXZFbGVtID0gbWF4RWxlbTsKICAgICAgICAgd2hpbGUgKGN1cnJFbGVtICE9
IGVsZW0pIHsKICAgICAgICAgICAgIEhUTUxTdGFja0VsZW0qIG5leHRFbGVtID0gY3VyckVsZW0t
Pm5leHQ7Ci0gICAgICAgICAgICBpZiAoIWlzUmVzaWR1YWxTdHlsZVRhZyhjdXJyRWxlbS0+aWQp
KSB7CisgICAgICAgICAgICBpZiAoIWlzUmVzaWR1YWxTdHlsZVRhZyhjdXJyRWxlbS0+dGFnTmFt
ZSkpIHsKICAgICAgICAgICAgICAgICBwcmV2RWxlbS0+bmV4dCA9IG5leHRFbGVtOwogICAgICAg
ICAgICAgICAgIHByZXZFbGVtLT5ub2RlID0gY3VyckVsZW0tPm5vZGU7CiAgICAgICAgICAgICAg
ICAgZGVsZXRlIGN1cnJFbGVtOwpAQCAtMTE2OSw3ICs5MTEsNyBAQCB2b2lkIEtIVE1MUGFyc2Vy
OjpoYW5kbGVSZXNpZHVhbFN0eWxlQ2xvCiAgICAgICAgIE5vZGVJbXBsKiBjdXJyTm9kZSA9IDA7
CiAgICAgICAgIGN1cnJFbGVtID0gbWF4RWxlbTsKICAgICAgICAgd2hpbGUgKGN1cnJFbGVtLT5u
b2RlICE9IHJlc2lkdWFsRWxlbSkgewotICAgICAgICAgICAgaWYgKGlzUmVzaWR1YWxTdHlsZVRh
ZyhjdXJyRWxlbS0+bm9kZS0+aWQoKSkpIHsKKyAgICAgICAgICAgIGlmIChpc1Jlc2lkdWFsU3R5
bGVUYWcoY3VyckVsZW0tPm5vZGUtPmxvY2FsTmFtZSgpKSkgewogICAgICAgICAgICAgICAgIC8v
IENyZWF0ZSBhIGNsb25lIG9mIHRoaXMgZWxlbWVudC4KICAgICAgICAgICAgICAgICBjdXJyTm9k
ZSA9IGN1cnJFbGVtLT5ub2RlLT5jbG9uZU5vZGUoZmFsc2UpOwogCkBAIC0xMjQ1LDcgKzk4Nyw3
IEBAIHZvaWQgS0hUTUxQYXJzZXI6OmhhbmRsZVJlc2lkdWFsU3R5bGVDbG8KICAgICAgICAgLy8g
V2Ugd2lsbCBhY3R1YWxseSBzY2hlZHVsZSB0aGlzIHRhZyBmb3IgcmVvcGVuaW5nCiAgICAgICAg
IC8vIGFmdGVyIHdlIGNvbXBsZXRlIHRoZSBjbG9zZSBvZiB0aGlzIGVudGlyZSBibG9jay4KICAg
ICAgICAgTm9kZUltcGwqIGN1cnJOb2RlID0gY3VycmVudDsKLSAgICAgICAgaWYgKGlzUmVzaWR1
YWxTdHlsZVRhZyhjdXJyLT5pZCkpIHsKKyAgICAgICAgaWYgKGlzUmVzaWR1YWxTdHlsZVRhZyhj
dXJyLT50YWdOYW1lKSkgewogICAgICAgICAgICAgLy8gV2UndmUgb3ZlcmxvYWRlZCB0aGUgdXNl
IG9mIHN0YWNrIGVsZW1lbnRzIGFuZCBhcmUganVzdCByZXVzaW5nIHRoZQogICAgICAgICAgICAg
Ly8gc3RydWN0IHdpdGggYSBzbGlnaHRseSBkaWZmZXJlbnQgbWVhbmluZyB0byB0aGUgdmFyaWFi
bGVzLiAgSW5zdGVhZCBvZiBjaGFpbmluZwogICAgICAgICAgICAgLy8gZnJvbSBpbm5lcm1vc3Qg
dG8gb3V0ZXJtb3N0LCB3ZSBidWlsZCB1cCBhIGxpc3Qgb2YgYWxsIHRoZSB0YWdzIHdlIG5lZWQg
dG8gcmVvcGVuCkBAIC0xMjY5LDcgKzEwMTEsNyBAQCB2b2lkIEtIVE1MUGFyc2VyOjpoYW5kbGVS
ZXNpZHVhbFN0eWxlQ2xvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gaWYgaXQgYmVjb21lcyBuZWNlc3NhcnkgdG8gZG8gc28uCiB9CiAKLXZv
aWQgS0hUTUxQYXJzZXI6OnJlb3BlblJlc2lkdWFsU3R5bGVUYWdzKEhUTUxTdGFja0VsZW0qIGVs
ZW0sIERPTTo6Tm9kZUltcGwqIG1hbGZvcm1lZFRhYmxlUGFyZW50KQordm9pZCBIVE1MUGFyc2Vy
OjpyZW9wZW5SZXNpZHVhbFN0eWxlVGFncyhIVE1MU3RhY2tFbGVtKiBlbGVtLCBET006Ok5vZGVJ
bXBsKiBtYWxmb3JtZWRUYWJsZVBhcmVudCkKIHsKICAgICAvLyBMb29wIGZvciBlYWNoIHRhZyB0
aGF0IG5lZWRzIHRvIGJlIHJlb3BlbmVkLgogICAgIHdoaWxlIChlbGVtKSB7CkBAIC0xMjg2LDcg
KzEwMjgsNyBAQCB2b2lkIEtIVE1MUGFyc2VyOjpyZW9wZW5SZXNpZHVhbFN0eWxlVGFnCiAgICAg
ICAgIC8vIEZJWE1FOiBJcyBpdCByZWFsbHkgT0sgdG8gaWdub3JlIHRoZSBleGNlcHRpb25zIGhl
cmU/CiAKICAgICAgICAgLy8gTm93IHB1c2ggYSBuZXcgc3RhY2sgZWxlbWVudCBmb3IgdGhpcyBu
b2RlIHdlIGp1c3QgY3JlYXRlZC4KLSAgICAgICAgcHVzaEJsb2NrKGVsZW0tPmlkLCBlbGVtLT5s
ZXZlbCk7CisgICAgICAgIHB1c2hCbG9jayhlbGVtLT50YWdOYW1lLCBlbGVtLT5sZXZlbCk7CiAK
ICAgICAgICAgLy8gU2V0IG91ciBzdHJheVRhYmxlQ29udGVudCBib29sZWFuIGlmIG5lZWRlZCwg
c28gdGhhdCB0aGUgcmVvcGVuZWQgdGFnIGFsc28ga25vd3MKICAgICAgICAgLy8gdGhhdCBpdCBp
cyBpbnNpZGUgYSBtYWxmb3JtZWQgdGFibGUuCkBAIC0xMzA3LDM1ICsxMDQ5LDIxIEBAIHZvaWQg
S0hUTUxQYXJzZXI6OnJlb3BlblJlc2lkdWFsU3R5bGVUYWcKICAgICB9CiB9CiAKLXZvaWQgS0hU
TUxQYXJzZXI6OnB1c2hCbG9jayhpbnQgX2lkLCBpbnQgX2xldmVsKQordm9pZCBIVE1MUGFyc2Vy
OjpwdXNoQmxvY2soY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lLCBpbnQgX2xldmVsKQogewot
ICAgIEhUTUxTdGFja0VsZW0gKkVsZW0gPSBuZXcgSFRNTFN0YWNrRWxlbShfaWQsIF9sZXZlbCwg
Y3VycmVudCwgYmxvY2tTdGFjayk7Ci0KKyAgICBIVE1MU3RhY2tFbGVtICpFbGVtID0gbmV3IEhU
TUxTdGFja0VsZW0odGFnTmFtZSwgX2xldmVsLCBjdXJyZW50LCBibG9ja1N0YWNrKTsKICAgICBi
bG9ja1N0YWNrID0gRWxlbTsKLSAgICBhZGRGb3JiaWRkZW4oX2lkLCBmb3JiaWRkZW5UYWcpOwog
fQogCi12b2lkIEtIVE1MUGFyc2VyOjpwb3BCbG9jayggaW50IF9pZCApCit2b2lkIEhUTUxQYXJz
ZXI6OnBvcEJsb2NrKGNvbnN0IEF0b21pY1N0cmluZyYgX3RhZ05hbWUpCiB7CiAgICAgSFRNTFN0
YWNrRWxlbSAqRWxlbSA9IGJsb2NrU3RhY2s7CiAgICAgCiAgICAgaW50IG1heExldmVsID0gMDsK
IAotI2lmZGVmIFBBUlNFUl9ERUJVRwotICAgIGtkRGVidWcoIDYwMzUgKSA8PCAicG9wQmxvY2so
IiA8PCBnZXRUYWdOYW1lKF9pZCkuc3RyaW5nKCkgPDwgIikiIDw8IGVuZGw7Ci0gICAgd2hpbGUo
RWxlbSkgewotICAgICAgICBrZERlYnVnKCA2MDM1KSA8PCAiICAgPiAiIDw8IGdldFRhZ05hbWUo
RWxlbS0+aWQpLnN0cmluZygpIDw8IGVuZGw7Ci0gICAgICAgIEVsZW0gPSBFbGVtLT5uZXh0Owot
ICAgIH0KLSAgICBFbGVtID0gYmxvY2tTdGFjazsKLSNlbmRpZgotCi0gICAgd2hpbGUoIEVsZW0g
JiYgKEVsZW0tPmlkICE9IF9pZCkpCi0gICAgeworICAgIHdoaWxlIChFbGVtICYmIChFbGVtLT50
YWdOYW1lICE9IF90YWdOYW1lKSkgewogICAgICAgICBpZiAobWF4TGV2ZWwgPCBFbGVtLT5sZXZl
bCkKLSAgICAgICAgewogICAgICAgICAgICAgbWF4TGV2ZWwgPSBFbGVtLT5sZXZlbDsKLSAgICAg
ICAgfQogICAgICAgICBFbGVtID0gRWxlbS0+bmV4dDsKICAgICB9CiAKQEAgLTEzNDUsMjAgKzEw
NzMsMTggQEAgdm9pZCBLSFRNTFBhcnNlcjo6cG9wQmxvY2soIGludCBfaWQgKQogICAgIGlmICht
YXhMZXZlbCA+IEVsZW0tPmxldmVsKSB7CiAgICAgICAgIC8vIFdlIGRpZG4ndCBtYXRjaCBiZWNh
dXNlIHRoZSB0YWcgaXMgaW4gYSBkaWZmZXJlbnQgc2NvcGUsIGUuZy4sCiAgICAgICAgIC8vIDxi
PjxwPkZvbzwvYj4uICBUcnkgdG8gY29ycmVjdCB0aGUgcHJvYmxlbS4KLSAgICAgICAgaWYgKCFp
c1Jlc2lkdWFsU3R5bGVUYWcoX2lkKSkKKyAgICAgICAgaWYgKCFpc1Jlc2lkdWFsU3R5bGVUYWco
X3RhZ05hbWUpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICByZXR1cm4gaGFuZGxlUmVz
aWR1YWxTdHlsZUNsb3NlVGFnQWNyb3NzQmxvY2tzKEVsZW0pOwogICAgIH0KIAotICAgIGJvb2wg
aXNBZmZlY3RlZEJ5U3R5bGUgPSBpc0FmZmVjdGVkQnlSZXNpZHVhbFN0eWxlKEVsZW0tPmlkKTsK
KyAgICBib29sIGlzQWZmZWN0ZWRCeVN0eWxlID0gaXNBZmZlY3RlZEJ5UmVzaWR1YWxTdHlsZShF
bGVtLT50YWdOYW1lKTsKICAgICBIVE1MU3RhY2tFbGVtKiByZXNpZHVhbFN0eWxlU3RhY2sgPSAw
OwogICAgIE5vZGVJbXBsKiBtYWxmb3JtZWRUYWJsZVBhcmVudCA9IDA7CiAgICAgCiAgICAgRWxl
bSA9IGJsb2NrU3RhY2s7Ci0gICAgd2hpbGUgKEVsZW0pCi0gICAgewotICAgICAgICBpZiAoRWxl
bS0+aWQgPT0gX2lkKQotICAgICAgICB7CisgICAgd2hpbGUgKEVsZW0pIHsKKyAgICAgICAgaWYg
KEVsZW0tPnRhZ05hbWUgPT0gX3RhZ05hbWUpIHsKICAgICAgICAgICAgIGludCBzdHJheVRhYmxl
ID0gaW5TdHJheVRhYmxlQ29udGVudDsKICAgICAgICAgICAgIHBvcE9uZUJsb2NrKCk7CiAgICAg
ICAgICAgICBFbGVtID0gMDsKQEAgLTEzNjksMTQgKzEwOTUsMTMgQEAgdm9pZCBLSFRNTFBhcnNl
cjo6cG9wQmxvY2soIGludCBfaWQgKQogICAgICAgICAgICAgLy8gbXVzdCBhbHNvIGtub3cgdGhh
dCBpdCBpcyB0aGUgcm9vdCBvZiBtYWxmb3JtZWQgY29udGVudCBpbnNpZGUgYSA8dGJvZHk+Lzx0
cj4uCiAgICAgICAgICAgICBpZiAoc3RyYXlUYWJsZSAmJiAoaW5TdHJheVRhYmxlQ29udGVudCA8
IHN0cmF5VGFibGUpICYmIHJlc2lkdWFsU3R5bGVTdGFjaykgewogICAgICAgICAgICAgICAgIE5v
ZGVJbXBsKiBjdXJyID0gY3VycmVudDsKLSAgICAgICAgICAgICAgICB3aGlsZSAoY3VyciAmJiBj
dXJyLT5pZCgpICE9IElEX1RBQkxFKQorICAgICAgICAgICAgICAgIHdoaWxlIChjdXJyICYmICFj
dXJyLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGFibGUoKSkpCiAgICAgICAgICAgICAgICAgICAg
IGN1cnIgPSBjdXJyLT5wYXJlbnROb2RlKCk7CiAgICAgICAgICAgICAgICAgbWFsZm9ybWVkVGFi
bGVQYXJlbnQgPSBjdXJyID8gY3Vyci0+cGFyZW50Tm9kZSgpIDogMDsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChFbGVt
LT5pZCA9PSBJRF9GT1JNICYmIGZvcm0pCisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYg
KGZvcm0gJiYgRWxlbS0+dGFnTmFtZSA9PSBIVE1MTmFtZXM6OmZvcm0oKSkKICAgICAgICAgICAg
ICAgICAvLyBBIDxmb3JtPiBpcyBiZWluZyBjbG9zZWQgcHJlbWF0dXJlbHkgKGFuZCB0aGlzIGlz
CiAgICAgICAgICAgICAgICAgLy8gbWFsZm9ybWVkIEhUTUwpLiAgU2V0IGFuIGF0dHJpYnV0ZSBv
biB0aGUgZm9ybSB0byBjbGVhciBvdXQgaXRzCiAgICAgICAgICAgICAgICAgLy8gYm90dG9tIG1h
cmdpbi4KQEAgLTEzODUsNyArMTExMCw3IEBAIHZvaWQgS0hUTUxQYXJzZXI6OnBvcEJsb2NrKCBp
bnQgX2lkICkKICAgICAgICAgICAgIC8vIFNjaGVkdWxlIHRoaXMgdGFnIGZvciByZW9wZW5pbmcK
ICAgICAgICAgICAgIC8vIGFmdGVyIHdlIGNvbXBsZXRlIHRoZSBjbG9zZSBvZiB0aGlzIGVudGly
ZSBibG9jay4KICAgICAgICAgICAgIE5vZGVJbXBsKiBjdXJyTm9kZSA9IGN1cnJlbnQ7Ci0gICAg
ICAgICAgICBpZiAoaXNBZmZlY3RlZEJ5U3R5bGUgJiYgaXNSZXNpZHVhbFN0eWxlVGFnKEVsZW0t
PmlkKSkgeworICAgICAgICAgICAgaWYgKGlzQWZmZWN0ZWRCeVN0eWxlICYmIGlzUmVzaWR1YWxT
dHlsZVRhZyhFbGVtLT50YWdOYW1lKSkgewogICAgICAgICAgICAgICAgIC8vIFdlJ3ZlIG92ZXJs
b2FkZWQgdGhlIHVzZSBvZiBzdGFjayBlbGVtZW50cyBhbmQgYXJlIGp1c3QgcmV1c2luZyB0aGUK
ICAgICAgICAgICAgICAgICAvLyBzdHJ1Y3Qgd2l0aCBhIHNsaWdodGx5IGRpZmZlcmVudCBtZWFu
aW5nIHRvIHRoZSB2YXJpYWJsZXMuICBJbnN0ZWFkIG9mIGNoYWluaW5nCiAgICAgICAgICAgICAg
ICAgLy8gZnJvbSBpbm5lcm1vc3QgdG8gb3V0ZXJtb3N0LCB3ZSBidWlsZCB1cCBhIGxpc3Qgb2Yg
YWxsIHRoZSB0YWdzIHdlIG5lZWQgdG8gcmVvcGVuCkBAIC0xNDA4LDE5ICsxMTMzLDE0IEBAIHZv
aWQgS0hUTUxQYXJzZXI6OnBvcEJsb2NrKCBpbnQgX2lkICkKICAgICByZW9wZW5SZXNpZHVhbFN0
eWxlVGFncyhyZXNpZHVhbFN0eWxlU3RhY2ssIG1hbGZvcm1lZFRhYmxlUGFyZW50KTsKIH0KIAot
dm9pZCBLSFRNTFBhcnNlcjo6cG9wT25lQmxvY2soYm9vbCBkZWxCbG9jaykKK3ZvaWQgSFRNTFBh
cnNlcjo6cG9wT25lQmxvY2soYm9vbCBkZWxCbG9jaykKIHsKICAgICBIVE1MU3RhY2tFbGVtICpF
bGVtID0gYmxvY2tTdGFjazsKIAogICAgIC8vIHdlIHNob3VsZCBuZXZlciBnZXQgaGVyZSwgYnV0
IHNvbWUgYmFkIGh0bWwgbWlnaHQgY2F1c2UgaXQuCi0jaWZuZGVmIFBBUlNFUl9ERUJVRwotICAg
IGlmKCFFbGVtKSByZXR1cm47Ci0jZWxzZQotICAgIGtkRGVidWcoIDYwMzUgKSA8PCAicG9wcGlu
ZyBibG9jazogIiA8PCBnZXRUYWdOYW1lKEVsZW0tPmlkKS5zdHJpbmcoKSA8PCAiKCIgPDwgRWxl
bS0+aWQgPDwgIikiIDw8IGVuZGw7Ci0jZW5kaWYKLQotI2lmIFNQRUVEX0RFQlVHIDwgMQotICAg
IGlmKChFbGVtLT5ub2RlICE9IGN1cnJlbnQpKSB7CisgICAgaWYgKCFFbGVtKSByZXR1cm47Cisg
ICAgCisgICAgaWYgKChFbGVtLT5ub2RlICE9IGN1cnJlbnQpKSB7CiAgICAgICAgIGlmIChjdXJy
ZW50LT5tYWludGFpbnNTdGF0ZSgpICYmIGRvYygpKXsKICAgICAgICAgICAgIGRvYygpLT5yZWdp
c3Rlck1haW50YWluc1N0YXRlKGN1cnJlbnQpOwogICAgICAgICAgICAgUVN0cmluZ0xpc3QgJnN0
YXRlcyA9IGRvYygpLT5yZXN0b3JlU3RhdGUoKTsKQEAgLTE0MzEsOSArMTE1MSw2IEBAIHZvaWQg
S0hUTUxQYXJzZXI6OnBvcE9uZUJsb2NrKGJvb2wgZGVsQmwKICAgICAgICAgLy8gQSBmZXcgZWxl
bWVudHMgKDxhcHBsZXQ+LCA8b2JqZWN0PikgbmVlZCB0byBrbm93IHdoZW4gYWxsIGNoaWxkIGVs
ZW1lbnRzICg8cGFyYW0+cykgYXJlIGF2YWlsYWJsZToKICAgICAgICAgY3VycmVudC0+Y2xvc2VS
ZW5kZXJlcigpOwogICAgIH0KLSNlbmRpZgotCi0gICAgcmVtb3ZlRm9yYmlkZGVuKEVsZW0tPmlk
LCBmb3JiaWRkZW5UYWcpOwogCiAgICAgYmxvY2tTdGFjayA9IEVsZW0tPm5leHQ7CiAgICAgc2V0
Q3VycmVudChFbGVtLT5ub2RlKTsKQEAgLTE0NDUsMTkgKzExNjIsMTkgQEAgdm9pZCBLSFRNTFBh
cnNlcjo6cG9wT25lQmxvY2soYm9vbCBkZWxCbAogICAgICAgICBkZWxldGUgRWxlbTsKIH0KIAot
dm9pZCBLSFRNTFBhcnNlcjo6cG9wSW5saW5lQmxvY2tzKCkKK3ZvaWQgSFRNTFBhcnNlcjo6cG9w
SW5saW5lQmxvY2tzKCkKIHsKLSAgICB3aGlsZSAoYmxvY2tTdGFjayAmJiBjdXJyZW50LT5pc0lu
bGluZSgpKQorICAgIHdoaWxlIChibG9ja1N0YWNrICYmIGlzSW5saW5lKGN1cnJlbnQpKQogICAg
ICAgICBwb3BPbmVCbG9jaygpOwogfQogCi12b2lkIEtIVE1MUGFyc2VyOjpmcmVlQmxvY2soKQor
dm9pZCBIVE1MUGFyc2VyOjpmcmVlQmxvY2soKQogewogICAgIHdoaWxlIChibG9ja1N0YWNrKQog
ICAgICAgICBwb3BPbmVCbG9jaygpOwogfQogCi12b2lkIEtIVE1MUGFyc2VyOjpjcmVhdGVIZWFk
KCkKK3ZvaWQgSFRNTFBhcnNlcjo6Y3JlYXRlSGVhZCgpCiB7CiAgICAgaWYoaGVhZCB8fCAhZG9j
KCktPmZpcnN0Q2hpbGQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTQ3NCw3ICsxMTkxLDcgQEAg
dm9pZCBLSFRNTFBhcnNlcjo6Y3JlYXRlSGVhZCgpCiAgICAgfQogfQogCi1Ob2RlSW1wbCAqS0hU
TUxQYXJzZXI6OmhhbmRsZUlzaW5kZXgoIFRva2VuICp0ICkKK05vZGVJbXBsICpIVE1MUGFyc2Vy
OjpoYW5kbGVJc2luZGV4KCBUb2tlbiAqdCApCiB7CiAgICAgTm9kZUltcGwgKm47CiAgICAgSFRN
TEZvcm1FbGVtZW50SW1wbCAqbXlmb3JtID0gZm9ybTsKQEAgLTE1MDQsNyArMTIyMSw3IEBAIE5v
ZGVJbXBsICpLSFRNTFBhcnNlcjo6aGFuZGxlSXNpbmRleCggVG8KICAgICByZXR1cm4gbjsKIH0K
IAotdm9pZCBLSFRNTFBhcnNlcjo6c3RhcnRCb2R5KCkKK3ZvaWQgSFRNTFBhcnNlcjo6c3RhcnRC
b2R5KCkKIHsKICAgICBpZihpbkJvZHkpIHJldHVybjsKIApAQCAtMTUxNiw3ICsxMjMzLDcgQEAg
dm9pZCBLSFRNTFBhcnNlcjo6c3RhcnRCb2R5KCkKICAgICB9CiB9CiAKLXZvaWQgS0hUTUxQYXJz
ZXI6OmZpbmlzaGVkKCkKK3ZvaWQgSFRNTFBhcnNlcjo6ZmluaXNoZWQoKQogewogICAgIC8vIElu
IHRoZSBjYXNlIG9mIGEgY29tcGxldGVseSBlbXB0eSBkb2N1bWVudCwgaGVyZSdzIHRoZSBwbGFj
ZSB0byBjcmVhdGUgdGhlIEhUTUwgZWxlbWVudC4KICAgICBpZiAoY3VycmVudC0+aXNEb2N1bWVu
dE5vZGUoKSAmJiBjdXJyZW50LT5maXJzdENoaWxkKCkgPT0gMCkgewpJbmRleDoga2h0bWwvaHRt
bC9odG1scGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0
bWwvaHRtbC9odG1scGFyc2VyLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjcKZGlmZiAtdSAt
cCAtcjEuMjcga2h0bWwvaHRtbC9odG1scGFyc2VyLmgKLS0tIGtodG1sL2h0bWwvaHRtbHBhcnNl
ci5oCTYgSmFuIDIwMDUgMjE6MTM6MTYgLTAwMDAJMS4yNworKysga2h0bWwvaHRtbC9odG1scGFy
c2VyLmgJNSBKdWwgMjAwNSAyMzoyMDo0MyAtMDAwMApAQCAtMjksMTkgKzI5LDkgQEAKICNpZm5k
ZWYgSFRNTFBBUlNFUl9ICiAjZGVmaW5lIEhUTUxQQVJTRVJfSAogCi0vLyAwIGFsbAotLy8gMSBk
b210cmVlICsgcmVuZGVydHJlZSArIHN0eWxlRm9yRWxlbWVudCwgbm8gbGF5b3V0aW5nCi0vLyAy
IGRvbXRyZWUgb25seQotI2RlZmluZSBTUEVFRF9ERUJVRyAwCi0KLSNpZmRlZiBTUEVFRF9ERUJV
RwotI2luY2x1ZGUgPHFkYXRldGltZS5oPgotI2VuZGlmCi0KICNpbmNsdWRlICJkb20vZG9tX3N0
cmluZy5oIgogI2luY2x1ZGUgInhtbC9kb21fbm9kZWltcGwuaCIKICNpbmNsdWRlICJodG1sL2h0
bWxfZG9jdW1lbnRpbXBsLmgiCi0jaW5jbHVkZSAibWlzYy9odG1sdGFncy5oIgogCiBjbGFzcyBL
SFRNTFZpZXc7CiBjbGFzcyBIVE1MU3RhY2tFbGVtOwpAQCAtNjEsMTggKzUxLDE2IEBAIG5hbWVz
cGFjZSBraHRtbCB7CiAgICAgY2xhc3MgVG9rZW47CiB9OwogCi1jbGFzcyBLSFRNTFBhcnNlcjsK
LQogLyoqCiAgKiBUaGUgcGFyc2VyIGZvciBodG1sLiBJdCByZWNlaXZlcyBhIHN0cmVhbSBvZiB0
b2tlbnMgZnJvbSB0aGUgSFRNTFRva2VuaXplciwgYW5kCiAgKiBidWlsZHMgdXAgdGhlIERvY3Vt
ZW50IHN0cnVjdHVyZSBmb3JtIGl0LgogICovCi1jbGFzcyBLSFRNTFBhcnNlcgorY2xhc3MgSFRN
TFBhcnNlcgogewogcHVibGljOgotICAgIEtIVE1MUGFyc2VyKEtIVE1MVmlldyAqdywgRE9NOjpE
b2N1bWVudFB0ciAqaSwgYm9vbCBpbmNsdWRlc0NvbW1lbnRzPWZhbHNlKTsKLSAgICBLSFRNTFBh
cnNlcihET006OkRvY3VtZW50RnJhZ21lbnRJbXBsICpmcmFnLCBET006OkRvY3VtZW50UHRyICpk
b2MsIGJvb2wgaW5jbHVkZXNDb21tZW50cz1mYWxzZSk7Ci0gICAgdmlydHVhbCB+S0hUTUxQYXJz
ZXIoKTsKKyAgICBIVE1MUGFyc2VyKEtIVE1MVmlldyAqdywgRE9NOjpEb2N1bWVudFB0ciAqaSwg
Ym9vbCBpbmNsdWRlc0NvbW1lbnRzPWZhbHNlKTsKKyAgICBIVE1MUGFyc2VyKERPTTo6RG9jdW1l
bnRGcmFnbWVudEltcGwgKmZyYWcsIERPTTo6RG9jdW1lbnRQdHIgKmRvYywgYm9vbCBpbmNsdWRl
c0NvbW1lbnRzPWZhbHNlKTsKKyAgICB2aXJ0dWFsIH5IVE1MUGFyc2VyKCk7CiAKICAgICAvKioK
ICAgICAgKiBwYXJzZXMgb25lIHRva2VuIGRlbGl2ZXJlZCBieSB0aGUgdG9rZW5pemVyCkBAIC04
OSw3ICs3Nyw3IEBAIHB1YmxpYzoKICAgICAgKi8KICAgICB2b2lkIHJlc2V0KCk7CiAKLSAgICBi
b29sIHNraXBNb2RlKCkgY29uc3QgeyByZXR1cm4gKGRpc2NhcmRfdW50aWwgIT0gMCk7IH0KKyAg
ICBib29sIHNraXBNb2RlKCkgY29uc3QgeyByZXR1cm4gIWRpc2NhcmRfdW50aWwuaXNOdWxsKCk7
IH0KICAgICBib29sIG5vU3BhY2VzKCkgY29uc3QgeyByZXR1cm4gIWluQm9keTsgfQogICAgIGJv
b2wgc2VsZWN0TW9kZSgpIGNvbnN0IHsgcmV0dXJuIGluU2VsZWN0OyB9CiAKQEAgLTk3LDMxICs4
NSwzMiBAQCBwdWJsaWM6CiAgICAgRE9NOjpEb2N1bWVudFB0ciAqZG9jUHRyKCkgY29uc3QgeyBy
ZXR1cm4gZG9jdW1lbnQ7IH0KIAogcHJvdGVjdGVkOgotICAgIHZvaWQgc2V0Q3VycmVudChET006
Ok5vZGVJbXBsICpuZXdDdXJyZW50KTsKKyAgICB2b2lkIHNldEN1cnJlbnQoRE9NOjpOb2RlSW1w
bCogbmV3Q3VycmVudCk7CisgICAgdm9pZCBzZXRTa2lwTW9kZShjb25zdCBET006OlF1YWxpZmll
ZE5hbWUmIHFOYW1lKSB7IGRpc2NhcmRfdW50aWwgPSBxTmFtZS5sb2NhbE5hbWUoKTsgfQogCiAg
ICAgS0hUTUxWaWV3ICpIVE1MV2lkZ2V0OwogICAgIERPTTo6RG9jdW1lbnRQdHIgKmRvY3VtZW50
OwogCiAgICAgLyoKLSAgICAgKiBnZW5lcmF0ZSBhbiBlbGVtZW50IGZyb20gdGhlIHRva2VuCisg
ICAgICogZ2VuZXJhdGUgYSBub2RlIGZyb20gdGhlIHRva2VuCiAgICAgICovCi0gICAgRE9NOjpO
b2RlSW1wbCAqZ2V0RWxlbWVudChraHRtbDo6VG9rZW4gKik7CisgICAgRE9NOjpOb2RlSW1wbCAq
Z2V0Tm9kZShraHRtbDo6VG9rZW4gKik7CiAKICAgICB2b2lkIHByb2Nlc3NDbG9zZVRhZyhraHRt
bDo6VG9rZW4gKik7CiAKICAgICBib29sIGluc2VydE5vZGUoRE9NOjpOb2RlSW1wbCAqbiwgYm9v
bCBmbGF0ID0gZmFsc2UpOworICAgIGJvb2wgaGFuZGxlRXJyb3IoRE9NOjpOb2RlSW1wbCogbiwg
Ym9vbCBmbGF0LCBjb25zdCBET006OkF0b21pY1N0cmluZyYgbG9jYWxOYW1lLCBpbnQgdGFnUHJp
b3JpdHkpOworICAgIAorICAgIC8vIFRoZSBjdXJyZW50bHkgYWN0aXZlIGVsZW1lbnQgKHRoZSBv
bmUgbmV3IGVsZW1lbnRzIHdpbGwgYmUgYWRkZWQgdG8pLiAgQ2FuIGJlIGEgRG9jdW1lbnRGcmFn
bWVudCwgYSBEb2N1bWVudCBvciBhbiBFbGVtZW50LgorICAgIERPTTo6Tm9kZUltcGwqIGN1cnJl
bnQ7CiAKLSAgICAvKgotICAgICAqIFRoZSBjdXJyZW50bHkgYWN0aXZlIGVsZW1lbnQgKHRoZSBv
bmUgbmV3IGVsZW1lbnRzIHdpbGwgYmUgYWRkZWQgdG8pCi0gICAgICovCi0gICAgRE9NOjpOb2Rl
SW1wbCAqY3VycmVudDsKICAgICBib29sIGN1cnJlbnRJc1JlZmVyZW5jZWQ7CiAKICAgICBIVE1M
U3RhY2tFbGVtICpibG9ja1N0YWNrOwogCi0gICAgdm9pZCBwdXNoQmxvY2soIGludCBfaWQsIGlu
dCBfbGV2ZWwpOwotCi0gICAgdm9pZCBwb3BCbG9jayggaW50IF9pZCApOworICAgIHZvaWQgcHVz
aEJsb2NrKGNvbnN0IERPTTo6QXRvbWljU3RyaW5nJiB0YWdOYW1lLCBpbnQgX2xldmVsKTsKKyAg
ICB2b2lkIHBvcEJsb2NrKGNvbnN0IERPTTo6QXRvbWljU3RyaW5nJiB0YWdOYW1lKTsKKyAgICB2
b2lkIHBvcEJsb2NrKGNvbnN0IERPTTo6UXVhbGlmaWVkTmFtZSYgcU5hbWUpIHsgcmV0dXJuIHBv
cEJsb2NrKHFOYW1lLmxvY2FsTmFtZSgpKTsgfSAvLyBDb252ZW5pZW5jZSBmdW5jdGlvbiBmb3Ig
cmVhZGFiaWxpdHkuCiAgICAgdm9pZCBwb3BPbmVCbG9jayhib29sIGRlbEJsb2NrID0gdHJ1ZSk7
CiAgICAgdm9pZCBwb3BJbmxpbmVCbG9ja3MoKTsKIApAQCAtMTI5LDE2ICsxMTgsMTggQEAgcHJv
dGVjdGVkOgogCiAgICAgdm9pZCBjcmVhdGVIZWFkKCk7CiAKLSAgICBib29sIGlzUmVzaWR1YWxT
dHlsZVRhZyhpbnQgX2lkKTsKLSAgICBib29sIGlzQWZmZWN0ZWRCeVJlc2lkdWFsU3R5bGUoaW50
IF9pZCk7CisgICAgYm9vbCBpc1Jlc2lkdWFsU3R5bGVUYWcoY29uc3QgRE9NOjpBdG9taWNTdHJp
bmcmIHRhZ05hbWUpOworICAgIGJvb2wgaXNBZmZlY3RlZEJ5UmVzaWR1YWxTdHlsZShjb25zdCBE
T006OkF0b21pY1N0cmluZyYgdGFnTmFtZSk7CiAgICAgdm9pZCBoYW5kbGVSZXNpZHVhbFN0eWxl
Q2xvc2VUYWdBY3Jvc3NCbG9ja3MoSFRNTFN0YWNrRWxlbSogZWxlbSk7CiAgICAgdm9pZCByZW9w
ZW5SZXNpZHVhbFN0eWxlVGFncyhIVE1MU3RhY2tFbGVtKiBlbGVtLCBET006Ok5vZGVJbXBsKiBt
YWxmb3JtZWRUYWJsZVBhcmVudCk7CiAKLSAgICBib29sIGFsbG93TmVzdGVkUmVkdW5kYW50VGFn
KGludCBfaWQpOworICAgIGJvb2wgYWxsb3dOZXN0ZWRSZWR1bmRhbnRUYWcoY29uc3QgRE9NOjpB
dG9taWNTdHJpbmcmIHRhZ05hbWUpOwogICAgIAotICAgIHN0YXRpYyBib29sIGlzSGVhZGVyVGFn
KGludCBfaWQpOworICAgIHN0YXRpYyBib29sIGlzSGVhZGVyVGFnKGNvbnN0IERPTTo6QXRvbWlj
U3RyaW5nJiB0YWdOYW1lKTsKICAgICB2b2lkIHBvcE5lc3RlZEhlYWRlclRhZygpOwogCisgICAg
Ym9vbCBpc0lubGluZShET006Ok5vZGVJbXBsKiBub2RlKSBjb25zdDsKKyAgICAKICAgICAvKgog
ICAgICAqIGN1cnJlbnRseSBhY3RpdmUgZm9ybQogICAgICAqLwpAQCAtMTc1LDE4ICsxNjYsMTIg
QEAgcHJvdGVjdGVkOgogICAgIC8qCiAgICAgICogdGVsbHMgdGhlIHBhcnNlciB0byBkaXNjYXJk
IGFsbCB0YWdzLCB1bnRpbCBpdCByZWFjaGVzIHRoZSBvbmUgc3BlY2lmaWVkCiAgICAgICovCi0g
ICAgaW50IGRpc2NhcmRfdW50aWw7CisgICAgRE9NOjpBdG9taWNTdHJpbmcgZGlzY2FyZF91bnRp
bDsKIAogICAgIGJvb2wgaGVhZExvYWRlZDsKICAgICBpbnQgaW5TdHJheVRhYmxlQ29udGVudDsK
IAogICAgIGJvb2wgaW5jbHVkZXNDb21tZW50c0luRE9NOwotICAgIAotICAgIHVzaG9ydCBmb3Ji
aWRkZW5UYWdbSURfTEFTVF9UQUcgKyAxXTsKLSAgICAKLSNpZiBTUEVFRF9ERUJVRyA+IDAKLSAg
ICBRVGltZSBxdDsKLSNlbmRpZgogfTsKIAogI2VuZGlmIC8vIEhUTUxQQVJTRVJfSApJbmRleDog
a2h0bWwvaHRtbC9odG1sdG9rZW5pemVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvV2ViQ29yZS9raHRtbC9odG1sL2h0bWx0b2tlbml6ZXIuY3BwLHYKcmV0cmlldmluZyByZXZp
c2lvbiAxLjk0CmRpZmYgLXUgLXAgLXIxLjk0IGtodG1sL2h0bWwvaHRtbHRva2VuaXplci5jcHAK
LS0tIGtodG1sL2h0bWwvaHRtbHRva2VuaXplci5jcHAJMzAgSnVuIDIwMDUgMDE6Mjc6NDAgLTAw
MDAJMS45NAorKysga2h0bWwvaHRtbC9odG1sdG9rZW5pemVyLmNwcAk1IEp1bCAyMDA1IDIzOjIw
OjQ1IC0wMDAwCkBAIC0zOSw3ICszOSw2IEBACiAjaW5jbHVkZSAiaHRtbC9odG1sdG9rZW5pemVy
LmgiCiAjaW5jbHVkZSAiaHRtbC9odG1sX2RvY3VtZW50aW1wbC5oIgogI2luY2x1ZGUgImh0bWwv
aHRtbHBhcnNlci5oIgotI2luY2x1ZGUgImh0bWwvZHRkLmgiCiAKICNpbmNsdWRlICJtaXNjL2xv
YWRlci5oIgogI2luY2x1ZGUgIm1pc2MvaHRtbGhhc2hlcy5oIgpAQCAtNjMsNyArNjIsMTAgQEAg
dXNpbmcgRE9NOjpET01TdHJpbmc7CiB1c2luZyBET006OkRPTVN0cmluZ0ltcGw7CiB1c2luZyBE
T006OkRvY3VtZW50SW1wbDsKIHVzaW5nIERPTTo6ZW1wdHlBdG9tOwotdXNpbmcgRE9NOjplbmRU
YWdSZXF1aXJlbWVudDsKK3VzaW5nIERPTTo6Y29tbWVudEF0b207Cit1c2luZyBET006Om51bGxB
dG9tOwordXNpbmcgRE9NOjp0ZXh0QXRvbTsKK3VzaW5nIERPTTo6SFRNTE5hbWVzOwogCiAvLyB0
dXJuIG9mZiBpbmxpbmluZyB0byB2b2lkIHdhcm5pbmcgd2l0aCBuZXdlciBnY2MKICN1bmRlZiBf
X2lubGluZQpAQCAtMjM5LDcgKzI0MSw3IEBAIEhUTUxUb2tlbml6ZXI6OkhUTUxUb2tlbml6ZXIo
RE9NOjpEb2N1bWUKICAgICBzY3JpcHRDb2RlID0gMDsKICAgICBzY3JpcHRDb2RlU2l6ZSA9IHNj
cmlwdENvZGVNYXhTaXplID0gc2NyaXB0Q29kZVJlc3luYyA9IDA7CiAgICAgY2hhcnNldHMgPSBL
R2xvYmFsOjpjaGFyc2V0cygpOwotICAgIHBhcnNlciA9IG5ldyBLSFRNTFBhcnNlcihfdmlldywg
X2RvYywgaW5jbHVkZXNDb21tZW50cyk7CisgICAgcGFyc2VyID0gbmV3IEhUTUxQYXJzZXIoX3Zp
ZXcsIF9kb2MsIGluY2x1ZGVzQ29tbWVudHMpOwogICAgIG1fZXhlY3V0aW5nU2NyaXB0ID0gMDsK
ICAgICBsb2FkaW5nRXh0U2NyaXB0ID0gZmFsc2U7CiAgICAgb25Ib2xkID0gZmFsc2U7CkBAIC0y
NTksNyArMjYxLDcgQEAgSFRNTFRva2VuaXplcjo6SFRNTFRva2VuaXplcihET006OkRvY3VtZQog
ICAgIHNjcmlwdENvZGUgPSAwOwogICAgIHNjcmlwdENvZGVTaXplID0gc2NyaXB0Q29kZU1heFNp
emUgPSBzY3JpcHRDb2RlUmVzeW5jID0gMDsKICAgICBjaGFyc2V0cyA9IEtHbG9iYWw6OmNoYXJz
ZXRzKCk7Ci0gICAgcGFyc2VyID0gbmV3IEtIVE1MUGFyc2VyKGksIF9kb2MsIGluY2x1ZGVzQ29t
bWVudHMpOworICAgIHBhcnNlciA9IG5ldyBIVE1MUGFyc2VyKGksIF9kb2MsIGluY2x1ZGVzQ29t
bWVudHMpOwogICAgIG1fZXhlY3V0aW5nU2NyaXB0ID0gMDsKICAgICBsb2FkaW5nRXh0U2NyaXB0
ID0gZmFsc2U7CiAgICAgb25Ib2xkID0gZmFsc2U7CkBAIC00MzYsMTAgKzQzOCwxMCBAQCB2b2lk
IEhUTUxUb2tlbml6ZXI6OnBhcnNlU3BlY2lhbChUb2tlbml6CiAgICAgICAgICAgICBlbHNlIHsK
ICAgICAgICAgICAgICAgICBwcm9jZXNzTGlzdGluZyhUb2tlbml6ZXJTdHJpbmcoc2NyaXB0Q29k
ZSwgc2NyaXB0Q29kZVNpemUpKTsKICAgICAgICAgICAgICAgICBwcm9jZXNzVG9rZW4oKTsKLSAg
ICAgICAgICAgICAgICBpZiAoIHN0eWxlICkgICAgICAgICB7IGN1cnJUb2tlbi5pZCA9IElEX1NU
WUxFICsgSURfQ0xPU0VfVEFHOyB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoIHRleHRhcmVh
ICkgeyBjdXJyVG9rZW4uaWQgPSBJRF9URVhUQVJFQSArIElEX0NMT1NFX1RBRzsgfQotICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKCB0aXRsZSApIHsgY3VyclRva2VuLmlkID0gSURfVElUTEUgKyBJ
RF9DTE9TRV9UQUc7IH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmICggeG1wICkgIHsgY3VyclRv
a2VuLmlkID0gSURfWE1QICsgSURfQ0xPU0VfVEFHOyB9CisgICAgICAgICAgICAgICAgaWYgKCBz
dHlsZSApICAgICAgICAgeyBjdXJyVG9rZW4udGFnTmFtZSA9IEhUTUxOYW1lczo6c3R5bGUoKS5s
b2NhbE5hbWUoKTsgY3VyclRva2VuLmJlZ2luVGFnID0gZmFsc2U7IH0KKyAgICAgICAgICAgICAg
ICBlbHNlIGlmICggdGV4dGFyZWEgKSB7IGN1cnJUb2tlbi50YWdOYW1lID0gSFRNTE5hbWVzOjp0
ZXh0YXJlYSgpLmxvY2FsTmFtZSgpOyBjdXJyVG9rZW4uYmVnaW5UYWcgPSBmYWxzZTsgfQorICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKCB0aXRsZSApIHsgY3VyclRva2VuLnRhZ05hbWUgPSBIVE1M
TmFtZXM6OnRpdGxlKCkubG9jYWxOYW1lKCk7IGN1cnJUb2tlbi5iZWdpblRhZyA9IGZhbHNlOyB9
CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoIHhtcCApICB7IGN1cnJUb2tlbi50YWdOYW1lID0g
SFRNTE5hbWVzOjp4bXAoKS5sb2NhbE5hbWUoKTsgY3VyclRva2VuLmJlZ2luVGFnID0gZmFsc2U7
IH0KICAgICAgICAgICAgICAgICBwcm9jZXNzVG9rZW4oKTsKICAgICAgICAgICAgICAgICBzdHls
ZSA9IHNjcmlwdCA9IHN0eWxlID0gdGV4dGFyZWEgPSB0aXRsZSA9IHhtcCA9IGZhbHNlOwogICAg
ICAgICAgICAgICAgIHRxdW90ZSA9IE5vUXVvdGU7CkBAIC01MDksNyArNTExLDggQEAgdm9pZCBI
VE1MVG9rZW5pemVyOjpzY3JpcHRIYW5kbGVyKCkKICAgICBwcm9jZXNzTGlzdGluZyhUb2tlbml6
ZXJTdHJpbmcoc2NyaXB0Q29kZSwgc2NyaXB0Q29kZVNpemUpKTsKICAgICBRU3RyaW5nIGV4U2Ny
aXB0KCBidWZmZXIsIGRlc3QtYnVmZmVyICk7CiAgICAgcHJvY2Vzc1Rva2VuKCk7Ci0gICAgY3Vy
clRva2VuLmlkID0gSURfU0NSSVBUICsgSURfQ0xPU0VfVEFHOworICAgIGN1cnJUb2tlbi50YWdO
YW1lID0gSFRNTE5hbWVzOjpzY3JpcHQoKS5sb2NhbE5hbWUoKTsKKyAgICBjdXJyVG9rZW4uYmVn
aW5UYWcgPSBmYWxzZTsKICAgICBwcm9jZXNzVG9rZW4oKTsKIAogICAgIFRva2VuaXplclN0cmlu
ZyAqc2F2ZWRQcmVwZW5kaW5nU3JjID0gY3VycmVudFByZXBlbmRpbmdTcmM7CkBAIC02ODYsMTAg
KzY4OSwxMiBAQCB2b2lkIEhUTUxUb2tlbml6ZXI6OnBhcnNlQ29tbWVudChUb2tlbml6CiAgICAg
ICAgICAgICAgICAgICAgICAgICBjaGVja1NjcmlwdEJ1ZmZlcigpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgc2NyaXB0Q29kZVsgc2NyaXB0Q29kZVNpemUgXSA9IDA7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBzY3JpcHRDb2RlWyBzY3JpcHRDb2RlU2l6ZSArIDEgXSA9IDA7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBjdXJyVG9rZW4uaWQgPSBJRF9DT01NRU5UOworICAgICAgICAgICAg
ICAgICAgICAgICAgY3VyclRva2VuLnRhZ05hbWUgPSBjb21tZW50QXRvbTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGN1cnJUb2tlbi5iZWdpblRhZyA9IHRydWU7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBwcm9jZXNzTGlzdGluZyhUb2tlbml6ZXJTdHJpbmcoc2NyaXB0Q29kZSwgc2NyaXB0
Q29kZVNpemUgLSBlbmRDaGFyc0NvdW50KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBwcm9j
ZXNzVG9rZW4oKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJUb2tlbi5pZCA9IElEX0NP
TU1FTlQgKyBJRF9DTE9TRV9UQUc7CisgICAgICAgICAgICAgICAgICAgICAgICBjdXJyVG9rZW4u
dGFnTmFtZSA9IGNvbW1lbnRBdG9tOworICAgICAgICAgICAgICAgICAgICAgICAgY3VyclRva2Vu
LmJlZ2luVGFnID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzVG9rZW4o
KTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBzY3JpcHRDb2Rl
U2l6ZSA9IDA7CkBAIC0xMDMwLDI2ICsxMDM1LDE4IEBAIHZvaWQgSFRNTFRva2VuaXplcjo6cGFy
c2VUYWcoVG9rZW5pemVyU3QKICAgICAgICAgICAgICAgICAgICAgLy8gU3RhcnQgVGFnCiAgICAg
ICAgICAgICAgICAgICAgIGJlZ2luVGFnID0gdHJ1ZTsKIAotICAgICAgICAgICAgICAgIC8vIEFj
Y2VwdCBlbXB0eSB4bWwgdGFncyBsaWtlIDxici8+LiAgV2UgdHJpbSBvZmYgdGhlICIvIiBzbyB0
aGF0IHdoZW4gd2UgY2FsbAotICAgICAgICAgICAgICAgIC8vIGdldFRhZ0lELCB3ZSdsbCBsb29r
IHVwICJiciIgYXMgdGhlIHRhZyBuYW1lIGFuZCBub3QgImJyLyIuCisgICAgICAgICAgICAgICAg
Ly8gSWdub3JlIHRoZSAvIGluIGZha2UgeG1sIHRhZ3MgbGlrZSA8YnIvPi4gIFdlIHRyaW0gb2Zm
IHRoZSAiLyIgc28gdGhhdCB3ZSdsbCBnZXQgImJyIiBhcyB0aGUgdGFnIG5hbWUgYW5kIG5vdCAi
YnIvIi4KICAgICAgICAgICAgICAgICBpZihsZW4gPiAxICYmIHB0cltsZW4tMV0gPT0gJy8nICkK
ICAgICAgICAgICAgICAgICAgICAgcHRyWy0tbGVuXSA9ICdcMCc7CiAKLSAgICAgICAgICAgICAg
ICAvLyBMb29rIHVwIHRoZSB0YWdJRCBmb3IgdGhlIHNwZWNpZmllZCB0YWcgbmFtZSAobm93IHRo
YXQgd2UndmUgc2hhdmVkIG9mZiBhbnkKLSAgICAgICAgICAgICAgICAvLyBpbnZhbGlkIC8gdGhh
dCBtaWdodCBoYXZlIGZvbGxvd2VkIHRoZSBuYW1lKS4KLSAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBzaG9ydCB0YWdJRCA9IGdldFRhZ0lEKHB0ciwgbGVuKTsKLSAgICAgICAgICAgICAgICBpZiAo
IXRhZ0lEKSB7Ci0gICAgICAgICAgICAgICAgICAgIERPTVN0cmluZyB0YWdOYW1lKHB0cik7Ci0g
ICAgICAgICAgICAgICAgICAgIERvY3VtZW50SW1wbCAqZG9jID0gcGFyc2VyLT5kb2NQdHIoKS0+
ZG9jdW1lbnQoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGRvYy0+aXNWYWxpZE5hbWUodGFn
TmFtZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICB0YWdJRCA9IHBhcnNlci0+ZG9jUHRyKCkt
PmRvY3VtZW50KCktPnRhZ0lkKDAsIHRhZ05hbWUuaW1wbGVtZW50YXRpb24oKSwgZmFsc2UpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAodGFnSUQpIHsKLSNpZmRlZiBU
T0tFTl9ERUJVRwotICAgICAgICAgICAgICAgICAgICBRQ1N0cmluZyB0bXAocHRyLCBsZW4rMSk7
Ci0gICAgICAgICAgICAgICAgICAgIGtkRGVidWcoIDYwMzYgKSA8PCAiZm91bmQgdGFnIGlkPSIg
PDwgdGFnSUQgPDwgIjogIiA8PCB0bXAuZGF0YSgpIDw8IGVuZGw7Ci0jZW5kaWYKLSAgICAgICAg
ICAgICAgICAgICAgY3VyclRva2VuLmlkID0gYmVnaW5UYWcgPyB0YWdJRCA6IHRhZ0lEICsgSURf
Q0xPU0VfVEFHOworICAgICAgICAgICAgICAgIC8vIE5vdyB0aGF0IHdlJ3ZlIHNoYXZlZCBvZmYg
YW55IGludmFsaWQgLyB0aGF0IG1pZ2h0IGhhdmUgZm9sbG93ZWQgdGhlIG5hbWUpLCBtYWtlIHRo
ZSB0YWcuCisgICAgICAgICAgICAgICAgRE9NU3RyaW5nIHRhZ05hbWUocHRyKTsKKyAgICAgICAg
ICAgICAgICBEb2N1bWVudEltcGwgKmRvYyA9IHBhcnNlci0+ZG9jUHRyKCktPmRvY3VtZW50KCk7
CisgICAgICAgICAgICAgICAgaWYgKGRvYy0+aXNWYWxpZE5hbWUodGFnTmFtZSkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgLy8gRklYTUU6IFdvdWxkIGJlIG5pY2UgdG8gaGF2ZSBhbiBhdG9taWNz
dHJpbmcgbG9va3VwIGJhc2VkIG9mZiBsb3dlcmNhc2UgY2hhcnMgdGhhdCBkb2VzIG5vdCBoYXZl
IHRvIGNvcHkKKyAgICAgICAgICAgICAgICAgICAgLy8gdGhlIHN0cmluZyBvbiBhIGhpdCBpbiB0
aGUgaGFzaC4KKyAgICAgICAgICAgICAgICAgICAgY3VyclRva2VuLnRhZ05hbWUgPSBBdG9taWNT
dHJpbmcodGFnTmFtZS5sb3dlcigpKTsgLy8gV2UgaGF2ZSB0byBjYW5vbmljYWxpemUgb24gbG93
ZXItY2FzZS4KKyAgICAgICAgICAgICAgICAgICAgY3VyclRva2VuLmJlZ2luVGFnID0gYmVnaW5U
YWc7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGRlc3QgPSBidWZmZXI7CiAg
ICAgICAgICAgICAgICAgdGFnID0gU2VhcmNoQXR0cmlidXRlOwpAQCAtMTEwMSwxNSArMTA5OCw2
IEBAIHZvaWQgSFRNTFRva2VuaXplcjo6cGFyc2VUYWcoVG9rZW5pemVyU3QKICAgICAgICAgICAg
ICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJOYW1l
ID0gUVN0cmluZzo6ZnJvbUxhdGluMShRQ1N0cmluZyhjQnVmZmVyLCBjQnVmZmVyUG9zKzEpLmRh
dGEoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0ck5hbWVQcmVzZW50ID0gIWF0
dHJOYW1lLmlzRW1wdHkoKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMg
aXMgYSBkZWxpYmVyYXRlIHF1aXJrIHRvIG1hdGNoIE1vemlsbGEgYW5kIE9wZXJhLiAgV2UgaGF2
ZSB0byBkbyB0aGlzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2luY2Ugc2l0ZXMg
dGhhdCB1c2UgdGhlICJzdGFuZGFyZHMtY29tcGxpYW50IiBwYXRoIHNvbWV0aW1lcyBzZW5kCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gPHNjcmlwdCBzcmM9ImZvby5qcyIvPi4gIEJv
dGggTW96IGFuZCBPcGVyYSB3aWxsIGhvbm9yIHRoaXMsIGRlc3BpdGUgaXQKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBiZWluZyBib2d1cyBIVE1MLiAgVGhleSBkbyBub3QgaG9ub3Ig
dGhlICIvIiBmb3Igb3RoZXIgdGFncy4gIFRoaXMgYmVoYXZpb3IKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBhbHNvIGRldmlhdGVzIGZyb20gV2luSUUsIGJ1dCBpbiB0aGlzIGNhc2Ug
d2UnbGwganVzdCBjb3B5IE1veiBhbmQgT3BlcmEuCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGN1cnJUb2tlbi5pZCA9PSBJRF9TQ1JJUFQgJiYgY3VyY2hhciA9PSAnPicgJiYKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0ck5hbWUgPT0gIi8iKQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjdXJyVG9rZW4uZmxhdCA9IHRydWU7CiAgICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICAgICAgICAgIGRlc3QgPSBidWZmZXI7CkBAIC0xMzExLDE4ICsxMjk5LDE1IEBAIHZvaWQgSFRN
TFRva2VuaXplcjo6cGFyc2VUYWcoVG9rZW5pemVyU3QKICAgICAgICAgICAgIGlmICgqc3JjICE9
ICc8JykKICAgICAgICAgICAgICAgICArK3NyYzsKIAotICAgICAgICAgICAgaWYgKCAhY3VyclRv
a2VuLmlkICkgLy9zdG9wIGlmIHRhZyBpcyB1bmtub3duCisgICAgICAgICAgICBpZiAoY3VyclRv
a2VuLnRhZ05hbWUgPT0gbnVsbEF0b20pIC8vc3RvcCBpZiB0YWcgaXMgdW5rbm93bgogICAgICAg
ICAgICAgICAgIHJldHVybjsKIAotICAgICAgICAgICAgdWludCB0YWdJRCA9IGN1cnJUb2tlbi5p
ZDsKKyAgICAgICAgICAgIEF0b21pY1N0cmluZyB0YWdOYW1lID0gY3VyclRva2VuLnRhZ05hbWU7
CiAjaWYgZGVmaW5lZChUT0tFTl9ERUJVRykgJiYgVE9LRU5fREVCVUcgPiAwCiAgICAgICAgICAg
ICBrZERlYnVnKCA2MDM2ICkgPDwgImFwcGVuZGluZyBUYWc6ICIgPDwgdGFnSUQgPDwgZW5kbDsK
ICNlbmRpZgotICAgICAgICAgICAgYm9vbCBiZWdpblRhZyA9ICFjdXJyVG9rZW4uZmxhdCAmJiAo
dGFnSUQgPD0gSURfQ0xPU0VfVEFHKTsKLQotICAgICAgICAgICAgaWYgKHRhZ0lEID4gSURfQ0xP
U0VfVEFHKQotICAgICAgICAgICAgICAgIHRhZ0lEIC09IElEX0NMT1NFX1RBRzsKLSAgICAgICAg
ICAgIGVsc2UgaWYgKHRhZ0lEID09IElEX1NDUklQVCkgeworICAgICAgICAgICAgYm9vbCBiZWdp
blRhZyA9ICFjdXJyVG9rZW4uZmxhdCAmJiBjdXJyVG9rZW4uYmVnaW5UYWc7CisgICAgICAgICAg
ICBpZiAoYmVnaW5UYWcgJiYgY3VyclRva2VuLnRhZ05hbWUgPT0gSFRNTE5hbWVzOjpzY3JpcHQo
KSkgewogICAgICAgICAgICAgICAgIEF0dHJpYnV0ZUltcGwqIGEgPSAwOwogICAgICAgICAgICAg
ICAgIGJvb2wgZm91bmRUeXBlQXR0cmlidXRlID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgc2Ny
aXB0U3JjID0gUVN0cmluZzo6bnVsbDsKQEAgLTEzOTcsNjIgKzEzODIsNDcgQEAgdm9pZCBIVE1M
VG9rZW5pemVyOjpwYXJzZVRhZyhUb2tlbml6ZXJTdAogCiAgICAgICAgICAgICBwcm9jZXNzVG9r
ZW4oKTsKIAotICAgICAgICAgICAgc3dpdGNoKCB0YWdJRCApIHsKLSAgICAgICAgICAgIGNhc2Ug
SURfUFJFOgorICAgICAgICAgICAgaWYgKHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpwcmUoKSkKICAg
ICAgICAgICAgICAgICBkaXNjYXJkID0gTEZEaXNjYXJkOyAvLyBEaXNjYXJkIHRoZSBmaXJzdCBM
RiBhZnRlciB3ZSBvcGVuIGEgcHJlLgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgY2FzZSBJRF9TQ1JJUFQ6CisgICAgICAgICAgICBlbHNlIGlmICh0YWdOYW1lID09IEhUTUxO
YW1lczo6c2NyaXB0KCkpIHsKICAgICAgICAgICAgICAgICBpZiAoYmVnaW5UYWcpIHsKICAgICAg
ICAgICAgICAgICAgICAgc2VhcmNoU3RvcHBlciA9IHNjcmlwdEVuZDsKICAgICAgICAgICAgICAg
ICAgICAgc2VhcmNoU3RvcHBlckxlbiA9IDg7CiAgICAgICAgICAgICAgICAgICAgIHNjcmlwdCA9
IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIHBhcnNlU3BlY2lhbChzcmMpOwogICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmICh0YWdJRCA8PSBJRF9DTE9TRV9UQUcp
IHsgLy8gSGFuZGxlIDxzY3JpcHQgc3JjPSJmb28iLz4KLSAgICAgICAgICAgICAgICAgICAgc2Ny
aXB0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgc2NyaXB0SGFuZGxlcigpOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgSURf
U1RZTEU6CisgICAgICAgICAgICB9IGVsc2UgaWYgKHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpzdHls
ZSgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGJlZ2luVGFnKSB7CiAgICAgICAgICAgICAgICAg
ICAgIHNlYXJjaFN0b3BwZXIgPSBzdHlsZUVuZDsKICAgICAgICAgICAgICAgICAgICAgc2VhcmNo
U3RvcHBlckxlbiA9IDc7CiAgICAgICAgICAgICAgICAgICAgIHN0eWxlID0gdHJ1ZTsKICAgICAg
ICAgICAgICAgICAgICAgcGFyc2VTcGVjaWFsKHNyYyk7CiAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBJRF9URVhUQVJFQToKKyAgICAg
ICAgICAgIH0gZWxzZSBpZiAodGFnTmFtZSA9PSBIVE1MTmFtZXM6OnRleHRhcmVhKCkpIHsKICAg
ICAgICAgICAgICAgICBpZihiZWdpblRhZykgewogICAgICAgICAgICAgICAgICAgICBzZWFyY2hT
dG9wcGVyID0gdGV4dGFyZWFFbmQ7CiAgICAgICAgICAgICAgICAgICAgIHNlYXJjaFN0b3BwZXJM
ZW4gPSAxMDsKICAgICAgICAgICAgICAgICAgICAgdGV4dGFyZWEgPSB0cnVlOwogICAgICAgICAg
ICAgICAgICAgICBwYXJzZVNwZWNpYWwoc3JjKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIElEX1RJVExFOgotICAgICAgICAgICAg
ICAgIGlmIChiZWdpblRhZykgeworICAgICAgICAgICAgfSBlbHNlIGlmICh0YWdOYW1lID09IEhU
TUxOYW1lczo6dGl0bGUoKSkgeworICAgICAgICAgICAgICAgICBpZiAoYmVnaW5UYWcpIHsKICAg
ICAgICAgICAgICAgICAgICAgc2VhcmNoU3RvcHBlciA9IHRpdGxlRW5kOwogICAgICAgICAgICAg
ICAgICAgICBzZWFyY2hTdG9wcGVyTGVuID0gNzsKICAgICAgICAgICAgICAgICAgICAgdGl0bGUg
PSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBwYXJzZVNwZWNpYWwoc3JjKTsKICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIElEX1hN
UDoKKyAgICAgICAgICAgIH0gZWxzZSBpZiAodGFnTmFtZSA9PSBIVE1MTmFtZXM6OnhtcCgpKSB7
CiAgICAgICAgICAgICAgICAgaWYgKGJlZ2luVGFnKSB7CiAgICAgICAgICAgICAgICAgICAgIHNl
YXJjaFN0b3BwZXIgPSB4bXBFbmQ7CiAgICAgICAgICAgICAgICAgICAgIHNlYXJjaFN0b3BwZXJM
ZW4gPSA1OwogICAgICAgICAgICAgICAgICAgICB4bXAgPSB0cnVlOwogICAgICAgICAgICAgICAg
ICAgICBwYXJzZVNwZWNpYWwoc3JjKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIElEX1NFTEVDVDoKKyAgICAgICAgICAgIH0gZWxz
ZSBpZiAodGFnTmFtZSA9PSBIVE1MTmFtZXM6OnNlbGVjdCgpKQogICAgICAgICAgICAgICAgIHNl
bGVjdCA9IGJlZ2luVGFnOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2Fz
ZSBJRF9QTEFJTlRFWFQ6CisgICAgICAgICAgICBlbHNlIGlmICh0YWdOYW1lID09IEhUTUxOYW1l
czo6cGxhaW50ZXh0KCkpCiAgICAgICAgICAgICAgICAgcGxhaW50ZXh0ID0gYmVnaW5UYWc7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KICAgICAgICAgICAgIHJldHVy
bjsgLy8gRmluaXNoZWQgcGFyc2luZyB0YWchCiAgICAgICAgIH0KICAgICAgICAgfSAvLyBlbmQg
c3dpdGNoCkBAIC0xOTM4LDEwICsxOTA4LDEwIEBAIHZvaWQgSFRNTFRva2VuaXplcjo6cHJvY2Vz
c1Rva2VuKCkKICNlbmRpZgogICAgICAgICBjdXJyVG9rZW4udGV4dCA9IG5ldyBET01TdHJpbmdJ
bXBsKCBidWZmZXIsIGRlc3QgLSBidWZmZXIgKTsKICAgICAgICAgY3VyclRva2VuLnRleHQtPnJl
ZigpOwotICAgICAgICBpZiAoY3VyclRva2VuLmlkICE9IElEX0NPTU1FTlQpCi0gICAgICAgICAg
ICBjdXJyVG9rZW4uaWQgPSBJRF9URVhUOworICAgICAgICBpZiAoY3VyclRva2VuLnRhZ05hbWUg
IT0gY29tbWVudEF0b20pCisgICAgICAgICAgICBjdXJyVG9rZW4udGFnTmFtZSA9IHRleHRBdG9t
OwogICAgIH0KLSAgICBlbHNlIGlmKCFjdXJyVG9rZW4uaWQpIHsKKyAgICBlbHNlIGlmIChjdXJy
VG9rZW4udGFnTmFtZSA9PSBudWxsQXRvbSkgewogICAgICAgICBjdXJyVG9rZW4ucmVzZXQoKTsK
ICAgICAgICAgaWYgKGpzUHJveHkpCiAgICAgICAgICAgICBqc1Byb3h5LT5zZXRFdmVudEhhbmRs
ZXJMaW5lbm8obGluZW5vK3NyYy5saW5lQ291bnQoKSk7CkluZGV4OiBraHRtbC9odG1sL2h0bWx0
b2tlbml6ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9o
dG1sL2h0bWx0b2tlbml6ZXIuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zNQpkaWZmIC11IC1w
IC1yMS4zNSBraHRtbC9odG1sL2h0bWx0b2tlbml6ZXIuaAotLS0ga2h0bWwvaHRtbC9odG1sdG9r
ZW5pemVyLmgJMzAgSnVuIDIwMDUgMDE6Mjc6NDAgLTAwMDAJMS4zNQorKysga2h0bWwvaHRtbC9o
dG1sdG9rZW5pemVyLmgJNSBKdWwgMjAwNSAyMzoyMDo0NSAtMDAwMApAQCAtMzQsOCArMzQsNiBA
QAogI2luY2x1ZGUgPHFwdHJxdWV1ZS5oPgogCiAjaW5jbHVkZSAibWlzYy9sb2FkZXJfY2xpZW50
LmgiCi0jaW5jbHVkZSAibWlzYy9odG1sdGFncy5oIgotI2luY2x1ZGUgInhtbC9kb21fc3RyaW5n
aW1wbC5oIgogI2luY2x1ZGUgInhtbC94bWxfdG9rZW5pemVyLmgiCiAjaW5jbHVkZSAiaHRtbC9o
dG1sX2VsZW1lbnRpbXBsLmgiCiAjaW5jbHVkZSAieG1sL2RvbV9kb2NpbXBsLmgiCkBAIC00Nyw3
ICs0NSw3IEBACiAjZW5kaWYKIAogY2xhc3MgS0NoYXJzZXRzOwotY2xhc3MgS0hUTUxQYXJzZXI7
CitjbGFzcyBIVE1MUGFyc2VyOwogY2xhc3MgS0hUTUxWaWV3OwogCiBuYW1lc3BhY2UgRE9NIHsK
QEAgLTcwLDIyICs2OCwyNCBAQCBjbGFzcyBUb2tlbgogewogcHVibGljOgogICAgIFRva2VuKCkg
ewotICAgICAgICBpZCA9IDA7CiAgICAgICAgIGF0dHJzID0gMDsKICAgICAgICAgdGV4dCA9IDA7
CisgICAgICAgIGJlZ2luVGFnID0gdHJ1ZTsKICAgICAgICAgZmxhdCA9IGZhbHNlOwogICAgICAg
ICAvL3FEZWJ1ZygibmV3IHRva2VuLCBjcmVhdGluZyAlMDhseCIsIGF0dHJzKTsKICAgICB9CisK
ICAgICB+VG9rZW4oKSB7Ci0gICAgICAgIGlmKGF0dHJzKSBhdHRycy0+ZGVyZWYoKTsKLSAgICAg
ICAgaWYodGV4dCkgdGV4dC0+ZGVyZWYoKTsKKyAgICAgICAgaWYgKGF0dHJzKSBhdHRycy0+ZGVy
ZWYoKTsKKyAgICAgICAgaWYgKHRleHQpIHRleHQtPmRlcmVmKCk7CiAgICAgfQorCiAgICAgdm9p
ZCBhZGRBdHRyaWJ1dGUoRE9NOjpEb2N1bWVudEltcGwqIGRvYywgUUNoYXIqIGJ1ZmZlciwgY29u
c3QgUVN0cmluZyYgYXR0ck5hbWUsIGNvbnN0IERPTTo6QXRvbWljU3RyaW5nJiB2KQogICAgIHsK
ICAgICAgICAgRE9NOjpBdHRyaWJ1dGVJbXBsKiBhID0gMDsKLSAgICAgICAgaWYoYnVmZmVyLT51
bmljb2RlKCkpCisgICAgICAgIGlmIChidWZmZXItPnVuaWNvZGUoKSkKICAgICAgICAgICAgIGEg
PSBuZXcgRE9NOjpNYXBwZWRBdHRyaWJ1dGVJbXBsKGJ1ZmZlci0+dW5pY29kZSgpLCB2KTsKLSAg
ICAgICAgZWxzZSBpZiAoICFhdHRyTmFtZS5pc0VtcHR5KCkgJiYgYXR0ck5hbWUgIT0gIi8iICkK
KyAgICAgICAgZWxzZSBpZiAoIWF0dHJOYW1lLmlzRW1wdHkoKSAmJiBhdHRyTmFtZSAhPSAiLyIp
CiAgICAgICAgICAgICBhID0gbmV3IERPTTo6TWFwcGVkQXR0cmlidXRlSW1wbChkb2MtPmF0dHJJ
ZCgwLCBET006OkRPTVN0cmluZyhhdHRyTmFtZSkuaW1wbGVtZW50YXRpb24oKSwgZmFsc2UpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdik7CiAKQEAgLTk3
LDIzICs5NywzMyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBhdHRycy0+aW5zZXJ0QXR0cmlidXRl
KGEpOwogICAgICAgICB9CiAgICAgfQorCisgICAgYm9vbCBpc09wZW5UYWcoY29uc3QgRE9NOjpR
dWFsaWZpZWROYW1lJiBmdWxsTmFtZSkgY29uc3QgeyByZXR1cm4gYmVnaW5UYWcgJiYgZnVsbE5h
bWUubG9jYWxOYW1lKCkgPT0gdGFnTmFtZTsgfQorICAgIGJvb2wgaXNDbG9zZVRhZyhjb25zdCBE
T006OlF1YWxpZmllZE5hbWUmIGZ1bGxOYW1lKSBjb25zdCB7IHJldHVybiAhYmVnaW5UYWcgJiYg
ZnVsbE5hbWUubG9jYWxOYW1lKCkgPT0gdGFnTmFtZTsgfQorCiAgICAgdm9pZCByZXNldCgpCiAg
ICAgewotICAgICAgICBpZihhdHRycykgeworICAgICAgICBpZiAoYXR0cnMpIHsKICAgICAgICAg
ICAgIGF0dHJzLT5kZXJlZigpOwogICAgICAgICAgICAgYXR0cnMgPSAwOwogICAgICAgICB9Ci0g
ICAgICAgIGlkID0gMDsKLSAgICAgICAgaWYodGV4dCkgeworICAgICAgICAKKyAgICAgICAgdGFn
TmFtZSA9IERPTTo6bnVsbEF0b207CisgICAgICAgIAorICAgICAgICBpZiAodGV4dCkgewogICAg
ICAgICAgICAgdGV4dC0+ZGVyZWYoKTsKICAgICAgICAgICAgIHRleHQgPSAwOwogICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBiZWdpblRhZyA9IHRydWU7CiAgICAgICAgIGZsYXQgPSBmYWxz
ZTsKICAgICB9CisKICAgICBET006Ok5hbWVkTWFwcGVkQXR0ck1hcEltcGwqIGF0dHJzOwogICAg
IERPTTo6RE9NU3RyaW5nSW1wbCogdGV4dDsKLSAgICB1c2hvcnQgaWQ7Ci0gICAgYm9vbCBmbGF0
OworICAgIERPTTo6QXRvbWljU3RyaW5nIHRhZ05hbWU7CisgICAgYm9vbCBiZWdpblRhZyA6IDE7
CisgICAgYm9vbCBmbGF0IDogMTsKIH07CiAKIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTM1
OCw3ICszNjgsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgVG9rZW5pemVyU3RyaW5nIHNyYzsKIAogICAg
IEtDaGFyc2V0cyAqY2hhcnNldHM7Ci0gICAgS0hUTUxQYXJzZXIgKnBhcnNlcjsKKyAgICBIVE1M
UGFyc2VyICpwYXJzZXI7CiAKICAgICBRR3VhcmRlZFB0cjxLSFRNTFZpZXc+IHZpZXc7CiAgICAg
CkluZGV4OiBraHRtbC9taXNjL2RlY29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9XZWJDb3JlL2todG1sL21pc2MvZGVjb2Rlci5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuMzUKZGlmZiAtdSAtcCAtcjEuMzUga2h0bWwvbWlzYy9kZWNvZGVyLmNwcAotLS0ga2h0bWwv
bWlzYy9kZWNvZGVyLmNwcAkyOCBKdW4gMjAwNSAxODo0NzoxMiAtMDAwMAkxLjM1CisrKyBraHRt
bC9taXNjL2RlY29kZXIuY3BwCTUgSnVsIDIwMDUgMjM6MjA6NDYgLTAwMDAKQEAgLTQxLDYgKzQx
LDEyIEBAIHVzaW5nIG5hbWVzcGFjZSBraHRtbDsKICNpbmNsdWRlIDxrZGVidWcuaD4KICNpbmNs
dWRlIDxrbG9jYWxlLmg+CiAKKyNpbmNsdWRlICJodG1sbmFtZXMuaCIKKwordXNpbmcgRE9NOjpB
dG9taWNTdHJpbmc7Cit1c2luZyBET006OkhUTUxOYW1lczsKK3VzaW5nIERPTTo6bnVsbEF0b207
CisKIGNsYXNzIEthbmppQ29kZQogewogcHVibGljOgpAQCAtNTI2LDEyICs1MzIsOCBAQCBRU3Ry
aW5nIERlY29kZXI6OmRlY29kZShjb25zdCBjaGFyICpkYXRhCiAgICAgICAgICAgICAgICAgICAg
ICAgICBsZW4rKzsKICAgICAgICAgICAgICAgICAgICAgfQogCQkgICAgdG1wW2xlbl0gPSAwOwot
ICAgICAgICAgICAgICAgICAgICBpbnQgaWQgPSBraHRtbDo6Z2V0VGFnSUQodG1wLCBsZW4pOwot
ICAgICAgICAgICAgICAgICAgICBpZihlbmQpIGlkICs9IElEX0NMT1NFX1RBRzsKLQotICAgICAg
ICAgICAgICAgICAgICBzd2l0Y2goIGlkICkgewotICAgICAgICAgICAgICAgICAgICBjYXNlIElE
X01FVEE6Ci0gICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgQXRvbWlj
U3RyaW5nIHRhZyh0bXApOworICAgICAgICAgICAgICAgICAgICBpZiAoIWVuZCAmJiB0YWcgPT0g
SFRNTE5hbWVzOjptZXRhKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvdW5kIGEg
bWV0YSB0YWcuLi4KICAgICAgICAgICAgICAgICAgICAgICAgIC8vcHRyICs9IDU7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICogZW5kID0gcHRyOwpAQCAtNTcwLDI4ICs1NzIs
MTEgQEAgUVN0cmluZyBEZWNvZGVyOjpkZWNvZGUoY29uc3QgY2hhciAqZGF0YQogCiAJCQkgICAg
cG9zID0gZW5kcG9zICsgMTsKIAkJCX0KLQkJICAgIH0KLSAgICAgICAgICAgICAgICAgICAgY2Fz
ZSAoSURfTUVUQStJRF9DTE9TRV9UQUcpOgotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX1ND
UklQVDoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAoSURfU0NSSVBUK0lEX0NMT1NFX1RBRyk6
Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfTk9TQ1JJUFQ6Ci0gICAgICAgICAgICAgICAg
ICAgIGNhc2UgKElEX05PU0NSSVBUK0lEX0NMT1NFX1RBRyk6Ci0gICAgICAgICAgICAgICAgICAg
IGNhc2UgSURfU1RZTEU6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgKElEX1NUWUxFK0lEX0NM
T1NFX1RBRyk6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfTElOSzoKLSAgICAgICAgICAg
ICAgICAgICAgY2FzZSAoSURfTElOSytJRF9DTE9TRV9UQUcpOgotICAgICAgICAgICAgICAgICAg
ICBjYXNlIElEX09CSkVDVDoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAoSURfT0JKRUNUK0lE
X0NMT1NFX1RBRyk6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfVElUTEU6Ci0gICAgICAg
ICAgICAgICAgICAgIGNhc2UgKElEX1RJVExFK0lEX0NMT1NFX1RBRyk6Ci0gICAgICAgICAgICAg
ICAgICAgIGNhc2UgSURfQkFTRToKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAoSURfQkFTRStJ
RF9DTE9TRV9UQUcpOgotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0hUTUw6Ci0gICAgICAg
ICAgICAgICAgICAgIGNhc2UgSURfSEVBRDoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAwOgot
ICAgICAgICAgICAgICAgICAgICBjYXNlICgwICsgSURfQ0xPU0VfVEFHICk6Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKwkJICAg
IH0gZWxzZSBpZiAodGFnICE9IEhUTUxOYW1lczo6c2NyaXB0KCkgJiYgdGFnICE9IEhUTUxOYW1l
czo6bm9zY3JpcHQoKSAmJiB0YWcgIT0gSFRNTE5hbWVzOjpzdHlsZSgpICYmCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGFnICE9IEhUTUxOYW1lczo6bGluaygpICYmIHRhZyAhPSBI
VE1MTmFtZXM6Om1ldGEoKSAmJiB0YWcgIT0gSFRNTE5hbWVzOjpvYmplY3QoKSAmJgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRhZyAhPSBIVE1MTmFtZXM6OnRpdGxlKCkgJiYgdGFn
ICE9IEhUTUxOYW1lczo6YmFzZSgpICYmIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IChlbmQgfHwgdGFnICE9IEhUTUxOYW1lczo6aHRtbCgpKSAmJgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIChlbmQgfHwgdGFnICE9IEhUTUxOYW1lczo6aGVhZCgpKSAmJiBpc2FscGhh
KHRtcFswXSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGJvZHkgPSB0cnVlOwogI2lmZGVm
IERFQ09ERV9ERUJVRwogCQkJa2REZWJ1ZyggNjAwNSApIDw8ICJEZWNvZGVyOiBubyBjaGFyc2V0
IGZvdW5kLiBJZD0iIDw8IGlkIDw8IGVuZGw7CkluZGV4OiBraHRtbC9taXNjL2h0bWxoYXNoZXMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL21pc2MvaHRt
bGhhc2hlcy5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTAKZGlmZiAtdSAtcCAtcjEuMTAg
a2h0bWwvbWlzYy9odG1saGFzaGVzLmNwcAotLS0ga2h0bWwvbWlzYy9odG1saGFzaGVzLmNwcAk1
IEphbiAyMDA1IDIyOjU2OjQ2IC0wMDAwCTEuMTAKKysrIGtodG1sL21pc2MvaHRtbGhhc2hlcy5j
cHAJNSBKdWwgMjAwNSAyMzoyMDo0NiAtMDAwMApAQCAtMjUsMjIgKzI1LDEzIEBACiAvLyB0dXJu
IG9mZiBpbmxpbmluZyB0byB2b2lkIHdhcm5pbmcgd2l0aCBuZXdlciBnY2MKICN1bmRlZiBfX2lu
bGluZQogI2RlZmluZSBfX2lubGluZQotI2luY2x1ZGUgImh0bWx0YWdzLmMiCiAjaW5jbHVkZSAi
aHRtbGF0dHJzLmMiCiAjdW5kZWYgX19pbmxpbmUKIAotdW5zaWduZWQgc2hvcnQga2h0bWw6Omdl
dFRhZ0lEKGNvbnN0IGNoYXIgKnRhZ1N0ciwgaW50IGxlbikKK3Vuc2lnbmVkIHNob3J0IGtodG1s
OjpnZXRBdHRySUQoY29uc3QgY2hhciAqYXR0clN0ciwgaW50IGxlbikKIHsKLSAgICBjb25zdCBz
dHJ1Y3QgdGFncyAqdGFnUHRyID0gZmluZFRhZyh0YWdTdHIsIGxlbik7Ci0gICAgaWYgKCF0YWdQ
dHIpCisgICAgY29uc3Qgc3RydWN0IGF0dHJzICphdHRyUHRyID0gZmluZEF0dHIoYXR0clN0ciwg
bGVuKTsKKyAgICBpZiAoIWF0dHJQdHIpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiB0
YWdQdHItPmlkOwotfQotCi11bnNpZ25lZCBzaG9ydCBraHRtbDo6Z2V0QXR0cklEKGNvbnN0IGNo
YXIgKnRhZ1N0ciwgaW50IGxlbikKLXsKLSAgICBjb25zdCBzdHJ1Y3QgYXR0cnMgKnRhZ1B0ciA9
IGZpbmRBdHRyKHRhZ1N0ciwgbGVuKTsKLSAgICBpZiAoIXRhZ1B0cikKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgcmV0dXJuIHRhZ1B0ci0+aWQ7CisgICAgcmV0dXJuIGF0dHJQdHItPmlkOwogfQpJ
bmRleDoga2h0bWwvbWlzYy9odG1saGFzaGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L1dlYkNvcmUva2h0bWwvbWlzYy9odG1saGFzaGVzLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuNgpkaWZmIC11IC1wIC1yMS42IGtodG1sL21pc2MvaHRtbGhhc2hlcy5oCi0tLSBraHRtbC9t
aXNjL2h0bWxoYXNoZXMuaAk1IEphbiAyMDA1IDIyOjU2OjQ2IC0wMDAwCTEuNgorKysga2h0bWwv
bWlzYy9odG1saGFzaGVzLmgJNSBKdWwgMjAwNSAyMzoyMDo0NiAtMDAwMApAQCAtMjMsMTIgKzIz
LDEwIEBACiAjaWZuZGVmIEhUTUxIQVNIRVNfSAogI2RlZmluZSBIVE1MSEFTSEVTX0gKIAotI2lu
Y2x1ZGUgImh0bWx0YWdzLmgiCiAjaW5jbHVkZSAiaHRtbGF0dHJzLmgiCiAKIG5hbWVzcGFjZSBr
aHRtbAogewotICB1bnNpZ25lZCBzaG9ydCBnZXRUYWdJRChjb25zdCBjaGFyICp0YWdTdHIsIGlu
dCBsZW4pOwogICB1bnNpZ25lZCBzaG9ydCBnZXRBdHRySUQoY29uc3QgY2hhciAqdGFnU3RyLCBp
bnQgbGVuKTsKIH0KIApJbmRleDoga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9hcHBsZXQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3JlbmRlcmluZy9yZW5k
ZXJfYXBwbGV0LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zMApkaWZmIC11IC1wIC1yMS4z
MCBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2FwcGxldC5jcHAKLS0tIGtodG1sL3JlbmRlcmluZy9y
ZW5kZXJfYXBwbGV0LmNwcAkxMCBNYXkgMjAwNSAxODo0MjowMyAtMDAwMAkxLjMwCisrKyBraHRt
bC9yZW5kZXJpbmcvcmVuZGVyX2FwcGxldC5jcHAJNSBKdWwgMjAwNSAyMzoyMDo0NiAtMDAwMApA
QCAtMzYsNyArMzYsNiBAQAogI2lmbmRlZiBRX1dTX1FXUyAvLyBXZSBkb24ndCBoYXZlIEphdmEg
aW4gUXQgRW1iZWRkZWQKIAogI2luY2x1ZGUgImphdmEva2phdmFhcHBsZXR3aWRnZXQuaCIKLSNp
bmNsdWRlICJtaXNjL2h0bWx0YWdzLmgiCiAjaW5jbHVkZSAiaHRtbC9odG1sX29iamVjdGltcGwu
aCIKIAogdXNpbmcgbmFtZXNwYWNlIGtodG1sOwpAQCAtMTAzLDcgKzEwMiw3IEBAIHZvaWQgUmVu
ZGVyQXBwbGV0OjpjcmVhdGVXaWRnZXRJZk5lY2Vzc2EKICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX2hlaWdodCAtIGJvcmRlclRvcCgpIC0gYm9yZGVyQm90dG9tKCkgLSBwYWRkaW5nVG9wKCkg
LSBwYWRkaW5nQm90dG9tKCk7CiAgICAgICAgICAgICBOb2RlSW1wbCAqY2hpbGQgPSBlbGVtZW50
KCktPmZpcnN0Q2hpbGQoKTsKICAgICAgICAgICAgIHdoaWxlIChjaGlsZCkgewotICAgICAgICAg
ICAgICAgIGlmIChjaGlsZC0+aWQoKSA9PSBJRF9QQVJBTSkgeworICAgICAgICAgICAgICAgIGlm
IChjaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnBhcmFtKCkpKSB7CiAgICAgICAgICAgICAg
ICAgICAgIEhUTUxQYXJhbUVsZW1lbnRJbXBsICpwID0gc3RhdGljX2Nhc3Q8SFRNTFBhcmFtRWxl
bWVudEltcGwgKj4oY2hpbGQpOwogICAgICAgICAgICAgICAgICAgICBtX2FyZ3MuaW5zZXJ0KHAt
Pm5hbWUoKS5zdHJpbmcoKSwgcC0+dmFsdWUoKS5zdHJpbmcoKSk7CiAgICAgICAgICAgICAgICAg
fQpJbmRleDoga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9ibG9jay5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9ibG9jay5jcHAs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTg1CmRpZmYgLXUgLXAgLXIxLjE4NSBraHRtbC9yZW5k
ZXJpbmcvcmVuZGVyX2Jsb2NrLmNwcAotLS0ga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9ibG9jay5j
cHAJMzAgSnVuIDIwMDUgMDE6Mjc6NDAgLTAwMDAJMS4xODUKKysrIGtodG1sL3JlbmRlcmluZy9y
ZW5kZXJfYmxvY2suY3BwCTUgSnVsIDIwMDUgMjM6MjA6NDkgLTAwMDAKQEAgLTQwLDcgKzQwLDYg
QEAKIAogI2luY2x1ZGUgImtodG1sdmlldy5oIgogI2luY2x1ZGUgImtodG1sX3BhcnQuaCIKLSNp
bmNsdWRlICJodG1sdGFncy5oIgogCiB1c2luZyBuYW1lc3BhY2UgRE9NOwogCkBAIC00NzUsNyAr
NDc0LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2soYm9vbCByZWxheQogICAgICAg
ICBtX3RvcE1hcmdpblF1aXJrID0gc3R5bGUoKS0+bWFyZ2luVG9wKCkucXVpcms7CiAgICAgICAg
IG1fYm90dG9tTWFyZ2luUXVpcmsgPSBzdHlsZSgpLT5tYXJnaW5Cb3R0b20oKS5xdWlyazsKIAot
ICAgICAgICBpZiAoZWxlbWVudCgpICYmIGVsZW1lbnQoKS0+aWQoKSA9PSBJRF9GT1JNICYmIGVs
ZW1lbnQoKS0+aXNNYWxmb3JtZWQoKSkKKyAgICAgICAgaWYgKGVsZW1lbnQoKSAmJiBlbGVtZW50
KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpmb3JtKCkpICYmIGVsZW1lbnQoKS0+aXNNYWxmb3Jt
ZWQoKSkKICAgICAgICAgICAgIC8vIFNlZSBpZiB0aGlzIGZvcm0gaXMgbWFsZm9ybWVkIChpLmUu
LCB1bmNsb3NlZCkuIElmIHNvLCBkb24ndCBnaXZlIHRoZSBmb3JtCiAgICAgICAgICAgICAvLyBh
IGJvdHRvbSBtYXJnaW4uCiAgICAgICAgICAgICBtX21heEJvdHRvbVBvc01hcmdpbiA9IG1fbWF4
Qm90dG9tTmVnTWFyZ2luID0gMDsKSW5kZXg6IGtodG1sL3JlbmRlcmluZy9yZW5kZXJfYm94LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9yZW5kZXJpbmcv
cmVuZGVyX2JveC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTU0CmRpZmYgLXUgLXAgLXIx
LjE1NCBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2JveC5jcHAKLS0tIGtodG1sL3JlbmRlcmluZy9y
ZW5kZXJfYm94LmNwcAkxMSBKdW4gMjAwNSAwNTowMToxNyAtMDAwMAkxLjE1NAorKysga2h0bWwv
cmVuZGVyaW5nL3JlbmRlcl9ib3guY3BwCTUgSnVsIDIwMDUgMjM6MjA6NTAgLTAwMDAKQEAgLTI1
Niw3ICsyNTYsNyBAQCB2b2lkIFJlbmRlckJveDo6cGFpbnRSb290Qm94RGVjb3JhdGlvbnMoCiAg
ICAgICAgIC8vIGFub255bW91cyBibG9ja3MgY3JlYXRlZCBieSBpbmxpbmUgPGJvZHk+IHRhZ3Mg
ZXRjLiAgV2UgY2FuIGxvY2F0ZSB0aGUgPGJvZHk+CiAgICAgICAgIC8vIHJlbmRlciBvYmplY3Qg
dmVyeSBlYXNpbHkgdmlhIHRoZSBET00uCiAgICAgICAgIEhUTUxFbGVtZW50SW1wbCogYm9keSA9
IGRvY3VtZW50KCktPmJvZHkoKTsKLSAgICAgICAgUmVuZGVyT2JqZWN0KiBib2R5T2JqZWN0ID0g
KGJvZHkgJiYgYm9keS0+aWQoKSA9PSBJRF9CT0RZKSA/IGJvZHktPnJlbmRlcmVyKCkgOiAwOwor
ICAgICAgICBSZW5kZXJPYmplY3QqIGJvZHlPYmplY3QgPSAoYm9keSAmJiBib2R5LT5oYXNMb2Nh
bE5hbWUoSFRNTE5hbWVzOjpib2R5KCkpKSA/IGJvZHktPnJlbmRlcmVyKCkgOiAwOwogICAgICAg
ICBpZiAoYm9keU9iamVjdCkgewogICAgICAgICAgICAgYmdMYXllciA9IGJvZHlPYmplY3QtPnN0
eWxlKCktPmJhY2tncm91bmRMYXllcnMoKTsKICAgICAgICAgICAgIGJnQ29sb3IgPSBib2R5T2Jq
ZWN0LT5zdHlsZSgpLT5iYWNrZ3JvdW5kQ29sb3IoKTsKQEAgLTM2OSw3ICszNjksNyBAQCB2b2lk
IFJlbmRlckJveDo6cGFpbnRCYWNrZ3JvdW5kRXh0ZW5kZWQoCiAgICAgICAgIGJvb2wgaXNUcmFu
c3BhcmVudDsKICAgICAgICAgRE9NOjpOb2RlSW1wbCogZWx0ID0gZG9jdW1lbnQoKS0+b3duZXJF
bGVtZW50KCk7CiAgICAgICAgIGlmIChlbHQpIHsKLSAgICAgICAgICAgIGlmIChlbHQtPmlkKCkg
PT0gSURfRlJBTUUpCisgICAgICAgICAgICBpZiAoZWx0LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
ZnJhbWUoKSkpCiAgICAgICAgICAgICAgICAgaXNUcmFuc3BhcmVudCA9IGZhbHNlOwogICAgICAg
ICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gTG9jYXRlIHRoZSA8Ym9keT4gZWxlbWVu
dCB1c2luZyB0aGUgRE9NLiAgVGhpcyBpcyBlYXNpZXIgdGhhbiB0cnlpbmcKQEAgLTM3Nyw3ICsz
NzcsNyBAQCB2b2lkIFJlbmRlckJveDo6cGFpbnRCYWNrZ3JvdW5kRXh0ZW5kZWQoCiAgICAgICAg
ICAgICAgICAgLy8gYW5vbnltb3VzIGJsb2NrcyBjcmVhdGVkIGJ5IGlubGluZSA8Ym9keT4gdGFn
cyBldGMuICBXZSBjYW4gbG9jYXRlIHRoZSA8Ym9keT4KICAgICAgICAgICAgICAgICAvLyByZW5k
ZXIgb2JqZWN0IHZlcnkgZWFzaWx5IHZpYSB0aGUgRE9NLgogICAgICAgICAgICAgICAgIEhUTUxF
bGVtZW50SW1wbCogYm9keSA9IGRvY3VtZW50KCktPmJvZHkoKTsKLSAgICAgICAgICAgICAgICBp
c1RyYW5zcGFyZW50ID0gIWJvZHkgfHwgYm9keS0+aWQoKSAhPSBJRF9GUkFNRVNFVDsgLy8gQ2Fu
J3Qgc2Nyb2xsIGEgZnJhbWVzZXQgZG9jdW1lbnQgYW55d2F5LgorICAgICAgICAgICAgICAgIGlz
VHJhbnNwYXJlbnQgPSAhYm9keSB8fCAhYm9keS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6ZnJh
bWVzZXQoKSk7IC8vIENhbid0IHNjcm9sbCBhIGZyYW1lc2V0IGRvY3VtZW50IGFueXdheS4KICAg
ICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBpc1RyYW5zcGFyZW50ID0g
Y2FudmFzKCktPnZpZXcoKS0+aXNUcmFuc3BhcmVudCgpOwpJbmRleDoga2h0bWwvcmVuZGVyaW5n
L3JlbmRlcl9jYW52YXNpbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dl
YkNvcmUva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9jYW52YXNpbWFnZS5jcHAsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuMTEKZGlmZiAtdSAtcCAtcjEuMTEga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9j
YW52YXNpbWFnZS5jcHAKLS0tIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfY2FudmFzaW1hZ2UuY3Bw
CTI1IE1heSAyMDA1IDAxOjMzOjIyIC0wMDAwCTEuMTEKKysrIGtodG1sL3JlbmRlcmluZy9yZW5k
ZXJfY2FudmFzaW1hZ2UuY3BwCTUgSnVsIDIwMDUgMjM6MjA6NTEgLTAwMDAKQEAgLTM3LDEwICsz
Nyw4IEBACiAjaW5jbHVkZSAiY3NzL2Nzc2hlbHBlci5oIgogI2luY2x1ZGUgIm1pc2MvaGVscGVy
LmgiCiAjaW5jbHVkZSAibWlzYy9odG1sYXR0cnMuaCIKLSNpbmNsdWRlICJtaXNjL2h0bWx0YWdz
LmgiCiAjaW5jbHVkZSAiaHRtbC9odG1sX2Zvcm1pbXBsLmgiCiAjaW5jbHVkZSAiaHRtbC9odG1s
X2NhbnZhc2ltcGwuaCIKLSNpbmNsdWRlICJodG1sL2R0ZC5oIgogI2luY2x1ZGUgInhtbC9kb20y
X2V2ZW50c2ltcGwuaCIKICNpbmNsdWRlICJodG1sL2h0bWxfZG9jdW1lbnRpbXBsLmgiCiAjaW5j
bHVkZSA8bWF0aC5oPgpAQCAtMTg2LDcgKzE4NCw3IEBAIHZvaWQgUmVuZGVyQ2FudmFzSW1hZ2U6
OnBhaW50KFBhaW50SW5mbyYKICAgICB9CiAgICAgCiAgICAgaWYgKGRyYXduSW1hZ2UoKSkgewot
ICAgICAgICBIVE1MQ2FudmFzRWxlbWVudEltcGwqIGkgPSAoZWxlbWVudCgpICYmIGVsZW1lbnQo
KS0+aWQoKSA9PSBJRF9DQU5WQVMpID8gc3RhdGljX2Nhc3Q8SFRNTENhbnZhc0VsZW1lbnRJbXBs
Kj4oZWxlbWVudCgpKSA6IDA7CisgICAgICAgIEhUTUxDYW52YXNFbGVtZW50SW1wbCogaSA9IChl
bGVtZW50KCkgJiYgZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Y2FudmFzKCkpKSA/
IHN0YXRpY19jYXN0PEhUTUxDYW52YXNFbGVtZW50SW1wbCo+KGVsZW1lbnQoKSkgOiAwOwogICAg
ICAgICBpbnQgb2xkT3BlcmF0aW9uID0gMDsKICAgICAgICAgaWYgKGkgJiYgIWktPmNvbXBvc2l0
ZU9wZXJhdG9yKCkuaXNOdWxsKCkpewogICAgICAgICAgICAgb2xkT3BlcmF0aW9uID0gUVBhaW50
ZXI6OmdldENvbXBvc2l0ZU9wZXJhdGlvbihwLT5jdXJyZW50Q29udGV4dCgpKTsKSW5kZXg6IGto
dG1sL3JlbmRlcmluZy9yZW5kZXJfZmxvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L1dlYkNvcmUva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9mbG93LmNwcCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS4xNjAKZGlmZiAtdSAtcCAtcjEuMTYwIGtodG1sL3JlbmRlcmluZy9yZW5kZXJf
Zmxvdy5jcHAKLS0tIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfZmxvdy5jcHAJMTEgTWF5IDIwMDUg
MDI6MTA6MTAgLTAwMDAJMS4xNjAKKysrIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfZmxvdy5jcHAJ
NSBKdWwgMjAwNSAyMzoyMDo1MSAtMDAwMApAQCAtNDAsNyArNDAsNiBAQAogI2luY2x1ZGUgInJl
bmRlcl9saW5lLmgiCiAKICNpbmNsdWRlICJraHRtbHZpZXcuaCIKLSNpbmNsdWRlICJodG1sdGFn
cy5oIgogCiB1c2luZyBuYW1lc3BhY2UgRE9NOwogdXNpbmcgbmFtZXNwYWNlIGtodG1sOwpAQCAt
NjU0LDcgKzY1Myw3IEBAIHZvaWQgUmVuZGVyRmxvdzo6YWRkRm9jdXNSaW5nUmVjdHMoUVBhaW4K
ICAgICAvLyBPbmx5IHBhaW50IGZvY3VzIHJpbmcgYXJvdW5kIG91dGVybW9zdCBjb250ZW50ZWRp
dGFibGUgZWxlbWVudC4KICAgICAvLyBCdXQgc2tpcCB0aGUgYm9keSBlbGVtZW50IGlmIGl0IGlz
IG91dGVybW9zdC4KICAgICBpZiAoZWxlbWVudCgpICYmIGVsZW1lbnQoKS0+aXNDb250ZW50RWRp
dGFibGUoKSkgewotICAgICAgICBpZiAoZWxlbWVudCgpLT5wYXJlbnROb2RlKCkgJiYgIWVsZW1l
bnQoKS0+cGFyZW50Tm9kZSgpLT5pc0NvbnRlbnRFZGl0YWJsZSgpICYmIGVsZW1lbnQoKS0+aWQo
KSAhPSBJRF9CT0RZKQorICAgICAgICBpZiAoZWxlbWVudCgpLT5wYXJlbnROb2RlKCkgJiYgIWVs
ZW1lbnQoKS0+cGFyZW50Tm9kZSgpLT5pc0NvbnRlbnRFZGl0YWJsZSgpICYmICFlbGVtZW50KCkt
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpib2R5KCkpKQogICAgICAgICAgICAgcC0+YWRkRm9jdXNS
aW5nUmVjdChfdHgsIF90eSwgd2lkdGgoKSwgaGVpZ2h0KCkpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQpJbmRleDoga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9mb3JtLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9yZW5kZXJpbmcvcmVuZGVyX2Zvcm0uY3Bw
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEwOApkaWZmIC11IC1wIC1yMS4xMDgga2h0bWwvcmVu
ZGVyaW5nL3JlbmRlcl9mb3JtLmNwcAotLS0ga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9mb3JtLmNw
cAkyNCBKdW4gMjAwNSAwNTo1MzoyOCAtMDAwMAkxLjEwOAorKysga2h0bWwvcmVuZGVyaW5nL3Jl
bmRlcl9mb3JtLmNwcAk1IEp1bCAyMDA1IDIzOjIwOjUzIC0wMDAwCkBAIC03OTcsNyArNzk3LDcg
QEAgUmVuZGVyT2JqZWN0KiBSZW5kZXJGaWVsZHNldDo6ZmluZExlZ2VuZAogewogICAgIGZvciAo
UmVuZGVyT2JqZWN0KiBsZWdlbmQgPSBmaXJzdENoaWxkKCk7IGxlZ2VuZDsgbGVnZW5kID0gbGVn
ZW5kLT5uZXh0U2libGluZygpKSB7CiAgICAgICBpZiAoIWxlZ2VuZC0+aXNGbG9hdGluZ09yUG9z
aXRpb25lZCgpICYmIGxlZ2VuZC0+ZWxlbWVudCgpICYmCi0gICAgICAgICAgbGVnZW5kLT5lbGVt
ZW50KCktPmlkKCkgPT0gSURfTEVHRU5EKQorICAgICAgICAgIGxlZ2VuZC0+ZWxlbWVudCgpLT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6bGVnZW5kKCkpKQogICAgICAgICByZXR1cm4gbGVnZW5kOwog
ICAgIH0KICAgICByZXR1cm4gMDsKQEAgLTExOTEsNyArMTE5MSw3IEBAIHZvaWQgUmVuZGVyU2Vs
ZWN0Ojp1cGRhdGVGcm9tRWxlbWVudCgpCiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxLQ29tYm9C
b3gqPihtX3dpZGdldCktPmNsZWFyKCk7CiAKICAgICAgICAgZm9yIChsaXN0SW5kZXggPSAwOyBs
aXN0SW5kZXggPCBpbnQobGlzdEl0ZW1zLnNpemUoKSk7IGxpc3RJbmRleCsrKSB7Ci0gICAgICAg
ICAgICBpZiAobGlzdEl0ZW1zW2xpc3RJbmRleF0tPmlkKCkgPT0gSURfT1BUR1JPVVApIHsKKyAg
ICAgICAgICAgIGlmIChsaXN0SXRlbXNbbGlzdEluZGV4XS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
Om9wdGdyb3VwKCkpKSB7CiAgICAgICAgICAgICAgICAgUVN0cmluZyBsYWJlbCA9IGxpc3RJdGVt
c1tsaXN0SW5kZXhdLT5nZXRBdHRyaWJ1dGUoQVRUUl9MQUJFTCkuc3RyaW5nKCk7CiAgICAgICAg
ICAgICAgICAgbGFiZWwucmVwbGFjZShRQ2hhcignXFwnKSwgYmFja3NsYXNoQXNDdXJyZW5jeVN5
bWJvbCgpKTsKIApAQCAtMTIxNSwxNCArMTIxNSwxNCBAQCB2b2lkIFJlbmRlclNlbGVjdDo6dXBk
YXRlRnJvbUVsZW1lbnQoKQogICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxLQ29tYm9C
b3gqPihtX3dpZGdldCktPmluc2VydEl0ZW0obGFiZWwsIGxpc3RJbmRleCk7CiAjZW5kaWYKICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGxpc3RJdGVtc1tsaXN0SW5kZXhdLT5p
ZCgpID09IElEX09QVElPTikgeworICAgICAgICAgICAgZWxzZSBpZiAobGlzdEl0ZW1zW2xpc3RJ
bmRleF0tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvcHRpb24oKSkpIHsKICAgICAgICAgICAgICAg
ICBRU3RyaW5nIGl0ZW1UZXh0ID0gc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnRJbXBsKj4o
bGlzdEl0ZW1zW2xpc3RJbmRleF0pLT50ZXh0KCkuc3RyaW5nKCk7CiAgICAgICAgICAgICAgICAg
aXRlbVRleHQucmVwbGFjZShRQ2hhcignXFwnKSwgYmFja3NsYXNoQXNDdXJyZW5jeVN5bWJvbCgp
KTsKIAogICAgICAgICAgICAgICAgIC8vIEluIFdpbklFLCBsZWFkaW5nIGFuZCB0cmFpbGluZyB3
aGl0ZXNwYWNlIGlzIGlnbm9yZWQgaW4gb3B0aW9ucy4gV2UgbWF0Y2ggdGhpcyBiZWhhdmlvci4K
ICAgICAgICAgICAgICAgICBpdGVtVGV4dCA9IGl0ZW1UZXh0LnN0cmlwV2hpdGVTcGFjZSgpOwog
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChsaXN0SXRlbXNbbGlzdEluZGV4
XS0+cGFyZW50Tm9kZSgpLT5pZCgpID09IElEX09QVEdST1VQKQorICAgICAgICAgICAgICAgIGlm
IChsaXN0SXRlbXNbbGlzdEluZGV4XS0+cGFyZW50Tm9kZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6b3B0Z3JvdXAoKSkpCiAgICAgICAgICAgICAgICAgICAgIGl0ZW1UZXh0LnByZXBlbmQoIiAg
ICAiKTsKIAogI2lmIEFQUExFX0NIQU5HRVMKQEAgLTEzNDgsNyArMTM0OCw3IEBAIHZvaWQgUmVu
ZGVyU2VsZWN0OjpsYXlvdXQoICkKIAogICAgIGJvb2wgZm91bmRPcHRpb24gPSBmYWxzZTsKICAg
ICBmb3IgKHVpbnQgaSA9IDA7IGkgPCBsaXN0SXRlbXMuc2l6ZSgpICYmICFmb3VuZE9wdGlvbjsg
aSsrKQotCWZvdW5kT3B0aW9uID0gKGxpc3RJdGVtc1tpXS0+aWQoKSA9PSBJRF9PUFRJT04pOwor
CWZvdW5kT3B0aW9uID0gKGxpc3RJdGVtc1tpXS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9wdGlv
bigpKSk7CiAKICAgICBtX3dpZGdldC0+c2V0RW5hYmxlZChmb3VuZE9wdGlvbiAmJiAhIGVsZW1l
bnQoKS0+ZGlzYWJsZWQoKSk7CiB9CkBAIC0xMzYyLDEyICsxMzYyLDEyIEBAIHZvaWQgUmVuZGVy
U2VsZWN0OjpzbG90U2VsZWN0ZWQoaW50IGluZGUKICAgICBRTWVtQXJyYXk8SFRNTEdlbmVyaWNG
b3JtRWxlbWVudEltcGwqPiBsaXN0SXRlbXMgPSBlbGVtZW50KCktPmxpc3RJdGVtcygpOwogICAg
IGlmKGluZGV4ID49IDAgJiYgaW5kZXggPCBpbnQobGlzdEl0ZW1zLnNpemUoKSkpCiAgICAgewot
ICAgICAgICBib29sIGZvdW5kID0gKCBsaXN0SXRlbXNbaW5kZXhdLT5pZCgpID09IElEX09QVElP
TiApOworICAgICAgICBib29sIGZvdW5kID0gKGxpc3RJdGVtc1tpbmRleF0tPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjpvcHRpb24oKSkpOwogCiAgICAgICAgIGlmICggIWZvdW5kICkgewogICAgICAg
ICAgICAgLy8gdGhpcyBvbmUgaXMgbm90IHNlbGVjdGFibGUsICB3ZSBuZWVkIHRvIGZpbmQgYW4g
b3B0aW9uIGVsZW1lbnQKICAgICAgICAgICAgIHdoaWxlICggKCB1bnNpZ25lZCApIGluZGV4IDwg
bGlzdEl0ZW1zLnNpemUoKSApIHsKLSAgICAgICAgICAgICAgICBpZiAoIGxpc3RJdGVtc1tpbmRl
eF0tPmlkKCkgPT0gSURfT1BUSU9OICkgeworICAgICAgICAgICAgICAgIGlmIChsaXN0SXRlbXNb
aW5kZXhdLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpKSB7CiAgICAgICAgICAgICAg
ICAgICAgIGZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgfQpAQCAtMTM3Niw3ICsxMzc2LDcgQEAgdm9pZCBSZW5kZXJTZWxlY3Q6OnNsb3RT
ZWxlY3RlZChpbnQgaW5kZQogCiAgICAgICAgICAgICBpZiAoICFmb3VuZCApIHsKICAgICAgICAg
ICAgICAgICB3aGlsZSAoIGluZGV4ID49IDAgKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgg
bGlzdEl0ZW1zW2luZGV4XS0+aWQoKSA9PSBJRF9PUFRJT04gKSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChsaXN0SXRlbXNbaW5kZXhdLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkp
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMTM5MCw3ICsxMzkw
LDcgQEAgdm9pZCBSZW5kZXJTZWxlY3Q6OnNsb3RTZWxlY3RlZChpbnQgaW5kZQogICAgICAgICAg
ICAgICAgIHN0YXRpY19jYXN0PENvbWJvQm94V2lkZ2V0Kj4oIG1fd2lkZ2V0ICktPnNldEN1cnJl
bnRJdGVtKCBpbmRleCApOwogCiAgICAgICAgICAgICBmb3IgKCB1bnNpZ25lZCBpbnQgaSA9IDA7
IGkgPCBsaXN0SXRlbXMuc2l6ZSgpOyArK2kgKQotICAgICAgICAgICAgICAgIGlmICggbGlzdEl0
ZW1zW2ldLT5pZCgpID09IElEX09QVElPTiAmJiBpICE9ICh1bnNpZ25lZCBpbnQpIGluZGV4ICkK
KyAgICAgICAgICAgICAgICBpZiAobGlzdEl0ZW1zW2ldLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
b3B0aW9uKCkpICYmIGkgIT0gKHVuc2lnbmVkIGludCkgaW5kZXgpCiAgICAgICAgICAgICAgICAg
ICAgIHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50SW1wbCo+KCBsaXN0SXRlbXNbaV0gKS0+
bV9zZWxlY3RlZCA9IGZhbHNlOwogCiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxIVE1MT3B0aW9u
RWxlbWVudEltcGwqPihsaXN0SXRlbXNbaW5kZXhdKS0+bV9zZWxlY3RlZCA9IHRydWU7CkBAIC0x
NDExLDcgKzE0MTEsNyBAQCB2b2lkIFJlbmRlclNlbGVjdDo6c2xvdFNlbGVjdGlvbkNoYW5nZWQo
CiAgICAgZm9yICggdW5zaWduZWQgaSA9IDA7IGkgPCBsaXN0SXRlbXMuY291bnQoKTsgaSsrICkK
ICAgICAgICAgLy8gZG9uJ3QgdXNlIHNldFNlbGVjdGVkKCkgaGVyZSBiZWNhdXNlIGl0IHdpbGwg
Y2F1c2UgdXMgdG8gYmUgY2FsbGVkCiAgICAgICAgIC8vIGFnYWluIHdpdGggdXBkYXRlU2VsZWN0
aW9uLgotICAgICAgICBpZiAoIGxpc3RJdGVtc1tpXS0+aWQoKSA9PSBJRF9PUFRJT04gKQorICAg
ICAgICBpZiAobGlzdEl0ZW1zW2ldLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpKQog
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnRJbXBsKj4oIGxpc3RJdGVt
c1tpXSApCiAgICAgICAgICAgICAgICAgLT5tX3NlbGVjdGVkID0gc3RhdGljX2Nhc3Q8S0xpc3RC
b3gqPiggbV93aWRnZXQgKS0+aXNTZWxlY3RlZCggaSApOwogCkBAIC0xNDUzLDcgKzE0NTMsNyBA
QCB2b2lkIFJlbmRlclNlbGVjdDo6dXBkYXRlU2VsZWN0aW9uKCkKICAgICAgICAgLy8gaWYgbXVs
dGktc2VsZWN0LCB3ZSBzZWxlY3Qgb25seSB0aGUgbmV3IHNlbGVjdGVkIGluZGV4CiAgICAgICAg
IEtMaXN0Qm94ICpsaXN0Qm94ID0gc3RhdGljX2Nhc3Q8S0xpc3RCb3gqPihtX3dpZGdldCk7CiAg
ICAgICAgIGZvciAoaSA9IDA7IGkgPCBpbnQobGlzdEl0ZW1zLnNpemUoKSk7IGkrKykKLSAgICAg
ICAgICAgIGxpc3RCb3gtPnNldFNlbGVjdGVkKGksbGlzdEl0ZW1zW2ldLT5pZCgpID09IElEX09Q
VElPTiAmJgorICAgICAgICAgICAgbGlzdEJveC0+c2V0U2VsZWN0ZWQoaSwgbGlzdEl0ZW1zW2ld
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpICYmCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50SW1wbCo+KGxpc3RJdGVt
c1tpXSktPnNlbGVjdGVkKCkpOwogICAgIH0KICAgICBlbHNlIHsKQEAgLTE0NjEsNyArMTQ2MSw3
IEBAIHZvaWQgUmVuZGVyU2VsZWN0Ojp1cGRhdGVTZWxlY3Rpb24oKQogICAgICAgICB1bnNpZ25l
ZCBmaXJzdE9wdGlvbiA9IGxpc3RJdGVtcy5zaXplKCk7CiAgICAgICAgIGkgPSBsaXN0SXRlbXMu
c2l6ZSgpOwogICAgICAgICB3aGlsZSAoaS0tKQotICAgICAgICAgICAgaWYgKGxpc3RJdGVtc1tp
XS0+aWQoKSA9PSBJRF9PUFRJT04pIHsKKyAgICAgICAgICAgIGlmIChsaXN0SXRlbXNbaV0tPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjpvcHRpb24oKSkpIHsKICAgICAgICAgICAgICAgICBpZiAoZm91
bmQpCiAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50SW1w
bCo+KGxpc3RJdGVtc1tpXSktPm1fc2VsZWN0ZWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBl
bHNlIGlmIChzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudEltcGwqPihsaXN0SXRlbXNbaV0p
LT5zZWxlY3RlZCgpKSB7CkluZGV4OiBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2ZyYW1lcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvcmVuZGVyaW5nL3Jl
bmRlcl9mcmFtZXMuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjY5CmRpZmYgLXUgLXAgLXIx
LjY5IGtodG1sL3JlbmRlcmluZy9yZW5kZXJfZnJhbWVzLmNwcAotLS0ga2h0bWwvcmVuZGVyaW5n
L3JlbmRlcl9mcmFtZXMuY3BwCTEwIE1heSAyMDA1IDE4OjQyOjA0IC0wMDAwCTEuNjkKKysrIGto
dG1sL3JlbmRlcmluZy9yZW5kZXJfZnJhbWVzLmNwcAk1IEp1bCAyMDA1IDIzOjIwOjUzIC0wMDAw
CkBAIC0zNCw3ICszNCw2IEBACiAjaW5jbHVkZSAibWlzYy9odG1sYXR0cnMuaCIKICNpbmNsdWRl
ICJ4bWwvZG9tMl9ldmVudHNpbXBsLmgiCiAjaW5jbHVkZSAieG1sL2RvbV9kb2NpbXBsLmgiCi0j
aW5jbHVkZSAibWlzYy9odG1sdGFncy5oIgogI2luY2x1ZGUgImtodG1sdmlldy5oIgogI2luY2x1
ZGUgImtodG1sX3BhcnQuaCIKICNpbmNsdWRlICJyZW5kZXJfYXJlbmEuaCIKQEAgLTY2OSwxNyAr
NjY4LDE3IEBAIHZvaWQgUmVuZGVyUGFydE9iamVjdDo6dXBkYXRlV2lkZ2V0KCkKIAogICBzZXRO
ZWVkc0xheW91dEFuZE1pbk1heFJlY2FsYygpOwogCi0gIGlmIChlbGVtZW50KCktPmlkKCkgPT0g
SURfT0JKRUNUKSB7CisgIGlmIChlbGVtZW50KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvYmpl
Y3QoKSkpIHsKIAogICAgICAgSFRNTE9iamVjdEVsZW1lbnRJbXBsICpvID0gc3RhdGljX2Nhc3Q8
SFRNTE9iamVjdEVsZW1lbnRJbXBsICo+KGVsZW1lbnQoKSk7CiAKICAgICAgIC8vIENoZWNrIGZv
ciBhIGNoaWxkIEVNQkVEIHRhZy4KICAgICAgIEhUTUxFbWJlZEVsZW1lbnRJbXBsICplbWJlZCA9
IDA7CiAgICAgICBmb3IgKE5vZGVJbXBsICpjaGlsZCA9IG8tPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7
ICkgewotICAgICAgICAgIGlmIChjaGlsZC0+aWQoKSA9PSBJRF9FTUJFRCkgeworICAgICAgICAg
IGlmIChjaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmVtYmVkKCkpKSB7CiAgICAgICAgICAg
ICAgIGVtYmVkID0gc3RhdGljX2Nhc3Q8SFRNTEVtYmVkRWxlbWVudEltcGwgKj4oIGNoaWxkICk7
CiAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0gZWxzZSBpZiAoY2hpbGQtPmlkKCkg
PT0gSURfT0JKRUNUKSB7CisgICAgICAgICAgfSBlbHNlIGlmIChjaGlsZC0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6Om9iamVjdCgpKSkgewogICAgICAgICAgICAgICBjaGlsZCA9IGNoaWxkLT5uZXh0
U2libGluZygpOyAgICAgICAgIC8vIERvbid0IGRlc2NlbmQgaW50byBuZXN0ZWQgT0JKRUNUIHRh
Z3MKICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICBjaGlsZCA9IGNoaWxkLT50cmF2
ZXJzZU5leHROb2RlKG8pOyAgIC8vIE90aGVyd2lzZSBkZXNjZW5kIChFTUJFRHMgbWF5IGJlIGlu
c2lkZSBDT01NRU5UIHRhZ3MpCkBAIC03MTksNyArNzE4LDcgQEAgdm9pZCBSZW5kZXJQYXJ0T2Jq
ZWN0Ojp1cGRhdGVXaWRnZXQoKQogICAgICAgLy8gR2V0IHRoZSBhdHRyaWJ1dGVzIGZyb20gdGhl
IHBhcmFtcyBpZiB0aGVyZSBpcyBubyBFTUJFRCB0YWcuCiAgICAgICBOb2RlSW1wbCAqY2hpbGQg
PSBvLT5maXJzdENoaWxkKCk7CiAgICAgICB3aGlsZSAoY2hpbGQgJiYgKHVybC5pc0VtcHR5KCkg
fHwgc2VydmljZVR5cGUuaXNFbXB0eSgpIHx8ICFlbWJlZCkpIHsKLSAgICAgICAgICBpZiAoY2hp
bGQtPmlkKCkgPT0gSURfUEFSQU0pIHsKKyAgICAgICAgICBpZiAoY2hpbGQtPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjpwYXJhbSgpKSkgewogICAgICAgICAgICAgICBIVE1MUGFyYW1FbGVtZW50SW1w
bCAqcCA9IHN0YXRpY19jYXN0PEhUTUxQYXJhbUVsZW1lbnRJbXBsICo+KCBjaGlsZCApOwogICAg
ICAgICAgICAgICBRU3RyaW5nIG5hbWUgPSBwLT5uYW1lKCkuc3RyaW5nKCkubG93ZXIoKTsKICAg
ICAgICAgICAgICAgaWYgKHVybC5pc0VtcHR5KCkgJiYgKG5hbWUgPT0gInNyYyIgfHwgbmFtZSA9
PSAibW92aWUiIHx8IG5hbWUgPT0gImNvZGUiIHx8IG5hbWUgPT0gInVybCIpKSB7CkBAIC04MTAs
MTQgKzgwOSwxNCBAQCB2b2lkIFJlbmRlclBhcnRPYmplY3Q6OnVwZGF0ZVdpZGdldCgpCiAgICAg
ICAvLyBGaW5kIG91dCBpZiB3ZSBzdXBwb3J0IGZhbGxiYWNrIGNvbnRlbnQuCiAgICAgICBtX2hh
c0ZhbGxiYWNrQ29udGVudCA9IGZhbHNlOwogICAgICAgZm9yIChOb2RlSW1wbCAqY2hpbGQgPSBv
LT5maXJzdENoaWxkKCk7IGNoaWxkICYmICFtX2hhc0ZhbGxiYWNrQ29udGVudDsgY2hpbGQgPSBj
aGlsZC0+bmV4dFNpYmxpbmcoKSkgewotICAgICAgICAgIGlmICgoIWNoaWxkLT5pc1RleHROb2Rl
KCkgJiYgY2hpbGQtPmlkKCkgIT0gSURfRU1CRUQgJiYgY2hpbGQtPmlkKCkgIT0gSURfUEFSQU0p
IHx8IC8vIERpc2NvdW50IDxlbWJlZD4gYW5kIDxwYXJhbT4KKyAgICAgICAgICBpZiAoKCFjaGls
ZC0+aXNUZXh0Tm9kZSgpICYmICFjaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmVtYmVkKCkp
ICYmICFjaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnBhcmFtKCkpKSB8fCAvLyBEaXNjb3Vu
dCA8ZW1iZWQ+IGFuZCA8cGFyYW0+CiAgICAgICAgICAgICAgIChjaGlsZC0+aXNUZXh0Tm9kZSgp
ICYmICFjaGlsZC0+Y29udGFpbnNPbmx5V2hpdGVzcGFjZSgpKSkKICAgICAgICAgICAgICAgbV9o
YXNGYWxsYmFja0NvbnRlbnQgPSB0cnVlOwogICAgICAgfQogICAgICAgYm9vbCBzdWNjZXNzID0g
cGFydC0+cmVxdWVzdE9iamVjdCggdGhpcywgdXJsLCBzZXJ2aWNlVHlwZSwgcGFyYW1OYW1lcywg
cGFyYW1WYWx1ZXMgKTsKICAgICAgIGlmICghc3VjY2VzcyAmJiBtX2hhc0ZhbGxiYWNrQ29udGVu
dCkKICAgICAgICAgICBvLT5yZW5kZXJGYWxsYmFja0NvbnRlbnQoKTsKLSAgfSBlbHNlIGlmICgg
ZWxlbWVudCgpLT5pZCgpID09IElEX0VNQkVEICkgeworICB9IGVsc2UgaWYgKGVsZW1lbnQoKS0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OmVtYmVkKCkpKSB7CiAKICAgICAgIEhUTUxFbWJlZEVsZW1l
bnRJbXBsICpvID0gc3RhdGljX2Nhc3Q8SFRNTEVtYmVkRWxlbWVudEltcGwgKj4oZWxlbWVudCgp
KTsKICAgICAgIHVybCA9IG8tPnVybDsKQEAgLTg0NCw3ICs4NDMsNyBAQCB2b2lkIFJlbmRlclBh
cnRPYmplY3Q6OnVwZGF0ZVdpZGdldCgpCiAgICAgICB9CiAgICAgICBwYXJ0LT5yZXF1ZXN0T2Jq
ZWN0KCB0aGlzLCB1cmwsIHNlcnZpY2VUeXBlLCBwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcyApOwog
ICB9IGVsc2UgewotICAgICAgYXNzZXJ0KGVsZW1lbnQoKS0+aWQoKSA9PSBJRF9JRlJBTUUpOwor
ICAgICAgYXNzZXJ0KGVsZW1lbnQoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmlmcmFtZSgpKSk7
CiAgICAgICBIVE1MSUZyYW1lRWxlbWVudEltcGwgKm8gPSBzdGF0aWNfY2FzdDxIVE1MSUZyYW1l
RWxlbWVudEltcGwgKj4oZWxlbWVudCgpKTsKICAgICAgIHVybCA9IG8tPm1fVVJMLnN0cmluZygp
OwogICAgICAgaWYgKHVybC5pc0VtcHR5KCkpIHsKQEAgLTg5MCw3ICs4ODksNyBAQCB2b2lkIFJl
bmRlclBhcnRPYmplY3Q6OnNsb3RWaWV3Q2xlYXJlZCgpCiAgICAgICBRU2Nyb2xsVmlldzo6U2Ny
b2xsQmFyTW9kZSBzY3JvbGwgPSBRU2Nyb2xsVmlldzo6QXV0bzsKICAgICAgIGludCBtYXJnaW53
ID0gLTE7CiAgICAgICBpbnQgbWFyZ2luaCA9IC0xOwotICAgICAgaWYgKCBlbGVtZW50KCktPmlk
KCkgPT0gSURfSUZSQU1FKSB7CisgICAgICBpZiAoZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6aWZyYW1lKCkpKSB7CiAJICBIVE1MSUZyYW1lRWxlbWVudEltcGwgKmZyYW1lID0gc3Rh
dGljX2Nhc3Q8SFRNTElGcmFtZUVsZW1lbnRJbXBsICo+KGVsZW1lbnQoKSk7CiAJICBpZihmcmFt
ZS0+bV9mcmFtZUJvcmRlcikKIAkgICAgICBmcmFtZVN0eWxlID0gUUZyYW1lOjpCb3g7CkBAIC05
MTAsNyArOTA5LDcgQEAgdm9pZCBSZW5kZXJQYXJ0T2JqZWN0OjpzbG90Vmlld0NsZWFyZWQoKQog
ICAgICAgICAgIGtkRGVidWcoNjAzMSkgPDwgImZyYW1lIGlzIGEgS0hUTUx2aWV3ISIgPDwgZW5k
bDsKICNlbmRpZgogICAgICAgICAgIEtIVE1MVmlldyAqaHRtbFZpZXcgPSBzdGF0aWNfY2FzdDxL
SFRNTFZpZXcgKj4odmlldyk7Ci0gICAgICAgICAgaHRtbFZpZXctPnNldElnbm9yZVdoZWVsRXZl
bnRzKCBlbGVtZW50KCktPmlkKCkgPT0gSURfSUZSQU1FICk7CisgICAgICAgICAgaHRtbFZpZXct
PnNldElnbm9yZVdoZWVsRXZlbnRzKGVsZW1lbnQoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omlm
cmFtZSgpKSk7CiAgICAgICAgICAgaWYobWFyZ2ludyAhPSAtMSkgaHRtbFZpZXctPnNldE1hcmdp
bldpZHRoKG1hcmdpbncpOwogICAgICAgICAgIGlmKG1hcmdpbmggIT0gLTEpIGh0bWxWaWV3LT5z
ZXRNYXJnaW5IZWlnaHQobWFyZ2luaCk7CiAgICAgICAgIH0KSW5kZXg6IGtodG1sL3JlbmRlcmlu
Zy9yZW5kZXJfaW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3Jl
L2todG1sL3JlbmRlcmluZy9yZW5kZXJfaW1hZ2UuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
Ljc2CmRpZmYgLXUgLXAgLXIxLjc2IGtodG1sL3JlbmRlcmluZy9yZW5kZXJfaW1hZ2UuY3BwCi0t
LSBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2ltYWdlLmNwcAk1IEp1bCAyMDA1IDA3OjU3OjQ3IC0w
MDAwCTEuNzYKKysrIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfaW1hZ2UuY3BwCTUgSnVsIDIwMDUg
MjM6MjA6NTQgLTAwMDAKQEAgLTM3LDEwICszNyw4IEBACiAjaW5jbHVkZSAiY3NzL2Nzc2hlbHBl
ci5oIgogI2luY2x1ZGUgIm1pc2MvaGVscGVyLmgiCiAjaW5jbHVkZSAibWlzYy9odG1sYXR0cnMu
aCIKLSNpbmNsdWRlICJtaXNjL2h0bWx0YWdzLmgiCiAjaW5jbHVkZSAiaHRtbC9odG1sX2Zvcm1p
bXBsLmgiCiAjaW5jbHVkZSAiaHRtbC9odG1sX2ltYWdlaW1wbC5oIgotI2luY2x1ZGUgImh0bWwv
ZHRkLmgiCiAjaW5jbHVkZSAieG1sL2RvbTJfZXZlbnRzaW1wbC5oIgogI2luY2x1ZGUgImh0bWwv
aHRtbF9kb2N1bWVudGltcGwuaCIKICNpbmNsdWRlIDxtYXRoLmg+CkBAIC00MTgsNyArNDE2LDcg
QEAgdm9pZCBSZW5kZXJJbWFnZTo6cGFpbnQoUGFpbnRJbmZvJiBpLCBpbgogCiAKIC8vICAgICAg
ICAgICAgIHAtPmRyYXdQaXhtYXAoIG9mZnMueCgpLCB5LCBwaXgsIHJlY3QueCgpLCByZWN0Lnko
KSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpICk7Ci0gICAgICAgICAgICAgSFRNTEltYWdl
RWxlbWVudEltcGwqIGkgPSAoZWxlbWVudCgpICYmIGVsZW1lbnQoKS0+aWQoKSA9PSBJRF9JTUcp
ID8gc3RhdGljX2Nhc3Q8SFRNTEltYWdlRWxlbWVudEltcGwqPihlbGVtZW50KCkpIDogMDsKKyAg
ICAgICAgICAgICBIVE1MSW1hZ2VFbGVtZW50SW1wbCogaSA9IChlbGVtZW50KCkgJiYgZWxlbWVu
dCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW1nKCkpKSA/IHN0YXRpY19jYXN0PEhUTUxJbWFn
ZUVsZW1lbnRJbXBsKj4oZWxlbWVudCgpKSA6IDA7CiAgICAgICAgICAgICAgaWYgKGkgJiYgIWkt
PmNvbXBvc2l0ZU9wZXJhdG9yKCkuaXNOdWxsKCkpewogICAgICAgICAgICAgICAgIHAtPmRyYXdQ
aXhtYXAgKG9mZnMsIHBpeCwgcmVjdCwgaS0+Y29tcG9zaXRlT3BlcmF0b3IoKSk7CiAgICAgICAg
ICAgICAgfQpAQCAtNDg1LDcgKzQ4Myw3IEBAIHZvaWQgUmVuZGVySW1hZ2U6OmxheW91dCgpCiAK
IEhUTUxNYXBFbGVtZW50SW1wbCogUmVuZGVySW1hZ2U6OmltYWdlTWFwKCkKIHsKLSAgICBIVE1M
SW1hZ2VFbGVtZW50SW1wbCogaSA9IGVsZW1lbnQoKS0+aWQoKSA9PSBJRF9JTUcgPyBzdGF0aWNf
Y2FzdDxIVE1MSW1hZ2VFbGVtZW50SW1wbCo+KGVsZW1lbnQoKSkgOiAwOworICAgIEhUTUxJbWFn
ZUVsZW1lbnRJbXBsKiBpID0gZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW1nKCkp
ID8gc3RhdGljX2Nhc3Q8SFRNTEltYWdlRWxlbWVudEltcGwqPihlbGVtZW50KCkpIDogMDsKICAg
ICByZXR1cm4gaSA/IGktPmdldERvY3VtZW50KCktPmdldEltYWdlTWFwKGktPmltYWdlTWFwKCkp
IDogMDsKIH0KIApAQCAtNTExLDkgKzUwOSw5IEBAIGJvb2wgUmVuZGVySW1hZ2U6Om5vZGVBdFBv
aW50KE5vZGVJbmZvJiAKIAogdm9pZCBSZW5kZXJJbWFnZTo6dXBkYXRlQWx0VGV4dCgpCiB7Ci0g
ICAgaWYgKGVsZW1lbnQoKS0+aWQoKSA9PSBJRF9JTlBVVCkKKyAgICBpZiAoZWxlbWVudCgpLT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6aW5wdXQoKSkpCiAgICAgICAgIGFsdCA9IHN0YXRpY19jYXN0
PEhUTUxJbnB1dEVsZW1lbnRJbXBsKj4oZWxlbWVudCgpKS0+YWx0VGV4dCgpOwotICAgIGVsc2Ug
aWYgKGVsZW1lbnQoKS0+aWQoKSA9PSBJRF9JTUcpCisgICAgZWxzZSBpZiAoZWxlbWVudCgpLT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6aW1nKCkpKQogICAgICAgICBhbHQgPSBzdGF0aWNfY2FzdDxI
VE1MSW1hZ2VFbGVtZW50SW1wbCo+KGVsZW1lbnQoKSktPmFsdFRleHQoKTsKIH0KIApJbmRleDog
a2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9sYXllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1dlYkNvcmUva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9sYXllci5jcHAsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuOTYKZGlmZiAtdSAtcCAtcjEuOTYga2h0bWwvcmVuZGVyaW5nL3JlbmRl
cl9sYXllci5jcHAKLS0tIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfbGF5ZXIuY3BwCTEwIE1heSAy
MDA1IDIyOjI1OjA0IC0wMDAwCTEuOTYKKysrIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfbGF5ZXIu
Y3BwCTUgSnVsIDIwMDUgMjM6MjA6NTUgLTAwMDAKQEAgLTQ5LDcgKzQ5LDYgQEAKICNpbmNsdWRl
ICJyZW5kZXJfYXJlbmEuaCIKICNpbmNsdWRlICJ4bWwvZG9tX2RvY2ltcGwuaCIKICNpbmNsdWRl
ICJ4bWwvZG9tMl9ldmVudHNpbXBsLmgiCi0jaW5jbHVkZSAibWlzYy9odG1sdGFncy5oIgogI2lu
Y2x1ZGUgImh0bWwvaHRtbF9ibG9ja2ltcGwuaCIKIAogI2luY2x1ZGUgPHFzY3JvbGxiYXIuaD4K
QEAgLTE0NjcsNyArMTQ2Niw3IEBAIGludCBNYXJxdWVlOjptYXJxdWVlU3BlZWQoKSBjb25zdAog
ewogICAgIGludCByZXN1bHQgPSBtX2xheWVyLT5yZW5kZXJlcigpLT5zdHlsZSgpLT5tYXJxdWVl
U3BlZWQoKTsKICAgICBET006Ok5vZGVJbXBsKiBlbHQgPSBtX2xheWVyLT5yZW5kZXJlcigpLT5l
bGVtZW50KCk7Ci0gICAgaWYgKGVsdCAmJiBlbHQtPmlkKCkgPT0gSURfTUFSUVVFRSkgeworICAg
IGlmIChlbHQgJiYgZWx0LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6bWFycXVlZSgpKSkgewogICAg
ICAgICBIVE1MTWFycXVlZUVsZW1lbnRJbXBsKiBtYXJxdWVlRWx0ID0gc3RhdGljX2Nhc3Q8SFRN
TE1hcnF1ZWVFbGVtZW50SW1wbCo+KGVsdCk7CiAgICAgICAgIHJlc3VsdCA9IGtNYXgocmVzdWx0
LCBtYXJxdWVlRWx0LT5taW5pbXVtRGVsYXkoKSk7CiAgICAgfQpJbmRleDoga2h0bWwvcmVuZGVy
aW5nL3JlbmRlcl9saW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29y
ZS9raHRtbC9yZW5kZXJpbmcvcmVuZGVyX2xpbmUuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjQyCmRpZmYgLXUgLXAgLXIxLjQyIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfbGluZS5jcHAKLS0t
IGtodG1sL3JlbmRlcmluZy9yZW5kZXJfbGluZS5jcHAJMzAgSnVuIDIwMDUgMDE6Mjc6NDEgLTAw
MDAJMS40MgorKysga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9saW5lLmNwcAk1IEp1bCAyMDA1IDIz
OjIwOjU2IC0wMDAwCkBAIC0zNyw3ICszNyw2IEBACiAjaW5jbHVkZSAicmVuZGVyX2xpbmUuaCIK
IAogI2luY2x1ZGUgImtodG1sdmlldy5oIgotI2luY2x1ZGUgImh0bWx0YWdzLmgiCiAKIHVzaW5n
IG5hbWVzcGFjZSBET007CiAKSW5kZXg6IGtodG1sL3JlbmRlcmluZy9yZW5kZXJfbGlzdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvcmVuZGVyaW5nL3Jl
bmRlcl9saXN0LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS42MQpkaWZmIC11IC1wIC1yMS42
MSBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2xpc3QuY3BwCi0tLSBraHRtbC9yZW5kZXJpbmcvcmVu
ZGVyX2xpc3QuY3BwCTMwIEp1biAyMDA1IDAxOjI3OjQxIC0wMDAwCTEuNjEKKysrIGtodG1sL3Jl
bmRlcmluZy9yZW5kZXJfbGlzdC5jcHAJNSBKdWwgMjAwNSAyMzoyMDo1NyAtMDAwMApAQCAtMjYs
NyArMjYsOCBAQAogI2luY2x1ZGUgInJlbmRlcmluZy9yZW5kZXJfY2FudmFzLmgiCiAKICNpbmNs
dWRlICJ4bWwvZG9tX2RvY2ltcGwuaCIKLSNpbmNsdWRlICJtaXNjL2h0bWx0YWdzLmgiCisKKyNp
bmNsdWRlICJodG1sbmFtZXMuaCIKIAogI2luY2x1ZGUgPHFwYWludGVyLmg+CiAKQEAgLTM3LDYg
KzM4LDcgQEAKIC8vI2RlZmluZSBCT1hfREVCVUcKIAogdXNpbmcgRE9NOjpEb2N1bWVudEltcGw7
Cit1c2luZyBET006OkhUTUxOYW1lczsKIHVzaW5nIG5hbWVzcGFjZSBraHRtbDsKIAogY29uc3Qg
aW50IGNNYXJrZXJQYWRkaW5nID0gNzsKQEAgLTIxMyw3ICsyMTUsNyBAQCBzdGF0aWMgUmVuZGVy
T2JqZWN0KiBnZXRQYXJlbnRPZkZpcnN0TGluCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
CiAgICAgICAgIGlmIChjdXJyQ2hpbGQtPnN0eWxlKCktPmh0bWxIYWNrcygpICYmIGN1cnJDaGls
ZC0+ZWxlbWVudCgpICYmCi0gICAgICAgICAgICAoY3VyckNoaWxkLT5lbGVtZW50KCktPmlkKCkg
PT0gSURfVUwgfHwgY3VyckNoaWxkLT5lbGVtZW50KCktPmlkKCkgPT0gSURfT0wpKQorICAgICAg
ICAgICAgKGN1cnJDaGlsZC0+ZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dWwoKSl8
fCBjdXJyQ2hpbGQtPmVsZW1lbnQoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9sKCkpKSkKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIFJlbmRlck9iamVjdCogbGlu
ZUJveCA9IGdldFBhcmVudE9mRmlyc3RMaW5lQm94KGN1cnJDaGlsZCwgbWFya2VyKTsKSW5kZXg6
IGtodG1sL3JlbmRlcmluZy9yZW5kZXJfb2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9yZW5kZXJpbmcvcmVuZGVyX29iamVjdC5jcHAsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuMTk2CmRpZmYgLXUgLXAgLXIxLjE5NiBraHRtbC9yZW5kZXJpbmcv
cmVuZGVyX29iamVjdC5jcHAKLS0tIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfb2JqZWN0LmNwcAkz
MCBKdW4gMjAwNSAwMToyNzo0MSAtMDAwMAkxLjE5NgorKysga2h0bWwvcmVuZGVyaW5nL3JlbmRl
cl9vYmplY3QuY3BwCTUgSnVsIDIwMDUgMjM6MjA6NTggLTAwMDAKQEAgLTQzLDYgKzQzLDcgQEAK
ICNpbmNsdWRlICJyZW5kZXJfaW5saW5lLmgiCiAjaW5jbHVkZSAicmVuZGVyX2Jsb2NrLmgiCiAj
aW5jbHVkZSAicmVuZGVyX2ZsZXhib3guaCIKKyNpbmNsdWRlICJodG1sbmFtZXMuaCIKIAogI2lm
IEFQUExFX0NIQU5HRVMKIC8vIEZvciBhY2Nlc3NpYmlsaXR5CkBAIC0xNzUsMTcgKzE3NiwxNyBA
QCBib29sIFJlbmRlck9iamVjdDo6aXNSb290KCkgY29uc3QKIAogYm9vbCBSZW5kZXJPYmplY3Q6
OmlzQm9keSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGVsZW1lbnQoKSAmJiBlbGVtZW50KCktPnJl
bmRlcmVyKCkgPT0gdGhpcyAmJiBlbGVtZW50KCktPmlkKCkgPT0gSURfQk9EWTsKKyAgICByZXR1
cm4gZWxlbWVudCgpICYmIGVsZW1lbnQoKS0+cmVuZGVyZXIoKSA9PSB0aGlzICYmIGVsZW1lbnQo
KS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJvZHkoKSk7CiB9CiAKIGJvb2wgUmVuZGVyT2JqZWN0
Ojppc0hSKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZWxlbWVudCgpICYmIGVsZW1lbnQoKS0+aWQo
KSA9PSBJRF9IUjsKKyAgICByZXR1cm4gZWxlbWVudCgpICYmIGVsZW1lbnQoKS0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OmhyKCkpOwogfQogCiBib29sIFJlbmRlck9iamVjdDo6aXNIVE1MTWFycXVl
ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGVsZW1lbnQoKSAmJiBlbGVtZW50KCktPnJlbmRlcmVy
KCkgPT0gdGhpcyAmJiBlbGVtZW50KCktPmlkKCkgPT0gSURfTUFSUVVFRTsKKyAgICByZXR1cm4g
ZWxlbWVudCgpICYmIGVsZW1lbnQoKS0+cmVuZGVyZXIoKSA9PSB0aGlzICYmIGVsZW1lbnQoKS0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6Om1hcnF1ZWUoKSk7CiB9CiAKIGJvb2wgUmVuZGVyT2JqZWN0
OjpjYW5IYXZlQ2hpbGRyZW4oKSBjb25zdApAQCAtNzM3LDcgKzczOCw3IEBAIGJvb2wgUmVuZGVy
T2JqZWN0OjpzaXplc1RvTWF4V2lkdGgoKSBjb24KICAgICAvLyBidXQgdGhleSBhbGxvdyB0ZXh0
IHRvIHNpdCBvbiB0aGUgc2FtZSBsaW5lIGFzIHRoZSBtYXJxdWVlLgogICAgIGlmIChpc0Zsb2F0
aW5nKCkgfHwgKGlzQ29tcGFjdCgpICYmIGlzSW5saW5lKCkpIHx8IAogICAgICAgICAoaXNJbmxp
bmVCbG9ja09ySW5saW5lVGFibGUoKSAmJiAhaXNIVE1MTWFycXVlZSgpKSB8fAotICAgICAgICAo
ZWxlbWVudCgpICYmIChlbGVtZW50KCktPmlkKCkgPT0gSURfQlVUVE9OIHx8IGVsZW1lbnQoKS0+
aWQoKSA9PSBJRF9MRUdFTkQpKSkKKyAgICAgICAgKGVsZW1lbnQoKSAmJiAoZWxlbWVudCgpLT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6YnV0dG9uKCkpIHx8IGVsZW1lbnQoKS0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OmxlZ2VuZCgpKSkpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAKICAgICAv
LyBDaGlsZHJlbiBvZiBhIGhvcml6b250YWwgbWFycXVlZSBkbyBub3QgZmlsbCB0aGUgY29udGFp
bmVyIGJ5IGRlZmF1bHQuCkBAIC0xMzI2LDcgKzEzMjcsNyBAQCBRU3RyaW5nIFJlbmRlck9iamVj
dDo6aW5mb3JtYXRpb24oKSBjb25zCiAgICAgaWYgKGVsZW1lbnQoKSAmJiBlbGVtZW50KCktPmFj
dGl2ZSgpKSB0cyA8PCAiYWN0ICI7CiAgICAgaWYgKGVsZW1lbnQoKSAmJiBlbGVtZW50KCktPmlz
TGluaygpKSB0cyA8PCAiYW5jaG9yICI7CiAgICAgaWYgKGVsZW1lbnQoKSAmJiBlbGVtZW50KCkt
PmZvY3VzZWQoKSkgdHMgPDwgImZvY3VzICI7Ci0gICAgaWYgKGVsZW1lbnQoKSkgdHMgPDwgIiA8
IiA8PCAgZ2V0VGFnTmFtZShlbGVtZW50KCktPmlkKCkpLnN0cmluZygpIDw8ICI+IjsKKyAgICBp
ZiAoZWxlbWVudCgpKSB0cyA8PCAiIDwiIDw8ICBlbGVtZW50KCktPmxvY2FsTmFtZSgpLnN0cmlu
ZygpIDw8ICI+IjsKICAgICB0cyA8PCAiICgiIDw8IHhQb3MoKSA8PCAiLCIgPDwgeVBvcygpIDw8
ICIsIiA8PCB3aWR0aCgpIDw8ICIsIiA8PCBoZWlnaHQoKSA8PCAiKSIKIAk8PCAoaXNUYWJsZUNl
bGwoKSA/CiAJICAgICggUVN0cmluZzo6ZnJvbUxhdGluMSgiIFtyPSIpICsKQEAgLTE1NTYsNyAr
MTU1Nyw3IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpzZXRTdHlsZShSZW5kZXJTdHlsZSAKICAgICAg
ICAgLy8gVGhlIGJhY2tncm91bmQgb2YgdGhlIHJvb3QgZWxlbWVudCBvciB0aGUgYm9keSBlbGVt
ZW50IGNvdWxkIHByb3BhZ2F0ZSB1cCB0bwogICAgICAgICAvLyB0aGUgY2FudmFzLiAgSnVzdCBk
aXJ0eSB0aGUgZW50aXJlIGNhbnZhcyB3aGVuIG91ciBzdHlsZSBjaGFuZ2VzIHN1YnN0YW50aWFs
bHkuCiAgICAgICAgIGlmIChkID49IFJlbmRlclN0eWxlOjpSZXBhaW50ICYmIGVsZW1lbnQoKSAm
JgotICAgICAgICAgICAgKGVsZW1lbnQoKS0+aWQoKSA9PSBJRF9IVE1MIHx8IGVsZW1lbnQoKS0+
aWQoKSA9PSBJRF9CT0RZKSkKKyAgICAgICAgICAgIChlbGVtZW50KCktPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjpodG1sKCkpIHx8IGVsZW1lbnQoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJvZHko
KSkpKQogICAgICAgICAgICAgY2FudmFzKCktPnJlcGFpbnQoKTsKICAgICAgICAgZWxzZSBpZiAo
bV9wYXJlbnQgJiYgIWlzVGV4dCgpKSB7CiAgICAgICAgICAgICAvLyBEbyBhIHJlcGFpbnQgd2l0
aCB0aGUgb2xkIHN0eWxlIGZpcnN0LCBlLmcuLCBmb3IgZXhhbXBsZSBpZiB3ZSBnbyBmcm9tCkBA
IC0yMTkwLDcgKzIxOTEsNyBAQCB2b2lkIFJlbmRlck9iamVjdDo6Z2V0VGV4dERlY29yYXRpb25D
b2xvCiAgICAgICAgIGlmIChjdXJyICYmIGN1cnItPmlzUmVuZGVyQmxvY2soKSAmJiBjdXJyLT5j
b250aW51YXRpb24oKSkKICAgICAgICAgICAgIGN1cnIgPSBjdXJyLT5jb250aW51YXRpb24oKTsK
ICAgICB9IHdoaWxlIChjdXJyICYmIGRlY29yYXRpb25zICYmICghcXVpcmtzTW9kZSB8fCAhY3Vy
ci0+ZWxlbWVudCgpIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGN1
cnItPmVsZW1lbnQoKS0+aWQoKSAhPSBJRF9BICYmIGN1cnItPmVsZW1lbnQoKS0+aWQoKSAhPSBJ
RF9GT05UKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICghY3Vyci0+
ZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YSgpKSAmJiAhY3Vyci0+ZWxlbWVudCgp
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Zm9udCgpKSkpKTsKIAogICAgIC8vIElmIHdlIGJhaWxl
ZCBvdXQsIHVzZSB0aGUgZWxlbWVudCB3ZSBiYWlsZWQgb3V0IGF0ICh0eXBpY2FsbHkgYSA8Zm9u
dD4gb3IgPGE+IGVsZW1lbnQpLgogICAgIGlmIChkZWNvcmF0aW9ucyAmJiBjdXJyKSB7CkBAIC0y
MzI0LDcgKzIzMjUsNyBAQCB2b2lkIFJlbmRlck9iamVjdDo6c2V0UGl4bWFwKGNvbnN0IFFQaXht
CiAgICAgLy8gd291bGQgYXZvaWQgcHV0dGluZyB0aGlzIGZ1bmN0aW9uIGFuZCB0aGUgQ2FjaGVk
T2JqZWN0Q2xpZW50IGJhc2UgY2xhc3MgaW50byBSZW5kZXJPYmplY3QuCiAKICAgICBpZiAoaW1h
Z2UgJiYgaW1hZ2UtPnBpeG1hcF9zaXplKCkgPT0gaW1hZ2UtPnZhbGlkX3JlY3QoKS5zaXplKCkg
JiYgcGFyZW50KCkpIHsKLSAgICAgICAgaWYgKGNhbnZhcygpICYmIGVsZW1lbnQoKSAmJiAoZWxl
bWVudCgpLT5pZCgpID09IElEX0hUTUwgfHwgZWxlbWVudCgpLT5pZCgpID09IElEX0JPRFkpKQor
ICAgICAgICBpZiAoY2FudmFzKCkgJiYgZWxlbWVudCgpICYmIChlbGVtZW50KCktPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjpodG1sKCkpIHx8IGVsZW1lbnQoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
OmJvZHkoKSkpKQogICAgICAgICAgICAgY2FudmFzKCktPnJlcGFpbnQoKTsgICAgLy8gcmVwYWlu
dCB0aGUgZW50aXJlIGNhbnZhcyBzaW5jZSB0aGUgYmFja2dyb3VuZCBnZXRzIHByb3BhZ2F0ZWQg
dXAKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmVwYWludCgpOyAgICAgICAgICAgICAgLy8g
cmVwYWludCBvYmplY3QsIHdoaWNoIGlzIGEgYm94IG9yIGEgY29udGFpbmVyIHdpdGggYm94ZXMg
aW5zaWRlIGl0CkluZGV4OiBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX3RhYmxlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9yZW5kZXJpbmcvcmVuZGVyX3Rh
YmxlLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMjYKZGlmZiAtdSAtcCAtcjEuMTI2IGto
dG1sL3JlbmRlcmluZy9yZW5kZXJfdGFibGUuY3BwCi0tLSBraHRtbC9yZW5kZXJpbmcvcmVuZGVy
X3RhYmxlLmNwcAkxMSBNYXkgMjAwNSAwMjoxMDoxMCAtMDAwMAkxLjEyNgorKysga2h0bWwvcmVu
ZGVyaW5nL3JlbmRlcl90YWJsZS5jcHAJNSBKdWwgMjAwNSAyMzoyMTowMCAtMDAwMApAQCAtMzEs
OCArMzEsOCBAQAogI2luY2x1ZGUgInJlbmRlcmluZy9yZW5kZXJfdGFibGUuaCIKICNpbmNsdWRl
ICJyZW5kZXJpbmcvdGFibGVfbGF5b3V0LmgiCiAjaW5jbHVkZSAiaHRtbC9odG1sX3RhYmxlaW1w
bC5oIgotI2luY2x1ZGUgIm1pc2MvaHRtbHRhZ3MuaCIKICNpbmNsdWRlICJtaXNjL2h0bWxhdHRy
cy5oIgorI2luY2x1ZGUgImh0bWxuYW1lcy5oIgogI2luY2x1ZGUgInhtbC9kb21fZG9jaW1wbC5o
IgogCiAjaW5jbHVkZSA8a2dsb2JhbC5oPgpAQCAtMTEyLDcgKzExMiw3IEBAIHZvaWQgUmVuZGVy
VGFibGU6OmFkZENoaWxkKFJlbmRlck9iamVjdCAKICNlbmRpZgogICAgIFJlbmRlck9iamVjdCAq
byA9IGNoaWxkOwogCi0gICAgaWYgKGNoaWxkLT5lbGVtZW50KCkgJiYgY2hpbGQtPmVsZW1lbnQo
KS0+aWQoKSA9PSBJRF9GT1JNKSB7CisgICAgaWYgKGNoaWxkLT5lbGVtZW50KCkgJiYgY2hpbGQt
PmVsZW1lbnQoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZvcm0oKSkpIHsKICAgICAgICAgUmVu
ZGVyQ29udGFpbmVyOjphZGRDaGlsZChjaGlsZCxiZWZvcmVDaGlsZCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CkBAIC0yNjIsNyArMjYyLDcgQEAgdm9pZCBSZW5kZXJUYWJsZTo6bGF5b3V0KCkK
IAogICAgIFJlbmRlck9iamVjdCAqY2hpbGQgPSBmaXJzdENoaWxkKCk7CiAgICAgd2hpbGUoIGNo
aWxkICkgewotCWlmICggY2hpbGQtPm5lZWRzTGF5b3V0KCkgJiYgIShjaGlsZC0+ZWxlbWVudCgp
ICYmIGNoaWxkLT5lbGVtZW50KCktPmlkKCkgPT0gSURfRk9STSkpCisJaWYgKCBjaGlsZC0+bmVl
ZHNMYXlvdXQoKSAmJiAhKGNoaWxkLT5lbGVtZW50KCkgJiYgY2hpbGQtPmVsZW1lbnQoKS0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OmZvcm0oKSkpKQogCSAgICBjaGlsZC0+bGF5b3V0KCk7CiAJaWYg
KCBjaGlsZC0+aXNUYWJsZVNlY3Rpb24oKSApIHsKIAkgICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGFi
bGVTZWN0aW9uICo+KGNoaWxkKS0+Y2FsY1Jvd0hlaWdodCgpOwpAQCAtODQ5LDcgKzg0OSw3IEBA
IHZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjphZGRDaGlsZChSZW5kZXIKICNlbmRpZgogICAgIFJl
bmRlck9iamVjdCAqcm93ID0gY2hpbGQ7CiAKLSAgICBpZiAoY2hpbGQtPmVsZW1lbnQoKSAmJiBj
aGlsZC0+ZWxlbWVudCgpLT5pZCgpID09IElEX0ZPUk0pIHsKKyAgICBpZiAoY2hpbGQtPmVsZW1l
bnQoKSAmJiBjaGlsZC0+ZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Zm9ybSgpKSkg
ewogICAgICAgICBSZW5kZXJDb250YWluZXI6OmFkZENoaWxkKGNoaWxkLGJlZm9yZUNoaWxkKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE0OTUsNyArMTQ5NSw3IEBAIHZvaWQgUmVuZGVy
VGFibGVSb3c6OmFkZENoaWxkKFJlbmRlck9iamUKICAgICBrZERlYnVnKCA2MDQwICkgPDwgcmVu
ZGVyTmFtZSgpIDw8ICIoVGFibGVSb3cpOjphZGRDaGlsZCggIiA8PCBjaGlsZC0+cmVuZGVyTmFt
ZSgpIDw8ICIgKSIgIDw8ICIsICIgPDwKICAgICAgICAgICAgICAgICAgICAgICAgKGJlZm9yZUNo
aWxkID8gYmVmb3JlQ2hpbGQtPnJlbmRlck5hbWUoKSA6ICIwIikgPDwgIiApIiA8PCBlbmRsOwog
I2VuZGlmCi0gICAgaWYgKGNoaWxkLT5lbGVtZW50KCkgJiYgY2hpbGQtPmVsZW1lbnQoKS0+aWQo
KSA9PSBJRF9GT1JNKSB7CisgICAgaWYgKGNoaWxkLT5lbGVtZW50KCkgJiYgY2hpbGQtPmVsZW1l
bnQoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZvcm0oKSkpIHsKICAgICAgICAgUmVuZGVyQ29u
dGFpbmVyOjphZGRDaGlsZChjaGlsZCxiZWZvcmVDaGlsZCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CkBAIC0xNjA2LDcgKzE2MDYsNyBAQCB2b2lkIFJlbmRlclRhYmxlQ2VsbDo6dXBkYXRlRnJv
bUVsZW1lbnQoCiAgICAgaW50IG9sZFJTcGFuID0gclNwYW47CiAgICAgaW50IG9sZENTcGFuID0g
Y1NwYW47CiAgICAgRE9NOjpOb2RlSW1wbCogbm9kZSA9IGVsZW1lbnQoKTsKLSAgICBpZiAobm9k
ZSAmJiAobm9kZS0+aWQoKSA9PSBJRF9URCB8fCBub2RlLT5pZCgpID09IElEX1RIKSkgeworICAg
IGlmIChub2RlICYmIChub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGQoKSkgfHwgbm9kZS0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRoKCkpKSkgewogICAgICAgICBET006OkhUTUxUYWJsZUNl
bGxFbGVtZW50SW1wbCAqdGMgPSBzdGF0aWNfY2FzdDxET006OkhUTUxUYWJsZUNlbGxFbGVtZW50
SW1wbCAqPihub2RlKTsKICAgICAgICAgY1NwYW4gPSB0Yy0+Y29sU3BhbigpOwogICAgICAgICBy
U3BhbiA9IHRjLT5yb3dTcGFuKCk7CkBAIC0yMjkwLDcgKzIyOTAsNyBAQCB2b2lkIFJlbmRlclRh
YmxlQ29sOjp1cGRhdGVGcm9tRWxlbWVudCgpCiB7CiAgICAgaW50IG9sZFNwYW4gPSBfc3BhbjsK
ICAgICBET006Ok5vZGVJbXBsICpub2RlID0gZWxlbWVudCgpOwotICAgIGlmIChub2RlICYmIChu
b2RlLT5pZCgpID09IElEX0NPTCB8fCBub2RlLT5pZCgpID09IElEX0NPTEdST1VQKSkgeworICAg
IGlmIChub2RlICYmIChub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Y29sKCkpIHx8IG5vZGUt
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpjb2xncm91cCgpKSkpIHsKICAgICAgICAgRE9NOjpIVE1M
VGFibGVDb2xFbGVtZW50SW1wbCAqdGMgPSBzdGF0aWNfY2FzdDxET006OkhUTUxUYWJsZUNvbEVs
ZW1lbnRJbXBsICo+KG5vZGUpOwogICAgICAgICBfc3BhbiA9IHRjLT5zcGFuKCk7CiAgICAgfSAK
SW5kZXg6IGtodG1sL3htbC9kb20yX3JhbmdlaW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
L2N2cy9yb290L1dlYkNvcmUva2h0bWwveG1sL2RvbTJfcmFuZ2VpbXBsLmNwcCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS40MApkaWZmIC11IC1wIC1yMS40MCBraHRtbC94bWwvZG9tMl9yYW5nZWlt
cGwuY3BwCi0tLSBraHRtbC94bWwvZG9tMl9yYW5nZWltcGwuY3BwCTEzIE1heSAyMDA1IDE2OjQ4
OjUxIC0wMDAwCTEuNDAKKysrIGtodG1sL3htbC9kb20yX3JhbmdlaW1wbC5jcHAJNSBKdWwgMjAw
NSAyMzoyMTowMSAtMDAwMApAQCAtMjksNyArMjksNiBAQAogI2luY2x1ZGUgImRvbV90ZXh0aW1w
bC5oIgogI2luY2x1ZGUgImRvbV94bWxpbXBsLmgiCiAjaW5jbHVkZSAiaHRtbC9odG1sX2VsZW1l
bnRpbXBsLmgiCi0jaW5jbHVkZSAibWlzYy9odG1sdGFncy5oIgogI2luY2x1ZGUgImVkaXRpbmcv
bWFya3VwLmgiCiAjaW5jbHVkZSAiZWRpdGluZy92aXNpYmxlX3Bvc2l0aW9uLmgiCiAjaW5jbHVk
ZSAiZWRpdGluZy92aXNpYmxlX3VuaXRzLmgiCkluZGV4OiBraHRtbC94bWwvZG9tMl90cmF2ZXJz
YWxpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC94
bWwvZG9tMl90cmF2ZXJzYWxpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMApkaWZm
IC11IC1wIC1yMS4xMCBraHRtbC94bWwvZG9tMl90cmF2ZXJzYWxpbXBsLmNwcAotLS0ga2h0bWwv
eG1sL2RvbTJfdHJhdmVyc2FsaW1wbC5jcHAJMTAgTWF5IDIwMDUgMjE6NTk6MTQgLTAwMDAJMS4x
MAorKysga2h0bWwveG1sL2RvbTJfdHJhdmVyc2FsaW1wbC5jcHAJNSBKdWwgMjAwNSAyMzoyMTow
MSAtMDAwMApAQCAtMjYsOCArMjYsNiBAQAogI2luY2x1ZGUgImRvbS9kb21fZXhjZXB0aW9uLmgi
CiAjaW5jbHVkZSAieG1sL2RvbV9kb2NpbXBsLmgiCiAKLSNpbmNsdWRlICJodG1sdGFncy5oIgot
CiBuYW1lc3BhY2UgRE9NIHsKIAogTm9kZUZpbHRlckltcGw6Ok5vZGVGaWx0ZXJJbXBsKE5vZGVG
aWx0ZXJDb25kaXRpb24gKmNvbmRpdGlvbikKSW5kZXg6IGtodG1sL3htbC9kb21fYXRvbWljc3Ry
aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC94bWwv
ZG9tX2F0b21pY3N0cmluZy5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNwpkaWZmIC11IC1w
IC1yMS43IGtodG1sL3htbC9kb21fYXRvbWljc3RyaW5nLmNwcAotLS0ga2h0bWwveG1sL2RvbV9h
dG9taWNzdHJpbmcuY3BwCTI5IEp1biAyMDA1IDIxOjA0OjMyIC0wMDAwCTEuNworKysga2h0bWwv
eG1sL2RvbV9hdG9taWNzdHJpbmcuY3BwCTUgSnVsIDIwMDUgMjM6MjE6MDEgLTAwMDAKQEAgLTE4
MCw2ICsxODAsOSBAQCB2b2lkIEF0b21pY1N0cmluZzo6cmVtb3ZlKERPTVN0cmluZ0ltcGwgCiAK
ICAgICBleHRlcm4gY29uc3QgQXRvbWljU3RyaW5nIG51bGxBdG9tOwogICAgIGV4dGVybiBjb25z
dCBBdG9taWNTdHJpbmcgZW1wdHlBdG9tOworICAgIGV4dGVybiBjb25zdCBBdG9taWNTdHJpbmcg
dGV4dEF0b207CisgICAgZXh0ZXJuIGNvbnN0IEF0b21pY1N0cmluZyBjb21tZW50QXRvbTsKKyAg
ICBleHRlcm4gY29uc3QgQXRvbWljU3RyaW5nIHN0YXJBdG9tOwogI2Vsc2UKICAgICAvLyBEZWZp
bmUgYW4gQXRvbWljU3RyaW5nLXNpemVkIGFycmF5IG9mIHBvaW50ZXJzIHRvIGF2b2lkIHN0YXRp
YyBpbml0aWFsaXphdGlvbi4KICAgICAvLyBVc2UgYW4gYXJyYXkgb2YgcG9pbnRlcnMgaW5zdGVh
ZCBvZiBhbiBhcnJheSBvZiBjaGFyIGluIGNhc2UgdGhlcmUgaXMgc29tZSBhbGlnbm1lbnQgaXNz
dWUuCkBAIC0xODgsNiArMTkxLDkgQEAgdm9pZCBBdG9taWNTdHJpbmc6OnJlbW92ZShET01TdHJp
bmdJbXBsIAogCiAgICAgREVGSU5FX0dMT0JBTChudWxsLCBpZ25vcmVkKQogICAgIERFRklORV9H
TE9CQUwoZW1wdHksIGlnbm9yZWQpCisgICAgREVGSU5FX0dMT0JBTCh0ZXh0LCBpZ25vcmVkKQor
ICAgIERFRklORV9HTE9CQUwoY29tbWVudCwgaWdub3JlZCkKKyAgICBERUZJTkVfR0xPQkFMKHN0
YXIsIGlnbm9yZWQpCiAjZW5kaWYKIAogI2RlZmluZSBDQUxMX0RFRklORV9HTE9CQUwobmFtZSkg
REVGSU5FX0dMT0JBTChuYW1lLCAjbmFtZSkKQEAgLTIwMSw3ICsyMDcsMTAgQEAgdm9pZCBBdG9t
aWNTdHJpbmc6OmluaXQoKQogICAgICAgICAvLyBVc2UgcGxhY2VtZW50IG5ldyB0byBpbml0aWFs
aXplIHRoZSBnbG9iYWxzLgogICAgICAgICBuZXcgKCZudWxsQXRvbSkgQXRvbWljU3RyaW5nOwog
ICAgICAgICBuZXcgKCZlbXB0eUF0b20pIEF0b21pY1N0cmluZygiIik7Ci0gICAgICAgIAorICAg
ICAgICBuZXcgKCZ0ZXh0QXRvbSkgQXRvbWljU3RyaW5nKCIjdGV4dCIpOworICAgICAgICBuZXcg
KCZjb21tZW50QXRvbSkgQXRvbWljU3RyaW5nKCIjY29tbWVudCIpOworICAgICAgICBuZXcgKCZz
dGFyQXRvbSkgQXRvbWljU3RyaW5nKCIqIik7CisKICAgICAgICAgI2RlZmluZSBQTEFDRU1FTlRf
TkVXX0dMT0JBTChuYW1lLCBzdHJpbmcpIG5ldyAoJm5hbWUgIyMgUHJvcGVydHlOYW1lKSBBdG9t
aWNTdHJpbmcoc3RyaW5nKTsKICAgICAgICAgI2RlZmluZSBDQUxMX1BMQUNFTUVOVF9ORVdfR0xP
QkFMKG5hbWUpIFBMQUNFTUVOVF9ORVdfR0xPQkFMKG5hbWUsICNuYW1lKQogICAgICAgICBLSFRN
TF9BVE9NSUNTVFJJTkdfRUFDSF9HTE9CQUwoQ0FMTF9QTEFDRU1FTlRfTkVXX0dMT0JBTCkKSW5k
ZXg6IGtodG1sL3htbC9kb21fYXRvbWljc3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1dlYkNvcmUva2h0bWwveG1sL2RvbV9hdG9taWNzdHJpbmcuaCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS40CmRpZmYgLXUgLXAgLXIxLjQga2h0bWwveG1sL2RvbV9hdG9taWNzdHJpbmcu
aAotLS0ga2h0bWwveG1sL2RvbV9hdG9taWNzdHJpbmcuaAkyOCBKdW4gMjAwNSAwMTo1NDozNCAt
MDAwMAkxLjQKKysrIGtodG1sL3htbC9kb21fYXRvbWljc3RyaW5nLmgJNSBKdWwgMjAwNSAyMzoy
MTowMSAtMDAwMApAQCAtNTUsNyArNTUsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBwZXJjZW50YWdl
KGludCAmX3BlcmNlbnRhZ2UpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nLnBlcmNlbnRhZ2UoX3Bl
cmNlbnRhZ2UpOyB9CiAgICAga2h0bWw6Okxlbmd0aCogdG9MZW5ndGhBcnJheShpbnQmIGxlbikg
Y29uc3QgeyByZXR1cm4gbV9zdHJpbmcudG9MZW5ndGhBcnJheShsZW4pOyB9CiAgICAga2h0bWw6
Okxlbmd0aCogdG9Db29yZHNBcnJheShpbnQmIGxlbikgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcu
dG9Db29yZHNBcnJheShsZW4pOyB9Ci0gICAgCisKICAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsg
cmV0dXJuIG1fc3RyaW5nLmlzTnVsbCgpOyB9CiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyBy
ZXR1cm4gbV9zdHJpbmcuaXNFbXB0eSgpOyB9CiAKQEAgLTExNSw2ICsxMTUsOSBAQCBpbmxpbmUg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IEF0b21pY1N0cmluCiAjaWYgIUtIVE1MX0FUT01JQ1NUUklO
R19ISURFX0dMT0JBTFMKICAgICBleHRlcm4gY29uc3QgQXRvbWljU3RyaW5nIG51bGxBdG9tOwog
ICAgIGV4dGVybiBjb25zdCBBdG9taWNTdHJpbmcgZW1wdHlBdG9tOworICAgIGV4dGVybiBjb25z
dCBBdG9taWNTdHJpbmcgdGV4dEF0b207CisgICAgZXh0ZXJuIGNvbnN0IEF0b21pY1N0cmluZyBj
b21tZW50QXRvbTsKKyAgICBleHRlcm4gY29uc3QgQXRvbWljU3RyaW5nIHN0YXJBdG9tOwogI2Rl
ZmluZSBLSFRNTF9BVE9NSUNTVFJJTkdfREVDTEFSRV9HTE9CQUwobmFtZSkgZXh0ZXJuIGNvbnN0
IEF0b21pY1N0cmluZyBuYW1lICMjIFByb3BlcnR5TmFtZTsKICAgICBLSFRNTF9BVE9NSUNTVFJJ
TkdfRUFDSF9HTE9CQUwoS0hUTUxfQVRPTUlDU1RSSU5HX0RFQ0xBUkVfR0xPQkFMKQogICAgIEtI
VE1MX0FUT01JQ1NUUklOR19ERUNMQVJFX0dMT0JBTChzcGVjaWFsUHJvdG90eXBlKQpJbmRleDog
a2h0bWwveG1sL2RvbV9kb2NpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3Qv
V2ViQ29yZS9raHRtbC94bWwvZG9tX2RvY2ltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjIzMQpkaWZmIC11IC1wIC1yMS4yMzEga2h0bWwveG1sL2RvbV9kb2NpbXBsLmNwcAotLS0ga2h0
bWwveG1sL2RvbV9kb2NpbXBsLmNwcAkzIEp1bCAyMDA1IDEwOjA1OjA4IC0wMDAwCTEuMjMxCisr
KyBraHRtbC94bWwvZG9tX2RvY2ltcGwuY3BwCTUgSnVsIDIwMDUgMjM6MjE6MDQgLTAwMDAKQEAg
LTM0LDggKzM0LDYgQEAKICNpbmNsdWRlICJ4bWwvZG9tMl92aWV3c2ltcGwuaCIKICNpbmNsdWRl
ICJ4bWwveG1sX3Rva2VuaXplci5oIgogCi0jaW5jbHVkZSAieG1sX25hbWVzcGFjZV90YWJsZS5o
IgotCiAjaW5jbHVkZSAiY3NzL2Nzc2hlbHBlci5oIgogI2luY2x1ZGUgImNzcy9jc3NzdHlsZXNl
bGVjdG9yLmgiCiAjaW5jbHVkZSAiY3NzL2Nzc19zdHlsZXNoZWV0aW1wbC5oIgpAQCAtNjUsMTcg
KzYzLDExIEBACiAjaW5jbHVkZSAia2h0bWxfc2V0dGluZ3MuaCIKICNpbmNsdWRlICJraHRtbHBh
cnRfcC5oIgogCi0jaW5jbHVkZSAiaHRtbC9odG1sX2Jhc2VpbXBsLmgiCi0jaW5jbHVkZSAiaHRt
bC9odG1sX2Jsb2NraW1wbC5oIgotI2luY2x1ZGUgImh0bWwvaHRtbF9jYW52YXNpbXBsLmgiCisv
LyBGSVhNRTogV2Ugd2FudCB0byBjdXQgdGhlIHJlbWFpbmluZyBIVE1MIGRlcGVuZGVuY2llcyBz
byB0aGF0IHdlIGRvbid0IG5lZWQgdG8gaW5jbHVkZSB0aGVzZSBmaWxlcy4KICNpbmNsdWRlICJo
dG1sL2h0bWxfZG9jdW1lbnRpbXBsLmgiCi0jaW5jbHVkZSAiaHRtbC9odG1sX2Zvcm1pbXBsLmgi
CiAjaW5jbHVkZSAiaHRtbC9odG1sX2hlYWRpbXBsLmgiCiAjaW5jbHVkZSAiaHRtbC9odG1sX2lt
YWdlaW1wbC5oIgotI2luY2x1ZGUgImh0bWwvaHRtbF9saXN0aW1wbC5oIgotI2luY2x1ZGUgImh0
bWwvaHRtbF9taXNjaW1wbC5oIgotI2luY2x1ZGUgImh0bWwvaHRtbF90YWJsZWltcGwuaCIKLSNp
bmNsdWRlICJodG1sL2h0bWxfb2JqZWN0aW1wbC5oIgorI2luY2x1ZGUgImh0bWxmYWN0b3J5Lmgi
CiAKICNpbmNsdWRlICJjc3N2YWx1ZXMuaCIKIApAQCAtNTA0LDkgKzQ5Niw5IEBAIEVsZW1lbnRJ
bXBsICpEb2N1bWVudEltcGw6OmRvY3VtZW50RWxlbWUKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
RWxlbWVudEltcGwqPihuKTsKIH0KIAotRWxlbWVudEltcGwgKkRvY3VtZW50SW1wbDo6Y3JlYXRl
RWxlbWVudCggY29uc3QgRE9NU3RyaW5nICZuYW1lLCBpbnQgJmV4Y2VwdGlvbmNvZGUgKQorRWxl
bWVudEltcGwgKkRvY3VtZW50SW1wbDo6Y3JlYXRlRWxlbWVudChjb25zdCBET01TdHJpbmcgJm5h
bWUsIGludCAmZXhjZXB0aW9uQ29kZSkKIHsKLSAgICByZXR1cm4gbmV3IFhNTEVsZW1lbnRJbXBs
KCBkb2N1bWVudCwgbmFtZS5pbXBsZW1lbnRhdGlvbigpICk7CisgICAgcmV0dXJuIGNyZWF0ZUVs
ZW1lbnROUyhlbXB0eUF0b20sIG5hbWUsIGV4Y2VwdGlvbkNvZGUpOwogfQogCiBEb2N1bWVudEZy
YWdtZW50SW1wbCAqRG9jdW1lbnRJbXBsOjpjcmVhdGVEb2N1bWVudEZyYWdtZW50KCAgKQpAQCAt
NTczLDEwICs1NjUsOCBAQCBOb2RlSW1wbCAqRG9jdW1lbnRJbXBsOjppbXBvcnROb2RlKE5vZGVJ
CiAgICAgICAgICAgICByZXR1cm4gY3JlYXRlQ29tbWVudChpbXBvcnRlZE5vZGUtPm5vZGVWYWx1
ZSgpKTsKICAgICAgICAgY2FzZSBOb2RlOjpFTEVNRU5UX05PREU6IHsKICAgICAgICAgICAgIEVs
ZW1lbnRJbXBsICpvbGRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxlbWVudEltcGwgKj4oaW1wb3J0
ZWROb2RlKTsKLSAgICAgICAgICAgIERvY3VtZW50SW1wbCAqb2xkRG9jID0gb2xkRWxlbWVudC0+
Z2V0RG9jdW1lbnQoKTsKLSAgICAgICAgICAgIHN0YXRpYyBET01TdHJpbmcgSFRNTE5hbWVzcGFj
ZShYSFRNTF9OQU1FU1BBQ0UpOwotICAgICAgICAgICAgRE9NU3RyaW5nIGVsZW1lbnROYW1lc3Bh
Y2UgPSBvbGRFbGVtZW50LT5pc0hUTUxFbGVtZW50KCkgPyBIVE1MTmFtZXNwYWNlIDogb2xkRWxl
bWVudC0+bmFtZXNwYWNlVVJJKCk7Ci0gICAgICAgICAgICBFbGVtZW50SW1wbCAqbmV3RWxlbWVu
dCA9IGNyZWF0ZUVsZW1lbnROUyhlbGVtZW50TmFtZXNwYWNlLmltcGxlbWVudGF0aW9uKCksIG9s
ZEVsZW1lbnQtPnRhZ05hbWUoKSwgZXhjZXB0aW9uY29kZSk7CisgICAgICAgICAgICAvLyBGSVhN
RTogUHJlZml4IGlzIGxvc3QuICBJcyB0aGF0IHJpZ2h0PworICAgICAgICAgICAgRWxlbWVudElt
cGwgKm5ld0VsZW1lbnQgPSBjcmVhdGVFbGVtZW50TlMob2xkRWxlbWVudC0+bmFtZXNwYWNlVVJJ
KCksIG9sZEVsZW1lbnQtPmxvY2FsTmFtZSgpLCBleGNlcHRpb25jb2RlKTsKICAgICAgICAgICAg
IGlmIChleGNlcHRpb25jb2RlICE9IDApCiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAKQEAg
LTU5Nyw3ICs1ODcsOCBAQCBOb2RlSW1wbCAqRG9jdW1lbnRJbXBsOjppbXBvcnROb2RlKE5vZGVJ
CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyAjIyMgZXh0cmFjdCBhbmQgc2V0IG5ldyBwcmVm
aXgKICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgIE5vZGVJbXBs
OjpJZCBub2RlSWQgPSBhdHRySWQob2xkRG9jLT5uYW1lc3BhY2VVUkkoYXR0ci0+YXR0ckltcGwo
KS0+aWQoKSksIGxvY2FsTmFtZS5pbXBsZW1lbnRhdGlvbigpLCBmYWxzZSAvKiBhbGxvY2F0ZSAq
Lyk7CisgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBMb3NlIHRoZSBuYW1lc3BhY2UgaGVy
ZSBmb3Igbm93LiAgVGhpcyBjb2RlIHdpbGwgY2hhbmdlIHNvb24gYW55d2F5LgorICAgICAgICAg
ICAgICAgICAgICBOb2RlSW1wbDo6SWQgbm9kZUlkID0gYXR0cklkKDAsIGxvY2FsTmFtZS5pbXBs
ZW1lbnRhdGlvbigpLCBmYWxzZSAvKiBhbGxvY2F0ZSAqLyk7CiAgICAgICAgICAgICAgICAgICAg
IG5ld0VsZW1lbnQtPnNldEF0dHJpYnV0ZShub2RlSWQsIHZhbHVlLmltcGxlbWVudGF0aW9uKCks
IGV4Y2VwdGlvbmNvZGUpOwogICAgICAgICAgICAgICAgICAgICBpZiAoZXhjZXB0aW9uY29kZSAh
PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBuZXdFbGVtZW50LT5kZXJlZigpOwpAQCAt
NjM2LDI4ICs2MjcsMzUgQEAgTm9kZUltcGwgKkRvY3VtZW50SW1wbDo6aW1wb3J0Tm9kZShOb2Rl
SQogCiBFbGVtZW50SW1wbCAqRG9jdW1lbnRJbXBsOjpjcmVhdGVFbGVtZW50TlMoIGNvbnN0IERP
TVN0cmluZyAmX25hbWVzcGFjZVVSSSwgY29uc3QgRE9NU3RyaW5nICZfcXVhbGlmaWVkTmFtZSwg
aW50ICZleGNlcHRpb25jb2RlKQogewotICAgIEVsZW1lbnRJbXBsICplID0gMDsKLSAgICBRU3Ry
aW5nIHFOYW1lID0gX3F1YWxpZmllZE5hbWUuc3RyaW5nKCk7Ci0gICAgaW50IGNvbG9uUG9zID0g
cU5hbWUuZmluZCgnOicsMCk7Ci0KKyAgICAvLyBTcGxpdCB0aGUgbmFtZS4KKyAgICBpbnQgZXhj
ZXB0aW9uQ29kZSA9IDA7CisgICAgRWxlbWVudEltcGwqIGUgPSAwOworICAgIERPTVN0cmluZyBw
cmVmaXgsIGxvY2FsTmFtZTsKKyAgICBpbnQgY29sb25Qb3MgPSBfcXVhbGlmaWVkTmFtZS5maW5k
KCc6Jyk7CisgICAgaWYgKGNvbG9uUG9zID49IDApIHsKKyAgICAgICAgcHJlZml4ID0gX3F1YWxp
ZmllZE5hbWUuc3Vic3RyaW5nKDAsIGNvbG9uUG9zKTsKKyAgICAgICAgbG9jYWxOYW1lID0gX3F1
YWxpZmllZE5hbWUuc3Vic3RyaW5nKGNvbG9uUG9zKzEsIF9xdWFsaWZpZWROYW1lLmxlbmd0aCgp
IC0gY29sb25Qb3MpOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIGxvY2FsTmFtZSA9IF9xdWFs
aWZpZWROYW1lOworICAgIAorICAgIC8vIEZJWE1FOiBVc2UgcmVnaXN0ZXJlZCBuYW1lc3BhY2Vz
IGFuZCBsb29rIHVwIGluIGEgaGFzaCB0byBmaW5kIHRoZSByaWdodCBmYWN0b3J5LgogICAgIGlm
IChfbmFtZXNwYWNlVVJJID09IFhIVE1MX05BTUVTUEFDRSkgewotICAgICAgICAvLyBVc2VyIHJl
cXVlc3RlZCBhbiBlbGVtZW50IGluIHRoZSBYSFRNTCBuYW1lc3BhY2UgLSB0aGlzIG1lYW5zIHdl
IGNyZWF0ZSBhIHNwZWNpZmljIGVsZW1lbnQKLSAgICAgICAgLy8gKGVsZW1lbnRzIG5vdCBpbiB0
aGlzIG5hbWVzcGFjZSBhcmUgdHJlYXRlZCBhcyBub3JtYWwgWE1MIGVsZW1lbnRzKQotICAgICAg
ICBlID0gY3JlYXRlSFRNTEVsZW1lbnQocU5hbWUubWlkKGNvbG9uUG9zKzEpLCBleGNlcHRpb25j
b2RlKTsKLSAgICAgICAgaWYgKGV4Y2VwdGlvbmNvZGUpCisgICAgICAgIGlmICghaXNWYWxpZE5h
bWUobG9jYWxOYW1lKSkgeworICAgICAgICAgICAgZXhjZXB0aW9uY29kZSA9IERPTUV4Y2VwdGlv
bjo6SU5WQUxJRF9DSEFSQUNURVJfRVJSOwogICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAg
IGlmIChlICYmIGNvbG9uUG9zID49IDApIHsKLSAgICAgICAgICAgIGUtPnNldFByZWZpeChxTmFt
ZS5sZWZ0KGNvbG9uUG9zKSwgZXhjZXB0aW9uY29kZSk7Ci0gICAgICAgICAgICBpZiAoZXhjZXB0
aW9uY29kZSkgewotICAgICAgICAgICAgICAgIGRlbGV0ZSBlOworICAgICAgICB9CisgICAgICAg
IGUgPSBIVE1MRWxlbWVudEZhY3Rvcnk6OmNyZWF0ZUhUTUxFbGVtZW50KEF0b21pY1N0cmluZyhs
b2NhbE5hbWUpLCB0aGlzLCAwLCBmYWxzZSk7CisgICAgICAgIGlmIChlICYmICFwcmVmaXguaXNO
dWxsKCkpIHsKKyAgICAgICAgICAgIGUtPnNldFByZWZpeChBdG9taWNTdHJpbmcocHJlZml4KSwg
ZXhjZXB0aW9uQ29kZSk7CisgICAgICAgICAgICBpZiAoZXhjZXB0aW9uQ29kZSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLQorICAg
IAogICAgIGlmICghZSkKLSAgICAgICAgZSA9IG5ldyBYTUxFbGVtZW50SW1wbCggZG9jdW1lbnQs
IF9xdWFsaWZpZWROYW1lLmltcGxlbWVudGF0aW9uKCksIF9uYW1lc3BhY2VVUkkuaW1wbGVtZW50
YXRpb24oKSApOwotCisgICAgICAgIGUgPSBuZXcgRWxlbWVudEltcGwoUXVhbGlmaWVkTmFtZShB
dG9taWNTdHJpbmcocHJlZml4KSwgQXRvbWljU3RyaW5nKGxvY2FsTmFtZSksIEF0b21pY1N0cmlu
ZyhfbmFtZXNwYWNlVVJJKSksIGRvY3VtZW50KTsKKyAgICAKICAgICByZXR1cm4gZTsKIH0KIApA
QCAtODExLDIyMCArODA5LDYgQEAgdW5zaWduZWQgc2hvcnQgRG9jdW1lbnRJbXBsOjpub2RlVHlw
ZSgpIAogICAgIHJldHVybiBOb2RlOjpET0NVTUVOVF9OT0RFOwogfQogCi1FbGVtZW50SW1wbCAq
RG9jdW1lbnRJbXBsOjpjcmVhdGVIVE1MRWxlbWVudCggY29uc3QgRE9NU3RyaW5nICZuYW1lLCBp
bnQgJmV4Y2VwdGlvbmNvZGUgKQotewotICAgIGlmICghaXNWYWxpZE5hbWUobmFtZSkpIHsKLSAg
ICAgICAgZXhjZXB0aW9uY29kZSA9IERPTUV4Y2VwdGlvbjo6SU5WQUxJRF9DSEFSQUNURVJfRVJS
OwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgcmV0dXJuIGNyZWF0ZUhUTUxFbGVtZW50
KHRhZ0lkKDAsIG5hbWUuaW1wbGVtZW50YXRpb24oKSwgZmFsc2UpKTsKLX0KLQotRWxlbWVudElt
cGwgKkRvY3VtZW50SW1wbDo6Y3JlYXRlSFRNTEVsZW1lbnQodW5zaWduZWQgc2hvcnQgdGFnSUQp
Ci17Ci0gICAgc3dpdGNoICh0YWdJRCkKLSAgICB7Ci0gICAgY2FzZSBJRF9IVE1MOgotICAgICAg
ICByZXR1cm4gbmV3IEhUTUxIdG1sRWxlbWVudEltcGwoZG9jUHRyKCkpOwotICAgIGNhc2UgSURf
SEVBRDoKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MSGVhZEVsZW1lbnRJbXBsKGRvY1B0cigpKTsK
LSAgICBjYXNlIElEX0JPRFk6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTEJvZHlFbGVtZW50SW1w
bChkb2NQdHIoKSk7Ci0KLS8vIGhlYWQgZWxlbWVudHMKLSAgICBjYXNlIElEX0JBU0U6Ci0gICAg
ICAgIHJldHVybiBuZXcgSFRNTEJhc2VFbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0gICAgY2FzZSBJ
RF9MSU5LOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxMaW5rRWxlbWVudEltcGwoZG9jUHRyKCkp
OwotICAgIGNhc2UgSURfTUVUQToKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MTWV0YUVsZW1lbnRJ
bXBsKGRvY1B0cigpKTsKLSAgICBjYXNlIElEX1NUWUxFOgotICAgICAgICByZXR1cm4gbmV3IEhU
TUxTdHlsZUVsZW1lbnRJbXBsKGRvY1B0cigpKTsKLSAgICBjYXNlIElEX1RJVExFOgotICAgICAg
ICByZXR1cm4gbmV3IEhUTUxUaXRsZUVsZW1lbnRJbXBsKGRvY1B0cigpKTsKLQotLy8gZnJhbWVz
Ci0gICAgY2FzZSBJRF9GUkFNRToKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MRnJhbWVFbGVtZW50
SW1wbChkb2NQdHIoKSk7Ci0gICAgY2FzZSBJRF9GUkFNRVNFVDoKLSAgICAgICAgcmV0dXJuIG5l
dyBIVE1MRnJhbWVTZXRFbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0gICAgY2FzZSBJRF9JRlJBTUU6
Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTElGcmFtZUVsZW1lbnRJbXBsKGRvY1B0cigpKTsKLQot
Ly8gZm9ybSBlbGVtZW50cwotLy8gIyMjIEZJWE1FOiB3ZSBuZWVkIGEgd2F5IHRvIHNldCBmb3Jt
IGRlcGVuZGVuY3kgYWZ0ZXIgd2UgaGF2ZSBtYWRlIHRoZSBmb3JtIGVsZW1lbnRzCi0gICAgY2Fz
ZSBJRF9GT1JNOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxGb3JtRWxlbWVudEltcGwoZG9jUHRy
KCkpOwotICAgIGNhc2UgSURfQlVUVE9OOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxCdXR0b25F
bGVtZW50SW1wbChkb2NQdHIoKSk7Ci0gICAgY2FzZSBJRF9GSUVMRFNFVDoKLSAgICAgICAgcmV0
dXJuIG5ldyBIVE1MRmllbGRTZXRFbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0gICAgY2FzZSBJRF9J
TlBVVDoKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MSW5wdXRFbGVtZW50SW1wbChkb2NQdHIoKSk7
Ci0gICAgY2FzZSBJRF9JU0lOREVYOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxJc0luZGV4RWxl
bWVudEltcGwoZG9jUHRyKCkpOwotICAgIGNhc2UgSURfTEFCRUw6Ci0gICAgICAgIHJldHVybiBu
ZXcgSFRNTExhYmVsRWxlbWVudEltcGwoZG9jUHRyKCkpOwotICAgIGNhc2UgSURfTEVHRU5EOgot
ICAgICAgICByZXR1cm4gbmV3IEhUTUxMZWdlbmRFbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0gICAg
Y2FzZSBJRF9PUFRHUk9VUDoKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MT3B0R3JvdXBFbGVtZW50
SW1wbChkb2NQdHIoKSk7Ci0gICAgY2FzZSBJRF9PUFRJT046Ci0gICAgICAgIHJldHVybiBuZXcg
SFRNTE9wdGlvbkVsZW1lbnRJbXBsKGRvY1B0cigpKTsKLSAgICBjYXNlIElEX1NFTEVDVDoKLSAg
ICAgICAgcmV0dXJuIG5ldyBIVE1MU2VsZWN0RWxlbWVudEltcGwoZG9jUHRyKCkpOwotICAgIGNh
c2UgSURfVEVYVEFSRUE6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTFRleHRBcmVhRWxlbWVudElt
cGwoZG9jUHRyKCkpOwotCi0vLyBsaXN0cwotICAgIGNhc2UgSURfREw6Ci0gICAgICAgIHJldHVy
biBuZXcgSFRNTERMaXN0RWxlbWVudEltcGwoZG9jUHRyKCkpOwotICAgIGNhc2UgSURfREQ6Ci0g
ICAgICAgIHJldHVybiBuZXcgSFRNTEdlbmVyaWNFbGVtZW50SW1wbChkb2NQdHIoKSwgdGFnSUQp
OwotICAgIGNhc2UgSURfRFQ6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTEdlbmVyaWNFbGVtZW50
SW1wbChkb2NQdHIoKSwgdGFnSUQpOwotICAgIGNhc2UgSURfVUw6Ci0gICAgICAgIHJldHVybiBu
ZXcgSFRNTFVMaXN0RWxlbWVudEltcGwoZG9jUHRyKCkpOwotICAgIGNhc2UgSURfT0w6Ci0gICAg
ICAgIHJldHVybiBuZXcgSFRNTE9MaXN0RWxlbWVudEltcGwoZG9jUHRyKCkpOwotICAgIGNhc2Ug
SURfRElSOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxEaXJlY3RvcnlFbGVtZW50SW1wbChkb2NQ
dHIoKSk7Ci0gICAgY2FzZSBJRF9NRU5VOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxNZW51RWxl
bWVudEltcGwoZG9jUHRyKCkpOwotICAgIGNhc2UgSURfTEk6Ci0gICAgICAgIHJldHVybiBuZXcg
SFRNTExJRWxlbWVudEltcGwoZG9jUHRyKCkpOwotCi0vLyBmb3JtYXR0aW5nIGVsZW1lbnRzIChi
bG9jaykKLSAgICBjYXNlIElEX0JMT0NLUVVPVEU6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTEJs
b2NrcXVvdGVFbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0gICAgY2FzZSBJRF9ESVY6Ci0gICAgICAg
IHJldHVybiBuZXcgSFRNTERpdkVsZW1lbnRJbXBsKGRvY1B0cigpKTsKLSAgICBjYXNlIElEX0gx
OgotICAgIGNhc2UgSURfSDI6Ci0gICAgY2FzZSBJRF9IMzoKLSAgICBjYXNlIElEX0g0OgotICAg
IGNhc2UgSURfSDU6Ci0gICAgY2FzZSBJRF9INjoKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MSGVh
ZGluZ0VsZW1lbnRJbXBsKGRvY1B0cigpLCB0YWdJRCk7Ci0gICAgY2FzZSBJRF9IUjoKLSAgICAg
ICAgcmV0dXJuIG5ldyBIVE1MSFJFbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0gICAgY2FzZSBJRF9Q
OgotICAgICAgICByZXR1cm4gbmV3IEhUTUxQYXJhZ3JhcGhFbGVtZW50SW1wbChkb2NQdHIoKSk7
Ci0gICAgY2FzZSBJRF9QUkU6Ci0gICAgY2FzZSBJRF9YTVA6Ci0gICAgY2FzZSBJRF9QTEFJTlRF
WFQ6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTFByZUVsZW1lbnRJbXBsKGRvY1B0cigpLCB0YWdJ
RCk7Ci0gICAgY2FzZSBJRF9MQVlFUjoKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MTGF5ZXJFbGVt
ZW50SW1wbChkb2NQdHIoKSk7Ci0KLS8vIGZvbnQgc3R1ZmYKLSAgICBjYXNlIElEX0JBU0VGT05U
OgotICAgICAgICByZXR1cm4gbmV3IEhUTUxCYXNlRm9udEVsZW1lbnRJbXBsKGRvY1B0cigpKTsK
LSAgICBjYXNlIElEX0ZPTlQ6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTEZvbnRFbGVtZW50SW1w
bChkb2NQdHIoKSk7Ci0KLS8vIGlucy9kZWwKLSAgICBjYXNlIElEX0RFTDoKLSAgICBjYXNlIElE
X0lOUzoKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MTW9kRWxlbWVudEltcGwoZG9jUHRyKCksIHRh
Z0lEKTsKLQotLy8gYW5jaG9yCi0gICAgY2FzZSBJRF9BOgotICAgICAgICByZXR1cm4gbmV3IEhU
TUxBbmNob3JFbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0KLS8vIGltYWdlcwotICAgIGNhc2UgSURf
SU1HOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxJbWFnZUVsZW1lbnRJbXBsKGRvY1B0cigpKTsK
LSAgICBjYXNlIElEX01BUDoKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MTWFwRWxlbWVudEltcGwo
ZG9jUHRyKCkpOwotICAgIGNhc2UgSURfQVJFQToKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MQXJl
YUVsZW1lbnRJbXBsKGRvY1B0cigpKTsKLSAgICBjYXNlIElEX0NBTlZBUzoKLSAgICAgICAgcmV0
dXJuIG5ldyBIVE1MQ2FudmFzRWxlbWVudEltcGwoZG9jUHRyKCkpOwotCi0vLyBvYmplY3RzLCBh
cHBsZXRzIGFuZCBzY3JpcHRzCi0gICAgY2FzZSBJRF9BUFBMRVQ6Ci0gICAgICAgIHJldHVybiBu
ZXcgSFRNTEFwcGxldEVsZW1lbnRJbXBsKGRvY1B0cigpKTsKLSAgICBjYXNlIElEX0VNQkVEOgot
ICAgICAgICByZXR1cm4gbmV3IEhUTUxFbWJlZEVsZW1lbnRJbXBsKGRvY1B0cigpKTsKLSAgICBj
YXNlIElEX09CSkVDVDoKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MT2JqZWN0RWxlbWVudEltcGwo
ZG9jUHRyKCkpOwotICAgIGNhc2UgSURfUEFSQU06Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTFBh
cmFtRWxlbWVudEltcGwoZG9jUHRyKCkpOwotICAgIGNhc2UgSURfU0NSSVBUOgotICAgICAgICBy
ZXR1cm4gbmV3IEhUTUxTY3JpcHRFbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0KLS8vIHRhYmxlcwot
ICAgIGNhc2UgSURfVEFCTEU6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTFRhYmxlRWxlbWVudElt
cGwoZG9jUHRyKCkpOwotICAgIGNhc2UgSURfQ0FQVElPTjoKLSAgICAgICAgcmV0dXJuIG5ldyBI
VE1MVGFibGVDYXB0aW9uRWxlbWVudEltcGwoZG9jUHRyKCkpOwotICAgIGNhc2UgSURfQ09MR1JP
VVA6Ci0gICAgY2FzZSBJRF9DT0w6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTFRhYmxlQ29sRWxl
bWVudEltcGwoZG9jUHRyKCksIHRhZ0lEKTsKLSAgICBjYXNlIElEX1RSOgotICAgICAgICByZXR1
cm4gbmV3IEhUTUxUYWJsZVJvd0VsZW1lbnRJbXBsKGRvY1B0cigpKTsKLSAgICBjYXNlIElEX1RE
OgotICAgIGNhc2UgSURfVEg6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTFRhYmxlQ2VsbEVsZW1l
bnRJbXBsKGRvY1B0cigpLCB0YWdJRCk7Ci0gICAgY2FzZSBJRF9USEVBRDoKLSAgICBjYXNlIElE
X1RCT0RZOgotICAgIGNhc2UgSURfVEZPT1Q6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTFRhYmxl
U2VjdGlvbkVsZW1lbnRJbXBsKGRvY1B0cigpLCB0YWdJRCwgZmFsc2UpOwotCi0vLyBpbmxpbmUg
ZWxlbWVudHMKLSAgICBjYXNlIElEX0JSOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxCUkVsZW1l
bnRJbXBsKGRvY1B0cigpKTsKLSAgICBjYXNlIElEX1E6Ci0gICAgICAgIHJldHVybiBuZXcgSFRN
TFF1b3RlRWxlbWVudEltcGwoZG9jUHRyKCkpOwotCi0gICAgY2FzZSBJRF9NQVJRVUVFOgotICAg
ICAgICByZXR1cm4gbmV3IEhUTUxNYXJxdWVlRWxlbWVudEltcGwoZG9jUHRyKCkpOwotICAgCi0v
LyBlbGVtZW50cyB3aXRoIG5vIHNwZWNpYWwgcmVwcmVzZW50YXRpb24gaW4gdGhlIERPTQotCi0v
LyBibG9jazoKLSAgICBjYXNlIElEX0FERFJFU1M6Ci0gICAgY2FzZSBJRF9DRU5URVI6Ci0KLS8v
IGlubGluZQotICAgICAgICAvLyAlZm9udHN0eWxlCi0gICAgY2FzZSBJRF9UVDoKLSAgICBjYXNl
IElEX1U6Ci0gICAgY2FzZSBJRF9COgotICAgIGNhc2UgSURfSToKLSAgICBjYXNlIElEX1M6Ci0g
ICAgY2FzZSBJRF9TVFJJS0U6Ci0gICAgY2FzZSBJRF9CSUc6Ci0gICAgY2FzZSBJRF9TTUFMTDoK
LQotICAgICAgICAvLyAlcGhyYXNlCi0gICAgY2FzZSBJRF9FTToKLSAgICBjYXNlIElEX1NUUk9O
RzoKLSAgICBjYXNlIElEX0RGTjoKLSAgICBjYXNlIElEX0NPREU6Ci0gICAgY2FzZSBJRF9TQU1Q
OgotICAgIGNhc2UgSURfS0JEOgotICAgIGNhc2UgSURfVkFSOgotICAgIGNhc2UgSURfQ0lURToK
LSAgICBjYXNlIElEX0FCQlI6Ci0gICAgY2FzZSBJRF9BQ1JPTllNOgotCi0gICAgICAgIC8vICVz
cGVjaWFsCi0gICAgY2FzZSBJRF9TVUI6Ci0gICAgY2FzZSBJRF9TVVA6Ci0gICAgY2FzZSBJRF9T
UEFOOgotICAgIGNhc2UgSURfTk9CUjoKLSAgICBjYXNlIElEX1dCUjoKLQotICAgIGNhc2UgSURf
QkRPOgotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTEdlbmVyaWNFbGVtZW50
SW1wbChkb2NQdHIoKSwgdGFnSUQpOwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCiBRU3Ry
aW5nIERvY3VtZW50SW1wbDo6bmV4dFN0YXRlKCkKIHsKICAgIFFTdHJpbmcgc3RhdGU7CkBAIC0x
NDY0LDEwICsxMjQ4LDEwIEBAIEhUTUxFbGVtZW50SW1wbCogRG9jdW1lbnRJbXBsOjpib2R5KCkK
ICAgICAvLyB0cnkgdG8gcHJlZmVyIGEgRlJBTUVTRVQgZWxlbWVudCBvdmVyIEJPRFkKICAgICBO
b2RlSW1wbCogYm9keSA9IDA7CiAgICAgZm9yIChOb2RlSW1wbCogaSA9IGRlLT5maXJzdENoaWxk
KCk7IGk7IGkgPSBpLT5uZXh0U2libGluZygpKSB7Ci0gICAgICAgIGlmIChpLT5pZCgpID09IElE
X0ZSQU1FU0VUKQorICAgICAgICBpZiAoaS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZyYW1lc2V0
KCkpKQogICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCo+KGkp
OwogICAgICAgICAKLSAgICAgICAgaWYgKGktPmlkKCkgPT0gSURfQk9EWSkKKyAgICAgICAgaWYg
KGktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpib2R5KCkpKQogICAgICAgICAgICAgYm9keSA9IGk7
CiAgICAgfQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwgKj4oYm9keSk7
CkBAIC0xNTk3LDcgKzEzODEsNyBAQCBib29sIERvY3VtZW50SW1wbDo6c2hvdWxkU2NoZWR1bGVM
YXlvdXQoCiAgICAgLy8gKGMpIHdlIGhhdmUgYSA8Ym9keT4KICAgICByZXR1cm4gKHJlbmRlcmVy
KCkgJiYgcmVuZGVyZXIoKS0+bmVlZHNMYXlvdXQoKSAmJiBoYXZlU3R5bGVzaGVldHNMb2FkZWQo
KSAmJgogICAgICAgICAgICAgZG9jdW1lbnRFbGVtZW50KCkgJiYgZG9jdW1lbnRFbGVtZW50KCkt
PnJlbmRlcmVyKCkgJiYKLSAgICAgICAgICAgIChkb2N1bWVudEVsZW1lbnQoKS0+aWQoKSAhPSBJ
RF9IVE1MIHx8IGJvZHkoKSkpOworICAgICAgICAgICAgKCFkb2N1bWVudEVsZW1lbnQoKS0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6Omh0bWwoKSkgfHwgYm9keSgpKSk7CiB9CiAKIGludCBEb2N1bWVu
dEltcGw6Om1pbmltdW1MYXlvdXREZWxheSgpCkBAIC0xNzIxLDQyICsxNTA1LDYgQEAgdm9pZCBE
b2N1bWVudEltcGw6OmRldGVybWluZVBhcnNlTW9kZSggYwogICAgIGtkRGVidWcoNjAyMCkgPDwg
IiB1c2luZyBzdHJpY3QgcGFyc2VNb2RlIiA8PCBlbmRsOwogfQogCi0vLyBQbGVhc2Ugc2VlIGlm
IHRoZXJlYHMgYSBwb3NzaWJpbGl0eSB0byBtZXJnZSB0aGF0IGNvZGUKLS8vIHdpdGggdGhlIG5l
eHQgZnVuY3Rpb24gYW5kIGdldEVsZW1lbnRCeUlEKCkuCi1Ob2RlSW1wbCAqRG9jdW1lbnRJbXBs
OjpmaW5kRWxlbWVudCggSWQgaWQgKQotewotICAgIFFQdHJTdGFjazxOb2RlSW1wbD4gbm9kZVN0
YWNrOwotICAgIE5vZGVJbXBsICpjdXJyZW50ID0gX2ZpcnN0OwotCi0gICAgd2hpbGUoMSkKLSAg
ICB7Ci0gICAgICAgIGlmKCFjdXJyZW50KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZihub2Rl
U3RhY2suaXNFbXB0eSgpKSBicmVhazsKLSAgICAgICAgICAgIGN1cnJlbnQgPSBub2RlU3RhY2su
cG9wKCk7Ci0gICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC0+bmV4dFNpYmxpbmcoKTsKLSAg
ICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmKGN1cnJlbnQt
PmlkKCkgPT0gaWQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7Ci0KLSAgICAgICAg
ICAgIE5vZGVJbXBsICpjaGlsZCA9IGN1cnJlbnQtPmZpcnN0Q2hpbGQoKTsKLSAgICAgICAgICAg
IGlmKGNoaWxkKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG5vZGVTdGFjay5wdXNo
KGN1cnJlbnQpOwotICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBjaGlsZDsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjdXJy
ZW50ID0gY3VycmVudC0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCiBOb2RlSW1wbCAqRG9jdW1lbnRJbXBsOjpuZXh0
Rm9jdXNOb2RlKE5vZGVJbXBsICpmcm9tTm9kZSkKIHsKICAgICB1bnNpZ25lZCBzaG9ydCBmcm9t
VGFiSW5kZXg7CkBAIC0yMTUxLDEyICsxODk5LDEzIEBAIE5vZGVJbXBsOjpJZCBEb2N1bWVudElt
cGw6OmF0dHJJZChET01TdHIKIAogICAgIC8vIG5vdyBsZXRzIGZpbmQgb3V0IHRoZSBuYW1lc3Bh
Y2UKICAgICBRX1VJTlQxNiBucyA9IG5vTmFtZXNwYWNlOworICAgIC8qIEZJWE1FOiBKdXN0IGJy
ZWFrIG5hbWVzcGFjZWQgYXR0cmlidXRlcyBmb3Igbm93LiAgV2lsbCBmaXggaW4gbmV4dCBzdGFn
ZSBvZiBRdWFsaWZpZWROYW1lIGNvbnZlcnNpb24uCiAgICAgaWYgKF9uYW1lc3BhY2VVUkkpIHsK
ICAgICAgICAgRE9NU3RyaW5nIG5zVShfbmFtZXNwYWNlVVJJKTsKICAgICAgICAgaW50IG5zSUQg
PSBYbWxOYW1lc3BhY2VUYWJsZTo6Z2V0TmFtZXNwYWNlSUQobnNVLCByZWFkb25seSk7CiAgICAg
ICAgIGlmIChuc0lEICE9IC0xKQogICAgICAgICAgICAgbnMgPSAoUV9VSU5UMTYpbnNJRDsKLSAg
ICB9CisgICAgfSovCiAgICAgCiAgICAgLy8gTG9vayBpbiB0aGUgbV9hdHRyTmFtZXMgYXJyYXkg
Zm9yIHRoZSBuYW1lCiAgICAgLy8gIyMjIHllYWgsIHRoaXMgaXMgbGFtZS4gdXNlIGEgZGljdGlv
bmFyeSAvIG1hcCBpbnN0ZWFkCkBAIC0yMjA3LDk1ICsxOTU2LDYgQEAgRE9NU3RyaW5nIERvY3Vt
ZW50SW1wbDo6YXR0ck5hbWUoTm9kZUltcAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLU5vZGVJ
bXBsOjpJZCBEb2N1bWVudEltcGw6OnRhZ0lkKERPTVN0cmluZ0ltcGwqIF9uYW1lc3BhY2VVUkks
IERPTVN0cmluZ0ltcGwgKl9uYW1lLCBib29sIHJlYWRvbmx5KQotewotICAgIGlmICghX25hbWUp
IHJldHVybiAwOwotICAgIC8vIEVhY2ggZG9jdW1lbnQgbWFpbnRhaW5zIGEgbWFwcGluZyBvZiB0
YWcgbmFtZSAtPiBpZCBmb3IgZXZlcnkgdGFnIG5hbWUgZW5jb3VudGVyZWQKLSAgICAvLyBpbiB0
aGUgZG9jdW1lbnQuCi0gICAgTm9kZUltcGw6OklkIGlkID0gMDsKLQotICAgIC8vIEZpcnN0IHNl
ZSBpZiBpdCdzIGEgSFRNTCBlbGVtZW50IG5hbWUKLSAgICBRQ29uc3RTdHJpbmcgbihfbmFtZS0+
cywgX25hbWUtPmwpOwotICAgIGlmICghX25hbWVzcGFjZVVSSSB8fCAhc3RyY2FzZWNtcChfbmFt
ZXNwYWNlVVJJLCBYSFRNTF9OQU1FU1BBQ0UpKSB7Ci0gICAgICAgIC8vIHdlJ3JlIGluIEhUTUwg
bmFtZXNwYWNlIGlmIHdlIGtub3cgdGhlIHRhZy4KLSAgICAgICAgLy8geGh0bWwgaXMgbG93ZXIg
Y2FzZSAtIGNhc2Ugc2Vuc2l0aXZlLCBlYXN5IHRvIGltcGxlbWVudAotICAgICAgICBpZiAoIGh0
bWxNb2RlKCkgPT0gWEh0bWwgJiYgKGlkID0gZ2V0VGFnSUQobi5zdHJpbmcoKS5hc2NpaSgpLCBf
bmFtZS0+bCkpICkKLSAgICAgICAgICAgIHJldHVybiBpZDsKLSAgICAgICAgLy8gY29tcGF0aWJp
bGl0eTogdXBwZXIgY2FzZSAtIGNhc2UgaW5zZW5zaXRpdmUKLSAgICAgICAgaWYgKCBodG1sTW9k
ZSgpICE9IFhIdG1sICYmIChpZCA9IGdldFRhZ0lEKG4uc3RyaW5nKCkubG93ZXIoKS5hc2NpaSgp
LCBfbmFtZS0+bCApKSApCi0gICAgICAgICAgICByZXR1cm4gaWQ7Ci0KLSAgICAgICAgLy8gb2ss
IHRoZSBmYXN0IHBhdGggZGlkbid0IHdvcmsgb3V0LCB3ZSBuZWVkIHRoZSBmdWxsIGNoZWNrCi0g
ICAgfQotCi0gICAgLy8gbm93IGxldHMgZmluZCBvdXQgdGhlIG5hbWVzcGFjZQotICAgIFFfVUlO
VDE2IG5zID0gbm9OYW1lc3BhY2U7Ci0gICAgaWYgKF9uYW1lc3BhY2VVUkkpIHsKLSAgICAgICAg
RE9NU3RyaW5nIG5zVShfbmFtZXNwYWNlVVJJKTsKLSAgICAgICAgaW50IG5zSUQgPSBYbWxOYW1l
c3BhY2VUYWJsZTo6Z2V0TmFtZXNwYWNlSUQobnNVLCByZWFkb25seSk7Ci0gICAgICAgIGlmIChu
c0lEICE9IC0xKQotICAgICAgICAgICAgbnMgPSAoUV9VSU5UMTYpbnNJRDsKLSAgICB9Ci0KLSAg
ICAvLyBMb29rIGluIHRoZSBtX2VsZW1lbnROYW1lcyBhcnJheSBmb3IgdGhlIG5hbWUKLSAgICAv
LyAjIyMgeWVhaCwgdGhpcyBpcyBsYW1lLiB1c2UgYSBkaWN0aW9uYXJ5IC8gbWFwIGluc3RlYWQK
LSAgICBET01TdHJpbmcgbm1lKG4uc3RyaW5nKCkpOwotICAgIC8vIGNvbXBhdGliaWxpdHkgbW9k
ZSBoYXMgdG8gc3RvcmUgdXBwZXIgY2FzZQotICAgIGlmIChodG1sTW9kZSgpICE9IFhIdG1sKSBu
bWUgPSBubWUudXBwZXIoKTsKLSAgICBmb3IgKGlkID0gMDsgaWQgPCBtX2VsZW1lbnROYW1lQ291
bnQ7IGlkKyspCi0gICAgICAgIGlmIChET01TdHJpbmcobV9lbGVtZW50TmFtZXNbaWRdKSA9PSBu
bWUpCi0gICAgICAgICAgICByZXR1cm4gbWFrZUlkKG5zLCBJRF9MQVNUX1RBRyArIDEgKyBpZCk7
Ci0KLSAgICAvLyB1bmtub3duCi0gICAgaWYgKHJlYWRvbmx5KSByZXR1cm4gMDsKLQotICAgIC8v
IE5hbWUgbm90IGZvdW5kIGluIG1fZWxlbWVudE5hbWVzLCBzbyBsZXQncyBhZGQgaXQKLSAgICBp
ZiAobV9lbGVtZW50TmFtZUNvdW50KzEgPiBtX2VsZW1lbnROYW1lQWxsb2MpIHsKLSAgICAgICAg
bV9lbGVtZW50TmFtZUFsbG9jICs9IDEwMDsKLSAgICAgICAgRE9NU3RyaW5nSW1wbCAqKm5ld05h
bWVzID0gbmV3IERPTVN0cmluZ0ltcGwqIFttX2VsZW1lbnROYW1lQWxsb2NdOwotICAgICAgICAv
LyAjIyMgeWVhaCwgdGhpcyBpcyBsYW1lLiB1c2UgYSBkaWN0aW9uYXJ5IC8gbWFwIGluc3RlYWQK
LSAgICAgICAgaWYgKG1fZWxlbWVudE5hbWVzKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzaG9y
dCBpOwotICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG1fZWxlbWVudE5hbWVDb3VudDsgaSsr
KQotICAgICAgICAgICAgICAgIG5ld05hbWVzW2ldID0gbV9lbGVtZW50TmFtZXNbaV07Ci0gICAg
ICAgICAgICBkZWxldGUgW10gbV9lbGVtZW50TmFtZXM7Ci0gICAgICAgIH0KLSAgICAgICAgbV9l
bGVtZW50TmFtZXMgPSBuZXdOYW1lczsKLSAgICB9Ci0KLSAgICBpZCA9IG1fZWxlbWVudE5hbWVD
b3VudCsrOwotICAgIG1fZWxlbWVudE5hbWVzW2lkXSA9IG5tZS5pbXBsZW1lbnRhdGlvbigpOwot
ICAgIG1fZWxlbWVudE5hbWVzW2lkXS0+cmVmKCk7Ci0KLSAgICByZXR1cm4gbWFrZUlkKG5zLCBJ
RF9MQVNUX1RBRyArIDEgKyBpZCk7Ci19Ci0KLURPTVN0cmluZyBEb2N1bWVudEltcGw6OnRhZ05h
bWUoTm9kZUltcGw6OklkIF9pZCkgY29uc3QKLXsKLSAgICBpZiAobG9jYWxOYW1lUGFydChfaWQp
ID4gSURfTEFTVF9UQUcpCi0gICAgICAgIHJldHVybiBtX2VsZW1lbnROYW1lc1tsb2NhbE5hbWVQ
YXJ0KF9pZCkgLSAoSURfTEFTVF9UQUcgKyAxKV07Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8vICMj
IyBwdXQgdGhlbSBpbiBhIGNhY2hlCi0gICAgICAgIGlmIChodG1sTW9kZSgpID09IFhIdG1sKQot
ICAgICAgICAgICAgcmV0dXJuIGdldFRhZ05hbWUoX2lkKS5sb3dlcigpOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICByZXR1cm4gZ2V0VGFnTmFtZShfaWQpOwotICAgIH0KLX0KLQotCi1ET01T
dHJpbmdJbXBsKiBEb2N1bWVudEltcGw6Om5hbWVzcGFjZVVSSShOb2RlSW1wbDo6SWQgX2lkKSBj
b25zdAotewotICAgIGlmIChfaWQgPD0gSURfTEFTVF9UQUcpCi0gICAgICAgIHJldHVybiBodG1s
TW9kZSgpID09IFhIdG1sID8gWG1sTmFtZXNwYWNlVGFibGU6OmdldE5hbWVzcGFjZVVSSSh4aHRt
bE5hbWVzcGFjZSkuaW1wbGVtZW50YXRpb24oKSA6IDA7Ci0KLSAgICB1bnNpZ25lZCBzaG9ydCBu
cyA9IF9pZCA+PiAxNjsKLQotICAgIGlmICghbnMpIHJldHVybiAwOwotCi0gICAgcmV0dXJuIFht
bE5hbWVzcGFjZVRhYmxlOjpnZXROYW1lc3BhY2VVUkkobnMpLmltcGxlbWVudGF0aW9uKCk7Ci19
Ci0KIFN0eWxlU2hlZXRMaXN0SW1wbCogRG9jdW1lbnRJbXBsOjpzdHlsZVNoZWV0cygpCiB7CiAg
ICAgcmV0dXJuIG1fc3R5bGVTaGVldHM7CkBAIC0yNDE5LDExICsyMDc5LDExIEBAIHZvaWQgRG9j
dW1lbnRJbXBsOjpyZWNhbGNTdHlsZVNlbGVjdG9yKCkKICAgICAgICAgICAgIH0KIAogICAgICAg
ICB9Ci0gICAgICAgIGVsc2UgaWYgKG4tPmlzSFRNTEVsZW1lbnQoKSAmJiAobi0+aWQoKSA9PSBJ
RF9MSU5LIHx8IG4tPmlkKCkgPT0gSURfU1RZTEUpKSB7Ci0gICAgICAgICAgICBFbGVtZW50SW1w
bCAqZSA9IHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsICo+KG4pOworICAgICAgICBlbHNlIGlmIChu
LT5pc0hUTUxFbGVtZW50KCkgJiYgKG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpsaW5rKCkpIHx8
IG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzdHlsZSgpKSkpIHsKKyAgICAgICAgICAgIEhUTUxF
bGVtZW50SW1wbCAqZSA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCAqPihuKTsKICAgICAg
ICAgICAgIFFTdHJpbmcgdGl0bGUgPSBlLT5nZXRBdHRyaWJ1dGUoIEFUVFJfVElUTEUgKS5zdHJp
bmcoKTsKICAgICAgICAgICAgIGJvb2wgZW5hYmxlZFZpYVNjcmlwdCA9IGZhbHNlOwotICAgICAg
ICAgICAgaWYgKG4tPmlkKCkgPT0gSURfTElOSykgeworICAgICAgICAgICAgaWYgKGUtPmhhc0xv
Y2FsTmFtZShIVE1MTmFtZXM6OmxpbmsoKSkpIHsKICAgICAgICAgICAgICAgICAvLyA8TElOSz4g
ZWxlbWVudAogICAgICAgICAgICAgICAgIEhUTUxMaW5rRWxlbWVudEltcGwqIGwgPSBzdGF0aWNf
Y2FzdDxIVE1MTGlua0VsZW1lbnRJbXBsKj4obik7CiAgICAgICAgICAgICAgICAgaWYgKGwtPmlz
TG9hZGluZygpIHx8IGwtPmlzRGlzYWJsZWQoKSkKQEAgLTI0MzUsNyArMjA5NSw3IEBAIHZvaWQg
RG9jdW1lbnRJbXBsOjpyZWNhbGNTdHlsZVNlbGVjdG9yKCkKIAogICAgICAgICAgICAgLy8gR2V0
IHRoZSBjdXJyZW50IHByZWZlcnJlZCBzdHlsZXNldC4gIFRoaXMgaXMgdGhlCiAgICAgICAgICAg
ICAvLyBzZXQgb2Ygc2hlZXRzIHRoYXQgd2lsbCBiZSBlbmFibGVkLgotICAgICAgICAgICAgaWYg
KCBuLT5pZCgpID09IElEX0xJTksgKQorICAgICAgICAgICAgaWYgKGUtPmhhc0xvY2FsTmFtZShI
VE1MTmFtZXM6OmxpbmsoKSkpCiAgICAgICAgICAgICAgICAgc2hlZXQgPSBzdGF0aWNfY2FzdDxI
VE1MTGlua0VsZW1lbnRJbXBsKj4obiktPnNoZWV0KCk7CiAgICAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgICAgICAgLy8gPFNUWUxFPiBlbGVtZW50CkBAIC0yNDUyLDcgKzIxMTIsNyBAQCB2b2lk
IERvY3VtZW50SW1wbDo6cmVjYWxjU3R5bGVTZWxlY3RvcigpCiAgICAgICAgICAgICAgICAgICAg
IC8vIHVzIGFzIHRoZSBwcmVmZXJyZWQgc2V0LiAgT3RoZXJ3aXNlLCBqdXN0IGlnbm9yZQogICAg
ICAgICAgICAgICAgICAgICAvLyB0aGlzIHNoZWV0LgogICAgICAgICAgICAgICAgICAgICBRU3Ry
aW5nIHJlbCA9IGUtPmdldEF0dHJpYnV0ZSggQVRUUl9SRUwgKS5zdHJpbmcoKTsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKG4tPmlkKCkgPT0gSURfU1RZTEUgfHwgIXJlbC5jb250YWlucygiYWx0
ZXJuYXRlIikpCisgICAgICAgICAgICAgICAgICAgIGlmIChlLT5oYXNMb2NhbE5hbWUoSFRNTE5h
bWVzOjpzdHlsZSgpKSB8fCAhcmVsLmNvbnRhaW5zKCJhbHRlcm5hdGUiKSkKICAgICAgICAgICAg
ICAgICAgICAgICAgIG1fcHJlZmVycmVkU3R5bGVzaGVldFNldCA9IHZpZXcoKS0+cGFydCgpLT5k
LT5tX3NoZWV0VXNlZCA9IHRpdGxlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgICAKQEAgLTI0NzEsNyArMjEzMSw3IEBAIHZvaWQgRG9jdW1lbnRJbXBsOjpyZWNhbGNT
dHlsZVNlbGVjdG9yKCkKICAgICAKICAgICAgICAgLy8gRm9yIEhUTUwgZG9jdW1lbnRzLCBzdHls
ZXNoZWV0cyBhcmUgbm90IGFsbG93ZWQgd2l0aGluL2FmdGVyIHRoZSA8Qk9EWT4gdGFnLiBTbyB3
ZQogICAgICAgICAvLyBjYW4gc3RvcCBzZWFyY2hpbmcgaGVyZS4KLSAgICAgICAgaWYgKGlzSFRN
TERvY3VtZW50KCkgJiYgbi0+aWQoKSA9PSBJRF9CT0RZKQorICAgICAgICBpZiAoaXNIVE1MRG9j
dW1lbnQoKSAmJiBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Ym9keSgpKSkKICAgICAgICAgICAg
IGJyZWFrOwogICAgIH0KIApJbmRleDoga2h0bWwveG1sL2RvbV9kb2NpbXBsLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwveG1sL2RvbV9kb2NpbXBsLmgsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuMTE1CmRpZmYgLXUgLXAgLXIxLjExNSBraHRtbC94bWwvZG9t
X2RvY2ltcGwuaAotLS0ga2h0bWwveG1sL2RvbV9kb2NpbXBsLmgJMjIgSnVuIDIwMDUgMTg6MjI6
MDIgLTAwMDAJMS4xMTUKKysrIGtodG1sL3htbC9kb21fZG9jaW1wbC5oCTUgSnVsIDIwMDUgMjM6
MjE6MDQgLTAwMDAKQEAgLTE3Nyw3ICsxNzcsNyBAQCBwdWJsaWM6CiAKICAgICBET01JbXBsZW1l
bnRhdGlvbkltcGwgKmltcGxlbWVudGF0aW9uKCkgY29uc3Q7CiAgICAgdmlydHVhbCBFbGVtZW50
SW1wbCAqZG9jdW1lbnRFbGVtZW50KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBFbGVtZW50SW1wbCAq
Y3JlYXRlRWxlbWVudCAoIGNvbnN0IERPTVN0cmluZyAmdGFnTmFtZSwgaW50ICZleGNlcHRpb25j
b2RlICk7CisgICAgdmlydHVhbCBFbGVtZW50SW1wbCAqY3JlYXRlRWxlbWVudChjb25zdCBET01T
dHJpbmcgJnRhZ05hbWUsIGludCAmZXhjZXB0aW9uY29kZSk7CiAgICAgRG9jdW1lbnRGcmFnbWVu
dEltcGwgKmNyZWF0ZURvY3VtZW50RnJhZ21lbnQgKCk7CiAgICAgVGV4dEltcGwgKmNyZWF0ZVRl
eHROb2RlICggY29uc3QgRE9NU3RyaW5nICZkYXRhICk7CiAgICAgQ29tbWVudEltcGwgKmNyZWF0
ZUNvbW1lbnQgKCBjb25zdCBET01TdHJpbmcgJmRhdGEgKTsKQEAgLTE4OCw3ICsxODgsNyBAQCBw
dWJsaWM6CiAgICAgQXR0ckltcGwgKmNyZWF0ZUF0dHJpYnV0ZU5TKGNvbnN0IERPTVN0cmluZyAm
bmFtZXNwYWNlVVJJLCBjb25zdCBET01TdHJpbmcgJnF1YWxpZmllZE5hbWUsIGludCAmZXhjZXB0
aW9uKTsKICAgICBFbnRpdHlSZWZlcmVuY2VJbXBsICpjcmVhdGVFbnRpdHlSZWZlcmVuY2UgKCBj
b25zdCBET01TdHJpbmcgJm5hbWUgKTsKICAgICBOb2RlSW1wbCAqaW1wb3J0Tm9kZSggTm9kZUlt
cGwgKmltcG9ydGVkTm9kZSwgYm9vbCBkZWVwLCBpbnQgJmV4Y2VwdGlvbmNvZGUgKTsKLSAgICB2
aXJ0dWFsIEVsZW1lbnRJbXBsICpjcmVhdGVFbGVtZW50TlMgKCBjb25zdCBET01TdHJpbmcgJl9u
YW1lc3BhY2VVUkksIGNvbnN0IERPTVN0cmluZyAmX3F1YWxpZmllZE5hbWUsIGludCAmZXhjZXB0
aW9uY29kZSApOworICAgIHZpcnR1YWwgRWxlbWVudEltcGwgKmNyZWF0ZUVsZW1lbnROUyhjb25z
dCBET01TdHJpbmcgJl9uYW1lc3BhY2VVUkksIGNvbnN0IERPTVN0cmluZyAmX3F1YWxpZmllZE5h
bWUsIGludCAmZXhjZXB0aW9uY29kZSk7CiAgICAgRWxlbWVudEltcGwgKmdldEVsZW1lbnRCeUlk
ICggY29uc3QgRE9NU3RyaW5nICZlbGVtZW50SWQgKSBjb25zdDsKICAgICBFbGVtZW50SW1wbCAq
ZWxlbWVudEZyb21Qb2ludCAoIGNvbnN0IGludCBfeCwgY29uc3QgaW50IF95ICkgY29uc3Q7CiAK
QEAgLTIxOCw5ICsyMTgsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlzRG9jdW1lbnRO
b2RlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0hUTUxEb2N1
bWVudCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICBFbGVtZW50SW1wbCAqY3JlYXRl
SFRNTEVsZW1lbnQoY29uc3QgRE9NU3RyaW5nICZ0YWdOYW1lLCBpbnQgJmV4Y2VwdGlvbmNvZGUp
OwotICAgIEVsZW1lbnRJbXBsICpjcmVhdGVIVE1MRWxlbWVudCh1bnNpZ25lZCBzaG9ydCB0YWdJ
RCk7Ci0KICAgICBraHRtbDo6Q1NTU3R5bGVTZWxlY3RvciAqc3R5bGVTZWxlY3RvcigpIHsgcmV0
dXJuIG1fc3R5bGVTZWxlY3RvcjsgfQogCiAgICAgRWxlbWVudEltcGwgKkRvY3VtZW50SW1wbDo6
Z2V0RWxlbWVudEJ5QWNjZXNzS2V5KCBjb25zdCBET01TdHJpbmcgJmtleSApOwpAQCAtMzg3LDkg
KzM4NCw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlc2V0VmlzaXRlZExpbmtDb2xvcigpOwogICAg
IHZvaWQgcmVzZXRBY3RpdmVMaW5rQ29sb3IoKTsKICAgICAKLSAgICAvLyBpbnRlcm5hbAotICAg
IE5vZGVJbXBsICpmaW5kRWxlbWVudCggSWQgaWQgKTsKLQogICAgIGJvb2wgcHJlcGFyZU1vdXNl
RXZlbnQoIGJvb2wgcmVhZG9ubHksIGludCB4LCBpbnQgeSwgTW91c2VFdmVudCAqZXYgKTsKIAog
ICAgIHZpcnR1YWwgYm9vbCBjaGlsZEFsbG93ZWQoIE5vZGVJbXBsICpuZXdDaGlsZCApOwpAQCAt
Mzk5LDE2ICszOTMsOSBAQCBwdWJsaWM6CiAgICAgLy8gIyMjIHRoaW5rIGFib3V0IGltcGxlbWVu
dGluZyByZWYnY291bnRpbmcgZm9yIHRoZSBpZCdzCiAgICAgLy8gaW4gb3JkZXIgdG8gYmUgYWJs
ZSB0byByZWFzc2lnbiB0aG9zZSB0aGF0IGFyZSBubyBsb25nZXIgaW4gdXNlCiAgICAgLy8gKGNv
dWxkIG1ha2UgcHJvYmxlbXMgd2hlbiBpdCBpcyBzdGlsbCBrZXB0IHNvbWV3aGVyZSBhcm91bmQs
IGkuZS4gc3R5bGVzZWxlY3RvcikKLSAgICBOb2RlSW1wbDo6SWQgdGFnSWQoRE9NU3RyaW5nSW1w
bCogX25hbWVzcGFjZVVSSSwgRE9NU3RyaW5nSW1wbCAqX25hbWUsIGJvb2wgcmVhZG9ubHkpOwot
ICAgIERPTVN0cmluZyB0YWdOYW1lKE5vZGVJbXBsOjpJZCBfaWQpIGNvbnN0OwotCiAgICAgTm9k
ZUltcGw6OklkIGF0dHJJZChET01TdHJpbmdJbXBsKiBfbmFtZXNwYWNlVVJJLCBET01TdHJpbmdJ
bXBsICpfbmFtZSwgYm9vbCByZWFkb25seSk7CiAgICAgRE9NU3RyaW5nIGF0dHJOYW1lKE5vZGVJ
bXBsOjpJZCBfaWQpIGNvbnN0OwogCi0gICAgLy8gdGhlIG5hbWVzcGFjZSB1cmkgaXMgbWFwcGVk
IHRvIHRoZSBzYW1lIGlkIGZvciBib3RoCi0gICAgLy8gdGFnbmFtZXMgYXMgd2VsbCBhcyBhdHRy
aWJ1dGVzLgotICAgIERPTVN0cmluZ0ltcGwqIG5hbWVzcGFjZVVSSShOb2RlSW1wbDo6SWQgX2lk
KSBjb25zdDsKLQogICAgIFN0eWxlU2hlZXRMaXN0SW1wbCogc3R5bGVTaGVldHMoKTsKIAogICAg
IC8qIE5ld2x5IHByb3Bvc2VkIENTUzMgbWVjaGFuaXNtIGZvciBzZWxlY3RpbmcgYWx0ZXJuYXRl
CkluZGV4OiBraHRtbC94bWwvZG9tX2VsZW1lbnRpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC94bWwvZG9tX2VsZW1lbnRpbXBsLmNwcCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS42NwpkaWZmIC11IC1wIC1yMS42NyBraHRtbC94bWwvZG9tX2VsZW1l
bnRpbXBsLmNwcAotLS0ga2h0bWwveG1sL2RvbV9lbGVtZW50aW1wbC5jcHAJMTEgTWF5IDIwMDUg
MDU6NDk6MzUgLTAwMDAJMS42NworKysga2h0bWwveG1sL2RvbV9lbGVtZW50aW1wbC5jcHAJNSBK
dWwgMjAwNSAyMzoyMTowNSAtMDAwMApAQCAtOTAsMTggKzkwLDE4IEBAIHVuc2lnbmVkIHNob3J0
IEF0dHJJbXBsOjpub2RlVHlwZSgpIGNvbnMKICAgICByZXR1cm4gTm9kZTo6QVRUUklCVVRFX05P
REU7CiB9CiAKLURPTVN0cmluZyBBdHRySW1wbDo6cHJlZml4KCkgY29uc3QKK2NvbnN0IEF0b21p
Y1N0cmluZyYgQXR0ckltcGw6OnByZWZpeCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fYXR0cmli
dXRlLT5wcmVmaXgoKTsKIH0KIAotdm9pZCBBdHRySW1wbDo6c2V0UHJlZml4KGNvbnN0IERPTVN0
cmluZyAmX3ByZWZpeCwgaW50ICZleGNlcHRpb25jb2RlICkKK3ZvaWQgQXR0ckltcGw6OnNldFBy
ZWZpeChjb25zdCBBdG9taWNTdHJpbmcgJl9wcmVmaXgsIGludCAmZXhjZXB0aW9uY29kZSApCiB7
CiAgICAgY2hlY2tTZXRQcmVmaXgoX3ByZWZpeCwgZXhjZXB0aW9uY29kZSk7CiAgICAgaWYgKGV4
Y2VwdGlvbmNvZGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fYXR0cmlidXRlLT5zZXRQcmVm
aXgoX3ByZWZpeC5pbXBsZW1lbnRhdGlvbigpKTsKKyAgICBtX2F0dHJpYnV0ZS0+c2V0UHJlZml4
KF9wcmVmaXgpOwogfQogCiBET01TdHJpbmcgQXR0ckltcGw6Om5vZGVWYWx1ZSgpIGNvbnN0CkBA
IC0yMDIsMTEgKzIwMiwxMCBAQCBET01TdHJpbmcgQXR0ckltcGw6OnZhbHVlKCkgY29uc3QKIAog
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogCi1FbGVtZW50SW1wbDo6RWxlbWVudEltcGwoRG9jdW1lbnRQ
dHIgKmRvYykKLSAgICA6IENvbnRhaW5lck5vZGVJbXBsKGRvYykKK0VsZW1lbnRJbXBsOjpFbGVt
ZW50SW1wbChjb25zdCBRdWFsaWZpZWROYW1lJiBxTmFtZSwgRG9jdW1lbnRQdHIgKmRvYykKKyAg
ICA6IENvbnRhaW5lck5vZGVJbXBsKGRvYyksIG1fdGFnTmFtZShxTmFtZSkKIHsKICAgICBuYW1l
ZEF0dHJNYXAgPSAwOwotICAgIG1fcHJlZml4ID0gMDsKIH0KIAogRWxlbWVudEltcGw6On5FbGVt
ZW50SW1wbCgpCkBAIC0yMTUsOSArMjE0LDIyIEBAIEVsZW1lbnRJbXBsOjp+RWxlbWVudEltcGwo
KQogICAgICAgICBuYW1lZEF0dHJNYXAtPmRldGFjaEZyb21FbGVtZW50KCk7CiAgICAgICAgIG5h
bWVkQXR0ck1hcC0+ZGVyZWYoKTsKICAgICB9Cit9CiAKLSAgICBpZiAobV9wcmVmaXgpCi0gICAg
ICAgIG1fcHJlZml4LT5kZXJlZigpOworTm9kZUltcGwgKkVsZW1lbnRJbXBsOjpjbG9uZU5vZGUo
Ym9vbCBkZWVwKQoreworICAgIGludCBleGNlcHRpb25Db2RlID0gMDsKKyAgICBFbGVtZW50SW1w
bCAqY2xvbmUgPSBnZXREb2N1bWVudCgpLT5jcmVhdGVFbGVtZW50TlMobmFtZXNwYWNlVVJJKCks
IG5vZGVOYW1lKCksIGV4Y2VwdGlvbkNvZGUpOworICAgIGFzc2VydCghZXhjZXB0aW9uQ29kZSk7
CisgICAgCisgICAgLy8gY2xvbmUgYXR0cmlidXRlcworICAgIGlmIChuYW1lZEF0dHJNYXApCisg
ICAgICAgICpjbG9uZS0+YXR0cmlidXRlcygpID0gKm5hbWVkQXR0ck1hcDsKKworICAgIGlmIChk
ZWVwKQorICAgICAgICBjbG9uZUNoaWxkTm9kZXMoY2xvbmUpOworCisgICAgcmV0dXJuIGNsb25l
OwogfQogCiB2b2lkIEVsZW1lbnRJbXBsOjpyZW1vdmVBdHRyaWJ1dGUoIE5vZGVJbXBsOjpJZCBp
ZCwgaW50ICZleGNlcHRpb25jb2RlICkKQEAgLTM1MSwzNiArMzYzLDI0IEBAIHZvaWQgRWxlbWVu
dEltcGw6OnNldEF0dHJpYnV0ZU1hcCggTmFtZWQKIGJvb2wgRWxlbWVudEltcGw6Omhhc0F0dHJp
YnV0ZXMoKSBjb25zdAogewogICAgIHVwZGF0ZVN0eWxlQXR0cmlidXRlSWZOZWVkZWQoKTsKLQog
ICAgIHJldHVybiBuYW1lZEF0dHJNYXAgJiYgbmFtZWRBdHRyTWFwLT5sZW5ndGgoKSA+IDA7CiB9
CiAKIERPTVN0cmluZyBFbGVtZW50SW1wbDo6bm9kZU5hbWUoKSBjb25zdAogewotICAgIHJldHVy
biB0YWdOYW1lKCk7Ci19Ci0KLURPTVN0cmluZyBFbGVtZW50SW1wbDo6dGFnTmFtZSgpIGNvbnN0
Ci17Ci0gICAgRE9NU3RyaW5nIHRuID0gZ2V0RG9jdW1lbnQoKS0+dGFnTmFtZShpZCgpKTsKLQot
ICAgIGlmIChtX3ByZWZpeCkKLSAgICAgICAgcmV0dXJuIERPTVN0cmluZyhtX3ByZWZpeCkgKyAi
OiIgKyB0bjsKLQorICAgIERPTVN0cmluZyB0biA9IG1fdGFnTmFtZS5sb2NhbE5hbWUoKTsKKyAg
ICBpZiAobV90YWdOYW1lLmhhc1ByZWZpeCgpKQorICAgICAgICByZXR1cm4gRE9NU3RyaW5nKG1f
dGFnTmFtZS5wcmVmaXgoKSkgKyAiOiIgKyB0bjsKICAgICByZXR1cm4gdG47CiB9CiAKLXZvaWQg
RWxlbWVudEltcGw6OnNldFByZWZpeCggY29uc3QgRE9NU3RyaW5nICZfcHJlZml4LCBpbnQgJmV4
Y2VwdGlvbmNvZGUgKQordm9pZCBFbGVtZW50SW1wbDo6c2V0UHJlZml4KGNvbnN0IEF0b21pY1N0
cmluZyAmX3ByZWZpeCwgaW50ICZleGNlcHRpb25jb2RlKQogewogICAgIGNoZWNrU2V0UHJlZml4
KF9wcmVmaXgsIGV4Y2VwdGlvbmNvZGUpOwogICAgIGlmIChleGNlcHRpb25jb2RlKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBpZiAobV9wcmVmaXgpCi0gICAgICAgIG1fcHJlZml4LT5kZXJlZigp
OwotICAgIG1fcHJlZml4ID0gX3ByZWZpeC5pbXBsZW1lbnRhdGlvbigpOwotICAgIGlmIChtX3By
ZWZpeCkKLSAgICAgICAgbV9wcmVmaXgtPnJlZigpOworICAgIG1fdGFnTmFtZS5zZXRQcmVmaXgo
X3ByZWZpeCk7CiB9CiAKIHZvaWQgRWxlbWVudEltcGw6OmNyZWF0ZUF0dHJpYnV0ZU1hcCgpIGNv
bnN0CkBAIC01MjEsMTggKzUyMSw2IEBAIHZvaWQgRWxlbWVudEltcGw6OnJlY2FsY1N0eWxlKCBT
dHlsZUNoYW4KICAgICBzZXRIYXNDaGFuZ2VkQ2hpbGQoIGZhbHNlICk7CiB9CiAKLS8vIERPTSBT
ZWN0aW9uIDEuMS4xCi1ib29sIEVsZW1lbnRJbXBsOjpjaGlsZEFsbG93ZWQoIE5vZGVJbXBsICpu
ZXdDaGlsZCApCi17Ci0gICAgaWYgKCFjaGlsZFR5cGVBbGxvd2VkKG5ld0NoaWxkLT5ub2RlVHlw
ZSgpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gRm9yIFhNTCBkb2N1bWVudHMs
IHdlIGFyZSBub24tdmFsaWRhdGluZyBhbmQgZG8gbm90IGNoZWNrIGFnYWluc3QgYSBEVEQsIGV2
ZW4gZm9yIEhUTUwgZWxlbWVudHMuCi0gICAgaWYgKGdldERvY3VtZW50KCktPmlzSFRNTERvY3Vt
ZW50KCkpCi0gICAgICAgIHJldHVybiBjaGVja0NoaWxkKGlkKCksIG5ld0NoaWxkLT5pZCgpLCAh
Z2V0RG9jdW1lbnQoKS0+aW5Db21wYXRNb2RlKCkpOwotICAgIHJldHVybiB0cnVlOwotfQotCiBi
b29sIEVsZW1lbnRJbXBsOjpjaGlsZFR5cGVBbGxvd2VkKCB1bnNpZ25lZCBzaG9ydCB0eXBlICkK
IHsKICAgICBzd2l0Y2ggKHR5cGUpIHsKQEAgLTU2OSw3ICs1NTcsNyBAQCB2b2lkIEVsZW1lbnRJ
bXBsOjpkaXNwYXRjaEF0dHJBZGRpdGlvbkV2CiAKIERPTVN0cmluZyBFbGVtZW50SW1wbDo6b3Bl
blRhZ1N0YXJ0VG9TdHJpbmcoKSBjb25zdAogewotICAgIERPTVN0cmluZyByZXN1bHQgPSBET01T
dHJpbmcoIjwiKSArIHRhZ05hbWUoKTsKKyAgICBET01TdHJpbmcgcmVzdWx0ID0gRE9NU3RyaW5n
KCI8IikgKyBub2RlTmFtZSgpOwogCiAgICAgTmFtZWRBdHRyTWFwSW1wbCAqYXR0ck1hcCA9IGF0
dHJpYnV0ZXModHJ1ZSk7CiAKQEAgLTYxMCw3ICs1OTgsNyBAQCBET01TdHJpbmcgRWxlbWVudElt
cGw6OnRvU3RyaW5nKCkgY29uc3QKIAl9CiAKIAlyZXN1bHQgKz0gIjwvIjsKLQlyZXN1bHQgKz0g
dGFnTmFtZSgpOworCXJlc3VsdCArPSBub2RlTmFtZSgpOwogCXJlc3VsdCArPSAiPiI7CiAgICAg
fSBlbHNlIHsKIAlyZXN1bHQgKz0gIiAvPiI7CkBAIC03NTksMTIgKzc0Nyw3IEBAIENTU1N0eWxl
RGVjbGFyYXRpb25JbXBsICpFbGVtZW50SW1wbDo6c3QKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQog
Ci1YTUxFbGVtZW50SW1wbDo6WE1MRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgRE9NU3Ry
aW5nSW1wbCAqX3RhZ05hbWUpCi0gICAgOiBFbGVtZW50SW1wbChkb2MpCi17Ci0gICAgbV9pZCA9
IGRvYy0+ZG9jdW1lbnQoKS0+dGFnSWQoMCAvKiBubyBuYW1lc3BhY2UgKi8sIF90YWdOYW1lLCAg
ZmFsc2UgLyogYWxsb2NhdGUgKi8pOwotfQotCisvKgogWE1MRWxlbWVudEltcGw6OlhNTEVsZW1l
bnRJbXBsKERvY3VtZW50UHRyICpkb2MsIERPTVN0cmluZ0ltcGwgKl9xdWFsaWZpZWROYW1lLCBE
T01TdHJpbmdJbXBsICpfbmFtZXNwYWNlVVJJKQogICAgIDogRWxlbWVudEltcGwoZG9jKQogewpA
QCAtNzgwLDQ5ICs3NjMsMjQgQEAgWE1MRWxlbWVudEltcGw6OlhNTEVsZW1lbnRJbXBsKERvY3Vt
ZW50UAogICAgICAgICBET01TdHJpbmdJbXBsKiBsb2NhbE5hbWUgPSBfcXVhbGlmaWVkTmFtZS0+
Y29weSgpOwogICAgICAgICBsb2NhbE5hbWUtPnJlZigpOwogICAgICAgICBsb2NhbE5hbWUtPnJl
bW92ZSgwLGNvbG9ucG9zKzEpOwotICAgICAgICBtX2lkID0gZG9jLT5kb2N1bWVudCgpLT50YWdJ
ZChfbmFtZXNwYWNlVVJJLCBsb2NhbE5hbWUsIGZhbHNlIC8qIGFsbG9jYXRlICovKTsKKyAgICAg
ICAgbV9pZCA9IGRvYy0+ZG9jdW1lbnQoKS0+dGFnSWQoX25hbWVzcGFjZVVSSSwgbG9jYWxOYW1l
LCBmYWxzZSk7CiAgICAgICAgIGxvY2FsTmFtZS0+ZGVyZWYoKTsKLSAgICAgICAgbV9wcmVmaXgg
PSBfcXVhbGlmaWVkTmFtZS0+Y29weSgpOwotICAgICAgICBtX3ByZWZpeC0+cmVmKCk7Ci0gICAg
ICAgIG1fcHJlZml4LT50cnVuY2F0ZShjb2xvbnBvcyk7CisgICAgICAgIAorICAgICAgICAvLyBG
SVhNRTogVGhpcyBpcyBhIHRlbXBvcmFyeSBzaXR1YXRpb24gZm9yIHN0YWdlIG9uZSBvZiB0aGUg
UXVhbGlmaWVkTmFtZSBwYXRjaC4gIFRoaXMgaXMgYWxzbyBhIHJlYWxseSBzdHVwaWQgd2F5IHRv
CisgICAgICAgIC8vIGhhdmUgdG8gaGFuZGxlIHRoZSBwcmVmaXguICBXYXkgdG9vIG11Y2ggY29w
eWluZy4gIFdlIHNob3VsZCBtYWtlIHN1cmUgdGhlIFhNTCB0b2tlbml6ZXIgaGFzIGRvbmUgdGhl
IHNwbGl0CisgICAgICAgIC8vIGFscmVhZHkgaW50byBwcmVmaXggYW5kIGxvY2FsTmFtZS4KKyAg
ICAgICAgRE9NU3RyaW5nSW1wbCogcHJlZml4ID0gX3F1YWxpZmllZE5hbWUtPmNvcHkoKTsKKyAg
ICAgICAgcHJlZml4LT5yZWYoKTsKKyAgICAgICAgcHJlZml4LT50cnVuY2F0ZShjb2xvbnBvcyk7
CisgICAgICAgIG1fdGFnTmFtZSA9IFF1YWxpZmllZE5hbWUocHJlZml4LCBudWxsQXRvbSwgbnVs
bEF0b20pOworICAgICAgICBwcmVmaXgtPmRlcmVmKCk7CiAgICAgfQotICAgIGVsc2UgeworICAg
IGVsc2UKICAgICAgICAgLy8gbm8gcHJlZml4Ci0gICAgICAgIG1faWQgPSBkb2MtPmRvY3VtZW50
KCktPnRhZ0lkKF9uYW1lc3BhY2VVUkksIF9xdWFsaWZpZWROYW1lLCBmYWxzZSAvKiBhbGxvY2F0
ZSAqLyk7Ci0gICAgICAgIG1fcHJlZml4ID0gMDsKLSAgICB9CisgICAgICAgIG1faWQgPSBkb2Mt
PmRvY3VtZW50KCktPnRhZ0lkKF9uYW1lc3BhY2VVUkksIF9xdWFsaWZpZWROYW1lLCBmYWxzZSk7
CiB9CiAKLVhNTEVsZW1lbnRJbXBsOjp+WE1MRWxlbWVudEltcGwoKQotewotfQotCi1ET01TdHJp
bmcgWE1MRWxlbWVudEltcGw6OmxvY2FsTmFtZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldERv
Y3VtZW50KCktPnRhZ05hbWUobV9pZCk7Ci19Ci0KLURPTVN0cmluZyBYTUxFbGVtZW50SW1wbDo6
bmFtZXNwYWNlVVJJKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0RG9jdW1lbnQoKS0+bmFtZXNw
YWNlVVJJKG1faWQpOwotfQotCi1Ob2RlSW1wbCAqWE1MRWxlbWVudEltcGw6OmNsb25lTm9kZSAo
IGJvb2wgZGVlcCApCi17Ci0gICAgLy8gIyMjIHdlIGxvc2UgbmFtZXNwYWNlIGhlcmUgRklYTUUK
LSAgICAvLyBzaG91bGQgcGFzcyBpZCBhcm91bmQKLSAgICBYTUxFbGVtZW50SW1wbCAqY2xvbmUg
PSBuZXcgWE1MRWxlbWVudEltcGwoZG9jUHRyKCksIGdldERvY3VtZW50KCktPnRhZ05hbWUobV9p
ZCkuaW1wbGVtZW50YXRpb24oKSk7Ci0gICAgY2xvbmUtPm1faWQgPSBtX2lkOwotCi0gICAgLy8g
Y2xvbmUgYXR0cmlidXRlcwotICAgIGlmIChuYW1lZEF0dHJNYXApCi0gICAgICAgICpjbG9uZS0+
YXR0cmlidXRlcyhmYWxzZSkgPSAqbmFtZWRBdHRyTWFwOwotCi0gICAgaWYgKGRlZXApCi0gICAg
ICAgIGNsb25lQ2hpbGROb2RlcyhjbG9uZSk7Ci0KLSAgICByZXR1cm4gY2xvbmU7Ci19CisqLwog
CiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTEyNzAsOCArMTIyOCw4IEBAIHZvaWQgTmFtZWRN
YXBwZWRBdHRyTWFwSW1wbDo6cGFyc2VDbGFzc0EKICAgICB9CiB9CiAKLVN0eWxlZEVsZW1lbnRJ
bXBsOjpTdHlsZWRFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAgIDogRWxlbWVudElt
cGwoZG9jKQorU3R5bGVkRWxlbWVudEltcGw6OlN0eWxlZEVsZW1lbnRJbXBsKGNvbnN0IFF1YWxp
ZmllZE5hbWUmIG5hbWUsIERvY3VtZW50UHRyICpkb2MpCisgICAgOiBFbGVtZW50SW1wbChuYW1l
LCBkb2MpCiB7CiAgICAgbV9pbmxpbmVTdHlsZURlY2wgPSAwOwogICAgIG1faXNTdHlsZUF0dHJp
YnV0ZVZhbGlkID0gdHJ1ZTsKSW5kZXg6IGtodG1sL3htbC9kb21fZWxlbWVudGltcGwuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC94bWwvZG9tX2VsZW1lbnRp
bXBsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNDEKZGlmZiAtdSAtcCAtcjEuNDEga2h0bWwv
eG1sL2RvbV9lbGVtZW50aW1wbC5oCi0tLSBraHRtbC94bWwvZG9tX2VsZW1lbnRpbXBsLmgJMTIg
TWF5IDIwMDUgMTc6MTE6MjIgLTAwMDAJMS40MQorKysga2h0bWwveG1sL2RvbV9lbGVtZW50aW1w
bC5oCTUgSnVsIDIwMDUgMjM6MjE6MDYgLTAwMDAKQEAgLTIzLDEzICsyMywxNCBAQAogICogQm9z
dG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCiAgKgogICovCi0jaWZuZGVmIF9ET01fRUxFTUVOVElt
cGxfaF8KLSNkZWZpbmUgX0RPTV9FTEVNRU5USW1wbF9oXworI2lmbmRlZiBfRE9NX0VMRU1FTlRJ
TVBMX2hfCisjZGVmaW5lIF9ET01fRUxFTUVOVElNUExfaF8KIAogI2luY2x1ZGUgImRvbV9ub2Rl
aW1wbC5oIgogI2luY2x1ZGUgInhtbC9kb21fc3RyaW5naW1wbC5oIgogI2luY2x1ZGUgIm1pc2Mv
c2hhcmVkLmgiCiAjaW5jbHVkZSAiY3NzL2Nzc192YWx1ZWltcGwuaCIKKyNpbmNsdWRlICJkb21f
cW5hbWUuaCIKIAogI2lmIEFQUExFX0NIQU5HRVMKICNpZmRlZiBfX09CSkNfXwpAQCAtMTI4LDgg
KzEyOSw4IEBAIHB1YmxpYzoKICAgICAvLyBET00gbWV0aG9kcyBvdmVycmlkZGVuIGZyb20gIHBh
cmVudCBjbGFzc2VzCiAgICAgdmlydHVhbCBET01TdHJpbmcgbm9kZU5hbWUoKSBjb25zdDsKICAg
ICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0IG5vZGVUeXBlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBE
T01TdHJpbmcgcHJlZml4KCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHNldFByZWZpeChjb25z
dCBET01TdHJpbmcgJl9wcmVmaXgsIGludCAmZXhjZXB0aW9uY29kZSApOworICAgIHZpcnR1YWwg
Y29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
UHJlZml4KGNvbnN0IEF0b21pY1N0cmluZyAmX3ByZWZpeCwgaW50ICZleGNlcHRpb25jb2RlICk7
CiAKICAgICB2aXJ0dWFsIERPTVN0cmluZyBub2RlVmFsdWUoKSBjb25zdDsKICAgICB2aXJ0dWFs
IHZvaWQgc2V0Tm9kZVZhbHVlKCBjb25zdCBET01TdHJpbmcgJiwgaW50ICZleGNlcHRpb25jb2Rl
ICk7CkBAIC0xNTYsNyArMTU3LDcgQEAgY2xhc3MgRWxlbWVudEltcGwgOiBwdWJsaWMgQ29udGFp
bmVyTm9kZQogICAgIGZyaWVuZCBjbGFzcyBOb2RlSW1wbDsKICAgICBmcmllbmQgY2xhc3Mga2h0
bWw6OkNTU1N0eWxlU2VsZWN0b3I7CiBwdWJsaWM6Ci0gICAgRWxlbWVudEltcGwoRG9jdW1lbnRQ
dHIgKmRvYyk7CisgICAgRWxlbWVudEltcGwoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwg
RG9jdW1lbnRQdHIgKmRvYyk7CiAgICAgfkVsZW1lbnRJbXBsKCk7CiAKICAgICAvLyBVc2VkIHRv
IHF1aWNrbHkgZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IGFuIGVsZW1lbnQgaGFzIGEgZ2l2ZW4g
Q1NTIGNsYXNzLgpAQCAtMTg2LDE1ICsxODcsMjQgQEAgcHVibGljOgogICAgIFNoYXJlZFB0cjxB
dHRySW1wbD4gc2V0QXR0cmlidXRlTm9kZU5TKEF0dHJJbXBsICpuZXdBdHRyLCBpbnQgJmV4Y2Vw
dGlvbikgeyByZXR1cm4gc2V0QXR0cmlidXRlTm9kZShuZXdBdHRyLCBleGNlcHRpb24pOyB9CiAg
ICAgU2hhcmVkUHRyPEF0dHJJbXBsPiByZW1vdmVBdHRyaWJ1dGVOb2RlKEF0dHJJbXBsICpvbGRB
dHRyLCBpbnQgJmV4Y2VwdGlvbik7CiAgICAgCi0gICAgRE9NU3RyaW5nIHByZWZpeCgpIGNvbnN0
IHsgcmV0dXJuIG1fcHJlZml4OyB9Ci0gICAgdm9pZCBzZXRQcmVmaXgoY29uc3QgRE9NU3RyaW5n
ICZfcHJlZml4LCBpbnQgJmV4Y2VwdGlvbmNvZGUgKTsKLQogICAgIHZpcnR1YWwgQ1NTU3R5bGVE
ZWNsYXJhdGlvbkltcGwgKnN0eWxlKCk7CiAKKyAgICB2aXJ0dWFsIGNvbnN0IFF1YWxpZmllZE5h
bWUmIHRhZ05hbWUoKSBjb25zdCB7IHJldHVybiBtX3RhZ05hbWU7IH0KKyAgICB2aXJ0dWFsIGJv
b2wgaGFzVGFnTmFtZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lKSBjb25zdCB7IHJldHVy
biBtX3RhZ05hbWUubWF0Y2hlcyh0YWdOYW1lKTsgfQorICAgIAorICAgIC8vIEEgbW9yZSBsaWdo
dHdlaWdodCBjaGVjayB0aGFuIGhhc1RhZ05hbWUuICBVc2UgdGhpcyBjaGVjayB3aGVuIHlvdSBr
bm93IHRoZSBuYW1lc3BhY2VzIG9mIHRoZSB0d28gUXVhbGlmaWVkTmFtZXMgbWF0Y2gsIGUuZy4s
IHRoYXQgdGhleSdyZQorICAgIC8vIGJvdGggSFRNTCBuYW1lcy4KKyAgICBib29sIGhhc0xvY2Fs
TmFtZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lKSBjb25zdCB7IHJldHVybiBtX3RhZ05h
bWUubG9jYWxOYW1lKCkgPT0gdGFnTmFtZS5sb2NhbE5hbWUoKTsgfQorICAgIGJvb2wgaGFzTG9j
YWxOYW1lKGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lKSBjb25zdCB7IHJldHVybiBtX3Rh
Z05hbWUubG9jYWxOYW1lKCkgPT0gbG9jYWxOYW1lOyB9CisKKyAgICB2aXJ0dWFsIGNvbnN0IEF0
b21pY1N0cmluZyYgbG9jYWxOYW1lKCkgY29uc3QgeyByZXR1cm4gbV90YWdOYW1lLmxvY2FsTmFt
ZSgpOyB9CisgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCgpIGNvbnN0IHsg
cmV0dXJuIG1fdGFnTmFtZS5wcmVmaXgoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRQcmVmaXgo
Y29uc3QgQXRvbWljU3RyaW5nICZfcHJlZml4LCBpbnQgJmV4Y2VwdGlvbmNvZGUpOworICAgIHZp
cnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkkoKSBjb25zdCB7IHJldHVybiBt
X3RhZ05hbWUubmFtZXNwYWNlVVJJKCk7IH0KKyAgICAKICAgICAvLyBET00gbWV0aG9kcyBvdmVy
cmlkZGVuIGZyb20gIHBhcmVudCBjbGFzc2VzCi0gICAgdmlydHVhbCBET01TdHJpbmcgdGFnTmFt
ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgdW5zaWduZWQgc2hvcnQgbm9kZVR5cGUoKSBjb25zdDsK
LSAgICB2aXJ0dWFsIE5vZGVJbXBsICpjbG9uZU5vZGUgKCBib29sIGRlZXAgKSA9IDA7CisgICAg
dmlydHVhbCBOb2RlSW1wbCAqY2xvbmVOb2RlKGJvb2wgZGVlcCk7CiAgICAgdmlydHVhbCBET01T
dHJpbmcgbm9kZU5hbWUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNFbGVtZW50Tm9kZSgp
IGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJbnRvRG9j
dW1lbnQoKTsKQEAgLTIyMSw3ICsyMzEsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHJl
Y2FsY1N0eWxlKCBTdHlsZUNoYW5nZSA9IE5vQ2hhbmdlICk7CiAKICAgICB2aXJ0dWFsIHZvaWQg
bW91c2VFdmVudEhhbmRsZXIoIE1vdXNlRXZlbnQgKi8qZXYqLywgYm9vbCAvKmluc2lkZSovICkg
e307Ci0gICAgdmlydHVhbCBib29sIGNoaWxkQWxsb3dlZCggTm9kZUltcGwgKm5ld0NoaWxkICk7
CiAgICAgdmlydHVhbCBib29sIGNoaWxkVHlwZUFsbG93ZWQoIHVuc2lnbmVkIHNob3J0IHR5cGUg
KTsKICAKICAgICB2aXJ0dWFsIEF0dHJpYnV0ZUltcGwqIGNyZWF0ZUF0dHJpYnV0ZShJZCBpZCwg
RE9NU3RyaW5nSW1wbCogdmFsdWUpOwpAQCAtMjU0LDI5ICsyNjMsNyBAQCBwcml2YXRlOgogCiBw
cm90ZWN0ZWQ6IC8vIG1lbWJlciB2YXJpYWJsZXMKICAgICBtdXRhYmxlIE5hbWVkQXR0ck1hcElt
cGwgKm5hbWVkQXR0ck1hcDsKLSAgICBET01TdHJpbmdJbXBsICptX3ByZWZpeDsKLX07Ci0KLQot
Y2xhc3MgWE1MRWxlbWVudEltcGwgOiBwdWJsaWMgRWxlbWVudEltcGwKLXsKLQotcHVibGljOgot
ICAgIFhNTEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIERPTVN0cmluZ0ltcGwgKl90YWdO
YW1lKTsKLSAgICBYTUxFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCBET01TdHJpbmdJbXBs
ICpfcXVhbGlmaWVkTmFtZSwgRE9NU3RyaW5nSW1wbCAqX25hbWVzcGFjZVVSSSk7Ci0gICAgflhN
TEVsZW1lbnRJbXBsKCk7Ci0KLSAgICAvLyBET00gbWV0aG9kcyBvdmVycmlkZGVuIGZyb20gIHBh
cmVudCBjbGFzc2VzCi0gICAgdmlydHVhbCBET01TdHJpbmcgbmFtZXNwYWNlVVJJKCkgY29uc3Q7
Ci0gICAgdmlydHVhbCBET01TdHJpbmcgbG9jYWxOYW1lKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBO
b2RlSW1wbCAqY2xvbmVOb2RlICggYm9vbCBkZWVwICk7Ci0KLSAgICAvLyBPdGhlciBtZXRob2Rz
IChub3QgcGFydCBvZiBET00pCi0gICAgdmlydHVhbCBib29sIGlzWE1MRWxlbWVudE5vZGUoKSBj
b25zdCB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0IHsgcmV0dXJu
IG1faWQ7IH0KLQotcHJvdGVjdGVkOgotICAgIElkIG1faWQ7CisgICAgUXVhbGlmaWVkTmFtZSBt
X3RhZ05hbWU7CiB9OwogCiAvLyB0aGUgbWFwIG9mIGF0dHJpYnV0ZXMgb2YgYW4gZWxlbWVudApA
QCAtNDE0LDcgKzQwMSw3IEBAIHByaXZhdGU6CiBjbGFzcyBTdHlsZWRFbGVtZW50SW1wbCA6IHB1
YmxpYyBFbGVtZW50SW1wbAogewogcHVibGljOgotICAgIFN0eWxlZEVsZW1lbnRJbXBsKERvY3Vt
ZW50UHRyICpkb2MpOworICAgIFN0eWxlZEVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUm
IHRhZ05hbWUsIERvY3VtZW50UHRyICpkb2MpOwogICAgIHZpcnR1YWwgflN0eWxlZEVsZW1lbnRJ
bXBsKCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNTdHlsZWRFbGVtZW50KCkgY29uc3QgeyByZXR1
cm4gdHJ1ZTsgfQpJbmRleDoga2h0bWwveG1sL2RvbV9ub2RlaW1wbC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwveG1sL2RvbV9ub2RlaW1wbC5jcHAsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuMTU2CmRpZmYgLXUgLXAgLXIxLjE1NiBraHRtbC94bWwvZG9t
X25vZGVpbXBsLmNwcAotLS0ga2h0bWwveG1sL2RvbV9ub2RlaW1wbC5jcHAJMjMgSnVuIDIwMDUg
MTk6NDc6NTAgLTAwMDAJMS4xNTYKKysrIGtodG1sL3htbC9kb21fbm9kZWltcGwuY3BwCTUgSnVs
IDIwMDUgMjM6MjE6MDggLTAwMDAKQEAgLTI3LDcgKzI3LDYgQEAKICNpbmNsdWRlICJkb20vZG9t
X2V4Y2VwdGlvbi5oIgogI2luY2x1ZGUgImRvbS9kb20yX2V2ZW50cy5oIgogI2luY2x1ZGUgIm1p
c2MvaHRtbGF0dHJzLmgiCi0jaW5jbHVkZSAibWlzYy9odG1sdGFncy5oIgogI2luY2x1ZGUgInht
bC9kb21fZWxlbWVudGltcGwuaCIKICNpbmNsdWRlICJ4bWwvZG9tX3RleHRpbXBsLmgiCiAjaW5j
bHVkZSAieG1sL2RvbTJfZXZlbnRzaW1wbC5oIgpAQCAtNTAsNyArNDksOCBAQAogI2luY2x1ZGUg
ImtodG1sdmlldy5oIgogI2luY2x1ZGUgImtodG1sX3BhcnQuaCIKIAotI2luY2x1ZGUgImh0bWwv
ZHRkLmgiCisvLyBGSVhNRTogU2hvdWxkIG5vdCBoYXZlIHRvIGluY2x1ZGUgdGhpcy4gIEN1dCB0
aGUgSFRNTCBkZXBlbmRlbmN5IQorI2luY2x1ZGUgImh0bWxuYW1lcy5oIgogCiAjaWZuZGVmIEtI
VE1MX05PX1hCTAogI2luY2x1ZGUgInhibC94YmxfYmluZGluZ19tYW5hZ2VyLmgiCkBAIC02NCw5
ICs2NCwzMCBAQAogI2RlZmluZSBMT0coY2hhbm5lbCwgZm9ybWF0QW5kQXJncy4uLikgKCh2b2lk
KTApCiAjZW5kaWYKIAotdXNpbmcgbmFtZXNwYWNlIERPTTsKIHVzaW5nIG5hbWVzcGFjZSBraHRt
bDsKIAorbmFtZXNwYWNlIERPTSB7CisvKioKKyAqIE5vZGVMaXN0IHdoaWNoIGxpc3RzIGFsbCBO
b2RlcyBpbiBhIGRvY3VtZW50IHdpdGggYSBnaXZlbiB0YWcgbmFtZQorICovCitjbGFzcyBUYWdO
b2RlTGlzdEltcGwgOiBwdWJsaWMgTm9kZUxpc3RJbXBsCit7CitwdWJsaWM6CisgICAgVGFnTm9k
ZUxpc3RJbXBsKE5vZGVJbXBsICpuLCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSwg
Y29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUpOworCisgICAgLy8gRE9NIG1ldGhvZHMgb3Zl
cnJpZGRlbiBmcm9tICBwYXJlbnQgY2xhc3NlcworICAgIHZpcnR1YWwgdW5zaWduZWQgbG9uZyBs
ZW5ndGgoKSBjb25zdDsKKyAgICB2aXJ0dWFsIE5vZGVJbXBsICppdGVtICh1bnNpZ25lZCBsb25n
IGluZGV4KSBjb25zdDsKKworICAgIC8vIE90aGVyIG1ldGhvZHMgKG5vdCBwYXJ0IG9mIERPTSkK
KworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgYm9vbCBub2RlTWF0Y2hlcyhOb2RlSW1wbCAqdGVz
dE5vZGUpIGNvbnN0OworCisgICAgQXRvbWljU3RyaW5nIG1fbmFtZXNwYWNlVVJJOworICAgIEF0
b21pY1N0cmluZyBtX2xvY2FsTmFtZTsKK307CisKIE5vZGVJbXBsOjpOb2RlSW1wbChEb2N1bWVu
dFB0ciAqZG9jKQogICAgIDogZG9jdW1lbnQoZG9jKSwKICAgICAgIG1fcHJldmlvdXMoMCksCkBA
IC0xNTQsNyArMTc1LDcgQEAgTm9kZUltcGwgKk5vZGVJbXBsOjpsYXN0Q2hpbGQoKSBjb25zdAog
ICByZXR1cm4gMDsKIH0KIAotTm9kZUltcGwgKk5vZGVJbXBsOjpsYXN0RGVzY2VuZGVudCgpIGNv
bnN0CitOb2RlSW1wbCAqTm9kZUltcGw6Omxhc3REZXNjZW5kYW50KCkgY29uc3QKIHsKICAgICBO
b2RlSW1wbCAqbiA9IGNvbnN0X2Nhc3Q8Tm9kZUltcGwgKj4odGhpcyk7CiAgICAgd2hpbGUgKG4g
JiYgbi0+bGFzdENoaWxkKCkpCkBAIC0yMzksMTMgKzI2MCwxMyBAQCB2b2lkIE5vZGVJbXBsOjpu
b3JtYWxpemUgKCkKICAgICB9CiB9CiAKLURPTVN0cmluZyBOb2RlSW1wbDo6cHJlZml4KCkgY29u
c3QKK2NvbnN0IEF0b21pY1N0cmluZyYgTm9kZUltcGw6OnByZWZpeCgpIGNvbnN0CiB7CiAgICAg
Ly8gRm9yIG5vZGVzIG90aGVyIHRoYW4gZWxlbWVudHMgYW5kIGF0dHJpYnV0ZXMsIHRoZSBwcmVm
aXggaXMgYWx3YXlzIG51bGwKLSAgICByZXR1cm4gRE9NU3RyaW5nKCk7CisgICAgcmV0dXJuIG51
bGxBdG9tOwogfQogCi12b2lkIE5vZGVJbXBsOjpzZXRQcmVmaXgoY29uc3QgRE9NU3RyaW5nICYv
Kl9wcmVmaXgqLywgaW50ICZleGNlcHRpb25jb2RlICkKK3ZvaWQgTm9kZUltcGw6OnNldFByZWZp
eChjb25zdCBBdG9taWNTdHJpbmcgJi8qX3ByZWZpeCovLCBpbnQgJmV4Y2VwdGlvbmNvZGUgKQog
ewogICAgIC8vIFRoZSBzcGVjIHNheXMgdGhhdCBmb3Igbm9kZXMgb3RoZXIgdGhhbiBlbGVtZW50
cyBhbmQgYXR0cmlidXRlcywgcHJlZml4IGlzIGFsd2F5cyBudWxsLgogICAgIC8vIEl0IGRvZXMg
bm90IHNheSB3aGF0IHRvIGRvIHdoZW4gdGhlIHVzZXIgdHJpZXMgdG8gc2V0IHRoZSBwcmVmaXgg
b24gYW5vdGhlciB0eXBlIG9mCkBAIC0yNTMsMTQgKzI3NCwxNCBAQCB2b2lkIE5vZGVJbXBsOjpz
ZXRQcmVmaXgoY29uc3QgRE9NU3RyaW5nCiAgICAgZXhjZXB0aW9uY29kZSA9IERPTUV4Y2VwdGlv
bjo6TkFNRVNQQUNFX0VSUjsKIH0KIAotRE9NU3RyaW5nIE5vZGVJbXBsOjpsb2NhbE5hbWUoKSBj
b25zdAorY29uc3QgQXRvbWljU3RyaW5nJiBOb2RlSW1wbDo6bG9jYWxOYW1lKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gRE9NU3RyaW5nKCk7CisgICAgcmV0dXJuIGVtcHR5QXRvbTsKIH0KIAotRE9N
U3RyaW5nIE5vZGVJbXBsOjpuYW1lc3BhY2VVUkkoKSBjb25zdAorY29uc3QgQXRvbWljU3RyaW5n
JiBOb2RlSW1wbDo6bmFtZXNwYWNlVVJJKCkgY29uc3QKIHsKLSAgICByZXR1cm4gRE9NU3RyaW5n
KCk7CisgICAgcmV0dXJuIGVtcHR5QXRvbTsKIH0KIAogdm9pZCBOb2RlSW1wbDo6c2V0Rmlyc3RD
aGlsZChOb2RlSW1wbCAqKQpAQCAtMzA2LDEyICszMjcsNiBAQCB2b2lkIE5vZGVJbXBsOjpzZXRD
aGFuZ2VkKGJvb2wgYikKICAgICB9CiB9CiAKLWJvb2wgTm9kZUltcGw6OmlzSW5saW5lKCkgY29u
c3QKLXsKLSAgICBpZiAobV9yZW5kZXIpIHJldHVybiBtX3JlbmRlci0+c3R5bGUoKS0+ZGlzcGxh
eSgpID09IGtodG1sOjpJTkxJTkU7Ci0gICAgcmV0dXJuICFpc0VsZW1lbnROb2RlKCk7Ci19Ci0K
IGJvb2wgTm9kZUltcGw6OmlzRm9jdXNhYmxlKCkgY29uc3QKIHsKICAgICByZXR1cm4gZmFsc2U7
CkBAIC0xMDA2LDQzICsxMDIxLDM0IEBAIE5vZGVJbXBsICpOb2RlSW1wbDo6dHJhdmVyc2VQcmV2
aW91c05vZGUKICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBOb2RlSW1wbDo6Y2hlY2tTZXRQcmVm
aXgoY29uc3QgRE9NU3RyaW5nICZfcHJlZml4LCBpbnQgJmV4Y2VwdGlvbmNvZGUpCit2b2lkIE5v
ZGVJbXBsOjpjaGVja1NldFByZWZpeChjb25zdCBBdG9taWNTdHJpbmcgJl9wcmVmaXgsIGludCAm
ZXhjZXB0aW9uY29kZSkKIHsKICAgICAvLyBQZXJmb3JtIGVycm9yIGNoZWNraW5nIGFzIHJlcXVp
cmVkIGJ5IHNwZWMgZm9yIHNldHRpbmcgTm9kZS5wcmVmaXguIFVzZWQgYnkKICAgICAvLyBFbGVt
ZW50SW1wbDo6c2V0UHJlZml4KCkgYW5kIEF0dHJJbXBsOjpzZXRQcmVmaXgoKQogCi0jaWYgMAot
ICAgIC8vIEZJWE1FOiBBZGQgdGhpcyBjaGVjayAoYnV0IG5vdCBpbiBhIHdheSB0aGF0IGRlcGVu
ZHMgb24gdGhlIEMrKyBET00hKQotICAgIC8vIElOVkFMSURfQ0hBUkFDVEVSX0VSUjogUmFpc2Vk
IGlmIHRoZSBzcGVjaWZpZWQgcHJlZml4IGNvbnRhaW5zIGFuIGlsbGVnYWwgY2hhcmFjdGVyLgot
ICAgIGlmICghRWxlbWVudDo6a2h0bWxWYWxpZFByZWZpeChfcHJlZml4KSkgewotICAgICAgICBl
eGNlcHRpb25jb2RlID0gRE9NRXhjZXB0aW9uOjpJTlZBTElEX0NIQVJBQ1RFUl9FUlI7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQorICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgc3Vw
cG9ydCBmb3IgSU5WQUxJRF9DSEFSQUNURVJfRVJSOiBSYWlzZWQgaWYgdGhlIHNwZWNpZmllZCBw
cmVmaXggY29udGFpbnMgYW4gaWxsZWdhbCBjaGFyYWN0ZXIuCisgICAgCiAgICAgLy8gTk9fTU9E
SUZJQ0FUSU9OX0FMTE9XRURfRVJSOiBSYWlzZWQgaWYgdGhpcyBub2RlIGlzIHJlYWRvbmx5Lgog
ICAgIGlmIChpc1JlYWRPbmx5KCkpIHsKICAgICAgICAgZXhjZXB0aW9uY29kZSA9IERPTUV4Y2Vw
dGlvbjo6Tk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgLy8gTkFNRVNQQUNFX0VSUjogLSBSYWlzZWQgaWYgdGhlIHNwZWNpZmllZCBwcmVm
aXggaXMgbWFsZm9ybWVkCisgICAgLy8gRklYTUU6IEltcGxlbWVudCBOQU1FU1BBQ0VfRVJSOiAt
IFJhaXNlZCBpZiB0aGUgc3BlY2lmaWVkIHByZWZpeCBpcyBtYWxmb3JtZWQKKyAgICAvLyBXZSBo
YXZlIHRvIGNvbW1lbnQgdGhpcyBvdXQsIHNpbmNlIGl0J3MgdXNlZCBmb3IgYXR0cmlidXRlcyBh
bmQgdGFnIG5hbWVzLCBhbmQgd2UndmUgb25seQorICAgIC8vIHN3aXRjaGVkIG9uZSBvdmVyLgor
ICAgIC8qCiAgICAgLy8gLSBpZiB0aGUgbmFtZXNwYWNlVVJJIG9mIHRoaXMgbm9kZSBpcyBudWxs
LAogICAgIC8vIC0gaWYgdGhlIHNwZWNpZmllZCBwcmVmaXggaXMgInhtbCIgYW5kIHRoZSBuYW1l
c3BhY2VVUkkgb2YgdGhpcyBub2RlIGlzIGRpZmZlcmVudCBmcm9tCiAgICAgLy8gICAiaHR0cDov
L3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIiwKICAgICAvLyAtIGlmIHRoaXMgbm9kZSBp
cyBhbiBhdHRyaWJ1dGUgYW5kIHRoZSBzcGVjaWZpZWQgcHJlZml4IGlzICJ4bWxucyIgYW5kCiAg
ICAgLy8gICB0aGUgbmFtZXNwYWNlVVJJIG9mIHRoaXMgbm9kZSBpcyBkaWZmZXJlbnQgZnJvbSAi
aHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8iLAogICAgIC8vIC0gb3IgaWYgdGhpcyBub2Rl
IGlzIGFuIGF0dHJpYnV0ZSBhbmQgdGhlIHF1YWxpZmllZE5hbWUgb2YgdGhpcyBub2RlIGlzICJ4
bWxucyIgW05hbWVzcGFjZXNdLgotICAgIGlmICgKLSNpZiAwCi0gICAgICAgIC8vIEZJWE1FOiBB
ZGQgdGhpcyBjaGVjayAoYnV0IG5vdCBpbiBhIHdheSB0aGF0IGRlcGVuZHMgb24gdGhlIEMrKyBE
T00hKQotICAgICAgICBFbGVtZW50OjpraHRtbE1hbGZvcm1lZFByZWZpeChfcHJlZml4KSB8fAot
I2VuZGlmCi0gICAgICAgIChuYW1lc3BhY2VQYXJ0KGlkKCkpID09IG5vTmFtZXNwYWNlICYmIGlk
KCkgPiBJRF9MQVNUX1RBRykgfHwKKyAgICBpZiAoKG5hbWVzcGFjZVBhcnQoaWQoKSkgPT0gbm9O
YW1lc3BhY2UgJiYgaWQoKSA+IElEX0xBU1RfVEFHKSB8fAogICAgICAgICAoX3ByZWZpeCA9PSAi
eG1sIiAmJiBET01TdHJpbmcoZ2V0RG9jdW1lbnQoKS0+bmFtZXNwYWNlVVJJKGlkKCkpKSAhPSAi
aHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIikpIHsKICAgICAgICAgZXhjZXB0
aW9uY29kZSA9IERPTUV4Y2VwdGlvbjo6TkFNRVNQQUNFX0VSUjsKICAgICAgICAgcmV0dXJuOwot
ICAgIH0KKyAgICB9Ki8KIH0KIAogdm9pZCBOb2RlSW1wbDo6Y2hlY2tBZGRDaGlsZChOb2RlSW1w
bCAqbmV3Q2hpbGQsIGludCAmZXhjZXB0aW9uY29kZSkKQEAgLTEyODMsOSArMTI4OSwxMCBAQCBS
ZW5kZXJPYmplY3QgKiBOb2RlSW1wbDo6bmV4dFJlbmRlcmVyKCkKICAgICByZXR1cm4gMDsKIH0K
IAorLy8gRklYTUU6IFRoaXMgY29kZSBpcyB1c2VkIGJ5IGVkaXRpbmcuICBTZWVtcyBsaWtlIGl0
IGNvdWxkIG1vdmUgb3ZlciB0aGVyZSBhbmQgbm90IHBvbGx1dGUgTm9kZUltcGwuCiBib29sIE5v
ZGVJbXBsOjppc0F0b21pY05vZGUoKSBjb25zdAogewotICAgIHJldHVybiAhaGFzQ2hpbGROb2Rl
cygpIHx8IChpZCgpID09IElEX09CSkVDVCAmJiByZW5kZXJlcigpICYmIHJlbmRlcmVyKCktPmlz
UmVwbGFjZWQoKSk7CisgICAgcmV0dXJuICFoYXNDaGlsZE5vZGVzKCkgfHwgKHJlbmRlcmVyKCkg
JiYgcmVuZGVyZXIoKS0+aXNXaWRnZXQoKSk7CiB9CiAKIE5vZGVJbXBsICpOb2RlSW1wbDo6cHJl
dmlvdXNOb2RlQ29uc2lkZXJpbmdBdG9taWNOb2RlcygpIGNvbnN0CkBAIC0xNDAyLDEzICsxNDA5
LDE1IEBAIGxvbmcgTm9kZUltcGw6Om1heE9mZnNldCgpIGNvbnN0CiAgICAgcmV0dXJuIDE7CiB9
CiAKKy8vIEZJWE1FOiBTaG91bGRuJ3QgdGhlc2UgZnVuY3Rpb25zIGJlIGluIHRoZSBlZGl0aW5n
IGNvZGU/ICBDb2RlIHRoYXQgYXNrcyBxdWVzdGlvbnMgYWJvdXQgSFRNTCBpbiB0aGUgY29yZSBE
T00gY2xhc3MKKy8vIGlzIG9idmlvdXNseSBtaXNwbGFjZWQuCiAvLyBtZXRob2QgZm9yIGVkaXRp
bmcgbWFkbmVzcywgd2hpY2ggYWxsb3dzIEJSLDEgYXMgYSBwb3NpdGlvbiwgdGhvdWdoIHRoYXQg
aXMgaW5jb3JyZWN0CiBsb25nIE5vZGVJbXBsOjptYXhEZWVwT2Zmc2V0KCkgY29uc3QKIHsKICAg
ICBpZiAob2Zmc2V0SW5DaGFyYWN0ZXJzKG5vZGVUeXBlKCkpKQogICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8Y29uc3QgVGV4dEltcGwqPih0aGlzKS0+bGVuZ3RoKCk7CiAgICAgICAgIAotICAg
IGlmIChpZCgpID09IElEX0JSIHx8IChyZW5kZXJlcigpICYmIHJlbmRlcmVyKCktPmlzUmVwbGFj
ZWQoKSkpCisgICAgaWYgKGhhc1RhZ05hbWUoSFRNTE5hbWVzOjpicigpKSB8fCAocmVuZGVyZXIo
KSAmJiByZW5kZXJlcigpLT5pc1JlcGxhY2VkKCkpKQogICAgICAgICByZXR1cm4gMTsKIAogICAg
IHJldHVybiBjaGlsZE5vZGVDb3VudCgpOwpAQCAtMTQ2NCw3ICsxNDczLDcgQEAgRWxlbWVudElt
cGwgKk5vZGVJbXBsOjplbmNsb3NpbmdCbG9ja0ZsbwogICAgICAgICBuID0gbi0+cGFyZW50Tm9k
ZSgpOwogICAgICAgICBpZiAoIW4pCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgaWYgKG4t
PmlzQmxvY2tGbG93T3JUYWJsZSgpIHx8IG4tPmlkKCkgPT0gSURfQk9EWSkKKyAgICAgICAgaWYg
KG4tPmlzQmxvY2tGbG93T3JUYWJsZSgpIHx8IG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpib2R5
KCkpKQogICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsICo+KG4pOwog
ICAgIH0KICAgICByZXR1cm4gMDsKQEAgLTE0ODAsNyArMTQ4OSw3IEBAIEVsZW1lbnRJbXBsICpO
b2RlSW1wbDo6ZW5jbG9zaW5nQmxvY2tGbG8KICAgICAgICAgbiA9IG4tPnBhcmVudE5vZGUoKTsK
ICAgICAgICAgaWYgKCFuKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGlmIChuLT5pc0Js
b2NrRmxvdygpIHx8IG4tPmlkKCkgPT0gSURfQk9EWSkKKyAgICAgICAgaWYgKG4tPmlzQmxvY2tG
bG93KCkgfHwgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJvZHkoKSkpCiAgICAgICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8RWxlbWVudEltcGwgKj4obik7CiAgICAgfQogICAgIHJldHVybiAw
OwpAQCAtMTQ5Myw3ICsxNTAyLDcgQEAgRWxlbWVudEltcGwgKk5vZGVJbXBsOjplbmNsb3NpbmdJ
bmxpbmVFbAogCiAgICAgd2hpbGUgKDEpIHsKICAgICAgICAgcCA9IG4tPnBhcmVudE5vZGUoKTsK
LSAgICAgICAgaWYgKCFwIHx8IHAtPmlzQmxvY2tGbG93KCkgfHwgcC0+aWQoKSA9PSBJRF9CT0RZ
KQorICAgICAgICBpZiAoIXAgfHwgcC0+aXNCbG9ja0Zsb3coKSB8fCBwLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6Ym9keSgpKSkKICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxFbGVtZW50
SW1wbCAqPihuKTsKICAgICAgICAgLy8gQWxzbyBzdG9wIGlmIGFueSBwcmV2aW91cyBzaWJsaW5n
IGlzIGEgYmxvY2sKICAgICAgICAgZm9yIChOb2RlSW1wbCAqc2libGluZyA9IG4tPnByZXZpb3Vz
U2libGluZygpOyBzaWJsaW5nOyBzaWJsaW5nID0gc2libGluZy0+cHJldmlvdXNTaWJsaW5nKCkp
IHsKQEAgLTE1MTIsNyArMTUyMSw3IEBAIEVsZW1lbnRJbXBsICpOb2RlSW1wbDo6cm9vdEVkaXRh
YmxlRWxlbWUKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBOb2RlSW1wbCAqbiA9IGNvbnN0X2Nh
c3Q8Tm9kZUltcGwgKj4odGhpcyk7Ci0gICAgaWYgKG4tPmlkKCkgPT0gSURfQk9EWSkKKyAgICBp
ZiAobi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJvZHkoKSkpCiAgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxFbGVtZW50SW1wbCAqPihuKTsKIAogICAgIE5vZGVJbXBsICpyZXN1bHQgPSBuLT5p
c0VkaXRhYmxlQmxvY2soKSA/IG4gOiAwOwpAQCAtMTUyMCw3ICsxNTI5LDcgQEAgRWxlbWVudElt
cGwgKk5vZGVJbXBsOjpyb290RWRpdGFibGVFbGVtZQogICAgICAgICBuID0gbi0+cGFyZW50Tm9k
ZSgpOwogICAgICAgICBpZiAoIW4gfHwgIW4tPmlzQ29udGVudEVkaXRhYmxlKCkpCiAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgaWYgKG4tPmlkKCkgPT0gSURfQk9EWSkgeworICAgICAgICBp
ZiAobi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJvZHkoKSkpIHsKICAgICAgICAgICAgIHJlc3Vs
dCA9IG47CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMTU0MCw2ICsxNTQ5LDgg
QEAgYm9vbCBOb2RlSW1wbDo6aW5TYW1lQ29udGFpbmluZ0Jsb2NrRmxvdwogICAgIHJldHVybiBu
ID8gZW5jbG9zaW5nQmxvY2tGbG93RWxlbWVudCgpID09IG4tPmVuY2xvc2luZ0Jsb2NrRmxvd0Vs
ZW1lbnQoKSA6IGZhbHNlOwogfQogCisvLyBGSVhNRTogRW5kIG9mIG9idmlvdXNseSBtaXNwbGFj
ZWQgSFRNTCBlZGl0aW5nIGZ1bmN0aW9ucy4gIFRyeSB0byBtb3ZlIHRoZXNlIG91dCBvZiBOb2Rl
SW1wbC4KKwogdm9pZCBOb2RlSW1wbDo6YWRkRXZlbnRMaXN0ZW5lcihjb25zdCBET01TdHJpbmcg
JnR5cGUsIEV2ZW50TGlzdGVuZXIgKmxpc3RlbmVyLCBib29sIHVzZUNhcHR1cmUpCiB7CiAgICAg
YWRkRXZlbnRMaXN0ZW5lcihFdmVudEltcGw6OnR5cGVUb0lkKHR5cGUpLCBsaXN0ZW5lciwgdXNl
Q2FwdHVyZSk7CkBAIC0xNTUwLDI1ICsxNTYxLDE1IEBAIHZvaWQgTm9kZUltcGw6OnJlbW92ZUV2
ZW50TGlzdGVuZXIoY29uc3QKICAgICByZW1vdmVFdmVudExpc3RlbmVyKEV2ZW50SW1wbDo6dHlw
ZVRvSWQodHlwZSksIGxpc3RlbmVyLCB1c2VDYXB0dXJlKTsKIH0KIAotU2hhcmVkUHRyPE5vZGVM
aXN0SW1wbD4gTm9kZUltcGw6OmdldEVsZW1lbnRzQnlUYWdOYW1lTlMgKCBjb25zdCBET01TdHJp
bmcgJm5hbWVzcGFjZVVSSSwgY29uc3QgRE9NU3RyaW5nICZsb2NhbE5hbWUgKQorU2hhcmVkUHRy
PE5vZGVMaXN0SW1wbD4gTm9kZUltcGw6OmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoY29uc3QgRE9N
U3RyaW5nICZuYW1lc3BhY2VVUkksIGNvbnN0IERPTVN0cmluZyAmbG9jYWxOYW1lKQogewotICAg
IGlmIChsb2NhbE5hbWUuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBTaGFyZWRQdHI8Tm9kZUxp
c3RJbXBsPigpOwotCi0gICAgSWQgaWRNYXNrID0gbmFtZXNwYWNlTWFzayB8IGxvY2FsTmFtZU1h
c2s7Ci0gICAgaWYgKGxvY2FsTmFtZVswXSA9PSAnKicpCi0gICAgICAgIGlkTWFzayAmPSB+bG9j
YWxOYW1lTWFzazsKLSAgICBpZiAobmFtZXNwYWNlVVJJLmlzTnVsbCgpIHx8IG5hbWVzcGFjZVVS
SVswXSA9PSAnKicpCi0gICAgICAgIGlkTWFzayAmPSB+bmFtZXNwYWNlTWFzazsKLQotICAgIElk
IGlkID0gMDsgLy8gMCBtZWFucyAiYWxsIGl0ZW1zIgotICAgIGlmICgoaWRNYXNrICYgbG9jYWxO
YW1lTWFzaykgfHwgIW5hbWVzcGFjZVVSSS5pc051bGwoKSkgeyAvLyBub3QgZ2V0RWxlbWVudHNC
eVRhZ05hbWUoIioiKQotICAgICAgICBpZCA9IGdldERvY3VtZW50KCktPnRhZ0lkKG5hbWVzcGFj
ZVVSSS5pbXBsZW1lbnRhdGlvbigpLCBsb2NhbE5hbWUuaW1wbGVtZW50YXRpb24oKSwgdHJ1ZSk7
Ci0gICAgICAgIGlmICggIWlkICkgLy8gbm90IGZvdW5kIC0+IHdlIHdhbnQgdG8gcmV0dXJuIGFu
IGVtcHR5IGxpc3QsIG5vdCAiYWxsIGl0ZW1zIgotICAgICAgICAgICAgaWQgPSAoSWQpLTE7IC8v
IEhBQ0suIEhFQUQgaGFzIGEgY2xlYW5lciBpbXBsZW1lbnRhdGlvbiBvZiBUYWdOb2RlTGlzdElt
cGwgaXQgc2VlbXMuCi0gICAgfQotCi0gICAgcmV0dXJuIFNoYXJlZFB0cjxOb2RlTGlzdEltcGw+
KG5ldyBUYWdOb2RlTGlzdEltcGwodGhpcywgaWQsIGlkTWFzaykpOworICAgIGlmIChuYW1lc3Bh
Y2VVUkkuaXNOdWxsKCkgfHwgbG9jYWxOYW1lLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gU2hh
cmVkUHRyPE5vZGVMaXN0SW1wbD4oKTsgLy8gRklYTUU6IFdobyBjYXJlcyBhYm91dCB0aGlzIGFk
ZGl0aW9uYWwgY2hlY2s/CisgICAgCisgICAgRE9NU3RyaW5nIG5hbWUgPSBsb2NhbE5hbWU7Cisg
ICAgaWYgKGdldERvY3VtZW50KCktPmlzSFRNTERvY3VtZW50KCkpCisgICAgICAgIG5hbWUgPSBs
b2NhbE5hbWUubG93ZXIoKTsKKyAgICByZXR1cm4gU2hhcmVkUHRyPE5vZGVMaXN0SW1wbD4obmV3
IFRhZ05vZGVMaXN0SW1wbCh0aGlzLCBBdG9taWNTdHJpbmcobmFtZXNwYWNlVVJJKSwgQXRvbWlj
U3RyaW5nKG5hbWUpKSk7CiB9CiAKIGJvb2wgTm9kZUltcGw6OmlzU3VwcG9ydGVkKGNvbnN0IERP
TVN0cmluZyAmZmVhdHVyZSwgY29uc3QgRE9NU3RyaW5nICZ2ZXJzaW9uKQpAQCAtMTU5MiwxMyAr
MTU5Myw2IEBAIE5hbWVkQXR0ck1hcEltcGwgKk5vZGVJbXBsOjphdHRyaWJ1dGVzKCkKICAgICBy
ZXR1cm4gMDsKIH0KIAotI2lmIEFQUExFX0NIQU5HRVMKLU5vZGVJbXBsOjpJZCBOb2RlSW1wbDo6
aWRlbnRpZmllcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGlkKCk7Ci19Ci0jZW5kaWYKLQogI2lm
bmRlZiBOREVCVUcKIAogc3RhdGljIHZvaWQgYXBwZW5kQXR0cmlidXRlRGVzYyhjb25zdCBOb2Rl
SW1wbCAqbm9kZSwgUVN0cmluZyAmc3RyaW5nLCBOb2RlSW1wbDo6SWQgYXR0cklELCBRU3RyaW5n
IGF0dHJEZXNjKQpAQCAtMTYzOCw3ICsxNjMyLDcgQEAgdm9pZCBOb2RlSW1wbDo6c2hvd1RyZWVB
bmRNYXJrKE5vZGVJbXBsIAogewogICAgIE5vZGVJbXBsICpyb290Tm9kZTsKICAgICBOb2RlSW1w
bCAqbm9kZSA9IChOb2RlSW1wbCAqKXRoaXM7Ci0gICAgd2hpbGUobm9kZS0+cGFyZW50Tm9kZSgp
ICE9IE5VTEwgJiYgbm9kZS0+aWQoKSAhPSBJRF9CT0RZKQorICAgIHdoaWxlIChub2RlLT5wYXJl
bnROb2RlKCkgJiYgIW5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpib2R5KCkpKQogICAgICAg
ICBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpOwogICAgIHJvb3ROb2RlID0gbm9kZTsKIAkKQEAg
LTIwOTQsMTEgKzIwODgsOCBAQCBOb2RlSW1wbCAqQ29udGFpbmVyTm9kZUltcGw6OmFkZENoaWxk
KE5vCiAgICAgU2hhcmVkUHRyPE5vZGVJbXBsPiBwcm90ZWN0TmV3Q2hpbGQobmV3Q2hpbGQpOyAv
LyBtYWtlIHN1cmUgdGhlIG5ldyBjaGlsZCBpcyByZWYnZCBhbmQgZGVyZWYnZCBzbyB3ZSBkb24n
dCBsZWFrIGl0CiAKICAgICAvLyBzaG9ydCBjaGVjayBmb3IgY29uc2lzdGVuY3kgd2l0aCBEVEQK
LSAgICBpZighaXNYTUxFbGVtZW50Tm9kZSgpICYmICFuZXdDaGlsZC0+aXNYTUxFbGVtZW50Tm9k
ZSgpICYmICFjaGlsZEFsbG93ZWQobmV3Q2hpbGQpKQotICAgIHsKLSAgICAgICAgLy9rZERlYnVn
KCA2MDIwICkgPDwgIkFkZENoaWxkIGZhaWxlZCEgaWQ9IiA8PCBpZCgpIDw8ICIsIGNoaWxkLT5p
ZD0iIDw8IG5ld0NoaWxkLT5pZCgpIDw8IGVuZGw7CisgICAgaWYgKGdldERvY3VtZW50KCktPmlz
SFRNTERvY3VtZW50KCkgJiYgIWNoaWxkQWxsb3dlZChuZXdDaGlsZCkpCiAgICAgICAgIHJldHVy
biAwOwotICAgIH0KIAogICAgIC8vIGp1c3QgYWRkIGl0Li4uCiAgICAgbmV3Q2hpbGQtPnNldFBh
cmVudCh0aGlzKTsKQEAgLTI1MzYsMTAgKzI1MjcsMTAgQEAgYm9vbCBDaGlsZE5vZGVMaXN0SW1w
bDo6bm9kZU1hdGNoZXMoTm9kZQogICAgIHJldHVybiB0ZXN0Tm9kZS0+cGFyZW50Tm9kZSgpID09
IHJvb3ROb2RlOwogfQogCi1UYWdOb2RlTGlzdEltcGw6OlRhZ05vZGVMaXN0SW1wbChOb2RlSW1w
bCAqbiwgTm9kZUltcGw6OklkIF9pZCwgTm9kZUltcGw6OklkIF9pZE1hc2sgKQorVGFnTm9kZUxp
c3RJbXBsOjpUYWdOb2RlTGlzdEltcGwoTm9kZUltcGwgKm4sIGNvbnN0IEF0b21pY1N0cmluZyYg
bmFtZXNwYWNlVVJJLCBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSkKICAgICA6IE5vZGVM
aXN0SW1wbChuKSwgCi0gICAgICBtX2lkKF9pZCAmIF9pZE1hc2spLCAKLSAgICAgIG1faWRNYXNr
KF9pZE1hc2spCisgICAgICBtX25hbWVzcGFjZVVSSShuYW1lc3BhY2VVUkkpLCAKKyAgICAgIG1f
bG9jYWxOYW1lKGxvY2FsTmFtZSkKIHsKIH0KIApAQCAtMjU0OCwxNSArMjUzOSwyMCBAQCB1bnNp
Z25lZCBsb25nIFRhZ05vZGVMaXN0SW1wbDo6bGVuZ3RoKCkgCiAgICAgcmV0dXJuIHJlY3Vyc2l2
ZUxlbmd0aCgpOwogfQogCi1Ob2RlSW1wbCAqVGFnTm9kZUxpc3RJbXBsOjppdGVtICggdW5zaWdu
ZWQgbG9uZyBpbmRleCApIGNvbnN0CitOb2RlSW1wbCAqVGFnTm9kZUxpc3RJbXBsOjppdGVtKHVu
c2lnbmVkIGxvbmcgaW5kZXgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHJlY3Vyc2l2ZUl0ZW0oIGlu
ZGV4ICk7CisgICAgcmV0dXJuIHJlY3Vyc2l2ZUl0ZW0oaW5kZXgpOwogfQogCi1ib29sIFRhZ05v
ZGVMaXN0SW1wbDo6bm9kZU1hdGNoZXMoIE5vZGVJbXBsICp0ZXN0Tm9kZSApIGNvbnN0Citib29s
IFRhZ05vZGVMaXN0SW1wbDo6bm9kZU1hdGNoZXMoTm9kZUltcGwgKnRlc3ROb2RlKSBjb25zdAog
ewotICAgIHJldHVybiAoIHRlc3ROb2RlLT5pc0VsZW1lbnROb2RlKCkgJiYKLSAgICAgICAgICAg
ICAodGVzdE5vZGUtPmlkKCkgJiBtX2lkTWFzaykgPT0gbV9pZCk7CisgICAgaWYgKCF0ZXN0Tm9k
ZS0+aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAobV9u
YW1lc3BhY2VVUkkgIT0gc3RhckF0b20gJiYgbV9uYW1lc3BhY2VVUkkgIT0gdGVzdE5vZGUtPm5h
bWVzcGFjZVVSSSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIG1f
bG9jYWxOYW1lID09IHN0YXJBdG9tIHx8IG1fbG9jYWxOYW1lID09IHRlc3ROb2RlLT5sb2NhbE5h
bWUoKTsKIH0KIAogTmFtZU5vZGVMaXN0SW1wbDo6TmFtZU5vZGVMaXN0SW1wbChOb2RlSW1wbCAq
biwgY29uc3QgRE9NU3RyaW5nICZ0ICkKQEAgLTI1OTUsMTA2ICsyNTkxLDQgQEAgU2hhcmVkUHRy
PE5vZGVJbXBsPiBOYW1lZE5vZGVNYXBJbXBsOjpyZQogICAgIHJldHVybiByZW1vdmVOYW1lZEl0
ZW0obWFwSWQobmFtZXNwYWNlVVJJLCBsb2NhbE5hbWUsIHRydWUpLCBleGNlcHRpb24pOwogfQog
Ci0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vICMjIyB1bnVzZWQKLSNpZiAwCi1HZW5lcmlj
Uk9OYW1lZE5vZGVNYXBJbXBsOjpHZW5lcmljUk9OYW1lZE5vZGVNYXBJbXBsKERvY3VtZW50UHRy
KiBkb2MpCi0gICAgOiBOYW1lZE5vZGVNYXBJbXBsKCkKLXsKLSAgICBtX2RvYyA9IGRvYy0+ZG9j
dW1lbnQoKTsKLSAgICBtX2NvbnRlbnRzID0gbmV3IFFQdHJMaXN0PE5vZGVJbXBsPjsKLX0KLQot
R2VuZXJpY1JPTmFtZWROb2RlTWFwSW1wbDo6fkdlbmVyaWNST05hbWVkTm9kZU1hcEltcGwoKQot
ewotICAgIHdoaWxlIChtX2NvbnRlbnRzLT5jb3VudCgpID4gMCkKLSAgICAgICAgbV9jb250ZW50
cy0+dGFrZSgwKS0+ZGVyZWYoKTsKLQotICAgIGRlbGV0ZSBtX2NvbnRlbnRzOwotfQotCi1Ob2Rl
SW1wbCAqR2VuZXJpY1JPTmFtZWROb2RlTWFwSW1wbDo6Z2V0TmFtZWRJdGVtICggY29uc3QgRE9N
U3RyaW5nICZuYW1lLCBpbnQgJi8qZXhjZXB0aW9uY29kZSovICkgY29uc3QKLXsKLSAgICBRUHRy
TGlzdEl0ZXJhdG9yPE5vZGVJbXBsPiBpdCgqbV9jb250ZW50cyk7Ci0gICAgZm9yICg7IGl0LmN1
cnJlbnQoKTsgKytpdCkKLSAgICAgICAgaWYgKGl0LmN1cnJlbnQoKS0+bm9kZU5hbWUoKSA9PSBu
YW1lKQotICAgICAgICAgICAgcmV0dXJuIGl0LmN1cnJlbnQoKTsKLSAgICByZXR1cm4gMDsKIH0K
LQotTm9kZSBHZW5lcmljUk9OYW1lZE5vZGVNYXBJbXBsOjpzZXROYW1lZEl0ZW0gKCBjb25zdCBO
b2RlICYvKmFyZyovLCBpbnQgJmV4Y2VwdGlvbmNvZGUgKQotewotICAgIC8vIGNhbid0IG1vZGlm
eSB0aGlzIGxpc3QgdGhyb3VnaCBzdGFuZGFyZCBET00gZnVuY3Rpb25zCi0gICAgLy8gTk9fTU9E
SUZJQ0FUSU9OX0FMTE9XRURfRVJSOiBSYWlzZWQgaWYgdGhpcyBtYXAgaXMgcmVhZG9ubHkKLSAg
ICBleGNlcHRpb25jb2RlID0gRE9NRXhjZXB0aW9uOjpOT19NT0RJRklDQVRJT05fQUxMT1dFRF9F
UlI7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLU5vZGUgR2VuZXJpY1JPTmFtZWROb2RlTWFwSW1wbDo6
cmVtb3ZlTmFtZWRJdGVtICggY29uc3QgRE9NU3RyaW5nICYvKm5hbWUqLywgaW50ICZleGNlcHRp
b25jb2RlICkKLXsKLSAgICAvLyBjYW4ndCBtb2RpZnkgdGhpcyBsaXN0IHRocm91Z2ggc3RhbmRh
cmQgRE9NIGZ1bmN0aW9ucwotICAgIC8vIE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUjogUmFp
c2VkIGlmIHRoaXMgbWFwIGlzIHJlYWRvbmx5Ci0gICAgZXhjZXB0aW9uY29kZSA9IERPTUV4Y2Vw
dGlvbjo6Tk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOwotICAgIHJldHVybiAwOwotfQotCi1O
b2RlSW1wbCAqR2VuZXJpY1JPTmFtZWROb2RlTWFwSW1wbDo6aXRlbSAoIHVuc2lnbmVkIGxvbmcg
aW5kZXggKSBjb25zdAotewotICAgIC8vICMjIyBjaGVjayB0aGlzIHdoZW4gY2FsbGluZyBmcm9t
IGphdmFzY3JpcHQgdXNpbmcgLTEgPSAyXnNpemVvZihpbnQpLTEKLSAgICAvLyAoYWxzbyBmb3Ig
b3RoZXIgc2ltaWxhciBtZXRob2RzKQotICAgIGlmIChpbmRleCA+PSBtX2NvbnRlbnRzLT5jb3Vu
dCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBtX2NvbnRlbnRzLT5hdChpbmRl
eCk7Ci19Ci0KLXVuc2lnbmVkIGxvbmcgR2VuZXJpY1JPTmFtZWROb2RlTWFwSW1wbDo6bGVuZ3Ro
KCAgKSBjb25zdAotewotICAgIHJldHVybiBtX2NvbnRlbnRzLT5jb3VudCgpOwotfQotCi1Ob2Rl
SW1wbCAqR2VuZXJpY1JPTmFtZWROb2RlTWFwSW1wbDo6Z2V0TmFtZWRJdGVtTlMoIGNvbnN0IERP
TVN0cmluZyAmbmFtZXNwYWNlVVJJLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBET01TdHJpbmcgJmxvY2FsTmFtZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICYvKmV4Y2Vw
dGlvbmNvZGUqLyApIGNvbnN0Ci17Ci0gICAgTm9kZUltcGw6OklkIHNlYXJjaElkID0gbV9kb2Mt
PnRhZ0lkKG5hbWVzcGFjZVVSSS5pbXBsZW1lbnRhdGlvbigpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxOYW1lLmltcGxlbWVudGF0aW9u
KCksIHRydWUpOwotCi0gICAgUVB0ckxpc3RJdGVyYXRvcjxOb2RlSW1wbD4gaXQoKm1fY29udGVu
dHMpOwotICAgIGZvciAoOyBpdC5jdXJyZW50KCk7ICsraXQpCi0gICAgICAgIGlmIChpdC5jdXJy
ZW50KCktPmlkKCkgPT0gc2VhcmNoSWQpCi0gICAgICAgICAgICByZXR1cm4gaXQuY3VycmVudCgp
OwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLU5vZGVJbXBsICpHZW5lcmljUk9OYW1lZE5vZGVNYXBJ
bXBsOjpzZXROYW1lZEl0ZW1OUyggTm9kZUltcGwgKi8qYXJnKi8sIGludCAmZXhjZXB0aW9uY29k
ZSApCi17Ci0gICAgLy8gY2FuJ3QgbW9kaWZ5IHRoaXMgbGlzdCB0aHJvdWdoIHN0YW5kYXJkIERP
TSBmdW5jdGlvbnMKLSAgICAvLyBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI6IFJhaXNlZCBp
ZiB0aGlzIG1hcCBpcyByZWFkb25seQotICAgIGV4Y2VwdGlvbmNvZGUgPSBET01FeGNlcHRpb246
Ok5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUjsKLSAgICByZXR1cm4gMDsKLX0KLQotTm9kZUlt
cGwgKkdlbmVyaWNST05hbWVkTm9kZU1hcEltcGw6OnJlbW92ZU5hbWVkSXRlbU5TKCBjb25zdCBE
T01TdHJpbmcgJi8qbmFtZXNwYWNlVVJJKi8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IERPTVN0cmluZyAmLypsb2NhbE5hbWUq
LywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50ICZleGNlcHRpb25jb2RlICkKLXsKLSAgICAvLyBjYW4ndCBtb2RpZnkgdGhpcyBsaXN0
IHRocm91Z2ggc3RhbmRhcmQgRE9NIGZ1bmN0aW9ucwotICAgIGV4Y2VwdGlvbmNvZGUgPSBET01F
eGNlcHRpb246Ok5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUjsKLSAgICByZXR1cm4gMDsKLX0K
LQotdm9pZCBHZW5lcmljUk9OYW1lZE5vZGVNYXBJbXBsOjphZGROb2RlKE5vZGVJbXBsICpuKQot
ewotICAgIC8vIFRoZSBzcGVjIHNheXMgdGhhdCBpbiB0aGUgY2FzZSBvZiBkdXBsaWNhdGVzIHdl
IG9ubHkga2VlcCB0aGUgZmlyc3Qgb25lCi0gICAgaW50IGV4Y2VwdGlvbmNvZGUgPSAwOwotICAg
IGlmIChnZXROYW1lZEl0ZW0obi0+bm9kZU5hbWUoKSxleGNlcHRpb25jb2RlKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgbi0+cmVmKCk7Ci0gICAgbV9jb250ZW50cy0+YXBwZW5kKG4pOwotfQot
Ci0jZW5kaWYKSW5kZXg6IGtodG1sL3htbC9kb21fbm9kZWltcGwuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC94bWwvZG9tX25vZGVpbXBsLmgsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuODcKZGlmZiAtdSAtcCAtcjEuODcga2h0bWwveG1sL2RvbV9ub2RlaW1w
bC5oCi0tLSBraHRtbC94bWwvZG9tX25vZGVpbXBsLmgJMjMgSnVuIDIwMDUgMTk6NDc6NTAgLTAw
MDAJMS44NworKysga2h0bWwveG1sL2RvbV9ub2RlaW1wbC5oCTUgSnVsIDIwMDUgMjM6MjE6MDgg
LTAwMDAKQEAgLTU5LDYgKzU5LDcgQEAgY2xhc3MgRXZlbnRJbXBsOwogY2xhc3MgRXZlbnRMaXN0
ZW5lcjsKIGNsYXNzIE5vZGVMaXN0SW1wbDsKIGNsYXNzIE5hbWVkQXR0ck1hcEltcGw7CitjbGFz
cyBRdWFsaWZpZWROYW1lOwogY2xhc3MgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXI7CiAKIC8vIFRo
ZSBuYW1lc3BhY2UgdXNlZCBmb3IgWEhUTUwgZWxlbWVudHMKQEAgLTEwMiw2ICsxMDMsNyBAQCBw
dWJsaWM6CiAgICAgTUFJTl9USFJFQURfQUxMT0NBVEVEOwogCiAgICAgLy8gRE9NIG1ldGhvZHMg
JiBhdHRyaWJ1dGVzIGZvciBOb2RlCisgICAgdmlydHVhbCBib29sIGhhc1RhZ05hbWUoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgdGFnTmFtZSkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0
dWFsIERPTVN0cmluZyBub2RlTmFtZSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIERPTVN0cmlu
ZyBub2RlVmFsdWUoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0Tm9kZVZhbHVlKCBjb25z
dCBET01TdHJpbmcgJl9ub2RlVmFsdWUsIGludCAmZXhjZXB0aW9uY29kZSApOwpAQCAtMTIyLDE0
ICsxMjQsMTQgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCByZW1vdmUoaW50ICZleGNlcHRp
b25jb2RlKTsKICAgICB2aXJ0dWFsIGJvb2wgaGFzQ2hpbGROb2RlcyAoICApIGNvbnN0OwogICAg
IHZpcnR1YWwgTm9kZUltcGwgKmNsb25lTm9kZSAoIGJvb2wgZGVlcCApID0gMDsKLSAgICB2aXJ0
dWFsIERPTVN0cmluZyBsb2NhbE5hbWUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIERPTVN0cmluZyBu
YW1lc3BhY2VVUkkoKSBjb25zdDsKLSAgICB2aXJ0dWFsIERPTVN0cmluZyBwcmVmaXgoKSBjb25z
dDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0UHJlZml4KGNvbnN0IERPTVN0cmluZyAmX3ByZWZpeCwg
aW50ICZleGNlcHRpb25jb2RlICk7CisgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGxv
Y2FsTmFtZSgpIGNvbnN0OworICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3Bh
Y2VVUkkoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4KCkg
Y29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNldFByZWZpeChjb25zdCBBdG9taWNTdHJpbmcgJl9w
cmVmaXgsIGludCAmZXhjZXB0aW9uY29kZSk7CiAgICAgdm9pZCBub3JtYWxpemUgKCk7CiAgICAg
c3RhdGljIGJvb2wgaXNTdXBwb3J0ZWQoY29uc3QgRE9NU3RyaW5nICZmZWF0dXJlLCBjb25zdCBE
T01TdHJpbmcgJnZlcnNpb24pOwogCi0gICAgTm9kZUltcGwgKmxhc3REZXNjZW5kZW50KCkgY29u
c3Q7CisgICAgTm9kZUltcGwgKmxhc3REZXNjZW5kYW50KCkgY29uc3Q7CiAKICAgICAvLyBPdGhl
ciBtZXRob2RzIChub3QgcGFydCBvZiBET00pCiAgICAgdmlydHVhbCBib29sIGlzRWxlbWVudE5v
ZGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQpAQCAtMTM3LDggKzEzOSw4IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIGJvb2wgaXNTdHlsZWRFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNBdHRyaWJ1dGVOb2RlKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNUZXh0Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9CisgICAgdmlydHVhbCBib29sIGlzQ29tbWVudE5vZGUoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0RvY3VtZW50Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9Ci0gICAgdmlydHVhbCBib29sIGlzWE1MRWxlbWVudE5vZGUoKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQogICAgIGJvb2wgaXNCbG9ja0Zsb3coKSBjb25zdDsKICAgICBib29sIGlzQmxv
Y2tGbG93T3JUYWJsZSgpIGNvbnN0OwogICAgIApAQCAtMTg4LDM1ICsxOTAsMTggQEAgcHVibGlj
OgogICAgIGJvb2wgaW5TYW1lUm9vdEVkaXRhYmxlRWxlbWVudChOb2RlSW1wbCAqKTsKICAgICBi
b29sIGluU2FtZUNvbnRhaW5pbmdCbG9ja0Zsb3dFbGVtZW50KE5vZGVJbXBsICopOwogICAgIAot
ICAgIC8vIHVzZWQgYnkgdGhlIHBhcnNlci4gRG9lc24ndCBkbyBhcyBtYW55IGVycm9yIGNoZWNr
aW5ncyBhcwotICAgIC8vIGFwcGVuZENoaWxkKCksIGFuZCByZXR1cm5zIHRoZSBub2RlIGludG8g
d2hpY2ggd2lsbCBiZSBwYXJzZWQgbmV4dC4KKyAgICAvLyB1c2VkIGJ5IHRoZSBwYXJzZXIuIENo
ZWNrcyBhZ2FpbnN0IHRoZSBEVEQsIHVubGlrZSBET00gb3BlcmF0aW9ucyBsaWtlCisgICAgLy8g
YXBwZW5kQ2hpbGQoKSwgYW5kIHJldHVybnMgdGhlIG5ldyBjb250YWluZXIgbm9kZSBmb3IgZnV0
dXJlIGluc2VydGlvbnMgYXMgeW91IHBhcnNlLgogICAgIHZpcnR1YWwgTm9kZUltcGwgKmFkZENo
aWxkKE5vZGVJbXBsICpuZXdDaGlsZCk7CiAgICAgCiAgICAgLy8gY2FsbGVkIGJ5IHRoZSBwYXJz
ZXIgd2hlbiB0aGlzIGVsZW1lbnQncyBjbG9zZSB0YWcgaXMgcmVhY2hlZCwKICAgICAvLyBzaWdu
YWxsaW5nIHRoYXQgYWxsIGNoaWxkIHRhZ3MgaGF2ZSBiZWVuIHBhcnNlZCBhbmQgYWRkZWQuCiAg
ICAgLy8gVGhpcyBpcyBvbmx5IG5lZWRlZCBmb3IgPGFwcGxldD4gYW5kIDxvYmplY3Q+IGVsZW1l
bnRzLCB3aGljaCBjYW4ndCBsYXkgdGhlbXNlbHZlcyBvdXQKICAgICAvLyB1bnRpbCB0aGV5IGtu
b3cgYWxsIG9mIHRoZWlyIG5lc3RlZCA8cGFyYW0+cy4gWzM2MDMxOTEsIDQwNDA4NDhdCi0gICAg
dmlydHVhbCB2b2lkIGNsb3NlUmVuZGVyZXIoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgY2xvc2VS
ZW5kZXJlcigpIHt9CisKKyAgICB0eXBlZGVmIFFfVUlOVDMyIElkOyAvLyBGSVhNRTogWWFuayB0
aGlzIG9uY2UgYXR0cmlidXRlcyBhcmUgYWxzbyBzd2l0Y2hlZCBvdmVyLgogCi0gICAgdHlwZWRl
ZiBRX1VJTlQzMiBJZDsKLSAgICAvLyBpZCgpIGlzIHVzZWQgdG8gZWFzaWx5IGFuZCBleGFjdGx5
IGlkZW50aWZ5IGEgbm9kZS4gSXQKLSAgICAvLyBpcyBvcHRpbWl6ZWQgZm9yIHF1aWNrIGNvbXBh
cmlzb24gYW5kIGxvdyBtZW1vcnkgY29uc3VtcHRpb24uCi0gICAgLy8gaXRzIHZhbHVlIGRlcGVu
ZHMgb24gdGhlIG93bmVyIGRvY3VtZW50IG9mIHRoZSBub2RlIGFuZCBpcwotICAgIC8vIGNhdGVn
b3JpemVkIGluIHRoZSBmb2xsb3dpbmcgd2F5OgotICAgIC8vIDEuLklEX0xBU1RfVEFHOiB0aGUg
bm9kZSBpbmhlcml0cyBIVE1MRWxlbWVudEltcGwgYW5kIGlzCi0gICAgLy8gICAgICAgICAgICAg
ICAgIHBhcnQgb2YgdGhlIEhUTUwgbmFtZXNwYWNlLgotICAgIC8vICAgICAgICAgICAgICAgICBU
aGUgSFRNTCBuYW1lc3BhY2UgaXMgZWl0aGVyIHRoZSBnbG9iYWwKLSAgICAvLyAgICAgICAgICAg
ICAgICAgb25lIChubyBuYW1lc3BhY2UpIG9yIHRoZSBYSFRNTCBuYW1lc3BhY2UKLSAgICAvLyAg
ICAgICAgICAgICAgICAgZGVwZW5kaW5nIG9uIHRoZSBvd25lciBkb2N1bWVudCdzIGRvY3R5cGUK
LSAgICAvLyBJRF9MQVNUX1RBRysxLi4weGZmZmY6IG5vbi1IVE1MIGVsZW1lbnRzIGluIHRoZSBn
bG9iYWwgbmFtZXNwYWNlCi0gICAgLy8gb3RoZXJzICAgICAgIG5vbi1IVE1MIGVsZW1lbnRzIGlu
IGEgbmFtZXNwYWNlLgotICAgIC8vICAgICAgICAgICAgICAgICB0aGUgdXBwZXIgMTYgYml0IGlk
ZW50aWZ5IHRoZSBuYW1lc3BhY2UKLSAgICAvLyAgICAgICAgICAgICAgICAgdGhlIGxvd2VyIDE2
IGJpdCBpZGVudGlmeSB0aGUgbG9jYWwgcGFydCBvZiB0aGUKLSAgICAvLyAgICAgICAgICAgICAg
ICAgcXVhbGlmaWVkIGVsZW1lbnQgbmFtZS4KLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3QgeyBy
ZXR1cm4gMDsgfTsKLSNpZiBBUFBMRV9DSEFOR0VTCi0gICAgSWQgaWRlbnRpZmllcigpIGNvbnN0
OwotI2VuZGlmCiAgICAgZW51bSBNb3VzZUV2ZW50VHlwZSB7CiAgICAgICAgIE1vdXNlUHJlc3Ms
CiAgICAgICAgIE1vdXNlUmVsZWFzZSwKQEAgLTI3OCw4ICsyNjMsNiBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCBib29sIGlzS2V5Ym9hcmRGb2N1c2FibGUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJv
b2wgaXNNb3VzZUZvY3VzYWJsZSgpIGNvbnN0OwogICAgIAotICAgIHZpcnR1YWwgYm9vbCBpc0lu
bGluZSgpIGNvbnN0OwotICAgIAogICAgIHZpcnR1YWwgYm9vbCBpc0NvbnRlbnRFZGl0YWJsZSgp
IGNvbnN0OwogICAgIHZpcnR1YWwgUVJlY3QgZ2V0UmVjdCgpIGNvbnN0OwogCkBAIC0zNjksMTEg
KzM1MiwxNSBAQCBwdWJsaWM6CiAgICAga2h0bWw6OlJlbmRlck9iamVjdCAqcHJldmlvdXNSZW5k
ZXJlcigpOwogICAgIHZvaWQgc2V0UmVuZGVyZXIoa2h0bWw6OlJlbmRlck9iamVjdCogcmVuZGVy
ZXIpIHsgbV9yZW5kZXIgPSByZW5kZXJlcjsgfQogICAgIAotICAgIHZvaWQgY2hlY2tTZXRQcmVm
aXgoY29uc3QgRE9NU3RyaW5nICZfcHJlZml4LCBpbnQgJmV4Y2VwdGlvbmNvZGUpOwotICAgIHZv
aWQgY2hlY2tBZGRDaGlsZChOb2RlSW1wbCAqbmV3Q2hpbGQsIGludCAmZXhjZXB0aW9uY29kZSk7
CisgICAgdm9pZCBjaGVja1NldFByZWZpeChjb25zdCBBdG9taWNTdHJpbmcgJl9wcmVmaXgsIGlu
dCAmZXhjZXB0aW9uY29kZSk7CiAgICAgYm9vbCBpc0FuY2VzdG9yKGNvbnN0IE5vZGVJbXBsICop
IGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBjaGlsZEFsbG93ZWQoIE5vZGVJbXBsICpuZXdDaGls
ZCApOwogCisJLy8gVGhlc2UgdHdvIG1ldGhvZHMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4gIFRo
ZSBmb3JtZXIgaXMgdXNlZCB0byBkbyBzdHJpY3QgZXJyb3ItY2hlY2tpbmcKKwkvLyB3aGVuIGFk
ZGluZyBjaGlsZHJlbiB2aWEgdGhlIHB1YmxpYyBET00gQVBJIChlLmcuLCBhcHBlbmRDaGlsZCgp
KS4gIFRoZSBsYXR0ZXIgaXMgY2FsbGVkIG9ubHkgd2hlbiBwYXJzaW5nLCAKKwkvLyB0byBzYW5p
dHktY2hlY2sgYWdhaW5zdCB0aGUgRFREIGZvciBlcnJvciByZWNvdmVyeS4KKwl2b2lkIGNoZWNr
QWRkQ2hpbGQoTm9kZUltcGwgKm5ld0NoaWxkLCBpbnQgJmV4Y2VwdGlvbmNvZGUpOyAgICAvLyBF
cnJvci1jaGVja2luZyB3aGVuIGFkZGluZyB2aWEgdGhlIERPTSBBUEkKKwl2aXJ0dWFsIGJvb2wg
Y2hpbGRBbGxvd2VkKE5vZGVJbXBsICpuZXdDaGlsZCk7CQkJCSAgIC8vIEVycm9yLWNoZWNraW5n
IGR1cmluZyBwYXJzaW5nIHRoYXQgY2hlY2tzIHRoZSBEVEQKKwkKICAgICB2aXJ0dWFsIGxvbmcg
bWF4T2Zmc2V0KCkgY29uc3Q7CiAgICAgbG9uZyBtYXhEZWVwT2Zmc2V0KCkgY29uc3Q7CiAgICAg
dmlydHVhbCBsb25nIGNhcmV0TWluT2Zmc2V0KCkgY29uc3Q7CkBAIC00ODEsNyArNDY4LDcgQEAg
cHVibGljOgogICAgIHZvaWQgbm90aWZ5Tm9kZUxpc3RzU3VidHJlZU1vZGlmaWVkKCk7CiAgICAg
dm9pZCBub3RpZnlMb2NhbE5vZGVMaXN0c1N1YnRyZWVNb2RpZmllZCgpOwogCi0gICAgU2hhcmVk
UHRyPE5vZGVMaXN0SW1wbD4gZ2V0RWxlbWVudHNCeVRhZ05hbWUoY29uc3QgRE9NU3RyaW5nICZu
YW1lKSB7IHJldHVybiBnZXRFbGVtZW50c0J5VGFnTmFtZU5TKERPTVN0cmluZygpLCBuYW1lKTsg
fQorICAgIFNoYXJlZFB0cjxOb2RlTGlzdEltcGw+IGdldEVsZW1lbnRzQnlUYWdOYW1lKGNvbnN0
IERPTVN0cmluZyAmbmFtZSkgeyByZXR1cm4gZ2V0RWxlbWVudHNCeVRhZ05hbWVOUygiKiIsIG5h
bWUpOyB9CiAgICAgU2hhcmVkUHRyPE5vZGVMaXN0SW1wbD4gZ2V0RWxlbWVudHNCeVRhZ05hbWVO
Uyhjb25zdCBET01TdHJpbmcgJm5hbWVzcGFjZVVSSSwgY29uc3QgRE9NU3RyaW5nICZsb2NhbE5h
bWUpOwogCiBwcml2YXRlOiAvLyBtZW1iZXJzCkBAIC02MTgsMzAgKzYwNSw2IEBAIHByb3RlY3Rl
ZDoKICAgICB2aXJ0dWFsIGJvb2wgbm9kZU1hdGNoZXMoIE5vZGVJbXBsICp0ZXN0Tm9kZSApIGNv
bnN0OwogfTsKIAotCi0vKioKLSAqIE5vZGVMaXN0IHdoaWNoIGxpc3RzIGFsbCBOb2RlcyBpbiBh
IGRvY3VtZW50IHdpdGggYSBnaXZlbiB0YWcgbmFtZQotICovCi1jbGFzcyBUYWdOb2RlTGlzdElt
cGwgOiBwdWJsaWMgTm9kZUxpc3RJbXBsCi17Ci1wdWJsaWM6Ci0gICAgVGFnTm9kZUxpc3RJbXBs
KCBOb2RlSW1wbCAqbiwgTm9kZUltcGw6OklkIHRhZ0lkLCBOb2RlSW1wbDo6SWQgdGFnSWRNYXNr
ICk7Ci0KLSAgICAvLyBET00gbWV0aG9kcyBvdmVycmlkZGVuIGZyb20gIHBhcmVudCBjbGFzc2Vz
Ci0KLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgbGVuZ3RoKCkgY29uc3Q7Ci0gICAgdmlydHVh
bCBOb2RlSW1wbCAqaXRlbSAoIHVuc2lnbmVkIGxvbmcgaW5kZXggKSBjb25zdDsKLQotICAgIC8v
IE90aGVyIG1ldGhvZHMgKG5vdCBwYXJ0IG9mIERPTSkKLQotcHJvdGVjdGVkOgotICAgIHZpcnR1
YWwgYm9vbCBub2RlTWF0Y2hlcyggTm9kZUltcGwgKnRlc3ROb2RlICkgY29uc3Q7Ci0KLSAgICBO
b2RlSW1wbDo6SWQgbV9pZDsKLSAgICBOb2RlSW1wbDo6SWQgbV9pZE1hc2s7Ci19OwotCi0KIC8q
KgogICogTm9kZUxpc3Qgd2hpY2ggbGlzdHMgYWxsIE5vZGVzIGluIGEgRWxlbWVudCB3aXRoIGEg
Z2l2ZW4gIm5hbWU9IiB0YWcKICAqLwpJbmRleDoga2h0bWwveG1sL2RvbV9wb3NpdGlvbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwveG1sL2RvbV9wb3Np
dGlvbi5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNzEKZGlmZiAtdSAtcCAtcjEuNzEga2h0
bWwveG1sL2RvbV9wb3NpdGlvbi5jcHAKLS0tIGtodG1sL3htbC9kb21fcG9zaXRpb24uY3BwCTIx
IEp1biAyMDA1IDE4OjExOjEwIC0wMDAwCTEuNzEKKysrIGtodG1sL3htbC9kb21fcG9zaXRpb24u
Y3BwCTUgSnVsIDIwMDUgMjM6MjE6MDkgLTAwMDAKQEAgLTM1LDcgKzM1LDYgQEAKICNpbmNsdWRl
ICJkb20yX3JhbmdlaW1wbC5oIgogI2luY2x1ZGUgImRvbTJfdmlld3NpbXBsLmgiCiAjaW5jbHVk
ZSAiaGVscGVyLmgiCi0jaW5jbHVkZSAiaHRtbHRhZ3MuaCIKICNpbmNsdWRlICJ0ZXh0X2FmZmlu
aXR5LmgiCiAjaW5jbHVkZSAidmlzaWJsZV9wb3NpdGlvbi5oIgogI2luY2x1ZGUgInZpc2libGVf
dW5pdHMuaCIKQEAgLTQ1LDYgKzQ0LDcgQEAKICNpbmNsdWRlICJyZW5kZXJpbmcvcmVuZGVyX3N0
eWxlLmgiCiAjaW5jbHVkZSAicmVuZGVyaW5nL3JlbmRlcl90ZXh0LmgiCiAjaW5jbHVkZSAiZWRp
dGluZy92aXNpYmxlX3RleHQuaCIKKyNpbmNsdWRlICJodG1sbmFtZXMuaCIKIAogI2lmIEFQUExF
X0NIQU5HRVMKICNpbmNsdWRlICJLV1FBc3NlcnRpb25zLmgiCkBAIC00NDAsNyArNDQwLDcgQEAg
UG9zaXRpb24gUG9zaXRpb246OmRvd25zdHJlYW0oKSBjb25zdAogCiAgICAgICAgIC8vIHN0b3Ag
YmVmb3JlIGdvaW5nIGFib3ZlIHRoZSBib2R5LCB1cCBpbnRvIHRoZSBoZWFkCiAgICAgICAgIC8v
IHJldHVybiB0aGUgbGFzdCB2aXNpYmxlIHN0cmVhbWVyIHBvc2l0aW9uCi0gICAgICAgIGlmIChj
dXJyZW50Tm9kZS0+aWQoKSA9PSBJRF9CT0RZICYmIGN1cnJlbnRPZmZzZXQgPj0gKGludCkgY3Vy
cmVudE5vZGUtPmNoaWxkTm9kZUNvdW50KCkpCisgICAgICAgIGlmIChjdXJyZW50Tm9kZS0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OmJvZHkoKSkgJiYgY3VycmVudE9mZnNldCA+PSAoaW50KSBjdXJy
ZW50Tm9kZS0+Y2hpbGROb2RlQ291bnQoKSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgCiAgICAgICAgIC8vIGxpbWl0IHRyYXZlcnNhbCB0byBibG9jayBvciB0YWJsZSBlbmNsb3Np
bmcgdGhlIG9yaWdpbmFsIGVsZW1lbnQKQEAgLTY5NCw3ICs2OTQsNyBAQCBib29sIFBvc2l0aW9u
OjpyZW5kZXJzSW5EaWZmZXJlbnRQb3NpdGlvCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAK
ICAgICBpZiAobm9kZSgpID09IHBvcy5ub2RlKCkpIHsKLSAgICAgICAgaWYgKG5vZGUoKS0+aWQo
KSA9PSBJRF9CUikKKyAgICAgICAgaWYgKG5vZGUoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJy
KCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIGlmIChvZmZzZXQoKSA9
PSBwb3Mub2Zmc2V0KCkpCkBAIC03MDYsMTAgKzcwNiwxMCBAQCBib29sIFBvc2l0aW9uOjpyZW5k
ZXJzSW5EaWZmZXJlbnRQb3NpdGlvCiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgaWYgKG5v
ZGUoKS0+aWQoKSA9PSBJRF9CUiAmJiBwb3MuaW5SZW5kZXJlZENvbnRlbnQoKSkKKyAgICBpZiAo
bm9kZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YnIoKSkgJiYgcG9zLmluUmVuZGVyZWRDb250
ZW50KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgIAotICAgIGlmIChw
b3Mubm9kZSgpLT5pZCgpID09IElEX0JSICYmIGluUmVuZGVyZWRDb250ZW50KCkpCisgICAgaWYg
KHBvcy5ub2RlKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpicigpKSAmJiBpblJlbmRlcmVkQ29u
dGVudCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICAKICAgICBpZiAo
bm9kZSgpLT5lbmNsb3NpbmdCbG9ja0Zsb3dFbGVtZW50KCkgIT0gcG9zLm5vZGUoKS0+ZW5jbG9z
aW5nQmxvY2tGbG93RWxlbWVudCgpKQpAQCAtNzY0LDcgKzc2NCw3IEBAIFBvc2l0aW9uIFBvc2l0
aW9uOjpsZWFkaW5nV2hpdGVzcGFjZVBvc2kKICAgICBpZiAoaXNOdWxsKCkpCiAgICAgICAgIHJl
dHVybiBQb3NpdGlvbigpOwogICAgIAotICAgIGlmICh1cHN0cmVhbSgpLm5vZGUoKS0+aWQoKSA9
PSBJRF9CUikKKyAgICBpZiAodXBzdHJlYW0oKS5ub2RlKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjpicigpKSkKICAgICAgICAgcmV0dXJuIFBvc2l0aW9uKCk7CiAKICAgICBQb3NpdGlvbiBwcmV2
ID0gcHJldmlvdXNDaGFyYWN0ZXJQb3NpdGlvbihhZmZpbml0eSk7CkBAIC03OTQsNyArNzk0LDcg
QEAgUG9zaXRpb24gUG9zaXRpb246OnRyYWlsaW5nV2hpdGVzcGFjZVBvcwogICAgICAgICB9CiAg
ICAgfQogCi0gICAgaWYgKGRvd25zdHJlYW0oKS5ub2RlKCktPmlkKCkgPT0gSURfQlIpCisgICAg
aWYgKGRvd25zdHJlYW0oKS5ub2RlKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpicigpKSkKICAg
ICAgICAgcmV0dXJuIFBvc2l0aW9uKCk7CiAKICAgICBQb3NpdGlvbiBuZXh0ID0gbmV4dENoYXJh
Y3RlclBvc2l0aW9uKGFmZmluaXR5KTsKSW5kZXg6IGtodG1sL3htbC9kb21fcW5hbWUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3htbC9kb21fcW5hbWUu
Y3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIKZGlmZiAtdSAtcCAtcjEuMiBraHRtbC94bWwv
ZG9tX3FuYW1lLmNwcAotLS0ga2h0bWwveG1sL2RvbV9xbmFtZS5jcHAJMTYgSnVuIDIwMDUgMjE6
MDY6NDYgLTAwMDAJMS4yCisrKyBraHRtbC94bWwvZG9tX3FuYW1lLmNwcAk1IEp1bCAyMDA1IDIz
OjIxOjA5IC0wMDAwCkBAIC0yNyw2ICsyNyw3IEBAIG5hbWVzcGFjZSBET00gewogc3RhdGljIFFQ
dHJEaWN0PFFQdHJEaWN0PFFQdHJEaWN0PFF1YWxpZmllZE5hbWU6OlF1YWxpZmllZE5hbWVJbXBs
PiA+ID4qIGdOYW1lQ2FjaGUgPSAwOwogCiBRdWFsaWZpZWROYW1lOjpRdWFsaWZpZWROYW1lKGNv
bnN0IEF0b21pY1N0cmluZyYgcCwgY29uc3QgQXRvbWljU3RyaW5nJiBsLCBjb25zdCBBdG9taWNT
dHJpbmcmIG4pCis6bV9pbXBsKDApCiB7CiAgICAgLy8gT2J0YWluIGFuIGFwcHJvcHJpYXRlIGlu
bmVyIGZyb20gb3VyIGRpY3Rpb25hcnkuCiAgICAgUVB0ckRpY3Q8UVB0ckRpY3Q8UXVhbGlmaWVk
TmFtZUltcGw+ID4qIG5hbWVzcGFjZURpY3QgPSAwOwpAQCAtODgsNyArODksNyBAQCBjb25zdCBR
dWFsaWZpZWROYW1lJiBRdWFsaWZpZWROYW1lOjpvcGVyCiAKIHZvaWQgUXVhbGlmaWVkTmFtZTo6
ZGVyZWYoKQogewotICAgIGlmIChtX2ltcGwtPnJlZkNvdW50KCkgPT0gMSkgeworICAgIGlmICht
X2ltcGwtPmhhc09uZVJlZigpKSB7CiAgICAgICAgIC8vIEJlZm9yZSBkZWNyZW1lbnRpbmcgdGhl
IHJlZiB0byAwLCByZW1vdmUgb3Vyc2VsdmVzIGZyb20gdGhlIGhhc2ggdGFibGUuCiAgICAgICAg
IFFQdHJEaWN0PFFQdHJEaWN0PFF1YWxpZmllZE5hbWVJbXBsPiA+KiBuYW1lc3BhY2VEaWN0ID0g
MDsKICAgICAgICAgUVB0ckRpY3Q8UXVhbGlmaWVkTmFtZUltcGw+KiBwcmVmaXhEaWN0ID0gMDsK
QEAgLTEwNSw2ICsxMDYsMTIgQEAgdm9pZCBRdWFsaWZpZWROYW1lOjpkZXJlZigpCiAgICAgbV9p
bXBsLT5kZXJlZigpOwogfQogCit2b2lkIFF1YWxpZmllZE5hbWU6OnNldFByZWZpeChjb25zdCBB
dG9taWNTdHJpbmcmIHByZWZpeCkKK3sKKyAgICBRdWFsaWZpZWROYW1lIG90aGVyKHByZWZpeCwg
bG9jYWxOYW1lKCksIG5hbWVzcGFjZVVSSSgpKTsKKyAgICAqdGhpcyA9IG90aGVyOworfQorCiBi
b29sIG9wZXJhdG9yPT0oY29uc3QgQXRvbWljU3RyaW5nJiBhLCBjb25zdCBRdWFsaWZpZWROYW1l
JiBxKQogeyAKICAgICByZXR1cm4gYSA9PSBxLmxvY2FsTmFtZSgpOwpJbmRleDoga2h0bWwveG1s
L2RvbV9xbmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1s
L3htbC9kb21fcW5hbWUuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yCmRpZmYgLXUgLXAgLXIx
LjIga2h0bWwveG1sL2RvbV9xbmFtZS5oCi0tLSBraHRtbC94bWwvZG9tX3FuYW1lLmgJMTYgSnVu
IDIwMDUgMjE6MDY6NDYgLTAwMDAJMS4yCisrKyBraHRtbC94bWwvZG9tX3FuYW1lLmgJNSBKdWwg
MjAwNSAyMzoyMTowOSAtMDAwMApAQCAtNTQsNiArNTQsOSBAQCBwdWJsaWM6CiAKICAgICBib29s
IG1hdGNoZXMoY29uc3QgUXVhbGlmaWVkTmFtZSYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1faW1w
bCA9PSBvdGhlci5tX2ltcGwgfHwgKGxvY2FsTmFtZSgpID09IG90aGVyLmxvY2FsTmFtZSgpICYm
IG5hbWVzcGFjZVVSSSgpID09IG90aGVyLm5hbWVzcGFjZVVSSSgpKTsgfQogCisgICAgYm9vbCBo
YXNQcmVmaXgoKSBjb25zdCB7IHJldHVybiBtX2ltcGwtPm1fcHJlZml4ICE9IG51bGxBdG9tOyB9
CisgICAgdm9pZCBzZXRQcmVmaXgoY29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgpOworCiAgICAg
Y29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgoKSBjb25zdCB7IHJldHVybiBtX2ltcGwtPm1fcHJl
Zml4OyB9CiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUoKSBjb25zdCB7IHJldHVy
biBtX2ltcGwtPm1fbG9jYWxOYW1lOyB9CiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3Bh
Y2VVUkkoKSBjb25zdCB7IHJldHVybiBtX2ltcGwtPm1fbmFtZXNwYWNlOyB9CkluZGV4OiBraHRt
bC94bWwvZG9tX3RleHRpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2Vi
Q29yZS9raHRtbC94bWwvZG9tX3RleHRpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4y
MwpkaWZmIC11IC1wIC1yMS4yMyBraHRtbC94bWwvZG9tX3RleHRpbXBsLmNwcAotLS0ga2h0bWwv
eG1sL2RvbV90ZXh0aW1wbC5jcHAJMTkgT2N0IDIwMDQgMjM6MDQ6MjkgLTAwMDAJMS4yMworKysg
a2h0bWwveG1sL2RvbV90ZXh0aW1wbC5jcHAJNSBKdWwgMjAwNSAyMzoyMTowOSAtMDAwMApAQCAt
MzA0LDkgKzMwNCwxNCBAQCBDb21tZW50SW1wbDo6fkNvbW1lbnRJbXBsKCkKIHsKIH0KIAorY29u
c3QgQXRvbWljU3RyaW5nJiBDb21tZW50SW1wbDo6bG9jYWxOYW1lKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gY29tbWVudEF0b207Cit9CisKIERPTVN0cmluZyBDb21tZW50SW1wbDo6bm9kZU5hbWUo
KSBjb25zdAogewotICAgIHJldHVybiAiI2NvbW1lbnQiOworICAgIHJldHVybiBjb21tZW50QXRv
bS5zdHJpbmcoKTsKIH0KIAogdW5zaWduZWQgc2hvcnQgQ29tbWVudEltcGw6Om5vZGVUeXBlKCkg
Y29uc3QKQEAgLTMxOSwxMSArMzI0LDYgQEAgTm9kZUltcGwgKkNvbW1lbnRJbXBsOjpjbG9uZU5v
ZGUoYm9vbCAvKgogICAgIHJldHVybiBnZXREb2N1bWVudCgpLT5jcmVhdGVDb21tZW50KCBzdHIg
KTsKIH0KIAotTm9kZUltcGw6OklkIENvbW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIElEX0NPTU1FTlQ7Ci19Ci0KIC8vIERPTSBTZWN0aW9uIDEuMS4xCiBib29sIENvbW1lbnRJ
bXBsOjpjaGlsZFR5cGVBbGxvd2VkKCB1bnNpZ25lZCBzaG9ydCAvKnR5cGUqLyApCiB7CkBAIC0z
OTQsOSArMzk0LDE0IEBAIFRleHRJbXBsICpUZXh0SW1wbDo6c3BsaXRUZXh0KCBjb25zdCB1bnMK
ICAgICByZXR1cm4gbmV3VGV4dDsKIH0KIAorY29uc3QgQXRvbWljU3RyaW5nJiBUZXh0SW1wbDo6
bG9jYWxOYW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gdGV4dEF0b207Cit9CisKIERPTVN0cmlu
ZyBUZXh0SW1wbDo6bm9kZU5hbWUoKSBjb25zdAogewotICByZXR1cm4gIiN0ZXh0IjsKKyAgICBy
ZXR1cm4gdGV4dEF0b20uc3RyaW5nKCk7CiB9CiAKIHVuc2lnbmVkIHNob3J0IFRleHRJbXBsOjpu
b2RlVHlwZSgpIGNvbnN0CkBAIC00NjIsMTEgKzQ2Nyw2IEBAIHZvaWQgVGV4dEltcGw6OmF0dGFj
aCgpCiAgICAgQ2hhcmFjdGVyRGF0YUltcGw6OmF0dGFjaCgpOwogfQogCi1Ob2RlSW1wbDo6SWQg
VGV4dEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfVEVYVDsKLX0KLQogdm9pZCBU
ZXh0SW1wbDo6cmVjYWxjU3R5bGUoIFN0eWxlQ2hhbmdlIGNoYW5nZSApCiB7CiAvLyAgICAgIHFE
ZWJ1ZygidGV4dEltcGw6OnJlY2FsY1N0eWxlIik7CkluZGV4OiBraHRtbC94bWwvZG9tX3RleHRp
bXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwveG1sL2Rv
bV90ZXh0aW1wbC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE2CmRpZmYgLXUgLXAgLXIxLjE2
IGtodG1sL3htbC9kb21fdGV4dGltcGwuaAotLS0ga2h0bWwveG1sL2RvbV90ZXh0aW1wbC5oCTEw
IE1heSAyMDA1IDIxOjU5OjE1IC0wMDAwCTEuMTYKKysrIGtodG1sL3htbC9kb21fdGV4dGltcGwu
aAk1IEp1bCAyMDA1IDIzOjIxOjA5IC0wMDAwCkBAIC05NSwxMyArOTUsMTMgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgfkNvbW1lbnRJbXBsKCk7CiAKICAgICAvLyBET00gbWV0aG9kcyBvdmVycmlk
ZGVuIGZyb20gIHBhcmVudCBjbGFzc2VzCisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5h
bWUoKSBjb25zdDsKICAgICB2aXJ0dWFsIERPTVN0cmluZyBub2RlTmFtZSgpIGNvbnN0OwogICAg
IHZpcnR1YWwgdW5zaWduZWQgc2hvcnQgbm9kZVR5cGUoKSBjb25zdDsKICAgICB2aXJ0dWFsIE5v
ZGVJbXBsICpjbG9uZU5vZGUoYm9vbCBkZWVwKTsKIAogICAgIC8vIE90aGVyIG1ldGhvZHMgKG5v
dCBwYXJ0IG9mIERPTSkKLQotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IGJvb2wgaXNDb21tZW50Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFs
IGJvb2wgY2hpbGRUeXBlQWxsb3dlZCggdW5zaWduZWQgc2hvcnQgdHlwZSApOwogCiAgICAgdmly
dHVhbCBET01TdHJpbmcgdG9TdHJpbmcoKSBjb25zdDsKQEAgLTEyMSw2ICsxMjEsNyBAQCBwdWJs
aWM6CiAgICAgVGV4dEltcGwgKnNwbGl0VGV4dCAoIGNvbnN0IHVuc2lnbmVkIGxvbmcgb2Zmc2V0
LCBpbnQgJmV4Y2VwdGlvbmNvZGUgKTsKIAogICAgIC8vIERPTSBtZXRob2RzIG92ZXJyaWRkZW4g
ZnJvbSAgcGFyZW50IGNsYXNzZXMKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSgp
IGNvbnN0OwogICAgIHZpcnR1YWwgRE9NU3RyaW5nIG5vZGVOYW1lKCkgY29uc3Q7CiAgICAgdmly
dHVhbCB1bnNpZ25lZCBzaG9ydCBub2RlVHlwZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgTm9kZUlt
cGwgKmNsb25lTm9kZShib29sIGRlZXApOwpAQCAtMTI4LDcgKzEyOSw2IEBAIHB1YmxpYzoKICAg
ICAvLyBPdGhlciBtZXRob2RzIChub3QgcGFydCBvZiBET00pCiAKICAgICB2aXJ0dWFsIGJvb2wg
aXNUZXh0Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIElkIGlkKCkg
Y29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaCgpOwogICAgIHZpcnR1YWwgYm9vbCByZW5k
ZXJlcklzTmVlZGVkKGtodG1sOjpSZW5kZXJTdHlsZSAqKTsKICAgICB2aXJ0dWFsIGtodG1sOjpS
ZW5kZXJPYmplY3QgKmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hICosIGtodG1sOjpSZW5kZXJT
dHlsZSAqKTsKSW5kZXg6IGtodG1sL3htbC94bWxfdG9rZW5pemVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC94bWwveG1sX3Rva2VuaXplci5jcHAsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuMzEKZGlmZiAtdSAtcCAtcjEuMzEga2h0bWwveG1sL3htbF90
b2tlbml6ZXIuY3BwCi0tLSBraHRtbC94bWwveG1sX3Rva2VuaXplci5jcHAJNCBNYXkgMjAwNSAy
MToxMToyMyAtMDAwMAkxLjMxCisrKyBraHRtbC94bWwveG1sX3Rva2VuaXplci5jcHAJNSBKdWwg
MjAwNSAyMzoyMToxMCAtMDAwMApAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgInhtbC9kb21f
eG1saW1wbC5oIgogI2luY2x1ZGUgImh0bWwvaHRtbF9oZWFkaW1wbC5oIgogI2luY2x1ZGUgImh0
bWwvaHRtbF90YWJsZWltcGwuaCIKLSNpbmNsdWRlICJtaXNjL2h0bWx0YWdzLmgiCisjaW5jbHVk
ZSAiaHRtbG5hbWVzLmgiCiAjaW5jbHVkZSAibWlzYy9odG1sYXR0cnMuaCIKICNpbmNsdWRlICJt
aXNjL2xvYWRlci5oIgogCkBAIC00NCw2ICs0NCw3IEBAIHVzaW5nIERPTTo6RG9jdW1lbnRJbXBs
OwogdXNpbmcgRE9NOjpEb2N1bWVudFB0cjsKIHVzaW5nIERPTTo6RE9NU3RyaW5nOwogdXNpbmcg
RE9NOjpFbGVtZW50SW1wbDsKK3VzaW5nIERPTTo6SFRNTE5hbWVzOwogdXNpbmcgRE9NOjpIVE1M
U2NyaXB0RWxlbWVudEltcGw7CiB1c2luZyBET006OkhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1w
bDsKIHVzaW5nIERPTTo6Tm9kZTsKQEAgLTMyMiwxOCArMzIzLDE4IEBAIHZvaWQgWE1MVG9rZW5p
emVyOjpzdGFydEVsZW1lbnQoY29uc3QgeG0KICAgICAvLyBGSVhNRTogVGhpcyBoYWNrIGVuc3Vy
ZXMgaW1wbGljaXQgdGFibGUgYm9kaWVzIGdldCBjb25zdHJ1Y3RlZCBpbiBYSFRNTCBhbmQgWE1M
IGZpbGVzLgogICAgIC8vIFdlIHdhbnQgdG8gY29uc29saWRhdGUgdGhpcyB3aXRoIHRoZSBIVE1M
IHBhcnNlciBhbmQgSFRNTCBET00gY29kZSBhdCBzb21lIHBvaW50LgogICAgIC8vIEZvciBub3cs
IGl0J3MgdG9vIHJpc2t5IHRvIHJpcCB0aGF0IGNvZGUgdXAuCi0gICAgaWYgKG1fY3VycmVudE5v
ZGUtPmlkKCkgPT0gSURfVEFCTEUgJiYKLSAgICAgICAgbmV3RWxlbWVudC0+aWQoKSA9PSBJRF9U
UiAmJgorICAgIGlmIChtX2N1cnJlbnROb2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGFibGUo
KSkgJiYKKyAgICAgICAgbmV3RWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRyKCkpICYm
CiAgICAgICAgIG1fY3VycmVudE5vZGUtPmlzSFRNTEVsZW1lbnQoKSAmJiBuZXdFbGVtZW50LT5p
c0hUTUxFbGVtZW50KCkpIHsKICAgICAgICAgTm9kZUltcGwqIGltcGxpY2l0VEJvZHkgPQotICAg
ICAgICAgICBuZXcgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsKCBtX2RvYywgSURfVEJPRFks
IHRydWUgLyogaW1wbGljaXQgKi8gKTsKKyAgICAgICAgICAgbmV3IEhUTUxUYWJsZVNlY3Rpb25F
bGVtZW50SW1wbChIVE1MTmFtZXM6OnRib2R5KCksIG1fZG9jLCB0cnVlIC8qIGltcGxpY2l0ICov
KTsKICAgICAgICAgbV9jdXJyZW50Tm9kZS0+YWRkQ2hpbGQoaW1wbGljaXRUQm9keSk7CiAgICAg
ICAgIGlmIChtX3ZpZXcgJiYgIWltcGxpY2l0VEJvZHktPmF0dGFjaGVkKCkpCiAgICAgICAgICAg
ICBpbXBsaWNpdFRCb2R5LT5hdHRhY2goKTsKICAgICAgICAgbV9jdXJyZW50Tm9kZSA9IGltcGxp
Y2l0VEJvZHk7CiAgICAgfQogCi0gICAgaWYgKG5ld0VsZW1lbnQtPmlkKCkgPT0gSURfU0NSSVBU
KQorICAgIGlmIChuZXdFbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c2NyaXB0KCkpKQog
ICAgICAgICBzdGF0aWNfY2FzdDxIVE1MU2NyaXB0RWxlbWVudEltcGwgKj4obmV3RWxlbWVudCkt
PnNldENyZWF0ZWRCeVBhcnNlcih0cnVlKTsKIAogICAgIGlmIChtX2N1cnJlbnROb2RlLT5hZGRD
aGlsZChuZXdFbGVtZW50KSkgewpAQCAtNjUwLDcgKzY1MSw3IEBAIHZvaWQgWE1MVG9rZW5pemVy
OjphZGRTY3JpcHRzKE5vZGVJbXBsICoKICAgICAvLyBSZWN1cnNpdmVseSBnbyB0aHJvdWdoIHRo
ZSBlbnRpcmUgZG9jdW1lbnQgdHJlZSwgbG9va2luZyBmb3IgaHRtbCA8c2NyaXB0PiB0YWdzLiBG
b3IgZWFjaCBvZiB0aGVzZQogICAgIC8vIHRoYXQgaXMgZm91bmQsIGFkZCBpdCB0byB0aGUgbV9z
Y3JpcHRzIGxpc3QgZnJvbSB3aGljaCB0aGV5IHdpbGwgYmUgZXhlY3V0ZWQKIAotICAgIGlmIChu
LT5pZCgpID09IElEX1NDUklQVCkgeworICAgIGlmIChuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
c2NyaXB0KCkpKSB7CiAgICAgICAgIG1fc2NyaXB0cy5hcHBlbmQoc3RhdGljX2Nhc3Q8SFRNTFNj
cmlwdEVsZW1lbnRJbXBsKj4obikpOwogICAgIH0KIApJbmRleDoga3dxL0RPTS5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3EvRE9NLm1tLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjM2CmRpZmYgLXUgLXAgLXIxLjM2IGt3cS9ET00ubW0KLS0tIGt3cS9ET00ubW0J
MTkgTWF5IDIwMDUgMTg6MzI6MjcgLTAwMDAJMS4zNgorKysga3dxL0RPTS5tbQk1IEp1bCAyMDA1
IDIzOjIxOjExIC0wMDAwCkBAIC00NCw3ICs0NCw2IEBACiAjaW1wb3J0ICJkb21fdGV4dGltcGwu
aCIKICNpbXBvcnQgImRvbV94bWxpbXBsLmgiCiAjaW1wb3J0ICJodG1sX2VsZW1lbnRpbXBsLmgi
Ci0jaW1wb3J0ICJodG1sdGFncy5oIgogCiAjaW1wb3J0ICJraHRtbF9wYXJ0LmgiCiAKQEAgLTcy
LDYgKzcxLDcgQEAgdXNpbmcgRE9NOjpFbGVtZW50SW1wbDsKIHVzaW5nIERPTTo6RW50aXR5SW1w
bDsKIHVzaW5nIERPTTo6RmlsdGVyTm9kZTsKIHVzaW5nIERPTTo6SFRNTEVsZW1lbnRJbXBsOwor
dXNpbmcgRE9NOjpIVE1MTmFtZXM7CiB1c2luZyBET006Ok5hbWVkTm9kZU1hcEltcGw7CiB1c2lu
ZyBET006Ok5vZGU7CiB1c2luZyBET006Ok5vZGVGaWx0ZXI7CkBAIC0zMzgsNyArMzM4LDggQEAg
dXNpbmcga2h0bWw6OlNoYXJlZFB0cjsKICAgICBBU1NFUlQocHJlZml4KTsKIAogICAgIGludCBl
eGNlcHRpb25Db2RlID0gMDsKLSAgICBbc2VsZiBfbm9kZUltcGxdLT5zZXRQcmVmaXgocHJlZml4
LCBleGNlcHRpb25Db2RlKTsKKyAgICBET01TdHJpbmcgcHJlZml4U3RyKHByZWZpeCk7CisgICAg
W3NlbGYgX25vZGVJbXBsXS0+c2V0UHJlZml4KHByZWZpeFN0ci5pbXBsZW1lbnRhdGlvbigpLCBl
eGNlcHRpb25Db2RlKTsKICAgICByYWlzZU9uRE9NRXJyb3IoZXhjZXB0aW9uQ29kZSk7CiB9CiAK
QEAgLTM5OSwxNTQgKzQwMCwxMjMgQEAgdXNpbmcga2h0bWw6OlNoYXJlZFB0cjsKICAgICBzd2l0
Y2ggKGltcGwtPm5vZGVUeXBlKCkpIHsKICAgICAgICAgY2FzZSBOb2RlOjpFTEVNRU5UX05PREU6
CiAgICAgICAgICAgICBpZiAoaW1wbC0+aXNIVE1MRWxlbWVudCgpKSB7Ci0gICAgICAgICAgICAg
ICAgLy8gRklYTUU6IFRoZXJlIGFyZSBubyBpZGVudGlmaWVycyBmb3IgSFRNTEhlYWRpbmdFbGVt
ZW50LCBIVE1MTW9kRWxlbWVudCwgCi0gICAgICAgICAgICAgICAgLy8gSFRNTFRhYmxlQ2FwdGlv
bkVsZW1lbnQsIEhUTUxUYWJsZUNvbEVsZW1lbnQsIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50Lgot
ICAgICAgICAgICAgICAgIC8vIEZpbmQgb3RoZXIgd2F5cyB0byBpZGVudGlmeSB0aGVtLgotICAg
ICAgICAgICAgICAgIHN3aXRjaCAoaW1wbC0+aWRlbnRpZmllcigpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGNhc2UgSURfSFRNTDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFz
cyA9IFtET01IVE1MSHRtbEVsZW1lbnQgY2xhc3NdOwotICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfSEVBRDoKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MSGVhZEVsZW1lbnQgY2xhc3NdOwotICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURf
TElOSzoKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MTGlu
a0VsZW1lbnQgY2xhc3NdOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgICAgIGNhc2UgSURfVElUTEU6Ci0gICAgICAgICAgICAgICAgICAgICAgICB3cmFw
cGVyQ2xhc3MgPSBbRE9NSFRNTFRpdGxlRWxlbWVudCBjbGFzc107Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9NRVRBOgotICAgICAg
ICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxNZXRhRWxlbWVudCBjbGFz
c107Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAg
Y2FzZSBJRF9CQVNFOgotICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RP
TUhUTUxCYXNlRWxlbWVudCBjbGFzc107Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9JU0lOREVYOgotICAgICAgICAgICAgICAgICAg
ICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxJc0luZGV4RWxlbWVudCBjbGFzc107Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9T
VFlMRToKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MU3R5
bGVFbGVtZW50IGNsYXNzXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgICAgICBjYXNlIElEX0JPRFk6Ci0gICAgICAgICAgICAgICAgICAgICAgICB3cmFw
cGVyQ2xhc3MgPSBbRE9NSFRNTEJvZHlFbGVtZW50IGNsYXNzXTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0ZPUk06Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTEZvcm1FbGVtZW50IGNsYXNz
XTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBj
YXNlIElEX1NFTEVDVDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtE
T01IVE1MU2VsZWN0RWxlbWVudCBjbGFzc107Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9PUFRHUk9VUDoKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MT3B0R3JvdXBFbGVtZW50IGNsYXNzXTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNl
IElEX09QVElPTjoKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01I
VE1MT3B0aW9uRWxlbWVudCBjbGFzc107Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9JTlBVVDoKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MSW5wdXRFbGVtZW50IGNsYXNzXTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX1RFWFRB
UkVBOgotICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxUZXh0
QXJlYUVsZW1lbnQgY2xhc3NdOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgICAgIGNhc2UgSURfQlVUVE9OOgotICAgICAgICAgICAgICAgICAgICAgICAg
d3JhcHBlckNsYXNzID0gW0RPTUhUTUxCdXR0b25FbGVtZW50IGNsYXNzXTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0xBQkVMOgot
ICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxMYWJlbEVsZW1l
bnQgY2xhc3NdOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7ICAKLSAgICAgICAgICAg
ICAgICAgICAgY2FzZSBJRF9GSUVMRFNFVDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBw
ZXJDbGFzcyA9IFtET01IVE1MRmllbGRTZXRFbGVtZW50IGNsYXNzXTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOyAgICAgIAotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0xFR0VO
RDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MTGVnZW5k
RWxlbWVudCBjbGFzc107Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICAgICAgY2FzZSBJRF9VTDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJD
bGFzcyA9IFtET01IVE1MVUxpc3RFbGVtZW50IGNsYXNzXTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX09MOgotICAgICAgICAgICAg
ICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxPTGlzdEVsZW1lbnQgY2xhc3NdOwot
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2Ug
SURfREw6Ci0gICAgICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTERM
aXN0RWxlbWVudCBjbGFzc107Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICAgICAgY2FzZSBJRF9ESVI6Ci0gICAgICAgICAgICAgICAgICAgICAgICB3cmFw
cGVyQ2xhc3MgPSBbRE9NSFRNTERpcmVjdG9yeUVsZW1lbnQgY2xhc3NdOwotICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfTUVOVToKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MTWVudUVsZW1lbnQg
Y2xhc3NdOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ICAgIGNhc2UgSURfTEk6Ci0gICAgICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBb
RE9NSFRNTExJRWxlbWVudCBjbGFzc107Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9ESVY6Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTERpdkVsZW1lbnQgY2xhc3NdOwotICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfUDoKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MUGFyYWdyYXBoRWxlbWVu
dCBjbGFzc107Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICAgICAgY2FzZSBJRF9ROgotICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0g
W0RPTUhUTUxRdW90ZUVsZW1lbnQgY2xhc3NdOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfUFJFOgotICAgICAgICAgICAgICAgICAg
ICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxQcmVFbGVtZW50IGNsYXNzXTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0JSOgot
ICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxCUkVsZW1lbnQg
Y2xhc3NdOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ICAgIGNhc2UgSURfQkFTRUZPTlQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xh
c3MgPSBbRE9NSFRNTEZvbnRFbGVtZW50IGNsYXNzXTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0ZPTlQ6Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTEZvbnRFbGVtZW50IGNsYXNzXTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIElE
X0hSOgotICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxIUkVs
ZW1lbnQgY2xhc3NdOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgICAgIGNhc2UgSURfQToKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFz
cyA9IFtET01IVE1MQW5jaG9yRWxlbWVudCBjbGFzc107Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9JTUc6Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTEltYWdlRWxlbWVudCBjbGFzc107Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJ
RF9PQkpFQ1Q6Ci0gICAgICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRN
TE9iamVjdEVsZW1lbnQgY2xhc3NdOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgICAgIGNhc2UgSURfUEFSQU06Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTFBhcmFtRWxlbWVudCBjbGFzc107Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9BUFBMRVQ6
Ci0gICAgICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTEFwcGxldEVs
ZW1lbnQgY2xhc3NdOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgICAgIGNhc2UgSURfTUFQOgotICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNs
YXNzID0gW0RPTUhUTUxNYXBFbGVtZW50IGNsYXNzXTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0FSRUE6Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTEFyZWFFbGVtZW50IGNsYXNzXTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIElE
X1NDUklQVDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1M
U2NyaXB0RWxlbWVudCBjbGFzc107Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICAgICAgY2FzZSBJRF9UQUJMRToKLSAgICAgICAgICAgICAgICAgICAgICAg
IHdyYXBwZXJDbGFzcyA9IFtET01IVE1MVGFibGVFbGVtZW50IGNsYXNzXTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX1REOgotICAg
ICAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxUYWJsZUNlbGxFbGVt
ZW50IGNsYXNzXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgICAgICBjYXNlIElEX1RSOgotICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNz
ID0gW0RPTUhUTUxUYWJsZVJvd0VsZW1lbnQgY2xhc3NdOwotICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfRlJBTUVTRVQ6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTEZyYW1lU2V0RWxlbWVudCBj
bGFzc107Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAg
ICAgY2FzZSBJRF9GUkFNRToKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9
IFtET01IVE1MRnJhbWVFbGVtZW50IGNsYXNzXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0lGUkFNRToKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MSUZyYW1lRWxlbWVudCBjbGFzc107Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MRWxlbWVu
dCBjbGFzc107Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBS
ZWZsZWN0IG1hcnF1ZWUgb25jZSB0aGUgQVBJIGhhcyBiZWVuIGRldGVybWluZWQuCisgICAgICAg
ICAgICAgICAgLy8gRklYTUU6IFdlIGNvdWxkIG1ha2UgdGhlIEhUTUwgY2xhc3NlcyBoYW5kIGJh
Y2sgdGhlaXIgY2xhc3MgbmFtZXMgYW5kIHRoZW4gdXNlIHRoYXQgdG8gbWFrZQorICAgICAgICAg
ICAgICAgIC8vIHRoZSBhcHByb3ByaWF0ZSBPYmotQyBjbGFzcyBmcm9tIHRoZSBzdHJpbmcuCisg
ICAgICAgICAgICAgICAgSFRNTEVsZW1lbnRJbXBsKiBodG1sRWx0ID0gc3RhdGljX2Nhc3Q8SFRN
TEVsZW1lbnRJbXBsKj4oaW1wbCk7CisgICAgICAgICAgICAgICAgaWYgKGh0bWxFbHQtPmhhc0xv
Y2FsTmFtZShIVE1MTmFtZXM6Omh0bWwoKSkpCisgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJD
bGFzcyA9IFtET01IVE1MSHRtbEVsZW1lbnQgY2xhc3NdOworICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKGh0bWxFbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmhlYWQoKSkpCisgICAgICAgICAg
ICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MSGVhZEVsZW1lbnQgY2xhc3NdOworICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKGh0bWxFbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Omxp
bmsoKSkpCisgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MTGlua0Vs
ZW1lbnQgY2xhc3NdOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGh0bWxFbHQtPmhhc0xvY2Fs
TmFtZShIVE1MTmFtZXM6OnRpdGxlKCkpKQorICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xh
c3MgPSBbRE9NSFRNTFRpdGxlRWxlbWVudCBjbGFzc107CisgICAgICAgICAgICAgICAgZWxzZSBp
ZiAoaHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6bWV0YSgpKSkKKyAgICAgICAgICAg
ICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxNZXRhRWxlbWVudCBjbGFzc107CisgICAg
ICAgICAgICAgICAgZWxzZSBpZiAoaHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6YmFz
ZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxCYXNlRWxl
bWVudCBjbGFzc107CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaHRtbEVsdC0+aGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6aXNpbmRleCgpKSkKKyAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNs
YXNzID0gW0RPTUhUTUxJc0luZGV4RWxlbWVudCBjbGFzc107CisgICAgICAgICAgICAgICAgZWxz
ZSBpZiAoaHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6c3R5bGUoKSkpCisgICAgICAg
ICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MU3R5bGVFbGVtZW50IGNsYXNzXTsK
KyAgICAgICAgICAgICAgICBlbHNlIGlmIChodG1sRWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVz
Ojpib2R5KCkpKQorICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTEJv
ZHlFbGVtZW50IGNsYXNzXTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChodG1sRWx0LT5oYXNM
b2NhbE5hbWUoSFRNTE5hbWVzOjpmb3JtKCkpKQorICAgICAgICAgICAgICAgICAgICB3cmFwcGVy
Q2xhc3MgPSBbRE9NSFRNTEZvcm1FbGVtZW50IGNsYXNzXTsKKyAgICAgICAgICAgICAgICBlbHNl
IGlmIChodG1sRWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpzZWxlY3QoKSkpCisgICAgICAg
ICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MU2VsZWN0RWxlbWVudCBjbGFzc107
CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1l
czo6b3B0Z3JvdXAoKSkpCisgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01I
VE1MT3B0R3JvdXBFbGVtZW50IGNsYXNzXTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChodG1s
RWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvcHRpb24oKSkpCisgICAgICAgICAgICAgICAg
ICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MT3B0aW9uRWxlbWVudCBjbGFzc107CisgICAgICAg
ICAgICAgICAgZWxzZSBpZiAoaHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6aW5wdXQo
KSkpCisgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MSW5wdXRFbGVt
ZW50IGNsYXNzXTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChodG1sRWx0LT5oYXNMb2NhbE5h
bWUoSFRNTE5hbWVzOjp0ZXh0YXJlYSgpKSkKKyAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNs
YXNzID0gW0RPTUhUTUxUZXh0QXJlYUVsZW1lbnQgY2xhc3NdOworICAgICAgICAgICAgICAgIGVs
c2UgaWYgKGh0bWxFbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmJ1dHRvbigpKSkKKyAgICAg
ICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxCdXR0b25FbGVtZW50IGNsYXNz
XTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChodG1sRWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5h
bWVzOjpsYWJlbCgpKSkKKyAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhU
TUxMYWJlbEVsZW1lbnQgY2xhc3NdOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGh0bWxFbHQt
Pmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmZpZWxkc2V0KCkpKQorICAgICAgICAgICAgICAgICAg
ICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTEZpZWxkU2V0RWxlbWVudCBjbGFzc107CisgICAgICAg
ICAgICAgICAgZWxzZSBpZiAoaHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6bGVnZW5k
KCkpKQorICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTExlZ2VuZEVs
ZW1lbnQgY2xhc3NdOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGh0bWxFbHQtPmhhc0xvY2Fs
TmFtZShIVE1MTmFtZXM6OnVsKCkpKQorICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3Mg
PSBbRE9NSFRNTFVMaXN0RWxlbWVudCBjbGFzc107CisgICAgICAgICAgICAgICAgZWxzZSBpZiAo
aHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b2woKSkpICAgICAgICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxPTGlzdEVs
ZW1lbnQgY2xhc3NdOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGh0bWxFbHQtPmhhc0xvY2Fs
TmFtZShIVE1MTmFtZXM6OmRsKCkpKQorICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3Mg
PSBbRE9NSFRNTERMaXN0RWxlbWVudCBjbGFzc107CisgICAgICAgICAgICAgICAgZWxzZSBpZiAo
aHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6ZGlyKCkpKQorICAgICAgICAgICAgICAg
ICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTERpcmVjdG9yeUVsZW1lbnQgY2xhc3NdOworICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKGh0bWxFbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om1l
bnUoKSkpCisgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MTWVudUVs
ZW1lbnQgY2xhc3NdOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGh0bWxFbHQtPmhhc0xvY2Fs
TmFtZShIVE1MTmFtZXM6OmxpKCkpKQorICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3Mg
PSBbRE9NSFRNTExJRWxlbWVudCBjbGFzc107CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaHRt
bEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6ZGl2KCkpKQorICAgICAgICAgICAgICAgICAg
ICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTERpdkVsZW1lbnQgY2xhc3NdOworICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKGh0bWxFbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnAoKSkpCisgICAg
ICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MUGFyYWdyYXBoRWxlbWVudCBj
bGFzc107CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhU
TUxOYW1lczo6aDEoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICBodG1sRWx0LT5oYXNM
b2NhbE5hbWUoSFRNTE5hbWVzOjpoMigpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgIGh0
bWxFbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmgzKCkpIHx8CisgICAgICAgICAgICAgICAg
ICAgICAgICAgaHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6aDQoKSkgfHwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICBodG1sRWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpoNSgp
KSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWxFbHQtPmhhc0xvY2FsTmFtZShIVE1M
TmFtZXM6Omg2KCkpKQorICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRN
TEhlYWRpbmdFbGVtZW50IGNsYXNzXTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChodG1sRWx0
LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpxKCkpKQorICAgICAgICAgICAgICAgICAgICB3cmFw
cGVyQ2xhc3MgPSBbRE9NSFRNTFF1b3RlRWxlbWVudCBjbGFzc107CisgICAgICAgICAgICAgICAg
ZWxzZSBpZiAoaHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6cHJlKCkpKQorICAgICAg
ICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTFByZUVsZW1lbnQgY2xhc3NdOwor
ICAgICAgICAgICAgICAgIGVsc2UgaWYgKGh0bWxFbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6
OmJyKCkpKQorICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTEJSRWxl
bWVudCBjbGFzc107CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaHRtbEVsdC0+aGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6YmFzZWZvbnQoKSkpCisgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJD
bGFzcyA9IFtET01IVE1MQmFzZUZvbnRFbGVtZW50IGNsYXNzXTsKKyAgICAgICAgICAgICAgICBl
bHNlIGlmIChodG1sRWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpmb250KCkpKQorICAgICAg
ICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTEZvbnRFbGVtZW50IGNsYXNzXTsK
KyAgICAgICAgICAgICAgICBlbHNlIGlmIChodG1sRWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVz
OjpocigpKSkKKyAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxIUkVs
ZW1lbnQgY2xhc3NdOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGh0bWxFbHQtPmhhc0xvY2Fs
TmFtZShIVE1MTmFtZXM6OmEoKSkpCisgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9
IFtET01IVE1MQW5jaG9yRWxlbWVudCBjbGFzc107CisgICAgICAgICAgICAgICAgZWxzZSBpZiAo
aHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6aW1nKCkpIHx8CisgICAgICAgICAgICAg
ICAgICAgICAgICAgaHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6Y2FudmFzKCkpKQor
ICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTEltYWdlRWxlbWVudCBj
bGFzc107CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhU
TUxOYW1lczo6b2JqZWN0KCkpKQorICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBb
RE9NSFRNTE9iamVjdEVsZW1lbnQgY2xhc3NdOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGh0
bWxFbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnBhcmFtKCkpKQorICAgICAgICAgICAgICAg
ICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTFBhcmFtRWxlbWVudCBjbGFzc107CisgICAgICAg
ICAgICAgICAgZWxzZSBpZiAoaHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6YXBwbGV0
KCkpKQorICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTEFwcGxldEVs
ZW1lbnQgY2xhc3NdOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGh0bWxFbHQtPmhhc0xvY2Fs
TmFtZShIVE1MTmFtZXM6Om1hcCgpKSkKKyAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNz
ID0gW0RPTUhUTUxNYXBFbGVtZW50IGNsYXNzXTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmICho
dG1sRWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjphcmVhKCkpKQorICAgICAgICAgICAgICAg
ICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTEFyZWFFbGVtZW50IGNsYXNzXTsKKyAgICAgICAg
ICAgICAgICBlbHNlIGlmIChodG1sRWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpzY3JpcHQo
KSkpCisgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MU2NyaXB0RWxl
bWVudCBjbGFzc107CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaHRtbEVsdC0+aGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6dGFibGUoKSkpCisgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFz
cyA9IFtET01IVE1MVGFibGVFbGVtZW50IGNsYXNzXTsKKyAgICAgICAgICAgICAgICBlbHNlIGlm
IChodG1sRWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0aGVhZCgpKSB8fAorICAgICAgICAg
ICAgICAgICAgICAgICAgIGh0bWxFbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnRib2R5KCkp
IHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxO
YW1lczo6dGZvb3QoKSkpCisgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01I
VE1MVGFibGVTZWN0aW9uRWxlbWVudCBjbGFzc107CisgICAgICAgICAgICAgICAgZWxzZSBpZiAo
aHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dGQoKSkpCisgICAgICAgICAgICAgICAg
ICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MVGFibGVDZWxsRWxlbWVudCBjbGFzc107CisgICAg
ICAgICAgICAgICAgZWxzZSBpZiAoaHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dHIo
KSkpCisgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MVGFibGVSb3dF
bGVtZW50IGNsYXNzXTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChodG1sRWx0LT5oYXNMb2Nh
bE5hbWUoSFRNTE5hbWVzOjpjb2woKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICBodG1s
RWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpjb2xncm91cCgpKSkKKyAgICAgICAgICAgICAg
ICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxUYWJsZUNvbEVsZW1lbnQgY2xhc3NdOworICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKGh0bWxFbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmNh
cHRpb24oKSkpCisgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MVGFi
bGVDYXB0aW9uRWxlbWVudCBjbGFzc107CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaHRtbEVs
dC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6ZnJhbWVzZXQoKSkpCisgICAgICAgICAgICAgICAg
ICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MRnJhbWVTZXRFbGVtZW50IGNsYXNzXTsKKyAgICAg
ICAgICAgICAgICBlbHNlIGlmIChodG1sRWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpmcmFt
ZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxGcmFtZUVs
ZW1lbnQgY2xhc3NdOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGh0bWxFbHQtPmhhc0xvY2Fs
TmFtZShIVE1MTmFtZXM6OmlmcmFtZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNs
YXNzID0gW0RPTUhUTUxJRnJhbWVFbGVtZW50IGNsYXNzXTsKKyAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MRWxlbWVudCBjbGFz
c107CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9
IFtET01FbGVtZW50IGNsYXNzXTsKICAgICAgICAgICAgIH0KQEAgLTEyNjgsNyArMTIzOCw3IEBA
IHVzaW5nIGtodG1sOjpTaGFyZWRQdHI7CiAKIC0gKE5TU3RyaW5nICopdGFnTmFtZQogewotICAg
IHJldHVybiBbc2VsZiBfZWxlbWVudEltcGxdLT50YWdOYW1lKCk7CisgICAgcmV0dXJuIFtzZWxm
IF9lbGVtZW50SW1wbF0tPm5vZGVOYW1lKCk7CiB9CiAKIC0gKERPTU5hbWVkTm9kZU1hcCAqKWF0
dHJpYnV0ZXMKSW5kZXg6IGt3cS9ET01IVE1MLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9XZWJDb3JlL2t3cS9ET01IVE1MLm1tLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE4CmRp
ZmYgLXUgLXAgLXIxLjE4IGt3cS9ET01IVE1MLm1tCi0tLSBrd3EvRE9NSFRNTC5tbQkxMyBNYXkg
MjAwNSAxNjo0ODo1MSAtMDAwMAkxLjE4CisrKyBrd3EvRE9NSFRNTC5tbQk1IEp1bCAyMDA1IDIz
OjIxOjEzIC0wMDAwCkBAIC03NCw3ICs3NCw2IEBAIHVzaW5nIERPTTo6SFRNTEZvcm1Db2xsZWN0
aW9uSW1wbDsKIHVzaW5nIERPTTo6SFRNTEZvcm1FbGVtZW50SW1wbDsKIHVzaW5nIERPTTo6SFRN
TEZyYW1lRWxlbWVudEltcGw7CiB1c2luZyBET006OkhUTUxGcmFtZVNldEVsZW1lbnRJbXBsOwot
dXNpbmcgRE9NOjpIVE1MR2VuZXJpY0VsZW1lbnRJbXBsOwogdXNpbmcgRE9NOjpIVE1MR2VuZXJp
Y0Zvcm1FbGVtZW50SW1wbDsKIHVzaW5nIERPTTo6SFRNTEhlYWRFbGVtZW50SW1wbDsKIHVzaW5n
IERPTTo6SFRNTEhlYWRpbmdFbGVtZW50SW1wbDsKQEAgLTE5MDUsOSArMTkwNCw5IEBAIHVzaW5n
IERPTTo6Tm9kZUltcGw7CiAKIEBpbXBsZW1lbnRhdGlvbiBET01IVE1MUXVvdGVFbGVtZW50CiAK
LS0gKEhUTUxHZW5lcmljRWxlbWVudEltcGwgKilfcXVvdGVFbGVtZW50SW1wbAorLSAoSFRNTEVs
ZW1lbnRJbXBsICopX3F1b3RlRWxlbWVudEltcGwKIHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
SFRNTEdlbmVyaWNFbGVtZW50SW1wbCAqPihET01fY2FzdDxOb2RlSW1wbCAqPihfaW50ZXJuYWwp
KTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KERPTV9jYXN0PE5v
ZGVJbXBsICo+KF9pbnRlcm5hbCkpOwogfQogCiAtIChOU1N0cmluZyAqKWNpdGUKSW5kZXg6IGt3
cS9LV1FBY2NPYmplY3QubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUv
a3dxL0tXUUFjY09iamVjdC5tbSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS42OApkaWZmIC11IC1w
IC1yMS42OCBrd3EvS1dRQWNjT2JqZWN0Lm1tCi0tLSBrd3EvS1dRQWNjT2JqZWN0Lm1tCTUgSnVu
IDIwMDUgMDc6MDY6NTIgLTAwMDAJMS42OAorKysga3dxL0tXUUFjY09iamVjdC5tbQk1IEp1bCAy
MDA1IDIzOjIxOjE1IC0wMDAwCkBAIC00OCw3ICs0OCw2IEBACiAjaW1wb3J0ICJkb20yX2V2ZW50
c2ltcGwuaCIKICNpbXBvcnQgImRvbTJfcmFuZ2UuaCIKICNpbXBvcnQgImh0bWxhdHRycy5oIgot
I2ltcG9ydCAiaHRtbHRhZ3MuaCIKICNpbXBvcnQgImtodG1sdmlldy5oIgogI2ltcG9ydCAia2h0
bWxfcGFydC5oIgogI2ltcG9ydCAicmVuZGVyX2NhbnZhcy5oIgpAQCAtNzcsNiArNzYsNyBAQCB1
c2luZyBET006OkhUTUxDb2xsZWN0aW9uSW1wbDsKIHVzaW5nIERPTTo6SFRNTEVsZW1lbnRJbXBs
OwogdXNpbmcgRE9NOjpIVE1MSW5wdXRFbGVtZW50SW1wbDsKIHVzaW5nIERPTTo6SFRNTE1hcEVs
ZW1lbnRJbXBsOwordXNpbmcgRE9NOjpIVE1MTmFtZXM7CiB1c2luZyBET006Ok5vZGU7CiB1c2lu
ZyBET006Ok5vZGVJbXBsOwogdXNpbmcgRE9NOjpQb3NpdGlvbjsKQEAgLTM2Niw3ICszNjYsNyBA
QCB1c2luZyBraHRtbDo6VmlzaWJsZVBvc2l0aW9uOwogICAgIH0KICAgICBpZiAobV9yZW5kZXJl
ci0+aXNMaXN0TWFya2VyKCkpCiAgICAgICAgIHJldHVybiBAIkFYTGlzdE1hcmtlciI7Ci0gICAg
aWYgKG1fcmVuZGVyZXItPmVsZW1lbnQoKSAmJiBtX3JlbmRlcmVyLT5lbGVtZW50KCktPmlkZW50
aWZpZXIoKSA9PSBJRF9CVVRUT04pCisgICAgaWYgKG1fcmVuZGVyZXItPmVsZW1lbnQoKSAmJiBt
X3JlbmRlcmVyLT5lbGVtZW50KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpidXR0b24oKSkpCiAg
ICAgICAgIHJldHVybiBOU0FjY2Vzc2liaWxpdHlCdXR0b25Sb2xlOwogICAgIGlmIChtX3JlbmRl
cmVyLT5pc1RleHQoKSkKICAgICAgICAgcmV0dXJuIE5TQWNjZXNzaWJpbGl0eVN0YXRpY1RleHRS
b2xlOwpAQCAtNTMyLDcgKzUzMiw3IEBAIHVzaW5nIGtodG1sOjpWaXNpYmxlUG9zaXRpb247CiAg
ICAgaWYgKCFtX3JlbmRlcmVyIHx8IG1fYXJlYUVsZW1lbnQgfHwgIW1fcmVuZGVyZXItPmVsZW1l
bnQoKSkKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAKLSAgICBpZiAobV9yZW5kZXJlci0+ZWxl
bWVudCgpLT5pc0hUTUxFbGVtZW50KCkgJiYgbV9yZW5kZXJlci0+ZWxlbWVudCgpLT5pZGVudGlm
aWVyKCkgPT0gSURfQlVUVE9OKQorICAgIGlmIChtX3JlbmRlcmVyLT5lbGVtZW50KCktPmlzSFRN
TEVsZW1lbnQoKSAmJiBtX3JlbmRlcmVyLT5lbGVtZW50KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjpidXR0b24oKSkpCiAgICAgICAgIHJldHVybiBbc2VsZiB0ZXh0VW5kZXJFbGVtZW50XTsKICAg
ICBpZiAobV9yZW5kZXJlci0+ZWxlbWVudCgpLT5pc0xpbmsoKSkKICAgICAgICAgcmV0dXJuIFtz
ZWxmIHRleHRVbmRlckVsZW1lbnRdOwpAQCAtNjIyLDcgKzYyMiw3IEBAIHN0YXRpYyBRUmVjdCBi
b3VuZGluZ0JveFJlY3QoUmVuZGVyT2JqZWMKICAgICByZXR1cm4gKCFtX3JlbmRlcmVyLT5pc0xp
c3RNYXJrZXIoKSAmJiAhbV9yZW5kZXJlci0+aXNDYW52YXMoKSAmJiAKICAgICAgICAgICAgICFt
X3JlbmRlcmVyLT5pc0ltYWdlKCkgJiYKICAgICAgICAgICAgICEobV9yZW5kZXJlci0+ZWxlbWVu
dCgpICYmIG1fcmVuZGVyZXItPmVsZW1lbnQoKS0+aXNIVE1MRWxlbWVudCgpICYmCi0gICAgICAg
ICAgICAgIG1fcmVuZGVyZXItPmVsZW1lbnQoKS0+aWRlbnRpZmllcigpID09IElEX0JVVFRPTikp
OworICAgICAgICAgICAgICBtX3JlbmRlcmVyLT5lbGVtZW50KCktPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjpidXR0b24oKSkpKTsKIH0KIAogLSAoTlNBcnJheSAqKWFjY2Vzc2liaWxpdHlBdHRyaWJ1
dGVOYW1lcwpJbmRleDoga3dxL0tXUUtIVE1MUGFydC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
L2N2cy9yb290L1dlYkNvcmUva3dxL0tXUUtIVE1MUGFydC5jcHAsdgpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuOQpkaWZmIC11IC1wIC1yMS45IGt3cS9LV1FLSFRNTFBhcnQuY3BwCi0tLSBrd3EvS1dR
S0hUTUxQYXJ0LmNwcAkyNyBNYXIgMjAwMyAwMTo1Nzo0NyAtMDAwMAkxLjkKKysrIGt3cS9LV1FL
SFRNTFBhcnQuY3BwCTUgSnVsIDIwMDUgMjM6MjE6MTUgLTAwMDAKQEAgLTMyLDEzICszMiwxNSBA
QAogCiB1c2luZyBET006OkRvY3VtZW50SW1wbDsKIHVzaW5nIERPTTo6SFRNTERvY3VtZW50SW1w
bDsKK3VzaW5nIERPTTo6SFRNTE5hbWVzOwogdXNpbmcgRE9NOjpOb2RlSW1wbDsKIAorLy8gRklY
TUU6IFdoYXQgb24gZWFydGggaXMgdGhpcyBzaW5nbGUgdGlueSBmaWxlIHdpdGggb25seSB0aGlz
IG1ldGhvZCBkb2luZyBoZXJlPwogYm9vbCBLV1FLSFRNTFBhcnQ6OmlzRnJhbWVTZXQoKSBjb25z
dAogewogICAgIERvY3VtZW50SW1wbCAqZG9jdW1lbnQgPSBkLT5tX2RvYzsKICAgICBpZiAoIWRv
Y3VtZW50IHx8ICFkb2N1bWVudC0+aXNIVE1MRG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIE5vZGVJbXBsICpib2R5ID0gc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50SW1wbCAq
Pihkb2N1bWVudCktPmJvZHkoKTsKLSAgICByZXR1cm4gYm9keSAmJiBib2R5LT5yZW5kZXJlcigp
ICYmIGJvZHktPmlkKCkgPT0gSURfRlJBTUVTRVQ7CisgICAgcmV0dXJuIGJvZHkgJiYgYm9keS0+
cmVuZGVyZXIoKSAmJiBib2R5LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZnJhbWVzZXQoKSk7CiB9
CkluZGV4OiBrd3EvS1dRS0hUTUxQYXJ0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9XZWJDb3JlL2t3cS9LV1FLSFRNTFBhcnQubW0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNjQz
CmRpZmYgLXUgLXAgLXIxLjY0MyBrd3EvS1dRS0hUTUxQYXJ0Lm1tCi0tLSBrd3EvS1dRS0hUTUxQ
YXJ0Lm1tCTI2IE1heSAyMDA1IDIwOjMwOjEyIC0wMDAwCTEuNjQzCisrKyBrd3EvS1dRS0hUTUxQ
YXJ0Lm1tCTUgSnVsIDIwMDUgMjM6MjE6MTggLTAwMDAKQEAgLTI4LDcgKzI4LDYgQEAKICNpbXBv
cnQgIkRPTUludGVybmFsLmgiCiAKICNpbXBvcnQgIktXUUNsaXBib2FyZC5oIgotI2ltcG9ydCAi
S1dRRE9NTm9kZS5oIgogI2ltcG9ydCAiS1dRRHVtbXlWaWV3LmgiCiAjaW1wb3J0ICJLV1FFZGl0
Q29tbWFuZC5oIgogI2ltcG9ydCAiS1dRRXhjZXB0aW9ucy5oIgpAQCAtMTAwLDYgKzk5LDcgQEAg
dXNpbmcgRE9NOjpIVE1MRWxlbWVudEltcGw7CiB1c2luZyBET006OkhUTUxGb3JtRWxlbWVudElt
cGw7CiB1c2luZyBET006OkhUTUxGcmFtZUVsZW1lbnRJbXBsOwogdXNpbmcgRE9NOjpIVE1MR2Vu
ZXJpY0Zvcm1FbGVtZW50SW1wbDsKK3VzaW5nIERPTTo6SFRNTE5hbWVzOwogdXNpbmcgRE9NOjpI
VE1MVGFibGVDZWxsRWxlbWVudEltcGw7CiB1c2luZyBET006Ok5vZGU7CiB1c2luZyBET006Ok5v
ZGVJbXBsOwpAQCAtMzYxLDEzICszNjEsMTIgQEAgc3RhdGljIEhUTUxGb3JtRWxlbWVudEltcGwg
KnNjYW5Gb3JGb3JtKAogewogICAgIE5vZGVJbXBsICpuOwogICAgIGZvciAobiA9IHN0YXJ0OyBu
OyBuID0gbi0+dHJhdmVyc2VOZXh0Tm9kZSgpKSB7Ci0gICAgICAgIE5vZGVJbXBsOjpJZCBub2Rl
SUQgPSBpZEZyb21Ob2RlKG4pOwotICAgICAgICBpZiAobm9kZUlEID09IElEX0ZPUk0pIHsKKyAg
ICAgICAgaWYgKG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpmb3JtKCkpKSB7CiAgICAgICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50SW1wbCAqPihuKTsKICAgICAgICAg
fSBlbHNlIGlmIChuLT5pc0hUTUxFbGVtZW50KCkKICAgICAgICAgICAgICAgICAgICAmJiBzdGF0
aWNfY2FzdDxIVE1MRWxlbWVudEltcGwgKj4obiktPmlzR2VuZXJpY0Zvcm1FbGVtZW50KCkpIHsK
ICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1w
bCAqPihuKS0+Zm9ybSgpOwotICAgICAgICB9IGVsc2UgaWYgKG5vZGVJRCA9PSBJRF9GUkFNRSB8
fCBub2RlSUQgPT0gSURfSUZSQU1FKSB7CisgICAgICAgIH0gZWxzZSBpZiAobi0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OmZyYW1lKCkpIHx8IG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppZnJhbWUo
KSkpIHsKICAgICAgICAgICAgIE5vZGVJbXBsICpjaGlsZERvYyA9IHN0YXRpY19jYXN0PEhUTUxG
cmFtZUVsZW1lbnRJbXBsICo+KG4pLT5jb250ZW50RG9jdW1lbnQoKTsKICAgICAgICAgICAgIEhU
TUxGb3JtRWxlbWVudEltcGwgKmZyYW1lUmVzdWx0ID0gc2NhbkZvckZvcm0oY2hpbGREb2MpOwog
ICAgICAgICAgICAgaWYgKGZyYW1lUmVzdWx0KSB7CkBAIC0zOTAsNyArMzg5LDcgQEAgSFRNTEZv
cm1FbGVtZW50SW1wbCAqS1dRS0hUTUxQYXJ0OjpjdXJyZQogICAgIC8vIHRyeSB3YWxraW5nIHVw
IHRoZSBub2RlIHRyZWUgdG8gZmluZCBhIGZvcm0gZWxlbWVudAogICAgIE5vZGVJbXBsICpuOwog
ICAgIGZvciAobiA9IHN0YXJ0OyBuOyBuID0gbi0+cGFyZW50Tm9kZSgpKSB7Ci0gICAgICAgIGlm
IChpZEZyb21Ob2RlKG4pID09IElEX0ZPUk0pIHsKKyAgICAgICAgaWYgKG4tPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjpmb3JtKCkpKSB7CiAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRN
TEZvcm1FbGVtZW50SW1wbCAqPihuKTsKICAgICAgICAgfSBlbHNlIGlmIChuLT5pc0hUTUxFbGVt
ZW50KCkKICAgICAgICAgICAgICAgICAgICAmJiBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwg
Kj4obiktPmlzR2VuZXJpY0Zvcm1FbGVtZW50KCkpIHsKQEAgLTQ4OSw4ICs0ODgsNyBAQCBOU1N0
cmluZyAqS1dRS0hUTUxQYXJ0OjpzZWFyY2hGb3JMYWJlbHNBCiAgICAgICAgIGlmIChhYm92ZUNl
bGwpIHsKICAgICAgICAgICAgIC8vIHNlYXJjaCB3aXRoaW4gdGhlIGFib3ZlIGNlbGwgd2UgZm91
bmQgZm9yIGEgbWF0Y2gKICAgICAgICAgICAgIGZvciAoTm9kZUltcGwgKm4gPSBhYm92ZUNlbGwt
PmZpcnN0Q2hpbGQoKTsgbjsgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUoYWJvdmVDZWxsKSkgewot
ICAgICAgICAgICAgICAgIGlmIChpZEZyb21Ob2RlKG4pID09IElEX1RFWFQKLSAgICAgICAgICAg
ICAgICAgICAgJiYgbi0+cmVuZGVyZXIoKSAmJiBuLT5yZW5kZXJlcigpLT5zdHlsZSgpLT52aXNp
YmlsaXR5KCkgPT0gVklTSUJMRSkKKyAgICAgICAgICAgICAgICBpZiAobi0+aXNUZXh0Tm9kZSgp
ICYmIG4tPnJlbmRlcmVyKCkgJiYgbi0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+dmlzaWJpbGl0eSgp
ID09IFZJU0lCTEUpCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAvLyBG
b3IgZWFjaCB0ZXh0IGNodW5rLCBydW4gdGhlIHJlZ2V4cAogICAgICAgICAgICAgICAgICAgICBR
U3RyaW5nIG5vZGVTdHJpbmcgPSBuLT5ub2RlVmFsdWUoKS5zdHJpbmcoKTsKQEAgLTUyNSwyMyAr
NTIzLDIxIEBAIE5TU3RyaW5nICpLV1FLSFRNTFBhcnQ6OnNlYXJjaEZvckxhYmVsc0IKICAgICAg
ICAgIG4gJiYgbGVuZ3RoU2VhcmNoZWQgPCBjaGFyc1NlYXJjaGVkVGhyZXNob2xkOwogICAgICAg
ICAgbiA9IG4tPnRyYXZlcnNlUHJldmlvdXNOb2RlKCkpCiAgICAgewotICAgICAgICBOb2RlSW1w
bDo6SWQgbm9kZUlEID0gaWRGcm9tTm9kZShuKTsKLSAgICAgICAgaWYgKG5vZGVJRCA9PSBJRF9G
T1JNCisgICAgICAgIGlmIChuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Zm9ybSgpKQogICAgICAg
ICAgICAgfHwgKG4tPmlzSFRNTEVsZW1lbnQoKQogICAgICAgICAgICAgICAgICYmIHN0YXRpY19j
YXN0PEhUTUxFbGVtZW50SW1wbCAqPihuKS0+aXNHZW5lcmljRm9ybUVsZW1lbnQoKSkpCiAgICAg
ICAgIHsKICAgICAgICAgICAgIC8vIFdlIGhpdCBhbm90aGVyIGZvcm0gZWxlbWVudCBvciB0aGUg
c3RhcnQgb2YgdGhlIGZvcm0gLSBiYWlsIG91dAogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0gZWxzZSBpZiAobm9kZUlEID09IElEX1REICYmICFzdGFydGluZ1RhYmxlQ2VsbCkgeworICAg
ICAgICB9IGVsc2UgaWYgKG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0ZCgpKSAmJiAhc3RhcnRp
bmdUYWJsZUNlbGwpIHsKICAgICAgICAgICAgIHN0YXJ0aW5nVGFibGVDZWxsID0gc3RhdGljX2Nh
c3Q8SFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsICo+KG4pOwotICAgICAgICB9IGVsc2UgaWYgKG5v
ZGVJRCA9PSBJRF9UUiAmJiBzdGFydGluZ1RhYmxlQ2VsbCkgeworICAgICAgICB9IGVsc2UgaWYg
KG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0cigpKSAmJiBzdGFydGluZ1RhYmxlQ2VsbCkgewog
ICAgICAgICAgICAgTlNTdHJpbmcgKnJlc3VsdCA9IHNlYXJjaEZvckxhYmVsc0Fib3ZlQ2VsbChy
ZWdFeHAsIHN0YXJ0aW5nVGFibGVDZWxsKTsKICAgICAgICAgICAgIGlmIChyZXN1bHQpIHsKICAg
ICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
c2VhcmNoZWRDZWxsQWJvdmUgPSB0cnVlOwotICAgICAgICB9IGVsc2UgaWYgKG5vZGVJRCA9PSBJ
RF9URVhUCi0gICAgICAgICAgICAgICAgICAgJiYgbi0+cmVuZGVyZXIoKSAmJiBuLT5yZW5kZXJl
cigpLT5zdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0gVklTSUJMRSkKKyAgICAgICAgfSBlbHNlIGlm
IChuLT5pc1RleHROb2RlKCkgJiYgbi0+cmVuZGVyZXIoKSAmJiBuLT5yZW5kZXJlcigpLT5zdHls
ZSgpLT52aXNpYmlsaXR5KCkgPT0gVklTSUJMRSkKICAgICAgICAgewogICAgICAgICAgICAgLy8g
Rm9yIGVhY2ggdGV4dCBjaHVuaywgcnVuIHRoZSByZWdleHAKICAgICAgICAgICAgIFFTdHJpbmcg
bm9kZVN0cmluZyA9IG4tPm5vZGVWYWx1ZSgpLnN0cmluZygpOwpAQCAtMjg0OCwxNCArMjg0NCwx
MCBAQCBOU0ZpbGVXcmFwcGVyICpLV1FLSFRNTFBhcnQ6OmZpbGVXcmFwcGVyCiAKIHN0YXRpYyBF
bGVtZW50SW1wbCAqbGlzdFBhcmVudChFbGVtZW50SW1wbCAqaXRlbSkKIHsKLSAgICAvLyBJY2sh
ICBBdm9pZCB1c2Ugb2YgaXRlbS0+aWQoKSB3aGljaCBjb25mdXNlcyBPYmpDKysuCi0gICAgdW5z
aWduZWQgc2hvcnQgX2lkID0gaXRlbS0+aWRlbnRpZmllcigpOwotICAgIAotICAgIHdoaWxlIChf
aWQgIT0gSURfVUwgJiYgX2lkICE9IElEX09MKSB7CisgICAgd2hpbGUgKCFpdGVtLT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6dWwoKSkgJiYgIWl0ZW0tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvbCgp
KSkgewogICAgICAgICBpdGVtID0gc3RhdGljX2Nhc3Q8RWxlbWVudEltcGwgKj4oaXRlbS0+cGFy
ZW50Tm9kZSgpKTsKICAgICAgICAgaWYgKCFpdGVtKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIF9pZCA9IGl0ZW0tPmlkZW50aWZpZXIoKTsKICAgICB9CiAgICAgcmV0dXJuIGl0ZW07CiB9
CkBAIC0yODY4LDcgKzI4NjAsNyBAQCBzdGF0aWMgTm9kZUltcGwqIGlzVGV4dEZpcnN0SW5MaXN0
SXRlbShOCiAgICAgd2hpbGUgKHBhcikgewogICAgICAgICBpZiAocGFyLT5maXJzdENoaWxkKCkg
IT0gZSkKICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBpZiAocGFyLT5pZGVudGlmaWVy
KCkgPT0gSURfTEkpCisgICAgICAgIGlmIChwYXItPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpsaSgp
KSkKICAgICAgICAgICAgIHJldHVybiBwYXI7CiAgICAgICAgIGUgPSBwYXI7CiAgICAgICAgIHBh
ciA9IHBhci0+cGFyZW50Tm9kZSgpOwpAQCAtMzAyMiwxMDkgKzMwMTQsOTUgQEAgTlNBdHRyaWJ1
dGVkU3RyaW5nICpLV1FLSFRNTFBhcnQ6OmF0dHJpYgogICAgICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgICAgICAvLyBUaGlzIGlzIG91ciBzaW1wbGUgSFRNTCAtPiBBU0NJSSB0cmFuc2Zv
cm1hdGlvbjoKICAgICAgICAgICAgICAgICBRU3RyaW5nIHRleHQ7Ci0gICAgICAgICAgICAgICAg
Tm9kZUltcGw6OklkIF9pZCA9IG4tPmlkZW50aWZpZXIoKTsKLSAgICAgICAgICAgICAgICBzd2l0
Y2goX2lkKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfQToKLSAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIE5vdGUgdGhlIHN0YXJ0IG9mIHRoZSA8YT4gZWxlbWVudC4gIFdlIHdpbGwg
YWRkIHRoZSBOU0xpbmtBdHRyaWJ1dGVOYW1lCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBh
dHRyaWJ1dGUgdG8gdGhlIGF0dHJpYnV0ZWQgc3RyaW5nIHdoZW4gbmF2aWdhdGluZyB0byB0aGUg
bmV4dCBzaWJsaW5nIAotICAgICAgICAgICAgICAgICAgICAgICAgLy8gb2YgdGhpcyBub2RlLgot
ICAgICAgICAgICAgICAgICAgICAgICAgbGlua1N0YXJ0TG9jYXRpb24gPSBbcmVzdWx0IGxlbmd0
aF07Ci0gICAgICAgICAgICAgICAgICAgICAgICBsaW5rU3RhcnROb2RlID0gc3RhdGljX2Nhc3Q8
RWxlbWVudEltcGwqPihuKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAg
ICAgICAgICAgICAgICAgIGNhc2UgSURfQlI6Ci0gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0
ICs9ICJcbiI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBoYXNOZXdMaW5lID0gdHJ1ZTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgIAotICAgICAgICAgICAgICAgICAgICBj
YXNlIElEX0xJOgotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFFTdHJpbmcgbGlzdFRleHQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
RWxlbWVudEltcGwgKml0ZW1QYXJlbnQgPSBsaXN0UGFyZW50KHN0YXRpY19jYXN0PEVsZW1lbnRJ
bXBsICo+KG4pKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIWhhc05ld0xpbmUpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGxpc3RUZXh0ICs9ICdcbic7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFz
TmV3TGluZSA9IHRydWU7Ci0gICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdEl0
ZW1zLmFwcGVuZChzdGF0aWNfY2FzdDxFbGVtZW50SW1wbCo+KG4pKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBMaXN0SXRlbUluZm8gaW5mbzsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbmZvLnN0YXJ0ID0gW3Jlc3VsdCBsZW5ndGhdOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGluZm8uZW5kID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0SXRl
bUxvY2F0aW9ucy5hcHBlbmQgKGluZm8pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RUZXh0ICs9ICdcdCc7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGl0ZW1QYXJlbnQgJiYgcmVuZGVyZXItPmlzTGlzdEl0ZW0o
KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJMaXN0SXRlbSAqbGlz
dFJlbmRlcmVyID0gc3RhdGljX2Nhc3Q8UmVuZGVyTGlzdEl0ZW0qPihyZW5kZXJlcik7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4TWFya2VyV2lkdGggPSBNQVgoW2ZvbnQg
cG9pbnRTaXplXSwgbWF4TWFya2VyV2lkdGgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzd2l0Y2goc3R5bGUtPmxpc3RTdHlsZVR5cGUoKSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2FzZSBraHRtbDo6RElTQzoKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBsaXN0VGV4dCArPSAoKFFDaGFyKUJVTExFVF9DSEFSKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Uga2h0bWw6OkNJUkNMRToKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0VGV4dCArPSAoKFFDaGFyKUNJUkNMRV9D
SEFSKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Uga2h0bWw6OlNRVUFSRToKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0VGV4dCArPSAoKFFDaGFy
KVNRVUFSRV9DSEFSKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Uga2h0bWw6OkxO
T05FOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBRU3RyaW5nIG1hcmtlciA9IGxpc3RSZW5kZXJlci0+
bWFya2VyU3RyaW5nVmFsdWUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBsaXN0VGV4dCArPSBtYXJrZXI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gVXNlIEFwcEtpdCBtZXRyaWNzLiAgV2lsbCBiZSByZW5kZXJlZCBieSBBcHBL
aXQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgbWFya2Vy
V2lkdGggPSBbZm9udCB3aWR0aE9mU3RyaW5nOiBtYXJrZXIuZ2V0TlNTdHJpbmcoKV07Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4TWFya2VyV2lkdGggPSBNQVgo
bWFya2VyV2lkdGgsIG1heE1hcmtlcldpZHRoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YSgp
KSkgeworICAgICAgICAgICAgICAgICAgICAvLyBOb3RlIHRoZSBzdGFydCBvZiB0aGUgPGE+IGVs
ZW1lbnQuICBXZSB3aWxsIGFkZCB0aGUgTlNMaW5rQXR0cmlidXRlTmFtZQorICAgICAgICAgICAg
ICAgICAgICAvLyBhdHRyaWJ1dGUgdG8gdGhlIGF0dHJpYnV0ZWQgc3RyaW5nIHdoZW4gbmF2aWdh
dGluZyB0byB0aGUgbmV4dCBzaWJsaW5nIAorICAgICAgICAgICAgICAgICAgICAvLyBvZiB0aGlz
IG5vZGUuCisgICAgICAgICAgICAgICAgICAgIGxpbmtTdGFydExvY2F0aW9uID0gW3Jlc3VsdCBs
ZW5ndGhdOworICAgICAgICAgICAgICAgICAgICBsaW5rU3RhcnROb2RlID0gc3RhdGljX2Nhc3Q8
RWxlbWVudEltcGwqPihuKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG4tPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjpicigpKSkgeworICAgICAgICAgICAgICAgICAgICB0ZXh0ICs9ICJcbiI7
CisgICAgICAgICAgICAgICAgICAgIGhhc05ld0xpbmUgPSB0cnVlOworICAgICAgICAgICAgICAg
IH0gZWxzZSBpZiAobi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmxpKCkpKSB7CisgICAgICAgICAg
ICAgICAgICAgIFFTdHJpbmcgbGlzdFRleHQ7CisgICAgICAgICAgICAgICAgICAgIEVsZW1lbnRJ
bXBsICppdGVtUGFyZW50ID0gbGlzdFBhcmVudChzdGF0aWNfY2FzdDxFbGVtZW50SW1wbCAqPihu
KSk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAoIWhhc05l
d0xpbmUpCisgICAgICAgICAgICAgICAgICAgICAgICBsaXN0VGV4dCArPSAnXG4nOworICAgICAg
ICAgICAgICAgICAgICBoYXNOZXdMaW5lID0gdHJ1ZTsKIAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBsaXN0VGV4dCArPSAnICc7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGxpc3RUZXh0ICs9ICdcdCc7Ci0gICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIE5TTXV0YWJsZURpY3Rpb25hcnkgKmF0dHJzOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGF0dHJzID0gW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9j
XSBpbml0XTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHJzIHNldE9iamVj
dDpmb250IGZvcktleTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHN0eWxlICYmIHN0eWxlLT5jb2xvcigpLmlzVmFsaWQoKSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRycyBzZXRPYmplY3Q6c3R5bGUtPmNv
bG9yKCkuZ2V0TlNDb2xvcigpIGZvcktleTpOU0ZvcmVncm91bmRDb2xvckF0dHJpYnV0ZU5hbWVd
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3R5bGUgJiYgc3R5bGUtPmJh
Y2tncm91bmRDb2xvcigpLmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFthdHRycyBzZXRPYmplY3Q6c3R5bGUtPmJhY2tncm91bmRDb2xvcigpLmdldE5TQ29s
b3IoKSBmb3JLZXk6TlNCYWNrZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lXTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKnBh
cnRpYWxTdHJpbmcgPSBbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6
bGlzdFRleHQuZ2V0TlNTdHJpbmcoKSBhdHRyaWJ1dGVzOmF0dHJzXTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgW2F0dHJzIHJlbGVhc2VdOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBbcmVzdWx0IGFwcGVuZEF0dHJpYnV0ZWRTdHJpbmc6IHBhcnRpYWxTdHJpbmdd
OyAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BhcnRp
YWxTdHJpbmcgcmVsZWFzZV07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICBsaXN0SXRlbXMuYXBwZW5kKHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsKj4o
bikpOworICAgICAgICAgICAgICAgICAgICBMaXN0SXRlbUluZm8gaW5mbzsKKyAgICAgICAgICAg
ICAgICAgICAgaW5mby5zdGFydCA9IFtyZXN1bHQgbGVuZ3RoXTsKKyAgICAgICAgICAgICAgICAg
ICAgaW5mby5lbmQgPSAwOworICAgICAgICAgICAgICAgICAgICBsaXN0SXRlbUxvY2F0aW9ucy5h
cHBlbmQgKGluZm8pOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAg
bGlzdFRleHQgKz0gJ1x0JzsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW1QYXJlbnQgJiYg
cmVuZGVyZXItPmlzTGlzdEl0ZW0oKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVy
TGlzdEl0ZW0gKmxpc3RSZW5kZXJlciA9IHN0YXRpY19jYXN0PFJlbmRlckxpc3RJdGVtKj4ocmVu
ZGVyZXIpOworCisgICAgICAgICAgICAgICAgICAgICAgICBtYXhNYXJrZXJXaWR0aCA9IE1BWChb
Zm9udCBwb2ludFNpemVdLCBtYXhNYXJrZXJXaWR0aCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBzd2l0Y2goc3R5bGUtPmxpc3RTdHlsZVR5cGUoKSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNhc2Uga2h0bWw6OkRJU0M6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGxpc3RUZXh0ICs9ICgoUUNoYXIpQlVMTEVUX0NIQVIpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIGtodG1s
OjpDSVJDTEU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RUZXh0ICs9ICgo
UUNoYXIpQ0lSQ0xFX0NIQVIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIGtodG1sOjpTUVVBUkU6CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RUZXh0ICs9ICgoUUNoYXIpU1FVQVJFX0NI
QVIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjYXNlIGtodG1sOjpMTk9ORToKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVN0cmluZyBtYXJrZXIgPSBsaXN0UmVu
ZGVyZXItPm1hcmtlclN0cmluZ1ZhbHVlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGxpc3RUZXh0ICs9IG1hcmtlcjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gVXNlIEFwcEtpdCBtZXRyaWNzLiAgV2lsbCBiZSByZW5kZXJlZCBieSBBcHBLaXQuCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IG1hcmtlcldpZHRoID0gW2ZvbnQgd2lk
dGhPZlN0cmluZzogbWFya2VyLmdldE5TU3RyaW5nKCldOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtYXhNYXJrZXJXaWR0aCA9IE1BWChtYXJrZXJXaWR0aCwgbWF4TWFya2VyV2lk
dGgpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9PTDoKLSAgICAgICAgICAgICAg
ICAgICAgY2FzZSBJRF9VTDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RUZXh0ICs9ICcg
JzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RUZXh0ICs9ICdcdCc7CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgIE5TTXV0YWJsZURpY3Rpb25hcnkgKmF0dHJzOworCisgICAgICAgICAg
ICAgICAgICAgICAgICBhdHRycyA9IFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF07
CisgICAgICAgICAgICAgICAgICAgICAgICBbYXR0cnMgc2V0T2JqZWN0OmZvbnQgZm9yS2V5Ok5T
Rm9udEF0dHJpYnV0ZU5hbWVdOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0eWxlICYm
IHN0eWxlLT5jb2xvcigpLmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBb
YXR0cnMgc2V0T2JqZWN0OnN0eWxlLT5jb2xvcigpLmdldE5TQ29sb3IoKSBmb3JLZXk6TlNGb3Jl
Z3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChz
dHlsZSAmJiBzdHlsZS0+YmFja2dyb3VuZENvbG9yKCkuaXNWYWxpZCgpKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFthdHRycyBzZXRPYmplY3Q6c3R5bGUtPmJhY2tncm91bmRDb2xvcigp
LmdldE5TQ29sb3IoKSBmb3JLZXk6TlNCYWNrZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lXTsKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgTlNBdHRyaWJ1dGVkU3RyaW5nICpwYXJ0aWFsU3RyaW5n
ID0gW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOmxpc3RUZXh0Lmdl
dE5TU3RyaW5nKCkgYXR0cmlidXRlczphdHRyc107CisgICAgICAgICAgICAgICAgICAgICAgICBb
YXR0cnMgcmVsZWFzZV07CisgICAgICAgICAgICAgICAgICAgICAgICBbcmVzdWx0IGFwcGVuZEF0
dHJpYnV0ZWRTdHJpbmc6IHBhcnRpYWxTdHJpbmddOyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICAgICAgICAgIFtwYXJ0aWFsU3RyaW5nIHJlbGVhc2VdOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG4tPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjpvbCgpKSB8fCBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dWwoKSkpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICghaGFzTmV3TGluZSkKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0ZXh0ICs9ICJcbiI7CiAgICAgICAgICAgICAgICAgICAgICAgICBoYXNOZXdMaW5lID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAg
ICAgIGNhc2UgSURfVEQ6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfVEg6Ci0gICAgICAg
ICAgICAgICAgICAgIGNhc2UgSURfSFI6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfREQ6
Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfREw6Ci0gICAgICAgICAgICAgICAgICAgIGNh
c2UgSURfRFQ6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfUFJFOgotICAgICAgICAgICAg
ICAgICAgICBjYXNlIElEX0JMT0NLUVVPVEU6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURf
RElWOgorICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG4tPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjp0ZCgpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjp0aCgpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4t
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpocigpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpkZCgpKSB8fAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpkbCgpKSB8fAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpkdCgpKSB8
fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjpwcmUoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6YmxvY2txdW90ZSgpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpkaXYoKSkpIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICghaGFzTmV3TGluZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0
ICs9ICdcbic7CiAgICAgICAgICAgICAgICAgICAgICAgICBoYXNOZXdMaW5lID0gdHJ1ZTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIElE
X1A6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfVFI6Ci0gICAgICAgICAgICAgICAgICAg
IGNhc2UgSURfSDE6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfSDI6Ci0gICAgICAgICAg
ICAgICAgICAgIGNhc2UgSURfSDM6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfSDQ6Ci0g
ICAgICAgICAgICAgICAgICAgIGNhc2UgSURfSDU6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2Ug
SURfSDY6IHsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6cCgpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4tPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjp0cigpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoMSgpKSB8fAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoMigpKSB8fAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoMygpKSB8fAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoNCgp
KSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjpoNSgpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjpoNigpKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNO
ZXdMaW5lKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQgKz0gJ1xuJzsKICAgICAg
ICAgICAgICAgICAgICAgICAgIApAQCAtMzEzOSwxMCArMzExNyw4IEBAIE5TQXR0cmlidXRlZFN0
cmluZyAqS1dRS0hUTUxQYXJ0OjphdHRyaWIKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgaGFzTmV3TGlu
ZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGNh
c2UgSURfSU1HOgorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChuLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6aW1nKCkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGVuZGluZ1N0
eWxlZFNwYWNlICE9IG5pbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsaW5r
U3RhcnRMb2NhdGlvbiA9PSBbcmVzdWx0IGxlbmd0aF0pIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKytsaW5rU3RhcnRMb2NhdGlvbjsKQEAgLTMxNTYsOCArMzEzMiw5IEBAIE5T
QXR0cmlidXRlZFN0cmluZyAqS1dRS0hUTUxQYXJ0OjphdHRyaWIKICAgICAgICAgICAgICAgICAg
ICAgICAgIE5TQXR0cmlidXRlZFN0cmluZyAqaVN0cmluZyA9IFtOU0F0dHJpYnV0ZWRTdHJpbmcg
YXR0cmlidXRlZFN0cmluZ1dpdGhBdHRhY2htZW50OmF0dGFjaG1lbnRdOwogICAgICAgICAgICAg
ICAgICAgICAgICAgW3Jlc3VsdCBhcHBlbmRBdHRyaWJ1dGVkU3RyaW5nOiBpU3RyaW5nXTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIFthdHRhY2htZW50IHJlbGVhc2VdOwotICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICB9CisKICAgICAgICAgICAgICAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKnBhcnRpYWxTdHJpbmcg
PSBbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6dGV4dC5nZXROU1N0
cmluZygpXTsKICAgICAgICAgICAgICAgICBbcmVzdWx0IGFwcGVuZEF0dHJpYnV0ZWRTdHJpbmc6
IHBhcnRpYWxTdHJpbmddOwogICAgICAgICAgICAgICAgIFtwYXJ0aWFsU3RyaW5nIHJlbGVhc2Vd
OwpAQCAtMzE3OSw3MSArMzE1Niw2MCBAQCBOU0F0dHJpYnV0ZWRTdHJpbmcgKktXUUtIVE1MUGFy
dDo6YXR0cmliCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBuZXh0ID0gbi0+
bmV4dFNpYmxpbmcoKTsKIAotICAgICAgICAgICAgTm9kZUltcGw6OklkIF9pZCA9IG4tPmlkZW50
aWZpZXIoKTsKLSAgICAgICAgICAgIHN3aXRjaChfaWQpIHsKLSAgICAgICAgICAgICAgICBjYXNl
IElEX0E6Ci0gICAgICAgICAgICAgICAgICAgIC8vIEVuZCBvZiBhIDxhPiBlbGVtZW50LiAgQ3Jl
YXRlIGFuIGF0dHJpYnV0ZWQgc3RyaW5nIE5TTGlua0F0dHJpYnV0ZU5hbWUgYXR0cmlidXRlCi0g
ICAgICAgICAgICAgICAgICAgIC8vIGZvciB0aGUgcmFuZ2Ugb2YgdGhlIGxpbmsuICBOb3RlIHRo
YXQgd2UgY3JlYXRlIHRoZSBhdHRyaWJ1dGVkIHN0cmluZyBmcm9tIHRoZSBET00sIHdoaWNoCi0g
ICAgICAgICAgICAgICAgICAgIC8vIHdpbGwgaGF2ZSBjb3JyZWN0ZWQgYW55IGlsbGVnYWxseSBu
ZXN0ZWQgPGE+IGVsZW1lbnRzLgotICAgICAgICAgICAgICAgICAgICBpZiAobGlua1N0YXJ0Tm9k
ZSAmJiBuID09IGxpbmtTdGFydE5vZGUpewotICAgICAgICAgICAgICAgICAgICAgICAgRE9NU3Ry
aW5nIGhyZWYgPSBwYXJzZVVSTChsaW5rU3RhcnROb2RlLT5nZXRBdHRyaWJ1dGUoQVRUUl9IUkVG
KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBLVVJMIGtVUkwgPSBLV1EobGlua1N0YXJ0Tm9k
ZS0+Z2V0RG9jdW1lbnQoKS0+cGFydCgpKS0+Y29tcGxldGVVUkwoaHJlZi5zdHJpbmcoKSk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgIE5TVVJMICpV
UkwgPSBrVVJMLmdldE5TVVJMKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBbcmVzdWx0IGFk
ZEF0dHJpYnV0ZTpOU0xpbmtBdHRyaWJ1dGVOYW1lIHZhbHVlOlVSTCByYW5nZTpOU01ha2VSYW5n
ZShsaW5rU3RhcnRMb2NhdGlvbiwgW3Jlc3VsdCBsZW5ndGhdLWxpbmtTdGFydExvY2F0aW9uKV07
Ci0gICAgICAgICAgICAgICAgICAgICAgICBsaW5rU3RhcnROb2RlID0gMDsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChu
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YSgpKSkgeworICAgICAgICAgICAgICAgIC8vIEVuZCBv
ZiBhIDxhPiBlbGVtZW50LiAgQ3JlYXRlIGFuIGF0dHJpYnV0ZWQgc3RyaW5nIE5TTGlua0F0dHJp
YnV0ZU5hbWUgYXR0cmlidXRlCisgICAgICAgICAgICAgICAgLy8gZm9yIHRoZSByYW5nZSBvZiB0
aGUgbGluay4gIE5vdGUgdGhhdCB3ZSBjcmVhdGUgdGhlIGF0dHJpYnV0ZWQgc3RyaW5nIGZyb20g
dGhlIERPTSwgd2hpY2gKKyAgICAgICAgICAgICAgICAvLyB3aWxsIGhhdmUgY29ycmVjdGVkIGFu
eSBpbGxlZ2FsbHkgbmVzdGVkIDxhPiBlbGVtZW50cy4KKyAgICAgICAgICAgICAgICBpZiAobGlu
a1N0YXJ0Tm9kZSAmJiBuID09IGxpbmtTdGFydE5vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAg
RE9NU3RyaW5nIGhyZWYgPSBwYXJzZVVSTChsaW5rU3RhcnROb2RlLT5nZXRBdHRyaWJ1dGUoQVRU
Ul9IUkVGKSk7CisgICAgICAgICAgICAgICAgICAgIEtVUkwga1VSTCA9IEtXUShsaW5rU3RhcnRO
b2RlLT5nZXREb2N1bWVudCgpLT5wYXJ0KCkpLT5jb21wbGV0ZVVSTChocmVmLnN0cmluZygpKTsK
KyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIE5TVVJMICpVUkwgPSBr
VVJMLmdldE5TVVJMKCk7CisgICAgICAgICAgICAgICAgICAgIFtyZXN1bHQgYWRkQXR0cmlidXRl
Ok5TTGlua0F0dHJpYnV0ZU5hbWUgdmFsdWU6VVJMIHJhbmdlOk5TTWFrZVJhbmdlKGxpbmtTdGFy
dExvY2F0aW9uLCBbcmVzdWx0IGxlbmd0aF0tbGlua1N0YXJ0TG9jYXRpb24pXTsKKyAgICAgICAg
ICAgICAgICAgICAgbGlua1N0YXJ0Tm9kZSA9IDA7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAobi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9s
KCkpIHx8IG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp1bCgpKSkgeworICAgICAgICAgICAgICAg
IGlmICghaGFzTmV3TGluZSkKKyAgICAgICAgICAgICAgICAgICAgdGV4dCArPSAnXG4nOworICAg
ICAgICAgICAgICAgIGhhc05ld0xpbmUgPSB0cnVlOworICAgICAgICAgICAgfSBlbHNlIGlmIChu
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6bGkoKSkpIHsKICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICBjYXNlIElEX09MOgotICAgICAgICAgICAgICAgIGNhc2UgSURfVUw6Ci0gICAg
ICAgICAgICAgICAgICAgIGlmICghaGFzTmV3TGluZSkKLSAgICAgICAgICAgICAgICAgICAgICAg
IHRleHQgKz0gJ1xuJzsKLSAgICAgICAgICAgICAgICAgICAgaGFzTmV3TGluZSA9IHRydWU7Ci0g
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgY2FzZSBJRF9MSToK
LSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaW50IGksIGNv
dW50ID0gbGlzdEl0ZW1zLmNvdW50KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkg
PSAwOyBpIDwgY291bnQ7IGkrKyl7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxp
c3RJdGVtcy5hdChpKSA9PSBuKXsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlz
dEl0ZW1Mb2NhdGlvbnNbaV0uZW5kID0gW3Jlc3VsdCBsZW5ndGhdOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaW50IGksIGNvdW50ID0g
bGlzdEl0ZW1zLmNvdW50KCk7CisgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvdW50
OyBpKyspeworICAgICAgICAgICAgICAgICAgICBpZiAobGlzdEl0ZW1zLmF0KGkpID09IG4pewor
ICAgICAgICAgICAgICAgICAgICAgICAgbGlzdEl0ZW1Mb2NhdGlvbnNbaV0uZW5kID0gW3Jlc3Vs
dCBsZW5ndGhdOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNOZXdMaW5lKQotICAgICAgICAg
ICAgICAgICAgICAgICAgdGV4dCArPSAnXG4nOwotICAgICAgICAgICAgICAgICAgICBoYXNOZXdM
aW5lID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAg
ICBjYXNlIElEX1REOgotICAgICAgICAgICAgICAgIGNhc2UgSURfVEg6Ci0gICAgICAgICAgICAg
ICAgY2FzZSBJRF9IUjoKLSAgICAgICAgICAgICAgICBjYXNlIElEX0REOgotICAgICAgICAgICAg
ICAgIGNhc2UgSURfREw6Ci0gICAgICAgICAgICAgICAgY2FzZSBJRF9EVDoKLSAgICAgICAgICAg
ICAgICBjYXNlIElEX1BSRToKLSAgICAgICAgICAgICAgICBjYXNlIElEX0JMT0NLUVVPVEU6Ci0g
ICAgICAgICAgICAgICAgY2FzZSBJRF9ESVY6Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaGFz
TmV3TGluZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHRleHQgKz0gJ1xuJzsKLSAgICAgICAg
ICAgICAgICAgICAgaGFzTmV3TGluZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgIGNhc2UgSURfUDoKLSAgICAgICAgICAgICAgICBjYXNlIElEX1RS
OgotICAgICAgICAgICAgICAgIGNhc2UgSURfSDE6Ci0gICAgICAgICAgICAgICAgY2FzZSBJRF9I
MjoKLSAgICAgICAgICAgICAgICBjYXNlIElEX0gzOgotICAgICAgICAgICAgICAgIGNhc2UgSURf
SDQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBJRF9INToKLSAgICAgICAgICAgICAgICBjYXNlIElE
X0g2OgotICAgICAgICAgICAgICAgICAgICBpZiAoIWhhc05ld0xpbmUpCi0gICAgICAgICAgICAg
ICAgICAgICAgICB0ZXh0ICs9ICdcbic7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEFuIGV4dHJh
IG5ld2xpbmUgaXMgbmVlZGVkIGF0IHRoZSBzdGFydCwgbm90IHRoZSBlbmQsIG9mIHRoZXNlIHR5
cGVzIG9mIHRhZ3MsCi0gICAgICAgICAgICAgICAgICAgIC8vIHNvIGRvbid0IGFkZCBhbm90aGVy
IGhlcmUuCi0gICAgICAgICAgICAgICAgICAgIGhhc05ld0xpbmUgPSB0cnVlOwotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYg
KCFoYXNOZXdMaW5lKQorICAgICAgICAgICAgICAgICAgICB0ZXh0ICs9ICdcbic7CisgICAgICAg
ICAgICAgICAgaGFzTmV3TGluZSA9IHRydWU7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG4tPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjp0ZCgpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICBuLT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6dGgoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgbi0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OmhyKCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgIG4t
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpkZCgpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICBu
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZGwoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAg
bi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmR0KCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAg
IG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpwcmUoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAg
ICAgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJsb2NrcXVvdGUoKSkgfHwKKyAgICAgICAgICAg
ICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmRpdigpKSkgeworICAgICAgICAg
ICAgICAgIGlmICghaGFzTmV3TGluZSkKKyAgICAgICAgICAgICAgICAgICAgdGV4dCArPSAnXG4n
OworICAgICAgICAgICAgICAgIGhhc05ld0xpbmUgPSB0cnVlOworICAgICAgICAgICAgfSBlbHNl
IGlmIChuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6cCgpKSB8fAorICAgICAgICAgICAgICAgICAg
ICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dHIoKSkgfHwKKyAgICAgICAgICAgICAgICAg
ICAgICAgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmgxKCkpIHx8CisgICAgICAgICAgICAgICAg
ICAgICAgIG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoMigpKSB8fAorICAgICAgICAgICAgICAg
ICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDMoKSkgfHwKKyAgICAgICAgICAgICAg
ICAgICAgICAgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omg0KCkpIHx8CisgICAgICAgICAgICAg
ICAgICAgICAgIG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoNSgpKSB8fAorICAgICAgICAgICAg
ICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDYoKSkpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoIWhhc05ld0xpbmUpCisgICAgICAgICAgICAgICAgICAgIHRleHQgKz0gJ1xuJzsK
KyAgICAgICAgICAgICAgICAvLyBBbiBleHRyYSBuZXdsaW5lIGlzIG5lZWRlZCBhdCB0aGUgc3Rh
cnQsIG5vdCB0aGUgZW5kLCBvZiB0aGVzZSB0eXBlcyBvZiB0YWdzLAorICAgICAgICAgICAgICAg
IC8vIHNvIGRvbid0IGFkZCBhbm90aGVyIGhlcmUuCisgICAgICAgICAgICAgICAgaGFzTmV3TGlu
ZSA9IHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIE5TQXR0
cmlidXRlZFN0cmluZyAqcGFydGlhbFN0cmluZyA9IFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9j
XSBpbml0V2l0aFN0cmluZzp0ZXh0LmdldE5TU3RyaW5nKCldOwpAQCAtMzQ3Niw3ICszNDQyLDcg
QEAgUmVuZGVyU3R5bGUgKktXUUtIVE1MUGFydDo6c3R5bGVGb3JTZWxlYwogICAgICAgICByZXR1
cm4gbm9kZS0+cmVuZGVyZXIoKS0+c3R5bGUoKTsKIAogICAgIGludCBleGNlcHRpb25Db2RlID0g
MDsKLSAgICBFbGVtZW50SW1wbCAqc3R5bGVFbGVtZW50ID0geG1sRG9jSW1wbCgpLT5jcmVhdGVI
VE1MRWxlbWVudCgic3BhbiIsIGV4Y2VwdGlvbkNvZGUpOworICAgIEVsZW1lbnRJbXBsICpzdHls
ZUVsZW1lbnQgPSB4bWxEb2NJbXBsKCktPmNyZWF0ZUVsZW1lbnROUyhYSFRNTF9OQU1FU1BBQ0Us
ICJzcGFuIiwgZXhjZXB0aW9uQ29kZSk7CiAgICAgQVNTRVJUKGV4Y2VwdGlvbkNvZGUgPT0gMCk7
CiAKICAgICBzdHlsZUVsZW1lbnQtPnJlZigpOwpAQCAtMzcwMyw3ICszNjY5LDcgQEAgdm9pZCBL
V1FLSFRNTFBhcnQ6OnNldFNlbGVjdGlvbkZyb21Ob25lKAogICAgICAgICB3aGlsZSAobm9kZSkg
ewogICAgICAgICAgICAgLy8gTG9vayBmb3IgYSBibG9jayBmbG93LCBidXQgc2tpcCBvdmVyIHRo
ZSBIVE1MIGVsZW1lbnQsIHNpbmNlIHdlIHJlYWxseQogICAgICAgICAgICAgLy8gd2FudCB0byBn
ZXQgYXQgbGVhc3QgYXMgZmFyIGFzIHRoZSB0aGUgQk9EWSBlbGVtZW50IGluIGEgZG9jdW1lbnQu
Ci0gICAgICAgICAgICBpZiAobm9kZS0+aXNCbG9ja0Zsb3coKSAmJiBub2RlLT5pZGVudGlmaWVy
KCkgIT0gSURfSFRNTCkKKyAgICAgICAgICAgIGlmIChub2RlLT5pc0Jsb2NrRmxvdygpICYmIG5v
ZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpodG1sKCkpKQogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKTsKICAgICAgICAg
fQpJbmRleDoga3dxL0tXUVJlbmRlclRyZWVEZWJ1Zy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
L2N2cy9yb290L1dlYkNvcmUva3dxL0tXUVJlbmRlclRyZWVEZWJ1Zy5jcHAsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuNDEKZGlmZiAtdSAtcCAtcjEuNDEga3dxL0tXUVJlbmRlclRyZWVEZWJ1Zy5j
cHAKLS0tIGt3cS9LV1FSZW5kZXJUcmVlRGVidWcuY3BwCTE2IE1heSAyMDA1IDIyOjAzOjQ4IC0w
MDAwCTEuNDEKKysrIGt3cS9LV1FSZW5kZXJUcmVlRGVidWcuY3BwCTUgSnVsIDIwMDUgMjM6MjE6
MTkgLTAwMDAKQEAgLTI3LDcgKzI3LDYgQEAKIAogI2luY2x1ZGUgImRvbV9kb2NpbXBsLmgiCiAj
aW5jbHVkZSAiZG9tX3Bvc2l0aW9uLmgiCi0jaW5jbHVkZSAiaHRtbHRhZ3MuaCIKICNpbmNsdWRl
ICJqc2VkaXRpbmcuaCIKICNpbmNsdWRlICJraHRtbHZpZXcuaCIKICNpbmNsdWRlICJyZW5kZXJf
Y2FudmFzLmgiCkBAIC0xMTYsOSArMTE1LDEzIEBAIHN0YXRpYyBRU3RyaW5nIGdldFRhZ05hbWUo
Tm9kZUltcGwgKm4pCiB7CiAgICAgaWYgKG4tPmlzRG9jdW1lbnROb2RlKCkpCiAgICAgICAgIHJl
dHVybiAiIjsKLSAgICBpZiAobi0+aWQoKSA8PSBJRF9MQVNUX1RBRykKLSAgICAgICAgcmV0dXJu
IGdldFRhZ05hbWUobi0+aWQoKSkuc3RyaW5nKCk7Ci0gICAgcmV0dXJuIG4tPm5vZGVOYW1lKCku
c3RyaW5nKCk7CisgICAgaWYgKG4tPmlzVGV4dE5vZGUoKSkKKyAgICAgICAgcmV0dXJuICJURVhU
IjsgLy8gRklYTUU6IFJlbW92ZSBvbmNlIHRoZSBsYXlvdXQgdGVzdHMgYXJlIHJlYWR5IHRvIGNo
YW5nZS4KKyAgICBpZiAobi0+aXNDb21tZW50Tm9kZSgpKQorICAgICAgICByZXR1cm4gIkNPTU1F
TlQiOworICAgIGlmIChuLT5pc0hUTUxFbGVtZW50KCkpCisgICAgICAgIHJldHVybiBuLT5ub2Rl
TmFtZSgpLnVwcGVyKCkuc3RyaW5nKCk7IC8vIEZJWE1FOiBXZSB3YW50IHRvIGR1bXAgdGhlIHJl
YWwgRE9NIG5hbWUsIG5vdCBhbiB1cHBlcmNhc2UgbmFtZS4KKyAgICByZXR1cm4gbi0+bm9kZU5h
bWUoKS5zdHJpbmcoKTsgCiB9CiAKIHN0YXRpYyBRVGV4dFN0cmVhbSAmb3BlcmF0b3I8PChRVGV4
dFN0cmVhbSAmdHMsIGNvbnN0IFJlbmRlck9iamVjdCAmbykKSW5kZXg6IGt3cS9XZWJDb3JlQnJp
ZGdlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9XZWJDb3Jl
QnJpZGdlLm1tLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjM5NgpkaWZmIC11IC1wIC1yMS4zOTYg
a3dxL1dlYkNvcmVCcmlkZ2UubW0KLS0tIGt3cS9XZWJDb3JlQnJpZGdlLm1tCTE0IEp1biAyMDA1
IDAwOjIzOjQ1IC0wMDAwCTEuMzk2CisrKyBrd3EvV2ViQ29yZUJyaWRnZS5tbQk1IEp1bCAyMDA1
IDIzOjIxOjIwIC0wMDAwCkBAIC0zOSw3ICszOSw2IEBACiAjaW1wb3J0ICJodG1sX2ltYWdlaW1w
bC5oIgogI2ltcG9ydCAiaHRtbGF0dHJzLmgiCiAjaW1wb3J0ICJodG1sZWRpdGluZy5oIgotI2lt
cG9ydCAiaHRtbHRhZ3MuaCIKICNpbXBvcnQgImtodG1sX3BhcnQuaCIKICNpbXBvcnQgImtodG1s
dmlldy5oIgogI2ltcG9ydCAia2pzX3Byb3h5LmgiCkBAIC02Nyw3ICs2Niw2IEBACiAjaW1wb3J0
ICJLV1FBc3NlcnRpb25zLmgiCiAjaW1wb3J0ICJLV1FDaGFyc2V0cy5oIgogI2ltcG9ydCAiS1dR
Q2xpcGJvYXJkLmgiCi0jaW1wb3J0ICJLV1FET01Ob2RlLmgiCiAjaW1wb3J0ICJLV1FFZGl0Q29t
bWFuZC5oIgogI2ltcG9ydCAiS1dRRm9udC5oIgogI2ltcG9ydCAiS1dRRm91bmRhdGlvbkV4dHJh
cy5oIgpAQCAtMTAwLDYgKzk4LDcgQEAgdXNpbmcgRE9NOjpIVE1MRm9ybUVsZW1lbnRJbXBsOwog
dXNpbmcgRE9NOjpIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbDsKIHVzaW5nIERPTTo6SFRNTElt
YWdlRWxlbWVudEltcGw7CiB1c2luZyBET006OkhUTUxJbnB1dEVsZW1lbnRJbXBsOwordXNpbmcg
RE9NOjpIVE1MTmFtZXM7CiB1c2luZyBET006Ok5vZGVJbXBsOwogdXNpbmcgRE9NOjpQb3NpdGlv
bjsKIHVzaW5nIERPTTo6UmFuZ2VJbXBsOwpAQCAtOTEzLDcgKzkxMiw3IEBAIHN0YXRpYyBOU1Zp
ZXcgKnZpZXdGb3JFbGVtZW50KEVsZW1lbnRJbXAKIHN0YXRpYyBIVE1MSW5wdXRFbGVtZW50SW1w
bCAqaW5wdXRFbGVtZW50RnJvbURPTUVsZW1lbnQoRE9NRWxlbWVudCAqZWxlbWVudCkKIHsKICAg
ICBOb2RlSW1wbCAqbm9kZSA9IFtlbGVtZW50IF9ub2RlSW1wbF07Ci0gICAgaWYgKG5vZGUgJiYg
aWRGcm9tTm9kZShub2RlKSA9PSBJRF9JTlBVVCkgeworICAgIGlmIChub2RlLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6aW5wdXQoKSkpIHsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxJ
bnB1dEVsZW1lbnRJbXBsICo+KG5vZGUpOwogICAgIH0KICAgICByZXR1cm4gbmlsOwpAQCAtOTI2
LDcgKzkyNSw3IEBAIHN0YXRpYyBIVE1MRm9ybUVsZW1lbnRJbXBsICpmb3JtRWxlbWVudEYKICAg
ICAvLyBtYXBzLmdvb2dsZS5jb20gY3Jhc2hlcyBvdGhlcndpc2UgYmVjYXVzZSBpdCBpcyBhbiB4
c2x0IGZpbGUKICAgICAvLyB0aGF0IGNvbnRhaW5zIDxmb3JtPiBlbGVtZW50cyB0aGF0IGFyZW4n
dCBpbiBhbnkgbmFtZXNwYWNlLCBzbwogICAgIC8vIHRoZXkgY29tZSBvdXQgYXMgZ2VuZXJpYyBD
TUwgZWxlbWVudHMKLSAgICBpZiAobm9kZSAmJiBub2RlLT5pc0hUTUxFbGVtZW50KCkgJiYgaWRG
cm9tTm9kZShub2RlKSA9PSBJRF9GT1JNKSB7CisgICAgaWYgKG5vZGUgJiYgbm9kZS0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OmZvcm0oKSkpIHsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhU
TUxGb3JtRWxlbWVudEltcGwgKj4obm9kZSk7CiAgICAgfQogICAgIHJldHVybiBuaWw7CkBAIC0x
MDk2LDcgKzEwOTUsNyBAQCBzdGF0aWMgSFRNTEZvcm1FbGVtZW50SW1wbCAqZm9ybUVsZW1lbnRG
CiAgICAgCiAgICAgICAgICAgICAvLyBGSVhNRTogQ29kZSBjb3BpZWQgZnJvbSBSZW5kZXJJbWFn
ZTo6dXBkYXRlRnJvbUVsZW1lbnQ7IHNob3VsZCBzaGFyZS4KICAgICAgICAgICAgIERPTVN0cmlu
ZyBhdHRyOwotICAgICAgICAgICAgaWYgKGlkRnJvbU5vZGUoaSkgPT0gSURfT0JKRUNUKSB7Cisg
ICAgICAgICAgICBpZiAoaS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9iamVjdCgpKSkgewogICAg
ICAgICAgICAgICAgIGF0dHIgPSBpLT5nZXRBdHRyaWJ1dGUoQVRUUl9EQVRBKTsKICAgICAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgYXR0ciA9IGktPmdldEF0dHJpYnV0ZShBVFRS
X1NSQyk7CkBAIC0xMTA4LDkgKzExMDcsOSBAQCBzdGF0aWMgSFRNTEZvcm1FbGVtZW50SW1wbCAq
Zm9ybUVsZW1lbnRGCiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIEZJWE1FOiBDb2RlIGNv
cGllZCBmcm9tIFJlbmRlckltYWdlOjp1cGRhdGVGcm9tRWxlbWVudDsgc2hvdWxkIHNoYXJlLgog
ICAgICAgICAgICAgRE9NU3RyaW5nIGFsdDsKLSAgICAgICAgICAgIGlmIChpZEZyb21Ob2RlKGkp
ID09IElEX0lOUFVUKQorICAgICAgICAgICAgaWYgKGktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpp
bnB1dCgpKSkKICAgICAgICAgICAgICAgICBhbHQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVt
ZW50SW1wbCAqPihpKS0+YWx0VGV4dCgpOwotICAgICAgICAgICAgZWxzZSBpZiAoaWRGcm9tTm9k
ZShpKSA9PSBJRF9JTUcpCisgICAgICAgICAgICBlbHNlIGlmIChpLT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6aW1nKCkpKQogICAgICAgICAgICAgICAgIGFsdCA9IHN0YXRpY19jYXN0PEhUTUxJbWFn
ZUVsZW1lbnRJbXBsICo+KGkpLT5hbHRUZXh0KCk7CiAgICAgICAgICAgICBpZiAoIWFsdC5pc051
bGwoKSkgewogICAgICAgICAgICAgICAgIFFTdHJpbmcgYWx0VGV4dCA9IGFsdC5zdHJpbmcoKTsK
SW5kZXg6IGxheW91dC10ZXN0cy9mYXN0L2RvbS9jc3MtZG9tLXJlYWQtZXhwZWN0ZWQudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2xheW91dC10ZXN0cy9mYXN0L2Rv
bS9jc3MtZG9tLXJlYWQtZXhwZWN0ZWQudHh0LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlm
ZiAtdSAtcCAtcjEuMSBsYXlvdXQtdGVzdHMvZmFzdC9kb20vY3NzLWRvbS1yZWFkLWV4cGVjdGVk
LnR4dAotLS0gbGF5b3V0LXRlc3RzL2Zhc3QvZG9tL2Nzcy1kb20tcmVhZC1leHBlY3RlZC50eHQJ
MTkgSnVuIDIwMDUgMDY6Mzg6MDkgLTAwMDAJMS4xCisrKyBsYXlvdXQtdGVzdHMvZmFzdC9kb20v
Y3NzLWRvbS1yZWFkLWV4cGVjdGVkLnR4dAk1IEp1bCAyMDA1IDIzOjIxOjIzIC0wMDAwCkBAIC05
LDUgKzksNSBAQCBTZXJpYWxpemVkIHN0eWxlLCB1c2luZyBDU1MgRE9NOgogLnR3byB7IGRpc3Bs
YXk6IGlubGluZTsgfQogLnRocmVlIHsgZGlzcGxheTogbGlzdC1pdGVtOyBsaXN0LXN0eWxlLXR5
cGU6IHNxdWFyZTsgbWFyZ2luLWxlZnQ6IDNlbTsgfQogLmZvdXIgeyBkaXNwbGF5OiBub25lOyBj
b2xvcjogcmVkOyB9Ci1JIHsgZGlzcGxheTogYmxvY2s7IH0KK2kgeyBkaXNwbGF5OiBibG9jazsg
fQogCkluZGV4OiBsYXlvdXQtdGVzdHMvZmFzdC9vdmVyZmxvdy8wMDMtZXhwZWN0ZWQudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2xheW91dC10ZXN0cy9mYXN0L292
ZXJmbG93LzAwMy1leHBlY3RlZC50eHQsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTAKZGlmZiAt
dSAtcCAtcjEuMTAgbGF5b3V0LXRlc3RzL2Zhc3Qvb3ZlcmZsb3cvMDAzLWV4cGVjdGVkLnR4dAot
LS0gbGF5b3V0LXRlc3RzL2Zhc3Qvb3ZlcmZsb3cvMDAzLWV4cGVjdGVkLnR4dAkxMSBGZWIgMjAw
NSAyMjo1OTowNyAtMDAwMAkxLjEwCisrKyBsYXlvdXQtdGVzdHMvZmFzdC9vdmVyZmxvdy8wMDMt
ZXhwZWN0ZWQudHh0CTUgSnVsIDIwMDUgMjM6MjE6MjQgLTAwMDAKQEAgLTQsMTQgKzQsMTQgQEAg
bGF5ZXIgYXQgKDEwLDEwKSBzaXplIDc4MHgzMDIKICAgUmVuZGVyQmxvY2sge2Zha2V9IGF0ICgx
MCwxMCkgc2l6ZSA3ODB4MzAyIFtiZ2NvbG9yPSNGRkZGMDBdCiBsYXllciBhdCAoMTAsMTApIHNp
emUgMjgyeDMwMiBjbGlwIGF0ICgxMSwxMSkgc2l6ZSAyNjV4MzAwIHNjcm9sbEhlaWdodCAxMjky
CiAgIFJlbmRlckJsb2NrIHtjaGFubmVsfSBhdCAoMCwwKSBzaXplIDI4MngzMDIgW2JnY29sb3I9
I0VFRUVFRV0gW2JvcmRlcjogKDFweCBzb2xpZCAjMDAwMDAwKV0KLSAgICBSZW5kZXJCbG9jayB7
VElUTEV9IGF0ICgxMSwxMSkgc2l6ZSAyNTV4MTkKKyAgICBSZW5kZXJCbG9jayB7dGl0bGV9IGF0
ICgxMSwxMSkgc2l6ZSAyNTV4MTkKICAgICAgIFJlbmRlclRleHQge1RFWFR9IGF0ICgwLDApIHNp
emUgMTU0eDE5CiAgICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDE1NDogInNjb3R0YW5k
cmV3LmNvbSIKICAgICBSZW5kZXJCbG9jayB7ZGVzY3JpcHRpb259IGF0ICgxMSw0MCkgc2l6ZSAy
NTV4MTIKICAgICAgIFJlbmRlclRleHQge1RFWFR9IGF0ICgwLDApIHNpemUgMTkxeDEyCiAgICAg
ICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDE5MTogIkRIVE1MLCBET00gYW5kIEphdmFTY3Jp
cHQgTmV3cyIKICAgICBSZW5kZXJCbG9jayB7aXRlbX0gYXQgKDEsNjIpIHNpemUgMjY1eDk3IFti
Z2NvbG9yPSNGRkZGRkZdIFtib3JkZXI6ICgxcHggc29saWQgI0NDQ0NDQykgbm9uZSAoMXB4IHNv
bGlkICNDQ0NDQ0MpIG5vbmVdCi0gICAgICBSZW5kZXJJbmxpbmUge1RJVExFfSBhdCAoMCwwKSBz
aXplIDIzM3gxNQorICAgICAgUmVuZGVySW5saW5lIHt0aXRsZX0gYXQgKDAsMCkgc2l6ZSAyMzN4
MTUKICAgICAgICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQgKDEwLDExKSBzaXplIDIzM3gxNQogICAg
ICAgICAgIHRleHQgcnVuIGF0ICgxMCwxMSkgd2lkdGggMjMzOiAiREhUTUwgQW5pbWF0aW9uIEFy
cmF5IEdlbmVyYXRvciIKICAgICAgIFJlbmRlclRleHQge1RFWFR9IGF0ICgwLDApIHNpemUgMHgw
CkBAIC0yNCw3ICsyNCw3IEBAIGxheWVyIGF0ICgxMCwxMCkgc2l6ZSAyODJ4MzAyIGNsaXAgYXQg
KDEKICAgICAgIFJlbmRlclRleHQge1RFWFR9IGF0ICgwLDApIHNpemUgMHgwCiAgICAgICBSZW5k
ZXJUZXh0IHtURVhUfSBhdCAoMCwwKSBzaXplIDB4MAogICAgIFJlbmRlckJsb2NrIHtpdGVtfSBh
dCAoMSwxNjkpIHNpemUgMjY1eDgyIFtiZ2NvbG9yPSNGRkZGRkZdIFtib3JkZXI6ICgxcHggc29s
aWQgI0NDQ0NDQykgbm9uZSAoMXB4IHNvbGlkICNDQ0NDQ0MpIG5vbmVdCi0gICAgICBSZW5kZXJJ
bmxpbmUge1RJVExFfSBhdCAoMCwwKSBzaXplIDE3N3gxNQorICAgICAgUmVuZGVySW5saW5lIHt0
aXRsZX0gYXQgKDAsMCkgc2l6ZSAxNzd4MTUKICAgICAgICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQg
KDEwLDExKSBzaXplIDE3N3gxNQogICAgICAgICAgIHRleHQgcnVuIGF0ICgxMCwxMSkgd2lkdGgg
MTc3OiAiRE9NIGFuZCBFeHRlbmRlZCBFbnRyaWVzIgogICAgICAgUmVuZGVyVGV4dCB7VEVYVH0g
YXQgKDE4NywxMSkgc2l6ZSA0eDE1CkBAIC0zOCw3ICszOCw3IEBAIGxheWVyIGF0ICgxMCwxMCkg
c2l6ZSAyODJ4MzAyIGNsaXAgYXQgKDEKICAgICAgIFJlbmRlclRleHQge1RFWFR9IGF0ICgwLDAp
IHNpemUgMHgwCiAgICAgICBSZW5kZXJUZXh0IHtURVhUfSBhdCAoMCwwKSBzaXplIDB4MAogICAg
IFJlbmRlckJsb2NrIHtpdGVtfSBhdCAoMSwyNjEpIHNpemUgMjY1eDgyIFtiZ2NvbG9yPSNGRkZG
RkZdIFtib3JkZXI6ICgxcHggc29saWQgI0NDQ0NDQykgbm9uZSAoMXB4IHNvbGlkICNDQ0NDQ0Mp
IG5vbmVdCi0gICAgICBSZW5kZXJJbmxpbmUge1RJVExFfSBhdCAoMCwwKSBzaXplIDE2NHgxNQor
ICAgICAgUmVuZGVySW5saW5lIHt0aXRsZX0gYXQgKDAsMCkgc2l6ZSAxNjR4MTUKICAgICAgICAg
UmVuZGVyVGV4dCB7VEVYVH0gYXQgKDEwLDExKSBzaXplIDE2NHgxNQogICAgICAgICAgIHRleHQg
cnVuIGF0ICgxMCwxMSkgd2lkdGggMTY0OiAiY2VsbHNwYWNpbmcgYW5kIHRoZSBET00iCiAgICAg
ICBSZW5kZXJUZXh0IHtURVhUfSBhdCAoMTc0LDExKSBzaXplIDR4MTUKQEAgLTUyLDcgKzUyLDcg
QEAgbGF5ZXIgYXQgKDEwLDEwKSBzaXplIDI4MngzMDIgY2xpcCBhdCAoMQogICAgICAgUmVuZGVy
VGV4dCB7VEVYVH0gYXQgKDAsMCkgc2l6ZSAweDAKICAgICAgIFJlbmRlclRleHQge1RFWFR9IGF0
ICgwLDApIHNpemUgMHgwCiAgICAgUmVuZGVyQmxvY2sge2l0ZW19IGF0ICgxLDM1Mykgc2l6ZSAy
NjV4OTcgW2JnY29sb3I9I0ZGRkZGRl0gW2JvcmRlcjogKDFweCBzb2xpZCAjQ0NDQ0NDKSBub25l
ICgxcHggc29saWQgI0NDQ0NDQykgbm9uZV0KLSAgICAgIFJlbmRlcklubGluZSB7VElUTEV9IGF0
ICgwLDApIHNpemUgMTc3eDE1CisgICAgICBSZW5kZXJJbmxpbmUge3RpdGxlfSBhdCAoMCwwKSBz
aXplIDE3N3gxNQogICAgICAgICBSZW5kZXJUZXh0IHtURVhUfSBhdCAoMTAsMTEpIHNpemUgMTc3
eDE1CiAgICAgICAgICAgdGV4dCBydW4gYXQgKDEwLDExKSB3aWR0aCAxNzc6ICJjb250ZW50ZWRp
dGFibGUgZm9yIE1vemlsbGEiCiAgICAgICBSZW5kZXJUZXh0IHtURVhUfSBhdCAoMTg3LDExKSBz
aXplIDR4MTUKQEAgLTY3LDcgKzY3LDcgQEAgbGF5ZXIgYXQgKDEwLDEwKSBzaXplIDI4MngzMDIg
Y2xpcCBhdCAoMQogICAgICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQgKDAsMCkgc2l6ZSAweDAKICAg
ICAgIFJlbmRlclRleHQge1RFWFR9IGF0ICgwLDApIHNpemUgMHgwCiAgICAgUmVuZGVyQmxvY2sg
e2l0ZW19IGF0ICgxLDQ2MCkgc2l6ZSAyNjV4ODIgW2JnY29sb3I9I0ZGRkZGRl0gW2JvcmRlcjog
KDFweCBzb2xpZCAjQ0NDQ0NDKSBub25lICgxcHggc29saWQgI0NDQ0NDQykgbm9uZV0KLSAgICAg
IFJlbmRlcklubGluZSB7VElUTEV9IGF0ICgwLDApIHNpemUgMTgyeDMwCisgICAgICBSZW5kZXJJ
bmxpbmUge3RpdGxlfSBhdCAoMCwwKSBzaXplIDE4MngzMAogICAgICAgICBSZW5kZXJUZXh0IHtU
RVhUfSBhdCAoMTAsMTEpIHNpemUgMTgyeDMwCiAgICAgICAgICAgdGV4dCBydW4gYXQgKDEwLDEx
KSB3aWR0aCAxODI6ICJESFRNTCBUaW1lbGluZS9LZXlmcmFtZSIKICAgICAgICAgICB0ZXh0IHJ1
biBhdCAoMTAsMjYpIHdpZHRoIDY5OiAiQW5pbWF0aW9uIgpAQCAtODEsNyArODEsNyBAQCBsYXll
ciBhdCAoMTAsMTApIHNpemUgMjgyeDMwMiBjbGlwIGF0ICgxCiAgICAgICBSZW5kZXJUZXh0IHtU
RVhUfSBhdCAoMCwwKSBzaXplIDB4MAogICAgICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQgKDAsMCkg
c2l6ZSAweDAKICAgICBSZW5kZXJCbG9jayB7aXRlbX0gYXQgKDEsNTUyKSBzaXplIDI2NXg5NyBb
Ymdjb2xvcj0jRkZGRkZGXSBbYm9yZGVyOiAoMXB4IHNvbGlkICNDQ0NDQ0MpIG5vbmUgKDFweCBz
b2xpZCAjQ0NDQ0NDKSBub25lXQotICAgICAgUmVuZGVySW5saW5lIHtUSVRMRX0gYXQgKDAsMCkg
c2l6ZSAxNTd4MzAKKyAgICAgIFJlbmRlcklubGluZSB7dGl0bGV9IGF0ICgwLDApIHNpemUgMTU3
eDMwCiAgICAgICAgIFJlbmRlclRleHQge1RFWFR9IGF0ICgxMCwxMSkgc2l6ZSAxNTd4MzAKICAg
ICAgICAgICB0ZXh0IHJ1biBhdCAoMTAsMTEpIHdpZHRoIDE1NzogIkR5bkFQSSAyLjkgYW5kIE1v
emlsbGEiCiAgICAgICAgICAgdGV4dCBydW4gYXQgKDEwLDI2KSB3aWR0aCAxMjQ6ICJjb21wYXRp
YmlsaXR5IHBvcnRzIgpAQCAtOTYsNyArOTYsNyBAQCBsYXllciBhdCAoMTAsMTApIHNpemUgMjgy
eDMwMiBjbGlwIGF0ICgxCiAgICAgICBSZW5kZXJUZXh0IHtURVhUfSBhdCAoMCwwKSBzaXplIDB4
MAogICAgICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQgKDAsMCkgc2l6ZSAweDAKICAgICBSZW5kZXJC
bG9jayB7aXRlbX0gYXQgKDEsNjU5KSBzaXplIDI2NXg2NyBbYmdjb2xvcj0jRkZGRkZGXSBbYm9y
ZGVyOiAoMXB4IHNvbGlkICNDQ0NDQ0MpIG5vbmUgKDFweCBzb2xpZCAjQ0NDQ0NDKSBub25lXQot
ICAgICAgUmVuZGVySW5saW5lIHtUSVRMRX0gYXQgKDAsMCkgc2l6ZSAxNTR4MTUKKyAgICAgIFJl
bmRlcklubGluZSB7dGl0bGV9IGF0ICgwLDApIHNpemUgMTU0eDE1CiAgICAgICAgIFJlbmRlclRl
eHQge1RFWFR9IGF0ICgxMCwxMSkgc2l6ZSAxNTR4MTUKICAgICAgICAgICB0ZXh0IHJ1biBhdCAo
MTAsMTEpIHdpZHRoIDE1NDogIiFsaW5lRHJhdyBib29rbWFya2xldCIKICAgICAgIFJlbmRlclRl
eHQge1RFWFR9IGF0ICgxNjQsMTEpIHNpemUgNHgxNQpAQCAtMTA5LDcgKzEwOSw3IEBAIGxheWVy
IGF0ICgxMCwxMCkgc2l6ZSAyODJ4MzAyIGNsaXAgYXQgKDEKICAgICAgIFJlbmRlclRleHQge1RF
WFR9IGF0ICgwLDApIHNpemUgMHgwCiAgICAgICBSZW5kZXJUZXh0IHtURVhUfSBhdCAoMCwwKSBz
aXplIDB4MAogICAgIFJlbmRlckJsb2NrIHtpdGVtfSBhdCAoMSw3MzYpIHNpemUgMjY1eDk3IFti
Z2NvbG9yPSNGRkZGRkZdIFtib3JkZXI6ICgxcHggc29saWQgI0NDQ0NDQykgbm9uZSAoMXB4IHNv
bGlkICNDQ0NDQ0MpIG5vbmVdCi0gICAgICBSZW5kZXJJbmxpbmUge1RJVExFfSBhdCAoMCwwKSBz
aXplIDIwMXgxNQorICAgICAgUmVuZGVySW5saW5lIHt0aXRsZX0gYXQgKDAsMCkgc2l6ZSAyMDF4
MTUKICAgICAgICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQgKDEwLDExKSBzaXplIDIwMXgxNQogICAg
ICAgICAgIHRleHQgcnVuIGF0ICgxMCwxMSkgd2lkdGggMjAxOiAiTW96aWxsYSwgREhUTUwgYW5k
IERPTSBsaW5rcyIKICAgICAgIFJlbmRlclRleHQge1RFWFR9IGF0ICgyMTEsMTEpIHNpemUgNHgx
NQpAQCAtMTI0LDcgKzEyNCw3IEBAIGxheWVyIGF0ICgxMCwxMCkgc2l6ZSAyODJ4MzAyIGNsaXAg
YXQgKDEKICAgICAgIFJlbmRlclRleHQge1RFWFR9IGF0ICgwLDApIHNpemUgMHgwCiAgICAgICBS
ZW5kZXJUZXh0IHtURVhUfSBhdCAoMCwwKSBzaXplIDB4MAogICAgIFJlbmRlckJsb2NrIHtpdGVt
fSBhdCAoMSw4NDMpIHNpemUgMjY1eDY3IFtiZ2NvbG9yPSNGRkZGRkZdIFtib3JkZXI6ICgxcHgg
c29saWQgI0NDQ0NDQykgbm9uZSAoMXB4IHNvbGlkICNDQ0NDQ0MpIG5vbmVdCi0gICAgICBSZW5k
ZXJJbmxpbmUge1RJVExFfSBhdCAoMCwwKSBzaXplIDEwM3gxNQorICAgICAgUmVuZGVySW5saW5l
IHt0aXRsZX0gYXQgKDAsMCkgc2l6ZSAxMDN4MTUKICAgICAgICAgUmVuZGVyVGV4dCB7VEVYVH0g
YXQgKDEwLDExKSBzaXplIDEwM3gxNQogICAgICAgICAgIHRleHQgcnVuIGF0ICgxMCwxMSkgd2lk
dGggMTAzOiAiTW96aWxsYSAxLjAgUkMyIgogICAgICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQgKDEx
MywxMSkgc2l6ZSA0eDE1CkBAIC0xMzcsNyArMTM3LDcgQEAgbGF5ZXIgYXQgKDEwLDEwKSBzaXpl
IDI4MngzMDIgY2xpcCBhdCAoMQogICAgICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQgKDAsMCkgc2l6
ZSAweDAKICAgICAgIFJlbmRlclRleHQge1RFWFR9IGF0ICgwLDApIHNpemUgMHgwCiAgICAgUmVu
ZGVyQmxvY2sge2l0ZW19IGF0ICgxLDkyMCkgc2l6ZSAyNjV4OTcgW2JnY29sb3I9I0ZGRkZGRl0g
W2JvcmRlcjogKDFweCBzb2xpZCAjQ0NDQ0NDKSBub25lICgxcHggc29saWQgI0NDQ0NDQykgbm9u
ZV0KLSAgICAgIFJlbmRlcklubGluZSB7VElUTEV9IGF0ICgwLDApIHNpemUgMjM2eDMwCisgICAg
ICBSZW5kZXJJbmxpbmUge3RpdGxlfSBhdCAoMCwwKSBzaXplIDIzNngzMAogICAgICAgICBSZW5k
ZXJUZXh0IHtURVhUfSBhdCAoMTAsMTEpIHNpemUgMjM2eDMwCiAgICAgICAgICAgdGV4dCBydW4g
YXQgKDEwLDExKSB3aWR0aCAyMzY6ICJqYXZhc2NyaXB0OiBpcyBkZXByZWNhdGVkLiBEb24ndCB1
c2UiCiAgICAgICAgICAgdGV4dCBydW4gYXQgKDEwLDI2KSB3aWR0aCAxMzogIml0LiIKQEAgLTE1
Miw3ICsxNTIsNyBAQCBsYXllciBhdCAoMTAsMTApIHNpemUgMjgyeDMwMiBjbGlwIGF0ICgxCiAg
ICAgICBSZW5kZXJUZXh0IHtURVhUfSBhdCAoMCwwKSBzaXplIDB4MAogICAgICAgUmVuZGVyVGV4
dCB7VEVYVH0gYXQgKDAsMCkgc2l6ZSAweDAKICAgICBSZW5kZXJCbG9jayB7aXRlbX0gYXQgKDEs
MTAyNykgc2l6ZSAyNjV4NjcgW2JnY29sb3I9I0ZGRkZGRl0gW2JvcmRlcjogKDFweCBzb2xpZCAj
Q0NDQ0NDKSBub25lICgxcHggc29saWQgI0NDQ0NDQykgbm9uZV0KLSAgICAgIFJlbmRlcklubGlu
ZSB7VElUTEV9IGF0ICgwLDApIHNpemUgMTc2eDE1CisgICAgICBSZW5kZXJJbmxpbmUge3RpdGxl
fSBhdCAoMCwwKSBzaXplIDE3NngxNQogICAgICAgICBSZW5kZXJUZXh0IHtURVhUfSBhdCAoMTAs
MTEpIHNpemUgMTc2eDE1CiAgICAgICAgICAgdGV4dCBydW4gYXQgKDEwLDExKSB3aWR0aCAxNzY6
ICJDb25kaXRpb25hbCBTY3JpcHQgTG9hZGluZyIKICAgICAgIFJlbmRlclRleHQge1RFWFR9IGF0
ICgwLDApIHNpemUgMHgwCkBAIC0xNjMsNyArMTYzLDcgQEAgbGF5ZXIgYXQgKDEwLDEwKSBzaXpl
IDI4MngzMDIgY2xpcCBhdCAoMQogICAgICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQgKDAsMCkgc2l6
ZSAweDAKICAgICAgIFJlbmRlclRleHQge1RFWFR9IGF0ICgwLDApIHNpemUgMHgwCiAgICAgUmVu
ZGVyQmxvY2sge2l0ZW19IGF0ICgxLDExMDQpIHNpemUgMjY1eDgyIFtiZ2NvbG9yPSNGRkZGRkZd
IFtib3JkZXI6ICgxcHggc29saWQgI0NDQ0NDQykgbm9uZSAoMXB4IHNvbGlkICNDQ0NDQ0MpIG5v
bmVdCi0gICAgICBSZW5kZXJJbmxpbmUge1RJVExFfSBhdCAoMCwwKSBzaXplIDExNXgxNQorICAg
ICAgUmVuZGVySW5saW5lIHt0aXRsZX0gYXQgKDAsMCkgc2l6ZSAxMTV4MTUKICAgICAgICAgUmVu
ZGVyVGV4dCB7VEVYVH0gYXQgKDEwLDExKSBzaXplIDExNXgxNQogICAgICAgICAgIHRleHQgcnVu
IGF0ICgxMCwxMSkgd2lkdGggMTE1OiAiU3RvcmllcyBhbmQgVG9vbHMiCiAgICAgICBSZW5kZXJU
ZXh0IHtURVhUfSBhdCAoMTI1LDExKSBzaXplIDR4MTUKQEAgLTE3Nyw3ICsxNzcsNyBAQCBsYXll
ciBhdCAoMTAsMTApIHNpemUgMjgyeDMwMiBjbGlwIGF0ICgxCiAgICAgICBSZW5kZXJUZXh0IHtU
RVhUfSBhdCAoMCwwKSBzaXplIDB4MAogICAgICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQgKDAsMCkg
c2l6ZSAweDAKICAgICBSZW5kZXJCbG9jayB7aXRlbX0gYXQgKDEsMTE5Nikgc2l6ZSAyNjV4OTcg
W2JnY29sb3I9I0ZGRkZGRl0gW2JvcmRlcjogKDFweCBzb2xpZCAjQ0NDQ0NDKSBub25lICgxcHgg
c29saWQgI0NDQ0NDQykgbm9uZV0KLSAgICAgIFJlbmRlcklubGluZSB7VElUTEV9IGF0ICgwLDAp
IHNpemUgMTY2eDE1CisgICAgICBSZW5kZXJJbmxpbmUge3RpdGxlfSBhdCAoMCwwKSBzaXplIDE2
NngxNQogICAgICAgICBSZW5kZXJUZXh0IHtURVhUfSBhdCAoMTAsMTEpIHNpemUgMTY2eDE1CiAg
ICAgICAgICAgdGV4dCBydW4gYXQgKDEwLDExKSB3aWR0aCAxNjY6ICJXaG9sZSBMb3R0byBHZWNr
byBMaW5rcyIKICAgICAgIFJlbmRlclRleHQge1RFWFR9IGF0ICgxNzYsMTEpIHNpemUgNHgxNQpJ
bmRleDogbGF5b3V0LXRlc3RzL2Zhc3QvdG9rZW5pemVyLzAwMi1leHBlY3RlZC50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUvbGF5b3V0LXRlc3RzL2Zhc3QvdG9rZW5p
emVyLzAwMi1leHBlY3RlZC50eHQsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC11IC1w
IC1yMS4xIGxheW91dC10ZXN0cy9mYXN0L3Rva2VuaXplci8wMDItZXhwZWN0ZWQudHh0Ci0tLSBs
YXlvdXQtdGVzdHMvZmFzdC90b2tlbml6ZXIvMDAyLWV4cGVjdGVkLnR4dAkyNiBKdWwgMjAwNCAy
Mjo0NTo1MSAtMDAwMAkxLjEKKysrIGxheW91dC10ZXN0cy9mYXN0L3Rva2VuaXplci8wMDItZXhw
ZWN0ZWQudHh0CTUgSnVsIDIwMDUgMjM6MjE6MjQgLTAwMDAKQEAgLTEsNyArMSw3IEBACiBsYXll
ciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKICAgUmVuZGVyQ2FudmFzIGF0ICgwLDApIHNpemUgODAw
eDYwMAotbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4MzQKLSAgUmVuZGVyQmxvY2sge0hUTUx9IGF0
ICgwLDApIHNpemUgODAweDM0Ci0gICAgUmVuZGVyQm9keSB7Qk9EWX0gYXQgKDgsOCkgc2l6ZSA3
ODR4MTgKK2xheWVyIGF0ICgwLDApIHNpemUgODAweDYwMAorICBSZW5kZXJCbG9jayB7SFRNTH0g
YXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisgICAgUmVuZGVyQm9keSB7Qk9EWX0gYXQgKDgsOCkgc2l6
ZSA3ODR4NTg0CiAgICAgICBSZW5kZXJUZXh0IHtURVhUfSBhdCAoMCwwKSBzaXplIDMxNXgxOAog
ICAgICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCAzMTU6ICJ5b3Ugc2hvdWxkbid0IHNlZSBh
IHJhbmRvbSBjaGluZXNlIGNoYXJhY3RlciBoZXJlIgpJbmRleDogbGF5b3V0LXRlc3RzL2Zhc3Qv
dG9rZW5pemVyL2V4dGVybmFsLXNjcmlwdC1kb2N1bWVudC13cml0ZS1leHBlY3RlZC50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUvbGF5b3V0LXRlc3RzL2Zhc3QvdG9r
ZW5pemVyL2V4dGVybmFsLXNjcmlwdC1kb2N1bWVudC13cml0ZS1leHBlY3RlZC50eHQsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC11IC1wIC1yMS4xIGxheW91dC10ZXN0cy9mYXN0L3Rv
a2VuaXplci9leHRlcm5hbC1zY3JpcHQtZG9jdW1lbnQtd3JpdGUtZXhwZWN0ZWQudHh0Ci0tLSBs
YXlvdXQtdGVzdHMvZmFzdC90b2tlbml6ZXIvZXh0ZXJuYWwtc2NyaXB0LWRvY3VtZW50LXdyaXRl
LWV4cGVjdGVkLnR4dAkxOSBPY3QgMjAwNCAxOTowMToxNSAtMDAwMAkxLjEKKysrIGxheW91dC10
ZXN0cy9mYXN0L3Rva2VuaXplci9leHRlcm5hbC1zY3JpcHQtZG9jdW1lbnQtd3JpdGUtZXhwZWN0
ZWQudHh0CTUgSnVsIDIwMDUgMjM6MjE6MjQgLTAwMDAKQEAgLTQsNSArNCw1IEBAIGxheWVyIGF0
ICgwLDApIHNpemUgODAweDM0CiAgIFJlbmRlckJsb2NrIHtIVE1MfSBhdCAoMCwwKSBzaXplIDgw
MHgzNAogICAgIFJlbmRlckJvZHkge0JPRFl9IGF0ICg4LDgpIHNpemUgNzg0eDE4CiAgICAgICBS
ZW5kZXJJbmxpbmUge1NQQU59IGF0ICgwLDApIHNpemUgMHgwCi0gICAgICBSZW5kZXJUZXh0IHtU
RVhUfSBhdCAoMCwwKSBzaXplIDIyNngxOAotICAgICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0
aCAyMjY6ICJUaGlzIHNob3VsZCBiZSBhIHNwYW46IFtvYmplY3Qgc3Bhbl0iCisgICAgICBSZW5k
ZXJUZXh0IHtURVhUfSBhdCAoMCwwKSBzaXplIDIzOXgxOAorICAgICAgICB0ZXh0IHJ1biBhdCAo
MCwwKSB3aWR0aCAyMzk6ICJUaGlzIHNob3VsZCBiZSBhIHNwYW46IFtvYmplY3QgU1BBTl0iCklu
ZGV4OiBsYXlvdXQtdGVzdHMvZmFzdC90b2tlbml6ZXIvc2NyaXB0X2V4dHJhX2Nsb3NlLWV4cGVj
dGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9sYXlvdXQtdGVz
dHMvZmFzdC90b2tlbml6ZXIvc2NyaXB0X2V4dHJhX2Nsb3NlLWV4cGVjdGVkLnR4dCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS4yCmRpZmYgLXUgLXAgLXIxLjIgbGF5b3V0LXRlc3RzL2Zhc3QvdG9r
ZW5pemVyL3NjcmlwdF9leHRyYV9jbG9zZS1leHBlY3RlZC50eHQKLS0tIGxheW91dC10ZXN0cy9m
YXN0L3Rva2VuaXplci9zY3JpcHRfZXh0cmFfY2xvc2UtZXhwZWN0ZWQudHh0CTMwIEp1biAyMDA1
IDAxOjI3OjQ3IC0wMDAwCTEuMgorKysgbGF5b3V0LXRlc3RzL2Zhc3QvdG9rZW5pemVyL3Njcmlw
dF9leHRyYV9jbG9zZS1leHBlY3RlZC50eHQJNSBKdWwgMjAwNSAyMzoyMToyNCAtMDAwMApAQCAt
Niw3ICs2LDYgQEAgbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCiAgICAgICBSZW5kZXJUZXh0
IHtURVhUfSBhdCAoMCwwKSBzaXplIDU1eDE4CiAgICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdp
ZHRoIDU1OiAiVEVTVC4uLlx4ezl9IgogICAgICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQgKDAsMCkg
c2l6ZSAweDAKLSAgICAgIFJlbmRlclRleHQge1RFWFR9IGF0ICgwLDApIHNpemUgMHgwCiAgICAg
ICBSZW5kZXJUZXh0IHtURVhUfSBhdCAoNTUsMCkgc2l6ZSAyMzJ4MTgKICAgICAgICAgdGV4dCBy
dW4gYXQgKDU1LDApIHdpZHRoIDY5OiAiUEFTU0VELiAiCiAgICAgICAgIHRleHQgcnVuIGF0ICgx
MjQsMCkgd2lkdGggMTYzOiAiVGhpcyB0ZXh0IHNob3VsZCBzaG93IHVwLiIKSW5kZXg6IGxheW91
dC10ZXN0cy9mYXN0L3Rva2VuaXplci9zY3JpcHRfcXVpcmstZXhwZWN0ZWQudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IGxheW91dC10ZXN0cy9mYXN0L3Rva2VuaXplci9zY3JpcHRfcXVpcmstZXhw
ZWN0ZWQudHh0CmRpZmYgLU4gbGF5b3V0LXRlc3RzL2Zhc3QvdG9rZW5pemVyL3NjcmlwdF9xdWly
ay1leHBlY3RlZC50eHQKLS0tIGxheW91dC10ZXN0cy9mYXN0L3Rva2VuaXplci9zY3JpcHRfcXVp
cmstZXhwZWN0ZWQudHh0CTE3IEp1biAyMDA1IDIwOjAwOjExIC0wMDAwCTEuMQorKysgL2Rldi9u
dWxsCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKQEAgLTEsOSArMCwwIEBACi1sYXllciBhdCAo
MCwwKSBzaXplIDgwMHg2MDAKLSAgUmVuZGVyQ2FudmFzIGF0ICgwLDApIHNpemUgODAweDYwMAot
bGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCi0gIFJlbmRlckJsb2NrIHtIVE1MfSBhdCAoMCww
KSBzaXplIDgwMHg2MDAKLSAgICBSZW5kZXJCb2R5IHtCT0RZfSBhdCAoOCw4KSBzaXplIDc4NHg1
ODQKLSAgICAgIFJlbmRlclRleHQge1RFWFR9IGF0ICgwLDApIHNpemUgMjc1eDE4Ci0gICAgICAg
IHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDExMjogIlRFU1QgUEFTU0VELiAiCi0gICAgICAgIHRl
eHQgcnVuIGF0ICgxMTIsMCkgd2lkdGggMTYzOiAiVGhpcyB0ZXh0IHNob3VsZCBzaG93IHVwLiIK
LSAgICAgIFJlbmRlclRleHQge1RFWFR9IGF0ICgwLDApIHNpemUgMHgwCkluZGV4OiBsYXlvdXQt
dGVzdHMvZmFzdC90b2tlbml6ZXIvc2NyaXB0X3F1aXJrLmh0bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogbGF5b3V0LXRlc3RzL2Zhc3QvdG9rZW5pemVyL3NjcmlwdF9xdWlyay5odG1sCmRpZmYgLU4g
bGF5b3V0LXRlc3RzL2Zhc3QvdG9rZW5pemVyL3NjcmlwdF9xdWlyay5odG1sCi0tLSBsYXlvdXQt
dGVzdHMvZmFzdC90b2tlbml6ZXIvc2NyaXB0X3F1aXJrLmh0bWwJMTcgSnVuIDIwMDUgMjA6MDA6
MTEgLTAwMDAJMS4xCisrKyAvZGV2L251bGwJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMApAQCAt
MSw2ICswLDAgQEAKLTxodG1sPgotPGJvZHk+Ci08c2NyaXB0IHNyYz0icmVzb3VyY2VzL2VtcHR5
X3NjcmlwdC5qcyIgLz4KLVRFU1QgUEFTU0VELiAgVGhpcyB0ZXh0IHNob3VsZCBzaG93IHVwLgot
PC9ib2R5PgotPC9odG1sClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>2842</attachid>
            <date>2005-07-06 23:18:28 -0700</date>
            <delta_ts>2005-07-07 20:23:32 -0700</delta_ts>
            <desc>Ready for review.  Now faster than trunk.</desc>
            <filename>patch-20.txt</filename>
            <type>text/plain</type>
            <size>787150</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUucGJwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvV2ViQ29yZS9XZWJDb3JlLnBicHJvai9wcm9qZWN0LnBieHByb2osdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuNTYxCmRpZmYgLXUgLXAgLXIxLjU2MSBXZWJDb3JlLnBicHJvai9w
cm9qZWN0LnBieHByb2oKLS0tIFdlYkNvcmUucGJwcm9qL3Byb2plY3QucGJ4cHJvagk2IEp1bCAy
MDA1IDAxOjI4OjQxIC0wMDAwCTEuNTYxCisrKyBXZWJDb3JlLnBicHJvai9wcm9qZWN0LnBieHBy
b2oJNyBKdWwgMjAwNSAwNTo1ODoxNyAtMDAwMApAQCAtMjE0LDMyICsyMTQsNiBAQAogLy8yRDIK
IC8vMkQzCiAvLzJENAotLy8zNTAKLS8vMzUxCi0vLzM1MgotLy8zNTMKLS8vMzU0Ci0JCTM1NEYy
NDg5MDJFRTI4NTkwQUNBMkFDQSA9IHsKLQkJCWZpbGVFbmNvZGluZyA9IDMwOwotCQkJaXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsKLQkJCWxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
Ci0JCQlwYXRoID0gS1dRRE9NTm9kZS5oOwotCQkJcmVmVHlwZSA9IDQ7Ci0JCQlzb3VyY2VUcmVl
ID0gIjxncm91cD4iOwotCQl9OwotCQkzNTRGMjQ4QTAyRUUyODU5MEFDQTJBQ0EgPSB7Ci0JCQlm
aWxlRW5jb2RpbmcgPSAzMDsKLQkJCWlzYSA9IFBCWEZpbGVSZWZlcmVuY2U7Ci0JCQlsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsKLQkJCXBhdGggPSBLV1FET01Ob2RlLmNw
cDsKLQkJCXJlZlR5cGUgPSA0OwotCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsKLS8v
MzUwCi0vLzM1MQotLy8zNTIKLS8vMzUzCi0vLzM1NAogLy81MTAKIC8vNTExCiAvLzUxMgpAQCAt
MjQ4NSw3ICsyNDU5LDYgQEAKIAkJCQk5M0YxOThEQzA4MjQ1RTU5MDAxRTlBQkMsCiAJCQkJOTNG
MTk4REUwODI0NUU1OTAwMUU5QUJDLAogCQkJCTkzRjE5OEUwMDgyNDVFNTkwMDFFOUFCQywKLQkJ
CQk5M0YxOThFMjA4MjQ1RTU5MDAxRTlBQkMsCiAJCQkJOTNGMTk4RTMwODI0NUU1OTAwMUU5QUJD
LAogCQkJCTkzRjE5OEU0MDgyNDVFNTkwMDFFOUFCQywKIAkJCQk5M0YxOThFNTA4MjQ1RTU5MDAx
RTlBQkMsCkBAIC0yNTYyLDcgKzI1MzUsNiBAQAogCQkJCTkzRjE5OTJFMDgyNDVFNTkwMDFFOUFC
QywKIAkJCQk5M0YxOTkyRjA4MjQ1RTU5MDAxRTlBQkMsCiAJCQkJOTNGMTk5MzAwODI0NUU1OTAw
MUU5QUJDLAotCQkJCTkzRjE5OTMxMDgyNDVFNTkwMDFFOUFCQywKIAkJCQk5M0YxOTkzMjA4MjQ1
RTU5MDAxRTlBQkMsCiAJCQkJOTNGMTk5MzMwODI0NUU1OTAwMUU5QUJDLAogCQkJCTkzRjE5OTM0
MDgyNDVFNTkwMDFFOUFCQywKQEAgLTI3MTcsNyArMjY4OSw2IEBACiAJCQkJOTNGMTk5QzkwODI0
NUU1OTAwMUU5QUJDLAogCQkJCTkzRjE5OUNBMDgyNDVFNTkwMDFFOUFCQywKIAkJCQk5M0YxOTlD
QjA4MjQ1RTU5MDAxRTlBQkMsCi0JCQkJOTNGMTk5Q0MwODI0NUU1OTAwMUU5QUJDLAogCQkJCTkz
RjE5OUNFMDgyNDVFNTkwMDFFOUFCQywKIAkJCQk5M0YxOTlDRjA4MjQ1RTU5MDAxRTlBQkMsCiAJ
CQkJOTNGMTk5RDAwODI0NUU1OTAwMUU5QUJDLApAQCAtMjc5OSw2ICsyNzcwLDcgQEAKIAkJCQk2
NURFODUyOTA4NzY1RkMzMDAxMTQyOEEsCiAJCQkJNjVERTg1MkEwODc2NUZDMzAwMTE0MjhBLAog
CQkJCUE4NUQ3QzE5MDg3QTZFRDkwMDZBOTE3MiwKKwkJCQlCQ0VGMzQzNTA4N0I1NjNFMDBCQkY4
MzMsCiAJCQkpOwogCQkJaXNhID0gUEJYSGVhZGVyc0J1aWxkUGhhc2U7CiAJCQlydW5Pbmx5Rm9y
RGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKQEAgLTMwNDMsMTIgKzMwMTUsNiBAQAogCQkJ
c2V0dGluZ3MgPSB7CiAJCQl9OwogCQl9OwotCQk5M0YxOThFMjA4MjQ1RTU5MDAxRTlBQkMgPSB7
Ci0JCQlmaWxlUmVmID0gRjUyM0QyMzYwMkRFNDM5NjAxODYzNUNBOwotCQkJaXNhID0gUEJYQnVp
bGRGaWxlOwotCQkJc2V0dGluZ3MgPSB7Ci0JCQl9OwotCQl9OwogCQk5M0YxOThFMzA4MjQ1RTU5
MDAxRTlBQkMgPSB7CiAJCQlmaWxlUmVmID0gRjUyM0QyMzgwMkRFNDM5NjAxODYzNUNBOwogCQkJ
aXNhID0gUEJYQnVpbGRGaWxlOwpAQCAtMzUwNSwxMiArMzQ3MSw2IEBACiAJCQlzZXR0aW5ncyA9
IHsKIAkJCX07CiAJCX07Ci0JCTkzRjE5OTMxMDgyNDVFNTkwMDFFOUFCQyA9IHsKLQkJCWZpbGVS
ZWYgPSAzNTRGMjQ4OTAyRUUyODU5MEFDQTJBQ0E7Ci0JCQlpc2EgPSBQQlhCdWlsZEZpbGU7Ci0J
CQlzZXR0aW5ncyA9IHsKLQkJCX07Ci0JCX07CiAJCTkzRjE5OTMyMDgyNDVFNTkwMDFFOUFCQyA9
IHsKIAkJCWZpbGVSZWYgPSBGNTg3ODY4NTAyREUzQjg2MDFFQTQxMjI7CiAJCQlpc2EgPSBQQlhC
dWlsZEZpbGU7CkBAIC00NDczLDEyICs0NDMzLDYgQEAKIAkJCXNldHRpbmdzID0gewogCQkJfTsK
IAkJfTsKLQkJOTNGMTk5Q0MwODI0NUU1OTAwMUU5QUJDID0gewotCQkJZmlsZVJlZiA9IEJDN0ZE
RTMyMDVDMUQ5QUIwMDcwQTkwMjsKLQkJCWlzYSA9IFBCWEJ1aWxkRmlsZTsKLQkJCXNldHRpbmdz
ID0gewotCQkJfTsKLQkJfTsKIAkJOTNGMTk5Q0UwODI0NUU1OTAwMUU5QUJDID0gewogCQkJZmls
ZVJlZiA9IEJDM0IzNjQ2MDVDOUQ1RTIwMEU0MjkwMjsKIAkJCWlzYSA9IFBCWEJ1aWxkRmlsZTsK
QEAgLTUwMTMsNyArNDk2Nyw2IEBACiAJCQkJOTNGMTlBOEIwODI0NUU1OTAwMUU5QUJDLAogCQkJ
CTkzRjE5QThDMDgyNDVFNTkwMDFFOUFCQywKIAkJCQk5M0YxOUE4RDA4MjQ1RTU5MDAxRTlBQkMs
Ci0JCQkJOTNGMTlBOEUwODI0NUU1OTAwMUU5QUJDLAogCQkJCTkzRjE5QThGMDgyNDVFNTkwMDFF
OUFCQywKIAkJCQk5M0YxOUE5MDA4MjQ1RTU5MDAxRTlBQkMsCiAJCQkJOTNGMTlBOTEwODI0NUU1
OTAwMUU5QUJDLApAQCAtNTA2Niw3ICs1MDE5LDYgQEAKIAkJCQk5M0YxOUFDMDA4MjQ1RTU5MDAx
RTlBQkMsCiAJCQkJOTNGMTlBQzEwODI0NUU1OTAwMUU5QUJDLAogCQkJCTkzRjE5QUMyMDgyNDVF
NTkwMDFFOUFCQywKLQkJCQk5M0YxOUFDMzA4MjQ1RTU5MDAxRTlBQkMsCiAJCQkJOTNGMTlBQzQw
ODI0NUU1OTAwMUU5QUJDLAogCQkJCTkzRjE5QUM1MDgyNDVFNTkwMDFFOUFCQywKIAkJCQk5M0Yx
OUFDNjA4MjQ1RTU5MDAxRTlBQkMsCkBAIC01MTA4LDcgKzUwNjAsNiBAQAogCQkJCTkzRjE5QUVD
MDgyNDVFNTkwMDFFOUFCQywKIAkJCQk5M0YxOUFFRDA4MjQ1RTU5MDAxRTlBQkMsCiAJCQkJOTNG
MTlBRUUwODI0NUU1OTAwMUU5QUJDLAotCQkJCTkzRjE5QUVGMDgyNDVFNTkwMDFFOUFCQywKIAkJ
CQk5M0YxOUFGMDA4MjQ1RTU5MDAxRTlBQkMsCiAJCQkJOTNGMTlBRjEwODI0NUU1OTAwMUU5QUJD
LAogCQkJCTkzRjE5QUYyMDgyNDVFNTkwMDFFOUFCQywKQEAgLTUxNzQsNiArNTEyNSw3IEBACiAJ
CQkJNTUwQTBCQ0QwODVGNjA0RDAwNzM1M0Q2LAogCQkJCTY1RjM3ODJBMDg3MEQ5NTgwMDBCMkY5
NCwKIAkJCQlBODVEN0MxODA4N0E2RUQ5MDA2QTkxNzIsCisJCQkJQkNFRjM0MzQwODdCNTYzRTAw
QkJGODMzLAogCQkJKTsKIAkJCWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNlOwogCQkJcnVuT25s
eUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CkBAIC01ODE0LDEyICs1NzY2LDYgQEAK
IAkJCXNldHRpbmdzID0gewogCQkJfTsKIAkJfTsKLQkJOTNGMTlBOEUwODI0NUU1OTAwMUU5QUJD
ID0gewotCQkJZmlsZVJlZiA9IEY1MjNEMjM1MDJERTQzOTYwMTg2MzVDQTsKLQkJCWlzYSA9IFBC
WEJ1aWxkRmlsZTsKLQkJCXNldHRpbmdzID0gewotCQkJfTsKLQkJfTsKIAkJOTNGMTlBOEYwODI0
NUU1OTAwMUU5QUJDID0gewogCQkJZmlsZVJlZiA9IEY1MjNEMjM3MDJERTQzOTYwMTg2MzVDQTsK
IAkJCWlzYSA9IFBCWEJ1aWxkRmlsZTsKQEAgLTYxMzIsMTIgKzYwNzgsNiBAQAogCQkJc2V0dGlu
Z3MgPSB7CiAJCQl9OwogCQl9OwotCQk5M0YxOUFDMzA4MjQ1RTU5MDAxRTlBQkMgPSB7Ci0JCQlm
aWxlUmVmID0gMzU0RjI0OEEwMkVFMjg1OTBBQ0EyQUNBOwotCQkJaXNhID0gUEJYQnVpbGRGaWxl
OwotCQkJc2V0dGluZ3MgPSB7Ci0JCQl9OwotCQl9OwogCQk5M0YxOUFDNDA4MjQ1RTU5MDAxRTlB
QkMgPSB7CiAJCQlmaWxlUmVmID0gRjUxMTdCQ0EwMkY5RkZFRjAxODYzNUNFOwogCQkJaXNhID0g
UEJYQnVpbGRGaWxlOwpAQCAtNjM4NCwxMiArNjMyNCw2IEBACiAJCQlzZXR0aW5ncyA9IHsKIAkJ
CX07CiAJCX07Ci0JCTkzRjE5QUVGMDgyNDVFNTkwMDFFOUFCQyA9IHsKLQkJCWZpbGVSZWYgPSBC
QzdGREUzMTA1QzFEOUFCMDA3MEE5MDI7Ci0JCQlpc2EgPSBQQlhCdWlsZEZpbGU7Ci0JCQlzZXR0
aW5ncyA9IHsKLQkJCX07Ci0JCX07CiAJCTkzRjE5QUYwMDgyNDVFNTkwMDFFOUFCQyA9IHsKIAkJ
CWZpbGVSZWYgPSBCQzNCMzY0NTA1QzlENUUyMDBFNDI5MDI7CiAJCQlpc2EgPSBQQlhCdWlsZEZp
bGU7CkBAIC02OTcxLDIyICs2OTA1LDYgQEAKIAkJCXJlZlR5cGUgPSA0OwogCQkJc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsKIAkJfTsKLQkJQkM3RkRFMzEwNUMxRDlBQjAwNzBBOTAyID0gewotCQkJ
ZmlsZUVuY29kaW5nID0gMzA7Ci0JCQlpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOwotCQkJbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7Ci0JCQlwYXRoID0geG1sX25hbWVzcGFj
ZV90YWJsZS5jcHA7Ci0JCQlyZWZUeXBlID0gNDsKLQkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
Ci0JCX07Ci0JCUJDN0ZERTMyMDVDMUQ5QUIwMDcwQTkwMiA9IHsKLQkJCWZpbGVFbmNvZGluZyA9
IDMwOwotCQkJaXNhID0gUEJYRmlsZVJlZmVyZW5jZTsKLQkJCWxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7Ci0JCQlwYXRoID0geG1sX25hbWVzcGFjZV90YWJsZS5oOwotCQkJcmVm
VHlwZSA9IDQ7Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwotCQl9OwogCQlCQzgwQTY5MzA0
NjhCNzgxMDBEQkNDOUMgPSB7CiAJCQlmaWxlRW5jb2RpbmcgPSAzMDsKIAkJCWlzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7CkBAIC03MTMyLDYgKzcwNTAsMzQgQEAKIAkJCXJlZlR5cGUgPSA0OwogCQkJ
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJQkNFRjM0MzIwODdCNTYzRTAwQkJGODMz
ID0geworCQkJZmlsZUVuY29kaW5nID0gMzA7CisJCQlpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOwor
CQkJbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7CisJCQlwYXRoID0gaHRt
bGZhY3RvcnkuY3BwOworCQkJcmVmVHlwZSA9IDQ7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4i
OworCQl9OworCQlCQ0VGMzQzMzA4N0I1NjNFMDBCQkY4MzMgPSB7CisJCQlmaWxlRW5jb2Rpbmcg
PSAzMDsKKwkJCWlzYSA9IFBCWEZpbGVSZWZlcmVuY2U7CisJCQlsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOworCQkJcGF0aCA9IGh0bWxmYWN0b3J5Lmg7CisJCQlyZWZUeXBlID0g
NDsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCUJDRUYzNDM0MDg3QjU2M0Uw
MEJCRjgzMyA9IHsKKwkJCWZpbGVSZWYgPSBCQ0VGMzQzMjA4N0I1NjNFMDBCQkY4MzM7CisJCQlp
c2EgPSBQQlhCdWlsZEZpbGU7CisJCQlzZXR0aW5ncyA9IHsKKwkJCX07CisJCX07CisJCUJDRUYz
NDM1MDg3QjU2M0UwMEJCRjgzMyA9IHsKKwkJCWZpbGVSZWYgPSBCQ0VGMzQzMzA4N0I1NjNFMDBC
QkY4MzM7CisJCQlpc2EgPSBQQlhCdWlsZEZpbGU7CisJCQlzZXR0aW5ncyA9IHsKKwkJCX07CisJ
CX07CiAJCUJDRjAxOTI0MDNEMzgwMjIwMEIyRDA0RCA9IHsKIAkJCWZpbGVFbmNvZGluZyA9IDMw
OwogCQkJaXNhID0gUEJYRmlsZVJlZmVyZW5jZTsKQEAgLTc1NDcsOCArNzQ5Myw2IEBACiAJCQkJ
MkQ5MDY2MEMwNjY1RDkzNzAwNkI2RjFBLAogCQkJCUY1ODc4NENEMDJERTM3NTkwMUVBNDEyMiwK
IAkJCQlGNTg3ODREQTAyREUzNzU5MDFFQTQxMjIsCi0JCQkJMzU0RjI0ODkwMkVFMjg1OTBBQ0Ey
QUNBLAotCQkJCTM1NEYyNDhBMDJFRTI4NTkwQUNBMkFDQSwKIAkJCQk5MzFDOEExNjAzODAyODhC
MDA4NjM1Q0UsCiAJCQkJOTMxQzhBMTcwMzgwMjg4QjAwODYzNUNFLAogCQkJCUJFRjdFRUEwMDVG
RjhGMEQwMDk3MTdFRSwKQEAgLTg1MTcsMjIgKzg0NjEsNiBAQAogCQkJcmVmVHlwZSA9IDQ7CiAJ
CQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OwotCQlGNTIzRDIzNTAyREU0Mzk2MDE4NjM1
Q0EgPSB7Ci0JCQlmaWxlRW5jb2RpbmcgPSAzMDsKLQkJCWlzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
Ci0JCQlsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsKLQkJCXBhdGggPSBk
dGQuY3BwOwotCQkJcmVmVHlwZSA9IDQ7Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwotCQl9
OwotCQlGNTIzRDIzNjAyREU0Mzk2MDE4NjM1Q0EgPSB7Ci0JCQlmaWxlRW5jb2RpbmcgPSAzMDsK
LQkJCWlzYSA9IFBCWEZpbGVSZWZlcmVuY2U7Ci0JCQlsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOwotCQkJcGF0aCA9IGR0ZC5oOwotCQkJcmVmVHlwZSA9IDQ7Ci0JCQlzb3VyY2VU
cmVlID0gIjxncm91cD4iOwotCQl9OwogCQlGNTIzRDIzNzAyREU0Mzk2MDE4NjM1Q0EgPSB7CiAJ
CQlmaWxlRW5jb2RpbmcgPSAzMDsKIAkJCWlzYSA9IFBCWEZpbGVSZWZlcmVuY2U7CkBAIC04NzU5
LDEwICs4Njg3LDEwIEBACiAJCX07CiAJCUY1MjNEMjc3MDJERTQzOTgwMTg2MzVDQSA9IHsKIAkJ
CWNoaWxkcmVuID0gKAorCQkJCUJDRUYzNDMyMDg3QjU2M0UwMEJCRjgzMywKKwkJCQlCQ0VGMzQz
MzA4N0I1NjNFMDBCQkY4MzMsCiAJCQkJNTUwQTBCQ0IwODVGNjA0RDAwNzM1M0Q2LAogCQkJCTU1
MEEwQkNDMDg1RjYwNEQwMDczNTNENiwKLQkJCQlGNTIzRDIzNTAyREU0Mzk2MDE4NjM1Q0EsCi0J
CQkJRjUyM0QyMzYwMkRFNDM5NjAxODYzNUNBLAogCQkJCUY1MjNEMjM3MDJERTQzOTYwMTg2MzVD
QSwKIAkJCQlGNTIzRDIzODAyREU0Mzk2MDE4NjM1Q0EsCiAJCQkJRjUyM0QyMzkwMkRFNDM5NjAx
ODYzNUNBLApAQCAtOTQ3NCw4ICs5NDAyLDYgQEAKIAkJCQlGNTIzRDMwNjAyREU0NDc2MDE4NjM1
Q0EsCiAJCQkJRjUyM0QzMDcwMkRFNDQ3NjAxODYzNUNBLAogCQkJCUY1MjNEMzA4MDJERTQ0NzYw
MTg2MzVDQSwKLQkJCQlCQzdGREUzMTA1QzFEOUFCMDA3MEE5MDIsCi0JCQkJQkM3RkRFMzIwNUMx
RDlBQjAwNzBBOTAyLAogCQkJCUY1MjNEMzA5MDJERTQ0NzYwMTg2MzVDQSwKIAkJCQlGNTIzRDMw
QTAyREU0NDc2MDE4NjM1Q0EsCiAJCQkpOwpJbmRleDoga2h0bWwva2h0bWxfcGFydC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwva2h0bWxfcGFydC5jcHAs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzI1CmRpZmYgLXUgLXAgLXIxLjMyNSBraHRtbC9raHRt
bF9wYXJ0LmNwcAotLS0ga2h0bWwva2h0bWxfcGFydC5jcHAJMjggSnVuIDIwMDUgMjM6MjI6MTYg
LTAwMDAJMS4zMjUKKysrIGtodG1sL2todG1sX3BhcnQuY3BwCTcgSnVsIDIwMDUgMDU6NTg6MjEg
LTAwMDAKQEAgLTIwOCw2ICsyMDgsNyBAQCBLSFRNTFBhcnQ6OktIVE1MUGFydCggS0hUTUxWaWV3
ICp2aWV3LCBRCiB2b2lkIEtIVE1MUGFydDo6aW5pdCggS0hUTUxWaWV3ICp2aWV3LCBHVUlQcm9m
aWxlIHByb2YgKQogewogICBBdG9taWNTdHJpbmc6OmluaXQoKTsKKyAgSFRNTE5hbWVzOjppbml0
KCk7IC8vIEZJWE1FOiBXZSBzaG91bGQgbWFrZSB0aGlzIGhhcHBlbiBvbmx5IHdoZW4gSFRNTCBp
cyB1c2VkLgogICBpZiAoIHByb2YgPT0gRGVmYXVsdEdVSSApCiAgICAgc2V0WE1MRmlsZSggImto
dG1sLnJjIiApOwogICBlbHNlIGlmICggcHJvZiA9PSBCcm93c2VyVmlld0dVSSApCkBAIC01NzI0
LDcgKzU3MjUsNyBAQCBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb25JbXBsICpLSFRNTFBhCiAg
ICAgaW50IGV4Y2VwdGlvbkNvZGUgPSAwOwogCiAgICAgaWYgKGQtPm1fdHlwaW5nU3R5bGUpIHsK
LSAgICAgICAgc3R5bGVFbGVtZW50ID0geG1sRG9jSW1wbCgpLT5jcmVhdGVIVE1MRWxlbWVudCgi
c3BhbiIsIGV4Y2VwdGlvbkNvZGUpOworICAgICAgICBzdHlsZUVsZW1lbnQgPSB4bWxEb2NJbXBs
KCktPmNyZWF0ZUVsZW1lbnROUyhYSFRNTF9OQU1FU1BBQ0UsICJzcGFuIiwgZXhjZXB0aW9uQ29k
ZSk7CiAgICAgICAgIGFzc2VydChleGNlcHRpb25Db2RlID09IDApOwogCiAgICAgICAgIHN0eWxl
RWxlbWVudC0+cmVmKCk7CkluZGV4OiBraHRtbC9raHRtbHZpZXcuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2todG1sdmlldy5jcHAsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuMTMzCmRpZmYgLXUgLXAgLXIxLjEzMyBraHRtbC9raHRtbHZpZXcuY3BwCi0t
LSBraHRtbC9raHRtbHZpZXcuY3BwCTExIE1heSAyMDA1IDAwOjU4OjI3IC0wMDAwCTEuMTMzCisr
KyBraHRtbC9raHRtbHZpZXcuY3BwCTcgSnVsIDIwMDUgMDU6NTg6MjMgLTAwMDAKQEAgLTYwNywx
MiArNjA3LDEyIEBAIHZvaWQgS0hUTUxWaWV3OjpsYXlvdXQoKQogICAgIGlmIChkb2N1bWVudC0+
aXNIVE1MRG9jdW1lbnQoKSkgewogICAgICAgICBOb2RlSW1wbCAqYm9keSA9IHN0YXRpY19jYXN0
PEhUTUxEb2N1bWVudEltcGwqPihkb2N1bWVudCktPmJvZHkoKTsKICAgICAgICAgaWYgKGJvZHkg
JiYgYm9keS0+cmVuZGVyZXIoKSkgewotICAgICAgICAgICAgaWYgKGJvZHktPmlkKCkgPT0gSURf
RlJBTUVTRVQpIHsKKyAgICAgICAgICAgIGlmIChib2R5LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
ZnJhbWVzZXQoKSkpIHsKICAgICAgICAgICAgICAgICBib2R5LT5yZW5kZXJlcigpLT5zZXROZWVk
c0xheW91dCh0cnVlKTsKICAgICAgICAgICAgICAgICB2TW9kZSA9IEFsd2F5c09mZjsKICAgICAg
ICAgICAgICAgICBoTW9kZSA9IEFsd2F5c09mZjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGVsc2UgaWYgKGJvZHktPmlkKCkgPT0gSURfQk9EWSkgeworICAgICAgICAgICAgZWxzZSBpZiAo
Ym9keS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJvZHkoKSkpIHsKICAgICAgICAgICAgICAgICBS
ZW5kZXJPYmplY3QqIG8gPSAocm9vdFJlbmRlcmVyLT5zdHlsZSgpLT5vdmVyZmxvdygpID09IE9W
SVNJQkxFKSA/IGJvZHktPnJlbmRlcmVyKCkgOiByb290UmVuZGVyZXI7CiAgICAgICAgICAgICAg
ICAgYXBwbHlPdmVyZmxvd1RvVmlld3BvcnQobywgaE1vZGUsIHZNb2RlKTsgLy8gT25seSBhcHBs
aWVzIHRvIEhUTUwgVUFzLCBub3QgdG8gWE1ML1hIVE1MIFVBcwogICAgICAgICAgICAgfQpAQCAt
ODc3LDEwICs4NzcsNyBAQCB2b2lkIEtIVE1MVmlldzo6dmlld3BvcnRNb3VzZURvdWJsZUNsaWNr
CiAKIHN0YXRpYyBib29sIGlzU3VibWl0SW1hZ2UoRE9NOjpOb2RlSW1wbCAqbm9kZSkKIHsKLSAg
ICByZXR1cm4gbm9kZQotICAgICAgICAmJiBub2RlLT5pc0hUTUxFbGVtZW50KCkKLSAgICAgICAg
JiYgbm9kZS0+aWQoKSA9PSBJRF9JTlBVVAotICAgICAgICAmJiBzdGF0aWNfY2FzdDxIVE1MSW5w
dXRFbGVtZW50SW1wbCo+KG5vZGUpLT5pbnB1dFR5cGUoKSA9PSBIVE1MSW5wdXRFbGVtZW50SW1w
bDo6SU1BR0U7CisgICAgcmV0dXJuIG5vZGUgJiYgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
OmlucHV0KCkpICYmIHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnRJbXBsKj4obm9kZSktPmlu
cHV0VHlwZSgpID09IEhUTUxJbnB1dEVsZW1lbnRJbXBsOjpJTUFHRTsKIH0KIAogdm9pZCBLSFRN
TFZpZXc6OnZpZXdwb3J0TW91c2VNb3ZlRXZlbnQoIFFNb3VzZUV2ZW50ICogX21vdXNlICkKSW5k
ZXg6IGtodG1sL2Nzcy9jc3NfYmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L1dlYkNvcmUva2h0bWwvY3NzL2Nzc19iYXNlLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4x
NQpkaWZmIC11IC1wIC1yMS4xNSBraHRtbC9jc3MvY3NzX2Jhc2UuY3BwCi0tLSBraHRtbC9jc3Mv
Y3NzX2Jhc2UuY3BwCTEyIEp1biAyMDA1IDA0OjA3OjMwIC0wMDAwCTEuMTUKKysrIGtodG1sL2Nz
cy9jc3NfYmFzZS5jcHAJNyBKdWwgMjAwNSAwNTo1ODoyMyAtMDAwMApAQCAtOTMsOSArOTMsMTUg
QEAgU3R5bGVMaXN0SW1wbDo6flN0eWxlTGlzdEltcGwoKQogCiAvLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQogCitjb25zdCBRdWFsaWZpZWROYW1lJiBDU1NTZWxlY3Rvcjo6YW55VGFnTmFtZSgp
Cit7CisgICAgc3RhdGljIFF1YWxpZmllZE5hbWUgYW55TmFtZShudWxsQXRvbSwgc3RhckF0b20s
IHN0YXJBdG9tKTsKKyAgICByZXR1cm4gYW55TmFtZTsKK30KKwogdm9pZCBDU1NTZWxlY3Rvcjo6
cHJpbnQodm9pZCkKIHsKLSAgICBrZERlYnVnKCA2MDgwICkgPDwgIltTZWxlY3RvcjogdGFnID0g
IiA8PCAgICAgICB0YWcgPDwgIiwgYXR0ciA9IFwiIiA8PCBhdHRyIDw8ICJcIiwgbWF0Y2ggPSBc
IiIgPDwgbWF0Y2gKKyAgICBrZERlYnVnKCA2MDgwICkgPDwgIltTZWxlY3RvcjogdGFnID0gIiA8
PCAgICAgICB0YWcubG9jYWxOYW1lKCkuc3RyaW5nKCkgPDwgIiwgYXR0ciA9IFwiIiA8PCBhdHRy
IDw8ICJcIiwgbWF0Y2ggPSBcIiIgPDwgbWF0Y2gKIAkJICAgIDw8ICJcIiB2YWx1ZSA9IFwiIiA8
PCB2YWx1ZS5zdHJpbmcoKS5sYXRpbjEoKSA8PCAiXCIgcmVsYXRpb24gPSAiIDw8IChpbnQpcmVs
YXRpb24KIAkJICAgIDw8ICJdIiA8PCBlbmRsOwogICAgIGlmICggdGFnSGlzdG9yeSApCkBAIC0x
MDcsNyArMTEzLDcgQEAgdW5zaWduZWQgaW50IENTU1NlbGVjdG9yOjpzcGVjaWZpY2l0eSgpCiB7
CiAgICAgLy8gRklYTUU6IFBzZXVkby1lbGVtZW50cyBhbmQgcHNldWRvLWNsYXNzZXMgZG8gbm90
IGhhdmUgdGhlIHNhbWUgc3BlY2lmaWNpdHkuIFRoaXMgZnVuY3Rpb24KICAgICAvLyBpc24ndCBx
dWl0ZSBjb3JyZWN0LgotICAgIGludCBzID0gKChsb2NhbE5hbWVQYXJ0KHRhZykgPT0gYW55TG9j
YWxOYW1lKSA/IDAgOiAxKTsKKyAgICBpbnQgcyA9ICh0YWcubG9jYWxOYW1lKCkgPT0gc3RhckF0
b20gPyAwIDogMSk7CiAgICAgc3dpdGNoKG1hdGNoKQogICAgIHsKICAgICBjYXNlIElkOgpAQCAt
MjQwLDYwICsyNDYsNTkgQEAgYm9vbCBDU1NTZWxlY3Rvcjo6b3BlcmF0b3IgPT0gKCBjb25zdCBD
UwogCiBET01TdHJpbmcgQ1NTU2VsZWN0b3I6OnNlbGVjdG9yVGV4dCgpIGNvbnN0CiB7Ci0gICAg
Ly8gRklYTUU6IFN1cHBvcnQgbmFtZXNwYWNlcyB3aGVuIGR1bXBpbmcgdGhlIHNlbGVjdG9yIHRl
eHQuICBUaGlzIHJlcXVpcmVzIHByZXNlcnZpbmcKLSAgICAvLyB0aGUgb3JpZ2luYWwgbmFtZXNw
YWNlIHByZWZpeCB1c2VkLiBVZ2guIC1kd2gKKyAgICAvLyBGSVhNRTogU3VwcG9ydCBuYW1lc3Bh
Y2VzIHdoZW4gZHVtcGluZyB0aGUgc2VsZWN0b3IgdGV4dC4gLWR3aAogICAgIERPTVN0cmluZyBz
dHI7CiAgICAgY29uc3QgQ1NTU2VsZWN0b3IqIGNzID0gdGhpczsKLSAgICBRX1VJTlQxNiB0YWcg
PSBsb2NhbE5hbWVQYXJ0KGNzLT50YWcpOwotICAgIGlmICggdGFnID09IGFueUxvY2FsTmFtZSAm
JiBjcy0+YXR0ciA9PSBBVFRSX0lEICYmIGNzLT5tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6RXhhY3Qg
KQorICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lID0gY3MtPnRhZy5sb2NhbE5hbWUo
KTsKKyAgICBpZiAobG9jYWxOYW1lID09IHN0YXJBdG9tICYmIGNzLT5hdHRyID09IEFUVFJfSUQg
JiYgY3MtPm1hdGNoID09IENTU1NlbGVjdG9yOjpFeGFjdCkKICAgICB7CiAgICAgICAgIHN0ciA9
ICIjIjsKICAgICAgICAgc3RyICs9IGNzLT52YWx1ZS5zdHJpbmcoKTsKICAgICB9Ci0gICAgZWxz
ZSBpZiAoIHRhZyA9PSBhbnlMb2NhbE5hbWUgJiYgY3MtPmF0dHIgPT0gQVRUUl9DTEFTUyAmJiBj
cy0+bWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OkNsYXNzICkKKyAgICBlbHNlIGlmIChsb2NhbE5hbWUg
PT0gc3RhckF0b20gJiYgY3MtPmF0dHIgPT0gQVRUUl9DTEFTUyAmJiBjcy0+bWF0Y2ggPT0gQ1NT
U2VsZWN0b3I6OkNsYXNzKQogICAgIHsKICAgICAgICAgc3RyID0gIi4iOwogICAgICAgICBzdHIg
Kz0gY3MtPnZhbHVlLnN0cmluZygpOwogICAgIH0KLSAgICBlbHNlIGlmICggdGFnID09IGFueUxv
Y2FsTmFtZSAmJiBjcy0+bWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzICkKKyAgICBl
bHNlIGlmIChsb2NhbE5hbWUgPT0gc3RhckF0b20gICYmIGNzLT5tYXRjaCA9PSBDU1NTZWxlY3Rv
cjo6UHNldWRvQ2xhc3MpCiAgICAgewogICAgICAgICBzdHIgPSAiOiI7CiAgICAgICAgIHN0ciAr
PSBjcy0+dmFsdWUuc3RyaW5nKCk7CiAgICAgfQotICAgIGVsc2UgaWYgKCB0YWcgPT0gYW55TG9j
YWxOYW1lICYmIGNzLT5tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVudCApCisgICAg
ZWxzZSBpZiAobG9jYWxOYW1lID09IHN0YXJBdG9tICYmIGNzLT5tYXRjaCA9PSBDU1NTZWxlY3Rv
cjo6UHNldWRvRWxlbWVudCkKICAgICB7CiAgICAgICAgIHN0ciA9ICI6OiI7CiAgICAgICAgIHN0
ciArPSBjcy0+dmFsdWUuc3RyaW5nKCk7CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAg
IGlmICggdGFnID09IGFueUxvY2FsTmFtZSApCisgICAgICAgIGlmIChsb2NhbE5hbWUgPT0gc3Rh
ckF0b20pCiAgICAgICAgICAgICBzdHIgPSAiKiI7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHN0ciA9IGdldFRhZ05hbWUoIGNzLT50YWcgKTsKLSAgICAgICAgaWYgKCBjcy0+YXR0ciA9PSBB
VFRSX0lEICYmIGNzLT5tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6RXhhY3QgKQorICAgICAgICAgICAg
c3RyID0gbG9jYWxOYW1lOworICAgICAgICBpZiAoY3MtPmF0dHIgPT0gQVRUUl9JRCAmJiBjcy0+
bWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OkV4YWN0KQogICAgICAgICB7CiAgICAgICAgICAgICBzdHIg
Kz0gIiMiOwogICAgICAgICAgICAgc3RyICs9IGNzLT52YWx1ZS5zdHJpbmcoKTsKICAgICAgICAg
fQotICAgICAgICBlbHNlIGlmICggY3MtPmF0dHIgPT0gQVRUUl9DTEFTUyAmJiBjcy0+bWF0Y2gg
PT0gQ1NTU2VsZWN0b3I6OkNsYXNzICkKKyAgICAgICAgZWxzZSBpZiAoY3MtPmF0dHIgPT0gQVRU
Ul9DTEFTUyAmJiBjcy0+bWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OkNsYXNzKQogICAgICAgICB7CiAg
ICAgICAgICAgICBzdHIgKz0gIi4iOwogICAgICAgICAgICAgc3RyICs9IGNzLT52YWx1ZS5zdHJp
bmcoKTsKICAgICAgICAgfQotICAgICAgICBlbHNlIGlmICggY3MtPm1hdGNoID09IENTU1NlbGVj
dG9yOjpQc2V1ZG9DbGFzcyApCisgICAgICAgIGVsc2UgaWYgKGNzLT5tYXRjaCA9PSBDU1NTZWxl
Y3Rvcjo6UHNldWRvQ2xhc3MpCiAgICAgICAgIHsKICAgICAgICAgICAgIHN0ciArPSAiOiI7CiAg
ICAgICAgICAgICBzdHIgKz0gY3MtPnZhbHVlLnN0cmluZygpOwogICAgICAgICB9Ci0gICAgICAg
IGVsc2UgaWYgKCBjcy0+bWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnQgKQorICAg
ICAgICBlbHNlIGlmIChjcy0+bWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnQpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIHN0ciArPSAiOjoiOwogICAgICAgICAgICAgc3RyICs9IGNz
LT52YWx1ZS5zdHJpbmcoKTsKICAgICAgICAgfQogICAgICAgICAvLyBvcHRpb25hbCBhdHRyaWJ1
dGUKLSAgICAgICAgaWYgKCBjcy0+YXR0ciApIHsKLSAgICAgICAgICAgIERPTVN0cmluZyBhdHRy
TmFtZSA9IGdldEF0dHJOYW1lKCBjcy0+YXR0ciApOworICAgICAgICBpZiAoY3MtPmF0dHIpIHsK
KyAgICAgICAgICAgIERPTVN0cmluZyBhdHRyTmFtZSA9IGdldEF0dHJOYW1lKGNzLT5hdHRyKTsK
ICAgICAgICAgICAgIHN0ciArPSAiWyI7CiAgICAgICAgICAgICBzdHIgKz0gYXR0ck5hbWU7CiAg
ICAgICAgICAgICBzd2l0Y2ggKGNzLT5tYXRjaCkgewpJbmRleDoga2h0bWwvY3NzL2Nzc19iYXNl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvY3NzL2Nzc19i
YXNlLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTIKZGlmZiAtdSAtcCAtcjEuMTIga2h0bWwv
Y3NzL2Nzc19iYXNlLmgKLS0tIGtodG1sL2Nzcy9jc3NfYmFzZS5oCTEyIEp1biAyMDA1IDA0OjA3
OjMwIC0wMDAwCTEuMTIKKysrIGtodG1sL2Nzcy9jc3NfYmFzZS5oCTcgSnVsIDIwMDUgMDU6NTg6
MjMgLTAwMDAKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJkb20vZG9tX3N0cmluZy5oIgog
I2luY2x1ZGUgImRvbS9kb21fbWlzYy5oIgogI2luY2x1ZGUgInhtbC9kb21fbm9kZWltcGwuaCIK
KyNpbmNsdWRlICJkb21fcW5hbWUuaCIKICNpbmNsdWRlICJtaXNjL3NoYXJlZC5oIgogI2luY2x1
ZGUgPHFkYXRldGltZS5oPgogI2luY2x1ZGUgPHFwdHJsaXN0Lmg+CkBAIC00NiwyMCArNDcsMjAg
QEAgbmFtZXNwYWNlIERPTSB7CiAgICAgY2xhc3MgRG9jdW1lbnRJbXBsOwogCiAgICAgc3RydWN0
IENTU05hbWVzcGFjZSB7Ci0gICAgICAgIERPTVN0cmluZyBtX3ByZWZpeDsKLSAgICAgICAgRE9N
U3RyaW5nIG1fdXJpOworICAgICAgICBBdG9taWNTdHJpbmcgbV9wcmVmaXg7CisgICAgICAgIEF0
b21pY1N0cmluZyBtX3VyaTsKICAgICAgICAgQ1NTTmFtZXNwYWNlKiBtX3BhcmVudDsKIAogICAg
ICAgICBNQUlOX1RIUkVBRF9BTExPQ0FURUQ7CiAKLSAgICAgICAgQ1NTTmFtZXNwYWNlKGNvbnN0
IERPTVN0cmluZyYgcCwgY29uc3QgRE9NU3RyaW5nJiB1LCBDU1NOYW1lc3BhY2UqIHBhcmVudCkg
CisgICAgICAgIENTU05hbWVzcGFjZShjb25zdCBBdG9taWNTdHJpbmcmIHAsIGNvbnN0IEF0b21p
Y1N0cmluZyYgdSwgQ1NTTmFtZXNwYWNlKiBwYXJlbnQpIAogICAgICAgICAgICAgOm1fcHJlZml4
KHApLCBtX3VyaSh1KSwgbV9wYXJlbnQocGFyZW50KSB7fQogICAgICAgICB+Q1NTTmFtZXNwYWNl
KCkgeyBkZWxldGUgbV9wYXJlbnQ7IH0KICAgICAgICAgCi0gICAgICAgIGNvbnN0IERPTVN0cmlu
ZyYgdXJpKCkgeyByZXR1cm4gbV91cmk7IH0KLSAgICAgICAgY29uc3QgRE9NU3RyaW5nJiBwcmVm
aXgoKSB7IHJldHVybiBtX3ByZWZpeDsgfQorICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHVy
aSgpIHsgcmV0dXJuIG1fdXJpOyB9CisgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4
KCkgeyByZXR1cm4gbV9wcmVmaXg7IH0KICAgICAgICAgCi0gICAgICAgIENTU05hbWVzcGFjZSog
bmFtZXNwYWNlRm9yUHJlZml4KGNvbnN0IERPTVN0cmluZyYgcHJlZml4KSB7CisgICAgICAgIENT
U05hbWVzcGFjZSogbmFtZXNwYWNlRm9yUHJlZml4KGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4
KSB7CiAgICAgICAgICAgICBpZiAocHJlZml4ID09IG1fcHJlZml4KQogICAgICAgICAgICAgICAg
IHJldHVybiB0aGlzOwogICAgICAgICAgICAgaWYgKG1fcGFyZW50KQpAQCAtNzIsOCArNzMsMTQg
QEAgbmFtZXNwYWNlIERPTSB7CiAgICAgY2xhc3MgQ1NTU2VsZWN0b3IKICAgICB7CiAgICAgcHVi
bGljOgotCUNTU1NlbGVjdG9yKCkKLQkgICAgOiB0YWdIaXN0b3J5KDApLCBzaW1wbGVTZWxlY3Rv
cigwKSwgbmV4dFNlbGVjdG9yKDApLCBhdHRyKDApLCB0YWcoYW55UU5hbWUpLAorICAgICAgICBD
U1NTZWxlY3RvcigpCisgICAgICAgICAgICA6IHRhZ0hpc3RvcnkoMCksIHNpbXBsZVNlbGVjdG9y
KDApLCBuZXh0U2VsZWN0b3IoMCksIGF0dHIoMCksIHRhZyhhbnlUYWdOYW1lKCkpLAorICAgICAg
ICAgICAgICByZWxhdGlvbiggRGVzY2VuZGFudCApLCBtYXRjaCggTm9uZSApLAorICAgICAgICAg
ICAgICBwc2V1ZG9JZCggMCApLCBfcHNldWRvVHlwZShQc2V1ZG9Ob3RQYXJzZWQpCisgICAgICAg
IHt9CisgICAgICAgIAorCUNTU1NlbGVjdG9yKGNvbnN0IFF1YWxpZmllZE5hbWUmIHFOYW1lKQor
CSAgICA6IHRhZ0hpc3RvcnkoMCksIHNpbXBsZVNlbGVjdG9yKDApLCBuZXh0U2VsZWN0b3IoMCks
IGF0dHIoMCksIHRhZyhxTmFtZSksCiAgICAgICAgICAgICAgIHJlbGF0aW9uKCBEZXNjZW5kYW50
ICksIG1hdGNoKCBOb25lICksCiAgICAgICAgICAgICAgIHBzZXVkb0lkKCAwICksIF9wc2V1ZG9U
eXBlKFBzZXVkb05vdFBhcnNlZCkKICAgICAgICAge30KQEAgLTE2NywxMiArMTc0LDE3IEBAIG5h
bWVzcGFjZSBET00gewogICAgICAgICAgICAgcmV0dXJuIF9wc2V1ZG9UeXBlOwogICAgICAgICB9
CiAKKyAgICAgICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGFueVRhZ05hbWUoKTsKKwor
ICAgICAgICBib29sIGhhc1RhZygpIGNvbnN0IHsgcmV0dXJuIHRhZyAhPSBhbnlUYWdOYW1lKCk7
IH0KKwogCW11dGFibGUgRE9NOjpBdG9taWNTdHJpbmcgdmFsdWU7CiAJQ1NTU2VsZWN0b3IqIHRh
Z0hpc3Rvcnk7CiAgICAgICAgIENTU1NlbGVjdG9yKiBzaW1wbGVTZWxlY3RvcjsgLy8gVXNlZCBm
b3IgOm5vdC4KICAgICAgICAgQ1NTU2VsZWN0b3IqIG5leHRTZWxlY3RvcjsgLy8gdXNlZCBmb3Ig
LC1jaGFpbmVkIHNlbGVjdG9ycwogCVFfVUlOVDMyICAgICBhdHRyOwotCVFfVUlOVDMyICAgICB0
YWc7CisJCisgICAgICAgIFF1YWxpZmllZE5hbWUgdGFnOwogCiAgICAgICAgIFJlbGF0aW9uIHJl
bGF0aW9uICAgICAgICAgICAgICA6IDM7CiAJbXV0YWJsZSBNYXRjaCAgbWF0Y2ggICAgICAgICAg
IDogNDsKSW5kZXg6IGtodG1sL2Nzcy9jc3NfcnVsZWltcGwuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2Nzcy9jc3NfcnVsZWltcGwuY3BwLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjE4CmRpZmYgLXUgLXAgLXIxLjE4IGtodG1sL2Nzcy9jc3NfcnVsZWlt
cGwuY3BwCi0tLSBraHRtbC9jc3MvY3NzX3J1bGVpbXBsLmNwcAkxMSBNYXkgMjAwNSAwNTo0OToz
NCAtMDAwMAkxLjE4CisrKyBraHRtbC9jc3MvY3NzX3J1bGVpbXBsLmNwcAk3IEp1bCAyMDA1IDA1
OjU4OjIzIC0wMDAwCkBAIC0zMSw3ICszMSw2IEBACiAjaW5jbHVkZSAiY3NzL2Nzc19ydWxlaW1w
bC5oIgogCiAjaW5jbHVkZSAibWlzYy9sb2FkZXIuaCIKLSNpbmNsdWRlICJtaXNjL2h0bWx0YWdz
LmgiCiAjaW5jbHVkZSAibWlzYy9odG1sYXR0cnMuaCIKICNpbmNsdWRlICJ4bWwvZG9tX2RvY2lt
cGwuaCIKIApJbmRleDoga2h0bWwvY3NzL2Nzc19ydWxlaW1wbC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2Nzcy9jc3NfcnVsZWltcGwuaCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS4xNApkaWZmIC11IC1wIC1yMS4xNCBraHRtbC9jc3MvY3NzX3J1bGVpbXBs
LmgKLS0tIGtodG1sL2Nzcy9jc3NfcnVsZWltcGwuaAkxMCBNYXkgMjAwNSAxODo0MjowMiAtMDAw
MAkxLjE0CisrKyBraHRtbC9jc3MvY3NzX3J1bGVpbXBsLmgJNyBKdWwgMjAwNSAwNTo1ODoyNCAt
MDAwMApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgImNzcy9jc3NfYmFzZS5oIgogI2luY2x1
ZGUgIm1pc2MvbG9hZGVyX2NsaWVudC5oIgogI2luY2x1ZGUgIm1pc2Mvc2hhcmVkLmgiCisjaW5j
bHVkZSAibWlzYy9tYWluX3RocmVhZF9tYWxsb2MuaCIKICNpbmNsdWRlICJjc3NfdmFsdWVpbXBs
LmgiCiAKIG5hbWVzcGFjZSBraHRtbCB7CkBAIC01MCw2ICs1MSw4IEBAIHB1YmxpYzoKICAgICBD
U1NSdWxlSW1wbChTdHlsZUJhc2VJbXBsICpwYXJlbnQpCiAgICAgICAgIDogU3R5bGVCYXNlSW1w
bChwYXJlbnQpLCBtX3R5cGUoQ1NTUnVsZTo6VU5LTk9XTl9SVUxFKSB7fQogCisgICAgTUFJTl9U
SFJFQURfQUxMT0NBVEVEOworCiAgICAgdmlydHVhbCBib29sIGlzUnVsZSgpIHsgcmV0dXJuIHRy
dWU7IH0KICAgICB1bnNpZ25lZCBzaG9ydCB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9
CiAKQEAgLTcxLDYgKzc0LDggQEAgcHVibGljOgogICAgIENTU0NoYXJzZXRSdWxlSW1wbChTdHls
ZUJhc2VJbXBsICpwYXJlbnQpCiAgICAgICAgIDogQ1NTUnVsZUltcGwocGFyZW50KSB7IG1fdHlw
ZSA9IENTU1J1bGU6OkNIQVJTRVRfUlVMRTsgfQogCisgICAgTUFJTl9USFJFQURfQUxMT0NBVEVE
OworCiAgICAgdmlydHVhbCBib29sIGlzQ2hhcnNldFJ1bGUoKSB7IHJldHVybiB0cnVlOyB9CiAK
ICAgICBET01TdHJpbmcgZW5jb2RpbmcoKSBjb25zdCB7IHJldHVybiBtX2VuY29kaW5nOyB9CkBA
IC04NSw5ICs5MCwxMCBAQCBjbGFzcyBDU1NGb250RmFjZVJ1bGVJbXBsIDogcHVibGljIENTU1J1
CiB7CiBwdWJsaWM6CiAgICAgQ1NTRm9udEZhY2VSdWxlSW1wbChTdHlsZUJhc2VJbXBsICpwYXJl
bnQpOwotCiAgICAgdmlydHVhbCB+Q1NTRm9udEZhY2VSdWxlSW1wbCgpOwogCisgICAgTUFJTl9U
SFJFQURfQUxMT0NBVEVEOworICAgIAogICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uSW1w
bCAqc3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlOyB9CiAKICAgICB2aXJ0dWFsIGJvb2wg
aXNGb250RmFjZVJ1bGUoKSB7IHJldHVybiB0cnVlOyB9CkBAIC0xMDQsOSArMTEwLDEwIEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRE9NOjpET01TdHJpbmcgJm1lZGlh
ICk7CiAgICAgQ1NTSW1wb3J0UnVsZUltcGwoIFN0eWxlQmFzZUltcGwgKnBhcmVudCwgY29uc3Qg
RE9NOjpET01TdHJpbmcgJmhyZWYsCiAgICAgICAgICAgICAgICAgICAgICAgIE1lZGlhTGlzdElt
cGwgKm1lZGlhICk7Ci0KICAgICB2aXJ0dWFsIH5DU1NJbXBvcnRSdWxlSW1wbCgpOwogCisgICAg
TUFJTl9USFJFQURfQUxMT0NBVEVEOworCiAgICAgRE9NOjpET01TdHJpbmcgaHJlZigpIGNvbnN0
IHsgcmV0dXJuIG1fc3RySHJlZjsgfQogICAgIE1lZGlhTGlzdEltcGwgKm1lZGlhKCkgY29uc3Qg
eyByZXR1cm4gbV9sc3RNZWRpYTsgfQogICAgIENTU1N0eWxlU2hlZXRJbXBsICpzdHlsZVNoZWV0
KCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZVNoZWV0OyB9CkBAIC0xNTYsOSArMTYzLDEwIEBAIHB1
YmxpYzoKICAgICBDU1NNZWRpYVJ1bGVJbXBsKCBTdHlsZUJhc2VJbXBsICpwYXJlbnQgKTsKICAg
ICBDU1NNZWRpYVJ1bGVJbXBsKCBTdHlsZUJhc2VJbXBsICpwYXJlbnQsIGNvbnN0IERPTTo6RE9N
U3RyaW5nICZtZWRpYSApOwogICAgIENTU01lZGlhUnVsZUltcGwoIFN0eWxlQmFzZUltcGwgKnBh
cmVudCwgTWVkaWFMaXN0SW1wbCAqbWVkaWFMaXN0LCBDU1NSdWxlTGlzdEltcGwgKnJ1bGVMaXN0
ICk7Ci0KICAgICB2aXJ0dWFsIH5DU1NNZWRpYVJ1bGVJbXBsKCk7CiAKKyAgICBNQUlOX1RIUkVB
RF9BTExPQ0FURUQ7CisKICAgICBNZWRpYUxpc3RJbXBsICptZWRpYSgpIGNvbnN0IHsgcmV0dXJu
IG1fbHN0TWVkaWE7IH0KICAgICBDU1NSdWxlTGlzdEltcGwgKmNzc1J1bGVzKCkgeyByZXR1cm4g
bV9sc3RDU1NSdWxlczsgfQogCkBAIC0xNzksOSArMTg3LDEwIEBAIGNsYXNzIENTU1BhZ2VSdWxl
SW1wbCA6IHB1YmxpYyBDU1NSdWxlSW0KIHsKIHB1YmxpYzoKICAgICBDU1NQYWdlUnVsZUltcGwo
U3R5bGVCYXNlSW1wbCAqcGFyZW50KTsKLQogICAgIHZpcnR1YWwgfkNTU1BhZ2VSdWxlSW1wbCgp
OwogCisgICAgTUFJTl9USFJFQURfQUxMT0NBVEVEOworCiAgICAgQ1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb25JbXBsICpzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGU7IH0KIAogICAgIHZp
cnR1YWwgYm9vbCBpc1BhZ2VSdWxlKCkgeyByZXR1cm4gdHJ1ZTsgfQpAQCAtMTk5LDkgKzIwOCwx
MCBAQCBjbGFzcyBDU1NTdHlsZVJ1bGVJbXBsIDogcHVibGljIENTU1J1bGVJCiB7CiBwdWJsaWM6
CiAgICAgQ1NTU3R5bGVSdWxlSW1wbChTdHlsZUJhc2VJbXBsICpwYXJlbnQpOwotCiAgICAgdmly
dHVhbCB+Q1NTU3R5bGVSdWxlSW1wbCgpOwogCisgICAgTUFJTl9USFJFQURfQUxMT0NBVEVEOwor
CiAgICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25JbXBsICpzdHlsZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc3R5bGU7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBpc1N0eWxlUnVsZSgpIHsgcmV0dXJu
IHRydWU7IH0KQEAgLTIyNyw2ICsyMzcsOCBAQCBjbGFzcyBDU1NVbmtub3duUnVsZUltcGwgOiBw
dWJsaWMgQ1NTUnVsCiBwdWJsaWM6CiAgICAgQ1NTVW5rbm93blJ1bGVJbXBsKFN0eWxlQmFzZUlt
cGwgKnBhcmVudCkgOiBDU1NSdWxlSW1wbChwYXJlbnQpIHt9CiAKKyAgICBNQUlOX1RIUkVBRF9B
TExPQ0FURUQ7CisKICAgICB2aXJ0dWFsIGJvb2wgaXNVbmtub3duUnVsZSgpIHsgcmV0dXJuIHRy
dWU7IH0KIH07CiAKSW5kZXg6IGtodG1sL2Nzcy9jc3Nfc3R5bGVzaGVldGltcGwuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2Nzcy9jc3Nfc3R5bGVzaGVl
dGltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEyCmRpZmYgLXUgLXAgLXIxLjEyIGto
dG1sL2Nzcy9jc3Nfc3R5bGVzaGVldGltcGwuY3BwCi0tLSBraHRtbC9jc3MvY3NzX3N0eWxlc2hl
ZXRpbXBsLmNwcAkxMSBNYXkgMjAwNSAwMDo1ODoyNyAtMDAwMAkxLjEyCisrKyBraHRtbC9jc3Mv
Y3NzX3N0eWxlc2hlZXRpbXBsLmNwcAk3IEp1bCAyMDA1IDA1OjU4OjI0IC0wMDAwCkBAIC0zOCw4
ICszOCw2IEBACiAjaW5jbHVkZSAiaHRtbC9odG1sX2RvY3VtZW50aW1wbC5oIgogI2luY2x1ZGUg
Im1pc2MvbG9hZGVyLmgiCiAKLSNpbmNsdWRlICJ4bWxfbmFtZXNwYWNlX3RhYmxlLmgiCi0KICNp
bmNsdWRlIDxrZGVidWcuaD4KIAogdXNpbmcgbmFtZXNwYWNlIERPTTsKQEAgLTIxMCw3ICsyMDgs
NyBAQCB2b2lkIENTU1N0eWxlU2hlZXRJbXBsOjpkZWxldGVSdWxlKCB1bnNpCiAgICAgYi0+ZGVy
ZWYoKTsKIH0KIAotdm9pZCBDU1NTdHlsZVNoZWV0SW1wbDo6YWRkTmFtZXNwYWNlKENTU1BhcnNl
ciogcCwgY29uc3QgRE9NOjpET01TdHJpbmcmIHByZWZpeCwgY29uc3QgRE9NOjpET01TdHJpbmcm
IHVyaSkKK3ZvaWQgQ1NTU3R5bGVTaGVldEltcGw6OmFkZE5hbWVzcGFjZShDU1NQYXJzZXIqIHAs
IGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4LCBjb25zdCBBdG9taWNTdHJpbmcmIHVyaSkKIHsK
ICAgICBpZiAodXJpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjIwLDI2ICsyMTgs
MjEgQEAgdm9pZCBDU1NTdHlsZVNoZWV0SW1wbDo6YWRkTmFtZXNwYWNlKENTUwogICAgIGlmIChw
cmVmaXguaXNFbXB0eSgpKQogICAgICAgICAvLyBTZXQgdGhlIGRlZmF1bHQgbmFtZXNwYWNlIG9u
IHRoZSBwYXJzZXIgc28gdGhhdCBzZWxlY3RvcnMgdGhhdCBvbWl0IG5hbWVzcGFjZSBpbmZvIHdp
bGwKICAgICAgICAgLy8gYmUgYWJsZSB0byBwaWNrIGl0IHVwIGVhc2lseS4KLSAgICAgICAgcC0+
ZGVmYXVsdE5hbWVzcGFjZSA9IFhtbE5hbWVzcGFjZVRhYmxlOjpnZXROYW1lc3BhY2VJRCh1cmks
IGZhbHNlKTsKKyAgICAgICAgcC0+ZGVmYXVsdE5hbWVzcGFjZSA9IHVyaTsKIH0KIAotdm9pZCBD
U1NTdHlsZVNoZWV0SW1wbDo6ZGV0ZXJtaW5lTmFtZXNwYWNlKFFfVUlOVDMyJiBpZCwgY29uc3Qg
RE9NOjpET01TdHJpbmcmIHByZWZpeCkKK2NvbnN0IEF0b21pY1N0cmluZyYgQ1NTU3R5bGVTaGVl
dEltcGw6OmRldGVybWluZU5hbWVzcGFjZShjb25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCkKIHsK
LSAgICAvLyBJZiB0aGUgc3R5bGVzaGVldCBoYXMgbm8gbmFtZXNwYWNlcyB3ZSBjYW4ganVzdCBy
ZXR1cm4uICBUaGVyZSB3b24ndCBiZSBhbnkgbmVlZCB0byBldmVyIGNoZWNrCi0gICAgLy8gbmFt
ZXNwYWNlIHZhbHVlcyBpbiBzZWxlY3RvcnMuCi0gICAgaWYgKCFtX25hbWVzcGFjZXMpCi0gICAg
ICAgIHJldHVybjsKLSAgICAKICAgICBpZiAocHJlZml4LmlzRW1wdHkoKSkKLSAgICAgICAgaWQg
PSBtYWtlSWQobm9OYW1lc3BhY2UsIGxvY2FsTmFtZVBhcnQoaWQpKTsgLy8gTm8gbmFtZXNwYWNl
LiBJZiBhbiBlbGVtZW50L2F0dHJpYnV0ZSBoYXMgYSBuYW1lc3BhY2UsIHdlIHdvbid0IG1hdGNo
IGl0LgotICAgIGVsc2UgaWYgKHByZWZpeCA9PSAiKiIpCi0gICAgICAgIGlkID0gbWFrZUlkKGFu
eU5hbWVzcGFjZSwgbG9jYWxOYW1lUGFydChpZCkpOyAvLyBXZSdsbCBtYXRjaCBhbnkgbmFtZXNw
YWNlLgotICAgIGVsc2UgeworICAgICAgICByZXR1cm4gZW1wdHlBdG9tOyAvLyBObyBuYW1lc3Bh
Y2UuIElmIGFuIGVsZW1lbnQvYXR0cmlidXRlIGhhcyBhIG5hbWVzcGFjZSwgd2Ugd29uJ3QgbWF0
Y2ggaXQuCisgICAgZWxzZSBpZiAocHJlZml4ID09IHN0YXJBdG9tKQorICAgICAgICByZXR1cm4g
c3RhckF0b207IC8vIFdlJ2xsIG1hdGNoIGFueSBuYW1lc3BhY2UuCisgICAgZWxzZSBpZiAobV9u
YW1lc3BhY2VzKSB7CiAgICAgICAgIENTU05hbWVzcGFjZSogbnMgPSBtX25hbWVzcGFjZXMtPm5h
bWVzcGFjZUZvclByZWZpeChwcmVmaXgpOwogICAgICAgICBpZiAobnMpCi0gICAgICAgICAgICAv
LyBMb29rIHVwIHRoZSBpZCBmb3IgdGhpcyBuYW1lc3BhY2UgVVJJLgotICAgICAgICAgICAgaWQg
PSBtYWtlSWQoWG1sTmFtZXNwYWNlVGFibGU6OmdldE5hbWVzcGFjZUlEKG5zLT51cmkoKSwgZmFs
c2UpLCBsb2NhbE5hbWVQYXJ0KGlkKSk7CisgICAgICAgICAgICByZXR1cm4gbnMtPnVyaSgpOwog
ICAgIH0KKyAgICByZXR1cm4gZW1wdHlBdG9tOyAvLyBBc3N1bWUgd2Ugd29udCBtYXRjaCBhbnkg
bmFtZXNwYWNlcy4KIH0KIAogYm9vbCBDU1NTdHlsZVNoZWV0SW1wbDo6cGFyc2VTdHJpbmcoY29u
c3QgRE9NU3RyaW5nICZzdHJpbmcsIGJvb2wgc3RyaWN0KQpJbmRleDoga2h0bWwvY3NzL2Nzc19z
dHlsZXNoZWV0aW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2to
dG1sL2Nzcy9jc3Nfc3R5bGVzaGVldGltcGwuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMQpk
aWZmIC11IC1wIC1yMS4xMSBraHRtbC9jc3MvY3NzX3N0eWxlc2hlZXRpbXBsLmgKLS0tIGtodG1s
L2Nzcy9jc3Nfc3R5bGVzaGVldGltcGwuaAkxMSBNYXkgMjAwNSAwMDo1ODoyNyAtMDAwMAkxLjEx
CisrKyBraHRtbC9jc3MvY3NzX3N0eWxlc2hlZXRpbXBsLmgJNyBKdWwgMjAwNSAwNTo1ODoyNCAt
MDAwMApAQCAtMTA0LDggKzEwNCw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGRlbGV0ZVJ1bGUgKCB1
bnNpZ25lZCBsb25nIGluZGV4LCBpbnQgJmV4Y2VwdGlvbmNvZGUgKTsKICAgICB1bnNpZ25lZCBs
b25nIGFkZFJ1bGUgKCBjb25zdCBET01TdHJpbmcgJnNlbGVjdG9yLCBjb25zdCBET01TdHJpbmcg
JnN0eWxlLCBsb25nIGluZGV4LCBpbnQgJmV4Y2VwdGlvbmNvZGUgKTsKIAotICAgIHZvaWQgYWRk
TmFtZXNwYWNlKENTU1BhcnNlciogcCwgY29uc3QgRE9NOjpET01TdHJpbmcmIHByZWZpeCwgY29u
c3QgRE9NOjpET01TdHJpbmcmIHVyaSk7Ci0gICAgdm9pZCBkZXRlcm1pbmVOYW1lc3BhY2UoUV9V
SU5UMzImIGlkLCBjb25zdCBET006OkRPTVN0cmluZyYgcHJlZml4KTsKKyAgICB2b2lkIGFkZE5h
bWVzcGFjZShDU1NQYXJzZXIqIHAsIGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4LCBjb25zdCBB
dG9taWNTdHJpbmcmIHVyaSk7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBkZXRlcm1pbmVOYW1l
c3BhY2UoY29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgpOwogICAgIAogICAgIHZpcnR1YWwgYm9v
bCBwYXJzZVN0cmluZyggY29uc3QgRE9NU3RyaW5nICZzdHJpbmcsIGJvb2wgc3RyaWN0ID0gdHJ1
ZSApOwogCkluZGV4OiBraHRtbC9jc3MvY3NzcGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9jc3MvY3NzcGFyc2VyLmNwcCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS45OApkaWZmIC11IC1wIC1yMS45OCBraHRtbC9jc3MvY3NzcGFyc2VyLmNwcAot
LS0ga2h0bWwvY3NzL2Nzc3BhcnNlci5jcHAJMTEgTWF5IDIwMDUgMDI6MTA6MDkgLTAwMDAJMS45
OAorKysga2h0bWwvY3NzL2Nzc3BhcnNlci5jcHAJNyBKdWwgMjAwNSAwNTo1ODoyNiAtMDAwMApA
QCAtMTAyLDcgKzEwMiw3IEBAIENTU1BhcnNlcjo6Q1NTUGFyc2VyKCBib29sIHN0cmljdFBhcnNp
bmcKICAgICBpbXBvcnRhbnQgPSBmYWxzZTsKICAgICBpblBhcnNlU2hvcnRIYW5kID0gZmFsc2U7
CiAgICAgCi0gICAgZGVmYXVsdE5hbWVzcGFjZSA9IGFueU5hbWVzcGFjZTsKKyAgICBkZWZhdWx0
TmFtZXNwYWNlID0gc3RhckF0b207CiAgICAgCiAgICAgeXlfc3RhcnQgPSAxOwogCkBAIC0xNjEs
NyArMTYxLDcgQEAgdm9pZCBDU1NQYXJzZXI6OnNldHVwUGFyc2VyKGNvbnN0IGNoYXIgKgogdm9p
ZCBDU1NQYXJzZXI6OnBhcnNlU2hlZXQoIENTU1N0eWxlU2hlZXRJbXBsICpzaGVldCwgY29uc3Qg
RE9NU3RyaW5nICZzdHJpbmcgKQogewogICAgIHN0eWxlRWxlbWVudCA9IHNoZWV0OwotICAgIGRl
ZmF1bHROYW1lc3BhY2UgPSBhbnlOYW1lc3BhY2U7IC8vIFJlc2V0IHRoZSBkZWZhdWx0IG5hbWVz
cGFjZS4KKyAgICBkZWZhdWx0TmFtZXNwYWNlID0gc3RhckF0b207IC8vIFJlc2V0IHRoZSBkZWZh
dWx0IG5hbWVzcGFjZS4KICAgICAKICAgICBzZXR1cFBhcnNlciAoIiIsIHN0cmluZywgIiIpOwog
CkluZGV4OiBraHRtbC9jc3MvY3NzcGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L1dlYkNvcmUva2h0bWwvY3NzL2Nzc3BhcnNlci5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjMwCmRpZmYgLXUgLXAgLXIxLjMwIGtodG1sL2Nzcy9jc3NwYXJzZXIuaAotLS0ga2h0bWwvY3Nz
L2Nzc3BhcnNlci5oCTE5IE5vdiAyMDA0IDAwOjEyOjIwIC0wMDAwCTEuMzAKKysrIGtodG1sL2Nz
cy9jc3NwYXJzZXIuaAk3IEp1bCAyMDA1IDA1OjU4OjI2IC0wMDAwCkBAIC0xNjQsNyArMTY0LDcg
QEAgbmFtZXNwYWNlIERPTSB7CiAJaW50IG1heFBhcnNlZFByb3BlcnRpZXM7CiAJYm9vbCBpblBh
cnNlU2hvcnRIYW5kOwogCi0gICAgICAgIFFfVUlOVDE2IGRlZmF1bHROYW1lc3BhY2U7CisgICAg
ICAgIEF0b21pY1N0cmluZyBkZWZhdWx0TmFtZXNwYWNlOwogICAgICAgICAKIAlzdGF0aWMgQ1NT
UGFyc2VyICpjdXJyZW50UGFyc2VyOwogCkluZGV4OiBraHRtbC9jc3MvY3Nzc3R5bGVzZWxlY3Rv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvY3NzL2Nz
c3N0eWxlc2VsZWN0b3IuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE4OApkaWZmIC11IC1w
IC1yMS4xODgga2h0bWwvY3NzL2Nzc3N0eWxlc2VsZWN0b3IuY3BwCi0tLSBraHRtbC9jc3MvY3Nz
c3R5bGVzZWxlY3Rvci5jcHAJNiBKdWwgMjAwNSAwMToyODo0MSAtMDAwMAkxLjE4OAorKysga2h0
bWwvY3NzL2Nzc3N0eWxlc2VsZWN0b3IuY3BwCTcgSnVsIDIwMDUgMDU6NTg6MzAgLTAwMDAKQEAg
LTMzOSw3ICszMzksNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUnVsZXMoQ1NTUnVs
CiAgICAgICAgICAgICBtYXRjaFJ1bGVzRm9yTGlzdChydWxlcy0+Z2V0Q2xhc3NSdWxlcyhzaW5n
bGVDbGFzcy0+c3RyaW5nKCkuaW1wbGVtZW50YXRpb24oKSksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJ
bmRleCk7CiAgICAgfQotICAgIG1hdGNoUnVsZXNGb3JMaXN0KHJ1bGVzLT5nZXRUYWdSdWxlcyhs
b2NhbE5hbWVQYXJ0KGVsZW1lbnQtPmlkKCkpKSwKKyAgICBtYXRjaFJ1bGVzRm9yTGlzdChydWxl
cy0+Z2V0VGFnUnVsZXMoZWxlbWVudC0+bG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSksCiAg
ICAgICAgICAgICAgICAgICAgICAgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgpOwogICAg
IG1hdGNoUnVsZXNGb3JMaXN0KHJ1bGVzLT5nZXRVbml2ZXJzYWxSdWxlcygpLCBmaXJzdFJ1bGVJ
bmRleCwgbGFzdFJ1bGVJbmRleCk7CiAgICAgCkBAIC0zNjAsOSArMzYwLDkgQEAgdm9pZCBDU1NT
dHlsZVNlbGVjdG9yOjptYXRjaFJ1bGVzRm9yTGlzdAogICAgIGlmICghcnVsZXMpIHJldHVybjsK
ICAgICBmb3IgKENTU1J1bGVEYXRhKiBkID0gcnVsZXMtPmZpcnN0KCk7IGQ7IGQgPSBkLT5uZXh0
KCkpIHsKICAgICAgICAgQ1NTU3R5bGVSdWxlSW1wbCogcnVsZSA9IGQtPnJ1bGUoKTsKLSAgICAg
ICAgUV9VSU5UMTYgY3NzVGFnSWQgPSBsb2NhbE5hbWVQYXJ0KGVsZW1lbnQtPmlkKCkpOwotICAg
ICAgICBRX1VJTlQxNiB0YWcgPSBsb2NhbE5hbWVQYXJ0KGQtPnNlbGVjdG9yKCktPnRhZyk7Ci0g
ICAgICAgIGlmICgoY3NzVGFnSWQgPT0gdGFnIHx8IHRhZyA9PSBhbnlMb2NhbE5hbWUpICYmIGNo
ZWNrU2VsZWN0b3IoZC0+c2VsZWN0b3IoKSwgZWxlbWVudCkpIHsKKyAgICAgICAgY29uc3QgQXRv
bWljU3RyaW5nJiBsb2NhbE5hbWUgPSBlbGVtZW50LT5sb2NhbE5hbWUoKTsKKyAgICAgICAgY29u
c3QgQXRvbWljU3RyaW5nJiBzZWxlY3RvckxvY2FsTmFtZSA9IGQtPnNlbGVjdG9yKCktPnRhZy5s
b2NhbE5hbWUoKTsKKyAgICAgICAgaWYgKChsb2NhbE5hbWUgPT0gc2VsZWN0b3JMb2NhbE5hbWUg
fHwgc2VsZWN0b3JMb2NhbE5hbWUgPT0gc3RhckF0b20pICYmIGNoZWNrU2VsZWN0b3IoZC0+c2Vs
ZWN0b3IoKSwgZWxlbWVudCkpIHsKICAgICAgICAgICAgIC8vIElmIHRoZSBydWxlIGhhcyBubyBw
cm9wZXJ0aWVzIHRvIGFwcGx5LCB0aGVuIGlnbm9yZSBpdC4KICAgICAgICAgICAgIENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uSW1wbCogZGVjbCA9IHJ1bGUtPmRlY2xhcmF0aW9uKCk7CiAgICAg
ICAgICAgICBpZiAoIWRlY2wgfHwgIWRlY2wtPmxlbmd0aCgpKSBjb250aW51ZTsKQEAgLTYwOSw3
ICs2MDksNyBAQCBib29sIENTU1N0eWxlU2VsZWN0b3I6OmNhblNoYXJlU3R5bGVXaXRoCiAgICAg
aWYgKG4tPmlzU3R5bGVkRWxlbWVudCgpKSB7CiAgICAgICAgIGJvb2wgbW91c2VJbnNpZGUgPSBl
bGVtZW50LT5yZW5kZXJlcigpID8gZWxlbWVudC0+cmVuZGVyZXIoKS0+bW91c2VJbnNpZGUoKSA6
IGZhbHNlOwogICAgICAgICBTdHlsZWRFbGVtZW50SW1wbCogcyA9IHN0YXRpY19jYXN0PFN0eWxl
ZEVsZW1lbnRJbXBsKj4obik7Ci0gICAgICAgIGlmIChzLT5yZW5kZXJlcigpICYmIChzLT5pZCgp
ID09IGVsZW1lbnQtPmlkKCkpICYmICFzLT5oYXNJRCgpICYmCisgICAgICAgIGlmIChzLT5yZW5k
ZXJlcigpICYmIChzLT50YWdOYW1lKCkgPT0gZWxlbWVudC0+dGFnTmFtZSgpKSAmJiAhcy0+aGFz
SUQoKSAmJgogICAgICAgICAgICAgKHMtPmhhc0NsYXNzKCkgPT0gZWxlbWVudC0+aGFzQ2xhc3Mo
KSkgJiYgIXMtPmlubGluZVN0eWxlRGVjbCgpICYmCiAgICAgICAgICAgICAocy0+aGFzTWFwcGVk
QXR0cmlidXRlcygpID09IHN0eWxlZEVsZW1lbnQtPmhhc01hcHBlZEF0dHJpYnV0ZXMoKSkgJiYK
ICAgICAgICAgICAgIChzLT5pc0xpbmsoKSA9PSBlbGVtZW50LT5pc0xpbmsoKSkgJiYgCkBAIC04
ODUsMjMgKzg4NSwyMyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFkanVzdFJlbmRlclN0eWxl
CiAgICAgICAgIC8vIFNpdGVzIGFsc28gY29tbW9ubHkgdXNlIGRpc3BsYXk6aW5saW5lL2Jsb2Nr
IG9uIDx0ZD5zIGFuZCA8dGFibGU+cy4gIEluIHF1aXJrcyBtb2RlIHdlIGZvcmNlCiAgICAgICAg
IC8vIHRoZXNlIHRhZ3MgdG8gcmV0YWluIHRoZWlyIGRpc3BsYXkgdHlwZXMuCiAgICAgICAgIGlm
ICghc3RyaWN0UGFyc2luZyAmJiBlKSB7Ci0gICAgICAgICAgICBpZiAoZS0+aWQoKSA9PSBJRF9U
RCkgeworICAgICAgICAgICAgaWYgKGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0ZCgpKSkgewog
ICAgICAgICAgICAgICAgIHN0eWxlLT5zZXREaXNwbGF5KFRBQkxFX0NFTEwpOwogICAgICAgICAg
ICAgICAgIHN0eWxlLT5zZXRGbG9hdGluZyhGTk9ORSk7CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBlbHNlIGlmIChlLT5pZCgpID09IElEX1RBQkxFKQorICAgICAgICAgICAgZWxzZSBpZiAo
ZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRhYmxlKCkpKQogICAgICAgICAgICAgICAgIHN0eWxl
LT5zZXREaXNwbGF5KHN0eWxlLT5pc0Rpc3BsYXlJbmxpbmVUeXBlKCkgPyBJTkxJTkVfVEFCTEUg
OiBUQUJMRSk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBGcmFtZXMgYW5kIGZyYW1lc2V0cyBu
ZXZlciBob25vciBwb3NpdGlvbjpyZWxhdGl2ZSBvciBwb3NpdGlvbjphYnNvbHV0ZS4gIFRoaXMg
aXMgbmVjZXNzYXJ5IHRvCiAgICAgICAgIC8vIGZpeCBhIGNyYXNoIHdoZXJlIGEgc2l0ZSB0cmll
cyB0byBwb3NpdGlvbiB0aGVzZSBvYmplY3RzLiAgVGhleSBhbHNvIG5ldmVyIGhvbm9yIGRpc3Bs
YXkuCi0gICAgICAgIGlmIChlICYmIChlLT5pZCgpID09IElEX0ZSQU1FIHx8IGUtPmlkKCkgPT0g
SURfRlJBTUVTRVQpKSB7CisgICAgICAgIGlmIChlICYmIChlLT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6ZnJhbWUoKSkgfHwgZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZyYW1lc2V0KCkpKSkgewog
ICAgICAgICAgICAgc3R5bGUtPnNldFBvc2l0aW9uKFNUQVRJQyk7CiAgICAgICAgICAgICBzdHls
ZS0+c2V0RGlzcGxheShCTE9DSyk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBUYWJsZSBoZWFk
ZXJzIHdpdGggYSB0ZXh0LWFsaWduIG9mIGF1dG8gd2lsbCBjaGFuZ2UgdGhlIHRleHQtYWxpZ24g
dG8gY2VudGVyLgotICAgICAgICBpZiAoZSAmJiBlLT5pZCgpID09IElEX1RIICYmIHN0eWxlLT50
ZXh0QWxpZ24oKSA9PSBUQUFVVE8pCisgICAgICAgIGlmIChlICYmIGUtPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjp0aCgpKSAmJiBzdHlsZS0+dGV4dEFsaWduKCkgPT0gVEFBVVRPKQogICAgICAgICAg
ICAgc3R5bGUtPnNldFRleHRBbGlnbihDRU5URVIpOwogICAgICAgICAKICAgICAgICAgLy8gTXV0
YXRlIHRoZSBkaXNwbGF5IHRvIEJMT0NLIG9yIFRBQkxFIGZvciBjZXJ0YWluIGNhc2VzLCBlLmcu
LCBpZiBzb21lb25lIGF0dGVtcHRzIHRvCkBAIC05NzksNyArOTc5LDcgQEAgYm9vbCBDU1NTdHls
ZVNlbGVjdG9yOjpjaGVja1NlbGVjdG9yKENTUwogICAgIC8vIFdlIHRyYWNrIHdoZXRoZXIgb3Ig
bm90IHRoZSBydWxlIGNvbnRhaW5zIG9ubHkgOmhvdmVyIGFuZCA6YWN0aXZlIGluIGEgc2ltcGxl
IHNlbGVjdG9yLiBJZgogICAgIC8vIHNvLCB3ZSBjYW4ndCBhbGxvdyB0aGF0IHRvIGFwcGx5IHRv
IGV2ZXJ5IGVsZW1lbnQgb24gdGhlIHBhZ2UuICBXZSBhc3N1bWUgdGhlIGF1dGhvciBpbnRlbmRl
ZAogICAgIC8vIHRvIGFwcGx5IHRoZSBydWxlcyBvbmx5IHRvIGxpbmtzLgotICAgIGJvb2wgb25s
eUhvdmVyQWN0aXZlID0gKHNlbC0+dGFnID09IGFueVFOYW1lICYmCisgICAgYm9vbCBvbmx5SG92
ZXJBY3RpdmUgPSAoIXNlbC0+aGFzVGFnKCkgJiYKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAoc2VsLT5tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3MgJiYKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChzZWwtPnBzZXVkb1R5cGUoKSA9PSBDU1NTZWxlY3Rvcjo6UHNl
dWRvSG92ZXIgfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWwtPnBzZXVkb1R5
cGUoKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQWN0aXZlKSkpOwpAQCAtMTA5NiwxOSArMTA5Niwx
NCBAQCBib29sIENTU1N0eWxlU2VsZWN0b3I6OmNoZWNrT25lU2VsZWN0b3IoCiAgICAgaWYoIWUp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChzZWwtPnRhZyAhPSBhbnlRTmFtZSkg
ewotICAgICAgICBpbnQgZWx0SUQgPSBlLT5pZCgpOwotICAgICAgICBRX1VJTlQxNiBsb2NhbE5h
bWUgPSBsb2NhbE5hbWVQYXJ0KGVsdElEKTsKLSAgICAgICAgUV9VSU5UMTYgbnMgPSBuYW1lc3Bh
Y2VQYXJ0KGVsdElEKTsKLSAgICAgICAgUV9VSU5UMTYgc2VsTG9jYWxOYW1lID0gbG9jYWxOYW1l
UGFydChzZWwtPnRhZyk7Ci0gICAgICAgIFFfVUlOVDE2IHNlbE5TID0gbmFtZXNwYWNlUGFydChz
ZWwtPnRhZyk7Ci0gICAgICAgIAotICAgICAgICBpZiAobG9jYWxOYW1lIDw9IElEX0xBU1RfVEFH
ICYmIGUtPmlzSFRNTEVsZW1lbnQoKSkKLSAgICAgICAgICAgIG5zID0geGh0bWxOYW1lc3BhY2U7
IC8vIEZJWE1FOiBSZWFsbHkgd2FudCB0byBtb3ZlIGF3YXkgZnJvbSB0aGlzIGNvbXBsaWNhdGVk
IGhhY2tlcnkgYW5kIGp1c3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN3
aXRjaCB0YWdzIGFuZCBhdHRyIG5hbWVzIG92ZXIgdG8gQXRvbWljU3RyaW5ncy4KLSAgICAgICAg
Ci0gICAgICAgIGlmICgoc2VsTG9jYWxOYW1lICE9IGFueUxvY2FsTmFtZSAmJiBsb2NhbE5hbWUg
IT0gc2VsTG9jYWxOYW1lKSB8fAotICAgICAgICAgICAgKHNlbE5TICE9IGFueU5hbWVzcGFjZSAm
JiBucyAhPSBzZWxOUykpCisgICAgaWYgKHNlbC0+aGFzVGFnKCkpIHsKKyAgICAgICAgY29uc3Qg
QXRvbWljU3RyaW5nJiBsb2NhbE5hbWUgPSBlLT5sb2NhbE5hbWUoKTsKKyAgICAgICAgY29uc3Qg
QXRvbWljU3RyaW5nJiBucyA9IGUtPm5hbWVzcGFjZVVSSSgpOworICAgICAgICBjb25zdCBBdG9t
aWNTdHJpbmcmIHNlbExvY2FsTmFtZSA9IHNlbC0+dGFnLmxvY2FsTmFtZSgpOworICAgICAgICBj
b25zdCBBdG9taWNTdHJpbmcmIHNlbE5TID0gc2VsLT50YWcubmFtZXNwYWNlVVJJKCk7CisgICAg
CisgICAgICAgIGlmICgoc2VsTG9jYWxOYW1lICE9IHN0YXJBdG9tICYmIGxvY2FsTmFtZSAhPSBz
ZWxMb2NhbE5hbWUpIHx8CisgICAgICAgICAgICAoc2VsTlMgIT0gc3RhckF0b20gJiYgbnMgIT0g
c2VsTlMpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtMTI5NSw3ICsx
MjkwLDcgQEAgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpjaGVja09uZVNlbGVjdG9yKAogICAgICAg
ICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvSG92ZXI6IHsKICAgICAgICAgICAgICAgICAv
LyBJZiB3ZSdyZSBpbiBxdWlya3MgbW9kZSwgdGhlbiBob3ZlciBzaG91bGQgbmV2ZXIgbWF0Y2gg
YW5jaG9ycyB3aXRoIG5vCiAgICAgICAgICAgICAgICAgLy8gaHJlZi4gIFRoaXMgaXMgaW1wb3J0
YW50IGZvciBzaXRlcyBsaWtlIHdzai5jb20uCi0gICAgICAgICAgICAgICAgaWYgKHN0cmljdFBh
cnNpbmcgfHwgZS0+aWQoKSAhPSBJRF9BIHx8IGUtPmlzTGluaygpKSB7CisgICAgICAgICAgICAg
ICAgaWYgKHN0cmljdFBhcnNpbmcgfHwgIWUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjphKCkpIHx8
IGUtPmlzTGluaygpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50ID09IGUgJiYg
c3R5bGUpCiAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZS0+c2V0QWZmZWN0ZWRCeUhvdmVy
UnVsZXModHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChlLT5yZW5kZXJlcigpKSB7CkBA
IC0xMzI2LDcgKzEzMjEsNyBAQCBib29sIENTU1N0eWxlU2VsZWN0b3I6OmNoZWNrT25lU2VsZWN0
b3IoCiAgICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9BY3RpdmU6CiAgICAgICAg
ICAgICAgICAgLy8gSWYgd2UncmUgaW4gcXVpcmtzIG1vZGUsIHRoZW4gOmFjdGl2ZSBzaG91bGQg
bmV2ZXIgbWF0Y2ggYW5jaG9ycyB3aXRoIG5vCiAgICAgICAgICAgICAgICAgLy8gaHJlZi4gCi0g
ICAgICAgICAgICAgICAgaWYgKHN0cmljdFBhcnNpbmcgfHwgZS0+aWQoKSAhPSBJRF9BIHx8IGUt
PmlzTGluaygpKSB7CisgICAgICAgICAgICAgICAgaWYgKHN0cmljdFBhcnNpbmcgfHwgIWUtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjphKCkpIHx8IGUtPmlzTGluaygpKSB7CiAgICAgICAgICAgICAg
ICAgICAgIGlmIChlbGVtZW50ID09IGUgJiYgc3R5bGUpCiAgICAgICAgICAgICAgICAgICAgICAg
ICBzdHlsZS0+c2V0QWZmZWN0ZWRCeUFjdGl2ZVJ1bGVzKHRydWUpOwogICAgICAgICAgICAgICAg
ICAgICBlbHNlIGlmIChlLT5yZW5kZXJlcigpKQpAQCAtMTQyMCwxOSArMTQxNSw2IEBAIHZvaWQg
Q1NTUnVsZVNldDo6YWRkVG9SdWxlU2V0KERPTTo6RE9NU3QKICAgICAgICAgcnVsZXMtPmFwcGVu
ZChtX3J1bGVDb3VudCsrLCBydWxlLCBzZWwpOwogfQogCi12b2lkIENTU1J1bGVTZXQ6OmFkZFRv
UnVsZVNldChpbnQga2V5LCBJbnRSdWxlTWFwJiBtYXAsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBDU1NTdHlsZVJ1bGVJbXBsKiBydWxlLCBDU1NTZWxlY3Rvciogc2VsKQotewotICAg
IGFzc2VydChrZXkpOwotICAgIGFzc2VydChrZXkgIT0gLTEpOwotICAgIENTU1J1bGVEYXRhTGlz
dCogcnVsZXMgPSBtYXAuZ2V0KGtleSk7Ci0gICAgaWYgKCFydWxlcykgewotICAgICAgICBydWxl
cyA9IG5ldyBDU1NSdWxlRGF0YUxpc3QobV9ydWxlQ291bnQrKywgcnVsZSwgc2VsKTsKLSAgICAg
ICAgbWFwLmluc2VydChrZXksIHJ1bGVzKTsKLSAgICB9IGVsc2UKLSAgICAgICAgcnVsZXMtPmFw
cGVuZChtX3J1bGVDb3VudCsrLCBydWxlLCBzZWwpOwotfQotCiB2b2lkIENTU1J1bGVTZXQ6OmFk
ZFJ1bGUoQ1NTU3R5bGVSdWxlSW1wbCogcnVsZSwgQ1NTU2VsZWN0b3IqIHNlbCkKIHsKICAgICBp
ZiAoc2VsLT5tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6SWQpIHsKQEAgLTE0NDQsMTAgKzE0MjYsOSBA
QCB2b2lkIENTU1J1bGVTZXQ6OmFkZFJ1bGUoQ1NTU3R5bGVSdWxlSW1wCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgIAotICAgIFFfVUlOVDE2IGxvY2FsTmFtZSA9IGxvY2FsTmFtZVBhcnQo
c2VsLT50YWcpOwotICAgIGlmIChsb2NhbE5hbWUgIT0gYW55TG9jYWxOYW1lKSB7Ci0gICAgICAg
IC8vIEZJWE1FOiBtYXliZSBpdCB3b3VsZCBiZSBiZXR0ZXIgdG8ganVzdCB1c2UgYW4gaW50LWtl
eWVkIEhhc2hNYXAgaGVyZQotICAgICAgICBhZGRUb1J1bGVTZXQobG9jYWxOYW1lLCBtX3RhZ1J1
bGVzLCBydWxlLCBzZWwpOworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lID0gc2Vs
LT50YWcubG9jYWxOYW1lKCk7CisgICAgaWYgKGxvY2FsTmFtZSAhPSBzdGFyQXRvbSkgeworICAg
ICAgICBhZGRUb1J1bGVTZXQobG9jYWxOYW1lLmltcGxlbWVudGF0aW9uKCksIG1fdGFnUnVsZXMs
IHJ1bGUsIHNlbCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCkluZGV4OiBraHRtbC9j
c3MvY3Nzc3R5bGVzZWxlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJD
b3JlL2todG1sL2Nzcy9jc3NzdHlsZXNlbGVjdG9yLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
MzQKZGlmZiAtdSAtcCAtcjEuMzQga2h0bWwvY3NzL2Nzc3N0eWxlc2VsZWN0b3IuaAotLS0ga2h0
bWwvY3NzL2Nzc3N0eWxlc2VsZWN0b3IuaAk2IEp1bCAyMDA1IDAxOjI4OjQyIC0wMDAwCTEuMzQK
KysrIGtodG1sL2Nzcy9jc3NzdHlsZXNlbGVjdG9yLmgJNyBKdWwgMjAwNSAwNTo1ODozMCAtMDAw
MApAQCAtMjQsNyArMjQsNiBAQAogI2RlZmluZSBfQ1NTX2Nzc3N0eWxlc2VsZWN0b3JfaF8KIAog
I2luY2x1ZGUgPHFwdHJ2ZWN0b3IuaD4KLSNpbmNsdWRlIDxxcHRyZGljdC5oPgogI2luY2x1ZGUg
Im1pc2MvcG9pbnRlcmhhc2guaCIKIAogI2luY2x1ZGUgInJlbmRlcmluZy9yZW5kZXJfc3R5bGUu
aCIKQEAgLTI3NCwyNSArMjczLDIyIEBAIHB1YmxpYzoKICAgICAgICAgTUFJTl9USFJFQURfQUxM
T0NBVEVEOwogCiAgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxET006OkRPTVN0cmluZ0ltcGwgKiwg
Q1NTUnVsZURhdGFMaXN0ICosIFBvaW50ZXJIYXNoPERPTTo6RE9NU3RyaW5nSW1wbCAqPiA+IEF0
b21SdWxlTWFwOwotICAgICAgICB0eXBlZGVmIEhhc2hNYXA8aW50LCBDU1NSdWxlRGF0YUxpc3Qg
KiwgUG9pbnRlckhhc2g8aW50PiA+IEludFJ1bGVNYXA7CiAKICAgICAgICAgdm9pZCBhZGRSdWxl
c0Zyb21TaGVldChET006OkNTU1N0eWxlU2hlZXRJbXBsKiBzaGVldCwgY29uc3QgRE9NOjpET01T
dHJpbmcgJm1lZGl1bSA9ICJzY3JlZW4iKTsKIAogICAgICAgICB2b2lkIGFkZFJ1bGUoRE9NOjpD
U1NTdHlsZVJ1bGVJbXBsKiBydWxlLCBET006OkNTU1NlbGVjdG9yKiBzZWwpOwogICAgICAgICB2
b2lkIGFkZFRvUnVsZVNldChET006OkRPTVN0cmluZ0ltcGwqIGtleSwgQXRvbVJ1bGVNYXAmIG1h
cCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgRE9NOjpDU1NTdHlsZVJ1bGVJbXBsKiBydWxl
LCBET006OkNTU1NlbGVjdG9yKiBzZWwpOwotICAgICAgICB2b2lkIGFkZFRvUnVsZVNldChpbnQg
a2V5LCBJbnRSdWxlTWFwJiBtYXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIERPTTo6Q1NT
U3R5bGVSdWxlSW1wbCogcnVsZSwgRE9NOjpDU1NTZWxlY3Rvciogc2VsKTsKIAogICAgICAgICBD
U1NSdWxlRGF0YUxpc3QqIGdldElEUnVsZXMoRE9NOjpET01TdHJpbmdJbXBsKiBrZXkpIHsgcmV0
dXJuIG1faWRSdWxlcy5nZXQoa2V5KTsgfQogICAgICAgICBDU1NSdWxlRGF0YUxpc3QqIGdldENs
YXNzUnVsZXMoRE9NOjpET01TdHJpbmdJbXBsKiBrZXkpIHsgcmV0dXJuIG1fY2xhc3NSdWxlcy5n
ZXQoa2V5KTsgfQotICAgICAgICBDU1NSdWxlRGF0YUxpc3QqIGdldFRhZ1J1bGVzKGludCBrZXkp
IHsgcmV0dXJuIG1fdGFnUnVsZXMuZ2V0KGtleSk7IH0KKyAgICAgICAgQ1NTUnVsZURhdGFMaXN0
KiBnZXRUYWdSdWxlcyhET006OkRPTVN0cmluZ0ltcGwqIGtleSkgeyByZXR1cm4gbV90YWdSdWxl
cy5nZXQoa2V5KTsgfQogICAgICAgICBDU1NSdWxlRGF0YUxpc3QqIGdldFVuaXZlcnNhbFJ1bGVz
KCkgeyByZXR1cm4gbV91bml2ZXJzYWxSdWxlczsgfQogCiAgICAgcHVibGljOgogICAgICAgICBB
dG9tUnVsZU1hcCBtX2lkUnVsZXM7CiAgICAgICAgIEF0b21SdWxlTWFwIG1fY2xhc3NSdWxlczsK
LSAgICAgICAgSW50UnVsZU1hcCBtX3RhZ1J1bGVzOworICAgICAgICBBdG9tUnVsZU1hcCBtX3Rh
Z1J1bGVzOwogICAgICAgICBDU1NSdWxlRGF0YUxpc3QqIG1fdW5pdmVyc2FsUnVsZXM7CiAgICAg
ICAgIAogICAgICAgICB1aW50IG1fcnVsZUNvdW50OwpJbmRleDoga2h0bWwvY3NzL3BhcnNlci55
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2Nzcy9wYXJzZXIu
eSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zOQpkaWZmIC11IC1wIC1yMS4zOSBraHRtbC9jc3Mv
cGFyc2VyLnkKLS0tIGtodG1sL2Nzcy9wYXJzZXIueQkyMiBKdW4gMjAwNSAyMTowNTo1OSAtMDAw
MAkxLjM5CisrKyBraHRtbC9jc3MvcGFyc2VyLnkJNyBKdWwgMjAwNSAwNTo1ODozMSAtMDAwMApA
QCAtMzQsOSArMzQsNyBAQAogI2luY2x1ZGUgPGNzcy9jc3NfdmFsdWVpbXBsLmg+CiAjaW5jbHVk
ZSA8bWlzYy9odG1saGFzaGVzLmg+CiAjaW5jbHVkZSAiY3NzcGFyc2VyLmgiCi0KLSNpbmNsdWRl
ICJ4bWxfbmFtZXNwYWNlX3RhYmxlLmgiCi0gICAgCisgICAKICNpbmNsdWRlIDxhc3NlcnQuaD4K
ICNpbmNsdWRlIDxrZGVidWcuaD4KIC8vICNkZWZpbmUgQ1NTX0RFQlVHCkBAIC0xMzEsNyArMTI5
LDYgQEAgc3RhdGljIGlubGluZSBpbnQgZ2V0VmFsdWVJRChjb25zdCBjaGFyIAogICAgIGZsb2F0
IHZhbDsKICAgICBpbnQgcHJvcF9pZDsKICAgICBpbnQgYXR0cmlidXRlOwotICAgIGludCBlbGVt
ZW50OwogICAgIENTU1NlbGVjdG9yOjpSZWxhdGlvbiByZWxhdGlvbjsKICAgICBib29sIGI7CiAg
ICAgaW50IGk7CkBAIC0xNzcsNiArMTc0LDggQEAgc3RhdGljIGludCBjc3N5eWxleCggWVlTVFlQ
RSAqeXlsdmFsICkgewogJXRva2VuICcuJwogJXRva2VuICdbJwogCisldG9rZW4gPHN0cmluZz4g
JyonCisKICV0b2tlbiBJTVBPUlRfU1lNCiAldG9rZW4gUEFHRV9TWU0KICV0b2tlbiBNRURJQV9T
WU0KQEAgLTI2Niw3ICsyNjUsNyBAQCBzdGF0aWMgaW50IGNzc3l5bGV4KCBZWVNUWVBFICp5eWx2
YWwgKSB7CiAldHlwZSA8dmFsdWU+IHVuYXJ5X3Rlcm0KICV0eXBlIDx2YWx1ZT4gZnVuY3Rpb24K
IAotJXR5cGUgPGVsZW1lbnQ+IGVsZW1lbnRfbmFtZQorJXR5cGUgPHN0cmluZz4gZWxlbWVudF9u
YW1lCiAKICV0eXBlIDxhdHRyaWJ1dGU+IGF0dHJpYl9pZAogCkBAIC00MDYsNyArNDA1LDcgQEAg
TkFNRVNQQUNFX1NZTSBtYXliZV9zcGFjZSBtYXliZV9uc19wcmVmaQogI2VuZGlmCiAgICAgQ1NT
UGFyc2VyICpwID0gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyICo+KHBhcnNlcik7CiAgICAgaWYgKHAt
PnN0eWxlRWxlbWVudCAmJiBwLT5zdHlsZUVsZW1lbnQtPmlzQ1NTU3R5bGVTaGVldCgpKQotICAg
ICAgICBzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0SW1wbCo+KHAtPnN0eWxlRWxlbWVudCktPmFk
ZE5hbWVzcGFjZShwLCBkb21TdHJpbmcoJDMpLCBkb21TdHJpbmcoJDQpKTsKKyAgICAgICAgc3Rh
dGljX2Nhc3Q8Q1NTU3R5bGVTaGVldEltcGwqPihwLT5zdHlsZUVsZW1lbnQpLT5hZGROYW1lc3Bh
Y2UocCwgYXRvbWljU3RyaW5nKCQzKSwgYXRvbWljU3RyaW5nKCQ0KSk7CiB9CiB8IE5BTUVTUEFD
RV9TWU0gZXJyb3IgaW52YWxpZF9ibG9jawogfCBOQU1FU1BBQ0VfU1lNIGVycm9yICc7JwpAQCAt
NjI1LDY1ICs2MjQsNzEgQEAgbmFtZXNwYWNlX3NlbGVjdG9yOgogCiBzaW1wbGVfc2VsZWN0b3I6
CiAgICAgZWxlbWVudF9uYW1lIG1heWJlX3NwYWNlIHsKLQkkJCA9IG5ldyBDU1NTZWxlY3Rvcigp
OwotCSQkLT50YWcgPSAkMTsKKyAgICAgICAgQ1NTUGFyc2VyICpwID0gc3RhdGljX2Nhc3Q8Q1NT
UGFyc2VyICo+KHBhcnNlcik7CisJJCQgPSBuZXcgQ1NTU2VsZWN0b3IoUXVhbGlmaWVkTmFtZShu
dWxsQXRvbSwgYXRvbWljU3RyaW5nKCQxKSwgcC0+ZGVmYXVsdE5hbWVzcGFjZSkpOwogICAgIH0K
ICAgICB8IGVsZW1lbnRfbmFtZSBzcGVjaWZpZXJfbGlzdCBtYXliZV9zcGFjZSB7Ci0JJCQgPSAk
MjsKLQlpZiAoICQkICkKLSAgICAgICAgICAgICQkLT50YWcgPSAkMTsKKyAgICAgICAgJCQgPSAk
MjsKKwlpZiAoJCQpIHsKKyAgICAgICAgICAgIENTU1BhcnNlciAqcCA9IHN0YXRpY19jYXN0PENT
U1BhcnNlciAqPihwYXJzZXIpOworICAgICAgICAgICAgJCQtPnRhZyA9IFF1YWxpZmllZE5hbWUo
bnVsbEF0b20sIGF0b21pY1N0cmluZygkMSksIHAtPmRlZmF1bHROYW1lc3BhY2UpOworICAgICAg
ICB9CiAgICAgfQogICAgIHwgc3BlY2lmaWVyX2xpc3QgbWF5YmVfc3BhY2UgewogCSQkID0gJDE7
Ci0gICAgICAgIGlmICgkJCkKLSAgICAgICAgICAgICQkLT50YWcgPSBtYWtlSWQoc3RhdGljX2Nh
c3Q8Q1NTUGFyc2VyKj4ocGFyc2VyKS0+ZGVmYXVsdE5hbWVzcGFjZSwgYW55TG9jYWxOYW1lKTs7
CisgICAgICAgIENTU1BhcnNlciAqcCA9IHN0YXRpY19jYXN0PENTU1BhcnNlciAqPihwYXJzZXIp
OworICAgICAgICBpZiAoJCQgJiYgcC0+ZGVmYXVsdE5hbWVzcGFjZSAhPSBzdGFyQXRvbSkKKyAg
ICAgICAgICAgICQkLT50YWcgPSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCBzdGFyQXRvbSwgcC0+
ZGVmYXVsdE5hbWVzcGFjZSk7CiAgICAgfQogICAgIHwgbmFtZXNwYWNlX3NlbGVjdG9yICd8JyBl
bGVtZW50X25hbWUgbWF5YmVfc3BhY2UgewotICAgICAgICAkJCA9IG5ldyBDU1NTZWxlY3Rvcigp
OwotICAgICAgICAkJC0+dGFnID0gJDM7CisgICAgICAgIEF0b21pY1N0cmluZyBuYW1lc3BhY2VQ
cmVmaXggPSBhdG9taWNTdHJpbmcoJDEpOwogICAgICAgICBDU1NQYXJzZXIgKnAgPSBzdGF0aWNf
Y2FzdDxDU1NQYXJzZXIgKj4ocGFyc2VyKTsKICAgICAgICAgaWYgKHAtPnN0eWxlRWxlbWVudCAm
JiBwLT5zdHlsZUVsZW1lbnQtPmlzQ1NTU3R5bGVTaGVldCgpKQotICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8Q1NTU3R5bGVTaGVldEltcGwqPihwLT5zdHlsZUVsZW1lbnQpLT5kZXRlcm1pbmVOYW1l
c3BhY2UoJCQtPnRhZywgZG9tU3RyaW5nKCQxKSk7CisgICAgICAgICAgICAkJCA9IG5ldyBDU1NT
ZWxlY3RvcihRdWFsaWZpZWROYW1lKG5hbWVzcGFjZVByZWZpeCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXRvbWljU3RyaW5nKCQzKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTU3R5
bGVTaGVldEltcGwqPihwLT5zdHlsZUVsZW1lbnQpLT5kZXRlcm1pbmVOYW1lc3BhY2UobmFtZXNw
YWNlUHJlZml4KSkpOworICAgICAgICBlbHNlIC8vIEZJWE1FOiBTaG91bGRuJ3QgdGhpcyBjYXNl
IGJlIGFuIGVycm9yPworICAgICAgICAgICAgJCQgPSBuZXcgQ1NTU2VsZWN0b3IoUXVhbGlmaWVk
TmFtZShudWxsQXRvbSwgYXRvbWljU3RyaW5nKCQzKSwgcC0+ZGVmYXVsdE5hbWVzcGFjZSkpOwog
ICAgIH0KICAgICB8IG5hbWVzcGFjZV9zZWxlY3RvciAnfCcgZWxlbWVudF9uYW1lIHNwZWNpZmll
cl9saXN0IG1heWJlX3NwYWNlIHsKICAgICAgICAgJCQgPSAkNDsKICAgICAgICAgaWYgKCQkKSB7
Ci0gICAgICAgICAgICAkJC0+dGFnID0gJDM7CisgICAgICAgICAgICBBdG9taWNTdHJpbmcgbmFt
ZXNwYWNlUHJlZml4ID0gYXRvbWljU3RyaW5nKCQxKTsKICAgICAgICAgICAgIENTU1BhcnNlciAq
cCA9IHN0YXRpY19jYXN0PENTU1BhcnNlciAqPihwYXJzZXIpOwogICAgICAgICAgICAgaWYgKHAt
PnN0eWxlRWxlbWVudCAmJiBwLT5zdHlsZUVsZW1lbnQtPmlzQ1NTU3R5bGVTaGVldCgpKQotICAg
ICAgICAgICAgICAgIHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXRJbXBsKj4ocC0+c3R5bGVFbGVt
ZW50KS0+ZGV0ZXJtaW5lTmFtZXNwYWNlKCQkLT50YWcsIGRvbVN0cmluZygkMSkpOworICAgICAg
ICAgICAgICAgICQkLT50YWcgPSBRdWFsaWZpZWROYW1lKG5hbWVzcGFjZVByZWZpeCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdG9taWNTdHJpbmcoJDMpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PENTU1N0eWxl
U2hlZXRJbXBsKj4ocC0+c3R5bGVFbGVtZW50KS0+ZGV0ZXJtaW5lTmFtZXNwYWNlKG5hbWVzcGFj
ZVByZWZpeCkpOworICAgICAgICAgICAgZWxzZSAvLyBGSVhNRTogU2hvdWxkbid0IHRoaXMgY2Fz
ZSBiZSBhbiBlcnJvcj8KKyAgICAgICAgICAgICAgICAkJC0+dGFnID0gUXVhbGlmaWVkTmFtZShu
dWxsQXRvbSwgYXRvbWljU3RyaW5nKCQzKSwgcC0+ZGVmYXVsdE5hbWVzcGFjZSk7CiAgICAgICAg
IH0KICAgICB9CiAgICAgfCBuYW1lc3BhY2Vfc2VsZWN0b3IgJ3wnIHNwZWNpZmllcl9saXN0IG1h
eWJlX3NwYWNlIHsKICAgICAgICAgJCQgPSAkMzsKICAgICAgICAgaWYgKCQkKSB7Ci0gICAgICAg
ICAgICAkJC0+dGFnID0gbWFrZUlkKGFueU5hbWVzcGFjZSwgYW55TG9jYWxOYW1lKTsKKyAgICAg
ICAgICAgIEF0b21pY1N0cmluZyBuYW1lc3BhY2VQcmVmaXggPSBhdG9taWNTdHJpbmcoJDEpOwog
ICAgICAgICAgICAgQ1NTUGFyc2VyICpwID0gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyICo+KHBhcnNl
cik7CiAgICAgICAgICAgICBpZiAocC0+c3R5bGVFbGVtZW50ICYmIHAtPnN0eWxlRWxlbWVudC0+
aXNDU1NTdHlsZVNoZWV0KCkpCi0gICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTU3R5bGVT
aGVldEltcGwqPihwLT5zdHlsZUVsZW1lbnQpLT5kZXRlcm1pbmVOYW1lc3BhY2UoJCQtPnRhZywg
ZG9tU3RyaW5nKCQxKSk7CisgICAgICAgICAgICAgICAgJCQtPnRhZyA9IFF1YWxpZmllZE5hbWUo
bmFtZXNwYWNlUHJlZml4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0YXJBdG9tLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRp
Y19jYXN0PENTU1N0eWxlU2hlZXRJbXBsKj4ocC0+c3R5bGVFbGVtZW50KS0+ZGV0ZXJtaW5lTmFt
ZXNwYWNlKG5hbWVzcGFjZVByZWZpeCkpOwogICAgICAgICB9CiAgICAgfQogICA7CiAKIGVsZW1l
bnRfbmFtZToKICAgICBJREVOVCB7Ci0JQ1NTUGFyc2VyICpwID0gc3RhdGljX2Nhc3Q8Q1NTUGFy
c2VyICo+KHBhcnNlcik7CisgICAgICAgIFBhcnNlU3RyaW5nJiBzdHIgPSAkMTsKKyAgICAgICAg
Q1NTUGFyc2VyICpwID0gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyICo+KHBhcnNlcik7CiAJRE9NOjpE
b2N1bWVudEltcGwgKmRvYyA9IHAtPmRvY3VtZW50KCk7Ci0JUVN0cmluZyB0YWcgPSBxU3RyaW5n
KCQxKTsKLQlpZiAoIGRvYyApIHsKLQkgICAgaWYgKGRvYy0+aXNIVE1MRG9jdW1lbnQoKSkKLQkJ
dGFnID0gdGFnLmxvd2VyKCk7Ci0JICAgIGNvbnN0IERPTVN0cmluZyBkdGFnKHRhZyk7Ci0gICAg
ICAgICAgICAkJCA9IG1ha2VJZChwLT5kZWZhdWx0TmFtZXNwYWNlLCBkb2MtPnRhZ0lkKDAsIGR0
YWcuaW1wbGVtZW50YXRpb24oKSwgZmFsc2UpKTsKLQl9IGVsc2UgewotCSAgICAkJCA9IG1ha2VJ
ZChwLT5kZWZhdWx0TmFtZXNwYWNlLCBraHRtbDo6Z2V0VGFnSUQodGFnLmxvd2VyKCkuYXNjaWko
KSwgdGFnLmxlbmd0aCgpKSk7Ci0JICAgIC8vIHRoaXMgY2FzZSBzaG91bGQgbmV2ZXIgaGFwcGVu
IC0gb25seSB3aGVuIGxvYWRpbmcKLQkgICAgLy8gdGhlIGRlZmF1bHQgc3R5bGVzaGVldCAtIHdo
aWNoIG11c3Qgbm90IGNvbnRhaW4gdW5rbm93biB0YWdzCi0vLyAJICAgIGFzc2VydCgkJCAhPSAw
KTsKLQl9CisJaWYgKGRvYyAmJiBkb2MtPmlzSFRNTERvY3VtZW50KCkpCisgICAgICAgICAgICBz
dHIubG93ZXIoKTsKKyAgICAgICAgJCQgPSBzdHI7CiAgICAgfQogICAgIHwgJyonIHsKLQkkJCA9
IG1ha2VJZChzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJzZXIpLT5kZWZhdWx0TmFtZXNwYWNl
LCBhbnlMb2NhbE5hbWUpOworCXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBzdGFyID0gJyonOworICAg
ICAgICAkJC5zdHJpbmcgPSAmc3RhcjsKKyAgICAgICAgJCQubGVuZ3RoID0gMTsKICAgICB9CiAg
IDsKIApAQCAtNzcwLDE4ICs3NzUsMjIgQEAgYXR0cmliOgogICAgICAgICAkJCA9IG5ldyBDU1NT
ZWxlY3RvcigpOwogICAgICAgICAkJC0+YXR0ciA9ICQ1OwogICAgICAgICAkJC0+bWF0Y2ggPSBD
U1NTZWxlY3Rvcjo6U2V0OwotICAgICAgICBDU1NQYXJzZXIgKnAgPSBzdGF0aWNfY2FzdDxDU1NQ
YXJzZXIgKj4ocGFyc2VyKTsKLSAgICAgICAgaWYgKHAtPnN0eWxlRWxlbWVudCAmJiBwLT5zdHls
ZUVsZW1lbnQtPmlzQ1NTU3R5bGVTaGVldCgpKQotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q1NT
U3R5bGVTaGVldEltcGwqPihwLT5zdHlsZUVsZW1lbnQpLT5kZXRlcm1pbmVOYW1lc3BhY2UoJCQt
PmF0dHIsIGRvbVN0cmluZygkMykpOworICAgICAgICAvLyBGSVhNRTogRm9yIG5vdyB3ZSdyZSBi
cmVha2luZyBuYW1lc3BhY2Ugc3VwcG9ydCBvbiBhdHRyaWJ1dGVzLiAgV2hlbiB3ZSBzd2l0Y2gg
dG8gYXRvbWljc3RyaW5nLCB0aGVuIHdlIGNhbiBtYWtlCisgICAgICAgIC8vIGl0IHdvcmsgYWdh
aW4uCisgICAgICAgIC8vQ1NTUGFyc2VyICpwID0gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyICo+KHBh
cnNlcik7CisgICAgICAgIC8vaWYgKHAtPnN0eWxlRWxlbWVudCAmJiBwLT5zdHlsZUVsZW1lbnQt
PmlzQ1NTU3R5bGVTaGVldCgpKQorICAgICAgICAvLyAgICBzdGF0aWNfY2FzdDxDU1NTdHlsZVNo
ZWV0SW1wbCo+KHAtPnN0eWxlRWxlbWVudCktPmRldGVybWluZU5hbWVzcGFjZSgkJC0+YXR0ciwg
ZG9tU3RyaW5nKCQzKSk7CiAgICAgfQogICAgIHwgJ1snIG1heWJlX3NwYWNlIG5hbWVzcGFjZV9z
ZWxlY3RvciAnfCcgYXR0cmliX2lkIG1hdGNoIG1heWJlX3NwYWNlIGlkZW50X29yX3N0cmluZyBt
YXliZV9zcGFjZSAnXScgewogICAgICAgICAkJCA9IG5ldyBDU1NTZWxlY3RvcigpOwogICAgICAg
ICAkJC0+YXR0ciA9ICQ1OwogICAgICAgICAkJC0+bWF0Y2ggPSAoQ1NTU2VsZWN0b3I6Ok1hdGNo
KSQ2OwogICAgICAgICAkJC0+dmFsdWUgPSBhdG9taWNTdHJpbmcoJDgpOwotICAgICAgICBDU1NQ
YXJzZXIgKnAgPSBzdGF0aWNfY2FzdDxDU1NQYXJzZXIgKj4ocGFyc2VyKTsKLSAgICAgICAgaWYg
KHAtPnN0eWxlRWxlbWVudCAmJiBwLT5zdHlsZUVsZW1lbnQtPmlzQ1NTU3R5bGVTaGVldCgpKQot
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldEltcGwqPihwLT5zdHlsZUVsZW1l
bnQpLT5kZXRlcm1pbmVOYW1lc3BhY2UoJCQtPmF0dHIsIGRvbVN0cmluZygkMykpOworICAgICAg
ICAvLyBGSVhNRTogRm9yIG5vdyB3ZSdyZSBicmVha2luZyBuYW1lc3BhY2Ugc3VwcG9ydCBvbiBh
dHRyaWJ1dGVzLiAgV2hlbiB3ZSBzd2l0Y2ggdG8gYXRvbWljc3RyaW5nLCB0aGVuIHdlIGNhbiBt
YWtlCisgICAgICAgIC8vIGl0IHdvcmsgYWdhaW4uCisgICAgICAgIC8vQ1NTUGFyc2VyICpwID0g
c3RhdGljX2Nhc3Q8Q1NTUGFyc2VyICo+KHBhcnNlcik7CisgICAgICAgIC8vaWYgKHAtPnN0eWxl
RWxlbWVudCAmJiBwLT5zdHlsZUVsZW1lbnQtPmlzQ1NTU3R5bGVTaGVldCgpKQorICAgICAgICAv
LyAgICBzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0SW1wbCo+KHAtPnN0eWxlRWxlbWVudCktPmRl
dGVybWluZU5hbWVzcGFjZSgkJC0+YXR0ciwgZG9tU3RyaW5nKCQzKSk7CiAgICAgfQogICA7CiAK
SW5kZXg6IGtodG1sL2RvbS9jc3Nfc3R5bGVzaGVldC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
L2N2cy9yb290L1dlYkNvcmUva2h0bWwvZG9tL2Nzc19zdHlsZXNoZWV0LmNwcCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS44CmRpZmYgLXUgLXAgLXIxLjgga2h0bWwvZG9tL2Nzc19zdHlsZXNoZWV0
LmNwcAotLS0ga2h0bWwvZG9tL2Nzc19zdHlsZXNoZWV0LmNwcAkyMCBNYXkgMjAwNCAxNTowOToz
MiAtMDAwMAkxLjgKKysrIGtodG1sL2RvbS9jc3Nfc3R5bGVzaGVldC5jcHAJNyBKdWwgMjAwNSAw
NTo1ODozMSAtMDAwMApAQCAtMzg1LDcgKzM4NSw3IEBAIExpbmtTdHlsZSAmIExpbmtTdHlsZTo6
b3BlcmF0b3IgPSAoY29uc3QKIAogICAgIC8vICMjIyBjaGVjayBsaW5rIGlzIHJlYWxseSBsaW5r
aW5nIGEgc3R5bGUgc2hlZXQKICAgICBpZiggbiAmJiBuLT5pc0VsZW1lbnROb2RlKCkgJiYKLQko
bi0+aWQoKSA9PSBJRF9TVFlMRSB8fCBuLT5pZCgpID09IElEX0xJTkspICkgeworCShuLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6c3R5bGUoKSkgfHwgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omxp
bmsoKSkpKSB7CiAgICAgbm9kZSA9IG47CiAgICAgaWYobm9kZSkgbm9kZS0+cmVmKCk7CiAgICAg
fQpAQCAtMzk5LDEyICszOTksMTQgQEAgTGlua1N0eWxlOjp+TGlua1N0eWxlKCkKIAogU3R5bGVT
aGVldCBMaW5rU3R5bGU6OnNoZWV0KCkKIHsKLSAgICBpbnQgaWQgPSBub2RlID8gbm9kZS0+aWQo
KSA6IDA7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm4gU3R5bGVTaGVldCgpOworCiAg
ICAgLy8gIyMjIGFkZCBQSQogICAgIHJldHVybiAKLQkoIGlkID09IElEX1NUWUxFKSA/CisJKG5v
ZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzdHlsZSgpKSkgPwogCXN0YXRpY19jYXN0PEhUTUxT
dHlsZUVsZW1lbnRJbXBsICo+KG5vZGUpLT5zaGVldCgpCi0JOiAoIChpZCA9PSBJRF9MSU5LKSA/
CisJOiAoIG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpsaW5rKCkpID8KIAkgICAgc3RhdGlj
X2Nhc3Q8SFRNTExpbmtFbGVtZW50SW1wbCAqPihub2RlKS0+c2hlZXQoKQogCSAgICA6IFN0eWxl
U2hlZXQoKSApOwogfQpJbmRleDoga2h0bWwvZG9tL2RvbV9lbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9kb20vZG9tX2VsZW1lbnQuY3BwLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjEyCmRpZmYgLXUgLXAgLXIxLjEyIGtodG1sL2RvbS9kb21f
ZWxlbWVudC5jcHAKLS0tIGtodG1sL2RvbS9kb21fZWxlbWVudC5jcHAJMTIgTWF5IDIwMDUgMTc6
MTE6MjEgLTAwMDAJMS4xMgorKysga2h0bWwvZG9tL2RvbV9lbGVtZW50LmNwcAk3IEp1bCAyMDA1
IDA1OjU4OjMxIC0wMDAwCkBAIC0xNDEsNyArMTQxLDcgQEAgRWxlbWVudDo6fkVsZW1lbnQoKQog
RE9NU3RyaW5nIEVsZW1lbnQ6OnRhZ05hbWUoKSBjb25zdAogewogICAgIGlmICghaW1wbCkgdGhy
b3cgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbjo6Tk9UX0ZPVU5EX0VSUik7Ci0gICAgcmV0dXJu
IHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsKj4oaW1wbCktPnRhZ05hbWUoKTsKKyAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8RWxlbWVudEltcGwqPihpbXBsKS0+bm9kZU5hbWUoKTsKIH0KIAogRE9NU3Ry
aW5nIEVsZW1lbnQ6OmdldEF0dHJpYnV0ZSggY29uc3QgRE9NU3RyaW5nICZuYW1lICkKSW5kZXg6
IGtodG1sL2RvbS9kb21fbm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dl
YkNvcmUva2h0bWwvZG9tL2RvbV9ub2RlLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMgpk
aWZmIC11IC1wIC1yMS4xMiBraHRtbC9kb20vZG9tX25vZGUuY3BwCi0tLSBraHRtbC9kb20vZG9t
X25vZGUuY3BwCTExIE1heSAyMDA1IDAwOjU4OjI4IC0wMDAwCTEuMTIKKysrIGtodG1sL2RvbS9k
b21fbm9kZS5jcHAJNyBKdWwgMjAwNSAwNTo1ODozMSAtMDAwMApAQCAtMzI0LDcgKzMyNCw3IEBA
IGJvb2wgTm9kZTo6aXNTdXBwb3J0ZWQoIGNvbnN0IERPTVN0cmluZyAKIERPTVN0cmluZyBOb2Rl
OjpuYW1lc3BhY2VVUkkoICApIGNvbnN0CiB7CiAgICAgaWYgKCFpbXBsKSByZXR1cm4gRE9NU3Ry
aW5nKCk7Ci0gICAgcmV0dXJuIGltcGwtPmdldERvY3VtZW50KCktPm5hbWVzcGFjZVVSSShpbXBs
LT5pZCgpKTsKKyAgICByZXR1cm4gaW1wbC0+bmFtZXNwYWNlVVJJKCk7CiB9CiAKIERPTVN0cmlu
ZyBOb2RlOjpwcmVmaXgoICApIGNvbnN0CkBAIC0zMzcsNyArMzM3LDcgQEAgdm9pZCBOb2RlOjpz
ZXRQcmVmaXgoY29uc3QgRE9NU3RyaW5nICZwcgogewogICAgIGlmICghaW1wbCkgdGhyb3cgRE9N
RXhjZXB0aW9uKERPTUV4Y2VwdGlvbjo6Tk9UX0ZPVU5EX0VSUik7CiAgICAgaW50IGV4Y2VwdGlv
bmNvZGUgPSAwOwotICAgIGltcGwtPnNldFByZWZpeChwcmVmaXgsZXhjZXB0aW9uY29kZSk7Cisg
ICAgaW1wbC0+c2V0UHJlZml4KHByZWZpeC5pbXBsZW1lbnRhdGlvbigpLGV4Y2VwdGlvbmNvZGUp
OwogICAgIGlmIChleGNlcHRpb25jb2RlKQogICAgICAgICB0aHJvdyBET01FeGNlcHRpb24oZXhj
ZXB0aW9uY29kZSk7CiB9CkBAIC0zNzYsMTMgKzM3Niw2IEBAIGJvb2wgTm9kZTo6ZGlzcGF0Y2hF
dmVudChjb25zdCBFdmVudCAmZXYKICAgICByZXR1cm4gcjsKIH0KIAotCi11bnNpZ25lZCBpbnQg
Tm9kZTo6ZWxlbWVudElkKCkgY29uc3QKLXsKLSAgICBpZiAoIWltcGwpIHJldHVybiAwOwotICAg
IHJldHVybiBpbXBsLT5pZCgpOwotfQotCiB1bnNpZ25lZCBsb25nIE5vZGU6OmluZGV4KCkgY29u
c3QKIHsKICAgICBpZiAoIWltcGwpIHJldHVybiAwOwpJbmRleDoga2h0bWwvZG9tL2RvbV9ub2Rl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZG9tL2RvbV9u
b2RlLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTIKZGlmZiAtdSAtcCAtcjEuMTIga2h0bWwv
ZG9tL2RvbV9ub2RlLmgKLS0tIGtodG1sL2RvbS9kb21fbm9kZS5oCTE4IE1heSAyMDA1IDIxOjEw
OjI0IC0wMDAwCTEuMTIKKysrIGtodG1sL2RvbS9kb21fbm9kZS5oCTcgSnVsIDIwMDUgMDU6NTg6
MzIgLTAwMDAKQEAgLTg1NSwxMyArODU1LDYgQEAgcHVibGljOgogICAgIGJvb2wgZGlzcGF0Y2hF
dmVudChjb25zdCBFdmVudCAmZXZ0KTsKIAogICAgIC8qKgotICAgICAqIEBpbnRlcm5hbAotICAg
ICAqIG5vdCBwYXJ0IG9mIHRoZSBET00uCi0gICAgICogQHJldHVybnMgdGhlIGVsZW1lbnQgaWQs
IGluIGNhc2UgdGhpcyBpcyBhbiBlbGVtZW50LCAwIG90aGVyd2lzZQotICAgICAqLwotICAgIFFf
VUlOVDMyIGVsZW1lbnRJZCgpIGNvbnN0OwotCi0gICAgLyoqCiAgICAgICogdGVzdHMgaWYgdGhp
cyBOb2RlIGlzIDAuIFVzZWZ1bCBlc3BlY2lhbGx5LCBpZiBjYXN0aW5nIHRvIGEgZGVyaXZlZAog
ICAgICAqIGNsYXNzOgogICAgICAqCkluZGV4OiBraHRtbC9kb20vaHRtbF9iYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9kb20vaHRtbF9iYXNlLmNw
cCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS42CmRpZmYgLXUgLXAgLXIxLjYga2h0bWwvZG9tL2h0
bWxfYmFzZS5jcHAKLS0tIGtodG1sL2RvbS9odG1sX2Jhc2UuY3BwCTMgTm92IDIwMDMgMDY6MzI6
MDQgLTAwMDAJMS42CisrKyBraHRtbC9kb20vaHRtbF9iYXNlLmNwcAk3IEp1bCAyMDA1IDA1OjU4
OjMyIC0wMDAwCkBAIC00MSw3ICs0MSw3IEBAIEhUTUxCb2R5RWxlbWVudDo6SFRNTEJvZHlFbGVt
ZW50KEhUTUxCb2QKIAogSFRNTEJvZHlFbGVtZW50ICZIVE1MQm9keUVsZW1lbnQ6Om9wZXJhdG9y
ID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfQk9E
WSApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpib2R5KCkgKTsKICAgICBy
ZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTEzNSw3ICsxMzUsNyBAQCBIVE1MRnJhbWVFbGVtZW50OjpI
VE1MRnJhbWVFbGVtZW50KEhUTUxGCiAKIEhUTUxGcmFtZUVsZW1lbnQgJkhUTUxGcmFtZUVsZW1l
bnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBv
dGhlciwgSURfRlJBTUUgKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6ZnJh
bWUoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtMjY1LDcgKzI2NSw3IEBAIEhUTUxJ
RnJhbWVFbGVtZW50OjpIVE1MSUZyYW1lRWxlbWVudChIVE0KIAogSFRNTElGcmFtZUVsZW1lbnQg
JkhUTUxJRnJhbWVFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAg
ICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0lGUkFNRSApOworICAgIGFzc2lnbk90aGVyKCBvdGhl
ciwgSFRNTE5hbWVzOjppZnJhbWUoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtNDE0
LDcgKzQxNCw3IEBAIEhUTUxGcmFtZVNldEVsZW1lbnQ6OkhUTUxGcmFtZVNldEVsZW1lbnQKIAog
SFRNTEZyYW1lU2V0RWxlbWVudCAmSFRNTEZyYW1lU2V0RWxlbWVudDo6b3BlcmF0b3IgPSAoY29u
c3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9GUkFNRVNFVCAp
OworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpmcmFtZXNldCgpICk7CiAgICAg
cmV0dXJuICp0aGlzOwogfQogCkBAIC00NjYsNyArNDY2LDcgQEAgSFRNTEhlYWRFbGVtZW50OjpI
VE1MSGVhZEVsZW1lbnQoSFRNTEhlYQogCiBIVE1MSGVhZEVsZW1lbnQgJkhUTUxIZWFkRWxlbWVu
dDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90
aGVyLCBJRF9IRUFEICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OmhlYWQo
KSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtNTA3LDcgKzUwNyw3IEBAIEhUTUxIdG1s
RWxlbWVudDo6SFRNTEh0bWxFbGVtZW50KEhUTUxIdG0KIAogSFRNTEh0bWxFbGVtZW50ICZIVE1M
SHRtbEVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2ln
bk90aGVyKCBvdGhlciwgSURfSFRNTCApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5h
bWVzOjpodG1sKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKSW5kZXg6IGtodG1sL2RvbS9o
dG1sX2Jsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRt
bC9kb20vaHRtbF9ibG9jay5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNApkaWZmIC11IC1w
IC1yMS40IGtodG1sL2RvbS9odG1sX2Jsb2NrLmNwcAotLS0ga2h0bWwvZG9tL2h0bWxfYmxvY2su
Y3BwCTEwIEp1biAyMDAyIDIwOjA3OjM0IC0wMDAwCTEuNAorKysga2h0bWwvZG9tL2h0bWxfYmxv
Y2suY3BwCTcgSnVsIDIwMDUgMDU6NTg6MzIgLTAwMDAKQEAgLTQzLDcgKzQzLDcgQEAgSFRNTEJs
b2NrcXVvdGVFbGVtZW50OjpIVE1MQmxvY2txdW90ZUVsZQogCiBIVE1MQmxvY2txdW90ZUVsZW1l
bnQgJkhUTUxCbG9ja3F1b3RlRWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIp
CiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9CTE9DS1FVT1RFICk7CisgICAgYXNzaWdu
T3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OmJsb2NrcXVvdGUoKSApOwogICAgIHJldHVybiAqdGhp
czsKIH0KIApAQCAtODQsNyArODQsNyBAQCBIVE1MRGl2RWxlbWVudDo6SFRNTERpdkVsZW1lbnQo
SFRNTERpdkVsCiAKIEhUTUxEaXZFbGVtZW50ICZIVE1MRGl2RWxlbWVudDo6b3BlcmF0b3IgPSAo
Y29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9ESVYgKTsK
KyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6ZGl2KCkgKTsKICAgICByZXR1cm4g
KnRoaXM7CiB9CiAKQEAgLTEyNSw3ICsxMjUsNyBAQCBIVE1MSFJFbGVtZW50OjpIVE1MSFJFbGVt
ZW50KEhUTUxIUkVsZW1lCiAKIEhUTUxIUkVsZW1lbnQgJkhUTUxIUkVsZW1lbnQ6Om9wZXJhdG9y
ID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfSFIg
KTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6aHIoKSApOwogICAgIHJldHVy
biAqdGhpczsKIH0KIApAQCAtMjA1LDE2ICsyMDUsMTcgQEAgSFRNTEhlYWRpbmdFbGVtZW50OjpI
VE1MSGVhZGluZ0VsZW1lbnQoSAogCiBIVE1MSGVhZGluZ0VsZW1lbnQgJkhUTUxIZWFkaW5nRWxl
bWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgaWYob3RoZXIuZWxl
bWVudElkKCkgIT0gSURfSDEgfHwKLSAgICAgICBvdGhlci5lbGVtZW50SWQoKSAhPSBJRF9IMiB8
fAotICAgICAgIG90aGVyLmVsZW1lbnRJZCgpICE9IElEX0gzIHx8Ci0gICAgICAgb3RoZXIuZWxl
bWVudElkKCkgIT0gSURfSDQgfHwKLSAgICAgICBvdGhlci5lbGVtZW50SWQoKSAhPSBJRF9INSB8
fAotICAgICAgIG90aGVyLmVsZW1lbnRJZCgpICE9IElEX0g2ICkKKyAgICBpZiAoIW90aGVyLmhh
bmRsZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDEoKSkgJiYKKyAgICAgICAgIW90aGVyLmhh
bmRsZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDIoKSkgJiYKKyAgICAgICAgIW90aGVyLmhh
bmRsZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDMoKSkgJiYKKyAgICAgICAgIW90aGVyLmhh
bmRsZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDQoKSkgJiYKKyAgICAgICAgIW90aGVyLmhh
bmRsZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDUoKSkgJiYKKyAgICAgICAgIW90aGVyLmhh
bmRsZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDYoKSkpCiAgICAgewogCWlmICggaW1wbCAp
IGltcGwtPmRlcmVmKCk7CiAJaW1wbCA9IDA7CiAgICAgfSBlbHNlIHsKKwogICAgIE5vZGU6Om9w
ZXJhdG9yID0gKG90aGVyKTsKICAgICB9CiAgICAgcmV0dXJuICp0aGlzOwpAQCAtMjU3LDcgKzI1
OCw3IEBAIEhUTUxQYXJhZ3JhcGhFbGVtZW50OjpIVE1MUGFyYWdyYXBoRWxlbWUKIAogSFRNTFBh
cmFncmFwaEVsZW1lbnQgJkhUTUxQYXJhZ3JhcGhFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBO
b2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX1AgKTsKKyAgICBhc3Np
Z25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6cCgpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQog
CkBAIC0yOTgsNyArMjk5LDcgQEAgSFRNTFByZUVsZW1lbnQ6OkhUTUxQcmVFbGVtZW50KEhUTUxQ
cmVFbAogCiBIVE1MUHJlRWxlbWVudCAmSFRNTFByZUVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0
IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfUFJFICk7CisgICAg
YXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OnByZSgpICk7CiAgICAgcmV0dXJuICp0aGlz
OwogfQogCkluZGV4OiBraHRtbC9kb20vaHRtbF9lbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9kb20vaHRtbF9lbGVtZW50LmNwcCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS4xNApkaWZmIC11IC1wIC1yMS4xNCBraHRtbC9kb20vaHRtbF9lbGVt
ZW50LmNwcAotLS0ga2h0bWwvZG9tL2h0bWxfZWxlbWVudC5jcHAJMTEgTWF5IDIwMDUgMDA6NTg6
MjggLTAwMDAJMS4xNAorKysga2h0bWwvZG9tL2h0bWxfZWxlbWVudC5jcHAJNyBKdWwgMjAwNSAw
NTo1ODozMyAtMDAwMApAQCAtMTgyLDkgKzE4Miw5IEBAIEhUTUxDb2xsZWN0aW9uIEhUTUxFbGVt
ZW50OjpjaGlsZHJlbigpIGMKICAgICByZXR1cm4gSFRNTENvbGxlY3Rpb24oaW1wbCwgSFRNTENv
bGxlY3Rpb25JbXBsOjpOT0RFX0NISUxEUkVOKTsKIH0KIAotdm9pZCBIVE1MRWxlbWVudDo6YXNz
aWduT3RoZXIoIGNvbnN0IE5vZGUgJm90aGVyLCBpbnQgZWxlbWVudElkICkKK3ZvaWQgSFRNTEVs
ZW1lbnQ6OmFzc2lnbk90aGVyKCBjb25zdCBOb2RlICZvdGhlciwgY29uc3QgUXVhbGlmaWVkTmFt
ZSYgdGFnTmFtZSApCiB7Ci0gICAgaWYoKGludClvdGhlci5lbGVtZW50SWQoKSAhPSBlbGVtZW50
SWQpIHsKKyAgICBpZiAoIW90aGVyLmhhbmRsZSgpLT5oYXNUYWdOYW1lKHRhZ05hbWUpKSB7CiAJ
aWYgKCBpbXBsICkgaW1wbC0+ZGVyZWYoKTsKIAlpbXBsID0gMDsKICAgICB9IGVsc2UgewpJbmRl
eDoga2h0bWwvZG9tL2h0bWxfZWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9XZWJDb3JlL2todG1sL2RvbS9odG1sX2VsZW1lbnQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS44CmRpZmYgLXUgLXAgLXIxLjgga2h0bWwvZG9tL2h0bWxfZWxlbWVudC5oCi0tLSBraHRtbC9k
b20vaHRtbF9lbGVtZW50LmgJMjIgTWF5IDIwMDQgMDE6NTA6NDggLTAwMDAJMS44CisrKyBraHRt
bC9kb20vaHRtbF9lbGVtZW50LmgJNyBKdWwgMjAwNSAwNTo1ODozMyAtMDAwMApAQCAtMzAsNiAr
MzAsOCBAQAogI2RlZmluZSBIVE1MX0VMRU1FTlRfSAogCiAjaW5jbHVkZSA8ZG9tL2RvbV9lbGVt
ZW50Lmg+CisjaW5jbHVkZSAiZG9tX3FuYW1lLmgiCisKIGNsYXNzIEtIVE1MVmlldzsKIAogbmFt
ZXNwYWNlIERPTSB7CkBAIC0yMjUsNyArMjI3LDcgQEAgcHJvdGVjdGVkOgogICAgIC8qCiAgICAg
ICogQGludGVybmFsCiAgICAgICovCi0gICAgdm9pZCBhc3NpZ25PdGhlciggY29uc3QgTm9kZSAm
b3RoZXIsIGludCBlbGVtZW50SWQgKTsKKyAgICB2b2lkIGFzc2lnbk90aGVyKCBjb25zdCBOb2Rl
ICZvdGhlciwgY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSApOwogfTsKIAogfTsgLy9uYW1l
c3BhY2UKSW5kZXg6IGtodG1sL2RvbS9odG1sX2Zvcm0uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2RvbS9odG1sX2Zvcm0uY3BwLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjExCmRpZmYgLXUgLXAgLXIxLjExIGtodG1sL2RvbS9odG1sX2Zvcm0uY3BwCi0t
LSBraHRtbC9kb20vaHRtbF9mb3JtLmNwcAkxMSBNYXkgMjAwNSAwMDo1ODoyOCAtMDAwMAkxLjEx
CisrKyBraHRtbC9kb20vaHRtbF9mb3JtLmNwcAk3IEp1bCAyMDA1IDA1OjU4OjMzIC0wMDAwCkBA
IC00Nyw3ICs0Nyw3IEBAIEhUTUxCdXR0b25FbGVtZW50OjpIVE1MQnV0dG9uRWxlbWVudChIVE0K
IAogSFRNTEJ1dHRvbkVsZW1lbnQgJkhUTUxCdXR0b25FbGVtZW50OjpvcGVyYXRvciA9IChjb25z
dCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0JVVFRPTiApOwkK
KyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6YnV0dG9uKCkgKTsJCiAgICAgcmV0
dXJuICp0aGlzOwogfQogCkBAIC0xNTcsNyArMTU3LDcgQEAgSFRNTEZpZWxkU2V0RWxlbWVudDo6
SFRNTEZpZWxkU2V0RWxlbWVudAogCiBIVE1MRmllbGRTZXRFbGVtZW50ICZIVE1MRmllbGRTZXRF
bGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhl
ciggb3RoZXIsIElEX0ZJRUxEU0VUICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFt
ZXM6OmZpZWxkc2V0KCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTE5Myw3ICsxOTMs
NyBAQCBIVE1MRm9ybUVsZW1lbnQ6OkhUTUxGb3JtRWxlbWVudChIVE1MRm9yCiAKIEhUTUxGb3Jt
RWxlbWVudCAmSFRNTEZvcm1FbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikK
IHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0ZPUk0gKTsKKyAgICBhc3NpZ25PdGhlcigg
b3RoZXIsIEhUTUxOYW1lczo6Zm9ybSgpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC0z
MTEsNyArMzExLDcgQEAgSFRNTElucHV0RWxlbWVudDo6SFRNTElucHV0RWxlbWVudChIVE1MSQog
CiBIVE1MSW5wdXRFbGVtZW50ICZIVE1MSW5wdXRFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBO
b2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0lOUFVUICk7CisgICAg
YXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OmlucHV0KCkgKTsKICAgICByZXR1cm4gKnRo
aXM7CiB9CiAKQEAgLTU3NCw3ICs1NzQsNyBAQCBIVE1MTGFiZWxFbGVtZW50OjpIVE1MTGFiZWxF
bGVtZW50KEhUTUxMCiAKIEhUTUxMYWJlbEVsZW1lbnQgJkhUTUxMYWJlbEVsZW1lbnQ6Om9wZXJh
dG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURf
TEFCRUwgKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6bGFiZWwoKSApOwog
ICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtNjMzLDcgKzYzMyw3IEBAIEhUTUxMZWdlbmRFbGVt
ZW50OjpIVE1MTGVnZW5kRWxlbWVudChIVE0KIAogSFRNTExlZ2VuZEVsZW1lbnQgJkhUTUxMZWdl
bmRFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25P
dGhlciggb3RoZXIsIElEX0xFR0VORCApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5h
bWVzOjpsZWdlbmQoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtNjkxLDcgKzY5MSw3
IEBAIEhUTUxPcHRHcm91cEVsZW1lbnQ6OkhUTUxPcHRHcm91cEVsZW1lbnQKIAogSFRNTE9wdEdy
b3VwRWxlbWVudCAmSFRNTE9wdEdyb3VwRWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAm
b3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9PUFRHUk9VUCApOworICAgIGFz
c2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpvcHRncm91cCgpICk7CiAgICAgcmV0dXJuICp0
aGlzOwogfQogCkBAIC03NDQsNyArNzQ0LDcgQEAgSFRNTFNlbGVjdEVsZW1lbnQ6OkhUTUxTZWxl
Y3RFbGVtZW50KEhUTQogCiBIVE1MU2VsZWN0RWxlbWVudCAmSFRNTFNlbGVjdEVsZW1lbnQ6Om9w
ZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwg
SURfU0VMRUNUICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OnNlbGVjdCgp
ICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC05MDYsNyArOTA2LDcgQEAgSFRNTFRleHRB
cmVhRWxlbWVudDo6SFRNTFRleHRBcmVhRWxlbWVudAogCiBIVE1MVGV4dEFyZWFFbGVtZW50ICZI
VE1MVGV4dEFyZWFFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAg
ICBhc3NpZ25PdGhlciggb3RoZXIsIElEX1RFWFRBUkVBICk7CisgICAgYXNzaWduT3RoZXIoIG90
aGVyLCBIVE1MTmFtZXM6OnRleHRhcmVhKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAg
LTEwNzQsNyArMTA3NCw3IEBAIEhUTUxPcHRpb25FbGVtZW50OjpIVE1MT3B0aW9uRWxlbWVudChI
VE0KIAogSFRNTE9wdGlvbkVsZW1lbnQgJkhUTUxPcHRpb25FbGVtZW50OjpvcGVyYXRvciA9IChj
b25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX09QVElPTiAp
OworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpvcHRpb24oKSApOwogICAgIHJl
dHVybiAqdGhpczsKIH0KIApAQCAtMTE4Miw3ICsxMTgyLDcgQEAgSFRNTElzSW5kZXhFbGVtZW50
OjpIVE1MSXNJbmRleEVsZW1lbnQoSAogCiBIVE1MSXNJbmRleEVsZW1lbnQgJkhUTUxJc0luZGV4
RWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3Ro
ZXIoIG90aGVyLCBJRF9JU0lOREVYICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFt
ZXM6OmlzaW5kZXgoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApJbmRleDoga2h0bWwvZG9t
L2h0bWxfaGVhZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0
bWwvZG9tL2h0bWxfaGVhZC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTAKZGlmZiAtdSAt
cCAtcjEuMTAga2h0bWwvZG9tL2h0bWxfaGVhZC5jcHAKLS0tIGtodG1sL2RvbS9odG1sX2hlYWQu
Y3BwCTIyIEp1biAyMDA1IDE4OjIyOjAxIC0wMDAwCTEuMTAKKysrIGtodG1sL2RvbS9odG1sX2hl
YWQuY3BwCTcgSnVsIDIwMDUgMDU6NTg6MzQgLTAwMDAKQEAgLTQyLDcgKzQyLDcgQEAgSFRNTEJh
c2VFbGVtZW50OjpIVE1MQmFzZUVsZW1lbnQoSFRNTEJhcwogCiBIVE1MQmFzZUVsZW1lbnQgJkhU
TUxCYXNlRWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNz
aWduT3RoZXIoIG90aGVyLCBJRF9CQVNFICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1M
TmFtZXM6OmJhc2UoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtOTcsNyArOTcsNyBA
QCBIVE1MTGlua0VsZW1lbnQ6OkhUTUxMaW5rRWxlbWVudChIVE1MTGluCiAKIEhUTUxMaW5rRWxl
bWVudCAmSFRNTExpbmtFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsK
LSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0xJTksgKTsKKyAgICBhc3NpZ25PdGhlciggb3Ro
ZXIsIEhUTUxOYW1lczo6bGluaygpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC0yMzgs
NyArMjM4LDcgQEAgSFRNTE1ldGFFbGVtZW50OjpIVE1MTWV0YUVsZW1lbnQoSFRNTE1ldAogCiBI
VE1MTWV0YUVsZW1lbnQgJkhUTUxNZXRhRWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAm
b3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9NRVRBICk7CisgICAgYXNzaWdu
T3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6Om1ldGEoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0K
IApAQCAtMzEyLDcgKzMxMiw3IEBAIEhUTUxTY3JpcHRFbGVtZW50OjpIVE1MU2NyaXB0RWxlbWVu
dChIVE0KIAogSFRNTFNjcmlwdEVsZW1lbnQgJkhUTUxTY3JpcHRFbGVtZW50OjpvcGVyYXRvciA9
IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX1NDUklQ
VCApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpzY3JpcHQoKSApOwogICAg
IHJldHVybiAqdGhpczsKIH0KIApAQCAtNDI0LDcgKzQyNCw3IEBAIEhUTUxTdHlsZUVsZW1lbnQ6
OkhUTUxTdHlsZUVsZW1lbnQoSFRNTFMKIAogSFRNTFN0eWxlRWxlbWVudCAmSFRNTFN0eWxlRWxl
bWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIo
IG90aGVyLCBJRF9TVFlMRSApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpz
dHlsZSgpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC00OTYsNyArNDk2LDcgQEAgSFRN
TFRpdGxlRWxlbWVudDo6SFRNTFRpdGxlRWxlbWVudChIVE1MVAogCiBIVE1MVGl0bGVFbGVtZW50
ICZIVE1MVGl0bGVFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAg
ICBhc3NpZ25PdGhlciggb3RoZXIsIElEX1RJVExFICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVy
LCBIVE1MTmFtZXM6OnRpdGxlKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKSW5kZXg6IGto
dG1sL2RvbS9odG1sX2ltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2Vi
Q29yZS9raHRtbC9kb20vaHRtbF9pbWFnZS5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuOQpk
aWZmIC11IC1wIC1yMS45IGtodG1sL2RvbS9odG1sX2ltYWdlLmNwcAotLS0ga2h0bWwvZG9tL2h0
bWxfaW1hZ2UuY3BwCTMgTm92IDIwMDMgMDY6MzI6MDQgLTAwMDAJMS45CisrKyBraHRtbC9kb20v
aHRtbF9pbWFnZS5jcHAJNyBKdWwgMjAwNSAwNTo1ODozNCAtMDAwMApAQCAtNDYsNyArNDYsNyBA
QCBIVE1MQXJlYUVsZW1lbnQ6OkhUTUxBcmVhRWxlbWVudChIVE1MQXJlCiAKIEhUTUxBcmVhRWxl
bWVudCAmSFRNTEFyZWFFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsK
LSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0FSRUEgKTsKKyAgICBhc3NpZ25PdGhlciggb3Ro
ZXIsIEhUTUxOYW1lczo6YXJlYSgpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC0xNzYs
NyArMTc2LDcgQEAgSFRNTEltYWdlRWxlbWVudDo6SFRNTEltYWdlRWxlbWVudChIVE1MSQogCiBI
VE1MSW1hZ2VFbGVtZW50ICZIVE1MSW1hZ2VFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2Rl
ICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0lNRyApOworICAgIGFzc2ln
bk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjppbWcoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0K
IApAQCAtMzcyLDcgKzM3Miw3IEBAIEhUTUxNYXBFbGVtZW50OjpIVE1MTWFwRWxlbWVudChIVE1M
TWFwRWwKIAogSFRNTE1hcEVsZW1lbnQgJkhUTUxNYXBFbGVtZW50OjpvcGVyYXRvciA9IChjb25z
dCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX01BUCApOworICAg
IGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjptYXAoKSApOwogICAgIHJldHVybiAqdGhp
czsKIH0KIApJbmRleDoga2h0bWwvZG9tL2h0bWxfaW5saW5lLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9kb20vaHRtbF9pbmxpbmUuY3BwLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjcKZGlmZiAtdSAtcCAtcjEuNyBraHRtbC9kb20vaHRtbF9pbmxpbmUu
Y3BwCi0tLSBraHRtbC9kb20vaHRtbF9pbmxpbmUuY3BwCTExIE1heSAyMDA1IDAwOjU4OjI4IC0w
MDAwCTEuNworKysga2h0bWwvZG9tL2h0bWxfaW5saW5lLmNwcAk3IEp1bCAyMDA1IDA1OjU4OjM0
IC0wMDAwCkBAIC00NSw3ICs0NSw3IEBAIEhUTUxBbmNob3JFbGVtZW50OjpIVE1MQW5jaG9yRWxl
bWVudChIVE0KIAogSFRNTEFuY2hvckVsZW1lbnQgJkhUTUxBbmNob3JFbGVtZW50OjpvcGVyYXRv
ciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0Eg
KTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6YSgpICk7CiAgICAgcmV0dXJu
ICp0aGlzOwogfQogCkBAIC0yMTcsNyArMjE3LDcgQEAgSFRNTEJSRWxlbWVudDo6SFRNTEJSRWxl
bWVudChIVE1MQlJFbGVtZQogCiBIVE1MQlJFbGVtZW50ICZIVE1MQlJFbGVtZW50OjpvcGVyYXRv
ciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0JS
ICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OmJyKCkgKTsKICAgICByZXR1
cm4gKnRoaXM7CiB9CiAKQEAgLTI1OCw3ICsyNTgsNyBAQCBIVE1MRm9udEVsZW1lbnQ6OkhUTUxG
b250RWxlbWVudChIVE1MRm9uCiAKIEhUTUxGb250RWxlbWVudCAmSFRNTEZvbnRFbGVtZW50Ojpv
cGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIs
IElEX0ZPTlQgKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6Zm9udCgpICk7
CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC0zMTksNyArMzE5LDcgQEAgSFRNTE1vZEVsZW1l
bnQ6OkhUTUxNb2RFbGVtZW50KGNvbnN0IEhUTQogSFRNTE1vZEVsZW1lbnQ6OkhUTUxNb2RFbGVt
ZW50KEhUTUxFbGVtZW50SW1wbCAqX2ltcGwpCiAgICAgOiBIVE1MRWxlbWVudCgpCiB7Ci0gICAg
aWYgKF9pbXBsICYmIChfaW1wbC0+aWQoKSA9PSBJRF9JTlMgfHwgX2ltcGwtPmlkKCkgPT0gSURf
REVMKSkKKyAgICBpZiAoX2ltcGwgJiYgKF9pbXBsLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW5z
KCkpIHx8IF9pbXBsLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZGVsKCkpKSkKICAgICAgICAgaW1w
bCA9IF9pbXBsOwogICAgIGVsc2UKICAgICAgICAgaW1wbCA9IDA7CkBAIC0zMjgsOSArMzI4LDgg
QEAgSFRNTE1vZEVsZW1lbnQ6OkhUTUxNb2RFbGVtZW50KEhUTUxFbGVtZQogCiBIVE1MTW9kRWxl
bWVudCAmSFRNTE1vZEVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewot
ICAgIGlmKCBvdGhlci5lbGVtZW50SWQoKSAhPSBJRF9JTlMgJiYKLQlvdGhlci5lbGVtZW50SWQo
KSAhPSBJRF9ERUwgKQotICAgIHsKKyAgICBpZiAoIW90aGVyLmhhbmRsZSgpLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6aW5zKCkpICYmCisgICAgICAgICFvdGhlci5oYW5kbGUoKS0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OmRlbCgpKSkgewogCWlmICggaW1wbCApIGltcGwtPmRlcmVmKCk7CiAJaW1w
bCA9IDA7CiAgICAgfSBlbHNlIHsKQEAgLTM4MSwxOSArMzgwLDE2IEBAIEhUTUxRdW90ZUVsZW1l
bnQ6OkhUTUxRdW90ZUVsZW1lbnQoY29uc3QKIHsKIH0KIAotSFRNTFF1b3RlRWxlbWVudDo6SFRN
TFF1b3RlRWxlbWVudChIVE1MR2VuZXJpY0VsZW1lbnRJbXBsICpfaW1wbCkKK0hUTUxRdW90ZUVs
ZW1lbnQ6OkhUTUxRdW90ZUVsZW1lbnQoSFRNTFF1b3RlRWxlbWVudEltcGwgKl9pbXBsKQogICAg
IDogSFRNTEVsZW1lbnQoKQogewotICAgIGlmIChfaW1wbCAmJiBfaW1wbC0+aWQoKSA9PSBJRF9R
KQotICAgICAgICBpbXBsID0gX2ltcGw7Ci0gICAgZWxzZQotICAgICAgICBpbXBsID0gMDsKKyAg
ICBpbXBsID0gX2ltcGw7CiAgICAgaWYgKCBpbXBsICkgaW1wbC0+cmVmKCk7CiB9CiAKIEhUTUxR
dW90ZUVsZW1lbnQgJkhUTUxRdW90ZUVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90
aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfUSApOworICAgIGFzc2lnbk90aGVy
KCBvdGhlciwgSFRNTE5hbWVzOjpxKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKSW5kZXg6
IGtodG1sL2RvbS9odG1sX2lubGluZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9X
ZWJDb3JlL2todG1sL2RvbS9odG1sX2lubGluZS5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjMK
ZGlmZiAtdSAtcCAtcjEuMyBraHRtbC9kb20vaHRtbF9pbmxpbmUuaAotLS0ga2h0bWwvZG9tL2h0
bWxfaW5saW5lLmgJMTUgQXByIDIwMDIgMjM6NDI6MDEgLTAwMDAJMS4zCisrKyBraHRtbC9kb20v
aHRtbF9pbmxpbmUuaAk3IEp1bCAyMDA1IDA1OjU4OjM0IC0wMDAwCkBAIC00MjUsNyArNDI1LDcg
QEAgcHVibGljOgogICAgIEhUTUxRdW90ZUVsZW1lbnQoY29uc3QgTm9kZSAmb3RoZXIpIDogSFRN
TEVsZW1lbnQoKQogICAgICAgICAgeygqdGhpcyk9b3RoZXI7fQogcHJvdGVjdGVkOgotICAgIEhU
TUxRdW90ZUVsZW1lbnQoSFRNTEdlbmVyaWNFbGVtZW50SW1wbCAqaW1wbCk7CisgICAgSFRNTFF1
b3RlRWxlbWVudChIVE1MUXVvdGVFbGVtZW50SW1wbCAqaW1wbCk7CiBwdWJsaWM6CiAKICAgICBI
VE1MUXVvdGVFbGVtZW50ICYgb3BlcmF0b3IgPSAoY29uc3QgSFRNTFF1b3RlRWxlbWVudCAmb3Ro
ZXIpOwpJbmRleDoga2h0bWwvZG9tL2h0bWxfbGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
L2N2cy9yb290L1dlYkNvcmUva2h0bWwvZG9tL2h0bWxfbGlzdC5jcHAsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuNApkaWZmIC11IC1wIC1yMS40IGtodG1sL2RvbS9odG1sX2xpc3QuY3BwCi0tLSBr
aHRtbC9kb20vaHRtbF9saXN0LmNwcAkxMCBKdW4gMjAwMiAyMDowNzozNiAtMDAwMAkxLjQKKysr
IGtodG1sL2RvbS9odG1sX2xpc3QuY3BwCTcgSnVsIDIwMDUgMDU6NTg6MzUgLTAwMDAKQEAgLTQx
LDcgKzQxLDcgQEAgSFRNTERMaXN0RWxlbWVudDo6SFRNTERMaXN0RWxlbWVudChIVE1MRAogCiBI
VE1MRExpc3RFbGVtZW50ICZIVE1MRExpc3RFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2Rl
ICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0RMICk7CisgICAgYXNzaWdu
T3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OmRsKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAK
QEAgLTg4LDcgKzg4LDcgQEAgSFRNTERpcmVjdG9yeUVsZW1lbnQ6OkhUTUxEaXJlY3RvcnlFbGVt
ZQogCiBIVE1MRGlyZWN0b3J5RWxlbWVudCAmSFRNTERpcmVjdG9yeUVsZW1lbnQ6Om9wZXJhdG9y
ID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfRElS
ICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OmRpcigpICk7CiAgICAgcmV0
dXJuICp0aGlzOwogfQogCkBAIC0xMzUsNyArMTM1LDcgQEAgSFRNTExJRWxlbWVudDo6SFRNTExJ
RWxlbWVudChIVE1MTElFbGVtZQogCiBIVE1MTElFbGVtZW50ICZIVE1MTElFbGVtZW50OjpvcGVy
YXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElE
X0xJICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OmxpKCkgKTsKICAgICBy
ZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTE5MCw3ICsxOTAsNyBAQCBIVE1MTWVudUVsZW1lbnQ6OkhU
TUxNZW51RWxlbWVudChIVE1MTWVuCiAKIEhUTUxNZW51RWxlbWVudCAmSFRNTE1lbnVFbGVtZW50
OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3Ro
ZXIsIElEX01FTlUgKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6bWVudSgp
ICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC0yMzcsNyArMjM3LDcgQEAgSFRNTE9MaXN0
RWxlbWVudDo6SFRNTE9MaXN0RWxlbWVudChIVE1MTwogCiBIVE1MT0xpc3RFbGVtZW50ICZIVE1M
T0xpc3RFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3Np
Z25PdGhlciggb3RoZXIsIElEX09MICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFt
ZXM6Om9sKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTMxMCw3ICszMTAsNyBAQCBI
VE1MVUxpc3RFbGVtZW50OjpIVE1MVUxpc3RFbGVtZW50KEhUTUxVCiAKIEhUTUxVTGlzdEVsZW1l
bnQgJkhUTUxVTGlzdEVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewot
ICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfVUwgKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIs
IEhUTUxOYW1lczo6dWwoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApJbmRleDoga2h0bWwv
ZG9tL2h0bWxfbWlzYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUv
a2h0bWwvZG9tL2h0bWxfbWlzYy5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNwpkaWZmIC11
IC1wIC1yMS43IGtodG1sL2RvbS9odG1sX21pc2MuY3BwCi0tLSBraHRtbC9kb20vaHRtbF9taXNj
LmNwcAkxMSBNYXkgMjAwNSAwMDo1ODoyOCAtMDAwMAkxLjcKKysrIGtodG1sL2RvbS9odG1sX21p
c2MuY3BwCTcgSnVsIDIwMDUgMDU6NTg6MzUgLTAwMDAKQEAgLTQxLDcgKzQxLDcgQEAgSFRNTEJh
c2VGb250RWxlbWVudDo6SFRNTEJhc2VGb250RWxlbWVudAogCiBIVE1MQmFzZUZvbnRFbGVtZW50
ICZIVE1MQmFzZUZvbnRFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsK
LSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0JBU0VGT05UICk7CisgICAgYXNzaWduT3RoZXIo
IG90aGVyLCBIVE1MTmFtZXM6OmJhc2Vmb250KCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAK
SW5kZXg6IGtodG1sL2RvbS9odG1sX29iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1dlYkNvcmUva2h0bWwvZG9tL2h0bWxfb2JqZWN0LmNwcCx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS41CmRpZmYgLXUgLXAgLXIxLjUga2h0bWwvZG9tL2h0bWxfb2JqZWN0LmNwcAotLS0g
a2h0bWwvZG9tL2h0bWxfb2JqZWN0LmNwcAkxIE1hciAyMDA0IDE3OjA0OjI0IC0wMDAwCTEuNQor
Kysga2h0bWwvZG9tL2h0bWxfb2JqZWN0LmNwcAk3IEp1bCAyMDA1IDA1OjU4OjM1IC0wMDAwCkBA
IC00Myw3ICs0Myw3IEBAIEhUTUxBcHBsZXRFbGVtZW50OjpIVE1MQXBwbGV0RWxlbWVudChIVE0K
IAogSFRNTEFwcGxldEVsZW1lbnQgJkhUTUxBcHBsZXRFbGVtZW50OjpvcGVyYXRvciA9IChjb25z
dCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0FQUExFVCApOwor
ICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjphcHBsZXQoKSApOwogICAgIHJldHVy
biAqdGhpczsKIH0KIApAQCAtMTk0LDcgKzE5NCw3IEBAIEhUTUxPYmplY3RFbGVtZW50OjpIVE1M
T2JqZWN0RWxlbWVudChIVE0KIAogSFRNTE9iamVjdEVsZW1lbnQgJkhUTUxPYmplY3RFbGVtZW50
OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3Ro
ZXIsIElEX09CSkVDVCApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpvYmpl
Y3QoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtNDMyLDcgKzQzMiw3IEBAIEhUTUxQ
YXJhbUVsZW1lbnQ6OkhUTUxQYXJhbUVsZW1lbnQoSFRNTFAKIAogSFRNTFBhcmFtRWxlbWVudCAm
SFRNTFBhcmFtRWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAg
YXNzaWduT3RoZXIoIG90aGVyLCBJRF9QQVJBTSApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwg
SFRNTE5hbWVzOjpwYXJhbSgpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkluZGV4OiBraHRt
bC9kb20vaHRtbF90YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNv
cmUva2h0bWwvZG9tL2h0bWxfdGFibGUuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjYKZGlm
ZiAtdSAtcCAtcjEuNiBraHRtbC9kb20vaHRtbF90YWJsZS5jcHAKLS0tIGtodG1sL2RvbS9odG1s
X3RhYmxlLmNwcAkzMSBPY3QgMjAwMyAwMDo0NzoxNiAtMDAwMAkxLjYKKysrIGtodG1sL2RvbS9o
dG1sX3RhYmxlLmNwcAk3IEp1bCAyMDA1IDA1OjU4OjM2IC0wMDAwCkBAIC00NSw3ICs0NSw3IEBA
IEhUTUxUYWJsZUNhcHRpb25FbGVtZW50OjpIVE1MVGFibGVDYXB0aW8KIAogSFRNTFRhYmxlQ2Fw
dGlvbkVsZW1lbnQgJkhUTUxUYWJsZUNhcHRpb25FbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBO
b2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0NBUFRJT04gKTsKKyAg
ICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6Y2FwdGlvbigpICk7CiAgICAgcmV0dXJu
ICp0aGlzOwogfQogCkBAIC04Niw5ICs4Niw4IEBAIEhUTUxUYWJsZUNlbGxFbGVtZW50OjpIVE1M
VGFibGVDZWxsRWxlbWUKIAogSFRNTFRhYmxlQ2VsbEVsZW1lbnQgJkhUTUxUYWJsZUNlbGxFbGVt
ZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBpZiggb3RoZXIuZWxl
bWVudElkKCkgIT0gSURfVEQgJiYKLQlvdGhlci5lbGVtZW50SWQoKSAhPSBJRF9USCApCi0gICAg
eworICAgIGlmICghb3RoZXIuaGFuZGxlKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0ZCgpKSB8
fAorICAgICAgICAhb3RoZXIuaGFuZGxlKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0aCgpKSkg
ewogCWlmICggaW1wbCApIGltcGwtPmRlcmVmKCk7CiAJaW1wbCA9IDA7CiAgICAgfSBlbHNlIHsK
QEAgLTI5NSw5ICsyOTQsOCBAQCBIVE1MVGFibGVDb2xFbGVtZW50OjpIVE1MVGFibGVDb2xFbGVt
ZW50CiAKIEhUTUxUYWJsZUNvbEVsZW1lbnQgJkhUTUxUYWJsZUNvbEVsZW1lbnQ6Om9wZXJhdG9y
ID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGlmKCBvdGhlci5lbGVtZW50SWQoKSAhPSBJ
RF9DT0wgJiYKLQlvdGhlci5lbGVtZW50SWQoKSAhPSBJRF9DT0xHUk9VUCApCi0gICAgeworICAg
IGlmICghb3RoZXIuaGFuZGxlKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpjb2woKSkgJiYKKyAg
ICAgICAgIW90aGVyLmhhbmRsZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Y29sZ3JvdXAoKSkp
IHsKIAlpZiAoIGltcGwgKSBpbXBsLT5kZXJlZigpOwogCWltcGwgPSAwOwogICAgIH0gZWxzZSB7
CkBAIC00MDEsNyArMzk5LDcgQEAgSFRNTFRhYmxlRWxlbWVudDo6SFRNTFRhYmxlRWxlbWVudChI
VE1MVAogCiBIVE1MVGFibGVFbGVtZW50ICZIVE1MVGFibGVFbGVtZW50OjpvcGVyYXRvciA9IChj
b25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX1RBQkxFICk7
CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OnRhYmxlKCkgKTsKICAgICByZXR1
cm4gKnRoaXM7CiB9CiAKQEAgLTYzOCw3ICs2MzYsNyBAQCBIVE1MVGFibGVSb3dFbGVtZW50OjpI
VE1MVGFibGVSb3dFbGVtZW50CiAKIEhUTUxUYWJsZVJvd0VsZW1lbnQgJkhUTUxUYWJsZVJvd0Vs
ZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVy
KCBvdGhlciwgSURfVFIgKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6dHIo
KSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtNzc1LDEwICs3NzMsOSBAQCBIVE1MVGFi
bGVTZWN0aW9uRWxlbWVudDo6SFRNTFRhYmxlU2VjdGlvCiAKIEhUTUxUYWJsZVNlY3Rpb25FbGVt
ZW50ICZIVE1MVGFibGVTZWN0aW9uRWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3Ro
ZXIpCiB7Ci0gICAgaWYob3RoZXIuZWxlbWVudElkKCkgIT0gSURfVEJPRFkgJiYKLSAgICAgICBv
dGhlci5lbGVtZW50SWQoKSAhPSBJRF9USEVBRCAmJgotICAgICAgIG90aGVyLmVsZW1lbnRJZCgp
ICE9IElEX1RGT09UICkKLSAgICB7CisgICAgaWYgKCFvdGhlci5oYW5kbGUoKS0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OnRib2R5KCkpICYmCisgICAgICAgICFvdGhlci5oYW5kbGUoKS0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OnRoZWFkKCkpICYmCisgICAgICAgICFvdGhlci5oYW5kbGUoKS0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OnRmb290KCkpKSB7CiAJaWYgKCBpbXBsICkgaW1wbC0+ZGVyZWYo
KTsKIAlpbXBsID0gMDsKICAgICB9IGVsc2UgewpJbmRleDoga2h0bWwvZWNtYS9ranNfY3NzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lY21hL2tqc19j
c3MuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjI3CmRpZmYgLXUgLXAgLXIxLjI3IGtodG1s
L2VjbWEva2pzX2Nzcy5jcHAKLS0tIGtodG1sL2VjbWEva2pzX2Nzcy5jcHAJMyBKdWwgMjAwNSAx
MDo0Nzo1NSAtMDAwMAkxLjI3CisrKyBraHRtbC9lY21hL2tqc19jc3MuY3BwCTcgSnVsIDIwMDUg
MDU6NTg6MzcgLTAwMDAKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlICJ4bWwvZG9tX2RvY2lt
cGwuaCIKICNpbmNsdWRlICJodG1sL2h0bWxfaGVhZGltcGwuaCIgLy8gZm9yIEhUTUxTdHlsZUVs
ZW1lbnQKICNpbmNsdWRlICJranNfZG9tLmgiCi0jaW5jbHVkZSAibWlzYy9odG1sdGFncy5oIgor
I2luY2x1ZGUgImh0bWxuYW1lcy5oIgogCiAjaW5jbHVkZSA8a2RlYnVnLmg+CiAKQEAgLTU1LDYg
KzU1LDcgQEAgdXNpbmcgRE9NOjpDb3VudGVySW1wbDsKIHVzaW5nIERPTTo6RG9jdW1lbnRJbXBs
OwogdXNpbmcgRE9NOjpET01TdHJpbmc7CiB1c2luZyBET006OkVsZW1lbnRJbXBsOwordXNpbmcg
RE9NOjpIVE1MTmFtZXM7CiB1c2luZyBET006OkhUTUxTdHlsZUVsZW1lbnRJbXBsOwogdXNpbmcg
RE9NOjpNZWRpYUxpc3RJbXBsOwogdXNpbmcgRE9NOjpSZWN0SW1wbDsKQEAgLTQwNCw3ICs0MDUs
NyBAQCBWYWx1ZSBET01TdHlsZVNoZWV0TGlzdDo6dHJ5R2V0KEV4ZWNTdGF0CiAgIC8vIGFuZCBk
b2Vzbid0IGxvb2sgZm9yIG5hbWUgYXR0cmlidXRlIChzZWUgaW1wbGVtZW50YXRpb24gYWJvdmUp
LgogICAvLyBCdXQgdW5pY2l0eSBvZiBzdHlsZXNoZWV0IGlkcyBpcyBnb29kIHByYWN0aWNlIGFu
eXdheSA7KQogICBFbGVtZW50SW1wbCAqZWxlbWVudCA9IG1fZG9jLT5nZXRFbGVtZW50QnlJZChw
LnN0cmluZygpKTsKLSAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC0+aWQoKSA9PSBJRF9TVFlMRSkK
KyAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnN0eWxlKCkp
KQogICAgIHJldHVybiBnZXRET01TdHlsZVNoZWV0KGV4ZWMsIHN0YXRpY19jYXN0PEhUTUxTdHls
ZUVsZW1lbnRJbXBsICo+KGVsZW1lbnQpLT5zaGVldCgpKTsKIAogICByZXR1cm4gRE9NT2JqZWN0
Ojp0cnlHZXQoZXhlYywgcCk7CkluZGV4OiBraHRtbC9lY21hL2tqc19kb20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VjbWEva2pzX2RvbS5jcHAsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuNzcKZGlmZiAtdSAtcCAtcjEuNzcga2h0bWwvZWNtYS9ranNf
ZG9tLmNwcAotLS0ga2h0bWwvZWNtYS9ranNfZG9tLmNwcAkzIEp1bCAyMDA1IDEwOjQ3OjU1IC0w
MDAwCTEuNzcKKysrIGtodG1sL2VjbWEva2pzX2RvbS5jcHAJNyBKdWwgMjAwNSAwNTo1ODozOCAt
MDAwMApAQCAtNDcsOCArNDcsNiBAQAogCiAjaW5jbHVkZSAiaHRtbF9vYmplY3RpbXBsLmgiCiAK
LSNpbmNsdWRlICJtaXNjL2h0bWx0YWdzLmgiCi0KICNpZiBBUFBMRV9DSEFOR0VTCiAjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvcnVudGltZV9vYmplY3QuaD4KICNlbmRpZgpAQCAtNjcsNiArNjUs
NyBAQCB1c2luZyBET006OkhUTUxBcHBsZXRFbGVtZW50SW1wbDsKIHVzaW5nIERPTTo6SFRNTERv
Y3VtZW50SW1wbDsKIHVzaW5nIERPTTo6SFRNTEVsZW1lbnRJbXBsOwogdXNpbmcgRE9NOjpIVE1M
RW1iZWRFbGVtZW50SW1wbDsKK3VzaW5nIERPTTo6SFRNTE5hbWVzOwogdXNpbmcgRE9NOjpIVE1M
T2JqZWN0RWxlbWVudEltcGw7CiB1c2luZyBET006Ok5hbWVkTm9kZU1hcEltcGw7CiB1c2luZyBE
T006Ok5vZGU7CkBAIC00NjIsNyArNDYxLDcgQEAgdm9pZCBET01Ob2RlOjpwdXRWYWx1ZShFeGVj
U3RhdGUgKmV4ZWMsIAogICAgIG5vZGUuc2V0Tm9kZVZhbHVlKHZhbHVlLnRvU3RyaW5nKGV4ZWMp
LnN0cmluZygpLCBleGNlcHRpb24pOwogICAgIGJyZWFrOwogICBjYXNlIFByZWZpeDoKLSAgICBu
b2RlLnNldFByZWZpeCh2YWx1ZS50b1N0cmluZyhleGVjKS5zdHJpbmcoKSwgZXhjZXB0aW9uKTsK
KyAgICBub2RlLnNldFByZWZpeCh2YWx1ZS50b1N0cmluZyhleGVjKS5zdHJpbmcoKS5pbXBsZW1l
bnRhdGlvbigpLCBleGNlcHRpb24pOwogICAgIGJyZWFrOwogICBjYXNlIE9uQWJvcnQ6CiAgICAg
c2V0TGlzdGVuZXIoZXhlYyxET006OkV2ZW50SW1wbDo6QUJPUlRfRVZFTlQsdmFsdWUpOwpAQCAt
MTE4Nyw3ICsxMTg2LDcgQEAgVmFsdWUgRE9NRWxlbWVudDo6dHJ5R2V0KEV4ZWNTdGF0ZSAqZXhl
YwogICB7CiAgICAgc3dpdGNoKCBlbnRyeS0+dmFsdWUgKSB7CiAgICAgY2FzZSBUYWdOYW1lOgot
ICAgICAgcmV0dXJuIGdldFN0cmluZ09yTnVsbChlbGVtZW50LnRhZ05hbWUoKSk7CisgICAgICBy
ZXR1cm4gZ2V0U3RyaW5nT3JOdWxsKGVsZW1lbnQubm9kZU5hbWUoKSk7CiAgICAgY2FzZSBTdHls
ZToKICAgICAgIHJldHVybiBnZXRET01DU1NTdHlsZURlY2xhcmF0aW9uKGV4ZWMsZWxlbWVudC5z
dHlsZSgpKTsKICAgICBkZWZhdWx0OgpAQCAtMTcxMCwyNiArMTcwOSwyMSBAQCBWYWx1ZUltcCAq
Z2V0UnVudGltZU9iamVjdChFeGVjU3RhdGUgKmV4CiAgICAgaWYgKCFuKQogICAgICAgICByZXR1
cm4gMDsKIAotICAgIHN3aXRjaCAobi0+aWQoKSkgewotICAgICAgICBjYXNlIElEX0FQUExFVDog
ewotICAgICAgICAgICAgSFRNTEFwcGxldEVsZW1lbnRJbXBsICphcHBsZXRFbGVtZW50ID0gc3Rh
dGljX2Nhc3Q8SFRNTEFwcGxldEVsZW1lbnRJbXBsICo+KG4pOwotICAgICAgICAgICAgaWYgKGFw
cGxldEVsZW1lbnQtPmdldEFwcGxldEluc3RhbmNlKCkpCi0gICAgICAgICAgICAgICAgLy8gVGhl
IGluc3RhbmNlIGlzIG93bmVkIGJ5IHRoZSBhcHBsZXQgZWxlbWVudC4KLSAgICAgICAgICAgICAg
ICByZXR1cm4gbmV3IFJ1bnRpbWVPYmplY3RJbXAoYXBwbGV0RWxlbWVudC0+Z2V0QXBwbGV0SW5z
dGFuY2UoKSwgZmFsc2UpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
Y2FzZSBJRF9FTUJFRDogewotICAgICAgICAgICAgSFRNTEVtYmVkRWxlbWVudEltcGwgKmVtYmVk
RWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxFbWJlZEVsZW1lbnRJbXBsICo+KG4pOwotICAgICAg
ICAgICAgaWYgKGVtYmVkRWxlbWVudC0+Z2V0RW1iZWRJbnN0YW5jZSgpKQotICAgICAgICAgICAg
ICAgIHJldHVybiBuZXcgUnVudGltZU9iamVjdEltcChlbWJlZEVsZW1lbnQtPmdldEVtYmVkSW5z
dGFuY2UoKSwgZmFsc2UpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
Y2FzZSBJRF9PQkpFQ1Q6IHsKLSAgICAgICAgICAgIEhUTUxPYmplY3RFbGVtZW50SW1wbCAqb2Jq
ZWN0RWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxPYmplY3RFbGVtZW50SW1wbCAqPihuKTsKLSAg
ICAgICAgICAgIGlmIChvYmplY3RFbGVtZW50LT5nZXRPYmplY3RJbnN0YW5jZSgpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBuZXcgUnVudGltZU9iamVjdEltcChvYmplY3RFbGVtZW50LT5nZXRP
YmplY3RJbnN0YW5jZSgpLCBmYWxzZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQor
ICAgIGlmIChuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YXBwbGV0KCkpKSB7CisgICAgICAgIEhU
TUxBcHBsZXRFbGVtZW50SW1wbCAqYXBwbGV0RWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxBcHBs
ZXRFbGVtZW50SW1wbCAqPihuKTsKKyAgICAgICAgaWYgKGFwcGxldEVsZW1lbnQtPmdldEFwcGxl
dEluc3RhbmNlKCkpCisgICAgICAgICAgICAvLyBUaGUgaW5zdGFuY2UgaXMgb3duZWQgYnkgdGhl
IGFwcGxldCBlbGVtZW50LgorICAgICAgICAgICAgcmV0dXJuIG5ldyBSdW50aW1lT2JqZWN0SW1w
KGFwcGxldEVsZW1lbnQtPmdldEFwcGxldEluc3RhbmNlKCksIGZhbHNlKTsKKyAgICB9CisgICAg
ZWxzZSBpZiAobi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmVtYmVkKCkpKSB7CisgICAgICAgIEhU
TUxFbWJlZEVsZW1lbnRJbXBsICplbWJlZEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRW1iZWRF
bGVtZW50SW1wbCAqPihuKTsKKyAgICAgICAgaWYgKGVtYmVkRWxlbWVudC0+Z2V0RW1iZWRJbnN0
YW5jZSgpKQorICAgICAgICAgICAgcmV0dXJuIG5ldyBSdW50aW1lT2JqZWN0SW1wKGVtYmVkRWxl
bWVudC0+Z2V0RW1iZWRJbnN0YW5jZSgpLCBmYWxzZSk7CisgICAgfQorICAgIGVsc2UgaWYgKG4t
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvYmplY3QoKSkpIHsKKyAgICAgICAgSFRNTE9iamVjdEVs
ZW1lbnRJbXBsICpvYmplY3RFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTE9iamVjdEVsZW1lbnRJ
bXBsICo+KG4pOworICAgICAgICBpZiAob2JqZWN0RWxlbWVudC0+Z2V0T2JqZWN0SW5zdGFuY2Uo
KSkKKyAgICAgICAgICAgIHJldHVybiBuZXcgUnVudGltZU9iamVjdEltcChvYmplY3RFbGVtZW50
LT5nZXRPYmplY3RJbnN0YW5jZSgpLCBmYWxzZSk7CiAgICAgfQogICAgIAogICAgIC8vIElmIHdl
IGRvbid0IGhhdmUgYSBydW50aW1lIG9iamVjdCByZXR1cm4gMC4KSW5kZXg6IGtodG1sL2VjbWEv
a2pzX2h0bWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1s
L2VjbWEva2pzX2h0bWwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEyMQpkaWZmIC11IC1w
IC1yMS4xMjEga2h0bWwvZWNtYS9ranNfaHRtbC5jcHAKLS0tIGtodG1sL2VjbWEva2pzX2h0bWwu
Y3BwCTMgSnVsIDIwMDUgMTA6NDc6NTYgLTAwMDAJMS4xMjEKKysrIGtodG1sL2VjbWEva2pzX2h0
bWwuY3BwCTcgSnVsIDIwMDUgMDU6NTg6NDQgLTAwMDAKQEAgLTQ2LDggKzQ2LDYgQEAKICNpbmNs
dWRlICJranNfZXZlbnRzLmgiCiAjaW5jbHVkZSAia2pzX3Byb3h5LmgiCiAKLSNpbmNsdWRlICJt
aXNjL2h0bWx0YWdzLmgiCi0KICNpbmNsdWRlICJyZW5kZXJpbmcvcmVuZGVyX2NhbnZhc2ltYWdl
LmgiCiAjaW5jbHVkZSAicmVuZGVyaW5nL3JlbmRlcl9vYmplY3QuaCIKICNpbmNsdWRlICJyZW5k
ZXJpbmcvcmVuZGVyX2xheWVyLmgiCkBAIC0xMDksNiArMTA3LDcgQEAgdXNpbmcgRE9NOjpIVE1M
TWFwRWxlbWVudEltcGw7CiB1c2luZyBET006OkhUTUxNZW51RWxlbWVudEltcGw7CiB1c2luZyBE
T006OkhUTUxNZXRhRWxlbWVudEltcGw7CiB1c2luZyBET006OkhUTUxNb2RFbGVtZW50SW1wbDsK
K3VzaW5nIERPTTo6SFRNTE5hbWVzOwogdXNpbmcgRE9NOjpIVE1MT0xpc3RFbGVtZW50SW1wbDsK
IHVzaW5nIERPTTo6SFRNTE9iamVjdEVsZW1lbnRJbXBsOwogdXNpbmcgRE9NOjpIVE1MT3B0R3Jv
dXBFbGVtZW50SW1wbDsKQEAgLTM1Myw3ICszNTIsNyBAQCBWYWx1ZSBIVE1MRG9jdW1lbnQ6OnRy
eUdldChFeGVjU3RhdGUgKmV4CiAgIGlmICh2YWwpCiAgICAgcmV0dXJuIFZhbHVlKHZhbCk7CiAK
LSAgSFRNTEJvZHlFbGVtZW50SW1wbCAqYm9keUVsZW1lbnQgPSAoYm9keSAmJiBib2R5LT5pZCgp
ID09IElEX0JPRFkpID8gc3RhdGljX2Nhc3Q8SFRNTEJvZHlFbGVtZW50SW1wbCAqPihib2R5KSA6
IDA7CisgIEhUTUxCb2R5RWxlbWVudEltcGwgKmJvZHlFbGVtZW50ID0gKGJvZHkgJiYgYm9keS0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJvZHkoKSkpID8gc3RhdGljX2Nhc3Q8SFRNTEJvZHlFbGVt
ZW50SW1wbCAqPihib2R5KSA6IDA7CiAKICAgaWYgKGVudHJ5KSB7CiAgICAgc3dpdGNoIChlbnRy
eS0+dmFsdWUpIHsKQEAgLTQyOSw3ICs0MjgsNyBAQCB2b2lkIEtKUzo6SFRNTERvY3VtZW50Ojpw
dXRWYWx1ZShFeGVjU3RhCiAgIERPTUV4Y2VwdGlvblRyYW5zbGF0b3IgZXhjZXB0aW9uKGV4ZWMp
OwogICBIVE1MRG9jdW1lbnRJbXBsICZkb2MgPSAqc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50SW1w
bCAqPihpbXBsKCkpOwogICBIVE1MRWxlbWVudEltcGwgKmJvZHkgPSBkb2MuYm9keSgpOwotICBI
VE1MQm9keUVsZW1lbnRJbXBsICpib2R5RWxlbWVudCA9IChib2R5ICYmIGJvZHktPmlkKCkgPT0g
SURfQk9EWSkgPyBzdGF0aWNfY2FzdDxIVE1MQm9keUVsZW1lbnRJbXBsICo+KGJvZHkpIDogMDsK
KyAgSFRNTEJvZHlFbGVtZW50SW1wbCAqYm9keUVsZW1lbnQgPSAoYm9keSAmJiBib2R5LT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6Ym9keSgpKSkgPyBzdGF0aWNfY2FzdDxIVE1MQm9keUVsZW1lbnRJ
bXBsICo+KGJvZHkpIDogMDsKIAogICBzd2l0Y2ggKHRva2VuKSB7CiAgIGNhc2UgVGl0bGU6CkBA
IC01ODMsMTMzICs1ODIsMjE4IEBAIGNvbnN0IENsYXNzSW5mbyBLSlM6OkhUTUxFbGVtZW50Ojpt
YXJxdWUKIAogY29uc3QgQ2xhc3NJbmZvKiBLSlM6OkhUTUxFbGVtZW50OjpjbGFzc0luZm8oKSBj
b25zdAogewotICBzd2l0Y2ggKGltcGwoKS0+aWQoKSkgewotICBjYXNlIElEX0hUTUw6Ci0gICAg
cmV0dXJuICZodG1sX2luZm87Ci0gIGNhc2UgSURfSEVBRDoKLSAgICByZXR1cm4gJmhlYWRfaW5m
bzsKLSAgY2FzZSBJRF9MSU5LOgotICAgIHJldHVybiAmbGlua19pbmZvOwotICBjYXNlIElEX1RJ
VExFOgotICAgIHJldHVybiAmdGl0bGVfaW5mbzsKLSAgY2FzZSBJRF9NRVRBOgotICAgIHJldHVy
biAmbWV0YV9pbmZvOwotICBjYXNlIElEX0JBU0U6Ci0gICAgcmV0dXJuICZiYXNlX2luZm87Ci0g
IGNhc2UgSURfSVNJTkRFWDoKLSAgICByZXR1cm4gJmlzSW5kZXhfaW5mbzsKLSAgY2FzZSBJRF9T
VFlMRToKLSAgICByZXR1cm4gJnN0eWxlX2luZm87Ci0gIGNhc2UgSURfQk9EWToKLSAgICByZXR1
cm4gJmJvZHlfaW5mbzsKLSAgY2FzZSBJRF9GT1JNOgotICAgIHJldHVybiAmZm9ybV9pbmZvOwot
ICBjYXNlIElEX1NFTEVDVDoKLSAgICByZXR1cm4gJnNlbGVjdF9pbmZvOwotICBjYXNlIElEX09Q
VEdST1VQOgotICAgIHJldHVybiAmb3B0R3JvdXBfaW5mbzsKLSAgY2FzZSBJRF9PUFRJT046Ci0g
ICAgcmV0dXJuICZvcHRpb25faW5mbzsKLSAgY2FzZSBJRF9JTlBVVDoKLSAgICByZXR1cm4gJmlu
cHV0X2luZm87Ci0gIGNhc2UgSURfVEVYVEFSRUE6Ci0gICAgcmV0dXJuICZ0ZXh0QXJlYV9pbmZv
OwotICBjYXNlIElEX0JVVFRPTjoKLSAgICByZXR1cm4gJmJ1dHRvbl9pbmZvOwotICBjYXNlIElE
X0xBQkVMOgotICAgIHJldHVybiAmbGFiZWxfaW5mbzsKLSAgY2FzZSBJRF9GSUVMRFNFVDoKLSAg
ICByZXR1cm4gJmZpZWxkU2V0X2luZm87Ci0gIGNhc2UgSURfTEVHRU5EOgotICAgIHJldHVybiAm
bGVnZW5kX2luZm87Ci0gIGNhc2UgSURfVUw6Ci0gICAgcmV0dXJuICZ1bF9pbmZvOwotICBjYXNl
IElEX09MOgotICAgIHJldHVybiAmb2xfaW5mbzsKLSAgY2FzZSBJRF9ETDoKLSAgICByZXR1cm4g
JmRsX2luZm87Ci0gIGNhc2UgSURfRElSOgotICAgIHJldHVybiAmZGlyX2luZm87Ci0gIGNhc2Ug
SURfTUVOVToKLSAgICByZXR1cm4gJm1lbnVfaW5mbzsKLSAgY2FzZSBJRF9MSToKLSAgICByZXR1
cm4gJmxpX2luZm87Ci0gIGNhc2UgSURfRElWOgotICAgIHJldHVybiAmZGl2X2luZm87Ci0gIGNh
c2UgSURfUDoKLSAgICByZXR1cm4gJnBfaW5mbzsKLSAgY2FzZSBJRF9IMToKLSAgY2FzZSBJRF9I
MjoKLSAgY2FzZSBJRF9IMzoKLSAgY2FzZSBJRF9INDoKLSAgY2FzZSBJRF9INToKLSAgY2FzZSBJ
RF9INjoKLSAgICByZXR1cm4gJmhlYWRpbmdfaW5mbzsKLSAgY2FzZSBJRF9CTE9DS1FVT1RFOgot
ICAgIHJldHVybiAmYmxvY2tRdW90ZV9pbmZvOwotICBjYXNlIElEX1E6Ci0gICAgcmV0dXJuICZx
X2luZm87Ci0gIGNhc2UgSURfUFJFOgotICAgIHJldHVybiAmcHJlX2luZm87Ci0gIGNhc2UgSURf
QlI6Ci0gICAgcmV0dXJuICZicl9pbmZvOwotICBjYXNlIElEX0JBU0VGT05UOgotICAgIHJldHVy
biAmYmFzZUZvbnRfaW5mbzsKLSAgY2FzZSBJRF9GT05UOgotICAgIHJldHVybiAmZm9udF9pbmZv
OwotICBjYXNlIElEX0hSOgotICAgIHJldHVybiAmaHJfaW5mbzsKLSAgY2FzZSBJRF9JTlM6Ci0g
IGNhc2UgSURfREVMOgotICAgIHJldHVybiAmbW9kX2luZm87Ci0gIGNhc2UgSURfQToKLSAgICBy
ZXR1cm4gJmFfaW5mbzsKLSAgY2FzZSBJRF9DQU5WQVM6Ci0gICAgcmV0dXJuICZjYW52YXNfaW5m
bzsKLSAgY2FzZSBJRF9JTUc6Ci0gICAgcmV0dXJuICZpbWdfaW5mbzsKLSAgY2FzZSBJRF9PQkpF
Q1Q6Ci0gICAgcmV0dXJuICZvYmplY3RfaW5mbzsKLSAgY2FzZSBJRF9QQVJBTToKLSAgICByZXR1
cm4gJnBhcmFtX2luZm87Ci0gIGNhc2UgSURfQVBQTEVUOgotICAgIHJldHVybiAmYXBwbGV0X2lu
Zm87Ci0gIGNhc2UgSURfTUFQOgotICAgIHJldHVybiAmbWFwX2luZm87Ci0gIGNhc2UgSURfQVJF
QToKLSAgICByZXR1cm4gJmFyZWFfaW5mbzsKLSAgY2FzZSBJRF9TQ1JJUFQ6Ci0gICAgcmV0dXJu
ICZzY3JpcHRfaW5mbzsKLSAgY2FzZSBJRF9UQUJMRToKLSAgICByZXR1cm4gJnRhYmxlX2luZm87
Ci0gIGNhc2UgSURfQ0FQVElPTjoKLSAgICByZXR1cm4gJmNhcHRpb25faW5mbzsKLSAgY2FzZSBJ
RF9DT0w6Ci0gICAgcmV0dXJuICZjb2xfaW5mbzsKLSAgY2FzZSBJRF9USEVBRDoKLSAgICByZXR1
cm4gJnRhYmxlc2VjdGlvbl9pbmZvOwotICBjYXNlIElEX1RCT0RZOgotICAgIHJldHVybiAmdGFi
bGVzZWN0aW9uX2luZm87Ci0gIGNhc2UgSURfVEZPT1Q6Ci0gICAgcmV0dXJuICZ0YWJsZXNlY3Rp
b25faW5mbzsKLSAgY2FzZSBJRF9UUjoKLSAgICByZXR1cm4gJnRyX2luZm87Ci0gIGNhc2UgSURf
VEg6Ci0gICAgcmV0dXJuICZ0YWJsZWNlbGxfaW5mbzsKLSAgY2FzZSBJRF9URDoKLSAgICByZXR1
cm4gJnRhYmxlY2VsbF9pbmZvOwotICBjYXNlIElEX0ZSQU1FU0VUOgotICAgIHJldHVybiAmZnJh
bWVTZXRfaW5mbzsKLSAgY2FzZSBJRF9GUkFNRToKLSAgICByZXR1cm4gJmZyYW1lX2luZm87Ci0g
IGNhc2UgSURfSUZSQU1FOgotICAgIHJldHVybiAmaUZyYW1lX2luZm87Ci0gIGNhc2UgSURfTUFS
UVVFRToKLSAgICByZXR1cm4gJm1hcnF1ZWVfaW5mbzsKLSAgZGVmYXVsdDoKKyAgICAvLyBXZSBh
bHJlYWR5IGtub3cgd2UgaGF2ZSBhbiBIVE1MIGVsZW1lbnQsIHNvIHdlIG9ubHkgbmVlZCB0byBj
b21wYXJlIHRoZSBsb2NhbE5hbWUgY29tcG9uZW50IG9mIHRoZSBxdWFsaWZpZWQgbmFtZS4KKyAg
ICBzdGF0aWMgUVB0ckRpY3Q8Y29uc3QgQ2xhc3NJbmZvPiBjbGFzc0luZm9EaWN0OworICAgIGlm
IChjbGFzc0luZm9EaWN0LmlzRW1wdHkoKSkgeworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2Vy
dChIVE1MTmFtZXM6OmEoKS5sb2NhbE5hbWVQdHIoKSwgJmFfaW5mbyk7CisgICAgICAgIGNsYXNz
SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6YXBwbGV0KCkubG9jYWxOYW1lUHRyKCksICZhcHBs
ZXRfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6YXJlYSgp
LmxvY2FsTmFtZVB0cigpLCAmYXJlYV9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNl
cnQoSFRNTE5hbWVzOjpiYXNlKCkubG9jYWxOYW1lUHRyKCksICZiYXNlX2luZm8pOworICAgICAg
ICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmJhc2Vmb250KCkubG9jYWxOYW1lUHRy
KCksICZiYXNlRm9udF9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5h
bWVzOjpibG9ja3F1b3RlKCkubG9jYWxOYW1lUHRyKCksICZibG9ja1F1b3RlX2luZm8pOworICAg
ICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmJvZHkoKS5sb2NhbE5hbWVQdHIo
KSwgJmJvZHlfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6
YnIoKS5sb2NhbE5hbWVQdHIoKSwgJmJyX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmlu
c2VydChIVE1MTmFtZXM6OmJ1dHRvbigpLmxvY2FsTmFtZVB0cigpLCAmYnV0dG9uX2luZm8pOwor
ICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmNhbnZhcygpLmxvY2FsTmFt
ZVB0cigpLCAmY2FudmFzX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1M
TmFtZXM6OmNhcHRpb24oKS5sb2NhbE5hbWVQdHIoKSwgJmNhcHRpb25faW5mbyk7CisgICAgICAg
IGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6Y29sKCkubG9jYWxOYW1lUHRyKCksICZj
b2xfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6Y29sZ3Jv
dXAoKS5sb2NhbE5hbWVQdHIoKSwgJmNvbF9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5p
bnNlcnQoSFRNTE5hbWVzOjpkZWwoKS5sb2NhbE5hbWVQdHIoKSwgJm1vZF9pbmZvKTsKKyAgICAg
ICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpkaXIoKS5sb2NhbE5hbWVQdHIoKSwg
JmRpcl9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpkaXYo
KS5sb2NhbE5hbWVQdHIoKSwgJmRpdl9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNl
cnQoSFRNTE5hbWVzOjpkbCgpLmxvY2FsTmFtZVB0cigpLCAmZGxfaW5mbyk7CisgICAgICAgIGNs
YXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6ZmllbGRzZXQoKS5sb2NhbE5hbWVQdHIoKSwg
JmZpZWxkU2V0X2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6
OmZvbnQoKS5sb2NhbE5hbWVQdHIoKSwgJmZvbnRfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0Rp
Y3QuaW5zZXJ0KEhUTUxOYW1lczo6Zm9ybSgpLmxvY2FsTmFtZVB0cigpLCAmZm9ybV9pbmZvKTsK
KyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpmcmFtZSgpLmxvY2FsTmFt
ZVB0cigpLCAmZnJhbWVfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxO
YW1lczo6ZnJhbWVzZXQoKS5sb2NhbE5hbWVQdHIoKSwgJmZyYW1lU2V0X2luZm8pOworICAgICAg
ICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmgxKCkubG9jYWxOYW1lUHRyKCksICZo
ZWFkaW5nX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Omgy
KCkubG9jYWxOYW1lUHRyKCksICZoZWFkaW5nX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0
Lmluc2VydChIVE1MTmFtZXM6OmgzKCkubG9jYWxOYW1lUHRyKCksICZoZWFkaW5nX2luZm8pOwor
ICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Omg0KCkubG9jYWxOYW1lUHRy
KCksICZoZWFkaW5nX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFt
ZXM6Omg1KCkubG9jYWxOYW1lUHRyKCksICZoZWFkaW5nX2luZm8pOworICAgICAgICBjbGFzc0lu
Zm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Omg2KCkubG9jYWxOYW1lUHRyKCksICZoZWFkaW5nX2lu
Zm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmhlYWQoKS5sb2Nh
bE5hbWVQdHIoKSwgJmhlYWRfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhU
TUxOYW1lczo6aHIoKS5sb2NhbE5hbWVQdHIoKSwgJmhyX2luZm8pOworICAgICAgICBjbGFzc0lu
Zm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Omh0bWwoKS5sb2NhbE5hbWVQdHIoKSwgJmh0bWxfaW5m
byk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6aWZyYW1lKCkubG9j
YWxOYW1lUHRyKCksICZpRnJhbWVfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0
KEhUTUxOYW1lczo6aW1nKCkubG9jYWxOYW1lUHRyKCksICZpbWdfaW5mbyk7CisgICAgICAgIGNs
YXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6aW5wdXQoKS5sb2NhbE5hbWVQdHIoKSwgJmlu
cHV0X2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Omlucygp
LmxvY2FsTmFtZVB0cigpLCAmbW9kX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2Vy
dChIVE1MTmFtZXM6OmlzaW5kZXgoKS5sb2NhbE5hbWVQdHIoKSwgJmlzSW5kZXhfaW5mbyk7Cisg
ICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6bGFiZWwoKS5sb2NhbE5hbWVQ
dHIoKSwgJmxhYmVsX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFt
ZXM6OmxlZ2VuZCgpLmxvY2FsTmFtZVB0cigpLCAmbGVnZW5kX2luZm8pOworICAgICAgICBjbGFz
c0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmxpKCkubG9jYWxOYW1lUHRyKCksICZsaV9pbmZv
KTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpsaW5rKCkubG9jYWxO
YW1lUHRyKCksICZsaW5rX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1M
TmFtZXM6Om1hcCgpLmxvY2FsTmFtZVB0cigpLCAmbWFwX2luZm8pOworICAgICAgICBjbGFzc0lu
Zm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Om1hcnF1ZWUoKS5sb2NhbE5hbWVQdHIoKSwgJm1hcnF1
ZWVfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6bWVudSgp
LmxvY2FsTmFtZVB0cigpLCAmbWVudV9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNl
cnQoSFRNTE5hbWVzOjptZXRhKCkubG9jYWxOYW1lUHRyKCksICZtZXRhX2luZm8pOworICAgICAg
ICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Om9iamVjdCgpLmxvY2FsTmFtZVB0cigp
LCAmb2JqZWN0X2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6
Om9sKCkubG9jYWxOYW1lUHRyKCksICZvbF9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5p
bnNlcnQoSFRNTE5hbWVzOjpvcHRpb24oKS5sb2NhbE5hbWVQdHIoKSwgJm9wdGlvbl9pbmZvKTsK
KyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpvcHRncm91cCgpLmxvY2Fs
TmFtZVB0cigpLCAmb3B0R3JvdXBfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0
KEhUTUxOYW1lczo6cCgpLmxvY2FsTmFtZVB0cigpLCAmcF9pbmZvKTsKKyAgICAgICAgY2xhc3NJ
bmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpwYXJhbSgpLmxvY2FsTmFtZVB0cigpLCAmcGFyYW1f
aW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6cHJlKCkubG9j
YWxOYW1lUHRyKCksICZwcmVfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhU
TUxOYW1lczo6cSgpLmxvY2FsTmFtZVB0cigpLCAmcV9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZv
RGljdC5pbnNlcnQoSFRNTE5hbWVzOjpzY3JpcHQoKS5sb2NhbE5hbWVQdHIoKSwgJnNjcmlwdF9p
bmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpzZWxlY3QoKS5s
b2NhbE5hbWVQdHIoKSwgJnNlbGVjdF9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNl
cnQoSFRNTE5hbWVzOjpzdHlsZSgpLmxvY2FsTmFtZVB0cigpLCAmc3R5bGVfaW5mbyk7CisgICAg
ICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6dGFibGUoKS5sb2NhbE5hbWVQdHIo
KSwgJnRhYmxlX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6
OnRib2R5KCkubG9jYWxOYW1lUHRyKCksICZ0YWJsZXNlY3Rpb25faW5mbyk7CisgICAgICAgIGNs
YXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6dGQoKS5sb2NhbE5hbWVQdHIoKSwgJnRhYmxl
Y2VsbF9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjp0ZXh0
YXJlYSgpLmxvY2FsTmFtZVB0cigpLCAmdGV4dEFyZWFfaW5mbyk7CisgICAgICAgIGNsYXNzSW5m
b0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6dGgoKS5sb2NhbE5hbWVQdHIoKSwgJnRhYmxlY2VsbF9p
bmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjp0aGVhZCgpLmxv
Y2FsTmFtZVB0cigpLCAmdGFibGVzZWN0aW9uX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0
Lmluc2VydChIVE1MTmFtZXM6OnRmb290KCkubG9jYWxOYW1lUHRyKCksICZ0YWJsZXNlY3Rpb25f
aW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6dGl0bGUoKS5s
b2NhbE5hbWVQdHIoKSwgJnRpdGxlX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2Vy
dChIVE1MTmFtZXM6OnRyKCkubG9jYWxOYW1lUHRyKCksICZ0cl9pbmZvKTsKKyAgICAgICAgY2xh
c3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjp1bCgpLmxvY2FsTmFtZVB0cigpLCAmdWxfaW5m
byk7CisgICAgfQorICAgIAorICAgIEhUTUxFbGVtZW50SW1wbCogZWxlbWVudCA9IHN0YXRpY19j
YXN0PEhUTUxFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgY29uc3QgQ2xhc3NJbmZvKiByZXN1
bHQgPSBjbGFzc0luZm9EaWN0LmZpbmQoZWxlbWVudC0+bG9jYWxOYW1lKCkuaW1wbGVtZW50YXRp
b24oKSk7CisgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICByZXR1
cm4gJmluZm87Ci0gIH0KIH0KKworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVs
ZW1lbnQ6Omh0bWxfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6Omh0bWxHZXR0ZXIsICZIVE1MRWxl
bWVudDo6aHRtbFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVs
ZW1lbnQ6OmhlYWRfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmhlYWRHZXR0ZXIsICZIVE1MRWxl
bWVudDo6aGVhZFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVs
ZW1lbnQ6OmxpbmtfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmxpbmtHZXR0ZXIsICZIVE1MRWxl
bWVudDo6bGlua1NldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVs
ZW1lbnQ6OnRpdGxlX2dldHNldCA9IHsgJkhUTUxFbGVtZW50Ojp0aXRsZUdldHRlciwgJkhUTUxF
bGVtZW50Ojp0aXRsZVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRN
TEVsZW1lbnQ6Om1ldGFfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6Om1ldGFHZXR0ZXIsICZIVE1M
RWxlbWVudDo6bWV0YVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRN
TEVsZW1lbnQ6OmJhc2VfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmJhc2VHZXR0ZXIsICZIVE1M
RWxlbWVudDo6YmFzZVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRN
TEVsZW1lbnQ6OmlzSW5kZXhfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmlzSW5kZXhHZXR0ZXIs
ICZIVE1MRWxlbWVudDo6aXNJbmRleFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNl
dEluZm8gSFRNTEVsZW1lbnQ6OnN0eWxlX2dldHNldCA9IHsgJkhUTUxFbGVtZW50OjpzdHlsZUdl
dHRlciwgJkhUTUxFbGVtZW50OjpzdHlsZVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6Okdl
dFNldEluZm8gSFRNTEVsZW1lbnQ6OmJvZHlfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmJvZHlH
ZXR0ZXIsICZIVE1MRWxlbWVudDo6Ym9keVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6Okdl
dFNldEluZm8gSFRNTEVsZW1lbnQ6OmZvcm1fZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmZvcm1H
ZXR0ZXIsICZIVE1MRWxlbWVudDo6Zm9ybVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6Okdl
dFNldEluZm8gSFRNTEVsZW1lbnQ6OnNlbGVjdF9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6c2Vs
ZWN0R2V0dGVyLCAmSFRNTEVsZW1lbnQ6OnNlbGVjdFNldHRlciB9OworY29uc3QgSFRNTEVsZW1l
bnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6Om9wdEdyb3VwX2dldHNldCA9IHsgJkhUTUxFbGVt
ZW50OjpvcHRHcm91cEdldHRlciwgJkhUTUxFbGVtZW50OjpvcHRHcm91cFNldHRlciB9OworY29u
c3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6Om9wdGlvbl9nZXRzZXQgPSB7
ICZIVE1MRWxlbWVudDo6b3B0aW9uR2V0dGVyLCAmSFRNTEVsZW1lbnQ6Om9wdGlvblNldHRlciB9
OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmlucHV0X2dldHNl
dCA9IHsgJkhUTUxFbGVtZW50OjppbnB1dEdldHRlciwgJkhUTUxFbGVtZW50OjppbnB1dFNldHRl
ciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OnRleHRBcmVh
X2dldHNldCA9IHsgJkhUTUxFbGVtZW50Ojp0ZXh0QXJlYUdldHRlciwgJkhUTUxFbGVtZW50Ojp0
ZXh0QXJlYVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1l
bnQ6OmJ1dHRvbl9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6YnV0dG9uR2V0dGVyLCAmSFRNTEVs
ZW1lbnQ6OmJ1dHRvblNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRN
TEVsZW1lbnQ6OmxhYmVsX2dldHNldCA9IHsgJkhUTUxFbGVtZW50OjpsYWJlbEdldHRlciwgJkhU
TUxFbGVtZW50OjpsYWJlbFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8g
SFRNTEVsZW1lbnQ6OmZpZWxkU2V0X2dldHNldCA9IHsgJkhUTUxFbGVtZW50OjpmaWVsZFNldEdl
dHRlciwgJkhUTUxFbGVtZW50OjpmaWVsZFNldFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6
OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmxlZ2VuZF9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6
bGVnZW5kR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmxlZ2VuZFNldHRlciB9OworY29uc3QgSFRNTEVs
ZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OnVsX2dldHNldCA9IHsgJkhUTUxFbGVtZW50
Ojp1TGlzdEdldHRlciwgJkhUTUxFbGVtZW50Ojp1TGlzdFNldHRlciB9OworY29uc3QgSFRNTEVs
ZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6Om9sX2dldHNldCA9IHsgJkhUTUxFbGVtZW50
OjpvTGlzdEdldHRlciwgJkhUTUxFbGVtZW50OjpvTGlzdFNldHRlciB9OworY29uc3QgSFRNTEVs
ZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmRsX2dldHNldCA9IHsgJkhUTUxFbGVtZW50
OjpkTGlzdEdldHRlciwgJkhUTUxFbGVtZW50OjpkTGlzdFNldHRlciB9OworY29uc3QgSFRNTEVs
ZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmRpcl9nZXRzZXQgPSB7ICZIVE1MRWxlbWVu
dDo6ZGlyR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmRpclNldHRlciB9OworY29uc3QgSFRNTEVsZW1l
bnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6Om1lbnVfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6
Om1lbnVHZXR0ZXIsICZIVE1MRWxlbWVudDo6bWVudVNldHRlciB9OworY29uc3QgSFRNTEVsZW1l
bnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmxpX2dldHNldCA9IHsgJkhUTUxFbGVtZW50Ojps
aUdldHRlciwgJkhUTUxFbGVtZW50OjpsaVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6Okdl
dFNldEluZm8gSFRNTEVsZW1lbnQ6OmRpdl9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6ZGl2R2V0
dGVyLCAmSFRNTEVsZW1lbnQ6OmRpdlNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNl
dEluZm8gSFRNTEVsZW1lbnQ6OnBfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OnBhcmFncmFwaEdl
dHRlciwgJkhUTUxFbGVtZW50OjpwYXJhZ3JhcGhTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50
OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjpoZWFkaW5nX2dldHNldCA9IHsgJkhUTUxFbGVtZW50
OjpoZWFkaW5nR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmhlYWRpbmdTZXR0ZXIgfTsKK2NvbnN0IEhU
TUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjpibG9ja1F1b3RlX2dldHNldCA9IHsg
JkhUTUxFbGVtZW50OjpibG9ja1F1b3RlR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmJsb2NrUXVvdGVT
ZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjpxX2dl
dHNldCA9IHsgJkhUTUxFbGVtZW50OjpxdW90ZUdldHRlciwgJkhUTUxFbGVtZW50OjpxdW90ZVNl
dHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OnByZV9n
ZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6cHJlR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OnByZVNldHRl
ciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmJyX2dldHNl
dCA9IHsgJkhUTUxFbGVtZW50OjpickdldHRlciwgJkhUTUxFbGVtZW50OjpiclNldHRlciB9Owor
Y29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmJhc2VGb250X2dldHNl
dCA9IHsgJkhUTUxFbGVtZW50OjpiYXNlRm9udEdldHRlciwgJkhUTUxFbGVtZW50OjpiYXNlRm9u
dFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmZv
bnRfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmZvbnRHZXR0ZXIsICZIVE1MRWxlbWVudDo6Zm9u
dFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6Omhy
X2dldHNldCA9IHsgJkhUTUxFbGVtZW50OjpockdldHRlciwgJkhUTUxFbGVtZW50OjpoclNldHRl
ciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6Om1vZF9nZXRz
ZXQgPSB7ICZIVE1MRWxlbWVudDo6bW9kR2V0dGVyLCAmSFRNTEVsZW1lbnQ6Om1vZFNldHRlciB9
OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmFfZ2V0c2V0ID0g
eyAmSFRNTEVsZW1lbnQ6OmFuY2hvckdldHRlciwgJkhUTUxFbGVtZW50OjphbmNob3JTZXR0ZXIg
fTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjpjYW52YXNfZ2V0
c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmltYWdlR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmltYWdlU2V0
dGVyIH07Citjb25zdCBIVE1MRWxlbWVudDo6R2V0U2V0SW5mbyBIVE1MRWxlbWVudDo6aW1nX2dl
dHNldCA9IHsgJkhUTUxFbGVtZW50OjppbWFnZUdldHRlciwgJkhUTUxFbGVtZW50OjppbWFnZVNl
dHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6Om9iamVj
dF9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6b2JqZWN0R2V0dGVyLCAmSFRNTEVsZW1lbnQ6Om9i
amVjdFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6
OnBhcmFtX2dldHNldCA9IHsgJkhUTUxFbGVtZW50OjpwYXJhbUdldHRlciwgJkhUTUxFbGVtZW50
OjpwYXJhbVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1l
bnQ6OmFwcGxldF9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6YXBwbGV0R2V0dGVyLCAmSFRNTEVs
ZW1lbnQ6OmFwcGxldFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRN
TEVsZW1lbnQ6Om1hcF9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6bWFwR2V0dGVyLCAmSFRNTEVs
ZW1lbnQ6Om1hcFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVs
ZW1lbnQ6OmFyZWFfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmFyZWFHZXR0ZXIsICZIVE1MRWxl
bWVudDo6YXJlYVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVs
ZW1lbnQ6OnNjcmlwdF9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6c2NyaXB0R2V0dGVyLCAmSFRN
TEVsZW1lbnQ6OnNjcmlwdFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8g
SFRNTEVsZW1lbnQ6OnRhYmxlX2dldHNldCA9IHsgJkhUTUxFbGVtZW50Ojp0YWJsZUdldHRlciwg
JkhUTUxFbGVtZW50Ojp0YWJsZVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldElu
Zm8gSFRNTEVsZW1lbnQ6OmNhcHRpb25fZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OnRhYmxlQ2Fw
dGlvbkdldHRlciwgJkhUTUxFbGVtZW50Ojp0YWJsZUNhcHRpb25TZXR0ZXIgfTsKK2NvbnN0IEhU
TUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50Ojpjb2xfZ2V0c2V0ID0geyAmSFRNTEVs
ZW1lbnQ6OnRhYmxlQ29sR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OnRhYmxlQ29sU2V0dGVyIH07Citj
b25zdCBIVE1MRWxlbWVudDo6R2V0U2V0SW5mbyBIVE1MRWxlbWVudDo6dGFibGVzZWN0aW9uX2dl
dHNldCA9IHsgJkhUTUxFbGVtZW50Ojp0YWJsZVNlY3Rpb25HZXR0ZXIsICZIVE1MRWxlbWVudDo6
dGFibGVTZWN0aW9uU2V0dGVyIH07Citjb25zdCBIVE1MRWxlbWVudDo6R2V0U2V0SW5mbyBIVE1M
RWxlbWVudDo6dHJfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OnRhYmxlUm93R2V0dGVyLCAmSFRN
TEVsZW1lbnQ6OnRhYmxlUm93U2V0dGVyIH07Citjb25zdCBIVE1MRWxlbWVudDo6R2V0U2V0SW5m
byBIVE1MRWxlbWVudDo6dGFibGVjZWxsX2dldHNldCA9IHsgJkhUTUxFbGVtZW50Ojp0YWJsZUNl
bGxHZXR0ZXIsICZIVE1MRWxlbWVudDo6dGFibGVDZWxsU2V0dGVyIH07Citjb25zdCBIVE1MRWxl
bWVudDo6R2V0U2V0SW5mbyBIVE1MRWxlbWVudDo6ZnJhbWVTZXRfZ2V0c2V0ID0geyAmSFRNTEVs
ZW1lbnQ6OmZyYW1lU2V0R2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmZyYW1lU2V0U2V0dGVyIH07Citj
b25zdCBIVE1MRWxlbWVudDo6R2V0U2V0SW5mbyBIVE1MRWxlbWVudDo6ZnJhbWVfZ2V0c2V0ID0g
eyAmSFRNTEVsZW1lbnQ6OmZyYW1lR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmZyYW1lU2V0dGVyIH07
Citjb25zdCBIVE1MRWxlbWVudDo6R2V0U2V0SW5mbyBIVE1MRWxlbWVudDo6aUZyYW1lX2dldHNl
dCA9IHsgJkhUTUxFbGVtZW50OjppRnJhbWVHZXR0ZXIsICZIVE1MRWxlbWVudDo6aUZyYW1lU2V0
dGVyIH07Citjb25zdCBIVE1MRWxlbWVudDo6R2V0U2V0SW5mbyBIVE1MRWxlbWVudDo6bWFycXVl
ZV9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6bWFycXVlZUdldHRlciwgJkhUTUxFbGVtZW50Ojpt
YXJxdWVlU2V0dGVyIH07CisKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvKiBIVE1MRWxl
bWVudDo6Z2V0U2V0SW5mbygpIGNvbnN0Cit7CisgICAgLy8gV2UgYWxyZWFkeSBrbm93IHdlIGhh
dmUgYW4gSFRNTCBlbGVtZW50LCBzbyB3ZSBvbmx5IG5lZWQgdG8gY29tcGFyZSB0aGUgbG9jYWxO
YW1lIGNvbXBvbmVudCBvZiB0aGUgcXVhbGlmaWVkIG5hbWUuCisgICAgc3RhdGljIFFQdHJEaWN0
PGNvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvPiBnZXRTZXRJbmZvRGljdDsKKyAgICBpZiAo
Z2V0U2V0SW5mb0RpY3QuaXNFbXB0eSgpKSB7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2Vy
dChIVE1MTmFtZXM6OmEoKS5sb2NhbE5hbWVQdHIoKSwgJmFfZ2V0c2V0KTsKKyAgICAgICAgZ2V0
U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6YXBwbGV0KCkubG9jYWxOYW1lUHRyKCksICZh
cHBsZXRfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6
YXJlYSgpLmxvY2FsTmFtZVB0cigpLCAmYXJlYV9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZv
RGljdC5pbnNlcnQoSFRNTE5hbWVzOjpiYXNlKCkubG9jYWxOYW1lUHRyKCksICZiYXNlX2dldHNl
dCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmJhc2Vmb250KCku
bG9jYWxOYW1lUHRyKCksICZiYXNlRm9udF9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGlj
dC5pbnNlcnQoSFRNTE5hbWVzOjpibG9ja3F1b3RlKCkubG9jYWxOYW1lUHRyKCksICZibG9ja1F1
b3RlX2dldHNldCk7IAorICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpi
b2R5KCkubG9jYWxOYW1lUHRyKCksICZib2R5X2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9E
aWN0Lmluc2VydChIVE1MTmFtZXM6OmJyKCkubG9jYWxOYW1lUHRyKCksICZicl9nZXRzZXQpOwor
ICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpidXR0b24oKS5sb2NhbE5h
bWVQdHIoKSwgJmJ1dHRvbl9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQo
SFRNTE5hbWVzOjpjYW52YXMoKS5sb2NhbE5hbWVQdHIoKSwgJmNhbnZhc19nZXRzZXQpOworICAg
ICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpjYXB0aW9uKCkubG9jYWxOYW1l
UHRyKCksICZjYXB0aW9uX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChI
VE1MTmFtZXM6OmNvbCgpLmxvY2FsTmFtZVB0cigpLCAmY29sX2dldHNldCk7CisgICAgICAgIGdl
dFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmNvbGdyb3VwKCkubG9jYWxOYW1lUHRyKCks
ICZjb2xfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6
ZGVsKCkubG9jYWxOYW1lUHRyKCksICZtb2RfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0Rp
Y3QuaW5zZXJ0KEhUTUxOYW1lczo6ZGlyKCkubG9jYWxOYW1lUHRyKCksICZkaXJfZ2V0c2V0KTsK
KyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6ZGl2KCkubG9jYWxOYW1l
UHRyKCksICZkaXZfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxO
YW1lczo6ZGwoKS5sb2NhbE5hbWVQdHIoKSwgJmRsX2dldHNldCk7CisgICAgICAgIGdldFNldElu
Zm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmZpZWxkc2V0KCkubG9jYWxOYW1lUHRyKCksICZmaWVs
ZFNldF9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpm
b250KCkubG9jYWxOYW1lUHRyKCksICZmb250X2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9E
aWN0Lmluc2VydChIVE1MTmFtZXM6OmZvcm0oKS5sb2NhbE5hbWVQdHIoKSwgJmZvcm1fZ2V0c2V0
KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6ZnJhbWUoKS5sb2Nh
bE5hbWVQdHIoKSwgJmZyYW1lX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2Vy
dChIVE1MTmFtZXM6OmZyYW1lc2V0KCkubG9jYWxOYW1lUHRyKCksICZmcmFtZVNldF9nZXRzZXQp
OworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpoMSgpLmxvY2FsTmFt
ZVB0cigpLCAmaGVhZGluZ19nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQo
SFRNTE5hbWVzOjpoMigpLmxvY2FsTmFtZVB0cigpLCAmaGVhZGluZ19nZXRzZXQpOworICAgICAg
ICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpoMygpLmxvY2FsTmFtZVB0cigpLCAm
aGVhZGluZ19nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVz
OjpoNCgpLmxvY2FsTmFtZVB0cigpLCAmaGVhZGluZ19nZXRzZXQpOworICAgICAgICBnZXRTZXRJ
bmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpoNSgpLmxvY2FsTmFtZVB0cigpLCAmaGVhZGluZ19n
ZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpoNigpLmxv
Y2FsTmFtZVB0cigpLCAmaGVhZGluZ19nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5p
bnNlcnQoSFRNTE5hbWVzOjpoZWFkKCkubG9jYWxOYW1lUHRyKCksICZoZWFkX2dldHNldCk7Cisg
ICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmhyKCkubG9jYWxOYW1lUHRy
KCksICZocl9nZXRzZXQpOyAKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1l
czo6aHRtbCgpLmxvY2FsTmFtZVB0cigpLCAmaHRtbF9nZXRzZXQpOworICAgICAgICBnZXRTZXRJ
bmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjppZnJhbWUoKS5sb2NhbE5hbWVQdHIoKSwgJmlGcmFt
ZV9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjppbWco
KS5sb2NhbE5hbWVQdHIoKSwgJmltZ19nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5p
bnNlcnQoSFRNTE5hbWVzOjppbnB1dCgpLmxvY2FsTmFtZVB0cigpLCAmaW5wdXRfZ2V0c2V0KTsK
KyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6aW5zKCkubG9jYWxOYW1l
UHRyKCksICZtb2RfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxO
YW1lczo6aXNpbmRleCgpLmxvY2FsTmFtZVB0cigpLCAmaXNJbmRleF9nZXRzZXQpOworICAgICAg
ICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpsYWJlbCgpLmxvY2FsTmFtZVB0cigp
LCAmbGFiZWxfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1l
czo6bGVnZW5kKCkubG9jYWxOYW1lUHRyKCksICZsZWdlbmRfZ2V0c2V0KTsKKyAgICAgICAgZ2V0
U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6bGkoKS5sb2NhbE5hbWVQdHIoKSwgJmxpX2dl
dHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmxpbmsoKS5s
b2NhbE5hbWVQdHIoKSwgJmxpbmtfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5z
ZXJ0KEhUTUxOYW1lczo6bWFwKCkubG9jYWxOYW1lUHRyKCksICZtYXBfZ2V0c2V0KTsKKyAgICAg
ICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6bWFycXVlZSgpLmxvY2FsTmFtZVB0
cigpLCAmbWFycXVlZV9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRN
TE5hbWVzOjptZW51KCkubG9jYWxOYW1lUHRyKCksICZtZW51X2dldHNldCk7CisgICAgICAgIGdl
dFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Om1ldGEoKS5sb2NhbE5hbWVQdHIoKSwgJm1l
dGFfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6b2Jq
ZWN0KCkubG9jYWxOYW1lUHRyKCksICZvYmplY3RfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5m
b0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6b2woKS5sb2NhbE5hbWVQdHIoKSwgJm9sX2dldHNldCk7
CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Om9wdGlvbigpLmxvY2Fs
TmFtZVB0cigpLCAmb3B0aW9uX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2Vy
dChIVE1MTmFtZXM6Om9wdGdyb3VwKCkubG9jYWxOYW1lUHRyKCksICZvcHRHcm91cF9nZXRzZXQp
OworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpwKCkubG9jYWxOYW1l
UHRyKCksICZwX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFt
ZXM6OnBhcmFtKCkubG9jYWxOYW1lUHRyKCksICZwYXJhbV9nZXRzZXQpOworICAgICAgICBnZXRT
ZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpwcmUoKS5sb2NhbE5hbWVQdHIoKSwgJnByZV9n
ZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpxKCkubG9j
YWxOYW1lUHRyKCksICZxX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChI
VE1MTmFtZXM6OnNjcmlwdCgpLmxvY2FsTmFtZVB0cigpLCAmc2NyaXB0X2dldHNldCk7CisgICAg
ICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OnNlbGVjdCgpLmxvY2FsTmFtZVB0
cigpLCAmc2VsZWN0X2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1M
TmFtZXM6OnN0eWxlKCkubG9jYWxOYW1lUHRyKCksICZzdHlsZV9nZXRzZXQpOworICAgICAgICBn
ZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjp0YWJsZSgpLmxvY2FsTmFtZVB0cigpLCAm
dGFibGVfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6
dGJvZHkoKS5sb2NhbE5hbWVQdHIoKSwgJnRhYmxlc2VjdGlvbl9nZXRzZXQpOworICAgICAgICBn
ZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjp0ZCgpLmxvY2FsTmFtZVB0cigpLCAmdGFi
bGVjZWxsX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6
OnRleHRhcmVhKCkubG9jYWxOYW1lUHRyKCksICZ0ZXh0QXJlYV9nZXRzZXQpOworICAgICAgICBn
ZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjp0aCgpLmxvY2FsTmFtZVB0cigpLCAmdGFi
bGVjZWxsX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6
OnRoZWFkKCkubG9jYWxOYW1lUHRyKCksICZ0YWJsZXNlY3Rpb25fZ2V0c2V0KTsKKyAgICAgICAg
Z2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6dGZvb3QoKS5sb2NhbE5hbWVQdHIoKSwg
JnRhYmxlc2VjdGlvbl9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRN
TE5hbWVzOjp0aXRsZSgpLmxvY2FsTmFtZVB0cigpLCAmdGl0bGVfZ2V0c2V0KTsKKyAgICAgICAg
Z2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6dHIoKS5sb2NhbE5hbWVQdHIoKSwgJnRy
X2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OnVsKCku
bG9jYWxOYW1lUHRyKCksICZ1bF9nZXRzZXQpOworICAgIH0KKyAgICAKKyAgICBIVE1MRWxlbWVu
dEltcGwqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwqPihpbXBsKCkpOwor
ICAgIGNvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvKiByZXN1bHQgPSBnZXRTZXRJbmZvRGlj
dC5maW5kKGVsZW1lbnQtPmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCkpOworICAgIGlmIChy
ZXN1bHQpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIDA7Cit9CisKIC8qCiBA
YmVnaW4gSFRNTEVsZW1lbnRUYWJsZSAxNAogICBpZAkJS0pTOjpIVE1MRWxlbWVudDo6RWxlbWVu
dElkCURvbnREZWxldGUKQEAgLTExODQsNyArMTI2OCw3IEBAIGNvbnN0IENsYXNzSW5mbyogS0pT
OjpIVE1MRWxlbWVudDo6Y2xhc3MKIEBlbmQKIAogQGJlZ2luIEhUTUxDYW52YXNFbGVtZW50VGFi
bGUgMQotICBnZXRDb250ZXh0ICAgICAgS0pTOjpIVE1MRWxlbWVudDo6R2V0Q29udGV4dCAgICAg
ICAgICAgICAgICAgIERvbnREZWxldGV8RnVuY3Rpb24gMAorICBnZXRDb250ZXh0ICAgICAgS0pT
OjpIVE1MRWxlbWVudDo6R2V0Q29udGV4dCAgICAgICAgICAgICAgICAgIERvbnREZWxldGV8RnVu
Y3Rpb24gMQogQGVuZAogKi8KIApAQCAtMTE5NSwzNSArMTI3OSwzMiBAQCBIVE1MRWxlbWVudDo6
SFRNTEVsZW1lbnQoRXhlY1N0YXRlICpleGVjCiAKIFZhbHVlIEtKUzo6SFRNTEVsZW1lbnQ6OnRy
eUdldChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSkgY29u
c3QKIHsKLSAgSFRNTEVsZW1lbnRJbXBsICZlbGVtZW50ID0gKnN0YXRpY19jYXN0PEhUTUxFbGVt
ZW50SW1wbCAqPihpbXBsKCkpOworICAgIEhUTUxFbGVtZW50SW1wbCAmZWxlbWVudCA9ICpzdGF0
aWNfY2FzdDxIVE1MRWxlbWVudEltcGwgKj4oaW1wbCgpKTsKICNpZmRlZiBLSlNfVkVSQk9TRQot
ICBrZERlYnVnKDYwNzApIDw8ICJLSlM6OkhUTUxFbGVtZW50Ojp0cnlHZXQgIiA8PCBwcm9wZXJ0
eU5hbWUucXN0cmluZygpIDw8ICIgdGhpc1RhZz0iIDw8IGVsZW1lbnQudGFnTmFtZSgpLnN0cmlu
ZygpIDw8IGVuZGw7CisgICAga2REZWJ1Zyg2MDcwKSA8PCAiS0pTOjpIVE1MRWxlbWVudDo6dHJ5
R2V0ICIgPDwgcHJvcGVydHlOYW1lLnFzdHJpbmcoKSA8PCAiIHRoaXNUYWc9IiA8PCBlbGVtZW50
LnRhZ05hbWUoKS5zdHJpbmcoKSA8PCBlbmRsOwogI2VuZGlmCi0gIC8vIEZpcnN0IGxvb2sgYXQg
ZHluYW1pYyBwcm9wZXJ0aWVzCi0gIHN3aXRjaCAoZWxlbWVudC5pZCgpKSB7Ci0gICAgY2FzZSBJ
RF9GT1JNOiB7Ci0gICAgICBIVE1MRm9ybUVsZW1lbnRJbXBsICZmb3JtID0gc3RhdGljX2Nhc3Q8
SFRNTEZvcm1FbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIC8vIENoZWNrIGlmIHdlJ3Jl
IHJldHJpZXZpbmcgYW4gZWxlbWVudCAoYnkgaW5kZXggb3IgYnkgbmFtZSkKLSAgICAgIGJvb2wg
b2s7Ci0gICAgICB1aW50IHUgPSBwcm9wZXJ0eU5hbWUudG9VTG9uZygmb2spOwotICAgICAgaWYg
KG9rKQotICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLCBmb3JtLmVsZW1lbnRzKCktPml0
ZW0odSkpOwotICAgICAgVmFsdWVJbXAgKm5hbWVkSXRlbXMgPSBIVE1MQ29sbGVjdGlvbihleGVj
LCBmb3JtLmVsZW1lbnRzKCkuZ2V0KCkpLmdldE5hbWVkSXRlbXMoZXhlYywgcHJvcGVydHlOYW1l
KTsKLSAgICAgIGlmICghbmFtZWRJdGVtcy0+aXNVbmRlZmluZWQoKSkKLSAgICAgICAgcmV0dXJu
IG5hbWVkSXRlbXM7Ci0gICAgfQotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9TRUxFQ1Q6IHsK
LSAgICAgIEhUTUxTZWxlY3RFbGVtZW50SW1wbCAmc2VsZWN0ID0gc3RhdGljX2Nhc3Q8SFRNTFNl
bGVjdEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgYm9vbCBvazsKLSAgICAgIHVpbnQg
dSA9IHByb3BlcnR5TmFtZS50b1VMb25nKCZvayk7Ci0gICAgICBpZiAob2spCi0gICAgICAgIHJl
dHVybiBnZXRET01Ob2RlKGV4ZWMsIHNlbGVjdC5vcHRpb25zSFRNTENvbGxlY3Rpb24oKS0+aXRl
bSh1KSk7IC8vIG5vdCBzcGVjaWZpZWQgYnkgRE9NKD8pIGJ1dCBzdXBwb3J0ZWQgaW4gbmV0c2Nh
cGUvSUUKKyAgICAvLyBGaXJzdCBsb29rIGF0IGR5bmFtaWMgcHJvcGVydGllcworICAgIGlmIChl
bGVtZW50Lmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmZvcm0oKSkpIHsKKyAgICAgICAgSFRNTEZv
cm1FbGVtZW50SW1wbCAmZm9ybSA9IHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudEltcGwgJj4o
ZWxlbWVudCk7CisgICAgICAgIC8vIENoZWNrIGlmIHdlJ3JlIHJldHJpZXZpbmcgYW4gZWxlbWVu
dCAoYnkgaW5kZXggb3IgYnkgbmFtZSkKKyAgICAgICAgYm9vbCBvazsKKyAgICAgICAgdWludCB1
ID0gcHJvcGVydHlOYW1lLnRvVUxvbmcoJm9rKTsKKyAgICAgICAgaWYgKG9rKQorICAgICAgICAg
ICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYywgZm9ybS5lbGVtZW50cygpLT5pdGVtKHUpKTsKKyAg
ICAgICAgVmFsdWVJbXAgKm5hbWVkSXRlbXMgPSBIVE1MQ29sbGVjdGlvbihleGVjLCBmb3JtLmVs
ZW1lbnRzKCkuZ2V0KCkpLmdldE5hbWVkSXRlbXMoZXhlYywgcHJvcGVydHlOYW1lKTsKKyAgICAg
ICAgaWYgKCFuYW1lZEl0ZW1zLT5pc1VuZGVmaW5lZCgpKQorICAgICAgICAgICAgcmV0dXJuIG5h
bWVkSXRlbXM7CisgICAgfQorICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFzTG9jYWxOYW1lKEhUTUxO
YW1lczo6c2VsZWN0KCkpKSB7CisgICAgICAgIEhUTUxTZWxlY3RFbGVtZW50SW1wbCAmc2VsZWN0
ID0gc3RhdGljX2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgICAg
ICBib29sIG9rOworICAgICAgICB1aW50IHUgPSBwcm9wZXJ0eU5hbWUudG9VTG9uZygmb2spOwor
ICAgICAgICBpZiAob2spCisgICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLCBzZWxl
Y3Qub3B0aW9uc0hUTUxDb2xsZWN0aW9uKCktPml0ZW0odSkpOyAvLyBub3Qgc3BlY2lmaWVkIGJ5
IERPTSg/KSBidXQgc3VwcG9ydGVkIGluIG5ldHNjYXBlL0lFCiAgICAgfQotICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBJRF9GUkFNRVNFVDogeworICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6ZnJhbWVzZXQoKSkpIHsKICAgICAgICAgTm9kZUltcGwgKmZyYW1lID0g
ZWxlbWVudC5jaGlsZHJlbigpLT5uYW1lZEl0ZW0ocHJvcGVydHlOYW1lLnN0cmluZygpKTsKLSAg
ICAgICAgaWYgKGZyYW1lICYmIGZyYW1lLT5pZCgpID09IElEX0ZSQU1FKSB7CisgICAgICAgIGlm
IChmcmFtZSAmJiBmcmFtZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZyYW1lKCkpKSB7CiAgICAg
ICAgICAgICBEb2N1bWVudEltcGwqIGRvYyA9IHN0YXRpY19jYXN0PEhUTUxGcmFtZUVsZW1lbnRJ
bXBsICo+KGZyYW1lKS0+Y29udGVudERvY3VtZW50KCk7CiAgICAgICAgICAgICBpZiAoZG9jKSB7
CiAgICAgICAgICAgICAgICAgS0hUTUxQYXJ0KiBwYXJ0ID0gZG9jLT5wYXJ0KCk7CkBAIC0xMjM2
LDczICsxMzE3LDU3IEBAIFZhbHVlIEtKUzo6SFRNTEVsZW1lbnQ6OnRyeUdldChFeGVjU3RhdGUK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBJRF9GUkFNRToKLSAgICBjYXNlIElEX0lGUkFNRTogeworICAgIGVsc2UgaWYgKGVsZW1lbnQu
aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6ZnJhbWUoKSkgfHwgZWxlbWVudC5oYXNMb2NhbE5hbWUo
SFRNTE5hbWVzOjppZnJhbWUoKSkpIHsKICAgICAgICAgRG9jdW1lbnRJbXBsKiBkb2MgPSBzdGF0
aWNfY2FzdDxIVE1MRnJhbWVFbGVtZW50SW1wbCAmPihlbGVtZW50KS5jb250ZW50RG9jdW1lbnQo
KTsKLSAgICAgICAgaWYgKCBkb2MgKSB7CisgICAgICAgIGlmIChkb2MpIHsKICAgICAgICAgICAg
IEtIVE1MUGFydCogcGFydCA9IGRvYy0+cGFydCgpOwotICAgICAgICAgICAgaWYgKCBwYXJ0ICkg
eworICAgICAgICAgICAgaWYgKHBhcnQpIHsKICAgICAgICAgICAgICAgV2luZG93ICp3aW5kb3cg
PSBXaW5kb3c6OnJldHJpZXZlV2luZG93KHBhcnQpOwogCSAgICAgIGlmICh3aW5kb3cgJiYgd2lu
ZG93LT5oYXNQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUpKQogICAgICAgICAgICAgICAgIHJl
dHVybiB3aW5kb3ctPmdldChleGVjLCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAgICAgfQotICAgICAgYnJlYWs7CiAjaWYgQVBQTEVfQ0hBTkdFUwotICAgIGNhc2Ug
SURfRU1CRUQ6Ci0gICAgY2FzZSBJRF9PQkpFQ1Q6Ci0gICAgY2FzZSBJRF9BUFBMRVQ6IHsKLQlp
ZiAocHJvcGVydHlOYW1lID09ICJfX2FwcGxlX3J1bnRpbWVfb2JqZWN0IikgeworICAgIGVsc2Ug
aWYgKGVsZW1lbnQuaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6ZW1iZWQoKSkgfHwgZWxlbWVudC5o
YXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvYmplY3QoKSkgfHwKKyAgICAgICAgICAgICBlbGVtZW50
Lmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmFwcGxldCgpKSkgeworCWlmIChwcm9wZXJ0eU5hbWUg
PT0gIl9fYXBwbGVfcnVudGltZV9vYmplY3QiKQogCSAgICByZXR1cm4gZ2V0UnVudGltZU9iamVj
dChleGVjLCZlbGVtZW50KTsKLQl9Ci0KIAlWYWx1ZSBydW50aW1lT2JqZWN0ID0gZ2V0UnVudGlt
ZU9iamVjdChleGVjLCZlbGVtZW50KTsKIAlpZiAoIXJ1bnRpbWVPYmplY3QuaXNOdWxsKCkpIHsK
IAkgICAgT2JqZWN0SW1wICppbXAgPSBzdGF0aWNfY2FzdDxPYmplY3RJbXAgKj4ocnVudGltZU9i
amVjdC5pbXAoKSk7Ci0JICAgIGlmIChpbXAtPmhhc1Byb3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFt
ZSkpIHsKKwkgICAgaWYgKGltcC0+aGFzUHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lKSkKIAkJ
cmV0dXJuIGltcC0+Z2V0IChleGVjLCBwcm9wZXJ0eU5hbWUpOwotCSAgICB9CiAJfQogICAgIH0K
LSAgICAgIGJyZWFrOwogI2VuZGlmCi0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQogCi0gIGNvbnN0IEhhc2hUYWJsZSogdGFibGUgPSBjbGFzc0luZm8oKS0+cHJvcEhhc2hUYWJs
ZTsgLy8gZ2V0IHRoZSByaWdodCBoYXNodGFibGUKLSAgY29uc3QgSGFzaEVudHJ5KiBlbnRyeSA9
IExvb2t1cDo6ZmluZEVudHJ5KHRhYmxlLCBwcm9wZXJ0eU5hbWUpOwotICBpZiAoZW50cnkpIHsK
LSAgICBpZiAoZW50cnktPmF0dHIgJiBGdW5jdGlvbikKLSAgICAgIHJldHVybiBsb29rdXBPckNy
ZWF0ZUZ1bmN0aW9uPEtKUzo6SFRNTEVsZW1lbnRGdW5jdGlvbj4oZXhlYywgcHJvcGVydHlOYW1l
LCB0aGlzLCBlbnRyeS0+dmFsdWUsIGVudHJ5LT5wYXJhbXMsIGVudHJ5LT5hdHRyKTsKLSAgICBy
ZXR1cm4gZ2V0VmFsdWVQcm9wZXJ0eShleGVjLCBlbnRyeS0+dmFsdWUpOwotICB9CisgICAgY29u
c3QgSGFzaFRhYmxlKiB0YWJsZSA9IGNsYXNzSW5mbygpLT5wcm9wSGFzaFRhYmxlOyAvLyBnZXQg
dGhlIHJpZ2h0IGhhc2h0YWJsZQorICAgIGNvbnN0IEhhc2hFbnRyeSogZW50cnkgPSBMb29rdXA6
OmZpbmRFbnRyeSh0YWJsZSwgcHJvcGVydHlOYW1lKTsKKyAgICBpZiAoZW50cnkpIHsKKyAgICAg
ICAgaWYgKGVudHJ5LT5hdHRyICYgRnVuY3Rpb24pCisgICAgICAgICAgICByZXR1cm4gbG9va3Vw
T3JDcmVhdGVGdW5jdGlvbjxLSlM6OkhUTUxFbGVtZW50RnVuY3Rpb24+KGV4ZWMsIHByb3BlcnR5
TmFtZSwgdGhpcywgZW50cnktPnZhbHVlLCBlbnRyeS0+cGFyYW1zLCBlbnRyeS0+YXR0cik7Cisg
ICAgICAgIHJldHVybiBnZXRWYWx1ZVByb3BlcnR5KGV4ZWMsIGVudHJ5LT52YWx1ZSk7CisgICAg
fQogCi0gIC8vIEJhc2UgSFRNTEVsZW1lbnQgc3R1ZmYgb3IgcGFyZW50IGNsYXNzIGZvcndhcmQs
IGFzIHVzdWFsCi0gIHJldHVybiBET01PYmplY3RMb29rdXBHZXQ8S0pTOjpIVE1MRWxlbWVudEZ1
bmN0aW9uLCBLSlM6OkhUTUxFbGVtZW50LCBET01FbGVtZW50PihleGVjLCBwcm9wZXJ0eU5hbWUs
ICZIVE1MRWxlbWVudFRhYmxlLCB0aGlzKTsKKyAgICAvLyBCYXNlIEhUTUxFbGVtZW50IHN0dWZm
IG9yIHBhcmVudCBjbGFzcyBmb3J3YXJkLCBhcyB1c3VhbAorICAgIHJldHVybiBET01PYmplY3RM
b29rdXBHZXQ8S0pTOjpIVE1MRWxlbWVudEZ1bmN0aW9uLCBLSlM6OkhUTUxFbGVtZW50LCBET01F
bGVtZW50PihleGVjLCBwcm9wZXJ0eU5hbWUsICZIVE1MRWxlbWVudFRhYmxlLCB0aGlzKTsKIH0K
IAogYm9vbCBLSlM6OkhUTUxFbGVtZW50OjppbXBsZW1lbnRzQ2FsbCgpIGNvbnN0CiB7CiAgICAg
SFRNTEVsZW1lbnRJbXBsICplbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+
KGltcGwoKSk7Ci0gICAgc3dpdGNoIChlbGVtZW50LT5pZCgpKSB7Ci0JY2FzZSBJRF9FTUJFRDoK
LQljYXNlIElEX09CSkVDVDoKLQljYXNlIElEX0FQUExFVDogewotCQlEb2N1bWVudEltcGwqIGRv
YyA9IGVsZW1lbnQtPmdldERvY3VtZW50KCk7Ci0JCUtKU1Byb3h5ICpwcm94eSA9IEtKU1Byb3h5
Ojpwcm94eShkb2MtPnBhcnQoKSk7Ci0JCUV4ZWNTdGF0ZSAqZXhlYyA9IHByb3h5LT5pbnRlcnBy
ZXRlcigpLT5nbG9iYWxFeGVjKCk7Ci0JCVZhbHVlIHJ1bnRpbWVPYmplY3QgPSBnZXRSdW50aW1l
T2JqZWN0KGV4ZWMsZWxlbWVudCk7Ci0JCWlmICghcnVudGltZU9iamVjdC5pc051bGwoKSkgewot
CQkgICAgT2JqZWN0SW1wICppbXAgPSBzdGF0aWNfY2FzdDxPYmplY3RJbXAgKj4ocnVudGltZU9i
amVjdC5pbXAoKSk7Ci0JCSAgICByZXR1cm4gaW1wLT5pbXBsZW1lbnRzQ2FsbCAoKTsKLQkJfQot
CSAgICB9Ci0JICAgIGJyZWFrOwotCWRlZmF1bHQ6Ci0JICAgIGJyZWFrOworICAgIGlmIChlbGVt
ZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZW1iZWQoKSkgfHwKKyAgICAgICAgZWxlbWVudC0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9iamVjdCgpKSB8fAorICAgICAgICBlbGVtZW50LT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6YXBwbGV0KCkpKSB7CisgICAJRG9jdW1lbnRJbXBsKiBkb2MgPSBl
bGVtZW50LT5nZXREb2N1bWVudCgpOworICAgICAgICBLSlNQcm94eSAqcHJveHkgPSBLSlNQcm94
eTo6cHJveHkoZG9jLT5wYXJ0KCkpOworICAgICAgICBFeGVjU3RhdGUgKmV4ZWMgPSBwcm94eS0+
aW50ZXJwcmV0ZXIoKS0+Z2xvYmFsRXhlYygpOworICAgICAgICBWYWx1ZSBydW50aW1lT2JqZWN0
ID0gZ2V0UnVudGltZU9iamVjdChleGVjLGVsZW1lbnQpOworICAgICAgICBpZiAoIXJ1bnRpbWVP
YmplY3QuaXNOdWxsKCkpIHsKKyAgICAgICAgICAgIE9iamVjdEltcCAqaW1wID0gc3RhdGljX2Nh
c3Q8T2JqZWN0SW1wICo+KHJ1bnRpbWVPYmplY3QuaW1wKCkpOworICAgICAgICAgICAgcmV0dXJu
IGltcC0+aW1wbGVtZW50c0NhbGwgKCk7CisgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIGZh
bHNlOwogfQpAQCAtMTMxMCw4MTkgKzEzNzUsOTA4IEBAIGJvb2wgS0pTOjpIVE1MRWxlbWVudDo6
aW1wbGVtZW50c0NhbGwoKSAKIFZhbHVlIEtKUzo6SFRNTEVsZW1lbnQ6OmNhbGwoRXhlY1N0YXRl
ICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QmYXJncykKIHsKICAgICBIVE1MRWxl
bWVudEltcGwgKmVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwgKj4oaW1wbCgp
KTsKLSAgICBzd2l0Y2ggKGVsZW1lbnQtPmlkKCkpIHsKLQljYXNlIElEX0VNQkVEOgotCWNhc2Ug
SURfT0JKRUNUOgotCWNhc2UgSURfQVBQTEVUOiB7Ci0JCVZhbHVlIHJ1bnRpbWVPYmplY3QgPSBn
ZXRSdW50aW1lT2JqZWN0KGV4ZWMsZWxlbWVudCk7Ci0JCWlmICghcnVudGltZU9iamVjdC5pc051
bGwoKSkgewotCQkgICAgT2JqZWN0SW1wICppbXAgPSBzdGF0aWNfY2FzdDxPYmplY3RJbXAgKj4o
cnVudGltZU9iamVjdC5pbXAoKSk7Ci0JCSAgICByZXR1cm4gaW1wLT5jYWxsIChleGVjLCB0aGlz
T2JqLCBhcmdzKTsKLQkJfQotCSAgICB9Ci0JICAgIGJyZWFrOwotCWRlZmF1bHQ6Ci0JICAgIGJy
ZWFrOworICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZW1iZWQoKSkgfHwK
KyAgICAgICAgZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9iamVjdCgpKSB8fAorICAg
ICAgICBlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YXBwbGV0KCkpKSB7CisgICAgICAg
IFZhbHVlIHJ1bnRpbWVPYmplY3QgPSBnZXRSdW50aW1lT2JqZWN0KGV4ZWMsZWxlbWVudCk7Cisg
ICAgICAgIGlmICghcnVudGltZU9iamVjdC5pc051bGwoKSkgeworICAgICAgICAgICAgT2JqZWN0
SW1wICppbXAgPSBzdGF0aWNfY2FzdDxPYmplY3RJbXAgKj4ocnVudGltZU9iamVjdC5pbXAoKSk7
CisgICAgICAgICAgICByZXR1cm4gaW1wLT5jYWxsIChleGVjLCB0aGlzT2JqLCBhcmdzKTsKKyAg
ICAgICAgfQogICAgIH0KICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBWYWx1
ZSBnZXRJbnB1dFNlbGVjdGlvblN0YXJ0KEhUTUxJbnB1dEVsZW1lbnRJbXBsICZpbnB1dCkKK1Zh
bHVlIEhUTUxFbGVtZW50OjpodG1sR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBj
b25zdAogewotICBpZiAoaW5wdXQuY2FuSGF2ZVNlbGVjdGlvbigpKSB7Ci0gICAgcmV0dXJuIE51
bWJlcihpbnB1dC5zZWxlY3Rpb25TdGFydCgpKTsKLSAgfQotICByZXR1cm4gVW5kZWZpbmVkKCk7
CisgICAgSFRNTEh0bWxFbGVtZW50SW1wbCYgaHRtbCA9ICpzdGF0aWNfY2FzdDxIVE1MSHRtbEVs
ZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBpZiAodG9rZW4gPT0gSHRtbFZlcnNpb24pCisgICAg
ICAgIHJldHVybiBTdHJpbmcoaHRtbC52ZXJzaW9uKCkpOworICAgIHJldHVybiBVbmRlZmluZWQo
KTsKIH0KIAotc3RhdGljIFZhbHVlIGdldElucHV0U2VsZWN0aW9uRW5kKEhUTUxJbnB1dEVsZW1l
bnRJbXBsICZpbnB1dCkKK1ZhbHVlIEhUTUxFbGVtZW50OjpoZWFkR2V0dGVyKEV4ZWNTdGF0ZSog
ZXhlYywgaW50IHRva2VuKSBjb25zdAogewotICBpZiAoaW5wdXQuY2FuSGF2ZVNlbGVjdGlvbigp
KSB7Ci0gICAgcmV0dXJuIE51bWJlcihpbnB1dC5zZWxlY3Rpb25FbmQoKSk7Ci0gIH0KLSAgcmV0
dXJuIFVuZGVmaW5lZCgpOworICAgIEhUTUxIZWFkRWxlbWVudEltcGwgJmhlYWQgPSAqc3RhdGlj
X2Nhc3Q8SFRNTEhlYWRFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IEhl
YWRQcm9maWxlKQorICAgICAgICByZXR1cm4gU3RyaW5nKGhlYWQucHJvZmlsZSgpKTsKKyAgICBy
ZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLVZhbHVlIEtKUzo6SFRNTEVsZW1lbnQ6OmdldFZhbHVl
UHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZSBIVE1MRWxl
bWVudDo6bGlua0dldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKLSAg
SFRNTEVsZW1lbnRJbXBsICZlbGVtZW50ID0gKnN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCAq
PihpbXBsKCkpOwotICBzd2l0Y2ggKGVsZW1lbnQuaWQoKSkgewotICBjYXNlIElEX0hUTUw6IHsK
LSAgICBIVE1MSHRtbEVsZW1lbnRJbXBsICZodG1sID0gc3RhdGljX2Nhc3Q8SFRNTEh0bWxFbGVt
ZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICBpZiAgICAgICh0b2tlbiA9PSBIdG1sVmVyc2lvbikg
ICAgICAgICByZXR1cm4gU3RyaW5nKGh0bWwudmVyc2lvbigpKTsKLSAgfQotICBicmVhazsKLSAg
Y2FzZSBJRF9IRUFEOiB7Ci0gICAgSFRNTEhlYWRFbGVtZW50SW1wbCAmaGVhZCA9IHN0YXRpY19j
YXN0PEhUTUxIZWFkRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgaWYgICAgICAodG9rZW4g
PT0gSGVhZFByb2ZpbGUpICAgICAgICAgcmV0dXJuIFN0cmluZyhoZWFkLnByb2ZpbGUoKSk7Ci0g
IH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfTElOSzogewotICAgIEhUTUxMaW5rRWxlbWVudEltcGwg
JmxpbmsgPSBzdGF0aWNfY2FzdDxIVE1MTGlua0VsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAg
IHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIExpbmtEaXNhYmxlZDogICAgICAgIHJldHVybiBC
b29sZWFuKGxpbmsuZGlzYWJsZWQoKSk7Ci0gICAgY2FzZSBMaW5rQ2hhcnNldDogICAgICAgICBy
ZXR1cm4gU3RyaW5nKGxpbmsuY2hhcnNldCgpKTsKLSAgICBjYXNlIExpbmtIcmVmOiAgICAgICAg
ICAgIHJldHVybiBTdHJpbmcobGluay5ocmVmKCkpOwotICAgIGNhc2UgTGlua0hyZWZMYW5nOiAg
ICAgICAgcmV0dXJuIFN0cmluZyhsaW5rLmhyZWZsYW5nKCkpOwotICAgIGNhc2UgTGlua01lZGlh
OiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhsaW5rLm1lZGlhKCkpOwotICAgIGNhc2UgTGlua1Jl
bDogICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhsaW5rLnJlbCgpKTsKLSAgICBjYXNlIExpbmtS
ZXY6ICAgICAgICAgICAgIHJldHVybiBTdHJpbmcobGluay5yZXYoKSk7Ci0gICAgY2FzZSBMaW5r
VGFyZ2V0OiAgICAgICAgICByZXR1cm4gU3RyaW5nKGxpbmsudGFyZ2V0KCkpOwotICAgIGNhc2Ug
TGlua1R5cGU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhsaW5rLnR5cGUoKSk7Ci0gICAgY2Fz
ZSBMaW5rU2hlZXQ6ICAgICAgICAgICByZXR1cm4gZ2V0RE9NU3R5bGVTaGVldChleGVjLCBsaW5r
LnNoZWV0KCkpOwotICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9USVRMRTogewotICAg
IEhUTUxUaXRsZUVsZW1lbnRJbXBsICZ0aXRsZSA9IHN0YXRpY19jYXN0PEhUTUxUaXRsZUVsZW1l
bnRJbXBsICY+KGVsZW1lbnQpOworICAgIEhUTUxMaW5rRWxlbWVudEltcGwgJmxpbmsgPSAqc3Rh
dGljX2Nhc3Q8SFRNTExpbmtFbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tl
bikgewotICAgIGNhc2UgVGl0bGVUZXh0OiAgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0
aXRsZS50ZXh0KCkpOwotICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9NRVRBOiB7Ci0g
ICAgSFRNTE1ldGFFbGVtZW50SW1wbCAmbWV0YSA9IHN0YXRpY19jYXN0PEhUTUxNZXRhRWxlbWVu
dEltcGwgJj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgTWV0YUNv
bnRlbnQ6ICAgICAgICAgcmV0dXJuIFN0cmluZyhtZXRhLmNvbnRlbnQoKSk7Ci0gICAgY2FzZSBN
ZXRhSHR0cEVxdWl2OiAgICAgICByZXR1cm4gU3RyaW5nKG1ldGEuaHR0cEVxdWl2KCkpOwotICAg
IGNhc2UgTWV0YU5hbWU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhtZXRhLm5hbWUoKSk7Ci0g
ICAgY2FzZSBNZXRhU2NoZW1lOiAgICAgICAgICByZXR1cm4gU3RyaW5nKG1ldGEuc2NoZW1lKCkp
OworICAgICAgICBjYXNlIExpbmtEaXNhYmxlZDoKKyAgICAgICAgICAgIHJldHVybiBCb29sZWFu
KGxpbmsuZGlzYWJsZWQoKSk7CisgICAgICAgIGNhc2UgTGlua0NoYXJzZXQ6CisgICAgICAgICAg
ICByZXR1cm4gU3RyaW5nKGxpbmsuY2hhcnNldCgpKTsKKyAgICAgICAgY2FzZSBMaW5rSHJlZjoK
KyAgICAgICAgICAgIHJldHVybiBTdHJpbmcobGluay5ocmVmKCkpOworICAgICAgICBjYXNlIExp
bmtIcmVmTGFuZzoKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcobGluay5ocmVmbGFuZygpKTsK
KyAgICAgICAgY2FzZSBMaW5rTWVkaWE6ICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiBT
dHJpbmcobGluay5tZWRpYSgpKTsKKyAgICAgICAgY2FzZSBMaW5rUmVsOiAgICAgICAgICAgICAK
KyAgICAgICAgICAgIHJldHVybiBTdHJpbmcobGluay5yZWwoKSk7CisgICAgICAgIGNhc2UgTGlu
a1JldjogICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcobGluay5yZXYoKSk7
CisgICAgICAgIGNhc2UgTGlua1RhcmdldDogICAgICAgICAgCisgICAgICAgICAgICByZXR1cm4g
U3RyaW5nKGxpbmsudGFyZ2V0KCkpOworICAgICAgICBjYXNlIExpbmtUeXBlOiAgICAgICAgICAg
IAorICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhsaW5rLnR5cGUoKSk7CisgICAgICAgIGNhc2Ug
TGlua1NoZWV0OiAgICAgICAgICAgCisgICAgICAgICAgICByZXR1cm4gZ2V0RE9NU3R5bGVTaGVl
dChleGVjLCBsaW5rLnNoZWV0KCkpOwogICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9C
QVNFOiB7Ci0gICAgSFRNTEJhc2VFbGVtZW50SW1wbCAmYmFzZSA9IHN0YXRpY19jYXN0PEhUTUxC
YXNlRWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQor
CitWYWx1ZSBIVE1MRWxlbWVudDo6dGl0bGVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0Cit7CisgICAgSFRNTFRpdGxlRWxlbWVudEltcGwmIHRpdGxlID0gKnN0YXRpY19j
YXN0PEhUTUxUaXRsZUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBpZiAodG9rZW4gPT0gVGl0
bGVUZXh0KQorICAgICAgICByZXR1cm4gU3RyaW5nKHRpdGxlLnRleHQoKSk7CisgICAgcmV0dXJu
IFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6bWV0YUdldHRlcihFeGVjU3Rh
dGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MTWV0YUVsZW1lbnRJbXBsJiBt
ZXRhID0gKnN0YXRpY19jYXN0PEhUTUxNZXRhRWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIHN3
aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIEJhc2VIcmVmOiAgICAgICAgICAgIHJldHVybiBTdHJp
bmcoYmFzZS5ocmVmKCkpOwotICAgIGNhc2UgQmFzZVRhcmdldDogICAgICAgICAgcmV0dXJuIFN0
cmluZyhiYXNlLnRhcmdldCgpKTsKKyAgICAgICAgY2FzZSBNZXRhQ29udGVudDogICAgICAgICBy
ZXR1cm4gU3RyaW5nKG1ldGEuY29udGVudCgpKTsKKyAgICAgICAgY2FzZSBNZXRhSHR0cEVxdWl2
OiAgICAgICByZXR1cm4gU3RyaW5nKG1ldGEuaHR0cEVxdWl2KCkpOworICAgICAgICBjYXNlIE1l
dGFOYW1lOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcobWV0YS5uYW1lKCkpOworICAgICAgICBj
YXNlIE1ldGFTY2hlbWU6ICAgICAgICAgIHJldHVybiBTdHJpbmcobWV0YS5zY2hlbWUoKSk7CiAg
ICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX0lTSU5ERVg6IHsKLSAgICBIVE1MSXNJbmRl
eEVsZW1lbnRJbXBsICZpc2luZGV4ID0gc3RhdGljX2Nhc3Q8SFRNTElzSW5kZXhFbGVtZW50SW1w
bCAmPihlbGVtZW50KTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxF
bGVtZW50OjpiYXNlR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAorewor
ICAgIEhUTUxCYXNlRWxlbWVudEltcGwmIGJhc2UgPSAqc3RhdGljX2Nhc3Q8SFRNTEJhc2VFbGVt
ZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgSXNJbmRl
eEZvcm06ICAgICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYywgaXNpbmRleC5mb3JtKCkp
OyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVudAotICAgIGNhc2UgSXNJbmRleFByb21wdDogICAgICAg
ICAgcmV0dXJuIFN0cmluZyhpc2luZGV4LnByb21wdCgpKTsKLSAgICB9Ci0gIH0KLSAgYnJlYWs7
Ci0gIGNhc2UgSURfU1RZTEU6IHsKLSAgICBIVE1MU3R5bGVFbGVtZW50SW1wbCAmc3R5bGUgPSBz
dGF0aWNfY2FzdDxIVE1MU3R5bGVFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICBzd2l0Y2gg
KHRva2VuKSB7Ci0gICAgY2FzZSBTdHlsZURpc2FibGVkOiAgICAgICAgcmV0dXJuIEJvb2xlYW4o
c3R5bGUuZGlzYWJsZWQoKSk7Ci0gICAgY2FzZSBTdHlsZU1lZGlhOiAgICAgICAgICAgcmV0dXJu
IFN0cmluZyhzdHlsZS5tZWRpYSgpKTsKLSAgICBjYXNlIFN0eWxlVHlwZTogICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKHN0eWxlLnR5cGUoKSk7Ci0gICAgY2FzZSBTdHlsZVNoZWV0OiAgICAgICAg
ICAgcmV0dXJuIGdldERPTVN0eWxlU2hlZXQoZXhlYywgc3R5bGUuc2hlZXQoKSk7Ci0gICAgfQot
ICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX0JPRFk6IHsKLSAgICBIVE1MQm9keUVsZW1lbnRJbXBs
ICZib2R5ID0gc3RhdGljX2Nhc3Q8SFRNTEJvZHlFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAg
ICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBCb2R5QUxpbms6ICAgICAgICAgICByZXR1cm4g
U3RyaW5nKGJvZHkuYUxpbmsoKSk7Ci0gICAgY2FzZSBCb2R5QmFja2dyb3VuZDogICAgICByZXR1
cm4gU3RyaW5nKGJvZHkuYmFja2dyb3VuZCgpKTsKLSAgICBjYXNlIEJvZHlCZ0NvbG9yOiAgICAg
ICAgIHJldHVybiBTdHJpbmcoYm9keS5iZ0NvbG9yKCkpOwotICAgIGNhc2UgQm9keUxpbms6ICAg
ICAgICAgICAgcmV0dXJuIFN0cmluZyhib2R5LmxpbmsoKSk7Ci0gICAgY2FzZSBCb2R5VGV4dDog
ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGJvZHkudGV4dCgpKTsKLSAgICBjYXNlIEJvZHlWTGlu
azogICAgICAgICAgIHJldHVybiBTdHJpbmcoYm9keS52TGluaygpKTsKLSAgICBkZWZhdWx0Ogot
ICAgICAgLy8gVXBkYXRlIHRoZSBkb2N1bWVudCdzIGxheW91dCBiZWZvcmUgd2UgY29tcHV0ZSB0
aGVzZSBhdHRyaWJ1dGVzLgotICAgICAgRG9jdW1lbnRJbXBsICpkb2MgPSBib2R5LmdldERvY3Vt
ZW50KCk7Ci0gICAgICBpZiAoZG9jKQotICAgICAgICBkb2MtPnVwZGF0ZUxheW91dElnbm9yZVBl
bmRpbmdTdHlsZXNoZWV0cygpOwotICAgICAgS0hUTUxWaWV3ICp2aWV3ID0gZG9jID8gZG9jLT52
aWV3KCkgOiAwOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgICBjYXNlIEJvZHlTY3Jv
bGxMZWZ0OgotICAgICAgICAgICAgcmV0dXJuIE51bWJlcih2aWV3ID8gdmlldy0+Y29udGVudHNY
KCkgOiAwKTsKLSAgICAgICAgY2FzZSBCb2R5U2Nyb2xsVG9wOgotICAgICAgICAgICAgcmV0dXJu
IE51bWJlcih2aWV3ID8gdmlldy0+Y29udGVudHNZKCkgOiAwKTsKLSAgICAgICAgY2FzZSBCb2R5
U2Nyb2xsSGVpZ2h0OiAgIHJldHVybiBOdW1iZXIodmlldyA/IHZpZXctPmNvbnRlbnRzSGVpZ2h0
KCkgOiAwKTsKLSAgICAgICAgY2FzZSBCb2R5U2Nyb2xsV2lkdGg6ICAgIHJldHVybiBOdW1iZXIo
dmlldyA/IHZpZXctPmNvbnRlbnRzV2lkdGgoKSA6IDApOwotICAgICAgfQorICAgICAgICBjYXNl
IEJhc2VIcmVmOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYmFzZS5ocmVmKCkpOworICAgICAg
ICBjYXNlIEJhc2VUYXJnZXQ6ICAgICAgICAgIHJldHVybiBTdHJpbmcoYmFzZS50YXJnZXQoKSk7
CiAgICAgfQotICB9Ci0gIGJyZWFrOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KIAotICBj
YXNlIElEX0ZPUk06IHsKLSAgICBIVE1MRm9ybUVsZW1lbnRJbXBsICZmb3JtID0gc3RhdGljX2Nh
c3Q8SFRNTEZvcm1FbGVtZW50SW1wbCAmPihlbGVtZW50KTsKK1ZhbHVlIEhUTUxFbGVtZW50Ojpp
c0luZGV4R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAgIEhU
TUxJc0luZGV4RWxlbWVudEltcGwmIGlzaW5kZXggPSAqc3RhdGljX2Nhc3Q8SFRNTElzSW5kZXhF
bGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgRm9y
bUVsZW1lbnRzOiAgICAgICAgcmV0dXJuIGdldEhUTUxDb2xsZWN0aW9uKGV4ZWMsIGZvcm0uZWxl
bWVudHMoKS5nZXQoKSk7Ci0gICAgY2FzZSBGb3JtTGVuZ3RoOiAgICAgICAgICByZXR1cm4gTnVt
YmVyKGZvcm0ubGVuZ3RoKCkpOwotICAgIGNhc2UgRm9ybU5hbWU6ICAgICAgICAgICAgcmV0dXJu
IFN0cmluZyhmb3JtLm5hbWUoKSk7Ci0gICAgY2FzZSBGb3JtQWNjZXB0Q2hhcnNldDogICByZXR1
cm4gU3RyaW5nKGZvcm0uYWNjZXB0Q2hhcnNldCgpKTsKLSAgICBjYXNlIEZvcm1BY3Rpb246ICAg
ICAgICAgIHJldHVybiBTdHJpbmcoZm9ybS5hY3Rpb24oKSk7Ci0gICAgY2FzZSBGb3JtRW5jVHlw
ZTogICAgICAgICByZXR1cm4gU3RyaW5nKGZvcm0uZW5jdHlwZSgpKTsKLSAgICBjYXNlIEZvcm1N
ZXRob2Q6ICAgICAgICAgIHJldHVybiBTdHJpbmcoZm9ybS5tZXRob2QoKSk7Ci0gICAgY2FzZSBG
b3JtVGFyZ2V0OiAgICAgICAgICByZXR1cm4gU3RyaW5nKGZvcm0udGFyZ2V0KCkpOwotICAgIH0K
LSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9TRUxFQ1Q6IHsKLSAgICBIVE1MU2VsZWN0RWxlbWVu
dEltcGwgJnNlbGVjdCA9IHN0YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50SW1wbCAmPihlbGVt
ZW50KTsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBTZWxlY3RUeXBlOiAgICAgICAg
ICAgIHJldHVybiBTdHJpbmcoc2VsZWN0LnR5cGUoKSk7Ci0gICAgY2FzZSBTZWxlY3RTZWxlY3Rl
ZEluZGV4OiAgIHJldHVybiBOdW1iZXIoc2VsZWN0LnNlbGVjdGVkSW5kZXgoKSk7Ci0gICAgY2Fz
ZSBTZWxlY3RWYWx1ZTogICAgICAgICAgIHJldHVybiBTdHJpbmcoc2VsZWN0LnZhbHVlKCkpOwot
ICAgIGNhc2UgU2VsZWN0TGVuZ3RoOiAgICAgICAgICByZXR1cm4gTnVtYmVyKHNlbGVjdC5sZW5n
dGgoKSk7Ci0gICAgY2FzZSBTZWxlY3RGb3JtOiAgICAgICAgICAgIHJldHVybiBnZXRET01Ob2Rl
KGV4ZWMsIHNlbGVjdC5mb3JtKCkpOyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVudAotICAgIGNhc2Ug
U2VsZWN0T3B0aW9uczogICAgICAgICByZXR1cm4gZ2V0U2VsZWN0SFRNTENvbGxlY3Rpb24oZXhl
Yywgc2VsZWN0Lm9wdGlvbnNIVE1MQ29sbGVjdGlvbigpLmdldCgpLCAmc2VsZWN0KTsgLy8gdHlw
ZSBIVE1MQ29sbGVjdGlvbgotICAgIGNhc2UgU2VsZWN0RGlzYWJsZWQ6ICAgICAgICByZXR1cm4g
Qm9vbGVhbihzZWxlY3QuZGlzYWJsZWQoKSk7Ci0gICAgY2FzZSBTZWxlY3RNdWx0aXBsZTogICAg
ICAgIHJldHVybiBCb29sZWFuKHNlbGVjdC5tdWx0aXBsZSgpKTsKLSAgICBjYXNlIFNlbGVjdE5h
bWU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhzZWxlY3QubmFtZSgpKTsKLSAgICBjYXNlIFNl
bGVjdFNpemU6ICAgICAgICAgICAgcmV0dXJuIE51bWJlcihzZWxlY3Quc2l6ZSgpKTsKLSAgICBj
YXNlIFNlbGVjdFRhYkluZGV4OiAgICAgICAgcmV0dXJuIE51bWJlcihzZWxlY3QudGFiSW5kZXgo
KSk7CisgICAgICAgIGNhc2UgSXNJbmRleEZvcm06ICAgICAgICAgICAgcmV0dXJuIGdldERPTU5v
ZGUoZXhlYywgaXNpbmRleC5mb3JtKCkpOyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVudAorICAgICAg
ICBjYXNlIElzSW5kZXhQcm9tcHQ6ICAgICAgICAgIHJldHVybiBTdHJpbmcoaXNpbmRleC5wcm9t
cHQoKSk7CiAgICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX09QVEdST1VQOiB7Ci0gICAg
SFRNTE9wdEdyb3VwRWxlbWVudEltcGwgJm9wdGdyb3VwID0gc3RhdGljX2Nhc3Q8SFRNTE9wdEdy
b3VwRWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQor
CitWYWx1ZSBIVE1MRWxlbWVudDo6c3R5bGVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0Cit7CisgICAgSFRNTFN0eWxlRWxlbWVudEltcGwmIHN0eWxlID0gKnN0YXRpY19j
YXN0PEhUTUxTdHlsZUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7
Ci0gICAgY2FzZSBPcHRHcm91cERpc2FibGVkOiAgICAgICAgcmV0dXJuIEJvb2xlYW4ob3B0Z3Jv
dXAuZGlzYWJsZWQoKSk7Ci0gICAgY2FzZSBPcHRHcm91cExhYmVsOiAgICAgICAgICAgcmV0dXJu
IFN0cmluZyhvcHRncm91cC5sYWJlbCgpKTsKLSAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2Ug
SURfT1BUSU9OOiB7Ci0gICAgSFRNTE9wdGlvbkVsZW1lbnRJbXBsICZvcHRpb24gPSBzdGF0aWNf
Y2FzdDxIVE1MT3B0aW9uRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tl
bikgewotICAgIGNhc2UgT3B0aW9uRm9ybTogICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShl
eGVjLG9wdGlvbi5mb3JtKCkpOyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVudAotICAgIGNhc2UgT3B0
aW9uRGVmYXVsdFNlbGVjdGVkOiByZXR1cm4gQm9vbGVhbihvcHRpb24uZGVmYXVsdFNlbGVjdGVk
KCkpOwotICAgIGNhc2UgT3B0aW9uVGV4dDogICAgICAgICAgICByZXR1cm4gU3RyaW5nKG9wdGlv
bi50ZXh0KCkpOwotICAgIGNhc2UgT3B0aW9uSW5kZXg6ICAgICAgICAgICByZXR1cm4gTnVtYmVy
KG9wdGlvbi5pbmRleCgpKTsKLSAgICBjYXNlIE9wdGlvbkRpc2FibGVkOiAgICAgICAgcmV0dXJu
IEJvb2xlYW4ob3B0aW9uLmRpc2FibGVkKCkpOwotICAgIGNhc2UgT3B0aW9uTGFiZWw6ICAgICAg
ICAgICByZXR1cm4gU3RyaW5nKG9wdGlvbi5sYWJlbCgpKTsKLSAgICBjYXNlIE9wdGlvblNlbGVj
dGVkOiAgICAgICAgcmV0dXJuIEJvb2xlYW4ob3B0aW9uLnNlbGVjdGVkKCkpOwotICAgIGNhc2Ug
T3B0aW9uVmFsdWU6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKG9wdGlvbi52YWx1ZSgpKTsKLSAg
ICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfSU5QVVQ6IHsKLSAgICBIVE1MSW5wdXRFbGVt
ZW50SW1wbCAmaW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50SW1wbCAmPihlbGVt
ZW50KTsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBJbnB1dERlZmF1bHRWYWx1ZTog
ICAgcmV0dXJuIFN0cmluZyhpbnB1dC5kZWZhdWx0VmFsdWUoKSk7Ci0gICAgY2FzZSBJbnB1dERl
ZmF1bHRDaGVja2VkOiAgcmV0dXJuIEJvb2xlYW4oaW5wdXQuZGVmYXVsdENoZWNrZWQoKSk7Ci0g
ICAgY2FzZSBJbnB1dEZvcm06ICAgICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyxpbnB1
dC5mb3JtKCkpOyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVudAotICAgIGNhc2UgSW5wdXRBY2NlcHQ6
ICAgICAgICAgIHJldHVybiBTdHJpbmcoaW5wdXQuYWNjZXB0KCkpOwotICAgIGNhc2UgSW5wdXRB
Y2Nlc3NLZXk6ICAgICAgIHJldHVybiBTdHJpbmcoaW5wdXQuYWNjZXNzS2V5KCkpOwotICAgIGNh
c2UgSW5wdXRBbGlnbjogICAgICAgICAgIHJldHVybiBTdHJpbmcoaW5wdXQuYWxpZ24oKSk7Ci0g
ICAgY2FzZSBJbnB1dEFsdDogICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpbnB1dC5hbHQoKSk7
Ci0gICAgY2FzZSBJbnB1dENoZWNrZWQ6ICAgICAgICAgcmV0dXJuIEJvb2xlYW4oaW5wdXQuY2hl
Y2tlZCgpKTsKLSAgICBjYXNlIElucHV0RGlzYWJsZWQ6ICAgICAgICByZXR1cm4gQm9vbGVhbihp
bnB1dC5kaXNhYmxlZCgpKTsKLSAgICBjYXNlIElucHV0TWF4TGVuZ3RoOiAgICAgICByZXR1cm4g
TnVtYmVyKGlucHV0Lm1heExlbmd0aCgpKTsKLSAgICBjYXNlIElucHV0TmFtZTogICAgICAgICAg
ICByZXR1cm4gU3RyaW5nKGlucHV0Lm5hbWUoKSk7Ci0gICAgY2FzZSBJbnB1dFJlYWRPbmx5OiAg
ICAgICAgcmV0dXJuIEJvb2xlYW4oaW5wdXQucmVhZE9ubHkoKSk7Ci0gICAgY2FzZSBJbnB1dFNl
bGVjdGlvblN0YXJ0OiAgcmV0dXJuIGdldElucHV0U2VsZWN0aW9uU3RhcnQoaW5wdXQpOwotICAg
IGNhc2UgSW5wdXRTZWxlY3Rpb25FbmQ6ICAgIHJldHVybiBnZXRJbnB1dFNlbGVjdGlvbkVuZChp
bnB1dCk7Ci0gICAgY2FzZSBJbnB1dFNpemU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpbnB1
dC5zaXplRE9NKCkpOwotICAgIGNhc2UgSW5wdXRTcmM6ICAgICAgICAgICAgIHJldHVybiBTdHJp
bmcoaW5wdXQuc3JjKCkpOwotICAgIGNhc2UgSW5wdXRUYWJJbmRleDogICAgICAgIHJldHVybiBO
dW1iZXIoaW5wdXQudGFiSW5kZXgoKSk7Ci0gICAgY2FzZSBJbnB1dFR5cGU6ICAgICAgICAgICAg
cmV0dXJuIFN0cmluZyhpbnB1dC50eXBlKCkpOwotICAgIGNhc2UgSW5wdXRVc2VNYXA6ICAgICAg
ICAgIHJldHVybiBTdHJpbmcoaW5wdXQudXNlTWFwKCkpOwotICAgIGNhc2UgSW5wdXRWYWx1ZTog
ICAgICAgICAgIHJldHVybiBTdHJpbmcoaW5wdXQudmFsdWUoKSk7CisgICAgICAgIGNhc2UgU3R5
bGVEaXNhYmxlZDogICAgICAgIHJldHVybiBCb29sZWFuKHN0eWxlLmRpc2FibGVkKCkpOworICAg
ICAgICBjYXNlIFN0eWxlTWVkaWE6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHN0eWxlLm1lZGlh
KCkpOworICAgICAgICBjYXNlIFN0eWxlVHlwZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKHN0
eWxlLnR5cGUoKSk7CisgICAgICAgIGNhc2UgU3R5bGVTaGVldDogICAgICAgICAgIHJldHVybiBn
ZXRET01TdHlsZVNoZWV0KGV4ZWMsIHN0eWxlLnNoZWV0KCkpOwogICAgIH0KLSAgfQotICBicmVh
azsKLSAgY2FzZSBJRF9URVhUQVJFQTogewotICAgIEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBsICZ0
ZXh0YXJlYSA9IHN0YXRpY19jYXN0PEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBsICY+KGVsZW1lbnQp
OwotICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIFRleHRBcmVhRGVmYXVsdFZhbHVlOiAg
ICByZXR1cm4gU3RyaW5nKHRleHRhcmVhLmRlZmF1bHRWYWx1ZSgpKTsKLSAgICBjYXNlIFRleHRB
cmVhRm9ybTogICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLHRleHRhcmVhLmZvcm0o
KSk7IC8vIHR5cGUgSFRNTEZvcm1FbGVtZW50Ci0gICAgY2FzZSBUZXh0QXJlYUFjY2Vzc0tleTog
ICAgICAgcmV0dXJuIFN0cmluZyh0ZXh0YXJlYS5hY2Nlc3NLZXkoKSk7Ci0gICAgY2FzZSBUZXh0
QXJlYUNvbHM6ICAgICAgICAgICAgcmV0dXJuIE51bWJlcih0ZXh0YXJlYS5jb2xzKCkpOwotICAg
IGNhc2UgVGV4dEFyZWFEaXNhYmxlZDogICAgICAgIHJldHVybiBCb29sZWFuKHRleHRhcmVhLmRp
c2FibGVkKCkpOwotICAgIGNhc2UgVGV4dEFyZWFOYW1lOiAgICAgICAgICAgIHJldHVybiBTdHJp
bmcodGV4dGFyZWEubmFtZSgpKTsKLSAgICBjYXNlIFRleHRBcmVhUmVhZE9ubHk6ICAgICAgICBy
ZXR1cm4gQm9vbGVhbih0ZXh0YXJlYS5yZWFkT25seSgpKTsKLSAgICBjYXNlIFRleHRBcmVhUm93
czogICAgICAgICAgICByZXR1cm4gTnVtYmVyKHRleHRhcmVhLnJvd3MoKSk7Ci0gICAgY2FzZSBU
ZXh0QXJlYVNlbGVjdGlvblN0YXJ0OiAgcmV0dXJuIE51bWJlcih0ZXh0YXJlYS5zZWxlY3Rpb25T
dGFydCgpKTsKLSAgICBjYXNlIFRleHRBcmVhU2VsZWN0aW9uRW5kOiAgICByZXR1cm4gTnVtYmVy
KHRleHRhcmVhLnNlbGVjdGlvbkVuZCgpKTsKLSAgICBjYXNlIFRleHRBcmVhVGFiSW5kZXg6ICAg
ICAgICByZXR1cm4gTnVtYmVyKHRleHRhcmVhLnRhYkluZGV4KCkpOwotICAgIGNhc2UgVGV4dEFy
ZWFUeXBlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcodGV4dGFyZWEudHlwZSgpKTsKLSAgICBj
YXNlIFRleHRBcmVhVmFsdWU6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRleHRhcmVhLnZhbHVl
KCkpOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OmJv
ZHlHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTEJv
ZHlFbGVtZW50SW1wbCYgYm9keSA9ICpzdGF0aWNfY2FzdDxIVE1MQm9keUVsZW1lbnRJbXBsKj4o
aW1wbCgpKTsKKwlzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgQm9keUFMaW5rOiAgICAg
ICAgICAgcmV0dXJuIFN0cmluZyhib2R5LmFMaW5rKCkpOworICAgICAgICBjYXNlIEJvZHlCYWNr
Z3JvdW5kOiAgICAgIHJldHVybiBTdHJpbmcoYm9keS5iYWNrZ3JvdW5kKCkpOworICAgICAgICBj
YXNlIEJvZHlCZ0NvbG9yOiAgICAgICAgIHJldHVybiBTdHJpbmcoYm9keS5iZ0NvbG9yKCkpOwor
ICAgICAgICBjYXNlIEJvZHlMaW5rOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYm9keS5saW5r
KCkpOworICAgICAgICBjYXNlIEJvZHlUZXh0OiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYm9k
eS50ZXh0KCkpOworICAgICAgICBjYXNlIEJvZHlWTGluazogICAgICAgICAgIHJldHVybiBTdHJp
bmcoYm9keS52TGluaygpKTsKKyAgICAgICAgZGVmYXVsdDogeworICAgICAgICAgICAgLy8gVXBk
YXRlIHRoZSBkb2N1bWVudCdzIGxheW91dCBiZWZvcmUgd2UgY29tcHV0ZSB0aGVzZSBhdHRyaWJ1
dGVzLgorICAgICAgICAgICAgRG9jdW1lbnRJbXBsICpkb2MgPSBib2R5LmdldERvY3VtZW50KCk7
CisgICAgICAgICAgICBpZiAoZG9jKQorICAgICAgICAgICAgICAgIGRvYy0+dXBkYXRlTGF5b3V0
SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CisgICAgICAgICAgICBLSFRNTFZpZXcgKnZpZXcg
PSBkb2MgPyBkb2MtPnZpZXcoKSA6IDA7CisgICAgICAgICAgICBzd2l0Y2ggKHRva2VuKSB7Cisg
ICAgICAgICAgICAgICAgY2FzZSBCb2R5U2Nyb2xsTGVmdDoKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIE51bWJlcih2aWV3ID8gdmlldy0+Y29udGVudHNYKCkgOiAwKTsKKyAgICAgICAgICAg
ICAgICBjYXNlIEJvZHlTY3JvbGxUb3A6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOdW1i
ZXIodmlldyA/IHZpZXctPmNvbnRlbnRzWSgpIDogMCk7CisgICAgICAgICAgICAgICAgY2FzZSBC
b2R5U2Nyb2xsSGVpZ2h0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTnVtYmVyKHZpZXcg
PyB2aWV3LT5jb250ZW50c0hlaWdodCgpIDogMCk7CisgICAgICAgICAgICAgICAgY2FzZSBCb2R5
U2Nyb2xsV2lkdGg6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOdW1iZXIodmlldyA/IHZp
ZXctPmNvbnRlbnRzV2lkdGgoKSA6IDApOworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAg
fQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX0JVVFRPTjogewotICAgIEhUTUxCdXR0b25FbGVt
ZW50SW1wbCAmYnV0dG9uID0gc3RhdGljX2Nhc3Q8SFRNTEJ1dHRvbkVsZW1lbnRJbXBsICY+KGVs
ZW1lbnQpOwotICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIEJ1dHRvbkZvcm06ICAgICAg
ICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyxidXR0b24uZm9ybSgpKTsgLy8gdHlwZSBIVE1M
Rm9ybUVsZW1lbnQKLSAgICBjYXNlIEJ1dHRvbkFjY2Vzc0tleTogICAgICAgcmV0dXJuIFN0cmlu
ZyhidXR0b24uYWNjZXNzS2V5KCkpOwotICAgIGNhc2UgQnV0dG9uRGlzYWJsZWQ6ICAgICAgICBy
ZXR1cm4gQm9vbGVhbihidXR0b24uZGlzYWJsZWQoKSk7Ci0gICAgY2FzZSBCdXR0b25OYW1lOiAg
ICAgICAgICAgIHJldHVybiBTdHJpbmcoYnV0dG9uLm5hbWUoKSk7Ci0gICAgY2FzZSBCdXR0b25U
YWJJbmRleDogICAgICAgIHJldHVybiBOdW1iZXIoYnV0dG9uLnRhYkluZGV4KCkpOwotICAgIGNh
c2UgQnV0dG9uVHlwZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGJ1dHRvbi50eXBlKCkpOwot
ICAgIGNhc2UgQnV0dG9uVmFsdWU6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGJ1dHRvbi52YWx1
ZSgpKTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50Ojpm
b3JtR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxG
b3JtRWxlbWVudEltcGwmIGZvcm0gPSAqc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50SW1wbCo+
KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNlIEZvcm1FbGVtZW50
czogICAgICAgIHJldHVybiBnZXRIVE1MQ29sbGVjdGlvbihleGVjLCBmb3JtLmVsZW1lbnRzKCku
Z2V0KCkpOworICAgICAgICBjYXNlIEZvcm1MZW5ndGg6ICAgICAgICAgIHJldHVybiBOdW1iZXIo
Zm9ybS5sZW5ndGgoKSk7CisgICAgICAgIGNhc2UgRm9ybU5hbWU6ICAgICAgICAgICAgcmV0dXJu
IFN0cmluZyhmb3JtLm5hbWUoKSk7CisgICAgICAgIGNhc2UgRm9ybUFjY2VwdENoYXJzZXQ6ICAg
cmV0dXJuIFN0cmluZyhmb3JtLmFjY2VwdENoYXJzZXQoKSk7CisgICAgICAgIGNhc2UgRm9ybUFj
dGlvbjogICAgICAgICAgcmV0dXJuIFN0cmluZyhmb3JtLmFjdGlvbigpKTsKKyAgICAgICAgY2Fz
ZSBGb3JtRW5jVHlwZTogICAgICAgICByZXR1cm4gU3RyaW5nKGZvcm0uZW5jdHlwZSgpKTsKKyAg
ICAgICAgY2FzZSBGb3JtTWV0aG9kOiAgICAgICAgICByZXR1cm4gU3RyaW5nKGZvcm0ubWV0aG9k
KCkpOworICAgICAgICBjYXNlIEZvcm1UYXJnZXQ6ICAgICAgICAgIHJldHVybiBTdHJpbmcoZm9y
bS50YXJnZXQoKSk7CiAgICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX0xBQkVMOiB7Ci0g
ICAgSFRNTExhYmVsRWxlbWVudEltcGwgJmxhYmVsID0gc3RhdGljX2Nhc3Q8SFRNTExhYmVsRWxl
bWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgTGFi
ZWxGb3JtOiAgICAgICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsbGFiZWwuZm9ybSgpKTsg
Ly8gdHlwZSBIVE1MRm9ybUVsZW1lbnQKLSAgICBjYXNlIExhYmVsQWNjZXNzS2V5OiAgICAgICBy
ZXR1cm4gU3RyaW5nKGxhYmVsLmFjY2Vzc0tleSgpKTsKLSAgICBjYXNlIExhYmVsSHRtbEZvcjog
ICAgICAgICByZXR1cm4gU3RyaW5nKGxhYmVsLmh0bWxGb3IoKSk7CisgICAgcmV0dXJuIFVuZGVm
aW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6c2VsZWN0R2V0dGVyKEV4ZWNTdGF0ZSog
ZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxTZWxlY3RFbGVtZW50SW1wbCYgc2Vs
ZWN0ID0gKnN0YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAg
c3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNlIFNlbGVjdFR5cGU6ICAgICAgICAgICAgcmV0
dXJuIFN0cmluZyhzZWxlY3QudHlwZSgpKTsKKyAgICAgICAgY2FzZSBTZWxlY3RTZWxlY3RlZElu
ZGV4OiAgIHJldHVybiBOdW1iZXIoc2VsZWN0LnNlbGVjdGVkSW5kZXgoKSk7CisgICAgICAgIGNh
c2UgU2VsZWN0VmFsdWU6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHNlbGVjdC52YWx1ZSgpKTsK
KyAgICAgICAgY2FzZSBTZWxlY3RMZW5ndGg6ICAgICAgICAgIHJldHVybiBOdW1iZXIoc2VsZWN0
Lmxlbmd0aCgpKTsKKyAgICAgICAgY2FzZSBTZWxlY3RGb3JtOiAgICAgICAgICAgIHJldHVybiBn
ZXRET01Ob2RlKGV4ZWMsIHNlbGVjdC5mb3JtKCkpOyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVudAor
ICAgICAgICBjYXNlIFNlbGVjdE9wdGlvbnM6ICAgICAgICAgcmV0dXJuIGdldFNlbGVjdEhUTUxD
b2xsZWN0aW9uKGV4ZWMsIHNlbGVjdC5vcHRpb25zSFRNTENvbGxlY3Rpb24oKS5nZXQoKSwgJnNl
bGVjdCk7IC8vIHR5cGUgSFRNTENvbGxlY3Rpb24KKyAgICAgICAgY2FzZSBTZWxlY3REaXNhYmxl
ZDogICAgICAgIHJldHVybiBCb29sZWFuKHNlbGVjdC5kaXNhYmxlZCgpKTsKKyAgICAgICAgY2Fz
ZSBTZWxlY3RNdWx0aXBsZTogICAgICAgIHJldHVybiBCb29sZWFuKHNlbGVjdC5tdWx0aXBsZSgp
KTsKKyAgICAgICAgY2FzZSBTZWxlY3ROYW1lOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoc2Vs
ZWN0Lm5hbWUoKSk7CisgICAgICAgIGNhc2UgU2VsZWN0U2l6ZTogICAgICAgICAgICByZXR1cm4g
TnVtYmVyKHNlbGVjdC5zaXplKCkpOworICAgICAgICBjYXNlIFNlbGVjdFRhYkluZGV4OiAgICAg
ICAgcmV0dXJuIE51bWJlcihzZWxlY3QudGFiSW5kZXgoKSk7CiAgICAgfQotICB9Ci0gIGJyZWFr
OwotICBjYXNlIElEX0ZJRUxEU0VUOiB7Ci0gICAgSFRNTEZpZWxkU2V0RWxlbWVudEltcGwgJmZp
ZWxkU2V0ID0gc3RhdGljX2Nhc3Q8SFRNTEZpZWxkU2V0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7
CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6b3B0R3Jv
dXBHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTE9w
dEdyb3VwRWxlbWVudEltcGwmIG9wdGdyb3VwID0gKnN0YXRpY19jYXN0PEhUTUxPcHRHcm91cEVs
ZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBGaWVs
ZFNldEZvcm06ICAgICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyxmaWVsZFNldC5mb3Jt
KCkpOyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVudAorICAgICAgICBjYXNlIE9wdEdyb3VwRGlzYWJs
ZWQ6ICAgICAgICByZXR1cm4gQm9vbGVhbihvcHRncm91cC5kaXNhYmxlZCgpKTsKKyAgICAgICAg
Y2FzZSBPcHRHcm91cExhYmVsOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhvcHRncm91cC5sYWJl
bCgpKTsKICAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfTEVHRU5EOiB7Ci0gICAgSFRN
TExlZ2VuZEVsZW1lbnRJbXBsICZsZWdlbmQgPSBzdGF0aWNfY2FzdDxIVE1MTGVnZW5kRWxlbWVu
dEltcGwgJj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgTGVnZW5k
Rm9ybTogICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLGxlZ2VuZC5mb3JtKCkpOyAv
LyB0eXBlIEhUTUxGb3JtRWxlbWVudAotICAgIGNhc2UgTGVnZW5kQWNjZXNzS2V5OiAgICAgICBy
ZXR1cm4gU3RyaW5nKGxlZ2VuZC5hY2Nlc3NLZXkoKSk7Ci0gICAgY2FzZSBMZWdlbmRBbGlnbjog
ICAgICAgICAgIHJldHVybiBTdHJpbmcobGVnZW5kLmFsaWduKCkpOworICAgIHJldHVybiBVbmRl
ZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6Om9wdGlvbkdldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MT3B0aW9uRWxlbWVudEltcGwmIG9w
dGlvbiA9ICpzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudEltcGwqPihpbXBsKCkpOworICAg
IHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBPcHRpb25Gb3JtOiAgICAgICAgICAgIHJl
dHVybiBnZXRET01Ob2RlKGV4ZWMsb3B0aW9uLmZvcm0oKSk7IC8vIHR5cGUgSFRNTEZvcm1FbGVt
ZW50CisgICAgICAgIGNhc2UgT3B0aW9uRGVmYXVsdFNlbGVjdGVkOiByZXR1cm4gQm9vbGVhbihv
cHRpb24uZGVmYXVsdFNlbGVjdGVkKCkpOworICAgICAgICBjYXNlIE9wdGlvblRleHQ6ICAgICAg
ICAgICAgcmV0dXJuIFN0cmluZyhvcHRpb24udGV4dCgpKTsKKyAgICAgICAgY2FzZSBPcHRpb25J
bmRleDogICAgICAgICAgIHJldHVybiBOdW1iZXIob3B0aW9uLmluZGV4KCkpOworICAgICAgICBj
YXNlIE9wdGlvbkRpc2FibGVkOiAgICAgICAgcmV0dXJuIEJvb2xlYW4ob3B0aW9uLmRpc2FibGVk
KCkpOworICAgICAgICBjYXNlIE9wdGlvbkxhYmVsOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhv
cHRpb24ubGFiZWwoKSk7CisgICAgICAgIGNhc2UgT3B0aW9uU2VsZWN0ZWQ6ICAgICAgICByZXR1
cm4gQm9vbGVhbihvcHRpb24uc2VsZWN0ZWQoKSk7CisgICAgICAgIGNhc2UgT3B0aW9uVmFsdWU6
ICAgICAgICAgICByZXR1cm4gU3RyaW5nKG9wdGlvbi52YWx1ZSgpKTsKICAgICB9Ci0gIH0KLSAg
YnJlYWs7Ci0gIGNhc2UgSURfVUw6IHsKLSAgICBIVE1MVUxpc3RFbGVtZW50SW1wbCAmdUxpc3Qg
PSBzdGF0aWNfY2FzdDxIVE1MVUxpc3RFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICByZXR1
cm4gVW5kZWZpbmVkKCk7Cit9CisKK3N0YXRpYyBWYWx1ZSBnZXRJbnB1dFNlbGVjdGlvblN0YXJ0
KEhUTUxJbnB1dEVsZW1lbnRJbXBsICZpbnB1dCkKK3sKKyAgICBpZiAoaW5wdXQuY2FuSGF2ZVNl
bGVjdGlvbigpKQorICAgICAgICByZXR1cm4gTnVtYmVyKGlucHV0LnNlbGVjdGlvblN0YXJ0KCkp
OworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworc3RhdGljIFZhbHVlIGdldElucHV0U2Vs
ZWN0aW9uRW5kKEhUTUxJbnB1dEVsZW1lbnRJbXBsICZpbnB1dCkKK3sKKyAgICBpZiAoaW5wdXQu
Y2FuSGF2ZVNlbGVjdGlvbigpKQorICAgICAgICByZXR1cm4gTnVtYmVyKGlucHV0LnNlbGVjdGlv
bkVuZCgpKTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50
OjppbnB1dEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBI
VE1MSW5wdXRFbGVtZW50SW1wbCYgaW5wdXQgPSAqc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVu
dEltcGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIFVMaXN0Q29t
cGFjdDogICAgICAgICByZXR1cm4gQm9vbGVhbih1TGlzdC5jb21wYWN0KCkpOwotICAgIGNhc2Ug
VUxpc3RUeXBlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcodUxpc3QudHlwZSgpKTsKKyAgICAg
ICAgY2FzZSBJbnB1dERlZmF1bHRWYWx1ZTogICAgcmV0dXJuIFN0cmluZyhpbnB1dC5kZWZhdWx0
VmFsdWUoKSk7CisgICAgICAgIGNhc2UgSW5wdXREZWZhdWx0Q2hlY2tlZDogIHJldHVybiBCb29s
ZWFuKGlucHV0LmRlZmF1bHRDaGVja2VkKCkpOworICAgICAgICBjYXNlIElucHV0Rm9ybTogICAg
ICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLGlucHV0LmZvcm0oKSk7IC8vIHR5cGUgSFRN
TEZvcm1FbGVtZW50CisgICAgICAgIGNhc2UgSW5wdXRBY2NlcHQ6ICAgICAgICAgIHJldHVybiBT
dHJpbmcoaW5wdXQuYWNjZXB0KCkpOworICAgICAgICBjYXNlIElucHV0QWNjZXNzS2V5OiAgICAg
ICByZXR1cm4gU3RyaW5nKGlucHV0LmFjY2Vzc0tleSgpKTsKKyAgICAgICAgY2FzZSBJbnB1dEFs
aWduOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpbnB1dC5hbGlnbigpKTsKKyAgICAgICAgY2Fz
ZSBJbnB1dEFsdDogICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpbnB1dC5hbHQoKSk7CisgICAg
ICAgIGNhc2UgSW5wdXRDaGVja2VkOiAgICAgICAgIHJldHVybiBCb29sZWFuKGlucHV0LmNoZWNr
ZWQoKSk7CisgICAgICAgIGNhc2UgSW5wdXREaXNhYmxlZDogICAgICAgIHJldHVybiBCb29sZWFu
KGlucHV0LmRpc2FibGVkKCkpOworICAgICAgICBjYXNlIElucHV0TWF4TGVuZ3RoOiAgICAgICBy
ZXR1cm4gTnVtYmVyKGlucHV0Lm1heExlbmd0aCgpKTsKKyAgICAgICAgY2FzZSBJbnB1dE5hbWU6
ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpbnB1dC5uYW1lKCkpOworICAgICAgICBjYXNlIElu
cHV0UmVhZE9ubHk6ICAgICAgICByZXR1cm4gQm9vbGVhbihpbnB1dC5yZWFkT25seSgpKTsKKyAg
ICAgICAgY2FzZSBJbnB1dFNlbGVjdGlvblN0YXJ0OiAgcmV0dXJuIGdldElucHV0U2VsZWN0aW9u
U3RhcnQoaW5wdXQpOworICAgICAgICBjYXNlIElucHV0U2VsZWN0aW9uRW5kOiAgICByZXR1cm4g
Z2V0SW5wdXRTZWxlY3Rpb25FbmQoaW5wdXQpOworICAgICAgICBjYXNlIElucHV0U2l6ZTogICAg
ICAgICAgICByZXR1cm4gU3RyaW5nKGlucHV0LnNpemVET00oKSk7CisgICAgICAgIGNhc2UgSW5w
dXRTcmM6ICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoaW5wdXQuc3JjKCkpOworICAgICAgICBj
YXNlIElucHV0VGFiSW5kZXg6ICAgICAgICByZXR1cm4gTnVtYmVyKGlucHV0LnRhYkluZGV4KCkp
OworICAgICAgICBjYXNlIElucHV0VHlwZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGlucHV0
LnR5cGUoKSk7CisgICAgICAgIGNhc2UgSW5wdXRVc2VNYXA6ICAgICAgICAgIHJldHVybiBTdHJp
bmcoaW5wdXQudXNlTWFwKCkpOworICAgICAgICBjYXNlIElucHV0VmFsdWU6ICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKGlucHV0LnZhbHVlKCkpOwogICAgIH0KLSAgfQotICBicmVhazsKLSAgY2Fz
ZSBJRF9PTDogewotICAgIEhUTUxPTGlzdEVsZW1lbnRJbXBsICZvTGlzdCA9IHN0YXRpY19jYXN0
PEhUTUxPTGlzdEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgIHN3aXRjaCAodG9rZW4pIHsK
LSAgICBjYXNlIE9MaXN0Q29tcGFjdDogICAgICAgICByZXR1cm4gQm9vbGVhbihvTGlzdC5jb21w
YWN0KCkpOwotICAgIGNhc2UgT0xpc3RTdGFydDogICAgICAgICAgIHJldHVybiBOdW1iZXIob0xp
c3Quc3RhcnQoKSk7Ci0gICAgY2FzZSBPTGlzdFR5cGU6ICAgICAgICAgICAgcmV0dXJuIFN0cmlu
ZyhvTGlzdC50eXBlKCkpOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRN
TEVsZW1lbnQ6OnRleHRBcmVhR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25z
dAoreworICAgIEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBsJiB0ZXh0YXJlYSA9ICpzdGF0aWNfY2Fz
dDxIVE1MVGV4dEFyZWFFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikg
eworICAgICAgICBjYXNlIFRleHRBcmVhRGVmYXVsdFZhbHVlOiAgICByZXR1cm4gU3RyaW5nKHRl
eHRhcmVhLmRlZmF1bHRWYWx1ZSgpKTsKKyAgICAgICAgY2FzZSBUZXh0QXJlYUZvcm06ICAgICAg
ICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyx0ZXh0YXJlYS5mb3JtKCkpOyAvLyB0eXBlIEhU
TUxGb3JtRWxlbWVudAorICAgICAgICBjYXNlIFRleHRBcmVhQWNjZXNzS2V5OiAgICAgICByZXR1
cm4gU3RyaW5nKHRleHRhcmVhLmFjY2Vzc0tleSgpKTsKKyAgICAgICAgY2FzZSBUZXh0QXJlYUNv
bHM6ICAgICAgICAgICAgcmV0dXJuIE51bWJlcih0ZXh0YXJlYS5jb2xzKCkpOworICAgICAgICBj
YXNlIFRleHRBcmVhRGlzYWJsZWQ6ICAgICAgICByZXR1cm4gQm9vbGVhbih0ZXh0YXJlYS5kaXNh
YmxlZCgpKTsKKyAgICAgICAgY2FzZSBUZXh0QXJlYU5hbWU6ICAgICAgICAgICAgcmV0dXJuIFN0
cmluZyh0ZXh0YXJlYS5uYW1lKCkpOworICAgICAgICBjYXNlIFRleHRBcmVhUmVhZE9ubHk6ICAg
ICAgICByZXR1cm4gQm9vbGVhbih0ZXh0YXJlYS5yZWFkT25seSgpKTsKKyAgICAgICAgY2FzZSBU
ZXh0QXJlYVJvd3M6ICAgICAgICAgICAgcmV0dXJuIE51bWJlcih0ZXh0YXJlYS5yb3dzKCkpOwor
ICAgICAgICBjYXNlIFRleHRBcmVhU2VsZWN0aW9uU3RhcnQ6ICByZXR1cm4gTnVtYmVyKHRleHRh
cmVhLnNlbGVjdGlvblN0YXJ0KCkpOworICAgICAgICBjYXNlIFRleHRBcmVhU2VsZWN0aW9uRW5k
OiAgICByZXR1cm4gTnVtYmVyKHRleHRhcmVhLnNlbGVjdGlvbkVuZCgpKTsKKyAgICAgICAgY2Fz
ZSBUZXh0QXJlYVRhYkluZGV4OiAgICAgICAgcmV0dXJuIE51bWJlcih0ZXh0YXJlYS50YWJJbmRl
eCgpKTsKKyAgICAgICAgY2FzZSBUZXh0QXJlYVR5cGU6ICAgICAgICAgICAgcmV0dXJuIFN0cmlu
Zyh0ZXh0YXJlYS50eXBlKCkpOworICAgICAgICBjYXNlIFRleHRBcmVhVmFsdWU6ICAgICAgICAg
ICByZXR1cm4gU3RyaW5nKHRleHRhcmVhLnZhbHVlKCkpOwogICAgIH0KLSAgfQotICBicmVhazsK
LSAgY2FzZSBJRF9ETDogewotICAgIEhUTUxETGlzdEVsZW1lbnRJbXBsICZkTGlzdCA9IHN0YXRp
Y19jYXN0PEhUTUxETGlzdEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgIHJldHVybiBVbmRl
ZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OmJ1dHRvbkdldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MQnV0dG9uRWxlbWVudEltcGwmIGJ1
dHRvbiA9ICpzdGF0aWNfY2FzdDxIVE1MQnV0dG9uRWxlbWVudEltcGwqPihpbXBsKCkpOwogICAg
IHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIERMaXN0Q29tcGFjdDogICAgICAgICByZXR1cm4g
Qm9vbGVhbihkTGlzdC5jb21wYWN0KCkpOworICAgICAgICBjYXNlIEJ1dHRvbkZvcm06ICAgICAg
ICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyxidXR0b24uZm9ybSgpKTsgLy8gdHlwZSBIVE1M
Rm9ybUVsZW1lbnQKKyAgICAgICAgY2FzZSBCdXR0b25BY2Nlc3NLZXk6ICAgICAgIHJldHVybiBT
dHJpbmcoYnV0dG9uLmFjY2Vzc0tleSgpKTsKKyAgICAgICAgY2FzZSBCdXR0b25EaXNhYmxlZDog
ICAgICAgIHJldHVybiBCb29sZWFuKGJ1dHRvbi5kaXNhYmxlZCgpKTsKKyAgICAgICAgY2FzZSBC
dXR0b25OYW1lOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYnV0dG9uLm5hbWUoKSk7CisgICAg
ICAgIGNhc2UgQnV0dG9uVGFiSW5kZXg6ICAgICAgICByZXR1cm4gTnVtYmVyKGJ1dHRvbi50YWJJ
bmRleCgpKTsKKyAgICAgICAgY2FzZSBCdXR0b25UeXBlOiAgICAgICAgICAgIHJldHVybiBTdHJp
bmcoYnV0dG9uLnR5cGUoKSk7CisgICAgICAgIGNhc2UgQnV0dG9uVmFsdWU6ICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKGJ1dHRvbi52YWx1ZSgpKTsKICAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNh
c2UgSURfRElSOiB7Ci0gICAgSFRNTERpcmVjdG9yeUVsZW1lbnRJbXBsICZkaXJlY3RvcnkgPSBz
dGF0aWNfY2FzdDxIVE1MRGlyZWN0b3J5RWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgcmV0
dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6bGFiZWxHZXR0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTExhYmVsRWxlbWVudElt
cGwmIGxhYmVsID0gKnN0YXRpY19jYXN0PEhUTUxMYWJlbEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsK
ICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBEaXJlY3RvcnlDb21wYWN0OiAgICAgICAg
IHJldHVybiBCb29sZWFuKGRpcmVjdG9yeS5jb21wYWN0KCkpOworICAgICAgICBjYXNlIExhYmVs
Rm9ybTogICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLGxhYmVsLmZvcm0oKSk7IC8v
IHR5cGUgSFRNTEZvcm1FbGVtZW50CisgICAgICAgIGNhc2UgTGFiZWxBY2Nlc3NLZXk6ICAgICAg
IHJldHVybiBTdHJpbmcobGFiZWwuYWNjZXNzS2V5KCkpOworICAgICAgICBjYXNlIExhYmVsSHRt
bEZvcjogICAgICAgICByZXR1cm4gU3RyaW5nKGxhYmVsLmh0bWxGb3IoKSk7CiAgICAgfQotICB9
Ci0gIGJyZWFrOwotICBjYXNlIElEX01FTlU6IHsKLSAgICBIVE1MTWVudUVsZW1lbnRJbXBsICZt
ZW51ID0gc3RhdGljX2Nhc3Q8SFRNTE1lbnVFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICBy
ZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50OjpmaWVsZFNldEdldHRl
cihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MRmllbGRTZXRF
bGVtZW50SW1wbCYgZmllbGRTZXQgPSAqc3RhdGljX2Nhc3Q8SFRNTEZpZWxkU2V0RWxlbWVudElt
cGwqPihpbXBsKCkpOworICAgIGlmICh0b2tlbiA9PSBGaWVsZFNldEZvcm0pCisgICAgICAgIHJl
dHVybiBnZXRET01Ob2RlKGV4ZWMsZmllbGRTZXQuZm9ybSgpKTsgLy8gdHlwZSBIVE1MRm9ybUVs
ZW1lbnQKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50Ojps
ZWdlbmRHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRN
TExlZ2VuZEVsZW1lbnRJbXBsJiBsZWdlbmQgPSAqc3RhdGljX2Nhc3Q8SFRNTExlZ2VuZEVsZW1l
bnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBNZW51Q29t
cGFjdDogICAgICAgICByZXR1cm4gQm9vbGVhbihtZW51LmNvbXBhY3QoKSk7CisgICAgICAgIGNh
c2UgTGVnZW5kRm9ybTogICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLGxlZ2VuZC5m
b3JtKCkpOyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVudAorICAgICAgICBjYXNlIExlZ2VuZEFjY2Vz
c0tleTogICAgICAgcmV0dXJuIFN0cmluZyhsZWdlbmQuYWNjZXNzS2V5KCkpOworICAgICAgICBj
YXNlIExlZ2VuZEFsaWduOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhsZWdlbmQuYWxpZ24oKSk7
CiAgICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX0xJOiB7Ci0gICAgSFRNTExJRWxlbWVu
dEltcGwgJmxpID0gc3RhdGljX2Nhc3Q8SFRNTExJRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Cisg
ICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6dUxpc3RHZXR0
ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTFVMaXN0RWxl
bWVudEltcGwmIHVMaXN0ID0gKnN0YXRpY19jYXN0PEhUTUxVTGlzdEVsZW1lbnRJbXBsKj4oaW1w
bCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBMSVR5cGU6ICAgICAgICAgICAg
cmV0dXJuIFN0cmluZyhsaS50eXBlKCkpOwotICAgIGNhc2UgTElWYWx1ZTogICAgICAgICAgIHJl
dHVybiBOdW1iZXIobGkudmFsdWUoKSk7CisgICAgICAgIGNhc2UgVUxpc3RDb21wYWN0OiAgICAg
ICAgIHJldHVybiBCb29sZWFuKHVMaXN0LmNvbXBhY3QoKSk7CisgICAgICAgIGNhc2UgVUxpc3RU
eXBlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcodUxpc3QudHlwZSgpKTsKICAgICB9Ci0gIH0K
LSAgYnJlYWs7Ci0gIGNhc2UgSURfRElWOiB7Ci0gICAgSFRNTERpdkVsZW1lbnRJbXBsICZkaXYg
PSBzdGF0aWNfY2FzdDxIVE1MRGl2RWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgcmV0dXJu
IFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6b0xpc3RHZXR0ZXIoRXhlY1N0
YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTE9MaXN0RWxlbWVudEltcGwm
IG9MaXN0ID0gKnN0YXRpY19jYXN0PEhUTUxPTGlzdEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAg
ICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBEaXZBbGlnbjogICAgICAgICAgIHJldHVybiBT
dHJpbmcoZGl2LmFsaWduKCkpOworICAgICAgICBjYXNlIE9MaXN0Q29tcGFjdDogICAgICAgICBy
ZXR1cm4gQm9vbGVhbihvTGlzdC5jb21wYWN0KCkpOworICAgICAgICBjYXNlIE9MaXN0U3RhcnQ6
ICAgICAgICAgICByZXR1cm4gTnVtYmVyKG9MaXN0LnN0YXJ0KCkpOworICAgICAgICBjYXNlIE9M
aXN0VHlwZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKG9MaXN0LnR5cGUoKSk7CiAgICAgfQot
ICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX1A6IHsKLSAgICBIVE1MUGFyYWdyYXBoRWxlbWVudElt
cGwgJnBhcmFncmFwaCA9IHN0YXRpY19jYXN0PEhUTUxQYXJhZ3JhcGhFbGVtZW50SW1wbCAmPihl
bGVtZW50KTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50
OjpkTGlzdEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBI
VE1MRExpc3RFbGVtZW50SW1wbCYgZExpc3QgPSAqc3RhdGljX2Nhc3Q8SFRNTERMaXN0RWxlbWVu
dEltcGwqPihpbXBsKCkpOworICAgIGlmICh0b2tlbiA9PSBETGlzdENvbXBhY3QpCisgICAgICAg
IHJldHVybiBCb29sZWFuKGRMaXN0LmNvbXBhY3QoKSk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgp
OworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6ZGlyR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50
IHRva2VuKSBjb25zdAoreworICAgIEhUTUxEaXJlY3RvcnlFbGVtZW50SW1wbCYgZGlyID0gKnN0
YXRpY19jYXN0PEhUTUxEaXJlY3RvcnlFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRv
a2VuID09IERpcmVjdG9yeUNvbXBhY3QpCisgICAgICAgIHJldHVybiBCb29sZWFuKGRpci5jb21w
YWN0KCkpOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6
Om1lbnVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRN
TE1lbnVFbGVtZW50SW1wbCYgbWVudSA9ICpzdGF0aWNfY2FzdDxIVE1MTWVudUVsZW1lbnRJbXBs
Kj4oaW1wbCgpKTsKKyAgICBpZiAodG9rZW4gPT0gTWVudUNvbXBhY3QpCisgICAgICAgIHJldHVy
biBCb29sZWFuKG1lbnUuY29tcGFjdCgpKTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisK
K1ZhbHVlIEhUTUxFbGVtZW50OjpsaUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikg
Y29uc3QKK3sKKyAgICBIVE1MTElFbGVtZW50SW1wbCYgbGkgPSAqc3RhdGljX2Nhc3Q8SFRNTExJ
RWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIFBh
cmFncmFwaEFsaWduOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhwYXJhZ3JhcGguYWxpZ24oKSk7
CisgICAgICAgIGNhc2UgTElUeXBlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcobGkudHlwZSgp
KTsKKyAgICAgICAgY2FzZSBMSVZhbHVlOiAgICAgICAgICAgcmV0dXJuIE51bWJlcihsaS52YWx1
ZSgpKTsKICAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfSDE6Ci0gIGNhc2UgSURfSDI6
Ci0gIGNhc2UgSURfSDM6Ci0gIGNhc2UgSURfSDQ6Ci0gIGNhc2UgSURfSDU6Ci0gIGNhc2UgSURf
SDY6IHsKLSAgICBIVE1MSGVhZGluZ0VsZW1lbnRJbXBsICZoZWFkaW5nID0gc3RhdGljX2Nhc3Q8
SFRNTEhlYWRpbmdFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICByZXR1cm4gVW5kZWZpbmVk
KCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50OjpkaXZHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBp
bnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTERpdkVsZW1lbnRJbXBsJiBkaXYgPSAqc3RhdGlj
X2Nhc3Q8SFRNTERpdkVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBpZiAodG9rZW4gPT0gRGl2
QWxpZ24pCisgICAgICAgIHJldHVybiBTdHJpbmcoZGl2LmFsaWduKCkpOworICAgIHJldHVybiBV
bmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OnBhcmFncmFwaEdldHRlcihFeGVj
U3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MUGFyYWdyYXBoRWxlbWVu
dEltcGwmIHAgPSAqc3RhdGljX2Nhc3Q8SFRNTFBhcmFncmFwaEVsZW1lbnRJbXBsKj4oaW1wbCgp
KTsKKyAgICBpZiAodG9rZW4gPT0gUGFyYWdyYXBoQWxpZ24pCisgICAgICAgIHJldHVybiBTdHJp
bmcocC5hbGlnbigpKTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxF
bGVtZW50OjpoZWFkaW5nR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAor
eworICAgIEhUTUxIZWFkaW5nRWxlbWVudEltcGwmIGggPSAqc3RhdGljX2Nhc3Q8SFRNTEhlYWRp
bmdFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IEhlYWRpbmdBbGlnbikK
KyAgICAgICAgcmV0dXJuIFN0cmluZyhoLmFsaWduKCkpOworICAgIHJldHVybiBVbmRlZmluZWQo
KTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OmJsb2NrUXVvdGVHZXR0ZXIoRXhlY1N0YXRlKiBl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTEJsb2NrcXVvdGVFbGVtZW50SW1wbCYg
YmxvY2tRdW90ZSA9ICpzdGF0aWNfY2FzdDxIVE1MQmxvY2txdW90ZUVsZW1lbnRJbXBsKj4oaW1w
bCgpKTsKKyAgICBpZiAodG9rZW4gPT0gQmxvY2tRdW90ZUNpdGUpCisgICAgICAgIHJldHVybiBT
dHJpbmcoYmxvY2tRdW90ZS5jaXRlKCkpOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKwor
VmFsdWUgSFRNTEVsZW1lbnQ6OnF1b3RlR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2Vu
KSBjb25zdAoreworICAgIEhUTUxRdW90ZUVsZW1lbnRJbXBsJiBxdW90ZSA9ICpzdGF0aWNfY2Fz
dDxIVE1MUXVvdGVFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IFF1b3Rl
Q2l0ZSkKKyAgICAgICAgcmV0dXJuIFN0cmluZyhxdW90ZS5jaXRlKCkpOworICAgIHJldHVybiBV
bmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OnByZUdldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9y
ICd3cmFwJyB3aGVuIHdoaXRlLXNwYWNlOiBwcmUtd3JhcCBpcyBpbXBsZW1lbnRlZC4KKyAgICBI
VE1MUHJlRWxlbWVudEltcGwmIHByZSA9ICpzdGF0aWNfY2FzdDxIVE1MUHJlRWxlbWVudEltcGwq
PihpbXBsKCkpOworICAgIGlmICh0b2tlbiA9PSBQcmVXaWR0aCkKKyAgICAgICAgcmV0dXJuIE51
bWJlcihwcmUud2lkdGgoKSk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBI
VE1MRWxlbWVudDo6YnJHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7
CisgICAgSFRNTEJSRWxlbWVudEltcGwmIGJyID0gKnN0YXRpY19jYXN0PEhUTUxCUkVsZW1lbnRJ
bXBsKj4oaW1wbCgpKTsKKyAgICBpZiAodG9rZW4gPT0gQlJDbGVhcikKKyAgICAgICAgcmV0dXJu
IFN0cmluZyhici5jbGVhcigpKTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVl
IEhUTUxFbGVtZW50OjpiYXNlRm9udEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikg
Y29uc3QKK3sKKyAgICBIVE1MQmFzZUZvbnRFbGVtZW50SW1wbCYgYmFzZUZvbnQgPSAqc3RhdGlj
X2Nhc3Q8SFRNTEJhc2VGb250RWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAodG9r
ZW4pIHsKLSAgICBjYXNlIEhlYWRpbmdBbGlnbjogICAgICAgICAgIHJldHVybiBTdHJpbmcoaGVh
ZGluZy5hbGlnbigpKTsKKyAgICAgICAgY2FzZSBCYXNlRm9udENvbG9yOiAgICAgICAgICAgcmV0
dXJuIFN0cmluZyhiYXNlRm9udC5jb2xvcigpKTsKKyAgICAgICAgY2FzZSBCYXNlRm9udEZhY2U6
ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhiYXNlRm9udC5mYWNlKCkpOworICAgICAgICBjYXNl
IEJhc2VGb250U2l6ZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGJhc2VGb250LnNpemUoKSk7
CiAgICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX0JMT0NLUVVPVEU6IHsKLSAgICBIVE1M
QmxvY2txdW90ZUVsZW1lbnRJbXBsICZibG9ja3F1b3RlID0gc3RhdGljX2Nhc3Q8SFRNTEJsb2Nr
cXVvdGVFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9
CisKK1ZhbHVlIEhUTUxFbGVtZW50Ojpmb250R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRv
a2VuKSBjb25zdAoreworICAgIEhUTUxGb250RWxlbWVudEltcGwmIGZvbnQgPSAqc3RhdGljX2Nh
c3Q8SFRNTEZvbnRFbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tlbikgewot
ICAgIGNhc2UgQmxvY2tRdW90ZUNpdGU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhibG9ja3F1
b3RlLmNpdGUoKSk7CisgICAgICAgIGNhc2UgRm9udENvbG9yOiAgICAgICAgICAgcmV0dXJuIFN0
cmluZyhmb250LmNvbG9yKCkpOworICAgICAgICBjYXNlIEZvbnRGYWNlOiAgICAgICAgICAgIHJl
dHVybiBTdHJpbmcoZm9udC5mYWNlKCkpOworICAgICAgICBjYXNlIEZvbnRTaXplOiAgICAgICAg
ICAgIHJldHVybiBTdHJpbmcoZm9udC5zaXplKCkpOwogICAgIH0KLSAgfQotICBjYXNlIElEX1E6
IHsKLSAgICBIVE1MUXVvdGVFbGVtZW50SW1wbCAmcXVvdGUgPSBzdGF0aWNfY2FzdDxIVE1MUXVv
dGVFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisK
K1ZhbHVlIEhUTUxFbGVtZW50OjpockdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikg
Y29uc3QKK3sKKyAgICBIVE1MSFJFbGVtZW50SW1wbCYgaHIgPSAqc3RhdGljX2Nhc3Q8SFRNTEhS
RWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIFF1
b3RlQ2l0ZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKHF1b3RlLmNpdGUoKSk7CisgICAgICAg
IGNhc2UgSFJBbGlnbjogICAgICAgICAgIHJldHVybiBTdHJpbmcoaHIuYWxpZ24oKSk7CisgICAg
ICAgIGNhc2UgSFJOb1NoYWRlOiAgICAgICAgIHJldHVybiBCb29sZWFuKGhyLm5vU2hhZGUoKSk7
CisgICAgICAgIGNhc2UgSFJTaXplOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoaHIuc2l6ZSgp
KTsKKyAgICAgICAgY2FzZSBIUldpZHRoOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhoci53aWR0
aCgpKTsKICAgICB9Ci0gIH0KLSAgY2FzZSBJRF9QUkU6IHsKLSAgICBIVE1MUHJlRWxlbWVudElt
cGwgJnByZSA9IHN0YXRpY19jYXN0PEhUTUxQcmVFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAg
ICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50Ojptb2RHZXR0ZXIo
RXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTE1vZEVsZW1lbnRJ
bXBsJiBtb2QgPSAqc3RhdGljX2Nhc3Q8SFRNTE1vZEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAg
ICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBQcmVXaWR0aDogICAgICAgICAgIHJldHVybiBO
dW1iZXIocHJlLndpZHRoKCkpOworICAgICAgICBjYXNlIE1vZENpdGU6ICAgICAgICAgICAgcmV0
dXJuIFN0cmluZyhtb2QuY2l0ZSgpKTsKKyAgICAgICAgY2FzZSBNb2REYXRlVGltZTogICAgICAg
IHJldHVybiBTdHJpbmcobW9kLmRhdGVUaW1lKCkpOwogICAgIH0KLSAgfQotICBicmVhazsKLSAg
Y2FzZSBJRF9CUjogewotICAgIEhUTUxCUkVsZW1lbnRJbXBsICZiciA9IHN0YXRpY19jYXN0PEhU
TUxCUkVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30K
KworVmFsdWUgSFRNTEVsZW1lbnQ6OmFuY2hvckdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0
b2tlbikgY29uc3QKK3sKKyAgICBIVE1MQW5jaG9yRWxlbWVudEltcGwmIGFuY2hvciA9ICpzdGF0
aWNfY2FzdDxIVE1MQW5jaG9yRWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAodG9r
ZW4pIHsKLSAgICBjYXNlIEJSQ2xlYXI6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGJyLmNsZWFy
KCkpOworICAgICAgICBjYXNlIEFuY2hvckFjY2Vzc0tleTogICAgICAgcmV0dXJuIFN0cmluZyhh
bmNob3IuYWNjZXNzS2V5KCkpOworICAgICAgICBjYXNlIEFuY2hvckNoYXJzZXQ6ICAgICAgICAg
cmV0dXJuIFN0cmluZyhhbmNob3IuY2hhcnNldCgpKTsKKyAgICAgICAgY2FzZSBBbmNob3JDb29y
ZHM6ICAgICAgICAgIHJldHVybiBTdHJpbmcoYW5jaG9yLmNvb3JkcygpKTsKKyAgICAgICAgY2Fz
ZSBBbmNob3JIcmVmOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYW5jaG9yLmhyZWYoKSk7Cisg
ICAgICAgIGNhc2UgQW5jaG9ySHJlZkxhbmc6ICAgICAgICByZXR1cm4gU3RyaW5nKGFuY2hvci5o
cmVmbGFuZygpKTsKKyAgICAgICAgY2FzZSBBbmNob3JIYXNoOiAgICAgICAgICAgIHJldHVybiBT
dHJpbmcoJyMnK0tVUkwoYW5jaG9yLmhyZWYoKS5zdHJpbmcoKSkucmVmKCkpOworICAgICAgICBj
YXNlIEFuY2hvckhvc3Q6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhLVVJMKGFuY2hvci5ocmVm
KCkuc3RyaW5nKCkpLmhvc3QoKSk7CisgICAgICAgIGNhc2UgQW5jaG9ySG9zdG5hbWU6IHsKKyAg
ICAgICAgICAgIEtVUkwgdXJsKGFuY2hvci5ocmVmKCkuc3RyaW5nKCkpOworICAgICAgICAgICAg
a2REZWJ1Zyg2MDcwKSA8PCAiYW5jaG9yOjpob3N0bmFtZSB1c2VzOiIgPDx1cmwudXJsKCk8PGVu
ZGw7CisgICAgICAgICAgICBpZiAodXJsLnBvcnQoKT09MCkKKyAgICAgICAgICAgICAgICByZXR1
cm4gU3RyaW5nKHVybC5ob3N0KCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IHJldHVybiBTdHJpbmcodXJsLmhvc3QoKSArICI6IiArIFFTdHJpbmc6Om51bWJlcih1cmwucG9y
dCgpKSk7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBBbmNob3JQYXRoTmFtZTogICAgICAgIHJl
dHVybiBTdHJpbmcoS1VSTChhbmNob3IuaHJlZigpLnN0cmluZygpKS5wYXRoKCkpOworICAgICAg
ICBjYXNlIEFuY2hvclBvcnQ6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhRU3RyaW5nOjpudW1i
ZXIoS1VSTChhbmNob3IuaHJlZigpLnN0cmluZygpKS5wb3J0KCkpKTsKKyAgICAgICAgY2FzZSBB
bmNob3JQcm90b2NvbDogICAgICAgIHJldHVybiBTdHJpbmcoS1VSTChhbmNob3IuaHJlZigpLnN0
cmluZygpKS5wcm90b2NvbCgpKyI6Iik7CisgICAgICAgIGNhc2UgQW5jaG9yU2VhcmNoOiAgICAg
ICAgICByZXR1cm4gU3RyaW5nKEtVUkwoYW5jaG9yLmhyZWYoKS5zdHJpbmcoKSkucXVlcnkoKSk7
CisgICAgICAgIGNhc2UgQW5jaG9yTmFtZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGFuY2hv
ci5uYW1lKCkpOworICAgICAgICBjYXNlIEFuY2hvclJlbDogICAgICAgICAgICAgcmV0dXJuIFN0
cmluZyhhbmNob3IucmVsKCkpOworICAgICAgICBjYXNlIEFuY2hvclJldjogICAgICAgICAgICAg
cmV0dXJuIFN0cmluZyhhbmNob3IucmV2KCkpOworICAgICAgICBjYXNlIEFuY2hvclNoYXBlOiAg
ICAgICAgICAgcmV0dXJuIFN0cmluZyhhbmNob3Iuc2hhcGUoKSk7CisgICAgICAgIGNhc2UgQW5j
aG9yVGFiSW5kZXg6ICAgICAgICByZXR1cm4gTnVtYmVyKGFuY2hvci50YWJJbmRleCgpKTsKKyAg
ICAgICAgY2FzZSBBbmNob3JUYXJnZXQ6ICAgICAgICAgIHJldHVybiBTdHJpbmcoYW5jaG9yLnRh
cmdldCgpKTsKKyAgICAgICAgY2FzZSBBbmNob3JUeXBlOiAgICAgICAgICAgIHJldHVybiBTdHJp
bmcoYW5jaG9yLnR5cGUoKSk7CisgICAgICAgIGNhc2UgQW5jaG9yVGV4dDoKKyAgICAgICAgICAg
IGlmIChEb2N1bWVudEltcGwqIGRvYyA9IGFuY2hvci5nZXREb2N1bWVudCgpKQorICAgICAgICAg
ICAgICAgIGRvYy0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CisgICAg
ICAgICAgICByZXR1cm4gU3RyaW5nKGFuY2hvci5pbm5lclRleHQoKSk7CiAgICAgfQotICB9Ci0g
IGJyZWFrOwotICBjYXNlIElEX0JBU0VGT05UOiB7Ci0gICAgSFRNTEJhc2VGb250RWxlbWVudElt
cGwgJmJhc2VGb250ID0gc3RhdGljX2Nhc3Q8SFRNTEJhc2VGb250RWxlbWVudEltcGwgJj4oZWxl
bWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgQmFzZUZvbnRDb2xvcjogICAg
ICAgICAgIHJldHVybiBTdHJpbmcoYmFzZUZvbnQuY29sb3IoKSk7Ci0gICAgY2FzZSBCYXNlRm9u
dEZhY2U6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhiYXNlRm9udC5mYWNlKCkpOwotICAgIGNh
c2UgQmFzZUZvbnRTaXplOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYmFzZUZvbnQuc2l6ZSgp
KTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50OjppbWFn
ZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MSW1h
Z2VFbGVtZW50SW1wbCYgaW1hZ2UgPSAqc3RhdGljX2Nhc3Q8SFRNTEltYWdlRWxlbWVudEltcGwq
PihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBJbWFnZU5hbWU6
ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpbWFnZS5uYW1lKCkpOworICAgICAgICBjYXNlIElt
YWdlQWxpZ246ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGltYWdlLmFsaWduKCkpOworICAgICAg
ICBjYXNlIEltYWdlQWx0OiAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGltYWdlLmFsdCgpKTsK
KyAgICAgICAgY2FzZSBJbWFnZUJvcmRlcjogICAgICAgICAgcmV0dXJuIE51bWJlcihpbWFnZS5i
b3JkZXIoKSk7CisgICAgICAgIGNhc2UgSW1hZ2VIZWlnaHQ6ICAgICAgICAgIHJldHVybiBOdW1i
ZXIoaW1hZ2UuaGVpZ2h0KHRydWUpKTsKKyAgICAgICAgY2FzZSBJbWFnZUhzcGFjZTogICAgICAg
ICAgcmV0dXJuIE51bWJlcihpbWFnZS5oc3BhY2UoKSk7CisgICAgICAgIGNhc2UgSW1hZ2VJc01h
cDogICAgICAgICAgIHJldHVybiBCb29sZWFuKGltYWdlLmlzTWFwKCkpOworICAgICAgICBjYXNl
IEltYWdlTG9uZ0Rlc2M6ICAgICAgICByZXR1cm4gU3RyaW5nKGltYWdlLmxvbmdEZXNjKCkpOwor
ICAgICAgICBjYXNlIEltYWdlU3JjOiAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGltYWdlLnNy
YygpKTsKKyAgICAgICAgY2FzZSBJbWFnZVVzZU1hcDogICAgICAgICAgcmV0dXJuIFN0cmluZyhp
bWFnZS51c2VNYXAoKSk7CisgICAgICAgIGNhc2UgSW1hZ2VWc3BhY2U6ICAgICAgICAgIHJldHVy
biBOdW1iZXIoaW1hZ2UudnNwYWNlKCkpOworICAgICAgICBjYXNlIEltYWdlV2lkdGg6ICAgICAg
ICAgICByZXR1cm4gTnVtYmVyKGltYWdlLndpZHRoKHRydWUpKTsKKyAgICAgICAgY2FzZSBJbWFn
ZVg6ICAgICAgICAgICAgICAgcmV0dXJuIE51bWJlcihpbWFnZS54KCkpOworICAgICAgICBjYXNl
IEltYWdlWTogICAgICAgICAgICAgICByZXR1cm4gTnVtYmVyKGltYWdlLnkoKSk7CiAgICAgfQot
ICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX0ZPTlQ6IHsKLSAgICBIVE1MRm9udEVsZW1lbnRJbXBs
ICZmb250ID0gc3RhdGljX2Nhc3Q8SFRNTEZvbnRFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAg
ICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBGb250Q29sb3I6ICAgICAgICAgICByZXR1cm4g
U3RyaW5nKGZvbnQuY29sb3IoKSk7Ci0gICAgY2FzZSBGb250RmFjZTogICAgICAgICAgICByZXR1
cm4gU3RyaW5nKGZvbnQuZmFjZSgpKTsKLSAgICBjYXNlIEZvbnRTaXplOiAgICAgICAgICAgIHJl
dHVybiBTdHJpbmcoZm9udC5zaXplKCkpOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKwor
VmFsdWUgSFRNTEVsZW1lbnQ6Om9iamVjdEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tl
bikgY29uc3QKK3sKKyAgICBIVE1MT2JqZWN0RWxlbWVudEltcGwmIG9iamVjdCA9ICpzdGF0aWNf
Y2FzdDxIVE1MT2JqZWN0RWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4p
IHsKKyAgICAgICAgY2FzZSBPYmplY3RGb3JtOiAgICAgICAgICAgIHJldHVybiBnZXRET01Ob2Rl
KGV4ZWMsb2JqZWN0LmZvcm0oKSk7IC8vIHR5cGUgSFRNTEZvcm1FbGVtZW50CisgICAgICAgIGNh
c2UgT2JqZWN0Q29kZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKG9iamVjdC5jb2RlKCkpOwor
ICAgICAgICBjYXNlIE9iamVjdEFsaWduOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3Qu
YWxpZ24oKSk7CisgICAgICAgIGNhc2UgT2JqZWN0QXJjaGl2ZTogICAgICAgICByZXR1cm4gU3Ry
aW5nKG9iamVjdC5hcmNoaXZlKCkpOworICAgICAgICBjYXNlIE9iamVjdEJvcmRlcjogICAgICAg
ICAgcmV0dXJuIFN0cmluZyhvYmplY3QuYm9yZGVyKCkpOworICAgICAgICBjYXNlIE9iamVjdENv
ZGVCYXNlOiAgICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3QuY29kZUJhc2UoKSk7CisgICAgICAg
IGNhc2UgT2JqZWN0Q29kZVR5cGU6ICAgICAgICByZXR1cm4gU3RyaW5nKG9iamVjdC5jb2RlVHlw
ZSgpKTsKKyAgICAgICAgY2FzZSBPYmplY3RDb250ZW50RG9jdW1lbnQ6IHJldHVybiBjaGVja05v
ZGVTZWN1cml0eShleGVjLG9iamVjdC5jb250ZW50RG9jdW1lbnQoKSkgPyAKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRET01Ob2RlKGV4ZWMsIG9iamVjdC5j
b250ZW50RG9jdW1lbnQoKSkgOiBVbmRlZmluZWQoKTsKKyAgICAgICAgY2FzZSBPYmplY3REYXRh
OiAgICAgICAgICAgIHJldHVybiBTdHJpbmcob2JqZWN0LmRhdGEoKSk7CisgICAgICAgIGNhc2Ug
T2JqZWN0RGVjbGFyZTogICAgICAgICByZXR1cm4gQm9vbGVhbihvYmplY3QuZGVjbGFyZSgpKTsK
KyAgICAgICAgY2FzZSBPYmplY3RIZWlnaHQ6ICAgICAgICAgIHJldHVybiBTdHJpbmcob2JqZWN0
LmhlaWdodCgpKTsKKyAgICAgICAgY2FzZSBPYmplY3RIc3BhY2U6ICAgICAgICAgIHJldHVybiBT
dHJpbmcob2JqZWN0LmhzcGFjZSgpKTsKKyAgICAgICAgY2FzZSBPYmplY3ROYW1lOiAgICAgICAg
ICAgIHJldHVybiBTdHJpbmcob2JqZWN0Lm5hbWUoKSk7CisgICAgICAgIGNhc2UgT2JqZWN0U3Rh
bmRieTogICAgICAgICByZXR1cm4gU3RyaW5nKG9iamVjdC5zdGFuZGJ5KCkpOworICAgICAgICBj
YXNlIE9iamVjdFRhYkluZGV4OiAgICAgICAgcmV0dXJuIE51bWJlcihvYmplY3QudGFiSW5kZXgo
KSk7CisgICAgICAgIGNhc2UgT2JqZWN0VHlwZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKG9i
amVjdC50eXBlKCkpOworICAgICAgICBjYXNlIE9iamVjdFVzZU1hcDogICAgICAgICAgcmV0dXJu
IFN0cmluZyhvYmplY3QudXNlTWFwKCkpOworICAgICAgICBjYXNlIE9iamVjdFZzcGFjZTogICAg
ICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3QudnNwYWNlKCkpOworICAgICAgICBjYXNlIE9iamVj
dFdpZHRoOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3Qud2lkdGgoKSk7CiAgICAgfQot
ICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX0hSOiB7Ci0gICAgSFRNTEhSRWxlbWVudEltcGwgJmhy
ID0gc3RhdGljX2Nhc3Q8SFRNTEhSRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgc3dpdGNo
ICh0b2tlbikgewotICAgIGNhc2UgSFJBbGlnbjogICAgICAgICAgIHJldHVybiBTdHJpbmcoaHIu
YWxpZ24oKSk7Ci0gICAgY2FzZSBIUk5vU2hhZGU6ICAgICAgICAgcmV0dXJuIEJvb2xlYW4oaHIu
bm9TaGFkZSgpKTsKLSAgICBjYXNlIEhSU2l6ZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGhy
LnNpemUoKSk7Ci0gICAgY2FzZSBIUldpZHRoOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhoci53
aWR0aCgpKTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50
OjpwYXJhbUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBI
VE1MUGFyYW1FbGVtZW50SW1wbCYgcGFyYW0gPSAqc3RhdGljX2Nhc3Q8SFRNTFBhcmFtRWxlbWVu
dEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBQYXJh
bU5hbWU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhwYXJhbS5uYW1lKCkpOworICAgICAgICBj
YXNlIFBhcmFtVHlwZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKHBhcmFtLnR5cGUoKSk7Cisg
ICAgICAgIGNhc2UgUGFyYW1WYWx1ZTogICAgICAgICAgIHJldHVybiBTdHJpbmcocGFyYW0udmFs
dWUoKSk7CisgICAgICAgIGNhc2UgUGFyYW1WYWx1ZVR5cGU6ICAgICAgIHJldHVybiBTdHJpbmco
cGFyYW0udmFsdWVUeXBlKCkpOwogICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9JTlM6
Ci0gIGNhc2UgSURfREVMOiB7Ci0gICAgSFRNTE1vZEVsZW1lbnRJbXBsICZtb2QgPSBzdGF0aWNf
Y2FzdDxIVE1MTW9kRWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgcmV0dXJuIFVuZGVmaW5l
ZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6YXBwbGV0R2V0dGVyKEV4ZWNTdGF0ZSogZXhl
YywgaW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxBcHBsZXRFbGVtZW50SW1wbCYgYXBwbGV0
ID0gKnN0YXRpY19jYXN0PEhUTUxBcHBsZXRFbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dp
dGNoICh0b2tlbikgewotICAgIGNhc2UgTW9kQ2l0ZTogICAgICAgICAgICByZXR1cm4gU3RyaW5n
KG1vZC5jaXRlKCkpOwotICAgIGNhc2UgTW9kRGF0ZVRpbWU6ICAgICAgICByZXR1cm4gU3RyaW5n
KG1vZC5kYXRlVGltZSgpKTsKKyAgICAgICAgY2FzZSBBcHBsZXRBbGlnbjogICAgICAgICAgIHJl
dHVybiBTdHJpbmcoYXBwbGV0LmFsaWduKCkpOworICAgICAgICBjYXNlIEFwcGxldEFsdDogICAg
ICAgICAgICAgcmV0dXJuIFN0cmluZyhhcHBsZXQuYWx0KCkpOworICAgICAgICBjYXNlIEFwcGxl
dEFyY2hpdmU6ICAgICAgICAgcmV0dXJuIFN0cmluZyhhcHBsZXQuYXJjaGl2ZSgpKTsKKyAgICAg
ICAgY2FzZSBBcHBsZXRDb2RlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYXBwbGV0LmNvZGUo
KSk7CisgICAgICAgIGNhc2UgQXBwbGV0Q29kZUJhc2U6ICAgICAgICByZXR1cm4gU3RyaW5nKGFw
cGxldC5jb2RlQmFzZSgpKTsKKyAgICAgICAgY2FzZSBBcHBsZXRIZWlnaHQ6ICAgICAgICAgIHJl
dHVybiBTdHJpbmcoYXBwbGV0LmhlaWdodCgpKTsKKyAgICAgICAgY2FzZSBBcHBsZXRIc3BhY2U6
ICAgICAgICAgIHJldHVybiBTdHJpbmcoYXBwbGV0LmhzcGFjZSgpKTsKKyAgICAgICAgY2FzZSBB
cHBsZXROYW1lOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYXBwbGV0Lm5hbWUoKSk7CisgICAg
ICAgIGNhc2UgQXBwbGV0T2JqZWN0OiAgICAgICAgICByZXR1cm4gU3RyaW5nKGFwcGxldC5vYmpl
Y3QoKSk7CisgICAgICAgIGNhc2UgQXBwbGV0VnNwYWNlOiAgICAgICAgICByZXR1cm4gU3RyaW5n
KGFwcGxldC52c3BhY2UoKSk7CisgICAgICAgIGNhc2UgQXBwbGV0V2lkdGg6ICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKGFwcGxldC53aWR0aCgpKTsKICAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNh
c2UgSURfQTogewotICAgIEhUTUxBbmNob3JFbGVtZW50SW1wbCAmYW5jaG9yID0gc3RhdGljX2Nh
c3Q8SFRNTEFuY2hvckVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgIHN3aXRjaCAodG9rZW4p
IHsKLSAgICBjYXNlIEFuY2hvckFjY2Vzc0tleTogICAgICAgcmV0dXJuIFN0cmluZyhhbmNob3Iu
YWNjZXNzS2V5KCkpOwotICAgIGNhc2UgQW5jaG9yQ2hhcnNldDogICAgICAgICByZXR1cm4gU3Ry
aW5nKGFuY2hvci5jaGFyc2V0KCkpOwotICAgIGNhc2UgQW5jaG9yQ29vcmRzOiAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKGFuY2hvci5jb29yZHMoKSk7Ci0gICAgY2FzZSBBbmNob3JIcmVmOiAgICAg
ICAgICAgIHJldHVybiBTdHJpbmcoYW5jaG9yLmhyZWYoKSk7Ci0gICAgY2FzZSBBbmNob3JIcmVm
TGFuZzogICAgICAgIHJldHVybiBTdHJpbmcoYW5jaG9yLmhyZWZsYW5nKCkpOwotICAgIGNhc2Ug
QW5jaG9ySGFzaDogICAgICAgICAgICByZXR1cm4gU3RyaW5nKCcjJytLVVJMKGFuY2hvci5ocmVm
KCkuc3RyaW5nKCkpLnJlZigpKTsKLSAgICBjYXNlIEFuY2hvckhvc3Q6ICAgICAgICAgICAgcmV0
dXJuIFN0cmluZyhLVVJMKGFuY2hvci5ocmVmKCkuc3RyaW5nKCkpLmhvc3QoKSk7Ci0gICAgY2Fz
ZSBBbmNob3JIb3N0bmFtZTogewotICAgICAgS1VSTCB1cmwoYW5jaG9yLmhyZWYoKS5zdHJpbmco
KSk7Ci0gICAgICBrZERlYnVnKDYwNzApIDw8ICJhbmNob3I6Omhvc3RuYW1lIHVzZXM6IiA8PHVy
bC51cmwoKTw8ZW5kbDsKLSAgICAgIGlmICh1cmwucG9ydCgpPT0wKQotICAgICAgICByZXR1cm4g
U3RyaW5nKHVybC5ob3N0KCkpOwotICAgICAgZWxzZQotICAgICAgICByZXR1cm4gU3RyaW5nKHVy
bC5ob3N0KCkgKyAiOiIgKyBRU3RyaW5nOjpudW1iZXIodXJsLnBvcnQoKSkpOwotICAgIH0KLSAg
ICBjYXNlIEFuY2hvclBhdGhOYW1lOiAgICAgICAgcmV0dXJuIFN0cmluZyhLVVJMKGFuY2hvci5o
cmVmKCkuc3RyaW5nKCkpLnBhdGgoKSk7Ci0gICAgY2FzZSBBbmNob3JQb3J0OiAgICAgICAgICAg
IHJldHVybiBTdHJpbmcoUVN0cmluZzo6bnVtYmVyKEtVUkwoYW5jaG9yLmhyZWYoKS5zdHJpbmco
KSkucG9ydCgpKSk7Ci0gICAgY2FzZSBBbmNob3JQcm90b2NvbDogICAgICAgIHJldHVybiBTdHJp
bmcoS1VSTChhbmNob3IuaHJlZigpLnN0cmluZygpKS5wcm90b2NvbCgpKyI6Iik7Ci0gICAgY2Fz
ZSBBbmNob3JTZWFyY2g6ICAgICAgICAgIHJldHVybiBTdHJpbmcoS1VSTChhbmNob3IuaHJlZigp
LnN0cmluZygpKS5xdWVyeSgpKTsKLSAgICBjYXNlIEFuY2hvck5hbWU6ICAgICAgICAgICAgcmV0
dXJuIFN0cmluZyhhbmNob3IubmFtZSgpKTsKLSAgICBjYXNlIEFuY2hvclJlbDogICAgICAgICAg
ICAgcmV0dXJuIFN0cmluZyhhbmNob3IucmVsKCkpOwotICAgIGNhc2UgQW5jaG9yUmV2OiAgICAg
ICAgICAgICByZXR1cm4gU3RyaW5nKGFuY2hvci5yZXYoKSk7Ci0gICAgY2FzZSBBbmNob3JTaGFw
ZTogICAgICAgICAgIHJldHVybiBTdHJpbmcoYW5jaG9yLnNoYXBlKCkpOwotICAgIGNhc2UgQW5j
aG9yVGFiSW5kZXg6ICAgICAgICByZXR1cm4gTnVtYmVyKGFuY2hvci50YWJJbmRleCgpKTsKLSAg
ICBjYXNlIEFuY2hvclRhcmdldDogICAgICAgICAgcmV0dXJuIFN0cmluZyhhbmNob3IudGFyZ2V0
KCkpOwotICAgIGNhc2UgQW5jaG9yVHlwZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGFuY2hv
ci50eXBlKCkpOwotICAgIGNhc2UgQW5jaG9yVGV4dDoKLSAgICAgIGlmIChEb2N1bWVudEltcGwq
IGRvYyA9IGFuY2hvci5nZXREb2N1bWVudCgpKQotICAgICAgICBkb2MtPnVwZGF0ZUxheW91dEln
bm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwotICAgICAgcmV0dXJuIFN0cmluZyhhbmNob3IuaW5u
ZXJUZXh0KCkpOwotICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9JTUc6IHsKLSAgICBI
VE1MSW1hZ2VFbGVtZW50SW1wbCAmaW1hZ2UgPSBzdGF0aWNfY2FzdDxIVE1MSW1hZ2VFbGVtZW50
SW1wbCAmPihlbGVtZW50KTsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBJbWFnZU5h
bWU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpbWFnZS5uYW1lKCkpOwotICAgIGNhc2UgSW1h
Z2VBbGlnbjogICAgICAgICAgIHJldHVybiBTdHJpbmcoaW1hZ2UuYWxpZ24oKSk7Ci0gICAgY2Fz
ZSBJbWFnZUFsdDogICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpbWFnZS5hbHQoKSk7Ci0gICAg
Y2FzZSBJbWFnZUJvcmRlcjogICAgICAgICAgcmV0dXJuIE51bWJlcihpbWFnZS5ib3JkZXIoKSk7
Ci0gICAgY2FzZSBJbWFnZUhlaWdodDogICAgICAgICAgcmV0dXJuIE51bWJlcihpbWFnZS5oZWln
aHQodHJ1ZSkpOwotICAgIGNhc2UgSW1hZ2VIc3BhY2U6ICAgICAgICAgIHJldHVybiBOdW1iZXIo
aW1hZ2UuaHNwYWNlKCkpOwotICAgIGNhc2UgSW1hZ2VJc01hcDogICAgICAgICAgIHJldHVybiBC
b29sZWFuKGltYWdlLmlzTWFwKCkpOwotICAgIGNhc2UgSW1hZ2VMb25nRGVzYzogICAgICAgIHJl
dHVybiBTdHJpbmcoaW1hZ2UubG9uZ0Rlc2MoKSk7Ci0gICAgY2FzZSBJbWFnZVNyYzogICAgICAg
ICAgICAgcmV0dXJuIFN0cmluZyhpbWFnZS5zcmMoKSk7Ci0gICAgY2FzZSBJbWFnZVVzZU1hcDog
ICAgICAgICAgcmV0dXJuIFN0cmluZyhpbWFnZS51c2VNYXAoKSk7Ci0gICAgY2FzZSBJbWFnZVZz
cGFjZTogICAgICAgICAgcmV0dXJuIE51bWJlcihpbWFnZS52c3BhY2UoKSk7Ci0gICAgY2FzZSBJ
bWFnZVdpZHRoOiAgICAgICAgICAgcmV0dXJuIE51bWJlcihpbWFnZS53aWR0aCh0cnVlKSk7Ci0g
ICAgY2FzZSBJbWFnZVg6ICAgICAgICAgICAgICAgcmV0dXJuIE51bWJlcihpbWFnZS54KCkpOwot
ICAgIGNhc2UgSW1hZ2VZOiAgICAgICAgICAgICAgIHJldHVybiBOdW1iZXIoaW1hZ2UueSgpKTsK
LSAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfT0JKRUNUOiB7Ci0gICAgSFRNTE9iamVj
dEVsZW1lbnRJbXBsICZvYmplY3QgPSBzdGF0aWNfY2FzdDxIVE1MT2JqZWN0RWxlbWVudEltcGwg
Jj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgT2JqZWN0Rm9ybTog
ICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLG9iamVjdC5mb3JtKCkpOyAvLyB0eXBl
IEhUTUxGb3JtRWxlbWVudAotICAgIGNhc2UgT2JqZWN0Q29kZTogICAgICAgICAgICByZXR1cm4g
U3RyaW5nKG9iamVjdC5jb2RlKCkpOwotICAgIGNhc2UgT2JqZWN0QWxpZ246ICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKG9iamVjdC5hbGlnbigpKTsKLSAgICBjYXNlIE9iamVjdEFyY2hpdmU6ICAg
ICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3QuYXJjaGl2ZSgpKTsKLSAgICBjYXNlIE9iamVjdEJv
cmRlcjogICAgICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3QuYm9yZGVyKCkpOwotICAgIGNhc2Ug
T2JqZWN0Q29kZUJhc2U6ICAgICAgICByZXR1cm4gU3RyaW5nKG9iamVjdC5jb2RlQmFzZSgpKTsK
LSAgICBjYXNlIE9iamVjdENvZGVUeXBlOiAgICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3QuY29k
ZVR5cGUoKSk7Ci0gICAgY2FzZSBPYmplY3RDb250ZW50RG9jdW1lbnQ6IHJldHVybiBjaGVja05v
ZGVTZWN1cml0eShleGVjLG9iamVjdC5jb250ZW50RG9jdW1lbnQoKSkgPyAKLQkJCQkgICAgICAg
Z2V0RE9NTm9kZShleGVjLCBvYmplY3QuY29udGVudERvY3VtZW50KCkpIDogVW5kZWZpbmVkKCk7
Ci0gICAgY2FzZSBPYmplY3REYXRhOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcob2JqZWN0LmRh
dGEoKSk7Ci0gICAgY2FzZSBPYmplY3REZWNsYXJlOiAgICAgICAgIHJldHVybiBCb29sZWFuKG9i
amVjdC5kZWNsYXJlKCkpOwotICAgIGNhc2UgT2JqZWN0SGVpZ2h0OiAgICAgICAgICByZXR1cm4g
U3RyaW5nKG9iamVjdC5oZWlnaHQoKSk7Ci0gICAgY2FzZSBPYmplY3RIc3BhY2U6ICAgICAgICAg
IHJldHVybiBTdHJpbmcob2JqZWN0LmhzcGFjZSgpKTsKLSAgICBjYXNlIE9iamVjdE5hbWU6ICAg
ICAgICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3QubmFtZSgpKTsKLSAgICBjYXNlIE9iamVjdFN0
YW5kYnk6ICAgICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3Quc3RhbmRieSgpKTsKLSAgICBjYXNl
IE9iamVjdFRhYkluZGV4OiAgICAgICAgcmV0dXJuIE51bWJlcihvYmplY3QudGFiSW5kZXgoKSk7
Ci0gICAgY2FzZSBPYmplY3RUeXBlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcob2JqZWN0LnR5
cGUoKSk7Ci0gICAgY2FzZSBPYmplY3RVc2VNYXA6ICAgICAgICAgIHJldHVybiBTdHJpbmcob2Jq
ZWN0LnVzZU1hcCgpKTsKLSAgICBjYXNlIE9iamVjdFZzcGFjZTogICAgICAgICAgcmV0dXJuIFN0
cmluZyhvYmplY3QudnNwYWNlKCkpOwotICAgIGNhc2UgT2JqZWN0V2lkdGg6ICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKG9iamVjdC53aWR0aCgpKTsKLSAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNh
c2UgSURfUEFSQU06IHsKLSAgICBIVE1MUGFyYW1FbGVtZW50SW1wbCAmcGFyYW0gPSBzdGF0aWNf
Y2FzdDxIVE1MUGFyYW1FbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICBzd2l0Y2ggKHRva2Vu
KSB7Ci0gICAgY2FzZSBQYXJhbU5hbWU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhwYXJhbS5u
YW1lKCkpOwotICAgIGNhc2UgUGFyYW1UeXBlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcocGFy
YW0udHlwZSgpKTsKLSAgICBjYXNlIFBhcmFtVmFsdWU6ICAgICAgICAgICByZXR1cm4gU3RyaW5n
KHBhcmFtLnZhbHVlKCkpOwotICAgIGNhc2UgUGFyYW1WYWx1ZVR5cGU6ICAgICAgIHJldHVybiBT
dHJpbmcocGFyYW0udmFsdWVUeXBlKCkpOwotICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJ
RF9BUFBMRVQ6IHsKLSAgICBIVE1MQXBwbGV0RWxlbWVudEltcGwgJmFwcGxldCA9IHN0YXRpY19j
YXN0PEhUTUxBcHBsZXRFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICBzd2l0Y2ggKHRva2Vu
KSB7Ci0gICAgY2FzZSBBcHBsZXRBbGlnbjogICAgICAgICAgIHJldHVybiBTdHJpbmcoYXBwbGV0
LmFsaWduKCkpOwotICAgIGNhc2UgQXBwbGV0QWx0OiAgICAgICAgICAgICByZXR1cm4gU3RyaW5n
KGFwcGxldC5hbHQoKSk7Ci0gICAgY2FzZSBBcHBsZXRBcmNoaXZlOiAgICAgICAgIHJldHVybiBT
dHJpbmcoYXBwbGV0LmFyY2hpdmUoKSk7Ci0gICAgY2FzZSBBcHBsZXRDb2RlOiAgICAgICAgICAg
IHJldHVybiBTdHJpbmcoYXBwbGV0LmNvZGUoKSk7Ci0gICAgY2FzZSBBcHBsZXRDb2RlQmFzZTog
ICAgICAgIHJldHVybiBTdHJpbmcoYXBwbGV0LmNvZGVCYXNlKCkpOwotICAgIGNhc2UgQXBwbGV0
SGVpZ2h0OiAgICAgICAgICByZXR1cm4gU3RyaW5nKGFwcGxldC5oZWlnaHQoKSk7Ci0gICAgY2Fz
ZSBBcHBsZXRIc3BhY2U6ICAgICAgICAgIHJldHVybiBTdHJpbmcoYXBwbGV0LmhzcGFjZSgpKTsK
LSAgICBjYXNlIEFwcGxldE5hbWU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhhcHBsZXQubmFt
ZSgpKTsKLSAgICBjYXNlIEFwcGxldE9iamVjdDogICAgICAgICAgcmV0dXJuIFN0cmluZyhhcHBs
ZXQub2JqZWN0KCkpOwotICAgIGNhc2UgQXBwbGV0VnNwYWNlOiAgICAgICAgICByZXR1cm4gU3Ry
aW5nKGFwcGxldC52c3BhY2UoKSk7Ci0gICAgY2FzZSBBcHBsZXRXaWR0aDogICAgICAgICAgIHJl
dHVybiBTdHJpbmcoYXBwbGV0LndpZHRoKCkpOwotICAgIH0KLSAgfQotICBicmVhazsKLSAgY2Fz
ZSBJRF9NQVA6IHsKLSAgICBIVE1MTWFwRWxlbWVudEltcGwgJm1hcCA9IHN0YXRpY19jYXN0PEhU
TUxNYXBFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9
CisKK1ZhbHVlIEhUTUxFbGVtZW50OjptYXBHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0Cit7CisgICAgSFRNTE1hcEVsZW1lbnRJbXBsJiBtYXAgPSAqc3RhdGljX2Nhc3Q8
SFRNTE1hcEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAg
Y2FzZSBNYXBBcmVhczogICAgICAgICAgIHJldHVybiBnZXRIVE1MQ29sbGVjdGlvbihleGVjLCBt
YXAuYXJlYXMoKS5nZXQoKSk7IC8vIHR5cGUgSFRNTENvbGxlY3Rpb24KLSAgICBjYXNlIE1hcE5h
bWU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhtYXAubmFtZSgpKTsKLSAgICB9Ci0gIH0KLSAg
YnJlYWs7Ci0gIGNhc2UgSURfQVJFQTogewotICAgIEhUTUxBcmVhRWxlbWVudEltcGwgJmFyZWEg
PSBzdGF0aWNfY2FzdDxIVE1MQXJlYUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgIHN3aXRj
aCAodG9rZW4pIHsKLSAgICBjYXNlIEFyZWFBY2Nlc3NLZXk6ICAgICAgIHJldHVybiBTdHJpbmco
YXJlYS5hY2Nlc3NLZXkoKSk7Ci0gICAgY2FzZSBBcmVhQWx0OiAgICAgICAgICAgICByZXR1cm4g
U3RyaW5nKGFyZWEuYWx0KCkpOwotICAgIGNhc2UgQXJlYUNvb3JkczogICAgICAgICAgcmV0dXJu
IFN0cmluZyhhcmVhLmNvb3JkcygpKTsKLSAgICBjYXNlIEFyZWFIcmVmOiAgICAgICAgICAgIHJl
dHVybiBTdHJpbmcoYXJlYS5ocmVmKCkpOwotICAgIGNhc2UgQXJlYUhhc2g6ICAgICAgICAgICAg
cmV0dXJuIFN0cmluZygnIycrS1VSTChhcmVhLmhyZWYoKS5zdHJpbmcoKSkucmVmKCkpOwotICAg
IGNhc2UgQXJlYUhvc3Q6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhLVVJMKGFyZWEuaHJlZigp
LnN0cmluZygpKS5ob3N0KCkpOwotICAgIGNhc2UgQXJlYUhvc3ROYW1lOiB7Ci0gICAgICBLVVJM
IHVybChhcmVhLmhyZWYoKS5zdHJpbmcoKSk7Ci0gICAgICBrZERlYnVnKDYwNzApIDw8ICJsaW5r
Ojpob3N0bmFtZSB1c2VzOiIgPDx1cmwudXJsKCk8PGVuZGw7Ci0gICAgICBpZiAodXJsLnBvcnQo
KT09MCkKLSAgICAgICAgcmV0dXJuIFN0cmluZyh1cmwuaG9zdCgpKTsKLSAgICAgIGVsc2UKLSAg
ICAgICAgcmV0dXJuIFN0cmluZyh1cmwuaG9zdCgpICsgIjoiICsgUVN0cmluZzo6bnVtYmVyKHVy
bC5wb3J0KCkpKTsKKyAgICAgICAgY2FzZSBNYXBBcmVhczogICAgICAgICAgIHJldHVybiBnZXRI
VE1MQ29sbGVjdGlvbihleGVjLCBtYXAuYXJlYXMoKS5nZXQoKSk7IC8vIHR5cGUgSFRNTENvbGxl
Y3Rpb24KKyAgICAgICAgY2FzZSBNYXBOYW1lOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcobWFw
Lm5hbWUoKSk7CiAgICAgfQotICAgIGNhc2UgQXJlYVBhdGhOYW1lOiAgICAgICAgcmV0dXJuIFN0
cmluZyhLVVJMKGFyZWEuaHJlZigpLnN0cmluZygpKS5wYXRoKCkpOwotICAgIGNhc2UgQXJlYVBv
cnQ6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhRU3RyaW5nOjpudW1iZXIoS1VSTChhcmVhLmhy
ZWYoKS5zdHJpbmcoKSkucG9ydCgpKSk7Ci0gICAgY2FzZSBBcmVhUHJvdG9jb2w6ICAgICAgICBy
ZXR1cm4gU3RyaW5nKEtVUkwoYXJlYS5ocmVmKCkuc3RyaW5nKCkpLnByb3RvY29sKCkrIjoiKTsK
LSAgICBjYXNlIEFyZWFTZWFyY2g6ICAgICAgICAgIHJldHVybiBTdHJpbmcoS1VSTChhcmVhLmhy
ZWYoKS5zdHJpbmcoKSkucXVlcnkoKSk7Ci0gICAgY2FzZSBBcmVhTm9IcmVmOiAgICAgICAgICBy
ZXR1cm4gQm9vbGVhbihhcmVhLm5vSHJlZigpKTsKLSAgICBjYXNlIEFyZWFTaGFwZTogICAgICAg
ICAgIHJldHVybiBTdHJpbmcoYXJlYS5zaGFwZSgpKTsKLSAgICBjYXNlIEFyZWFUYWJJbmRleDog
ICAgICAgIHJldHVybiBOdW1iZXIoYXJlYS50YWJJbmRleCgpKTsKLSAgICBjYXNlIEFyZWFUYXJn
ZXQ6ICAgICAgICAgIHJldHVybiBTdHJpbmcoYXJlYS50YXJnZXQoKSk7CisgICAgcmV0dXJuIFVu
ZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6YXJlYUdldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MQXJlYUVsZW1lbnRJbXBsJiBhcmVh
ID0gKnN0YXRpY19jYXN0PEhUTUxBcmVhRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRj
aCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBBcmVhQWNjZXNzS2V5OiAgICAgICByZXR1cm4gU3Ry
aW5nKGFyZWEuYWNjZXNzS2V5KCkpOworICAgICAgICBjYXNlIEFyZWFBbHQ6ICAgICAgICAgICAg
IHJldHVybiBTdHJpbmcoYXJlYS5hbHQoKSk7CisgICAgICAgIGNhc2UgQXJlYUNvb3JkczogICAg
ICAgICAgcmV0dXJuIFN0cmluZyhhcmVhLmNvb3JkcygpKTsKKyAgICAgICAgY2FzZSBBcmVhSHJl
ZjogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGFyZWEuaHJlZigpKTsKKyAgICAgICAgY2FzZSBB
cmVhSGFzaDogICAgICAgICAgICByZXR1cm4gU3RyaW5nKCcjJytLVVJMKGFyZWEuaHJlZigpLnN0
cmluZygpKS5yZWYoKSk7CisgICAgICAgIGNhc2UgQXJlYUhvc3Q6ICAgICAgICAgICAgcmV0dXJu
IFN0cmluZyhLVVJMKGFyZWEuaHJlZigpLnN0cmluZygpKS5ob3N0KCkpOworICAgICAgICBjYXNl
IEFyZWFIb3N0TmFtZTogeworICAgICAgICAgICAgS1VSTCB1cmwoYXJlYS5ocmVmKCkuc3RyaW5n
KCkpOworICAgICAgICAgICAga2REZWJ1Zyg2MDcwKSA8PCAibGluazo6aG9zdG5hbWUgdXNlczoi
IDw8dXJsLnVybCgpPDxlbmRsOworICAgICAgICAgICAgaWYgKHVybC5wb3J0KCk9PTApCisgICAg
ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh1cmwuaG9zdCgpKTsKKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKHVybC5ob3N0KCkgKyAiOiIgKyBRU3RyaW5n
OjpudW1iZXIodXJsLnBvcnQoKSkpOworICAgICAgICB9CisgICAgICAgIGNhc2UgQXJlYVBhdGhO
YW1lOiAgICAgICAgcmV0dXJuIFN0cmluZyhLVVJMKGFyZWEuaHJlZigpLnN0cmluZygpKS5wYXRo
KCkpOworICAgICAgICBjYXNlIEFyZWFQb3J0OiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoUVN0
cmluZzo6bnVtYmVyKEtVUkwoYXJlYS5ocmVmKCkuc3RyaW5nKCkpLnBvcnQoKSkpOworICAgICAg
ICBjYXNlIEFyZWFQcm90b2NvbDogICAgICAgIHJldHVybiBTdHJpbmcoS1VSTChhcmVhLmhyZWYo
KS5zdHJpbmcoKSkucHJvdG9jb2woKSsiOiIpOworICAgICAgICBjYXNlIEFyZWFTZWFyY2g6ICAg
ICAgICAgIHJldHVybiBTdHJpbmcoS1VSTChhcmVhLmhyZWYoKS5zdHJpbmcoKSkucXVlcnkoKSk7
CisgICAgICAgIGNhc2UgQXJlYU5vSHJlZjogICAgICAgICAgcmV0dXJuIEJvb2xlYW4oYXJlYS5u
b0hyZWYoKSk7CisgICAgICAgIGNhc2UgQXJlYVNoYXBlOiAgICAgICAgICAgcmV0dXJuIFN0cmlu
ZyhhcmVhLnNoYXBlKCkpOworICAgICAgICBjYXNlIEFyZWFUYWJJbmRleDogICAgICAgIHJldHVy
biBOdW1iZXIoYXJlYS50YWJJbmRleCgpKTsKKyAgICAgICAgY2FzZSBBcmVhVGFyZ2V0OiAgICAg
ICAgICByZXR1cm4gU3RyaW5nKGFyZWEudGFyZ2V0KCkpOwogICAgIH0KLSAgfQotICBicmVhazsK
LSAgY2FzZSBJRF9TQ1JJUFQ6IHsKLSAgICBIVE1MU2NyaXB0RWxlbWVudEltcGwgJnNjcmlwdCA9
IHN0YXRpY19jYXN0PEhUTUxTY3JpcHRFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICBzd2l0
Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBTY3JpcHRUZXh0OiAgICAgICAgICAgIHJldHVybiBTdHJp
bmcoc2NyaXB0LnRleHQoKSk7Ci0gICAgY2FzZSBTY3JpcHRIdG1sRm9yOiAgICAgICAgIHJldHVy
biBTdHJpbmcoc2NyaXB0Lmh0bWxGb3IoKSk7Ci0gICAgY2FzZSBTY3JpcHRFdmVudDogICAgICAg
ICAgIHJldHVybiBTdHJpbmcoc2NyaXB0LmV2ZW50KCkpOwotICAgIGNhc2UgU2NyaXB0Q2hhcnNl
dDogICAgICAgICByZXR1cm4gU3RyaW5nKHNjcmlwdC5jaGFyc2V0KCkpOwotICAgIGNhc2UgU2Ny
aXB0RGVmZXI6ICAgICAgICAgICByZXR1cm4gQm9vbGVhbihzY3JpcHQuZGVmZXIoKSk7Ci0gICAg
Y2FzZSBTY3JpcHRTcmM6ICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoc2NyaXB0LnNyYygpKTsK
LSAgICBjYXNlIFNjcmlwdFR5cGU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhzY3JpcHQudHlw
ZSgpKTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50Ojpz
Y3JpcHRHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRN
TFNjcmlwdEVsZW1lbnRJbXBsJiBzY3JpcHQgPSAqc3RhdGljX2Nhc3Q8SFRNTFNjcmlwdEVsZW1l
bnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgU2Ny
aXB0VGV4dDogICAgICAgICAgICByZXR1cm4gU3RyaW5nKHNjcmlwdC50ZXh0KCkpOworICAgICAg
ICBjYXNlIFNjcmlwdEh0bWxGb3I6ICAgICAgICAgcmV0dXJuIFN0cmluZyhzY3JpcHQuaHRtbEZv
cigpKTsKKyAgICAgICAgY2FzZSBTY3JpcHRFdmVudDogICAgICAgICAgIHJldHVybiBTdHJpbmco
c2NyaXB0LmV2ZW50KCkpOworICAgICAgICBjYXNlIFNjcmlwdENoYXJzZXQ6ICAgICAgICAgcmV0
dXJuIFN0cmluZyhzY3JpcHQuY2hhcnNldCgpKTsKKyAgICAgICAgY2FzZSBTY3JpcHREZWZlcjog
ICAgICAgICAgIHJldHVybiBCb29sZWFuKHNjcmlwdC5kZWZlcigpKTsKKyAgICAgICAgY2FzZSBT
Y3JpcHRTcmM6ICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoc2NyaXB0LnNyYygpKTsKKyAgICAg
ICAgY2FzZSBTY3JpcHRUeXBlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoc2NyaXB0LnR5cGUo
KSk7CiAgICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX1RBQkxFOiB7Ci0gICAgSFRNTFRh
YmxlRWxlbWVudEltcGwgJnRhYmxlID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlRWxlbWVudEltcGwg
Jj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgVGFibGVDYXB0aW9u
OiAgICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsdGFibGUuY2FwdGlvbigpKTsgLy8gdHlw
ZSBIVE1MVGFibGVDYXB0aW9uRWxlbWVudAotICAgIGNhc2UgVGFibGVUSGVhZDogICAgICAgICAg
IHJldHVybiBnZXRET01Ob2RlKGV4ZWMsdGFibGUudEhlYWQoKSk7IC8vIHR5cGUgSFRNTFRhYmxl
U2VjdGlvbkVsZW1lbnQKLSAgICBjYXNlIFRhYmxlVEZvb3Q6ICAgICAgICAgICByZXR1cm4gZ2V0
RE9NTm9kZShleGVjLHRhYmxlLnRGb290KCkpOyAvLyB0eXBlIEhUTUxUYWJsZVNlY3Rpb25FbGVt
ZW50Ci0gICAgY2FzZSBUYWJsZVJvd3M6ICAgICAgICAgICAgcmV0dXJuIGdldEhUTUxDb2xsZWN0
aW9uKGV4ZWMsIHRhYmxlLnJvd3MoKS5nZXQoKSk7IC8vIHR5cGUgSFRNTENvbGxlY3Rpb24KLSAg
ICBjYXNlIFRhYmxlVEJvZGllczogICAgICAgICByZXR1cm4gZ2V0SFRNTENvbGxlY3Rpb24oZXhl
YywgdGFibGUudEJvZGllcygpLmdldCgpKTsgLy8gdHlwZSBIVE1MQ29sbGVjdGlvbgotICAgIGNh
c2UgVGFibGVBbGlnbjogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGUuYWxpZ24oKSk7Ci0g
ICAgY2FzZSBUYWJsZUJnQ29sb3I6ICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZS5iZ0NvbG9y
KCkpOwotICAgIGNhc2UgVGFibGVCb3JkZXI6ICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGUu
Ym9yZGVyKCkpOwotICAgIGNhc2UgVGFibGVDZWxsUGFkZGluZzogICAgIHJldHVybiBTdHJpbmco
dGFibGUuY2VsbFBhZGRpbmcoKSk7Ci0gICAgY2FzZSBUYWJsZUNlbGxTcGFjaW5nOiAgICAgcmV0
dXJuIFN0cmluZyh0YWJsZS5jZWxsU3BhY2luZygpKTsKLSAgICBjYXNlIFRhYmxlRnJhbWU6ICAg
ICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlLmZyYW1lKCkpOwotICAgIGNhc2UgVGFibGVSdWxl
czogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGUucnVsZXMoKSk7Ci0gICAgY2FzZSBUYWJs
ZVN1bW1hcnk6ICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZS5zdW1tYXJ5KCkpOwotICAgIGNh
c2UgVGFibGVXaWR0aDogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGUud2lkdGgoKSk7Cisg
ICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6dGFibGVHZXR0
ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTFRhYmxlRWxl
bWVudEltcGwmIHRhYmxlID0gKnN0YXRpY19jYXN0PEhUTUxUYWJsZUVsZW1lbnRJbXBsKj4oaW1w
bCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgVGFibGVDYXB0aW9uOiAg
ICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsdGFibGUuY2FwdGlvbigpKTsgLy8gdHlwZSBI
VE1MVGFibGVDYXB0aW9uRWxlbWVudAorICAgICAgICBjYXNlIFRhYmxlVEhlYWQ6ICAgICAgICAg
ICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLHRhYmxlLnRIZWFkKCkpOyAvLyB0eXBlIEhUTUxUYWJs
ZVNlY3Rpb25FbGVtZW50CisgICAgICAgIGNhc2UgVGFibGVURm9vdDogICAgICAgICAgIHJldHVy
biBnZXRET01Ob2RlKGV4ZWMsdGFibGUudEZvb3QoKSk7IC8vIHR5cGUgSFRNTFRhYmxlU2VjdGlv
bkVsZW1lbnQKKyAgICAgICAgY2FzZSBUYWJsZVJvd3M6ICAgICAgICAgICAgcmV0dXJuIGdldEhU
TUxDb2xsZWN0aW9uKGV4ZWMsIHRhYmxlLnJvd3MoKS5nZXQoKSk7IC8vIHR5cGUgSFRNTENvbGxl
Y3Rpb24KKyAgICAgICAgY2FzZSBUYWJsZVRCb2RpZXM6ICAgICAgICAgcmV0dXJuIGdldEhUTUxD
b2xsZWN0aW9uKGV4ZWMsIHRhYmxlLnRCb2RpZXMoKS5nZXQoKSk7IC8vIHR5cGUgSFRNTENvbGxl
Y3Rpb24KKyAgICAgICAgY2FzZSBUYWJsZUFsaWduOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0
YWJsZS5hbGlnbigpKTsKKyAgICAgICAgY2FzZSBUYWJsZUJnQ29sb3I6ICAgICAgICAgcmV0dXJu
IFN0cmluZyh0YWJsZS5iZ0NvbG9yKCkpOworICAgICAgICBjYXNlIFRhYmxlQm9yZGVyOiAgICAg
ICAgICByZXR1cm4gU3RyaW5nKHRhYmxlLmJvcmRlcigpKTsKKyAgICAgICAgY2FzZSBUYWJsZUNl
bGxQYWRkaW5nOiAgICAgcmV0dXJuIFN0cmluZyh0YWJsZS5jZWxsUGFkZGluZygpKTsKKyAgICAg
ICAgY2FzZSBUYWJsZUNlbGxTcGFjaW5nOiAgICAgcmV0dXJuIFN0cmluZyh0YWJsZS5jZWxsU3Bh
Y2luZygpKTsKKyAgICAgICAgY2FzZSBUYWJsZUZyYW1lOiAgICAgICAgICAgcmV0dXJuIFN0cmlu
Zyh0YWJsZS5mcmFtZSgpKTsKKyAgICAgICAgY2FzZSBUYWJsZVJ1bGVzOiAgICAgICAgICAgcmV0
dXJuIFN0cmluZyh0YWJsZS5ydWxlcygpKTsKKyAgICAgICAgY2FzZSBUYWJsZVN1bW1hcnk6ICAg
ICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZS5zdW1tYXJ5KCkpOworICAgICAgICBjYXNlIFRhYmxl
V2lkdGg6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlLndpZHRoKCkpOwogICAgIH0KLSAg
fQotICBicmVhazsKLSAgY2FzZSBJRF9DQVBUSU9OOiB7Ci0gICAgSFRNTFRhYmxlQ2FwdGlvbkVs
ZW1lbnRJbXBsICZ0YWJsZUNhcHRpb24gPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVDYXB0aW9uRWxl
bWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1
ZSBIVE1MRWxlbWVudDo6dGFibGVDYXB0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRv
a2VuKSBjb25zdAoreworICAgIEhUTUxUYWJsZUNhcHRpb25FbGVtZW50SW1wbCYgdGFibGVDYXB0
aW9uID0gKnN0YXRpY19jYXN0PEhUTUxUYWJsZUNhcHRpb25FbGVtZW50SW1wbCo+KGltcGwoKSk7
CisgICAgaWYgKHRva2VuID09IFRhYmxlQ2FwdGlvbkFsaWduKQorICAgICAgICByZXR1cm4gU3Ry
aW5nKHRhYmxlQ2FwdGlvbi5hbGlnbigpKTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisK
K1ZhbHVlIEhUTUxFbGVtZW50Ojp0YWJsZUNvbEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0
b2tlbikgY29uc3QKK3sKKyAgICBIVE1MVGFibGVDb2xFbGVtZW50SW1wbCYgdGFibGVDb2wgPSAq
c3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ29sRWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIHN3aXRj
aCAodG9rZW4pIHsKLSAgICBjYXNlIFRhYmxlQ2FwdGlvbkFsaWduOiAgICAgICByZXR1cm4gU3Ry
aW5nKHRhYmxlQ2FwdGlvbi5hbGlnbigpKTsKKyAgICAgICAgY2FzZSBUYWJsZUNvbEFsaWduOiAg
ICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNvbC5hbGlnbigpKTsKKyAgICAgICAgY2FzZSBU
YWJsZUNvbENoOiAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNvbC5jaCgpKTsKKyAg
ICAgICAgY2FzZSBUYWJsZUNvbENoT2ZmOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNv
bC5jaE9mZigpKTsKKyAgICAgICAgY2FzZSBUYWJsZUNvbFNwYW46ICAgICAgICAgICAgcmV0dXJu
IE51bWJlcih0YWJsZUNvbC5zcGFuKCkpOworICAgICAgICBjYXNlIFRhYmxlQ29sVkFsaWduOiAg
ICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ29sLnZBbGlnbigpKTsKKyAgICAgICAgY2FzZSBU
YWJsZUNvbFdpZHRoOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNvbC53aWR0aCgpKTsK
ICAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfQ09MOiB7Ci0gICAgSFRNTFRhYmxlQ29s
RWxlbWVudEltcGwgJnRhYmxlQ29sID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ29sRWxlbWVudElt
cGwgJj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgVGFibGVDb2xB
bGlnbjogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVDb2wuYWxpZ24oKSk7Ci0gICAgY2Fz
ZSBUYWJsZUNvbENoOiAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNvbC5jaCgpKTsK
LSAgICBjYXNlIFRhYmxlQ29sQ2hPZmY6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ29s
LmNoT2ZmKCkpOwotICAgIGNhc2UgVGFibGVDb2xTcGFuOiAgICAgICAgICAgIHJldHVybiBOdW1i
ZXIodGFibGVDb2wuc3BhbigpKTsKLSAgICBjYXNlIFRhYmxlQ29sVkFsaWduOiAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKHRhYmxlQ29sLnZBbGlnbigpKTsKLSAgICBjYXNlIFRhYmxlQ29sV2lkdGg6
ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ29sLndpZHRoKCkpOworICAgIHJldHVybiBV
bmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OnRhYmxlU2VjdGlvbkdldHRlcihF
eGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MVGFibGVTZWN0aW9u
RWxlbWVudEltcGwmIHRhYmxlU2VjdGlvbiA9ICpzdGF0aWNfY2FzdDxIVE1MVGFibGVTZWN0aW9u
RWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2Fz
ZSBUYWJsZVNlY3Rpb25BbGlnbjogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVTZWN0aW9u
LmFsaWduKCkpOworICAgICAgICBjYXNlIFRhYmxlU2VjdGlvbkNoOiAgICAgICAgICAgICAgcmV0
dXJuIFN0cmluZyh0YWJsZVNlY3Rpb24uY2goKSk7CisgICAgICAgIGNhc2UgVGFibGVTZWN0aW9u
Q2hPZmY6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlU2VjdGlvbi5jaE9mZigpKTsKKyAg
ICAgICAgY2FzZSBUYWJsZVNlY3Rpb25WQWxpZ246ICAgICAgICAgIHJldHVybiBTdHJpbmcodGFi
bGVTZWN0aW9uLnZBbGlnbigpKTsKKyAgICAgICAgY2FzZSBUYWJsZVNlY3Rpb25Sb3dzOiAgICAg
ICAgICAgIHJldHVybiBnZXRIVE1MQ29sbGVjdGlvbihleGVjLCB0YWJsZVNlY3Rpb24ucm93cygp
LmdldCgpKTsgLy8gdHlwZSBIVE1MQ29sbGVjdGlvbgogICAgIH0KLSAgfQotICBicmVhazsKLSAg
Y2FzZSBJRF9USEVBRDoKLSAgY2FzZSBJRF9UQk9EWToKLSAgY2FzZSBJRF9URk9PVDogewotICAg
IEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbCAmdGFibGVTZWN0aW9uID0gc3RhdGljX2Nhc3Q8
SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgIHN3aXRjaCAodG9r
ZW4pIHsKLSAgICBjYXNlIFRhYmxlU2VjdGlvbkFsaWduOiAgICAgICAgICAgcmV0dXJuIFN0cmlu
Zyh0YWJsZVNlY3Rpb24uYWxpZ24oKSk7Ci0gICAgY2FzZSBUYWJsZVNlY3Rpb25DaDogICAgICAg
ICAgICAgIHJldHVybiBTdHJpbmcodGFibGVTZWN0aW9uLmNoKCkpOwotICAgIGNhc2UgVGFibGVT
ZWN0aW9uQ2hPZmY6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlU2VjdGlvbi5jaE9mZigp
KTsKLSAgICBjYXNlIFRhYmxlU2VjdGlvblZBbGlnbjogICAgICAgICAgcmV0dXJuIFN0cmluZyh0
YWJsZVNlY3Rpb24udkFsaWduKCkpOwotICAgIGNhc2UgVGFibGVTZWN0aW9uUm93czogICAgICAg
ICAgICByZXR1cm4gZ2V0SFRNTENvbGxlY3Rpb24oZXhlYywgdGFibGVTZWN0aW9uLnJvd3MoKS5n
ZXQoKSk7IC8vIHR5cGUgSFRNTENvbGxlY3Rpb24KKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9
CisKK1ZhbHVlIEhUTUxFbGVtZW50Ojp0YWJsZVJvd0dldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGlu
dCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MVGFibGVSb3dFbGVtZW50SW1wbCYgdGFibGVSb3cg
PSAqc3RhdGljX2Nhc3Q8SFRNTFRhYmxlUm93RWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3
aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBUYWJsZVJvd1Jvd0luZGV4OiAgICAgICAgcmV0
dXJuIE51bWJlcih0YWJsZVJvdy5yb3dJbmRleCgpKTsKKyAgICAgICAgY2FzZSBUYWJsZVJvd1Nl
Y3Rpb25Sb3dJbmRleDogcmV0dXJuIE51bWJlcih0YWJsZVJvdy5zZWN0aW9uUm93SW5kZXgoKSk7
CisgICAgICAgIGNhc2UgVGFibGVSb3dDZWxsczogICAgICAgICAgIHJldHVybiBnZXRIVE1MQ29s
bGVjdGlvbihleGVjLCB0YWJsZVJvdy5jZWxscygpLmdldCgpKTsgLy8gdHlwZSBIVE1MQ29sbGVj
dGlvbgorICAgICAgICBjYXNlIFRhYmxlUm93QWxpZ246ICAgICAgICAgICByZXR1cm4gU3RyaW5n
KHRhYmxlUm93LmFsaWduKCkpOworICAgICAgICBjYXNlIFRhYmxlUm93QmdDb2xvcjogICAgICAg
ICByZXR1cm4gU3RyaW5nKHRhYmxlUm93LmJnQ29sb3IoKSk7CisgICAgICAgIGNhc2UgVGFibGVS
b3dDaDogICAgICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVSb3cuY2goKSk7CisgICAgICAg
IGNhc2UgVGFibGVSb3dDaE9mZjogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVSb3cuY2hP
ZmYoKSk7CisgICAgICAgIGNhc2UgVGFibGVSb3dWQWxpZ246ICAgICAgICAgIHJldHVybiBTdHJp
bmcodGFibGVSb3cudkFsaWduKCkpOwogICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9U
UjogewotICAgSFRNTFRhYmxlUm93RWxlbWVudEltcGwgJnRhYmxlUm93ID0gc3RhdGljX2Nhc3Q8
SFRNTFRhYmxlUm93RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICBzd2l0Y2ggKHRva2VuKSB7
Ci0gICBjYXNlIFRhYmxlUm93Um93SW5kZXg6ICAgICAgICByZXR1cm4gTnVtYmVyKHRhYmxlUm93
LnJvd0luZGV4KCkpOwotICAgY2FzZSBUYWJsZVJvd1NlY3Rpb25Sb3dJbmRleDogcmV0dXJuIE51
bWJlcih0YWJsZVJvdy5zZWN0aW9uUm93SW5kZXgoKSk7Ci0gICBjYXNlIFRhYmxlUm93Q2VsbHM6
ICAgICAgICAgICByZXR1cm4gZ2V0SFRNTENvbGxlY3Rpb24oZXhlYywgdGFibGVSb3cuY2VsbHMo
KS5nZXQoKSk7IC8vIHR5cGUgSFRNTENvbGxlY3Rpb24KLSAgIGNhc2UgVGFibGVSb3dBbGlnbjog
ICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVSb3cuYWxpZ24oKSk7Ci0gICBjYXNlIFRhYmxl
Um93QmdDb2xvcjogICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlUm93LmJnQ29sb3IoKSk7Ci0g
ICBjYXNlIFRhYmxlUm93Q2g6ICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlUm93LmNo
KCkpOwotICAgY2FzZSBUYWJsZVJvd0NoT2ZmOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJs
ZVJvdy5jaE9mZigpKTsKLSAgIGNhc2UgVGFibGVSb3dWQWxpZ246ICAgICAgICAgIHJldHVybiBT
dHJpbmcodGFibGVSb3cudkFsaWduKCkpOwotICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElE
X1RIOgotICBjYXNlIElEX1REOiB7Ci0gICAgSFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsICZ0YWJs
ZUNlbGwgPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVDZWxsRWxlbWVudEltcGwgJj4oZWxlbWVudCk7
Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgVGFibGVDZWxsQ2VsbEluZGV4OiAgICAg
ICByZXR1cm4gTnVtYmVyKHRhYmxlQ2VsbC5jZWxsSW5kZXgoKSk7Ci0gICAgY2FzZSBUYWJsZUNl
bGxBYmJyOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVDZWxsLmFiYnIoKSk7Ci0gICAg
Y2FzZSBUYWJsZUNlbGxBbGlnbjogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVDZWxsLmFs
aWduKCkpOwotICAgIGNhc2UgVGFibGVDZWxsQXhpczogICAgICAgICAgICByZXR1cm4gU3RyaW5n
KHRhYmxlQ2VsbC5heGlzKCkpOwotICAgIGNhc2UgVGFibGVDZWxsQmdDb2xvcjogICAgICAgICBy
ZXR1cm4gU3RyaW5nKHRhYmxlQ2VsbC5iZ0NvbG9yKCkpOwotICAgIGNhc2UgVGFibGVDZWxsQ2g6
ICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ2VsbC5jaCgpKTsKLSAgICBjYXNlIFRh
YmxlQ2VsbENoT2ZmOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNlbGwuY2hPZmYoKSk7
Ci0gICAgY2FzZSBUYWJsZUNlbGxDb2xTcGFuOiAgICAgICAgIHJldHVybiBOdW1iZXIodGFibGVD
ZWxsLmNvbFNwYW4oKSk7Ci0gICAgY2FzZSBUYWJsZUNlbGxIZWFkZXJzOiAgICAgICAgIHJldHVy
biBTdHJpbmcodGFibGVDZWxsLmhlYWRlcnMoKSk7Ci0gICAgY2FzZSBUYWJsZUNlbGxIZWlnaHQ6
ICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVDZWxsLmhlaWdodCgpKTsKLSAgICBjYXNlIFRh
YmxlQ2VsbE5vV3JhcDogICAgICAgICAgcmV0dXJuIEJvb2xlYW4odGFibGVDZWxsLm5vV3JhcCgp
KTsKLSAgICBjYXNlIFRhYmxlQ2VsbFJvd1NwYW46ICAgICAgICAgcmV0dXJuIE51bWJlcih0YWJs
ZUNlbGwucm93U3BhbigpKTsKLSAgICBjYXNlIFRhYmxlQ2VsbFNjb3BlOiAgICAgICAgICAgcmV0
dXJuIFN0cmluZyh0YWJsZUNlbGwuc2NvcGUoKSk7Ci0gICAgY2FzZSBUYWJsZUNlbGxWQWxpZ246
ICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVDZWxsLnZBbGlnbigpKTsKLSAgICBjYXNlIFRh
YmxlQ2VsbFdpZHRoOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNlbGwud2lkdGgoKSk7
CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6dGFibGVD
ZWxsR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxU
YWJsZUNlbGxFbGVtZW50SW1wbCYgdGFibGVDZWxsID0gKnN0YXRpY19jYXN0PEhUTUxUYWJsZUNl
bGxFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICBj
YXNlIFRhYmxlQ2VsbENlbGxJbmRleDogICAgICAgcmV0dXJuIE51bWJlcih0YWJsZUNlbGwuY2Vs
bEluZGV4KCkpOworICAgICAgICBjYXNlIFRhYmxlQ2VsbEFiYnI6ICAgICAgICAgICAgcmV0dXJu
IFN0cmluZyh0YWJsZUNlbGwuYWJicigpKTsKKyAgICAgICAgY2FzZSBUYWJsZUNlbGxBbGlnbjog
ICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVDZWxsLmFsaWduKCkpOworICAgICAgICBjYXNl
IFRhYmxlQ2VsbEF4aXM6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNlbGwuYXhpcygp
KTsKKyAgICAgICAgY2FzZSBUYWJsZUNlbGxCZ0NvbG9yOiAgICAgICAgIHJldHVybiBTdHJpbmco
dGFibGVDZWxsLmJnQ29sb3IoKSk7CisgICAgICAgIGNhc2UgVGFibGVDZWxsQ2g6ICAgICAgICAg
ICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ2VsbC5jaCgpKTsKKyAgICAgICAgY2FzZSBUYWJsZUNl
bGxDaE9mZjogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVDZWxsLmNoT2ZmKCkpOworICAg
ICAgICBjYXNlIFRhYmxlQ2VsbENvbFNwYW46ICAgICAgICAgcmV0dXJuIE51bWJlcih0YWJsZUNl
bGwuY29sU3BhbigpKTsKKyAgICAgICAgY2FzZSBUYWJsZUNlbGxIZWFkZXJzOiAgICAgICAgIHJl
dHVybiBTdHJpbmcodGFibGVDZWxsLmhlYWRlcnMoKSk7CisgICAgICAgIGNhc2UgVGFibGVDZWxs
SGVpZ2h0OiAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ2VsbC5oZWlnaHQoKSk7CisgICAg
ICAgIGNhc2UgVGFibGVDZWxsTm9XcmFwOiAgICAgICAgICByZXR1cm4gQm9vbGVhbih0YWJsZUNl
bGwubm9XcmFwKCkpOworICAgICAgICBjYXNlIFRhYmxlQ2VsbFJvd1NwYW46ICAgICAgICAgcmV0
dXJuIE51bWJlcih0YWJsZUNlbGwucm93U3BhbigpKTsKKyAgICAgICAgY2FzZSBUYWJsZUNlbGxT
Y29wZTogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVDZWxsLnNjb3BlKCkpOworICAgICAg
ICBjYXNlIFRhYmxlQ2VsbFZBbGlnbjogICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNlbGwu
dkFsaWduKCkpOworICAgICAgICBjYXNlIFRhYmxlQ2VsbFdpZHRoOiAgICAgICAgICAgcmV0dXJu
IFN0cmluZyh0YWJsZUNlbGwud2lkdGgoKSk7CiAgICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNl
IElEX0ZSQU1FU0VUOiB7Ci0gICAgSFRNTEZyYW1lU2V0RWxlbWVudEltcGwgJmZyYW1lU2V0ID0g
c3RhdGljX2Nhc3Q8SFRNTEZyYW1lU2V0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgcmV0
dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6ZnJhbWVTZXRHZXR0ZXIo
RXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTEZyYW1lU2V0RWxl
bWVudEltcGwmIGZyYW1lU2V0ID0gKnN0YXRpY19jYXN0PEhUTUxGcmFtZVNldEVsZW1lbnRJbXBs
Kj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBGcmFtZVNldENvbHM6
ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhmcmFtZVNldC5jb2xzKCkpOwotICAgIGNhc2UgRnJh
bWVTZXRSb3dzOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoZnJhbWVTZXQucm93cygpKTsKKyAg
ICAgICAgY2FzZSBGcmFtZVNldENvbHM6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhmcmFtZVNl
dC5jb2xzKCkpOworICAgICAgICBjYXNlIEZyYW1lU2V0Um93czogICAgICAgICAgICByZXR1cm4g
U3RyaW5nKGZyYW1lU2V0LnJvd3MoKSk7CiAgICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElE
X0ZSQU1FOiB7Ci0gICAgSFRNTEZyYW1lRWxlbWVudEltcGwgJmZyYW1lRWxlbWVudCA9IHN0YXRp
Y19jYXN0PEhUTUxGcmFtZUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgIHN3aXRjaCAodG9r
ZW4pIHsKLSAgICBjYXNlIEZyYW1lQ29udGVudERvY3VtZW50OiByZXR1cm4gY2hlY2tOb2RlU2Vj
dXJpdHkoZXhlYyxmcmFtZUVsZW1lbnQuY29udGVudERvY3VtZW50KCkpID8gCi0JCQkJICAgICAg
Z2V0RE9NTm9kZShleGVjLCBmcmFtZUVsZW1lbnQuY29udGVudERvY3VtZW50KCkpIDogVW5kZWZp
bmVkKCk7Ci0gICAgY2FzZSBGcmFtZUNvbnRlbnRXaW5kb3c6ICAgcmV0dXJuIGNoZWNrTm9kZVNl
Y3VyaXR5KGV4ZWMsZnJhbWVFbGVtZW50LmNvbnRlbnREb2N1bWVudCgpKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgPyBXaW5kb3c6OnJldHJpZXZlKGZyYW1lRWxlbWVudC5j
b250ZW50UGFydCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBVbmRl
ZmluZWQoKTsKLSAgICBjYXNlIEZyYW1lRnJhbWVCb3JkZXI6ICAgICByZXR1cm4gU3RyaW5nKGZy
YW1lRWxlbWVudC5mcmFtZUJvcmRlcigpKTsKLSAgICBjYXNlIEZyYW1lTG9uZ0Rlc2M6ICAgICAg
ICByZXR1cm4gU3RyaW5nKGZyYW1lRWxlbWVudC5sb25nRGVzYygpKTsKLSAgICBjYXNlIEZyYW1l
TWFyZ2luSGVpZ2h0OiAgICByZXR1cm4gU3RyaW5nKGZyYW1lRWxlbWVudC5tYXJnaW5IZWlnaHQo
KSk7Ci0gICAgY2FzZSBGcmFtZU1hcmdpbldpZHRoOiAgICAgcmV0dXJuIFN0cmluZyhmcmFtZUVs
ZW1lbnQubWFyZ2luV2lkdGgoKSk7Ci0gICAgY2FzZSBGcmFtZU5hbWU6ICAgICAgICAgICAgcmV0
dXJuIFN0cmluZyhmcmFtZUVsZW1lbnQubmFtZSgpKTsKLSAgICBjYXNlIEZyYW1lTm9SZXNpemU6
ICAgICAgICByZXR1cm4gQm9vbGVhbihmcmFtZUVsZW1lbnQubm9SZXNpemUoKSk7Ci0gICAgY2Fz
ZSBGcmFtZVNjcm9sbGluZzogICAgICAgcmV0dXJuIFN0cmluZyhmcmFtZUVsZW1lbnQuc2Nyb2xs
aW5nKCkpOwotICAgIGNhc2UgRnJhbWVTcmM6Ci0gICAgY2FzZSBGcmFtZUxvY2F0aW9uOiAgICAg
ICAgcmV0dXJuIFN0cmluZyhmcmFtZUVsZW1lbnQuc3JjKCkpOworICAgIHJldHVybiBVbmRlZmlu
ZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OmZyYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhl
YywgaW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxGcmFtZUVsZW1lbnRJbXBsJiBmcmFtZUVs
ZW1lbnQgPSAqc3RhdGljX2Nhc3Q8SFRNTEZyYW1lRWxlbWVudEltcGwqPihpbXBsKCkpOworICAg
IHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBGcmFtZUNvbnRlbnREb2N1bWVudDogcmV0
dXJuIGNoZWNrTm9kZVNlY3VyaXR5KGV4ZWMsZnJhbWVFbGVtZW50LmNvbnRlbnREb2N1bWVudCgp
KSA/IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0RE9NTm9k
ZShleGVjLCBmcmFtZUVsZW1lbnQuY29udGVudERvY3VtZW50KCkpIDogVW5kZWZpbmVkKCk7Cisg
ICAgICAgIGNhc2UgRnJhbWVDb250ZW50V2luZG93OiAgIHJldHVybiBjaGVja05vZGVTZWN1cml0
eShleGVjLGZyYW1lRWxlbWVudC5jb250ZW50RG9jdW1lbnQoKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA/IFdpbmRvdzo6cmV0cmlldmUoZnJhbWVFbGVtZW50LmNv
bnRlbnRQYXJ0KCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBV
bmRlZmluZWQoKTsKKyAgICAgICAgY2FzZSBGcmFtZUZyYW1lQm9yZGVyOiAgICAgcmV0dXJuIFN0
cmluZyhmcmFtZUVsZW1lbnQuZnJhbWVCb3JkZXIoKSk7CisgICAgICAgIGNhc2UgRnJhbWVMb25n
RGVzYzogICAgICAgIHJldHVybiBTdHJpbmcoZnJhbWVFbGVtZW50LmxvbmdEZXNjKCkpOworICAg
ICAgICBjYXNlIEZyYW1lTWFyZ2luSGVpZ2h0OiAgICByZXR1cm4gU3RyaW5nKGZyYW1lRWxlbWVu
dC5tYXJnaW5IZWlnaHQoKSk7CisgICAgICAgIGNhc2UgRnJhbWVNYXJnaW5XaWR0aDogICAgIHJl
dHVybiBTdHJpbmcoZnJhbWVFbGVtZW50Lm1hcmdpbldpZHRoKCkpOworICAgICAgICBjYXNlIEZy
YW1lTmFtZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGZyYW1lRWxlbWVudC5uYW1lKCkpOwor
ICAgICAgICBjYXNlIEZyYW1lTm9SZXNpemU6ICAgICAgICByZXR1cm4gQm9vbGVhbihmcmFtZUVs
ZW1lbnQubm9SZXNpemUoKSk7CisgICAgICAgIGNhc2UgRnJhbWVTY3JvbGxpbmc6ICAgICAgIHJl
dHVybiBTdHJpbmcoZnJhbWVFbGVtZW50LnNjcm9sbGluZygpKTsKKyAgICAgICAgY2FzZSBGcmFt
ZVNyYzoKKyAgICAgICAgY2FzZSBGcmFtZUxvY2F0aW9uOiAgICAgICAgcmV0dXJuIFN0cmluZyhm
cmFtZUVsZW1lbnQuc3JjKCkpOwogICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9JRlJB
TUU6IHsKLSAgICBIVE1MSUZyYW1lRWxlbWVudEltcGwgJmlGcmFtZSA9IHN0YXRpY19jYXN0PEhU
TUxJRnJhbWVFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0g
ICAgY2FzZSBJRnJhbWVBbGlnbjogICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpRnJhbWUu
YWxpZ24oKSk7Ci0gICAgICAvLyAjIyMgc2VjdXJpdHkgY2hlY2sgPwotICAgIGNhc2UgSUZyYW1l
RG9jdW1lbnQ6IC8vIG5vbi1zdGFuZGFyZCwgbWFwcGVkIHRvIGNvbnRlbnREb2N1bWVudAotICAg
IGNhc2UgSUZyYW1lQ29udGVudERvY3VtZW50OiByZXR1cm4gY2hlY2tOb2RlU2VjdXJpdHkoZXhl
YyxpRnJhbWUuY29udGVudERvY3VtZW50KCkpID8gCi0JCQkJICBnZXRET01Ob2RlKGV4ZWMsIGlG
cmFtZS5jb250ZW50RG9jdW1lbnQoKSkgOiBVbmRlZmluZWQoKTsKLSAgICBjYXNlIElGcmFtZUNv
bnRlbnRXaW5kb3c6CXJldHVybiBjaGVja05vZGVTZWN1cml0eShleGVjLGlGcmFtZS5jb250ZW50
RG9jdW1lbnQoKSkgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFdpbmRv
dzo6cmV0cmlldmUoaUZyYW1lLmNvbnRlbnRQYXJ0KCkpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA6IFVuZGVmaW5lZCgpOwotICAgIGNhc2UgSUZyYW1lRnJhbWVCb3JkZXI6
ICAgICByZXR1cm4gU3RyaW5nKGlGcmFtZS5mcmFtZUJvcmRlcigpKTsKLSAgICBjYXNlIElGcmFt
ZUhlaWdodDogICAgICAgICAgcmV0dXJuIFN0cmluZyhpRnJhbWUuaGVpZ2h0KCkpOwotICAgIGNh
c2UgSUZyYW1lTG9uZ0Rlc2M6ICAgICAgICByZXR1cm4gU3RyaW5nKGlGcmFtZS5sb25nRGVzYygp
KTsKLSAgICBjYXNlIElGcmFtZU1hcmdpbkhlaWdodDogICAgcmV0dXJuIFN0cmluZyhpRnJhbWUu
bWFyZ2luSGVpZ2h0KCkpOwotICAgIGNhc2UgSUZyYW1lTWFyZ2luV2lkdGg6ICAgICByZXR1cm4g
U3RyaW5nKGlGcmFtZS5tYXJnaW5XaWR0aCgpKTsKLSAgICBjYXNlIElGcmFtZU5hbWU6ICAgICAg
ICAgICAgcmV0dXJuIFN0cmluZyhpRnJhbWUubmFtZSgpKTsKLSAgICBjYXNlIElGcmFtZVNjcm9s
bGluZzogICAgICAgcmV0dXJuIFN0cmluZyhpRnJhbWUuc2Nyb2xsaW5nKCkpOwotICAgIGNhc2Ug
SUZyYW1lU3JjOiAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGlGcmFtZS5zcmMoKSk7Ci0gICAg
Y2FzZSBJRnJhbWVXaWR0aDogICAgICAgICAgIHJldHVybiBTdHJpbmcoaUZyYW1lLndpZHRoKCkp
OworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OmlGcmFt
ZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MSUZy
YW1lRWxlbWVudEltcGwmIGlGcmFtZSA9ICpzdGF0aWNfY2FzdDxIVE1MSUZyYW1lRWxlbWVudElt
cGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBJRnJhbWVB
bGlnbjogICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpRnJhbWUuYWxpZ24oKSk7CisgICAg
ICAgICAgLy8gIyMjIHNlY3VyaXR5IGNoZWNrID8KKyAgICAgICAgY2FzZSBJRnJhbWVEb2N1bWVu
dDogLy8gbm9uLXN0YW5kYXJkLCBtYXBwZWQgdG8gY29udGVudERvY3VtZW50CisgICAgICAgIGNh
c2UgSUZyYW1lQ29udGVudERvY3VtZW50OiByZXR1cm4gY2hlY2tOb2RlU2VjdXJpdHkoZXhlYyxp
RnJhbWUuY29udGVudERvY3VtZW50KCkpID8gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdldERPTU5vZGUoZXhlYywgaUZyYW1lLmNvbnRlbnREb2N1bWVudCgpKSA6IFVu
ZGVmaW5lZCgpOworICAgICAgICBjYXNlIElGcmFtZUNvbnRlbnRXaW5kb3c6CXJldHVybiBjaGVj
a05vZGVTZWN1cml0eShleGVjLGlGcmFtZS5jb250ZW50RG9jdW1lbnQoKSkgCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBXaW5kb3c6OnJldHJpZXZlKGlGcmFtZS5j
b250ZW50UGFydCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDog
VW5kZWZpbmVkKCk7CisgICAgICAgIGNhc2UgSUZyYW1lRnJhbWVCb3JkZXI6ICAgICByZXR1cm4g
U3RyaW5nKGlGcmFtZS5mcmFtZUJvcmRlcigpKTsKKyAgICAgICAgY2FzZSBJRnJhbWVIZWlnaHQ6
ICAgICAgICAgIHJldHVybiBTdHJpbmcoaUZyYW1lLmhlaWdodCgpKTsKKyAgICAgICAgY2FzZSBJ
RnJhbWVMb25nRGVzYzogICAgICAgIHJldHVybiBTdHJpbmcoaUZyYW1lLmxvbmdEZXNjKCkpOwor
ICAgICAgICBjYXNlIElGcmFtZU1hcmdpbkhlaWdodDogICAgcmV0dXJuIFN0cmluZyhpRnJhbWUu
bWFyZ2luSGVpZ2h0KCkpOworICAgICAgICBjYXNlIElGcmFtZU1hcmdpbldpZHRoOiAgICAgcmV0
dXJuIFN0cmluZyhpRnJhbWUubWFyZ2luV2lkdGgoKSk7CisgICAgICAgIGNhc2UgSUZyYW1lTmFt
ZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGlGcmFtZS5uYW1lKCkpOworICAgICAgICBjYXNl
IElGcmFtZVNjcm9sbGluZzogICAgICAgcmV0dXJuIFN0cmluZyhpRnJhbWUuc2Nyb2xsaW5nKCkp
OworICAgICAgICBjYXNlIElGcmFtZVNyYzogICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpRnJh
bWUuc3JjKCkpOworICAgICAgICBjYXNlIElGcmFtZVdpZHRoOiAgICAgICAgICAgcmV0dXJuIFN0
cmluZyhpRnJhbWUud2lkdGgoKSk7CiAgICAgfQotICAgIGJyZWFrOwotICB9Ci0gIH0gLy8geGVt
YWNzIChvciBhcm50KSBjb3VsZCBiZSBhIGJpdCBzbWFydGVyIHdoZW4gaXQgY29tZXMgdG8gaW5k
ZW50aW5nIHN3aXRjaCgpZXMgOykKLSAgLy8gaXRzIG5vdCBhcm50IHRvIGJsYW1lIC0gaXRzIHRo
ZSBvcmlnaW5hbCBTdHJvdXN0cnVwIHN0eWxlIHdlIGxpa2UgOikgKERpcmspCisgICAgcmV0dXJu
IFVuZGVmaW5lZCgpOworfQogCi0gIC8vIGdlbmVyaWMgcHJvcGVydGllcwotICBzd2l0Y2ggKHRv
a2VuKSB7Ci0gIGNhc2UgRWxlbWVudElkOgotICAgICAgLy8gaWh0LmNvbSByZWxpZXMgb24gdGhp
cyB2YWx1ZSBiZWluZyAiIiB3aGVuIG5vIGlkIGlzIHByZXNlbnQuICBPdGhlciBicm93c2VycyBk
byB0aGlzIGFzIHdlbGwuCi0gICAgICAvLyBTbyB3ZSB1c2UgU3RyaW5nKCkgaW5zdGVhZCBvZiBT
dHJpbmcoKSBoZXJlLgotICAgIHJldHVybiBTdHJpbmcoZWxlbWVudC5pZERPTSgpKTsKLSAgY2Fz
ZSBFbGVtZW50VGl0bGU6Ci0gICAgcmV0dXJuIFN0cmluZyhlbGVtZW50LnRpdGxlKCkpOwotICBj
YXNlIEVsZW1lbnRMYW5nOgotICAgIHJldHVybiBTdHJpbmcoZWxlbWVudC5sYW5nKCkpOwotICBj
YXNlIEVsZW1lbnREaXI6Ci0gICAgcmV0dXJuIFN0cmluZyhlbGVtZW50LmRpcigpKTsKLSAgY2Fz
ZSBFbGVtZW50Q2xhc3NOYW1lOgotICAgIHJldHVybiBTdHJpbmcoZWxlbWVudC5jbGFzc05hbWUo
KSk7Ci0gIGNhc2UgRWxlbWVudElubmVySFRNTDoKLSAgICByZXR1cm4gU3RyaW5nKGVsZW1lbnQu
aW5uZXJIVE1MKCkpOwotICBjYXNlIEVsZW1lbnRJbm5lclRleHQ6Ci0gICAgaWYgKERvY3VtZW50
SW1wbCogZG9jID0gaW1wbCgpLT5nZXREb2N1bWVudCgpKQotICAgICAgZG9jLT51cGRhdGVMYXlv
dXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKLSAgICByZXR1cm4gU3RyaW5nKGVsZW1lbnQu
aW5uZXJUZXh0KCkpOwotICBjYXNlIEVsZW1lbnRPdXRlckhUTUw6Ci0gICAgcmV0dXJuIFN0cmlu
ZyhlbGVtZW50Lm91dGVySFRNTCgpKTsKLSAgY2FzZSBFbGVtZW50T3V0ZXJUZXh0OgotICAgIHJl
dHVybiBTdHJpbmcoZWxlbWVudC5vdXRlclRleHQoKSk7Ci0gIGNhc2UgRWxlbWVudERvY3VtZW50
OgotICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsZWxlbWVudC5vd25lckRvY3VtZW50KCkpOwot
ICBjYXNlIEVsZW1lbnRDaGlsZHJlbjoKLSAgICByZXR1cm4gZ2V0SFRNTENvbGxlY3Rpb24oZXhl
YywgZWxlbWVudC5jaGlsZHJlbigpLmdldCgpKTsKLSAgY2FzZSBFbGVtZW50Q29udGVudEVkaXRh
YmxlOgotICAgIHJldHVybiBTdHJpbmcoZWxlbWVudC5jb250ZW50RWRpdGFibGUoKSk7Ci0gIGNh
c2UgRWxlbWVudElzQ29udGVudEVkaXRhYmxlOgotICAgIHJldHVybiBCb29sZWFuKGVsZW1lbnQu
aXNDb250ZW50RWRpdGFibGUoKSk7Ci0gIC8vICMjIyB3aGF0IGFib3V0IHN0eWxlPyBvciBpcyB0
aGlzIHVzZWQgaW5zdGVhZCBmb3IgRE9NMiBzdHlsZXNoZWV0cz8KLSAgfQotICBrZFdhcm5pbmco
KSA8PCAiSFRNTEVsZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkgdW5oYW5kbGVkIHRva2VuICIgPDwg
dG9rZW4gPDwgZW5kbDsKLSAgcmV0dXJuIFVuZGVmaW5lZCgpOworVmFsdWUgSFRNTEVsZW1lbnQ6
Om1hcnF1ZWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAg
Ly8gRklYTUU6IEZpbmQgb3V0IHdoYXQgV2luSUUgZXhwb3NlcyBhcyBwcm9wZXJ0aWVzIGFuZCBp
bXBsZW1lbnQgdGhpcy4KKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxF
bGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25z
dAoreworICAgIC8vIENoZWNrIG91ciBzZXQgb2YgZ2VuZXJpYyBwcm9wZXJ0aWVzIGZpcnN0Lgor
ICAgIEhUTUxFbGVtZW50SW1wbCAmZWxlbWVudCA9ICpzdGF0aWNfY2FzdDxIVE1MRWxlbWVudElt
cGwgKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgRWxlbWVu
dElkOgorICAgICAgICAvLyBpaHQuY29tIHJlbGllcyBvbiB0aGlzIHZhbHVlIGJlaW5nICIiIHdo
ZW4gbm8gaWQgaXMgcHJlc2VudC4gIE90aGVyIGJyb3dzZXJzIGRvIHRoaXMgYXMgd2VsbC4KKyAg
ICAgICAgLy8gU28gd2UgdXNlIFN0cmluZygpIGluc3RlYWQgb2YgU3RyaW5nKCkgaGVyZS4KKyAg
ICAgICAgcmV0dXJuIFN0cmluZyhlbGVtZW50LmlkKCkpOworICAgICAgICBjYXNlIEVsZW1lbnRU
aXRsZToKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcoZWxlbWVudC50aXRsZSgpKTsKKyAgICAg
ICAgY2FzZSBFbGVtZW50TGFuZzoKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcoZWxlbWVudC5s
YW5nKCkpOworICAgICAgICBjYXNlIEVsZW1lbnREaXI6CisgICAgICAgICAgICByZXR1cm4gU3Ry
aW5nKGVsZW1lbnQuZGlyKCkpOworICAgICAgICBjYXNlIEVsZW1lbnRDbGFzc05hbWU6CisgICAg
ICAgICAgICByZXR1cm4gU3RyaW5nKGVsZW1lbnQuY2xhc3NOYW1lKCkpOworICAgICAgICBjYXNl
IEVsZW1lbnRJbm5lckhUTUw6CisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGVsZW1lbnQuaW5u
ZXJIVE1MKCkpOworICAgICAgICBjYXNlIEVsZW1lbnRJbm5lclRleHQ6CisgICAgICAgICAgICBp
ZiAoRG9jdW1lbnRJbXBsKiBkb2MgPSBpbXBsKCktPmdldERvY3VtZW50KCkpCisgICAgICAgICAg
ICAgICAgZG9jLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKKyAgICAg
ICAgICAgIHJldHVybiBTdHJpbmcoZWxlbWVudC5pbm5lclRleHQoKSk7CisgICAgICAgIGNhc2Ug
RWxlbWVudE91dGVySFRNTDoKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcoZWxlbWVudC5vdXRl
ckhUTUwoKSk7CisgICAgICAgIGNhc2UgRWxlbWVudE91dGVyVGV4dDoKKyAgICAgICAgICAgIHJl
dHVybiBTdHJpbmcoZWxlbWVudC5vdXRlclRleHQoKSk7CisgICAgICAgIGNhc2UgRWxlbWVudERv
Y3VtZW50OgorICAgICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyxlbGVtZW50Lm93bmVy
RG9jdW1lbnQoKSk7CisgICAgICAgIGNhc2UgRWxlbWVudENoaWxkcmVuOgorICAgICAgICAgICAg
cmV0dXJuIGdldEhUTUxDb2xsZWN0aW9uKGV4ZWMsIGVsZW1lbnQuY2hpbGRyZW4oKS5nZXQoKSk7
CisgICAgICAgIGNhc2UgRWxlbWVudENvbnRlbnRFZGl0YWJsZToKKyAgICAgICAgICAgIHJldHVy
biBTdHJpbmcoZWxlbWVudC5jb250ZW50RWRpdGFibGUoKSk7CisgICAgICAgIGNhc2UgRWxlbWVu
dElzQ29udGVudEVkaXRhYmxlOgorICAgICAgICAgICAgcmV0dXJuIEJvb2xlYW4oZWxlbWVudC5p
c0NvbnRlbnRFZGl0YWJsZSgpKTsKKyAgICB9CisKKyAgICAvLyBOb3cgY2hlY2sgdGhlIHByb3Bl
cnRpZXMgc3BlY2lmaWMgdG8gb3VyIGVsZW1lbnQgdHlwZS4KKyAgICBjb25zdCBHZXRTZXRJbmZv
KiBpbmZvID0gZ2V0U2V0SW5mbygpOworICAgIGlmIChpbmZvICYmIGluZm8tPm1fZ2V0dGVyKQor
ICAgICAgICByZXR1cm4gKHRoaXMtPiooaW5mby0+bV9nZXR0ZXIpKShleGVjLCB0b2tlbik7Cisg
ICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCiBib29sIEtKUzo6SFRNTEVsZW1lbnQ6Omhhc093
blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1l
KSBjb25zdAogewogI2lmZGVmIEtKU19WRVJCT1NFCi0gIC8va2REZWJ1Zyg2MDcwKSA8PCAiSFRN
TEVsZW1lbnQ6Omhhc1Byb3BlcnR5ICIgPDwgcHJvcGVydHlOYW1lLnFzdHJpbmcoKSA8PCBlbmRs
OworICAgIC8va2REZWJ1Zyg2MDcwKSA8PCAiSFRNTEVsZW1lbnQ6Omhhc1Byb3BlcnR5ICIgPDwg
cHJvcGVydHlOYW1lLnFzdHJpbmcoKSA8PCBlbmRsOwogI2VuZGlmCi0gIEhUTUxFbGVtZW50SW1w
bCAmZWxlbWVudCA9ICpzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwgKj4oaW1wbCgpKTsKLSAg
Ly8gRmlyc3QgbG9vayBhdCBkeW5hbWljIHByb3BlcnRpZXMgLSBrZWVwIHRoaXMgaW4gc3luYyB3
aXRoIHRyeUdldAotICBzd2l0Y2ggKGVsZW1lbnQuaWQoKSkgewotICAgIGNhc2UgSURfRk9STTog
ewotICAgICAgSFRNTEZvcm1FbGVtZW50SW1wbCAmZm9ybSA9IHN0YXRpY19jYXN0PEhUTUxGb3Jt
RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICAvLyBDaGVjayBpZiB3ZSdyZSByZXRyaWV2
aW5nIGFuIGVsZW1lbnQgKGJ5IGluZGV4IG9yIGJ5IG5hbWUpCi0gICAgICBib29sIG9rOwotICAg
ICAgdWludCB1ID0gcHJvcGVydHlOYW1lLnRvVUxvbmcoJm9rKTsKLSAgICAgIGlmIChvayAmJiBm
b3JtLmVsZW1lbnRzKCktPml0ZW0odSkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgaWYg
KGZvcm0uZWxlbWVudHMoKS0+bmFtZWRJdGVtKHByb3BlcnR5TmFtZS5zdHJpbmcoKSkpCi0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgSURfU0VMRUNU
OiB7Ci0gICAgICBIVE1MU2VsZWN0RWxlbWVudEltcGwgJnNlbGVjdCA9IHN0YXRpY19jYXN0PEhU
TUxTZWxlY3RFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIGJvb2wgb2s7Ci0gICAgICB1
aW50IHUgPSBwcm9wZXJ0eU5hbWUudG9VTG9uZygmb2spOwotICAgICAgaWYgKG9rICYmIHNlbGVj
dC5vcHRpb25zSFRNTENvbGxlY3Rpb24oKS0+aXRlbSh1KSkKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBJRF9JTlBVVDogewotICAgICAgSFRNTElu
cHV0RWxlbWVudEltcGwgJmlucHV0ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudEltcGwg
Jj4oZWxlbWVudCk7Ci0gICAgICBjb25zdCBIYXNoVGFibGUqIHRhYmxlID0gY2xhc3NJbmZvKCkt
PnByb3BIYXNoVGFibGU7Ci0gICAgICBjb25zdCBIYXNoRW50cnkqIGVudHJ5ID0gTG9va3VwOjpm
aW5kRW50cnkodGFibGUsIHByb3BlcnR5TmFtZSk7Ci0gICAgICBpZiAoZW50cnkpIHsKLSAgICAg
ICAgc3dpdGNoKGVudHJ5LT52YWx1ZSkgewotICAgICAgICAgIGNhc2UgSW5wdXRTZWxlY3Rpb25T
dGFydDoKLSAgICAgICAgICBjYXNlIElucHV0U2VsZWN0aW9uRW5kOgotICAgICAgICAgIGNhc2Ug
SW5wdXRTZXRTZWxlY3Rpb25SYW5nZToKLSAgICAgICAgICAgIHJldHVybiBpbnB1dC5jYW5IYXZl
U2VsZWN0aW9uKCk7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOworICAg
IEhUTUxFbGVtZW50SW1wbCAmZWxlbWVudCA9ICpzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwg
Kj4oaW1wbCgpKTsKKyAgICAvLyBGaXJzdCBsb29rIGF0IGR5bmFtaWMgcHJvcGVydGllcyAtIGtl
ZXAgdGhpcyBpbiBzeW5jIHdpdGggdHJ5R2V0CisgICAgaWYgKGVsZW1lbnQuaGFzTG9jYWxOYW1l
KEhUTUxOYW1lczo6Zm9ybSgpKSkgeworICAgICAgICBIVE1MRm9ybUVsZW1lbnRJbXBsICZmb3Jt
ID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICAgICAg
Ly8gQ2hlY2sgaWYgd2UncmUgcmV0cmlldmluZyBhbiBlbGVtZW50IChieSBpbmRleCBvciBieSBu
YW1lKQorICAgICAgICBib29sIG9rOworICAgICAgICB1aW50IHUgPSBwcm9wZXJ0eU5hbWUudG9V
TG9uZygmb2spOworICAgICAgICBpZiAob2sgJiYgZm9ybS5lbGVtZW50cygpLT5pdGVtKHUpKQor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChmb3JtLmVsZW1lbnRzKCktPm5h
bWVkSXRlbShwcm9wZXJ0eU5hbWUuc3RyaW5nKCkpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6c2Vs
ZWN0KCkpKSB7CisgICAgICAgIEhUTUxTZWxlY3RFbGVtZW50SW1wbCAmc2VsZWN0ID0gc3RhdGlj
X2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgICAgICBib29sIG9r
OworICAgICAgICB1aW50IHUgPSBwcm9wZXJ0eU5hbWUudG9VTG9uZygmb2spOworICAgICAgICBp
ZiAob2sgJiYgc2VsZWN0Lm9wdGlvbnNIVE1MQ29sbGVjdGlvbigpLT5pdGVtKHUpKQorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6aW5wdXQoKSkpIHsKKyAgICAgICAgSFRNTElucHV0RWxlbWVudEltcGwg
JmlucHV0ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Cisg
ICAgICAgIGNvbnN0IEhhc2hUYWJsZSogdGFibGUgPSBjbGFzc0luZm8oKS0+cHJvcEhhc2hUYWJs
ZTsKKyAgICAgICAgY29uc3QgSGFzaEVudHJ5KiBlbnRyeSA9IExvb2t1cDo6ZmluZEVudHJ5KHRh
YmxlLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICBpZiAoZW50cnkpIHsKKyAgICAgICAgICAgIHN3
aXRjaChlbnRyeS0+dmFsdWUpIHsKKyAgICAgICAgICAgIGNhc2UgSW5wdXRTZWxlY3Rpb25TdGFy
dDoKKyAgICAgICAgICAgIGNhc2UgSW5wdXRTZWxlY3Rpb25FbmQ6CisgICAgICAgICAgICBjYXNl
IElucHV0U2V0U2VsZWN0aW9uUmFuZ2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIGlucHV0LmNh
bkhhdmVTZWxlY3Rpb24oKTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGJyZWFrOwog
ICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KIAotICByZXR1cm4gRE9NRWxl
bWVudDo6aGFzT3duUHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lKTsKKyAgICByZXR1cm4gRE9N
RWxlbWVudDo6aGFzT3duUHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lKTsKIH0KIAogVVN0cmlu
ZyBLSlM6OkhUTUxFbGVtZW50Ojp0b1N0cmluZyhFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0CiB7Ci0g
IGlmIChpbXBsKCktPmlkKCkgPT0gSURfQSkKLSAgICByZXR1cm4gVVN0cmluZyhzdGF0aWNfY2Fz
dDxjb25zdCBIVE1MQW5jaG9yRWxlbWVudEltcGwgKj4oaW1wbCgpKS0+aHJlZigpKTsKLSAgZWxz
ZQotICAgIHJldHVybiBET01FbGVtZW50Ojp0b1N0cmluZyhleGVjKTsKKyAgICBpZiAoaW1wbCgp
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YSgpKSkKKyAgICAgICAgcmV0dXJuIFVTdHJpbmcoc3Rh
dGljX2Nhc3Q8Y29uc3QgSFRNTEFuY2hvckVsZW1lbnRJbXBsICo+KGltcGwoKSktPmhyZWYoKSk7
CisgICAgZWxzZQorICAgICAgICByZXR1cm4gRE9NRWxlbWVudDo6dG9TdHJpbmcoZXhlYyk7CiB9
CiAKIHN0YXRpYyBIVE1MRm9ybUVsZW1lbnRJbXBsICpnZXRGb3JtKEhUTUxFbGVtZW50SW1wbCAq
ZWxlbWVudCkKIHsKLSAgaWYgKGVsZW1lbnQtPmlzR2VuZXJpY0Zvcm1FbGVtZW50KCkpCi0gICAg
cmV0dXJuIHN0YXRpY19jYXN0PEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsICo+KGVsZW1lbnQp
LT5mb3JtKCk7Ci0KLSAgc3dpdGNoIChlbGVtZW50LT5pZCgpKSB7Ci0gICAgY2FzZSBJRF9MQUJF
TDoKLSAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MTGFiZWxFbGVtZW50SW1wbCAqPihlbGVt
ZW50KS0+Zm9ybSgpOwotICAgIGNhc2UgSURfT0JKRUNUOgotICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PEhUTUxPYmplY3RFbGVtZW50SW1wbCAqPihlbGVtZW50KS0+Zm9ybSgpOwotICB9CisgICAg
aWYgKGVsZW1lbnQtPmlzR2VuZXJpY0Zvcm1FbGVtZW50KCkpCisgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbCAqPihlbGVtZW50KS0+Zm9ybSgpOwor
ICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6bGFiZWwoKSkpCisgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxIVE1MTGFiZWxFbGVtZW50SW1wbCAqPihlbGVtZW50KS0+Zm9y
bSgpOworICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b2JqZWN0KCkpKQor
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTE9iamVjdEVsZW1lbnRJbXBsICo+KGVsZW1l
bnQpLT5mb3JtKCk7CiAKLSAgcmV0dXJuIDA7CisgICAgcmV0dXJuIDA7CiB9CiAKIHZvaWQgS0pT
OjpIVE1MRWxlbWVudDo6cHVzaEV2ZW50SGFuZGxlclNjb3BlKEV4ZWNTdGF0ZSAqZXhlYywgU2Nv
cGVDaGFpbiAmc2NvcGUpIGNvbnN0CkBAIC0yMTQyLDcgKzIyOTYsNyBAQCB2b2lkIEtKUzo6SFRN
TEVsZW1lbnQ6OnB1c2hFdmVudEhhbmRsZXJTCiAgICAgc2NvcGUucHVzaChzdGF0aWNfY2FzdDxP
YmplY3RJbXAgKj4oZ2V0RE9NTm9kZShleGVjLCBmb3JtKSkpOwogICBlbHNlIHsKICAgICBOb2Rl
SW1wbCAqZm9ybSA9IGVsZW1lbnQtPnBhcmVudE5vZGUoKTsKLSAgICB3aGlsZSAoZm9ybSAmJiBm
b3JtLT5pZCgpICE9IElEX0ZPUk0pCisgICAgd2hpbGUgKGZvcm0gJiYgIWZvcm0tPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjpmb3JtKCkpKQogICAgICAgZm9ybSA9IGZvcm0tPnBhcmVudE5vZGUoKTsK
ICAgICAKICAgICBpZiAoZm9ybSkKQEAgLTIxNjIsMTg4ICsyMzE2LDE3MyBAQCBIVE1MRWxlbWVu
dEZ1bmN0aW9uOjpIVE1MRWxlbWVudEZ1bmN0aW9uCiAKIFZhbHVlIEtKUzo6SFRNTEVsZW1lbnRG
dW5jdGlvbjo6dHJ5Q2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3Qg
TGlzdCAmYXJncykKIHsKLSAgaWYgKCF0aGlzT2JqLmluaGVyaXRzKCZLSlM6OkhUTUxFbGVtZW50
OjppbmZvKSkgewotICAgIE9iamVjdCBlcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9y
KTsKLSAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKLSAgICByZXR1cm4gZXJyOwotICB9Ci0g
IGtkRGVidWcoKSA8PCAiS0pTOjpIVE1MRWxlbWVudEZ1bmN0aW9uOjp0cnlDYWxsICIgPDwgZW5k
bDsKLSAgRE9NRXhjZXB0aW9uVHJhbnNsYXRvciBleGNlcHRpb24oZXhlYyk7Ci0gIEhUTUxFbGVt
ZW50SW1wbCAmZWxlbWVudCA9ICpzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwgKj4oc3RhdGlj
X2Nhc3Q8SFRNTEVsZW1lbnQgKj4odGhpc09iai5pbXAoKSktPmltcGwoKSk7Ci0KLSAgc3dpdGNo
IChlbGVtZW50LmlkKCkpIHsKLSAgICBjYXNlIElEX0ZPUk06IHsKLSAgICAgIEhUTUxGb3JtRWxl
bWVudEltcGwgJmZvcm0gPSBzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnRJbXBsICY+KGVsZW1l
bnQpOwotICAgICAgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OkZvcm1TdWJtaXQpIHsKLSAg
ICAgICAgZm9ybS5zdWJtaXQoKTsKLSAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwotICAgICAg
fQotICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6Rm9ybVJlc2V0KSB7Ci0g
ICAgICAgIGZvcm0ucmVzZXQoKTsKLSAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwotICAgICAg
fQorICAgIGlmICghdGhpc09iai5pbmhlcml0cygmS0pTOjpIVE1MRWxlbWVudDo6aW5mbykpIHsK
KyAgICAgICAgT2JqZWN0IGVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBlRXJyb3IpOworICAg
ICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKKyAgICAgICAgcmV0dXJuIGVycjsKICAgICB9
Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9TRUxFQ1Q6IHsKLSAgICAgIEhUTUxTZWxlY3RFbGVt
ZW50SW1wbCAmc2VsZWN0ID0gc3RhdGljX2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnRJbXBsICY+KGVs
ZW1lbnQpOwotICAgICAgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlNlbGVjdEFkZCkgewot
ICAgICAgICBzZWxlY3QuYWRkKHRvSFRNTEVsZW1lbnQoYXJnc1swXSksIHRvSFRNTEVsZW1lbnQo
YXJnc1sxXSkpOwotICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9Ci0gICAgICBl
bHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpTZWxlY3RSZW1vdmUpIHsKLSAgICAgICAg
c2VsZWN0LnJlbW92ZShpbnQoYXJnc1swXS50b051bWJlcihleGVjKSkpOwotICAgICAgICByZXR1
cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxF
bGVtZW50OjpTZWxlY3RCbHVyKSB7Ci0gICAgICAgIHNlbGVjdC5ibHVyKCk7Ci0gICAgICAgIHJl
dHVybiBVbmRlZmluZWQoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRN
TEVsZW1lbnQ6OlNlbGVjdEZvY3VzKSB7Ci0gICAgICAgIHNlbGVjdC5mb2N1cygpOwotICAgICAg
ICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9CisgICAga2REZWJ1ZygpIDw8ICJLSlM6OkhU
TUxFbGVtZW50RnVuY3Rpb246OnRyeUNhbGwgIiA8PCBlbmRsOworICAgIERPTUV4Y2VwdGlvblRy
YW5zbGF0b3IgZXhjZXB0aW9uKGV4ZWMpOworICAgIEhUTUxFbGVtZW50SW1wbCAmZWxlbWVudCA9
ICpzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwgKj4oc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQg
Kj4odGhpc09iai5pbXAoKSktPmltcGwoKSk7CisKKyAgICBpZiAoZWxlbWVudC5oYXNMb2NhbE5h
bWUoSFRNTE5hbWVzOjpmb3JtKCkpKSB7CisgICAgICAgIEhUTUxGb3JtRWxlbWVudEltcGwgJmZv
cm0gPSBzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgICAg
ICBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6Rm9ybVN1Ym1pdCkgeworICAgICAgICAgICAg
Zm9ybS5zdWJtaXQoKTsKKyAgICAgICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKKyAgICAgICAg
fQorICAgICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpGb3JtUmVzZXQpIHsK
KyAgICAgICAgICAgIGZvcm0ucmVzZXQoKTsKKyAgICAgICAgICAgIHJldHVybiBVbmRlZmluZWQo
KTsKKyAgICAgICAgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0lOUFVUOiB7Ci0g
ICAgICBIVE1MSW5wdXRFbGVtZW50SW1wbCAmaW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRF
bGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50
OjpJbnB1dEJsdXIpIHsKLSAgICAgICAgaW5wdXQuYmx1cigpOwotICAgICAgICByZXR1cm4gVW5k
ZWZpbmVkKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50
OjpJbnB1dEZvY3VzKSB7Ci0gICAgICAgIGlucHV0LmZvY3VzKCk7Ci0gICAgICAgIHJldHVybiBV
bmRlZmluZWQoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1l
bnQ6OklucHV0U2VsZWN0KSB7Ci0gICAgICAgIGlucHV0LnNlbGVjdCgpOwotICAgICAgICByZXR1
cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxF
bGVtZW50OjpJbnB1dENsaWNrKSB7Ci0gICAgICAgIGlucHV0LmNsaWNrKCk7Ci0gICAgICAgIHJl
dHVybiBVbmRlZmluZWQoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRN
TEVsZW1lbnQ6OklucHV0U2V0U2VsZWN0aW9uUmFuZ2UpIHsKLSAgICAgICAgaW5wdXQuc2V0U2Vs
ZWN0aW9uUmFuZ2UoYXJnc1swXS50b0ludDMyKGV4ZWMpLCBhcmdzWzFdLnRvSW50MzIoZXhlYykp
OwotICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9CisgICAgZWxzZSBpZiAoZWxl
bWVudC5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpzZWxlY3QoKSkpIHsKKyAgICAgICAgSFRNTFNl
bGVjdEVsZW1lbnRJbXBsICZzZWxlY3QgPSBzdGF0aWNfY2FzdDxIVE1MU2VsZWN0RWxlbWVudElt
cGwgJj4oZWxlbWVudCk7CisgICAgICAgIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpTZWxl
Y3RBZGQpIHsKKyAgICAgICAgICAgIHNlbGVjdC5hZGQodG9IVE1MRWxlbWVudChhcmdzWzBdKSwg
dG9IVE1MRWxlbWVudChhcmdzWzFdKSk7CisgICAgICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7
CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6U2Vs
ZWN0UmVtb3ZlKSB7CisgICAgICAgICAgICBzZWxlY3QucmVtb3ZlKGludChhcmdzWzBdLnRvTnVt
YmVyKGV4ZWMpKSk7CisgICAgICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CisgICAgICAgIH0K
KyAgICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6U2VsZWN0Qmx1cikgewor
ICAgICAgICAgICAgc2VsZWN0LmJsdXIoKTsKKyAgICAgICAgICAgIHJldHVybiBVbmRlZmluZWQo
KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpT
ZWxlY3RGb2N1cykgeworICAgICAgICAgICAgc2VsZWN0LmZvY3VzKCk7CisgICAgICAgICAgICBy
ZXR1cm4gVW5kZWZpbmVkKCk7CisgICAgICAgIH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2Fz
ZSBJRF9MQUJFTDogewotICAgICAgSFRNTExhYmVsRWxlbWVudEltcGwgJmxhYmVsID0gc3RhdGlj
X2Nhc3Q8SFRNTExhYmVsRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICAKLSAgICAgIGlm
IChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpMYWJlbEZvY3VzKSB7Ci0gICAgICAgICAgbGFiZWwu
Zm9jdXMoKTsKLSAgICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9CisgICAgZWxz
ZSBpZiAoZWxlbWVudC5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjppbnB1dCgpKSkgeworICAgICAg
ICBIVE1MSW5wdXRFbGVtZW50SW1wbCAmaW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVt
ZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICAgICAgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6
OklucHV0Qmx1cikgeworICAgICAgICAgICAgaW5wdXQuYmx1cigpOworICAgICAgICAgICAgcmV0
dXJuIFVuZGVmaW5lZCgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6
SFRNTEVsZW1lbnQ6OklucHV0Rm9jdXMpIHsKKyAgICAgICAgICAgIGlucHV0LmZvY3VzKCk7Cisg
ICAgICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBp
ZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6SW5wdXRTZWxlY3QpIHsKKyAgICAgICAgICAgIGlu
cHV0LnNlbGVjdCgpOworICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAgICAgICB9
CisgICAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OklucHV0Q2xpY2spIHsK
KyAgICAgICAgICAgIGlucHV0LmNsaWNrKCk7CisgICAgICAgICAgICByZXR1cm4gVW5kZWZpbmVk
KCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6
SW5wdXRTZXRTZWxlY3Rpb25SYW5nZSkgeworICAgICAgICAgICAgaW5wdXQuc2V0U2VsZWN0aW9u
UmFuZ2UoYXJnc1swXS50b0ludDMyKGV4ZWMpLCBhcmdzWzFdLnRvSW50MzIoZXhlYykpOworICAg
ICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAgICAgICB9CiAgICAgfQotICAgIGJyZWFr
OwotICAgIGNhc2UgSURfTEVHRU5EOiB7Ci0gICAgICBIVE1MTGVnZW5kRWxlbWVudEltcGwgJmxl
Z2VuZCA9IHN0YXRpY19jYXN0PEhUTUxMZWdlbmRFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAg
ICAgICAgCi0gICAgICBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6TGVnZW5kRm9jdXMpIHsK
LSAgICAgICAgICBsZWdlbmQuZm9jdXMoKTsKLSAgICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7
Ci0gICAgICB9CisgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpi
dXR0b24oKSkpIHsKKyAgICAgICAgSFRNTEJ1dHRvbkVsZW1lbnRJbXBsICZidXR0b24gPSBzdGF0
aWNfY2FzdDxIVE1MQnV0dG9uRWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgICAgIGlmIChp
ZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpCdXR0b25CbHVyKSB7CisgICAgICAgICAgICBidXR0b24u
Ymx1cigpOworICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAgICAgICB9CisgICAg
ICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OkJ1dHRvbkZvY3VzKSB7CisgICAg
ICAgICAgICBidXR0b24uZm9jdXMoKTsKKyAgICAgICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsK
KyAgICAgICAgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0JVVFRPTjogewotICAg
ICAgSFRNTEJ1dHRvbkVsZW1lbnRJbXBsICZidXR0b24gPSBzdGF0aWNfY2FzdDxIVE1MQnV0dG9u
RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICAKLSAgICAgIGlmIChpZCA9PSBLSlM6OkhU
TUxFbGVtZW50OjpCdXR0b25CbHVyKSB7Ci0gICAgICAgIGJ1dHRvbi5ibHVyKCk7Ci0gICAgICAg
IHJldHVybiBVbmRlZmluZWQoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6
SFRNTEVsZW1lbnQ6OkJ1dHRvbkZvY3VzKSB7Ci0gICAgICAgIGJ1dHRvbi5mb2N1cygpOwotICAg
ICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9CisgICAgZWxzZSBpZiAoZWxlbWVudC5o
YXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpsYWJlbCgpKSkgeworICAgICAgICBIVE1MTGFiZWxFbGVt
ZW50SW1wbCAmbGFiZWwgPSBzdGF0aWNfY2FzdDxIVE1MTGFiZWxFbGVtZW50SW1wbCAmPihlbGVt
ZW50KTsKKyAgICAgICAgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OkxhYmVsRm9jdXMpIHsK
KyAgICAgICAgICAgIGxhYmVsLmZvY3VzKCk7CisgICAgICAgICAgICByZXR1cm4gVW5kZWZpbmVk
KCk7CisgICAgICAgIH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9URVhUQVJFQTog
ewotICAgICAgSFRNTFRleHRBcmVhRWxlbWVudEltcGwgJnRleHRhcmVhID0gc3RhdGljX2Nhc3Q8
SFRNTFRleHRBcmVhRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBpZiAoaWQgPT0gS0pT
OjpIVE1MRWxlbWVudDo6VGV4dEFyZWFCbHVyKSB7Ci0gICAgICAgIHRleHRhcmVhLmJsdXIoKTsK
LSAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoaWQg
PT0gS0pTOjpIVE1MRWxlbWVudDo6VGV4dEFyZWFGb2N1cykgewotICAgICAgICB0ZXh0YXJlYS5m
b2N1cygpOwotICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9Ci0gICAgICBlbHNl
IGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUZXh0QXJlYVNlbGVjdCkgewotICAgICAgICB0
ZXh0YXJlYS5zZWxlY3QoKTsKLSAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwotICAgICAgfQot
ICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6VGV4dEFyZWFTZXRTZWxlY3Rp
b25SYW5nZSkgewotICAgICAgICB0ZXh0YXJlYS5zZXRTZWxlY3Rpb25SYW5nZShhcmdzWzBdLnRv
SW50MzIoZXhlYyksIGFyZ3NbMV0udG9JbnQzMihleGVjKSk7Ci0gICAgICAgIHJldHVybiBVbmRl
ZmluZWQoKTsKLSAgICAgIH0KKyAgICBlbHNlIGlmIChlbGVtZW50Lmhhc0xvY2FsTmFtZShIVE1M
TmFtZXM6OmxlZ2VuZCgpKSkgeworICAgICAgICBIVE1MTGVnZW5kRWxlbWVudEltcGwgJmxlZ2Vu
ZCA9IHN0YXRpY19jYXN0PEhUTUxMZWdlbmRFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICAg
ICAgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OkxlZ2VuZEZvY3VzKSB7CisgICAgICAgICAg
ICBsZWdlbmQuZm9jdXMoKTsKKyAgICAgICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKKyAgICAg
ICAgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0E6IHsKLSAgICAgIEhUTUxBbmNo
b3JFbGVtZW50SW1wbCAmYW5jaG9yID0gc3RhdGljX2Nhc3Q8SFRNTEFuY2hvckVsZW1lbnRJbXBs
ICY+KGVsZW1lbnQpOwotICAgICAgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OkFuY2hvckJs
dXIpIHsKLSAgICAgICAgYW5jaG9yLmJsdXIoKTsKLSAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgp
OwotICAgICAgfQotICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6QW5jaG9y
Rm9jdXMpIHsKLSAgICAgICAgYW5jaG9yLmZvY3VzKCk7Ci0gICAgICAgIHJldHVybiBVbmRlZmlu
ZWQoKTsKLSAgICAgIH0gCi0gICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpB
bmNob3JUb1N0cmluZykgewotCXJldHVybiBTdHJpbmcodGhpc09iai50b1N0cmluZyhleGVjKSk7
Ci0gICAgICB9CisgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0
ZXh0YXJlYSgpKSkgeworICAgICAgICBIVE1MVGV4dEFyZWFFbGVtZW50SW1wbCAmdGV4dGFyZWEg
PSBzdGF0aWNfY2FzdDxIVE1MVGV4dEFyZWFFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICAg
ICAgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRleHRBcmVhQmx1cikgeworICAgICAgICAg
ICAgdGV4dGFyZWEuYmx1cigpOworICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAg
ICAgICB9CisgICAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRleHRBcmVh
Rm9jdXMpIHsKKyAgICAgICAgICAgIHRleHRhcmVhLmZvY3VzKCk7CisgICAgICAgICAgICByZXR1
cm4gVW5kZWZpbmVkKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpI
VE1MRWxlbWVudDo6VGV4dEFyZWFTZWxlY3QpIHsKKyAgICAgICAgICAgIHRleHRhcmVhLnNlbGVj
dCgpOworICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAgICAgICB9CisgICAgICAg
IGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRleHRBcmVhU2V0U2VsZWN0aW9uUmFu
Z2UpIHsKKyAgICAgICAgICAgIHRleHRhcmVhLnNldFNlbGVjdGlvblJhbmdlKGFyZ3NbMF0udG9J
bnQzMihleGVjKSwgYXJnc1sxXS50b0ludDMyKGV4ZWMpKTsKKyAgICAgICAgICAgIHJldHVybiBV
bmRlZmluZWQoKTsKKyAgICAgICAgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX1RB
QkxFOiB7Ci0gICAgICBIVE1MVGFibGVFbGVtZW50SW1wbCAmdGFibGUgPSBzdGF0aWNfY2FzdDxI
VE1MVGFibGVFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIGlmIChpZCA9PSBLSlM6OkhU
TUxFbGVtZW50OjpUYWJsZUNyZWF0ZVRIZWFkKQotICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShl
eGVjLHRhYmxlLmNyZWF0ZVRIZWFkKCkpOwotICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1M
RWxlbWVudDo6VGFibGVEZWxldGVUSGVhZCkgewotICAgICAgICB0YWJsZS5kZWxldGVUSGVhZCgp
OwotICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChp
ZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUYWJsZUNyZWF0ZVRGb290KQotICAgICAgICByZXR1cm4g
Z2V0RE9NTm9kZShleGVjLHRhYmxlLmNyZWF0ZVRGb290KCkpOwotICAgICAgZWxzZSBpZiAoaWQg
PT0gS0pTOjpIVE1MRWxlbWVudDo6VGFibGVEZWxldGVURm9vdCkgewotICAgICAgICB0YWJsZS5k
ZWxldGVURm9vdCgpOwotICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9Ci0gICAg
ICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUYWJsZUNyZWF0ZUNhcHRpb24pCi0g
ICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsdGFibGUuY3JlYXRlQ2FwdGlvbigpKTsKLSAg
ICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRhYmxlRGVsZXRlQ2FwdGlvbikg
ewotICAgICAgICB0YWJsZS5kZWxldGVDYXB0aW9uKCk7Ci0gICAgICAgIHJldHVybiBVbmRlZmlu
ZWQoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRh
YmxlSW5zZXJ0Um93KQotICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLHRhYmxlLmluc2Vy
dFJvdyhhcmdzWzBdLnRvSW50MzIoZXhlYyksIGV4Y2VwdGlvbikpOwotICAgICAgZWxzZSBpZiAo
aWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6VGFibGVEZWxldGVSb3cpIHsKLSAgICAgICAgdGFibGUu
ZGVsZXRlUm93KGFyZ3NbMF0udG9JbnQzMihleGVjKSwgZXhjZXB0aW9uKTsKLSAgICAgICAgcmV0
dXJuIFVuZGVmaW5lZCgpOwotICAgICAgfQorICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6YSgpKSkgeworICAgICAgICBIVE1MQW5jaG9yRWxlbWVudEltcGwgJmFu
Y2hvciA9IHN0YXRpY19jYXN0PEhUTUxBbmNob3JFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAg
ICAgICAgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OkFuY2hvckJsdXIpIHsKKyAgICAgICAg
ICAgIGFuY2hvci5ibHVyKCk7CisgICAgICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6QW5jaG9yRm9j
dXMpIHsKKyAgICAgICAgICAgIGFuY2hvci5mb2N1cygpOworICAgICAgICAgICAgcmV0dXJuIFVu
ZGVmaW5lZCgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVs
ZW1lbnQ6OkFuY2hvclRvU3RyaW5nKQorICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0aGlzT2Jq
LnRvU3RyaW5nKGV4ZWMpKTsKICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9USEVBRDoK
LSAgICBjYXNlIElEX1RCT0RZOgotICAgIGNhc2UgSURfVEZPT1Q6IHsKLSAgICAgIEhUTUxUYWJs
ZVNlY3Rpb25FbGVtZW50SW1wbCAmdGFibGVTZWN0aW9uID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxl
U2VjdGlvbkVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgaWYgKGlkID09IEtKUzo6SFRN
TEVsZW1lbnQ6OlRhYmxlU2VjdGlvbkluc2VydFJvdykKLSAgICAgICAgcmV0dXJuIGdldERPTU5v
ZGUoZXhlYywgdGFibGVTZWN0aW9uLmluc2VydFJvdyhhcmdzWzBdLnRvSW50MzIoZXhlYyksIGV4
Y2VwdGlvbikpOwotICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6VGFibGVT
ZWN0aW9uRGVsZXRlUm93KSB7Ci0gICAgICAgIHRhYmxlU2VjdGlvbi5kZWxldGVSb3coYXJnc1sw
XS50b0ludDMyKGV4ZWMpLCBleGNlcHRpb24pOwotICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7
Ci0gICAgICB9CisgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0
YWJsZSgpKSkgeworICAgICAgICBIVE1MVGFibGVFbGVtZW50SW1wbCAmdGFibGUgPSBzdGF0aWNf
Y2FzdDxIVE1MVGFibGVFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICAgICAgaWYgKGlkID09
IEtKUzo6SFRNTEVsZW1lbnQ6OlRhYmxlQ3JlYXRlVEhlYWQpCisgICAgICAgICAgICByZXR1cm4g
Z2V0RE9NTm9kZShleGVjLHRhYmxlLmNyZWF0ZVRIZWFkKCkpOworICAgICAgICBlbHNlIGlmIChp
ZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUYWJsZURlbGV0ZVRIZWFkKSB7CisgICAgICAgICAgICB0
YWJsZS5kZWxldGVUSGVhZCgpOworICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAg
ICAgICB9CisgICAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRhYmxlQ3Jl
YXRlVEZvb3QpCisgICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLHRhYmxlLmNyZWF0
ZVRGb290KCkpOworICAgICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUYWJs
ZURlbGV0ZVRGb290KSB7CisgICAgICAgICAgICB0YWJsZS5kZWxldGVURm9vdCgpOworICAgICAg
ICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGlk
ID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRhYmxlQ3JlYXRlQ2FwdGlvbikKKyAgICAgICAgICAgIHJl
dHVybiBnZXRET01Ob2RlKGV4ZWMsdGFibGUuY3JlYXRlQ2FwdGlvbigpKTsKKyAgICAgICAgZWxz
ZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6VGFibGVEZWxldGVDYXB0aW9uKSB7CisgICAg
ICAgICAgICB0YWJsZS5kZWxldGVDYXB0aW9uKCk7CisgICAgICAgICAgICByZXR1cm4gVW5kZWZp
bmVkKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVu
dDo6VGFibGVJbnNlcnRSb3cpCisgICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLHRh
YmxlLmluc2VydFJvdyhhcmdzWzBdLnRvSW50MzIoZXhlYyksIGV4Y2VwdGlvbikpOworICAgICAg
ICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUYWJsZURlbGV0ZVJvdykgeworICAg
ICAgICAgICAgdGFibGUuZGVsZXRlUm93KGFyZ3NbMF0udG9JbnQzMihleGVjKSwgZXhjZXB0aW9u
KTsKKyAgICAgICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKKyAgICAgICAgfQogICAgIH0KLSAg
ICBicmVhazsKLSAgICBjYXNlIElEX1RSOiB7Ci0gICAgICBIVE1MVGFibGVSb3dFbGVtZW50SW1w
bCAmdGFibGVSb3cgPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVSb3dFbGVtZW50SW1wbCAmPihlbGVt
ZW50KTsKLSAgICAgIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUYWJsZVJvd0luc2VydENl
bGwpCi0gICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsdGFibGVSb3cuaW5zZXJ0Q2VsbChh
cmdzWzBdLnRvSW50MzIoZXhlYyksIGV4Y2VwdGlvbikpOwotICAgICAgZWxzZSBpZiAoaWQgPT0g
S0pTOjpIVE1MRWxlbWVudDo6VGFibGVSb3dEZWxldGVDZWxsKSB7Ci0gICAgICAgIHRhYmxlUm93
LmRlbGV0ZUNlbGwoYXJnc1swXS50b0ludDMyKGV4ZWMpLCBleGNlcHRpb24pOwotICAgICAgICBy
ZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9CisgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNMb2Nh
bE5hbWUoSFRNTE5hbWVzOjp0aGVhZCgpKSB8fAorICAgICAgICAgICAgIGVsZW1lbnQuaGFzTG9j
YWxOYW1lKEhUTUxOYW1lczo6dGJvZHkoKSkgfHwKKyAgICAgICAgICAgICBlbGVtZW50Lmhhc0xv
Y2FsTmFtZShIVE1MTmFtZXM6OnRmb290KCkpKSB7CisgICAgICAgIEhUTUxUYWJsZVNlY3Rpb25F
bGVtZW50SW1wbCAmdGFibGVTZWN0aW9uID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlU2VjdGlvbkVs
ZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgICAgICBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVu
dDo6VGFibGVTZWN0aW9uSW5zZXJ0Um93KQorICAgICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUo
ZXhlYywgdGFibGVTZWN0aW9uLmluc2VydFJvdyhhcmdzWzBdLnRvSW50MzIoZXhlYyksIGV4Y2Vw
dGlvbikpOworICAgICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUYWJsZVNl
Y3Rpb25EZWxldGVSb3cpIHsKKyAgICAgICAgICAgIHRhYmxlU2VjdGlvbi5kZWxldGVSb3coYXJn
c1swXS50b0ludDMyKGV4ZWMpLCBleGNlcHRpb24pOworICAgICAgICAgICAgcmV0dXJuIFVuZGVm
aW5lZCgpOworICAgICAgICB9CiAgICAgfQotICAgIGNhc2UgSURfTUFSUVVFRTogeworICAgIGVs
c2UgaWYgKGVsZW1lbnQuaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dHIoKSkpIHsKKyAgICAgICAg
SFRNTFRhYmxlUm93RWxlbWVudEltcGwgJnRhYmxlUm93ID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxl
Um93RWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgICAgIGlmIChpZCA9PSBLSlM6OkhUTUxF
bGVtZW50OjpUYWJsZVJvd0luc2VydENlbGwpCisgICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9k
ZShleGVjLHRhYmxlUm93Lmluc2VydENlbGwoYXJnc1swXS50b0ludDMyKGV4ZWMpLCBleGNlcHRp
b24pKTsKKyAgICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6VGFibGVSb3dE
ZWxldGVDZWxsKSB7CisgICAgICAgICAgICB0YWJsZVJvdy5kZWxldGVDZWxsKGFyZ3NbMF0udG9J
bnQzMihleGVjKSwgZXhjZXB0aW9uKTsKKyAgICAgICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsK
KyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmIChlbGVtZW50Lmhhc0xvY2FsTmFtZShIVE1M
TmFtZXM6Om1hcnF1ZWUoKSkpIHsKICAgICAgICAgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6
Ok1hcnF1ZWVTdGFydCAmJiBlbGVtZW50LnJlbmRlcmVyKCkgJiYgCiAgICAgICAgICAgICBlbGVt
ZW50LnJlbmRlcmVyKCktPmxheWVyKCkgJiYKICAgICAgICAgICAgIGVsZW1lbnQucmVuZGVyZXIo
KS0+bGF5ZXIoKS0+bWFycXVlZSgpKSB7CkBAIC0yMzUxLDE0ICsyNDkwLDE0IEBAIFZhbHVlIEtK
Uzo6SFRNTEVsZW1lbnRGdW5jdGlvbjo6dHJ5Q2FsbCgKICAgICAgICAgICAgIHJldHVybiBVbmRl
ZmluZWQoKTsKICAgICAgICAgfQogICAgICAgICBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6
TWFycXVlZVN0b3AgJiYgZWxlbWVudC5yZW5kZXJlcigpICYmIAotICAgICAgICAgICAgICAgICBl
bGVtZW50LnJlbmRlcmVyKCktPmxheWVyKCkgJiYKLSAgICAgICAgICAgICAgICAgZWxlbWVudC5y
ZW5kZXJlcigpLT5sYXllcigpLT5tYXJxdWVlKCkpIHsKKyAgICAgICAgICAgIGVsZW1lbnQucmVu
ZGVyZXIoKS0+bGF5ZXIoKSAmJgorICAgICAgICAgICAgZWxlbWVudC5yZW5kZXJlcigpLT5sYXll
cigpLT5tYXJxdWVlKCkpIHsKICAgICAgICAgICAgIGVsZW1lbnQucmVuZGVyZXIoKS0+bGF5ZXIo
KS0+bWFycXVlZSgpLT5zdG9wKCk7CiAgICAgICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiAg
ICAgICAgIH0KLSAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGNhc2UgSURfQ0FOVkFTOiB7Cisj
aWYgQVBQTEVfQ0hBTkdFUworICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFzTG9jYWxOYW1lKEhUTUxO
YW1lczo6Y2FudmFzKCkpKSB7CiAgICAgICAgIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpH
ZXRDb250ZXh0KSB7CiAgICAgICAgICAgICBpZiAoYXJncy5zaXplKCkgPT0gMCB8fCAoYXJncy5z
aXplKCkgPT0gMSAmJiBhcmdzWzBdLnRvU3RyaW5nKGV4ZWMpLnFzdHJpbmcoKS5sb3dlcigpID09
ICIyZCIpKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdChuZXcgQ29udGV4dDJEKCZl
bGVtZW50KSk7CkBAIC0yMzY2LDc0MiArMjUwNSw3NjQgQEAgVmFsdWUgS0pTOjpIVE1MRWxlbWVu
dEZ1bmN0aW9uOjp0cnlDYWxsKAogICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogICAg
ICAgICB9CiAgICAgfQotICAgIAotICAgIGJyZWFrOwotICB9CisjZW5kaWYKIAotICByZXR1cm4g
VW5kZWZpbmVkKCk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCiB2b2lkIEtKUzo6SFRN
TEVsZW1lbnQ6OnRyeVB1dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3Bl
cnR5TmFtZSwgY29uc3QgVmFsdWUmIHZhbHVlLCBpbnQgYXR0cikKIHsKICNpZmRlZiBLSlNfVkVS
Qk9TRQotICBET006OkRPTVN0cmluZyBzdHIgPSB2YWx1ZS5pc0EoTnVsbFR5cGUpID8gRE9NOjpE
T01TdHJpbmcoKSA6IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpOworICAgIERPTTo6RE9N
U3RyaW5nIHN0ciA9IHZhbHVlLmlzQShOdWxsVHlwZSkgPyBET006OkRPTVN0cmluZygpIDogdmFs
dWUudG9TdHJpbmcoZXhlYykuc3RyaW5nKCk7CiAjZW5kaWYKLSAgSFRNTEVsZW1lbnRJbXBsICZl
bGVtZW50ID0gKnN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCAqPihpbXBsKCkpOworICAgIEhU
TUxFbGVtZW50SW1wbCAmZWxlbWVudCA9ICpzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwgKj4o
aW1wbCgpKTsKICNpZmRlZiBLSlNfVkVSQk9TRQotICBrZERlYnVnKDYwNzApIDw8ICJLSlM6OkhU
TUxFbGVtZW50Ojp0cnlQdXQgIiA8PCBwcm9wZXJ0eU5hbWUucXN0cmluZygpCi0gICAgICAgICAg
ICAgICAgPDwgIiB0aGlzVGFnPSIgPDwgZWxlbWVudC50YWdOYW1lKCkuc3RyaW5nKCkKLSAgICAg
ICAgICAgICAgICA8PCAiIHN0cj0iIDw8IHN0ci5zdHJpbmcoKSA8PCBlbmRsOworICAgIGtkRGVi
dWcoNjA3MCkgPDwgIktKUzo6SFRNTEVsZW1lbnQ6OnRyeVB1dCAiIDw8IHByb3BlcnR5TmFtZS5x
c3RyaW5nKCkKKyAgICAgICAgICAgICAgICAgIDw8ICIgdGhpc1RhZz0iIDw8IGVsZW1lbnQudGFn
TmFtZSgpLnN0cmluZygpCisgICAgICAgICAgICAgICAgICA8PCAiIHN0cj0iIDw8IHN0ci5zdHJp
bmcoKSA8PCBlbmRsOwogI2VuZGlmCi0gIC8vIEZpcnN0IGxvb2sgYXQgZHluYW1pYyBwcm9wZXJ0
aWVzCi0gIHN3aXRjaCAoZWxlbWVudC5pZCgpKSB7Ci0gICAgY2FzZSBJRF9TRUxFQ1Q6IHsKLSAg
ICAgIEhUTUxTZWxlY3RFbGVtZW50SW1wbCAmc2VsZWN0ID0gc3RhdGljX2Nhc3Q8SFRNTFNlbGVj
dEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgYm9vbCBvazsKLSAgICAgIC8qdWludCB1
ID0qLyBwcm9wZXJ0eU5hbWUudG9VTG9uZygmb2spOwotICAgICAgaWYgKG9rKSB7Ci0gICAgICAg
IE9iamVjdCBjb2xsID0gT2JqZWN0OjpkeW5hbWljQ2FzdCggZ2V0U2VsZWN0SFRNTENvbGxlY3Rp
b24oZXhlYywgc2VsZWN0Lm9wdGlvbnNIVE1MQ29sbGVjdGlvbigpLmdldCgpLCAmc2VsZWN0KSAp
OwotICAgICAgICBpZiAoICFjb2xsLmlzTnVsbCgpICkKLSAgICAgICAgICBjb2xsLnB1dChleGVj
LHByb3BlcnR5TmFtZSx2YWx1ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KKyAgICAvLyBG
aXJzdCBsb29rIGF0IGR5bmFtaWMgcHJvcGVydGllcworICAgIGlmIChlbGVtZW50Lmhhc0xvY2Fs
TmFtZShIVE1MTmFtZXM6OnNlbGVjdCgpKSkgeworICAgICAgICBIVE1MU2VsZWN0RWxlbWVudElt
cGwgJnNlbGVjdCA9IHN0YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50SW1wbCAmPihlbGVtZW50
KTsKKyAgICAgICAgYm9vbCBvazsKKyAgICAgICAgLyp1aW50IHUgPSovIHByb3BlcnR5TmFtZS50
b1VMb25nKCZvayk7CisgICAgICAgIGlmIChvaykgeworICAgICAgICAgICAgT2JqZWN0IGNvbGwg
PSBPYmplY3Q6OmR5bmFtaWNDYXN0KCBnZXRTZWxlY3RIVE1MQ29sbGVjdGlvbihleGVjLCBzZWxl
Y3Qub3B0aW9uc0hUTUxDb2xsZWN0aW9uKCkuZ2V0KCksICZzZWxlY3QpICk7CisgICAgICAgICAg
ICBpZiAoIWNvbGwuaXNOdWxsKCkpCisgICAgICAgICAgICAgICAgY29sbC5wdXQoZXhlYyxwcm9w
ZXJ0eU5hbWUsdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgfQog
I2lmIEFQUExFX0NIQU5HRVMKLSAgICBjYXNlIElEX0VNQkVEOgotICAgIGNhc2UgSURfT0JKRUNU
OgotICAgIGNhc2UgSURfQVBQTEVUOiB7CisgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNMb2NhbE5h
bWUoSFRNTE5hbWVzOjplbWJlZCgpKSB8fAorICAgICAgICAgICAgIGVsZW1lbnQuaGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6b2JqZWN0KCkpIHx8CisgICAgICAgICAgICAgZWxlbWVudC5oYXNMb2Nh
bE5hbWUoSFRNTE5hbWVzOjphcHBsZXQoKSkpIHsKIAlWYWx1ZSBydW50aW1lT2JqZWN0ID0gZ2V0
UnVudGltZU9iamVjdChleGVjLCZlbGVtZW50KTsKIAlpZiAoIXJ1bnRpbWVPYmplY3QuaXNOdWxs
KCkpIHsKIAkgICAgT2JqZWN0SW1wICppbXAgPSBzdGF0aWNfY2FzdDxPYmplY3RJbXAgKj4ocnVu
dGltZU9iamVjdC5pbXAoKSk7Ci0JICAgIGlmIChpbXAtPmNhblB1dChleGVjLCBwcm9wZXJ0eU5h
bWUpKSB7CisJICAgIGlmIChpbXAtPmNhblB1dChleGVjLCBwcm9wZXJ0eU5hbWUpKQogCQlyZXR1
cm4gaW1wLT5wdXQgKGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUpOwotCSAgICB9CiAJfQogICAg
IH0KLSAgICAgIGJyZWFrOwogI2VuZGlmCi0gICAgYnJlYWs7Ci0gIGRlZmF1bHQ6Ci0gICAgICBi
cmVhazsKLSAgfQogCi0gIGNvbnN0IEhhc2hUYWJsZSogdGFibGUgPSBjbGFzc0luZm8oKS0+cHJv
cEhhc2hUYWJsZTsgLy8gZ2V0IHRoZSByaWdodCBoYXNodGFibGUKLSAgY29uc3QgSGFzaEVudHJ5
KiBlbnRyeSA9IExvb2t1cDo6ZmluZEVudHJ5KHRhYmxlLCBwcm9wZXJ0eU5hbWUpOwotICBpZiAo
ZW50cnkpIHsKLSAgICBpZiAoZW50cnktPmF0dHIgJiBGdW5jdGlvbikgLy8gZnVuY3Rpb246IHB1
dCBhcyBvdmVycmlkZSBwcm9wZXJ0eQotICAgIHsKLSAgICAgIE9iamVjdEltcDo6cHV0KGV4ZWMs
IHByb3BlcnR5TmFtZSwgdmFsdWUsIGF0dHIpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBl
bHNlIGlmICgoZW50cnktPmF0dHIgJiBSZWFkT25seSkgPT0gMCkgLy8gbGV0IERPTU9iamVjdExv
b2t1cFB1dCBwcmludCB0aGUgd2FybmluZyBpZiBub3QKLSAgICB7Ci0gICAgICBwdXRWYWx1ZShl
eGVjLCBlbnRyeS0+dmFsdWUsIHZhbHVlLCBhdHRyKTsKLSAgICAgIHJldHVybjsKKyAgICBjb25z
dCBIYXNoVGFibGUqIHRhYmxlID0gY2xhc3NJbmZvKCktPnByb3BIYXNoVGFibGU7IC8vIGdldCB0
aGUgcmlnaHQgaGFzaHRhYmxlCisgICAgY29uc3QgSGFzaEVudHJ5KiBlbnRyeSA9IExvb2t1cDo6
ZmluZEVudHJ5KHRhYmxlLCBwcm9wZXJ0eU5hbWUpOworICAgIGlmIChlbnRyeSkgeworICAgICAg
ICBpZiAoZW50cnktPmF0dHIgJiBGdW5jdGlvbikgeyAvLyBmdW5jdGlvbjogcHV0IGFzIG92ZXJy
aWRlIHByb3BlcnR5CisgICAgICAgICAgICBPYmplY3RJbXA6OnB1dChleGVjLCBwcm9wZXJ0eU5h
bWUsIHZhbHVlLCBhdHRyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICBlbHNlIGlmICgoZW50cnktPmF0dHIgJiBSZWFkT25seSkgPT0gMCkgeyAvLyBsZXQgRE9NT2Jq
ZWN0TG9va3VwUHV0IHByaW50IHRoZSB3YXJuaW5nIGlmIG5vdAorICAgICAgICAgICAgcHV0VmFs
dWUoZXhlYywgZW50cnktPnZhbHVlLCB2YWx1ZSwgYXR0cik7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KICAgICB9Ci0gIH0KLSAgRE9NT2JqZWN0TG9va3VwUHV0PEtKUzo6SFRNTEVs
ZW1lbnQsIERPTUVsZW1lbnQ+KGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIGF0dHIsICZIVE1M
RWxlbWVudFRhYmxlLCB0aGlzKTsKKworICAgIERPTU9iamVjdExvb2t1cFB1dDxLSlM6OkhUTUxF
bGVtZW50LCBET01FbGVtZW50PihleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBhdHRyLCAmSFRN
TEVsZW1lbnRUYWJsZSwgdGhpcyk7CiB9CiAKLXZvaWQgSFRNTEVsZW1lbnQ6OnB1dFZhbHVlKEV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGludCkKK3ZvaWQg
SFRNTEVsZW1lbnQ6Omh0bWxTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0
IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKIHsKLSAgRE9NRXhjZXB0
aW9uVHJhbnNsYXRvciBleGNlcHRpb24oZXhlYyk7Ci0gIERPTTo6RE9NU3RyaW5nIHN0ciA9IHZh
bHVlLmlzQShOdWxsVHlwZSkgPyBET006OkRPTVN0cmluZygpIDogdmFsdWUudG9TdHJpbmcoZXhl
Yykuc3RyaW5nKCk7Ci0gIEhUTUxFbGVtZW50SW1wbCAmZWxlbWVudCA9ICpzdGF0aWNfY2FzdDxI
VE1MRWxlbWVudEltcGwgKj4oaW1wbCgpKTsKLSNpZmRlZiBLSlNfVkVSQk9TRQotICBrZERlYnVn
KDYwNzApIDw8ICJLSlM6OkhUTUxFbGVtZW50OjpwdXRWYWx1ZSAiCi0gICAgICAgICAgICAgICAg
PDwgIiB0aGlzVGFnPSIgPDwgZWxlbWVudC50YWdOYW1lKCkuc3RyaW5nKCkKLSAgICAgICAgICAg
ICAgICA8PCAiIHRva2VuPSIgPDwgdG9rZW4gPDwgZW5kbDsKLSNlbmRpZgorICAgIEhUTUxIZWFk
RWxlbWVudEltcGwgJmhlYWQgPSAqc3RhdGljX2Nhc3Q8SFRNTEhlYWRFbGVtZW50SW1wbCo+KGlt
cGwoKSk7CisgICAgaWYgKHRva2VuID09IEhlYWRQcm9maWxlKSAKKyAgICAgICAgaGVhZC5zZXRQ
cm9maWxlKHN0cik7Cit9CiAKLSAgc3dpdGNoIChlbGVtZW50LmlkKCkpIHsKLSAgY2FzZSBJRF9I
VE1MOiB7Ci0gICAgICBIVE1MSHRtbEVsZW1lbnRJbXBsICZodG1sID0gc3RhdGljX2Nhc3Q8SFRN
TEh0bWxFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAg
ICAgIGNhc2UgSHRtbFZlcnNpb246ICAgICAgICAgeyBodG1sLnNldFZlcnNpb24oc3RyKTsgcmV0
dXJuOyB9Ci0gICAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfSEVBRDogewotICAgIEhU
TUxIZWFkRWxlbWVudEltcGwgJmhlYWQgPSBzdGF0aWNfY2FzdDxIVE1MSGVhZEVsZW1lbnRJbXBs
ICY+KGVsZW1lbnQpOwordm9pZCBIVE1MRWxlbWVudDo6aGVhZFNldHRlcihFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYg
c3RyKQoreworICAgIEhUTUxIZWFkRWxlbWVudEltcGwgJmhlYWQgPSAqc3RhdGljX2Nhc3Q8SFRN
TEhlYWRFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IEhlYWRQcm9maWxl
KSAKKyAgICAgICAgaGVhZC5zZXRQcm9maWxlKHN0cik7Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6
OmxpbmtTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1
ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MTGlua0VsZW1lbnRJbXBs
ICZsaW5rID0gKnN0YXRpY19jYXN0PEhUTUxMaW5rRWxlbWVudEltcGwqPihpbXBsKCkpOwogICAg
IHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIEhlYWRQcm9maWxlOiAgICAgICAgIHsgaGVhZC5z
ZXRQcm9maWxlKHN0cik7IHJldHVybjsgfQotICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJ
RF9MSU5LOiB7Ci0gICAgSFRNTExpbmtFbGVtZW50SW1wbCAmbGluayA9IHN0YXRpY19jYXN0PEhU
TUxMaW5rRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAg
ICAgY2FzZSBMaW5rRGlzYWJsZWQ6ICAgICAgICB7IGxpbmsuc2V0RGlzYWJsZWQodmFsdWUudG9C
b29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIExpbmtDaGFyc2V0OiAgICAgICAg
IHsgbGluay5zZXRDaGFyc2V0KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBMaW5rSHJlZjog
ICAgICAgICAgICB7IGxpbmsuc2V0SHJlZihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgTGlu
a0hyZWZMYW5nOiAgICAgICAgeyBsaW5rLnNldEhyZWZsYW5nKHN0cik7IHJldHVybjsgfQotICAg
ICAgY2FzZSBMaW5rTWVkaWE6ICAgICAgICAgICB7IGxpbmsuc2V0TWVkaWEoc3RyKTsgcmV0dXJu
OyB9Ci0gICAgICBjYXNlIExpbmtSZWw6ICAgICAgICAgICAgIHsgbGluay5zZXRSZWwoc3RyKTsg
cmV0dXJuOyB9Ci0gICAgICBjYXNlIExpbmtSZXY6ICAgICAgICAgICAgIHsgbGluay5zZXRSZXYo
c3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIExpbmtUYXJnZXQ6ICAgICAgICAgIHsgbGluay5z
ZXRUYXJnZXQoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIExpbmtUeXBlOiAgICAgICAgICAg
IHsgbGluay5zZXRUeXBlKHN0cik7IHJldHVybjsgfQotICAgICAgfQotICAgIH0KLSAgICBicmVh
azsKLSAgICBjYXNlIElEX1RJVExFOiB7Ci0gICAgICBIVE1MVGl0bGVFbGVtZW50SW1wbCAmdGl0
bGUgPSBzdGF0aWNfY2FzdDxIVE1MVGl0bGVFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAg
IHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgVGl0bGVUZXh0OiAgICAgICAgICAgICAgICAg
eyB0aXRsZS5zZXRUZXh0KHN0cik7IHJldHVybjsgfQotICAgICAgfQotICAgIH0KLSAgICBicmVh
azsKLSAgICBjYXNlIElEX01FVEE6IHsKLSAgICAgIEhUTUxNZXRhRWxlbWVudEltcGwgJm1ldGEg
PSBzdGF0aWNfY2FzdDxIVE1MTWV0YUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dp
dGNoICh0b2tlbikgewotICAgICAgY2FzZSBNZXRhQ29udGVudDogICAgICAgICB7IG1ldGEuc2V0
Q29udGVudChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgTWV0YUh0dHBFcXVpdjogICAgICAg
eyBtZXRhLnNldEh0dHBFcXVpdihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgTWV0YU5hbWU6
ICAgICAgICAgICAgeyBtZXRhLnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIE1l
dGFTY2hlbWU6ICAgICAgICAgIHsgbWV0YS5zZXRTY2hlbWUoc3RyKTsgcmV0dXJuOyB9Ci0gICAg
ICB9CisgICAgICAgIGNhc2UgTGlua0Rpc2FibGVkOiAgICAgICAgeyBsaW5rLnNldERpc2FibGVk
KHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIExpbmtDaGFy
c2V0OiAgICAgICAgIHsgbGluay5zZXRDaGFyc2V0KHN0cik7IHJldHVybjsgfQorICAgICAgICBj
YXNlIExpbmtIcmVmOiAgICAgICAgICAgIHsgbGluay5zZXRIcmVmKHN0cik7IHJldHVybjsgfQor
ICAgICAgICBjYXNlIExpbmtIcmVmTGFuZzogICAgICAgIHsgbGluay5zZXRIcmVmbGFuZyhzdHIp
OyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBMaW5rTWVkaWE6ICAgICAgICAgICB7IGxpbmsuc2V0
TWVkaWEoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgTGlua1JlbDogICAgICAgICAgICAg
eyBsaW5rLnNldFJlbChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBMaW5rUmV2OiAgICAg
ICAgICAgICB7IGxpbmsuc2V0UmV2KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIExpbmtU
YXJnZXQ6ICAgICAgICAgIHsgbGluay5zZXRUYXJnZXQoc3RyKTsgcmV0dXJuOyB9CisgICAgICAg
IGNhc2UgTGlua1R5cGU6ICAgICAgICAgICAgeyBsaW5rLnNldFR5cGUoc3RyKTsgcmV0dXJuOyB9
CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfQkFTRTogewotICAgICAgSFRNTEJhc2VF
bGVtZW50SW1wbCAmYmFzZSA9IHN0YXRpY19jYXN0PEhUTUxCYXNlRWxlbWVudEltcGwgJj4oZWxl
bWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIEJhc2VIcmVmOiAgICAg
ICAgICAgIHsgYmFzZS5zZXRIcmVmKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBCYXNlVGFy
Z2V0OiAgICAgICAgICB7IGJhc2Uuc2V0VGFyZ2V0KHN0cik7IHJldHVybjsgfQotICAgICAgfQor
fQorCit2b2lkIEhUTUxFbGVtZW50Ojp0aXRsZVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQorewor
ICAgICBIVE1MVGl0bGVFbGVtZW50SW1wbCYgdGl0bGUgPSAqc3RhdGljX2Nhc3Q8SFRNTFRpdGxl
RWxlbWVudEltcGwqPihpbXBsKCkpOworICAgICBpZiAodG9rZW4gPT0gVGl0bGVUZXh0KQorICAg
ICAgICB0aXRsZS5zZXRUZXh0KHN0cik7Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6Om1ldGFTZXR0
ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3Qg
RE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MTWV0YUVsZW1lbnRJbXBsJiBtZXRhID0g
KnN0YXRpY19jYXN0PEhUTUxNZXRhRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAo
dG9rZW4pIHsKKyAgICAgICAgY2FzZSBNZXRhQ29udGVudDogICAgICAgICB7IG1ldGEuc2V0Q29u
dGVudChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBNZXRhSHR0cEVxdWl2OiAgICAgICB7
IG1ldGEuc2V0SHR0cEVxdWl2KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIE1ldGFOYW1l
OiAgICAgICAgICAgIHsgbWV0YS5zZXROYW1lKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNl
IE1ldGFTY2hlbWU6ICAgICAgICAgIHsgbWV0YS5zZXRTY2hlbWUoc3RyKTsgcmV0dXJuOyB9CiAg
ICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfSVNJTkRFWDogewotICAgICAgSFRNTElzSW5k
ZXhFbGVtZW50SW1wbCAmaXNpbmRleCA9IHN0YXRpY19jYXN0PEhUTUxJc0luZGV4RWxlbWVudElt
cGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICAvLyByZWFkLW9u
bHk6IGZvcm0KLSAgICAgIGNhc2UgSXNJbmRleFByb21wdDogICAgICAgICAgICAgICB7IGlzaW5k
ZXguc2V0UHJvbXB0KHN0cik7IHJldHVybjsgfQotICAgICAgfQorfQorCit2b2lkIEhUTUxFbGVt
ZW50OjpiYXNlU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYg
dmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTEJhc2VFbGVtZW50
SW1wbCYgYmFzZSA9ICpzdGF0aWNfY2FzdDxIVE1MQmFzZUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsK
KyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgQmFzZUhyZWY6ICAgICAgICAgICAg
eyBiYXNlLnNldEhyZWYoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQmFzZVRhcmdldDog
ICAgICAgICAgeyBiYXNlLnNldFRhcmdldChzdHIpOyByZXR1cm47IH0KICAgICB9Ci0gICAgYnJl
YWs7Ci0gICAgY2FzZSBJRF9TVFlMRTogewotICAgICAgSFRNTFN0eWxlRWxlbWVudEltcGwgJnN0
eWxlID0gc3RhdGljX2Nhc3Q8SFRNTFN0eWxlRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAg
ICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIFN0eWxlRGlzYWJsZWQ6ICAgICAgICB7IHN0
eWxlLnNldERpc2FibGVkKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQotICAgICAg
Y2FzZSBTdHlsZU1lZGlhOiAgICAgICAgICAgeyBzdHlsZS5zZXRNZWRpYShzdHIpOyByZXR1cm47
IH0KLSAgICAgIGNhc2UgU3R5bGVUeXBlOiAgICAgICAgICAgIHsgc3R5bGUuc2V0VHlwZShzdHIp
OyByZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6aXNJbmRleFNldHRl
cihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBE
T006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxJc0luZGV4RWxlbWVudEltcGwmIGlzaW5k
ZXggPSAqc3RhdGljX2Nhc3Q8SFRNTElzSW5kZXhFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAg
aWYgKHRva2VuID09IElzSW5kZXhQcm9tcHQpCisgICAgICAgIGlzaW5kZXguc2V0UHJvbXB0KHN0
cik7Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OnN0eWxlU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIp
Cit7CisgICAgSFRNTFN0eWxlRWxlbWVudEltcGwmIHN0eWxlID0gKnN0YXRpY19jYXN0PEhUTUxT
dHlsZUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAg
IGNhc2UgU3R5bGVEaXNhYmxlZDogICAgICAgIHsgc3R5bGUuc2V0RGlzYWJsZWQodmFsdWUudG9C
b29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgU3R5bGVNZWRpYTogICAgICAg
ICAgIHsgc3R5bGUuc2V0TWVkaWEoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgU3R5bGVU
eXBlOiAgICAgICAgICAgIHsgc3R5bGUuc2V0VHlwZShzdHIpOyByZXR1cm47IH0KICAgICB9Ci0g
ICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9CT0RZOiB7Ci0gICAgICBIVE1MQm9keUVsZW1lbnRJbXBs
ICZib2R5ID0gc3RhdGljX2Nhc3Q8SFRNTEJvZHlFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAg
ICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgQm9keUFMaW5rOiAgICAgICAgICAgeyBi
b2R5LnNldEFMaW5rKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBCb2R5QmFja2dyb3VuZDog
ICAgICB7IGJvZHkuc2V0QmFja2dyb3VuZChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQm9k
eUJnQ29sb3I6ICAgICAgICAgeyBib2R5LnNldEJnQ29sb3Ioc3RyKTsgcmV0dXJuOyB9Ci0gICAg
ICBjYXNlIEJvZHlMaW5rOiAgICAgICAgICAgIHsgYm9keS5zZXRMaW5rKHN0cik7IHJldHVybjsg
fQotICAgICAgY2FzZSBCb2R5VGV4dDogICAgICAgICAgICB7IGJvZHkuc2V0VGV4dChzdHIpOyBy
ZXR1cm47IH0KLSAgICAgIGNhc2UgQm9keVZMaW5rOiAgICAgICAgICAgeyBib2R5LnNldFZMaW5r
KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBCb2R5U2Nyb2xsTGVmdDoKLSAgICAgIGNhc2Ug
Qm9keVNjcm9sbFRvcDogewotICAgICAgICAgIFFTY3JvbGxWaWV3KiBzdmlldyA9IGJvZHkub3du
ZXJEb2N1bWVudCgpLT52aWV3KCk7Ci0gICAgICAgICAgaWYgKHN2aWV3KSB7Ci0gICAgICAgICAg
ICAgIC8vIFVwZGF0ZSB0aGUgZG9jdW1lbnQncyBsYXlvdXQgYmVmb3JlIHdlIGNvbXB1dGUgdGhl
c2UgYXR0cmlidXRlcy4KLSAgICAgICAgICAgICAgaWYgKERvY3VtZW50SW1wbCogZG9jID0gYm9k
eS5nZXREb2N1bWVudCgpKQotICAgICAgICAgICAgICAgICAgZG9jLT51cGRhdGVMYXlvdXRJZ25v
cmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKLSAgICAgICAgICAgICAgaWYgKHRva2VuID09IEJvZHlT
Y3JvbGxMZWZ0KQotICAgICAgICAgICAgICAgICAgc3ZpZXctPnNldENvbnRlbnRzUG9zKHZhbHVl
LnRvSW50MzIoZXhlYyksIHN2aWV3LT5jb250ZW50c1koKSk7Ci0gICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICAgIHN2aWV3LT5zZXRDb250ZW50c1Bvcyhzdmlldy0+Y29udGVudHNY
KCksIHZhbHVlLnRvSW50MzIoZXhlYykpOwotICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm47
Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OmJvZHlTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sK
KyAgICBIVE1MQm9keUVsZW1lbnRJbXBsJiBib2R5ID0gKnN0YXRpY19jYXN0PEhUTUxCb2R5RWxl
bWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBC
b2R5QUxpbms6ICAgICAgICAgICB7IGJvZHkuc2V0QUxpbmsoc3RyKTsgcmV0dXJuOyB9CisgICAg
ICAgIGNhc2UgQm9keUJhY2tncm91bmQ6ICAgICAgeyBib2R5LnNldEJhY2tncm91bmQoc3RyKTsg
cmV0dXJuOyB9CisgICAgICAgIGNhc2UgQm9keUJnQ29sb3I6ICAgICAgICAgeyBib2R5LnNldEJn
Q29sb3Ioc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQm9keUxpbms6ICAgICAgICAgICAg
eyBib2R5LnNldExpbmsoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQm9keVRleHQ6ICAg
ICAgICAgICAgeyBib2R5LnNldFRleHQoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQm9k
eVZMaW5rOiAgICAgICAgICAgeyBib2R5LnNldFZMaW5rKHN0cik7IHJldHVybjsgfQorICAgICAg
ICBjYXNlIEJvZHlTY3JvbGxMZWZ0OgorICAgICAgICBjYXNlIEJvZHlTY3JvbGxUb3A6IHsKKyAg
ICAgICAgICAgIFFTY3JvbGxWaWV3KiBzdmlldyA9IGJvZHkub3duZXJEb2N1bWVudCgpLT52aWV3
KCk7CisgICAgICAgICAgICBpZiAoc3ZpZXcpIHsKKyAgICAgICAgICAgICAgICAvLyBVcGRhdGUg
dGhlIGRvY3VtZW50J3MgbGF5b3V0IGJlZm9yZSB3ZSBjb21wdXRlIHRoZXNlIGF0dHJpYnV0ZXMu
CisgICAgICAgICAgICAgICAgaWYgKERvY3VtZW50SW1wbCogZG9jID0gYm9keS5nZXREb2N1bWVu
dCgpKQorICAgICAgICAgICAgICAgICAgICBkb2MtPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdT
dHlsZXNoZWV0cygpOworICAgICAgICAgICAgICAgIGlmICh0b2tlbiA9PSBCb2R5U2Nyb2xsTGVm
dCkKKyAgICAgICAgICAgICAgICAgICAgc3ZpZXctPnNldENvbnRlbnRzUG9zKHZhbHVlLnRvSW50
MzIoZXhlYyksIHN2aWV3LT5jb250ZW50c1koKSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgICAgICBzdmlldy0+c2V0Q29udGVudHNQb3Moc3ZpZXctPmNvbnRlbnRzWCgp
LCB2YWx1ZS50b0ludDMyKGV4ZWMpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQotICAgICAgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0ZP
Uk06IHsKLSAgICAgIEhUTUxGb3JtRWxlbWVudEltcGwgJmZvcm0gPSBzdGF0aWNfY2FzdDxIVE1M
Rm9ybUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAg
ICAgLy8gcmVhZC1vbmx5OiBlbGVtZW50cwotICAgICAgLy8gcmVhZC1vbmx5OiBsZW5ndGgKLSAg
ICAgIGNhc2UgRm9ybU5hbWU6ICAgICAgICAgICAgeyBmb3JtLnNldE5hbWUoc3RyKTsgcmV0dXJu
OyB9Ci0gICAgICBjYXNlIEZvcm1BY2NlcHRDaGFyc2V0OiAgIHsgZm9ybS5zZXRBY2NlcHRDaGFy
c2V0KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBGb3JtQWN0aW9uOiAgICAgICAgICB7IGZv
cm0uc2V0QWN0aW9uKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBGb3JtRW5jVHlwZTogICAg
ICAgICB7IGZvcm0uc2V0RW5jdHlwZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgRm9ybU1l
dGhvZDogICAgICAgICAgeyBmb3JtLnNldE1ldGhvZChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNh
c2UgRm9ybVRhcmdldDogICAgICAgICAgeyBmb3JtLnNldFRhcmdldChzdHIpOyByZXR1cm47IH0K
LSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6Zm9ybVNldHRlcihFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYg
c3RyKQoreworICAgIEhUTUxGb3JtRWxlbWVudEltcGwmIGZvcm0gPSAqc3RhdGljX2Nhc3Q8SFRN
TEZvcm1FbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAg
ICAvLyByZWFkLW9ubHk6IGVsZW1lbnRzCisgICAgICAgIC8vIHJlYWQtb25seTogbGVuZ3RoCisg
ICAgICAgIGNhc2UgRm9ybU5hbWU6ICAgICAgICAgICAgeyBmb3JtLnNldE5hbWUoc3RyKTsgcmV0
dXJuOyB9CisgICAgICAgIGNhc2UgRm9ybUFjY2VwdENoYXJzZXQ6ICAgeyBmb3JtLnNldEFjY2Vw
dENoYXJzZXQoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgRm9ybUFjdGlvbjogICAgICAg
ICAgeyBmb3JtLnNldEFjdGlvbihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBGb3JtRW5j
VHlwZTogICAgICAgICB7IGZvcm0uc2V0RW5jdHlwZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAg
Y2FzZSBGb3JtTWV0aG9kOiAgICAgICAgICB7IGZvcm0uc2V0TWV0aG9kKHN0cik7IHJldHVybjsg
fQorICAgICAgICBjYXNlIEZvcm1UYXJnZXQ6ICAgICAgICAgIHsgZm9ybS5zZXRUYXJnZXQoc3Ry
KTsgcmV0dXJuOyB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfU0VMRUNUOiB7Ci0g
ICAgICBIVE1MU2VsZWN0RWxlbWVudEltcGwgJnNlbGVjdCA9IHN0YXRpY19jYXN0PEhUTUxTZWxl
Y3RFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAg
IC8vIHJlYWQtb25seTogdHlwZQotICAgICAgY2FzZSBTZWxlY3RTZWxlY3RlZEluZGV4OiAgIHsg
c2VsZWN0LnNldFNlbGVjdGVkSW5kZXgodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQot
ICAgICAgY2FzZSBTZWxlY3RWYWx1ZTogICAgICAgICAgIHsgc2VsZWN0LnNldFZhbHVlKHN0cik7
IHJldHVybjsgfQotICAgICAgY2FzZSBTZWxlY3RMZW5ndGg6ICAgICAgICAgIHsgLy8gcmVhZC1v
bmx5IGFjY29yZGluZyB0byB0aGUgTlMgc3BlYywgYnV0IHdlYnBhZ2VzIG5lZWQgaXQgd3JpdGVh
YmxlCit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OnNlbGVjdFNldHRlcihFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3Ry
KQoreworICAgIEhUTUxTZWxlY3RFbGVtZW50SW1wbCYgc2VsZWN0ID0gKnN0YXRpY19jYXN0PEhU
TUxTZWxlY3RFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAg
ICAgICAvLyByZWFkLW9ubHk6IHR5cGUKKyAgICAgICAgY2FzZSBTZWxlY3RTZWxlY3RlZEluZGV4
OiAgIHsgc2VsZWN0LnNldFNlbGVjdGVkSW5kZXgodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVy
bjsgfQorICAgICAgICBjYXNlIFNlbGVjdFZhbHVlOiAgICAgICAgICAgeyBzZWxlY3Quc2V0VmFs
dWUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgU2VsZWN0TGVuZ3RoOiAgICAgICAgICB7
IC8vIHJlYWQtb25seSBhY2NvcmRpbmcgdG8gdGhlIE5TIHNwZWMsIGJ1dCB3ZWJwYWdlcyBuZWVk
IGl0IHdyaXRlYWJsZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBP
YmplY3QgY29sbCA9IE9iamVjdDo6ZHluYW1pY0Nhc3QoIGdldFNlbGVjdEhUTUxDb2xsZWN0aW9u
KGV4ZWMsIHNlbGVjdC5vcHRpb25zSFRNTENvbGxlY3Rpb24oKS5nZXQoKSwgJnNlbGVjdCkgKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhY29sbC5pc051
bGwoKSApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbC5w
dXQoZXhlYyxsZW5ndGhQcm9wZXJ0eU5hbWUsdmFsdWUpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAvLyByZWFkLW9ubHk6IGZvcm0KLSAgICAgIC8vIHJlYWQtb25s
eTogb3B0aW9ucwotICAgICAgY2FzZSBTZWxlY3REaXNhYmxlZDogICAgICAgIHsgc2VsZWN0LnNl
dERpc2FibGVkKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBT
ZWxlY3RNdWx0aXBsZTogICAgICAgIHsgc2VsZWN0LnNldE11bHRpcGxlKHZhbHVlLnRvQm9vbGVh
bihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBTZWxlY3ROYW1lOiAgICAgICAgICAgIHsg
c2VsZWN0LnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFNlbGVjdFNpemU6ICAg
ICAgICAgICAgeyBzZWxlY3Quc2V0U2l6ZSh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9
Ci0gICAgICBjYXNlIFNlbGVjdFRhYkluZGV4OiAgICAgICAgeyBzZWxlY3Quc2V0VGFiSW5kZXgo
dmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQotICAgICAgfQotICAgIH0KLSAgICBicmVh
azsKLSAgICBjYXNlIElEX09QVEdST1VQOiB7Ci0gICAgICBIVE1MT3B0R3JvdXBFbGVtZW50SW1w
bCAmb3B0Z3JvdXAgPSBzdGF0aWNfY2FzdDxIVE1MT3B0R3JvdXBFbGVtZW50SW1wbCAmPihlbGVt
ZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgT3B0R3JvdXBEaXNhYmxl
ZDogICAgICAgIHsgb3B0Z3JvdXAuc2V0RGlzYWJsZWQodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsg
cmV0dXJuOyB9Ci0gICAgICBjYXNlIE9wdEdyb3VwTGFiZWw6ICAgICAgICAgICB7IG9wdGdyb3Vw
LnNldExhYmVsKHN0cik7IHJldHVybjsgfQotICAgICAgfQotICAgIH0KLSAgICBicmVhazsKLSAg
ICBjYXNlIElEX09QVElPTjogewotICAgICAgSFRNTE9wdGlvbkVsZW1lbnRJbXBsICZvcHRpb24g
PSBzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBz
d2l0Y2ggKHRva2VuKSB7Ci0gICAgICAvLyByZWFkLW9ubHk6IGZvcm0KLSAgICAgIGNhc2UgT3B0
aW9uRGVmYXVsdFNlbGVjdGVkOiB7IG9wdGlvbi5zZXREZWZhdWx0U2VsZWN0ZWQodmFsdWUudG9C
b29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIE9wdGlvblRleHQ6ICAgICAgICAg
ICAgeyBvcHRpb24uc2V0VGV4dChzdHIsIGV4Y2VwdGlvbik7IHJldHVybjsgfQotICAgICAgLy8g
cmVhZC1vbmx5OiBpbmRleAotICAgICAgY2FzZSBPcHRpb25EaXNhYmxlZDogICAgICAgIHsgb3B0
aW9uLnNldERpc2FibGVkKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQotICAgICAg
Y2FzZSBPcHRpb25MYWJlbDogICAgICAgICAgIHsgb3B0aW9uLnNldExhYmVsKHN0cik7IHJldHVy
bjsgfQotICAgICAgY2FzZSBPcHRpb25TZWxlY3RlZDogICAgICAgIHsgb3B0aW9uLnNldFNlbGVj
dGVkKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBPcHRpb25W
YWx1ZTogICAgICAgICAgIHsgb3B0aW9uLnNldFZhbHVlKHN0cik7IHJldHVybjsgfQotICAgICAg
fQotICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0lOUFVUOiB7Ci0gICAgICBIVE1MSW5w
dXRFbGVtZW50SW1wbCAmaW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50SW1wbCAm
PihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgSW5wdXREZWZh
dWx0VmFsdWU6ICAgIHsgaW5wdXQuc2V0RGVmYXVsdFZhbHVlKHN0cik7IHJldHVybjsgfQotICAg
ICAgY2FzZSBJbnB1dERlZmF1bHRDaGVja2VkOiAgeyBpbnB1dC5zZXREZWZhdWx0Q2hlY2tlZCh2
YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KLSAgICAgIC8vIHJlYWQtb25seTogZm9y
bQotICAgICAgY2FzZSBJbnB1dEFjY2VwdDogICAgICAgICAgeyBpbnB1dC5zZXRBY2NlcHQoc3Ry
KTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElucHV0QWNjZXNzS2V5OiAgICAgICB7IGlucHV0LnNl
dEFjY2Vzc0tleShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSW5wdXRBbGlnbjogICAgICAg
ICAgIHsgaW5wdXQuc2V0QWxpZ24oc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElucHV0QWx0
OiAgICAgICAgICAgICB7IGlucHV0LnNldEFsdChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2Ug
SW5wdXRDaGVja2VkOiAgICAgICAgIHsgaW5wdXQuc2V0Q2hlY2tlZCh2YWx1ZS50b0Jvb2xlYW4o
ZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSW5wdXREaXNhYmxlZDogICAgICAgIHsgaW5w
dXQuc2V0RGlzYWJsZWQodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBj
YXNlIElucHV0TWF4TGVuZ3RoOiAgICAgICB7IGlucHV0LnNldE1heExlbmd0aCh2YWx1ZS50b0lu
dDMyKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElucHV0TmFtZTogICAgICAgICAgICB7
IGlucHV0LnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElucHV0UmVhZE9ubHk6
ICAgICAgICB7IGlucHV0LnNldFJlYWRPbmx5KHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVy
bjsgfQotICAgICAgY2FzZSBJbnB1dFNlbGVjdGlvblN0YXJ0OiAgeyBpbnB1dC5zZXRTZWxlY3Rp
b25TdGFydCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElucHV0
U2VsZWN0aW9uRW5kOiAgICB7IGlucHV0LnNldFNlbGVjdGlvbkVuZCh2YWx1ZS50b0ludDMyKGV4
ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElucHV0U2l6ZTogICAgICAgICAgICB7IGlucHV0
LnNldFNpemUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElucHV0U3JjOiAgICAgICAgICAg
ICB7IGlucHV0LnNldFNyYyhzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSW5wdXRUYWJJbmRl
eDogICAgICAgIHsgaW5wdXQuc2V0VGFiSW5kZXgodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVy
bjsgfQotICAgICAgY2FzZSBJbnB1dFR5cGU6ICAgICAgICAgICAgeyBpbnB1dC5zZXRUeXBlKHN0
cik7IHJldHVybjsgfQotICAgICAgY2FzZSBJbnB1dFVzZU1hcDogICAgICAgICAgeyBpbnB1dC5z
ZXRVc2VNYXAoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElucHV0VmFsdWU6ICAgICAgICAg
ICB7IGlucHV0LnNldFZhbHVlKHN0cik7IHJldHVybjsgfQotICAgICAgfQotICAgIH0KLSAgICBi
cmVhazsKLSAgICBjYXNlIElEX1RFWFRBUkVBOiB7Ci0gICAgICBIVE1MVGV4dEFyZWFFbGVtZW50
SW1wbCAmdGV4dGFyZWEgPSBzdGF0aWNfY2FzdDxIVE1MVGV4dEFyZWFFbGVtZW50SW1wbCAmPihl
bGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgVGV4dEFyZWFEZWZh
dWx0VmFsdWU6ICAgIHsgdGV4dGFyZWEuc2V0RGVmYXVsdFZhbHVlKHN0cik7IHJldHVybjsgfQot
ICAgICAgLy8gcmVhZC1vbmx5OiBmb3JtCi0gICAgICBjYXNlIFRleHRBcmVhQWNjZXNzS2V5OiAg
ICAgICB7IHRleHRhcmVhLnNldEFjY2Vzc0tleShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2Ug
VGV4dEFyZWFDb2xzOiAgICAgICAgICAgIHsgdGV4dGFyZWEuc2V0Q29scyh2YWx1ZS50b0ludDMy
KGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRleHRBcmVhRGlzYWJsZWQ6ICAgICAgICB7
IHRleHRhcmVhLnNldERpc2FibGVkKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQot
ICAgICAgY2FzZSBUZXh0QXJlYU5hbWU6ICAgICAgICAgICAgeyB0ZXh0YXJlYS5zZXROYW1lKHN0
cik7IHJldHVybjsgfQotICAgICAgY2FzZSBUZXh0QXJlYVJlYWRPbmx5OiAgICAgICAgeyB0ZXh0
YXJlYS5zZXRSZWFkT25seSh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KLSAgICAg
IGNhc2UgVGV4dEFyZWFSb3dzOiAgICAgICAgICAgIHsgdGV4dGFyZWEuc2V0Um93cyh2YWx1ZS50
b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRleHRBcmVhU2VsZWN0aW9uU3Rh
cnQ6ICB7IHRleHRhcmVhLnNldFNlbGVjdGlvblN0YXJ0KHZhbHVlLnRvSW50MzIoZXhlYykpOyBy
ZXR1cm47IH0KLSAgICAgIGNhc2UgVGV4dEFyZWFTZWxlY3Rpb25FbmQ6ICAgIHsgdGV4dGFyZWEu
c2V0U2VsZWN0aW9uRW5kKHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNh
c2UgVGV4dEFyZWFUYWJJbmRleDogICAgICAgIHsgdGV4dGFyZWEuc2V0VGFiSW5kZXgodmFsdWUu
dG9JbnQzMihleGVjKSk7IHJldHVybjsgfQotICAgICAgLy8gcmVhZC1vbmx5OiB0eXBlCi0gICAg
ICBjYXNlIFRleHRBcmVhVmFsdWU6ICAgICAgICAgICB7IHRleHRhcmVhLnNldFZhbHVlKHN0cik7
IHJldHVybjsgfQotICAgICAgfQotICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0JVVFRP
TjogewotICAgICAgSFRNTEJ1dHRvbkVsZW1lbnRJbXBsICZidXR0b24gPSBzdGF0aWNfY2FzdDxI
VE1MQnV0dG9uRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7
Ci0gICAgICAvLyByZWFkLW9ubHk6IGZvcm0KLSAgICAgIGNhc2UgQnV0dG9uQWNjZXNzS2V5OiAg
ICAgICB7IGJ1dHRvbi5zZXRBY2Nlc3NLZXkoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEJ1
dHRvbkRpc2FibGVkOiAgICAgICAgeyBidXR0b24uc2V0RGlzYWJsZWQodmFsdWUudG9Cb29sZWFu
KGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEJ1dHRvbk5hbWU6ICAgICAgICAgICAgeyBi
dXR0b24uc2V0TmFtZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQnV0dG9uVGFiSW5kZXg6
ICAgICAgICB7IGJ1dHRvbi5zZXRUYWJJbmRleCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJu
OyB9Ci0gICAgICAvLyByZWFkLW9ubHk6IHR5cGUKLSAgICAgIGNhc2UgQnV0dG9uVmFsdWU6ICAg
ICAgICAgICB7IGJ1dHRvbi5zZXRWYWx1ZShzdHIpOyByZXR1cm47IH0KLSAgICAgIH0KLSAgICB9
Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9MQUJFTDogewotICAgICAgSFRNTExhYmVsRWxlbWVu
dEltcGwgJmxhYmVsID0gc3RhdGljX2Nhc3Q8SFRNTExhYmVsRWxlbWVudEltcGwgJj4oZWxlbWVu
dCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICAvLyByZWFkLW9ubHk6IGZvcm0KLSAg
ICAgIGNhc2UgTGFiZWxBY2Nlc3NLZXk6ICAgICAgIHsgbGFiZWwuc2V0QWNjZXNzS2V5KHN0cik7
IHJldHVybjsgfQotICAgICAgY2FzZSBMYWJlbEh0bWxGb3I6ICAgICAgICAgeyBsYWJlbC5zZXRI
dG1sRm9yKHN0cik7IHJldHVybjsgfQotICAgICAgfQotICAgIH0KLSAgICBicmVhazsKLSAgICBj
YXNlIElEX0xFR0VORDogewotICAgICAgSFRNTExlZ2VuZEVsZW1lbnRJbXBsICZsZWdlbmQgPSBz
dGF0aWNfY2FzdDxIVE1MTGVnZW5kRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0
Y2ggKHRva2VuKSB7Ci0gICAgICAvLyByZWFkLW9ubHk6IGZvcm0KLSAgICAgIGNhc2UgTGVnZW5k
QWNjZXNzS2V5OiAgICAgICB7IGxlZ2VuZC5zZXRBY2Nlc3NLZXkoc3RyKTsgcmV0dXJuOyB9Ci0g
ICAgICBjYXNlIExlZ2VuZEFsaWduOiAgICAgICAgICAgeyBsZWdlbmQuc2V0QWxpZ24oc3RyKTsg
cmV0dXJuOyB9Ci0gICAgICB9Ci0gICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfVUw6IHsK
LSAgICAgIEhUTUxVTGlzdEVsZW1lbnRJbXBsICZ1TGlzdCA9IHN0YXRpY19jYXN0PEhUTUxVTGlz
dEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAg
Y2FzZSBVTGlzdENvbXBhY3Q6ICAgICAgICAgeyB1TGlzdC5zZXRDb21wYWN0KHZhbHVlLnRvQm9v
bGVhbihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBVTGlzdFR5cGU6ICAgICAgICAgICAg
eyB1TGlzdC5zZXRUeXBlKHN0cik7IHJldHVybjsgfQotICAgICAgfQotICAgIH0KLSAgICBicmVh
azsKLSAgICBjYXNlIElEX09MOiB7Ci0gICAgICBIVE1MT0xpc3RFbGVtZW50SW1wbCAmb0xpc3Qg
PSBzdGF0aWNfY2FzdDxIVE1MT0xpc3RFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3
aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgT0xpc3RDb21wYWN0OiAgICAgICAgIHsgb0xpc3Qu
c2V0Q29tcGFjdCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2Ug
T0xpc3RTdGFydDogICAgICAgICAgIHsgb0xpc3Quc2V0U3RhcnQodmFsdWUudG9JbnQzMihleGVj
KSk7IHJldHVybjsgfQotICAgICAgY2FzZSBPTGlzdFR5cGU6ICAgICAgICAgICAgeyBvTGlzdC5z
ZXRUeXBlKHN0cik7IHJldHVybjsgfQotICAgICAgfQotICAgIH0KLSAgICBicmVhazsKLSAgICBj
YXNlIElEX0RMOiB7Ci0gICAgICBIVE1MRExpc3RFbGVtZW50SW1wbCAmZExpc3QgPSBzdGF0aWNf
Y2FzdDxIVE1MRExpc3RFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9r
ZW4pIHsKLSAgICAgIGNhc2UgRExpc3RDb21wYWN0OiAgICAgICAgIHsgZExpc3Quc2V0Q29tcGFj
dCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KLSAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgLy8gcmVhZC1vbmx5OiBmb3JtCisg
ICAgICAgIC8vIHJlYWQtb25seTogb3B0aW9ucworICAgICAgICBjYXNlIFNlbGVjdERpc2FibGVk
OiAgICAgICAgeyBzZWxlY3Quc2V0RGlzYWJsZWQodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0
dXJuOyB9CisgICAgICAgIGNhc2UgU2VsZWN0TXVsdGlwbGU6ICAgICAgICB7IHNlbGVjdC5zZXRN
dWx0aXBsZSh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBT
ZWxlY3ROYW1lOiAgICAgICAgICAgIHsgc2VsZWN0LnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9Cisg
ICAgICAgIGNhc2UgU2VsZWN0U2l6ZTogICAgICAgICAgICB7IHNlbGVjdC5zZXRTaXplKHZhbHVl
LnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBTZWxlY3RUYWJJbmRleDog
ICAgICAgIHsgc2VsZWN0LnNldFRhYkluZGV4KHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47
IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9ESVI6IHsKLSAgICAgIEhUTUxEaXJl
Y3RvcnlFbGVtZW50SW1wbCAmZGlyZWN0b3J5ID0gc3RhdGljX2Nhc3Q8SFRNTERpcmVjdG9yeUVs
ZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgY2Fz
ZSBEaXJlY3RvcnlDb21wYWN0OiAgICAgeyBkaXJlY3Rvcnkuc2V0Q29tcGFjdCh2YWx1ZS50b0Jv
b2xlYW4oZXhlYykpOyByZXR1cm47IH0KLSAgICAgIH0KLSAgICB9Ci0gICAgYnJlYWs7Ci0gICAg
Y2FzZSBJRF9NRU5VOiB7Ci0gICAgICBIVE1MTWVudUVsZW1lbnRJbXBsICZtZW51ID0gc3RhdGlj
X2Nhc3Q8SFRNTE1lbnVFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9r
ZW4pIHsKLSAgICAgIGNhc2UgTWVudUNvbXBhY3Q6ICAgICAgICAgeyBtZW51LnNldENvbXBhY3Qo
dmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICB9Ci0gICAgfQotICAgIGJy
ZWFrOwotICAgIGNhc2UgSURfTEk6IHsKLSAgICAgIEhUTUxMSUVsZW1lbnRJbXBsICZsaSA9IHN0
YXRpY19jYXN0PEhUTUxMSUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0
b2tlbikgewotICAgICAgY2FzZSBMSVR5cGU6ICAgICAgICAgICAgeyBsaS5zZXRUeXBlKHN0cik7
IHJldHVybjsgfQotICAgICAgY2FzZSBMSVZhbHVlOiAgICAgICAgICAgeyBsaS5zZXRWYWx1ZSh2
YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICB9Cit9CisKK3ZvaWQgSFRNTEVs
ZW1lbnQ6Om9wdEdyb3VwU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBW
YWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTE9wdEdy
b3VwRWxlbWVudEltcGwmIG9wdGdyb3VwID0gKnN0YXRpY19jYXN0PEhUTUxPcHRHcm91cEVsZW1l
bnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgT3B0
R3JvdXBEaXNhYmxlZDogICAgICAgIHsgb3B0Z3JvdXAuc2V0RGlzYWJsZWQodmFsdWUudG9Cb29s
ZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgT3B0R3JvdXBMYWJlbDogICAgICAg
ICAgIHsgb3B0Z3JvdXAuc2V0TGFiZWwoc3RyKTsgcmV0dXJuOyB9CiAgICAgfQotICAgIGJyZWFr
OwotICAgIGNhc2UgSURfRElWOiB7Ci0gICAgICBIVE1MRGl2RWxlbWVudEltcGwgJmRpdiA9IHN0
YXRpY19jYXN0PEhUTUxEaXZFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAo
dG9rZW4pIHsKLSAgICAgIGNhc2UgRGl2QWxpZ246ICAgICAgICAgICB7IGRpdi5zZXRBbGlnbihz
dHIpOyByZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6b3B0aW9uU2V0
dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0
IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgRE9NRXhjZXB0aW9uVHJhbnNsYXRvciBleGNl
cHRpb24oZXhlYyk7CisgICAgSFRNTE9wdGlvbkVsZW1lbnRJbXBsJiBvcHRpb24gPSAqc3RhdGlj
X2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2Vu
KSB7CisgICAgICAgIC8vIHJlYWQtb25seTogZm9ybQorICAgICAgICBjYXNlIE9wdGlvbkRlZmF1
bHRTZWxlY3RlZDogeyBvcHRpb24uc2V0RGVmYXVsdFNlbGVjdGVkKHZhbHVlLnRvQm9vbGVhbihl
eGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIE9wdGlvblRleHQ6ICAgICAgICAgICAgeyBv
cHRpb24uc2V0VGV4dChzdHIsIGV4Y2VwdGlvbik7IHJldHVybjsgfQorICAgICAgICAvLyByZWFk
LW9ubHk6IGluZGV4CisgICAgICAgIGNhc2UgT3B0aW9uRGlzYWJsZWQ6ICAgICAgICB7IG9wdGlv
bi5zZXREaXNhYmxlZCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAg
Y2FzZSBPcHRpb25MYWJlbDogICAgICAgICAgIHsgb3B0aW9uLnNldExhYmVsKHN0cik7IHJldHVy
bjsgfQorICAgICAgICBjYXNlIE9wdGlvblNlbGVjdGVkOiAgICAgICAgeyBvcHRpb24uc2V0U2Vs
ZWN0ZWQodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgT3B0
aW9uVmFsdWU6ICAgICAgICAgICB7IG9wdGlvbi5zZXRWYWx1ZShzdHIpOyByZXR1cm47IH0KICAg
ICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9QOiB7Ci0gICAgICBIVE1MUGFyYWdyYXBoRWxl
bWVudEltcGwgJnBhcmFncmFwaCA9IHN0YXRpY19jYXN0PEhUTUxQYXJhZ3JhcGhFbGVtZW50SW1w
bCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgUGFyYWdy
YXBoQWxpZ246ICAgICB7IHBhcmFncmFwaC5zZXRBbGlnbihzdHIpOyByZXR1cm47IH0KLSAgICAg
IH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6aW5wdXRTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikK
K3sKKyAgICBIVE1MSW5wdXRFbGVtZW50SW1wbCYgaW5wdXQgPSAqc3RhdGljX2Nhc3Q8SFRNTElu
cHV0RWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAg
Y2FzZSBJbnB1dERlZmF1bHRWYWx1ZTogICAgeyBpbnB1dC5zZXREZWZhdWx0VmFsdWUoc3RyKTsg
cmV0dXJuOyB9CisgICAgICAgIGNhc2UgSW5wdXREZWZhdWx0Q2hlY2tlZDogIHsgaW5wdXQuc2V0
RGVmYXVsdENoZWNrZWQodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAg
IC8vIHJlYWQtb25seTogZm9ybQorICAgICAgICBjYXNlIElucHV0QWNjZXB0OiAgICAgICAgICB7
IGlucHV0LnNldEFjY2VwdChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJbnB1dEFjY2Vz
c0tleTogICAgICAgeyBpbnB1dC5zZXRBY2Nlc3NLZXkoc3RyKTsgcmV0dXJuOyB9CisgICAgICAg
IGNhc2UgSW5wdXRBbGlnbjogICAgICAgICAgIHsgaW5wdXQuc2V0QWxpZ24oc3RyKTsgcmV0dXJu
OyB9CisgICAgICAgIGNhc2UgSW5wdXRBbHQ6ICAgICAgICAgICAgIHsgaW5wdXQuc2V0QWx0KHN0
cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIElucHV0Q2hlY2tlZDogICAgICAgICB7IGlucHV0
LnNldENoZWNrZWQodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNh
c2UgSW5wdXREaXNhYmxlZDogICAgICAgIHsgaW5wdXQuc2V0RGlzYWJsZWQodmFsdWUudG9Cb29s
ZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgSW5wdXRNYXhMZW5ndGg6ICAgICAg
IHsgaW5wdXQuc2V0TWF4TGVuZ3RoKHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KKyAg
ICAgICAgY2FzZSBJbnB1dE5hbWU6ICAgICAgICAgICAgeyBpbnB1dC5zZXROYW1lKHN0cik7IHJl
dHVybjsgfQorICAgICAgICBjYXNlIElucHV0UmVhZE9ubHk6ICAgICAgICB7IGlucHV0LnNldFJl
YWRPbmx5KHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIElu
cHV0U2l6ZTogICAgICAgICAgICB7IGlucHV0LnNldFNpemUoc3RyKTsgcmV0dXJuOyB9CisgICAg
ICAgIGNhc2UgSW5wdXRTZWxlY3Rpb25TdGFydDogIHsgaW5wdXQuc2V0U2VsZWN0aW9uU3RhcnQo
dmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIElucHV0U2VsZWN0
aW9uRW5kOiAgICB7IGlucHV0LnNldFNlbGVjdGlvbkVuZCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsg
cmV0dXJuOyB9CisgICAgICAgIGNhc2UgSW5wdXRTcmM6ICAgICAgICAgICAgIHsgaW5wdXQuc2V0
U3JjKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIElucHV0VGFiSW5kZXg6ICAgICAgICB7
IGlucHV0LnNldFRhYkluZGV4KHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KKyAgICAg
ICAgY2FzZSBJbnB1dFR5cGU6ICAgICAgICAgICAgeyBpbnB1dC5zZXRUeXBlKHN0cik7IHJldHVy
bjsgfQorICAgICAgICBjYXNlIElucHV0VXNlTWFwOiAgICAgICAgICB7IGlucHV0LnNldFVzZU1h
cChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJbnB1dFZhbHVlOiAgICAgICAgICAgeyBp
bnB1dC5zZXRWYWx1ZShzdHIpOyByZXR1cm47IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2Fz
ZSBJRF9IMToKLSAgICBjYXNlIElEX0gyOgotICAgIGNhc2UgSURfSDM6Ci0gICAgY2FzZSBJRF9I
NDoKLSAgICBjYXNlIElEX0g1OgotICAgIGNhc2UgSURfSDY6IHsKLSAgICAgIEhUTUxIZWFkaW5n
RWxlbWVudEltcGwgJmhlYWRpbmcgPSBzdGF0aWNfY2FzdDxIVE1MSGVhZGluZ0VsZW1lbnRJbXBs
ICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgY2FzZSBIZWFkaW5n
QWxpZ246ICAgICAgICAgeyBoZWFkaW5nLnNldEFsaWduKHN0cik7IHJldHVybjsgfQotICAgICAg
fQorfQorCit2b2lkIEhUTUxFbGVtZW50Ojp0ZXh0QXJlYVNldHRlcihFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3Ry
KQoreworICAgIEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBsJiB0ZXh0YXJlYSA9ICpzdGF0aWNfY2Fz
dDxIVE1MVGV4dEFyZWFFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikg
eworICAgICAgICBjYXNlIFRleHRBcmVhRGVmYXVsdFZhbHVlOiAgICB7IHRleHRhcmVhLnNldERl
ZmF1bHRWYWx1ZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgLy8gcmVhZC1vbmx5OiBmb3JtCisg
ICAgICAgIGNhc2UgVGV4dEFyZWFBY2Nlc3NLZXk6ICAgICAgIHsgdGV4dGFyZWEuc2V0QWNjZXNz
S2V5KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRleHRBcmVhQ29sczogICAgICAgICAg
ICB7IHRleHRhcmVhLnNldENvbHModmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQorICAg
ICAgICBjYXNlIFRleHRBcmVhRGlzYWJsZWQ6ICAgICAgICB7IHRleHRhcmVhLnNldERpc2FibGVk
KHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRleHRBcmVh
TmFtZTogICAgICAgICAgICB7IHRleHRhcmVhLnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9CisgICAg
ICAgIGNhc2UgVGV4dEFyZWFSZWFkT25seTogICAgICAgIHsgdGV4dGFyZWEuc2V0UmVhZE9ubHko
dmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGV4dEFyZWFS
b3dzOiAgICAgICAgICAgIHsgdGV4dGFyZWEuc2V0Um93cyh2YWx1ZS50b0ludDMyKGV4ZWMpKTsg
cmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGV4dEFyZWFTZWxlY3Rpb25TdGFydDogIHsgdGV4dGFy
ZWEuc2V0U2VsZWN0aW9uU3RhcnQodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQorICAg
ICAgICBjYXNlIFRleHRBcmVhU2VsZWN0aW9uRW5kOiAgICB7IHRleHRhcmVhLnNldFNlbGVjdGlv
bkVuZCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGV4dEFy
ZWFUYWJJbmRleDogICAgICAgIHsgdGV4dGFyZWEuc2V0VGFiSW5kZXgodmFsdWUudG9JbnQzMihl
eGVjKSk7IHJldHVybjsgfQorICAgICAgICAvLyByZWFkLW9ubHk6IHR5cGUKKyAgICAgICAgY2Fz
ZSBUZXh0QXJlYVZhbHVlOiAgICAgICAgICAgeyB0ZXh0YXJlYS5zZXRWYWx1ZShzdHIpOyByZXR1
cm47IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9CTE9DS1FVT1RFOiB7Ci0gICAg
ICBIVE1MQmxvY2txdW90ZUVsZW1lbnRJbXBsICZibG9ja3F1b3RlID0gc3RhdGljX2Nhc3Q8SFRN
TEJsb2NrcXVvdGVFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4p
IHsKLSAgICAgIGNhc2UgQmxvY2tRdW90ZUNpdGU6ICAgICAgIHsgYmxvY2txdW90ZS5zZXRDaXRl
KHN0cik7IHJldHVybjsgfQotICAgICAgfQorfQorCit2b2lkIEhUTUxFbGVtZW50OjpidXR0b25T
ZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29u
c3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MQnV0dG9uRWxlbWVudEltcGwmIGJ1
dHRvbiA9ICpzdGF0aWNfY2FzdDxIVE1MQnV0dG9uRWxlbWVudEltcGwqPihpbXBsKCkpOworICAg
IHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgLy8gcmVhZC1vbmx5OiBmb3JtCisgICAgICAgIGNh
c2UgQnV0dG9uQWNjZXNzS2V5OiAgICAgICB7IGJ1dHRvbi5zZXRBY2Nlc3NLZXkoc3RyKTsgcmV0
dXJuOyB9CisgICAgICAgIGNhc2UgQnV0dG9uRGlzYWJsZWQ6ICAgICAgICB7IGJ1dHRvbi5zZXRE
aXNhYmxlZCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBC
dXR0b25OYW1lOiAgICAgICAgICAgIHsgYnV0dG9uLnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9Cisg
ICAgICAgIGNhc2UgQnV0dG9uVGFiSW5kZXg6ICAgICAgICB7IGJ1dHRvbi5zZXRUYWJJbmRleCh2
YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIC8vIHJlYWQtb25seTogdHlw
ZQorICAgICAgICBjYXNlIEJ1dHRvblZhbHVlOiAgICAgICAgICAgeyBidXR0b24uc2V0VmFsdWUo
c3RyKTsgcmV0dXJuOyB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfUTogewotICAg
ICAgSFRNTFF1b3RlRWxlbWVudEltcGwgJnF1b3RlID0gc3RhdGljX2Nhc3Q8SFRNTFF1b3RlRWxl
bWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNl
IFF1b3RlQ2l0ZTogICAgICAgICAgICB7IHF1b3RlLnNldENpdGUoc3RyKTsgcmV0dXJuOyB9Ci0g
ICAgICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OmxhYmVsU2V0dGVyKEV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBz
dHIpCit7CisgICAgSFRNTExhYmVsRWxlbWVudEltcGwmIGxhYmVsID0gKnN0YXRpY19jYXN0PEhU
TUxMYWJlbEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAg
ICAgIC8vIHJlYWQtb25seTogZm9ybQorICAgICAgICBjYXNlIExhYmVsQWNjZXNzS2V5OiAgICAg
ICB7IGxhYmVsLnNldEFjY2Vzc0tleShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBMYWJl
bEh0bWxGb3I6ICAgICAgICAgeyBsYWJlbC5zZXRIdG1sRm9yKHN0cik7IHJldHVybjsgfQogICAg
IH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX1BSRTogewotICAgICAgSFRNTFByZUVsZW1lbnRJ
bXBsICZwcmUgPSBzdGF0aWNfY2FzdDxIVE1MUHJlRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0g
ICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIFByZVdpZHRoOiAgICAgICAgICAgeyBw
cmUuc2V0V2lkdGgodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQotICAgICAgfQorfQor
Cit2b2lkIEhUTUxFbGVtZW50OjpmaWVsZFNldFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQorewor
fQorCit2b2lkIEhUTUxFbGVtZW50OjpsZWdlbmRTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sK
KyAgICBIVE1MTGVnZW5kRWxlbWVudEltcGwmIGxlZ2VuZCA9ICpzdGF0aWNfY2FzdDxIVE1MTGVn
ZW5kRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAg
Ly8gcmVhZC1vbmx5OiBmb3JtCisgICAgICAgIGNhc2UgTGVnZW5kQWNjZXNzS2V5OiAgICAgICB7
IGxlZ2VuZC5zZXRBY2Nlc3NLZXkoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgTGVnZW5k
QWxpZ246ICAgICAgICAgICB7IGxlZ2VuZC5zZXRBbGlnbihzdHIpOyByZXR1cm47IH0KICAgICB9
Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9CUjogewotICAgICAgSFRNTEJSRWxlbWVudEltcGwg
JmJyID0gc3RhdGljX2Nhc3Q8SFRNTEJSRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBz
d2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIEJSQ2xlYXI6ICAgICAgICAgICB7IGJyLnNldENs
ZWFyKHN0cik7IHJldHVybjsgfQotICAgICAgfQorfQorCit2b2lkIEhUTUxFbGVtZW50Ojp1TGlz
dFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBj
b25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxVTGlzdEVsZW1lbnRJbXBsJiB1
TGlzdCA9ICpzdGF0aWNfY2FzdDxIVE1MVUxpc3RFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAg
c3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNlIFVMaXN0Q29tcGFjdDogICAgICAgICB7IHVM
aXN0LnNldENvbXBhY3QodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAg
IGNhc2UgVUxpc3RUeXBlOiAgICAgICAgICAgIHsgdUxpc3Quc2V0VHlwZShzdHIpOyByZXR1cm47
IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9CQVNFRk9OVDogewotICAgICAgSFRN
TEJhc2VGb250RWxlbWVudEltcGwgJmJhc2VGb250ID0gc3RhdGljX2Nhc3Q8SFRNTEJhc2VGb250
RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBj
YXNlIEJhc2VGb250Q29sb3I6ICAgICAgICAgICB7IGJhc2VGb250LnNldENvbG9yKHN0cik7IHJl
dHVybjsgfQotICAgICAgY2FzZSBCYXNlRm9udEZhY2U6ICAgICAgICAgICAgeyBiYXNlRm9udC5z
ZXRGYWNlKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBCYXNlRm9udFNpemU6ICAgICAgICAg
ICAgeyBiYXNlRm9udC5zZXRTaXplKHN0cik7IHJldHVybjsgfQotICAgICAgfQorfQorCit2b2lk
IEhUTUxFbGVtZW50OjpvTGlzdFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29u
c3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxP
TGlzdEVsZW1lbnRJbXBsJiBvTGlzdCA9ICpzdGF0aWNfY2FzdDxIVE1MT0xpc3RFbGVtZW50SW1w
bCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNlIE9MaXN0Q29t
cGFjdDogICAgICAgICB7IG9MaXN0LnNldENvbXBhY3QodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsg
cmV0dXJuOyB9CisgICAgICAgIGNhc2UgT0xpc3RTdGFydDogICAgICAgICAgIHsgb0xpc3Quc2V0
U3RhcnQodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIE9MaXN0
VHlwZTogICAgICAgICAgICB7IG9MaXN0LnNldFR5cGUoc3RyKTsgcmV0dXJuOyB9CiAgICAgfQot
ICAgIGJyZWFrOwotICAgIGNhc2UgSURfRk9OVDogewotICAgICAgSFRNTEZvbnRFbGVtZW50SW1w
bCAmZm9udCA9IHN0YXRpY19jYXN0PEhUTUxGb250RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0g
ICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIEZvbnRDb2xvcjogICAgICAgICAgIHsg
Zm9udC5zZXRDb2xvcihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgRm9udEZhY2U6ICAgICAg
ICAgICAgeyBmb250LnNldEZhY2Uoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEZvbnRTaXpl
OiAgICAgICAgICAgIHsgZm9udC5zZXRTaXplKHN0cik7IHJldHVybjsgfQotICAgICAgfQorfQor
Cit2b2lkIEhUTUxFbGVtZW50OjpkTGlzdFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
biwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAg
IEhUTUxETGlzdEVsZW1lbnRJbXBsJiBkTGlzdCA9ICpzdGF0aWNfY2FzdDxIVE1MRExpc3RFbGVt
ZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IERMaXN0Q29tcGFjdCkKKyAgICAg
ICAgZExpc3Quc2V0Q29tcGFjdCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOworfQorCit2b2lkIEhU
TUxFbGVtZW50OjpkaXJTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZh
bHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MRGlyZWN0
b3J5RWxlbWVudEltcGwmIGRpcmVjdG9yeSA9ICpzdGF0aWNfY2FzdDxIVE1MRGlyZWN0b3J5RWxl
bWVudEltcGwqPihpbXBsKCkpOworICAgIGlmICh0b2tlbiA9PSBEaXJlY3RvcnlDb21wYWN0KQor
ICAgICAgICBkaXJlY3Rvcnkuc2V0Q29tcGFjdCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOworfQor
Cit2b2lkIEhUTUxFbGVtZW50OjptZW51U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
LCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAg
SFRNTE1lbnVFbGVtZW50SW1wbCYgbWVudSA9ICpzdGF0aWNfY2FzdDxIVE1MTWVudUVsZW1lbnRJ
bXBsKj4oaW1wbCgpKTsKKyAgICBpZiAodG9rZW4gPT0gTWVudUNvbXBhY3QpCisgICAgICAgIG1l
bnUuc2V0Q29tcGFjdCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOworfQorCit2b2lkIEhUTUxFbGVt
ZW50OjpsaVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZh
bHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxMSUVsZW1lbnRJbXBs
JiBsaSA9ICpzdGF0aWNfY2FzdDxIVE1MTElFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dp
dGNoICh0b2tlbikgeworICAgICAgICBjYXNlIExJVHlwZTogICAgICAgICAgICB7IGxpLnNldFR5
cGUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgTElWYWx1ZTogICAgICAgICAgIHsgbGku
c2V0VmFsdWUodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQogICAgIH0KLSAgICBicmVh
azsKLSAgICBjYXNlIElEX0hSOiB7Ci0gICAgICBIVE1MSFJFbGVtZW50SW1wbCAmaHIgPSBzdGF0
aWNfY2FzdDxIVE1MSFJFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9r
ZW4pIHsKLSAgICAgIGNhc2UgSFJBbGlnbjogICAgICAgICAgIHsgaHIuc2V0QWxpZ24oc3RyKTsg
cmV0dXJuOyB9Ci0gICAgICBjYXNlIEhSTm9TaGFkZTogICAgICAgICB7IGhyLnNldE5vU2hhZGUo
dmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEhSU2l6ZTogICAg
ICAgICAgICB7IGhyLnNldFNpemUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEhSV2lkdGg6
ICAgICAgICAgICB7IGhyLnNldFdpZHRoKHN0cik7IHJldHVybjsgfQotICAgICAgfQorfQorCit2
b2lkIEhUTUxFbGVtZW50OjpkaXZTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNv
bnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1M
RGl2RWxlbWVudEltcGwmIGRpdiA9ICpzdGF0aWNfY2FzdDxIVE1MRGl2RWxlbWVudEltcGwqPihp
bXBsKCkpOworICAgIGlmICh0b2tlbiA9PSBEaXZBbGlnbikKKyAgICAgICAgZGl2LnNldEFsaWdu
KHN0cik7Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OnBhcmFncmFwaFNldHRlcihFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmlu
ZyYgc3RyKQoreworICAgIEhUTUxQYXJhZ3JhcGhFbGVtZW50SW1wbCYgcGFyYWdyYXBoID0gKnN0
YXRpY19jYXN0PEhUTUxQYXJhZ3JhcGhFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRv
a2VuID09IFBhcmFncmFwaEFsaWduKQorICAgICAgICBwYXJhZ3JhcGguc2V0QWxpZ24oc3RyKTsK
K30KKwordm9pZCBIVE1MRWxlbWVudDo6aGVhZGluZ1NldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQor
eworICAgIEhUTUxIZWFkaW5nRWxlbWVudEltcGwmIGhlYWRpbmcgPSAqc3RhdGljX2Nhc3Q8SFRN
TEhlYWRpbmdFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IEhlYWRpbmdB
bGlnbikKKyAgICAgICAgaGVhZGluZy5zZXRBbGlnbihzdHIpOworfQorCit2b2lkIEhUTUxFbGVt
ZW50OjpibG9ja1F1b3RlU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBW
YWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTEJsb2Nr
cXVvdGVFbGVtZW50SW1wbCYgYmxvY2tRdW90ZSA9ICpzdGF0aWNfY2FzdDxIVE1MQmxvY2txdW90
ZUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBpZiAodG9rZW4gPT0gQmxvY2tRdW90ZUNpdGUp
CisgICAgICAgIGJsb2NrUXVvdGUuc2V0Q2l0ZShzdHIpOworfQorCit2b2lkIEhUTUxFbGVtZW50
OjpxdW90ZVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZh
bHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxRdW90ZUVsZW1lbnRJ
bXBsJiBxdW90ZSA9ICpzdGF0aWNfY2FzdDxIVE1MUXVvdGVFbGVtZW50SW1wbCo+KGltcGwoKSk7
CisgICAgaWYgKHRva2VuID09IFF1b3RlQ2l0ZSkKKyAgICAgICAgcXVvdGUuc2V0Q2l0ZShzdHIp
OworfQorCit2b2lkIEhUTUxFbGVtZW50OjpwcmVTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sK
KyAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yICd3cmFwJyB3aGVuIHdoaXRlLXNwYWNlOiBw
cmUtd3JhcCBpcyBpbXBsZW1lbnRlZC4KKyAgICBIVE1MUHJlRWxlbWVudEltcGwmIHByZSA9ICpz
dGF0aWNfY2FzdDxIVE1MUHJlRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIGlmICh0b2tlbiA9
PSBQcmVXaWR0aCkKKyAgICAgICAgcHJlLnNldFdpZHRoKHZhbHVlLnRvSW50MzIoZXhlYykpOwor
fQorCit2b2lkIEhUTUxFbGVtZW50OjpiclNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
biwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAg
IEhUTUxCUkVsZW1lbnRJbXBsJiBiciA9ICpzdGF0aWNfY2FzdDxIVE1MQlJFbGVtZW50SW1wbCo+
KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IEJSQ2xlYXIpCisgICAgICAgIGJyLnNldENsZWFy
KHN0cik7Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OmJhc2VGb250U2V0dGVyKEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5n
JiBzdHIpCit7CisgICAgSFRNTEJhc2VGb250RWxlbWVudEltcGwmIGJhc2VGb250ID0gKnN0YXRp
Y19jYXN0PEhUTUxCYXNlRm9udEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRv
a2VuKSB7CisgICAgICAgIGNhc2UgQmFzZUZvbnRDb2xvcjogICAgICAgICAgIHsgYmFzZUZvbnQu
c2V0Q29sb3Ioc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQmFzZUZvbnRGYWNlOiAgICAg
ICAgICAgIHsgYmFzZUZvbnQuc2V0RmFjZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBC
YXNlRm9udFNpemU6ICAgICAgICAgICAgeyBiYXNlRm9udC5zZXRTaXplKHN0cik7IHJldHVybjsg
fQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0lOUzoKLSAgICBjYXNlIElEX0RFTDog
ewotICAgICAgSFRNTE1vZEVsZW1lbnRJbXBsICZtb2QgPSBzdGF0aWNfY2FzdDxIVE1MTW9kRWxl
bWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNl
IE1vZENpdGU6ICAgICAgICAgICAgeyBtb2Quc2V0Q2l0ZShzdHIpOyByZXR1cm47IH0KLSAgICAg
IGNhc2UgTW9kRGF0ZVRpbWU6ICAgICAgICB7IG1vZC5zZXREYXRlVGltZShzdHIpOyByZXR1cm47
IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6Zm9udFNldHRlcihFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmlu
ZyYgc3RyKQoreworICAgIEhUTUxGb250RWxlbWVudEltcGwmIGZvbnQgPSAqc3RhdGljX2Nhc3Q8
SFRNTEZvbnRFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAg
ICAgICBjYXNlIEZvbnRDb2xvcjogICAgICAgICAgIHsgZm9udC5zZXRDb2xvcihzdHIpOyByZXR1
cm47IH0KKyAgICAgICAgY2FzZSBGb250RmFjZTogICAgICAgICAgICB7IGZvbnQuc2V0RmFjZShz
dHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBGb250U2l6ZTogICAgICAgICAgICB7IGZvbnQu
c2V0U2l6ZShzdHIpOyByZXR1cm47IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9B
OiB7Ci0gICAgICBIVE1MQW5jaG9yRWxlbWVudEltcGwgJmFuY2hvciA9IHN0YXRpY19jYXN0PEhU
TUxBbmNob3JFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsK
LSAgICAgIGNhc2UgQW5jaG9yQWNjZXNzS2V5OiAgICAgICB7IGFuY2hvci5zZXRBY2Nlc3NLZXko
c3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEFuY2hvckNoYXJzZXQ6ICAgICAgICAgeyBhbmNo
b3Iuc2V0Q2hhcnNldChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQW5jaG9yQ29vcmRzOiAg
ICAgICAgICB7IGFuY2hvci5zZXRDb29yZHMoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEFu
Y2hvckhyZWY6ICAgICAgICAgICAgeyBhbmNob3Iuc2V0SHJlZihzdHIpOyByZXR1cm47IH0KLSAg
ICAgIGNhc2UgQW5jaG9ySHJlZkxhbmc6ICAgICAgICB7IGFuY2hvci5zZXRIcmVmbGFuZyhzdHIp
OyByZXR1cm47IH0KLSAgICAgIGNhc2UgQW5jaG9yTmFtZTogICAgICAgICAgICB7IGFuY2hvci5z
ZXROYW1lKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBBbmNob3JSZWw6ICAgICAgICAgICAg
IHsgYW5jaG9yLnNldFJlbChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQW5jaG9yUmV2OiAg
ICAgICAgICAgICB7IGFuY2hvci5zZXRSZXYoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEFu
Y2hvclNoYXBlOiAgICAgICAgICAgeyBhbmNob3Iuc2V0U2hhcGUoc3RyKTsgcmV0dXJuOyB9Ci0g
ICAgICBjYXNlIEFuY2hvclRhYkluZGV4OiAgICAgICAgeyBhbmNob3Iuc2V0VGFiSW5kZXgodmFs
dWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBBbmNob3JUYXJnZXQ6ICAg
ICAgICAgIHsgYW5jaG9yLnNldFRhcmdldChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQW5j
aG9yVHlwZTogICAgICAgICAgICB7IGFuY2hvci5zZXRUeXBlKHN0cik7IHJldHVybjsgfQotICAg
ICAgfQorfQorCit2b2lkIEhUTUxFbGVtZW50OjpoclNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQor
eworICAgIEhUTUxIUkVsZW1lbnRJbXBsJiBociA9ICpzdGF0aWNfY2FzdDxIVE1MSFJFbGVtZW50
SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNlIEhSQWxp
Z246ICAgICAgICAgICB7IGhyLnNldEFsaWduKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNl
IEhSTm9TaGFkZTogICAgICAgICB7IGhyLnNldE5vU2hhZGUodmFsdWUudG9Cb29sZWFuKGV4ZWMp
KTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgSFJTaXplOiAgICAgICAgICAgIHsgaHIuc2V0U2l6
ZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBIUldpZHRoOiAgICAgICAgICAgeyBoci5z
ZXRXaWR0aChzdHIpOyByZXR1cm47IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9J
TUc6IHsKLSAgICAgIEhUTUxJbWFnZUVsZW1lbnRJbXBsICZpbWFnZSA9IHN0YXRpY19jYXN0PEhU
TUxJbWFnZUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewot
ICAgICAgY2FzZSBJbWFnZU5hbWU6ICAgICAgICAgICAgeyBpbWFnZS5zZXROYW1lKHN0cik7IHJl
dHVybjsgfQotICAgICAgY2FzZSBJbWFnZUFsaWduOiAgICAgICAgICAgeyBpbWFnZS5zZXRBbGln
bihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSW1hZ2VBbHQ6ICAgICAgICAgICAgIHsgaW1h
Z2Uuc2V0QWx0KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBJbWFnZUJvcmRlcjogICAgICAg
ICAgeyBpbWFnZS5zZXRCb3JkZXIodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQotICAg
ICAgY2FzZSBJbWFnZUhlaWdodDogICAgICAgICAgeyBpbWFnZS5zZXRIZWlnaHQodmFsdWUudG9J
bnQzMihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBJbWFnZUhzcGFjZTogICAgICAgICAg
eyBpbWFnZS5zZXRIc3BhY2UodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQotICAgICAg
Y2FzZSBJbWFnZUlzTWFwOiAgICAgICAgICAgeyBpbWFnZS5zZXRJc01hcCh2YWx1ZS50b0Jvb2xl
YW4oZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSW1hZ2VMb25nRGVzYzogICAgICAgIHsg
aW1hZ2Uuc2V0TG9uZ0Rlc2Moc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEltYWdlU3JjOiAg
ICAgICAgICAgICB7IGltYWdlLnNldFNyYyhzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSW1h
Z2VVc2VNYXA6ICAgICAgICAgIHsgaW1hZ2Uuc2V0VXNlTWFwKHN0cik7IHJldHVybjsgfQotICAg
ICAgY2FzZSBJbWFnZVZzcGFjZTogICAgICAgICAgeyBpbWFnZS5zZXRWc3BhY2UodmFsdWUudG9J
bnQzMihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBJbWFnZVdpZHRoOiAgICAgICAgICAg
eyBpbWFnZS5zZXRXaWR0aCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICB9
Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6Om1vZFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQorewor
ICAgIEhUTUxNb2RFbGVtZW50SW1wbCYgbW9kID0gKnN0YXRpY19jYXN0PEhUTUxNb2RFbGVtZW50
SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNlIE1vZENp
dGU6ICAgICAgICAgICAgeyBtb2Quc2V0Q2l0ZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2Fz
ZSBNb2REYXRlVGltZTogICAgICAgIHsgbW9kLnNldERhdGVUaW1lKHN0cik7IHJldHVybjsgfQog
ICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX09CSkVDVDogewotICAgICAgSFRNTE9iamVj
dEVsZW1lbnRJbXBsICZvYmplY3QgPSBzdGF0aWNfY2FzdDxIVE1MT2JqZWN0RWxlbWVudEltcGwg
Jj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICAvLyByZWFkLW9ubHk6
IGZvcm0KLSAgICAgIGNhc2UgT2JqZWN0Q29kZTogICAgICAgICAgICAgICAgIHsgb2JqZWN0LnNl
dENvZGUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIE9iamVjdEFsaWduOiAgICAgICAgICAg
eyBvYmplY3Quc2V0QWxpZ24oc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIE9iamVjdEFyY2hp
dmU6ICAgICAgICAgeyBvYmplY3Quc2V0QXJjaGl2ZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNh
c2UgT2JqZWN0Qm9yZGVyOiAgICAgICAgICB7IG9iamVjdC5zZXRCb3JkZXIoc3RyKTsgcmV0dXJu
OyB9Ci0gICAgICBjYXNlIE9iamVjdENvZGVCYXNlOiAgICAgICAgeyBvYmplY3Quc2V0Q29kZUJh
c2Uoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIE9iamVjdENvZGVUeXBlOiAgICAgICAgeyBv
YmplY3Quc2V0Q29kZVR5cGUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICAvLyByZWFkLW9ubHk6IE9i
amVjdENvbnRlbnREb2N1bWVudAotICAgICAgY2FzZSBPYmplY3REYXRhOiAgICAgICAgICAgIHsg
b2JqZWN0LnNldERhdGEoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIE9iamVjdERlY2xhcmU6
ICAgICAgICAgeyBvYmplY3Quc2V0RGVjbGFyZSh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1
cm47IH0KLSAgICAgIGNhc2UgT2JqZWN0SGVpZ2h0OiAgICAgICAgICB7IG9iamVjdC5zZXRIZWln
aHQoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIE9iamVjdEhzcGFjZTogICAgICAgICAgeyBv
YmplY3Quc2V0SHNwYWNlKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBPYmplY3ROYW1lOiAg
ICAgICAgICAgIHsgb2JqZWN0LnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIE9i
amVjdFN0YW5kYnk6ICAgICAgICAgeyBvYmplY3Quc2V0U3RhbmRieShzdHIpOyByZXR1cm47IH0K
LSAgICAgIGNhc2UgT2JqZWN0VGFiSW5kZXg6ICAgICAgICB7IG9iamVjdC5zZXRUYWJJbmRleCh2
YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIE9iamVjdFR5cGU6ICAg
ICAgICAgICAgeyBvYmplY3Quc2V0VHlwZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgT2Jq
ZWN0VXNlTWFwOiAgICAgICAgICB7IG9iamVjdC5zZXRVc2VNYXAoc3RyKTsgcmV0dXJuOyB9Ci0g
ICAgICBjYXNlIE9iamVjdFZzcGFjZTogICAgICAgICAgeyBvYmplY3Quc2V0VnNwYWNlKHN0cik7
IHJldHVybjsgfQotICAgICAgY2FzZSBPYmplY3RXaWR0aDogICAgICAgICAgIHsgb2JqZWN0LnNl
dFdpZHRoKHN0cik7IHJldHVybjsgfQotICAgICAgfQorfQorCit2b2lkIEhUTUxFbGVtZW50Ojph
bmNob3JTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1
ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MQW5jaG9yRWxlbWVudElt
cGwmIGFuY2hvciA9ICpzdGF0aWNfY2FzdDxIVE1MQW5jaG9yRWxlbWVudEltcGwqPihpbXBsKCkp
OworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBBbmNob3JBY2Nlc3NLZXk6ICAg
ICAgIHsgYW5jaG9yLnNldEFjY2Vzc0tleShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBB
bmNob3JDaGFyc2V0OiAgICAgICAgIHsgYW5jaG9yLnNldENoYXJzZXQoc3RyKTsgcmV0dXJuOyB9
CisgICAgICAgIGNhc2UgQW5jaG9yQ29vcmRzOiAgICAgICAgICB7IGFuY2hvci5zZXRDb29yZHMo
c3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQW5jaG9ySHJlZjogICAgICAgICAgICB7IGFu
Y2hvci5zZXRIcmVmKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEFuY2hvckhyZWZMYW5n
OiAgICAgICAgeyBhbmNob3Iuc2V0SHJlZmxhbmcoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNh
c2UgQW5jaG9yTmFtZTogICAgICAgICAgICB7IGFuY2hvci5zZXROYW1lKHN0cik7IHJldHVybjsg
fQorICAgICAgICBjYXNlIEFuY2hvclJlbDogICAgICAgICAgICAgeyBhbmNob3Iuc2V0UmVsKHN0
cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEFuY2hvclJldjogICAgICAgICAgICAgeyBhbmNo
b3Iuc2V0UmV2KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEFuY2hvclNoYXBlOiAgICAg
ICAgICAgeyBhbmNob3Iuc2V0U2hhcGUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQW5j
aG9yVGFiSW5kZXg6ICAgICAgICB7IGFuY2hvci5zZXRUYWJJbmRleCh2YWx1ZS50b0ludDMyKGV4
ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQW5jaG9yVGFyZ2V0OiAgICAgICAgICB7IGFu
Y2hvci5zZXRUYXJnZXQoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQW5jaG9yVHlwZTog
ICAgICAgICAgICB7IGFuY2hvci5zZXRUeXBlKHN0cik7IHJldHVybjsgfQogICAgIH0KLSAgICBi
cmVhazsKLSAgICBjYXNlIElEX1BBUkFNOiB7Ci0gICAgICBIVE1MUGFyYW1FbGVtZW50SW1wbCAm
cGFyYW0gPSBzdGF0aWNfY2FzdDxIVE1MUGFyYW1FbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAg
ICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgUGFyYW1OYW1lOiAgICAgICAgICAgIHsg
cGFyYW0uc2V0TmFtZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgUGFyYW1UeXBlOiAgICAg
ICAgICAgIHsgcGFyYW0uc2V0VHlwZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgUGFyYW1W
YWx1ZTogICAgICAgICAgIHsgcGFyYW0uc2V0VmFsdWUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBj
YXNlIFBhcmFtVmFsdWVUeXBlOiAgICAgICB7IHBhcmFtLnNldFZhbHVlVHlwZShzdHIpOyByZXR1
cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6aW1hZ2VTZXR0ZXIoRXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01T
dHJpbmcmIHN0cikKK3sKKyAgICBIVE1MSW1hZ2VFbGVtZW50SW1wbCYgaW1hZ2UgPSAqc3RhdGlj
X2Nhc3Q8SFRNTEltYWdlRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4p
IHsKKyAgICAgICAgY2FzZSBJbWFnZU5hbWU6ICAgICAgICAgICAgeyBpbWFnZS5zZXROYW1lKHN0
cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEltYWdlQWxpZ246ICAgICAgICAgICB7IGltYWdl
LnNldEFsaWduKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEltYWdlQWx0OiAgICAgICAg
ICAgICB7IGltYWdlLnNldEFsdChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJbWFnZUJv
cmRlcjogICAgICAgICAgeyBpbWFnZS5zZXRCb3JkZXIodmFsdWUudG9JbnQzMihleGVjKSk7IHJl
dHVybjsgfQorICAgICAgICBjYXNlIEltYWdlSGVpZ2h0OiAgICAgICAgICB7IGltYWdlLnNldEhl
aWdodCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgSW1hZ2VI
c3BhY2U6ICAgICAgICAgIHsgaW1hZ2Uuc2V0SHNwYWNlKHZhbHVlLnRvSW50MzIoZXhlYykpOyBy
ZXR1cm47IH0KKyAgICAgICAgY2FzZSBJbWFnZUlzTWFwOiAgICAgICAgICAgeyBpbWFnZS5zZXRJ
c01hcCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJbWFn
ZUxvbmdEZXNjOiAgICAgICAgeyBpbWFnZS5zZXRMb25nRGVzYyhzdHIpOyByZXR1cm47IH0KKyAg
ICAgICAgY2FzZSBJbWFnZVNyYzogICAgICAgICAgICAgeyBpbWFnZS5zZXRTcmMoc3RyKTsgcmV0
dXJuOyB9CisgICAgICAgIGNhc2UgSW1hZ2VVc2VNYXA6ICAgICAgICAgIHsgaW1hZ2Uuc2V0VXNl
TWFwKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEltYWdlVnNwYWNlOiAgICAgICAgICB7
IGltYWdlLnNldFZzcGFjZSh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAg
IGNhc2UgSW1hZ2VXaWR0aDogICAgICAgICAgIHsgaW1hZ2Uuc2V0V2lkdGgodmFsdWUudG9JbnQz
MihleGVjKSk7IHJldHVybjsgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0FQUExF
VDogewotICAgICAgSFRNTEFwcGxldEVsZW1lbnRJbXBsICZhcHBsZXQgPSBzdGF0aWNfY2FzdDxI
VE1MQXBwbGV0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7
Ci0gICAgICBjYXNlIEFwcGxldEFsaWduOiAgICAgICAgICAgeyBhcHBsZXQuc2V0QWxpZ24oc3Ry
KTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEFwcGxldEFsdDogICAgICAgICAgICAgeyBhcHBsZXQu
c2V0QWx0KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBBcHBsZXRBcmNoaXZlOiAgICAgICAg
IHsgYXBwbGV0LnNldEFyY2hpdmUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEFwcGxldENv
ZGU6ICAgICAgICAgICAgeyBhcHBsZXQuc2V0Q29kZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNh
c2UgQXBwbGV0Q29kZUJhc2U6ICAgICAgICB7IGFwcGxldC5zZXRDb2RlQmFzZShzdHIpOyByZXR1
cm47IH0KLSAgICAgIGNhc2UgQXBwbGV0SGVpZ2h0OiAgICAgICAgICB7IGFwcGxldC5zZXRIZWln
aHQoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEFwcGxldEhzcGFjZTogICAgICAgICAgeyBh
cHBsZXQuc2V0SHNwYWNlKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBBcHBsZXROYW1lOiAg
ICAgICAgICAgIHsgYXBwbGV0LnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEFw
cGxldE9iamVjdDogICAgICAgICAgeyBhcHBsZXQuc2V0T2JqZWN0KHN0cik7IHJldHVybjsgfQot
ICAgICAgY2FzZSBBcHBsZXRWc3BhY2U6ICAgICAgICAgIHsgYXBwbGV0LnNldFZzcGFjZShzdHIp
OyByZXR1cm47IH0KLSAgICAgIGNhc2UgQXBwbGV0V2lkdGg6ICAgICAgICAgICB7IGFwcGxldC5z
ZXRXaWR0aChzdHIpOyByZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6
b2JqZWN0U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFs
dWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTE9iamVjdEVsZW1lbnRJ
bXBsJiBvYmplY3QgPSAqc3RhdGljX2Nhc3Q8SFRNTE9iamVjdEVsZW1lbnRJbXBsKj4oaW1wbCgp
KTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIC8vIHJlYWQtb25seTogZm9ybQorICAg
ICAgICBjYXNlIE9iamVjdENvZGU6ICAgICAgICAgICAgeyBvYmplY3Quc2V0Q29kZShzdHIpOyBy
ZXR1cm47IH0KKyAgICAgICAgY2FzZSBPYmplY3RBbGlnbjogICAgICAgICAgIHsgb2JqZWN0LnNl
dEFsaWduKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIE9iamVjdEFyY2hpdmU6ICAgICAg
ICAgeyBvYmplY3Quc2V0QXJjaGl2ZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBPYmpl
Y3RCb3JkZXI6ICAgICAgICAgIHsgb2JqZWN0LnNldEJvcmRlcihzdHIpOyByZXR1cm47IH0KKyAg
ICAgICAgY2FzZSBPYmplY3RDb2RlQmFzZTogICAgICAgIHsgb2JqZWN0LnNldENvZGVCYXNlKHN0
cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIE9iamVjdENvZGVUeXBlOiAgICAgICAgeyBvYmpl
Y3Quc2V0Q29kZVR5cGUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIC8vIHJlYWQtb25seTogT2Jq
ZWN0Q29udGVudERvY3VtZW50CisgICAgICAgIGNhc2UgT2JqZWN0RGF0YTogICAgICAgICAgICB7
IG9iamVjdC5zZXREYXRhKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIE9iamVjdERlY2xh
cmU6ICAgICAgICAgeyBvYmplY3Quc2V0RGVjbGFyZSh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyBy
ZXR1cm47IH0KKyAgICAgICAgY2FzZSBPYmplY3RIZWlnaHQ6ICAgICAgICAgIHsgb2JqZWN0LnNl
dEhlaWdodChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBPYmplY3RIc3BhY2U6ICAgICAg
ICAgIHsgb2JqZWN0LnNldEhzcGFjZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBPYmpl
Y3ROYW1lOiAgICAgICAgICAgIHsgb2JqZWN0LnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9CisgICAg
ICAgIGNhc2UgT2JqZWN0U3RhbmRieTogICAgICAgICB7IG9iamVjdC5zZXRTdGFuZGJ5KHN0cik7
IHJldHVybjsgfQorICAgICAgICBjYXNlIE9iamVjdFRhYkluZGV4OiAgICAgICAgeyBvYmplY3Qu
c2V0VGFiSW5kZXgodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNl
IE9iamVjdFR5cGU6ICAgICAgICAgICAgeyBvYmplY3Quc2V0VHlwZShzdHIpOyByZXR1cm47IH0K
KyAgICAgICAgY2FzZSBPYmplY3RVc2VNYXA6ICAgICAgICAgIHsgb2JqZWN0LnNldFVzZU1hcChz
dHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBPYmplY3RWc3BhY2U6ICAgICAgICAgIHsgb2Jq
ZWN0LnNldFZzcGFjZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBPYmplY3RXaWR0aDog
ICAgICAgICAgIHsgb2JqZWN0LnNldFdpZHRoKHN0cik7IHJldHVybjsgfQogICAgIH0KLSAgICBi
cmVhazsKLSAgICBjYXNlIElEX01BUDogewotICAgICAgSFRNTE1hcEVsZW1lbnRJbXBsICZtYXAg
PSBzdGF0aWNfY2FzdDxIVE1MTWFwRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0
Y2ggKHRva2VuKSB7Ci0gICAgICAvLyByZWFkLW9ubHk6IGFyZWFzCi0gICAgICBjYXNlIE1hcE5h
bWU6ICAgICAgICAgICAgICAgICB7IG1hcC5zZXROYW1lKHN0cik7IHJldHVybjsgfQotICAgICB9
Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OnBhcmFtU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7
CisgICAgSFRNTFBhcmFtRWxlbWVudEltcGwmIHBhcmFtID0gKnN0YXRpY19jYXN0PEhUTUxQYXJh
bUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNh
c2UgUGFyYW1OYW1lOiAgICAgICAgICAgIHsgcGFyYW0uc2V0TmFtZShzdHIpOyByZXR1cm47IH0K
KyAgICAgICAgY2FzZSBQYXJhbVR5cGU6ICAgICAgICAgICAgeyBwYXJhbS5zZXRUeXBlKHN0cik7
IHJldHVybjsgfQorICAgICAgICBjYXNlIFBhcmFtVmFsdWU6ICAgICAgICAgICB7IHBhcmFtLnNl
dFZhbHVlKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFBhcmFtVmFsdWVUeXBlOiAgICAg
ICB7IHBhcmFtLnNldFZhbHVlVHlwZShzdHIpOyByZXR1cm47IH0KICAgICB9Ci0gICAgYnJlYWs7
Ci0gICAgY2FzZSBJRF9BUkVBOiB7Ci0gICAgICBIVE1MQXJlYUVsZW1lbnRJbXBsICZhcmVhID0g
c3RhdGljX2Nhc3Q8SFRNTEFyZWFFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRj
aCAodG9rZW4pIHsKLSAgICAgIGNhc2UgQXJlYUFjY2Vzc0tleTogICAgICAgeyBhcmVhLnNldEFj
Y2Vzc0tleShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQXJlYUFsdDogICAgICAgICAgICAg
eyBhcmVhLnNldEFsdChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQXJlYUNvb3JkczogICAg
ICAgICAgeyBhcmVhLnNldENvb3JkcyhzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQXJlYUhy
ZWY6ICAgICAgICAgICAgeyBhcmVhLnNldEhyZWYoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNl
IEFyZWFOb0hyZWY6ICAgICAgICAgIHsgYXJlYS5zZXROb0hyZWYodmFsdWUudG9Cb29sZWFuKGV4
ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEFyZWFTaGFwZTogICAgICAgICAgIHsgYXJlYS5z
ZXRTaGFwZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQXJlYVRhYkluZGV4OiAgICAgICAg
eyBhcmVhLnNldFRhYkluZGV4KHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KLSAgICAg
IGNhc2UgQXJlYVRhcmdldDogICAgICAgICAgeyBhcmVhLnNldFRhcmdldChzdHIpOyByZXR1cm47
IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6YXBwbGV0U2V0dGVyKEV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3Ry
aW5nJiBzdHIpCit7CisgICAgSFRNTEFwcGxldEVsZW1lbnRJbXBsJiBhcHBsZXQgPSAqc3RhdGlj
X2Nhc3Q8SFRNTEFwcGxldEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2Vu
KSB7CisgICAgICAgIGNhc2UgQXBwbGV0QWxpZ246ICAgICAgICAgICB7IGFwcGxldC5zZXRBbGln
bihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBBcHBsZXRBbHQ6ICAgICAgICAgICAgIHsg
YXBwbGV0LnNldEFsdChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBBcHBsZXRBcmNoaXZl
OiAgICAgICAgIHsgYXBwbGV0LnNldEFyY2hpdmUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNh
c2UgQXBwbGV0Q29kZTogICAgICAgICAgICB7IGFwcGxldC5zZXRDb2RlKHN0cik7IHJldHVybjsg
fQorICAgICAgICBjYXNlIEFwcGxldENvZGVCYXNlOiAgICAgICAgeyBhcHBsZXQuc2V0Q29kZUJh
c2Uoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQXBwbGV0SGVpZ2h0OiAgICAgICAgICB7
IGFwcGxldC5zZXRIZWlnaHQoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQXBwbGV0SHNw
YWNlOiAgICAgICAgICB7IGFwcGxldC5zZXRIc3BhY2Uoc3RyKTsgcmV0dXJuOyB9CisgICAgICAg
IGNhc2UgQXBwbGV0TmFtZTogICAgICAgICAgICB7IGFwcGxldC5zZXROYW1lKHN0cik7IHJldHVy
bjsgfQorICAgICAgICBjYXNlIEFwcGxldE9iamVjdDogICAgICAgICAgeyBhcHBsZXQuc2V0T2Jq
ZWN0KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEFwcGxldFZzcGFjZTogICAgICAgICAg
eyBhcHBsZXQuc2V0VnNwYWNlKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEFwcGxldFdp
ZHRoOiAgICAgICAgICAgeyBhcHBsZXQuc2V0V2lkdGgoc3RyKTsgcmV0dXJuOyB9CiAgICAgfQot
ICAgIGJyZWFrOwotICAgIGNhc2UgSURfU0NSSVBUOiB7Ci0gICAgICBIVE1MU2NyaXB0RWxlbWVu
dEltcGwgJnNjcmlwdCA9IHN0YXRpY19jYXN0PEhUTUxTY3JpcHRFbGVtZW50SW1wbCAmPihlbGVt
ZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgU2NyaXB0VGV4dDogICAg
ICAgICAgICB7IHNjcmlwdC5zZXRUZXh0KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBTY3Jp
cHRIdG1sRm9yOiAgICAgICAgIHsgc2NyaXB0LnNldEh0bWxGb3Ioc3RyKTsgcmV0dXJuOyB9Ci0g
ICAgICBjYXNlIFNjcmlwdEV2ZW50OiAgICAgICAgICAgeyBzY3JpcHQuc2V0RXZlbnQoc3RyKTsg
cmV0dXJuOyB9Ci0gICAgICBjYXNlIFNjcmlwdENoYXJzZXQ6ICAgICAgICAgeyBzY3JpcHQuc2V0
Q2hhcnNldChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgU2NyaXB0RGVmZXI6ICAgICAgICAg
ICB7IHNjcmlwdC5zZXREZWZlcih2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KLSAg
ICAgIGNhc2UgU2NyaXB0U3JjOiAgICAgICAgICAgICB7IHNjcmlwdC5zZXRTcmMoc3RyKTsgcmV0
dXJuOyB9Ci0gICAgICBjYXNlIFNjcmlwdFR5cGU6ICAgICAgICAgICAgeyBzY3JpcHQuc2V0VHlw
ZShzdHIpOyByZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6bWFwU2V0
dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0
IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTE1hcEVsZW1lbnRJbXBsJiBtYXAgPSAq
c3RhdGljX2Nhc3Q8SFRNTE1hcEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBpZiAodG9rZW4g
PT0gTWFwTmFtZSkKKyAgICAgICAgLy8gcmVhZC1vbmx5OiBhcmVhcworICAgICAgICBtYXAuc2V0
TmFtZShzdHIpOworfQorCit2b2lkIEhUTUxFbGVtZW50OjphcmVhU2V0dGVyKEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5n
JiBzdHIpCit7CisgICAgSFRNTEFyZWFFbGVtZW50SW1wbCYgYXJlYSA9ICpzdGF0aWNfY2FzdDxI
VE1MQXJlYUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAg
ICAgIGNhc2UgQXJlYUFjY2Vzc0tleTogICAgICAgeyBhcmVhLnNldEFjY2Vzc0tleShzdHIpOyBy
ZXR1cm47IH0KKyAgICAgICAgY2FzZSBBcmVhQWx0OiAgICAgICAgICAgICB7IGFyZWEuc2V0QWx0
KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEFyZWFDb29yZHM6ICAgICAgICAgIHsgYXJl
YS5zZXRDb29yZHMoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQXJlYUhyZWY6ICAgICAg
ICAgICAgeyBhcmVhLnNldEhyZWYoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQXJlYU5v
SHJlZjogICAgICAgICAgeyBhcmVhLnNldE5vSHJlZih2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyBy
ZXR1cm47IH0KKyAgICAgICAgY2FzZSBBcmVhU2hhcGU6ICAgICAgICAgICB7IGFyZWEuc2V0U2hh
cGUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQXJlYVRhYkluZGV4OiAgICAgICAgeyBh
cmVhLnNldFRhYkluZGV4KHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAg
Y2FzZSBBcmVhVGFyZ2V0OiAgICAgICAgICB7IGFyZWEuc2V0VGFyZ2V0KHN0cik7IHJldHVybjsg
fQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX1RBQkxFOiB7Ci0gICAgICBIVE1MVGFi
bGVFbGVtZW50SW1wbCAmdGFibGUgPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVFbGVtZW50SW1wbCAm
PihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgVGFibGVDYXB0
aW9uOiAgICAgICAgIHsgdGFibGUuc2V0Q2FwdGlvbih0b0hUTUxUYWJsZUNhcHRpb25FbGVtZW50
KHZhbHVlKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJsZVRIZWFkOiAgICAgICAgICAgeyB0
YWJsZS5zZXRUSGVhZCh0b0hUTUxUYWJsZVNlY3Rpb25FbGVtZW50KHZhbHVlKSk7IHJldHVybjsg
fQotICAgICAgY2FzZSBUYWJsZVRGb290OiAgICAgICAgICAgeyB0YWJsZS5zZXRURm9vdCh0b0hU
TUxUYWJsZVNlY3Rpb25FbGVtZW50KHZhbHVlKSk7IHJldHVybjsgfQotICAgICAgLy8gcmVhZC1v
bmx5OiByb3dzCi0gICAgICAvLyByZWFkLW9ubHk6IHRib2RpZXMKLSAgICAgIGNhc2UgVGFibGVB
bGlnbjogICAgICAgICAgIHsgdGFibGUuc2V0QWxpZ24oc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBj
YXNlIFRhYmxlQmdDb2xvcjogICAgICAgICB7IHRhYmxlLnNldEJnQ29sb3Ioc3RyKTsgcmV0dXJu
OyB9Ci0gICAgICBjYXNlIFRhYmxlQm9yZGVyOiAgICAgICAgICB7IHRhYmxlLnNldEJvcmRlcihz
dHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVDZWxsUGFkZGluZzogICAgIHsgdGFibGUu
c2V0Q2VsbFBhZGRpbmcoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlQ2VsbFNwYWNp
bmc6ICAgICB7IHRhYmxlLnNldENlbGxTcGFjaW5nKHN0cik7IHJldHVybjsgfQotICAgICAgY2Fz
ZSBUYWJsZUZyYW1lOiAgICAgICAgICAgeyB0YWJsZS5zZXRGcmFtZShzdHIpOyByZXR1cm47IH0K
LSAgICAgIGNhc2UgVGFibGVSdWxlczogICAgICAgICAgIHsgdGFibGUuc2V0UnVsZXMoc3RyKTsg
cmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlU3VtbWFyeTogICAgICAgICB7IHRhYmxlLnNldFN1
bW1hcnkoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlV2lkdGg6ICAgICAgICAgICB7
IHRhYmxlLnNldFdpZHRoKHN0cik7IHJldHVybjsgfQotICAgICAgfQorfQorCit2b2lkIEhUTUxF
bGVtZW50OjpzY3JpcHRTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZh
bHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MU2NyaXB0
RWxlbWVudEltcGwmIHNjcmlwdCA9ICpzdGF0aWNfY2FzdDxIVE1MU2NyaXB0RWxlbWVudEltcGwq
PihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBTY3JpcHRUZXh0
OiAgICAgICAgICAgIHsgc2NyaXB0LnNldFRleHQoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNh
c2UgU2NyaXB0SHRtbEZvcjogICAgICAgICB7IHNjcmlwdC5zZXRIdG1sRm9yKHN0cik7IHJldHVy
bjsgfQorICAgICAgICBjYXNlIFNjcmlwdEV2ZW50OiAgICAgICAgICAgeyBzY3JpcHQuc2V0RXZl
bnQoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgU2NyaXB0Q2hhcnNldDogICAgICAgICB7
IHNjcmlwdC5zZXRDaGFyc2V0KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFNjcmlwdERl
ZmVyOiAgICAgICAgICAgeyBzY3JpcHQuc2V0RGVmZXIodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsg
cmV0dXJuOyB9CisgICAgICAgIGNhc2UgU2NyaXB0U3JjOiAgICAgICAgICAgICB7IHNjcmlwdC5z
ZXRTcmMoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgU2NyaXB0VHlwZTogICAgICAgICAg
ICB7IHNjcmlwdC5zZXRUeXBlKHN0cik7IHJldHVybjsgfQogICAgIH0KLSAgICBicmVhazsKLSAg
ICBjYXNlIElEX0NBUFRJT046IHsKLSAgICAgIEhUTUxUYWJsZUNhcHRpb25FbGVtZW50SW1wbCAm
dGFibGVDYXB0aW9uID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnRJbXBsICY+
KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgY2FzZSBUYWJsZUFsaWdu
OiAgICAgICAgICAgeyB0YWJsZUNhcHRpb24uc2V0QWxpZ24oc3RyKTsgcmV0dXJuOyB9Ci0gICAg
ICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OnRhYmxlU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIp
Cit7CisgICAgSFRNTFRhYmxlRWxlbWVudEltcGwmIHRhYmxlID0gKnN0YXRpY19jYXN0PEhUTUxU
YWJsZUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAg
IGNhc2UgVGFibGVDYXB0aW9uOiAgICAgICAgIHsgdGFibGUuc2V0Q2FwdGlvbih0b0hUTUxUYWJs
ZUNhcHRpb25FbGVtZW50KHZhbHVlKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxlVEhl
YWQ6ICAgICAgICAgICB7IHRhYmxlLnNldFRIZWFkKHRvSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQo
dmFsdWUpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGFibGVURm9vdDogICAgICAgICAgIHsg
dGFibGUuc2V0VEZvb3QodG9IVE1MVGFibGVTZWN0aW9uRWxlbWVudCh2YWx1ZSkpOyByZXR1cm47
IH0KKyAgICAgICAgLy8gcmVhZC1vbmx5OiByb3dzCisgICAgICAgIC8vIHJlYWQtb25seTogdGJv
ZGllcworICAgICAgICBjYXNlIFRhYmxlQWxpZ246ICAgICAgICAgICB7IHRhYmxlLnNldEFsaWdu
KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxlQmdDb2xvcjogICAgICAgICB7IHRh
YmxlLnNldEJnQ29sb3Ioc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGFibGVCb3JkZXI6
ICAgICAgICAgIHsgdGFibGUuc2V0Qm9yZGVyKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNl
IFRhYmxlQ2VsbFBhZGRpbmc6ICAgICB7IHRhYmxlLnNldENlbGxQYWRkaW5nKHN0cik7IHJldHVy
bjsgfQorICAgICAgICBjYXNlIFRhYmxlQ2VsbFNwYWNpbmc6ICAgICB7IHRhYmxlLnNldENlbGxT
cGFjaW5nKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxlRnJhbWU6ICAgICAgICAg
ICB7IHRhYmxlLnNldEZyYW1lKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxlUnVs
ZXM6ICAgICAgICAgICB7IHRhYmxlLnNldFJ1bGVzKHN0cik7IHJldHVybjsgfQorICAgICAgICBj
YXNlIFRhYmxlU3VtbWFyeTogICAgICAgICB7IHRhYmxlLnNldFN1bW1hcnkoc3RyKTsgcmV0dXJu
OyB9CisgICAgICAgIGNhc2UgVGFibGVXaWR0aDogICAgICAgICAgIHsgdGFibGUuc2V0V2lkdGgo
c3RyKTsgcmV0dXJuOyB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfQ09MOiB7Ci0g
ICAgICBIVE1MVGFibGVDb2xFbGVtZW50SW1wbCAmdGFibGVDb2wgPSBzdGF0aWNfY2FzdDxIVE1M
VGFibGVDb2xFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsK
LSAgICAgIGNhc2UgVGFibGVDb2xBbGlnbjogICAgICAgICAgIHsgdGFibGVDb2wuc2V0QWxpZ24o
c3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlQ29sQ2g6ICAgICAgICAgICAgICB7IHRh
YmxlQ29sLnNldENoKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJsZUNvbENoT2ZmOiAg
ICAgICAgICAgeyB0YWJsZUNvbC5zZXRDaE9mZihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2Ug
VGFibGVDb2xTcGFuOiAgICAgICAgICAgIHsgdGFibGVDb2wuc2V0U3Bhbih2YWx1ZS50b0ludDMy
KGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlQ29sVkFsaWduOiAgICAgICAgICB7
IHRhYmxlQ29sLnNldFZBbGlnbihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVDb2xX
aWR0aDogICAgICAgICAgIHsgdGFibGVDb2wuc2V0V2lkdGgoc3RyKTsgcmV0dXJuOyB9Ci0gICAg
ICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OnRhYmxlQ2FwdGlvblNldHRlcihFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmlu
ZyYgc3RyKQoreworICAgIEhUTUxUYWJsZUNhcHRpb25FbGVtZW50SW1wbCYgdGFibGVDYXB0aW9u
ID0gKnN0YXRpY19jYXN0PEhUTUxUYWJsZUNhcHRpb25FbGVtZW50SW1wbCo+KGltcGwoKSk7Cisg
ICAgaWYgKHRva2VuID09IFRhYmxlQ2FwdGlvbkFsaWduKQorICAgICAgICB0YWJsZUNhcHRpb24u
c2V0QWxpZ24oc3RyKTsKK30KKwordm9pZCBIVE1MRWxlbWVudDo6dGFibGVDb2xTZXR0ZXIoRXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpE
T01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MVGFibGVDb2xFbGVtZW50SW1wbCYgdGFibGVDb2wg
PSAqc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ29sRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3
aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBUYWJsZUNvbEFsaWduOiAgICAgICAgICAgeyB0
YWJsZUNvbC5zZXRBbGlnbihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZUNvbENo
OiAgICAgICAgICAgICAgeyB0YWJsZUNvbC5zZXRDaChzdHIpOyByZXR1cm47IH0KKyAgICAgICAg
Y2FzZSBUYWJsZUNvbENoT2ZmOiAgICAgICAgICAgeyB0YWJsZUNvbC5zZXRDaE9mZihzdHIpOyBy
ZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZUNvbFNwYW46ICAgICAgICAgICAgeyB0YWJsZUNv
bC5zZXRTcGFuKHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBU
YWJsZUNvbFZBbGlnbjogICAgICAgICAgeyB0YWJsZUNvbC5zZXRWQWxpZ24oc3RyKTsgcmV0dXJu
OyB9CisgICAgICAgIGNhc2UgVGFibGVDb2xXaWR0aDogICAgICAgICAgIHsgdGFibGVDb2wuc2V0
V2lkdGgoc3RyKTsgcmV0dXJuOyB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfVEhF
QUQ6Ci0gICAgY2FzZSBJRF9UQk9EWToKLSAgICBjYXNlIElEX1RGT09UOiB7Ci0gICAgICBIVE1M
VGFibGVTZWN0aW9uRWxlbWVudEltcGwgJnRhYmxlU2VjdGlvbiA9IHN0YXRpY19jYXN0PEhUTUxU
YWJsZVNlY3Rpb25FbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4p
IHsKLSAgICAgIGNhc2UgVGFibGVTZWN0aW9uQWxpZ246ICAgICAgICAgICB7IHRhYmxlU2VjdGlv
bi5zZXRBbGlnbihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVTZWN0aW9uQ2g6ICAg
ICAgICAgICAgICB7IHRhYmxlU2VjdGlvbi5zZXRDaChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNh
c2UgVGFibGVTZWN0aW9uQ2hPZmY6ICAgICAgICAgICB7IHRhYmxlU2VjdGlvbi5zZXRDaE9mZihz
dHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVTZWN0aW9uVkFsaWduOiAgICAgICAgICB7
IHRhYmxlU2VjdGlvbi5zZXRWQWxpZ24oc3RyKTsgcmV0dXJuOyB9Ci0gICAgICAvLyByZWFkLW9u
bHk6IHJvd3MKLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6dGFibGVTZWN0aW9uU2V0
dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0
IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBs
JiB0YWJsZVNlY3Rpb24gPSAqc3RhdGljX2Nhc3Q8SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBs
Kj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgVGFibGVTZWN0
aW9uQWxpZ246ICAgICAgICAgICB7IHRhYmxlU2VjdGlvbi5zZXRBbGlnbihzdHIpOyByZXR1cm47
IH0KKyAgICAgICAgY2FzZSBUYWJsZVNlY3Rpb25DaDogICAgICAgICAgICAgIHsgdGFibGVTZWN0
aW9uLnNldENoKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxlU2VjdGlvbkNoT2Zm
OiAgICAgICAgICAgeyB0YWJsZVNlY3Rpb24uc2V0Q2hPZmYoc3RyKTsgcmV0dXJuOyB9CisgICAg
ICAgIGNhc2UgVGFibGVTZWN0aW9uVkFsaWduOiAgICAgICAgICB7IHRhYmxlU2VjdGlvbi5zZXRW
QWxpZ24oc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIC8vIHJlYWQtb25seTogcm93cwogICAgIH0K
LSAgICBicmVhazsKLSAgICBjYXNlIElEX1RSOiB7Ci0gICAgICBIVE1MVGFibGVSb3dFbGVtZW50
SW1wbCAmdGFibGVSb3cgPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVSb3dFbGVtZW50SW1wbCAmPihl
bGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIC8vIHJlYWQtb25seTogcm93
SW5kZXgKLSAgICAgIC8vIHJlYWQtb25seTogc2VjdGlvblJvd0luZGV4Ci0gICAgICAvLyByZWFk
LW9ubHk6IGNlbGxzCi0gICAgICBjYXNlIFRhYmxlUm93QWxpZ246ICAgICAgICAgICB7IHRhYmxl
Um93LnNldEFsaWduKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJsZVJvd0JnQ29sb3I6
ICAgICAgICAgeyB0YWJsZVJvdy5zZXRCZ0NvbG9yKHN0cik7IHJldHVybjsgfQotICAgICAgY2Fz
ZSBUYWJsZVJvd0NoOiAgICAgICAgICAgICAgeyB0YWJsZVJvdy5zZXRDaChzdHIpOyByZXR1cm47
IH0KLSAgICAgIGNhc2UgVGFibGVSb3dDaE9mZjogICAgICAgICAgIHsgdGFibGVSb3cuc2V0Q2hP
ZmYoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlUm93VkFsaWduOiAgICAgICAgICB7
IHRhYmxlUm93LnNldFZBbGlnbihzdHIpOyByZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBI
VE1MRWxlbWVudDo6dGFibGVSb3dTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNv
bnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1M
VGFibGVSb3dFbGVtZW50SW1wbCYgdGFibGVSb3cgPSAqc3RhdGljX2Nhc3Q8SFRNTFRhYmxlUm93
RWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgLy8g
cmVhZC1vbmx5OiByb3dJbmRleAorICAgICAgICAvLyByZWFkLW9ubHk6IHNlY3Rpb25Sb3dJbmRl
eAorICAgICAgICAvLyByZWFkLW9ubHk6IGNlbGxzCisgICAgICAgIGNhc2UgVGFibGVSb3dBbGln
bjogICAgICAgICAgIHsgdGFibGVSb3cuc2V0QWxpZ24oc3RyKTsgcmV0dXJuOyB9CisgICAgICAg
IGNhc2UgVGFibGVSb3dCZ0NvbG9yOiAgICAgICAgIHsgdGFibGVSb3cuc2V0QmdDb2xvcihzdHIp
OyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZVJvd0NoOiAgICAgICAgICAgICAgeyB0YWJs
ZVJvdy5zZXRDaChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZVJvd0NoT2ZmOiAg
ICAgICAgICAgeyB0YWJsZVJvdy5zZXRDaE9mZihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2Fz
ZSBUYWJsZVJvd1ZBbGlnbjogICAgICAgICAgeyB0YWJsZVJvdy5zZXRWQWxpZ24oc3RyKTsgcmV0
dXJuOyB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfVEg6Ci0gICAgY2FzZSBJRF9U
RDogewotICAgICAgSFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsICZ0YWJsZUNlbGwgPSBzdGF0aWNf
Y2FzdDxIVE1MVGFibGVDZWxsRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2gg
KHRva2VuKSB7Ci0gICAgICAvLyByZWFkLW9ubHk6IGNlbGxJbmRleAotICAgICAgY2FzZSBUYWJs
ZUNlbGxBYmJyOiAgICAgICAgICAgIHsgdGFibGVDZWxsLnNldEFiYnIoc3RyKTsgcmV0dXJuOyB9
Ci0gICAgICBjYXNlIFRhYmxlQ2VsbEFsaWduOiAgICAgICAgICAgeyB0YWJsZUNlbGwuc2V0QWxp
Z24oc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlQ2VsbEF4aXM6ICAgICAgICAgICAg
eyB0YWJsZUNlbGwuc2V0QXhpcyhzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVDZWxs
QmdDb2xvcjogICAgICAgICB7IHRhYmxlQ2VsbC5zZXRCZ0NvbG9yKHN0cik7IHJldHVybjsgfQot
ICAgICAgY2FzZSBUYWJsZUNlbGxDaDogICAgICAgICAgICAgIHsgdGFibGVDZWxsLnNldENoKHN0
cik7IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJsZUNlbGxDaE9mZjogICAgICAgICAgIHsgdGFi
bGVDZWxsLnNldENoT2ZmKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJsZUNlbGxDb2xT
cGFuOiAgICAgICAgIHsgdGFibGVDZWxsLnNldENvbFNwYW4odmFsdWUudG9JbnQzMihleGVjKSk7
IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJsZUNlbGxIZWFkZXJzOiAgICAgICAgIHsgdGFibGVD
ZWxsLnNldEhlYWRlcnMoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlQ2VsbEhlaWdo
dDogICAgICAgICAgeyB0YWJsZUNlbGwuc2V0SGVpZ2h0KHN0cik7IHJldHVybjsgfQotICAgICAg
Y2FzZSBUYWJsZUNlbGxOb1dyYXA6ICAgICAgICAgIHsgdGFibGVDZWxsLnNldE5vV3JhcCh2YWx1
ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVDZWxsUm93U3Bh
bjogICAgICAgICB7IHRhYmxlQ2VsbC5zZXRSb3dTcGFuKHZhbHVlLnRvSW50MzIoZXhlYykpOyBy
ZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVDZWxsU2NvcGU6ICAgICAgICAgICB7IHRhYmxlQ2Vs
bC5zZXRTY29wZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVDZWxsVkFsaWduOiAg
ICAgICAgICB7IHRhYmxlQ2VsbC5zZXRWQWxpZ24oc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNl
IFRhYmxlQ2VsbFdpZHRoOiAgICAgICAgICAgeyB0YWJsZUNlbGwuc2V0V2lkdGgoc3RyKTsgcmV0
dXJuOyB9Ci0gICAgICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OnRhYmxlQ2VsbFNldHRlcihF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006
OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbCYgdGFibGVD
ZWxsID0gKnN0YXRpY19jYXN0PEhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbCo+KGltcGwoKSk7Cisg
ICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICAvLyByZWFkLW9ubHk6IGNlbGxJbmRleAorICAg
ICAgICBjYXNlIFRhYmxlQ2VsbEFiYnI6ICAgICAgICAgICAgeyB0YWJsZUNlbGwuc2V0QWJicihz
dHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZUNlbGxBbGlnbjogICAgICAgICAgIHsg
dGFibGVDZWxsLnNldEFsaWduKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxlQ2Vs
bEF4aXM6ICAgICAgICAgICAgeyB0YWJsZUNlbGwuc2V0QXhpcyhzdHIpOyByZXR1cm47IH0KKyAg
ICAgICAgY2FzZSBUYWJsZUNlbGxCZ0NvbG9yOiAgICAgICAgIHsgdGFibGVDZWxsLnNldEJnQ29s
b3Ioc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGFibGVDZWxsQ2g6ICAgICAgICAgICAg
ICB7IHRhYmxlQ2VsbC5zZXRDaChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZUNl
bGxDaE9mZjogICAgICAgICAgIHsgdGFibGVDZWxsLnNldENoT2ZmKHN0cik7IHJldHVybjsgfQor
ICAgICAgICBjYXNlIFRhYmxlQ2VsbENvbFNwYW46ICAgICAgICAgeyB0YWJsZUNlbGwuc2V0Q29s
U3Bhbih2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGFibGVD
ZWxsSGVhZGVyczogICAgICAgICB7IHRhYmxlQ2VsbC5zZXRIZWFkZXJzKHN0cik7IHJldHVybjsg
fQorICAgICAgICBjYXNlIFRhYmxlQ2VsbEhlaWdodDogICAgICAgICAgeyB0YWJsZUNlbGwuc2V0
SGVpZ2h0KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxlQ2VsbE5vV3JhcDogICAg
ICAgICAgeyB0YWJsZUNlbGwuc2V0Tm9XcmFwKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVy
bjsgfQorICAgICAgICBjYXNlIFRhYmxlQ2VsbFJvd1NwYW46ICAgICAgICAgeyB0YWJsZUNlbGwu
c2V0Um93U3Bhbih2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2Ug
VGFibGVDZWxsU2NvcGU6ICAgICAgICAgICB7IHRhYmxlQ2VsbC5zZXRTY29wZShzdHIpOyByZXR1
cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZUNlbGxWQWxpZ246ICAgICAgICAgIHsgdGFibGVDZWxs
LnNldFZBbGlnbihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZUNlbGxXaWR0aDog
ICAgICAgICAgIHsgdGFibGVDZWxsLnNldFdpZHRoKHN0cik7IHJldHVybjsgfQogICAgIH0KLSAg
ICBicmVhazsKLSAgICBjYXNlIElEX0ZSQU1FU0VUOiB7Ci0gICAgICBIVE1MRnJhbWVTZXRFbGVt
ZW50SW1wbCAmZnJhbWVTZXQgPSBzdGF0aWNfY2FzdDxIVE1MRnJhbWVTZXRFbGVtZW50SW1wbCAm
PihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgRnJhbWVTZXRD
b2xzOiAgICAgICAgICAgIHsgZnJhbWVTZXQuc2V0Q29scyhzdHIpOyByZXR1cm47IH0KLSAgICAg
IGNhc2UgRnJhbWVTZXRSb3dzOiAgICAgICAgICAgIHsgZnJhbWVTZXQuc2V0Um93cyhzdHIpOyBy
ZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6ZnJhbWVTZXRTZXR0ZXIo
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9N
OjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MRnJhbWVTZXRFbGVtZW50SW1wbCYgZnJhbWVT
ZXQgPSAqc3RhdGljX2Nhc3Q8SFRNTEZyYW1lU2V0RWxlbWVudEltcGwqPihpbXBsKCkpOworICAg
IHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBGcmFtZVNldENvbHM6ICAgICAgICAgICAg
eyBmcmFtZVNldC5zZXRDb2xzKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEZyYW1lU2V0
Um93czogICAgICAgICAgICB7IGZyYW1lU2V0LnNldFJvd3Moc3RyKTsgcmV0dXJuOyB9CiAgICAg
fQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfRlJBTUU6IHsKLSAgICAgIEhUTUxGcmFtZUVsZW1l
bnRJbXBsICZmcmFtZUVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRnJhbWVFbGVtZW50SW1wbCAm
PihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgICAvLyByZWFkLW9ubHk6
IEZyYW1lQ29udGVudERvY3VtZW50OgotICAgICAgY2FzZSBGcmFtZUZyYW1lQm9yZGVyOiAgICAg
eyBmcmFtZUVsZW1lbnQuc2V0RnJhbWVCb3JkZXIoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNl
IEZyYW1lTG9uZ0Rlc2M6ICAgICAgICB7IGZyYW1lRWxlbWVudC5zZXRMb25nRGVzYyhzdHIpOyBy
ZXR1cm47IH0KLSAgICAgIGNhc2UgRnJhbWVNYXJnaW5IZWlnaHQ6ICAgIHsgZnJhbWVFbGVtZW50
LnNldE1hcmdpbkhlaWdodChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgRnJhbWVNYXJnaW5X
aWR0aDogICAgIHsgZnJhbWVFbGVtZW50LnNldE1hcmdpbldpZHRoKHN0cik7IHJldHVybjsgfQot
ICAgICAgY2FzZSBGcmFtZU5hbWU6ICAgICAgICAgICAgeyBmcmFtZUVsZW1lbnQuc2V0TmFtZShz
dHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgRnJhbWVOb1Jlc2l6ZTogICAgICAgIHsgZnJhbWVF
bGVtZW50LnNldE5vUmVzaXplKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQotICAg
ICAgY2FzZSBGcmFtZVNjcm9sbGluZzogICAgICAgeyBmcmFtZUVsZW1lbnQuc2V0U2Nyb2xsaW5n
KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBGcmFtZVNyYzogICAgICAgICAgICAgeyBmcmFt
ZUVsZW1lbnQuc2V0U3JjKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBGcmFtZUxvY2F0aW9u
OiAgICAgICAgeyBmcmFtZUVsZW1lbnQuc2V0TG9jYXRpb24oc3RyKTsgcmV0dXJuOyB9Ci0gICAg
ICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OmZyYW1lU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIp
Cit7CisgICAgSFRNTEZyYW1lRWxlbWVudEltcGwmIGZyYW1lRWxlbWVudCA9ICpzdGF0aWNfY2Fz
dDxIVE1MRnJhbWVFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgewor
ICAgICAgICAvLyByZWFkLW9ubHk6IEZyYW1lQ29udGVudERvY3VtZW50OgorICAgICAgICBjYXNl
IEZyYW1lRnJhbWVCb3JkZXI6ICAgICB7IGZyYW1lRWxlbWVudC5zZXRGcmFtZUJvcmRlcihzdHIp
OyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBGcmFtZUxvbmdEZXNjOiAgICAgICAgeyBmcmFtZUVs
ZW1lbnQuc2V0TG9uZ0Rlc2Moc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgRnJhbWVNYXJn
aW5IZWlnaHQ6ICAgIHsgZnJhbWVFbGVtZW50LnNldE1hcmdpbkhlaWdodChzdHIpOyByZXR1cm47
IH0KKyAgICAgICAgY2FzZSBGcmFtZU1hcmdpbldpZHRoOiAgICAgeyBmcmFtZUVsZW1lbnQuc2V0
TWFyZ2luV2lkdGgoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgRnJhbWVOYW1lOiAgICAg
ICAgICAgIHsgZnJhbWVFbGVtZW50LnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNh
c2UgRnJhbWVOb1Jlc2l6ZTogICAgICAgIHsgZnJhbWVFbGVtZW50LnNldE5vUmVzaXplKHZhbHVl
LnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIEZyYW1lU2Nyb2xsaW5n
OiAgICAgICB7IGZyYW1lRWxlbWVudC5zZXRTY3JvbGxpbmcoc3RyKTsgcmV0dXJuOyB9CisgICAg
ICAgIGNhc2UgRnJhbWVTcmM6ICAgICAgICAgICAgIHsgZnJhbWVFbGVtZW50LnNldFNyYyhzdHIp
OyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBGcmFtZUxvY2F0aW9uOiAgICAgICAgeyBmcmFtZUVs
ZW1lbnQuc2V0TG9jYXRpb24oc3RyKTsgcmV0dXJuOyB9CiAgICAgfQotICAgIGJyZWFrOwotICAg
IGNhc2UgSURfSUZSQU1FOiB7Ci0gICAgICBIVE1MSUZyYW1lRWxlbWVudEltcGwgJmlGcmFtZSA9
IHN0YXRpY19jYXN0PEhUTUxJRnJhbWVFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3
aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgSUZyYW1lQWxpZ246ICAgICAgICAgICB7IGlGcmFt
ZS5zZXRBbGlnbihzdHIpOyByZXR1cm47IH0KLSAgICAgIC8vIHJlYWQtb25seTogSUZyYW1lQ29u
dGVudERvY3VtZW50Ci0gICAgICBjYXNlIElGcmFtZUZyYW1lQm9yZGVyOiAgICAgeyBpRnJhbWUu
c2V0RnJhbWVCb3JkZXIoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElGcmFtZUhlaWdodDog
ICAgICAgICAgeyBpRnJhbWUuc2V0SGVpZ2h0KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBJ
RnJhbWVMb25nRGVzYzogICAgICAgIHsgaUZyYW1lLnNldExvbmdEZXNjKHN0cik7IHJldHVybjsg
fQotICAgICAgY2FzZSBJRnJhbWVNYXJnaW5IZWlnaHQ6ICAgIHsgaUZyYW1lLnNldE1hcmdpbkhl
aWdodChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSUZyYW1lTWFyZ2luV2lkdGg6ICAgICB7
IGlGcmFtZS5zZXRNYXJnaW5XaWR0aChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSUZyYW1l
TmFtZTogICAgICAgICAgICB7IGlGcmFtZS5zZXROYW1lKHN0cik7IHJldHVybjsgfQotICAgICAg
Y2FzZSBJRnJhbWVTY3JvbGxpbmc6ICAgICAgIHsgaUZyYW1lLnNldFNjcm9sbGluZyhzdHIpOyBy
ZXR1cm47IH0KLSAgICAgIGNhc2UgSUZyYW1lU3JjOiAgICAgICAgICAgICB7IGlGcmFtZS5zZXRT
cmMoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElGcmFtZVdpZHRoOiAgICAgICAgICAgeyBp
RnJhbWUuc2V0V2lkdGgoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICB9Ci0gICAgICBicmVhazsKK30K
Kwordm9pZCBIVE1MRWxlbWVudDo6aUZyYW1lU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7Cisg
ICAgSFRNTElGcmFtZUVsZW1lbnRJbXBsJiBpRnJhbWUgPSAqc3RhdGljX2Nhc3Q8SFRNTElGcmFt
ZUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNh
c2UgSUZyYW1lQWxpZ246ICAgICAgICAgICB7IGlGcmFtZS5zZXRBbGlnbihzdHIpOyByZXR1cm47
IH0KKyAgICAgICAgLy8gcmVhZC1vbmx5OiBJRnJhbWVDb250ZW50RG9jdW1lbnQKKyAgICAgICAg
Y2FzZSBJRnJhbWVGcmFtZUJvcmRlcjogICAgIHsgaUZyYW1lLnNldEZyYW1lQm9yZGVyKHN0cik7
IHJldHVybjsgfQorICAgICAgICBjYXNlIElGcmFtZUhlaWdodDogICAgICAgICAgeyBpRnJhbWUu
c2V0SGVpZ2h0KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIElGcmFtZUxvbmdEZXNjOiAg
ICAgICAgeyBpRnJhbWUuc2V0TG9uZ0Rlc2Moc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2Ug
SUZyYW1lTWFyZ2luSGVpZ2h0OiAgICB7IGlGcmFtZS5zZXRNYXJnaW5IZWlnaHQoc3RyKTsgcmV0
dXJuOyB9CisgICAgICAgIGNhc2UgSUZyYW1lTWFyZ2luV2lkdGg6ICAgICB7IGlGcmFtZS5zZXRN
YXJnaW5XaWR0aChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJRnJhbWVOYW1lOiAgICAg
ICAgICAgIHsgaUZyYW1lLnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgSUZy
YW1lU2Nyb2xsaW5nOiAgICAgICB7IGlGcmFtZS5zZXRTY3JvbGxpbmcoc3RyKTsgcmV0dXJuOyB9
CisgICAgICAgIGNhc2UgSUZyYW1lU3JjOiAgICAgICAgICAgICB7IGlGcmFtZS5zZXRTcmMoc3Ry
KTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgSUZyYW1lV2lkdGg6ICAgICAgICAgICB7IGlGcmFt
ZS5zZXRXaWR0aChzdHIpOyByZXR1cm47IH0KICAgICB9Ci0gIH0KK30KIAotICAvLyBnZW5lcmlj
IHByb3BlcnRpZXMKLSAgc3dpdGNoICh0b2tlbikgewotICBjYXNlIEVsZW1lbnRJZDoKLSAgICBl
bGVtZW50LnNldElkKHN0cik7Ci0gICAgcmV0dXJuOwotICBjYXNlIEVsZW1lbnRUaXRsZToKLSAg
ICBlbGVtZW50LnNldFRpdGxlKHN0cik7Ci0gICAgcmV0dXJuOwotICBjYXNlIEVsZW1lbnRMYW5n
OgotICAgIGVsZW1lbnQuc2V0TGFuZyhzdHIpOwotICAgIHJldHVybjsKLSAgY2FzZSBFbGVtZW50
RGlyOgotICAgIGVsZW1lbnQuc2V0RGlyKHN0cik7Ci0gICAgcmV0dXJuOwotICBjYXNlIEVsZW1l
bnRDbGFzc05hbWU6Ci0gICAgZWxlbWVudC5zZXRDbGFzc05hbWUoc3RyKTsKLSAgICByZXR1cm47
Ci0gIGNhc2UgRWxlbWVudElubmVySFRNTDoKLSAgICBlbGVtZW50LnNldElubmVySFRNTChzdHIs
IGV4Y2VwdGlvbik7Ci0gICAgcmV0dXJuOwotICBjYXNlIEVsZW1lbnRJbm5lclRleHQ6Ci0gICAg
ZWxlbWVudC5zZXRJbm5lclRleHQoc3RyLCBleGNlcHRpb24pOwotICAgIHJldHVybjsKLSAgY2Fz
ZSBFbGVtZW50T3V0ZXJIVE1MOgotICAgIGVsZW1lbnQuc2V0T3V0ZXJIVE1MKHN0ciwgZXhjZXB0
aW9uKTsKLSAgICByZXR1cm47Ci0gIGNhc2UgRWxlbWVudE91dGVyVGV4dDoKLSAgICBlbGVtZW50
LnNldE91dGVyVGV4dChzdHIsIGV4Y2VwdGlvbik7Ci0gICAgcmV0dXJuOwotICBjYXNlIEVsZW1l
bnRDb250ZW50RWRpdGFibGU6Ci0gICAgZWxlbWVudC5zZXRDb250ZW50RWRpdGFibGUoc3RyKTsK
LSAgICByZXR1cm47Ci0gIGRlZmF1bHQ6Ci0gICAga2RXYXJuaW5nKCkgPDwgIktKUzo6SFRNTEVs
ZW1lbnQ6OnB1dFZhbHVlIHVuaGFuZGxlZCB0b2tlbiAiIDw8IHRva2VuIDw8ICIgdGhpc1RhZz0i
IDw8IGVsZW1lbnQudGFnTmFtZSgpLnN0cmluZygpIDw8ICIgc3RyPSIgPDwgc3RyLnN0cmluZygp
IDw8IGVuZGw7Ci0gIH0KK3ZvaWQgSFRNTEVsZW1lbnQ6Om1hcnF1ZWVTZXR0ZXIoRXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJp
bmcmIHN0cikKK3sKKyAgICAvLyBGSVhNRTogRmluZCBvdXQgd2hhdCBXaW5JRSBzdXBwb3J0cyBh
bmQgaW1wbGVtZW50IGl0LgorfQorCit2b2lkIEhUTUxFbGVtZW50OjpwdXRWYWx1ZShFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBpbnQpCit7CisgICAgRE9N
RXhjZXB0aW9uVHJhbnNsYXRvciBleGNlcHRpb24oZXhlYyk7CisgICAgRE9NOjpET01TdHJpbmcg
c3RyID0gdmFsdWUuaXNBKE51bGxUeXBlKSA/IERPTTo6RE9NU3RyaW5nKCkgOiB2YWx1ZS50b1N0
cmluZyhleGVjKS5zdHJpbmcoKTsKKyAKKyAgICAvLyBDaGVjayBvdXIgc2V0IG9mIGdlbmVyaWMg
cHJvcGVydGllcyBmaXJzdC4KKyAgICBIVE1MRWxlbWVudEltcGwgJmVsZW1lbnQgPSAqc3RhdGlj
X2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgewor
ICAgICAgICBjYXNlIEVsZW1lbnRJZDoKKyAgICAgICAgICAgIGVsZW1lbnQuc2V0SWQoc3RyKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBFbGVtZW50VGl0bGU6CisgICAgICAg
ICAgICBlbGVtZW50LnNldFRpdGxlKHN0cik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IGNhc2UgRWxlbWVudExhbmc6CisgICAgICAgICAgICBlbGVtZW50LnNldExhbmcoc3RyKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBFbGVtZW50RGlyOgorICAgICAgICAgICAg
ZWxlbWVudC5zZXREaXIoc3RyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBF
bGVtZW50Q2xhc3NOYW1lOgorICAgICAgICAgICAgZWxlbWVudC5zZXRDbGFzc05hbWUoc3RyKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBFbGVtZW50SW5uZXJIVE1MOgorICAg
ICAgICAgICAgZWxlbWVudC5zZXRJbm5lckhUTUwoc3RyLCBleGNlcHRpb24pOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICBjYXNlIEVsZW1lbnRJbm5lclRleHQ6CisgICAgICAgICAgICBl
bGVtZW50LnNldElubmVyVGV4dChzdHIsIGV4Y2VwdGlvbik7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIGNhc2UgRWxlbWVudE91dGVySFRNTDoKKyAgICAgICAgICAgIGVsZW1lbnQuc2V0
T3V0ZXJIVE1MKHN0ciwgZXhjZXB0aW9uKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
Y2FzZSBFbGVtZW50T3V0ZXJUZXh0OgorICAgICAgICAgICAgZWxlbWVudC5zZXRPdXRlclRleHQo
c3RyLCBleGNlcHRpb24pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIEVsZW1l
bnRDb250ZW50RWRpdGFibGU6CisgICAgICAgICAgICBlbGVtZW50LnNldENvbnRlbnRFZGl0YWJs
ZShzdHIpOworICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIE5vdyBjaGVjayBm
b3IgcHJvcGVydGllcyB0aGF0IGFwcGx5IHRvIGEgc3BlY2lmaWMgZWxlbWVudCB0eXBlLgorICAg
IGNvbnN0IEdldFNldEluZm8qIGluZm8gPSBnZXRTZXRJbmZvKCk7CisgICAgaWYgKGluZm8gJiYg
aW5mby0+bV9zZXR0ZXIpCisgICAgICAgIHJldHVybiAodGhpcy0+KihpbmZvLT5tX3NldHRlcikp
KGV4ZWMsIHRva2VuLCB2YWx1ZSwgc3RyKTsgIAogfQogCiBIVE1MRWxlbWVudEltcGwgKnRvSFRN
TEVsZW1lbnQoVmFsdWVJbXAgKnZhbCkKQEAgLTMxMTMsMjMgKzMyNzQsMTcgQEAgSFRNTEVsZW1l
bnRJbXBsICp0b0hUTUxFbGVtZW50KFZhbHVlSW1wIAogCiBIVE1MVGFibGVDYXB0aW9uRWxlbWVu
dEltcGwgKnRvSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQoVmFsdWVJbXAgKnZhbCkKIHsKLSAgICBp
ZiAoSFRNTEVsZW1lbnRJbXBsICplID0gdG9IVE1MRWxlbWVudCh2YWwpKQotICAgICAgICBzd2l0
Y2ggKGUtPmlkKCkpIHsKLSAgICAgICAgICAgIGNhc2UgSURfQ0FQVElPTjoKLSAgICAgICAgICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnRJbXBsICo+KGUp
OwotICAgICAgICB9CisgICAgSFRNTEVsZW1lbnRJbXBsICplID0gdG9IVE1MRWxlbWVudCh2YWwp
OworICAgIGlmIChlICYmIGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpjYXB0aW9uKCkpKQorICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnRJbXBsICo+KGUp
OwogICAgIHJldHVybiAwOwogfQogCiBIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGwgKnRvSFRN
TFRhYmxlU2VjdGlvbkVsZW1lbnQoVmFsdWVJbXAgKnZhbCkKIHsKLSAgICBpZiAoSFRNTEVsZW1l
bnRJbXBsICplID0gdG9IVE1MRWxlbWVudCh2YWwpKQotICAgICAgICBzd2l0Y2ggKGUtPmlkKCkp
IHsKLSAgICAgICAgICAgIGNhc2UgSURfVEhFQUQ6Ci0gICAgICAgICAgICBjYXNlIElEX1RCT0RZ
OgotICAgICAgICAgICAgY2FzZSBJRF9URk9PVDoKLSAgICAgICAgICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsICo+KGUpOwotICAgICAgICB9Cisg
ICAgSFRNTEVsZW1lbnRJbXBsICplID0gdG9IVE1MRWxlbWVudCh2YWwpOworICAgIGlmIChlICYm
IChlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGhlYWQoKSkgfHwgZS0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OnRib2R5KCkpIHx8IGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0Zm9vdCgpKSkpCisg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGwgKj4o
ZSk7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTMxNzgsMTAgKzMzMzMsMTAgQEAgVmFsdWUgS0pT
OjpIVE1MQ29sbGVjdGlvbjo6dHJ5R2V0KEV4ZWNTdAogICBlbHNlIGlmIChwcm9wZXJ0eU5hbWUg
PT0gInNlbGVjdGVkSW5kZXgiKSB7CiAgICAgLy8gTk9OLVNUQU5EQVJEIG9wdGlvbnMuc2VsZWN0
ZWRJbmRleAogICAgIE5vZGVJbXBsICpvcHRpb24gPSBjb2xsZWN0aW9uLml0ZW0oMCk7Ci0gICAg
aWYgKG9wdGlvbi0+aWQoKSA9PSBJRF9PUFRJT04pIHsKKyAgICBpZiAob3B0aW9uLT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpKSB7CiAgICAgICBOb2RlSW1wbCAqc2VsZWN0ID0gb3B0
aW9uOwogICAgICAgd2hpbGUgKChzZWxlY3QgPSBzZWxlY3QtPnBhcmVudE5vZGUoKSkpCi0gICAg
ICAgIGlmIChzZWxlY3QtPmlkKCkgPT0gSURfU0VMRUNUKQorICAgICAgICBpZiAoc2VsZWN0LT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6c2VsZWN0KCkpKQogCSAgcmV0dXJuIE51bWJlcihzdGF0aWNf
Y2FzdDxIVE1MU2VsZWN0RWxlbWVudEltcGwgKj4oc2VsZWN0KS0+c2VsZWN0ZWRJbmRleCgpKTsK
ICAgICB9CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwpAQCAtMzM2OSw3ICszNTI0LDcgQEAgdm9p
ZCBLSlM6OkhUTUxTZWxlY3RDb2xsZWN0aW9uOjp0cnlQdXQoRQogCiAgIC8vIGlzIHYgYW4gb3B0
aW9uIGVsZW1lbnQgPwogICBOb2RlSW1wbCAqb3B0aW9uID0gdG9Ob2RlKHZhbHVlKTsKLSAgaWYg
KCFvcHRpb24gfHwgb3B0aW9uLT5pZCgpICE9IElEX09QVElPTikKKyAgaWYgKCFvcHRpb24gfHwg
IW9wdGlvbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9wdGlvbigpKSkKICAgICByZXR1cm47CiAK
ICAgaW50IGV4Y2VwdGlvbiA9IDA7CkluZGV4OiBraHRtbC9lY21hL2tqc19odG1sLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWNtYS9ranNfaHRtbC5oLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjQ5CmRpZmYgLXUgLXAgLXIxLjQ5IGtodG1sL2VjbWEva2pz
X2h0bWwuaAotLS0ga2h0bWwvZWNtYS9ranNfaHRtbC5oCTMgSnVsIDIwMDUgMTA6NDc6NTYgLTAw
MDAJMS40OQorKysga2h0bWwvZWNtYS9ranNfaHRtbC5oCTcgSnVsIDIwMDUgMDU6NTg6NDQgLTAw
MDAKQEAgLTg1LDYgKzg1LDEzMSBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgIGNhcHRpb25faW5m
bywgY29sX2luZm8sIHRhYmxlc2VjdGlvbl9pbmZvLCB0cl9pbmZvLAogICAgICAgdGFibGVjZWxs
X2luZm8sIGZyYW1lU2V0X2luZm8sIGZyYW1lX2luZm8sIGlGcmFtZV9pbmZvLCBtYXJxdWVlX2lu
Zm87CiAKKyAgICAvLyBGSVhNRTogTWlnaHQgbWFrZSBzZW5zZSB0byBjb21iaW5lIHRoaXMgd2l0
aCBDbGFzc0luZm8gc29tZSBkYXkuCisgICAgdHlwZWRlZiBWYWx1ZSAoSFRNTEVsZW1lbnQ6OipH
ZXR0ZXJGdW5jdGlvbikoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHR5
cGVkZWYgdm9pZCAoSFRNTEVsZW1lbnQ6OipTZXR0ZXJGdW5jdGlvbikoRXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0
cik7CisgICAgc3RydWN0IEdldFNldEluZm8geyBHZXR0ZXJGdW5jdGlvbiBtX2dldHRlcjsgU2V0
dGVyRnVuY3Rpb24gbV9zZXR0ZXI7IH07CisgICAgY29uc3QgR2V0U2V0SW5mbyogZ2V0U2V0SW5m
bygpIGNvbnN0OworICAgIHN0YXRpYyBjb25zdCBHZXRTZXRJbmZvIGh0bWxfZ2V0c2V0LCBoZWFk
X2dldHNldCwgbGlua19nZXRzZXQsIHRpdGxlX2dldHNldCwKKyAgICAgIG1ldGFfZ2V0c2V0LCBi
YXNlX2dldHNldCwgaXNJbmRleF9nZXRzZXQsIHN0eWxlX2dldHNldCwgYm9keV9nZXRzZXQsIGZv
cm1fZ2V0c2V0LAorICAgICAgc2VsZWN0X2dldHNldCwgb3B0R3JvdXBfZ2V0c2V0LCBvcHRpb25f
Z2V0c2V0LCBpbnB1dF9nZXRzZXQsIHRleHRBcmVhX2dldHNldCwKKyAgICAgIGJ1dHRvbl9nZXRz
ZXQsIGxhYmVsX2dldHNldCwgZmllbGRTZXRfZ2V0c2V0LCBsZWdlbmRfZ2V0c2V0LCB1bF9nZXRz
ZXQsIG9sX2dldHNldCwKKyAgICAgIGRsX2dldHNldCwgZGlyX2dldHNldCwgbWVudV9nZXRzZXQs
IGxpX2dldHNldCwgZGl2X2dldHNldCwgcF9nZXRzZXQsIGhlYWRpbmdfZ2V0c2V0LAorICAgICAg
YmxvY2tRdW90ZV9nZXRzZXQsIHFfZ2V0c2V0LCBwcmVfZ2V0c2V0LCBicl9nZXRzZXQsIGJhc2VG
b250X2dldHNldCwgZm9udF9nZXRzZXQsCisgICAgICBocl9nZXRzZXQsIG1vZF9nZXRzZXQsIGFf
Z2V0c2V0LCBjYW52YXNfZ2V0c2V0LCBpbWdfZ2V0c2V0LCBvYmplY3RfZ2V0c2V0LCBwYXJhbV9n
ZXRzZXQsCisgICAgICBhcHBsZXRfZ2V0c2V0LCBtYXBfZ2V0c2V0LCBhcmVhX2dldHNldCwgc2Ny
aXB0X2dldHNldCwgdGFibGVfZ2V0c2V0LAorICAgICAgY2FwdGlvbl9nZXRzZXQsIGNvbF9nZXRz
ZXQsIHRhYmxlc2VjdGlvbl9nZXRzZXQsIHRyX2dldHNldCwKKyAgICAgIHRhYmxlY2VsbF9nZXRz
ZXQsIGZyYW1lU2V0X2dldHNldCwgZnJhbWVfZ2V0c2V0LCBpRnJhbWVfZ2V0c2V0LCBtYXJxdWVl
X2dldHNldDsKKworICAgIFZhbHVlIGh0bWxHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0OworICAgIHZvaWQgIGh0bWxTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAg
VmFsdWUgaGVhZEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAg
dm9pZCAgaGVhZFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUm
IHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBsaW5rR2V0dGVy
KEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBsaW5rU2V0dGVy
KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERP
TTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIHRpdGxlR2V0dGVyKEV4ZWNTdGF0ZSogZXhl
YywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICB0aXRsZVNldHRlcihFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYg
c3RyKTsKKyAgICBWYWx1ZSBtZXRhR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBj
b25zdDsKKyAgICB2b2lkICBtZXRhU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBj
b25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVl
IGJhc2VHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQg
IGJhc2VTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1
ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgaXNJbmRleEdldHRlcihF
eGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgaXNJbmRleFNldHRl
cihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBE
T006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBzdHlsZUdldHRlcihFeGVjU3RhdGUqIGV4
ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgc3R5bGVTZXR0ZXIoRXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcm
IHN0cik7CisgICAgVmFsdWUgYm9keUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikg
Y29uc3Q7CisgICAgdm9pZCAgYm9keVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwg
Y29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1
ZSBmb3JtR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lk
ICBmb3JtU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFs
dWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIHNlbGVjdEdldHRlcihF
eGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgc2VsZWN0U2V0dGVy
KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERP
TTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIG9wdEdyb3VwR2V0dGVyKEV4ZWNTdGF0ZSog
ZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBvcHRHcm91cFNldHRlcihFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0
cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBvcHRpb25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQg
dG9rZW4pIGNvbnN0OworICAgIHZvaWQgIG9wdGlvblNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsK
KyAgICBWYWx1ZSBpbnB1dEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7
CisgICAgdm9pZCAgaW5wdXRTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0
IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgdGV4
dEFyZWFHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQg
IHRleHRBcmVhU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYg
dmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIGJ1dHRvbkdldHRl
cihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgYnV0dG9uU2V0
dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0
IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIGxhYmVsR2V0dGVyKEV4ZWNTdGF0ZSog
ZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBsYWJlbFNldHRlcihFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmlu
ZyYgc3RyKTsKKyAgICBWYWx1ZSBmaWVsZFNldEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0
b2tlbikgY29uc3Q7CisgICAgdm9pZCAgZmllbGRTZXRTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7
CisgICAgVmFsdWUgbGVnZW5kR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25z
dDsKKyAgICB2b2lkICBsZWdlbmRTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNv
bnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUg
dUxpc3RHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQg
IHVMaXN0U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFs
dWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIG9MaXN0R2V0dGVyKEV4
ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBvTGlzdFNldHRlcihF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006
OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBkTGlzdEdldHRlcihFeGVjU3RhdGUqIGV4ZWMs
IGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgZExpc3RTZXR0ZXIoRXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0
cik7CisgICAgVmFsdWUgZGlyR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25z
dDsKKyAgICB2b2lkICBkaXJTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0
IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgbWVu
dUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgbWVu
dVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBj
b25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBsaUdldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgbGlTZXR0ZXIoRXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcm
IHN0cik7CisgICAgVmFsdWUgZGl2R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBj
b25zdDsKKyAgICB2b2lkICBkaXZTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNv
bnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUg
cGFyYWdyYXBoR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2
b2lkICBwYXJhZ3JhcGhTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZh
bHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgaGVhZGlu
Z0dldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgaGVh
ZGluZ1NldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVl
LCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBibG9ja1F1b3RlR2V0dGVy
KEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBibG9ja1F1b3Rl
U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNv
bnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIHF1b3RlR2V0dGVyKEV4ZWNTdGF0
ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBxdW90ZVNldHRlcihFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0
cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBwcmVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0OworICAgIHZvaWQgIHByZVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
biwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBW
YWx1ZSBickdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9p
ZCAgYnJTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1
ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgYmFzZUZvbnRHZXR0ZXIo
RXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGJhc2VGb250U2V0
dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0
IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIGZvbnRHZXR0ZXIoRXhlY1N0YXRlKiBl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGZvbnRTZXR0ZXIoRXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcm
IHN0cik7CisgICAgVmFsdWUgaHJHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNv
bnN0OworICAgIHZvaWQgIGhyU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25z
dCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIG1v
ZEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgbW9k
U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNv
bnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIGFuY2hvckdldHRlcihFeGVjU3Rh
dGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgYW5jaG9yU2V0dGVyKEV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9N
U3RyaW5nJiBzdHIpOworICAgIFZhbHVlIGltYWdlR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50
IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBpbWFnZVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsK
KyAgICBWYWx1ZSBvYmplY3RHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0
OworICAgIHZvaWQgIG9iamVjdFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29u
c3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBw
YXJhbUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAg
cGFyYW1TZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1
ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgYXBwbGV0R2V0dGVyKEV4
ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBhcHBsZXRTZXR0ZXIo
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9N
OjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgbWFwR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywg
aW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBtYXBTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7
CisgICAgVmFsdWUgYXJlYUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7
CisgICAgdm9pZCAgYXJlYVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3Qg
VmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBzY3Jp
cHRHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIHNj
cmlwdFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVl
LCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSB0YWJsZUdldHRlcihFeGVj
U3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgdGFibGVTZXR0ZXIoRXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpE
T01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgdGFibGVDYXB0aW9uR2V0dGVyKEV4ZWNTdGF0ZSog
ZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICB0YWJsZUNhcHRpb25TZXR0ZXIoRXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpE
T01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgdGFibGVDb2xHZXR0ZXIoRXhlY1N0YXRlKiBleGVj
LCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIHRhYmxlQ29sU2V0dGVyKEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5n
JiBzdHIpOworICAgIFZhbHVlIHRhYmxlU2VjdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGlu
dCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgdGFibGVTZWN0aW9uU2V0dGVyKEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5n
JiBzdHIpOworICAgIFZhbHVlIHRhYmxlUm93R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRv
a2VuKSBjb25zdDsKKyAgICB2b2lkICB0YWJsZVJvd1NldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsK
KyAgICBWYWx1ZSB0YWJsZUNlbGxHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNv
bnN0OworICAgIHZvaWQgIHRhYmxlQ2VsbFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
biwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBW
YWx1ZSBmcmFtZVNldEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7Cisg
ICAgdm9pZCAgZnJhbWVTZXRTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0
IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgZnJh
bWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGZy
YW1lU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUs
IGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIGlGcmFtZUdldHRlcihFeGVj
U3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgaUZyYW1lU2V0dGVyKEV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6
RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIG1hcnF1ZWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVj
LCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIG1hcnF1ZWVTZXR0ZXIoRXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcm
IHN0cik7CisKICAgICBlbnVtIHsgSHRtbFZlcnNpb24sIEhlYWRQcm9maWxlLCBMaW5rSHJlZiwg
TGlua1JlbCwgTGlua01lZGlhLAogICAgICAgICAgICBMaW5rQ2hhcnNldCwgTGlua0Rpc2FibGVk
LCBMaW5rSHJlZkxhbmcsIExpbmtSZXYsIExpbmtUYXJnZXQsIExpbmtUeXBlLAogICAgICAgICAg
ICBMaW5rU2hlZXQsIFRpdGxlVGV4dCwgTWV0YU5hbWUsIE1ldGFIdHRwRXF1aXYsIE1ldGFDb250
ZW50LCBNZXRhU2NoZW1lLApJbmRleDoga2h0bWwvZWNtYS9ranNfd2luZG93LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lY21hL2tqc193aW5kb3cuY3Bw
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE2MgpkaWZmIC11IC1wIC1yMS4xNjIga2h0bWwvZWNt
YS9ranNfd2luZG93LmNwcAotLS0ga2h0bWwvZWNtYS9ranNfd2luZG93LmNwcAkzIEp1bCAyMDA1
IDEwOjQ3OjU2IC0wMDAwCTEuMTYyCisrKyBraHRtbC9lY21hL2tqc193aW5kb3cuY3BwCTcgSnVs
IDIwMDUgMDU6NTg6NDcgLTAwMDAKQEAgLTY4LDcgKzY4LDYgQEAKICNpbmNsdWRlICJodG1sL2h0
bWxfZG9jdW1lbnRpbXBsLmgiCiAjaW5jbHVkZSAiY3NzL2Nzc19ydWxlaW1wbC5oIgogI2luY2x1
ZGUgImNzcy9jc3Nfc3R5bGVzaGVldGltcGwuaCIKLSNpbmNsdWRlICJtaXNjL2h0bWx0YWdzLmgi
CiAKIC8vIE11c3QgaW5jbHVkZSA8Y21hdGg+IGluc3RlYWQgb2YgPG1hdGguaD4gYmVjYXVzZSBv
ZiBhIGJ1ZyBpbiB0aGUKIC8vIGdjYyAzLjMgbGlicmFyeSB2ZXJzaW9uIG9mIDxtYXRoLmg+IHdo
ZXJlIGlmIHlvdSBpbmNsdWRlIGJvdGgKSW5kZXg6IGtodG1sL2VkaXRpbmcvYXBwbHlfc3R5bGVf
Y29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwv
ZWRpdGluZy9hcHBseV9zdHlsZV9jb21tYW5kLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40
CmRpZmYgLXUgLXAgLXIxLjQga2h0bWwvZWRpdGluZy9hcHBseV9zdHlsZV9jb21tYW5kLmNwcAot
LS0ga2h0bWwvZWRpdGluZy9hcHBseV9zdHlsZV9jb21tYW5kLmNwcAk1IEp1bCAyMDA1IDIzOjIx
OjA3IC0wMDAwCTEuNAorKysga2h0bWwvZWRpdGluZy9hcHBseV9zdHlsZV9jb21tYW5kLmNwcAk3
IEp1bCAyMDA1IDA1OjU4OjQ4IC0wMDAwCkBAIC0zMyw3ICszMyw3IEBACiAjaW5jbHVkZSAiY3Nz
L2Nzc3Byb3BlcnRpZXMuaCIKICNpbmNsdWRlICJkb20vZG9tX3N0cmluZy5oIgogI2luY2x1ZGUg
Imh0bWwvaHRtbF9lbGVtZW50aW1wbC5oIgotI2luY2x1ZGUgIm1pc2MvaHRtbHRhZ3MuaCIKKyNp
bmNsdWRlICJodG1sbmFtZXMuaCIKICNpbmNsdWRlICJtaXNjL2h0bWxhdHRycy5oIgogI2luY2x1
ZGUgInJlbmRlcmluZy9yZW5kZXJfb2JqZWN0LmgiCiAjaW5jbHVkZSAieG1sL2RvbV9kb2NpbXBs
LmgiCkBAIC02NSw2ICs2NSw3IEBAIHVzaW5nIERPTTo6Tm9kZUltcGw7CiB1c2luZyBET006OlBv
c2l0aW9uOwogdXNpbmcgRE9NOjpSYW5nZUltcGw7CiB1c2luZyBET006OlRleHRJbXBsOwordXNp
bmcgRE9NOjpIVE1MTmFtZXM7CiAKIG5hbWVzcGFjZSBraHRtbCB7CiAKQEAgLTI0OSwxMiArMjUw
LDEyIEBAIGJvb2wgaXNTdHlsZVNwYW4oY29uc3QgTm9kZUltcGwgKm5vZGUpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAogICAgIGNvbnN0IEhUTUxFbGVtZW50SW1wbCAqZWxlbSA9IHN0YXRpY19j
YXN0PGNvbnN0IEhUTUxFbGVtZW50SW1wbCAqPihub2RlKTsKLSAgICByZXR1cm4gZWxlbS0+aWQo
KSA9PSBJRF9TUEFOICYmIGVsZW0tPmdldEF0dHJpYnV0ZShBVFRSX0NMQVNTKSA9PSBzdHlsZVNw
YW5DbGFzc1N0cmluZygpOworICAgIHJldHVybiBlbGVtLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVz
OjpzcGFuKCkpICYmIGVsZW0tPmdldEF0dHJpYnV0ZShBVFRSX0NMQVNTKSA9PSBzdHlsZVNwYW5D
bGFzc1N0cmluZygpOwogfQogCiBzdGF0aWMgYm9vbCBpc0VtcHR5U3R5bGVTcGFuKGNvbnN0IE5v
ZGVJbXBsICpub2RlKQogewotICAgIGlmICghbm9kZSB8fCAhbm9kZS0+aXNIVE1MRWxlbWVudCgp
IHx8IG5vZGUtPmlkKCkgIT0gSURfU1BBTikKKyAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPmlzSFRN
TEVsZW1lbnQoKSB8fCAhbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnNwYW4oKSkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIGNvbnN0IEhUTUxFbGVtZW50SW1wbCAqZWxlbSA9IHN0
YXRpY19jYXN0PGNvbnN0IEhUTUxFbGVtZW50SW1wbCAqPihub2RlKTsKQEAgLTI2NCw3ICsyNjUs
NyBAQCBzdGF0aWMgYm9vbCBpc0VtcHR5U3R5bGVTcGFuKGNvbnN0IE5vZGVJCiAKIHN0YXRpYyBi
b29sIGlzRW1wdHlGb250VGFnKGNvbnN0IE5vZGVJbXBsICpub2RlKQogewotICAgIGlmICghbm9k
ZSB8fCBub2RlLT5pZCgpICE9IElEX0ZPTlQpCisgICAgaWYgKCFub2RlIHx8ICFub2RlLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6Zm9udCgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
Y29uc3QgRWxlbWVudEltcGwgKmVsZW0gPSBzdGF0aWNfY2FzdDxjb25zdCBFbGVtZW50SW1wbCAq
Pihub2RlKTsKQEAgLTI3NSw3ICsyNzYsNyBAQCBzdGF0aWMgYm9vbCBpc0VtcHR5Rm9udFRhZyhj
b25zdCBOb2RlSW1wCiBzdGF0aWMgRWxlbWVudEltcGwgKmNyZWF0ZUZvbnRFbGVtZW50KERvY3Vt
ZW50SW1wbCAqZG9jdW1lbnQpCiB7CiAgICAgaW50IGV4Y2VwdGlvbkNvZGUgPSAwOwotICAgIEVs
ZW1lbnRJbXBsICpmb250Tm9kZSA9IGRvY3VtZW50LT5jcmVhdGVIVE1MRWxlbWVudCgiZm9udCIs
IGV4Y2VwdGlvbkNvZGUpOworICAgIEVsZW1lbnRJbXBsICpmb250Tm9kZSA9IGRvY3VtZW50LT5j
cmVhdGVFbGVtZW50TlMoWEhUTUxfTkFNRVNQQUNFLCAiZm9udCIsIGV4Y2VwdGlvbkNvZGUpOwog
ICAgIEFTU0VSVChleGNlcHRpb25Db2RlID09IDApOwogICAgIGZvbnROb2RlLT5zZXRBdHRyaWJ1
dGUoQVRUUl9DTEFTUywgc3R5bGVTcGFuQ2xhc3NTdHJpbmcoKSk7CiAgICAgcmV0dXJuIGZvbnRO
b2RlOwpAQCAtMjg0LDcgKzI4NSw3IEBAIHN0YXRpYyBFbGVtZW50SW1wbCAqY3JlYXRlRm9udEVs
ZW1lbnQoRG8KIEVsZW1lbnRJbXBsICpjcmVhdGVTdHlsZVNwYW5FbGVtZW50KERvY3VtZW50SW1w
bCAqZG9jdW1lbnQpCiB7CiAgICAgaW50IGV4Y2VwdGlvbkNvZGUgPSAwOwotICAgIEVsZW1lbnRJ
bXBsICpzdHlsZUVsZW1lbnQgPSBkb2N1bWVudC0+Y3JlYXRlSFRNTEVsZW1lbnQoIlNQQU4iLCBl
eGNlcHRpb25Db2RlKTsKKyAgICBFbGVtZW50SW1wbCAqc3R5bGVFbGVtZW50ID0gZG9jdW1lbnQt
PmNyZWF0ZUVsZW1lbnROUyhYSFRNTF9OQU1FU1BBQ0UsICJzcGFuIiwgZXhjZXB0aW9uQ29kZSk7
CiAgICAgQVNTRVJUKGV4Y2VwdGlvbkNvZGUgPT0gMCk7CiAgICAgc3R5bGVFbGVtZW50LT5zZXRB
dHRyaWJ1dGUoQVRUUl9DTEFTUywgc3R5bGVTcGFuQ2xhc3NTdHJpbmcoKSk7CiAgICAgcmV0dXJu
IHN0eWxlRWxlbWVudDsKQEAgLTU4Niw3ICs1ODcsNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5k
OjphcHBseUlubGluZVN0eWxlCiAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBjdXJyZW50IGdy
b3VwLgogICAgICAgICAgICAgICAgICAgICBpZiAobm9kZSA9PSBlbmQubm9kZSgpIHx8IAogICAg
ICAgICAgICAgICAgICAgICAgICAgcnVuU3RhcnQtPnBhcmVudE5vZGUoKSAhPSBuZXh0LT5wYXJl
bnROb2RlKCkgfHwgCi0gICAgICAgICAgICAgICAgICAgICAgICAobmV4dC0+aXNIVE1MRWxlbWVu
dCgpICYmIG5leHQtPmlkKCkgIT0gSURfQlIpIHx8IAorICAgICAgICAgICAgICAgICAgICAgICAg
KG5leHQtPmlzRWxlbWVudE5vZGUoKSAmJiAhbmV4dC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJy
KCkpKSB8fCAKICAgICAgICAgICAgICAgICAgICAgICAgIChuZXh0LT5yZW5kZXJlcigpICYmICFu
ZXh0LT5yZW5kZXJlcigpLT5pc0lubGluZSgpKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgICAgICBub2RlID0gbmV4dDsKQEAgLTYxMSwxMSArNjEyLDEx
IEBAIGJvb2wgQXBwbHlTdHlsZUNvbW1hbmQ6OmlzSFRNTFN0eWxlTm9kZSgKICAgICBmb3IgKFFW
YWx1ZUxpc3RDb25zdEl0ZXJhdG9yPENTU1Byb3BlcnR5PiBpdCA9IHN0eWxlLT52YWx1ZXNJdGVy
YXRvcigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgc3dpdGNoICgoKml0KS5pZCgpKSB7
CiAgICAgICAgICAgICBjYXNlIENTU19QUk9QX0ZPTlRfV0VJR0hUOgotICAgICAgICAgICAgICAg
IGlmIChlbGVtLT5pZCgpID09IElEX0IpCisgICAgICAgICAgICAgICAgaWYgKGVsZW0tPmhhc0xv
Y2FsTmFtZShIVE1MTmFtZXM6OmIoKSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDU1NfUFJPUF9GT05U
X1NUWUxFOgotICAgICAgICAgICAgICAgIGlmIChlbGVtLT5pZCgpID09IElEX0kpCisgICAgICAg
ICAgICAgICAgaWYgKGVsZW0tPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmkoKSkpCiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQpAQCAtNjM4LDcgKzYz
OSw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUhUTUxGb250U3QKICAgICBBU1NF
UlQoc3R5bGUpOwogICAgIEFTU0VSVChlbGVtKTsKIAotICAgIGlmIChlbGVtLT5pZCgpICE9IElE
X0ZPTlQpCisgICAgaWYgKCFlbGVtLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpmb250KCkpKQog
ICAgICAgICByZXR1cm47CiAKICAgICBpbnQgZXhjZXB0aW9uQ29kZSA9IDA7CkBAIC0xMDQ3LDcg
KzEwNDgsNyBAQCBzdGF0aWMgYm9vbCBhcmVJZGVudGljYWxFbGVtZW50cyhOb2RlSW1wCiAgICAg
RWxlbWVudEltcGwgKmZpcnN0RWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsICo+KGZp
cnN0KTsKICAgICBFbGVtZW50SW1wbCAqc2Vjb25kRWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1l
bnRJbXBsICo+KHNlY29uZCk7CiAgICAgCi0gICAgaWYgKGZpcnN0RWxlbWVudC0+aWQoKSAhPSBz
ZWNvbmRFbGVtZW50LT5pZCgpKQorICAgIGlmICghZmlyc3RFbGVtZW50LT50YWdOYW1lKCkubWF0
Y2hlcyhzZWNvbmRFbGVtZW50LT50YWdOYW1lKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICBOYW1lZEF0dHJNYXBJbXBsICpmaXJzdE1hcCA9IGZpcnN0RWxlbWVudC0+YXR0cmlidXRl
cygpOwpAQCAtMTEyOSw3ICsxMTMwLDcgQEAgYm9vbCBBcHBseVN0eWxlQ29tbWFuZDo6bWVyZ2VF
bmRXaXRoTmV4dAogICAgICAgICBlbmRPZmZzZXQgPSBwYXJlbnRMYXN0T2Zmc2V0OwogICAgIH0K
IAotICAgIGlmICghZW5kTm9kZS0+aXNFbGVtZW50Tm9kZSgpIHx8IGVuZE5vZGUtPmlkKCkgPT0g
SURfQlIpCisgICAgaWYgKCFlbmROb2RlLT5pc0VsZW1lbnROb2RlKCkgfHwgZW5kTm9kZS0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OmJyKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBO
b2RlSW1wbCAqbmV4dFNpYmxpbmcgPSBlbmROb2RlLT5uZXh0U2libGluZygpOwpAQCAtMTI3NCwx
NCArMTI3NSwxNCBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphZGRJbmxpbmVTdHlsZUlmCiAg
ICAgfQogCiAgICAgaWYgKHN0eWxlQ2hhbmdlLmFwcGx5Qm9sZCgpKSB7Ci0gICAgICAgIEVsZW1l
bnRJbXBsICpib2xkRWxlbWVudCA9IGRvY3VtZW50KCktPmNyZWF0ZUhUTUxFbGVtZW50KCJCIiwg
ZXhjZXB0aW9uQ29kZSk7CisgICAgICAgIEVsZW1lbnRJbXBsICpib2xkRWxlbWVudCA9IGRvY3Vt
ZW50KCktPmNyZWF0ZUVsZW1lbnROUyhYSFRNTF9OQU1FU1BBQ0UsICJiIiwgZXhjZXB0aW9uQ29k
ZSk7CiAgICAgICAgIEFTU0VSVChleGNlcHRpb25Db2RlID09IDApOwogICAgICAgICBpbnNlcnRO
b2RlQmVmb3JlKGJvbGRFbGVtZW50LCBzdGFydE5vZGUpOwogICAgICAgICBzdXJyb3VuZE5vZGVS
YW5nZVdpdGhFbGVtZW50KHN0YXJ0Tm9kZSwgZW5kTm9kZSwgYm9sZEVsZW1lbnQpOwogICAgIH0K
IAogICAgIGlmIChzdHlsZUNoYW5nZS5hcHBseUl0YWxpYygpKSB7Ci0gICAgICAgIEVsZW1lbnRJ
bXBsICppdGFsaWNFbGVtZW50ID0gZG9jdW1lbnQoKS0+Y3JlYXRlSFRNTEVsZW1lbnQoIkkiLCBl
eGNlcHRpb25Db2RlKTsKKyAgICAgICAgRWxlbWVudEltcGwgKml0YWxpY0VsZW1lbnQgPSBkb2N1
bWVudCgpLT5jcmVhdGVFbGVtZW50TlMoWEhUTUxfTkFNRVNQQUNFLCAiaSIsIGV4Y2VwdGlvbkNv
ZGUpOwogICAgICAgICBBU1NFUlQoZXhjZXB0aW9uQ29kZSA9PSAwKTsKICAgICAgICAgaW5zZXJ0
Tm9kZUJlZm9yZShpdGFsaWNFbGVtZW50LCBzdGFydE5vZGUpOwogICAgICAgICBzdXJyb3VuZE5v
ZGVSYW5nZVdpdGhFbGVtZW50KHN0YXJ0Tm9kZSwgZW5kTm9kZSwgaXRhbGljRWxlbWVudCk7Cklu
ZGV4OiBraHRtbC9lZGl0aW5nL2JyZWFrX2Jsb2NrcXVvdGVfY29tbWFuZC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWRpdGluZy9icmVha19ibG9ja3F1
b3RlX2NvbW1hbmQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtdSAtcCAtcjEu
MSBraHRtbC9lZGl0aW5nL2JyZWFrX2Jsb2NrcXVvdGVfY29tbWFuZC5jcHAKLS0tIGtodG1sL2Vk
aXRpbmcvYnJlYWtfYmxvY2txdW90ZV9jb21tYW5kLmNwcAkyNCBNYXkgMjAwNSAwNzoyMTo0NyAt
MDAwMAkxLjEKKysrIGtodG1sL2VkaXRpbmcvYnJlYWtfYmxvY2txdW90ZV9jb21tYW5kLmNwcAk3
IEp1bCAyMDA1IDA1OjU4OjQ4IC0wMDAwCkBAIC0yOCw3ICsyOCw3IEBACiAjaW5jbHVkZSAiaHRt
bGVkaXRpbmcuaCIKICNpbmNsdWRlICJ2aXNpYmxlX3Bvc2l0aW9uLmgiCiAKLSNpbmNsdWRlICJt
aXNjL2h0bWx0YWdzLmgiCisjaW5jbHVkZSAiaHRtbG5hbWVzLmgiCiAjaW5jbHVkZSAieG1sL2Rv
bV9lbGVtZW50aW1wbC5oIgogI2luY2x1ZGUgInhtbC9kb21fdGV4dGltcGwuaCIKIApAQCAtNDMs
NiArNDMsNyBAQCB1c2luZyBET006OkVsZW1lbnRJbXBsOwogdXNpbmcgRE9NOjpOb2RlSW1wbDsK
IHVzaW5nIERPTTo6UG9zaXRpb247CiB1c2luZyBET006OlRleHRJbXBsOwordXNpbmcgRE9NOjpI
VE1MTmFtZXM7CiAKIG5hbWVzcGFjZSBraHRtbCB7CiAKQEAgLTE0Niw3ICsxNDcsNyBAQCB2b2lk
IEJyZWFrQmxvY2txdW90ZUNvbW1hbmQ6OmRvQXBwbHkoKQogICAgICAgICBib29sIHN0YXJ0SXNC
UiA9IGZhbHNlOwogICAgICAgICBpZiAoc3RhcnROb2RlICE9IHRvcEJsb2NrcXVvdGUpIHsKICAg
ICAgICAgICAgIE5vZGVJbXBsICpuID0gc3RhcnROb2RlOwotICAgICAgICAgICAgc3RhcnRJc0JS
ID0gbi0+aWQoKSA9PSBJRF9CUjsKKyAgICAgICAgICAgIHN0YXJ0SXNCUiA9IG4tPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjpicigpKTsKICAgICAgICAgICAgIGlmIChzdGFydElzQlIpCiAgICAgICAg
ICAgICAgICAgbiA9IG4tPm5leHRTaWJsaW5nKCk7CiAgICAgICAgICAgICB3aGlsZSAobikgewpJ
bmRleDoga2h0bWwvZWRpdGluZy9jb21wb3NpdGVfZWRpdF9jb21tYW5kLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL2NvbXBvc2l0ZV9lZGl0
X2NvbW1hbmQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjMKZGlmZiAtdSAtcCAtcjEuMyBr
aHRtbC9lZGl0aW5nL2NvbXBvc2l0ZV9lZGl0X2NvbW1hbmQuY3BwCi0tLSBraHRtbC9lZGl0aW5n
L2NvbXBvc2l0ZV9lZGl0X2NvbW1hbmQuY3BwCTI0IE1heSAyMDA1IDA3OjIxOjQ3IC0wMDAwCTEu
MworKysga2h0bWwvZWRpdGluZy9jb21wb3NpdGVfZWRpdF9jb21tYW5kLmNwcAk3IEp1bCAyMDA1
IDA1OjU4OjQ4IC0wMDAwCkBAIC00Nyw3ICs0Nyw3IEBACiAjaW5jbHVkZSAid3JhcF9jb250ZW50
c19pbl9kdW1teV9zcGFuX2NvbW1hbmQuaCIKIAogI2luY2x1ZGUgIm1pc2MvaHRtbGF0dHJzLmgi
Ci0jaW5jbHVkZSAibWlzYy9odG1sdGFncy5oIgorI2luY2x1ZGUgImh0bWxuYW1lcy5oIgogI2lu
Y2x1ZGUgInJlbmRlcmluZy9yZW5kZXJfdGV4dC5oIgogI2luY2x1ZGUgInhtbC9kb20yX3Jhbmdl
aW1wbC5oIgogI2luY2x1ZGUgInhtbC9kb21fdGV4dGltcGwuaCIKQEAgLTY3LDYgKzY3LDcgQEAg
dXNpbmcgRE9NOjpOb2RlSW1wbDsKIHVzaW5nIERPTTo6UG9zaXRpb247CiB1c2luZyBET006OlJh
bmdlSW1wbDsKIHVzaW5nIERPTTo6VGV4dEltcGw7Cit1c2luZyBET006OkhUTUxOYW1lczsKIAog
bmFtZXNwYWNlIGtodG1sIHsKIApAQCAtMTI3LDE0ICsxMjgsMTQgQEAgdm9pZCBDb21wb3NpdGVF
ZGl0Q29tbWFuZDo6aW5zZXJ0UGFyYWdyYQogCiB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpp
bnNlcnROb2RlQmVmb3JlKE5vZGVJbXBsICppbnNlcnRDaGlsZCwgTm9kZUltcGwgKnJlZkNoaWxk
KQogewotICAgIEFTU0VSVChyZWZDaGlsZC0+aWQoKSAhPSBJRF9CT0RZKTsKKyAgICBBU1NFUlQo
IXJlZkNoaWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Ym9keSgpKSk7CiAgICAgRWRpdENvbW1h
bmRQdHIgY21kKG5ldyBJbnNlcnROb2RlQmVmb3JlQ29tbWFuZChkb2N1bWVudCgpLCBpbnNlcnRD
aGlsZCwgcmVmQ2hpbGQpKTsKICAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShjbWQpOwogfQog
CiB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjppbnNlcnROb2RlQWZ0ZXIoTm9kZUltcGwgKmlu
c2VydENoaWxkLCBOb2RlSW1wbCAqcmVmQ2hpbGQpCiB7Ci0gICAgQVNTRVJUKHJlZkNoaWxkLT5p
ZCgpICE9IElEX0JPRFkpOworICAgIEFTU0VSVCghcmVmQ2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjpib2R5KCkpKTsKICAgICBpZiAocmVmQ2hpbGQtPnBhcmVudE5vZGUoKS0+bGFzdENoaWxk
KCkgPT0gcmVmQ2hpbGQpIHsKICAgICAgICAgYXBwZW5kTm9kZShpbnNlcnRDaGlsZCwgcmVmQ2hp
bGQtPnBhcmVudE5vZGUoKSk7CiAgICAgfQpAQCAtNTQ1LDcgKzU0Niw3IEBAIHZvaWQgQ29tcG9z
aXRlRWRpdENvbW1hbmQ6Om1vdmVQYXJhZ3JhcGgKICAgICAvLyAgICAgICBhZGRpdGlvbmFsIGxl
dmVsIG9mIHF1b3RpbmcuCiAgICAgTm9kZUltcGwgKnN0YXJ0QmxvY2sgPSBwYXJhZ3JhcGhTdGFy
dC5ub2RlKCktPmVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQoKTsKICAgICBOb2RlSW1wbCAqbmV3
QmxvY2sgPSAwOwotICAgIGlmIChzdGFydEJsb2NrLT5pZCgpID09IElEX0JPRFkgfHwgKGlzTWFp
bEJsb2NrcXVvdGUoc3RhcnRCbG9jaykgJiYgcGFyYWdyYXBoU3RhcnQubm9kZSgpICE9IHN0YXJ0
QmxvY2spKQorICAgIGlmIChzdGFydEJsb2NrLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Ym9keSgp
KSB8fCAoaXNNYWlsQmxvY2txdW90ZShzdGFydEJsb2NrKSAmJiBwYXJhZ3JhcGhTdGFydC5ub2Rl
KCkgIT0gc3RhcnRCbG9jaykpCiAgICAgICAgIG5ld0Jsb2NrID0gY3JlYXRlRGVmYXVsdFBhcmFn
cmFwaEVsZW1lbnQoZG9jdW1lbnQoKSk7CiAgICAgZWxzZQogICAgICAgICBuZXdCbG9jayA9IHN0
YXJ0QmxvY2stPmNsb25lTm9kZShmYWxzZSk7CkBAIC01NTUsMTAgKzU1NiwxMCBAQCB2b2lkIENv
bXBvc2l0ZUVkaXRDb21tYW5kOjptb3ZlUGFyYWdyYXBoCiAgICAgICAgIG1vdmVOb2RlID0gbW92
ZU5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKTsKICAgICBOb2RlSW1wbCAqZW5kTm9kZSA9IHBhcmFn
cmFwaEVuZC5ub2RlKCk7CiAKLSAgICBpZiAocGFyYWdyYXBoU3RhcnQubm9kZSgpLT5pZCgpID09
IElEX0JPRFkpIHsKKyAgICBpZiAocGFyYWdyYXBoU3RhcnQubm9kZSgpLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6Ym9keSgpKSkgewogICAgICAgICBpbnNlcnROb2RlQXQobmV3QmxvY2ssIHBhcmFn
cmFwaFN0YXJ0Lm5vZGUoKSwgMCk7CiAgICAgfQotICAgIGVsc2UgaWYgKHBhcmFncmFwaFN0YXJ0
Lm5vZGUoKS0+aWQoKSA9PSBJRF9CUikgeworICAgIGVsc2UgaWYgKHBhcmFncmFwaFN0YXJ0Lm5v
ZGUoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJyKCkpKSB7CiAgICAgICAgIGluc2VydE5vZGVB
ZnRlcihuZXdCbG9jaywgcGFyYWdyYXBoU3RhcnQubm9kZSgpKTsKICAgICB9CiAgICAgZWxzZSB7
CkBAIC01NzgsNyArNTc5LDcgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6bW92ZVBhcmFn
cmFwaAogRWxlbWVudEltcGwgKmNyZWF0ZUJsb2NrUGxhY2Vob2xkZXJFbGVtZW50KERvY3VtZW50
SW1wbCAqZG9jdW1lbnQpCiB7CiAgICAgaW50IGV4Y2VwdGlvbkNvZGUgPSAwOwotICAgIEVsZW1l
bnRJbXBsICpicmVha05vZGUgPSBkb2N1bWVudC0+Y3JlYXRlSFRNTEVsZW1lbnQoImJyIiwgZXhj
ZXB0aW9uQ29kZSk7CisgICAgRWxlbWVudEltcGwgKmJyZWFrTm9kZSA9IGRvY3VtZW50LT5jcmVh
dGVFbGVtZW50TlMoWEhUTUxfTkFNRVNQQUNFLCAiYnIiLCBleGNlcHRpb25Db2RlKTsKICAgICBB
U1NFUlQoZXhjZXB0aW9uQ29kZSA9PSAwKTsKICAgICBicmVha05vZGUtPnNldEF0dHJpYnV0ZShB
VFRSX0NMQVNTLCBibG9ja1BsYWNlaG9sZGVyQ2xhc3NTdHJpbmcoKSk7CiAgICAgcmV0dXJuIGJy
ZWFrTm9kZTsKSW5kZXg6IGtodG1sL2VkaXRpbmcvZGVsZXRlX3NlbGVjdGlvbl9jb21tYW5kLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL2Rl
bGV0ZV9zZWxlY3Rpb25fY29tbWFuZC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNApkaWZm
IC11IC1wIC1yMS40IGtodG1sL2VkaXRpbmcvZGVsZXRlX3NlbGVjdGlvbl9jb21tYW5kLmNwcAot
LS0ga2h0bWwvZWRpdGluZy9kZWxldGVfc2VsZWN0aW9uX2NvbW1hbmQuY3BwCTUgSnVsIDIwMDUg
MjM6MjE6MDcgLTAwMDAJMS40CisrKyBraHRtbC9lZGl0aW5nL2RlbGV0ZV9zZWxlY3Rpb25fY29t
bWFuZC5jcHAJNyBKdWwgMjAwNSAwNTo1ODo0OSAtMDAwMApAQCAtMjgsNyArMjgsNyBAQAogI2lu
Y2x1ZGUgImNzcy9jc3NfY29tcHV0ZWRzdHlsZS5oIgogI2luY2x1ZGUgImh0bWxlZGl0aW5nLmgi
CiAjaW5jbHVkZSAia2h0bWxfcGFydC5oIgotI2luY2x1ZGUgIm1pc2MvaHRtbHRhZ3MuaCIKKyNp
bmNsdWRlICJodG1sbmFtZXMuaCIKICNpbmNsdWRlICJyZW5kZXJpbmcvcmVuZGVyX2xpbmUuaCIK
ICNpbmNsdWRlICJyZW5kZXJpbmcvcmVuZGVyX29iamVjdC5oIgogI2luY2x1ZGUgInZpc2libGVf
dGV4dC5oIgpAQCAtNTMsNiArNTMsNyBAQCB1c2luZyBET006Ok5vZGVJbXBsOwogdXNpbmcgRE9N
OjpQb3NpdGlvbjsKIHVzaW5nIERPTTo6UmFuZ2VJbXBsOwogdXNpbmcgRE9NOjpUZXh0SW1wbDsK
K3VzaW5nIERPTTo6SFRNTE5hbWVzOwogCiBuYW1lc3BhY2Uga2h0bWwgewogCkBAIC02MSw5ICs2
MiwxMyBAQCBzdGF0aWMgYm9vbCBpc0xpc3RTdHJ1Y3R1cmVOb2RlKGNvbnN0IE5vCiAgICAgLy8g
RklYTUU6IElycml0YXRpbmcgdGhhdCB3ZSBjYW4gZ2V0IGF3YXkgd2l0aCBqdXN0IGdvaW5nIGF0
IHRoZSByZW5kZXIgdHJlZSBmb3IgaXNUYWJsZVN0cnVjdHVyZU5vZGUsCiAgICAgLy8gYnV0IGhl
cmUgd2UgYWxzbyBoYXZlIHRvIHBlZWsgYXQgdGhlIHR5cGUgb2YgRE9NIG5vZGU/CiAgICAgUmVu
ZGVyT2JqZWN0ICpyID0gbm9kZS0+cmVuZGVyZXIoKTsKLSAgICBOb2RlSW1wbDo6SWQgbm9kZUlE
ID0gbm9kZS0+aWQoKTsKICAgICByZXR1cm4gKHIgJiYgci0+aXNMaXN0SXRlbSgpKQotICAgICAg
ICB8fCAobm9kZUlEID09IElEX09MIHx8IG5vZGVJRCA9PSBJRF9VTCB8fCBub2RlSUQgPT0gSURf
REQgfHwgbm9kZUlEID09IElEX0RUIHx8IG5vZGVJRCA9PSBJRF9ESVIgfHwgbm9kZUlEID09IElE
X01FTlUpOworICAgICAgICB8fCBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b2woKSkKKyAg
ICAgICAgfHwgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnVsKCkpCisgICAgICAgIHx8IG5v
ZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpkZCgpKQorICAgICAgICB8fCBub2RlLT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6ZHQoKSkKKyAgICAgICAgfHwgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OmRpcigpKQorICAgICAgICB8fCBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6bWVudSgp
KTsKIH0KIAogc3RhdGljIGludCBtYXhEZWVwT2Zmc2V0KE5vZGVJbXBsICpuKQpAQCAtMjc3LDgg
KzI4Miw4IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6c2F2ZVR5cGluZ1MKIGJvb2wg
RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6aGFuZGxlU3BlY2lhbENhc2VCUkRlbGV0ZSgpCiB7CiAg
ICAgLy8gQ2hlY2sgZm9yIHNwZWNpYWwtY2FzZSB3aGVyZSB0aGUgc2VsZWN0aW9uIGNvbnRhaW5z
IG9ubHkgYSBCUiBvbiBhIGxpbmUgYnkgaXRzZWxmIGFmdGVyIGFub3RoZXIgQlIuCi0gICAgYm9v
bCB1cHN0cmVhbVN0YXJ0SXNCUiA9IG1fc3RhcnROb2RlLT5pZCgpID09IElEX0JSOwotICAgIGJv
b2wgZG93bnN0cmVhbVN0YXJ0SXNCUiA9IG1fZG93bnN0cmVhbVN0YXJ0Lm5vZGUoKS0+aWQoKSA9
PSBJRF9CUjsKKyAgICBib29sIHVwc3RyZWFtU3RhcnRJc0JSID0gbV9zdGFydE5vZGUtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjpicigpKTsKKyAgICBib29sIGRvd25zdHJlYW1TdGFydElzQlIgPSBt
X2Rvd25zdHJlYW1TdGFydC5ub2RlKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpicigpKTsKICAg
ICBib29sIGlzQlJPbkxpbmVCeUl0c2VsZiA9IHVwc3RyZWFtU3RhcnRJc0JSICYmIGRvd25zdHJl
YW1TdGFydElzQlIgJiYgbV9kb3duc3RyZWFtU3RhcnQubm9kZSgpID09IG1fdXBzdHJlYW1FbmQu
bm9kZSgpOwogICAgIGlmIChpc0JST25MaW5lQnlJdHNlbGYpIHsKICAgICAgICAgcmVtb3ZlTm9k
ZShtX2Rvd25zdHJlYW1TdGFydC5ub2RlKCkpOwpAQCAtMzI2LDExICszMzEsMTEgQEAgdm9pZCBE
ZWxldGVTZWxlY3Rpb25Db21tYW5kOjpoYW5kbGVHZW5lcgogICAgIC8vIGVuZCBvZiBhIGJsb2Nr
IG90aGVyIHRoYW4gdGhlIGJsb2NrIGNvbnRhaW5pbmcgdGhlIHNlbGVjdGlvbiBzdGFydCwgdGhl
biBkbyBub3QgZGVsZXRlIHRoZSAKICAgICAvLyBzdGFydCBibG9jaywgb3RoZXJ3aXNlIGRlbGV0
ZSB0aGUgc3RhcnQgYmxvY2suCiAgICAgLy8gQSBzaW1pbGFyIGNhc2UgaXMgcHJvdmlkZWQgdG8g
Y292ZXIgc2VsZWN0aW9ucyBzdGFydGluZyBpbiBCUiBlbGVtZW50cy4KLSAgICBpZiAoc3RhcnRP
ZmZzZXQgPT0gMSAmJiBtX3N0YXJ0Tm9kZSAmJiBtX3N0YXJ0Tm9kZS0+aWQoKSA9PSBJRF9CUikg
eworICAgIGlmIChzdGFydE9mZnNldCA9PSAxICYmIG1fc3RhcnROb2RlICYmIG1fc3RhcnROb2Rl
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YnIoKSkpIHsKICAgICAgICAgc2V0U3RhcnROb2RlKG1f
c3RhcnROb2RlLT50cmF2ZXJzZU5leHROb2RlKCkpOwogICAgICAgICBzdGFydE9mZnNldCA9IDA7
CiAgICAgfQotICAgIGlmIChtX3N0YXJ0QmxvY2sgIT0gbV9lbmRCbG9jayAmJiBzdGFydE9mZnNl
dCA9PSAwICYmIG1fc3RhcnROb2RlICYmIG1fc3RhcnROb2RlLT5pZCgpID09IElEX0JSICYmIGVu
ZEF0RW5kT2ZCbG9jaykgeworICAgIGlmIChtX3N0YXJ0QmxvY2sgIT0gbV9lbmRCbG9jayAmJiBz
dGFydE9mZnNldCA9PSAwICYmIG1fc3RhcnROb2RlICYmIG1fc3RhcnROb2RlLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6YnIoKSkgJiYgZW5kQXRFbmRPZkJsb2NrKSB7CiAgICAgICAgIC8vIERvbid0
IGRlbGV0ZSB0aGUgQlIgZWxlbWVudAogICAgICAgICBzZXRTdGFydE5vZGUobV9zdGFydE5vZGUt
PnRyYXZlcnNlTmV4dE5vZGUoKSk7CiAgICAgfQpAQCAtNTUyLDcgKzU1Nyw3IEBAIHZvaWQgRGVs
ZXRlU2VsZWN0aW9uQ29tbWFuZDo6bW92ZU5vZGVzQWYKICAgICAgICAgTm9kZUltcGwgKm1vdmVO
b2RlID0gbm9kZTsKICAgICAgICAgbm9kZSA9IG5vZGUtPm5leHRTaWJsaW5nKCk7CiAgICAgICAg
IHJlbW92ZU5vZGUobW92ZU5vZGUpOwotICAgICAgICBpZiAobW92ZU5vZGUtPmlkKCkgPT0gSURf
QlIgJiYgIW1vdmVOb2RlLT5yZW5kZXJlcigpKSB7CisgICAgICAgIGlmIChtb3ZlTm9kZS0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OmJyKCkpICYmICFtb3ZlTm9kZS0+cmVuZGVyZXIoKSkgewogICAg
ICAgICAgICAgLy8gSnVzdCByZW1vdmUgdGhpcyBub2RlLCBhbmQgZG9uJ3QgcHV0IGl0IGJhY2su
CiAgICAgICAgICAgICAvLyBJZiB0aGUgQlIgd2FzIG5vdCByZW5kZXJlZCAoc2luY2UgaXQgd2Fz
IGF0IHRoZSBlbmQgb2YgYSBibG9jaywgZm9yIGluc3RhbmNlKSwgCiAgICAgICAgICAgICAvLyBw
dXR0aW5nIGl0IGJhY2sgaW4gdGhlIGRvY3VtZW50IG1pZ2h0IG1ha2UgaXQgYXBwZWFyLCBhbmQg
dGhhdCBpcyBub3QgZGVzaXJhYmxlLgpAQCAtNTYzLDcgKzU2OCw3IEBAIHZvaWQgRGVsZXRlU2Vs
ZWN0aW9uQ29tbWFuZDo6bW92ZU5vZGVzQWYKICAgICAgICAgZWxzZQogICAgICAgICAgICAgaW5z
ZXJ0Tm9kZUFmdGVyKG1vdmVOb2RlLCByZWZOb2RlKTsKICAgICAgICAgcmVmTm9kZSA9IG1vdmVO
b2RlOwotICAgICAgICBpZiAobW92ZU5vZGUtPmlkKCkgPT0gSURfQlIpCisgICAgICAgIGlmICht
b3ZlTm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJyKCkpKQogICAgICAgICAgICAgYnJlYWs7
CiAgICAgfQogCkluZGV4OiBraHRtbC9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL2h0bWxlZGl0aW5nLmNw
cCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yNDkKZGlmZiAtdSAtcCAtcjEuMjQ5IGtodG1sL2Vk
aXRpbmcvaHRtbGVkaXRpbmcuY3BwCi0tLSBraHRtbC9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAk1
IEp1bCAyMDA1IDIzOjIxOjA4IC0wMDAwCTEuMjQ5CisrKyBraHRtbC9lZGl0aW5nL2h0bWxlZGl0
aW5nLmNwcAk3IEp1bCAyMDA1IDA1OjU4OjQ5IC0wMDAwCkBAIC00Miw3ICs0Miw3IEBACiAjaW5j
bHVkZSAiaHRtbF9pbWFnZWltcGwuaCIKICNpbmNsdWRlICJodG1sX2ludGVyY2hhbmdlLmgiCiAj
aW5jbHVkZSAiaHRtbGF0dHJzLmgiCi0jaW5jbHVkZSAiaHRtbHRhZ3MuaCIKKyNpbmNsdWRlICJo
dG1sbmFtZXMuaCIKICNpbmNsdWRlICJraHRtbF9wYXJ0LmgiCiAjaW5jbHVkZSAia2h0bWxfcGFy
dC5oIgogI2luY2x1ZGUgImtodG1sdmlldy5oIgpAQCAtODEsNiArODEsNyBAQCB1c2luZyBET006
OlBvc2l0aW9uOwogdXNpbmcgRE9NOjpSYW5nZUltcGw7CiB1c2luZyBET006OlRleHRJbXBsOwog
dXNpbmcgRE9NOjpUcmVlV2Fsa2VySW1wbDsKK3VzaW5nIERPTTo6SFRNTE5hbWVzOwogCiAjaWYg
QVBQTEVfQ0hBTkdFUwogI2luY2x1ZGUgIktXUUFzc2VydGlvbnMuaCIKQEAgLTEzMSwxMCArMTMy
LDEwIEBAIGJvb2wgaXNTcGVjaWFsRWxlbWVudChOb2RlSW1wbCAqbikKICAgICBpZiAoIW4tPmlz
SFRNTEVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKG4tPmlkKCkg
PT0gSURfQSAmJiBuLT5pc0xpbmsoKSkKKyAgICBpZiAobi0+aXNMaW5rKCkpCiAgICAgICAgIHJl
dHVybiB0cnVlOwogCi0gICAgaWYgKG4tPmlkKCkgPT0gSURfVUwgfHwgbi0+aWQoKSA9PSBJRF9P
TCB8fCBuLT5pZCgpID09IElEX0RMKQorICAgIGlmIChuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
dWwoKSkgfHwgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9sKCkpIHx8IG4tPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjpkbCgpKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBSZW5kZXJPYmpl
Y3QgKnJlbmRlcmVyID0gbi0+cmVuZGVyZXIoKTsKQEAgLTI2Nyw3ICsyNjgsNyBAQCBFbGVtZW50
SW1wbCAqY3JlYXRlRGVmYXVsdFBhcmFncmFwaEVsZW1lCiAgICAgLy8gV2Ugd291bGQgbmVlZCB0
aGlzIG1hcmdpbi16ZXJvaW5nIGNvZGUgYmFjayBpZiB3ZSBldmVyIHJldHVybiB0byB1c2luZyA8
cD4gZWxlbWVudHMgZm9yIGRlZmF1bHQgcGFyYWdyYXBocy4KICAgICAvLyBzdGF0aWMgY29uc3Qg
RE9NU3RyaW5nIGRlZmF1bHRQYXJhZ3JhcGhTdHlsZSgibWFyZ2luLXRvcDogMDsgbWFyZ2luLWJv
dHRvbTogMCIpOyAgICAKICAgICBpbnQgZXhjZXB0aW9uQ29kZSA9IDA7Ci0gICAgRWxlbWVudElt
cGwgKmVsZW1lbnQgPSBkb2N1bWVudC0+Y3JlYXRlSFRNTEVsZW1lbnQoImRpdiIsIGV4Y2VwdGlv
bkNvZGUpOworICAgIEVsZW1lbnRJbXBsICplbGVtZW50ID0gZG9jdW1lbnQtPmNyZWF0ZUVsZW1l
bnROUyhYSFRNTF9OQU1FU1BBQ0UsICJkaXYiLCBleGNlcHRpb25Db2RlKTsKICAgICBBU1NFUlQo
ZXhjZXB0aW9uQ29kZSA9PSAwKTsKICAgICByZXR1cm4gZWxlbWVudDsKIH0KQEAgLTI3NSw3ICsy
NzYsNyBAQCBFbGVtZW50SW1wbCAqY3JlYXRlRGVmYXVsdFBhcmFncmFwaEVsZW1lCiBFbGVtZW50
SW1wbCAqY3JlYXRlQnJlYWtFbGVtZW50KERvY3VtZW50SW1wbCAqZG9jdW1lbnQpCiB7CiAgICAg
aW50IGV4Y2VwdGlvbkNvZGUgPSAwOwotICAgIEVsZW1lbnRJbXBsICpicmVha05vZGUgPSBkb2N1
bWVudC0+Y3JlYXRlSFRNTEVsZW1lbnQoImJyIiwgZXhjZXB0aW9uQ29kZSk7CisgICAgRWxlbWVu
dEltcGwgKmJyZWFrTm9kZSA9IGRvY3VtZW50LT5jcmVhdGVFbGVtZW50TlMoWEhUTUxfTkFNRVNQ
QUNFLCAiYnIiLCBleGNlcHRpb25Db2RlKTsKICAgICBBU1NFUlQoZXhjZXB0aW9uQ29kZSA9PSAw
KTsKICAgICByZXR1cm4gYnJlYWtOb2RlOwogfQpAQCAtMzAzLDcgKzMwNCw3IEBAIE5vZGVJbXBs
ICpuZWFyZXN0TWFpbEJsb2NrcXVvdGUoY29uc3QgTm8KIAogYm9vbCBpc01haWxCbG9ja3F1b3Rl
KGNvbnN0IE5vZGVJbXBsICpub2RlKQogewotICAgIGlmICghbm9kZSB8fCAhbm9kZS0+cmVuZGVy
ZXIoKSB8fCAhbm9kZS0+aXNFbGVtZW50Tm9kZSgpICYmIG5vZGUtPmlkKCkgIT0gSURfQkxPQ0tR
VU9URSkKKyAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPnJlbmRlcmVyKCkgfHwgIW5vZGUtPmlzRWxl
bWVudE5vZGUoKSAmJiAhbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJsb2NrcXVvdGUoKSkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PGNvbnN0IEVsZW1lbnRJbXBsICo+KG5vZGUpLT5nZXRBdHRyaWJ1dGUoInR5cGUiKSA9PSAiY2l0
ZSI7CkluZGV4OiBraHRtbC9lZGl0aW5nL2luc2VydF9saW5lX2JyZWFrX2NvbW1hbmQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VkaXRpbmcvaW5zZXJ0
X2xpbmVfYnJlYWtfY29tbWFuZC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC11
IC1wIC1yMS4xIGtodG1sL2VkaXRpbmcvaW5zZXJ0X2xpbmVfYnJlYWtfY29tbWFuZC5jcHAKLS0t
IGtodG1sL2VkaXRpbmcvaW5zZXJ0X2xpbmVfYnJlYWtfY29tbWFuZC5jcHAJMjQgTWF5IDIwMDUg
MDc6MjE6NDcgLTAwMDAJMS4xCisrKyBraHRtbC9lZGl0aW5nL2luc2VydF9saW5lX2JyZWFrX2Nv
bW1hbmQuY3BwCTcgSnVsIDIwMDUgMDU6NTg6NTAgLTAwMDAKQEAgLTI5LDcgKzI5LDcgQEAKICNp
bmNsdWRlICJ2aXNpYmxlX3Bvc2l0aW9uLmgiCiAjaW5jbHVkZSAidmlzaWJsZV91bml0cy5oIgog
Ci0jaW5jbHVkZSAibWlzYy9odG1sdGFncy5oIgorI2luY2x1ZGUgImh0bWxuYW1lcy5oIgogI2lu
Y2x1ZGUgInhtbC9kb21fZG9jaW1wbC5oIgogI2luY2x1ZGUgInhtbC9kb21fZWxlbWVudGltcGwu
aCIKICNpbmNsdWRlICJ4bWwvZG9tMl9yYW5nZWltcGwuaCIKQEAgLTUwLDYgKzUwLDcgQEAgdXNp
bmcgRE9NOjpOb2RlSW1wbDsKIHVzaW5nIERPTTo6UG9zaXRpb247CiB1c2luZyBET006OlRleHRJ
bXBsOwogdXNpbmcgRE9NOjpDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbkltcGw7Cit1c2luZyBE
T006OkhUTUxOYW1lczsKIAogbmFtZXNwYWNlIGtodG1sIHsKIApAQCAtMTExLDEzICsxMTIsMTMg
QEAgdm9pZCBJbnNlcnRMaW5lQnJlYWtDb21tYW5kOjpkb0FwcGx5KCkKICAgICAgICAgLy8gVGhp
cyBtYWtlcyB0aGUgInJlYWwiIEJSIHdlIHdhbnQgdG8gaW5zZXJ0IGFwcGVhciBpbiB0aGUgcmVu
ZGVyaW5nIHdpdGhvdXQgYW55IAogICAgICAgICAvLyBzaWduaWZpY2FudCBzaWRlIGVmZmVjdHMg
KGFuZCBubyByZWFsIHdvcnJpZXMgZWl0aGVyIHNpbmNlIHlvdSBjYW4ndCBhcnJvdyBwYXN0IAog
ICAgICAgICAvLyB0aGlzIGV4dHJhIG9uZS4KLSAgICAgICAgaWYgKHBvcy5ub2RlKCktPmlkKCkg
PT0gSURfQlIgJiYgcG9zLm9mZnNldCgpID09IDApIHsKKyAgICAgICAgaWYgKHBvcy5ub2RlKCkt
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpicigpKSAmJiBwb3Mub2Zmc2V0KCkgPT0gMCkgewogICAg
ICAgICAgICAgLy8gQWxyZWFkeSBwbGFjZWQgaW4gYSB0cmFpbGluZyBCUi4gSW5zZXJ0ICJyZWFs
IiBCUiBiZWZvcmUgaXQgYW5kIGxlYXZlIHRoZSBzZWxlY3Rpb24gYWxvbmUuCiAgICAgICAgICAg
ICBpbnNlcnROb2RlQmVmb3JlKG5vZGVUb0luc2VydCwgcG9zLm5vZGUoKSk7CiAgICAgICAgIH0K
ICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBOb2RlSW1wbCAqbmV4dCA9IHBvcy5ub2RlKCkt
PnRyYXZlcnNlTmV4dE5vZGUoKTsKLSAgICAgICAgICAgIGJvb2wgaGFzVHJhaWxpbmdCUiA9IG5l
eHQgJiYgbmV4dC0+aWQoKSA9PSBJRF9CUiAmJiBwb3Mubm9kZSgpLT5lbmNsb3NpbmdCbG9ja0Zs
b3dFbGVtZW50KCkgPT0gbmV4dC0+ZW5jbG9zaW5nQmxvY2tGbG93RWxlbWVudCgpOworICAgICAg
ICAgICAgYm9vbCBoYXNUcmFpbGluZ0JSID0gbmV4dCAmJiBuZXh0LT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6YnIoKSkgJiYgcG9zLm5vZGUoKS0+ZW5jbG9zaW5nQmxvY2tGbG93RWxlbWVudCgpID09
IG5leHQtPmVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQoKTsKICAgICAgICAgICAgIGluc2VydE5v
ZGVBZnRlclBvc2l0aW9uKG5vZGVUb0luc2VydCwgcG9zKTsKICAgICAgICAgICAgIGlmIChoYXNU
cmFpbGluZ0JSKSB7CiAgICAgICAgICAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFNlbGVjdGlv
bihQb3NpdGlvbihuZXh0LCAwKSwgRE9XTlNUUkVBTSkpOwpJbmRleDoga2h0bWwvZWRpdGluZy9p
bnNlcnRfcGFyYWdyYXBoX3NlcGFyYXRvcl9jb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL2luc2VydF9wYXJhZ3JhcGhfc2VwYXJh
dG9yX2NvbW1hbmQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtdSAtcCAtcjEu
MSBraHRtbC9lZGl0aW5nL2luc2VydF9wYXJhZ3JhcGhfc2VwYXJhdG9yX2NvbW1hbmQuY3BwCi0t
LSBraHRtbC9lZGl0aW5nL2luc2VydF9wYXJhZ3JhcGhfc2VwYXJhdG9yX2NvbW1hbmQuY3BwCTI0
IE1heSAyMDA1IDA3OjIxOjQ3IC0wMDAwCTEuMQorKysga2h0bWwvZWRpdGluZy9pbnNlcnRfcGFy
YWdyYXBoX3NlcGFyYXRvcl9jb21tYW5kLmNwcAk3IEp1bCAyMDA1IDA1OjU4OjUwIC0wMDAwCkBA
IC0zMSw3ICszMSw3IEBACiAKICNpbmNsdWRlICJjc3MvY3NzX2NvbXB1dGVkc3R5bGUuaCIKICNp
bmNsdWRlICJjc3MvY3NzX3ZhbHVlaW1wbC5oIgotI2luY2x1ZGUgIm1pc2MvaHRtbHRhZ3MuaCIK
KyNpbmNsdWRlICJodG1sbmFtZXMuaCIKICNpbmNsdWRlICJ4bWwvZG9tX2RvY2ltcGwuaCIKICNp
bmNsdWRlICJ4bWwvZG9tX2VsZW1lbnRpbXBsLmgiCiAjaW5jbHVkZSAieG1sL2RvbV90ZXh0aW1w
bC5oIgpAQCAtNTAsNiArNTAsNyBAQCB1c2luZyBET006OkVsZW1lbnRJbXBsOwogdXNpbmcgRE9N
OjpOb2RlSW1wbDsKIHVzaW5nIERPTTo6UG9zaXRpb247CiB1c2luZyBET006OlRleHRJbXBsOwor
dXNpbmcgRE9NOjpIVE1MTmFtZXM7CiAKIG5hbWVzcGFjZSBraHRtbCB7CiAKQEAgLTIxMyw3ICsy
MTQsNyBAQCB2b2lkIEluc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQ6OmRvCiAgICAgLy8g
dGhlbiB0aGlzIDxicj4gd2lsbCBjb2xsYXBzZSBhd2F5IHdoZW4gd2UgYWRkIGEgYmxvY2sgYWZ0
ZXIgaXQuIEFkZCBhbiBleHRyYSA8YnI+LgogICAgIGlmICghZG9jdW1lbnQoKS0+aW5TdHJpY3RN
b2RlKCkpIHsKICAgICAgICAgUG9zaXRpb24gdXBzdHJlYW1Qb3MgPSBwb3MudXBzdHJlYW0oKTsK
LSAgICAgICAgaWYgKHVwc3RyZWFtUG9zLm5vZGUoKS0+aWQoKSA9PSBJRF9CUikKKyAgICAgICAg
aWYgKHVwc3RyZWFtUG9zLm5vZGUoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJyKCkpKQogICAg
ICAgICAgICAgaW5zZXJ0Tm9kZUFmdGVyKGNyZWF0ZUJyZWFrRWxlbWVudChkb2N1bWVudCgpKSwg
dXBzdHJlYW1Qb3Mubm9kZSgpKTsKICAgICB9CiAgICAgCkluZGV4OiBraHRtbC9lZGl0aW5nL21h
cmt1cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWRp
dGluZy9tYXJrdXAuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIzCmRpZmYgLXUgLXAgLXIx
LjIzIGtodG1sL2VkaXRpbmcvbWFya3VwLmNwcAotLS0ga2h0bWwvZWRpdGluZy9tYXJrdXAuY3Bw
CTUgSnVsIDIwMDUgMjM6MjE6MDggLTAwMDAJMS4yMworKysga2h0bWwvZWRpdGluZy9tYXJrdXAu
Y3BwCTcgSnVsIDIwMDUgMDU6NTg6NTAgLTAwMDAKQEAgLTM2LDggKzM2LDcgQEAKICNpbmNsdWRl
ICJ4bWwvZG9tMl9yYW5nZWltcGwuaCIKICNpbmNsdWRlICJyZW5kZXJpbmcvcmVuZGVyX3RleHQu
aCIKICNpbmNsdWRlICJtaXNjL2h0bWxhdHRycy5oIgotI2luY2x1ZGUgIm1pc2MvaHRtbHRhZ3Mu
aCIKLSNpbmNsdWRlICJodG1sL2R0ZC5oIgorI2luY2x1ZGUgImh0bWxuYW1lcy5oIgogCiB1c2lu
ZyBET006OkF0dHJpYnV0ZUltcGw7CiB1c2luZyBET006OkNvbW1lbnRJbXBsOwpAQCAtNDcsOSAr
NDYsOSBAQCB1c2luZyBET006OkRvY3VtZW50RnJhZ21lbnRJbXBsOwogdXNpbmcgRE9NOjpEb2N1
bWVudEltcGw7CiB1c2luZyBET006OkRPTVN0cmluZzsKIHVzaW5nIERPTTo6RWxlbWVudEltcGw7
Ci11c2luZyBET006OkZPUkJJRERFTjsKLXVzaW5nIERPTTo6ZW5kVGFnUmVxdWlyZW1lbnQ7Cit1
c2luZyBET006OlRhZ1N0YXR1c0ZvcmJpZGRlbjsKIHVzaW5nIERPTTo6SFRNTEVsZW1lbnRJbXBs
OwordXNpbmcgRE9NOjpIVE1MTmFtZXM7CiB1c2luZyBET006Ok5hbWVkQXR0ck1hcEltcGw7CiB1
c2luZyBET006Ok5vZGU7CiB1c2luZyBET006Ok5vZGVJbXBsOwpAQCAtMTc3LDEzICsxNzYsMTEg
QEAgc3RhdGljIFFTdHJpbmcgc3RhcnRNYXJrdXAoY29uc3QgTm9kZUltcAogICAgIHN3aXRjaCAo
dHlwZSkgewogICAgICAgICBjYXNlIE5vZGU6OlRFWFRfTk9ERTogewogICAgICAgICAgICAgaWYg
KG5vZGUtPnBhcmVudE5vZGUoKSkgewotICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+cGFy
ZW50Tm9kZSgpLT5pZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfUFJFOgotICAg
ICAgICAgICAgICAgICAgICBjYXNlIElEX1NDUklQVDoKLSAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBJRF9TVFlMRToKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9URVhUQVJFQToKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBzdHJpbmdWYWx1ZUZvclJhbmdlKG5vZGUsIHJhbmdl
KTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPnBhcmVudE5v
ZGUoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnByZSgpKSB8fAorICAgICAgICAgICAgICAgICAg
ICBub2RlLT5wYXJlbnROb2RlKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzY3JpcHQoKSkgfHwK
KyAgICAgICAgICAgICAgICAgICAgbm9kZS0+cGFyZW50Tm9kZSgpLT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6c3R5bGUoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+cGFyZW50Tm9kZSgp
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGV4dGFyZWEoKSkpCisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBzdHJpbmdWYWx1ZUZvclJhbmdlKG5vZGUsIHJhbmdlKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIFFTdHJpbmcgbWFya3VwID0gYW5ub3RhdGUgPyBlc2NhcGVIVE1MKHJlbmRl
cmVkVGV4dChub2RlLCByYW5nZSkpIDogZXNjYXBlSFRNTChzdHJpbmdWYWx1ZUZvclJhbmdlKG5v
ZGUsIHJhbmdlKSk7ICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoZGVmYXVsdFN0eWxlKSB7
CkBAIC0yNDgsOSArMjQ1LDEzIEBAIHN0YXRpYyBRU3RyaW5nIHN0YXJ0TWFya3VwKGNvbnN0IE5v
ZGVJbXAKIAogc3RhdGljIFFTdHJpbmcgZW5kTWFya3VwKGNvbnN0IE5vZGVJbXBsICpub2RlKQog
ewotICAgIGlmICgoIW5vZGUtPmlzSFRNTEVsZW1lbnQoKSB8fCBlbmRUYWdSZXF1aXJlbWVudChu
b2RlLT5pZCgpKSAhPSBGT1JCSURERU4pICYmIG5vZGUtPm5vZGVUeXBlKCkgIT0gTm9kZTo6VEVY
VF9OT0RFICYmIG5vZGUtPm5vZGVUeXBlKCkgIT0gTm9kZTo6RE9DVU1FTlRfTk9ERSkgewotICAg
ICAgICByZXR1cm4gIjwvIiArIG5vZGUtPm5vZGVOYW1lKCkuc3RyaW5nKCkgKyAiPiI7CisgICAg
Ym9vbCBoYXNFbmRUYWcgPSBub2RlLT5pc0VsZW1lbnROb2RlKCk7CisgICAgaWYgKG5vZGUtPmlz
SFRNTEVsZW1lbnQoKSkgeworICAgICAgICBjb25zdCBIVE1MRWxlbWVudEltcGwqIGh0bWxFbHQg
PSBzdGF0aWNfY2FzdDxjb25zdCBIVE1MRWxlbWVudEltcGwqPihub2RlKTsKKyAgICAgICAgaGFz
RW5kVGFnID0gKGh0bWxFbHQtPmVuZFRhZ1JlcXVpcmVtZW50KCkgIT0gVGFnU3RhdHVzRm9yYmlk
ZGVuKTsKICAgICB9CisgICAgaWYgKGhhc0VuZFRhZykKKyAgICAgICAgcmV0dXJuICI8LyIgKyBu
b2RlLT5ub2RlTmFtZSgpLnN0cmluZygpICsgIj4iOwogICAgIHJldHVybiAiIjsKIH0KIApAQCAt
MjY1LDggKzI2NiwxNCBAQCBzdGF0aWMgUVN0cmluZyBtYXJrdXAoY29uc3QgTm9kZUltcGwgKnN0
CiAgICAgICAgICAgICAgICAgbm9kZXMtPmFwcGVuZChjdXJyZW50KTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIG1lICs9IHN0YXJ0TWFya3VwKGN1cnJlbnQsIDAsIERvTm90QW5ub3RhdGVG
b3JJbnRlcmNoYW5nZSwgMCk7Ci0gICAgICAgIH0gICAgICAgIAotICAgICAgICBpZiAoIWN1cnJl
bnQtPmlzSFRNTEVsZW1lbnQoKSB8fCBlbmRUYWdSZXF1aXJlbWVudChjdXJyZW50LT5pZCgpKSAh
PSBGT1JCSURERU4pIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBjb250YWlu
ZXIgPSB0cnVlOworICAgICAgICBpZiAoY3VycmVudC0+aXNIVE1MRWxlbWVudCgpKSB7CisgICAg
ICAgICAgICBjb25zdCBIVE1MRWxlbWVudEltcGwqIGggPSBzdGF0aWNfY2FzdDxjb25zdCBIVE1M
RWxlbWVudEltcGwqPihjdXJyZW50KTsKKyAgICAgICAgICAgIGNvbnRhaW5lciA9IGgtPmVuZFRh
Z1JlcXVpcmVtZW50KCkgIT0gVGFnU3RhdHVzRm9yYmlkZGVuOworICAgICAgICB9CisgICAgICAg
IGlmIChjb250YWluZXIpIHsKICAgICAgICAgICAgIC8vIHByaW50IGNoaWxkcmVuCiAgICAgICAg
ICAgICBpZiAoTm9kZUltcGwgKm4gPSBjdXJyZW50LT5maXJzdENoaWxkKCkpIHsKICAgICAgICAg
ICAgICAgICBtZSArPSBtYXJrdXAobiwgZmFsc2UsIHRydWUsIG5vZGVzKTsKQEAgLTQxNCw5ICs0
MjEsOSBAQCBRU3RyaW5nIGNyZWF0ZU1hcmt1cChjb25zdCBSYW5nZUltcGwgKnJhCiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBib29sIGJyZWFrQXRFbmQgPSBmYWxzZTsKICAgICAgICAgICAg
IGlmIChjb21tb25BbmNlc3RvckJsb2NrID09IGFuY2VzdG9yKSB7Ci0gICAgICAgICAgICAgICAg
Tm9kZUltcGw6OklkIGlkID0gYW5jZXN0b3ItPmlkKCk7CiAgICAgICAgICAgICAgICAgLy8gSW5j
bHVkZSBhbmNlc3RvcnMgdGhhdCBhcmUgcmVxdWlyZWQgdG8gcmV0YWluIHRoZSBhcHBlYXJhbmNl
IG9mIHRoZSBjb3BpZWQgbWFya3VwLgotICAgICAgICAgICAgICAgIGlmIChpZCA9PSBJRF9QUkUg
fHwgaWQgPT0gSURfVEFCTEUgfHwgaWQgPT0gSURfT0wgfHwgaWQgPT0gSURfVUwpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoYW5jZXN0b3ItPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpwcmUoKSkgfHwg
YW5jZXN0b3ItPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0YWJsZSgpKSB8fAorICAgICAgICAgICAg
ICAgICAgICBhbmNlc3Rvci0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9sKCkpIHx8IGFuY2VzdG9y
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dWwoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgYnJl
YWtBdEVuZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CkBAIC01MzksNyArNTQ2LDcgQEAgRE9NOjpEb2N1bWVudEZyYWdtZW50SW1w
bCAqY3JlYXRlRnJhZ21lbgogICAgICAgICAgICAgRWxlbWVudEltcGwgKmVsZW1lbnQ7CiAgICAg
ICAgICAgICBpZiAocy5pc0VtcHR5KCkgJiYgbGlzdC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAg
ICAgICAvLyBGb3IgbGFzdCBsaW5lLCB1c2UgdGhlICJtYWdpYyBCUiIgcmF0aGVyIHRoYW4gYSBQ
LgotICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBkb2N1bWVudC0+Y3JlYXRlSFRNTEVsZW1lbnQo
ImJyIiwgZXhjZXB0aW9uQ29kZSk7CisgICAgICAgICAgICAgICAgZWxlbWVudCA9IGRvY3VtZW50
LT5jcmVhdGVFbGVtZW50TlMoWEhUTUxfTkFNRVNQQUNFLCAiYnIiLCBleGNlcHRpb25Db2RlKTsK
ICAgICAgICAgICAgICAgICBBU1NFUlQoZXhjZXB0aW9uQ29kZSA9PSAwKTsKICAgICAgICAgICAg
ICAgICBlbGVtZW50LT5yZWYoKTsKICAgICAgICAgICAgICAgICBlbGVtZW50LT5zZXRBdHRyaWJ1
dGUoQVRUUl9DTEFTUywgQXBwbGVJbnRlcmNoYW5nZU5ld2xpbmUpOyAgICAgICAgICAgIApJbmRl
eDoga2h0bWwvZWRpdGluZy9yZXBsYWNlX3NlbGVjdGlvbl9jb21tYW5kLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL3JlcGxhY2Vfc2VsZWN0
aW9uX2NvbW1hbmQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjQKZGlmZiAtdSAtcCAtcjEu
NCBraHRtbC9lZGl0aW5nL3JlcGxhY2Vfc2VsZWN0aW9uX2NvbW1hbmQuY3BwCi0tLSBraHRtbC9l
ZGl0aW5nL3JlcGxhY2Vfc2VsZWN0aW9uX2NvbW1hbmQuY3BwCTUgSnVsIDIwMDUgMjM6MjE6MDgg
LTAwMDAJMS40CisrKyBraHRtbC9lZGl0aW5nL3JlcGxhY2Vfc2VsZWN0aW9uX2NvbW1hbmQuY3Bw
CTcgSnVsIDIwMDUgMDU6NTg6NTEgLTAwMDAKQEAgLTI3LDcgKzI3LDcgQEAKIAogI2luY2x1ZGUg
InZpc2libGVfcG9zaXRpb24uaCIKICNpbmNsdWRlICJtaXNjL2h0bWxhdHRycy5oIgotI2luY2x1
ZGUgIm1pc2MvaHRtbHRhZ3MuaCIKKyNpbmNsdWRlICJodG1sbmFtZXMuaCIKICNpbmNsdWRlICJ4
bWwvZG9tX2RvY2ltcGwuaCIKICNpbmNsdWRlICJodG1sX2ludGVyY2hhbmdlLmgiCiAjaW5jbHVk
ZSAieG1sL2RvbV90ZXh0aW1wbC5oIgpAQCAtNTgsNiArNTgsNyBAQCB1c2luZyBET006OkRPTVN0
cmluZzsKIHVzaW5nIERPTTo6SFRNTEVsZW1lbnRJbXBsOwogdXNpbmcgRE9NOjpDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbkltcGw7CiB1c2luZyBET006OlBvc2l0aW9uOwordXNpbmcgRE9NOjpI
VE1MTmFtZXM7CiAKIG5hbWVzcGFjZSBraHRtbCB7CiAKQEAgLTE2NywzMCArMTY4LDE0IEBAIHN0
YXRpYyBib29sIGlzUHJvYmFibHlCbG9jayhjb25zdCBOb2RlSW0KICAgICBpZiAoIW5vZGUpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBzd2l0Y2ggKG5vZGUtPmlkKCkpIHsKLSAg
ICAgICAgY2FzZSBJRF9CTE9DS1FVT1RFOgotICAgICAgICBjYXNlIElEX0REOgotICAgICAgICBj
YXNlIElEX0RJVjoKLSAgICAgICAgY2FzZSBJRF9ETDoKLSAgICAgICAgY2FzZSBJRF9EVDoKLSAg
ICAgICAgY2FzZSBJRF9IMToKLSAgICAgICAgY2FzZSBJRF9IMjoKLSAgICAgICAgY2FzZSBJRF9I
MzoKLSAgICAgICAgY2FzZSBJRF9INDoKLSAgICAgICAgY2FzZSBJRF9INToKLSAgICAgICAgY2Fz
ZSBJRF9INjoKLSAgICAgICAgY2FzZSBJRF9IUjoKLSAgICAgICAgY2FzZSBJRF9MSToKLSAgICAg
ICAgY2FzZSBJRF9PTDoKLSAgICAgICAgY2FzZSBJRF9QOgotICAgICAgICBjYXNlIElEX1BSRToK
LSAgICAgICAgY2FzZSBJRF9URDoKLSAgICAgICAgY2FzZSBJRF9USDoKLSAgICAgICAgY2FzZSBJ
RF9VTDoKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4g
ZmFsc2U7CisgICAgLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24gc2VlbXMgcmVhbGx5IGJyb2tlbiB0
byBtZS4gIEl0IGlzbid0IGV2ZW4gaW5jbHVkaW5nIGFsbCB0aGUgYmxvY2stbGV2ZWwgZWxlbWVu
dHMuCisgICAgcmV0dXJuIChub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YmxvY2txdW90ZSgp
KSB8fCBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZGQoKSkgfHwgbm9kZS0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OmRpdigpKSB8fAorICAgICAgICAgICAgbm9kZS0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OmRsKCkpIHx8IG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpkdCgpKSB8fCBub2Rl
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDEoKSkgfHwKKyAgICAgICAgICAgIG5vZGUtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjpoMigpKSB8fCBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDMo
KSkgfHwgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omg0KCkpIHx8CisgICAgICAgICAgICBu
b2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDUoKSkgfHwgbm9kZS0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6Omg2KCkpIHx8IG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpocigpKSB8fAorICAg
ICAgICAgICAgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmxpKCkpIHx8IG5vZGUtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjpvbCgpKSB8fCBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6cCgp
KSB8fAorICAgICAgICAgICAgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnByZSgpKSB8fCBu
b2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGQoKSkgfHwgbm9kZS0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OnRoKCkpIHx8CisgICAgICAgICAgICBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
dWwoKSkpOwogfQogCiBzdGF0aWMgYm9vbCBpc01haWxQYXN0ZUFzUXVvdGF0aW9uTm9kZShjb25z
dCBOb2RlSW1wbCAqbm9kZSkKQEAgLTIxNCwxNiArMTk5LDggQEAgc3RhdGljIGJvb2wgaXNQcm9i
YWJseVRhYmxlU3RydWN0dXJlTm9kZQogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIAotICAgIHN3aXRjaCAobm9kZS0+aWQoKSkgewotICAgICAgICBjYXNlIElEX1RB
QkxFOgotICAgICAgICBjYXNlIElEX1RCT0RZOgotICAgICAgICBjYXNlIElEX1REOgotICAgICAg
ICBjYXNlIElEX1RGT09UOgotICAgICAgICBjYXNlIElEX1RIRUFEOgotICAgICAgICBjYXNlIElE
X1RSOgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsK
KyAgICByZXR1cm4gKG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0YWJsZSgpKSB8fCBub2Rl
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGJvZHkoKSkgfHwgbm9kZS0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OnRkKCkpIHx8CisgICAgICAgICAgICBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
dGZvb3QoKSkgfHwgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRoZWFkKCkpIHx8IG5vZGUt
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0cigpKSk7CiB9CiAKIHZvaWQgUmVwbGFjZW1lbnRGcmFn
bWVudDo6cHJ1bmVFbXB0eU5vZGVzKCkKQEAgLTI1MCw3ICsyMjcsNyBAQCB2b2lkIFJlcGxhY2Vt
ZW50RnJhZ21lbnQ6OnBydW5lRW1wdHlOb2RlCiBib29sIFJlcGxhY2VtZW50RnJhZ21lbnQ6Omlz
SW50ZXJjaGFuZ2VOZXdsaW5lTm9kZShjb25zdCBOb2RlSW1wbCAqbm9kZSkKIHsKICAgICBzdGF0
aWMgRE9NU3RyaW5nIGludGVyY2hhbmdlTmV3bGluZUNsYXNzU3RyaW5nKEFwcGxlSW50ZXJjaGFu
Z2VOZXdsaW5lKTsKLSAgICByZXR1cm4gbm9kZSAmJiBub2RlLT5pZCgpID09IElEX0JSICYmIHN0
YXRpY19jYXN0PGNvbnN0IEVsZW1lbnRJbXBsICo+KG5vZGUpLT5nZXRBdHRyaWJ1dGUoQVRUUl9D
TEFTUykgPT0gaW50ZXJjaGFuZ2VOZXdsaW5lQ2xhc3NTdHJpbmc7CisgICAgcmV0dXJuIG5vZGUg
JiYgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJyKCkpICYmIHN0YXRpY19jYXN0PGNvbnN0
IEVsZW1lbnRJbXBsICo+KG5vZGUpLT5nZXRBdHRyaWJ1dGUoQVRUUl9DTEFTUykgPT0gaW50ZXJj
aGFuZ2VOZXdsaW5lQ2xhc3NTdHJpbmc7CiB9CiAKIGJvb2wgUmVwbGFjZW1lbnRGcmFnbWVudDo6
aXNJbnRlcmNoYW5nZUNvbnZlcnRlZFNwYWNlU3Bhbihjb25zdCBOb2RlSW1wbCAqbm9kZSkKQEAg
LTUwNywxOCArNDg0LDE5IEBAIHZvaWQgUmVwbGFjZW1lbnRGcmFnbWVudDo6cmVtb3ZlU3R5bGVO
b2QKICAgICAgICAgTm9kZUltcGwgKm5leHQgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCk7CiAg
ICAgICAgIC8vIFRoaXMgbGlzdCBvZiB0YWdzIGNoYW5nZSB0aGUgYXBwZWFyYW5jZSBvZiBjb250
ZW50CiAgICAgICAgIC8vIGluIHdheXMgd2UgY2FuIGFkZCBiYWNrIG9uIGxhdGVyIHdpdGggQ1NT
LCBpZiBuZWNlc3NhcnkuCi0gICAgICAgIGlmIChub2RlLT5pZCgpID09IElEX0IgfHwgCi0gICAg
ICAgICAgICBub2RlLT5pZCgpID09IElEX0JJRyB8fCAKLSAgICAgICAgICAgIG5vZGUtPmlkKCkg
PT0gSURfQ0VOVEVSIHx8IAotICAgICAgICAgICAgbm9kZS0+aWQoKSA9PSBJRF9GT05UIHx8IAot
ICAgICAgICAgICAgbm9kZS0+aWQoKSA9PSBJRF9JIHx8IAotICAgICAgICAgICAgbm9kZS0+aWQo
KSA9PSBJRF9TIHx8IAotICAgICAgICAgICAgbm9kZS0+aWQoKSA9PSBJRF9TTUFMTCB8fCAKLSAg
ICAgICAgICAgIG5vZGUtPmlkKCkgPT0gSURfU1RSSUtFIHx8IAotICAgICAgICAgICAgbm9kZS0+
aWQoKSA9PSBJRF9TVUIgfHwgCi0gICAgICAgICAgICBub2RlLT5pZCgpID09IElEX1NVUCB8fCAK
LSAgICAgICAgICAgIG5vZGUtPmlkKCkgPT0gSURfVFQgfHwgCi0gICAgICAgICAgICBub2RlLT5p
ZCgpID09IElEX1UgfHwgCisgICAgICAgIC8vICBGSVhNRTogVGhpcyBsaXN0IGlzIGluY29tcGxl
dGUKKyAgICAgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpiKCkpIHx8IAorICAg
ICAgICAgICAgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJpZygpKSB8fCAKKyAgICAgICAg
ICAgIG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpjZW50ZXIoKSkgfHwgCisgICAgICAgICAg
ICBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Zm9udCgpKSB8fCAKKyAgICAgICAgICAgIG5v
ZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppKCkpIHx8IAorICAgICAgICAgICAgbm9kZS0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OnMoKSkgfHwgCisgICAgICAgICAgICBub2RlLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6c21hbGwoKSkgfHwgCisgICAgICAgICAgICBub2RlLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6c3RyaWtlKCkpIHx8IAorICAgICAgICAgICAgbm9kZS0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OnN1YigpKSB8fCAKKyAgICAgICAgICAgIG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjpzdXAoKSkgfHwgCisgICAgICAgICAgICBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dHQo
KSkgfHwgCisgICAgICAgICAgICBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dSgpKSB8fCAK
ICAgICAgICAgICAgIGlzU3R5bGVTcGFuKG5vZGUpKSB7CiAgICAgICAgICAgICByZW1vdmVOb2Rl
UHJlc2VydmluZ0NoaWxkcmVuKG5vZGUpOwogICAgICAgICB9CkBAIC03NDQsNyArNzIyLDcgQEAg
dm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgaWYgKCFsaW5lUGxh
Y2Vob2xkZXIpIHsKICAgICAgICAgUG9zaXRpb24gZG93bnN0cmVhbSA9IHN0YXJ0UG9zLmRvd25z
dHJlYW0oKTsKICAgICAgICAgZG93bnN0cmVhbSA9IHBvc2l0aW9uT3V0c2lkZUNvbnRhaW5pbmdT
cGVjaWFsRWxlbWVudChkb3duc3RyZWFtKTsKLSAgICAgICAgaWYgKGRvd25zdHJlYW0ubm9kZSgp
LT5pZCgpID09IElEX0JSICYmIGRvd25zdHJlYW0ub2Zmc2V0KCkgPT0gMCAmJiAKKyAgICAgICAg
aWYgKGRvd25zdHJlYW0ubm9kZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YnIoKSkgJiYgZG93
bnN0cmVhbS5vZmZzZXQoKSA9PSAwICYmIAogICAgICAgICAgICAgbV9mcmFnbWVudC5oYXNJbnRl
cmNoYW5nZU5ld2xpbmVBdEVuZCgpICYmCiAgICAgICAgICAgICBpc1N0YXJ0T2ZMaW5lKFZpc2li
bGVQb3NpdGlvbihkb3duc3RyZWFtLCBWUF9ERUZBVUxUX0FGRklOSVRZKSkpCiAgICAgICAgICAg
ICBsaW5lUGxhY2Vob2xkZXIgPSBkb3duc3RyZWFtLm5vZGUoKTsKQEAgLTkwNiwxMiArODg0LDEy
IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkoKQogICAgICAgICB9CiAg
ICAgfSAKICAgICBlbHNlIHsKLSAgICAgICAgaWYgKG1fbGFzdE5vZGVJbnNlcnRlZCAmJiBtX2xh
c3ROb2RlSW5zZXJ0ZWQtPmlkKCkgPT0gSURfQlIgJiYgIWRvY3VtZW50KCktPmluU3RyaWN0TW9k
ZSgpKSB7CisgICAgICAgIGlmIChtX2xhc3ROb2RlSW5zZXJ0ZWQgJiYgbV9sYXN0Tm9kZUluc2Vy
dGVkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YnIoKSkgJiYgIWRvY3VtZW50KCktPmluU3RyaWN0
TW9kZSgpKSB7CiAgICAgICAgICAgICBkb2N1bWVudCgpLT51cGRhdGVMYXlvdXQoKTsKICAgICAg
ICAgICAgIFZpc2libGVQb3NpdGlvbiBwb3MoUG9zaXRpb24obV9sYXN0Tm9kZUluc2VydGVkLCAx
KSwgRE9XTlNUUkVBTSk7CiAgICAgICAgICAgICBpZiAoaXNFbmRPZkJsb2NrKHBvcykpIHsKICAg
ICAgICAgICAgICAgICBOb2RlSW1wbCAqbmV4dCA9IG1fbGFzdE5vZGVJbnNlcnRlZC0+dHJhdmVy
c2VOZXh0Tm9kZSgpOwotICAgICAgICAgICAgICAgIGJvb2wgaGFzVHJhaWxpbmdCUiA9IG5leHQg
JiYgbmV4dC0+aWQoKSA9PSBJRF9CUiAmJiBtX2xhc3ROb2RlSW5zZXJ0ZWQtPmVuY2xvc2luZ0Js
b2NrRmxvd0VsZW1lbnQoKSA9PSBuZXh0LT5lbmNsb3NpbmdCbG9ja0Zsb3dFbGVtZW50KCk7Cisg
ICAgICAgICAgICAgICAgYm9vbCBoYXNUcmFpbGluZ0JSID0gbmV4dCAmJiBuZXh0LT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6YnIoKSkgJiYgbV9sYXN0Tm9kZUluc2VydGVkLT5lbmNsb3NpbmdCbG9j
a0Zsb3dFbGVtZW50KCkgPT0gbmV4dC0+ZW5jbG9zaW5nQmxvY2tGbG93RWxlbWVudCgpOwogICAg
ICAgICAgICAgICAgIGlmICghaGFzVHJhaWxpbmdCUikgewogICAgICAgICAgICAgICAgICAgICAv
LyBJbnNlcnQgYW4gImV4dHJhIiBCUiBhdCB0aGUgZW5kIG9mIHRoZSBibG9jay4gCiAgICAgICAg
ICAgICAgICAgICAgIGluc2VydE5vZGVCZWZvcmUoY3JlYXRlQnJlYWtFbGVtZW50KGRvY3VtZW50
KCkpLCBtX2xhc3ROb2RlSW5zZXJ0ZWQpOwpAQCAtOTM4LDcgKzkxNiw3IEBAIHZvaWQgUmVwbGFj
ZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkoKQogICAgICAgICAgICAgICAgIGluc2VydE5vZGVB
ZnRlcihub2RlLCByZWZOb2RlKTsKICAgICAgICAgICAgICAgICByZWZOb2RlID0gbm9kZTsKICAg
ICAgICAgICAgICAgICAvLyBXZSB3YW50IHRvIG1vdmUgdGhlIGZpcnN0IEJSIHdlIHNlZSwgc28g
Y2hlY2sgZm9yIHRoYXQgaGVyZS4KLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+aWQoKSA9PSBJ
RF9CUikKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJy
KCkpKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBub2RlID0g
bmV4dDsKICAgICAgICAgICAgIH0KQEAgLTEwODYsNyArMTA2NCw3IEBAIHZvaWQgUmVwbGFjZVNl
bGVjdGlvbkNvbW1hbmQ6OnVwZGF0ZU5vZGUKICAgICAKICAgICAvLyB1cGRhdGUgbV9sYXN0Tm9k
ZUluc2VydGVkCiAgICAgTm9kZUltcGwgKm9sZCA9IG1fbGFzdE5vZGVJbnNlcnRlZDsKLSAgICBt
X2xhc3ROb2RlSW5zZXJ0ZWQgPSBub2RlLT5sYXN0RGVzY2VuZGVudCgpOworICAgIG1fbGFzdE5v
ZGVJbnNlcnRlZCA9IG5vZGUtPmxhc3REZXNjZW5kYW50KCk7CiAgICAgbV9sYXN0Tm9kZUluc2Vy
dGVkLT5yZWYoKTsKICAgICBpZiAob2xkKQogICAgICAgICBvbGQtPmRlcmVmKCk7CkluZGV4OiBr
aHRtbC9lZGl0aW5nL3NlbGVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L1dlYkNvcmUva2h0bWwvZWRpdGluZy9zZWxlY3Rpb24uY3BwLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjg5CmRpZmYgLXUgLXAgLXIxLjg5IGtodG1sL2VkaXRpbmcvc2VsZWN0aW9uLmNwcAotLS0g
a2h0bWwvZWRpdGluZy9zZWxlY3Rpb24uY3BwCTIzIEp1biAyMDA1IDE5OjQ3OjQ4IC0wMDAwCTEu
ODkKKysrIGtodG1sL2VkaXRpbmcvc2VsZWN0aW9uLmNwcAk3IEp1bCAyMDA1IDA1OjU4OjUyIC0w
MDAwCkBAIC0zMyw3ICszMyw2IEBACiAjaW5jbHVkZSAiZG9tL2RvbV9zdHJpbmcuaCIKICNpbmNs
dWRlICJraHRtbF9wYXJ0LmgiCiAjaW5jbHVkZSAia2h0bWx2aWV3LmgiCi0jaW5jbHVkZSAibWlz
Yy9odG1sdGFncy5oIgogI2luY2x1ZGUgInJlbmRlcmluZy9yZW5kZXJfb2JqZWN0LmgiCiAjaW5j
bHVkZSAicmVuZGVyaW5nL3JlbmRlcl9zdHlsZS5oIgogI2luY2x1ZGUgInJlbmRlcmluZy9yZW5k
ZXJfdGV4dC5oIgpAQCAtOTM4LDcgKzkzNyw3IEBAIHZvaWQgU2VsZWN0aW9uOjpkZWJ1Z1JlbmRl
cmVyKFJlbmRlck9iamUKIHsKICAgICBpZiAoci0+bm9kZSgpLT5pc0VsZW1lbnROb2RlKCkpIHsK
ICAgICAgICAgRWxlbWVudEltcGwgKmVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50SW1wbCAq
PihyLT5ub2RlKCkpOwotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzJXNcbiIsIHNlbGVjdGVk
ID8gIj09PiAiIDogIiAgICAiLCBlbGVtZW50LT50YWdOYW1lKCkuc3RyaW5nKCkubGF0aW4xKCkp
OworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzJXNcbiIsIHNlbGVjdGVkID8gIj09PiAiIDog
IiAgICAiLCBlbGVtZW50LT5sb2NhbE5hbWUoKS5zdHJpbmcoKS5sYXRpbjEoKSk7CiAgICAgfQog
ICAgIGVsc2UgaWYgKHItPmlzVGV4dCgpKSB7CiAgICAgICAgIFJlbmRlclRleHQgKnRleHRSZW5k
ZXJlciA9IHN0YXRpY19jYXN0PFJlbmRlclRleHQgKj4ocik7CkluZGV4OiBraHRtbC9lZGl0aW5n
L3Zpc2libGVfcG9zaXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJD
b3JlL2todG1sL2VkaXRpbmcvdmlzaWJsZV9wb3NpdGlvbi5jcHAsdgpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuNTEKZGlmZiAtdSAtcCAtcjEuNTEga2h0bWwvZWRpdGluZy92aXNpYmxlX3Bvc2l0aW9u
LmNwcAotLS0ga2h0bWwvZWRpdGluZy92aXNpYmxlX3Bvc2l0aW9uLmNwcAkyMyBKdW4gMjAwNSAx
OTo0Nzo0OSAtMDAwMAkxLjUxCisrKyBraHRtbC9lZGl0aW5nL3Zpc2libGVfcG9zaXRpb24uY3Bw
CTcgSnVsIDIwMDUgMDU6NTg6NTIgLTAwMDAKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlICJ2
aXNpYmxlX3Bvc2l0aW9uLmgiCiAjaW5jbHVkZSAidmlzaWJsZV91bml0cy5oIgogCi0jaW5jbHVk
ZSAibWlzYy9odG1sdGFncy5oIgorI2luY2x1ZGUgImh0bWxuYW1lcy5oIgogI2luY2x1ZGUgInJl
bmRlcmluZy9yZW5kZXJfbGluZS5oIgogI2luY2x1ZGUgInJlbmRlcmluZy9yZW5kZXJfb2JqZWN0
LmgiCiAjaW5jbHVkZSAicmVuZGVyaW5nL3JlbmRlcl90ZXh0LmgiCkBAIC01MCw2ICs1MCw3IEBA
IHVzaW5nIERPTTo6UG9zaXRpb247CiB1c2luZyBET006OlJhbmdlOwogdXNpbmcgRE9NOjpSYW5n
ZUltcGw7CiB1c2luZyBET006OlRleHRJbXBsOwordXNpbmcgRE9NOjpIVE1MTmFtZXM7CiAKIG5h
bWVzcGFjZSBraHRtbCB7CiAKQEAgLTc0LDcgKzc1LDcgQEAgdm9pZCBWaXNpYmxlUG9zaXRpb246
OmluaXQoY29uc3QgUG9zaXRpbwogICAgIG1fYWZmaW5pdHkgPSBhZmZpbml0eTsKIAogICAgIC8v
IEZvciA8YnI+IDAsIGl0J3MgaW1wb3J0YW50IG5vdCB0byBtb3ZlIHBhc3QgdGhlIDxicj4uCi0g
ICAgaWYgKHBvcy5ub2RlKCkgJiYgcG9zLm5vZGUoKS0+aWQoKSA9PSBJRF9CUiAmJiBwb3Mub2Zm
c2V0KCkgPT0gMCkKKyAgICBpZiAocG9zLm5vZGUoKSAmJiBwb3Mubm9kZSgpLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6YnIoKSkgJiYgcG9zLm9mZnNldCgpID09IDApCiAgICAgICAgIGluaXRVcHN0
cmVhbShwb3MpOwogICAgIGVsc2UKICAgICAgICAgaW5pdERvd25zdHJlYW0ocG9zKTsKQEAgLTI3
NCw3ICsyNzUsNyBAQCBib29sIFZpc2libGVQb3NpdGlvbjo6aXNDYW5kaWRhdGUoY29uc3QgCiAg
ICAgfQogICAgIAogICAgIGlmIChyZW5kZXJlci0+aXNCbG9ja0Zsb3coKSAmJiAoIXJlbmRlcmVy
LT5maXJzdENoaWxkKCkgfHwgIXBvcy5ub2RlKCktPmZpcnN0Q2hpbGQoKSkgJiYgCi0gICAgICAg
KHJlbmRlcmVyLT5oZWlnaHQoKSB8fCBwb3Mubm9kZSgpLT5pZCgpID09IElEX0JPRFkpKSB7Cisg
ICAgICAgKHJlbmRlcmVyLT5oZWlnaHQoKSB8fCBwb3Mubm9kZSgpLT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6Ym9keSgpKSkpIHsKICAgICAgICAgLy8gcmV0dXJuIHRydWUgZm9yIG9mZnNldCAwIGlu
dG8gcmVuZGVyZWQgYmxvY2tzIHRoYXQgYXJlIGVtcHR5IG9mIHJlbmRlcmVkIGtpZHMsIGJ1dCBo
YXZlIGEgaGVpZ2h0CiAgICAgICAgIHJldHVybiBwb3Mub2Zmc2V0KCkgPT0gMDsKICAgICB9CkBA
IC0zNTksNyArMzYwLDcgQEAgbG9uZyBWaXNpYmxlUG9zaXRpb246Om1heE9mZnNldChjb25zdCBO
bwogCiBib29sIFZpc2libGVQb3NpdGlvbjo6aXNBdG9taWNOb2RlKGNvbnN0IE5vZGVJbXBsICpu
b2RlKQogewotICAgIHJldHVybiBub2RlICYmICghbm9kZS0+aGFzQ2hpbGROb2RlcygpIHx8IChu
b2RlLT5pZCgpID09IElEX09CSkVDVCAmJiBub2RlLT5yZW5kZXJlcigpICYmIG5vZGUtPnJlbmRl
cmVyKCktPmlzUmVwbGFjZWQoKSkpOworICAgIHJldHVybiBub2RlICYmICghbm9kZS0+aGFzQ2hp
bGROb2RlcygpIHx8IChub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b2JqZWN0KCkpICYmIG5v
ZGUtPnJlbmRlcmVyKCkgJiYgbm9kZS0+cmVuZGVyZXIoKS0+aXNSZXBsYWNlZCgpKSk7CiB9CiAK
IFFDaGFyIFZpc2libGVQb3NpdGlvbjo6Y2hhcmFjdGVyKCkgY29uc3QKSW5kZXg6IGtodG1sL2Vk
aXRpbmcvdmlzaWJsZV90ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2Vi
Q29yZS9raHRtbC9lZGl0aW5nL3Zpc2libGVfdGV4dC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuMjcKZGlmZiAtdSAtcCAtcjEuMjcga2h0bWwvZWRpdGluZy92aXNpYmxlX3RleHQuY3BwCi0t
LSBraHRtbC9lZGl0aW5nL3Zpc2libGVfdGV4dC5jcHAJMTMgTWF5IDIwMDUgMTY6NDg6NTEgLTAw
MDAJMS4yNworKysga2h0bWwvZWRpdGluZy92aXNpYmxlX3RleHQuY3BwCTcgSnVsIDIwMDUgMDU6
NTg6NTMgLTAwMDAKQEAgLTI1LDcgKzI1LDcgQEAKIAogI2luY2x1ZGUgInZpc2libGVfdGV4dC5o
IgogCi0jaW5jbHVkZSAibWlzYy9odG1sdGFncy5oIgorI2luY2x1ZGUgImh0bWxuYW1lcy5oIgog
I2luY2x1ZGUgInJlbmRlcmluZy9yZW5kZXJfdGV4dC5oIgogI2luY2x1ZGUgInhtbC9kb21fbm9k
ZWltcGwuaCIKICNpbmNsdWRlICJ4bWwvZG9tX3Bvc2l0aW9uLmgiCkBAIC0zNyw2ICszNyw3IEBA
IHVzaW5nIERPTTo6Tm9kZTsKIHVzaW5nIERPTTo6Tm9kZUltcGw7CiB1c2luZyBET006Om9mZnNl
dEluQ2hhcmFjdGVyczsKIHVzaW5nIERPTTo6UmFuZ2VJbXBsOwordXNpbmcgRE9NOjpIVE1MTmFt
ZXM7CiAKIC8vIEZJWE1FOiBUaGVzZSBjbGFzc2VzIHNob3VsZCBwcm9iYWJseSB1c2UgdGhlIHJl
bmRlciB0cmVlIGFuZCBub3QgdGhlIERPTSB0cmVlLCBzaW5jZSBlbGVtZW50cyBjb3VsZAogLy8g
YmUgaGlkZGVuIHVzaW5nIENTUywgb3IgYWRkaXRpb25hbCBnZW5lcmF0ZWQgY29udGVudCBjb3Vs
ZCBiZSBhZGRlZC4gIEZvciBub3csIHdlIGp1c3QgbWFrZSBzdXJlCkBAIC0zMzYsNDEgKzMzNywy
NSBAQCBib29sIFRleHRJdGVyYXRvcjo6aGFuZGxlUmVwbGFjZWRFbGVtZW50CiAKIGJvb2wgVGV4
dEl0ZXJhdG9yOjpoYW5kbGVOb25UZXh0Tm9kZSgpCiB7Ci0gICAgc3dpdGNoIChtX25vZGUtPmlk
KCkpIHsKLSAgICAgICAgY2FzZSBJRF9CUjogewotICAgICAgICAgICAgZW1pdENoYXJhY3Rlcign
XG4nLCBtX25vZGUtPnBhcmVudE5vZGUoKSwgbV9ub2RlLCAwLCAxKTsKLSAgICAgICAgICAgIGJy
ZWFrOworICAgIGlmIChtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpicigpKSkgeworICAg
ICAgICBlbWl0Q2hhcmFjdGVyKCdcbicsIG1fbm9kZS0+cGFyZW50Tm9kZSgpLCBtX25vZGUsIDAs
IDEpOworICAgIH0gZWxzZSBpZiAobV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGQoKSkg
fHwgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGgoKSkpIHsKKyAgICAgICAgaWYgKG1f
bGFzdENoYXJhY3RlciAhPSAnXG4nICYmIG1fbGFzdFRleHROb2RlKSB7CisgICAgICAgICAgICBl
bWl0Q2hhcmFjdGVyKCdcdCcsIG1fbGFzdFRleHROb2RlLT5wYXJlbnROb2RlKCksIG1fbGFzdFRl
eHROb2RlLCAwLCAxKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAobV9ub2RlLT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6YmxvY2txdW90ZSgpKSB8fCBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjpkZCgpKSB8fAorICAgICAgICAgICAgICAgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6ZGl2KCkpIHx8CisgICAgICAgICAgICAgICBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjpkbCgpKSB8fCBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpkdCgpKSB8fCAKKyAgICAg
ICAgICAgICAgIG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmgxKCkpIHx8IG1fbm9kZS0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OmgyKCkpIHx8CisgICAgICAgICAgICAgICBtX25vZGUtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjpoMygpKSB8fCBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjpoNCgpKSB8fAorICAgICAgICAgICAgICAgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
aDUoKSkgfHwgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDYoKSkgfHwKKyAgICAgICAg
ICAgICAgIG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmhyKCkpIHx8IG1fbm9kZS0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OmxpKCkpIHx8CisgICAgICAgICAgICAgICBtX25vZGUtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjpvbCgpKSB8fCBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpw
KCkpIHx8CisgICAgICAgICAgICAgICBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpwcmUo
KSkgfHwgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dHIoKSkgfHwKKyAgICAgICAgICAg
ICAgIG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnVsKCkpKSB7CisgICAgICAgIGlmICht
X2xhc3RDaGFyYWN0ZXIgIT0gJ1xuJyAmJiBtX2xhc3RUZXh0Tm9kZSkgeworICAgICAgICAgICAg
ZW1pdENoYXJhY3RlcignXG4nLCBtX2xhc3RUZXh0Tm9kZS0+cGFyZW50Tm9kZSgpLCBtX2xhc3RU
ZXh0Tm9kZSwgMCwgMSk7CiAgICAgICAgIH0KLQotICAgICAgICBjYXNlIElEX1REOgotICAgICAg
ICBjYXNlIElEX1RIOgotICAgICAgICAgICAgaWYgKG1fbGFzdENoYXJhY3RlciAhPSAnXG4nICYm
IG1fbGFzdFRleHROb2RlKSB7Ci0gICAgICAgICAgICAgICAgZW1pdENoYXJhY3RlcignXHQnLCBt
X2xhc3RUZXh0Tm9kZS0+cGFyZW50Tm9kZSgpLCBtX2xhc3RUZXh0Tm9kZSwgMCwgMSk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIElEX0JMT0NLUVVP
VEU6Ci0gICAgICAgIGNhc2UgSURfREQ6Ci0gICAgICAgIGNhc2UgSURfRElWOgotICAgICAgICBj
YXNlIElEX0RMOgotICAgICAgICBjYXNlIElEX0RUOgotICAgICAgICBjYXNlIElEX0gxOgotICAg
ICAgICBjYXNlIElEX0gyOgotICAgICAgICBjYXNlIElEX0gzOgotICAgICAgICBjYXNlIElEX0g0
OgotICAgICAgICBjYXNlIElEX0g1OgotICAgICAgICBjYXNlIElEX0g2OgotICAgICAgICBjYXNl
IElEX0hSOgotICAgICAgICBjYXNlIElEX0xJOgotICAgICAgICBjYXNlIElEX09MOgotICAgICAg
ICBjYXNlIElEX1A6Ci0gICAgICAgIGNhc2UgSURfUFJFOgotICAgICAgICBjYXNlIElEX1RSOgot
ICAgICAgICBjYXNlIElEX1VMOgotICAgICAgICAgICAgaWYgKG1fbGFzdENoYXJhY3RlciAhPSAn
XG4nICYmIG1fbGFzdFRleHROb2RlKSB7Ci0gICAgICAgICAgICAgICAgZW1pdENoYXJhY3Rlcign
XG4nLCBtX2xhc3RUZXh0Tm9kZS0+cGFyZW50Tm9kZSgpLCBtX2xhc3RUZXh0Tm9kZSwgMCwgMSk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKICAgICB9CiAKICAgICByZXR1cm4g
dHJ1ZTsKQEAgLTM4MSw0OSArMzY2LDM3IEBAIHZvaWQgVGV4dEl0ZXJhdG9yOjpleGl0Tm9kZSgp
CiAgICAgYm9vbCBlbmRMaW5lID0gZmFsc2U7CiAgICAgYm9vbCBhZGROZXdsaW5lID0gZmFsc2U7
CiAKLSAgICBzd2l0Y2ggKG1fbm9kZS0+aWQoKSkgewotICAgICAgICBjYXNlIElEX0JMT0NLUVVP
VEU6Ci0gICAgICAgIGNhc2UgSURfREQ6Ci0gICAgICAgIGNhc2UgSURfRElWOgotICAgICAgICBj
YXNlIElEX0RMOgotICAgICAgICBjYXNlIElEX0RUOgotICAgICAgICBjYXNlIElEX0hSOgotICAg
ICAgICBjYXNlIElEX0xJOgotICAgICAgICBjYXNlIElEX09MOgotICAgICAgICBjYXNlIElEX1BS
RToKLSAgICAgICAgY2FzZSBJRF9UUjoKLSAgICAgICAgY2FzZSBJRF9VTDoKLSAgICAgICAgICAg
IGVuZExpbmUgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBJRF9I
MToKLSAgICAgICAgY2FzZSBJRF9IMjoKLSAgICAgICAgY2FzZSBJRF9IMzoKLSAgICAgICAgY2Fz
ZSBJRF9INDoKLSAgICAgICAgY2FzZSBJRF9INToKLSAgICAgICAgY2FzZSBJRF9INjoKLSAgICAg
ICAgY2FzZSBJRF9QOiB7Ci0gICAgICAgICAgICBlbmRMaW5lID0gdHJ1ZTsKLQotICAgICAgICAg
ICAgLy8gSW4gY2VydGFpbiBjYXNlcywgZW1pdCBhIG5ldyBuZXdsaW5lIGNoYXJhY3RlciBmb3Ig
dGhpcyBub2RlCi0gICAgICAgICAgICAvLyByZWdhcmRsZXNzIG9mIHdoZXRoZXIgd2UgZW1pdCBh
bm90aGVyIG9uZS4KLSAgICAgICAgICAgIC8vIEZJWE1FOiBTb21lIGRheSB3ZSBjb3VsZCBkbyB0
aGlzIGZvciBvdGhlciB0YWdzLgotICAgICAgICAgICAgLy8gSG93ZXZlciwgZG9pbmcgaXQganVz
dCBmb3IgdGhlIHRhZ3MgYWJvdmUgbWFrZXMgaXQgbW9yZSBsaWtlbHkKLSAgICAgICAgICAgIC8v
IHdlJ2xsIGVuZCB1cCBnZXR0aW5nIHRoZSByaWdodCByZXN1bHQgd2l0aG91dCBtYXJnaW4gY29s
bGFwc2luZy4KLSAgICAgICAgICAgIC8vIEZvciBleGFtcGxlOiA8ZGl2PjxwPnRleHQ8L3A+PC9k
aXY+IHdpbGwgd29yayByaWdodCBldmVuIGlmIGJvdGgKLSAgICAgICAgICAgIC8vIHRoZSA8ZGl2
PiBhbmQgdGhlIDxwPiBoYXZlIGJvdHRvbSBtYXJnaW5zLgotICAgICAgICAgICAgUmVuZGVyT2Jq
ZWN0ICpyZW5kZXJlciA9IG1fbm9kZS0+cmVuZGVyZXIoKTsKLSAgICAgICAgICAgIGlmIChyZW5k
ZXJlcikgewotICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlICpzdHlsZSA9IHJlbmRlcmVyLT5z
dHlsZSgpOwotICAgICAgICAgICAgICAgIGlmIChzdHlsZSkgewotICAgICAgICAgICAgICAgICAg
ICBpbnQgYm90dG9tTWFyZ2luID0gcmVuZGVyZXItPmNvbGxhcHNlZE1hcmdpbkJvdHRvbSgpOwot
ICAgICAgICAgICAgICAgICAgICBpbnQgZm9udFNpemUgPSBzdHlsZS0+aHRtbEZvbnQoKS5nZXRG
b250RGVmKCkuY29tcHV0ZWRQaXhlbFNpemUoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGJv
dHRvbU1hcmdpbiAqIDIgPj0gZm9udFNpemUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFk
ZE5ld2xpbmUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICB9CisgICAgaWYgKG1fbm9kZS0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJsb2NrcXVvdGUoKSkgfHwgbV9ub2RlLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6ZGQoKSkgfHwKKyAgICAgICAgICAgICAgIG1fbm9kZS0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OmRpdigpKSB8fAorICAgICAgICAgICAgICAgbV9ub2RlLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6ZGwoKSkgfHwgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZHQoKSkgfHwg
CisgICAgICAgICAgICAgICBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpocigpKSB8fCBt
X25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpsaSgpKSB8fAorICAgICAgICAgICAgICAgbV9u
b2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b2woKSkgfHwKKyAgICAgICAgICAgICAgIG1fbm9k
ZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnByZSgpKSB8fCBtX25vZGUtPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjp0cigpKSB8fAorICAgICAgICAgICAgICAgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6dWwoKSkpCisgICAgICAgIGVuZExpbmUgPSB0cnVlOworICAgIGVsc2UgaWYgKG1fbm9k
ZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmgxKCkpIHx8IG1fbm9kZS0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OmgyKCkpIHx8CisgICAgICAgICAgICAgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6aDMoKSkgfHwgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDQoKSkgfHwKKyAgICAg
ICAgICAgICBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoNSgpKSB8fCBtX25vZGUtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjpoNigpKSB8fAorICAgICAgICAgICAgIG1fbm9kZS0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OnAoKSkpIHsKKyAgICAgICAgZW5kTGluZSA9IHRydWU7CisKKyAgICAg
ICAgLy8gSW4gY2VydGFpbiBjYXNlcywgZW1pdCBhIG5ldyBuZXdsaW5lIGNoYXJhY3RlciBmb3Ig
dGhpcyBub2RlCisgICAgICAgIC8vIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB3ZSBlbWl0IGFub3Ro
ZXIgb25lLgorICAgICAgICAvLyBGSVhNRTogU29tZSBkYXkgd2UgY291bGQgZG8gdGhpcyBmb3Ig
b3RoZXIgdGFncy4KKyAgICAgICAgLy8gSG93ZXZlciwgZG9pbmcgaXQganVzdCBmb3IgdGhlIHRh
Z3MgYWJvdmUgbWFrZXMgaXQgbW9yZSBsaWtlbHkKKyAgICAgICAgLy8gd2UnbGwgZW5kIHVwIGdl
dHRpbmcgdGhlIHJpZ2h0IHJlc3VsdCB3aXRob3V0IG1hcmdpbiBjb2xsYXBzaW5nLgorICAgICAg
ICAvLyBGb3IgZXhhbXBsZTogPGRpdj48cD50ZXh0PC9wPjwvZGl2PiB3aWxsIHdvcmsgcmlnaHQg
ZXZlbiBpZiBib3RoCisgICAgICAgIC8vIHRoZSA8ZGl2PiBhbmQgdGhlIDxwPiBoYXZlIGJvdHRv
bSBtYXJnaW5zLgorICAgICAgICBSZW5kZXJPYmplY3QgKnJlbmRlcmVyID0gbV9ub2RlLT5yZW5k
ZXJlcigpOworICAgICAgICBpZiAocmVuZGVyZXIpIHsKKyAgICAgICAgICAgIFJlbmRlclN0eWxl
ICpzdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpOworICAgICAgICAgICAgaWYgKHN0eWxlKSB7Cisg
ICAgICAgICAgICAgICAgaW50IGJvdHRvbU1hcmdpbiA9IHJlbmRlcmVyLT5jb2xsYXBzZWRNYXJn
aW5Cb3R0b20oKTsKKyAgICAgICAgICAgICAgICBpbnQgZm9udFNpemUgPSBzdHlsZS0+aHRtbEZv
bnQoKS5nZXRGb250RGVmKCkuY29tcHV0ZWRQaXhlbFNpemUoKTsKKyAgICAgICAgICAgICAgICBp
ZiAoYm90dG9tTWFyZ2luICogMiA+PSBmb250U2l6ZSkgeworICAgICAgICAgICAgICAgICAgICBh
ZGROZXdsaW5lID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KIApAQCAtNjYwLDM0ICs2MzMsMjIgQEAg
Ym9vbCBTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yOjpoYQogCiBib29sIFNpbXBsaWZp
ZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3I6OmhhbmRsZU5vblRleHROb2RlKCkKIHsKLSAgICBzd2l0
Y2ggKG1fbm9kZS0+aWQoKSkgewotICAgICAgICBjYXNlIElEX0JSOgotICAgICAgICAgICAgZW1p
dE5ld2xpbmVGb3JCUk9yVGV4dCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
SURfVEQ6Ci0gICAgICAgIGNhc2UgSURfVEg6Ci0gICAgICAgIGNhc2UgSURfQkxPQ0tRVU9URToK
LSAgICAgICAgY2FzZSBJRF9ERDoKLSAgICAgICAgY2FzZSBJRF9ESVY6Ci0gICAgICAgIGNhc2Ug
SURfREw6Ci0gICAgICAgIGNhc2UgSURfRFQ6Ci0gICAgICAgIGNhc2UgSURfSDE6Ci0gICAgICAg
IGNhc2UgSURfSDI6Ci0gICAgICAgIGNhc2UgSURfSDM6Ci0gICAgICAgIGNhc2UgSURfSDQ6Ci0g
ICAgICAgIGNhc2UgSURfSDU6Ci0gICAgICAgIGNhc2UgSURfSDY6Ci0gICAgICAgIGNhc2UgSURf
SFI6Ci0gICAgICAgIGNhc2UgSURfUDoKLSAgICAgICAgY2FzZSBJRF9QUkU6Ci0gICAgICAgIGNh
c2UgSURfVFI6Ci0gICAgICAgIGNhc2UgSURfT0w6Ci0gICAgICAgIGNhc2UgSURfVUw6Ci0gICAg
ICAgIGNhc2UgSURfTEk6Ci0gICAgICAgICAgICAvLyBFbWl0IGEgc3BhY2UgdG8gImJyZWFrIHVw
IiBjb250ZW50LiBBbnkgd29yZCBicmVhawotICAgICAgICAgICAgLy8gY2hhcmFjdGVyIHdpbGwg
ZG8uCi0gICAgICAgICAgICBlbWl0Q2hhcmFjdGVyKCcgJywgbV9ub2RlLCAwLCAwKTsKLSAgICAg
ICAgICAgIGJyZWFrOworICAgIGlmIChtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpicigp
KSkKKyAgICAgICAgZW1pdE5ld2xpbmVGb3JCUk9yVGV4dCgpOworICAgIGVsc2UgaWYgKG1fbm9k
ZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRkICgpKSB8fCBtX25vZGUtPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjp0aCgpKSB8fAorICAgICAgICAgICAgIG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OmJsb2NrcXVvdGUoKSkgfHwgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZGQoKSkg
fHwKKyAgICAgICAgICAgICBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpkaXYoKSkgfHwK
KyAgICAgICAgICAgICBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpkbCgpKSB8fCBtX25v
ZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpkdCgpKSB8fCAKKyAgICAgICAgICAgICBtX25vZGUt
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoMSgpKSB8fCBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjpoMigpKSB8fAorICAgICAgICAgICAgIG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
OmgzKCkpIHx8IG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omg0KCkpIHx8CisgICAgICAg
ICAgICAgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDUoKSkgfHwgbV9ub2RlLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6aDYoKSkgfHwKKyAgICAgICAgICAgICBtX25vZGUtPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjpocigpKSB8fCBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpsaSgp
KSB8fAorICAgICAgICAgICAgIG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9sKCkpIHx8
IG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnAoKSkgfHwKKyAgICAgICAgICAgICBtX25v
ZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpwcmUoKSkgfHwgbV9ub2RlLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6dHIoKSkgfHwKKyAgICAgICAgICAgICBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjp1bCgpKSkgeworICAgICAgICAvLyBFbWl0IGEgc3BhY2UgdG8gImJyZWFrIHVwIiBjb250
ZW50LiBBbnkgd29yZCBicmVhaworICAgICAgICAvLyBjaGFyYWN0ZXIgd2lsbCBkby4KKyAgICAg
ICAgZW1pdENoYXJhY3RlcignICcsIG1fbm9kZSwgMCwgMCk7CiAgICAgfQogCiAgICAgcmV0dXJu
IHRydWU7CkluZGV4OiBraHRtbC9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VkaXRpbmcvdmlzaWJsZV91bml0cy5j
cHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzQKZGlmZiAtdSAtcCAtcjEuMzQga2h0bWwvZWRp
dGluZy92aXNpYmxlX3VuaXRzLmNwcAotLS0ga2h0bWwvZWRpdGluZy92aXNpYmxlX3VuaXRzLmNw
cAkyNiBNYXkgMjAwNSAyMDozMDoxMiAtMDAwMAkxLjM0CisrKyBraHRtbC9lZGl0aW5nL3Zpc2li
bGVfdW5pdHMuY3BwCTcgSnVsIDIwMDUgMDU6NTg6NTQgLTAwMDAKQEAgLTI3LDcgKzI3LDcgQEAK
IAogI2luY2x1ZGUgPHFzdHJpbmcuaD4KIAotI2luY2x1ZGUgImh0bWx0YWdzLmgiCisjaW5jbHVk
ZSAiaHRtbG5hbWVzLmgiCiAjaW5jbHVkZSAibWlzYy9oZWxwZXIuaCIKICNpbmNsdWRlICJyZW5k
ZXJpbmcvcmVuZGVyX3RleHQuaCIKICNpbmNsdWRlICJyZW5kZXJpbmcvcmVuZGVyX2Jsb2NrLmgi
CkBAIC00MSw2ICs0MSw3IEBAIHVzaW5nIERPTTo6RWxlbWVudEltcGw7CiB1c2luZyBET006Ok5v
ZGVJbXBsOwogdXNpbmcgRE9NOjpQb3NpdGlvbjsKIHVzaW5nIERPTTo6UmFuZ2VJbXBsOwordXNp
bmcgRE9NOjpIVE1MTmFtZXM7CiAKIG5hbWVzcGFjZSBraHRtbCB7CiAKQEAgLTMzMiw3ICszMzMs
NyBAQCBWaXNpYmxlUG9zaXRpb24gZW5kT2ZMaW5lKGNvbnN0IFZpc2libGVQCiAgICAgICAgIHJl
dHVybiBWaXNpYmxlUG9zaXRpb24oKTsKIAogICAgIGxvbmcgZW5kT2Zmc2V0ID0gMTsKLSAgICBp
ZiAoZW5kTm9kZS0+aWQoKSA9PSBJRF9CUikgeworICAgIGlmIChlbmROb2RlLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6YnIoKSkpIHsKICAgICAgICAgZW5kT2Zmc2V0ID0gMDsKICAgICB9IGVsc2Ug
aWYgKGVuZEJveC0+aXNJbmxpbmVUZXh0Qm94KCkpIHsKICAgICAgICAgSW5saW5lVGV4dEJveCAq
ZW5kVGV4dEJveCA9IHN0YXRpY19jYXN0PElubGluZVRleHRCb3ggKj4oZW5kQm94KTsKSW5kZXg6
IGtodG1sL2h0bWwvZHRkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiBraHRtbC9odG1sL2R0ZC5j
cHAKZGlmZiAtTiBraHRtbC9odG1sL2R0ZC5jcHAKLS0tIGtodG1sL2h0bWwvZHRkLmNwcAkxMiBB
cHIgMjAwNSAyMjo0OTo0MSAtMDAwMAkxLjM4CisrKyAvZGV2L251bGwJMSBKYW4gMTk3MCAwMDow
MDowMCAtMDAwMApAQCAtMSw5ODkgKzAsMCBAQAotLyoqCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBv
ZiB0aGUgRE9NIGltcGxlbWVudGF0aW9uIGZvciBLREUuCi0gKgotICogKEMpIDE5OTkgTGFycyBL
bm9sbCAoa25vbGxAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwMyBBcHBsZSBDb21wdXRl
ciwgSW5jLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBs
ZSBQbGFjZSAtIFN1aXRlIDMzMCwKLSAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgotICoK
LSAqLwotCi0jaW5jbHVkZSAiaHRtbC9kdGQuaCIKLSNpbmNsdWRlICJtaXNjL2h0bWxoYXNoZXMu
aCIKLQotdXNpbmcgbmFtZXNwYWNlIERPTTsKLQotI2luY2x1ZGUgPGtkZWJ1Zy5oPgotCi0vLyBw
cmlvcml0eSBvZiB0YWdzLiBDbG9zaW5nIHRhZ3Mgb2YgaGlnaGVyIHByaW9yaXR5IGNsb3NlIHRh
Z3Mgb2YgbG93ZXIKLS8vIHByaW9yaXR5LgotLy8gVXBkYXRlIHRoaXMgbGlzdCwgd2hlbmV2ZXIg
eW91IGNoYW5nZSBodG1sdGFncy4qCi0vLwotLy8gMCBlbGVtZW50cyB3aXRoIGZvcmJpZGRlbiBj
bG9zZSB0YWcgYW5kIHRleHQuIFRoZXkgZG9uJ3QgZ2V0IHB1c2hlZAotLy8gICB0byB0aGUgc3Rh
Y2suCi0vLyAxIGlubGluZSBlbGVtZW50cwotLy8gMiBmb3JtIGVsZW1lbnRzCi0vLyAzIHJlZ3Vs
YXIgYmxvY2sgbGV2ZWwgZWxlbWVudHMKLS8vIDQgbGlzdHMgKE9MIFVMIERJUiBNRU5VKQotLy8g
NSBURCBUSCBTRUxFQ1QKLS8vIDYgVFIKLS8vIDcgdGJvZHkgdGhlYWQgdGZvb3QgY2FwdGlvbiAg
b2JqZWN0Ci0vLyA4IHRhYmxlCi0vLyA5IGJvZHkgZnJhbWVzZXQKLS8vIDEwIGh0bWwKLWNvbnN0
IHVuc2lnbmVkIHNob3J0IERPTTo6dGFnUHJpb3JpdHlBcnJheVtdID0gewotICAgIDAsIC8vIDAK
LSAgICAxLCAvLyBJRF9BID09IDEKLSAgICAxLCAvLyBJRF9BQkJSCi0gICAgMSwgLy8gSURfQUNS
T05ZTQotICAgIDMsIC8vIElEX0FERFJFU1MKLSAgICAxLCAvLyBJRF9BUFBMRVQKLSAgICAwLCAv
LyBJRF9BUkVBCi0gICAgMSwgLy8gSURfQgotICAgIDAsIC8vIElEX0JBU0UKLSAgICAwLCAvLyBJ
RF9CQVNFRk9OVAotICAgIDEsIC8vIElEX0JETwotICAgIDEsIC8vIElEX0JJRwotICAgIDUsIC8v
IElEX0JMT0NLUVVPVEUKLSAgIDEwLCAvLyBJRF9CT0RZCi0gICAgMCwgLy8gSURfQlIKLSAgICAx
LCAvLyBJRF9CVVRUT04KLSAgICAwLCAvLyBJRF9DQU5WQVMKLSAgICA1LCAvLyBJRF9DQVBUSU9O
Ci0gICAgNSwgLy8gSURfQ0VOVEVSCi0gICAgMSwgLy8gSURfQ0lURQotICAgIDEsIC8vIElEX0NP
REUKLSAgICAwLCAvLyBJRF9DT0wKLSAgICAxLCAvLyBJRF9DT0xHUk9VUAotICAgIDMsIC8vIElE
X0RECi0gICAgMSwgLy8gSURfREVMCi0gICAgMSwgLy8gSURfREZOCi0gICAgNSwgLy8gSURfRElS
Ci0gICAgNSwgLy8gSURfRElWCi0gICAgNSwgLy8gSURfREwKLSAgICAzLCAvLyBJRF9EVAotICAg
IDEsIC8vIElEX0VNCi0gICAgMCwgLy8gSURfRU1CRUQKLSAgICAzLCAvLyBJRF9GSUVMRFNFVAot
ICAgIDEsIC8vIElEX0ZPTlQKLSAgICAzLCAvLyBJRF9GT1JNCi0gICAgMCwgLy8gSURfRlJBTUUK
LSAgIDEwLC8vIElEX0ZSQU1FU0VUCi0gICAgNSwgLy8gSURfSDEKLSAgICA1LCAvLyBJRF9IMgot
ICAgIDUsIC8vIElEX0gzCi0gICAgNSwgLy8gSURfSDQKLSAgICA1LCAvLyBJRF9INQotICAgIDUs
IC8vIElEX0g2Ci0gICAxMCwvLyBJRF9IRUFECi0gICAgMCwgLy8gSURfSFIKLSAgIDExLC8vIElE
X0hUTUwKLSAgICAxLCAvLyBJRF9JCi0gICAgMSwgLy8gSURfSUZSQU1FCi0gICAgMCwgLy8gSURf
SU1HCi0gICAgMCwgLy8gSURfSU5QVVQKLSAgICAxLCAvLyBJRF9JTlMKLSAgICAwLCAvLyBJRF9J
U0lOREVYCi0gICAgMSwgLy8gSURfS0JECi0gICAgMCwgLy8gSURfS0VZR0VOCi0gICAgNSwgLy8g
SURfTEFCRUwKLSAgICAxLCAvLyBJRF9MQVlFUgotICAgIDEsIC8vIElEX0xFR0VORAotICAgIDMs
IC8vIElEX0xJCi0gICAgMCwgLy8gSURfTElOSwotICAgIDEsIC8vIElEX01BUAotICAgIDMsIC8v
IElEX01BUlFVRUUKLSAgICA1LCAvLyBJRF9NRU5VCi0gICAgMCwgLy8gSURfTUVUQQotICAgIDUs
IC8vIElEX05PQlIKLSAgIDEwLC8vIElEX05PRU1CRUQKLSAgIDEwLC8vIElEX05PRlJBTUVTCi0g
ICAgMywgLy8gSURfTk9TQ1JJUFQKLSAgICAxLCAvLyBJRF9OT0xBWUVSCi0gICAgNywgLy8gSURf
T0JKRUNUCi0gICAgNSwgLy8gSURfT0wKLSAgICAxLCAvLyBJRF9PUFRHUk9VUAotICAgIDIsIC8v
IElEX09QVElPTgotICAgIDMsIC8vIElEX1AKLSAgICAwLCAvLyBJRF9QQVJBTQotICAgIDUsIC8v
IElEX1BMQUlOVEVYVAotICAgIDUsIC8vIElEX1BSRQotICAgIDEsIC8vIElEX1EKLSAgICAxLCAv
LyBJRF9TCi0gICAgMSwgLy8gSURfU0FNUAotICAgIDEsIC8vIElEX1NDUklQVAotICAgIDYsIC8v
IElEX1NFTEVDVAotICAgIDEsIC8vIElEX1NNQUxMCi0gICAgMSwgLy8gSURfU1BBTgotICAgIDEs
IC8vIElEX1NUUklLRQotICAgIDEsIC8vIElEX1NUUk9ORwotICAgIDEsIC8vIElEX1NUWUxFCi0g
ICAgMSwgLy8gSURfU1VCCi0gICAgMSwgLy8gSURfU1VQCi0gICAgOSwvLyBJRF9UQUJMRQotICAg
IDgsIC8vIElEX1RCT0RZCi0gICAgNiwgLy8gSURfVEQKLSAgICAxLCAvLyBJRF9URVhUQVJFQQot
ICAgIDgsIC8vIElEX1RGT09UCi0gICAgNiwgLy8gSURfVEgKLSAgICA4LCAvLyBJRF9USEVBRAot
ICAgIDEsIC8vIElEX1RJVExFCi0gICAgNywgLy8gSURfVFIKLSAgICAxLCAvLyBJRF9UVAotICAg
IDEsIC8vIElEX1UKLSAgICA1LCAvLyBJRF9VTAotICAgIDEsIC8vIElEX1ZBUgotICAgIDEsIC8v
IElEX1dCUgotICAgIDUsIC8vIElEX1hNUAotICAgIDAsIC8vIElEX1RFWFQKLX07Ci0KLWNvbnN0
IHRhZ1N0YXR1cyBET006OmVuZFRhZ0FycmF5W10gPSB7Ci0gICAgUkVRVUlSRUQsICAvLyAwCi0g
ICAgUkVRVUlSRUQsICAvLyBJRF9BID09IDEKLSAgICBSRVFVSVJFRCwgIC8vIElEX0FCQlIKLSAg
ICBSRVFVSVJFRCwgIC8vIElEX0FDUk9OWU0KLSAgICBSRVFVSVJFRCwgIC8vIElEX0FERFJFU1MK
LSAgICBSRVFVSVJFRCwgIC8vIElEX0FQUExFVAotICAgIEZPUkJJRERFTiwgLy8gSURfQVJFQQot
ICAgIFJFUVVJUkVELCAgLy8gSURfQgotICAgIEZPUkJJRERFTiwgLy8gSURfQkFTRQotICAgIEZP
UkJJRERFTiwgLy8gSURfQkFTRUZPTlQKLSAgICBSRVFVSVJFRCwgIC8vIElEX0JETwotICAgIFJF
UVVJUkVELCAgLy8gSURfQklHCi0gICAgUkVRVUlSRUQsICAvLyBJRF9CTE9DS1FVT1RFCi0gICAg
UkVRVUlSRUQsICAvLyBJRF9CT0RZCi0gICAgRk9SQklEREVOLCAvLyBJRF9CUgotICAgIFJFUVVJ
UkVELCAgLy8gSURfQlVUVE9OCi0gICAgRk9SQklEREVOLCAvLyBJRF9DQU5WQVMKLSAgICBSRVFV
SVJFRCwgIC8vIElEX0NBUFRJT04KLSAgICBSRVFVSVJFRCwgIC8vIElEX0NFTlRFUgotICAgIFJF
UVVJUkVELCAgLy8gSURfQ0lURQotICAgIFJFUVVJUkVELCAgLy8gSURfQ09ERQotICAgIEZPUkJJ
RERFTiwgLy8gSURfQ09MCi0gICAgT1BUSU9OQUwsICAvLyBJRF9DT0xHUk9VUAotICAgIE9QVElP
TkFMLCAgLy8gSURfREQKLSAgICBSRVFVSVJFRCwgIC8vIElEX0RFTAotICAgIFJFUVVJUkVELCAg
Ly8gSURfREZOCi0gICAgUkVRVUlSRUQsICAvLyBJRF9ESVIKLSAgICBSRVFVSVJFRCwgIC8vIElE
X0RJVgotICAgIFJFUVVJUkVELCAgLy8gSURfREwKLSAgICBPUFRJT05BTCwgIC8vIElEX0RUCi0g
ICAgUkVRVUlSRUQsICAvLyBJRF9FTQotICAgIFJFUVVJUkVELCAgLy8gSURfRU1CRUQKLSAgICBS
RVFVSVJFRCwgIC8vIElEX0ZJRUxEU0VUCi0gICAgUkVRVUlSRUQsICAvLyBJRF9GT05UCi0gICAg
UkVRVUlSRUQsICAvLyBJRF9GT1JNCi0gICAgRk9SQklEREVOLCAvLyBJRF9GUkFNRQotICAgIFJF
UVVJUkVELCAgLy8gSURfRlJBTUVTRVQKLSAgICBSRVFVSVJFRCwgIC8vIElEX0gxCi0gICAgUkVR
VUlSRUQsICAvLyBJRF9IMgotICAgIFJFUVVJUkVELCAgLy8gSURfSDMKLSAgICBSRVFVSVJFRCwg
IC8vIElEX0g0Ci0gICAgUkVRVUlSRUQsICAvLyBJRF9INQotICAgIFJFUVVJUkVELCAgLy8gSURf
SDYKLSAgICBPUFRJT05BTCwgIC8vIElEX0hFQUQKLSAgICBGT1JCSURERU4sIC8vIElEX0hSCi0g
ICAgUkVRVUlSRUQsICAvLyBJRF9IVE1MCi0gICAgUkVRVUlSRUQsICAvLyBJRF9JCi0gICAgUkVR
VUlSRUQsICAvLyBJRF9JRlJBTUUKLSAgICBGT1JCSURERU4sIC8vIElEX0lNRwotICAgIEZPUkJJ
RERFTiwgLy8gSURfSU5QVVQKLSAgICBSRVFVSVJFRCwgIC8vIElEX0lOUwotICAgIEZPUkJJRERF
TiwgLy8gSURfSVNJTkRFWAotICAgIFJFUVVJUkVELCAgLy8gSURfS0JECi0gICAgUkVRVUlSRUQs
ICAvLyBJRF9LRVlHRU4KLSAgICBSRVFVSVJFRCwgIC8vIElEX0xBQkVMCi0gICAgUkVRVUlSRUQs
ICAvLyBJRF9MQVlFUgotICAgIFJFUVVJUkVELCAgLy8gSURfTEVHRU5ECi0gICAgT1BUSU9OQUws
ICAvLyBJRF9MSQotICAgIEZPUkJJRERFTiwgLy8gSURfTElOSwotICAgIFJFUVVJUkVELCAgLy8g
SURfTUFQCi0gICAgUkVRVUlSRUQsICAvLyBJRF9NQVJRVUVFCi0gICAgUkVRVUlSRUQsICAvLyBJ
RF9NRU5VCi0gICAgRk9SQklEREVOLCAvLyBJRF9NRVRBCi0gICAgUkVRVUlSRUQsICAvLyBJRF9O
T0JSCi0gICAgUkVRVUlSRUQsICAvLyBJRF9OT0VNQkVECi0gICAgUkVRVUlSRUQsICAvLyBJRF9O
T0ZSQU1FUwotICAgIFJFUVVJUkVELCAgLy8gSURfTk9TQ1JJUFQKLSAgICBSRVFVSVJFRCwgIC8v
IElEX05PTEFZRVIKLSAgICBSRVFVSVJFRCwgIC8vIElEX09CSkVDVAotICAgIFJFUVVJUkVELCAg
Ly8gSURfT0wKLSAgICBSRVFVSVJFRCwgIC8vIElEX09QVEdST1VQCi0gICAgT1BUSU9OQUwsICAv
LyBJRF9PUFRJT04KLSAgICBPUFRJT05BTCwgIC8vIElEX1AKLSAgICBGT1JCSURERU4sIC8vIElE
X1BBUkFNCi0gICAgUkVRVUlSRUQsICAvLyBJRF9QTEFJTlRFWFQKLSAgICBSRVFVSVJFRCwgIC8v
IElEX1BSRQotICAgIFJFUVVJUkVELCAgLy8gSURfUQotICAgIFJFUVVJUkVELCAgLy8gSURfUwot
ICAgIFJFUVVJUkVELCAgLy8gSURfU0FNUAotICAgIFJFUVVJUkVELCAgLy8gSURfU0NSSVBUCi0g
ICAgUkVRVUlSRUQsICAvLyBJRF9TRUxFQ1QKLSAgICBSRVFVSVJFRCwgIC8vIElEX1NNQUxMCi0g
ICAgUkVRVUlSRUQsICAvLyBJRF9TUEFOCi0gICAgUkVRVUlSRUQsICAvLyBJRF9TVFJJS0UKLSAg
ICBSRVFVSVJFRCwgIC8vIElEX1NUUk9ORwotICAgIFJFUVVJUkVELCAgLy8gSURfU1RZTEUKLSAg
ICBSRVFVSVJFRCwgIC8vIElEX1NVQgotICAgIFJFUVVJUkVELCAgLy8gSURfU1VQCi0gICAgUkVR
VUlSRUQsICAvLyBJRF9UQUJMRQotICAgIE9QVElPTkFMLCAgLy8gSURfVEJPRFkKLSAgICBPUFRJ
T05BTCwgIC8vIElEX1RECi0gICAgUkVRVUlSRUQsICAvLyBJRF9URVhUQVJFQQotICAgIE9QVElP
TkFMLCAgLy8gSURfVEZPT1QKLSAgICBPUFRJT05BTCwgIC8vIElEX1RICi0gICAgT1BUSU9OQUws
ICAvLyBJRF9USEVBRAotICAgIFJFUVVJUkVELCAgLy8gSURfVElUTEUKLSAgICBPUFRJT05BTCwg
IC8vIElEX1RSCi0gICAgUkVRVUlSRUQsICAvLyBJRF9UVAotICAgIFJFUVVJUkVELCAgLy8gSURf
VQotICAgIFJFUVVJUkVELCAgLy8gSURfVUwKLSAgICBSRVFVSVJFRCwgIC8vIElEX1ZBUgotICAg
IFJFUVVJUkVELCAgLy8gSURfV0JSCi0gICAgUkVRVUlSRUQsICAvLyBJRF9YTVAKLSAgICBSRVFV
SVJFRCAgIC8vIElEX1RFWFQKLX07Ci0KLQotc3RhdGljIGNvbnN0IHVzaG9ydCB0YWdfbGlzdF8w
W10gPSB7Ci0gICAgSURfVEVYVCwKLSAgICBJRF9UVCwKLSAgICBJRF9JLAotICAgIElEX0IsCi0g
ICAgSURfVSwKLSAgICBJRF9TLAotICAgIElEX1NUUklLRSwKLSAgICBJRF9CSUcsCi0gICAgSURf
U01BTEwsCi0gICAgSURfRU0sCi0gICAgSURfU1RST05HLAotICAgIElEX0RGTiwKLSAgICBJRF9D
T0RFLAotICAgIElEX1NBTVAsCi0gICAgSURfS0JELAotICAgIElEX1ZBUiwKLSAgICBJRF9DSVRF
LAotICAgIElEX0FCQlIsCi0gICAgSURfQUNST05ZTSwKLSAgICBJRF9BLAotICAgIElEX0NBTlZB
UywKLSAgICBJRF9JTUcsCi0gICAgSURfQVBQTEVULAotICAgIElEX09CSkVDVCwKLSAgICBJRF9F
TUJFRCwKLSAgICBJRF9GT05ULAotICAgIElEX0JBU0VGT05ULAotICAgIElEX0JSLAotICAgIElE
X1NDUklQVCwKLSAgICBJRF9NQVAsCi0gICAgSURfUSwKLSAgICBJRF9TVUIsCi0gICAgSURfU1VQ
LAotICAgIElEX1NQQU4sCi0gICAgSURfQkRPLAotICAgIElEX0lGUkFNRSwKLSAgICBJRF9JTlBV
VCwKLSAgICBJRF9TRUxFQ1QsCi0gICAgSURfVEVYVEFSRUEsCi0gICAgSURfTEFCRUwsCi0gICAg
SURfQlVUVE9OLAotICAgIElEX0lOUywKLSAgICBJRF9ERUwsCi0gICAgSURfQ09NTUVOVCwKLSAg
ICBJRF9OT0JSLAotICAgIElEX1dCUiwKLSAgICAwCi19OwotCi1zdGF0aWMgY29uc3QgdXNob3J0
IHRhZ19saXN0XzFbXSA9IHsKLSAgICBJRF9URVhULAotICAgIElEX1AsCi0gICAgSURfSDEsCi0g
ICAgSURfSDIsCi0gICAgSURfSDMsCi0gICAgSURfSDQsCi0gICAgSURfSDUsCi0gICAgSURfSDYs
Ci0gICAgSURfVUwsCi0gICAgSURfT0wsCi0gICAgSURfRElSLAotICAgIElEX01FTlUsCi0gICAg
SURfUFJFLAotICAgIElEX1BMQUlOVEVYVCwKLSAgICBJRF9ETCwKLSAgICBJRF9ESVYsCi0gICAg
SURfTEFZRVIsCi0gICAgSURfQ0VOVEVSLAotICAgIElEX05PU0NSSVBULAotICAgIElEX05PRlJB
TUVTLAotICAgIElEX0JMT0NLUVVPVEUsCi0gICAgSURfRk9STSwKLSAgICBJRF9JU0lOREVYLAot
ICAgIElEX0hSLAotICAgIElEX1RBQkxFLAotICAgIElEX0ZJRUxEU0VULAotICAgIElEX0FERFJF
U1MsCi0gICAgSURfVFQsCi0gICAgSURfSSwKLSAgICBJRF9CLAotICAgIElEX1UsCi0gICAgSURf
UywKLSAgICBJRF9TVFJJS0UsCi0gICAgSURfQklHLAotICAgIElEX1NNQUxMLAotICAgIElEX0VN
LAotICAgIElEX1NUUk9ORywKLSAgICBJRF9ERk4sCi0gICAgSURfQ09ERSwKLSAgICBJRF9TQU1Q
LAotICAgIElEX0tCRCwKLSAgICBJRF9WQVIsCi0gICAgSURfQ0lURSwKLSAgICBJRF9BQkJSLAot
ICAgIElEX0FDUk9OWU0sCi0gICAgSURfQSwKLSAgICBJRF9DQU5WQVMsCi0gICAgSURfSU1HLAot
ICAgIElEX0FQUExFVCwKLSAgICBJRF9PQkpFQ1QsCi0gICAgSURfRU1CRUQsCi0gICAgSURfRk9O
VCwKLSAgICBJRF9CQVNFRk9OVCwKLSAgICBJRF9CUiwKLSAgICBJRF9TQ1JJUFQsCi0gICAgSURf
TUFQLAotICAgIElEX1EsCi0gICAgSURfU1VCLAotICAgIElEX1NVUCwKLSAgICBJRF9TUEFOLAot
ICAgIElEX0JETywKLSAgICBJRF9JRlJBTUUsCi0gICAgSURfSU5QVVQsCi0gICAgSURfS0VZR0VO
LAotICAgIElEX1NFTEVDVCwKLSAgICBJRF9URVhUQVJFQSwKLSAgICBJRF9MQUJFTCwKLSAgICBJ
RF9CVVRUT04sCi0gICAgSURfQ09NTUVOVCwKLSAgICBJRF9MSSwKLSAgICBJRF9EVCwKLSAgICBJ
RF9ERCwKLSAgICBJRF9YTVAsCi0gICAgSURfSU5TLAotICAgIElEX0RFTCwKLSAgICBJRF9OT0JS
LAotICAgIElEX1dCUiwKLSAgICBJRF9NQVJRVUVFLAotICAgIDAKLX07Ci0KLXN0YXRpYyBjb25z
dCB1c2hvcnQgdGFnX2xpc3RfMltdID0gewotICAgIElEX0NPTU1FTlQsCi0gICAgMAotfTsKLQot
c3RhdGljIGNvbnN0IHVzaG9ydCB0YWdfbGlzdF8zW10gPSB7Ci0gICAgSURfVEVYVCwKLSAgICBJ
RF9QLAotICAgIElEX0gxLAotICAgIElEX0gyLAotICAgIElEX0gzLAotICAgIElEX0g0LAotICAg
IElEX0g1LAotICAgIElEX0g2LAotICAgIElEX1VMLAotICAgIElEX09MLAotICAgIElEX0RJUiwK
LSAgICBJRF9NRU5VLAotICAgIElEX1BSRSwKLSAgICBJRF9QTEFJTlRFWFQsCi0gICAgSURfREws
Ci0gICAgSURfRElWLAotICAgIElEX0xBWUVSLAotICAgIElEX0NFTlRFUiwKLSAgICBJRF9OT1ND
UklQVCwKLSAgICBJRF9OT0ZSQU1FUywKLSAgICBJRF9CTE9DS1FVT1RFLAotICAgIElEX0ZPUk0s
Ci0gICAgSURfSVNJTkRFWCwKLSAgICBJRF9IUiwKLSAgICBJRF9UQUJMRSwKLSAgICBJRF9GSUVM
RFNFVCwKLSAgICBJRF9BRERSRVNTLAotICAgIElEX0NPTU1FTlQsCi0gICAgSURfTEksCi0gICAg
SURfWE1QLAotICAgIElEX01BUlFVRUUsCi0gICAgMAotfTsKLQotc3RhdGljIGNvbnN0IHVzaG9y
dCB0YWdfbGlzdF80W10gPSB7Ci0gICAgSURfVEVYVCwKLSAgICBJRF9QQVJBTSwKLSAgICBJRF9Q
LAotICAgIElEX0gxLAotICAgIElEX0gyLAotICAgIElEX0gzLAotICAgIElEX0g0LAotICAgIElE
X0g1LAotICAgIElEX0g2LAotICAgIElEX1VMLAotICAgIElEX09MLAotICAgIElEX0RJUiwKLSAg
ICBJRF9NRU5VLAotICAgIElEX1BSRSwKLSAgICBJRF9QTEFJTlRFWFQsCi0gICAgSURfREwsCi0g
ICAgSURfRElWLAotICAgIElEX0xBWUVSLAotICAgIElEX0NFTlRFUiwKLSAgICBJRF9OT1NDUklQ
VCwKLSAgICBJRF9OT0ZSQU1FUywKLSAgICBJRF9CTE9DS1FVT1RFLAotICAgIElEX0ZPUk0sCi0g
ICAgSURfSVNJTkRFWCwKLSAgICBJRF9IUiwKLSAgICBJRF9UQUJMRSwKLSAgICBJRF9GSUVMRFNF
VCwKLSAgICBJRF9BRERSRVNTLAotICAgIElEX1RFWFQsCi0gICAgSURfVFQsCi0gICAgSURfSSwK
LSAgICBJRF9CLAotICAgIElEX1UsCi0gICAgSURfUywKLSAgICBJRF9TVFJJS0UsCi0gICAgSURf
QklHLAotICAgIElEX1NNQUxMLAotICAgIElEX0VNLAotICAgIElEX1NUUk9ORywKLSAgICBJRF9E
Rk4sCi0gICAgSURfQ09ERSwKLSAgICBJRF9TQU1QLAotICAgIElEX0tCRCwKLSAgICBJRF9WQVIs
Ci0gICAgSURfQ0lURSwKLSAgICBJRF9BQkJSLAotICAgIElEX0FDUk9OWU0sCi0gICAgSURfQSwK
LSAgICBJRF9DQU5WQVMsCi0gICAgSURfSU1HLAotICAgIElEX0FQUExFVCwKLSAgICBJRF9PQkpF
Q1QsCi0gICAgSURfRU1CRUQsCi0gICAgSURfRk9OVCwKLSAgICBJRF9CQVNFRk9OVCwKLSAgICBJ
RF9CUiwKLSAgICBJRF9TQ1JJUFQsCi0gICAgSURfTUFQLAotICAgIElEX1EsCi0gICAgSURfU1VC
LAotICAgIElEX1NVUCwKLSAgICBJRF9TUEFOLAotICAgIElEX0JETywKLSAgICBJRF9JRlJBTUUs
Ci0gICAgSURfSU5QVVQsCi0gICAgSURfU0VMRUNULAotICAgIElEX1RFWFRBUkVBLAotICAgIElE
X0xBQkVMLAotICAgIElEX0JVVFRPTiwKLSAgICBJRF9DT01NRU5ULAotICAgIElEX0xJLAotICAg
IElEX1hNUCwKLSAgICBJRF9NQVJRVUVFLAotICAgIDAKLX07Ci0KLXN0YXRpYyBjb25zdCB1c2hv
cnQgdGFnX2xpc3RfN1tdID0gewotICAgIElEX1RFWFQsCi0gICAgSURfT1BUR1JPVVAsCi0gICAg
SURfT1BUSU9OLAotICAgIElEX0NPTU1FTlQsCi0gICAgSURfU0NSSVBULAotICAgIDAKLX07Ci0K
LXN0YXRpYyBjb25zdCB1c2hvcnQgdGFnX2xpc3RfOVtdID0gewotICAgIElEX1RILAotICAgIElE
X1RELAotICAgIElEX0NPTU1FTlQsCi0gICAgMAotfTsKLQotc3RhdGljIGNvbnN0IHVzaG9ydCB0
YWdfbGlzdF8xMFtdID0gewotICAgIElEX0ZSQU1FU0VULAotICAgIElEX0ZSQU1FLAotICAgIElE
X0NPTU1FTlQsCi0gICAgMAotfTsKLQotc3RhdGljIGNvbnN0IHVzaG9ydCB0YWdfbGlzdF8xMVtd
ID0gewotICAgIElEX1RFWFQsCi0gICAgSURfU0NSSVBULAotICAgIElEX1NUWUxFLAotICAgIElE
X01FVEEsCi0gICAgSURfTElOSywKLSAgICBJRF9DT01NRU5ULAotICAgIDAKLX07Ci0KLWJvb2wg
Y2hlY2tfYXJyYXkodXNob3J0IGNoaWxkLCBjb25zdCB1c2hvcnQgKnRhZ0xpc3QpCi17Ci0gICAg
aW50IGkgPSAwOwotICAgIHdoaWxlKHRhZ0xpc3RbaV0gIT0gMCkKLSAgICB7Ci0gICAgICAgIGlm
KHRhZ0xpc3RbaV0gPT0gY2hpbGQpIHJldHVybiB0cnVlOwotICAgIGkrKzsKLSAgICB9Ci0gICAg
cmV0dXJuIGZhbHNlOwotfQotCi0KLWJvb2wgRE9NOjpjaGVja0NoaWxkKHVzaG9ydCB0YWdJRCwg
dXNob3J0IGNoaWxkSUQsIGJvb2wgc3RyaWN0KQotewotICAgIC8va2REZWJ1ZyggNjAzMCApIDw8
ICJjaGVja0NoaWxkOiAiIDw8IHRhZ0lEIDw8ICIvIiA8PCBjaGlsZElEIDw8IGVuZGw7Ci0KLSAg
ICAvLyAjIyMgYWxsb3cgY29tbWVudHMgaW5zaWRlIEFOWSBub2RlIHRoYXQgY2FuIGNvbnRhaW4g
Y2hpbGRyZW4KLQotICAgIC8vIFRyZWF0IGN1c3RvbSBlbGVtZW50cyB0aGUgc2FtZSBhcyA8c3Bh
bj4uCi0gICAgaWYgKHRhZ0lEID4gSURfTEFTVF9UQUcpCi0gICAgICAgIHRhZ0lEID0gSURfU1BB
TjsKLSAgICBpZiAoY2hpbGRJRCA+IElEX0xBU1RfVEFHKQotICAgICAgICBjaGlsZElEID0gSURf
U1BBTjsKLQotICAgIHN3aXRjaCh0YWdJRCkKLSAgICB7Ci0gICAgY2FzZSBJRF9UVDoKLSAgICBj
YXNlIElEX0k6Ci0gICAgY2FzZSBJRF9COgotICAgIGNhc2UgSURfVToKLSAgICBjYXNlIElEX1M6
Ci0gICAgY2FzZSBJRF9TVFJJS0U6Ci0gICAgY2FzZSBJRF9CSUc6Ci0gICAgY2FzZSBJRF9TTUFM
TDoKLSAgICBjYXNlIElEX0VNOgotICAgIGNhc2UgSURfU1RST05HOgotICAgIGNhc2UgSURfREZO
OgotICAgIGNhc2UgSURfQ09ERToKLSAgICBjYXNlIElEX1NBTVA6Ci0gICAgY2FzZSBJRF9LQkQ6
Ci0gICAgY2FzZSBJRF9WQVI6Ci0gICAgY2FzZSBJRF9DSVRFOgotICAgIGNhc2UgSURfQUJCUjoK
LSAgICBjYXNlIElEX0FDUk9OWU06Ci0gICAgY2FzZSBJRF9TVUI6Ci0gICAgY2FzZSBJRF9TVVA6
Ci0gICAgY2FzZSBJRF9CRE86Ci0gICAgY2FzZSBJRF9ROgotICAgIGNhc2UgSURfTEVHRU5EOgot
ICAgIGNhc2UgSURfRk9OVDoKLSAgICBjYXNlIElEX0E6Ci0gICAgY2FzZSBJRF9OT0JSOgotICAg
IGNhc2UgSURfV0JSOgotICAgICAgICByZXR1cm4gY2hlY2tfYXJyYXkoY2hpbGRJRCwgdGFnX2xp
c3RfMSk7Ci0gICAgY2FzZSBJRF9QOgotICAgICAgICAvLyBQOiAoIF8wIHwgVEFCTEUgKSAqCi0g
ICAgICAgIHJldHVybiBjaGVja19hcnJheShjaGlsZElELCB0YWdfbGlzdF8wKSB8fCAoIXN0cmlj
dCAmJiBjaGlsZElEID09IElEX1RBQkxFKTsKLSAgICBjYXNlIElEX0gxOgotICAgIGNhc2UgSURf
SDI6Ci0gICAgY2FzZSBJRF9IMzoKLSAgICBjYXNlIElEX0g0OgotICAgIGNhc2UgSURfSDU6Ci0g
ICAgY2FzZSBJRF9INjoKLSAgICAgICAgcmV0dXJuIGNoZWNrX2FycmF5KGNoaWxkSUQsIHRhZ19s
aXN0XzEpICYmIChjaGlsZElEIDwgSURfSDEgfHwgY2hpbGRJRCA+IElEX0g2KTsKLSAgICBjYXNl
IElEX0JBU0VGT05UOgotICAgIGNhc2UgSURfQlI6Ci0gICAgY2FzZSBJRF9BUkVBOgotICAgIGNh
c2UgSURfTElOSzoKLSAgICBjYXNlIElEX0NBTlZBUzoKLSAgICBjYXNlIElEX0lNRzoKLSAgICBj
YXNlIElEX1BBUkFNOgotICAgIGNhc2UgSURfSFI6Ci0gICAgY2FzZSBJRF9JTlBVVDoKLSAgICBj
YXNlIElEX0NPTDoKLSAgICBjYXNlIElEX0ZSQU1FOgotICAgIGNhc2UgSURfSVNJTkRFWDoKLSAg
ICBjYXNlIElEX0JBU0U6Ci0gICAgY2FzZSBJRF9NRVRBOgotICAgIGNhc2UgSURfQ09NTUVOVDoK
LSAgICAgICAgLy8gQkFTRUZPTlQ6IEVNUFRZCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBj
YXNlIElEX0JPRFk6Ci0gICAgICAgIC8vIEJPRFk6IF8xICogKyBfMgotICAgICAgICByZXR1cm4g
Y2hlY2tfYXJyYXkoY2hpbGRJRCwgdGFnX2xpc3RfMSkgfHwgY2hlY2tfYXJyYXkoY2hpbGRJRCwg
dGFnX2xpc3RfMik7Ci0gICAgY2FzZSBJRF9BRERSRVNTOgotICAgICAgICAvLyBBRERSRVNTOiAo
IF8wIHwgUCApICoKLSAgICAgICAgcmV0dXJuIGNoZWNrX2FycmF5KGNoaWxkSUQsIHRhZ19saXN0
XzApIHx8IGNoaWxkSUQgPT0gSURfUDsKLSAgICBjYXNlIElEX0xJOgotICAgIGNhc2UgSURfRFQ6
Ci0gICAgY2FzZSBJRF9ESVY6Ci0gICAgY2FzZSBJRF9TUEFOOgotICAgIGNhc2UgSURfTEFZRVI6
Ci0gICAgY2FzZSBJRF9DRU5URVI6Ci0gICAgY2FzZSBJRF9CTE9DS1FVT1RFOgotICAgIGNhc2Ug
SURfSU5TOgotICAgIGNhc2UgSURfREVMOgotICAgIGNhc2UgSURfREQ6Ci0gICAgY2FzZSBJRF9U
SDoKLSAgICBjYXNlIElEX1REOgotICAgIGNhc2UgSURfSUZSQU1FOgotICAgIGNhc2UgSURfTk9G
UkFNRVM6Ci0gICAgY2FzZSBJRF9OT1NDUklQVDoKLSAgICBjYXNlIElEX0NBUFRJT046Ci0gICAg
Y2FzZSBJRF9NQVJRVUVFOgotICAgIGNhc2UgSURfVUw6Ci0gICAgY2FzZSBJRF9PTDoKLSAgICBj
YXNlIElEX0RJUjoKLSAgICBjYXNlIElEX01FTlU6Ci0gICAgICAgIC8vIERJVjogXzEgKgotICAg
ICAgICByZXR1cm4gY2hlY2tfYXJyYXkoY2hpbGRJRCwgdGFnX2xpc3RfMSk7Ci0gICAgY2FzZSBJ
RF9NQVA6Ci0JLy8gV2UgYWNjZXB0IFNDUklQVCBpbiBjbGllbnQtc2lkZSBpbWFnZSBtYXBzIGFz
IGFuIGV4dGVuc2lvbiB0byB0aGUgRFRELgotICAgICAgICAvLyBNQVA6ICggXzMgKyB8IEFSRUEg
KyB8IFNDUklQVCArICkKLSAgICAgICAgcmV0dXJuIGNoZWNrX2FycmF5KGNoaWxkSUQsIHRhZ19s
aXN0XzMpIHx8Ci0JICAgIGNoaWxkSUQgPT0gSURfQVJFQSB8fAotCSAgICBjaGlsZElEID09IElE
X1NDUklQVDsKLSAgICBjYXNlIElEX09CSkVDVDoKLSAgICBjYXNlIElEX0VNQkVEOgotICAgIGNh
c2UgSURfQVBQTEVUOgotICAgICAgICAvLyBPQkpFQ1Q6IF80ICoKLSAgICAgICAgcmV0dXJuIGNo
ZWNrX2FycmF5KGNoaWxkSUQsIHRhZ19saXN0XzQpOwotICAgIGNhc2UgSURfUFJFOgotICAgIGNh
c2UgSURfWE1QOgotICAgIGNhc2UgSURfUExBSU5URVhUOgotICAgICAgICAvLyBQUkU6IF8wICog
LSBfNQotICAgICAgICByZXR1cm4gY2hlY2tfYXJyYXkoY2hpbGRJRCwgdGFnX2xpc3RfMSk7Ci0g
ICAgY2FzZSBJRF9ETDoKLSAgICAgICAgLy8gREw6IF82ICsKLSAgICAgICAgcmV0dXJuIGNoZWNr
X2FycmF5KGNoaWxkSUQsIHRhZ19saXN0XzEpOwotICAgIGNhc2UgSURfRk9STToKLSAgICAgICAg
Ly8gRk9STTogXzEgKiAtIEZPUk0KLSAgICAgICAgcmV0dXJuIGNoZWNrX2FycmF5KGNoaWxkSUQs
IHRhZ19saXN0XzEpOwotICAgIGNhc2UgSURfTEFCRUw6Ci0gICAgICAgIC8vIExBQkVMOiBfMSAq
IC0gTEFCRUwKLSAgICAgICAgcmV0dXJuIGNoZWNrX2FycmF5KGNoaWxkSUQsIHRhZ19saXN0XzEp
OwotICAgICAgICAvLyBLRVlHRU4gZG9lcyBub3QgcmVhbGx5IGFsbG93IGFueSBjaGlsZHMKLSAg
ICAgICAgLy8gZnJvbSBvdXRzaWRlLCBqdXN0IG5lZWQgdGhpcyB0byBiZSBhYmxlCi0gICAgICAg
IC8vIHRvIGFkZCB0aGUga2V5bGVuZ3RocyBvdXJzZWxmCi0gICAgICAgIC8vIFllcywgY29uc2lk
ZXIgaXQgYSBoYWNrIChEaXJrKQotICAgIGNhc2UgSURfS0VZR0VOOgotICAgIGNhc2UgSURfU0VM
RUNUOgotICAgICAgICAvLyBTRUxFQ1Q6IF83ICsKLSAgICAgICAgcmV0dXJuIGNoZWNrX2FycmF5
KGNoaWxkSUQsIHRhZ19saXN0XzcpOwotICAgIGNhc2UgSURfT1BUR1JPVVA6Ci0gICAgICAgIC8v
IE9QVEdST1VQOiBPUFRJT04gKwotICAgICAgICBpZihjaGlsZElEID09IElEX09QVElPTikgcmV0
dXJuIHRydWU7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBjYXNlIElEX09QVElPTjoKLSAg
ICBjYXNlIElEX1RFWFRBUkVBOgotICAgIGNhc2UgSURfVElUTEU6Ci0gICAgY2FzZSBJRF9TVFlM
RToKLSAgICBjYXNlIElEX1NDUklQVDoKLSAgICAgICAgLy8gT1BUSU9OOiBURVhUCi0gICAgICAg
IGlmKGNoaWxkSUQgPT0gSURfVEVYVCkgcmV0dXJuIHRydWU7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBjYXNlIElEX0ZJRUxEU0VUOgotICAgICAgICAvLyBGSUVMRFNFVDogKCBURVhUICwg
TEVHRU5EICwgXzEgKiApCi0gICAgICAgIGlmKGNoaWxkSUQgPT0gSURfVEVYVCkgcmV0dXJuIHRy
dWU7Ci0gICAgICAgIGlmKGNoaWxkSUQgPT0gSURfTEVHRU5EKSByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgcmV0dXJuIGNoZWNrX2FycmF5KGNoaWxkSUQsIHRhZ19saXN0XzEpOwotICAgIGNhc2UgSURf
QlVUVE9OOgotICAgICAgICAvLyBCVVRUT046IF8xICogLSBfOAotICAgICAgICByZXR1cm4gY2hl
Y2tfYXJyYXkoY2hpbGRJRCwgdGFnX2xpc3RfMSk7Ci0gICAgY2FzZSBJRF9UQUJMRToKLSAgICAg
ICAgLy8gVEFCTEU6ICggQ0FQVElPTiA/ICwgKCBDT0wgKiB8IENPTEdST1VQICogKSAsIFRIRUFE
ID8gLCBURk9PVCA/ICwgVEJPRFkgKyApCi0gICAgICAgIHN3aXRjaChjaGlsZElEKQotICAgICAg
ICB7Ci0gICAgICAgIGNhc2UgSURfQ0FQVElPTjoKLSAgICAgICAgY2FzZSBJRF9DT0w6Ci0gICAg
ICAgIGNhc2UgSURfQ09MR1JPVVA6Ci0gICAgICAgIGNhc2UgSURfVEhFQUQ6Ci0gICAgICAgIGNh
c2UgSURfVEZPT1Q6Ci0gICAgICAgIGNhc2UgSURfVEJPRFk6Ci0gICAgICAgIGNhc2UgSURfVEVY
VDoKLSAgICAgICAgY2FzZSBJRF9GT1JNOgotICAgICAgICBjYXNlIElEX0NPTU1FTlQ6Ci0gICAg
ICAgIGNhc2UgSURfU0NSSVBUOgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICBjYXNlIElE
X1RIRUFEOgotICAgIGNhc2UgSURfVEZPT1Q6Ci0gICAgY2FzZSBJRF9UQk9EWToKLSAgICAgICAg
Ly8gVEhFQUQ6IFRSICsKLSAgICAgICAgaWYoY2hpbGRJRCA9PSBJRF9GT1JNIHx8IGNoaWxkSUQg
PT0gSURfVFIgfHwgY2hpbGRJRCA9PSBJRF9DT01NRU5UIHx8Ci0gICAgICAgICAgIGNoaWxkSUQg
PT0gSURfU0NSSVBUKSAKLSAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBjYXNlIElEX0NPTEdST1VQOgotICAgICAgICAvLyBDT0xHUk9VUDogQ09MICoK
LSAgICAgICAgaWYoY2hpbGRJRCA9PSBJRF9DT0wgfHwgY2hpbGRJRCA9PSBJRF9DT01NRU5UKSBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGNhc2UgSURfVFI6Ci0gICAg
ICAgIC8vIFRSOiBfOSArCi0gICAgICAgIGlmIChjaGlsZElEID09IElEX1NDUklQVCB8fCBjaGls
ZElEID09IElEX0ZPUk0pCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgcmV0dXJu
IGNoZWNrX2FycmF5KGNoaWxkSUQsIHRhZ19saXN0XzkpOwotICAgIGNhc2UgSURfRlJBTUVTRVQ6
Ci0gICAgICAgIC8vIEZSQU1FU0VUOiAoIF8xMCArICYgTk9GUkFNRVMgPyApCi0gICAgICAgIHJl
dHVybiBjaGVja19hcnJheShjaGlsZElELCB0YWdfbGlzdF8xMCk7Ci0gICAgICAgIHJldHVybiAo
Y2hpbGRJRCA9PSBJRF9OT0ZSQU1FUyk7Ci0gICAgY2FzZSBJRF9IRUFEOgotICAgICAgICAvLyBI
RUFEOiAoIFRJVExFICYgSVNJTkRFWCA/ICYgQkFTRSA/ICkgKyBfMTEKLSAgICAgICAgaWYoY2hp
bGRJRCA9PSBJRF9USVRMRSB8fCBjaGlsZElEID09IElEX0lTSU5ERVggfHwgY2hpbGRJRCA9PSBJ
RF9CQVNFKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIHJldHVybiBjaGVja19h
cnJheShjaGlsZElELCB0YWdfbGlzdF8xMSk7Ci0gICAgY2FzZSBJRF9IVE1MOgotICAgICAgICAv
LyBIVE1MOiAoIEhFQUQgLCBDT01NRU5ULCAoIEJPRFkgfCAoIEZSQU1FU0VUICYgTk9GUkFNRVMg
PyApICkgKQotICAgICAgICBzd2l0Y2goY2hpbGRJRCkKLSAgICAgICAgewotICAgICAgICBjYXNl
IElEX0hFQUQ6Ci0gICAgICAgIGNhc2UgSURfQ09NTUVOVDoKLSAgICAgICAgY2FzZSBJRF9CT0RZ
OgotICAgICAgICBjYXNlIElEX0ZSQU1FU0VUOgotICAgICAgICBjYXNlIElEX05PRlJBTUVTOgot
ICAgICAgICBjYXNlIElEX1NDUklQVDoKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgZGVm
YXVsdDoKLSAgICAgICAga2REZWJ1ZyggNjAzMCApIDw8ICJ1bmhhbmRsZWQgdGFnIGluIGR0ZC5j
cHA6Y2hlY2tDaGlsZCgpOiB0YWdJRD0iIDw8IHRhZ0lEIDw8ICIhIiA8PCBlbmRsOwotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi12b2lkIERPTTo6YWRkRm9yYmlkZGVuKGludCB0
YWdJZCwgdXNob3J0ICpmb3JiaWRkZW5UYWdzKQotewotICAgIHN3aXRjaCh0YWdJZCkKLSAgICB7
Ci0gICAgY2FzZSBJRF9MQUJFTDoKLSAgICAgICAgZm9yYmlkZGVuVGFnc1tJRF9MQUJFTF0rKzsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9CVVRUT046Ci0gICAgICAgIGZvcmJpZGRlblRh
Z3NbSURfQV0rKzsKLSAgICAgICAgZm9yYmlkZGVuVGFnc1tJRF9JTlBVVF0rKzsKLSAgICAgICAg
Zm9yYmlkZGVuVGFnc1tJRF9TRUxFQ1RdKys7Ci0gICAgICAgIGZvcmJpZGRlblRhZ3NbSURfVEVY
VEFSRUFdKys7Ci0gICAgICAgIGZvcmJpZGRlblRhZ3NbSURfTEFCRUxdKys7Ci0gICAgICAgIGZv
cmJpZGRlblRhZ3NbSURfQlVUVE9OXSsrOwotICAgICAgICBmb3JiaWRkZW5UYWdzW0lEX0ZPUk1d
Kys7Ci0gICAgICAgIGZvcmJpZGRlblRhZ3NbSURfSVNJTkRFWF0rKzsKLSAgICAgICAgZm9yYmlk
ZGVuVGFnc1tJRF9GSUVMRFNFVF0rKzsKLSAgICAgICAgZm9yYmlkZGVuVGFnc1tJRF9JRlJBTUVd
Kys7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LX0KLQotdm9pZCBET006OnJlbW92ZUZvcmJpZGRlbihpbnQgdGFnSWQsIHVzaG9ydCAqZm9yYmlk
ZGVuVGFncykKLXsKLSAgICBzd2l0Y2godGFnSWQpCi0gICAgewotICAgIGNhc2UgSURfTEFCRUw6
Ci0gICAgICAgIGZvcmJpZGRlblRhZ3NbSURfTEFCRUxdLS07Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgSURfQlVUVE9OOgotICAgICAgICBmb3JiaWRkZW5UYWdzW0lEX0FdLS07Ci0gICAgICAg
IGZvcmJpZGRlblRhZ3NbSURfSU5QVVRdLS07Ci0gICAgICAgIGZvcmJpZGRlblRhZ3NbSURfU0VM
RUNUXS0tOwotICAgICAgICBmb3JiaWRkZW5UYWdzW0lEX1RFWFRBUkVBXS0tOwotICAgICAgICBm
b3JiaWRkZW5UYWdzW0lEX0xBQkVMXS0tOwotICAgICAgICBmb3JiaWRkZW5UYWdzW0lEX0JVVFRP
Tl0tLTsKLSAgICAgICAgZm9yYmlkZGVuVGFnc1tJRF9GT1JNXS0tOwotICAgICAgICBmb3JiaWRk
ZW5UYWdzW0lEX0lTSU5ERVhdLS07Ci0gICAgICAgIGZvcmJpZGRlblRhZ3NbSURfRklFTERTRVRd
LS07Ci0gICAgICAgIGZvcmJpZGRlblRhZ3NbSURfSUZSQU1FXS0tOwotICAgICAgICBicmVhazsK
LSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLQotI2lmIDAKLQotCi1z
dHJ1Y3QgYXR0cl9wcml2IHsKLSAgICBhdHRyX3ByaXYoKSB7IGlkID0gbGVuID0gMCwgdmFsID0g
MDsgfQotICAgIGF0dHJfcHJpdih1c2hvcnQgaSwgY29uc3QgUUNoYXIgKnYsIHVzaG9ydCBsKQot
ICAgIHsgaWQgPWk7IGxlbiA9IGwsIHZhbCA9IHY7IH0KLSAgICB1c2hvcnQgaWQ7Ci0gICAgY29u
c3QgUUNoYXIgKnZhbDsKLSAgICB1c2hvcnQgbGVuOwotfTsKLQotRE9NU3RyaW5nIGZpbmRfYXR0
cih1c2hvcnQgaWQsIGNvbnN0IGF0dHJfcHJpdiAqYXR0cnMpCi17Ci0gICAgaW50IGkgPSAwOwot
ICAgIHdoaWxlKGF0dHJzW2ldLmlkICE9IDApCi0gICAgewotICAgICAgICBpZihhdHRyc1tpXS5p
ZCA9PSBpZCkKLSAgICAgICAgICAgIHJldHVybiBET01TdHJpbmcoYXR0cnNbaV0udmFsLCBhdHRy
c1tpXS5sZW4pOwotICAgICAgICBpKys7Ci0gICAgfQotICAgIHJldHVybiBET01TdHJpbmcoKTsK
LX0KLQotc3RhdGljIGNvbnN0IFFDaGFyIHZhbHVlXzFfMCBbXSA9IHsgJ04nLCdPJywnTicsJ0Un
IH07Ci0KLWF0dHJfcHJpdiBhdHRyX2xpc3RfMVtdID0gewotICAgIGF0dHJfcHJpdihBVFRSX0NM
RUFSLCB2YWx1ZV8xXzAsIDQpCi19OwotCi1zdGF0aWMgY29uc3QgUUNoYXIgdmFsdWVfMl8wIFtd
ID0geyAnUicsJ0UnLCdDJywnVCcgfTsKLQotYXR0cl9wcml2IGF0dHJfbGlzdF8yW10gPSB7Ci0g
ICAgYXR0cl9wcml2KEFUVFJfU0hBUEUsIHZhbHVlXzJfMCwgNCkKLX07Ci0KLXN0YXRpYyBjb25z
dCBRQ2hhciB2YWx1ZV8zXzAgW10gPSB7ICdSJywnRScsJ0MnLCdUJyB9OwotCi1hdHRyX3ByaXYg
YXR0cl9saXN0XzNbXSA9IHsKLSAgICBhdHRyX3ByaXYoQVRUUl9TSEFQRSwgdmFsdWVfM18wLCA0
KQotfTsKLQotc3RhdGljIGNvbnN0IFFDaGFyIHZhbHVlXzRfMCBbXSA9IHsgJ0QnLCdBJywnVCcs
J0EnIH07Ci0KLWF0dHJfcHJpdiBhdHRyX2xpc3RfNFtdID0gewotICAgIGF0dHJfcHJpdihBVFRS
X1ZBTFVFVFlQRSwgdmFsdWVfNF8wLCA0KQotfTsKLQotc3RhdGljIGNvbnN0IFFDaGFyIHZhbHVl
XzVfMCBbXSA9IHsgJ0cnLCdFJywnVCcgfTsKLXN0YXRpYyBjb25zdCBRQ2hhciB2YWx1ZV81XzEg
W10gPSB7ICdBJywnUCcsJ1AnLCdMJywnSScsJ0MnLCdBJywnVCcsJ0knLCdPJywnTicsJy8nLCdY
JywnLScsJ1cnLCdXJywnVycsJy0nLCdGJywnTycsJ1InLCdNJywnLScsJ1UnLCdSJywnTCcsJ0Un
LCdOJywnQycsJ08nLCdEJywnRScsJ0QnIH07Ci0KLWF0dHJfcHJpdiBhdHRyX2xpc3RfNVtdID0g
ewotICAgIGF0dHJfcHJpdihBVFRSX01FVEhPRCwgdmFsdWVfNV8wLCAzKSwKLSAgICBhdHRyX3By
aXYoQVRUUl9FTkNUWVBFLCB2YWx1ZV81XzEsIDMzKQotfTsKLQotc3RhdGljIGNvbnN0IFFDaGFy
IHZhbHVlXzZfMCBbXSA9IHsgJ1QnLCdFJywnWCcsJ1QnIH07Ci0KLWF0dHJfcHJpdiBhdHRyX2xp
c3RfNltdID0gewotICAgIGF0dHJfcHJpdihBVFRSX1RZUEUsIHZhbHVlXzZfMCwgNCkKLX07Ci0K
LXN0YXRpYyBjb25zdCBRQ2hhciB2YWx1ZV83XzAgW10gPSB7ICdTJywnVScsJ0InLCdNJywnSScs
J1QnIH07Ci0KLWF0dHJfcHJpdiBhdHRyX2xpc3RfN1tdID0gewotICAgIGF0dHJfcHJpdihBVFRS
X1RZUEUsIHZhbHVlXzdfMCwgNikKLX07Ci0KLXN0YXRpYyBjb25zdCBRQ2hhciB2YWx1ZV84XzAg
W10gPSB7ICcxJyB9OwotCi1hdHRyX3ByaXYgYXR0cl9saXN0XzhbXSA9IHsKLSAgICBhdHRyX3By
aXYoQVRUUl9TUEFOLCB2YWx1ZV84XzAsIDEpCi19OwotCi1zdGF0aWMgY29uc3QgUUNoYXIgdmFs
dWVfOV8wIFtdID0geyAnMScgfTsKLQotYXR0cl9wcml2IGF0dHJfbGlzdF85W10gPSB7Ci0gICAg
YXR0cl9wcml2KEFUVFJfU1BBTiwgdmFsdWVfOV8wLCAxKQotfTsKLQotc3RhdGljIGNvbnN0IFFD
aGFyIHZhbHVlXzEwXzAgW10gPSB7ICcxJyB9Owotc3RhdGljIGNvbnN0IFFDaGFyIHZhbHVlXzEw
XzEgW10gPSB7ICcxJyB9OwotCi1hdHRyX3ByaXYgYXR0cl9saXN0XzEwW10gPSB7Ci0gICAgYXR0
cl9wcml2KEFUVFJfUk9XU1BBTiwgdmFsdWVfMTBfMCwgMSksCi0gICAgYXR0cl9wcml2KEFUVFJf
Q09MU1BBTiwgdmFsdWVfMTBfMSwgMSkKLX07Ci0KLXN0YXRpYyBjb25zdCBRQ2hhciB2YWx1ZV8x
MV8wIFtdID0geyAnMScgfTsKLXN0YXRpYyBjb25zdCBRQ2hhciB2YWx1ZV8xMV8xIFtdID0geyAn
QScsJ1UnLCdUJywnTycgfTsKLQotYXR0cl9wcml2IGF0dHJfbGlzdF8xMVtdID0gewotICAgIGF0
dHJfcHJpdihBVFRSX0ZSQU1FQk9SREVSLCB2YWx1ZV8xMV8wLCAxKSwKLSAgICBhdHRyX3ByaXYo
QVRUUl9TQ1JPTExJTkcsIHZhbHVlXzExXzEsIDQpCi19OwotCi1zdGF0aWMgY29uc3QgUUNoYXIg
dmFsdWVfMTJfMCBbXSA9IHsgJzEnIH07Ci1zdGF0aWMgY29uc3QgUUNoYXIgdmFsdWVfMTJfMSBb
XSA9IHsgJ0EnLCdVJywnVCcsJ08nIH07Ci0KLWF0dHJfcHJpdiBhdHRyX2xpc3RfMTJbXSA9IHsK
LSAgICBhdHRyX3ByaXYoQVRUUl9GUkFNRUJPUkRFUiwgdmFsdWVfMTJfMCwgMSksCi0gICAgYXR0
cl9wcml2KEFUVFJfU0NST0xMSU5HLCB2YWx1ZV8xMl8xLCA0KQotfTsKLQotc3RhdGljIGNvbnN0
IFFDaGFyIHZhbHVlXzEzXzAgW10gPSB7ICctJywnLycsJy8nLCdXJywnMycsJ0MnLCcvJywnLycs
J0QnLCdUJywnRCcgfTsKLXN0YXRpYyBjb25zdCBRQ2hhciB2YWx1ZV8xM18xIFtdID0geyAnVCcs
J1InLCdBJywnTicsJ1MnLCdJJywnVCcsJ0knLCdPJywnTicsJ0EnLCdMJywnLycsJy8nLCdFJywn
TicgfTsKLQotYXR0cl9wcml2IGF0dHJfbGlzdF8xM1tdID0gewotICAgIGF0dHJfcHJpdihBVFRS
X1ZFUlNJT04sIHZhbHVlXzEzXzAsIDExKSwKLSAgICBhdHRyX3ByaXYoQVRUUl9IVE1MLCB2YWx1
ZV8xM18xLCAxNikKLX07Ci0KLURPTVN0cmluZyBET006OmZpbmREZWZBdHRyTm9uZSh1c2hvcnQp
Ci17Ci0gICAgcmV0dXJuIERPTVN0cmluZygpOwotfTsKLURPTVN0cmluZyBET006OmZpbmREZWZB
dHRyQlIodXNob3J0IGlkKQotewotICAgIHJldHVybiBmaW5kX2F0dHIoaWQsIGF0dHJfbGlzdF8x
KTsKLX0KLURPTVN0cmluZyBET006OmZpbmREZWZBdHRyQSh1c2hvcnQgaWQpCi17Ci0gICAgcmV0
dXJuIGZpbmRfYXR0cihpZCwgYXR0cl9saXN0XzIpOwotfQotRE9NU3RyaW5nIERPTTo6ZmluZERl
ZkF0dHJBUkVBKHVzaG9ydCBpZCkKLXsKLSAgICByZXR1cm4gZmluZF9hdHRyKGlkLCBhdHRyX2xp
c3RfMyk7Ci19Ci1ET01TdHJpbmcgRE9NOjpmaW5kRGVmQXR0clBBUkFNKHVzaG9ydCBpZCkKLXsK
LSAgICByZXR1cm4gZmluZF9hdHRyKGlkLCBhdHRyX2xpc3RfNCk7Ci19Ci1ET01TdHJpbmcgRE9N
OjpmaW5kRGVmQXR0ckZPUk0odXNob3J0IGlkKQotewotICAgIHJldHVybiBmaW5kX2F0dHIoaWQs
IGF0dHJfbGlzdF81KTsKLX0KLURPTVN0cmluZyBET006OmZpbmREZWZBdHRySU5QVVQodXNob3J0
IGlkKQotewotICAgIHJldHVybiBmaW5kX2F0dHIoaWQsIGF0dHJfbGlzdF82KTsKLX0KLURPTVN0
cmluZyBET006OmZpbmREZWZBdHRyQlVUVE9OKHVzaG9ydCBpZCkKLXsKLSAgICByZXR1cm4gZmlu
ZF9hdHRyKGlkLCBhdHRyX2xpc3RfNyk7Ci19Ci1ET01TdHJpbmcgRE9NOjpmaW5kRGVmQXR0ckNP
TEdST1VQKHVzaG9ydCBpZCkKLXsKLSAgICByZXR1cm4gZmluZF9hdHRyKGlkLCBhdHRyX2xpc3Rf
OCk7Ci19Ci1ET01TdHJpbmcgRE9NOjpmaW5kRGVmQXR0ckNPTCh1c2hvcnQgaWQpCi17Ci0gICAg
cmV0dXJuIGZpbmRfYXR0cihpZCwgYXR0cl9saXN0XzkpOwotfQotRE9NU3RyaW5nIERPTTo6Zmlu
ZERlZkF0dHJUSCh1c2hvcnQgaWQpCi17Ci0gICAgcmV0dXJuIGZpbmRfYXR0cihpZCwgYXR0cl9s
aXN0XzEwKTsKLX0KLURPTVN0cmluZyBET006OmZpbmREZWZBdHRyRlJBTUUodXNob3J0IGlkKQot
ewotICAgIHJldHVybiBmaW5kX2F0dHIoaWQsIGF0dHJfbGlzdF8xMSk7Ci19Ci1ET01TdHJpbmcg
RE9NOjpmaW5kRGVmQXR0cklGUkFNRSh1c2hvcnQgaWQpCi17Ci0gICAgcmV0dXJuIGZpbmRfYXR0
cihpZCwgYXR0cl9saXN0XzEyKTsKLX0KLURPTVN0cmluZyBET006OmZpbmREZWZBdHRySFRNTCh1
c2hvcnQgaWQpCi17Ci0gICAgcmV0dXJuIGZpbmRfYXR0cihpZCwgYXR0cl9saXN0XzEzKTsKLX0K
LQotI2VuZGlmCkluZGV4OiBraHRtbC9odG1sL2R0ZC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IGto
dG1sL2h0bWwvZHRkLmgKZGlmZiAtTiBraHRtbC9odG1sL2R0ZC5oCi0tLSBraHRtbC9odG1sL2R0
ZC5oCTEyIEFwciAyMDA1IDIyOjQ5OjQxIC0wMDAwCTEuNQorKysgL2Rldi9udWxsCTEgSmFuIDE5
NzAgMDA6MDA6MDAgLTAwMDAKQEAgLTEsNTggKzAsMCBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBw
YXJ0IG9mIHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4KLSAqCi0gKiAoQykgMTk5OSBM
YXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKLSAqIEJvc3RvbiwgTUEgMDIx
MTEtMTMwNywgVVNBLgotICoKLSAqLwotI2lmbmRlZiBfRE9NX2R0ZF9oXwotI2RlZmluZSBfRE9N
X2R0ZF9oXwotCi0jaW5jbHVkZSAiZG9tL2RvbV9zdHJpbmcuaCIKLSNpbmNsdWRlICJtaXNjL2h0
bWx0YWdzLmgiCi0KLW5hbWVzcGFjZSBET00KLXsKLQotdm9pZCBhZGRGb3JiaWRkZW4oaW50IHRh
Z0lkLCB1c2hvcnQgKmZvcmJpZGRlblRhZ3MpOwotdm9pZCByZW1vdmVGb3JiaWRkZW4oaW50IHRh
Z0lkLCB1c2hvcnQgKmZvcmJpZGRlblRhZ3MpOwotCi1lbnVtIHRhZ1N0YXR1cyB7IE9QVElPTkFM
LCBSRVFVSVJFRCwgRk9SQklEREVOIH07Ci0KLWJvb2wgY2hlY2tDaGlsZCh1c2hvcnQgdGFnSUQs
IHVzaG9ydCBjaGlsZElELCBib29sIHN0cmljdCk7Ci0KLWV4dGVybiBjb25zdCB1bnNpZ25lZCBz
aG9ydCB0YWdQcmlvcml0eUFycmF5W107Ci1leHRlcm4gY29uc3QgdGFnU3RhdHVzIGVuZFRhZ0Fy
cmF5W107Ci0KLWlubGluZSB1bnNpZ25lZCBzaG9ydCB0YWdQcmlvcml0eShRX1VJTlQzMiB0YWdJ
ZCkKLXsKLSAgICAvLyBUcmVhdCBjdXN0b20gZWxlbWVudHMgdGhlIHNhbWUgYXMgPHNwYW4+OyBh
bHNvIGRvbid0IHJlYWQgcGFzdCB0aGUgZW5kIG9mIHRoZSBhcnJheS4KLSAgICBpZiAodGFnSWQg
PiBJRF9MQVNUX1RBRykKLSAgICAgICAgcmV0dXJuIHRhZ1ByaW9yaXR5QXJyYXlbSURfU1BBTl07
Ci0gICAgcmV0dXJuIHRhZ1ByaW9yaXR5QXJyYXlbdGFnSWRdOwotfQotCi1pbmxpbmUgdGFnU3Rh
dHVzIGVuZFRhZ1JlcXVpcmVtZW50KFFfVUlOVDMyIHRhZ0lkKQotewotICAgIC8vIFRyZWF0IGN1
c3RvbSBlbGVtZW50cyB0aGUgc2FtZSBhcyA8c3Bhbj47IGFsc28gZG9uJ3QgcmVhZCBwYXN0IHRo
ZSBlbmQgb2YgdGhlIGFycmF5LgotICAgIGlmICh0YWdJZCA+IElEX0xBU1RfVEFHKQotICAgICAg
ICByZXR1cm4gZW5kVGFnQXJyYXlbSURfU1BBTl07Ci0gICAgcmV0dXJuIGVuZFRhZ0FycmF5W3Rh
Z0lkXTsKLX0KLQotfSAvL25hbWVzcGFjZSBET00KLSNlbmRpZgpJbmRleDoga2h0bWwvaHRtbC9o
dG1sX2Jhc2VpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9r
aHRtbC9odG1sL2h0bWxfYmFzZWltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjcyCmRp
ZmYgLXUgLXAgLXIxLjcyIGtodG1sL2h0bWwvaHRtbF9iYXNlaW1wbC5jcHAKLS0tIGtodG1sL2h0
bWwvaHRtbF9iYXNlaW1wbC5jcHAJMTIgTWF5IDIwMDUgMTc6MTE6MjEgLTAwMDAJMS43MgorKysg
a2h0bWwvaHRtbC9odG1sX2Jhc2VpbXBsLmNwcAk3IEp1bCAyMDA1IDA1OjU4OjU1IC0wMDAwCkBA
IC00OCw3ICs0OCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBET007CiB1c2luZyBuYW1lc3BhY2Uga2h0
bWw7CiAKIEhUTUxCb2R5RWxlbWVudEltcGw6OkhUTUxCb2R5RWxlbWVudEltcGwoRG9jdW1lbnRQ
dHIgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50SW1wbChkb2MpLCBtX2xpbmtEZWNsKDApCisgICAg
OiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjpib2R5KCksIGRvYyksIG1fbGlua0RlY2woMCkK
IHsKIH0KIApAQCAtNjEsMTEgKzYxLDYgQEAgSFRNTEJvZHlFbGVtZW50SW1wbDo6fkhUTUxCb2R5
RWxlbWVudEltcAogICAgIH0KIH0KIAotTm9kZUltcGw6OklkIEhUTUxCb2R5RWxlbWVudEltcGw6
OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfQk9EWTsKLX0KLQogdm9pZCBIVE1MQm9keUVs
ZW1lbnRJbXBsOjpjcmVhdGVMaW5rRGVjbCgpCiB7CiAgICAgbV9saW5rRGVjbCA9IG5ldyBDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbkltcGw7CkBAIC0yODksNyArMjg0LDE4IEBAIHZvaWQgSFRN
TEJvZHlFbGVtZW50SW1wbDo6c2V0VkxpbmsoY29uc3QKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAog
SFRNTEZyYW1lRWxlbWVudEltcGw6OkhUTUxGcmFtZUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpk
b2MpCi0gICAgOiBIVE1MRWxlbWVudEltcGwoZG9jKQorICAgIDogSFRNTEVsZW1lbnRJbXBsKEhU
TUxOYW1lczo6ZnJhbWUoKSwgZG9jKQoreworICAgIGluaXQoKTsKK30KKworSFRNTEZyYW1lRWxl
bWVudEltcGw6OkhUTUxGcmFtZUVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05h
bWUsIERvY3VtZW50UHRyICpkb2MpCisgICAgOiBIVE1MRWxlbWVudEltcGwodGFnTmFtZSwgZG9j
KQoreworICAgIGluaXQoKTsKK30KKwordm9pZCBIVE1MRnJhbWVFbGVtZW50SW1wbDo6aW5pdCgp
CiB7CiAgICAgbV9mcmFtZUJvcmRlciA9IHRydWU7CiAgICAgbV9mcmFtZUJvcmRlclNldCA9IGZh
bHNlOwpAQCAtMzAzLDExICszMDksNiBAQCBIVE1MRnJhbWVFbGVtZW50SW1wbDo6fkhUTUxGcmFt
ZUVsZW1lbnRJCiB7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MRnJhbWVFbGVtZW50SW1wbDo6aWQo
KSBjb25zdAotewotICAgIHJldHVybiBJRF9GUkFNRTsKLX0KLQogYm9vbCBIVE1MRnJhbWVFbGVt
ZW50SW1wbDo6aXNVUkxBbGxvd2VkKGNvbnN0IEF0b21pY1N0cmluZyAmVVJMU3RyaW5nKSBjb25z
dAogewogICAgIGlmIChVUkxTdHJpbmcuaXNFbXB0eSgpKSB7CkBAIC00ODIsNyArNDgzLDcgQEAg
dm9pZCBIVE1MRnJhbWVFbGVtZW50SW1wbDo6YXR0YWNoKCkKIAogICAgIC8vIGluaGVyaXQgZGVm
YXVsdCBzZXR0aW5ncyBmcm9tIHBhcmVudCBmcmFtZXNldAogICAgIGZvciAoTm9kZUltcGwgKm5v
ZGUgPSBwYXJlbnROb2RlKCk7IG5vZGU7IG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCkpCi0gICAg
ICAgIGlmIChub2RlLT5pZCgpID09IElEX0ZSQU1FU0VUKSB7CisgICAgICAgIGlmIChub2RlLT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6ZnJhbWVzZXQoKSkpIHsKICAgICAgICAgICAgIEhUTUxGcmFt
ZVNldEVsZW1lbnRJbXBsKiBmcmFtZXNldCA9IHN0YXRpY19jYXN0PEhUTUxGcmFtZVNldEVsZW1l
bnRJbXBsKj4obm9kZSk7CiAgICAgICAgICAgICBpZiAoIW1fZnJhbWVCb3JkZXJTZXQpCiAgICAg
ICAgICAgICAgICAgbV9mcmFtZUJvcmRlciA9IGZyYW1lc2V0LT5mcmFtZUJvcmRlcigpOwpAQCAt
NjYxLDcgKzY2Miw3IEBAIHZvaWQgSFRNTEZyYW1lRWxlbWVudEltcGw6OnNldFNyYyhjb25zdCAK
IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogSFRNTEZyYW1lU2V0RWxlbWVudEltcGw6OkhUTUxGcmFt
ZVNldEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0gICAgOiBIVE1MRWxlbWVudEltcGwo
ZG9jKQorICAgIDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6ZnJhbWVzZXQoKSwgZG9jKQog
ewogICAgIC8vIGRlZmF1bHQgdmFsdWUgZm9yIHJvd3MgYW5kIGNvbHMuLi4KICAgICBtX3RvdGFs
Um93cyA9IDE7CkBAIC02ODUsOSArNjg2LDExIEBAIEhUTUxGcmFtZVNldEVsZW1lbnRJbXBsOjp+
SFRNTEZyYW1lU2V0RWwKICAgICAgICAgZGVsZXRlIFtdIG1fY29sczsKIH0KIAotTm9kZUltcGw6
OklkIEhUTUxGcmFtZVNldEVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Citib29sIEhUTUxGcmFtZVNl
dEVsZW1lbnRJbXBsOjpjaGVja0RURChjb25zdCBOb2RlSW1wbCogbmV3Q2hpbGQpCiB7Ci0gICAg
cmV0dXJuIElEX0ZSQU1FU0VUOworCS8vIEZJWE1FOiBPbGQgY29kZSBoYWQgYWRqYWNlbnQgZG91
YmxlIHJldHVybnMgYW5kIHNlZW1lZCB0byB3YW50IHRvIGRvIHNvbWV0aGluZyB3aXRoIE5PRlJB
TUVTIChidXQgZGlkbid0KS4KKwkvLyBXaGF0IGlzIHRoZSBjb3JyZWN0IGJlaGF2aW9yPworCXJl
dHVybiBuZXdDaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZyYW1lc2V0KCkpIHx8IG5ld0No
aWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZnJhbWUoKSk7CiB9CiAKIHZvaWQgSFRNTEZyYW1l
U2V0RWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwg
KmF0dHIpCkBAIC03NTIsOCArNzU1LDcgQEAgdm9pZCBIVE1MRnJhbWVTZXRFbGVtZW50SW1wbDo6
YXR0YWNoKCkKICAgICBIVE1MRWxlbWVudEltcGwqIG5vZGUgPSBzdGF0aWNfY2FzdDxIVE1MRWxl
bWVudEltcGwqPihwYXJlbnROb2RlKCkpOwogICAgIHdoaWxlKG5vZGUpCiAgICAgewotICAgICAg
ICBpZihub2RlLT5pZCgpID09IElEX0ZSQU1FU0VUKQotICAgICAgICB7CisgICAgICAgIGlmIChu
b2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZnJhbWVzZXQoKSkpIHsKICAgICAgICAgICAgIEhU
TUxGcmFtZVNldEVsZW1lbnRJbXBsKiBmcmFtZXNldCA9IHN0YXRpY19jYXN0PEhUTUxGcmFtZVNl
dEVsZW1lbnRJbXBsKj4obm9kZSk7CiAgICAgICAgICAgICBpZighZnJhbWVCb3JkZXJTZXQpICBm
cmFtZWJvcmRlciA9IGZyYW1lc2V0LT5mcmFtZUJvcmRlcigpOwogICAgICAgICAgICAgaWYoIW5v
cmVzaXplKSAgbm9yZXNpemUgPSBmcmFtZXNldC0+bm9SZXNpemUoKTsKQEAgLTgxNyw3ICs4MTks
NyBAQCB2b2lkIEhUTUxGcmFtZVNldEVsZW1lbnRJbXBsOjpzZXRSb3dzKGNvCiAvLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCiAKIEhUTUxIZWFkRWxlbWVudEltcGw6OkhUTUxIZWFkRWxlbWVudEltcGwoRG9j
dW1lbnRQdHIgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50SW1wbChkb2MpCisgICAgOiBIVE1MRWxl
bWVudEltcGwoSFRNTE5hbWVzOjpoZWFkKCksIGRvYykKIHsKIH0KIApAQCAtODI1LDExICs4Mjcs
NiBAQCBIVE1MSGVhZEVsZW1lbnRJbXBsOjp+SFRNTEhlYWRFbGVtZW50SW1wCiB7CiB9CiAKLU5v
ZGVJbXBsOjpJZCBIVE1MSGVhZEVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IElEX0hFQUQ7Ci19Ci0KIERPTVN0cmluZyBIVE1MSGVhZEVsZW1lbnRJbXBsOjpwcm9maWxlKCkg
Y29uc3QKIHsKICAgICByZXR1cm4gZ2V0QXR0cmlidXRlKEFUVFJfUFJPRklMRSk7CkBAIC04NDAs
MTAgKzgzNywxOCBAQCB2b2lkIEhUTUxIZWFkRWxlbWVudEltcGw6OnNldFByb2ZpbGUoY29uCiAg
ICAgc2V0QXR0cmlidXRlKEFUVFJfUFJPRklMRSwgdmFsdWUpOwogfQogCitib29sIEhUTUxIZWFk
RWxlbWVudEltcGw6OmNoZWNrRFREKGNvbnN0IE5vZGVJbXBsKiBuZXdDaGlsZCkKK3sKKwlyZXR1
cm4gbmV3Q2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0aXRsZSgpKSB8fCBuZXdDaGlsZC0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OmlzaW5kZXgoKSkgfHwKKwkJICAgbmV3Q2hpbGQtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjpiYXNlKCkpIHx8IG5ld0NoaWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6c2NyaXB0KCkpIHx8CisJCSAgIG5ld0NoaWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c3R5
bGUoKSkgfHwgbmV3Q2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjptZXRhKCkpIHx8CisJCSAg
IG5ld0NoaWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6bGluaygpKSB8fCBuZXdDaGlsZC0+aXNU
ZXh0Tm9kZSgpOworfQorCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxIdG1sRWxlbWVudElt
cGw6OkhUTUxIdG1sRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgICA6IEhUTUxFbGVt
ZW50SW1wbChkb2MpCisgICAgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjpodG1sKCksIGRv
YykKIHsKIH0KIApAQCAtODUxLDExICs4NTYsNiBAQCBIVE1MSHRtbEVsZW1lbnRJbXBsOjp+SFRN
TEh0bWxFbGVtZW50SW1wCiB7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MSHRtbEVsZW1lbnRJbXBs
OjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0hUTUw7Ci19Ci0KIERPTVN0cmluZyBIVE1M
SHRtbEVsZW1lbnRJbXBsOjp2ZXJzaW9uKCkgY29uc3QKIHsKICAgICByZXR1cm4gZ2V0QXR0cmli
dXRlKEFUVFJfVkVSU0lPTik7CkBAIC04NjYsOSArODY2LDE3IEBAIHZvaWQgSFRNTEh0bWxFbGVt
ZW50SW1wbDo6c2V0VmVyc2lvbihjb24KICAgICBzZXRBdHRyaWJ1dGUoQVRUUl9WRVJTSU9OLCB2
YWx1ZSk7CiB9CiAKK2Jvb2wgSFRNTEh0bWxFbGVtZW50SW1wbDo6Y2hlY2tEVEQoY29uc3QgTm9k
ZUltcGwqIG5ld0NoaWxkKQoreworCS8vIEZJWE1FOiBXaHkgaXMgPHNjcmlwdD4gYWxsb3dlZCBo
ZXJlPworCXJldHVybiBuZXdDaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmhlYWQoKSkgfHwg
bmV3Q2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpib2R5KCkpIHx8CisJCSAgIG5ld0NoaWxk
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZnJhbWVzZXQoKSkgfHwgbmV3Q2hpbGQtPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjpub2ZyYW1lcygpKSB8fAorCQkgICBuZXdDaGlsZC0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OnNjcmlwdCgpKTsKK30KKwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1IVE1MSUZy
YW1lRWxlbWVudEltcGw6OkhUTUxJRnJhbWVFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKSA6
IEhUTUxGcmFtZUVsZW1lbnRJbXBsKGRvYykKK0hUTUxJRnJhbWVFbGVtZW50SW1wbDo6SFRNTElG
cmFtZUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpIDogSFRNTEZyYW1lRWxlbWVudEltcGwo
SFRNTE5hbWVzOjppZnJhbWUoKSwgZG9jKQogewogICAgIG1fZnJhbWVCb3JkZXIgPSBmYWxzZTsK
ICAgICBtX21hcmdpbldpZHRoID0gLTE7CkBAIC04ODAsMTEgKzg4OCw2IEBAIEhUTUxJRnJhbWVF
bGVtZW50SW1wbDo6fkhUTUxJRnJhbWVFbGVtZW4KIHsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxJ
RnJhbWVFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9JRlJBTUU7Ci19
Ci0KIGJvb2wgSFRNTElGcmFtZUVsZW1lbnRJbXBsOjptYXBUb0VudHJ5KE5vZGVJbXBsOjpJZCBh
dHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdAogewogICAgIHN3aXRjaCAo
YXR0cikgewpJbmRleDoga2h0bWwvaHRtbC9odG1sX2Jhc2VpbXBsLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sX2Jhc2VpbXBsLmgsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuMjcKZGlmZiAtdSAtcCAtcjEuMjcga2h0bWwvaHRtbC9odG1sX2Jh
c2VpbXBsLmgKLS0tIGtodG1sL2h0bWwvaHRtbF9iYXNlaW1wbC5oCTExIE1heSAyMDA1IDA1OjQ5
OjM0IC0wMDAwCTEuMjcKKysrIGtodG1sL2h0bWwvaHRtbF9iYXNlaW1wbC5oCTcgSnVsIDIwMDUg
MDU6NTg6NTUgLTAwMDAKQEAgLTI2LDcgKzI2LDYgQEAKICNpZm5kZWYgSFRNTF9CQVNFSU1QTF9I
CiAjZGVmaW5lIEhUTUxfQkFTRUlNUExfSAogCi0jaW5jbHVkZSAiaHRtbC9kdGQuaCIKICNpbmNs
dWRlICJodG1sL2h0bWxfZWxlbWVudGltcGwuaCIKICNpbmNsdWRlICJtaXNjL2todG1sbGF5b3V0
LmgiCiAKQEAgLTU1LDggKzU0LDkgQEAgcHVibGljOgogICAgIEhUTUxCb2R5RWxlbWVudEltcGwo
RG9jdW1lbnRQdHIgKmRvYyk7CiAgICAgfkhUTUxCb2R5RWxlbWVudEltcGwoKTsKIAotICAgIHZp
cnR1YWwgSWQgaWQoKSBjb25zdDsKLQorICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdS
ZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9CisgICAgdmly
dHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAxMDsgfQorICAgIAogICAgIHZp
cnR1YWwgYm9vbCBtYXBUb0VudHJ5KE5vZGVJbXBsOjpJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVF
bnRyeSYgcmVzdWx0KSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1
dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqKTsKIApAQCAtOTIsMTEgKzkyLDE0IEBAIGNsYXNzIEhU
TUxGcmFtZUVsZW1lbnRJbXBsIDogcHVibGljIEhUTUwKIAogcHVibGljOgogICAgIEhUTUxGcmFt
ZUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpOwotCisgICAgSFRNTEZyYW1lRWxlbWVudElt
cGwoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnRQdHIqIGRvYyk7CiAgICAg
fkhUTUxGcmFtZUVsZW1lbnRJbXBsKCk7CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7Cisg
ICAgdm9pZCBpbml0KCk7CiAKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWly
ZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNGb3JiaWRkZW47IH0KKyAgICB2aXJ0dWFs
IGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgCiAgICAgdmlydHVhbCB2
b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKik7CiAgICAgdmly
dHVhbCB2b2lkIGF0dGFjaCgpOwogICAgIHZpcnR1YWwgdm9pZCBkZXRhY2goKTsKQEAgLTE2OCwx
MCArMTcxLDExIEBAIGNsYXNzIEhUTUxGcmFtZVNldEVsZW1lbnRJbXBsIDogcHVibGljIEgKICAg
ICBmcmllbmQgY2xhc3Mga2h0bWw6OlJlbmRlckZyYW1lU2V0OwogcHVibGljOgogICAgIEhUTUxG
cmFtZVNldEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpOwotCiAgICAgfkhUTUxGcmFtZVNl
dEVsZW1lbnRJbXBsKCk7CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CisgICAgdmlydHVh
bCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3Rh
dHVzUmVxdWlyZWQ7IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0
dXJuIDEwOyB9CisJdmlydHVhbCBib29sIGNoZWNrRFREKGNvbnN0IE5vZGVJbXBsKiBuZXdDaGls
ZCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmli
dXRlSW1wbCAqKTsKICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoKCk7CkBAIC0yMTYsMTAgKzIyMCwx
MSBAQCBjbGFzcyBIVE1MSGVhZEVsZW1lbnRJbXBsIDogcHVibGljIEhUTUxFCiB7CiBwdWJsaWM6
CiAgICAgSFRNTEhlYWRFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKTsKLQogICAgIH5IVE1M
SGVhZEVsZW1lbnRJbXBsKCk7CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CisgICAgdmly
dHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFn
U3RhdHVzT3B0aW9uYWw7IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsg
cmV0dXJuIDEwOyB9CisJdmlydHVhbCBib29sIGNoZWNrRFREKGNvbnN0IE5vZGVJbXBsKiBuZXdD
aGlsZCk7CiAKICAgICBET01TdHJpbmcgcHJvZmlsZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0UHJv
ZmlsZShjb25zdCBET01TdHJpbmcgJik7CkBAIC0yMzMsNyArMjM4LDkgQEAgcHVibGljOgogICAg
IEhUTUxIdG1sRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYyk7CiAgICAgfkhUTUxIdG1sRWxl
bWVudEltcGwoKTsKIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEhU
TUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNS
ZXF1aXJlZDsgfQorICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4g
MTE7IH0KKwl2aXJ0dWFsIGJvb2wgY2hlY2tEVEQoY29uc3QgTm9kZUltcGwqIG5ld0NoaWxkKTsK
IAogICAgIERPTVN0cmluZyB2ZXJzaW9uKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRWZXJzaW9uKGNv
bnN0IERPTVN0cmluZyAmKTsKQEAgLTI0NiwxMCArMjUzLDEwIEBAIGNsYXNzIEhUTUxJRnJhbWVF
bGVtZW50SW1wbCA6IHB1YmxpYyBIVE0KIHsKIHB1YmxpYzoKICAgICBIVE1MSUZyYW1lRWxlbWVu
dEltcGwoRG9jdW1lbnRQdHIgKmRvYyk7Ci0KICAgICB+SFRNTElGcmFtZUVsZW1lbnRJbXBsKCk7
CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CisgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVz
IGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzUmVxdWlyZWQ7IH0K
KyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDE7IH0KIAogICAg
IHZpcnR1YWwgYm9vbCBtYXBUb0VudHJ5KE5vZGVJbXBsOjpJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1
dGVFbnRyeSYgcmVzdWx0KSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRy
aWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqYXR0cik7CkluZGV4OiBraHRtbC9odG1sL2h0bWxf
YmxvY2tpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRt
bC9odG1sL2h0bWxfYmxvY2tpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNwpkaWZm
IC11IC1wIC1yMS4xNyBraHRtbC9odG1sL2h0bWxfYmxvY2tpbXBsLmNwcAotLS0ga2h0bWwvaHRt
bC9odG1sX2Jsb2NraW1wbC5jcHAJMTEgTWF5IDIwMDUgMDU6NDk6MzQgLTAwMDAJMS4xNworKysg
a2h0bWwvaHRtbC9odG1sX2Jsb2NraW1wbC5jcHAJNyBKdWwgMjAwNSAwNTo1ODo1NSAtMDAwMApA
QCAtMzcsNyArMzcsNyBAQCB1c2luZyBuYW1lc3BhY2Uga2h0bWw7CiB1c2luZyBuYW1lc3BhY2Ug
RE9NOwogCiBIVE1MQmxvY2txdW90ZUVsZW1lbnRJbXBsOjpIVE1MQmxvY2txdW90ZUVsZW1lbnRJ
bXBsKERvY3VtZW50UHRyICpkb2MpCi0gICAgOiBIVE1MRWxlbWVudEltcGwoZG9jKQorICAgIDog
SFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6YmxvY2txdW90ZSgpLCBkb2MpCiB7CiB9CiAKQEAg
LTQ1LDExICs0NSw2IEBAIEhUTUxCbG9ja3F1b3RlRWxlbWVudEltcGw6On5IVE1MQmxvY2txdW8K
IHsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxCbG9ja3F1b3RlRWxlbWVudEltcGw6OmlkKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gSURfQkxPQ0tRVU9URTsKLX0KLQogRE9NU3RyaW5nIEhUTUxCbG9j
a3F1b3RlRWxlbWVudEltcGw6OmNpdGUoKSBjb25zdAogewogICAgIHJldHVybiBnZXRBdHRyaWJ1
dGUoQVRUUl9DSVRFKTsKQEAgLTYzLDcgKzU4LDcgQEAgdm9pZCBIVE1MQmxvY2txdW90ZUVsZW1l
bnRJbXBsOjpzZXRDaXRlKAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MRGl2RWxlbWVudElt
cGw6OkhUTUxEaXZFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAgIDogSFRNTEVsZW1l
bnRJbXBsKGRvYykKKyAgICA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6OmRpdigpLCBkb2Mp
CiB7CiB9CiAKQEAgLTcxLDExICs2Niw2IEBAIEhUTUxEaXZFbGVtZW50SW1wbDo6fkhUTUxEaXZF
bGVtZW50SW1wbCgKIHsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxEaXZFbGVtZW50SW1wbDo6aWQo
KSBjb25zdAotewotICAgIHJldHVybiBJRF9ESVY7Ci19Ci0KIGJvb2wgSFRNTERpdkVsZW1lbnRJ
bXBsOjptYXBUb0VudHJ5KE5vZGVJbXBsOjpJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYg
cmVzdWx0KSBjb25zdAogewogICAgIGlmIChhdHRyID09IEFUVFJfQUxJR04pIHsKQEAgLTEyMCw3
ICsxMTAsNyBAQCB2b2lkIEhUTUxEaXZFbGVtZW50SW1wbDo6c2V0QWxpZ24oY29uc3QgCiAvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxIUkVsZW1lbnRJbXBsOjpIVE1MSFJFbGVtZW50SW1wbChE
b2N1bWVudFB0ciAqZG9jKQotICAgIDogSFRNTEVsZW1lbnRJbXBsKGRvYykKKyAgICA6IEhUTUxF
bGVtZW50SW1wbChIVE1MTmFtZXM6OmhyKCksIGRvYykKIHsKIH0KIApAQCAtMTI4LDExICsxMTgs
NiBAQCBIVE1MSFJFbGVtZW50SW1wbDo6fkhUTUxIUkVsZW1lbnRJbXBsKCkKIHsKIH0KIAotTm9k
ZUltcGw6OklkIEhUTUxIUkVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElE
X0hSOwotfQotCiBib29sIEhUTUxIUkVsZW1lbnRJbXBsOjptYXBUb0VudHJ5KE5vZGVJbXBsOjpJ
ZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdAogewogICAgIHN3aXRj
aCAoYXR0cikgewpAQCAtMjUyLDExICsyMzcsMjEgQEAgdm9pZCBIVE1MSFJFbGVtZW50SW1wbDo6
c2V0V2lkdGgoY29uc3QgRAogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUhUTUxIZWFkaW5nRWxl
bWVudEltcGw6OkhUTUxIZWFkaW5nRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgdXNob3J0
IF90YWdpZCkKLSAgICA6IEhUTUxHZW5lcmljRWxlbWVudEltcGwoZG9jLCBfdGFnaWQpCitIVE1M
SGVhZGluZ0VsZW1lbnRJbXBsOjpIVE1MSGVhZGluZ0VsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmll
ZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50UHRyICpkb2MpCisgICAgOiBIVE1MRWxlbWVudEltcGwo
dGFnTmFtZSwgZG9jKQogewogfQogCitib29sIEhUTUxIZWFkaW5nRWxlbWVudEltcGw6OmNoZWNr
RFREKGNvbnN0IE5vZGVJbXBsKiBuZXdDaGlsZCkKK3sKKyAgICBpZiAobmV3Q2hpbGQtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjpoMSgpKSB8fCBuZXdDaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
OmgyKCkpIHx8CisgICAgICAgIG5ld0NoaWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDMoKSkg
fHwgbmV3Q2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoNCgpKSB8fAorICAgICAgICBuZXdD
aGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omg1KCkpIHx8IG5ld0NoaWxkLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6aDYoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBp
bkVpdGhlclRhZ0xpc3QobmV3Q2hpbGQpOworfQorCiBET01TdHJpbmcgSFRNTEhlYWRpbmdFbGVt
ZW50SW1wbDo6YWxpZ24oKSBjb25zdAogewogICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoQVRUUl9B
TElHTik7CkBAIC0yNzAsMTMgKzI2NSwxMyBAQCB2b2lkIEhUTUxIZWFkaW5nRWxlbWVudEltcGw6
OnNldEFsaWduKGNvCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxQYXJhZ3JhcGhFbGVtZW50
SW1wbDo6SFRNTFBhcmFncmFwaEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0gICAgOiBI
VE1MRWxlbWVudEltcGwoZG9jKQorICAgIDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6cCgp
LCBkb2MpCiB7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MUGFyYWdyYXBoRWxlbWVudEltcGw6Omlk
KCkgY29uc3QKK2Jvb2wgSFRNTFBhcmFncmFwaEVsZW1lbnRJbXBsOjpjaGVja0RURChjb25zdCBO
b2RlSW1wbCogbmV3Q2hpbGQpCiB7Ci0gICAgcmV0dXJuIElEX1A7CisgICAgcmV0dXJuIGluSW5s
aW5lVGFnTGlzdChuZXdDaGlsZCkgfHwgKGdldERvY3VtZW50KCktPmluQ29tcGF0TW9kZSgpICYm
IG5ld0NoaWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGFibGUoKSkpOwogfQogCiBib29sIEhU
TUxQYXJhZ3JhcGhFbGVtZW50SW1wbDo6bWFwVG9FbnRyeShOb2RlSW1wbDo6SWQgYXR0ciwgTWFw
cGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3QKQEAgLTMyMiw4ICszMTcsOCBAQCB2b2lk
IEhUTUxQYXJhZ3JhcGhFbGVtZW50SW1wbDo6c2V0QWxpZ24oCiAKIC8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KIAotSFRNTFByZUVsZW1lbnRJbXBsOjpIVE1MUHJlRWxlbWVudEltcGwoRG9jdW1lbnRQdHIg
KmRvYywgdW5zaWduZWQgc2hvcnQgX3RhZ2lkKQotICAgIDogSFRNTEdlbmVyaWNFbGVtZW50SW1w
bChkb2MsIF90YWdpZCkKK0hUTUxQcmVFbGVtZW50SW1wbDo6SFRNTFByZUVsZW1lbnRJbXBsKGNv
bnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50UHRyICpkb2MpCisgICAgOiBIVE1M
RWxlbWVudEltcGwodGFnTmFtZSwgZG9jKQogewogfQogCkBAIC0zNDMsMTYgKzMzOCwxMSBAQCB2
b2lkIEhUTUxQcmVFbGVtZW50SW1wbDo6c2V0V2lkdGgobG9uZyB3CiBjb25zdCBpbnQgZGVmYXVs
dE1pbmltdW1EZWxheSA9IDYwOwogCiBIVE1MTWFycXVlZUVsZW1lbnRJbXBsOjpIVE1MTWFycXVl
ZUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi06IEhUTUxFbGVtZW50SW1wbChkb2MpLAor
OiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjptYXJxdWVlKCksIGRvYyksCiAgIG1fbWluaW11
bURlbGF5KGRlZmF1bHRNaW5pbXVtRGVsYXkpCiB7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MTWFy
cXVlZUVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX01BUlFVRUU7Ci19
Ci0KIGJvb2wgSFRNTE1hcnF1ZWVFbGVtZW50SW1wbDo6bWFwVG9FbnRyeShOb2RlSW1wbDo6SWQg
YXR0ciwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3QKIHsKICAgICBzd2l0Y2gg
KGF0dHIpIHsKQEAgLTQzNCwxOSArNDI0LDMgQEAgdm9pZCBIVE1MTWFycXVlZUVsZW1lbnRJbXBs
OjpwYXJzZU1hcHBlZAogICAgICAgICAgICAgSFRNTEVsZW1lbnRJbXBsOjpwYXJzZU1hcHBlZEF0
dHJpYnV0ZShhdHRyKTsKICAgICB9CiB9Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1IVE1MTGF5
ZXJFbGVtZW50SW1wbDo6SFRNTExheWVyRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAg
ICA6IEhUTUxEaXZFbGVtZW50SW1wbCggZG9jICkKLXsKLX0KLQotSFRNTExheWVyRWxlbWVudElt
cGw6On5IVE1MTGF5ZXJFbGVtZW50SW1wbCgpCi17Ci19Ci0KLU5vZGVJbXBsOjpJZCBIVE1MTGF5
ZXJFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9MQVlFUjsKLX0KSW5k
ZXg6IGtodG1sL2h0bWwvaHRtbF9ibG9ja2ltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfYmxvY2tpbXBsLmgsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuOQpkaWZmIC11IC1wIC1yMS45IGtodG1sL2h0bWwvaHRtbF9ibG9ja2ltcGwuaAot
LS0ga2h0bWwvaHRtbC9odG1sX2Jsb2NraW1wbC5oCTExIE1heSAyMDA1IDA1OjQ5OjM0IC0wMDAw
CTEuOQorKysga2h0bWwvaHRtbC9odG1sX2Jsb2NraW1wbC5oCTcgSnVsIDIwMDUgMDU6NTg6NTUg
LTAwMDAKQEAgLTI2LDcgKzI2LDYgQEAKICNkZWZpbmUgSFRNTF9CTE9DS0lNUExfSAogCiAjaW5j
bHVkZSAiaHRtbF9lbGVtZW50aW1wbC5oIgotI2luY2x1ZGUgImR0ZC5oIgogCiBuYW1lc3BhY2Ug
RE9NIHsKIApAQCAtNDAsOCArMzksOSBAQCBwdWJsaWM6CiAgICAgSFRNTEJsb2NrcXVvdGVFbGVt
ZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKTsKICAgICB+SFRNTEJsb2NrcXVvdGVFbGVtZW50SW1w
bCgpOwogCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwotCisgICAgdmlydHVhbCBIVE1MVGFn
U3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzUmVxdWly
ZWQ7IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDU7IH0K
KyAgICAKICAgICBET01TdHJpbmcgY2l0ZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0Q2l0ZShjb25z
dCBET01TdHJpbmcgJik7CiB9OwpAQCAtNTUsOCArNTUsOSBAQCBjbGFzcyBIVE1MRGl2RWxlbWVu
dEltcGwgOiBwdWJsaWMgSFRNTEVsCiBwdWJsaWM6CiAgICAgSFRNTERpdkVsZW1lbnRJbXBsKERv
Y3VtZW50UHRyICpkb2MpOwogICAgIH5IVE1MRGl2RWxlbWVudEltcGwoKTsKLQotICAgIHZpcnR1
YWwgSWQgaWQoKSBjb25zdDsKKyAgICAKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFn
UmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQorICAgIHZp
cnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gNTsgfQogICAgIAogICAgIHZp
cnR1YWwgYm9vbCBtYXBUb0VudHJ5KElkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1
bHQpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRB
dHRyaWJ1dGVJbXBsICp0b2tlbik7CkBAIC03Miw4ICs3Myw5IEBAIGNsYXNzIEhUTUxIUkVsZW1l
bnRJbXBsIDogcHVibGljIEhUTUxFbGUKIHB1YmxpYzoKICAgICBIVE1MSFJFbGVtZW50SW1wbChE
b2N1bWVudFB0ciAqZG9jKTsKICAgICB+SFRNTEhSRWxlbWVudEltcGwoKTsKLQotICAgIHZpcnR1
YWwgSWQgaWQoKSBjb25zdDsKKyAgICAKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFn
UmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNGb3JiaWRkZW47IH0KKyAgICB2
aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KICAgICAKICAgICB2
aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVz
dWx0KSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVk
QXR0cmlidXRlSW1wbCAqKTsKQEAgLTkzLDEwICs5NSwxNCBAQCBwdWJsaWM6CiAKIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KIAotY2xhc3MgSFRNTEhlYWRpbmdFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1M
R2VuZXJpY0VsZW1lbnRJbXBsCitjbGFzcyBIVE1MSGVhZGluZ0VsZW1lbnRJbXBsIDogcHVibGlj
IEhUTUxFbGVtZW50SW1wbAogewogcHVibGljOgotICAgIEhUTUxIZWFkaW5nRWxlbWVudEltcGwo
RG9jdW1lbnRQdHIgKmRvYywgdXNob3J0IF90YWdpZCk7CisgICAgSFRNTEhlYWRpbmdFbGVtZW50
SW1wbChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudFB0ciAqZG9jKTsKKwor
ICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0
dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBj
b25zdCB7IHJldHVybiA1OyB9CisJdmlydHVhbCBib29sIGNoZWNrRFREKGNvbnN0IE5vZGVJbXBs
KiBuZXdDaGlsZCk7CiAKICAgICBET01TdHJpbmcgYWxpZ24oKSBjb25zdDsKICAgICB2b2lkIHNl
dEFsaWduKGNvbnN0IERPTVN0cmluZyAmKTsKQEAgLTEwNCwyMSArMTEwLDE3IEBAIHB1YmxpYzoK
IAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0vKgotICogd2VyZSBub3QgdXNpbmcgSFRNTEVsZW1l
bnRJbXBsIGFzIHBhcmVudCBjbGFzcywgc2luY2UgYQotICogcGFyYWdyYXBoIHNob3VsZCBiZSBh
YmxlIHRvIGZsb3cgYXJvdW5kIGFsaWduZWQgb2JqZWN0cy4gVGh1cwotICogYSA8cD4gZWxlbWVu
dCBoYXMgdG8gYmUgaW5saW5lLCBhbmQgaXMgcmVuZGVyZWQgYnkKLSAqIEhUTUxCbG9ja0ltcGw6
OmNhbGNQYXJhZ3JhcGgKLSAqLwogY2xhc3MgSFRNTFBhcmFncmFwaEVsZW1lbnRJbXBsIDogcHVi
bGljIEhUTUxFbGVtZW50SW1wbAogewogcHVibGljOgogICAgIEhUTUxQYXJhZ3JhcGhFbGVtZW50
SW1wbChEb2N1bWVudFB0ciAqZG9jKTsKIAorICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRU
YWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c09wdGlvbmFsOyB9CisgICAg
dmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAzOyB9CisgICAgdmlydHVh
bCBib29sIGNoZWNrRFREKGNvbnN0IE5vZGVJbXBsKiBuZXdDaGlsZCk7CisKICAgICB2aXJ0dWFs
IGJvb2wgbWFwVG9FbnRyeShJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBj
b25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmli
dXRlSW1wbCAqYXR0cik7Ci0gICAgCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwogCiAgICAg
RE9NU3RyaW5nIGFsaWduKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRBbGlnbihjb25zdCBET01TdHJp
bmcgJik7CkBAIC0xMjYsMTMgKzEyOCwxNiBAQCBwdWJsaWM6CiAKIC8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KIAotY2xhc3MgSFRNTFByZUVsZW1lbnRJbXBsIDogcHVibGljIEhUTUxHZW5lcmljRWxlbWVu
dEltcGwKK2NsYXNzIEhUTUxQcmVFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MRWxlbWVudEltcGwK
IHsKIHB1YmxpYzoKLSAgICBIVE1MUHJlRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgdXNo
b3J0IF90YWdpZCk7CisgICAgSFRNTFByZUVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUm
IHRhZ05hbWUsIERvY3VtZW50UHRyICpkb2MpOworCisgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVz
IGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzUmVxdWlyZWQ7IH0K
KyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDU7IH0KIAogICAg
IGxvbmcgd2lkdGgoKSBjb25zdDsKLSAgICB2b2lkIHNldFdpZHRoKCBsb25nIHcgKTsKKyAgICB2
b2lkIHNldFdpZHRoKGxvbmcgdyk7CiB9OwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xNDEs
OSArMTQ2LDEwIEBAIGNsYXNzIEhUTUxNYXJxdWVlRWxlbWVudEltcGwgOiBwdWJsaWMgSFQKIHsK
IHB1YmxpYzoKICAgICBIVE1MTWFycXVlZUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpOwot
Ci0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwogICAgIAorICAgIHZpcnR1YWwgSFRNTFRhZ1N0
YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVk
OyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAzOyB9CisK
ICAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRy
eSYgcmVzdWx0KSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUo
TWFwcGVkQXR0cmlidXRlSW1wbCAqdG9rZW4pOwogCkBAIC0xNTMsMTggKzE1OSw1IEBAIHByaXZh
dGU6CiAgICAgaW50IG1fbWluaW11bURlbGF5OwogfTsKIAotLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ci1jbGFzcyBIVE1MTGF5ZXJFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MRGl2RWxlbWVudEltcGwK
LXsKLXB1YmxpYzoKLSAgICBIVE1MTGF5ZXJFbGVtZW50SW1wbCggRG9jdW1lbnRQdHIgKmRvYyAp
OwotICAgIH5IVE1MTGF5ZXJFbGVtZW50SW1wbCgpOwotCi0gICAgdmlydHVhbCBJZCBpZCgpIGNv
bnN0OwotCi0gICAgYm9vbCBmaXhlZDsKLX07Ci0KIH07IC8vbmFtZXNwYWNlCiAjZW5kaWYKSW5k
ZXg6IGtodG1sL2h0bWwvaHRtbF9jYW52YXNpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfY2FudmFzaW1wbC5jcHAsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuMwpkaWZmIC11IC1wIC1yMS4zIGtodG1sL2h0bWwvaHRtbF9jYW52YXNp
bXBsLmNwcAotLS0ga2h0bWwvaHRtbC9odG1sX2NhbnZhc2ltcGwuY3BwCTExIE1heSAyMDA1IDA1
OjQ5OjM0IC0wMDAwCTEuMworKysga2h0bWwvaHRtbC9odG1sX2NhbnZhc2ltcGwuY3BwCTcgSnVs
IDIwMDUgMDU6NTg6NTUgLTAwMDAKQEAgLTU1LDcgKzU1LDcgQEAgdXNpbmcgbmFtZXNwYWNlIGto
dG1sOwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MQ2FudmFzRWxlbWVudEltcGw6OkhUTUxD
YW52YXNFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAgIDogSFRNTEltYWdlRWxlbWVu
dEltcGwoZG9jKQorICAgIDogSFRNTEltYWdlRWxlbWVudEltcGwoSFRNTE5hbWVzOjpjYW52YXMo
KSwgZG9jKQogewogfQogCkBAIC02MywxMSArNjMsNiBAQCBIVE1MQ2FudmFzRWxlbWVudEltcGw6
On5IVE1MQ2FudmFzRWxlbWVuCiB7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MQ2FudmFzRWxlbWVu
dEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfQ0FOVkFTOwotfQotCiBib29sIEhU
TUxDYW52YXNFbGVtZW50SW1wbDo6bWFwVG9FbnRyeShOb2RlSW1wbDo6SWQgYXR0ciwgTWFwcGVk
QXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3QKIHsKICAgICByZXR1cm4gSFRNTEltYWdlRWxl
bWVudEltcGw6Om1hcFRvRW50cnkoYXR0ciwgcmVzdWx0KTsKSW5kZXg6IGtodG1sL2h0bWwvaHRt
bF9jYW52YXNpbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0
bWwvaHRtbC9odG1sX2NhbnZhc2ltcGwuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yCmRpZmYg
LXUgLXAgLXIxLjIga2h0bWwvaHRtbC9odG1sX2NhbnZhc2ltcGwuaAotLS0ga2h0bWwvaHRtbC9o
dG1sX2NhbnZhc2ltcGwuaAkxMSBNYXkgMjAwNSAwNTo0OTozNCAtMDAwMAkxLjIKKysrIGtodG1s
L2h0bWwvaHRtbF9jYW52YXNpbXBsLmgJNyBKdWwgMjAwNSAwNTo1ODo1NSAtMDAwMApAQCAtNDMs
MTEgKzQzLDggQEAgY2xhc3MgSFRNTENhbnZhc0VsZW1lbnRJbXBsCiB7CiBwdWJsaWM6CiAgICAg
SFRNTENhbnZhc0VsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpOwotCiAgICAgfkhUTUxDYW52
YXNFbGVtZW50SW1wbCgpOwogCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwotCiAgICAgdmly
dHVhbCBib29sIG1hcFRvRW50cnkoTm9kZUltcGw6OklkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVu
dHJ5JiByZXN1bHQpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0
ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICopOwogCkluZGV4OiBraHRtbC9odG1sL2h0bWxfZG9jdW1l
bnRpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9o
dG1sL2h0bWxfZG9jdW1lbnRpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS42MApkaWZm
IC11IC1wIC1yMS42MCBraHRtbC9odG1sL2h0bWxfZG9jdW1lbnRpbXBsLmNwcAotLS0ga2h0bWwv
aHRtbC9odG1sX2RvY3VtZW50aW1wbC5jcHAJMTEgTWF5IDIwMDUgMDA6NTg6MjggLTAwMDAJMS42
MAorKysga2h0bWwvaHRtbC9odG1sX2RvY3VtZW50aW1wbC5jcHAJNyBKdWwgMjAwNSAwNTo1ODo1
NiAtMDAwMApAQCAtNjAsNiArNjAsNyBAQAogI2luY2x1ZGUgImh0bWwvaHRtbF9taXNjaW1wbC5o
IgogI2luY2x1ZGUgImh0bWwvaHRtbF9pbWFnZWltcGwuaCIKICNpbmNsdWRlICJodG1sL2h0bWxf
Zm9ybWltcGwuaCIKKyNpbmNsdWRlICJodG1sZmFjdG9yeS5oIgogCiAjaW5jbHVkZSAia2h0bWx2
aWV3LmgiCiAjaW5jbHVkZSAia2h0bWxfcGFydC5oIgpAQCAtMjQ2LDEyICsyNDcsMTggQEAgVG9r
ZW5pemVyICpIVE1MRG9jdW1lbnRJbXBsOjpjcmVhdGVUb2tlbgogYm9vbCBIVE1MRG9jdW1lbnRJ
bXBsOjpjaGlsZEFsbG93ZWQoIE5vZGVJbXBsICpuZXdDaGlsZCApCiB7CiAgICAgLy8gIyMjIHN1
cHBvcnQgY29tbWVudHMuIGV0YyBhcyBhIGNoaWxkCi0gICAgcmV0dXJuIChuZXdDaGlsZC0+aWQo
KSA9PSBJRF9IVE1MIHx8IG5ld0NoaWxkLT5pZCgpID09IElEX0NPTU1FTlQpOworICAgIHJldHVy
biAobmV3Q2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpodG1sKCkpIHx8IG5ld0NoaWxkLT5p
c0NvbW1lbnROb2RlKCkpOwogfQogCi1FbGVtZW50SW1wbCAqSFRNTERvY3VtZW50SW1wbDo6Y3Jl
YXRlRWxlbWVudCggY29uc3QgRE9NU3RyaW5nICZuYW1lLCBpbnQgJmV4Y2VwdGlvbmNvZGUgKQor
RWxlbWVudEltcGwgKkhUTUxEb2N1bWVudEltcGw6OmNyZWF0ZUVsZW1lbnQoY29uc3QgRE9NU3Ry
aW5nICZuYW1lLCBpbnQgJmV4Y2VwdGlvbmNvZGUpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUhUTUxF
bGVtZW50KG5hbWUsIGV4Y2VwdGlvbmNvZGUpOworICAgIGlmICghaXNWYWxpZE5hbWUobmFtZSkp
IHsKKyAgICAgICAgZXhjZXB0aW9uY29kZSA9IERPTUV4Y2VwdGlvbjo6SU5WQUxJRF9DSEFSQUNU
RVJfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBET01TdHJpbmcgbG93ZXJO
YW1lKG5hbWUubG93ZXIoKSk7CisgICAgcmV0dXJuIEhUTUxFbGVtZW50RmFjdG9yeTo6Y3JlYXRl
SFRNTEVsZW1lbnQoQXRvbWljU3RyaW5nKGxvd2VyTmFtZSksIHRoaXMsIDAsIGZhbHNlKTsKIH0K
IAogdm9pZCBIVE1MRG9jdW1lbnRJbXBsOjpzbG90SGlzdG9yeUNoYW5nZWQoKQpJbmRleDoga2h0
bWwvaHRtbC9odG1sX2RvY3VtZW50aW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbF9kb2N1bWVudGltcGwuaCx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS4yOQpkaWZmIC11IC1wIC1yMS4yOSBraHRtbC9odG1sL2h0bWxfZG9jdW1lbnRpbXBs
LmgKLS0tIGtodG1sL2h0bWwvaHRtbF9kb2N1bWVudGltcGwuaAkxMSBNYXkgMjAwNSAwMDo1ODoy
OCAtMDAwMAkxLjI5CisrKyBraHRtbC9odG1sL2h0bWxfZG9jdW1lbnRpbXBsLmgJNyBKdWwgMjAw
NSAwNTo1ODo1NiAtMDAwMApAQCAtMzQsNyArMzQsNyBAQCBjbGFzcyBRU3RyaW5nOwogCiBuYW1l
c3BhY2UgRE9NIHsKIAotICAgIGNsYXNzIEhUTUxFbGVtZW50SW1wbDsKK2NsYXNzIEhUTUxFbGVt
ZW50SW1wbDsKIAogY2xhc3MgSFRNTERvY3VtZW50SW1wbCA6IHB1YmxpYyBET006OkRvY3VtZW50
SW1wbCwgcHVibGljIGtodG1sOjpDYWNoZWRPYmplY3RDbGllbnQKIHsKSW5kZXg6IGtodG1sL2h0
bWwvaHRtbF9lbGVtZW50aW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dl
YkNvcmUva2h0bWwvaHRtbC9odG1sX2VsZW1lbnRpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS44NwpkaWZmIC11IC1wIC1yMS44NyBraHRtbC9odG1sL2h0bWxfZWxlbWVudGltcGwuY3Bw
Ci0tLSBraHRtbC9odG1sL2h0bWxfZWxlbWVudGltcGwuY3BwCTEzIE1heSAyMDA1IDE2OjQ4OjUx
IC0wMDAwCTEuODcKKysrIGtodG1sL2h0bWwvaHRtbF9lbGVtZW50aW1wbC5jcHAJNyBKdWwgMjAw
NSAwNTo1ODo1NyAtMDAwMApAQCAtMjgsMTAgKzI4LDEwIEBACiAvLyNkZWZpbmUgRVZFTlRfREVC
VUcKIC8vI2RlZmluZSBVTlNVUFBPUlRFRF9BVFRSCiAKLSNpbmNsdWRlICJodG1sL2R0ZC5oIgog
I2luY2x1ZGUgImh0bWwvaHRtbF9lbGVtZW50aW1wbC5oIgogI2luY2x1ZGUgImh0bWwvaHRtbF9k
b2N1bWVudGltcGwuaCIKICNpbmNsdWRlICJodG1sL2h0bWx0b2tlbml6ZXIuaCIKKyNpbmNsdWRl
ICJodG1sZmFjdG9yeS5oIgogCiAjaW5jbHVkZSAibWlzYy9odG1saGFzaGVzLmgiCiAjaW5jbHVk
ZSAiZWRpdGluZy92aXNpYmxlX3RleHQuaCIKQEAgLTU4LDggKzU4LDggQEAgdXNpbmcgbmFtZXNw
YWNlIGtodG1sOwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSFRNTEVsZW1lbnRJbXBsOjpIVE1MRWxlbWVu
dEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgICA6IFN0eWxlZEVsZW1lbnRJbXBsKGRvYykKK0hU
TUxFbGVtZW50SW1wbDo6SFRNTEVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05h
bWUsIERvY3VtZW50UHRyICpkb2MpCisgICAgOiBTdHlsZWRFbGVtZW50SW1wbCh0YWdOYW1lLCBk
b2MpCiB7CiB9CiAKQEAgLTY3LDUxICs2Nyw0MCBAQCBIVE1MRWxlbWVudEltcGw6On5IVE1MRWxl
bWVudEltcGwoKQogewogfQogCi1ib29sIEhUTUxFbGVtZW50SW1wbDo6aXNJbmxpbmUoKSBjb25z
dAorRE9NU3RyaW5nIEhUTUxFbGVtZW50SW1wbDo6bm9kZU5hbWUoKSBjb25zdAogewotICAgIGlm
IChyZW5kZXJlcigpKQotICAgICAgICByZXR1cm4gRWxlbWVudEltcGw6OmlzSW5saW5lKCk7Ci0g
ICAgCi0gICAgc3dpdGNoKGlkKCkpIHsKLSAgICAgICAgY2FzZSBJRF9BOgotICAgICAgICBjYXNl
IElEX0ZPTlQ6Ci0gICAgICAgIGNhc2UgSURfVFQ6Ci0gICAgICAgIGNhc2UgSURfVToKLSAgICAg
ICAgY2FzZSBJRF9COgotICAgICAgICBjYXNlIElEX0k6Ci0gICAgICAgIGNhc2UgSURfUzoKLSAg
ICAgICAgY2FzZSBJRF9TVFJJS0U6Ci0gICAgICAgIGNhc2UgSURfQklHOgotICAgICAgICBjYXNl
IElEX1NNQUxMOgotICAgIAotICAgICAgICAgICAgLy8gJXBocmFzZQotICAgICAgICBjYXNlIElE
X0VNOgotICAgICAgICBjYXNlIElEX1NUUk9ORzoKLSAgICAgICAgY2FzZSBJRF9ERk46Ci0gICAg
ICAgIGNhc2UgSURfQ09ERToKLSAgICAgICAgY2FzZSBJRF9TQU1QOgotICAgICAgICBjYXNlIElE
X0tCRDoKLSAgICAgICAgY2FzZSBJRF9WQVI6Ci0gICAgICAgIGNhc2UgSURfQ0lURToKLSAgICAg
ICAgY2FzZSBJRF9BQkJSOgotICAgICAgICBjYXNlIElEX0FDUk9OWU06CisgICAgLy8gRklYTUU6
IFdvdWxkIGJlIG5pY2UgdG8gaGF2ZSBhbiBhdG9taWNzdHJpbmcgbG9va3VwIGJhc2VkIG9mZiB1
cHBlcmNhc2UgY2hhcnMgdGhhdCBkb2VzIG5vdCBoYXZlIHRvIGNvcHkKKyAgICAvLyB0aGUgc3Ry
aW5nIG9uIGEgaGl0IGluIHRoZSBoYXNoLgorICAgIGlmIChnZXREb2N1bWVudCgpLT5pc0hUTUxE
b2N1bWVudCgpKQorICAgICAgICByZXR1cm4gbV90YWdOYW1lLmxvY2FsTmFtZSgpLmltcGxlbWVu
dGF0aW9uKCktPnVwcGVyKCk7CisgICAgcmV0dXJuIEVsZW1lbnRJbXBsOjpub2RlTmFtZSgpOwor
fQogICAgIAotICAgICAgICAgICAgLy8gJXNwZWNpYWwKLSAgICAgICAgY2FzZSBJRF9TVUI6Ci0g
ICAgICAgIGNhc2UgSURfU1VQOgotICAgICAgICBjYXNlIElEX1NQQU46Ci0gICAgICAgIGNhc2Ug
SURfTk9CUjoKLSAgICAgICAgY2FzZSBJRF9XQlI6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgICAgIAotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIEVsZW1l
bnRJbXBsOjppc0lubGluZSgpOwotICAgIH0KK0hUTUxUYWdTdGF0dXMgSFRNTEVsZW1lbnRJbXBs
OjplbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0Cit7CisgICAgaWYgKGhhc0xvY2FsTmFtZShIVE1M
TmFtZXM6OmR0KCkpIHx8IGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmRkKCkpKQorICAgICAgICBy
ZXR1cm4gVGFnU3RhdHVzT3B0aW9uYWw7CisKKyAgICAvLyBTYW1lIHZhbHVlcyBhcyA8c3Bhbj4u
ICBUaGlzIHdheSBjdXN0b20gdGFnIG5hbWUgZWxlbWVudHMgd2lsbCBiZWhhdmUgbGlrZSBpbmxp
bmUgc3BhbnMuCisgICAgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOworfQorCitpbnQgSFRNTEVs
ZW1lbnRJbXBsOjp0YWdQcmlvcml0eSgpIGNvbnN0Cit7CisgICAgaWYgKGhhc0xvY2FsTmFtZShI
VE1MTmFtZXM6OmFkZHJlc3MoKSkgfHwgaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6ZGQoKSkgfHwg
aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6ZHQoKSkgfHwgaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6
bm9zY3JpcHQoKSkpCisgICAgICAgIHJldHVybiAzOworICAgIGlmIChoYXNMb2NhbE5hbWUoSFRN
TE5hbWVzOjpjZW50ZXIoKSkgfHwgaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6bm9icigpKSkKKyAg
ICAgICAgcmV0dXJuIDU7CisgICAgaWYgKGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om5vZW1iZWQo
KSkgfHwgaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6bm9mcmFtZXMoKSkpCisgICAgICAgIHJldHVy
biAxMDsKKworICAgIC8vIFNhbWUgdmFsdWVzIGFzIDxzcGFuPi4gIFRoaXMgd2F5IGN1c3RvbSB0
YWcgbmFtZSBlbGVtZW50cyB3aWxsIGJlaGF2ZSBsaWtlIGlubGluZSBzcGFucy4KKyAgICByZXR1
cm4gMTsKIH0KIAogTm9kZUltcGwgKkhUTUxFbGVtZW50SW1wbDo6Y2xvbmVOb2RlKGJvb2wgZGVl
cCkKIHsKLSAgICBIVE1MRWxlbWVudEltcGwgKmNsb25lID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1l
bnRJbXBsICo+KGdldERvY3VtZW50KCktPmNyZWF0ZUhUTUxFbGVtZW50KGxvY2FsTmFtZVBhcnQo
aWQoKSkpKTsKKyAgICBIVE1MRWxlbWVudEltcGwgKmNsb25lID0gSFRNTEVsZW1lbnRGYWN0b3J5
OjpjcmVhdGVIVE1MRWxlbWVudChsb2NhbE5hbWUoKSwgZ2V0RG9jdW1lbnQoKSwgMCwgZmFsc2Up
OwogICAgIGlmICghY2xvbmUpCiAgICAgICAgIHJldHVybiAwOwogCkBAIC0zMjUsMjYgKzMxNCwx
NyBAQCBET01TdHJpbmcgSFRNTEVsZW1lbnRJbXBsOjpvdXRlclRleHQoKSBjCiBEb2N1bWVudEZy
YWdtZW50SW1wbCAqSFRNTEVsZW1lbnRJbXBsOjpjcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoY29u
c3QgRE9NU3RyaW5nICZodG1sKQogewogICAgIC8vIHRoZSBmb2xsb3dpbmcgaXMgaW4gYWNjb3Jk
YW5jZSB3aXRoIHRoZSBkZWZpbml0aW9uIGFzIHVzZWQgYnkgSUUKLSAgICBpZiggZW5kVGFnUmVx
dWlyZW1lbnQoaWQoKSkgPT0gRk9SQklEREVOICkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAg
Ly8gSUUgZGlzYWxsb3dzIGlubmVySFRNTCBvbiBpbmxpbmUgZWxlbWVudHMuIEkgZG9uJ3Qgc2Vl
IHdoeSB3ZSBzaG91bGQgaGF2ZSB0aGlzIHJlc3RyaWN0aW9uLCBhcyBvdXIKLSAgICAvLyBkaHRt
bCBlbmdpbmUgY2FuIGNvcGUgd2l0aCBpdC4gTGFycwotICAgIC8vaWYgKCBpc0lubGluZSgpICkg
cmV0dXJuIGZhbHNlOwotICAgIHN3aXRjaCggaWQoKSApIHsKLSAgICAgICAgY2FzZSBJRF9DT0w6
Ci0gICAgICAgIGNhc2UgSURfQ09MR1JPVVA6Ci0gICAgICAgIGNhc2UgSURfRlJBTUVTRVQ6Ci0g
ICAgICAgIGNhc2UgSURfSEVBRDoKLSAgICAgICAgY2FzZSBJRF9TVFlMRToKLSAgICAgICAgY2Fz
ZSBJRF9USVRMRToKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGlmICggIWdldERvY3VtZW50KCktPmlzSFRN
TERvY3VtZW50KCkgKQotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoZW5kVGFnUmVxdWly
ZW1lbnQoKSA9PSBUYWdTdGF0dXNGb3JiaWRkZW4pCisgICAgICAgIHJldHVybiAwOworCisgICAg
aWYgKGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmNvbCgpKSB8fCBoYXNMb2NhbE5hbWUoSFRNTE5h
bWVzOjpjb2xncm91cCgpKSB8fCBoYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpmcmFtZXNldCgpKSB8
fAorICAgICAgICBoYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpoZWFkKCkpIHx8IGhhc0xvY2FsTmFt
ZShIVE1MTmFtZXM6OnN0eWxlKCkpIHx8IGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnRpdGxlKCkp
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmICghZ2V0RG9jdW1lbnQoKS0+aXNIVE1MRG9j
dW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBEb2N1bWVudEZyYWdtZW50SW1wbCAq
ZnJhZ21lbnQgPSBuZXcgRG9jdW1lbnRGcmFnbWVudEltcGwoIGRvY1B0cigpICk7CisgICAgRG9j
dW1lbnRGcmFnbWVudEltcGwgKmZyYWdtZW50ID0gbmV3IERvY3VtZW50RnJhZ21lbnRJbXBsKGRv
Y1B0cigpKTsKICAgICBmcmFnbWVudC0+cmVmKCk7CiAgICAgewogICAgICAgICBIVE1MVG9rZW5p
emVyIHRvayhkb2NQdHIoKSwgZnJhZ21lbnQpOwpAQCAtMzU4LDE0ICszMzgsMTQgQEAgRG9jdW1l
bnRGcmFnbWVudEltcGwgKkhUTUxFbGVtZW50SW1wbDo6YwogICAgIGludCBpZ25vcmVkRXhjZXB0
aW9uQ29kZTsKIAogICAgIC8vIHdlIG5lZWQgdG8gcG9wIDxodG1sPiBhbmQgPGJvZHk+IGVsZW1l
bnRzIGFuZCByZW1vdmUgPGhlYWQ+IHRvCi0gICAgLy8gYWNjb21hZGF0ZSBmb2xrcyBwYXNzaW5n
IGNvbXBsZXRlIEhUTUwgZG9jdW1lbnRzIHRvIG1ha2UgdGhlCisgICAgLy8gYWNjb21tb2RhdGUg
Zm9sa3MgcGFzc2luZyBjb21wbGV0ZSBIVE1MIGRvY3VtZW50cyB0byBtYWtlIHRoZQogICAgIC8v
IGNoaWxkIG9mIGFuIGVsZW1lbnQuCiAKICAgICBOb2RlSW1wbCAqbmV4dE5vZGU7CiAgICAgZm9y
IChOb2RlSW1wbCAqbm9kZSA9IGZyYWdtZW50LT5maXJzdENoaWxkKCk7IG5vZGUgIT0gTlVMTDsg
bm9kZSA9IG5leHROb2RlKSB7CiAgICAgICAgIG5leHROb2RlID0gbm9kZS0+bmV4dFNpYmxpbmco
KTsKIAlub2RlLT5yZWYoKTsKLSAgICAgICAgaWYgKG5vZGUtPmlkKCkgPT0gSURfSFRNTCB8fCBu
b2RlLT5pZCgpID09IElEX0JPRFkpIHsKKyAgICAgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjpodG1sKCkpIHx8IG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpib2R5KCkpKSB7
CiAJICAgIE5vZGVJbXBsICpmaXJzdENoaWxkID0gbm9kZS0+Zmlyc3RDaGlsZCgpOwogICAgICAg
ICAgICAgaWYgKGZpcnN0Q2hpbGQgIT0gTlVMTCkgewogICAgICAgICAgICAgICAgIG5leHROb2Rl
ID0gZmlyc3RDaGlsZDsKQEAgLTM3OSw5ICszNTksOSBAQCBEb2N1bWVudEZyYWdtZW50SW1wbCAq
SFRNTEVsZW1lbnRJbXBsOjpjCiAgICAgICAgICAgICAgICAgY2hpbGQtPmRlcmVmKCk7CiAJICAg
IH0KICAgICAgICAgICAgIGZyYWdtZW50LT5yZW1vdmVDaGlsZChub2RlLCBpZ25vcmVkRXhjZXB0
aW9uQ29kZSk7Ci0JfSBlbHNlIGlmIChub2RlLT5pZCgpID09IElEX0hFQUQpIHsKKwl9IGVsc2Ug
aWYgKG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoZWFkKCkpKQogCSAgICBmcmFnbWVudC0+
cmVtb3ZlQ2hpbGQobm9kZSwgaWdub3JlZEV4Y2VwdGlvbkNvZGUpOwotCX0KKwogICAgICAgICAv
LyBJbXBvcnRhbnQgdG8gZG8gdGhpcyBkZXJlZiBhZnRlciByZW1vdmVDaGlsZCwgYmVjYXVzZSBp
ZiB0aGUgb25seSB0aGluZwogICAgICAgICAvLyBrZWVwaW5nIGEgbm9kZSBhcm91bmQgaXMgYSBw
YXJlbnQgdGhhdCBpcyBub24tMCwgcmVtb3ZlQ2hpbGQgd2lsbCBub3QKICAgICAgICAgLy8gZGVs
ZXRlIHRoZSBub2RlLiBUaGlzIHdvcmtzIGZpbmUgaW4gSmF2YVNjcmlwdCBiZWNhdXNlIHRoZXJl
J3MgYWx3YXlzCkBAIC00MDAsNyArMzgwLDcgQEAgRG9jdW1lbnRGcmFnbWVudEltcGwgKkhUTUxF
bGVtZW50SW1wbDo6YwogCiB2b2lkIEhUTUxFbGVtZW50SW1wbDo6c2V0SW5uZXJIVE1MKGNvbnN0
IERPTVN0cmluZyAmaHRtbCwgaW50ICZleGNlcHRpb24pCiB7Ci0gICAgRG9jdW1lbnRGcmFnbWVu
dEltcGwgKmZyYWdtZW50ID0gY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KCBodG1sICk7CisgICAg
RG9jdW1lbnRGcmFnbWVudEltcGwgKmZyYWdtZW50ID0gY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50
KGh0bWwpOwogICAgIGlmIChmcmFnbWVudCA9PSBOVUxMKSB7CiAJZXhjZXB0aW9uID0gRE9NRXhj
ZXB0aW9uOjpOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI7CiAgICAgICAgIHJldHVybjsKQEAg
LTQxOCw3ICszOTgsNyBAQCB2b2lkIEhUTUxFbGVtZW50SW1wbDo6c2V0T3V0ZXJIVE1MKGNvbnN0
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgSFRNTEVsZW1lbnRJbXBsICpwYXJlbnQgPSBz
dGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwgKj4ocCk7Ci0gICAgRG9jdW1lbnRGcmFnbWVudElt
cGwgKmZyYWdtZW50ID0gcGFyZW50LT5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoIGh0bWwgKTsK
KyAgICBEb2N1bWVudEZyYWdtZW50SW1wbCAqZnJhZ21lbnQgPSBwYXJlbnQtPmNyZWF0ZUNvbnRl
eHR1YWxGcmFnbWVudChodG1sKTsKIAogICAgIGlmICghZnJhZ21lbnQpIHsKIAlleGNlcHRpb24g
PSBET01FeGNlcHRpb246Ok5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUjsKQEAgLTQzNCwyOSAr
NDE0LDE3IEBAIHZvaWQgSFRNTEVsZW1lbnRJbXBsOjpzZXRPdXRlckhUTUwoY29uc3QKIHZvaWQg
SFRNTEVsZW1lbnRJbXBsOjpzZXRJbm5lclRleHQoY29uc3QgRE9NU3RyaW5nICZ0ZXh0LCBpbnQg
JmV4Y2VwdGlvbikKIHsKICAgICAvLyBmb2xsb3dpbmcgdGhlIElFIHNwZWNzLgotICAgIGlmIChl
bmRUYWdSZXF1aXJlbWVudChpZCgpKSA9PSBGT1JCSURERU4pIHsKKyAgICBpZiAoZW5kVGFnUmVx
dWlyZW1lbnQoKSA9PSBUYWdTdGF0dXNGb3JiaWRkZW4pIHsKIAlleGNlcHRpb24gPSBET01FeGNl
cHRpb246Ok5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUjsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIC8vIElFIGRpc2FsbG93cyBpbm5lclRleHQgb24gaW5saW5lIGVsZW1lbnRzLiBJ
IGRvbid0IHNlZSB3aHkgd2Ugc2hvdWxkIGhhdmUgdGhpcyByZXN0cmljdGlvbiwgYXMgb3VyCi0g
ICAgLy8gZGh0bWwgZW5naW5lIGNhbiBjb3BlIHdpdGggaXQuIExhcnMKLSAgICAvL2lmICggaXNJ
bmxpbmUoKSApIHJldHVybiBmYWxzZTsKLSAgICBzd2l0Y2goIGlkKCkgKSB7Ci0gICAgICAgIGNh
c2UgSURfQ09MOgotICAgICAgICBjYXNlIElEX0NPTEdST1VQOgotICAgICAgICBjYXNlIElEX0ZS
QU1FU0VUOgotICAgICAgICBjYXNlIElEX0hFQUQ6Ci0gICAgICAgIGNhc2UgSURfSFRNTDoKLSAg
ICAgICAgY2FzZSBJRF9UQUJMRToKLSAgICAgICAgY2FzZSBJRF9UQk9EWToKLSAgICAgICAgY2Fz
ZSBJRF9URk9PVDoKLSAgICAgICAgY2FzZSBJRF9USEVBRDoKLSAgICAgICAgY2FzZSBJRF9UUjoK
LSAgICAgICAgICAgIGV4Y2VwdGlvbiA9IERPTUV4Y2VwdGlvbjo6Tk9fTU9ESUZJQ0FUSU9OX0FM
TE9XRURfRVJSOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgYnJlYWs7CisgICAgaWYgKGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmNvbCgpKSB8fCBo
YXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpjb2xncm91cCgpKSB8fCBoYXNMb2NhbE5hbWUoSFRNTE5h
bWVzOjpmcmFtZXNldCgpKSB8fAorICAgICAgICBoYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpoZWFk
KCkpIHx8IGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Omh0bWwoKSkgfHwgaGFzTG9jYWxOYW1lKEhU
TUxOYW1lczo6dGFibGUoKSkgfHwgCisgICAgICAgIGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnRi
b2R5KCkpIHx8IGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnRmb290KCkpIHx8IGhhc0xvY2FsTmFt
ZShIVE1MTmFtZXM6OnRoZWFkKCkpIHx8CisgICAgICAgIGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6
OnRyKCkpKSB7CisgICAgICAgIGV4Y2VwdGlvbiA9IERPTUV4Y2VwdGlvbjo6Tk9fTU9ESUZJQ0FU
SU9OX0FMTE9XRURfRVJSOworICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgcmVtb3ZlQ2hp
bGRyZW4oKTsKQEAgLTQ2NiwyNSArNDM0LDE3IEBAIHZvaWQgSFRNTEVsZW1lbnRJbXBsOjpzZXRJ
bm5lclRleHQoY29uc3QKIHZvaWQgSFRNTEVsZW1lbnRJbXBsOjpzZXRPdXRlclRleHQoY29uc3Qg
RE9NU3RyaW5nICZ0ZXh0LCBpbnQgJmV4Y2VwdGlvbikKIHsKICAgICAvLyBmb2xsb3dpbmcgdGhl
IElFIHNwZWNzLgotICAgIGlmKCBlbmRUYWdSZXF1aXJlbWVudChpZCgpKSA9PSBGT1JCSURERU4g
KSB7CisgICAgaWYgKGVuZFRhZ1JlcXVpcmVtZW50KCkgPT0gVGFnU3RhdHVzRm9yYmlkZGVuKSB7
CiAJZXhjZXB0aW9uID0gRE9NRXhjZXB0aW9uOjpOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI7
CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgc3dpdGNoKCBpZCgpICkgewotICAgICAgICBj
YXNlIElEX0NPTDoKLSAgICAgICAgY2FzZSBJRF9DT0xHUk9VUDoKLSAgICAgICAgY2FzZSBJRF9G
UkFNRVNFVDoKLSAgICAgICAgY2FzZSBJRF9IRUFEOgotICAgICAgICBjYXNlIElEX0hUTUw6Ci0g
ICAgICAgIGNhc2UgSURfVEFCTEU6Ci0gICAgICAgIGNhc2UgSURfVEJPRFk6Ci0gICAgICAgIGNh
c2UgSURfVEZPT1Q6Ci0gICAgICAgIGNhc2UgSURfVEhFQUQ6Ci0gICAgICAgIGNhc2UgSURfVFI6
Ci0gICAgICAgICAgICBleGNlcHRpb24gPSBET01FeGNlcHRpb246Ok5PX01PRElGSUNBVElPTl9B
TExPV0VEX0VSUjsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgIGJyZWFrOworCisgICAgaWYgKGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmNvbCgpKSB8
fCBoYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpjb2xncm91cCgpKSB8fCBoYXNMb2NhbE5hbWUoSFRN
TE5hbWVzOjpmcmFtZXNldCgpKSB8fAorICAgICAgICBoYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpo
ZWFkKCkpIHx8IGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Omh0bWwoKSkgfHwgaGFzTG9jYWxOYW1l
KEhUTUxOYW1lczo6dGFibGUoKSkgfHwgCisgICAgICAgIGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6
OnRib2R5KCkpIHx8IGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnRmb290KCkpIHx8IGhhc0xvY2Fs
TmFtZShIVE1MTmFtZXM6OnRoZWFkKCkpIHx8CisgICAgICAgIGhhc0xvY2FsTmFtZShIVE1MTmFt
ZXM6OnRyKCkpKSB7CisgICAgICAgIGV4Y2VwdGlvbiA9IERPTUV4Y2VwdGlvbjo6Tk9fTU9ESUZJ
Q0FUSU9OX0FMTE9XRURfRVJSOworICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgTm9kZUlt
cGwgKnBhcmVudCA9IHBhcmVudE5vZGUoKTsKQEAgLTUyNSwxNyArNDg1LDYgQEAgdm9pZCBIVE1M
RWxlbWVudEltcGw6OnNldE91dGVyVGV4dChjb25zdAogICAgIH0KIH0KIAotCi1ET01TdHJpbmcg
SFRNTEVsZW1lbnRJbXBsOjpuYW1lc3BhY2VVUkkoKSBjb25zdAotewotICAgIC8vIEZvciBIVE1M
IGRvY3VtZW50cywgd2UgdHJlYXQgSFRNTCBlbGVtZW50cyBhcyBoYXZpbmcgbm8gbmFtZXNwYWNl
LiBCdXQgZm9yIFhNTCBkb2N1bWVudHMKLSAgICAvLyB0aGUgZWxlbWVudHMgaGF2ZSB0aGUgbmFt
ZXNwYWNlIGRlZmluZWQgaW4gdGhlIFhIVE1MIHNwZWMKLSAgICBpZiAoZ2V0RG9jdW1lbnQoKS0+
aXNIVE1MRG9jdW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIERPTVN0cmluZygpOwotICAgIGVsc2UK
LSAgICAgICAgcmV0dXJuIFhIVE1MX05BTUVTUEFDRTsKLX0KLQogdm9pZCBIVE1MRWxlbWVudElt
cGw6OmFkZEhUTUxBbGlnbm1lbnQoTWFwcGVkQXR0cmlidXRlSW1wbCogYXR0cikKIHsKICAgICAv
L3FEZWJ1ZygiYWxpZ25tZW50IGlzICVzIiwgYWxpZ25tZW50LnN0cmluZygpLmxhdGluMSgpICk7
CkBAIC02ODIsOSArNjMxLDkgQEAgRE9NU3RyaW5nIEhUTUxFbGVtZW50SW1wbDo6dG9TdHJpbmco
KSBjbwogCURPTVN0cmluZyByZXN1bHQgPSBvcGVuVGFnU3RhcnRUb1N0cmluZygpOwogCXJlc3Vs
dCArPSAiPiI7CiAKLQlpZiAoZW5kVGFnUmVxdWlyZW1lbnQoaWQoKSkgPT0gUkVRVUlSRUQpIHsK
KwlpZiAoZW5kVGFnUmVxdWlyZW1lbnQoKSA9PSBUYWdTdGF0dXNSZXF1aXJlZCkgewogCSAgICBy
ZXN1bHQgKz0gIjwvIjsKLQkgICAgcmVzdWx0ICs9IHRhZ05hbWUoKTsKKwkgICAgcmVzdWx0ICs9
IG5vZGVOYW1lKCk7CiAJICAgIHJlc3VsdCArPSAiPiI7CiAJfQogCkBAIC02OTQsNyArNjQzLDcg
QEAgRE9NU3RyaW5nIEhUTUxFbGVtZW50SW1wbDo6dG9TdHJpbmcoKSBjbwogICAgIHJldHVybiBF
bGVtZW50SW1wbDo6dG9TdHJpbmcoKTsKIH0KIAotRE9NU3RyaW5nIEhUTUxFbGVtZW50SW1wbDo6
aWRET00oKSBjb25zdAorRE9NU3RyaW5nIEhUTUxFbGVtZW50SW1wbDo6aWQoKSBjb25zdAogewog
ICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoQVRUUl9JRCk7CiB9CkBAIC03NDksMTUgKzY5OCwyODcg
QEAgU2hhcmVkUHRyPEhUTUxDb2xsZWN0aW9uSW1wbD4gSFRNTEVsZW1lbgogICAgIHJldHVybiBT
aGFyZWRQdHI8SFRNTENvbGxlY3Rpb25JbXBsPihuZXcgSFRNTENvbGxlY3Rpb25JbXBsKHRoaXMs
IEhUTUxDb2xsZWN0aW9uSW1wbDo6Tk9ERV9DSElMRFJFTikpOwogfQogCi0vLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCisvLyBET00gU2VjdGlvbiAxLjEuMQorYm9vbCBIVE1MRWxlbWVudEltcGw6OmNoaWxk
QWxsb3dlZChOb2RlSW1wbCAqbmV3Q2hpbGQpCit7CisgICAgaWYgKCFFbGVtZW50SW1wbDo6Y2hp
bGRBbGxvd2VkKG5ld0NoaWxkKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi1IVE1MR2VuZXJp
Y0VsZW1lbnRJbXBsOjpIVE1MR2VuZXJpY0VsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIHVz
aG9ydCBpKQotICAgIDogSFRNTEVsZW1lbnRJbXBsKGRvYykKKyAgICAvLyBGb3IgWE1MIGRvY3Vt
ZW50cywgd2UgYXJlIG5vbi12YWxpZGF0aW5nIGFuZCBkbyBub3QgY2hlY2sgYWdhaW5zdCBhIERU
RCwgZXZlbiBmb3IgSFRNTCBlbGVtZW50cy4KKwlpZiAoIWdldERvY3VtZW50KCktPmlzSFRNTERv
Y3VtZW50KCkpCisJCXJldHVybiB0cnVlOworCQorCS8vIEZ1dHVyZS1wcm9vZiBmb3IgWE1MIGNv
bnRlbnQgaW5zaWRlIEhUTUwgZG9jdW1lbnRzICh3ZSBtYXkgYWxsb3cgdGhpcyBzb21lIGRheSku
CisJaWYgKG5ld0NoaWxkLT5pc0VsZW1lbnROb2RlKCkgJiYgIW5ld0NoaWxkLT5pc0hUTUxFbGVt
ZW50KCkpCisJCXJldHVybiB0cnVlOworCisJLy8gRWxlbWVudHMgd2l0aCBmb3JiaWRkZW4gdGFn
IHN0YXR1cyBjYW4gbmV2ZXIgaGF2ZSBjaGlsZHJlbgorCWlmIChlbmRUYWdSZXF1aXJlbWVudCgp
ID09IFRhZ1N0YXR1c0ZvcmJpZGRlbikKKwkJcmV0dXJuIGZhbHNlOworCisJLy8gQ29tbWVudCBu
b2RlcyBhcmUgYWx3YXlzIGFsbG93ZWQuCisJaWYgKG5ld0NoaWxkLT5pc0NvbW1lbnROb2RlKCkp
CisJCXJldHVybiB0cnVlOworCisgICAgLy8gTm93IGNhbGwgY2hlY2tEVEQuCisJcmV0dXJuIGNo
ZWNrRFREKG5ld0NoaWxkKTsKK30KKworLy8gRFREIFN0dWZmCisvLyBUaGlzIHVuZm9ydHVuYXRl
IGZ1bmN0aW9uIGlzIG9ubHkgbmVlZGVkIHdoZW4gY2hlY2tpbmcgYWdhaW5zdCB0aGUgRFRELiAg
T3RoZXIgbGFuZ3VhZ2VzIChsaWtlIFNWRykgd29uJ3QgbmVlZCB0aGlzLgorYm9vbCBIVE1MRWxl
bWVudEltcGw6OmlzUmVjb2duaXplZFRhZ05hbWUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFt
ZSkKK3sKKyAgICBzdGF0aWMgUVB0ckRpY3Q8RE9NU3RyaW5nSW1wbD4gdGFnTGlzdDsKKyAgICBp
ZiAodGFnTGlzdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVz
OjphKCkubG9jYWxOYW1lUHRyKCksIEhUTUxOYW1lczo6YSgpLmxvY2FsTmFtZVB0cigpKTsKKyAg
ICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjphYmJyKCkubG9jYWxOYW1lUHRyKCksIEhU
TUxOYW1lczo6YWJicigpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQo
SFRNTE5hbWVzOjphY3JvbnltKCkubG9jYWxOYW1lUHRyKCksIEhUTUxOYW1lczo6YWNyb255bSgp
LmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjphZGRy
ZXNzKCkubG9jYWxOYW1lUHRyKCksIEhUTUxOYW1lczo6YWRkcmVzcygpLmxvY2FsTmFtZVB0cigp
KTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjphcHBsZXQoKS5sb2NhbE5hbWVQ
dHIoKSwgSFRNTE5hbWVzOjphcHBsZXQoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xp
c3QuaW5zZXJ0KEhUTUxOYW1lczo6YXJlYSgpLmxvY2FsTmFtZVB0cigpLCBIVE1MTmFtZXM6OmFy
ZWEoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6
YigpLmxvY2FsTmFtZVB0cigpLCBIVE1MTmFtZXM6OmIoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAg
ICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6YmFzZSgpLmxvY2FsTmFtZVB0cigpLCBIVE1M
TmFtZXM6OmJhc2UoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhU
TUxOYW1lczo6YmFzZWZvbnQoKS5sb2NhbE5hbWVQdHIoKSwgSFRNTE5hbWVzOjpiYXNlZm9udCgp
LmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpiZG8o
KS5sb2NhbE5hbWVQdHIoKSwgSFRNTE5hbWVzOjpiZG8oKS5sb2NhbE5hbWVQdHIoKSk7CisgICAg
ICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6YmlnKCkubG9jYWxOYW1lUHRyKCksIEhUTUxO
YW1lczo6YmlnKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1M
TmFtZXM6OmJsb2NrcXVvdGUoKS5sb2NhbE5hbWVQdHIoKSwgSFRNTE5hbWVzOjpibG9ja3F1b3Rl
KCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmJv
ZHkoKS5sb2NhbE5hbWVQdHIoKSwgSFRNTE5hbWVzOjpib2R5KCkubG9jYWxOYW1lUHRyKCkpOwor
ICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmJyKCkubG9jYWxOYW1lUHRyKCksIEhU
TUxOYW1lczo6YnIoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhU
TUxOYW1lczo6YnV0dG9uKCkubG9jYWxOYW1lUHRyKCksIEhUTUxOYW1lczo6YnV0dG9uKCkubG9j
YWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmNhbnZhcygp
LmxvY2FsTmFtZVB0cigpLCBIVE1MTmFtZXM6OmNhbnZhcygpLmxvY2FsTmFtZVB0cigpKTsKKyAg
ICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpjYXB0aW9uKCkubG9jYWxOYW1lUHRyKCks
IEhUTUxOYW1lczo6Y2FwdGlvbigpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5p
bnNlcnQoSFRNTE5hbWVzOjpjZW50ZXIoKS5sb2NhbE5hbWVQdHIoKSwgSFRNTE5hbWVzOjpjZW50
ZXIoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6
Y2l0ZSgpLmxvY2FsTmFtZVB0cigpLCBIVE1MTmFtZXM6OmNpdGUoKS5sb2NhbE5hbWVQdHIoKSk7
CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6Y29kZSgpLmxvY2FsTmFtZVB0cigp
LCBIVE1MTmFtZXM6OmNvZGUoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5z
ZXJ0KEhUTUxOYW1lczo6Y29sKCkubG9jYWxOYW1lUHRyKCksIEhUTUxOYW1lczo6Y29sKCkubG9j
YWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmNvbGdyb3Vw
KCkubG9jYWxOYW1lUHRyKCksIEhUTUxOYW1lczo6Y29sZ3JvdXAoKS5sb2NhbE5hbWVQdHIoKSk7
CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6ZGQoKS5sb2NhbE5hbWVQdHIoKSwg
SFRNTE5hbWVzOjpkZCgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQo
SFRNTE5hbWVzOjpkZWwoKS5sb2NhbE5hbWVQdHIoKSwgSFRNTE5hbWVzOjpkZWwoKS5sb2NhbE5h
bWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6ZGZuKCkubG9jYWxO
YW1lUHRyKCksIEhUTUxOYW1lczo6ZGZuKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdM
aXN0Lmluc2VydChIVE1MTmFtZXM6OmRpcigpLmxvY2FsTmFtZVB0cigpLCBIVE1MTmFtZXM6OmRp
cigpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpk
aXYoKS5sb2NhbE5hbWVQdHIoKSwgSFRNTE5hbWVzOjpkaXYoKS5sb2NhbE5hbWVQdHIoKSk7Cisg
ICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6ZGwoKS5sb2NhbE5hbWVQdHIoKSwgSFRN
TE5hbWVzOjpkbCgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRN
TE5hbWVzOjpkdCgpLmxvY2FsTmFtZVB0cigpLCBIVE1MTmFtZXM6OmR0KCkubG9jYWxOYW1lUHRy
KCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmVtKCkubG9jYWxOYW1lUHRy
KCksIEhUTUxOYW1lczo6ZW0oKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5z
ZXJ0KEhUTUxOYW1lczo6ZW1iZWQoKS5sb2NhbE5hbWVQdHIoKSwgSFRNTE5hbWVzOjplbWJlZCgp
LmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpmaWVs
ZHNldCgpLmxvY2FsTmFtZVB0cigpLCBIVE1MTmFtZXM6OmZpZWxkc2V0KCkubG9jYWxOYW1lUHRy
KCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmZvbnQoKS5sb2NhbE5hbWVQ
dHIoKSwgSFRNTE5hbWVzOjpmb250KCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0
Lmluc2VydChIVE1MTmFtZXM6OmZvcm0oKS5sb2NhbE5hbWVQdHIoKSwgSFRNTE5hbWVzOjpmb3Jt
KCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmZy
YW1lKCkubG9jYWxOYW1lUHRyKCksIEhUTUxOYW1lczo6ZnJhbWUoKS5sb2NhbE5hbWVQdHIoKSk7
CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6ZnJhbWVzZXQoKS5sb2NhbE5hbWVQ
dHIoKSwgSFRNTE5hbWVzOjpmcmFtZXNldCgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFn
TGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpoZWFkKCkubG9jYWxOYW1lUHRyKCksIEhUTUxOYW1lczo6
aGVhZCgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVz
OjpoMSgpLmxvY2FsTmFtZVB0cigpLCBIVE1MTmFtZXM6OmgxKCkubG9jYWxOYW1lUHRyKCkpOwor
ICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmgyKCkubG9jYWxOYW1lUHRyKCksIEhU
TUxOYW1lczo6aDIoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhU
TUxOYW1lczo6aDMoKS5sb2NhbE5hbWVQdHIoKSwgSFRNTE5hbWVzOjpoMygpLmxvY2FsTmFtZVB0
cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpoNCgpLmxvY2FsTmFtZVB0
cigpLCBIVE1MTmFtZXM6Omg0KCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmlu
c2VydChIVE1MTmFtZXM6Omg1KCkubG9jYWxOYW1lUHRyKCksIEhUTUxOYW1lczo6aDUoKS5sb2Nh
bE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6aDYoKS5sb2Nh
bE5hbWVQdHIoKSwgSFRNTE5hbWVzOjpoNigpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFn
TGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpocigpLmxvY2FsTmFtZVB0cigpLCBIVE1MTmFtZXM6Omhy
KCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6Omh0
bWwoKS5sb2NhbE5hbWVQdHIoKSwgSFRNTE5hbWVzOjpodG1sKCkubG9jYWxOYW1lUHRyKCkpOwor
ICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmkoKS5sb2NhbE5hbWVQdHIoKSwgSFRN
TE5hbWVzOjppKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1M
TmFtZXM6OmlmcmFtZSgpLmxvY2FsTmFtZVB0cigpLCBIVE1MTmFtZXM6OmlmcmFtZSgpLmxvY2Fs
TmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjppbWcoKS5sb2Nh
bE5hbWVQdHIoKSwgSFRNTE5hbWVzOjppbWcoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRh
Z0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6aW5wdXQoKS5sb2NhbE5hbWVQdHIoKSwgSFRNTE5hbWVz
OjppbnB1dCgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5h
bWVzOjppbnMoKS5sb2NhbE5hbWVQdHIoKSwgSFRNTE5hbWVzOjppbnMoKS5sb2NhbE5hbWVQdHIo
KSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6aXNpbmRleCgpLmxvY2FsTmFt
ZVB0cigpLCBIVE1MTmFtZXM6OmlzaW5kZXgoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRh
Z0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6a2JkKCkubG9jYWxOYW1lUHRyKCksIEhUTUxOYW1lczo6
a2JkKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6
OmtleWdlbigpLmxvY2FsTmFtZVB0cigpLCBIVE1MTmFtZXM6OmtleWdlbigpLmxvY2FsTmFtZVB0
cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpsYWJlbCgpLmxvY2FsTmFt
ZVB0cigpLCBIVE1MTmFtZXM6OmxhYmVsKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdM
aXN0Lmluc2VydChIVE1MTmFtZXM6OmxheWVyKCkubG9jYWxOYW1lUHRyKCksIEhUTUxOYW1lczo6
bGF5ZXIoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1l
czo6bGVnZW5kKCkubG9jYWxOYW1lUHRyKCksIEhUTUxOYW1lczo6bGVnZW5kKCkubG9jYWxOYW1l
UHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmxpKCkubG9jYWxOYW1l
UHRyKCksIEhUTUxOYW1lczo6bGkoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3Qu
aW5zZXJ0KEhUTUxOYW1lczo6bGluaygpLmxvY2FsTmFtZVB0cigpLCBIVE1MTmFtZXM6Omxpbmso
KS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6bWFw
KCkubG9jYWxOYW1lUHRyKCksIEhUTUxOYW1lczo6bWFwKCkubG9jYWxOYW1lUHRyKCkpOworICAg
ICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6Om1hcnF1ZWUoKS5sb2NhbE5hbWVQdHIoKSwg
SFRNTE5hbWVzOjptYXJxdWVlKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmlu
c2VydChIVE1MTmFtZXM6Om1lbnUoKS5sb2NhbE5hbWVQdHIoKSwgSFRNTE5hbWVzOjptZW51KCku
bG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6Om1ldGEo
KS5sb2NhbE5hbWVQdHIoKSwgSFRNTE5hbWVzOjptZXRhKCkubG9jYWxOYW1lUHRyKCkpOworICAg
ICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6Om5vYnIoKS5sb2NhbE5hbWVQdHIoKSwgSFRN
TE5hbWVzOjpub2JyKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChI
VE1MTmFtZXM6Om5vZW1iZWQoKS5sb2NhbE5hbWVQdHIoKSwgSFRNTE5hbWVzOjpub2VtYmVkKCku
bG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6Om5vZnJh
bWVzKCkubG9jYWxOYW1lUHRyKCksIEhUTUxOYW1lczo6bm9mcmFtZXMoKS5sb2NhbE5hbWVQdHIo
KSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6bm9sYXllcigpLmxvY2FsTmFt
ZVB0cigpLCBIVE1MTmFtZXM6Om5vbGF5ZXIoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRh
Z0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6bm9zY3JpcHQoKS5sb2NhbE5hbWVQdHIoKSwgSFRNTE5h
bWVzOjpub3NjcmlwdCgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQo
SFRNTE5hbWVzOjpvYmplY3QoKS5sb2NhbE5hbWVQdHIoKSwgSFRNTE5hbWVzOjpvYmplY3QoKS5s
b2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6b2woKS5s
b2NhbE5hbWVQdHIoKSwgSFRNTE5hbWVzOjpvbCgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAg
dGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpvcHRncm91cCgpLmxvY2FsTmFtZVB0cigpLCBIVE1M
TmFtZXM6Om9wdGdyb3VwKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2Vy
dChIVE1MTmFtZXM6Om9wdGlvbigpLmxvY2FsTmFtZVB0cigpLCBIVE1MTmFtZXM6Om9wdGlvbigp
LmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpwKCku
bG9jYWxOYW1lUHRyKCksIEhUTUxOYW1lczo6cCgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAg
dGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpwYXJhbSgpLmxvY2FsTmFtZVB0cigpLCBIVE1MTmFt
ZXM6OnBhcmFtKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1M
TmFtZXM6OnBsYWludGV4dCgpLmxvY2FsTmFtZVB0cigpLCBIVE1MTmFtZXM6OnBsYWludGV4dCgp
LmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpwcmUo
KS5sb2NhbE5hbWVQdHIoKSwgSFRNTE5hbWVzOjpwcmUoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAg
ICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6cSgpLmxvY2FsTmFtZVB0cigpLCBIVE1MTmFt
ZXM6OnEoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1l
czo6cygpLmxvY2FsTmFtZVB0cigpLCBIVE1MTmFtZXM6OnMoKS5sb2NhbE5hbWVQdHIoKSk7Cisg
ICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6c2FtcCgpLmxvY2FsTmFtZVB0cigpLCBI
VE1MTmFtZXM6OnNhbXAoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0
KEhUTUxOYW1lczo6c2NyaXB0KCkubG9jYWxOYW1lUHRyKCksIEhUTUxOYW1lczo6c2NyaXB0KCku
bG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnNlbGVj
dCgpLmxvY2FsTmFtZVB0cigpLCBIVE1MTmFtZXM6OnNlbGVjdCgpLmxvY2FsTmFtZVB0cigpKTsK
KyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpzbWFsbCgpLmxvY2FsTmFtZVB0cigp
LCBIVE1MTmFtZXM6OnNtYWxsKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmlu
c2VydChIVE1MTmFtZXM6OnNwYW4oKS5sb2NhbE5hbWVQdHIoKSwgSFRNTE5hbWVzOjpzcGFuKCku
bG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnN0cmlr
ZSgpLmxvY2FsTmFtZVB0cigpLCBIVE1MTmFtZXM6OnN0cmlrZSgpLmxvY2FsTmFtZVB0cigpKTsK
KyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpzdHJvbmcoKS5sb2NhbE5hbWVQdHIo
KSwgSFRNTE5hbWVzOjpzdHJvbmcoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3Qu
aW5zZXJ0KEhUTUxOYW1lczo6c3R5bGUoKS5sb2NhbE5hbWVQdHIoKSwgSFRNTE5hbWVzOjpzdHls
ZSgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpz
dWIoKS5sb2NhbE5hbWVQdHIoKSwgSFRNTE5hbWVzOjpzdWIoKS5sb2NhbE5hbWVQdHIoKSk7Cisg
ICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6c3VwKCkubG9jYWxOYW1lUHRyKCksIEhU
TUxOYW1lczo6c3VwKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChI
VE1MTmFtZXM6OnRhYmxlKCkubG9jYWxOYW1lUHRyKCksIEhUTUxOYW1lczo6dGFibGUoKS5sb2Nh
bE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6dGJvZHkoKS5s
b2NhbE5hbWVQdHIoKSwgSFRNTE5hbWVzOjp0Ym9keSgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAg
ICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjp0ZCgpLmxvY2FsTmFtZVB0cigpLCBIVE1MTmFt
ZXM6OnRkKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFt
ZXM6OnRleHRhcmVhKCkubG9jYWxOYW1lUHRyKCksIEhUTUxOYW1lczo6dGV4dGFyZWEoKS5sb2Nh
bE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6dGZvb3QoKS5s
b2NhbE5hbWVQdHIoKSwgSFRNTE5hbWVzOjp0Zm9vdCgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAg
ICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjp0aCgpLmxvY2FsTmFtZVB0cigpLCBIVE1MTmFt
ZXM6OnRoKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFt
ZXM6OnRoZWFkKCkubG9jYWxOYW1lUHRyKCksIEhUTUxOYW1lczo6dGhlYWQoKS5sb2NhbE5hbWVQ
dHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6dGl0bGUoKS5sb2NhbE5h
bWVQdHIoKSwgSFRNTE5hbWVzOjp0aXRsZSgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFn
TGlzdC5pbnNlcnQoSFRNTE5hbWVzOjp0cigpLmxvY2FsTmFtZVB0cigpLCBIVE1MTmFtZXM6OnRy
KCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnR0
KCkubG9jYWxOYW1lUHRyKCksIEhUTUxOYW1lczo6dHQoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAg
ICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6dSgpLmxvY2FsTmFtZVB0cigpLCBIVE1MTmFt
ZXM6OnUoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1l
czo6dWwoKS5sb2NhbE5hbWVQdHIoKSwgSFRNTE5hbWVzOjp1bCgpLmxvY2FsTmFtZVB0cigpKTsK
KyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjp2YXIoKS5sb2NhbE5hbWVQdHIoKSwg
SFRNTE5hbWVzOjp2YXIoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0
KEhUTUxOYW1lczo6d2JyKCkubG9jYWxOYW1lUHRyKCksIEhUTUxOYW1lczo6d2JyKCkubG9jYWxO
YW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnhtcCgpLmxvY2Fs
TmFtZVB0cigpLCBIVE1MTmFtZXM6OnhtcCgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gdGFnTGlzdC5maW5kKHRhZ05hbWUubG9jYWxOYW1lUHRyKCkpOworfQorCisvLyBU
aGUgdGVybXMgaW5saW5lIGFuZCBibG9jayBhcmUgdXNlZCBoZXJlIGxvb3NlbHkuICBEb24ndCBt
YWtlIHRoZSBtaXN0YWtlIG9mIGFzc3VtaW5nIGFsbCBpbmxpbmVzIG9yIGFsbCBibG9ja3MKKy8v
IG5lZWQgdG8gYmUgaW4gdGhlc2UgdHdvIGxpc3RzLgorUVB0ckRpY3Q8RE9NU3RyaW5nSW1wbD4q
IEhUTUxFbGVtZW50SW1wbDo6aW5saW5lVGFnTGlzdCgpIHsKKyAgICBzdGF0aWMgUVB0ckRpY3Q8
RE9NU3RyaW5nSW1wbD4gdGFnTGlzdDsKKyAgICBpZiAodGFnTGlzdC5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjp0dCgpLmxvY2FsTmFtZVB0cigpLCBIVE1M
TmFtZXM6OnR0KCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1M
TmFtZXM6OmkoKS5sb2NhbE5hbWVQdHIoKSwgSFRNTE5hbWVzOjppKCkubG9jYWxOYW1lUHRyKCkp
OworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmIoKS5sb2NhbE5hbWVQdHIoKSwg
SFRNTE5hbWVzOjpiKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChI
VE1MTmFtZXM6OnUoKS5sb2NhbE5hbWVQdHIoKSwgSFRNTE5hbWVzOjp1KCkubG9jYWxOYW1lUHRy
KCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnMoKS5sb2NhbE5hbWVQdHIo
KSwgSFRNTE5hbWVzOjpzKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2Vy
dChIVE1MTmFtZXM6OnN0cmlrZSgpLmxvY2FsTmFtZVB0cigpLCBIVE1MTmFtZXM6OnN0cmlrZSgp
LmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpiaWco
KS5sb2NhbE5hbWVQdHIoKSwgSFRNTE5hbWVzOjpiaWcoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAg
ICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6c21hbGwoKS5sb2NhbE5hbWVQdHIoKSwgSFRN
TE5hbWVzOjpzbWFsbCgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQo
SFRNTE5hbWVzOjplbSgpLmxvY2FsTmFtZVB0cigpLCBIVE1MTmFtZXM6OmVtKCkubG9jYWxOYW1l
UHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnN0cm9uZygpLmxvY2Fs
TmFtZVB0cigpLCBIVE1MTmFtZXM6OnN0cm9uZygpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAg
dGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpkZm4oKS5sb2NhbE5hbWVQdHIoKSwgSFRNTE5hbWVz
OjpkZm4oKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1l
czo6Y29kZSgpLmxvY2FsTmFtZVB0cigpLCBIVE1MTmFtZXM6OmNvZGUoKS5sb2NhbE5hbWVQdHIo
KSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6c2FtcCgpLmxvY2FsTmFtZVB0
cigpLCBIVE1MTmFtZXM6OnNhbXAoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3Qu
aW5zZXJ0KEhUTUxOYW1lczo6a2JkKCkubG9jYWxOYW1lUHRyKCksIEhUTUxOYW1lczo6a2JkKCku
bG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnZhcigp
LmxvY2FsTmFtZVB0cigpLCBIVE1MTmFtZXM6OnZhcigpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAg
ICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpjaXRlKCkubG9jYWxOYW1lUHRyKCksIEhUTUxO
YW1lczo6Y2l0ZSgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRN
TE5hbWVzOjphYmJyKCkubG9jYWxOYW1lUHRyKCksIEhUTUxOYW1lczo6YWJicigpLmxvY2FsTmFt
ZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjphY3JvbnltKCkubG9j
YWxOYW1lUHRyKCksIEhUTUxOYW1lczo6YWNyb255bSgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAg
ICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjphKCkubG9jYWxOYW1lUHRyKCksIEhUTUxOYW1l
czo6YSgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVz
OjpjYW52YXMoKS5sb2NhbE5hbWVQdHIoKSwgSFRNTE5hbWVzOjpjYW52YXMoKS5sb2NhbE5hbWVQ
dHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6aW1nKCkubG9jYWxOYW1l
UHRyKCksIEhUTUxOYW1lczo6aW1nKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0
Lmluc2VydChIVE1MTmFtZXM6OmFwcGxldCgpLmxvY2FsTmFtZVB0cigpLCBIVE1MTmFtZXM6OmFw
cGxldCgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVz
OjpvYmplY3QoKS5sb2NhbE5hbWVQdHIoKSwgSFRNTE5hbWVzOjpvYmplY3QoKS5sb2NhbE5hbWVQ
dHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6ZW1iZWQoKS5sb2NhbE5h
bWVQdHIoKSwgSFRNTE5hbWVzOjplbWJlZCgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFn
TGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpmb250KCkubG9jYWxOYW1lUHRyKCksIEhUTUxOYW1lczo6
Zm9udCgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVz
OjpiYXNlZm9udCgpLmxvY2FsTmFtZVB0cigpLCBIVE1MTmFtZXM6OmJhc2Vmb250KCkubG9jYWxO
YW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmJyKCkubG9jYWxO
YW1lUHRyKCksIEhUTUxOYW1lczo6YnIoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xp
c3QuaW5zZXJ0KEhUTUxOYW1lczo6c2NyaXB0KCkubG9jYWxOYW1lUHRyKCksIEhUTUxOYW1lczo6
c2NyaXB0KCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFt
ZXM6Om1hcCgpLmxvY2FsTmFtZVB0cigpLCBIVE1MTmFtZXM6Om1hcCgpLmxvY2FsTmFtZVB0cigp
KTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpxKCkubG9jYWxOYW1lUHRyKCks
IEhUTUxOYW1lczo6cSgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQo
SFRNTE5hbWVzOjpzdWIoKS5sb2NhbE5hbWVQdHIoKSwgSFRNTE5hbWVzOjpzdWIoKS5sb2NhbE5h
bWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6c3VwKCkubG9jYWxO
YW1lUHRyKCksIEhUTUxOYW1lczo6c3VwKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdM
aXN0Lmluc2VydChIVE1MTmFtZXM6OnNwYW4oKS5sb2NhbE5hbWVQdHIoKSwgSFRNTE5hbWVzOjpz
cGFuKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6
OmJkbygpLmxvY2FsTmFtZVB0cigpLCBIVE1MTmFtZXM6OmJkbygpLmxvY2FsTmFtZVB0cigpKTsK
KyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjppZnJhbWUoKS5sb2NhbE5hbWVQdHIo
KSwgSFRNTE5hbWVzOjppZnJhbWUoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3Qu
aW5zZXJ0KEhUTUxOYW1lczo6aW5wdXQoKS5sb2NhbE5hbWVQdHIoKSwgSFRNTE5hbWVzOjppbnB1
dCgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpr
ZXlnZW4oKS5sb2NhbE5hbWVQdHIoKSwgSFRNTE5hbWVzOjprZXlnZW4oKS5sb2NhbE5hbWVQdHIo
KSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6c2VsZWN0KCkubG9jYWxOYW1l
UHRyKCksIEhUTUxOYW1lczo6c2VsZWN0KCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdM
aXN0Lmluc2VydChIVE1MTmFtZXM6OnRleHRhcmVhKCkubG9jYWxOYW1lUHRyKCksIEhUTUxOYW1l
czo6dGV4dGFyZWEoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhU
TUxOYW1lczo6bGFiZWwoKS5sb2NhbE5hbWVQdHIoKSwgSFRNTE5hbWVzOjpsYWJlbCgpLmxvY2Fs
TmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpidXR0b24oKS5s
b2NhbE5hbWVQdHIoKSwgSFRNTE5hbWVzOjpidXR0b24oKS5sb2NhbE5hbWVQdHIoKSk7CisgICAg
ICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6aW5zKCkubG9jYWxOYW1lUHRyKCksIEhUTUxO
YW1lczo6aW5zKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1M
TmFtZXM6OmRlbCgpLmxvY2FsTmFtZVB0cigpLCBIVE1MTmFtZXM6OmRlbCgpLmxvY2FsTmFtZVB0
cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpub2JyKCkubG9jYWxOYW1l
UHRyKCksIEhUTUxOYW1lczo6bm9icigpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlz
dC5pbnNlcnQoSFRNTE5hbWVzOjp3YnIoKS5sb2NhbE5hbWVQdHIoKSwgSFRNTE5hbWVzOjp3YnIo
KS5sb2NhbE5hbWVQdHIoKSk7CisgICAgfQorICAgIHJldHVybiAmdGFnTGlzdDsKK30KKworUVB0
ckRpY3Q8RE9NU3RyaW5nSW1wbD4qIEhUTUxFbGVtZW50SW1wbDo6YmxvY2tUYWdMaXN0KCkgewor
ICAgIHN0YXRpYyBRUHRyRGljdDxET01TdHJpbmdJbXBsPiB0YWdMaXN0OworICAgIGlmICh0YWdM
aXN0LmlzRW1wdHkoKSkgeworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnAoKS5s
b2NhbE5hbWVQdHIoKSwgSFRNTE5hbWVzOjpwKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0
YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmgxKCkubG9jYWxOYW1lUHRyKCksIEhUTUxOYW1lczo6
aDEoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6
aDIoKS5sb2NhbE5hbWVQdHIoKSwgSFRNTE5hbWVzOjpoMigpLmxvY2FsTmFtZVB0cigpKTsKKyAg
ICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpoMygpLmxvY2FsTmFtZVB0cigpLCBIVE1M
TmFtZXM6OmgzKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1M
TmFtZXM6Omg0KCkubG9jYWxOYW1lUHRyKCksIEhUTUxOYW1lczo6aDQoKS5sb2NhbE5hbWVQdHIo
KSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6aDUoKS5sb2NhbE5hbWVQdHIo
KSwgSFRNTE5hbWVzOjpoNSgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNl
cnQoSFRNTE5hbWVzOjpoNigpLmxvY2FsTmFtZVB0cigpLCBIVE1MTmFtZXM6Omg2KCkubG9jYWxO
YW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnVsKCkubG9jYWxO
YW1lUHRyKCksIEhUTUxOYW1lczo6dWwoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xp
c3QuaW5zZXJ0KEhUTUxOYW1lczo6b2woKS5sb2NhbE5hbWVQdHIoKSwgSFRNTE5hbWVzOjpvbCgp
LmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpkaXIo
KS5sb2NhbE5hbWVQdHIoKSwgSFRNTE5hbWVzOjpkaXIoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAg
ICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6bWVudSgpLmxvY2FsTmFtZVB0cigpLCBIVE1M
TmFtZXM6Om1lbnUoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhU
TUxOYW1lczo6cHJlKCkubG9jYWxOYW1lUHRyKCksIEhUTUxOYW1lczo6cHJlKCkubG9jYWxOYW1l
UHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnBsYWludGV4dCgpLmxv
Y2FsTmFtZVB0cigpLCBIVE1MTmFtZXM6OnBsYWludGV4dCgpLmxvY2FsTmFtZVB0cigpKTsKKyAg
ICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjp4bXAoKS5sb2NhbE5hbWVQdHIoKSwgSFRN
TE5hbWVzOjp4bXAoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhU
TUxOYW1lczo6ZGwoKS5sb2NhbE5hbWVQdHIoKSwgSFRNTE5hbWVzOjpkbCgpLmxvY2FsTmFtZVB0
cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpkaXYoKS5sb2NhbE5hbWVQ
dHIoKSwgSFRNTE5hbWVzOjpkaXYoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3Qu
aW5zZXJ0KEhUTUxOYW1lczo6bGF5ZXIoKS5sb2NhbE5hbWVQdHIoKSwgSFRNTE5hbWVzOjpsYXll
cigpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpj
ZW50ZXIoKS5sb2NhbE5hbWVQdHIoKSwgSFRNTE5hbWVzOjpjZW50ZXIoKS5sb2NhbE5hbWVQdHIo
KSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6bm9zY3JpcHQoKS5sb2NhbE5h
bWVQdHIoKSwgSFRNTE5hbWVzOjpub3NjcmlwdCgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAg
dGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpub2ZyYW1lcygpLmxvY2FsTmFtZVB0cigpLCBIVE1M
TmFtZXM6Om5vZnJhbWVzKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2Vy
dChIVE1MTmFtZXM6OmJsb2NrcXVvdGUoKS5sb2NhbE5hbWVQdHIoKSwgSFRNTE5hbWVzOjpibG9j
a3F1b3RlKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFt
ZXM6OmZvcm0oKS5sb2NhbE5hbWVQdHIoKSwgSFRNTE5hbWVzOjpmb3JtKCkubG9jYWxOYW1lUHRy
KCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmlzaW5kZXgoKS5sb2NhbE5h
bWVQdHIoKSwgSFRNTE5hbWVzOjppc2luZGV4KCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0
YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmhyKCkubG9jYWxOYW1lUHRyKCksIEhUTUxOYW1lczo6
aHIoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6
dGFibGUoKS5sb2NhbE5hbWVQdHIoKSwgSFRNTE5hbWVzOjp0YWJsZSgpLmxvY2FsTmFtZVB0cigp
KTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpmaWVsZHNldCgpLmxvY2FsTmFt
ZVB0cigpLCBIVE1MTmFtZXM6OmZpZWxkc2V0KCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0
YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmFkZHJlc3MoKS5sb2NhbE5hbWVQdHIoKSwgSFRNTE5h
bWVzOjphZGRyZXNzKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChI
VE1MTmFtZXM6OmxpKCkubG9jYWxOYW1lUHRyKCksIEhUTUxOYW1lczo6bGkoKS5sb2NhbE5hbWVQ
dHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6ZGQoKS5sb2NhbE5hbWVQ
dHIoKSwgSFRNTE5hbWVzOjpkZCgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5p
bnNlcnQoSFRNTE5hbWVzOjpkdCgpLmxvY2FsTmFtZVB0cigpLCBIVE1MTmFtZXM6OmR0KCkubG9j
YWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6Om1hcnF1ZWUo
KS5sb2NhbE5hbWVQdHIoKSwgSFRNTE5hbWVzOjptYXJxdWVlKCkubG9jYWxOYW1lUHRyKCkpOwor
ICAgIH0KKyAgICByZXR1cm4gJnRhZ0xpc3Q7Cit9CisKK2Jvb2wgSFRNTEVsZW1lbnRJbXBsOjpp
bkVpdGhlclRhZ0xpc3QoY29uc3QgTm9kZUltcGwqIG5ld0NoaWxkKQogewotICAgIG1fZWxlbWVu
dElkID0gaTsKKyAgICBpZiAobmV3Q2hpbGQtPmlzVGV4dE5vZGUoKSkKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIAorICAgIGlmIChuZXdDaGlsZC0+aXNIVE1MRWxlbWVudCgpKSB7Cisg
ICAgICAgIGNvbnN0IEhUTUxFbGVtZW50SW1wbCogY2hpbGQgPSBzdGF0aWNfY2FzdDxjb25zdCBI
VE1MRWxlbWVudEltcGwqPihuZXdDaGlsZCk7CisgICAgICAgIGlmIChpbmxpbmVUYWdMaXN0KCkt
PmZpbmQoY2hpbGQtPnRhZ05hbWUoKS5sb2NhbE5hbWVQdHIoKSkpCisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgaWYgKGJsb2NrVGFnTGlzdCgpLT5maW5kKGNoaWxkLT50YWdOYW1l
KCkubG9jYWxOYW1lUHRyKCkpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJl
dHVybiAhaXNSZWNvZ25pemVkVGFnTmFtZShjaGlsZC0+dGFnTmFtZSgpKTsgLy8gQWNjZXB0IGN1
c3RvbSBodG1sIHRhZ3MKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU5vZGVJbXBs
OjpJZCBIVE1MR2VuZXJpY0VsZW1lbnRJbXBsOjppZCgpIGNvbnN0Citib29sIEhUTUxFbGVtZW50
SW1wbDo6aW5JbmxpbmVUYWdMaXN0KGNvbnN0IE5vZGVJbXBsKiBuZXdDaGlsZCkKIHsKLSAgICBy
ZXR1cm4gbV9lbGVtZW50SWQ7CisgICAgaWYgKG5ld0NoaWxkLT5pc1RleHROb2RlKCkpCisgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKG5ld0NoaWxkLT5pc0hUTUxFbGVtZW50KCkpIHsK
KyAgICAgICAgY29uc3QgSFRNTEVsZW1lbnRJbXBsKiBjaGlsZCA9IHN0YXRpY19jYXN0PGNvbnN0
IEhUTUxFbGVtZW50SW1wbCo+KG5ld0NoaWxkKTsKKyAgICAgICAgaWYgKGlubGluZVRhZ0xpc3Qo
KS0+ZmluZChjaGlsZC0+dGFnTmFtZSgpLmxvY2FsTmFtZVB0cigpKSkKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICByZXR1cm4gIWlzUmVjb2duaXplZFRhZ05hbWUoY2hpbGQtPnRh
Z05hbWUoKSk7IC8vIEFjY2VwdCBjdXN0b20gaHRtbCB0YWdzCisgICAgfQorCisgICAgcmV0dXJu
IGZhbHNlOworfQorCitib29sIEhUTUxFbGVtZW50SW1wbDo6aW5CbG9ja1RhZ0xpc3QoY29uc3Qg
Tm9kZUltcGwqIG5ld0NoaWxkKQoreworICAgIGlmIChuZXdDaGlsZC0+aXNUZXh0Tm9kZSgpKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIAorICAgIGlmIChuZXdDaGlsZC0+aXNI
VE1MRWxlbWVudCgpKSB7CisgICAgICAgIGNvbnN0IEhUTUxFbGVtZW50SW1wbCogY2hpbGQgPSBz
dGF0aWNfY2FzdDxjb25zdCBIVE1MRWxlbWVudEltcGwqPihuZXdDaGlsZCk7CisgICAgICAgIGlm
IChibG9ja1RhZ0xpc3QoKS0+ZmluZChjaGlsZC0+dGFnTmFtZSgpLmxvY2FsTmFtZVB0cigpKSkK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gIWlzUmVjb2duaXplZFRh
Z05hbWUoY2hpbGQtPnRhZ05hbWUoKSk7IC8vIEFjY2VwdCBjdXN0b20gaHRtbCB0YWdzCisgICAg
fQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEhUTUxFbGVtZW50SW1wbDo6Y2hlY2tE
VEQoY29uc3QgTm9kZUltcGwqIG5ld0NoaWxkKQoreworICAgIGlmIChoYXNUYWdOYW1lKEhUTUxO
YW1lczo6YWRkcmVzcygpKSAmJiBuZXdDaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnAoKSkp
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBpbkVpdGhlclRhZ0xpc3QobmV3Q2hp
bGQpOwogfQpJbmRleDoga2h0bWwvaHRtbC9odG1sX2VsZW1lbnRpbXBsLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sX2VsZW1lbnRpbXBsLmgs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzUKZGlmZiAtdSAtcCAtcjEuMzUga2h0bWwvaHRtbC9o
dG1sX2VsZW1lbnRpbXBsLmgKLS0tIGtodG1sL2h0bWwvaHRtbF9lbGVtZW50aW1wbC5oCTExIE1h
eSAyMDA1IDA1OjQ5OjM0IC0wMDAwCTEuMzUKKysrIGtodG1sL2h0bWwvaHRtbF9lbGVtZW50aW1w
bC5oCTcgSnVsIDIwMDUgMDU6NTg6NTcgLTAwMDAKQEAgLTI1LDI3ICsyNSwyNiBAQAogI2RlZmlu
ZSBIVE1MX0VMRU1FTlRJTVBMX0gKIAogI2luY2x1ZGUgInhtbC9kb21fZWxlbWVudGltcGwuaCIK
LSNpbmNsdWRlIDxxcHRyZGljdC5oPgorI2luY2x1ZGUgImh0bWxuYW1lcy5oIgogCiBuYW1lc3Bh
Y2UgRE9NIHsKIAogY2xhc3MgRG9jdW1lbnRGcmFnbWVudEltcGw7CiBjbGFzcyBET01TdHJpbmc7
CiBjbGFzcyBIVE1MQ29sbGVjdGlvbkltcGw7Ci0gICAgCisKK2VudW0gSFRNTFRhZ1N0YXR1cyB7
IFRhZ1N0YXR1c09wdGlvbmFsLCBUYWdTdGF0dXNSZXF1aXJlZCwgVGFnU3RhdHVzRm9yYmlkZGVu
IH07CisgICAgICAgICAgICAgICAgICAgICAgIAogY2xhc3MgSFRNTEVsZW1lbnRJbXBsIDogcHVi
bGljIFN0eWxlZEVsZW1lbnRJbXBsCiB7CiBwdWJsaWM6Ci0gICAgSFRNTEVsZW1lbnRJbXBsKERv
Y3VtZW50UHRyICpkb2MpOwotCisgICAgSFRNTEVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5h
bWUmIHRhZ05hbWUsIERvY3VtZW50UHRyICpkb2MpOwogICAgIHZpcnR1YWwgfkhUTUxFbGVtZW50
SW1wbCgpOwogCiAgICAgdmlydHVhbCBib29sIGlzSFRNTEVsZW1lbnQoKSBjb25zdCB7IHJldHVy
biB0cnVlOyB9CiAKLSAgICB2aXJ0dWFsIGJvb2wgaXNJbmxpbmUoKSBjb25zdDsKLSAgICAgCi0g
ICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0ID0gMDsKLSAgICAKKwl2aXJ0dWFsIERPTVN0cmluZyBu
b2RlTmFtZSgpIGNvbnN0OworCiAgICAgdmlydHVhbCBib29sIG1hcFRvRW50cnkoSWQgYXR0ciwg
TWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHBh
cnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwqIGF0dHIpOwogCkBAIC01Myw3
ICs1Miw3IEBAIHB1YmxpYzoKIAogICAgIFNoYXJlZFB0cjxIVE1MQ29sbGVjdGlvbkltcGw+IGNo
aWxkcmVuKCk7CiAgICAgCi0gICAgRE9NU3RyaW5nIGlkRE9NKCkgY29uc3Q7IC8vIHJlbmFtZSB0
byBpZCBhZnRlciBlbGltaW5hdGluZyBOb2RlSW1wbDo6aWQgc29tZSBkYXkKKyAgICBET01TdHJp
bmcgaWQoKSBjb25zdDsKICAgICB2b2lkIHNldElkKGNvbnN0IERPTVN0cmluZyAmdmFsdWUpOwog
ICAgIERPTVN0cmluZyB0aXRsZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0VGl0bGUoY29uc3QgRE9N
U3RyaW5nICZ2YWx1ZSk7CkBAIC03Myw4ICs3Miw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldE91
dGVySFRNTChjb25zdCBET01TdHJpbmcgJmh0bWwsIGludCAmZXhjZXB0aW9uKTsKICAgICB2b2lk
IHNldElubmVyVGV4dChjb25zdCBET01TdHJpbmcgJnRleHQsIGludCAmZXhjZXB0aW9uKTsKICAg
ICB2b2lkIHNldE91dGVyVGV4dChjb25zdCBET01TdHJpbmcgJnRleHQsIGludCAmZXhjZXB0aW9u
KTsKLQotICAgIHZpcnR1YWwgRE9NU3RyaW5nIG5hbWVzcGFjZVVSSSgpIGNvbnN0OwogICAgIAog
ICAgIHZpcnR1YWwgYm9vbCBpc0ZvY3VzYWJsZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBp
c0NvbnRlbnRFZGl0YWJsZSgpIGNvbnN0OwpAQCAtODksMjIgKzg2LDI1IEBAIHB1YmxpYzoKIAog
ICAgIHZpcnR1YWwgRE9NU3RyaW5nIHRvU3RyaW5nKCkgY29uc3Q7CiAKKyAgICB2aXJ0dWFsIEhU
TUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCB0
YWdQcmlvcml0eSgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBjaGlsZEFsbG93ZWQoTm9kZUlt
cGwqIG5ld0NoaWxkKTsgLy8gRXJyb3ItY2hlY2tpbmcgZHVyaW5nIHBhcnNpbmcgdGhhdCBjaGVj
a3MgdGhlIERURAorCisgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNoZWNrIHRoZSBEVEQgZm9y
IGEgZ2l2ZW4gY2hpbGQgbm9kZS4KKyAgICB2aXJ0dWFsIGJvb2wgY2hlY2tEVEQoY29uc3QgTm9k
ZUltcGwqIG5ld0NoaWxkKTsKKyAgICBzdGF0aWMgUVB0ckRpY3Q8RE9NU3RyaW5nSW1wbD4qIGlu
bGluZVRhZ0xpc3QoKTsKKyAgICBzdGF0aWMgUVB0ckRpY3Q8RE9NU3RyaW5nSW1wbD4qIGJsb2Nr
VGFnTGlzdCgpOworICAgIHN0YXRpYyBib29sIGluRWl0aGVyVGFnTGlzdChjb25zdCBOb2RlSW1w
bCogbmV3Q2hpbGQpOworICAgIHN0YXRpYyBib29sIGluSW5saW5lVGFnTGlzdChjb25zdCBOb2Rl
SW1wbCogbmV3Q2hpbGQpOworICAgIHN0YXRpYyBib29sIGluQmxvY2tUYWdMaXN0KGNvbnN0IE5v
ZGVJbXBsKiBuZXdDaGlsZCk7CisgICAgc3RhdGljIGJvb2wgaXNSZWNvZ25pemVkVGFnTmFtZShj
b25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lKTsKKwogcHJvdGVjdGVkOgogCiAgICAgLy8gZm9y
IElNRywgT0JKRUNUIGFuZCBBUFBMRVQKICAgICB2b2lkIGFkZEhUTUxBbGlnbm1lbnQoTWFwcGVk
QXR0cmlidXRlSW1wbCogaHRtbEF0dHIpOwogfTsKIAotY2xhc3MgSFRNTEdlbmVyaWNFbGVtZW50
SW1wbCA6IHB1YmxpYyBIVE1MRWxlbWVudEltcGwKLXsKLXB1YmxpYzoKLSAgICBIVE1MR2VuZXJp
Y0VsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIHVzaG9ydCBlbGVtZW50SWQpOwotICAgIHZp
cnR1YWwgSWQgaWQoKSBjb25zdDsKLQotcHJvdGVjdGVkOgotICAgIHVzaG9ydCBtX2VsZW1lbnRJ
ZDsKLX07Ci0KIH0gLy9uYW1lc3BhY2UKIAogI2VuZGlmCkluZGV4OiBraHRtbC9odG1sL2h0bWxf
Zm9ybWltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1s
L2h0bWwvaHRtbF9mb3JtaW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTcwCmRpZmYg
LXUgLXAgLXIxLjE3MCBraHRtbC9odG1sL2h0bWxfZm9ybWltcGwuY3BwCi0tLSBraHRtbC9odG1s
L2h0bWxfZm9ybWltcGwuY3BwCTI5IEp1biAyMDA1IDIwOjE0OjU3IC0wMDAwCTEuMTcwCisrKyBr
aHRtbC9odG1sL2h0bWxfZm9ybWltcGwuY3BwCTcgSnVsIDIwMDUgMDU6NTg6NTkgLTAwMDAKQEAg
LTEwMyw3ICsxMDMsNyBAQCBwcml2YXRlOgogfTsKIAogSFRNTEZvcm1FbGVtZW50SW1wbDo6SFRN
TEZvcm1FbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAgIDogSFRNTEVsZW1lbnRJbXBs
KGRvYykKKyAgICA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6OmZvcm0oKSwgZG9jKQogewog
ICAgIGNvbGxlY3Rpb25JbmZvID0gMDsKICAgICBtX3Bvc3QgPSBmYWxzZTsKQEAgLTEzMCwxMSAr
MTMwLDYgQEAgSFRNTEZvcm1FbGVtZW50SW1wbDo6fkhUTUxGb3JtRWxlbWVudEltcAogICAgICAg
ICBpbWdFbGVtZW50c1tpXS0+bV9mb3JtID0gMDsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxGb3Jt
RWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfRk9STTsKLX0KLQogI2lm
IEFQUExFX0NIQU5HRVMKIAogYm9vbCBIVE1MRm9ybUVsZW1lbnRJbXBsOjpmb3JtV291bGRIYXZl
U2VjdXJlU3VibWlzc2lvbihjb25zdCBET01TdHJpbmcgJnVybCkKQEAgLTE5Miw3ICsxODcsNyBA
QCB2b2lkIEhUTUxGb3JtRWxlbWVudEltcGw6OnN1Ym1pdENsaWNrKCkKIHsKICAgICBib29sIHN1
Ym1pdEZvdW5kID0gZmFsc2U7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZvcm1FbGVt
ZW50cy5jb3VudCgpOyArK2kpIHsKLSAgICAgICAgaWYgKGZvcm1FbGVtZW50c1tpXS0+aWQoKSA9
PSBJRF9JTlBVVCkgeworICAgICAgICBpZiAoZm9ybUVsZW1lbnRzW2ldLT5oYXNMb2NhbE5hbWUo
SFRNTE5hbWVzOjppbnB1dCgpKSkgewogICAgICAgICAgICAgSFRNTElucHV0RWxlbWVudEltcGwg
KmVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50SW1wbCAqPihmb3JtRWxlbWVu
dHNbaV0pOwogICAgICAgICAgICAgaWYgKGVsZW1lbnQtPmlzU3VjY2Vzc2Z1bFN1Ym1pdEJ1dHRv
bigpICYmIGVsZW1lbnQtPnJlbmRlcmVyKCkpIHsKICAgICAgICAgICAgICAgICBzdWJtaXRGb3Vu
ZCA9IHRydWU7CkBAIC0zOTksNyArMzk0LDcgQEAgYm9vbCBIVE1MRm9ybUVsZW1lbnRJbXBsOjpm
b3JtRGF0YShGb3JtRAogCiAgICAgICAgICAgICAgICAgICAgIC8vIGlmIHRoZSBjdXJyZW50IHR5
cGUgaXMgRklMRSwgdGhlbiB3ZSBhbHNvIG5lZWQgdG8KICAgICAgICAgICAgICAgICAgICAgLy8g
aW5jbHVkZSB0aGUgZmlsZW5hbWUKLSAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQtPm5v
ZGVUeXBlKCkgPT0gTm9kZTo6RUxFTUVOVF9OT0RFICYmIGN1cnJlbnQtPmlkKCkgPT0gSURfSU5Q
VVQgJiYKKyAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQtPmhhc0xvY2FsTmFtZShIVE1M
TmFtZXM6OmlucHV0KCkpICYmCiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxI
VE1MSW5wdXRFbGVtZW50SW1wbCo+KGN1cnJlbnQpLT5pbnB1dFR5cGUoKSA9PSBIVE1MSW5wdXRF
bGVtZW50SW1wbDo6RklMRSkKICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
ICAgICAgICAgUVN0cmluZyBwYXRoID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudEltcGwq
PihjdXJyZW50KS0+dmFsdWUoKS5zdHJpbmcoKTsKQEAgLTU0Nyw3ICs1NDIsNyBAQCB2b2lkIEhU
TUxGb3JtRWxlbWVudEltcGw6OnN1Ym1pdCggYm9vbCBhCiAjaWYgQVBQTEVfQ0hBTkdFUwogICAg
ICAgICAvLyBPdXIgYXBwIG5lZWRzIHRvIGdldCBmb3JtIHZhbHVlcyBmb3IgcGFzc3dvcmQgZmll
bGRzIGZvciBkb2luZyBwYXNzd29yZCBhdXRvY29tcGxldGUsCiAgICAgICAgIC8vIHNvIHdlIGFy
ZSBtb3JlIGxlbmllbnQgaW4gcHVzaGluZyB2YWx1ZXMsIGFuZCBsZXQgdGhlIGFwcCBkZWNpZGUg
d2hhdCB0byBzYXZlIHdoZW4uCi0gICAgICAgIGlmIChjdXJyZW50LT5pZCgpID09IElEX0lOUFVU
KSB7CisgICAgICAgIGlmIChjdXJyZW50LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjppbnB1dCgp
KSkgewogICAgICAgICAgICAgSFRNTElucHV0RWxlbWVudEltcGwgKmlucHV0ID0gc3RhdGljX2Nh
c3Q8SFRNTElucHV0RWxlbWVudEltcGwqPihjdXJyZW50KTsKICAgICAgICAgICAgIGlmIChpbnB1
dC0+aW5wdXRUeXBlKCkgPT0gSFRNTElucHV0RWxlbWVudEltcGw6OlRFWFQKICAgICAgICAgICAg
ICAgICB8fCBpbnB1dC0+aW5wdXRUeXBlKCkgPT0gIEhUTUxJbnB1dEVsZW1lbnRJbXBsOjpQQVNT
V09SRApAQCAtNzA5LDcgKzcwNCw3IEBAIHZvaWQgSFRNTEZvcm1FbGVtZW50SW1wbDo6cmFkaW9D
bGlja2VkKCAKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZm9ybUVsZW1lbnRzLmNv
dW50KCk7ICsraSkgewogICAgICAgICBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbCAqY3VycmVu
dCA9IGZvcm1FbGVtZW50c1tpXTsKLSAgICAgICAgaWYgKGN1cnJlbnQtPmlkKCkgPT0gSURfSU5Q
VVQgJiYKKyAgICAgICAgaWYgKGN1cnJlbnQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmlucHV0
KCkpICYmCiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50SW1wbCo+KGN1
cnJlbnQpLT5pbnB1dFR5cGUoKSA9PSBIVE1MSW5wdXRFbGVtZW50SW1wbDo6UkFESU8gJiYKICAg
ICAgICAgICAgIGN1cnJlbnQgIT0gY2FsbGVyICYmIGN1cnJlbnQtPmZvcm0oKSA9PSBjYWxsZXIt
PmZvcm0oKSAmJiBjdXJyZW50LT5uYW1lKCkgPT0gY2FsbGVyLT5uYW1lKCkpIHsKICAgICAgICAg
ICAgIHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnRJbXBsKj4oY3VycmVudCktPnNldENoZWNr
ZWQoZmFsc2UpOwpAQCAtODY0LDggKzg1OSw4IEBAIHZvaWQgSFRNTEZvcm1FbGVtZW50SW1wbDo6
c2V0VGFyZ2V0KGNvbnMKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1IVE1MR2VuZXJpY0Zvcm1F
bGVtZW50SW1wbDo6SFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywg
SFRNTEZvcm1FbGVtZW50SW1wbCAqZikKLSAgICA6IEhUTUxFbGVtZW50SW1wbChkb2MpCitIVE1M
R2VuZXJpY0Zvcm1FbGVtZW50SW1wbDo6SFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnRQdHIgKmRvYywgSFRNTEZvcm1FbGVtZW50
SW1wbCAqZikKKyAgICA6IEhUTUxFbGVtZW50SW1wbCh0YWdOYW1lLCBkb2MpCiB7CiAgICAgbV9k
aXNhYmxlZCA9IG1fcmVhZE9ubHkgPSBmYWxzZTsKICAgICBtX2Rvcm1hbnQgPSBmYWxzZTsKQEAg
LTk2Nyw5ICs5NjIsOCBAQCB2b2lkIEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsOjpyZW1vdmVk
CiBIVE1MRm9ybUVsZW1lbnRJbXBsICpIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbDo6Z2V0Rm9y
bSgpIGNvbnN0CiB7CiAgICAgTm9kZUltcGwgKnAgPSBwYXJlbnROb2RlKCk7Ci0gICAgd2hpbGUo
cCkKLSAgICB7Ci0gICAgICAgIGlmKCBwLT5pZCgpID09IElEX0ZPUk0gKQorICAgIHdoaWxlKHAp
IHsKKyAgICAgICAgaWYgKHAtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpmb3JtKCkpKQogICAgICAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudEltcGwgKj4ocCk7CiAgICAg
ICAgIHAgPSBwLT5wYXJlbnROb2RlKCk7CiAgICAgfQpAQCAtMTE4OSw3ICsxMTgzLDcgQEAgdm9p
ZCBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbDo6c2V0VGFiSQogLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQogCiBIVE1MQnV0dG9uRWxlbWVudEltcGw6OkhUTUxCdXR0b25FbGVtZW50SW1wbChEb2N1bWVu
dFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmKQotICAgIDogSFRNTEdlbmVyaWNGb3Jt
RWxlbWVudEltcGwoZG9jLCBmKQorICAgIDogSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwoSFRN
TE5hbWVzOjpidXR0b24oKSwgZG9jLCBmKQogewogICAgIG1fdHlwZSA9IFNVQk1JVDsKICAgICBt
X2RpcnR5ID0gdHJ1ZTsKQEAgLTEyMDAsMTEgKzExOTQsNiBAQCBIVE1MQnV0dG9uRWxlbWVudElt
cGw6On5IVE1MQnV0dG9uRWxlbWVuCiB7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MQnV0dG9uRWxl
bWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfQlVUVE9OOwotfQotCiBET01T
dHJpbmcgSFRNTEJ1dHRvbkVsZW1lbnRJbXBsOjp0eXBlKCkgY29uc3QKIHsKICAgICByZXR1cm4g
Z2V0QXR0cmlidXRlKEFUVFJfVFlQRSk7CkBAIC0xMzI2LDcgKzEzMTUsNyBAQCB2b2lkIEhUTUxC
dXR0b25FbGVtZW50SW1wbDo6c2V0VmFsdWUoY29uCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhU
TUxGaWVsZFNldEVsZW1lbnRJbXBsOjpIVE1MRmllbGRTZXRFbGVtZW50SW1wbChEb2N1bWVudFB0
ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmKQotICAgOiBIVE1MR2VuZXJpY0Zvcm1FbGVt
ZW50SW1wbChkb2MsIGYpCisgICA6IEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKEhUTUxOYW1l
czo6ZmllbGRzZXQoKSwgZG9jLCBmKQogewogfQogCkBAIC0xMzM0LDE0ICsxMzIzLDE0IEBAIEhU
TUxGaWVsZFNldEVsZW1lbnRJbXBsOjp+SFRNTEZpZWxkU2V0RWwKIHsKIH0KIAotYm9vbCBIVE1M
RmllbGRTZXRFbGVtZW50SW1wbDo6aXNGb2N1c2FibGUoKSBjb25zdAorYm9vbCBIVE1MRmllbGRT
ZXRFbGVtZW50SW1wbDo6Y2hlY2tEVEQoY29uc3QgTm9kZUltcGwqIG5ld0NoaWxkKQogewotICAg
IHJldHVybiBmYWxzZTsKKwlyZXR1cm4gbmV3Q2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjps
ZWdlbmQoKSkgfHwgSFRNTEVsZW1lbnRJbXBsOjpjaGVja0RURChuZXdDaGlsZCk7CiB9CiAKLU5v
ZGVJbXBsOjpJZCBIVE1MRmllbGRTZXRFbGVtZW50SW1wbDo6aWQoKSBjb25zdAorYm9vbCBIVE1M
RmllbGRTZXRFbGVtZW50SW1wbDo6aXNGb2N1c2FibGUoKSBjb25zdAogewotICAgIHJldHVybiBJ
RF9GSUVMRFNFVDsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIERPTVN0cmluZyBIVE1MRmllbGRT
ZXRFbGVtZW50SW1wbDo6dHlwZSgpIGNvbnN0CkBAIC0xMzU3LDggKzEzNDYsMjEgQEAgUmVuZGVy
T2JqZWN0KiBIVE1MRmllbGRTZXRFbGVtZW50SW1wbDo6YwogLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQog
CiBIVE1MSW5wdXRFbGVtZW50SW1wbDo6SFRNTElucHV0RWxlbWVudEltcGwoRG9jdW1lbnRQdHIg
KmRvYywgSFRNTEZvcm1FbGVtZW50SW1wbCAqZikKLSAgICA6IEhUTUxHZW5lcmljRm9ybUVsZW1l
bnRJbXBsKGRvYywgZiksIG1faW1hZ2VMb2FkZXIoMCksIG1fdmFsdWVNYXRjaGVzUmVuZGVyZXIo
ZmFsc2UpCisgICAgOiBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbChIVE1MTmFtZXM6OmlucHV0
KCksIGRvYywgZikKK3sKKyAgICBpbml0KCk7Cit9CisKK0hUTUxJbnB1dEVsZW1lbnRJbXBsOjpI
VE1MSW5wdXRFbGVtZW50SW1wbChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVu
dFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmKQorICAgIDogSFRNTEdlbmVyaWNGb3Jt
RWxlbWVudEltcGwodGFnTmFtZSwgZG9jLCBmKQogeworICAgIGluaXQoKTsKK30KKwordm9pZCBI
VE1MSW5wdXRFbGVtZW50SW1wbDo6aW5pdCgpCit7CisgICAgbV9pbWFnZUxvYWRlciA9IDA7Cisg
ICAgbV92YWx1ZU1hdGNoZXNSZW5kZXJlciA9IGZhbHNlOwogICAgIG1fdHlwZSA9IFRFWFQ7CiAg
ICAgbV9tYXhMZW4gPSAtMTsKICAgICBtX3NpemUgPSAyMDsKQEAgLTEzNzYsOCArMTM3OCw4IEBA
IEhUTUxJbnB1dEVsZW1lbnRJbXBsOjpIVE1MSW5wdXRFbGVtZW50SW0KIAogICAgIG1fbWF4UmVz
dWx0cyA9IC0xOwogCi0gICAgaWYgKCBtX2Zvcm0gKQotICAgICAgICBtX2F1dG9jb21wbGV0ZSA9
IGYtPmF1dG9Db21wbGV0ZSgpOworICAgIGlmIChtX2Zvcm0pCisgICAgICAgIG1fYXV0b2NvbXBs
ZXRlID0gbV9mb3JtLT5hdXRvQ29tcGxldGUoKTsKIH0KIAogSFRNTElucHV0RWxlbWVudEltcGw6
On5IVE1MSW5wdXRFbGVtZW50SW1wbCgpCkBAIC0xMzg2LDExICsxMzg4LDYgQEAgSFRNTElucHV0
RWxlbWVudEltcGw6On5IVE1MSW5wdXRFbGVtZW50SQogICAgIGRlbGV0ZSBtX2ltYWdlTG9hZGVy
OwogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTElucHV0RWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gSURfSU5QVVQ7Ci19Ci0KIHZvaWQgSFRNTElucHV0RWxlbWVudEltcGw6OnNl
dFR5cGUoY29uc3QgRE9NU3RyaW5nJiB0KQogewogICAgIHR5cGVFbnVtIG5ld1R5cGU7CkBAIC0y
NDY4LDcgKzI0NjUsNyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnRJbXBsOjpzZXRVc2VNYXAoY29u
CiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxMYWJlbEVsZW1lbnRJbXBsOjpIVE1MTGFiZWxF
bGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAgIDogSFRNTEVsZW1lbnRJbXBsKGRvYykK
KyAgICA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6OmxhYmVsKCksIGRvYykKIHsKIH0KIApA
QCAtMjQ4MSwxMSArMjQ3OCw2IEBAIGJvb2wgSFRNTExhYmVsRWxlbWVudEltcGw6OmlzRm9jdXNh
YmxlKCkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MTGFiZWxFbGVt
ZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9MQUJFTDsKLX0KLQogdm9pZCBI
VE1MTGFiZWxFbGVtZW50SW1wbDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRl
SW1wbCAqYXR0cikKIHsKICAgICBzd2l0Y2goYXR0ci0+aWQoKSkKQEAgLTI1MzksNyArMjUzMSw3
IEBAIHZvaWQgSFRNTExhYmVsRWxlbWVudEltcGw6OmFjY2Vzc0tleUFjdGkKIEhUTUxGb3JtRWxl
bWVudEltcGwgKkhUTUxMYWJlbEVsZW1lbnRJbXBsOjpmb3JtKCkKIHsKICAgICBmb3IgKE5vZGVJ
bXBsICpwID0gcGFyZW50Tm9kZSgpOyBwICE9IDA7IHAgPSBwLT5wYXJlbnROb2RlKCkpIHsKLSAg
ICAgICAgaWYgKHAtPmlkKCkgPT0gSURfRk9STSkKKyAgICAgICAgaWYgKHAtPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjpmb3JtKCkpKQogICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxG
b3JtRWxlbWVudEltcGwgKj4ocCk7CiAgICAgfQogICAgIApAQCAtMjU2OSw3ICsyNTYxLDcgQEAg
dm9pZCBIVE1MTGFiZWxFbGVtZW50SW1wbDo6c2V0SHRtbEZvcihjbwogLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQogCiBIVE1MTGVnZW5kRWxlbWVudEltcGw6OkhUTUxMZWdlbmRFbGVtZW50SW1wbChEb2N1
bWVudFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmKQotOiBIVE1MR2VuZXJpY0Zvcm1F
bGVtZW50SW1wbChkb2MsIGYpCis6IEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKEhUTUxOYW1l
czo6bGVnZW5kKCksIGRvYywgZikKIHsKIH0KIApAQCAtMjU4MiwxMSArMjU3NCw2IEBAIGJvb2wg
SFRNTExlZ2VuZEVsZW1lbnRJbXBsOjppc0ZvY3VzYWJsZSgKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLU5vZGVJbXBsOjpJZCBIVE1MTGVnZW5kRWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gSURfTEVHRU5EOwotfQotCiBSZW5kZXJPYmplY3QqIEhUTUxMZWdlbmRFbGVtZW50
SW1wbDo6Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqIGFyZW5hLCBSZW5kZXJTdHlsZSogc3R5
bGUpCiB7CiAgICAgcmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRlckxlZ2VuZCh0aGlzKTsKQEAgLTI2
MjEsNyArMjYwOCw3IEBAIEVsZW1lbnRJbXBsICpIVE1MTGVnZW5kRWxlbWVudEltcGw6OmZvcm0K
IHsKICAgICAvLyBDaGVjayBpZiB0aGVyZSdzIGEgZmllbGRzZXQgYmVsb25naW5nIHRvIHRoaXMg
bGVnZW5kLgogICAgIE5vZGVJbXBsICpmaWVsZHNldCA9IHBhcmVudE5vZGUoKTsKLSAgICB3aGls
ZSAoZmllbGRzZXQgJiYgZmllbGRzZXQtPmlkKCkgIT0gSURfRklFTERTRVQpCisgICAgd2hpbGUg
KGZpZWxkc2V0ICYmICFmaWVsZHNldC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZpZWxkc2V0KCkp
KQogICAgICAgICBmaWVsZHNldCA9IGZpZWxkc2V0LT5wYXJlbnROb2RlKCk7CiAgICAgaWYgKCFm
aWVsZHNldCkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0yNjMyLDcgKzI2MTksNyBAQCBFbGVtZW50
SW1wbCAqSFRNTExlZ2VuZEVsZW1lbnRJbXBsOjpmb3JtCiAgICAgd2hpbGUgKChub2RlID0gbm9k
ZS0+dHJhdmVyc2VOZXh0Tm9kZShmaWVsZHNldCkpKSB7CiAgICAgICAgIGlmIChub2RlLT5pc0hU
TUxFbGVtZW50KCkpIHsKICAgICAgICAgICAgIEhUTUxFbGVtZW50SW1wbCAqZWxlbWVudCA9IHN0
YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCAqPihub2RlKTsKLSAgICAgICAgICAgIGlmIChlbGVt
ZW50LT5pZCgpICE9IElEX0xFR0VORCAmJiBlbGVtZW50LT5pc0dlbmVyaWNGb3JtRWxlbWVudCgp
KQorICAgICAgICAgICAgaWYgKCFlbGVtZW50LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpsZWdl
bmQoKSkgJiYgZWxlbWVudC0+aXNHZW5lcmljRm9ybUVsZW1lbnQoKSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gZWxlbWVudDsKICAgICAgICAgfQogICAgIH0KQEAgLTI2NTUsOCArMjY0MiwyMCBA
QCB2b2lkIEhUTUxMZWdlbmRFbGVtZW50SW1wbDo6YWNjZXNzS2V5QWN0CiAvLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCiAKIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6SFRNTFNlbGVjdEVsZW1lbnRJbXBsKERv
Y3VtZW50UHRyICpkb2MsIEhUTUxGb3JtRWxlbWVudEltcGwgKmYpCi0gICAgOiBIVE1MR2VuZXJp
Y0Zvcm1FbGVtZW50SW1wbChkb2MsIGYpLCBtX29wdGlvbnMoMCkKKyAgICA6IEhUTUxHZW5lcmlj
Rm9ybUVsZW1lbnRJbXBsKEhUTUxOYW1lczo6c2VsZWN0KCksIGRvYywgZiksIG1fb3B0aW9ucygw
KQogeworICAgIGluaXQoKTsKK30KKworSFRNTFNlbGVjdEVsZW1lbnRJbXBsOjpIVE1MU2VsZWN0
RWxlbWVudEltcGwoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnRQdHIgKmRv
YywgSFRNTEZvcm1FbGVtZW50SW1wbCAqZikKKyAgICA6IEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJ
bXBsKHRhZ05hbWUsIGRvYywgZiksIG1fb3B0aW9ucygwKQoreworICAgIGluaXQoKTsKK30KKwor
dm9pZCBIVE1MU2VsZWN0RWxlbWVudEltcGw6OmluaXQoKQoreworICAgIG1fb3B0aW9ucyA9IDA7
CiAgICAgbV9tdWx0aXBsZSA9IGZhbHNlOwogICAgIG1fcmVjYWxjTGlzdEl0ZW1zID0gZmFsc2U7
CiAgICAgLy8gMCBtZWFucyBpbnZhbGlkIChpLmUuIG5vdCBzZXQpCkBAIC0yNjczLDkgKzI2NzIs
MTAgQEAgSFRNTFNlbGVjdEVsZW1lbnRJbXBsOjp+SFRNTFNlbGVjdEVsZW1lbgogICAgIH0KIH0K
IAotTm9kZUltcGw6OklkIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6aWQoKSBjb25zdAorYm9vbCBI
VE1MU2VsZWN0RWxlbWVudEltcGw6OmNoZWNrRFREKGNvbnN0IE5vZGVJbXBsKiBuZXdDaGlsZCkK
IHsKLSAgICByZXR1cm4gSURfU0VMRUNUOworCXJldHVybiBuZXdDaGlsZC0+aXNUZXh0Tm9kZSgp
IHx8IG5ld0NoaWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpIHx8IG5ld0NoaWxk
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b3B0Z3JvdXAoKSkgfHwKKwkJICAgbmV3Q2hpbGQtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjpzY3JpcHQoKSk7CiB9CiAKIHZvaWQgSFRNTFNlbGVjdEVsZW1l
bnRJbXBsOjpyZWNhbGNTdHlsZSggU3R5bGVDaGFuZ2UgY2ggKQpAQCAtMjY5OSw3ICsyNjk5LDcg
QEAgbG9uZyBIVE1MU2VsZWN0RWxlbWVudEltcGw6OnNlbGVjdGVkSW5kZQogICAgIHVpbnQgbyA9
IDA7CiAgICAgUU1lbUFycmF5PEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKj4gaXRlbXMgPSBs
aXN0SXRlbXMoKTsKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGl0ZW1zLnNpemUo
KTsgaSsrKSB7Ci0gICAgICAgIGlmIChpdGVtc1tpXS0+aWQoKSA9PSBJRF9PUFRJT04pIHsKKyAg
ICAgICAgaWYgKGl0ZW1zW2ldLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvcHRpb24oKSkpIHsK
ICAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudEltcGwqPihpdGVt
c1tpXSktPnNlbGVjdGVkKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG87CiAgICAgICAgICAg
ICBvKys7CkBAIC0yNzE1LDcgKzI3MTUsNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6
c2V0U2VsZWN0ZWRJCiAgICAgUU1lbUFycmF5PEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKj4g
aXRlbXMgPSBsaXN0SXRlbXMoKTsKICAgICBpbnQgbGlzdEluZGV4OwogICAgIGZvciAobGlzdElu
ZGV4ID0gMDsgbGlzdEluZGV4IDwgaW50KGl0ZW1zLnNpemUoKSk7IGxpc3RJbmRleCsrKSB7Ci0g
ICAgICAgIGlmIChpdGVtc1tsaXN0SW5kZXhdLT5pZCgpID09IElEX09QVElPTikKKyAgICAgICAg
aWYgKGl0ZW1zW2xpc3RJbmRleF0tPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9wdGlvbigpKSkK
ICAgICAgICAgICAgIHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50SW1wbCo+KGl0ZW1zW2xp
c3RJbmRleF0pLT5zZXRTZWxlY3RlZChmYWxzZSk7CiAgICAgfQogICAgIGxpc3RJbmRleCA9IG9w
dGlvblRvTGlzdEluZGV4KGluZGV4KTsKQEAgLTI3MzEsNyArMjczMSw3IEBAIGxvbmcgSFRNTFNl
bGVjdEVsZW1lbnRJbXBsOjpsZW5ndGgoKSBjb24KICAgICB1aW50IGk7CiAgICAgUU1lbUFycmF5
PEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKj4gaXRlbXMgPSBsaXN0SXRlbXMoKTsKICAgICBm
b3IgKGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgaWYgKGl0ZW1zW2ld
LT5pZCgpID09IElEX09QVElPTikKKyAgICAgICAgaWYgKGl0ZW1zW2ldLT5oYXNMb2NhbE5hbWUo
SFRNTE5hbWVzOjpvcHRpb24oKSkpCiAgICAgICAgICAgICBsZW4rKzsKICAgICB9CiAgICAgcmV0
dXJuIGxlbjsKQEAgLTI3MzksNyArMjczOSw3IEBAIGxvbmcgSFRNTFNlbGVjdEVsZW1lbnRJbXBs
OjpsZW5ndGgoKSBjb24KIAogdm9pZCBIVE1MU2VsZWN0RWxlbWVudEltcGw6OmFkZCggSFRNTEVs
ZW1lbnRJbXBsICplbGVtZW50LCBIVE1MRWxlbWVudEltcGwgKmJlZm9yZSApCiB7Ci0gICAgaWYg
KCFlbGVtZW50IHx8IGVsZW1lbnQtPmlkKCkgIT0gSURfT1BUSU9OKQorICAgIGlmICghZWxlbWVu
dCB8fCAhZWxlbWVudC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpKQogICAgICAg
ICByZXR1cm47CiAKICAgICBpbnQgZXhjZXB0aW9uY29kZSA9IDA7CkBAIC0yNzczLDEzICsyNzcz
LDEyIEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnRJbXBsOjpmb2N1cygpCiAgICAgZ2V0RG9jdW1l
bnQoKS0+c2V0Rm9jdXNOb2RlKHRoaXMpOwogfQogCi1ET01TdHJpbmcgSFRNTFNlbGVjdEVsZW1l
bnRJbXBsOjp2YWx1ZSggKQorRE9NU3RyaW5nIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6dmFsdWUo
KQogewogICAgIHVpbnQgaTsKICAgICBRTWVtQXJyYXk8SFRNTEdlbmVyaWNGb3JtRWxlbWVudElt
cGwqPiBpdGVtcyA9IGxpc3RJdGVtcygpOwogICAgIGZvciAoaSA9IDA7IGkgPCBpdGVtcy5zaXpl
KCk7IGkrKykgewotICAgICAgICBpZiAoIGl0ZW1zW2ldLT5pZCgpID09IElEX09QVElPTgotICAg
ICAgICAgICAgJiYgc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnRJbXBsKj4oaXRlbXNbaV0p
LT5zZWxlY3RlZCgpKQorICAgICAgICBpZiAoaXRlbXNbaV0tPmhhc0xvY2FsTmFtZShIVE1MTmFt
ZXM6Om9wdGlvbigpKSAmJiBzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudEltcGwqPihpdGVt
c1tpXSktPnNlbGVjdGVkKCkpCiAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTE9w
dGlvbkVsZW1lbnRJbXBsKj4oaXRlbXNbaV0pLT52YWx1ZSgpOwogICAgIH0KICAgICByZXR1cm4g
RE9NU3RyaW5nKCIiKTsKQEAgLTI3OTMsMTMgKzI3OTIsMTMgQEAgdm9pZCBIVE1MU2VsZWN0RWxl
bWVudEltcGw6OnNldFZhbHVlKGNvbgogICAgIC8vIGFuZCBtYWtlIGl0IHRoZSBjdXJyZW50IHNl
bGVjdGlvbi4KICAgICBRTWVtQXJyYXk8SFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwqPiBpdGVt
cyA9IGxpc3RJdGVtcygpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpdGVtcy5zaXpl
KCk7IGkrKykKLSAgICAgICAgaWYgKGl0ZW1zW2ldLT5pZCgpID09IElEX09QVElPTiAmJiBzdGF0
aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudEltcGwqPihpdGVtc1tpXSktPnZhbHVlKCkgPT0gdmFs
dWUpIHsKKyAgICAgICAgaWYgKGl0ZW1zW2ldLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvcHRp
b24oKSkgJiYgc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnRJbXBsKj4oaXRlbXNbaV0pLT52
YWx1ZSgpID09IHZhbHVlKSB7CiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxl
bWVudEltcGwqPihpdGVtc1tpXSktPnNldFNlbGVjdGVkKHRydWUpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiB9CiAKLVFTdHJpbmcgSFRNTFNlbGVjdEVsZW1lbnRJbXBsOjpzdGF0
ZSggKQorUVN0cmluZyBIVE1MU2VsZWN0RWxlbWVudEltcGw6OnN0YXRlKCkKIHsKICNpZiAhQVBQ
TEVfQ0hBTkdFUwogICAgIFFTdHJpbmcgc3RhdGU7CkBAIC0yODEyLDcgKzI4MTEsNyBAQCBRU3Ry
aW5nIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6c3RhdGUoICkKICAgICBRQ2hhciBzdGF0ZUNoYXJz
W2xdOwogICAgIAogICAgIGZvcihpbnQgaSA9IDA7IGkgPCBsOyBpKyspCi0gICAgICAgIGlmKGl0
ZW1zW2ldLT5pZCgpID09IElEX09QVElPTiAmJiBzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVu
dEltcGwqPihpdGVtc1tpXSktPnNlbGVjdGVkKCkpCisgICAgICAgIGlmKGl0ZW1zW2ldLT5oYXNM
b2NhbE5hbWUoSFRNTE5hbWVzOjpvcHRpb24oKSkgJiYgc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVs
ZW1lbnRJbXBsKj4oaXRlbXNbaV0pLT5zZWxlY3RlZCgpKQogICAgICAgICAgICAgc3RhdGVDaGFy
c1tpXSA9ICdYJzsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgc3RhdGVDaGFyc1tpXSA9ICcu
JzsKQEAgLTI4NDksNyArMjg0OCw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnRJbXBsOjpyZXN0
b3JlU3RhdGUKIAogICAgIGludCBsID0gaXRlbXMuY291bnQoKTsKICAgICBmb3IoaW50IGkgPSAw
OyBpIDwgbDsgaSsrKSB7Ci0gICAgICAgIGlmKGl0ZW1zW2ldLT5pZCgpID09IElEX09QVElPTikg
eworICAgICAgICBpZihpdGVtc1tpXS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkp
KSB7CiAgICAgICAgICAgICBIVE1MT3B0aW9uRWxlbWVudEltcGwqIG9lID0gc3RhdGljX2Nhc3Q8
SFRNTE9wdGlvbkVsZW1lbnRJbXBsKj4oaXRlbXNbaV0pOwogICAgICAgICAgICAgb2UtPnNldFNl
bGVjdGVkKHN0YXRlW2ldID09ICdYJyk7CiAgICAgICAgIH0KQEAgLTI5NDEsNyArMjk0MCw3IEBA
IGJvb2wgSFRNTFNlbGVjdEVsZW1lbnRJbXBsOjphcHBlbmRGb3JtRGEKIAogICAgIHVpbnQgaTsK
ICAgICBmb3IgKGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgaWYgKGl0
ZW1zW2ldLT5pZCgpID09IElEX09QVElPTikgeworICAgICAgICBpZiAoaXRlbXNbaV0tPmhhc0xv
Y2FsTmFtZShIVE1MTmFtZXM6Om9wdGlvbigpKSkgewogICAgICAgICAgICAgSFRNTE9wdGlvbkVs
ZW1lbnRJbXBsICpvcHRpb24gPSBzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudEltcGwqPihp
dGVtc1tpXSk7CiAgICAgICAgICAgICBpZiAob3B0aW9uLT5zZWxlY3RlZCgpKSB7CiAgICAgICAg
ICAgICAgICAgZW5jb2RlZF92YWx1ZXMuYXBwZW5kRGF0YShuYW1lKCksIG9wdGlvbi0+dmFsdWUo
KSk7CkBAIC0yOTU0LDcgKzI5NTMsNyBAQCBib29sIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6YXBw
ZW5kRm9ybURhCiAgICAgLy8gaW4gYW55IGNhc2UuIG90aGVyd2lzZSB3ZSBoYXZlIG5vIGNvbnNp
c3RlbmN5IHdpdGggdGhlIERPTSBpbnRlcmZhY2UuIEZJWE1FIQogICAgIC8vIHdlIHJldHVybiB0
aGUgZmlyc3Qgb25lIGlmIGl0IHdhcyBhIGNvbWJvYm94IHNlbGVjdAogICAgIGlmICghc3VjY2Vz
c2Z1bCAmJiAhbV9tdWx0aXBsZSAmJiBtX3NpemUgPD0gMSAmJiBpdGVtcy5zaXplKCkgJiYKLSAg
ICAgICAgKGl0ZW1zWzBdLT5pZCgpID09IElEX09QVElPTikgKSB7CisgICAgICAgIChpdGVtc1sw
XS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpKSkgewogICAgICAgICBIVE1MT3B0
aW9uRWxlbWVudEltcGwgKm9wdGlvbiA9IHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50SW1w
bCo+KGl0ZW1zWzBdKTsKICAgICAgICAgaWYgKG9wdGlvbi0+dmFsdWUoKS5pc051bGwoKSkKICAg
ICAgICAgICAgIGVuY29kZWRfdmFsdWVzLmFwcGVuZERhdGEobmFtZSgpLCBvcHRpb24tPnRleHQo
KS5zdHJpbmcoKS5zdHJpcFdoaXRlU3BhY2UoKSk7CkBAIC0yOTc3LDcgKzI5NzYsNyBAQCBpbnQg
SFRNTFNlbGVjdEVsZW1lbnRJbXBsOjpvcHRpb25Ub0xpc3RJCiAgICAgZm9yICg7CiAgICAgICAg
ICBvcHRpb25JbmRleDIgPCBpbnQoaXRlbXMuc2l6ZSgpKSAmJiBvcHRpb25JbmRleDIgPD0gb3B0
aW9uSW5kZXg7CiAgICAgICAgICBsaXN0SW5kZXgrKykgeyAvLyBub3QgYSB0eXBvIQotICAgICAg
ICBpZiAoaXRlbXNbbGlzdEluZGV4XS0+aWQoKSA9PSBJRF9PUFRJT04pCisgICAgICAgIGlmIChp
dGVtc1tsaXN0SW5kZXhdLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvcHRpb24oKSkpCiAgICAg
ICAgICAgICBvcHRpb25JbmRleDIrKzsKICAgICB9CiAgICAgbGlzdEluZGV4LS07CkBAIC0yOTg4
LDEzICsyOTg3LDEzIEBAIGludCBIVE1MU2VsZWN0RWxlbWVudEltcGw6Omxpc3RUb09wdGlvbkkK
IHsKICAgICBRTWVtQXJyYXk8SFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwqPiBpdGVtcyA9IGxp
c3RJdGVtcygpOwogICAgIGlmIChsaXN0SW5kZXggPCAwIHx8IGxpc3RJbmRleCA+PSBpbnQoaXRl
bXMuc2l6ZSgpKSB8fAotICAgICAgICBpdGVtc1tsaXN0SW5kZXhdLT5pZCgpICE9IElEX09QVElP
TikKKyAgICAgICAgIWl0ZW1zW2xpc3RJbmRleF0tPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9w
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgaW50IG9wdGlvbkluZGV4ID0gMDsg
Ly8gYWN0dWFsIGluZGV4IG9mIG9wdGlvbiBub3QgY291bnRpbmcgT1BUR1JPVVAgZW50cmllcyB0
aGF0IG1heSBiZSBpbiBsaXN0CiAgICAgaW50IGk7CiAgICAgZm9yIChpID0gMDsgaSA8IGxpc3RJ
bmRleDsgaSsrKQotICAgICAgICBpZiAoaXRlbXNbaV0tPmlkKCkgPT0gSURfT1BUSU9OKQorICAg
ICAgICBpZiAoaXRlbXNbaV0tPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9wdGlvbigpKSkKICAg
ICAgICAgICAgIG9wdGlvbkluZGV4Kys7CiAgICAgcmV0dXJuIG9wdGlvbkluZGV4OwogfQpAQCAt
MzAyMCwxMyArMzAxOSwxMyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6cmVjYWxjTGlz
dEl0CiAgICAgbV9saXN0SXRlbXMucmVzaXplKDApOwogICAgIEhUTUxPcHRpb25FbGVtZW50SW1w
bCogZm91bmRTZWxlY3RlZCA9IDA7CiAgICAgd2hpbGUoY3VycmVudCkgewotICAgICAgICBpZiAo
Y3VycmVudC0+aWQoKSA9PSBJRF9PUFRHUk9VUCAmJiBjdXJyZW50LT5maXJzdENoaWxkKCkpIHsK
KyAgICAgICAgaWYgKGN1cnJlbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvcHRncm91cCgpKSAm
JiBjdXJyZW50LT5maXJzdENoaWxkKCkpIHsKICAgICAgICAgICAgIC8vICMjIyB3aGF0IGlmIG9w
dGdyb3VwIGNvbnRhaW5zIGp1c3QgY29tbWVudHM/IGRvbid0IHdhbnQgb25lIG9mIG5vIG9wdGlv
bnMgaW4gaXQuLi4KICAgICAgICAgICAgIG1fbGlzdEl0ZW1zLnJlc2l6ZShtX2xpc3RJdGVtcy5z
aXplKCkrMSk7CiAgICAgICAgICAgICBtX2xpc3RJdGVtc1ttX2xpc3RJdGVtcy5zaXplKCktMV0g
PSBzdGF0aWNfY2FzdDxIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbCo+KGN1cnJlbnQpOwogICAg
ICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQtPmZpcnN0Q2hpbGQoKTsKICAgICAgICAgfQotICAg
ICAgICBpZiAoY3VycmVudC0+aWQoKSA9PSBJRF9PUFRJT04pIHsKKyAgICAgICAgaWYgKGN1cnJl
bnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvcHRpb24oKSkpIHsKICAgICAgICAgICAgIG1fbGlz
dEl0ZW1zLnJlc2l6ZShtX2xpc3RJdGVtcy5zaXplKCkrMSk7CiAgICAgICAgICAgICBtX2xpc3RJ
dGVtc1ttX2xpc3RJdGVtcy5zaXplKCktMV0gPSBzdGF0aWNfY2FzdDxIVE1MR2VuZXJpY0Zvcm1F
bGVtZW50SW1wbCo+KGN1cnJlbnQpOwogICAgICAgICAgICAgaWYgKCFmb3VuZFNlbGVjdGVkICYm
ICFtX211bHRpcGxlICYmIG1fc2l6ZSA8PSAxKSB7CkBAIC0zMDY4LDcgKzMwNjcsNyBAQCB2b2lk
IEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6cmVzZXQoKQogICAgIFFNZW1BcnJheTxIVE1MR2VuZXJp
Y0Zvcm1FbGVtZW50SW1wbCo+IGl0ZW1zID0gbGlzdEl0ZW1zKCk7CiAgICAgdWludCBpOwogICAg
IGZvciAoaSA9IDA7IGkgPCBpdGVtcy5zaXplKCk7IGkrKykgewotICAgICAgICBpZiAoaXRlbXNb
aV0tPmlkKCkgPT0gSURfT1BUSU9OKSB7CisgICAgICAgIGlmIChpdGVtc1tpXS0+aGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpKSB7CiAgICAgICAgICAgICBIVE1MT3B0aW9uRWxlbWVu
dEltcGwgKm9wdGlvbiA9IHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50SW1wbCo+KGl0ZW1z
W2ldKTsKICAgICAgICAgICAgIGJvb2wgc2VsZWN0ZWQgPSAoIW9wdGlvbi0+Z2V0QXR0cmlidXRl
KEFUVFJfU0VMRUNURUQpLmlzTnVsbCgpKTsKICAgICAgICAgICAgIG9wdGlvbi0+c2V0U2VsZWN0
ZWQoc2VsZWN0ZWQpOwpAQCAtMzA4Niw3ICszMDg1LDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVu
dEltcGw6Om5vdGlmeU9wdGlvbgogICAgICAgICBRTWVtQXJyYXk8SFRNTEdlbmVyaWNGb3JtRWxl
bWVudEltcGwqPiBpdGVtcyA9IGxpc3RJdGVtcygpOwogICAgICAgICB1aW50IGk7CiAgICAgICAg
IGZvciAoaSA9IDA7IGkgPCBpdGVtcy5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgaWYgKGl0
ZW1zW2ldLT5pZCgpID09IElEX09QVElPTikKKyAgICAgICAgICAgIGlmIChpdGVtc1tpXS0+aGFz
TG9jYWxOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpKQogICAgICAgICAgICAgICAgIHN0YXRpY19j
YXN0PEhUTUxPcHRpb25FbGVtZW50SW1wbCo+KGl0ZW1zW2ldKS0+bV9zZWxlY3RlZCA9IChpdGVt
c1tpXSA9PSBzZWxlY3RlZE9wdGlvbik7CiAgICAgICAgIH0KICAgICB9CkBAIC0zMTMzLDcgKzMx
MzIsNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6c2V0U2l6ZShsb25nCiAvLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCiAKIEhUTUxLZXlnZW5FbGVtZW50SW1wbDo6SFRNTEtleWdlbkVsZW1lbnRJ
bXBsKERvY3VtZW50UHRyKiBkb2MsIEhUTUxGb3JtRWxlbWVudEltcGwqIGYpCi0gICAgOiBIVE1M
U2VsZWN0RWxlbWVudEltcGwoZG9jLCBmKQorICAgIDogSFRNTFNlbGVjdEVsZW1lbnRJbXBsKEhU
TUxOYW1lczo6a2V5Z2VuKCksIGRvYywgZikKIHsKICAgICBRU3RyaW5nTGlzdCBrZXlzID0gS1NT
TEtleUdlbjo6c3VwcG9ydGVkS2V5U2l6ZXMoKTsKICAgICBmb3IgKFFTdHJpbmdMaXN0OjpJdGVy
YXRvciBpID0ga2V5cy5iZWdpbigpOyBpICE9IGtleXMuZW5kKCk7ICsraSkgewpAQCAtMzE0Mywx
MSArMzE0Miw2IEBAIEhUTUxLZXlnZW5FbGVtZW50SW1wbDo6SFRNTEtleWdlbkVsZW1lbnQKICAg
ICB9CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MS2V5Z2VuRWxlbWVudEltcGw6OmlkKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gSURfS0VZR0VOOwotfQotCiBET01TdHJpbmcgSFRNTEtleWdlbkVsZW1l
bnRJbXBsOjp0eXBlKCkgY29uc3QKIHsKICAgICByZXR1cm4gImtleWdlbiI7CkBAIC0zMjAyLDcg
KzMxOTYsNyBAQCBib29sIEhUTUxLZXlnZW5FbGVtZW50SW1wbDo6YXBwZW5kRm9ybURhCiAvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxPcHRHcm91cEVsZW1lbnRJbXBsOjpIVE1MT3B0R3JvdXBF
bGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmKQotICAg
IDogSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwoZG9jLCBmKQorICAgIDogSFRNTEdlbmVyaWNG
b3JtRWxlbWVudEltcGwoSFRNTE5hbWVzOjpvcHRncm91cCgpLCBkb2MsIGYpCiB7CiB9CiAKQEAg
LTMyMTUsMTEgKzMyMDksNiBAQCBib29sIEhUTUxPcHRHcm91cEVsZW1lbnRJbXBsOjppc0ZvY3Vz
YWJsCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTE9wdEdyb3VwRWxl
bWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfT1BUR1JPVVA7Ci19Ci0KIERP
TVN0cmluZyBIVE1MT3B0R3JvdXBFbGVtZW50SW1wbDo6dHlwZSgpIGNvbnN0CiB7CiAgICAgcmV0
dXJuICJvcHRncm91cCI7CkBAIC0zMjczLDcgKzMyNjIsNyBAQCB2b2lkIEhUTUxPcHRHcm91cEVs
ZW1lbnRJbXBsOjpwYXJzZU1hcHBlCiB2b2lkIEhUTUxPcHRHcm91cEVsZW1lbnRJbXBsOjpyZWNh
bGNTZWxlY3RPcHRpb25zKCkKIHsKICAgICBOb2RlSW1wbCAqc2VsZWN0ID0gcGFyZW50Tm9kZSgp
OwotICAgIHdoaWxlIChzZWxlY3QgJiYgc2VsZWN0LT5pZCgpICE9IElEX1NFTEVDVCkKKyAgICB3
aGlsZSAoc2VsZWN0ICYmICFzZWxlY3QtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzZWxlY3QoKSkp
CiAgICAgICAgIHNlbGVjdCA9IHNlbGVjdC0+cGFyZW50Tm9kZSgpOwogICAgIGlmIChzZWxlY3Qp
CiAgICAgICAgIHN0YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50SW1wbCo+KHNlbGVjdCktPnNl
dFJlY2FsY0xpc3RJdGVtcygpOwpAQCAtMzI5Miw3ICszMjgxLDcgQEAgdm9pZCBIVE1MT3B0R3Jv
dXBFbGVtZW50SW1wbDo6c2V0TGFiZWwoYwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MT3B0
aW9uRWxlbWVudEltcGw6OkhUTUxPcHRpb25FbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCBI
VE1MRm9ybUVsZW1lbnRJbXBsICpmKQotICAgIDogSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwo
ZG9jLCBmKQorICAgIDogSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwoSFRNTE5hbWVzOjpvcHRp
b24oKSwgZG9jLCBmKQogewogICAgIG1fc2VsZWN0ZWQgPSBmYWxzZTsKIH0KQEAgLTMzMDIsMTEg
KzMyOTEsNiBAQCBib29sIEhUTUxPcHRpb25FbGVtZW50SW1wbDo6aXNGb2N1c2FibGUoCiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTE9wdGlvbkVsZW1lbnRJbXBsOjpp
ZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX09QVElPTjsKLX0KLQogRE9NU3RyaW5nIEhUTUxP
cHRpb25FbGVtZW50SW1wbDo6dHlwZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuICJvcHRpb24iOwpA
QCAtMzM1Myw4ICszMzM3LDcgQEAgbG9uZyBIVE1MT3B0aW9uRWxlbWVudEltcGw6OmluZGV4KCkg
Y29ucwogICAgIGludCBsID0gaXRlbXMuY291bnQoKTsKICAgICBpbnQgb3B0aW9uSW5kZXggPSAw
OwogICAgIGZvcihpbnQgaSA9IDA7IGkgPCBsOyBpKyspIHsKLSAgICAgICAgaWYoaXRlbXNbaV0t
PmlkKCkgPT0gSURfT1BUSU9OKQotICAgICAgICB7CisgICAgICAgIGlmIChpdGVtc1tpXS0+aGFz
TG9jYWxOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpKSB7CiAgICAgICAgICAgICBpZiAoc3RhdGlj
X2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnRJbXBsKj4oaXRlbXNbaV0pID09IHRoaXMpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIG9wdGlvbkluZGV4OwogICAgICAgICAgICAgb3B0aW9uSW5kZXgrKzsK
QEAgLTM0MTksNyArMzQwMiw3IEBAIHZvaWQgSFRNTE9wdGlvbkVsZW1lbnRJbXBsOjpjaGlsZHJl
bkNoYW4KIEhUTUxTZWxlY3RFbGVtZW50SW1wbCAqSFRNTE9wdGlvbkVsZW1lbnRJbXBsOjpnZXRT
ZWxlY3QoKSBjb25zdAogewogICAgIE5vZGVJbXBsICpzZWxlY3QgPSBwYXJlbnROb2RlKCk7Ci0g
ICAgd2hpbGUgKHNlbGVjdCAmJiBzZWxlY3QtPmlkKCkgIT0gSURfU0VMRUNUKQorICAgIHdoaWxl
IChzZWxlY3QgJiYgIXNlbGVjdC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnNlbGVjdCgpKSkKICAg
ICAgICAgc2VsZWN0ID0gc2VsZWN0LT5wYXJlbnROb2RlKCk7CiAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PEhUTUxTZWxlY3RFbGVtZW50SW1wbCo+KHNlbGVjdCk7CiB9CkBAIC0zNDQ3LDcgKzM0MzAs
NyBAQCB2b2lkIEhUTUxPcHRpb25FbGVtZW50SW1wbDo6c2V0TGFiZWwoY29uCiAvLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCiAKIEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBsOjpIVE1MVGV4dEFyZWFFbGVtZW50
SW1wbChEb2N1bWVudFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmKQotICAgIDogSFRN
TEdlbmVyaWNGb3JtRWxlbWVudEltcGwoZG9jLCBmKSwgbV92YWx1ZUlzVmFsaWQoZmFsc2UpLCBt
X3ZhbHVlTWF0Y2hlc1JlbmRlcmVyKGZhbHNlKQorICAgIDogSFRNTEdlbmVyaWNGb3JtRWxlbWVu
dEltcGwoSFRNTE5hbWVzOjp0ZXh0YXJlYSgpLCBkb2MsIGYpLCBtX3ZhbHVlSXNWYWxpZChmYWxz
ZSksIG1fdmFsdWVNYXRjaGVzUmVuZGVyZXIoZmFsc2UpCiB7CiAgICAgLy8gRFREIHJlcXVpcmVz
IHJvd3MgJiBjb2xzIGJlIHNwZWNpZmllZCwgYnV0IHdlIHdpbGwgcHJvdmlkZSByZWFzb25hYmxl
IGRlZmF1bHRzCiAgICAgbV9yb3dzID0gMjsKQEAgLTM0NjAsMTEgKzM0NDMsNiBAQCBIVE1MVGV4
dEFyZWFFbGVtZW50SW1wbDo6fkhUTUxUZXh0QXJlYUVsCiAgICAgaWYgKGdldERvY3VtZW50KCkp
IGdldERvY3VtZW50KCktPmRlcmVnaXN0ZXJNYWludGFpbnNTdGF0ZSh0aGlzKTsKIH0KIAotTm9k
ZUltcGw6OklkIEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIElEX1RFWFRBUkVBOwotfQotCiBET01TdHJpbmcgSFRNTFRleHRBcmVhRWxlbWVudEltcGw6
OnR5cGUoKSBjb25zdAogewogICAgIHJldHVybiAidGV4dGFyZWEiOwpAQCAtMzcxNCwxNyArMzY5
MiwxMiBAQCB2b2lkIEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBsOjpzZXRSb3dzKGxvCiAvLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCiAKIEhUTUxJc0luZGV4RWxlbWVudEltcGw6OkhUTUxJc0luZGV4RWxlbWVu
dEltcGwoRG9jdW1lbnRQdHIgKmRvYywgSFRNTEZvcm1FbGVtZW50SW1wbCAqZikKLSAgICA6IEhU
TUxJbnB1dEVsZW1lbnRJbXBsKGRvYywgZikKKyAgICA6IEhUTUxJbnB1dEVsZW1lbnRJbXBsKEhU
TUxOYW1lczo6aXNpbmRleCgpLCBkb2MsIGYpCiB7CiAgICAgbV90eXBlID0gVEVYVDsKICAgICBz
ZXRPdmVycmlkZU5hbWUoImlzaW5kZXgiKTsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxJc0luZGV4
RWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfSVNJTkRFWDsKLX0KLQog
dm9pZCBIVE1MSXNJbmRleEVsZW1lbnRJbXBsOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRB
dHRyaWJ1dGVJbXBsKiBhdHRyKQogewogICAgIHN3aXRjaChhdHRyLT5pZCgpKQpJbmRleDoga2h0
bWwvaHRtbC9odG1sX2Zvcm1pbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dl
YkNvcmUva2h0bWwvaHRtbC9odG1sX2Zvcm1pbXBsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
NzUKZGlmZiAtdSAtcCAtcjEuNzUga2h0bWwvaHRtbC9odG1sX2Zvcm1pbXBsLmgKLS0tIGtodG1s
L2h0bWwvaHRtbF9mb3JtaW1wbC5oCTI0IEp1biAyMDA1IDA1OjUzOjI3IC0wMDAwCTEuNzUKKysr
IGtodG1sL2h0bWwvaHRtbF9mb3JtaW1wbC5oCTcgSnVsIDIwMDUgMDU6NTk6MDAgLTAwMDAKQEAg
LTY3LDcgKzY3LDggQEAgcHVibGljOgogICAgIEhUTUxGb3JtRWxlbWVudEltcGwoRG9jdW1lbnRQ
dHIgKmRvYyk7CiAgICAgdmlydHVhbCB+SFRNTEZvcm1FbGVtZW50SW1wbCgpOwogCi0gICAgdmly
dHVhbCBJZCBpZCgpIGNvbnN0OworICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1
aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9CisgICAgdmlydHVh
bCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAzOyB9CiAKICAgICB2aXJ0dWFsIHZv
aWQgYXR0YWNoKCk7CiAgICAgdmlydHVhbCB2b2lkIGRldGFjaCgpOwpAQCAtMTYxLDkgKzE2Miwx
MiBAQCBjbGFzcyBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbCA6IHB1YmxpCiAgICAgZnJpZW5k
IGNsYXNzIGtodG1sOjpSZW5kZXJGb3JtRWxlbWVudDsKIAogcHVibGljOgotICAgIEhUTUxHZW5l
cmljRm9ybUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIEhUTUxGb3JtRWxlbWVudEltcGwg
KmYgPSAwKTsKKyAgICBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbChjb25zdCBRdWFsaWZpZWRO
YW1lJiB0YWdOYW1lLCBEb2N1bWVudFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmID0g
MCk7CiAgICAgdmlydHVhbCB+SFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwoKTsKIAorICAgIHZp
cnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRh
Z1N0YXR1c1JlcXVpcmVkOyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7
IHJldHVybiAxOyB9CisKICAgICBIVE1MRm9ybUVsZW1lbnRJbXBsICpmb3JtKCkgeyByZXR1cm4g
bV9mb3JtOyB9CiAKICAgICB2aXJ0dWFsIERPTVN0cmluZyB0eXBlKCkgY29uc3QgPSAwOwpAQCAt
MjM1LDcgKzIzOSw2IEBAIGNsYXNzIEhUTUxCdXR0b25FbGVtZW50SW1wbCA6IHB1YmxpYyBIVE0K
IHsKIHB1YmxpYzoKICAgICBIVE1MQnV0dG9uRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywg
SFRNTEZvcm1FbGVtZW50SW1wbCAqZiA9IDApOwotCiAgICAgdmlydHVhbCB+SFRNTEJ1dHRvbkVs
ZW1lbnRJbXBsKCk7CiAKICAgICBlbnVtIHR5cGVFbnVtIHsKQEAgLTI0NCw3ICsyNDcsNiBAQCBw
dWJsaWM6CiAgICAgICAgIEJVVFRPTgogICAgIH07CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29u
c3Q7CiAgICAgRE9NU3RyaW5nIHR5cGUoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9pZCBwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICphdHRyKTsKQEAgLTI4MCwxMSAr
MjgyLDExIEBAIGNsYXNzIEhUTUxGaWVsZFNldEVsZW1lbnRJbXBsIDogcHVibGljIEgKIHsKIHB1
YmxpYzoKICAgICBIVE1MRmllbGRTZXRFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCBIVE1M
Rm9ybUVsZW1lbnRJbXBsICpmID0gMCk7Ci0KICAgICB2aXJ0dWFsIH5IVE1MRmllbGRTZXRFbGVt
ZW50SW1wbCgpOwotCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwogICAgIAorICAgIHZpcnR1
YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMzsgfQorCXZpcnR1YWwgYm9vbCBj
aGVja0RURChjb25zdCBOb2RlSW1wbCogbmV3Q2hpbGQpOworCiAgICAgdmlydHVhbCBib29sIGlz
Rm9jdXNhYmxlKCkgY29uc3Q7CiAgICAgCiAgICAgdmlydHVhbCBraHRtbDo6UmVuZGVyT2JqZWN0
ICpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSAqLCBraHRtbDo6UmVuZGVyU3R5bGUgKik7CkBA
IC0zMjYsOSArMzI4LDEyIEBAIHB1YmxpYzoKICAgICB9OwogCiAgICAgSFRNTElucHV0RWxlbWVu
dEltcGwoRG9jdW1lbnRQdHIgKmRvYywgSFRNTEZvcm1FbGVtZW50SW1wbCAqZiA9IDApOworICAg
IEhUTUxJbnB1dEVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3Vt
ZW50UHRyICpkb2MsIEhUTUxGb3JtRWxlbWVudEltcGwgKmYgPSAwKTsKICAgICB2aXJ0dWFsIH5I
VE1MSW5wdXRFbGVtZW50SW1wbCgpOworICAgIHZvaWQgaW5pdCgpOwogCi0gICAgdmlydHVhbCBJ
ZCBpZCgpIGNvbnN0OworICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVu
dCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c0ZvcmJpZGRlbjsgfQorICAgIHZpcnR1YWwgaW50
IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMDsgfQogCiAgICAgdmlydHVhbCBib29sIGlz
RW51bWVyYXRhYmxlKCkgY29uc3QgeyByZXR1cm4gaW5wdXRUeXBlKCkgIT0gSU1BR0U7IH0KIApA
QCAtNDU5LDkgKzQ2NCw5IEBAIHB1YmxpYzoKICAgICBIVE1MTGFiZWxFbGVtZW50SW1wbChEb2N1
bWVudFB0ciAqZG9jKTsKICAgICB2aXJ0dWFsIH5IVE1MTGFiZWxFbGVtZW50SW1wbCgpOwogCisg
ICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiA1OyB9CisKICAgICB2
aXJ0dWFsIGJvb2wgaXNGb2N1c2FibGUoKSBjb25zdDsKLSAgICAKLSAgICB2aXJ0dWFsIElkIGlk
KCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVk
QXR0cmlidXRlSW1wbCAqYXR0cik7CiAKQEAgLTQ5Niw3ICs1MDEsNiBAQCBwdWJsaWM6CiAKICAg
ICB2aXJ0dWFsIGJvb2wgaXNGb2N1c2FibGUoKSBjb25zdDsKICAgICAKLSAgICB2aXJ0dWFsIElk
IGlkKCkgY29uc3Q7CiAgICAgdmlydHVhbCBraHRtbDo6UmVuZGVyT2JqZWN0ICpjcmVhdGVSZW5k
ZXJlcihSZW5kZXJBcmVuYSAqLCBraHRtbDo6UmVuZGVyU3R5bGUgKik7CiAKICAgICB2aXJ0dWFs
IERPTVN0cmluZyB0eXBlKCkgY29uc3Q7CkBAIC01MjUsOSArNTI5LDEzIEBAIGNsYXNzIEhUTUxT
ZWxlY3RFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE0KIAogcHVibGljOgogICAgIEhUTUxTZWxlY3RF
bGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmID0gMCk7
CisgICAgSFRNTFNlbGVjdEVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUs
IERvY3VtZW50UHRyICpkb2MsIEhUTUxGb3JtRWxlbWVudEltcGwgKmYgPSAwKTsKICAgICB+SFRN
TFNlbGVjdEVsZW1lbnRJbXBsKCk7CisgICAgdm9pZCBpbml0KCk7CisKKyAgICB2aXJ0dWFsIGlu
dCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDY7IH0KKwl2aXJ0dWFsIGJvb2wgY2hlY2tE
VEQoY29uc3QgTm9kZUltcGwqIG5ld0NoaWxkKTsKIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25z
dDsKICAgICBET01TdHJpbmcgdHlwZSgpIGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lkIHJlY2Fs
Y1N0eWxlKCBTdHlsZUNoYW5nZSApOwpAQCAtNjE0LDcgKzYyMiw3IEBAIGNsYXNzIEhUTUxLZXln
ZW5FbGVtZW50SW1wbCA6IHB1YmxpYyBIVE0KIHB1YmxpYzoKICAgICBIVE1MS2V5Z2VuRWxlbWVu
dEltcGwoRG9jdW1lbnRQdHIgKmRvYywgSFRNTEZvcm1FbGVtZW50SW1wbCAqZiA9IDApOwogCi0g
ICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkg
Y29uc3QgeyByZXR1cm4gMDsgfQogCiAgICAgRE9NU3RyaW5nIHR5cGUoKSBjb25zdDsKIApAQCAt
NjM2LDcgKzY0NCw4IEBAIHB1YmxpYzoKICAgICBIVE1MT3B0R3JvdXBFbGVtZW50SW1wbChEb2N1
bWVudFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmID0gMCk7CiAgICAgdmlydHVhbCB+
SFRNTE9wdEdyb3VwRWxlbWVudEltcGwoKTsKIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsK
Kwl2aXJ0dWFsIGJvb2wgY2hlY2tEVEQoY29uc3QgTm9kZUltcGwqIG5ld0NoaWxkKSB7IHJldHVy
biBuZXdDaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9wdGlvbigpKTsgfQorCiAgICAgRE9N
U3RyaW5nIHR5cGUoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgYm9vbCBpc0ZvY3VzYWJsZSgpIGNv
bnN0OwpAQCAtNjY0LDkgKzY3MywxMiBAQCBjbGFzcyBIVE1MT3B0aW9uRWxlbWVudEltcGwgOiBw
dWJsaWMgSFRNCiBwdWJsaWM6CiAgICAgSFRNTE9wdGlvbkVsZW1lbnRJbXBsKERvY3VtZW50UHRy
ICpkb2MsIEhUTUxGb3JtRWxlbWVudEltcGwgKmYgPSAwKTsKIAorICAgIHZpcnR1YWwgSFRNTFRh
Z1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c09wdGlv
bmFsOyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAyOyB9
CisJdmlydHVhbCBib29sIGNoZWNrRFREKGNvbnN0IE5vZGVJbXBsKiBuZXdDaGlsZCkgeyByZXR1
cm4gbmV3Q2hpbGQtPmlzVGV4dE5vZGUoKTsgfQorCiAgICAgdmlydHVhbCBib29sIGlzRm9jdXNh
YmxlKCkgY29uc3Q7Ci0gICAgCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OworCiAgICAgRE9N
U3RyaW5nIHR5cGUoKSBjb25zdDsKIAogICAgIERPTVN0cmluZyB0ZXh0KCkgY29uc3Q7CkBAIC03
MTQsMTAgKzcyNiw5IEBAIHB1YmxpYzoKICAgICBIVE1MVGV4dEFyZWFFbGVtZW50SW1wbChEb2N1
bWVudFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmID0gMCk7CiAgICAgfkhUTUxUZXh0
QXJlYUVsZW1lbnRJbXBsKCk7CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CisJdmlydHVh
bCBib29sIGNoZWNrRFREKGNvbnN0IE5vZGVJbXBsKiBuZXdDaGlsZCkgeyByZXR1cm4gbmV3Q2hp
bGQtPmlzVGV4dE5vZGUoKTsgfQogCiAgICAgbG9uZyBjb2xzKCkgY29uc3QgeyByZXR1cm4gbV9j
b2xzOyB9Ci0KICAgICBsb25nIHJvd3MoKSBjb25zdCB7IHJldHVybiBtX3Jvd3M7IH0KIAogICAg
IFdyYXBNZXRob2Qgd3JhcCgpIGNvbnN0IHsgcmV0dXJuIG1fd3JhcDsgfQpAQCAtNzg1LDcgKzc5
Niw4IEBAIGNsYXNzIEhUTUxJc0luZGV4RWxlbWVudEltcGwgOiBwdWJsaWMgSFQKIHB1YmxpYzoK
ICAgICBIVE1MSXNJbmRleEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIEhUTUxGb3JtRWxl
bWVudEltcGwgKmYgPSAwKTsKIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdT
dGF0dXNGb3JiaWRkZW47IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsg
cmV0dXJuIDA7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBw
ZWRBdHRyaWJ1dGVJbXBsICphdHRyKTsKIApJbmRleDoga2h0bWwvaHRtbC9odG1sX2hlYWRpbXBs
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9odG1sL2h0
bWxfaGVhZGltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjUwCmRpZmYgLXUgLXAgLXIx
LjUwIGtodG1sL2h0bWwvaHRtbF9oZWFkaW1wbC5jcHAKLS0tIGtodG1sL2h0bWwvaHRtbF9oZWFk
aW1wbC5jcHAJMjIgSnVuIDIwMDUgMTg6MjI6MDEgLTAwMDAJMS41MAorKysga2h0bWwvaHRtbC9o
dG1sX2hlYWRpbXBsLmNwcAk3IEp1bCAyMDA1IDA1OjU5OjAwIC0wMDAwCkBAIC00Niw3ICs0Niw3
IEBAIHVzaW5nIG5hbWVzcGFjZSBET007CiB1c2luZyBuYW1lc3BhY2Uga2h0bWw7CiAKIEhUTUxC
YXNlRWxlbWVudEltcGw6OkhUTUxCYXNlRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAg
ICA6IEhUTUxFbGVtZW50SW1wbChkb2MpCisgICAgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVz
OjpiYXNlKCksIGRvYykKIHsKIH0KIApAQCAtNTQsMTEgKzU0LDYgQEAgSFRNTEJhc2VFbGVtZW50
SW1wbDo6fkhUTUxCYXNlRWxlbWVudEltcAogewogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTEJhc2VF
bGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9CQVNFOwotfQotCiB2b2lk
IEhUTUxCYXNlRWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0
ZUltcGwgKmF0dHIpCiB7CiAgICAgc3dpdGNoKGF0dHItPmlkKCkpCkBAIC0xMTksNyArMTE0LDcg
QEAgdm9pZCBIVE1MQmFzZUVsZW1lbnRJbXBsOjpzZXRUYXJnZXQoY29ucwogLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQogCiBIVE1MTGlua0VsZW1lbnRJbXBsOjpIVE1MTGlua0VsZW1lbnRJbXBsKERvY3Vt
ZW50UHRyICpkb2MpCi0gICAgOiBIVE1MRWxlbWVudEltcGwoZG9jKQorICAgIDogSFRNTEVsZW1l
bnRJbXBsKEhUTUxOYW1lczo6bGluaygpLCBkb2MpCiB7CiAgICAgbV9zaGVldCA9IDA7CiAgICAg
bV9sb2FkaW5nID0gZmFsc2U7CkBAIC0xMzQsMTEgKzEyOSw2IEBAIEhUTUxMaW5rRWxlbWVudElt
cGw6On5IVE1MTGlua0VsZW1lbnRJbXAKICAgICBpZihtX2NhY2hlZFNoZWV0KSBtX2NhY2hlZFNo
ZWV0LT5kZXJlZih0aGlzKTsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxMaW5rRWxlbWVudEltcGw6
OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfTElOSzsKLX0KLQogdm9pZCBIVE1MTGlua0Vs
ZW1lbnRJbXBsOjpzZXREaXNhYmxlZFN0YXRlKGJvb2wgX2Rpc2FibGVkKQogewogICAgIGludCBv
bGREaXNhYmxlZFN0YXRlID0gbV9kaXNhYmxlZFN0YXRlOwpAQCAtNDIzLDcgKzQxMyw3IEBAIHZv
aWQgSFRNTExpbmtFbGVtZW50SW1wbDo6c2V0VHlwZShjb25zdCAKIAogLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQogCi1IVE1MTWV0YUVsZW1lbnRJbXBsOjpIVE1MTWV0YUVsZW1lbnRJbXBsKERvY3VtZW50
UHRyICpkb2MpIDogSFRNTEVsZW1lbnRJbXBsKGRvYykKK0hUTUxNZXRhRWxlbWVudEltcGw6OkhU
TUxNZXRhRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykgOiBIVE1MRWxlbWVudEltcGwoSFRN
TE5hbWVzOjptZXRhKCksIGRvYykKIHsKIH0KIApAQCAtNDMxLDExICs0MjEsNiBAQCBIVE1MTWV0
YUVsZW1lbnRJbXBsOjp+SFRNTE1ldGFFbGVtZW50SW1wCiB7CiB9CiAKLU5vZGVJbXBsOjpJZCBI
VE1MTWV0YUVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX01FVEE7Ci19
Ci0KIHZvaWQgSFRNTE1ldGFFbGVtZW50SW1wbDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVk
QXR0cmlidXRlSW1wbCAqYXR0cikKIHsKICAgICBzd2l0Y2goYXR0ci0+aWQoKSkKQEAgLTUxMiw3
ICs0OTcsNyBAQCB2b2lkIEhUTUxNZXRhRWxlbWVudEltcGw6OnNldFNjaGVtZShjb25zCiAvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxTY3JpcHRFbGVtZW50SW1wbDo6SFRNTFNjcmlwdEVsZW1l
bnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0gICAgOiBIVE1MRWxlbWVudEltcGwoZG9jKSwgbV9j
YWNoZWRTY3JpcHQoMCksIG1fY3JlYXRlZEJ5UGFyc2VyKGZhbHNlKSwgbV9ldmFsdWF0ZWQoZmFs
c2UpCisgICAgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjpzY3JpcHQoKSwgZG9jKSwgbV9j
YWNoZWRTY3JpcHQoMCksIG1fY3JlYXRlZEJ5UGFyc2VyKGZhbHNlKSwgbV9ldmFsdWF0ZWQoZmFs
c2UpCiB7CiB9CiAKQEAgLTUyMiwxMSArNTA3LDYgQEAgSFRNTFNjcmlwdEVsZW1lbnRJbXBsOjp+
SFRNTFNjcmlwdEVsZW1lbgogICAgICAgICBtX2NhY2hlZFNjcmlwdC0+ZGVyZWYodGhpcyk7CiB9
CiAKLU5vZGVJbXBsOjpJZCBIVE1MU2NyaXB0RWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gSURfU0NSSVBUOwotfQotCiBib29sIEhUTUxTY3JpcHRFbGVtZW50SW1wbDo6aXNV
UkxBdHRyaWJ1dGUoQXR0cmlidXRlSW1wbCAqYXR0cikgY29uc3QKIHsKICAgICByZXR1cm4gYXR0
ci0+aWQoKSA9PSBBVFRSX1NSQzsKQEAgLTY5Nyw3ICs2NzcsNyBAQCB2b2lkIEhUTUxTY3JpcHRF
bGVtZW50SW1wbDo6c2V0VHlwZShjb25zCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSFRNTFN0
eWxlRWxlbWVudEltcGw6OkhUTUxTdHlsZUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpIDog
SFRNTEVsZW1lbnRJbXBsKGRvYykKK0hUTUxTdHlsZUVsZW1lbnRJbXBsOjpIVE1MU3R5bGVFbGVt
ZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKSA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6OnN0
eWxlKCksIGRvYykKIHsKICAgICBtX3NoZWV0ID0gMDsKICAgICBtX2xvYWRpbmcgPSBmYWxzZTsK
QEAgLTcwOCwxMSArNjg4LDYgQEAgSFRNTFN0eWxlRWxlbWVudEltcGw6On5IVE1MU3R5bGVFbGVt
ZW50SQogICAgIGlmKG1fc2hlZXQpIG1fc2hlZXQtPmRlcmVmKCk7CiB9CiAKLU5vZGVJbXBsOjpJ
ZCBIVE1MU3R5bGVFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9TVFlM
RTsKLX0KLQogLy8gb3RoZXIgc3R1ZmYuLi4KIHZvaWQgSFRNTFN0eWxlRWxlbWVudEltcGw6OnBh
cnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIpCiB7CkBAIC04MjQs
NyArNzk5LDcgQEAgdm9pZCBIVE1MU3R5bGVFbGVtZW50SW1wbDo6c2V0VHlwZShjb25zdAogLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MVGl0bGVFbGVtZW50SW1wbDo6SFRNTFRpdGxlRWxlbWVu
dEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50SW1wbChkb2MpLCBtX3Rp
dGxlKCIiKQorICAgIDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6dGl0bGUoKSwgZG9jKSwg
bV90aXRsZSgiIikKIHsKIH0KIApAQCAtODMyLDExICs4MDcsNiBAQCBIVE1MVGl0bGVFbGVtZW50
SW1wbDo6fkhUTUxUaXRsZUVsZW1lbnRJCiB7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MVGl0bGVF
bGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9USVRMRTsKLX0KLQogdm9p
ZCBIVE1MVGl0bGVFbGVtZW50SW1wbDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKQogewogICAgIEhU
TUxFbGVtZW50SW1wbDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKSW5kZXg6IGtodG1sL2h0bWwv
aHRtbF9oZWFkaW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2to
dG1sL2h0bWwvaHRtbF9oZWFkaW1wbC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIwCmRpZmYg
LXUgLXAgLXIxLjIwIGtodG1sL2h0bWwvaHRtbF9oZWFkaW1wbC5oCi0tLSBraHRtbC9odG1sL2h0
bWxfaGVhZGltcGwuaAkxOSBKdW4gMjAwNSAwNTo0NDoyOCAtMDAwMAkxLjIwCisrKyBraHRtbC9o
dG1sL2h0bWxfaGVhZGltcGwuaAk3IEp1bCAyMDA1IDA1OjU5OjAxIC0wMDAwCkBAIC00OSwxMCAr
NDksMTIgQEAgcHVibGljOgogICAgIEhUTUxCYXNlRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRv
Yyk7CiAgICAgfkhUTUxCYXNlRWxlbWVudEltcGwoKTsKIAorICAgIHZpcnR1YWwgSFRNTFRhZ1N0
YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c0ZvcmJpZGRl
bjsgfQorICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMDsgfQor
CiAgICAgRE9NU3RyaW5nIGhyZWYoKSBjb25zdCB7IHJldHVybiBtX2hyZWY7IH0KICAgICBET01T
dHJpbmcgdGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXQ7IH0KIAotICAgIHZpcnR1YWwg
SWQgaWQoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFw
cGVkQXR0cmlidXRlSW1wbCAqYXR0cik7CiAgICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b0Rv
Y3VtZW50KCk7CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZWRGcm9tRG9jdW1lbnQoKTsKQEAgLTc3
LDcgKzc5LDggQEAgcHVibGljOgogICAgIEhUTUxMaW5rRWxlbWVudEltcGwoRG9jdW1lbnRQdHIg
KmRvYyk7CiAgICAgfkhUTUxMaW5rRWxlbWVudEltcGwoKTsKIAotICAgIHZpcnR1YWwgSWQgaWQo
KSBjb25zdDsKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBj
b25zdCB7IHJldHVybiBUYWdTdGF0dXNGb3JiaWRkZW47IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQ
cmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KIAogICAgIGJvb2wgZGlzYWJsZWQoKSBjb25z
dDsKICAgICB2b2lkIHNldERpc2FibGVkKGJvb2wpOwpAQCAtMTUyLDEwICsxNTUsMTEgQEAgY2xh
c3MgSFRNTE1ldGFFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MRQogewogcHVibGljOgogICAgIEhU
TUxNZXRhRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYyk7Ci0KICAgICB+SFRNTE1ldGFFbGVt
ZW50SW1wbCgpOwogCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OworICAgIHZpcnR1YWwgSFRN
TFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c0Zv
cmJpZGRlbjsgfQorICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4g
MDsgfQorCiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJp
YnV0ZUltcGwgKmF0dHIpOwogICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9Eb2N1bWVudCgp
OwogCkBAIC0xODUsMTMgKzE4OSwxNyBAQCBjbGFzcyBIVE1MU2NyaXB0RWxlbWVudEltcGwgOiBw
dWJsaWMgSFRNCiBwdWJsaWM6CiAgICAgSFRNTFNjcmlwdEVsZW1lbnRJbXBsKERvY3VtZW50UHRy
ICpkb2MpOwogICAgIH5IVE1MU2NyaXB0RWxlbWVudEltcGwoKTsKLSAgICAKKworICAgIHZpcnR1
YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0
YXR1c1JlcXVpcmVkOyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJl
dHVybiAxOyB9CisJdmlydHVhbCBib29sIGNoZWNrRFREKGNvbnN0IE5vZGVJbXBsKiBuZXdDaGls
ZCkgeyByZXR1cm4gbmV3Q2hpbGQtPmlzVGV4dE5vZGUoKTsgfQorCiAgICAgdmlydHVhbCB2b2lk
IGluc2VydGVkSW50b0RvY3VtZW50KCk7CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZWRGcm9tRG9j
dW1lbnQoKTsKICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5RmluaXNoZWQoa2h0bWw6OkNhY2hlZE9i
amVjdCAqZmluaXNoZWRPYmopOworCiAgICAgdmlydHVhbCB2b2lkIGNoaWxkcmVuQ2hhbmdlZCgp
OwotICAgIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKKwogICAgIHZpcnR1YWwgYm9vbCBp
c1VSTEF0dHJpYnV0ZShBdHRyaWJ1dGVJbXBsICphdHRyKSBjb25zdDsKIAogICAgIHZvaWQgc2V0
Q3JlYXRlZEJ5UGFyc2VyKGJvb2wgY3JlYXRlZEJ5UGFyc2VyKSB7IG1fY3JlYXRlZEJ5UGFyc2Vy
ID0gY3JlYXRlZEJ5UGFyc2VyOyB9CkBAIC0yMzMsNyArMjQxLDkgQEAgcHVibGljOgogICAgIEhU
TUxTdHlsZUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpOwogICAgIH5IVE1MU3R5bGVFbGVt
ZW50SW1wbCgpOwogCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OworICAgIHZpcnR1YWwgSFRN
TFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1Jl
cXVpcmVkOyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAx
OyB9CisJdmlydHVhbCBib29sIGNoZWNrRFREKGNvbnN0IE5vZGVJbXBsKiBuZXdDaGlsZCkgeyBy
ZXR1cm4gbmV3Q2hpbGQtPmlzVGV4dE5vZGUoKTsgfQogCiAgICAgU3R5bGVTaGVldEltcGwgKnNo
ZWV0KCkgY29uc3QgeyByZXR1cm4gbV9zaGVldDsgfQogCkBAIC0yNjgsMTAgKzI3OCw5IEBAIGNs
YXNzIEhUTUxUaXRsZUVsZW1lbnRJbXBsIDogcHVibGljIEhUTUwKIHsKIHB1YmxpYzoKICAgICBI
VE1MVGl0bGVFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKTsKLQogICAgIH5IVE1MVGl0bGVF
bGVtZW50SW1wbCgpOwogCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OworCXZpcnR1YWwgYm9v
bCBjaGVja0RURChjb25zdCBOb2RlSW1wbCogbmV3Q2hpbGQpIHsgcmV0dXJuIG5ld0NoaWxkLT5p
c1RleHROb2RlKCk7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9Eb2N1bWVudCgp
OwogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkRnJvbURvY3VtZW50KCk7CkluZGV4OiBraHRtbC9o
dG1sL2h0bWxfaW1hZ2VpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2Vi
Q29yZS9raHRtbC9odG1sL2h0bWxfaW1hZ2VpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS40MwpkaWZmIC11IC1wIC1yMS40MyBraHRtbC9odG1sL2h0bWxfaW1hZ2VpbXBsLmNwcAotLS0g
a2h0bWwvaHRtbC9odG1sX2ltYWdlaW1wbC5jcHAJMjEgSnVuIDIwMDUgMjI6Mjc6NTUgLTAwMDAJ
MS40MworKysga2h0bWwvaHRtbC9odG1sX2ltYWdlaW1wbC5jcHAJNyBKdWwgMjAwNSAwNTo1OTow
MSAtMDAwMApAQCAtNTEsNyArNTEsNyBAQAogdXNpbmcgbmFtZXNwYWNlIERPTTsKIHVzaW5nIG5h
bWVzcGFjZSBraHRtbDsKIAotLy8jZGVmaW5lIElOU1RSVU1FTlRfTEFZT1VUX1NDSEVEVUxJTkcg
MQorLy8gI2RlZmluZSBJTlNUUlVNRU5UX0xBWU9VVF9TQ0hFRFVMSU5HIDEKIAogSFRNTEltYWdl
TG9hZGVyOjpIVE1MSW1hZ2VMb2FkZXIoRWxlbWVudEltcGwqIGVsdCkKIDptX2VsZW1lbnQoZWx0
KSwgbV9pbWFnZSgwKSwgbV9maXJlZExvYWQodHJ1ZSksIG1faW1hZ2VDb21wbGV0ZSh0cnVlKQpA
QCAtNzUsNyArNzUsNyBAQCB2b2lkIEhUTUxJbWFnZUxvYWRlcjo6dXBkYXRlRnJvbUVsZW1lbnQo
CiAgICAgICAgIHJldHVybjsKIAogICAgIEF0b21pY1N0cmluZyBhdHRyOwotICAgIGlmIChlbGVt
ZW50KCktPmlkKCkgPT0gSURfT0JKRUNUKQorICAgIGlmIChlbGVtZW50KCktPmhhc0xvY2FsTmFt
ZShIVE1MTmFtZXM6Om9iamVjdCgpKSkKICAgICAgICAgYXR0ciA9IGVsZW1lbnQoKS0+Z2V0QXR0
cmlidXRlKEFUVFJfREFUQSk7CiAgICAgZWxzZQogICAgICAgICBhdHRyID0gZWxlbWVudCgpLT5n
ZXRBdHRyaWJ1dGUoQVRUUl9TUkMpOwpAQCAtODYsNiArODYsMTAgQEAgdm9pZCBIVE1MSW1hZ2VM
b2FkZXI6OnVwZGF0ZUZyb21FbGVtZW50KAogICAgICAgICBuZXdJbWFnZSA9IGVsZW1lbnQoKS0+
Z2V0RG9jdW1lbnQoKS0+ZG9jTG9hZGVyKCktPnJlcXVlc3RJbWFnZShraHRtbDo6cGFyc2VVUkwo
YXR0cikpOwogCiAgICAgaWYgKG5ld0ltYWdlICE9IG1faW1hZ2UpIHsKKyNpZmRlZiBJTlNUUlVN
RU5UX0xBWU9VVF9TQ0hFRFVMSU5HCisgICAgICAgIGlmICghZG9jdW1lbnQtPm93bmVyRWxlbWVu
dCgpICYmIG5ld0ltYWdlKQorICAgICAgICAgICAgcHJpbnRmKCJJbWFnZSByZXF1ZXN0ZWQgYXQg
JWRcbiIsIGVsZW1lbnQoKS0+Z2V0RG9jdW1lbnQoKS0+ZWxhcHNlZFRpbWUoKSk7CisjZW5kaWYK
ICAgICAgICAgbV9maXJlZExvYWQgPSBmYWxzZTsKICAgICAgICAgbV9pbWFnZUNvbXBsZXRlID0g
ZmFsc2U7CiAgICAgICAgIENhY2hlZEltYWdlKiBvbGRJbWFnZSA9IG1faW1hZ2U7CkBAIC0xMzMs
MjEgKzEzNywyMSBAQCB2b2lkIEhUTUxJbWFnZUxvYWRlcjo6bm90aWZ5RmluaXNoZWQoQ2FjCiAv
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxJbWFnZUVsZW1lbnRJbXBsOjpIVE1MSW1hZ2VFbGVt
ZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmKQotICAgIDog
SFRNTEVsZW1lbnRJbXBsKGRvYyksIG1faW1hZ2VMb2FkZXIodGhpcyksIGlzbWFwKGZhbHNlKSwg
bV9mb3JtKGYpCisgICAgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjppbWcoKSwgZG9jKSwg
bV9pbWFnZUxvYWRlcih0aGlzKSwgaXNtYXAoZmFsc2UpLCBtX2Zvcm0oZikKIHsKICAgICBpZiAo
bV9mb3JtKQogICAgICAgICBtX2Zvcm0tPnJlZ2lzdGVySW1nRWxlbWVudCh0aGlzKTsKIH0KIAot
SFRNTEltYWdlRWxlbWVudEltcGw6On5IVE1MSW1hZ2VFbGVtZW50SW1wbCgpCitIVE1MSW1hZ2VF
bGVtZW50SW1wbDo6SFRNTEltYWdlRWxlbWVudEltcGwoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFn
TmFtZSwgRG9jdW1lbnRQdHIgKmRvYykKKyAgICA6IEhUTUxFbGVtZW50SW1wbCh0YWdOYW1lLCBk
b2MpLCBtX2ltYWdlTG9hZGVyKHRoaXMpLCBpc21hcChmYWxzZSksIG1fZm9ybSgwKQogewotICAg
IGlmIChtX2Zvcm0pCi0gICAgICAgIG1fZm9ybS0+cmVtb3ZlSW1nRWxlbWVudCh0aGlzKTsKIH0K
IAotTm9kZUltcGw6OklkIEhUTUxJbWFnZUVsZW1lbnRJbXBsOjppZCgpIGNvbnN0CitIVE1MSW1h
Z2VFbGVtZW50SW1wbDo6fkhUTUxJbWFnZUVsZW1lbnRJbXBsKCkKIHsKLSAgICByZXR1cm4gSURf
SU1HOworICAgIGlmIChtX2Zvcm0pCisgICAgICAgIG1fZm9ybS0+cmVtb3ZlSW1nRWxlbWVudCh0
aGlzKTsKIH0KIAogYm9vbCBIVE1MSW1hZ2VFbGVtZW50SW1wbDo6bWFwVG9FbnRyeShOb2RlSW1w
bDo6SWQgYXR0ciwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3QKQEAgLTUyOCw3
ICs1MzIsNyBAQCBsb25nIEhUTUxJbWFnZUVsZW1lbnRJbXBsOjp5KCkgY29uc3QKIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KIAogSFRNTE1hcEVsZW1lbnRJbXBsOjpIVE1MTWFwRWxlbWVudEltcGwoRG9j
dW1lbnRQdHIgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50SW1wbChkb2MpCisgICAgOiBIVE1MRWxl
bWVudEltcGwoSFRNTE5hbWVzOjptYXAoKSwgZG9jKQogewogfQogCkBAIC01MzgsOSArNTQyLDEx
IEBAIEhUTUxNYXBFbGVtZW50SW1wbDo6fkhUTUxNYXBFbGVtZW50SW1wbCgKICAgICAgICAgZ2V0
RG9jdW1lbnQoKS0+cmVtb3ZlSW1hZ2VNYXAodGhpcyk7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1M
TWFwRWxlbWVudEltcGw6OmlkKCkgY29uc3QKK2Jvb2wgSFRNTE1hcEVsZW1lbnRJbXBsOjpjaGVj
a0RURChjb25zdCBOb2RlSW1wbCogbmV3Q2hpbGQpCiB7Ci0gICAgcmV0dXJuIElEX01BUDsKKwkv
LyBGSVhNRTogVGhpcyBzZWVtcyByZWFsbHkgb2RkLCBhbGxvd2luZyBvbmx5IGJsb2NrcyBpbnNp
ZGUgbWFwLgorCXJldHVybiBuZXdDaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmFyZWEoKSkg
fHwgbmV3Q2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzY3JpcHQoKSkgfHwKKwkJICAgaW5C
bG9ja1RhZ0xpc3QobmV3Q2hpbGQpOwogfQogCiBib29sCkBAIC01NTIsMzIgKzU1OCwyOCBAQCBI
VE1MTWFwRWxlbWVudEltcGw6Om1hcE1vdXNlRXZlbnQoaW50IHhfCiAgICAgUVB0clN0YWNrPE5v
ZGVJbXBsPiBub2RlU3RhY2s7CiAKICAgICBOb2RlSW1wbCAqY3VycmVudCA9IGZpcnN0Q2hpbGQo
KTsKLSAgICB3aGlsZSgxKQotICAgIHsKLSAgICAgICAgaWYoIWN1cnJlbnQpCi0gICAgICAgIHsK
KyAgICB3aGlsZSAoMSkgeworICAgICAgICBpZiAoIWN1cnJlbnQpIHsKICAgICAgICAgICAgIGlm
KG5vZGVTdGFjay5pc0VtcHR5KCkpIGJyZWFrOwogICAgICAgICAgICAgY3VycmVudCA9IG5vZGVT
dGFjay5wb3AoKTsKICAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0U2libGluZygp
OwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgaWYoY3VycmVudC0+
aWQoKT09SURfQVJFQSkKLSAgICAgICAgeworICAgICAgICAKKyAgICAgICAgaWYgKGN1cnJlbnQt
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjphcmVhKCkpKSB7CiAgICAgICAgICAgICAvL2NvdXQgPDwg
ImFyZWEgZm91bmQgIiA8PCBlbmRsOwotICAgICAgICAgICAgSFRNTEFyZWFFbGVtZW50SW1wbCog
YXJlYT1zdGF0aWNfY2FzdDxIVE1MQXJlYUVsZW1lbnRJbXBsKj4oY3VycmVudCk7CisgICAgICAg
ICAgICBIVE1MQXJlYUVsZW1lbnRJbXBsKiBhcmVhID0gc3RhdGljX2Nhc3Q8SFRNTEFyZWFFbGVt
ZW50SW1wbCo+KGN1cnJlbnQpOwogICAgICAgICAgICAgaWYgKGFyZWEtPm1hcE1vdXNlRXZlbnQo
eF8seV8sd2lkdGhfLGhlaWdodF8sIGluZm8pKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICB9CisgICAgICAgIAogICAgICAgICBOb2RlSW1wbCAqY2hpbGQgPSBjdXJyZW50
LT5maXJzdENoaWxkKCk7Ci0gICAgICAgIGlmKGNoaWxkKQotICAgICAgICB7CisgICAgICAgIGlm
IChjaGlsZCkgewogICAgICAgICAgICAgbm9kZVN0YWNrLnB1c2goY3VycmVudCk7CiAgICAgICAg
ICAgICBjdXJyZW50ID0gY2hpbGQ7CiAgICAgICAgIH0KICAgICAgICAgZWxzZQotICAgICAgICB7
CiAgICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAg
fQogICAgIH0KIAogICAgIHJldHVybiBmYWxzZTsKQEAgLTYyMiw3ICs2MjQsNyBAQCB2b2lkIEhU
TUxNYXBFbGVtZW50SW1wbDo6c2V0TmFtZShjb25zdCBECiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAK
IEhUTUxBcmVhRWxlbWVudEltcGw6OkhUTUxBcmVhRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRv
YykKLSAgICA6IEhUTUxBbmNob3JFbGVtZW50SW1wbChkb2MpCisgICAgOiBIVE1MQW5jaG9yRWxl
bWVudEltcGwoSFRNTE5hbWVzOjphcmVhKCksIGRvYykKIHsKICAgICBtX2Nvb3Jkcz0wOwogICAg
IG1fY29vcmRzTGVuID0gMDsKQEAgLTYzNSwxMSArNjM3LDYgQEAgSFRNTEFyZWFFbGVtZW50SW1w
bDo6fkhUTUxBcmVhRWxlbWVudEltcAogICAgIGlmIChtX2Nvb3JkcykgZGVsZXRlIFtdIG1fY29v
cmRzOwogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTEFyZWFFbGVtZW50SW1wbDo6aWQoKSBjb25zdAot
ewotICAgIHJldHVybiBJRF9BUkVBOwotfQotCiB2b2lkIEhUTUxBcmVhRWxlbWVudEltcGw6OnBh
cnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIpCiB7CiAgICAgc3dp
dGNoIChhdHRyLT5pZCgpKQpJbmRleDoga2h0bWwvaHRtbC9odG1sX2ltYWdlaW1wbC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbF9pbWFnZWlt
cGwuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yMQpkaWZmIC11IC1wIC1yMS4yMSBraHRtbC9o
dG1sL2h0bWxfaW1hZ2VpbXBsLmgKLS0tIGtodG1sL2h0bWwvaHRtbF9pbWFnZWltcGwuaAkxMSBN
YXkgMjAwNSAwNTo0OTozNCAtMDAwMAkxLjIxCisrKyBraHRtbC9odG1sL2h0bWxfaW1hZ2VpbXBs
LmgJNyBKdWwgMjAwNSAwNTo1OTowMSAtMDAwMApAQCAtNzUsOSArNzUsMTEgQEAgY2xhc3MgSFRN
TEltYWdlRWxlbWVudEltcGwKICAgICBmcmllbmQgY2xhc3MgSFRNTEZvcm1FbGVtZW50SW1wbDsK
IHB1YmxpYzoKICAgICBIVE1MSW1hZ2VFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCBIVE1M
Rm9ybUVsZW1lbnRJbXBsICpmID0gMCk7CisgICAgSFRNTEltYWdlRWxlbWVudEltcGwoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnRQdHIqIGRvYyk7CiAgICAgfkhUTUxJbWFn
ZUVsZW1lbnRJbXBsKCk7CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CisgICAgdmlydHVh
bCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3Rh
dHVzRm9yYmlkZGVuOyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJl
dHVybiAwOyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShOb2RlSW1wbDo6SWQgYXR0
ciwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lk
IHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKik7CkBAIC0xNjEsNyAr
MTYzLDggQEAgcHVibGljOgogICAgIEhUTUxBcmVhRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRv
Yyk7CiAgICAgfkhUTUxBcmVhRWxlbWVudEltcGwoKTsKIAotICAgIHZpcnR1YWwgSWQgaWQoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25z
dCB7IHJldHVybiBUYWdTdGF0dXNGb3JiaWRkZW47IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQcmlv
cml0eSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICphdHRyKTsKIApAQCAtMjEyLDEwICsyMTUs
MTEgQEAgY2xhc3MgSFRNTE1hcEVsZW1lbnRJbXBsIDogcHVibGljIEhUTUxFbAogewogcHVibGlj
OgogICAgIEhUTUxNYXBFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKTsKLQogICAgIH5IVE1M
TWFwRWxlbWVudEltcGwoKTsKIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdT
dGF0dXNSZXF1aXJlZDsgfQorICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyBy
ZXR1cm4gMTsgfQorCXZpcnR1YWwgYm9vbCBjaGVja0RURChjb25zdCBOb2RlSW1wbCogbmV3Q2hp
bGQpOwogCiAgICAgdmlydHVhbCBET01TdHJpbmcgZ2V0TmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1f
bmFtZTsgfQogCkluZGV4OiBraHRtbC9odG1sL2h0bWxfaW5saW5laW1wbC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sX2lubGluZWltcGwu
Y3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjQyCmRpZmYgLXUgLXAgLXIxLjQyIGtodG1sL2h0
bWwvaHRtbF9pbmxpbmVpbXBsLmNwcAotLS0ga2h0bWwvaHRtbC9odG1sX2lubGluZWltcGwuY3Bw
CTExIE1heSAyMDA1IDA1OjQ5OjM0IC0wMDAwCTEuNDIKKysrIGtodG1sL2h0bWwvaHRtbF9pbmxp
bmVpbXBsLmNwcAk3IEp1bCAyMDA1IDA1OjU5OjAyIC0wMDAwCkBAIC00NSw3ICs0NSwxMyBAQCB1
c2luZyBuYW1lc3BhY2Uga2h0bWw7CiBuYW1lc3BhY2UgRE9NIHsKIAogSFRNTEFuY2hvckVsZW1l
bnRJbXBsOjpIVE1MQW5jaG9yRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgICA6IEhU
TUxFbGVtZW50SW1wbChkb2MpCisgICAgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjphKCks
IGRvYykKK3sKKyAgICBtX2hhc1RhcmdldCA9IGZhbHNlOworfQorCitIVE1MQW5jaG9yRWxlbWVu
dEltcGw6OkhUTUxBbmNob3JFbGVtZW50SW1wbChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1l
LCBEb2N1bWVudFB0ciAqZG9jKQorICAgIDogSFRNTEVsZW1lbnRJbXBsKHRhZ05hbWUsIGRvYykK
IHsKICAgICBtX2hhc1RhcmdldCA9IGZhbHNlOwogfQpAQCAtMTA0LDExICsxMTAsNiBAQCBib29s
IEhUTUxBbmNob3JFbGVtZW50SW1wbDo6aXNLZXlib2FyZEZvCiAgICAgcmV0dXJuIGdldERvY3Vt
ZW50KCktPnBhcnQoKS0+dGFic1RvTGlua3MoKTsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxBbmNo
b3JFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9BOwotfQotCiB2b2lk
IEhUTUxBbmNob3JFbGVtZW50SW1wbDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudEltcGwgKmV2
dCkKIHsKICAgICAvLyBSZWFjdCBvbiBjbGlja3MgYW5kIG9uIGtleXByZXNzZXMuCkBAIC0xNTIs
NyArMTUzLDcgQEAgdm9pZCBIVE1MQW5jaG9yRWxlbWVudEltcGw6OmRlZmF1bHRFdmVudAogICAg
ICAgICBpZiAoIGUgJiYgZS0+YnV0dG9uKCkgPT0gMSApCiAgICAgICAgICAgICB1dGFyZ2V0ID0g
Il9ibGFuayI7CiAKLSAgICAgICAgaWYgKCBldnQtPnRhcmdldCgpLT5pZCgpID09IElEX0lNRyAp
IHsKKyAgICAgICAgaWYgKGV2dC0+dGFyZ2V0KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppbWco
KSkpIHsKICAgICAgICAgICAgIEhUTUxJbWFnZUVsZW1lbnRJbXBsKiBpbWcgPSBzdGF0aWNfY2Fz
dDxIVE1MSW1hZ2VFbGVtZW50SW1wbCo+KCBldnQtPnRhcmdldCgpICk7CiAgICAgICAgICAgICBp
ZiAoIGltZyAmJiBpbWctPmlzU2VydmVyTWFwKCkgKQogICAgICAgICAgICAgewpAQCAtMzgyLDcg
KzM4Myw3IEBAIHZvaWQgSFRNTEFuY2hvckVsZW1lbnRJbXBsOjpmb2N1cygpCiAKIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KIAotSFRNTEJSRWxlbWVudEltcGw6OkhUTUxCUkVsZW1lbnRJbXBsKERvY3Vt
ZW50UHRyICpkb2MpIDogSFRNTEVsZW1lbnRJbXBsKGRvYykKK0hUTUxCUkVsZW1lbnRJbXBsOjpI
VE1MQlJFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKSA6IEhUTUxFbGVtZW50SW1wbChIVE1M
TmFtZXM6OmJyKCksIGRvYykKIHsKIH0KIApAQCAtMzkwLDExICszOTEsNiBAQCBIVE1MQlJFbGVt
ZW50SW1wbDo6fkhUTUxCUkVsZW1lbnRJbXBsKCkKIHsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxC
UkVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0JSOwotfQotCiBib29s
IEhUTUxCUkVsZW1lbnRJbXBsOjptYXBUb0VudHJ5KE5vZGVJbXBsOjpJZCBhdHRyLCBNYXBwZWRB
dHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdAogewogICAgIGlmIChhdHRyID09IEFUVFJfQ0xF
QVIpIHsKQEAgLTQ0NSw3ICs0NDEsNyBAQCB2b2lkIEhUTUxCUkVsZW1lbnRJbXBsOjpzZXRDbGVh
cihjb25zdCBECiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxGb250RWxlbWVudEltcGw6OkhU
TUxGb250RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50SW1w
bChkb2MpCisgICAgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjpmb250KCksIGRvYykKIHsK
IH0KIApAQCAtNDUzLDExICs0NDksNiBAQCBIVE1MRm9udEVsZW1lbnRJbXBsOjp+SFRNTEZvbnRF
bGVtZW50SW1wCiB7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MRm9udEVsZW1lbnRJbXBsOjppZCgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0ZPTlQ7Ci19Ci0KIC8vIEFsbG93cyBsZWFkaW5nIHNw
YWNlcy4KIC8vIEFsbG93cyB0cmFpbGluZyBub25udW1lcmljIGNoYXJhY3RlcnMuCiAvLyBSZXR1
cm5zIDEwIGZvciBhbnkgc2l6ZSBncmVhdGVyIHRoYW4gOS4KQEAgLTU5MCw4ICs1ODEsOCBAQCB2
b2lkIEhUTUxGb250RWxlbWVudEltcGw6OnNldFNpemUoY29uc3QgCiAKIC8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KIAotSFRNTE1vZEVsZW1lbnRJbXBsOjpIVE1MTW9kRWxlbWVudEltcGwoRG9jdW1lbnRQ
dHIgKmRvYywgdXNob3J0IGVsZW1lbnRJZCkKLSAgICA6IEhUTUxHZW5lcmljRWxlbWVudEltcGwo
ZG9jLCBlbGVtZW50SWQpCitIVE1MTW9kRWxlbWVudEltcGw6OkhUTUxNb2RFbGVtZW50SW1wbChj
b25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudFB0ciAqZG9jKQorICAgIDogSFRN
TEVsZW1lbnRJbXBsKHRhZ05hbWUsIGRvYykKIHsKIH0KIApAQCAtNjE4LDE1ICs2MDksMTAgQEAg
dm9pZCBIVE1MTW9kRWxlbWVudEltcGw6OnNldERhdGVUaW1lKGNvbgogLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQogCiBIVE1MUXVvdGVFbGVtZW50SW1wbDo6SFRNTFF1b3RlRWxlbWVudEltcGwoRG9jdW1l
bnRQdHIgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50SW1wbChkb2MpCisgICAgOiBIVE1MRWxlbWVu
dEltcGwoSFRNTE5hbWVzOjpxKCksIGRvYykKIHsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxRdW90
ZUVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX1E7Ci19Ci0gICAgCiBE
T01TdHJpbmcgSFRNTFF1b3RlRWxlbWVudEltcGw6OmNpdGUoKSBjb25zdAogewogICAgIHJldHVy
biBnZXRBdHRyaWJ1dGUoQVRUUl9DSVRFKTsKSW5kZXg6IGtodG1sL2h0bWwvaHRtbF9pbmxpbmVp
bXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9o
dG1sX2lubGluZWltcGwuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xOQpkaWZmIC11IC1wIC1y
MS4xOSBraHRtbC9odG1sL2h0bWxfaW5saW5laW1wbC5oCi0tLSBraHRtbC9odG1sL2h0bWxfaW5s
aW5laW1wbC5oCTExIE1heSAyMDA1IDA1OjQ5OjM0IC0wMDAwCTEuMTkKKysrIGtodG1sL2h0bWwv
aHRtbF9pbmxpbmVpbXBsLmgJNyBKdWwgMjAwNSAwNTo1OTowMiAtMDAwMApAQCAtMzQsMTIgKzM0
LDE1IEBAIGNsYXNzIEhUTUxBbmNob3JFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE0KIHsKIHB1Ymxp
YzoKICAgICBIVE1MQW5jaG9yRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYyk7CisgICAgSFRN
TEFuY2hvckVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50
UHRyKiBkb2MpOwogICAgIH5IVE1MQW5jaG9yRWxlbWVudEltcGwoKTsKIAorICAgIHZpcnR1YWwg
SFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1
c1JlcXVpcmVkOyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVy
biAxOyB9CisKICAgICB2aXJ0dWFsIGJvb2wgaXNNb3VzZUZvY3VzYWJsZSgpIGNvbnN0OwogICAg
IHZpcnR1YWwgYm9vbCBpc0tleWJvYXJkRm9jdXNhYmxlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBi
b29sIGlzRm9jdXNhYmxlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwogICAg
IHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICph
dHRyKTsKICAgICB2aXJ0dWFsIHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudEltcGwgKmV2
dCk7CiAgICAgdmlydHVhbCB2b2lkIGFjY2Vzc0tleUFjdGlvbihib29sIGZ1bGxBY3Rpb24pOwpA
QCAtOTcsOSArMTAwLDEwIEBAIGNsYXNzIEhUTUxCUkVsZW1lbnRJbXBsIDogcHVibGljIEhUTUxF
bGUKIHB1YmxpYzoKICAgICBIVE1MQlJFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKTsKICAg
ICB+SFRNTEJSRWxlbWVudEltcGwoKTsKLQotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKICAg
ICAKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7
IHJldHVybiBUYWdTdGF0dXNGb3JiaWRkZW47IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0
eSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKwogICAgIHZpcnR1YWwgYm9vbCBtYXBUb0VudHJ5KElk
IGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0OwogICAgIHZpcnR1YWwg
dm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICphdHRyKTsKICAg
ICAKQEAgLTExNiw5ICsxMjAsMTAgQEAgY2xhc3MgSFRNTEZvbnRFbGVtZW50SW1wbCA6IHB1Ymxp
YyBIVE1MRQogcHVibGljOgogICAgIEhUTUxGb250RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRv
Yyk7CiAgICAgfkhUTUxGb250RWxlbWVudEltcGwoKTsKLQotICAgIHZpcnR1YWwgSWQgaWQoKSBj
b25zdDsKICAgICAKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQo
KSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQorICAgIHZpcnR1YWwgaW50IHRh
Z1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMTsgfQorCiAgICAgdmlydHVhbCBib29sIG1hcFRv
RW50cnkoSWQgYXR0ciwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3Q7CiAgICAg
dmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0
dHIpOwogCkBAIC0xMzQsMTAgKzEzOSwxMyBAQCBwdWJsaWM6CiAKIC8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KIAotY2xhc3MgSFRNTE1vZEVsZW1lbnRJbXBsIDogcHVibGljIEhUTUxHZW5lcmljRWxlbWVu
dEltcGwKK2NsYXNzIEhUTUxNb2RFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MRWxlbWVudEltcGwK
IHsKIHB1YmxpYzoKLSAgICBIVE1MTW9kRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgdXNo
b3J0IGVsZW1lbnRJZCk7CisgICAgSFRNTE1vZEVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5h
bWUmIHRhZ05hbWUsIERvY3VtZW50UHRyICpkb2MpOworCisgICAgdmlydHVhbCBIVE1MVGFnU3Rh
dHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzUmVxdWlyZWQ7
IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDE7IH0KIAog
ICAgIERPTVN0cmluZyBjaXRlKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRDaXRlKGNvbnN0IERPTVN0
cmluZyAmKTsKQEAgLTE1Miw5ICsxNjAsMTAgQEAgY2xhc3MgSFRNTFF1b3RlRWxlbWVudEltcGwg
OiBwdWJsaWMgSFRNTAogewogcHVibGljOgogICAgIEhUTUxRdW90ZUVsZW1lbnRJbXBsKERvY3Vt
ZW50UHRyICpkb2MpOwotCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwogICAgIAorICAgIHZp
cnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRh
Z1N0YXR1c1JlcXVpcmVkOyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7
IHJldHVybiAxOyB9CisKICAgICBET01TdHJpbmcgY2l0ZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0
Q2l0ZShjb25zdCBET01TdHJpbmcgJik7CiB9OwpJbmRleDoga2h0bWwvaHRtbC9odG1sX2xpc3Rp
bXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9odG1s
L2h0bWxfbGlzdGltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjkKZGlmZiAtdSAtcCAt
cjEuOSBraHRtbC9odG1sL2h0bWxfbGlzdGltcGwuY3BwCi0tLSBraHRtbC9odG1sL2h0bWxfbGlz
dGltcGwuY3BwCTExIE1heSAyMDA1IDA1OjQ5OjM0IC0wMDAwCTEuOQorKysga2h0bWwvaHRtbC9o
dG1sX2xpc3RpbXBsLmNwcAk3IEp1bCAyMDA1IDA1OjU5OjAyIC0wMDAwCkBAIC0zMiwxMSArMzIs
NiBAQCB1c2luZyBuYW1lc3BhY2Uga2h0bWw7CiAKIG5hbWVzcGFjZSBET00gewogCi1Ob2RlSW1w
bDo6SWQgSFRNTFVMaXN0RWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURf
VUw7Ci19Ci0KIGJvb2wgSFRNTFVMaXN0RWxlbWVudEltcGw6Om1hcFRvRW50cnkoTm9kZUltcGw6
OklkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0CiB7CiAgICAgc3dp
dGNoIChhdHRyKSB7CkBAIC04NCwxMSArNzksNiBAQCB2b2lkIEhUTUxVTGlzdEVsZW1lbnRJbXBs
OjpzZXRUeXBlKGNvbnN0CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotTm9kZUltcGw6OklkIEhU
TUxEaXJlY3RvcnlFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9ESVI7
Ci19Ci0KIGJvb2wgSFRNTERpcmVjdG9yeUVsZW1lbnRJbXBsOjpjb21wYWN0KCkgY29uc3QKIHsK
ICAgICByZXR1cm4gIWdldEF0dHJpYnV0ZShBVFRSX0NPTVBBQ1QpLmlzTnVsbCgpOwpAQCAtMTAx
LDExICs5MSw2IEBAIHZvaWQgSFRNTERpcmVjdG9yeUVsZW1lbnRJbXBsOjpzZXRDb21wYWMKIAog
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Ob2RlSW1wbDo6SWQgSFRNTE1lbnVFbGVtZW50SW1wbDo6
aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9NRU5VOwotfQotCiBib29sIEhUTUxNZW51RWxl
bWVudEltcGw6OmNvbXBhY3QoKSBjb25zdAogewogICAgIHJldHVybiAhZ2V0QXR0cmlidXRlKEFU
VFJfQ09NUEFDVCkuaXNOdWxsKCk7CkBAIC0xMTgsMTEgKzEwMyw2IEBAIHZvaWQgSFRNTE1lbnVF
bGVtZW50SW1wbDo6c2V0Q29tcGFjdChib28KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Ob2Rl
SW1wbDo6SWQgSFRNTE9MaXN0RWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
SURfT0w7Ci19Ci0KIGJvb2wgSFRNTE9MaXN0RWxlbWVudEltcGw6Om1hcFRvRW50cnkoTm9kZUlt
cGw6OklkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0CiB7CiAgICAg
c3dpdGNoIChhdHRyKSB7CkBAIC0xNTUsNyArMTM1LDcgQEAgdm9pZCBIVE1MT0xpc3RFbGVtZW50
SW1wbDo6cGFyc2VNYXBwZWRBdAogICAgIGNhc2UgQVRUUl9TVEFSVDoKICAgICAgICAgICAgIF9z
dGFydCA9ICFhdHRyLT5pc051bGwoKSA/IGF0dHItPnZhbHVlKCkudG9JbnQoKSA6IDE7CiAgICAg
ZGVmYXVsdDoKLSAgICAgICAgSFRNTFVMaXN0RWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKGF0dHIpOworICAgICAgICBIVE1MRWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KGF0dHIpOwogICAgIH0KIH0KIApAQCAtMTg2LDExICsxNjYsNiBAQCB2b2lkIEhUTUxPTGlzdEVs
ZW1lbnRJbXBsOjpzZXRUeXBlKGNvbnN0CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotTm9kZUlt
cGw6OklkIEhUTUxMSUVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0xJ
OwotfQotCiBib29sIEhUTUxMSUVsZW1lbnRJbXBsOjptYXBUb0VudHJ5KE5vZGVJbXBsOjpJZCBh
dHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdAogewogICAgIHN3aXRjaCAo
YXR0cikgewpAQCAtMjUyLDExICsyMjcsOCBAQCB2b2lkIEhUTUxMSUVsZW1lbnRJbXBsOjphdHRh
Y2goKQogICAgICAgICBOb2RlSW1wbCAqbGlzdE5vZGUgPSAwOwogICAgICAgICBOb2RlSW1wbCAq
biA9IHRoaXM7CiAgICAgICAgIHdoaWxlICghbGlzdE5vZGUgJiYgKG4gPSBuLT5wYXJlbnROb2Rl
KCkpKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKG4tPmlkKCkpIHsKLSAgICAgICAgICAgICAgICBj
YXNlIElEX1VMOgotICAgICAgICAgICAgICAgIGNhc2UgSURfT0w6Ci0gICAgICAgICAgICAgICAg
ICAgIGxpc3ROb2RlID0gbjsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChuLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6dWwoKSkgfHwgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9sKCkp
KQorICAgICAgICAgICAgICAgIGxpc3ROb2RlID0gbjsKICAgICAgICAgfQogICAgICAgICAKICAg
ICAgICAgLy8gSWYgd2UgYXJlIG5vdCBpbiBhIGxpc3QsIHRlbGwgdGhlIHJlbmRlcmVyIHNvIGl0
IGNhbiBwb3NpdGlvbiB1cyBpbnNpZGUuCkBAIC0yNjUsNyArMjM3LDcgQEAgdm9pZCBIVE1MTElF
bGVtZW50SW1wbDo6YXR0YWNoKCkKICAgICAgICAgICAgIHJlbmRlci0+c2V0Tm90SW5MaXN0KHRy
dWUpOwogCiAJLy8gSWYgd2UgYXJlIGZpcnN0LCBhbmQgdGhlIE9MIGhhcyBhIHN0YXJ0IGF0dHIs
IHNldCB0aGUgdmFsdWUuCi0JaWYgKGxpc3ROb2RlICYmIGxpc3ROb2RlLT5pZCgpID09IElEX09M
ICYmICFtX3JlbmRlci0+cHJldmlvdXNTaWJsaW5nKCkpIHsKKwlpZiAobGlzdE5vZGUgJiYgbGlz
dE5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvbCgpKSAmJiAhbV9yZW5kZXItPnByZXZpb3Vz
U2libGluZygpKSB7CiAJICAgIEhUTUxPTGlzdEVsZW1lbnRJbXBsICpvbCA9IHN0YXRpY19jYXN0
PEhUTUxPTGlzdEVsZW1lbnRJbXBsICo+KGxpc3ROb2RlKTsKICAgICAgICAgICAgIHJlbmRlci0+
c2V0VmFsdWUob2wtPnN0YXJ0KCkpOwogCX0KQEAgLTI5NSwxMiArMjY3LDggQEAgdm9pZCBIVE1M
TElFbGVtZW50SW1wbDo6c2V0VmFsdWUobG9uZyB2YQogewogICAgIHNldEF0dHJpYnV0ZShBVFRS
X1ZBTFVFLCBRU3RyaW5nOjpudW1iZXIodmFsdWUpKTsKIH0KLS8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
IAotTm9kZUltcGw6OklkIEhUTUxETGlzdEVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIElEX0RMOwotfQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBib29sIEhUTUxETGlzdEVs
ZW1lbnRJbXBsOjpjb21wYWN0KCkgY29uc3QKIHsKSW5kZXg6IGtodG1sL2h0bWwvaHRtbF9saXN0
aW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwv
aHRtbF9saXN0aW1wbC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjcKZGlmZiAtdSAtcCAtcjEu
NyBraHRtbC9odG1sL2h0bWxfbGlzdGltcGwuaAotLS0ga2h0bWwvaHRtbC9odG1sX2xpc3RpbXBs
LmgJMTEgTWF5IDIwMDUgMDU6NDk6MzQgLTAwMDAJMS43CisrKyBraHRtbC9odG1sL2h0bWxfbGlz
dGltcGwuaAk3IEp1bCAyMDA1IDA1OjU5OjAyIC0wMDAwCkBAIC0zNSwxMCArMzUsMTEgQEAgbmFt
ZXNwYWNlIERPTQogY2xhc3MgSFRNTFVMaXN0RWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTEVsZW1l
bnRJbXBsCiB7CiBwdWJsaWM6Ci0gICAgSFRNTFVMaXN0RWxlbWVudEltcGwoRG9jdW1lbnRQdHIg
KmRvYykgOiBIVE1MRWxlbWVudEltcGwoZG9jKSB7fQorICAgIEhUTUxVTGlzdEVsZW1lbnRJbXBs
KERvY3VtZW50UHRyICpkb2MpIDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6dWwoKSwgZG9j
KSB7fQogICAgIHZpcnR1YWwgfkhUTUxVTGlzdEVsZW1lbnRJbXBsKCkge30KIAotICAgIHZpcnR1
YWwgSWQgaWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWly
ZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQorICAgIHZpcnR1YWwg
aW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gNTsgfQogCiAgICAgdmlydHVhbCBib29s
IG1hcFRvRW50cnkoSWQgYXR0ciwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3Q7
CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUlt
cGwgKik7CkBAIC01Nyw5ICs1OCwxMCBAQCBwdWJsaWM6CiBjbGFzcyBIVE1MRGlyZWN0b3J5RWxl
bWVudEltcGwgOiBwdWJsaWMgSFRNTEVsZW1lbnRJbXBsCiB7CiBwdWJsaWM6Ci0gICAgSFRNTERp
cmVjdG9yeUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpIDogSFRNTEVsZW1lbnRJbXBsKGRv
Yykge30KKyAgICBIVE1MRGlyZWN0b3J5RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykgOiBI
VE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjpkaXIoKSwgZG9jKSB7fQogCi0gICAgdmlydHVhbCBJ
ZCBpZCgpIGNvbnN0OworICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVu
dCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9CisgICAgdmlydHVhbCBpbnQg
dGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiA1OyB9CiAKICAgICBib29sIGNvbXBhY3QoKSBj
b25zdDsKICAgICB2b2lkIHNldENvbXBhY3QoYm9vbCk7CkBAIC03MCw5ICs3MiwxMCBAQCBwdWJs
aWM6CiBjbGFzcyBIVE1MTWVudUVsZW1lbnRJbXBsIDogcHVibGljIEhUTUxFbGVtZW50SW1wbAog
ewogcHVibGljOgotICAgIEhUTUxNZW51RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykgOiBI
VE1MRWxlbWVudEltcGwoZG9jKSB7fQorICAgIEhUTUxNZW51RWxlbWVudEltcGwoRG9jdW1lbnRQ
dHIgKmRvYykgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjptZW51KCksIGRvYykge30KIAot
ICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5k
VGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQorICAg
IHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gNTsgfQogCiAgICAgYm9v
bCBjb21wYWN0KCkgY29uc3Q7CiAgICAgdm9pZCBzZXRDb21wYWN0KGJvb2wpOwpAQCAtODAsMTQg
KzgzLDE1IEBAIHB1YmxpYzoKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1jbGFzcyBIVE1MT0xp
c3RFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MVUxpc3RFbGVtZW50SW1wbAorY2xhc3MgSFRNTE9M
aXN0RWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTEVsZW1lbnRJbXBsCiB7CiBwdWJsaWM6CiAgICAg
SFRNTE9MaXN0RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgICAgICAgOiBIVE1MVUxp
c3RFbGVtZW50SW1wbChkb2MpIHsgX3N0YXJ0ID0gMTsgfQotCi0gICAgdmlydHVhbCBJZCBpZCgp
IGNvbnN0OworICAgICAgICA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6Om9sKCksIGRvYykg
eyBfc3RhcnQgPSAxOyB9CiAgICAgCisgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1Jl
cXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzUmVxdWlyZWQ7IH0KKyAgICB2aXJ0
dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDU7IH0KKwogICAgIHZpcnR1YWwg
Ym9vbCBtYXBUb0VudHJ5KElkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNv
bnN0OwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1
dGVJbXBsICopOwogCkBAIC0xMTAsMTAgKzExNCwxMSBAQCBjbGFzcyBIVE1MTElFbGVtZW50SW1w
bCA6IHB1YmxpYyBIVE1MRWxlCiB7CiBwdWJsaWM6CiAgICAgSFRNTExJRWxlbWVudEltcGwoRG9j
dW1lbnRQdHIgKmRvYykKLSAgICAgICAgOiBIVE1MRWxlbWVudEltcGwoZG9jKSB7IGlzVmFsdWVk
ID0gZmFsc2U7IH0KKyAgICAgICAgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjpsaSgpLCBk
b2MpIHsgaXNWYWx1ZWQgPSBmYWxzZTsgfQogICAgIHZpcnR1YWwgfkhUTUxMSUVsZW1lbnRJbXBs
KCkge30KIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEhUTUxUYWdT
dGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNPcHRpb25h
bDsgfQorICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMzsgfQog
CiAgICAgdmlydHVhbCBib29sIG1hcFRvRW50cnkoTm9kZUltcGw6OklkIGF0dHIsIE1hcHBlZEF0
dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICphdHRyKTsKQEAgLTEzNiwxMCArMTQxLDEx
IEBAIHByaXZhdGU6CiBjbGFzcyBIVE1MRExpc3RFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MRWxl
bWVudEltcGwKIHsKIHB1YmxpYzoKLSAgICBIVE1MRExpc3RFbGVtZW50SW1wbChEb2N1bWVudFB0
ciAqZG9jKSA6IEhUTUxFbGVtZW50SW1wbChkb2MpIHt9CisgICAgSFRNTERMaXN0RWxlbWVudElt
cGwoRG9jdW1lbnRQdHIgKmRvYykgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjpkbCgpLCBk
b2MpIHt9CiAgICAgdmlydHVhbCB+SFRNTERMaXN0RWxlbWVudEltcGwoKSB7fQogCi0gICAgdmly
dHVhbCBJZCBpZCgpIGNvbnN0OworICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1
aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9CisgICAgdmlydHVh
bCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiA1OyB9CiAKICAgICBib29sIGNvbXBh
Y3QoKSBjb25zdDsKICAgICB2b2lkIHNldENvbXBhY3QoYm9vbCk7CkluZGV4OiBraHRtbC9odG1s
L2h0bWxfbWlzY2ltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3Jl
L2todG1sL2h0bWwvaHRtbF9taXNjaW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjYK
ZGlmZiAtdSAtcCAtcjEuMjYga2h0bWwvaHRtbC9odG1sX21pc2NpbXBsLmNwcAotLS0ga2h0bWwv
aHRtbC9odG1sX21pc2NpbXBsLmNwcAkxMSBKdW4gMjAwNSAwOTo1MTowMSAtMDAwMAkxLjI2Cisr
KyBraHRtbC9odG1sL2h0bWxfbWlzY2ltcGwuY3BwCTcgSnVsIDIwMDUgMDU6NTk6MDIgLTAwMDAK
QEAgLTM1LDE1ICszNSwxMCBAQAogbmFtZXNwYWNlIERPTSB7CiAKIEhUTUxCYXNlRm9udEVsZW1l
bnRJbXBsOjpIVE1MQmFzZUZvbnRFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAgIDog
SFRNTEVsZW1lbnRJbXBsKGRvYykKKyAgICA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6OmJh
c2Vmb250KCksIGRvYykKIHsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxCYXNlRm9udEVsZW1lbnRJ
bXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0JBU0VGT05UOwotfQotCiBET01TdHJp
bmcgSFRNTEJhc2VGb250RWxlbWVudEltcGw6OmNvbG9yKCkgY29uc3QKIHsKICAgICByZXR1cm4g
Z2V0QXR0cmlidXRlKEFUVFJfQ09MT1IpOwpAQCAtMTQxLDcyICsxMzYsNzIgQEAgTm9kZUltcGwg
KkhUTUxDb2xsZWN0aW9uSW1wbDo6dHJhdmVyc2VOZQogICAgICAgICAgICAgSFRNTEVsZW1lbnRJ
bXBsICplID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KGN1cnJlbnQpOwogICAgICAg
ICAgICAgc3dpdGNoKHR5cGUpIHsKICAgICAgICAgICAgIGNhc2UgRE9DX0lNQUdFUzoKLSAgICAg
ICAgICAgICAgICBpZihlLT5pZCgpID09IElEX0lNRykKKyAgICAgICAgICAgICAgICBpZiAoZS0+
aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6aW1nKCkpKQogICAgICAgICAgICAgICAgICAgICBmb3Vu
ZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIERPQ19G
T1JNUzoKLSAgICAgICAgICAgICAgICBpZihlLT5pZCgpID09IElEX0ZPUk0pCisgICAgICAgICAg
ICAgICAgaWYoZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6Zm9ybSgpKSkKICAgICAgICAgICAg
ICAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgY2FzZSBET0NfTkFNRUFCTEVfSVRFTVM6Ci0gICAgICAgICAgICAgICAgaWYoZS0+aWQoKSA9
PSBJRF9JTUcpCisgICAgICAgICAgICAgICAgaWYgKGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6
OmltZygpKSkKICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwotICAgICAgICAgICAg
ICAgIGlmKGUtPmlkKCkgPT0gSURfRk9STSkKKyAgICAgICAgICAgICAgICBpZiAoZS0+aGFzTG9j
YWxOYW1lKEhUTUxOYW1lczo6Zm9ybSgpKSkKICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0
cnVlOwotICAgICAgICAgICAgICAgIGlmKGUtPmlkKCkgPT0gSURfQVBQTEVUKQorICAgICAgICAg
ICAgICAgIGlmIChlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjphcHBsZXQoKSkpCiAgICAgICAg
ICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBpZihlLT5pZCgpID09
IElEX0VNQkVEKQorICAgICAgICAgICAgICAgIGlmIChlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVz
OjplbWJlZCgpKSkKICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwotICAgICAgICAg
ICAgICAgIGlmKGUtPmlkKCkgPT0gSURfT0JKRUNUKQorICAgICAgICAgICAgICAgIGlmIChlLT5o
YXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvYmplY3QoKSkpCiAgICAgICAgICAgICAgICAgICAgIGZv
dW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgVEFC
TEVfVEJPRElFUzoKLSAgICAgICAgICAgICAgICBpZihlLT5pZCgpID09IElEX1RCT0RZKQorICAg
ICAgICAgICAgICAgIGlmIChlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0Ym9keSgpKSkKICAg
ICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGVsc2UgaWYo
ZS0+aWQoKSA9PSBJRF9UQUJMRSkKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChlLT5oYXNMb2Nh
bE5hbWUoSFRNTE5hbWVzOjp0YWJsZSgpKSkKICAgICAgICAgICAgICAgICAgICAgZGVlcCA9IGZh
bHNlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBUUl9DRUxMUzoK
LSAgICAgICAgICAgICAgICBpZihlLT5pZCgpID09IElEX1REIHx8IGUtPmlkKCkgPT0gSURfVEgp
CisgICAgICAgICAgICAgICAgaWYgKGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnRkKCkpIHx8
IGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnRoKCkpKQogICAgICAgICAgICAgICAgICAgICBm
b3VuZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZihlLT5pZCgpID09IElEX1RBQkxF
KQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnRh
YmxlKCkpKQogICAgICAgICAgICAgICAgICAgICBkZWVwID0gZmFsc2U7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFRBQkxFX1JPV1M6CiAgICAgICAgICAgICBjYXNl
IFRTRUNUSU9OX1JPV1M6Ci0gICAgICAgICAgICAgICAgaWYoZS0+aWQoKSA9PSBJRF9UUikKKyAg
ICAgICAgICAgICAgICBpZiAoZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dHIoKSkpCiAgICAg
ICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBlbHNlIGlmKGUt
PmlkKCkgPT0gSURfVEFCTEUpCisgICAgICAgICAgICAgICAgZWxzZSBpZiAoZS0+aGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6dGFibGUoKSkpCiAgICAgICAgICAgICAgICAgICAgIGRlZXAgPSBmYWxz
ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgU0VMRUNUX09QVElP
TlM6Ci0gICAgICAgICAgICAgICAgaWYoZS0+aWQoKSA9PSBJRF9PUFRJT04pCisgICAgICAgICAg
ICAgICAgaWYgKGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9wdGlvbigpKSkKICAgICAgICAg
ICAgICAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgY2FzZSBNQVBfQVJFQVM6Ci0gICAgICAgICAgICAgICAgaWYoZS0+aWQoKSA9PSBJRF9B
UkVBKQorICAgICAgICAgICAgICAgIGlmIChlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjphcmVh
KCkpKQogICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICBjYXNlIERPQ19BUFBMRVRTOiAgIC8vIGFsbCBPQkpFQ1QgYW5k
IEFQUExFVCBlbGVtZW50cwotICAgICAgICAgICAgICAgIGlmKGUtPmlkKCkgPT0gSURfT0JKRUNU
IHx8IGUtPmlkKCkgPT0gSURfQVBQTEVUKQorICAgICAgICAgICAgICAgIGlmIChlLT5oYXNMb2Nh
bE5hbWUoSFRNTE5hbWVzOjpvYmplY3QoKSkgfHwgZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6
YXBwbGV0KCkpKQogICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIERPQ19FTUJFRFM6ICAgLy8gYWxsIEVNQkVE
IGVsZW1lbnRzCi0gICAgICAgICAgICAgICAgaWYoZS0+aWQoKSA9PSBJRF9FTUJFRCkKKyAgICAg
ICAgICAgICAgICBpZiAoZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6ZW1iZWQoKSkpCiAgICAg
ICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIGNhc2UgRE9DX09CSkVDVFM6ICAgLy8gYWxsIE9CSkVDVCBlbGVtZW50cwotICAg
ICAgICAgICAgICAgIGlmKGUtPmlkKCkgPT0gSURfT0JKRUNUKQorICAgICAgICAgICAgICAgIGlm
IChlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvYmplY3QoKSkpCiAgICAgICAgICAgICAgICAg
ICAgIGZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNh
c2UgRE9DX0xJTktTOiAgICAgLy8gYWxsIEEgX2FuZF8gQVJFQSBlbGVtZW50cyB3aXRoIGEgdmFs
dWUgZm9yIGhyZWYKLSAgICAgICAgICAgICAgICBpZihlLT5pZCgpID09IElEX0EgfHwgZS0+aWQo
KSA9PSBJRF9BUkVBKQotICAgICAgICAgICAgICAgICAgICBpZighZS0+Z2V0QXR0cmlidXRlKEFU
VFJfSFJFRikuaXNOdWxsKCkpCisgICAgICAgICAgICAgICAgaWYgKGUtPmhhc0xvY2FsTmFtZShI
VE1MTmFtZXM6OmEoKSkgfHwgZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6YXJlYSgpKSkKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKCFlLT5nZXRBdHRyaWJ1dGUoQVRUUl9IUkVGKS5pc051bGwo
KSkKICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIGNhc2UgRE9DX0FOQ0hPUlM6ICAgICAgLy8gYWxsIEEgZWxl
bWVudHMgd2l0aCBhIHZhbHVlIGZvciBuYW1lIG9yIGFuIGlkIGF0dHJpYnV0ZQotICAgICAgICAg
ICAgICAgIGlmKGUtPmlkKCkgPT0gSURfQSkKLSAgICAgICAgICAgICAgICAgICAgaWYoIWUtPmdl
dEF0dHJpYnV0ZShBVFRSX05BTUUpLmlzTnVsbCgpKQorICAgICAgICAgICAgICAgIGlmIChlLT5o
YXNMb2NhbE5hbWUoSFRNTE5hbWVzOjphKCkpKQorICAgICAgICAgICAgICAgICAgICBpZiAoIWUt
PmdldEF0dHJpYnV0ZShBVFRSX05BTUUpLmlzTnVsbCgpKQogICAgICAgICAgICAgICAgICAgICAg
ICAgZm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2Fz
ZSBET0NfQUxMOgpAQCAtMjE5LDkgKzIxNCw5IEBAIE5vZGVJbXBsICpIVE1MQ29sbGVjdGlvbklt
cGw6OnRyYXZlcnNlTmUKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAga2RE
ZWJ1ZyggNjAzMCApIDw8ICJFcnJvciBpbiBIVE1MQ29sbGVjdGlvbiwgd3JvbmcgdGFnSWQhIiA8
PCBlbmRsOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGZvdW5kKSB7CisKKyAgICAg
ICAgICAgIGlmIChmb3VuZCkKICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudDsKLSAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIGlmIChkZWVwKSB7CiAgICAgICAgICAgICAgICAgY3VycmVu
dCA9IGN1cnJlbnQtPnRyYXZlcnNlTmV4dE5vZGUobV9iYXNlLmdldCgpKTsKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKQEAgLTI5OCwyOSArMjkzLDMxIEBAIE5vZGVJbXBsICpIVE1MQ29sbGVj
dGlvbkltcGw6Om5leHRJdGVtKCkKIAogYm9vbCBIVE1MQ29sbGVjdGlvbkltcGw6OmNoZWNrRm9y
TmFtZU1hdGNoKE5vZGVJbXBsICpub2RlLCBib29sIGNoZWNrTmFtZSwgY29uc3QgRE9NU3RyaW5n
ICZuYW1lLCBib29sIGNhc2VTZW5zaXRpdmUpIGNvbnN0CiB7Ci0gICAgRWxlbWVudEltcGwgKmUg
PSBzdGF0aWNfY2FzdDxFbGVtZW50SW1wbCAqPihub2RlKTsKKyAgICBpZiAoIW5vZGUtPmlzSFRN
TEVsZW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIEhUTUxFbGVtZW50
SW1wbCAqZSA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCo+KG5vZGUpOwogICAgIGlmIChj
YXNlU2Vuc2l0aXZlKSB7CiAgICAgICAgIGlmIChjaGVja05hbWUpIHsKICAgICAgICAgICAgIC8v
IGRvY3VtZW50LmFsbCByZXR1cm5zIG9ubHkgaW1hZ2VzLCBmb3JtcywgYXBwbGV0cywgb2JqZWN0
cyBhbmQgZW1iZWRzCiAgICAgICAgICAgICAvLyBieSBuYW1lICh0aG91Z2ggZXZlcnl0aGluZyBi
eSBpZCkKICAgICAgICAgICAgIGlmICh0eXBlID09IERPQ19BTEwgJiYgCi0gICAgICAgICAgICAg
ICAgIShlLT5pZCgpID09IElEX0lNRyB8fCBlLT5pZCgpID09IElEX0ZPUk0gfHwKLSAgICAgICAg
ICAgICAgICAgIGUtPmlkKCkgPT0gSURfQVBQTEVUIHx8IGUtPmlkKCkgPT0gSURfT0JKRUNUIHx8
Ci0gICAgICAgICAgICAgICAgICBlLT5pZCgpID09IElEX0VNQkVEKSkKKyAgICAgICAgICAgICAg
ICAhKGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmltZygpKSB8fCBlLT5oYXNMb2NhbE5hbWUo
SFRNTE5hbWVzOjpmb3JtKCkpIHx8CisgICAgICAgICAgICAgICAgICBlLT5oYXNMb2NhbE5hbWUo
SFRNTE5hbWVzOjphcHBsZXQoKSkgfHwgZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b2JqZWN0
KCkpIHx8CisgICAgICAgICAgICAgICAgICBlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjplbWJl
ZCgpKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAgICByZXR1
cm4gZS0+Z2V0QXR0cmlidXRlKEFUVFJfTkFNRSkgPT0gbmFtZSAmJiBlLT5nZXRBdHRyaWJ1dGUo
QVRUUl9JRCkgIT0gbmFtZTsKLSAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgfSBlbHNlCiAgICAg
ICAgICAgICByZXR1cm4gZS0+Z2V0QXR0cmlidXRlKEFUVFJfSUQpID09IG5hbWU7Ci0gICAgICAg
IH0KICAgICB9IGVsc2UgewogICAgICAgICBpZiAoY2hlY2tOYW1lKSB7CiAgICAgICAgICAgICAv
LyBkb2N1bWVudC5hbGwgcmV0dXJucyBvbmx5IGltYWdlcywgZm9ybXMsIGFwcGxldHMsIG9iamVj
dHMgYW5kIGVtYmVkcwogICAgICAgICAgICAgLy8gYnkgbmFtZSAodGhvdWdoIGV2ZXJ5dGhpbmcg
YnkgaWQpCiAgICAgICAgICAgICBpZiAodHlwZSA9PSBET0NfQUxMICYmIAotICAgICAgICAgICAg
ICAgICEoZS0+aWQoKSA9PSBJRF9JTUcgfHwgZS0+aWQoKSA9PSBJRF9GT1JNIHx8Ci0gICAgICAg
ICAgICAgICAgICBlLT5pZCgpID09IElEX0FQUExFVCB8fCBlLT5pZCgpID09IElEX09CSkVDVCB8
fAotICAgICAgICAgICAgICAgICAgZS0+aWQoKSA9PSBJRF9FTUJFRCkpCisgICAgICAgICAgICAg
ICAgIShlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjppbWcoKSkgfHwgZS0+aGFzTG9jYWxOYW1l
KEhUTUxOYW1lczo6Zm9ybSgpKSB8fAorICAgICAgICAgICAgICAgICAgZS0+aGFzTG9jYWxOYW1l
KEhUTUxOYW1lczo6YXBwbGV0KCkpIHx8IGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9iamVj
dCgpKSB8fAorICAgICAgICAgICAgICAgICAgZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6ZW1i
ZWQoKSkpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAgICAgcmV0
dXJuIGUtPmdldEF0dHJpYnV0ZShBVFRSX05BTUUpLmRvbVN0cmluZygpLmxvd2VyKCkgPT0gbmFt
ZS5sb3dlcigpICYmCkBAIC0zNzksNyArMzc2LDkgQEAgdm9pZCBIVE1MQ29sbGVjdGlvbkltcGw6
OnVwZGF0ZU5hbWVDYWNoZQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgZm9yIChOb2RlSW1w
bCAqbiA9IHRyYXZlcnNlTmV4dEl0ZW0obV9iYXNlLmdldCgpKTsgbjsgbiA9IHRyYXZlcnNlTmV4
dEl0ZW0obikpIHsKLSAgICAgICAgRWxlbWVudEltcGwgKmUgPSBzdGF0aWNfY2FzdDxFbGVtZW50
SW1wbCAqPihuKTsKKyAgICAgICAgaWYgKCFuLT5pc0hUTUxFbGVtZW50KCkpCisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgSFRNTEVsZW1lbnRJbXBsKiBlID0gc3RhdGljX2Nhc3Q8SFRN
TEVsZW1lbnRJbXBsKj4obik7CiAgICAgICAgIFFTdHJpbmcgaWRBdHRyID0gZS0+Z2V0QXR0cmli
dXRlKEFUVFJfSUQpLnN0cmluZygpOwogICAgICAgICBRU3RyaW5nIG5hbWVBdHRyID0gZS0+Z2V0
QXR0cmlidXRlKEFUVFJfTkFNRSkuc3RyaW5nKCk7CiAgICAgICAgIGlmICghaWRBdHRyLmlzRW1w
dHkoKSkgewpAQCAtMzkzLDkgKzM5Miw5IEBAIHZvaWQgSFRNTENvbGxlY3Rpb25JbXBsOjp1cGRh
dGVOYW1lQ2FjaGUKICAgICAgICAgfQogICAgICAgICBpZiAoIW5hbWVBdHRyLmlzRW1wdHkoKSAm
JiBpZEF0dHIgIT0gbmFtZUF0dHIKICAgICAgICAgICAgICYmICh0eXBlICE9IERPQ19BTEwgfHwg
Ci0gICAgICAgICAgICAgICAgKGUtPmlkKCkgPT0gSURfSU1HIHx8IGUtPmlkKCkgPT0gSURfRk9S
TSB8fAotICAgICAgICAgICAgICAgICBlLT5pZCgpID09IElEX0FQUExFVCB8fCBlLT5pZCgpID09
IElEX09CSkVDVCB8fAotICAgICAgICAgICAgICAgICBlLT5pZCgpID09IElEX0VNQkVEKSkpIHsK
KyAgICAgICAgICAgICAgICAoZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6aW1nKCkpIHx8IGUt
Pmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmZvcm0oKSkgfHwKKyAgICAgICAgICAgICAgICAgZS0+
aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6YXBwbGV0KCkpIHx8IGUtPmhhc0xvY2FsTmFtZShIVE1M
TmFtZXM6Om9iamVjdCgpKSB8fAorICAgICAgICAgICAgICAgICBlLT5oYXNMb2NhbE5hbWUoSFRN
TE5hbWVzOjplbWJlZCgpKSkpKSB7CiAgICAgICAgICAgICAvLyBhZGQgdG8gbmFtZSBjYWNoZQog
ICAgICAgICAgICAgUVB0clZlY3RvcjxOb2RlSW1wbD4gKm5hbWVWZWN0b3IgPSBpbmZvLT5uYW1l
Q2FjaGUuZmluZChuYW1lQXR0cik7CiAgICAgICAgICAgICBpZiAoIW5hbWVWZWN0b3IpIHsKQEAg
LTUzMiwxMiArNTMxLDEwIEBAIE5vZGVJbXBsKiBIVE1MRm9ybUNvbGxlY3Rpb25JbXBsOjpnZXRO
YW0KIAogTm9kZUltcGwqIEhUTUxGb3JtQ29sbGVjdGlvbkltcGw6OmdldE5hbWVkRm9ybUl0ZW0o
aW50IGF0dHJfaWQsIGNvbnN0IERPTVN0cmluZyYgbmFtZSwgaW50IGR1cGxpY2F0ZU51bWJlciwg
Ym9vbCBjYXNlU2Vuc2l0aXZlKSBjb25zdAogewotICAgIGlmKG1fYmFzZS0+bm9kZVR5cGUoKSA9
PSBOb2RlOjpFTEVNRU5UX05PREUpCi0gICAgeworICAgIGlmIChtX2Jhc2UtPm5vZGVUeXBlKCkg
PT0gTm9kZTo6RUxFTUVOVF9OT0RFKSB7CiAgICAgICAgIEhUTUxFbGVtZW50SW1wbCogYmFzZUVs
ZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwqPihtX2Jhc2UuZ2V0KCkpOwogICAg
ICAgICBib29sIGZvdW5kSW5wdXRFbGVtZW50cyA9IGZhbHNlOwotICAgICAgICBpZihiYXNlRWxl
bWVudC0+aWQoKSA9PSBJRF9GT1JNKQotICAgICAgICB7CisgICAgICAgIGlmIChiYXNlRWxlbWVu
dC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6Zm9ybSgpKSkgewogICAgICAgICAgICAgSFRNTEZv
cm1FbGVtZW50SW1wbCogZiA9IHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudEltcGwqPihiYXNl
RWxlbWVudCk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZi0+Zm9ybUVs
ZW1lbnRzLmNvdW50KCk7ICsraSkgewogICAgICAgICAgICAgICAgIEhUTUxHZW5lcmljRm9ybUVs
ZW1lbnRJbXBsKiBlID0gZi0+Zm9ybUVsZW1lbnRzW2ldOwpAQCAtNTU3LDggKzU1NCw3IEBAIE5v
ZGVJbXBsKiBIVE1MRm9ybUNvbGxlY3Rpb25JbXBsOjpnZXROYW0KICAgICAgICAgICAgIH0KICAg
ICAgICAgfQogCi0gICAgICAgIGlmICggIWZvdW5kSW5wdXRFbGVtZW50cyApCi0gICAgICAgIHsK
KyAgICAgICAgaWYgKCFmb3VuZElucHV0RWxlbWVudHMpIHsKICAgICAgICAgICAgIEhUTUxGb3Jt
RWxlbWVudEltcGwqIGYgPSBzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnRJbXBsKj4oYmFzZUVs
ZW1lbnQpOwogCiAgICAgICAgICAgICBmb3IodW5zaWduZWQgaSA9IDA7IGkgPCBmLT5pbWdFbGVt
ZW50cy5jb3VudCgpOyArK2kpCkBAIC02NTAsNyArNjQ2LDcgQEAgdm9pZCBIVE1MRm9ybUNvbGxl
Y3Rpb25JbXBsOjp1cGRhdGVOYW1lQwogCiAgICAgUURpY3Q8Y2hhcj4gZm91bmRJbnB1dEVsZW1l
bnRzOwogCi0gICAgaWYgKG1fYmFzZS0+aWQoKSAhPSBJRF9GT1JNKSB7CisgICAgaWYgKCFtX2Jh
c2UtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpmb3JtKCkpKSB7CiAgICAgICAgIGluZm8tPmhhc05h
bWVDYWNoZSA9IHRydWU7CiAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4OiBraHRtbC9odG1s
L2h0bWxfbWlzY2ltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9r
aHRtbC9odG1sL2h0bWxfbWlzY2ltcGwuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNgpkaWZm
IC11IC1wIC1yMS4xNiBraHRtbC9odG1sL2h0bWxfbWlzY2ltcGwuaAotLS0ga2h0bWwvaHRtbC9o
dG1sX21pc2NpbXBsLmgJMTEgTWF5IDIwMDUgMDA6NTg6MjggLTAwMDAJMS4xNgorKysga2h0bWwv
aHRtbC9odG1sX21pc2NpbXBsLmgJNyBKdWwgMjAwNSAwNTo1OTowMyAtMDAwMApAQCAtMzksNyAr
MzksOCBAQCBjbGFzcyBIVE1MQmFzZUZvbnRFbGVtZW50SW1wbCA6IHB1YmxpYyBICiBwdWJsaWM6
CiAgICAgSFRNTEJhc2VGb250RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYyk7CiAKLSAgICB2
aXJ0dWFsIElkIGlkKCkgY29uc3Q7CisgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1Jl
cXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzRm9yYmlkZGVuOyB9CisgICAgdmly
dHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAwOyB9CiAKICAgICBET01TdHJp
bmcgY29sb3IoKSBjb25zdDsKICAgICB2b2lkIHNldENvbG9yKGNvbnN0IERPTVN0cmluZyAmKTsK
SW5kZXg6IGtodG1sL2h0bWwvaHRtbF9vYmplY3RpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfb2JqZWN0aW1wbC5jcHAsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuNjcKZGlmZiAtdSAtcCAtcjEuNjcga2h0bWwvaHRtbC9odG1sX29i
amVjdGltcGwuY3BwCi0tLSBraHRtbC9odG1sL2h0bWxfb2JqZWN0aW1wbC5jcHAJMjkgSnVuIDIw
MDUgMTc6NTA6MjQgLTAwMDAJMS42NworKysga2h0bWwvaHRtbC9odG1sX29iamVjdGltcGwuY3Bw
CTcgSnVsIDIwMDUgMDU6NTk6MDMgLTAwMDAKQEAgLTU4LDcgKzU4LDcgQEAgbmFtZXNwYWNlIERP
TSB7CiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxBcHBsZXRFbGVtZW50SW1wbDo6SFRNTEFw
cGxldEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0gIDogSFRNTEVsZW1lbnRJbXBsKGRv
YykKKyAgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjphcHBsZXQoKSwgZG9jKQogewogICAg
IGFwcGxldEluc3RhbmNlID0gMDsKICAgICBtX2FsbFBhcmFtc0F2YWlsYWJsZSA9IGZhbHNlOwpA
QCAtNjksOSArNjksOSBAQCBIVE1MQXBwbGV0RWxlbWVudEltcGw6On5IVE1MQXBwbGV0RWxlbWVu
CiAgICAgZGVsZXRlIGFwcGxldEluc3RhbmNlOwogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTEFwcGxl
dEVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Citib29sIEhUTUxBcHBsZXRFbGVtZW50SW1wbDo6Y2hl
Y2tEVEQoY29uc3QgTm9kZUltcGwqIG5ld0NoaWxkKQogewotICAgIHJldHVybiBJRF9BUFBMRVQ7
CisJcmV0dXJuIG5ld0NoaWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6cGFyYW0oKSkgfHwgSFRN
TEVsZW1lbnRJbXBsOjpjaGVja0RURChuZXdDaGlsZCk7CiB9CiAKIGJvb2wgSFRNTEFwcGxldEVs
ZW1lbnRJbXBsOjptYXBUb0VudHJ5KE5vZGVJbXBsOjpJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVF
bnRyeSYgcmVzdWx0KSBjb25zdApAQCAtMzUzLDE2ICszNTMsMTYgQEAgdm9pZCBIVE1MQXBwbGV0
RWxlbWVudEltcGw6OnNldFdpZHRoKGNvbgogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MRW1i
ZWRFbGVtZW50SW1wbDo6SFRNTEVtYmVkRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAg
ICA6IEhUTUxFbGVtZW50SW1wbChkb2MpLCBlbWJlZEluc3RhbmNlKDApCisgICAgOiBIVE1MRWxl
bWVudEltcGwoSFRNTE5hbWVzOjplbWJlZCgpLCBkb2MpLCBlbWJlZEluc3RhbmNlKDApCiB7fQog
CiBIVE1MRW1iZWRFbGVtZW50SW1wbDo6fkhUTUxFbWJlZEVsZW1lbnRJbXBsKCkKIHsKIH0KIAot
Tm9kZUltcGw6OklkIEhUTUxFbWJlZEVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Citib29sIEhUTUxF
bWJlZEVsZW1lbnRJbXBsOjpjaGVja0RURChjb25zdCBOb2RlSW1wbCogbmV3Q2hpbGQpCiB7Ci0g
ICAgcmV0dXJuIElEX0VNQkVEOworCXJldHVybiBuZXdDaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OnBhcmFtKCkpIHx8IEhUTUxFbGVtZW50SW1wbDo6Y2hlY2tEVEQobmV3Q2hpbGQpOwogfQog
CiAjaWYgQVBQTEVfQ0hBTkdFUwpAQCAtNDc5LDcgKzQ3OSw3IEBAIGJvb2wgSFRNTEVtYmVkRWxl
bWVudEltcGw6OnJlbmRlcmVySXNOZWUKICAgICBLSFRNTFBhcnQgKnBhcnQgPSBnZXREb2N1bWVu
dCgpLT5wYXJ0KCk7CiAgICAgaWYgKCFwYXJ0KQogCXJldHVybiBmYWxzZTsKLSAgICByZXR1cm4g
cGFydC0+cGx1Z2luc0VuYWJsZWQoKSAmJiBwYXJlbnROb2RlKCktPmlkKCkgIT0gSURfT0JKRUNU
OworICAgIHJldHVybiBwYXJ0LT5wbHVnaW5zRW5hYmxlZCgpICYmICFwYXJlbnROb2RlKCktPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjpvYmplY3QoKSk7CiB9CiAKIFJlbmRlck9iamVjdCAqSFRNTEVt
YmVkRWxlbWVudEltcGw6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hICphcmVuYSwgUmVuZGVy
U3R5bGUgKnN0eWxlKQpAQCAtNTA0LDkgKzUwNCw5IEBAIGJvb2wgSFRNTEVtYmVkRWxlbWVudElt
cGw6OmlzVVJMQXR0cmlidXQKIAogSFRNTE9iamVjdEVsZW1lbnRJbXBsOjpIVE1MT2JqZWN0RWxl
bWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykgCiAjaWYgQVBQTEVfQ0hBTkdFUwotOiBIVE1MRWxl
bWVudEltcGwoZG9jKSwgbV9pbWFnZUxvYWRlcigwKSwgb2JqZWN0SW5zdGFuY2UoMCkKKzogSFRN
TEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6b2JqZWN0KCksIGRvYyksIG1faW1hZ2VMb2FkZXIoMCks
IG9iamVjdEluc3RhbmNlKDApCiAjZWxzZQotOiBIVE1MRWxlbWVudEltcGwoZG9jKSwgbV9pbWFn
ZUxvYWRlcigwKQorOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjpvYmplY3QoKSwgZG9jKSwg
bV9pbWFnZUxvYWRlcigwKQogI2VuZGlmCiB7CiAgICAgbmVlZFdpZGdldFVwZGF0ZSA9IGZhbHNl
OwpAQCAtNTE4LDkgKzUxOCw5IEBAIEhUTUxPYmplY3RFbGVtZW50SW1wbDo6fkhUTUxPYmplY3RF
bGVtZW4KICAgICBkZWxldGUgbV9pbWFnZUxvYWRlcjsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxP
YmplY3RFbGVtZW50SW1wbDo6aWQoKSBjb25zdAorYm9vbCBIVE1MT2JqZWN0RWxlbWVudEltcGw6
OmNoZWNrRFREKGNvbnN0IE5vZGVJbXBsKiBuZXdDaGlsZCkKIHsKLSAgICByZXR1cm4gSURfT0JK
RUNUOworCXJldHVybiBuZXdDaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnBhcmFtKCkpIHx8
IEhUTUxFbGVtZW50SW1wbDo6Y2hlY2tEVEQobmV3Q2hpbGQpOwogfQogCiAjaWYgQVBQTEVfQ0hB
TkdFUwpAQCAtNTU1LDcgKzU1NSw3IEBAIEtKUzo6QmluZGluZ3M6Okluc3RhbmNlICpIVE1MT2Jq
ZWN0RWxlbWUKIEhUTUxGb3JtRWxlbWVudEltcGwgKkhUTUxPYmplY3RFbGVtZW50SW1wbDo6Zm9y
bSgpIGNvbnN0CiB7CiAgICAgZm9yIChOb2RlSW1wbCAqcCA9IHBhcmVudE5vZGUoKTsgcCAhPSAw
OyBwID0gcC0+cGFyZW50Tm9kZSgpKSB7Ci0gICAgICAgIGlmIChwLT5pZCgpID09IElEX0ZPUk0p
CisgICAgICAgIGlmIChwLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Zm9ybSgpKSkKICAgICAgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnRJbXBsICo+KHApOwogICAgIH0K
ICAgICAKQEAgLTk1MCw3ICs5NTAsNyBAQCB2b2lkIEhUTUxPYmplY3RFbGVtZW50SW1wbDo6c2V0
V2lkdGgoY29uCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxQYXJhbUVsZW1lbnRJbXBsOjpI
VE1MUGFyYW1FbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAgIDogSFRNTEVsZW1lbnRJ
bXBsKGRvYykKKyAgICA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6OnBhcmFtKCksIGRvYykK
IHsKIH0KIApAQCAtOTU4LDExICs5NTgsNiBAQCBIVE1MUGFyYW1FbGVtZW50SW1wbDo6fkhUTUxQ
YXJhbUVsZW1lbnRJCiB7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MUGFyYW1FbGVtZW50SW1wbDo6
aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9QQVJBTTsKLX0KLQogdm9pZCBIVE1MUGFyYW1F
bGVtZW50SW1wbDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqYXR0
cikKIHsKICAgICBzd2l0Y2goIGF0dHItPmlkKCkgKQpJbmRleDoga2h0bWwvaHRtbC9odG1sX29i
amVjdGltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9o
dG1sL2h0bWxfb2JqZWN0aW1wbC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjMxCmRpZmYgLXUg
LXAgLXIxLjMxIGtodG1sL2h0bWwvaHRtbF9vYmplY3RpbXBsLmgKLS0tIGtodG1sL2h0bWwvaHRt
bF9vYmplY3RpbXBsLmgJMTEgTWF5IDIwMDUgMDU6NDk6MzQgLTAwMDAJMS4zMQorKysga2h0bWwv
aHRtbC9odG1sX29iamVjdGltcGwuaAk3IEp1bCAyMDA1IDA1OjU5OjAzIC0wMDAwCkBAIC00Miwx
MSArNDIsMTIgQEAgY2xhc3MgSFRNTEFwcGxldEVsZW1lbnRJbXBsIDogcHVibGljIEhUTQogewog
cHVibGljOgogICAgIEhUTUxBcHBsZXRFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKTsKLQog
ICAgIH5IVE1MQXBwbGV0RWxlbWVudEltcGwoKTsKIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25z
dDsKLQorICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0
IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3Jp
dHkoKSBjb25zdCB7IHJldHVybiAxOyB9CisJdmlydHVhbCBib29sIGNoZWNrRFREKGNvbnN0IE5v
ZGVJbXBsKiBuZXdDaGlsZCk7CisJCiAgICAgdmlydHVhbCBib29sIG1hcFRvRW50cnkoSWQgYXR0
ciwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lk
IHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKnRva2VuKTsKICAgICAK
QEAgLTExMiwxMCArMTEzLDExIEBAIGNsYXNzIEhUTUxFbWJlZEVsZW1lbnRJbXBsIDogcHVibGlj
IEhUTUwKIHsKIHB1YmxpYzoKICAgICBIVE1MRW1iZWRFbGVtZW50SW1wbChEb2N1bWVudFB0ciAq
ZG9jKTsKLQogICAgIH5IVE1MRW1iZWRFbGVtZW50SW1wbCgpOwogCi0gICAgdmlydHVhbCBJZCBp
ZCgpIGNvbnN0OworICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgp
IGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9CisgICAgdmlydHVhbCBpbnQgdGFn
UHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBib29sIGNoZWNrRFRE
KGNvbnN0IE5vZGVJbXBsKiBuZXdDaGlsZCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRy
eShJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdDsKICAgICB2aXJ0
dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqYXR0cik7
CkBAIC0xNDYsMTAgKzE0OCwxMSBAQCBjbGFzcyBIVE1MT2JqZWN0RWxlbWVudEltcGwgOiBwdWJs
aWMgSFRNCiB7CiBwdWJsaWM6CiAgICAgSFRNTE9iamVjdEVsZW1lbnRJbXBsKERvY3VtZW50UHRy
ICpkb2MpOwotCiAgICAgfkhUTUxPYmplY3RFbGVtZW50SW1wbCgpOwogCi0gICAgdmlydHVhbCBJ
ZCBpZCgpIGNvbnN0OworICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVu
dCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9CisgICAgdmlydHVhbCBpbnQg
dGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiA3OyB9CisJdmlydHVhbCBib29sIGNoZWNrRFRE
KGNvbnN0IE5vZGVJbXBsKiBuZXdDaGlsZCk7CiAKICAgICBIVE1MRm9ybUVsZW1lbnRJbXBsICpm
b3JtKCkgY29uc3Q7CiAKQEAgLTI0NywxMCArMjUwLDEwIEBAIGNsYXNzIEhUTUxQYXJhbUVsZW1l
bnRJbXBsIDogcHVibGljIEhUTUwKICAgICBmcmllbmQgY2xhc3MgSFRNTEFwcGxldEVsZW1lbnRJ
bXBsOwogcHVibGljOgogICAgIEhUTUxQYXJhbUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2Mp
OwotCiAgICAgfkhUTUxQYXJhbUVsZW1lbnRJbXBsKCk7CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkg
Y29uc3Q7CisgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29u
c3QgeyByZXR1cm4gVGFnU3RhdHVzRm9yYmlkZGVuOyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJp
b3JpdHkoKSBjb25zdCB7IHJldHVybiAwOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqdG9rZW4pOwogCkluZGV4OiBraHRtbC9o
dG1sL2h0bWxfdGFibGVpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2Vi
Q29yZS9raHRtbC9odG1sL2h0bWxfdGFibGVpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS41MwpkaWZmIC11IC1wIC1yMS41MyBraHRtbC9odG1sL2h0bWxfdGFibGVpbXBsLmNwcAotLS0g
a2h0bWwvaHRtbC9odG1sX3RhYmxlaW1wbC5jcHAJMTcgSnVuIDIwMDUgMjE6NTU6MzkgLTAwMDAJ
MS41MworKysga2h0bWwvaHRtbC9odG1sX3RhYmxlaW1wbC5jcHAJNyBKdWwgMjAwNSAwNTo1OTow
NCAtMDAwMApAQCAtNTEsNyArNTEsNyBAQCB1c2luZyBuYW1lc3BhY2Uga2h0bWw7CiBuYW1lc3Bh
Y2UgRE9NIHsKIAogSFRNTFRhYmxlRWxlbWVudEltcGw6OkhUTUxUYWJsZUVsZW1lbnRJbXBsKERv
Y3VtZW50UHRyICpkb2MpCi0gIDogSFRNTEVsZW1lbnRJbXBsKGRvYykKKyAgOiBIVE1MRWxlbWVu
dEltcGwoSFRNTE5hbWVzOjp0YWJsZSgpLCBkb2MpCiB7CiAgICAgdENhcHRpb24gPSAwOwogICAg
IGhlYWQgPSAwOwpAQCAtNzMsOSArNzMsMTMgQEAgSFRNTFRhYmxlRWxlbWVudEltcGw6On5IVE1M
VGFibGVFbGVtZW50SQogewogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTFRhYmxlRWxlbWVudEltcGw6
OmlkKCkgY29uc3QKK2Jvb2wgSFRNTFRhYmxlRWxlbWVudEltcGw6OmNoZWNrRFREKGNvbnN0IE5v
ZGVJbXBsKiBuZXdDaGlsZCkKIHsKLSAgICByZXR1cm4gSURfVEFCTEU7CisgICAgcmV0dXJuIG5l
d0NoaWxkLT5pc1RleHROb2RlKCkgfHwgbmV3Q2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpj
YXB0aW9uKCkpIHx8CisgICAgICAgICAgIG5ld0NoaWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
Y29sKCkpIHx8IG5ld0NoaWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Y29sZ3JvdXAoKSkgfHwK
KyAgICAgICAgICAgbmV3Q2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0aGVhZCgpKSB8fCBu
ZXdDaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRmb290KCkpIHx8CisgICAgICAgICAgIG5l
d0NoaWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGJvZHkoKSkgfHwgbmV3Q2hpbGQtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjpmb3JtKCkpIHx8CisgICAgICAgICAgIG5ld0NoaWxkLT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6c2NyaXB0KCkpOwogfQogCiBOb2RlSW1wbCogSFRNTFRhYmxlRWxlbWVu
dEltcGw6OnNldENhcHRpb24oIEhUTUxUYWJsZUNhcHRpb25FbGVtZW50SW1wbCAqYyApCkBAIC0x
NDYsNyArMTUwLDcgQEAgSFRNTEVsZW1lbnRJbXBsICpIVE1MVGFibGVFbGVtZW50SW1wbDo6Ywog
ICAgIGlmKCFoZWFkKQogICAgIHsKICAgICAgICAgaW50IGV4Y2VwdGlvbmNvZGUgPSAwOwotICAg
ICAgICBoZWFkID0gbmV3IEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbChkb2NQdHIoKSwgSURf
VEhFQUQsIHRydWUgLyogaW1wbGljaXQgKi8pOworICAgICAgICBoZWFkID0gbmV3IEhUTUxUYWJs
ZVNlY3Rpb25FbGVtZW50SW1wbChIVE1MTmFtZXM6OnRoZWFkKCksIGRvY1B0cigpLCB0cnVlIC8q
IGltcGxpY2l0ICovKTsKICAgICAgICAgaWYoZm9vdCkKICAgICAgICAgICAgIGluc2VydEJlZm9y
ZSggaGVhZCwgZm9vdCwgZXhjZXB0aW9uY29kZSApOwogICAgICAgICBlbHNlIGlmKGZpcnN0Qm9k
eSkKQEAgLTE3MSw3ICsxNzUsNyBAQCBIVE1MRWxlbWVudEltcGwgKkhUTUxUYWJsZUVsZW1lbnRJ
bXBsOjpjCiAgICAgaWYoIWZvb3QpCiAgICAgewogICAgICAgICBpbnQgZXhjZXB0aW9uY29kZSA9
IDA7Ci0gICAgICAgIGZvb3QgPSBuZXcgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsKGRvY1B0
cigpLCBJRF9URk9PVCwgdHJ1ZSAvKmltcGxpY2l0ICovKTsKKyAgICAgICAgZm9vdCA9IG5ldyBI
VE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGwoSFRNTE5hbWVzOjp0Zm9vdCgpLCBkb2NQdHIoKSwg
dHJ1ZSAvKmltcGxpY2l0ICovKTsKICAgICAgICAgaWYoZmlyc3RCb2R5KQogICAgICAgICAgICAg
aW5zZXJ0QmVmb3JlKCBmb290LCBmaXJzdEJvZHksIGV4Y2VwdGlvbmNvZGUgKTsKICAgICAgICAg
ZWxzZQpAQCAtMjE2LDcgKzIyMCw3IEBAIEhUTUxFbGVtZW50SW1wbCAqSFRNTFRhYmxlRWxlbWVu
dEltcGw6OmkKICAgICAvLyAobm90ZTogdGhpcyBpcyBkaWZmZXJlbnQgZnJvbSAiaWYgdGhlIHRh
YmxlIGhhcyBubyBzZWN0aW9ucyIsIHNpbmNlIHdlIGNhbiBoYXZlCiAgICAgLy8gPFRBQkxFPjxU
Uj4pCiAgICAgaWYoIWZpcnN0Qm9keSAmJiAhaGVhZCAmJiAhZm9vdCAmJiAhaGFzQ2hpbGROb2Rl
cygpKQotICAgICAgICBzZXRUQm9keSggbmV3IEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbChk
b2NQdHIoKSwgSURfVEJPRFksIHRydWUgLyogaW1wbGljaXQgKi8pICk7CisgICAgICAgIHNldFRC
b2R5KCBuZXcgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsKEhUTUxOYW1lczo6dGJvZHkoKSwg
ZG9jUHRyKCksIHRydWUgLyogaW1wbGljaXQgKi8pICk7CiAKICAgICAvL2tkRGVidWcoNjAzMCkg
PDwga19mdW5jaW5mbyA8PCBpbmRleCA8PCBlbmRsOwogICAgIC8vIElFIHRyZWF0cyBpbmRleD0t
MSBhcyBkZWZhdWx0IHZhbHVlIG1lYW5pbmcgJ2FwcGVuZCBhZnRlciBsYXN0JwpAQCAtMjMwLDcg
KzIzNCw4IEBAIEhUTUxFbGVtZW50SW1wbCAqSFRNTFRhYmxlRWxlbWVudEltcGw6OmkKICAgICB7
CiAJLy8gdGhlcmUgY291bGQgYmUgMiB0Zm9vdCBlbGVtZW50cyBpbiB0aGUgdGFibGUuIE9ubHkg
dGhlIGZpcnN0IG9uZSBpcyB0aGUgImZvb3QiLCB0aGF0J3Mgd2h5IHdlIGhhdmUgdGhlIG1vcmUK
IAkvLyBjb21wbGljYXRlZCBpZiBzdGF0ZW1lbnQgYmVsb3cuCi0gICAgICAgIGlmICggbm9kZSAh
PSBmb290ICYmIChub2RlLT5pZCgpID09IElEX1RIRUFEIHx8IG5vZGUtPmlkKCkgPT0gSURfVEZP
T1QgfHwgbm9kZS0+aWQoKSA9PSBJRF9UQk9EWSkgKQorICAgICAgICBpZiAobm9kZSAhPSBmb290
ICYmIChub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGhlYWQoKSkgfHwgbm9kZS0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OnRmb290KCkpIHx8IAorICAgICAgICAgICAgbm9kZS0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OnRib2R5KCkpKSkKICAgICAgICAgewogICAgICAgICAgICAgc2VjdGlvbiA9
IHN0YXRpY19jYXN0PEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbCAqPihub2RlKTsKICAgICAg
ICAgICAgIGxhc3RTZWN0aW9uID0gc2VjdGlvbjsKQEAgLTI3Niw4ICsyODEsOCBAQCB2b2lkIEhU
TUxUYWJsZUVsZW1lbnRJbXBsOjpkZWxldGVSb3coIGxvCiAgICAgYm9vbCBmb3VuZCA9IGZhbHNl
OwogICAgIGZvciAoIDsgbm9kZSA7IG5vZGUgPSBub2RlLT5uZXh0U2libGluZygpICkKICAgICB7
Ci0gICAgICAgIGlmICggbm9kZSAhPSBmb290ICYmIChub2RlLT5pZCgpID09IElEX1RIRUFEIHx8
IG5vZGUtPmlkKCkgPT0gSURfVEZPT1QgfHwgbm9kZS0+aWQoKSA9PSBJRF9UQk9EWSkgKQotICAg
ICAgICB7CisgICAgICAgIGlmIChub2RlICE9IGZvb3QgJiYgKG5vZGUtPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjp0aGVhZCgpKSB8fCBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGZvb3QoKSkg
fHwgCisgICAgICAgICAgICBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGJvZHkoKSkpKSB7
CiAgICAgICAgICAgICBzZWN0aW9uID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlU2VjdGlvbkVsZW1l
bnRJbXBsICo+KG5vZGUpOwogICAgICAgICAgICAgbGFzdFNlY3Rpb24gPSBzZWN0aW9uOwogICAg
ICAgICAgICAgaW50IHJvd3MgPSBzZWN0aW9uLT5udW1Sb3dzKCk7CkBAIC0zMDksNyArMzE0LDcg
QEAgTm9kZUltcGwgKkhUTUxUYWJsZUVsZW1lbnRJbXBsOjphZGRDaGlsZAogICAgIGtkRGVidWco
IDYwMzAgKSA8PCBub2RlTmFtZSgpLnN0cmluZygpIDw8ICIoVGFibGUpOjphZGRDaGlsZCggIiA8
PCBjaGlsZC0+bm9kZU5hbWUoKS5zdHJpbmcoKSA8PCAiICkiIDw8IGVuZGw7CiAjZW5kaWYKIAot
ICAgIGlmIChjaGlsZC0+aWQoKSA9PSBJRF9GT1JNKSB7CisgICAgaWYgKGNoaWxkLT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6Zm9ybSgpKSkgewogICAgICAgICAvLyBGaXJzdCBhZGQgdGhlIGNoaWxk
LgogICAgICAgICBIVE1MRWxlbWVudEltcGw6OmFkZENoaWxkKGNoaWxkKTsKICAgICAgICAgLy8g
Tm93IHNpbXBseSByZXR1cm4gb3Vyc2VsdmVzIGFzIHRoZSBuZXdub2RlLiAgVGhpcyBoYXMgdGhl
IGVmZmVjdCBvZgpAQCAtMzM3LDI4ICszNDIsMTUgQEAgTm9kZUltcGwgKkhUTUxUYWJsZUVsZW1l
bnRJbXBsOjphZGRDaGlsZAogCiAgICAgaW50IGV4Y2VwdGlvbmNvZGUgPSAwOwogICAgIE5vZGVJ
bXBsICpyZXR2YWwgPSBhcHBlbmRDaGlsZCggY2hpbGQsIGV4Y2VwdGlvbmNvZGUgKTsKLSAgICBp
ZiAoIHJldHZhbCApIHsKLQlzd2l0Y2goY2hpbGQtPmlkKCkpIHsKLQljYXNlIElEX0NBUFRJT046
Ci0JICAgIGlmICggIXRDYXB0aW9uICkKLQkJdENhcHRpb24gPSBzdGF0aWNfY2FzdDxIVE1MVGFi
bGVDYXB0aW9uRWxlbWVudEltcGwgKj4oY2hpbGQpOwotCSAgICBicmVhazsKLQljYXNlIElEX0NP
TDoKLQljYXNlIElEX0NPTEdST1VQOgotCSAgICBicmVhazsKLQljYXNlIElEX1RIRUFEOgotCSAg
ICBpZiAoICFoZWFkICkKLQkJaGVhZCA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZVNlY3Rpb25FbGVt
ZW50SW1wbCAqPihjaGlsZCk7Ci0JICAgIGJyZWFrOwotCWNhc2UgSURfVEZPT1Q6Ci0JICAgIGlm
ICggIWZvb3QgKQotCQlmb290ID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJ
bXBsICo+KGNoaWxkKTsKLQkgICAgYnJlYWs7Ci0JY2FzZSBJRF9UQk9EWToKLQkgICAgaWYgKCAh
Zmlyc3RCb2R5ICkKLQkJZmlyc3RCb2R5ID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlU2VjdGlvbkVs
ZW1lbnRJbXBsICo+KGNoaWxkKTsKLQkgICAgYnJlYWs7Ci0JfQorICAgIGlmIChyZXR2YWwpIHsK
KyAgICAgICAgaWYgKCF0Q2FwdGlvbiAmJiBjaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmNh
cHRpb24oKSkpCisgICAgICAgICAgICB0Q2FwdGlvbiA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZUNh
cHRpb25FbGVtZW50SW1wbCAqPihjaGlsZCk7CisgICAgICAgIGVsc2UgaWYgKCFoZWFkICYmIGNo
aWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGhlYWQoKSkpCisgICAgICAgICAgICBoZWFkID0g
c3RhdGljX2Nhc3Q8SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsICo+KGNoaWxkKTsKKyAgICAg
ICAgZWxzZSBpZiAoIWZvb3QgJiYgY2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0Zm9vdCgp
KSkKKyAgICAgICAgICAgIGZvb3QgPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVTZWN0aW9uRWxlbWVu
dEltcGwgKj4oY2hpbGQpOworCWVsc2UgaWYgKCFmaXJzdEJvZHkgJiYgY2hpbGQtPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjp0Ym9keSgpKSkKKwkgICAgZmlyc3RCb2R5ID0gc3RhdGljX2Nhc3Q8SFRN
TFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsICo+KGNoaWxkKTsKICAgICB9CiAgICAgcmV0dXJuIHJl
dHZhbDsKIH0KQEAgLTgwMiwxNyArNzk0LDE2IEBAIHZvaWQgSFRNTFRhYmxlUGFydEVsZW1lbnRJ
bXBsOjpwYXJzZU1hcHAKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1IVE1MVGFibGVTZWN0aW9u
RWxlbWVudEltcGw6OkhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9j
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdXNob3J0IHRhZ2lkLCBib29sIGltcGxpY2l0KQotICAgIDogSFRNTFRhYmxlUGFydEVsZW1l
bnRJbXBsKGRvYykKK0hUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbDo6SFRNTFRhYmxlU2VjdGlv
bkVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50UHRyICpk
b2MsIGJvb2wgaW1wbGljaXQpCisgICAgOiBIVE1MVGFibGVQYXJ0RWxlbWVudEltcGwodGFnTmFt
ZSwgZG9jKQogewotICAgIF9pZCA9IHRhZ2lkOwogICAgIG1faW1wbGljaXQgPSBpbXBsaWNpdDsK
IH0KIAotTm9kZUltcGw6OklkIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbDo6aWQoKSBjb25z
dAorYm9vbCBIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGw6OmNoZWNrRFREKGNvbnN0IE5vZGVJ
bXBsKiBuZXdDaGlsZCkKIHsKLSAgICByZXR1cm4gX2lkOworICAgIHJldHVybiBuZXdDaGlsZC0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRyKCkpIHx8IG5ld0NoaWxkLT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6Zm9ybSgpKSB8fAorICAgICAgICAgICBuZXdDaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OnNjcmlwdCgpKTsKIH0KIAogTm9kZUltcGwgKkhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1w
bDo6YWRkQ2hpbGQoTm9kZUltcGwgKmNoaWxkKQpAQCAtODIxLDcgKzgxMiw3IEBAIE5vZGVJbXBs
ICpIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGw6OmEKICAgICBrZERlYnVnKCA2MDMwICkgPDwg
bm9kZU5hbWUoKS5zdHJpbmcoKSA8PCAiKFRib2R5KTo6YWRkQ2hpbGQoICIgPDwgY2hpbGQtPm5v
ZGVOYW1lKCkuc3RyaW5nKCkgPDwgIiApIiA8PCBlbmRsOwogI2VuZGlmCiAKLSAgICBpZiAoY2hp
bGQtPmlkKCkgPT0gSURfRk9STSkgeworICAgIGlmIChjaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OmZvcm0oKSkpIHsKICAgICAgICAgLy8gRmlyc3QgYWRkIHRoZSBjaGlsZC4KICAgICAgICAg
SFRNTEVsZW1lbnRJbXBsOjphZGRDaGlsZChjaGlsZCk7CiAgICAgICAgIC8vIE5vdyBzaW1wbHkg
cmV0dXJuIG91cnNlbHZlcyBhcyB0aGUgbmV3bm9kZS4gIFRoaXMgaGFzIHRoZSBlZmZlY3Qgb2YK
QEAgLTg3Nyw3ICs4NjgsNyBAQCBpbnQgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsOjpudW1S
b3dzCiAgICAgaW50IHJvd3MgPSAwOwogICAgIGNvbnN0IE5vZGVJbXBsICpuID0gZmlyc3RDaGls
ZCgpOwogICAgIHdoaWxlIChuKSB7Ci0gICAgICAgIGlmIChuLT5pZCgpID09IElEX1RSKQorICAg
ICAgICBpZiAobi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRyKCkpKQogICAgICAgICAgICAgcm93
cysrOwogICAgICAgICBuID0gbi0+bmV4dFNpYmxpbmcoKTsKICAgICB9CkBAIC05MzIsOSArOTIz
LDEwIEBAIFNoYXJlZFB0cjxIVE1MQ29sbGVjdGlvbkltcGw+IEhUTUxUYWJsZVMKIAogLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQogCi1Ob2RlSW1wbDo6SWQgSFRNTFRhYmxlUm93RWxlbWVudEltcGw6Omlk
KCkgY29uc3QKK2Jvb2wgSFRNTFRhYmxlUm93RWxlbWVudEltcGw6OmNoZWNrRFREKGNvbnN0IE5v
ZGVJbXBsKiBuZXdDaGlsZCkKIHsKLSAgICByZXR1cm4gSURfVFI7CisgICAgcmV0dXJuIG5ld0No
aWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGQoKSkgfHwgbmV3Q2hpbGQtPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjp0aCgpKSB8fAorICAgICAgICAgICBuZXdDaGlsZC0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OmZvcm0oKSkgfHwgbmV3Q2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzY3JpcHQo
KSk7CiB9CiAKIE5vZGVJbXBsICpIVE1MVGFibGVSb3dFbGVtZW50SW1wbDo6YWRkQ2hpbGQoTm9k
ZUltcGwgKmNoaWxkKQpAQCAtOTQzLDcgKzkzNSw3IEBAIE5vZGVJbXBsICpIVE1MVGFibGVSb3dF
bGVtZW50SW1wbDo6YWRkQ2gKICAgICBrZERlYnVnKCA2MDMwICkgPDwgbm9kZU5hbWUoKS5zdHJp
bmcoKSA8PCAiKFRyb3cpOjphZGRDaGlsZCggIiA8PCBjaGlsZC0+bm9kZU5hbWUoKS5zdHJpbmco
KSA8PCAiICkiIDw8IGVuZGw7CiAjZW5kaWYKIAotICAgIGlmIChjaGlsZC0+aWQoKSA9PSBJRF9G
T1JNKSB7CisgICAgaWYgKGNoaWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Zm9ybSgpKSkgewog
ICAgICAgICAvLyBGaXJzdCBhZGQgdGhlIGNoaWxkLgogICAgICAgICBIVE1MRWxlbWVudEltcGw6
OmFkZENoaWxkKGNoaWxkKTsKICAgICAgICAgLy8gTm93IHNpbXBseSByZXR1cm4gb3Vyc2VsdmVz
IGFzIHRoZSBuZXdub2RlLiAgVGhpcyBoYXMgdGhlIGVmZmVjdCBvZgpAQCAtOTU4LDE2ICs5NTAs
MTYgQEAgbG9uZyBIVE1MVGFibGVSb3dFbGVtZW50SW1wbDo6cm93SW5kZXgoKQogICAgIGludCBy
SW5kZXggPSAwOwogCiAgICAgTm9kZUltcGwgKnRhYmxlID0gcGFyZW50Tm9kZSgpOwotICAgIGlm
ICggIXRhYmxlICkKKyAgICBpZiAoIXRhYmxlKQogCXJldHVybiAtMTsKICAgICB0YWJsZSA9IHRh
YmxlLT5wYXJlbnROb2RlKCk7Ci0gICAgaWYgKCAhdGFibGUgfHwgdGFibGUtPmlkKCkgIT0gSURf
VEFCTEUgKQorICAgIGlmICghdGFibGUgfHwgIXRhYmxlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
dGFibGUoKSkpCiAJcmV0dXJuIC0xOwogCiAgICAgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBs
ICpmb290ID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlRWxlbWVudEltcGwgKj4odGFibGUpLT50Rm9v
dCgpOwogICAgIE5vZGVJbXBsICpub2RlID0gdGFibGUtPmZpcnN0Q2hpbGQoKTsKLSAgICB3aGls
ZSAoIG5vZGUgKSB7Ci0gICAgICAgIGlmICggbm9kZSAhPSBmb290ICYmIChub2RlLT5pZCgpID09
IElEX1RIRUFEIHx8IG5vZGUtPmlkKCkgPT0gSURfVEZPT1QgfHwgbm9kZS0+aWQoKSA9PSBJRF9U
Qk9EWSkgKSB7CisgICAgd2hpbGUgKG5vZGUpIHsKKyAgICAgICAgaWYgKG5vZGUgIT0gZm9vdCAm
JiAobm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRoZWFkKCkpIHx8IG5vZGUtPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjp0Zm9vdCgpKSB8fCBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGJv
ZHkoKSkpKSB7CiAJICAgIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbCogc2VjdGlvbiA9IHN0
YXRpY19jYXN0PEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbCAqPihub2RlKTsKIAkgICAgY29u
c3QgTm9kZUltcGwgKnJvdyA9IHNlY3Rpb24tPmZpcnN0Q2hpbGQoKTsKIAkgICAgd2hpbGUgKCBy
b3cgKSB7CkBAIC05OTYsNyArOTg4LDcgQEAgbG9uZyBIVE1MVGFibGVSb3dFbGVtZW50SW1wbDo6
c2VjdGlvblJvdwogICAgIGNvbnN0IE5vZGVJbXBsICpuID0gdGhpczsKICAgICBkbyB7CiAgICAg
ICAgIG4gPSBuLT5wcmV2aW91c1NpYmxpbmcoKTsKLSAgICAgICAgaWYgKG4gJiYgbi0+aXNFbGVt
ZW50Tm9kZSgpICYmIG4tPmlkKCkgPT0gSURfVFIpCisgICAgICAgIGlmIChuICYmIG4tPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjp0cigpKSkKICAgICAgICAgICAgIHJJbmRleCsrOwogICAgIH0KICAg
ICB3aGlsZSAobik7CkBAIC0xMDEzLDcgKzEwMDUsNyBAQCBIVE1MRWxlbWVudEltcGwgKkhUTUxU
YWJsZVJvd0VsZW1lbnRJbXBsCiAgICAgICAgIGV4Y2VwdGlvbmNvZGUgPSBET01FeGNlcHRpb246
OklOREVYX1NJWkVfRVJSOyAvLyBwZXIgdGhlIERPTQogICAgIGVsc2UKICAgICB7Ci0gICAgICAg
IGMgPSBuZXcgSFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsKGRvY1B0cigpLCBJRF9URCk7CisgICAg
ICAgIGMgPSBuZXcgSFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6dGQoKSwgZG9j
UHRyKCkpOwogICAgICAgICBpZihudW1DZWxscyA9PSBpbmRleCB8fCBpbmRleCA9PSAtMSkKICAg
ICAgICAgICAgIGFwcGVuZENoaWxkKGMsIGV4Y2VwdGlvbmNvZGUpOwogICAgICAgICBlbHNlIHsK
QEAgLTExMDMsMTUgKzEwOTUsMTQgQEAgdm9pZCBIVE1MVGFibGVSb3dFbGVtZW50SW1wbDo6c2V0
VkFsaWduKAogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUhUTUxUYWJsZUNlbGxFbGVtZW50SW1w
bDo6SFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIGludCB0YWcpCi0g
IDogSFRNTFRhYmxlUGFydEVsZW1lbnRJbXBsKGRvYykKK0hUTUxUYWJsZUNlbGxFbGVtZW50SW1w
bDo6SFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUs
IERvY3VtZW50UHRyICpkb2MpCisgIDogSFRNTFRhYmxlUGFydEVsZW1lbnRJbXBsKHRhZ05hbWUs
IGRvYykKIHsKLSAgX2NvbCA9IC0xOwotICBfcm93ID0gLTE7Ci0gIGNTcGFuID0gclNwYW4gPSAx
OwotICBfaWQgPSB0YWc7Ci0gIHJvd0hlaWdodCA9IDA7Ci0gIG1fc29saWQgPSBmYWxzZTsKKyAg
ICBfY29sID0gLTE7CisgICAgX3JvdyA9IC0xOworICAgIGNTcGFuID0gclNwYW4gPSAxOworICAg
IHJvd0hlaWdodCA9IDA7CisgICAgbV9zb2xpZCA9IGZhbHNlOwogfQogCiBIVE1MVGFibGVDZWxs
RWxlbWVudEltcGw6On5IVE1MVGFibGVDZWxsRWxlbWVudEltcGwoKQpAQCAtMTEyMiw3ICsxMTEz
LDcgQEAgbG9uZyBIVE1MVGFibGVDZWxsRWxlbWVudEltcGw6OmNlbGxJbmRleAogewogICAgIGlu
dCBpbmRleCA9IDA7CiAgICAgZm9yIChjb25zdCBOb2RlSW1wbCAqIG5vZGUgPSBwcmV2aW91c1Np
YmxpbmcoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPnByZXZpb3VzU2libGluZygpKSB7Ci0gICAgICAg
IGlmIChub2RlLT5pZCgpID09IElEX1REIHx8IG5vZGUtPmlkKCkgPT0gSURfVEgpCisgICAgICAg
IGlmIChub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGQoKSkgfHwgbm9kZS0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OnRoKCkpKQogICAgICAgICAgICAgaW5kZXgrKzsKICAgICB9CiAgICAgCkBA
IC0xMTg5LDkgKzExODAsOSBAQCB2b2lkIEhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbDo6cGFyc2VN
YXBwCiAvLyB1c2VkIGJ5IHRhYmxlIGNlbGxzIHRvIHNoYXJlIHN0eWxlIGRlY2xzIGNyZWF0ZWQg
YnkgdGhlIGVuY2xvc2luZyB0YWJsZS4KIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uSW1wbCog
SFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsOjphZGRpdGlvbmFsQXR0cmlidXRlU3R5bGVEZWNsKCkK
IHsKLSAgICBIVE1MRWxlbWVudEltcGwqIHAgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwq
PihwYXJlbnROb2RlKCkpOwotICAgIHdoaWxlKHAgJiYgcC0+aWQoKSAhPSBJRF9UQUJMRSkKLSAg
ICAgICAgcCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCo+KHAtPnBhcmVudE5vZGUoKSk7
CisgICAgTm9kZUltcGwqIHAgPSBwYXJlbnROb2RlKCk7CisgICAgd2hpbGUgKHAgJiYgIXAtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjp0YWJsZSgpKSkKKyAgICAgICAgcCA9IHAtPnBhcmVudE5vZGUo
KTsKIAogICAgIGlmIChwKSB7CiAgICAgICAgIEhUTUxUYWJsZUVsZW1lbnRJbXBsKiB0YWJsZSA9
IHN0YXRpY19jYXN0PEhUTUxUYWJsZUVsZW1lbnRJbXBsKj4ocCk7CkBAIC0xMjAxLDE1ICsxMTky
LDYgQEAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25JbXBsKiBIVE1MVGFibAogICAgIHJldHVy
biAwOwogfQogCi12b2lkIEhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbDo6YXR0YWNoKCkKLXsKLSAg
ICBIVE1MRWxlbWVudEltcGwqIHAgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwqPihwYXJl
bnROb2RlKCkpOwotICAgIHdoaWxlKHAgJiYgcC0+aWQoKSAhPSBJRF9UQUJMRSkKLSAgICAgICAg
cCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCo+KHAtPnBhcmVudE5vZGUoKSk7Ci0KLSAg
ICBIVE1MVGFibGVQYXJ0RWxlbWVudEltcGw6OmF0dGFjaCgpOwotfQotCiBib29sIEhUTUxUYWJs
ZUNlbGxFbGVtZW50SW1wbDo6aXNVUkxBdHRyaWJ1dGUoQXR0cmlidXRlSW1wbCAqYXR0cikgY29u
c3QKIHsKICAgICByZXR1cm4gYXR0ci0+aWQoKSA9PSBBVFRSX0JBQ0tHUk9VTkQ7CkBAIC0xMzQ3
LDE2ICsxMzI5LDEwIEBAIHZvaWQgSFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsOjpzZXRXaWR0aCgK
IAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1IVE1MVGFibGVDb2xFbGVtZW50SW1wbDo6SFRNTFRh
YmxlQ29sRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgdXNob3J0IGkpCi0gICAgOiBIVE1M
VGFibGVQYXJ0RWxlbWVudEltcGwoZG9jKQorSFRNTFRhYmxlQ29sRWxlbWVudEltcGw6OkhUTUxU
YWJsZUNvbEVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50
UHRyICpkb2MpCisgICAgOiBIVE1MVGFibGVQYXJ0RWxlbWVudEltcGwodGFnTmFtZSwgZG9jKQog
ewotICAgIF9pZCA9IGk7Ci0gICAgX3NwYW4gPSAoX2lkID09IElEX0NPTEdST1VQID8gMCA6IDEp
OwotfQotCi1Ob2RlSW1wbDo6SWQgSFRNTFRhYmxlQ29sRWxlbWVudEltcGw6OmlkKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gX2lkOworICAgIF9zcGFuID0gKHRhZ05hbWUubWF0Y2hlcyhIVE1MTmFt
ZXM6OmNvbGdyb3VwKCkpID8gMCA6IDEpOwogfQogCiBib29sIEhUTUxUYWJsZUNvbEVsZW1lbnRJ
bXBsOjptYXBUb0VudHJ5KE5vZGVJbXBsOjpJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYg
cmVzdWx0KSBjb25zdApAQCAtMTQ0NywxMSArMTQyMyw2IEBAIHZvaWQgSFRNTFRhYmxlQ29sRWxl
bWVudEltcGw6OnNldFdpZHRoKGMKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Ob2RlSW1wbDo6
SWQgSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IElEX0NBUFRJT047Ci19Ci0KIGJvb2wgSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnRJbXBsOjptYXBU
b0VudHJ5KE5vZGVJbXBsOjpJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBj
b25zdAogewogICAgIGlmIChhdHRyID09IEFUVFJfQUxJR04pIHsKSW5kZXg6IGtodG1sL2h0bWwv
aHRtbF90YWJsZWltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9r
aHRtbC9odG1sL2h0bWxfdGFibGVpbXBsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjEKZGlm
ZiAtdSAtcCAtcjEuMjEga2h0bWwvaHRtbC9odG1sX3RhYmxlaW1wbC5oCi0tLSBraHRtbC9odG1s
L2h0bWxfdGFibGVpbXBsLmgJMTcgSnVuIDIwMDUgMjE6NTU6MzkgLTAwMDAJMS4yMQorKysga2h0
bWwvaHRtbC9odG1sX3RhYmxlaW1wbC5oCTcgSnVsIDIwMDUgMDU6NTk6MDUgLTAwMDAKQEAgLTYy
LDcgKzYyLDkgQEAgcHVibGljOgogICAgIEhUTUxUYWJsZUVsZW1lbnRJbXBsKERvY3VtZW50UHRy
ICpkb2MpOwogICAgIH5IVE1MVGFibGVFbGVtZW50SW1wbCgpOwogCi0gICAgdmlydHVhbCBJZCBp
ZCgpIGNvbnN0OworICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgp
IGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9CisgICAgdmlydHVhbCBpbnQgdGFn
UHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiA5OyB9CisgICAgdmlydHVhbCBib29sIGNoZWNrRFRE
KGNvbnN0IE5vZGVJbXBsKiBuZXdDaGlsZCk7CiAKICAgICBIVE1MVGFibGVDYXB0aW9uRWxlbWVu
dEltcGwgKmNhcHRpb24oKSBjb25zdCB7IHJldHVybiB0Q2FwdGlvbjsgfQogICAgIE5vZGVJbXBs
ICpzZXRDYXB0aW9uKCBIVE1MVGFibGVDYXB0aW9uRWxlbWVudEltcGwgKiApOwpAQCAtMTQ3LDgg
KzE0OSw4IEBAIGNsYXNzIEhUTUxUYWJsZVBhcnRFbGVtZW50SW1wbCA6IHB1YmxpYyAKIAogewog
cHVibGljOgotICAgIEhUTUxUYWJsZVBhcnRFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQot
ICAgICAgICA6IEhUTUxFbGVtZW50SW1wbChkb2MpCisgICAgSFRNTFRhYmxlUGFydEVsZW1lbnRJ
bXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50UHRyICpkb2MpCisgICAg
ICAgIDogSFRNTEVsZW1lbnRJbXBsKHRhZ05hbWUsIGRvYykKICAgICAgICAgeyB9CiAKICAgICB2
aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShOb2RlSW1wbDo6SWQgYXR0ciwgTWFwcGVkQXR0cmlidXRl
RW50cnkmIHJlc3VsdCkgY29uc3Q7CkBAIC0xNjAsOSArMTYyLDExIEBAIHB1YmxpYzoKIGNsYXNz
IEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MVGFibGVQYXJ0RWxlbWVu
dEltcGwKIHsKIHB1YmxpYzoKLSAgICBIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGwoRG9jdW1l
bnRQdHIgKmRvYywgdXNob3J0IHRhZ2lkLCBib29sIGltcGxpY2l0KTsKKyAgICBIVE1MVGFibGVT
ZWN0aW9uRWxlbWVudEltcGwoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnRQ
dHIgKmRvYywgYm9vbCBpbXBsaWNpdCk7CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7Cisg
ICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1
cm4gVGFnU3RhdHVzT3B0aW9uYWw7IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNv
bnN0IHsgcmV0dXJuIDg7IH0KKyAgICB2aXJ0dWFsIGJvb2wgY2hlY2tEVEQoY29uc3QgTm9kZUlt
cGwqIG5ld0NoaWxkKTsKIAogICAgIHZpcnR1YWwgTm9kZUltcGwgKmFkZENoaWxkKE5vZGVJbXBs
ICpjaGlsZCk7CiAgICAgCkBAIC0xODQsOSArMTg4LDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0
VkFsaWduKCBjb25zdCBET01TdHJpbmcgJiApOwogCiAgICAga2h0bWw6OlNoYXJlZFB0cjxIVE1M
Q29sbGVjdGlvbkltcGw+IHJvd3MoKTsKLQotcHJvdGVjdGVkOgotICAgIHVzaG9ydCBfaWQ7CiB9
OwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xOTUsMTAgKzE5NiwxMiBAQCBjbGFzcyBIVE1M
VGFibGVSb3dFbGVtZW50SW1wbCA6IHB1YmxpYyBICiB7CiBwdWJsaWM6CiAgICAgSFRNTFRhYmxl
Um93RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgICAgICAgOiBIVE1MVGFibGVQYXJ0
RWxlbWVudEltcGwoZG9jKSB7fQotCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OworICAgICAg
ICA6IEhUTUxUYWJsZVBhcnRFbGVtZW50SW1wbChIVE1MTmFtZXM6OnRyKCksIGRvYykge30KIAor
ICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0
dXJuIFRhZ1N0YXR1c09wdGlvbmFsOyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBj
b25zdCB7IHJldHVybiA3OyB9CisgICAgdmlydHVhbCBib29sIGNoZWNrRFREKGNvbnN0IE5vZGVJ
bXBsKiBuZXdDaGlsZCk7CisJCiAgICAgdmlydHVhbCBOb2RlSW1wbCAqYWRkQ2hpbGQoTm9kZUlt
cGwgKmNoaWxkKTsKICAgICAKICAgICBsb25nIHJvd0luZGV4KCkgY29uc3Q7CkBAIC0yMzgsMTAg
KzI0MSwxMiBAQCBwcm90ZWN0ZWQ6CiBjbGFzcyBIVE1MVGFibGVDZWxsRWxlbWVudEltcGwgOiBw
dWJsaWMgSFRNTFRhYmxlUGFydEVsZW1lbnRJbXBsCiB7CiBwdWJsaWM6Ci0gICAgSFRNTFRhYmxl
Q2VsbEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIGludCB0YWdJZCk7CisgICAgSFRNTFRh
YmxlQ2VsbEVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50
UHRyICpkb2MpOwogICAgIH5IVE1MVGFibGVDZWxsRWxlbWVudEltcGwoKTsKIAotICAgIC8vICMj
IyBGSVggdGhlc2UgdHdvLi4uCisgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVp
cmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzT3B0aW9uYWw7IH0KKyAgICB2aXJ0dWFs
IGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDY7IH0KKwogICAgIGxvbmcgY2VsbElu
ZGV4KCkgY29uc3Q7CiAKICAgICBpbnQgY29sKCkgY29uc3QgeyByZXR1cm4gX2NvbDsgfQpAQCAt
MjUxLDE0ICsyNTYsMTAgQEAgcHVibGljOgogCiAgICAgaW50IGNvbFNwYW4oKSBjb25zdCB7IHJl
dHVybiBjU3BhbjsgfQogICAgIGludCByb3dTcGFuKCkgY29uc3QgeyByZXR1cm4gclNwYW47IH0K
LSAgICAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3QgeyByZXR1cm4gX2lkOyB9Ci0gICAgCisK
ICAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShOb2RlSW1wbDo6SWQgYXR0ciwgTWFwcGVkQXR0
cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVk
QXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIpOwogCi0gICAgdmlydHVhbCB2b2lk
IGF0dGFjaCgpOwotCiAgICAgLy8gdXNlZCBieSB0YWJsZSBjZWxscyB0byBzaGFyZSBzdHlsZSBk
ZWNscyBjcmVhdGVkIGJ5IHRoZSBlbmNsb3NpbmcgdGFibGUuCiAgICAgdmlydHVhbCBDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbkltcGwqIGFkZGl0aW9uYWxBdHRyaWJ1dGVTdHlsZURlY2woKTsK
ICAgICAKQEAgLTMxMSw3ICszMTIsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgaW50IF9jb2w7CiAgICAg
aW50IHJTcGFuOwogICAgIGludCBjU3BhbjsKLSAgICBpbnQgX2lkOwogICAgIGludCByb3dIZWln
aHQ7CiAgICAgYm9vbCBtX3NvbGlkICAgICAgICA6IDE7CiB9OwpAQCAtMzIxLDEwICszMjEsMTEg
QEAgcHJvdGVjdGVkOgogY2xhc3MgSFRNTFRhYmxlQ29sRWxlbWVudEltcGwgOiBwdWJsaWMgSFRN
TFRhYmxlUGFydEVsZW1lbnRJbXBsCiB7CiBwdWJsaWM6Ci0gICAgSFRNTFRhYmxlQ29sRWxlbWVu
dEltcGwoRG9jdW1lbnRQdHIgKmRvYywgdXNob3J0IGkpOwotCi0gICAgdmlydHVhbCBJZCBpZCgp
IGNvbnN0OworICAgIEhUTUxUYWJsZUNvbEVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUm
IHRhZ05hbWUsIERvY3VtZW50UHRyICpkb2MpOwogCisgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVz
IGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gaGFzTG9jYWxOYW1lKEhUTUxOYW1l
czo6Y29sKCkpID8gVGFnU3RhdHVzRm9yYmlkZGVuIDogVGFnU3RhdHVzT3B0aW9uYWw7IH0KKyAg
ICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIGhhc0xvY2FsTmFtZShI
VE1MTmFtZXM6OmNvbCgpKSA/IDAgOiAxOyB9CisgICAgdmlydHVhbCBib29sIGNoZWNrRFREKGNv
bnN0IE5vZGVJbXBsKiBuZXdDaGlsZCkgeyByZXR1cm4gaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6
Y29sZ3JvdXAoKSkgJiYgbmV3Q2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpjb2woKSk7IH0K
ICAgICB2b2lkIHNldFRhYmxlKEhUTUxUYWJsZUVsZW1lbnRJbXBsICp0KSB7IHRhYmxlID0gdDsg
fQogCiAgICAgLy8gb3ZlcnJpZGVzCkBAIC0zNTEsMTAgKzM1Miw2IEBAIHB1YmxpYzoKICAgICB2
b2lkIHNldFdpZHRoKCBjb25zdCBET01TdHJpbmcgJiApOwogCiBwcm90ZWN0ZWQ6Ci0gICAgLy8g
Y291bGQgYmUgSURfQ09MIG9yIElEX0NPTEdST1VQIC4uLiBUaGUgRE9NIGlzIG5vdCBxdWl0ZSBj
bGVhciBvbgotICAgIC8vIHRoaXMsIGJ1dCBzaW5jZSBib3RoIGVsZW1lbnRzIHdvcmsgcXVpdGUg
c2ltaWxhciwgd2UgdXNlIG9uZQotICAgIC8vIERPTUVsZW1lbnQgZm9yIHRoZW0uLi4KLSAgICB1
c2hvcnQgX2lkOwogICAgIGludCBfc3BhbjsKICAgICBIVE1MVGFibGVFbGVtZW50SW1wbCAqdGFi
bGU7CiB9OwpAQCAtMzY1LDkgKzM2MiwxMCBAQCBjbGFzcyBIVE1MVGFibGVDYXB0aW9uRWxlbWVu
dEltcGwgOiBwdWJsCiB7CiBwdWJsaWM6CiAgICAgSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnRJbXBs
KERvY3VtZW50UHRyICpkb2MpCi0gICAgICAgIDogSFRNTFRhYmxlUGFydEVsZW1lbnRJbXBsKGRv
Yykge30KKyAgICAgICAgOiBIVE1MVGFibGVQYXJ0RWxlbWVudEltcGwoSFRNTE5hbWVzOjpjYXB0
aW9uKCksIGRvYykge30KIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0
dXNSZXF1aXJlZDsgfQorICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1
cm4gNTsgfQogICAgIAogICAgIHZpcnR1YWwgYm9vbCBtYXBUb0VudHJ5KE5vZGVJbXBsOjpJZCBh
dHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdDsKICAgICB2aXJ0dWFsIHZv
aWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqYXR0cik7CkluZGV4
OiBraHRtbC9odG1sL2h0bWxuYW1lcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sbmFtZXMuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjIKZGlmZiAtdSAtcCAtcjEuMiBraHRtbC9odG1sL2h0bWxuYW1lcy5jcHAKLS0tIGtodG1sL2h0
bWwvaHRtbG5hbWVzLmNwcAkxNiBKdW4gMjAwNSAyMDozMzo1NyAtMDAwMAkxLjIKKysrIGtodG1s
L2h0bWwvaHRtbG5hbWVzLmNwcAk3IEp1bCAyMDA1IDA1OjU5OjA1IC0wMDAwCkBAIC0yMCw1NTEg
KzIwLDIzNSBAQAogICoKICAqLwogCisjZGVmaW5lIEtIVE1MX0hUTUxOQU1FU19ISURFX0dMT0JB
TFMgMQorCisjaW5jbHVkZSA8cXB0cmRpY3QuaD4KICNpbmNsdWRlICJodG1sbmFtZXMuaCIKICNp
bmNsdWRlICJkb21fcW5hbWUuaCIKIAogbmFtZXNwYWNlIERPTSB7CiAKLWNvbnN0IEF0b21pY1N0
cmluZyYgSFRNTE5hbWVzOjp4aHRtbE5hbWVzcGFjZVVSSSgpCi17Ci0gICAgc3RhdGljIEF0b21p
Y1N0cmluZyB4aHRtbE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIik7Ci0gICAgcmV0
dXJuIHhodG1sTlM7Ci19Ci0KLQotLy8gVGFnIG5hbWVzLgotY29uc3QgUXVhbGlmaWVkTmFtZSYg
SFRNTE5hbWVzOjphKCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBhKG51bGxBdG9tLCAi
YSIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiBhOwotfQotCi1jb25zdCBRdWFs
aWZpZWROYW1lJiBIVE1MTmFtZXM6OmFkZHJlc3MoKQotewotICAgIHN0YXRpYyBRdWFsaWZpZWRO
YW1lIGFkZHJlc3MobnVsbEF0b20sICJhZGRyZXNzIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0g
ICAgcmV0dXJuIGFkZHJlc3M7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6
YXBwbGV0KCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBhcHBsZXQobnVsbEF0b20sICJh
cHBsZXQiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4gYXBwbGV0OwotfQotCi1j
b25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OmFyZWEoKQotewotICAgIHN0YXRpYyBRdWFs
aWZpZWROYW1lIGFyZWEobnVsbEF0b20sICJhcmVhIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0g
ICAgcmV0dXJuIGFyZWE7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6Yigp
Ci17Ci0gICAgc3RhdGljIFF1YWxpZmllZE5hbWUgYihudWxsQXRvbSwgImIiLCB4aHRtbE5hbWVz
cGFjZVVSSSgpKTsKLSAgICByZXR1cm4gYjsKLX0KLQotY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRN
TE5hbWVzOjpiYXNlKCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBiYXNlKG51bGxBdG9t
LCAiYmFzZSIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiBiYXNlOwotfQotCi1j
b25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OmJhc2Vmb250KCkKLXsKLSAgICBzdGF0aWMg
UXVhbGlmaWVkTmFtZSBiYXNlZm9udChudWxsQXRvbSwgImJhc2Vmb250IiwgeGh0bWxOYW1lc3Bh
Y2VVUkkoKSk7Ci0gICAgcmV0dXJuIGJhc2Vmb250OwotfQotCi1jb25zdCBRdWFsaWZpZWROYW1l
JiBIVE1MTmFtZXM6OmJpZygpCi17Ci0gICAgc3RhdGljIFF1YWxpZmllZE5hbWUgYmlnKG51bGxB
dG9tLCAiYmlnIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJuIGJpZzsKLX0KLQot
Y29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpibG9ja3F1b3RlKCkKLXsKLSAgICBzdGF0
aWMgUXVhbGlmaWVkTmFtZSBibG9ja3F1b3RlKG51bGxBdG9tLCAiYmxvY2txdW90ZSIsIHhodG1s
TmFtZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiBibG9ja3F1b3RlOwotfQotCi1jb25zdCBRdWFs
aWZpZWROYW1lJiBIVE1MTmFtZXM6OmJvZHkoKQotewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1l
IGJvZHkobnVsbEF0b20sICJib2R5IiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJu
IGJvZHk7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6YnIoKQotewotICAg
IHN0YXRpYyBRdWFsaWZpZWROYW1lIGJyKG51bGxBdG9tLCAiYnIiLCB4aHRtbE5hbWVzcGFjZVVS
SSgpKTsKLSAgICByZXR1cm4gYnI7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1l
czo6YnV0dG9uKCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBidXR0b24obnVsbEF0b20s
ICJidXR0b24iLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4gYnV0dG9uOwotfQot
Ci1jb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OmNhbnZhcygpCi17Ci0gICAgc3RhdGlj
IFF1YWxpZmllZE5hbWUgY2FudmFzKG51bGxBdG9tLCAiY2FudmFzIiwgeGh0bWxOYW1lc3BhY2VV
UkkoKSk7Ci0gICAgcmV0dXJuIGNhbnZhczsKLX0KLQotY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRN
TE5hbWVzOjpjYXB0aW9uKCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBjYXB0aW9uKG51
bGxBdG9tLCAiY2FwdGlvbiIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiBjYXB0
aW9uOwotfQotCi1jb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OmNlbnRlcigpCi17Ci0g
ICAgc3RhdGljIFF1YWxpZmllZE5hbWUgY2VudGVyKG51bGxBdG9tLCAiY2VudGVyIiwgeGh0bWxO
YW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJuIGNlbnRlcjsKLX0KLQotY29uc3QgUXVhbGlmaWVk
TmFtZSYgSFRNTE5hbWVzOjpjb2RlKCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBjb2Rl
KG51bGxBdG9tLCAiY29kZSIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiBjb2Rl
OwotfQotCi1jb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OmNvbCgpCi17Ci0gICAgc3Rh
dGljIFF1YWxpZmllZE5hbWUgY29sKG51bGxBdG9tLCAiY29sIiwgeGh0bWxOYW1lc3BhY2VVUkko
KSk7Ci0gICAgcmV0dXJuIGNvbDsKLX0KK3ZvaWQqIHhodG1sTmFtZXNwYWNlVVJJQXRvbVsoc2l6
ZW9mKEF0b21pY1N0cmluZykgKyBzaXplb2Yodm9pZCopIC0gMSkgLyBzaXplb2Yodm9pZCopXTsK
IAotY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpjb2xncm91cCgpCi17Ci0gICAgc3Rh
dGljIFF1YWxpZmllZE5hbWUgY29sZ3JvdXAobnVsbEF0b20sICJjb2xncm91cCIsIHhodG1sTmFt
ZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiBjb2xncm91cDsKLX0KLQotY29uc3QgUXVhbGlmaWVk
TmFtZSYgSFRNTE5hbWVzOjpkZCgpCi17Ci0gICAgc3RhdGljIFF1YWxpZmllZE5hbWUgZGQobnVs
bEF0b20sICJkZCIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiBkZDsKLX0KLQot
Y29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpkZWwoKQotewotICAgIHN0YXRpYyBRdWFs
aWZpZWROYW1lIGRlbChudWxsQXRvbSwgImRlbCIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAg
IHJldHVybiBkZWw7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6ZGZuKCkK
LXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBkZm4obnVsbEF0b20sICJkZm4iLCB4aHRtbE5h
bWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4gZGZuOwotfQotCi1jb25zdCBRdWFsaWZpZWROYW1l
JiBIVE1MTmFtZXM6OmRpcigpCi17Ci0gICAgc3RhdGljIFF1YWxpZmllZE5hbWUgZGlyKG51bGxB
dG9tLCAiZGlyIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJuIGRpcjsKLX0KLQot
Y29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpkaXYoKQotewotICAgIHN0YXRpYyBRdWFs
aWZpZWROYW1lIGRpdihudWxsQXRvbSwgImRpdiIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAg
IHJldHVybiBkaXY7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6ZGwoKQot
ewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIGRsKG51bGxBdG9tLCAiZGwiLCB4aHRtbE5hbWVz
cGFjZVVSSSgpKTsKLSAgICByZXR1cm4gZGw7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhU
TUxOYW1lczo6ZHQoKQotewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIGR0KG51bGxBdG9tLCAi
ZHQiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4gZHQ7Ci19Ci0KLWNvbnN0IFF1
YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6ZW0oKQotewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1l
IGVtKG51bGxBdG9tLCAiZW0iLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4gZW07
Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6ZW1iZWQoKQotewotICAgIHN0
YXRpYyBRdWFsaWZpZWROYW1lIGVtYmVkKG51bGxBdG9tLCAiZW1iZWQiLCB4aHRtbE5hbWVzcGFj
ZVVSSSgpKTsKLSAgICByZXR1cm4gZW1iZWQ7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhU
TUxOYW1lczo6ZmllbGRzZXQoKQotewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIGZpZWxkc2V0
KG51bGxBdG9tLCAiZmllbGRzZXQiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4g
ZmllbGRzZXQ7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6Zm9udCgpCi17
Ci0gICAgc3RhdGljIFF1YWxpZmllZE5hbWUgZm9udChudWxsQXRvbSwgImZvbnQiLCB4aHRtbE5h
bWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4gZm9udDsKLX0KLQotY29uc3QgUXVhbGlmaWVkTmFt
ZSYgSFRNTE5hbWVzOjpmb3JtKCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBmb3JtKG51
bGxBdG9tLCAiZm9ybSIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiBmb3JtOwot
fQotCi1jb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OmZyYW1lKCkKLXsKLSAgICBzdGF0
aWMgUXVhbGlmaWVkTmFtZSBmcmFtZShudWxsQXRvbSwgImZyYW1lIiwgeGh0bWxOYW1lc3BhY2VV
UkkoKSk7Ci0gICAgcmV0dXJuIGZyYW1lOwotfQotCi1jb25zdCBRdWFsaWZpZWROYW1lJiBIVE1M
TmFtZXM6OmZyYW1lc2V0KCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBmcmFtZXNldChu
dWxsQXRvbSwgImZyYW1lc2V0IiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJuIGZy
YW1lc2V0OwotfQotCi1jb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OmhlYWQoKQotewot
ICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIGhlYWQobnVsbEF0b20sICJoZWFkIiwgeGh0bWxOYW1l
c3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJuIGhlYWQ7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUm
IEhUTUxOYW1lczo6aDEoKQotewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIGgxKG51bGxBdG9t
LCAiaDEiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4gaDE7Ci19Ci0KLWNvbnN0
IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6aDIoKQotewotICAgIHN0YXRpYyBRdWFsaWZpZWRO
YW1lIGgyKG51bGxBdG9tLCAiaDIiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4g
aDI7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6aDMoKQotewotICAgIHN0
YXRpYyBRdWFsaWZpZWROYW1lIGgzKG51bGxBdG9tLCAiaDMiLCB4aHRtbE5hbWVzcGFjZVVSSSgp
KTsKLSAgICByZXR1cm4gaDM7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6
aDQoKQotewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIGg0KG51bGxBdG9tLCAiaDQiLCB4aHRt
bE5hbWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4gaDQ7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5h
bWUmIEhUTUxOYW1lczo6aDUoKQotewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIGg1KG51bGxB
dG9tLCAiaDUiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4gaDU7Ci19Ci0KLWNv
bnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6aDYoKQotewotICAgIHN0YXRpYyBRdWFsaWZp
ZWROYW1lIGg2KG51bGxBdG9tLCAiaDYiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKLSAgICByZXR1
cm4gaDY7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6aHIoKQotewotICAg
IHN0YXRpYyBRdWFsaWZpZWROYW1lIGhyKG51bGxBdG9tLCAiaHIiLCB4aHRtbE5hbWVzcGFjZVVS
SSgpKTsKLSAgICByZXR1cm4gaHI7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1l
czo6aHRtbCgpCi17Ci0gICAgc3RhdGljIFF1YWxpZmllZE5hbWUgaHRtbChudWxsQXRvbSwgImh0
bWwiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4gaHRtbDsKLX0KLQotY29uc3Qg
UXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjppKCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFt
ZSBpKG51bGxBdG9tLCAiaSIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiBpOwot
fQotCi1jb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OmlmcmFtZSgpCi17Ci0gICAgc3Rh
dGljIFF1YWxpZmllZE5hbWUgaWZyYW1lKG51bGxBdG9tLCAiaWZyYW1lIiwgeGh0bWxOYW1lc3Bh
Y2VVUkkoKSk7Ci0gICAgcmV0dXJuIGlmcmFtZTsKLX0KLQotY29uc3QgUXVhbGlmaWVkTmFtZSYg
SFRNTE5hbWVzOjppbWcoKQotewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIGltZyhudWxsQXRv
bSwgImltZyIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiBpbWc7Ci19Ci0KLWNv
bnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6aW5wdXQoKQotewotICAgIHN0YXRpYyBRdWFs
aWZpZWROYW1lIGlucHV0KG51bGxBdG9tLCAiaW5wdXQiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsK
LSAgICByZXR1cm4gaW5wdXQ7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6
aW5zKCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBpbnMobnVsbEF0b20sICJpbnMiLCB4
aHRtbE5hbWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4gaW5zOwotfQotCi1jb25zdCBRdWFsaWZp
ZWROYW1lJiBIVE1MTmFtZXM6OmlzaW5kZXgoKQotewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1l
IGlzaW5kZXgobnVsbEF0b20sICJpc2luZGV4IiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAg
cmV0dXJuIGlzaW5kZXg7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6a2Jk
KCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBrYmQobnVsbEF0b20sICJrYmQiLCB4aHRt
bE5hbWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4ga2JkOwotfQotCi1jb25zdCBRdWFsaWZpZWRO
YW1lJiBIVE1MTmFtZXM6OmtleWdlbigpCi17Ci0gICAgc3RhdGljIFF1YWxpZmllZE5hbWUga2V5
Z2VuKG51bGxBdG9tLCAia2V5Z2VuIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJu
IGtleWdlbjsKLX0KLQotY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpsYWJlbCgpCi17
Ci0gICAgc3RhdGljIFF1YWxpZmllZE5hbWUgbGFiZWwobnVsbEF0b20sICJsYWJlbCIsIHhodG1s
TmFtZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiBsYWJlbDsKLX0KLQotY29uc3QgUXVhbGlmaWVk
TmFtZSYgSFRNTE5hbWVzOjpsZWdlbmQoKQotewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIGxl
Z2VuZChudWxsQXRvbSwgImxlZ2VuZCIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAgIHJldHVy
biBsZWdlbmQ7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6bGkoKQotewot
ICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIGxpKG51bGxBdG9tLCAibGkiLCB4aHRtbE5hbWVzcGFj
ZVVSSSgpKTsKLSAgICByZXR1cm4gbGk7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxO
YW1lczo6bGluaygpCi17Ci0gICAgc3RhdGljIFF1YWxpZmllZE5hbWUgbGluayhudWxsQXRvbSwg
ImxpbmsiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4gbGluazsKLX0KLQotY29u
c3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjptYXAoKQotewotICAgIHN0YXRpYyBRdWFsaWZp
ZWROYW1lIG1hcChudWxsQXRvbSwgIm1hcCIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAgIHJl
dHVybiBtYXA7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6bWFycXVlZSgp
Ci17Ci0gICAgc3RhdGljIFF1YWxpZmllZE5hbWUgbWFycXVlZShudWxsQXRvbSwgIm1hcnF1ZWUi
LCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4gbWFycXVlZTsKLX0KLQotY29uc3Qg
UXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjptZW51KCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVk
TmFtZSBtZW51KG51bGxBdG9tLCAibWVudSIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAgIHJl
dHVybiBtZW51OwotfQotCi1jb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6Om1ldGEoKQot
ewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIG1ldGEobnVsbEF0b20sICJtZXRhIiwgeGh0bWxO
YW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJuIG1ldGE7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5h
bWUmIEhUTUxOYW1lczo6bm9lbWJlZCgpCi17Ci0gICAgc3RhdGljIFF1YWxpZmllZE5hbWUgbm9l
bWJlZChudWxsQXRvbSwgIm5vZW1iZWQiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKLSAgICByZXR1
cm4gbm9lbWJlZDsKLX0KLQotY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpub2ZyYW1l
cygpCi17Ci0gICAgc3RhdGljIFF1YWxpZmllZE5hbWUgbm9mcmFtZXMobnVsbEF0b20sICJub2Zy
YW1lcyIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiBub2ZyYW1lczsKLX0KLQot
Y29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpub3NjcmlwdCgpCi17Ci0gICAgc3RhdGlj
IFF1YWxpZmllZE5hbWUgbm9zY3JpcHQobnVsbEF0b20sICJub3NjcmlwdCIsIHhodG1sTmFtZXNw
YWNlVVJJKCkpOwotICAgIHJldHVybiBub3NjcmlwdDsKLX0KLQotY29uc3QgUXVhbGlmaWVkTmFt
ZSYgSFRNTE5hbWVzOjpvYmplY3QoKQotewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIG9iamVj
dChudWxsQXRvbSwgIm9iamVjdCIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiBv
YmplY3Q7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6b2woKQotewotICAg
IHN0YXRpYyBRdWFsaWZpZWROYW1lIG9sKG51bGxBdG9tLCAib2wiLCB4aHRtbE5hbWVzcGFjZVVS
SSgpKTsKLSAgICByZXR1cm4gb2w7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1l
czo6b3B0Z3JvdXAoKQotewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIG9wdGdyb3VwKG51bGxB
dG9tLCAib3B0Z3JvdXAiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4gb3B0Z3Jv
dXA7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6cCgpCi17Ci0gICAgc3Rh
dGljIFF1YWxpZmllZE5hbWUgcChudWxsQXRvbSwgInAiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsK
LSAgICByZXR1cm4gcDsKLX0KLQotY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpwYXJh
bSgpCi17Ci0gICAgc3RhdGljIFF1YWxpZmllZE5hbWUgcGFyYW0obnVsbEF0b20sICJwYXJhbSIs
IHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiBwYXJhbTsKLX0KLQotY29uc3QgUXVh
bGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpwcmUoKQotewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1l
IHByZShudWxsQXRvbSwgInByZSIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiBw
cmU7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6cSgpCi17Ci0gICAgc3Rh
dGljIFF1YWxpZmllZE5hbWUgcShudWxsQXRvbSwgInEiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsK
LSAgICByZXR1cm4gcTsKLX0KLQotY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpzKCkK
LXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBzKG51bGxBdG9tLCAicyIsIHhodG1sTmFtZXNw
YWNlVVJJKCkpOwotICAgIHJldHVybiBzOwotfQotCi1jb25zdCBRdWFsaWZpZWROYW1lJiBIVE1M
TmFtZXM6OnNhbXAoKQotewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIHNhbXAobnVsbEF0b20s
ICJzYW1wIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJuIHNhbXA7Ci19Ci0KLWNv
bnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6c2NyaXB0KCkKLXsKLSAgICBzdGF0aWMgUXVh
bGlmaWVkTmFtZSBzY3JpcHQobnVsbEF0b20sICJzY3JpcHQiLCB4aHRtbE5hbWVzcGFjZVVSSSgp
KTsKLSAgICByZXR1cm4gc2NyaXB0OwotfQotCi1jb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFt
ZXM6OnNlbGVjdCgpCi17Ci0gICAgc3RhdGljIFF1YWxpZmllZE5hbWUgc2VsZWN0KG51bGxBdG9t
LCAic2VsZWN0IiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJuIHNlbGVjdDsKLX0K
LQotY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpzbWFsbCgpCi17Ci0gICAgc3RhdGlj
IFF1YWxpZmllZE5hbWUgc21hbGwobnVsbEF0b20sICJzbWFsbCIsIHhodG1sTmFtZXNwYWNlVVJJ
KCkpOwotICAgIHJldHVybiBzbWFsbDsKLX0KLQotY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5h
bWVzOjpzdHJpa2UoKQotewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIHN0cmlrZShudWxsQXRv
bSwgInN0cmlrZSIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiBzdHJpa2U7Ci19
Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6c3Ryb25nKCkKLXsKLSAgICBzdGF0
aWMgUXVhbGlmaWVkTmFtZSBzdHJvbmcobnVsbEF0b20sICJzdHJvbmciLCB4aHRtbE5hbWVzcGFj
ZVVSSSgpKTsKLSAgICByZXR1cm4gc3Ryb25nOwotfQotCi1jb25zdCBRdWFsaWZpZWROYW1lJiBI
VE1MTmFtZXM6OnN0eWxlKCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBzdHlsZShudWxs
QXRvbSwgInN0eWxlIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJuIHN0eWxlOwot
fQotCi1jb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OnRhYmxlKCkKLXsKLSAgICBzdGF0
aWMgUXVhbGlmaWVkTmFtZSB0YWJsZShudWxsQXRvbSwgInRhYmxlIiwgeGh0bWxOYW1lc3BhY2VV
UkkoKSk7Ci0gICAgcmV0dXJuIHRhYmxlOwotfQotCi1jb25zdCBRdWFsaWZpZWROYW1lJiBIVE1M
TmFtZXM6OnRib2R5KCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSB0Ym9keShudWxsQXRv
bSwgInRib2R5IiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJuIHRib2R5OwotfQot
Ci1jb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OnRkKCkKLXsKLSAgICBzdGF0aWMgUXVh
bGlmaWVkTmFtZSB0ZChudWxsQXRvbSwgInRkIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAg
cmV0dXJuIHRkOwotfQotCi1jb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OnRleHRhcmVh
KCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSB0ZXh0YXJlYShudWxsQXRvbSwgInRleHRh
cmVhIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJuIHRleHRhcmVhOwotfQotCi1j
b25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OnRmb290KCkKLXsKLSAgICBzdGF0aWMgUXVh
bGlmaWVkTmFtZSB0Zm9vdChudWxsQXRvbSwgInRmb290IiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7
Ci0gICAgcmV0dXJuIHRmb290OwotfQotCi1jb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6
OnRoKCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSB0aChudWxsQXRvbSwgInRoIiwgeGh0
bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJuIHRoOwotfQotCi1jb25zdCBRdWFsaWZpZWRO
YW1lJiBIVE1MTmFtZXM6OnRoZWFkKCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSB0aGVh
ZChudWxsQXRvbSwgInRoZWFkIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJuIHRo
ZWFkOwotfQotCi1jb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OnRpdGxlKCkKLXsKLSAg
ICBzdGF0aWMgUXVhbGlmaWVkTmFtZSB0aXRsZShudWxsQXRvbSwgInRpdGxlIiwgeGh0bWxOYW1l
c3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJuIHRpdGxlOwotfQotCi1jb25zdCBRdWFsaWZpZWROYW1l
JiBIVE1MTmFtZXM6OnRyKCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSB0cihudWxsQXRv
bSwgInRyIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJuIHRyOwotfQotCi1jb25z
dCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OnR0KCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVk
TmFtZSB0dChudWxsQXRvbSwgInR0IiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJu
IHR0OwotfQotCi1jb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OnUoKQotewotICAgIHN0
YXRpYyBRdWFsaWZpZWROYW1lIHUobnVsbEF0b20sICJ1IiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7
Ci0gICAgcmV0dXJuIHU7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6dWwo
KQotewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIHVsKG51bGxBdG9tLCAidWwiLCB4aHRtbE5h
bWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4gdWw7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUm
IEhUTUxOYW1lczo6dmFyKCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSB2YXIobnVsbEF0
b20sICJ2YXIiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4gdmFyOwotfQotCi1j
b25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OnhtcCgpCi17Ci0gICAgc3RhdGljIFF1YWxp
ZmllZE5hbWUgeG1wKG51bGxBdG9tLCAieG1wIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAg
cmV0dXJuIHhtcDsKKy8vIERlZmluZSBhIFF1YWxpZmllZE5hbWUtc2l6ZWQgYXJyYXkgb2YgcG9p
bnRlcnMgdG8gYXZvaWQgc3RhdGljIGluaXRpYWxpemF0aW9uLgorLy8gVXNlIGFuIGFycmF5IG9m
IHBvaW50ZXJzIGluc3RlYWQgb2YgYW4gYXJyYXkgb2YgY2hhciBpbiBjYXNlIHRoZXJlIGlzIHNv
bWUgYWxpZ25tZW50IGlzc3VlLgorI2RlZmluZSBERUZJTkVfR0xPQkFMKG5hbWUpIFwKKyAgICB2
b2lkKiBuYW1lICMjIFFOYW1lWyhzaXplb2YoUXVhbGlmaWVkTmFtZSkgKyBzaXplb2Yodm9pZCop
IC0gMSkgLyBzaXplb2Yodm9pZCopXTsKKworREVGSU5FX0dMT0JBTChhKQorREVGSU5FX0dMT0JB
TChhYmJyKQorREVGSU5FX0dMT0JBTChhY3JvbnltKQorREVGSU5FX0dMT0JBTChhZGRyZXNzKQor
REVGSU5FX0dMT0JBTChhcHBsZXQpCitERUZJTkVfR0xPQkFMKGFyZWEpCitERUZJTkVfR0xPQkFM
KGIpCitERUZJTkVfR0xPQkFMKGJhc2UpCitERUZJTkVfR0xPQkFMKGJhc2Vmb250KQorREVGSU5F
X0dMT0JBTChiZG8pCitERUZJTkVfR0xPQkFMKGJpZykKK0RFRklORV9HTE9CQUwoYmxvY2txdW90
ZSkKK0RFRklORV9HTE9CQUwoYm9keSkKK0RFRklORV9HTE9CQUwoYnIpCitERUZJTkVfR0xPQkFM
KGJ1dHRvbikKK0RFRklORV9HTE9CQUwoY2FudmFzKQorREVGSU5FX0dMT0JBTChjYXB0aW9uKQor
REVGSU5FX0dMT0JBTChjZW50ZXIpCitERUZJTkVfR0xPQkFMKGNpdGUpCitERUZJTkVfR0xPQkFM
KGNvZGUpCitERUZJTkVfR0xPQkFMKGNvbCkKK0RFRklORV9HTE9CQUwoY29sZ3JvdXApCitERUZJ
TkVfR0xPQkFMKGRkKQorREVGSU5FX0dMT0JBTChkZWwpCitERUZJTkVfR0xPQkFMKGRmbikKK0RF
RklORV9HTE9CQUwoZGlyKQorREVGSU5FX0dMT0JBTChkaXYpCitERUZJTkVfR0xPQkFMKGRsKQor
REVGSU5FX0dMT0JBTChkdCkKK0RFRklORV9HTE9CQUwoZW0pCitERUZJTkVfR0xPQkFMKGVtYmVk
KQorREVGSU5FX0dMT0JBTChmaWVsZHNldCkKK0RFRklORV9HTE9CQUwoZm9udCkKK0RFRklORV9H
TE9CQUwoZm9ybSkKK0RFRklORV9HTE9CQUwoZnJhbWUpCitERUZJTkVfR0xPQkFMKGZyYW1lc2V0
KQorREVGSU5FX0dMT0JBTChoZWFkKQorREVGSU5FX0dMT0JBTChoMSkKK0RFRklORV9HTE9CQUwo
aDIpCitERUZJTkVfR0xPQkFMKGgzKQorREVGSU5FX0dMT0JBTChoNCkKK0RFRklORV9HTE9CQUwo
aDUpCitERUZJTkVfR0xPQkFMKGg2KQorREVGSU5FX0dMT0JBTChocikKK0RFRklORV9HTE9CQUwo
aHRtbCkKK0RFRklORV9HTE9CQUwoaSkKK0RFRklORV9HTE9CQUwoaWZyYW1lKQorREVGSU5FX0dM
T0JBTChpbWcpCitERUZJTkVfR0xPQkFMKGlucHV0KQorREVGSU5FX0dMT0JBTChpbnMpCitERUZJ
TkVfR0xPQkFMKGlzaW5kZXgpCitERUZJTkVfR0xPQkFMKGtiZCkKK0RFRklORV9HTE9CQUwoa2V5
Z2VuKQorREVGSU5FX0dMT0JBTChsYWJlbCkKK0RFRklORV9HTE9CQUwobGF5ZXIpCitERUZJTkVf
R0xPQkFMKGxlZ2VuZCkKK0RFRklORV9HTE9CQUwobGkpCitERUZJTkVfR0xPQkFMKGxpbmspCitE
RUZJTkVfR0xPQkFMKG1hcCkKK0RFRklORV9HTE9CQUwobWFycXVlZSkKK0RFRklORV9HTE9CQUwo
bWVudSkKK0RFRklORV9HTE9CQUwobWV0YSkKK0RFRklORV9HTE9CQUwobm9icikKK0RFRklORV9H
TE9CQUwobm9lbWJlZCkKK0RFRklORV9HTE9CQUwobm9mcmFtZXMpCitERUZJTkVfR0xPQkFMKG5v
bGF5ZXIpCitERUZJTkVfR0xPQkFMKG5vc2NyaXB0KQorREVGSU5FX0dMT0JBTChvYmplY3QpCitE
RUZJTkVfR0xPQkFMKG9sKQorREVGSU5FX0dMT0JBTChvcHRncm91cCkKK0RFRklORV9HTE9CQUwo
b3B0aW9uKQorREVGSU5FX0dMT0JBTChwKQorREVGSU5FX0dMT0JBTChwYXJhbSkKK0RFRklORV9H
TE9CQUwocGxhaW50ZXh0KQorREVGSU5FX0dMT0JBTChwcmUpCitERUZJTkVfR0xPQkFMKHEpCitE
RUZJTkVfR0xPQkFMKHMpCitERUZJTkVfR0xPQkFMKHNhbXApCitERUZJTkVfR0xPQkFMKHNjcmlw
dCkKK0RFRklORV9HTE9CQUwoc2VsZWN0KQorREVGSU5FX0dMT0JBTChzbWFsbCkKK0RFRklORV9H
TE9CQUwoc3BhbikKK0RFRklORV9HTE9CQUwoc3RyaWtlKQorREVGSU5FX0dMT0JBTChzdHJvbmcp
CitERUZJTkVfR0xPQkFMKHN0eWxlKQorREVGSU5FX0dMT0JBTChzdWIpCitERUZJTkVfR0xPQkFM
KHN1cCkKK0RFRklORV9HTE9CQUwodGFibGUpCitERUZJTkVfR0xPQkFMKHRib2R5KQorREVGSU5F
X0dMT0JBTCh0ZCkKK0RFRklORV9HTE9CQUwodGV4dGFyZWEpCitERUZJTkVfR0xPQkFMKHRmb290
KQorREVGSU5FX0dMT0JBTCh0aCkKK0RFRklORV9HTE9CQUwodGhlYWQpCitERUZJTkVfR0xPQkFM
KHRpdGxlKQorREVGSU5FX0dMT0JBTCh0cikKK0RFRklORV9HTE9CQUwodHQpCitERUZJTkVfR0xP
QkFMKHUpCitERUZJTkVfR0xPQkFMKHVsKQorREVGSU5FX0dMT0JBTCh2YXIpCitERUZJTkVfR0xP
QkFMKHdicikKK0RFRklORV9HTE9CQUwoeG1wKQorCit2b2lkIEhUTUxOYW1lczo6aW5pdCgpCit7
CisgICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQ7CisgICAgaWYgKCFpbml0aWFsaXplZCkgewor
ICAgICAgICAvLyBVc2UgcGxhY2VtZW50IG5ldyB0byBpbml0aWFsaXplIHRoZSBnbG9iYWxzLgor
ICAgICAgICBzdGF0aWMgQXRvbWljU3RyaW5nIHhodG1sTlMoImh0dHA6Ly93d3cudzMub3JnLzE5
OTkveGh0bWwiKTsKKyAgICAgICAgbmV3ICgmeGh0bWxOYW1lc3BhY2VVUklBdG9tKSBBdG9taWNT
dHJpbmcoeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJmFRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxs
QXRvbSwgImEiLCB4aHRtbE5TKTsKKyAgICAgICAgbmV3ICgmYWJiclFOYW1lKSBRdWFsaWZpZWRO
YW1lKG51bGxBdG9tLCAiYWJiciIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZhY3JvbnltUU5h
bWUpIFF1YWxpZmllZE5hbWUobnVsbEF0b20sICJhY3JvbnltIiwgeGh0bWxOUyk7CisgICAgICAg
IG5ldyAoJmFkZHJlc3NRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgImFkZHJlc3MiLCB4
aHRtbE5TKTsKKyAgICAgICAgbmV3ICgmYXBwbGV0UU5hbWUpIFF1YWxpZmllZE5hbWUobnVsbEF0
b20sICJhcHBsZXQiLCB4aHRtbE5TKTsKKyAgICAgICAgbmV3ICgmYXJlYVFOYW1lKSBRdWFsaWZp
ZWROYW1lKG51bGxBdG9tLCAiYXJlYSIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZiUU5hbWUp
IFF1YWxpZmllZE5hbWUobnVsbEF0b20sICJiIiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJmJh
c2VRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgImJhc2UiLCB4aHRtbE5TKTsKKyAgICAg
ICAgbmV3ICgmYmFzZWZvbnRRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgImJhc2Vmb250
IiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJmJkb1FOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxB
dG9tLCAiYmRvIiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJmJpZ1FOYW1lKSBRdWFsaWZpZWRO
YW1lKG51bGxBdG9tLCAiYmlnIiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJmJsb2NrcXVvdGVR
TmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgImJsb2NrcXVvdGUiLCB4aHRtbE5TKTsKKyAg
ICAgICAgbmV3ICgmYm9keVFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAiYm9keSIsIHho
dG1sTlMpOworICAgICAgICBuZXcgKCZiclFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAi
YnIiLCB4aHRtbE5TKTsKKyAgICAgICAgbmV3ICgmYnV0dG9uUU5hbWUpIFF1YWxpZmllZE5hbWUo
bnVsbEF0b20sICJidXR0b24iLCB4aHRtbE5TKTsKKyAgICAgICAgbmV3ICgmY2FudmFzUU5hbWUp
IFF1YWxpZmllZE5hbWUobnVsbEF0b20sICJjYW52YXMiLCB4aHRtbE5TKTsKKyAgICAgICAgbmV3
ICgmY2FwdGlvblFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAiY2FwdGlvbiIsIHhodG1s
TlMpOworICAgICAgICBuZXcgKCZjZW50ZXJRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwg
ImNlbnRlciIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZjaXRlUU5hbWUpIFF1YWxpZmllZE5h
bWUobnVsbEF0b20sICJjaXRlIiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJmNvZGVRTmFtZSkg
UXVhbGlmaWVkTmFtZShudWxsQXRvbSwgImNvZGUiLCB4aHRtbE5TKTsKKyAgICAgICAgbmV3ICgm
Y29sUU5hbWUpIFF1YWxpZmllZE5hbWUobnVsbEF0b20sICJjb2wiLCB4aHRtbE5TKTsKKyAgICAg
ICAgbmV3ICgmY29sZ3JvdXBRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgImNvbGdyb3Vw
IiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJmRkUU5hbWUpIFF1YWxpZmllZE5hbWUobnVsbEF0
b20sICJkZCIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZkZWxRTmFtZSkgUXVhbGlmaWVkTmFt
ZShudWxsQXRvbSwgImRlbCIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZkZm5RTmFtZSkgUXVh
bGlmaWVkTmFtZShudWxsQXRvbSwgImRmbiIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZkaXJR
TmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgImRpciIsIHhodG1sTlMpOworICAgICAgICBu
ZXcgKCZkaXZRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgImRpdiIsIHhodG1sTlMpOwor
ICAgICAgICBuZXcgKCZkbFFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAiZGwiLCB4aHRt
bE5TKTsKKyAgICAgICAgbmV3ICgmZHRRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgImR0
IiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJmVtUU5hbWUpIFF1YWxpZmllZE5hbWUobnVsbEF0
b20sICJlbSIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZlbWJlZFFOYW1lKSBRdWFsaWZpZWRO
YW1lKG51bGxBdG9tLCAiZW1iZWQiLCB4aHRtbE5TKTsKKyAgICAgICAgbmV3ICgmZmllbGRzZXRR
TmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgImZpZWxkc2V0IiwgeGh0bWxOUyk7CisgICAg
ICAgIG5ldyAoJmZvbnRRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgImZvbnQiLCB4aHRt
bE5TKTsKKyAgICAgICAgbmV3ICgmZm9ybVFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAi
Zm9ybSIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZmcmFtZVFOYW1lKSBRdWFsaWZpZWROYW1l
KG51bGxBdG9tLCAiZnJhbWUiLCB4aHRtbE5TKTsKKyAgICAgICAgbmV3ICgmZnJhbWVzZXRRTmFt
ZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgImZyYW1lc2V0IiwgeGh0bWxOUyk7CisgICAgICAg
IG5ldyAoJmhlYWRRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgImhlYWQiLCB4aHRtbE5T
KTsKKyAgICAgICAgbmV3ICgmaDFRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgImgxIiwg
eGh0bWxOUyk7CisgICAgICAgIG5ldyAoJmgyUU5hbWUpIFF1YWxpZmllZE5hbWUobnVsbEF0b20s
ICJoMiIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZoM1FOYW1lKSBRdWFsaWZpZWROYW1lKG51
bGxBdG9tLCAiaDMiLCB4aHRtbE5TKTsKKyAgICAgICAgbmV3ICgmaDRRTmFtZSkgUXVhbGlmaWVk
TmFtZShudWxsQXRvbSwgImg0IiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJmg1UU5hbWUpIFF1
YWxpZmllZE5hbWUobnVsbEF0b20sICJoNSIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZoNlFO
YW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAiaDYiLCB4aHRtbE5TKTsKKyAgICAgICAgbmV3
ICgmaHJRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgImhyIiwgeGh0bWxOUyk7CisgICAg
ICAgIG5ldyAoJmh0bWxRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgImh0bWwiLCB4aHRt
bE5TKTsKKyAgICAgICAgbmV3ICgmaVFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAiaSIs
IHhodG1sTlMpOworICAgICAgICBuZXcgKCZpZnJhbWVRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxs
QXRvbSwgImlmcmFtZSIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZpbWdRTmFtZSkgUXVhbGlm
aWVkTmFtZShudWxsQXRvbSwgImltZyIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZpbnB1dFFO
YW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAiaW5wdXQiLCB4aHRtbE5TKTsKKyAgICAgICAg
bmV3ICgmaW5zUU5hbWUpIFF1YWxpZmllZE5hbWUobnVsbEF0b20sICJpbnMiLCB4aHRtbE5TKTsK
KyAgICAgICAgbmV3ICgmaXNpbmRleFFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAiaXNp
bmRleCIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZrYmRRTmFtZSkgUXVhbGlmaWVkTmFtZShu
dWxsQXRvbSwgImtiZCIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZrZXlnZW5RTmFtZSkgUXVh
bGlmaWVkTmFtZShudWxsQXRvbSwgImtleWdlbiIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZs
YWJlbFFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAibGFiZWwiLCB4aHRtbE5TKTsKKyAg
ICAgICAgbmV3ICgmbGF5ZXJRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgImxheWVyIiwg
eGh0bWxOUyk7CisgICAgICAgIG5ldyAoJmxlZ2VuZFFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxB
dG9tLCAibGVnZW5kIiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJmxpUU5hbWUpIFF1YWxpZmll
ZE5hbWUobnVsbEF0b20sICJsaSIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZsaW5rUU5hbWUp
IFF1YWxpZmllZE5hbWUobnVsbEF0b20sICJsaW5rIiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAo
Jm1hcFFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAibWFwIiwgeGh0bWxOUyk7CisgICAg
ICAgIG5ldyAoJm1hcnF1ZWVRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgIm1hcnF1ZWUi
LCB4aHRtbE5TKTsKKyAgICAgICAgbmV3ICgmbWVudVFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxB
dG9tLCAibWVudSIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZtZXRhUU5hbWUpIFF1YWxpZmll
ZE5hbWUobnVsbEF0b20sICJtZXRhIiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJm5vYnJRTmFt
ZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgIm5vYnIiLCB4aHRtbE5TKTsKKyAgICAgICAgbmV3
ICgmbm9lbWJlZFFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAibm9lbWJlZCIsIHhodG1s
TlMpOworICAgICAgICBuZXcgKCZub2ZyYW1lc1FOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9t
LCAibm9mcmFtZXMiLCB4aHRtbE5TKTsKKyAgICAgICAgbmV3ICgmbm9sYXllclFOYW1lKSBRdWFs
aWZpZWROYW1lKG51bGxBdG9tLCAibm9sYXllciIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZu
b3NjcmlwdFFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAibm9zY3JpcHQiLCB4aHRtbE5T
KTsKKyAgICAgICAgbmV3ICgmb2JqZWN0UU5hbWUpIFF1YWxpZmllZE5hbWUobnVsbEF0b20sICJv
YmplY3QiLCB4aHRtbE5TKTsKKyAgICAgICAgbmV3ICgmb2xRTmFtZSkgUXVhbGlmaWVkTmFtZShu
dWxsQXRvbSwgIm9sIiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJm9wdGdyb3VwUU5hbWUpIFF1
YWxpZmllZE5hbWUobnVsbEF0b20sICJvcHRncm91cCIsIHhodG1sTlMpOworICAgICAgICBuZXcg
KCZvcHRpb25RTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgIm9wdGlvbiIsIHhodG1sTlMp
OworICAgICAgICBuZXcgKCZwUU5hbWUpIFF1YWxpZmllZE5hbWUobnVsbEF0b20sICJwIiwgeGh0
bWxOUyk7CisgICAgICAgIG5ldyAoJnBhcmFtUU5hbWUpIFF1YWxpZmllZE5hbWUobnVsbEF0b20s
ICJwYXJhbSIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZwbGFpbnRleHRRTmFtZSkgUXVhbGlm
aWVkTmFtZShudWxsQXRvbSwgInBsYWludGV4dCIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZw
cmVRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgInByZSIsIHhodG1sTlMpOworICAgICAg
ICBuZXcgKCZxUU5hbWUpIFF1YWxpZmllZE5hbWUobnVsbEF0b20sICJxIiwgeGh0bWxOUyk7Cisg
ICAgICAgIG5ldyAoJnNRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgInMiLCB4aHRtbE5T
KTsKKyAgICAgICAgbmV3ICgmc2FtcFFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAic2Ft
cCIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZzY3JpcHRRTmFtZSkgUXVhbGlmaWVkTmFtZShu
dWxsQXRvbSwgInNjcmlwdCIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZzZWxlY3RRTmFtZSkg
UXVhbGlmaWVkTmFtZShudWxsQXRvbSwgInNlbGVjdCIsIHhodG1sTlMpOworICAgICAgICBuZXcg
KCZzbWFsbFFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAic21hbGwiLCB4aHRtbE5TKTsK
KyAgICAgICAgbmV3ICgmc3BhblFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAic3BhbiIs
IHhodG1sTlMpOworICAgICAgICBuZXcgKCZzdHJpa2VRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxs
QXRvbSwgInN0cmlrZSIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZzdHJvbmdRTmFtZSkgUXVh
bGlmaWVkTmFtZShudWxsQXRvbSwgInN0cm9uZyIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZz
dHlsZVFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAic3R5bGUiLCB4aHRtbE5TKTsKKyAg
ICAgICAgbmV3ICgmc3ViUU5hbWUpIFF1YWxpZmllZE5hbWUobnVsbEF0b20sICJzdWIiLCB4aHRt
bE5TKTsKKyAgICAgICAgbmV3ICgmc3VwUU5hbWUpIFF1YWxpZmllZE5hbWUobnVsbEF0b20sICJz
dXAiLCB4aHRtbE5TKTsKKyAgICAgICAgbmV3ICgmdGFibGVRTmFtZSkgUXVhbGlmaWVkTmFtZShu
dWxsQXRvbSwgInRhYmxlIiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJnRib2R5UU5hbWUpIFF1
YWxpZmllZE5hbWUobnVsbEF0b20sICJ0Ym9keSIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZ0
ZFFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAidGQiLCB4aHRtbE5TKTsKKyAgICAgICAg
bmV3ICgmdGV4dGFyZWFRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgInRleHRhcmVhIiwg
eGh0bWxOUyk7CisgICAgICAgIG5ldyAoJnRmb290UU5hbWUpIFF1YWxpZmllZE5hbWUobnVsbEF0
b20sICJ0Zm9vdCIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZ0aFFOYW1lKSBRdWFsaWZpZWRO
YW1lKG51bGxBdG9tLCAidGgiLCB4aHRtbE5TKTsKKyAgICAgICAgbmV3ICgmdGhlYWRRTmFtZSkg
UXVhbGlmaWVkTmFtZShudWxsQXRvbSwgInRoZWFkIiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAo
JnRpdGxlUU5hbWUpIFF1YWxpZmllZE5hbWUobnVsbEF0b20sICJ0aXRsZSIsIHhodG1sTlMpOwor
ICAgICAgICBuZXcgKCZ0clFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAidHIiLCB4aHRt
bE5TKTsKKyAgICAgICAgbmV3ICgmdHRRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgInR0
IiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJnVRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRv
bSwgInUiLCB4aHRtbE5TKTsKKyAgICAgICAgbmV3ICgmdWxRTmFtZSkgUXVhbGlmaWVkTmFtZShu
dWxsQXRvbSwgInVsIiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJnZhclFOYW1lKSBRdWFsaWZp
ZWROYW1lKG51bGxBdG9tLCAidmFyIiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJndiclFOYW1l
KSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAid2JyIiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAo
JnhtcFFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAieG1wIiwgeGh0bWxOUyk7CisgICAg
ICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKKyAgICB9CiB9CiAKIH0KSW5kZXg6IGtodG1sL2h0bWwv
aHRtbG5hbWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwv
aHRtbC9odG1sbmFtZXMuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yCmRpZmYgLXUgLXAgLXIx
LjIga2h0bWwvaHRtbC9odG1sbmFtZXMuaAotLS0ga2h0bWwvaHRtbC9odG1sbmFtZXMuaAkxNiBK
dW4gMjAwNSAyMDozMzo1NyAtMDAwMAkxLjIKKysrIGtodG1sL2h0bWwvaHRtbG5hbWVzLmgJNyBK
dWwgMjAwNSAwNTo1OTowNSAtMDAwMApAQCAtMjIsMTEyICsyMiwyNDEgQEAKICNpZm5kZWYgSFRN
TE5BTUVTX0gKICNkZWZpbmUgSFRNTE5BTUVTX0gKIAotI2luY2x1ZGUgInhtbC9kb21fZWxlbWVu
dGltcGwuaCIKKyNpbmNsdWRlICJkb21fcW5hbWUuaCIKIAogbmFtZXNwYWNlIERPTQogewogCiBj
bGFzcyBRdWFsaWZpZWROYW1lOwogCisvLyBUaGUgZ2xvYmFscy4KKy8vIERlZmluZSBleHRlcm5h
bCBnbG9iYWwgdmFyaWFibGVzIGZvciBhbGwgSFRNTCBuYW1lcyBhYm92ZS4KKyNpZiAhS0hUTUxf
SFRNTE5BTUVTX0hJREVfR0xPQkFMUworICAgIGV4dGVybiBjb25zdCBBdG9taWNTdHJpbmcgIHho
dG1sTmFtZXNwYWNlVVJJQXRvbTsKKyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSBhUU5h
bWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgYWJiclFOYW1lOworICAgIGV4dGVy
biBjb25zdCBRdWFsaWZpZWROYW1lIGFjcm9ueW1RTmFtZTsKKyAgICBleHRlcm4gY29uc3QgUXVh
bGlmaWVkTmFtZSBhZGRyZXNzUU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUg
YXBwbGV0UU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgYXJlYVFOYW1lOwor
ICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIGJRTmFtZTsKKyAgICBleHRlcm4gY29uc3Qg
UXVhbGlmaWVkTmFtZSBiYXNlUU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUg
YmFzZWZvbnRRTmFtZTsKKyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSBiZG9RTmFtZTsK
KyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSBiaWdRTmFtZTsKKyAgICBleHRlcm4gY29u
c3QgUXVhbGlmaWVkTmFtZSBibG9ja3F1b3RlUU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxp
ZmllZE5hbWUgYm9keVFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIGJyUU5h
bWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgYnV0dG9uUU5hbWU7CisgICAgZXh0
ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgY2FudmFzUU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1
YWxpZmllZE5hbWUgY2FwdGlvblFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1l
IGNlbnRlclFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIGNpdGVRTmFtZTsK
KyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSBjb2RlUU5hbWU7CisgICAgZXh0ZXJuIGNv
bnN0IFF1YWxpZmllZE5hbWUgY29sUU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5h
bWUgY29sZ3JvdXBRTmFtZTsKKyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSBkZFFOYW1l
OworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIGRlbFFOYW1lOworICAgIGV4dGVybiBj
b25zdCBRdWFsaWZpZWROYW1lIGRmblFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWRO
YW1lIGRpclFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIGRpdlFOYW1lOwor
ICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIGRsUU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0
IFF1YWxpZmllZE5hbWUgZHRRTmFtZTsKKyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSBl
bVFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIGVtYmVkUU5hbWU7CisgICAg
ZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgZmllbGRzZXRRTmFtZTsKKyAgICBleHRlcm4gY29u
c3QgUXVhbGlmaWVkTmFtZSBmb250UU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5h
bWUgZm9ybVFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIGZyYW1lUU5hbWU7
CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgZnJhbWVzZXRRTmFtZTsKKyAgICBleHRl
cm4gY29uc3QgUXVhbGlmaWVkTmFtZSBoZWFkUU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxp
ZmllZE5hbWUgaDFRTmFtZTsKKyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSBoMlFOYW1l
OworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIGgzUU5hbWU7CisgICAgZXh0ZXJuIGNv
bnN0IFF1YWxpZmllZE5hbWUgaDRRTmFtZTsKKyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFt
ZSBoNVFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIGg2UU5hbWU7CisgICAg
ZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgaHJRTmFtZTsKKyAgICBleHRlcm4gY29uc3QgUXVh
bGlmaWVkTmFtZSBodG1sUU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgaVFO
YW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIGlmcmFtZVFOYW1lOworICAgIGV4
dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIGltZ1FOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFs
aWZpZWROYW1lIGlucHV0UU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgaW5z
UU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgaXNpbmRleFFOYW1lOworICAg
IGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIGtiZFFOYW1lOworICAgIGV4dGVybiBjb25zdCBR
dWFsaWZpZWROYW1lIGtleWdlblFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1l
IGxhYmVsUU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgbGF5ZXJRTmFtZTsK
KyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSBsZWdlbmRRTmFtZTsKKyAgICBleHRlcm4g
Y29uc3QgUXVhbGlmaWVkTmFtZSBsaVFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWRO
YW1lIGxpbmtRTmFtZTsKKyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSBtYXBRTmFtZTsK
KyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSBtYXJxdWVlUU5hbWU7CisgICAgZXh0ZXJu
IGNvbnN0IFF1YWxpZmllZE5hbWUgbWVudVFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZp
ZWROYW1lIG1ldGFRTmFtZTsKKyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSBub2JyUU5h
bWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgbm9lbWJlZFFOYW1lOworICAgIGV4
dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIG5vZnJhbWVzUU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0
IFF1YWxpZmllZE5hbWUgbm9sYXllclFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWRO
YW1lIG5vc2NyaXB0UU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgb2JqZWN0
UU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgb2xRTmFtZTsKKyAgICBleHRl
cm4gY29uc3QgUXVhbGlmaWVkTmFtZSBvcHRncm91cFFOYW1lOworICAgIGV4dGVybiBjb25zdCBR
dWFsaWZpZWROYW1lIG9wdGlvblFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1l
IHBRTmFtZTsKKyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSBwYXJhbVFOYW1lOworICAg
IGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIHBsYWludGV4dFFOYW1lOworICAgIGV4dGVybiBj
b25zdCBRdWFsaWZpZWROYW1lIHByZVFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWRO
YW1lIHFRTmFtZTsKKyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSBzUU5hbWU7CisgICAg
ZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgc2FtcFFOYW1lOworICAgIGV4dGVybiBjb25zdCBR
dWFsaWZpZWROYW1lIHNjcmlwdFFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1l
IHNlbGVjdFFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIHNtYWxsUU5hbWU7
CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgc3BhblFOYW1lOworICAgIGV4dGVybiBj
b25zdCBRdWFsaWZpZWROYW1lIHN0cmlrZVFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZp
ZWROYW1lIHN0cm9uZ1FOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIHN0eWxl
UU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgc3ViUU5hbWU7CisgICAgZXh0
ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgc3VwUU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxp
ZmllZE5hbWUgdGFibGVRTmFtZTsKKyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSB0Ym9k
eVFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIHRkUU5hbWU7CisgICAgZXh0
ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgdGV4dGFyZWFRTmFtZTsKKyAgICBleHRlcm4gY29uc3Qg
UXVhbGlmaWVkTmFtZSB0Zm9vdFFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1l
IHRoUU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgdGhlYWRRTmFtZTsKKyAg
ICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSB0aXRsZVFOYW1lOworICAgIGV4dGVybiBjb25z
dCBRdWFsaWZpZWROYW1lIHRyUU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUg
dHRRTmFtZTsKKyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSB1UU5hbWU7CisgICAgZXh0
ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgdWxRTmFtZTsKKyAgICBleHRlcm4gY29uc3QgUXVhbGlm
aWVkTmFtZSB2YXJRTmFtZTsKKyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSB3YnJRTmFt
ZTsKKyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSB4bXBRTmFtZTsKKworI2VuZGlmCisK
IGNsYXNzIEhUTUxOYW1lcwogewogcHVibGljOgorI2lmICFLSFRNTF9IVE1MTkFNRVNfSElERV9H
TE9CQUxTCiAgICAgLy8gVGhlIG5hbWVzcGFjZSBVUkkuCi0gICAgc3RhdGljIGNvbnN0IEF0b21p
Y1N0cmluZyYgeGh0bWxOYW1lc3BhY2VVUkkoKTsKKyAgICBzdGF0aWMgY29uc3QgQXRvbWljU3Ry
aW5nJiB4aHRtbE5hbWVzcGFjZVVSSSgpIHsgcmV0dXJuIHhodG1sTmFtZXNwYWNlVVJJQXRvbTsg
fQogICAgIAotICAgIC8vIEZ1bGwgdGFnIG5hbWVzLgotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZp
ZWROYW1lJiBhKCk7Ci0gICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGFkZHJlc3MoKTsK
LSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXBwbGV0KCk7Ci0gICAgc3RhdGljIGNv
bnN0IFF1YWxpZmllZE5hbWUmIGFyZWEoKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFt
ZSYgYigpOwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBiYXNlKCk7Ci0gICAgc3Rh
dGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGJhc2Vmb250KCk7Ci0gICAgc3RhdGljIGNvbnN0IFF1
YWxpZmllZE5hbWUmIGJpZygpOwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBibG9j
a3F1b3RlKCk7Ci0gICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGJvZHkoKTsKLSAgICBz
dGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgYnIoKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlm
aWVkTmFtZSYgYnV0dG9uKCk7Ci0gICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGNhbnZh
cygpOwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBjYXB0aW9uKCk7Ci0gICAgc3Rh
dGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGNlbnRlcigpOwotICAgIHN0YXRpYyBjb25zdCBRdWFs
aWZpZWROYW1lJiBjb2RlKCk7Ci0gICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGNvbCgp
OwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBjb2xncm91cCgpOwotICAgIHN0YXRp
YyBjb25zdCBRdWFsaWZpZWROYW1lJiBkZCgpOwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWRO
YW1lJiBkZWwoKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgZGZuKCk7Ci0gICAg
c3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGRpcigpOwotICAgIHN0YXRpYyBjb25zdCBRdWFs
aWZpZWROYW1lJiBkaXYoKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgZGwoKTsK
LSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgZHQoKTsKLSAgICBzdGF0aWMgY29uc3Qg
UXVhbGlmaWVkTmFtZSYgZW0oKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgZW1i
ZWQoKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgZmllbGRzZXQoKTsKLSAgICBz
dGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgZm9udCgpOwotICAgIHN0YXRpYyBjb25zdCBRdWFs
aWZpZWROYW1lJiBmb3JtKCk7Ci0gICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGZyYW1l
KCk7Ci0gICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGZyYW1lc2V0KCk7Ci0gICAgc3Rh
dGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGhlYWQoKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlm
aWVkTmFtZSYgaDEoKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgaDIoKTsKLSAg
ICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgaDMoKTsKLSAgICBzdGF0aWMgY29uc3QgUXVh
bGlmaWVkTmFtZSYgaDQoKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgaDUoKTsK
LSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgaDYoKTsKLSAgICBzdGF0aWMgY29uc3Qg
UXVhbGlmaWVkTmFtZSYgaHIoKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgaHRt
bCgpOwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBpKCk7Ci0gICAgc3RhdGljIGNv
bnN0IFF1YWxpZmllZE5hbWUmIGlmcmFtZSgpOwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWRO
YW1lJiBpbWcoKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgaW5wdXQoKTsKLSAg
ICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgaW5zKCk7Ci0gICAgc3RhdGljIGNvbnN0IFF1
YWxpZmllZE5hbWUmIGlzaW5kZXgoKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYg
a2JkKCk7Ci0gICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGtleWdlbigpOwotICAgIHN0
YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBsYWJlbCgpOwotICAgIHN0YXRpYyBjb25zdCBRdWFs
aWZpZWROYW1lJiBsZWdlbmQoKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgbGko
KTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgbGluaygpOwotICAgIHN0YXRpYyBj
b25zdCBRdWFsaWZpZWROYW1lJiBtYXAoKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFt
ZSYgbWFycXVlZSgpOwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBtZW51KCk7Ci0g
ICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIG1ldGEoKTsKLSAgICBzdGF0aWMgY29uc3Qg
UXVhbGlmaWVkTmFtZSYgbm9lbWJlZCgpOwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1l
JiBub2ZyYW1lcygpOwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBub3NjcmlwdCgp
OwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBvYmplY3QoKTsKLSAgICBzdGF0aWMg
Y29uc3QgUXVhbGlmaWVkTmFtZSYgb2woKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFt
ZSYgb3B0Z3JvdXAoKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgb3B0aW9uKCk7
Ci0gICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIHAoKTsKLSAgICBzdGF0aWMgY29uc3Qg
UXVhbGlmaWVkTmFtZSYgcGFyYW0oKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYg
cHJlKCk7Ci0gICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIHEoKTsKLSAgICBzdGF0aWMg
Y29uc3QgUXVhbGlmaWVkTmFtZSYgcygpOwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1l
JiBzYW1wKCk7Ci0gICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIHNjcmlwdCgpOwotICAg
IHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBzZWxlY3QoKTsKLSAgICBzdGF0aWMgY29uc3Qg
UXVhbGlmaWVkTmFtZSYgc21hbGwoKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYg
c3RyaWtlKCk7Ci0gICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIHN0cm9uZygpOwotICAg
IHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBzdHlsZSgpOwotICAgIHN0YXRpYyBjb25zdCBR
dWFsaWZpZWROYW1lJiB0YWJsZSgpOwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiB0
Ym9keSgpOwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiB0ZCgpOwotICAgIHN0YXRp
YyBjb25zdCBRdWFsaWZpZWROYW1lJiB0ZXh0YXJlYSgpOwotICAgIHN0YXRpYyBjb25zdCBRdWFs
aWZpZWROYW1lJiB0Zm9vdCgpOwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiB0aCgp
OwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiB0aGVhZCgpOwotICAgIHN0YXRpYyBj
b25zdCBRdWFsaWZpZWROYW1lJiB0aXRsZSgpOwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWRO
YW1lJiB0cigpOwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiB0dCgpOwotICAgIHN0
YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiB1KCk7Ci0gICAgc3RhdGljIGNvbnN0IFF1YWxpZmll
ZE5hbWUmIHVsKCk7Ci0gICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIHZhcigpOwotICAg
IHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiB4bXAoKTsKKy8vIEZ1bGwgdGFnIG5hbWVzLgor
I2RlZmluZSBERUZJTkVfR0VUVEVSKG5hbWUpIFwKKyAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVk
TmFtZSYgbmFtZSgpIHsgcmV0dXJuIG5hbWUgIyMgUU5hbWU7IH0KKworICAgIERFRklORV9HRVRU
RVIoYSkKKyAgICBERUZJTkVfR0VUVEVSKGFiYnIpCisgICAgREVGSU5FX0dFVFRFUihhY3Jvbnlt
KQorICAgIERFRklORV9HRVRURVIoYWRkcmVzcykKKyAgICBERUZJTkVfR0VUVEVSKGFwcGxldCkK
KyAgICBERUZJTkVfR0VUVEVSKGFyZWEpCisgICAgREVGSU5FX0dFVFRFUihiKQorICAgIERFRklO
RV9HRVRURVIoYmFzZSkKKyAgICBERUZJTkVfR0VUVEVSKGJhc2Vmb250KQorICAgIERFRklORV9H
RVRURVIoYmRvKQorICAgIERFRklORV9HRVRURVIoYmlnKQorICAgIERFRklORV9HRVRURVIoYmxv
Y2txdW90ZSkKKyAgICBERUZJTkVfR0VUVEVSKGJvZHkpCisgICAgREVGSU5FX0dFVFRFUihicikK
KyAgICBERUZJTkVfR0VUVEVSKGJ1dHRvbikKKyAgICBERUZJTkVfR0VUVEVSKGNhbnZhcykKKyAg
ICBERUZJTkVfR0VUVEVSKGNhcHRpb24pCisgICAgREVGSU5FX0dFVFRFUihjZW50ZXIpCisgICAg
REVGSU5FX0dFVFRFUihjaXRlKQorICAgIERFRklORV9HRVRURVIoY29kZSkKKyAgICBERUZJTkVf
R0VUVEVSKGNvbCkKKyAgICBERUZJTkVfR0VUVEVSKGNvbGdyb3VwKQorICAgIERFRklORV9HRVRU
RVIoZGQpCisgICAgREVGSU5FX0dFVFRFUihkZWwpCisgICAgREVGSU5FX0dFVFRFUihkZm4pCisg
ICAgREVGSU5FX0dFVFRFUihkaXIpCisgICAgREVGSU5FX0dFVFRFUihkaXYpCisgICAgREVGSU5F
X0dFVFRFUihkbCkKKyAgICBERUZJTkVfR0VUVEVSKGR0KQorICAgIERFRklORV9HRVRURVIoZW0p
CisgICAgREVGSU5FX0dFVFRFUihlbWJlZCkKKyAgICBERUZJTkVfR0VUVEVSKGZpZWxkc2V0KQor
ICAgIERFRklORV9HRVRURVIoZm9udCkKKyAgICBERUZJTkVfR0VUVEVSKGZvcm0pCisgICAgREVG
SU5FX0dFVFRFUihmcmFtZSkKKyAgICBERUZJTkVfR0VUVEVSKGZyYW1lc2V0KQorICAgIERFRklO
RV9HRVRURVIoaGVhZCkKKyAgICBERUZJTkVfR0VUVEVSKGgxKQorICAgIERFRklORV9HRVRURVIo
aDIpCisgICAgREVGSU5FX0dFVFRFUihoMykKKyAgICBERUZJTkVfR0VUVEVSKGg0KQorICAgIERF
RklORV9HRVRURVIoaDUpCisgICAgREVGSU5FX0dFVFRFUihoNikKKyAgICBERUZJTkVfR0VUVEVS
KGhyKQorICAgIERFRklORV9HRVRURVIoaHRtbCkKKyAgICBERUZJTkVfR0VUVEVSKGkpCisgICAg
REVGSU5FX0dFVFRFUihpZnJhbWUpCisgICAgREVGSU5FX0dFVFRFUihpbWcpCisgICAgREVGSU5F
X0dFVFRFUihpbnB1dCkKKyAgICBERUZJTkVfR0VUVEVSKGlucykKKyAgICBERUZJTkVfR0VUVEVS
KGlzaW5kZXgpCisgICAgREVGSU5FX0dFVFRFUihrYmQpCisgICAgREVGSU5FX0dFVFRFUihrZXln
ZW4pCisgICAgREVGSU5FX0dFVFRFUihsYWJlbCkKKyAgICBERUZJTkVfR0VUVEVSKGxheWVyKQor
ICAgIERFRklORV9HRVRURVIobGVnZW5kKQorICAgIERFRklORV9HRVRURVIobGkpCisgICAgREVG
SU5FX0dFVFRFUihsaW5rKQorICAgIERFRklORV9HRVRURVIobWFwKQorICAgIERFRklORV9HRVRU
RVIobWFycXVlZSkKKyAgICBERUZJTkVfR0VUVEVSKG1lbnUpCisgICAgREVGSU5FX0dFVFRFUiht
ZXRhKQorICAgIERFRklORV9HRVRURVIobm9icikKKyAgICBERUZJTkVfR0VUVEVSKG5vZW1iZWQp
CisgICAgREVGSU5FX0dFVFRFUihub2ZyYW1lcykKKyAgICBERUZJTkVfR0VUVEVSKG5vbGF5ZXIp
CisgICAgREVGSU5FX0dFVFRFUihub3NjcmlwdCkKKyAgICBERUZJTkVfR0VUVEVSKG9iamVjdCkK
KyAgICBERUZJTkVfR0VUVEVSKG9sKQorICAgIERFRklORV9HRVRURVIob3B0Z3JvdXApCisgICAg
REVGSU5FX0dFVFRFUihvcHRpb24pCisgICAgREVGSU5FX0dFVFRFUihwKQorICAgIERFRklORV9H
RVRURVIocGFyYW0pCisgICAgREVGSU5FX0dFVFRFUihwbGFpbnRleHQpCisgICAgREVGSU5FX0dF
VFRFUihwcmUpCisgICAgREVGSU5FX0dFVFRFUihxKQorICAgIERFRklORV9HRVRURVIocykKKyAg
ICBERUZJTkVfR0VUVEVSKHNhbXApCisgICAgREVGSU5FX0dFVFRFUihzY3JpcHQpCisgICAgREVG
SU5FX0dFVFRFUihzZWxlY3QpCisgICAgREVGSU5FX0dFVFRFUihzbWFsbCkKKyAgICBERUZJTkVf
R0VUVEVSKHNwYW4pCisgICAgREVGSU5FX0dFVFRFUihzdHJpa2UpCisgICAgREVGSU5FX0dFVFRF
UihzdHJvbmcpCisgICAgREVGSU5FX0dFVFRFUihzdHlsZSkKKyAgICBERUZJTkVfR0VUVEVSKHN1
YikKKyAgICBERUZJTkVfR0VUVEVSKHN1cCkKKyAgICBERUZJTkVfR0VUVEVSKHRhYmxlKQorICAg
IERFRklORV9HRVRURVIodGJvZHkpCisgICAgREVGSU5FX0dFVFRFUih0ZCkKKyAgICBERUZJTkVf
R0VUVEVSKHRleHRhcmVhKQorICAgIERFRklORV9HRVRURVIodGZvb3QpCisgICAgREVGSU5FX0dF
VFRFUih0aCkKKyAgICBERUZJTkVfR0VUVEVSKHRoZWFkKQorICAgIERFRklORV9HRVRURVIodGl0
bGUpCisgICAgREVGSU5FX0dFVFRFUih0cikKKyAgICBERUZJTkVfR0VUVEVSKHR0KQorICAgIERF
RklORV9HRVRURVIodSkKKyAgICBERUZJTkVfR0VUVEVSKHVsKQorICAgIERFRklORV9HRVRURVIo
dmFyKQorICAgIERFRklORV9HRVRURVIod2JyKQorICAgIERFRklORV9HRVRURVIoeG1wKQogCiAg
ICAgLy8gQXR0cmlidXRlIG5hbWVzLgorI2VuZGlmCisKKyAgICAvLyBJbml0IHJvdXRpbmUKKyAg
ICBzdGF0aWMgdm9pZCBpbml0KCk7CiB9OwogCiB9CkluZGV4OiBraHRtbC9odG1sL2h0bWxwYXJz
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwv
aHRtbHBhcnNlci5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuOTYKZGlmZiAtdSAtcCAtcjEu
OTYga2h0bWwvaHRtbC9odG1scGFyc2VyLmNwcAotLS0ga2h0bWwvaHRtbC9odG1scGFyc2VyLmNw
cAkxMSBNYXkgMjAwNSAwMDo1ODoyOCAtMDAwMAkxLjk2CisrKyBraHRtbC9odG1sL2h0bWxwYXJz
ZXIuY3BwCTcgSnVsIDIwMDUgMDU6NTk6MDYgLTAwMDAKQEAgLTQ0LDkgKzQ0LDEyIEBACiAjaW5j
bHVkZSAiaHRtbC9odG1sX21pc2NpbXBsLmgiCiAjaW5jbHVkZSAiaHRtbC9odG1sX3RhYmxlaW1w
bC5oIgogI2luY2x1ZGUgImh0bWwvaHRtbF9vYmplY3RpbXBsLmgiCisjaW5jbHVkZSAiaHRtbGZh
Y3RvcnkuaCIKICNpbmNsdWRlICJ4bWwvZG9tX3RleHRpbXBsLmgiCiAjaW5jbHVkZSAieG1sL2Rv
bV9ub2RlaW1wbC5oIgogI2luY2x1ZGUgIm1pc2MvaHRtbGhhc2hlcy5oIgorI2luY2x1ZGUgIm1p
c2MvbWFpbl90aHJlYWRfbWFsbG9jLmgiCisjaW5jbHVkZSAibWlzYy9oYXNoc2V0LmgiCiAjaW5j
bHVkZSAiaHRtbC9odG1sdG9rZW5pemVyLmgiCiAjaW5jbHVkZSAia2h0bWx2aWV3LmgiCiAjaW5j
bHVkZSAia2h0bWxfcGFydC5oIgpAQCAtNjksMjQgKzcyLDI2IEBAIHVzaW5nIG5hbWVzcGFjZSBr
aHRtbDsKIGNsYXNzIEhUTUxTdGFja0VsZW0KIHsKIHB1YmxpYzoKLSAgICBIVE1MU3RhY2tFbGVt
KCBpbnQgX2lkLAotICAgICAgICAgICAgICAgICAgIGludCBfbGV2ZWwsCi0gICAgICAgICAgICAg
ICAgICAgRE9NOjpOb2RlSW1wbCAqX25vZGUsCi0gICAgICAgICAgICAgICAgICAgSFRNTFN0YWNr
RWxlbSAqIF9uZXh0CisgICAgSFRNTFN0YWNrRWxlbShjb25zdCBBdG9taWNTdHJpbmcmIF90YWdO
YW1lLAorICAgICAgICAgICAgICAgICAgaW50IF9sZXZlbCwKKyAgICAgICAgICAgICAgICAgIERP
TTo6Tm9kZUltcGwgKl9ub2RlLAorICAgICAgICAgICAgICAgICAgSFRNTFN0YWNrRWxlbSAqIF9u
ZXh0CiAgICAgICAgICkKICAgICAgICAgOgotICAgICAgICBpZChfaWQpLAorICAgICAgICB0YWdO
YW1lKF90YWdOYW1lKSwKICAgICAgICAgbGV2ZWwoX2xldmVsKSwKICAgICAgICAgc3RyYXlUYWJs
ZUNvbnRlbnQoZmFsc2UpLAogICAgICAgICBub2RlKF9ub2RlKSwKICAgICAgICAgbmV4dChfbmV4
dCkKICAgICAgICAgeyB9CiAKLSAgICBpbnQgICAgICAgaWQ7Ci0gICAgaW50ICAgICAgIGxldmVs
OwotICAgIGJvb2wgICAgICBzdHJheVRhYmxlQ29udGVudDsKLSAgICBOb2RlSW1wbCAqbm9kZTsK
LSAgICBIVE1MU3RhY2tFbGVtICpuZXh0OworICAgIE1BSU5fVEhSRUFEX0FMTE9DQVRFRDsKKwor
ICAgIEF0b21pY1N0cmluZyB0YWdOYW1lOworICAgIGludCBsZXZlbDsKKyAgICBib29sIHN0cmF5
VGFibGVDb250ZW50OworICAgIE5vZGVJbXBsKiBub2RlOworICAgIEhUTUxTdGFja0VsZW0qIG5l
eHQ7CiB9OwogCiAvKioKQEAgLTExMiwxNCArMTE3LDkgQEAgcHVibGljOgogICogICAgZWxlbWVu
dCBvciBpZ25vcmUgdGhlIHRhZy4KICAqCiAgKi8KLUtIVE1MUGFyc2VyOjpLSFRNTFBhcnNlcihL
SFRNTFZpZXcgKl9wYXJlbnQsIERvY3VtZW50UHRyICpkb2MsIGJvb2wgaW5jbHVkZXNDb21tZW50
cykgCitIVE1MUGFyc2VyOjpIVE1MUGFyc2VyKEtIVE1MVmlldyAqX3BhcmVudCwgRG9jdW1lbnRQ
dHIgKmRvYywgYm9vbCBpbmNsdWRlc0NvbW1lbnRzKSAKICAgICA6IGN1cnJlbnQoMCksIGN1cnJl
bnRJc1JlZmVyZW5jZWQoZmFsc2UpLCBpbmNsdWRlc0NvbW1lbnRzSW5ET00oaW5jbHVkZXNDb21t
ZW50cykKIHsKLSAgICAvL2tkRGVidWcoIDYwMzUgKSA8PCAicGFyc2VyIGNvbnN0cnVjdG9yIiA8
PCBlbmRsOwotI2lmIFNQRUVEX0RFQlVHID4gMAotICAgIHF0LnN0YXJ0KCk7Ci0jZW5kaWYKLQog
ICAgIEhUTUxXaWRnZXQgICAgPSBfcGFyZW50OwogICAgIGRvY3VtZW50ICAgICAgPSBkb2M7CiAg
ICAgZG9jdW1lbnQtPnJlZigpOwpAQCAtMTI5LDcgKzEyOSw3IEBAIEtIVE1MUGFyc2VyOjpLSFRN
TFBhcnNlcihLSFRNTFZpZXcgKl9wYXIKICAgICByZXNldCgpOwogfQogCi1LSFRNTFBhcnNlcjo6
S0hUTUxQYXJzZXIoRE9NOjpEb2N1bWVudEZyYWdtZW50SW1wbCAqaSwgRG9jdW1lbnRQdHIgKmRv
YywgYm9vbCBpbmNsdWRlc0NvbW1lbnRzKQorSFRNTFBhcnNlcjo6SFRNTFBhcnNlcihET006OkRv
Y3VtZW50RnJhZ21lbnRJbXBsICppLCBEb2N1bWVudFB0ciAqZG9jLCBib29sIGluY2x1ZGVzQ29t
bWVudHMpCiAgICAgOiBjdXJyZW50KDApLCBjdXJyZW50SXNSZWZlcmVuY2VkKGZhbHNlKSwgaW5j
bHVkZXNDb21tZW50c0luRE9NKGluY2x1ZGVzQ29tbWVudHMpCiB7CiAgICAgSFRNTFdpZGdldCA9
IDA7CkBAIC0xNDMsMTIgKzE0Myw4IEBAIEtIVE1MUGFyc2VyOjpLSFRNTFBhcnNlcihET006OkRv
Y3VtZW50RnIKICAgICBpbkJvZHkgPSB0cnVlOwogfQogCi1LSFRNTFBhcnNlcjo6fktIVE1MUGFy
c2VyKCkKK0hUTUxQYXJzZXI6On5IVE1MUGFyc2VyKCkKIHsKLSNpZiBTUEVFRF9ERUJVRyA+IDAK
LSAgICBrZERlYnVnKCApIDw8ICJUSU1FOiBwYXJzaW5nIHRpbWUgd2FzID0gIiA8PCBxdC5lbGFw
c2VkKCkgPDwgZW5kbDsKLSNlbmRpZgotCiAgICAgZnJlZUJsb2NrKCk7CiAKICAgICBzZXRDdXJy
ZW50KDApOwpAQCAtMTU5LDE1ICsxNTUsMTIgQEAgS0hUTUxQYXJzZXI6On5LSFRNTFBhcnNlcigp
CiAgICAgICAgIGlzaW5kZXgtPmRlcmVmKCk7CiB9CiAKLXZvaWQgS0hUTUxQYXJzZXI6OnJlc2V0
KCkKK3ZvaWQgSFRNTFBhcnNlcjo6cmVzZXQoKQogewogICAgIHNldEN1cnJlbnQoZG9jKCkpOwog
CiAgICAgZnJlZUJsb2NrKCk7CiAKLSAgICAvLyBiZWZvcmUgcGFyc2luZywgbm8gdGFncyBhcmUg
Zm9yYmlkZGVuCi0gICAgbWVtc2V0KGZvcmJpZGRlblRhZywgMCwgc2l6ZW9mKGZvcmJpZGRlblRh
ZykpOwotCiAgICAgaW5Cb2R5ID0gZmFsc2U7CiAgICAgaGF2ZUZyYW1lU2V0ID0gZmFsc2U7CiAg
ICAgaGF2ZUNvbnRlbnQgPSBmYWxzZTsKQEAgLTE4MCwxMCArMTczLDEwIEBAIHZvaWQgS0hUTUxQ
YXJzZXI6OnJlc2V0KCkKICAgICBlbmQgPSBmYWxzZTsKICAgICBpc2luZGV4ID0gMDsKICAgICAK
LSAgICBkaXNjYXJkX3VudGlsID0gMDsKKyAgICBkaXNjYXJkX3VudGlsID0gbnVsbEF0b207CiB9
CiAKLXZvaWQgS0hUTUxQYXJzZXI6OnNldEN1cnJlbnQoRE9NOjpOb2RlSW1wbCAqbmV3Q3VycmVu
dCkgCit2b2lkIEhUTUxQYXJzZXI6OnNldEN1cnJlbnQoRE9NOjpOb2RlSW1wbCAqbmV3Q3VycmVu
dCkgCiB7CiAgICAgYm9vbCBuZXdDdXJyZW50SXNSZWZlcmVuY2VkID0gbmV3Q3VycmVudCAmJiBu
ZXdDdXJyZW50ICE9IGRvYygpOwogICAgIGlmIChuZXdDdXJyZW50SXNSZWZlcmVuY2VkKSAKQEAg
LTE5NCwxNDQgKzE4NywxMDggQEAgdm9pZCBLSFRNTFBhcnNlcjo6c2V0Q3VycmVudChET006Ok5v
ZGVJbQogICAgIGN1cnJlbnRJc1JlZmVyZW5jZWQgPSBuZXdDdXJyZW50SXNSZWZlcmVuY2VkOwog
fQogCi12b2lkIEtIVE1MUGFyc2VyOjpwYXJzZVRva2VuKFRva2VuICp0KQordm9pZCBIVE1MUGFy
c2VyOjpwYXJzZVRva2VuKFRva2VuICp0KQogewotICAgIGlmKGRpc2NhcmRfdW50aWwpIHsKLSAg
ICAgICAgaWYodC0+aWQgPT0gZGlzY2FyZF91bnRpbCkKLSAgICAgICAgICAgIGRpc2NhcmRfdW50
aWwgPSAwOworICAgIGlmICghZGlzY2FyZF91bnRpbC5pc051bGwoKSkgeworICAgICAgICBpZiAo
dC0+dGFnTmFtZSA9PSBkaXNjYXJkX3VudGlsICYmICF0LT5iZWdpblRhZykKKyAgICAgICAgICAg
IGRpc2NhcmRfdW50aWwgPSBudWxsQXRvbTsKIAogICAgICAgICAvLyBkbyBub3Qgc2tpcCA8L2lm
cmFtZT4KLSAgICAgICAgaWYgKCBkaXNjYXJkX3VudGlsIHx8IGN1cnJlbnQtPmlkKCkgKyBJRF9D
TE9TRV9UQUcgIT0gdC0+aWQgKQorICAgICAgICBpZiAoIWRpc2NhcmRfdW50aWwuaXNOdWxsKCkg
fHwgKGN1cnJlbnQtPmxvY2FsTmFtZSgpICE9IHQtPnRhZ05hbWUpKQogICAgICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotI2lmZGVmIFBBUlNFUl9ERUJVRwotICAgIGtkRGVidWcoIDYwMzUgKSA8
PCAiXG5cbj09PiBwYXJzZXI6IHByb2Nlc3NpbmcgdG9rZW4gIiA8PCBnZXRUYWdOYW1lKHQtPmlk
KS5zdHJpbmcoKSA8PCAiKCIgPDwgdC0+aWQgPDwgIikiCi0gICAgICAgICAgICAgICAgICAgIDw8
ICIgY3VycmVudCA9ICIgPDwgZ2V0VGFnTmFtZShjdXJyZW50LT5pZCgpKS5zdHJpbmcoKSA8PCAi
KCIgPDwgY3VycmVudC0+aWQoKSA8PCAiKSIgPDwgZW5kbDsKLSAgICBrZERlYnVnKDYwMzUpIDw8
ICIgaW5Cb2R5PSIgPDwgaW5Cb2R5IDw8ICIgaGF2ZUZyYW1lU2V0PSIgPDwgaGF2ZUZyYW1lU2V0
IDw8IGVuZGw7Ci0jZW5kaWYKLQotICAgIC8vIGhvbHkgc2hpdC4gYXBwYXJlbnRseSBzb21lIHNp
dGVzIHVzZSA8L2JyPiBpbnN0ZWFkIG9mIDxicj4KLSAgICAvLyBiZSBjb21wYXRpYmxlIHdpdGgg
SUUgYW5kIE5TCi0gICAgaWYgKHQtPmlkID09IElEX0JSICsgSURfQ0xPU0VfVEFHICYmIGRvYygp
LT5pbkNvbXBhdE1vZGUoKSkKLSAgICAgICAgdC0+aWQgPSBJRF9CUjsKKyAgICAvLyBBcHBhcmVu
dGx5IHNvbWUgc2l0ZXMgdXNlIDwvYnI+IGluc3RlYWQgb2YgPGJyPi4gIEJlIGNvbXBhdGlibGUg
d2l0aCBJRSBhbmQgRmlyZWZveCBhbmQgdHJlYXQgdGhpcyBsaWtlIDxicj4uCisgICAgaWYgKHQt
PmlzQ2xvc2VUYWcoSFRNTE5hbWVzOjpicigpKSAmJiBkb2MoKS0+aW5Db21wYXRNb2RlKCkpCisg
ICAgICAgIHQtPmJlZ2luVGFnID0gdHJ1ZTsKIAotICAgIGlmICh0LT5pZCA+IElEX0NMT1NFX1RB
RykKLSAgICB7CisgICAgaWYgKCF0LT5iZWdpblRhZykgewogICAgICAgICBwcm9jZXNzQ2xvc2VU
YWcodCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICAvLyBpZ25vcmUgc3BhY2VzLCBp
ZiB3ZSdyZSBub3QgaW5zaWRlIGEgcGFyYWdyYXBoIG9yIG90aGVyIGlubGluZSBjb2RlCi0gICAg
aWYoIHQtPmlkID09IElEX1RFWFQgJiYgdC0+dGV4dCApIHsKLSAgICAgICAgaWYoaW5Cb2R5ICYm
ICFza2lwTW9kZSgpICYmIGN1cnJlbnQtPmlkKCkgIT0gSURfU1RZTEUgCi0gICAgICAgICAgICAm
JiBjdXJyZW50LT5pZCgpICE9IElEX1RJVExFICYmIGN1cnJlbnQtPmlkKCkgIT0gSURfU0NSSVBU
ICYmCi0gICAgICAgICAgICAhdC0+dGV4dC0+Y29udGFpbnNPbmx5V2hpdGVzcGFjZSgpKSAKKyAg
ICBpZiAodC0+dGFnTmFtZSA9PSB0ZXh0QXRvbSAmJiB0LT50ZXh0KSB7CisgICAgICAgIGlmIChp
bkJvZHkgJiYgIXNraXBNb2RlKCkgJiYgY3VycmVudC0+bG9jYWxOYW1lKCkgIT0gSFRNTE5hbWVz
OjpzdHlsZSgpICYmIGN1cnJlbnQtPmxvY2FsTmFtZSgpICE9IEhUTUxOYW1lczo6dGl0bGUoKSAm
JiAKKyAgICAgICAgICAgIGN1cnJlbnQtPmxvY2FsTmFtZSgpICE9IEhUTUxOYW1lczo6c2NyaXB0
KCkgJiYgIXQtPnRleHQtPmNvbnRhaW5zT25seVdoaXRlc3BhY2UoKSkgCiAgICAgICAgICAgICBo
YXZlQ29udGVudCA9IHRydWU7Ci0jaWZkZWYgUEFSU0VSX0RFQlVHCi0gICAgICAgIGtkRGVidWco
NjAzNSkgPDwgImxlbmd0aD0iPDwgdC0+dGV4dC0+bCA8PCAiIHRleHQ9JyIgPDwgUUNvbnN0U3Ry
aW5nKHQtPnRleHQtPnMsIHQtPnRleHQtPmwpLnN0cmluZygpIDw8ICInIiA8PCBlbmRsOwotI2Vu
ZGlmCiAgICAgfQogCi0gICAgTm9kZUltcGwgKm4gPSBnZXRFbGVtZW50KHQpOworICAgIE5vZGVJ
bXBsICpuID0gZ2V0Tm9kZSh0KTsKICAgICAvLyBqdXN0IHRvIGJlIHN1cmUsIGFuZCB0byBjYXRj
aCBjdXJyZW50bHkgdW5pbXBsZW1lbnRlZCBzdHVmZgotICAgIGlmKCFuKQorICAgIGlmICghbikK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgU2hhcmVkUHRyPE5vZGVJbXBsPiBwcm90ZWN0Tm9kZShu
KTsKIAogICAgIC8vIHNldCBhdHRyaWJ1dGVzCi0gICAgaWYobi0+aXNFbGVtZW50Tm9kZSgpKQot
ICAgIHsKLSAgICAgICAgRWxlbWVudEltcGwgKmUgPSBzdGF0aWNfY2FzdDxFbGVtZW50SW1wbCAq
PihuKTsKKyAgICBpZiAobi0+aXNIVE1MRWxlbWVudCgpKSB7CisgICAgICAgIEhUTUxFbGVtZW50
SW1wbCAqZSA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCo+KG4pOwogICAgICAgICBlLT5z
ZXRBdHRyaWJ1dGVNYXAodC0+YXR0cnMpOwogCiAgICAgICAgIC8vIHRha2UgY2FyZSBvZiBvcHRp
b25hbCBjbG9zZSB0YWdzCi0gICAgICAgIGlmKGVuZFRhZ1JlcXVpcmVtZW50KGUtPmlkKCkpID09
IERPTTo6T1BUSU9OQUwpCi0gICAgICAgICAgICBwb3BCbG9jayh0LT5pZCk7CisgICAgICAgIGlm
IChlLT5lbmRUYWdSZXF1aXJlbWVudCgpID09IFRhZ1N0YXR1c09wdGlvbmFsKQorICAgICAgICAg
ICAgcG9wQmxvY2sodC0+dGFnTmFtZSk7CiAgICAgICAgICAgICAKLSAgICAgICAgaWYgKGlzSGVh
ZGVyVGFnKHQtPmlkKSkKKyAgICAgICAgaWYgKGlzSGVhZGVyVGFnKHQtPnRhZ05hbWUpKQogICAg
ICAgICAgICAgLy8gRG8gbm90IGFsbG93IHR3byBoZWFkZXIgdGFncyB0byBiZSBuZXN0ZWQgaWYg
dGhlIGludGVydmVuaW5nIHRhZ3MgYXJlIGlubGluZXMuCiAgICAgICAgICAgICBwb3BOZXN0ZWRI
ZWFkZXJUYWcoKTsKICAgICB9CiAKLSAgICAvLyBpZiB0aGlzIHRhZyBpcyBmb3JiaWRkZW4gaW5z
aWRlIHRoZSBjdXJyZW50IGNvbnRleHQsIHBvcAotICAgIC8vIGJsb2NrcyB1bnRpbCB3ZSBhcmUg
YWxsb3dlZCB0byBhZGQgaXQuLi4KLSAgICB3aGlsZSAoYmxvY2tTdGFjayAmJiB0LT5pZCA8PSBJ
RF9MQVNUX1RBRyAmJiBmb3JiaWRkZW5UYWdbdC0+aWRdKSB7Ci0jaWZkZWYgUEFSU0VSX0RFQlVH
Ci0gICAgICAgIGtkRGVidWcoIDYwMzUgKSA8PCAidC0+aWQ6ICIgPDwgdC0+aWQgPDwgIiBpcyBm
b3JiaWRkZW4gOi0oICIgPDwgZW5kbDsKLSNlbmRpZgotICAgICAgICBwb3BPbmVCbG9jaygpOwot
ICAgIH0KLQotICAgIGlmICghaW5zZXJ0Tm9kZShuLCB0LT5mbGF0KSkgCi0gICAgeworICAgIGlm
ICghaW5zZXJ0Tm9kZShuLCB0LT5mbGF0KSkgewogICAgICAgICAvLyB3ZSBjb3VsZG4ndCBpbnNl
cnQgdGhlIG5vZGUuLi4KLSAgICAgICAgCi0gICAgICAgIGlmKG4tPmlzRWxlbWVudE5vZGUoKSkK
LSAgICAgICAgewotICAgICAgICAgICAgRWxlbWVudEltcGwgKmUgPSBzdGF0aWNfY2FzdDxFbGVt
ZW50SW1wbCAqPihuKTsKKyAgICAgICAgaWYgKG4tPmlzRWxlbWVudE5vZGUoKSkgeworICAgICAg
ICAgICAgRWxlbWVudEltcGwqIGUgPSBzdGF0aWNfY2FzdDxFbGVtZW50SW1wbCo+KG4pOwogICAg
ICAgICAgICAgZS0+c2V0QXR0cmlidXRlTWFwKDApOwogICAgICAgICB9CiAgICAgICAgICAgICAK
LSNpZmRlZiBQQVJTRVJfREVCVUcKLSAgICAgICAga2REZWJ1ZyggNjAzNSApIDw8ICJpbnNlcnRO
b2RlIGZhaWxlZCBjdXJyZW50PSIgPDwgY3VycmVudC0+aWQoKSA8PCAiLCBuZXc9IiA8PCBuLT5p
ZCgpIDw8ICIhIiA8PCBlbmRsOwotI2VuZGlmCiAgICAgICAgIGlmIChtYXAgPT0gbikKLSAgICAg
ICAgewotI2lmZGVmIFBBUlNFUl9ERUJVRwotICAgICAgICAgICAga2REZWJ1ZyggNjAzNSApIDw8
ICIgIC0tPiByZXNldHRpbmcgbWFwISIgPDwgZW5kbDsKLSNlbmRpZgogICAgICAgICAgICAgbWFw
ID0gMDsKLSAgICAgICAgfQorCiAgICAgICAgIGlmIChmb3JtID09IG4pCi0gICAgICAgIHsKLSNp
ZmRlZiBQQVJTRVJfREVCVUcKLSAgICAgICAgICAgIGtkRGVidWcoIDYwMzUgKSA8PCAiICAgLS0+
IHJlc2V0dGluZyBmb3JtISIgPDwgZW5kbDsKLSNlbmRpZgogICAgICAgICAgICAgZm9ybSA9IDA7
Ci0gICAgICAgIH0KICAgICB9CiB9CiAKLXN0YXRpYyBib29sIGlzVGFibGVSZWxhdGVkVGFnKGlu
dCBpZCkKK3N0YXRpYyBib29sIGlzVGFibGVTZWN0aW9uKE5vZGVJbXBsKiBuKQogewotICAgIHJl
dHVybiAoaWQgPT0gSURfVFIgfHwgaWQgPT0gSURfVEQgfHwgaWQgPT0gSURfVEFCTEUgfHwgaWQg
PT0gSURfVEJPRFkgfHwgaWQgPT0gSURfVEZPT1QgfHwgaWQgPT0gSURfVEhFQUQgfHwKLSAgICAg
ICAgICAgIGlkID09IElEX1RIKTsKKyAgICByZXR1cm4gbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
OnRib2R5KCkpIHx8IG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0Zm9vdCgpKSB8fCBuLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6dGhlYWQoKSk7CiB9CiAKLWJvb2wgS0hUTUxQYXJzZXI6Omluc2Vy
dE5vZGUoTm9kZUltcGwgKm4sIGJvb2wgZmxhdCkKK3N0YXRpYyBib29sIGlzVGFibGVQYXJ0KE5v
ZGVJbXBsKiBuKQogewotICAgIFNoYXJlZFB0cjxOb2RlSW1wbD4gcHJvdGVjdE5vZGUobik7Cisg
ICAgcmV0dXJuIG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0cigpKSB8fCBuLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6dGQoKSkgfHwgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRoKCkpIHx8Cisg
ICAgICAgICAgIGlzVGFibGVTZWN0aW9uKG4pOworfQogCi0gICAgaW50IGlkID0gbi0+aWQoKTsK
K3N0YXRpYyBib29sIGlzVGFibGVSZWxhdGVkKE5vZGVJbXBsKiBuKQoreworICAgIHJldHVybiBu
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGFibGUoKSkgfHwgaXNUYWJsZVBhcnQobik7Cit9CisK
K2Jvb2wgSFRNTFBhcnNlcjo6aW5zZXJ0Tm9kZShOb2RlSW1wbCAqbiwgYm9vbCBmbGF0KQorewor
ICAgIFNoYXJlZFB0cjxOb2RlSW1wbD4gcHJvdGVjdE5vZGUobik7CiAKKyAgICBjb25zdCBBdG9t
aWNTdHJpbmcmIGxvY2FsTmFtZSA9IG4tPmxvY2FsTmFtZSgpOworICAgIGludCB0YWdQcmlvcml0
eSA9IG4tPmlzSFRNTEVsZW1lbnQoKSA/IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCo+KG4p
LT50YWdQcmlvcml0eSgpIDogMDsKKyAgICAgICAgCiAgICAgLy8gbGV0J3MgYmUgc3R1cGlkIGFu
ZCBqdXN0IHRyeSB0byBpbnNlcnQgaXQuCi0gICAgLy8gdGhpcyBzaG91bGQgd29yayBpZiB0aGUg
ZG9jdW1lbnQgaXMgd2VsbGZvcm1lZAotI2lmZGVmIFBBUlNFUl9ERUJVRwotICAgIE5vZGVJbXBs
ICp0bXAgPSBjdXJyZW50OwotI2VuZGlmCisgICAgLy8gdGhpcyBzaG91bGQgd29yayBpZiB0aGUg
ZG9jdW1lbnQgaXMgd2VsbC1mb3JtZWQKICAgICBOb2RlSW1wbCAqbmV3Tm9kZSA9IGN1cnJlbnQt
PmFkZENoaWxkKG4pOwotICAgIGlmICggbmV3Tm9kZSApIHsKLSNpZmRlZiBQQVJTRVJfREVCVUcK
LSAgICAgICAga2REZWJ1ZyggNjAzNSApIDw8ICJhZGRlZCAiIDw8IG4tPm5vZGVOYW1lKCkuc3Ry
aW5nKCkgPDwgIiB0byAiIDw8IHRtcC0+bm9kZU5hbWUoKS5zdHJpbmcoKSA8PCAiLCBuZXcgY3Vy
cmVudD0iIDw8IG5ld05vZGUtPm5vZGVOYW1lKCkuc3RyaW5nKCkgPDwgZW5kbDsKLSNlbmRpZgot
ICAgICAgICAvLyBkb24ndCBwdXNoIGVsZW1lbnRzIHdpdGhvdXQgZW5kIHRhZyBvbiB0aGUgc3Rh
Y2sKLSAgICAgICAgaWYodGFnUHJpb3JpdHkoaWQpICE9IDAgJiYgIWZsYXQpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHB1c2hCbG9jayhpZCwgdGFnUHJpb3JpdHkoaWQpKTsKKyAgICBpZiAobmV3
Tm9kZSkgeworICAgICAgICAvLyBkb24ndCBwdXNoIGVsZW1lbnRzIHdpdGhvdXQgZW5kIHRhZ3Mg
KGUuZy4sIDxpbWc+KSBvbiB0aGUgc3RhY2sKKyAgICAgICAgaWYgKHRhZ1ByaW9yaXR5ID4gMCAm
JiAhZmxhdCkgeworICAgICAgICAgICAgcHVzaEJsb2NrKGxvY2FsTmFtZSwgdGFnUHJpb3JpdHkp
OwogICAgICAgICAgICAgaWYgKG5ld05vZGUgPT0gY3VycmVudCkKLSAgICAgICAgICAgICAgICBw
b3BCbG9jayhpZCk7CisgICAgICAgICAgICAgICAgcG9wQmxvY2sobG9jYWxOYW1lKTsKICAgICAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBzZXRDdXJyZW50KG5ld05vZGUpOwotI2lmIFNQ
RUVEX0RFQlVHIDwgMgotICAgICAgICAgICAgaWYoIW4tPmF0dGFjaGVkKCkgJiYgSFRNTFdpZGdl
dCkKKyAgICAgICAgICAgIGlmICghbi0+YXR0YWNoZWQoKSAmJiBIVE1MV2lkZ2V0KQogICAgICAg
ICAgICAgICAgIG4tPmF0dGFjaCgpOwotI2VuZGlmCiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7
Ci0jaWYgU1BFRURfREVCVUcgPCAyCi0gICAgICAgICAgICBpZighbi0+YXR0YWNoZWQoKSAmJiBI
VE1MV2lkZ2V0KQorICAgICAgICAgICAgaWYgKCFuLT5hdHRhY2hlZCgpICYmIEhUTUxXaWRnZXQp
CiAgICAgICAgICAgICAgICAgbi0+YXR0YWNoKCk7CiAgICAgICAgICAgICBpZiAobi0+bWFpbnRh
aW5zU3RhdGUoKSkgewogICAgICAgICAgICAgICAgIGRvYygpLT5yZWdpc3Rlck1haW50YWluc1N0
YXRlKG4pOwpAQCAtMzQwLDEwNCArMjk3LDg2IEBAIGJvb2wgS0hUTUxQYXJzZXI6Omluc2VydE5v
ZGUoTm9kZUltcGwgKm4KICAgICAgICAgICAgICAgICAgICAgbi0+cmVzdG9yZVN0YXRlKHN0YXRl
cyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBuLT5jbG9zZVJlbmRlcmVyKCk7Ci0jZW5k
aWYKICAgICAgICAgfQogCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0gZWxzZSB7Ci0jaWZk
ZWYgUEFSU0VSX0RFQlVHCi0gICAgICAgIGtkRGVidWcoIDYwMzUgKSA8PCAiQURESU5HIE5PREUg
RkFJTEVEISEhISBjdXJyZW50ID0gIiA8PCBjdXJyZW50LT5ub2RlTmFtZSgpLnN0cmluZygpIDw8
ICIsIG5ldyA9ICIgPDwgbi0+bm9kZU5hbWUoKS5zdHJpbmcoKSA8PCBlbmRsOwotI2VuZGlmCi0g
ICAgICAgIC8vIGVycm9yIGhhbmRsaW5nLi4uCi0gICAgICAgIEhUTUxFbGVtZW50SW1wbCAqZTsK
LSAgICAgICAgYm9vbCBoYW5kbGVkID0gZmFsc2U7Ci0KLSAgICAgICAgLy8gc3dpdGNoIGFjY29y
ZGluZyB0byB0aGUgZWxlbWVudCB0byBpbnNlcnQKLSAgICAgICAgc3dpdGNoKGlkKQotICAgICAg
ICB7Ci0gICAgICAgIGNhc2UgSURfVFI6Ci0gICAgICAgIGNhc2UgSURfVEg6Ci0gICAgICAgIGNh
c2UgSURfVEQ6Ci0gICAgICAgICAgICBpZiAoaW5TdHJheVRhYmxlQ29udGVudCAmJiAhaXNUYWJs
ZVJlbGF0ZWRUYWcoY3VycmVudC0+aWQoKSkpIHsKKyAgICB9IGVsc2UKKyAgICAgICAgcmV0dXJu
IGhhbmRsZUVycm9yKG4sIGZsYXQsIGxvY2FsTmFtZSwgdGFnUHJpb3JpdHkpOyAvLyBUcnkgdG8g
aGFuZGxlIHRoZSBlcnJvci4KK30KKworYm9vbCBIVE1MUGFyc2VyOjpoYW5kbGVFcnJvcihOb2Rl
SW1wbCogbiwgYm9vbCBmbGF0LCBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSwgaW50IHRh
Z1ByaW9yaXR5KQoreworICAgIC8vIEVycm9yIGhhbmRsaW5nIGNvZGUuICBUaGlzIGlzIGp1c3Qg
YWQgaG9jIGhhbmRsaW5nIG9mIHNwZWNpZmljIHBhcmVudC9jaGlsZCBjb21iaW5hdGlvbnMuCisg
ICAgSFRNTEVsZW1lbnRJbXBsICplOworICAgIGJvb2wgaGFuZGxlZCA9IGZhbHNlOworCisgICAg
Ly8gMS4gQ2hlY2sgb3V0IHRoZSBlbGVtZW50J3MgdGFnIG5hbWUgdG8gZGVjaWRlIGhvdyB0byBk
ZWFsIHdpdGggZXJyb3JzLgorICAgIGlmIChuLT5pc1RleHROb2RlKCkpIHsKKyAgICAgICAgaWYg
KGN1cnJlbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzZWxlY3QoKSkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfSBlbHNlIGlmIChuLT5pc0hUTUxFbGVtZW50KCkpIHsKKyAgICAg
ICAgSFRNTEVsZW1lbnRJbXBsKiBoID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsKj4obik7
CisgICAgICAgIGlmIChoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0cigpKSB8fCBoLT5oYXNM
b2NhbE5hbWUoSFRNTE5hbWVzOjp0aCgpKSB8fAorICAgICAgICAgICAgaC0+aGFzTG9jYWxOYW1l
KEhUTUxOYW1lczo6dGQoKSkpIHsKKyAgICAgICAgICAgIGlmIChpblN0cmF5VGFibGVDb250ZW50
ICYmICFpc1RhYmxlUmVsYXRlZChjdXJyZW50KSkgewogICAgICAgICAgICAgICAgIC8vIHBvcCBv
dXQgdG8gdGhlIG5lYXJlc3QgZW5jbG9zaW5nIHRhYmxlLXJlbGF0ZWQgdGFnLgotICAgICAgICAg
ICAgICAgIHdoaWxlIChibG9ja1N0YWNrICYmICFpc1RhYmxlUmVsYXRlZFRhZyhjdXJyZW50LT5p
ZCgpKSkKKyAgICAgICAgICAgICAgICB3aGlsZSAoYmxvY2tTdGFjayAmJiAhaXNUYWJsZVJlbGF0
ZWQoY3VycmVudCkpCiAgICAgICAgICAgICAgICAgICAgIHBvcE9uZUJsb2NrKCk7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGluc2VydE5vZGUobik7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBJRF9DT01NRU5UOgotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgSURfSEVBRDoKLSAgICAgICAgICAgIC8vICMjIyBhbGxsb3cgbm90IGhhdmlu
ZyA8SFRNTD4gaW4gYXQgYWxsLCBhcyBwZXIgSFRNTCBzcGVjCi0gICAgICAgICAgICBpZiAoIWN1
cnJlbnQtPmlzRG9jdW1lbnROb2RlKCkgJiYgY3VycmVudC0+aWQoKSAhPSBJRF9IVE1MICkKKyAg
ICAgICAgfSBlbHNlIGlmIChoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpoZWFkKCkpKSB7Cisg
ICAgICAgICAgICBpZiAoIWN1cnJlbnQtPmlzRG9jdW1lbnROb2RlKCkgJiYgIWN1cnJlbnQtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjpodG1sKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgLy8gV2UgY2FuIGRlYWwgd2l0aCBh
IGJhc2UsIG1ldGEgYW5kIGxpbmsgZWxlbWVudCBpbiB0aGUgYm9keSwgYnkganVzdCBhZGRpbmcg
dGhlIGVsZW1lbnQgdG8gaGVhZC4KLSAgICAgICAgY2FzZSBJRF9NRVRBOgotICAgICAgICBjYXNl
IElEX0xJTks6Ci0gICAgICAgIGNhc2UgSURfQkFTRToKLSAgICAgICAgICAgIGlmKCAhaGVhZCAp
CisgICAgICAgIH0gZWxzZSBpZiAoaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6bWV0YSgpKSB8
fCBoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpsaW5rKCkpIHx8IGgtPmhhc0xvY2FsTmFtZShI
VE1MTmFtZXM6OmJhc2UoKSkpIHsKKyAgICAgICAgICAgIGlmICghaGVhZCkKICAgICAgICAgICAg
ICAgICBjcmVhdGVIZWFkKCk7Ci0gICAgICAgICAgICBpZiggaGVhZCApIHsKLSAgICAgICAgICAg
ICAgICBpZiAoIGhlYWQtPmFkZENoaWxkKG4pICkgewotI2lmIFNQRUVEX0RFQlVHIDwgMgotICAg
ICAgICAgICAgICAgICAgICBpZighbi0+YXR0YWNoZWQoKSAmJiBIVE1MV2lkZ2V0KQorICAgICAg
ICAgICAgaWYgKGhlYWQpIHsKKyAgICAgICAgICAgICAgICBpZiAoaGVhZC0+YWRkQ2hpbGQobikp
IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFuLT5hdHRhY2hlZCgpICYmIEhUTUxXaWRnZXQp
CiAgICAgICAgICAgICAgICAgICAgICAgICBuLT5hdHRhY2goKTsKLSNlbmRpZgogICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQkJfSBlbHNlIHsKLQkJICAgIHJldHVybiBmYWxzZTsK
LQkJfQorICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJ
RF9IVE1MOgorICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Omh0
bWwoKSkpIHsKICAgICAgICAgICAgIGlmICghY3VycmVudC0+aXNEb2N1bWVudE5vZGUoKSApIHsK
LQkJaWYgKCBkb2MoKS0+Zmlyc3RDaGlsZCgpLT5pZCgpID09IElEX0hUTUwpIHsKLQkJICAgIC8v
IHdlIGhhdmUgYW5vdGhlciA8SFRNTD4gZWxlbWVudC4uLi4gYXBwbHkgYXR0cmlidXRlcyB0byBl
eGlzdGluZyBvbmUKLQkJICAgIC8vIG1ha2Ugc3VyZSB3ZSBkb24ndCBvdmVyd3JpdGUgYWxyZWFk
eSBleGlzdGluZyBhdHRyaWJ1dGVzCi0JCSAgICBOYW1lZEF0dHJNYXBJbXBsICptYXAgPSBzdGF0
aWNfY2FzdDxFbGVtZW50SW1wbCo+KG4pLT5hdHRyaWJ1dGVzKHRydWUpOwotCQkgICAgTmFtZWRB
dHRyTWFwSW1wbCAqYm1hcCA9IHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsKj4oZG9jKCktPmZpcnN0
Q2hpbGQoKSktPmF0dHJpYnV0ZXMoZmFsc2UpOwotCQkgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7
Ci0JCSAgICBmb3IgKHVuc2lnbmVkIGxvbmcgbCA9IDA7IG1hcCAmJiBsIDwgbWFwLT5sZW5ndGgo
KTsgKytsKSB7Ci0JCQlBdHRyaWJ1dGVJbXBsKiBpdCA9IG1hcC0+YXR0cmlidXRlSXRlbShsKTsK
LQkJCWNoYW5nZWQgPSAhYm1hcC0+Z2V0QXR0cmlidXRlSXRlbShpdC0+aWQoKSk7Ci0JCQlibWFw
LT5pbnNlcnRBdHRyaWJ1dGUoaXQtPmNsb25lKGZhbHNlKSk7Ci0JCSAgICB9Ci0JCSAgICBpZiAo
IGNoYW5nZWQgKQotCQkJZG9jKCktPnJlY2FsY1N0eWxlKCBOb2RlSW1wbDo6SW5oZXJpdCApOwot
CQl9CisgICAgICAgICAgICAgICAgaWYgKGRvYygpLT5maXJzdENoaWxkKCktPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjpodG1sKCkpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIHdlIGhhdmUgYW5v
dGhlciA8SFRNTD4gZWxlbWVudC4uLi4gYXBwbHkgYXR0cmlidXRlcyB0byBleGlzdGluZyBvbmUK
KyAgICAgICAgICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHdlIGRvbid0IG92ZXJ3cml0ZSBhbHJl
YWR5IGV4aXN0aW5nIGF0dHJpYnV0ZXMKKyAgICAgICAgICAgICAgICAgICAgTmFtZWRBdHRyTWFw
SW1wbCAqbWFwID0gc3RhdGljX2Nhc3Q8RWxlbWVudEltcGwqPihuKS0+YXR0cmlidXRlcyh0cnVl
KTsKKyAgICAgICAgICAgICAgICAgICAgTmFtZWRBdHRyTWFwSW1wbCAqYm1hcCA9IHN0YXRpY19j
YXN0PEVsZW1lbnRJbXBsKj4oZG9jKCktPmZpcnN0Q2hpbGQoKSktPmF0dHJpYnV0ZXMoZmFsc2Up
OworICAgICAgICAgICAgICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBsb25nIGwgPSAwOyBtYXAgJiYgbCA8IG1hcC0+bGVuZ3Ro
KCk7ICsrbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgQXR0cmlidXRlSW1wbCogaXQgPSBt
YXAtPmF0dHJpYnV0ZUl0ZW0obCk7CisgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0g
IWJtYXAtPmdldEF0dHJpYnV0ZUl0ZW0oaXQtPmlkKCkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgYm1hcC0+aW5zZXJ0QXR0cmlidXRlKGl0LT5jbG9uZShmYWxzZSkpOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChjaGFuZ2VkKQorICAgICAgICAgICAg
ICAgICAgICAgICAgZG9jKCktPnJlY2FsY1N0eWxlKE5vZGVJbXBsOjpJbmhlcml0KTsKKyAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCSAgICB9Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJRF9USVRMRToKLSAgICAgICAgY2FzZSBJRF9T
VFlMRToKLSAgICAgICAgICAgIGlmICggIWhlYWQgKQorICAgICAgICAgICAgfQorICAgICAgICB9
IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnRpdGxlKCkpIHx8IGgtPmhhc0xv
Y2FsTmFtZShIVE1MTmFtZXM6OnN0eWxlKCkpKSB7CisgICAgICAgICAgICBpZiAoIWhlYWQpCiAg
ICAgICAgICAgICAgICAgY3JlYXRlSGVhZCgpOwotICAgICAgICAgICAgaWYgKCBoZWFkICkgewor
ICAgICAgICAgICAgaWYgKGhlYWQpIHsKICAgICAgICAgICAgICAgICBET006Ok5vZGVJbXBsICpu
ZXdOb2RlID0gaGVhZC0+YWRkQ2hpbGQobik7Ci0gICAgICAgICAgICAgICAgaWYgKCBuZXdOb2Rl
ICkgewotICAgICAgICAgICAgICAgICAgICBwdXNoQmxvY2soaWQsIHRhZ1ByaW9yaXR5KGlkKSk7
CisgICAgICAgICAgICAgICAgaWYgKG5ld05vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgcHVz
aEJsb2NrKGxvY2FsTmFtZSwgdGFnUHJpb3JpdHkpOwogICAgICAgICAgICAgICAgICAgICBzZXRD
dXJyZW50KG5ld05vZGUpOwotI2lmIFNQRUVEX0RFQlVHIDwgMgotCQkgICAgaWYoIW4tPmF0dGFj
aGVkKCkgJiYgSFRNTFdpZGdldCkKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFuLT5hdHRhY2hl
ZCgpICYmIEhUTUxXaWRnZXQpCiAgICAgICAgICAgICAgICAgICAgICAgICBuLT5hdHRhY2goKTsK
LSNlbmRpZgogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0jaWZkZWYgUEFSU0VSX0RFQlVHCi0g
ICAgICAgICAgICAgICAgICAgIGtkRGVidWcoIDYwMzUgKSA8PCAiYWRkaW5nIHN0eWxlIGJlZm9y
ZSB0byBib2R5IGZhaWxlZCEhISEiIDw8IGVuZGw7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICAg
ICAgZGlzY2FyZF91bnRpbCA9IElEX1NUWUxFICsgSURfQ0xPU0VfVEFHOworICAgICAgICAgICAg
ICAgICAgICBzZXRTa2lwTW9kZShIVE1MTmFtZXM6OnN0eWxlKCkpOwogICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICAgICAgfSBlbHNlIGlmKGluQm9keSkgewotICAgICAgICAgICAg
ICAgIGRpc2NhcmRfdW50aWwgPSBJRF9TVFlMRSArIElEX0NMT1NFX1RBRzsKKyAgICAgICAgICAg
ICAgICBzZXRTa2lwTW9kZShIVE1MTmFtZXM6OnN0eWxlKCkpOwogICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgLy8gU0NSSVBUIGFuZCBPQkpFQ1QgYXJlIGFsbG93ZWQgaW4gdGhlIGJvZHkuCi0gICAgICAg
IGNhc2UgSURfQk9EWToKLSAgICAgICAgICAgIGlmKGluQm9keSAmJiBkb2MoKS0+Ym9keSgpKSB7
CisgICAgICAgIH0gZWxzZSBpZiAoaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6Ym9keSgpKSkg
eworICAgICAgICAgICAgaWYgKGluQm9keSAmJiBkb2MoKS0+Ym9keSgpKSB7CiAgICAgICAgICAg
ICAgICAgLy8gd2UgaGF2ZSBhbm90aGVyIDxCT0RZPiBlbGVtZW50Li4uLiBhcHBseSBhdHRyaWJ1
dGVzIHRvIGV4aXN0aW5nIG9uZQogICAgICAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB3ZSBkb24n
dCBvdmVyd3JpdGUgYWxyZWFkeSBleGlzdGluZyBhdHRyaWJ1dGVzCiAgICAgICAgICAgICAgICAg
Ly8gc29tZSBzaXRlcyB1c2UgPGJvZHkgYmdjb2xvcj1yaWdodGNvbG9yPi4uLjxib2R5IGJnY29s
b3I9d3Jvbmdjb2xvcj4KQEAgLTQ0OSwzNjAgKzM4OCwyNTggQEAgYm9vbCBLSFRNTFBhcnNlcjo6
aW5zZXJ0Tm9kZShOb2RlSW1wbCAqbgogICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gIWJt
YXAtPmdldEF0dHJpYnV0ZUl0ZW0oaXQtPmlkKCkpOwogICAgICAgICAgICAgICAgICAgICBibWFw
LT5pbnNlcnRBdHRyaWJ1dGUoaXQtPmNsb25lKGZhbHNlKSk7CiAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIGlmICggY2hhbmdlZCApCi0gICAgICAgICAgICAgICAgICAgIGRvYygp
LT5yZWNhbGNTdHlsZSggTm9kZUltcGw6OkluaGVyaXQgKTsKLSAgICAgICAgICAgIH0gZWxzZSBp
ZiAoIGN1cnJlbnQtPmlzRG9jdW1lbnROb2RlKCkgKQotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAg
ICAgIC8vIHRoZSBmb2xsb3dpbmcgaXMgYSBoYWNrIHRvIG1vdmUgbm9uIHJlbmRlcmVkIGVsZW1l
bnRzCi0gICAgICAgICAgICAvLyBvdXRzaWRlIG9mIHRhYmxlcy4KLSAgICAgICAgICAgIC8vIG5l
ZWRlZCBmb3IgYnJva2VuIGNvbnN0cnVjdHMgbGlrZSA8dGFibGU+PGZvcm0gLi4uPjx0cj4uLi4u
Ci0gICAgICAgIGNhc2UgSURfSU5QVVQ6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEVsZW1lbnRJ
bXBsICplID0gc3RhdGljX2Nhc3Q8RWxlbWVudEltcGwgKj4obik7Ci0gICAgICAgICAgICBET01T
dHJpbmcgdHlwZSA9IGUtPmdldEF0dHJpYnV0ZShBVFRSX1RZUEUpOwotCi0gICAgICAgICAgICBp
ZiAoIHN0cmNhc2VjbXAoIHR5cGUsICJoaWRkZW4iICkgPT0gMCAmJiBmb3JtKSB7CisgICAgICAg
ICAgICAgICAgaWYgKGNoYW5nZWQpCisgICAgICAgICAgICAgICAgICAgIGRvYygpLT5yZWNhbGNT
dHlsZShOb2RlSW1wbDo6SW5oZXJpdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoIWN1cnJlbnQtPmlzRG9jdW1lbnRO
b2RlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9IGVsc2UgaWYg
KGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmlucHV0KCkpKSB7CisgICAgICAgICAgICBET01T
dHJpbmcgdHlwZSA9IGgtPmdldEF0dHJpYnV0ZShBVFRSX1RZUEUpOworICAgICAgICAgICAgaWYg
KHN0cmNhc2VjbXAodHlwZSwgImhpZGRlbiIpID09IDAgJiYgZm9ybSkgewogICAgICAgICAgICAg
ICAgIGZvcm0tPmFkZENoaWxkKG4pOwotI2lmIFNQRUVEX0RFQlVHIDwgMgotICAgICAgICAgICAg
ICAgIGlmKCFuLT5hdHRhY2hlZCgpICYmIEhUTUxXaWRnZXQpCisgICAgICAgICAgICAgICAgaWYg
KCFuLT5hdHRhY2hlZCgpICYmIEhUTUxXaWRnZXQpCiAgICAgICAgICAgICAgICAgICAgIG4tPmF0
dGFjaCgpOwotI2VuZGlmCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIElEX1RFWFQ6
Ci0gICAgICAgICAgICAvLyBpZ25vcmUgdGV4dCBpbnNpZGUgdGhlIGZvbGxvd2luZyBlbGVtZW50
cy4KLSAgICAgICAgICAgIHN3aXRjaChjdXJyZW50LT5pZCgpKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgY2FzZSBJRF9TRUxFQ1Q6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICA7Ci0gICAgICAgICAgICAgICAg
Ly8gZmFsbCB0aHJvdWdoISEKLSAgICAgICAgICAgIH07Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBJRF9ERDoKLSAgICAgICAgY2FzZSBJRF9EVDoKKyAgICAgICAgfSBlbHNlIGlm
IChoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpkZCgpKSB8fCBoLT5oYXNMb2NhbE5hbWUoSFRN
TE5hbWVzOjpkdCgpKSkgewogICAgICAgICAgICAgZSA9IG5ldyBIVE1MRExpc3RFbGVtZW50SW1w
bChkb2N1bWVudCk7Ci0gICAgICAgICAgICBpZiAoIGluc2VydE5vZGUoZSkgKSB7CisgICAgICAg
ICAgICBpZiAoaW5zZXJ0Tm9kZShlKSkgewogICAgICAgICAgICAgICAgIGluc2VydE5vZGUobik7
CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBJRF9BUkVBOgotICAgICAgICB7Ci0gICAgICAgICAgICBp
ZihtYXApCi0gICAgICAgICAgICB7CisgICAgICAgIH0gZWxzZSBpZiAoaC0+aGFzTG9jYWxOYW1l
KEhUTUxOYW1lczo6YXJlYSgpKSkgeworICAgICAgICAgICAgaWYgKG1hcCkgewogICAgICAgICAg
ICAgICAgIG1hcC0+YWRkQ2hpbGQobik7Ci0jaWYgU1BFRURfREVCVUcgPCAyCi0gICAgICAgICAg
ICAgICAgaWYoIW4tPmF0dGFjaGVkKCkgJiYgSFRNTFdpZGdldCkKKyAgICAgICAgICAgICAgICBp
ZiAoIW4tPmF0dGFjaGVkKCkgJiYgSFRNTFdpZGdldCkKICAgICAgICAgICAgICAgICAgICAgbi0+
YXR0YWNoKCk7Ci0jZW5kaWYKICAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBjYXNlIElEX0NB
UFRJT046IHsKLSAgICAgICAgICAgIHN3aXRjaCAoY3VycmVudC0+aWQoKSkgewotICAgICAgICAg
ICAgICAgIGNhc2UgSURfVEhFQUQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBJRF9UQk9EWToKLSAg
ICAgICAgICAgICAgICBjYXNlIElEX1RGT09UOgotICAgICAgICAgICAgICAgIGNhc2UgSURfVFI6
Ci0gICAgICAgICAgICAgICAgY2FzZSBJRF9USDoKLSAgICAgICAgICAgICAgICBjYXNlIElEX1RE
OiB7Ci0gICAgICAgICAgICAgICAgICAgIE5vZGVJbXBsKiB0c2VjdGlvbiA9IGN1cnJlbnQ7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50LT5pZCgpID09IElEX1RSKQotICAgICAgICAg
ICAgICAgICAgICAgICAgdHNlY3Rpb24gPSBjdXJyZW50LT5wYXJlbnQoKTsKLSAgICAgICAgICAg
ICAgICAgICAgZWxzZSBpZiAoY3VycmVudC0+aWQoKSA9PSBJRF9URCB8fCBjdXJyZW50LT5pZCgp
ID09IElEX1RIKQotICAgICAgICAgICAgICAgICAgICAgICAgdHNlY3Rpb24gPSBjdXJyZW50LT5w
YXJlbnQoKS0+cGFyZW50KCk7Ci0gICAgICAgICAgICAgICAgICAgIE5vZGVJbXBsKiB0YWJsZSA9
IHRzZWN0aW9uLT5wYXJlbnQoKTsKLSAgICAgICAgICAgICAgICAgICAgaW50IGV4Y2VwdGlvbmNv
ZGUgPSAwOwotICAgICAgICAgICAgICAgICAgICB0YWJsZS0+aW5zZXJ0QmVmb3JlKG4sIHRzZWN0
aW9uLCBleGNlcHRpb25jb2RlKTsKLSAgICAgICAgICAgICAgICAgICAgcHVzaEJsb2NrKGlkLCB0
YWdQcmlvcml0eShpZCkpOwotICAgICAgICAgICAgICAgICAgICBzZXRDdXJyZW50KG4pOwotICAg
ICAgICAgICAgICAgICAgICBpblN0cmF5VGFibGVDb250ZW50Kys7Ci0gICAgICAgICAgICAgICAg
ICAgIGJsb2NrU3RhY2stPnN0cmF5VGFibGVDb250ZW50ID0gdHJ1ZTsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9IGVsc2UgaWYgKGgt
Pmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmNhcHRpb24oKSkpIHsKKyAgICAgICAgICAgIGlmIChp
c1RhYmxlUGFydChjdXJyZW50KSkgeworICAgICAgICAgICAgICAgIE5vZGVJbXBsKiB0c2VjdGlv
biA9IGN1cnJlbnQ7CisgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQtPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjp0cigpKSkKKyAgICAgICAgICAgICAgICAgICAgdHNlY3Rpb24gPSBjdXJyZW50LT5w
YXJlbnQoKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChjdXJyZW50LT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6dGQoKSkgfHwgY3VycmVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRoKCkpKQor
ICAgICAgICAgICAgICAgICAgICB0c2VjdGlvbiA9IGN1cnJlbnQtPnBhcmVudCgpLT5wYXJlbnQo
KTsKKyAgICAgICAgICAgICAgICBOb2RlSW1wbCogdGFibGUgPSB0c2VjdGlvbi0+cGFyZW50KCk7
CisgICAgICAgICAgICAgICAgaW50IGV4Y2VwdGlvbmNvZGUgPSAwOworICAgICAgICAgICAgICAg
IHRhYmxlLT5pbnNlcnRCZWZvcmUobiwgdHNlY3Rpb24sIGV4Y2VwdGlvbmNvZGUpOworICAgICAg
ICAgICAgICAgIHB1c2hCbG9jayhsb2NhbE5hbWUsIHRhZ1ByaW9yaXR5KTsKKyAgICAgICAgICAg
ICAgICBzZXRDdXJyZW50KG4pOworICAgICAgICAgICAgICAgIGluU3RyYXlUYWJsZUNvbnRlbnQr
KzsKKyAgICAgICAgICAgICAgICBibG9ja1N0YWNrLT5zdHJheVRhYmxlQ29udGVudCA9IHRydWU7
CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIElEX1RIRUFEOgotICAgICAgICBjYXNl
IElEX1RCT0RZOgotICAgICAgICBjYXNlIElEX1RGT09UOgotICAgICAgICBjYXNlIElEX0NPTEdS
T1VQOiB7Ci0gICAgICAgICAgICBpZiAoaXNUYWJsZVJlbGF0ZWRUYWcoY3VycmVudC0+aWQoKSkp
IHsKLSAgICAgICAgICAgICAgICB3aGlsZSAoYmxvY2tTdGFjayAmJiBjdXJyZW50LT5pZCgpICE9
IElEX1RBQkxFICYmIGlzVGFibGVSZWxhdGVkVGFnKGN1cnJlbnQtPmlkKCkpKQorICAgICAgICB9
IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnRoZWFkKCkpIHx8IGgtPmhhc0xv
Y2FsTmFtZShIVE1MTmFtZXM6OnRib2R5KCkpIHx8CisgICAgICAgICAgICAgICAgICAgaC0+aGFz
TG9jYWxOYW1lKEhUTUxOYW1lczo6dGZvb3QoKSkgfHwgaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1l
czo6Y29sZ3JvdXAoKSkpIHsKKyAgICAgICAgICAgIGlmIChpc1RhYmxlUmVsYXRlZChjdXJyZW50
KSkgeworICAgICAgICAgICAgICAgIHdoaWxlIChibG9ja1N0YWNrICYmIGlzVGFibGVQYXJ0KGN1
cnJlbnQpKQogICAgICAgICAgICAgICAgICAgICBwb3BPbmVCbG9jaygpOwogICAgICAgICAgICAg
ICAgIHJldHVybiBpbnNlcnROb2RlKG4pOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIC8v
IHN3aXRjaCBvbiB0aGUgY3VycmVudGx5IGFjdGl2ZSBlbGVtZW50Ci0gICAgICAgIHN3aXRjaChj
dXJyZW50LT5pZCgpKQotICAgICAgICB7Ci0gICAgICAgIGNhc2UgSURfSFRNTDoKLSAgICAgICAg
ICAgIHN3aXRjaChpZCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIGNhc2UgSURfU0NSSVBU
OgotICAgICAgICAgICAgY2FzZSBJRF9TVFlMRToKLSAgICAgICAgICAgIGNhc2UgSURfTUVUQToK
LSAgICAgICAgICAgIGNhc2UgSURfTElOSzoKLSAgICAgICAgICAgIGNhc2UgSURfT0JKRUNUOgot
ICAgICAgICAgICAgY2FzZSBJRF9FTUJFRDoKLSAgICAgICAgICAgIGNhc2UgSURfVElUTEU6Ci0g
ICAgICAgICAgICBjYXNlIElEX0lTSU5ERVg6Ci0gICAgICAgICAgICBjYXNlIElEX0JBU0U6Ci0g
ICAgICAgICAgICAgICAgaWYoIWhlYWQpIHsKKyAgICB9CisgICAgCisgICAgLy8gMi4gTmV4dCB3
ZSBleGFtaW5lIG91ciBjdXJyZW50bHkgYWN0aXZlIGVsZW1lbnQgdG8gZG8gc29tZSBmdXJ0aGVy
IGVycm9yIGhhbmRsaW5nLgorICAgIGlmIChjdXJyZW50LT5pc0hUTUxFbGVtZW50KCkpIHsKKyAg
ICAgICAgSFRNTEVsZW1lbnRJbXBsKiBoID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsKj4o
Y3VycmVudCk7CisgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgY3VycmVudFRhZ05hbWUgPSBj
dXJyZW50LT5sb2NhbE5hbWUoKTsKKyAgICAgICAgaWYgKGgtPmhhc0xvY2FsTmFtZShIVE1MTmFt
ZXM6Omh0bWwoKSkpIHsKKyAgICAgICAgICAgIEhUTUxFbGVtZW50SW1wbCogZWx0ID0gbi0+aXNI
VE1MRWxlbWVudCgpID8gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsKj4obikgOiAwOworICAg
ICAgICAgICAgaWYgKGVsdCAmJiAoZWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpzY3JpcHQo
KSkgfHwgZWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpzdHlsZSgpKSB8fAorICAgICAgICAg
ICAgICAgIGVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6bWV0YSgpKSB8fCBlbHQtPmhhc0xv
Y2FsTmFtZShIVE1MTmFtZXM6OmxpbmsoKSkgfHwKKyAgICAgICAgICAgICAgICBlbHQtPmhhc0xv
Y2FsTmFtZShIVE1MTmFtZXM6Om9iamVjdCgpKSB8fCBlbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFt
ZXM6OmVtYmVkKCkpIHx8CisgICAgICAgICAgICAgICAgZWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5h
bWVzOjp0aXRsZSgpKSB8fCBlbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmlzaW5kZXgoKSkg
fHwKKyAgICAgICAgICAgICAgICBlbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmJhc2UoKSkp
KSB7CisgICAgICAgICAgICAgICAgaWYgKCFoZWFkKSB7CiAgICAgICAgICAgICAgICAgICAgIGhl
YWQgPSBuZXcgSFRNTEhlYWRFbGVtZW50SW1wbChkb2N1bWVudCk7CiAgICAgICAgICAgICAgICAg
ICAgIGUgPSBoZWFkOwogICAgICAgICAgICAgICAgICAgICBpbnNlcnROb2RlKGUpOwogICAgICAg
ICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIElEX1RFWFQ6IHsKLSAgICAgICAgICAg
ICAgICBUZXh0SW1wbCAqdCA9IHN0YXRpY19jYXN0PFRleHRJbXBsICo+KG4pOwotICAgICAgICAg
ICAgICAgIGlmICh0LT5jb250YWluc09ubHlXaGl0ZXNwYWNlKCkpCi0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICAvKiBGYWxsIHRocm91Z2ggdG8gZGVm
YXVsdCAqLwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
ICAgICBpZiAoIGhhdmVGcmFtZVNldCApIGJyZWFrOwotICAgICAgICAgICAgICAgIGUgPSBuZXcg
SFRNTEJvZHlFbGVtZW50SW1wbChkb2N1bWVudCk7Ci0gICAgICAgICAgICAgICAgc3RhcnRCb2R5
KCk7Ci0gICAgICAgICAgICAgICAgaW5zZXJ0Tm9kZShlKTsKLSAgICAgICAgICAgICAgICBoYW5k
bGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgaWYgKG4tPmlzVGV4dE5vZGUoKSkgeworICAgICAgICAgICAgICAg
ICAgICBUZXh0SW1wbCAqdCA9IHN0YXRpY19jYXN0PFRleHRJbXBsICo+KG4pOworICAgICAgICAg
ICAgICAgICAgICBpZiAodC0+Y29udGFpbnNPbmx5V2hpdGVzcGFjZSgpKQorICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCQkJCX0KKwkJCQlpZiAoIWhhdmVGcmFtZVNldCkg
eworCQkJCQllID0gbmV3IEhUTUxCb2R5RWxlbWVudEltcGwoZG9jdW1lbnQpOworCQkJCQlzdGFy
dEJvZHkoKTsKKwkJCQkJaW5zZXJ0Tm9kZShlKTsKKwkJCQkJaGFuZGxlZCA9IHRydWU7CisJCQkJ
fQogICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSURfSEVB
RDoKLSAgICAgICAgICAgIC8vIHdlIGNhbiBnZXQgaGVyZSBvbmx5IGlmIHRoZSBlbGVtZW50IGlz
IG5vdCBhbGxvd2VkIGluIGhlYWQuCi0gICAgICAgICAgICBpZiAoaWQgPT0gSURfSFRNTCkKKyAg
ICAgICAgfSBlbHNlIGlmIChoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpoZWFkKCkpKSB7Cisg
ICAgICAgICAgICBpZiAobi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omh0bWwoKSkpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAg
ICAgLy8gVGhpcyBtZWFucyB0aGUgYm9keSBzdGFydHMgaGVyZS4uLgotICAgICAgICAgICAgICAg
IGlmICggaGF2ZUZyYW1lU2V0ICkgYnJlYWs7Ci0gICAgICAgICAgICAgICAgcG9wQmxvY2soSURf
SEVBRCk7Ci0gICAgICAgICAgICAgICAgZSA9IG5ldyBIVE1MQm9keUVsZW1lbnRJbXBsKGRvY3Vt
ZW50KTsKLSAgICAgICAgICAgICAgICBzdGFydEJvZHkoKTsKLSAgICAgICAgICAgICAgICBpbnNl
cnROb2RlKGUpOwotICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOworICAgICAgICAgICAg
ICAgIGlmICghaGF2ZUZyYW1lU2V0KSB7CisgICAgICAgICAgICAgICAgICAgIHBvcEJsb2NrKGN1
cnJlbnRUYWdOYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgZSA9IG5ldyBIVE1MQm9keUVsZW1l
bnRJbXBsKGRvY3VtZW50KTsKKyAgICAgICAgICAgICAgICAgICAgc3RhcnRCb2R5KCk7CisgICAg
ICAgICAgICAgICAgICAgIGluc2VydE5vZGUoZSk7CisgICAgICAgICAgICAgICAgICAgIGhhbmRs
ZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIElEX0JPRFk6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBJRF9DQVBUSU9OOgorICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFtZShI
VE1MTmFtZXM6OmNhcHRpb24oKSkpIHsKICAgICAgICAgICAgIC8vIElsbGVnYWwgY29udGVudCBp
biBhIGNhcHRpb24uIENsb3NlIHRoZSBjYXB0aW9uIGFuZCB0cnkgYWdhaW4uCi0gICAgICAgICAg
ICBwb3BCbG9jayhJRF9DQVBUSU9OKTsKLSAgICAgICAgICAgIHN3aXRjaCggaWQgKSB7Ci0gICAg
ICAgICAgICBjYXNlIElEX1RIRUFEOgotICAgICAgICAgICAgY2FzZSBJRF9URk9PVDoKLSAgICAg
ICAgICAgIGNhc2UgSURfVEJPRFk6Ci0gICAgICAgICAgICBjYXNlIElEX1RSOgotICAgICAgICAg
ICAgY2FzZSBJRF9URDoKLSAgICAgICAgICAgIGNhc2UgSURfVEg6CisgICAgICAgICAgICBwb3BC
bG9jayhjdXJyZW50VGFnTmFtZSk7CisgICAgICAgICAgICBpZiAoaXNUYWJsZVBhcnQobikpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGluc2VydE5vZGUobiwgZmxhdCk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJRF9UQUJMRToKLSAgICAgICAgY2Fz
ZSBJRF9USEVBRDoKLSAgICAgICAgY2FzZSBJRF9URk9PVDoKLSAgICAgICAgY2FzZSBJRF9UQk9E
WToKLSAgICAgICAgY2FzZSBJRF9UUjoKLSAgICAgICAgICAgIHN3aXRjaChpZCkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgIGNhc2UgSURfVEFCTEU6Ci0gICAgICAgICAgICAgICAgcG9wQmxv
Y2soSURfVEFCTEUpOyAvLyBlbmQgdGhlIHRhYmxlCisgICAgICAgIH0gZWxzZSBpZiAoaC0+aGFz
TG9jYWxOYW1lKEhUTUxOYW1lczo6dGFibGUoKSkgfHwgaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1l
czo6dHIoKSkgfHwgaXNUYWJsZVNlY3Rpb24oaCkpIHsKKyAgICAgICAgICAgIGlmIChuLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6dGFibGUoKSkpIHsKKyAgICAgICAgICAgICAgICBwb3BCbG9jayhs
b2NhbE5hbWUpOyAvLyBlbmQgdGhlIHRhYmxlCiAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRy
dWU7ICAgICAgLy8gLi4uYW5kIHN0YXJ0IGEgbmV3IG9uZQotICAgICAgICAgICAgICAgIGJyZWFr
OwotCSAgICBjYXNlIElEX1RFWFQ6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgVGV4
dEltcGwgKnQgPSBzdGF0aWNfY2FzdDxUZXh0SW1wbCAqPihuKTsKLSAgICAgICAgICAgICAgICBp
ZiAodC0+Y29udGFpbnNPbmx5V2hpdGVzcGFjZSgpKQotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgRE9NU3RyaW5nSW1wbCAqaSA9IHQtPnN0cmluZygp
OwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBwb3MgPSAwOwotICAgICAgICAgICAgICAg
IHdoaWxlKHBvcyA8IGktPmwgJiYgKCAqKGktPnMrcG9zKSA9PSBRQ2hhcignICcpIHx8Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooaS0+cytwb3MpID09IFFDaGFyKDB4
YTApKSkgcG9zKys7Ci0gICAgICAgICAgICAgICAgaWYocG9zID09IGktPmwpCi0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBOb2RlSW1wbCAqbm9kZSA9IGN1cnJlbnQ7Ci0g
ICAgICAgICAgICAgICAgTm9kZUltcGwgKnBhcmVudCA9IG5vZGUtPnBhcmVudE5vZGUoKTsKLQot
ICAgICAgICAgICAgICAgIE5vZGVJbXBsICpwYXJlbnRwYXJlbnQgPSBwYXJlbnQtPnBhcmVudE5v
ZGUoKTsKLQotICAgICAgICAgICAgICAgIGlmIChuLT5pc1RleHROb2RlKCkgfHwKLSAgICAgICAg
ICAgICAgICAgICAgKCBub2RlLT5pZCgpID09IElEX1RSICYmCi0gICAgICAgICAgICAgICAgICAg
ICAoIHBhcmVudC0+aWQoKSA9PSBJRF9USEVBRCB8fAotICAgICAgICAgICAgICAgICAgICAgIHBh
cmVudC0+aWQoKSA9PSBJRF9UQk9EWSB8fAotICAgICAgICAgICAgICAgICAgICAgIHBhcmVudC0+
aWQoKSA9PSBJRF9URk9PVCApICYmIHBhcmVudHBhcmVudC0+aWQoKSA9PSBJRF9UQUJMRSApIHx8
Ci0gICAgICAgICAgICAgICAgICAgICggIWNoZWNrQ2hpbGQoSURfVFIsIGlkLCAhZG9jKCktPmlu
Q29tcGF0TW9kZSgpKSAmJiAoIG5vZGUtPmlkKCkgPT0gSURfVEhFQUQgfHwgbm9kZS0+aWQoKSA9
PSBJRF9UQk9EWSB8fCBub2RlLT5pZCgpID09IElEX1RGT09UICkgJiYKLSAgICAgICAgICAgICAg
ICAgICAgIHBhcmVudC0+aWQoKSA9PSBJRF9UQUJMRSApKQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgbm9kZSA9IChub2RlLT5pZCgpID09IElEX1RBQkxFKSA/IG5vZGUg
OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICgobm9kZS0+aWQoKSA9PSBJRF9UUikgPyBw
YXJlbnRwYXJlbnQgOiBwYXJlbnQpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBib29sIHBvc3NpYmx5TW92ZVN0cmF5Q29udGVudCA9IHRydWU7CisgICAgICAgICAgICAg
ICAgaW50IGV4Y2VwdGlvbkNvZGUgPSAwOworICAgICAgICAgICAgICAgIGlmIChuLT5pc1RleHRO
b2RlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgVGV4dEltcGwgKnQgPSBzdGF0aWNfY2FzdDxU
ZXh0SW1wbCAqPihuKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHQtPmNvbnRhaW5zT25seVdo
aXRlc3BhY2UoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgICAgICAgICAgRE9NU3RyaW5nSW1wbCAqaSA9IHQtPnN0cmluZygpOworICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBpbnQgcG9zID0gMDsKKyAgICAgICAgICAgICAgICAgICAgd2hp
bGUgKHBvcyA8IGktPmwgJiYgKCooaS0+cytwb3MpID09IFFDaGFyKCcgJykgfHwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooaS0+cytwb3MpID09IFFDaGFyKDB4
YTApKSkgcG9zKys7CisgICAgICAgICAgICAgICAgICAgIGlmIChwb3MgPT0gaS0+bCkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHBvc3NpYmx5TW92ZVN0cmF5Q29udGVudCA9IGZhbHNlOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAocG9zc2libHlNb3ZlU3RyYXlDb250
ZW50KSB7CisgICAgICAgICAgICAgICAgICAgIE5vZGVJbXBsICpub2RlID0gY3VycmVudDsKICAg
ICAgICAgICAgICAgICAgICAgTm9kZUltcGwgKnBhcmVudCA9IG5vZGUtPnBhcmVudE5vZGUoKTsK
LSAgICAgICAgICAgICAgICAgICAgaW50IGV4Y2VwdGlvbmNvZGUgPSAwOwotICAgICAgICAgICAg
ICAgICAgICBwYXJlbnQtPmluc2VydEJlZm9yZSggbiwgbm9kZSwgZXhjZXB0aW9uY29kZSApOwot
ICAgICAgICAgICAgICAgICAgICBpZiAoIGV4Y2VwdGlvbmNvZGUgKSB7Ci0jaWZkZWYgUEFSU0VS
X0RFQlVHCi0gICAgICAgICAgICAgICAgICAgICAgICBrZERlYnVnKCA2MDM1ICkgPDwgImFkZGlu
ZyBjb250ZW50IGJlZm9yZSB0YWJsZSBmYWlsZWQhIiA8PCBlbmRsOwotI2VuZGlmCi0gICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgTm9kZUltcGwgKmdy
YW5kcGFyZW50ID0gcGFyZW50LT5wYXJlbnROb2RlKCk7CisKKyAgICAgICAgICAgICAgICAgICAg
aWYgKG4tPmlzVGV4dE5vZGUoKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgKGgtPmhhc0xv
Y2FsTmFtZShIVE1MTmFtZXM6OnRyKCkpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgaXNU
YWJsZVNlY3Rpb24ocGFyZW50KSAmJiBncmFuZHBhcmVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
OnRhYmxlKCkpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICgoIW4tPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjp0ZCgpKSAmJiAhbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRoKCkpICYmCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAhbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZvcm0o
KSkgJiYgIW4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzY3JpcHQoKSkpICYmIGlzVGFibGVTZWN0
aW9uKG5vZGUpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50LT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6dGFibGUoKSkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBub2RlID0g
KG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0YWJsZSgpKSkgPyBub2RlIDoKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKChub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dHIo
KSkpID8gZ3JhbmRwYXJlbnQgOiBwYXJlbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgTm9k
ZUltcGwgKnBhcmVudCA9IG5vZGUtPnBhcmVudE5vZGUoKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHBhcmVudC0+aW5zZXJ0QmVmb3JlKG4sIG5vZGUsIGV4Y2VwdGlvbkNvZGUpOworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCFleGNlcHRpb25Db2RlKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKG4tPmlzSFRNTEVsZW1lbnQoKSAmJiB0YWdQcmlvcml0eSA+IDAgJiYg
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFmbGF0ICYmIHN0YXRpY19jYXN0PEhU
TUxFbGVtZW50SW1wbCo+KG4pLT5lbmRUYWdSZXF1aXJlbWVudCgpICE9IFRhZ1N0YXR1c0ZvcmJp
ZGRlbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHB1c2hCbG9jayhsb2NhbE5hbWUsIHRhZ1ByaW9yaXR5KTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q3VycmVudChuKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW5TdHJheVRhYmxlQ29udGVudCsrOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBibG9ja1N0YWNrLT5zdHJheVRhYmxlQ29udGVudCA9IHRydWU7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmIChuLT5pc0VsZW1lbnROb2RlKCkgJiYgdGFnUHJp
b3JpdHkoaWQpICE9IDAgJiYgCi0gICAgICAgICAgICAgICAgICAgICAgICAhZmxhdCAmJiBlbmRU
YWdSZXF1aXJlbWVudChpZCkgIT0gRE9NOjpGT1JCSURERU4pCi0gICAgICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHB1c2hCbG9jayhpZCwgdGFnUHJpb3JpdHkoaWQp
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldEN1cnJlbnQobik7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBpblN0cmF5VGFibGVDb250ZW50Kys7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBibG9ja1N0YWNrLT5zdHJheVRhYmxlQ29udGVudCA9IHRydWU7CisKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKCFleGNlcHRpb25Db2RlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
Y3VycmVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRyKCkpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGUgPSBuZXcgSFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6dGQo
KSwgZG9jdW1lbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY3VycmVudC0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRhYmxlKCkpKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGUgPSBuZXcgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsKEhUTUxOYW1lczo6dGJvZHko
KSwgZG9jdW1lbnQsIHRydWUpOyAvLyBpbXBsaWNpdCAKKyAgICAgICAgICAgICAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlID0gbmV3IEhUTUxUYWJsZVJvd0Vs
ZW1lbnRJbXBsKGRvY3VtZW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgICAgICAgICAgaW5zZXJ0Tm9kZShlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGhh
bmRsZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICgg
Y3VycmVudC0+aWQoKSA9PSBJRF9UUiApCi0gICAgICAgICAgICAgICAgICAgIGUgPSBuZXcgSFRN
TFRhYmxlQ2VsbEVsZW1lbnRJbXBsKGRvY3VtZW50LCBJRF9URCk7Ci0gICAgICAgICAgICAgICAg
ZWxzZSBpZiAoIGN1cnJlbnQtPmlkKCkgPT0gSURfVEFCTEUgKQotICAgICAgICAgICAgICAgICAg
ICBlID0gbmV3IEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbCggZG9jdW1lbnQsIElEX1RCT0RZ
LCB0cnVlIC8qIGltcGxpY2l0ICovICk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgICAgICBlID0gbmV3IEhUTUxUYWJsZVJvd0VsZW1lbnRJbXBsKCBkb2N1bWVudCApOwot
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGluc2VydE5vZGUoZSk7Ci0gICAgICAg
ICAgICAgICAgaGFuZGxlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICB9IC8vIGVuZCBkZWZhdWx0Ci0gICAgICAgICAgICB9IC8vIGVuZCBzd2l0Y2gKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElEX09CSkVDVDoKLSAgICAgICAgICAgIGRpc2Nh
cmRfdW50aWwgPSBJRF9PQkpFQ1QgKyBJRF9DTE9TRV9UQUc7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZSBpZiAoaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b2JqZWN0
KCkpKSB7CisgICAgICAgICAgICBzZXRTa2lwTW9kZShIVE1MTmFtZXM6Om9iamVjdCgpKTsKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgY2FzZSBJRF9VTDoKLSAgICAgICAgY2Fz
ZSBJRF9PTDoKLSAgICAgICAgY2FzZSBJRF9ESVI6Ci0gICAgICAgIGNhc2UgSURfTUVOVToKKyAg
ICAgICAgfSBlbHNlIGlmIChoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp1bCgpKSB8fCBoLT5o
YXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvbCgpKSB8fAorICAgICAgICAgICAgICAgICBoLT5oYXNM
b2NhbE5hbWUoSFRNTE5hbWVzOjpkaXIoKSkgfHwgaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6
bWVudSgpKSkgewogICAgICAgICAgICAgZSA9IG5ldyBIVE1MRGl2RWxlbWVudEltcGwoZG9jdW1l
bnQpOwogICAgICAgICAgICAgaW5zZXJ0Tm9kZShlKTsKICAgICAgICAgICAgIGhhbmRsZWQgPSB0
cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIElEX0RMOgotICAgICAg
ICAgICAgICAgIHBvcEJsb2NrKElEX0RMKTsKLSAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1
ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgSURfRFQ6Ci0gICAg
ICAgICAgICAgICAgcG9wQmxvY2soSURfRFQpOwotICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0
cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElEX1NFTEVDVDoKLSAg
ICAgICAgICAgIGlmKCBuLT5pc0lubGluZSgpICkKKyAgICAgICAgfSBlbHNlIGlmIChoLT5oYXNM
b2NhbE5hbWUoSFRNTE5hbWVzOjpkbCgpKSB8fCBoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpk
dCgpKSkgeworICAgICAgICAgICAgcG9wQmxvY2soY3VycmVudFRhZ05hbWUpOworICAgICAgICAg
ICAgaGFuZGxlZCA9IHRydWU7CisgICAgICAgIH0gZWxzZSBpZiAoaC0+aGFzTG9jYWxOYW1lKEhU
TUxOYW1lczo6c2VsZWN0KCkpKSB7CisgICAgICAgICAgICBpZiAoaXNJbmxpbmUobikpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgSURfUDoKLSAgICAgICAgY2FzZSBJRF9IMToKLSAgICAgICAgY2FzZSBJRF9IMjoKLSAgICAg
ICAgY2FzZSBJRF9IMzoKLSAgICAgICAgY2FzZSBJRF9INDoKLSAgICAgICAgY2FzZSBJRF9INToK
LSAgICAgICAgY2FzZSBJRF9INjoKLSAgICAgICAgICAgIGlmKCFuLT5pc0lubGluZSgpKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIHBvcEJsb2NrKGN1cnJlbnQtPmlkKCkpOworICAg
ICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnAoKSkgfHwgaXNIZWFk
ZXJUYWcoY3VycmVudFRhZ05hbWUpKSB7CisgICAgICAgICAgICBpZiAoIWlzSW5saW5lKG4pKSB7
CisgICAgICAgICAgICAgICAgcG9wQmxvY2soY3VycmVudFRhZ05hbWUpOwogICAgICAgICAgICAg
ICAgIGhhbmRsZWQgPSB0cnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgSURfT1BUSU9OOgotICAgICAgICBjYXNlIElEX09QVEdST1VQOgotICAgICAg
ICAgICAgaWYgKGlkID09IElEX09QVEdST1VQKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIHBvcEJsb2NrKGN1cnJlbnQtPmlkKCkpOworICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xv
Y2FsTmFtZShIVE1MTmFtZXM6Om9wdGlvbigpKSB8fCBoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVz
OjpvcHRncm91cCgpKSkgeworICAgICAgICAgICAgaWYgKGxvY2FsTmFtZSA9PSBIVE1MTmFtZXM6
Om9wdGdyb3VwKCkpIHsKKyAgICAgICAgICAgICAgICBwb3BCbG9jayhjdXJyZW50VGFnTmFtZSk7
CiAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBlbHNlIGlmKGlkID09IElEX1NFTEVDVCkKLSAgICAgICAgICAgIHsKKyAgICAgICAgICAg
IGVsc2UgaWYgKGxvY2FsTmFtZSA9PSBIVE1MTmFtZXM6OnNlbGVjdCgpKSB7CiAgICAgICAgICAg
ICAgICAgLy8gSUUgdHJlYXRzIGEgbmVzdGVkIHNlbGVjdCBhcyA8L3NlbGVjdD4uIExldCdzIGRv
IHRoZSBzYW1lCi0gICAgICAgICAgICAgICAgcG9wQmxvY2soIElEX1NFTEVDVCApOwotICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIHBvcEJsb2NrKGxvY2FsTmFtZSk7CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIC8vIGhlYWQgZWxl
bWVudHMgaW4gdGhlIGJvZHkgc2hvdWxkIGJlIGlnbm9yZWQuCi0gICAgICAgIGNhc2UgSURfQURE
UkVTUzoKLSAgICAgICAgICAgIHBvcEJsb2NrKElEX0FERFJFU1MpOworICAgICAgICB9IGVsc2Ug
aWYgKGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmFkZHJlc3MoKSkpIHsKKyAgICAgICAgICAg
IHBvcEJsb2NrKGN1cnJlbnRUYWdOYW1lKTsKICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSURfQ09MR1JPVVA6Ci0gICAgICAgICAg
ICBpZiAoaWQgIT0gSURfVEVYVCkgewotICAgICAgICAgICAgICAgIHBvcEJsb2NrKElEX0NPTEdS
T1VQKTsKKyAgICAgICAgfSBlbHNlIGlmIChoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpjb2xn
cm91cCgpKSkgeworICAgICAgICAgICAgaWYgKCFuLT5pc1RleHROb2RlKCkpIHsKKyAgICAgICAg
ICAgICAgICBwb3BCbG9jayhjdXJyZW50VGFnTmFtZSk7CiAgICAgICAgICAgICAgICAgaGFuZGxl
ZCA9IHRydWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBJRF9GT05UOgotICAgICAgICAgICAgcG9wQmxvY2soSURfRk9OVCk7CisgICAgICAgIH0gZWxz
ZSBpZiAoaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6Zm9udCgpKSkgeworICAgICAgICAgICAg
cG9wQmxvY2soY3VycmVudFRhZ05hbWUpOwogICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGlmKGN1cnJl
bnQtPmlzRG9jdW1lbnROb2RlKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYo
Y3VycmVudC0+Zmlyc3RDaGlsZCgpID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgZSA9IG5l
dyBIVE1MSHRtbEVsZW1lbnRJbXBsKGRvY3VtZW50KTsKLSAgICAgICAgICAgICAgICAgICAgaW5z
ZXJ0Tm9kZShlKTsKLSAgICAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZihjdXJyZW50LT5p
c0lubGluZSgpKQotICAgICAgICAgICAgeworICAgICAgICB9IGVsc2UgaWYgKCFoLT5oYXNMb2Nh
bE5hbWUoSFRNTE5hbWVzOjpib2R5KCkpKSB7CisgICAgICAgICAgICBpZiAoaXNJbmxpbmUoY3Vy
cmVudCkpIHsKICAgICAgICAgICAgICAgICBwb3BJbmxpbmVCbG9ja3MoKTsKICAgICAgICAgICAg
ICAgICBoYW5kbGVkID0gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotCi0gICAgICAg
IC8vIGlmIHdlIGNvdWxkbid0IGhhbmRsZSB0aGUgZXJyb3IsIGp1c3QgcmV0aHJvdyB0aGUgZXhj
ZXB0aW9uLi4uCi0gICAgICAgIGlmKCFoYW5kbGVkKQotICAgICAgICB7Ci0gICAgICAgICAgICAv
L2tkRGVidWcoIDYwMzUgKSA8PCAiRXhjZXB0aW9uIGhhbmRsZXIgZmFpbGVkIGluIEhUTUxQQXJz
ZXI6Omluc2VydE5vZGUoKSIgPDwgZW5kbDsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisgICAgZWxzZSBpZiAoY3VycmVudC0+aXNEb2N1bWVudE5vZGUoKSkgeworICAgICAgICBp
ZiAoY3VycmVudC0+Zmlyc3RDaGlsZCgpID09IDApIHsKKyAgICAgICAgICAgIGUgPSBuZXcgSFRN
TEh0bWxFbGVtZW50SW1wbChkb2N1bWVudCk7CisgICAgICAgICAgICBpbnNlcnROb2RlKGUpOwor
ICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7CiAgICAgICAgIH0KLQotICAgICAgICByZXR1cm4g
aW5zZXJ0Tm9kZShuKTsKICAgICB9CisKKyAgICAvLyAzLiBJZiB3ZSBjb3VsZG4ndCBoYW5kbGUg
dGhlIGVycm9yLCBqdXN0IHJldHVybiBmYWxzZSBhbmQgYXR0ZW1wdCB0byBlcnJvci1jb3JyZWN0
IGFnYWluLgorICAgIGlmICghaGFuZGxlZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJl
dHVybiBpbnNlcnROb2RlKG4pOwogfQogCi1Ob2RlSW1wbCAqS0hUTUxQYXJzZXI6OmdldEVsZW1l
bnQoVG9rZW4qIHQpCitOb2RlSW1wbCAqSFRNTFBhcnNlcjo6Z2V0Tm9kZShUb2tlbiogdCkKIHsK
LSAgICBzd2l0Y2ggKHQtPmlkKQotICAgIHsKLSAgICBjYXNlIElEX0hFQUQ6Ci0gICAgICAgIGlm
ICghaGVhZCAmJiBjdXJyZW50LT5pZCgpID09IElEX0hUTUwpIHsKLSAgICAgICAgICAgIGhlYWQg
PSBuZXcgSFRNTEhlYWRFbGVtZW50SW1wbChkb2N1bWVudCk7Ci0gICAgICAgICAgICByZXR1cm4g
aGVhZDsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gMDsKLSAgICBjYXNlIElEX0JPRFk6Cisg
ICAgLy8gSGFuZGxlIG5vbi1lbGVtZW50cyBmaXJzdC4KKyAgICBpZiAodC0+dGFnTmFtZSA9PSB0
ZXh0QXRvbSkKKyAgICAgICAgcmV0dXJuIG5ldyBUZXh0SW1wbChkb2N1bWVudCwgdC0+dGV4dCk7
CisgICAgaWYgKHQtPnRhZ05hbWUgPT0gY29tbWVudEF0b20pIHsKKyAgICAgICAgaWYgKCFpbmNs
dWRlc0NvbW1lbnRzSW5ET00pCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJu
IG5ldyBDb21tZW50SW1wbChkb2N1bWVudCwgdC0+dGV4dCk7CisgICAgfQorCisgICAgLy8gTm93
IGhhbmRsZSBlbGVtZW50cy4KKyAgICBpZiAodC0+dGFnTmFtZSA9PSBIVE1MTmFtZXM6OmhlYWQo
KSkgeworICAgICAgICBpZiAoaGVhZCB8fCBjdXJyZW50LT5sb2NhbE5hbWUoKSAhPSBIVE1MTmFt
ZXM6Omh0bWwoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0gZWxzZSBpZiAodC0+dGFn
TmFtZSA9PSBIVE1MTmFtZXM6OmJvZHkoKSkgewogICAgICAgICAvLyBib2R5IG5vIGxvbmdlciBh
bGxvd2VkIGlmIHdlIGhhdmUgYSBmcmFtZXNldAogICAgICAgICBpZiAoaGF2ZUZyYW1lU2V0KQog
ICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHBvcEJsb2NrKElEX0hFQUQpOworICAgICAg
ICBwb3BCbG9jayhIVE1MTmFtZXM6OmhlYWQoKSk7CiAgICAgICAgIHN0YXJ0Qm9keSgpOwotICAg
ICAgICByZXR1cm4gbmV3IEhUTUxCb2R5RWxlbWVudEltcGwoZG9jdW1lbnQpOworICAgIH0KIAog
Ly8gZnJhbWVzCi0gICAgY2FzZSBJRF9GUkFNRVNFVDoKLSAgICAgICAgcG9wQmxvY2soSURfSEVB
RCk7CisgICAgZWxzZSBpZiAodC0+dGFnTmFtZSA9PSBIVE1MTmFtZXM6OmZyYW1lc2V0KCkpIHsK
KyAgICAgICAgcG9wQmxvY2soSFRNTE5hbWVzOjpoZWFkKCkpOwogICAgICAgICBpZiAoaW5Cb2R5
ICYmICFoYXZlRnJhbWVTZXQgJiYgIWhhdmVDb250ZW50KSB7Ci0gICAgICAgICAgICBwb3BCbG9j
ayhJRF9CT0RZKTsKKyAgICAgICAgICAgIHBvcEJsb2NrKEhUTUxOYW1lczo6Ym9keSgpKTsKICAg
ICAgICAgICAgIC8vICMjIyBhY3R1YWxseSBmb3IgSUUgZG9jdW1lbnQuYm9keSByZXR1cm5zIHRo
ZSBub3cgaGlkZGVuICJib2R5IiBlbGVtZW50CiAgICAgICAgICAgICAvLyB3ZSBjYW4ndCBpbXBs
ZW1lbnQgdGhhdCBiZWhhdmlvdXIgbm93IGJlY2F1c2UgaXQgY291bGQgY2F1c2UgdG9vIG1hbnkK
ICAgICAgICAgICAgIC8vIHJlZ3Jlc3Npb25zIGFuZCB0aGUgaGVhZGFjaGVzIGFyZSBub3Qgd29y
dGggdGhlIHdvcmsgYXMgbG9uZyBhcyB0aGVyZSBpcwpAQCAtODExLDMyICs2NDgsMjEgQEAgTm9k
ZUltcGwgKktIVE1MUGFyc2VyOjpnZXRFbGVtZW50KFRva2VuKgogICAgICAgICAgICAgICAgIGRv
YygpLT5ib2R5KCktPnNldEF0dHJpYnV0ZShBVFRSX1NUWUxFLCAiZGlzcGxheTpub25lIik7CiAg
ICAgICAgICAgICBpbkJvZHkgPSBmYWxzZTsKICAgICAgICAgfQotICAgICAgICBpZiAoKGhhdmVD
b250ZW50IHx8IGhhdmVGcmFtZVNldCkgJiYgY3VycmVudC0+aWQoKSA9PSBJRF9IVE1MKQorICAg
ICAgICBpZiAoKGhhdmVDb250ZW50IHx8IGhhdmVGcmFtZVNldCkgJiYgY3VycmVudC0+bG9jYWxO
YW1lKCkgPT0gSFRNTE5hbWVzOjpodG1sKCkpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAg
ICAgaGF2ZUZyYW1lU2V0ID0gdHJ1ZTsKICAgICAgICAgc3RhcnRCb2R5KCk7Ci0gICAgICAgIHJl
dHVybiBuZXcgSFRNTEZyYW1lU2V0RWxlbWVudEltcGwoZG9jdW1lbnQpOwotCi0gICAgLy8gYSBi
aXQgb2YgYSBzcGVjaWFsIGNhc2UsIHNpbmNlIHRoZSBmcmFtZSBpcyBpbmxpbmVkCi0gICAgY2Fz
ZSBJRF9JRlJBTUU6Ci0gICAgICAgIGRpc2NhcmRfdW50aWwgPSBJRF9JRlJBTUUgKyBJRF9DTE9T
RV9UQUc7Ci0gICAgICAgIGJyZWFrOwotCisgICAgfSBlbHNlIGlmICh0LT50YWdOYW1lID09IEhU
TUxOYW1lczo6aWZyYW1lKCkpCisgICAgICAgIC8vIGEgYml0IG9mIGEgc3BlY2lhbCBjYXNlLCBz
aW5jZSB0aGUgZnJhbWUgaXMgaW5saW5lZAorICAgICAgICBzZXRTa2lwTW9kZShIVE1MTmFtZXM6
OmlmcmFtZSgpKTsKKyAgICAgICAgCiAvLyBmb3JtIGVsZW1lbnRzCi0gICAgY2FzZSBJRF9GT1JN
OgorICAgIGVsc2UgaWYgKHQtPnRhZ05hbWUgPT0gSFRNTE5hbWVzOjpmb3JtKCkpIHsKICAgICAg
ICAgLy8gT25seSBjcmVhdGUgYSBuZXcgZm9ybSBpZiB3ZSdyZSBub3QgYWxyZWFkeSBpbnNpZGUg
b25lLgogICAgICAgICAvLyBUaGlzIGlzIGNvbnNpc3RlbnQgd2l0aCBvdGhlciBicm93c2Vycycg
YmVoYXZpb3IuCiAgICAgICAgIGlmIChmb3JtKQogICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
ICAgIGZvcm0gPSBuZXcgSFRNTEZvcm1FbGVtZW50SW1wbChkb2N1bWVudCk7Ci0gICAgICAgIHJl
dHVybiBmb3JtOwotICAgIGNhc2UgSURfQlVUVE9OOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxC
dXR0b25FbGVtZW50SW1wbChkb2N1bWVudCwgZm9ybSk7Ci0gICAgY2FzZSBJRF9GSUVMRFNFVDoK
LSAgICAgICAgcmV0dXJuIG5ldyBIVE1MRmllbGRTZXRFbGVtZW50SW1wbChkb2N1bWVudCwgZm9y
bSk7Ci0gICAgY2FzZSBJRF9JTlBVVDoKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MSW5wdXRFbGVt
ZW50SW1wbChkb2N1bWVudCwgZm9ybSk7Ci0gICAgY2FzZSBJRF9JU0lOREVYOiB7CisgICAgfSBl
bHNlIGlmICh0LT50YWdOYW1lID09IEhUTUxOYW1lczo6aXNpbmRleCgpKSB7CiAgICAgICAgIE5v
ZGVJbXBsICpuID0gaGFuZGxlSXNpbmRleCh0KTsKICAgICAgICAgaWYgKCFpbkJvZHkpIHsKICAg
ICAgICAgICAgIGlmIChpc2luZGV4KQpAQCAtODQ4LDI2MiArNjc0LDIyMiBAQCBOb2RlSW1wbCAq
S0hUTUxQYXJzZXI6OmdldEVsZW1lbnQoVG9rZW4qCiAgICAgICAgIHQtPmZsYXQgPSB0cnVlOwog
ICAgICAgICByZXR1cm4gbjsKICAgICB9Ci0gICAgY2FzZSBJRF9LRVlHRU46Ci0gICAgICAgIHJl
dHVybiBuZXcgSFRNTEtleWdlbkVsZW1lbnRJbXBsKGRvY3VtZW50LCBmb3JtKTsKLSAgICBjYXNl
IElEX0xFR0VORDoKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MTGVnZW5kRWxlbWVudEltcGwoZG9j
dW1lbnQsIGZvcm0pOwotICAgIGNhc2UgSURfT1BUR1JPVVA6Ci0gICAgICAgIHJldHVybiBuZXcg
SFRNTE9wdEdyb3VwRWxlbWVudEltcGwoZG9jdW1lbnQsIGZvcm0pOwotICAgIGNhc2UgSURfT1BU
SU9OOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxPcHRpb25FbGVtZW50SW1wbChkb2N1bWVudCwg
Zm9ybSk7Ci0gICAgY2FzZSBJRF9TRUxFQ1Q6CisgICAgZWxzZSBpZiAodC0+dGFnTmFtZSA9PSBI
VE1MTmFtZXM6OnNlbGVjdCgpKQogICAgICAgICBpblNlbGVjdCA9IHRydWU7Ci0gICAgICAgIHJl
dHVybiBuZXcgSFRNTFNlbGVjdEVsZW1lbnRJbXBsKGRvY3VtZW50LCBmb3JtKTsKLSAgICBjYXNl
IElEX1RFWFRBUkVBOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBs
KGRvY3VtZW50LCBmb3JtKTsKIAogLy8gbGlzdHMKLSAgICBjYXNlIElEX0REOgotICAgICAgICBw
b3BCbG9jayhJRF9EVCk7Ci0gICAgICAgIHBvcEJsb2NrKElEX0REKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBJRF9EVDoKLSAgICAgICAgcG9wQmxvY2soSURfREQpOwotICAgICAgICBwb3BC
bG9jayhJRF9EVCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSURfTEk6Ci0gICAgICAgIHBv
cEJsb2NrKElEX0xJKTsKLSAgICAgICAgYnJlYWs7Ci0KLS8vIGFuY2hvcgotICAgIGNhc2UgSURf
QToKKyAgICBlbHNlIGlmICh0LT50YWdOYW1lID09IEhUTUxOYW1lczo6ZGQoKSkgeworICAgICAg
ICBwb3BCbG9jayhIVE1MTmFtZXM6OmR0KCkpOworICAgICAgICBwb3BCbG9jayhIVE1MTmFtZXM6
OmRkKCkpOworICAgIH0KKyAgICBlbHNlIGlmICh0LT50YWdOYW1lID09IEhUTUxOYW1lczo6ZHQo
KSkgeworICAgICAgICBwb3BCbG9jayhIVE1MTmFtZXM6OmRkKCkpOworICAgICAgICBwb3BCbG9j
ayhIVE1MTmFtZXM6OmR0KCkpOworICAgIH0KKyAgICBlbHNlIGlmICh0LT50YWdOYW1lID09IEhU
TUxOYW1lczo6bGkoKSkKKyAgICAgICAgcG9wQmxvY2sodC0+dGFnTmFtZSk7CisgICAgZWxzZSBp
ZiAodC0+dGFnTmFtZSA9PSBIVE1MTmFtZXM6OmEoKSkgLy8gYW5jaG9yCiAgICAgICAgIC8vIE5l
dmVyIGFsbG93IG5lc3RlZCA8YT5zLgotICAgICAgICBwb3BCbG9jayhJRF9BKTsKLSAgICAgICAg
YnJlYWs7Ci0KLS8vIGltYWdlcwotICAgIGNhc2UgSURfSU1HOgotICAgICAgICByZXR1cm4gbmV3
IEhUTUxJbWFnZUVsZW1lbnRJbXBsKGRvY3VtZW50LCBmb3JtKTsKLSAgICBjYXNlIElEX01BUDoK
LSAgICAgICAgbWFwID0gbmV3IEhUTUxNYXBFbGVtZW50SW1wbChkb2N1bWVudCk7Ci0gICAgICAg
IHJldHVybiBtYXA7CisgICAgICAgIHBvcEJsb2NrKHQtPnRhZ05hbWUpOwogCiAvLyB0YWJsZXMK
LSAgICBjYXNlIElEX1RSOgotICAgICAgICBwb3BCbG9jayhJRF9UUik7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgSURfVEQ6Ci0gICAgY2FzZSBJRF9USDoKLSAgICAgICAgcG9wQmxvY2soSURf
VEgpOwotICAgICAgICBwb3BCbG9jayhJRF9URCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
SURfVEJPRFk6Ci0gICAgY2FzZSBJRF9USEVBRDoKLSAgICBjYXNlIElEX1RGT09UOgotICAgICAg
ICBwb3BCbG9jayhJRF9USEVBRCk7Ci0gICAgICAgIHBvcEJsb2NrKElEX1RCT0RZKTsKLSAgICAg
ICAgcG9wQmxvY2soSURfVEZPT1QpOwotICAgICAgICBicmVhazsKKyAgICBlbHNlIGlmICh0LT50
YWdOYW1lID09IEhUTUxOYW1lczo6dHIoKSkKKyAgICAgICAgcG9wQmxvY2sodC0+dGFnTmFtZSk7
CisgICAgZWxzZSBpZiAodC0+dGFnTmFtZSA9PSBIVE1MTmFtZXM6OnRkKCkgfHwgdC0+dGFnTmFt
ZSA9PSBIVE1MTmFtZXM6OnRoKCkpIHsKKyAgICAgICAgcG9wQmxvY2soSFRNTE5hbWVzOjp0aCgp
KTsKKyAgICAgICAgcG9wQmxvY2soSFRNTE5hbWVzOjp0ZCgpKTsKKyAgICB9IGVsc2UgaWYgKHQt
PnRhZ05hbWUgPT0gSFRNTE5hbWVzOjp0Ym9keSgpIHx8IHQtPnRhZ05hbWUgPT0gSFRNTE5hbWVz
Ojp0aGVhZCgpIHx8IHQtPnRhZ05hbWUgPT0gSFRNTE5hbWVzOjp0Zm9vdCgpKSB7CisgICAgICAg
IHBvcEJsb2NrKEhUTUxOYW1lczo6dGhlYWQoKSk7CisgICAgICAgIHBvcEJsb2NrKEhUTUxOYW1l
czo6dGJvZHkoKSk7CisgICAgICAgIHBvcEJsb2NrKEhUTUxOYW1lczo6dGZvb3QoKSk7CisgICAg
fQogCiAvLyBlbGVtZW50cyB3aXRoIG5vIHNwZWNpYWwgcmVwcmVzZW50YXRpb24gaW4gdGhlIERP
TQotICAgIGNhc2UgSURfVFQ6Ci0gICAgY2FzZSBJRF9VOgotICAgIGNhc2UgSURfQjoKLSAgICBj
YXNlIElEX0k6Ci0gICAgY2FzZSBJRF9TOgotICAgIGNhc2UgSURfU1RSSUtFOgotICAgIGNhc2Ug
SURfQklHOgotICAgIGNhc2UgSURfU01BTEw6Ci0gICAgICAgIGlmICghYWxsb3dOZXN0ZWRSZWR1
bmRhbnRUYWcodC0+aWQpKQorICAgIGVsc2UgaWYgKHQtPnRhZ05hbWUgPT0gSFRNTE5hbWVzOjp0
dCgpIHx8IHQtPnRhZ05hbWUgPT0gSFRNTE5hbWVzOjp1KCkgfHwgdC0+dGFnTmFtZSA9PSBIVE1M
TmFtZXM6OmIoKSB8fAorICAgICAgICAgICAgIHQtPnRhZ05hbWUgPT0gSFRNTE5hbWVzOjppKCkg
fHwgdC0+dGFnTmFtZSA9PSBIVE1MTmFtZXM6OnMoKSB8fCB0LT50YWdOYW1lID09IEhUTUxOYW1l
czo6c3RyaWtlKCkgfHwKKyAgICAgICAgICAgICB0LT50YWdOYW1lID09IEhUTUxOYW1lczo6Ymln
KCkgfHwgdC0+dGFnTmFtZSA9PSBIVE1MTmFtZXM6OnNtYWxsKCkpIHsKKyAgICAgICAgaWYgKCFh
bGxvd05lc3RlZFJlZHVuZGFudFRhZyh0LT50YWdOYW1lKSkKICAgICAgICAgICAgIHJldHVybiAw
OwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgSURfTk9CUjoKLSAgICBjYXNlIElEX1dCUjoK
LSAgICAgICAgcG9wQmxvY2sodC0+aWQpOyAvLyBEb24ndCBhbGxvdyBuZXN0ZWQgPG5vYnI+IG9y
IDx3YnI+Ci0gICAgICAgIGJyZWFrOworICAgIH0KKyAgICBlbHNlIGlmICh0LT50YWdOYW1lID09
IEhUTUxOYW1lczo6bm9icigpIHx8IHQtPnRhZ05hbWUgPT0gSFRNTE5hbWVzOjp3YnIoKSkKKyAg
ICAgICAgcG9wQmxvY2sodC0+dGFnTmFtZSk7IC8vIERvbid0IGFsbG93IG5lc3RlZCA8bm9icj4g
b3IgPHdicj4KIAogLy8gdGhlc2UgYXJlIHNwZWNpYWwsIGFuZCBub3JtYWxseSBub3QgcmVuZGVy
ZWQKLSAgICBjYXNlIElEX05PRU1CRUQ6Ci0gICAgICAgIGRpc2NhcmRfdW50aWwgPSBJRF9OT0VN
QkVEICsgSURfQ0xPU0VfVEFHOworICAgIGVsc2UgaWYgKHQtPnRhZ05hbWUgPT0gSFRNTE5hbWVz
Ojpub2VtYmVkKCkpIHsKKyAgICAgICAgc2V0U2tpcE1vZGUoSFRNTE5hbWVzOjpub2VtYmVkKCkp
OwogICAgICAgICByZXR1cm4gMDsKLSAgICBjYXNlIElEX05PRlJBTUVTOgotICAgICAgICBkaXNj
YXJkX3VudGlsID0gSURfTk9GUkFNRVMgKyBJRF9DTE9TRV9UQUc7CisgICAgfQorICAgIGVsc2Ug
aWYgKHQtPnRhZ05hbWUgPT0gSFRNTE5hbWVzOjpub2ZyYW1lcygpKSB7CisgICAgICAgIHNldFNr
aXBNb2RlKEhUTUxOYW1lczo6bm9mcmFtZXMoKSk7CiAgICAgICAgIHJldHVybiAwOwotICAgIGNh
c2UgSURfTk9TQ1JJUFQ6CisgICAgfQorICAgIGVsc2UgaWYgKHQtPnRhZ05hbWUgPT0gSFRNTE5h
bWVzOjpub3NjcmlwdCgpKSB7CiAgICAgICAgIGlmIChIVE1MV2lkZ2V0ICYmIEhUTUxXaWRnZXQt
PnBhcnQoKS0+alNjcmlwdEVuYWJsZWQoKSkKLSAgICAgICAgICAgIGRpc2NhcmRfdW50aWwgPSBJ
RF9OT1NDUklQVCArIElEX0NMT1NFX1RBRzsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgY2FzZSBJ
RF9OT0xBWUVSOgotICAgICAgICAvL2Rpc2NhcmRfdW50aWwgPSBJRF9OT0xBWUVSICsgSURfQ0xP
U0VfVEFHOworICAgICAgICAgICAgc2V0U2tpcE1vZGUoSFRNTE5hbWVzOjpub3NjcmlwdCgpKTsK
ICAgICAgICAgcmV0dXJuIDA7Ci0gICAgY2FzZSBJRF9URVhUOgotICAgICAgICByZXR1cm4gbmV3
IFRleHRJbXBsKGRvY3VtZW50LCB0LT50ZXh0KTsKLSAgICBjYXNlIElEX0NPTU1FTlQ6Ci0gICAg
ICAgIGlmICghaW5jbHVkZXNDb21tZW50c0luRE9NKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBJRF9TQ1JJUFQ6Ci0gICAgICAgIHsKLSAgICAgICAg
ICAgIEhUTUxTY3JpcHRFbGVtZW50SW1wbCAqc2NyaXB0RWxlbWVudCA9IG5ldyBIVE1MU2NyaXB0
RWxlbWVudEltcGwoZG9jdW1lbnQpOwotICAgICAgICAgICAgc2NyaXB0RWxlbWVudC0+c2V0Q3Jl
YXRlZEJ5UGFyc2VyKHRydWUpOwotICAgICAgICAgICAgcmV0dXJuIHNjcmlwdEVsZW1lbnQ7Ci0g
ICAgICAgIH0KICAgICB9Ci0KLSAgICByZXR1cm4gZG9jdW1lbnQtPmRvY3VtZW50KCktPmNyZWF0
ZUhUTUxFbGVtZW50KHQtPmlkKTsKKyAgICBlbHNlIGlmICh0LT50YWdOYW1lID09IEhUTUxOYW1l
czo6bm9sYXllcigpKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICBFbGVtZW50SW1wbCog
cmVzdWx0ID0gSFRNTEVsZW1lbnRGYWN0b3J5OjpjcmVhdGVIVE1MRWxlbWVudCh0LT50YWdOYW1l
LCBkb2MoKSwgZm9ybSk7CisgICAgaWYgKHQtPnRhZ05hbWUgPT0gSFRNTE5hbWVzOjpmb3JtKCkp
CisgICAgICAgIGZvcm0gPSBzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnRJbXBsKj4ocmVzdWx0
KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAjZGVmaW5lIE1BWF9SRURVTkRBTlQgMjAKIAot
Ym9vbCBLSFRNTFBhcnNlcjo6YWxsb3dOZXN0ZWRSZWR1bmRhbnRUYWcoaW50IF9pZCkKK2Jvb2wg
SFRNTFBhcnNlcjo6YWxsb3dOZXN0ZWRSZWR1bmRhbnRUYWcoY29uc3QgQXRvbWljU3RyaW5nJiBf
dGFnTmFtZSkKIHsKICAgICAvLyB3d3cubGljZW8uZWR1Lm14IGlzIGFuIGV4YW1wbGUgb2YgYSBz
aXRlIHRoYXQgYWNoaWV2ZXMgYSBsZXZlbCBvZiBuZXN0aW5nIG9mCiAgICAgLy8gYWJvdXQgMTUw
MCB0YWdzLCBhbGwgZnJvbSBhIGJ1bmNoIG9mIDxiPnMuICBXZSB3aWxsIG9ubHkgYWxsb3cgYXQg
bW9zdCAyMAogICAgIC8vIG5lc3RlZCB0YWdzIG9mIHRoZSBzYW1lIHR5cGUgYmVmb3JlIGp1c3Qg
aWdub3JpbmcgdGhlbSBhbGwgdG9nZXRoZXIuCiAgICAgaW50IGkgPSAwOwogICAgIGZvciAoSFRN
TFN0YWNrRWxlbSogY3VyciA9IGJsb2NrU3RhY2s7Ci0gICAgICAgICBpIDwgTUFYX1JFRFVOREFO
VCAmJiBjdXJyICYmIGN1cnItPmlkID09IF9pZDsKKyAgICAgICAgIGkgPCBNQVhfUkVEVU5EQU5U
ICYmIGN1cnIgJiYgY3Vyci0+dGFnTmFtZSA9PSBfdGFnTmFtZTsKICAgICAgICAgIGN1cnIgPSBj
dXJyLT5uZXh0LCBpKyspOwogICAgIHJldHVybiBpICE9IE1BWF9SRURVTkRBTlQ7CiB9CiAKLXZv
aWQgS0hUTUxQYXJzZXI6OnByb2Nlc3NDbG9zZVRhZyhUb2tlbiAqdCkKK3ZvaWQgSFRNTFBhcnNl
cjo6cHJvY2Vzc0Nsb3NlVGFnKFRva2VuICp0KQogewotICAgIC8vIHN1cHBvcnQgZm9yIHJlYWxs
eSBicm9rZW4gaHRtbC4gQ2FuJ3QgYmVsaWV2ZSBJJ20gc3VwcG9ydGluZyBzdWNoIGNyYXAgKGxh
cnMpCi0gICAgc3dpdGNoKHQtPmlkKQotICAgIHsKLSAgICBjYXNlIElEX0hUTUwrSURfQ0xPU0Vf
VEFHOgotICAgIGNhc2UgSURfQk9EWStJRF9DTE9TRV9UQUc6Ci0gICAgICAgIC8vIHdlIG5ldmVy
IGNsb3NlIHRoZSBib2R5IHRhZywgc2luY2Ugc29tZSBzdHVwaWQgd2ViIHBhZ2VzIGNsb3NlIGl0
IGJlZm9yZSB0aGUgYWN0dWFsIGVuZCBvZiB0aGUgZG9jLgotICAgICAgICAvLyBsZXQncyByZWx5
IG9uIHRoZSBlbmQoKSBjYWxsIHRvIGNsb3NlIHRoaW5ncy4KKyAgICAvLyBTdXBwb3J0IGZvciBy
ZWFsbHkgYnJva2VuIGh0bWwuCisgICAgLy8gd2UgbmV2ZXIgY2xvc2UgdGhlIGJvZHkgdGFnLCBz
aW5jZSBzb21lIHN0dXBpZCB3ZWIgcGFnZXMgY2xvc2UgaXQgYmVmb3JlIHRoZSBhY3R1YWwgZW5k
IG9mIHRoZSBkb2MuCisgICAgLy8gbGV0J3MgcmVseSBvbiB0aGUgZW5kKCkgY2FsbCB0byBjbG9z
ZSB0aGluZ3MuCisgICAgaWYgKHQtPnRhZ05hbWUgPT0gSFRNTE5hbWVzOjpodG1sKCkgfHwgdC0+
dGFnTmFtZSA9PSBIVE1MTmFtZXM6OmJvZHkoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGNhc2Ug
SURfRk9STStJRF9DTE9TRV9UQUc6CisgICAgCisgICAgaWYgKHQtPnRhZ05hbWUgPT0gSFRNTE5h
bWVzOjpmb3JtKCkpCiAgICAgICAgIGZvcm0gPSAwOwotICAgICAgICAvLyB0aGlzIG9uZSBpcyB0
byBnZXQgdGhlIHJpZ2h0IHN0eWxlIG9uIHRoZSBib2R5IGVsZW1lbnQKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBJRF9NQVArSURfQ0xPU0VfVEFHOgorICAgIGVsc2UgaWYgKHQtPnRhZ05hbWUg
PT0gSFRNTE5hbWVzOjptYXAoKSkKICAgICAgICAgbWFwID0gMDsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBJRF9TRUxFQ1QrSURfQ0xPU0VfVEFHOgorICAgIGVsc2UgaWYgKHQtPnRhZ05hbWUg
PT0gSFRNTE5hbWVzOjpzZWxlY3QoKSkKICAgICAgICAgaW5TZWxlY3QgPSBmYWxzZTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0jaWZkZWYg
UEFSU0VSX0RFQlVHCi0gICAga2REZWJ1ZyggNjAzNSApIDw8ICJhZGRlZCB0aGUgZm9sbG93aW5n
IGNoaWxkcyB0byAiIDw8IGN1cnJlbnQtPm5vZGVOYW1lKCkuc3RyaW5nKCkgPDwgZW5kbDsKLSAg
ICBOb2RlSW1wbCAqY2hpbGQgPSBjdXJyZW50LT5maXJzdENoaWxkKCk7Ci0gICAgd2hpbGUoY2hp
bGQgIT0gMCkKLSAgICB7Ci0gICAgICAgIGtkRGVidWcoIDYwMzUgKSA8PCAiICAgICIgPDwgY2hp
bGQtPm5vZGVOYW1lKCkuc3RyaW5nKCkgPDwgZW5kbDsKLSAgICAgICAgY2hpbGQgPSBjaGlsZC0+
bmV4dFNpYmxpbmcoKTsKLSAgICB9Ci0jZW5kaWYKKyAgICAgICAgCiAgICAgSFRNTFN0YWNrRWxl
bSogb2xkRWxlbSA9IGJsb2NrU3RhY2s7Ci0gICAgcG9wQmxvY2sodC0+aWQtSURfQ0xPU0VfVEFH
KTsKLSAgICBpZiAob2xkRWxlbSA9PSBibG9ja1N0YWNrICYmIHQtPmlkID09IElEX1ArSURfQ0xP
U0VfVEFHKSB7CisgICAgcG9wQmxvY2sodC0+dGFnTmFtZSk7CisgICAgaWYgKG9sZEVsZW0gPT0g
YmxvY2tTdGFjayAmJiB0LT50YWdOYW1lID09IEhUTUxOYW1lczo6cCgpKSB7CiAgICAgICAgIC8v
IFdlIGVuY291bnRlcmVkIGEgc3RyYXkgPC9wPi4gIEFtYXppbmdseSBHZWNrbywgV2luSUUsIGFu
ZCBNYWNJRSBhbGwgdHJlYXQKICAgICAgICAgLy8gdGhpcyBhcyBhIHZhbGlkIGJyZWFrLCBpLmUu
LCA8cD48L3A+LiAgU28gZ28gYWhlYWQgYW5kIG1ha2UgdGhlIGVtcHR5CiAgICAgICAgIC8vIHBh
cmFncmFwaC4KLSAgICAgICAgdC0+aWQtPUlEX0NMT1NFX1RBRzsKKyAgICAgICAgdC0+YmVnaW5U
YWcgPSB0cnVlOwogICAgICAgICBwYXJzZVRva2VuKHQpOwotICAgICAgICBwb3BCbG9jayhJRF9Q
KTsKKyAgICAgICAgcG9wQmxvY2sodC0+dGFnTmFtZSk7CiAgICAgfQogI2lmZGVmIFBBUlNFUl9E
RUJVRwogICAgIGtkRGVidWcoIDYwMzUgKSA8PCAiY2xvc2VUYWcgLS0+IGN1cnJlbnQgPSAiIDw8
IGN1cnJlbnQtPm5vZGVOYW1lKCkuc3RyaW5nKCkgPDwgZW5kbDsKICNlbmRpZgogfQogCi1ib29s
IEtIVE1MUGFyc2VyOjppc0hlYWRlclRhZyhpbnQgX2lkKQorYm9vbCBIVE1MUGFyc2VyOjppc0hl
YWRlclRhZyhjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUpCiB7Ci0gICAgc3dpdGNoIChfaWQp
IHsKLSAgICAgICAgY2FzZSBJRF9IMToKLSAgICAgICAgY2FzZSBJRF9IMjoKLSAgICAgICAgY2Fz
ZSBJRF9IMzoKLSAgICAgICAgY2FzZSBJRF9INDoKLSAgICAgICAgY2FzZSBJRF9INToKLSAgICAg
ICAgY2FzZSBJRF9INjoKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHN0YXRpYyBIYXNoU2V0PERPTVN0cmlu
Z0ltcGwqLCBQb2ludGVySGFzaDxET01TdHJpbmdJbXBsKj4gPiBoZWFkZXJUYWdzOworICAgIGlm
IChoZWFkZXJUYWdzLmlzRW1wdHkoKSkgeworICAgICAgICBoZWFkZXJUYWdzLmluc2VydChIVE1M
TmFtZXM6OmgxKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICBoZWFkZXJUYWdzLmluc2VydChI
VE1MTmFtZXM6OmgyKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICBoZWFkZXJUYWdzLmluc2Vy
dChIVE1MTmFtZXM6OmgzKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICBoZWFkZXJUYWdzLmlu
c2VydChIVE1MTmFtZXM6Omg0KCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICBoZWFkZXJUYWdz
Lmluc2VydChIVE1MTmFtZXM6Omg1KCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICBoZWFkZXJU
YWdzLmluc2VydChIVE1MTmFtZXM6Omg2KCkubG9jYWxOYW1lUHRyKCkpOwogICAgIH0KKyAgICAK
KyAgICByZXR1cm4gaGVhZGVyVGFncy5jb250YWlucyh0YWdOYW1lLmltcGxlbWVudGF0aW9uKCkp
OwogfQogCi12b2lkIEtIVE1MUGFyc2VyOjpwb3BOZXN0ZWRIZWFkZXJUYWcoKQordm9pZCBIVE1M
UGFyc2VyOjpwb3BOZXN0ZWRIZWFkZXJUYWcoKQogewogICAgIC8vIFRoaXMgZnVuY3Rpb24gb25s
eSBjYXJlcyBhYm91dCBjaGVja2luZyBmb3IgbmVzdGVkIGhlYWRlcnMgdGhhdCBoYXZlIG9ubHkg
aW5saW5lcyBpbiBiZXR3ZWVuIHRoZW0uCiAgICAgTm9kZUltcGwqIGN1cnJOb2RlID0gY3VycmVu
dDsKICAgICBmb3IgKEhUTUxTdGFja0VsZW0qIGN1cnIgPSBibG9ja1N0YWNrOyBjdXJyOyBjdXJy
ID0gY3Vyci0+bmV4dCkgewotICAgICAgICBpZiAoaXNIZWFkZXJUYWcoY3Vyci0+aWQpKSB7Ci0g
ICAgICAgICAgICBwb3BCbG9jayhjdXJyLT5pZCk7CisgICAgICAgIGlmIChpc0hlYWRlclRhZyhj
dXJyLT50YWdOYW1lKSkgeworICAgICAgICAgICAgcG9wQmxvY2soY3Vyci0+dGFnTmFtZSk7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGN1cnJOb2RlICYmICFj
dXJyTm9kZS0+aXNJbmxpbmUoKSkKKyAgICAgICAgaWYgKGN1cnJOb2RlICYmICFpc0lubGluZShj
dXJyTm9kZSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGN1cnJOb2RlID0gY3Vyci0+
bm9kZTsKICAgICB9CiB9CiAKLWJvb2wgS0hUTUxQYXJzZXI6OmlzUmVzaWR1YWxTdHlsZVRhZyhp
bnQgX2lkKQorYm9vbCBIVE1MUGFyc2VyOjppc0lubGluZShET006Ok5vZGVJbXBsKiBub2RlKSBj
b25zdAogewotICAgIHN3aXRjaCAoX2lkKSB7Ci0gICAgICAgIGNhc2UgSURfQToKLSAgICAgICAg
Y2FzZSBJRF9GT05UOgotICAgICAgICBjYXNlIElEX1RUOgotICAgICAgICBjYXNlIElEX1U6Ci0g
ICAgICAgIGNhc2UgSURfQjoKLSAgICAgICAgY2FzZSBJRF9JOgotICAgICAgICBjYXNlIElEX1M6
Ci0gICAgICAgIGNhc2UgSURfU1RSSUtFOgotICAgICAgICBjYXNlIElEX0JJRzoKLSAgICAgICAg
Y2FzZSBJRF9TTUFMTDoKLSAgICAgICAgY2FzZSBJRF9FTToKLSAgICAgICAgY2FzZSBJRF9TVFJP
Tkc6Ci0gICAgICAgIGNhc2UgSURfREZOOgotICAgICAgICBjYXNlIElEX0NPREU6Ci0gICAgICAg
IGNhc2UgSURfU0FNUDoKLSAgICAgICAgY2FzZSBJRF9LQkQ6Ci0gICAgICAgIGNhc2UgSURfVkFS
OgorICAgIGlmIChub2RlLT5pc1RleHROb2RlKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisg
ICAgaWYgKG5vZGUtPmlzSFRNTEVsZW1lbnQoKSkgeworICAgICAgICBIVE1MRWxlbWVudEltcGwq
IGUgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwqPihub2RlKTsKKyAgICAgICAgaWYgKGUt
Pmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmEoKSkgfHwgZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1l
czo6Zm9udCgpKSB8fCBlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0dCgpKSB8fAorICAgICAg
ICAgICAgZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dSgpKSB8fCBlLT5oYXNMb2NhbE5hbWUo
SFRNTE5hbWVzOjpiKCkpIHx8IGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmkoKSkgfHwKKyAg
ICAgICAgICAgIGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnMoKSkgfHwgZS0+aGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6c3RyaWtlKCkpIHx8IGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmJp
ZygpKSB8fAorICAgICAgICAgICAgZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6c21hbGwoKSkg
fHwgZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6ZW0oKSkgfHwgZS0+aGFzTG9jYWxOYW1lKEhU
TUxOYW1lczo6c3Ryb25nKCkpIHx8CisgICAgICAgICAgICBlLT5oYXNMb2NhbE5hbWUoSFRNTE5h
bWVzOjpkZm4oKSkgfHwgZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6Y29kZSgpKSB8fCBlLT5o
YXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpzYW1wKCkpIHx8CisgICAgICAgICAgICBlLT5oYXNMb2Nh
bE5hbWUoSFRNTE5hbWVzOjprYmQoKSkgfHwgZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dmFy
KCkpIHx8IGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmNpdGUoKSkgfHwKKyAgICAgICAgICAg
IGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmFiYnIoKSkgfHwgZS0+aGFzTG9jYWxOYW1lKEhU
TUxOYW1lczo6YWNyb255bSgpKSB8fCBlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpzdWIoKSkg
fHwKKyAgICAgICAgICAgIGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnN1cCgpKSB8fCBlLT5o
YXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpzcGFuKCkpIHx8IGUtPmhhc0xvY2FsTmFtZShIVE1MTmFt
ZXM6Om5vYnIoKSkgfHwKKyAgICAgICAgICAgIGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Ondi
cigpKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KKyAgICAKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAK
LWJvb2wgS0hUTUxQYXJzZXI6OmlzQWZmZWN0ZWRCeVJlc2lkdWFsU3R5bGUoaW50IF9pZCkKK2Jv
b2wgSFRNTFBhcnNlcjo6aXNSZXNpZHVhbFN0eWxlVGFnKGNvbnN0IEF0b21pY1N0cmluZyYgdGFn
TmFtZSkKIHsKLSAgICBpZiAoaXNSZXNpZHVhbFN0eWxlVGFnKF9pZCkpCisgICAgc3RhdGljIEhh
c2hTZXQ8RE9NU3RyaW5nSW1wbCosIFBvaW50ZXJIYXNoPERPTVN0cmluZ0ltcGwqPiA+IHJlc2lk
dWFsU3R5bGVUYWdzOworICAgIGlmIChyZXNpZHVhbFN0eWxlVGFncy5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgcmVzaWR1YWxTdHlsZVRhZ3MuaW5zZXJ0KEhUTUxOYW1lczo6YSgpLmxvY2FsTmFtZVB0
cigpKTsKKyAgICAgICAgcmVzaWR1YWxTdHlsZVRhZ3MuaW5zZXJ0KEhUTUxOYW1lczo6Zm9udCgp
LmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgcmVzaWR1YWxTdHlsZVRhZ3MuaW5zZXJ0KEhUTUxO
YW1lczo6dHQoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHJlc2lkdWFsU3R5bGVUYWdzLmlu
c2VydChIVE1MTmFtZXM6OnUoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHJlc2lkdWFsU3R5
bGVUYWdzLmluc2VydChIVE1MTmFtZXM6OmIoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHJl
c2lkdWFsU3R5bGVUYWdzLmluc2VydChIVE1MTmFtZXM6OmkoKS5sb2NhbE5hbWVQdHIoKSk7Cisg
ICAgICAgIHJlc2lkdWFsU3R5bGVUYWdzLmluc2VydChIVE1MTmFtZXM6OnMoKS5sb2NhbE5hbWVQ
dHIoKSk7CisgICAgICAgIHJlc2lkdWFsU3R5bGVUYWdzLmluc2VydChIVE1MTmFtZXM6OnN0cmlr
ZSgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgcmVzaWR1YWxTdHlsZVRhZ3MuaW5zZXJ0KEhU
TUxOYW1lczo6YmlnKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICByZXNpZHVhbFN0eWxlVGFn
cy5pbnNlcnQoSFRNTE5hbWVzOjpzbWFsbCgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgcmVz
aWR1YWxTdHlsZVRhZ3MuaW5zZXJ0KEhUTUxOYW1lczo6ZW0oKS5sb2NhbE5hbWVQdHIoKSk7Cisg
ICAgICAgIHJlc2lkdWFsU3R5bGVUYWdzLmluc2VydChIVE1MTmFtZXM6OnN0cm9uZygpLmxvY2Fs
TmFtZVB0cigpKTsKKyAgICAgICAgcmVzaWR1YWxTdHlsZVRhZ3MuaW5zZXJ0KEhUTUxOYW1lczo6
ZGZuKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICByZXNpZHVhbFN0eWxlVGFncy5pbnNlcnQo
SFRNTE5hbWVzOjpjb2RlKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICByZXNpZHVhbFN0eWxl
VGFncy5pbnNlcnQoSFRNTE5hbWVzOjpzYW1wKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICBy
ZXNpZHVhbFN0eWxlVGFncy5pbnNlcnQoSFRNTE5hbWVzOjprYmQoKS5sb2NhbE5hbWVQdHIoKSk7
CisgICAgICAgIHJlc2lkdWFsU3R5bGVUYWdzLmluc2VydChIVE1MTmFtZXM6OnZhcigpLmxvY2Fs
TmFtZVB0cigpKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIHJlc2lkdWFsU3R5bGVUYWdzLmNv
bnRhaW5zKHRhZ05hbWUuaW1wbGVtZW50YXRpb24oKSk7Cit9CisKK2Jvb2wgSFRNTFBhcnNlcjo6
aXNBZmZlY3RlZEJ5UmVzaWR1YWxTdHlsZShjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUpCit7
CisgICAgaWYgKGlzUmVzaWR1YWxTdHlsZVRhZyh0YWdOYW1lKSkKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgCi0gICAgc3dpdGNoIChfaWQpIHsKLSAgICAgICAgY2FzZSBJRF9QOgotICAgICAg
ICBjYXNlIElEX0RJVjoKLSAgICAgICAgY2FzZSBJRF9CTE9DS1FVT1RFOgotICAgICAgICBjYXNl
IElEX0FERFJFU1M6Ci0gICAgICAgIGNhc2UgSURfSDE6Ci0gICAgICAgIGNhc2UgSURfSDI6Ci0g
ICAgICAgIGNhc2UgSURfSDM6Ci0gICAgICAgIGNhc2UgSURfSDQ6Ci0gICAgICAgIGNhc2UgSURf
SDU6Ci0gICAgICAgIGNhc2UgSURfSDY6Ci0gICAgICAgIGNhc2UgSURfQ0VOVEVSOgotICAgICAg
ICBjYXNlIElEX1VMOgotICAgICAgICBjYXNlIElEX09MOgotICAgICAgICBjYXNlIElEX0xJOgot
ICAgICAgICBjYXNlIElEX0RMOgotICAgICAgICBjYXNlIElEX0RUOgotICAgICAgICBjYXNlIElE
X0REOgotICAgICAgICBjYXNlIElEX1BSRToKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHN0YXRpYyBIYXNo
U2V0PERPTVN0cmluZ0ltcGwqLCBQb2ludGVySGFzaDxET01TdHJpbmdJbXBsKj4gPiBhZmZlY3Rl
ZEJsb2NrVGFnczsKKyAgICBpZiAoYWZmZWN0ZWRCbG9ja1RhZ3MuaXNFbXB0eSgpKSB7CisgICAg
ICAgIGFmZmVjdGVkQmxvY2tUYWdzLmluc2VydChIVE1MTmFtZXM6OmgxKCkubG9jYWxOYW1lUHRy
KCkpOworICAgICAgICBhZmZlY3RlZEJsb2NrVGFncy5pbnNlcnQoSFRNTE5hbWVzOjpoMigpLmxv
Y2FsTmFtZVB0cigpKTsKKyAgICAgICAgYWZmZWN0ZWRCbG9ja1RhZ3MuaW5zZXJ0KEhUTUxOYW1l
czo6aDMoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIGFmZmVjdGVkQmxvY2tUYWdzLmluc2Vy
dChIVE1MTmFtZXM6Omg0KCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICBhZmZlY3RlZEJsb2Nr
VGFncy5pbnNlcnQoSFRNTE5hbWVzOjpoNSgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgYWZm
ZWN0ZWRCbG9ja1RhZ3MuaW5zZXJ0KEhUTUxOYW1lczo6aDYoKS5sb2NhbE5hbWVQdHIoKSk7Cisg
ICAgICAgIGFmZmVjdGVkQmxvY2tUYWdzLmluc2VydChIVE1MTmFtZXM6OnAoKS5sb2NhbE5hbWVQ
dHIoKSk7CisgICAgICAgIGFmZmVjdGVkQmxvY2tUYWdzLmluc2VydChIVE1MTmFtZXM6OmRpdigp
LmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgYWZmZWN0ZWRCbG9ja1RhZ3MuaW5zZXJ0KEhUTUxO
YW1lczo6YmxvY2txdW90ZSgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgYWZmZWN0ZWRCbG9j
a1RhZ3MuaW5zZXJ0KEhUTUxOYW1lczo6YWRkcmVzcygpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAg
ICAgYWZmZWN0ZWRCbG9ja1RhZ3MuaW5zZXJ0KEhUTUxOYW1lczo6Y2VudGVyKCkubG9jYWxOYW1l
UHRyKCkpOworICAgICAgICBhZmZlY3RlZEJsb2NrVGFncy5pbnNlcnQoSFRNTE5hbWVzOjp1bCgp
LmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgYWZmZWN0ZWRCbG9ja1RhZ3MuaW5zZXJ0KEhUTUxO
YW1lczo6b2woKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIGFmZmVjdGVkQmxvY2tUYWdzLmlu
c2VydChIVE1MTmFtZXM6OmxpKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICBhZmZlY3RlZEJs
b2NrVGFncy5pbnNlcnQoSFRNTE5hbWVzOjpkbCgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAg
YWZmZWN0ZWRCbG9ja1RhZ3MuaW5zZXJ0KEhUTUxOYW1lczo6ZHQoKS5sb2NhbE5hbWVQdHIoKSk7
CisgICAgICAgIGFmZmVjdGVkQmxvY2tUYWdzLmluc2VydChIVE1MTmFtZXM6OmRkKCkubG9jYWxO
YW1lUHRyKCkpOworICAgICAgICBhZmZlY3RlZEJsb2NrVGFncy5pbnNlcnQoSFRNTE5hbWVzOjpw
cmUoKS5sb2NhbE5hbWVQdHIoKSk7CiAgICAgfQorICAgIAorICAgIHJldHVybiBhZmZlY3RlZEJs
b2NrVGFncy5jb250YWlucyh0YWdOYW1lLmltcGxlbWVudGF0aW9uKCkpOwogfQogCi12b2lkIEtI
VE1MUGFyc2VyOjpoYW5kbGVSZXNpZHVhbFN0eWxlQ2xvc2VUYWdBY3Jvc3NCbG9ja3MoSFRNTFN0
YWNrRWxlbSogZWxlbSkKK3ZvaWQgSFRNTFBhcnNlcjo6aGFuZGxlUmVzaWR1YWxTdHlsZUNsb3Nl
VGFnQWNyb3NzQmxvY2tzKEhUTUxTdGFja0VsZW0qIGVsZW0pCiB7CiAgICAgLy8gRmluZCB0aGUg
ZWxlbWVudCB0aGF0IGNyb3NzZXMgb3ZlciB0byBhIGhpZ2hlciBsZXZlbC4gICBGb3Igbm93LCBp
ZiB0aGVyZSBpcyBtb3JlIHRoYW4KICAgICAvLyBvbmUsIHdlIHdpbGwganVzdCBnaXZlIHVwIGFu
ZCBub3QgYXR0ZW1wdCBhbnkgc29ydCBvZiBjb3JyZWN0aW9uLiAgSXQncyBoaWdobHkgdW5saWtl
bHkgdGhhdApAQCAtMTEyNSw3ICs5MTEsNyBAQCB2b2lkIEtIVE1MUGFyc2VyOjpoYW5kbGVSZXNp
ZHVhbFN0eWxlQ2xvCiAgICAgICAgIGN1cnIgPSBjdXJyLT5uZXh0OwogICAgIH0KIAotICAgIGlm
ICghY3VyciB8fCAhbWF4RWxlbSB8fCAhaXNBZmZlY3RlZEJ5UmVzaWR1YWxTdHlsZShtYXhFbGVt
LT5pZCkpIHJldHVybjsKKyAgICBpZiAoIWN1cnIgfHwgIW1heEVsZW0gfHwgIWlzQWZmZWN0ZWRC
eVJlc2lkdWFsU3R5bGUobWF4RWxlbS0+dGFnTmFtZSkpIHJldHVybjsKIAogICAgIE5vZGVJbXBs
KiByZXNpZHVhbEVsZW0gPSBwcmV2LT5ub2RlOwogICAgIE5vZGVJbXBsKiBibG9ja0VsZW0gPSBw
cmV2TWF4RWxlbSA/IHByZXZNYXhFbGVtLT5ub2RlIDogY3VycmVudDsKQEAgLTExNDcsNyArOTMz
LDcgQEAgdm9pZCBLSFRNTFBhcnNlcjo6aGFuZGxlUmVzaWR1YWxTdHlsZUNsbwogICAgICAgICBI
VE1MU3RhY2tFbGVtKiBwcmV2RWxlbSA9IG1heEVsZW07CiAgICAgICAgIHdoaWxlIChjdXJyRWxl
bSAhPSBlbGVtKSB7CiAgICAgICAgICAgICBIVE1MU3RhY2tFbGVtKiBuZXh0RWxlbSA9IGN1cnJF
bGVtLT5uZXh0OwotICAgICAgICAgICAgaWYgKCFpc1Jlc2lkdWFsU3R5bGVUYWcoY3VyckVsZW0t
PmlkKSkgeworICAgICAgICAgICAgaWYgKCFpc1Jlc2lkdWFsU3R5bGVUYWcoY3VyckVsZW0tPnRh
Z05hbWUpKSB7CiAgICAgICAgICAgICAgICAgcHJldkVsZW0tPm5leHQgPSBuZXh0RWxlbTsKICAg
ICAgICAgICAgICAgICBwcmV2RWxlbS0+bm9kZSA9IGN1cnJFbGVtLT5ub2RlOwogICAgICAgICAg
ICAgICAgIGRlbGV0ZSBjdXJyRWxlbTsKQEAgLTExNjksNyArOTU1LDcgQEAgdm9pZCBLSFRNTFBh
cnNlcjo6aGFuZGxlUmVzaWR1YWxTdHlsZUNsbwogICAgICAgICBOb2RlSW1wbCogY3Vyck5vZGUg
PSAwOwogICAgICAgICBjdXJyRWxlbSA9IG1heEVsZW07CiAgICAgICAgIHdoaWxlIChjdXJyRWxl
bS0+bm9kZSAhPSByZXNpZHVhbEVsZW0pIHsKLSAgICAgICAgICAgIGlmIChpc1Jlc2lkdWFsU3R5
bGVUYWcoY3VyckVsZW0tPm5vZGUtPmlkKCkpKSB7CisgICAgICAgICAgICBpZiAoaXNSZXNpZHVh
bFN0eWxlVGFnKGN1cnJFbGVtLT5ub2RlLT5sb2NhbE5hbWUoKSkpIHsKICAgICAgICAgICAgICAg
ICAvLyBDcmVhdGUgYSBjbG9uZSBvZiB0aGlzIGVsZW1lbnQuCiAgICAgICAgICAgICAgICAgY3Vy
ck5vZGUgPSBjdXJyRWxlbS0+bm9kZS0+Y2xvbmVOb2RlKGZhbHNlKTsKIApAQCAtMTI0NSw3ICsx
MDMxLDcgQEAgdm9pZCBLSFRNTFBhcnNlcjo6aGFuZGxlUmVzaWR1YWxTdHlsZUNsbwogICAgICAg
ICAvLyBXZSB3aWxsIGFjdHVhbGx5IHNjaGVkdWxlIHRoaXMgdGFnIGZvciByZW9wZW5pbmcKICAg
ICAgICAgLy8gYWZ0ZXIgd2UgY29tcGxldGUgdGhlIGNsb3NlIG9mIHRoaXMgZW50aXJlIGJsb2Nr
LgogICAgICAgICBOb2RlSW1wbCogY3Vyck5vZGUgPSBjdXJyZW50OwotICAgICAgICBpZiAoaXNS
ZXNpZHVhbFN0eWxlVGFnKGN1cnItPmlkKSkgeworICAgICAgICBpZiAoaXNSZXNpZHVhbFN0eWxl
VGFnKGN1cnItPnRhZ05hbWUpKSB7CiAgICAgICAgICAgICAvLyBXZSd2ZSBvdmVybG9hZGVkIHRo
ZSB1c2Ugb2Ygc3RhY2sgZWxlbWVudHMgYW5kIGFyZSBqdXN0IHJldXNpbmcgdGhlCiAgICAgICAg
ICAgICAvLyBzdHJ1Y3Qgd2l0aCBhIHNsaWdodGx5IGRpZmZlcmVudCBtZWFuaW5nIHRvIHRoZSB2
YXJpYWJsZXMuICBJbnN0ZWFkIG9mIGNoYWluaW5nCiAgICAgICAgICAgICAvLyBmcm9tIGlubmVy
bW9zdCB0byBvdXRlcm1vc3QsIHdlIGJ1aWxkIHVwIGEgbGlzdCBvZiBhbGwgdGhlIHRhZ3Mgd2Ug
bmVlZCB0byByZW9wZW4KQEAgLTEyNjksNyArMTA1NSw3IEBAIHZvaWQgS0hUTUxQYXJzZXI6Omhh
bmRsZVJlc2lkdWFsU3R5bGVDbG8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBpZiBpdCBiZWNvbWVzIG5lY2Vzc2FyeSB0byBkbyBzby4KIH0K
IAotdm9pZCBLSFRNTFBhcnNlcjo6cmVvcGVuUmVzaWR1YWxTdHlsZVRhZ3MoSFRNTFN0YWNrRWxl
bSogZWxlbSwgRE9NOjpOb2RlSW1wbCogbWFsZm9ybWVkVGFibGVQYXJlbnQpCit2b2lkIEhUTUxQ
YXJzZXI6OnJlb3BlblJlc2lkdWFsU3R5bGVUYWdzKEhUTUxTdGFja0VsZW0qIGVsZW0sIERPTTo6
Tm9kZUltcGwqIG1hbGZvcm1lZFRhYmxlUGFyZW50KQogewogICAgIC8vIExvb3AgZm9yIGVhY2gg
dGFnIHRoYXQgbmVlZHMgdG8gYmUgcmVvcGVuZWQuCiAgICAgd2hpbGUgKGVsZW0pIHsKQEAgLTEy
ODYsNyArMTA3Miw3IEBAIHZvaWQgS0hUTUxQYXJzZXI6OnJlb3BlblJlc2lkdWFsU3R5bGVUYWcK
ICAgICAgICAgLy8gRklYTUU6IElzIGl0IHJlYWxseSBPSyB0byBpZ25vcmUgdGhlIGV4Y2VwdGlv
bnMgaGVyZT8KIAogICAgICAgICAvLyBOb3cgcHVzaCBhIG5ldyBzdGFjayBlbGVtZW50IGZvciB0
aGlzIG5vZGUgd2UganVzdCBjcmVhdGVkLgotICAgICAgICBwdXNoQmxvY2soZWxlbS0+aWQsIGVs
ZW0tPmxldmVsKTsKKyAgICAgICAgcHVzaEJsb2NrKGVsZW0tPnRhZ05hbWUsIGVsZW0tPmxldmVs
KTsKIAogICAgICAgICAvLyBTZXQgb3VyIHN0cmF5VGFibGVDb250ZW50IGJvb2xlYW4gaWYgbmVl
ZGVkLCBzbyB0aGF0IHRoZSByZW9wZW5lZCB0YWcgYWxzbyBrbm93cwogICAgICAgICAvLyB0aGF0
IGl0IGlzIGluc2lkZSBhIG1hbGZvcm1lZCB0YWJsZS4KQEAgLTEzMDcsMzUgKzEwOTMsMjEgQEAg
dm9pZCBLSFRNTFBhcnNlcjo6cmVvcGVuUmVzaWR1YWxTdHlsZVRhZwogICAgIH0KIH0KIAotdm9p
ZCBLSFRNTFBhcnNlcjo6cHVzaEJsb2NrKGludCBfaWQsIGludCBfbGV2ZWwpCit2b2lkIEhUTUxQ
YXJzZXI6OnB1c2hCbG9jayhjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUsIGludCBfbGV2ZWwp
CiB7Ci0gICAgSFRNTFN0YWNrRWxlbSAqRWxlbSA9IG5ldyBIVE1MU3RhY2tFbGVtKF9pZCwgX2xl
dmVsLCBjdXJyZW50LCBibG9ja1N0YWNrKTsKLQorICAgIEhUTUxTdGFja0VsZW0gKkVsZW0gPSBu
ZXcgSFRNTFN0YWNrRWxlbSh0YWdOYW1lLCBfbGV2ZWwsIGN1cnJlbnQsIGJsb2NrU3RhY2spOwog
ICAgIGJsb2NrU3RhY2sgPSBFbGVtOwotICAgIGFkZEZvcmJpZGRlbihfaWQsIGZvcmJpZGRlblRh
Zyk7CiB9CiAKLXZvaWQgS0hUTUxQYXJzZXI6OnBvcEJsb2NrKCBpbnQgX2lkICkKK3ZvaWQgSFRN
TFBhcnNlcjo6cG9wQmxvY2soY29uc3QgQXRvbWljU3RyaW5nJiBfdGFnTmFtZSkKIHsKICAgICBI
VE1MU3RhY2tFbGVtICpFbGVtID0gYmxvY2tTdGFjazsKICAgICAKICAgICBpbnQgbWF4TGV2ZWwg
PSAwOwogCi0jaWZkZWYgUEFSU0VSX0RFQlVHCi0gICAga2REZWJ1ZyggNjAzNSApIDw8ICJwb3BC
bG9jaygiIDw8IGdldFRhZ05hbWUoX2lkKS5zdHJpbmcoKSA8PCAiKSIgPDwgZW5kbDsKLSAgICB3
aGlsZShFbGVtKSB7Ci0gICAgICAgIGtkRGVidWcoIDYwMzUpIDw8ICIgICA+ICIgPDwgZ2V0VGFn
TmFtZShFbGVtLT5pZCkuc3RyaW5nKCkgPDwgZW5kbDsKLSAgICAgICAgRWxlbSA9IEVsZW0tPm5l
eHQ7Ci0gICAgfQotICAgIEVsZW0gPSBibG9ja1N0YWNrOwotI2VuZGlmCi0KLSAgICB3aGlsZSgg
RWxlbSAmJiAoRWxlbS0+aWQgIT0gX2lkKSkKLSAgICB7CisgICAgd2hpbGUgKEVsZW0gJiYgKEVs
ZW0tPnRhZ05hbWUgIT0gX3RhZ05hbWUpKSB7CiAgICAgICAgIGlmIChtYXhMZXZlbCA8IEVsZW0t
PmxldmVsKQotICAgICAgICB7CiAgICAgICAgICAgICBtYXhMZXZlbCA9IEVsZW0tPmxldmVsOwot
ICAgICAgICB9CiAgICAgICAgIEVsZW0gPSBFbGVtLT5uZXh0OwogICAgIH0KIApAQCAtMTM0NSwy
MCArMTExNywxOCBAQCB2b2lkIEtIVE1MUGFyc2VyOjpwb3BCbG9jayggaW50IF9pZCApCiAgICAg
aWYgKG1heExldmVsID4gRWxlbS0+bGV2ZWwpIHsKICAgICAgICAgLy8gV2UgZGlkbid0IG1hdGNo
IGJlY2F1c2UgdGhlIHRhZyBpcyBpbiBhIGRpZmZlcmVudCBzY29wZSwgZS5nLiwKICAgICAgICAg
Ly8gPGI+PHA+Rm9vPC9iPi4gIFRyeSB0byBjb3JyZWN0IHRoZSBwcm9ibGVtLgotICAgICAgICBp
ZiAoIWlzUmVzaWR1YWxTdHlsZVRhZyhfaWQpKQorICAgICAgICBpZiAoIWlzUmVzaWR1YWxTdHls
ZVRhZyhfdGFnTmFtZSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIHJldHVybiBoYW5k
bGVSZXNpZHVhbFN0eWxlQ2xvc2VUYWdBY3Jvc3NCbG9ja3MoRWxlbSk7CiAgICAgfQogCi0gICAg
Ym9vbCBpc0FmZmVjdGVkQnlTdHlsZSA9IGlzQWZmZWN0ZWRCeVJlc2lkdWFsU3R5bGUoRWxlbS0+
aWQpOworICAgIGJvb2wgaXNBZmZlY3RlZEJ5U3R5bGUgPSBpc0FmZmVjdGVkQnlSZXNpZHVhbFN0
eWxlKEVsZW0tPnRhZ05hbWUpOwogICAgIEhUTUxTdGFja0VsZW0qIHJlc2lkdWFsU3R5bGVTdGFj
ayA9IDA7CiAgICAgTm9kZUltcGwqIG1hbGZvcm1lZFRhYmxlUGFyZW50ID0gMDsKICAgICAKICAg
ICBFbGVtID0gYmxvY2tTdGFjazsKLSAgICB3aGlsZSAoRWxlbSkKLSAgICB7Ci0gICAgICAgIGlm
IChFbGVtLT5pZCA9PSBfaWQpCi0gICAgICAgIHsKKyAgICB3aGlsZSAoRWxlbSkgeworICAgICAg
ICBpZiAoRWxlbS0+dGFnTmFtZSA9PSBfdGFnTmFtZSkgewogICAgICAgICAgICAgaW50IHN0cmF5
VGFibGUgPSBpblN0cmF5VGFibGVDb250ZW50OwogICAgICAgICAgICAgcG9wT25lQmxvY2soKTsK
ICAgICAgICAgICAgIEVsZW0gPSAwOwpAQCAtMTM2OSwxNCArMTEzOSwxMyBAQCB2b2lkIEtIVE1M
UGFyc2VyOjpwb3BCbG9jayggaW50IF9pZCApCiAgICAgICAgICAgICAvLyBtdXN0IGFsc28ga25v
dyB0aGF0IGl0IGlzIHRoZSByb290IG9mIG1hbGZvcm1lZCBjb250ZW50IGluc2lkZSBhIDx0Ym9k
eT4vPHRyPi4KICAgICAgICAgICAgIGlmIChzdHJheVRhYmxlICYmIChpblN0cmF5VGFibGVDb250
ZW50IDwgc3RyYXlUYWJsZSkgJiYgcmVzaWR1YWxTdHlsZVN0YWNrKSB7CiAgICAgICAgICAgICAg
ICAgTm9kZUltcGwqIGN1cnIgPSBjdXJyZW50OwotICAgICAgICAgICAgICAgIHdoaWxlIChjdXJy
ICYmIGN1cnItPmlkKCkgIT0gSURfVEFCTEUpCisgICAgICAgICAgICAgICAgd2hpbGUgKGN1cnIg
JiYgIWN1cnItPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0YWJsZSgpKSkKICAgICAgICAgICAgICAg
ICAgICAgY3VyciA9IGN1cnItPnBhcmVudE5vZGUoKTsKICAgICAgICAgICAgICAgICBtYWxmb3Jt
ZWRUYWJsZVBhcmVudCA9IGN1cnIgPyBjdXJyLT5wYXJlbnROb2RlKCkgOiAwOwogICAgICAgICAg
ICAgfQogICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgaWYg
KEVsZW0tPmlkID09IElEX0ZPUk0gJiYgZm9ybSkKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICBpZiAoZm9ybSAmJiBFbGVtLT50YWdOYW1lID09IEhUTUxOYW1lczo6Zm9ybSgpKQogICAgICAg
ICAgICAgICAgIC8vIEEgPGZvcm0+IGlzIGJlaW5nIGNsb3NlZCBwcmVtYXR1cmVseSAoYW5kIHRo
aXMgaXMKICAgICAgICAgICAgICAgICAvLyBtYWxmb3JtZWQgSFRNTCkuICBTZXQgYW4gYXR0cmli
dXRlIG9uIHRoZSBmb3JtIHRvIGNsZWFyIG91dCBpdHMKICAgICAgICAgICAgICAgICAvLyBib3R0
b20gbWFyZ2luLgpAQCAtMTM4NSw3ICsxMTU0LDcgQEAgdm9pZCBLSFRNTFBhcnNlcjo6cG9wQmxv
Y2soIGludCBfaWQgKQogICAgICAgICAgICAgLy8gU2NoZWR1bGUgdGhpcyB0YWcgZm9yIHJlb3Bl
bmluZwogICAgICAgICAgICAgLy8gYWZ0ZXIgd2UgY29tcGxldGUgdGhlIGNsb3NlIG9mIHRoaXMg
ZW50aXJlIGJsb2NrLgogICAgICAgICAgICAgTm9kZUltcGwqIGN1cnJOb2RlID0gY3VycmVudDsK
LSAgICAgICAgICAgIGlmIChpc0FmZmVjdGVkQnlTdHlsZSAmJiBpc1Jlc2lkdWFsU3R5bGVUYWco
RWxlbS0+aWQpKSB7CisgICAgICAgICAgICBpZiAoaXNBZmZlY3RlZEJ5U3R5bGUgJiYgaXNSZXNp
ZHVhbFN0eWxlVGFnKEVsZW0tPnRhZ05hbWUpKSB7CiAgICAgICAgICAgICAgICAgLy8gV2UndmUg
b3ZlcmxvYWRlZCB0aGUgdXNlIG9mIHN0YWNrIGVsZW1lbnRzIGFuZCBhcmUganVzdCByZXVzaW5n
IHRoZQogICAgICAgICAgICAgICAgIC8vIHN0cnVjdCB3aXRoIGEgc2xpZ2h0bHkgZGlmZmVyZW50
IG1lYW5pbmcgdG8gdGhlIHZhcmlhYmxlcy4gIEluc3RlYWQgb2YgY2hhaW5pbmcKICAgICAgICAg
ICAgICAgICAvLyBmcm9tIGlubmVybW9zdCB0byBvdXRlcm1vc3QsIHdlIGJ1aWxkIHVwIGEgbGlz
dCBvZiBhbGwgdGhlIHRhZ3Mgd2UgbmVlZCB0byByZW9wZW4KQEAgLTE0MDgsMTkgKzExNzcsMTQg
QEAgdm9pZCBLSFRNTFBhcnNlcjo6cG9wQmxvY2soIGludCBfaWQgKQogICAgIHJlb3BlblJlc2lk
dWFsU3R5bGVUYWdzKHJlc2lkdWFsU3R5bGVTdGFjaywgbWFsZm9ybWVkVGFibGVQYXJlbnQpOwog
fQogCi12b2lkIEtIVE1MUGFyc2VyOjpwb3BPbmVCbG9jayhib29sIGRlbEJsb2NrKQordm9pZCBI
VE1MUGFyc2VyOjpwb3BPbmVCbG9jayhib29sIGRlbEJsb2NrKQogewogICAgIEhUTUxTdGFja0Vs
ZW0gKkVsZW0gPSBibG9ja1N0YWNrOwogCiAgICAgLy8gd2Ugc2hvdWxkIG5ldmVyIGdldCBoZXJl
LCBidXQgc29tZSBiYWQgaHRtbCBtaWdodCBjYXVzZSBpdC4KLSNpZm5kZWYgUEFSU0VSX0RFQlVH
Ci0gICAgaWYoIUVsZW0pIHJldHVybjsKLSNlbHNlCi0gICAga2REZWJ1ZyggNjAzNSApIDw8ICJw
b3BwaW5nIGJsb2NrOiAiIDw8IGdldFRhZ05hbWUoRWxlbS0+aWQpLnN0cmluZygpIDw8ICIoIiA8
PCBFbGVtLT5pZCA8PCAiKSIgPDwgZW5kbDsKLSNlbmRpZgotCi0jaWYgU1BFRURfREVCVUcgPCAx
Ci0gICAgaWYoKEVsZW0tPm5vZGUgIT0gY3VycmVudCkpIHsKKyAgICBpZiAoIUVsZW0pIHJldHVy
bjsKKyAgICAKKyAgICBpZiAoKEVsZW0tPm5vZGUgIT0gY3VycmVudCkpIHsKICAgICAgICAgaWYg
KGN1cnJlbnQtPm1haW50YWluc1N0YXRlKCkgJiYgZG9jKCkpewogICAgICAgICAgICAgZG9jKCkt
PnJlZ2lzdGVyTWFpbnRhaW5zU3RhdGUoY3VycmVudCk7CiAgICAgICAgICAgICBRU3RyaW5nTGlz
dCAmc3RhdGVzID0gZG9jKCktPnJlc3RvcmVTdGF0ZSgpOwpAQCAtMTQzMSw5ICsxMTk1LDYgQEAg
dm9pZCBLSFRNTFBhcnNlcjo6cG9wT25lQmxvY2soYm9vbCBkZWxCbAogICAgICAgICAvLyBBIGZl
dyBlbGVtZW50cyAoPGFwcGxldD4sIDxvYmplY3Q+KSBuZWVkIHRvIGtub3cgd2hlbiBhbGwgY2hp
bGQgZWxlbWVudHMgKDxwYXJhbT5zKSBhcmUgYXZhaWxhYmxlOgogICAgICAgICBjdXJyZW50LT5j
bG9zZVJlbmRlcmVyKCk7CiAgICAgfQotI2VuZGlmCi0KLSAgICByZW1vdmVGb3JiaWRkZW4oRWxl
bS0+aWQsIGZvcmJpZGRlblRhZyk7CiAKICAgICBibG9ja1N0YWNrID0gRWxlbS0+bmV4dDsKICAg
ICBzZXRDdXJyZW50KEVsZW0tPm5vZGUpOwpAQCAtMTQ0NSwxOSArMTIwNiwxOSBAQCB2b2lkIEtI
VE1MUGFyc2VyOjpwb3BPbmVCbG9jayhib29sIGRlbEJsCiAgICAgICAgIGRlbGV0ZSBFbGVtOwog
fQogCi12b2lkIEtIVE1MUGFyc2VyOjpwb3BJbmxpbmVCbG9ja3MoKQordm9pZCBIVE1MUGFyc2Vy
Ojpwb3BJbmxpbmVCbG9ja3MoKQogewotICAgIHdoaWxlIChibG9ja1N0YWNrICYmIGN1cnJlbnQt
PmlzSW5saW5lKCkpCisgICAgd2hpbGUgKGJsb2NrU3RhY2sgJiYgaXNJbmxpbmUoY3VycmVudCkp
CiAgICAgICAgIHBvcE9uZUJsb2NrKCk7CiB9CiAKLXZvaWQgS0hUTUxQYXJzZXI6OmZyZWVCbG9j
aygpCit2b2lkIEhUTUxQYXJzZXI6OmZyZWVCbG9jaygpCiB7CiAgICAgd2hpbGUgKGJsb2NrU3Rh
Y2spCiAgICAgICAgIHBvcE9uZUJsb2NrKCk7CiB9CiAKLXZvaWQgS0hUTUxQYXJzZXI6OmNyZWF0
ZUhlYWQoKQordm9pZCBIVE1MUGFyc2VyOjpjcmVhdGVIZWFkKCkKIHsKICAgICBpZihoZWFkIHx8
ICFkb2MoKS0+Zmlyc3RDaGlsZCgpKQogICAgICAgICByZXR1cm47CkBAIC0xNDc0LDcgKzEyMzUs
NyBAQCB2b2lkIEtIVE1MUGFyc2VyOjpjcmVhdGVIZWFkKCkKICAgICB9CiB9CiAKLU5vZGVJbXBs
ICpLSFRNTFBhcnNlcjo6aGFuZGxlSXNpbmRleCggVG9rZW4gKnQgKQorTm9kZUltcGwgKkhUTUxQ
YXJzZXI6OmhhbmRsZUlzaW5kZXgoIFRva2VuICp0ICkKIHsKICAgICBOb2RlSW1wbCAqbjsKICAg
ICBIVE1MRm9ybUVsZW1lbnRJbXBsICpteWZvcm0gPSBmb3JtOwpAQCAtMTUwNCw3ICsxMjY1LDcg
QEAgTm9kZUltcGwgKktIVE1MUGFyc2VyOjpoYW5kbGVJc2luZGV4KCBUbwogICAgIHJldHVybiBu
OwogfQogCi12b2lkIEtIVE1MUGFyc2VyOjpzdGFydEJvZHkoKQordm9pZCBIVE1MUGFyc2VyOjpz
dGFydEJvZHkoKQogewogICAgIGlmKGluQm9keSkgcmV0dXJuOwogCkBAIC0xNTE2LDcgKzEyNzcs
NyBAQCB2b2lkIEtIVE1MUGFyc2VyOjpzdGFydEJvZHkoKQogICAgIH0KIH0KIAotdm9pZCBLSFRN
TFBhcnNlcjo6ZmluaXNoZWQoKQordm9pZCBIVE1MUGFyc2VyOjpmaW5pc2hlZCgpCiB7CiAgICAg
Ly8gSW4gdGhlIGNhc2Ugb2YgYSBjb21wbGV0ZWx5IGVtcHR5IGRvY3VtZW50LCBoZXJlJ3MgdGhl
IHBsYWNlIHRvIGNyZWF0ZSB0aGUgSFRNTCBlbGVtZW50LgogICAgIGlmIChjdXJyZW50LT5pc0Rv
Y3VtZW50Tm9kZSgpICYmIGN1cnJlbnQtPmZpcnN0Q2hpbGQoKSA9PSAwKSB7CkluZGV4OiBraHRt
bC9odG1sL2h0bWxwYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29y
ZS9raHRtbC9odG1sL2h0bWxwYXJzZXIuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yNwpkaWZm
IC11IC1wIC1yMS4yNyBraHRtbC9odG1sL2h0bWxwYXJzZXIuaAotLS0ga2h0bWwvaHRtbC9odG1s
cGFyc2VyLmgJNiBKYW4gMjAwNSAyMToxMzoxNiAtMDAwMAkxLjI3CisrKyBraHRtbC9odG1sL2h0
bWxwYXJzZXIuaAk3IEp1bCAyMDA1IDA1OjU5OjA2IC0wMDAwCkBAIC0yOSwxOSArMjksOSBAQAog
I2lmbmRlZiBIVE1MUEFSU0VSX0gKICNkZWZpbmUgSFRNTFBBUlNFUl9ICiAKLS8vIDAgYWxsCi0v
LyAxIGRvbXRyZWUgKyByZW5kZXJ0cmVlICsgc3R5bGVGb3JFbGVtZW50LCBubyBsYXlvdXRpbmcK
LS8vIDIgZG9tdHJlZSBvbmx5Ci0jZGVmaW5lIFNQRUVEX0RFQlVHIDAKLQotI2lmZGVmIFNQRUVE
X0RFQlVHCi0jaW5jbHVkZSA8cWRhdGV0aW1lLmg+Ci0jZW5kaWYKLQogI2luY2x1ZGUgImRvbS9k
b21fc3RyaW5nLmgiCiAjaW5jbHVkZSAieG1sL2RvbV9ub2RlaW1wbC5oIgogI2luY2x1ZGUgImh0
bWwvaHRtbF9kb2N1bWVudGltcGwuaCIKLSNpbmNsdWRlICJtaXNjL2h0bWx0YWdzLmgiCiAKIGNs
YXNzIEtIVE1MVmlldzsKIGNsYXNzIEhUTUxTdGFja0VsZW07CkBAIC02MSwxOCArNTEsMTYgQEAg
bmFtZXNwYWNlIGtodG1sIHsKICAgICBjbGFzcyBUb2tlbjsKIH07CiAKLWNsYXNzIEtIVE1MUGFy
c2VyOwotCiAvKioKICAqIFRoZSBwYXJzZXIgZm9yIGh0bWwuIEl0IHJlY2VpdmVzIGEgc3RyZWFt
IG9mIHRva2VucyBmcm9tIHRoZSBIVE1MVG9rZW5pemVyLCBhbmQKICAqIGJ1aWxkcyB1cCB0aGUg
RG9jdW1lbnQgc3RydWN0dXJlIGZvcm0gaXQuCiAgKi8KLWNsYXNzIEtIVE1MUGFyc2VyCitjbGFz
cyBIVE1MUGFyc2VyCiB7CiBwdWJsaWM6Ci0gICAgS0hUTUxQYXJzZXIoS0hUTUxWaWV3ICp3LCBE
T006OkRvY3VtZW50UHRyICppLCBib29sIGluY2x1ZGVzQ29tbWVudHM9ZmFsc2UpOwotICAgIEtI
VE1MUGFyc2VyKERPTTo6RG9jdW1lbnRGcmFnbWVudEltcGwgKmZyYWcsIERPTTo6RG9jdW1lbnRQ
dHIgKmRvYywgYm9vbCBpbmNsdWRlc0NvbW1lbnRzPWZhbHNlKTsKLSAgICB2aXJ0dWFsIH5LSFRN
TFBhcnNlcigpOworICAgIEhUTUxQYXJzZXIoS0hUTUxWaWV3ICp3LCBET006OkRvY3VtZW50UHRy
ICppLCBib29sIGluY2x1ZGVzQ29tbWVudHM9ZmFsc2UpOworICAgIEhUTUxQYXJzZXIoRE9NOjpE
b2N1bWVudEZyYWdtZW50SW1wbCAqZnJhZywgRE9NOjpEb2N1bWVudFB0ciAqZG9jLCBib29sIGlu
Y2x1ZGVzQ29tbWVudHM9ZmFsc2UpOworICAgIHZpcnR1YWwgfkhUTUxQYXJzZXIoKTsKIAogICAg
IC8qKgogICAgICAqIHBhcnNlcyBvbmUgdG9rZW4gZGVsaXZlcmVkIGJ5IHRoZSB0b2tlbml6ZXIK
QEAgLTg5LDcgKzc3LDcgQEAgcHVibGljOgogICAgICAqLwogICAgIHZvaWQgcmVzZXQoKTsKIAot
ICAgIGJvb2wgc2tpcE1vZGUoKSBjb25zdCB7IHJldHVybiAoZGlzY2FyZF91bnRpbCAhPSAwKTsg
fQorICAgIGJvb2wgc2tpcE1vZGUoKSBjb25zdCB7IHJldHVybiAhZGlzY2FyZF91bnRpbC5pc051
bGwoKTsgfQogICAgIGJvb2wgbm9TcGFjZXMoKSBjb25zdCB7IHJldHVybiAhaW5Cb2R5OyB9CiAg
ICAgYm9vbCBzZWxlY3RNb2RlKCkgY29uc3QgeyByZXR1cm4gaW5TZWxlY3Q7IH0KIApAQCAtOTcs
MzEgKzg1LDMyIEBAIHB1YmxpYzoKICAgICBET006OkRvY3VtZW50UHRyICpkb2NQdHIoKSBjb25z
dCB7IHJldHVybiBkb2N1bWVudDsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgdm9pZCBzZXRDdXJyZW50
KERPTTo6Tm9kZUltcGwgKm5ld0N1cnJlbnQpOworICAgIHZvaWQgc2V0Q3VycmVudChET006Ok5v
ZGVJbXBsKiBuZXdDdXJyZW50KTsKKyAgICB2b2lkIHNldFNraXBNb2RlKGNvbnN0IERPTTo6UXVh
bGlmaWVkTmFtZSYgcU5hbWUpIHsgZGlzY2FyZF91bnRpbCA9IHFOYW1lLmxvY2FsTmFtZSgpOyB9
CiAKICAgICBLSFRNTFZpZXcgKkhUTUxXaWRnZXQ7CiAgICAgRE9NOjpEb2N1bWVudFB0ciAqZG9j
dW1lbnQ7CiAKICAgICAvKgotICAgICAqIGdlbmVyYXRlIGFuIGVsZW1lbnQgZnJvbSB0aGUgdG9r
ZW4KKyAgICAgKiBnZW5lcmF0ZSBhIG5vZGUgZnJvbSB0aGUgdG9rZW4KICAgICAgKi8KLSAgICBE
T006Ok5vZGVJbXBsICpnZXRFbGVtZW50KGtodG1sOjpUb2tlbiAqKTsKKyAgICBET006Ok5vZGVJ
bXBsICpnZXROb2RlKGtodG1sOjpUb2tlbiAqKTsKIAogICAgIHZvaWQgcHJvY2Vzc0Nsb3NlVGFn
KGtodG1sOjpUb2tlbiAqKTsKIAogICAgIGJvb2wgaW5zZXJ0Tm9kZShET006Ok5vZGVJbXBsICpu
LCBib29sIGZsYXQgPSBmYWxzZSk7CisgICAgYm9vbCBoYW5kbGVFcnJvcihET006Ok5vZGVJbXBs
KiBuLCBib29sIGZsYXQsIGNvbnN0IERPTTo6QXRvbWljU3RyaW5nJiBsb2NhbE5hbWUsIGludCB0
YWdQcmlvcml0eSk7CisgICAgCisgICAgLy8gVGhlIGN1cnJlbnRseSBhY3RpdmUgZWxlbWVudCAo
dGhlIG9uZSBuZXcgZWxlbWVudHMgd2lsbCBiZSBhZGRlZCB0bykuICBDYW4gYmUgYSBEb2N1bWVu
dEZyYWdtZW50LCBhIERvY3VtZW50IG9yIGFuIEVsZW1lbnQuCisgICAgRE9NOjpOb2RlSW1wbCog
Y3VycmVudDsKIAotICAgIC8qCi0gICAgICogVGhlIGN1cnJlbnRseSBhY3RpdmUgZWxlbWVudCAo
dGhlIG9uZSBuZXcgZWxlbWVudHMgd2lsbCBiZSBhZGRlZCB0bykKLSAgICAgKi8KLSAgICBET006
Ok5vZGVJbXBsICpjdXJyZW50OwogICAgIGJvb2wgY3VycmVudElzUmVmZXJlbmNlZDsKIAogICAg
IEhUTUxTdGFja0VsZW0gKmJsb2NrU3RhY2s7CiAKLSAgICB2b2lkIHB1c2hCbG9jayggaW50IF9p
ZCwgaW50IF9sZXZlbCk7Ci0KLSAgICB2b2lkIHBvcEJsb2NrKCBpbnQgX2lkICk7CisgICAgdm9p
ZCBwdXNoQmxvY2soY29uc3QgRE9NOjpBdG9taWNTdHJpbmcmIHRhZ05hbWUsIGludCBfbGV2ZWwp
OworICAgIHZvaWQgcG9wQmxvY2soY29uc3QgRE9NOjpBdG9taWNTdHJpbmcmIHRhZ05hbWUpOwor
ICAgIHZvaWQgcG9wQmxvY2soY29uc3QgRE9NOjpRdWFsaWZpZWROYW1lJiBxTmFtZSkgeyByZXR1
cm4gcG9wQmxvY2socU5hbWUubG9jYWxOYW1lKCkpOyB9IC8vIENvbnZlbmllbmNlIGZ1bmN0aW9u
IGZvciByZWFkYWJpbGl0eS4KICAgICB2b2lkIHBvcE9uZUJsb2NrKGJvb2wgZGVsQmxvY2sgPSB0
cnVlKTsKICAgICB2b2lkIHBvcElubGluZUJsb2NrcygpOwogCkBAIC0xMjksMTYgKzExOCwxOCBA
QCBwcm90ZWN0ZWQ6CiAKICAgICB2b2lkIGNyZWF0ZUhlYWQoKTsKIAotICAgIGJvb2wgaXNSZXNp
ZHVhbFN0eWxlVGFnKGludCBfaWQpOwotICAgIGJvb2wgaXNBZmZlY3RlZEJ5UmVzaWR1YWxTdHls
ZShpbnQgX2lkKTsKKyAgICBib29sIGlzUmVzaWR1YWxTdHlsZVRhZyhjb25zdCBET006OkF0b21p
Y1N0cmluZyYgdGFnTmFtZSk7CisgICAgYm9vbCBpc0FmZmVjdGVkQnlSZXNpZHVhbFN0eWxlKGNv
bnN0IERPTTo6QXRvbWljU3RyaW5nJiB0YWdOYW1lKTsKICAgICB2b2lkIGhhbmRsZVJlc2lkdWFs
U3R5bGVDbG9zZVRhZ0Fjcm9zc0Jsb2NrcyhIVE1MU3RhY2tFbGVtKiBlbGVtKTsKICAgICB2b2lk
IHJlb3BlblJlc2lkdWFsU3R5bGVUYWdzKEhUTUxTdGFja0VsZW0qIGVsZW0sIERPTTo6Tm9kZUlt
cGwqIG1hbGZvcm1lZFRhYmxlUGFyZW50KTsKIAotICAgIGJvb2wgYWxsb3dOZXN0ZWRSZWR1bmRh
bnRUYWcoaW50IF9pZCk7CisgICAgYm9vbCBhbGxvd05lc3RlZFJlZHVuZGFudFRhZyhjb25zdCBE
T006OkF0b21pY1N0cmluZyYgdGFnTmFtZSk7CiAgICAgCi0gICAgc3RhdGljIGJvb2wgaXNIZWFk
ZXJUYWcoaW50IF9pZCk7CisgICAgc3RhdGljIGJvb2wgaXNIZWFkZXJUYWcoY29uc3QgRE9NOjpB
dG9taWNTdHJpbmcmIHRhZ05hbWUpOwogICAgIHZvaWQgcG9wTmVzdGVkSGVhZGVyVGFnKCk7CiAK
KyAgICBib29sIGlzSW5saW5lKERPTTo6Tm9kZUltcGwqIG5vZGUpIGNvbnN0OworICAgIAogICAg
IC8qCiAgICAgICogY3VycmVudGx5IGFjdGl2ZSBmb3JtCiAgICAgICovCkBAIC0xNzUsMTggKzE2
NiwxMiBAQCBwcm90ZWN0ZWQ6CiAgICAgLyoKICAgICAgKiB0ZWxscyB0aGUgcGFyc2VyIHRvIGRp
c2NhcmQgYWxsIHRhZ3MsIHVudGlsIGl0IHJlYWNoZXMgdGhlIG9uZSBzcGVjaWZpZWQKICAgICAg
Ki8KLSAgICBpbnQgZGlzY2FyZF91bnRpbDsKKyAgICBET006OkF0b21pY1N0cmluZyBkaXNjYXJk
X3VudGlsOwogCiAgICAgYm9vbCBoZWFkTG9hZGVkOwogICAgIGludCBpblN0cmF5VGFibGVDb250
ZW50OwogCiAgICAgYm9vbCBpbmNsdWRlc0NvbW1lbnRzSW5ET007Ci0gICAgCi0gICAgdXNob3J0
IGZvcmJpZGRlblRhZ1tJRF9MQVNUX1RBRyArIDFdOwotICAgIAotI2lmIFNQRUVEX0RFQlVHID4g
MAotICAgIFFUaW1lIHF0OwotI2VuZGlmCiB9OwogCiAjZW5kaWYgLy8gSFRNTFBBUlNFUl9ICklu
ZGV4OiBraHRtbC9odG1sL2h0bWx0b2tlbml6ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbHRva2VuaXplci5jcHAsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuOTUKZGlmZiAtdSAtcCAtcjEuOTUga2h0bWwvaHRtbC9odG1sdG9rZW5pemVy
LmNwcAotLS0ga2h0bWwvaHRtbC9odG1sdG9rZW5pemVyLmNwcAk1IEp1bCAyMDA1IDIzOjIxOjEw
IC0wMDAwCTEuOTUKKysrIGtodG1sL2h0bWwvaHRtbHRva2VuaXplci5jcHAJNyBKdWwgMjAwNSAw
NTo1OTowOCAtMDAwMApAQCAtMzksNyArMzksNiBAQAogI2luY2x1ZGUgImh0bWwvaHRtbHRva2Vu
aXplci5oIgogI2luY2x1ZGUgImh0bWwvaHRtbF9kb2N1bWVudGltcGwuaCIKICNpbmNsdWRlICJo
dG1sL2h0bWxwYXJzZXIuaCIKLSNpbmNsdWRlICJodG1sL2R0ZC5oIgogCiAjaW5jbHVkZSAibWlz
Yy9sb2FkZXIuaCIKICNpbmNsdWRlICJtaXNjL2h0bWxoYXNoZXMuaCIKQEAgLTYzLDcgKzYyLDEw
IEBAIHVzaW5nIERPTTo6RE9NU3RyaW5nOwogdXNpbmcgRE9NOjpET01TdHJpbmdJbXBsOwogdXNp
bmcgRE9NOjpEb2N1bWVudEltcGw7CiB1c2luZyBET006OmVtcHR5QXRvbTsKLXVzaW5nIERPTTo6
ZW5kVGFnUmVxdWlyZW1lbnQ7Cit1c2luZyBET006OmNvbW1lbnRBdG9tOwordXNpbmcgRE9NOjpu
dWxsQXRvbTsKK3VzaW5nIERPTTo6dGV4dEF0b207Cit1c2luZyBET006OkhUTUxOYW1lczsKIAog
Ly8gdHVybiBvZmYgaW5saW5pbmcgdG8gdm9pZCB3YXJuaW5nIHdpdGggbmV3ZXIgZ2NjCiAjdW5k
ZWYgX19pbmxpbmUKQEAgLTIzOSw3ICsyNDEsNyBAQCBIVE1MVG9rZW5pemVyOjpIVE1MVG9rZW5p
emVyKERPTTo6RG9jdW1lCiAgICAgc2NyaXB0Q29kZSA9IDA7CiAgICAgc2NyaXB0Q29kZVNpemUg
PSBzY3JpcHRDb2RlTWF4U2l6ZSA9IHNjcmlwdENvZGVSZXN5bmMgPSAwOwogICAgIGNoYXJzZXRz
ID0gS0dsb2JhbDo6Y2hhcnNldHMoKTsKLSAgICBwYXJzZXIgPSBuZXcgS0hUTUxQYXJzZXIoX3Zp
ZXcsIF9kb2MsIGluY2x1ZGVzQ29tbWVudHMpOworICAgIHBhcnNlciA9IG5ldyBIVE1MUGFyc2Vy
KF92aWV3LCBfZG9jLCBpbmNsdWRlc0NvbW1lbnRzKTsKICAgICBtX2V4ZWN1dGluZ1NjcmlwdCA9
IDA7CiAgICAgbG9hZGluZ0V4dFNjcmlwdCA9IGZhbHNlOwogICAgIG9uSG9sZCA9IGZhbHNlOwpA
QCAtMjU5LDcgKzI2MSw3IEBAIEhUTUxUb2tlbml6ZXI6OkhUTUxUb2tlbml6ZXIoRE9NOjpEb2N1
bWUKICAgICBzY3JpcHRDb2RlID0gMDsKICAgICBzY3JpcHRDb2RlU2l6ZSA9IHNjcmlwdENvZGVN
YXhTaXplID0gc2NyaXB0Q29kZVJlc3luYyA9IDA7CiAgICAgY2hhcnNldHMgPSBLR2xvYmFsOjpj
aGFyc2V0cygpOwotICAgIHBhcnNlciA9IG5ldyBLSFRNTFBhcnNlcihpLCBfZG9jLCBpbmNsdWRl
c0NvbW1lbnRzKTsKKyAgICBwYXJzZXIgPSBuZXcgSFRNTFBhcnNlcihpLCBfZG9jLCBpbmNsdWRl
c0NvbW1lbnRzKTsKICAgICBtX2V4ZWN1dGluZ1NjcmlwdCA9IDA7CiAgICAgbG9hZGluZ0V4dFNj
cmlwdCA9IGZhbHNlOwogICAgIG9uSG9sZCA9IGZhbHNlOwpAQCAtNDUxLDEwICs0NTMsMTAgQEAg
dm9pZCBIVE1MVG9rZW5pemVyOjpwYXJzZVNwZWNpYWwoVG9rZW5pegogICAgICAgICAgICAgZWxz
ZSB7CiAgICAgICAgICAgICAgICAgcHJvY2Vzc0xpc3RpbmcoVG9rZW5pemVyU3RyaW5nKHNjcmlw
dENvZGUsIHNjcmlwdENvZGVTaXplKSk7CiAgICAgICAgICAgICAgICAgcHJvY2Vzc1Rva2VuKCk7
Ci0gICAgICAgICAgICAgICAgaWYgKCBzdHlsZSApICAgICAgICAgeyBjdXJyVG9rZW4uaWQgPSBJ
RF9TVFlMRSArIElEX0NMT1NFX1RBRzsgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKCB0ZXh0
YXJlYSApIHsgY3VyclRva2VuLmlkID0gSURfVEVYVEFSRUEgKyBJRF9DTE9TRV9UQUc7IH0KLSAg
ICAgICAgICAgICAgICBlbHNlIGlmICggdGl0bGUgKSB7IGN1cnJUb2tlbi5pZCA9IElEX1RJVExF
ICsgSURfQ0xPU0VfVEFHOyB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoIHhtcCApICB7IGN1
cnJUb2tlbi5pZCA9IElEX1hNUCArIElEX0NMT1NFX1RBRzsgfQorICAgICAgICAgICAgICAgIGlm
ICggc3R5bGUgKSAgICAgICAgIHsgY3VyclRva2VuLnRhZ05hbWUgPSBIVE1MTmFtZXM6OnN0eWxl
KCkubG9jYWxOYW1lKCk7IGN1cnJUb2tlbi5iZWdpblRhZyA9IGZhbHNlOyB9CisgICAgICAgICAg
ICAgICAgZWxzZSBpZiAoIHRleHRhcmVhICkgeyBjdXJyVG9rZW4udGFnTmFtZSA9IEhUTUxOYW1l
czo6dGV4dGFyZWEoKS5sb2NhbE5hbWUoKTsgY3VyclRva2VuLmJlZ2luVGFnID0gZmFsc2U7IH0K
KyAgICAgICAgICAgICAgICBlbHNlIGlmICggdGl0bGUgKSB7IGN1cnJUb2tlbi50YWdOYW1lID0g
SFRNTE5hbWVzOjp0aXRsZSgpLmxvY2FsTmFtZSgpOyBjdXJyVG9rZW4uYmVnaW5UYWcgPSBmYWxz
ZTsgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKCB4bXAgKSAgeyBjdXJyVG9rZW4udGFnTmFt
ZSA9IEhUTUxOYW1lczo6eG1wKCkubG9jYWxOYW1lKCk7IGN1cnJUb2tlbi5iZWdpblRhZyA9IGZh
bHNlOyB9CiAgICAgICAgICAgICAgICAgcHJvY2Vzc1Rva2VuKCk7CiAgICAgICAgICAgICAgICAg
c3R5bGUgPSBzY3JpcHQgPSBzdHlsZSA9IHRleHRhcmVhID0gdGl0bGUgPSB4bXAgPSBmYWxzZTsK
ICAgICAgICAgICAgICAgICB0cXVvdGUgPSBOb1F1b3RlOwpAQCAtNTI0LDcgKzUyNiw4IEBAIHZv
aWQgSFRNTFRva2VuaXplcjo6c2NyaXB0SGFuZGxlcigpCiAgICAgcHJvY2Vzc0xpc3RpbmcoVG9r
ZW5pemVyU3RyaW5nKHNjcmlwdENvZGUsIHNjcmlwdENvZGVTaXplKSk7CiAgICAgUVN0cmluZyBl
eFNjcmlwdCggYnVmZmVyLCBkZXN0LWJ1ZmZlciApOwogICAgIHByb2Nlc3NUb2tlbigpOwotICAg
IGN1cnJUb2tlbi5pZCA9IElEX1NDUklQVCArIElEX0NMT1NFX1RBRzsKKyAgICBjdXJyVG9rZW4u
dGFnTmFtZSA9IEhUTUxOYW1lczo6c2NyaXB0KCkubG9jYWxOYW1lKCk7CisgICAgY3VyclRva2Vu
LmJlZ2luVGFnID0gZmFsc2U7CiAgICAgcHJvY2Vzc1Rva2VuKCk7CiAKICAgICBUb2tlbml6ZXJT
dHJpbmcgKnNhdmVkUHJlcGVuZGluZ1NyYyA9IGN1cnJlbnRQcmVwZW5kaW5nU3JjOwpAQCAtNzAx
LDEwICs3MDQsMTIgQEAgdm9pZCBIVE1MVG9rZW5pemVyOjpwYXJzZUNvbW1lbnQoVG9rZW5pegog
ICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tTY3JpcHRCdWZmZXIoKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIHNjcmlwdENvZGVbIHNjcmlwdENvZGVTaXplIF0gPSAwOwogICAgICAgICAg
ICAgICAgICAgICAgICAgc2NyaXB0Q29kZVsgc2NyaXB0Q29kZVNpemUgKyAxIF0gPSAwOwotICAg
ICAgICAgICAgICAgICAgICAgICAgY3VyclRva2VuLmlkID0gSURfQ09NTUVOVDsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGN1cnJUb2tlbi50YWdOYW1lID0gY29tbWVudEF0b207CisgICAgICAg
ICAgICAgICAgICAgICAgICBjdXJyVG9rZW4uYmVnaW5UYWcgPSB0cnVlOwogICAgICAgICAgICAg
ICAgICAgICAgICAgcHJvY2Vzc0xpc3RpbmcoVG9rZW5pemVyU3RyaW5nKHNjcmlwdENvZGUsIHNj
cmlwdENvZGVTaXplIC0gZW5kQ2hhcnNDb3VudCkpOwogICAgICAgICAgICAgICAgICAgICAgICAg
cHJvY2Vzc1Rva2VuKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjdXJyVG9rZW4uaWQgPSBJ
RF9DT01NRU5UICsgSURfQ0xPU0VfVEFHOworICAgICAgICAgICAgICAgICAgICAgICAgY3VyclRv
a2VuLnRhZ05hbWUgPSBjb21tZW50QXRvbTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJU
b2tlbi5iZWdpblRhZyA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc1Rv
a2VuKCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgc2NyaXB0
Q29kZVNpemUgPSAwOwpAQCAtMTAyMiwxMCArMTAyNywxMiBAQCB2b2lkIEhUTUxUb2tlbml6ZXI6
OnBhcnNlVGFnKFRva2VuaXplclN0CiAgICAgICAgICAgICAgICAgICAgIGZpbmlzaCA9IHRydWU7
CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAvLyBVc2UgdG9sb3dlcigpIGluc3RlYWQgb2YgfCAweDIwIHRvIGxvd2VyY2FzZSB0
aGUgY2hhciBiZWNhdXNlIHRoZXJlIGlzIG5vIAotICAgICAgICAgICAgICAgIC8vIHBlcmZvcm1h
bmNlIGdhaW4gaW4gdXNpbmcgfCAweDIwIHNpbmNlIHRvbG93ZXIoKSBpcyBvcHRpbWl6ZWQgYW5k
IAotICAgICAgICAgICAgICAgIC8vIHwgMHgyMCB0dXJucyBjaGFyYWN0ZXJzIHN1Y2ggYXMgJ18n
IGludG8ganVuay4KLSAgICAgICAgICAgICAgICBjQnVmZmVyW2NCdWZmZXJQb3MrK10gPSB0b2xv
d2VyKGN1cmNoYXIpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIHRvbG93
ZXIoKSBzaG93cyB1cCBvbiBwcm9maWxlcy4gVGhpcyBpcyBmYXN0ZXIhCisgICAgICAgICAgICAg
ICAgaWYgKGN1cmNoYXIgPj0gJ0EnICYmIGN1cmNoYXIgPD0gJ1onKQorICAgICAgICAgICAgICAg
ICAgICBjQnVmZmVyW2NCdWZmZXJQb3MrK10gPSBjdXJjaGFyICsgKCdhJyAtICdBJyk7CisgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBjQnVmZmVyW2NCdWZmZXJQb3Mr
K10gPSBjdXJjaGFyOwogICAgICAgICAgICAgICAgICsrc3JjOwogICAgICAgICAgICAgfQogCkBA
IC0xMDQ3LDI2ICsxMDU0LDE4IEBAIHZvaWQgSFRNTFRva2VuaXplcjo6cGFyc2VUYWcoVG9rZW5p
emVyU3QKICAgICAgICAgICAgICAgICAgICAgLy8gU3RhcnQgVGFnCiAgICAgICAgICAgICAgICAg
ICAgIGJlZ2luVGFnID0gdHJ1ZTsKIAotICAgICAgICAgICAgICAgIC8vIEFjY2VwdCBlbXB0eSB4
bWwgdGFncyBsaWtlIDxici8+LiAgV2UgdHJpbSBvZmYgdGhlICIvIiBzbyB0aGF0IHdoZW4gd2Ug
Y2FsbAotICAgICAgICAgICAgICAgIC8vIGdldFRhZ0lELCB3ZSdsbCBsb29rIHVwICJiciIgYXMg
dGhlIHRhZyBuYW1lIGFuZCBub3QgImJyLyIuCisgICAgICAgICAgICAgICAgLy8gSWdub3JlIHRo
ZSAvIGluIGZha2UgeG1sIHRhZ3MgbGlrZSA8YnIvPi4gIFdlIHRyaW0gb2ZmIHRoZSAiLyIgc28g
dGhhdCB3ZSdsbCBnZXQgImJyIiBhcyB0aGUgdGFnIG5hbWUgYW5kIG5vdCAiYnIvIi4KICAgICAg
ICAgICAgICAgICBpZihsZW4gPiAxICYmIHB0cltsZW4tMV0gPT0gJy8nICkKICAgICAgICAgICAg
ICAgICAgICAgcHRyWy0tbGVuXSA9ICdcMCc7CiAKLSAgICAgICAgICAgICAgICAvLyBMb29rIHVw
IHRoZSB0YWdJRCBmb3IgdGhlIHNwZWNpZmllZCB0YWcgbmFtZSAobm93IHRoYXQgd2UndmUgc2hh
dmVkIG9mZiBhbnkKLSAgICAgICAgICAgICAgICAvLyBpbnZhbGlkIC8gdGhhdCBtaWdodCBoYXZl
IGZvbGxvd2VkIHRoZSBuYW1lKS4KLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCB0YWdJ
RCA9IGdldFRhZ0lEKHB0ciwgbGVuKTsKLSAgICAgICAgICAgICAgICBpZiAoIXRhZ0lEKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIERPTVN0cmluZyB0YWdOYW1lKHB0cik7Ci0gICAgICAgICAgICAg
ICAgICAgIERvY3VtZW50SW1wbCAqZG9jID0gcGFyc2VyLT5kb2NQdHIoKS0+ZG9jdW1lbnQoKTsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKGRvYy0+aXNWYWxpZE5hbWUodGFnTmFtZSkpCi0gICAg
ICAgICAgICAgICAgICAgICAgICB0YWdJRCA9IHBhcnNlci0+ZG9jUHRyKCktPmRvY3VtZW50KCkt
PnRhZ0lkKDAsIHRhZ05hbWUuaW1wbGVtZW50YXRpb24oKSwgZmFsc2UpOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBpZiAodGFnSUQpIHsKLSNpZmRlZiBUT0tFTl9ERUJVRwot
ICAgICAgICAgICAgICAgICAgICBRQ1N0cmluZyB0bXAocHRyLCBsZW4rMSk7Ci0gICAgICAgICAg
ICAgICAgICAgIGtkRGVidWcoIDYwMzYgKSA8PCAiZm91bmQgdGFnIGlkPSIgPDwgdGFnSUQgPDwg
IjogIiA8PCB0bXAuZGF0YSgpIDw8IGVuZGw7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICAgICAg
Y3VyclRva2VuLmlkID0gYmVnaW5UYWcgPyB0YWdJRCA6IHRhZ0lEICsgSURfQ0xPU0VfVEFHOwor
ICAgICAgICAgICAgICAgIC8vIE5vdyB0aGF0IHdlJ3ZlIHNoYXZlZCBvZmYgYW55IGludmFsaWQg
LyB0aGF0IG1pZ2h0IGhhdmUgZm9sbG93ZWQgdGhlIG5hbWUpLCBtYWtlIHRoZSB0YWcuCisgICAg
ICAgICAgICAgICAgRE9NU3RyaW5nIHRhZ05hbWUocHRyKTsKKyAgICAgICAgICAgICAgICBEb2N1
bWVudEltcGwgKmRvYyA9IHBhcnNlci0+ZG9jUHRyKCktPmRvY3VtZW50KCk7CisgICAgICAgICAg
ICAgICAgaWYgKGRvYy0+aXNWYWxpZE5hbWUodGFnTmFtZSkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgLy8gRklYTUU6IFdvdWxkIGJlIG5pY2UgdG8gaGF2ZSBhbiBhdG9taWNzdHJpbmcgbG9va3Vw
IGJhc2VkIG9mZiBsb3dlcmNhc2UgY2hhcnMgdGhhdCBkb2VzIG5vdCBoYXZlIHRvIGNvcHkKKyAg
ICAgICAgICAgICAgICAgICAgLy8gdGhlIHN0cmluZyBvbiBhIGhpdCBpbiB0aGUgaGFzaC4KKyAg
ICAgICAgICAgICAgICAgICAgY3VyclRva2VuLnRhZ05hbWUgPSBBdG9taWNTdHJpbmcodGFnTmFt
ZSk7IC8vIFdlIGhhdmUgdG8gY2Fub25pY2FsaXplIG9uIGxvd2VyLWNhc2UuCisgICAgICAgICAg
ICAgICAgICAgIGN1cnJUb2tlbi5iZWdpblRhZyA9IGJlZ2luVGFnOwogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICBkZXN0ID0gYnVmZmVyOwogICAgICAgICAgICAgICAgIHRhZyA9
IFNlYXJjaEF0dHJpYnV0ZTsKQEAgLTExMTgsMTUgKzExMTcsNiBAQCB2b2lkIEhUTUxUb2tlbml6
ZXI6OnBhcnNlVGFnKFRva2VuaXplclN0CiAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyTmFtZSA9IFFTdHJpbmc6OmZyb21MYXRp
bjEoUUNTdHJpbmcoY0J1ZmZlciwgY0J1ZmZlclBvcysxKS5kYXRhKCkpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGF0dHJOYW1lUHJlc2VudCA9ICFhdHRyTmFtZS5pc0VtcHR5KCk7Ci0K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgZGVsaWJlcmF0ZSBxdWly
ayB0byBtYXRjaCBNb3ppbGxhIGFuZCBPcGVyYS4gIFdlIGhhdmUgdG8gZG8gdGhpcwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIHNpbmNlIHNpdGVzIHRoYXQgdXNlIHRoZSAic3RhbmRh
cmRzLWNvbXBsaWFudCIgcGF0aCBzb21ldGltZXMgc2VuZAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIDxzY3JpcHQgc3JjPSJmb28uanMiLz4uICBCb3RoIE1veiBhbmQgT3BlcmEgd2ls
bCBob25vciB0aGlzLCBkZXNwaXRlIGl0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
YmVpbmcgYm9ndXMgSFRNTC4gIFRoZXkgZG8gbm90IGhvbm9yIHRoZSAiLyIgZm9yIG90aGVyIHRh
Z3MuICBUaGlzIGJlaGF2aW9yCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWxzbyBk
ZXZpYXRlcyBmcm9tIFdpbklFLCBidXQgaW4gdGhpcyBjYXNlIHdlJ2xsIGp1c3QgY29weSBNb3og
YW5kIE9wZXJhLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyVG9rZW4uaWQg
PT0gSURfU0NSSVBUICYmIGN1cmNoYXIgPT0gJz4nICYmCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGF0dHJOYW1lID09ICIvIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY3VyclRva2VuLmZsYXQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0ID0gYnVm
ZmVyOwpAQCAtMTE0MiwxMCArMTEzMiwxMiBAQCB2b2lkIEhUTUxUb2tlbml6ZXI6OnBhcnNlVGFn
KFRva2VuaXplclN0CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAvLyBVc2UgdG9s
b3dlcigpIGluc3RlYWQgb2YgfCAweDIwIHRvIGxvd2VyY2FzZSB0aGUgY2hhciBiZWNhdXNlIHRo
ZXJlIGlzIG5vIAotICAgICAgICAgICAgICAgIC8vIHBlcmZvcm1hbmNlIGdhaW4gaW4gdXNpbmcg
fCAweDIwIHNpbmNlIHRvbG93ZXIoKSBpcyBvcHRpbWl6ZWQgYW5kIAotICAgICAgICAgICAgICAg
IC8vIHwgMHgyMCB0dXJucyBjaGFyYWN0ZXJzIHN1Y2ggYXMgJ18nIGludG8ganVuay4KLSAgICAg
ICAgICAgICAgICBjQnVmZmVyW2NCdWZmZXJQb3MrK10gPSB0b2xvd2VyKGN1cmNoYXIpOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIHRvbG93ZXIoKSBzaG93cyB1cCBvbiBw
cm9maWxlcy4gVGhpcyBpcyBmYXN0ZXIhCisgICAgICAgICAgICAgICAgaWYgKGN1cmNoYXIgPj0g
J0EnICYmIGN1cmNoYXIgPD0gJ1onKQorICAgICAgICAgICAgICAgICAgICBjQnVmZmVyW2NCdWZm
ZXJQb3MrK10gPSBjdXJjaGFyICsgKCdhJyAtICdBJyk7CisgICAgICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgICAgICBjQnVmZmVyW2NCdWZmZXJQb3MrK10gPSBjdXJjaGFyOwogICAg
ICAgICAgICAgICAgICsrc3JjOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKCBjQnVm
ZmVyUG9zID09IENCVUZMRU4gKSB7CkBAIC0xMzI4LDE4ICsxMzIwLDE1IEBAIHZvaWQgSFRNTFRv
a2VuaXplcjo6cGFyc2VUYWcoVG9rZW5pemVyU3QKICAgICAgICAgICAgIGlmICgqc3JjICE9ICc8
JykKICAgICAgICAgICAgICAgICArK3NyYzsKIAotICAgICAgICAgICAgaWYgKCAhY3VyclRva2Vu
LmlkICkgLy9zdG9wIGlmIHRhZyBpcyB1bmtub3duCisgICAgICAgICAgICBpZiAoY3VyclRva2Vu
LnRhZ05hbWUgPT0gbnVsbEF0b20pIC8vc3RvcCBpZiB0YWcgaXMgdW5rbm93bgogICAgICAgICAg
ICAgICAgIHJldHVybjsKIAotICAgICAgICAgICAgdWludCB0YWdJRCA9IGN1cnJUb2tlbi5pZDsK
KyAgICAgICAgICAgIEF0b21pY1N0cmluZyB0YWdOYW1lID0gY3VyclRva2VuLnRhZ05hbWU7CiAj
aWYgZGVmaW5lZChUT0tFTl9ERUJVRykgJiYgVE9LRU5fREVCVUcgPiAwCiAgICAgICAgICAgICBr
ZERlYnVnKCA2MDM2ICkgPDwgImFwcGVuZGluZyBUYWc6ICIgPDwgdGFnSUQgPDwgZW5kbDsKICNl
bmRpZgotICAgICAgICAgICAgYm9vbCBiZWdpblRhZyA9ICFjdXJyVG9rZW4uZmxhdCAmJiAodGFn
SUQgPD0gSURfQ0xPU0VfVEFHKTsKLQotICAgICAgICAgICAgaWYgKHRhZ0lEID4gSURfQ0xPU0Vf
VEFHKQotICAgICAgICAgICAgICAgIHRhZ0lEIC09IElEX0NMT1NFX1RBRzsKLSAgICAgICAgICAg
IGVsc2UgaWYgKHRhZ0lEID09IElEX1NDUklQVCkgeworICAgICAgICAgICAgYm9vbCBiZWdpblRh
ZyA9ICFjdXJyVG9rZW4uZmxhdCAmJiBjdXJyVG9rZW4uYmVnaW5UYWc7CisgICAgICAgICAgICBp
ZiAoYmVnaW5UYWcgJiYgY3VyclRva2VuLnRhZ05hbWUgPT0gSFRNTE5hbWVzOjpzY3JpcHQoKSkg
ewogICAgICAgICAgICAgICAgIEF0dHJpYnV0ZUltcGwqIGEgPSAwOwogICAgICAgICAgICAgICAg
IGJvb2wgZm91bmRUeXBlQXR0cmlidXRlID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgc2NyaXB0
U3JjID0gUVN0cmluZzo6bnVsbDsKQEAgLTE0MTQsNzEgKzE0MDMsNDkgQEAgdm9pZCBIVE1MVG9r
ZW5pemVyOjpwYXJzZVRhZyhUb2tlbml6ZXJTdAogCiAgICAgICAgICAgICBwcm9jZXNzVG9rZW4o
KTsKIAotICAgICAgICAgICAgLy8gd2UgaGF2ZSB0byB0YWtlIGNhcmUgdG8gY2xvc2UgdGhlIHBy
ZSBibG9jayBpbgotICAgICAgICAgICAgLy8gY2FzZSB3ZSBlbmNvdW50ZXIgYW4gdW5hbGxvd2Vk
IGVsZW1lbnQuLi4uCi0gICAgICAgICAgICBpZihwcmUgJiYgYmVnaW5UYWcgJiYgIURPTTo6Y2hl
Y2tDaGlsZChJRF9QUkUsIHRhZ0lELCAhcGFyc2VyLT5kb2MoKS0+aW5Db21wYXRNb2RlKCkpKSB7
Ci0gICAgICAgICAgICAgICAga2REZWJ1Zyg2MDM2KSA8PCAiIG5vdCBhbGxvd2VkIGluIDxwcmU+
ICIgPDwgKGludCl0YWdJRCA8PCBlbmRsOwotICAgICAgICAgICAgICAgIHByZSA9IGZhbHNlOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBzd2l0Y2goIHRhZ0lEICkgewotICAgICAgICAg
ICAgY2FzZSBJRF9QUkU6CisgICAgICAgICAgICBpZiAodGFnTmFtZSA9PSBIVE1MTmFtZXM6OnBy
ZSgpKSB7CiAgICAgICAgICAgICAgICAgcHJlUG9zID0gMDsKICAgICAgICAgICAgICAgICBwcmUg
PSBiZWdpblRhZzsKICAgICAgICAgICAgICAgICBkaXNjYXJkID0gTEZEaXNjYXJkOyAvLyBEaXNj
YXJkIHRoZSBmaXJzdCBMRiBhZnRlciB3ZSBvcGVuIGEgcHJlLgotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgY2FzZSBJRF9TQ1JJUFQ6CisgICAgICAgICAgICB9IGVsc2UgaWYg
KHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpzY3JpcHQoKSkgewogICAgICAgICAgICAgICAgIGlmIChi
ZWdpblRhZykgewogICAgICAgICAgICAgICAgICAgICBzZWFyY2hTdG9wcGVyID0gc2NyaXB0RW5k
OwogICAgICAgICAgICAgICAgICAgICBzZWFyY2hTdG9wcGVyTGVuID0gODsKICAgICAgICAgICAg
ICAgICAgICAgc2NyaXB0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgcGFyc2VTcGVjaWFs
KHNyYyk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRhZ0lE
IDw9IElEX0NMT1NFX1RBRykgeyAvLyBIYW5kbGUgPHNjcmlwdCBzcmM9ImZvbyIvPgotICAgICAg
ICAgICAgICAgICAgICBzY3JpcHQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBzY3JpcHRI
YW5kbGVyKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgY2FzZSBJRF9TVFlMRToKKyAgICAgICAgICAgIH0gZWxzZSBpZiAodGFnTmFtZSA9
PSBIVE1MTmFtZXM6OnN0eWxlKCkpIHsKICAgICAgICAgICAgICAgICBpZiAoYmVnaW5UYWcpIHsK
ICAgICAgICAgICAgICAgICAgICAgc2VhcmNoU3RvcHBlciA9IHN0eWxlRW5kOwogICAgICAgICAg
ICAgICAgICAgICBzZWFyY2hTdG9wcGVyTGVuID0gNzsKICAgICAgICAgICAgICAgICAgICAgc3R5
bGUgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBwYXJzZVNwZWNpYWwoc3JjKTsKICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIElE
X1RFWFRBUkVBOgorICAgICAgICAgICAgfSBlbHNlIGlmICh0YWdOYW1lID09IEhUTUxOYW1lczo6
dGV4dGFyZWEoKSkgewogICAgICAgICAgICAgICAgIGlmKGJlZ2luVGFnKSB7CiAgICAgICAgICAg
ICAgICAgICAgIHNlYXJjaFN0b3BwZXIgPSB0ZXh0YXJlYUVuZDsKICAgICAgICAgICAgICAgICAg
ICAgc2VhcmNoU3RvcHBlckxlbiA9IDEwOwogICAgICAgICAgICAgICAgICAgICB0ZXh0YXJlYSA9
IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIHBhcnNlU3BlY2lhbChzcmMpOwogICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgSURfVElU
TEU6Ci0gICAgICAgICAgICAgICAgaWYgKGJlZ2luVGFnKSB7CisgICAgICAgICAgICB9IGVsc2Ug
aWYgKHRhZ05hbWUgPT0gSFRNTE5hbWVzOjp0aXRsZSgpKSB7CisgICAgICAgICAgICAgICAgIGlm
IChiZWdpblRhZykgewogICAgICAgICAgICAgICAgICAgICBzZWFyY2hTdG9wcGVyID0gdGl0bGVF
bmQ7CiAgICAgICAgICAgICAgICAgICAgIHNlYXJjaFN0b3BwZXJMZW4gPSA3OwogICAgICAgICAg
ICAgICAgICAgICB0aXRsZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIHBhcnNlU3BlY2lh
bChzcmMpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIGNhc2UgSURfWE1QOgorICAgICAgICAgICAgfSBlbHNlIGlmICh0YWdOYW1lID09IEhU
TUxOYW1lczo6eG1wKCkpIHsKICAgICAgICAgICAgICAgICBpZiAoYmVnaW5UYWcpIHsKICAgICAg
ICAgICAgICAgICAgICAgc2VhcmNoU3RvcHBlciA9IHhtcEVuZDsKICAgICAgICAgICAgICAgICAg
ICAgc2VhcmNoU3RvcHBlckxlbiA9IDU7CiAgICAgICAgICAgICAgICAgICAgIHhtcCA9IHRydWU7
CiAgICAgICAgICAgICAgICAgICAgIHBhcnNlU3BlY2lhbChzcmMpOwogICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgSURfU0VMRUNUOgor
ICAgICAgICAgICAgfSBlbHNlIGlmICh0YWdOYW1lID09IEhUTUxOYW1lczo6c2VsZWN0KCkpCiAg
ICAgICAgICAgICAgICAgc2VsZWN0ID0gYmVnaW5UYWc7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBjYXNlIElEX1BMQUlOVEVYVDoKKyAgICAgICAgICAgIGVsc2UgaWYgKHRh
Z05hbWUgPT0gSFRNTE5hbWVzOjpwbGFpbnRleHQoKSkKICAgICAgICAgICAgICAgICBwbGFpbnRl
eHQgPSBiZWdpblRhZzsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQog
ICAgICAgICAgICAgcmV0dXJuOyAvLyBGaW5pc2hlZCBwYXJzaW5nIHRhZyEKICAgICAgICAgfQog
ICAgICAgICB9IC8vIGVuZCBzd2l0Y2gKQEAgLTE5ODksMTAgKzE5NTYsMTAgQEAgdm9pZCBIVE1M
VG9rZW5pemVyOjpwcm9jZXNzVG9rZW4oKQogI2VuZGlmCiAgICAgICAgIGN1cnJUb2tlbi50ZXh0
ID0gbmV3IERPTVN0cmluZ0ltcGwoIGJ1ZmZlciwgZGVzdCAtIGJ1ZmZlciApOwogICAgICAgICBj
dXJyVG9rZW4udGV4dC0+cmVmKCk7Ci0gICAgICAgIGlmIChjdXJyVG9rZW4uaWQgIT0gSURfQ09N
TUVOVCkKLSAgICAgICAgICAgIGN1cnJUb2tlbi5pZCA9IElEX1RFWFQ7CisgICAgICAgIGlmIChj
dXJyVG9rZW4udGFnTmFtZSAhPSBjb21tZW50QXRvbSkKKyAgICAgICAgICAgIGN1cnJUb2tlbi50
YWdOYW1lID0gdGV4dEF0b207CiAgICAgfQotICAgIGVsc2UgaWYoIWN1cnJUb2tlbi5pZCkgewor
ICAgIGVsc2UgaWYgKGN1cnJUb2tlbi50YWdOYW1lID09IG51bGxBdG9tKSB7CiAgICAgICAgIGN1
cnJUb2tlbi5yZXNldCgpOwogICAgICAgICBpZiAoanNQcm94eSkKICAgICAgICAgICAgIGpzUHJv
eHktPnNldEV2ZW50SGFuZGxlckxpbmVubyhsaW5lbm8rc3JjLmxpbmVDb3VudCgpKTsKSW5kZXg6
IGtodG1sL2h0bWwvaHRtbHRva2VuaXplci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbHRva2VuaXplci5oLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjM2CmRpZmYgLXUgLXAgLXIxLjM2IGtodG1sL2h0bWwvaHRtbHRva2VuaXplci5oCi0tLSBr
aHRtbC9odG1sL2h0bWx0b2tlbml6ZXIuaAk1IEp1bCAyMDA1IDIzOjIxOjEwIC0wMDAwCTEuMzYK
KysrIGtodG1sL2h0bWwvaHRtbHRva2VuaXplci5oCTcgSnVsIDIwMDUgMDU6NTk6MDggLTAwMDAK
QEAgLTM0LDggKzM0LDYgQEAKICNpbmNsdWRlIDxxcHRycXVldWUuaD4KIAogI2luY2x1ZGUgIm1p
c2MvbG9hZGVyX2NsaWVudC5oIgotI2luY2x1ZGUgIm1pc2MvaHRtbHRhZ3MuaCIKLSNpbmNsdWRl
ICJ4bWwvZG9tX3N0cmluZ2ltcGwuaCIKICNpbmNsdWRlICJ4bWwveG1sX3Rva2VuaXplci5oIgog
I2luY2x1ZGUgImh0bWwvaHRtbF9lbGVtZW50aW1wbC5oIgogI2luY2x1ZGUgInhtbC9kb21fZG9j
aW1wbC5oIgpAQCAtNDcsNyArNDUsNyBAQAogI2VuZGlmCiAKIGNsYXNzIEtDaGFyc2V0czsKLWNs
YXNzIEtIVE1MUGFyc2VyOworY2xhc3MgSFRNTFBhcnNlcjsKIGNsYXNzIEtIVE1MVmlldzsKIAog
bmFtZXNwYWNlIERPTSB7CkBAIC03MCwyMiArNjgsMjQgQEAgY2xhc3MgVG9rZW4KIHsKIHB1Ymxp
YzoKICAgICBUb2tlbigpIHsKLSAgICAgICAgaWQgPSAwOwogICAgICAgICBhdHRycyA9IDA7CiAg
ICAgICAgIHRleHQgPSAwOworICAgICAgICBiZWdpblRhZyA9IHRydWU7CiAgICAgICAgIGZsYXQg
PSBmYWxzZTsKICAgICAgICAgLy9xRGVidWcoIm5ldyB0b2tlbiwgY3JlYXRpbmcgJTA4bHgiLCBh
dHRycyk7CiAgICAgfQorCiAgICAgflRva2VuKCkgewotICAgICAgICBpZihhdHRycykgYXR0cnMt
PmRlcmVmKCk7Ci0gICAgICAgIGlmKHRleHQpIHRleHQtPmRlcmVmKCk7CisgICAgICAgIGlmIChh
dHRycykgYXR0cnMtPmRlcmVmKCk7CisgICAgICAgIGlmICh0ZXh0KSB0ZXh0LT5kZXJlZigpOwog
ICAgIH0KKwogICAgIHZvaWQgYWRkQXR0cmlidXRlKERPTTo6RG9jdW1lbnRJbXBsKiBkb2MsIFFD
aGFyKiBidWZmZXIsIGNvbnN0IFFTdHJpbmcmIGF0dHJOYW1lLCBjb25zdCBET006OkF0b21pY1N0
cmluZyYgdikKICAgICB7CiAgICAgICAgIERPTTo6QXR0cmlidXRlSW1wbCogYSA9IDA7Ci0gICAg
ICAgIGlmKGJ1ZmZlci0+dW5pY29kZSgpKQorICAgICAgICBpZiAoYnVmZmVyLT51bmljb2RlKCkp
CiAgICAgICAgICAgICBhID0gbmV3IERPTTo6TWFwcGVkQXR0cmlidXRlSW1wbChidWZmZXItPnVu
aWNvZGUoKSwgdik7Ci0gICAgICAgIGVsc2UgaWYgKCAhYXR0ck5hbWUuaXNFbXB0eSgpICYmIGF0
dHJOYW1lICE9ICIvIiApCisgICAgICAgIGVsc2UgaWYgKCFhdHRyTmFtZS5pc0VtcHR5KCkgJiYg
YXR0ck5hbWUgIT0gIi8iKQogICAgICAgICAgICAgYSA9IG5ldyBET006Ok1hcHBlZEF0dHJpYnV0
ZUltcGwoZG9jLT5hdHRySWQoMCwgRE9NOjpET01TdHJpbmcoYXR0ck5hbWUpLmltcGxlbWVudGF0
aW9uKCksIGZhbHNlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHYpOwogCkBAIC05NywyMyArOTcsMzMgQEAgcHVibGljOgogICAgICAgICAgICAgYXR0cnMt
Pmluc2VydEF0dHJpYnV0ZShhKTsKICAgICAgICAgfQogICAgIH0KKworICAgIGJvb2wgaXNPcGVu
VGFnKGNvbnN0IERPTTo6UXVhbGlmaWVkTmFtZSYgZnVsbE5hbWUpIGNvbnN0IHsgcmV0dXJuIGJl
Z2luVGFnICYmIGZ1bGxOYW1lLmxvY2FsTmFtZSgpID09IHRhZ05hbWU7IH0KKyAgICBib29sIGlz
Q2xvc2VUYWcoY29uc3QgRE9NOjpRdWFsaWZpZWROYW1lJiBmdWxsTmFtZSkgY29uc3QgeyByZXR1
cm4gIWJlZ2luVGFnICYmIGZ1bGxOYW1lLmxvY2FsTmFtZSgpID09IHRhZ05hbWU7IH0KKwogICAg
IHZvaWQgcmVzZXQoKQogICAgIHsKLSAgICAgICAgaWYoYXR0cnMpIHsKKyAgICAgICAgaWYgKGF0
dHJzKSB7CiAgICAgICAgICAgICBhdHRycy0+ZGVyZWYoKTsKICAgICAgICAgICAgIGF0dHJzID0g
MDsKICAgICAgICAgfQotICAgICAgICBpZCA9IDA7Ci0gICAgICAgIGlmKHRleHQpIHsKKyAgICAg
ICAgCisgICAgICAgIHRhZ05hbWUgPSBET006Om51bGxBdG9tOworICAgICAgICAKKyAgICAgICAg
aWYgKHRleHQpIHsKICAgICAgICAgICAgIHRleHQtPmRlcmVmKCk7CiAgICAgICAgICAgICB0ZXh0
ID0gMDsKICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYmVnaW5UYWcgPSB0cnVlOwogICAg
ICAgICBmbGF0ID0gZmFsc2U7CiAgICAgfQorCiAgICAgRE9NOjpOYW1lZE1hcHBlZEF0dHJNYXBJ
bXBsKiBhdHRyczsKICAgICBET006OkRPTVN0cmluZ0ltcGwqIHRleHQ7Ci0gICAgdXNob3J0IGlk
OwotICAgIGJvb2wgZmxhdDsKKyAgICBET006OkF0b21pY1N0cmluZyB0YWdOYW1lOworICAgIGJv
b2wgYmVnaW5UYWcgOiAxOworICAgIGJvb2wgZmxhdCA6IDE7CiB9OwogCiAvLyBUaGUgY291bnQg
b2Ygc3BhY2VzIHVzZWQgZm9yIGVhY2ggdGFiLgpAQCAtMzY4LDcgKzM3OCw3IEBAIHByb3RlY3Rl
ZDoKICAgICBUb2tlbml6ZXJTdHJpbmcgc3JjOwogCiAgICAgS0NoYXJzZXRzICpjaGFyc2V0czsK
LSAgICBLSFRNTFBhcnNlciAqcGFyc2VyOworICAgIEhUTUxQYXJzZXIgKnBhcnNlcjsKIAogICAg
IFFHdWFyZGVkUHRyPEtIVE1MVmlldz4gdmlldzsKICAgICAKSW5kZXg6IGtodG1sL21pc2MvZGVj
b2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvbWlz
Yy9kZWNvZGVyLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zNQpkaWZmIC11IC1wIC1yMS4z
NSBraHRtbC9taXNjL2RlY29kZXIuY3BwCi0tLSBraHRtbC9taXNjL2RlY29kZXIuY3BwCTI4IEp1
biAyMDA1IDE4OjQ3OjEyIC0wMDAwCTEuMzUKKysrIGtodG1sL21pc2MvZGVjb2Rlci5jcHAJNyBK
dWwgMjAwNSAwNTo1OTowOSAtMDAwMApAQCAtNDEsNiArNDEsMTIgQEAgdXNpbmcgbmFtZXNwYWNl
IGtodG1sOwogI2luY2x1ZGUgPGtkZWJ1Zy5oPgogI2luY2x1ZGUgPGtsb2NhbGUuaD4KIAorI2lu
Y2x1ZGUgImh0bWxuYW1lcy5oIgorCit1c2luZyBET006OkF0b21pY1N0cmluZzsKK3VzaW5nIERP
TTo6SFRNTE5hbWVzOwordXNpbmcgRE9NOjpudWxsQXRvbTsKKwogY2xhc3MgS2FuamlDb2RlCiB7
CiBwdWJsaWM6CkBAIC01MjYsMTIgKzUzMiw4IEBAIFFTdHJpbmcgRGVjb2Rlcjo6ZGVjb2RlKGNv
bnN0IGNoYXIgKmRhdGEKICAgICAgICAgICAgICAgICAgICAgICAgIGxlbisrOwogICAgICAgICAg
ICAgICAgICAgICB9CiAJCSAgICB0bXBbbGVuXSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGlu
dCBpZCA9IGtodG1sOjpnZXRUYWdJRCh0bXAsIGxlbik7Ci0gICAgICAgICAgICAgICAgICAgIGlm
KGVuZCkgaWQgKz0gSURfQ0xPU0VfVEFHOwotCi0gICAgICAgICAgICAgICAgICAgIHN3aXRjaCgg
aWQgKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfTUVUQToKLSAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICBBdG9taWNTdHJpbmcgdGFnKHRtcCk7CisgICAg
ICAgICAgICAgICAgICAgIGlmICghZW5kICYmIHRhZyA9PSBIVE1MTmFtZXM6Om1ldGEoKSkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm91bmQgYSBtZXRhIHRhZy4uLgogICAgICAgICAg
ICAgICAgICAgICAgICAgLy9wdHIgKz0gNTsKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGNoYXIgKiBlbmQgPSBwdHI7CkBAIC01NzAsMjggKzU3MiwxMSBAQCBRU3RyaW5nIERlY29kZXI6
OmRlY29kZShjb25zdCBjaGFyICpkYXRhCiAKIAkJCSAgICBwb3MgPSBlbmRwb3MgKyAxOwogCQkJ
fQotCQkgICAgfQotICAgICAgICAgICAgICAgICAgICBjYXNlIChJRF9NRVRBK0lEX0NMT1NFX1RB
Ryk6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfU0NSSVBUOgotICAgICAgICAgICAgICAg
ICAgICBjYXNlIChJRF9TQ1JJUFQrSURfQ0xPU0VfVEFHKToKLSAgICAgICAgICAgICAgICAgICAg
Y2FzZSBJRF9OT1NDUklQVDoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAoSURfTk9TQ1JJUFQr
SURfQ0xPU0VfVEFHKToKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9TVFlMRToKLSAgICAg
ICAgICAgICAgICAgICAgY2FzZSAoSURfU1RZTEUrSURfQ0xPU0VfVEFHKToKLSAgICAgICAgICAg
ICAgICAgICAgY2FzZSBJRF9MSU5LOgotICAgICAgICAgICAgICAgICAgICBjYXNlIChJRF9MSU5L
K0lEX0NMT1NFX1RBRyk6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfT0JKRUNUOgotICAg
ICAgICAgICAgICAgICAgICBjYXNlIChJRF9PQkpFQ1QrSURfQ0xPU0VfVEFHKToKLSAgICAgICAg
ICAgICAgICAgICAgY2FzZSBJRF9USVRMRToKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAoSURf
VElUTEUrSURfQ0xPU0VfVEFHKToKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9CQVNFOgot
ICAgICAgICAgICAgICAgICAgICBjYXNlIChJRF9CQVNFK0lEX0NMT1NFX1RBRyk6Ci0gICAgICAg
ICAgICAgICAgICAgIGNhc2UgSURfSFRNTDoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9I
RUFEOgotICAgICAgICAgICAgICAgICAgICBjYXNlIDA6Ci0gICAgICAgICAgICAgICAgICAgIGNh
c2UgKDAgKyBJRF9DTE9TRV9UQUcgKToKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorCQkgICAgfSBlbHNlIGlmICh0YWcgIT0gSFRN
TE5hbWVzOjpzY3JpcHQoKSAmJiB0YWcgIT0gSFRNTE5hbWVzOjpub3NjcmlwdCgpICYmIHRhZyAh
PSBIVE1MTmFtZXM6OnN0eWxlKCkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
YWcgIT0gSFRNTE5hbWVzOjpsaW5rKCkgJiYgdGFnICE9IEhUTUxOYW1lczo6bWV0YSgpICYmIHRh
ZyAhPSBIVE1MTmFtZXM6Om9iamVjdCgpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdGFnICE9IEhUTUxOYW1lczo6dGl0bGUoKSAmJiB0YWcgIT0gSFRNTE5hbWVzOjpiYXNlKCkg
JiYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVuZCB8fCB0YWcgIT0gSFRNTE5h
bWVzOjpodG1sKCkpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVuZCB8fCB0
YWcgIT0gSFRNTE5hbWVzOjpoZWFkKCkpICYmIGlzYWxwaGEodG1wWzBdKSkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgYm9keSA9IHRydWU7CiAjaWZkZWYgREVDT0RFX0RFQlVHCiAJCQlrZERl
YnVnKCA2MDA1ICkgPDwgIkRlY29kZXI6IG5vIGNoYXJzZXQgZm91bmQuIElkPSIgPDwgaWQgPDwg
ZW5kbDsKSW5kZXg6IGtodG1sL21pc2MvaHRtbGhhc2hlcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvbWlzYy9odG1saGFzaGVzLmNwcCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS4xMApkaWZmIC11IC1wIC1yMS4xMCBraHRtbC9taXNjL2h0bWxoYXNoZXMu
Y3BwCi0tLSBraHRtbC9taXNjL2h0bWxoYXNoZXMuY3BwCTUgSmFuIDIwMDUgMjI6NTY6NDYgLTAw
MDAJMS4xMAorKysga2h0bWwvbWlzYy9odG1saGFzaGVzLmNwcAk3IEp1bCAyMDA1IDA1OjU5OjA5
IC0wMDAwCkBAIC0yNSwyMiArMjUsMTMgQEAKIC8vIHR1cm4gb2ZmIGlubGluaW5nIHRvIHZvaWQg
d2FybmluZyB3aXRoIG5ld2VyIGdjYwogI3VuZGVmIF9faW5saW5lCiAjZGVmaW5lIF9faW5saW5l
Ci0jaW5jbHVkZSAiaHRtbHRhZ3MuYyIKICNpbmNsdWRlICJodG1sYXR0cnMuYyIKICN1bmRlZiBf
X2lubGluZQogCi11bnNpZ25lZCBzaG9ydCBraHRtbDo6Z2V0VGFnSUQoY29uc3QgY2hhciAqdGFn
U3RyLCBpbnQgbGVuKQordW5zaWduZWQgc2hvcnQga2h0bWw6OmdldEF0dHJJRChjb25zdCBjaGFy
ICphdHRyU3RyLCBpbnQgbGVuKQogewotICAgIGNvbnN0IHN0cnVjdCB0YWdzICp0YWdQdHIgPSBm
aW5kVGFnKHRhZ1N0ciwgbGVuKTsKLSAgICBpZiAoIXRhZ1B0cikKKyAgICBjb25zdCBzdHJ1Y3Qg
YXR0cnMgKmF0dHJQdHIgPSBmaW5kQXR0cihhdHRyU3RyLCBsZW4pOworICAgIGlmICghYXR0clB0
cikKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIHRhZ1B0ci0+aWQ7Ci19Ci0KLXVuc2ln
bmVkIHNob3J0IGtodG1sOjpnZXRBdHRySUQoY29uc3QgY2hhciAqdGFnU3RyLCBpbnQgbGVuKQot
ewotICAgIGNvbnN0IHN0cnVjdCBhdHRycyAqdGFnUHRyID0gZmluZEF0dHIodGFnU3RyLCBsZW4p
OwotICAgIGlmICghdGFnUHRyKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gdGFnUHRy
LT5pZDsKKyAgICByZXR1cm4gYXR0clB0ci0+aWQ7CiB9CkluZGV4OiBraHRtbC9taXNjL2h0bWxo
YXNoZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9taXNj
L2h0bWxoYXNoZXMuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS42CmRpZmYgLXUgLXAgLXIxLjYg
a2h0bWwvbWlzYy9odG1saGFzaGVzLmgKLS0tIGtodG1sL21pc2MvaHRtbGhhc2hlcy5oCTUgSmFu
IDIwMDUgMjI6NTY6NDYgLTAwMDAJMS42CisrKyBraHRtbC9taXNjL2h0bWxoYXNoZXMuaAk3IEp1
bCAyMDA1IDA1OjU5OjA5IC0wMDAwCkBAIC0yMywxMiArMjMsMTAgQEAKICNpZm5kZWYgSFRNTEhB
U0hFU19ICiAjZGVmaW5lIEhUTUxIQVNIRVNfSAogCi0jaW5jbHVkZSAiaHRtbHRhZ3MuaCIKICNp
bmNsdWRlICJodG1sYXR0cnMuaCIKIAogbmFtZXNwYWNlIGtodG1sCiB7Ci0gIHVuc2lnbmVkIHNo
b3J0IGdldFRhZ0lEKGNvbnN0IGNoYXIgKnRhZ1N0ciwgaW50IGxlbik7CiAgIHVuc2lnbmVkIHNo
b3J0IGdldEF0dHJJRChjb25zdCBjaGFyICp0YWdTdHIsIGludCBsZW4pOwogfQogCkluZGV4OiBr
aHRtbC9yZW5kZXJpbmcvcmVuZGVyX2FwcGxldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1dlYkNvcmUva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9hcHBsZXQuY3BwLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjMwCmRpZmYgLXUgLXAgLXIxLjMwIGtodG1sL3JlbmRlcmluZy9yZW5k
ZXJfYXBwbGV0LmNwcAotLS0ga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9hcHBsZXQuY3BwCTEwIE1h
eSAyMDA1IDE4OjQyOjAzIC0wMDAwCTEuMzAKKysrIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfYXBw
bGV0LmNwcAk3IEp1bCAyMDA1IDA1OjU5OjA5IC0wMDAwCkBAIC0zNiw3ICszNiw2IEBACiAjaWZu
ZGVmIFFfV1NfUVdTIC8vIFdlIGRvbid0IGhhdmUgSmF2YSBpbiBRdCBFbWJlZGRlZAogCiAjaW5j
bHVkZSAiamF2YS9ramF2YWFwcGxldHdpZGdldC5oIgotI2luY2x1ZGUgIm1pc2MvaHRtbHRhZ3Mu
aCIKICNpbmNsdWRlICJodG1sL2h0bWxfb2JqZWN0aW1wbC5oIgogCiB1c2luZyBuYW1lc3BhY2Ug
a2h0bWw7CkBAIC0xMDMsNyArMTAyLDcgQEAgdm9pZCBSZW5kZXJBcHBsZXQ6OmNyZWF0ZVdpZGdl
dElmTmVjZXNzYQogICAgICAgICAgICAgICAgICAgICAgICAgIG1faGVpZ2h0IC0gYm9yZGVyVG9w
KCkgLSBib3JkZXJCb3R0b20oKSAtIHBhZGRpbmdUb3AoKSAtIHBhZGRpbmdCb3R0b20oKTsKICAg
ICAgICAgICAgIE5vZGVJbXBsICpjaGlsZCA9IGVsZW1lbnQoKS0+Zmlyc3RDaGlsZCgpOwogICAg
ICAgICAgICAgd2hpbGUgKGNoaWxkKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNoaWxkLT5pZCgp
ID09IElEX1BBUkFNKSB7CisgICAgICAgICAgICAgICAgaWYgKGNoaWxkLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6cGFyYW0oKSkpIHsKICAgICAgICAgICAgICAgICAgICAgSFRNTFBhcmFtRWxlbWVu
dEltcGwgKnAgPSBzdGF0aWNfY2FzdDxIVE1MUGFyYW1FbGVtZW50SW1wbCAqPihjaGlsZCk7CiAg
ICAgICAgICAgICAgICAgICAgIG1fYXJncy5pbnNlcnQocC0+bmFtZSgpLnN0cmluZygpLCBwLT52
YWx1ZSgpLnN0cmluZygpKTsKICAgICAgICAgICAgICAgICB9CkluZGV4OiBraHRtbC9yZW5kZXJp
bmcvcmVuZGVyX2Jsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29y
ZS9raHRtbC9yZW5kZXJpbmcvcmVuZGVyX2Jsb2NrLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS4xODYKZGlmZiAtdSAtcCAtcjEuMTg2IGtodG1sL3JlbmRlcmluZy9yZW5kZXJfYmxvY2suY3Bw
Ci0tLSBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2Jsb2NrLmNwcAk1IEp1bCAyMDA1IDIzOjIxOjEx
IC0wMDAwCTEuMTg2CisrKyBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2Jsb2NrLmNwcAk3IEp1bCAy
MDA1IDA1OjU5OjEyIC0wMDAwCkBAIC00MCw3ICs0MCw2IEBACiAKICNpbmNsdWRlICJraHRtbHZp
ZXcuaCIKICNpbmNsdWRlICJraHRtbF9wYXJ0LmgiCi0jaW5jbHVkZSAiaHRtbHRhZ3MuaCIKIAog
dXNpbmcgbmFtZXNwYWNlIERPTTsKIApAQCAtNDc1LDcgKzQ3NCw3IEBAIHZvaWQgUmVuZGVyQmxv
Y2s6OmxheW91dEJsb2NrKGJvb2wgcmVsYXkKICAgICAgICAgbV90b3BNYXJnaW5RdWlyayA9IHN0
eWxlKCktPm1hcmdpblRvcCgpLnF1aXJrOwogICAgICAgICBtX2JvdHRvbU1hcmdpblF1aXJrID0g
c3R5bGUoKS0+bWFyZ2luQm90dG9tKCkucXVpcms7CiAKLSAgICAgICAgaWYgKGVsZW1lbnQoKSAm
JiBlbGVtZW50KCktPmlkKCkgPT0gSURfRk9STSAmJiBlbGVtZW50KCktPmlzTWFsZm9ybWVkKCkp
CisgICAgICAgIGlmIChlbGVtZW50KCkgJiYgZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6Zm9ybSgpKSAmJiBlbGVtZW50KCktPmlzTWFsZm9ybWVkKCkpCiAgICAgICAgICAgICAvLyBT
ZWUgaWYgdGhpcyBmb3JtIGlzIG1hbGZvcm1lZCAoaS5lLiwgdW5jbG9zZWQpLiBJZiBzbywgZG9u
J3QgZ2l2ZSB0aGUgZm9ybQogICAgICAgICAgICAgLy8gYSBib3R0b20gbWFyZ2luLgogICAgICAg
ICAgICAgbV9tYXhCb3R0b21Qb3NNYXJnaW4gPSBtX21heEJvdHRvbU5lZ01hcmdpbiA9IDA7Cklu
ZGV4OiBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2JveC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
L2N2cy9yb290L1dlYkNvcmUva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9ib3guY3BwLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjE1NApkaWZmIC11IC1wIC1yMS4xNTQga2h0bWwvcmVuZGVyaW5nL3Jl
bmRlcl9ib3guY3BwCi0tLSBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2JveC5jcHAJMTEgSnVuIDIw
MDUgMDU6MDE6MTcgLTAwMDAJMS4xNTQKKysrIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfYm94LmNw
cAk3IEp1bCAyMDA1IDA1OjU5OjEzIC0wMDAwCkBAIC0yNTYsNyArMjU2LDcgQEAgdm9pZCBSZW5k
ZXJCb3g6OnBhaW50Um9vdEJveERlY29yYXRpb25zKAogICAgICAgICAvLyBhbm9ueW1vdXMgYmxv
Y2tzIGNyZWF0ZWQgYnkgaW5saW5lIDxib2R5PiB0YWdzIGV0Yy4gIFdlIGNhbiBsb2NhdGUgdGhl
IDxib2R5PgogICAgICAgICAvLyByZW5kZXIgb2JqZWN0IHZlcnkgZWFzaWx5IHZpYSB0aGUgRE9N
LgogICAgICAgICBIVE1MRWxlbWVudEltcGwqIGJvZHkgPSBkb2N1bWVudCgpLT5ib2R5KCk7Ci0g
ICAgICAgIFJlbmRlck9iamVjdCogYm9keU9iamVjdCA9IChib2R5ICYmIGJvZHktPmlkKCkgPT0g
SURfQk9EWSkgPyBib2R5LT5yZW5kZXJlcigpIDogMDsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiBi
b2R5T2JqZWN0ID0gKGJvZHkgJiYgYm9keS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6Ym9keSgp
KSkgPyBib2R5LT5yZW5kZXJlcigpIDogMDsKICAgICAgICAgaWYgKGJvZHlPYmplY3QpIHsKICAg
ICAgICAgICAgIGJnTGF5ZXIgPSBib2R5T2JqZWN0LT5zdHlsZSgpLT5iYWNrZ3JvdW5kTGF5ZXJz
KCk7CiAgICAgICAgICAgICBiZ0NvbG9yID0gYm9keU9iamVjdC0+c3R5bGUoKS0+YmFja2dyb3Vu
ZENvbG9yKCk7CkBAIC0zNjksNyArMzY5LDcgQEAgdm9pZCBSZW5kZXJCb3g6OnBhaW50QmFja2dy
b3VuZEV4dGVuZGVkKAogICAgICAgICBib29sIGlzVHJhbnNwYXJlbnQ7CiAgICAgICAgIERPTTo6
Tm9kZUltcGwqIGVsdCA9IGRvY3VtZW50KCktPm93bmVyRWxlbWVudCgpOwogICAgICAgICBpZiAo
ZWx0KSB7Ci0gICAgICAgICAgICBpZiAoZWx0LT5pZCgpID09IElEX0ZSQU1FKQorICAgICAgICAg
ICAgaWYgKGVsdC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZyYW1lKCkpKQogICAgICAgICAgICAg
ICAgIGlzVHJhbnNwYXJlbnQgPSBmYWxzZTsKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAg
ICAgICAgIC8vIExvY2F0ZSB0aGUgPGJvZHk+IGVsZW1lbnQgdXNpbmcgdGhlIERPTS4gIFRoaXMg
aXMgZWFzaWVyIHRoYW4gdHJ5aW5nCkBAIC0zNzcsNyArMzc3LDcgQEAgdm9pZCBSZW5kZXJCb3g6
OnBhaW50QmFja2dyb3VuZEV4dGVuZGVkKAogICAgICAgICAgICAgICAgIC8vIGFub255bW91cyBi
bG9ja3MgY3JlYXRlZCBieSBpbmxpbmUgPGJvZHk+IHRhZ3MgZXRjLiAgV2UgY2FuIGxvY2F0ZSB0
aGUgPGJvZHk+CiAgICAgICAgICAgICAgICAgLy8gcmVuZGVyIG9iamVjdCB2ZXJ5IGVhc2lseSB2
aWEgdGhlIERPTS4KICAgICAgICAgICAgICAgICBIVE1MRWxlbWVudEltcGwqIGJvZHkgPSBkb2N1
bWVudCgpLT5ib2R5KCk7Ci0gICAgICAgICAgICAgICAgaXNUcmFuc3BhcmVudCA9ICFib2R5IHx8
IGJvZHktPmlkKCkgIT0gSURfRlJBTUVTRVQ7IC8vIENhbid0IHNjcm9sbCBhIGZyYW1lc2V0IGRv
Y3VtZW50IGFueXdheS4KKyAgICAgICAgICAgICAgICBpc1RyYW5zcGFyZW50ID0gIWJvZHkgfHwg
IWJvZHktPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmZyYW1lc2V0KCkpOyAvLyBDYW4ndCBzY3Jv
bGwgYSBmcmFtZXNldCBkb2N1bWVudCBhbnl3YXkuCiAgICAgICAgICAgICB9CiAgICAgICAgIH0g
ZWxzZQogICAgICAgICAgICAgaXNUcmFuc3BhcmVudCA9IGNhbnZhcygpLT52aWV3KCktPmlzVHJh
bnNwYXJlbnQoKTsKSW5kZXg6IGtodG1sL3JlbmRlcmluZy9yZW5kZXJfY2FudmFzaW1hZ2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3JlbmRlcmluZy9y
ZW5kZXJfY2FudmFzaW1hZ2UuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjExCmRpZmYgLXUg
LXAgLXIxLjExIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfY2FudmFzaW1hZ2UuY3BwCi0tLSBraHRt
bC9yZW5kZXJpbmcvcmVuZGVyX2NhbnZhc2ltYWdlLmNwcAkyNSBNYXkgMjAwNSAwMTozMzoyMiAt
MDAwMAkxLjExCisrKyBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2NhbnZhc2ltYWdlLmNwcAk3IEp1
bCAyMDA1IDA1OjU5OjE0IC0wMDAwCkBAIC0zNywxMCArMzcsOCBAQAogI2luY2x1ZGUgImNzcy9j
c3NoZWxwZXIuaCIKICNpbmNsdWRlICJtaXNjL2hlbHBlci5oIgogI2luY2x1ZGUgIm1pc2MvaHRt
bGF0dHJzLmgiCi0jaW5jbHVkZSAibWlzYy9odG1sdGFncy5oIgogI2luY2x1ZGUgImh0bWwvaHRt
bF9mb3JtaW1wbC5oIgogI2luY2x1ZGUgImh0bWwvaHRtbF9jYW52YXNpbXBsLmgiCi0jaW5jbHVk
ZSAiaHRtbC9kdGQuaCIKICNpbmNsdWRlICJ4bWwvZG9tMl9ldmVudHNpbXBsLmgiCiAjaW5jbHVk
ZSAiaHRtbC9odG1sX2RvY3VtZW50aW1wbC5oIgogI2luY2x1ZGUgPG1hdGguaD4KQEAgLTE4Niw3
ICsxODQsNyBAQCB2b2lkIFJlbmRlckNhbnZhc0ltYWdlOjpwYWludChQYWludEluZm8mCiAgICAg
fQogICAgIAogICAgIGlmIChkcmF3bkltYWdlKCkpIHsKLSAgICAgICAgSFRNTENhbnZhc0VsZW1l
bnRJbXBsKiBpID0gKGVsZW1lbnQoKSAmJiBlbGVtZW50KCktPmlkKCkgPT0gSURfQ0FOVkFTKSA/
IHN0YXRpY19jYXN0PEhUTUxDYW52YXNFbGVtZW50SW1wbCo+KGVsZW1lbnQoKSkgOiAwOworICAg
ICAgICBIVE1MQ2FudmFzRWxlbWVudEltcGwqIGkgPSAoZWxlbWVudCgpICYmIGVsZW1lbnQoKS0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OmNhbnZhcygpKSkgPyBzdGF0aWNfY2FzdDxIVE1MQ2FudmFz
RWxlbWVudEltcGwqPihlbGVtZW50KCkpIDogMDsKICAgICAgICAgaW50IG9sZE9wZXJhdGlvbiA9
IDA7CiAgICAgICAgIGlmIChpICYmICFpLT5jb21wb3NpdGVPcGVyYXRvcigpLmlzTnVsbCgpKXsK
ICAgICAgICAgICAgIG9sZE9wZXJhdGlvbiA9IFFQYWludGVyOjpnZXRDb21wb3NpdGVPcGVyYXRp
b24ocC0+Y3VycmVudENvbnRleHQoKSk7CkluZGV4OiBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2Nh
bnZhc2ltYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwv
cmVuZGVyaW5nL3JlbmRlcl9jYW52YXNpbWFnZS5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjMK
ZGlmZiAtdSAtcCAtcjEuMyBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2NhbnZhc2ltYWdlLmgKLS0t
IGtodG1sL3JlbmRlcmluZy9yZW5kZXJfY2FudmFzaW1hZ2UuaAk0IFNlcCAyMDA0IDE5OjU5OjU4
IC0wMDAwCTEuMworKysga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9jYW52YXNpbWFnZS5oCTcgSnVs
IDIwMDUgMDU6NTk6MTQgLTAwMDAKQEAgLTI2LDcgKzI2LDYgQEAKICNpZm5kZWYgUkVOREVSX0NB
TlZBU0lNQUdFX0gKICNkZWZpbmUgUkVOREVSX0NBTlZBU0lNQUdFX0gKIAotI2luY2x1ZGUgImh0
bWwvZHRkLmgiCiAjaW5jbHVkZSAiaHRtbC9odG1sX2VsZW1lbnRpbXBsLmgiCiAjaW5jbHVkZSAi
cmVuZGVyaW5nL3JlbmRlcl9pbWFnZS5oIgogI2luY2x1ZGUgImRvbS9kb21fc3RyaW5nLmgiCklu
ZGV4OiBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2Zsb3cuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3JlbmRlcmluZy9yZW5kZXJfZmxvdy5jcHAsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuMTYwCmRpZmYgLXUgLXAgLXIxLjE2MCBraHRtbC9yZW5kZXJpbmcv
cmVuZGVyX2Zsb3cuY3BwCi0tLSBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2Zsb3cuY3BwCTExIE1h
eSAyMDA1IDAyOjEwOjEwIC0wMDAwCTEuMTYwCisrKyBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2Zs
b3cuY3BwCTcgSnVsIDIwMDUgMDU6NTk6MTQgLTAwMDAKQEAgLTQwLDcgKzQwLDYgQEAKICNpbmNs
dWRlICJyZW5kZXJfbGluZS5oIgogCiAjaW5jbHVkZSAia2h0bWx2aWV3LmgiCi0jaW5jbHVkZSAi
aHRtbHRhZ3MuaCIKIAogdXNpbmcgbmFtZXNwYWNlIERPTTsKIHVzaW5nIG5hbWVzcGFjZSBraHRt
bDsKQEAgLTY1NCw3ICs2NTMsNyBAQCB2b2lkIFJlbmRlckZsb3c6OmFkZEZvY3VzUmluZ1JlY3Rz
KFFQYWluCiAgICAgLy8gT25seSBwYWludCBmb2N1cyByaW5nIGFyb3VuZCBvdXRlcm1vc3QgY29u
dGVudGVkaXRhYmxlIGVsZW1lbnQuCiAgICAgLy8gQnV0IHNraXAgdGhlIGJvZHkgZWxlbWVudCBp
ZiBpdCBpcyBvdXRlcm1vc3QuCiAgICAgaWYgKGVsZW1lbnQoKSAmJiBlbGVtZW50KCktPmlzQ29u
dGVudEVkaXRhYmxlKCkpIHsKLSAgICAgICAgaWYgKGVsZW1lbnQoKS0+cGFyZW50Tm9kZSgpICYm
ICFlbGVtZW50KCktPnBhcmVudE5vZGUoKS0+aXNDb250ZW50RWRpdGFibGUoKSAmJiBlbGVtZW50
KCktPmlkKCkgIT0gSURfQk9EWSkKKyAgICAgICAgaWYgKGVsZW1lbnQoKS0+cGFyZW50Tm9kZSgp
ICYmICFlbGVtZW50KCktPnBhcmVudE5vZGUoKS0+aXNDb250ZW50RWRpdGFibGUoKSAmJiAhZWxl
bWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Ym9keSgpKSkKICAgICAgICAgICAgIHAtPmFk
ZEZvY3VzUmluZ1JlY3QoX3R4LCBfdHksIHdpZHRoKCksIGhlaWdodCgpKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KSW5kZXg6IGtodG1sL3JlbmRlcmluZy9yZW5kZXJfZm9ybS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9m
b3JtLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMDgKZGlmZiAtdSAtcCAtcjEuMTA4IGto
dG1sL3JlbmRlcmluZy9yZW5kZXJfZm9ybS5jcHAKLS0tIGtodG1sL3JlbmRlcmluZy9yZW5kZXJf
Zm9ybS5jcHAJMjQgSnVuIDIwMDUgMDU6NTM6MjggLTAwMDAJMS4xMDgKKysrIGtodG1sL3JlbmRl
cmluZy9yZW5kZXJfZm9ybS5jcHAJNyBKdWwgMjAwNSAwNTo1OToxNSAtMDAwMApAQCAtNzk3LDcg
Kzc5Nyw3IEBAIFJlbmRlck9iamVjdCogUmVuZGVyRmllbGRzZXQ6OmZpbmRMZWdlbmQKIHsKICAg
ICBmb3IgKFJlbmRlck9iamVjdCogbGVnZW5kID0gZmlyc3RDaGlsZCgpOyBsZWdlbmQ7IGxlZ2Vu
ZCA9IGxlZ2VuZC0+bmV4dFNpYmxpbmcoKSkgewogICAgICAgaWYgKCFsZWdlbmQtPmlzRmxvYXRp
bmdPclBvc2l0aW9uZWQoKSAmJiBsZWdlbmQtPmVsZW1lbnQoKSAmJgotICAgICAgICAgIGxlZ2Vu
ZC0+ZWxlbWVudCgpLT5pZCgpID09IElEX0xFR0VORCkKKyAgICAgICAgICBsZWdlbmQtPmVsZW1l
bnQoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmxlZ2VuZCgpKSkKICAgICAgICAgcmV0dXJuIGxl
Z2VuZDsKICAgICB9CiAgICAgcmV0dXJuIDA7CkBAIC0xMTkxLDcgKzExOTEsNyBAQCB2b2lkIFJl
bmRlclNlbGVjdDo6dXBkYXRlRnJvbUVsZW1lbnQoKQogICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
S0NvbWJvQm94Kj4obV93aWRnZXQpLT5jbGVhcigpOwogCiAgICAgICAgIGZvciAobGlzdEluZGV4
ID0gMDsgbGlzdEluZGV4IDwgaW50KGxpc3RJdGVtcy5zaXplKCkpOyBsaXN0SW5kZXgrKykgewot
ICAgICAgICAgICAgaWYgKGxpc3RJdGVtc1tsaXN0SW5kZXhdLT5pZCgpID09IElEX09QVEdST1VQ
KSB7CisgICAgICAgICAgICBpZiAobGlzdEl0ZW1zW2xpc3RJbmRleF0tPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjpvcHRncm91cCgpKSkgewogICAgICAgICAgICAgICAgIFFTdHJpbmcgbGFiZWwgPSBs
aXN0SXRlbXNbbGlzdEluZGV4XS0+Z2V0QXR0cmlidXRlKEFUVFJfTEFCRUwpLnN0cmluZygpOwog
ICAgICAgICAgICAgICAgIGxhYmVsLnJlcGxhY2UoUUNoYXIoJ1xcJyksIGJhY2tzbGFzaEFzQ3Vy
cmVuY3lTeW1ib2woKSk7CiAKQEAgLTEyMTUsMTQgKzEyMTUsMTQgQEAgdm9pZCBSZW5kZXJTZWxl
Y3Q6OnVwZGF0ZUZyb21FbGVtZW50KCkKICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
S0NvbWJvQm94Kj4obV93aWRnZXQpLT5pbnNlcnRJdGVtKGxhYmVsLCBsaXN0SW5kZXgpOwogI2Vu
ZGlmCiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChsaXN0SXRlbXNbbGlzdElu
ZGV4XS0+aWQoKSA9PSBJRF9PUFRJT04pIHsKKyAgICAgICAgICAgIGVsc2UgaWYgKGxpc3RJdGVt
c1tsaXN0SW5kZXhdLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpKSB7CiAgICAgICAg
ICAgICAgICAgUVN0cmluZyBpdGVtVGV4dCA9IHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50
SW1wbCo+KGxpc3RJdGVtc1tsaXN0SW5kZXhdKS0+dGV4dCgpLnN0cmluZygpOwogICAgICAgICAg
ICAgICAgIGl0ZW1UZXh0LnJlcGxhY2UoUUNoYXIoJ1xcJyksIGJhY2tzbGFzaEFzQ3VycmVuY3lT
eW1ib2woKSk7CiAKICAgICAgICAgICAgICAgICAvLyBJbiBXaW5JRSwgbGVhZGluZyBhbmQgdHJh
aWxpbmcgd2hpdGVzcGFjZSBpcyBpZ25vcmVkIGluIG9wdGlvbnMuIFdlIG1hdGNoIHRoaXMgYmVo
YXZpb3IuCiAgICAgICAgICAgICAgICAgaXRlbVRleHQgPSBpdGVtVGV4dC5zdHJpcFdoaXRlU3Bh
Y2UoKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAobGlzdEl0ZW1zW2xp
c3RJbmRleF0tPnBhcmVudE5vZGUoKS0+aWQoKSA9PSBJRF9PUFRHUk9VUCkKKyAgICAgICAgICAg
ICAgICBpZiAobGlzdEl0ZW1zW2xpc3RJbmRleF0tPnBhcmVudE5vZGUoKS0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6Om9wdGdyb3VwKCkpKQogICAgICAgICAgICAgICAgICAgICBpdGVtVGV4dC5wcmVw
ZW5kKCIgICAgIik7CiAKICNpZiBBUFBMRV9DSEFOR0VTCkBAIC0xMzQ4LDcgKzEzNDgsNyBAQCB2
b2lkIFJlbmRlclNlbGVjdDo6bGF5b3V0KCApCiAKICAgICBib29sIGZvdW5kT3B0aW9uID0gZmFs
c2U7CiAgICAgZm9yICh1aW50IGkgPSAwOyBpIDwgbGlzdEl0ZW1zLnNpemUoKSAmJiAhZm91bmRP
cHRpb247IGkrKykKLQlmb3VuZE9wdGlvbiA9IChsaXN0SXRlbXNbaV0tPmlkKCkgPT0gSURfT1BU
SU9OKTsKKwlmb3VuZE9wdGlvbiA9IChsaXN0SXRlbXNbaV0tPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjpvcHRpb24oKSkpOwogCiAgICAgbV93aWRnZXQtPnNldEVuYWJsZWQoZm91bmRPcHRpb24gJiYg
ISBlbGVtZW50KCktPmRpc2FibGVkKCkpOwogfQpAQCAtMTM2MiwxMiArMTM2MiwxMiBAQCB2b2lk
IFJlbmRlclNlbGVjdDo6c2xvdFNlbGVjdGVkKGludCBpbmRlCiAgICAgUU1lbUFycmF5PEhUTUxH
ZW5lcmljRm9ybUVsZW1lbnRJbXBsKj4gbGlzdEl0ZW1zID0gZWxlbWVudCgpLT5saXN0SXRlbXMo
KTsKICAgICBpZihpbmRleCA+PSAwICYmIGluZGV4IDwgaW50KGxpc3RJdGVtcy5zaXplKCkpKQog
ICAgIHsKLSAgICAgICAgYm9vbCBmb3VuZCA9ICggbGlzdEl0ZW1zW2luZGV4XS0+aWQoKSA9PSBJ
RF9PUFRJT04gKTsKKyAgICAgICAgYm9vbCBmb3VuZCA9IChsaXN0SXRlbXNbaW5kZXhdLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpKTsKIAogICAgICAgICBpZiAoICFmb3VuZCApIHsK
ICAgICAgICAgICAgIC8vIHRoaXMgb25lIGlzIG5vdCBzZWxlY3RhYmxlLCAgd2UgbmVlZCB0byBm
aW5kIGFuIG9wdGlvbiBlbGVtZW50CiAgICAgICAgICAgICB3aGlsZSAoICggdW5zaWduZWQgKSBp
bmRleCA8IGxpc3RJdGVtcy5zaXplKCkgKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCBsaXN0SXRl
bXNbaW5kZXhdLT5pZCgpID09IElEX09QVElPTiApIHsKKyAgICAgICAgICAgICAgICBpZiAobGlz
dEl0ZW1zW2luZGV4XS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9wdGlvbigpKSkgewogICAgICAg
ICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgIH0KQEAgLTEzNzYsNyArMTM3Niw3IEBAIHZvaWQgUmVuZGVyU2VsZWN0
OjpzbG90U2VsZWN0ZWQoaW50IGluZGUKIAogICAgICAgICAgICAgaWYgKCAhZm91bmQgKSB7CiAg
ICAgICAgICAgICAgICAgd2hpbGUgKCBpbmRleCA+PSAwICkgewotICAgICAgICAgICAgICAgICAg
ICBpZiAoIGxpc3RJdGVtc1tpbmRleF0tPmlkKCkgPT0gSURfT1BUSU9OICkgeworICAgICAgICAg
ICAgICAgICAgICBpZiAobGlzdEl0ZW1zW2luZGV4XS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9w
dGlvbigpKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTEzOTAs
NyArMTM5MCw3IEBAIHZvaWQgUmVuZGVyU2VsZWN0OjpzbG90U2VsZWN0ZWQoaW50IGluZGUKICAg
ICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxDb21ib0JveFdpZGdldCo+KCBtX3dpZGdldCApLT5z
ZXRDdXJyZW50SXRlbSggaW5kZXggKTsKIAogICAgICAgICAgICAgZm9yICggdW5zaWduZWQgaW50
IGkgPSAwOyBpIDwgbGlzdEl0ZW1zLnNpemUoKTsgKytpICkKLSAgICAgICAgICAgICAgICBpZiAo
IGxpc3RJdGVtc1tpXS0+aWQoKSA9PSBJRF9PUFRJT04gJiYgaSAhPSAodW5zaWduZWQgaW50KSBp
bmRleCApCisgICAgICAgICAgICAgICAgaWYgKGxpc3RJdGVtc1tpXS0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6Om9wdGlvbigpKSAmJiBpICE9ICh1bnNpZ25lZCBpbnQpIGluZGV4KQogICAgICAgICAg
ICAgICAgICAgICBzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudEltcGwqPiggbGlzdEl0ZW1z
W2ldICktPm1fc2VsZWN0ZWQgPSBmYWxzZTsKIAogICAgICAgICAgICAgc3RhdGljX2Nhc3Q8SFRN
TE9wdGlvbkVsZW1lbnRJbXBsKj4obGlzdEl0ZW1zW2luZGV4XSktPm1fc2VsZWN0ZWQgPSB0cnVl
OwpAQCAtMTQxMSw3ICsxNDExLDcgQEAgdm9pZCBSZW5kZXJTZWxlY3Q6OnNsb3RTZWxlY3Rpb25D
aGFuZ2VkKAogICAgIGZvciAoIHVuc2lnbmVkIGkgPSAwOyBpIDwgbGlzdEl0ZW1zLmNvdW50KCk7
IGkrKyApCiAgICAgICAgIC8vIGRvbid0IHVzZSBzZXRTZWxlY3RlZCgpIGhlcmUgYmVjYXVzZSBp
dCB3aWxsIGNhdXNlIHVzIHRvIGJlIGNhbGxlZAogICAgICAgICAvLyBhZ2FpbiB3aXRoIHVwZGF0
ZVNlbGVjdGlvbi4KLSAgICAgICAgaWYgKCBsaXN0SXRlbXNbaV0tPmlkKCkgPT0gSURfT1BUSU9O
ICkKKyAgICAgICAgaWYgKGxpc3RJdGVtc1tpXS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9wdGlv
bigpKSkKICAgICAgICAgICAgIHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50SW1wbCo+KCBs
aXN0SXRlbXNbaV0gKQogICAgICAgICAgICAgICAgIC0+bV9zZWxlY3RlZCA9IHN0YXRpY19jYXN0
PEtMaXN0Qm94Kj4oIG1fd2lkZ2V0ICktPmlzU2VsZWN0ZWQoIGkgKTsKIApAQCAtMTQ1Myw3ICsx
NDUzLDcgQEAgdm9pZCBSZW5kZXJTZWxlY3Q6OnVwZGF0ZVNlbGVjdGlvbigpCiAgICAgICAgIC8v
IGlmIG11bHRpLXNlbGVjdCwgd2Ugc2VsZWN0IG9ubHkgdGhlIG5ldyBzZWxlY3RlZCBpbmRleAog
ICAgICAgICBLTGlzdEJveCAqbGlzdEJveCA9IHN0YXRpY19jYXN0PEtMaXN0Qm94Kj4obV93aWRn
ZXQpOwogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaW50KGxpc3RJdGVtcy5zaXplKCkpOyBpKysp
Ci0gICAgICAgICAgICBsaXN0Qm94LT5zZXRTZWxlY3RlZChpLGxpc3RJdGVtc1tpXS0+aWQoKSA9
PSBJRF9PUFRJT04gJiYKKyAgICAgICAgICAgIGxpc3RCb3gtPnNldFNlbGVjdGVkKGksIGxpc3RJ
dGVtc1tpXS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9wdGlvbigpKSAmJgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudEltcGwqPihs
aXN0SXRlbXNbaV0pLT5zZWxlY3RlZCgpKTsKICAgICB9CiAgICAgZWxzZSB7CkBAIC0xNDYxLDcg
KzE0NjEsNyBAQCB2b2lkIFJlbmRlclNlbGVjdDo6dXBkYXRlU2VsZWN0aW9uKCkKICAgICAgICAg
dW5zaWduZWQgZmlyc3RPcHRpb24gPSBsaXN0SXRlbXMuc2l6ZSgpOwogICAgICAgICBpID0gbGlz
dEl0ZW1zLnNpemUoKTsKICAgICAgICAgd2hpbGUgKGktLSkKLSAgICAgICAgICAgIGlmIChsaXN0
SXRlbXNbaV0tPmlkKCkgPT0gSURfT1BUSU9OKSB7CisgICAgICAgICAgICBpZiAobGlzdEl0ZW1z
W2ldLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpKSB7CiAgICAgICAgICAgICAgICAg
aWYgKGZvdW5kKQogICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxl
bWVudEltcGwqPihsaXN0SXRlbXNbaV0pLT5tX3NlbGVjdGVkID0gZmFsc2U7CiAgICAgICAgICAg
ICAgICAgZWxzZSBpZiAoc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnRJbXBsKj4obGlzdEl0
ZW1zW2ldKS0+c2VsZWN0ZWQoKSkgewpJbmRleDoga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9mcmFt
ZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3JlbmRl
cmluZy9yZW5kZXJfZnJhbWVzLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS42OQpkaWZmIC11
IC1wIC1yMS42OSBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2ZyYW1lcy5jcHAKLS0tIGtodG1sL3Jl
bmRlcmluZy9yZW5kZXJfZnJhbWVzLmNwcAkxMCBNYXkgMjAwNSAxODo0MjowNCAtMDAwMAkxLjY5
CisrKyBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2ZyYW1lcy5jcHAJNyBKdWwgMjAwNSAwNTo1OTox
NiAtMDAwMApAQCAtMzQsNyArMzQsNiBAQAogI2luY2x1ZGUgIm1pc2MvaHRtbGF0dHJzLmgiCiAj
aW5jbHVkZSAieG1sL2RvbTJfZXZlbnRzaW1wbC5oIgogI2luY2x1ZGUgInhtbC9kb21fZG9jaW1w
bC5oIgotI2luY2x1ZGUgIm1pc2MvaHRtbHRhZ3MuaCIKICNpbmNsdWRlICJraHRtbHZpZXcuaCIK
ICNpbmNsdWRlICJraHRtbF9wYXJ0LmgiCiAjaW5jbHVkZSAicmVuZGVyX2FyZW5hLmgiCkBAIC02
NjksMTcgKzY2OCwxNyBAQCB2b2lkIFJlbmRlclBhcnRPYmplY3Q6OnVwZGF0ZVdpZGdldCgpCiAK
ICAgc2V0TmVlZHNMYXlvdXRBbmRNaW5NYXhSZWNhbGMoKTsKIAotICBpZiAoZWxlbWVudCgpLT5p
ZCgpID09IElEX09CSkVDVCkgeworICBpZiAoZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6b2JqZWN0KCkpKSB7CiAKICAgICAgIEhUTUxPYmplY3RFbGVtZW50SW1wbCAqbyA9IHN0YXRp
Y19jYXN0PEhUTUxPYmplY3RFbGVtZW50SW1wbCAqPihlbGVtZW50KCkpOwogCiAgICAgICAvLyBD
aGVjayBmb3IgYSBjaGlsZCBFTUJFRCB0YWcuCiAgICAgICBIVE1MRW1iZWRFbGVtZW50SW1wbCAq
ZW1iZWQgPSAwOwogICAgICAgZm9yIChOb2RlSW1wbCAqY2hpbGQgPSBvLT5maXJzdENoaWxkKCk7
IGNoaWxkOyApIHsKLSAgICAgICAgICBpZiAoY2hpbGQtPmlkKCkgPT0gSURfRU1CRUQpIHsKKyAg
ICAgICAgICBpZiAoY2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjplbWJlZCgpKSkgewogICAg
ICAgICAgICAgICBlbWJlZCA9IHN0YXRpY19jYXN0PEhUTUxFbWJlZEVsZW1lbnRJbXBsICo+KCBj
aGlsZCApOwogICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9IGVsc2UgaWYgKGNoaWxk
LT5pZCgpID09IElEX09CSkVDVCkgeworICAgICAgICAgIH0gZWxzZSBpZiAoY2hpbGQtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjpvYmplY3QoKSkpIHsKICAgICAgICAgICAgICAgY2hpbGQgPSBjaGls
ZC0+bmV4dFNpYmxpbmcoKTsgICAgICAgICAvLyBEb24ndCBkZXNjZW5kIGludG8gbmVzdGVkIE9C
SkVDVCB0YWdzCiAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgY2hpbGQgPSBjaGls
ZC0+dHJhdmVyc2VOZXh0Tm9kZShvKTsgICAvLyBPdGhlcndpc2UgZGVzY2VuZCAoRU1CRURzIG1h
eSBiZSBpbnNpZGUgQ09NTUVOVCB0YWdzKQpAQCAtNzE5LDcgKzcxOCw3IEBAIHZvaWQgUmVuZGVy
UGFydE9iamVjdDo6dXBkYXRlV2lkZ2V0KCkKICAgICAgIC8vIEdldCB0aGUgYXR0cmlidXRlcyBm
cm9tIHRoZSBwYXJhbXMgaWYgdGhlcmUgaXMgbm8gRU1CRUQgdGFnLgogICAgICAgTm9kZUltcGwg
KmNoaWxkID0gby0+Zmlyc3RDaGlsZCgpOwogICAgICAgd2hpbGUgKGNoaWxkICYmICh1cmwuaXNF
bXB0eSgpIHx8IHNlcnZpY2VUeXBlLmlzRW1wdHkoKSB8fCAhZW1iZWQpKSB7Ci0gICAgICAgICAg
aWYgKGNoaWxkLT5pZCgpID09IElEX1BBUkFNKSB7CisgICAgICAgICAgaWYgKGNoaWxkLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6cGFyYW0oKSkpIHsKICAgICAgICAgICAgICAgSFRNTFBhcmFtRWxl
bWVudEltcGwgKnAgPSBzdGF0aWNfY2FzdDxIVE1MUGFyYW1FbGVtZW50SW1wbCAqPiggY2hpbGQg
KTsKICAgICAgICAgICAgICAgUVN0cmluZyBuYW1lID0gcC0+bmFtZSgpLnN0cmluZygpLmxvd2Vy
KCk7CiAgICAgICAgICAgICAgIGlmICh1cmwuaXNFbXB0eSgpICYmIChuYW1lID09ICJzcmMiIHx8
IG5hbWUgPT0gIm1vdmllIiB8fCBuYW1lID09ICJjb2RlIiB8fCBuYW1lID09ICJ1cmwiKSkgewpA
QCAtODEwLDE0ICs4MDksMTQgQEAgdm9pZCBSZW5kZXJQYXJ0T2JqZWN0Ojp1cGRhdGVXaWRnZXQo
KQogICAgICAgLy8gRmluZCBvdXQgaWYgd2Ugc3VwcG9ydCBmYWxsYmFjayBjb250ZW50LgogICAg
ICAgbV9oYXNGYWxsYmFja0NvbnRlbnQgPSBmYWxzZTsKICAgICAgIGZvciAoTm9kZUltcGwgKmNo
aWxkID0gby0+Zmlyc3RDaGlsZCgpOyBjaGlsZCAmJiAhbV9oYXNGYWxsYmFja0NvbnRlbnQ7IGNo
aWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAgICBpZiAoKCFjaGlsZC0+aXNU
ZXh0Tm9kZSgpICYmIGNoaWxkLT5pZCgpICE9IElEX0VNQkVEICYmIGNoaWxkLT5pZCgpICE9IElE
X1BBUkFNKSB8fCAvLyBEaXNjb3VudCA8ZW1iZWQ+IGFuZCA8cGFyYW0+CisgICAgICAgICAgaWYg
KCghY2hpbGQtPmlzVGV4dE5vZGUoKSAmJiAhY2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpl
bWJlZCgpKSAmJiAhY2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpwYXJhbSgpKSkgfHwgLy8g
RGlzY291bnQgPGVtYmVkPiBhbmQgPHBhcmFtPgogICAgICAgICAgICAgICAoY2hpbGQtPmlzVGV4
dE5vZGUoKSAmJiAhY2hpbGQtPmNvbnRhaW5zT25seVdoaXRlc3BhY2UoKSkpCiAgICAgICAgICAg
ICAgIG1faGFzRmFsbGJhY2tDb250ZW50ID0gdHJ1ZTsKICAgICAgIH0KICAgICAgIGJvb2wgc3Vj
Y2VzcyA9IHBhcnQtPnJlcXVlc3RPYmplY3QoIHRoaXMsIHVybCwgc2VydmljZVR5cGUsIHBhcmFt
TmFtZXMsIHBhcmFtVmFsdWVzICk7CiAgICAgICBpZiAoIXN1Y2Nlc3MgJiYgbV9oYXNGYWxsYmFj
a0NvbnRlbnQpCiAgICAgICAgICAgby0+cmVuZGVyRmFsbGJhY2tDb250ZW50KCk7Ci0gIH0gZWxz
ZSBpZiAoIGVsZW1lbnQoKS0+aWQoKSA9PSBJRF9FTUJFRCApIHsKKyAgfSBlbHNlIGlmIChlbGVt
ZW50KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjplbWJlZCgpKSkgewogCiAgICAgICBIVE1MRW1i
ZWRFbGVtZW50SW1wbCAqbyA9IHN0YXRpY19jYXN0PEhUTUxFbWJlZEVsZW1lbnRJbXBsICo+KGVs
ZW1lbnQoKSk7CiAgICAgICB1cmwgPSBvLT51cmw7CkBAIC04NDQsNyArODQzLDcgQEAgdm9pZCBS
ZW5kZXJQYXJ0T2JqZWN0Ojp1cGRhdGVXaWRnZXQoKQogICAgICAgfQogICAgICAgcGFydC0+cmVx
dWVzdE9iamVjdCggdGhpcywgdXJsLCBzZXJ2aWNlVHlwZSwgcGFyYW1OYW1lcywgcGFyYW1WYWx1
ZXMgKTsKICAgfSBlbHNlIHsKLSAgICAgIGFzc2VydChlbGVtZW50KCktPmlkKCkgPT0gSURfSUZS
QU1FKTsKKyAgICAgIGFzc2VydChlbGVtZW50KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppZnJh
bWUoKSkpOwogICAgICAgSFRNTElGcmFtZUVsZW1lbnRJbXBsICpvID0gc3RhdGljX2Nhc3Q8SFRN
TElGcmFtZUVsZW1lbnRJbXBsICo+KGVsZW1lbnQoKSk7CiAgICAgICB1cmwgPSBvLT5tX1VSTC5z
dHJpbmcoKTsKICAgICAgIGlmICh1cmwuaXNFbXB0eSgpKSB7CkBAIC04OTAsNyArODg5LDcgQEAg
dm9pZCBSZW5kZXJQYXJ0T2JqZWN0OjpzbG90Vmlld0NsZWFyZWQoKQogICAgICAgUVNjcm9sbFZp
ZXc6OlNjcm9sbEJhck1vZGUgc2Nyb2xsID0gUVNjcm9sbFZpZXc6OkF1dG87CiAgICAgICBpbnQg
bWFyZ2ludyA9IC0xOwogICAgICAgaW50IG1hcmdpbmggPSAtMTsKLSAgICAgIGlmICggZWxlbWVu
dCgpLT5pZCgpID09IElEX0lGUkFNRSkgeworICAgICAgaWYgKGVsZW1lbnQoKS0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OmlmcmFtZSgpKSkgewogCSAgSFRNTElGcmFtZUVsZW1lbnRJbXBsICpmcmFt
ZSA9IHN0YXRpY19jYXN0PEhUTUxJRnJhbWVFbGVtZW50SW1wbCAqPihlbGVtZW50KCkpOwogCSAg
aWYoZnJhbWUtPm1fZnJhbWVCb3JkZXIpCiAJICAgICAgZnJhbWVTdHlsZSA9IFFGcmFtZTo6Qm94
OwpAQCAtOTEwLDcgKzkwOSw3IEBAIHZvaWQgUmVuZGVyUGFydE9iamVjdDo6c2xvdFZpZXdDbGVh
cmVkKCkKICAgICAgICAgICBrZERlYnVnKDYwMzEpIDw8ICJmcmFtZSBpcyBhIEtIVE1MdmlldyEi
IDw8IGVuZGw7CiAjZW5kaWYKICAgICAgICAgICBLSFRNTFZpZXcgKmh0bWxWaWV3ID0gc3RhdGlj
X2Nhc3Q8S0hUTUxWaWV3ICo+KHZpZXcpOwotICAgICAgICAgIGh0bWxWaWV3LT5zZXRJZ25vcmVX
aGVlbEV2ZW50cyggZWxlbWVudCgpLT5pZCgpID09IElEX0lGUkFNRSApOworICAgICAgICAgIGh0
bWxWaWV3LT5zZXRJZ25vcmVXaGVlbEV2ZW50cyhlbGVtZW50KCktPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjppZnJhbWUoKSkpOwogICAgICAgICAgIGlmKG1hcmdpbncgIT0gLTEpIGh0bWxWaWV3LT5z
ZXRNYXJnaW5XaWR0aChtYXJnaW53KTsKICAgICAgICAgICBpZihtYXJnaW5oICE9IC0xKSBodG1s
Vmlldy0+c2V0TWFyZ2luSGVpZ2h0KG1hcmdpbmgpOwogICAgICAgICB9CkluZGV4OiBraHRtbC9y
ZW5kZXJpbmcvcmVuZGVyX2ltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3Qv
V2ViQ29yZS9raHRtbC9yZW5kZXJpbmcvcmVuZGVyX2ltYWdlLmNwcCx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS43NwpkaWZmIC11IC1wIC1yMS43NyBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2ltYWdl
LmNwcAotLS0ga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9pbWFnZS5jcHAJNSBKdWwgMjAwNSAyMzoy
MToxMSAtMDAwMAkxLjc3CisrKyBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2ltYWdlLmNwcAk3IEp1
bCAyMDA1IDA1OjU5OjE3IC0wMDAwCkBAIC0zNywxMCArMzcsOCBAQAogI2luY2x1ZGUgImNzcy9j
c3NoZWxwZXIuaCIKICNpbmNsdWRlICJtaXNjL2hlbHBlci5oIgogI2luY2x1ZGUgIm1pc2MvaHRt
bGF0dHJzLmgiCi0jaW5jbHVkZSAibWlzYy9odG1sdGFncy5oIgogI2luY2x1ZGUgImh0bWwvaHRt
bF9mb3JtaW1wbC5oIgogI2luY2x1ZGUgImh0bWwvaHRtbF9pbWFnZWltcGwuaCIKLSNpbmNsdWRl
ICJodG1sL2R0ZC5oIgogI2luY2x1ZGUgInhtbC9kb20yX2V2ZW50c2ltcGwuaCIKICNpbmNsdWRl
ICJodG1sL2h0bWxfZG9jdW1lbnRpbXBsLmgiCiAjaW5jbHVkZSA8bWF0aC5oPgpAQCAtNDE5LDcg
KzQxNyw3IEBAIHZvaWQgUmVuZGVySW1hZ2U6OnBhaW50KFBhaW50SW5mbyYgaSwgaW4KIAogCiAv
LyAgICAgICAgICAgICBwLT5kcmF3UGl4bWFwKCBvZmZzLngoKSwgeSwgcGl4LCByZWN0LngoKSwg
cmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSApOwotICAgICAgICAgICAgIEhU
TUxJbWFnZUVsZW1lbnRJbXBsKiBpID0gKGVsZW1lbnQoKSAmJiBlbGVtZW50KCktPmlkKCkgPT0g
SURfSU1HKSA/IHN0YXRpY19jYXN0PEhUTUxJbWFnZUVsZW1lbnRJbXBsKj4oZWxlbWVudCgpKSA6
IDA7CisgICAgICAgICAgICAgSFRNTEltYWdlRWxlbWVudEltcGwqIGkgPSAoZWxlbWVudCgpICYm
IGVsZW1lbnQoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmltZygpKSkgPyBzdGF0aWNfY2FzdDxI
VE1MSW1hZ2VFbGVtZW50SW1wbCo+KGVsZW1lbnQoKSkgOiAwOwogICAgICAgICAgICAgIGlmIChp
ICYmICFpLT5jb21wb3NpdGVPcGVyYXRvcigpLmlzTnVsbCgpKXsKICAgICAgICAgICAgICAgICBw
LT5kcmF3UGl4bWFwIChvZmZzLCBwaXgsIHJlY3QsIGktPmNvbXBvc2l0ZU9wZXJhdG9yKCkpOwog
ICAgICAgICAgICAgIH0KQEAgLTQ4Niw3ICs0ODQsNyBAQCB2b2lkIFJlbmRlckltYWdlOjpsYXlv
dXQoKQogCiBIVE1MTWFwRWxlbWVudEltcGwqIFJlbmRlckltYWdlOjppbWFnZU1hcCgpCiB7Ci0g
ICAgSFRNTEltYWdlRWxlbWVudEltcGwqIGkgPSBlbGVtZW50KCktPmlkKCkgPT0gSURfSU1HID8g
c3RhdGljX2Nhc3Q8SFRNTEltYWdlRWxlbWVudEltcGwqPihlbGVtZW50KCkpIDogMDsKKyAgICBI
VE1MSW1hZ2VFbGVtZW50SW1wbCogaSA9IGVsZW1lbnQoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
OmltZygpKSA/IHN0YXRpY19jYXN0PEhUTUxJbWFnZUVsZW1lbnRJbXBsKj4oZWxlbWVudCgpKSA6
IDA7CiAgICAgcmV0dXJuIGkgPyBpLT5nZXREb2N1bWVudCgpLT5nZXRJbWFnZU1hcChpLT5pbWFn
ZU1hcCgpKSA6IDA7CiB9CiAKQEAgLTUxMiw5ICs1MTAsOSBAQCBib29sIFJlbmRlckltYWdlOjpu
b2RlQXRQb2ludChOb2RlSW5mbyYgCiAKIHZvaWQgUmVuZGVySW1hZ2U6OnVwZGF0ZUFsdFRleHQo
KQogewotICAgIGlmIChlbGVtZW50KCktPmlkKCkgPT0gSURfSU5QVVQpCisgICAgaWYgKGVsZW1l
bnQoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmlucHV0KCkpKQogICAgICAgICBhbHQgPSBzdGF0
aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50SW1wbCo+KGVsZW1lbnQoKSktPmFsdFRleHQoKTsKLSAg
ICBlbHNlIGlmIChlbGVtZW50KCktPmlkKCkgPT0gSURfSU1HKQorICAgIGVsc2UgaWYgKGVsZW1l
bnQoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmltZygpKSkKICAgICAgICAgYWx0ID0gc3RhdGlj
X2Nhc3Q8SFRNTEltYWdlRWxlbWVudEltcGwqPihlbGVtZW50KCkpLT5hbHRUZXh0KCk7CiB9CiAK
SW5kZXg6IGtodG1sL3JlbmRlcmluZy9yZW5kZXJfaW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9yZW5kZXJpbmcvcmVuZGVyX2ltYWdlLmgsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuMjcKZGlmZiAtdSAtcCAtcjEuMjcga2h0bWwvcmVuZGVyaW5nL3Jl
bmRlcl9pbWFnZS5oCi0tLSBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2ltYWdlLmgJMjUgRmViIDIw
MDUgMDA6MjU6MTIgLTAwMDAJMS4yNworKysga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9pbWFnZS5o
CTcgSnVsIDIwMDUgMDU6NTk6MTcgLTAwMDAKQEAgLTIzLDcgKzIzLDYgQEAKICNpZm5kZWYgUkVO
REVSX0lNQUdFX0gKICNkZWZpbmUgUkVOREVSX0lNQUdFX0gKIAotI2luY2x1ZGUgImh0bWwvZHRk
LmgiCiAjaW5jbHVkZSAiaHRtbC9odG1sX2VsZW1lbnRpbXBsLmgiCiAjaW5jbHVkZSAicmVuZGVy
aW5nL3JlbmRlcl9yZXBsYWNlZC5oIgogI2luY2x1ZGUgImRvbS9kb21fc3RyaW5nLmgiCkluZGV4
OiBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2xheWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9yZW5kZXJpbmcvcmVuZGVyX2xheWVyLmNwcCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS45NgpkaWZmIC11IC1wIC1yMS45NiBraHRtbC9yZW5kZXJpbmcvcmVu
ZGVyX2xheWVyLmNwcAotLS0ga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9sYXllci5jcHAJMTAgTWF5
IDIwMDUgMjI6MjU6MDQgLTAwMDAJMS45NgorKysga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9sYXll
ci5jcHAJNyBKdWwgMjAwNSAwNTo1OToxOCAtMDAwMApAQCAtNDksNyArNDksNiBAQAogI2luY2x1
ZGUgInJlbmRlcl9hcmVuYS5oIgogI2luY2x1ZGUgInhtbC9kb21fZG9jaW1wbC5oIgogI2luY2x1
ZGUgInhtbC9kb20yX2V2ZW50c2ltcGwuaCIKLSNpbmNsdWRlICJtaXNjL2h0bWx0YWdzLmgiCiAj
aW5jbHVkZSAiaHRtbC9odG1sX2Jsb2NraW1wbC5oIgogCiAjaW5jbHVkZSA8cXNjcm9sbGJhci5o
PgpAQCAtMTQ2Nyw3ICsxNDY2LDcgQEAgaW50IE1hcnF1ZWU6Om1hcnF1ZWVTcGVlZCgpIGNvbnN0
CiB7CiAgICAgaW50IHJlc3VsdCA9IG1fbGF5ZXItPnJlbmRlcmVyKCktPnN0eWxlKCktPm1hcnF1
ZWVTcGVlZCgpOwogICAgIERPTTo6Tm9kZUltcGwqIGVsdCA9IG1fbGF5ZXItPnJlbmRlcmVyKCkt
PmVsZW1lbnQoKTsKLSAgICBpZiAoZWx0ICYmIGVsdC0+aWQoKSA9PSBJRF9NQVJRVUVFKSB7Cisg
ICAgaWYgKGVsdCAmJiBlbHQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjptYXJxdWVlKCkpKSB7CiAg
ICAgICAgIEhUTUxNYXJxdWVlRWxlbWVudEltcGwqIG1hcnF1ZWVFbHQgPSBzdGF0aWNfY2FzdDxI
VE1MTWFycXVlZUVsZW1lbnRJbXBsKj4oZWx0KTsKICAgICAgICAgcmVzdWx0ID0ga01heChyZXN1
bHQsIG1hcnF1ZWVFbHQtPm1pbmltdW1EZWxheSgpKTsKICAgICB9CkluZGV4OiBraHRtbC9yZW5k
ZXJpbmcvcmVuZGVyX2xpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJD
b3JlL2todG1sL3JlbmRlcmluZy9yZW5kZXJfbGluZS5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuNDMKZGlmZiAtdSAtcCAtcjEuNDMga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9saW5lLmNwcAot
LS0ga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9saW5lLmNwcAk1IEp1bCAyMDA1IDIzOjIxOjEyIC0w
MDAwCTEuNDMKKysrIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfbGluZS5jcHAJNyBKdWwgMjAwNSAw
NTo1OToxOSAtMDAwMApAQCAtMzcsNyArMzcsNiBAQAogI2luY2x1ZGUgInJlbmRlcl9saW5lLmgi
CiAKICNpbmNsdWRlICJraHRtbHZpZXcuaCIKLSNpbmNsdWRlICJodG1sdGFncy5oIgogCiB1c2lu
ZyBuYW1lc3BhY2UgRE9NOwogCkluZGV4OiBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2xpc3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3JlbmRlcmluZy9y
ZW5kZXJfbGlzdC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNjIKZGlmZiAtdSAtcCAtcjEu
NjIga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9saXN0LmNwcAotLS0ga2h0bWwvcmVuZGVyaW5nL3Jl
bmRlcl9saXN0LmNwcAk1IEp1bCAyMDA1IDIzOjIxOjEyIC0wMDAwCTEuNjIKKysrIGtodG1sL3Jl
bmRlcmluZy9yZW5kZXJfbGlzdC5jcHAJNyBKdWwgMjAwNSAwNTo1OToyMCAtMDAwMApAQCAtMjYs
NyArMjYsOCBAQAogI2luY2x1ZGUgInJlbmRlcmluZy9yZW5kZXJfY2FudmFzLmgiCiAKICNpbmNs
dWRlICJ4bWwvZG9tX2RvY2ltcGwuaCIKLSNpbmNsdWRlICJtaXNjL2h0bWx0YWdzLmgiCisKKyNp
bmNsdWRlICJodG1sbmFtZXMuaCIKIAogI2luY2x1ZGUgPHFwYWludGVyLmg+CiAKQEAgLTM3LDYg
KzM4LDcgQEAKIC8vI2RlZmluZSBCT1hfREVCVUcKIAogdXNpbmcgRE9NOjpEb2N1bWVudEltcGw7
Cit1c2luZyBET006OkhUTUxOYW1lczsKIHVzaW5nIG5hbWVzcGFjZSBraHRtbDsKIAogY29uc3Qg
aW50IGNNYXJrZXJQYWRkaW5nID0gNzsKQEAgLTIxMyw3ICsyMTUsNyBAQCBzdGF0aWMgUmVuZGVy
T2JqZWN0KiBnZXRQYXJlbnRPZkZpcnN0TGluCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
CiAgICAgICAgIGlmIChjdXJyQ2hpbGQtPnN0eWxlKCktPmh0bWxIYWNrcygpICYmIGN1cnJDaGls
ZC0+ZWxlbWVudCgpICYmCi0gICAgICAgICAgICAoY3VyckNoaWxkLT5lbGVtZW50KCktPmlkKCkg
PT0gSURfVUwgfHwgY3VyckNoaWxkLT5lbGVtZW50KCktPmlkKCkgPT0gSURfT0wpKQorICAgICAg
ICAgICAgKGN1cnJDaGlsZC0+ZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dWwoKSl8
fCBjdXJyQ2hpbGQtPmVsZW1lbnQoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9sKCkpKSkKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIFJlbmRlck9iamVjdCogbGlu
ZUJveCA9IGdldFBhcmVudE9mRmlyc3RMaW5lQm94KGN1cnJDaGlsZCwgbWFya2VyKTsKSW5kZXg6
IGtodG1sL3JlbmRlcmluZy9yZW5kZXJfb2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9yZW5kZXJpbmcvcmVuZGVyX29iamVjdC5jcHAsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuMTk3CmRpZmYgLXUgLXAgLXIxLjE5NyBraHRtbC9yZW5kZXJpbmcv
cmVuZGVyX29iamVjdC5jcHAKLS0tIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfb2JqZWN0LmNwcAk1
IEp1bCAyMDA1IDIzOjIxOjEyIC0wMDAwCTEuMTk3CisrKyBraHRtbC9yZW5kZXJpbmcvcmVuZGVy
X29iamVjdC5jcHAJNyBKdWwgMjAwNSAwNTo1OToyMSAtMDAwMApAQCAtNDMsNiArNDMsNyBAQAog
I2luY2x1ZGUgInJlbmRlcl9pbmxpbmUuaCIKICNpbmNsdWRlICJyZW5kZXJfYmxvY2suaCIKICNp
bmNsdWRlICJyZW5kZXJfZmxleGJveC5oIgorI2luY2x1ZGUgImh0bWxuYW1lcy5oIgogCiAjaWYg
QVBQTEVfQ0hBTkdFUwogLy8gRm9yIGFjY2Vzc2liaWxpdHkKQEAgLTE3NSwxNyArMTc2LDE3IEBA
IGJvb2wgUmVuZGVyT2JqZWN0Ojppc1Jvb3QoKSBjb25zdAogCiBib29sIFJlbmRlck9iamVjdDo6
aXNCb2R5KCkgY29uc3QKIHsKLSAgICByZXR1cm4gZWxlbWVudCgpICYmIGVsZW1lbnQoKS0+cmVu
ZGVyZXIoKSA9PSB0aGlzICYmIGVsZW1lbnQoKS0+aWQoKSA9PSBJRF9CT0RZOworICAgIHJldHVy
biBlbGVtZW50KCkgJiYgZWxlbWVudCgpLT5yZW5kZXJlcigpID09IHRoaXMgJiYgZWxlbWVudCgp
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Ym9keSgpKTsKIH0KIAogYm9vbCBSZW5kZXJPYmplY3Q6
OmlzSFIoKSBjb25zdAogewotICAgIHJldHVybiBlbGVtZW50KCkgJiYgZWxlbWVudCgpLT5pZCgp
ID09IElEX0hSOworICAgIHJldHVybiBlbGVtZW50KCkgJiYgZWxlbWVudCgpLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6aHIoKSk7CiB9CiAKIGJvb2wgUmVuZGVyT2JqZWN0Ojppc0hUTUxNYXJxdWVl
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gZWxlbWVudCgpICYmIGVsZW1lbnQoKS0+cmVuZGVyZXIo
KSA9PSB0aGlzICYmIGVsZW1lbnQoKS0+aWQoKSA9PSBJRF9NQVJRVUVFOworICAgIHJldHVybiBl
bGVtZW50KCkgJiYgZWxlbWVudCgpLT5yZW5kZXJlcigpID09IHRoaXMgJiYgZWxlbWVudCgpLT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6bWFycXVlZSgpKTsKIH0KIAogYm9vbCBSZW5kZXJPYmplY3Q6
OmNhbkhhdmVDaGlsZHJlbigpIGNvbnN0CkBAIC03MzcsNyArNzM4LDcgQEAgYm9vbCBSZW5kZXJP
YmplY3Q6OnNpemVzVG9NYXhXaWR0aCgpIGNvbgogICAgIC8vIGJ1dCB0aGV5IGFsbG93IHRleHQg
dG8gc2l0IG9uIHRoZSBzYW1lIGxpbmUgYXMgdGhlIG1hcnF1ZWUuCiAgICAgaWYgKGlzRmxvYXRp
bmcoKSB8fCAoaXNDb21wYWN0KCkgJiYgaXNJbmxpbmUoKSkgfHwgCiAgICAgICAgIChpc0lubGlu
ZUJsb2NrT3JJbmxpbmVUYWJsZSgpICYmICFpc0hUTUxNYXJxdWVlKCkpIHx8Ci0gICAgICAgIChl
bGVtZW50KCkgJiYgKGVsZW1lbnQoKS0+aWQoKSA9PSBJRF9CVVRUT04gfHwgZWxlbWVudCgpLT5p
ZCgpID09IElEX0xFR0VORCkpKQorICAgICAgICAoZWxlbWVudCgpICYmIChlbGVtZW50KCktPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjpidXR0b24oKSkgfHwgZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6bGVnZW5kKCkpKSkpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIAogICAgIC8v
IENoaWxkcmVuIG9mIGEgaG9yaXpvbnRhbCBtYXJxdWVlIGRvIG5vdCBmaWxsIHRoZSBjb250YWlu
ZXIgYnkgZGVmYXVsdC4KQEAgLTEzMjYsNyArMTMyNyw3IEBAIFFTdHJpbmcgUmVuZGVyT2JqZWN0
OjppbmZvcm1hdGlvbigpIGNvbnMKICAgICBpZiAoZWxlbWVudCgpICYmIGVsZW1lbnQoKS0+YWN0
aXZlKCkpIHRzIDw8ICJhY3QgIjsKICAgICBpZiAoZWxlbWVudCgpICYmIGVsZW1lbnQoKS0+aXNM
aW5rKCkpIHRzIDw8ICJhbmNob3IgIjsKICAgICBpZiAoZWxlbWVudCgpICYmIGVsZW1lbnQoKS0+
Zm9jdXNlZCgpKSB0cyA8PCAiZm9jdXMgIjsKLSAgICBpZiAoZWxlbWVudCgpKSB0cyA8PCAiIDwi
IDw8ICBnZXRUYWdOYW1lKGVsZW1lbnQoKS0+aWQoKSkuc3RyaW5nKCkgPDwgIj4iOworICAgIGlm
IChlbGVtZW50KCkpIHRzIDw8ICIgPCIgPDwgIGVsZW1lbnQoKS0+bG9jYWxOYW1lKCkuc3RyaW5n
KCkgPDwgIj4iOwogICAgIHRzIDw8ICIgKCIgPDwgeFBvcygpIDw8ICIsIiA8PCB5UG9zKCkgPDwg
IiwiIDw8IHdpZHRoKCkgPDwgIiwiIDw8IGhlaWdodCgpIDw8ICIpIgogCTw8IChpc1RhYmxlQ2Vs
bCgpID8KIAkgICAgKCBRU3RyaW5nOjpmcm9tTGF0aW4xKCIgW3I9IikgKwpAQCAtMTU1Niw3ICsx
NTU3LDcgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OnNldFN0eWxlKFJlbmRlclN0eWxlIAogICAgICAg
ICAvLyBUaGUgYmFja2dyb3VuZCBvZiB0aGUgcm9vdCBlbGVtZW50IG9yIHRoZSBib2R5IGVsZW1l
bnQgY291bGQgcHJvcGFnYXRlIHVwIHRvCiAgICAgICAgIC8vIHRoZSBjYW52YXMuICBKdXN0IGRp
cnR5IHRoZSBlbnRpcmUgY2FudmFzIHdoZW4gb3VyIHN0eWxlIGNoYW5nZXMgc3Vic3RhbnRpYWxs
eS4KICAgICAgICAgaWYgKGQgPj0gUmVuZGVyU3R5bGU6OlJlcGFpbnQgJiYgZWxlbWVudCgpICYm
Ci0gICAgICAgICAgICAoZWxlbWVudCgpLT5pZCgpID09IElEX0hUTUwgfHwgZWxlbWVudCgpLT5p
ZCgpID09IElEX0JPRFkpKQorICAgICAgICAgICAgKGVsZW1lbnQoKS0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6Omh0bWwoKSkgfHwgZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Ym9keSgp
KSkpCiAgICAgICAgICAgICBjYW52YXMoKS0+cmVwYWludCgpOwogICAgICAgICBlbHNlIGlmICht
X3BhcmVudCAmJiAhaXNUZXh0KCkpIHsKICAgICAgICAgICAgIC8vIERvIGEgcmVwYWludCB3aXRo
IHRoZSBvbGQgc3R5bGUgZmlyc3QsIGUuZy4sIGZvciBleGFtcGxlIGlmIHdlIGdvIGZyb20KQEAg
LTIxODgsNyArMjE4OSw3IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpnZXRUZXh0RGVjb3JhdGlvbkNv
bG8KICAgICAgICAgaWYgKGN1cnIgJiYgY3Vyci0+aXNSZW5kZXJCbG9jaygpICYmIGN1cnItPmNv
bnRpbnVhdGlvbigpKQogICAgICAgICAgICAgY3VyciA9IGN1cnItPmNvbnRpbnVhdGlvbigpOwog
ICAgIH0gd2hpbGUgKGN1cnIgJiYgZGVjb3JhdGlvbnMgJiYgKCFxdWlya3NNb2RlIHx8ICFjdXJy
LT5lbGVtZW50KCkgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY3Vy
ci0+ZWxlbWVudCgpLT5pZCgpICE9IElEX0EgJiYgY3Vyci0+ZWxlbWVudCgpLT5pZCgpICE9IElE
X0ZPTlQpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCFjdXJyLT5l
bGVtZW50KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjphKCkpICYmICFjdXJyLT5lbGVtZW50KCkt
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpmb250KCkpKSkpOwogCiAgICAgLy8gSWYgd2UgYmFpbGVk
IG91dCwgdXNlIHRoZSBlbGVtZW50IHdlIGJhaWxlZCBvdXQgYXQgKHR5cGljYWxseSBhIDxmb250
PiBvciA8YT4gZWxlbWVudCkuCiAgICAgaWYgKGRlY29yYXRpb25zICYmIGN1cnIpIHsKQEAgLTIz
MjIsNyArMjMyMyw3IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpzZXRQaXhtYXAoY29uc3QgUVBpeG0K
ICAgICAvLyB3b3VsZCBhdm9pZCBwdXR0aW5nIHRoaXMgZnVuY3Rpb24gYW5kIHRoZSBDYWNoZWRP
YmplY3RDbGllbnQgYmFzZSBjbGFzcyBpbnRvIFJlbmRlck9iamVjdC4KIAogICAgIGlmIChpbWFn
ZSAmJiBpbWFnZS0+cGl4bWFwX3NpemUoKSA9PSBpbWFnZS0+dmFsaWRfcmVjdCgpLnNpemUoKSAm
JiBwYXJlbnQoKSkgewotICAgICAgICBpZiAoY2FudmFzKCkgJiYgZWxlbWVudCgpICYmIChlbGVt
ZW50KCktPmlkKCkgPT0gSURfSFRNTCB8fCBlbGVtZW50KCktPmlkKCkgPT0gSURfQk9EWSkpCisg
ICAgICAgIGlmIChjYW52YXMoKSAmJiBlbGVtZW50KCkgJiYgKGVsZW1lbnQoKS0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6Omh0bWwoKSkgfHwgZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
Ym9keSgpKSkpCiAgICAgICAgICAgICBjYW52YXMoKS0+cmVwYWludCgpOyAgICAvLyByZXBhaW50
IHRoZSBlbnRpcmUgY2FudmFzIHNpbmNlIHRoZSBiYWNrZ3JvdW5kIGdldHMgcHJvcGFnYXRlZCB1
cAogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXBhaW50KCk7ICAgICAgICAgICAgICAvLyBy
ZXBhaW50IG9iamVjdCwgd2hpY2ggaXMgYSBib3ggb3IgYSBjb250YWluZXIgd2l0aCBib3hlcyBp
bnNpZGUgaXQKSW5kZXg6IGtodG1sL3JlbmRlcmluZy9yZW5kZXJfc3R5bGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9yZW5kZXJpbmcvcmVuZGVyX3N0eWxl
LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuODIKZGlmZiAtdSAtcCAtcjEuODIga2h0bWwvcmVu
ZGVyaW5nL3JlbmRlcl9zdHlsZS5oCi0tLSBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX3N0eWxlLmgJ
MTIgTWF5IDIwMDUgMTc6MTE6MjIgLTAwMDAJMS44MgorKysga2h0bWwvcmVuZGVyaW5nL3JlbmRl
cl9zdHlsZS5oCTcgSnVsIDIwMDUgMDU6NTk6MjMgLTAwMDAKQEAgLTI5OSw4ICsyOTksMTAgQEAg
Y2xhc3MgU3R5bGVTdXJyb3VuZERhdGEgOiBwdWJsaWMgU2hhcmVkPAogewogcHVibGljOgogICAg
IFN0eWxlU3Vycm91bmREYXRhKCk7CisgICAgU3R5bGVTdXJyb3VuZERhdGEoY29uc3QgU3R5bGVT
dXJyb3VuZERhdGEmIG8pOworICAgIAorICAgIE1BSU5fVEhSRUFEX0FMTE9DQVRFRDsKIAotICAg
IFN0eWxlU3Vycm91bmREYXRhKGNvbnN0IFN0eWxlU3Vycm91bmREYXRhJiBvICk7CiAgICAgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IFN0eWxlU3Vycm91bmREYXRhJiBvKSBjb25zdDsKICAgICBib29s
IG9wZXJhdG9yIT0oY29uc3QgU3R5bGVTdXJyb3VuZERhdGEmIG8pIGNvbnN0IHsKICAgICAgICAg
cmV0dXJuICEoKnRoaXMgPT0gbyk7CkBAIC0zMjAsOSArMzIyLDkgQEAgY2xhc3MgU3R5bGVCb3hE
YXRhIDogcHVibGljIFNoYXJlZDxTdHlsZQogewogcHVibGljOgogICAgIFN0eWxlQm94RGF0YSgp
OworICAgIFN0eWxlQm94RGF0YShjb25zdCBTdHlsZUJveERhdGEmIG8pOwogCi0gICAgU3R5bGVC
b3hEYXRhKGNvbnN0IFN0eWxlQm94RGF0YSYgbyApOwotCisgICAgTUFJTl9USFJFQURfQUxMT0NB
VEVEOwogCiAgICAgLy8gY29weSBhbmQgYXNzaWdubWVudAogLy8gICAgU3R5bGVCb3hEYXRhKGNv
bnN0IFN0eWxlQm94RGF0YSAmb3RoZXIpOwpAQCAtMzk5LDExICs0MDEsMTEgQEAgY2xhc3MgU3R5
bGVWaXN1YWxEYXRhIDogcHVibGljIFNoYXJlZDxTdAogewogcHVibGljOgogICAgIFN0eWxlVmlz
dWFsRGF0YSgpOwotCiAgICAgflN0eWxlVmlzdWFsRGF0YSgpOwotCiAgICAgU3R5bGVWaXN1YWxE
YXRhKGNvbnN0IFN0eWxlVmlzdWFsRGF0YSYgbyApOwogCisgICAgTUFJTl9USFJFQURfQUxMT0NB
VEVEOworCiAgICAgYm9vbCBvcGVyYXRvcj09KCBjb25zdCBTdHlsZVZpc3VhbERhdGEgJm8gKSBj
b25zdCB7CiAJcmV0dXJuICggY2xpcCA9PSBvLmNsaXAgJiYKICAgICAgICAgICAgICAgICAgaGFz
Q2xpcCA9PSBvLmhhc0NsaXAgJiYKQEAgLTUyMSw2ICs1MjMsOCBAQCBwdWJsaWM6CiAgICAgflN0
eWxlQmFja2dyb3VuZERhdGEoKSB7fQogICAgIFN0eWxlQmFja2dyb3VuZERhdGEoY29uc3QgU3R5
bGVCYWNrZ3JvdW5kRGF0YSYgbyApOwogCisgICAgTUFJTl9USFJFQURfQUxMT0NBVEVEOworCiAg
ICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFN0eWxlQmFja2dyb3VuZERhdGEmIG8pIGNvbnN0Owog
ICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBTdHlsZUJhY2tncm91bmREYXRhICZvKSBjb25zdCB7
CiAJcmV0dXJuICEoKnRoaXMgPT0gbyk7CkBAIC01NDMsNiArNTQ3LDggQEAgcHVibGljOgogICAg
IFN0eWxlTWFycXVlZURhdGEoKTsKICAgICBTdHlsZU1hcnF1ZWVEYXRhKGNvbnN0IFN0eWxlTWFy
cXVlZURhdGEmIG8pOwogICAgIAorICAgIE1BSU5fVEhSRUFEX0FMTE9DQVRFRDsKKwogICAgIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBTdHlsZU1hcnF1ZWVEYXRhJiBvKSBjb25zdDsKICAgICBib29s
IG9wZXJhdG9yIT0oY29uc3QgU3R5bGVNYXJxdWVlRGF0YSYgbykgY29uc3QgewogICAgICAgICBy
ZXR1cm4gISgqdGhpcyA9PSBvKTsKQEAgLTU3MSw2ICs1NzcsOCBAQCBwdWJsaWM6CiAgICAgU3R5
bGVGbGV4aWJsZUJveERhdGEoKTsKICAgICBTdHlsZUZsZXhpYmxlQm94RGF0YShjb25zdCBTdHls
ZUZsZXhpYmxlQm94RGF0YSYgbyk7CiAKKyAgICBNQUlOX1RIUkVBRF9BTExPQ0FURUQ7CisKICAg
ICBib29sIG9wZXJhdG9yPT0oY29uc3QgU3R5bGVGbGV4aWJsZUJveERhdGEmIG8pIGNvbnN0Owog
ICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBTdHlsZUZsZXhpYmxlQm94RGF0YSAmbykgY29uc3Qg
ewogICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvKTsKQEAgLTY3Nyw2ICs2ODUsOCBAQCBwdWJs
aWM6CiAgICAgflN0eWxlQ1NTM05vbkluaGVyaXRlZERhdGEoKTsKICAgICBTdHlsZUNTUzNOb25J
bmhlcml0ZWREYXRhKGNvbnN0IFN0eWxlQ1NTM05vbkluaGVyaXRlZERhdGEmIG8pOwogCisgICAg
TUFJTl9USFJFQURfQUxMT0NBVEVEOworCiAjaWZuZGVmIEtIVE1MX05PX1hCTAogICAgIGJvb2wg
YmluZGluZ3NFcXVpdmFsZW50KGNvbnN0IFN0eWxlQ1NTM05vbkluaGVyaXRlZERhdGEmIG8pIGNv
bnN0OwogI2VuZGlmCkBAIC03MTUsNiArNzI1LDggQEAgcHVibGljOgogICAgIH5TdHlsZUNTUzNJ
bmhlcml0ZWREYXRhKCk7CiAgICAgU3R5bGVDU1MzSW5oZXJpdGVkRGF0YShjb25zdCBTdHlsZUNT
UzNJbmhlcml0ZWREYXRhJiBvKTsKIAorICAgIE1BSU5fVEhSRUFEX0FMTE9DQVRFRDsKKwogICAg
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBTdHlsZUNTUzNJbmhlcml0ZWREYXRhJiBvKSBjb25zdDsK
ICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgU3R5bGVDU1MzSW5oZXJpdGVkRGF0YSAmbykgY29u
c3QgewogICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvKTsKQEAgLTc2OSw2ICs3ODEsOCBAQCBw
dWJsaWM6CiAgICAgflN0eWxlSW5oZXJpdGVkRGF0YSgpOwogICAgIFN0eWxlSW5oZXJpdGVkRGF0
YShjb25zdCBTdHlsZUluaGVyaXRlZERhdGEmIG8gKTsKIAorICAgIE1BSU5fVEhSRUFEX0FMTE9D
QVRFRDsKKyAgICAKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgU3R5bGVJbmhlcml0ZWREYXRh
JiBvKSBjb25zdDsKICAgICBib29sIG9wZXJhdG9yICE9ICggY29uc3QgU3R5bGVJbmhlcml0ZWRE
YXRhICZvICkgY29uc3QgewogCXJldHVybiAhKCp0aGlzID09IG8pOwpJbmRleDoga2h0bWwvcmVu
ZGVyaW5nL3JlbmRlcl90YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dl
YkNvcmUva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl90YWJsZS5jcHAsdgpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuMTI2CmRpZmYgLXUgLXAgLXIxLjEyNiBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX3RhYmxl
LmNwcAotLS0ga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl90YWJsZS5jcHAJMTEgTWF5IDIwMDUgMDI6
MTA6MTAgLTAwMDAJMS4xMjYKKysrIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfdGFibGUuY3BwCTcg
SnVsIDIwMDUgMDU6NTk6MjQgLTAwMDAKQEAgLTMxLDggKzMxLDggQEAKICNpbmNsdWRlICJyZW5k
ZXJpbmcvcmVuZGVyX3RhYmxlLmgiCiAjaW5jbHVkZSAicmVuZGVyaW5nL3RhYmxlX2xheW91dC5o
IgogI2luY2x1ZGUgImh0bWwvaHRtbF90YWJsZWltcGwuaCIKLSNpbmNsdWRlICJtaXNjL2h0bWx0
YWdzLmgiCiAjaW5jbHVkZSAibWlzYy9odG1sYXR0cnMuaCIKKyNpbmNsdWRlICJodG1sbmFtZXMu
aCIKICNpbmNsdWRlICJ4bWwvZG9tX2RvY2ltcGwuaCIKIAogI2luY2x1ZGUgPGtnbG9iYWwuaD4K
QEAgLTExMiw3ICsxMTIsNyBAQCB2b2lkIFJlbmRlclRhYmxlOjphZGRDaGlsZChSZW5kZXJPYmpl
Y3QgCiAjZW5kaWYKICAgICBSZW5kZXJPYmplY3QgKm8gPSBjaGlsZDsKIAotICAgIGlmIChjaGls
ZC0+ZWxlbWVudCgpICYmIGNoaWxkLT5lbGVtZW50KCktPmlkKCkgPT0gSURfRk9STSkgeworICAg
IGlmIChjaGlsZC0+ZWxlbWVudCgpICYmIGNoaWxkLT5lbGVtZW50KCktPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjpmb3JtKCkpKSB7CiAgICAgICAgIFJlbmRlckNvbnRhaW5lcjo6YWRkQ2hpbGQoY2hp
bGQsYmVmb3JlQ2hpbGQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMjYyLDcgKzI2Miw3
IEBAIHZvaWQgUmVuZGVyVGFibGU6OmxheW91dCgpCiAKICAgICBSZW5kZXJPYmplY3QgKmNoaWxk
ID0gZmlyc3RDaGlsZCgpOwogICAgIHdoaWxlKCBjaGlsZCApIHsKLQlpZiAoIGNoaWxkLT5uZWVk
c0xheW91dCgpICYmICEoY2hpbGQtPmVsZW1lbnQoKSAmJiBjaGlsZC0+ZWxlbWVudCgpLT5pZCgp
ID09IElEX0ZPUk0pKQorCWlmICggY2hpbGQtPm5lZWRzTGF5b3V0KCkgJiYgIShjaGlsZC0+ZWxl
bWVudCgpICYmIGNoaWxkLT5lbGVtZW50KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpmb3JtKCkp
KSkKIAkgICAgY2hpbGQtPmxheW91dCgpOwogCWlmICggY2hpbGQtPmlzVGFibGVTZWN0aW9uKCkg
KSB7CiAJICAgIHN0YXRpY19jYXN0PFJlbmRlclRhYmxlU2VjdGlvbiAqPihjaGlsZCktPmNhbGNS
b3dIZWlnaHQoKTsKQEAgLTg0OSw3ICs4NDksNyBAQCB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6
YWRkQ2hpbGQoUmVuZGVyCiAjZW5kaWYKICAgICBSZW5kZXJPYmplY3QgKnJvdyA9IGNoaWxkOwog
Ci0gICAgaWYgKGNoaWxkLT5lbGVtZW50KCkgJiYgY2hpbGQtPmVsZW1lbnQoKS0+aWQoKSA9PSBJ
RF9GT1JNKSB7CisgICAgaWYgKGNoaWxkLT5lbGVtZW50KCkgJiYgY2hpbGQtPmVsZW1lbnQoKS0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZvcm0oKSkpIHsKICAgICAgICAgUmVuZGVyQ29udGFpbmVy
OjphZGRDaGlsZChjaGlsZCxiZWZvcmVDaGlsZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBA
IC0xNDk1LDcgKzE0OTUsNyBAQCB2b2lkIFJlbmRlclRhYmxlUm93OjphZGRDaGlsZChSZW5kZXJP
YmplCiAgICAga2REZWJ1ZyggNjA0MCApIDw8IHJlbmRlck5hbWUoKSA8PCAiKFRhYmxlUm93KTo6
YWRkQ2hpbGQoICIgPDwgY2hpbGQtPnJlbmRlck5hbWUoKSA8PCAiICkiICA8PCAiLCAiIDw8CiAg
ICAgICAgICAgICAgICAgICAgICAgIChiZWZvcmVDaGlsZCA/IGJlZm9yZUNoaWxkLT5yZW5kZXJO
YW1lKCkgOiAiMCIpIDw8ICIgKSIgPDwgZW5kbDsKICNlbmRpZgotICAgIGlmIChjaGlsZC0+ZWxl
bWVudCgpICYmIGNoaWxkLT5lbGVtZW50KCktPmlkKCkgPT0gSURfRk9STSkgeworICAgIGlmIChj
aGlsZC0+ZWxlbWVudCgpICYmIGNoaWxkLT5lbGVtZW50KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVz
Ojpmb3JtKCkpKSB7CiAgICAgICAgIFJlbmRlckNvbnRhaW5lcjo6YWRkQ2hpbGQoY2hpbGQsYmVm
b3JlQ2hpbGQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTYwNiw3ICsxNjA2LDcgQEAg
dm9pZCBSZW5kZXJUYWJsZUNlbGw6OnVwZGF0ZUZyb21FbGVtZW50KAogICAgIGludCBvbGRSU3Bh
biA9IHJTcGFuOwogICAgIGludCBvbGRDU3BhbiA9IGNTcGFuOwogICAgIERPTTo6Tm9kZUltcGwq
IG5vZGUgPSBlbGVtZW50KCk7Ci0gICAgaWYgKG5vZGUgJiYgKG5vZGUtPmlkKCkgPT0gSURfVEQg
fHwgbm9kZS0+aWQoKSA9PSBJRF9USCkpIHsKKyAgICBpZiAobm9kZSAmJiAobm9kZS0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OnRkKCkpIHx8IG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0aCgp
KSkpIHsKICAgICAgICAgRE9NOjpIVE1MVGFibGVDZWxsRWxlbWVudEltcGwgKnRjID0gc3RhdGlj
X2Nhc3Q8RE9NOjpIVE1MVGFibGVDZWxsRWxlbWVudEltcGwgKj4obm9kZSk7CiAgICAgICAgIGNT
cGFuID0gdGMtPmNvbFNwYW4oKTsKICAgICAgICAgclNwYW4gPSB0Yy0+cm93U3BhbigpOwpAQCAt
MjI5MCw3ICsyMjkwLDcgQEAgdm9pZCBSZW5kZXJUYWJsZUNvbDo6dXBkYXRlRnJvbUVsZW1lbnQo
KQogewogICAgIGludCBvbGRTcGFuID0gX3NwYW47CiAgICAgRE9NOjpOb2RlSW1wbCAqbm9kZSA9
IGVsZW1lbnQoKTsKLSAgICBpZiAobm9kZSAmJiAobm9kZS0+aWQoKSA9PSBJRF9DT0wgfHwgbm9k
ZS0+aWQoKSA9PSBJRF9DT0xHUk9VUCkpIHsKKyAgICBpZiAobm9kZSAmJiAobm9kZS0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OmNvbCgpKSB8fCBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Y29s
Z3JvdXAoKSkpKSB7CiAgICAgICAgIERPTTo6SFRNTFRhYmxlQ29sRWxlbWVudEltcGwgKnRjID0g
c3RhdGljX2Nhc3Q8RE9NOjpIVE1MVGFibGVDb2xFbGVtZW50SW1wbCAqPihub2RlKTsKICAgICAg
ICAgX3NwYW4gPSB0Yy0+c3BhbigpOwogICAgIH0gCkluZGV4OiBraHRtbC94bWwvZG9tMl9yYW5n
ZWltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3ht
bC9kb20yX3JhbmdlaW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNDAKZGlmZiAtdSAt
cCAtcjEuNDAga2h0bWwveG1sL2RvbTJfcmFuZ2VpbXBsLmNwcAotLS0ga2h0bWwveG1sL2RvbTJf
cmFuZ2VpbXBsLmNwcAkxMyBNYXkgMjAwNSAxNjo0ODo1MSAtMDAwMAkxLjQwCisrKyBraHRtbC94
bWwvZG9tMl9yYW5nZWltcGwuY3BwCTcgSnVsIDIwMDUgMDU6NTk6MjUgLTAwMDAKQEAgLTI5LDcg
KzI5LDYgQEAKICNpbmNsdWRlICJkb21fdGV4dGltcGwuaCIKICNpbmNsdWRlICJkb21feG1saW1w
bC5oIgogI2luY2x1ZGUgImh0bWwvaHRtbF9lbGVtZW50aW1wbC5oIgotI2luY2x1ZGUgIm1pc2Mv
aHRtbHRhZ3MuaCIKICNpbmNsdWRlICJlZGl0aW5nL21hcmt1cC5oIgogI2luY2x1ZGUgImVkaXRp
bmcvdmlzaWJsZV9wb3NpdGlvbi5oIgogI2luY2x1ZGUgImVkaXRpbmcvdmlzaWJsZV91bml0cy5o
IgpJbmRleDoga2h0bWwveG1sL2RvbTJfdHJhdmVyc2FsaW1wbC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwveG1sL2RvbTJfdHJhdmVyc2FsaW1wbC5jcHAs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTAKZGlmZiAtdSAtcCAtcjEuMTAga2h0bWwveG1sL2Rv
bTJfdHJhdmVyc2FsaW1wbC5jcHAKLS0tIGtodG1sL3htbC9kb20yX3RyYXZlcnNhbGltcGwuY3Bw
CTEwIE1heSAyMDA1IDIxOjU5OjE0IC0wMDAwCTEuMTAKKysrIGtodG1sL3htbC9kb20yX3RyYXZl
cnNhbGltcGwuY3BwCTcgSnVsIDIwMDUgMDU6NTk6MjYgLTAwMDAKQEAgLTI2LDggKzI2LDYgQEAK
ICNpbmNsdWRlICJkb20vZG9tX2V4Y2VwdGlvbi5oIgogI2luY2x1ZGUgInhtbC9kb21fZG9jaW1w
bC5oIgogCi0jaW5jbHVkZSAiaHRtbHRhZ3MuaCIKLQogbmFtZXNwYWNlIERPTSB7CiAKIE5vZGVG
aWx0ZXJJbXBsOjpOb2RlRmlsdGVySW1wbChOb2RlRmlsdGVyQ29uZGl0aW9uICpjb25kaXRpb24p
CkluZGV4OiBraHRtbC94bWwvZG9tX2F0b21pY3N0cmluZy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwveG1sL2RvbV9hdG9taWNzdHJpbmcuY3BwLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjgKZGlmZiAtdSAtcCAtcjEuOCBraHRtbC94bWwvZG9tX2F0b21p
Y3N0cmluZy5jcHAKLS0tIGtodG1sL3htbC9kb21fYXRvbWljc3RyaW5nLmNwcAk2IEp1bCAyMDA1
IDAxOjI4OjQ0IC0wMDAwCTEuOAorKysga2h0bWwveG1sL2RvbV9hdG9taWNzdHJpbmcuY3BwCTcg
SnVsIDIwMDUgMDU6NTk6MjYgLTAwMDAKQEAgLTI2LDEzICsyNiw3IEBACiAvLyBwb3J0YWJsZSwg
YW5kIGl0IHdvdWxkIGJlIGdvb2QgdG8gZmlndXJlIG91dCBhIDEwMCUgY2xlYW4gd2F5IHRoYXQg
c3RpbGwgYXZvaWRzIGNvZGUgdGhhdAogLy8gcnVucyBhdCBpbml0IHRpbWUuCiAKLSNpZiBBUFBM
RV9DSEFOR0VTCi0jZGVmaW5lIEFWT0lEX1NUQVRJQ19DT05TVFJVQ1RPUlMgMQotI2VuZGlmCi0K
LSNpZiBBVk9JRF9TVEFUSUNfQ09OU1RSVUNUT1JTCiAjZGVmaW5lIEtIVE1MX0FUT01JQ1NUUklO
R19ISURFX0dMT0JBTFMgMQotI2VuZGlmCiAKICNpbmNsdWRlICJkb21fYXRvbWljc3RyaW5nLmgi
CiAjaW5jbHVkZSAieG1sL2RvbV9zdHJpbmdpbXBsLmgiCkBAIC0xNTIsNDIgKzE0NiwzMCBAQCB2
b2lkIEF0b21pY1N0cmluZzo6cmVtb3ZlKERPTVN0cmluZ0ltcGwgCiAgICAgc3RyaW5nVGFibGUu
cmVtb3ZlKHIpOwogfQogCi0vLyBHbG9iYWwgY29uc3RhbnRzIGZvciBwcm9wZXJ0eSBuYW1lIHN0
cmluZ3MuCi0KLSNpZiAhQVZPSURfU1RBVElDX0NPTlNUUlVDVE9SUwotICAgIC8vIERlZmluZSBh
biBBdG9taWNTdHJpbmcgaW4gdGhlIG5vcm1hbCB3YXkuCi0gICAgI2RlZmluZSBERUZJTkVfR0xP
QkFMKG5hbWUsIHN0cmluZykgZXh0ZXJuIGNvbnN0IEF0b21pY1N0cmluZyBuYW1lICMjIEF0b20o
c3RyaW5nKTsKLQotICAgIGV4dGVybiBjb25zdCBBdG9taWNTdHJpbmcgbnVsbEF0b207Ci0gICAg
ZXh0ZXJuIGNvbnN0IEF0b21pY1N0cmluZyBlbXB0eUF0b207Ci0jZWxzZQotICAgIC8vIERlZmlu
ZSBhbiBBdG9taWNTdHJpbmctc2l6ZWQgYXJyYXkgb2YgcG9pbnRlcnMgdG8gYXZvaWQgc3RhdGlj
IGluaXRpYWxpemF0aW9uLgotICAgIC8vIFVzZSBhbiBhcnJheSBvZiBwb2ludGVycyBpbnN0ZWFk
IG9mIGFuIGFycmF5IG9mIGNoYXIgaW4gY2FzZSB0aGVyZSBpcyBzb21lIGFsaWdubWVudCBpc3N1
ZS4KLSAgICAjZGVmaW5lIERFRklORV9HTE9CQUwobmFtZSwgc3RyaW5nKSBcCi0gICAgICAgIHZv
aWQgKiBuYW1lICMjIEF0b21bKHNpemVvZihBdG9taWNTdHJpbmcpICsgc2l6ZW9mKHZvaWQgKikg
LSAxKSAvIHNpemVvZih2b2lkICopXTsKLQotICAgIERFRklORV9HTE9CQUwobnVsbCwgaWdub3Jl
ZCkKLSAgICBERUZJTkVfR0xPQkFMKGVtcHR5LCBpZ25vcmVkKQotI2VuZGlmCi0KLSNkZWZpbmUg
Q0FMTF9ERUZJTkVfR0xPQkFMKG5hbWUpIERFRklORV9HTE9CQUwobmFtZSwgI25hbWUpCi1LSFRN
TF9BVE9NSUNTVFJJTkdfRUFDSF9HTE9CQUwoQ0FMTF9ERUZJTkVfR0xPQkFMKQorLy8gRGVmaW5l
IGFuIEF0b21pY1N0cmluZy1zaXplZCBhcnJheSBvZiBwb2ludGVycyB0byBhdm9pZCBzdGF0aWMg
aW5pdGlhbGl6YXRpb24uCisvLyBVc2UgYW4gYXJyYXkgb2YgcG9pbnRlcnMgaW5zdGVhZCBvZiBh
biBhcnJheSBvZiBjaGFyIGluIGNhc2UgdGhlcmUgaXMgc29tZSBhbGlnbm1lbnQgaXNzdWUuCisj
ZGVmaW5lIERFRklORV9HTE9CQUwobmFtZSkgXAorICAgIHZvaWQqIG5hbWUgIyMgQXRvbVsoc2l6
ZW9mKEF0b21pY1N0cmluZykgKyBzaXplb2Yodm9pZCopIC0gMSkgLyBzaXplb2Yodm9pZCopXTsK
KworREVGSU5FX0dMT0JBTChudWxsKQorREVGSU5FX0dMT0JBTChlbXB0eSkKK0RFRklORV9HTE9C
QUwodGV4dCkKK0RFRklORV9HTE9CQUwoY29tbWVudCkKK0RFRklORV9HTE9CQUwoc3RhcikKIAog
dm9pZCBBdG9taWNTdHJpbmc6OmluaXQoKQogewotI2lmIEFWT0lEX1NUQVRJQ19DT05TVFJVQ1RP
UlMKICAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXplZDsKICAgICBpZiAoIWluaXRpYWxpemVkKSB7
CiAgICAgICAgIC8vIFVzZSBwbGFjZW1lbnQgbmV3IHRvIGluaXRpYWxpemUgdGhlIGdsb2JhbHMu
CiAgICAgICAgIG5ldyAoJm51bGxBdG9tKSBBdG9taWNTdHJpbmc7CiAgICAgICAgIG5ldyAoJmVt
cHR5QXRvbSkgQXRvbWljU3RyaW5nKCIiKTsKLSAgICAgICAgCi0gICAgICAgICNkZWZpbmUgUExB
Q0VNRU5UX05FV19HTE9CQUwobmFtZSwgc3RyaW5nKSBuZXcgKCZuYW1lICMjIFByb3BlcnR5TmFt
ZSkgQXRvbWljU3RyaW5nKHN0cmluZyk7Ci0gICAgICAgICNkZWZpbmUgQ0FMTF9QTEFDRU1FTlRf
TkVXX0dMT0JBTChuYW1lKSBQTEFDRU1FTlRfTkVXX0dMT0JBTChuYW1lLCAjbmFtZSkKLSAgICAg
ICAgS0hUTUxfQVRPTUlDU1RSSU5HX0VBQ0hfR0xPQkFMKENBTExfUExBQ0VNRU5UX05FV19HTE9C
QUwpCisgICAgICAgIG5ldyAoJnRleHRBdG9tKSBBdG9taWNTdHJpbmcoIiN0ZXh0Iik7CisgICAg
ICAgIG5ldyAoJmNvbW1lbnRBdG9tKSBBdG9taWNTdHJpbmcoIiNjb21tZW50Iik7CisgICAgICAg
IG5ldyAoJnN0YXJBdG9tKSBBdG9taWNTdHJpbmcoIioiKTsKKwogICAgICAgICBpbml0aWFsaXpl
ZCA9IHRydWU7CiAgICAgfQotI2VuZGlmCiB9CiAKIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBdG9t
aWNTdHJpbmcgJmEsIGNvbnN0IERPTVN0cmluZyAmYikKSW5kZXg6IGtodG1sL3htbC9kb21fYXRv
bWljc3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwv
eG1sL2RvbV9hdG9taWNzdHJpbmcuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40CmRpZmYgLXUg
LXAgLXIxLjQga2h0bWwveG1sL2RvbV9hdG9taWNzdHJpbmcuaAotLS0ga2h0bWwveG1sL2RvbV9h
dG9taWNzdHJpbmcuaAkyOCBKdW4gMjAwNSAwMTo1NDozNCAtMDAwMAkxLjQKKysrIGtodG1sL3ht
bC9kb21fYXRvbWljc3RyaW5nLmgJNyBKdWwgMjAwNSAwNTo1OToyNiAtMDAwMApAQCAtNTUsNyAr
NTUsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBwZXJjZW50YWdlKGludCAmX3BlcmNlbnRhZ2UpIGNv
bnN0IHsgcmV0dXJuIG1fc3RyaW5nLnBlcmNlbnRhZ2UoX3BlcmNlbnRhZ2UpOyB9CiAgICAga2h0
bWw6Okxlbmd0aCogdG9MZW5ndGhBcnJheShpbnQmIGxlbikgY29uc3QgeyByZXR1cm4gbV9zdHJp
bmcudG9MZW5ndGhBcnJheShsZW4pOyB9CiAgICAga2h0bWw6Okxlbmd0aCogdG9Db29yZHNBcnJh
eShpbnQmIGxlbikgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcudG9Db29yZHNBcnJheShsZW4pOyB9
Ci0gICAgCisKICAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nLmlzTnVs
bCgpOyB9CiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcuaXNFbXB0
eSgpOyB9CiAKQEAgLTEwOSwxNiArMTA5LDE0IEBAIGlubGluZSBib29sIG9wZXJhdG9yPT0oY29u
c3QgQXRvbWljU3RyaW4KIAogLy8gTGlzdCBvZiBwcm9wZXJ0eSBuYW1lcywgcGFzc2VkIHRvIGEg
bWFjcm8gc28gd2UgY2FuIGRvIHNldCB0aGVtIHVwIHZhcmlvdXMKIC8vIHdheXMgd2l0aG91dCBy
ZXBlYXRpbmcgdGhlIGxpc3QuCi0jZGVmaW5lIEtIVE1MX0FUT01JQ1NUUklOR19FQUNIX0dMT0JB
TChtYWNybykKIAotICAgIC8vIERlZmluZSBleHRlcm5hbCBnbG9iYWwgdmFyaWFibGVzIGZvciBh
bGwgcHJvcGVydHkgbmFtZXMgYWJvdmUgKGFuZCBvbmUgbW9yZSkuCisvLyBEZWZpbmUgZXh0ZXJu
YWwgZ2xvYmFsIHZhcmlhYmxlcyBmb3IgdGhlIGNvbW1vbmx5IHVzZWQgYXRvbWljIHN0cmluZ3Mu
CiAjaWYgIUtIVE1MX0FUT01JQ1NUUklOR19ISURFX0dMT0JBTFMKICAgICBleHRlcm4gY29uc3Qg
QXRvbWljU3RyaW5nIG51bGxBdG9tOwogICAgIGV4dGVybiBjb25zdCBBdG9taWNTdHJpbmcgZW1w
dHlBdG9tOwotI2RlZmluZSBLSFRNTF9BVE9NSUNTVFJJTkdfREVDTEFSRV9HTE9CQUwobmFtZSkg
ZXh0ZXJuIGNvbnN0IEF0b21pY1N0cmluZyBuYW1lICMjIFByb3BlcnR5TmFtZTsKLSAgICBLSFRN
TF9BVE9NSUNTVFJJTkdfRUFDSF9HTE9CQUwoS0hUTUxfQVRPTUlDU1RSSU5HX0RFQ0xBUkVfR0xP
QkFMKQotICAgIEtIVE1MX0FUT01JQ1NUUklOR19ERUNMQVJFX0dMT0JBTChzcGVjaWFsUHJvdG90
eXBlKQotI3VuZGVmIEtIVE1MX0FUT01JQ1NUUklOR19ERUNMQVJFX0dMT0JBTAorICAgIGV4dGVy
biBjb25zdCBBdG9taWNTdHJpbmcgdGV4dEF0b207CisgICAgZXh0ZXJuIGNvbnN0IEF0b21pY1N0
cmluZyBjb21tZW50QXRvbTsKKyAgICBleHRlcm4gY29uc3QgQXRvbWljU3RyaW5nIHN0YXJBdG9t
OwogI2VuZGlmCiAgICAgICAgIAogYm9vbCBvcGVyYXRvcj09KGNvbnN0IEF0b21pY1N0cmluZyAm
YSwgY29uc3QgRE9NU3RyaW5nICZiKTsKSW5kZXg6IGtodG1sL3htbC9kb21fZG9jaW1wbC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwveG1sL2RvbV9kb2Np
bXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yMzEKZGlmZiAtdSAtcCAtcjEuMjMxIGto
dG1sL3htbC9kb21fZG9jaW1wbC5jcHAKLS0tIGtodG1sL3htbC9kb21fZG9jaW1wbC5jcHAJMyBK
dWwgMjAwNSAxMDowNTowOCAtMDAwMAkxLjIzMQorKysga2h0bWwveG1sL2RvbV9kb2NpbXBsLmNw
cAk3IEp1bCAyMDA1IDA1OjU5OjI4IC0wMDAwCkBAIC0zNCw4ICszNCw2IEBACiAjaW5jbHVkZSAi
eG1sL2RvbTJfdmlld3NpbXBsLmgiCiAjaW5jbHVkZSAieG1sL3htbF90b2tlbml6ZXIuaCIKIAot
I2luY2x1ZGUgInhtbF9uYW1lc3BhY2VfdGFibGUuaCIKLQogI2luY2x1ZGUgImNzcy9jc3NoZWxw
ZXIuaCIKICNpbmNsdWRlICJjc3MvY3Nzc3R5bGVzZWxlY3Rvci5oIgogI2luY2x1ZGUgImNzcy9j
c3Nfc3R5bGVzaGVldGltcGwuaCIKQEAgLTY1LDE3ICs2MywxMSBAQAogI2luY2x1ZGUgImtodG1s
X3NldHRpbmdzLmgiCiAjaW5jbHVkZSAia2h0bWxwYXJ0X3AuaCIKIAotI2luY2x1ZGUgImh0bWwv
aHRtbF9iYXNlaW1wbC5oIgotI2luY2x1ZGUgImh0bWwvaHRtbF9ibG9ja2ltcGwuaCIKLSNpbmNs
dWRlICJodG1sL2h0bWxfY2FudmFzaW1wbC5oIgorLy8gRklYTUU6IFdlIHdhbnQgdG8gY3V0IHRo
ZSByZW1haW5pbmcgSFRNTCBkZXBlbmRlbmNpZXMgc28gdGhhdCB3ZSBkb24ndCBuZWVkIHRvIGlu
Y2x1ZGUgdGhlc2UgZmlsZXMuCiAjaW5jbHVkZSAiaHRtbC9odG1sX2RvY3VtZW50aW1wbC5oIgot
I2luY2x1ZGUgImh0bWwvaHRtbF9mb3JtaW1wbC5oIgogI2luY2x1ZGUgImh0bWwvaHRtbF9oZWFk
aW1wbC5oIgogI2luY2x1ZGUgImh0bWwvaHRtbF9pbWFnZWltcGwuaCIKLSNpbmNsdWRlICJodG1s
L2h0bWxfbGlzdGltcGwuaCIKLSNpbmNsdWRlICJodG1sL2h0bWxfbWlzY2ltcGwuaCIKLSNpbmNs
dWRlICJodG1sL2h0bWxfdGFibGVpbXBsLmgiCi0jaW5jbHVkZSAiaHRtbC9odG1sX29iamVjdGlt
cGwuaCIKKyNpbmNsdWRlICJodG1sZmFjdG9yeS5oIgogCiAjaW5jbHVkZSAiY3NzdmFsdWVzLmgi
CiAKQEAgLTUwNCw5ICs0OTYsOSBAQCBFbGVtZW50SW1wbCAqRG9jdW1lbnRJbXBsOjpkb2N1bWVu
dEVsZW1lCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsKj4obik7CiB9CiAKLUVs
ZW1lbnRJbXBsICpEb2N1bWVudEltcGw6OmNyZWF0ZUVsZW1lbnQoIGNvbnN0IERPTVN0cmluZyAm
bmFtZSwgaW50ICZleGNlcHRpb25jb2RlICkKK0VsZW1lbnRJbXBsICpEb2N1bWVudEltcGw6OmNy
ZWF0ZUVsZW1lbnQoY29uc3QgRE9NU3RyaW5nICZuYW1lLCBpbnQgJmV4Y2VwdGlvbkNvZGUpCiB7
Ci0gICAgcmV0dXJuIG5ldyBYTUxFbGVtZW50SW1wbCggZG9jdW1lbnQsIG5hbWUuaW1wbGVtZW50
YXRpb24oKSApOworICAgIHJldHVybiBjcmVhdGVFbGVtZW50TlMoZW1wdHlBdG9tLCBuYW1lLCBl
eGNlcHRpb25Db2RlKTsKIH0KIAogRG9jdW1lbnRGcmFnbWVudEltcGwgKkRvY3VtZW50SW1wbDo6
Y3JlYXRlRG9jdW1lbnRGcmFnbWVudCggICkKQEAgLTU3MywxMCArNTY1LDggQEAgTm9kZUltcGwg
KkRvY3VtZW50SW1wbDo6aW1wb3J0Tm9kZShOb2RlSQogICAgICAgICAgICAgcmV0dXJuIGNyZWF0
ZUNvbW1lbnQoaW1wb3J0ZWROb2RlLT5ub2RlVmFsdWUoKSk7CiAgICAgICAgIGNhc2UgTm9kZTo6
RUxFTUVOVF9OT0RFOiB7CiAgICAgICAgICAgICBFbGVtZW50SW1wbCAqb2xkRWxlbWVudCA9IHN0
YXRpY19jYXN0PEVsZW1lbnRJbXBsICo+KGltcG9ydGVkTm9kZSk7Ci0gICAgICAgICAgICBEb2N1
bWVudEltcGwgKm9sZERvYyA9IG9sZEVsZW1lbnQtPmdldERvY3VtZW50KCk7Ci0gICAgICAgICAg
ICBzdGF0aWMgRE9NU3RyaW5nIEhUTUxOYW1lc3BhY2UoWEhUTUxfTkFNRVNQQUNFKTsKLSAgICAg
ICAgICAgIERPTVN0cmluZyBlbGVtZW50TmFtZXNwYWNlID0gb2xkRWxlbWVudC0+aXNIVE1MRWxl
bWVudCgpID8gSFRNTE5hbWVzcGFjZSA6IG9sZEVsZW1lbnQtPm5hbWVzcGFjZVVSSSgpOwotICAg
ICAgICAgICAgRWxlbWVudEltcGwgKm5ld0VsZW1lbnQgPSBjcmVhdGVFbGVtZW50TlMoZWxlbWVu
dE5hbWVzcGFjZS5pbXBsZW1lbnRhdGlvbigpLCBvbGRFbGVtZW50LT50YWdOYW1lKCksIGV4Y2Vw
dGlvbmNvZGUpOworICAgICAgICAgICAgLy8gRklYTUU6IFByZWZpeCBpcyBsb3N0LiAgSXMgdGhh
dCByaWdodD8KKyAgICAgICAgICAgIEVsZW1lbnRJbXBsICpuZXdFbGVtZW50ID0gY3JlYXRlRWxl
bWVudE5TKG9sZEVsZW1lbnQtPm5hbWVzcGFjZVVSSSgpLCBvbGRFbGVtZW50LT5sb2NhbE5hbWUo
KSwgZXhjZXB0aW9uY29kZSk7CiAgICAgICAgICAgICBpZiAoZXhjZXB0aW9uY29kZSAhPSAwKQog
ICAgICAgICAgICAgICAgIHJldHVybiAwOwogCkBAIC01OTcsNyArNTg3LDggQEAgTm9kZUltcGwg
KkRvY3VtZW50SW1wbDo6aW1wb3J0Tm9kZShOb2RlSQogICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gIyMjIGV4dHJhY3QgYW5kIHNldCBuZXcgcHJlZml4CiAgICAgICAgICAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgICAgICAgICBOb2RlSW1wbDo6SWQgbm9kZUlkID0gYXR0cklkKG9sZERv
Yy0+bmFtZXNwYWNlVVJJKGF0dHItPmF0dHJJbXBsKCktPmlkKCkpLCBsb2NhbE5hbWUuaW1wbGVt
ZW50YXRpb24oKSwgZmFsc2UgLyogYWxsb2NhdGUgKi8pOworICAgICAgICAgICAgICAgICAgICAv
LyBGSVhNRTogTG9zZSB0aGUgbmFtZXNwYWNlIGhlcmUgZm9yIG5vdy4gIFRoaXMgY29kZSB3aWxs
IGNoYW5nZSBzb29uIGFueXdheS4KKyAgICAgICAgICAgICAgICAgICAgTm9kZUltcGw6OklkIG5v
ZGVJZCA9IGF0dHJJZCgwLCBsb2NhbE5hbWUuaW1wbGVtZW50YXRpb24oKSwgZmFsc2UgLyogYWxs
b2NhdGUgKi8pOwogICAgICAgICAgICAgICAgICAgICBuZXdFbGVtZW50LT5zZXRBdHRyaWJ1dGUo
bm9kZUlkLCB2YWx1ZS5pbXBsZW1lbnRhdGlvbigpLCBleGNlcHRpb25jb2RlKTsKICAgICAgICAg
ICAgICAgICAgICAgaWYgKGV4Y2VwdGlvbmNvZGUgIT0gMCkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgbmV3RWxlbWVudC0+ZGVyZWYoKTsKQEAgLTYzNiwyOCArNjI3LDM1IEBAIE5vZGVJbXBs
ICpEb2N1bWVudEltcGw6OmltcG9ydE5vZGUoTm9kZUkKIAogRWxlbWVudEltcGwgKkRvY3VtZW50
SW1wbDo6Y3JlYXRlRWxlbWVudE5TKCBjb25zdCBET01TdHJpbmcgJl9uYW1lc3BhY2VVUkksIGNv
bnN0IERPTVN0cmluZyAmX3F1YWxpZmllZE5hbWUsIGludCAmZXhjZXB0aW9uY29kZSkKIHsKLSAg
ICBFbGVtZW50SW1wbCAqZSA9IDA7Ci0gICAgUVN0cmluZyBxTmFtZSA9IF9xdWFsaWZpZWROYW1l
LnN0cmluZygpOwotICAgIGludCBjb2xvblBvcyA9IHFOYW1lLmZpbmQoJzonLDApOwotCisgICAg
Ly8gU3BsaXQgdGhlIG5hbWUuCisgICAgaW50IGV4Y2VwdGlvbkNvZGUgPSAwOworICAgIEVsZW1l
bnRJbXBsKiBlID0gMDsKKyAgICBET01TdHJpbmcgcHJlZml4LCBsb2NhbE5hbWU7CisgICAgaW50
IGNvbG9uUG9zID0gX3F1YWxpZmllZE5hbWUuZmluZCgnOicpOworICAgIGlmIChjb2xvblBvcyA+
PSAwKSB7CisgICAgICAgIHByZWZpeCA9IF9xdWFsaWZpZWROYW1lLnN1YnN0cmluZygwLCBjb2xv
blBvcyk7CisgICAgICAgIGxvY2FsTmFtZSA9IF9xdWFsaWZpZWROYW1lLnN1YnN0cmluZyhjb2xv
blBvcysxLCBfcXVhbGlmaWVkTmFtZS5sZW5ndGgoKSAtIGNvbG9uUG9zKTsKKyAgICB9CisgICAg
ZWxzZQorICAgICAgICBsb2NhbE5hbWUgPSBfcXVhbGlmaWVkTmFtZTsKKyAgICAKKyAgICAvLyBG
SVhNRTogVXNlIHJlZ2lzdGVyZWQgbmFtZXNwYWNlcyBhbmQgbG9vayB1cCBpbiBhIGhhc2ggdG8g
ZmluZCB0aGUgcmlnaHQgZmFjdG9yeS4KICAgICBpZiAoX25hbWVzcGFjZVVSSSA9PSBYSFRNTF9O
QU1FU1BBQ0UpIHsKLSAgICAgICAgLy8gVXNlciByZXF1ZXN0ZWQgYW4gZWxlbWVudCBpbiB0aGUg
WEhUTUwgbmFtZXNwYWNlIC0gdGhpcyBtZWFucyB3ZSBjcmVhdGUgYSBzcGVjaWZpYyBlbGVtZW50
Ci0gICAgICAgIC8vIChlbGVtZW50cyBub3QgaW4gdGhpcyBuYW1lc3BhY2UgYXJlIHRyZWF0ZWQg
YXMgbm9ybWFsIFhNTCBlbGVtZW50cykKLSAgICAgICAgZSA9IGNyZWF0ZUhUTUxFbGVtZW50KHFO
YW1lLm1pZChjb2xvblBvcysxKSwgZXhjZXB0aW9uY29kZSk7Ci0gICAgICAgIGlmIChleGNlcHRp
b25jb2RlKQorICAgICAgICBpZiAoIWlzVmFsaWROYW1lKGxvY2FsTmFtZSkpIHsKKyAgICAgICAg
ICAgIGV4Y2VwdGlvbmNvZGUgPSBET01FeGNlcHRpb246OklOVkFMSURfQ0hBUkFDVEVSX0VSUjsK
ICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBpZiAoZSAmJiBjb2xvblBvcyA+PSAwKSB7
Ci0gICAgICAgICAgICBlLT5zZXRQcmVmaXgocU5hbWUubGVmdChjb2xvblBvcyksIGV4Y2VwdGlv
bmNvZGUpOwotICAgICAgICAgICAgaWYgKGV4Y2VwdGlvbmNvZGUpIHsKLSAgICAgICAgICAgICAg
ICBkZWxldGUgZTsKKyAgICAgICAgfQorICAgICAgICBlID0gSFRNTEVsZW1lbnRGYWN0b3J5Ojpj
cmVhdGVIVE1MRWxlbWVudChBdG9taWNTdHJpbmcobG9jYWxOYW1lKSwgdGhpcywgMCwgZmFsc2Up
OworICAgICAgICBpZiAoZSAmJiAhcHJlZml4LmlzTnVsbCgpKSB7CisgICAgICAgICAgICBlLT5z
ZXRQcmVmaXgoQXRvbWljU3RyaW5nKHByZWZpeCksIGV4Y2VwdGlvbkNvZGUpOworICAgICAgICAg
ICAgaWYgKGV4Y2VwdGlvbkNvZGUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAg
ICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0KKyAgICAKICAgICBpZiAoIWUpCi0gICAgICAgIGUg
PSBuZXcgWE1MRWxlbWVudEltcGwoIGRvY3VtZW50LCBfcXVhbGlmaWVkTmFtZS5pbXBsZW1lbnRh
dGlvbigpLCBfbmFtZXNwYWNlVVJJLmltcGxlbWVudGF0aW9uKCkgKTsKLQorICAgICAgICBlID0g
bmV3IEVsZW1lbnRJbXBsKFF1YWxpZmllZE5hbWUoQXRvbWljU3RyaW5nKHByZWZpeCksIEF0b21p
Y1N0cmluZyhsb2NhbE5hbWUpLCBBdG9taWNTdHJpbmcoX25hbWVzcGFjZVVSSSkpLCBkb2N1bWVu
dCk7CisgICAgCiAgICAgcmV0dXJuIGU7CiB9CiAKQEAgLTgxMSwyMjAgKzgwOSw2IEBAIHVuc2ln
bmVkIHNob3J0IERvY3VtZW50SW1wbDo6bm9kZVR5cGUoKSAKICAgICByZXR1cm4gTm9kZTo6RE9D
VU1FTlRfTk9ERTsKIH0KIAotRWxlbWVudEltcGwgKkRvY3VtZW50SW1wbDo6Y3JlYXRlSFRNTEVs
ZW1lbnQoIGNvbnN0IERPTVN0cmluZyAmbmFtZSwgaW50ICZleGNlcHRpb25jb2RlICkKLXsKLSAg
ICBpZiAoIWlzVmFsaWROYW1lKG5hbWUpKSB7Ci0gICAgICAgIGV4Y2VwdGlvbmNvZGUgPSBET01F
eGNlcHRpb246OklOVkFMSURfQ0hBUkFDVEVSX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
fQotICAgIHJldHVybiBjcmVhdGVIVE1MRWxlbWVudCh0YWdJZCgwLCBuYW1lLmltcGxlbWVudGF0
aW9uKCksIGZhbHNlKSk7Ci19Ci0KLUVsZW1lbnRJbXBsICpEb2N1bWVudEltcGw6OmNyZWF0ZUhU
TUxFbGVtZW50KHVuc2lnbmVkIHNob3J0IHRhZ0lEKQotewotICAgIHN3aXRjaCAodGFnSUQpCi0g
ICAgewotICAgIGNhc2UgSURfSFRNTDoKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MSHRtbEVsZW1l
bnRJbXBsKGRvY1B0cigpKTsKLSAgICBjYXNlIElEX0hFQUQ6Ci0gICAgICAgIHJldHVybiBuZXcg
SFRNTEhlYWRFbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0gICAgY2FzZSBJRF9CT0RZOgotICAgICAg
ICByZXR1cm4gbmV3IEhUTUxCb2R5RWxlbWVudEltcGwoZG9jUHRyKCkpOwotCi0vLyBoZWFkIGVs
ZW1lbnRzCi0gICAgY2FzZSBJRF9CQVNFOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxCYXNlRWxl
bWVudEltcGwoZG9jUHRyKCkpOwotICAgIGNhc2UgSURfTElOSzoKLSAgICAgICAgcmV0dXJuIG5l
dyBIVE1MTGlua0VsZW1lbnRJbXBsKGRvY1B0cigpKTsKLSAgICBjYXNlIElEX01FVEE6Ci0gICAg
ICAgIHJldHVybiBuZXcgSFRNTE1ldGFFbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0gICAgY2FzZSBJ
RF9TVFlMRToKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MU3R5bGVFbGVtZW50SW1wbChkb2NQdHIo
KSk7Ci0gICAgY2FzZSBJRF9USVRMRToKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MVGl0bGVFbGVt
ZW50SW1wbChkb2NQdHIoKSk7Ci0KLS8vIGZyYW1lcwotICAgIGNhc2UgSURfRlJBTUU6Ci0gICAg
ICAgIHJldHVybiBuZXcgSFRNTEZyYW1lRWxlbWVudEltcGwoZG9jUHRyKCkpOwotICAgIGNhc2Ug
SURfRlJBTUVTRVQ6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTEZyYW1lU2V0RWxlbWVudEltcGwo
ZG9jUHRyKCkpOwotICAgIGNhc2UgSURfSUZSQU1FOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxJ
RnJhbWVFbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0KLS8vIGZvcm0gZWxlbWVudHMKLS8vICMjIyBG
SVhNRTogd2UgbmVlZCBhIHdheSB0byBzZXQgZm9ybSBkZXBlbmRlbmN5IGFmdGVyIHdlIGhhdmUg
bWFkZSB0aGUgZm9ybSBlbGVtZW50cwotICAgIGNhc2UgSURfRk9STToKLSAgICAgICAgcmV0dXJu
IG5ldyBIVE1MRm9ybUVsZW1lbnRJbXBsKGRvY1B0cigpKTsKLSAgICBjYXNlIElEX0JVVFRPTjoK
LSAgICAgICAgcmV0dXJuIG5ldyBIVE1MQnV0dG9uRWxlbWVudEltcGwoZG9jUHRyKCkpOwotICAg
IGNhc2UgSURfRklFTERTRVQ6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTEZpZWxkU2V0RWxlbWVu
dEltcGwoZG9jUHRyKCkpOwotICAgIGNhc2UgSURfSU5QVVQ6Ci0gICAgICAgIHJldHVybiBuZXcg
SFRNTElucHV0RWxlbWVudEltcGwoZG9jUHRyKCkpOwotICAgIGNhc2UgSURfSVNJTkRFWDoKLSAg
ICAgICAgcmV0dXJuIG5ldyBIVE1MSXNJbmRleEVsZW1lbnRJbXBsKGRvY1B0cigpKTsKLSAgICBj
YXNlIElEX0xBQkVMOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxMYWJlbEVsZW1lbnRJbXBsKGRv
Y1B0cigpKTsKLSAgICBjYXNlIElEX0xFR0VORDoKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MTGVn
ZW5kRWxlbWVudEltcGwoZG9jUHRyKCkpOwotICAgIGNhc2UgSURfT1BUR1JPVVA6Ci0gICAgICAg
IHJldHVybiBuZXcgSFRNTE9wdEdyb3VwRWxlbWVudEltcGwoZG9jUHRyKCkpOwotICAgIGNhc2Ug
SURfT1BUSU9OOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxPcHRpb25FbGVtZW50SW1wbChkb2NQ
dHIoKSk7Ci0gICAgY2FzZSBJRF9TRUxFQ1Q6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTFNlbGVj
dEVsZW1lbnRJbXBsKGRvY1B0cigpKTsKLSAgICBjYXNlIElEX1RFWFRBUkVBOgotICAgICAgICBy
ZXR1cm4gbmV3IEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBsKGRvY1B0cigpKTsKLQotLy8gbGlzdHMK
LSAgICBjYXNlIElEX0RMOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxETGlzdEVsZW1lbnRJbXBs
KGRvY1B0cigpKTsKLSAgICBjYXNlIElEX0REOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxHZW5l
cmljRWxlbWVudEltcGwoZG9jUHRyKCksIHRhZ0lEKTsKLSAgICBjYXNlIElEX0RUOgotICAgICAg
ICByZXR1cm4gbmV3IEhUTUxHZW5lcmljRWxlbWVudEltcGwoZG9jUHRyKCksIHRhZ0lEKTsKLSAg
ICBjYXNlIElEX1VMOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxVTGlzdEVsZW1lbnRJbXBsKGRv
Y1B0cigpKTsKLSAgICBjYXNlIElEX09MOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxPTGlzdEVs
ZW1lbnRJbXBsKGRvY1B0cigpKTsKLSAgICBjYXNlIElEX0RJUjoKLSAgICAgICAgcmV0dXJuIG5l
dyBIVE1MRGlyZWN0b3J5RWxlbWVudEltcGwoZG9jUHRyKCkpOwotICAgIGNhc2UgSURfTUVOVToK
LSAgICAgICAgcmV0dXJuIG5ldyBIVE1MTWVudUVsZW1lbnRJbXBsKGRvY1B0cigpKTsKLSAgICBj
YXNlIElEX0xJOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxMSUVsZW1lbnRJbXBsKGRvY1B0cigp
KTsKLQotLy8gZm9ybWF0dGluZyBlbGVtZW50cyAoYmxvY2spCi0gICAgY2FzZSBJRF9CTE9DS1FV
T1RFOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxCbG9ja3F1b3RlRWxlbWVudEltcGwoZG9jUHRy
KCkpOwotICAgIGNhc2UgSURfRElWOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxEaXZFbGVtZW50
SW1wbChkb2NQdHIoKSk7Ci0gICAgY2FzZSBJRF9IMToKLSAgICBjYXNlIElEX0gyOgotICAgIGNh
c2UgSURfSDM6Ci0gICAgY2FzZSBJRF9INDoKLSAgICBjYXNlIElEX0g1OgotICAgIGNhc2UgSURf
SDY6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTEhlYWRpbmdFbGVtZW50SW1wbChkb2NQdHIoKSwg
dGFnSUQpOwotICAgIGNhc2UgSURfSFI6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTEhSRWxlbWVu
dEltcGwoZG9jUHRyKCkpOwotICAgIGNhc2UgSURfUDoKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1M
UGFyYWdyYXBoRWxlbWVudEltcGwoZG9jUHRyKCkpOwotICAgIGNhc2UgSURfUFJFOgotICAgIGNh
c2UgSURfWE1QOgotICAgIGNhc2UgSURfUExBSU5URVhUOgotICAgICAgICByZXR1cm4gbmV3IEhU
TUxQcmVFbGVtZW50SW1wbChkb2NQdHIoKSwgdGFnSUQpOwotICAgIGNhc2UgSURfTEFZRVI6Ci0g
ICAgICAgIHJldHVybiBuZXcgSFRNTExheWVyRWxlbWVudEltcGwoZG9jUHRyKCkpOwotCi0vLyBm
b250IHN0dWZmCi0gICAgY2FzZSBJRF9CQVNFRk9OVDoKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1M
QmFzZUZvbnRFbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0gICAgY2FzZSBJRF9GT05UOgotICAgICAg
ICByZXR1cm4gbmV3IEhUTUxGb250RWxlbWVudEltcGwoZG9jUHRyKCkpOwotCi0vLyBpbnMvZGVs
Ci0gICAgY2FzZSBJRF9ERUw6Ci0gICAgY2FzZSBJRF9JTlM6Ci0gICAgICAgIHJldHVybiBuZXcg
SFRNTE1vZEVsZW1lbnRJbXBsKGRvY1B0cigpLCB0YWdJRCk7Ci0KLS8vIGFuY2hvcgotICAgIGNh
c2UgSURfQToKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MQW5jaG9yRWxlbWVudEltcGwoZG9jUHRy
KCkpOwotCi0vLyBpbWFnZXMKLSAgICBjYXNlIElEX0lNRzoKLSAgICAgICAgcmV0dXJuIG5ldyBI
VE1MSW1hZ2VFbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0gICAgY2FzZSBJRF9NQVA6Ci0gICAgICAg
IHJldHVybiBuZXcgSFRNTE1hcEVsZW1lbnRJbXBsKGRvY1B0cigpKTsKLSAgICBjYXNlIElEX0FS
RUE6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTEFyZWFFbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0g
ICAgY2FzZSBJRF9DQU5WQVM6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTENhbnZhc0VsZW1lbnRJ
bXBsKGRvY1B0cigpKTsKLQotLy8gb2JqZWN0cywgYXBwbGV0cyBhbmQgc2NyaXB0cwotICAgIGNh
c2UgSURfQVBQTEVUOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxBcHBsZXRFbGVtZW50SW1wbChk
b2NQdHIoKSk7Ci0gICAgY2FzZSBJRF9FTUJFRDoKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MRW1i
ZWRFbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0gICAgY2FzZSBJRF9PQkpFQ1Q6Ci0gICAgICAgIHJl
dHVybiBuZXcgSFRNTE9iamVjdEVsZW1lbnRJbXBsKGRvY1B0cigpKTsKLSAgICBjYXNlIElEX1BB
UkFNOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxQYXJhbUVsZW1lbnRJbXBsKGRvY1B0cigpKTsK
LSAgICBjYXNlIElEX1NDUklQVDoKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MU2NyaXB0RWxlbWVu
dEltcGwoZG9jUHRyKCkpOwotCi0vLyB0YWJsZXMKLSAgICBjYXNlIElEX1RBQkxFOgotICAgICAg
ICByZXR1cm4gbmV3IEhUTUxUYWJsZUVsZW1lbnRJbXBsKGRvY1B0cigpKTsKLSAgICBjYXNlIElE
X0NBUFRJT046Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnRJbXBs
KGRvY1B0cigpKTsKLSAgICBjYXNlIElEX0NPTEdST1VQOgotICAgIGNhc2UgSURfQ09MOgotICAg
ICAgICByZXR1cm4gbmV3IEhUTUxUYWJsZUNvbEVsZW1lbnRJbXBsKGRvY1B0cigpLCB0YWdJRCk7
Ci0gICAgY2FzZSBJRF9UUjoKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MVGFibGVSb3dFbGVtZW50
SW1wbChkb2NQdHIoKSk7Ci0gICAgY2FzZSBJRF9URDoKLSAgICBjYXNlIElEX1RIOgotICAgICAg
ICByZXR1cm4gbmV3IEhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbChkb2NQdHIoKSwgdGFnSUQpOwot
ICAgIGNhc2UgSURfVEhFQUQ6Ci0gICAgY2FzZSBJRF9UQk9EWToKLSAgICBjYXNlIElEX1RGT09U
OgotICAgICAgICByZXR1cm4gbmV3IEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbChkb2NQdHIo
KSwgdGFnSUQsIGZhbHNlKTsKLQotLy8gaW5saW5lIGVsZW1lbnRzCi0gICAgY2FzZSBJRF9CUjoK
LSAgICAgICAgcmV0dXJuIG5ldyBIVE1MQlJFbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0gICAgY2Fz
ZSBJRF9ROgotICAgICAgICByZXR1cm4gbmV3IEhUTUxRdW90ZUVsZW1lbnRJbXBsKGRvY1B0cigp
KTsKLQotICAgIGNhc2UgSURfTUFSUVVFRToKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MTWFycXVl
ZUVsZW1lbnRJbXBsKGRvY1B0cigpKTsKLSAgIAotLy8gZWxlbWVudHMgd2l0aCBubyBzcGVjaWFs
IHJlcHJlc2VudGF0aW9uIGluIHRoZSBET00KLQotLy8gYmxvY2s6Ci0gICAgY2FzZSBJRF9BRERS
RVNTOgotICAgIGNhc2UgSURfQ0VOVEVSOgotCi0vLyBpbmxpbmUKLSAgICAgICAgLy8gJWZvbnRz
dHlsZQotICAgIGNhc2UgSURfVFQ6Ci0gICAgY2FzZSBJRF9VOgotICAgIGNhc2UgSURfQjoKLSAg
ICBjYXNlIElEX0k6Ci0gICAgY2FzZSBJRF9TOgotICAgIGNhc2UgSURfU1RSSUtFOgotICAgIGNh
c2UgSURfQklHOgotICAgIGNhc2UgSURfU01BTEw6Ci0KLSAgICAgICAgLy8gJXBocmFzZQotICAg
IGNhc2UgSURfRU06Ci0gICAgY2FzZSBJRF9TVFJPTkc6Ci0gICAgY2FzZSBJRF9ERk46Ci0gICAg
Y2FzZSBJRF9DT0RFOgotICAgIGNhc2UgSURfU0FNUDoKLSAgICBjYXNlIElEX0tCRDoKLSAgICBj
YXNlIElEX1ZBUjoKLSAgICBjYXNlIElEX0NJVEU6Ci0gICAgY2FzZSBJRF9BQkJSOgotICAgIGNh
c2UgSURfQUNST05ZTToKLQotICAgICAgICAvLyAlc3BlY2lhbAotICAgIGNhc2UgSURfU1VCOgot
ICAgIGNhc2UgSURfU1VQOgotICAgIGNhc2UgSURfU1BBTjoKLSAgICBjYXNlIElEX05PQlI6Ci0g
ICAgY2FzZSBJRF9XQlI6Ci0KLSAgICBjYXNlIElEX0JETzoKLSAgICBkZWZhdWx0OgotICAgICAg
ICByZXR1cm4gbmV3IEhUTUxHZW5lcmljRWxlbWVudEltcGwoZG9jUHRyKCksIHRhZ0lEKTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQogUVN0cmluZyBEb2N1bWVudEltcGw6Om5leHRTdGF0
ZSgpCiB7CiAgICBRU3RyaW5nIHN0YXRlOwpAQCAtMTQ2NCwxMCArMTI0OCwxMCBAQCBIVE1MRWxl
bWVudEltcGwqIERvY3VtZW50SW1wbDo6Ym9keSgpCiAgICAgLy8gdHJ5IHRvIHByZWZlciBhIEZS
QU1FU0VUIGVsZW1lbnQgb3ZlciBCT0RZCiAgICAgTm9kZUltcGwqIGJvZHkgPSAwOwogICAgIGZv
ciAoTm9kZUltcGwqIGkgPSBkZS0+Zmlyc3RDaGlsZCgpOyBpOyBpID0gaS0+bmV4dFNpYmxpbmco
KSkgewotICAgICAgICBpZiAoaS0+aWQoKSA9PSBJRF9GUkFNRVNFVCkKKyAgICAgICAgaWYgKGkt
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpmcmFtZXNldCgpKSkKICAgICAgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwqPihpKTsKICAgICAgICAgCi0gICAgICAgIGlmIChp
LT5pZCgpID09IElEX0JPRFkpCisgICAgICAgIGlmIChpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
Ym9keSgpKSkKICAgICAgICAgICAgIGJvZHkgPSBpOwogICAgIH0KICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KGJvZHkpOwpAQCAtMTU5Nyw3ICsxMzgxLDcgQEAgYm9v
bCBEb2N1bWVudEltcGw6OnNob3VsZFNjaGVkdWxlTGF5b3V0KAogICAgIC8vIChjKSB3ZSBoYXZl
IGEgPGJvZHk+CiAgICAgcmV0dXJuIChyZW5kZXJlcigpICYmIHJlbmRlcmVyKCktPm5lZWRzTGF5
b3V0KCkgJiYgaGF2ZVN0eWxlc2hlZXRzTG9hZGVkKCkgJiYKICAgICAgICAgICAgIGRvY3VtZW50
RWxlbWVudCgpICYmIGRvY3VtZW50RWxlbWVudCgpLT5yZW5kZXJlcigpICYmCi0gICAgICAgICAg
ICAoZG9jdW1lbnRFbGVtZW50KCktPmlkKCkgIT0gSURfSFRNTCB8fCBib2R5KCkpKTsKKyAgICAg
ICAgICAgICghZG9jdW1lbnRFbGVtZW50KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpodG1sKCkp
IHx8IGJvZHkoKSkpOwogfQogCiBpbnQgRG9jdW1lbnRJbXBsOjptaW5pbXVtTGF5b3V0RGVsYXko
KQpAQCAtMTcyMSw0MiArMTUwNSw2IEBAIHZvaWQgRG9jdW1lbnRJbXBsOjpkZXRlcm1pbmVQYXJz
ZU1vZGUoIGMKICAgICBrZERlYnVnKDYwMjApIDw8ICIgdXNpbmcgc3RyaWN0IHBhcnNlTW9kZSIg
PDwgZW5kbDsKIH0KIAotLy8gUGxlYXNlIHNlZSBpZiB0aGVyZWBzIGEgcG9zc2liaWxpdHkgdG8g
bWVyZ2UgdGhhdCBjb2RlCi0vLyB3aXRoIHRoZSBuZXh0IGZ1bmN0aW9uIGFuZCBnZXRFbGVtZW50
QnlJRCgpLgotTm9kZUltcGwgKkRvY3VtZW50SW1wbDo6ZmluZEVsZW1lbnQoIElkIGlkICkKLXsK
LSAgICBRUHRyU3RhY2s8Tm9kZUltcGw+IG5vZGVTdGFjazsKLSAgICBOb2RlSW1wbCAqY3VycmVu
dCA9IF9maXJzdDsKLQotICAgIHdoaWxlKDEpCi0gICAgewotICAgICAgICBpZighY3VycmVudCkK
LSAgICAgICAgewotICAgICAgICAgICAgaWYobm9kZVN0YWNrLmlzRW1wdHkoKSkgYnJlYWs7Ci0g
ICAgICAgICAgICBjdXJyZW50ID0gbm9kZVN0YWNrLnBvcCgpOwotICAgICAgICAgICAgY3VycmVu
dCA9IGN1cnJlbnQtPm5leHRTaWJsaW5nKCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAg
ICAgICB7Ci0gICAgICAgICAgICBpZihjdXJyZW50LT5pZCgpID09IGlkKQotICAgICAgICAgICAg
ICAgIHJldHVybiBjdXJyZW50OwotCi0gICAgICAgICAgICBOb2RlSW1wbCAqY2hpbGQgPSBjdXJy
ZW50LT5maXJzdENoaWxkKCk7Ci0gICAgICAgICAgICBpZihjaGlsZCkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBub2RlU3RhY2sucHVzaChjdXJyZW50KTsKLSAgICAgICAgICAgICAg
ICBjdXJyZW50ID0gY2hpbGQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQtPm5leHRTaWJsaW5n
KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0K
LQogTm9kZUltcGwgKkRvY3VtZW50SW1wbDo6bmV4dEZvY3VzTm9kZShOb2RlSW1wbCAqZnJvbU5v
ZGUpCiB7CiAgICAgdW5zaWduZWQgc2hvcnQgZnJvbVRhYkluZGV4OwpAQCAtMjE1MSwxMiArMTg5
OSwxMyBAQCBOb2RlSW1wbDo6SWQgRG9jdW1lbnRJbXBsOjphdHRySWQoRE9NU3RyCiAKICAgICAv
LyBub3cgbGV0cyBmaW5kIG91dCB0aGUgbmFtZXNwYWNlCiAgICAgUV9VSU5UMTYgbnMgPSBub05h
bWVzcGFjZTsKKyAgICAvKiBGSVhNRTogSnVzdCBicmVhayBuYW1lc3BhY2VkIGF0dHJpYnV0ZXMg
Zm9yIG5vdy4gIFdpbGwgZml4IGluIG5leHQgc3RhZ2Ugb2YgUXVhbGlmaWVkTmFtZSBjb252ZXJz
aW9uLgogICAgIGlmIChfbmFtZXNwYWNlVVJJKSB7CiAgICAgICAgIERPTVN0cmluZyBuc1UoX25h
bWVzcGFjZVVSSSk7CiAgICAgICAgIGludCBuc0lEID0gWG1sTmFtZXNwYWNlVGFibGU6OmdldE5h
bWVzcGFjZUlEKG5zVSwgcmVhZG9ubHkpOwogICAgICAgICBpZiAobnNJRCAhPSAtMSkKICAgICAg
ICAgICAgIG5zID0gKFFfVUlOVDE2KW5zSUQ7Ci0gICAgfQorICAgIH0qLwogICAgIAogICAgIC8v
IExvb2sgaW4gdGhlIG1fYXR0ck5hbWVzIGFycmF5IGZvciB0aGUgbmFtZQogICAgIC8vICMjIyB5
ZWFoLCB0aGlzIGlzIGxhbWUuIHVzZSBhIGRpY3Rpb25hcnkgLyBtYXAgaW5zdGVhZApAQCAtMjIw
Nyw5NSArMTk1Niw2IEBAIERPTVN0cmluZyBEb2N1bWVudEltcGw6OmF0dHJOYW1lKE5vZGVJbXAK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1Ob2RlSW1wbDo6SWQgRG9jdW1lbnRJbXBsOjp0YWdJ
ZChET01TdHJpbmdJbXBsKiBfbmFtZXNwYWNlVVJJLCBET01TdHJpbmdJbXBsICpfbmFtZSwgYm9v
bCByZWFkb25seSkKLXsKLSAgICBpZiAoIV9uYW1lKSByZXR1cm4gMDsKLSAgICAvLyBFYWNoIGRv
Y3VtZW50IG1haW50YWlucyBhIG1hcHBpbmcgb2YgdGFnIG5hbWUgLT4gaWQgZm9yIGV2ZXJ5IHRh
ZyBuYW1lIGVuY291bnRlcmVkCi0gICAgLy8gaW4gdGhlIGRvY3VtZW50LgotICAgIE5vZGVJbXBs
OjpJZCBpZCA9IDA7Ci0KLSAgICAvLyBGaXJzdCBzZWUgaWYgaXQncyBhIEhUTUwgZWxlbWVudCBu
YW1lCi0gICAgUUNvbnN0U3RyaW5nIG4oX25hbWUtPnMsIF9uYW1lLT5sKTsKLSAgICBpZiAoIV9u
YW1lc3BhY2VVUkkgfHwgIXN0cmNhc2VjbXAoX25hbWVzcGFjZVVSSSwgWEhUTUxfTkFNRVNQQUNF
KSkgewotICAgICAgICAvLyB3ZSdyZSBpbiBIVE1MIG5hbWVzcGFjZSBpZiB3ZSBrbm93IHRoZSB0
YWcuCi0gICAgICAgIC8vIHhodG1sIGlzIGxvd2VyIGNhc2UgLSBjYXNlIHNlbnNpdGl2ZSwgZWFz
eSB0byBpbXBsZW1lbnQKLSAgICAgICAgaWYgKCBodG1sTW9kZSgpID09IFhIdG1sICYmIChpZCA9
IGdldFRhZ0lEKG4uc3RyaW5nKCkuYXNjaWkoKSwgX25hbWUtPmwpKSApCi0gICAgICAgICAgICBy
ZXR1cm4gaWQ7Ci0gICAgICAgIC8vIGNvbXBhdGliaWxpdHk6IHVwcGVyIGNhc2UgLSBjYXNlIGlu
c2Vuc2l0aXZlCi0gICAgICAgIGlmICggaHRtbE1vZGUoKSAhPSBYSHRtbCAmJiAoaWQgPSBnZXRU
YWdJRChuLnN0cmluZygpLmxvd2VyKCkuYXNjaWkoKSwgX25hbWUtPmwgKSkgKQotICAgICAgICAg
ICAgcmV0dXJuIGlkOwotCi0gICAgICAgIC8vIG9rLCB0aGUgZmFzdCBwYXRoIGRpZG4ndCB3b3Jr
IG91dCwgd2UgbmVlZCB0aGUgZnVsbCBjaGVjawotICAgIH0KLQotICAgIC8vIG5vdyBsZXRzIGZp
bmQgb3V0IHRoZSBuYW1lc3BhY2UKLSAgICBRX1VJTlQxNiBucyA9IG5vTmFtZXNwYWNlOwotICAg
IGlmIChfbmFtZXNwYWNlVVJJKSB7Ci0gICAgICAgIERPTVN0cmluZyBuc1UoX25hbWVzcGFjZVVS
SSk7Ci0gICAgICAgIGludCBuc0lEID0gWG1sTmFtZXNwYWNlVGFibGU6OmdldE5hbWVzcGFjZUlE
KG5zVSwgcmVhZG9ubHkpOwotICAgICAgICBpZiAobnNJRCAhPSAtMSkKLSAgICAgICAgICAgIG5z
ID0gKFFfVUlOVDE2KW5zSUQ7Ci0gICAgfQotCi0gICAgLy8gTG9vayBpbiB0aGUgbV9lbGVtZW50
TmFtZXMgYXJyYXkgZm9yIHRoZSBuYW1lCi0gICAgLy8gIyMjIHllYWgsIHRoaXMgaXMgbGFtZS4g
dXNlIGEgZGljdGlvbmFyeSAvIG1hcCBpbnN0ZWFkCi0gICAgRE9NU3RyaW5nIG5tZShuLnN0cmlu
ZygpKTsKLSAgICAvLyBjb21wYXRpYmlsaXR5IG1vZGUgaGFzIHRvIHN0b3JlIHVwcGVyIGNhc2UK
LSAgICBpZiAoaHRtbE1vZGUoKSAhPSBYSHRtbCkgbm1lID0gbm1lLnVwcGVyKCk7Ci0gICAgZm9y
IChpZCA9IDA7IGlkIDwgbV9lbGVtZW50TmFtZUNvdW50OyBpZCsrKQotICAgICAgICBpZiAoRE9N
U3RyaW5nKG1fZWxlbWVudE5hbWVzW2lkXSkgPT0gbm1lKQotICAgICAgICAgICAgcmV0dXJuIG1h
a2VJZChucywgSURfTEFTVF9UQUcgKyAxICsgaWQpOwotCi0gICAgLy8gdW5rbm93bgotICAgIGlm
IChyZWFkb25seSkgcmV0dXJuIDA7Ci0KLSAgICAvLyBOYW1lIG5vdCBmb3VuZCBpbiBtX2VsZW1l
bnROYW1lcywgc28gbGV0J3MgYWRkIGl0Ci0gICAgaWYgKG1fZWxlbWVudE5hbWVDb3VudCsxID4g
bV9lbGVtZW50TmFtZUFsbG9jKSB7Ci0gICAgICAgIG1fZWxlbWVudE5hbWVBbGxvYyArPSAxMDA7
Ci0gICAgICAgIERPTVN0cmluZ0ltcGwgKipuZXdOYW1lcyA9IG5ldyBET01TdHJpbmdJbXBsKiBb
bV9lbGVtZW50TmFtZUFsbG9jXTsKLSAgICAgICAgLy8gIyMjIHllYWgsIHRoaXMgaXMgbGFtZS4g
dXNlIGEgZGljdGlvbmFyeSAvIG1hcCBpbnN0ZWFkCi0gICAgICAgIGlmIChtX2VsZW1lbnROYW1l
cykgewotICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgaTsKLSAgICAgICAgICAgIGZvciAoaSA9
IDA7IGkgPCBtX2VsZW1lbnROYW1lQ291bnQ7IGkrKykKLSAgICAgICAgICAgICAgICBuZXdOYW1l
c1tpXSA9IG1fZWxlbWVudE5hbWVzW2ldOwotICAgICAgICAgICAgZGVsZXRlIFtdIG1fZWxlbWVu
dE5hbWVzOwotICAgICAgICB9Ci0gICAgICAgIG1fZWxlbWVudE5hbWVzID0gbmV3TmFtZXM7Ci0g
ICAgfQotCi0gICAgaWQgPSBtX2VsZW1lbnROYW1lQ291bnQrKzsKLSAgICBtX2VsZW1lbnROYW1l
c1tpZF0gPSBubWUuaW1wbGVtZW50YXRpb24oKTsKLSAgICBtX2VsZW1lbnROYW1lc1tpZF0tPnJl
ZigpOwotCi0gICAgcmV0dXJuIG1ha2VJZChucywgSURfTEFTVF9UQUcgKyAxICsgaWQpOwotfQot
Ci1ET01TdHJpbmcgRG9jdW1lbnRJbXBsOjp0YWdOYW1lKE5vZGVJbXBsOjpJZCBfaWQpIGNvbnN0
Ci17Ci0gICAgaWYgKGxvY2FsTmFtZVBhcnQoX2lkKSA+IElEX0xBU1RfVEFHKQotICAgICAgICBy
ZXR1cm4gbV9lbGVtZW50TmFtZXNbbG9jYWxOYW1lUGFydChfaWQpIC0gKElEX0xBU1RfVEFHICsg
MSldOwotICAgIGVsc2UgewotICAgICAgICAvLyAjIyMgcHV0IHRoZW0gaW4gYSBjYWNoZQotICAg
ICAgICBpZiAoaHRtbE1vZGUoKSA9PSBYSHRtbCkKLSAgICAgICAgICAgIHJldHVybiBnZXRUYWdO
YW1lKF9pZCkubG93ZXIoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIGdldFRh
Z05hbWUoX2lkKTsKLSAgICB9Ci19Ci0KLQotRE9NU3RyaW5nSW1wbCogRG9jdW1lbnRJbXBsOjpu
YW1lc3BhY2VVUkkoTm9kZUltcGw6OklkIF9pZCkgY29uc3QKLXsKLSAgICBpZiAoX2lkIDw9IElE
X0xBU1RfVEFHKQotICAgICAgICByZXR1cm4gaHRtbE1vZGUoKSA9PSBYSHRtbCA/IFhtbE5hbWVz
cGFjZVRhYmxlOjpnZXROYW1lc3BhY2VVUkkoeGh0bWxOYW1lc3BhY2UpLmltcGxlbWVudGF0aW9u
KCkgOiAwOwotCi0gICAgdW5zaWduZWQgc2hvcnQgbnMgPSBfaWQgPj4gMTY7Ci0KLSAgICBpZiAo
IW5zKSByZXR1cm4gMDsKLQotICAgIHJldHVybiBYbWxOYW1lc3BhY2VUYWJsZTo6Z2V0TmFtZXNw
YWNlVVJJKG5zKS5pbXBsZW1lbnRhdGlvbigpOwotfQotCiBTdHlsZVNoZWV0TGlzdEltcGwqIERv
Y3VtZW50SW1wbDo6c3R5bGVTaGVldHMoKQogewogICAgIHJldHVybiBtX3N0eWxlU2hlZXRzOwpA
QCAtMjQxOSwxMSArMjA3OSwxMSBAQCB2b2lkIERvY3VtZW50SW1wbDo6cmVjYWxjU3R5bGVTZWxl
Y3RvcigpCiAgICAgICAgICAgICB9CiAKICAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChuLT5p
c0hUTUxFbGVtZW50KCkgJiYgKG4tPmlkKCkgPT0gSURfTElOSyB8fCBuLT5pZCgpID09IElEX1NU
WUxFKSkgewotICAgICAgICAgICAgRWxlbWVudEltcGwgKmUgPSBzdGF0aWNfY2FzdDxFbGVtZW50
SW1wbCAqPihuKTsKKyAgICAgICAgZWxzZSBpZiAobi0+aXNIVE1MRWxlbWVudCgpICYmIChuLT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6bGluaygpKSB8fCBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
c3R5bGUoKSkpKSB7CisgICAgICAgICAgICBIVE1MRWxlbWVudEltcGwgKmUgPSBzdGF0aWNfY2Fz
dDxIVE1MRWxlbWVudEltcGwgKj4obik7CiAgICAgICAgICAgICBRU3RyaW5nIHRpdGxlID0gZS0+
Z2V0QXR0cmlidXRlKCBBVFRSX1RJVExFICkuc3RyaW5nKCk7CiAgICAgICAgICAgICBib29sIGVu
YWJsZWRWaWFTY3JpcHQgPSBmYWxzZTsKLSAgICAgICAgICAgIGlmIChuLT5pZCgpID09IElEX0xJ
TkspIHsKKyAgICAgICAgICAgIGlmIChlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpsaW5rKCkp
KSB7CiAgICAgICAgICAgICAgICAgLy8gPExJTks+IGVsZW1lbnQKICAgICAgICAgICAgICAgICBI
VE1MTGlua0VsZW1lbnRJbXBsKiBsID0gc3RhdGljX2Nhc3Q8SFRNTExpbmtFbGVtZW50SW1wbCo+
KG4pOwogICAgICAgICAgICAgICAgIGlmIChsLT5pc0xvYWRpbmcoKSB8fCBsLT5pc0Rpc2FibGVk
KCkpCkBAIC0yNDM1LDcgKzIwOTUsNyBAQCB2b2lkIERvY3VtZW50SW1wbDo6cmVjYWxjU3R5bGVT
ZWxlY3RvcigpCiAKICAgICAgICAgICAgIC8vIEdldCB0aGUgY3VycmVudCBwcmVmZXJyZWQgc3R5
bGVzZXQuICBUaGlzIGlzIHRoZQogICAgICAgICAgICAgLy8gc2V0IG9mIHNoZWV0cyB0aGF0IHdp
bGwgYmUgZW5hYmxlZC4KLSAgICAgICAgICAgIGlmICggbi0+aWQoKSA9PSBJRF9MSU5LICkKKyAg
ICAgICAgICAgIGlmIChlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpsaW5rKCkpKQogICAgICAg
ICAgICAgICAgIHNoZWV0ID0gc3RhdGljX2Nhc3Q8SFRNTExpbmtFbGVtZW50SW1wbCo+KG4pLT5z
aGVldCgpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIC8vIDxTVFlMRT4gZWxl
bWVudApAQCAtMjQ1Miw3ICsyMTEyLDcgQEAgdm9pZCBEb2N1bWVudEltcGw6OnJlY2FsY1N0eWxl
U2VsZWN0b3IoKQogICAgICAgICAgICAgICAgICAgICAvLyB1cyBhcyB0aGUgcHJlZmVycmVkIHNl
dC4gIE90aGVyd2lzZSwganVzdCBpZ25vcmUKICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyBz
aGVldC4KICAgICAgICAgICAgICAgICAgICAgUVN0cmluZyByZWwgPSBlLT5nZXRBdHRyaWJ1dGUo
IEFUVFJfUkVMICkuc3RyaW5nKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChuLT5pZCgpID09
IElEX1NUWUxFIHx8ICFyZWwuY29udGFpbnMoImFsdGVybmF0ZSIpKQorICAgICAgICAgICAgICAg
ICAgICBpZiAoZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6c3R5bGUoKSkgfHwgIXJlbC5jb250
YWlucygiYWx0ZXJuYXRlIikpCiAgICAgICAgICAgICAgICAgICAgICAgICBtX3ByZWZlcnJlZFN0
eWxlc2hlZXRTZXQgPSB2aWV3KCktPnBhcnQoKS0+ZC0+bV9zaGVldFVzZWQgPSB0aXRsZTsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgCkBAIC0yNDcxLDcgKzIxMzEs
NyBAQCB2b2lkIERvY3VtZW50SW1wbDo6cmVjYWxjU3R5bGVTZWxlY3RvcigpCiAgICAgCiAgICAg
ICAgIC8vIEZvciBIVE1MIGRvY3VtZW50cywgc3R5bGVzaGVldHMgYXJlIG5vdCBhbGxvd2VkIHdp
dGhpbi9hZnRlciB0aGUgPEJPRFk+IHRhZy4gU28gd2UKICAgICAgICAgLy8gY2FuIHN0b3Agc2Vh
cmNoaW5nIGhlcmUuCi0gICAgICAgIGlmIChpc0hUTUxEb2N1bWVudCgpICYmIG4tPmlkKCkgPT0g
SURfQk9EWSkKKyAgICAgICAgaWYgKGlzSFRNTERvY3VtZW50KCkgJiYgbi0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OmJvZHkoKSkpCiAgICAgICAgICAgICBicmVhazsKICAgICB9CiAKSW5kZXg6IGto
dG1sL3htbC9kb21fZG9jaW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJD
b3JlL2todG1sL3htbC9kb21fZG9jaW1wbC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjExNQpk
aWZmIC11IC1wIC1yMS4xMTUga2h0bWwveG1sL2RvbV9kb2NpbXBsLmgKLS0tIGtodG1sL3htbC9k
b21fZG9jaW1wbC5oCTIyIEp1biAyMDA1IDE4OjIyOjAyIC0wMDAwCTEuMTE1CisrKyBraHRtbC94
bWwvZG9tX2RvY2ltcGwuaAk3IEp1bCAyMDA1IDA1OjU5OjI5IC0wMDAwCkBAIC0xNzcsNyArMTc3
LDcgQEAgcHVibGljOgogCiAgICAgRE9NSW1wbGVtZW50YXRpb25JbXBsICppbXBsZW1lbnRhdGlv
bigpIGNvbnN0OwogICAgIHZpcnR1YWwgRWxlbWVudEltcGwgKmRvY3VtZW50RWxlbWVudCgpIGNv
bnN0OwotICAgIHZpcnR1YWwgRWxlbWVudEltcGwgKmNyZWF0ZUVsZW1lbnQgKCBjb25zdCBET01T
dHJpbmcgJnRhZ05hbWUsIGludCAmZXhjZXB0aW9uY29kZSApOworICAgIHZpcnR1YWwgRWxlbWVu
dEltcGwgKmNyZWF0ZUVsZW1lbnQoY29uc3QgRE9NU3RyaW5nICZ0YWdOYW1lLCBpbnQgJmV4Y2Vw
dGlvbmNvZGUpOwogICAgIERvY3VtZW50RnJhZ21lbnRJbXBsICpjcmVhdGVEb2N1bWVudEZyYWdt
ZW50ICgpOwogICAgIFRleHRJbXBsICpjcmVhdGVUZXh0Tm9kZSAoIGNvbnN0IERPTVN0cmluZyAm
ZGF0YSApOwogICAgIENvbW1lbnRJbXBsICpjcmVhdGVDb21tZW50ICggY29uc3QgRE9NU3RyaW5n
ICZkYXRhICk7CkBAIC0xODgsNyArMTg4LDcgQEAgcHVibGljOgogICAgIEF0dHJJbXBsICpjcmVh
dGVBdHRyaWJ1dGVOUyhjb25zdCBET01TdHJpbmcgJm5hbWVzcGFjZVVSSSwgY29uc3QgRE9NU3Ry
aW5nICZxdWFsaWZpZWROYW1lLCBpbnQgJmV4Y2VwdGlvbik7CiAgICAgRW50aXR5UmVmZXJlbmNl
SW1wbCAqY3JlYXRlRW50aXR5UmVmZXJlbmNlICggY29uc3QgRE9NU3RyaW5nICZuYW1lICk7CiAg
ICAgTm9kZUltcGwgKmltcG9ydE5vZGUoIE5vZGVJbXBsICppbXBvcnRlZE5vZGUsIGJvb2wgZGVl
cCwgaW50ICZleGNlcHRpb25jb2RlICk7Ci0gICAgdmlydHVhbCBFbGVtZW50SW1wbCAqY3JlYXRl
RWxlbWVudE5TICggY29uc3QgRE9NU3RyaW5nICZfbmFtZXNwYWNlVVJJLCBjb25zdCBET01TdHJp
bmcgJl9xdWFsaWZpZWROYW1lLCBpbnQgJmV4Y2VwdGlvbmNvZGUgKTsKKyAgICB2aXJ0dWFsIEVs
ZW1lbnRJbXBsICpjcmVhdGVFbGVtZW50TlMoY29uc3QgRE9NU3RyaW5nICZfbmFtZXNwYWNlVVJJ
LCBjb25zdCBET01TdHJpbmcgJl9xdWFsaWZpZWROYW1lLCBpbnQgJmV4Y2VwdGlvbmNvZGUpOwog
ICAgIEVsZW1lbnRJbXBsICpnZXRFbGVtZW50QnlJZCAoIGNvbnN0IERPTVN0cmluZyAmZWxlbWVu
dElkICkgY29uc3Q7CiAgICAgRWxlbWVudEltcGwgKmVsZW1lbnRGcm9tUG9pbnQgKCBjb25zdCBp
bnQgX3gsIGNvbnN0IGludCBfeSApIGNvbnN0OwogCkBAIC0yMTgsOSArMjE4LDYgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgYm9vbCBpc0RvY3VtZW50Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7
IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNIVE1MRG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQogCi0gICAgRWxlbWVudEltcGwgKmNyZWF0ZUhUTUxFbGVtZW50KGNvbnN0IERPTVN0cmlu
ZyAmdGFnTmFtZSwgaW50ICZleGNlcHRpb25jb2RlKTsKLSAgICBFbGVtZW50SW1wbCAqY3JlYXRl
SFRNTEVsZW1lbnQodW5zaWduZWQgc2hvcnQgdGFnSUQpOwotCiAgICAga2h0bWw6OkNTU1N0eWxl
U2VsZWN0b3IgKnN0eWxlU2VsZWN0b3IoKSB7IHJldHVybiBtX3N0eWxlU2VsZWN0b3I7IH0KIAog
ICAgIEVsZW1lbnRJbXBsICpEb2N1bWVudEltcGw6OmdldEVsZW1lbnRCeUFjY2Vzc0tleSggY29u
c3QgRE9NU3RyaW5nICZrZXkgKTsKQEAgLTM4Nyw5ICszODQsNiBAQCBwdWJsaWM6CiAgICAgdm9p
ZCByZXNldFZpc2l0ZWRMaW5rQ29sb3IoKTsKICAgICB2b2lkIHJlc2V0QWN0aXZlTGlua0NvbG9y
KCk7CiAgICAgCi0gICAgLy8gaW50ZXJuYWwKLSAgICBOb2RlSW1wbCAqZmluZEVsZW1lbnQoIElk
IGlkICk7Ci0KICAgICBib29sIHByZXBhcmVNb3VzZUV2ZW50KCBib29sIHJlYWRvbmx5LCBpbnQg
eCwgaW50IHksIE1vdXNlRXZlbnQgKmV2ICk7CiAKICAgICB2aXJ0dWFsIGJvb2wgY2hpbGRBbGxv
d2VkKCBOb2RlSW1wbCAqbmV3Q2hpbGQgKTsKQEAgLTM5OSwxNiArMzkzLDkgQEAgcHVibGljOgog
ICAgIC8vICMjIyB0aGluayBhYm91dCBpbXBsZW1lbnRpbmcgcmVmJ2NvdW50aW5nIGZvciB0aGUg
aWQncwogICAgIC8vIGluIG9yZGVyIHRvIGJlIGFibGUgdG8gcmVhc3NpZ24gdGhvc2UgdGhhdCBh
cmUgbm8gbG9uZ2VyIGluIHVzZQogICAgIC8vIChjb3VsZCBtYWtlIHByb2JsZW1zIHdoZW4gaXQg
aXMgc3RpbGwga2VwdCBzb21ld2hlcmUgYXJvdW5kLCBpLmUuIHN0eWxlc2VsZWN0b3IpCi0gICAg
Tm9kZUltcGw6OklkIHRhZ0lkKERPTVN0cmluZ0ltcGwqIF9uYW1lc3BhY2VVUkksIERPTVN0cmlu
Z0ltcGwgKl9uYW1lLCBib29sIHJlYWRvbmx5KTsKLSAgICBET01TdHJpbmcgdGFnTmFtZShOb2Rl
SW1wbDo6SWQgX2lkKSBjb25zdDsKLQogICAgIE5vZGVJbXBsOjpJZCBhdHRySWQoRE9NU3RyaW5n
SW1wbCogX25hbWVzcGFjZVVSSSwgRE9NU3RyaW5nSW1wbCAqX25hbWUsIGJvb2wgcmVhZG9ubHkp
OwogICAgIERPTVN0cmluZyBhdHRyTmFtZShOb2RlSW1wbDo6SWQgX2lkKSBjb25zdDsKIAotICAg
IC8vIHRoZSBuYW1lc3BhY2UgdXJpIGlzIG1hcHBlZCB0byB0aGUgc2FtZSBpZCBmb3IgYm90aAot
ICAgIC8vIHRhZ25hbWVzIGFzIHdlbGwgYXMgYXR0cmlidXRlcy4KLSAgICBET01TdHJpbmdJbXBs
KiBuYW1lc3BhY2VVUkkoTm9kZUltcGw6OklkIF9pZCkgY29uc3Q7Ci0KICAgICBTdHlsZVNoZWV0
TGlzdEltcGwqIHN0eWxlU2hlZXRzKCk7CiAKICAgICAvKiBOZXdseSBwcm9wb3NlZCBDU1MzIG1l
Y2hhbmlzbSBmb3Igc2VsZWN0aW5nIGFsdGVybmF0ZQpJbmRleDoga2h0bWwveG1sL2RvbV9lbGVt
ZW50aW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwv
eG1sL2RvbV9lbGVtZW50aW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNjcKZGlmZiAt
dSAtcCAtcjEuNjcga2h0bWwveG1sL2RvbV9lbGVtZW50aW1wbC5jcHAKLS0tIGtodG1sL3htbC9k
b21fZWxlbWVudGltcGwuY3BwCTExIE1heSAyMDA1IDA1OjQ5OjM1IC0wMDAwCTEuNjcKKysrIGto
dG1sL3htbC9kb21fZWxlbWVudGltcGwuY3BwCTcgSnVsIDIwMDUgMDU6NTk6MzEgLTAwMDAKQEAg
LTMzLDcgKzMzLDYgQEAKIAogI2luY2x1ZGUgImtodG1sX3BhcnQuaCIKIAotI2luY2x1ZGUgImh0
bWwvZHRkLmgiCiAjaW5jbHVkZSAiaHRtbC9odG1scGFyc2VyLmgiCiAKICNpbmNsdWRlICJyZW5k
ZXJpbmcvcmVuZGVyX2NhbnZhcy5oIgpAQCAtOTAsMTggKzg5LDE4IEBAIHVuc2lnbmVkIHNob3J0
IEF0dHJJbXBsOjpub2RlVHlwZSgpIGNvbnMKICAgICByZXR1cm4gTm9kZTo6QVRUUklCVVRFX05P
REU7CiB9CiAKLURPTVN0cmluZyBBdHRySW1wbDo6cHJlZml4KCkgY29uc3QKK2NvbnN0IEF0b21p
Y1N0cmluZyYgQXR0ckltcGw6OnByZWZpeCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fYXR0cmli
dXRlLT5wcmVmaXgoKTsKIH0KIAotdm9pZCBBdHRySW1wbDo6c2V0UHJlZml4KGNvbnN0IERPTVN0
cmluZyAmX3ByZWZpeCwgaW50ICZleGNlcHRpb25jb2RlICkKK3ZvaWQgQXR0ckltcGw6OnNldFBy
ZWZpeChjb25zdCBBdG9taWNTdHJpbmcgJl9wcmVmaXgsIGludCAmZXhjZXB0aW9uY29kZSApCiB7
CiAgICAgY2hlY2tTZXRQcmVmaXgoX3ByZWZpeCwgZXhjZXB0aW9uY29kZSk7CiAgICAgaWYgKGV4
Y2VwdGlvbmNvZGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fYXR0cmlidXRlLT5zZXRQcmVm
aXgoX3ByZWZpeC5pbXBsZW1lbnRhdGlvbigpKTsKKyAgICBtX2F0dHJpYnV0ZS0+c2V0UHJlZml4
KF9wcmVmaXgpOwogfQogCiBET01TdHJpbmcgQXR0ckltcGw6Om5vZGVWYWx1ZSgpIGNvbnN0CkBA
IC0yMDIsMTEgKzIwMSwxMCBAQCBET01TdHJpbmcgQXR0ckltcGw6OnZhbHVlKCkgY29uc3QKIAog
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogCi1FbGVtZW50SW1wbDo6RWxlbWVudEltcGwoRG9jdW1lbnRQ
dHIgKmRvYykKLSAgICA6IENvbnRhaW5lck5vZGVJbXBsKGRvYykKK0VsZW1lbnRJbXBsOjpFbGVt
ZW50SW1wbChjb25zdCBRdWFsaWZpZWROYW1lJiBxTmFtZSwgRG9jdW1lbnRQdHIgKmRvYykKKyAg
ICA6IENvbnRhaW5lck5vZGVJbXBsKGRvYyksIG1fdGFnTmFtZShxTmFtZSkKIHsKICAgICBuYW1l
ZEF0dHJNYXAgPSAwOwotICAgIG1fcHJlZml4ID0gMDsKIH0KIAogRWxlbWVudEltcGw6On5FbGVt
ZW50SW1wbCgpCkBAIC0yMTUsOSArMjEzLDIyIEBAIEVsZW1lbnRJbXBsOjp+RWxlbWVudEltcGwo
KQogICAgICAgICBuYW1lZEF0dHJNYXAtPmRldGFjaEZyb21FbGVtZW50KCk7CiAgICAgICAgIG5h
bWVkQXR0ck1hcC0+ZGVyZWYoKTsKICAgICB9Cit9CiAKLSAgICBpZiAobV9wcmVmaXgpCi0gICAg
ICAgIG1fcHJlZml4LT5kZXJlZigpOworTm9kZUltcGwgKkVsZW1lbnRJbXBsOjpjbG9uZU5vZGUo
Ym9vbCBkZWVwKQoreworICAgIGludCBleGNlcHRpb25Db2RlID0gMDsKKyAgICBFbGVtZW50SW1w
bCAqY2xvbmUgPSBnZXREb2N1bWVudCgpLT5jcmVhdGVFbGVtZW50TlMobmFtZXNwYWNlVVJJKCks
IG5vZGVOYW1lKCksIGV4Y2VwdGlvbkNvZGUpOworICAgIGFzc2VydCghZXhjZXB0aW9uQ29kZSk7
CisgICAgCisgICAgLy8gY2xvbmUgYXR0cmlidXRlcworICAgIGlmIChuYW1lZEF0dHJNYXApCisg
ICAgICAgICpjbG9uZS0+YXR0cmlidXRlcygpID0gKm5hbWVkQXR0ck1hcDsKKworICAgIGlmIChk
ZWVwKQorICAgICAgICBjbG9uZUNoaWxkTm9kZXMoY2xvbmUpOworCisgICAgcmV0dXJuIGNsb25l
OwogfQogCiB2b2lkIEVsZW1lbnRJbXBsOjpyZW1vdmVBdHRyaWJ1dGUoIE5vZGVJbXBsOjpJZCBp
ZCwgaW50ICZleGNlcHRpb25jb2RlICkKQEAgLTM1MSwzNiArMzYyLDI0IEBAIHZvaWQgRWxlbWVu
dEltcGw6OnNldEF0dHJpYnV0ZU1hcCggTmFtZWQKIGJvb2wgRWxlbWVudEltcGw6Omhhc0F0dHJp
YnV0ZXMoKSBjb25zdAogewogICAgIHVwZGF0ZVN0eWxlQXR0cmlidXRlSWZOZWVkZWQoKTsKLQog
ICAgIHJldHVybiBuYW1lZEF0dHJNYXAgJiYgbmFtZWRBdHRyTWFwLT5sZW5ndGgoKSA+IDA7CiB9
CiAKIERPTVN0cmluZyBFbGVtZW50SW1wbDo6bm9kZU5hbWUoKSBjb25zdAogewotICAgIHJldHVy
biB0YWdOYW1lKCk7Ci19Ci0KLURPTVN0cmluZyBFbGVtZW50SW1wbDo6dGFnTmFtZSgpIGNvbnN0
Ci17Ci0gICAgRE9NU3RyaW5nIHRuID0gZ2V0RG9jdW1lbnQoKS0+dGFnTmFtZShpZCgpKTsKLQot
ICAgIGlmIChtX3ByZWZpeCkKLSAgICAgICAgcmV0dXJuIERPTVN0cmluZyhtX3ByZWZpeCkgKyAi
OiIgKyB0bjsKLQorICAgIERPTVN0cmluZyB0biA9IG1fdGFnTmFtZS5sb2NhbE5hbWUoKTsKKyAg
ICBpZiAobV90YWdOYW1lLmhhc1ByZWZpeCgpKQorICAgICAgICByZXR1cm4gRE9NU3RyaW5nKG1f
dGFnTmFtZS5wcmVmaXgoKSkgKyAiOiIgKyB0bjsKICAgICByZXR1cm4gdG47CiB9CiAKLXZvaWQg
RWxlbWVudEltcGw6OnNldFByZWZpeCggY29uc3QgRE9NU3RyaW5nICZfcHJlZml4LCBpbnQgJmV4
Y2VwdGlvbmNvZGUgKQordm9pZCBFbGVtZW50SW1wbDo6c2V0UHJlZml4KGNvbnN0IEF0b21pY1N0
cmluZyAmX3ByZWZpeCwgaW50ICZleGNlcHRpb25jb2RlKQogewogICAgIGNoZWNrU2V0UHJlZml4
KF9wcmVmaXgsIGV4Y2VwdGlvbmNvZGUpOwogICAgIGlmIChleGNlcHRpb25jb2RlKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBpZiAobV9wcmVmaXgpCi0gICAgICAgIG1fcHJlZml4LT5kZXJlZigp
OwotICAgIG1fcHJlZml4ID0gX3ByZWZpeC5pbXBsZW1lbnRhdGlvbigpOwotICAgIGlmIChtX3By
ZWZpeCkKLSAgICAgICAgbV9wcmVmaXgtPnJlZigpOworICAgIG1fdGFnTmFtZS5zZXRQcmVmaXgo
X3ByZWZpeCk7CiB9CiAKIHZvaWQgRWxlbWVudEltcGw6OmNyZWF0ZUF0dHJpYnV0ZU1hcCgpIGNv
bnN0CkBAIC01MjEsMTggKzUyMCw2IEBAIHZvaWQgRWxlbWVudEltcGw6OnJlY2FsY1N0eWxlKCBT
dHlsZUNoYW4KICAgICBzZXRIYXNDaGFuZ2VkQ2hpbGQoIGZhbHNlICk7CiB9CiAKLS8vIERPTSBT
ZWN0aW9uIDEuMS4xCi1ib29sIEVsZW1lbnRJbXBsOjpjaGlsZEFsbG93ZWQoIE5vZGVJbXBsICpu
ZXdDaGlsZCApCi17Ci0gICAgaWYgKCFjaGlsZFR5cGVBbGxvd2VkKG5ld0NoaWxkLT5ub2RlVHlw
ZSgpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gRm9yIFhNTCBkb2N1bWVudHMs
IHdlIGFyZSBub24tdmFsaWRhdGluZyBhbmQgZG8gbm90IGNoZWNrIGFnYWluc3QgYSBEVEQsIGV2
ZW4gZm9yIEhUTUwgZWxlbWVudHMuCi0gICAgaWYgKGdldERvY3VtZW50KCktPmlzSFRNTERvY3Vt
ZW50KCkpCi0gICAgICAgIHJldHVybiBjaGVja0NoaWxkKGlkKCksIG5ld0NoaWxkLT5pZCgpLCAh
Z2V0RG9jdW1lbnQoKS0+aW5Db21wYXRNb2RlKCkpOwotICAgIHJldHVybiB0cnVlOwotfQotCiBi
b29sIEVsZW1lbnRJbXBsOjpjaGlsZFR5cGVBbGxvd2VkKCB1bnNpZ25lZCBzaG9ydCB0eXBlICkK
IHsKICAgICBzd2l0Y2ggKHR5cGUpIHsKQEAgLTU2OSw3ICs1NTYsNyBAQCB2b2lkIEVsZW1lbnRJ
bXBsOjpkaXNwYXRjaEF0dHJBZGRpdGlvbkV2CiAKIERPTVN0cmluZyBFbGVtZW50SW1wbDo6b3Bl
blRhZ1N0YXJ0VG9TdHJpbmcoKSBjb25zdAogewotICAgIERPTVN0cmluZyByZXN1bHQgPSBET01T
dHJpbmcoIjwiKSArIHRhZ05hbWUoKTsKKyAgICBET01TdHJpbmcgcmVzdWx0ID0gRE9NU3RyaW5n
KCI8IikgKyBub2RlTmFtZSgpOwogCiAgICAgTmFtZWRBdHRyTWFwSW1wbCAqYXR0ck1hcCA9IGF0
dHJpYnV0ZXModHJ1ZSk7CiAKQEAgLTYxMCw3ICs1OTcsNyBAQCBET01TdHJpbmcgRWxlbWVudElt
cGw6OnRvU3RyaW5nKCkgY29uc3QKIAl9CiAKIAlyZXN1bHQgKz0gIjwvIjsKLQlyZXN1bHQgKz0g
dGFnTmFtZSgpOworCXJlc3VsdCArPSBub2RlTmFtZSgpOwogCXJlc3VsdCArPSAiPiI7CiAgICAg
fSBlbHNlIHsKIAlyZXN1bHQgKz0gIiAvPiI7CkBAIC03NTksMTIgKzc0Niw3IEBAIENTU1N0eWxl
RGVjbGFyYXRpb25JbXBsICpFbGVtZW50SW1wbDo6c3QKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQog
Ci1YTUxFbGVtZW50SW1wbDo6WE1MRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgRE9NU3Ry
aW5nSW1wbCAqX3RhZ05hbWUpCi0gICAgOiBFbGVtZW50SW1wbChkb2MpCi17Ci0gICAgbV9pZCA9
IGRvYy0+ZG9jdW1lbnQoKS0+dGFnSWQoMCAvKiBubyBuYW1lc3BhY2UgKi8sIF90YWdOYW1lLCAg
ZmFsc2UgLyogYWxsb2NhdGUgKi8pOwotfQotCisvKgogWE1MRWxlbWVudEltcGw6OlhNTEVsZW1l
bnRJbXBsKERvY3VtZW50UHRyICpkb2MsIERPTVN0cmluZ0ltcGwgKl9xdWFsaWZpZWROYW1lLCBE
T01TdHJpbmdJbXBsICpfbmFtZXNwYWNlVVJJKQogICAgIDogRWxlbWVudEltcGwoZG9jKQogewpA
QCAtNzgwLDQ5ICs3NjIsMjQgQEAgWE1MRWxlbWVudEltcGw6OlhNTEVsZW1lbnRJbXBsKERvY3Vt
ZW50UAogICAgICAgICBET01TdHJpbmdJbXBsKiBsb2NhbE5hbWUgPSBfcXVhbGlmaWVkTmFtZS0+
Y29weSgpOwogICAgICAgICBsb2NhbE5hbWUtPnJlZigpOwogICAgICAgICBsb2NhbE5hbWUtPnJl
bW92ZSgwLGNvbG9ucG9zKzEpOwotICAgICAgICBtX2lkID0gZG9jLT5kb2N1bWVudCgpLT50YWdJ
ZChfbmFtZXNwYWNlVVJJLCBsb2NhbE5hbWUsIGZhbHNlIC8qIGFsbG9jYXRlICovKTsKKyAgICAg
ICAgbV9pZCA9IGRvYy0+ZG9jdW1lbnQoKS0+dGFnSWQoX25hbWVzcGFjZVVSSSwgbG9jYWxOYW1l
LCBmYWxzZSk7CiAgICAgICAgIGxvY2FsTmFtZS0+ZGVyZWYoKTsKLSAgICAgICAgbV9wcmVmaXgg
PSBfcXVhbGlmaWVkTmFtZS0+Y29weSgpOwotICAgICAgICBtX3ByZWZpeC0+cmVmKCk7Ci0gICAg
ICAgIG1fcHJlZml4LT50cnVuY2F0ZShjb2xvbnBvcyk7CisgICAgICAgIAorICAgICAgICAvLyBG
SVhNRTogVGhpcyBpcyBhIHRlbXBvcmFyeSBzaXR1YXRpb24gZm9yIHN0YWdlIG9uZSBvZiB0aGUg
UXVhbGlmaWVkTmFtZSBwYXRjaC4gIFRoaXMgaXMgYWxzbyBhIHJlYWxseSBzdHVwaWQgd2F5IHRv
CisgICAgICAgIC8vIGhhdmUgdG8gaGFuZGxlIHRoZSBwcmVmaXguICBXYXkgdG9vIG11Y2ggY29w
eWluZy4gIFdlIHNob3VsZCBtYWtlIHN1cmUgdGhlIFhNTCB0b2tlbml6ZXIgaGFzIGRvbmUgdGhl
IHNwbGl0CisgICAgICAgIC8vIGFscmVhZHkgaW50byBwcmVmaXggYW5kIGxvY2FsTmFtZS4KKyAg
ICAgICAgRE9NU3RyaW5nSW1wbCogcHJlZml4ID0gX3F1YWxpZmllZE5hbWUtPmNvcHkoKTsKKyAg
ICAgICAgcHJlZml4LT5yZWYoKTsKKyAgICAgICAgcHJlZml4LT50cnVuY2F0ZShjb2xvbnBvcyk7
CisgICAgICAgIG1fdGFnTmFtZSA9IFF1YWxpZmllZE5hbWUocHJlZml4LCBudWxsQXRvbSwgbnVs
bEF0b20pOworICAgICAgICBwcmVmaXgtPmRlcmVmKCk7CiAgICAgfQotICAgIGVsc2UgeworICAg
IGVsc2UKICAgICAgICAgLy8gbm8gcHJlZml4Ci0gICAgICAgIG1faWQgPSBkb2MtPmRvY3VtZW50
KCktPnRhZ0lkKF9uYW1lc3BhY2VVUkksIF9xdWFsaWZpZWROYW1lLCBmYWxzZSAvKiBhbGxvY2F0
ZSAqLyk7Ci0gICAgICAgIG1fcHJlZml4ID0gMDsKLSAgICB9CisgICAgICAgIG1faWQgPSBkb2Mt
PmRvY3VtZW50KCktPnRhZ0lkKF9uYW1lc3BhY2VVUkksIF9xdWFsaWZpZWROYW1lLCBmYWxzZSk7
CiB9CiAKLVhNTEVsZW1lbnRJbXBsOjp+WE1MRWxlbWVudEltcGwoKQotewotfQotCi1ET01TdHJp
bmcgWE1MRWxlbWVudEltcGw6OmxvY2FsTmFtZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldERv
Y3VtZW50KCktPnRhZ05hbWUobV9pZCk7Ci19Ci0KLURPTVN0cmluZyBYTUxFbGVtZW50SW1wbDo6
bmFtZXNwYWNlVVJJKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0RG9jdW1lbnQoKS0+bmFtZXNw
YWNlVVJJKG1faWQpOwotfQotCi1Ob2RlSW1wbCAqWE1MRWxlbWVudEltcGw6OmNsb25lTm9kZSAo
IGJvb2wgZGVlcCApCi17Ci0gICAgLy8gIyMjIHdlIGxvc2UgbmFtZXNwYWNlIGhlcmUgRklYTUUK
LSAgICAvLyBzaG91bGQgcGFzcyBpZCBhcm91bmQKLSAgICBYTUxFbGVtZW50SW1wbCAqY2xvbmUg
PSBuZXcgWE1MRWxlbWVudEltcGwoZG9jUHRyKCksIGdldERvY3VtZW50KCktPnRhZ05hbWUobV9p
ZCkuaW1wbGVtZW50YXRpb24oKSk7Ci0gICAgY2xvbmUtPm1faWQgPSBtX2lkOwotCi0gICAgLy8g
Y2xvbmUgYXR0cmlidXRlcwotICAgIGlmIChuYW1lZEF0dHJNYXApCi0gICAgICAgICpjbG9uZS0+
YXR0cmlidXRlcyhmYWxzZSkgPSAqbmFtZWRBdHRyTWFwOwotCi0gICAgaWYgKGRlZXApCi0gICAg
ICAgIGNsb25lQ2hpbGROb2RlcyhjbG9uZSk7Ci0KLSAgICByZXR1cm4gY2xvbmU7Ci19CisqLwog
CiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTEyNzAsOCArMTIyNyw4IEBAIHZvaWQgTmFtZWRN
YXBwZWRBdHRyTWFwSW1wbDo6cGFyc2VDbGFzc0EKICAgICB9CiB9CiAKLVN0eWxlZEVsZW1lbnRJ
bXBsOjpTdHlsZWRFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAgIDogRWxlbWVudElt
cGwoZG9jKQorU3R5bGVkRWxlbWVudEltcGw6OlN0eWxlZEVsZW1lbnRJbXBsKGNvbnN0IFF1YWxp
ZmllZE5hbWUmIG5hbWUsIERvY3VtZW50UHRyICpkb2MpCisgICAgOiBFbGVtZW50SW1wbChuYW1l
LCBkb2MpCiB7CiAgICAgbV9pbmxpbmVTdHlsZURlY2wgPSAwOwogICAgIG1faXNTdHlsZUF0dHJp
YnV0ZVZhbGlkID0gdHJ1ZTsKSW5kZXg6IGtodG1sL3htbC9kb21fZWxlbWVudGltcGwuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC94bWwvZG9tX2VsZW1lbnRp
bXBsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNDEKZGlmZiAtdSAtcCAtcjEuNDEga2h0bWwv
eG1sL2RvbV9lbGVtZW50aW1wbC5oCi0tLSBraHRtbC94bWwvZG9tX2VsZW1lbnRpbXBsLmgJMTIg
TWF5IDIwMDUgMTc6MTE6MjIgLTAwMDAJMS40MQorKysga2h0bWwveG1sL2RvbV9lbGVtZW50aW1w
bC5oCTcgSnVsIDIwMDUgMDU6NTk6MzEgLTAwMDAKQEAgLTIzLDEzICsyMywxNCBAQAogICogQm9z
dG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCiAgKgogICovCi0jaWZuZGVmIF9ET01fRUxFTUVOVElt
cGxfaF8KLSNkZWZpbmUgX0RPTV9FTEVNRU5USW1wbF9oXworI2lmbmRlZiBfRE9NX0VMRU1FTlRJ
TVBMX2hfCisjZGVmaW5lIF9ET01fRUxFTUVOVElNUExfaF8KIAogI2luY2x1ZGUgImRvbV9ub2Rl
aW1wbC5oIgogI2luY2x1ZGUgInhtbC9kb21fc3RyaW5naW1wbC5oIgogI2luY2x1ZGUgIm1pc2Mv
c2hhcmVkLmgiCiAjaW5jbHVkZSAiY3NzL2Nzc192YWx1ZWltcGwuaCIKKyNpbmNsdWRlICJkb21f
cW5hbWUuaCIKIAogI2lmIEFQUExFX0NIQU5HRVMKICNpZmRlZiBfX09CSkNfXwpAQCAtMTI4LDgg
KzEyOSw4IEBAIHB1YmxpYzoKICAgICAvLyBET00gbWV0aG9kcyBvdmVycmlkZGVuIGZyb20gIHBh
cmVudCBjbGFzc2VzCiAgICAgdmlydHVhbCBET01TdHJpbmcgbm9kZU5hbWUoKSBjb25zdDsKICAg
ICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0IG5vZGVUeXBlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBE
T01TdHJpbmcgcHJlZml4KCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHNldFByZWZpeChjb25z
dCBET01TdHJpbmcgJl9wcmVmaXgsIGludCAmZXhjZXB0aW9uY29kZSApOworICAgIHZpcnR1YWwg
Y29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
UHJlZml4KGNvbnN0IEF0b21pY1N0cmluZyAmX3ByZWZpeCwgaW50ICZleGNlcHRpb25jb2RlICk7
CiAKICAgICB2aXJ0dWFsIERPTVN0cmluZyBub2RlVmFsdWUoKSBjb25zdDsKICAgICB2aXJ0dWFs
IHZvaWQgc2V0Tm9kZVZhbHVlKCBjb25zdCBET01TdHJpbmcgJiwgaW50ICZleGNlcHRpb25jb2Rl
ICk7CkBAIC0xNTYsNyArMTU3LDcgQEAgY2xhc3MgRWxlbWVudEltcGwgOiBwdWJsaWMgQ29udGFp
bmVyTm9kZQogICAgIGZyaWVuZCBjbGFzcyBOb2RlSW1wbDsKICAgICBmcmllbmQgY2xhc3Mga2h0
bWw6OkNTU1N0eWxlU2VsZWN0b3I7CiBwdWJsaWM6Ci0gICAgRWxlbWVudEltcGwoRG9jdW1lbnRQ
dHIgKmRvYyk7CisgICAgRWxlbWVudEltcGwoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwg
RG9jdW1lbnRQdHIgKmRvYyk7CiAgICAgfkVsZW1lbnRJbXBsKCk7CiAKICAgICAvLyBVc2VkIHRv
IHF1aWNrbHkgZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IGFuIGVsZW1lbnQgaGFzIGEgZ2l2ZW4g
Q1NTIGNsYXNzLgpAQCAtMTg2LDE1ICsxODcsMjQgQEAgcHVibGljOgogICAgIFNoYXJlZFB0cjxB
dHRySW1wbD4gc2V0QXR0cmlidXRlTm9kZU5TKEF0dHJJbXBsICpuZXdBdHRyLCBpbnQgJmV4Y2Vw
dGlvbikgeyByZXR1cm4gc2V0QXR0cmlidXRlTm9kZShuZXdBdHRyLCBleGNlcHRpb24pOyB9CiAg
ICAgU2hhcmVkUHRyPEF0dHJJbXBsPiByZW1vdmVBdHRyaWJ1dGVOb2RlKEF0dHJJbXBsICpvbGRB
dHRyLCBpbnQgJmV4Y2VwdGlvbik7CiAgICAgCi0gICAgRE9NU3RyaW5nIHByZWZpeCgpIGNvbnN0
IHsgcmV0dXJuIG1fcHJlZml4OyB9Ci0gICAgdm9pZCBzZXRQcmVmaXgoY29uc3QgRE9NU3RyaW5n
ICZfcHJlZml4LCBpbnQgJmV4Y2VwdGlvbmNvZGUgKTsKLQogICAgIHZpcnR1YWwgQ1NTU3R5bGVE
ZWNsYXJhdGlvbkltcGwgKnN0eWxlKCk7CiAKKyAgICB2aXJ0dWFsIGNvbnN0IFF1YWxpZmllZE5h
bWUmIHRhZ05hbWUoKSBjb25zdCB7IHJldHVybiBtX3RhZ05hbWU7IH0KKyAgICB2aXJ0dWFsIGJv
b2wgaGFzVGFnTmFtZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lKSBjb25zdCB7IHJldHVy
biBtX3RhZ05hbWUubWF0Y2hlcyh0YWdOYW1lKTsgfQorICAgIAorICAgIC8vIEEgbW9yZSBsaWdo
dHdlaWdodCBjaGVjayB0aGFuIGhhc1RhZ05hbWUuICBVc2UgdGhpcyBjaGVjayB3aGVuIHlvdSBr
bm93IHRoZSBuYW1lc3BhY2VzIG9mIHRoZSB0d28gUXVhbGlmaWVkTmFtZXMgbWF0Y2gsIGUuZy4s
IHRoYXQgdGhleSdyZQorICAgIC8vIGJvdGggSFRNTCBuYW1lcy4KKyAgICBib29sIGhhc0xvY2Fs
TmFtZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lKSBjb25zdCB7IHJldHVybiBtX3RhZ05h
bWUubG9jYWxOYW1lKCkgPT0gdGFnTmFtZS5sb2NhbE5hbWUoKTsgfQorICAgIGJvb2wgaGFzTG9j
YWxOYW1lKGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lKSBjb25zdCB7IHJldHVybiBtX3Rh
Z05hbWUubG9jYWxOYW1lKCkgPT0gbG9jYWxOYW1lOyB9CisKKyAgICB2aXJ0dWFsIGNvbnN0IEF0
b21pY1N0cmluZyYgbG9jYWxOYW1lKCkgY29uc3QgeyByZXR1cm4gbV90YWdOYW1lLmxvY2FsTmFt
ZSgpOyB9CisgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCgpIGNvbnN0IHsg
cmV0dXJuIG1fdGFnTmFtZS5wcmVmaXgoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRQcmVmaXgo
Y29uc3QgQXRvbWljU3RyaW5nICZfcHJlZml4LCBpbnQgJmV4Y2VwdGlvbmNvZGUpOworICAgIHZp
cnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkkoKSBjb25zdCB7IHJldHVybiBt
X3RhZ05hbWUubmFtZXNwYWNlVVJJKCk7IH0KKyAgICAKICAgICAvLyBET00gbWV0aG9kcyBvdmVy
cmlkZGVuIGZyb20gIHBhcmVudCBjbGFzc2VzCi0gICAgdmlydHVhbCBET01TdHJpbmcgdGFnTmFt
ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgdW5zaWduZWQgc2hvcnQgbm9kZVR5cGUoKSBjb25zdDsK
LSAgICB2aXJ0dWFsIE5vZGVJbXBsICpjbG9uZU5vZGUgKCBib29sIGRlZXAgKSA9IDA7CisgICAg
dmlydHVhbCBOb2RlSW1wbCAqY2xvbmVOb2RlKGJvb2wgZGVlcCk7CiAgICAgdmlydHVhbCBET01T
dHJpbmcgbm9kZU5hbWUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNFbGVtZW50Tm9kZSgp
IGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJbnRvRG9j
dW1lbnQoKTsKQEAgLTIyMSw3ICsyMzEsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHJl
Y2FsY1N0eWxlKCBTdHlsZUNoYW5nZSA9IE5vQ2hhbmdlICk7CiAKICAgICB2aXJ0dWFsIHZvaWQg
bW91c2VFdmVudEhhbmRsZXIoIE1vdXNlRXZlbnQgKi8qZXYqLywgYm9vbCAvKmluc2lkZSovICkg
e307Ci0gICAgdmlydHVhbCBib29sIGNoaWxkQWxsb3dlZCggTm9kZUltcGwgKm5ld0NoaWxkICk7
CiAgICAgdmlydHVhbCBib29sIGNoaWxkVHlwZUFsbG93ZWQoIHVuc2lnbmVkIHNob3J0IHR5cGUg
KTsKICAKICAgICB2aXJ0dWFsIEF0dHJpYnV0ZUltcGwqIGNyZWF0ZUF0dHJpYnV0ZShJZCBpZCwg
RE9NU3RyaW5nSW1wbCogdmFsdWUpOwpAQCAtMjU0LDI5ICsyNjMsNyBAQCBwcml2YXRlOgogCiBw
cm90ZWN0ZWQ6IC8vIG1lbWJlciB2YXJpYWJsZXMKICAgICBtdXRhYmxlIE5hbWVkQXR0ck1hcElt
cGwgKm5hbWVkQXR0ck1hcDsKLSAgICBET01TdHJpbmdJbXBsICptX3ByZWZpeDsKLX07Ci0KLQot
Y2xhc3MgWE1MRWxlbWVudEltcGwgOiBwdWJsaWMgRWxlbWVudEltcGwKLXsKLQotcHVibGljOgot
ICAgIFhNTEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIERPTVN0cmluZ0ltcGwgKl90YWdO
YW1lKTsKLSAgICBYTUxFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCBET01TdHJpbmdJbXBs
ICpfcXVhbGlmaWVkTmFtZSwgRE9NU3RyaW5nSW1wbCAqX25hbWVzcGFjZVVSSSk7Ci0gICAgflhN
TEVsZW1lbnRJbXBsKCk7Ci0KLSAgICAvLyBET00gbWV0aG9kcyBvdmVycmlkZGVuIGZyb20gIHBh
cmVudCBjbGFzc2VzCi0gICAgdmlydHVhbCBET01TdHJpbmcgbmFtZXNwYWNlVVJJKCkgY29uc3Q7
Ci0gICAgdmlydHVhbCBET01TdHJpbmcgbG9jYWxOYW1lKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBO
b2RlSW1wbCAqY2xvbmVOb2RlICggYm9vbCBkZWVwICk7Ci0KLSAgICAvLyBPdGhlciBtZXRob2Rz
IChub3QgcGFydCBvZiBET00pCi0gICAgdmlydHVhbCBib29sIGlzWE1MRWxlbWVudE5vZGUoKSBj
b25zdCB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0IHsgcmV0dXJu
IG1faWQ7IH0KLQotcHJvdGVjdGVkOgotICAgIElkIG1faWQ7CisgICAgUXVhbGlmaWVkTmFtZSBt
X3RhZ05hbWU7CiB9OwogCiAvLyB0aGUgbWFwIG9mIGF0dHJpYnV0ZXMgb2YgYW4gZWxlbWVudApA
QCAtNDE0LDcgKzQwMSw3IEBAIHByaXZhdGU6CiBjbGFzcyBTdHlsZWRFbGVtZW50SW1wbCA6IHB1
YmxpYyBFbGVtZW50SW1wbAogewogcHVibGljOgotICAgIFN0eWxlZEVsZW1lbnRJbXBsKERvY3Vt
ZW50UHRyICpkb2MpOworICAgIFN0eWxlZEVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUm
IHRhZ05hbWUsIERvY3VtZW50UHRyICpkb2MpOwogICAgIHZpcnR1YWwgflN0eWxlZEVsZW1lbnRJ
bXBsKCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNTdHlsZWRFbGVtZW50KCkgY29uc3QgeyByZXR1
cm4gdHJ1ZTsgfQpJbmRleDoga2h0bWwveG1sL2RvbV9ub2RlaW1wbC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwveG1sL2RvbV9ub2RlaW1wbC5jcHAsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuMTU2CmRpZmYgLXUgLXAgLXIxLjE1NiBraHRtbC94bWwvZG9t
X25vZGVpbXBsLmNwcAotLS0ga2h0bWwveG1sL2RvbV9ub2RlaW1wbC5jcHAJMjMgSnVuIDIwMDUg
MTk6NDc6NTAgLTAwMDAJMS4xNTYKKysrIGtodG1sL3htbC9kb21fbm9kZWltcGwuY3BwCTcgSnVs
IDIwMDUgMDU6NTk6MzIgLTAwMDAKQEAgLTI3LDcgKzI3LDYgQEAKICNpbmNsdWRlICJkb20vZG9t
X2V4Y2VwdGlvbi5oIgogI2luY2x1ZGUgImRvbS9kb20yX2V2ZW50cy5oIgogI2luY2x1ZGUgIm1p
c2MvaHRtbGF0dHJzLmgiCi0jaW5jbHVkZSAibWlzYy9odG1sdGFncy5oIgogI2luY2x1ZGUgInht
bC9kb21fZWxlbWVudGltcGwuaCIKICNpbmNsdWRlICJ4bWwvZG9tX3RleHRpbXBsLmgiCiAjaW5j
bHVkZSAieG1sL2RvbTJfZXZlbnRzaW1wbC5oIgpAQCAtNTAsNyArNDksOCBAQAogI2luY2x1ZGUg
ImtodG1sdmlldy5oIgogI2luY2x1ZGUgImtodG1sX3BhcnQuaCIKIAotI2luY2x1ZGUgImh0bWwv
ZHRkLmgiCisvLyBGSVhNRTogU2hvdWxkIG5vdCBoYXZlIHRvIGluY2x1ZGUgdGhpcy4gIEN1dCB0
aGUgSFRNTCBkZXBlbmRlbmN5IQorI2luY2x1ZGUgImh0bWxuYW1lcy5oIgogCiAjaWZuZGVmIEtI
VE1MX05PX1hCTAogI2luY2x1ZGUgInhibC94YmxfYmluZGluZ19tYW5hZ2VyLmgiCkBAIC02NCw5
ICs2NCwzMCBAQAogI2RlZmluZSBMT0coY2hhbm5lbCwgZm9ybWF0QW5kQXJncy4uLikgKCh2b2lk
KTApCiAjZW5kaWYKIAotdXNpbmcgbmFtZXNwYWNlIERPTTsKIHVzaW5nIG5hbWVzcGFjZSBraHRt
bDsKIAorbmFtZXNwYWNlIERPTSB7CisvKioKKyAqIE5vZGVMaXN0IHdoaWNoIGxpc3RzIGFsbCBO
b2RlcyBpbiBhIGRvY3VtZW50IHdpdGggYSBnaXZlbiB0YWcgbmFtZQorICovCitjbGFzcyBUYWdO
b2RlTGlzdEltcGwgOiBwdWJsaWMgTm9kZUxpc3RJbXBsCit7CitwdWJsaWM6CisgICAgVGFnTm9k
ZUxpc3RJbXBsKE5vZGVJbXBsICpuLCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSwg
Y29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUpOworCisgICAgLy8gRE9NIG1ldGhvZHMgb3Zl
cnJpZGRlbiBmcm9tICBwYXJlbnQgY2xhc3NlcworICAgIHZpcnR1YWwgdW5zaWduZWQgbG9uZyBs
ZW5ndGgoKSBjb25zdDsKKyAgICB2aXJ0dWFsIE5vZGVJbXBsICppdGVtICh1bnNpZ25lZCBsb25n
IGluZGV4KSBjb25zdDsKKworICAgIC8vIE90aGVyIG1ldGhvZHMgKG5vdCBwYXJ0IG9mIERPTSkK
KworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgYm9vbCBub2RlTWF0Y2hlcyhOb2RlSW1wbCAqdGVz
dE5vZGUpIGNvbnN0OworCisgICAgQXRvbWljU3RyaW5nIG1fbmFtZXNwYWNlVVJJOworICAgIEF0
b21pY1N0cmluZyBtX2xvY2FsTmFtZTsKK307CisKIE5vZGVJbXBsOjpOb2RlSW1wbChEb2N1bWVu
dFB0ciAqZG9jKQogICAgIDogZG9jdW1lbnQoZG9jKSwKICAgICAgIG1fcHJldmlvdXMoMCksCkBA
IC0xNTQsNyArMTc1LDcgQEAgTm9kZUltcGwgKk5vZGVJbXBsOjpsYXN0Q2hpbGQoKSBjb25zdAog
ICByZXR1cm4gMDsKIH0KIAotTm9kZUltcGwgKk5vZGVJbXBsOjpsYXN0RGVzY2VuZGVudCgpIGNv
bnN0CitOb2RlSW1wbCAqTm9kZUltcGw6Omxhc3REZXNjZW5kYW50KCkgY29uc3QKIHsKICAgICBO
b2RlSW1wbCAqbiA9IGNvbnN0X2Nhc3Q8Tm9kZUltcGwgKj4odGhpcyk7CiAgICAgd2hpbGUgKG4g
JiYgbi0+bGFzdENoaWxkKCkpCkBAIC0yMzksMTMgKzI2MCwxMyBAQCB2b2lkIE5vZGVJbXBsOjpu
b3JtYWxpemUgKCkKICAgICB9CiB9CiAKLURPTVN0cmluZyBOb2RlSW1wbDo6cHJlZml4KCkgY29u
c3QKK2NvbnN0IEF0b21pY1N0cmluZyYgTm9kZUltcGw6OnByZWZpeCgpIGNvbnN0CiB7CiAgICAg
Ly8gRm9yIG5vZGVzIG90aGVyIHRoYW4gZWxlbWVudHMgYW5kIGF0dHJpYnV0ZXMsIHRoZSBwcmVm
aXggaXMgYWx3YXlzIG51bGwKLSAgICByZXR1cm4gRE9NU3RyaW5nKCk7CisgICAgcmV0dXJuIG51
bGxBdG9tOwogfQogCi12b2lkIE5vZGVJbXBsOjpzZXRQcmVmaXgoY29uc3QgRE9NU3RyaW5nICYv
Kl9wcmVmaXgqLywgaW50ICZleGNlcHRpb25jb2RlICkKK3ZvaWQgTm9kZUltcGw6OnNldFByZWZp
eChjb25zdCBBdG9taWNTdHJpbmcgJi8qX3ByZWZpeCovLCBpbnQgJmV4Y2VwdGlvbmNvZGUgKQog
ewogICAgIC8vIFRoZSBzcGVjIHNheXMgdGhhdCBmb3Igbm9kZXMgb3RoZXIgdGhhbiBlbGVtZW50
cyBhbmQgYXR0cmlidXRlcywgcHJlZml4IGlzIGFsd2F5cyBudWxsLgogICAgIC8vIEl0IGRvZXMg
bm90IHNheSB3aGF0IHRvIGRvIHdoZW4gdGhlIHVzZXIgdHJpZXMgdG8gc2V0IHRoZSBwcmVmaXgg
b24gYW5vdGhlciB0eXBlIG9mCkBAIC0yNTMsMTQgKzI3NCwxNCBAQCB2b2lkIE5vZGVJbXBsOjpz
ZXRQcmVmaXgoY29uc3QgRE9NU3RyaW5nCiAgICAgZXhjZXB0aW9uY29kZSA9IERPTUV4Y2VwdGlv
bjo6TkFNRVNQQUNFX0VSUjsKIH0KIAotRE9NU3RyaW5nIE5vZGVJbXBsOjpsb2NhbE5hbWUoKSBj
b25zdAorY29uc3QgQXRvbWljU3RyaW5nJiBOb2RlSW1wbDo6bG9jYWxOYW1lKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gRE9NU3RyaW5nKCk7CisgICAgcmV0dXJuIGVtcHR5QXRvbTsKIH0KIAotRE9N
U3RyaW5nIE5vZGVJbXBsOjpuYW1lc3BhY2VVUkkoKSBjb25zdAorY29uc3QgQXRvbWljU3RyaW5n
JiBOb2RlSW1wbDo6bmFtZXNwYWNlVVJJKCkgY29uc3QKIHsKLSAgICByZXR1cm4gRE9NU3RyaW5n
KCk7CisgICAgcmV0dXJuIGVtcHR5QXRvbTsKIH0KIAogdm9pZCBOb2RlSW1wbDo6c2V0Rmlyc3RD
aGlsZChOb2RlSW1wbCAqKQpAQCAtMzA2LDEyICszMjcsNiBAQCB2b2lkIE5vZGVJbXBsOjpzZXRD
aGFuZ2VkKGJvb2wgYikKICAgICB9CiB9CiAKLWJvb2wgTm9kZUltcGw6OmlzSW5saW5lKCkgY29u
c3QKLXsKLSAgICBpZiAobV9yZW5kZXIpIHJldHVybiBtX3JlbmRlci0+c3R5bGUoKS0+ZGlzcGxh
eSgpID09IGtodG1sOjpJTkxJTkU7Ci0gICAgcmV0dXJuICFpc0VsZW1lbnROb2RlKCk7Ci19Ci0K
IGJvb2wgTm9kZUltcGw6OmlzRm9jdXNhYmxlKCkgY29uc3QKIHsKICAgICByZXR1cm4gZmFsc2U7
CkBAIC0xMDA2LDQzICsxMDIxLDM0IEBAIE5vZGVJbXBsICpOb2RlSW1wbDo6dHJhdmVyc2VQcmV2
aW91c05vZGUKICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBOb2RlSW1wbDo6Y2hlY2tTZXRQcmVm
aXgoY29uc3QgRE9NU3RyaW5nICZfcHJlZml4LCBpbnQgJmV4Y2VwdGlvbmNvZGUpCit2b2lkIE5v
ZGVJbXBsOjpjaGVja1NldFByZWZpeChjb25zdCBBdG9taWNTdHJpbmcgJl9wcmVmaXgsIGludCAm
ZXhjZXB0aW9uY29kZSkKIHsKICAgICAvLyBQZXJmb3JtIGVycm9yIGNoZWNraW5nIGFzIHJlcXVp
cmVkIGJ5IHNwZWMgZm9yIHNldHRpbmcgTm9kZS5wcmVmaXguIFVzZWQgYnkKICAgICAvLyBFbGVt
ZW50SW1wbDo6c2V0UHJlZml4KCkgYW5kIEF0dHJJbXBsOjpzZXRQcmVmaXgoKQogCi0jaWYgMAot
ICAgIC8vIEZJWE1FOiBBZGQgdGhpcyBjaGVjayAoYnV0IG5vdCBpbiBhIHdheSB0aGF0IGRlcGVu
ZHMgb24gdGhlIEMrKyBET00hKQotICAgIC8vIElOVkFMSURfQ0hBUkFDVEVSX0VSUjogUmFpc2Vk
IGlmIHRoZSBzcGVjaWZpZWQgcHJlZml4IGNvbnRhaW5zIGFuIGlsbGVnYWwgY2hhcmFjdGVyLgot
ICAgIGlmICghRWxlbWVudDo6a2h0bWxWYWxpZFByZWZpeChfcHJlZml4KSkgewotICAgICAgICBl
eGNlcHRpb25jb2RlID0gRE9NRXhjZXB0aW9uOjpJTlZBTElEX0NIQVJBQ1RFUl9FUlI7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLQorICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgc3Vw
cG9ydCBmb3IgSU5WQUxJRF9DSEFSQUNURVJfRVJSOiBSYWlzZWQgaWYgdGhlIHNwZWNpZmllZCBw
cmVmaXggY29udGFpbnMgYW4gaWxsZWdhbCBjaGFyYWN0ZXIuCisgICAgCiAgICAgLy8gTk9fTU9E
SUZJQ0FUSU9OX0FMTE9XRURfRVJSOiBSYWlzZWQgaWYgdGhpcyBub2RlIGlzIHJlYWRvbmx5Lgog
ICAgIGlmIChpc1JlYWRPbmx5KCkpIHsKICAgICAgICAgZXhjZXB0aW9uY29kZSA9IERPTUV4Y2Vw
dGlvbjo6Tk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgLy8gTkFNRVNQQUNFX0VSUjogLSBSYWlzZWQgaWYgdGhlIHNwZWNpZmllZCBwcmVm
aXggaXMgbWFsZm9ybWVkCisgICAgLy8gRklYTUU6IEltcGxlbWVudCBOQU1FU1BBQ0VfRVJSOiAt
IFJhaXNlZCBpZiB0aGUgc3BlY2lmaWVkIHByZWZpeCBpcyBtYWxmb3JtZWQKKyAgICAvLyBXZSBo
YXZlIHRvIGNvbW1lbnQgdGhpcyBvdXQsIHNpbmNlIGl0J3MgdXNlZCBmb3IgYXR0cmlidXRlcyBh
bmQgdGFnIG5hbWVzLCBhbmQgd2UndmUgb25seQorICAgIC8vIHN3aXRjaGVkIG9uZSBvdmVyLgor
ICAgIC8qCiAgICAgLy8gLSBpZiB0aGUgbmFtZXNwYWNlVVJJIG9mIHRoaXMgbm9kZSBpcyBudWxs
LAogICAgIC8vIC0gaWYgdGhlIHNwZWNpZmllZCBwcmVmaXggaXMgInhtbCIgYW5kIHRoZSBuYW1l
c3BhY2VVUkkgb2YgdGhpcyBub2RlIGlzIGRpZmZlcmVudCBmcm9tCiAgICAgLy8gICAiaHR0cDov
L3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIiwKICAgICAvLyAtIGlmIHRoaXMgbm9kZSBp
cyBhbiBhdHRyaWJ1dGUgYW5kIHRoZSBzcGVjaWZpZWQgcHJlZml4IGlzICJ4bWxucyIgYW5kCiAg
ICAgLy8gICB0aGUgbmFtZXNwYWNlVVJJIG9mIHRoaXMgbm9kZSBpcyBkaWZmZXJlbnQgZnJvbSAi
aHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8iLAogICAgIC8vIC0gb3IgaWYgdGhpcyBub2Rl
IGlzIGFuIGF0dHJpYnV0ZSBhbmQgdGhlIHF1YWxpZmllZE5hbWUgb2YgdGhpcyBub2RlIGlzICJ4
bWxucyIgW05hbWVzcGFjZXNdLgotICAgIGlmICgKLSNpZiAwCi0gICAgICAgIC8vIEZJWE1FOiBB
ZGQgdGhpcyBjaGVjayAoYnV0IG5vdCBpbiBhIHdheSB0aGF0IGRlcGVuZHMgb24gdGhlIEMrKyBE
T00hKQotICAgICAgICBFbGVtZW50OjpraHRtbE1hbGZvcm1lZFByZWZpeChfcHJlZml4KSB8fAot
I2VuZGlmCi0gICAgICAgIChuYW1lc3BhY2VQYXJ0KGlkKCkpID09IG5vTmFtZXNwYWNlICYmIGlk
KCkgPiBJRF9MQVNUX1RBRykgfHwKKyAgICBpZiAoKG5hbWVzcGFjZVBhcnQoaWQoKSkgPT0gbm9O
YW1lc3BhY2UgJiYgaWQoKSA+IElEX0xBU1RfVEFHKSB8fAogICAgICAgICAoX3ByZWZpeCA9PSAi
eG1sIiAmJiBET01TdHJpbmcoZ2V0RG9jdW1lbnQoKS0+bmFtZXNwYWNlVVJJKGlkKCkpKSAhPSAi
aHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIikpIHsKICAgICAgICAgZXhjZXB0
aW9uY29kZSA9IERPTUV4Y2VwdGlvbjo6TkFNRVNQQUNFX0VSUjsKICAgICAgICAgcmV0dXJuOwot
ICAgIH0KKyAgICB9Ki8KIH0KIAogdm9pZCBOb2RlSW1wbDo6Y2hlY2tBZGRDaGlsZChOb2RlSW1w
bCAqbmV3Q2hpbGQsIGludCAmZXhjZXB0aW9uY29kZSkKQEAgLTEyODMsOSArMTI4OSwxMCBAQCBS
ZW5kZXJPYmplY3QgKiBOb2RlSW1wbDo6bmV4dFJlbmRlcmVyKCkKICAgICByZXR1cm4gMDsKIH0K
IAorLy8gRklYTUU6IFRoaXMgY29kZSBpcyB1c2VkIGJ5IGVkaXRpbmcuICBTZWVtcyBsaWtlIGl0
IGNvdWxkIG1vdmUgb3ZlciB0aGVyZSBhbmQgbm90IHBvbGx1dGUgTm9kZUltcGwuCiBib29sIE5v
ZGVJbXBsOjppc0F0b21pY05vZGUoKSBjb25zdAogewotICAgIHJldHVybiAhaGFzQ2hpbGROb2Rl
cygpIHx8IChpZCgpID09IElEX09CSkVDVCAmJiByZW5kZXJlcigpICYmIHJlbmRlcmVyKCktPmlz
UmVwbGFjZWQoKSk7CisgICAgcmV0dXJuICFoYXNDaGlsZE5vZGVzKCkgfHwgKHJlbmRlcmVyKCkg
JiYgcmVuZGVyZXIoKS0+aXNXaWRnZXQoKSk7CiB9CiAKIE5vZGVJbXBsICpOb2RlSW1wbDo6cHJl
dmlvdXNOb2RlQ29uc2lkZXJpbmdBdG9taWNOb2RlcygpIGNvbnN0CkBAIC0xNDAyLDEzICsxNDA5
LDE1IEBAIGxvbmcgTm9kZUltcGw6Om1heE9mZnNldCgpIGNvbnN0CiAgICAgcmV0dXJuIDE7CiB9
CiAKKy8vIEZJWE1FOiBTaG91bGRuJ3QgdGhlc2UgZnVuY3Rpb25zIGJlIGluIHRoZSBlZGl0aW5n
IGNvZGU/ICBDb2RlIHRoYXQgYXNrcyBxdWVzdGlvbnMgYWJvdXQgSFRNTCBpbiB0aGUgY29yZSBE
T00gY2xhc3MKKy8vIGlzIG9idmlvdXNseSBtaXNwbGFjZWQuCiAvLyBtZXRob2QgZm9yIGVkaXRp
bmcgbWFkbmVzcywgd2hpY2ggYWxsb3dzIEJSLDEgYXMgYSBwb3NpdGlvbiwgdGhvdWdoIHRoYXQg
aXMgaW5jb3JyZWN0CiBsb25nIE5vZGVJbXBsOjptYXhEZWVwT2Zmc2V0KCkgY29uc3QKIHsKICAg
ICBpZiAob2Zmc2V0SW5DaGFyYWN0ZXJzKG5vZGVUeXBlKCkpKQogICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8Y29uc3QgVGV4dEltcGwqPih0aGlzKS0+bGVuZ3RoKCk7CiAgICAgICAgIAotICAg
IGlmIChpZCgpID09IElEX0JSIHx8IChyZW5kZXJlcigpICYmIHJlbmRlcmVyKCktPmlzUmVwbGFj
ZWQoKSkpCisgICAgaWYgKGhhc1RhZ05hbWUoSFRNTE5hbWVzOjpicigpKSB8fCAocmVuZGVyZXIo
KSAmJiByZW5kZXJlcigpLT5pc1JlcGxhY2VkKCkpKQogICAgICAgICByZXR1cm4gMTsKIAogICAg
IHJldHVybiBjaGlsZE5vZGVDb3VudCgpOwpAQCAtMTQ2NCw3ICsxNDczLDcgQEAgRWxlbWVudElt
cGwgKk5vZGVJbXBsOjplbmNsb3NpbmdCbG9ja0ZsbwogICAgICAgICBuID0gbi0+cGFyZW50Tm9k
ZSgpOwogICAgICAgICBpZiAoIW4pCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgaWYgKG4t
PmlzQmxvY2tGbG93T3JUYWJsZSgpIHx8IG4tPmlkKCkgPT0gSURfQk9EWSkKKyAgICAgICAgaWYg
KG4tPmlzQmxvY2tGbG93T3JUYWJsZSgpIHx8IG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpib2R5
KCkpKQogICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsICo+KG4pOwog
ICAgIH0KICAgICByZXR1cm4gMDsKQEAgLTE0ODAsNyArMTQ4OSw3IEBAIEVsZW1lbnRJbXBsICpO
b2RlSW1wbDo6ZW5jbG9zaW5nQmxvY2tGbG8KICAgICAgICAgbiA9IG4tPnBhcmVudE5vZGUoKTsK
ICAgICAgICAgaWYgKCFuKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGlmIChuLT5pc0Js
b2NrRmxvdygpIHx8IG4tPmlkKCkgPT0gSURfQk9EWSkKKyAgICAgICAgaWYgKG4tPmlzQmxvY2tG
bG93KCkgfHwgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJvZHkoKSkpCiAgICAgICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8RWxlbWVudEltcGwgKj4obik7CiAgICAgfQogICAgIHJldHVybiAw
OwpAQCAtMTQ5Myw3ICsxNTAyLDcgQEAgRWxlbWVudEltcGwgKk5vZGVJbXBsOjplbmNsb3NpbmdJ
bmxpbmVFbAogCiAgICAgd2hpbGUgKDEpIHsKICAgICAgICAgcCA9IG4tPnBhcmVudE5vZGUoKTsK
LSAgICAgICAgaWYgKCFwIHx8IHAtPmlzQmxvY2tGbG93KCkgfHwgcC0+aWQoKSA9PSBJRF9CT0RZ
KQorICAgICAgICBpZiAoIXAgfHwgcC0+aXNCbG9ja0Zsb3coKSB8fCBwLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6Ym9keSgpKSkKICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxFbGVtZW50
SW1wbCAqPihuKTsKICAgICAgICAgLy8gQWxzbyBzdG9wIGlmIGFueSBwcmV2aW91cyBzaWJsaW5n
IGlzIGEgYmxvY2sKICAgICAgICAgZm9yIChOb2RlSW1wbCAqc2libGluZyA9IG4tPnByZXZpb3Vz
U2libGluZygpOyBzaWJsaW5nOyBzaWJsaW5nID0gc2libGluZy0+cHJldmlvdXNTaWJsaW5nKCkp
IHsKQEAgLTE1MTIsNyArMTUyMSw3IEBAIEVsZW1lbnRJbXBsICpOb2RlSW1wbDo6cm9vdEVkaXRh
YmxlRWxlbWUKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBOb2RlSW1wbCAqbiA9IGNvbnN0X2Nh
c3Q8Tm9kZUltcGwgKj4odGhpcyk7Ci0gICAgaWYgKG4tPmlkKCkgPT0gSURfQk9EWSkKKyAgICBp
ZiAobi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJvZHkoKSkpCiAgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxFbGVtZW50SW1wbCAqPihuKTsKIAogICAgIE5vZGVJbXBsICpyZXN1bHQgPSBuLT5p
c0VkaXRhYmxlQmxvY2soKSA/IG4gOiAwOwpAQCAtMTUyMCw3ICsxNTI5LDcgQEAgRWxlbWVudElt
cGwgKk5vZGVJbXBsOjpyb290RWRpdGFibGVFbGVtZQogICAgICAgICBuID0gbi0+cGFyZW50Tm9k
ZSgpOwogICAgICAgICBpZiAoIW4gfHwgIW4tPmlzQ29udGVudEVkaXRhYmxlKCkpCiAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgaWYgKG4tPmlkKCkgPT0gSURfQk9EWSkgeworICAgICAgICBp
ZiAobi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJvZHkoKSkpIHsKICAgICAgICAgICAgIHJlc3Vs
dCA9IG47CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMTU0MCw2ICsxNTQ5LDgg
QEAgYm9vbCBOb2RlSW1wbDo6aW5TYW1lQ29udGFpbmluZ0Jsb2NrRmxvdwogICAgIHJldHVybiBu
ID8gZW5jbG9zaW5nQmxvY2tGbG93RWxlbWVudCgpID09IG4tPmVuY2xvc2luZ0Jsb2NrRmxvd0Vs
ZW1lbnQoKSA6IGZhbHNlOwogfQogCisvLyBGSVhNRTogRW5kIG9mIG9idmlvdXNseSBtaXNwbGFj
ZWQgSFRNTCBlZGl0aW5nIGZ1bmN0aW9ucy4gIFRyeSB0byBtb3ZlIHRoZXNlIG91dCBvZiBOb2Rl
SW1wbC4KKwogdm9pZCBOb2RlSW1wbDo6YWRkRXZlbnRMaXN0ZW5lcihjb25zdCBET01TdHJpbmcg
JnR5cGUsIEV2ZW50TGlzdGVuZXIgKmxpc3RlbmVyLCBib29sIHVzZUNhcHR1cmUpCiB7CiAgICAg
YWRkRXZlbnRMaXN0ZW5lcihFdmVudEltcGw6OnR5cGVUb0lkKHR5cGUpLCBsaXN0ZW5lciwgdXNl
Q2FwdHVyZSk7CkBAIC0xNTUwLDI1ICsxNTYxLDE1IEBAIHZvaWQgTm9kZUltcGw6OnJlbW92ZUV2
ZW50TGlzdGVuZXIoY29uc3QKICAgICByZW1vdmVFdmVudExpc3RlbmVyKEV2ZW50SW1wbDo6dHlw
ZVRvSWQodHlwZSksIGxpc3RlbmVyLCB1c2VDYXB0dXJlKTsKIH0KIAotU2hhcmVkUHRyPE5vZGVM
aXN0SW1wbD4gTm9kZUltcGw6OmdldEVsZW1lbnRzQnlUYWdOYW1lTlMgKCBjb25zdCBET01TdHJp
bmcgJm5hbWVzcGFjZVVSSSwgY29uc3QgRE9NU3RyaW5nICZsb2NhbE5hbWUgKQorU2hhcmVkUHRy
PE5vZGVMaXN0SW1wbD4gTm9kZUltcGw6OmdldEVsZW1lbnRzQnlUYWdOYW1lTlMoY29uc3QgRE9N
U3RyaW5nICZuYW1lc3BhY2VVUkksIGNvbnN0IERPTVN0cmluZyAmbG9jYWxOYW1lKQogewotICAg
IGlmIChsb2NhbE5hbWUuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBTaGFyZWRQdHI8Tm9kZUxp
c3RJbXBsPigpOwotCi0gICAgSWQgaWRNYXNrID0gbmFtZXNwYWNlTWFzayB8IGxvY2FsTmFtZU1h
c2s7Ci0gICAgaWYgKGxvY2FsTmFtZVswXSA9PSAnKicpCi0gICAgICAgIGlkTWFzayAmPSB+bG9j
YWxOYW1lTWFzazsKLSAgICBpZiAobmFtZXNwYWNlVVJJLmlzTnVsbCgpIHx8IG5hbWVzcGFjZVVS
SVswXSA9PSAnKicpCi0gICAgICAgIGlkTWFzayAmPSB+bmFtZXNwYWNlTWFzazsKLQotICAgIElk
IGlkID0gMDsgLy8gMCBtZWFucyAiYWxsIGl0ZW1zIgotICAgIGlmICgoaWRNYXNrICYgbG9jYWxO
YW1lTWFzaykgfHwgIW5hbWVzcGFjZVVSSS5pc051bGwoKSkgeyAvLyBub3QgZ2V0RWxlbWVudHNC
eVRhZ05hbWUoIioiKQotICAgICAgICBpZCA9IGdldERvY3VtZW50KCktPnRhZ0lkKG5hbWVzcGFj
ZVVSSS5pbXBsZW1lbnRhdGlvbigpLCBsb2NhbE5hbWUuaW1wbGVtZW50YXRpb24oKSwgdHJ1ZSk7
Ci0gICAgICAgIGlmICggIWlkICkgLy8gbm90IGZvdW5kIC0+IHdlIHdhbnQgdG8gcmV0dXJuIGFu
IGVtcHR5IGxpc3QsIG5vdCAiYWxsIGl0ZW1zIgotICAgICAgICAgICAgaWQgPSAoSWQpLTE7IC8v
IEhBQ0suIEhFQUQgaGFzIGEgY2xlYW5lciBpbXBsZW1lbnRhdGlvbiBvZiBUYWdOb2RlTGlzdElt
cGwgaXQgc2VlbXMuCi0gICAgfQotCi0gICAgcmV0dXJuIFNoYXJlZFB0cjxOb2RlTGlzdEltcGw+
KG5ldyBUYWdOb2RlTGlzdEltcGwodGhpcywgaWQsIGlkTWFzaykpOworICAgIGlmIChuYW1lc3Bh
Y2VVUkkuaXNOdWxsKCkgfHwgbG9jYWxOYW1lLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gU2hh
cmVkUHRyPE5vZGVMaXN0SW1wbD4oKTsgLy8gRklYTUU6IFdobyBjYXJlcyBhYm91dCB0aGlzIGFk
ZGl0aW9uYWwgY2hlY2s/CisgICAgCisgICAgRE9NU3RyaW5nIG5hbWUgPSBsb2NhbE5hbWU7Cisg
ICAgaWYgKGdldERvY3VtZW50KCktPmlzSFRNTERvY3VtZW50KCkpCisgICAgICAgIG5hbWUgPSBs
b2NhbE5hbWUubG93ZXIoKTsKKyAgICByZXR1cm4gU2hhcmVkUHRyPE5vZGVMaXN0SW1wbD4obmV3
IFRhZ05vZGVMaXN0SW1wbCh0aGlzLCBBdG9taWNTdHJpbmcobmFtZXNwYWNlVVJJKSwgQXRvbWlj
U3RyaW5nKG5hbWUpKSk7CiB9CiAKIGJvb2wgTm9kZUltcGw6OmlzU3VwcG9ydGVkKGNvbnN0IERP
TVN0cmluZyAmZmVhdHVyZSwgY29uc3QgRE9NU3RyaW5nICZ2ZXJzaW9uKQpAQCAtMTU5MiwxMyAr
MTU5Myw2IEBAIE5hbWVkQXR0ck1hcEltcGwgKk5vZGVJbXBsOjphdHRyaWJ1dGVzKCkKICAgICBy
ZXR1cm4gMDsKIH0KIAotI2lmIEFQUExFX0NIQU5HRVMKLU5vZGVJbXBsOjpJZCBOb2RlSW1wbDo6
aWRlbnRpZmllcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGlkKCk7Ci19Ci0jZW5kaWYKLQogI2lm
bmRlZiBOREVCVUcKIAogc3RhdGljIHZvaWQgYXBwZW5kQXR0cmlidXRlRGVzYyhjb25zdCBOb2Rl
SW1wbCAqbm9kZSwgUVN0cmluZyAmc3RyaW5nLCBOb2RlSW1wbDo6SWQgYXR0cklELCBRU3RyaW5n
IGF0dHJEZXNjKQpAQCAtMTYzOCw3ICsxNjMyLDcgQEAgdm9pZCBOb2RlSW1wbDo6c2hvd1RyZWVB
bmRNYXJrKE5vZGVJbXBsIAogewogICAgIE5vZGVJbXBsICpyb290Tm9kZTsKICAgICBOb2RlSW1w
bCAqbm9kZSA9IChOb2RlSW1wbCAqKXRoaXM7Ci0gICAgd2hpbGUobm9kZS0+cGFyZW50Tm9kZSgp
ICE9IE5VTEwgJiYgbm9kZS0+aWQoKSAhPSBJRF9CT0RZKQorICAgIHdoaWxlIChub2RlLT5wYXJl
bnROb2RlKCkgJiYgIW5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpib2R5KCkpKQogICAgICAg
ICBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpOwogICAgIHJvb3ROb2RlID0gbm9kZTsKIAkKQEAg
LTIwOTQsMTEgKzIwODgsOCBAQCBOb2RlSW1wbCAqQ29udGFpbmVyTm9kZUltcGw6OmFkZENoaWxk
KE5vCiAgICAgU2hhcmVkUHRyPE5vZGVJbXBsPiBwcm90ZWN0TmV3Q2hpbGQobmV3Q2hpbGQpOyAv
LyBtYWtlIHN1cmUgdGhlIG5ldyBjaGlsZCBpcyByZWYnZCBhbmQgZGVyZWYnZCBzbyB3ZSBkb24n
dCBsZWFrIGl0CiAKICAgICAvLyBzaG9ydCBjaGVjayBmb3IgY29uc2lzdGVuY3kgd2l0aCBEVEQK
LSAgICBpZighaXNYTUxFbGVtZW50Tm9kZSgpICYmICFuZXdDaGlsZC0+aXNYTUxFbGVtZW50Tm9k
ZSgpICYmICFjaGlsZEFsbG93ZWQobmV3Q2hpbGQpKQotICAgIHsKLSAgICAgICAgLy9rZERlYnVn
KCA2MDIwICkgPDwgIkFkZENoaWxkIGZhaWxlZCEgaWQ9IiA8PCBpZCgpIDw8ICIsIGNoaWxkLT5p
ZD0iIDw8IG5ld0NoaWxkLT5pZCgpIDw8IGVuZGw7CisgICAgaWYgKGdldERvY3VtZW50KCktPmlz
SFRNTERvY3VtZW50KCkgJiYgIWNoaWxkQWxsb3dlZChuZXdDaGlsZCkpCiAgICAgICAgIHJldHVy
biAwOwotICAgIH0KIAogICAgIC8vIGp1c3QgYWRkIGl0Li4uCiAgICAgbmV3Q2hpbGQtPnNldFBh
cmVudCh0aGlzKTsKQEAgLTI1MzYsMTAgKzI1MjcsMTAgQEAgYm9vbCBDaGlsZE5vZGVMaXN0SW1w
bDo6bm9kZU1hdGNoZXMoTm9kZQogICAgIHJldHVybiB0ZXN0Tm9kZS0+cGFyZW50Tm9kZSgpID09
IHJvb3ROb2RlOwogfQogCi1UYWdOb2RlTGlzdEltcGw6OlRhZ05vZGVMaXN0SW1wbChOb2RlSW1w
bCAqbiwgTm9kZUltcGw6OklkIF9pZCwgTm9kZUltcGw6OklkIF9pZE1hc2sgKQorVGFnTm9kZUxp
c3RJbXBsOjpUYWdOb2RlTGlzdEltcGwoTm9kZUltcGwgKm4sIGNvbnN0IEF0b21pY1N0cmluZyYg
bmFtZXNwYWNlVVJJLCBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSkKICAgICA6IE5vZGVM
aXN0SW1wbChuKSwgCi0gICAgICBtX2lkKF9pZCAmIF9pZE1hc2spLCAKLSAgICAgIG1faWRNYXNr
KF9pZE1hc2spCisgICAgICBtX25hbWVzcGFjZVVSSShuYW1lc3BhY2VVUkkpLCAKKyAgICAgIG1f
bG9jYWxOYW1lKGxvY2FsTmFtZSkKIHsKIH0KIApAQCAtMjU0OCwxNSArMjUzOSwyMCBAQCB1bnNp
Z25lZCBsb25nIFRhZ05vZGVMaXN0SW1wbDo6bGVuZ3RoKCkgCiAgICAgcmV0dXJuIHJlY3Vyc2l2
ZUxlbmd0aCgpOwogfQogCi1Ob2RlSW1wbCAqVGFnTm9kZUxpc3RJbXBsOjppdGVtICggdW5zaWdu
ZWQgbG9uZyBpbmRleCApIGNvbnN0CitOb2RlSW1wbCAqVGFnTm9kZUxpc3RJbXBsOjppdGVtKHVu
c2lnbmVkIGxvbmcgaW5kZXgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHJlY3Vyc2l2ZUl0ZW0oIGlu
ZGV4ICk7CisgICAgcmV0dXJuIHJlY3Vyc2l2ZUl0ZW0oaW5kZXgpOwogfQogCi1ib29sIFRhZ05v
ZGVMaXN0SW1wbDo6bm9kZU1hdGNoZXMoIE5vZGVJbXBsICp0ZXN0Tm9kZSApIGNvbnN0Citib29s
IFRhZ05vZGVMaXN0SW1wbDo6bm9kZU1hdGNoZXMoTm9kZUltcGwgKnRlc3ROb2RlKSBjb25zdAog
ewotICAgIHJldHVybiAoIHRlc3ROb2RlLT5pc0VsZW1lbnROb2RlKCkgJiYKLSAgICAgICAgICAg
ICAodGVzdE5vZGUtPmlkKCkgJiBtX2lkTWFzaykgPT0gbV9pZCk7CisgICAgaWYgKCF0ZXN0Tm9k
ZS0+aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAobV9u
YW1lc3BhY2VVUkkgIT0gc3RhckF0b20gJiYgbV9uYW1lc3BhY2VVUkkgIT0gdGVzdE5vZGUtPm5h
bWVzcGFjZVVSSSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIG1f
bG9jYWxOYW1lID09IHN0YXJBdG9tIHx8IG1fbG9jYWxOYW1lID09IHRlc3ROb2RlLT5sb2NhbE5h
bWUoKTsKIH0KIAogTmFtZU5vZGVMaXN0SW1wbDo6TmFtZU5vZGVMaXN0SW1wbChOb2RlSW1wbCAq
biwgY29uc3QgRE9NU3RyaW5nICZ0ICkKQEAgLTI1OTUsMTA2ICsyNTkxLDQgQEAgU2hhcmVkUHRy
PE5vZGVJbXBsPiBOYW1lZE5vZGVNYXBJbXBsOjpyZQogICAgIHJldHVybiByZW1vdmVOYW1lZEl0
ZW0obWFwSWQobmFtZXNwYWNlVVJJLCBsb2NhbE5hbWUsIHRydWUpLCBleGNlcHRpb24pOwogfQog
Ci0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vICMjIyB1bnVzZWQKLSNpZiAwCi1HZW5lcmlj
Uk9OYW1lZE5vZGVNYXBJbXBsOjpHZW5lcmljUk9OYW1lZE5vZGVNYXBJbXBsKERvY3VtZW50UHRy
KiBkb2MpCi0gICAgOiBOYW1lZE5vZGVNYXBJbXBsKCkKLXsKLSAgICBtX2RvYyA9IGRvYy0+ZG9j
dW1lbnQoKTsKLSAgICBtX2NvbnRlbnRzID0gbmV3IFFQdHJMaXN0PE5vZGVJbXBsPjsKLX0KLQot
R2VuZXJpY1JPTmFtZWROb2RlTWFwSW1wbDo6fkdlbmVyaWNST05hbWVkTm9kZU1hcEltcGwoKQot
ewotICAgIHdoaWxlIChtX2NvbnRlbnRzLT5jb3VudCgpID4gMCkKLSAgICAgICAgbV9jb250ZW50
cy0+dGFrZSgwKS0+ZGVyZWYoKTsKLQotICAgIGRlbGV0ZSBtX2NvbnRlbnRzOwotfQotCi1Ob2Rl
SW1wbCAqR2VuZXJpY1JPTmFtZWROb2RlTWFwSW1wbDo6Z2V0TmFtZWRJdGVtICggY29uc3QgRE9N
U3RyaW5nICZuYW1lLCBpbnQgJi8qZXhjZXB0aW9uY29kZSovICkgY29uc3QKLXsKLSAgICBRUHRy
TGlzdEl0ZXJhdG9yPE5vZGVJbXBsPiBpdCgqbV9jb250ZW50cyk7Ci0gICAgZm9yICg7IGl0LmN1
cnJlbnQoKTsgKytpdCkKLSAgICAgICAgaWYgKGl0LmN1cnJlbnQoKS0+bm9kZU5hbWUoKSA9PSBu
YW1lKQotICAgICAgICAgICAgcmV0dXJuIGl0LmN1cnJlbnQoKTsKLSAgICByZXR1cm4gMDsKIH0K
LQotTm9kZSBHZW5lcmljUk9OYW1lZE5vZGVNYXBJbXBsOjpzZXROYW1lZEl0ZW0gKCBjb25zdCBO
b2RlICYvKmFyZyovLCBpbnQgJmV4Y2VwdGlvbmNvZGUgKQotewotICAgIC8vIGNhbid0IG1vZGlm
eSB0aGlzIGxpc3QgdGhyb3VnaCBzdGFuZGFyZCBET00gZnVuY3Rpb25zCi0gICAgLy8gTk9fTU9E
SUZJQ0FUSU9OX0FMTE9XRURfRVJSOiBSYWlzZWQgaWYgdGhpcyBtYXAgaXMgcmVhZG9ubHkKLSAg
ICBleGNlcHRpb25jb2RlID0gRE9NRXhjZXB0aW9uOjpOT19NT0RJRklDQVRJT05fQUxMT1dFRF9F
UlI7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLU5vZGUgR2VuZXJpY1JPTmFtZWROb2RlTWFwSW1wbDo6
cmVtb3ZlTmFtZWRJdGVtICggY29uc3QgRE9NU3RyaW5nICYvKm5hbWUqLywgaW50ICZleGNlcHRp
b25jb2RlICkKLXsKLSAgICAvLyBjYW4ndCBtb2RpZnkgdGhpcyBsaXN0IHRocm91Z2ggc3RhbmRh
cmQgRE9NIGZ1bmN0aW9ucwotICAgIC8vIE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUjogUmFp
c2VkIGlmIHRoaXMgbWFwIGlzIHJlYWRvbmx5Ci0gICAgZXhjZXB0aW9uY29kZSA9IERPTUV4Y2Vw
dGlvbjo6Tk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOwotICAgIHJldHVybiAwOwotfQotCi1O
b2RlSW1wbCAqR2VuZXJpY1JPTmFtZWROb2RlTWFwSW1wbDo6aXRlbSAoIHVuc2lnbmVkIGxvbmcg
aW5kZXggKSBjb25zdAotewotICAgIC8vICMjIyBjaGVjayB0aGlzIHdoZW4gY2FsbGluZyBmcm9t
IGphdmFzY3JpcHQgdXNpbmcgLTEgPSAyXnNpemVvZihpbnQpLTEKLSAgICAvLyAoYWxzbyBmb3Ig
b3RoZXIgc2ltaWxhciBtZXRob2RzKQotICAgIGlmIChpbmRleCA+PSBtX2NvbnRlbnRzLT5jb3Vu
dCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBtX2NvbnRlbnRzLT5hdChpbmRl
eCk7Ci19Ci0KLXVuc2lnbmVkIGxvbmcgR2VuZXJpY1JPTmFtZWROb2RlTWFwSW1wbDo6bGVuZ3Ro
KCAgKSBjb25zdAotewotICAgIHJldHVybiBtX2NvbnRlbnRzLT5jb3VudCgpOwotfQotCi1Ob2Rl
SW1wbCAqR2VuZXJpY1JPTmFtZWROb2RlTWFwSW1wbDo6Z2V0TmFtZWRJdGVtTlMoIGNvbnN0IERP
TVN0cmluZyAmbmFtZXNwYWNlVVJJLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBET01TdHJpbmcgJmxvY2FsTmFtZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICYvKmV4Y2Vw
dGlvbmNvZGUqLyApIGNvbnN0Ci17Ci0gICAgTm9kZUltcGw6OklkIHNlYXJjaElkID0gbV9kb2Mt
PnRhZ0lkKG5hbWVzcGFjZVVSSS5pbXBsZW1lbnRhdGlvbigpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxOYW1lLmltcGxlbWVudGF0aW9u
KCksIHRydWUpOwotCi0gICAgUVB0ckxpc3RJdGVyYXRvcjxOb2RlSW1wbD4gaXQoKm1fY29udGVu
dHMpOwotICAgIGZvciAoOyBpdC5jdXJyZW50KCk7ICsraXQpCi0gICAgICAgIGlmIChpdC5jdXJy
ZW50KCktPmlkKCkgPT0gc2VhcmNoSWQpCi0gICAgICAgICAgICByZXR1cm4gaXQuY3VycmVudCgp
OwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLU5vZGVJbXBsICpHZW5lcmljUk9OYW1lZE5vZGVNYXBJ
bXBsOjpzZXROYW1lZEl0ZW1OUyggTm9kZUltcGwgKi8qYXJnKi8sIGludCAmZXhjZXB0aW9uY29k
ZSApCi17Ci0gICAgLy8gY2FuJ3QgbW9kaWZ5IHRoaXMgbGlzdCB0aHJvdWdoIHN0YW5kYXJkIERP
TSBmdW5jdGlvbnMKLSAgICAvLyBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI6IFJhaXNlZCBp
ZiB0aGlzIG1hcCBpcyByZWFkb25seQotICAgIGV4Y2VwdGlvbmNvZGUgPSBET01FeGNlcHRpb246
Ok5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUjsKLSAgICByZXR1cm4gMDsKLX0KLQotTm9kZUlt
cGwgKkdlbmVyaWNST05hbWVkTm9kZU1hcEltcGw6OnJlbW92ZU5hbWVkSXRlbU5TKCBjb25zdCBE
T01TdHJpbmcgJi8qbmFtZXNwYWNlVVJJKi8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IERPTVN0cmluZyAmLypsb2NhbE5hbWUq
LywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50ICZleGNlcHRpb25jb2RlICkKLXsKLSAgICAvLyBjYW4ndCBtb2RpZnkgdGhpcyBsaXN0
IHRocm91Z2ggc3RhbmRhcmQgRE9NIGZ1bmN0aW9ucwotICAgIGV4Y2VwdGlvbmNvZGUgPSBET01F
eGNlcHRpb246Ok5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUjsKLSAgICByZXR1cm4gMDsKLX0K
LQotdm9pZCBHZW5lcmljUk9OYW1lZE5vZGVNYXBJbXBsOjphZGROb2RlKE5vZGVJbXBsICpuKQot
ewotICAgIC8vIFRoZSBzcGVjIHNheXMgdGhhdCBpbiB0aGUgY2FzZSBvZiBkdXBsaWNhdGVzIHdl
IG9ubHkga2VlcCB0aGUgZmlyc3Qgb25lCi0gICAgaW50IGV4Y2VwdGlvbmNvZGUgPSAwOwotICAg
IGlmIChnZXROYW1lZEl0ZW0obi0+bm9kZU5hbWUoKSxleGNlcHRpb25jb2RlKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgbi0+cmVmKCk7Ci0gICAgbV9jb250ZW50cy0+YXBwZW5kKG4pOwotfQot
Ci0jZW5kaWYKSW5kZXg6IGtodG1sL3htbC9kb21fbm9kZWltcGwuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC94bWwvZG9tX25vZGVpbXBsLmgsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuODcKZGlmZiAtdSAtcCAtcjEuODcga2h0bWwveG1sL2RvbV9ub2RlaW1w
bC5oCi0tLSBraHRtbC94bWwvZG9tX25vZGVpbXBsLmgJMjMgSnVuIDIwMDUgMTk6NDc6NTAgLTAw
MDAJMS44NworKysga2h0bWwveG1sL2RvbV9ub2RlaW1wbC5oCTcgSnVsIDIwMDUgMDU6NTk6MzMg
LTAwMDAKQEAgLTU5LDYgKzU5LDcgQEAgY2xhc3MgRXZlbnRJbXBsOwogY2xhc3MgRXZlbnRMaXN0
ZW5lcjsKIGNsYXNzIE5vZGVMaXN0SW1wbDsKIGNsYXNzIE5hbWVkQXR0ck1hcEltcGw7CitjbGFz
cyBRdWFsaWZpZWROYW1lOwogY2xhc3MgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXI7CiAKIC8vIFRo
ZSBuYW1lc3BhY2UgdXNlZCBmb3IgWEhUTUwgZWxlbWVudHMKQEAgLTEwMiw2ICsxMDMsNyBAQCBw
dWJsaWM6CiAgICAgTUFJTl9USFJFQURfQUxMT0NBVEVEOwogCiAgICAgLy8gRE9NIG1ldGhvZHMg
JiBhdHRyaWJ1dGVzIGZvciBOb2RlCisgICAgdmlydHVhbCBib29sIGhhc1RhZ05hbWUoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgdGFnTmFtZSkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0
dWFsIERPTVN0cmluZyBub2RlTmFtZSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIERPTVN0cmlu
ZyBub2RlVmFsdWUoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0Tm9kZVZhbHVlKCBjb25z
dCBET01TdHJpbmcgJl9ub2RlVmFsdWUsIGludCAmZXhjZXB0aW9uY29kZSApOwpAQCAtMTIyLDE0
ICsxMjQsMTQgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCByZW1vdmUoaW50ICZleGNlcHRp
b25jb2RlKTsKICAgICB2aXJ0dWFsIGJvb2wgaGFzQ2hpbGROb2RlcyAoICApIGNvbnN0OwogICAg
IHZpcnR1YWwgTm9kZUltcGwgKmNsb25lTm9kZSAoIGJvb2wgZGVlcCApID0gMDsKLSAgICB2aXJ0
dWFsIERPTVN0cmluZyBsb2NhbE5hbWUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIERPTVN0cmluZyBu
YW1lc3BhY2VVUkkoKSBjb25zdDsKLSAgICB2aXJ0dWFsIERPTVN0cmluZyBwcmVmaXgoKSBjb25z
dDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0UHJlZml4KGNvbnN0IERPTVN0cmluZyAmX3ByZWZpeCwg
aW50ICZleGNlcHRpb25jb2RlICk7CisgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIGxv
Y2FsTmFtZSgpIGNvbnN0OworICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3Bh
Y2VVUkkoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4KCkg
Y29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNldFByZWZpeChjb25zdCBBdG9taWNTdHJpbmcgJl9w
cmVmaXgsIGludCAmZXhjZXB0aW9uY29kZSk7CiAgICAgdm9pZCBub3JtYWxpemUgKCk7CiAgICAg
c3RhdGljIGJvb2wgaXNTdXBwb3J0ZWQoY29uc3QgRE9NU3RyaW5nICZmZWF0dXJlLCBjb25zdCBE
T01TdHJpbmcgJnZlcnNpb24pOwogCi0gICAgTm9kZUltcGwgKmxhc3REZXNjZW5kZW50KCkgY29u
c3Q7CisgICAgTm9kZUltcGwgKmxhc3REZXNjZW5kYW50KCkgY29uc3Q7CiAKICAgICAvLyBPdGhl
ciBtZXRob2RzIChub3QgcGFydCBvZiBET00pCiAgICAgdmlydHVhbCBib29sIGlzRWxlbWVudE5v
ZGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQpAQCAtMTM3LDggKzEzOSw4IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIGJvb2wgaXNTdHlsZWRFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNBdHRyaWJ1dGVOb2RlKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNUZXh0Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9CisgICAgdmlydHVhbCBib29sIGlzQ29tbWVudE5vZGUoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0RvY3VtZW50Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9Ci0gICAgdmlydHVhbCBib29sIGlzWE1MRWxlbWVudE5vZGUoKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQogICAgIGJvb2wgaXNCbG9ja0Zsb3coKSBjb25zdDsKICAgICBib29sIGlzQmxv
Y2tGbG93T3JUYWJsZSgpIGNvbnN0OwogICAgIApAQCAtMTg4LDM1ICsxOTAsMTggQEAgcHVibGlj
OgogICAgIGJvb2wgaW5TYW1lUm9vdEVkaXRhYmxlRWxlbWVudChOb2RlSW1wbCAqKTsKICAgICBi
b29sIGluU2FtZUNvbnRhaW5pbmdCbG9ja0Zsb3dFbGVtZW50KE5vZGVJbXBsICopOwogICAgIAot
ICAgIC8vIHVzZWQgYnkgdGhlIHBhcnNlci4gRG9lc24ndCBkbyBhcyBtYW55IGVycm9yIGNoZWNr
aW5ncyBhcwotICAgIC8vIGFwcGVuZENoaWxkKCksIGFuZCByZXR1cm5zIHRoZSBub2RlIGludG8g
d2hpY2ggd2lsbCBiZSBwYXJzZWQgbmV4dC4KKyAgICAvLyB1c2VkIGJ5IHRoZSBwYXJzZXIuIENo
ZWNrcyBhZ2FpbnN0IHRoZSBEVEQsIHVubGlrZSBET00gb3BlcmF0aW9ucyBsaWtlCisgICAgLy8g
YXBwZW5kQ2hpbGQoKSwgYW5kIHJldHVybnMgdGhlIG5ldyBjb250YWluZXIgbm9kZSBmb3IgZnV0
dXJlIGluc2VydGlvbnMgYXMgeW91IHBhcnNlLgogICAgIHZpcnR1YWwgTm9kZUltcGwgKmFkZENo
aWxkKE5vZGVJbXBsICpuZXdDaGlsZCk7CiAgICAgCiAgICAgLy8gY2FsbGVkIGJ5IHRoZSBwYXJz
ZXIgd2hlbiB0aGlzIGVsZW1lbnQncyBjbG9zZSB0YWcgaXMgcmVhY2hlZCwKICAgICAvLyBzaWdu
YWxsaW5nIHRoYXQgYWxsIGNoaWxkIHRhZ3MgaGF2ZSBiZWVuIHBhcnNlZCBhbmQgYWRkZWQuCiAg
ICAgLy8gVGhpcyBpcyBvbmx5IG5lZWRlZCBmb3IgPGFwcGxldD4gYW5kIDxvYmplY3Q+IGVsZW1l
bnRzLCB3aGljaCBjYW4ndCBsYXkgdGhlbXNlbHZlcyBvdXQKICAgICAvLyB1bnRpbCB0aGV5IGtu
b3cgYWxsIG9mIHRoZWlyIG5lc3RlZCA8cGFyYW0+cy4gWzM2MDMxOTEsIDQwNDA4NDhdCi0gICAg
dmlydHVhbCB2b2lkIGNsb3NlUmVuZGVyZXIoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgY2xvc2VS
ZW5kZXJlcigpIHt9CisKKyAgICB0eXBlZGVmIFFfVUlOVDMyIElkOyAvLyBGSVhNRTogWWFuayB0
aGlzIG9uY2UgYXR0cmlidXRlcyBhcmUgYWxzbyBzd2l0Y2hlZCBvdmVyLgogCi0gICAgdHlwZWRl
ZiBRX1VJTlQzMiBJZDsKLSAgICAvLyBpZCgpIGlzIHVzZWQgdG8gZWFzaWx5IGFuZCBleGFjdGx5
IGlkZW50aWZ5IGEgbm9kZS4gSXQKLSAgICAvLyBpcyBvcHRpbWl6ZWQgZm9yIHF1aWNrIGNvbXBh
cmlzb24gYW5kIGxvdyBtZW1vcnkgY29uc3VtcHRpb24uCi0gICAgLy8gaXRzIHZhbHVlIGRlcGVu
ZHMgb24gdGhlIG93bmVyIGRvY3VtZW50IG9mIHRoZSBub2RlIGFuZCBpcwotICAgIC8vIGNhdGVn
b3JpemVkIGluIHRoZSBmb2xsb3dpbmcgd2F5OgotICAgIC8vIDEuLklEX0xBU1RfVEFHOiB0aGUg
bm9kZSBpbmhlcml0cyBIVE1MRWxlbWVudEltcGwgYW5kIGlzCi0gICAgLy8gICAgICAgICAgICAg
ICAgIHBhcnQgb2YgdGhlIEhUTUwgbmFtZXNwYWNlLgotICAgIC8vICAgICAgICAgICAgICAgICBU
aGUgSFRNTCBuYW1lc3BhY2UgaXMgZWl0aGVyIHRoZSBnbG9iYWwKLSAgICAvLyAgICAgICAgICAg
ICAgICAgb25lIChubyBuYW1lc3BhY2UpIG9yIHRoZSBYSFRNTCBuYW1lc3BhY2UKLSAgICAvLyAg
ICAgICAgICAgICAgICAgZGVwZW5kaW5nIG9uIHRoZSBvd25lciBkb2N1bWVudCdzIGRvY3R5cGUK
LSAgICAvLyBJRF9MQVNUX1RBRysxLi4weGZmZmY6IG5vbi1IVE1MIGVsZW1lbnRzIGluIHRoZSBn
bG9iYWwgbmFtZXNwYWNlCi0gICAgLy8gb3RoZXJzICAgICAgIG5vbi1IVE1MIGVsZW1lbnRzIGlu
IGEgbmFtZXNwYWNlLgotICAgIC8vICAgICAgICAgICAgICAgICB0aGUgdXBwZXIgMTYgYml0IGlk
ZW50aWZ5IHRoZSBuYW1lc3BhY2UKLSAgICAvLyAgICAgICAgICAgICAgICAgdGhlIGxvd2VyIDE2
IGJpdCBpZGVudGlmeSB0aGUgbG9jYWwgcGFydCBvZiB0aGUKLSAgICAvLyAgICAgICAgICAgICAg
ICAgcXVhbGlmaWVkIGVsZW1lbnQgbmFtZS4KLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3QgeyBy
ZXR1cm4gMDsgfTsKLSNpZiBBUFBMRV9DSEFOR0VTCi0gICAgSWQgaWRlbnRpZmllcigpIGNvbnN0
OwotI2VuZGlmCiAgICAgZW51bSBNb3VzZUV2ZW50VHlwZSB7CiAgICAgICAgIE1vdXNlUHJlc3Ms
CiAgICAgICAgIE1vdXNlUmVsZWFzZSwKQEAgLTI3OCw4ICsyNjMsNiBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCBib29sIGlzS2V5Ym9hcmRGb2N1c2FibGUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJv
b2wgaXNNb3VzZUZvY3VzYWJsZSgpIGNvbnN0OwogICAgIAotICAgIHZpcnR1YWwgYm9vbCBpc0lu
bGluZSgpIGNvbnN0OwotICAgIAogICAgIHZpcnR1YWwgYm9vbCBpc0NvbnRlbnRFZGl0YWJsZSgp
IGNvbnN0OwogICAgIHZpcnR1YWwgUVJlY3QgZ2V0UmVjdCgpIGNvbnN0OwogCkBAIC0zNjksMTEg
KzM1MiwxNSBAQCBwdWJsaWM6CiAgICAga2h0bWw6OlJlbmRlck9iamVjdCAqcHJldmlvdXNSZW5k
ZXJlcigpOwogICAgIHZvaWQgc2V0UmVuZGVyZXIoa2h0bWw6OlJlbmRlck9iamVjdCogcmVuZGVy
ZXIpIHsgbV9yZW5kZXIgPSByZW5kZXJlcjsgfQogICAgIAotICAgIHZvaWQgY2hlY2tTZXRQcmVm
aXgoY29uc3QgRE9NU3RyaW5nICZfcHJlZml4LCBpbnQgJmV4Y2VwdGlvbmNvZGUpOwotICAgIHZv
aWQgY2hlY2tBZGRDaGlsZChOb2RlSW1wbCAqbmV3Q2hpbGQsIGludCAmZXhjZXB0aW9uY29kZSk7
CisgICAgdm9pZCBjaGVja1NldFByZWZpeChjb25zdCBBdG9taWNTdHJpbmcgJl9wcmVmaXgsIGlu
dCAmZXhjZXB0aW9uY29kZSk7CiAgICAgYm9vbCBpc0FuY2VzdG9yKGNvbnN0IE5vZGVJbXBsICop
IGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBjaGlsZEFsbG93ZWQoIE5vZGVJbXBsICpuZXdDaGls
ZCApOwogCisJLy8gVGhlc2UgdHdvIG1ldGhvZHMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4gIFRo
ZSBmb3JtZXIgaXMgdXNlZCB0byBkbyBzdHJpY3QgZXJyb3ItY2hlY2tpbmcKKwkvLyB3aGVuIGFk
ZGluZyBjaGlsZHJlbiB2aWEgdGhlIHB1YmxpYyBET00gQVBJIChlLmcuLCBhcHBlbmRDaGlsZCgp
KS4gIFRoZSBsYXR0ZXIgaXMgY2FsbGVkIG9ubHkgd2hlbiBwYXJzaW5nLCAKKwkvLyB0byBzYW5p
dHktY2hlY2sgYWdhaW5zdCB0aGUgRFREIGZvciBlcnJvciByZWNvdmVyeS4KKwl2b2lkIGNoZWNr
QWRkQ2hpbGQoTm9kZUltcGwgKm5ld0NoaWxkLCBpbnQgJmV4Y2VwdGlvbmNvZGUpOyAgICAvLyBF
cnJvci1jaGVja2luZyB3aGVuIGFkZGluZyB2aWEgdGhlIERPTSBBUEkKKwl2aXJ0dWFsIGJvb2wg
Y2hpbGRBbGxvd2VkKE5vZGVJbXBsICpuZXdDaGlsZCk7CQkJCSAgIC8vIEVycm9yLWNoZWNraW5n
IGR1cmluZyBwYXJzaW5nIHRoYXQgY2hlY2tzIHRoZSBEVEQKKwkKICAgICB2aXJ0dWFsIGxvbmcg
bWF4T2Zmc2V0KCkgY29uc3Q7CiAgICAgbG9uZyBtYXhEZWVwT2Zmc2V0KCkgY29uc3Q7CiAgICAg
dmlydHVhbCBsb25nIGNhcmV0TWluT2Zmc2V0KCkgY29uc3Q7CkBAIC00ODEsNyArNDY4LDcgQEAg
cHVibGljOgogICAgIHZvaWQgbm90aWZ5Tm9kZUxpc3RzU3VidHJlZU1vZGlmaWVkKCk7CiAgICAg
dm9pZCBub3RpZnlMb2NhbE5vZGVMaXN0c1N1YnRyZWVNb2RpZmllZCgpOwogCi0gICAgU2hhcmVk
UHRyPE5vZGVMaXN0SW1wbD4gZ2V0RWxlbWVudHNCeVRhZ05hbWUoY29uc3QgRE9NU3RyaW5nICZu
YW1lKSB7IHJldHVybiBnZXRFbGVtZW50c0J5VGFnTmFtZU5TKERPTVN0cmluZygpLCBuYW1lKTsg
fQorICAgIFNoYXJlZFB0cjxOb2RlTGlzdEltcGw+IGdldEVsZW1lbnRzQnlUYWdOYW1lKGNvbnN0
IERPTVN0cmluZyAmbmFtZSkgeyByZXR1cm4gZ2V0RWxlbWVudHNCeVRhZ05hbWVOUygiKiIsIG5h
bWUpOyB9CiAgICAgU2hhcmVkUHRyPE5vZGVMaXN0SW1wbD4gZ2V0RWxlbWVudHNCeVRhZ05hbWVO
Uyhjb25zdCBET01TdHJpbmcgJm5hbWVzcGFjZVVSSSwgY29uc3QgRE9NU3RyaW5nICZsb2NhbE5h
bWUpOwogCiBwcml2YXRlOiAvLyBtZW1iZXJzCkBAIC02MTgsMzAgKzYwNSw2IEBAIHByb3RlY3Rl
ZDoKICAgICB2aXJ0dWFsIGJvb2wgbm9kZU1hdGNoZXMoIE5vZGVJbXBsICp0ZXN0Tm9kZSApIGNv
bnN0OwogfTsKIAotCi0vKioKLSAqIE5vZGVMaXN0IHdoaWNoIGxpc3RzIGFsbCBOb2RlcyBpbiBh
IGRvY3VtZW50IHdpdGggYSBnaXZlbiB0YWcgbmFtZQotICovCi1jbGFzcyBUYWdOb2RlTGlzdElt
cGwgOiBwdWJsaWMgTm9kZUxpc3RJbXBsCi17Ci1wdWJsaWM6Ci0gICAgVGFnTm9kZUxpc3RJbXBs
KCBOb2RlSW1wbCAqbiwgTm9kZUltcGw6OklkIHRhZ0lkLCBOb2RlSW1wbDo6SWQgdGFnSWRNYXNr
ICk7Ci0KLSAgICAvLyBET00gbWV0aG9kcyBvdmVycmlkZGVuIGZyb20gIHBhcmVudCBjbGFzc2Vz
Ci0KLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgbGVuZ3RoKCkgY29uc3Q7Ci0gICAgdmlydHVh
bCBOb2RlSW1wbCAqaXRlbSAoIHVuc2lnbmVkIGxvbmcgaW5kZXggKSBjb25zdDsKLQotICAgIC8v
IE90aGVyIG1ldGhvZHMgKG5vdCBwYXJ0IG9mIERPTSkKLQotcHJvdGVjdGVkOgotICAgIHZpcnR1
YWwgYm9vbCBub2RlTWF0Y2hlcyggTm9kZUltcGwgKnRlc3ROb2RlICkgY29uc3Q7Ci0KLSAgICBO
b2RlSW1wbDo6SWQgbV9pZDsKLSAgICBOb2RlSW1wbDo6SWQgbV9pZE1hc2s7Ci19OwotCi0KIC8q
KgogICogTm9kZUxpc3Qgd2hpY2ggbGlzdHMgYWxsIE5vZGVzIGluIGEgRWxlbWVudCB3aXRoIGEg
Z2l2ZW4gIm5hbWU9IiB0YWcKICAqLwpJbmRleDoga2h0bWwveG1sL2RvbV9wb3NpdGlvbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwveG1sL2RvbV9wb3Np
dGlvbi5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNzEKZGlmZiAtdSAtcCAtcjEuNzEga2h0
bWwveG1sL2RvbV9wb3NpdGlvbi5jcHAKLS0tIGtodG1sL3htbC9kb21fcG9zaXRpb24uY3BwCTIx
IEp1biAyMDA1IDE4OjExOjEwIC0wMDAwCTEuNzEKKysrIGtodG1sL3htbC9kb21fcG9zaXRpb24u
Y3BwCTcgSnVsIDIwMDUgMDU6NTk6MzMgLTAwMDAKQEAgLTM1LDcgKzM1LDYgQEAKICNpbmNsdWRl
ICJkb20yX3JhbmdlaW1wbC5oIgogI2luY2x1ZGUgImRvbTJfdmlld3NpbXBsLmgiCiAjaW5jbHVk
ZSAiaGVscGVyLmgiCi0jaW5jbHVkZSAiaHRtbHRhZ3MuaCIKICNpbmNsdWRlICJ0ZXh0X2FmZmlu
aXR5LmgiCiAjaW5jbHVkZSAidmlzaWJsZV9wb3NpdGlvbi5oIgogI2luY2x1ZGUgInZpc2libGVf
dW5pdHMuaCIKQEAgLTQ1LDYgKzQ0LDcgQEAKICNpbmNsdWRlICJyZW5kZXJpbmcvcmVuZGVyX3N0
eWxlLmgiCiAjaW5jbHVkZSAicmVuZGVyaW5nL3JlbmRlcl90ZXh0LmgiCiAjaW5jbHVkZSAiZWRp
dGluZy92aXNpYmxlX3RleHQuaCIKKyNpbmNsdWRlICJodG1sbmFtZXMuaCIKIAogI2lmIEFQUExF
X0NIQU5HRVMKICNpbmNsdWRlICJLV1FBc3NlcnRpb25zLmgiCkBAIC00NDAsNyArNDQwLDcgQEAg
UG9zaXRpb24gUG9zaXRpb246OmRvd25zdHJlYW0oKSBjb25zdAogCiAgICAgICAgIC8vIHN0b3Ag
YmVmb3JlIGdvaW5nIGFib3ZlIHRoZSBib2R5LCB1cCBpbnRvIHRoZSBoZWFkCiAgICAgICAgIC8v
IHJldHVybiB0aGUgbGFzdCB2aXNpYmxlIHN0cmVhbWVyIHBvc2l0aW9uCi0gICAgICAgIGlmIChj
dXJyZW50Tm9kZS0+aWQoKSA9PSBJRF9CT0RZICYmIGN1cnJlbnRPZmZzZXQgPj0gKGludCkgY3Vy
cmVudE5vZGUtPmNoaWxkTm9kZUNvdW50KCkpCisgICAgICAgIGlmIChjdXJyZW50Tm9kZS0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OmJvZHkoKSkgJiYgY3VycmVudE9mZnNldCA+PSAoaW50KSBjdXJy
ZW50Tm9kZS0+Y2hpbGROb2RlQ291bnQoKSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgCiAgICAgICAgIC8vIGxpbWl0IHRyYXZlcnNhbCB0byBibG9jayBvciB0YWJsZSBlbmNsb3Np
bmcgdGhlIG9yaWdpbmFsIGVsZW1lbnQKQEAgLTY5NCw3ICs2OTQsNyBAQCBib29sIFBvc2l0aW9u
OjpyZW5kZXJzSW5EaWZmZXJlbnRQb3NpdGlvCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAK
ICAgICBpZiAobm9kZSgpID09IHBvcy5ub2RlKCkpIHsKLSAgICAgICAgaWYgKG5vZGUoKS0+aWQo
KSA9PSBJRF9CUikKKyAgICAgICAgaWYgKG5vZGUoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJy
KCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIGlmIChvZmZzZXQoKSA9
PSBwb3Mub2Zmc2V0KCkpCkBAIC03MDYsMTAgKzcwNiwxMCBAQCBib29sIFBvc2l0aW9uOjpyZW5k
ZXJzSW5EaWZmZXJlbnRQb3NpdGlvCiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgaWYgKG5v
ZGUoKS0+aWQoKSA9PSBJRF9CUiAmJiBwb3MuaW5SZW5kZXJlZENvbnRlbnQoKSkKKyAgICBpZiAo
bm9kZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YnIoKSkgJiYgcG9zLmluUmVuZGVyZWRDb250
ZW50KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgIAotICAgIGlmIChw
b3Mubm9kZSgpLT5pZCgpID09IElEX0JSICYmIGluUmVuZGVyZWRDb250ZW50KCkpCisgICAgaWYg
KHBvcy5ub2RlKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpicigpKSAmJiBpblJlbmRlcmVkQ29u
dGVudCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICAKICAgICBpZiAo
bm9kZSgpLT5lbmNsb3NpbmdCbG9ja0Zsb3dFbGVtZW50KCkgIT0gcG9zLm5vZGUoKS0+ZW5jbG9z
aW5nQmxvY2tGbG93RWxlbWVudCgpKQpAQCAtNzY0LDcgKzc2NCw3IEBAIFBvc2l0aW9uIFBvc2l0
aW9uOjpsZWFkaW5nV2hpdGVzcGFjZVBvc2kKICAgICBpZiAoaXNOdWxsKCkpCiAgICAgICAgIHJl
dHVybiBQb3NpdGlvbigpOwogICAgIAotICAgIGlmICh1cHN0cmVhbSgpLm5vZGUoKS0+aWQoKSA9
PSBJRF9CUikKKyAgICBpZiAodXBzdHJlYW0oKS5ub2RlKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjpicigpKSkKICAgICAgICAgcmV0dXJuIFBvc2l0aW9uKCk7CiAKICAgICBQb3NpdGlvbiBwcmV2
ID0gcHJldmlvdXNDaGFyYWN0ZXJQb3NpdGlvbihhZmZpbml0eSk7CkBAIC03OTQsNyArNzk0LDcg
QEAgUG9zaXRpb24gUG9zaXRpb246OnRyYWlsaW5nV2hpdGVzcGFjZVBvcwogICAgICAgICB9CiAg
ICAgfQogCi0gICAgaWYgKGRvd25zdHJlYW0oKS5ub2RlKCktPmlkKCkgPT0gSURfQlIpCisgICAg
aWYgKGRvd25zdHJlYW0oKS5ub2RlKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpicigpKSkKICAg
ICAgICAgcmV0dXJuIFBvc2l0aW9uKCk7CiAKICAgICBQb3NpdGlvbiBuZXh0ID0gbmV4dENoYXJh
Y3RlclBvc2l0aW9uKGFmZmluaXR5KTsKSW5kZXg6IGtodG1sL3htbC9kb21fcW5hbWUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3htbC9kb21fcW5hbWUu
Y3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIKZGlmZiAtdSAtcCAtcjEuMiBraHRtbC94bWwv
ZG9tX3FuYW1lLmNwcAotLS0ga2h0bWwveG1sL2RvbV9xbmFtZS5jcHAJMTYgSnVuIDIwMDUgMjE6
MDY6NDYgLTAwMDAJMS4yCisrKyBraHRtbC94bWwvZG9tX3FuYW1lLmNwcAk3IEp1bCAyMDA1IDA1
OjU5OjMzIC0wMDAwCkBAIC0xOSw0OCArMTksOTggQEAKICAqIEJvc3RvbiwgTUEgMDIxMTEtMTMw
NywgVVNBLgogICovCiAKLSNpbmNsdWRlIDxxcHRyZGljdC5oPgogI2luY2x1ZGUgImRvbV9xbmFt
ZS5oIgorI2luY2x1ZGUgIm1pc2MvaGFzaHNldC5oIgorCit1c2luZyBraHRtbDo6SGFzaFNldDsK
IAogbmFtZXNwYWNlIERPTSB7CiAKLXN0YXRpYyBRUHRyRGljdDxRUHRyRGljdDxRUHRyRGljdDxR
dWFsaWZpZWROYW1lOjpRdWFsaWZpZWROYW1lSW1wbD4gPiA+KiBnTmFtZUNhY2hlID0gMDsKK3N0
cnVjdCBRdWFsaWZpZWROYW1lQ29tcG9uZW50cyB7CisgICAgRE9NU3RyaW5nSW1wbCAqbV9wcmVm
aXg7CisgICAgRE9NU3RyaW5nSW1wbCAqbV9sb2NhbE5hbWU7CisgICAgRE9NU3RyaW5nSW1wbCAq
bV9uYW1lc3BhY2U7Cit9OwogCi1RdWFsaWZpZWROYW1lOjpRdWFsaWZpZWROYW1lKGNvbnN0IEF0
b21pY1N0cmluZyYgcCwgY29uc3QgQXRvbWljU3RyaW5nJiBsLCBjb25zdCBBdG9taWNTdHJpbmcm
IG4pCisvLyBHb2xkZW4gcmF0aW8gLSBhcmJpdHJhcnkgc3RhcnQgdmFsdWUgdG8gYXZvaWQgbWFw
cGluZyBhbGwgMCdzIHRvIGFsbCAwJ3MKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBQSEkgPSAweDll
Mzc3OWI5VTsKKyAgICAKK2lubGluZSB1bnNpZ25lZCBoYXNoQ29tcG9uZW50cyhjb25zdCBRdWFs
aWZpZWROYW1lQ29tcG9uZW50cyYgYnVmKQogewotICAgIC8vIE9idGFpbiBhbiBhcHByb3ByaWF0
ZSBpbm5lciBmcm9tIG91ciBkaWN0aW9uYXJ5LgotICAgIFFQdHJEaWN0PFFQdHJEaWN0PFF1YWxp
ZmllZE5hbWVJbXBsPiA+KiBuYW1lc3BhY2VEaWN0ID0gMDsKLSAgICBRUHRyRGljdDxRdWFsaWZp
ZWROYW1lSW1wbD4qIHByZWZpeERpY3QgPSAwOwotICAgIGlmIChnTmFtZUNhY2hlKSB7Ci0gICAg
ICAgIG5hbWVzcGFjZURpY3QgPSBnTmFtZUNhY2hlLT5maW5kKCh2b2lkKikobi5pbXBsZW1lbnRh
dGlvbigpKSk7Ci0gICAgICAgIGlmIChuYW1lc3BhY2VEaWN0KSB7Ci0gICAgICAgICAgICBwcmVm
aXhEaWN0ID0gbmFtZXNwYWNlRGljdC0+ZmluZCgodm9pZCopcC5pbXBsZW1lbnRhdGlvbigpKTsK
LSAgICAgICAgICAgIGlmIChwcmVmaXhEaWN0KQotICAgICAgICAgICAgICAgIG1faW1wbCA9IHBy
ZWZpeERpY3QtPmZpbmQoKHZvaWQqKWwuaW1wbGVtZW50YXRpb24oKSk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBpZiAoIW1faW1wbCkgewotICAgICAgICBtX2ltcGwgPSBuZXcgUXVhbGlmaWVk
TmFtZUltcGwocCwgbCwgbik7Ci0KLSAgICAgICAgLy8gUHV0IHRoZSBvYmplY3QgaW50byB0aGUg
aGFzaC4KLSAgICAgICAgaWYgKCFnTmFtZUNhY2hlKQotICAgICAgICAgICAgZ05hbWVDYWNoZSA9
IG5ldyBRUHRyRGljdDxRUHRyRGljdDxRUHRyRGljdDxRdWFsaWZpZWROYW1lSW1wbD4gPiA+Owot
ICAgICAgICAKLSAgICAgICAgaWYgKCFuYW1lc3BhY2VEaWN0KSB7Ci0gICAgICAgICAgICBuYW1l
c3BhY2VEaWN0ID0gbmV3IFFQdHJEaWN0PFFQdHJEaWN0PFF1YWxpZmllZE5hbWVJbXBsPiA+Owot
ICAgICAgICAgICAgbmFtZXNwYWNlRGljdC0+c2V0QXV0b0RlbGV0ZSh0cnVlKTsKLSAgICAgICAg
ICAgIGdOYW1lQ2FjaGUtPmluc2VydCgodm9pZCopbi5pbXBsZW1lbnRhdGlvbigpLCBuYW1lc3Bh
Y2VEaWN0KTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKCFwcmVmaXhEaWN0KSB7
Ci0gICAgICAgICAgICBwcmVmaXhEaWN0ID0gbmV3IFFQdHJEaWN0PFF1YWxpZmllZE5hbWVJbXBs
PjsKLSAgICAgICAgICAgIG5hbWVzcGFjZURpY3QtPmluc2VydCgodm9pZCopcC5pbXBsZW1lbnRh
dGlvbigpLCBwcmVmaXhEaWN0KTsKLSAgICAgICAgfQorICAgIHVuc2lnbmVkIGwgPSBzaXplb2Yo
UXVhbGlmaWVkTmFtZUNvbXBvbmVudHMpIC8gc2l6ZW9mKHVpbnQxNl90KTsKKyAgICBjb25zdCB1
aW50MTZfdCAqcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDE2X3QqPigmYnVmKTsKKyAg
ICB1aW50MzJfdCBoYXNoID0gUEhJOworICAgIHVpbnQzMl90IHRtcDsKICAgICAgICAgCi0gICAg
ICAgIHByZWZpeERpY3QtPmluc2VydCgodm9pZCopbC5pbXBsZW1lbnRhdGlvbigpLCBtX2ltcGwp
OworICAgIGludCByZW0gPSBsICYgMTsKKyAgICBsID4+PSAxOworICAgICAgICAKKyAgICAvLyBN
YWluIGxvb3AKKyAgICBmb3IgKDsgbCA+IDA7IGwtLSkgeworICAgICAgICBoYXNoICs9IHNbMF07
CisgICAgICAgIHRtcCA9IChzWzFdIDw8IDExKSBeIGhhc2g7CisgICAgICAgIGhhc2ggPSAoaGFz
aCA8PCAxNikgXiB0bXA7CisgICAgICAgIHMgKz0gMjsKKyAgICAgICAgaGFzaCArPSBoYXNoID4+
IDExOwogICAgIH0KICAgICAKKyAgICAvLyBIYW5kbGUgZW5kIGNhc2UKKyAgICBpZiAocmVtKSB7
CisgICAgICAgIGhhc2ggKz0gc1swXTsKKyAgICAgICAgaGFzaCBePSBoYXNoIDw8IDExOworICAg
ICAgICBoYXNoICs9IGhhc2ggPj4gMTc7CisgICAgfQorICAgICAgICAKKyAgICAvLyBGb3JjZSAi
YXZhbGFuY2hpbmciIG9mIGZpbmFsIDEyNyBiaXRzCisgICAgaGFzaCBePSBoYXNoIDw8IDM7Cisg
ICAgaGFzaCArPSBoYXNoID4+IDU7CisgICAgaGFzaCBePSBoYXNoIDw8IDI7CisgICAgaGFzaCAr
PSBoYXNoID4+IDE1OworICAgIGhhc2ggXj0gaGFzaCA8PCAxMDsKKyAgICAgICAgCisgICAgLy8g
dGhpcyBhdm9pZHMgZXZlciByZXR1cm5pbmcgYSBoYXNoIGNvZGUgb2YgMCwgc2luY2UgdGhhdCBp
cyB1c2VkIHRvCisgICAgLy8gc2lnbmFsICJoYXNoIG5vdCBjb21wdXRlZCB5ZXQiLCB1c2luZyBh
IHZhbHVlIHRoYXQgaXMgbGlrZWx5IHRvIGJlCisgICAgLy8gZWZmZWN0aXZlbHkgdGhlIHNhbWUg
YXMgMCB3aGVuIHRoZSBsb3cgYml0cyBhcmUgbWFza2VkCisgICAgaWYgKGhhc2ggPT0gMCkKKyAg
ICAgICAgaGFzaCA9IDB4ODAwMDAwMDA7CisgICAgICAgIAorICAgIHJldHVybiBoYXNoOworfQor
CitzdHJ1Y3QgUU5hbWVIYXNoIHsKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBRdWFs
aWZpZWROYW1lOjpRdWFsaWZpZWROYW1lSW1wbCAqbmFtZSkgeyAgICAKKyAgICAgICAgUXVhbGlm
aWVkTmFtZUNvbXBvbmVudHMgY29tcG9uZW50cyA9IHsgbmFtZS0+bV9wcmVmaXguaW1wbGVtZW50
YXRpb24oKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5hbWUtPm1fbG9jYWxOYW1lLmltcGxlbWVudGF0aW9uKCksIAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLT5tX25hbWVzcGFjZS5pbXBsZW1lbnRh
dGlvbigpIH07CisgICAgICAgIHJldHVybiBoYXNoQ29tcG9uZW50cyhjb21wb25lbnRzKTsKKyAg
ICB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgUXVhbGlmaWVkTmFtZTo6UXVhbGlmaWVk
TmFtZUltcGwgKmEsIGNvbnN0IFF1YWxpZmllZE5hbWU6OlF1YWxpZmllZE5hbWVJbXBsICpiKSB7
IHJldHVybiBhID09IGI7IH0KK307CisKK3R5cGVkZWYgSGFzaFNldDxRdWFsaWZpZWROYW1lOjpR
dWFsaWZpZWROYW1lSW1wbCosIFFOYW1lSGFzaD4gUU5hbWVTZXQ7CisKK3N0YXRpYyBRTmFtZVNl
dCAqZ05hbWVDYWNoZTsKKworaW5saW5lIGJvb2wgZXF1YWxDb21wb25lbnRzKFF1YWxpZmllZE5h
bWU6OlF1YWxpZmllZE5hbWVJbXBsKiBjb25zdCYgbmFtZSwgY29uc3QgUXVhbGlmaWVkTmFtZUNv
bXBvbmVudHMgJmNvbXBvbmVudHMpCit7CisgICAgcmV0dXJuIGNvbXBvbmVudHMubV9sb2NhbE5h
bWUgPT0gbmFtZS0+bV9sb2NhbE5hbWUuaW1wbGVtZW50YXRpb24oKSAmJgorICAgICAgICAgICBj
b21wb25lbnRzLm1fbmFtZXNwYWNlID09IG5hbWUtPm1fbmFtZXNwYWNlLmltcGxlbWVudGF0aW9u
KCkgJiYKKyAgICAgICAgICAgY29tcG9uZW50cy5tX3ByZWZpeCA9PSBuYW1lLT5tX3ByZWZpeC5p
bXBsZW1lbnRhdGlvbigpOworfQorCitpbmxpbmUgUXVhbGlmaWVkTmFtZTo6UXVhbGlmaWVkTmFt
ZUltcGwgKmNvbnZlcnRDb21wb25lbnRzKGNvbnN0IFF1YWxpZmllZE5hbWVDb21wb25lbnRzJiBj
b21wb25lbnRzLCB1bnNpZ25lZCBoYXNoKQoreworICAgIHJldHVybiBuZXcgUXVhbGlmaWVkTmFt
ZTo6UXVhbGlmaWVkTmFtZUltcGwoY29tcG9uZW50cy5tX3ByZWZpeCwgY29tcG9uZW50cy5tX2xv
Y2FsTmFtZSwgY29tcG9uZW50cy5tX25hbWVzcGFjZSk7Cit9CisKKworUXVhbGlmaWVkTmFtZTo6
UXVhbGlmaWVkTmFtZShjb25zdCBBdG9taWNTdHJpbmcmIHAsIGNvbnN0IEF0b21pY1N0cmluZyYg
bCwgY29uc3QgQXRvbWljU3RyaW5nJiBuKQorICAgIDogbV9pbXBsKDApCit7CisgICAgaWYgKCFn
TmFtZUNhY2hlKQorICAgICAgICBnTmFtZUNhY2hlID0gbmV3IFFOYW1lU2V0OworICAgIFF1YWxp
ZmllZE5hbWVDb21wb25lbnRzIGNvbXBvbmVudHMgPSB7IHAuaW1wbGVtZW50YXRpb24oKSwgbC5p
bXBsZW1lbnRhdGlvbigpLCBuLmltcGxlbWVudGF0aW9uKCkgfTsKKyAgICBtX2ltcGwgPSAqZ05h
bWVDYWNoZS0+aW5zZXJ0PFF1YWxpZmllZE5hbWVDb21wb25lbnRzLCBoYXNoQ29tcG9uZW50cywg
ZXF1YWxDb21wb25lbnRzLCBjb252ZXJ0Q29tcG9uZW50cz4oY29tcG9uZW50cykuZmlyc3Q7ICAg
IAogICAgIHJlZigpOwogfQogCkBAIC04OCwzMSArMTM4LDE2IEBAIGNvbnN0IFF1YWxpZmllZE5h
bWUmIFF1YWxpZmllZE5hbWU6Om9wZXIKIAogdm9pZCBRdWFsaWZpZWROYW1lOjpkZXJlZigpCiB7
Ci0gICAgaWYgKG1faW1wbC0+cmVmQ291bnQoKSA9PSAxKSB7Ci0gICAgICAgIC8vIEJlZm9yZSBk
ZWNyZW1lbnRpbmcgdGhlIHJlZiB0byAwLCByZW1vdmUgb3Vyc2VsdmVzIGZyb20gdGhlIGhhc2gg
dGFibGUuCi0gICAgICAgIFFQdHJEaWN0PFFQdHJEaWN0PFF1YWxpZmllZE5hbWVJbXBsPiA+KiBu
YW1lc3BhY2VEaWN0ID0gMDsKLSAgICAgICAgUVB0ckRpY3Q8UXVhbGlmaWVkTmFtZUltcGw+KiBw
cmVmaXhEaWN0ID0gMDsKLSAgICAgICAgaWYgKGdOYW1lQ2FjaGUpIHsKLSAgICAgICAgICAgIG5h
bWVzcGFjZURpY3QgPSBnTmFtZUNhY2hlLT5maW5kKCh2b2lkKikobmFtZXNwYWNlVVJJKCkuaW1w
bGVtZW50YXRpb24oKSkpOwotICAgICAgICAgICAgaWYgKG5hbWVzcGFjZURpY3QpIHsKLSAgICAg
ICAgICAgICAgICBwcmVmaXhEaWN0ID0gbmFtZXNwYWNlRGljdC0+ZmluZCgodm9pZCopcHJlZml4
KCkuaW1wbGVtZW50YXRpb24oKSk7Ci0gICAgICAgICAgICAgICAgaWYgKHByZWZpeERpY3QpCi0g
ICAgICAgICAgICAgICAgICAgIHByZWZpeERpY3QtPnJlbW92ZSgodm9pZCopbG9jYWxOYW1lKCku
aW1wbGVtZW50YXRpb24oKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
CisgICAgaWYgKG1faW1wbC0+aGFzT25lUmVmKCkpCisgICAgICAgIGdOYW1lQ2FjaGUtPnJlbW92
ZShtX2ltcGwpOworICAgICAgICAKICAgICBtX2ltcGwtPmRlcmVmKCk7CiB9CiAKLWJvb2wgb3Bl
cmF0b3I9PShjb25zdCBBdG9taWNTdHJpbmcmIGEsIGNvbnN0IFF1YWxpZmllZE5hbWUmIHEpCi17
IAotICAgIHJldHVybiBhID09IHEubG9jYWxOYW1lKCk7Ci19Ci0KLWJvb2wgb3BlcmF0b3I9PShj
b25zdCBRdWFsaWZpZWROYW1lJiBxLCBjb25zdCBBdG9taWNTdHJpbmcmIGEpCit2b2lkIFF1YWxp
ZmllZE5hbWU6OnNldFByZWZpeChjb25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCkKIHsKLSAgICBy
ZXR1cm4gYSA9PSBxLmxvY2FsTmFtZSgpOworICAgIFF1YWxpZmllZE5hbWUgb3RoZXIocHJlZml4
LCBsb2NhbE5hbWUoKSwgbmFtZXNwYWNlVVJJKCkpOworICAgICp0aGlzID0gb3RoZXI7CiB9CiAK
IH0KSW5kZXg6IGtodG1sL3htbC9kb21fcW5hbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvV2ViQ29yZS9raHRtbC94bWwvZG9tX3FuYW1lLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuMgpkaWZmIC11IC1wIC1yMS4yIGtodG1sL3htbC9kb21fcW5hbWUuaAotLS0ga2h0bWwveG1s
L2RvbV9xbmFtZS5oCTE2IEp1biAyMDA1IDIxOjA2OjQ2IC0wMDAwCTEuMgorKysga2h0bWwveG1s
L2RvbV9xbmFtZS5oCTcgSnVsIDIwMDUgMDU6NTk6MzMgLTAwMDAKQEAgLTMyLDkgKzMyLDYgQEAg
cHVibGljOgogICAgIHB1YmxpYzoKICAgICAgICAgUXVhbGlmaWVkTmFtZUltcGwoY29uc3QgQXRv
bWljU3RyaW5nJiBwLCBjb25zdCBBdG9taWNTdHJpbmcmIGwsIGNvbnN0IEF0b21pY1N0cmluZyYg
bikgOm1fcHJlZml4KHApLCBtX2xvY2FsTmFtZShsKSwgbV9uYW1lc3BhY2Uobikge30KIAotICAg
ICAgICBmcmllbmQgY2xhc3MgUXVhbGlmaWVkTmFtZTsKLQotICAgIHByaXZhdGU6CiAgICAgICAg
IEF0b21pY1N0cmluZyBtX3ByZWZpeDsKICAgICAgICAgQXRvbWljU3RyaW5nIG1fbG9jYWxOYW1l
OwogICAgICAgICBBdG9taWNTdHJpbmcgbV9uYW1lc3BhY2U7CkBAIC01NCw2ICs1MSw5IEBAIHB1
YmxpYzoKIAogICAgIGJvb2wgbWF0Y2hlcyhjb25zdCBRdWFsaWZpZWROYW1lJiBvdGhlcikgY29u
c3QgeyByZXR1cm4gbV9pbXBsID09IG90aGVyLm1faW1wbCB8fCAobG9jYWxOYW1lKCkgPT0gb3Ro
ZXIubG9jYWxOYW1lKCkgJiYgbmFtZXNwYWNlVVJJKCkgPT0gb3RoZXIubmFtZXNwYWNlVVJJKCkp
OyB9CiAKKyAgICBib29sIGhhc1ByZWZpeCgpIGNvbnN0IHsgcmV0dXJuIG1faW1wbC0+bV9wcmVm
aXggIT0gbnVsbEF0b207IH0KKyAgICB2b2lkIHNldFByZWZpeChjb25zdCBBdG9taWNTdHJpbmcm
IHByZWZpeCk7CisKICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCgpIGNvbnN0IHsgcmV0
dXJuIG1faW1wbC0+bV9wcmVmaXg7IH0KICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFt
ZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1wbC0+bV9sb2NhbE5hbWU7IH0KICAgICBjb25zdCBBdG9t
aWNTdHJpbmcmIG5hbWVzcGFjZVVSSSgpIGNvbnN0IHsgcmV0dXJuIG1faW1wbC0+bV9uYW1lc3Bh
Y2U7IH0KQEAgLTY2LDExICs2NiwxMCBAQCBwcml2YXRlOgogICAgIFF1YWxpZmllZE5hbWVJbXBs
KiBtX2ltcGw7CiB9OwogCi1ib29sIG9wZXJhdG9yPT0oY29uc3QgQXRvbWljU3RyaW5nJiBhLCBj
b25zdCBRdWFsaWZpZWROYW1lJiBxKTsKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgQXRv
bWljU3RyaW5nJiBhLCBjb25zdCBRdWFsaWZpZWROYW1lJiBxKSB7IHJldHVybiBhID09IHEubG9j
YWxOYW1lKCk7IH0KIGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgQXRvbWljU3RyaW5nJiBh
LCBjb25zdCBRdWFsaWZpZWROYW1lJiBxKSB7IHJldHVybiBhICE9IHEubG9jYWxOYW1lKCk7IH0K
LWJvb2wgb3BlcmF0b3I9PShjb25zdCBRdWFsaWZpZWROYW1lJiBxLCBjb25zdCBBdG9taWNTdHJp
bmcmIGEpOworaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBRdWFsaWZpZWROYW1lJiBxLCBj
b25zdCBBdG9taWNTdHJpbmcmIGEpIHsgcmV0dXJuIGEgPT0gcS5sb2NhbE5hbWUoKTsgfQogaW5s
aW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBRdWFsaWZpZWROYW1lJiBxLCBjb25zdCBBdG9taWNT
dHJpbmcmIGEpIHsgcmV0dXJuIGEgIT0gcS5sb2NhbE5hbWUoKTsgfQogCi0KIH0KICNlbmRpZgpJ
bmRleDoga2h0bWwveG1sL2RvbV90ZXh0aW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1dlYkNvcmUva2h0bWwveG1sL2RvbV90ZXh0aW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuMjMKZGlmZiAtdSAtcCAtcjEuMjMga2h0bWwveG1sL2RvbV90ZXh0aW1wbC5jcHAK
LS0tIGtodG1sL3htbC9kb21fdGV4dGltcGwuY3BwCTE5IE9jdCAyMDA0IDIzOjA0OjI5IC0wMDAw
CTEuMjMKKysrIGtodG1sL3htbC9kb21fdGV4dGltcGwuY3BwCTcgSnVsIDIwMDUgMDU6NTk6MzQg
LTAwMDAKQEAgLTMwNCw5ICszMDQsMTQgQEAgQ29tbWVudEltcGw6On5Db21tZW50SW1wbCgpCiB7
CiB9CiAKK2NvbnN0IEF0b21pY1N0cmluZyYgQ29tbWVudEltcGw6OmxvY2FsTmFtZSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGNvbW1lbnRBdG9tOworfQorCiBET01TdHJpbmcgQ29tbWVudEltcGw6
Om5vZGVOYW1lKCkgY29uc3QKIHsKLSAgICByZXR1cm4gIiNjb21tZW50IjsKKyAgICByZXR1cm4g
Y29tbWVudEF0b20uc3RyaW5nKCk7CiB9CiAKIHVuc2lnbmVkIHNob3J0IENvbW1lbnRJbXBsOjpu
b2RlVHlwZSgpIGNvbnN0CkBAIC0zMTksMTEgKzMyNCw2IEBAIE5vZGVJbXBsICpDb21tZW50SW1w
bDo6Y2xvbmVOb2RlKGJvb2wgLyoKICAgICByZXR1cm4gZ2V0RG9jdW1lbnQoKS0+Y3JlYXRlQ29t
bWVudCggc3RyICk7CiB9CiAKLU5vZGVJbXBsOjpJZCBDb21tZW50SW1wbDo6aWQoKSBjb25zdAot
ewotICAgIHJldHVybiBJRF9DT01NRU5UOwotfQotCiAvLyBET00gU2VjdGlvbiAxLjEuMQogYm9v
bCBDb21tZW50SW1wbDo6Y2hpbGRUeXBlQWxsb3dlZCggdW5zaWduZWQgc2hvcnQgLyp0eXBlKi8g
KQogewpAQCAtMzk0LDkgKzM5NCwxNCBAQCBUZXh0SW1wbCAqVGV4dEltcGw6OnNwbGl0VGV4dCgg
Y29uc3QgdW5zCiAgICAgcmV0dXJuIG5ld1RleHQ7CiB9CiAKK2NvbnN0IEF0b21pY1N0cmluZyYg
VGV4dEltcGw6OmxvY2FsTmFtZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRleHRBdG9tOworfQor
CiBET01TdHJpbmcgVGV4dEltcGw6Om5vZGVOYW1lKCkgY29uc3QKIHsKLSAgcmV0dXJuICIjdGV4
dCI7CisgICAgcmV0dXJuIHRleHRBdG9tLnN0cmluZygpOwogfQogCiB1bnNpZ25lZCBzaG9ydCBU
ZXh0SW1wbDo6bm9kZVR5cGUoKSBjb25zdApAQCAtNDYyLDExICs0NjcsNiBAQCB2b2lkIFRleHRJ
bXBsOjphdHRhY2goKQogICAgIENoYXJhY3RlckRhdGFJbXBsOjphdHRhY2goKTsKIH0KIAotTm9k
ZUltcGw6OklkIFRleHRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX1RFWFQ7Ci19
Ci0KIHZvaWQgVGV4dEltcGw6OnJlY2FsY1N0eWxlKCBTdHlsZUNoYW5nZSBjaGFuZ2UgKQogewog
Ly8gICAgICBxRGVidWcoInRleHRJbXBsOjpyZWNhbGNTdHlsZSIpOwpJbmRleDoga2h0bWwveG1s
L2RvbV90ZXh0aW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2to
dG1sL3htbC9kb21fdGV4dGltcGwuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNgpkaWZmIC11
IC1wIC1yMS4xNiBraHRtbC94bWwvZG9tX3RleHRpbXBsLmgKLS0tIGtodG1sL3htbC9kb21fdGV4
dGltcGwuaAkxMCBNYXkgMjAwNSAyMTo1OToxNSAtMDAwMAkxLjE2CisrKyBraHRtbC94bWwvZG9t
X3RleHRpbXBsLmgJNyBKdWwgMjAwNSAwNTo1OTozNCAtMDAwMApAQCAtOTUsMTMgKzk1LDEzIEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIH5Db21tZW50SW1wbCgpOwogCiAgICAgLy8gRE9NIG1ldGhv
ZHMgb3ZlcnJpZGRlbiBmcm9tICBwYXJlbnQgY2xhc3NlcworICAgIGNvbnN0IEF0b21pY1N0cmlu
ZyYgbG9jYWxOYW1lKCkgY29uc3Q7CiAgICAgdmlydHVhbCBET01TdHJpbmcgbm9kZU5hbWUoKSBj
b25zdDsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0IG5vZGVUeXBlKCkgY29uc3Q7CiAgICAg
dmlydHVhbCBOb2RlSW1wbCAqY2xvbmVOb2RlKGJvb2wgZGVlcCk7CiAKICAgICAvLyBPdGhlciBt
ZXRob2RzIChub3QgcGFydCBvZiBET00pCi0KLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7Cisg
ICAgdmlydHVhbCBib29sIGlzQ29tbWVudE5vZGUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAg
ICAgdmlydHVhbCBib29sIGNoaWxkVHlwZUFsbG93ZWQoIHVuc2lnbmVkIHNob3J0IHR5cGUgKTsK
IAogICAgIHZpcnR1YWwgRE9NU3RyaW5nIHRvU3RyaW5nKCkgY29uc3Q7CkBAIC0xMjEsNiArMTIx
LDcgQEAgcHVibGljOgogICAgIFRleHRJbXBsICpzcGxpdFRleHQgKCBjb25zdCB1bnNpZ25lZCBs
b25nIG9mZnNldCwgaW50ICZleGNlcHRpb25jb2RlICk7CiAKICAgICAvLyBET00gbWV0aG9kcyBv
dmVycmlkZGVuIGZyb20gIHBhcmVudCBjbGFzc2VzCisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBs
b2NhbE5hbWUoKSBjb25zdDsKICAgICB2aXJ0dWFsIERPTVN0cmluZyBub2RlTmFtZSgpIGNvbnN0
OwogICAgIHZpcnR1YWwgdW5zaWduZWQgc2hvcnQgbm9kZVR5cGUoKSBjb25zdDsKICAgICB2aXJ0
dWFsIE5vZGVJbXBsICpjbG9uZU5vZGUoYm9vbCBkZWVwKTsKQEAgLTEyOCw3ICsxMjksNiBAQCBw
dWJsaWM6CiAgICAgLy8gT3RoZXIgbWV0aG9kcyAobm90IHBhcnQgb2YgRE9NKQogCiAgICAgdmly
dHVhbCBib29sIGlzVGV4dE5vZGUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVh
bCBJZCBpZCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBhdHRhY2goKTsKICAgICB2aXJ0dWFs
IGJvb2wgcmVuZGVyZXJJc05lZWRlZChraHRtbDo6UmVuZGVyU3R5bGUgKik7CiAgICAgdmlydHVh
bCBraHRtbDo6UmVuZGVyT2JqZWN0ICpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSAqLCBraHRt
bDo6UmVuZGVyU3R5bGUgKik7CkluZGV4OiBraHRtbC94bWwveG1sX3Rva2VuaXplci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwveG1sL3htbF90b2tlbml6
ZXIuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjMxCmRpZmYgLXUgLXAgLXIxLjMxIGtodG1s
L3htbC94bWxfdG9rZW5pemVyLmNwcAotLS0ga2h0bWwveG1sL3htbF90b2tlbml6ZXIuY3BwCTQg
TWF5IDIwMDUgMjE6MTE6MjMgLTAwMDAJMS4zMQorKysga2h0bWwveG1sL3htbF90b2tlbml6ZXIu
Y3BwCTcgSnVsIDIwMDUgMDU6NTk6MzUgLTAwMDAKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRl
ICJ4bWwvZG9tX3htbGltcGwuaCIKICNpbmNsdWRlICJodG1sL2h0bWxfaGVhZGltcGwuaCIKICNp
bmNsdWRlICJodG1sL2h0bWxfdGFibGVpbXBsLmgiCi0jaW5jbHVkZSAibWlzYy9odG1sdGFncy5o
IgorI2luY2x1ZGUgImh0bWxuYW1lcy5oIgogI2luY2x1ZGUgIm1pc2MvaHRtbGF0dHJzLmgiCiAj
aW5jbHVkZSAibWlzYy9sb2FkZXIuaCIKIApAQCAtNDQsNiArNDQsNyBAQCB1c2luZyBET006OkRv
Y3VtZW50SW1wbDsKIHVzaW5nIERPTTo6RG9jdW1lbnRQdHI7CiB1c2luZyBET006OkRPTVN0cmlu
ZzsKIHVzaW5nIERPTTo6RWxlbWVudEltcGw7Cit1c2luZyBET006OkhUTUxOYW1lczsKIHVzaW5n
IERPTTo6SFRNTFNjcmlwdEVsZW1lbnRJbXBsOwogdXNpbmcgRE9NOjpIVE1MVGFibGVTZWN0aW9u
RWxlbWVudEltcGw7CiB1c2luZyBET006Ok5vZGU7CkBAIC0zMjIsMTggKzMyMywxOCBAQCB2b2lk
IFhNTFRva2VuaXplcjo6c3RhcnRFbGVtZW50KGNvbnN0IHhtCiAgICAgLy8gRklYTUU6IFRoaXMg
aGFjayBlbnN1cmVzIGltcGxpY2l0IHRhYmxlIGJvZGllcyBnZXQgY29uc3RydWN0ZWQgaW4gWEhU
TUwgYW5kIFhNTCBmaWxlcy4KICAgICAvLyBXZSB3YW50IHRvIGNvbnNvbGlkYXRlIHRoaXMgd2l0
aCB0aGUgSFRNTCBwYXJzZXIgYW5kIEhUTUwgRE9NIGNvZGUgYXQgc29tZSBwb2ludC4KICAgICAv
LyBGb3Igbm93LCBpdCdzIHRvbyByaXNreSB0byByaXAgdGhhdCBjb2RlIHVwLgotICAgIGlmICht
X2N1cnJlbnROb2RlLT5pZCgpID09IElEX1RBQkxFICYmCi0gICAgICAgIG5ld0VsZW1lbnQtPmlk
KCkgPT0gSURfVFIgJiYKKyAgICBpZiAobV9jdXJyZW50Tm9kZS0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OnRhYmxlKCkpICYmCisgICAgICAgIG5ld0VsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVz
Ojp0cigpKSAmJgogICAgICAgICBtX2N1cnJlbnROb2RlLT5pc0hUTUxFbGVtZW50KCkgJiYgbmV3
RWxlbWVudC0+aXNIVE1MRWxlbWVudCgpKSB7CiAgICAgICAgIE5vZGVJbXBsKiBpbXBsaWNpdFRC
b2R5ID0KLSAgICAgICAgICAgbmV3IEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbCggbV9kb2Ms
IElEX1RCT0RZLCB0cnVlIC8qIGltcGxpY2l0ICovICk7CisgICAgICAgICAgIG5ldyBIVE1MVGFi
bGVTZWN0aW9uRWxlbWVudEltcGwoSFRNTE5hbWVzOjp0Ym9keSgpLCBtX2RvYywgdHJ1ZSAvKiBp
bXBsaWNpdCAqLyk7CiAgICAgICAgIG1fY3VycmVudE5vZGUtPmFkZENoaWxkKGltcGxpY2l0VEJv
ZHkpOwogICAgICAgICBpZiAobV92aWV3ICYmICFpbXBsaWNpdFRCb2R5LT5hdHRhY2hlZCgpKQog
ICAgICAgICAgICAgaW1wbGljaXRUQm9keS0+YXR0YWNoKCk7CiAgICAgICAgIG1fY3VycmVudE5v
ZGUgPSBpbXBsaWNpdFRCb2R5OwogICAgIH0KIAotICAgIGlmIChuZXdFbGVtZW50LT5pZCgpID09
IElEX1NDUklQVCkKKyAgICBpZiAobmV3RWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnNj
cmlwdCgpKSkKICAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTFNjcmlwdEVsZW1lbnRJbXBsICo+KG5l
d0VsZW1lbnQpLT5zZXRDcmVhdGVkQnlQYXJzZXIodHJ1ZSk7CiAKICAgICBpZiAobV9jdXJyZW50
Tm9kZS0+YWRkQ2hpbGQobmV3RWxlbWVudCkpIHsKQEAgLTY1MCw3ICs2NTEsNyBAQCB2b2lkIFhN
TFRva2VuaXplcjo6YWRkU2NyaXB0cyhOb2RlSW1wbCAqCiAgICAgLy8gUmVjdXJzaXZlbHkgZ28g
dGhyb3VnaCB0aGUgZW50aXJlIGRvY3VtZW50IHRyZWUsIGxvb2tpbmcgZm9yIGh0bWwgPHNjcmlw
dD4gdGFncy4gRm9yIGVhY2ggb2YgdGhlc2UKICAgICAvLyB0aGF0IGlzIGZvdW5kLCBhZGQgaXQg
dG8gdGhlIG1fc2NyaXB0cyBsaXN0IGZyb20gd2hpY2ggdGhleSB3aWxsIGJlIGV4ZWN1dGVkCiAK
LSAgICBpZiAobi0+aWQoKSA9PSBJRF9TQ1JJUFQpIHsKKyAgICBpZiAobi0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OnNjcmlwdCgpKSkgewogICAgICAgICBtX3NjcmlwdHMuYXBwZW5kKHN0YXRpY19j
YXN0PEhUTUxTY3JpcHRFbGVtZW50SW1wbCo+KG4pKTsKICAgICB9CiAKSW5kZXg6IGt3cS9ET00u
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva3dxL0RPTS5tbSx2CnJl
dHJpZXZpbmcgcmV2aXNpb24gMS4zNgpkaWZmIC11IC1wIC1yMS4zNiBrd3EvRE9NLm1tCi0tLSBr
d3EvRE9NLm1tCTE5IE1heSAyMDA1IDE4OjMyOjI3IC0wMDAwCTEuMzYKKysrIGt3cS9ET00ubW0J
NyBKdWwgMjAwNSAwNTo1OTozNiAtMDAwMApAQCAtNDQsNyArNDQsNiBAQAogI2ltcG9ydCAiZG9t
X3RleHRpbXBsLmgiCiAjaW1wb3J0ICJkb21feG1saW1wbC5oIgogI2ltcG9ydCAiaHRtbF9lbGVt
ZW50aW1wbC5oIgotI2ltcG9ydCAiaHRtbHRhZ3MuaCIKIAogI2ltcG9ydCAia2h0bWxfcGFydC5o
IgogCkBAIC03Miw2ICs3MSw3IEBAIHVzaW5nIERPTTo6RWxlbWVudEltcGw7CiB1c2luZyBET006
OkVudGl0eUltcGw7CiB1c2luZyBET006OkZpbHRlck5vZGU7CiB1c2luZyBET006OkhUTUxFbGVt
ZW50SW1wbDsKK3VzaW5nIERPTTo6SFRNTE5hbWVzOwogdXNpbmcgRE9NOjpOYW1lZE5vZGVNYXBJ
bXBsOwogdXNpbmcgRE9NOjpOb2RlOwogdXNpbmcgRE9NOjpOb2RlRmlsdGVyOwpAQCAtMzM4LDcg
KzMzOCw4IEBAIHVzaW5nIGtodG1sOjpTaGFyZWRQdHI7CiAgICAgQVNTRVJUKHByZWZpeCk7CiAK
ICAgICBpbnQgZXhjZXB0aW9uQ29kZSA9IDA7Ci0gICAgW3NlbGYgX25vZGVJbXBsXS0+c2V0UHJl
Zml4KHByZWZpeCwgZXhjZXB0aW9uQ29kZSk7CisgICAgRE9NU3RyaW5nIHByZWZpeFN0cihwcmVm
aXgpOworICAgIFtzZWxmIF9ub2RlSW1wbF0tPnNldFByZWZpeChwcmVmaXhTdHIuaW1wbGVtZW50
YXRpb24oKSwgZXhjZXB0aW9uQ29kZSk7CiAgICAgcmFpc2VPbkRPTUVycm9yKGV4Y2VwdGlvbkNv
ZGUpOwogfQogCkBAIC0zOTksMTU0ICs0MDAsMTIzIEBAIHVzaW5nIGtodG1sOjpTaGFyZWRQdHI7
CiAgICAgc3dpdGNoIChpbXBsLT5ub2RlVHlwZSgpKSB7CiAgICAgICAgIGNhc2UgTm9kZTo6RUxF
TUVOVF9OT0RFOgogICAgICAgICAgICAgaWYgKGltcGwtPmlzSFRNTEVsZW1lbnQoKSkgewotICAg
ICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGVyZSBhcmUgbm8gaWRlbnRpZmllcnMgZm9yIEhUTUxI
ZWFkaW5nRWxlbWVudCwgSFRNTE1vZEVsZW1lbnQsIAotICAgICAgICAgICAgICAgIC8vIEhUTUxU
YWJsZUNhcHRpb25FbGVtZW50LCBIVE1MVGFibGVDb2xFbGVtZW50LCBIVE1MVGFibGVTZWN0aW9u
RWxlbWVudC4KLSAgICAgICAgICAgICAgICAvLyBGaW5kIG90aGVyIHdheXMgdG8gaWRlbnRpZnkg
dGhlbS4KLSAgICAgICAgICAgICAgICBzd2l0Y2ggKGltcGwtPmlkZW50aWZpZXIoKSkgewotICAg
ICAgICAgICAgICAgICAgICBjYXNlIElEX0hUTUw6Ci0gICAgICAgICAgICAgICAgICAgICAgICB3
cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTEh0bWxFbGVtZW50IGNsYXNzXTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0hFQUQ6Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTEhlYWRFbGVtZW50IGNs
YXNzXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
ICBjYXNlIElEX0xJTks6Ci0gICAgICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBb
RE9NSFRNTExpbmtFbGVtZW50IGNsYXNzXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX1RJVExFOgotICAgICAgICAgICAgICAgICAg
ICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxUaXRsZUVsZW1lbnQgY2xhc3NdOwotICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfTUVU
QToKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MTWV0YUVs
ZW1lbnQgY2xhc3NdOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgICAgIGNhc2UgSURfQkFTRToKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJD
bGFzcyA9IFtET01IVE1MQmFzZUVsZW1lbnQgY2xhc3NdOwotICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfSVNJTkRFWDoKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MSXNJbmRleEVsZW1lbnQgY2xh
c3NdOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAg
IGNhc2UgSURfU1RZTEU6Ci0gICAgICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBb
RE9NSFRNTFN0eWxlRWxlbWVudCBjbGFzc107Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9CT0RZOgotICAgICAgICAgICAgICAgICAg
ICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxCb2R5RWxlbWVudCBjbGFzc107Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9GT1JN
OgotICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxGb3JtRWxl
bWVudCBjbGFzc107Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICAgICAgY2FzZSBJRF9TRUxFQ1Q6Ci0gICAgICAgICAgICAgICAgICAgICAgICB3cmFwcGVy
Q2xhc3MgPSBbRE9NSFRNTFNlbGVjdEVsZW1lbnQgY2xhc3NdOwotICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfT1BUR1JPVVA6Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTE9wdEdyb3VwRWxlbWVu
dCBjbGFzc107Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICAgICAgY2FzZSBJRF9PUFRJT046Ci0gICAgICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xh
c3MgPSBbRE9NSFRNTE9wdGlvbkVsZW1lbnQgY2xhc3NdOwotICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfSU5QVVQ6Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTElucHV0RWxlbWVudCBjbGFzc107
Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBJRF9URVhUQVJFQToKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtE
T01IVE1MVGV4dEFyZWFFbGVtZW50IGNsYXNzXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0JVVFRPTjoKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MQnV0dG9uRWxlbWVudCBjbGFzc107Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJ
RF9MQUJFTDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1M
TGFiZWxFbGVtZW50IGNsYXNzXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAgCi0g
ICAgICAgICAgICAgICAgICAgIGNhc2UgSURfRklFTERTRVQ6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTEZpZWxkU2V0RWxlbWVudCBjbGFzc107Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsgICAgICAKLSAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBJRF9MRUdFTkQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9N
SFRNTExlZ2VuZEVsZW1lbnQgY2xhc3NdOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfVUw6Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTFVMaXN0RWxlbWVudCBjbGFzc107Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9PTDoKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MT0xpc3RFbGVtZW50
IGNsYXNzXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
ICAgICBjYXNlIElEX0RMOgotICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0g
W0RPTUhUTUxETGlzdEVsZW1lbnQgY2xhc3NdOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfRElSOgotICAgICAgICAgICAgICAgICAg
ICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxEaXJlY3RvcnlFbGVtZW50IGNsYXNzXTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIElE
X01FTlU6Ci0gICAgICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTE1l
bnVFbGVtZW50IGNsYXNzXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgICAgICBjYXNlIElEX0xJOgotICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBl
ckNsYXNzID0gW0RPTUhUTUxMSUVsZW1lbnQgY2xhc3NdOwotICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfRElWOgotICAgICAgICAgICAg
ICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxEaXZFbGVtZW50IGNsYXNzXTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIElE
X1A6Ci0gICAgICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTFBhcmFn
cmFwaEVsZW1lbnQgY2xhc3NdOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgICAgIGNhc2UgSURfUToKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBw
ZXJDbGFzcyA9IFtET01IVE1MUXVvdGVFbGVtZW50IGNsYXNzXTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX1BSRToKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MUHJlRWxlbWVudCBjbGFzc107
Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBJRF9CUjoKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1M
QlJFbGVtZW50IGNsYXNzXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgICAgICBjYXNlIElEX0JBU0VGT05UOgotICAgICAgICAgICAgICAgICAgICAgICAg
d3JhcHBlckNsYXNzID0gW0RPTUhUTUxGb250RWxlbWVudCBjbGFzc107Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9GT05UOgotICAg
ICAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxGb250RWxlbWVudCBj
bGFzc107Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAg
ICAgY2FzZSBJRF9IUjoKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtE
T01IVE1MSFJFbGVtZW50IGNsYXNzXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0E6Ci0gICAgICAgICAgICAgICAgICAgICAgICB3
cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTEFuY2hvckVsZW1lbnQgY2xhc3NdOwotICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfSU1HOgotICAg
ICAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxJbWFnZUVsZW1lbnQg
Y2xhc3NdOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ICAgIGNhc2UgSURfT0JKRUNUOgotICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNz
ID0gW0RPTUhUTUxPYmplY3RFbGVtZW50IGNsYXNzXTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX1BBUkFNOgotICAgICAgICAgICAg
ICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxQYXJhbUVsZW1lbnQgY2xhc3NdOwot
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2Ug
SURfQVBQTEVUOgotICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhU
TUxBcHBsZXRFbGVtZW50IGNsYXNzXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgICAgICBjYXNlIElEX01BUDoKLSAgICAgICAgICAgICAgICAgICAgICAg
IHdyYXBwZXJDbGFzcyA9IFtET01IVE1MTWFwRWxlbWVudCBjbGFzc107Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9BUkVBOgotICAg
ICAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxBcmVhRWxlbWVudCBj
bGFzc107Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAg
ICAgY2FzZSBJRF9TQ1JJUFQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3Mg
PSBbRE9NSFRNTFNjcmlwdEVsZW1lbnQgY2xhc3NdOwotICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfVEFCTEU6Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTFRhYmxlRWxlbWVudCBjbGFzc107Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJ
RF9URDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MVGFi
bGVDZWxsRWxlbWVudCBjbGFzc107Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICAgICAgY2FzZSBJRF9UUjoKLSAgICAgICAgICAgICAgICAgICAgICAgIHdy
YXBwZXJDbGFzcyA9IFtET01IVE1MVGFibGVSb3dFbGVtZW50IGNsYXNzXTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0ZSQU1FU0VU
OgotICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxGcmFtZVNl
dEVsZW1lbnQgY2xhc3NdOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgICAgIGNhc2UgSURfRlJBTUU6Ci0gICAgICAgICAgICAgICAgICAgICAgICB3cmFw
cGVyQ2xhc3MgPSBbRE9NSFRNTEZyYW1lRWxlbWVudCBjbGFzc107Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9JRlJBTUU6Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTElGcmFtZUVsZW1lbnQg
Y2xhc3NdOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9N
SFRNTEVsZW1lbnQgY2xhc3NdOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAv
LyBGSVhNRTogUmVmbGVjdCBtYXJxdWVlIG9uY2UgdGhlIEFQSSBoYXMgYmVlbiBkZXRlcm1pbmVk
LgorICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBtYWtlIHRoZSBIVE1MIGNsYXNz
ZXMgaGFuZCBiYWNrIHRoZWlyIGNsYXNzIG5hbWVzIGFuZCB0aGVuIHVzZSB0aGF0IHRvIG1ha2UK
KyAgICAgICAgICAgICAgICAvLyB0aGUgYXBwcm9wcmlhdGUgT2JqLUMgY2xhc3MgZnJvbSB0aGUg
c3RyaW5nLgorICAgICAgICAgICAgICAgIEhUTUxFbGVtZW50SW1wbCogaHRtbEVsdCA9IHN0YXRp
Y19jYXN0PEhUTUxFbGVtZW50SW1wbCo+KGltcGwpOworICAgICAgICAgICAgICAgIGlmIChodG1s
RWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpodG1sKCkpKQorICAgICAgICAgICAgICAgICAg
ICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTEh0bWxFbGVtZW50IGNsYXNzXTsKKyAgICAgICAgICAg
ICAgICBlbHNlIGlmIChodG1sRWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpoZWFkKCkpKQor
ICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTEhlYWRFbGVtZW50IGNs
YXNzXTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChodG1sRWx0LT5oYXNMb2NhbE5hbWUoSFRN
TE5hbWVzOjpsaW5rKCkpKQorICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9N
SFRNTExpbmtFbGVtZW50IGNsYXNzXTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChodG1sRWx0
LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0aXRsZSgpKSkKKyAgICAgICAgICAgICAgICAgICAg
d3JhcHBlckNsYXNzID0gW0RPTUhUTUxUaXRsZUVsZW1lbnQgY2xhc3NdOworICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKGh0bWxFbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om1ldGEoKSkpCisg
ICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MTWV0YUVsZW1lbnQgY2xh
c3NdOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGh0bWxFbHQtPmhhc0xvY2FsTmFtZShIVE1M
TmFtZXM6OmJhc2UoKSkpCisgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01I
VE1MQmFzZUVsZW1lbnQgY2xhc3NdOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGh0bWxFbHQt
Pmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmlzaW5kZXgoKSkpCisgICAgICAgICAgICAgICAgICAg
IHdyYXBwZXJDbGFzcyA9IFtET01IVE1MSXNJbmRleEVsZW1lbnQgY2xhc3NdOworICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKGh0bWxFbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnN0eWxlKCkp
KQorICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTFN0eWxlRWxlbWVu
dCBjbGFzc107CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaHRtbEVsdC0+aGFzTG9jYWxOYW1l
KEhUTUxOYW1lczo6Ym9keSgpKSkKKyAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0g
W0RPTUhUTUxCb2R5RWxlbWVudCBjbGFzc107CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaHRt
bEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6Zm9ybSgpKSkKKyAgICAgICAgICAgICAgICAg
ICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxGb3JtRWxlbWVudCBjbGFzc107CisgICAgICAgICAg
ICAgICAgZWxzZSBpZiAoaHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6c2VsZWN0KCkp
KQorICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTFNlbGVjdEVsZW1l
bnQgY2xhc3NdOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGh0bWxFbHQtPmhhc0xvY2FsTmFt
ZShIVE1MTmFtZXM6Om9wdGdyb3VwKCkpKQorICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xh
c3MgPSBbRE9NSFRNTE9wdEdyb3VwRWxlbWVudCBjbGFzc107CisgICAgICAgICAgICAgICAgZWxz
ZSBpZiAoaHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpKQorICAgICAg
ICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTE9wdGlvbkVsZW1lbnQgY2xhc3Nd
OworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGh0bWxFbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFt
ZXM6OmlucHV0KCkpKQorICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRN
TElucHV0RWxlbWVudCBjbGFzc107CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaHRtbEVsdC0+
aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dGV4dGFyZWEoKSkpCisgICAgICAgICAgICAgICAgICAg
IHdyYXBwZXJDbGFzcyA9IFtET01IVE1MVGV4dEFyZWFFbGVtZW50IGNsYXNzXTsKKyAgICAgICAg
ICAgICAgICBlbHNlIGlmIChodG1sRWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpidXR0b24o
KSkpCisgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MQnV0dG9uRWxl
bWVudCBjbGFzc107CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaHRtbEVsdC0+aGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6bGFiZWwoKSkpCisgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFz
cyA9IFtET01IVE1MTGFiZWxFbGVtZW50IGNsYXNzXTsKKyAgICAgICAgICAgICAgICBlbHNlIGlm
IChodG1sRWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpmaWVsZHNldCgpKSkKKyAgICAgICAg
ICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxGaWVsZFNldEVsZW1lbnQgY2xhc3Nd
OworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGh0bWxFbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFt
ZXM6OmxlZ2VuZCgpKSkKKyAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhU
TUxMZWdlbmRFbGVtZW50IGNsYXNzXTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChodG1sRWx0
LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp1bCgpKSkKKyAgICAgICAgICAgICAgICAgICAgd3Jh
cHBlckNsYXNzID0gW0RPTUhUTUxVTGlzdEVsZW1lbnQgY2xhc3NdOworICAgICAgICAgICAgICAg
IGVsc2UgaWYgKGh0bWxFbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9sKCkpKSAgICAgICAg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01I
VE1MT0xpc3RFbGVtZW50IGNsYXNzXTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChodG1sRWx0
LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpkbCgpKSkKKyAgICAgICAgICAgICAgICAgICAgd3Jh
cHBlckNsYXNzID0gW0RPTUhUTUxETGlzdEVsZW1lbnQgY2xhc3NdOworICAgICAgICAgICAgICAg
IGVsc2UgaWYgKGh0bWxFbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmRpcigpKSkKKyAgICAg
ICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxEaXJlY3RvcnlFbGVtZW50IGNs
YXNzXTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChodG1sRWx0LT5oYXNMb2NhbE5hbWUoSFRN
TE5hbWVzOjptZW51KCkpKQorICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9N
SFRNTE1lbnVFbGVtZW50IGNsYXNzXTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChodG1sRWx0
LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpsaSgpKSkKKyAgICAgICAgICAgICAgICAgICAgd3Jh
cHBlckNsYXNzID0gW0RPTUhUTUxMSUVsZW1lbnQgY2xhc3NdOworICAgICAgICAgICAgICAgIGVs
c2UgaWYgKGh0bWxFbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmRpdigpKSkKKyAgICAgICAg
ICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxEaXZFbGVtZW50IGNsYXNzXTsKKyAg
ICAgICAgICAgICAgICBlbHNlIGlmIChodG1sRWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpw
KCkpKQorICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTFBhcmFncmFw
aEVsZW1lbnQgY2xhc3NdOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGh0bWxFbHQtPmhhc0xv
Y2FsTmFtZShIVE1MTmFtZXM6OmgxKCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgaHRt
bEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6aDIoKSkgfHwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICBodG1sRWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpoMygpKSB8fAorICAgICAg
ICAgICAgICAgICAgICAgICAgIGh0bWxFbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Omg0KCkp
IHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxO
YW1lczo6aDUoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICBodG1sRWx0LT5oYXNMb2Nh
bE5hbWUoSFRNTE5hbWVzOjpoNigpKSkKKyAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNz
ID0gW0RPTUhUTUxIZWFkaW5nRWxlbWVudCBjbGFzc107CisgICAgICAgICAgICAgICAgZWxzZSBp
ZiAoaHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6cSgpKSkKKyAgICAgICAgICAgICAg
ICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxRdW90ZUVsZW1lbnQgY2xhc3NdOworICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKGh0bWxFbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnByZSgp
KSkKKyAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxQcmVFbGVtZW50
IGNsYXNzXTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChodG1sRWx0LT5oYXNMb2NhbE5hbWUo
SFRNTE5hbWVzOjpicigpKSkKKyAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RP
TUhUTUxCUkVsZW1lbnQgY2xhc3NdOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGh0bWxFbHQt
Pmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmJhc2Vmb250KCkpKQorICAgICAgICAgICAgICAgICAg
ICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTEJhc2VGb250RWxlbWVudCBjbGFzc107CisgICAgICAg
ICAgICAgICAgZWxzZSBpZiAoaHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6Zm9udCgp
KSkKKyAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxGb250RWxlbWVu
dCBjbGFzc107CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaHRtbEVsdC0+aGFzTG9jYWxOYW1l
KEhUTUxOYW1lczo6aHIoKSkpCisgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtE
T01IVE1MSFJFbGVtZW50IGNsYXNzXTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChodG1sRWx0
LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjphKCkpKQorICAgICAgICAgICAgICAgICAgICB3cmFw
cGVyQ2xhc3MgPSBbRE9NSFRNTEFuY2hvckVsZW1lbnQgY2xhc3NdOworICAgICAgICAgICAgICAg
IGVsc2UgaWYgKGh0bWxFbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmltZygpKSB8fAorICAg
ICAgICAgICAgICAgICAgICAgICAgIGh0bWxFbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmNh
bnZhcygpKSkKKyAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxJbWFn
ZUVsZW1lbnQgY2xhc3NdOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGh0bWxFbHQtPmhhc0xv
Y2FsTmFtZShIVE1MTmFtZXM6Om9iamVjdCgpKSkKKyAgICAgICAgICAgICAgICAgICAgd3JhcHBl
ckNsYXNzID0gW0RPTUhUTUxPYmplY3RFbGVtZW50IGNsYXNzXTsKKyAgICAgICAgICAgICAgICBl
bHNlIGlmIChodG1sRWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpwYXJhbSgpKSkKKyAgICAg
ICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxQYXJhbUVsZW1lbnQgY2xhc3Nd
OworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGh0bWxFbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFt
ZXM6OmFwcGxldCgpKSkKKyAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhU
TUxBcHBsZXRFbGVtZW50IGNsYXNzXTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChodG1sRWx0
LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjptYXAoKSkpCisgICAgICAgICAgICAgICAgICAgIHdy
YXBwZXJDbGFzcyA9IFtET01IVE1MTWFwRWxlbWVudCBjbGFzc107CisgICAgICAgICAgICAgICAg
ZWxzZSBpZiAoaHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6YXJlYSgpKSkKKyAgICAg
ICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxBcmVhRWxlbWVudCBjbGFzc107
CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1l
czo6c2NyaXB0KCkpKQorICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRN
TFNjcmlwdEVsZW1lbnQgY2xhc3NdOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGh0bWxFbHQt
Pmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnRhYmxlKCkpKQorICAgICAgICAgICAgICAgICAgICB3
cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTFRhYmxlRWxlbWVudCBjbGFzc107CisgICAgICAgICAgICAg
ICAgZWxzZSBpZiAoaHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dGhlYWQoKSkgfHwK
KyAgICAgICAgICAgICAgICAgICAgICAgICBodG1sRWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVz
Ojp0Ym9keSgpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWxFbHQtPmhhc0xvY2Fs
TmFtZShIVE1MTmFtZXM6OnRmb290KCkpKQorICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xh
c3MgPSBbRE9NSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQgY2xhc3NdOworICAgICAgICAgICAgICAg
IGVsc2UgaWYgKGh0bWxFbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnRkKCkpKQorICAgICAg
ICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQgY2xh
c3NdOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGh0bWxFbHQtPmhhc0xvY2FsTmFtZShIVE1M
TmFtZXM6OnRyKCkpKQorICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRN
TFRhYmxlUm93RWxlbWVudCBjbGFzc107CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaHRtbEVs
dC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6Y29sKCkpIHx8CisgICAgICAgICAgICAgICAgICAg
ICAgICAgaHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6Y29sZ3JvdXAoKSkpCisgICAg
ICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MVGFibGVDb2xFbGVtZW50IGNs
YXNzXTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChodG1sRWx0LT5oYXNMb2NhbE5hbWUoSFRN
TE5hbWVzOjpjYXB0aW9uKCkpKQorICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBb
RE9NSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQgY2xhc3NdOworICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKGh0bWxFbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmZyYW1lc2V0KCkpKQorICAgICAg
ICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTEZyYW1lU2V0RWxlbWVudCBjbGFz
c107CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxO
YW1lczo6ZnJhbWUoKSkpCisgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01I
VE1MRnJhbWVFbGVtZW50IGNsYXNzXTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChodG1sRWx0
LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjppZnJhbWUoKSkpCisgICAgICAgICAgICAgICAgICAg
IHdyYXBwZXJDbGFzcyA9IFtET01IVE1MSUZyYW1lRWxlbWVudCBjbGFzc107CisgICAgICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTEVs
ZW1lbnQgY2xhc3NdOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICB3cmFw
cGVyQ2xhc3MgPSBbRE9NRWxlbWVudCBjbGFzc107CiAgICAgICAgICAgICB9CkBAIC0xMjY4LDcg
KzEyMzgsNyBAQCB1c2luZyBraHRtbDo6U2hhcmVkUHRyOwogCiAtIChOU1N0cmluZyAqKXRhZ05h
bWUKIHsKLSAgICByZXR1cm4gW3NlbGYgX2VsZW1lbnRJbXBsXS0+dGFnTmFtZSgpOworICAgIHJl
dHVybiBbc2VsZiBfZWxlbWVudEltcGxdLT5ub2RlTmFtZSgpOwogfQogCiAtIChET01OYW1lZE5v
ZGVNYXAgKilhdHRyaWJ1dGVzCkluZGV4OiBrd3EvRE9NSFRNTC5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3EvRE9NSFRNTC5tbSx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS4xOApkaWZmIC11IC1wIC1yMS4xOCBrd3EvRE9NSFRNTC5tbQotLS0ga3dxL0RPTUhUTUwu
bW0JMTMgTWF5IDIwMDUgMTY6NDg6NTEgLTAwMDAJMS4xOAorKysga3dxL0RPTUhUTUwubW0JNyBK
dWwgMjAwNSAwNTo1OTozOCAtMDAwMApAQCAtNzQsNyArNzQsNiBAQCB1c2luZyBET006OkhUTUxG
b3JtQ29sbGVjdGlvbkltcGw7CiB1c2luZyBET006OkhUTUxGb3JtRWxlbWVudEltcGw7CiB1c2lu
ZyBET006OkhUTUxGcmFtZUVsZW1lbnRJbXBsOwogdXNpbmcgRE9NOjpIVE1MRnJhbWVTZXRFbGVt
ZW50SW1wbDsKLXVzaW5nIERPTTo6SFRNTEdlbmVyaWNFbGVtZW50SW1wbDsKIHVzaW5nIERPTTo6
SFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGw7CiB1c2luZyBET006OkhUTUxIZWFkRWxlbWVudElt
cGw7CiB1c2luZyBET006OkhUTUxIZWFkaW5nRWxlbWVudEltcGw7CkBAIC0xOTA1LDkgKzE5MDQs
OSBAQCB1c2luZyBET006Ok5vZGVJbXBsOwogCiBAaW1wbGVtZW50YXRpb24gRE9NSFRNTFF1b3Rl
RWxlbWVudAogCi0tIChIVE1MR2VuZXJpY0VsZW1lbnRJbXBsICopX3F1b3RlRWxlbWVudEltcGwK
Ky0gKEhUTUxFbGVtZW50SW1wbCAqKV9xdW90ZUVsZW1lbnRJbXBsCiB7Ci0gICAgcmV0dXJuIHN0
YXRpY19jYXN0PEhUTUxHZW5lcmljRWxlbWVudEltcGwgKj4oRE9NX2Nhc3Q8Tm9kZUltcGwgKj4o
X2ludGVybmFsKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCAqPihE
T01fY2FzdDxOb2RlSW1wbCAqPihfaW50ZXJuYWwpKTsKIH0KIAogLSAoTlNTdHJpbmcgKiljaXRl
CkluZGV4OiBrd3EvS1dRQWNjT2JqZWN0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9XZWJDb3JlL2t3cS9LV1FBY2NPYmplY3QubW0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNjgK
ZGlmZiAtdSAtcCAtcjEuNjgga3dxL0tXUUFjY09iamVjdC5tbQotLS0ga3dxL0tXUUFjY09iamVj
dC5tbQk1IEp1biAyMDA1IDA3OjA2OjUyIC0wMDAwCTEuNjgKKysrIGt3cS9LV1FBY2NPYmplY3Qu
bW0JNyBKdWwgMjAwNSAwNTo1OTo0MCAtMDAwMApAQCAtNDgsNyArNDgsNiBAQAogI2ltcG9ydCAi
ZG9tMl9ldmVudHNpbXBsLmgiCiAjaW1wb3J0ICJkb20yX3JhbmdlLmgiCiAjaW1wb3J0ICJodG1s
YXR0cnMuaCIKLSNpbXBvcnQgImh0bWx0YWdzLmgiCiAjaW1wb3J0ICJraHRtbHZpZXcuaCIKICNp
bXBvcnQgImtodG1sX3BhcnQuaCIKICNpbXBvcnQgInJlbmRlcl9jYW52YXMuaCIKQEAgLTc3LDYg
Kzc2LDcgQEAgdXNpbmcgRE9NOjpIVE1MQ29sbGVjdGlvbkltcGw7CiB1c2luZyBET006OkhUTUxF
bGVtZW50SW1wbDsKIHVzaW5nIERPTTo6SFRNTElucHV0RWxlbWVudEltcGw7CiB1c2luZyBET006
OkhUTUxNYXBFbGVtZW50SW1wbDsKK3VzaW5nIERPTTo6SFRNTE5hbWVzOwogdXNpbmcgRE9NOjpO
b2RlOwogdXNpbmcgRE9NOjpOb2RlSW1wbDsKIHVzaW5nIERPTTo6UG9zaXRpb247CkBAIC0zNjYs
NyArMzY2LDcgQEAgdXNpbmcga2h0bWw6OlZpc2libGVQb3NpdGlvbjsKICAgICB9CiAgICAgaWYg
KG1fcmVuZGVyZXItPmlzTGlzdE1hcmtlcigpKQogICAgICAgICByZXR1cm4gQCJBWExpc3RNYXJr
ZXIiOwotICAgIGlmIChtX3JlbmRlcmVyLT5lbGVtZW50KCkgJiYgbV9yZW5kZXJlci0+ZWxlbWVu
dCgpLT5pZGVudGlmaWVyKCkgPT0gSURfQlVUVE9OKQorICAgIGlmIChtX3JlbmRlcmVyLT5lbGVt
ZW50KCkgJiYgbV9yZW5kZXJlci0+ZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YnV0
dG9uKCkpKQogICAgICAgICByZXR1cm4gTlNBY2Nlc3NpYmlsaXR5QnV0dG9uUm9sZTsKICAgICBp
ZiAobV9yZW5kZXJlci0+aXNUZXh0KCkpCiAgICAgICAgIHJldHVybiBOU0FjY2Vzc2liaWxpdHlT
dGF0aWNUZXh0Um9sZTsKQEAgLTUzMiw3ICs1MzIsNyBAQCB1c2luZyBraHRtbDo6VmlzaWJsZVBv
c2l0aW9uOwogICAgIGlmICghbV9yZW5kZXJlciB8fCBtX2FyZWFFbGVtZW50IHx8ICFtX3JlbmRl
cmVyLT5lbGVtZW50KCkpCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgCi0gICAgaWYgKG1fcmVu
ZGVyZXItPmVsZW1lbnQoKS0+aXNIVE1MRWxlbWVudCgpICYmIG1fcmVuZGVyZXItPmVsZW1lbnQo
KS0+aWRlbnRpZmllcigpID09IElEX0JVVFRPTikKKyAgICBpZiAobV9yZW5kZXJlci0+ZWxlbWVu
dCgpLT5pc0hUTUxFbGVtZW50KCkgJiYgbV9yZW5kZXJlci0+ZWxlbWVudCgpLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6YnV0dG9uKCkpKQogICAgICAgICByZXR1cm4gW3NlbGYgdGV4dFVuZGVyRWxl
bWVudF07CiAgICAgaWYgKG1fcmVuZGVyZXItPmVsZW1lbnQoKS0+aXNMaW5rKCkpCiAgICAgICAg
IHJldHVybiBbc2VsZiB0ZXh0VW5kZXJFbGVtZW50XTsKQEAgLTYyMiw3ICs2MjIsNyBAQCBzdGF0
aWMgUVJlY3QgYm91bmRpbmdCb3hSZWN0KFJlbmRlck9iamVjCiAgICAgcmV0dXJuICghbV9yZW5k
ZXJlci0+aXNMaXN0TWFya2VyKCkgJiYgIW1fcmVuZGVyZXItPmlzQ2FudmFzKCkgJiYgCiAgICAg
ICAgICAgICAhbV9yZW5kZXJlci0+aXNJbWFnZSgpICYmCiAgICAgICAgICAgICAhKG1fcmVuZGVy
ZXItPmVsZW1lbnQoKSAmJiBtX3JlbmRlcmVyLT5lbGVtZW50KCktPmlzSFRNTEVsZW1lbnQoKSAm
JgotICAgICAgICAgICAgICBtX3JlbmRlcmVyLT5lbGVtZW50KCktPmlkZW50aWZpZXIoKSA9PSBJ
RF9CVVRUT04pKTsKKyAgICAgICAgICAgICAgbV9yZW5kZXJlci0+ZWxlbWVudCgpLT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6YnV0dG9uKCkpKSk7CiB9CiAKIC0gKE5TQXJyYXkgKilhY2Nlc3NpYmls
aXR5QXR0cmlidXRlTmFtZXMKSW5kZXg6IGt3cS9LV1FET01Ob2RlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiBrd3EvS1dRRE9NTm9kZS5jcHAKZGlmZiAtTiBrd3EvS1dRRE9NTm9kZS5jcHAKLS0t
IGt3cS9LV1FET01Ob2RlLmNwcAkxMSBKdWwgMjAwMyAxNjoyNDozNyAtMDAwMAkxLjkKKysrIC9k
ZXYvbnVsbAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCkBAIC0xLDM0ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDMgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgIktXUURPTU5vZGUuaCIKLQotdXNpbmcgRE9NOjpOb2Rl
SW1wbDsKLQotLy8gVGhpcyBuZWVkcyB0byBiZSBpbiBhIEMrKyBzb3VyY2UgZmlsZSBiZWNhdXNl
IGlkIGlzIGEgcmVzZXJ2ZWQgd29yZCBpbiBPYmplY3RpdmUtQysrLgotTm9kZUltcGw6OklkIGlk
RnJvbU5vZGUoTm9kZUltcGwgKm5vZGUpCi17Ci0gICAgcmV0dXJuIG5vZGUtPmlkKCk7Ci19Cklu
ZGV4OiBrd3EvS1dRRE9NTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IGt3cS9LV1FET01Ob2Rl
LmgKZGlmZiAtTiBrd3EvS1dRRE9NTm9kZS5oCi0tLSBrd3EvS1dRRE9NTm9kZS5oCTExIEp1bCAy
MDAzIDE2OjI0OjM3IC0wMDAwCTEuNQorKysgL2Rldi9udWxsCTEgSmFuIDE5NzAgMDA6MDA6MDAg
LTAwMDAKQEAgLTEsMjggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMyBBcHBsZSBD
b21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiZG9t
X25vZGVpbXBsLmgiCi0KLURPTTo6Tm9kZUltcGw6OklkIGlkRnJvbU5vZGUoRE9NOjpOb2RlSW1w
bCAqKTsKSW5kZXg6IGt3cS9LV1FLSFRNTFBhcnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9XZWJDb3JlL2t3cS9LV1FLSFRNTFBhcnQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjkKZGlmZiAtdSAtcCAtcjEuOSBrd3EvS1dRS0hUTUxQYXJ0LmNwcAotLS0ga3dxL0tXUUtI
VE1MUGFydC5jcHAJMjcgTWFyIDIwMDMgMDE6NTc6NDcgLTAwMDAJMS45CisrKyBrd3EvS1dRS0hU
TUxQYXJ0LmNwcAk3IEp1bCAyMDA1IDA1OjU5OjQwIC0wMDAwCkBAIC0zMiwxMyArMzIsMTUgQEAK
IAogdXNpbmcgRE9NOjpEb2N1bWVudEltcGw7CiB1c2luZyBET006OkhUTUxEb2N1bWVudEltcGw7
Cit1c2luZyBET006OkhUTUxOYW1lczsKIHVzaW5nIERPTTo6Tm9kZUltcGw7CiAKKy8vIEZJWE1F
OiBXaGF0IG9uIGVhcnRoIGlzIHRoaXMgc2luZ2xlIHRpbnkgZmlsZSB3aXRoIG9ubHkgdGhpcyBt
ZXRob2QgZG9pbmcgaGVyZT8KIGJvb2wgS1dRS0hUTUxQYXJ0Ojppc0ZyYW1lU2V0KCkgY29uc3QK
IHsKICAgICBEb2N1bWVudEltcGwgKmRvY3VtZW50ID0gZC0+bV9kb2M7CiAgICAgaWYgKCFkb2N1
bWVudCB8fCAhZG9jdW1lbnQtPmlzSFRNTERvY3VtZW50KCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICBOb2RlSW1wbCAqYm9keSA9IHN0YXRpY19jYXN0PEhUTUxEb2N1bWVudEltcGwgKj4o
ZG9jdW1lbnQpLT5ib2R5KCk7Ci0gICAgcmV0dXJuIGJvZHkgJiYgYm9keS0+cmVuZGVyZXIoKSAm
JiBib2R5LT5pZCgpID09IElEX0ZSQU1FU0VUOworICAgIHJldHVybiBib2R5ICYmIGJvZHktPnJl
bmRlcmVyKCkgJiYgYm9keS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZyYW1lc2V0KCkpOwogfQpJ
bmRleDoga3dxL0tXUUtIVE1MUGFydC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3Qv
V2ViQ29yZS9rd3EvS1dRS0hUTUxQYXJ0Lm1tLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjY0Mwpk
aWZmIC11IC1wIC1yMS42NDMga3dxL0tXUUtIVE1MUGFydC5tbQotLS0ga3dxL0tXUUtIVE1MUGFy
dC5tbQkyNiBNYXkgMjAwNSAyMDozMDoxMiAtMDAwMAkxLjY0MworKysga3dxL0tXUUtIVE1MUGFy
dC5tbQk3IEp1bCAyMDA1IDA1OjU5OjQzIC0wMDAwCkBAIC0yOCw3ICsyOCw2IEBACiAjaW1wb3J0
ICJET01JbnRlcm5hbC5oIgogCiAjaW1wb3J0ICJLV1FDbGlwYm9hcmQuaCIKLSNpbXBvcnQgIktX
UURPTU5vZGUuaCIKICNpbXBvcnQgIktXUUR1bW15Vmlldy5oIgogI2ltcG9ydCAiS1dRRWRpdENv
bW1hbmQuaCIKICNpbXBvcnQgIktXUUV4Y2VwdGlvbnMuaCIKQEAgLTEwMCw2ICs5OSw3IEBAIHVz
aW5nIERPTTo6SFRNTEVsZW1lbnRJbXBsOwogdXNpbmcgRE9NOjpIVE1MRm9ybUVsZW1lbnRJbXBs
OwogdXNpbmcgRE9NOjpIVE1MRnJhbWVFbGVtZW50SW1wbDsKIHVzaW5nIERPTTo6SFRNTEdlbmVy
aWNGb3JtRWxlbWVudEltcGw7Cit1c2luZyBET006OkhUTUxOYW1lczsKIHVzaW5nIERPTTo6SFRN
TFRhYmxlQ2VsbEVsZW1lbnRJbXBsOwogdXNpbmcgRE9NOjpOb2RlOwogdXNpbmcgRE9NOjpOb2Rl
SW1wbDsKQEAgLTM2MSwxMyArMzYxLDEyIEBAIHN0YXRpYyBIVE1MRm9ybUVsZW1lbnRJbXBsICpz
Y2FuRm9yRm9ybSgKIHsKICAgICBOb2RlSW1wbCAqbjsKICAgICBmb3IgKG4gPSBzdGFydDsgbjsg
biA9IG4tPnRyYXZlcnNlTmV4dE5vZGUoKSkgewotICAgICAgICBOb2RlSW1wbDo6SWQgbm9kZUlE
ID0gaWRGcm9tTm9kZShuKTsKLSAgICAgICAgaWYgKG5vZGVJRCA9PSBJRF9GT1JNKSB7CisgICAg
ICAgIGlmIChuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Zm9ybSgpKSkgewogICAgICAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudEltcGwgKj4obik7CiAgICAgICAgIH0g
ZWxzZSBpZiAobi0+aXNIVE1MRWxlbWVudCgpCiAgICAgICAgICAgICAgICAgICAgJiYgc3RhdGlj
X2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KG4pLT5pc0dlbmVyaWNGb3JtRWxlbWVudCgpKSB7CiAg
ICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwg
Kj4obiktPmZvcm0oKTsKLSAgICAgICAgfSBlbHNlIGlmIChub2RlSUQgPT0gSURfRlJBTUUgfHwg
bm9kZUlEID09IElEX0lGUkFNRSkgeworICAgICAgICB9IGVsc2UgaWYgKG4tPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjpmcmFtZSgpKSB8fCBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aWZyYW1lKCkp
KSB7CiAgICAgICAgICAgICBOb2RlSW1wbCAqY2hpbGREb2MgPSBzdGF0aWNfY2FzdDxIVE1MRnJh
bWVFbGVtZW50SW1wbCAqPihuKS0+Y29udGVudERvY3VtZW50KCk7CiAgICAgICAgICAgICBIVE1M
Rm9ybUVsZW1lbnRJbXBsICpmcmFtZVJlc3VsdCA9IHNjYW5Gb3JGb3JtKGNoaWxkRG9jKTsKICAg
ICAgICAgICAgIGlmIChmcmFtZVJlc3VsdCkgewpAQCAtMzkwLDcgKzM4OSw3IEBAIEhUTUxGb3Jt
RWxlbWVudEltcGwgKktXUUtIVE1MUGFydDo6Y3VycmUKICAgICAvLyB0cnkgd2Fsa2luZyB1cCB0
aGUgbm9kZSB0cmVlIHRvIGZpbmQgYSBmb3JtIGVsZW1lbnQKICAgICBOb2RlSW1wbCAqbjsKICAg
ICBmb3IgKG4gPSBzdGFydDsgbjsgbiA9IG4tPnBhcmVudE5vZGUoKSkgewotICAgICAgICBpZiAo
aWRGcm9tTm9kZShuKSA9PSBJRF9GT1JNKSB7CisgICAgICAgIGlmIChuLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6Zm9ybSgpKSkgewogICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxG
b3JtRWxlbWVudEltcGwgKj4obik7CiAgICAgICAgIH0gZWxzZSBpZiAobi0+aXNIVE1MRWxlbWVu
dCgpCiAgICAgICAgICAgICAgICAgICAgJiYgc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+
KG4pLT5pc0dlbmVyaWNGb3JtRWxlbWVudCgpKSB7CkBAIC00ODksOCArNDg4LDcgQEAgTlNTdHJp
bmcgKktXUUtIVE1MUGFydDo6c2VhcmNoRm9yTGFiZWxzQQogICAgICAgICBpZiAoYWJvdmVDZWxs
KSB7CiAgICAgICAgICAgICAvLyBzZWFyY2ggd2l0aGluIHRoZSBhYm92ZSBjZWxsIHdlIGZvdW5k
IGZvciBhIG1hdGNoCiAgICAgICAgICAgICBmb3IgKE5vZGVJbXBsICpuID0gYWJvdmVDZWxsLT5m
aXJzdENoaWxkKCk7IG47IG4gPSBuLT50cmF2ZXJzZU5leHROb2RlKGFib3ZlQ2VsbCkpIHsKLSAg
ICAgICAgICAgICAgICBpZiAoaWRGcm9tTm9kZShuKSA9PSBJRF9URVhUCi0gICAgICAgICAgICAg
ICAgICAgICYmIG4tPnJlbmRlcmVyKCkgJiYgbi0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+dmlzaWJp
bGl0eSgpID09IFZJU0lCTEUpCisgICAgICAgICAgICAgICAgaWYgKG4tPmlzVGV4dE5vZGUoKSAm
JiBuLT5yZW5kZXJlcigpICYmIG4tPnJlbmRlcmVyKCktPnN0eWxlKCktPnZpc2liaWxpdHkoKSA9
PSBWSVNJQkxFKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgLy8gRm9y
IGVhY2ggdGV4dCBjaHVuaywgcnVuIHRoZSByZWdleHAKICAgICAgICAgICAgICAgICAgICAgUVN0
cmluZyBub2RlU3RyaW5nID0gbi0+bm9kZVZhbHVlKCkuc3RyaW5nKCk7CkBAIC01MjUsMjMgKzUy
MywyMSBAQCBOU1N0cmluZyAqS1dRS0hUTUxQYXJ0OjpzZWFyY2hGb3JMYWJlbHNCCiAgICAgICAg
ICBuICYmIGxlbmd0aFNlYXJjaGVkIDwgY2hhcnNTZWFyY2hlZFRocmVzaG9sZDsKICAgICAgICAg
IG4gPSBuLT50cmF2ZXJzZVByZXZpb3VzTm9kZSgpKQogICAgIHsKLSAgICAgICAgTm9kZUltcGw6
OklkIG5vZGVJRCA9IGlkRnJvbU5vZGUobik7Ci0gICAgICAgIGlmIChub2RlSUQgPT0gSURfRk9S
TQorICAgICAgICBpZiAobi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZvcm0oKSkKICAgICAgICAg
ICAgIHx8IChuLT5pc0hUTUxFbGVtZW50KCkKICAgICAgICAgICAgICAgICAmJiBzdGF0aWNfY2Fz
dDxIVE1MRWxlbWVudEltcGwgKj4obiktPmlzR2VuZXJpY0Zvcm1FbGVtZW50KCkpKQogICAgICAg
ICB7CiAgICAgICAgICAgICAvLyBXZSBoaXQgYW5vdGhlciBmb3JtIGVsZW1lbnQgb3IgdGhlIHN0
YXJ0IG9mIHRoZSBmb3JtIC0gYmFpbCBvdXQKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
IGVsc2UgaWYgKG5vZGVJRCA9PSBJRF9URCAmJiAhc3RhcnRpbmdUYWJsZUNlbGwpIHsKKyAgICAg
ICAgfSBlbHNlIGlmIChuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGQoKSkgJiYgIXN0YXJ0aW5n
VGFibGVDZWxsKSB7CiAgICAgICAgICAgICBzdGFydGluZ1RhYmxlQ2VsbCA9IHN0YXRpY19jYXN0
PEhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbCAqPihuKTsKLSAgICAgICAgfSBlbHNlIGlmIChub2Rl
SUQgPT0gSURfVFIgJiYgc3RhcnRpbmdUYWJsZUNlbGwpIHsKKyAgICAgICAgfSBlbHNlIGlmIChu
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dHIoKSkgJiYgc3RhcnRpbmdUYWJsZUNlbGwpIHsKICAg
ICAgICAgICAgIE5TU3RyaW5nICpyZXN1bHQgPSBzZWFyY2hGb3JMYWJlbHNBYm92ZUNlbGwocmVn
RXhwLCBzdGFydGluZ1RhYmxlQ2VsbCk7CiAgICAgICAgICAgICBpZiAocmVzdWx0KSB7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHNl
YXJjaGVkQ2VsbEFib3ZlID0gdHJ1ZTsKLSAgICAgICAgfSBlbHNlIGlmIChub2RlSUQgPT0gSURf
VEVYVAotICAgICAgICAgICAgICAgICAgICYmIG4tPnJlbmRlcmVyKCkgJiYgbi0+cmVuZGVyZXIo
KS0+c3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUpCisgICAgICAgIH0gZWxzZSBpZiAo
bi0+aXNUZXh0Tm9kZSgpICYmIG4tPnJlbmRlcmVyKCkgJiYgbi0+cmVuZGVyZXIoKS0+c3R5bGUo
KS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUpCiAgICAgICAgIHsKICAgICAgICAgICAgIC8vIEZv
ciBlYWNoIHRleHQgY2h1bmssIHJ1biB0aGUgcmVnZXhwCiAgICAgICAgICAgICBRU3RyaW5nIG5v
ZGVTdHJpbmcgPSBuLT5ub2RlVmFsdWUoKS5zdHJpbmcoKTsKQEAgLTI4NDgsMTQgKzI4NDQsMTAg
QEAgTlNGaWxlV3JhcHBlciAqS1dRS0hUTUxQYXJ0OjpmaWxlV3JhcHBlcgogCiBzdGF0aWMgRWxl
bWVudEltcGwgKmxpc3RQYXJlbnQoRWxlbWVudEltcGwgKml0ZW0pCiB7Ci0gICAgLy8gSWNrISAg
QXZvaWQgdXNlIG9mIGl0ZW0tPmlkKCkgd2hpY2ggY29uZnVzZXMgT2JqQysrLgotICAgIHVuc2ln
bmVkIHNob3J0IF9pZCA9IGl0ZW0tPmlkZW50aWZpZXIoKTsKLSAgICAKLSAgICB3aGlsZSAoX2lk
ICE9IElEX1VMICYmIF9pZCAhPSBJRF9PTCkgeworICAgIHdoaWxlICghaXRlbS0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OnVsKCkpICYmICFpdGVtLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b2woKSkp
IHsKICAgICAgICAgaXRlbSA9IHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsICo+KGl0ZW0tPnBhcmVu
dE5vZGUoKSk7CiAgICAgICAgIGlmICghaXRlbSkKICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBfaWQgPSBpdGVtLT5pZGVudGlmaWVyKCk7CiAgICAgfQogICAgIHJldHVybiBpdGVtOwogfQpA
QCAtMjg2OCw3ICsyODYwLDcgQEAgc3RhdGljIE5vZGVJbXBsKiBpc1RleHRGaXJzdEluTGlzdEl0
ZW0oTgogICAgIHdoaWxlIChwYXIpIHsKICAgICAgICAgaWYgKHBhci0+Zmlyc3RDaGlsZCgpICE9
IGUpCiAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgaWYgKHBhci0+aWRlbnRpZmllcigp
ID09IElEX0xJKQorICAgICAgICBpZiAocGFyLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6bGkoKSkp
CiAgICAgICAgICAgICByZXR1cm4gcGFyOwogICAgICAgICBlID0gcGFyOwogICAgICAgICBwYXIg
PSBwYXItPnBhcmVudE5vZGUoKTsKQEAgLTMwMjIsMTA5ICszMDE0LDk1IEBAIE5TQXR0cmlidXRl
ZFN0cmluZyAqS1dRS0hUTUxQYXJ0OjphdHRyaWIKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICAgICAgLy8gVGhpcyBpcyBvdXIgc2ltcGxlIEhUTUwgLT4gQVNDSUkgdHJhbnNmb3Jt
YXRpb246CiAgICAgICAgICAgICAgICAgUVN0cmluZyB0ZXh0OwotICAgICAgICAgICAgICAgIE5v
ZGVJbXBsOjpJZCBfaWQgPSBuLT5pZGVudGlmaWVyKCk7Ci0gICAgICAgICAgICAgICAgc3dpdGNo
KF9pZCkgewotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0E6Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAvLyBOb3RlIHRoZSBzdGFydCBvZiB0aGUgPGE+IGVsZW1lbnQuICBXZSB3aWxsIGFk
ZCB0aGUgTlNMaW5rQXR0cmlidXRlTmFtZQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXR0
cmlidXRlIHRvIHRoZSBhdHRyaWJ1dGVkIHN0cmluZyB3aGVuIG5hdmlnYXRpbmcgdG8gdGhlIG5l
eHQgc2libGluZyAKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9mIHRoaXMgbm9kZS4KLSAg
ICAgICAgICAgICAgICAgICAgICAgIGxpbmtTdGFydExvY2F0aW9uID0gW3Jlc3VsdCBsZW5ndGhd
OwotICAgICAgICAgICAgICAgICAgICAgICAgbGlua1N0YXJ0Tm9kZSA9IHN0YXRpY19jYXN0PEVs
ZW1lbnRJbXBsKj4obik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAg
ICAgICAgICAgICAgICBjYXNlIElEX0JSOgotICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCAr
PSAiXG4iOwotICAgICAgICAgICAgICAgICAgICAgICAgaGFzTmV3TGluZSA9IHRydWU7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAKLSAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBJRF9MSToKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBRU3RyaW5nIGxpc3RUZXh0OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVs
ZW1lbnRJbXBsICppdGVtUGFyZW50ID0gbGlzdFBhcmVudChzdGF0aWNfY2FzdDxFbGVtZW50SW1w
bCAqPihuKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCFoYXNOZXdMaW5lKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBsaXN0VGV4dCArPSAnXG4nOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc05l
d0xpbmUgPSB0cnVlOwotICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RJdGVt
cy5hcHBlbmQoc3RhdGljX2Nhc3Q8RWxlbWVudEltcGwqPihuKSk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgTGlzdEl0ZW1JbmZvIGluZm87Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW5mby5zdGFydCA9IFtyZXN1bHQgbGVuZ3RoXTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbmZvLmVuZCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdEl0ZW1M
b2NhdGlvbnMuYXBwZW5kIChpbmZvKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0VGV4dCArPSAnXHQnOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChpdGVtUGFyZW50ICYmIHJlbmRlcmVyLT5pc0xpc3RJdGVtKCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVyTGlzdEl0ZW0gKmxpc3RS
ZW5kZXJlciA9IHN0YXRpY19jYXN0PFJlbmRlckxpc3RJdGVtKj4ocmVuZGVyZXIpOwotCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heE1hcmtlcldpZHRoID0gTUFYKFtmb250IHBv
aW50U2l6ZV0sIG1heE1hcmtlcldpZHRoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3dpdGNoKHN0eWxlLT5saXN0U3R5bGVUeXBlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNhc2Uga2h0bWw6OkRJU0M6Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbGlzdFRleHQgKz0gKChRQ2hhcilCVUxMRVRfQ0hBUik7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjYXNlIGtodG1sOjpDSVJDTEU6Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdFRleHQgKz0gKChRQ2hhcilDSVJDTEVfQ0hB
Uik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIGtodG1sOjpTUVVBUkU6Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdFRleHQgKz0gKChRQ2hhcilT
UVVBUkVfQ0hBUik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIGtodG1sOjpMTk9O
RToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgUVN0cmluZyBtYXJrZXIgPSBsaXN0UmVuZGVyZXItPm1h
cmtlclN0cmluZ1ZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbGlzdFRleHQgKz0gbWFya2VyOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIFVzZSBBcHBLaXQgbWV0cmljcy4gIFdpbGwgYmUgcmVuZGVyZWQgYnkgQXBwS2l0
LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IG1hcmtlcldp
ZHRoID0gW2ZvbnQgd2lkdGhPZlN0cmluZzogbWFya2VyLmdldE5TU3RyaW5nKCldOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heE1hcmtlcldpZHRoID0gTUFYKG1h
cmtlcldpZHRoLCBtYXhNYXJrZXJXaWR0aCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBpZiAobi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmEoKSkp
IHsKKyAgICAgICAgICAgICAgICAgICAgLy8gTm90ZSB0aGUgc3RhcnQgb2YgdGhlIDxhPiBlbGVt
ZW50LiAgV2Ugd2lsbCBhZGQgdGhlIE5TTGlua0F0dHJpYnV0ZU5hbWUKKyAgICAgICAgICAgICAg
ICAgICAgLy8gYXR0cmlidXRlIHRvIHRoZSBhdHRyaWJ1dGVkIHN0cmluZyB3aGVuIG5hdmlnYXRp
bmcgdG8gdGhlIG5leHQgc2libGluZyAKKyAgICAgICAgICAgICAgICAgICAgLy8gb2YgdGhpcyBu
b2RlLgorICAgICAgICAgICAgICAgICAgICBsaW5rU3RhcnRMb2NhdGlvbiA9IFtyZXN1bHQgbGVu
Z3RoXTsKKyAgICAgICAgICAgICAgICAgICAgbGlua1N0YXJ0Tm9kZSA9IHN0YXRpY19jYXN0PEVs
ZW1lbnRJbXBsKj4obik7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6YnIoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgdGV4dCArPSAiXG4iOwor
ICAgICAgICAgICAgICAgICAgICBoYXNOZXdMaW5lID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9
IGVsc2UgaWYgKG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpsaSgpKSkgeworICAgICAgICAgICAg
ICAgICAgICBRU3RyaW5nIGxpc3RUZXh0OworICAgICAgICAgICAgICAgICAgICBFbGVtZW50SW1w
bCAqaXRlbVBhcmVudCA9IGxpc3RQYXJlbnQoc3RhdGljX2Nhc3Q8RWxlbWVudEltcGwgKj4obikp
OworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNOZXdM
aW5lKQorICAgICAgICAgICAgICAgICAgICAgICAgbGlzdFRleHQgKz0gJ1xuJzsKKyAgICAgICAg
ICAgICAgICAgICAgaGFzTmV3TGluZSA9IHRydWU7CiAKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbGlzdFRleHQgKz0gJyAnOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsaXN0VGV4dCArPSAnXHQnOwotICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBOU011dGFibGVEaWN0aW9uYXJ5ICphdHRyczsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBhdHRycyA9IFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10g
aW5pdF07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRycyBzZXRPYmplY3Q6
Zm9udCBmb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChzdHlsZSAmJiBzdHlsZS0+Y29sb3IoKS5pc1ZhbGlkKCkpCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0cnMgc2V0T2JqZWN0OnN0eWxlLT5jb2xv
cigpLmdldE5TQ29sb3IoKSBmb3JLZXk6TlNGb3JlZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lXTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0eWxlICYmIHN0eWxlLT5iYWNr
Z3JvdW5kQ29sb3IoKS5pc1ZhbGlkKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBbYXR0cnMgc2V0T2JqZWN0OnN0eWxlLT5iYWNrZ3JvdW5kQ29sb3IoKS5nZXROU0NvbG9y
KCkgZm9yS2V5Ok5TQmFja2dyb3VuZENvbG9yQXR0cmlidXRlTmFtZV07Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlNBdHRyaWJ1dGVkU3RyaW5nICpwYXJ0
aWFsU3RyaW5nID0gW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOmxp
c3RUZXh0LmdldE5TU3RyaW5nKCkgYXR0cmlidXRlczphdHRyc107Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFthdHRycyByZWxlYXNlXTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgW3Jlc3VsdCBhcHBlbmRBdHRyaWJ1dGVkU3RyaW5nOiBwYXJ0aWFsU3RyaW5nXTsg
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwYXJ0aWFs
U3RyaW5nIHJlbGVhc2VdOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgbGlzdEl0ZW1zLmFwcGVuZChzdGF0aWNfY2FzdDxFbGVtZW50SW1wbCo+KG4p
KTsKKyAgICAgICAgICAgICAgICAgICAgTGlzdEl0ZW1JbmZvIGluZm87CisgICAgICAgICAgICAg
ICAgICAgIGluZm8uc3RhcnQgPSBbcmVzdWx0IGxlbmd0aF07CisgICAgICAgICAgICAgICAgICAg
IGluZm8uZW5kID0gMDsKKyAgICAgICAgICAgICAgICAgICAgbGlzdEl0ZW1Mb2NhdGlvbnMuYXBw
ZW5kIChpbmZvKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGxp
c3RUZXh0ICs9ICdcdCc7CisgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtUGFyZW50ICYmIHJl
bmRlcmVyLT5pc0xpc3RJdGVtKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRlckxp
c3RJdGVtICpsaXN0UmVuZGVyZXIgPSBzdGF0aWNfY2FzdDxSZW5kZXJMaXN0SXRlbSo+KHJlbmRl
cmVyKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgbWF4TWFya2VyV2lkdGggPSBNQVgoW2Zv
bnQgcG9pbnRTaXplXSwgbWF4TWFya2VyV2lkdGgpOworICAgICAgICAgICAgICAgICAgICAgICAg
c3dpdGNoKHN0eWxlLT5saXN0U3R5bGVUeXBlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjYXNlIGtodG1sOjpESVNDOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBs
aXN0VGV4dCArPSAoKFFDaGFyKUJVTExFVF9DSEFSKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBraHRtbDo6
Q0lSQ0xFOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0VGV4dCArPSAoKFFD
aGFyKUNJUkNMRV9DSEFSKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBraHRtbDo6U1FVQVJFOgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0VGV4dCArPSAoKFFDaGFyKVNRVUFSRV9DSEFS
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2FzZSBraHRtbDo6TE5PTkU6CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFTdHJpbmcgbWFya2VyID0gbGlzdFJlbmRl
cmVyLT5tYXJrZXJTdHJpbmdWYWx1ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsaXN0VGV4dCArPSBtYXJrZXI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IFVzZSBBcHBLaXQgbWV0cmljcy4gIFdpbGwgYmUgcmVuZGVyZWQgYnkgQXBwS2l0LgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBtYXJrZXJXaWR0aCA9IFtmb250IHdpZHRo
T2ZTdHJpbmc6IG1hcmtlci5nZXROU1N0cmluZygpXTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbWF4TWFya2VyV2lkdGggPSBNQVgobWFya2VyV2lkdGgsIG1heE1hcmtlcldpZHRo
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfT0w6Ci0gICAgICAgICAgICAgICAg
ICAgIGNhc2UgSURfVUw6CisgICAgICAgICAgICAgICAgICAgICAgICBsaXN0VGV4dCArPSAnICc7
CisgICAgICAgICAgICAgICAgICAgICAgICBsaXN0VGV4dCArPSAnXHQnOworCisgICAgICAgICAg
ICAgICAgICAgICAgICBOU011dGFibGVEaWN0aW9uYXJ5ICphdHRyczsKKworICAgICAgICAgICAg
ICAgICAgICAgICAgYXR0cnMgPSBbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdOwor
ICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHJzIHNldE9iamVjdDpmb250IGZvcktleTpOU0Zv
bnRBdHRyaWJ1dGVOYW1lXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHlsZSAmJiBz
dHlsZS0+Y29sb3IoKS5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0
dHJzIHNldE9iamVjdDpzdHlsZS0+Y29sb3IoKS5nZXROU0NvbG9yKCkgZm9yS2V5Ok5TRm9yZWdy
b3VuZENvbG9yQXR0cmlidXRlTmFtZV07CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3R5
bGUgJiYgc3R5bGUtPmJhY2tncm91bmRDb2xvcigpLmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBbYXR0cnMgc2V0T2JqZWN0OnN0eWxlLT5iYWNrZ3JvdW5kQ29sb3IoKS5n
ZXROU0NvbG9yKCkgZm9yS2V5Ok5TQmFja2dyb3VuZENvbG9yQXR0cmlidXRlTmFtZV07CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgIE5TQXR0cmlidXRlZFN0cmluZyAqcGFydGlhbFN0cmluZyA9
IFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzpsaXN0VGV4dC5nZXRO
U1N0cmluZygpIGF0dHJpYnV0ZXM6YXR0cnNdOworICAgICAgICAgICAgICAgICAgICAgICAgW2F0
dHJzIHJlbGVhc2VdOworICAgICAgICAgICAgICAgICAgICAgICAgW3Jlc3VsdCBhcHBlbmRBdHRy
aWJ1dGVkU3RyaW5nOiBwYXJ0aWFsU3RyaW5nXTsgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgICAgICAgICBbcGFydGlhbFN0cmluZyByZWxlYXNlXTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChuLT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6b2woKSkgfHwgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnVsKCkpKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIWhhc05ld0xpbmUpCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdGV4dCArPSAiXG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgaGFzTmV3TGluZSA9IHRy
dWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgICAg
ICBjYXNlIElEX1REOgotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX1RIOgotICAgICAgICAg
ICAgICAgICAgICBjYXNlIElEX0hSOgotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0REOgot
ICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0RMOgotICAgICAgICAgICAgICAgICAgICBjYXNl
IElEX0RUOgotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX1BSRToKLSAgICAgICAgICAgICAg
ICAgICAgY2FzZSBJRF9CTE9DS1FVT1RFOgotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0RJ
VjoKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuLT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6dGQoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6dGgoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuLT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6aHIoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZGQoKSkgfHwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZGwoKSkgfHwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZHQoKSkgfHwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
cHJlKCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OmJsb2NrcXVvdGUoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZGl2KCkpKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIWhhc05ld0xpbmUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCAr
PSAnXG4nOwogICAgICAgICAgICAgICAgICAgICAgICAgaGFzTmV3TGluZSA9IHRydWU7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9Q
OgotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX1RSOgotICAgICAgICAgICAgICAgICAgICBj
YXNlIElEX0gxOgotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0gyOgotICAgICAgICAgICAg
ICAgICAgICBjYXNlIElEX0gzOgotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0g0OgotICAg
ICAgICAgICAgICAgICAgICBjYXNlIElEX0g1OgotICAgICAgICAgICAgICAgICAgICBjYXNlIElE
X0g2OiB7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobi0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OnAoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6dHIoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDEoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDIoKSkgfHwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDMoKSkgfHwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDQoKSkg
fHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6aDUoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6aDYoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaGFzTmV3
TGluZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0ICs9ICdcbic7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAKQEAgLTMxMzksMTAgKzMxMTcsOCBAQCBOU0F0dHJpYnV0ZWRTdHJp
bmcgKktXUUtIVE1MUGFydDo6YXR0cmliCiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIGhhc05ld0xpbmUg
PSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBjYXNl
IElEX0lNRzoKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobi0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OmltZygpKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBlbmRpbmdTdHls
ZWRTcGFjZSAhPSBuaWwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGlua1N0
YXJ0TG9jYXRpb24gPT0gW3Jlc3VsdCBsZW5ndGhdKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICsrbGlua1N0YXJ0TG9jYXRpb247CkBAIC0zMTU2LDggKzMxMzIsOSBAQCBOU0F0
dHJpYnV0ZWRTdHJpbmcgKktXUUtIVE1MUGFydDo6YXR0cmliCiAgICAgICAgICAgICAgICAgICAg
ICAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKmlTdHJpbmcgPSBbTlNBdHRyaWJ1dGVkU3RyaW5nIGF0
dHJpYnV0ZWRTdHJpbmdXaXRoQXR0YWNobWVudDphdHRhY2htZW50XTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIFtyZXN1bHQgYXBwZW5kQXR0cmlidXRlZFN0cmluZzogaVN0cmluZ107CiAgICAg
ICAgICAgICAgICAgICAgICAgICBbYXR0YWNobWVudCByZWxlYXNlXTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
fQorCiAgICAgICAgICAgICAgICAgTlNBdHRyaWJ1dGVkU3RyaW5nICpwYXJ0aWFsU3RyaW5nID0g
W1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOnRleHQuZ2V0TlNTdHJp
bmcoKV07CiAgICAgICAgICAgICAgICAgW3Jlc3VsdCBhcHBlbmRBdHRyaWJ1dGVkU3RyaW5nOiBw
YXJ0aWFsU3RyaW5nXTsKICAgICAgICAgICAgICAgICBbcGFydGlhbFN0cmluZyByZWxlYXNlXTsK
QEAgLTMxNzksNzEgKzMxNTYsNjAgQEAgTlNBdHRyaWJ1dGVkU3RyaW5nICpLV1FLSFRNTFBhcnQ6
OmF0dHJpYgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgbmV4dCA9IG4tPm5l
eHRTaWJsaW5nKCk7CiAKLSAgICAgICAgICAgIE5vZGVJbXBsOjpJZCBfaWQgPSBuLT5pZGVudGlm
aWVyKCk7Ci0gICAgICAgICAgICBzd2l0Y2goX2lkKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBJ
RF9BOgotICAgICAgICAgICAgICAgICAgICAvLyBFbmQgb2YgYSA8YT4gZWxlbWVudC4gIENyZWF0
ZSBhbiBhdHRyaWJ1dGVkIHN0cmluZyBOU0xpbmtBdHRyaWJ1dGVOYW1lIGF0dHJpYnV0ZQotICAg
ICAgICAgICAgICAgICAgICAvLyBmb3IgdGhlIHJhbmdlIG9mIHRoZSBsaW5rLiAgTm90ZSB0aGF0
IHdlIGNyZWF0ZSB0aGUgYXR0cmlidXRlZCBzdHJpbmcgZnJvbSB0aGUgRE9NLCB3aGljaAotICAg
ICAgICAgICAgICAgICAgICAvLyB3aWxsIGhhdmUgY29ycmVjdGVkIGFueSBpbGxlZ2FsbHkgbmVz
dGVkIDxhPiBlbGVtZW50cy4KLSAgICAgICAgICAgICAgICAgICAgaWYgKGxpbmtTdGFydE5vZGUg
JiYgbiA9PSBsaW5rU3RhcnROb2RlKXsKLSAgICAgICAgICAgICAgICAgICAgICAgIERPTVN0cmlu
ZyBocmVmID0gcGFyc2VVUkwobGlua1N0YXJ0Tm9kZS0+Z2V0QXR0cmlidXRlKEFUVFJfSFJFRikp
OwotICAgICAgICAgICAgICAgICAgICAgICAgS1VSTCBrVVJMID0gS1dRKGxpbmtTdGFydE5vZGUt
PmdldERvY3VtZW50KCktPnBhcnQoKSktPmNvbXBsZXRlVVJMKGhyZWYuc3RyaW5nKCkpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICBOU1VSTCAqVVJM
ID0ga1VSTC5nZXROU1VSTCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgW3Jlc3VsdCBhZGRB
dHRyaWJ1dGU6TlNMaW5rQXR0cmlidXRlTmFtZSB2YWx1ZTpVUkwgcmFuZ2U6TlNNYWtlUmFuZ2Uo
bGlua1N0YXJ0TG9jYXRpb24sIFtyZXN1bHQgbGVuZ3RoXS1saW5rU3RhcnRMb2NhdGlvbildOwot
ICAgICAgICAgICAgICAgICAgICAgICAgbGlua1N0YXJ0Tm9kZSA9IDA7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAobi0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OmEoKSkpIHsKKyAgICAgICAgICAgICAgICAvLyBFbmQgb2Yg
YSA8YT4gZWxlbWVudC4gIENyZWF0ZSBhbiBhdHRyaWJ1dGVkIHN0cmluZyBOU0xpbmtBdHRyaWJ1
dGVOYW1lIGF0dHJpYnV0ZQorICAgICAgICAgICAgICAgIC8vIGZvciB0aGUgcmFuZ2Ugb2YgdGhl
IGxpbmsuICBOb3RlIHRoYXQgd2UgY3JlYXRlIHRoZSBhdHRyaWJ1dGVkIHN0cmluZyBmcm9tIHRo
ZSBET00sIHdoaWNoCisgICAgICAgICAgICAgICAgLy8gd2lsbCBoYXZlIGNvcnJlY3RlZCBhbnkg
aWxsZWdhbGx5IG5lc3RlZCA8YT4gZWxlbWVudHMuCisgICAgICAgICAgICAgICAgaWYgKGxpbmtT
dGFydE5vZGUgJiYgbiA9PSBsaW5rU3RhcnROb2RlKSB7CisgICAgICAgICAgICAgICAgICAgIERP
TVN0cmluZyBocmVmID0gcGFyc2VVUkwobGlua1N0YXJ0Tm9kZS0+Z2V0QXR0cmlidXRlKEFUVFJf
SFJFRikpOworICAgICAgICAgICAgICAgICAgICBLVVJMIGtVUkwgPSBLV1EobGlua1N0YXJ0Tm9k
ZS0+Z2V0RG9jdW1lbnQoKS0+cGFydCgpKS0+Y29tcGxldGVVUkwoaHJlZi5zdHJpbmcoKSk7Cisg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBOU1VSTCAqVVJMID0ga1VS
TC5nZXROU1VSTCgpOworICAgICAgICAgICAgICAgICAgICBbcmVzdWx0IGFkZEF0dHJpYnV0ZTpO
U0xpbmtBdHRyaWJ1dGVOYW1lIHZhbHVlOlVSTCByYW5nZTpOU01ha2VSYW5nZShsaW5rU3RhcnRM
b2NhdGlvbiwgW3Jlc3VsdCBsZW5ndGhdLWxpbmtTdGFydExvY2F0aW9uKV07CisgICAgICAgICAg
ICAgICAgICAgIGxpbmtTdGFydE5vZGUgPSAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvbCgp
KSB8fCBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dWwoKSkpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoIWhhc05ld0xpbmUpCisgICAgICAgICAgICAgICAgICAgIHRleHQgKz0gJ1xuJzsKKyAgICAg
ICAgICAgICAgICBoYXNOZXdMaW5lID0gdHJ1ZTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobi0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OmxpKCkpKSB7CiAgICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgY2FzZSBJRF9PTDoKLSAgICAgICAgICAgICAgICBjYXNlIElEX1VMOgotICAgICAg
ICAgICAgICAgICAgICBpZiAoIWhhc05ld0xpbmUpCi0gICAgICAgICAgICAgICAgICAgICAgICB0
ZXh0ICs9ICdcbic7Ci0gICAgICAgICAgICAgICAgICAgIGhhc05ld0xpbmUgPSB0cnVlOwotICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgIGNhc2UgSURfTEk6Ci0g
ICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBpLCBjb3Vu
dCA9IGxpc3RJdGVtcy5jb3VudCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0g
MDsgaSA8IGNvdW50OyBpKyspewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsaXN0
SXRlbXMuYXQoaSkgPT0gbil7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RJ
dGVtTG9jYXRpb25zW2ldLmVuZCA9IFtyZXN1bHQgbGVuZ3RoXTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGludCBpLCBjb3VudCA9IGxp
c3RJdGVtcy5jb3VudCgpOworICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsg
aSsrKXsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGxpc3RJdGVtcy5hdChpKSA9PSBuKXsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGxpc3RJdGVtTG9jYXRpb25zW2ldLmVuZCA9IFtyZXN1bHQg
bGVuZ3RoXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaGFzTmV3TGluZSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHRleHQgKz0gJ1xuJzsKLSAgICAgICAgICAgICAgICAgICAgaGFzTmV3TGlu
ZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAg
Y2FzZSBJRF9URDoKLSAgICAgICAgICAgICAgICBjYXNlIElEX1RIOgotICAgICAgICAgICAgICAg
IGNhc2UgSURfSFI6Ci0gICAgICAgICAgICAgICAgY2FzZSBJRF9ERDoKLSAgICAgICAgICAgICAg
ICBjYXNlIElEX0RMOgotICAgICAgICAgICAgICAgIGNhc2UgSURfRFQ6Ci0gICAgICAgICAgICAg
ICAgY2FzZSBJRF9QUkU6Ci0gICAgICAgICAgICAgICAgY2FzZSBJRF9CTE9DS1FVT1RFOgotICAg
ICAgICAgICAgICAgIGNhc2UgSURfRElWOgotICAgICAgICAgICAgICAgICAgICBpZiAoIWhhc05l
d0xpbmUpCi0gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0ICs9ICdcbic7Ci0gICAgICAgICAg
ICAgICAgICAgIGhhc05ld0xpbmUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICBjYXNlIElEX1A6Ci0gICAgICAgICAgICAgICAgY2FzZSBJRF9UUjoK
LSAgICAgICAgICAgICAgICBjYXNlIElEX0gxOgotICAgICAgICAgICAgICAgIGNhc2UgSURfSDI6
Ci0gICAgICAgICAgICAgICAgY2FzZSBJRF9IMzoKLSAgICAgICAgICAgICAgICBjYXNlIElEX0g0
OgotICAgICAgICAgICAgICAgIGNhc2UgSURfSDU6Ci0gICAgICAgICAgICAgICAgY2FzZSBJRF9I
NjoKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNOZXdMaW5lKQotICAgICAgICAgICAgICAg
ICAgICAgICAgdGV4dCArPSAnXG4nOwotICAgICAgICAgICAgICAgICAgICAvLyBBbiBleHRyYSBu
ZXdsaW5lIGlzIG5lZWRlZCBhdCB0aGUgc3RhcnQsIG5vdCB0aGUgZW5kLCBvZiB0aGVzZSB0eXBl
cyBvZiB0YWdzLAotICAgICAgICAgICAgICAgICAgICAvLyBzbyBkb24ndCBhZGQgYW5vdGhlciBo
ZXJlLgotICAgICAgICAgICAgICAgICAgICBoYXNOZXdMaW5lID0gdHJ1ZTsKLSAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICgh
aGFzTmV3TGluZSkKKyAgICAgICAgICAgICAgICAgICAgdGV4dCArPSAnXG4nOworICAgICAgICAg
ICAgICAgIGhhc05ld0xpbmUgPSB0cnVlOworICAgICAgICAgICAgfSBlbHNlIGlmIChuLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6dGQoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OnRoKCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgIG4tPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjpocigpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICBuLT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6ZGQoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgbi0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OmRsKCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgIG4t
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpkdCgpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICBu
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6cHJlKCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAg
IG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpibG9ja3F1b3RlKCkpIHx8CisgICAgICAgICAgICAg
ICAgICAgICAgIG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpkaXYoKSkpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoIWhhc05ld0xpbmUpCisgICAgICAgICAgICAgICAgICAgIHRleHQgKz0gJ1xuJzsK
KyAgICAgICAgICAgICAgICBoYXNOZXdMaW5lID0gdHJ1ZTsKKyAgICAgICAgICAgIH0gZWxzZSBp
ZiAobi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnAoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAg
ICAgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRyKCkpIHx8CisgICAgICAgICAgICAgICAgICAg
ICAgIG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoMSgpKSB8fAorICAgICAgICAgICAgICAgICAg
ICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDIoKSkgfHwKKyAgICAgICAgICAgICAgICAg
ICAgICAgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmgzKCkpIHx8CisgICAgICAgICAgICAgICAg
ICAgICAgIG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoNCgpKSB8fAorICAgICAgICAgICAgICAg
ICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDUoKSkgfHwKKyAgICAgICAgICAgICAg
ICAgICAgICAgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omg2KCkpKSB7CisgICAgICAgICAgICAg
ICAgaWYgKCFoYXNOZXdMaW5lKQorICAgICAgICAgICAgICAgICAgICB0ZXh0ICs9ICdcbic7Cisg
ICAgICAgICAgICAgICAgLy8gQW4gZXh0cmEgbmV3bGluZSBpcyBuZWVkZWQgYXQgdGhlIHN0YXJ0
LCBub3QgdGhlIGVuZCwgb2YgdGhlc2UgdHlwZXMgb2YgdGFncywKKyAgICAgICAgICAgICAgICAv
LyBzbyBkb24ndCBhZGQgYW5vdGhlciBoZXJlLgorICAgICAgICAgICAgICAgIGhhc05ld0xpbmUg
PSB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBOU0F0dHJp
YnV0ZWRTdHJpbmcgKnBhcnRpYWxTdHJpbmcgPSBbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10g
aW5pdFdpdGhTdHJpbmc6dGV4dC5nZXROU1N0cmluZygpXTsKQEAgLTM0NzYsNyArMzQ0Miw3IEBA
IFJlbmRlclN0eWxlICpLV1FLSFRNTFBhcnQ6OnN0eWxlRm9yU2VsZWMKICAgICAgICAgcmV0dXJu
IG5vZGUtPnJlbmRlcmVyKCktPnN0eWxlKCk7CiAKICAgICBpbnQgZXhjZXB0aW9uQ29kZSA9IDA7
Ci0gICAgRWxlbWVudEltcGwgKnN0eWxlRWxlbWVudCA9IHhtbERvY0ltcGwoKS0+Y3JlYXRlSFRN
TEVsZW1lbnQoInNwYW4iLCBleGNlcHRpb25Db2RlKTsKKyAgICBFbGVtZW50SW1wbCAqc3R5bGVF
bGVtZW50ID0geG1sRG9jSW1wbCgpLT5jcmVhdGVFbGVtZW50TlMoWEhUTUxfTkFNRVNQQUNFLCAi
c3BhbiIsIGV4Y2VwdGlvbkNvZGUpOwogICAgIEFTU0VSVChleGNlcHRpb25Db2RlID09IDApOwog
CiAgICAgc3R5bGVFbGVtZW50LT5yZWYoKTsKQEAgLTM3MDMsNyArMzY2OSw3IEBAIHZvaWQgS1dR
S0hUTUxQYXJ0OjpzZXRTZWxlY3Rpb25Gcm9tTm9uZSgKICAgICAgICAgd2hpbGUgKG5vZGUpIHsK
ICAgICAgICAgICAgIC8vIExvb2sgZm9yIGEgYmxvY2sgZmxvdywgYnV0IHNraXAgb3ZlciB0aGUg
SFRNTCBlbGVtZW50LCBzaW5jZSB3ZSByZWFsbHkKICAgICAgICAgICAgIC8vIHdhbnQgdG8gZ2V0
IGF0IGxlYXN0IGFzIGZhciBhcyB0aGUgdGhlIEJPRFkgZWxlbWVudCBpbiBhIGRvY3VtZW50Lgot
ICAgICAgICAgICAgaWYgKG5vZGUtPmlzQmxvY2tGbG93KCkgJiYgbm9kZS0+aWRlbnRpZmllcigp
ICE9IElEX0hUTUwpCisgICAgICAgICAgICBpZiAobm9kZS0+aXNCbG9ja0Zsb3coKSAmJiBub2Rl
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aHRtbCgpKSkKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCk7CiAgICAgICAgIH0K
SW5kZXg6IGt3cS9LV1FSZW5kZXJUcmVlRGVidWcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9XZWJDb3JlL2t3cS9LV1FSZW5kZXJUcmVlRGVidWcuY3BwLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjQxCmRpZmYgLXUgLXAgLXIxLjQxIGt3cS9LV1FSZW5kZXJUcmVlRGVidWcuY3Bw
Ci0tLSBrd3EvS1dRUmVuZGVyVHJlZURlYnVnLmNwcAkxNiBNYXkgMjAwNSAyMjowMzo0OCAtMDAw
MAkxLjQxCisrKyBrd3EvS1dRUmVuZGVyVHJlZURlYnVnLmNwcAk3IEp1bCAyMDA1IDA1OjU5OjQ0
IC0wMDAwCkBAIC0yNyw3ICsyNyw2IEBACiAKICNpbmNsdWRlICJkb21fZG9jaW1wbC5oIgogI2lu
Y2x1ZGUgImRvbV9wb3NpdGlvbi5oIgotI2luY2x1ZGUgImh0bWx0YWdzLmgiCiAjaW5jbHVkZSAi
anNlZGl0aW5nLmgiCiAjaW5jbHVkZSAia2h0bWx2aWV3LmgiCiAjaW5jbHVkZSAicmVuZGVyX2Nh
bnZhcy5oIgpAQCAtMTE2LDkgKzExNSwxMyBAQCBzdGF0aWMgUVN0cmluZyBnZXRUYWdOYW1lKE5v
ZGVJbXBsICpuKQogewogICAgIGlmIChuLT5pc0RvY3VtZW50Tm9kZSgpKQogICAgICAgICByZXR1
cm4gIiI7Ci0gICAgaWYgKG4tPmlkKCkgPD0gSURfTEFTVF9UQUcpCi0gICAgICAgIHJldHVybiBn
ZXRUYWdOYW1lKG4tPmlkKCkpLnN0cmluZygpOwotICAgIHJldHVybiBuLT5ub2RlTmFtZSgpLnN0
cmluZygpOworICAgIGlmIChuLT5pc1RleHROb2RlKCkpCisgICAgICAgIHJldHVybiAiVEVYVCI7
IC8vIEZJWE1FOiBSZW1vdmUgb25jZSB0aGUgbGF5b3V0IHRlc3RzIGFyZSByZWFkeSB0byBjaGFu
Z2UuCisgICAgaWYgKG4tPmlzQ29tbWVudE5vZGUoKSkKKyAgICAgICAgcmV0dXJuICJDT01NRU5U
IjsKKyAgICBpZiAobi0+aXNIVE1MRWxlbWVudCgpKQorICAgICAgICByZXR1cm4gbi0+bm9kZU5h
bWUoKS51cHBlcigpLnN0cmluZygpOyAvLyBGSVhNRTogV2Ugd2FudCB0byBkdW1wIHRoZSByZWFs
IERPTSBuYW1lLCBub3QgYW4gdXBwZXJjYXNlIG5hbWUuCisgICAgcmV0dXJuIG4tPm5vZGVOYW1l
KCkuc3RyaW5nKCk7IAogfQogCiBzdGF0aWMgUVRleHRTdHJlYW0gJm9wZXJhdG9yPDwoUVRleHRT
dHJlYW0gJnRzLCBjb25zdCBSZW5kZXJPYmplY3QgJm8pCkluZGV4OiBrd3EvV2ViQ29yZUJyaWRn
ZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3EvV2ViQ29yZUJy
aWRnZS5tbSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zOTYKZGlmZiAtdSAtcCAtcjEuMzk2IGt3
cS9XZWJDb3JlQnJpZGdlLm1tCi0tLSBrd3EvV2ViQ29yZUJyaWRnZS5tbQkxNCBKdW4gMjAwNSAw
MDoyMzo0NSAtMDAwMAkxLjM5NgorKysga3dxL1dlYkNvcmVCcmlkZ2UubW0JNyBKdWwgMjAwNSAw
NTo1OTo0NSAtMDAwMApAQCAtMzksNyArMzksNiBAQAogI2ltcG9ydCAiaHRtbF9pbWFnZWltcGwu
aCIKICNpbXBvcnQgImh0bWxhdHRycy5oIgogI2ltcG9ydCAiaHRtbGVkaXRpbmcuaCIKLSNpbXBv
cnQgImh0bWx0YWdzLmgiCiAjaW1wb3J0ICJraHRtbF9wYXJ0LmgiCiAjaW1wb3J0ICJraHRtbHZp
ZXcuaCIKICNpbXBvcnQgImtqc19wcm94eS5oIgpAQCAtNjcsNyArNjYsNiBAQAogI2ltcG9ydCAi
S1dRQXNzZXJ0aW9ucy5oIgogI2ltcG9ydCAiS1dRQ2hhcnNldHMuaCIKICNpbXBvcnQgIktXUUNs
aXBib2FyZC5oIgotI2ltcG9ydCAiS1dRRE9NTm9kZS5oIgogI2ltcG9ydCAiS1dRRWRpdENvbW1h
bmQuaCIKICNpbXBvcnQgIktXUUZvbnQuaCIKICNpbXBvcnQgIktXUUZvdW5kYXRpb25FeHRyYXMu
aCIKQEAgLTEwMCw2ICs5OCw3IEBAIHVzaW5nIERPTTo6SFRNTEZvcm1FbGVtZW50SW1wbDsKIHVz
aW5nIERPTTo6SFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGw7CiB1c2luZyBET006OkhUTUxJbWFn
ZUVsZW1lbnRJbXBsOwogdXNpbmcgRE9NOjpIVE1MSW5wdXRFbGVtZW50SW1wbDsKK3VzaW5nIERP
TTo6SFRNTE5hbWVzOwogdXNpbmcgRE9NOjpOb2RlSW1wbDsKIHVzaW5nIERPTTo6UG9zaXRpb247
CiB1c2luZyBET006OlJhbmdlSW1wbDsKQEAgLTkxMyw3ICs5MTIsNyBAQCBzdGF0aWMgTlNWaWV3
ICp2aWV3Rm9yRWxlbWVudChFbGVtZW50SW1wCiBzdGF0aWMgSFRNTElucHV0RWxlbWVudEltcGwg
KmlucHV0RWxlbWVudEZyb21ET01FbGVtZW50KERPTUVsZW1lbnQgKmVsZW1lbnQpCiB7CiAgICAg
Tm9kZUltcGwgKm5vZGUgPSBbZWxlbWVudCBfbm9kZUltcGxdOwotICAgIGlmIChub2RlICYmIGlk
RnJvbU5vZGUobm9kZSkgPT0gSURfSU5QVVQpIHsKKyAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OmlucHV0KCkpKSB7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MSW5w
dXRFbGVtZW50SW1wbCAqPihub2RlKTsKICAgICB9CiAgICAgcmV0dXJuIG5pbDsKQEAgLTkyNiw3
ICs5MjUsNyBAQCBzdGF0aWMgSFRNTEZvcm1FbGVtZW50SW1wbCAqZm9ybUVsZW1lbnRGCiAgICAg
Ly8gbWFwcy5nb29nbGUuY29tIGNyYXNoZXMgb3RoZXJ3aXNlIGJlY2F1c2UgaXQgaXMgYW4geHNs
dCBmaWxlCiAgICAgLy8gdGhhdCBjb250YWlucyA8Zm9ybT4gZWxlbWVudHMgdGhhdCBhcmVuJ3Qg
aW4gYW55IG5hbWVzcGFjZSwgc28KICAgICAvLyB0aGV5IGNvbWUgb3V0IGFzIGdlbmVyaWMgQ01M
IGVsZW1lbnRzCi0gICAgaWYgKG5vZGUgJiYgbm9kZS0+aXNIVE1MRWxlbWVudCgpICYmIGlkRnJv
bU5vZGUobm9kZSkgPT0gSURfRk9STSkgeworICAgIGlmIChub2RlICYmIG5vZGUtPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjpmb3JtKCkpKSB7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1M
Rm9ybUVsZW1lbnRJbXBsICo+KG5vZGUpOwogICAgIH0KICAgICByZXR1cm4gbmlsOwpAQCAtMTA5
Niw3ICsxMDk1LDcgQEAgc3RhdGljIEhUTUxGb3JtRWxlbWVudEltcGwgKmZvcm1FbGVtZW50Rgog
ICAgIAogICAgICAgICAgICAgLy8gRklYTUU6IENvZGUgY29waWVkIGZyb20gUmVuZGVySW1hZ2U6
OnVwZGF0ZUZyb21FbGVtZW50OyBzaG91bGQgc2hhcmUuCiAgICAgICAgICAgICBET01TdHJpbmcg
YXR0cjsKLSAgICAgICAgICAgIGlmIChpZEZyb21Ob2RlKGkpID09IElEX09CSkVDVCkgeworICAg
ICAgICAgICAgaWYgKGktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvYmplY3QoKSkpIHsKICAgICAg
ICAgICAgICAgICBhdHRyID0gaS0+Z2V0QXR0cmlidXRlKEFUVFJfREFUQSk7CiAgICAgICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGF0dHIgPSBpLT5nZXRBdHRyaWJ1dGUoQVRUUl9T
UkMpOwpAQCAtMTEwOCw5ICsxMTA3LDkgQEAgc3RhdGljIEhUTUxGb3JtRWxlbWVudEltcGwgKmZv
cm1FbGVtZW50RgogICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBGSVhNRTogQ29kZSBjb3Bp
ZWQgZnJvbSBSZW5kZXJJbWFnZTo6dXBkYXRlRnJvbUVsZW1lbnQ7IHNob3VsZCBzaGFyZS4KICAg
ICAgICAgICAgIERPTVN0cmluZyBhbHQ7Ci0gICAgICAgICAgICBpZiAoaWRGcm9tTm9kZShpKSA9
PSBJRF9JTlBVVCkKKyAgICAgICAgICAgIGlmIChpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW5w
dXQoKSkpCiAgICAgICAgICAgICAgICAgYWx0ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVu
dEltcGwgKj4oaSktPmFsdFRleHQoKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGlkRnJvbU5vZGUo
aSkgPT0gSURfSU1HKQorICAgICAgICAgICAgZWxzZSBpZiAoaS0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OmltZygpKSkKICAgICAgICAgICAgICAgICBhbHQgPSBzdGF0aWNfY2FzdDxIVE1MSW1hZ2VF
bGVtZW50SW1wbCAqPihpKS0+YWx0VGV4dCgpOwogICAgICAgICAgICAgaWYgKCFhbHQuaXNOdWxs
KCkpIHsKICAgICAgICAgICAgICAgICBRU3RyaW5nIGFsdFRleHQgPSBhbHQuc3RyaW5nKCk7Cklu
ZGV4OiBsYXlvdXQtdGVzdHMvZmFzdC9kb20vY3NzLWRvbS1yZWFkLWV4cGVjdGVkLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9sYXlvdXQtdGVzdHMvZmFzdC9kb20v
Y3NzLWRvbS1yZWFkLWV4cGVjdGVkLnR4dCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYg
LXUgLXAgLXIxLjEgbGF5b3V0LXRlc3RzL2Zhc3QvZG9tL2Nzcy1kb20tcmVhZC1leHBlY3RlZC50
eHQKLS0tIGxheW91dC10ZXN0cy9mYXN0L2RvbS9jc3MtZG9tLXJlYWQtZXhwZWN0ZWQudHh0CTE5
IEp1biAyMDA1IDA2OjM4OjA5IC0wMDAwCTEuMQorKysgbGF5b3V0LXRlc3RzL2Zhc3QvZG9tL2Nz
cy1kb20tcmVhZC1leHBlY3RlZC50eHQJNyBKdWwgMjAwNSAwNTo1OTo0NyAtMDAwMApAQCAtOSw1
ICs5LDUgQEAgU2VyaWFsaXplZCBzdHlsZSwgdXNpbmcgQ1NTIERPTToKIC50d28geyBkaXNwbGF5
OiBpbmxpbmU7IH0KIC50aHJlZSB7IGRpc3BsYXk6IGxpc3QtaXRlbTsgbGlzdC1zdHlsZS10eXBl
OiBzcXVhcmU7IG1hcmdpbi1sZWZ0OiAzZW07IH0KIC5mb3VyIHsgZGlzcGxheTogbm9uZTsgY29s
b3I6IHJlZDsgfQotSSB7IGRpc3BsYXk6IGJsb2NrOyB9CitpIHsgZGlzcGxheTogYmxvY2s7IH0K
IApJbmRleDogbGF5b3V0LXRlc3RzL2Zhc3Qvb3ZlcmZsb3cvMDAzLWV4cGVjdGVkLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9sYXlvdXQtdGVzdHMvZmFzdC9vdmVy
Zmxvdy8wMDMtZXhwZWN0ZWQudHh0LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEwCmRpZmYgLXUg
LXAgLXIxLjEwIGxheW91dC10ZXN0cy9mYXN0L292ZXJmbG93LzAwMy1leHBlY3RlZC50eHQKLS0t
IGxheW91dC10ZXN0cy9mYXN0L292ZXJmbG93LzAwMy1leHBlY3RlZC50eHQJMTEgRmViIDIwMDUg
MjI6NTk6MDcgLTAwMDAJMS4xMAorKysgbGF5b3V0LXRlc3RzL2Zhc3Qvb3ZlcmZsb3cvMDAzLWV4
cGVjdGVkLnR4dAk3IEp1bCAyMDA1IDA1OjU5OjQ4IC0wMDAwCkBAIC00LDE0ICs0LDE0IEBAIGxh
eWVyIGF0ICgxMCwxMCkgc2l6ZSA3ODB4MzAyCiAgIFJlbmRlckJsb2NrIHtmYWtlfSBhdCAoMTAs
MTApIHNpemUgNzgweDMwMiBbYmdjb2xvcj0jRkZGRjAwXQogbGF5ZXIgYXQgKDEwLDEwKSBzaXpl
IDI4MngzMDIgY2xpcCBhdCAoMTEsMTEpIHNpemUgMjY1eDMwMCBzY3JvbGxIZWlnaHQgMTI5Mgog
ICBSZW5kZXJCbG9jayB7Y2hhbm5lbH0gYXQgKDAsMCkgc2l6ZSAyODJ4MzAyIFtiZ2NvbG9yPSNF
RUVFRUVdIFtib3JkZXI6ICgxcHggc29saWQgIzAwMDAwMCldCi0gICAgUmVuZGVyQmxvY2sge1RJ
VExFfSBhdCAoMTEsMTEpIHNpemUgMjU1eDE5CisgICAgUmVuZGVyQmxvY2sge3RpdGxlfSBhdCAo
MTEsMTEpIHNpemUgMjU1eDE5CiAgICAgICBSZW5kZXJUZXh0IHtURVhUfSBhdCAoMCwwKSBzaXpl
IDE1NHgxOQogICAgICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCAxNTQ6ICJzY290dGFuZHJl
dy5jb20iCiAgICAgUmVuZGVyQmxvY2sge2Rlc2NyaXB0aW9ufSBhdCAoMTEsNDApIHNpemUgMjU1
eDEyCiAgICAgICBSZW5kZXJUZXh0IHtURVhUfSBhdCAoMCwwKSBzaXplIDE5MXgxMgogICAgICAg
ICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCAxOTE6ICJESFRNTCwgRE9NIGFuZCBKYXZhU2NyaXB0
IE5ld3MiCiAgICAgUmVuZGVyQmxvY2sge2l0ZW19IGF0ICgxLDYyKSBzaXplIDI2NXg5NyBbYmdj
b2xvcj0jRkZGRkZGXSBbYm9yZGVyOiAoMXB4IHNvbGlkICNDQ0NDQ0MpIG5vbmUgKDFweCBzb2xp
ZCAjQ0NDQ0NDKSBub25lXQotICAgICAgUmVuZGVySW5saW5lIHtUSVRMRX0gYXQgKDAsMCkgc2l6
ZSAyMzN4MTUKKyAgICAgIFJlbmRlcklubGluZSB7dGl0bGV9IGF0ICgwLDApIHNpemUgMjMzeDE1
CiAgICAgICAgIFJlbmRlclRleHQge1RFWFR9IGF0ICgxMCwxMSkgc2l6ZSAyMzN4MTUKICAgICAg
ICAgICB0ZXh0IHJ1biBhdCAoMTAsMTEpIHdpZHRoIDIzMzogIkRIVE1MIEFuaW1hdGlvbiBBcnJh
eSBHZW5lcmF0b3IiCiAgICAgICBSZW5kZXJUZXh0IHtURVhUfSBhdCAoMCwwKSBzaXplIDB4MApA
QCAtMjQsNyArMjQsNyBAQCBsYXllciBhdCAoMTAsMTApIHNpemUgMjgyeDMwMiBjbGlwIGF0ICgx
CiAgICAgICBSZW5kZXJUZXh0IHtURVhUfSBhdCAoMCwwKSBzaXplIDB4MAogICAgICAgUmVuZGVy
VGV4dCB7VEVYVH0gYXQgKDAsMCkgc2l6ZSAweDAKICAgICBSZW5kZXJCbG9jayB7aXRlbX0gYXQg
KDEsMTY5KSBzaXplIDI2NXg4MiBbYmdjb2xvcj0jRkZGRkZGXSBbYm9yZGVyOiAoMXB4IHNvbGlk
ICNDQ0NDQ0MpIG5vbmUgKDFweCBzb2xpZCAjQ0NDQ0NDKSBub25lXQotICAgICAgUmVuZGVySW5s
aW5lIHtUSVRMRX0gYXQgKDAsMCkgc2l6ZSAxNzd4MTUKKyAgICAgIFJlbmRlcklubGluZSB7dGl0
bGV9IGF0ICgwLDApIHNpemUgMTc3eDE1CiAgICAgICAgIFJlbmRlclRleHQge1RFWFR9IGF0ICgx
MCwxMSkgc2l6ZSAxNzd4MTUKICAgICAgICAgICB0ZXh0IHJ1biBhdCAoMTAsMTEpIHdpZHRoIDE3
NzogIkRPTSBhbmQgRXh0ZW5kZWQgRW50cmllcyIKICAgICAgIFJlbmRlclRleHQge1RFWFR9IGF0
ICgxODcsMTEpIHNpemUgNHgxNQpAQCAtMzgsNyArMzgsNyBAQCBsYXllciBhdCAoMTAsMTApIHNp
emUgMjgyeDMwMiBjbGlwIGF0ICgxCiAgICAgICBSZW5kZXJUZXh0IHtURVhUfSBhdCAoMCwwKSBz
aXplIDB4MAogICAgICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQgKDAsMCkgc2l6ZSAweDAKICAgICBS
ZW5kZXJCbG9jayB7aXRlbX0gYXQgKDEsMjYxKSBzaXplIDI2NXg4MiBbYmdjb2xvcj0jRkZGRkZG
XSBbYm9yZGVyOiAoMXB4IHNvbGlkICNDQ0NDQ0MpIG5vbmUgKDFweCBzb2xpZCAjQ0NDQ0NDKSBu
b25lXQotICAgICAgUmVuZGVySW5saW5lIHtUSVRMRX0gYXQgKDAsMCkgc2l6ZSAxNjR4MTUKKyAg
ICAgIFJlbmRlcklubGluZSB7dGl0bGV9IGF0ICgwLDApIHNpemUgMTY0eDE1CiAgICAgICAgIFJl
bmRlclRleHQge1RFWFR9IGF0ICgxMCwxMSkgc2l6ZSAxNjR4MTUKICAgICAgICAgICB0ZXh0IHJ1
biBhdCAoMTAsMTEpIHdpZHRoIDE2NDogImNlbGxzcGFjaW5nIGFuZCB0aGUgRE9NIgogICAgICAg
UmVuZGVyVGV4dCB7VEVYVH0gYXQgKDE3NCwxMSkgc2l6ZSA0eDE1CkBAIC01Miw3ICs1Miw3IEBA
IGxheWVyIGF0ICgxMCwxMCkgc2l6ZSAyODJ4MzAyIGNsaXAgYXQgKDEKICAgICAgIFJlbmRlclRl
eHQge1RFWFR9IGF0ICgwLDApIHNpemUgMHgwCiAgICAgICBSZW5kZXJUZXh0IHtURVhUfSBhdCAo
MCwwKSBzaXplIDB4MAogICAgIFJlbmRlckJsb2NrIHtpdGVtfSBhdCAoMSwzNTMpIHNpemUgMjY1
eDk3IFtiZ2NvbG9yPSNGRkZGRkZdIFtib3JkZXI6ICgxcHggc29saWQgI0NDQ0NDQykgbm9uZSAo
MXB4IHNvbGlkICNDQ0NDQ0MpIG5vbmVdCi0gICAgICBSZW5kZXJJbmxpbmUge1RJVExFfSBhdCAo
MCwwKSBzaXplIDE3N3gxNQorICAgICAgUmVuZGVySW5saW5lIHt0aXRsZX0gYXQgKDAsMCkgc2l6
ZSAxNzd4MTUKICAgICAgICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQgKDEwLDExKSBzaXplIDE3N3gx
NQogICAgICAgICAgIHRleHQgcnVuIGF0ICgxMCwxMSkgd2lkdGggMTc3OiAiY29udGVudGVkaXRh
YmxlIGZvciBNb3ppbGxhIgogICAgICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQgKDE4NywxMSkgc2l6
ZSA0eDE1CkBAIC02Nyw3ICs2Nyw3IEBAIGxheWVyIGF0ICgxMCwxMCkgc2l6ZSAyODJ4MzAyIGNs
aXAgYXQgKDEKICAgICAgIFJlbmRlclRleHQge1RFWFR9IGF0ICgwLDApIHNpemUgMHgwCiAgICAg
ICBSZW5kZXJUZXh0IHtURVhUfSBhdCAoMCwwKSBzaXplIDB4MAogICAgIFJlbmRlckJsb2NrIHtp
dGVtfSBhdCAoMSw0NjApIHNpemUgMjY1eDgyIFtiZ2NvbG9yPSNGRkZGRkZdIFtib3JkZXI6ICgx
cHggc29saWQgI0NDQ0NDQykgbm9uZSAoMXB4IHNvbGlkICNDQ0NDQ0MpIG5vbmVdCi0gICAgICBS
ZW5kZXJJbmxpbmUge1RJVExFfSBhdCAoMCwwKSBzaXplIDE4MngzMAorICAgICAgUmVuZGVySW5s
aW5lIHt0aXRsZX0gYXQgKDAsMCkgc2l6ZSAxODJ4MzAKICAgICAgICAgUmVuZGVyVGV4dCB7VEVY
VH0gYXQgKDEwLDExKSBzaXplIDE4MngzMAogICAgICAgICAgIHRleHQgcnVuIGF0ICgxMCwxMSkg
d2lkdGggMTgyOiAiREhUTUwgVGltZWxpbmUvS2V5ZnJhbWUiCiAgICAgICAgICAgdGV4dCBydW4g
YXQgKDEwLDI2KSB3aWR0aCA2OTogIkFuaW1hdGlvbiIKQEAgLTgxLDcgKzgxLDcgQEAgbGF5ZXIg
YXQgKDEwLDEwKSBzaXplIDI4MngzMDIgY2xpcCBhdCAoMQogICAgICAgUmVuZGVyVGV4dCB7VEVY
VH0gYXQgKDAsMCkgc2l6ZSAweDAKICAgICAgIFJlbmRlclRleHQge1RFWFR9IGF0ICgwLDApIHNp
emUgMHgwCiAgICAgUmVuZGVyQmxvY2sge2l0ZW19IGF0ICgxLDU1Mikgc2l6ZSAyNjV4OTcgW2Jn
Y29sb3I9I0ZGRkZGRl0gW2JvcmRlcjogKDFweCBzb2xpZCAjQ0NDQ0NDKSBub25lICgxcHggc29s
aWQgI0NDQ0NDQykgbm9uZV0KLSAgICAgIFJlbmRlcklubGluZSB7VElUTEV9IGF0ICgwLDApIHNp
emUgMTU3eDMwCisgICAgICBSZW5kZXJJbmxpbmUge3RpdGxlfSBhdCAoMCwwKSBzaXplIDE1N3gz
MAogICAgICAgICBSZW5kZXJUZXh0IHtURVhUfSBhdCAoMTAsMTEpIHNpemUgMTU3eDMwCiAgICAg
ICAgICAgdGV4dCBydW4gYXQgKDEwLDExKSB3aWR0aCAxNTc6ICJEeW5BUEkgMi45IGFuZCBNb3pp
bGxhIgogICAgICAgICAgIHRleHQgcnVuIGF0ICgxMCwyNikgd2lkdGggMTI0OiAiY29tcGF0aWJp
bGl0eSBwb3J0cyIKQEAgLTk2LDcgKzk2LDcgQEAgbGF5ZXIgYXQgKDEwLDEwKSBzaXplIDI4Mngz
MDIgY2xpcCBhdCAoMQogICAgICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQgKDAsMCkgc2l6ZSAweDAK
ICAgICAgIFJlbmRlclRleHQge1RFWFR9IGF0ICgwLDApIHNpemUgMHgwCiAgICAgUmVuZGVyQmxv
Y2sge2l0ZW19IGF0ICgxLDY1OSkgc2l6ZSAyNjV4NjcgW2JnY29sb3I9I0ZGRkZGRl0gW2JvcmRl
cjogKDFweCBzb2xpZCAjQ0NDQ0NDKSBub25lICgxcHggc29saWQgI0NDQ0NDQykgbm9uZV0KLSAg
ICAgIFJlbmRlcklubGluZSB7VElUTEV9IGF0ICgwLDApIHNpemUgMTU0eDE1CisgICAgICBSZW5k
ZXJJbmxpbmUge3RpdGxlfSBhdCAoMCwwKSBzaXplIDE1NHgxNQogICAgICAgICBSZW5kZXJUZXh0
IHtURVhUfSBhdCAoMTAsMTEpIHNpemUgMTU0eDE1CiAgICAgICAgICAgdGV4dCBydW4gYXQgKDEw
LDExKSB3aWR0aCAxNTQ6ICIhbGluZURyYXcgYm9va21hcmtsZXQiCiAgICAgICBSZW5kZXJUZXh0
IHtURVhUfSBhdCAoMTY0LDExKSBzaXplIDR4MTUKQEAgLTEwOSw3ICsxMDksNyBAQCBsYXllciBh
dCAoMTAsMTApIHNpemUgMjgyeDMwMiBjbGlwIGF0ICgxCiAgICAgICBSZW5kZXJUZXh0IHtURVhU
fSBhdCAoMCwwKSBzaXplIDB4MAogICAgICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQgKDAsMCkgc2l6
ZSAweDAKICAgICBSZW5kZXJCbG9jayB7aXRlbX0gYXQgKDEsNzM2KSBzaXplIDI2NXg5NyBbYmdj
b2xvcj0jRkZGRkZGXSBbYm9yZGVyOiAoMXB4IHNvbGlkICNDQ0NDQ0MpIG5vbmUgKDFweCBzb2xp
ZCAjQ0NDQ0NDKSBub25lXQotICAgICAgUmVuZGVySW5saW5lIHtUSVRMRX0gYXQgKDAsMCkgc2l6
ZSAyMDF4MTUKKyAgICAgIFJlbmRlcklubGluZSB7dGl0bGV9IGF0ICgwLDApIHNpemUgMjAxeDE1
CiAgICAgICAgIFJlbmRlclRleHQge1RFWFR9IGF0ICgxMCwxMSkgc2l6ZSAyMDF4MTUKICAgICAg
ICAgICB0ZXh0IHJ1biBhdCAoMTAsMTEpIHdpZHRoIDIwMTogIk1vemlsbGEsIERIVE1MIGFuZCBE
T00gbGlua3MiCiAgICAgICBSZW5kZXJUZXh0IHtURVhUfSBhdCAoMjExLDExKSBzaXplIDR4MTUK
QEAgLTEyNCw3ICsxMjQsNyBAQCBsYXllciBhdCAoMTAsMTApIHNpemUgMjgyeDMwMiBjbGlwIGF0
ICgxCiAgICAgICBSZW5kZXJUZXh0IHtURVhUfSBhdCAoMCwwKSBzaXplIDB4MAogICAgICAgUmVu
ZGVyVGV4dCB7VEVYVH0gYXQgKDAsMCkgc2l6ZSAweDAKICAgICBSZW5kZXJCbG9jayB7aXRlbX0g
YXQgKDEsODQzKSBzaXplIDI2NXg2NyBbYmdjb2xvcj0jRkZGRkZGXSBbYm9yZGVyOiAoMXB4IHNv
bGlkICNDQ0NDQ0MpIG5vbmUgKDFweCBzb2xpZCAjQ0NDQ0NDKSBub25lXQotICAgICAgUmVuZGVy
SW5saW5lIHtUSVRMRX0gYXQgKDAsMCkgc2l6ZSAxMDN4MTUKKyAgICAgIFJlbmRlcklubGluZSB7
dGl0bGV9IGF0ICgwLDApIHNpemUgMTAzeDE1CiAgICAgICAgIFJlbmRlclRleHQge1RFWFR9IGF0
ICgxMCwxMSkgc2l6ZSAxMDN4MTUKICAgICAgICAgICB0ZXh0IHJ1biBhdCAoMTAsMTEpIHdpZHRo
IDEwMzogIk1vemlsbGEgMS4wIFJDMiIKICAgICAgIFJlbmRlclRleHQge1RFWFR9IGF0ICgxMTMs
MTEpIHNpemUgNHgxNQpAQCAtMTM3LDcgKzEzNyw3IEBAIGxheWVyIGF0ICgxMCwxMCkgc2l6ZSAy
ODJ4MzAyIGNsaXAgYXQgKDEKICAgICAgIFJlbmRlclRleHQge1RFWFR9IGF0ICgwLDApIHNpemUg
MHgwCiAgICAgICBSZW5kZXJUZXh0IHtURVhUfSBhdCAoMCwwKSBzaXplIDB4MAogICAgIFJlbmRl
ckJsb2NrIHtpdGVtfSBhdCAoMSw5MjApIHNpemUgMjY1eDk3IFtiZ2NvbG9yPSNGRkZGRkZdIFti
b3JkZXI6ICgxcHggc29saWQgI0NDQ0NDQykgbm9uZSAoMXB4IHNvbGlkICNDQ0NDQ0MpIG5vbmVd
Ci0gICAgICBSZW5kZXJJbmxpbmUge1RJVExFfSBhdCAoMCwwKSBzaXplIDIzNngzMAorICAgICAg
UmVuZGVySW5saW5lIHt0aXRsZX0gYXQgKDAsMCkgc2l6ZSAyMzZ4MzAKICAgICAgICAgUmVuZGVy
VGV4dCB7VEVYVH0gYXQgKDEwLDExKSBzaXplIDIzNngzMAogICAgICAgICAgIHRleHQgcnVuIGF0
ICgxMCwxMSkgd2lkdGggMjM2OiAiamF2YXNjcmlwdDogaXMgZGVwcmVjYXRlZC4gRG9uJ3QgdXNl
IgogICAgICAgICAgIHRleHQgcnVuIGF0ICgxMCwyNikgd2lkdGggMTM6ICJpdC4iCkBAIC0xNTIs
NyArMTUyLDcgQEAgbGF5ZXIgYXQgKDEwLDEwKSBzaXplIDI4MngzMDIgY2xpcCBhdCAoMQogICAg
ICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQgKDAsMCkgc2l6ZSAweDAKICAgICAgIFJlbmRlclRleHQg
e1RFWFR9IGF0ICgwLDApIHNpemUgMHgwCiAgICAgUmVuZGVyQmxvY2sge2l0ZW19IGF0ICgxLDEw
MjcpIHNpemUgMjY1eDY3IFtiZ2NvbG9yPSNGRkZGRkZdIFtib3JkZXI6ICgxcHggc29saWQgI0ND
Q0NDQykgbm9uZSAoMXB4IHNvbGlkICNDQ0NDQ0MpIG5vbmVdCi0gICAgICBSZW5kZXJJbmxpbmUg
e1RJVExFfSBhdCAoMCwwKSBzaXplIDE3NngxNQorICAgICAgUmVuZGVySW5saW5lIHt0aXRsZX0g
YXQgKDAsMCkgc2l6ZSAxNzZ4MTUKICAgICAgICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQgKDEwLDEx
KSBzaXplIDE3NngxNQogICAgICAgICAgIHRleHQgcnVuIGF0ICgxMCwxMSkgd2lkdGggMTc2OiAi
Q29uZGl0aW9uYWwgU2NyaXB0IExvYWRpbmciCiAgICAgICBSZW5kZXJUZXh0IHtURVhUfSBhdCAo
MCwwKSBzaXplIDB4MApAQCAtMTYzLDcgKzE2Myw3IEBAIGxheWVyIGF0ICgxMCwxMCkgc2l6ZSAy
ODJ4MzAyIGNsaXAgYXQgKDEKICAgICAgIFJlbmRlclRleHQge1RFWFR9IGF0ICgwLDApIHNpemUg
MHgwCiAgICAgICBSZW5kZXJUZXh0IHtURVhUfSBhdCAoMCwwKSBzaXplIDB4MAogICAgIFJlbmRl
ckJsb2NrIHtpdGVtfSBhdCAoMSwxMTA0KSBzaXplIDI2NXg4MiBbYmdjb2xvcj0jRkZGRkZGXSBb
Ym9yZGVyOiAoMXB4IHNvbGlkICNDQ0NDQ0MpIG5vbmUgKDFweCBzb2xpZCAjQ0NDQ0NDKSBub25l
XQotICAgICAgUmVuZGVySW5saW5lIHtUSVRMRX0gYXQgKDAsMCkgc2l6ZSAxMTV4MTUKKyAgICAg
IFJlbmRlcklubGluZSB7dGl0bGV9IGF0ICgwLDApIHNpemUgMTE1eDE1CiAgICAgICAgIFJlbmRl
clRleHQge1RFWFR9IGF0ICgxMCwxMSkgc2l6ZSAxMTV4MTUKICAgICAgICAgICB0ZXh0IHJ1biBh
dCAoMTAsMTEpIHdpZHRoIDExNTogIlN0b3JpZXMgYW5kIFRvb2xzIgogICAgICAgUmVuZGVyVGV4
dCB7VEVYVH0gYXQgKDEyNSwxMSkgc2l6ZSA0eDE1CkBAIC0xNzcsNyArMTc3LDcgQEAgbGF5ZXIg
YXQgKDEwLDEwKSBzaXplIDI4MngzMDIgY2xpcCBhdCAoMQogICAgICAgUmVuZGVyVGV4dCB7VEVY
VH0gYXQgKDAsMCkgc2l6ZSAweDAKICAgICAgIFJlbmRlclRleHQge1RFWFR9IGF0ICgwLDApIHNp
emUgMHgwCiAgICAgUmVuZGVyQmxvY2sge2l0ZW19IGF0ICgxLDExOTYpIHNpemUgMjY1eDk3IFti
Z2NvbG9yPSNGRkZGRkZdIFtib3JkZXI6ICgxcHggc29saWQgI0NDQ0NDQykgbm9uZSAoMXB4IHNv
bGlkICNDQ0NDQ0MpIG5vbmVdCi0gICAgICBSZW5kZXJJbmxpbmUge1RJVExFfSBhdCAoMCwwKSBz
aXplIDE2NngxNQorICAgICAgUmVuZGVySW5saW5lIHt0aXRsZX0gYXQgKDAsMCkgc2l6ZSAxNjZ4
MTUKICAgICAgICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQgKDEwLDExKSBzaXplIDE2NngxNQogICAg
ICAgICAgIHRleHQgcnVuIGF0ICgxMCwxMSkgd2lkdGggMTY2OiAiV2hvbGUgTG90dG8gR2Vja28g
TGlua3MiCiAgICAgICBSZW5kZXJUZXh0IHtURVhUfSBhdCAoMTc2LDExKSBzaXplIDR4MTUKSW5k
ZXg6IGxheW91dC10ZXN0cy9mYXN0L3Rva2VuaXplci8wMDItZXhwZWN0ZWQudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2xheW91dC10ZXN0cy9mYXN0L3Rva2VuaXpl
ci8wMDItZXhwZWN0ZWQudHh0LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtdSAtcCAt
cjEuMSBsYXlvdXQtdGVzdHMvZmFzdC90b2tlbml6ZXIvMDAyLWV4cGVjdGVkLnR4dAotLS0gbGF5
b3V0LXRlc3RzL2Zhc3QvdG9rZW5pemVyLzAwMi1leHBlY3RlZC50eHQJMjYgSnVsIDIwMDQgMjI6
NDU6NTEgLTAwMDAJMS4xCisrKyBsYXlvdXQtdGVzdHMvZmFzdC90b2tlbml6ZXIvMDAyLWV4cGVj
dGVkLnR4dAk3IEp1bCAyMDA1IDA1OjU5OjQ5IC0wMDAwCkBAIC0xLDcgKzEsNyBAQAogbGF5ZXIg
YXQgKDAsMCkgc2l6ZSA4MDB4NjAwCiAgIFJlbmRlckNhbnZhcyBhdCAoMCwwKSBzaXplIDgwMHg2
MDAKLWxheWVyIGF0ICgwLDApIHNpemUgODAweDM0Ci0gIFJlbmRlckJsb2NrIHtIVE1MfSBhdCAo
MCwwKSBzaXplIDgwMHgzNAotICAgIFJlbmRlckJvZHkge0JPRFl9IGF0ICg4LDgpIHNpemUgNzg0
eDE4CitsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAgUmVuZGVyQmxvY2sge0hUTUx9IGF0
ICgwLDApIHNpemUgODAweDYwMAorICAgIFJlbmRlckJvZHkge0JPRFl9IGF0ICg4LDgpIHNpemUg
Nzg0eDU4NAogICAgICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQgKDAsMCkgc2l6ZSAzMTV4MTgKICAg
ICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggMzE1OiAieW91IHNob3VsZG4ndCBzZWUgYSBy
YW5kb20gY2hpbmVzZSBjaGFyYWN0ZXIgaGVyZSIKSW5kZXg6IGxheW91dC10ZXN0cy9mYXN0L3Rv
a2VuaXplci9leHRlcm5hbC1zY3JpcHQtZG9jdW1lbnQtd3JpdGUtZXhwZWN0ZWQudHh0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2xheW91dC10ZXN0cy9mYXN0L3Rva2Vu
aXplci9leHRlcm5hbC1zY3JpcHQtZG9jdW1lbnQtd3JpdGUtZXhwZWN0ZWQudHh0LHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjEKZGlmZiAtdSAtcCAtcjEuMSBsYXlvdXQtdGVzdHMvZmFzdC90b2tl
bml6ZXIvZXh0ZXJuYWwtc2NyaXB0LWRvY3VtZW50LXdyaXRlLWV4cGVjdGVkLnR4dAotLS0gbGF5
b3V0LXRlc3RzL2Zhc3QvdG9rZW5pemVyL2V4dGVybmFsLXNjcmlwdC1kb2N1bWVudC13cml0ZS1l
eHBlY3RlZC50eHQJMTkgT2N0IDIwMDQgMTk6MDE6MTUgLTAwMDAJMS4xCisrKyBsYXlvdXQtdGVz
dHMvZmFzdC90b2tlbml6ZXIvZXh0ZXJuYWwtc2NyaXB0LWRvY3VtZW50LXdyaXRlLWV4cGVjdGVk
LnR4dAk3IEp1bCAyMDA1IDA1OjU5OjQ5IC0wMDAwCkBAIC00LDUgKzQsNSBAQCBsYXllciBhdCAo
MCwwKSBzaXplIDgwMHgzNAogICBSZW5kZXJCbG9jayB7SFRNTH0gYXQgKDAsMCkgc2l6ZSA4MDB4
MzQKICAgICBSZW5kZXJCb2R5IHtCT0RZfSBhdCAoOCw4KSBzaXplIDc4NHgxOAogICAgICAgUmVu
ZGVySW5saW5lIHtTUEFOfSBhdCAoMCwwKSBzaXplIDB4MAotICAgICAgUmVuZGVyVGV4dCB7VEVY
VH0gYXQgKDAsMCkgc2l6ZSAyMjZ4MTgKLSAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGgg
MjI2OiAiVGhpcyBzaG91bGQgYmUgYSBzcGFuOiBbb2JqZWN0IHNwYW5dIgorICAgICAgUmVuZGVy
VGV4dCB7VEVYVH0gYXQgKDAsMCkgc2l6ZSAyMzl4MTgKKyAgICAgICAgdGV4dCBydW4gYXQgKDAs
MCkgd2lkdGggMjM5OiAiVGhpcyBzaG91bGQgYmUgYSBzcGFuOiBbb2JqZWN0IFNQQU5dIgpJbmRl
eDogbGF5b3V0LXRlc3RzL2Zhc3QvdG9rZW5pemVyL3NjcmlwdF9leHRyYV9jbG9zZS1leHBlY3Rl
ZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUvbGF5b3V0LXRlc3Rz
L2Zhc3QvdG9rZW5pemVyL3NjcmlwdF9leHRyYV9jbG9zZS1leHBlY3RlZC50eHQsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuNQpkaWZmIC11IC1wIC1yMS41IGxheW91dC10ZXN0cy9mYXN0L3Rva2Vu
aXplci9zY3JpcHRfZXh0cmFfY2xvc2UtZXhwZWN0ZWQudHh0Ci0tLSBsYXlvdXQtdGVzdHMvZmFz
dC90b2tlbml6ZXIvc2NyaXB0X2V4dHJhX2Nsb3NlLWV4cGVjdGVkLnR4dAk2IEp1bCAyMDA1IDE4
OjQ5OjA2IC0wMDAwCTEuNQorKysgbGF5b3V0LXRlc3RzL2Zhc3QvdG9rZW5pemVyL3NjcmlwdF9l
eHRyYV9jbG9zZS1leHBlY3RlZC50eHQJNyBKdWwgMjAwNSAwNTo1OTo0OSAtMDAwMApAQCAtNiw3
ICs2LDYgQEAgbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCiAgICAgICBSZW5kZXJUZXh0IHtU
RVhUfSBhdCAoMCwwKSBzaXplIDU1eDE4CiAgICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRo
IDU1OiAiVEVTVC4uLiAiCiAgICAgICBSZW5kZXJUZXh0IHtURVhUfSBhdCAoMCwwKSBzaXplIDB4
MAotICAgICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQgKDAsMCkgc2l6ZSAweDAKICAgICAgIFJlbmRl
clRleHQge1RFWFR9IGF0ICg1NSwwKSBzaXplIDIzMngxOAogICAgICAgICB0ZXh0IHJ1biBhdCAo
NTUsMCkgd2lkdGggNjk6ICJQQVNTRUQuICIKICAgICAgICAgdGV4dCBydW4gYXQgKDEyNCwwKSB3
aWR0aCAxNjM6ICJUaGlzIHRleHQgc2hvdWxkIHNob3cgdXAuIgpJbmRleDogbGF5b3V0LXRlc3Rz
L2Zhc3QvdG9rZW5pemVyL3NjcmlwdF9xdWlyay1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogbGF5b3V0LXRlc3RzL2Zhc3QvdG9rZW5pemVyL3NjcmlwdF9xdWlyay1leHBlY3RlZC50
eHQKZGlmZiAtTiBsYXlvdXQtdGVzdHMvZmFzdC90b2tlbml6ZXIvc2NyaXB0X3F1aXJrLWV4cGVj
dGVkLnR4dAotLS0gbGF5b3V0LXRlc3RzL2Zhc3QvdG9rZW5pemVyL3NjcmlwdF9xdWlyay1leHBl
Y3RlZC50eHQJMTcgSnVuIDIwMDUgMjA6MDA6MTEgLTAwMDAJMS4xCisrKyAvZGV2L251bGwJMSBK
YW4gMTk3MCAwMDowMDowMCAtMDAwMApAQCAtMSw5ICswLDAgQEAKLWxheWVyIGF0ICgwLDApIHNp
emUgODAweDYwMAotICBSZW5kZXJDYW52YXMgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCi1sYXllciBh
dCAoMCwwKSBzaXplIDgwMHg2MDAKLSAgUmVuZGVyQmxvY2sge0hUTUx9IGF0ICgwLDApIHNpemUg
ODAweDYwMAotICAgIFJlbmRlckJvZHkge0JPRFl9IGF0ICg4LDgpIHNpemUgNzg0eDU4NAotICAg
ICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQgKDAsMCkgc2l6ZSAyNzV4MTgKLSAgICAgICAgdGV4dCBy
dW4gYXQgKDAsMCkgd2lkdGggMTEyOiAiVEVTVCBQQVNTRUQuICIKLSAgICAgICAgdGV4dCBydW4g
YXQgKDExMiwwKSB3aWR0aCAxNjM6ICJUaGlzIHRleHQgc2hvdWxkIHNob3cgdXAuIgotICAgICAg
UmVuZGVyVGV4dCB7VEVYVH0gYXQgKDAsMCkgc2l6ZSAweDAKSW5kZXg6IGxheW91dC10ZXN0cy9m
YXN0L3Rva2VuaXplci9zY3JpcHRfcXVpcmsuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiBsYXlv
dXQtdGVzdHMvZmFzdC90b2tlbml6ZXIvc2NyaXB0X3F1aXJrLmh0bWwKZGlmZiAtTiBsYXlvdXQt
dGVzdHMvZmFzdC90b2tlbml6ZXIvc2NyaXB0X3F1aXJrLmh0bWwKLS0tIGxheW91dC10ZXN0cy9m
YXN0L3Rva2VuaXplci9zY3JpcHRfcXVpcmsuaHRtbAkxNyBKdW4gMjAwNSAyMDowMDoxMSAtMDAw
MAkxLjEKKysrIC9kZXYvbnVsbAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCkBAIC0xLDYgKzAs
MCBAQAotPGh0bWw+Ci08Ym9keT4KLTxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvZW1wdHlfc2NyaXB0
LmpzIiAvPgotVEVTVCBQQVNTRUQuICBUaGlzIHRleHQgc2hvdWxkIHNob3cgdXAuCi08L2JvZHk+
Ci08L2h0bWwKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>2856</attachid>
            <date>2005-07-07 20:23:32 -0700</date>
            <delta_ts>2005-07-07 23:08:54 -0700</delta_ts>
            <desc>Convert getNode to use a hash.  Convert some QPtrDicts to HashSets.</desc>
            <filename>patch-22.txt</filename>
            <type>text/plain</type>
            <size>787940</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUucGJwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvV2ViQ29yZS9XZWJDb3JlLnBicHJvai9wcm9qZWN0LnBieHByb2osdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuNTYxCmRpZmYgLXUgLXAgLXIxLjU2MSBXZWJDb3JlLnBicHJvai9w
cm9qZWN0LnBieHByb2oKLS0tIFdlYkNvcmUucGJwcm9qL3Byb2plY3QucGJ4cHJvagk2IEp1bCAy
MDA1IDAxOjI4OjQxIC0wMDAwCTEuNTYxCisrKyBXZWJDb3JlLnBicHJvai9wcm9qZWN0LnBieHBy
b2oJOCBKdWwgMjAwNSAwMzowMzozMyAtMDAwMApAQCAtMjE0LDMyICsyMTQsNiBAQAogLy8yRDIK
IC8vMkQzCiAvLzJENAotLy8zNTAKLS8vMzUxCi0vLzM1MgotLy8zNTMKLS8vMzU0Ci0JCTM1NEYy
NDg5MDJFRTI4NTkwQUNBMkFDQSA9IHsKLQkJCWZpbGVFbmNvZGluZyA9IDMwOwotCQkJaXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsKLQkJCWxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
Ci0JCQlwYXRoID0gS1dRRE9NTm9kZS5oOwotCQkJcmVmVHlwZSA9IDQ7Ci0JCQlzb3VyY2VUcmVl
ID0gIjxncm91cD4iOwotCQl9OwotCQkzNTRGMjQ4QTAyRUUyODU5MEFDQTJBQ0EgPSB7Ci0JCQlm
aWxlRW5jb2RpbmcgPSAzMDsKLQkJCWlzYSA9IFBCWEZpbGVSZWZlcmVuY2U7Ci0JCQlsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsKLQkJCXBhdGggPSBLV1FET01Ob2RlLmNw
cDsKLQkJCXJlZlR5cGUgPSA0OwotCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsKLS8v
MzUwCi0vLzM1MQotLy8zNTIKLS8vMzUzCi0vLzM1NAogLy81MTAKIC8vNTExCiAvLzUxMgpAQCAt
MjQ4NSw3ICsyNDU5LDYgQEAKIAkJCQk5M0YxOThEQzA4MjQ1RTU5MDAxRTlBQkMsCiAJCQkJOTNG
MTk4REUwODI0NUU1OTAwMUU5QUJDLAogCQkJCTkzRjE5OEUwMDgyNDVFNTkwMDFFOUFCQywKLQkJ
CQk5M0YxOThFMjA4MjQ1RTU5MDAxRTlBQkMsCiAJCQkJOTNGMTk4RTMwODI0NUU1OTAwMUU5QUJD
LAogCQkJCTkzRjE5OEU0MDgyNDVFNTkwMDFFOUFCQywKIAkJCQk5M0YxOThFNTA4MjQ1RTU5MDAx
RTlBQkMsCkBAIC0yNTYyLDcgKzI1MzUsNiBAQAogCQkJCTkzRjE5OTJFMDgyNDVFNTkwMDFFOUFC
QywKIAkJCQk5M0YxOTkyRjA4MjQ1RTU5MDAxRTlBQkMsCiAJCQkJOTNGMTk5MzAwODI0NUU1OTAw
MUU5QUJDLAotCQkJCTkzRjE5OTMxMDgyNDVFNTkwMDFFOUFCQywKIAkJCQk5M0YxOTkzMjA4MjQ1
RTU5MDAxRTlBQkMsCiAJCQkJOTNGMTk5MzMwODI0NUU1OTAwMUU5QUJDLAogCQkJCTkzRjE5OTM0
MDgyNDVFNTkwMDFFOUFCQywKQEAgLTI3MTcsNyArMjY4OSw2IEBACiAJCQkJOTNGMTk5QzkwODI0
NUU1OTAwMUU5QUJDLAogCQkJCTkzRjE5OUNBMDgyNDVFNTkwMDFFOUFCQywKIAkJCQk5M0YxOTlD
QjA4MjQ1RTU5MDAxRTlBQkMsCi0JCQkJOTNGMTk5Q0MwODI0NUU1OTAwMUU5QUJDLAogCQkJCTkz
RjE5OUNFMDgyNDVFNTkwMDFFOUFCQywKIAkJCQk5M0YxOTlDRjA4MjQ1RTU5MDAxRTlBQkMsCiAJ
CQkJOTNGMTk5RDAwODI0NUU1OTAwMUU5QUJDLApAQCAtMjc5OSw2ICsyNzcwLDcgQEAKIAkJCQk2
NURFODUyOTA4NzY1RkMzMDAxMTQyOEEsCiAJCQkJNjVERTg1MkEwODc2NUZDMzAwMTE0MjhBLAog
CQkJCUE4NUQ3QzE5MDg3QTZFRDkwMDZBOTE3MiwKKwkJCQlCQ0VGMzQzNTA4N0I1NjNFMDBCQkY4
MzMsCiAJCQkpOwogCQkJaXNhID0gUEJYSGVhZGVyc0J1aWxkUGhhc2U7CiAJCQlydW5Pbmx5Rm9y
RGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKQEAgLTMwNDMsMTIgKzMwMTUsNiBAQAogCQkJ
c2V0dGluZ3MgPSB7CiAJCQl9OwogCQl9OwotCQk5M0YxOThFMjA4MjQ1RTU5MDAxRTlBQkMgPSB7
Ci0JCQlmaWxlUmVmID0gRjUyM0QyMzYwMkRFNDM5NjAxODYzNUNBOwotCQkJaXNhID0gUEJYQnVp
bGRGaWxlOwotCQkJc2V0dGluZ3MgPSB7Ci0JCQl9OwotCQl9OwogCQk5M0YxOThFMzA4MjQ1RTU5
MDAxRTlBQkMgPSB7CiAJCQlmaWxlUmVmID0gRjUyM0QyMzgwMkRFNDM5NjAxODYzNUNBOwogCQkJ
aXNhID0gUEJYQnVpbGRGaWxlOwpAQCAtMzUwNSwxMiArMzQ3MSw2IEBACiAJCQlzZXR0aW5ncyA9
IHsKIAkJCX07CiAJCX07Ci0JCTkzRjE5OTMxMDgyNDVFNTkwMDFFOUFCQyA9IHsKLQkJCWZpbGVS
ZWYgPSAzNTRGMjQ4OTAyRUUyODU5MEFDQTJBQ0E7Ci0JCQlpc2EgPSBQQlhCdWlsZEZpbGU7Ci0J
CQlzZXR0aW5ncyA9IHsKLQkJCX07Ci0JCX07CiAJCTkzRjE5OTMyMDgyNDVFNTkwMDFFOUFCQyA9
IHsKIAkJCWZpbGVSZWYgPSBGNTg3ODY4NTAyREUzQjg2MDFFQTQxMjI7CiAJCQlpc2EgPSBQQlhC
dWlsZEZpbGU7CkBAIC00NDczLDEyICs0NDMzLDYgQEAKIAkJCXNldHRpbmdzID0gewogCQkJfTsK
IAkJfTsKLQkJOTNGMTk5Q0MwODI0NUU1OTAwMUU5QUJDID0gewotCQkJZmlsZVJlZiA9IEJDN0ZE
RTMyMDVDMUQ5QUIwMDcwQTkwMjsKLQkJCWlzYSA9IFBCWEJ1aWxkRmlsZTsKLQkJCXNldHRpbmdz
ID0gewotCQkJfTsKLQkJfTsKIAkJOTNGMTk5Q0UwODI0NUU1OTAwMUU5QUJDID0gewogCQkJZmls
ZVJlZiA9IEJDM0IzNjQ2MDVDOUQ1RTIwMEU0MjkwMjsKIAkJCWlzYSA9IFBCWEJ1aWxkRmlsZTsK
QEAgLTUwMTMsNyArNDk2Nyw2IEBACiAJCQkJOTNGMTlBOEIwODI0NUU1OTAwMUU5QUJDLAogCQkJ
CTkzRjE5QThDMDgyNDVFNTkwMDFFOUFCQywKIAkJCQk5M0YxOUE4RDA4MjQ1RTU5MDAxRTlBQkMs
Ci0JCQkJOTNGMTlBOEUwODI0NUU1OTAwMUU5QUJDLAogCQkJCTkzRjE5QThGMDgyNDVFNTkwMDFF
OUFCQywKIAkJCQk5M0YxOUE5MDA4MjQ1RTU5MDAxRTlBQkMsCiAJCQkJOTNGMTlBOTEwODI0NUU1
OTAwMUU5QUJDLApAQCAtNTA2Niw3ICs1MDE5LDYgQEAKIAkJCQk5M0YxOUFDMDA4MjQ1RTU5MDAx
RTlBQkMsCiAJCQkJOTNGMTlBQzEwODI0NUU1OTAwMUU5QUJDLAogCQkJCTkzRjE5QUMyMDgyNDVF
NTkwMDFFOUFCQywKLQkJCQk5M0YxOUFDMzA4MjQ1RTU5MDAxRTlBQkMsCiAJCQkJOTNGMTlBQzQw
ODI0NUU1OTAwMUU5QUJDLAogCQkJCTkzRjE5QUM1MDgyNDVFNTkwMDFFOUFCQywKIAkJCQk5M0Yx
OUFDNjA4MjQ1RTU5MDAxRTlBQkMsCkBAIC01MTA4LDcgKzUwNjAsNiBAQAogCQkJCTkzRjE5QUVD
MDgyNDVFNTkwMDFFOUFCQywKIAkJCQk5M0YxOUFFRDA4MjQ1RTU5MDAxRTlBQkMsCiAJCQkJOTNG
MTlBRUUwODI0NUU1OTAwMUU5QUJDLAotCQkJCTkzRjE5QUVGMDgyNDVFNTkwMDFFOUFCQywKIAkJ
CQk5M0YxOUFGMDA4MjQ1RTU5MDAxRTlBQkMsCiAJCQkJOTNGMTlBRjEwODI0NUU1OTAwMUU5QUJD
LAogCQkJCTkzRjE5QUYyMDgyNDVFNTkwMDFFOUFCQywKQEAgLTUxNzQsNiArNTEyNSw3IEBACiAJ
CQkJNTUwQTBCQ0QwODVGNjA0RDAwNzM1M0Q2LAogCQkJCTY1RjM3ODJBMDg3MEQ5NTgwMDBCMkY5
NCwKIAkJCQlBODVEN0MxODA4N0E2RUQ5MDA2QTkxNzIsCisJCQkJQkNFRjM0MzQwODdCNTYzRTAw
QkJGODMzLAogCQkJKTsKIAkJCWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNlOwogCQkJcnVuT25s
eUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CkBAIC01ODE0LDEyICs1NzY2LDYgQEAK
IAkJCXNldHRpbmdzID0gewogCQkJfTsKIAkJfTsKLQkJOTNGMTlBOEUwODI0NUU1OTAwMUU5QUJD
ID0gewotCQkJZmlsZVJlZiA9IEY1MjNEMjM1MDJERTQzOTYwMTg2MzVDQTsKLQkJCWlzYSA9IFBC
WEJ1aWxkRmlsZTsKLQkJCXNldHRpbmdzID0gewotCQkJfTsKLQkJfTsKIAkJOTNGMTlBOEYwODI0
NUU1OTAwMUU5QUJDID0gewogCQkJZmlsZVJlZiA9IEY1MjNEMjM3MDJERTQzOTYwMTg2MzVDQTsK
IAkJCWlzYSA9IFBCWEJ1aWxkRmlsZTsKQEAgLTYxMzIsMTIgKzYwNzgsNiBAQAogCQkJc2V0dGlu
Z3MgPSB7CiAJCQl9OwogCQl9OwotCQk5M0YxOUFDMzA4MjQ1RTU5MDAxRTlBQkMgPSB7Ci0JCQlm
aWxlUmVmID0gMzU0RjI0OEEwMkVFMjg1OTBBQ0EyQUNBOwotCQkJaXNhID0gUEJYQnVpbGRGaWxl
OwotCQkJc2V0dGluZ3MgPSB7Ci0JCQl9OwotCQl9OwogCQk5M0YxOUFDNDA4MjQ1RTU5MDAxRTlB
QkMgPSB7CiAJCQlmaWxlUmVmID0gRjUxMTdCQ0EwMkY5RkZFRjAxODYzNUNFOwogCQkJaXNhID0g
UEJYQnVpbGRGaWxlOwpAQCAtNjM4NCwxMiArNjMyNCw2IEBACiAJCQlzZXR0aW5ncyA9IHsKIAkJ
CX07CiAJCX07Ci0JCTkzRjE5QUVGMDgyNDVFNTkwMDFFOUFCQyA9IHsKLQkJCWZpbGVSZWYgPSBC
QzdGREUzMTA1QzFEOUFCMDA3MEE5MDI7Ci0JCQlpc2EgPSBQQlhCdWlsZEZpbGU7Ci0JCQlzZXR0
aW5ncyA9IHsKLQkJCX07Ci0JCX07CiAJCTkzRjE5QUYwMDgyNDVFNTkwMDFFOUFCQyA9IHsKIAkJ
CWZpbGVSZWYgPSBCQzNCMzY0NTA1QzlENUUyMDBFNDI5MDI7CiAJCQlpc2EgPSBQQlhCdWlsZEZp
bGU7CkBAIC02OTcxLDIyICs2OTA1LDYgQEAKIAkJCXJlZlR5cGUgPSA0OwogCQkJc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsKIAkJfTsKLQkJQkM3RkRFMzEwNUMxRDlBQjAwNzBBOTAyID0gewotCQkJ
ZmlsZUVuY29kaW5nID0gMzA7Ci0JCQlpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOwotCQkJbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7Ci0JCQlwYXRoID0geG1sX25hbWVzcGFj
ZV90YWJsZS5jcHA7Ci0JCQlyZWZUeXBlID0gNDsKLQkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
Ci0JCX07Ci0JCUJDN0ZERTMyMDVDMUQ5QUIwMDcwQTkwMiA9IHsKLQkJCWZpbGVFbmNvZGluZyA9
IDMwOwotCQkJaXNhID0gUEJYRmlsZVJlZmVyZW5jZTsKLQkJCWxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7Ci0JCQlwYXRoID0geG1sX25hbWVzcGFjZV90YWJsZS5oOwotCQkJcmVm
VHlwZSA9IDQ7Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwotCQl9OwogCQlCQzgwQTY5MzA0
NjhCNzgxMDBEQkNDOUMgPSB7CiAJCQlmaWxlRW5jb2RpbmcgPSAzMDsKIAkJCWlzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7CkBAIC03MTMyLDYgKzcwNTAsMzQgQEAKIAkJCXJlZlR5cGUgPSA0OwogCQkJ
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJQkNFRjM0MzIwODdCNTYzRTAwQkJGODMz
ID0geworCQkJZmlsZUVuY29kaW5nID0gMzA7CisJCQlpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOwor
CQkJbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7CisJCQlwYXRoID0gaHRt
bGZhY3RvcnkuY3BwOworCQkJcmVmVHlwZSA9IDQ7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4i
OworCQl9OworCQlCQ0VGMzQzMzA4N0I1NjNFMDBCQkY4MzMgPSB7CisJCQlmaWxlRW5jb2Rpbmcg
PSAzMDsKKwkJCWlzYSA9IFBCWEZpbGVSZWZlcmVuY2U7CisJCQlsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOworCQkJcGF0aCA9IGh0bWxmYWN0b3J5Lmg7CisJCQlyZWZUeXBlID0g
NDsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCUJDRUYzNDM0MDg3QjU2M0Uw
MEJCRjgzMyA9IHsKKwkJCWZpbGVSZWYgPSBCQ0VGMzQzMjA4N0I1NjNFMDBCQkY4MzM7CisJCQlp
c2EgPSBQQlhCdWlsZEZpbGU7CisJCQlzZXR0aW5ncyA9IHsKKwkJCX07CisJCX07CisJCUJDRUYz
NDM1MDg3QjU2M0UwMEJCRjgzMyA9IHsKKwkJCWZpbGVSZWYgPSBCQ0VGMzQzMzA4N0I1NjNFMDBC
QkY4MzM7CisJCQlpc2EgPSBQQlhCdWlsZEZpbGU7CisJCQlzZXR0aW5ncyA9IHsKKwkJCX07CisJ
CX07CiAJCUJDRjAxOTI0MDNEMzgwMjIwMEIyRDA0RCA9IHsKIAkJCWZpbGVFbmNvZGluZyA9IDMw
OwogCQkJaXNhID0gUEJYRmlsZVJlZmVyZW5jZTsKQEAgLTc1NDcsOCArNzQ5Myw2IEBACiAJCQkJ
MkQ5MDY2MEMwNjY1RDkzNzAwNkI2RjFBLAogCQkJCUY1ODc4NENEMDJERTM3NTkwMUVBNDEyMiwK
IAkJCQlGNTg3ODREQTAyREUzNzU5MDFFQTQxMjIsCi0JCQkJMzU0RjI0ODkwMkVFMjg1OTBBQ0Ey
QUNBLAotCQkJCTM1NEYyNDhBMDJFRTI4NTkwQUNBMkFDQSwKIAkJCQk5MzFDOEExNjAzODAyODhC
MDA4NjM1Q0UsCiAJCQkJOTMxQzhBMTcwMzgwMjg4QjAwODYzNUNFLAogCQkJCUJFRjdFRUEwMDVG
RjhGMEQwMDk3MTdFRSwKQEAgLTg1MTcsMjIgKzg0NjEsNiBAQAogCQkJcmVmVHlwZSA9IDQ7CiAJ
CQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OwotCQlGNTIzRDIzNTAyREU0Mzk2MDE4NjM1
Q0EgPSB7Ci0JCQlmaWxlRW5jb2RpbmcgPSAzMDsKLQkJCWlzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
Ci0JCQlsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsKLQkJCXBhdGggPSBk
dGQuY3BwOwotCQkJcmVmVHlwZSA9IDQ7Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwotCQl9
OwotCQlGNTIzRDIzNjAyREU0Mzk2MDE4NjM1Q0EgPSB7Ci0JCQlmaWxlRW5jb2RpbmcgPSAzMDsK
LQkJCWlzYSA9IFBCWEZpbGVSZWZlcmVuY2U7Ci0JCQlsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOwotCQkJcGF0aCA9IGR0ZC5oOwotCQkJcmVmVHlwZSA9IDQ7Ci0JCQlzb3VyY2VU
cmVlID0gIjxncm91cD4iOwotCQl9OwogCQlGNTIzRDIzNzAyREU0Mzk2MDE4NjM1Q0EgPSB7CiAJ
CQlmaWxlRW5jb2RpbmcgPSAzMDsKIAkJCWlzYSA9IFBCWEZpbGVSZWZlcmVuY2U7CkBAIC04NzU5
LDEwICs4Njg3LDEwIEBACiAJCX07CiAJCUY1MjNEMjc3MDJERTQzOTgwMTg2MzVDQSA9IHsKIAkJ
CWNoaWxkcmVuID0gKAorCQkJCUJDRUYzNDMyMDg3QjU2M0UwMEJCRjgzMywKKwkJCQlCQ0VGMzQz
MzA4N0I1NjNFMDBCQkY4MzMsCiAJCQkJNTUwQTBCQ0IwODVGNjA0RDAwNzM1M0Q2LAogCQkJCTU1
MEEwQkNDMDg1RjYwNEQwMDczNTNENiwKLQkJCQlGNTIzRDIzNTAyREU0Mzk2MDE4NjM1Q0EsCi0J
CQkJRjUyM0QyMzYwMkRFNDM5NjAxODYzNUNBLAogCQkJCUY1MjNEMjM3MDJERTQzOTYwMTg2MzVD
QSwKIAkJCQlGNTIzRDIzODAyREU0Mzk2MDE4NjM1Q0EsCiAJCQkJRjUyM0QyMzkwMkRFNDM5NjAx
ODYzNUNBLApAQCAtOTQ3NCw4ICs5NDAyLDYgQEAKIAkJCQlGNTIzRDMwNjAyREU0NDc2MDE4NjM1
Q0EsCiAJCQkJRjUyM0QzMDcwMkRFNDQ3NjAxODYzNUNBLAogCQkJCUY1MjNEMzA4MDJERTQ0NzYw
MTg2MzVDQSwKLQkJCQlCQzdGREUzMTA1QzFEOUFCMDA3MEE5MDIsCi0JCQkJQkM3RkRFMzIwNUMx
RDlBQjAwNzBBOTAyLAogCQkJCUY1MjNEMzA5MDJERTQ0NzYwMTg2MzVDQSwKIAkJCQlGNTIzRDMw
QTAyREU0NDc2MDE4NjM1Q0EsCiAJCQkpOwpJbmRleDoga2h0bWwva2h0bWxfcGFydC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwva2h0bWxfcGFydC5jcHAs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzI1CmRpZmYgLXUgLXAgLXIxLjMyNSBraHRtbC9raHRt
bF9wYXJ0LmNwcAotLS0ga2h0bWwva2h0bWxfcGFydC5jcHAJMjggSnVuIDIwMDUgMjM6MjI6MTYg
LTAwMDAJMS4zMjUKKysrIGtodG1sL2todG1sX3BhcnQuY3BwCTggSnVsIDIwMDUgMDM6MDM6MzYg
LTAwMDAKQEAgLTIwOCw2ICsyMDgsNyBAQCBLSFRNTFBhcnQ6OktIVE1MUGFydCggS0hUTUxWaWV3
ICp2aWV3LCBRCiB2b2lkIEtIVE1MUGFydDo6aW5pdCggS0hUTUxWaWV3ICp2aWV3LCBHVUlQcm9m
aWxlIHByb2YgKQogewogICBBdG9taWNTdHJpbmc6OmluaXQoKTsKKyAgSFRNTE5hbWVzOjppbml0
KCk7IC8vIEZJWE1FOiBXZSBzaG91bGQgbWFrZSB0aGlzIGhhcHBlbiBvbmx5IHdoZW4gSFRNTCBp
cyB1c2VkLgogICBpZiAoIHByb2YgPT0gRGVmYXVsdEdVSSApCiAgICAgc2V0WE1MRmlsZSggImto
dG1sLnJjIiApOwogICBlbHNlIGlmICggcHJvZiA9PSBCcm93c2VyVmlld0dVSSApCkBAIC01NzI0
LDcgKzU3MjUsNyBAQCBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb25JbXBsICpLSFRNTFBhCiAg
ICAgaW50IGV4Y2VwdGlvbkNvZGUgPSAwOwogCiAgICAgaWYgKGQtPm1fdHlwaW5nU3R5bGUpIHsK
LSAgICAgICAgc3R5bGVFbGVtZW50ID0geG1sRG9jSW1wbCgpLT5jcmVhdGVIVE1MRWxlbWVudCgi
c3BhbiIsIGV4Y2VwdGlvbkNvZGUpOworICAgICAgICBzdHlsZUVsZW1lbnQgPSB4bWxEb2NJbXBs
KCktPmNyZWF0ZUVsZW1lbnROUyhYSFRNTF9OQU1FU1BBQ0UsICJzcGFuIiwgZXhjZXB0aW9uQ29k
ZSk7CiAgICAgICAgIGFzc2VydChleGNlcHRpb25Db2RlID09IDApOwogCiAgICAgICAgIHN0eWxl
RWxlbWVudC0+cmVmKCk7CkluZGV4OiBraHRtbC9raHRtbHZpZXcuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2todG1sdmlldy5jcHAsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuMTMzCmRpZmYgLXUgLXAgLXIxLjEzMyBraHRtbC9raHRtbHZpZXcuY3BwCi0t
LSBraHRtbC9raHRtbHZpZXcuY3BwCTExIE1heSAyMDA1IDAwOjU4OjI3IC0wMDAwCTEuMTMzCisr
KyBraHRtbC9raHRtbHZpZXcuY3BwCTggSnVsIDIwMDUgMDM6MDM6MzggLTAwMDAKQEAgLTYwNywx
MiArNjA3LDEyIEBAIHZvaWQgS0hUTUxWaWV3OjpsYXlvdXQoKQogICAgIGlmIChkb2N1bWVudC0+
aXNIVE1MRG9jdW1lbnQoKSkgewogICAgICAgICBOb2RlSW1wbCAqYm9keSA9IHN0YXRpY19jYXN0
PEhUTUxEb2N1bWVudEltcGwqPihkb2N1bWVudCktPmJvZHkoKTsKICAgICAgICAgaWYgKGJvZHkg
JiYgYm9keS0+cmVuZGVyZXIoKSkgewotICAgICAgICAgICAgaWYgKGJvZHktPmlkKCkgPT0gSURf
RlJBTUVTRVQpIHsKKyAgICAgICAgICAgIGlmIChib2R5LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
ZnJhbWVzZXQoKSkpIHsKICAgICAgICAgICAgICAgICBib2R5LT5yZW5kZXJlcigpLT5zZXROZWVk
c0xheW91dCh0cnVlKTsKICAgICAgICAgICAgICAgICB2TW9kZSA9IEFsd2F5c09mZjsKICAgICAg
ICAgICAgICAgICBoTW9kZSA9IEFsd2F5c09mZjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGVsc2UgaWYgKGJvZHktPmlkKCkgPT0gSURfQk9EWSkgeworICAgICAgICAgICAgZWxzZSBpZiAo
Ym9keS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJvZHkoKSkpIHsKICAgICAgICAgICAgICAgICBS
ZW5kZXJPYmplY3QqIG8gPSAocm9vdFJlbmRlcmVyLT5zdHlsZSgpLT5vdmVyZmxvdygpID09IE9W
SVNJQkxFKSA/IGJvZHktPnJlbmRlcmVyKCkgOiByb290UmVuZGVyZXI7CiAgICAgICAgICAgICAg
ICAgYXBwbHlPdmVyZmxvd1RvVmlld3BvcnQobywgaE1vZGUsIHZNb2RlKTsgLy8gT25seSBhcHBs
aWVzIHRvIEhUTUwgVUFzLCBub3QgdG8gWE1ML1hIVE1MIFVBcwogICAgICAgICAgICAgfQpAQCAt
ODc3LDEwICs4NzcsNyBAQCB2b2lkIEtIVE1MVmlldzo6dmlld3BvcnRNb3VzZURvdWJsZUNsaWNr
CiAKIHN0YXRpYyBib29sIGlzU3VibWl0SW1hZ2UoRE9NOjpOb2RlSW1wbCAqbm9kZSkKIHsKLSAg
ICByZXR1cm4gbm9kZQotICAgICAgICAmJiBub2RlLT5pc0hUTUxFbGVtZW50KCkKLSAgICAgICAg
JiYgbm9kZS0+aWQoKSA9PSBJRF9JTlBVVAotICAgICAgICAmJiBzdGF0aWNfY2FzdDxIVE1MSW5w
dXRFbGVtZW50SW1wbCo+KG5vZGUpLT5pbnB1dFR5cGUoKSA9PSBIVE1MSW5wdXRFbGVtZW50SW1w
bDo6SU1BR0U7CisgICAgcmV0dXJuIG5vZGUgJiYgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
OmlucHV0KCkpICYmIHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnRJbXBsKj4obm9kZSktPmlu
cHV0VHlwZSgpID09IEhUTUxJbnB1dEVsZW1lbnRJbXBsOjpJTUFHRTsKIH0KIAogdm9pZCBLSFRN
TFZpZXc6OnZpZXdwb3J0TW91c2VNb3ZlRXZlbnQoIFFNb3VzZUV2ZW50ICogX21vdXNlICkKSW5k
ZXg6IGtodG1sL2Nzcy9jc3NfYmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L1dlYkNvcmUva2h0bWwvY3NzL2Nzc19iYXNlLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4x
NQpkaWZmIC11IC1wIC1yMS4xNSBraHRtbC9jc3MvY3NzX2Jhc2UuY3BwCi0tLSBraHRtbC9jc3Mv
Y3NzX2Jhc2UuY3BwCTEyIEp1biAyMDA1IDA0OjA3OjMwIC0wMDAwCTEuMTUKKysrIGtodG1sL2Nz
cy9jc3NfYmFzZS5jcHAJOCBKdWwgMjAwNSAwMzowMzozOCAtMDAwMApAQCAtOTMsOSArOTMsMTUg
QEAgU3R5bGVMaXN0SW1wbDo6flN0eWxlTGlzdEltcGwoKQogCiAvLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQogCitjb25zdCBRdWFsaWZpZWROYW1lJiBDU1NTZWxlY3Rvcjo6YW55VGFnTmFtZSgp
Cit7CisgICAgc3RhdGljIFF1YWxpZmllZE5hbWUgYW55TmFtZShudWxsQXRvbSwgc3RhckF0b20s
IHN0YXJBdG9tKTsKKyAgICByZXR1cm4gYW55TmFtZTsKK30KKwogdm9pZCBDU1NTZWxlY3Rvcjo6
cHJpbnQodm9pZCkKIHsKLSAgICBrZERlYnVnKCA2MDgwICkgPDwgIltTZWxlY3RvcjogdGFnID0g
IiA8PCAgICAgICB0YWcgPDwgIiwgYXR0ciA9IFwiIiA8PCBhdHRyIDw8ICJcIiwgbWF0Y2ggPSBc
IiIgPDwgbWF0Y2gKKyAgICBrZERlYnVnKCA2MDgwICkgPDwgIltTZWxlY3RvcjogdGFnID0gIiA8
PCAgICAgICB0YWcubG9jYWxOYW1lKCkuc3RyaW5nKCkgPDwgIiwgYXR0ciA9IFwiIiA8PCBhdHRy
IDw8ICJcIiwgbWF0Y2ggPSBcIiIgPDwgbWF0Y2gKIAkJICAgIDw8ICJcIiB2YWx1ZSA9IFwiIiA8
PCB2YWx1ZS5zdHJpbmcoKS5sYXRpbjEoKSA8PCAiXCIgcmVsYXRpb24gPSAiIDw8IChpbnQpcmVs
YXRpb24KIAkJICAgIDw8ICJdIiA8PCBlbmRsOwogICAgIGlmICggdGFnSGlzdG9yeSApCkBAIC0x
MDcsNyArMTEzLDcgQEAgdW5zaWduZWQgaW50IENTU1NlbGVjdG9yOjpzcGVjaWZpY2l0eSgpCiB7
CiAgICAgLy8gRklYTUU6IFBzZXVkby1lbGVtZW50cyBhbmQgcHNldWRvLWNsYXNzZXMgZG8gbm90
IGhhdmUgdGhlIHNhbWUgc3BlY2lmaWNpdHkuIFRoaXMgZnVuY3Rpb24KICAgICAvLyBpc24ndCBx
dWl0ZSBjb3JyZWN0LgotICAgIGludCBzID0gKChsb2NhbE5hbWVQYXJ0KHRhZykgPT0gYW55TG9j
YWxOYW1lKSA/IDAgOiAxKTsKKyAgICBpbnQgcyA9ICh0YWcubG9jYWxOYW1lKCkgPT0gc3RhckF0
b20gPyAwIDogMSk7CiAgICAgc3dpdGNoKG1hdGNoKQogICAgIHsKICAgICBjYXNlIElkOgpAQCAt
MjQwLDYwICsyNDYsNTkgQEAgYm9vbCBDU1NTZWxlY3Rvcjo6b3BlcmF0b3IgPT0gKCBjb25zdCBD
UwogCiBET01TdHJpbmcgQ1NTU2VsZWN0b3I6OnNlbGVjdG9yVGV4dCgpIGNvbnN0CiB7Ci0gICAg
Ly8gRklYTUU6IFN1cHBvcnQgbmFtZXNwYWNlcyB3aGVuIGR1bXBpbmcgdGhlIHNlbGVjdG9yIHRl
eHQuICBUaGlzIHJlcXVpcmVzIHByZXNlcnZpbmcKLSAgICAvLyB0aGUgb3JpZ2luYWwgbmFtZXNw
YWNlIHByZWZpeCB1c2VkLiBVZ2guIC1kd2gKKyAgICAvLyBGSVhNRTogU3VwcG9ydCBuYW1lc3Bh
Y2VzIHdoZW4gZHVtcGluZyB0aGUgc2VsZWN0b3IgdGV4dC4gLWR3aAogICAgIERPTVN0cmluZyBz
dHI7CiAgICAgY29uc3QgQ1NTU2VsZWN0b3IqIGNzID0gdGhpczsKLSAgICBRX1VJTlQxNiB0YWcg
PSBsb2NhbE5hbWVQYXJ0KGNzLT50YWcpOwotICAgIGlmICggdGFnID09IGFueUxvY2FsTmFtZSAm
JiBjcy0+YXR0ciA9PSBBVFRSX0lEICYmIGNzLT5tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6RXhhY3Qg
KQorICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lID0gY3MtPnRhZy5sb2NhbE5hbWUo
KTsKKyAgICBpZiAobG9jYWxOYW1lID09IHN0YXJBdG9tICYmIGNzLT5hdHRyID09IEFUVFJfSUQg
JiYgY3MtPm1hdGNoID09IENTU1NlbGVjdG9yOjpFeGFjdCkKICAgICB7CiAgICAgICAgIHN0ciA9
ICIjIjsKICAgICAgICAgc3RyICs9IGNzLT52YWx1ZS5zdHJpbmcoKTsKICAgICB9Ci0gICAgZWxz
ZSBpZiAoIHRhZyA9PSBhbnlMb2NhbE5hbWUgJiYgY3MtPmF0dHIgPT0gQVRUUl9DTEFTUyAmJiBj
cy0+bWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OkNsYXNzICkKKyAgICBlbHNlIGlmIChsb2NhbE5hbWUg
PT0gc3RhckF0b20gJiYgY3MtPmF0dHIgPT0gQVRUUl9DTEFTUyAmJiBjcy0+bWF0Y2ggPT0gQ1NT
U2VsZWN0b3I6OkNsYXNzKQogICAgIHsKICAgICAgICAgc3RyID0gIi4iOwogICAgICAgICBzdHIg
Kz0gY3MtPnZhbHVlLnN0cmluZygpOwogICAgIH0KLSAgICBlbHNlIGlmICggdGFnID09IGFueUxv
Y2FsTmFtZSAmJiBjcy0+bWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzICkKKyAgICBl
bHNlIGlmIChsb2NhbE5hbWUgPT0gc3RhckF0b20gICYmIGNzLT5tYXRjaCA9PSBDU1NTZWxlY3Rv
cjo6UHNldWRvQ2xhc3MpCiAgICAgewogICAgICAgICBzdHIgPSAiOiI7CiAgICAgICAgIHN0ciAr
PSBjcy0+dmFsdWUuc3RyaW5nKCk7CiAgICAgfQotICAgIGVsc2UgaWYgKCB0YWcgPT0gYW55TG9j
YWxOYW1lICYmIGNzLT5tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVudCApCisgICAg
ZWxzZSBpZiAobG9jYWxOYW1lID09IHN0YXJBdG9tICYmIGNzLT5tYXRjaCA9PSBDU1NTZWxlY3Rv
cjo6UHNldWRvRWxlbWVudCkKICAgICB7CiAgICAgICAgIHN0ciA9ICI6OiI7CiAgICAgICAgIHN0
ciArPSBjcy0+dmFsdWUuc3RyaW5nKCk7CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAg
IGlmICggdGFnID09IGFueUxvY2FsTmFtZSApCisgICAgICAgIGlmIChsb2NhbE5hbWUgPT0gc3Rh
ckF0b20pCiAgICAgICAgICAgICBzdHIgPSAiKiI7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHN0ciA9IGdldFRhZ05hbWUoIGNzLT50YWcgKTsKLSAgICAgICAgaWYgKCBjcy0+YXR0ciA9PSBB
VFRSX0lEICYmIGNzLT5tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6RXhhY3QgKQorICAgICAgICAgICAg
c3RyID0gbG9jYWxOYW1lOworICAgICAgICBpZiAoY3MtPmF0dHIgPT0gQVRUUl9JRCAmJiBjcy0+
bWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OkV4YWN0KQogICAgICAgICB7CiAgICAgICAgICAgICBzdHIg
Kz0gIiMiOwogICAgICAgICAgICAgc3RyICs9IGNzLT52YWx1ZS5zdHJpbmcoKTsKICAgICAgICAg
fQotICAgICAgICBlbHNlIGlmICggY3MtPmF0dHIgPT0gQVRUUl9DTEFTUyAmJiBjcy0+bWF0Y2gg
PT0gQ1NTU2VsZWN0b3I6OkNsYXNzICkKKyAgICAgICAgZWxzZSBpZiAoY3MtPmF0dHIgPT0gQVRU
Ul9DTEFTUyAmJiBjcy0+bWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OkNsYXNzKQogICAgICAgICB7CiAg
ICAgICAgICAgICBzdHIgKz0gIi4iOwogICAgICAgICAgICAgc3RyICs9IGNzLT52YWx1ZS5zdHJp
bmcoKTsKICAgICAgICAgfQotICAgICAgICBlbHNlIGlmICggY3MtPm1hdGNoID09IENTU1NlbGVj
dG9yOjpQc2V1ZG9DbGFzcyApCisgICAgICAgIGVsc2UgaWYgKGNzLT5tYXRjaCA9PSBDU1NTZWxl
Y3Rvcjo6UHNldWRvQ2xhc3MpCiAgICAgICAgIHsKICAgICAgICAgICAgIHN0ciArPSAiOiI7CiAg
ICAgICAgICAgICBzdHIgKz0gY3MtPnZhbHVlLnN0cmluZygpOwogICAgICAgICB9Ci0gICAgICAg
IGVsc2UgaWYgKCBjcy0+bWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnQgKQorICAg
ICAgICBlbHNlIGlmIChjcy0+bWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnQpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIHN0ciArPSAiOjoiOwogICAgICAgICAgICAgc3RyICs9IGNz
LT52YWx1ZS5zdHJpbmcoKTsKICAgICAgICAgfQogICAgICAgICAvLyBvcHRpb25hbCBhdHRyaWJ1
dGUKLSAgICAgICAgaWYgKCBjcy0+YXR0ciApIHsKLSAgICAgICAgICAgIERPTVN0cmluZyBhdHRy
TmFtZSA9IGdldEF0dHJOYW1lKCBjcy0+YXR0ciApOworICAgICAgICBpZiAoY3MtPmF0dHIpIHsK
KyAgICAgICAgICAgIERPTVN0cmluZyBhdHRyTmFtZSA9IGdldEF0dHJOYW1lKGNzLT5hdHRyKTsK
ICAgICAgICAgICAgIHN0ciArPSAiWyI7CiAgICAgICAgICAgICBzdHIgKz0gYXR0ck5hbWU7CiAg
ICAgICAgICAgICBzd2l0Y2ggKGNzLT5tYXRjaCkgewpJbmRleDoga2h0bWwvY3NzL2Nzc19iYXNl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvY3NzL2Nzc19i
YXNlLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTIKZGlmZiAtdSAtcCAtcjEuMTIga2h0bWwv
Y3NzL2Nzc19iYXNlLmgKLS0tIGtodG1sL2Nzcy9jc3NfYmFzZS5oCTEyIEp1biAyMDA1IDA0OjA3
OjMwIC0wMDAwCTEuMTIKKysrIGtodG1sL2Nzcy9jc3NfYmFzZS5oCTggSnVsIDIwMDUgMDM6MDM6
MzggLTAwMDAKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJkb20vZG9tX3N0cmluZy5oIgog
I2luY2x1ZGUgImRvbS9kb21fbWlzYy5oIgogI2luY2x1ZGUgInhtbC9kb21fbm9kZWltcGwuaCIK
KyNpbmNsdWRlICJkb21fcW5hbWUuaCIKICNpbmNsdWRlICJtaXNjL3NoYXJlZC5oIgogI2luY2x1
ZGUgPHFkYXRldGltZS5oPgogI2luY2x1ZGUgPHFwdHJsaXN0Lmg+CkBAIC00NiwyMCArNDcsMjAg
QEAgbmFtZXNwYWNlIERPTSB7CiAgICAgY2xhc3MgRG9jdW1lbnRJbXBsOwogCiAgICAgc3RydWN0
IENTU05hbWVzcGFjZSB7Ci0gICAgICAgIERPTVN0cmluZyBtX3ByZWZpeDsKLSAgICAgICAgRE9N
U3RyaW5nIG1fdXJpOworICAgICAgICBBdG9taWNTdHJpbmcgbV9wcmVmaXg7CisgICAgICAgIEF0
b21pY1N0cmluZyBtX3VyaTsKICAgICAgICAgQ1NTTmFtZXNwYWNlKiBtX3BhcmVudDsKIAogICAg
ICAgICBNQUlOX1RIUkVBRF9BTExPQ0FURUQ7CiAKLSAgICAgICAgQ1NTTmFtZXNwYWNlKGNvbnN0
IERPTVN0cmluZyYgcCwgY29uc3QgRE9NU3RyaW5nJiB1LCBDU1NOYW1lc3BhY2UqIHBhcmVudCkg
CisgICAgICAgIENTU05hbWVzcGFjZShjb25zdCBBdG9taWNTdHJpbmcmIHAsIGNvbnN0IEF0b21p
Y1N0cmluZyYgdSwgQ1NTTmFtZXNwYWNlKiBwYXJlbnQpIAogICAgICAgICAgICAgOm1fcHJlZml4
KHApLCBtX3VyaSh1KSwgbV9wYXJlbnQocGFyZW50KSB7fQogICAgICAgICB+Q1NTTmFtZXNwYWNl
KCkgeyBkZWxldGUgbV9wYXJlbnQ7IH0KICAgICAgICAgCi0gICAgICAgIGNvbnN0IERPTVN0cmlu
ZyYgdXJpKCkgeyByZXR1cm4gbV91cmk7IH0KLSAgICAgICAgY29uc3QgRE9NU3RyaW5nJiBwcmVm
aXgoKSB7IHJldHVybiBtX3ByZWZpeDsgfQorICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHVy
aSgpIHsgcmV0dXJuIG1fdXJpOyB9CisgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4
KCkgeyByZXR1cm4gbV9wcmVmaXg7IH0KICAgICAgICAgCi0gICAgICAgIENTU05hbWVzcGFjZSog
bmFtZXNwYWNlRm9yUHJlZml4KGNvbnN0IERPTVN0cmluZyYgcHJlZml4KSB7CisgICAgICAgIENT
U05hbWVzcGFjZSogbmFtZXNwYWNlRm9yUHJlZml4KGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4
KSB7CiAgICAgICAgICAgICBpZiAocHJlZml4ID09IG1fcHJlZml4KQogICAgICAgICAgICAgICAg
IHJldHVybiB0aGlzOwogICAgICAgICAgICAgaWYgKG1fcGFyZW50KQpAQCAtNzIsOCArNzMsMTQg
QEAgbmFtZXNwYWNlIERPTSB7CiAgICAgY2xhc3MgQ1NTU2VsZWN0b3IKICAgICB7CiAgICAgcHVi
bGljOgotCUNTU1NlbGVjdG9yKCkKLQkgICAgOiB0YWdIaXN0b3J5KDApLCBzaW1wbGVTZWxlY3Rv
cigwKSwgbmV4dFNlbGVjdG9yKDApLCBhdHRyKDApLCB0YWcoYW55UU5hbWUpLAorICAgICAgICBD
U1NTZWxlY3RvcigpCisgICAgICAgICAgICA6IHRhZ0hpc3RvcnkoMCksIHNpbXBsZVNlbGVjdG9y
KDApLCBuZXh0U2VsZWN0b3IoMCksIGF0dHIoMCksIHRhZyhhbnlUYWdOYW1lKCkpLAorICAgICAg
ICAgICAgICByZWxhdGlvbiggRGVzY2VuZGFudCApLCBtYXRjaCggTm9uZSApLAorICAgICAgICAg
ICAgICBwc2V1ZG9JZCggMCApLCBfcHNldWRvVHlwZShQc2V1ZG9Ob3RQYXJzZWQpCisgICAgICAg
IHt9CisgICAgICAgIAorCUNTU1NlbGVjdG9yKGNvbnN0IFF1YWxpZmllZE5hbWUmIHFOYW1lKQor
CSAgICA6IHRhZ0hpc3RvcnkoMCksIHNpbXBsZVNlbGVjdG9yKDApLCBuZXh0U2VsZWN0b3IoMCks
IGF0dHIoMCksIHRhZyhxTmFtZSksCiAgICAgICAgICAgICAgIHJlbGF0aW9uKCBEZXNjZW5kYW50
ICksIG1hdGNoKCBOb25lICksCiAgICAgICAgICAgICAgIHBzZXVkb0lkKCAwICksIF9wc2V1ZG9U
eXBlKFBzZXVkb05vdFBhcnNlZCkKICAgICAgICAge30KQEAgLTE2NywxMiArMTc0LDE3IEBAIG5h
bWVzcGFjZSBET00gewogICAgICAgICAgICAgcmV0dXJuIF9wc2V1ZG9UeXBlOwogICAgICAgICB9
CiAKKyAgICAgICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGFueVRhZ05hbWUoKTsKKwor
ICAgICAgICBib29sIGhhc1RhZygpIGNvbnN0IHsgcmV0dXJuIHRhZyAhPSBhbnlUYWdOYW1lKCk7
IH0KKwogCW11dGFibGUgRE9NOjpBdG9taWNTdHJpbmcgdmFsdWU7CiAJQ1NTU2VsZWN0b3IqIHRh
Z0hpc3Rvcnk7CiAgICAgICAgIENTU1NlbGVjdG9yKiBzaW1wbGVTZWxlY3RvcjsgLy8gVXNlZCBm
b3IgOm5vdC4KICAgICAgICAgQ1NTU2VsZWN0b3IqIG5leHRTZWxlY3RvcjsgLy8gdXNlZCBmb3Ig
LC1jaGFpbmVkIHNlbGVjdG9ycwogCVFfVUlOVDMyICAgICBhdHRyOwotCVFfVUlOVDMyICAgICB0
YWc7CisJCisgICAgICAgIFF1YWxpZmllZE5hbWUgdGFnOwogCiAgICAgICAgIFJlbGF0aW9uIHJl
bGF0aW9uICAgICAgICAgICAgICA6IDM7CiAJbXV0YWJsZSBNYXRjaCAgbWF0Y2ggICAgICAgICAg
IDogNDsKSW5kZXg6IGtodG1sL2Nzcy9jc3NfcnVsZWltcGwuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2Nzcy9jc3NfcnVsZWltcGwuY3BwLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjE4CmRpZmYgLXUgLXAgLXIxLjE4IGtodG1sL2Nzcy9jc3NfcnVsZWlt
cGwuY3BwCi0tLSBraHRtbC9jc3MvY3NzX3J1bGVpbXBsLmNwcAkxMSBNYXkgMjAwNSAwNTo0OToz
NCAtMDAwMAkxLjE4CisrKyBraHRtbC9jc3MvY3NzX3J1bGVpbXBsLmNwcAk4IEp1bCAyMDA1IDAz
OjAzOjM5IC0wMDAwCkBAIC0zMSw3ICszMSw2IEBACiAjaW5jbHVkZSAiY3NzL2Nzc19ydWxlaW1w
bC5oIgogCiAjaW5jbHVkZSAibWlzYy9sb2FkZXIuaCIKLSNpbmNsdWRlICJtaXNjL2h0bWx0YWdz
LmgiCiAjaW5jbHVkZSAibWlzYy9odG1sYXR0cnMuaCIKICNpbmNsdWRlICJ4bWwvZG9tX2RvY2lt
cGwuaCIKIApJbmRleDoga2h0bWwvY3NzL2Nzc19ydWxlaW1wbC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2Nzcy9jc3NfcnVsZWltcGwuaCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS4xNApkaWZmIC11IC1wIC1yMS4xNCBraHRtbC9jc3MvY3NzX3J1bGVpbXBs
LmgKLS0tIGtodG1sL2Nzcy9jc3NfcnVsZWltcGwuaAkxMCBNYXkgMjAwNSAxODo0MjowMiAtMDAw
MAkxLjE0CisrKyBraHRtbC9jc3MvY3NzX3J1bGVpbXBsLmgJOCBKdWwgMjAwNSAwMzowMzozOSAt
MDAwMApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgImNzcy9jc3NfYmFzZS5oIgogI2luY2x1
ZGUgIm1pc2MvbG9hZGVyX2NsaWVudC5oIgogI2luY2x1ZGUgIm1pc2Mvc2hhcmVkLmgiCisjaW5j
bHVkZSAibWlzYy9tYWluX3RocmVhZF9tYWxsb2MuaCIKICNpbmNsdWRlICJjc3NfdmFsdWVpbXBs
LmgiCiAKIG5hbWVzcGFjZSBraHRtbCB7CkBAIC01MCw2ICs1MSw4IEBAIHB1YmxpYzoKICAgICBD
U1NSdWxlSW1wbChTdHlsZUJhc2VJbXBsICpwYXJlbnQpCiAgICAgICAgIDogU3R5bGVCYXNlSW1w
bChwYXJlbnQpLCBtX3R5cGUoQ1NTUnVsZTo6VU5LTk9XTl9SVUxFKSB7fQogCisgICAgTUFJTl9U
SFJFQURfQUxMT0NBVEVEOworCiAgICAgdmlydHVhbCBib29sIGlzUnVsZSgpIHsgcmV0dXJuIHRy
dWU7IH0KICAgICB1bnNpZ25lZCBzaG9ydCB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9
CiAKQEAgLTcxLDYgKzc0LDggQEAgcHVibGljOgogICAgIENTU0NoYXJzZXRSdWxlSW1wbChTdHls
ZUJhc2VJbXBsICpwYXJlbnQpCiAgICAgICAgIDogQ1NTUnVsZUltcGwocGFyZW50KSB7IG1fdHlw
ZSA9IENTU1J1bGU6OkNIQVJTRVRfUlVMRTsgfQogCisgICAgTUFJTl9USFJFQURfQUxMT0NBVEVE
OworCiAgICAgdmlydHVhbCBib29sIGlzQ2hhcnNldFJ1bGUoKSB7IHJldHVybiB0cnVlOyB9CiAK
ICAgICBET01TdHJpbmcgZW5jb2RpbmcoKSBjb25zdCB7IHJldHVybiBtX2VuY29kaW5nOyB9CkBA
IC04NSw5ICs5MCwxMCBAQCBjbGFzcyBDU1NGb250RmFjZVJ1bGVJbXBsIDogcHVibGljIENTU1J1
CiB7CiBwdWJsaWM6CiAgICAgQ1NTRm9udEZhY2VSdWxlSW1wbChTdHlsZUJhc2VJbXBsICpwYXJl
bnQpOwotCiAgICAgdmlydHVhbCB+Q1NTRm9udEZhY2VSdWxlSW1wbCgpOwogCisgICAgTUFJTl9U
SFJFQURfQUxMT0NBVEVEOworICAgIAogICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uSW1w
bCAqc3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlOyB9CiAKICAgICB2aXJ0dWFsIGJvb2wg
aXNGb250RmFjZVJ1bGUoKSB7IHJldHVybiB0cnVlOyB9CkBAIC0xMDQsOSArMTEwLDEwIEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRE9NOjpET01TdHJpbmcgJm1lZGlh
ICk7CiAgICAgQ1NTSW1wb3J0UnVsZUltcGwoIFN0eWxlQmFzZUltcGwgKnBhcmVudCwgY29uc3Qg
RE9NOjpET01TdHJpbmcgJmhyZWYsCiAgICAgICAgICAgICAgICAgICAgICAgIE1lZGlhTGlzdElt
cGwgKm1lZGlhICk7Ci0KICAgICB2aXJ0dWFsIH5DU1NJbXBvcnRSdWxlSW1wbCgpOwogCisgICAg
TUFJTl9USFJFQURfQUxMT0NBVEVEOworCiAgICAgRE9NOjpET01TdHJpbmcgaHJlZigpIGNvbnN0
IHsgcmV0dXJuIG1fc3RySHJlZjsgfQogICAgIE1lZGlhTGlzdEltcGwgKm1lZGlhKCkgY29uc3Qg
eyByZXR1cm4gbV9sc3RNZWRpYTsgfQogICAgIENTU1N0eWxlU2hlZXRJbXBsICpzdHlsZVNoZWV0
KCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZVNoZWV0OyB9CkBAIC0xNTYsOSArMTYzLDEwIEBAIHB1
YmxpYzoKICAgICBDU1NNZWRpYVJ1bGVJbXBsKCBTdHlsZUJhc2VJbXBsICpwYXJlbnQgKTsKICAg
ICBDU1NNZWRpYVJ1bGVJbXBsKCBTdHlsZUJhc2VJbXBsICpwYXJlbnQsIGNvbnN0IERPTTo6RE9N
U3RyaW5nICZtZWRpYSApOwogICAgIENTU01lZGlhUnVsZUltcGwoIFN0eWxlQmFzZUltcGwgKnBh
cmVudCwgTWVkaWFMaXN0SW1wbCAqbWVkaWFMaXN0LCBDU1NSdWxlTGlzdEltcGwgKnJ1bGVMaXN0
ICk7Ci0KICAgICB2aXJ0dWFsIH5DU1NNZWRpYVJ1bGVJbXBsKCk7CiAKKyAgICBNQUlOX1RIUkVB
RF9BTExPQ0FURUQ7CisKICAgICBNZWRpYUxpc3RJbXBsICptZWRpYSgpIGNvbnN0IHsgcmV0dXJu
IG1fbHN0TWVkaWE7IH0KICAgICBDU1NSdWxlTGlzdEltcGwgKmNzc1J1bGVzKCkgeyByZXR1cm4g
bV9sc3RDU1NSdWxlczsgfQogCkBAIC0xNzksOSArMTg3LDEwIEBAIGNsYXNzIENTU1BhZ2VSdWxl
SW1wbCA6IHB1YmxpYyBDU1NSdWxlSW0KIHsKIHB1YmxpYzoKICAgICBDU1NQYWdlUnVsZUltcGwo
U3R5bGVCYXNlSW1wbCAqcGFyZW50KTsKLQogICAgIHZpcnR1YWwgfkNTU1BhZ2VSdWxlSW1wbCgp
OwogCisgICAgTUFJTl9USFJFQURfQUxMT0NBVEVEOworCiAgICAgQ1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb25JbXBsICpzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGU7IH0KIAogICAgIHZp
cnR1YWwgYm9vbCBpc1BhZ2VSdWxlKCkgeyByZXR1cm4gdHJ1ZTsgfQpAQCAtMTk5LDkgKzIwOCwx
MCBAQCBjbGFzcyBDU1NTdHlsZVJ1bGVJbXBsIDogcHVibGljIENTU1J1bGVJCiB7CiBwdWJsaWM6
CiAgICAgQ1NTU3R5bGVSdWxlSW1wbChTdHlsZUJhc2VJbXBsICpwYXJlbnQpOwotCiAgICAgdmly
dHVhbCB+Q1NTU3R5bGVSdWxlSW1wbCgpOwogCisgICAgTUFJTl9USFJFQURfQUxMT0NBVEVEOwor
CiAgICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25JbXBsICpzdHlsZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc3R5bGU7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBpc1N0eWxlUnVsZSgpIHsgcmV0dXJu
IHRydWU7IH0KQEAgLTIyNyw2ICsyMzcsOCBAQCBjbGFzcyBDU1NVbmtub3duUnVsZUltcGwgOiBw
dWJsaWMgQ1NTUnVsCiBwdWJsaWM6CiAgICAgQ1NTVW5rbm93blJ1bGVJbXBsKFN0eWxlQmFzZUlt
cGwgKnBhcmVudCkgOiBDU1NSdWxlSW1wbChwYXJlbnQpIHt9CiAKKyAgICBNQUlOX1RIUkVBRF9B
TExPQ0FURUQ7CisKICAgICB2aXJ0dWFsIGJvb2wgaXNVbmtub3duUnVsZSgpIHsgcmV0dXJuIHRy
dWU7IH0KIH07CiAKSW5kZXg6IGtodG1sL2Nzcy9jc3Nfc3R5bGVzaGVldGltcGwuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2Nzcy9jc3Nfc3R5bGVzaGVl
dGltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEyCmRpZmYgLXUgLXAgLXIxLjEyIGto
dG1sL2Nzcy9jc3Nfc3R5bGVzaGVldGltcGwuY3BwCi0tLSBraHRtbC9jc3MvY3NzX3N0eWxlc2hl
ZXRpbXBsLmNwcAkxMSBNYXkgMjAwNSAwMDo1ODoyNyAtMDAwMAkxLjEyCisrKyBraHRtbC9jc3Mv
Y3NzX3N0eWxlc2hlZXRpbXBsLmNwcAk4IEp1bCAyMDA1IDAzOjAzOjM5IC0wMDAwCkBAIC0zOCw4
ICszOCw2IEBACiAjaW5jbHVkZSAiaHRtbC9odG1sX2RvY3VtZW50aW1wbC5oIgogI2luY2x1ZGUg
Im1pc2MvbG9hZGVyLmgiCiAKLSNpbmNsdWRlICJ4bWxfbmFtZXNwYWNlX3RhYmxlLmgiCi0KICNp
bmNsdWRlIDxrZGVidWcuaD4KIAogdXNpbmcgbmFtZXNwYWNlIERPTTsKQEAgLTIxMCw3ICsyMDgs
NyBAQCB2b2lkIENTU1N0eWxlU2hlZXRJbXBsOjpkZWxldGVSdWxlKCB1bnNpCiAgICAgYi0+ZGVy
ZWYoKTsKIH0KIAotdm9pZCBDU1NTdHlsZVNoZWV0SW1wbDo6YWRkTmFtZXNwYWNlKENTU1BhcnNl
ciogcCwgY29uc3QgRE9NOjpET01TdHJpbmcmIHByZWZpeCwgY29uc3QgRE9NOjpET01TdHJpbmcm
IHVyaSkKK3ZvaWQgQ1NTU3R5bGVTaGVldEltcGw6OmFkZE5hbWVzcGFjZShDU1NQYXJzZXIqIHAs
IGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4LCBjb25zdCBBdG9taWNTdHJpbmcmIHVyaSkKIHsK
ICAgICBpZiAodXJpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjIwLDI2ICsyMTgs
MjEgQEAgdm9pZCBDU1NTdHlsZVNoZWV0SW1wbDo6YWRkTmFtZXNwYWNlKENTUwogICAgIGlmIChw
cmVmaXguaXNFbXB0eSgpKQogICAgICAgICAvLyBTZXQgdGhlIGRlZmF1bHQgbmFtZXNwYWNlIG9u
IHRoZSBwYXJzZXIgc28gdGhhdCBzZWxlY3RvcnMgdGhhdCBvbWl0IG5hbWVzcGFjZSBpbmZvIHdp
bGwKICAgICAgICAgLy8gYmUgYWJsZSB0byBwaWNrIGl0IHVwIGVhc2lseS4KLSAgICAgICAgcC0+
ZGVmYXVsdE5hbWVzcGFjZSA9IFhtbE5hbWVzcGFjZVRhYmxlOjpnZXROYW1lc3BhY2VJRCh1cmks
IGZhbHNlKTsKKyAgICAgICAgcC0+ZGVmYXVsdE5hbWVzcGFjZSA9IHVyaTsKIH0KIAotdm9pZCBD
U1NTdHlsZVNoZWV0SW1wbDo6ZGV0ZXJtaW5lTmFtZXNwYWNlKFFfVUlOVDMyJiBpZCwgY29uc3Qg
RE9NOjpET01TdHJpbmcmIHByZWZpeCkKK2NvbnN0IEF0b21pY1N0cmluZyYgQ1NTU3R5bGVTaGVl
dEltcGw6OmRldGVybWluZU5hbWVzcGFjZShjb25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCkKIHsK
LSAgICAvLyBJZiB0aGUgc3R5bGVzaGVldCBoYXMgbm8gbmFtZXNwYWNlcyB3ZSBjYW4ganVzdCBy
ZXR1cm4uICBUaGVyZSB3b24ndCBiZSBhbnkgbmVlZCB0byBldmVyIGNoZWNrCi0gICAgLy8gbmFt
ZXNwYWNlIHZhbHVlcyBpbiBzZWxlY3RvcnMuCi0gICAgaWYgKCFtX25hbWVzcGFjZXMpCi0gICAg
ICAgIHJldHVybjsKLSAgICAKICAgICBpZiAocHJlZml4LmlzRW1wdHkoKSkKLSAgICAgICAgaWQg
PSBtYWtlSWQobm9OYW1lc3BhY2UsIGxvY2FsTmFtZVBhcnQoaWQpKTsgLy8gTm8gbmFtZXNwYWNl
LiBJZiBhbiBlbGVtZW50L2F0dHJpYnV0ZSBoYXMgYSBuYW1lc3BhY2UsIHdlIHdvbid0IG1hdGNo
IGl0LgotICAgIGVsc2UgaWYgKHByZWZpeCA9PSAiKiIpCi0gICAgICAgIGlkID0gbWFrZUlkKGFu
eU5hbWVzcGFjZSwgbG9jYWxOYW1lUGFydChpZCkpOyAvLyBXZSdsbCBtYXRjaCBhbnkgbmFtZXNw
YWNlLgotICAgIGVsc2UgeworICAgICAgICByZXR1cm4gZW1wdHlBdG9tOyAvLyBObyBuYW1lc3Bh
Y2UuIElmIGFuIGVsZW1lbnQvYXR0cmlidXRlIGhhcyBhIG5hbWVzcGFjZSwgd2Ugd29uJ3QgbWF0
Y2ggaXQuCisgICAgZWxzZSBpZiAocHJlZml4ID09IHN0YXJBdG9tKQorICAgICAgICByZXR1cm4g
c3RhckF0b207IC8vIFdlJ2xsIG1hdGNoIGFueSBuYW1lc3BhY2UuCisgICAgZWxzZSBpZiAobV9u
YW1lc3BhY2VzKSB7CiAgICAgICAgIENTU05hbWVzcGFjZSogbnMgPSBtX25hbWVzcGFjZXMtPm5h
bWVzcGFjZUZvclByZWZpeChwcmVmaXgpOwogICAgICAgICBpZiAobnMpCi0gICAgICAgICAgICAv
LyBMb29rIHVwIHRoZSBpZCBmb3IgdGhpcyBuYW1lc3BhY2UgVVJJLgotICAgICAgICAgICAgaWQg
PSBtYWtlSWQoWG1sTmFtZXNwYWNlVGFibGU6OmdldE5hbWVzcGFjZUlEKG5zLT51cmkoKSwgZmFs
c2UpLCBsb2NhbE5hbWVQYXJ0KGlkKSk7CisgICAgICAgICAgICByZXR1cm4gbnMtPnVyaSgpOwog
ICAgIH0KKyAgICByZXR1cm4gZW1wdHlBdG9tOyAvLyBBc3N1bWUgd2Ugd29udCBtYXRjaCBhbnkg
bmFtZXNwYWNlcy4KIH0KIAogYm9vbCBDU1NTdHlsZVNoZWV0SW1wbDo6cGFyc2VTdHJpbmcoY29u
c3QgRE9NU3RyaW5nICZzdHJpbmcsIGJvb2wgc3RyaWN0KQpJbmRleDoga2h0bWwvY3NzL2Nzc19z
dHlsZXNoZWV0aW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2to
dG1sL2Nzcy9jc3Nfc3R5bGVzaGVldGltcGwuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMQpk
aWZmIC11IC1wIC1yMS4xMSBraHRtbC9jc3MvY3NzX3N0eWxlc2hlZXRpbXBsLmgKLS0tIGtodG1s
L2Nzcy9jc3Nfc3R5bGVzaGVldGltcGwuaAkxMSBNYXkgMjAwNSAwMDo1ODoyNyAtMDAwMAkxLjEx
CisrKyBraHRtbC9jc3MvY3NzX3N0eWxlc2hlZXRpbXBsLmgJOCBKdWwgMjAwNSAwMzowMzozOSAt
MDAwMApAQCAtMTA0LDggKzEwNCw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGRlbGV0ZVJ1bGUgKCB1
bnNpZ25lZCBsb25nIGluZGV4LCBpbnQgJmV4Y2VwdGlvbmNvZGUgKTsKICAgICB1bnNpZ25lZCBs
b25nIGFkZFJ1bGUgKCBjb25zdCBET01TdHJpbmcgJnNlbGVjdG9yLCBjb25zdCBET01TdHJpbmcg
JnN0eWxlLCBsb25nIGluZGV4LCBpbnQgJmV4Y2VwdGlvbmNvZGUgKTsKIAotICAgIHZvaWQgYWRk
TmFtZXNwYWNlKENTU1BhcnNlciogcCwgY29uc3QgRE9NOjpET01TdHJpbmcmIHByZWZpeCwgY29u
c3QgRE9NOjpET01TdHJpbmcmIHVyaSk7Ci0gICAgdm9pZCBkZXRlcm1pbmVOYW1lc3BhY2UoUV9V
SU5UMzImIGlkLCBjb25zdCBET006OkRPTVN0cmluZyYgcHJlZml4KTsKKyAgICB2b2lkIGFkZE5h
bWVzcGFjZShDU1NQYXJzZXIqIHAsIGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4LCBjb25zdCBB
dG9taWNTdHJpbmcmIHVyaSk7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBkZXRlcm1pbmVOYW1l
c3BhY2UoY29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgpOwogICAgIAogICAgIHZpcnR1YWwgYm9v
bCBwYXJzZVN0cmluZyggY29uc3QgRE9NU3RyaW5nICZzdHJpbmcsIGJvb2wgc3RyaWN0ID0gdHJ1
ZSApOwogCkluZGV4OiBraHRtbC9jc3MvY3NzcGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9jc3MvY3NzcGFyc2VyLmNwcCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS45OApkaWZmIC11IC1wIC1yMS45OCBraHRtbC9jc3MvY3NzcGFyc2VyLmNwcAot
LS0ga2h0bWwvY3NzL2Nzc3BhcnNlci5jcHAJMTEgTWF5IDIwMDUgMDI6MTA6MDkgLTAwMDAJMS45
OAorKysga2h0bWwvY3NzL2Nzc3BhcnNlci5jcHAJOCBKdWwgMjAwNSAwMzowMzo0MSAtMDAwMApA
QCAtMTAyLDcgKzEwMiw3IEBAIENTU1BhcnNlcjo6Q1NTUGFyc2VyKCBib29sIHN0cmljdFBhcnNp
bmcKICAgICBpbXBvcnRhbnQgPSBmYWxzZTsKICAgICBpblBhcnNlU2hvcnRIYW5kID0gZmFsc2U7
CiAgICAgCi0gICAgZGVmYXVsdE5hbWVzcGFjZSA9IGFueU5hbWVzcGFjZTsKKyAgICBkZWZhdWx0
TmFtZXNwYWNlID0gc3RhckF0b207CiAgICAgCiAgICAgeXlfc3RhcnQgPSAxOwogCkBAIC0xNjEs
NyArMTYxLDcgQEAgdm9pZCBDU1NQYXJzZXI6OnNldHVwUGFyc2VyKGNvbnN0IGNoYXIgKgogdm9p
ZCBDU1NQYXJzZXI6OnBhcnNlU2hlZXQoIENTU1N0eWxlU2hlZXRJbXBsICpzaGVldCwgY29uc3Qg
RE9NU3RyaW5nICZzdHJpbmcgKQogewogICAgIHN0eWxlRWxlbWVudCA9IHNoZWV0OwotICAgIGRl
ZmF1bHROYW1lc3BhY2UgPSBhbnlOYW1lc3BhY2U7IC8vIFJlc2V0IHRoZSBkZWZhdWx0IG5hbWVz
cGFjZS4KKyAgICBkZWZhdWx0TmFtZXNwYWNlID0gc3RhckF0b207IC8vIFJlc2V0IHRoZSBkZWZh
dWx0IG5hbWVzcGFjZS4KICAgICAKICAgICBzZXR1cFBhcnNlciAoIiIsIHN0cmluZywgIiIpOwog
CkluZGV4OiBraHRtbC9jc3MvY3NzcGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L1dlYkNvcmUva2h0bWwvY3NzL2Nzc3BhcnNlci5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjMwCmRpZmYgLXUgLXAgLXIxLjMwIGtodG1sL2Nzcy9jc3NwYXJzZXIuaAotLS0ga2h0bWwvY3Nz
L2Nzc3BhcnNlci5oCTE5IE5vdiAyMDA0IDAwOjEyOjIwIC0wMDAwCTEuMzAKKysrIGtodG1sL2Nz
cy9jc3NwYXJzZXIuaAk4IEp1bCAyMDA1IDAzOjAzOjQxIC0wMDAwCkBAIC0xNjQsNyArMTY0LDcg
QEAgbmFtZXNwYWNlIERPTSB7CiAJaW50IG1heFBhcnNlZFByb3BlcnRpZXM7CiAJYm9vbCBpblBh
cnNlU2hvcnRIYW5kOwogCi0gICAgICAgIFFfVUlOVDE2IGRlZmF1bHROYW1lc3BhY2U7CisgICAg
ICAgIEF0b21pY1N0cmluZyBkZWZhdWx0TmFtZXNwYWNlOwogICAgICAgICAKIAlzdGF0aWMgQ1NT
UGFyc2VyICpjdXJyZW50UGFyc2VyOwogCkluZGV4OiBraHRtbC9jc3MvY3Nzc3R5bGVzZWxlY3Rv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvY3NzL2Nz
c3N0eWxlc2VsZWN0b3IuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE4OApkaWZmIC11IC1w
IC1yMS4xODgga2h0bWwvY3NzL2Nzc3N0eWxlc2VsZWN0b3IuY3BwCi0tLSBraHRtbC9jc3MvY3Nz
c3R5bGVzZWxlY3Rvci5jcHAJNiBKdWwgMjAwNSAwMToyODo0MSAtMDAwMAkxLjE4OAorKysga2h0
bWwvY3NzL2Nzc3N0eWxlc2VsZWN0b3IuY3BwCTggSnVsIDIwMDUgMDM6MDM6NDUgLTAwMDAKQEAg
LTMzOSw3ICszMzksNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUnVsZXMoQ1NTUnVs
CiAgICAgICAgICAgICBtYXRjaFJ1bGVzRm9yTGlzdChydWxlcy0+Z2V0Q2xhc3NSdWxlcyhzaW5n
bGVDbGFzcy0+c3RyaW5nKCkuaW1wbGVtZW50YXRpb24oKSksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJ
bmRleCk7CiAgICAgfQotICAgIG1hdGNoUnVsZXNGb3JMaXN0KHJ1bGVzLT5nZXRUYWdSdWxlcyhs
b2NhbE5hbWVQYXJ0KGVsZW1lbnQtPmlkKCkpKSwKKyAgICBtYXRjaFJ1bGVzRm9yTGlzdChydWxl
cy0+Z2V0VGFnUnVsZXMoZWxlbWVudC0+bG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSksCiAg
ICAgICAgICAgICAgICAgICAgICAgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgpOwogICAg
IG1hdGNoUnVsZXNGb3JMaXN0KHJ1bGVzLT5nZXRVbml2ZXJzYWxSdWxlcygpLCBmaXJzdFJ1bGVJ
bmRleCwgbGFzdFJ1bGVJbmRleCk7CiAgICAgCkBAIC0zNjAsOSArMzYwLDkgQEAgdm9pZCBDU1NT
dHlsZVNlbGVjdG9yOjptYXRjaFJ1bGVzRm9yTGlzdAogICAgIGlmICghcnVsZXMpIHJldHVybjsK
ICAgICBmb3IgKENTU1J1bGVEYXRhKiBkID0gcnVsZXMtPmZpcnN0KCk7IGQ7IGQgPSBkLT5uZXh0
KCkpIHsKICAgICAgICAgQ1NTU3R5bGVSdWxlSW1wbCogcnVsZSA9IGQtPnJ1bGUoKTsKLSAgICAg
ICAgUV9VSU5UMTYgY3NzVGFnSWQgPSBsb2NhbE5hbWVQYXJ0KGVsZW1lbnQtPmlkKCkpOwotICAg
ICAgICBRX1VJTlQxNiB0YWcgPSBsb2NhbE5hbWVQYXJ0KGQtPnNlbGVjdG9yKCktPnRhZyk7Ci0g
ICAgICAgIGlmICgoY3NzVGFnSWQgPT0gdGFnIHx8IHRhZyA9PSBhbnlMb2NhbE5hbWUpICYmIGNo
ZWNrU2VsZWN0b3IoZC0+c2VsZWN0b3IoKSwgZWxlbWVudCkpIHsKKyAgICAgICAgY29uc3QgQXRv
bWljU3RyaW5nJiBsb2NhbE5hbWUgPSBlbGVtZW50LT5sb2NhbE5hbWUoKTsKKyAgICAgICAgY29u
c3QgQXRvbWljU3RyaW5nJiBzZWxlY3RvckxvY2FsTmFtZSA9IGQtPnNlbGVjdG9yKCktPnRhZy5s
b2NhbE5hbWUoKTsKKyAgICAgICAgaWYgKChsb2NhbE5hbWUgPT0gc2VsZWN0b3JMb2NhbE5hbWUg
fHwgc2VsZWN0b3JMb2NhbE5hbWUgPT0gc3RhckF0b20pICYmIGNoZWNrU2VsZWN0b3IoZC0+c2Vs
ZWN0b3IoKSwgZWxlbWVudCkpIHsKICAgICAgICAgICAgIC8vIElmIHRoZSBydWxlIGhhcyBubyBw
cm9wZXJ0aWVzIHRvIGFwcGx5LCB0aGVuIGlnbm9yZSBpdC4KICAgICAgICAgICAgIENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uSW1wbCogZGVjbCA9IHJ1bGUtPmRlY2xhcmF0aW9uKCk7CiAgICAg
ICAgICAgICBpZiAoIWRlY2wgfHwgIWRlY2wtPmxlbmd0aCgpKSBjb250aW51ZTsKQEAgLTYwOSw3
ICs2MDksNyBAQCBib29sIENTU1N0eWxlU2VsZWN0b3I6OmNhblNoYXJlU3R5bGVXaXRoCiAgICAg
aWYgKG4tPmlzU3R5bGVkRWxlbWVudCgpKSB7CiAgICAgICAgIGJvb2wgbW91c2VJbnNpZGUgPSBl
bGVtZW50LT5yZW5kZXJlcigpID8gZWxlbWVudC0+cmVuZGVyZXIoKS0+bW91c2VJbnNpZGUoKSA6
IGZhbHNlOwogICAgICAgICBTdHlsZWRFbGVtZW50SW1wbCogcyA9IHN0YXRpY19jYXN0PFN0eWxl
ZEVsZW1lbnRJbXBsKj4obik7Ci0gICAgICAgIGlmIChzLT5yZW5kZXJlcigpICYmIChzLT5pZCgp
ID09IGVsZW1lbnQtPmlkKCkpICYmICFzLT5oYXNJRCgpICYmCisgICAgICAgIGlmIChzLT5yZW5k
ZXJlcigpICYmIChzLT50YWdOYW1lKCkgPT0gZWxlbWVudC0+dGFnTmFtZSgpKSAmJiAhcy0+aGFz
SUQoKSAmJgogICAgICAgICAgICAgKHMtPmhhc0NsYXNzKCkgPT0gZWxlbWVudC0+aGFzQ2xhc3Mo
KSkgJiYgIXMtPmlubGluZVN0eWxlRGVjbCgpICYmCiAgICAgICAgICAgICAocy0+aGFzTWFwcGVk
QXR0cmlidXRlcygpID09IHN0eWxlZEVsZW1lbnQtPmhhc01hcHBlZEF0dHJpYnV0ZXMoKSkgJiYK
ICAgICAgICAgICAgIChzLT5pc0xpbmsoKSA9PSBlbGVtZW50LT5pc0xpbmsoKSkgJiYgCkBAIC04
ODUsMjMgKzg4NSwyMyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFkanVzdFJlbmRlclN0eWxl
CiAgICAgICAgIC8vIFNpdGVzIGFsc28gY29tbW9ubHkgdXNlIGRpc3BsYXk6aW5saW5lL2Jsb2Nr
IG9uIDx0ZD5zIGFuZCA8dGFibGU+cy4gIEluIHF1aXJrcyBtb2RlIHdlIGZvcmNlCiAgICAgICAg
IC8vIHRoZXNlIHRhZ3MgdG8gcmV0YWluIHRoZWlyIGRpc3BsYXkgdHlwZXMuCiAgICAgICAgIGlm
ICghc3RyaWN0UGFyc2luZyAmJiBlKSB7Ci0gICAgICAgICAgICBpZiAoZS0+aWQoKSA9PSBJRF9U
RCkgeworICAgICAgICAgICAgaWYgKGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0ZCgpKSkgewog
ICAgICAgICAgICAgICAgIHN0eWxlLT5zZXREaXNwbGF5KFRBQkxFX0NFTEwpOwogICAgICAgICAg
ICAgICAgIHN0eWxlLT5zZXRGbG9hdGluZyhGTk9ORSk7CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBlbHNlIGlmIChlLT5pZCgpID09IElEX1RBQkxFKQorICAgICAgICAgICAgZWxzZSBpZiAo
ZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRhYmxlKCkpKQogICAgICAgICAgICAgICAgIHN0eWxl
LT5zZXREaXNwbGF5KHN0eWxlLT5pc0Rpc3BsYXlJbmxpbmVUeXBlKCkgPyBJTkxJTkVfVEFCTEUg
OiBUQUJMRSk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBGcmFtZXMgYW5kIGZyYW1lc2V0cyBu
ZXZlciBob25vciBwb3NpdGlvbjpyZWxhdGl2ZSBvciBwb3NpdGlvbjphYnNvbHV0ZS4gIFRoaXMg
aXMgbmVjZXNzYXJ5IHRvCiAgICAgICAgIC8vIGZpeCBhIGNyYXNoIHdoZXJlIGEgc2l0ZSB0cmll
cyB0byBwb3NpdGlvbiB0aGVzZSBvYmplY3RzLiAgVGhleSBhbHNvIG5ldmVyIGhvbm9yIGRpc3Bs
YXkuCi0gICAgICAgIGlmIChlICYmIChlLT5pZCgpID09IElEX0ZSQU1FIHx8IGUtPmlkKCkgPT0g
SURfRlJBTUVTRVQpKSB7CisgICAgICAgIGlmIChlICYmIChlLT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6ZnJhbWUoKSkgfHwgZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZyYW1lc2V0KCkpKSkgewog
ICAgICAgICAgICAgc3R5bGUtPnNldFBvc2l0aW9uKFNUQVRJQyk7CiAgICAgICAgICAgICBzdHls
ZS0+c2V0RGlzcGxheShCTE9DSyk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBUYWJsZSBoZWFk
ZXJzIHdpdGggYSB0ZXh0LWFsaWduIG9mIGF1dG8gd2lsbCBjaGFuZ2UgdGhlIHRleHQtYWxpZ24g
dG8gY2VudGVyLgotICAgICAgICBpZiAoZSAmJiBlLT5pZCgpID09IElEX1RIICYmIHN0eWxlLT50
ZXh0QWxpZ24oKSA9PSBUQUFVVE8pCisgICAgICAgIGlmIChlICYmIGUtPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjp0aCgpKSAmJiBzdHlsZS0+dGV4dEFsaWduKCkgPT0gVEFBVVRPKQogICAgICAgICAg
ICAgc3R5bGUtPnNldFRleHRBbGlnbihDRU5URVIpOwogICAgICAgICAKICAgICAgICAgLy8gTXV0
YXRlIHRoZSBkaXNwbGF5IHRvIEJMT0NLIG9yIFRBQkxFIGZvciBjZXJ0YWluIGNhc2VzLCBlLmcu
LCBpZiBzb21lb25lIGF0dGVtcHRzIHRvCkBAIC05NzksNyArOTc5LDcgQEAgYm9vbCBDU1NTdHls
ZVNlbGVjdG9yOjpjaGVja1NlbGVjdG9yKENTUwogICAgIC8vIFdlIHRyYWNrIHdoZXRoZXIgb3Ig
bm90IHRoZSBydWxlIGNvbnRhaW5zIG9ubHkgOmhvdmVyIGFuZCA6YWN0aXZlIGluIGEgc2ltcGxl
IHNlbGVjdG9yLiBJZgogICAgIC8vIHNvLCB3ZSBjYW4ndCBhbGxvdyB0aGF0IHRvIGFwcGx5IHRv
IGV2ZXJ5IGVsZW1lbnQgb24gdGhlIHBhZ2UuICBXZSBhc3N1bWUgdGhlIGF1dGhvciBpbnRlbmRl
ZAogICAgIC8vIHRvIGFwcGx5IHRoZSBydWxlcyBvbmx5IHRvIGxpbmtzLgotICAgIGJvb2wgb25s
eUhvdmVyQWN0aXZlID0gKHNlbC0+dGFnID09IGFueVFOYW1lICYmCisgICAgYm9vbCBvbmx5SG92
ZXJBY3RpdmUgPSAoIXNlbC0+aGFzVGFnKCkgJiYKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAoc2VsLT5tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3MgJiYKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChzZWwtPnBzZXVkb1R5cGUoKSA9PSBDU1NTZWxlY3Rvcjo6UHNl
dWRvSG92ZXIgfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWwtPnBzZXVkb1R5
cGUoKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQWN0aXZlKSkpOwpAQCAtMTA5NiwxOSArMTA5Niwx
NCBAQCBib29sIENTU1N0eWxlU2VsZWN0b3I6OmNoZWNrT25lU2VsZWN0b3IoCiAgICAgaWYoIWUp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChzZWwtPnRhZyAhPSBhbnlRTmFtZSkg
ewotICAgICAgICBpbnQgZWx0SUQgPSBlLT5pZCgpOwotICAgICAgICBRX1VJTlQxNiBsb2NhbE5h
bWUgPSBsb2NhbE5hbWVQYXJ0KGVsdElEKTsKLSAgICAgICAgUV9VSU5UMTYgbnMgPSBuYW1lc3Bh
Y2VQYXJ0KGVsdElEKTsKLSAgICAgICAgUV9VSU5UMTYgc2VsTG9jYWxOYW1lID0gbG9jYWxOYW1l
UGFydChzZWwtPnRhZyk7Ci0gICAgICAgIFFfVUlOVDE2IHNlbE5TID0gbmFtZXNwYWNlUGFydChz
ZWwtPnRhZyk7Ci0gICAgICAgIAotICAgICAgICBpZiAobG9jYWxOYW1lIDw9IElEX0xBU1RfVEFH
ICYmIGUtPmlzSFRNTEVsZW1lbnQoKSkKLSAgICAgICAgICAgIG5zID0geGh0bWxOYW1lc3BhY2U7
IC8vIEZJWE1FOiBSZWFsbHkgd2FudCB0byBtb3ZlIGF3YXkgZnJvbSB0aGlzIGNvbXBsaWNhdGVk
IGhhY2tlcnkgYW5kIGp1c3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN3
aXRjaCB0YWdzIGFuZCBhdHRyIG5hbWVzIG92ZXIgdG8gQXRvbWljU3RyaW5ncy4KLSAgICAgICAg
Ci0gICAgICAgIGlmICgoc2VsTG9jYWxOYW1lICE9IGFueUxvY2FsTmFtZSAmJiBsb2NhbE5hbWUg
IT0gc2VsTG9jYWxOYW1lKSB8fAotICAgICAgICAgICAgKHNlbE5TICE9IGFueU5hbWVzcGFjZSAm
JiBucyAhPSBzZWxOUykpCisgICAgaWYgKHNlbC0+aGFzVGFnKCkpIHsKKyAgICAgICAgY29uc3Qg
QXRvbWljU3RyaW5nJiBsb2NhbE5hbWUgPSBlLT5sb2NhbE5hbWUoKTsKKyAgICAgICAgY29uc3Qg
QXRvbWljU3RyaW5nJiBucyA9IGUtPm5hbWVzcGFjZVVSSSgpOworICAgICAgICBjb25zdCBBdG9t
aWNTdHJpbmcmIHNlbExvY2FsTmFtZSA9IHNlbC0+dGFnLmxvY2FsTmFtZSgpOworICAgICAgICBj
b25zdCBBdG9taWNTdHJpbmcmIHNlbE5TID0gc2VsLT50YWcubmFtZXNwYWNlVVJJKCk7CisgICAg
CisgICAgICAgIGlmICgoc2VsTG9jYWxOYW1lICE9IHN0YXJBdG9tICYmIGxvY2FsTmFtZSAhPSBz
ZWxMb2NhbE5hbWUpIHx8CisgICAgICAgICAgICAoc2VsTlMgIT0gc3RhckF0b20gJiYgbnMgIT0g
c2VsTlMpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtMTI5NSw3ICsx
MjkwLDcgQEAgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpjaGVja09uZVNlbGVjdG9yKAogICAgICAg
ICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvSG92ZXI6IHsKICAgICAgICAgICAgICAgICAv
LyBJZiB3ZSdyZSBpbiBxdWlya3MgbW9kZSwgdGhlbiBob3ZlciBzaG91bGQgbmV2ZXIgbWF0Y2gg
YW5jaG9ycyB3aXRoIG5vCiAgICAgICAgICAgICAgICAgLy8gaHJlZi4gIFRoaXMgaXMgaW1wb3J0
YW50IGZvciBzaXRlcyBsaWtlIHdzai5jb20uCi0gICAgICAgICAgICAgICAgaWYgKHN0cmljdFBh
cnNpbmcgfHwgZS0+aWQoKSAhPSBJRF9BIHx8IGUtPmlzTGluaygpKSB7CisgICAgICAgICAgICAg
ICAgaWYgKHN0cmljdFBhcnNpbmcgfHwgIWUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjphKCkpIHx8
IGUtPmlzTGluaygpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50ID09IGUgJiYg
c3R5bGUpCiAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZS0+c2V0QWZmZWN0ZWRCeUhvdmVy
UnVsZXModHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChlLT5yZW5kZXJlcigpKSB7CkBA
IC0xMzI2LDcgKzEzMjEsNyBAQCBib29sIENTU1N0eWxlU2VsZWN0b3I6OmNoZWNrT25lU2VsZWN0
b3IoCiAgICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9BY3RpdmU6CiAgICAgICAg
ICAgICAgICAgLy8gSWYgd2UncmUgaW4gcXVpcmtzIG1vZGUsIHRoZW4gOmFjdGl2ZSBzaG91bGQg
bmV2ZXIgbWF0Y2ggYW5jaG9ycyB3aXRoIG5vCiAgICAgICAgICAgICAgICAgLy8gaHJlZi4gCi0g
ICAgICAgICAgICAgICAgaWYgKHN0cmljdFBhcnNpbmcgfHwgZS0+aWQoKSAhPSBJRF9BIHx8IGUt
PmlzTGluaygpKSB7CisgICAgICAgICAgICAgICAgaWYgKHN0cmljdFBhcnNpbmcgfHwgIWUtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjphKCkpIHx8IGUtPmlzTGluaygpKSB7CiAgICAgICAgICAgICAg
ICAgICAgIGlmIChlbGVtZW50ID09IGUgJiYgc3R5bGUpCiAgICAgICAgICAgICAgICAgICAgICAg
ICBzdHlsZS0+c2V0QWZmZWN0ZWRCeUFjdGl2ZVJ1bGVzKHRydWUpOwogICAgICAgICAgICAgICAg
ICAgICBlbHNlIGlmIChlLT5yZW5kZXJlcigpKQpAQCAtMTQyMCwxOSArMTQxNSw2IEBAIHZvaWQg
Q1NTUnVsZVNldDo6YWRkVG9SdWxlU2V0KERPTTo6RE9NU3QKICAgICAgICAgcnVsZXMtPmFwcGVu
ZChtX3J1bGVDb3VudCsrLCBydWxlLCBzZWwpOwogfQogCi12b2lkIENTU1J1bGVTZXQ6OmFkZFRv
UnVsZVNldChpbnQga2V5LCBJbnRSdWxlTWFwJiBtYXAsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBDU1NTdHlsZVJ1bGVJbXBsKiBydWxlLCBDU1NTZWxlY3Rvciogc2VsKQotewotICAg
IGFzc2VydChrZXkpOwotICAgIGFzc2VydChrZXkgIT0gLTEpOwotICAgIENTU1J1bGVEYXRhTGlz
dCogcnVsZXMgPSBtYXAuZ2V0KGtleSk7Ci0gICAgaWYgKCFydWxlcykgewotICAgICAgICBydWxl
cyA9IG5ldyBDU1NSdWxlRGF0YUxpc3QobV9ydWxlQ291bnQrKywgcnVsZSwgc2VsKTsKLSAgICAg
ICAgbWFwLmluc2VydChrZXksIHJ1bGVzKTsKLSAgICB9IGVsc2UKLSAgICAgICAgcnVsZXMtPmFw
cGVuZChtX3J1bGVDb3VudCsrLCBydWxlLCBzZWwpOwotfQotCiB2b2lkIENTU1J1bGVTZXQ6OmFk
ZFJ1bGUoQ1NTU3R5bGVSdWxlSW1wbCogcnVsZSwgQ1NTU2VsZWN0b3IqIHNlbCkKIHsKICAgICBp
ZiAoc2VsLT5tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6SWQpIHsKQEAgLTE0NDQsMTAgKzE0MjYsOSBA
QCB2b2lkIENTU1J1bGVTZXQ6OmFkZFJ1bGUoQ1NTU3R5bGVSdWxlSW1wCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgIAotICAgIFFfVUlOVDE2IGxvY2FsTmFtZSA9IGxvY2FsTmFtZVBhcnQo
c2VsLT50YWcpOwotICAgIGlmIChsb2NhbE5hbWUgIT0gYW55TG9jYWxOYW1lKSB7Ci0gICAgICAg
IC8vIEZJWE1FOiBtYXliZSBpdCB3b3VsZCBiZSBiZXR0ZXIgdG8ganVzdCB1c2UgYW4gaW50LWtl
eWVkIEhhc2hNYXAgaGVyZQotICAgICAgICBhZGRUb1J1bGVTZXQobG9jYWxOYW1lLCBtX3RhZ1J1
bGVzLCBydWxlLCBzZWwpOworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lID0gc2Vs
LT50YWcubG9jYWxOYW1lKCk7CisgICAgaWYgKGxvY2FsTmFtZSAhPSBzdGFyQXRvbSkgeworICAg
ICAgICBhZGRUb1J1bGVTZXQobG9jYWxOYW1lLmltcGxlbWVudGF0aW9uKCksIG1fdGFnUnVsZXMs
IHJ1bGUsIHNlbCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCkluZGV4OiBraHRtbC9j
c3MvY3Nzc3R5bGVzZWxlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJD
b3JlL2todG1sL2Nzcy9jc3NzdHlsZXNlbGVjdG9yLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
MzQKZGlmZiAtdSAtcCAtcjEuMzQga2h0bWwvY3NzL2Nzc3N0eWxlc2VsZWN0b3IuaAotLS0ga2h0
bWwvY3NzL2Nzc3N0eWxlc2VsZWN0b3IuaAk2IEp1bCAyMDA1IDAxOjI4OjQyIC0wMDAwCTEuMzQK
KysrIGtodG1sL2Nzcy9jc3NzdHlsZXNlbGVjdG9yLmgJOCBKdWwgMjAwNSAwMzowMzo0NSAtMDAw
MApAQCAtMjQsNyArMjQsNiBAQAogI2RlZmluZSBfQ1NTX2Nzc3N0eWxlc2VsZWN0b3JfaF8KIAog
I2luY2x1ZGUgPHFwdHJ2ZWN0b3IuaD4KLSNpbmNsdWRlIDxxcHRyZGljdC5oPgogI2luY2x1ZGUg
Im1pc2MvcG9pbnRlcmhhc2guaCIKIAogI2luY2x1ZGUgInJlbmRlcmluZy9yZW5kZXJfc3R5bGUu
aCIKQEAgLTI3NCwyNSArMjczLDIyIEBAIHB1YmxpYzoKICAgICAgICAgTUFJTl9USFJFQURfQUxM
T0NBVEVEOwogCiAgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxET006OkRPTVN0cmluZ0ltcGwgKiwg
Q1NTUnVsZURhdGFMaXN0ICosIFBvaW50ZXJIYXNoPERPTTo6RE9NU3RyaW5nSW1wbCAqPiA+IEF0
b21SdWxlTWFwOwotICAgICAgICB0eXBlZGVmIEhhc2hNYXA8aW50LCBDU1NSdWxlRGF0YUxpc3Qg
KiwgUG9pbnRlckhhc2g8aW50PiA+IEludFJ1bGVNYXA7CiAKICAgICAgICAgdm9pZCBhZGRSdWxl
c0Zyb21TaGVldChET006OkNTU1N0eWxlU2hlZXRJbXBsKiBzaGVldCwgY29uc3QgRE9NOjpET01T
dHJpbmcgJm1lZGl1bSA9ICJzY3JlZW4iKTsKIAogICAgICAgICB2b2lkIGFkZFJ1bGUoRE9NOjpD
U1NTdHlsZVJ1bGVJbXBsKiBydWxlLCBET006OkNTU1NlbGVjdG9yKiBzZWwpOwogICAgICAgICB2
b2lkIGFkZFRvUnVsZVNldChET006OkRPTVN0cmluZ0ltcGwqIGtleSwgQXRvbVJ1bGVNYXAmIG1h
cCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgRE9NOjpDU1NTdHlsZVJ1bGVJbXBsKiBydWxl
LCBET006OkNTU1NlbGVjdG9yKiBzZWwpOwotICAgICAgICB2b2lkIGFkZFRvUnVsZVNldChpbnQg
a2V5LCBJbnRSdWxlTWFwJiBtYXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIERPTTo6Q1NT
U3R5bGVSdWxlSW1wbCogcnVsZSwgRE9NOjpDU1NTZWxlY3Rvciogc2VsKTsKIAogICAgICAgICBD
U1NSdWxlRGF0YUxpc3QqIGdldElEUnVsZXMoRE9NOjpET01TdHJpbmdJbXBsKiBrZXkpIHsgcmV0
dXJuIG1faWRSdWxlcy5nZXQoa2V5KTsgfQogICAgICAgICBDU1NSdWxlRGF0YUxpc3QqIGdldENs
YXNzUnVsZXMoRE9NOjpET01TdHJpbmdJbXBsKiBrZXkpIHsgcmV0dXJuIG1fY2xhc3NSdWxlcy5n
ZXQoa2V5KTsgfQotICAgICAgICBDU1NSdWxlRGF0YUxpc3QqIGdldFRhZ1J1bGVzKGludCBrZXkp
IHsgcmV0dXJuIG1fdGFnUnVsZXMuZ2V0KGtleSk7IH0KKyAgICAgICAgQ1NTUnVsZURhdGFMaXN0
KiBnZXRUYWdSdWxlcyhET006OkRPTVN0cmluZ0ltcGwqIGtleSkgeyByZXR1cm4gbV90YWdSdWxl
cy5nZXQoa2V5KTsgfQogICAgICAgICBDU1NSdWxlRGF0YUxpc3QqIGdldFVuaXZlcnNhbFJ1bGVz
KCkgeyByZXR1cm4gbV91bml2ZXJzYWxSdWxlczsgfQogCiAgICAgcHVibGljOgogICAgICAgICBB
dG9tUnVsZU1hcCBtX2lkUnVsZXM7CiAgICAgICAgIEF0b21SdWxlTWFwIG1fY2xhc3NSdWxlczsK
LSAgICAgICAgSW50UnVsZU1hcCBtX3RhZ1J1bGVzOworICAgICAgICBBdG9tUnVsZU1hcCBtX3Rh
Z1J1bGVzOwogICAgICAgICBDU1NSdWxlRGF0YUxpc3QqIG1fdW5pdmVyc2FsUnVsZXM7CiAgICAg
ICAgIAogICAgICAgICB1aW50IG1fcnVsZUNvdW50OwpJbmRleDoga2h0bWwvY3NzL3BhcnNlci55
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2Nzcy9wYXJzZXIu
eSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zOQpkaWZmIC11IC1wIC1yMS4zOSBraHRtbC9jc3Mv
cGFyc2VyLnkKLS0tIGtodG1sL2Nzcy9wYXJzZXIueQkyMiBKdW4gMjAwNSAyMTowNTo1OSAtMDAw
MAkxLjM5CisrKyBraHRtbC9jc3MvcGFyc2VyLnkJOCBKdWwgMjAwNSAwMzowMzo0NiAtMDAwMApA
QCAtMzQsOSArMzQsNyBAQAogI2luY2x1ZGUgPGNzcy9jc3NfdmFsdWVpbXBsLmg+CiAjaW5jbHVk
ZSA8bWlzYy9odG1saGFzaGVzLmg+CiAjaW5jbHVkZSAiY3NzcGFyc2VyLmgiCi0KLSNpbmNsdWRl
ICJ4bWxfbmFtZXNwYWNlX3RhYmxlLmgiCi0gICAgCisgICAKICNpbmNsdWRlIDxhc3NlcnQuaD4K
ICNpbmNsdWRlIDxrZGVidWcuaD4KIC8vICNkZWZpbmUgQ1NTX0RFQlVHCkBAIC0xMzEsNyArMTI5
LDYgQEAgc3RhdGljIGlubGluZSBpbnQgZ2V0VmFsdWVJRChjb25zdCBjaGFyIAogICAgIGZsb2F0
IHZhbDsKICAgICBpbnQgcHJvcF9pZDsKICAgICBpbnQgYXR0cmlidXRlOwotICAgIGludCBlbGVt
ZW50OwogICAgIENTU1NlbGVjdG9yOjpSZWxhdGlvbiByZWxhdGlvbjsKICAgICBib29sIGI7CiAg
ICAgaW50IGk7CkBAIC0xNzcsNiArMTc0LDggQEAgc3RhdGljIGludCBjc3N5eWxleCggWVlTVFlQ
RSAqeXlsdmFsICkgewogJXRva2VuICcuJwogJXRva2VuICdbJwogCisldG9rZW4gPHN0cmluZz4g
JyonCisKICV0b2tlbiBJTVBPUlRfU1lNCiAldG9rZW4gUEFHRV9TWU0KICV0b2tlbiBNRURJQV9T
WU0KQEAgLTI2Niw3ICsyNjUsNyBAQCBzdGF0aWMgaW50IGNzc3l5bGV4KCBZWVNUWVBFICp5eWx2
YWwgKSB7CiAldHlwZSA8dmFsdWU+IHVuYXJ5X3Rlcm0KICV0eXBlIDx2YWx1ZT4gZnVuY3Rpb24K
IAotJXR5cGUgPGVsZW1lbnQ+IGVsZW1lbnRfbmFtZQorJXR5cGUgPHN0cmluZz4gZWxlbWVudF9u
YW1lCiAKICV0eXBlIDxhdHRyaWJ1dGU+IGF0dHJpYl9pZAogCkBAIC00MDYsNyArNDA1LDcgQEAg
TkFNRVNQQUNFX1NZTSBtYXliZV9zcGFjZSBtYXliZV9uc19wcmVmaQogI2VuZGlmCiAgICAgQ1NT
UGFyc2VyICpwID0gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyICo+KHBhcnNlcik7CiAgICAgaWYgKHAt
PnN0eWxlRWxlbWVudCAmJiBwLT5zdHlsZUVsZW1lbnQtPmlzQ1NTU3R5bGVTaGVldCgpKQotICAg
ICAgICBzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0SW1wbCo+KHAtPnN0eWxlRWxlbWVudCktPmFk
ZE5hbWVzcGFjZShwLCBkb21TdHJpbmcoJDMpLCBkb21TdHJpbmcoJDQpKTsKKyAgICAgICAgc3Rh
dGljX2Nhc3Q8Q1NTU3R5bGVTaGVldEltcGwqPihwLT5zdHlsZUVsZW1lbnQpLT5hZGROYW1lc3Bh
Y2UocCwgYXRvbWljU3RyaW5nKCQzKSwgYXRvbWljU3RyaW5nKCQ0KSk7CiB9CiB8IE5BTUVTUEFD
RV9TWU0gZXJyb3IgaW52YWxpZF9ibG9jawogfCBOQU1FU1BBQ0VfU1lNIGVycm9yICc7JwpAQCAt
NjI1LDY1ICs2MjQsNzEgQEAgbmFtZXNwYWNlX3NlbGVjdG9yOgogCiBzaW1wbGVfc2VsZWN0b3I6
CiAgICAgZWxlbWVudF9uYW1lIG1heWJlX3NwYWNlIHsKLQkkJCA9IG5ldyBDU1NTZWxlY3Rvcigp
OwotCSQkLT50YWcgPSAkMTsKKyAgICAgICAgQ1NTUGFyc2VyICpwID0gc3RhdGljX2Nhc3Q8Q1NT
UGFyc2VyICo+KHBhcnNlcik7CisJJCQgPSBuZXcgQ1NTU2VsZWN0b3IoUXVhbGlmaWVkTmFtZShu
dWxsQXRvbSwgYXRvbWljU3RyaW5nKCQxKSwgcC0+ZGVmYXVsdE5hbWVzcGFjZSkpOwogICAgIH0K
ICAgICB8IGVsZW1lbnRfbmFtZSBzcGVjaWZpZXJfbGlzdCBtYXliZV9zcGFjZSB7Ci0JJCQgPSAk
MjsKLQlpZiAoICQkICkKLSAgICAgICAgICAgICQkLT50YWcgPSAkMTsKKyAgICAgICAgJCQgPSAk
MjsKKwlpZiAoJCQpIHsKKyAgICAgICAgICAgIENTU1BhcnNlciAqcCA9IHN0YXRpY19jYXN0PENT
U1BhcnNlciAqPihwYXJzZXIpOworICAgICAgICAgICAgJCQtPnRhZyA9IFF1YWxpZmllZE5hbWUo
bnVsbEF0b20sIGF0b21pY1N0cmluZygkMSksIHAtPmRlZmF1bHROYW1lc3BhY2UpOworICAgICAg
ICB9CiAgICAgfQogICAgIHwgc3BlY2lmaWVyX2xpc3QgbWF5YmVfc3BhY2UgewogCSQkID0gJDE7
Ci0gICAgICAgIGlmICgkJCkKLSAgICAgICAgICAgICQkLT50YWcgPSBtYWtlSWQoc3RhdGljX2Nh
c3Q8Q1NTUGFyc2VyKj4ocGFyc2VyKS0+ZGVmYXVsdE5hbWVzcGFjZSwgYW55TG9jYWxOYW1lKTs7
CisgICAgICAgIENTU1BhcnNlciAqcCA9IHN0YXRpY19jYXN0PENTU1BhcnNlciAqPihwYXJzZXIp
OworICAgICAgICBpZiAoJCQgJiYgcC0+ZGVmYXVsdE5hbWVzcGFjZSAhPSBzdGFyQXRvbSkKKyAg
ICAgICAgICAgICQkLT50YWcgPSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCBzdGFyQXRvbSwgcC0+
ZGVmYXVsdE5hbWVzcGFjZSk7CiAgICAgfQogICAgIHwgbmFtZXNwYWNlX3NlbGVjdG9yICd8JyBl
bGVtZW50X25hbWUgbWF5YmVfc3BhY2UgewotICAgICAgICAkJCA9IG5ldyBDU1NTZWxlY3Rvcigp
OwotICAgICAgICAkJC0+dGFnID0gJDM7CisgICAgICAgIEF0b21pY1N0cmluZyBuYW1lc3BhY2VQ
cmVmaXggPSBhdG9taWNTdHJpbmcoJDEpOwogICAgICAgICBDU1NQYXJzZXIgKnAgPSBzdGF0aWNf
Y2FzdDxDU1NQYXJzZXIgKj4ocGFyc2VyKTsKICAgICAgICAgaWYgKHAtPnN0eWxlRWxlbWVudCAm
JiBwLT5zdHlsZUVsZW1lbnQtPmlzQ1NTU3R5bGVTaGVldCgpKQotICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8Q1NTU3R5bGVTaGVldEltcGwqPihwLT5zdHlsZUVsZW1lbnQpLT5kZXRlcm1pbmVOYW1l
c3BhY2UoJCQtPnRhZywgZG9tU3RyaW5nKCQxKSk7CisgICAgICAgICAgICAkJCA9IG5ldyBDU1NT
ZWxlY3RvcihRdWFsaWZpZWROYW1lKG5hbWVzcGFjZVByZWZpeCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXRvbWljU3RyaW5nKCQzKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTU3R5
bGVTaGVldEltcGwqPihwLT5zdHlsZUVsZW1lbnQpLT5kZXRlcm1pbmVOYW1lc3BhY2UobmFtZXNw
YWNlUHJlZml4KSkpOworICAgICAgICBlbHNlIC8vIEZJWE1FOiBTaG91bGRuJ3QgdGhpcyBjYXNl
IGJlIGFuIGVycm9yPworICAgICAgICAgICAgJCQgPSBuZXcgQ1NTU2VsZWN0b3IoUXVhbGlmaWVk
TmFtZShudWxsQXRvbSwgYXRvbWljU3RyaW5nKCQzKSwgcC0+ZGVmYXVsdE5hbWVzcGFjZSkpOwog
ICAgIH0KICAgICB8IG5hbWVzcGFjZV9zZWxlY3RvciAnfCcgZWxlbWVudF9uYW1lIHNwZWNpZmll
cl9saXN0IG1heWJlX3NwYWNlIHsKICAgICAgICAgJCQgPSAkNDsKICAgICAgICAgaWYgKCQkKSB7
Ci0gICAgICAgICAgICAkJC0+dGFnID0gJDM7CisgICAgICAgICAgICBBdG9taWNTdHJpbmcgbmFt
ZXNwYWNlUHJlZml4ID0gYXRvbWljU3RyaW5nKCQxKTsKICAgICAgICAgICAgIENTU1BhcnNlciAq
cCA9IHN0YXRpY19jYXN0PENTU1BhcnNlciAqPihwYXJzZXIpOwogICAgICAgICAgICAgaWYgKHAt
PnN0eWxlRWxlbWVudCAmJiBwLT5zdHlsZUVsZW1lbnQtPmlzQ1NTU3R5bGVTaGVldCgpKQotICAg
ICAgICAgICAgICAgIHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXRJbXBsKj4ocC0+c3R5bGVFbGVt
ZW50KS0+ZGV0ZXJtaW5lTmFtZXNwYWNlKCQkLT50YWcsIGRvbVN0cmluZygkMSkpOworICAgICAg
ICAgICAgICAgICQkLT50YWcgPSBRdWFsaWZpZWROYW1lKG5hbWVzcGFjZVByZWZpeCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdG9taWNTdHJpbmcoJDMpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PENTU1N0eWxl
U2hlZXRJbXBsKj4ocC0+c3R5bGVFbGVtZW50KS0+ZGV0ZXJtaW5lTmFtZXNwYWNlKG5hbWVzcGFj
ZVByZWZpeCkpOworICAgICAgICAgICAgZWxzZSAvLyBGSVhNRTogU2hvdWxkbid0IHRoaXMgY2Fz
ZSBiZSBhbiBlcnJvcj8KKyAgICAgICAgICAgICAgICAkJC0+dGFnID0gUXVhbGlmaWVkTmFtZShu
dWxsQXRvbSwgYXRvbWljU3RyaW5nKCQzKSwgcC0+ZGVmYXVsdE5hbWVzcGFjZSk7CiAgICAgICAg
IH0KICAgICB9CiAgICAgfCBuYW1lc3BhY2Vfc2VsZWN0b3IgJ3wnIHNwZWNpZmllcl9saXN0IG1h
eWJlX3NwYWNlIHsKICAgICAgICAgJCQgPSAkMzsKICAgICAgICAgaWYgKCQkKSB7Ci0gICAgICAg
ICAgICAkJC0+dGFnID0gbWFrZUlkKGFueU5hbWVzcGFjZSwgYW55TG9jYWxOYW1lKTsKKyAgICAg
ICAgICAgIEF0b21pY1N0cmluZyBuYW1lc3BhY2VQcmVmaXggPSBhdG9taWNTdHJpbmcoJDEpOwog
ICAgICAgICAgICAgQ1NTUGFyc2VyICpwID0gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyICo+KHBhcnNl
cik7CiAgICAgICAgICAgICBpZiAocC0+c3R5bGVFbGVtZW50ICYmIHAtPnN0eWxlRWxlbWVudC0+
aXNDU1NTdHlsZVNoZWV0KCkpCi0gICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTU3R5bGVT
aGVldEltcGwqPihwLT5zdHlsZUVsZW1lbnQpLT5kZXRlcm1pbmVOYW1lc3BhY2UoJCQtPnRhZywg
ZG9tU3RyaW5nKCQxKSk7CisgICAgICAgICAgICAgICAgJCQtPnRhZyA9IFF1YWxpZmllZE5hbWUo
bmFtZXNwYWNlUHJlZml4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0YXJBdG9tLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRp
Y19jYXN0PENTU1N0eWxlU2hlZXRJbXBsKj4ocC0+c3R5bGVFbGVtZW50KS0+ZGV0ZXJtaW5lTmFt
ZXNwYWNlKG5hbWVzcGFjZVByZWZpeCkpOwogICAgICAgICB9CiAgICAgfQogICA7CiAKIGVsZW1l
bnRfbmFtZToKICAgICBJREVOVCB7Ci0JQ1NTUGFyc2VyICpwID0gc3RhdGljX2Nhc3Q8Q1NTUGFy
c2VyICo+KHBhcnNlcik7CisgICAgICAgIFBhcnNlU3RyaW5nJiBzdHIgPSAkMTsKKyAgICAgICAg
Q1NTUGFyc2VyICpwID0gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyICo+KHBhcnNlcik7CiAJRE9NOjpE
b2N1bWVudEltcGwgKmRvYyA9IHAtPmRvY3VtZW50KCk7Ci0JUVN0cmluZyB0YWcgPSBxU3RyaW5n
KCQxKTsKLQlpZiAoIGRvYyApIHsKLQkgICAgaWYgKGRvYy0+aXNIVE1MRG9jdW1lbnQoKSkKLQkJ
dGFnID0gdGFnLmxvd2VyKCk7Ci0JICAgIGNvbnN0IERPTVN0cmluZyBkdGFnKHRhZyk7Ci0gICAg
ICAgICAgICAkJCA9IG1ha2VJZChwLT5kZWZhdWx0TmFtZXNwYWNlLCBkb2MtPnRhZ0lkKDAsIGR0
YWcuaW1wbGVtZW50YXRpb24oKSwgZmFsc2UpKTsKLQl9IGVsc2UgewotCSAgICAkJCA9IG1ha2VJ
ZChwLT5kZWZhdWx0TmFtZXNwYWNlLCBraHRtbDo6Z2V0VGFnSUQodGFnLmxvd2VyKCkuYXNjaWko
KSwgdGFnLmxlbmd0aCgpKSk7Ci0JICAgIC8vIHRoaXMgY2FzZSBzaG91bGQgbmV2ZXIgaGFwcGVu
IC0gb25seSB3aGVuIGxvYWRpbmcKLQkgICAgLy8gdGhlIGRlZmF1bHQgc3R5bGVzaGVldCAtIHdo
aWNoIG11c3Qgbm90IGNvbnRhaW4gdW5rbm93biB0YWdzCi0vLyAJICAgIGFzc2VydCgkJCAhPSAw
KTsKLQl9CisJaWYgKGRvYyAmJiBkb2MtPmlzSFRNTERvY3VtZW50KCkpCisgICAgICAgICAgICBz
dHIubG93ZXIoKTsKKyAgICAgICAgJCQgPSBzdHI7CiAgICAgfQogICAgIHwgJyonIHsKLQkkJCA9
IG1ha2VJZChzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJzZXIpLT5kZWZhdWx0TmFtZXNwYWNl
LCBhbnlMb2NhbE5hbWUpOworCXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBzdGFyID0gJyonOworICAg
ICAgICAkJC5zdHJpbmcgPSAmc3RhcjsKKyAgICAgICAgJCQubGVuZ3RoID0gMTsKICAgICB9CiAg
IDsKIApAQCAtNzcwLDE4ICs3NzUsMjIgQEAgYXR0cmliOgogICAgICAgICAkJCA9IG5ldyBDU1NT
ZWxlY3RvcigpOwogICAgICAgICAkJC0+YXR0ciA9ICQ1OwogICAgICAgICAkJC0+bWF0Y2ggPSBD
U1NTZWxlY3Rvcjo6U2V0OwotICAgICAgICBDU1NQYXJzZXIgKnAgPSBzdGF0aWNfY2FzdDxDU1NQ
YXJzZXIgKj4ocGFyc2VyKTsKLSAgICAgICAgaWYgKHAtPnN0eWxlRWxlbWVudCAmJiBwLT5zdHls
ZUVsZW1lbnQtPmlzQ1NTU3R5bGVTaGVldCgpKQotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q1NT
U3R5bGVTaGVldEltcGwqPihwLT5zdHlsZUVsZW1lbnQpLT5kZXRlcm1pbmVOYW1lc3BhY2UoJCQt
PmF0dHIsIGRvbVN0cmluZygkMykpOworICAgICAgICAvLyBGSVhNRTogRm9yIG5vdyB3ZSdyZSBi
cmVha2luZyBuYW1lc3BhY2Ugc3VwcG9ydCBvbiBhdHRyaWJ1dGVzLiAgV2hlbiB3ZSBzd2l0Y2gg
dG8gYXRvbWljc3RyaW5nLCB0aGVuIHdlIGNhbiBtYWtlCisgICAgICAgIC8vIGl0IHdvcmsgYWdh
aW4uCisgICAgICAgIC8vQ1NTUGFyc2VyICpwID0gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyICo+KHBh
cnNlcik7CisgICAgICAgIC8vaWYgKHAtPnN0eWxlRWxlbWVudCAmJiBwLT5zdHlsZUVsZW1lbnQt
PmlzQ1NTU3R5bGVTaGVldCgpKQorICAgICAgICAvLyAgICBzdGF0aWNfY2FzdDxDU1NTdHlsZVNo
ZWV0SW1wbCo+KHAtPnN0eWxlRWxlbWVudCktPmRldGVybWluZU5hbWVzcGFjZSgkJC0+YXR0ciwg
ZG9tU3RyaW5nKCQzKSk7CiAgICAgfQogICAgIHwgJ1snIG1heWJlX3NwYWNlIG5hbWVzcGFjZV9z
ZWxlY3RvciAnfCcgYXR0cmliX2lkIG1hdGNoIG1heWJlX3NwYWNlIGlkZW50X29yX3N0cmluZyBt
YXliZV9zcGFjZSAnXScgewogICAgICAgICAkJCA9IG5ldyBDU1NTZWxlY3RvcigpOwogICAgICAg
ICAkJC0+YXR0ciA9ICQ1OwogICAgICAgICAkJC0+bWF0Y2ggPSAoQ1NTU2VsZWN0b3I6Ok1hdGNo
KSQ2OwogICAgICAgICAkJC0+dmFsdWUgPSBhdG9taWNTdHJpbmcoJDgpOwotICAgICAgICBDU1NQ
YXJzZXIgKnAgPSBzdGF0aWNfY2FzdDxDU1NQYXJzZXIgKj4ocGFyc2VyKTsKLSAgICAgICAgaWYg
KHAtPnN0eWxlRWxlbWVudCAmJiBwLT5zdHlsZUVsZW1lbnQtPmlzQ1NTU3R5bGVTaGVldCgpKQot
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldEltcGwqPihwLT5zdHlsZUVsZW1l
bnQpLT5kZXRlcm1pbmVOYW1lc3BhY2UoJCQtPmF0dHIsIGRvbVN0cmluZygkMykpOworICAgICAg
ICAvLyBGSVhNRTogRm9yIG5vdyB3ZSdyZSBicmVha2luZyBuYW1lc3BhY2Ugc3VwcG9ydCBvbiBh
dHRyaWJ1dGVzLiAgV2hlbiB3ZSBzd2l0Y2ggdG8gYXRvbWljc3RyaW5nLCB0aGVuIHdlIGNhbiBt
YWtlCisgICAgICAgIC8vIGl0IHdvcmsgYWdhaW4uCisgICAgICAgIC8vQ1NTUGFyc2VyICpwID0g
c3RhdGljX2Nhc3Q8Q1NTUGFyc2VyICo+KHBhcnNlcik7CisgICAgICAgIC8vaWYgKHAtPnN0eWxl
RWxlbWVudCAmJiBwLT5zdHlsZUVsZW1lbnQtPmlzQ1NTU3R5bGVTaGVldCgpKQorICAgICAgICAv
LyAgICBzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0SW1wbCo+KHAtPnN0eWxlRWxlbWVudCktPmRl
dGVybWluZU5hbWVzcGFjZSgkJC0+YXR0ciwgZG9tU3RyaW5nKCQzKSk7CiAgICAgfQogICA7CiAK
SW5kZXg6IGtodG1sL2RvbS9jc3Nfc3R5bGVzaGVldC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
L2N2cy9yb290L1dlYkNvcmUva2h0bWwvZG9tL2Nzc19zdHlsZXNoZWV0LmNwcCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS44CmRpZmYgLXUgLXAgLXIxLjgga2h0bWwvZG9tL2Nzc19zdHlsZXNoZWV0
LmNwcAotLS0ga2h0bWwvZG9tL2Nzc19zdHlsZXNoZWV0LmNwcAkyMCBNYXkgMjAwNCAxNTowOToz
MiAtMDAwMAkxLjgKKysrIGtodG1sL2RvbS9jc3Nfc3R5bGVzaGVldC5jcHAJOCBKdWwgMjAwNSAw
MzowMzo0NiAtMDAwMApAQCAtMzg1LDcgKzM4NSw3IEBAIExpbmtTdHlsZSAmIExpbmtTdHlsZTo6
b3BlcmF0b3IgPSAoY29uc3QKIAogICAgIC8vICMjIyBjaGVjayBsaW5rIGlzIHJlYWxseSBsaW5r
aW5nIGEgc3R5bGUgc2hlZXQKICAgICBpZiggbiAmJiBuLT5pc0VsZW1lbnROb2RlKCkgJiYKLQko
bi0+aWQoKSA9PSBJRF9TVFlMRSB8fCBuLT5pZCgpID09IElEX0xJTkspICkgeworCShuLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6c3R5bGUoKSkgfHwgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omxp
bmsoKSkpKSB7CiAgICAgbm9kZSA9IG47CiAgICAgaWYobm9kZSkgbm9kZS0+cmVmKCk7CiAgICAg
fQpAQCAtMzk5LDEyICszOTksMTQgQEAgTGlua1N0eWxlOjp+TGlua1N0eWxlKCkKIAogU3R5bGVT
aGVldCBMaW5rU3R5bGU6OnNoZWV0KCkKIHsKLSAgICBpbnQgaWQgPSBub2RlID8gbm9kZS0+aWQo
KSA6IDA7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm4gU3R5bGVTaGVldCgpOworCiAg
ICAgLy8gIyMjIGFkZCBQSQogICAgIHJldHVybiAKLQkoIGlkID09IElEX1NUWUxFKSA/CisJKG5v
ZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzdHlsZSgpKSkgPwogCXN0YXRpY19jYXN0PEhUTUxT
dHlsZUVsZW1lbnRJbXBsICo+KG5vZGUpLT5zaGVldCgpCi0JOiAoIChpZCA9PSBJRF9MSU5LKSA/
CisJOiAoIG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpsaW5rKCkpID8KIAkgICAgc3RhdGlj
X2Nhc3Q8SFRNTExpbmtFbGVtZW50SW1wbCAqPihub2RlKS0+c2hlZXQoKQogCSAgICA6IFN0eWxl
U2hlZXQoKSApOwogfQpJbmRleDoga2h0bWwvZG9tL2RvbV9lbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9kb20vZG9tX2VsZW1lbnQuY3BwLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjEyCmRpZmYgLXUgLXAgLXIxLjEyIGtodG1sL2RvbS9kb21f
ZWxlbWVudC5jcHAKLS0tIGtodG1sL2RvbS9kb21fZWxlbWVudC5jcHAJMTIgTWF5IDIwMDUgMTc6
MTE6MjEgLTAwMDAJMS4xMgorKysga2h0bWwvZG9tL2RvbV9lbGVtZW50LmNwcAk4IEp1bCAyMDA1
IDAzOjAzOjQ2IC0wMDAwCkBAIC0xNDEsNyArMTQxLDcgQEAgRWxlbWVudDo6fkVsZW1lbnQoKQog
RE9NU3RyaW5nIEVsZW1lbnQ6OnRhZ05hbWUoKSBjb25zdAogewogICAgIGlmICghaW1wbCkgdGhy
b3cgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbjo6Tk9UX0ZPVU5EX0VSUik7Ci0gICAgcmV0dXJu
IHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsKj4oaW1wbCktPnRhZ05hbWUoKTsKKyAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8RWxlbWVudEltcGwqPihpbXBsKS0+bm9kZU5hbWUoKTsKIH0KIAogRE9NU3Ry
aW5nIEVsZW1lbnQ6OmdldEF0dHJpYnV0ZSggY29uc3QgRE9NU3RyaW5nICZuYW1lICkKSW5kZXg6
IGtodG1sL2RvbS9kb21fbm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dl
YkNvcmUva2h0bWwvZG9tL2RvbV9ub2RlLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMgpk
aWZmIC11IC1wIC1yMS4xMiBraHRtbC9kb20vZG9tX25vZGUuY3BwCi0tLSBraHRtbC9kb20vZG9t
X25vZGUuY3BwCTExIE1heSAyMDA1IDAwOjU4OjI4IC0wMDAwCTEuMTIKKysrIGtodG1sL2RvbS9k
b21fbm9kZS5jcHAJOCBKdWwgMjAwNSAwMzowMzo0NiAtMDAwMApAQCAtMzI0LDcgKzMyNCw3IEBA
IGJvb2wgTm9kZTo6aXNTdXBwb3J0ZWQoIGNvbnN0IERPTVN0cmluZyAKIERPTVN0cmluZyBOb2Rl
OjpuYW1lc3BhY2VVUkkoICApIGNvbnN0CiB7CiAgICAgaWYgKCFpbXBsKSByZXR1cm4gRE9NU3Ry
aW5nKCk7Ci0gICAgcmV0dXJuIGltcGwtPmdldERvY3VtZW50KCktPm5hbWVzcGFjZVVSSShpbXBs
LT5pZCgpKTsKKyAgICByZXR1cm4gaW1wbC0+bmFtZXNwYWNlVVJJKCk7CiB9CiAKIERPTVN0cmlu
ZyBOb2RlOjpwcmVmaXgoICApIGNvbnN0CkBAIC0zMzcsNyArMzM3LDcgQEAgdm9pZCBOb2RlOjpz
ZXRQcmVmaXgoY29uc3QgRE9NU3RyaW5nICZwcgogewogICAgIGlmICghaW1wbCkgdGhyb3cgRE9N
RXhjZXB0aW9uKERPTUV4Y2VwdGlvbjo6Tk9UX0ZPVU5EX0VSUik7CiAgICAgaW50IGV4Y2VwdGlv
bmNvZGUgPSAwOwotICAgIGltcGwtPnNldFByZWZpeChwcmVmaXgsZXhjZXB0aW9uY29kZSk7Cisg
ICAgaW1wbC0+c2V0UHJlZml4KHByZWZpeC5pbXBsZW1lbnRhdGlvbigpLGV4Y2VwdGlvbmNvZGUp
OwogICAgIGlmIChleGNlcHRpb25jb2RlKQogICAgICAgICB0aHJvdyBET01FeGNlcHRpb24oZXhj
ZXB0aW9uY29kZSk7CiB9CkBAIC0zNzYsMTMgKzM3Niw2IEBAIGJvb2wgTm9kZTo6ZGlzcGF0Y2hF
dmVudChjb25zdCBFdmVudCAmZXYKICAgICByZXR1cm4gcjsKIH0KIAotCi11bnNpZ25lZCBpbnQg
Tm9kZTo6ZWxlbWVudElkKCkgY29uc3QKLXsKLSAgICBpZiAoIWltcGwpIHJldHVybiAwOwotICAg
IHJldHVybiBpbXBsLT5pZCgpOwotfQotCiB1bnNpZ25lZCBsb25nIE5vZGU6OmluZGV4KCkgY29u
c3QKIHsKICAgICBpZiAoIWltcGwpIHJldHVybiAwOwpJbmRleDoga2h0bWwvZG9tL2RvbV9ub2Rl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZG9tL2RvbV9u
b2RlLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTIKZGlmZiAtdSAtcCAtcjEuMTIga2h0bWwv
ZG9tL2RvbV9ub2RlLmgKLS0tIGtodG1sL2RvbS9kb21fbm9kZS5oCTE4IE1heSAyMDA1IDIxOjEw
OjI0IC0wMDAwCTEuMTIKKysrIGtodG1sL2RvbS9kb21fbm9kZS5oCTggSnVsIDIwMDUgMDM6MDM6
NDcgLTAwMDAKQEAgLTg1NSwxMyArODU1LDYgQEAgcHVibGljOgogICAgIGJvb2wgZGlzcGF0Y2hF
dmVudChjb25zdCBFdmVudCAmZXZ0KTsKIAogICAgIC8qKgotICAgICAqIEBpbnRlcm5hbAotICAg
ICAqIG5vdCBwYXJ0IG9mIHRoZSBET00uCi0gICAgICogQHJldHVybnMgdGhlIGVsZW1lbnQgaWQs
IGluIGNhc2UgdGhpcyBpcyBhbiBlbGVtZW50LCAwIG90aGVyd2lzZQotICAgICAqLwotICAgIFFf
VUlOVDMyIGVsZW1lbnRJZCgpIGNvbnN0OwotCi0gICAgLyoqCiAgICAgICogdGVzdHMgaWYgdGhp
cyBOb2RlIGlzIDAuIFVzZWZ1bCBlc3BlY2lhbGx5LCBpZiBjYXN0aW5nIHRvIGEgZGVyaXZlZAog
ICAgICAqIGNsYXNzOgogICAgICAqCkluZGV4OiBraHRtbC9kb20vaHRtbF9iYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9kb20vaHRtbF9iYXNlLmNw
cCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS42CmRpZmYgLXUgLXAgLXIxLjYga2h0bWwvZG9tL2h0
bWxfYmFzZS5jcHAKLS0tIGtodG1sL2RvbS9odG1sX2Jhc2UuY3BwCTMgTm92IDIwMDMgMDY6MzI6
MDQgLTAwMDAJMS42CisrKyBraHRtbC9kb20vaHRtbF9iYXNlLmNwcAk4IEp1bCAyMDA1IDAzOjAz
OjQ3IC0wMDAwCkBAIC00MSw3ICs0MSw3IEBAIEhUTUxCb2R5RWxlbWVudDo6SFRNTEJvZHlFbGVt
ZW50KEhUTUxCb2QKIAogSFRNTEJvZHlFbGVtZW50ICZIVE1MQm9keUVsZW1lbnQ6Om9wZXJhdG9y
ID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfQk9E
WSApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpib2R5KCkgKTsKICAgICBy
ZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTEzNSw3ICsxMzUsNyBAQCBIVE1MRnJhbWVFbGVtZW50OjpI
VE1MRnJhbWVFbGVtZW50KEhUTUxGCiAKIEhUTUxGcmFtZUVsZW1lbnQgJkhUTUxGcmFtZUVsZW1l
bnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBv
dGhlciwgSURfRlJBTUUgKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6ZnJh
bWUoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtMjY1LDcgKzI2NSw3IEBAIEhUTUxJ
RnJhbWVFbGVtZW50OjpIVE1MSUZyYW1lRWxlbWVudChIVE0KIAogSFRNTElGcmFtZUVsZW1lbnQg
JkhUTUxJRnJhbWVFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAg
ICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0lGUkFNRSApOworICAgIGFzc2lnbk90aGVyKCBvdGhl
ciwgSFRNTE5hbWVzOjppZnJhbWUoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtNDE0
LDcgKzQxNCw3IEBAIEhUTUxGcmFtZVNldEVsZW1lbnQ6OkhUTUxGcmFtZVNldEVsZW1lbnQKIAog
SFRNTEZyYW1lU2V0RWxlbWVudCAmSFRNTEZyYW1lU2V0RWxlbWVudDo6b3BlcmF0b3IgPSAoY29u
c3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9GUkFNRVNFVCAp
OworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpmcmFtZXNldCgpICk7CiAgICAg
cmV0dXJuICp0aGlzOwogfQogCkBAIC00NjYsNyArNDY2LDcgQEAgSFRNTEhlYWRFbGVtZW50OjpI
VE1MSGVhZEVsZW1lbnQoSFRNTEhlYQogCiBIVE1MSGVhZEVsZW1lbnQgJkhUTUxIZWFkRWxlbWVu
dDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90
aGVyLCBJRF9IRUFEICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OmhlYWQo
KSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtNTA3LDcgKzUwNyw3IEBAIEhUTUxIdG1s
RWxlbWVudDo6SFRNTEh0bWxFbGVtZW50KEhUTUxIdG0KIAogSFRNTEh0bWxFbGVtZW50ICZIVE1M
SHRtbEVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2ln
bk90aGVyKCBvdGhlciwgSURfSFRNTCApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5h
bWVzOjpodG1sKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKSW5kZXg6IGtodG1sL2RvbS9o
dG1sX2Jsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRt
bC9kb20vaHRtbF9ibG9jay5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNApkaWZmIC11IC1w
IC1yMS40IGtodG1sL2RvbS9odG1sX2Jsb2NrLmNwcAotLS0ga2h0bWwvZG9tL2h0bWxfYmxvY2su
Y3BwCTEwIEp1biAyMDAyIDIwOjA3OjM0IC0wMDAwCTEuNAorKysga2h0bWwvZG9tL2h0bWxfYmxv
Y2suY3BwCTggSnVsIDIwMDUgMDM6MDM6NDggLTAwMDAKQEAgLTQzLDcgKzQzLDcgQEAgSFRNTEJs
b2NrcXVvdGVFbGVtZW50OjpIVE1MQmxvY2txdW90ZUVsZQogCiBIVE1MQmxvY2txdW90ZUVsZW1l
bnQgJkhUTUxCbG9ja3F1b3RlRWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIp
CiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9CTE9DS1FVT1RFICk7CisgICAgYXNzaWdu
T3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OmJsb2NrcXVvdGUoKSApOwogICAgIHJldHVybiAqdGhp
czsKIH0KIApAQCAtODQsNyArODQsNyBAQCBIVE1MRGl2RWxlbWVudDo6SFRNTERpdkVsZW1lbnQo
SFRNTERpdkVsCiAKIEhUTUxEaXZFbGVtZW50ICZIVE1MRGl2RWxlbWVudDo6b3BlcmF0b3IgPSAo
Y29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9ESVYgKTsK
KyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6ZGl2KCkgKTsKICAgICByZXR1cm4g
KnRoaXM7CiB9CiAKQEAgLTEyNSw3ICsxMjUsNyBAQCBIVE1MSFJFbGVtZW50OjpIVE1MSFJFbGVt
ZW50KEhUTUxIUkVsZW1lCiAKIEhUTUxIUkVsZW1lbnQgJkhUTUxIUkVsZW1lbnQ6Om9wZXJhdG9y
ID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfSFIg
KTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6aHIoKSApOwogICAgIHJldHVy
biAqdGhpczsKIH0KIApAQCAtMjA1LDE2ICsyMDUsMTcgQEAgSFRNTEhlYWRpbmdFbGVtZW50OjpI
VE1MSGVhZGluZ0VsZW1lbnQoSAogCiBIVE1MSGVhZGluZ0VsZW1lbnQgJkhUTUxIZWFkaW5nRWxl
bWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgaWYob3RoZXIuZWxl
bWVudElkKCkgIT0gSURfSDEgfHwKLSAgICAgICBvdGhlci5lbGVtZW50SWQoKSAhPSBJRF9IMiB8
fAotICAgICAgIG90aGVyLmVsZW1lbnRJZCgpICE9IElEX0gzIHx8Ci0gICAgICAgb3RoZXIuZWxl
bWVudElkKCkgIT0gSURfSDQgfHwKLSAgICAgICBvdGhlci5lbGVtZW50SWQoKSAhPSBJRF9INSB8
fAotICAgICAgIG90aGVyLmVsZW1lbnRJZCgpICE9IElEX0g2ICkKKyAgICBpZiAoIW90aGVyLmhh
bmRsZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDEoKSkgJiYKKyAgICAgICAgIW90aGVyLmhh
bmRsZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDIoKSkgJiYKKyAgICAgICAgIW90aGVyLmhh
bmRsZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDMoKSkgJiYKKyAgICAgICAgIW90aGVyLmhh
bmRsZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDQoKSkgJiYKKyAgICAgICAgIW90aGVyLmhh
bmRsZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDUoKSkgJiYKKyAgICAgICAgIW90aGVyLmhh
bmRsZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDYoKSkpCiAgICAgewogCWlmICggaW1wbCAp
IGltcGwtPmRlcmVmKCk7CiAJaW1wbCA9IDA7CiAgICAgfSBlbHNlIHsKKwogICAgIE5vZGU6Om9w
ZXJhdG9yID0gKG90aGVyKTsKICAgICB9CiAgICAgcmV0dXJuICp0aGlzOwpAQCAtMjU3LDcgKzI1
OCw3IEBAIEhUTUxQYXJhZ3JhcGhFbGVtZW50OjpIVE1MUGFyYWdyYXBoRWxlbWUKIAogSFRNTFBh
cmFncmFwaEVsZW1lbnQgJkhUTUxQYXJhZ3JhcGhFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBO
b2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX1AgKTsKKyAgICBhc3Np
Z25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6cCgpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQog
CkBAIC0yOTgsNyArMjk5LDcgQEAgSFRNTFByZUVsZW1lbnQ6OkhUTUxQcmVFbGVtZW50KEhUTUxQ
cmVFbAogCiBIVE1MUHJlRWxlbWVudCAmSFRNTFByZUVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0
IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfUFJFICk7CisgICAg
YXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OnByZSgpICk7CiAgICAgcmV0dXJuICp0aGlz
OwogfQogCkluZGV4OiBraHRtbC9kb20vaHRtbF9lbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9kb20vaHRtbF9lbGVtZW50LmNwcCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS4xNApkaWZmIC11IC1wIC1yMS4xNCBraHRtbC9kb20vaHRtbF9lbGVt
ZW50LmNwcAotLS0ga2h0bWwvZG9tL2h0bWxfZWxlbWVudC5jcHAJMTEgTWF5IDIwMDUgMDA6NTg6
MjggLTAwMDAJMS4xNAorKysga2h0bWwvZG9tL2h0bWxfZWxlbWVudC5jcHAJOCBKdWwgMjAwNSAw
MzowMzo0OCAtMDAwMApAQCAtMTgyLDkgKzE4Miw5IEBAIEhUTUxDb2xsZWN0aW9uIEhUTUxFbGVt
ZW50OjpjaGlsZHJlbigpIGMKICAgICByZXR1cm4gSFRNTENvbGxlY3Rpb24oaW1wbCwgSFRNTENv
bGxlY3Rpb25JbXBsOjpOT0RFX0NISUxEUkVOKTsKIH0KIAotdm9pZCBIVE1MRWxlbWVudDo6YXNz
aWduT3RoZXIoIGNvbnN0IE5vZGUgJm90aGVyLCBpbnQgZWxlbWVudElkICkKK3ZvaWQgSFRNTEVs
ZW1lbnQ6OmFzc2lnbk90aGVyKCBjb25zdCBOb2RlICZvdGhlciwgY29uc3QgUXVhbGlmaWVkTmFt
ZSYgdGFnTmFtZSApCiB7Ci0gICAgaWYoKGludClvdGhlci5lbGVtZW50SWQoKSAhPSBlbGVtZW50
SWQpIHsKKyAgICBpZiAoIW90aGVyLmhhbmRsZSgpLT5oYXNUYWdOYW1lKHRhZ05hbWUpKSB7CiAJ
aWYgKCBpbXBsICkgaW1wbC0+ZGVyZWYoKTsKIAlpbXBsID0gMDsKICAgICB9IGVsc2UgewpJbmRl
eDoga2h0bWwvZG9tL2h0bWxfZWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9XZWJDb3JlL2todG1sL2RvbS9odG1sX2VsZW1lbnQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS44CmRpZmYgLXUgLXAgLXIxLjgga2h0bWwvZG9tL2h0bWxfZWxlbWVudC5oCi0tLSBraHRtbC9k
b20vaHRtbF9lbGVtZW50LmgJMjIgTWF5IDIwMDQgMDE6NTA6NDggLTAwMDAJMS44CisrKyBraHRt
bC9kb20vaHRtbF9lbGVtZW50LmgJOCBKdWwgMjAwNSAwMzowMzo0OCAtMDAwMApAQCAtMzAsNiAr
MzAsOCBAQAogI2RlZmluZSBIVE1MX0VMRU1FTlRfSAogCiAjaW5jbHVkZSA8ZG9tL2RvbV9lbGVt
ZW50Lmg+CisjaW5jbHVkZSAiZG9tX3FuYW1lLmgiCisKIGNsYXNzIEtIVE1MVmlldzsKIAogbmFt
ZXNwYWNlIERPTSB7CkBAIC0yMjUsNyArMjI3LDcgQEAgcHJvdGVjdGVkOgogICAgIC8qCiAgICAg
ICogQGludGVybmFsCiAgICAgICovCi0gICAgdm9pZCBhc3NpZ25PdGhlciggY29uc3QgTm9kZSAm
b3RoZXIsIGludCBlbGVtZW50SWQgKTsKKyAgICB2b2lkIGFzc2lnbk90aGVyKCBjb25zdCBOb2Rl
ICZvdGhlciwgY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSApOwogfTsKIAogfTsgLy9uYW1l
c3BhY2UKSW5kZXg6IGtodG1sL2RvbS9odG1sX2Zvcm0uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2RvbS9odG1sX2Zvcm0uY3BwLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjExCmRpZmYgLXUgLXAgLXIxLjExIGtodG1sL2RvbS9odG1sX2Zvcm0uY3BwCi0t
LSBraHRtbC9kb20vaHRtbF9mb3JtLmNwcAkxMSBNYXkgMjAwNSAwMDo1ODoyOCAtMDAwMAkxLjEx
CisrKyBraHRtbC9kb20vaHRtbF9mb3JtLmNwcAk4IEp1bCAyMDA1IDAzOjAzOjQ4IC0wMDAwCkBA
IC00Nyw3ICs0Nyw3IEBAIEhUTUxCdXR0b25FbGVtZW50OjpIVE1MQnV0dG9uRWxlbWVudChIVE0K
IAogSFRNTEJ1dHRvbkVsZW1lbnQgJkhUTUxCdXR0b25FbGVtZW50OjpvcGVyYXRvciA9IChjb25z
dCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0JVVFRPTiApOwkK
KyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6YnV0dG9uKCkgKTsJCiAgICAgcmV0
dXJuICp0aGlzOwogfQogCkBAIC0xNTcsNyArMTU3LDcgQEAgSFRNTEZpZWxkU2V0RWxlbWVudDo6
SFRNTEZpZWxkU2V0RWxlbWVudAogCiBIVE1MRmllbGRTZXRFbGVtZW50ICZIVE1MRmllbGRTZXRF
bGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhl
ciggb3RoZXIsIElEX0ZJRUxEU0VUICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFt
ZXM6OmZpZWxkc2V0KCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTE5Myw3ICsxOTMs
NyBAQCBIVE1MRm9ybUVsZW1lbnQ6OkhUTUxGb3JtRWxlbWVudChIVE1MRm9yCiAKIEhUTUxGb3Jt
RWxlbWVudCAmSFRNTEZvcm1FbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikK
IHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0ZPUk0gKTsKKyAgICBhc3NpZ25PdGhlcigg
b3RoZXIsIEhUTUxOYW1lczo6Zm9ybSgpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC0z
MTEsNyArMzExLDcgQEAgSFRNTElucHV0RWxlbWVudDo6SFRNTElucHV0RWxlbWVudChIVE1MSQog
CiBIVE1MSW5wdXRFbGVtZW50ICZIVE1MSW5wdXRFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBO
b2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0lOUFVUICk7CisgICAg
YXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OmlucHV0KCkgKTsKICAgICByZXR1cm4gKnRo
aXM7CiB9CiAKQEAgLTU3NCw3ICs1NzQsNyBAQCBIVE1MTGFiZWxFbGVtZW50OjpIVE1MTGFiZWxF
bGVtZW50KEhUTUxMCiAKIEhUTUxMYWJlbEVsZW1lbnQgJkhUTUxMYWJlbEVsZW1lbnQ6Om9wZXJh
dG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURf
TEFCRUwgKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6bGFiZWwoKSApOwog
ICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtNjMzLDcgKzYzMyw3IEBAIEhUTUxMZWdlbmRFbGVt
ZW50OjpIVE1MTGVnZW5kRWxlbWVudChIVE0KIAogSFRNTExlZ2VuZEVsZW1lbnQgJkhUTUxMZWdl
bmRFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25P
dGhlciggb3RoZXIsIElEX0xFR0VORCApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5h
bWVzOjpsZWdlbmQoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtNjkxLDcgKzY5MSw3
IEBAIEhUTUxPcHRHcm91cEVsZW1lbnQ6OkhUTUxPcHRHcm91cEVsZW1lbnQKIAogSFRNTE9wdEdy
b3VwRWxlbWVudCAmSFRNTE9wdEdyb3VwRWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAm
b3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9PUFRHUk9VUCApOworICAgIGFz
c2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpvcHRncm91cCgpICk7CiAgICAgcmV0dXJuICp0
aGlzOwogfQogCkBAIC03NDQsNyArNzQ0LDcgQEAgSFRNTFNlbGVjdEVsZW1lbnQ6OkhUTUxTZWxl
Y3RFbGVtZW50KEhUTQogCiBIVE1MU2VsZWN0RWxlbWVudCAmSFRNTFNlbGVjdEVsZW1lbnQ6Om9w
ZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwg
SURfU0VMRUNUICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OnNlbGVjdCgp
ICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC05MDYsNyArOTA2LDcgQEAgSFRNTFRleHRB
cmVhRWxlbWVudDo6SFRNTFRleHRBcmVhRWxlbWVudAogCiBIVE1MVGV4dEFyZWFFbGVtZW50ICZI
VE1MVGV4dEFyZWFFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAg
ICBhc3NpZ25PdGhlciggb3RoZXIsIElEX1RFWFRBUkVBICk7CisgICAgYXNzaWduT3RoZXIoIG90
aGVyLCBIVE1MTmFtZXM6OnRleHRhcmVhKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAg
LTEwNzQsNyArMTA3NCw3IEBAIEhUTUxPcHRpb25FbGVtZW50OjpIVE1MT3B0aW9uRWxlbWVudChI
VE0KIAogSFRNTE9wdGlvbkVsZW1lbnQgJkhUTUxPcHRpb25FbGVtZW50OjpvcGVyYXRvciA9IChj
b25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX09QVElPTiAp
OworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpvcHRpb24oKSApOwogICAgIHJl
dHVybiAqdGhpczsKIH0KIApAQCAtMTE4Miw3ICsxMTgyLDcgQEAgSFRNTElzSW5kZXhFbGVtZW50
OjpIVE1MSXNJbmRleEVsZW1lbnQoSAogCiBIVE1MSXNJbmRleEVsZW1lbnQgJkhUTUxJc0luZGV4
RWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3Ro
ZXIoIG90aGVyLCBJRF9JU0lOREVYICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFt
ZXM6OmlzaW5kZXgoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApJbmRleDoga2h0bWwvZG9t
L2h0bWxfaGVhZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0
bWwvZG9tL2h0bWxfaGVhZC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTAKZGlmZiAtdSAt
cCAtcjEuMTAga2h0bWwvZG9tL2h0bWxfaGVhZC5jcHAKLS0tIGtodG1sL2RvbS9odG1sX2hlYWQu
Y3BwCTIyIEp1biAyMDA1IDE4OjIyOjAxIC0wMDAwCTEuMTAKKysrIGtodG1sL2RvbS9odG1sX2hl
YWQuY3BwCTggSnVsIDIwMDUgMDM6MDM6NDkgLTAwMDAKQEAgLTQyLDcgKzQyLDcgQEAgSFRNTEJh
c2VFbGVtZW50OjpIVE1MQmFzZUVsZW1lbnQoSFRNTEJhcwogCiBIVE1MQmFzZUVsZW1lbnQgJkhU
TUxCYXNlRWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNz
aWduT3RoZXIoIG90aGVyLCBJRF9CQVNFICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1M
TmFtZXM6OmJhc2UoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtOTcsNyArOTcsNyBA
QCBIVE1MTGlua0VsZW1lbnQ6OkhUTUxMaW5rRWxlbWVudChIVE1MTGluCiAKIEhUTUxMaW5rRWxl
bWVudCAmSFRNTExpbmtFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsK
LSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0xJTksgKTsKKyAgICBhc3NpZ25PdGhlciggb3Ro
ZXIsIEhUTUxOYW1lczo6bGluaygpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC0yMzgs
NyArMjM4LDcgQEAgSFRNTE1ldGFFbGVtZW50OjpIVE1MTWV0YUVsZW1lbnQoSFRNTE1ldAogCiBI
VE1MTWV0YUVsZW1lbnQgJkhUTUxNZXRhRWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAm
b3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9NRVRBICk7CisgICAgYXNzaWdu
T3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6Om1ldGEoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0K
IApAQCAtMzEyLDcgKzMxMiw3IEBAIEhUTUxTY3JpcHRFbGVtZW50OjpIVE1MU2NyaXB0RWxlbWVu
dChIVE0KIAogSFRNTFNjcmlwdEVsZW1lbnQgJkhUTUxTY3JpcHRFbGVtZW50OjpvcGVyYXRvciA9
IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX1NDUklQ
VCApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpzY3JpcHQoKSApOwogICAg
IHJldHVybiAqdGhpczsKIH0KIApAQCAtNDI0LDcgKzQyNCw3IEBAIEhUTUxTdHlsZUVsZW1lbnQ6
OkhUTUxTdHlsZUVsZW1lbnQoSFRNTFMKIAogSFRNTFN0eWxlRWxlbWVudCAmSFRNTFN0eWxlRWxl
bWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIo
IG90aGVyLCBJRF9TVFlMRSApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpz
dHlsZSgpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC00OTYsNyArNDk2LDcgQEAgSFRN
TFRpdGxlRWxlbWVudDo6SFRNTFRpdGxlRWxlbWVudChIVE1MVAogCiBIVE1MVGl0bGVFbGVtZW50
ICZIVE1MVGl0bGVFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAg
ICBhc3NpZ25PdGhlciggb3RoZXIsIElEX1RJVExFICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVy
LCBIVE1MTmFtZXM6OnRpdGxlKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKSW5kZXg6IGto
dG1sL2RvbS9odG1sX2ltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2Vi
Q29yZS9raHRtbC9kb20vaHRtbF9pbWFnZS5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuOQpk
aWZmIC11IC1wIC1yMS45IGtodG1sL2RvbS9odG1sX2ltYWdlLmNwcAotLS0ga2h0bWwvZG9tL2h0
bWxfaW1hZ2UuY3BwCTMgTm92IDIwMDMgMDY6MzI6MDQgLTAwMDAJMS45CisrKyBraHRtbC9kb20v
aHRtbF9pbWFnZS5jcHAJOCBKdWwgMjAwNSAwMzowMzo0OSAtMDAwMApAQCAtNDYsNyArNDYsNyBA
QCBIVE1MQXJlYUVsZW1lbnQ6OkhUTUxBcmVhRWxlbWVudChIVE1MQXJlCiAKIEhUTUxBcmVhRWxl
bWVudCAmSFRNTEFyZWFFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsK
LSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0FSRUEgKTsKKyAgICBhc3NpZ25PdGhlciggb3Ro
ZXIsIEhUTUxOYW1lczo6YXJlYSgpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC0xNzYs
NyArMTc2LDcgQEAgSFRNTEltYWdlRWxlbWVudDo6SFRNTEltYWdlRWxlbWVudChIVE1MSQogCiBI
VE1MSW1hZ2VFbGVtZW50ICZIVE1MSW1hZ2VFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2Rl
ICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0lNRyApOworICAgIGFzc2ln
bk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjppbWcoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0K
IApAQCAtMzcyLDcgKzM3Miw3IEBAIEhUTUxNYXBFbGVtZW50OjpIVE1MTWFwRWxlbWVudChIVE1M
TWFwRWwKIAogSFRNTE1hcEVsZW1lbnQgJkhUTUxNYXBFbGVtZW50OjpvcGVyYXRvciA9IChjb25z
dCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX01BUCApOworICAg
IGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjptYXAoKSApOwogICAgIHJldHVybiAqdGhp
czsKIH0KIApJbmRleDoga2h0bWwvZG9tL2h0bWxfaW5saW5lLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9kb20vaHRtbF9pbmxpbmUuY3BwLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjcKZGlmZiAtdSAtcCAtcjEuNyBraHRtbC9kb20vaHRtbF9pbmxpbmUu
Y3BwCi0tLSBraHRtbC9kb20vaHRtbF9pbmxpbmUuY3BwCTExIE1heSAyMDA1IDAwOjU4OjI4IC0w
MDAwCTEuNworKysga2h0bWwvZG9tL2h0bWxfaW5saW5lLmNwcAk4IEp1bCAyMDA1IDAzOjAzOjQ5
IC0wMDAwCkBAIC00NSw3ICs0NSw3IEBAIEhUTUxBbmNob3JFbGVtZW50OjpIVE1MQW5jaG9yRWxl
bWVudChIVE0KIAogSFRNTEFuY2hvckVsZW1lbnQgJkhUTUxBbmNob3JFbGVtZW50OjpvcGVyYXRv
ciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0Eg
KTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6YSgpICk7CiAgICAgcmV0dXJu
ICp0aGlzOwogfQogCkBAIC0yMTcsNyArMjE3LDcgQEAgSFRNTEJSRWxlbWVudDo6SFRNTEJSRWxl
bWVudChIVE1MQlJFbGVtZQogCiBIVE1MQlJFbGVtZW50ICZIVE1MQlJFbGVtZW50OjpvcGVyYXRv
ciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0JS
ICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OmJyKCkgKTsKICAgICByZXR1
cm4gKnRoaXM7CiB9CiAKQEAgLTI1OCw3ICsyNTgsNyBAQCBIVE1MRm9udEVsZW1lbnQ6OkhUTUxG
b250RWxlbWVudChIVE1MRm9uCiAKIEhUTUxGb250RWxlbWVudCAmSFRNTEZvbnRFbGVtZW50Ojpv
cGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIs
IElEX0ZPTlQgKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6Zm9udCgpICk7
CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC0zMTksNyArMzE5LDcgQEAgSFRNTE1vZEVsZW1l
bnQ6OkhUTUxNb2RFbGVtZW50KGNvbnN0IEhUTQogSFRNTE1vZEVsZW1lbnQ6OkhUTUxNb2RFbGVt
ZW50KEhUTUxFbGVtZW50SW1wbCAqX2ltcGwpCiAgICAgOiBIVE1MRWxlbWVudCgpCiB7Ci0gICAg
aWYgKF9pbXBsICYmIChfaW1wbC0+aWQoKSA9PSBJRF9JTlMgfHwgX2ltcGwtPmlkKCkgPT0gSURf
REVMKSkKKyAgICBpZiAoX2ltcGwgJiYgKF9pbXBsLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW5z
KCkpIHx8IF9pbXBsLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZGVsKCkpKSkKICAgICAgICAgaW1w
bCA9IF9pbXBsOwogICAgIGVsc2UKICAgICAgICAgaW1wbCA9IDA7CkBAIC0zMjgsOSArMzI4LDgg
QEAgSFRNTE1vZEVsZW1lbnQ6OkhUTUxNb2RFbGVtZW50KEhUTUxFbGVtZQogCiBIVE1MTW9kRWxl
bWVudCAmSFRNTE1vZEVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewot
ICAgIGlmKCBvdGhlci5lbGVtZW50SWQoKSAhPSBJRF9JTlMgJiYKLQlvdGhlci5lbGVtZW50SWQo
KSAhPSBJRF9ERUwgKQotICAgIHsKKyAgICBpZiAoIW90aGVyLmhhbmRsZSgpLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6aW5zKCkpICYmCisgICAgICAgICFvdGhlci5oYW5kbGUoKS0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OmRlbCgpKSkgewogCWlmICggaW1wbCApIGltcGwtPmRlcmVmKCk7CiAJaW1w
bCA9IDA7CiAgICAgfSBlbHNlIHsKQEAgLTM4MSwxOSArMzgwLDE2IEBAIEhUTUxRdW90ZUVsZW1l
bnQ6OkhUTUxRdW90ZUVsZW1lbnQoY29uc3QKIHsKIH0KIAotSFRNTFF1b3RlRWxlbWVudDo6SFRN
TFF1b3RlRWxlbWVudChIVE1MR2VuZXJpY0VsZW1lbnRJbXBsICpfaW1wbCkKK0hUTUxRdW90ZUVs
ZW1lbnQ6OkhUTUxRdW90ZUVsZW1lbnQoSFRNTFF1b3RlRWxlbWVudEltcGwgKl9pbXBsKQogICAg
IDogSFRNTEVsZW1lbnQoKQogewotICAgIGlmIChfaW1wbCAmJiBfaW1wbC0+aWQoKSA9PSBJRF9R
KQotICAgICAgICBpbXBsID0gX2ltcGw7Ci0gICAgZWxzZQotICAgICAgICBpbXBsID0gMDsKKyAg
ICBpbXBsID0gX2ltcGw7CiAgICAgaWYgKCBpbXBsICkgaW1wbC0+cmVmKCk7CiB9CiAKIEhUTUxR
dW90ZUVsZW1lbnQgJkhUTUxRdW90ZUVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90
aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfUSApOworICAgIGFzc2lnbk90aGVy
KCBvdGhlciwgSFRNTE5hbWVzOjpxKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKSW5kZXg6
IGtodG1sL2RvbS9odG1sX2lubGluZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9X
ZWJDb3JlL2todG1sL2RvbS9odG1sX2lubGluZS5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjMK
ZGlmZiAtdSAtcCAtcjEuMyBraHRtbC9kb20vaHRtbF9pbmxpbmUuaAotLS0ga2h0bWwvZG9tL2h0
bWxfaW5saW5lLmgJMTUgQXByIDIwMDIgMjM6NDI6MDEgLTAwMDAJMS4zCisrKyBraHRtbC9kb20v
aHRtbF9pbmxpbmUuaAk4IEp1bCAyMDA1IDAzOjAzOjQ5IC0wMDAwCkBAIC00MjUsNyArNDI1LDcg
QEAgcHVibGljOgogICAgIEhUTUxRdW90ZUVsZW1lbnQoY29uc3QgTm9kZSAmb3RoZXIpIDogSFRN
TEVsZW1lbnQoKQogICAgICAgICAgeygqdGhpcyk9b3RoZXI7fQogcHJvdGVjdGVkOgotICAgIEhU
TUxRdW90ZUVsZW1lbnQoSFRNTEdlbmVyaWNFbGVtZW50SW1wbCAqaW1wbCk7CisgICAgSFRNTFF1
b3RlRWxlbWVudChIVE1MUXVvdGVFbGVtZW50SW1wbCAqaW1wbCk7CiBwdWJsaWM6CiAKICAgICBI
VE1MUXVvdGVFbGVtZW50ICYgb3BlcmF0b3IgPSAoY29uc3QgSFRNTFF1b3RlRWxlbWVudCAmb3Ro
ZXIpOwpJbmRleDoga2h0bWwvZG9tL2h0bWxfbGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
L2N2cy9yb290L1dlYkNvcmUva2h0bWwvZG9tL2h0bWxfbGlzdC5jcHAsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuNApkaWZmIC11IC1wIC1yMS40IGtodG1sL2RvbS9odG1sX2xpc3QuY3BwCi0tLSBr
aHRtbC9kb20vaHRtbF9saXN0LmNwcAkxMCBKdW4gMjAwMiAyMDowNzozNiAtMDAwMAkxLjQKKysr
IGtodG1sL2RvbS9odG1sX2xpc3QuY3BwCTggSnVsIDIwMDUgMDM6MDM6NTAgLTAwMDAKQEAgLTQx
LDcgKzQxLDcgQEAgSFRNTERMaXN0RWxlbWVudDo6SFRNTERMaXN0RWxlbWVudChIVE1MRAogCiBI
VE1MRExpc3RFbGVtZW50ICZIVE1MRExpc3RFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2Rl
ICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0RMICk7CisgICAgYXNzaWdu
T3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OmRsKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAK
QEAgLTg4LDcgKzg4LDcgQEAgSFRNTERpcmVjdG9yeUVsZW1lbnQ6OkhUTUxEaXJlY3RvcnlFbGVt
ZQogCiBIVE1MRGlyZWN0b3J5RWxlbWVudCAmSFRNTERpcmVjdG9yeUVsZW1lbnQ6Om9wZXJhdG9y
ID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfRElS
ICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OmRpcigpICk7CiAgICAgcmV0
dXJuICp0aGlzOwogfQogCkBAIC0xMzUsNyArMTM1LDcgQEAgSFRNTExJRWxlbWVudDo6SFRNTExJ
RWxlbWVudChIVE1MTElFbGVtZQogCiBIVE1MTElFbGVtZW50ICZIVE1MTElFbGVtZW50OjpvcGVy
YXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElE
X0xJICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OmxpKCkgKTsKICAgICBy
ZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTE5MCw3ICsxOTAsNyBAQCBIVE1MTWVudUVsZW1lbnQ6OkhU
TUxNZW51RWxlbWVudChIVE1MTWVuCiAKIEhUTUxNZW51RWxlbWVudCAmSFRNTE1lbnVFbGVtZW50
OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3Ro
ZXIsIElEX01FTlUgKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6bWVudSgp
ICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC0yMzcsNyArMjM3LDcgQEAgSFRNTE9MaXN0
RWxlbWVudDo6SFRNTE9MaXN0RWxlbWVudChIVE1MTwogCiBIVE1MT0xpc3RFbGVtZW50ICZIVE1M
T0xpc3RFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3Np
Z25PdGhlciggb3RoZXIsIElEX09MICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFt
ZXM6Om9sKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTMxMCw3ICszMTAsNyBAQCBI
VE1MVUxpc3RFbGVtZW50OjpIVE1MVUxpc3RFbGVtZW50KEhUTUxVCiAKIEhUTUxVTGlzdEVsZW1l
bnQgJkhUTUxVTGlzdEVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewot
ICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfVUwgKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIs
IEhUTUxOYW1lczo6dWwoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApJbmRleDoga2h0bWwv
ZG9tL2h0bWxfbWlzYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUv
a2h0bWwvZG9tL2h0bWxfbWlzYy5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNwpkaWZmIC11
IC1wIC1yMS43IGtodG1sL2RvbS9odG1sX21pc2MuY3BwCi0tLSBraHRtbC9kb20vaHRtbF9taXNj
LmNwcAkxMSBNYXkgMjAwNSAwMDo1ODoyOCAtMDAwMAkxLjcKKysrIGtodG1sL2RvbS9odG1sX21p
c2MuY3BwCTggSnVsIDIwMDUgMDM6MDM6NTAgLTAwMDAKQEAgLTQxLDcgKzQxLDcgQEAgSFRNTEJh
c2VGb250RWxlbWVudDo6SFRNTEJhc2VGb250RWxlbWVudAogCiBIVE1MQmFzZUZvbnRFbGVtZW50
ICZIVE1MQmFzZUZvbnRFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsK
LSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0JBU0VGT05UICk7CisgICAgYXNzaWduT3RoZXIo
IG90aGVyLCBIVE1MTmFtZXM6OmJhc2Vmb250KCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAK
SW5kZXg6IGtodG1sL2RvbS9odG1sX29iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1dlYkNvcmUva2h0bWwvZG9tL2h0bWxfb2JqZWN0LmNwcCx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS41CmRpZmYgLXUgLXAgLXIxLjUga2h0bWwvZG9tL2h0bWxfb2JqZWN0LmNwcAotLS0g
a2h0bWwvZG9tL2h0bWxfb2JqZWN0LmNwcAkxIE1hciAyMDA0IDE3OjA0OjI0IC0wMDAwCTEuNQor
Kysga2h0bWwvZG9tL2h0bWxfb2JqZWN0LmNwcAk4IEp1bCAyMDA1IDAzOjAzOjUwIC0wMDAwCkBA
IC00Myw3ICs0Myw3IEBAIEhUTUxBcHBsZXRFbGVtZW50OjpIVE1MQXBwbGV0RWxlbWVudChIVE0K
IAogSFRNTEFwcGxldEVsZW1lbnQgJkhUTUxBcHBsZXRFbGVtZW50OjpvcGVyYXRvciA9IChjb25z
dCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0FQUExFVCApOwor
ICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjphcHBsZXQoKSApOwogICAgIHJldHVy
biAqdGhpczsKIH0KIApAQCAtMTk0LDcgKzE5NCw3IEBAIEhUTUxPYmplY3RFbGVtZW50OjpIVE1M
T2JqZWN0RWxlbWVudChIVE0KIAogSFRNTE9iamVjdEVsZW1lbnQgJkhUTUxPYmplY3RFbGVtZW50
OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3Ro
ZXIsIElEX09CSkVDVCApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpvYmpl
Y3QoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtNDMyLDcgKzQzMiw3IEBAIEhUTUxQ
YXJhbUVsZW1lbnQ6OkhUTUxQYXJhbUVsZW1lbnQoSFRNTFAKIAogSFRNTFBhcmFtRWxlbWVudCAm
SFRNTFBhcmFtRWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAg
YXNzaWduT3RoZXIoIG90aGVyLCBJRF9QQVJBTSApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwg
SFRNTE5hbWVzOjpwYXJhbSgpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkluZGV4OiBraHRt
bC9kb20vaHRtbF90YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNv
cmUva2h0bWwvZG9tL2h0bWxfdGFibGUuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjYKZGlm
ZiAtdSAtcCAtcjEuNiBraHRtbC9kb20vaHRtbF90YWJsZS5jcHAKLS0tIGtodG1sL2RvbS9odG1s
X3RhYmxlLmNwcAkzMSBPY3QgMjAwMyAwMDo0NzoxNiAtMDAwMAkxLjYKKysrIGtodG1sL2RvbS9o
dG1sX3RhYmxlLmNwcAk4IEp1bCAyMDA1IDAzOjAzOjUxIC0wMDAwCkBAIC00NSw3ICs0NSw3IEBA
IEhUTUxUYWJsZUNhcHRpb25FbGVtZW50OjpIVE1MVGFibGVDYXB0aW8KIAogSFRNTFRhYmxlQ2Fw
dGlvbkVsZW1lbnQgJkhUTUxUYWJsZUNhcHRpb25FbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBO
b2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0NBUFRJT04gKTsKKyAg
ICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6Y2FwdGlvbigpICk7CiAgICAgcmV0dXJu
ICp0aGlzOwogfQogCkBAIC04Niw5ICs4Niw4IEBAIEhUTUxUYWJsZUNlbGxFbGVtZW50OjpIVE1M
VGFibGVDZWxsRWxlbWUKIAogSFRNTFRhYmxlQ2VsbEVsZW1lbnQgJkhUTUxUYWJsZUNlbGxFbGVt
ZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBpZiggb3RoZXIuZWxl
bWVudElkKCkgIT0gSURfVEQgJiYKLQlvdGhlci5lbGVtZW50SWQoKSAhPSBJRF9USCApCi0gICAg
eworICAgIGlmICghb3RoZXIuaGFuZGxlKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0ZCgpKSB8
fAorICAgICAgICAhb3RoZXIuaGFuZGxlKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0aCgpKSkg
ewogCWlmICggaW1wbCApIGltcGwtPmRlcmVmKCk7CiAJaW1wbCA9IDA7CiAgICAgfSBlbHNlIHsK
QEAgLTI5NSw5ICsyOTQsOCBAQCBIVE1MVGFibGVDb2xFbGVtZW50OjpIVE1MVGFibGVDb2xFbGVt
ZW50CiAKIEhUTUxUYWJsZUNvbEVsZW1lbnQgJkhUTUxUYWJsZUNvbEVsZW1lbnQ6Om9wZXJhdG9y
ID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGlmKCBvdGhlci5lbGVtZW50SWQoKSAhPSBJ
RF9DT0wgJiYKLQlvdGhlci5lbGVtZW50SWQoKSAhPSBJRF9DT0xHUk9VUCApCi0gICAgeworICAg
IGlmICghb3RoZXIuaGFuZGxlKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpjb2woKSkgJiYKKyAg
ICAgICAgIW90aGVyLmhhbmRsZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Y29sZ3JvdXAoKSkp
IHsKIAlpZiAoIGltcGwgKSBpbXBsLT5kZXJlZigpOwogCWltcGwgPSAwOwogICAgIH0gZWxzZSB7
CkBAIC00MDEsNyArMzk5LDcgQEAgSFRNTFRhYmxlRWxlbWVudDo6SFRNTFRhYmxlRWxlbWVudChI
VE1MVAogCiBIVE1MVGFibGVFbGVtZW50ICZIVE1MVGFibGVFbGVtZW50OjpvcGVyYXRvciA9IChj
b25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX1RBQkxFICk7
CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OnRhYmxlKCkgKTsKICAgICByZXR1
cm4gKnRoaXM7CiB9CiAKQEAgLTYzOCw3ICs2MzYsNyBAQCBIVE1MVGFibGVSb3dFbGVtZW50OjpI
VE1MVGFibGVSb3dFbGVtZW50CiAKIEhUTUxUYWJsZVJvd0VsZW1lbnQgJkhUTUxUYWJsZVJvd0Vs
ZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVy
KCBvdGhlciwgSURfVFIgKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6dHIo
KSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtNzc1LDEwICs3NzMsOSBAQCBIVE1MVGFi
bGVTZWN0aW9uRWxlbWVudDo6SFRNTFRhYmxlU2VjdGlvCiAKIEhUTUxUYWJsZVNlY3Rpb25FbGVt
ZW50ICZIVE1MVGFibGVTZWN0aW9uRWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3Ro
ZXIpCiB7Ci0gICAgaWYob3RoZXIuZWxlbWVudElkKCkgIT0gSURfVEJPRFkgJiYKLSAgICAgICBv
dGhlci5lbGVtZW50SWQoKSAhPSBJRF9USEVBRCAmJgotICAgICAgIG90aGVyLmVsZW1lbnRJZCgp
ICE9IElEX1RGT09UICkKLSAgICB7CisgICAgaWYgKCFvdGhlci5oYW5kbGUoKS0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OnRib2R5KCkpICYmCisgICAgICAgICFvdGhlci5oYW5kbGUoKS0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OnRoZWFkKCkpICYmCisgICAgICAgICFvdGhlci5oYW5kbGUoKS0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OnRmb290KCkpKSB7CiAJaWYgKCBpbXBsICkgaW1wbC0+ZGVyZWYo
KTsKIAlpbXBsID0gMDsKICAgICB9IGVsc2UgewpJbmRleDoga2h0bWwvZWNtYS9ranNfY3NzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lY21hL2tqc19j
c3MuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjI3CmRpZmYgLXUgLXAgLXIxLjI3IGtodG1s
L2VjbWEva2pzX2Nzcy5jcHAKLS0tIGtodG1sL2VjbWEva2pzX2Nzcy5jcHAJMyBKdWwgMjAwNSAx
MDo0Nzo1NSAtMDAwMAkxLjI3CisrKyBraHRtbC9lY21hL2tqc19jc3MuY3BwCTggSnVsIDIwMDUg
MDM6MDM6NTIgLTAwMDAKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlICJ4bWwvZG9tX2RvY2lt
cGwuaCIKICNpbmNsdWRlICJodG1sL2h0bWxfaGVhZGltcGwuaCIgLy8gZm9yIEhUTUxTdHlsZUVs
ZW1lbnQKICNpbmNsdWRlICJranNfZG9tLmgiCi0jaW5jbHVkZSAibWlzYy9odG1sdGFncy5oIgor
I2luY2x1ZGUgImh0bWxuYW1lcy5oIgogCiAjaW5jbHVkZSA8a2RlYnVnLmg+CiAKQEAgLTU1LDYg
KzU1LDcgQEAgdXNpbmcgRE9NOjpDb3VudGVySW1wbDsKIHVzaW5nIERPTTo6RG9jdW1lbnRJbXBs
OwogdXNpbmcgRE9NOjpET01TdHJpbmc7CiB1c2luZyBET006OkVsZW1lbnRJbXBsOwordXNpbmcg
RE9NOjpIVE1MTmFtZXM7CiB1c2luZyBET006OkhUTUxTdHlsZUVsZW1lbnRJbXBsOwogdXNpbmcg
RE9NOjpNZWRpYUxpc3RJbXBsOwogdXNpbmcgRE9NOjpSZWN0SW1wbDsKQEAgLTQwNCw3ICs0MDUs
NyBAQCBWYWx1ZSBET01TdHlsZVNoZWV0TGlzdDo6dHJ5R2V0KEV4ZWNTdGF0CiAgIC8vIGFuZCBk
b2Vzbid0IGxvb2sgZm9yIG5hbWUgYXR0cmlidXRlIChzZWUgaW1wbGVtZW50YXRpb24gYWJvdmUp
LgogICAvLyBCdXQgdW5pY2l0eSBvZiBzdHlsZXNoZWV0IGlkcyBpcyBnb29kIHByYWN0aWNlIGFu
eXdheSA7KQogICBFbGVtZW50SW1wbCAqZWxlbWVudCA9IG1fZG9jLT5nZXRFbGVtZW50QnlJZChw
LnN0cmluZygpKTsKLSAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC0+aWQoKSA9PSBJRF9TVFlMRSkK
KyAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnN0eWxlKCkp
KQogICAgIHJldHVybiBnZXRET01TdHlsZVNoZWV0KGV4ZWMsIHN0YXRpY19jYXN0PEhUTUxTdHls
ZUVsZW1lbnRJbXBsICo+KGVsZW1lbnQpLT5zaGVldCgpKTsKIAogICByZXR1cm4gRE9NT2JqZWN0
Ojp0cnlHZXQoZXhlYywgcCk7CkluZGV4OiBraHRtbC9lY21hL2tqc19kb20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VjbWEva2pzX2RvbS5jcHAsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuNzcKZGlmZiAtdSAtcCAtcjEuNzcga2h0bWwvZWNtYS9ranNf
ZG9tLmNwcAotLS0ga2h0bWwvZWNtYS9ranNfZG9tLmNwcAkzIEp1bCAyMDA1IDEwOjQ3OjU1IC0w
MDAwCTEuNzcKKysrIGtodG1sL2VjbWEva2pzX2RvbS5jcHAJOCBKdWwgMjAwNSAwMzowMzo1MyAt
MDAwMApAQCAtNDcsOCArNDcsNiBAQAogCiAjaW5jbHVkZSAiaHRtbF9vYmplY3RpbXBsLmgiCiAK
LSNpbmNsdWRlICJtaXNjL2h0bWx0YWdzLmgiCi0KICNpZiBBUFBMRV9DSEFOR0VTCiAjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvcnVudGltZV9vYmplY3QuaD4KICNlbmRpZgpAQCAtNjcsNiArNjUs
NyBAQCB1c2luZyBET006OkhUTUxBcHBsZXRFbGVtZW50SW1wbDsKIHVzaW5nIERPTTo6SFRNTERv
Y3VtZW50SW1wbDsKIHVzaW5nIERPTTo6SFRNTEVsZW1lbnRJbXBsOwogdXNpbmcgRE9NOjpIVE1M
RW1iZWRFbGVtZW50SW1wbDsKK3VzaW5nIERPTTo6SFRNTE5hbWVzOwogdXNpbmcgRE9NOjpIVE1M
T2JqZWN0RWxlbWVudEltcGw7CiB1c2luZyBET006Ok5hbWVkTm9kZU1hcEltcGw7CiB1c2luZyBE
T006Ok5vZGU7CkBAIC00NjIsNyArNDYxLDcgQEAgdm9pZCBET01Ob2RlOjpwdXRWYWx1ZShFeGVj
U3RhdGUgKmV4ZWMsIAogICAgIG5vZGUuc2V0Tm9kZVZhbHVlKHZhbHVlLnRvU3RyaW5nKGV4ZWMp
LnN0cmluZygpLCBleGNlcHRpb24pOwogICAgIGJyZWFrOwogICBjYXNlIFByZWZpeDoKLSAgICBu
b2RlLnNldFByZWZpeCh2YWx1ZS50b1N0cmluZyhleGVjKS5zdHJpbmcoKSwgZXhjZXB0aW9uKTsK
KyAgICBub2RlLnNldFByZWZpeCh2YWx1ZS50b1N0cmluZyhleGVjKS5zdHJpbmcoKS5pbXBsZW1l
bnRhdGlvbigpLCBleGNlcHRpb24pOwogICAgIGJyZWFrOwogICBjYXNlIE9uQWJvcnQ6CiAgICAg
c2V0TGlzdGVuZXIoZXhlYyxET006OkV2ZW50SW1wbDo6QUJPUlRfRVZFTlQsdmFsdWUpOwpAQCAt
MTE4Nyw3ICsxMTg2LDcgQEAgVmFsdWUgRE9NRWxlbWVudDo6dHJ5R2V0KEV4ZWNTdGF0ZSAqZXhl
YwogICB7CiAgICAgc3dpdGNoKCBlbnRyeS0+dmFsdWUgKSB7CiAgICAgY2FzZSBUYWdOYW1lOgot
ICAgICAgcmV0dXJuIGdldFN0cmluZ09yTnVsbChlbGVtZW50LnRhZ05hbWUoKSk7CisgICAgICBy
ZXR1cm4gZ2V0U3RyaW5nT3JOdWxsKGVsZW1lbnQubm9kZU5hbWUoKSk7CiAgICAgY2FzZSBTdHls
ZToKICAgICAgIHJldHVybiBnZXRET01DU1NTdHlsZURlY2xhcmF0aW9uKGV4ZWMsZWxlbWVudC5z
dHlsZSgpKTsKICAgICBkZWZhdWx0OgpAQCAtMTcxMCwyNiArMTcwOSwyMSBAQCBWYWx1ZUltcCAq
Z2V0UnVudGltZU9iamVjdChFeGVjU3RhdGUgKmV4CiAgICAgaWYgKCFuKQogICAgICAgICByZXR1
cm4gMDsKIAotICAgIHN3aXRjaCAobi0+aWQoKSkgewotICAgICAgICBjYXNlIElEX0FQUExFVDog
ewotICAgICAgICAgICAgSFRNTEFwcGxldEVsZW1lbnRJbXBsICphcHBsZXRFbGVtZW50ID0gc3Rh
dGljX2Nhc3Q8SFRNTEFwcGxldEVsZW1lbnRJbXBsICo+KG4pOwotICAgICAgICAgICAgaWYgKGFw
cGxldEVsZW1lbnQtPmdldEFwcGxldEluc3RhbmNlKCkpCi0gICAgICAgICAgICAgICAgLy8gVGhl
IGluc3RhbmNlIGlzIG93bmVkIGJ5IHRoZSBhcHBsZXQgZWxlbWVudC4KLSAgICAgICAgICAgICAg
ICByZXR1cm4gbmV3IFJ1bnRpbWVPYmplY3RJbXAoYXBwbGV0RWxlbWVudC0+Z2V0QXBwbGV0SW5z
dGFuY2UoKSwgZmFsc2UpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
Y2FzZSBJRF9FTUJFRDogewotICAgICAgICAgICAgSFRNTEVtYmVkRWxlbWVudEltcGwgKmVtYmVk
RWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxFbWJlZEVsZW1lbnRJbXBsICo+KG4pOwotICAgICAg
ICAgICAgaWYgKGVtYmVkRWxlbWVudC0+Z2V0RW1iZWRJbnN0YW5jZSgpKQotICAgICAgICAgICAg
ICAgIHJldHVybiBuZXcgUnVudGltZU9iamVjdEltcChlbWJlZEVsZW1lbnQtPmdldEVtYmVkSW5z
dGFuY2UoKSwgZmFsc2UpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
Y2FzZSBJRF9PQkpFQ1Q6IHsKLSAgICAgICAgICAgIEhUTUxPYmplY3RFbGVtZW50SW1wbCAqb2Jq
ZWN0RWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxPYmplY3RFbGVtZW50SW1wbCAqPihuKTsKLSAg
ICAgICAgICAgIGlmIChvYmplY3RFbGVtZW50LT5nZXRPYmplY3RJbnN0YW5jZSgpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBuZXcgUnVudGltZU9iamVjdEltcChvYmplY3RFbGVtZW50LT5nZXRP
YmplY3RJbnN0YW5jZSgpLCBmYWxzZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQor
ICAgIGlmIChuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YXBwbGV0KCkpKSB7CisgICAgICAgIEhU
TUxBcHBsZXRFbGVtZW50SW1wbCAqYXBwbGV0RWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxBcHBs
ZXRFbGVtZW50SW1wbCAqPihuKTsKKyAgICAgICAgaWYgKGFwcGxldEVsZW1lbnQtPmdldEFwcGxl
dEluc3RhbmNlKCkpCisgICAgICAgICAgICAvLyBUaGUgaW5zdGFuY2UgaXMgb3duZWQgYnkgdGhl
IGFwcGxldCBlbGVtZW50LgorICAgICAgICAgICAgcmV0dXJuIG5ldyBSdW50aW1lT2JqZWN0SW1w
KGFwcGxldEVsZW1lbnQtPmdldEFwcGxldEluc3RhbmNlKCksIGZhbHNlKTsKKyAgICB9CisgICAg
ZWxzZSBpZiAobi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmVtYmVkKCkpKSB7CisgICAgICAgIEhU
TUxFbWJlZEVsZW1lbnRJbXBsICplbWJlZEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRW1iZWRF
bGVtZW50SW1wbCAqPihuKTsKKyAgICAgICAgaWYgKGVtYmVkRWxlbWVudC0+Z2V0RW1iZWRJbnN0
YW5jZSgpKQorICAgICAgICAgICAgcmV0dXJuIG5ldyBSdW50aW1lT2JqZWN0SW1wKGVtYmVkRWxl
bWVudC0+Z2V0RW1iZWRJbnN0YW5jZSgpLCBmYWxzZSk7CisgICAgfQorICAgIGVsc2UgaWYgKG4t
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvYmplY3QoKSkpIHsKKyAgICAgICAgSFRNTE9iamVjdEVs
ZW1lbnRJbXBsICpvYmplY3RFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTE9iamVjdEVsZW1lbnRJ
bXBsICo+KG4pOworICAgICAgICBpZiAob2JqZWN0RWxlbWVudC0+Z2V0T2JqZWN0SW5zdGFuY2Uo
KSkKKyAgICAgICAgICAgIHJldHVybiBuZXcgUnVudGltZU9iamVjdEltcChvYmplY3RFbGVtZW50
LT5nZXRPYmplY3RJbnN0YW5jZSgpLCBmYWxzZSk7CiAgICAgfQogICAgIAogICAgIC8vIElmIHdl
IGRvbid0IGhhdmUgYSBydW50aW1lIG9iamVjdCByZXR1cm4gMC4KSW5kZXg6IGtodG1sL2VjbWEv
a2pzX2h0bWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1s
L2VjbWEva2pzX2h0bWwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEyMQpkaWZmIC11IC1w
IC1yMS4xMjEga2h0bWwvZWNtYS9ranNfaHRtbC5jcHAKLS0tIGtodG1sL2VjbWEva2pzX2h0bWwu
Y3BwCTMgSnVsIDIwMDUgMTA6NDc6NTYgLTAwMDAJMS4xMjEKKysrIGtodG1sL2VjbWEva2pzX2h0
bWwuY3BwCTggSnVsIDIwMDUgMDM6MDM6NTkgLTAwMDAKQEAgLTQ2LDggKzQ2LDYgQEAKICNpbmNs
dWRlICJranNfZXZlbnRzLmgiCiAjaW5jbHVkZSAia2pzX3Byb3h5LmgiCiAKLSNpbmNsdWRlICJt
aXNjL2h0bWx0YWdzLmgiCi0KICNpbmNsdWRlICJyZW5kZXJpbmcvcmVuZGVyX2NhbnZhc2ltYWdl
LmgiCiAjaW5jbHVkZSAicmVuZGVyaW5nL3JlbmRlcl9vYmplY3QuaCIKICNpbmNsdWRlICJyZW5k
ZXJpbmcvcmVuZGVyX2xheWVyLmgiCkBAIC0xMDksNiArMTA3LDcgQEAgdXNpbmcgRE9NOjpIVE1M
TWFwRWxlbWVudEltcGw7CiB1c2luZyBET006OkhUTUxNZW51RWxlbWVudEltcGw7CiB1c2luZyBE
T006OkhUTUxNZXRhRWxlbWVudEltcGw7CiB1c2luZyBET006OkhUTUxNb2RFbGVtZW50SW1wbDsK
K3VzaW5nIERPTTo6SFRNTE5hbWVzOwogdXNpbmcgRE9NOjpIVE1MT0xpc3RFbGVtZW50SW1wbDsK
IHVzaW5nIERPTTo6SFRNTE9iamVjdEVsZW1lbnRJbXBsOwogdXNpbmcgRE9NOjpIVE1MT3B0R3Jv
dXBFbGVtZW50SW1wbDsKQEAgLTM1Myw3ICszNTIsNyBAQCBWYWx1ZSBIVE1MRG9jdW1lbnQ6OnRy
eUdldChFeGVjU3RhdGUgKmV4CiAgIGlmICh2YWwpCiAgICAgcmV0dXJuIFZhbHVlKHZhbCk7CiAK
LSAgSFRNTEJvZHlFbGVtZW50SW1wbCAqYm9keUVsZW1lbnQgPSAoYm9keSAmJiBib2R5LT5pZCgp
ID09IElEX0JPRFkpID8gc3RhdGljX2Nhc3Q8SFRNTEJvZHlFbGVtZW50SW1wbCAqPihib2R5KSA6
IDA7CisgIEhUTUxCb2R5RWxlbWVudEltcGwgKmJvZHlFbGVtZW50ID0gKGJvZHkgJiYgYm9keS0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJvZHkoKSkpID8gc3RhdGljX2Nhc3Q8SFRNTEJvZHlFbGVt
ZW50SW1wbCAqPihib2R5KSA6IDA7CiAKICAgaWYgKGVudHJ5KSB7CiAgICAgc3dpdGNoIChlbnRy
eS0+dmFsdWUpIHsKQEAgLTQyOSw3ICs0MjgsNyBAQCB2b2lkIEtKUzo6SFRNTERvY3VtZW50Ojpw
dXRWYWx1ZShFeGVjU3RhCiAgIERPTUV4Y2VwdGlvblRyYW5zbGF0b3IgZXhjZXB0aW9uKGV4ZWMp
OwogICBIVE1MRG9jdW1lbnRJbXBsICZkb2MgPSAqc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50SW1w
bCAqPihpbXBsKCkpOwogICBIVE1MRWxlbWVudEltcGwgKmJvZHkgPSBkb2MuYm9keSgpOwotICBI
VE1MQm9keUVsZW1lbnRJbXBsICpib2R5RWxlbWVudCA9IChib2R5ICYmIGJvZHktPmlkKCkgPT0g
SURfQk9EWSkgPyBzdGF0aWNfY2FzdDxIVE1MQm9keUVsZW1lbnRJbXBsICo+KGJvZHkpIDogMDsK
KyAgSFRNTEJvZHlFbGVtZW50SW1wbCAqYm9keUVsZW1lbnQgPSAoYm9keSAmJiBib2R5LT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6Ym9keSgpKSkgPyBzdGF0aWNfY2FzdDxIVE1MQm9keUVsZW1lbnRJ
bXBsICo+KGJvZHkpIDogMDsKIAogICBzd2l0Y2ggKHRva2VuKSB7CiAgIGNhc2UgVGl0bGU6CkBA
IC01ODMsMTMzICs1ODIsMjE4IEBAIGNvbnN0IENsYXNzSW5mbyBLSlM6OkhUTUxFbGVtZW50Ojpt
YXJxdWUKIAogY29uc3QgQ2xhc3NJbmZvKiBLSlM6OkhUTUxFbGVtZW50OjpjbGFzc0luZm8oKSBj
b25zdAogewotICBzd2l0Y2ggKGltcGwoKS0+aWQoKSkgewotICBjYXNlIElEX0hUTUw6Ci0gICAg
cmV0dXJuICZodG1sX2luZm87Ci0gIGNhc2UgSURfSEVBRDoKLSAgICByZXR1cm4gJmhlYWRfaW5m
bzsKLSAgY2FzZSBJRF9MSU5LOgotICAgIHJldHVybiAmbGlua19pbmZvOwotICBjYXNlIElEX1RJ
VExFOgotICAgIHJldHVybiAmdGl0bGVfaW5mbzsKLSAgY2FzZSBJRF9NRVRBOgotICAgIHJldHVy
biAmbWV0YV9pbmZvOwotICBjYXNlIElEX0JBU0U6Ci0gICAgcmV0dXJuICZiYXNlX2luZm87Ci0g
IGNhc2UgSURfSVNJTkRFWDoKLSAgICByZXR1cm4gJmlzSW5kZXhfaW5mbzsKLSAgY2FzZSBJRF9T
VFlMRToKLSAgICByZXR1cm4gJnN0eWxlX2luZm87Ci0gIGNhc2UgSURfQk9EWToKLSAgICByZXR1
cm4gJmJvZHlfaW5mbzsKLSAgY2FzZSBJRF9GT1JNOgotICAgIHJldHVybiAmZm9ybV9pbmZvOwot
ICBjYXNlIElEX1NFTEVDVDoKLSAgICByZXR1cm4gJnNlbGVjdF9pbmZvOwotICBjYXNlIElEX09Q
VEdST1VQOgotICAgIHJldHVybiAmb3B0R3JvdXBfaW5mbzsKLSAgY2FzZSBJRF9PUFRJT046Ci0g
ICAgcmV0dXJuICZvcHRpb25faW5mbzsKLSAgY2FzZSBJRF9JTlBVVDoKLSAgICByZXR1cm4gJmlu
cHV0X2luZm87Ci0gIGNhc2UgSURfVEVYVEFSRUE6Ci0gICAgcmV0dXJuICZ0ZXh0QXJlYV9pbmZv
OwotICBjYXNlIElEX0JVVFRPTjoKLSAgICByZXR1cm4gJmJ1dHRvbl9pbmZvOwotICBjYXNlIElE
X0xBQkVMOgotICAgIHJldHVybiAmbGFiZWxfaW5mbzsKLSAgY2FzZSBJRF9GSUVMRFNFVDoKLSAg
ICByZXR1cm4gJmZpZWxkU2V0X2luZm87Ci0gIGNhc2UgSURfTEVHRU5EOgotICAgIHJldHVybiAm
bGVnZW5kX2luZm87Ci0gIGNhc2UgSURfVUw6Ci0gICAgcmV0dXJuICZ1bF9pbmZvOwotICBjYXNl
IElEX09MOgotICAgIHJldHVybiAmb2xfaW5mbzsKLSAgY2FzZSBJRF9ETDoKLSAgICByZXR1cm4g
JmRsX2luZm87Ci0gIGNhc2UgSURfRElSOgotICAgIHJldHVybiAmZGlyX2luZm87Ci0gIGNhc2Ug
SURfTUVOVToKLSAgICByZXR1cm4gJm1lbnVfaW5mbzsKLSAgY2FzZSBJRF9MSToKLSAgICByZXR1
cm4gJmxpX2luZm87Ci0gIGNhc2UgSURfRElWOgotICAgIHJldHVybiAmZGl2X2luZm87Ci0gIGNh
c2UgSURfUDoKLSAgICByZXR1cm4gJnBfaW5mbzsKLSAgY2FzZSBJRF9IMToKLSAgY2FzZSBJRF9I
MjoKLSAgY2FzZSBJRF9IMzoKLSAgY2FzZSBJRF9INDoKLSAgY2FzZSBJRF9INToKLSAgY2FzZSBJ
RF9INjoKLSAgICByZXR1cm4gJmhlYWRpbmdfaW5mbzsKLSAgY2FzZSBJRF9CTE9DS1FVT1RFOgot
ICAgIHJldHVybiAmYmxvY2tRdW90ZV9pbmZvOwotICBjYXNlIElEX1E6Ci0gICAgcmV0dXJuICZx
X2luZm87Ci0gIGNhc2UgSURfUFJFOgotICAgIHJldHVybiAmcHJlX2luZm87Ci0gIGNhc2UgSURf
QlI6Ci0gICAgcmV0dXJuICZicl9pbmZvOwotICBjYXNlIElEX0JBU0VGT05UOgotICAgIHJldHVy
biAmYmFzZUZvbnRfaW5mbzsKLSAgY2FzZSBJRF9GT05UOgotICAgIHJldHVybiAmZm9udF9pbmZv
OwotICBjYXNlIElEX0hSOgotICAgIHJldHVybiAmaHJfaW5mbzsKLSAgY2FzZSBJRF9JTlM6Ci0g
IGNhc2UgSURfREVMOgotICAgIHJldHVybiAmbW9kX2luZm87Ci0gIGNhc2UgSURfQToKLSAgICBy
ZXR1cm4gJmFfaW5mbzsKLSAgY2FzZSBJRF9DQU5WQVM6Ci0gICAgcmV0dXJuICZjYW52YXNfaW5m
bzsKLSAgY2FzZSBJRF9JTUc6Ci0gICAgcmV0dXJuICZpbWdfaW5mbzsKLSAgY2FzZSBJRF9PQkpF
Q1Q6Ci0gICAgcmV0dXJuICZvYmplY3RfaW5mbzsKLSAgY2FzZSBJRF9QQVJBTToKLSAgICByZXR1
cm4gJnBhcmFtX2luZm87Ci0gIGNhc2UgSURfQVBQTEVUOgotICAgIHJldHVybiAmYXBwbGV0X2lu
Zm87Ci0gIGNhc2UgSURfTUFQOgotICAgIHJldHVybiAmbWFwX2luZm87Ci0gIGNhc2UgSURfQVJF
QToKLSAgICByZXR1cm4gJmFyZWFfaW5mbzsKLSAgY2FzZSBJRF9TQ1JJUFQ6Ci0gICAgcmV0dXJu
ICZzY3JpcHRfaW5mbzsKLSAgY2FzZSBJRF9UQUJMRToKLSAgICByZXR1cm4gJnRhYmxlX2luZm87
Ci0gIGNhc2UgSURfQ0FQVElPTjoKLSAgICByZXR1cm4gJmNhcHRpb25faW5mbzsKLSAgY2FzZSBJ
RF9DT0w6Ci0gICAgcmV0dXJuICZjb2xfaW5mbzsKLSAgY2FzZSBJRF9USEVBRDoKLSAgICByZXR1
cm4gJnRhYmxlc2VjdGlvbl9pbmZvOwotICBjYXNlIElEX1RCT0RZOgotICAgIHJldHVybiAmdGFi
bGVzZWN0aW9uX2luZm87Ci0gIGNhc2UgSURfVEZPT1Q6Ci0gICAgcmV0dXJuICZ0YWJsZXNlY3Rp
b25faW5mbzsKLSAgY2FzZSBJRF9UUjoKLSAgICByZXR1cm4gJnRyX2luZm87Ci0gIGNhc2UgSURf
VEg6Ci0gICAgcmV0dXJuICZ0YWJsZWNlbGxfaW5mbzsKLSAgY2FzZSBJRF9URDoKLSAgICByZXR1
cm4gJnRhYmxlY2VsbF9pbmZvOwotICBjYXNlIElEX0ZSQU1FU0VUOgotICAgIHJldHVybiAmZnJh
bWVTZXRfaW5mbzsKLSAgY2FzZSBJRF9GUkFNRToKLSAgICByZXR1cm4gJmZyYW1lX2luZm87Ci0g
IGNhc2UgSURfSUZSQU1FOgotICAgIHJldHVybiAmaUZyYW1lX2luZm87Ci0gIGNhc2UgSURfTUFS
UVVFRToKLSAgICByZXR1cm4gJm1hcnF1ZWVfaW5mbzsKLSAgZGVmYXVsdDoKKyAgICAvLyBXZSBh
bHJlYWR5IGtub3cgd2UgaGF2ZSBhbiBIVE1MIGVsZW1lbnQsIHNvIHdlIG9ubHkgbmVlZCB0byBj
b21wYXJlIHRoZSBsb2NhbE5hbWUgY29tcG9uZW50IG9mIHRoZSBxdWFsaWZpZWQgbmFtZS4KKyAg
ICBzdGF0aWMgUVB0ckRpY3Q8Y29uc3QgQ2xhc3NJbmZvPiBjbGFzc0luZm9EaWN0OworICAgIGlm
IChjbGFzc0luZm9EaWN0LmlzRW1wdHkoKSkgeworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2Vy
dChIVE1MTmFtZXM6OmEoKS5sb2NhbE5hbWVQdHIoKSwgJmFfaW5mbyk7CisgICAgICAgIGNsYXNz
SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6YXBwbGV0KCkubG9jYWxOYW1lUHRyKCksICZhcHBs
ZXRfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6YXJlYSgp
LmxvY2FsTmFtZVB0cigpLCAmYXJlYV9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNl
cnQoSFRNTE5hbWVzOjpiYXNlKCkubG9jYWxOYW1lUHRyKCksICZiYXNlX2luZm8pOworICAgICAg
ICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmJhc2Vmb250KCkubG9jYWxOYW1lUHRy
KCksICZiYXNlRm9udF9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5h
bWVzOjpibG9ja3F1b3RlKCkubG9jYWxOYW1lUHRyKCksICZibG9ja1F1b3RlX2luZm8pOworICAg
ICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmJvZHkoKS5sb2NhbE5hbWVQdHIo
KSwgJmJvZHlfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6
YnIoKS5sb2NhbE5hbWVQdHIoKSwgJmJyX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmlu
c2VydChIVE1MTmFtZXM6OmJ1dHRvbigpLmxvY2FsTmFtZVB0cigpLCAmYnV0dG9uX2luZm8pOwor
ICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmNhbnZhcygpLmxvY2FsTmFt
ZVB0cigpLCAmY2FudmFzX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1M
TmFtZXM6OmNhcHRpb24oKS5sb2NhbE5hbWVQdHIoKSwgJmNhcHRpb25faW5mbyk7CisgICAgICAg
IGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6Y29sKCkubG9jYWxOYW1lUHRyKCksICZj
b2xfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6Y29sZ3Jv
dXAoKS5sb2NhbE5hbWVQdHIoKSwgJmNvbF9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5p
bnNlcnQoSFRNTE5hbWVzOjpkZWwoKS5sb2NhbE5hbWVQdHIoKSwgJm1vZF9pbmZvKTsKKyAgICAg
ICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpkaXIoKS5sb2NhbE5hbWVQdHIoKSwg
JmRpcl9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpkaXYo
KS5sb2NhbE5hbWVQdHIoKSwgJmRpdl9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNl
cnQoSFRNTE5hbWVzOjpkbCgpLmxvY2FsTmFtZVB0cigpLCAmZGxfaW5mbyk7CisgICAgICAgIGNs
YXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6ZmllbGRzZXQoKS5sb2NhbE5hbWVQdHIoKSwg
JmZpZWxkU2V0X2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6
OmZvbnQoKS5sb2NhbE5hbWVQdHIoKSwgJmZvbnRfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0Rp
Y3QuaW5zZXJ0KEhUTUxOYW1lczo6Zm9ybSgpLmxvY2FsTmFtZVB0cigpLCAmZm9ybV9pbmZvKTsK
KyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpmcmFtZSgpLmxvY2FsTmFt
ZVB0cigpLCAmZnJhbWVfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxO
YW1lczo6ZnJhbWVzZXQoKS5sb2NhbE5hbWVQdHIoKSwgJmZyYW1lU2V0X2luZm8pOworICAgICAg
ICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmgxKCkubG9jYWxOYW1lUHRyKCksICZo
ZWFkaW5nX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Omgy
KCkubG9jYWxOYW1lUHRyKCksICZoZWFkaW5nX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0
Lmluc2VydChIVE1MTmFtZXM6OmgzKCkubG9jYWxOYW1lUHRyKCksICZoZWFkaW5nX2luZm8pOwor
ICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Omg0KCkubG9jYWxOYW1lUHRy
KCksICZoZWFkaW5nX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFt
ZXM6Omg1KCkubG9jYWxOYW1lUHRyKCksICZoZWFkaW5nX2luZm8pOworICAgICAgICBjbGFzc0lu
Zm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Omg2KCkubG9jYWxOYW1lUHRyKCksICZoZWFkaW5nX2lu
Zm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmhlYWQoKS5sb2Nh
bE5hbWVQdHIoKSwgJmhlYWRfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhU
TUxOYW1lczo6aHIoKS5sb2NhbE5hbWVQdHIoKSwgJmhyX2luZm8pOworICAgICAgICBjbGFzc0lu
Zm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Omh0bWwoKS5sb2NhbE5hbWVQdHIoKSwgJmh0bWxfaW5m
byk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6aWZyYW1lKCkubG9j
YWxOYW1lUHRyKCksICZpRnJhbWVfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0
KEhUTUxOYW1lczo6aW1nKCkubG9jYWxOYW1lUHRyKCksICZpbWdfaW5mbyk7CisgICAgICAgIGNs
YXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6aW5wdXQoKS5sb2NhbE5hbWVQdHIoKSwgJmlu
cHV0X2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Omlucygp
LmxvY2FsTmFtZVB0cigpLCAmbW9kX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2Vy
dChIVE1MTmFtZXM6OmlzaW5kZXgoKS5sb2NhbE5hbWVQdHIoKSwgJmlzSW5kZXhfaW5mbyk7Cisg
ICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6bGFiZWwoKS5sb2NhbE5hbWVQ
dHIoKSwgJmxhYmVsX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFt
ZXM6OmxlZ2VuZCgpLmxvY2FsTmFtZVB0cigpLCAmbGVnZW5kX2luZm8pOworICAgICAgICBjbGFz
c0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmxpKCkubG9jYWxOYW1lUHRyKCksICZsaV9pbmZv
KTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpsaW5rKCkubG9jYWxO
YW1lUHRyKCksICZsaW5rX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1M
TmFtZXM6Om1hcCgpLmxvY2FsTmFtZVB0cigpLCAmbWFwX2luZm8pOworICAgICAgICBjbGFzc0lu
Zm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Om1hcnF1ZWUoKS5sb2NhbE5hbWVQdHIoKSwgJm1hcnF1
ZWVfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6bWVudSgp
LmxvY2FsTmFtZVB0cigpLCAmbWVudV9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNl
cnQoSFRNTE5hbWVzOjptZXRhKCkubG9jYWxOYW1lUHRyKCksICZtZXRhX2luZm8pOworICAgICAg
ICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Om9iamVjdCgpLmxvY2FsTmFtZVB0cigp
LCAmb2JqZWN0X2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6
Om9sKCkubG9jYWxOYW1lUHRyKCksICZvbF9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5p
bnNlcnQoSFRNTE5hbWVzOjpvcHRpb24oKS5sb2NhbE5hbWVQdHIoKSwgJm9wdGlvbl9pbmZvKTsK
KyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpvcHRncm91cCgpLmxvY2Fs
TmFtZVB0cigpLCAmb3B0R3JvdXBfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0
KEhUTUxOYW1lczo6cCgpLmxvY2FsTmFtZVB0cigpLCAmcF9pbmZvKTsKKyAgICAgICAgY2xhc3NJ
bmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpwYXJhbSgpLmxvY2FsTmFtZVB0cigpLCAmcGFyYW1f
aW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6cHJlKCkubG9j
YWxOYW1lUHRyKCksICZwcmVfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhU
TUxOYW1lczo6cSgpLmxvY2FsTmFtZVB0cigpLCAmcV9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZv
RGljdC5pbnNlcnQoSFRNTE5hbWVzOjpzY3JpcHQoKS5sb2NhbE5hbWVQdHIoKSwgJnNjcmlwdF9p
bmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpzZWxlY3QoKS5s
b2NhbE5hbWVQdHIoKSwgJnNlbGVjdF9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNl
cnQoSFRNTE5hbWVzOjpzdHlsZSgpLmxvY2FsTmFtZVB0cigpLCAmc3R5bGVfaW5mbyk7CisgICAg
ICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6dGFibGUoKS5sb2NhbE5hbWVQdHIo
KSwgJnRhYmxlX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6
OnRib2R5KCkubG9jYWxOYW1lUHRyKCksICZ0YWJsZXNlY3Rpb25faW5mbyk7CisgICAgICAgIGNs
YXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6dGQoKS5sb2NhbE5hbWVQdHIoKSwgJnRhYmxl
Y2VsbF9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjp0ZXh0
YXJlYSgpLmxvY2FsTmFtZVB0cigpLCAmdGV4dEFyZWFfaW5mbyk7CisgICAgICAgIGNsYXNzSW5m
b0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6dGgoKS5sb2NhbE5hbWVQdHIoKSwgJnRhYmxlY2VsbF9p
bmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjp0aGVhZCgpLmxv
Y2FsTmFtZVB0cigpLCAmdGFibGVzZWN0aW9uX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0
Lmluc2VydChIVE1MTmFtZXM6OnRmb290KCkubG9jYWxOYW1lUHRyKCksICZ0YWJsZXNlY3Rpb25f
aW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6dGl0bGUoKS5s
b2NhbE5hbWVQdHIoKSwgJnRpdGxlX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2Vy
dChIVE1MTmFtZXM6OnRyKCkubG9jYWxOYW1lUHRyKCksICZ0cl9pbmZvKTsKKyAgICAgICAgY2xh
c3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjp1bCgpLmxvY2FsTmFtZVB0cigpLCAmdWxfaW5m
byk7CisgICAgfQorICAgIAorICAgIEhUTUxFbGVtZW50SW1wbCogZWxlbWVudCA9IHN0YXRpY19j
YXN0PEhUTUxFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgY29uc3QgQ2xhc3NJbmZvKiByZXN1
bHQgPSBjbGFzc0luZm9EaWN0LmZpbmQoZWxlbWVudC0+bG9jYWxOYW1lKCkuaW1wbGVtZW50YXRp
b24oKSk7CisgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICByZXR1
cm4gJmluZm87Ci0gIH0KIH0KKworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVs
ZW1lbnQ6Omh0bWxfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6Omh0bWxHZXR0ZXIsICZIVE1MRWxl
bWVudDo6aHRtbFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVs
ZW1lbnQ6OmhlYWRfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmhlYWRHZXR0ZXIsICZIVE1MRWxl
bWVudDo6aGVhZFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVs
ZW1lbnQ6OmxpbmtfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmxpbmtHZXR0ZXIsICZIVE1MRWxl
bWVudDo6bGlua1NldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVs
ZW1lbnQ6OnRpdGxlX2dldHNldCA9IHsgJkhUTUxFbGVtZW50Ojp0aXRsZUdldHRlciwgJkhUTUxF
bGVtZW50Ojp0aXRsZVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRN
TEVsZW1lbnQ6Om1ldGFfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6Om1ldGFHZXR0ZXIsICZIVE1M
RWxlbWVudDo6bWV0YVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRN
TEVsZW1lbnQ6OmJhc2VfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmJhc2VHZXR0ZXIsICZIVE1M
RWxlbWVudDo6YmFzZVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRN
TEVsZW1lbnQ6OmlzSW5kZXhfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmlzSW5kZXhHZXR0ZXIs
ICZIVE1MRWxlbWVudDo6aXNJbmRleFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNl
dEluZm8gSFRNTEVsZW1lbnQ6OnN0eWxlX2dldHNldCA9IHsgJkhUTUxFbGVtZW50OjpzdHlsZUdl
dHRlciwgJkhUTUxFbGVtZW50OjpzdHlsZVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6Okdl
dFNldEluZm8gSFRNTEVsZW1lbnQ6OmJvZHlfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmJvZHlH
ZXR0ZXIsICZIVE1MRWxlbWVudDo6Ym9keVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6Okdl
dFNldEluZm8gSFRNTEVsZW1lbnQ6OmZvcm1fZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmZvcm1H
ZXR0ZXIsICZIVE1MRWxlbWVudDo6Zm9ybVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6Okdl
dFNldEluZm8gSFRNTEVsZW1lbnQ6OnNlbGVjdF9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6c2Vs
ZWN0R2V0dGVyLCAmSFRNTEVsZW1lbnQ6OnNlbGVjdFNldHRlciB9OworY29uc3QgSFRNTEVsZW1l
bnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6Om9wdEdyb3VwX2dldHNldCA9IHsgJkhUTUxFbGVt
ZW50OjpvcHRHcm91cEdldHRlciwgJkhUTUxFbGVtZW50OjpvcHRHcm91cFNldHRlciB9OworY29u
c3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6Om9wdGlvbl9nZXRzZXQgPSB7
ICZIVE1MRWxlbWVudDo6b3B0aW9uR2V0dGVyLCAmSFRNTEVsZW1lbnQ6Om9wdGlvblNldHRlciB9
OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmlucHV0X2dldHNl
dCA9IHsgJkhUTUxFbGVtZW50OjppbnB1dEdldHRlciwgJkhUTUxFbGVtZW50OjppbnB1dFNldHRl
ciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OnRleHRBcmVh
X2dldHNldCA9IHsgJkhUTUxFbGVtZW50Ojp0ZXh0QXJlYUdldHRlciwgJkhUTUxFbGVtZW50Ojp0
ZXh0QXJlYVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1l
bnQ6OmJ1dHRvbl9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6YnV0dG9uR2V0dGVyLCAmSFRNTEVs
ZW1lbnQ6OmJ1dHRvblNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRN
TEVsZW1lbnQ6OmxhYmVsX2dldHNldCA9IHsgJkhUTUxFbGVtZW50OjpsYWJlbEdldHRlciwgJkhU
TUxFbGVtZW50OjpsYWJlbFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8g
SFRNTEVsZW1lbnQ6OmZpZWxkU2V0X2dldHNldCA9IHsgJkhUTUxFbGVtZW50OjpmaWVsZFNldEdl
dHRlciwgJkhUTUxFbGVtZW50OjpmaWVsZFNldFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6
OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmxlZ2VuZF9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6
bGVnZW5kR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmxlZ2VuZFNldHRlciB9OworY29uc3QgSFRNTEVs
ZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OnVsX2dldHNldCA9IHsgJkhUTUxFbGVtZW50
Ojp1TGlzdEdldHRlciwgJkhUTUxFbGVtZW50Ojp1TGlzdFNldHRlciB9OworY29uc3QgSFRNTEVs
ZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6Om9sX2dldHNldCA9IHsgJkhUTUxFbGVtZW50
OjpvTGlzdEdldHRlciwgJkhUTUxFbGVtZW50OjpvTGlzdFNldHRlciB9OworY29uc3QgSFRNTEVs
ZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmRsX2dldHNldCA9IHsgJkhUTUxFbGVtZW50
OjpkTGlzdEdldHRlciwgJkhUTUxFbGVtZW50OjpkTGlzdFNldHRlciB9OworY29uc3QgSFRNTEVs
ZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmRpcl9nZXRzZXQgPSB7ICZIVE1MRWxlbWVu
dDo6ZGlyR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmRpclNldHRlciB9OworY29uc3QgSFRNTEVsZW1l
bnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6Om1lbnVfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6
Om1lbnVHZXR0ZXIsICZIVE1MRWxlbWVudDo6bWVudVNldHRlciB9OworY29uc3QgSFRNTEVsZW1l
bnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmxpX2dldHNldCA9IHsgJkhUTUxFbGVtZW50Ojps
aUdldHRlciwgJkhUTUxFbGVtZW50OjpsaVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6Okdl
dFNldEluZm8gSFRNTEVsZW1lbnQ6OmRpdl9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6ZGl2R2V0
dGVyLCAmSFRNTEVsZW1lbnQ6OmRpdlNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNl
dEluZm8gSFRNTEVsZW1lbnQ6OnBfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OnBhcmFncmFwaEdl
dHRlciwgJkhUTUxFbGVtZW50OjpwYXJhZ3JhcGhTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50
OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjpoZWFkaW5nX2dldHNldCA9IHsgJkhUTUxFbGVtZW50
OjpoZWFkaW5nR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmhlYWRpbmdTZXR0ZXIgfTsKK2NvbnN0IEhU
TUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjpibG9ja1F1b3RlX2dldHNldCA9IHsg
JkhUTUxFbGVtZW50OjpibG9ja1F1b3RlR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmJsb2NrUXVvdGVT
ZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjpxX2dl
dHNldCA9IHsgJkhUTUxFbGVtZW50OjpxdW90ZUdldHRlciwgJkhUTUxFbGVtZW50OjpxdW90ZVNl
dHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OnByZV9n
ZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6cHJlR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OnByZVNldHRl
ciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmJyX2dldHNl
dCA9IHsgJkhUTUxFbGVtZW50OjpickdldHRlciwgJkhUTUxFbGVtZW50OjpiclNldHRlciB9Owor
Y29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmJhc2VGb250X2dldHNl
dCA9IHsgJkhUTUxFbGVtZW50OjpiYXNlRm9udEdldHRlciwgJkhUTUxFbGVtZW50OjpiYXNlRm9u
dFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmZv
bnRfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmZvbnRHZXR0ZXIsICZIVE1MRWxlbWVudDo6Zm9u
dFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6Omhy
X2dldHNldCA9IHsgJkhUTUxFbGVtZW50OjpockdldHRlciwgJkhUTUxFbGVtZW50OjpoclNldHRl
ciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6Om1vZF9nZXRz
ZXQgPSB7ICZIVE1MRWxlbWVudDo6bW9kR2V0dGVyLCAmSFRNTEVsZW1lbnQ6Om1vZFNldHRlciB9
OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmFfZ2V0c2V0ID0g
eyAmSFRNTEVsZW1lbnQ6OmFuY2hvckdldHRlciwgJkhUTUxFbGVtZW50OjphbmNob3JTZXR0ZXIg
fTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjpjYW52YXNfZ2V0
c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmltYWdlR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmltYWdlU2V0
dGVyIH07Citjb25zdCBIVE1MRWxlbWVudDo6R2V0U2V0SW5mbyBIVE1MRWxlbWVudDo6aW1nX2dl
dHNldCA9IHsgJkhUTUxFbGVtZW50OjppbWFnZUdldHRlciwgJkhUTUxFbGVtZW50OjppbWFnZVNl
dHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6Om9iamVj
dF9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6b2JqZWN0R2V0dGVyLCAmSFRNTEVsZW1lbnQ6Om9i
amVjdFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6
OnBhcmFtX2dldHNldCA9IHsgJkhUTUxFbGVtZW50OjpwYXJhbUdldHRlciwgJkhUTUxFbGVtZW50
OjpwYXJhbVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1l
bnQ6OmFwcGxldF9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6YXBwbGV0R2V0dGVyLCAmSFRNTEVs
ZW1lbnQ6OmFwcGxldFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRN
TEVsZW1lbnQ6Om1hcF9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6bWFwR2V0dGVyLCAmSFRNTEVs
ZW1lbnQ6Om1hcFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVs
ZW1lbnQ6OmFyZWFfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmFyZWFHZXR0ZXIsICZIVE1MRWxl
bWVudDo6YXJlYVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVs
ZW1lbnQ6OnNjcmlwdF9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6c2NyaXB0R2V0dGVyLCAmSFRN
TEVsZW1lbnQ6OnNjcmlwdFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8g
SFRNTEVsZW1lbnQ6OnRhYmxlX2dldHNldCA9IHsgJkhUTUxFbGVtZW50Ojp0YWJsZUdldHRlciwg
JkhUTUxFbGVtZW50Ojp0YWJsZVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldElu
Zm8gSFRNTEVsZW1lbnQ6OmNhcHRpb25fZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OnRhYmxlQ2Fw
dGlvbkdldHRlciwgJkhUTUxFbGVtZW50Ojp0YWJsZUNhcHRpb25TZXR0ZXIgfTsKK2NvbnN0IEhU
TUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50Ojpjb2xfZ2V0c2V0ID0geyAmSFRNTEVs
ZW1lbnQ6OnRhYmxlQ29sR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OnRhYmxlQ29sU2V0dGVyIH07Citj
b25zdCBIVE1MRWxlbWVudDo6R2V0U2V0SW5mbyBIVE1MRWxlbWVudDo6dGFibGVzZWN0aW9uX2dl
dHNldCA9IHsgJkhUTUxFbGVtZW50Ojp0YWJsZVNlY3Rpb25HZXR0ZXIsICZIVE1MRWxlbWVudDo6
dGFibGVTZWN0aW9uU2V0dGVyIH07Citjb25zdCBIVE1MRWxlbWVudDo6R2V0U2V0SW5mbyBIVE1M
RWxlbWVudDo6dHJfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OnRhYmxlUm93R2V0dGVyLCAmSFRN
TEVsZW1lbnQ6OnRhYmxlUm93U2V0dGVyIH07Citjb25zdCBIVE1MRWxlbWVudDo6R2V0U2V0SW5m
byBIVE1MRWxlbWVudDo6dGFibGVjZWxsX2dldHNldCA9IHsgJkhUTUxFbGVtZW50Ojp0YWJsZUNl
bGxHZXR0ZXIsICZIVE1MRWxlbWVudDo6dGFibGVDZWxsU2V0dGVyIH07Citjb25zdCBIVE1MRWxl
bWVudDo6R2V0U2V0SW5mbyBIVE1MRWxlbWVudDo6ZnJhbWVTZXRfZ2V0c2V0ID0geyAmSFRNTEVs
ZW1lbnQ6OmZyYW1lU2V0R2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmZyYW1lU2V0U2V0dGVyIH07Citj
b25zdCBIVE1MRWxlbWVudDo6R2V0U2V0SW5mbyBIVE1MRWxlbWVudDo6ZnJhbWVfZ2V0c2V0ID0g
eyAmSFRNTEVsZW1lbnQ6OmZyYW1lR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmZyYW1lU2V0dGVyIH07
Citjb25zdCBIVE1MRWxlbWVudDo6R2V0U2V0SW5mbyBIVE1MRWxlbWVudDo6aUZyYW1lX2dldHNl
dCA9IHsgJkhUTUxFbGVtZW50OjppRnJhbWVHZXR0ZXIsICZIVE1MRWxlbWVudDo6aUZyYW1lU2V0
dGVyIH07Citjb25zdCBIVE1MRWxlbWVudDo6R2V0U2V0SW5mbyBIVE1MRWxlbWVudDo6bWFycXVl
ZV9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6bWFycXVlZUdldHRlciwgJkhUTUxFbGVtZW50Ojpt
YXJxdWVlU2V0dGVyIH07CisKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvKiBIVE1MRWxl
bWVudDo6Z2V0U2V0SW5mbygpIGNvbnN0Cit7CisgICAgLy8gV2UgYWxyZWFkeSBrbm93IHdlIGhh
dmUgYW4gSFRNTCBlbGVtZW50LCBzbyB3ZSBvbmx5IG5lZWQgdG8gY29tcGFyZSB0aGUgbG9jYWxO
YW1lIGNvbXBvbmVudCBvZiB0aGUgcXVhbGlmaWVkIG5hbWUuCisgICAgc3RhdGljIFFQdHJEaWN0
PGNvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvPiBnZXRTZXRJbmZvRGljdDsKKyAgICBpZiAo
Z2V0U2V0SW5mb0RpY3QuaXNFbXB0eSgpKSB7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2Vy
dChIVE1MTmFtZXM6OmEoKS5sb2NhbE5hbWVQdHIoKSwgJmFfZ2V0c2V0KTsKKyAgICAgICAgZ2V0
U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6YXBwbGV0KCkubG9jYWxOYW1lUHRyKCksICZh
cHBsZXRfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6
YXJlYSgpLmxvY2FsTmFtZVB0cigpLCAmYXJlYV9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZv
RGljdC5pbnNlcnQoSFRNTE5hbWVzOjpiYXNlKCkubG9jYWxOYW1lUHRyKCksICZiYXNlX2dldHNl
dCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmJhc2Vmb250KCku
bG9jYWxOYW1lUHRyKCksICZiYXNlRm9udF9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGlj
dC5pbnNlcnQoSFRNTE5hbWVzOjpibG9ja3F1b3RlKCkubG9jYWxOYW1lUHRyKCksICZibG9ja1F1
b3RlX2dldHNldCk7IAorICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpi
b2R5KCkubG9jYWxOYW1lUHRyKCksICZib2R5X2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9E
aWN0Lmluc2VydChIVE1MTmFtZXM6OmJyKCkubG9jYWxOYW1lUHRyKCksICZicl9nZXRzZXQpOwor
ICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpidXR0b24oKS5sb2NhbE5h
bWVQdHIoKSwgJmJ1dHRvbl9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQo
SFRNTE5hbWVzOjpjYW52YXMoKS5sb2NhbE5hbWVQdHIoKSwgJmNhbnZhc19nZXRzZXQpOworICAg
ICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpjYXB0aW9uKCkubG9jYWxOYW1l
UHRyKCksICZjYXB0aW9uX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChI
VE1MTmFtZXM6OmNvbCgpLmxvY2FsTmFtZVB0cigpLCAmY29sX2dldHNldCk7CisgICAgICAgIGdl
dFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmNvbGdyb3VwKCkubG9jYWxOYW1lUHRyKCks
ICZjb2xfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6
ZGVsKCkubG9jYWxOYW1lUHRyKCksICZtb2RfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0Rp
Y3QuaW5zZXJ0KEhUTUxOYW1lczo6ZGlyKCkubG9jYWxOYW1lUHRyKCksICZkaXJfZ2V0c2V0KTsK
KyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6ZGl2KCkubG9jYWxOYW1l
UHRyKCksICZkaXZfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxO
YW1lczo6ZGwoKS5sb2NhbE5hbWVQdHIoKSwgJmRsX2dldHNldCk7CisgICAgICAgIGdldFNldElu
Zm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmZpZWxkc2V0KCkubG9jYWxOYW1lUHRyKCksICZmaWVs
ZFNldF9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpm
b250KCkubG9jYWxOYW1lUHRyKCksICZmb250X2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9E
aWN0Lmluc2VydChIVE1MTmFtZXM6OmZvcm0oKS5sb2NhbE5hbWVQdHIoKSwgJmZvcm1fZ2V0c2V0
KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6ZnJhbWUoKS5sb2Nh
bE5hbWVQdHIoKSwgJmZyYW1lX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2Vy
dChIVE1MTmFtZXM6OmZyYW1lc2V0KCkubG9jYWxOYW1lUHRyKCksICZmcmFtZVNldF9nZXRzZXQp
OworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpoMSgpLmxvY2FsTmFt
ZVB0cigpLCAmaGVhZGluZ19nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQo
SFRNTE5hbWVzOjpoMigpLmxvY2FsTmFtZVB0cigpLCAmaGVhZGluZ19nZXRzZXQpOworICAgICAg
ICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpoMygpLmxvY2FsTmFtZVB0cigpLCAm
aGVhZGluZ19nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVz
OjpoNCgpLmxvY2FsTmFtZVB0cigpLCAmaGVhZGluZ19nZXRzZXQpOworICAgICAgICBnZXRTZXRJ
bmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpoNSgpLmxvY2FsTmFtZVB0cigpLCAmaGVhZGluZ19n
ZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpoNigpLmxv
Y2FsTmFtZVB0cigpLCAmaGVhZGluZ19nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5p
bnNlcnQoSFRNTE5hbWVzOjpoZWFkKCkubG9jYWxOYW1lUHRyKCksICZoZWFkX2dldHNldCk7Cisg
ICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmhyKCkubG9jYWxOYW1lUHRy
KCksICZocl9nZXRzZXQpOyAKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1l
czo6aHRtbCgpLmxvY2FsTmFtZVB0cigpLCAmaHRtbF9nZXRzZXQpOworICAgICAgICBnZXRTZXRJ
bmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjppZnJhbWUoKS5sb2NhbE5hbWVQdHIoKSwgJmlGcmFt
ZV9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjppbWco
KS5sb2NhbE5hbWVQdHIoKSwgJmltZ19nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5p
bnNlcnQoSFRNTE5hbWVzOjppbnB1dCgpLmxvY2FsTmFtZVB0cigpLCAmaW5wdXRfZ2V0c2V0KTsK
KyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6aW5zKCkubG9jYWxOYW1l
UHRyKCksICZtb2RfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxO
YW1lczo6aXNpbmRleCgpLmxvY2FsTmFtZVB0cigpLCAmaXNJbmRleF9nZXRzZXQpOworICAgICAg
ICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpsYWJlbCgpLmxvY2FsTmFtZVB0cigp
LCAmbGFiZWxfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1l
czo6bGVnZW5kKCkubG9jYWxOYW1lUHRyKCksICZsZWdlbmRfZ2V0c2V0KTsKKyAgICAgICAgZ2V0
U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6bGkoKS5sb2NhbE5hbWVQdHIoKSwgJmxpX2dl
dHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmxpbmsoKS5s
b2NhbE5hbWVQdHIoKSwgJmxpbmtfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5z
ZXJ0KEhUTUxOYW1lczo6bWFwKCkubG9jYWxOYW1lUHRyKCksICZtYXBfZ2V0c2V0KTsKKyAgICAg
ICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6bWFycXVlZSgpLmxvY2FsTmFtZVB0
cigpLCAmbWFycXVlZV9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRN
TE5hbWVzOjptZW51KCkubG9jYWxOYW1lUHRyKCksICZtZW51X2dldHNldCk7CisgICAgICAgIGdl
dFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Om1ldGEoKS5sb2NhbE5hbWVQdHIoKSwgJm1l
dGFfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6b2Jq
ZWN0KCkubG9jYWxOYW1lUHRyKCksICZvYmplY3RfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5m
b0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6b2woKS5sb2NhbE5hbWVQdHIoKSwgJm9sX2dldHNldCk7
CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Om9wdGlvbigpLmxvY2Fs
TmFtZVB0cigpLCAmb3B0aW9uX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2Vy
dChIVE1MTmFtZXM6Om9wdGdyb3VwKCkubG9jYWxOYW1lUHRyKCksICZvcHRHcm91cF9nZXRzZXQp
OworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpwKCkubG9jYWxOYW1l
UHRyKCksICZwX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFt
ZXM6OnBhcmFtKCkubG9jYWxOYW1lUHRyKCksICZwYXJhbV9nZXRzZXQpOworICAgICAgICBnZXRT
ZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpwcmUoKS5sb2NhbE5hbWVQdHIoKSwgJnByZV9n
ZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpxKCkubG9j
YWxOYW1lUHRyKCksICZxX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChI
VE1MTmFtZXM6OnNjcmlwdCgpLmxvY2FsTmFtZVB0cigpLCAmc2NyaXB0X2dldHNldCk7CisgICAg
ICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OnNlbGVjdCgpLmxvY2FsTmFtZVB0
cigpLCAmc2VsZWN0X2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1M
TmFtZXM6OnN0eWxlKCkubG9jYWxOYW1lUHRyKCksICZzdHlsZV9nZXRzZXQpOworICAgICAgICBn
ZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjp0YWJsZSgpLmxvY2FsTmFtZVB0cigpLCAm
dGFibGVfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6
dGJvZHkoKS5sb2NhbE5hbWVQdHIoKSwgJnRhYmxlc2VjdGlvbl9nZXRzZXQpOworICAgICAgICBn
ZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjp0ZCgpLmxvY2FsTmFtZVB0cigpLCAmdGFi
bGVjZWxsX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6
OnRleHRhcmVhKCkubG9jYWxOYW1lUHRyKCksICZ0ZXh0QXJlYV9nZXRzZXQpOworICAgICAgICBn
ZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjp0aCgpLmxvY2FsTmFtZVB0cigpLCAmdGFi
bGVjZWxsX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6
OnRoZWFkKCkubG9jYWxOYW1lUHRyKCksICZ0YWJsZXNlY3Rpb25fZ2V0c2V0KTsKKyAgICAgICAg
Z2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6dGZvb3QoKS5sb2NhbE5hbWVQdHIoKSwg
JnRhYmxlc2VjdGlvbl9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRN
TE5hbWVzOjp0aXRsZSgpLmxvY2FsTmFtZVB0cigpLCAmdGl0bGVfZ2V0c2V0KTsKKyAgICAgICAg
Z2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6dHIoKS5sb2NhbE5hbWVQdHIoKSwgJnRy
X2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OnVsKCku
bG9jYWxOYW1lUHRyKCksICZ1bF9nZXRzZXQpOworICAgIH0KKyAgICAKKyAgICBIVE1MRWxlbWVu
dEltcGwqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwqPihpbXBsKCkpOwor
ICAgIGNvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvKiByZXN1bHQgPSBnZXRTZXRJbmZvRGlj
dC5maW5kKGVsZW1lbnQtPmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCkpOworICAgIGlmIChy
ZXN1bHQpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIDA7Cit9CisKIC8qCiBA
YmVnaW4gSFRNTEVsZW1lbnRUYWJsZSAxNAogICBpZAkJS0pTOjpIVE1MRWxlbWVudDo6RWxlbWVu
dElkCURvbnREZWxldGUKQEAgLTExODQsNyArMTI2OCw3IEBAIGNvbnN0IENsYXNzSW5mbyogS0pT
OjpIVE1MRWxlbWVudDo6Y2xhc3MKIEBlbmQKIAogQGJlZ2luIEhUTUxDYW52YXNFbGVtZW50VGFi
bGUgMQotICBnZXRDb250ZXh0ICAgICAgS0pTOjpIVE1MRWxlbWVudDo6R2V0Q29udGV4dCAgICAg
ICAgICAgICAgICAgIERvbnREZWxldGV8RnVuY3Rpb24gMAorICBnZXRDb250ZXh0ICAgICAgS0pT
OjpIVE1MRWxlbWVudDo6R2V0Q29udGV4dCAgICAgICAgICAgICAgICAgIERvbnREZWxldGV8RnVu
Y3Rpb24gMQogQGVuZAogKi8KIApAQCAtMTE5NSwzNSArMTI3OSwzMiBAQCBIVE1MRWxlbWVudDo6
SFRNTEVsZW1lbnQoRXhlY1N0YXRlICpleGVjCiAKIFZhbHVlIEtKUzo6SFRNTEVsZW1lbnQ6OnRy
eUdldChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSkgY29u
c3QKIHsKLSAgSFRNTEVsZW1lbnRJbXBsICZlbGVtZW50ID0gKnN0YXRpY19jYXN0PEhUTUxFbGVt
ZW50SW1wbCAqPihpbXBsKCkpOworICAgIEhUTUxFbGVtZW50SW1wbCAmZWxlbWVudCA9ICpzdGF0
aWNfY2FzdDxIVE1MRWxlbWVudEltcGwgKj4oaW1wbCgpKTsKICNpZmRlZiBLSlNfVkVSQk9TRQot
ICBrZERlYnVnKDYwNzApIDw8ICJLSlM6OkhUTUxFbGVtZW50Ojp0cnlHZXQgIiA8PCBwcm9wZXJ0
eU5hbWUucXN0cmluZygpIDw8ICIgdGhpc1RhZz0iIDw8IGVsZW1lbnQudGFnTmFtZSgpLnN0cmlu
ZygpIDw8IGVuZGw7CisgICAga2REZWJ1Zyg2MDcwKSA8PCAiS0pTOjpIVE1MRWxlbWVudDo6dHJ5
R2V0ICIgPDwgcHJvcGVydHlOYW1lLnFzdHJpbmcoKSA8PCAiIHRoaXNUYWc9IiA8PCBlbGVtZW50
LnRhZ05hbWUoKS5zdHJpbmcoKSA8PCBlbmRsOwogI2VuZGlmCi0gIC8vIEZpcnN0IGxvb2sgYXQg
ZHluYW1pYyBwcm9wZXJ0aWVzCi0gIHN3aXRjaCAoZWxlbWVudC5pZCgpKSB7Ci0gICAgY2FzZSBJ
RF9GT1JNOiB7Ci0gICAgICBIVE1MRm9ybUVsZW1lbnRJbXBsICZmb3JtID0gc3RhdGljX2Nhc3Q8
SFRNTEZvcm1FbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIC8vIENoZWNrIGlmIHdlJ3Jl
IHJldHJpZXZpbmcgYW4gZWxlbWVudCAoYnkgaW5kZXggb3IgYnkgbmFtZSkKLSAgICAgIGJvb2wg
b2s7Ci0gICAgICB1aW50IHUgPSBwcm9wZXJ0eU5hbWUudG9VTG9uZygmb2spOwotICAgICAgaWYg
KG9rKQotICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLCBmb3JtLmVsZW1lbnRzKCktPml0
ZW0odSkpOwotICAgICAgVmFsdWVJbXAgKm5hbWVkSXRlbXMgPSBIVE1MQ29sbGVjdGlvbihleGVj
LCBmb3JtLmVsZW1lbnRzKCkuZ2V0KCkpLmdldE5hbWVkSXRlbXMoZXhlYywgcHJvcGVydHlOYW1l
KTsKLSAgICAgIGlmICghbmFtZWRJdGVtcy0+aXNVbmRlZmluZWQoKSkKLSAgICAgICAgcmV0dXJu
IG5hbWVkSXRlbXM7Ci0gICAgfQotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9TRUxFQ1Q6IHsK
LSAgICAgIEhUTUxTZWxlY3RFbGVtZW50SW1wbCAmc2VsZWN0ID0gc3RhdGljX2Nhc3Q8SFRNTFNl
bGVjdEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgYm9vbCBvazsKLSAgICAgIHVpbnQg
dSA9IHByb3BlcnR5TmFtZS50b1VMb25nKCZvayk7Ci0gICAgICBpZiAob2spCi0gICAgICAgIHJl
dHVybiBnZXRET01Ob2RlKGV4ZWMsIHNlbGVjdC5vcHRpb25zSFRNTENvbGxlY3Rpb24oKS0+aXRl
bSh1KSk7IC8vIG5vdCBzcGVjaWZpZWQgYnkgRE9NKD8pIGJ1dCBzdXBwb3J0ZWQgaW4gbmV0c2Nh
cGUvSUUKKyAgICAvLyBGaXJzdCBsb29rIGF0IGR5bmFtaWMgcHJvcGVydGllcworICAgIGlmIChl
bGVtZW50Lmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmZvcm0oKSkpIHsKKyAgICAgICAgSFRNTEZv
cm1FbGVtZW50SW1wbCAmZm9ybSA9IHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudEltcGwgJj4o
ZWxlbWVudCk7CisgICAgICAgIC8vIENoZWNrIGlmIHdlJ3JlIHJldHJpZXZpbmcgYW4gZWxlbWVu
dCAoYnkgaW5kZXggb3IgYnkgbmFtZSkKKyAgICAgICAgYm9vbCBvazsKKyAgICAgICAgdWludCB1
ID0gcHJvcGVydHlOYW1lLnRvVUxvbmcoJm9rKTsKKyAgICAgICAgaWYgKG9rKQorICAgICAgICAg
ICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYywgZm9ybS5lbGVtZW50cygpLT5pdGVtKHUpKTsKKyAg
ICAgICAgVmFsdWVJbXAgKm5hbWVkSXRlbXMgPSBIVE1MQ29sbGVjdGlvbihleGVjLCBmb3JtLmVs
ZW1lbnRzKCkuZ2V0KCkpLmdldE5hbWVkSXRlbXMoZXhlYywgcHJvcGVydHlOYW1lKTsKKyAgICAg
ICAgaWYgKCFuYW1lZEl0ZW1zLT5pc1VuZGVmaW5lZCgpKQorICAgICAgICAgICAgcmV0dXJuIG5h
bWVkSXRlbXM7CisgICAgfQorICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFzTG9jYWxOYW1lKEhUTUxO
YW1lczo6c2VsZWN0KCkpKSB7CisgICAgICAgIEhUTUxTZWxlY3RFbGVtZW50SW1wbCAmc2VsZWN0
ID0gc3RhdGljX2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgICAg
ICBib29sIG9rOworICAgICAgICB1aW50IHUgPSBwcm9wZXJ0eU5hbWUudG9VTG9uZygmb2spOwor
ICAgICAgICBpZiAob2spCisgICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLCBzZWxl
Y3Qub3B0aW9uc0hUTUxDb2xsZWN0aW9uKCktPml0ZW0odSkpOyAvLyBub3Qgc3BlY2lmaWVkIGJ5
IERPTSg/KSBidXQgc3VwcG9ydGVkIGluIG5ldHNjYXBlL0lFCiAgICAgfQotICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBJRF9GUkFNRVNFVDogeworICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6ZnJhbWVzZXQoKSkpIHsKICAgICAgICAgTm9kZUltcGwgKmZyYW1lID0g
ZWxlbWVudC5jaGlsZHJlbigpLT5uYW1lZEl0ZW0ocHJvcGVydHlOYW1lLnN0cmluZygpKTsKLSAg
ICAgICAgaWYgKGZyYW1lICYmIGZyYW1lLT5pZCgpID09IElEX0ZSQU1FKSB7CisgICAgICAgIGlm
IChmcmFtZSAmJiBmcmFtZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZyYW1lKCkpKSB7CiAgICAg
ICAgICAgICBEb2N1bWVudEltcGwqIGRvYyA9IHN0YXRpY19jYXN0PEhUTUxGcmFtZUVsZW1lbnRJ
bXBsICo+KGZyYW1lKS0+Y29udGVudERvY3VtZW50KCk7CiAgICAgICAgICAgICBpZiAoZG9jKSB7
CiAgICAgICAgICAgICAgICAgS0hUTUxQYXJ0KiBwYXJ0ID0gZG9jLT5wYXJ0KCk7CkBAIC0xMjM2
LDczICsxMzE3LDU3IEBAIFZhbHVlIEtKUzo6SFRNTEVsZW1lbnQ6OnRyeUdldChFeGVjU3RhdGUK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBJRF9GUkFNRToKLSAgICBjYXNlIElEX0lGUkFNRTogeworICAgIGVsc2UgaWYgKGVsZW1lbnQu
aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6ZnJhbWUoKSkgfHwgZWxlbWVudC5oYXNMb2NhbE5hbWUo
SFRNTE5hbWVzOjppZnJhbWUoKSkpIHsKICAgICAgICAgRG9jdW1lbnRJbXBsKiBkb2MgPSBzdGF0
aWNfY2FzdDxIVE1MRnJhbWVFbGVtZW50SW1wbCAmPihlbGVtZW50KS5jb250ZW50RG9jdW1lbnQo
KTsKLSAgICAgICAgaWYgKCBkb2MgKSB7CisgICAgICAgIGlmIChkb2MpIHsKICAgICAgICAgICAg
IEtIVE1MUGFydCogcGFydCA9IGRvYy0+cGFydCgpOwotICAgICAgICAgICAgaWYgKCBwYXJ0ICkg
eworICAgICAgICAgICAgaWYgKHBhcnQpIHsKICAgICAgICAgICAgICAgV2luZG93ICp3aW5kb3cg
PSBXaW5kb3c6OnJldHJpZXZlV2luZG93KHBhcnQpOwogCSAgICAgIGlmICh3aW5kb3cgJiYgd2lu
ZG93LT5oYXNQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUpKQogICAgICAgICAgICAgICAgIHJl
dHVybiB3aW5kb3ctPmdldChleGVjLCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAgICAgfQotICAgICAgYnJlYWs7CiAjaWYgQVBQTEVfQ0hBTkdFUwotICAgIGNhc2Ug
SURfRU1CRUQ6Ci0gICAgY2FzZSBJRF9PQkpFQ1Q6Ci0gICAgY2FzZSBJRF9BUFBMRVQ6IHsKLQlp
ZiAocHJvcGVydHlOYW1lID09ICJfX2FwcGxlX3J1bnRpbWVfb2JqZWN0IikgeworICAgIGVsc2Ug
aWYgKGVsZW1lbnQuaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6ZW1iZWQoKSkgfHwgZWxlbWVudC5o
YXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvYmplY3QoKSkgfHwKKyAgICAgICAgICAgICBlbGVtZW50
Lmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmFwcGxldCgpKSkgeworCWlmIChwcm9wZXJ0eU5hbWUg
PT0gIl9fYXBwbGVfcnVudGltZV9vYmplY3QiKQogCSAgICByZXR1cm4gZ2V0UnVudGltZU9iamVj
dChleGVjLCZlbGVtZW50KTsKLQl9Ci0KIAlWYWx1ZSBydW50aW1lT2JqZWN0ID0gZ2V0UnVudGlt
ZU9iamVjdChleGVjLCZlbGVtZW50KTsKIAlpZiAoIXJ1bnRpbWVPYmplY3QuaXNOdWxsKCkpIHsK
IAkgICAgT2JqZWN0SW1wICppbXAgPSBzdGF0aWNfY2FzdDxPYmplY3RJbXAgKj4ocnVudGltZU9i
amVjdC5pbXAoKSk7Ci0JICAgIGlmIChpbXAtPmhhc1Byb3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFt
ZSkpIHsKKwkgICAgaWYgKGltcC0+aGFzUHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lKSkKIAkJ
cmV0dXJuIGltcC0+Z2V0IChleGVjLCBwcm9wZXJ0eU5hbWUpOwotCSAgICB9CiAJfQogICAgIH0K
LSAgICAgIGJyZWFrOwogI2VuZGlmCi0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQogCi0gIGNvbnN0IEhhc2hUYWJsZSogdGFibGUgPSBjbGFzc0luZm8oKS0+cHJvcEhhc2hUYWJs
ZTsgLy8gZ2V0IHRoZSByaWdodCBoYXNodGFibGUKLSAgY29uc3QgSGFzaEVudHJ5KiBlbnRyeSA9
IExvb2t1cDo6ZmluZEVudHJ5KHRhYmxlLCBwcm9wZXJ0eU5hbWUpOwotICBpZiAoZW50cnkpIHsK
LSAgICBpZiAoZW50cnktPmF0dHIgJiBGdW5jdGlvbikKLSAgICAgIHJldHVybiBsb29rdXBPckNy
ZWF0ZUZ1bmN0aW9uPEtKUzo6SFRNTEVsZW1lbnRGdW5jdGlvbj4oZXhlYywgcHJvcGVydHlOYW1l
LCB0aGlzLCBlbnRyeS0+dmFsdWUsIGVudHJ5LT5wYXJhbXMsIGVudHJ5LT5hdHRyKTsKLSAgICBy
ZXR1cm4gZ2V0VmFsdWVQcm9wZXJ0eShleGVjLCBlbnRyeS0+dmFsdWUpOwotICB9CisgICAgY29u
c3QgSGFzaFRhYmxlKiB0YWJsZSA9IGNsYXNzSW5mbygpLT5wcm9wSGFzaFRhYmxlOyAvLyBnZXQg
dGhlIHJpZ2h0IGhhc2h0YWJsZQorICAgIGNvbnN0IEhhc2hFbnRyeSogZW50cnkgPSBMb29rdXA6
OmZpbmRFbnRyeSh0YWJsZSwgcHJvcGVydHlOYW1lKTsKKyAgICBpZiAoZW50cnkpIHsKKyAgICAg
ICAgaWYgKGVudHJ5LT5hdHRyICYgRnVuY3Rpb24pCisgICAgICAgICAgICByZXR1cm4gbG9va3Vw
T3JDcmVhdGVGdW5jdGlvbjxLSlM6OkhUTUxFbGVtZW50RnVuY3Rpb24+KGV4ZWMsIHByb3BlcnR5
TmFtZSwgdGhpcywgZW50cnktPnZhbHVlLCBlbnRyeS0+cGFyYW1zLCBlbnRyeS0+YXR0cik7Cisg
ICAgICAgIHJldHVybiBnZXRWYWx1ZVByb3BlcnR5KGV4ZWMsIGVudHJ5LT52YWx1ZSk7CisgICAg
fQogCi0gIC8vIEJhc2UgSFRNTEVsZW1lbnQgc3R1ZmYgb3IgcGFyZW50IGNsYXNzIGZvcndhcmQs
IGFzIHVzdWFsCi0gIHJldHVybiBET01PYmplY3RMb29rdXBHZXQ8S0pTOjpIVE1MRWxlbWVudEZ1
bmN0aW9uLCBLSlM6OkhUTUxFbGVtZW50LCBET01FbGVtZW50PihleGVjLCBwcm9wZXJ0eU5hbWUs
ICZIVE1MRWxlbWVudFRhYmxlLCB0aGlzKTsKKyAgICAvLyBCYXNlIEhUTUxFbGVtZW50IHN0dWZm
IG9yIHBhcmVudCBjbGFzcyBmb3J3YXJkLCBhcyB1c3VhbAorICAgIHJldHVybiBET01PYmplY3RM
b29rdXBHZXQ8S0pTOjpIVE1MRWxlbWVudEZ1bmN0aW9uLCBLSlM6OkhUTUxFbGVtZW50LCBET01F
bGVtZW50PihleGVjLCBwcm9wZXJ0eU5hbWUsICZIVE1MRWxlbWVudFRhYmxlLCB0aGlzKTsKIH0K
IAogYm9vbCBLSlM6OkhUTUxFbGVtZW50OjppbXBsZW1lbnRzQ2FsbCgpIGNvbnN0CiB7CiAgICAg
SFRNTEVsZW1lbnRJbXBsICplbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+
KGltcGwoKSk7Ci0gICAgc3dpdGNoIChlbGVtZW50LT5pZCgpKSB7Ci0JY2FzZSBJRF9FTUJFRDoK
LQljYXNlIElEX09CSkVDVDoKLQljYXNlIElEX0FQUExFVDogewotCQlEb2N1bWVudEltcGwqIGRv
YyA9IGVsZW1lbnQtPmdldERvY3VtZW50KCk7Ci0JCUtKU1Byb3h5ICpwcm94eSA9IEtKU1Byb3h5
Ojpwcm94eShkb2MtPnBhcnQoKSk7Ci0JCUV4ZWNTdGF0ZSAqZXhlYyA9IHByb3h5LT5pbnRlcnBy
ZXRlcigpLT5nbG9iYWxFeGVjKCk7Ci0JCVZhbHVlIHJ1bnRpbWVPYmplY3QgPSBnZXRSdW50aW1l
T2JqZWN0KGV4ZWMsZWxlbWVudCk7Ci0JCWlmICghcnVudGltZU9iamVjdC5pc051bGwoKSkgewot
CQkgICAgT2JqZWN0SW1wICppbXAgPSBzdGF0aWNfY2FzdDxPYmplY3RJbXAgKj4ocnVudGltZU9i
amVjdC5pbXAoKSk7Ci0JCSAgICByZXR1cm4gaW1wLT5pbXBsZW1lbnRzQ2FsbCAoKTsKLQkJfQot
CSAgICB9Ci0JICAgIGJyZWFrOwotCWRlZmF1bHQ6Ci0JICAgIGJyZWFrOworICAgIGlmIChlbGVt
ZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZW1iZWQoKSkgfHwKKyAgICAgICAgZWxlbWVudC0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9iamVjdCgpKSB8fAorICAgICAgICBlbGVtZW50LT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6YXBwbGV0KCkpKSB7CisgICAJRG9jdW1lbnRJbXBsKiBkb2MgPSBl
bGVtZW50LT5nZXREb2N1bWVudCgpOworICAgICAgICBLSlNQcm94eSAqcHJveHkgPSBLSlNQcm94
eTo6cHJveHkoZG9jLT5wYXJ0KCkpOworICAgICAgICBFeGVjU3RhdGUgKmV4ZWMgPSBwcm94eS0+
aW50ZXJwcmV0ZXIoKS0+Z2xvYmFsRXhlYygpOworICAgICAgICBWYWx1ZSBydW50aW1lT2JqZWN0
ID0gZ2V0UnVudGltZU9iamVjdChleGVjLGVsZW1lbnQpOworICAgICAgICBpZiAoIXJ1bnRpbWVP
YmplY3QuaXNOdWxsKCkpIHsKKyAgICAgICAgICAgIE9iamVjdEltcCAqaW1wID0gc3RhdGljX2Nh
c3Q8T2JqZWN0SW1wICo+KHJ1bnRpbWVPYmplY3QuaW1wKCkpOworICAgICAgICAgICAgcmV0dXJu
IGltcC0+aW1wbGVtZW50c0NhbGwgKCk7CisgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIGZh
bHNlOwogfQpAQCAtMTMxMCw4MTkgKzEzNzUsOTA4IEBAIGJvb2wgS0pTOjpIVE1MRWxlbWVudDo6
aW1wbGVtZW50c0NhbGwoKSAKIFZhbHVlIEtKUzo6SFRNTEVsZW1lbnQ6OmNhbGwoRXhlY1N0YXRl
ICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QmYXJncykKIHsKICAgICBIVE1MRWxl
bWVudEltcGwgKmVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwgKj4oaW1wbCgp
KTsKLSAgICBzd2l0Y2ggKGVsZW1lbnQtPmlkKCkpIHsKLQljYXNlIElEX0VNQkVEOgotCWNhc2Ug
SURfT0JKRUNUOgotCWNhc2UgSURfQVBQTEVUOiB7Ci0JCVZhbHVlIHJ1bnRpbWVPYmplY3QgPSBn
ZXRSdW50aW1lT2JqZWN0KGV4ZWMsZWxlbWVudCk7Ci0JCWlmICghcnVudGltZU9iamVjdC5pc051
bGwoKSkgewotCQkgICAgT2JqZWN0SW1wICppbXAgPSBzdGF0aWNfY2FzdDxPYmplY3RJbXAgKj4o
cnVudGltZU9iamVjdC5pbXAoKSk7Ci0JCSAgICByZXR1cm4gaW1wLT5jYWxsIChleGVjLCB0aGlz
T2JqLCBhcmdzKTsKLQkJfQotCSAgICB9Ci0JICAgIGJyZWFrOwotCWRlZmF1bHQ6Ci0JICAgIGJy
ZWFrOworICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZW1iZWQoKSkgfHwK
KyAgICAgICAgZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9iamVjdCgpKSB8fAorICAg
ICAgICBlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YXBwbGV0KCkpKSB7CisgICAgICAg
IFZhbHVlIHJ1bnRpbWVPYmplY3QgPSBnZXRSdW50aW1lT2JqZWN0KGV4ZWMsZWxlbWVudCk7Cisg
ICAgICAgIGlmICghcnVudGltZU9iamVjdC5pc051bGwoKSkgeworICAgICAgICAgICAgT2JqZWN0
SW1wICppbXAgPSBzdGF0aWNfY2FzdDxPYmplY3RJbXAgKj4ocnVudGltZU9iamVjdC5pbXAoKSk7
CisgICAgICAgICAgICByZXR1cm4gaW1wLT5jYWxsIChleGVjLCB0aGlzT2JqLCBhcmdzKTsKKyAg
ICAgICAgfQogICAgIH0KICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBWYWx1
ZSBnZXRJbnB1dFNlbGVjdGlvblN0YXJ0KEhUTUxJbnB1dEVsZW1lbnRJbXBsICZpbnB1dCkKK1Zh
bHVlIEhUTUxFbGVtZW50OjpodG1sR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBj
b25zdAogewotICBpZiAoaW5wdXQuY2FuSGF2ZVNlbGVjdGlvbigpKSB7Ci0gICAgcmV0dXJuIE51
bWJlcihpbnB1dC5zZWxlY3Rpb25TdGFydCgpKTsKLSAgfQotICByZXR1cm4gVW5kZWZpbmVkKCk7
CisgICAgSFRNTEh0bWxFbGVtZW50SW1wbCYgaHRtbCA9ICpzdGF0aWNfY2FzdDxIVE1MSHRtbEVs
ZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBpZiAodG9rZW4gPT0gSHRtbFZlcnNpb24pCisgICAg
ICAgIHJldHVybiBTdHJpbmcoaHRtbC52ZXJzaW9uKCkpOworICAgIHJldHVybiBVbmRlZmluZWQo
KTsKIH0KIAotc3RhdGljIFZhbHVlIGdldElucHV0U2VsZWN0aW9uRW5kKEhUTUxJbnB1dEVsZW1l
bnRJbXBsICZpbnB1dCkKK1ZhbHVlIEhUTUxFbGVtZW50OjpoZWFkR2V0dGVyKEV4ZWNTdGF0ZSog
ZXhlYywgaW50IHRva2VuKSBjb25zdAogewotICBpZiAoaW5wdXQuY2FuSGF2ZVNlbGVjdGlvbigp
KSB7Ci0gICAgcmV0dXJuIE51bWJlcihpbnB1dC5zZWxlY3Rpb25FbmQoKSk7Ci0gIH0KLSAgcmV0
dXJuIFVuZGVmaW5lZCgpOworICAgIEhUTUxIZWFkRWxlbWVudEltcGwgJmhlYWQgPSAqc3RhdGlj
X2Nhc3Q8SFRNTEhlYWRFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IEhl
YWRQcm9maWxlKQorICAgICAgICByZXR1cm4gU3RyaW5nKGhlYWQucHJvZmlsZSgpKTsKKyAgICBy
ZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLVZhbHVlIEtKUzo6SFRNTEVsZW1lbnQ6OmdldFZhbHVl
UHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZSBIVE1MRWxl
bWVudDo6bGlua0dldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKLSAg
SFRNTEVsZW1lbnRJbXBsICZlbGVtZW50ID0gKnN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCAq
PihpbXBsKCkpOwotICBzd2l0Y2ggKGVsZW1lbnQuaWQoKSkgewotICBjYXNlIElEX0hUTUw6IHsK
LSAgICBIVE1MSHRtbEVsZW1lbnRJbXBsICZodG1sID0gc3RhdGljX2Nhc3Q8SFRNTEh0bWxFbGVt
ZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICBpZiAgICAgICh0b2tlbiA9PSBIdG1sVmVyc2lvbikg
ICAgICAgICByZXR1cm4gU3RyaW5nKGh0bWwudmVyc2lvbigpKTsKLSAgfQotICBicmVhazsKLSAg
Y2FzZSBJRF9IRUFEOiB7Ci0gICAgSFRNTEhlYWRFbGVtZW50SW1wbCAmaGVhZCA9IHN0YXRpY19j
YXN0PEhUTUxIZWFkRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgaWYgICAgICAodG9rZW4g
PT0gSGVhZFByb2ZpbGUpICAgICAgICAgcmV0dXJuIFN0cmluZyhoZWFkLnByb2ZpbGUoKSk7Ci0g
IH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfTElOSzogewotICAgIEhUTUxMaW5rRWxlbWVudEltcGwg
JmxpbmsgPSBzdGF0aWNfY2FzdDxIVE1MTGlua0VsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAg
IHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIExpbmtEaXNhYmxlZDogICAgICAgIHJldHVybiBC
b29sZWFuKGxpbmsuZGlzYWJsZWQoKSk7Ci0gICAgY2FzZSBMaW5rQ2hhcnNldDogICAgICAgICBy
ZXR1cm4gU3RyaW5nKGxpbmsuY2hhcnNldCgpKTsKLSAgICBjYXNlIExpbmtIcmVmOiAgICAgICAg
ICAgIHJldHVybiBTdHJpbmcobGluay5ocmVmKCkpOwotICAgIGNhc2UgTGlua0hyZWZMYW5nOiAg
ICAgICAgcmV0dXJuIFN0cmluZyhsaW5rLmhyZWZsYW5nKCkpOwotICAgIGNhc2UgTGlua01lZGlh
OiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhsaW5rLm1lZGlhKCkpOwotICAgIGNhc2UgTGlua1Jl
bDogICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhsaW5rLnJlbCgpKTsKLSAgICBjYXNlIExpbmtS
ZXY6ICAgICAgICAgICAgIHJldHVybiBTdHJpbmcobGluay5yZXYoKSk7Ci0gICAgY2FzZSBMaW5r
VGFyZ2V0OiAgICAgICAgICByZXR1cm4gU3RyaW5nKGxpbmsudGFyZ2V0KCkpOwotICAgIGNhc2Ug
TGlua1R5cGU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhsaW5rLnR5cGUoKSk7Ci0gICAgY2Fz
ZSBMaW5rU2hlZXQ6ICAgICAgICAgICByZXR1cm4gZ2V0RE9NU3R5bGVTaGVldChleGVjLCBsaW5r
LnNoZWV0KCkpOwotICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9USVRMRTogewotICAg
IEhUTUxUaXRsZUVsZW1lbnRJbXBsICZ0aXRsZSA9IHN0YXRpY19jYXN0PEhUTUxUaXRsZUVsZW1l
bnRJbXBsICY+KGVsZW1lbnQpOworICAgIEhUTUxMaW5rRWxlbWVudEltcGwgJmxpbmsgPSAqc3Rh
dGljX2Nhc3Q8SFRNTExpbmtFbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tl
bikgewotICAgIGNhc2UgVGl0bGVUZXh0OiAgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0
aXRsZS50ZXh0KCkpOwotICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9NRVRBOiB7Ci0g
ICAgSFRNTE1ldGFFbGVtZW50SW1wbCAmbWV0YSA9IHN0YXRpY19jYXN0PEhUTUxNZXRhRWxlbWVu
dEltcGwgJj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgTWV0YUNv
bnRlbnQ6ICAgICAgICAgcmV0dXJuIFN0cmluZyhtZXRhLmNvbnRlbnQoKSk7Ci0gICAgY2FzZSBN
ZXRhSHR0cEVxdWl2OiAgICAgICByZXR1cm4gU3RyaW5nKG1ldGEuaHR0cEVxdWl2KCkpOwotICAg
IGNhc2UgTWV0YU5hbWU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhtZXRhLm5hbWUoKSk7Ci0g
ICAgY2FzZSBNZXRhU2NoZW1lOiAgICAgICAgICByZXR1cm4gU3RyaW5nKG1ldGEuc2NoZW1lKCkp
OworICAgICAgICBjYXNlIExpbmtEaXNhYmxlZDoKKyAgICAgICAgICAgIHJldHVybiBCb29sZWFu
KGxpbmsuZGlzYWJsZWQoKSk7CisgICAgICAgIGNhc2UgTGlua0NoYXJzZXQ6CisgICAgICAgICAg
ICByZXR1cm4gU3RyaW5nKGxpbmsuY2hhcnNldCgpKTsKKyAgICAgICAgY2FzZSBMaW5rSHJlZjoK
KyAgICAgICAgICAgIHJldHVybiBTdHJpbmcobGluay5ocmVmKCkpOworICAgICAgICBjYXNlIExp
bmtIcmVmTGFuZzoKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcobGluay5ocmVmbGFuZygpKTsK
KyAgICAgICAgY2FzZSBMaW5rTWVkaWE6ICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiBT
dHJpbmcobGluay5tZWRpYSgpKTsKKyAgICAgICAgY2FzZSBMaW5rUmVsOiAgICAgICAgICAgICAK
KyAgICAgICAgICAgIHJldHVybiBTdHJpbmcobGluay5yZWwoKSk7CisgICAgICAgIGNhc2UgTGlu
a1JldjogICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcobGluay5yZXYoKSk7
CisgICAgICAgIGNhc2UgTGlua1RhcmdldDogICAgICAgICAgCisgICAgICAgICAgICByZXR1cm4g
U3RyaW5nKGxpbmsudGFyZ2V0KCkpOworICAgICAgICBjYXNlIExpbmtUeXBlOiAgICAgICAgICAg
IAorICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhsaW5rLnR5cGUoKSk7CisgICAgICAgIGNhc2Ug
TGlua1NoZWV0OiAgICAgICAgICAgCisgICAgICAgICAgICByZXR1cm4gZ2V0RE9NU3R5bGVTaGVl
dChleGVjLCBsaW5rLnNoZWV0KCkpOwogICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9C
QVNFOiB7Ci0gICAgSFRNTEJhc2VFbGVtZW50SW1wbCAmYmFzZSA9IHN0YXRpY19jYXN0PEhUTUxC
YXNlRWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQor
CitWYWx1ZSBIVE1MRWxlbWVudDo6dGl0bGVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0Cit7CisgICAgSFRNTFRpdGxlRWxlbWVudEltcGwmIHRpdGxlID0gKnN0YXRpY19j
YXN0PEhUTUxUaXRsZUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBpZiAodG9rZW4gPT0gVGl0
bGVUZXh0KQorICAgICAgICByZXR1cm4gU3RyaW5nKHRpdGxlLnRleHQoKSk7CisgICAgcmV0dXJu
IFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6bWV0YUdldHRlcihFeGVjU3Rh
dGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MTWV0YUVsZW1lbnRJbXBsJiBt
ZXRhID0gKnN0YXRpY19jYXN0PEhUTUxNZXRhRWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIHN3
aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIEJhc2VIcmVmOiAgICAgICAgICAgIHJldHVybiBTdHJp
bmcoYmFzZS5ocmVmKCkpOwotICAgIGNhc2UgQmFzZVRhcmdldDogICAgICAgICAgcmV0dXJuIFN0
cmluZyhiYXNlLnRhcmdldCgpKTsKKyAgICAgICAgY2FzZSBNZXRhQ29udGVudDogICAgICAgICBy
ZXR1cm4gU3RyaW5nKG1ldGEuY29udGVudCgpKTsKKyAgICAgICAgY2FzZSBNZXRhSHR0cEVxdWl2
OiAgICAgICByZXR1cm4gU3RyaW5nKG1ldGEuaHR0cEVxdWl2KCkpOworICAgICAgICBjYXNlIE1l
dGFOYW1lOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcobWV0YS5uYW1lKCkpOworICAgICAgICBj
YXNlIE1ldGFTY2hlbWU6ICAgICAgICAgIHJldHVybiBTdHJpbmcobWV0YS5zY2hlbWUoKSk7CiAg
ICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX0lTSU5ERVg6IHsKLSAgICBIVE1MSXNJbmRl
eEVsZW1lbnRJbXBsICZpc2luZGV4ID0gc3RhdGljX2Nhc3Q8SFRNTElzSW5kZXhFbGVtZW50SW1w
bCAmPihlbGVtZW50KTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxF
bGVtZW50OjpiYXNlR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAorewor
ICAgIEhUTUxCYXNlRWxlbWVudEltcGwmIGJhc2UgPSAqc3RhdGljX2Nhc3Q8SFRNTEJhc2VFbGVt
ZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgSXNJbmRl
eEZvcm06ICAgICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYywgaXNpbmRleC5mb3JtKCkp
OyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVudAotICAgIGNhc2UgSXNJbmRleFByb21wdDogICAgICAg
ICAgcmV0dXJuIFN0cmluZyhpc2luZGV4LnByb21wdCgpKTsKLSAgICB9Ci0gIH0KLSAgYnJlYWs7
Ci0gIGNhc2UgSURfU1RZTEU6IHsKLSAgICBIVE1MU3R5bGVFbGVtZW50SW1wbCAmc3R5bGUgPSBz
dGF0aWNfY2FzdDxIVE1MU3R5bGVFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICBzd2l0Y2gg
KHRva2VuKSB7Ci0gICAgY2FzZSBTdHlsZURpc2FibGVkOiAgICAgICAgcmV0dXJuIEJvb2xlYW4o
c3R5bGUuZGlzYWJsZWQoKSk7Ci0gICAgY2FzZSBTdHlsZU1lZGlhOiAgICAgICAgICAgcmV0dXJu
IFN0cmluZyhzdHlsZS5tZWRpYSgpKTsKLSAgICBjYXNlIFN0eWxlVHlwZTogICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKHN0eWxlLnR5cGUoKSk7Ci0gICAgY2FzZSBTdHlsZVNoZWV0OiAgICAgICAg
ICAgcmV0dXJuIGdldERPTVN0eWxlU2hlZXQoZXhlYywgc3R5bGUuc2hlZXQoKSk7Ci0gICAgfQot
ICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX0JPRFk6IHsKLSAgICBIVE1MQm9keUVsZW1lbnRJbXBs
ICZib2R5ID0gc3RhdGljX2Nhc3Q8SFRNTEJvZHlFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAg
ICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBCb2R5QUxpbms6ICAgICAgICAgICByZXR1cm4g
U3RyaW5nKGJvZHkuYUxpbmsoKSk7Ci0gICAgY2FzZSBCb2R5QmFja2dyb3VuZDogICAgICByZXR1
cm4gU3RyaW5nKGJvZHkuYmFja2dyb3VuZCgpKTsKLSAgICBjYXNlIEJvZHlCZ0NvbG9yOiAgICAg
ICAgIHJldHVybiBTdHJpbmcoYm9keS5iZ0NvbG9yKCkpOwotICAgIGNhc2UgQm9keUxpbms6ICAg
ICAgICAgICAgcmV0dXJuIFN0cmluZyhib2R5LmxpbmsoKSk7Ci0gICAgY2FzZSBCb2R5VGV4dDog
ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGJvZHkudGV4dCgpKTsKLSAgICBjYXNlIEJvZHlWTGlu
azogICAgICAgICAgIHJldHVybiBTdHJpbmcoYm9keS52TGluaygpKTsKLSAgICBkZWZhdWx0Ogot
ICAgICAgLy8gVXBkYXRlIHRoZSBkb2N1bWVudCdzIGxheW91dCBiZWZvcmUgd2UgY29tcHV0ZSB0
aGVzZSBhdHRyaWJ1dGVzLgotICAgICAgRG9jdW1lbnRJbXBsICpkb2MgPSBib2R5LmdldERvY3Vt
ZW50KCk7Ci0gICAgICBpZiAoZG9jKQotICAgICAgICBkb2MtPnVwZGF0ZUxheW91dElnbm9yZVBl
bmRpbmdTdHlsZXNoZWV0cygpOwotICAgICAgS0hUTUxWaWV3ICp2aWV3ID0gZG9jID8gZG9jLT52
aWV3KCkgOiAwOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgICBjYXNlIEJvZHlTY3Jv
bGxMZWZ0OgotICAgICAgICAgICAgcmV0dXJuIE51bWJlcih2aWV3ID8gdmlldy0+Y29udGVudHNY
KCkgOiAwKTsKLSAgICAgICAgY2FzZSBCb2R5U2Nyb2xsVG9wOgotICAgICAgICAgICAgcmV0dXJu
IE51bWJlcih2aWV3ID8gdmlldy0+Y29udGVudHNZKCkgOiAwKTsKLSAgICAgICAgY2FzZSBCb2R5
U2Nyb2xsSGVpZ2h0OiAgIHJldHVybiBOdW1iZXIodmlldyA/IHZpZXctPmNvbnRlbnRzSGVpZ2h0
KCkgOiAwKTsKLSAgICAgICAgY2FzZSBCb2R5U2Nyb2xsV2lkdGg6ICAgIHJldHVybiBOdW1iZXIo
dmlldyA/IHZpZXctPmNvbnRlbnRzV2lkdGgoKSA6IDApOwotICAgICAgfQorICAgICAgICBjYXNl
IEJhc2VIcmVmOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYmFzZS5ocmVmKCkpOworICAgICAg
ICBjYXNlIEJhc2VUYXJnZXQ6ICAgICAgICAgIHJldHVybiBTdHJpbmcoYmFzZS50YXJnZXQoKSk7
CiAgICAgfQotICB9Ci0gIGJyZWFrOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KIAotICBj
YXNlIElEX0ZPUk06IHsKLSAgICBIVE1MRm9ybUVsZW1lbnRJbXBsICZmb3JtID0gc3RhdGljX2Nh
c3Q8SFRNTEZvcm1FbGVtZW50SW1wbCAmPihlbGVtZW50KTsKK1ZhbHVlIEhUTUxFbGVtZW50Ojpp
c0luZGV4R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAgIEhU
TUxJc0luZGV4RWxlbWVudEltcGwmIGlzaW5kZXggPSAqc3RhdGljX2Nhc3Q8SFRNTElzSW5kZXhF
bGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgRm9y
bUVsZW1lbnRzOiAgICAgICAgcmV0dXJuIGdldEhUTUxDb2xsZWN0aW9uKGV4ZWMsIGZvcm0uZWxl
bWVudHMoKS5nZXQoKSk7Ci0gICAgY2FzZSBGb3JtTGVuZ3RoOiAgICAgICAgICByZXR1cm4gTnVt
YmVyKGZvcm0ubGVuZ3RoKCkpOwotICAgIGNhc2UgRm9ybU5hbWU6ICAgICAgICAgICAgcmV0dXJu
IFN0cmluZyhmb3JtLm5hbWUoKSk7Ci0gICAgY2FzZSBGb3JtQWNjZXB0Q2hhcnNldDogICByZXR1
cm4gU3RyaW5nKGZvcm0uYWNjZXB0Q2hhcnNldCgpKTsKLSAgICBjYXNlIEZvcm1BY3Rpb246ICAg
ICAgICAgIHJldHVybiBTdHJpbmcoZm9ybS5hY3Rpb24oKSk7Ci0gICAgY2FzZSBGb3JtRW5jVHlw
ZTogICAgICAgICByZXR1cm4gU3RyaW5nKGZvcm0uZW5jdHlwZSgpKTsKLSAgICBjYXNlIEZvcm1N
ZXRob2Q6ICAgICAgICAgIHJldHVybiBTdHJpbmcoZm9ybS5tZXRob2QoKSk7Ci0gICAgY2FzZSBG
b3JtVGFyZ2V0OiAgICAgICAgICByZXR1cm4gU3RyaW5nKGZvcm0udGFyZ2V0KCkpOwotICAgIH0K
LSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9TRUxFQ1Q6IHsKLSAgICBIVE1MU2VsZWN0RWxlbWVu
dEltcGwgJnNlbGVjdCA9IHN0YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50SW1wbCAmPihlbGVt
ZW50KTsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBTZWxlY3RUeXBlOiAgICAgICAg
ICAgIHJldHVybiBTdHJpbmcoc2VsZWN0LnR5cGUoKSk7Ci0gICAgY2FzZSBTZWxlY3RTZWxlY3Rl
ZEluZGV4OiAgIHJldHVybiBOdW1iZXIoc2VsZWN0LnNlbGVjdGVkSW5kZXgoKSk7Ci0gICAgY2Fz
ZSBTZWxlY3RWYWx1ZTogICAgICAgICAgIHJldHVybiBTdHJpbmcoc2VsZWN0LnZhbHVlKCkpOwot
ICAgIGNhc2UgU2VsZWN0TGVuZ3RoOiAgICAgICAgICByZXR1cm4gTnVtYmVyKHNlbGVjdC5sZW5n
dGgoKSk7Ci0gICAgY2FzZSBTZWxlY3RGb3JtOiAgICAgICAgICAgIHJldHVybiBnZXRET01Ob2Rl
KGV4ZWMsIHNlbGVjdC5mb3JtKCkpOyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVudAotICAgIGNhc2Ug
U2VsZWN0T3B0aW9uczogICAgICAgICByZXR1cm4gZ2V0U2VsZWN0SFRNTENvbGxlY3Rpb24oZXhl
Yywgc2VsZWN0Lm9wdGlvbnNIVE1MQ29sbGVjdGlvbigpLmdldCgpLCAmc2VsZWN0KTsgLy8gdHlw
ZSBIVE1MQ29sbGVjdGlvbgotICAgIGNhc2UgU2VsZWN0RGlzYWJsZWQ6ICAgICAgICByZXR1cm4g
Qm9vbGVhbihzZWxlY3QuZGlzYWJsZWQoKSk7Ci0gICAgY2FzZSBTZWxlY3RNdWx0aXBsZTogICAg
ICAgIHJldHVybiBCb29sZWFuKHNlbGVjdC5tdWx0aXBsZSgpKTsKLSAgICBjYXNlIFNlbGVjdE5h
bWU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhzZWxlY3QubmFtZSgpKTsKLSAgICBjYXNlIFNl
bGVjdFNpemU6ICAgICAgICAgICAgcmV0dXJuIE51bWJlcihzZWxlY3Quc2l6ZSgpKTsKLSAgICBj
YXNlIFNlbGVjdFRhYkluZGV4OiAgICAgICAgcmV0dXJuIE51bWJlcihzZWxlY3QudGFiSW5kZXgo
KSk7CisgICAgICAgIGNhc2UgSXNJbmRleEZvcm06ICAgICAgICAgICAgcmV0dXJuIGdldERPTU5v
ZGUoZXhlYywgaXNpbmRleC5mb3JtKCkpOyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVudAorICAgICAg
ICBjYXNlIElzSW5kZXhQcm9tcHQ6ICAgICAgICAgIHJldHVybiBTdHJpbmcoaXNpbmRleC5wcm9t
cHQoKSk7CiAgICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX09QVEdST1VQOiB7Ci0gICAg
SFRNTE9wdEdyb3VwRWxlbWVudEltcGwgJm9wdGdyb3VwID0gc3RhdGljX2Nhc3Q8SFRNTE9wdEdy
b3VwRWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQor
CitWYWx1ZSBIVE1MRWxlbWVudDo6c3R5bGVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0Cit7CisgICAgSFRNTFN0eWxlRWxlbWVudEltcGwmIHN0eWxlID0gKnN0YXRpY19j
YXN0PEhUTUxTdHlsZUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7
Ci0gICAgY2FzZSBPcHRHcm91cERpc2FibGVkOiAgICAgICAgcmV0dXJuIEJvb2xlYW4ob3B0Z3Jv
dXAuZGlzYWJsZWQoKSk7Ci0gICAgY2FzZSBPcHRHcm91cExhYmVsOiAgICAgICAgICAgcmV0dXJu
IFN0cmluZyhvcHRncm91cC5sYWJlbCgpKTsKLSAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2Ug
SURfT1BUSU9OOiB7Ci0gICAgSFRNTE9wdGlvbkVsZW1lbnRJbXBsICZvcHRpb24gPSBzdGF0aWNf
Y2FzdDxIVE1MT3B0aW9uRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tl
bikgewotICAgIGNhc2UgT3B0aW9uRm9ybTogICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShl
eGVjLG9wdGlvbi5mb3JtKCkpOyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVudAotICAgIGNhc2UgT3B0
aW9uRGVmYXVsdFNlbGVjdGVkOiByZXR1cm4gQm9vbGVhbihvcHRpb24uZGVmYXVsdFNlbGVjdGVk
KCkpOwotICAgIGNhc2UgT3B0aW9uVGV4dDogICAgICAgICAgICByZXR1cm4gU3RyaW5nKG9wdGlv
bi50ZXh0KCkpOwotICAgIGNhc2UgT3B0aW9uSW5kZXg6ICAgICAgICAgICByZXR1cm4gTnVtYmVy
KG9wdGlvbi5pbmRleCgpKTsKLSAgICBjYXNlIE9wdGlvbkRpc2FibGVkOiAgICAgICAgcmV0dXJu
IEJvb2xlYW4ob3B0aW9uLmRpc2FibGVkKCkpOwotICAgIGNhc2UgT3B0aW9uTGFiZWw6ICAgICAg
ICAgICByZXR1cm4gU3RyaW5nKG9wdGlvbi5sYWJlbCgpKTsKLSAgICBjYXNlIE9wdGlvblNlbGVj
dGVkOiAgICAgICAgcmV0dXJuIEJvb2xlYW4ob3B0aW9uLnNlbGVjdGVkKCkpOwotICAgIGNhc2Ug
T3B0aW9uVmFsdWU6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKG9wdGlvbi52YWx1ZSgpKTsKLSAg
ICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfSU5QVVQ6IHsKLSAgICBIVE1MSW5wdXRFbGVt
ZW50SW1wbCAmaW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50SW1wbCAmPihlbGVt
ZW50KTsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBJbnB1dERlZmF1bHRWYWx1ZTog
ICAgcmV0dXJuIFN0cmluZyhpbnB1dC5kZWZhdWx0VmFsdWUoKSk7Ci0gICAgY2FzZSBJbnB1dERl
ZmF1bHRDaGVja2VkOiAgcmV0dXJuIEJvb2xlYW4oaW5wdXQuZGVmYXVsdENoZWNrZWQoKSk7Ci0g
ICAgY2FzZSBJbnB1dEZvcm06ICAgICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyxpbnB1
dC5mb3JtKCkpOyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVudAotICAgIGNhc2UgSW5wdXRBY2NlcHQ6
ICAgICAgICAgIHJldHVybiBTdHJpbmcoaW5wdXQuYWNjZXB0KCkpOwotICAgIGNhc2UgSW5wdXRB
Y2Nlc3NLZXk6ICAgICAgIHJldHVybiBTdHJpbmcoaW5wdXQuYWNjZXNzS2V5KCkpOwotICAgIGNh
c2UgSW5wdXRBbGlnbjogICAgICAgICAgIHJldHVybiBTdHJpbmcoaW5wdXQuYWxpZ24oKSk7Ci0g
ICAgY2FzZSBJbnB1dEFsdDogICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpbnB1dC5hbHQoKSk7
Ci0gICAgY2FzZSBJbnB1dENoZWNrZWQ6ICAgICAgICAgcmV0dXJuIEJvb2xlYW4oaW5wdXQuY2hl
Y2tlZCgpKTsKLSAgICBjYXNlIElucHV0RGlzYWJsZWQ6ICAgICAgICByZXR1cm4gQm9vbGVhbihp
bnB1dC5kaXNhYmxlZCgpKTsKLSAgICBjYXNlIElucHV0TWF4TGVuZ3RoOiAgICAgICByZXR1cm4g
TnVtYmVyKGlucHV0Lm1heExlbmd0aCgpKTsKLSAgICBjYXNlIElucHV0TmFtZTogICAgICAgICAg
ICByZXR1cm4gU3RyaW5nKGlucHV0Lm5hbWUoKSk7Ci0gICAgY2FzZSBJbnB1dFJlYWRPbmx5OiAg
ICAgICAgcmV0dXJuIEJvb2xlYW4oaW5wdXQucmVhZE9ubHkoKSk7Ci0gICAgY2FzZSBJbnB1dFNl
bGVjdGlvblN0YXJ0OiAgcmV0dXJuIGdldElucHV0U2VsZWN0aW9uU3RhcnQoaW5wdXQpOwotICAg
IGNhc2UgSW5wdXRTZWxlY3Rpb25FbmQ6ICAgIHJldHVybiBnZXRJbnB1dFNlbGVjdGlvbkVuZChp
bnB1dCk7Ci0gICAgY2FzZSBJbnB1dFNpemU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpbnB1
dC5zaXplRE9NKCkpOwotICAgIGNhc2UgSW5wdXRTcmM6ICAgICAgICAgICAgIHJldHVybiBTdHJp
bmcoaW5wdXQuc3JjKCkpOwotICAgIGNhc2UgSW5wdXRUYWJJbmRleDogICAgICAgIHJldHVybiBO
dW1iZXIoaW5wdXQudGFiSW5kZXgoKSk7Ci0gICAgY2FzZSBJbnB1dFR5cGU6ICAgICAgICAgICAg
cmV0dXJuIFN0cmluZyhpbnB1dC50eXBlKCkpOwotICAgIGNhc2UgSW5wdXRVc2VNYXA6ICAgICAg
ICAgIHJldHVybiBTdHJpbmcoaW5wdXQudXNlTWFwKCkpOwotICAgIGNhc2UgSW5wdXRWYWx1ZTog
ICAgICAgICAgIHJldHVybiBTdHJpbmcoaW5wdXQudmFsdWUoKSk7CisgICAgICAgIGNhc2UgU3R5
bGVEaXNhYmxlZDogICAgICAgIHJldHVybiBCb29sZWFuKHN0eWxlLmRpc2FibGVkKCkpOworICAg
ICAgICBjYXNlIFN0eWxlTWVkaWE6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHN0eWxlLm1lZGlh
KCkpOworICAgICAgICBjYXNlIFN0eWxlVHlwZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKHN0
eWxlLnR5cGUoKSk7CisgICAgICAgIGNhc2UgU3R5bGVTaGVldDogICAgICAgICAgIHJldHVybiBn
ZXRET01TdHlsZVNoZWV0KGV4ZWMsIHN0eWxlLnNoZWV0KCkpOwogICAgIH0KLSAgfQotICBicmVh
azsKLSAgY2FzZSBJRF9URVhUQVJFQTogewotICAgIEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBsICZ0
ZXh0YXJlYSA9IHN0YXRpY19jYXN0PEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBsICY+KGVsZW1lbnQp
OwotICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIFRleHRBcmVhRGVmYXVsdFZhbHVlOiAg
ICByZXR1cm4gU3RyaW5nKHRleHRhcmVhLmRlZmF1bHRWYWx1ZSgpKTsKLSAgICBjYXNlIFRleHRB
cmVhRm9ybTogICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLHRleHRhcmVhLmZvcm0o
KSk7IC8vIHR5cGUgSFRNTEZvcm1FbGVtZW50Ci0gICAgY2FzZSBUZXh0QXJlYUFjY2Vzc0tleTog
ICAgICAgcmV0dXJuIFN0cmluZyh0ZXh0YXJlYS5hY2Nlc3NLZXkoKSk7Ci0gICAgY2FzZSBUZXh0
QXJlYUNvbHM6ICAgICAgICAgICAgcmV0dXJuIE51bWJlcih0ZXh0YXJlYS5jb2xzKCkpOwotICAg
IGNhc2UgVGV4dEFyZWFEaXNhYmxlZDogICAgICAgIHJldHVybiBCb29sZWFuKHRleHRhcmVhLmRp
c2FibGVkKCkpOwotICAgIGNhc2UgVGV4dEFyZWFOYW1lOiAgICAgICAgICAgIHJldHVybiBTdHJp
bmcodGV4dGFyZWEubmFtZSgpKTsKLSAgICBjYXNlIFRleHRBcmVhUmVhZE9ubHk6ICAgICAgICBy
ZXR1cm4gQm9vbGVhbih0ZXh0YXJlYS5yZWFkT25seSgpKTsKLSAgICBjYXNlIFRleHRBcmVhUm93
czogICAgICAgICAgICByZXR1cm4gTnVtYmVyKHRleHRhcmVhLnJvd3MoKSk7Ci0gICAgY2FzZSBU
ZXh0QXJlYVNlbGVjdGlvblN0YXJ0OiAgcmV0dXJuIE51bWJlcih0ZXh0YXJlYS5zZWxlY3Rpb25T
dGFydCgpKTsKLSAgICBjYXNlIFRleHRBcmVhU2VsZWN0aW9uRW5kOiAgICByZXR1cm4gTnVtYmVy
KHRleHRhcmVhLnNlbGVjdGlvbkVuZCgpKTsKLSAgICBjYXNlIFRleHRBcmVhVGFiSW5kZXg6ICAg
ICAgICByZXR1cm4gTnVtYmVyKHRleHRhcmVhLnRhYkluZGV4KCkpOwotICAgIGNhc2UgVGV4dEFy
ZWFUeXBlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcodGV4dGFyZWEudHlwZSgpKTsKLSAgICBj
YXNlIFRleHRBcmVhVmFsdWU6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRleHRhcmVhLnZhbHVl
KCkpOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OmJv
ZHlHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTEJv
ZHlFbGVtZW50SW1wbCYgYm9keSA9ICpzdGF0aWNfY2FzdDxIVE1MQm9keUVsZW1lbnRJbXBsKj4o
aW1wbCgpKTsKKwlzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgQm9keUFMaW5rOiAgICAg
ICAgICAgcmV0dXJuIFN0cmluZyhib2R5LmFMaW5rKCkpOworICAgICAgICBjYXNlIEJvZHlCYWNr
Z3JvdW5kOiAgICAgIHJldHVybiBTdHJpbmcoYm9keS5iYWNrZ3JvdW5kKCkpOworICAgICAgICBj
YXNlIEJvZHlCZ0NvbG9yOiAgICAgICAgIHJldHVybiBTdHJpbmcoYm9keS5iZ0NvbG9yKCkpOwor
ICAgICAgICBjYXNlIEJvZHlMaW5rOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYm9keS5saW5r
KCkpOworICAgICAgICBjYXNlIEJvZHlUZXh0OiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYm9k
eS50ZXh0KCkpOworICAgICAgICBjYXNlIEJvZHlWTGluazogICAgICAgICAgIHJldHVybiBTdHJp
bmcoYm9keS52TGluaygpKTsKKyAgICAgICAgZGVmYXVsdDogeworICAgICAgICAgICAgLy8gVXBk
YXRlIHRoZSBkb2N1bWVudCdzIGxheW91dCBiZWZvcmUgd2UgY29tcHV0ZSB0aGVzZSBhdHRyaWJ1
dGVzLgorICAgICAgICAgICAgRG9jdW1lbnRJbXBsICpkb2MgPSBib2R5LmdldERvY3VtZW50KCk7
CisgICAgICAgICAgICBpZiAoZG9jKQorICAgICAgICAgICAgICAgIGRvYy0+dXBkYXRlTGF5b3V0
SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CisgICAgICAgICAgICBLSFRNTFZpZXcgKnZpZXcg
PSBkb2MgPyBkb2MtPnZpZXcoKSA6IDA7CisgICAgICAgICAgICBzd2l0Y2ggKHRva2VuKSB7Cisg
ICAgICAgICAgICAgICAgY2FzZSBCb2R5U2Nyb2xsTGVmdDoKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIE51bWJlcih2aWV3ID8gdmlldy0+Y29udGVudHNYKCkgOiAwKTsKKyAgICAgICAgICAg
ICAgICBjYXNlIEJvZHlTY3JvbGxUb3A6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOdW1i
ZXIodmlldyA/IHZpZXctPmNvbnRlbnRzWSgpIDogMCk7CisgICAgICAgICAgICAgICAgY2FzZSBC
b2R5U2Nyb2xsSGVpZ2h0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTnVtYmVyKHZpZXcg
PyB2aWV3LT5jb250ZW50c0hlaWdodCgpIDogMCk7CisgICAgICAgICAgICAgICAgY2FzZSBCb2R5
U2Nyb2xsV2lkdGg6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOdW1iZXIodmlldyA/IHZp
ZXctPmNvbnRlbnRzV2lkdGgoKSA6IDApOworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAg
fQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX0JVVFRPTjogewotICAgIEhUTUxCdXR0b25FbGVt
ZW50SW1wbCAmYnV0dG9uID0gc3RhdGljX2Nhc3Q8SFRNTEJ1dHRvbkVsZW1lbnRJbXBsICY+KGVs
ZW1lbnQpOwotICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIEJ1dHRvbkZvcm06ICAgICAg
ICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyxidXR0b24uZm9ybSgpKTsgLy8gdHlwZSBIVE1M
Rm9ybUVsZW1lbnQKLSAgICBjYXNlIEJ1dHRvbkFjY2Vzc0tleTogICAgICAgcmV0dXJuIFN0cmlu
ZyhidXR0b24uYWNjZXNzS2V5KCkpOwotICAgIGNhc2UgQnV0dG9uRGlzYWJsZWQ6ICAgICAgICBy
ZXR1cm4gQm9vbGVhbihidXR0b24uZGlzYWJsZWQoKSk7Ci0gICAgY2FzZSBCdXR0b25OYW1lOiAg
ICAgICAgICAgIHJldHVybiBTdHJpbmcoYnV0dG9uLm5hbWUoKSk7Ci0gICAgY2FzZSBCdXR0b25U
YWJJbmRleDogICAgICAgIHJldHVybiBOdW1iZXIoYnV0dG9uLnRhYkluZGV4KCkpOwotICAgIGNh
c2UgQnV0dG9uVHlwZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGJ1dHRvbi50eXBlKCkpOwot
ICAgIGNhc2UgQnV0dG9uVmFsdWU6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGJ1dHRvbi52YWx1
ZSgpKTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50Ojpm
b3JtR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxG
b3JtRWxlbWVudEltcGwmIGZvcm0gPSAqc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50SW1wbCo+
KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNlIEZvcm1FbGVtZW50
czogICAgICAgIHJldHVybiBnZXRIVE1MQ29sbGVjdGlvbihleGVjLCBmb3JtLmVsZW1lbnRzKCku
Z2V0KCkpOworICAgICAgICBjYXNlIEZvcm1MZW5ndGg6ICAgICAgICAgIHJldHVybiBOdW1iZXIo
Zm9ybS5sZW5ndGgoKSk7CisgICAgICAgIGNhc2UgRm9ybU5hbWU6ICAgICAgICAgICAgcmV0dXJu
IFN0cmluZyhmb3JtLm5hbWUoKSk7CisgICAgICAgIGNhc2UgRm9ybUFjY2VwdENoYXJzZXQ6ICAg
cmV0dXJuIFN0cmluZyhmb3JtLmFjY2VwdENoYXJzZXQoKSk7CisgICAgICAgIGNhc2UgRm9ybUFj
dGlvbjogICAgICAgICAgcmV0dXJuIFN0cmluZyhmb3JtLmFjdGlvbigpKTsKKyAgICAgICAgY2Fz
ZSBGb3JtRW5jVHlwZTogICAgICAgICByZXR1cm4gU3RyaW5nKGZvcm0uZW5jdHlwZSgpKTsKKyAg
ICAgICAgY2FzZSBGb3JtTWV0aG9kOiAgICAgICAgICByZXR1cm4gU3RyaW5nKGZvcm0ubWV0aG9k
KCkpOworICAgICAgICBjYXNlIEZvcm1UYXJnZXQ6ICAgICAgICAgIHJldHVybiBTdHJpbmcoZm9y
bS50YXJnZXQoKSk7CiAgICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX0xBQkVMOiB7Ci0g
ICAgSFRNTExhYmVsRWxlbWVudEltcGwgJmxhYmVsID0gc3RhdGljX2Nhc3Q8SFRNTExhYmVsRWxl
bWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgTGFi
ZWxGb3JtOiAgICAgICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsbGFiZWwuZm9ybSgpKTsg
Ly8gdHlwZSBIVE1MRm9ybUVsZW1lbnQKLSAgICBjYXNlIExhYmVsQWNjZXNzS2V5OiAgICAgICBy
ZXR1cm4gU3RyaW5nKGxhYmVsLmFjY2Vzc0tleSgpKTsKLSAgICBjYXNlIExhYmVsSHRtbEZvcjog
ICAgICAgICByZXR1cm4gU3RyaW5nKGxhYmVsLmh0bWxGb3IoKSk7CisgICAgcmV0dXJuIFVuZGVm
aW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6c2VsZWN0R2V0dGVyKEV4ZWNTdGF0ZSog
ZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxTZWxlY3RFbGVtZW50SW1wbCYgc2Vs
ZWN0ID0gKnN0YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAg
c3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNlIFNlbGVjdFR5cGU6ICAgICAgICAgICAgcmV0
dXJuIFN0cmluZyhzZWxlY3QudHlwZSgpKTsKKyAgICAgICAgY2FzZSBTZWxlY3RTZWxlY3RlZElu
ZGV4OiAgIHJldHVybiBOdW1iZXIoc2VsZWN0LnNlbGVjdGVkSW5kZXgoKSk7CisgICAgICAgIGNh
c2UgU2VsZWN0VmFsdWU6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHNlbGVjdC52YWx1ZSgpKTsK
KyAgICAgICAgY2FzZSBTZWxlY3RMZW5ndGg6ICAgICAgICAgIHJldHVybiBOdW1iZXIoc2VsZWN0
Lmxlbmd0aCgpKTsKKyAgICAgICAgY2FzZSBTZWxlY3RGb3JtOiAgICAgICAgICAgIHJldHVybiBn
ZXRET01Ob2RlKGV4ZWMsIHNlbGVjdC5mb3JtKCkpOyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVudAor
ICAgICAgICBjYXNlIFNlbGVjdE9wdGlvbnM6ICAgICAgICAgcmV0dXJuIGdldFNlbGVjdEhUTUxD
b2xsZWN0aW9uKGV4ZWMsIHNlbGVjdC5vcHRpb25zSFRNTENvbGxlY3Rpb24oKS5nZXQoKSwgJnNl
bGVjdCk7IC8vIHR5cGUgSFRNTENvbGxlY3Rpb24KKyAgICAgICAgY2FzZSBTZWxlY3REaXNhYmxl
ZDogICAgICAgIHJldHVybiBCb29sZWFuKHNlbGVjdC5kaXNhYmxlZCgpKTsKKyAgICAgICAgY2Fz
ZSBTZWxlY3RNdWx0aXBsZTogICAgICAgIHJldHVybiBCb29sZWFuKHNlbGVjdC5tdWx0aXBsZSgp
KTsKKyAgICAgICAgY2FzZSBTZWxlY3ROYW1lOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoc2Vs
ZWN0Lm5hbWUoKSk7CisgICAgICAgIGNhc2UgU2VsZWN0U2l6ZTogICAgICAgICAgICByZXR1cm4g
TnVtYmVyKHNlbGVjdC5zaXplKCkpOworICAgICAgICBjYXNlIFNlbGVjdFRhYkluZGV4OiAgICAg
ICAgcmV0dXJuIE51bWJlcihzZWxlY3QudGFiSW5kZXgoKSk7CiAgICAgfQotICB9Ci0gIGJyZWFr
OwotICBjYXNlIElEX0ZJRUxEU0VUOiB7Ci0gICAgSFRNTEZpZWxkU2V0RWxlbWVudEltcGwgJmZp
ZWxkU2V0ID0gc3RhdGljX2Nhc3Q8SFRNTEZpZWxkU2V0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7
CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6b3B0R3Jv
dXBHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTE9w
dEdyb3VwRWxlbWVudEltcGwmIG9wdGdyb3VwID0gKnN0YXRpY19jYXN0PEhUTUxPcHRHcm91cEVs
ZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBGaWVs
ZFNldEZvcm06ICAgICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyxmaWVsZFNldC5mb3Jt
KCkpOyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVudAorICAgICAgICBjYXNlIE9wdEdyb3VwRGlzYWJs
ZWQ6ICAgICAgICByZXR1cm4gQm9vbGVhbihvcHRncm91cC5kaXNhYmxlZCgpKTsKKyAgICAgICAg
Y2FzZSBPcHRHcm91cExhYmVsOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhvcHRncm91cC5sYWJl
bCgpKTsKICAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfTEVHRU5EOiB7Ci0gICAgSFRN
TExlZ2VuZEVsZW1lbnRJbXBsICZsZWdlbmQgPSBzdGF0aWNfY2FzdDxIVE1MTGVnZW5kRWxlbWVu
dEltcGwgJj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgTGVnZW5k
Rm9ybTogICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLGxlZ2VuZC5mb3JtKCkpOyAv
LyB0eXBlIEhUTUxGb3JtRWxlbWVudAotICAgIGNhc2UgTGVnZW5kQWNjZXNzS2V5OiAgICAgICBy
ZXR1cm4gU3RyaW5nKGxlZ2VuZC5hY2Nlc3NLZXkoKSk7Ci0gICAgY2FzZSBMZWdlbmRBbGlnbjog
ICAgICAgICAgIHJldHVybiBTdHJpbmcobGVnZW5kLmFsaWduKCkpOworICAgIHJldHVybiBVbmRl
ZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6Om9wdGlvbkdldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MT3B0aW9uRWxlbWVudEltcGwmIG9w
dGlvbiA9ICpzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudEltcGwqPihpbXBsKCkpOworICAg
IHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBPcHRpb25Gb3JtOiAgICAgICAgICAgIHJl
dHVybiBnZXRET01Ob2RlKGV4ZWMsb3B0aW9uLmZvcm0oKSk7IC8vIHR5cGUgSFRNTEZvcm1FbGVt
ZW50CisgICAgICAgIGNhc2UgT3B0aW9uRGVmYXVsdFNlbGVjdGVkOiByZXR1cm4gQm9vbGVhbihv
cHRpb24uZGVmYXVsdFNlbGVjdGVkKCkpOworICAgICAgICBjYXNlIE9wdGlvblRleHQ6ICAgICAg
ICAgICAgcmV0dXJuIFN0cmluZyhvcHRpb24udGV4dCgpKTsKKyAgICAgICAgY2FzZSBPcHRpb25J
bmRleDogICAgICAgICAgIHJldHVybiBOdW1iZXIob3B0aW9uLmluZGV4KCkpOworICAgICAgICBj
YXNlIE9wdGlvbkRpc2FibGVkOiAgICAgICAgcmV0dXJuIEJvb2xlYW4ob3B0aW9uLmRpc2FibGVk
KCkpOworICAgICAgICBjYXNlIE9wdGlvbkxhYmVsOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhv
cHRpb24ubGFiZWwoKSk7CisgICAgICAgIGNhc2UgT3B0aW9uU2VsZWN0ZWQ6ICAgICAgICByZXR1
cm4gQm9vbGVhbihvcHRpb24uc2VsZWN0ZWQoKSk7CisgICAgICAgIGNhc2UgT3B0aW9uVmFsdWU6
ICAgICAgICAgICByZXR1cm4gU3RyaW5nKG9wdGlvbi52YWx1ZSgpKTsKICAgICB9Ci0gIH0KLSAg
YnJlYWs7Ci0gIGNhc2UgSURfVUw6IHsKLSAgICBIVE1MVUxpc3RFbGVtZW50SW1wbCAmdUxpc3Qg
PSBzdGF0aWNfY2FzdDxIVE1MVUxpc3RFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICByZXR1
cm4gVW5kZWZpbmVkKCk7Cit9CisKK3N0YXRpYyBWYWx1ZSBnZXRJbnB1dFNlbGVjdGlvblN0YXJ0
KEhUTUxJbnB1dEVsZW1lbnRJbXBsICZpbnB1dCkKK3sKKyAgICBpZiAoaW5wdXQuY2FuSGF2ZVNl
bGVjdGlvbigpKQorICAgICAgICByZXR1cm4gTnVtYmVyKGlucHV0LnNlbGVjdGlvblN0YXJ0KCkp
OworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworc3RhdGljIFZhbHVlIGdldElucHV0U2Vs
ZWN0aW9uRW5kKEhUTUxJbnB1dEVsZW1lbnRJbXBsICZpbnB1dCkKK3sKKyAgICBpZiAoaW5wdXQu
Y2FuSGF2ZVNlbGVjdGlvbigpKQorICAgICAgICByZXR1cm4gTnVtYmVyKGlucHV0LnNlbGVjdGlv
bkVuZCgpKTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50
OjppbnB1dEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBI
VE1MSW5wdXRFbGVtZW50SW1wbCYgaW5wdXQgPSAqc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVu
dEltcGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIFVMaXN0Q29t
cGFjdDogICAgICAgICByZXR1cm4gQm9vbGVhbih1TGlzdC5jb21wYWN0KCkpOwotICAgIGNhc2Ug
VUxpc3RUeXBlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcodUxpc3QudHlwZSgpKTsKKyAgICAg
ICAgY2FzZSBJbnB1dERlZmF1bHRWYWx1ZTogICAgcmV0dXJuIFN0cmluZyhpbnB1dC5kZWZhdWx0
VmFsdWUoKSk7CisgICAgICAgIGNhc2UgSW5wdXREZWZhdWx0Q2hlY2tlZDogIHJldHVybiBCb29s
ZWFuKGlucHV0LmRlZmF1bHRDaGVja2VkKCkpOworICAgICAgICBjYXNlIElucHV0Rm9ybTogICAg
ICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLGlucHV0LmZvcm0oKSk7IC8vIHR5cGUgSFRN
TEZvcm1FbGVtZW50CisgICAgICAgIGNhc2UgSW5wdXRBY2NlcHQ6ICAgICAgICAgIHJldHVybiBT
dHJpbmcoaW5wdXQuYWNjZXB0KCkpOworICAgICAgICBjYXNlIElucHV0QWNjZXNzS2V5OiAgICAg
ICByZXR1cm4gU3RyaW5nKGlucHV0LmFjY2Vzc0tleSgpKTsKKyAgICAgICAgY2FzZSBJbnB1dEFs
aWduOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpbnB1dC5hbGlnbigpKTsKKyAgICAgICAgY2Fz
ZSBJbnB1dEFsdDogICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpbnB1dC5hbHQoKSk7CisgICAg
ICAgIGNhc2UgSW5wdXRDaGVja2VkOiAgICAgICAgIHJldHVybiBCb29sZWFuKGlucHV0LmNoZWNr
ZWQoKSk7CisgICAgICAgIGNhc2UgSW5wdXREaXNhYmxlZDogICAgICAgIHJldHVybiBCb29sZWFu
KGlucHV0LmRpc2FibGVkKCkpOworICAgICAgICBjYXNlIElucHV0TWF4TGVuZ3RoOiAgICAgICBy
ZXR1cm4gTnVtYmVyKGlucHV0Lm1heExlbmd0aCgpKTsKKyAgICAgICAgY2FzZSBJbnB1dE5hbWU6
ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpbnB1dC5uYW1lKCkpOworICAgICAgICBjYXNlIElu
cHV0UmVhZE9ubHk6ICAgICAgICByZXR1cm4gQm9vbGVhbihpbnB1dC5yZWFkT25seSgpKTsKKyAg
ICAgICAgY2FzZSBJbnB1dFNlbGVjdGlvblN0YXJ0OiAgcmV0dXJuIGdldElucHV0U2VsZWN0aW9u
U3RhcnQoaW5wdXQpOworICAgICAgICBjYXNlIElucHV0U2VsZWN0aW9uRW5kOiAgICByZXR1cm4g
Z2V0SW5wdXRTZWxlY3Rpb25FbmQoaW5wdXQpOworICAgICAgICBjYXNlIElucHV0U2l6ZTogICAg
ICAgICAgICByZXR1cm4gU3RyaW5nKGlucHV0LnNpemVET00oKSk7CisgICAgICAgIGNhc2UgSW5w
dXRTcmM6ICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoaW5wdXQuc3JjKCkpOworICAgICAgICBj
YXNlIElucHV0VGFiSW5kZXg6ICAgICAgICByZXR1cm4gTnVtYmVyKGlucHV0LnRhYkluZGV4KCkp
OworICAgICAgICBjYXNlIElucHV0VHlwZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGlucHV0
LnR5cGUoKSk7CisgICAgICAgIGNhc2UgSW5wdXRVc2VNYXA6ICAgICAgICAgIHJldHVybiBTdHJp
bmcoaW5wdXQudXNlTWFwKCkpOworICAgICAgICBjYXNlIElucHV0VmFsdWU6ICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKGlucHV0LnZhbHVlKCkpOwogICAgIH0KLSAgfQotICBicmVhazsKLSAgY2Fz
ZSBJRF9PTDogewotICAgIEhUTUxPTGlzdEVsZW1lbnRJbXBsICZvTGlzdCA9IHN0YXRpY19jYXN0
PEhUTUxPTGlzdEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgIHN3aXRjaCAodG9rZW4pIHsK
LSAgICBjYXNlIE9MaXN0Q29tcGFjdDogICAgICAgICByZXR1cm4gQm9vbGVhbihvTGlzdC5jb21w
YWN0KCkpOwotICAgIGNhc2UgT0xpc3RTdGFydDogICAgICAgICAgIHJldHVybiBOdW1iZXIob0xp
c3Quc3RhcnQoKSk7Ci0gICAgY2FzZSBPTGlzdFR5cGU6ICAgICAgICAgICAgcmV0dXJuIFN0cmlu
ZyhvTGlzdC50eXBlKCkpOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRN
TEVsZW1lbnQ6OnRleHRBcmVhR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25z
dAoreworICAgIEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBsJiB0ZXh0YXJlYSA9ICpzdGF0aWNfY2Fz
dDxIVE1MVGV4dEFyZWFFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikg
eworICAgICAgICBjYXNlIFRleHRBcmVhRGVmYXVsdFZhbHVlOiAgICByZXR1cm4gU3RyaW5nKHRl
eHRhcmVhLmRlZmF1bHRWYWx1ZSgpKTsKKyAgICAgICAgY2FzZSBUZXh0QXJlYUZvcm06ICAgICAg
ICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyx0ZXh0YXJlYS5mb3JtKCkpOyAvLyB0eXBlIEhU
TUxGb3JtRWxlbWVudAorICAgICAgICBjYXNlIFRleHRBcmVhQWNjZXNzS2V5OiAgICAgICByZXR1
cm4gU3RyaW5nKHRleHRhcmVhLmFjY2Vzc0tleSgpKTsKKyAgICAgICAgY2FzZSBUZXh0QXJlYUNv
bHM6ICAgICAgICAgICAgcmV0dXJuIE51bWJlcih0ZXh0YXJlYS5jb2xzKCkpOworICAgICAgICBj
YXNlIFRleHRBcmVhRGlzYWJsZWQ6ICAgICAgICByZXR1cm4gQm9vbGVhbih0ZXh0YXJlYS5kaXNh
YmxlZCgpKTsKKyAgICAgICAgY2FzZSBUZXh0QXJlYU5hbWU6ICAgICAgICAgICAgcmV0dXJuIFN0
cmluZyh0ZXh0YXJlYS5uYW1lKCkpOworICAgICAgICBjYXNlIFRleHRBcmVhUmVhZE9ubHk6ICAg
ICAgICByZXR1cm4gQm9vbGVhbih0ZXh0YXJlYS5yZWFkT25seSgpKTsKKyAgICAgICAgY2FzZSBU
ZXh0QXJlYVJvd3M6ICAgICAgICAgICAgcmV0dXJuIE51bWJlcih0ZXh0YXJlYS5yb3dzKCkpOwor
ICAgICAgICBjYXNlIFRleHRBcmVhU2VsZWN0aW9uU3RhcnQ6ICByZXR1cm4gTnVtYmVyKHRleHRh
cmVhLnNlbGVjdGlvblN0YXJ0KCkpOworICAgICAgICBjYXNlIFRleHRBcmVhU2VsZWN0aW9uRW5k
OiAgICByZXR1cm4gTnVtYmVyKHRleHRhcmVhLnNlbGVjdGlvbkVuZCgpKTsKKyAgICAgICAgY2Fz
ZSBUZXh0QXJlYVRhYkluZGV4OiAgICAgICAgcmV0dXJuIE51bWJlcih0ZXh0YXJlYS50YWJJbmRl
eCgpKTsKKyAgICAgICAgY2FzZSBUZXh0QXJlYVR5cGU6ICAgICAgICAgICAgcmV0dXJuIFN0cmlu
Zyh0ZXh0YXJlYS50eXBlKCkpOworICAgICAgICBjYXNlIFRleHRBcmVhVmFsdWU6ICAgICAgICAg
ICByZXR1cm4gU3RyaW5nKHRleHRhcmVhLnZhbHVlKCkpOwogICAgIH0KLSAgfQotICBicmVhazsK
LSAgY2FzZSBJRF9ETDogewotICAgIEhUTUxETGlzdEVsZW1lbnRJbXBsICZkTGlzdCA9IHN0YXRp
Y19jYXN0PEhUTUxETGlzdEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgIHJldHVybiBVbmRl
ZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OmJ1dHRvbkdldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MQnV0dG9uRWxlbWVudEltcGwmIGJ1
dHRvbiA9ICpzdGF0aWNfY2FzdDxIVE1MQnV0dG9uRWxlbWVudEltcGwqPihpbXBsKCkpOwogICAg
IHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIERMaXN0Q29tcGFjdDogICAgICAgICByZXR1cm4g
Qm9vbGVhbihkTGlzdC5jb21wYWN0KCkpOworICAgICAgICBjYXNlIEJ1dHRvbkZvcm06ICAgICAg
ICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyxidXR0b24uZm9ybSgpKTsgLy8gdHlwZSBIVE1M
Rm9ybUVsZW1lbnQKKyAgICAgICAgY2FzZSBCdXR0b25BY2Nlc3NLZXk6ICAgICAgIHJldHVybiBT
dHJpbmcoYnV0dG9uLmFjY2Vzc0tleSgpKTsKKyAgICAgICAgY2FzZSBCdXR0b25EaXNhYmxlZDog
ICAgICAgIHJldHVybiBCb29sZWFuKGJ1dHRvbi5kaXNhYmxlZCgpKTsKKyAgICAgICAgY2FzZSBC
dXR0b25OYW1lOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYnV0dG9uLm5hbWUoKSk7CisgICAg
ICAgIGNhc2UgQnV0dG9uVGFiSW5kZXg6ICAgICAgICByZXR1cm4gTnVtYmVyKGJ1dHRvbi50YWJJ
bmRleCgpKTsKKyAgICAgICAgY2FzZSBCdXR0b25UeXBlOiAgICAgICAgICAgIHJldHVybiBTdHJp
bmcoYnV0dG9uLnR5cGUoKSk7CisgICAgICAgIGNhc2UgQnV0dG9uVmFsdWU6ICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKGJ1dHRvbi52YWx1ZSgpKTsKICAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNh
c2UgSURfRElSOiB7Ci0gICAgSFRNTERpcmVjdG9yeUVsZW1lbnRJbXBsICZkaXJlY3RvcnkgPSBz
dGF0aWNfY2FzdDxIVE1MRGlyZWN0b3J5RWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgcmV0
dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6bGFiZWxHZXR0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTExhYmVsRWxlbWVudElt
cGwmIGxhYmVsID0gKnN0YXRpY19jYXN0PEhUTUxMYWJlbEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsK
ICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBEaXJlY3RvcnlDb21wYWN0OiAgICAgICAg
IHJldHVybiBCb29sZWFuKGRpcmVjdG9yeS5jb21wYWN0KCkpOworICAgICAgICBjYXNlIExhYmVs
Rm9ybTogICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLGxhYmVsLmZvcm0oKSk7IC8v
IHR5cGUgSFRNTEZvcm1FbGVtZW50CisgICAgICAgIGNhc2UgTGFiZWxBY2Nlc3NLZXk6ICAgICAg
IHJldHVybiBTdHJpbmcobGFiZWwuYWNjZXNzS2V5KCkpOworICAgICAgICBjYXNlIExhYmVsSHRt
bEZvcjogICAgICAgICByZXR1cm4gU3RyaW5nKGxhYmVsLmh0bWxGb3IoKSk7CiAgICAgfQotICB9
Ci0gIGJyZWFrOwotICBjYXNlIElEX01FTlU6IHsKLSAgICBIVE1MTWVudUVsZW1lbnRJbXBsICZt
ZW51ID0gc3RhdGljX2Nhc3Q8SFRNTE1lbnVFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICBy
ZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50OjpmaWVsZFNldEdldHRl
cihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MRmllbGRTZXRF
bGVtZW50SW1wbCYgZmllbGRTZXQgPSAqc3RhdGljX2Nhc3Q8SFRNTEZpZWxkU2V0RWxlbWVudElt
cGwqPihpbXBsKCkpOworICAgIGlmICh0b2tlbiA9PSBGaWVsZFNldEZvcm0pCisgICAgICAgIHJl
dHVybiBnZXRET01Ob2RlKGV4ZWMsZmllbGRTZXQuZm9ybSgpKTsgLy8gdHlwZSBIVE1MRm9ybUVs
ZW1lbnQKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50Ojps
ZWdlbmRHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRN
TExlZ2VuZEVsZW1lbnRJbXBsJiBsZWdlbmQgPSAqc3RhdGljX2Nhc3Q8SFRNTExlZ2VuZEVsZW1l
bnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBNZW51Q29t
cGFjdDogICAgICAgICByZXR1cm4gQm9vbGVhbihtZW51LmNvbXBhY3QoKSk7CisgICAgICAgIGNh
c2UgTGVnZW5kRm9ybTogICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLGxlZ2VuZC5m
b3JtKCkpOyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVudAorICAgICAgICBjYXNlIExlZ2VuZEFjY2Vz
c0tleTogICAgICAgcmV0dXJuIFN0cmluZyhsZWdlbmQuYWNjZXNzS2V5KCkpOworICAgICAgICBj
YXNlIExlZ2VuZEFsaWduOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhsZWdlbmQuYWxpZ24oKSk7
CiAgICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX0xJOiB7Ci0gICAgSFRNTExJRWxlbWVu
dEltcGwgJmxpID0gc3RhdGljX2Nhc3Q8SFRNTExJRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Cisg
ICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6dUxpc3RHZXR0
ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTFVMaXN0RWxl
bWVudEltcGwmIHVMaXN0ID0gKnN0YXRpY19jYXN0PEhUTUxVTGlzdEVsZW1lbnRJbXBsKj4oaW1w
bCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBMSVR5cGU6ICAgICAgICAgICAg
cmV0dXJuIFN0cmluZyhsaS50eXBlKCkpOwotICAgIGNhc2UgTElWYWx1ZTogICAgICAgICAgIHJl
dHVybiBOdW1iZXIobGkudmFsdWUoKSk7CisgICAgICAgIGNhc2UgVUxpc3RDb21wYWN0OiAgICAg
ICAgIHJldHVybiBCb29sZWFuKHVMaXN0LmNvbXBhY3QoKSk7CisgICAgICAgIGNhc2UgVUxpc3RU
eXBlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcodUxpc3QudHlwZSgpKTsKICAgICB9Ci0gIH0K
LSAgYnJlYWs7Ci0gIGNhc2UgSURfRElWOiB7Ci0gICAgSFRNTERpdkVsZW1lbnRJbXBsICZkaXYg
PSBzdGF0aWNfY2FzdDxIVE1MRGl2RWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgcmV0dXJu
IFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6b0xpc3RHZXR0ZXIoRXhlY1N0
YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTE9MaXN0RWxlbWVudEltcGwm
IG9MaXN0ID0gKnN0YXRpY19jYXN0PEhUTUxPTGlzdEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAg
ICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBEaXZBbGlnbjogICAgICAgICAgIHJldHVybiBT
dHJpbmcoZGl2LmFsaWduKCkpOworICAgICAgICBjYXNlIE9MaXN0Q29tcGFjdDogICAgICAgICBy
ZXR1cm4gQm9vbGVhbihvTGlzdC5jb21wYWN0KCkpOworICAgICAgICBjYXNlIE9MaXN0U3RhcnQ6
ICAgICAgICAgICByZXR1cm4gTnVtYmVyKG9MaXN0LnN0YXJ0KCkpOworICAgICAgICBjYXNlIE9M
aXN0VHlwZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKG9MaXN0LnR5cGUoKSk7CiAgICAgfQot
ICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX1A6IHsKLSAgICBIVE1MUGFyYWdyYXBoRWxlbWVudElt
cGwgJnBhcmFncmFwaCA9IHN0YXRpY19jYXN0PEhUTUxQYXJhZ3JhcGhFbGVtZW50SW1wbCAmPihl
bGVtZW50KTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50
OjpkTGlzdEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBI
VE1MRExpc3RFbGVtZW50SW1wbCYgZExpc3QgPSAqc3RhdGljX2Nhc3Q8SFRNTERMaXN0RWxlbWVu
dEltcGwqPihpbXBsKCkpOworICAgIGlmICh0b2tlbiA9PSBETGlzdENvbXBhY3QpCisgICAgICAg
IHJldHVybiBCb29sZWFuKGRMaXN0LmNvbXBhY3QoKSk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgp
OworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6ZGlyR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50
IHRva2VuKSBjb25zdAoreworICAgIEhUTUxEaXJlY3RvcnlFbGVtZW50SW1wbCYgZGlyID0gKnN0
YXRpY19jYXN0PEhUTUxEaXJlY3RvcnlFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRv
a2VuID09IERpcmVjdG9yeUNvbXBhY3QpCisgICAgICAgIHJldHVybiBCb29sZWFuKGRpci5jb21w
YWN0KCkpOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6
Om1lbnVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRN
TE1lbnVFbGVtZW50SW1wbCYgbWVudSA9ICpzdGF0aWNfY2FzdDxIVE1MTWVudUVsZW1lbnRJbXBs
Kj4oaW1wbCgpKTsKKyAgICBpZiAodG9rZW4gPT0gTWVudUNvbXBhY3QpCisgICAgICAgIHJldHVy
biBCb29sZWFuKG1lbnUuY29tcGFjdCgpKTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisK
K1ZhbHVlIEhUTUxFbGVtZW50OjpsaUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikg
Y29uc3QKK3sKKyAgICBIVE1MTElFbGVtZW50SW1wbCYgbGkgPSAqc3RhdGljX2Nhc3Q8SFRNTExJ
RWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIFBh
cmFncmFwaEFsaWduOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhwYXJhZ3JhcGguYWxpZ24oKSk7
CisgICAgICAgIGNhc2UgTElUeXBlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcobGkudHlwZSgp
KTsKKyAgICAgICAgY2FzZSBMSVZhbHVlOiAgICAgICAgICAgcmV0dXJuIE51bWJlcihsaS52YWx1
ZSgpKTsKICAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfSDE6Ci0gIGNhc2UgSURfSDI6
Ci0gIGNhc2UgSURfSDM6Ci0gIGNhc2UgSURfSDQ6Ci0gIGNhc2UgSURfSDU6Ci0gIGNhc2UgSURf
SDY6IHsKLSAgICBIVE1MSGVhZGluZ0VsZW1lbnRJbXBsICZoZWFkaW5nID0gc3RhdGljX2Nhc3Q8
SFRNTEhlYWRpbmdFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICByZXR1cm4gVW5kZWZpbmVk
KCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50OjpkaXZHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBp
bnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTERpdkVsZW1lbnRJbXBsJiBkaXYgPSAqc3RhdGlj
X2Nhc3Q8SFRNTERpdkVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBpZiAodG9rZW4gPT0gRGl2
QWxpZ24pCisgICAgICAgIHJldHVybiBTdHJpbmcoZGl2LmFsaWduKCkpOworICAgIHJldHVybiBV
bmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OnBhcmFncmFwaEdldHRlcihFeGVj
U3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MUGFyYWdyYXBoRWxlbWVu
dEltcGwmIHAgPSAqc3RhdGljX2Nhc3Q8SFRNTFBhcmFncmFwaEVsZW1lbnRJbXBsKj4oaW1wbCgp
KTsKKyAgICBpZiAodG9rZW4gPT0gUGFyYWdyYXBoQWxpZ24pCisgICAgICAgIHJldHVybiBTdHJp
bmcocC5hbGlnbigpKTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxF
bGVtZW50OjpoZWFkaW5nR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAor
eworICAgIEhUTUxIZWFkaW5nRWxlbWVudEltcGwmIGggPSAqc3RhdGljX2Nhc3Q8SFRNTEhlYWRp
bmdFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IEhlYWRpbmdBbGlnbikK
KyAgICAgICAgcmV0dXJuIFN0cmluZyhoLmFsaWduKCkpOworICAgIHJldHVybiBVbmRlZmluZWQo
KTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OmJsb2NrUXVvdGVHZXR0ZXIoRXhlY1N0YXRlKiBl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTEJsb2NrcXVvdGVFbGVtZW50SW1wbCYg
YmxvY2tRdW90ZSA9ICpzdGF0aWNfY2FzdDxIVE1MQmxvY2txdW90ZUVsZW1lbnRJbXBsKj4oaW1w
bCgpKTsKKyAgICBpZiAodG9rZW4gPT0gQmxvY2tRdW90ZUNpdGUpCisgICAgICAgIHJldHVybiBT
dHJpbmcoYmxvY2tRdW90ZS5jaXRlKCkpOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKwor
VmFsdWUgSFRNTEVsZW1lbnQ6OnF1b3RlR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2Vu
KSBjb25zdAoreworICAgIEhUTUxRdW90ZUVsZW1lbnRJbXBsJiBxdW90ZSA9ICpzdGF0aWNfY2Fz
dDxIVE1MUXVvdGVFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IFF1b3Rl
Q2l0ZSkKKyAgICAgICAgcmV0dXJuIFN0cmluZyhxdW90ZS5jaXRlKCkpOworICAgIHJldHVybiBV
bmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OnByZUdldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9y
ICd3cmFwJyB3aGVuIHdoaXRlLXNwYWNlOiBwcmUtd3JhcCBpcyBpbXBsZW1lbnRlZC4KKyAgICBI
VE1MUHJlRWxlbWVudEltcGwmIHByZSA9ICpzdGF0aWNfY2FzdDxIVE1MUHJlRWxlbWVudEltcGwq
PihpbXBsKCkpOworICAgIGlmICh0b2tlbiA9PSBQcmVXaWR0aCkKKyAgICAgICAgcmV0dXJuIE51
bWJlcihwcmUud2lkdGgoKSk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBI
VE1MRWxlbWVudDo6YnJHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7
CisgICAgSFRNTEJSRWxlbWVudEltcGwmIGJyID0gKnN0YXRpY19jYXN0PEhUTUxCUkVsZW1lbnRJ
bXBsKj4oaW1wbCgpKTsKKyAgICBpZiAodG9rZW4gPT0gQlJDbGVhcikKKyAgICAgICAgcmV0dXJu
IFN0cmluZyhici5jbGVhcigpKTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVl
IEhUTUxFbGVtZW50OjpiYXNlRm9udEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikg
Y29uc3QKK3sKKyAgICBIVE1MQmFzZUZvbnRFbGVtZW50SW1wbCYgYmFzZUZvbnQgPSAqc3RhdGlj
X2Nhc3Q8SFRNTEJhc2VGb250RWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAodG9r
ZW4pIHsKLSAgICBjYXNlIEhlYWRpbmdBbGlnbjogICAgICAgICAgIHJldHVybiBTdHJpbmcoaGVh
ZGluZy5hbGlnbigpKTsKKyAgICAgICAgY2FzZSBCYXNlRm9udENvbG9yOiAgICAgICAgICAgcmV0
dXJuIFN0cmluZyhiYXNlRm9udC5jb2xvcigpKTsKKyAgICAgICAgY2FzZSBCYXNlRm9udEZhY2U6
ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhiYXNlRm9udC5mYWNlKCkpOworICAgICAgICBjYXNl
IEJhc2VGb250U2l6ZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGJhc2VGb250LnNpemUoKSk7
CiAgICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX0JMT0NLUVVPVEU6IHsKLSAgICBIVE1M
QmxvY2txdW90ZUVsZW1lbnRJbXBsICZibG9ja3F1b3RlID0gc3RhdGljX2Nhc3Q8SFRNTEJsb2Nr
cXVvdGVFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9
CisKK1ZhbHVlIEhUTUxFbGVtZW50Ojpmb250R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRv
a2VuKSBjb25zdAoreworICAgIEhUTUxGb250RWxlbWVudEltcGwmIGZvbnQgPSAqc3RhdGljX2Nh
c3Q8SFRNTEZvbnRFbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tlbikgewot
ICAgIGNhc2UgQmxvY2tRdW90ZUNpdGU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhibG9ja3F1
b3RlLmNpdGUoKSk7CisgICAgICAgIGNhc2UgRm9udENvbG9yOiAgICAgICAgICAgcmV0dXJuIFN0
cmluZyhmb250LmNvbG9yKCkpOworICAgICAgICBjYXNlIEZvbnRGYWNlOiAgICAgICAgICAgIHJl
dHVybiBTdHJpbmcoZm9udC5mYWNlKCkpOworICAgICAgICBjYXNlIEZvbnRTaXplOiAgICAgICAg
ICAgIHJldHVybiBTdHJpbmcoZm9udC5zaXplKCkpOwogICAgIH0KLSAgfQotICBjYXNlIElEX1E6
IHsKLSAgICBIVE1MUXVvdGVFbGVtZW50SW1wbCAmcXVvdGUgPSBzdGF0aWNfY2FzdDxIVE1MUXVv
dGVFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisK
K1ZhbHVlIEhUTUxFbGVtZW50OjpockdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikg
Y29uc3QKK3sKKyAgICBIVE1MSFJFbGVtZW50SW1wbCYgaHIgPSAqc3RhdGljX2Nhc3Q8SFRNTEhS
RWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIFF1
b3RlQ2l0ZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKHF1b3RlLmNpdGUoKSk7CisgICAgICAg
IGNhc2UgSFJBbGlnbjogICAgICAgICAgIHJldHVybiBTdHJpbmcoaHIuYWxpZ24oKSk7CisgICAg
ICAgIGNhc2UgSFJOb1NoYWRlOiAgICAgICAgIHJldHVybiBCb29sZWFuKGhyLm5vU2hhZGUoKSk7
CisgICAgICAgIGNhc2UgSFJTaXplOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoaHIuc2l6ZSgp
KTsKKyAgICAgICAgY2FzZSBIUldpZHRoOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhoci53aWR0
aCgpKTsKICAgICB9Ci0gIH0KLSAgY2FzZSBJRF9QUkU6IHsKLSAgICBIVE1MUHJlRWxlbWVudElt
cGwgJnByZSA9IHN0YXRpY19jYXN0PEhUTUxQcmVFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAg
ICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50Ojptb2RHZXR0ZXIo
RXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTE1vZEVsZW1lbnRJ
bXBsJiBtb2QgPSAqc3RhdGljX2Nhc3Q8SFRNTE1vZEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAg
ICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBQcmVXaWR0aDogICAgICAgICAgIHJldHVybiBO
dW1iZXIocHJlLndpZHRoKCkpOworICAgICAgICBjYXNlIE1vZENpdGU6ICAgICAgICAgICAgcmV0
dXJuIFN0cmluZyhtb2QuY2l0ZSgpKTsKKyAgICAgICAgY2FzZSBNb2REYXRlVGltZTogICAgICAg
IHJldHVybiBTdHJpbmcobW9kLmRhdGVUaW1lKCkpOwogICAgIH0KLSAgfQotICBicmVhazsKLSAg
Y2FzZSBJRF9CUjogewotICAgIEhUTUxCUkVsZW1lbnRJbXBsICZiciA9IHN0YXRpY19jYXN0PEhU
TUxCUkVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30K
KworVmFsdWUgSFRNTEVsZW1lbnQ6OmFuY2hvckdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0
b2tlbikgY29uc3QKK3sKKyAgICBIVE1MQW5jaG9yRWxlbWVudEltcGwmIGFuY2hvciA9ICpzdGF0
aWNfY2FzdDxIVE1MQW5jaG9yRWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAodG9r
ZW4pIHsKLSAgICBjYXNlIEJSQ2xlYXI6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGJyLmNsZWFy
KCkpOworICAgICAgICBjYXNlIEFuY2hvckFjY2Vzc0tleTogICAgICAgcmV0dXJuIFN0cmluZyhh
bmNob3IuYWNjZXNzS2V5KCkpOworICAgICAgICBjYXNlIEFuY2hvckNoYXJzZXQ6ICAgICAgICAg
cmV0dXJuIFN0cmluZyhhbmNob3IuY2hhcnNldCgpKTsKKyAgICAgICAgY2FzZSBBbmNob3JDb29y
ZHM6ICAgICAgICAgIHJldHVybiBTdHJpbmcoYW5jaG9yLmNvb3JkcygpKTsKKyAgICAgICAgY2Fz
ZSBBbmNob3JIcmVmOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYW5jaG9yLmhyZWYoKSk7Cisg
ICAgICAgIGNhc2UgQW5jaG9ySHJlZkxhbmc6ICAgICAgICByZXR1cm4gU3RyaW5nKGFuY2hvci5o
cmVmbGFuZygpKTsKKyAgICAgICAgY2FzZSBBbmNob3JIYXNoOiAgICAgICAgICAgIHJldHVybiBT
dHJpbmcoJyMnK0tVUkwoYW5jaG9yLmhyZWYoKS5zdHJpbmcoKSkucmVmKCkpOworICAgICAgICBj
YXNlIEFuY2hvckhvc3Q6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhLVVJMKGFuY2hvci5ocmVm
KCkuc3RyaW5nKCkpLmhvc3QoKSk7CisgICAgICAgIGNhc2UgQW5jaG9ySG9zdG5hbWU6IHsKKyAg
ICAgICAgICAgIEtVUkwgdXJsKGFuY2hvci5ocmVmKCkuc3RyaW5nKCkpOworICAgICAgICAgICAg
a2REZWJ1Zyg2MDcwKSA8PCAiYW5jaG9yOjpob3N0bmFtZSB1c2VzOiIgPDx1cmwudXJsKCk8PGVu
ZGw7CisgICAgICAgICAgICBpZiAodXJsLnBvcnQoKT09MCkKKyAgICAgICAgICAgICAgICByZXR1
cm4gU3RyaW5nKHVybC5ob3N0KCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IHJldHVybiBTdHJpbmcodXJsLmhvc3QoKSArICI6IiArIFFTdHJpbmc6Om51bWJlcih1cmwucG9y
dCgpKSk7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBBbmNob3JQYXRoTmFtZTogICAgICAgIHJl
dHVybiBTdHJpbmcoS1VSTChhbmNob3IuaHJlZigpLnN0cmluZygpKS5wYXRoKCkpOworICAgICAg
ICBjYXNlIEFuY2hvclBvcnQ6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhRU3RyaW5nOjpudW1i
ZXIoS1VSTChhbmNob3IuaHJlZigpLnN0cmluZygpKS5wb3J0KCkpKTsKKyAgICAgICAgY2FzZSBB
bmNob3JQcm90b2NvbDogICAgICAgIHJldHVybiBTdHJpbmcoS1VSTChhbmNob3IuaHJlZigpLnN0
cmluZygpKS5wcm90b2NvbCgpKyI6Iik7CisgICAgICAgIGNhc2UgQW5jaG9yU2VhcmNoOiAgICAg
ICAgICByZXR1cm4gU3RyaW5nKEtVUkwoYW5jaG9yLmhyZWYoKS5zdHJpbmcoKSkucXVlcnkoKSk7
CisgICAgICAgIGNhc2UgQW5jaG9yTmFtZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGFuY2hv
ci5uYW1lKCkpOworICAgICAgICBjYXNlIEFuY2hvclJlbDogICAgICAgICAgICAgcmV0dXJuIFN0
cmluZyhhbmNob3IucmVsKCkpOworICAgICAgICBjYXNlIEFuY2hvclJldjogICAgICAgICAgICAg
cmV0dXJuIFN0cmluZyhhbmNob3IucmV2KCkpOworICAgICAgICBjYXNlIEFuY2hvclNoYXBlOiAg
ICAgICAgICAgcmV0dXJuIFN0cmluZyhhbmNob3Iuc2hhcGUoKSk7CisgICAgICAgIGNhc2UgQW5j
aG9yVGFiSW5kZXg6ICAgICAgICByZXR1cm4gTnVtYmVyKGFuY2hvci50YWJJbmRleCgpKTsKKyAg
ICAgICAgY2FzZSBBbmNob3JUYXJnZXQ6ICAgICAgICAgIHJldHVybiBTdHJpbmcoYW5jaG9yLnRh
cmdldCgpKTsKKyAgICAgICAgY2FzZSBBbmNob3JUeXBlOiAgICAgICAgICAgIHJldHVybiBTdHJp
bmcoYW5jaG9yLnR5cGUoKSk7CisgICAgICAgIGNhc2UgQW5jaG9yVGV4dDoKKyAgICAgICAgICAg
IGlmIChEb2N1bWVudEltcGwqIGRvYyA9IGFuY2hvci5nZXREb2N1bWVudCgpKQorICAgICAgICAg
ICAgICAgIGRvYy0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CisgICAg
ICAgICAgICByZXR1cm4gU3RyaW5nKGFuY2hvci5pbm5lclRleHQoKSk7CiAgICAgfQotICB9Ci0g
IGJyZWFrOwotICBjYXNlIElEX0JBU0VGT05UOiB7Ci0gICAgSFRNTEJhc2VGb250RWxlbWVudElt
cGwgJmJhc2VGb250ID0gc3RhdGljX2Nhc3Q8SFRNTEJhc2VGb250RWxlbWVudEltcGwgJj4oZWxl
bWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgQmFzZUZvbnRDb2xvcjogICAg
ICAgICAgIHJldHVybiBTdHJpbmcoYmFzZUZvbnQuY29sb3IoKSk7Ci0gICAgY2FzZSBCYXNlRm9u
dEZhY2U6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhiYXNlRm9udC5mYWNlKCkpOwotICAgIGNh
c2UgQmFzZUZvbnRTaXplOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYmFzZUZvbnQuc2l6ZSgp
KTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50OjppbWFn
ZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MSW1h
Z2VFbGVtZW50SW1wbCYgaW1hZ2UgPSAqc3RhdGljX2Nhc3Q8SFRNTEltYWdlRWxlbWVudEltcGwq
PihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBJbWFnZU5hbWU6
ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpbWFnZS5uYW1lKCkpOworICAgICAgICBjYXNlIElt
YWdlQWxpZ246ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGltYWdlLmFsaWduKCkpOworICAgICAg
ICBjYXNlIEltYWdlQWx0OiAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGltYWdlLmFsdCgpKTsK
KyAgICAgICAgY2FzZSBJbWFnZUJvcmRlcjogICAgICAgICAgcmV0dXJuIE51bWJlcihpbWFnZS5i
b3JkZXIoKSk7CisgICAgICAgIGNhc2UgSW1hZ2VIZWlnaHQ6ICAgICAgICAgIHJldHVybiBOdW1i
ZXIoaW1hZ2UuaGVpZ2h0KHRydWUpKTsKKyAgICAgICAgY2FzZSBJbWFnZUhzcGFjZTogICAgICAg
ICAgcmV0dXJuIE51bWJlcihpbWFnZS5oc3BhY2UoKSk7CisgICAgICAgIGNhc2UgSW1hZ2VJc01h
cDogICAgICAgICAgIHJldHVybiBCb29sZWFuKGltYWdlLmlzTWFwKCkpOworICAgICAgICBjYXNl
IEltYWdlTG9uZ0Rlc2M6ICAgICAgICByZXR1cm4gU3RyaW5nKGltYWdlLmxvbmdEZXNjKCkpOwor
ICAgICAgICBjYXNlIEltYWdlU3JjOiAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGltYWdlLnNy
YygpKTsKKyAgICAgICAgY2FzZSBJbWFnZVVzZU1hcDogICAgICAgICAgcmV0dXJuIFN0cmluZyhp
bWFnZS51c2VNYXAoKSk7CisgICAgICAgIGNhc2UgSW1hZ2VWc3BhY2U6ICAgICAgICAgIHJldHVy
biBOdW1iZXIoaW1hZ2UudnNwYWNlKCkpOworICAgICAgICBjYXNlIEltYWdlV2lkdGg6ICAgICAg
ICAgICByZXR1cm4gTnVtYmVyKGltYWdlLndpZHRoKHRydWUpKTsKKyAgICAgICAgY2FzZSBJbWFn
ZVg6ICAgICAgICAgICAgICAgcmV0dXJuIE51bWJlcihpbWFnZS54KCkpOworICAgICAgICBjYXNl
IEltYWdlWTogICAgICAgICAgICAgICByZXR1cm4gTnVtYmVyKGltYWdlLnkoKSk7CiAgICAgfQot
ICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX0ZPTlQ6IHsKLSAgICBIVE1MRm9udEVsZW1lbnRJbXBs
ICZmb250ID0gc3RhdGljX2Nhc3Q8SFRNTEZvbnRFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAg
ICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBGb250Q29sb3I6ICAgICAgICAgICByZXR1cm4g
U3RyaW5nKGZvbnQuY29sb3IoKSk7Ci0gICAgY2FzZSBGb250RmFjZTogICAgICAgICAgICByZXR1
cm4gU3RyaW5nKGZvbnQuZmFjZSgpKTsKLSAgICBjYXNlIEZvbnRTaXplOiAgICAgICAgICAgIHJl
dHVybiBTdHJpbmcoZm9udC5zaXplKCkpOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKwor
VmFsdWUgSFRNTEVsZW1lbnQ6Om9iamVjdEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tl
bikgY29uc3QKK3sKKyAgICBIVE1MT2JqZWN0RWxlbWVudEltcGwmIG9iamVjdCA9ICpzdGF0aWNf
Y2FzdDxIVE1MT2JqZWN0RWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4p
IHsKKyAgICAgICAgY2FzZSBPYmplY3RGb3JtOiAgICAgICAgICAgIHJldHVybiBnZXRET01Ob2Rl
KGV4ZWMsb2JqZWN0LmZvcm0oKSk7IC8vIHR5cGUgSFRNTEZvcm1FbGVtZW50CisgICAgICAgIGNh
c2UgT2JqZWN0Q29kZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKG9iamVjdC5jb2RlKCkpOwor
ICAgICAgICBjYXNlIE9iamVjdEFsaWduOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3Qu
YWxpZ24oKSk7CisgICAgICAgIGNhc2UgT2JqZWN0QXJjaGl2ZTogICAgICAgICByZXR1cm4gU3Ry
aW5nKG9iamVjdC5hcmNoaXZlKCkpOworICAgICAgICBjYXNlIE9iamVjdEJvcmRlcjogICAgICAg
ICAgcmV0dXJuIFN0cmluZyhvYmplY3QuYm9yZGVyKCkpOworICAgICAgICBjYXNlIE9iamVjdENv
ZGVCYXNlOiAgICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3QuY29kZUJhc2UoKSk7CisgICAgICAg
IGNhc2UgT2JqZWN0Q29kZVR5cGU6ICAgICAgICByZXR1cm4gU3RyaW5nKG9iamVjdC5jb2RlVHlw
ZSgpKTsKKyAgICAgICAgY2FzZSBPYmplY3RDb250ZW50RG9jdW1lbnQ6IHJldHVybiBjaGVja05v
ZGVTZWN1cml0eShleGVjLG9iamVjdC5jb250ZW50RG9jdW1lbnQoKSkgPyAKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRET01Ob2RlKGV4ZWMsIG9iamVjdC5j
b250ZW50RG9jdW1lbnQoKSkgOiBVbmRlZmluZWQoKTsKKyAgICAgICAgY2FzZSBPYmplY3REYXRh
OiAgICAgICAgICAgIHJldHVybiBTdHJpbmcob2JqZWN0LmRhdGEoKSk7CisgICAgICAgIGNhc2Ug
T2JqZWN0RGVjbGFyZTogICAgICAgICByZXR1cm4gQm9vbGVhbihvYmplY3QuZGVjbGFyZSgpKTsK
KyAgICAgICAgY2FzZSBPYmplY3RIZWlnaHQ6ICAgICAgICAgIHJldHVybiBTdHJpbmcob2JqZWN0
LmhlaWdodCgpKTsKKyAgICAgICAgY2FzZSBPYmplY3RIc3BhY2U6ICAgICAgICAgIHJldHVybiBT
dHJpbmcob2JqZWN0LmhzcGFjZSgpKTsKKyAgICAgICAgY2FzZSBPYmplY3ROYW1lOiAgICAgICAg
ICAgIHJldHVybiBTdHJpbmcob2JqZWN0Lm5hbWUoKSk7CisgICAgICAgIGNhc2UgT2JqZWN0U3Rh
bmRieTogICAgICAgICByZXR1cm4gU3RyaW5nKG9iamVjdC5zdGFuZGJ5KCkpOworICAgICAgICBj
YXNlIE9iamVjdFRhYkluZGV4OiAgICAgICAgcmV0dXJuIE51bWJlcihvYmplY3QudGFiSW5kZXgo
KSk7CisgICAgICAgIGNhc2UgT2JqZWN0VHlwZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKG9i
amVjdC50eXBlKCkpOworICAgICAgICBjYXNlIE9iamVjdFVzZU1hcDogICAgICAgICAgcmV0dXJu
IFN0cmluZyhvYmplY3QudXNlTWFwKCkpOworICAgICAgICBjYXNlIE9iamVjdFZzcGFjZTogICAg
ICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3QudnNwYWNlKCkpOworICAgICAgICBjYXNlIE9iamVj
dFdpZHRoOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3Qud2lkdGgoKSk7CiAgICAgfQot
ICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX0hSOiB7Ci0gICAgSFRNTEhSRWxlbWVudEltcGwgJmhy
ID0gc3RhdGljX2Nhc3Q8SFRNTEhSRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgc3dpdGNo
ICh0b2tlbikgewotICAgIGNhc2UgSFJBbGlnbjogICAgICAgICAgIHJldHVybiBTdHJpbmcoaHIu
YWxpZ24oKSk7Ci0gICAgY2FzZSBIUk5vU2hhZGU6ICAgICAgICAgcmV0dXJuIEJvb2xlYW4oaHIu
bm9TaGFkZSgpKTsKLSAgICBjYXNlIEhSU2l6ZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGhy
LnNpemUoKSk7Ci0gICAgY2FzZSBIUldpZHRoOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhoci53
aWR0aCgpKTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50
OjpwYXJhbUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBI
VE1MUGFyYW1FbGVtZW50SW1wbCYgcGFyYW0gPSAqc3RhdGljX2Nhc3Q8SFRNTFBhcmFtRWxlbWVu
dEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBQYXJh
bU5hbWU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhwYXJhbS5uYW1lKCkpOworICAgICAgICBj
YXNlIFBhcmFtVHlwZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKHBhcmFtLnR5cGUoKSk7Cisg
ICAgICAgIGNhc2UgUGFyYW1WYWx1ZTogICAgICAgICAgIHJldHVybiBTdHJpbmcocGFyYW0udmFs
dWUoKSk7CisgICAgICAgIGNhc2UgUGFyYW1WYWx1ZVR5cGU6ICAgICAgIHJldHVybiBTdHJpbmco
cGFyYW0udmFsdWVUeXBlKCkpOwogICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9JTlM6
Ci0gIGNhc2UgSURfREVMOiB7Ci0gICAgSFRNTE1vZEVsZW1lbnRJbXBsICZtb2QgPSBzdGF0aWNf
Y2FzdDxIVE1MTW9kRWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgcmV0dXJuIFVuZGVmaW5l
ZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6YXBwbGV0R2V0dGVyKEV4ZWNTdGF0ZSogZXhl
YywgaW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxBcHBsZXRFbGVtZW50SW1wbCYgYXBwbGV0
ID0gKnN0YXRpY19jYXN0PEhUTUxBcHBsZXRFbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dp
dGNoICh0b2tlbikgewotICAgIGNhc2UgTW9kQ2l0ZTogICAgICAgICAgICByZXR1cm4gU3RyaW5n
KG1vZC5jaXRlKCkpOwotICAgIGNhc2UgTW9kRGF0ZVRpbWU6ICAgICAgICByZXR1cm4gU3RyaW5n
KG1vZC5kYXRlVGltZSgpKTsKKyAgICAgICAgY2FzZSBBcHBsZXRBbGlnbjogICAgICAgICAgIHJl
dHVybiBTdHJpbmcoYXBwbGV0LmFsaWduKCkpOworICAgICAgICBjYXNlIEFwcGxldEFsdDogICAg
ICAgICAgICAgcmV0dXJuIFN0cmluZyhhcHBsZXQuYWx0KCkpOworICAgICAgICBjYXNlIEFwcGxl
dEFyY2hpdmU6ICAgICAgICAgcmV0dXJuIFN0cmluZyhhcHBsZXQuYXJjaGl2ZSgpKTsKKyAgICAg
ICAgY2FzZSBBcHBsZXRDb2RlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYXBwbGV0LmNvZGUo
KSk7CisgICAgICAgIGNhc2UgQXBwbGV0Q29kZUJhc2U6ICAgICAgICByZXR1cm4gU3RyaW5nKGFw
cGxldC5jb2RlQmFzZSgpKTsKKyAgICAgICAgY2FzZSBBcHBsZXRIZWlnaHQ6ICAgICAgICAgIHJl
dHVybiBTdHJpbmcoYXBwbGV0LmhlaWdodCgpKTsKKyAgICAgICAgY2FzZSBBcHBsZXRIc3BhY2U6
ICAgICAgICAgIHJldHVybiBTdHJpbmcoYXBwbGV0LmhzcGFjZSgpKTsKKyAgICAgICAgY2FzZSBB
cHBsZXROYW1lOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYXBwbGV0Lm5hbWUoKSk7CisgICAg
ICAgIGNhc2UgQXBwbGV0T2JqZWN0OiAgICAgICAgICByZXR1cm4gU3RyaW5nKGFwcGxldC5vYmpl
Y3QoKSk7CisgICAgICAgIGNhc2UgQXBwbGV0VnNwYWNlOiAgICAgICAgICByZXR1cm4gU3RyaW5n
KGFwcGxldC52c3BhY2UoKSk7CisgICAgICAgIGNhc2UgQXBwbGV0V2lkdGg6ICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKGFwcGxldC53aWR0aCgpKTsKICAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNh
c2UgSURfQTogewotICAgIEhUTUxBbmNob3JFbGVtZW50SW1wbCAmYW5jaG9yID0gc3RhdGljX2Nh
c3Q8SFRNTEFuY2hvckVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgIHN3aXRjaCAodG9rZW4p
IHsKLSAgICBjYXNlIEFuY2hvckFjY2Vzc0tleTogICAgICAgcmV0dXJuIFN0cmluZyhhbmNob3Iu
YWNjZXNzS2V5KCkpOwotICAgIGNhc2UgQW5jaG9yQ2hhcnNldDogICAgICAgICByZXR1cm4gU3Ry
aW5nKGFuY2hvci5jaGFyc2V0KCkpOwotICAgIGNhc2UgQW5jaG9yQ29vcmRzOiAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKGFuY2hvci5jb29yZHMoKSk7Ci0gICAgY2FzZSBBbmNob3JIcmVmOiAgICAg
ICAgICAgIHJldHVybiBTdHJpbmcoYW5jaG9yLmhyZWYoKSk7Ci0gICAgY2FzZSBBbmNob3JIcmVm
TGFuZzogICAgICAgIHJldHVybiBTdHJpbmcoYW5jaG9yLmhyZWZsYW5nKCkpOwotICAgIGNhc2Ug
QW5jaG9ySGFzaDogICAgICAgICAgICByZXR1cm4gU3RyaW5nKCcjJytLVVJMKGFuY2hvci5ocmVm
KCkuc3RyaW5nKCkpLnJlZigpKTsKLSAgICBjYXNlIEFuY2hvckhvc3Q6ICAgICAgICAgICAgcmV0
dXJuIFN0cmluZyhLVVJMKGFuY2hvci5ocmVmKCkuc3RyaW5nKCkpLmhvc3QoKSk7Ci0gICAgY2Fz
ZSBBbmNob3JIb3N0bmFtZTogewotICAgICAgS1VSTCB1cmwoYW5jaG9yLmhyZWYoKS5zdHJpbmco
KSk7Ci0gICAgICBrZERlYnVnKDYwNzApIDw8ICJhbmNob3I6Omhvc3RuYW1lIHVzZXM6IiA8PHVy
bC51cmwoKTw8ZW5kbDsKLSAgICAgIGlmICh1cmwucG9ydCgpPT0wKQotICAgICAgICByZXR1cm4g
U3RyaW5nKHVybC5ob3N0KCkpOwotICAgICAgZWxzZQotICAgICAgICByZXR1cm4gU3RyaW5nKHVy
bC5ob3N0KCkgKyAiOiIgKyBRU3RyaW5nOjpudW1iZXIodXJsLnBvcnQoKSkpOwotICAgIH0KLSAg
ICBjYXNlIEFuY2hvclBhdGhOYW1lOiAgICAgICAgcmV0dXJuIFN0cmluZyhLVVJMKGFuY2hvci5o
cmVmKCkuc3RyaW5nKCkpLnBhdGgoKSk7Ci0gICAgY2FzZSBBbmNob3JQb3J0OiAgICAgICAgICAg
IHJldHVybiBTdHJpbmcoUVN0cmluZzo6bnVtYmVyKEtVUkwoYW5jaG9yLmhyZWYoKS5zdHJpbmco
KSkucG9ydCgpKSk7Ci0gICAgY2FzZSBBbmNob3JQcm90b2NvbDogICAgICAgIHJldHVybiBTdHJp
bmcoS1VSTChhbmNob3IuaHJlZigpLnN0cmluZygpKS5wcm90b2NvbCgpKyI6Iik7Ci0gICAgY2Fz
ZSBBbmNob3JTZWFyY2g6ICAgICAgICAgIHJldHVybiBTdHJpbmcoS1VSTChhbmNob3IuaHJlZigp
LnN0cmluZygpKS5xdWVyeSgpKTsKLSAgICBjYXNlIEFuY2hvck5hbWU6ICAgICAgICAgICAgcmV0
dXJuIFN0cmluZyhhbmNob3IubmFtZSgpKTsKLSAgICBjYXNlIEFuY2hvclJlbDogICAgICAgICAg
ICAgcmV0dXJuIFN0cmluZyhhbmNob3IucmVsKCkpOwotICAgIGNhc2UgQW5jaG9yUmV2OiAgICAg
ICAgICAgICByZXR1cm4gU3RyaW5nKGFuY2hvci5yZXYoKSk7Ci0gICAgY2FzZSBBbmNob3JTaGFw
ZTogICAgICAgICAgIHJldHVybiBTdHJpbmcoYW5jaG9yLnNoYXBlKCkpOwotICAgIGNhc2UgQW5j
aG9yVGFiSW5kZXg6ICAgICAgICByZXR1cm4gTnVtYmVyKGFuY2hvci50YWJJbmRleCgpKTsKLSAg
ICBjYXNlIEFuY2hvclRhcmdldDogICAgICAgICAgcmV0dXJuIFN0cmluZyhhbmNob3IudGFyZ2V0
KCkpOwotICAgIGNhc2UgQW5jaG9yVHlwZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGFuY2hv
ci50eXBlKCkpOwotICAgIGNhc2UgQW5jaG9yVGV4dDoKLSAgICAgIGlmIChEb2N1bWVudEltcGwq
IGRvYyA9IGFuY2hvci5nZXREb2N1bWVudCgpKQotICAgICAgICBkb2MtPnVwZGF0ZUxheW91dEln
bm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwotICAgICAgcmV0dXJuIFN0cmluZyhhbmNob3IuaW5u
ZXJUZXh0KCkpOwotICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9JTUc6IHsKLSAgICBI
VE1MSW1hZ2VFbGVtZW50SW1wbCAmaW1hZ2UgPSBzdGF0aWNfY2FzdDxIVE1MSW1hZ2VFbGVtZW50
SW1wbCAmPihlbGVtZW50KTsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBJbWFnZU5h
bWU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpbWFnZS5uYW1lKCkpOwotICAgIGNhc2UgSW1h
Z2VBbGlnbjogICAgICAgICAgIHJldHVybiBTdHJpbmcoaW1hZ2UuYWxpZ24oKSk7Ci0gICAgY2Fz
ZSBJbWFnZUFsdDogICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpbWFnZS5hbHQoKSk7Ci0gICAg
Y2FzZSBJbWFnZUJvcmRlcjogICAgICAgICAgcmV0dXJuIE51bWJlcihpbWFnZS5ib3JkZXIoKSk7
Ci0gICAgY2FzZSBJbWFnZUhlaWdodDogICAgICAgICAgcmV0dXJuIE51bWJlcihpbWFnZS5oZWln
aHQodHJ1ZSkpOwotICAgIGNhc2UgSW1hZ2VIc3BhY2U6ICAgICAgICAgIHJldHVybiBOdW1iZXIo
aW1hZ2UuaHNwYWNlKCkpOwotICAgIGNhc2UgSW1hZ2VJc01hcDogICAgICAgICAgIHJldHVybiBC
b29sZWFuKGltYWdlLmlzTWFwKCkpOwotICAgIGNhc2UgSW1hZ2VMb25nRGVzYzogICAgICAgIHJl
dHVybiBTdHJpbmcoaW1hZ2UubG9uZ0Rlc2MoKSk7Ci0gICAgY2FzZSBJbWFnZVNyYzogICAgICAg
ICAgICAgcmV0dXJuIFN0cmluZyhpbWFnZS5zcmMoKSk7Ci0gICAgY2FzZSBJbWFnZVVzZU1hcDog
ICAgICAgICAgcmV0dXJuIFN0cmluZyhpbWFnZS51c2VNYXAoKSk7Ci0gICAgY2FzZSBJbWFnZVZz
cGFjZTogICAgICAgICAgcmV0dXJuIE51bWJlcihpbWFnZS52c3BhY2UoKSk7Ci0gICAgY2FzZSBJ
bWFnZVdpZHRoOiAgICAgICAgICAgcmV0dXJuIE51bWJlcihpbWFnZS53aWR0aCh0cnVlKSk7Ci0g
ICAgY2FzZSBJbWFnZVg6ICAgICAgICAgICAgICAgcmV0dXJuIE51bWJlcihpbWFnZS54KCkpOwot
ICAgIGNhc2UgSW1hZ2VZOiAgICAgICAgICAgICAgIHJldHVybiBOdW1iZXIoaW1hZ2UueSgpKTsK
LSAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfT0JKRUNUOiB7Ci0gICAgSFRNTE9iamVj
dEVsZW1lbnRJbXBsICZvYmplY3QgPSBzdGF0aWNfY2FzdDxIVE1MT2JqZWN0RWxlbWVudEltcGwg
Jj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgT2JqZWN0Rm9ybTog
ICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLG9iamVjdC5mb3JtKCkpOyAvLyB0eXBl
IEhUTUxGb3JtRWxlbWVudAotICAgIGNhc2UgT2JqZWN0Q29kZTogICAgICAgICAgICByZXR1cm4g
U3RyaW5nKG9iamVjdC5jb2RlKCkpOwotICAgIGNhc2UgT2JqZWN0QWxpZ246ICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKG9iamVjdC5hbGlnbigpKTsKLSAgICBjYXNlIE9iamVjdEFyY2hpdmU6ICAg
ICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3QuYXJjaGl2ZSgpKTsKLSAgICBjYXNlIE9iamVjdEJv
cmRlcjogICAgICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3QuYm9yZGVyKCkpOwotICAgIGNhc2Ug
T2JqZWN0Q29kZUJhc2U6ICAgICAgICByZXR1cm4gU3RyaW5nKG9iamVjdC5jb2RlQmFzZSgpKTsK
LSAgICBjYXNlIE9iamVjdENvZGVUeXBlOiAgICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3QuY29k
ZVR5cGUoKSk7Ci0gICAgY2FzZSBPYmplY3RDb250ZW50RG9jdW1lbnQ6IHJldHVybiBjaGVja05v
ZGVTZWN1cml0eShleGVjLG9iamVjdC5jb250ZW50RG9jdW1lbnQoKSkgPyAKLQkJCQkgICAgICAg
Z2V0RE9NTm9kZShleGVjLCBvYmplY3QuY29udGVudERvY3VtZW50KCkpIDogVW5kZWZpbmVkKCk7
Ci0gICAgY2FzZSBPYmplY3REYXRhOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcob2JqZWN0LmRh
dGEoKSk7Ci0gICAgY2FzZSBPYmplY3REZWNsYXJlOiAgICAgICAgIHJldHVybiBCb29sZWFuKG9i
amVjdC5kZWNsYXJlKCkpOwotICAgIGNhc2UgT2JqZWN0SGVpZ2h0OiAgICAgICAgICByZXR1cm4g
U3RyaW5nKG9iamVjdC5oZWlnaHQoKSk7Ci0gICAgY2FzZSBPYmplY3RIc3BhY2U6ICAgICAgICAg
IHJldHVybiBTdHJpbmcob2JqZWN0LmhzcGFjZSgpKTsKLSAgICBjYXNlIE9iamVjdE5hbWU6ICAg
ICAgICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3QubmFtZSgpKTsKLSAgICBjYXNlIE9iamVjdFN0
YW5kYnk6ICAgICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3Quc3RhbmRieSgpKTsKLSAgICBjYXNl
IE9iamVjdFRhYkluZGV4OiAgICAgICAgcmV0dXJuIE51bWJlcihvYmplY3QudGFiSW5kZXgoKSk7
Ci0gICAgY2FzZSBPYmplY3RUeXBlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcob2JqZWN0LnR5
cGUoKSk7Ci0gICAgY2FzZSBPYmplY3RVc2VNYXA6ICAgICAgICAgIHJldHVybiBTdHJpbmcob2Jq
ZWN0LnVzZU1hcCgpKTsKLSAgICBjYXNlIE9iamVjdFZzcGFjZTogICAgICAgICAgcmV0dXJuIFN0
cmluZyhvYmplY3QudnNwYWNlKCkpOwotICAgIGNhc2UgT2JqZWN0V2lkdGg6ICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKG9iamVjdC53aWR0aCgpKTsKLSAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNh
c2UgSURfUEFSQU06IHsKLSAgICBIVE1MUGFyYW1FbGVtZW50SW1wbCAmcGFyYW0gPSBzdGF0aWNf
Y2FzdDxIVE1MUGFyYW1FbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICBzd2l0Y2ggKHRva2Vu
KSB7Ci0gICAgY2FzZSBQYXJhbU5hbWU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhwYXJhbS5u
YW1lKCkpOwotICAgIGNhc2UgUGFyYW1UeXBlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcocGFy
YW0udHlwZSgpKTsKLSAgICBjYXNlIFBhcmFtVmFsdWU6ICAgICAgICAgICByZXR1cm4gU3RyaW5n
KHBhcmFtLnZhbHVlKCkpOwotICAgIGNhc2UgUGFyYW1WYWx1ZVR5cGU6ICAgICAgIHJldHVybiBT
dHJpbmcocGFyYW0udmFsdWVUeXBlKCkpOwotICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJ
RF9BUFBMRVQ6IHsKLSAgICBIVE1MQXBwbGV0RWxlbWVudEltcGwgJmFwcGxldCA9IHN0YXRpY19j
YXN0PEhUTUxBcHBsZXRFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICBzd2l0Y2ggKHRva2Vu
KSB7Ci0gICAgY2FzZSBBcHBsZXRBbGlnbjogICAgICAgICAgIHJldHVybiBTdHJpbmcoYXBwbGV0
LmFsaWduKCkpOwotICAgIGNhc2UgQXBwbGV0QWx0OiAgICAgICAgICAgICByZXR1cm4gU3RyaW5n
KGFwcGxldC5hbHQoKSk7Ci0gICAgY2FzZSBBcHBsZXRBcmNoaXZlOiAgICAgICAgIHJldHVybiBT
dHJpbmcoYXBwbGV0LmFyY2hpdmUoKSk7Ci0gICAgY2FzZSBBcHBsZXRDb2RlOiAgICAgICAgICAg
IHJldHVybiBTdHJpbmcoYXBwbGV0LmNvZGUoKSk7Ci0gICAgY2FzZSBBcHBsZXRDb2RlQmFzZTog
ICAgICAgIHJldHVybiBTdHJpbmcoYXBwbGV0LmNvZGVCYXNlKCkpOwotICAgIGNhc2UgQXBwbGV0
SGVpZ2h0OiAgICAgICAgICByZXR1cm4gU3RyaW5nKGFwcGxldC5oZWlnaHQoKSk7Ci0gICAgY2Fz
ZSBBcHBsZXRIc3BhY2U6ICAgICAgICAgIHJldHVybiBTdHJpbmcoYXBwbGV0LmhzcGFjZSgpKTsK
LSAgICBjYXNlIEFwcGxldE5hbWU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhhcHBsZXQubmFt
ZSgpKTsKLSAgICBjYXNlIEFwcGxldE9iamVjdDogICAgICAgICAgcmV0dXJuIFN0cmluZyhhcHBs
ZXQub2JqZWN0KCkpOwotICAgIGNhc2UgQXBwbGV0VnNwYWNlOiAgICAgICAgICByZXR1cm4gU3Ry
aW5nKGFwcGxldC52c3BhY2UoKSk7Ci0gICAgY2FzZSBBcHBsZXRXaWR0aDogICAgICAgICAgIHJl
dHVybiBTdHJpbmcoYXBwbGV0LndpZHRoKCkpOwotICAgIH0KLSAgfQotICBicmVhazsKLSAgY2Fz
ZSBJRF9NQVA6IHsKLSAgICBIVE1MTWFwRWxlbWVudEltcGwgJm1hcCA9IHN0YXRpY19jYXN0PEhU
TUxNYXBFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9
CisKK1ZhbHVlIEhUTUxFbGVtZW50OjptYXBHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0Cit7CisgICAgSFRNTE1hcEVsZW1lbnRJbXBsJiBtYXAgPSAqc3RhdGljX2Nhc3Q8
SFRNTE1hcEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAg
Y2FzZSBNYXBBcmVhczogICAgICAgICAgIHJldHVybiBnZXRIVE1MQ29sbGVjdGlvbihleGVjLCBt
YXAuYXJlYXMoKS5nZXQoKSk7IC8vIHR5cGUgSFRNTENvbGxlY3Rpb24KLSAgICBjYXNlIE1hcE5h
bWU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhtYXAubmFtZSgpKTsKLSAgICB9Ci0gIH0KLSAg
YnJlYWs7Ci0gIGNhc2UgSURfQVJFQTogewotICAgIEhUTUxBcmVhRWxlbWVudEltcGwgJmFyZWEg
PSBzdGF0aWNfY2FzdDxIVE1MQXJlYUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgIHN3aXRj
aCAodG9rZW4pIHsKLSAgICBjYXNlIEFyZWFBY2Nlc3NLZXk6ICAgICAgIHJldHVybiBTdHJpbmco
YXJlYS5hY2Nlc3NLZXkoKSk7Ci0gICAgY2FzZSBBcmVhQWx0OiAgICAgICAgICAgICByZXR1cm4g
U3RyaW5nKGFyZWEuYWx0KCkpOwotICAgIGNhc2UgQXJlYUNvb3JkczogICAgICAgICAgcmV0dXJu
IFN0cmluZyhhcmVhLmNvb3JkcygpKTsKLSAgICBjYXNlIEFyZWFIcmVmOiAgICAgICAgICAgIHJl
dHVybiBTdHJpbmcoYXJlYS5ocmVmKCkpOwotICAgIGNhc2UgQXJlYUhhc2g6ICAgICAgICAgICAg
cmV0dXJuIFN0cmluZygnIycrS1VSTChhcmVhLmhyZWYoKS5zdHJpbmcoKSkucmVmKCkpOwotICAg
IGNhc2UgQXJlYUhvc3Q6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhLVVJMKGFyZWEuaHJlZigp
LnN0cmluZygpKS5ob3N0KCkpOwotICAgIGNhc2UgQXJlYUhvc3ROYW1lOiB7Ci0gICAgICBLVVJM
IHVybChhcmVhLmhyZWYoKS5zdHJpbmcoKSk7Ci0gICAgICBrZERlYnVnKDYwNzApIDw8ICJsaW5r
Ojpob3N0bmFtZSB1c2VzOiIgPDx1cmwudXJsKCk8PGVuZGw7Ci0gICAgICBpZiAodXJsLnBvcnQo
KT09MCkKLSAgICAgICAgcmV0dXJuIFN0cmluZyh1cmwuaG9zdCgpKTsKLSAgICAgIGVsc2UKLSAg
ICAgICAgcmV0dXJuIFN0cmluZyh1cmwuaG9zdCgpICsgIjoiICsgUVN0cmluZzo6bnVtYmVyKHVy
bC5wb3J0KCkpKTsKKyAgICAgICAgY2FzZSBNYXBBcmVhczogICAgICAgICAgIHJldHVybiBnZXRI
VE1MQ29sbGVjdGlvbihleGVjLCBtYXAuYXJlYXMoKS5nZXQoKSk7IC8vIHR5cGUgSFRNTENvbGxl
Y3Rpb24KKyAgICAgICAgY2FzZSBNYXBOYW1lOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcobWFw
Lm5hbWUoKSk7CiAgICAgfQotICAgIGNhc2UgQXJlYVBhdGhOYW1lOiAgICAgICAgcmV0dXJuIFN0
cmluZyhLVVJMKGFyZWEuaHJlZigpLnN0cmluZygpKS5wYXRoKCkpOwotICAgIGNhc2UgQXJlYVBv
cnQ6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhRU3RyaW5nOjpudW1iZXIoS1VSTChhcmVhLmhy
ZWYoKS5zdHJpbmcoKSkucG9ydCgpKSk7Ci0gICAgY2FzZSBBcmVhUHJvdG9jb2w6ICAgICAgICBy
ZXR1cm4gU3RyaW5nKEtVUkwoYXJlYS5ocmVmKCkuc3RyaW5nKCkpLnByb3RvY29sKCkrIjoiKTsK
LSAgICBjYXNlIEFyZWFTZWFyY2g6ICAgICAgICAgIHJldHVybiBTdHJpbmcoS1VSTChhcmVhLmhy
ZWYoKS5zdHJpbmcoKSkucXVlcnkoKSk7Ci0gICAgY2FzZSBBcmVhTm9IcmVmOiAgICAgICAgICBy
ZXR1cm4gQm9vbGVhbihhcmVhLm5vSHJlZigpKTsKLSAgICBjYXNlIEFyZWFTaGFwZTogICAgICAg
ICAgIHJldHVybiBTdHJpbmcoYXJlYS5zaGFwZSgpKTsKLSAgICBjYXNlIEFyZWFUYWJJbmRleDog
ICAgICAgIHJldHVybiBOdW1iZXIoYXJlYS50YWJJbmRleCgpKTsKLSAgICBjYXNlIEFyZWFUYXJn
ZXQ6ICAgICAgICAgIHJldHVybiBTdHJpbmcoYXJlYS50YXJnZXQoKSk7CisgICAgcmV0dXJuIFVu
ZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6YXJlYUdldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MQXJlYUVsZW1lbnRJbXBsJiBhcmVh
ID0gKnN0YXRpY19jYXN0PEhUTUxBcmVhRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRj
aCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBBcmVhQWNjZXNzS2V5OiAgICAgICByZXR1cm4gU3Ry
aW5nKGFyZWEuYWNjZXNzS2V5KCkpOworICAgICAgICBjYXNlIEFyZWFBbHQ6ICAgICAgICAgICAg
IHJldHVybiBTdHJpbmcoYXJlYS5hbHQoKSk7CisgICAgICAgIGNhc2UgQXJlYUNvb3JkczogICAg
ICAgICAgcmV0dXJuIFN0cmluZyhhcmVhLmNvb3JkcygpKTsKKyAgICAgICAgY2FzZSBBcmVhSHJl
ZjogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGFyZWEuaHJlZigpKTsKKyAgICAgICAgY2FzZSBB
cmVhSGFzaDogICAgICAgICAgICByZXR1cm4gU3RyaW5nKCcjJytLVVJMKGFyZWEuaHJlZigpLnN0
cmluZygpKS5yZWYoKSk7CisgICAgICAgIGNhc2UgQXJlYUhvc3Q6ICAgICAgICAgICAgcmV0dXJu
IFN0cmluZyhLVVJMKGFyZWEuaHJlZigpLnN0cmluZygpKS5ob3N0KCkpOworICAgICAgICBjYXNl
IEFyZWFIb3N0TmFtZTogeworICAgICAgICAgICAgS1VSTCB1cmwoYXJlYS5ocmVmKCkuc3RyaW5n
KCkpOworICAgICAgICAgICAga2REZWJ1Zyg2MDcwKSA8PCAibGluazo6aG9zdG5hbWUgdXNlczoi
IDw8dXJsLnVybCgpPDxlbmRsOworICAgICAgICAgICAgaWYgKHVybC5wb3J0KCk9PTApCisgICAg
ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh1cmwuaG9zdCgpKTsKKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKHVybC5ob3N0KCkgKyAiOiIgKyBRU3RyaW5n
OjpudW1iZXIodXJsLnBvcnQoKSkpOworICAgICAgICB9CisgICAgICAgIGNhc2UgQXJlYVBhdGhO
YW1lOiAgICAgICAgcmV0dXJuIFN0cmluZyhLVVJMKGFyZWEuaHJlZigpLnN0cmluZygpKS5wYXRo
KCkpOworICAgICAgICBjYXNlIEFyZWFQb3J0OiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoUVN0
cmluZzo6bnVtYmVyKEtVUkwoYXJlYS5ocmVmKCkuc3RyaW5nKCkpLnBvcnQoKSkpOworICAgICAg
ICBjYXNlIEFyZWFQcm90b2NvbDogICAgICAgIHJldHVybiBTdHJpbmcoS1VSTChhcmVhLmhyZWYo
KS5zdHJpbmcoKSkucHJvdG9jb2woKSsiOiIpOworICAgICAgICBjYXNlIEFyZWFTZWFyY2g6ICAg
ICAgICAgIHJldHVybiBTdHJpbmcoS1VSTChhcmVhLmhyZWYoKS5zdHJpbmcoKSkucXVlcnkoKSk7
CisgICAgICAgIGNhc2UgQXJlYU5vSHJlZjogICAgICAgICAgcmV0dXJuIEJvb2xlYW4oYXJlYS5u
b0hyZWYoKSk7CisgICAgICAgIGNhc2UgQXJlYVNoYXBlOiAgICAgICAgICAgcmV0dXJuIFN0cmlu
ZyhhcmVhLnNoYXBlKCkpOworICAgICAgICBjYXNlIEFyZWFUYWJJbmRleDogICAgICAgIHJldHVy
biBOdW1iZXIoYXJlYS50YWJJbmRleCgpKTsKKyAgICAgICAgY2FzZSBBcmVhVGFyZ2V0OiAgICAg
ICAgICByZXR1cm4gU3RyaW5nKGFyZWEudGFyZ2V0KCkpOwogICAgIH0KLSAgfQotICBicmVhazsK
LSAgY2FzZSBJRF9TQ1JJUFQ6IHsKLSAgICBIVE1MU2NyaXB0RWxlbWVudEltcGwgJnNjcmlwdCA9
IHN0YXRpY19jYXN0PEhUTUxTY3JpcHRFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICBzd2l0
Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBTY3JpcHRUZXh0OiAgICAgICAgICAgIHJldHVybiBTdHJp
bmcoc2NyaXB0LnRleHQoKSk7Ci0gICAgY2FzZSBTY3JpcHRIdG1sRm9yOiAgICAgICAgIHJldHVy
biBTdHJpbmcoc2NyaXB0Lmh0bWxGb3IoKSk7Ci0gICAgY2FzZSBTY3JpcHRFdmVudDogICAgICAg
ICAgIHJldHVybiBTdHJpbmcoc2NyaXB0LmV2ZW50KCkpOwotICAgIGNhc2UgU2NyaXB0Q2hhcnNl
dDogICAgICAgICByZXR1cm4gU3RyaW5nKHNjcmlwdC5jaGFyc2V0KCkpOwotICAgIGNhc2UgU2Ny
aXB0RGVmZXI6ICAgICAgICAgICByZXR1cm4gQm9vbGVhbihzY3JpcHQuZGVmZXIoKSk7Ci0gICAg
Y2FzZSBTY3JpcHRTcmM6ICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoc2NyaXB0LnNyYygpKTsK
LSAgICBjYXNlIFNjcmlwdFR5cGU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhzY3JpcHQudHlw
ZSgpKTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50Ojpz
Y3JpcHRHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRN
TFNjcmlwdEVsZW1lbnRJbXBsJiBzY3JpcHQgPSAqc3RhdGljX2Nhc3Q8SFRNTFNjcmlwdEVsZW1l
bnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgU2Ny
aXB0VGV4dDogICAgICAgICAgICByZXR1cm4gU3RyaW5nKHNjcmlwdC50ZXh0KCkpOworICAgICAg
ICBjYXNlIFNjcmlwdEh0bWxGb3I6ICAgICAgICAgcmV0dXJuIFN0cmluZyhzY3JpcHQuaHRtbEZv
cigpKTsKKyAgICAgICAgY2FzZSBTY3JpcHRFdmVudDogICAgICAgICAgIHJldHVybiBTdHJpbmco
c2NyaXB0LmV2ZW50KCkpOworICAgICAgICBjYXNlIFNjcmlwdENoYXJzZXQ6ICAgICAgICAgcmV0
dXJuIFN0cmluZyhzY3JpcHQuY2hhcnNldCgpKTsKKyAgICAgICAgY2FzZSBTY3JpcHREZWZlcjog
ICAgICAgICAgIHJldHVybiBCb29sZWFuKHNjcmlwdC5kZWZlcigpKTsKKyAgICAgICAgY2FzZSBT
Y3JpcHRTcmM6ICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoc2NyaXB0LnNyYygpKTsKKyAgICAg
ICAgY2FzZSBTY3JpcHRUeXBlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoc2NyaXB0LnR5cGUo
KSk7CiAgICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX1RBQkxFOiB7Ci0gICAgSFRNTFRh
YmxlRWxlbWVudEltcGwgJnRhYmxlID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlRWxlbWVudEltcGwg
Jj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgVGFibGVDYXB0aW9u
OiAgICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsdGFibGUuY2FwdGlvbigpKTsgLy8gdHlw
ZSBIVE1MVGFibGVDYXB0aW9uRWxlbWVudAotICAgIGNhc2UgVGFibGVUSGVhZDogICAgICAgICAg
IHJldHVybiBnZXRET01Ob2RlKGV4ZWMsdGFibGUudEhlYWQoKSk7IC8vIHR5cGUgSFRNTFRhYmxl
U2VjdGlvbkVsZW1lbnQKLSAgICBjYXNlIFRhYmxlVEZvb3Q6ICAgICAgICAgICByZXR1cm4gZ2V0
RE9NTm9kZShleGVjLHRhYmxlLnRGb290KCkpOyAvLyB0eXBlIEhUTUxUYWJsZVNlY3Rpb25FbGVt
ZW50Ci0gICAgY2FzZSBUYWJsZVJvd3M6ICAgICAgICAgICAgcmV0dXJuIGdldEhUTUxDb2xsZWN0
aW9uKGV4ZWMsIHRhYmxlLnJvd3MoKS5nZXQoKSk7IC8vIHR5cGUgSFRNTENvbGxlY3Rpb24KLSAg
ICBjYXNlIFRhYmxlVEJvZGllczogICAgICAgICByZXR1cm4gZ2V0SFRNTENvbGxlY3Rpb24oZXhl
YywgdGFibGUudEJvZGllcygpLmdldCgpKTsgLy8gdHlwZSBIVE1MQ29sbGVjdGlvbgotICAgIGNh
c2UgVGFibGVBbGlnbjogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGUuYWxpZ24oKSk7Ci0g
ICAgY2FzZSBUYWJsZUJnQ29sb3I6ICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZS5iZ0NvbG9y
KCkpOwotICAgIGNhc2UgVGFibGVCb3JkZXI6ICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGUu
Ym9yZGVyKCkpOwotICAgIGNhc2UgVGFibGVDZWxsUGFkZGluZzogICAgIHJldHVybiBTdHJpbmco
dGFibGUuY2VsbFBhZGRpbmcoKSk7Ci0gICAgY2FzZSBUYWJsZUNlbGxTcGFjaW5nOiAgICAgcmV0
dXJuIFN0cmluZyh0YWJsZS5jZWxsU3BhY2luZygpKTsKLSAgICBjYXNlIFRhYmxlRnJhbWU6ICAg
ICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlLmZyYW1lKCkpOwotICAgIGNhc2UgVGFibGVSdWxl
czogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGUucnVsZXMoKSk7Ci0gICAgY2FzZSBUYWJs
ZVN1bW1hcnk6ICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZS5zdW1tYXJ5KCkpOwotICAgIGNh
c2UgVGFibGVXaWR0aDogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGUud2lkdGgoKSk7Cisg
ICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6dGFibGVHZXR0
ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTFRhYmxlRWxl
bWVudEltcGwmIHRhYmxlID0gKnN0YXRpY19jYXN0PEhUTUxUYWJsZUVsZW1lbnRJbXBsKj4oaW1w
bCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgVGFibGVDYXB0aW9uOiAg
ICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsdGFibGUuY2FwdGlvbigpKTsgLy8gdHlwZSBI
VE1MVGFibGVDYXB0aW9uRWxlbWVudAorICAgICAgICBjYXNlIFRhYmxlVEhlYWQ6ICAgICAgICAg
ICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLHRhYmxlLnRIZWFkKCkpOyAvLyB0eXBlIEhUTUxUYWJs
ZVNlY3Rpb25FbGVtZW50CisgICAgICAgIGNhc2UgVGFibGVURm9vdDogICAgICAgICAgIHJldHVy
biBnZXRET01Ob2RlKGV4ZWMsdGFibGUudEZvb3QoKSk7IC8vIHR5cGUgSFRNTFRhYmxlU2VjdGlv
bkVsZW1lbnQKKyAgICAgICAgY2FzZSBUYWJsZVJvd3M6ICAgICAgICAgICAgcmV0dXJuIGdldEhU
TUxDb2xsZWN0aW9uKGV4ZWMsIHRhYmxlLnJvd3MoKS5nZXQoKSk7IC8vIHR5cGUgSFRNTENvbGxl
Y3Rpb24KKyAgICAgICAgY2FzZSBUYWJsZVRCb2RpZXM6ICAgICAgICAgcmV0dXJuIGdldEhUTUxD
b2xsZWN0aW9uKGV4ZWMsIHRhYmxlLnRCb2RpZXMoKS5nZXQoKSk7IC8vIHR5cGUgSFRNTENvbGxl
Y3Rpb24KKyAgICAgICAgY2FzZSBUYWJsZUFsaWduOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0
YWJsZS5hbGlnbigpKTsKKyAgICAgICAgY2FzZSBUYWJsZUJnQ29sb3I6ICAgICAgICAgcmV0dXJu
IFN0cmluZyh0YWJsZS5iZ0NvbG9yKCkpOworICAgICAgICBjYXNlIFRhYmxlQm9yZGVyOiAgICAg
ICAgICByZXR1cm4gU3RyaW5nKHRhYmxlLmJvcmRlcigpKTsKKyAgICAgICAgY2FzZSBUYWJsZUNl
bGxQYWRkaW5nOiAgICAgcmV0dXJuIFN0cmluZyh0YWJsZS5jZWxsUGFkZGluZygpKTsKKyAgICAg
ICAgY2FzZSBUYWJsZUNlbGxTcGFjaW5nOiAgICAgcmV0dXJuIFN0cmluZyh0YWJsZS5jZWxsU3Bh
Y2luZygpKTsKKyAgICAgICAgY2FzZSBUYWJsZUZyYW1lOiAgICAgICAgICAgcmV0dXJuIFN0cmlu
Zyh0YWJsZS5mcmFtZSgpKTsKKyAgICAgICAgY2FzZSBUYWJsZVJ1bGVzOiAgICAgICAgICAgcmV0
dXJuIFN0cmluZyh0YWJsZS5ydWxlcygpKTsKKyAgICAgICAgY2FzZSBUYWJsZVN1bW1hcnk6ICAg
ICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZS5zdW1tYXJ5KCkpOworICAgICAgICBjYXNlIFRhYmxl
V2lkdGg6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlLndpZHRoKCkpOwogICAgIH0KLSAg
fQotICBicmVhazsKLSAgY2FzZSBJRF9DQVBUSU9OOiB7Ci0gICAgSFRNTFRhYmxlQ2FwdGlvbkVs
ZW1lbnRJbXBsICZ0YWJsZUNhcHRpb24gPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVDYXB0aW9uRWxl
bWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1
ZSBIVE1MRWxlbWVudDo6dGFibGVDYXB0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRv
a2VuKSBjb25zdAoreworICAgIEhUTUxUYWJsZUNhcHRpb25FbGVtZW50SW1wbCYgdGFibGVDYXB0
aW9uID0gKnN0YXRpY19jYXN0PEhUTUxUYWJsZUNhcHRpb25FbGVtZW50SW1wbCo+KGltcGwoKSk7
CisgICAgaWYgKHRva2VuID09IFRhYmxlQ2FwdGlvbkFsaWduKQorICAgICAgICByZXR1cm4gU3Ry
aW5nKHRhYmxlQ2FwdGlvbi5hbGlnbigpKTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisK
K1ZhbHVlIEhUTUxFbGVtZW50Ojp0YWJsZUNvbEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0
b2tlbikgY29uc3QKK3sKKyAgICBIVE1MVGFibGVDb2xFbGVtZW50SW1wbCYgdGFibGVDb2wgPSAq
c3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ29sRWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIHN3aXRj
aCAodG9rZW4pIHsKLSAgICBjYXNlIFRhYmxlQ2FwdGlvbkFsaWduOiAgICAgICByZXR1cm4gU3Ry
aW5nKHRhYmxlQ2FwdGlvbi5hbGlnbigpKTsKKyAgICAgICAgY2FzZSBUYWJsZUNvbEFsaWduOiAg
ICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNvbC5hbGlnbigpKTsKKyAgICAgICAgY2FzZSBU
YWJsZUNvbENoOiAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNvbC5jaCgpKTsKKyAg
ICAgICAgY2FzZSBUYWJsZUNvbENoT2ZmOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNv
bC5jaE9mZigpKTsKKyAgICAgICAgY2FzZSBUYWJsZUNvbFNwYW46ICAgICAgICAgICAgcmV0dXJu
IE51bWJlcih0YWJsZUNvbC5zcGFuKCkpOworICAgICAgICBjYXNlIFRhYmxlQ29sVkFsaWduOiAg
ICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ29sLnZBbGlnbigpKTsKKyAgICAgICAgY2FzZSBU
YWJsZUNvbFdpZHRoOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNvbC53aWR0aCgpKTsK
ICAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfQ09MOiB7Ci0gICAgSFRNTFRhYmxlQ29s
RWxlbWVudEltcGwgJnRhYmxlQ29sID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ29sRWxlbWVudElt
cGwgJj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgVGFibGVDb2xB
bGlnbjogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVDb2wuYWxpZ24oKSk7Ci0gICAgY2Fz
ZSBUYWJsZUNvbENoOiAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNvbC5jaCgpKTsK
LSAgICBjYXNlIFRhYmxlQ29sQ2hPZmY6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ29s
LmNoT2ZmKCkpOwotICAgIGNhc2UgVGFibGVDb2xTcGFuOiAgICAgICAgICAgIHJldHVybiBOdW1i
ZXIodGFibGVDb2wuc3BhbigpKTsKLSAgICBjYXNlIFRhYmxlQ29sVkFsaWduOiAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKHRhYmxlQ29sLnZBbGlnbigpKTsKLSAgICBjYXNlIFRhYmxlQ29sV2lkdGg6
ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ29sLndpZHRoKCkpOworICAgIHJldHVybiBV
bmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OnRhYmxlU2VjdGlvbkdldHRlcihF
eGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MVGFibGVTZWN0aW9u
RWxlbWVudEltcGwmIHRhYmxlU2VjdGlvbiA9ICpzdGF0aWNfY2FzdDxIVE1MVGFibGVTZWN0aW9u
RWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2Fz
ZSBUYWJsZVNlY3Rpb25BbGlnbjogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVTZWN0aW9u
LmFsaWduKCkpOworICAgICAgICBjYXNlIFRhYmxlU2VjdGlvbkNoOiAgICAgICAgICAgICAgcmV0
dXJuIFN0cmluZyh0YWJsZVNlY3Rpb24uY2goKSk7CisgICAgICAgIGNhc2UgVGFibGVTZWN0aW9u
Q2hPZmY6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlU2VjdGlvbi5jaE9mZigpKTsKKyAg
ICAgICAgY2FzZSBUYWJsZVNlY3Rpb25WQWxpZ246ICAgICAgICAgIHJldHVybiBTdHJpbmcodGFi
bGVTZWN0aW9uLnZBbGlnbigpKTsKKyAgICAgICAgY2FzZSBUYWJsZVNlY3Rpb25Sb3dzOiAgICAg
ICAgICAgIHJldHVybiBnZXRIVE1MQ29sbGVjdGlvbihleGVjLCB0YWJsZVNlY3Rpb24ucm93cygp
LmdldCgpKTsgLy8gdHlwZSBIVE1MQ29sbGVjdGlvbgogICAgIH0KLSAgfQotICBicmVhazsKLSAg
Y2FzZSBJRF9USEVBRDoKLSAgY2FzZSBJRF9UQk9EWToKLSAgY2FzZSBJRF9URk9PVDogewotICAg
IEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbCAmdGFibGVTZWN0aW9uID0gc3RhdGljX2Nhc3Q8
SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgIHN3aXRjaCAodG9r
ZW4pIHsKLSAgICBjYXNlIFRhYmxlU2VjdGlvbkFsaWduOiAgICAgICAgICAgcmV0dXJuIFN0cmlu
Zyh0YWJsZVNlY3Rpb24uYWxpZ24oKSk7Ci0gICAgY2FzZSBUYWJsZVNlY3Rpb25DaDogICAgICAg
ICAgICAgIHJldHVybiBTdHJpbmcodGFibGVTZWN0aW9uLmNoKCkpOwotICAgIGNhc2UgVGFibGVT
ZWN0aW9uQ2hPZmY6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlU2VjdGlvbi5jaE9mZigp
KTsKLSAgICBjYXNlIFRhYmxlU2VjdGlvblZBbGlnbjogICAgICAgICAgcmV0dXJuIFN0cmluZyh0
YWJsZVNlY3Rpb24udkFsaWduKCkpOwotICAgIGNhc2UgVGFibGVTZWN0aW9uUm93czogICAgICAg
ICAgICByZXR1cm4gZ2V0SFRNTENvbGxlY3Rpb24oZXhlYywgdGFibGVTZWN0aW9uLnJvd3MoKS5n
ZXQoKSk7IC8vIHR5cGUgSFRNTENvbGxlY3Rpb24KKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9
CisKK1ZhbHVlIEhUTUxFbGVtZW50Ojp0YWJsZVJvd0dldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGlu
dCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MVGFibGVSb3dFbGVtZW50SW1wbCYgdGFibGVSb3cg
PSAqc3RhdGljX2Nhc3Q8SFRNTFRhYmxlUm93RWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3
aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBUYWJsZVJvd1Jvd0luZGV4OiAgICAgICAgcmV0
dXJuIE51bWJlcih0YWJsZVJvdy5yb3dJbmRleCgpKTsKKyAgICAgICAgY2FzZSBUYWJsZVJvd1Nl
Y3Rpb25Sb3dJbmRleDogcmV0dXJuIE51bWJlcih0YWJsZVJvdy5zZWN0aW9uUm93SW5kZXgoKSk7
CisgICAgICAgIGNhc2UgVGFibGVSb3dDZWxsczogICAgICAgICAgIHJldHVybiBnZXRIVE1MQ29s
bGVjdGlvbihleGVjLCB0YWJsZVJvdy5jZWxscygpLmdldCgpKTsgLy8gdHlwZSBIVE1MQ29sbGVj
dGlvbgorICAgICAgICBjYXNlIFRhYmxlUm93QWxpZ246ICAgICAgICAgICByZXR1cm4gU3RyaW5n
KHRhYmxlUm93LmFsaWduKCkpOworICAgICAgICBjYXNlIFRhYmxlUm93QmdDb2xvcjogICAgICAg
ICByZXR1cm4gU3RyaW5nKHRhYmxlUm93LmJnQ29sb3IoKSk7CisgICAgICAgIGNhc2UgVGFibGVS
b3dDaDogICAgICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVSb3cuY2goKSk7CisgICAgICAg
IGNhc2UgVGFibGVSb3dDaE9mZjogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVSb3cuY2hP
ZmYoKSk7CisgICAgICAgIGNhc2UgVGFibGVSb3dWQWxpZ246ICAgICAgICAgIHJldHVybiBTdHJp
bmcodGFibGVSb3cudkFsaWduKCkpOwogICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9U
UjogewotICAgSFRNTFRhYmxlUm93RWxlbWVudEltcGwgJnRhYmxlUm93ID0gc3RhdGljX2Nhc3Q8
SFRNTFRhYmxlUm93RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICBzd2l0Y2ggKHRva2VuKSB7
Ci0gICBjYXNlIFRhYmxlUm93Um93SW5kZXg6ICAgICAgICByZXR1cm4gTnVtYmVyKHRhYmxlUm93
LnJvd0luZGV4KCkpOwotICAgY2FzZSBUYWJsZVJvd1NlY3Rpb25Sb3dJbmRleDogcmV0dXJuIE51
bWJlcih0YWJsZVJvdy5zZWN0aW9uUm93SW5kZXgoKSk7Ci0gICBjYXNlIFRhYmxlUm93Q2VsbHM6
ICAgICAgICAgICByZXR1cm4gZ2V0SFRNTENvbGxlY3Rpb24oZXhlYywgdGFibGVSb3cuY2VsbHMo
KS5nZXQoKSk7IC8vIHR5cGUgSFRNTENvbGxlY3Rpb24KLSAgIGNhc2UgVGFibGVSb3dBbGlnbjog
ICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVSb3cuYWxpZ24oKSk7Ci0gICBjYXNlIFRhYmxl
Um93QmdDb2xvcjogICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlUm93LmJnQ29sb3IoKSk7Ci0g
ICBjYXNlIFRhYmxlUm93Q2g6ICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlUm93LmNo
KCkpOwotICAgY2FzZSBUYWJsZVJvd0NoT2ZmOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJs
ZVJvdy5jaE9mZigpKTsKLSAgIGNhc2UgVGFibGVSb3dWQWxpZ246ICAgICAgICAgIHJldHVybiBT
dHJpbmcodGFibGVSb3cudkFsaWduKCkpOwotICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElE
X1RIOgotICBjYXNlIElEX1REOiB7Ci0gICAgSFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsICZ0YWJs
ZUNlbGwgPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVDZWxsRWxlbWVudEltcGwgJj4oZWxlbWVudCk7
Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgVGFibGVDZWxsQ2VsbEluZGV4OiAgICAg
ICByZXR1cm4gTnVtYmVyKHRhYmxlQ2VsbC5jZWxsSW5kZXgoKSk7Ci0gICAgY2FzZSBUYWJsZUNl
bGxBYmJyOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVDZWxsLmFiYnIoKSk7Ci0gICAg
Y2FzZSBUYWJsZUNlbGxBbGlnbjogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVDZWxsLmFs
aWduKCkpOwotICAgIGNhc2UgVGFibGVDZWxsQXhpczogICAgICAgICAgICByZXR1cm4gU3RyaW5n
KHRhYmxlQ2VsbC5heGlzKCkpOwotICAgIGNhc2UgVGFibGVDZWxsQmdDb2xvcjogICAgICAgICBy
ZXR1cm4gU3RyaW5nKHRhYmxlQ2VsbC5iZ0NvbG9yKCkpOwotICAgIGNhc2UgVGFibGVDZWxsQ2g6
ICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ2VsbC5jaCgpKTsKLSAgICBjYXNlIFRh
YmxlQ2VsbENoT2ZmOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNlbGwuY2hPZmYoKSk7
Ci0gICAgY2FzZSBUYWJsZUNlbGxDb2xTcGFuOiAgICAgICAgIHJldHVybiBOdW1iZXIodGFibGVD
ZWxsLmNvbFNwYW4oKSk7Ci0gICAgY2FzZSBUYWJsZUNlbGxIZWFkZXJzOiAgICAgICAgIHJldHVy
biBTdHJpbmcodGFibGVDZWxsLmhlYWRlcnMoKSk7Ci0gICAgY2FzZSBUYWJsZUNlbGxIZWlnaHQ6
ICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVDZWxsLmhlaWdodCgpKTsKLSAgICBjYXNlIFRh
YmxlQ2VsbE5vV3JhcDogICAgICAgICAgcmV0dXJuIEJvb2xlYW4odGFibGVDZWxsLm5vV3JhcCgp
KTsKLSAgICBjYXNlIFRhYmxlQ2VsbFJvd1NwYW46ICAgICAgICAgcmV0dXJuIE51bWJlcih0YWJs
ZUNlbGwucm93U3BhbigpKTsKLSAgICBjYXNlIFRhYmxlQ2VsbFNjb3BlOiAgICAgICAgICAgcmV0
dXJuIFN0cmluZyh0YWJsZUNlbGwuc2NvcGUoKSk7Ci0gICAgY2FzZSBUYWJsZUNlbGxWQWxpZ246
ICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVDZWxsLnZBbGlnbigpKTsKLSAgICBjYXNlIFRh
YmxlQ2VsbFdpZHRoOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNlbGwud2lkdGgoKSk7
CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6dGFibGVD
ZWxsR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxU
YWJsZUNlbGxFbGVtZW50SW1wbCYgdGFibGVDZWxsID0gKnN0YXRpY19jYXN0PEhUTUxUYWJsZUNl
bGxFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICBj
YXNlIFRhYmxlQ2VsbENlbGxJbmRleDogICAgICAgcmV0dXJuIE51bWJlcih0YWJsZUNlbGwuY2Vs
bEluZGV4KCkpOworICAgICAgICBjYXNlIFRhYmxlQ2VsbEFiYnI6ICAgICAgICAgICAgcmV0dXJu
IFN0cmluZyh0YWJsZUNlbGwuYWJicigpKTsKKyAgICAgICAgY2FzZSBUYWJsZUNlbGxBbGlnbjog
ICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVDZWxsLmFsaWduKCkpOworICAgICAgICBjYXNl
IFRhYmxlQ2VsbEF4aXM6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNlbGwuYXhpcygp
KTsKKyAgICAgICAgY2FzZSBUYWJsZUNlbGxCZ0NvbG9yOiAgICAgICAgIHJldHVybiBTdHJpbmco
dGFibGVDZWxsLmJnQ29sb3IoKSk7CisgICAgICAgIGNhc2UgVGFibGVDZWxsQ2g6ICAgICAgICAg
ICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ2VsbC5jaCgpKTsKKyAgICAgICAgY2FzZSBUYWJsZUNl
bGxDaE9mZjogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVDZWxsLmNoT2ZmKCkpOworICAg
ICAgICBjYXNlIFRhYmxlQ2VsbENvbFNwYW46ICAgICAgICAgcmV0dXJuIE51bWJlcih0YWJsZUNl
bGwuY29sU3BhbigpKTsKKyAgICAgICAgY2FzZSBUYWJsZUNlbGxIZWFkZXJzOiAgICAgICAgIHJl
dHVybiBTdHJpbmcodGFibGVDZWxsLmhlYWRlcnMoKSk7CisgICAgICAgIGNhc2UgVGFibGVDZWxs
SGVpZ2h0OiAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ2VsbC5oZWlnaHQoKSk7CisgICAg
ICAgIGNhc2UgVGFibGVDZWxsTm9XcmFwOiAgICAgICAgICByZXR1cm4gQm9vbGVhbih0YWJsZUNl
bGwubm9XcmFwKCkpOworICAgICAgICBjYXNlIFRhYmxlQ2VsbFJvd1NwYW46ICAgICAgICAgcmV0
dXJuIE51bWJlcih0YWJsZUNlbGwucm93U3BhbigpKTsKKyAgICAgICAgY2FzZSBUYWJsZUNlbGxT
Y29wZTogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVDZWxsLnNjb3BlKCkpOworICAgICAg
ICBjYXNlIFRhYmxlQ2VsbFZBbGlnbjogICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNlbGwu
dkFsaWduKCkpOworICAgICAgICBjYXNlIFRhYmxlQ2VsbFdpZHRoOiAgICAgICAgICAgcmV0dXJu
IFN0cmluZyh0YWJsZUNlbGwud2lkdGgoKSk7CiAgICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNl
IElEX0ZSQU1FU0VUOiB7Ci0gICAgSFRNTEZyYW1lU2V0RWxlbWVudEltcGwgJmZyYW1lU2V0ID0g
c3RhdGljX2Nhc3Q8SFRNTEZyYW1lU2V0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgcmV0
dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6ZnJhbWVTZXRHZXR0ZXIo
RXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTEZyYW1lU2V0RWxl
bWVudEltcGwmIGZyYW1lU2V0ID0gKnN0YXRpY19jYXN0PEhUTUxGcmFtZVNldEVsZW1lbnRJbXBs
Kj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBGcmFtZVNldENvbHM6
ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhmcmFtZVNldC5jb2xzKCkpOwotICAgIGNhc2UgRnJh
bWVTZXRSb3dzOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoZnJhbWVTZXQucm93cygpKTsKKyAg
ICAgICAgY2FzZSBGcmFtZVNldENvbHM6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhmcmFtZVNl
dC5jb2xzKCkpOworICAgICAgICBjYXNlIEZyYW1lU2V0Um93czogICAgICAgICAgICByZXR1cm4g
U3RyaW5nKGZyYW1lU2V0LnJvd3MoKSk7CiAgICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElE
X0ZSQU1FOiB7Ci0gICAgSFRNTEZyYW1lRWxlbWVudEltcGwgJmZyYW1lRWxlbWVudCA9IHN0YXRp
Y19jYXN0PEhUTUxGcmFtZUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgIHN3aXRjaCAodG9r
ZW4pIHsKLSAgICBjYXNlIEZyYW1lQ29udGVudERvY3VtZW50OiByZXR1cm4gY2hlY2tOb2RlU2Vj
dXJpdHkoZXhlYyxmcmFtZUVsZW1lbnQuY29udGVudERvY3VtZW50KCkpID8gCi0JCQkJICAgICAg
Z2V0RE9NTm9kZShleGVjLCBmcmFtZUVsZW1lbnQuY29udGVudERvY3VtZW50KCkpIDogVW5kZWZp
bmVkKCk7Ci0gICAgY2FzZSBGcmFtZUNvbnRlbnRXaW5kb3c6ICAgcmV0dXJuIGNoZWNrTm9kZVNl
Y3VyaXR5KGV4ZWMsZnJhbWVFbGVtZW50LmNvbnRlbnREb2N1bWVudCgpKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgPyBXaW5kb3c6OnJldHJpZXZlKGZyYW1lRWxlbWVudC5j
b250ZW50UGFydCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBVbmRl
ZmluZWQoKTsKLSAgICBjYXNlIEZyYW1lRnJhbWVCb3JkZXI6ICAgICByZXR1cm4gU3RyaW5nKGZy
YW1lRWxlbWVudC5mcmFtZUJvcmRlcigpKTsKLSAgICBjYXNlIEZyYW1lTG9uZ0Rlc2M6ICAgICAg
ICByZXR1cm4gU3RyaW5nKGZyYW1lRWxlbWVudC5sb25nRGVzYygpKTsKLSAgICBjYXNlIEZyYW1l
TWFyZ2luSGVpZ2h0OiAgICByZXR1cm4gU3RyaW5nKGZyYW1lRWxlbWVudC5tYXJnaW5IZWlnaHQo
KSk7Ci0gICAgY2FzZSBGcmFtZU1hcmdpbldpZHRoOiAgICAgcmV0dXJuIFN0cmluZyhmcmFtZUVs
ZW1lbnQubWFyZ2luV2lkdGgoKSk7Ci0gICAgY2FzZSBGcmFtZU5hbWU6ICAgICAgICAgICAgcmV0
dXJuIFN0cmluZyhmcmFtZUVsZW1lbnQubmFtZSgpKTsKLSAgICBjYXNlIEZyYW1lTm9SZXNpemU6
ICAgICAgICByZXR1cm4gQm9vbGVhbihmcmFtZUVsZW1lbnQubm9SZXNpemUoKSk7Ci0gICAgY2Fz
ZSBGcmFtZVNjcm9sbGluZzogICAgICAgcmV0dXJuIFN0cmluZyhmcmFtZUVsZW1lbnQuc2Nyb2xs
aW5nKCkpOwotICAgIGNhc2UgRnJhbWVTcmM6Ci0gICAgY2FzZSBGcmFtZUxvY2F0aW9uOiAgICAg
ICAgcmV0dXJuIFN0cmluZyhmcmFtZUVsZW1lbnQuc3JjKCkpOworICAgIHJldHVybiBVbmRlZmlu
ZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OmZyYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhl
YywgaW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxGcmFtZUVsZW1lbnRJbXBsJiBmcmFtZUVs
ZW1lbnQgPSAqc3RhdGljX2Nhc3Q8SFRNTEZyYW1lRWxlbWVudEltcGwqPihpbXBsKCkpOworICAg
IHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBGcmFtZUNvbnRlbnREb2N1bWVudDogcmV0
dXJuIGNoZWNrTm9kZVNlY3VyaXR5KGV4ZWMsZnJhbWVFbGVtZW50LmNvbnRlbnREb2N1bWVudCgp
KSA/IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0RE9NTm9k
ZShleGVjLCBmcmFtZUVsZW1lbnQuY29udGVudERvY3VtZW50KCkpIDogVW5kZWZpbmVkKCk7Cisg
ICAgICAgIGNhc2UgRnJhbWVDb250ZW50V2luZG93OiAgIHJldHVybiBjaGVja05vZGVTZWN1cml0
eShleGVjLGZyYW1lRWxlbWVudC5jb250ZW50RG9jdW1lbnQoKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA/IFdpbmRvdzo6cmV0cmlldmUoZnJhbWVFbGVtZW50LmNv
bnRlbnRQYXJ0KCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBV
bmRlZmluZWQoKTsKKyAgICAgICAgY2FzZSBGcmFtZUZyYW1lQm9yZGVyOiAgICAgcmV0dXJuIFN0
cmluZyhmcmFtZUVsZW1lbnQuZnJhbWVCb3JkZXIoKSk7CisgICAgICAgIGNhc2UgRnJhbWVMb25n
RGVzYzogICAgICAgIHJldHVybiBTdHJpbmcoZnJhbWVFbGVtZW50LmxvbmdEZXNjKCkpOworICAg
ICAgICBjYXNlIEZyYW1lTWFyZ2luSGVpZ2h0OiAgICByZXR1cm4gU3RyaW5nKGZyYW1lRWxlbWVu
dC5tYXJnaW5IZWlnaHQoKSk7CisgICAgICAgIGNhc2UgRnJhbWVNYXJnaW5XaWR0aDogICAgIHJl
dHVybiBTdHJpbmcoZnJhbWVFbGVtZW50Lm1hcmdpbldpZHRoKCkpOworICAgICAgICBjYXNlIEZy
YW1lTmFtZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGZyYW1lRWxlbWVudC5uYW1lKCkpOwor
ICAgICAgICBjYXNlIEZyYW1lTm9SZXNpemU6ICAgICAgICByZXR1cm4gQm9vbGVhbihmcmFtZUVs
ZW1lbnQubm9SZXNpemUoKSk7CisgICAgICAgIGNhc2UgRnJhbWVTY3JvbGxpbmc6ICAgICAgIHJl
dHVybiBTdHJpbmcoZnJhbWVFbGVtZW50LnNjcm9sbGluZygpKTsKKyAgICAgICAgY2FzZSBGcmFt
ZVNyYzoKKyAgICAgICAgY2FzZSBGcmFtZUxvY2F0aW9uOiAgICAgICAgcmV0dXJuIFN0cmluZyhm
cmFtZUVsZW1lbnQuc3JjKCkpOwogICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9JRlJB
TUU6IHsKLSAgICBIVE1MSUZyYW1lRWxlbWVudEltcGwgJmlGcmFtZSA9IHN0YXRpY19jYXN0PEhU
TUxJRnJhbWVFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0g
ICAgY2FzZSBJRnJhbWVBbGlnbjogICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpRnJhbWUu
YWxpZ24oKSk7Ci0gICAgICAvLyAjIyMgc2VjdXJpdHkgY2hlY2sgPwotICAgIGNhc2UgSUZyYW1l
RG9jdW1lbnQ6IC8vIG5vbi1zdGFuZGFyZCwgbWFwcGVkIHRvIGNvbnRlbnREb2N1bWVudAotICAg
IGNhc2UgSUZyYW1lQ29udGVudERvY3VtZW50OiByZXR1cm4gY2hlY2tOb2RlU2VjdXJpdHkoZXhl
YyxpRnJhbWUuY29udGVudERvY3VtZW50KCkpID8gCi0JCQkJICBnZXRET01Ob2RlKGV4ZWMsIGlG
cmFtZS5jb250ZW50RG9jdW1lbnQoKSkgOiBVbmRlZmluZWQoKTsKLSAgICBjYXNlIElGcmFtZUNv
bnRlbnRXaW5kb3c6CXJldHVybiBjaGVja05vZGVTZWN1cml0eShleGVjLGlGcmFtZS5jb250ZW50
RG9jdW1lbnQoKSkgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFdpbmRv
dzo6cmV0cmlldmUoaUZyYW1lLmNvbnRlbnRQYXJ0KCkpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA6IFVuZGVmaW5lZCgpOwotICAgIGNhc2UgSUZyYW1lRnJhbWVCb3JkZXI6
ICAgICByZXR1cm4gU3RyaW5nKGlGcmFtZS5mcmFtZUJvcmRlcigpKTsKLSAgICBjYXNlIElGcmFt
ZUhlaWdodDogICAgICAgICAgcmV0dXJuIFN0cmluZyhpRnJhbWUuaGVpZ2h0KCkpOwotICAgIGNh
c2UgSUZyYW1lTG9uZ0Rlc2M6ICAgICAgICByZXR1cm4gU3RyaW5nKGlGcmFtZS5sb25nRGVzYygp
KTsKLSAgICBjYXNlIElGcmFtZU1hcmdpbkhlaWdodDogICAgcmV0dXJuIFN0cmluZyhpRnJhbWUu
bWFyZ2luSGVpZ2h0KCkpOwotICAgIGNhc2UgSUZyYW1lTWFyZ2luV2lkdGg6ICAgICByZXR1cm4g
U3RyaW5nKGlGcmFtZS5tYXJnaW5XaWR0aCgpKTsKLSAgICBjYXNlIElGcmFtZU5hbWU6ICAgICAg
ICAgICAgcmV0dXJuIFN0cmluZyhpRnJhbWUubmFtZSgpKTsKLSAgICBjYXNlIElGcmFtZVNjcm9s
bGluZzogICAgICAgcmV0dXJuIFN0cmluZyhpRnJhbWUuc2Nyb2xsaW5nKCkpOwotICAgIGNhc2Ug
SUZyYW1lU3JjOiAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGlGcmFtZS5zcmMoKSk7Ci0gICAg
Y2FzZSBJRnJhbWVXaWR0aDogICAgICAgICAgIHJldHVybiBTdHJpbmcoaUZyYW1lLndpZHRoKCkp
OworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OmlGcmFt
ZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MSUZy
YW1lRWxlbWVudEltcGwmIGlGcmFtZSA9ICpzdGF0aWNfY2FzdDxIVE1MSUZyYW1lRWxlbWVudElt
cGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBJRnJhbWVB
bGlnbjogICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpRnJhbWUuYWxpZ24oKSk7CisgICAg
ICAgICAgLy8gIyMjIHNlY3VyaXR5IGNoZWNrID8KKyAgICAgICAgY2FzZSBJRnJhbWVEb2N1bWVu
dDogLy8gbm9uLXN0YW5kYXJkLCBtYXBwZWQgdG8gY29udGVudERvY3VtZW50CisgICAgICAgIGNh
c2UgSUZyYW1lQ29udGVudERvY3VtZW50OiByZXR1cm4gY2hlY2tOb2RlU2VjdXJpdHkoZXhlYyxp
RnJhbWUuY29udGVudERvY3VtZW50KCkpID8gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdldERPTU5vZGUoZXhlYywgaUZyYW1lLmNvbnRlbnREb2N1bWVudCgpKSA6IFVu
ZGVmaW5lZCgpOworICAgICAgICBjYXNlIElGcmFtZUNvbnRlbnRXaW5kb3c6CXJldHVybiBjaGVj
a05vZGVTZWN1cml0eShleGVjLGlGcmFtZS5jb250ZW50RG9jdW1lbnQoKSkgCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBXaW5kb3c6OnJldHJpZXZlKGlGcmFtZS5j
b250ZW50UGFydCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDog
VW5kZWZpbmVkKCk7CisgICAgICAgIGNhc2UgSUZyYW1lRnJhbWVCb3JkZXI6ICAgICByZXR1cm4g
U3RyaW5nKGlGcmFtZS5mcmFtZUJvcmRlcigpKTsKKyAgICAgICAgY2FzZSBJRnJhbWVIZWlnaHQ6
ICAgICAgICAgIHJldHVybiBTdHJpbmcoaUZyYW1lLmhlaWdodCgpKTsKKyAgICAgICAgY2FzZSBJ
RnJhbWVMb25nRGVzYzogICAgICAgIHJldHVybiBTdHJpbmcoaUZyYW1lLmxvbmdEZXNjKCkpOwor
ICAgICAgICBjYXNlIElGcmFtZU1hcmdpbkhlaWdodDogICAgcmV0dXJuIFN0cmluZyhpRnJhbWUu
bWFyZ2luSGVpZ2h0KCkpOworICAgICAgICBjYXNlIElGcmFtZU1hcmdpbldpZHRoOiAgICAgcmV0
dXJuIFN0cmluZyhpRnJhbWUubWFyZ2luV2lkdGgoKSk7CisgICAgICAgIGNhc2UgSUZyYW1lTmFt
ZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGlGcmFtZS5uYW1lKCkpOworICAgICAgICBjYXNl
IElGcmFtZVNjcm9sbGluZzogICAgICAgcmV0dXJuIFN0cmluZyhpRnJhbWUuc2Nyb2xsaW5nKCkp
OworICAgICAgICBjYXNlIElGcmFtZVNyYzogICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpRnJh
bWUuc3JjKCkpOworICAgICAgICBjYXNlIElGcmFtZVdpZHRoOiAgICAgICAgICAgcmV0dXJuIFN0
cmluZyhpRnJhbWUud2lkdGgoKSk7CiAgICAgfQotICAgIGJyZWFrOwotICB9Ci0gIH0gLy8geGVt
YWNzIChvciBhcm50KSBjb3VsZCBiZSBhIGJpdCBzbWFydGVyIHdoZW4gaXQgY29tZXMgdG8gaW5k
ZW50aW5nIHN3aXRjaCgpZXMgOykKLSAgLy8gaXRzIG5vdCBhcm50IHRvIGJsYW1lIC0gaXRzIHRo
ZSBvcmlnaW5hbCBTdHJvdXN0cnVwIHN0eWxlIHdlIGxpa2UgOikgKERpcmspCisgICAgcmV0dXJu
IFVuZGVmaW5lZCgpOworfQogCi0gIC8vIGdlbmVyaWMgcHJvcGVydGllcwotICBzd2l0Y2ggKHRv
a2VuKSB7Ci0gIGNhc2UgRWxlbWVudElkOgotICAgICAgLy8gaWh0LmNvbSByZWxpZXMgb24gdGhp
cyB2YWx1ZSBiZWluZyAiIiB3aGVuIG5vIGlkIGlzIHByZXNlbnQuICBPdGhlciBicm93c2VycyBk
byB0aGlzIGFzIHdlbGwuCi0gICAgICAvLyBTbyB3ZSB1c2UgU3RyaW5nKCkgaW5zdGVhZCBvZiBT
dHJpbmcoKSBoZXJlLgotICAgIHJldHVybiBTdHJpbmcoZWxlbWVudC5pZERPTSgpKTsKLSAgY2Fz
ZSBFbGVtZW50VGl0bGU6Ci0gICAgcmV0dXJuIFN0cmluZyhlbGVtZW50LnRpdGxlKCkpOwotICBj
YXNlIEVsZW1lbnRMYW5nOgotICAgIHJldHVybiBTdHJpbmcoZWxlbWVudC5sYW5nKCkpOwotICBj
YXNlIEVsZW1lbnREaXI6Ci0gICAgcmV0dXJuIFN0cmluZyhlbGVtZW50LmRpcigpKTsKLSAgY2Fz
ZSBFbGVtZW50Q2xhc3NOYW1lOgotICAgIHJldHVybiBTdHJpbmcoZWxlbWVudC5jbGFzc05hbWUo
KSk7Ci0gIGNhc2UgRWxlbWVudElubmVySFRNTDoKLSAgICByZXR1cm4gU3RyaW5nKGVsZW1lbnQu
aW5uZXJIVE1MKCkpOwotICBjYXNlIEVsZW1lbnRJbm5lclRleHQ6Ci0gICAgaWYgKERvY3VtZW50
SW1wbCogZG9jID0gaW1wbCgpLT5nZXREb2N1bWVudCgpKQotICAgICAgZG9jLT51cGRhdGVMYXlv
dXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKLSAgICByZXR1cm4gU3RyaW5nKGVsZW1lbnQu
aW5uZXJUZXh0KCkpOwotICBjYXNlIEVsZW1lbnRPdXRlckhUTUw6Ci0gICAgcmV0dXJuIFN0cmlu
ZyhlbGVtZW50Lm91dGVySFRNTCgpKTsKLSAgY2FzZSBFbGVtZW50T3V0ZXJUZXh0OgotICAgIHJl
dHVybiBTdHJpbmcoZWxlbWVudC5vdXRlclRleHQoKSk7Ci0gIGNhc2UgRWxlbWVudERvY3VtZW50
OgotICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsZWxlbWVudC5vd25lckRvY3VtZW50KCkpOwot
ICBjYXNlIEVsZW1lbnRDaGlsZHJlbjoKLSAgICByZXR1cm4gZ2V0SFRNTENvbGxlY3Rpb24oZXhl
YywgZWxlbWVudC5jaGlsZHJlbigpLmdldCgpKTsKLSAgY2FzZSBFbGVtZW50Q29udGVudEVkaXRh
YmxlOgotICAgIHJldHVybiBTdHJpbmcoZWxlbWVudC5jb250ZW50RWRpdGFibGUoKSk7Ci0gIGNh
c2UgRWxlbWVudElzQ29udGVudEVkaXRhYmxlOgotICAgIHJldHVybiBCb29sZWFuKGVsZW1lbnQu
aXNDb250ZW50RWRpdGFibGUoKSk7Ci0gIC8vICMjIyB3aGF0IGFib3V0IHN0eWxlPyBvciBpcyB0
aGlzIHVzZWQgaW5zdGVhZCBmb3IgRE9NMiBzdHlsZXNoZWV0cz8KLSAgfQotICBrZFdhcm5pbmco
KSA8PCAiSFRNTEVsZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkgdW5oYW5kbGVkIHRva2VuICIgPDwg
dG9rZW4gPDwgZW5kbDsKLSAgcmV0dXJuIFVuZGVmaW5lZCgpOworVmFsdWUgSFRNTEVsZW1lbnQ6
Om1hcnF1ZWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAg
Ly8gRklYTUU6IEZpbmQgb3V0IHdoYXQgV2luSUUgZXhwb3NlcyBhcyBwcm9wZXJ0aWVzIGFuZCBp
bXBsZW1lbnQgdGhpcy4KKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxF
bGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25z
dAoreworICAgIC8vIENoZWNrIG91ciBzZXQgb2YgZ2VuZXJpYyBwcm9wZXJ0aWVzIGZpcnN0Lgor
ICAgIEhUTUxFbGVtZW50SW1wbCAmZWxlbWVudCA9ICpzdGF0aWNfY2FzdDxIVE1MRWxlbWVudElt
cGwgKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgRWxlbWVu
dElkOgorICAgICAgICAvLyBpaHQuY29tIHJlbGllcyBvbiB0aGlzIHZhbHVlIGJlaW5nICIiIHdo
ZW4gbm8gaWQgaXMgcHJlc2VudC4gIE90aGVyIGJyb3dzZXJzIGRvIHRoaXMgYXMgd2VsbC4KKyAg
ICAgICAgLy8gU28gd2UgdXNlIFN0cmluZygpIGluc3RlYWQgb2YgU3RyaW5nKCkgaGVyZS4KKyAg
ICAgICAgcmV0dXJuIFN0cmluZyhlbGVtZW50LmlkKCkpOworICAgICAgICBjYXNlIEVsZW1lbnRU
aXRsZToKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcoZWxlbWVudC50aXRsZSgpKTsKKyAgICAg
ICAgY2FzZSBFbGVtZW50TGFuZzoKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcoZWxlbWVudC5s
YW5nKCkpOworICAgICAgICBjYXNlIEVsZW1lbnREaXI6CisgICAgICAgICAgICByZXR1cm4gU3Ry
aW5nKGVsZW1lbnQuZGlyKCkpOworICAgICAgICBjYXNlIEVsZW1lbnRDbGFzc05hbWU6CisgICAg
ICAgICAgICByZXR1cm4gU3RyaW5nKGVsZW1lbnQuY2xhc3NOYW1lKCkpOworICAgICAgICBjYXNl
IEVsZW1lbnRJbm5lckhUTUw6CisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGVsZW1lbnQuaW5u
ZXJIVE1MKCkpOworICAgICAgICBjYXNlIEVsZW1lbnRJbm5lclRleHQ6CisgICAgICAgICAgICBp
ZiAoRG9jdW1lbnRJbXBsKiBkb2MgPSBpbXBsKCktPmdldERvY3VtZW50KCkpCisgICAgICAgICAg
ICAgICAgZG9jLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKKyAgICAg
ICAgICAgIHJldHVybiBTdHJpbmcoZWxlbWVudC5pbm5lclRleHQoKSk7CisgICAgICAgIGNhc2Ug
RWxlbWVudE91dGVySFRNTDoKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcoZWxlbWVudC5vdXRl
ckhUTUwoKSk7CisgICAgICAgIGNhc2UgRWxlbWVudE91dGVyVGV4dDoKKyAgICAgICAgICAgIHJl
dHVybiBTdHJpbmcoZWxlbWVudC5vdXRlclRleHQoKSk7CisgICAgICAgIGNhc2UgRWxlbWVudERv
Y3VtZW50OgorICAgICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyxlbGVtZW50Lm93bmVy
RG9jdW1lbnQoKSk7CisgICAgICAgIGNhc2UgRWxlbWVudENoaWxkcmVuOgorICAgICAgICAgICAg
cmV0dXJuIGdldEhUTUxDb2xsZWN0aW9uKGV4ZWMsIGVsZW1lbnQuY2hpbGRyZW4oKS5nZXQoKSk7
CisgICAgICAgIGNhc2UgRWxlbWVudENvbnRlbnRFZGl0YWJsZToKKyAgICAgICAgICAgIHJldHVy
biBTdHJpbmcoZWxlbWVudC5jb250ZW50RWRpdGFibGUoKSk7CisgICAgICAgIGNhc2UgRWxlbWVu
dElzQ29udGVudEVkaXRhYmxlOgorICAgICAgICAgICAgcmV0dXJuIEJvb2xlYW4oZWxlbWVudC5p
c0NvbnRlbnRFZGl0YWJsZSgpKTsKKyAgICB9CisKKyAgICAvLyBOb3cgY2hlY2sgdGhlIHByb3Bl
cnRpZXMgc3BlY2lmaWMgdG8gb3VyIGVsZW1lbnQgdHlwZS4KKyAgICBjb25zdCBHZXRTZXRJbmZv
KiBpbmZvID0gZ2V0U2V0SW5mbygpOworICAgIGlmIChpbmZvICYmIGluZm8tPm1fZ2V0dGVyKQor
ICAgICAgICByZXR1cm4gKHRoaXMtPiooaW5mby0+bV9nZXR0ZXIpKShleGVjLCB0b2tlbik7Cisg
ICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCiBib29sIEtKUzo6SFRNTEVsZW1lbnQ6Omhhc093
blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1l
KSBjb25zdAogewogI2lmZGVmIEtKU19WRVJCT1NFCi0gIC8va2REZWJ1Zyg2MDcwKSA8PCAiSFRN
TEVsZW1lbnQ6Omhhc1Byb3BlcnR5ICIgPDwgcHJvcGVydHlOYW1lLnFzdHJpbmcoKSA8PCBlbmRs
OworICAgIC8va2REZWJ1Zyg2MDcwKSA8PCAiSFRNTEVsZW1lbnQ6Omhhc1Byb3BlcnR5ICIgPDwg
cHJvcGVydHlOYW1lLnFzdHJpbmcoKSA8PCBlbmRsOwogI2VuZGlmCi0gIEhUTUxFbGVtZW50SW1w
bCAmZWxlbWVudCA9ICpzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwgKj4oaW1wbCgpKTsKLSAg
Ly8gRmlyc3QgbG9vayBhdCBkeW5hbWljIHByb3BlcnRpZXMgLSBrZWVwIHRoaXMgaW4gc3luYyB3
aXRoIHRyeUdldAotICBzd2l0Y2ggKGVsZW1lbnQuaWQoKSkgewotICAgIGNhc2UgSURfRk9STTog
ewotICAgICAgSFRNTEZvcm1FbGVtZW50SW1wbCAmZm9ybSA9IHN0YXRpY19jYXN0PEhUTUxGb3Jt
RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICAvLyBDaGVjayBpZiB3ZSdyZSByZXRyaWV2
aW5nIGFuIGVsZW1lbnQgKGJ5IGluZGV4IG9yIGJ5IG5hbWUpCi0gICAgICBib29sIG9rOwotICAg
ICAgdWludCB1ID0gcHJvcGVydHlOYW1lLnRvVUxvbmcoJm9rKTsKLSAgICAgIGlmIChvayAmJiBm
b3JtLmVsZW1lbnRzKCktPml0ZW0odSkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgaWYg
KGZvcm0uZWxlbWVudHMoKS0+bmFtZWRJdGVtKHByb3BlcnR5TmFtZS5zdHJpbmcoKSkpCi0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgSURfU0VMRUNU
OiB7Ci0gICAgICBIVE1MU2VsZWN0RWxlbWVudEltcGwgJnNlbGVjdCA9IHN0YXRpY19jYXN0PEhU
TUxTZWxlY3RFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIGJvb2wgb2s7Ci0gICAgICB1
aW50IHUgPSBwcm9wZXJ0eU5hbWUudG9VTG9uZygmb2spOwotICAgICAgaWYgKG9rICYmIHNlbGVj
dC5vcHRpb25zSFRNTENvbGxlY3Rpb24oKS0+aXRlbSh1KSkKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBJRF9JTlBVVDogewotICAgICAgSFRNTElu
cHV0RWxlbWVudEltcGwgJmlucHV0ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudEltcGwg
Jj4oZWxlbWVudCk7Ci0gICAgICBjb25zdCBIYXNoVGFibGUqIHRhYmxlID0gY2xhc3NJbmZvKCkt
PnByb3BIYXNoVGFibGU7Ci0gICAgICBjb25zdCBIYXNoRW50cnkqIGVudHJ5ID0gTG9va3VwOjpm
aW5kRW50cnkodGFibGUsIHByb3BlcnR5TmFtZSk7Ci0gICAgICBpZiAoZW50cnkpIHsKLSAgICAg
ICAgc3dpdGNoKGVudHJ5LT52YWx1ZSkgewotICAgICAgICAgIGNhc2UgSW5wdXRTZWxlY3Rpb25T
dGFydDoKLSAgICAgICAgICBjYXNlIElucHV0U2VsZWN0aW9uRW5kOgotICAgICAgICAgIGNhc2Ug
SW5wdXRTZXRTZWxlY3Rpb25SYW5nZToKLSAgICAgICAgICAgIHJldHVybiBpbnB1dC5jYW5IYXZl
U2VsZWN0aW9uKCk7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOworICAg
IEhUTUxFbGVtZW50SW1wbCAmZWxlbWVudCA9ICpzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwg
Kj4oaW1wbCgpKTsKKyAgICAvLyBGaXJzdCBsb29rIGF0IGR5bmFtaWMgcHJvcGVydGllcyAtIGtl
ZXAgdGhpcyBpbiBzeW5jIHdpdGggdHJ5R2V0CisgICAgaWYgKGVsZW1lbnQuaGFzTG9jYWxOYW1l
KEhUTUxOYW1lczo6Zm9ybSgpKSkgeworICAgICAgICBIVE1MRm9ybUVsZW1lbnRJbXBsICZmb3Jt
ID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICAgICAg
Ly8gQ2hlY2sgaWYgd2UncmUgcmV0cmlldmluZyBhbiBlbGVtZW50IChieSBpbmRleCBvciBieSBu
YW1lKQorICAgICAgICBib29sIG9rOworICAgICAgICB1aW50IHUgPSBwcm9wZXJ0eU5hbWUudG9V
TG9uZygmb2spOworICAgICAgICBpZiAob2sgJiYgZm9ybS5lbGVtZW50cygpLT5pdGVtKHUpKQor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChmb3JtLmVsZW1lbnRzKCktPm5h
bWVkSXRlbShwcm9wZXJ0eU5hbWUuc3RyaW5nKCkpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6c2Vs
ZWN0KCkpKSB7CisgICAgICAgIEhUTUxTZWxlY3RFbGVtZW50SW1wbCAmc2VsZWN0ID0gc3RhdGlj
X2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgICAgICBib29sIG9r
OworICAgICAgICB1aW50IHUgPSBwcm9wZXJ0eU5hbWUudG9VTG9uZygmb2spOworICAgICAgICBp
ZiAob2sgJiYgc2VsZWN0Lm9wdGlvbnNIVE1MQ29sbGVjdGlvbigpLT5pdGVtKHUpKQorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6aW5wdXQoKSkpIHsKKyAgICAgICAgSFRNTElucHV0RWxlbWVudEltcGwg
JmlucHV0ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Cisg
ICAgICAgIGNvbnN0IEhhc2hUYWJsZSogdGFibGUgPSBjbGFzc0luZm8oKS0+cHJvcEhhc2hUYWJs
ZTsKKyAgICAgICAgY29uc3QgSGFzaEVudHJ5KiBlbnRyeSA9IExvb2t1cDo6ZmluZEVudHJ5KHRh
YmxlLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICBpZiAoZW50cnkpIHsKKyAgICAgICAgICAgIHN3
aXRjaChlbnRyeS0+dmFsdWUpIHsKKyAgICAgICAgICAgIGNhc2UgSW5wdXRTZWxlY3Rpb25TdGFy
dDoKKyAgICAgICAgICAgIGNhc2UgSW5wdXRTZWxlY3Rpb25FbmQ6CisgICAgICAgICAgICBjYXNl
IElucHV0U2V0U2VsZWN0aW9uUmFuZ2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIGlucHV0LmNh
bkhhdmVTZWxlY3Rpb24oKTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGJyZWFrOwog
ICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KIAotICByZXR1cm4gRE9NRWxl
bWVudDo6aGFzT3duUHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lKTsKKyAgICByZXR1cm4gRE9N
RWxlbWVudDo6aGFzT3duUHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lKTsKIH0KIAogVVN0cmlu
ZyBLSlM6OkhUTUxFbGVtZW50Ojp0b1N0cmluZyhFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0CiB7Ci0g
IGlmIChpbXBsKCktPmlkKCkgPT0gSURfQSkKLSAgICByZXR1cm4gVVN0cmluZyhzdGF0aWNfY2Fz
dDxjb25zdCBIVE1MQW5jaG9yRWxlbWVudEltcGwgKj4oaW1wbCgpKS0+aHJlZigpKTsKLSAgZWxz
ZQotICAgIHJldHVybiBET01FbGVtZW50Ojp0b1N0cmluZyhleGVjKTsKKyAgICBpZiAoaW1wbCgp
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YSgpKSkKKyAgICAgICAgcmV0dXJuIFVTdHJpbmcoc3Rh
dGljX2Nhc3Q8Y29uc3QgSFRNTEFuY2hvckVsZW1lbnRJbXBsICo+KGltcGwoKSktPmhyZWYoKSk7
CisgICAgZWxzZQorICAgICAgICByZXR1cm4gRE9NRWxlbWVudDo6dG9TdHJpbmcoZXhlYyk7CiB9
CiAKIHN0YXRpYyBIVE1MRm9ybUVsZW1lbnRJbXBsICpnZXRGb3JtKEhUTUxFbGVtZW50SW1wbCAq
ZWxlbWVudCkKIHsKLSAgaWYgKGVsZW1lbnQtPmlzR2VuZXJpY0Zvcm1FbGVtZW50KCkpCi0gICAg
cmV0dXJuIHN0YXRpY19jYXN0PEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsICo+KGVsZW1lbnQp
LT5mb3JtKCk7Ci0KLSAgc3dpdGNoIChlbGVtZW50LT5pZCgpKSB7Ci0gICAgY2FzZSBJRF9MQUJF
TDoKLSAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MTGFiZWxFbGVtZW50SW1wbCAqPihlbGVt
ZW50KS0+Zm9ybSgpOwotICAgIGNhc2UgSURfT0JKRUNUOgotICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PEhUTUxPYmplY3RFbGVtZW50SW1wbCAqPihlbGVtZW50KS0+Zm9ybSgpOwotICB9CisgICAg
aWYgKGVsZW1lbnQtPmlzR2VuZXJpY0Zvcm1FbGVtZW50KCkpCisgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbCAqPihlbGVtZW50KS0+Zm9ybSgpOwor
ICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6bGFiZWwoKSkpCisgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxIVE1MTGFiZWxFbGVtZW50SW1wbCAqPihlbGVtZW50KS0+Zm9y
bSgpOworICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b2JqZWN0KCkpKQor
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTE9iamVjdEVsZW1lbnRJbXBsICo+KGVsZW1l
bnQpLT5mb3JtKCk7CiAKLSAgcmV0dXJuIDA7CisgICAgcmV0dXJuIDA7CiB9CiAKIHZvaWQgS0pT
OjpIVE1MRWxlbWVudDo6cHVzaEV2ZW50SGFuZGxlclNjb3BlKEV4ZWNTdGF0ZSAqZXhlYywgU2Nv
cGVDaGFpbiAmc2NvcGUpIGNvbnN0CkBAIC0yMTQyLDcgKzIyOTYsNyBAQCB2b2lkIEtKUzo6SFRN
TEVsZW1lbnQ6OnB1c2hFdmVudEhhbmRsZXJTCiAgICAgc2NvcGUucHVzaChzdGF0aWNfY2FzdDxP
YmplY3RJbXAgKj4oZ2V0RE9NTm9kZShleGVjLCBmb3JtKSkpOwogICBlbHNlIHsKICAgICBOb2Rl
SW1wbCAqZm9ybSA9IGVsZW1lbnQtPnBhcmVudE5vZGUoKTsKLSAgICB3aGlsZSAoZm9ybSAmJiBm
b3JtLT5pZCgpICE9IElEX0ZPUk0pCisgICAgd2hpbGUgKGZvcm0gJiYgIWZvcm0tPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjpmb3JtKCkpKQogICAgICAgZm9ybSA9IGZvcm0tPnBhcmVudE5vZGUoKTsK
ICAgICAKICAgICBpZiAoZm9ybSkKQEAgLTIxNjIsMTg4ICsyMzE2LDE3MyBAQCBIVE1MRWxlbWVu
dEZ1bmN0aW9uOjpIVE1MRWxlbWVudEZ1bmN0aW9uCiAKIFZhbHVlIEtKUzo6SFRNTEVsZW1lbnRG
dW5jdGlvbjo6dHJ5Q2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3Qg
TGlzdCAmYXJncykKIHsKLSAgaWYgKCF0aGlzT2JqLmluaGVyaXRzKCZLSlM6OkhUTUxFbGVtZW50
OjppbmZvKSkgewotICAgIE9iamVjdCBlcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9y
KTsKLSAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKLSAgICByZXR1cm4gZXJyOwotICB9Ci0g
IGtkRGVidWcoKSA8PCAiS0pTOjpIVE1MRWxlbWVudEZ1bmN0aW9uOjp0cnlDYWxsICIgPDwgZW5k
bDsKLSAgRE9NRXhjZXB0aW9uVHJhbnNsYXRvciBleGNlcHRpb24oZXhlYyk7Ci0gIEhUTUxFbGVt
ZW50SW1wbCAmZWxlbWVudCA9ICpzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwgKj4oc3RhdGlj
X2Nhc3Q8SFRNTEVsZW1lbnQgKj4odGhpc09iai5pbXAoKSktPmltcGwoKSk7Ci0KLSAgc3dpdGNo
IChlbGVtZW50LmlkKCkpIHsKLSAgICBjYXNlIElEX0ZPUk06IHsKLSAgICAgIEhUTUxGb3JtRWxl
bWVudEltcGwgJmZvcm0gPSBzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnRJbXBsICY+KGVsZW1l
bnQpOwotICAgICAgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OkZvcm1TdWJtaXQpIHsKLSAg
ICAgICAgZm9ybS5zdWJtaXQoKTsKLSAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwotICAgICAg
fQotICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6Rm9ybVJlc2V0KSB7Ci0g
ICAgICAgIGZvcm0ucmVzZXQoKTsKLSAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwotICAgICAg
fQorICAgIGlmICghdGhpc09iai5pbmhlcml0cygmS0pTOjpIVE1MRWxlbWVudDo6aW5mbykpIHsK
KyAgICAgICAgT2JqZWN0IGVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBlRXJyb3IpOworICAg
ICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKKyAgICAgICAgcmV0dXJuIGVycjsKICAgICB9
Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9TRUxFQ1Q6IHsKLSAgICAgIEhUTUxTZWxlY3RFbGVt
ZW50SW1wbCAmc2VsZWN0ID0gc3RhdGljX2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnRJbXBsICY+KGVs
ZW1lbnQpOwotICAgICAgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlNlbGVjdEFkZCkgewot
ICAgICAgICBzZWxlY3QuYWRkKHRvSFRNTEVsZW1lbnQoYXJnc1swXSksIHRvSFRNTEVsZW1lbnQo
YXJnc1sxXSkpOwotICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9Ci0gICAgICBl
bHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpTZWxlY3RSZW1vdmUpIHsKLSAgICAgICAg
c2VsZWN0LnJlbW92ZShpbnQoYXJnc1swXS50b051bWJlcihleGVjKSkpOwotICAgICAgICByZXR1
cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxF
bGVtZW50OjpTZWxlY3RCbHVyKSB7Ci0gICAgICAgIHNlbGVjdC5ibHVyKCk7Ci0gICAgICAgIHJl
dHVybiBVbmRlZmluZWQoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRN
TEVsZW1lbnQ6OlNlbGVjdEZvY3VzKSB7Ci0gICAgICAgIHNlbGVjdC5mb2N1cygpOwotICAgICAg
ICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9CisgICAga2REZWJ1ZygpIDw8ICJLSlM6OkhU
TUxFbGVtZW50RnVuY3Rpb246OnRyeUNhbGwgIiA8PCBlbmRsOworICAgIERPTUV4Y2VwdGlvblRy
YW5zbGF0b3IgZXhjZXB0aW9uKGV4ZWMpOworICAgIEhUTUxFbGVtZW50SW1wbCAmZWxlbWVudCA9
ICpzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwgKj4oc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQg
Kj4odGhpc09iai5pbXAoKSktPmltcGwoKSk7CisKKyAgICBpZiAoZWxlbWVudC5oYXNMb2NhbE5h
bWUoSFRNTE5hbWVzOjpmb3JtKCkpKSB7CisgICAgICAgIEhUTUxGb3JtRWxlbWVudEltcGwgJmZv
cm0gPSBzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgICAg
ICBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6Rm9ybVN1Ym1pdCkgeworICAgICAgICAgICAg
Zm9ybS5zdWJtaXQoKTsKKyAgICAgICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKKyAgICAgICAg
fQorICAgICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpGb3JtUmVzZXQpIHsK
KyAgICAgICAgICAgIGZvcm0ucmVzZXQoKTsKKyAgICAgICAgICAgIHJldHVybiBVbmRlZmluZWQo
KTsKKyAgICAgICAgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0lOUFVUOiB7Ci0g
ICAgICBIVE1MSW5wdXRFbGVtZW50SW1wbCAmaW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRF
bGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50
OjpJbnB1dEJsdXIpIHsKLSAgICAgICAgaW5wdXQuYmx1cigpOwotICAgICAgICByZXR1cm4gVW5k
ZWZpbmVkKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50
OjpJbnB1dEZvY3VzKSB7Ci0gICAgICAgIGlucHV0LmZvY3VzKCk7Ci0gICAgICAgIHJldHVybiBV
bmRlZmluZWQoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1l
bnQ6OklucHV0U2VsZWN0KSB7Ci0gICAgICAgIGlucHV0LnNlbGVjdCgpOwotICAgICAgICByZXR1
cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxF
bGVtZW50OjpJbnB1dENsaWNrKSB7Ci0gICAgICAgIGlucHV0LmNsaWNrKCk7Ci0gICAgICAgIHJl
dHVybiBVbmRlZmluZWQoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRN
TEVsZW1lbnQ6OklucHV0U2V0U2VsZWN0aW9uUmFuZ2UpIHsKLSAgICAgICAgaW5wdXQuc2V0U2Vs
ZWN0aW9uUmFuZ2UoYXJnc1swXS50b0ludDMyKGV4ZWMpLCBhcmdzWzFdLnRvSW50MzIoZXhlYykp
OwotICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9CisgICAgZWxzZSBpZiAoZWxl
bWVudC5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpzZWxlY3QoKSkpIHsKKyAgICAgICAgSFRNTFNl
bGVjdEVsZW1lbnRJbXBsICZzZWxlY3QgPSBzdGF0aWNfY2FzdDxIVE1MU2VsZWN0RWxlbWVudElt
cGwgJj4oZWxlbWVudCk7CisgICAgICAgIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpTZWxl
Y3RBZGQpIHsKKyAgICAgICAgICAgIHNlbGVjdC5hZGQodG9IVE1MRWxlbWVudChhcmdzWzBdKSwg
dG9IVE1MRWxlbWVudChhcmdzWzFdKSk7CisgICAgICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7
CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6U2Vs
ZWN0UmVtb3ZlKSB7CisgICAgICAgICAgICBzZWxlY3QucmVtb3ZlKGludChhcmdzWzBdLnRvTnVt
YmVyKGV4ZWMpKSk7CisgICAgICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CisgICAgICAgIH0K
KyAgICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6U2VsZWN0Qmx1cikgewor
ICAgICAgICAgICAgc2VsZWN0LmJsdXIoKTsKKyAgICAgICAgICAgIHJldHVybiBVbmRlZmluZWQo
KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpT
ZWxlY3RGb2N1cykgeworICAgICAgICAgICAgc2VsZWN0LmZvY3VzKCk7CisgICAgICAgICAgICBy
ZXR1cm4gVW5kZWZpbmVkKCk7CisgICAgICAgIH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2Fz
ZSBJRF9MQUJFTDogewotICAgICAgSFRNTExhYmVsRWxlbWVudEltcGwgJmxhYmVsID0gc3RhdGlj
X2Nhc3Q8SFRNTExhYmVsRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICAKLSAgICAgIGlm
IChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpMYWJlbEZvY3VzKSB7Ci0gICAgICAgICAgbGFiZWwu
Zm9jdXMoKTsKLSAgICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9CisgICAgZWxz
ZSBpZiAoZWxlbWVudC5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjppbnB1dCgpKSkgeworICAgICAg
ICBIVE1MSW5wdXRFbGVtZW50SW1wbCAmaW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVt
ZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICAgICAgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6
OklucHV0Qmx1cikgeworICAgICAgICAgICAgaW5wdXQuYmx1cigpOworICAgICAgICAgICAgcmV0
dXJuIFVuZGVmaW5lZCgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6
SFRNTEVsZW1lbnQ6OklucHV0Rm9jdXMpIHsKKyAgICAgICAgICAgIGlucHV0LmZvY3VzKCk7Cisg
ICAgICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBp
ZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6SW5wdXRTZWxlY3QpIHsKKyAgICAgICAgICAgIGlu
cHV0LnNlbGVjdCgpOworICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAgICAgICB9
CisgICAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OklucHV0Q2xpY2spIHsK
KyAgICAgICAgICAgIGlucHV0LmNsaWNrKCk7CisgICAgICAgICAgICByZXR1cm4gVW5kZWZpbmVk
KCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6
SW5wdXRTZXRTZWxlY3Rpb25SYW5nZSkgeworICAgICAgICAgICAgaW5wdXQuc2V0U2VsZWN0aW9u
UmFuZ2UoYXJnc1swXS50b0ludDMyKGV4ZWMpLCBhcmdzWzFdLnRvSW50MzIoZXhlYykpOworICAg
ICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAgICAgICB9CiAgICAgfQotICAgIGJyZWFr
OwotICAgIGNhc2UgSURfTEVHRU5EOiB7Ci0gICAgICBIVE1MTGVnZW5kRWxlbWVudEltcGwgJmxl
Z2VuZCA9IHN0YXRpY19jYXN0PEhUTUxMZWdlbmRFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAg
ICAgICAgCi0gICAgICBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6TGVnZW5kRm9jdXMpIHsK
LSAgICAgICAgICBsZWdlbmQuZm9jdXMoKTsKLSAgICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7
Ci0gICAgICB9CisgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpi
dXR0b24oKSkpIHsKKyAgICAgICAgSFRNTEJ1dHRvbkVsZW1lbnRJbXBsICZidXR0b24gPSBzdGF0
aWNfY2FzdDxIVE1MQnV0dG9uRWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgICAgIGlmIChp
ZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpCdXR0b25CbHVyKSB7CisgICAgICAgICAgICBidXR0b24u
Ymx1cigpOworICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAgICAgICB9CisgICAg
ICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OkJ1dHRvbkZvY3VzKSB7CisgICAg
ICAgICAgICBidXR0b24uZm9jdXMoKTsKKyAgICAgICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsK
KyAgICAgICAgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0JVVFRPTjogewotICAg
ICAgSFRNTEJ1dHRvbkVsZW1lbnRJbXBsICZidXR0b24gPSBzdGF0aWNfY2FzdDxIVE1MQnV0dG9u
RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICAKLSAgICAgIGlmIChpZCA9PSBLSlM6OkhU
TUxFbGVtZW50OjpCdXR0b25CbHVyKSB7Ci0gICAgICAgIGJ1dHRvbi5ibHVyKCk7Ci0gICAgICAg
IHJldHVybiBVbmRlZmluZWQoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6
SFRNTEVsZW1lbnQ6OkJ1dHRvbkZvY3VzKSB7Ci0gICAgICAgIGJ1dHRvbi5mb2N1cygpOwotICAg
ICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9CisgICAgZWxzZSBpZiAoZWxlbWVudC5o
YXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpsYWJlbCgpKSkgeworICAgICAgICBIVE1MTGFiZWxFbGVt
ZW50SW1wbCAmbGFiZWwgPSBzdGF0aWNfY2FzdDxIVE1MTGFiZWxFbGVtZW50SW1wbCAmPihlbGVt
ZW50KTsKKyAgICAgICAgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OkxhYmVsRm9jdXMpIHsK
KyAgICAgICAgICAgIGxhYmVsLmZvY3VzKCk7CisgICAgICAgICAgICByZXR1cm4gVW5kZWZpbmVk
KCk7CisgICAgICAgIH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9URVhUQVJFQTog
ewotICAgICAgSFRNTFRleHRBcmVhRWxlbWVudEltcGwgJnRleHRhcmVhID0gc3RhdGljX2Nhc3Q8
SFRNTFRleHRBcmVhRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBpZiAoaWQgPT0gS0pT
OjpIVE1MRWxlbWVudDo6VGV4dEFyZWFCbHVyKSB7Ci0gICAgICAgIHRleHRhcmVhLmJsdXIoKTsK
LSAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoaWQg
PT0gS0pTOjpIVE1MRWxlbWVudDo6VGV4dEFyZWFGb2N1cykgewotICAgICAgICB0ZXh0YXJlYS5m
b2N1cygpOwotICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9Ci0gICAgICBlbHNl
IGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUZXh0QXJlYVNlbGVjdCkgewotICAgICAgICB0
ZXh0YXJlYS5zZWxlY3QoKTsKLSAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwotICAgICAgfQot
ICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6VGV4dEFyZWFTZXRTZWxlY3Rp
b25SYW5nZSkgewotICAgICAgICB0ZXh0YXJlYS5zZXRTZWxlY3Rpb25SYW5nZShhcmdzWzBdLnRv
SW50MzIoZXhlYyksIGFyZ3NbMV0udG9JbnQzMihleGVjKSk7Ci0gICAgICAgIHJldHVybiBVbmRl
ZmluZWQoKTsKLSAgICAgIH0KKyAgICBlbHNlIGlmIChlbGVtZW50Lmhhc0xvY2FsTmFtZShIVE1M
TmFtZXM6OmxlZ2VuZCgpKSkgeworICAgICAgICBIVE1MTGVnZW5kRWxlbWVudEltcGwgJmxlZ2Vu
ZCA9IHN0YXRpY19jYXN0PEhUTUxMZWdlbmRFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICAg
ICAgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OkxlZ2VuZEZvY3VzKSB7CisgICAgICAgICAg
ICBsZWdlbmQuZm9jdXMoKTsKKyAgICAgICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKKyAgICAg
ICAgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0E6IHsKLSAgICAgIEhUTUxBbmNo
b3JFbGVtZW50SW1wbCAmYW5jaG9yID0gc3RhdGljX2Nhc3Q8SFRNTEFuY2hvckVsZW1lbnRJbXBs
ICY+KGVsZW1lbnQpOwotICAgICAgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OkFuY2hvckJs
dXIpIHsKLSAgICAgICAgYW5jaG9yLmJsdXIoKTsKLSAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgp
OwotICAgICAgfQotICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6QW5jaG9y
Rm9jdXMpIHsKLSAgICAgICAgYW5jaG9yLmZvY3VzKCk7Ci0gICAgICAgIHJldHVybiBVbmRlZmlu
ZWQoKTsKLSAgICAgIH0gCi0gICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpB
bmNob3JUb1N0cmluZykgewotCXJldHVybiBTdHJpbmcodGhpc09iai50b1N0cmluZyhleGVjKSk7
Ci0gICAgICB9CisgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0
ZXh0YXJlYSgpKSkgeworICAgICAgICBIVE1MVGV4dEFyZWFFbGVtZW50SW1wbCAmdGV4dGFyZWEg
PSBzdGF0aWNfY2FzdDxIVE1MVGV4dEFyZWFFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICAg
ICAgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRleHRBcmVhQmx1cikgeworICAgICAgICAg
ICAgdGV4dGFyZWEuYmx1cigpOworICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAg
ICAgICB9CisgICAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRleHRBcmVh
Rm9jdXMpIHsKKyAgICAgICAgICAgIHRleHRhcmVhLmZvY3VzKCk7CisgICAgICAgICAgICByZXR1
cm4gVW5kZWZpbmVkKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpI
VE1MRWxlbWVudDo6VGV4dEFyZWFTZWxlY3QpIHsKKyAgICAgICAgICAgIHRleHRhcmVhLnNlbGVj
dCgpOworICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAgICAgICB9CisgICAgICAg
IGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRleHRBcmVhU2V0U2VsZWN0aW9uUmFu
Z2UpIHsKKyAgICAgICAgICAgIHRleHRhcmVhLnNldFNlbGVjdGlvblJhbmdlKGFyZ3NbMF0udG9J
bnQzMihleGVjKSwgYXJnc1sxXS50b0ludDMyKGV4ZWMpKTsKKyAgICAgICAgICAgIHJldHVybiBV
bmRlZmluZWQoKTsKKyAgICAgICAgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX1RB
QkxFOiB7Ci0gICAgICBIVE1MVGFibGVFbGVtZW50SW1wbCAmdGFibGUgPSBzdGF0aWNfY2FzdDxI
VE1MVGFibGVFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIGlmIChpZCA9PSBLSlM6OkhU
TUxFbGVtZW50OjpUYWJsZUNyZWF0ZVRIZWFkKQotICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShl
eGVjLHRhYmxlLmNyZWF0ZVRIZWFkKCkpOwotICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1M
RWxlbWVudDo6VGFibGVEZWxldGVUSGVhZCkgewotICAgICAgICB0YWJsZS5kZWxldGVUSGVhZCgp
OwotICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChp
ZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUYWJsZUNyZWF0ZVRGb290KQotICAgICAgICByZXR1cm4g
Z2V0RE9NTm9kZShleGVjLHRhYmxlLmNyZWF0ZVRGb290KCkpOwotICAgICAgZWxzZSBpZiAoaWQg
PT0gS0pTOjpIVE1MRWxlbWVudDo6VGFibGVEZWxldGVURm9vdCkgewotICAgICAgICB0YWJsZS5k
ZWxldGVURm9vdCgpOwotICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9Ci0gICAg
ICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUYWJsZUNyZWF0ZUNhcHRpb24pCi0g
ICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsdGFibGUuY3JlYXRlQ2FwdGlvbigpKTsKLSAg
ICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRhYmxlRGVsZXRlQ2FwdGlvbikg
ewotICAgICAgICB0YWJsZS5kZWxldGVDYXB0aW9uKCk7Ci0gICAgICAgIHJldHVybiBVbmRlZmlu
ZWQoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRh
YmxlSW5zZXJ0Um93KQotICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLHRhYmxlLmluc2Vy
dFJvdyhhcmdzWzBdLnRvSW50MzIoZXhlYyksIGV4Y2VwdGlvbikpOwotICAgICAgZWxzZSBpZiAo
aWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6VGFibGVEZWxldGVSb3cpIHsKLSAgICAgICAgdGFibGUu
ZGVsZXRlUm93KGFyZ3NbMF0udG9JbnQzMihleGVjKSwgZXhjZXB0aW9uKTsKLSAgICAgICAgcmV0
dXJuIFVuZGVmaW5lZCgpOwotICAgICAgfQorICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6YSgpKSkgeworICAgICAgICBIVE1MQW5jaG9yRWxlbWVudEltcGwgJmFu
Y2hvciA9IHN0YXRpY19jYXN0PEhUTUxBbmNob3JFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAg
ICAgICAgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OkFuY2hvckJsdXIpIHsKKyAgICAgICAg
ICAgIGFuY2hvci5ibHVyKCk7CisgICAgICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6QW5jaG9yRm9j
dXMpIHsKKyAgICAgICAgICAgIGFuY2hvci5mb2N1cygpOworICAgICAgICAgICAgcmV0dXJuIFVu
ZGVmaW5lZCgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVs
ZW1lbnQ6OkFuY2hvclRvU3RyaW5nKQorICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0aGlzT2Jq
LnRvU3RyaW5nKGV4ZWMpKTsKICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9USEVBRDoK
LSAgICBjYXNlIElEX1RCT0RZOgotICAgIGNhc2UgSURfVEZPT1Q6IHsKLSAgICAgIEhUTUxUYWJs
ZVNlY3Rpb25FbGVtZW50SW1wbCAmdGFibGVTZWN0aW9uID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxl
U2VjdGlvbkVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgaWYgKGlkID09IEtKUzo6SFRN
TEVsZW1lbnQ6OlRhYmxlU2VjdGlvbkluc2VydFJvdykKLSAgICAgICAgcmV0dXJuIGdldERPTU5v
ZGUoZXhlYywgdGFibGVTZWN0aW9uLmluc2VydFJvdyhhcmdzWzBdLnRvSW50MzIoZXhlYyksIGV4
Y2VwdGlvbikpOwotICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6VGFibGVT
ZWN0aW9uRGVsZXRlUm93KSB7Ci0gICAgICAgIHRhYmxlU2VjdGlvbi5kZWxldGVSb3coYXJnc1sw
XS50b0ludDMyKGV4ZWMpLCBleGNlcHRpb24pOwotICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7
Ci0gICAgICB9CisgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0
YWJsZSgpKSkgeworICAgICAgICBIVE1MVGFibGVFbGVtZW50SW1wbCAmdGFibGUgPSBzdGF0aWNf
Y2FzdDxIVE1MVGFibGVFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICAgICAgaWYgKGlkID09
IEtKUzo6SFRNTEVsZW1lbnQ6OlRhYmxlQ3JlYXRlVEhlYWQpCisgICAgICAgICAgICByZXR1cm4g
Z2V0RE9NTm9kZShleGVjLHRhYmxlLmNyZWF0ZVRIZWFkKCkpOworICAgICAgICBlbHNlIGlmIChp
ZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUYWJsZURlbGV0ZVRIZWFkKSB7CisgICAgICAgICAgICB0
YWJsZS5kZWxldGVUSGVhZCgpOworICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAg
ICAgICB9CisgICAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRhYmxlQ3Jl
YXRlVEZvb3QpCisgICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLHRhYmxlLmNyZWF0
ZVRGb290KCkpOworICAgICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUYWJs
ZURlbGV0ZVRGb290KSB7CisgICAgICAgICAgICB0YWJsZS5kZWxldGVURm9vdCgpOworICAgICAg
ICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGlk
ID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRhYmxlQ3JlYXRlQ2FwdGlvbikKKyAgICAgICAgICAgIHJl
dHVybiBnZXRET01Ob2RlKGV4ZWMsdGFibGUuY3JlYXRlQ2FwdGlvbigpKTsKKyAgICAgICAgZWxz
ZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6VGFibGVEZWxldGVDYXB0aW9uKSB7CisgICAg
ICAgICAgICB0YWJsZS5kZWxldGVDYXB0aW9uKCk7CisgICAgICAgICAgICByZXR1cm4gVW5kZWZp
bmVkKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVu
dDo6VGFibGVJbnNlcnRSb3cpCisgICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLHRh
YmxlLmluc2VydFJvdyhhcmdzWzBdLnRvSW50MzIoZXhlYyksIGV4Y2VwdGlvbikpOworICAgICAg
ICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUYWJsZURlbGV0ZVJvdykgeworICAg
ICAgICAgICAgdGFibGUuZGVsZXRlUm93KGFyZ3NbMF0udG9JbnQzMihleGVjKSwgZXhjZXB0aW9u
KTsKKyAgICAgICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKKyAgICAgICAgfQogICAgIH0KLSAg
ICBicmVhazsKLSAgICBjYXNlIElEX1RSOiB7Ci0gICAgICBIVE1MVGFibGVSb3dFbGVtZW50SW1w
bCAmdGFibGVSb3cgPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVSb3dFbGVtZW50SW1wbCAmPihlbGVt
ZW50KTsKLSAgICAgIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUYWJsZVJvd0luc2VydENl
bGwpCi0gICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsdGFibGVSb3cuaW5zZXJ0Q2VsbChh
cmdzWzBdLnRvSW50MzIoZXhlYyksIGV4Y2VwdGlvbikpOwotICAgICAgZWxzZSBpZiAoaWQgPT0g
S0pTOjpIVE1MRWxlbWVudDo6VGFibGVSb3dEZWxldGVDZWxsKSB7Ci0gICAgICAgIHRhYmxlUm93
LmRlbGV0ZUNlbGwoYXJnc1swXS50b0ludDMyKGV4ZWMpLCBleGNlcHRpb24pOwotICAgICAgICBy
ZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9CisgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNMb2Nh
bE5hbWUoSFRNTE5hbWVzOjp0aGVhZCgpKSB8fAorICAgICAgICAgICAgIGVsZW1lbnQuaGFzTG9j
YWxOYW1lKEhUTUxOYW1lczo6dGJvZHkoKSkgfHwKKyAgICAgICAgICAgICBlbGVtZW50Lmhhc0xv
Y2FsTmFtZShIVE1MTmFtZXM6OnRmb290KCkpKSB7CisgICAgICAgIEhUTUxUYWJsZVNlY3Rpb25F
bGVtZW50SW1wbCAmdGFibGVTZWN0aW9uID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlU2VjdGlvbkVs
ZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgICAgICBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVu
dDo6VGFibGVTZWN0aW9uSW5zZXJ0Um93KQorICAgICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUo
ZXhlYywgdGFibGVTZWN0aW9uLmluc2VydFJvdyhhcmdzWzBdLnRvSW50MzIoZXhlYyksIGV4Y2Vw
dGlvbikpOworICAgICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUYWJsZVNl
Y3Rpb25EZWxldGVSb3cpIHsKKyAgICAgICAgICAgIHRhYmxlU2VjdGlvbi5kZWxldGVSb3coYXJn
c1swXS50b0ludDMyKGV4ZWMpLCBleGNlcHRpb24pOworICAgICAgICAgICAgcmV0dXJuIFVuZGVm
aW5lZCgpOworICAgICAgICB9CiAgICAgfQotICAgIGNhc2UgSURfTUFSUVVFRTogeworICAgIGVs
c2UgaWYgKGVsZW1lbnQuaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dHIoKSkpIHsKKyAgICAgICAg
SFRNTFRhYmxlUm93RWxlbWVudEltcGwgJnRhYmxlUm93ID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxl
Um93RWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgICAgIGlmIChpZCA9PSBLSlM6OkhUTUxF
bGVtZW50OjpUYWJsZVJvd0luc2VydENlbGwpCisgICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9k
ZShleGVjLHRhYmxlUm93Lmluc2VydENlbGwoYXJnc1swXS50b0ludDMyKGV4ZWMpLCBleGNlcHRp
b24pKTsKKyAgICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6VGFibGVSb3dE
ZWxldGVDZWxsKSB7CisgICAgICAgICAgICB0YWJsZVJvdy5kZWxldGVDZWxsKGFyZ3NbMF0udG9J
bnQzMihleGVjKSwgZXhjZXB0aW9uKTsKKyAgICAgICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsK
KyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmIChlbGVtZW50Lmhhc0xvY2FsTmFtZShIVE1M
TmFtZXM6Om1hcnF1ZWUoKSkpIHsKICAgICAgICAgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6
Ok1hcnF1ZWVTdGFydCAmJiBlbGVtZW50LnJlbmRlcmVyKCkgJiYgCiAgICAgICAgICAgICBlbGVt
ZW50LnJlbmRlcmVyKCktPmxheWVyKCkgJiYKICAgICAgICAgICAgIGVsZW1lbnQucmVuZGVyZXIo
KS0+bGF5ZXIoKS0+bWFycXVlZSgpKSB7CkBAIC0yMzUxLDE0ICsyNDkwLDE0IEBAIFZhbHVlIEtK
Uzo6SFRNTEVsZW1lbnRGdW5jdGlvbjo6dHJ5Q2FsbCgKICAgICAgICAgICAgIHJldHVybiBVbmRl
ZmluZWQoKTsKICAgICAgICAgfQogICAgICAgICBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6
TWFycXVlZVN0b3AgJiYgZWxlbWVudC5yZW5kZXJlcigpICYmIAotICAgICAgICAgICAgICAgICBl
bGVtZW50LnJlbmRlcmVyKCktPmxheWVyKCkgJiYKLSAgICAgICAgICAgICAgICAgZWxlbWVudC5y
ZW5kZXJlcigpLT5sYXllcigpLT5tYXJxdWVlKCkpIHsKKyAgICAgICAgICAgIGVsZW1lbnQucmVu
ZGVyZXIoKS0+bGF5ZXIoKSAmJgorICAgICAgICAgICAgZWxlbWVudC5yZW5kZXJlcigpLT5sYXll
cigpLT5tYXJxdWVlKCkpIHsKICAgICAgICAgICAgIGVsZW1lbnQucmVuZGVyZXIoKS0+bGF5ZXIo
KS0+bWFycXVlZSgpLT5zdG9wKCk7CiAgICAgICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiAg
ICAgICAgIH0KLSAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGNhc2UgSURfQ0FOVkFTOiB7Cisj
aWYgQVBQTEVfQ0hBTkdFUworICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFzTG9jYWxOYW1lKEhUTUxO
YW1lczo6Y2FudmFzKCkpKSB7CiAgICAgICAgIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpH
ZXRDb250ZXh0KSB7CiAgICAgICAgICAgICBpZiAoYXJncy5zaXplKCkgPT0gMCB8fCAoYXJncy5z
aXplKCkgPT0gMSAmJiBhcmdzWzBdLnRvU3RyaW5nKGV4ZWMpLnFzdHJpbmcoKS5sb3dlcigpID09
ICIyZCIpKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdChuZXcgQ29udGV4dDJEKCZl
bGVtZW50KSk7CkBAIC0yMzY2LDc0MiArMjUwNSw3NjQgQEAgVmFsdWUgS0pTOjpIVE1MRWxlbWVu
dEZ1bmN0aW9uOjp0cnlDYWxsKAogICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogICAg
ICAgICB9CiAgICAgfQotICAgIAotICAgIGJyZWFrOwotICB9CisjZW5kaWYKIAotICByZXR1cm4g
VW5kZWZpbmVkKCk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCiB2b2lkIEtKUzo6SFRN
TEVsZW1lbnQ6OnRyeVB1dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3Bl
cnR5TmFtZSwgY29uc3QgVmFsdWUmIHZhbHVlLCBpbnQgYXR0cikKIHsKICNpZmRlZiBLSlNfVkVS
Qk9TRQotICBET006OkRPTVN0cmluZyBzdHIgPSB2YWx1ZS5pc0EoTnVsbFR5cGUpID8gRE9NOjpE
T01TdHJpbmcoKSA6IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpOworICAgIERPTTo6RE9N
U3RyaW5nIHN0ciA9IHZhbHVlLmlzQShOdWxsVHlwZSkgPyBET006OkRPTVN0cmluZygpIDogdmFs
dWUudG9TdHJpbmcoZXhlYykuc3RyaW5nKCk7CiAjZW5kaWYKLSAgSFRNTEVsZW1lbnRJbXBsICZl
bGVtZW50ID0gKnN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCAqPihpbXBsKCkpOworICAgIEhU
TUxFbGVtZW50SW1wbCAmZWxlbWVudCA9ICpzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwgKj4o
aW1wbCgpKTsKICNpZmRlZiBLSlNfVkVSQk9TRQotICBrZERlYnVnKDYwNzApIDw8ICJLSlM6OkhU
TUxFbGVtZW50Ojp0cnlQdXQgIiA8PCBwcm9wZXJ0eU5hbWUucXN0cmluZygpCi0gICAgICAgICAg
ICAgICAgPDwgIiB0aGlzVGFnPSIgPDwgZWxlbWVudC50YWdOYW1lKCkuc3RyaW5nKCkKLSAgICAg
ICAgICAgICAgICA8PCAiIHN0cj0iIDw8IHN0ci5zdHJpbmcoKSA8PCBlbmRsOworICAgIGtkRGVi
dWcoNjA3MCkgPDwgIktKUzo6SFRNTEVsZW1lbnQ6OnRyeVB1dCAiIDw8IHByb3BlcnR5TmFtZS5x
c3RyaW5nKCkKKyAgICAgICAgICAgICAgICAgIDw8ICIgdGhpc1RhZz0iIDw8IGVsZW1lbnQudGFn
TmFtZSgpLnN0cmluZygpCisgICAgICAgICAgICAgICAgICA8PCAiIHN0cj0iIDw8IHN0ci5zdHJp
bmcoKSA8PCBlbmRsOwogI2VuZGlmCi0gIC8vIEZpcnN0IGxvb2sgYXQgZHluYW1pYyBwcm9wZXJ0
aWVzCi0gIHN3aXRjaCAoZWxlbWVudC5pZCgpKSB7Ci0gICAgY2FzZSBJRF9TRUxFQ1Q6IHsKLSAg
ICAgIEhUTUxTZWxlY3RFbGVtZW50SW1wbCAmc2VsZWN0ID0gc3RhdGljX2Nhc3Q8SFRNTFNlbGVj
dEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgYm9vbCBvazsKLSAgICAgIC8qdWludCB1
ID0qLyBwcm9wZXJ0eU5hbWUudG9VTG9uZygmb2spOwotICAgICAgaWYgKG9rKSB7Ci0gICAgICAg
IE9iamVjdCBjb2xsID0gT2JqZWN0OjpkeW5hbWljQ2FzdCggZ2V0U2VsZWN0SFRNTENvbGxlY3Rp
b24oZXhlYywgc2VsZWN0Lm9wdGlvbnNIVE1MQ29sbGVjdGlvbigpLmdldCgpLCAmc2VsZWN0KSAp
OwotICAgICAgICBpZiAoICFjb2xsLmlzTnVsbCgpICkKLSAgICAgICAgICBjb2xsLnB1dChleGVj
LHByb3BlcnR5TmFtZSx2YWx1ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KKyAgICAvLyBG
aXJzdCBsb29rIGF0IGR5bmFtaWMgcHJvcGVydGllcworICAgIGlmIChlbGVtZW50Lmhhc0xvY2Fs
TmFtZShIVE1MTmFtZXM6OnNlbGVjdCgpKSkgeworICAgICAgICBIVE1MU2VsZWN0RWxlbWVudElt
cGwgJnNlbGVjdCA9IHN0YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50SW1wbCAmPihlbGVtZW50
KTsKKyAgICAgICAgYm9vbCBvazsKKyAgICAgICAgLyp1aW50IHUgPSovIHByb3BlcnR5TmFtZS50
b1VMb25nKCZvayk7CisgICAgICAgIGlmIChvaykgeworICAgICAgICAgICAgT2JqZWN0IGNvbGwg
PSBPYmplY3Q6OmR5bmFtaWNDYXN0KCBnZXRTZWxlY3RIVE1MQ29sbGVjdGlvbihleGVjLCBzZWxl
Y3Qub3B0aW9uc0hUTUxDb2xsZWN0aW9uKCkuZ2V0KCksICZzZWxlY3QpICk7CisgICAgICAgICAg
ICBpZiAoIWNvbGwuaXNOdWxsKCkpCisgICAgICAgICAgICAgICAgY29sbC5wdXQoZXhlYyxwcm9w
ZXJ0eU5hbWUsdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgfQog
I2lmIEFQUExFX0NIQU5HRVMKLSAgICBjYXNlIElEX0VNQkVEOgotICAgIGNhc2UgSURfT0JKRUNU
OgotICAgIGNhc2UgSURfQVBQTEVUOiB7CisgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNMb2NhbE5h
bWUoSFRNTE5hbWVzOjplbWJlZCgpKSB8fAorICAgICAgICAgICAgIGVsZW1lbnQuaGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6b2JqZWN0KCkpIHx8CisgICAgICAgICAgICAgZWxlbWVudC5oYXNMb2Nh
bE5hbWUoSFRNTE5hbWVzOjphcHBsZXQoKSkpIHsKIAlWYWx1ZSBydW50aW1lT2JqZWN0ID0gZ2V0
UnVudGltZU9iamVjdChleGVjLCZlbGVtZW50KTsKIAlpZiAoIXJ1bnRpbWVPYmplY3QuaXNOdWxs
KCkpIHsKIAkgICAgT2JqZWN0SW1wICppbXAgPSBzdGF0aWNfY2FzdDxPYmplY3RJbXAgKj4ocnVu
dGltZU9iamVjdC5pbXAoKSk7Ci0JICAgIGlmIChpbXAtPmNhblB1dChleGVjLCBwcm9wZXJ0eU5h
bWUpKSB7CisJICAgIGlmIChpbXAtPmNhblB1dChleGVjLCBwcm9wZXJ0eU5hbWUpKQogCQlyZXR1
cm4gaW1wLT5wdXQgKGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUpOwotCSAgICB9CiAJfQogICAg
IH0KLSAgICAgIGJyZWFrOwogI2VuZGlmCi0gICAgYnJlYWs7Ci0gIGRlZmF1bHQ6Ci0gICAgICBi
cmVhazsKLSAgfQogCi0gIGNvbnN0IEhhc2hUYWJsZSogdGFibGUgPSBjbGFzc0luZm8oKS0+cHJv
cEhhc2hUYWJsZTsgLy8gZ2V0IHRoZSByaWdodCBoYXNodGFibGUKLSAgY29uc3QgSGFzaEVudHJ5
KiBlbnRyeSA9IExvb2t1cDo6ZmluZEVudHJ5KHRhYmxlLCBwcm9wZXJ0eU5hbWUpOwotICBpZiAo
ZW50cnkpIHsKLSAgICBpZiAoZW50cnktPmF0dHIgJiBGdW5jdGlvbikgLy8gZnVuY3Rpb246IHB1
dCBhcyBvdmVycmlkZSBwcm9wZXJ0eQotICAgIHsKLSAgICAgIE9iamVjdEltcDo6cHV0KGV4ZWMs
IHByb3BlcnR5TmFtZSwgdmFsdWUsIGF0dHIpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBl
bHNlIGlmICgoZW50cnktPmF0dHIgJiBSZWFkT25seSkgPT0gMCkgLy8gbGV0IERPTU9iamVjdExv
b2t1cFB1dCBwcmludCB0aGUgd2FybmluZyBpZiBub3QKLSAgICB7Ci0gICAgICBwdXRWYWx1ZShl
eGVjLCBlbnRyeS0+dmFsdWUsIHZhbHVlLCBhdHRyKTsKLSAgICAgIHJldHVybjsKKyAgICBjb25z
dCBIYXNoVGFibGUqIHRhYmxlID0gY2xhc3NJbmZvKCktPnByb3BIYXNoVGFibGU7IC8vIGdldCB0
aGUgcmlnaHQgaGFzaHRhYmxlCisgICAgY29uc3QgSGFzaEVudHJ5KiBlbnRyeSA9IExvb2t1cDo6
ZmluZEVudHJ5KHRhYmxlLCBwcm9wZXJ0eU5hbWUpOworICAgIGlmIChlbnRyeSkgeworICAgICAg
ICBpZiAoZW50cnktPmF0dHIgJiBGdW5jdGlvbikgeyAvLyBmdW5jdGlvbjogcHV0IGFzIG92ZXJy
aWRlIHByb3BlcnR5CisgICAgICAgICAgICBPYmplY3RJbXA6OnB1dChleGVjLCBwcm9wZXJ0eU5h
bWUsIHZhbHVlLCBhdHRyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICBlbHNlIGlmICgoZW50cnktPmF0dHIgJiBSZWFkT25seSkgPT0gMCkgeyAvLyBsZXQgRE9NT2Jq
ZWN0TG9va3VwUHV0IHByaW50IHRoZSB3YXJuaW5nIGlmIG5vdAorICAgICAgICAgICAgcHV0VmFs
dWUoZXhlYywgZW50cnktPnZhbHVlLCB2YWx1ZSwgYXR0cik7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KICAgICB9Ci0gIH0KLSAgRE9NT2JqZWN0TG9va3VwUHV0PEtKUzo6SFRNTEVs
ZW1lbnQsIERPTUVsZW1lbnQ+KGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIGF0dHIsICZIVE1M
RWxlbWVudFRhYmxlLCB0aGlzKTsKKworICAgIERPTU9iamVjdExvb2t1cFB1dDxLSlM6OkhUTUxF
bGVtZW50LCBET01FbGVtZW50PihleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBhdHRyLCAmSFRN
TEVsZW1lbnRUYWJsZSwgdGhpcyk7CiB9CiAKLXZvaWQgSFRNTEVsZW1lbnQ6OnB1dFZhbHVlKEV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGludCkKK3ZvaWQg
SFRNTEVsZW1lbnQ6Omh0bWxTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0
IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKIHsKLSAgRE9NRXhjZXB0
aW9uVHJhbnNsYXRvciBleGNlcHRpb24oZXhlYyk7Ci0gIERPTTo6RE9NU3RyaW5nIHN0ciA9IHZh
bHVlLmlzQShOdWxsVHlwZSkgPyBET006OkRPTVN0cmluZygpIDogdmFsdWUudG9TdHJpbmcoZXhl
Yykuc3RyaW5nKCk7Ci0gIEhUTUxFbGVtZW50SW1wbCAmZWxlbWVudCA9ICpzdGF0aWNfY2FzdDxI
VE1MRWxlbWVudEltcGwgKj4oaW1wbCgpKTsKLSNpZmRlZiBLSlNfVkVSQk9TRQotICBrZERlYnVn
KDYwNzApIDw8ICJLSlM6OkhUTUxFbGVtZW50OjpwdXRWYWx1ZSAiCi0gICAgICAgICAgICAgICAg
PDwgIiB0aGlzVGFnPSIgPDwgZWxlbWVudC50YWdOYW1lKCkuc3RyaW5nKCkKLSAgICAgICAgICAg
ICAgICA8PCAiIHRva2VuPSIgPDwgdG9rZW4gPDwgZW5kbDsKLSNlbmRpZgorICAgIEhUTUxIZWFk
RWxlbWVudEltcGwgJmhlYWQgPSAqc3RhdGljX2Nhc3Q8SFRNTEhlYWRFbGVtZW50SW1wbCo+KGlt
cGwoKSk7CisgICAgaWYgKHRva2VuID09IEhlYWRQcm9maWxlKSAKKyAgICAgICAgaGVhZC5zZXRQ
cm9maWxlKHN0cik7Cit9CiAKLSAgc3dpdGNoIChlbGVtZW50LmlkKCkpIHsKLSAgY2FzZSBJRF9I
VE1MOiB7Ci0gICAgICBIVE1MSHRtbEVsZW1lbnRJbXBsICZodG1sID0gc3RhdGljX2Nhc3Q8SFRN
TEh0bWxFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAg
ICAgIGNhc2UgSHRtbFZlcnNpb246ICAgICAgICAgeyBodG1sLnNldFZlcnNpb24oc3RyKTsgcmV0
dXJuOyB9Ci0gICAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfSEVBRDogewotICAgIEhU
TUxIZWFkRWxlbWVudEltcGwgJmhlYWQgPSBzdGF0aWNfY2FzdDxIVE1MSGVhZEVsZW1lbnRJbXBs
ICY+KGVsZW1lbnQpOwordm9pZCBIVE1MRWxlbWVudDo6aGVhZFNldHRlcihFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYg
c3RyKQoreworICAgIEhUTUxIZWFkRWxlbWVudEltcGwgJmhlYWQgPSAqc3RhdGljX2Nhc3Q8SFRN
TEhlYWRFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IEhlYWRQcm9maWxl
KSAKKyAgICAgICAgaGVhZC5zZXRQcm9maWxlKHN0cik7Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6
OmxpbmtTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1
ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MTGlua0VsZW1lbnRJbXBs
ICZsaW5rID0gKnN0YXRpY19jYXN0PEhUTUxMaW5rRWxlbWVudEltcGwqPihpbXBsKCkpOwogICAg
IHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIEhlYWRQcm9maWxlOiAgICAgICAgIHsgaGVhZC5z
ZXRQcm9maWxlKHN0cik7IHJldHVybjsgfQotICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJ
RF9MSU5LOiB7Ci0gICAgSFRNTExpbmtFbGVtZW50SW1wbCAmbGluayA9IHN0YXRpY19jYXN0PEhU
TUxMaW5rRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAg
ICAgY2FzZSBMaW5rRGlzYWJsZWQ6ICAgICAgICB7IGxpbmsuc2V0RGlzYWJsZWQodmFsdWUudG9C
b29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIExpbmtDaGFyc2V0OiAgICAgICAg
IHsgbGluay5zZXRDaGFyc2V0KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBMaW5rSHJlZjog
ICAgICAgICAgICB7IGxpbmsuc2V0SHJlZihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgTGlu
a0hyZWZMYW5nOiAgICAgICAgeyBsaW5rLnNldEhyZWZsYW5nKHN0cik7IHJldHVybjsgfQotICAg
ICAgY2FzZSBMaW5rTWVkaWE6ICAgICAgICAgICB7IGxpbmsuc2V0TWVkaWEoc3RyKTsgcmV0dXJu
OyB9Ci0gICAgICBjYXNlIExpbmtSZWw6ICAgICAgICAgICAgIHsgbGluay5zZXRSZWwoc3RyKTsg
cmV0dXJuOyB9Ci0gICAgICBjYXNlIExpbmtSZXY6ICAgICAgICAgICAgIHsgbGluay5zZXRSZXYo
c3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIExpbmtUYXJnZXQ6ICAgICAgICAgIHsgbGluay5z
ZXRUYXJnZXQoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIExpbmtUeXBlOiAgICAgICAgICAg
IHsgbGluay5zZXRUeXBlKHN0cik7IHJldHVybjsgfQotICAgICAgfQotICAgIH0KLSAgICBicmVh
azsKLSAgICBjYXNlIElEX1RJVExFOiB7Ci0gICAgICBIVE1MVGl0bGVFbGVtZW50SW1wbCAmdGl0
bGUgPSBzdGF0aWNfY2FzdDxIVE1MVGl0bGVFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAg
IHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgVGl0bGVUZXh0OiAgICAgICAgICAgICAgICAg
eyB0aXRsZS5zZXRUZXh0KHN0cik7IHJldHVybjsgfQotICAgICAgfQotICAgIH0KLSAgICBicmVh
azsKLSAgICBjYXNlIElEX01FVEE6IHsKLSAgICAgIEhUTUxNZXRhRWxlbWVudEltcGwgJm1ldGEg
PSBzdGF0aWNfY2FzdDxIVE1MTWV0YUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dp
dGNoICh0b2tlbikgewotICAgICAgY2FzZSBNZXRhQ29udGVudDogICAgICAgICB7IG1ldGEuc2V0
Q29udGVudChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgTWV0YUh0dHBFcXVpdjogICAgICAg
eyBtZXRhLnNldEh0dHBFcXVpdihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgTWV0YU5hbWU6
ICAgICAgICAgICAgeyBtZXRhLnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIE1l
dGFTY2hlbWU6ICAgICAgICAgIHsgbWV0YS5zZXRTY2hlbWUoc3RyKTsgcmV0dXJuOyB9Ci0gICAg
ICB9CisgICAgICAgIGNhc2UgTGlua0Rpc2FibGVkOiAgICAgICAgeyBsaW5rLnNldERpc2FibGVk
KHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIExpbmtDaGFy
c2V0OiAgICAgICAgIHsgbGluay5zZXRDaGFyc2V0KHN0cik7IHJldHVybjsgfQorICAgICAgICBj
YXNlIExpbmtIcmVmOiAgICAgICAgICAgIHsgbGluay5zZXRIcmVmKHN0cik7IHJldHVybjsgfQor
ICAgICAgICBjYXNlIExpbmtIcmVmTGFuZzogICAgICAgIHsgbGluay5zZXRIcmVmbGFuZyhzdHIp
OyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBMaW5rTWVkaWE6ICAgICAgICAgICB7IGxpbmsuc2V0
TWVkaWEoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgTGlua1JlbDogICAgICAgICAgICAg
eyBsaW5rLnNldFJlbChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBMaW5rUmV2OiAgICAg
ICAgICAgICB7IGxpbmsuc2V0UmV2KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIExpbmtU
YXJnZXQ6ICAgICAgICAgIHsgbGluay5zZXRUYXJnZXQoc3RyKTsgcmV0dXJuOyB9CisgICAgICAg
IGNhc2UgTGlua1R5cGU6ICAgICAgICAgICAgeyBsaW5rLnNldFR5cGUoc3RyKTsgcmV0dXJuOyB9
CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfQkFTRTogewotICAgICAgSFRNTEJhc2VF
bGVtZW50SW1wbCAmYmFzZSA9IHN0YXRpY19jYXN0PEhUTUxCYXNlRWxlbWVudEltcGwgJj4oZWxl
bWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIEJhc2VIcmVmOiAgICAg
ICAgICAgIHsgYmFzZS5zZXRIcmVmKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBCYXNlVGFy
Z2V0OiAgICAgICAgICB7IGJhc2Uuc2V0VGFyZ2V0KHN0cik7IHJldHVybjsgfQotICAgICAgfQor
fQorCit2b2lkIEhUTUxFbGVtZW50Ojp0aXRsZVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQorewor
ICAgICBIVE1MVGl0bGVFbGVtZW50SW1wbCYgdGl0bGUgPSAqc3RhdGljX2Nhc3Q8SFRNTFRpdGxl
RWxlbWVudEltcGwqPihpbXBsKCkpOworICAgICBpZiAodG9rZW4gPT0gVGl0bGVUZXh0KQorICAg
ICAgICB0aXRsZS5zZXRUZXh0KHN0cik7Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6Om1ldGFTZXR0
ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3Qg
RE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MTWV0YUVsZW1lbnRJbXBsJiBtZXRhID0g
KnN0YXRpY19jYXN0PEhUTUxNZXRhRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAo
dG9rZW4pIHsKKyAgICAgICAgY2FzZSBNZXRhQ29udGVudDogICAgICAgICB7IG1ldGEuc2V0Q29u
dGVudChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBNZXRhSHR0cEVxdWl2OiAgICAgICB7
IG1ldGEuc2V0SHR0cEVxdWl2KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIE1ldGFOYW1l
OiAgICAgICAgICAgIHsgbWV0YS5zZXROYW1lKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNl
IE1ldGFTY2hlbWU6ICAgICAgICAgIHsgbWV0YS5zZXRTY2hlbWUoc3RyKTsgcmV0dXJuOyB9CiAg
ICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfSVNJTkRFWDogewotICAgICAgSFRNTElzSW5k
ZXhFbGVtZW50SW1wbCAmaXNpbmRleCA9IHN0YXRpY19jYXN0PEhUTUxJc0luZGV4RWxlbWVudElt
cGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICAvLyByZWFkLW9u
bHk6IGZvcm0KLSAgICAgIGNhc2UgSXNJbmRleFByb21wdDogICAgICAgICAgICAgICB7IGlzaW5k
ZXguc2V0UHJvbXB0KHN0cik7IHJldHVybjsgfQotICAgICAgfQorfQorCit2b2lkIEhUTUxFbGVt
ZW50OjpiYXNlU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYg
dmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTEJhc2VFbGVtZW50
SW1wbCYgYmFzZSA9ICpzdGF0aWNfY2FzdDxIVE1MQmFzZUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsK
KyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgQmFzZUhyZWY6ICAgICAgICAgICAg
eyBiYXNlLnNldEhyZWYoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQmFzZVRhcmdldDog
ICAgICAgICAgeyBiYXNlLnNldFRhcmdldChzdHIpOyByZXR1cm47IH0KICAgICB9Ci0gICAgYnJl
YWs7Ci0gICAgY2FzZSBJRF9TVFlMRTogewotICAgICAgSFRNTFN0eWxlRWxlbWVudEltcGwgJnN0
eWxlID0gc3RhdGljX2Nhc3Q8SFRNTFN0eWxlRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAg
ICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIFN0eWxlRGlzYWJsZWQ6ICAgICAgICB7IHN0
eWxlLnNldERpc2FibGVkKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQotICAgICAg
Y2FzZSBTdHlsZU1lZGlhOiAgICAgICAgICAgeyBzdHlsZS5zZXRNZWRpYShzdHIpOyByZXR1cm47
IH0KLSAgICAgIGNhc2UgU3R5bGVUeXBlOiAgICAgICAgICAgIHsgc3R5bGUuc2V0VHlwZShzdHIp
OyByZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6aXNJbmRleFNldHRl
cihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBE
T006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxJc0luZGV4RWxlbWVudEltcGwmIGlzaW5k
ZXggPSAqc3RhdGljX2Nhc3Q8SFRNTElzSW5kZXhFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAg
aWYgKHRva2VuID09IElzSW5kZXhQcm9tcHQpCisgICAgICAgIGlzaW5kZXguc2V0UHJvbXB0KHN0
cik7Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OnN0eWxlU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIp
Cit7CisgICAgSFRNTFN0eWxlRWxlbWVudEltcGwmIHN0eWxlID0gKnN0YXRpY19jYXN0PEhUTUxT
dHlsZUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAg
IGNhc2UgU3R5bGVEaXNhYmxlZDogICAgICAgIHsgc3R5bGUuc2V0RGlzYWJsZWQodmFsdWUudG9C
b29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgU3R5bGVNZWRpYTogICAgICAg
ICAgIHsgc3R5bGUuc2V0TWVkaWEoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgU3R5bGVU
eXBlOiAgICAgICAgICAgIHsgc3R5bGUuc2V0VHlwZShzdHIpOyByZXR1cm47IH0KICAgICB9Ci0g
ICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9CT0RZOiB7Ci0gICAgICBIVE1MQm9keUVsZW1lbnRJbXBs
ICZib2R5ID0gc3RhdGljX2Nhc3Q8SFRNTEJvZHlFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAg
ICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgQm9keUFMaW5rOiAgICAgICAgICAgeyBi
b2R5LnNldEFMaW5rKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBCb2R5QmFja2dyb3VuZDog
ICAgICB7IGJvZHkuc2V0QmFja2dyb3VuZChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQm9k
eUJnQ29sb3I6ICAgICAgICAgeyBib2R5LnNldEJnQ29sb3Ioc3RyKTsgcmV0dXJuOyB9Ci0gICAg
ICBjYXNlIEJvZHlMaW5rOiAgICAgICAgICAgIHsgYm9keS5zZXRMaW5rKHN0cik7IHJldHVybjsg
fQotICAgICAgY2FzZSBCb2R5VGV4dDogICAgICAgICAgICB7IGJvZHkuc2V0VGV4dChzdHIpOyBy
ZXR1cm47IH0KLSAgICAgIGNhc2UgQm9keVZMaW5rOiAgICAgICAgICAgeyBib2R5LnNldFZMaW5r
KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBCb2R5U2Nyb2xsTGVmdDoKLSAgICAgIGNhc2Ug
Qm9keVNjcm9sbFRvcDogewotICAgICAgICAgIFFTY3JvbGxWaWV3KiBzdmlldyA9IGJvZHkub3du
ZXJEb2N1bWVudCgpLT52aWV3KCk7Ci0gICAgICAgICAgaWYgKHN2aWV3KSB7Ci0gICAgICAgICAg
ICAgIC8vIFVwZGF0ZSB0aGUgZG9jdW1lbnQncyBsYXlvdXQgYmVmb3JlIHdlIGNvbXB1dGUgdGhl
c2UgYXR0cmlidXRlcy4KLSAgICAgICAgICAgICAgaWYgKERvY3VtZW50SW1wbCogZG9jID0gYm9k
eS5nZXREb2N1bWVudCgpKQotICAgICAgICAgICAgICAgICAgZG9jLT51cGRhdGVMYXlvdXRJZ25v
cmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKLSAgICAgICAgICAgICAgaWYgKHRva2VuID09IEJvZHlT
Y3JvbGxMZWZ0KQotICAgICAgICAgICAgICAgICAgc3ZpZXctPnNldENvbnRlbnRzUG9zKHZhbHVl
LnRvSW50MzIoZXhlYyksIHN2aWV3LT5jb250ZW50c1koKSk7Ci0gICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICAgIHN2aWV3LT5zZXRDb250ZW50c1Bvcyhzdmlldy0+Y29udGVudHNY
KCksIHZhbHVlLnRvSW50MzIoZXhlYykpOwotICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm47
Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OmJvZHlTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sK
KyAgICBIVE1MQm9keUVsZW1lbnRJbXBsJiBib2R5ID0gKnN0YXRpY19jYXN0PEhUTUxCb2R5RWxl
bWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBC
b2R5QUxpbms6ICAgICAgICAgICB7IGJvZHkuc2V0QUxpbmsoc3RyKTsgcmV0dXJuOyB9CisgICAg
ICAgIGNhc2UgQm9keUJhY2tncm91bmQ6ICAgICAgeyBib2R5LnNldEJhY2tncm91bmQoc3RyKTsg
cmV0dXJuOyB9CisgICAgICAgIGNhc2UgQm9keUJnQ29sb3I6ICAgICAgICAgeyBib2R5LnNldEJn
Q29sb3Ioc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQm9keUxpbms6ICAgICAgICAgICAg
eyBib2R5LnNldExpbmsoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQm9keVRleHQ6ICAg
ICAgICAgICAgeyBib2R5LnNldFRleHQoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQm9k
eVZMaW5rOiAgICAgICAgICAgeyBib2R5LnNldFZMaW5rKHN0cik7IHJldHVybjsgfQorICAgICAg
ICBjYXNlIEJvZHlTY3JvbGxMZWZ0OgorICAgICAgICBjYXNlIEJvZHlTY3JvbGxUb3A6IHsKKyAg
ICAgICAgICAgIFFTY3JvbGxWaWV3KiBzdmlldyA9IGJvZHkub3duZXJEb2N1bWVudCgpLT52aWV3
KCk7CisgICAgICAgICAgICBpZiAoc3ZpZXcpIHsKKyAgICAgICAgICAgICAgICAvLyBVcGRhdGUg
dGhlIGRvY3VtZW50J3MgbGF5b3V0IGJlZm9yZSB3ZSBjb21wdXRlIHRoZXNlIGF0dHJpYnV0ZXMu
CisgICAgICAgICAgICAgICAgaWYgKERvY3VtZW50SW1wbCogZG9jID0gYm9keS5nZXREb2N1bWVu
dCgpKQorICAgICAgICAgICAgICAgICAgICBkb2MtPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdT
dHlsZXNoZWV0cygpOworICAgICAgICAgICAgICAgIGlmICh0b2tlbiA9PSBCb2R5U2Nyb2xsTGVm
dCkKKyAgICAgICAgICAgICAgICAgICAgc3ZpZXctPnNldENvbnRlbnRzUG9zKHZhbHVlLnRvSW50
MzIoZXhlYyksIHN2aWV3LT5jb250ZW50c1koKSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgICAgICBzdmlldy0+c2V0Q29udGVudHNQb3Moc3ZpZXctPmNvbnRlbnRzWCgp
LCB2YWx1ZS50b0ludDMyKGV4ZWMpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQotICAgICAgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0ZP
Uk06IHsKLSAgICAgIEhUTUxGb3JtRWxlbWVudEltcGwgJmZvcm0gPSBzdGF0aWNfY2FzdDxIVE1M
Rm9ybUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAg
ICAgLy8gcmVhZC1vbmx5OiBlbGVtZW50cwotICAgICAgLy8gcmVhZC1vbmx5OiBsZW5ndGgKLSAg
ICAgIGNhc2UgRm9ybU5hbWU6ICAgICAgICAgICAgeyBmb3JtLnNldE5hbWUoc3RyKTsgcmV0dXJu
OyB9Ci0gICAgICBjYXNlIEZvcm1BY2NlcHRDaGFyc2V0OiAgIHsgZm9ybS5zZXRBY2NlcHRDaGFy
c2V0KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBGb3JtQWN0aW9uOiAgICAgICAgICB7IGZv
cm0uc2V0QWN0aW9uKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBGb3JtRW5jVHlwZTogICAg
ICAgICB7IGZvcm0uc2V0RW5jdHlwZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgRm9ybU1l
dGhvZDogICAgICAgICAgeyBmb3JtLnNldE1ldGhvZChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNh
c2UgRm9ybVRhcmdldDogICAgICAgICAgeyBmb3JtLnNldFRhcmdldChzdHIpOyByZXR1cm47IH0K
LSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6Zm9ybVNldHRlcihFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYg
c3RyKQoreworICAgIEhUTUxGb3JtRWxlbWVudEltcGwmIGZvcm0gPSAqc3RhdGljX2Nhc3Q8SFRN
TEZvcm1FbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAg
ICAvLyByZWFkLW9ubHk6IGVsZW1lbnRzCisgICAgICAgIC8vIHJlYWQtb25seTogbGVuZ3RoCisg
ICAgICAgIGNhc2UgRm9ybU5hbWU6ICAgICAgICAgICAgeyBmb3JtLnNldE5hbWUoc3RyKTsgcmV0
dXJuOyB9CisgICAgICAgIGNhc2UgRm9ybUFjY2VwdENoYXJzZXQ6ICAgeyBmb3JtLnNldEFjY2Vw
dENoYXJzZXQoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgRm9ybUFjdGlvbjogICAgICAg
ICAgeyBmb3JtLnNldEFjdGlvbihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBGb3JtRW5j
VHlwZTogICAgICAgICB7IGZvcm0uc2V0RW5jdHlwZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAg
Y2FzZSBGb3JtTWV0aG9kOiAgICAgICAgICB7IGZvcm0uc2V0TWV0aG9kKHN0cik7IHJldHVybjsg
fQorICAgICAgICBjYXNlIEZvcm1UYXJnZXQ6ICAgICAgICAgIHsgZm9ybS5zZXRUYXJnZXQoc3Ry
KTsgcmV0dXJuOyB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfU0VMRUNUOiB7Ci0g
ICAgICBIVE1MU2VsZWN0RWxlbWVudEltcGwgJnNlbGVjdCA9IHN0YXRpY19jYXN0PEhUTUxTZWxl
Y3RFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAg
IC8vIHJlYWQtb25seTogdHlwZQotICAgICAgY2FzZSBTZWxlY3RTZWxlY3RlZEluZGV4OiAgIHsg
c2VsZWN0LnNldFNlbGVjdGVkSW5kZXgodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQot
ICAgICAgY2FzZSBTZWxlY3RWYWx1ZTogICAgICAgICAgIHsgc2VsZWN0LnNldFZhbHVlKHN0cik7
IHJldHVybjsgfQotICAgICAgY2FzZSBTZWxlY3RMZW5ndGg6ICAgICAgICAgIHsgLy8gcmVhZC1v
bmx5IGFjY29yZGluZyB0byB0aGUgTlMgc3BlYywgYnV0IHdlYnBhZ2VzIG5lZWQgaXQgd3JpdGVh
YmxlCit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OnNlbGVjdFNldHRlcihFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3Ry
KQoreworICAgIEhUTUxTZWxlY3RFbGVtZW50SW1wbCYgc2VsZWN0ID0gKnN0YXRpY19jYXN0PEhU
TUxTZWxlY3RFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAg
ICAgICAvLyByZWFkLW9ubHk6IHR5cGUKKyAgICAgICAgY2FzZSBTZWxlY3RTZWxlY3RlZEluZGV4
OiAgIHsgc2VsZWN0LnNldFNlbGVjdGVkSW5kZXgodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVy
bjsgfQorICAgICAgICBjYXNlIFNlbGVjdFZhbHVlOiAgICAgICAgICAgeyBzZWxlY3Quc2V0VmFs
dWUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgU2VsZWN0TGVuZ3RoOiAgICAgICAgICB7
IC8vIHJlYWQtb25seSBhY2NvcmRpbmcgdG8gdGhlIE5TIHNwZWMsIGJ1dCB3ZWJwYWdlcyBuZWVk
IGl0IHdyaXRlYWJsZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBP
YmplY3QgY29sbCA9IE9iamVjdDo6ZHluYW1pY0Nhc3QoIGdldFNlbGVjdEhUTUxDb2xsZWN0aW9u
KGV4ZWMsIHNlbGVjdC5vcHRpb25zSFRNTENvbGxlY3Rpb24oKS5nZXQoKSwgJnNlbGVjdCkgKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhY29sbC5pc051
bGwoKSApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbC5w
dXQoZXhlYyxsZW5ndGhQcm9wZXJ0eU5hbWUsdmFsdWUpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAvLyByZWFkLW9ubHk6IGZvcm0KLSAgICAgIC8vIHJlYWQtb25s
eTogb3B0aW9ucwotICAgICAgY2FzZSBTZWxlY3REaXNhYmxlZDogICAgICAgIHsgc2VsZWN0LnNl
dERpc2FibGVkKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBT
ZWxlY3RNdWx0aXBsZTogICAgICAgIHsgc2VsZWN0LnNldE11bHRpcGxlKHZhbHVlLnRvQm9vbGVh
bihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBTZWxlY3ROYW1lOiAgICAgICAgICAgIHsg
c2VsZWN0LnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFNlbGVjdFNpemU6ICAg
ICAgICAgICAgeyBzZWxlY3Quc2V0U2l6ZSh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9
Ci0gICAgICBjYXNlIFNlbGVjdFRhYkluZGV4OiAgICAgICAgeyBzZWxlY3Quc2V0VGFiSW5kZXgo
dmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQotICAgICAgfQotICAgIH0KLSAgICBicmVh
azsKLSAgICBjYXNlIElEX09QVEdST1VQOiB7Ci0gICAgICBIVE1MT3B0R3JvdXBFbGVtZW50SW1w
bCAmb3B0Z3JvdXAgPSBzdGF0aWNfY2FzdDxIVE1MT3B0R3JvdXBFbGVtZW50SW1wbCAmPihlbGVt
ZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgT3B0R3JvdXBEaXNhYmxl
ZDogICAgICAgIHsgb3B0Z3JvdXAuc2V0RGlzYWJsZWQodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsg
cmV0dXJuOyB9Ci0gICAgICBjYXNlIE9wdEdyb3VwTGFiZWw6ICAgICAgICAgICB7IG9wdGdyb3Vw
LnNldExhYmVsKHN0cik7IHJldHVybjsgfQotICAgICAgfQotICAgIH0KLSAgICBicmVhazsKLSAg
ICBjYXNlIElEX09QVElPTjogewotICAgICAgSFRNTE9wdGlvbkVsZW1lbnRJbXBsICZvcHRpb24g
PSBzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBz
d2l0Y2ggKHRva2VuKSB7Ci0gICAgICAvLyByZWFkLW9ubHk6IGZvcm0KLSAgICAgIGNhc2UgT3B0
aW9uRGVmYXVsdFNlbGVjdGVkOiB7IG9wdGlvbi5zZXREZWZhdWx0U2VsZWN0ZWQodmFsdWUudG9C
b29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIE9wdGlvblRleHQ6ICAgICAgICAg
ICAgeyBvcHRpb24uc2V0VGV4dChzdHIsIGV4Y2VwdGlvbik7IHJldHVybjsgfQotICAgICAgLy8g
cmVhZC1vbmx5OiBpbmRleAotICAgICAgY2FzZSBPcHRpb25EaXNhYmxlZDogICAgICAgIHsgb3B0
aW9uLnNldERpc2FibGVkKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQotICAgICAg
Y2FzZSBPcHRpb25MYWJlbDogICAgICAgICAgIHsgb3B0aW9uLnNldExhYmVsKHN0cik7IHJldHVy
bjsgfQotICAgICAgY2FzZSBPcHRpb25TZWxlY3RlZDogICAgICAgIHsgb3B0aW9uLnNldFNlbGVj
dGVkKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBPcHRpb25W
YWx1ZTogICAgICAgICAgIHsgb3B0aW9uLnNldFZhbHVlKHN0cik7IHJldHVybjsgfQotICAgICAg
fQotICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0lOUFVUOiB7Ci0gICAgICBIVE1MSW5w
dXRFbGVtZW50SW1wbCAmaW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50SW1wbCAm
PihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgSW5wdXREZWZh
dWx0VmFsdWU6ICAgIHsgaW5wdXQuc2V0RGVmYXVsdFZhbHVlKHN0cik7IHJldHVybjsgfQotICAg
ICAgY2FzZSBJbnB1dERlZmF1bHRDaGVja2VkOiAgeyBpbnB1dC5zZXREZWZhdWx0Q2hlY2tlZCh2
YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KLSAgICAgIC8vIHJlYWQtb25seTogZm9y
bQotICAgICAgY2FzZSBJbnB1dEFjY2VwdDogICAgICAgICAgeyBpbnB1dC5zZXRBY2NlcHQoc3Ry
KTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElucHV0QWNjZXNzS2V5OiAgICAgICB7IGlucHV0LnNl
dEFjY2Vzc0tleShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSW5wdXRBbGlnbjogICAgICAg
ICAgIHsgaW5wdXQuc2V0QWxpZ24oc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElucHV0QWx0
OiAgICAgICAgICAgICB7IGlucHV0LnNldEFsdChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2Ug
SW5wdXRDaGVja2VkOiAgICAgICAgIHsgaW5wdXQuc2V0Q2hlY2tlZCh2YWx1ZS50b0Jvb2xlYW4o
ZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSW5wdXREaXNhYmxlZDogICAgICAgIHsgaW5w
dXQuc2V0RGlzYWJsZWQodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBj
YXNlIElucHV0TWF4TGVuZ3RoOiAgICAgICB7IGlucHV0LnNldE1heExlbmd0aCh2YWx1ZS50b0lu
dDMyKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElucHV0TmFtZTogICAgICAgICAgICB7
IGlucHV0LnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElucHV0UmVhZE9ubHk6
ICAgICAgICB7IGlucHV0LnNldFJlYWRPbmx5KHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVy
bjsgfQotICAgICAgY2FzZSBJbnB1dFNlbGVjdGlvblN0YXJ0OiAgeyBpbnB1dC5zZXRTZWxlY3Rp
b25TdGFydCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElucHV0
U2VsZWN0aW9uRW5kOiAgICB7IGlucHV0LnNldFNlbGVjdGlvbkVuZCh2YWx1ZS50b0ludDMyKGV4
ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElucHV0U2l6ZTogICAgICAgICAgICB7IGlucHV0
LnNldFNpemUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElucHV0U3JjOiAgICAgICAgICAg
ICB7IGlucHV0LnNldFNyYyhzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSW5wdXRUYWJJbmRl
eDogICAgICAgIHsgaW5wdXQuc2V0VGFiSW5kZXgodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVy
bjsgfQotICAgICAgY2FzZSBJbnB1dFR5cGU6ICAgICAgICAgICAgeyBpbnB1dC5zZXRUeXBlKHN0
cik7IHJldHVybjsgfQotICAgICAgY2FzZSBJbnB1dFVzZU1hcDogICAgICAgICAgeyBpbnB1dC5z
ZXRVc2VNYXAoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElucHV0VmFsdWU6ICAgICAgICAg
ICB7IGlucHV0LnNldFZhbHVlKHN0cik7IHJldHVybjsgfQotICAgICAgfQotICAgIH0KLSAgICBi
cmVhazsKLSAgICBjYXNlIElEX1RFWFRBUkVBOiB7Ci0gICAgICBIVE1MVGV4dEFyZWFFbGVtZW50
SW1wbCAmdGV4dGFyZWEgPSBzdGF0aWNfY2FzdDxIVE1MVGV4dEFyZWFFbGVtZW50SW1wbCAmPihl
bGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgVGV4dEFyZWFEZWZh
dWx0VmFsdWU6ICAgIHsgdGV4dGFyZWEuc2V0RGVmYXVsdFZhbHVlKHN0cik7IHJldHVybjsgfQot
ICAgICAgLy8gcmVhZC1vbmx5OiBmb3JtCi0gICAgICBjYXNlIFRleHRBcmVhQWNjZXNzS2V5OiAg
ICAgICB7IHRleHRhcmVhLnNldEFjY2Vzc0tleShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2Ug
VGV4dEFyZWFDb2xzOiAgICAgICAgICAgIHsgdGV4dGFyZWEuc2V0Q29scyh2YWx1ZS50b0ludDMy
KGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRleHRBcmVhRGlzYWJsZWQ6ICAgICAgICB7
IHRleHRhcmVhLnNldERpc2FibGVkKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQot
ICAgICAgY2FzZSBUZXh0QXJlYU5hbWU6ICAgICAgICAgICAgeyB0ZXh0YXJlYS5zZXROYW1lKHN0
cik7IHJldHVybjsgfQotICAgICAgY2FzZSBUZXh0QXJlYVJlYWRPbmx5OiAgICAgICAgeyB0ZXh0
YXJlYS5zZXRSZWFkT25seSh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KLSAgICAg
IGNhc2UgVGV4dEFyZWFSb3dzOiAgICAgICAgICAgIHsgdGV4dGFyZWEuc2V0Um93cyh2YWx1ZS50
b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRleHRBcmVhU2VsZWN0aW9uU3Rh
cnQ6ICB7IHRleHRhcmVhLnNldFNlbGVjdGlvblN0YXJ0KHZhbHVlLnRvSW50MzIoZXhlYykpOyBy
ZXR1cm47IH0KLSAgICAgIGNhc2UgVGV4dEFyZWFTZWxlY3Rpb25FbmQ6ICAgIHsgdGV4dGFyZWEu
c2V0U2VsZWN0aW9uRW5kKHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNh
c2UgVGV4dEFyZWFUYWJJbmRleDogICAgICAgIHsgdGV4dGFyZWEuc2V0VGFiSW5kZXgodmFsdWUu
dG9JbnQzMihleGVjKSk7IHJldHVybjsgfQotICAgICAgLy8gcmVhZC1vbmx5OiB0eXBlCi0gICAg
ICBjYXNlIFRleHRBcmVhVmFsdWU6ICAgICAgICAgICB7IHRleHRhcmVhLnNldFZhbHVlKHN0cik7
IHJldHVybjsgfQotICAgICAgfQotICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0JVVFRP
TjogewotICAgICAgSFRNTEJ1dHRvbkVsZW1lbnRJbXBsICZidXR0b24gPSBzdGF0aWNfY2FzdDxI
VE1MQnV0dG9uRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7
Ci0gICAgICAvLyByZWFkLW9ubHk6IGZvcm0KLSAgICAgIGNhc2UgQnV0dG9uQWNjZXNzS2V5OiAg
ICAgICB7IGJ1dHRvbi5zZXRBY2Nlc3NLZXkoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEJ1
dHRvbkRpc2FibGVkOiAgICAgICAgeyBidXR0b24uc2V0RGlzYWJsZWQodmFsdWUudG9Cb29sZWFu
KGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEJ1dHRvbk5hbWU6ICAgICAgICAgICAgeyBi
dXR0b24uc2V0TmFtZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQnV0dG9uVGFiSW5kZXg6
ICAgICAgICB7IGJ1dHRvbi5zZXRUYWJJbmRleCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJu
OyB9Ci0gICAgICAvLyByZWFkLW9ubHk6IHR5cGUKLSAgICAgIGNhc2UgQnV0dG9uVmFsdWU6ICAg
ICAgICAgICB7IGJ1dHRvbi5zZXRWYWx1ZShzdHIpOyByZXR1cm47IH0KLSAgICAgIH0KLSAgICB9
Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9MQUJFTDogewotICAgICAgSFRNTExhYmVsRWxlbWVu
dEltcGwgJmxhYmVsID0gc3RhdGljX2Nhc3Q8SFRNTExhYmVsRWxlbWVudEltcGwgJj4oZWxlbWVu
dCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICAvLyByZWFkLW9ubHk6IGZvcm0KLSAg
ICAgIGNhc2UgTGFiZWxBY2Nlc3NLZXk6ICAgICAgIHsgbGFiZWwuc2V0QWNjZXNzS2V5KHN0cik7
IHJldHVybjsgfQotICAgICAgY2FzZSBMYWJlbEh0bWxGb3I6ICAgICAgICAgeyBsYWJlbC5zZXRI
dG1sRm9yKHN0cik7IHJldHVybjsgfQotICAgICAgfQotICAgIH0KLSAgICBicmVhazsKLSAgICBj
YXNlIElEX0xFR0VORDogewotICAgICAgSFRNTExlZ2VuZEVsZW1lbnRJbXBsICZsZWdlbmQgPSBz
dGF0aWNfY2FzdDxIVE1MTGVnZW5kRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0
Y2ggKHRva2VuKSB7Ci0gICAgICAvLyByZWFkLW9ubHk6IGZvcm0KLSAgICAgIGNhc2UgTGVnZW5k
QWNjZXNzS2V5OiAgICAgICB7IGxlZ2VuZC5zZXRBY2Nlc3NLZXkoc3RyKTsgcmV0dXJuOyB9Ci0g
ICAgICBjYXNlIExlZ2VuZEFsaWduOiAgICAgICAgICAgeyBsZWdlbmQuc2V0QWxpZ24oc3RyKTsg
cmV0dXJuOyB9Ci0gICAgICB9Ci0gICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfVUw6IHsK
LSAgICAgIEhUTUxVTGlzdEVsZW1lbnRJbXBsICZ1TGlzdCA9IHN0YXRpY19jYXN0PEhUTUxVTGlz
dEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAg
Y2FzZSBVTGlzdENvbXBhY3Q6ICAgICAgICAgeyB1TGlzdC5zZXRDb21wYWN0KHZhbHVlLnRvQm9v
bGVhbihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBVTGlzdFR5cGU6ICAgICAgICAgICAg
eyB1TGlzdC5zZXRUeXBlKHN0cik7IHJldHVybjsgfQotICAgICAgfQotICAgIH0KLSAgICBicmVh
azsKLSAgICBjYXNlIElEX09MOiB7Ci0gICAgICBIVE1MT0xpc3RFbGVtZW50SW1wbCAmb0xpc3Qg
PSBzdGF0aWNfY2FzdDxIVE1MT0xpc3RFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3
aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgT0xpc3RDb21wYWN0OiAgICAgICAgIHsgb0xpc3Qu
c2V0Q29tcGFjdCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2Ug
T0xpc3RTdGFydDogICAgICAgICAgIHsgb0xpc3Quc2V0U3RhcnQodmFsdWUudG9JbnQzMihleGVj
KSk7IHJldHVybjsgfQotICAgICAgY2FzZSBPTGlzdFR5cGU6ICAgICAgICAgICAgeyBvTGlzdC5z
ZXRUeXBlKHN0cik7IHJldHVybjsgfQotICAgICAgfQotICAgIH0KLSAgICBicmVhazsKLSAgICBj
YXNlIElEX0RMOiB7Ci0gICAgICBIVE1MRExpc3RFbGVtZW50SW1wbCAmZExpc3QgPSBzdGF0aWNf
Y2FzdDxIVE1MRExpc3RFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9r
ZW4pIHsKLSAgICAgIGNhc2UgRExpc3RDb21wYWN0OiAgICAgICAgIHsgZExpc3Quc2V0Q29tcGFj
dCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KLSAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgLy8gcmVhZC1vbmx5OiBmb3JtCisg
ICAgICAgIC8vIHJlYWQtb25seTogb3B0aW9ucworICAgICAgICBjYXNlIFNlbGVjdERpc2FibGVk
OiAgICAgICAgeyBzZWxlY3Quc2V0RGlzYWJsZWQodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0
dXJuOyB9CisgICAgICAgIGNhc2UgU2VsZWN0TXVsdGlwbGU6ICAgICAgICB7IHNlbGVjdC5zZXRN
dWx0aXBsZSh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBT
ZWxlY3ROYW1lOiAgICAgICAgICAgIHsgc2VsZWN0LnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9Cisg
ICAgICAgIGNhc2UgU2VsZWN0U2l6ZTogICAgICAgICAgICB7IHNlbGVjdC5zZXRTaXplKHZhbHVl
LnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBTZWxlY3RUYWJJbmRleDog
ICAgICAgIHsgc2VsZWN0LnNldFRhYkluZGV4KHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47
IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9ESVI6IHsKLSAgICAgIEhUTUxEaXJl
Y3RvcnlFbGVtZW50SW1wbCAmZGlyZWN0b3J5ID0gc3RhdGljX2Nhc3Q8SFRNTERpcmVjdG9yeUVs
ZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgY2Fz
ZSBEaXJlY3RvcnlDb21wYWN0OiAgICAgeyBkaXJlY3Rvcnkuc2V0Q29tcGFjdCh2YWx1ZS50b0Jv
b2xlYW4oZXhlYykpOyByZXR1cm47IH0KLSAgICAgIH0KLSAgICB9Ci0gICAgYnJlYWs7Ci0gICAg
Y2FzZSBJRF9NRU5VOiB7Ci0gICAgICBIVE1MTWVudUVsZW1lbnRJbXBsICZtZW51ID0gc3RhdGlj
X2Nhc3Q8SFRNTE1lbnVFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9r
ZW4pIHsKLSAgICAgIGNhc2UgTWVudUNvbXBhY3Q6ICAgICAgICAgeyBtZW51LnNldENvbXBhY3Qo
dmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICB9Ci0gICAgfQotICAgIGJy
ZWFrOwotICAgIGNhc2UgSURfTEk6IHsKLSAgICAgIEhUTUxMSUVsZW1lbnRJbXBsICZsaSA9IHN0
YXRpY19jYXN0PEhUTUxMSUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0
b2tlbikgewotICAgICAgY2FzZSBMSVR5cGU6ICAgICAgICAgICAgeyBsaS5zZXRUeXBlKHN0cik7
IHJldHVybjsgfQotICAgICAgY2FzZSBMSVZhbHVlOiAgICAgICAgICAgeyBsaS5zZXRWYWx1ZSh2
YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICB9Cit9CisKK3ZvaWQgSFRNTEVs
ZW1lbnQ6Om9wdEdyb3VwU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBW
YWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTE9wdEdy
b3VwRWxlbWVudEltcGwmIG9wdGdyb3VwID0gKnN0YXRpY19jYXN0PEhUTUxPcHRHcm91cEVsZW1l
bnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgT3B0
R3JvdXBEaXNhYmxlZDogICAgICAgIHsgb3B0Z3JvdXAuc2V0RGlzYWJsZWQodmFsdWUudG9Cb29s
ZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgT3B0R3JvdXBMYWJlbDogICAgICAg
ICAgIHsgb3B0Z3JvdXAuc2V0TGFiZWwoc3RyKTsgcmV0dXJuOyB9CiAgICAgfQotICAgIGJyZWFr
OwotICAgIGNhc2UgSURfRElWOiB7Ci0gICAgICBIVE1MRGl2RWxlbWVudEltcGwgJmRpdiA9IHN0
YXRpY19jYXN0PEhUTUxEaXZFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAo
dG9rZW4pIHsKLSAgICAgIGNhc2UgRGl2QWxpZ246ICAgICAgICAgICB7IGRpdi5zZXRBbGlnbihz
dHIpOyByZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6b3B0aW9uU2V0
dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0
IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgRE9NRXhjZXB0aW9uVHJhbnNsYXRvciBleGNl
cHRpb24oZXhlYyk7CisgICAgSFRNTE9wdGlvbkVsZW1lbnRJbXBsJiBvcHRpb24gPSAqc3RhdGlj
X2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2Vu
KSB7CisgICAgICAgIC8vIHJlYWQtb25seTogZm9ybQorICAgICAgICBjYXNlIE9wdGlvbkRlZmF1
bHRTZWxlY3RlZDogeyBvcHRpb24uc2V0RGVmYXVsdFNlbGVjdGVkKHZhbHVlLnRvQm9vbGVhbihl
eGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIE9wdGlvblRleHQ6ICAgICAgICAgICAgeyBv
cHRpb24uc2V0VGV4dChzdHIsIGV4Y2VwdGlvbik7IHJldHVybjsgfQorICAgICAgICAvLyByZWFk
LW9ubHk6IGluZGV4CisgICAgICAgIGNhc2UgT3B0aW9uRGlzYWJsZWQ6ICAgICAgICB7IG9wdGlv
bi5zZXREaXNhYmxlZCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAg
Y2FzZSBPcHRpb25MYWJlbDogICAgICAgICAgIHsgb3B0aW9uLnNldExhYmVsKHN0cik7IHJldHVy
bjsgfQorICAgICAgICBjYXNlIE9wdGlvblNlbGVjdGVkOiAgICAgICAgeyBvcHRpb24uc2V0U2Vs
ZWN0ZWQodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgT3B0
aW9uVmFsdWU6ICAgICAgICAgICB7IG9wdGlvbi5zZXRWYWx1ZShzdHIpOyByZXR1cm47IH0KICAg
ICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9QOiB7Ci0gICAgICBIVE1MUGFyYWdyYXBoRWxl
bWVudEltcGwgJnBhcmFncmFwaCA9IHN0YXRpY19jYXN0PEhUTUxQYXJhZ3JhcGhFbGVtZW50SW1w
bCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgUGFyYWdy
YXBoQWxpZ246ICAgICB7IHBhcmFncmFwaC5zZXRBbGlnbihzdHIpOyByZXR1cm47IH0KLSAgICAg
IH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6aW5wdXRTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikK
K3sKKyAgICBIVE1MSW5wdXRFbGVtZW50SW1wbCYgaW5wdXQgPSAqc3RhdGljX2Nhc3Q8SFRNTElu
cHV0RWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAg
Y2FzZSBJbnB1dERlZmF1bHRWYWx1ZTogICAgeyBpbnB1dC5zZXREZWZhdWx0VmFsdWUoc3RyKTsg
cmV0dXJuOyB9CisgICAgICAgIGNhc2UgSW5wdXREZWZhdWx0Q2hlY2tlZDogIHsgaW5wdXQuc2V0
RGVmYXVsdENoZWNrZWQodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAg
IC8vIHJlYWQtb25seTogZm9ybQorICAgICAgICBjYXNlIElucHV0QWNjZXB0OiAgICAgICAgICB7
IGlucHV0LnNldEFjY2VwdChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJbnB1dEFjY2Vz
c0tleTogICAgICAgeyBpbnB1dC5zZXRBY2Nlc3NLZXkoc3RyKTsgcmV0dXJuOyB9CisgICAgICAg
IGNhc2UgSW5wdXRBbGlnbjogICAgICAgICAgIHsgaW5wdXQuc2V0QWxpZ24oc3RyKTsgcmV0dXJu
OyB9CisgICAgICAgIGNhc2UgSW5wdXRBbHQ6ICAgICAgICAgICAgIHsgaW5wdXQuc2V0QWx0KHN0
cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIElucHV0Q2hlY2tlZDogICAgICAgICB7IGlucHV0
LnNldENoZWNrZWQodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNh
c2UgSW5wdXREaXNhYmxlZDogICAgICAgIHsgaW5wdXQuc2V0RGlzYWJsZWQodmFsdWUudG9Cb29s
ZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgSW5wdXRNYXhMZW5ndGg6ICAgICAg
IHsgaW5wdXQuc2V0TWF4TGVuZ3RoKHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KKyAg
ICAgICAgY2FzZSBJbnB1dE5hbWU6ICAgICAgICAgICAgeyBpbnB1dC5zZXROYW1lKHN0cik7IHJl
dHVybjsgfQorICAgICAgICBjYXNlIElucHV0UmVhZE9ubHk6ICAgICAgICB7IGlucHV0LnNldFJl
YWRPbmx5KHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIElu
cHV0U2l6ZTogICAgICAgICAgICB7IGlucHV0LnNldFNpemUoc3RyKTsgcmV0dXJuOyB9CisgICAg
ICAgIGNhc2UgSW5wdXRTZWxlY3Rpb25TdGFydDogIHsgaW5wdXQuc2V0U2VsZWN0aW9uU3RhcnQo
dmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIElucHV0U2VsZWN0
aW9uRW5kOiAgICB7IGlucHV0LnNldFNlbGVjdGlvbkVuZCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsg
cmV0dXJuOyB9CisgICAgICAgIGNhc2UgSW5wdXRTcmM6ICAgICAgICAgICAgIHsgaW5wdXQuc2V0
U3JjKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIElucHV0VGFiSW5kZXg6ICAgICAgICB7
IGlucHV0LnNldFRhYkluZGV4KHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KKyAgICAg
ICAgY2FzZSBJbnB1dFR5cGU6ICAgICAgICAgICAgeyBpbnB1dC5zZXRUeXBlKHN0cik7IHJldHVy
bjsgfQorICAgICAgICBjYXNlIElucHV0VXNlTWFwOiAgICAgICAgICB7IGlucHV0LnNldFVzZU1h
cChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJbnB1dFZhbHVlOiAgICAgICAgICAgeyBp
bnB1dC5zZXRWYWx1ZShzdHIpOyByZXR1cm47IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2Fz
ZSBJRF9IMToKLSAgICBjYXNlIElEX0gyOgotICAgIGNhc2UgSURfSDM6Ci0gICAgY2FzZSBJRF9I
NDoKLSAgICBjYXNlIElEX0g1OgotICAgIGNhc2UgSURfSDY6IHsKLSAgICAgIEhUTUxIZWFkaW5n
RWxlbWVudEltcGwgJmhlYWRpbmcgPSBzdGF0aWNfY2FzdDxIVE1MSGVhZGluZ0VsZW1lbnRJbXBs
ICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgY2FzZSBIZWFkaW5n
QWxpZ246ICAgICAgICAgeyBoZWFkaW5nLnNldEFsaWduKHN0cik7IHJldHVybjsgfQotICAgICAg
fQorfQorCit2b2lkIEhUTUxFbGVtZW50Ojp0ZXh0QXJlYVNldHRlcihFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3Ry
KQoreworICAgIEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBsJiB0ZXh0YXJlYSA9ICpzdGF0aWNfY2Fz
dDxIVE1MVGV4dEFyZWFFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikg
eworICAgICAgICBjYXNlIFRleHRBcmVhRGVmYXVsdFZhbHVlOiAgICB7IHRleHRhcmVhLnNldERl
ZmF1bHRWYWx1ZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgLy8gcmVhZC1vbmx5OiBmb3JtCisg
ICAgICAgIGNhc2UgVGV4dEFyZWFBY2Nlc3NLZXk6ICAgICAgIHsgdGV4dGFyZWEuc2V0QWNjZXNz
S2V5KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRleHRBcmVhQ29sczogICAgICAgICAg
ICB7IHRleHRhcmVhLnNldENvbHModmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQorICAg
ICAgICBjYXNlIFRleHRBcmVhRGlzYWJsZWQ6ICAgICAgICB7IHRleHRhcmVhLnNldERpc2FibGVk
KHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRleHRBcmVh
TmFtZTogICAgICAgICAgICB7IHRleHRhcmVhLnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9CisgICAg
ICAgIGNhc2UgVGV4dEFyZWFSZWFkT25seTogICAgICAgIHsgdGV4dGFyZWEuc2V0UmVhZE9ubHko
dmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGV4dEFyZWFS
b3dzOiAgICAgICAgICAgIHsgdGV4dGFyZWEuc2V0Um93cyh2YWx1ZS50b0ludDMyKGV4ZWMpKTsg
cmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGV4dEFyZWFTZWxlY3Rpb25TdGFydDogIHsgdGV4dGFy
ZWEuc2V0U2VsZWN0aW9uU3RhcnQodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQorICAg
ICAgICBjYXNlIFRleHRBcmVhU2VsZWN0aW9uRW5kOiAgICB7IHRleHRhcmVhLnNldFNlbGVjdGlv
bkVuZCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGV4dEFy
ZWFUYWJJbmRleDogICAgICAgIHsgdGV4dGFyZWEuc2V0VGFiSW5kZXgodmFsdWUudG9JbnQzMihl
eGVjKSk7IHJldHVybjsgfQorICAgICAgICAvLyByZWFkLW9ubHk6IHR5cGUKKyAgICAgICAgY2Fz
ZSBUZXh0QXJlYVZhbHVlOiAgICAgICAgICAgeyB0ZXh0YXJlYS5zZXRWYWx1ZShzdHIpOyByZXR1
cm47IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9CTE9DS1FVT1RFOiB7Ci0gICAg
ICBIVE1MQmxvY2txdW90ZUVsZW1lbnRJbXBsICZibG9ja3F1b3RlID0gc3RhdGljX2Nhc3Q8SFRN
TEJsb2NrcXVvdGVFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4p
IHsKLSAgICAgIGNhc2UgQmxvY2tRdW90ZUNpdGU6ICAgICAgIHsgYmxvY2txdW90ZS5zZXRDaXRl
KHN0cik7IHJldHVybjsgfQotICAgICAgfQorfQorCit2b2lkIEhUTUxFbGVtZW50OjpidXR0b25T
ZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29u
c3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MQnV0dG9uRWxlbWVudEltcGwmIGJ1
dHRvbiA9ICpzdGF0aWNfY2FzdDxIVE1MQnV0dG9uRWxlbWVudEltcGwqPihpbXBsKCkpOworICAg
IHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgLy8gcmVhZC1vbmx5OiBmb3JtCisgICAgICAgIGNh
c2UgQnV0dG9uQWNjZXNzS2V5OiAgICAgICB7IGJ1dHRvbi5zZXRBY2Nlc3NLZXkoc3RyKTsgcmV0
dXJuOyB9CisgICAgICAgIGNhc2UgQnV0dG9uRGlzYWJsZWQ6ICAgICAgICB7IGJ1dHRvbi5zZXRE
aXNhYmxlZCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBC
dXR0b25OYW1lOiAgICAgICAgICAgIHsgYnV0dG9uLnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9Cisg
ICAgICAgIGNhc2UgQnV0dG9uVGFiSW5kZXg6ICAgICAgICB7IGJ1dHRvbi5zZXRUYWJJbmRleCh2
YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIC8vIHJlYWQtb25seTogdHlw
ZQorICAgICAgICBjYXNlIEJ1dHRvblZhbHVlOiAgICAgICAgICAgeyBidXR0b24uc2V0VmFsdWUo
c3RyKTsgcmV0dXJuOyB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfUTogewotICAg
ICAgSFRNTFF1b3RlRWxlbWVudEltcGwgJnF1b3RlID0gc3RhdGljX2Nhc3Q8SFRNTFF1b3RlRWxl
bWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNl
IFF1b3RlQ2l0ZTogICAgICAgICAgICB7IHF1b3RlLnNldENpdGUoc3RyKTsgcmV0dXJuOyB9Ci0g
ICAgICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OmxhYmVsU2V0dGVyKEV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBz
dHIpCit7CisgICAgSFRNTExhYmVsRWxlbWVudEltcGwmIGxhYmVsID0gKnN0YXRpY19jYXN0PEhU
TUxMYWJlbEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAg
ICAgIC8vIHJlYWQtb25seTogZm9ybQorICAgICAgICBjYXNlIExhYmVsQWNjZXNzS2V5OiAgICAg
ICB7IGxhYmVsLnNldEFjY2Vzc0tleShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBMYWJl
bEh0bWxGb3I6ICAgICAgICAgeyBsYWJlbC5zZXRIdG1sRm9yKHN0cik7IHJldHVybjsgfQogICAg
IH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX1BSRTogewotICAgICAgSFRNTFByZUVsZW1lbnRJ
bXBsICZwcmUgPSBzdGF0aWNfY2FzdDxIVE1MUHJlRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0g
ICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIFByZVdpZHRoOiAgICAgICAgICAgeyBw
cmUuc2V0V2lkdGgodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQotICAgICAgfQorfQor
Cit2b2lkIEhUTUxFbGVtZW50OjpmaWVsZFNldFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQorewor
fQorCit2b2lkIEhUTUxFbGVtZW50OjpsZWdlbmRTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sK
KyAgICBIVE1MTGVnZW5kRWxlbWVudEltcGwmIGxlZ2VuZCA9ICpzdGF0aWNfY2FzdDxIVE1MTGVn
ZW5kRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAg
Ly8gcmVhZC1vbmx5OiBmb3JtCisgICAgICAgIGNhc2UgTGVnZW5kQWNjZXNzS2V5OiAgICAgICB7
IGxlZ2VuZC5zZXRBY2Nlc3NLZXkoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgTGVnZW5k
QWxpZ246ICAgICAgICAgICB7IGxlZ2VuZC5zZXRBbGlnbihzdHIpOyByZXR1cm47IH0KICAgICB9
Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9CUjogewotICAgICAgSFRNTEJSRWxlbWVudEltcGwg
JmJyID0gc3RhdGljX2Nhc3Q8SFRNTEJSRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBz
d2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIEJSQ2xlYXI6ICAgICAgICAgICB7IGJyLnNldENs
ZWFyKHN0cik7IHJldHVybjsgfQotICAgICAgfQorfQorCit2b2lkIEhUTUxFbGVtZW50Ojp1TGlz
dFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBj
b25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxVTGlzdEVsZW1lbnRJbXBsJiB1
TGlzdCA9ICpzdGF0aWNfY2FzdDxIVE1MVUxpc3RFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAg
c3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNlIFVMaXN0Q29tcGFjdDogICAgICAgICB7IHVM
aXN0LnNldENvbXBhY3QodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAg
IGNhc2UgVUxpc3RUeXBlOiAgICAgICAgICAgIHsgdUxpc3Quc2V0VHlwZShzdHIpOyByZXR1cm47
IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9CQVNFRk9OVDogewotICAgICAgSFRN
TEJhc2VGb250RWxlbWVudEltcGwgJmJhc2VGb250ID0gc3RhdGljX2Nhc3Q8SFRNTEJhc2VGb250
RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBj
YXNlIEJhc2VGb250Q29sb3I6ICAgICAgICAgICB7IGJhc2VGb250LnNldENvbG9yKHN0cik7IHJl
dHVybjsgfQotICAgICAgY2FzZSBCYXNlRm9udEZhY2U6ICAgICAgICAgICAgeyBiYXNlRm9udC5z
ZXRGYWNlKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBCYXNlRm9udFNpemU6ICAgICAgICAg
ICAgeyBiYXNlRm9udC5zZXRTaXplKHN0cik7IHJldHVybjsgfQotICAgICAgfQorfQorCit2b2lk
IEhUTUxFbGVtZW50OjpvTGlzdFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29u
c3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxP
TGlzdEVsZW1lbnRJbXBsJiBvTGlzdCA9ICpzdGF0aWNfY2FzdDxIVE1MT0xpc3RFbGVtZW50SW1w
bCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNlIE9MaXN0Q29t
cGFjdDogICAgICAgICB7IG9MaXN0LnNldENvbXBhY3QodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsg
cmV0dXJuOyB9CisgICAgICAgIGNhc2UgT0xpc3RTdGFydDogICAgICAgICAgIHsgb0xpc3Quc2V0
U3RhcnQodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIE9MaXN0
VHlwZTogICAgICAgICAgICB7IG9MaXN0LnNldFR5cGUoc3RyKTsgcmV0dXJuOyB9CiAgICAgfQot
ICAgIGJyZWFrOwotICAgIGNhc2UgSURfRk9OVDogewotICAgICAgSFRNTEZvbnRFbGVtZW50SW1w
bCAmZm9udCA9IHN0YXRpY19jYXN0PEhUTUxGb250RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0g
ICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIEZvbnRDb2xvcjogICAgICAgICAgIHsg
Zm9udC5zZXRDb2xvcihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgRm9udEZhY2U6ICAgICAg
ICAgICAgeyBmb250LnNldEZhY2Uoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEZvbnRTaXpl
OiAgICAgICAgICAgIHsgZm9udC5zZXRTaXplKHN0cik7IHJldHVybjsgfQotICAgICAgfQorfQor
Cit2b2lkIEhUTUxFbGVtZW50OjpkTGlzdFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
biwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAg
IEhUTUxETGlzdEVsZW1lbnRJbXBsJiBkTGlzdCA9ICpzdGF0aWNfY2FzdDxIVE1MRExpc3RFbGVt
ZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IERMaXN0Q29tcGFjdCkKKyAgICAg
ICAgZExpc3Quc2V0Q29tcGFjdCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOworfQorCit2b2lkIEhU
TUxFbGVtZW50OjpkaXJTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZh
bHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MRGlyZWN0
b3J5RWxlbWVudEltcGwmIGRpcmVjdG9yeSA9ICpzdGF0aWNfY2FzdDxIVE1MRGlyZWN0b3J5RWxl
bWVudEltcGwqPihpbXBsKCkpOworICAgIGlmICh0b2tlbiA9PSBEaXJlY3RvcnlDb21wYWN0KQor
ICAgICAgICBkaXJlY3Rvcnkuc2V0Q29tcGFjdCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOworfQor
Cit2b2lkIEhUTUxFbGVtZW50OjptZW51U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
LCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAg
SFRNTE1lbnVFbGVtZW50SW1wbCYgbWVudSA9ICpzdGF0aWNfY2FzdDxIVE1MTWVudUVsZW1lbnRJ
bXBsKj4oaW1wbCgpKTsKKyAgICBpZiAodG9rZW4gPT0gTWVudUNvbXBhY3QpCisgICAgICAgIG1l
bnUuc2V0Q29tcGFjdCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOworfQorCit2b2lkIEhUTUxFbGVt
ZW50OjpsaVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZh
bHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxMSUVsZW1lbnRJbXBs
JiBsaSA9ICpzdGF0aWNfY2FzdDxIVE1MTElFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dp
dGNoICh0b2tlbikgeworICAgICAgICBjYXNlIExJVHlwZTogICAgICAgICAgICB7IGxpLnNldFR5
cGUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgTElWYWx1ZTogICAgICAgICAgIHsgbGku
c2V0VmFsdWUodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQogICAgIH0KLSAgICBicmVh
azsKLSAgICBjYXNlIElEX0hSOiB7Ci0gICAgICBIVE1MSFJFbGVtZW50SW1wbCAmaHIgPSBzdGF0
aWNfY2FzdDxIVE1MSFJFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9r
ZW4pIHsKLSAgICAgIGNhc2UgSFJBbGlnbjogICAgICAgICAgIHsgaHIuc2V0QWxpZ24oc3RyKTsg
cmV0dXJuOyB9Ci0gICAgICBjYXNlIEhSTm9TaGFkZTogICAgICAgICB7IGhyLnNldE5vU2hhZGUo
dmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEhSU2l6ZTogICAg
ICAgICAgICB7IGhyLnNldFNpemUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEhSV2lkdGg6
ICAgICAgICAgICB7IGhyLnNldFdpZHRoKHN0cik7IHJldHVybjsgfQotICAgICAgfQorfQorCit2
b2lkIEhUTUxFbGVtZW50OjpkaXZTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNv
bnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1M
RGl2RWxlbWVudEltcGwmIGRpdiA9ICpzdGF0aWNfY2FzdDxIVE1MRGl2RWxlbWVudEltcGwqPihp
bXBsKCkpOworICAgIGlmICh0b2tlbiA9PSBEaXZBbGlnbikKKyAgICAgICAgZGl2LnNldEFsaWdu
KHN0cik7Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OnBhcmFncmFwaFNldHRlcihFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmlu
ZyYgc3RyKQoreworICAgIEhUTUxQYXJhZ3JhcGhFbGVtZW50SW1wbCYgcGFyYWdyYXBoID0gKnN0
YXRpY19jYXN0PEhUTUxQYXJhZ3JhcGhFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRv
a2VuID09IFBhcmFncmFwaEFsaWduKQorICAgICAgICBwYXJhZ3JhcGguc2V0QWxpZ24oc3RyKTsK
K30KKwordm9pZCBIVE1MRWxlbWVudDo6aGVhZGluZ1NldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQor
eworICAgIEhUTUxIZWFkaW5nRWxlbWVudEltcGwmIGhlYWRpbmcgPSAqc3RhdGljX2Nhc3Q8SFRN
TEhlYWRpbmdFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IEhlYWRpbmdB
bGlnbikKKyAgICAgICAgaGVhZGluZy5zZXRBbGlnbihzdHIpOworfQorCit2b2lkIEhUTUxFbGVt
ZW50OjpibG9ja1F1b3RlU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBW
YWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTEJsb2Nr
cXVvdGVFbGVtZW50SW1wbCYgYmxvY2tRdW90ZSA9ICpzdGF0aWNfY2FzdDxIVE1MQmxvY2txdW90
ZUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBpZiAodG9rZW4gPT0gQmxvY2tRdW90ZUNpdGUp
CisgICAgICAgIGJsb2NrUXVvdGUuc2V0Q2l0ZShzdHIpOworfQorCit2b2lkIEhUTUxFbGVtZW50
OjpxdW90ZVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZh
bHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxRdW90ZUVsZW1lbnRJ
bXBsJiBxdW90ZSA9ICpzdGF0aWNfY2FzdDxIVE1MUXVvdGVFbGVtZW50SW1wbCo+KGltcGwoKSk7
CisgICAgaWYgKHRva2VuID09IFF1b3RlQ2l0ZSkKKyAgICAgICAgcXVvdGUuc2V0Q2l0ZShzdHIp
OworfQorCit2b2lkIEhUTUxFbGVtZW50OjpwcmVTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sK
KyAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yICd3cmFwJyB3aGVuIHdoaXRlLXNwYWNlOiBw
cmUtd3JhcCBpcyBpbXBsZW1lbnRlZC4KKyAgICBIVE1MUHJlRWxlbWVudEltcGwmIHByZSA9ICpz
dGF0aWNfY2FzdDxIVE1MUHJlRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIGlmICh0b2tlbiA9
PSBQcmVXaWR0aCkKKyAgICAgICAgcHJlLnNldFdpZHRoKHZhbHVlLnRvSW50MzIoZXhlYykpOwor
fQorCit2b2lkIEhUTUxFbGVtZW50OjpiclNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
biwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAg
IEhUTUxCUkVsZW1lbnRJbXBsJiBiciA9ICpzdGF0aWNfY2FzdDxIVE1MQlJFbGVtZW50SW1wbCo+
KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IEJSQ2xlYXIpCisgICAgICAgIGJyLnNldENsZWFy
KHN0cik7Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OmJhc2VGb250U2V0dGVyKEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5n
JiBzdHIpCit7CisgICAgSFRNTEJhc2VGb250RWxlbWVudEltcGwmIGJhc2VGb250ID0gKnN0YXRp
Y19jYXN0PEhUTUxCYXNlRm9udEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRv
a2VuKSB7CisgICAgICAgIGNhc2UgQmFzZUZvbnRDb2xvcjogICAgICAgICAgIHsgYmFzZUZvbnQu
c2V0Q29sb3Ioc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQmFzZUZvbnRGYWNlOiAgICAg
ICAgICAgIHsgYmFzZUZvbnQuc2V0RmFjZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBC
YXNlRm9udFNpemU6ICAgICAgICAgICAgeyBiYXNlRm9udC5zZXRTaXplKHN0cik7IHJldHVybjsg
fQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0lOUzoKLSAgICBjYXNlIElEX0RFTDog
ewotICAgICAgSFRNTE1vZEVsZW1lbnRJbXBsICZtb2QgPSBzdGF0aWNfY2FzdDxIVE1MTW9kRWxl
bWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNl
IE1vZENpdGU6ICAgICAgICAgICAgeyBtb2Quc2V0Q2l0ZShzdHIpOyByZXR1cm47IH0KLSAgICAg
IGNhc2UgTW9kRGF0ZVRpbWU6ICAgICAgICB7IG1vZC5zZXREYXRlVGltZShzdHIpOyByZXR1cm47
IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6Zm9udFNldHRlcihFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmlu
ZyYgc3RyKQoreworICAgIEhUTUxGb250RWxlbWVudEltcGwmIGZvbnQgPSAqc3RhdGljX2Nhc3Q8
SFRNTEZvbnRFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAg
ICAgICBjYXNlIEZvbnRDb2xvcjogICAgICAgICAgIHsgZm9udC5zZXRDb2xvcihzdHIpOyByZXR1
cm47IH0KKyAgICAgICAgY2FzZSBGb250RmFjZTogICAgICAgICAgICB7IGZvbnQuc2V0RmFjZShz
dHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBGb250U2l6ZTogICAgICAgICAgICB7IGZvbnQu
c2V0U2l6ZShzdHIpOyByZXR1cm47IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9B
OiB7Ci0gICAgICBIVE1MQW5jaG9yRWxlbWVudEltcGwgJmFuY2hvciA9IHN0YXRpY19jYXN0PEhU
TUxBbmNob3JFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsK
LSAgICAgIGNhc2UgQW5jaG9yQWNjZXNzS2V5OiAgICAgICB7IGFuY2hvci5zZXRBY2Nlc3NLZXko
c3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEFuY2hvckNoYXJzZXQ6ICAgICAgICAgeyBhbmNo
b3Iuc2V0Q2hhcnNldChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQW5jaG9yQ29vcmRzOiAg
ICAgICAgICB7IGFuY2hvci5zZXRDb29yZHMoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEFu
Y2hvckhyZWY6ICAgICAgICAgICAgeyBhbmNob3Iuc2V0SHJlZihzdHIpOyByZXR1cm47IH0KLSAg
ICAgIGNhc2UgQW5jaG9ySHJlZkxhbmc6ICAgICAgICB7IGFuY2hvci5zZXRIcmVmbGFuZyhzdHIp
OyByZXR1cm47IH0KLSAgICAgIGNhc2UgQW5jaG9yTmFtZTogICAgICAgICAgICB7IGFuY2hvci5z
ZXROYW1lKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBBbmNob3JSZWw6ICAgICAgICAgICAg
IHsgYW5jaG9yLnNldFJlbChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQW5jaG9yUmV2OiAg
ICAgICAgICAgICB7IGFuY2hvci5zZXRSZXYoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEFu
Y2hvclNoYXBlOiAgICAgICAgICAgeyBhbmNob3Iuc2V0U2hhcGUoc3RyKTsgcmV0dXJuOyB9Ci0g
ICAgICBjYXNlIEFuY2hvclRhYkluZGV4OiAgICAgICAgeyBhbmNob3Iuc2V0VGFiSW5kZXgodmFs
dWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBBbmNob3JUYXJnZXQ6ICAg
ICAgICAgIHsgYW5jaG9yLnNldFRhcmdldChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQW5j
aG9yVHlwZTogICAgICAgICAgICB7IGFuY2hvci5zZXRUeXBlKHN0cik7IHJldHVybjsgfQotICAg
ICAgfQorfQorCit2b2lkIEhUTUxFbGVtZW50OjpoclNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQor
eworICAgIEhUTUxIUkVsZW1lbnRJbXBsJiBociA9ICpzdGF0aWNfY2FzdDxIVE1MSFJFbGVtZW50
SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNlIEhSQWxp
Z246ICAgICAgICAgICB7IGhyLnNldEFsaWduKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNl
IEhSTm9TaGFkZTogICAgICAgICB7IGhyLnNldE5vU2hhZGUodmFsdWUudG9Cb29sZWFuKGV4ZWMp
KTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgSFJTaXplOiAgICAgICAgICAgIHsgaHIuc2V0U2l6
ZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBIUldpZHRoOiAgICAgICAgICAgeyBoci5z
ZXRXaWR0aChzdHIpOyByZXR1cm47IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9J
TUc6IHsKLSAgICAgIEhUTUxJbWFnZUVsZW1lbnRJbXBsICZpbWFnZSA9IHN0YXRpY19jYXN0PEhU
TUxJbWFnZUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewot
ICAgICAgY2FzZSBJbWFnZU5hbWU6ICAgICAgICAgICAgeyBpbWFnZS5zZXROYW1lKHN0cik7IHJl
dHVybjsgfQotICAgICAgY2FzZSBJbWFnZUFsaWduOiAgICAgICAgICAgeyBpbWFnZS5zZXRBbGln
bihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSW1hZ2VBbHQ6ICAgICAgICAgICAgIHsgaW1h
Z2Uuc2V0QWx0KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBJbWFnZUJvcmRlcjogICAgICAg
ICAgeyBpbWFnZS5zZXRCb3JkZXIodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQotICAg
ICAgY2FzZSBJbWFnZUhlaWdodDogICAgICAgICAgeyBpbWFnZS5zZXRIZWlnaHQodmFsdWUudG9J
bnQzMihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBJbWFnZUhzcGFjZTogICAgICAgICAg
eyBpbWFnZS5zZXRIc3BhY2UodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQotICAgICAg
Y2FzZSBJbWFnZUlzTWFwOiAgICAgICAgICAgeyBpbWFnZS5zZXRJc01hcCh2YWx1ZS50b0Jvb2xl
YW4oZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSW1hZ2VMb25nRGVzYzogICAgICAgIHsg
aW1hZ2Uuc2V0TG9uZ0Rlc2Moc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEltYWdlU3JjOiAg
ICAgICAgICAgICB7IGltYWdlLnNldFNyYyhzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSW1h
Z2VVc2VNYXA6ICAgICAgICAgIHsgaW1hZ2Uuc2V0VXNlTWFwKHN0cik7IHJldHVybjsgfQotICAg
ICAgY2FzZSBJbWFnZVZzcGFjZTogICAgICAgICAgeyBpbWFnZS5zZXRWc3BhY2UodmFsdWUudG9J
bnQzMihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBJbWFnZVdpZHRoOiAgICAgICAgICAg
eyBpbWFnZS5zZXRXaWR0aCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICB9
Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6Om1vZFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQorewor
ICAgIEhUTUxNb2RFbGVtZW50SW1wbCYgbW9kID0gKnN0YXRpY19jYXN0PEhUTUxNb2RFbGVtZW50
SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNlIE1vZENp
dGU6ICAgICAgICAgICAgeyBtb2Quc2V0Q2l0ZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2Fz
ZSBNb2REYXRlVGltZTogICAgICAgIHsgbW9kLnNldERhdGVUaW1lKHN0cik7IHJldHVybjsgfQog
ICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX09CSkVDVDogewotICAgICAgSFRNTE9iamVj
dEVsZW1lbnRJbXBsICZvYmplY3QgPSBzdGF0aWNfY2FzdDxIVE1MT2JqZWN0RWxlbWVudEltcGwg
Jj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICAvLyByZWFkLW9ubHk6
IGZvcm0KLSAgICAgIGNhc2UgT2JqZWN0Q29kZTogICAgICAgICAgICAgICAgIHsgb2JqZWN0LnNl
dENvZGUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIE9iamVjdEFsaWduOiAgICAgICAgICAg
eyBvYmplY3Quc2V0QWxpZ24oc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIE9iamVjdEFyY2hp
dmU6ICAgICAgICAgeyBvYmplY3Quc2V0QXJjaGl2ZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNh
c2UgT2JqZWN0Qm9yZGVyOiAgICAgICAgICB7IG9iamVjdC5zZXRCb3JkZXIoc3RyKTsgcmV0dXJu
OyB9Ci0gICAgICBjYXNlIE9iamVjdENvZGVCYXNlOiAgICAgICAgeyBvYmplY3Quc2V0Q29kZUJh
c2Uoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIE9iamVjdENvZGVUeXBlOiAgICAgICAgeyBv
YmplY3Quc2V0Q29kZVR5cGUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICAvLyByZWFkLW9ubHk6IE9i
amVjdENvbnRlbnREb2N1bWVudAotICAgICAgY2FzZSBPYmplY3REYXRhOiAgICAgICAgICAgIHsg
b2JqZWN0LnNldERhdGEoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIE9iamVjdERlY2xhcmU6
ICAgICAgICAgeyBvYmplY3Quc2V0RGVjbGFyZSh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1
cm47IH0KLSAgICAgIGNhc2UgT2JqZWN0SGVpZ2h0OiAgICAgICAgICB7IG9iamVjdC5zZXRIZWln
aHQoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIE9iamVjdEhzcGFjZTogICAgICAgICAgeyBv
YmplY3Quc2V0SHNwYWNlKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBPYmplY3ROYW1lOiAg
ICAgICAgICAgIHsgb2JqZWN0LnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIE9i
amVjdFN0YW5kYnk6ICAgICAgICAgeyBvYmplY3Quc2V0U3RhbmRieShzdHIpOyByZXR1cm47IH0K
LSAgICAgIGNhc2UgT2JqZWN0VGFiSW5kZXg6ICAgICAgICB7IG9iamVjdC5zZXRUYWJJbmRleCh2
YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIE9iamVjdFR5cGU6ICAg
ICAgICAgICAgeyBvYmplY3Quc2V0VHlwZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgT2Jq
ZWN0VXNlTWFwOiAgICAgICAgICB7IG9iamVjdC5zZXRVc2VNYXAoc3RyKTsgcmV0dXJuOyB9Ci0g
ICAgICBjYXNlIE9iamVjdFZzcGFjZTogICAgICAgICAgeyBvYmplY3Quc2V0VnNwYWNlKHN0cik7
IHJldHVybjsgfQotICAgICAgY2FzZSBPYmplY3RXaWR0aDogICAgICAgICAgIHsgb2JqZWN0LnNl
dFdpZHRoKHN0cik7IHJldHVybjsgfQotICAgICAgfQorfQorCit2b2lkIEhUTUxFbGVtZW50Ojph
bmNob3JTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1
ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MQW5jaG9yRWxlbWVudElt
cGwmIGFuY2hvciA9ICpzdGF0aWNfY2FzdDxIVE1MQW5jaG9yRWxlbWVudEltcGwqPihpbXBsKCkp
OworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBBbmNob3JBY2Nlc3NLZXk6ICAg
ICAgIHsgYW5jaG9yLnNldEFjY2Vzc0tleShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBB
bmNob3JDaGFyc2V0OiAgICAgICAgIHsgYW5jaG9yLnNldENoYXJzZXQoc3RyKTsgcmV0dXJuOyB9
CisgICAgICAgIGNhc2UgQW5jaG9yQ29vcmRzOiAgICAgICAgICB7IGFuY2hvci5zZXRDb29yZHMo
c3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQW5jaG9ySHJlZjogICAgICAgICAgICB7IGFu
Y2hvci5zZXRIcmVmKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEFuY2hvckhyZWZMYW5n
OiAgICAgICAgeyBhbmNob3Iuc2V0SHJlZmxhbmcoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNh
c2UgQW5jaG9yTmFtZTogICAgICAgICAgICB7IGFuY2hvci5zZXROYW1lKHN0cik7IHJldHVybjsg
fQorICAgICAgICBjYXNlIEFuY2hvclJlbDogICAgICAgICAgICAgeyBhbmNob3Iuc2V0UmVsKHN0
cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEFuY2hvclJldjogICAgICAgICAgICAgeyBhbmNo
b3Iuc2V0UmV2KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEFuY2hvclNoYXBlOiAgICAg
ICAgICAgeyBhbmNob3Iuc2V0U2hhcGUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQW5j
aG9yVGFiSW5kZXg6ICAgICAgICB7IGFuY2hvci5zZXRUYWJJbmRleCh2YWx1ZS50b0ludDMyKGV4
ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQW5jaG9yVGFyZ2V0OiAgICAgICAgICB7IGFu
Y2hvci5zZXRUYXJnZXQoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQW5jaG9yVHlwZTog
ICAgICAgICAgICB7IGFuY2hvci5zZXRUeXBlKHN0cik7IHJldHVybjsgfQogICAgIH0KLSAgICBi
cmVhazsKLSAgICBjYXNlIElEX1BBUkFNOiB7Ci0gICAgICBIVE1MUGFyYW1FbGVtZW50SW1wbCAm
cGFyYW0gPSBzdGF0aWNfY2FzdDxIVE1MUGFyYW1FbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAg
ICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgUGFyYW1OYW1lOiAgICAgICAgICAgIHsg
cGFyYW0uc2V0TmFtZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgUGFyYW1UeXBlOiAgICAg
ICAgICAgIHsgcGFyYW0uc2V0VHlwZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgUGFyYW1W
YWx1ZTogICAgICAgICAgIHsgcGFyYW0uc2V0VmFsdWUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBj
YXNlIFBhcmFtVmFsdWVUeXBlOiAgICAgICB7IHBhcmFtLnNldFZhbHVlVHlwZShzdHIpOyByZXR1
cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6aW1hZ2VTZXR0ZXIoRXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01T
dHJpbmcmIHN0cikKK3sKKyAgICBIVE1MSW1hZ2VFbGVtZW50SW1wbCYgaW1hZ2UgPSAqc3RhdGlj
X2Nhc3Q8SFRNTEltYWdlRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4p
IHsKKyAgICAgICAgY2FzZSBJbWFnZU5hbWU6ICAgICAgICAgICAgeyBpbWFnZS5zZXROYW1lKHN0
cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEltYWdlQWxpZ246ICAgICAgICAgICB7IGltYWdl
LnNldEFsaWduKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEltYWdlQWx0OiAgICAgICAg
ICAgICB7IGltYWdlLnNldEFsdChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJbWFnZUJv
cmRlcjogICAgICAgICAgeyBpbWFnZS5zZXRCb3JkZXIodmFsdWUudG9JbnQzMihleGVjKSk7IHJl
dHVybjsgfQorICAgICAgICBjYXNlIEltYWdlSGVpZ2h0OiAgICAgICAgICB7IGltYWdlLnNldEhl
aWdodCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgSW1hZ2VI
c3BhY2U6ICAgICAgICAgIHsgaW1hZ2Uuc2V0SHNwYWNlKHZhbHVlLnRvSW50MzIoZXhlYykpOyBy
ZXR1cm47IH0KKyAgICAgICAgY2FzZSBJbWFnZUlzTWFwOiAgICAgICAgICAgeyBpbWFnZS5zZXRJ
c01hcCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJbWFn
ZUxvbmdEZXNjOiAgICAgICAgeyBpbWFnZS5zZXRMb25nRGVzYyhzdHIpOyByZXR1cm47IH0KKyAg
ICAgICAgY2FzZSBJbWFnZVNyYzogICAgICAgICAgICAgeyBpbWFnZS5zZXRTcmMoc3RyKTsgcmV0
dXJuOyB9CisgICAgICAgIGNhc2UgSW1hZ2VVc2VNYXA6ICAgICAgICAgIHsgaW1hZ2Uuc2V0VXNl
TWFwKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEltYWdlVnNwYWNlOiAgICAgICAgICB7
IGltYWdlLnNldFZzcGFjZSh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAg
IGNhc2UgSW1hZ2VXaWR0aDogICAgICAgICAgIHsgaW1hZ2Uuc2V0V2lkdGgodmFsdWUudG9JbnQz
MihleGVjKSk7IHJldHVybjsgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0FQUExF
VDogewotICAgICAgSFRNTEFwcGxldEVsZW1lbnRJbXBsICZhcHBsZXQgPSBzdGF0aWNfY2FzdDxI
VE1MQXBwbGV0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7
Ci0gICAgICBjYXNlIEFwcGxldEFsaWduOiAgICAgICAgICAgeyBhcHBsZXQuc2V0QWxpZ24oc3Ry
KTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEFwcGxldEFsdDogICAgICAgICAgICAgeyBhcHBsZXQu
c2V0QWx0KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBBcHBsZXRBcmNoaXZlOiAgICAgICAg
IHsgYXBwbGV0LnNldEFyY2hpdmUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEFwcGxldENv
ZGU6ICAgICAgICAgICAgeyBhcHBsZXQuc2V0Q29kZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNh
c2UgQXBwbGV0Q29kZUJhc2U6ICAgICAgICB7IGFwcGxldC5zZXRDb2RlQmFzZShzdHIpOyByZXR1
cm47IH0KLSAgICAgIGNhc2UgQXBwbGV0SGVpZ2h0OiAgICAgICAgICB7IGFwcGxldC5zZXRIZWln
aHQoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEFwcGxldEhzcGFjZTogICAgICAgICAgeyBh
cHBsZXQuc2V0SHNwYWNlKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBBcHBsZXROYW1lOiAg
ICAgICAgICAgIHsgYXBwbGV0LnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEFw
cGxldE9iamVjdDogICAgICAgICAgeyBhcHBsZXQuc2V0T2JqZWN0KHN0cik7IHJldHVybjsgfQot
ICAgICAgY2FzZSBBcHBsZXRWc3BhY2U6ICAgICAgICAgIHsgYXBwbGV0LnNldFZzcGFjZShzdHIp
OyByZXR1cm47IH0KLSAgICAgIGNhc2UgQXBwbGV0V2lkdGg6ICAgICAgICAgICB7IGFwcGxldC5z
ZXRXaWR0aChzdHIpOyByZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6
b2JqZWN0U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFs
dWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTE9iamVjdEVsZW1lbnRJ
bXBsJiBvYmplY3QgPSAqc3RhdGljX2Nhc3Q8SFRNTE9iamVjdEVsZW1lbnRJbXBsKj4oaW1wbCgp
KTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIC8vIHJlYWQtb25seTogZm9ybQorICAg
ICAgICBjYXNlIE9iamVjdENvZGU6ICAgICAgICAgICAgeyBvYmplY3Quc2V0Q29kZShzdHIpOyBy
ZXR1cm47IH0KKyAgICAgICAgY2FzZSBPYmplY3RBbGlnbjogICAgICAgICAgIHsgb2JqZWN0LnNl
dEFsaWduKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIE9iamVjdEFyY2hpdmU6ICAgICAg
ICAgeyBvYmplY3Quc2V0QXJjaGl2ZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBPYmpl
Y3RCb3JkZXI6ICAgICAgICAgIHsgb2JqZWN0LnNldEJvcmRlcihzdHIpOyByZXR1cm47IH0KKyAg
ICAgICAgY2FzZSBPYmplY3RDb2RlQmFzZTogICAgICAgIHsgb2JqZWN0LnNldENvZGVCYXNlKHN0
cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIE9iamVjdENvZGVUeXBlOiAgICAgICAgeyBvYmpl
Y3Quc2V0Q29kZVR5cGUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIC8vIHJlYWQtb25seTogT2Jq
ZWN0Q29udGVudERvY3VtZW50CisgICAgICAgIGNhc2UgT2JqZWN0RGF0YTogICAgICAgICAgICB7
IG9iamVjdC5zZXREYXRhKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIE9iamVjdERlY2xh
cmU6ICAgICAgICAgeyBvYmplY3Quc2V0RGVjbGFyZSh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyBy
ZXR1cm47IH0KKyAgICAgICAgY2FzZSBPYmplY3RIZWlnaHQ6ICAgICAgICAgIHsgb2JqZWN0LnNl
dEhlaWdodChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBPYmplY3RIc3BhY2U6ICAgICAg
ICAgIHsgb2JqZWN0LnNldEhzcGFjZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBPYmpl
Y3ROYW1lOiAgICAgICAgICAgIHsgb2JqZWN0LnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9CisgICAg
ICAgIGNhc2UgT2JqZWN0U3RhbmRieTogICAgICAgICB7IG9iamVjdC5zZXRTdGFuZGJ5KHN0cik7
IHJldHVybjsgfQorICAgICAgICBjYXNlIE9iamVjdFRhYkluZGV4OiAgICAgICAgeyBvYmplY3Qu
c2V0VGFiSW5kZXgodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNl
IE9iamVjdFR5cGU6ICAgICAgICAgICAgeyBvYmplY3Quc2V0VHlwZShzdHIpOyByZXR1cm47IH0K
KyAgICAgICAgY2FzZSBPYmplY3RVc2VNYXA6ICAgICAgICAgIHsgb2JqZWN0LnNldFVzZU1hcChz
dHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBPYmplY3RWc3BhY2U6ICAgICAgICAgIHsgb2Jq
ZWN0LnNldFZzcGFjZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBPYmplY3RXaWR0aDog
ICAgICAgICAgIHsgb2JqZWN0LnNldFdpZHRoKHN0cik7IHJldHVybjsgfQogICAgIH0KLSAgICBi
cmVhazsKLSAgICBjYXNlIElEX01BUDogewotICAgICAgSFRNTE1hcEVsZW1lbnRJbXBsICZtYXAg
PSBzdGF0aWNfY2FzdDxIVE1MTWFwRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0
Y2ggKHRva2VuKSB7Ci0gICAgICAvLyByZWFkLW9ubHk6IGFyZWFzCi0gICAgICBjYXNlIE1hcE5h
bWU6ICAgICAgICAgICAgICAgICB7IG1hcC5zZXROYW1lKHN0cik7IHJldHVybjsgfQotICAgICB9
Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OnBhcmFtU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7
CisgICAgSFRNTFBhcmFtRWxlbWVudEltcGwmIHBhcmFtID0gKnN0YXRpY19jYXN0PEhUTUxQYXJh
bUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNh
c2UgUGFyYW1OYW1lOiAgICAgICAgICAgIHsgcGFyYW0uc2V0TmFtZShzdHIpOyByZXR1cm47IH0K
KyAgICAgICAgY2FzZSBQYXJhbVR5cGU6ICAgICAgICAgICAgeyBwYXJhbS5zZXRUeXBlKHN0cik7
IHJldHVybjsgfQorICAgICAgICBjYXNlIFBhcmFtVmFsdWU6ICAgICAgICAgICB7IHBhcmFtLnNl
dFZhbHVlKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFBhcmFtVmFsdWVUeXBlOiAgICAg
ICB7IHBhcmFtLnNldFZhbHVlVHlwZShzdHIpOyByZXR1cm47IH0KICAgICB9Ci0gICAgYnJlYWs7
Ci0gICAgY2FzZSBJRF9BUkVBOiB7Ci0gICAgICBIVE1MQXJlYUVsZW1lbnRJbXBsICZhcmVhID0g
c3RhdGljX2Nhc3Q8SFRNTEFyZWFFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRj
aCAodG9rZW4pIHsKLSAgICAgIGNhc2UgQXJlYUFjY2Vzc0tleTogICAgICAgeyBhcmVhLnNldEFj
Y2Vzc0tleShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQXJlYUFsdDogICAgICAgICAgICAg
eyBhcmVhLnNldEFsdChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQXJlYUNvb3JkczogICAg
ICAgICAgeyBhcmVhLnNldENvb3JkcyhzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQXJlYUhy
ZWY6ICAgICAgICAgICAgeyBhcmVhLnNldEhyZWYoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNl
IEFyZWFOb0hyZWY6ICAgICAgICAgIHsgYXJlYS5zZXROb0hyZWYodmFsdWUudG9Cb29sZWFuKGV4
ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEFyZWFTaGFwZTogICAgICAgICAgIHsgYXJlYS5z
ZXRTaGFwZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQXJlYVRhYkluZGV4OiAgICAgICAg
eyBhcmVhLnNldFRhYkluZGV4KHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KLSAgICAg
IGNhc2UgQXJlYVRhcmdldDogICAgICAgICAgeyBhcmVhLnNldFRhcmdldChzdHIpOyByZXR1cm47
IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6YXBwbGV0U2V0dGVyKEV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3Ry
aW5nJiBzdHIpCit7CisgICAgSFRNTEFwcGxldEVsZW1lbnRJbXBsJiBhcHBsZXQgPSAqc3RhdGlj
X2Nhc3Q8SFRNTEFwcGxldEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2Vu
KSB7CisgICAgICAgIGNhc2UgQXBwbGV0QWxpZ246ICAgICAgICAgICB7IGFwcGxldC5zZXRBbGln
bihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBBcHBsZXRBbHQ6ICAgICAgICAgICAgIHsg
YXBwbGV0LnNldEFsdChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBBcHBsZXRBcmNoaXZl
OiAgICAgICAgIHsgYXBwbGV0LnNldEFyY2hpdmUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNh
c2UgQXBwbGV0Q29kZTogICAgICAgICAgICB7IGFwcGxldC5zZXRDb2RlKHN0cik7IHJldHVybjsg
fQorICAgICAgICBjYXNlIEFwcGxldENvZGVCYXNlOiAgICAgICAgeyBhcHBsZXQuc2V0Q29kZUJh
c2Uoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQXBwbGV0SGVpZ2h0OiAgICAgICAgICB7
IGFwcGxldC5zZXRIZWlnaHQoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQXBwbGV0SHNw
YWNlOiAgICAgICAgICB7IGFwcGxldC5zZXRIc3BhY2Uoc3RyKTsgcmV0dXJuOyB9CisgICAgICAg
IGNhc2UgQXBwbGV0TmFtZTogICAgICAgICAgICB7IGFwcGxldC5zZXROYW1lKHN0cik7IHJldHVy
bjsgfQorICAgICAgICBjYXNlIEFwcGxldE9iamVjdDogICAgICAgICAgeyBhcHBsZXQuc2V0T2Jq
ZWN0KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEFwcGxldFZzcGFjZTogICAgICAgICAg
eyBhcHBsZXQuc2V0VnNwYWNlKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEFwcGxldFdp
ZHRoOiAgICAgICAgICAgeyBhcHBsZXQuc2V0V2lkdGgoc3RyKTsgcmV0dXJuOyB9CiAgICAgfQot
ICAgIGJyZWFrOwotICAgIGNhc2UgSURfU0NSSVBUOiB7Ci0gICAgICBIVE1MU2NyaXB0RWxlbWVu
dEltcGwgJnNjcmlwdCA9IHN0YXRpY19jYXN0PEhUTUxTY3JpcHRFbGVtZW50SW1wbCAmPihlbGVt
ZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgU2NyaXB0VGV4dDogICAg
ICAgICAgICB7IHNjcmlwdC5zZXRUZXh0KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBTY3Jp
cHRIdG1sRm9yOiAgICAgICAgIHsgc2NyaXB0LnNldEh0bWxGb3Ioc3RyKTsgcmV0dXJuOyB9Ci0g
ICAgICBjYXNlIFNjcmlwdEV2ZW50OiAgICAgICAgICAgeyBzY3JpcHQuc2V0RXZlbnQoc3RyKTsg
cmV0dXJuOyB9Ci0gICAgICBjYXNlIFNjcmlwdENoYXJzZXQ6ICAgICAgICAgeyBzY3JpcHQuc2V0
Q2hhcnNldChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgU2NyaXB0RGVmZXI6ICAgICAgICAg
ICB7IHNjcmlwdC5zZXREZWZlcih2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KLSAg
ICAgIGNhc2UgU2NyaXB0U3JjOiAgICAgICAgICAgICB7IHNjcmlwdC5zZXRTcmMoc3RyKTsgcmV0
dXJuOyB9Ci0gICAgICBjYXNlIFNjcmlwdFR5cGU6ICAgICAgICAgICAgeyBzY3JpcHQuc2V0VHlw
ZShzdHIpOyByZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6bWFwU2V0
dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0
IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTE1hcEVsZW1lbnRJbXBsJiBtYXAgPSAq
c3RhdGljX2Nhc3Q8SFRNTE1hcEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBpZiAodG9rZW4g
PT0gTWFwTmFtZSkKKyAgICAgICAgLy8gcmVhZC1vbmx5OiBhcmVhcworICAgICAgICBtYXAuc2V0
TmFtZShzdHIpOworfQorCit2b2lkIEhUTUxFbGVtZW50OjphcmVhU2V0dGVyKEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5n
JiBzdHIpCit7CisgICAgSFRNTEFyZWFFbGVtZW50SW1wbCYgYXJlYSA9ICpzdGF0aWNfY2FzdDxI
VE1MQXJlYUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAg
ICAgIGNhc2UgQXJlYUFjY2Vzc0tleTogICAgICAgeyBhcmVhLnNldEFjY2Vzc0tleShzdHIpOyBy
ZXR1cm47IH0KKyAgICAgICAgY2FzZSBBcmVhQWx0OiAgICAgICAgICAgICB7IGFyZWEuc2V0QWx0
KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEFyZWFDb29yZHM6ICAgICAgICAgIHsgYXJl
YS5zZXRDb29yZHMoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQXJlYUhyZWY6ICAgICAg
ICAgICAgeyBhcmVhLnNldEhyZWYoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQXJlYU5v
SHJlZjogICAgICAgICAgeyBhcmVhLnNldE5vSHJlZih2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyBy
ZXR1cm47IH0KKyAgICAgICAgY2FzZSBBcmVhU2hhcGU6ICAgICAgICAgICB7IGFyZWEuc2V0U2hh
cGUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQXJlYVRhYkluZGV4OiAgICAgICAgeyBh
cmVhLnNldFRhYkluZGV4KHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAg
Y2FzZSBBcmVhVGFyZ2V0OiAgICAgICAgICB7IGFyZWEuc2V0VGFyZ2V0KHN0cik7IHJldHVybjsg
fQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX1RBQkxFOiB7Ci0gICAgICBIVE1MVGFi
bGVFbGVtZW50SW1wbCAmdGFibGUgPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVFbGVtZW50SW1wbCAm
PihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgVGFibGVDYXB0
aW9uOiAgICAgICAgIHsgdGFibGUuc2V0Q2FwdGlvbih0b0hUTUxUYWJsZUNhcHRpb25FbGVtZW50
KHZhbHVlKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJsZVRIZWFkOiAgICAgICAgICAgeyB0
YWJsZS5zZXRUSGVhZCh0b0hUTUxUYWJsZVNlY3Rpb25FbGVtZW50KHZhbHVlKSk7IHJldHVybjsg
fQotICAgICAgY2FzZSBUYWJsZVRGb290OiAgICAgICAgICAgeyB0YWJsZS5zZXRURm9vdCh0b0hU
TUxUYWJsZVNlY3Rpb25FbGVtZW50KHZhbHVlKSk7IHJldHVybjsgfQotICAgICAgLy8gcmVhZC1v
bmx5OiByb3dzCi0gICAgICAvLyByZWFkLW9ubHk6IHRib2RpZXMKLSAgICAgIGNhc2UgVGFibGVB
bGlnbjogICAgICAgICAgIHsgdGFibGUuc2V0QWxpZ24oc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBj
YXNlIFRhYmxlQmdDb2xvcjogICAgICAgICB7IHRhYmxlLnNldEJnQ29sb3Ioc3RyKTsgcmV0dXJu
OyB9Ci0gICAgICBjYXNlIFRhYmxlQm9yZGVyOiAgICAgICAgICB7IHRhYmxlLnNldEJvcmRlcihz
dHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVDZWxsUGFkZGluZzogICAgIHsgdGFibGUu
c2V0Q2VsbFBhZGRpbmcoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlQ2VsbFNwYWNp
bmc6ICAgICB7IHRhYmxlLnNldENlbGxTcGFjaW5nKHN0cik7IHJldHVybjsgfQotICAgICAgY2Fz
ZSBUYWJsZUZyYW1lOiAgICAgICAgICAgeyB0YWJsZS5zZXRGcmFtZShzdHIpOyByZXR1cm47IH0K
LSAgICAgIGNhc2UgVGFibGVSdWxlczogICAgICAgICAgIHsgdGFibGUuc2V0UnVsZXMoc3RyKTsg
cmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlU3VtbWFyeTogICAgICAgICB7IHRhYmxlLnNldFN1
bW1hcnkoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlV2lkdGg6ICAgICAgICAgICB7
IHRhYmxlLnNldFdpZHRoKHN0cik7IHJldHVybjsgfQotICAgICAgfQorfQorCit2b2lkIEhUTUxF
bGVtZW50OjpzY3JpcHRTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZh
bHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MU2NyaXB0
RWxlbWVudEltcGwmIHNjcmlwdCA9ICpzdGF0aWNfY2FzdDxIVE1MU2NyaXB0RWxlbWVudEltcGwq
PihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBTY3JpcHRUZXh0
OiAgICAgICAgICAgIHsgc2NyaXB0LnNldFRleHQoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNh
c2UgU2NyaXB0SHRtbEZvcjogICAgICAgICB7IHNjcmlwdC5zZXRIdG1sRm9yKHN0cik7IHJldHVy
bjsgfQorICAgICAgICBjYXNlIFNjcmlwdEV2ZW50OiAgICAgICAgICAgeyBzY3JpcHQuc2V0RXZl
bnQoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgU2NyaXB0Q2hhcnNldDogICAgICAgICB7
IHNjcmlwdC5zZXRDaGFyc2V0KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFNjcmlwdERl
ZmVyOiAgICAgICAgICAgeyBzY3JpcHQuc2V0RGVmZXIodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsg
cmV0dXJuOyB9CisgICAgICAgIGNhc2UgU2NyaXB0U3JjOiAgICAgICAgICAgICB7IHNjcmlwdC5z
ZXRTcmMoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgU2NyaXB0VHlwZTogICAgICAgICAg
ICB7IHNjcmlwdC5zZXRUeXBlKHN0cik7IHJldHVybjsgfQogICAgIH0KLSAgICBicmVhazsKLSAg
ICBjYXNlIElEX0NBUFRJT046IHsKLSAgICAgIEhUTUxUYWJsZUNhcHRpb25FbGVtZW50SW1wbCAm
dGFibGVDYXB0aW9uID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnRJbXBsICY+
KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgY2FzZSBUYWJsZUFsaWdu
OiAgICAgICAgICAgeyB0YWJsZUNhcHRpb24uc2V0QWxpZ24oc3RyKTsgcmV0dXJuOyB9Ci0gICAg
ICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OnRhYmxlU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIp
Cit7CisgICAgSFRNTFRhYmxlRWxlbWVudEltcGwmIHRhYmxlID0gKnN0YXRpY19jYXN0PEhUTUxU
YWJsZUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAg
IGNhc2UgVGFibGVDYXB0aW9uOiAgICAgICAgIHsgdGFibGUuc2V0Q2FwdGlvbih0b0hUTUxUYWJs
ZUNhcHRpb25FbGVtZW50KHZhbHVlKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxlVEhl
YWQ6ICAgICAgICAgICB7IHRhYmxlLnNldFRIZWFkKHRvSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQo
dmFsdWUpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGFibGVURm9vdDogICAgICAgICAgIHsg
dGFibGUuc2V0VEZvb3QodG9IVE1MVGFibGVTZWN0aW9uRWxlbWVudCh2YWx1ZSkpOyByZXR1cm47
IH0KKyAgICAgICAgLy8gcmVhZC1vbmx5OiByb3dzCisgICAgICAgIC8vIHJlYWQtb25seTogdGJv
ZGllcworICAgICAgICBjYXNlIFRhYmxlQWxpZ246ICAgICAgICAgICB7IHRhYmxlLnNldEFsaWdu
KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxlQmdDb2xvcjogICAgICAgICB7IHRh
YmxlLnNldEJnQ29sb3Ioc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGFibGVCb3JkZXI6
ICAgICAgICAgIHsgdGFibGUuc2V0Qm9yZGVyKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNl
IFRhYmxlQ2VsbFBhZGRpbmc6ICAgICB7IHRhYmxlLnNldENlbGxQYWRkaW5nKHN0cik7IHJldHVy
bjsgfQorICAgICAgICBjYXNlIFRhYmxlQ2VsbFNwYWNpbmc6ICAgICB7IHRhYmxlLnNldENlbGxT
cGFjaW5nKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxlRnJhbWU6ICAgICAgICAg
ICB7IHRhYmxlLnNldEZyYW1lKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxlUnVs
ZXM6ICAgICAgICAgICB7IHRhYmxlLnNldFJ1bGVzKHN0cik7IHJldHVybjsgfQorICAgICAgICBj
YXNlIFRhYmxlU3VtbWFyeTogICAgICAgICB7IHRhYmxlLnNldFN1bW1hcnkoc3RyKTsgcmV0dXJu
OyB9CisgICAgICAgIGNhc2UgVGFibGVXaWR0aDogICAgICAgICAgIHsgdGFibGUuc2V0V2lkdGgo
c3RyKTsgcmV0dXJuOyB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfQ09MOiB7Ci0g
ICAgICBIVE1MVGFibGVDb2xFbGVtZW50SW1wbCAmdGFibGVDb2wgPSBzdGF0aWNfY2FzdDxIVE1M
VGFibGVDb2xFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsK
LSAgICAgIGNhc2UgVGFibGVDb2xBbGlnbjogICAgICAgICAgIHsgdGFibGVDb2wuc2V0QWxpZ24o
c3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlQ29sQ2g6ICAgICAgICAgICAgICB7IHRh
YmxlQ29sLnNldENoKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJsZUNvbENoT2ZmOiAg
ICAgICAgICAgeyB0YWJsZUNvbC5zZXRDaE9mZihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2Ug
VGFibGVDb2xTcGFuOiAgICAgICAgICAgIHsgdGFibGVDb2wuc2V0U3Bhbih2YWx1ZS50b0ludDMy
KGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlQ29sVkFsaWduOiAgICAgICAgICB7
IHRhYmxlQ29sLnNldFZBbGlnbihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVDb2xX
aWR0aDogICAgICAgICAgIHsgdGFibGVDb2wuc2V0V2lkdGgoc3RyKTsgcmV0dXJuOyB9Ci0gICAg
ICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OnRhYmxlQ2FwdGlvblNldHRlcihFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmlu
ZyYgc3RyKQoreworICAgIEhUTUxUYWJsZUNhcHRpb25FbGVtZW50SW1wbCYgdGFibGVDYXB0aW9u
ID0gKnN0YXRpY19jYXN0PEhUTUxUYWJsZUNhcHRpb25FbGVtZW50SW1wbCo+KGltcGwoKSk7Cisg
ICAgaWYgKHRva2VuID09IFRhYmxlQ2FwdGlvbkFsaWduKQorICAgICAgICB0YWJsZUNhcHRpb24u
c2V0QWxpZ24oc3RyKTsKK30KKwordm9pZCBIVE1MRWxlbWVudDo6dGFibGVDb2xTZXR0ZXIoRXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpE
T01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MVGFibGVDb2xFbGVtZW50SW1wbCYgdGFibGVDb2wg
PSAqc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ29sRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3
aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBUYWJsZUNvbEFsaWduOiAgICAgICAgICAgeyB0
YWJsZUNvbC5zZXRBbGlnbihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZUNvbENo
OiAgICAgICAgICAgICAgeyB0YWJsZUNvbC5zZXRDaChzdHIpOyByZXR1cm47IH0KKyAgICAgICAg
Y2FzZSBUYWJsZUNvbENoT2ZmOiAgICAgICAgICAgeyB0YWJsZUNvbC5zZXRDaE9mZihzdHIpOyBy
ZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZUNvbFNwYW46ICAgICAgICAgICAgeyB0YWJsZUNv
bC5zZXRTcGFuKHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBU
YWJsZUNvbFZBbGlnbjogICAgICAgICAgeyB0YWJsZUNvbC5zZXRWQWxpZ24oc3RyKTsgcmV0dXJu
OyB9CisgICAgICAgIGNhc2UgVGFibGVDb2xXaWR0aDogICAgICAgICAgIHsgdGFibGVDb2wuc2V0
V2lkdGgoc3RyKTsgcmV0dXJuOyB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfVEhF
QUQ6Ci0gICAgY2FzZSBJRF9UQk9EWToKLSAgICBjYXNlIElEX1RGT09UOiB7Ci0gICAgICBIVE1M
VGFibGVTZWN0aW9uRWxlbWVudEltcGwgJnRhYmxlU2VjdGlvbiA9IHN0YXRpY19jYXN0PEhUTUxU
YWJsZVNlY3Rpb25FbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4p
IHsKLSAgICAgIGNhc2UgVGFibGVTZWN0aW9uQWxpZ246ICAgICAgICAgICB7IHRhYmxlU2VjdGlv
bi5zZXRBbGlnbihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVTZWN0aW9uQ2g6ICAg
ICAgICAgICAgICB7IHRhYmxlU2VjdGlvbi5zZXRDaChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNh
c2UgVGFibGVTZWN0aW9uQ2hPZmY6ICAgICAgICAgICB7IHRhYmxlU2VjdGlvbi5zZXRDaE9mZihz
dHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVTZWN0aW9uVkFsaWduOiAgICAgICAgICB7
IHRhYmxlU2VjdGlvbi5zZXRWQWxpZ24oc3RyKTsgcmV0dXJuOyB9Ci0gICAgICAvLyByZWFkLW9u
bHk6IHJvd3MKLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6dGFibGVTZWN0aW9uU2V0
dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0
IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBs
JiB0YWJsZVNlY3Rpb24gPSAqc3RhdGljX2Nhc3Q8SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBs
Kj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgVGFibGVTZWN0
aW9uQWxpZ246ICAgICAgICAgICB7IHRhYmxlU2VjdGlvbi5zZXRBbGlnbihzdHIpOyByZXR1cm47
IH0KKyAgICAgICAgY2FzZSBUYWJsZVNlY3Rpb25DaDogICAgICAgICAgICAgIHsgdGFibGVTZWN0
aW9uLnNldENoKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxlU2VjdGlvbkNoT2Zm
OiAgICAgICAgICAgeyB0YWJsZVNlY3Rpb24uc2V0Q2hPZmYoc3RyKTsgcmV0dXJuOyB9CisgICAg
ICAgIGNhc2UgVGFibGVTZWN0aW9uVkFsaWduOiAgICAgICAgICB7IHRhYmxlU2VjdGlvbi5zZXRW
QWxpZ24oc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIC8vIHJlYWQtb25seTogcm93cwogICAgIH0K
LSAgICBicmVhazsKLSAgICBjYXNlIElEX1RSOiB7Ci0gICAgICBIVE1MVGFibGVSb3dFbGVtZW50
SW1wbCAmdGFibGVSb3cgPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVSb3dFbGVtZW50SW1wbCAmPihl
bGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIC8vIHJlYWQtb25seTogcm93
SW5kZXgKLSAgICAgIC8vIHJlYWQtb25seTogc2VjdGlvblJvd0luZGV4Ci0gICAgICAvLyByZWFk
LW9ubHk6IGNlbGxzCi0gICAgICBjYXNlIFRhYmxlUm93QWxpZ246ICAgICAgICAgICB7IHRhYmxl
Um93LnNldEFsaWduKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJsZVJvd0JnQ29sb3I6
ICAgICAgICAgeyB0YWJsZVJvdy5zZXRCZ0NvbG9yKHN0cik7IHJldHVybjsgfQotICAgICAgY2Fz
ZSBUYWJsZVJvd0NoOiAgICAgICAgICAgICAgeyB0YWJsZVJvdy5zZXRDaChzdHIpOyByZXR1cm47
IH0KLSAgICAgIGNhc2UgVGFibGVSb3dDaE9mZjogICAgICAgICAgIHsgdGFibGVSb3cuc2V0Q2hP
ZmYoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlUm93VkFsaWduOiAgICAgICAgICB7
IHRhYmxlUm93LnNldFZBbGlnbihzdHIpOyByZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBI
VE1MRWxlbWVudDo6dGFibGVSb3dTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNv
bnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1M
VGFibGVSb3dFbGVtZW50SW1wbCYgdGFibGVSb3cgPSAqc3RhdGljX2Nhc3Q8SFRNTFRhYmxlUm93
RWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgLy8g
cmVhZC1vbmx5OiByb3dJbmRleAorICAgICAgICAvLyByZWFkLW9ubHk6IHNlY3Rpb25Sb3dJbmRl
eAorICAgICAgICAvLyByZWFkLW9ubHk6IGNlbGxzCisgICAgICAgIGNhc2UgVGFibGVSb3dBbGln
bjogICAgICAgICAgIHsgdGFibGVSb3cuc2V0QWxpZ24oc3RyKTsgcmV0dXJuOyB9CisgICAgICAg
IGNhc2UgVGFibGVSb3dCZ0NvbG9yOiAgICAgICAgIHsgdGFibGVSb3cuc2V0QmdDb2xvcihzdHIp
OyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZVJvd0NoOiAgICAgICAgICAgICAgeyB0YWJs
ZVJvdy5zZXRDaChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZVJvd0NoT2ZmOiAg
ICAgICAgICAgeyB0YWJsZVJvdy5zZXRDaE9mZihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2Fz
ZSBUYWJsZVJvd1ZBbGlnbjogICAgICAgICAgeyB0YWJsZVJvdy5zZXRWQWxpZ24oc3RyKTsgcmV0
dXJuOyB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfVEg6Ci0gICAgY2FzZSBJRF9U
RDogewotICAgICAgSFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsICZ0YWJsZUNlbGwgPSBzdGF0aWNf
Y2FzdDxIVE1MVGFibGVDZWxsRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2gg
KHRva2VuKSB7Ci0gICAgICAvLyByZWFkLW9ubHk6IGNlbGxJbmRleAotICAgICAgY2FzZSBUYWJs
ZUNlbGxBYmJyOiAgICAgICAgICAgIHsgdGFibGVDZWxsLnNldEFiYnIoc3RyKTsgcmV0dXJuOyB9
Ci0gICAgICBjYXNlIFRhYmxlQ2VsbEFsaWduOiAgICAgICAgICAgeyB0YWJsZUNlbGwuc2V0QWxp
Z24oc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlQ2VsbEF4aXM6ICAgICAgICAgICAg
eyB0YWJsZUNlbGwuc2V0QXhpcyhzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVDZWxs
QmdDb2xvcjogICAgICAgICB7IHRhYmxlQ2VsbC5zZXRCZ0NvbG9yKHN0cik7IHJldHVybjsgfQot
ICAgICAgY2FzZSBUYWJsZUNlbGxDaDogICAgICAgICAgICAgIHsgdGFibGVDZWxsLnNldENoKHN0
cik7IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJsZUNlbGxDaE9mZjogICAgICAgICAgIHsgdGFi
bGVDZWxsLnNldENoT2ZmKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJsZUNlbGxDb2xT
cGFuOiAgICAgICAgIHsgdGFibGVDZWxsLnNldENvbFNwYW4odmFsdWUudG9JbnQzMihleGVjKSk7
IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJsZUNlbGxIZWFkZXJzOiAgICAgICAgIHsgdGFibGVD
ZWxsLnNldEhlYWRlcnMoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlQ2VsbEhlaWdo
dDogICAgICAgICAgeyB0YWJsZUNlbGwuc2V0SGVpZ2h0KHN0cik7IHJldHVybjsgfQotICAgICAg
Y2FzZSBUYWJsZUNlbGxOb1dyYXA6ICAgICAgICAgIHsgdGFibGVDZWxsLnNldE5vV3JhcCh2YWx1
ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVDZWxsUm93U3Bh
bjogICAgICAgICB7IHRhYmxlQ2VsbC5zZXRSb3dTcGFuKHZhbHVlLnRvSW50MzIoZXhlYykpOyBy
ZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVDZWxsU2NvcGU6ICAgICAgICAgICB7IHRhYmxlQ2Vs
bC5zZXRTY29wZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVDZWxsVkFsaWduOiAg
ICAgICAgICB7IHRhYmxlQ2VsbC5zZXRWQWxpZ24oc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNl
IFRhYmxlQ2VsbFdpZHRoOiAgICAgICAgICAgeyB0YWJsZUNlbGwuc2V0V2lkdGgoc3RyKTsgcmV0
dXJuOyB9Ci0gICAgICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OnRhYmxlQ2VsbFNldHRlcihF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006
OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbCYgdGFibGVD
ZWxsID0gKnN0YXRpY19jYXN0PEhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbCo+KGltcGwoKSk7Cisg
ICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICAvLyByZWFkLW9ubHk6IGNlbGxJbmRleAorICAg
ICAgICBjYXNlIFRhYmxlQ2VsbEFiYnI6ICAgICAgICAgICAgeyB0YWJsZUNlbGwuc2V0QWJicihz
dHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZUNlbGxBbGlnbjogICAgICAgICAgIHsg
dGFibGVDZWxsLnNldEFsaWduKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxlQ2Vs
bEF4aXM6ICAgICAgICAgICAgeyB0YWJsZUNlbGwuc2V0QXhpcyhzdHIpOyByZXR1cm47IH0KKyAg
ICAgICAgY2FzZSBUYWJsZUNlbGxCZ0NvbG9yOiAgICAgICAgIHsgdGFibGVDZWxsLnNldEJnQ29s
b3Ioc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGFibGVDZWxsQ2g6ICAgICAgICAgICAg
ICB7IHRhYmxlQ2VsbC5zZXRDaChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZUNl
bGxDaE9mZjogICAgICAgICAgIHsgdGFibGVDZWxsLnNldENoT2ZmKHN0cik7IHJldHVybjsgfQor
ICAgICAgICBjYXNlIFRhYmxlQ2VsbENvbFNwYW46ICAgICAgICAgeyB0YWJsZUNlbGwuc2V0Q29s
U3Bhbih2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGFibGVD
ZWxsSGVhZGVyczogICAgICAgICB7IHRhYmxlQ2VsbC5zZXRIZWFkZXJzKHN0cik7IHJldHVybjsg
fQorICAgICAgICBjYXNlIFRhYmxlQ2VsbEhlaWdodDogICAgICAgICAgeyB0YWJsZUNlbGwuc2V0
SGVpZ2h0KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxlQ2VsbE5vV3JhcDogICAg
ICAgICAgeyB0YWJsZUNlbGwuc2V0Tm9XcmFwKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVy
bjsgfQorICAgICAgICBjYXNlIFRhYmxlQ2VsbFJvd1NwYW46ICAgICAgICAgeyB0YWJsZUNlbGwu
c2V0Um93U3Bhbih2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2Ug
VGFibGVDZWxsU2NvcGU6ICAgICAgICAgICB7IHRhYmxlQ2VsbC5zZXRTY29wZShzdHIpOyByZXR1
cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZUNlbGxWQWxpZ246ICAgICAgICAgIHsgdGFibGVDZWxs
LnNldFZBbGlnbihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZUNlbGxXaWR0aDog
ICAgICAgICAgIHsgdGFibGVDZWxsLnNldFdpZHRoKHN0cik7IHJldHVybjsgfQogICAgIH0KLSAg
ICBicmVhazsKLSAgICBjYXNlIElEX0ZSQU1FU0VUOiB7Ci0gICAgICBIVE1MRnJhbWVTZXRFbGVt
ZW50SW1wbCAmZnJhbWVTZXQgPSBzdGF0aWNfY2FzdDxIVE1MRnJhbWVTZXRFbGVtZW50SW1wbCAm
PihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgRnJhbWVTZXRD
b2xzOiAgICAgICAgICAgIHsgZnJhbWVTZXQuc2V0Q29scyhzdHIpOyByZXR1cm47IH0KLSAgICAg
IGNhc2UgRnJhbWVTZXRSb3dzOiAgICAgICAgICAgIHsgZnJhbWVTZXQuc2V0Um93cyhzdHIpOyBy
ZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6ZnJhbWVTZXRTZXR0ZXIo
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9N
OjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MRnJhbWVTZXRFbGVtZW50SW1wbCYgZnJhbWVT
ZXQgPSAqc3RhdGljX2Nhc3Q8SFRNTEZyYW1lU2V0RWxlbWVudEltcGwqPihpbXBsKCkpOworICAg
IHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBGcmFtZVNldENvbHM6ICAgICAgICAgICAg
eyBmcmFtZVNldC5zZXRDb2xzKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEZyYW1lU2V0
Um93czogICAgICAgICAgICB7IGZyYW1lU2V0LnNldFJvd3Moc3RyKTsgcmV0dXJuOyB9CiAgICAg
fQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfRlJBTUU6IHsKLSAgICAgIEhUTUxGcmFtZUVsZW1l
bnRJbXBsICZmcmFtZUVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRnJhbWVFbGVtZW50SW1wbCAm
PihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgICAvLyByZWFkLW9ubHk6
IEZyYW1lQ29udGVudERvY3VtZW50OgotICAgICAgY2FzZSBGcmFtZUZyYW1lQm9yZGVyOiAgICAg
eyBmcmFtZUVsZW1lbnQuc2V0RnJhbWVCb3JkZXIoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNl
IEZyYW1lTG9uZ0Rlc2M6ICAgICAgICB7IGZyYW1lRWxlbWVudC5zZXRMb25nRGVzYyhzdHIpOyBy
ZXR1cm47IH0KLSAgICAgIGNhc2UgRnJhbWVNYXJnaW5IZWlnaHQ6ICAgIHsgZnJhbWVFbGVtZW50
LnNldE1hcmdpbkhlaWdodChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgRnJhbWVNYXJnaW5X
aWR0aDogICAgIHsgZnJhbWVFbGVtZW50LnNldE1hcmdpbldpZHRoKHN0cik7IHJldHVybjsgfQot
ICAgICAgY2FzZSBGcmFtZU5hbWU6ICAgICAgICAgICAgeyBmcmFtZUVsZW1lbnQuc2V0TmFtZShz
dHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgRnJhbWVOb1Jlc2l6ZTogICAgICAgIHsgZnJhbWVF
bGVtZW50LnNldE5vUmVzaXplKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQotICAg
ICAgY2FzZSBGcmFtZVNjcm9sbGluZzogICAgICAgeyBmcmFtZUVsZW1lbnQuc2V0U2Nyb2xsaW5n
KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBGcmFtZVNyYzogICAgICAgICAgICAgeyBmcmFt
ZUVsZW1lbnQuc2V0U3JjKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBGcmFtZUxvY2F0aW9u
OiAgICAgICAgeyBmcmFtZUVsZW1lbnQuc2V0TG9jYXRpb24oc3RyKTsgcmV0dXJuOyB9Ci0gICAg
ICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OmZyYW1lU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIp
Cit7CisgICAgSFRNTEZyYW1lRWxlbWVudEltcGwmIGZyYW1lRWxlbWVudCA9ICpzdGF0aWNfY2Fz
dDxIVE1MRnJhbWVFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgewor
ICAgICAgICAvLyByZWFkLW9ubHk6IEZyYW1lQ29udGVudERvY3VtZW50OgorICAgICAgICBjYXNl
IEZyYW1lRnJhbWVCb3JkZXI6ICAgICB7IGZyYW1lRWxlbWVudC5zZXRGcmFtZUJvcmRlcihzdHIp
OyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBGcmFtZUxvbmdEZXNjOiAgICAgICAgeyBmcmFtZUVs
ZW1lbnQuc2V0TG9uZ0Rlc2Moc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgRnJhbWVNYXJn
aW5IZWlnaHQ6ICAgIHsgZnJhbWVFbGVtZW50LnNldE1hcmdpbkhlaWdodChzdHIpOyByZXR1cm47
IH0KKyAgICAgICAgY2FzZSBGcmFtZU1hcmdpbldpZHRoOiAgICAgeyBmcmFtZUVsZW1lbnQuc2V0
TWFyZ2luV2lkdGgoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgRnJhbWVOYW1lOiAgICAg
ICAgICAgIHsgZnJhbWVFbGVtZW50LnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNh
c2UgRnJhbWVOb1Jlc2l6ZTogICAgICAgIHsgZnJhbWVFbGVtZW50LnNldE5vUmVzaXplKHZhbHVl
LnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIEZyYW1lU2Nyb2xsaW5n
OiAgICAgICB7IGZyYW1lRWxlbWVudC5zZXRTY3JvbGxpbmcoc3RyKTsgcmV0dXJuOyB9CisgICAg
ICAgIGNhc2UgRnJhbWVTcmM6ICAgICAgICAgICAgIHsgZnJhbWVFbGVtZW50LnNldFNyYyhzdHIp
OyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBGcmFtZUxvY2F0aW9uOiAgICAgICAgeyBmcmFtZUVs
ZW1lbnQuc2V0TG9jYXRpb24oc3RyKTsgcmV0dXJuOyB9CiAgICAgfQotICAgIGJyZWFrOwotICAg
IGNhc2UgSURfSUZSQU1FOiB7Ci0gICAgICBIVE1MSUZyYW1lRWxlbWVudEltcGwgJmlGcmFtZSA9
IHN0YXRpY19jYXN0PEhUTUxJRnJhbWVFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3
aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgSUZyYW1lQWxpZ246ICAgICAgICAgICB7IGlGcmFt
ZS5zZXRBbGlnbihzdHIpOyByZXR1cm47IH0KLSAgICAgIC8vIHJlYWQtb25seTogSUZyYW1lQ29u
dGVudERvY3VtZW50Ci0gICAgICBjYXNlIElGcmFtZUZyYW1lQm9yZGVyOiAgICAgeyBpRnJhbWUu
c2V0RnJhbWVCb3JkZXIoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElGcmFtZUhlaWdodDog
ICAgICAgICAgeyBpRnJhbWUuc2V0SGVpZ2h0KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBJ
RnJhbWVMb25nRGVzYzogICAgICAgIHsgaUZyYW1lLnNldExvbmdEZXNjKHN0cik7IHJldHVybjsg
fQotICAgICAgY2FzZSBJRnJhbWVNYXJnaW5IZWlnaHQ6ICAgIHsgaUZyYW1lLnNldE1hcmdpbkhl
aWdodChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSUZyYW1lTWFyZ2luV2lkdGg6ICAgICB7
IGlGcmFtZS5zZXRNYXJnaW5XaWR0aChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSUZyYW1l
TmFtZTogICAgICAgICAgICB7IGlGcmFtZS5zZXROYW1lKHN0cik7IHJldHVybjsgfQotICAgICAg
Y2FzZSBJRnJhbWVTY3JvbGxpbmc6ICAgICAgIHsgaUZyYW1lLnNldFNjcm9sbGluZyhzdHIpOyBy
ZXR1cm47IH0KLSAgICAgIGNhc2UgSUZyYW1lU3JjOiAgICAgICAgICAgICB7IGlGcmFtZS5zZXRT
cmMoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElGcmFtZVdpZHRoOiAgICAgICAgICAgeyBp
RnJhbWUuc2V0V2lkdGgoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICB9Ci0gICAgICBicmVhazsKK30K
Kwordm9pZCBIVE1MRWxlbWVudDo6aUZyYW1lU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7Cisg
ICAgSFRNTElGcmFtZUVsZW1lbnRJbXBsJiBpRnJhbWUgPSAqc3RhdGljX2Nhc3Q8SFRNTElGcmFt
ZUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNh
c2UgSUZyYW1lQWxpZ246ICAgICAgICAgICB7IGlGcmFtZS5zZXRBbGlnbihzdHIpOyByZXR1cm47
IH0KKyAgICAgICAgLy8gcmVhZC1vbmx5OiBJRnJhbWVDb250ZW50RG9jdW1lbnQKKyAgICAgICAg
Y2FzZSBJRnJhbWVGcmFtZUJvcmRlcjogICAgIHsgaUZyYW1lLnNldEZyYW1lQm9yZGVyKHN0cik7
IHJldHVybjsgfQorICAgICAgICBjYXNlIElGcmFtZUhlaWdodDogICAgICAgICAgeyBpRnJhbWUu
c2V0SGVpZ2h0KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIElGcmFtZUxvbmdEZXNjOiAg
ICAgICAgeyBpRnJhbWUuc2V0TG9uZ0Rlc2Moc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2Ug
SUZyYW1lTWFyZ2luSGVpZ2h0OiAgICB7IGlGcmFtZS5zZXRNYXJnaW5IZWlnaHQoc3RyKTsgcmV0
dXJuOyB9CisgICAgICAgIGNhc2UgSUZyYW1lTWFyZ2luV2lkdGg6ICAgICB7IGlGcmFtZS5zZXRN
YXJnaW5XaWR0aChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJRnJhbWVOYW1lOiAgICAg
ICAgICAgIHsgaUZyYW1lLnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgSUZy
YW1lU2Nyb2xsaW5nOiAgICAgICB7IGlGcmFtZS5zZXRTY3JvbGxpbmcoc3RyKTsgcmV0dXJuOyB9
CisgICAgICAgIGNhc2UgSUZyYW1lU3JjOiAgICAgICAgICAgICB7IGlGcmFtZS5zZXRTcmMoc3Ry
KTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgSUZyYW1lV2lkdGg6ICAgICAgICAgICB7IGlGcmFt
ZS5zZXRXaWR0aChzdHIpOyByZXR1cm47IH0KICAgICB9Ci0gIH0KK30KIAotICAvLyBnZW5lcmlj
IHByb3BlcnRpZXMKLSAgc3dpdGNoICh0b2tlbikgewotICBjYXNlIEVsZW1lbnRJZDoKLSAgICBl
bGVtZW50LnNldElkKHN0cik7Ci0gICAgcmV0dXJuOwotICBjYXNlIEVsZW1lbnRUaXRsZToKLSAg
ICBlbGVtZW50LnNldFRpdGxlKHN0cik7Ci0gICAgcmV0dXJuOwotICBjYXNlIEVsZW1lbnRMYW5n
OgotICAgIGVsZW1lbnQuc2V0TGFuZyhzdHIpOwotICAgIHJldHVybjsKLSAgY2FzZSBFbGVtZW50
RGlyOgotICAgIGVsZW1lbnQuc2V0RGlyKHN0cik7Ci0gICAgcmV0dXJuOwotICBjYXNlIEVsZW1l
bnRDbGFzc05hbWU6Ci0gICAgZWxlbWVudC5zZXRDbGFzc05hbWUoc3RyKTsKLSAgICByZXR1cm47
Ci0gIGNhc2UgRWxlbWVudElubmVySFRNTDoKLSAgICBlbGVtZW50LnNldElubmVySFRNTChzdHIs
IGV4Y2VwdGlvbik7Ci0gICAgcmV0dXJuOwotICBjYXNlIEVsZW1lbnRJbm5lclRleHQ6Ci0gICAg
ZWxlbWVudC5zZXRJbm5lclRleHQoc3RyLCBleGNlcHRpb24pOwotICAgIHJldHVybjsKLSAgY2Fz
ZSBFbGVtZW50T3V0ZXJIVE1MOgotICAgIGVsZW1lbnQuc2V0T3V0ZXJIVE1MKHN0ciwgZXhjZXB0
aW9uKTsKLSAgICByZXR1cm47Ci0gIGNhc2UgRWxlbWVudE91dGVyVGV4dDoKLSAgICBlbGVtZW50
LnNldE91dGVyVGV4dChzdHIsIGV4Y2VwdGlvbik7Ci0gICAgcmV0dXJuOwotICBjYXNlIEVsZW1l
bnRDb250ZW50RWRpdGFibGU6Ci0gICAgZWxlbWVudC5zZXRDb250ZW50RWRpdGFibGUoc3RyKTsK
LSAgICByZXR1cm47Ci0gIGRlZmF1bHQ6Ci0gICAga2RXYXJuaW5nKCkgPDwgIktKUzo6SFRNTEVs
ZW1lbnQ6OnB1dFZhbHVlIHVuaGFuZGxlZCB0b2tlbiAiIDw8IHRva2VuIDw8ICIgdGhpc1RhZz0i
IDw8IGVsZW1lbnQudGFnTmFtZSgpLnN0cmluZygpIDw8ICIgc3RyPSIgPDwgc3RyLnN0cmluZygp
IDw8IGVuZGw7Ci0gIH0KK3ZvaWQgSFRNTEVsZW1lbnQ6Om1hcnF1ZWVTZXR0ZXIoRXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJp
bmcmIHN0cikKK3sKKyAgICAvLyBGSVhNRTogRmluZCBvdXQgd2hhdCBXaW5JRSBzdXBwb3J0cyBh
bmQgaW1wbGVtZW50IGl0LgorfQorCit2b2lkIEhUTUxFbGVtZW50OjpwdXRWYWx1ZShFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBpbnQpCit7CisgICAgRE9N
RXhjZXB0aW9uVHJhbnNsYXRvciBleGNlcHRpb24oZXhlYyk7CisgICAgRE9NOjpET01TdHJpbmcg
c3RyID0gdmFsdWUuaXNBKE51bGxUeXBlKSA/IERPTTo6RE9NU3RyaW5nKCkgOiB2YWx1ZS50b1N0
cmluZyhleGVjKS5zdHJpbmcoKTsKKyAKKyAgICAvLyBDaGVjayBvdXIgc2V0IG9mIGdlbmVyaWMg
cHJvcGVydGllcyBmaXJzdC4KKyAgICBIVE1MRWxlbWVudEltcGwgJmVsZW1lbnQgPSAqc3RhdGlj
X2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgewor
ICAgICAgICBjYXNlIEVsZW1lbnRJZDoKKyAgICAgICAgICAgIGVsZW1lbnQuc2V0SWQoc3RyKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBFbGVtZW50VGl0bGU6CisgICAgICAg
ICAgICBlbGVtZW50LnNldFRpdGxlKHN0cik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IGNhc2UgRWxlbWVudExhbmc6CisgICAgICAgICAgICBlbGVtZW50LnNldExhbmcoc3RyKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBFbGVtZW50RGlyOgorICAgICAgICAgICAg
ZWxlbWVudC5zZXREaXIoc3RyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBF
bGVtZW50Q2xhc3NOYW1lOgorICAgICAgICAgICAgZWxlbWVudC5zZXRDbGFzc05hbWUoc3RyKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBFbGVtZW50SW5uZXJIVE1MOgorICAg
ICAgICAgICAgZWxlbWVudC5zZXRJbm5lckhUTUwoc3RyLCBleGNlcHRpb24pOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICBjYXNlIEVsZW1lbnRJbm5lclRleHQ6CisgICAgICAgICAgICBl
bGVtZW50LnNldElubmVyVGV4dChzdHIsIGV4Y2VwdGlvbik7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIGNhc2UgRWxlbWVudE91dGVySFRNTDoKKyAgICAgICAgICAgIGVsZW1lbnQuc2V0
T3V0ZXJIVE1MKHN0ciwgZXhjZXB0aW9uKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
Y2FzZSBFbGVtZW50T3V0ZXJUZXh0OgorICAgICAgICAgICAgZWxlbWVudC5zZXRPdXRlclRleHQo
c3RyLCBleGNlcHRpb24pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIEVsZW1l
bnRDb250ZW50RWRpdGFibGU6CisgICAgICAgICAgICBlbGVtZW50LnNldENvbnRlbnRFZGl0YWJs
ZShzdHIpOworICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIE5vdyBjaGVjayBm
b3IgcHJvcGVydGllcyB0aGF0IGFwcGx5IHRvIGEgc3BlY2lmaWMgZWxlbWVudCB0eXBlLgorICAg
IGNvbnN0IEdldFNldEluZm8qIGluZm8gPSBnZXRTZXRJbmZvKCk7CisgICAgaWYgKGluZm8gJiYg
aW5mby0+bV9zZXR0ZXIpCisgICAgICAgIHJldHVybiAodGhpcy0+KihpbmZvLT5tX3NldHRlcikp
KGV4ZWMsIHRva2VuLCB2YWx1ZSwgc3RyKTsgIAogfQogCiBIVE1MRWxlbWVudEltcGwgKnRvSFRN
TEVsZW1lbnQoVmFsdWVJbXAgKnZhbCkKQEAgLTMxMTMsMjMgKzMyNzQsMTcgQEAgSFRNTEVsZW1l
bnRJbXBsICp0b0hUTUxFbGVtZW50KFZhbHVlSW1wIAogCiBIVE1MVGFibGVDYXB0aW9uRWxlbWVu
dEltcGwgKnRvSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQoVmFsdWVJbXAgKnZhbCkKIHsKLSAgICBp
ZiAoSFRNTEVsZW1lbnRJbXBsICplID0gdG9IVE1MRWxlbWVudCh2YWwpKQotICAgICAgICBzd2l0
Y2ggKGUtPmlkKCkpIHsKLSAgICAgICAgICAgIGNhc2UgSURfQ0FQVElPTjoKLSAgICAgICAgICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnRJbXBsICo+KGUp
OwotICAgICAgICB9CisgICAgSFRNTEVsZW1lbnRJbXBsICplID0gdG9IVE1MRWxlbWVudCh2YWwp
OworICAgIGlmIChlICYmIGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpjYXB0aW9uKCkpKQorICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnRJbXBsICo+KGUp
OwogICAgIHJldHVybiAwOwogfQogCiBIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGwgKnRvSFRN
TFRhYmxlU2VjdGlvbkVsZW1lbnQoVmFsdWVJbXAgKnZhbCkKIHsKLSAgICBpZiAoSFRNTEVsZW1l
bnRJbXBsICplID0gdG9IVE1MRWxlbWVudCh2YWwpKQotICAgICAgICBzd2l0Y2ggKGUtPmlkKCkp
IHsKLSAgICAgICAgICAgIGNhc2UgSURfVEhFQUQ6Ci0gICAgICAgICAgICBjYXNlIElEX1RCT0RZ
OgotICAgICAgICAgICAgY2FzZSBJRF9URk9PVDoKLSAgICAgICAgICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsICo+KGUpOwotICAgICAgICB9Cisg
ICAgSFRNTEVsZW1lbnRJbXBsICplID0gdG9IVE1MRWxlbWVudCh2YWwpOworICAgIGlmIChlICYm
IChlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGhlYWQoKSkgfHwgZS0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OnRib2R5KCkpIHx8IGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0Zm9vdCgpKSkpCisg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGwgKj4o
ZSk7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTMxNzgsMTAgKzMzMzMsMTAgQEAgVmFsdWUgS0pT
OjpIVE1MQ29sbGVjdGlvbjo6dHJ5R2V0KEV4ZWNTdAogICBlbHNlIGlmIChwcm9wZXJ0eU5hbWUg
PT0gInNlbGVjdGVkSW5kZXgiKSB7CiAgICAgLy8gTk9OLVNUQU5EQVJEIG9wdGlvbnMuc2VsZWN0
ZWRJbmRleAogICAgIE5vZGVJbXBsICpvcHRpb24gPSBjb2xsZWN0aW9uLml0ZW0oMCk7Ci0gICAg
aWYgKG9wdGlvbi0+aWQoKSA9PSBJRF9PUFRJT04pIHsKKyAgICBpZiAob3B0aW9uLT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpKSB7CiAgICAgICBOb2RlSW1wbCAqc2VsZWN0ID0gb3B0
aW9uOwogICAgICAgd2hpbGUgKChzZWxlY3QgPSBzZWxlY3QtPnBhcmVudE5vZGUoKSkpCi0gICAg
ICAgIGlmIChzZWxlY3QtPmlkKCkgPT0gSURfU0VMRUNUKQorICAgICAgICBpZiAoc2VsZWN0LT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6c2VsZWN0KCkpKQogCSAgcmV0dXJuIE51bWJlcihzdGF0aWNf
Y2FzdDxIVE1MU2VsZWN0RWxlbWVudEltcGwgKj4oc2VsZWN0KS0+c2VsZWN0ZWRJbmRleCgpKTsK
ICAgICB9CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwpAQCAtMzM2OSw3ICszNTI0LDcgQEAgdm9p
ZCBLSlM6OkhUTUxTZWxlY3RDb2xsZWN0aW9uOjp0cnlQdXQoRQogCiAgIC8vIGlzIHYgYW4gb3B0
aW9uIGVsZW1lbnQgPwogICBOb2RlSW1wbCAqb3B0aW9uID0gdG9Ob2RlKHZhbHVlKTsKLSAgaWYg
KCFvcHRpb24gfHwgb3B0aW9uLT5pZCgpICE9IElEX09QVElPTikKKyAgaWYgKCFvcHRpb24gfHwg
IW9wdGlvbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9wdGlvbigpKSkKICAgICByZXR1cm47CiAK
ICAgaW50IGV4Y2VwdGlvbiA9IDA7CkluZGV4OiBraHRtbC9lY21hL2tqc19odG1sLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWNtYS9ranNfaHRtbC5oLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjQ5CmRpZmYgLXUgLXAgLXIxLjQ5IGtodG1sL2VjbWEva2pz
X2h0bWwuaAotLS0ga2h0bWwvZWNtYS9ranNfaHRtbC5oCTMgSnVsIDIwMDUgMTA6NDc6NTYgLTAw
MDAJMS40OQorKysga2h0bWwvZWNtYS9ranNfaHRtbC5oCTggSnVsIDIwMDUgMDM6MDM6NTkgLTAw
MDAKQEAgLTg1LDYgKzg1LDEzMSBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgIGNhcHRpb25faW5m
bywgY29sX2luZm8sIHRhYmxlc2VjdGlvbl9pbmZvLCB0cl9pbmZvLAogICAgICAgdGFibGVjZWxs
X2luZm8sIGZyYW1lU2V0X2luZm8sIGZyYW1lX2luZm8sIGlGcmFtZV9pbmZvLCBtYXJxdWVlX2lu
Zm87CiAKKyAgICAvLyBGSVhNRTogTWlnaHQgbWFrZSBzZW5zZSB0byBjb21iaW5lIHRoaXMgd2l0
aCBDbGFzc0luZm8gc29tZSBkYXkuCisgICAgdHlwZWRlZiBWYWx1ZSAoSFRNTEVsZW1lbnQ6OipH
ZXR0ZXJGdW5jdGlvbikoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHR5
cGVkZWYgdm9pZCAoSFRNTEVsZW1lbnQ6OipTZXR0ZXJGdW5jdGlvbikoRXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0
cik7CisgICAgc3RydWN0IEdldFNldEluZm8geyBHZXR0ZXJGdW5jdGlvbiBtX2dldHRlcjsgU2V0
dGVyRnVuY3Rpb24gbV9zZXR0ZXI7IH07CisgICAgY29uc3QgR2V0U2V0SW5mbyogZ2V0U2V0SW5m
bygpIGNvbnN0OworICAgIHN0YXRpYyBjb25zdCBHZXRTZXRJbmZvIGh0bWxfZ2V0c2V0LCBoZWFk
X2dldHNldCwgbGlua19nZXRzZXQsIHRpdGxlX2dldHNldCwKKyAgICAgIG1ldGFfZ2V0c2V0LCBi
YXNlX2dldHNldCwgaXNJbmRleF9nZXRzZXQsIHN0eWxlX2dldHNldCwgYm9keV9nZXRzZXQsIGZv
cm1fZ2V0c2V0LAorICAgICAgc2VsZWN0X2dldHNldCwgb3B0R3JvdXBfZ2V0c2V0LCBvcHRpb25f
Z2V0c2V0LCBpbnB1dF9nZXRzZXQsIHRleHRBcmVhX2dldHNldCwKKyAgICAgIGJ1dHRvbl9nZXRz
ZXQsIGxhYmVsX2dldHNldCwgZmllbGRTZXRfZ2V0c2V0LCBsZWdlbmRfZ2V0c2V0LCB1bF9nZXRz
ZXQsIG9sX2dldHNldCwKKyAgICAgIGRsX2dldHNldCwgZGlyX2dldHNldCwgbWVudV9nZXRzZXQs
IGxpX2dldHNldCwgZGl2X2dldHNldCwgcF9nZXRzZXQsIGhlYWRpbmdfZ2V0c2V0LAorICAgICAg
YmxvY2tRdW90ZV9nZXRzZXQsIHFfZ2V0c2V0LCBwcmVfZ2V0c2V0LCBicl9nZXRzZXQsIGJhc2VG
b250X2dldHNldCwgZm9udF9nZXRzZXQsCisgICAgICBocl9nZXRzZXQsIG1vZF9nZXRzZXQsIGFf
Z2V0c2V0LCBjYW52YXNfZ2V0c2V0LCBpbWdfZ2V0c2V0LCBvYmplY3RfZ2V0c2V0LCBwYXJhbV9n
ZXRzZXQsCisgICAgICBhcHBsZXRfZ2V0c2V0LCBtYXBfZ2V0c2V0LCBhcmVhX2dldHNldCwgc2Ny
aXB0X2dldHNldCwgdGFibGVfZ2V0c2V0LAorICAgICAgY2FwdGlvbl9nZXRzZXQsIGNvbF9nZXRz
ZXQsIHRhYmxlc2VjdGlvbl9nZXRzZXQsIHRyX2dldHNldCwKKyAgICAgIHRhYmxlY2VsbF9nZXRz
ZXQsIGZyYW1lU2V0X2dldHNldCwgZnJhbWVfZ2V0c2V0LCBpRnJhbWVfZ2V0c2V0LCBtYXJxdWVl
X2dldHNldDsKKworICAgIFZhbHVlIGh0bWxHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0OworICAgIHZvaWQgIGh0bWxTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAg
VmFsdWUgaGVhZEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAg
dm9pZCAgaGVhZFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUm
IHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBsaW5rR2V0dGVy
KEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBsaW5rU2V0dGVy
KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERP
TTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIHRpdGxlR2V0dGVyKEV4ZWNTdGF0ZSogZXhl
YywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICB0aXRsZVNldHRlcihFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYg
c3RyKTsKKyAgICBWYWx1ZSBtZXRhR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBj
b25zdDsKKyAgICB2b2lkICBtZXRhU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBj
b25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVl
IGJhc2VHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQg
IGJhc2VTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1
ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgaXNJbmRleEdldHRlcihF
eGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgaXNJbmRleFNldHRl
cihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBE
T006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBzdHlsZUdldHRlcihFeGVjU3RhdGUqIGV4
ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgc3R5bGVTZXR0ZXIoRXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcm
IHN0cik7CisgICAgVmFsdWUgYm9keUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikg
Y29uc3Q7CisgICAgdm9pZCAgYm9keVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwg
Y29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1
ZSBmb3JtR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lk
ICBmb3JtU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFs
dWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIHNlbGVjdEdldHRlcihF
eGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgc2VsZWN0U2V0dGVy
KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERP
TTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIG9wdEdyb3VwR2V0dGVyKEV4ZWNTdGF0ZSog
ZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBvcHRHcm91cFNldHRlcihFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0
cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBvcHRpb25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQg
dG9rZW4pIGNvbnN0OworICAgIHZvaWQgIG9wdGlvblNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsK
KyAgICBWYWx1ZSBpbnB1dEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7
CisgICAgdm9pZCAgaW5wdXRTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0
IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgdGV4
dEFyZWFHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQg
IHRleHRBcmVhU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYg
dmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIGJ1dHRvbkdldHRl
cihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgYnV0dG9uU2V0
dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0
IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIGxhYmVsR2V0dGVyKEV4ZWNTdGF0ZSog
ZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBsYWJlbFNldHRlcihFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmlu
ZyYgc3RyKTsKKyAgICBWYWx1ZSBmaWVsZFNldEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0
b2tlbikgY29uc3Q7CisgICAgdm9pZCAgZmllbGRTZXRTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7
CisgICAgVmFsdWUgbGVnZW5kR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25z
dDsKKyAgICB2b2lkICBsZWdlbmRTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNv
bnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUg
dUxpc3RHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQg
IHVMaXN0U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFs
dWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIG9MaXN0R2V0dGVyKEV4
ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBvTGlzdFNldHRlcihF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006
OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBkTGlzdEdldHRlcihFeGVjU3RhdGUqIGV4ZWMs
IGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgZExpc3RTZXR0ZXIoRXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0
cik7CisgICAgVmFsdWUgZGlyR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25z
dDsKKyAgICB2b2lkICBkaXJTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0
IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgbWVu
dUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgbWVu
dVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBj
b25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBsaUdldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgbGlTZXR0ZXIoRXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcm
IHN0cik7CisgICAgVmFsdWUgZGl2R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBj
b25zdDsKKyAgICB2b2lkICBkaXZTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNv
bnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUg
cGFyYWdyYXBoR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2
b2lkICBwYXJhZ3JhcGhTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZh
bHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgaGVhZGlu
Z0dldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgaGVh
ZGluZ1NldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVl
LCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBibG9ja1F1b3RlR2V0dGVy
KEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBibG9ja1F1b3Rl
U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNv
bnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIHF1b3RlR2V0dGVyKEV4ZWNTdGF0
ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBxdW90ZVNldHRlcihFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0
cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBwcmVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0OworICAgIHZvaWQgIHByZVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
biwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBW
YWx1ZSBickdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9p
ZCAgYnJTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1
ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgYmFzZUZvbnRHZXR0ZXIo
RXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGJhc2VGb250U2V0
dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0
IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIGZvbnRHZXR0ZXIoRXhlY1N0YXRlKiBl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGZvbnRTZXR0ZXIoRXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcm
IHN0cik7CisgICAgVmFsdWUgaHJHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNv
bnN0OworICAgIHZvaWQgIGhyU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25z
dCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIG1v
ZEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgbW9k
U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNv
bnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIGFuY2hvckdldHRlcihFeGVjU3Rh
dGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgYW5jaG9yU2V0dGVyKEV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9N
U3RyaW5nJiBzdHIpOworICAgIFZhbHVlIGltYWdlR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50
IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBpbWFnZVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsK
KyAgICBWYWx1ZSBvYmplY3RHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0
OworICAgIHZvaWQgIG9iamVjdFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29u
c3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBw
YXJhbUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAg
cGFyYW1TZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1
ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgYXBwbGV0R2V0dGVyKEV4
ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBhcHBsZXRTZXR0ZXIo
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9N
OjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgbWFwR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywg
aW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBtYXBTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7
CisgICAgVmFsdWUgYXJlYUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7
CisgICAgdm9pZCAgYXJlYVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3Qg
VmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBzY3Jp
cHRHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIHNj
cmlwdFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVl
LCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSB0YWJsZUdldHRlcihFeGVj
U3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgdGFibGVTZXR0ZXIoRXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpE
T01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgdGFibGVDYXB0aW9uR2V0dGVyKEV4ZWNTdGF0ZSog
ZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICB0YWJsZUNhcHRpb25TZXR0ZXIoRXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpE
T01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgdGFibGVDb2xHZXR0ZXIoRXhlY1N0YXRlKiBleGVj
LCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIHRhYmxlQ29sU2V0dGVyKEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5n
JiBzdHIpOworICAgIFZhbHVlIHRhYmxlU2VjdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGlu
dCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgdGFibGVTZWN0aW9uU2V0dGVyKEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5n
JiBzdHIpOworICAgIFZhbHVlIHRhYmxlUm93R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRv
a2VuKSBjb25zdDsKKyAgICB2b2lkICB0YWJsZVJvd1NldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsK
KyAgICBWYWx1ZSB0YWJsZUNlbGxHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNv
bnN0OworICAgIHZvaWQgIHRhYmxlQ2VsbFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
biwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBW
YWx1ZSBmcmFtZVNldEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7Cisg
ICAgdm9pZCAgZnJhbWVTZXRTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0
IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgZnJh
bWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGZy
YW1lU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUs
IGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIGlGcmFtZUdldHRlcihFeGVj
U3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgaUZyYW1lU2V0dGVyKEV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6
RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIG1hcnF1ZWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVj
LCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIG1hcnF1ZWVTZXR0ZXIoRXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcm
IHN0cik7CisKICAgICBlbnVtIHsgSHRtbFZlcnNpb24sIEhlYWRQcm9maWxlLCBMaW5rSHJlZiwg
TGlua1JlbCwgTGlua01lZGlhLAogICAgICAgICAgICBMaW5rQ2hhcnNldCwgTGlua0Rpc2FibGVk
LCBMaW5rSHJlZkxhbmcsIExpbmtSZXYsIExpbmtUYXJnZXQsIExpbmtUeXBlLAogICAgICAgICAg
ICBMaW5rU2hlZXQsIFRpdGxlVGV4dCwgTWV0YU5hbWUsIE1ldGFIdHRwRXF1aXYsIE1ldGFDb250
ZW50LCBNZXRhU2NoZW1lLApJbmRleDoga2h0bWwvZWNtYS9ranNfd2luZG93LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lY21hL2tqc193aW5kb3cuY3Bw
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE2MgpkaWZmIC11IC1wIC1yMS4xNjIga2h0bWwvZWNt
YS9ranNfd2luZG93LmNwcAotLS0ga2h0bWwvZWNtYS9ranNfd2luZG93LmNwcAkzIEp1bCAyMDA1
IDEwOjQ3OjU2IC0wMDAwCTEuMTYyCisrKyBraHRtbC9lY21hL2tqc193aW5kb3cuY3BwCTggSnVs
IDIwMDUgMDM6MDQ6MDIgLTAwMDAKQEAgLTY4LDcgKzY4LDYgQEAKICNpbmNsdWRlICJodG1sL2h0
bWxfZG9jdW1lbnRpbXBsLmgiCiAjaW5jbHVkZSAiY3NzL2Nzc19ydWxlaW1wbC5oIgogI2luY2x1
ZGUgImNzcy9jc3Nfc3R5bGVzaGVldGltcGwuaCIKLSNpbmNsdWRlICJtaXNjL2h0bWx0YWdzLmgi
CiAKIC8vIE11c3QgaW5jbHVkZSA8Y21hdGg+IGluc3RlYWQgb2YgPG1hdGguaD4gYmVjYXVzZSBv
ZiBhIGJ1ZyBpbiB0aGUKIC8vIGdjYyAzLjMgbGlicmFyeSB2ZXJzaW9uIG9mIDxtYXRoLmg+IHdo
ZXJlIGlmIHlvdSBpbmNsdWRlIGJvdGgKSW5kZXg6IGtodG1sL2VkaXRpbmcvYXBwbHlfc3R5bGVf
Y29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwv
ZWRpdGluZy9hcHBseV9zdHlsZV9jb21tYW5kLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40
CmRpZmYgLXUgLXAgLXIxLjQga2h0bWwvZWRpdGluZy9hcHBseV9zdHlsZV9jb21tYW5kLmNwcAot
LS0ga2h0bWwvZWRpdGluZy9hcHBseV9zdHlsZV9jb21tYW5kLmNwcAk1IEp1bCAyMDA1IDIzOjIx
OjA3IC0wMDAwCTEuNAorKysga2h0bWwvZWRpdGluZy9hcHBseV9zdHlsZV9jb21tYW5kLmNwcAk4
IEp1bCAyMDA1IDAzOjA0OjAzIC0wMDAwCkBAIC0zMyw3ICszMyw3IEBACiAjaW5jbHVkZSAiY3Nz
L2Nzc3Byb3BlcnRpZXMuaCIKICNpbmNsdWRlICJkb20vZG9tX3N0cmluZy5oIgogI2luY2x1ZGUg
Imh0bWwvaHRtbF9lbGVtZW50aW1wbC5oIgotI2luY2x1ZGUgIm1pc2MvaHRtbHRhZ3MuaCIKKyNp
bmNsdWRlICJodG1sbmFtZXMuaCIKICNpbmNsdWRlICJtaXNjL2h0bWxhdHRycy5oIgogI2luY2x1
ZGUgInJlbmRlcmluZy9yZW5kZXJfb2JqZWN0LmgiCiAjaW5jbHVkZSAieG1sL2RvbV9kb2NpbXBs
LmgiCkBAIC02NSw2ICs2NSw3IEBAIHVzaW5nIERPTTo6Tm9kZUltcGw7CiB1c2luZyBET006OlBv
c2l0aW9uOwogdXNpbmcgRE9NOjpSYW5nZUltcGw7CiB1c2luZyBET006OlRleHRJbXBsOwordXNp
bmcgRE9NOjpIVE1MTmFtZXM7CiAKIG5hbWVzcGFjZSBraHRtbCB7CiAKQEAgLTI0OSwxMiArMjUw
LDEyIEBAIGJvb2wgaXNTdHlsZVNwYW4oY29uc3QgTm9kZUltcGwgKm5vZGUpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAogICAgIGNvbnN0IEhUTUxFbGVtZW50SW1wbCAqZWxlbSA9IHN0YXRpY19j
YXN0PGNvbnN0IEhUTUxFbGVtZW50SW1wbCAqPihub2RlKTsKLSAgICByZXR1cm4gZWxlbS0+aWQo
KSA9PSBJRF9TUEFOICYmIGVsZW0tPmdldEF0dHJpYnV0ZShBVFRSX0NMQVNTKSA9PSBzdHlsZVNw
YW5DbGFzc1N0cmluZygpOworICAgIHJldHVybiBlbGVtLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVz
OjpzcGFuKCkpICYmIGVsZW0tPmdldEF0dHJpYnV0ZShBVFRSX0NMQVNTKSA9PSBzdHlsZVNwYW5D
bGFzc1N0cmluZygpOwogfQogCiBzdGF0aWMgYm9vbCBpc0VtcHR5U3R5bGVTcGFuKGNvbnN0IE5v
ZGVJbXBsICpub2RlKQogewotICAgIGlmICghbm9kZSB8fCAhbm9kZS0+aXNIVE1MRWxlbWVudCgp
IHx8IG5vZGUtPmlkKCkgIT0gSURfU1BBTikKKyAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPmlzSFRN
TEVsZW1lbnQoKSB8fCAhbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnNwYW4oKSkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIGNvbnN0IEhUTUxFbGVtZW50SW1wbCAqZWxlbSA9IHN0
YXRpY19jYXN0PGNvbnN0IEhUTUxFbGVtZW50SW1wbCAqPihub2RlKTsKQEAgLTI2NCw3ICsyNjUs
NyBAQCBzdGF0aWMgYm9vbCBpc0VtcHR5U3R5bGVTcGFuKGNvbnN0IE5vZGVJCiAKIHN0YXRpYyBi
b29sIGlzRW1wdHlGb250VGFnKGNvbnN0IE5vZGVJbXBsICpub2RlKQogewotICAgIGlmICghbm9k
ZSB8fCBub2RlLT5pZCgpICE9IElEX0ZPTlQpCisgICAgaWYgKCFub2RlIHx8ICFub2RlLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6Zm9udCgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
Y29uc3QgRWxlbWVudEltcGwgKmVsZW0gPSBzdGF0aWNfY2FzdDxjb25zdCBFbGVtZW50SW1wbCAq
Pihub2RlKTsKQEAgLTI3NSw3ICsyNzYsNyBAQCBzdGF0aWMgYm9vbCBpc0VtcHR5Rm9udFRhZyhj
b25zdCBOb2RlSW1wCiBzdGF0aWMgRWxlbWVudEltcGwgKmNyZWF0ZUZvbnRFbGVtZW50KERvY3Vt
ZW50SW1wbCAqZG9jdW1lbnQpCiB7CiAgICAgaW50IGV4Y2VwdGlvbkNvZGUgPSAwOwotICAgIEVs
ZW1lbnRJbXBsICpmb250Tm9kZSA9IGRvY3VtZW50LT5jcmVhdGVIVE1MRWxlbWVudCgiZm9udCIs
IGV4Y2VwdGlvbkNvZGUpOworICAgIEVsZW1lbnRJbXBsICpmb250Tm9kZSA9IGRvY3VtZW50LT5j
cmVhdGVFbGVtZW50TlMoWEhUTUxfTkFNRVNQQUNFLCAiZm9udCIsIGV4Y2VwdGlvbkNvZGUpOwog
ICAgIEFTU0VSVChleGNlcHRpb25Db2RlID09IDApOwogICAgIGZvbnROb2RlLT5zZXRBdHRyaWJ1
dGUoQVRUUl9DTEFTUywgc3R5bGVTcGFuQ2xhc3NTdHJpbmcoKSk7CiAgICAgcmV0dXJuIGZvbnRO
b2RlOwpAQCAtMjg0LDcgKzI4NSw3IEBAIHN0YXRpYyBFbGVtZW50SW1wbCAqY3JlYXRlRm9udEVs
ZW1lbnQoRG8KIEVsZW1lbnRJbXBsICpjcmVhdGVTdHlsZVNwYW5FbGVtZW50KERvY3VtZW50SW1w
bCAqZG9jdW1lbnQpCiB7CiAgICAgaW50IGV4Y2VwdGlvbkNvZGUgPSAwOwotICAgIEVsZW1lbnRJ
bXBsICpzdHlsZUVsZW1lbnQgPSBkb2N1bWVudC0+Y3JlYXRlSFRNTEVsZW1lbnQoIlNQQU4iLCBl
eGNlcHRpb25Db2RlKTsKKyAgICBFbGVtZW50SW1wbCAqc3R5bGVFbGVtZW50ID0gZG9jdW1lbnQt
PmNyZWF0ZUVsZW1lbnROUyhYSFRNTF9OQU1FU1BBQ0UsICJzcGFuIiwgZXhjZXB0aW9uQ29kZSk7
CiAgICAgQVNTRVJUKGV4Y2VwdGlvbkNvZGUgPT0gMCk7CiAgICAgc3R5bGVFbGVtZW50LT5zZXRB
dHRyaWJ1dGUoQVRUUl9DTEFTUywgc3R5bGVTcGFuQ2xhc3NTdHJpbmcoKSk7CiAgICAgcmV0dXJu
IHN0eWxlRWxlbWVudDsKQEAgLTU4Niw3ICs1ODcsNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5k
OjphcHBseUlubGluZVN0eWxlCiAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBjdXJyZW50IGdy
b3VwLgogICAgICAgICAgICAgICAgICAgICBpZiAobm9kZSA9PSBlbmQubm9kZSgpIHx8IAogICAg
ICAgICAgICAgICAgICAgICAgICAgcnVuU3RhcnQtPnBhcmVudE5vZGUoKSAhPSBuZXh0LT5wYXJl
bnROb2RlKCkgfHwgCi0gICAgICAgICAgICAgICAgICAgICAgICAobmV4dC0+aXNIVE1MRWxlbWVu
dCgpICYmIG5leHQtPmlkKCkgIT0gSURfQlIpIHx8IAorICAgICAgICAgICAgICAgICAgICAgICAg
KG5leHQtPmlzRWxlbWVudE5vZGUoKSAmJiAhbmV4dC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJy
KCkpKSB8fCAKICAgICAgICAgICAgICAgICAgICAgICAgIChuZXh0LT5yZW5kZXJlcigpICYmICFu
ZXh0LT5yZW5kZXJlcigpLT5pc0lubGluZSgpKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgICAgICBub2RlID0gbmV4dDsKQEAgLTYxMSwxMSArNjEyLDEx
IEBAIGJvb2wgQXBwbHlTdHlsZUNvbW1hbmQ6OmlzSFRNTFN0eWxlTm9kZSgKICAgICBmb3IgKFFW
YWx1ZUxpc3RDb25zdEl0ZXJhdG9yPENTU1Byb3BlcnR5PiBpdCA9IHN0eWxlLT52YWx1ZXNJdGVy
YXRvcigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgc3dpdGNoICgoKml0KS5pZCgpKSB7
CiAgICAgICAgICAgICBjYXNlIENTU19QUk9QX0ZPTlRfV0VJR0hUOgotICAgICAgICAgICAgICAg
IGlmIChlbGVtLT5pZCgpID09IElEX0IpCisgICAgICAgICAgICAgICAgaWYgKGVsZW0tPmhhc0xv
Y2FsTmFtZShIVE1MTmFtZXM6OmIoKSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDU1NfUFJPUF9GT05U
X1NUWUxFOgotICAgICAgICAgICAgICAgIGlmIChlbGVtLT5pZCgpID09IElEX0kpCisgICAgICAg
ICAgICAgICAgaWYgKGVsZW0tPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmkoKSkpCiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQpAQCAtNjM4LDcgKzYz
OSw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUhUTUxGb250U3QKICAgICBBU1NF
UlQoc3R5bGUpOwogICAgIEFTU0VSVChlbGVtKTsKIAotICAgIGlmIChlbGVtLT5pZCgpICE9IElE
X0ZPTlQpCisgICAgaWYgKCFlbGVtLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpmb250KCkpKQog
ICAgICAgICByZXR1cm47CiAKICAgICBpbnQgZXhjZXB0aW9uQ29kZSA9IDA7CkBAIC0xMDQ3LDcg
KzEwNDgsNyBAQCBzdGF0aWMgYm9vbCBhcmVJZGVudGljYWxFbGVtZW50cyhOb2RlSW1wCiAgICAg
RWxlbWVudEltcGwgKmZpcnN0RWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsICo+KGZp
cnN0KTsKICAgICBFbGVtZW50SW1wbCAqc2Vjb25kRWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1l
bnRJbXBsICo+KHNlY29uZCk7CiAgICAgCi0gICAgaWYgKGZpcnN0RWxlbWVudC0+aWQoKSAhPSBz
ZWNvbmRFbGVtZW50LT5pZCgpKQorICAgIGlmICghZmlyc3RFbGVtZW50LT50YWdOYW1lKCkubWF0
Y2hlcyhzZWNvbmRFbGVtZW50LT50YWdOYW1lKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICBOYW1lZEF0dHJNYXBJbXBsICpmaXJzdE1hcCA9IGZpcnN0RWxlbWVudC0+YXR0cmlidXRl
cygpOwpAQCAtMTEyOSw3ICsxMTMwLDcgQEAgYm9vbCBBcHBseVN0eWxlQ29tbWFuZDo6bWVyZ2VF
bmRXaXRoTmV4dAogICAgICAgICBlbmRPZmZzZXQgPSBwYXJlbnRMYXN0T2Zmc2V0OwogICAgIH0K
IAotICAgIGlmICghZW5kTm9kZS0+aXNFbGVtZW50Tm9kZSgpIHx8IGVuZE5vZGUtPmlkKCkgPT0g
SURfQlIpCisgICAgaWYgKCFlbmROb2RlLT5pc0VsZW1lbnROb2RlKCkgfHwgZW5kTm9kZS0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OmJyKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBO
b2RlSW1wbCAqbmV4dFNpYmxpbmcgPSBlbmROb2RlLT5uZXh0U2libGluZygpOwpAQCAtMTI3NCwx
NCArMTI3NSwxNCBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphZGRJbmxpbmVTdHlsZUlmCiAg
ICAgfQogCiAgICAgaWYgKHN0eWxlQ2hhbmdlLmFwcGx5Qm9sZCgpKSB7Ci0gICAgICAgIEVsZW1l
bnRJbXBsICpib2xkRWxlbWVudCA9IGRvY3VtZW50KCktPmNyZWF0ZUhUTUxFbGVtZW50KCJCIiwg
ZXhjZXB0aW9uQ29kZSk7CisgICAgICAgIEVsZW1lbnRJbXBsICpib2xkRWxlbWVudCA9IGRvY3Vt
ZW50KCktPmNyZWF0ZUVsZW1lbnROUyhYSFRNTF9OQU1FU1BBQ0UsICJiIiwgZXhjZXB0aW9uQ29k
ZSk7CiAgICAgICAgIEFTU0VSVChleGNlcHRpb25Db2RlID09IDApOwogICAgICAgICBpbnNlcnRO
b2RlQmVmb3JlKGJvbGRFbGVtZW50LCBzdGFydE5vZGUpOwogICAgICAgICBzdXJyb3VuZE5vZGVS
YW5nZVdpdGhFbGVtZW50KHN0YXJ0Tm9kZSwgZW5kTm9kZSwgYm9sZEVsZW1lbnQpOwogICAgIH0K
IAogICAgIGlmIChzdHlsZUNoYW5nZS5hcHBseUl0YWxpYygpKSB7Ci0gICAgICAgIEVsZW1lbnRJ
bXBsICppdGFsaWNFbGVtZW50ID0gZG9jdW1lbnQoKS0+Y3JlYXRlSFRNTEVsZW1lbnQoIkkiLCBl
eGNlcHRpb25Db2RlKTsKKyAgICAgICAgRWxlbWVudEltcGwgKml0YWxpY0VsZW1lbnQgPSBkb2N1
bWVudCgpLT5jcmVhdGVFbGVtZW50TlMoWEhUTUxfTkFNRVNQQUNFLCAiaSIsIGV4Y2VwdGlvbkNv
ZGUpOwogICAgICAgICBBU1NFUlQoZXhjZXB0aW9uQ29kZSA9PSAwKTsKICAgICAgICAgaW5zZXJ0
Tm9kZUJlZm9yZShpdGFsaWNFbGVtZW50LCBzdGFydE5vZGUpOwogICAgICAgICBzdXJyb3VuZE5v
ZGVSYW5nZVdpdGhFbGVtZW50KHN0YXJ0Tm9kZSwgZW5kTm9kZSwgaXRhbGljRWxlbWVudCk7Cklu
ZGV4OiBraHRtbC9lZGl0aW5nL2JyZWFrX2Jsb2NrcXVvdGVfY29tbWFuZC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWRpdGluZy9icmVha19ibG9ja3F1
b3RlX2NvbW1hbmQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtdSAtcCAtcjEu
MSBraHRtbC9lZGl0aW5nL2JyZWFrX2Jsb2NrcXVvdGVfY29tbWFuZC5jcHAKLS0tIGtodG1sL2Vk
aXRpbmcvYnJlYWtfYmxvY2txdW90ZV9jb21tYW5kLmNwcAkyNCBNYXkgMjAwNSAwNzoyMTo0NyAt
MDAwMAkxLjEKKysrIGtodG1sL2VkaXRpbmcvYnJlYWtfYmxvY2txdW90ZV9jb21tYW5kLmNwcAk4
IEp1bCAyMDA1IDAzOjA0OjAzIC0wMDAwCkBAIC0yOCw3ICsyOCw3IEBACiAjaW5jbHVkZSAiaHRt
bGVkaXRpbmcuaCIKICNpbmNsdWRlICJ2aXNpYmxlX3Bvc2l0aW9uLmgiCiAKLSNpbmNsdWRlICJt
aXNjL2h0bWx0YWdzLmgiCisjaW5jbHVkZSAiaHRtbG5hbWVzLmgiCiAjaW5jbHVkZSAieG1sL2Rv
bV9lbGVtZW50aW1wbC5oIgogI2luY2x1ZGUgInhtbC9kb21fdGV4dGltcGwuaCIKIApAQCAtNDMs
NiArNDMsNyBAQCB1c2luZyBET006OkVsZW1lbnRJbXBsOwogdXNpbmcgRE9NOjpOb2RlSW1wbDsK
IHVzaW5nIERPTTo6UG9zaXRpb247CiB1c2luZyBET006OlRleHRJbXBsOwordXNpbmcgRE9NOjpI
VE1MTmFtZXM7CiAKIG5hbWVzcGFjZSBraHRtbCB7CiAKQEAgLTE0Niw3ICsxNDcsNyBAQCB2b2lk
IEJyZWFrQmxvY2txdW90ZUNvbW1hbmQ6OmRvQXBwbHkoKQogICAgICAgICBib29sIHN0YXJ0SXNC
UiA9IGZhbHNlOwogICAgICAgICBpZiAoc3RhcnROb2RlICE9IHRvcEJsb2NrcXVvdGUpIHsKICAg
ICAgICAgICAgIE5vZGVJbXBsICpuID0gc3RhcnROb2RlOwotICAgICAgICAgICAgc3RhcnRJc0JS
ID0gbi0+aWQoKSA9PSBJRF9CUjsKKyAgICAgICAgICAgIHN0YXJ0SXNCUiA9IG4tPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjpicigpKTsKICAgICAgICAgICAgIGlmIChzdGFydElzQlIpCiAgICAgICAg
ICAgICAgICAgbiA9IG4tPm5leHRTaWJsaW5nKCk7CiAgICAgICAgICAgICB3aGlsZSAobikgewpJ
bmRleDoga2h0bWwvZWRpdGluZy9jb21wb3NpdGVfZWRpdF9jb21tYW5kLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL2NvbXBvc2l0ZV9lZGl0
X2NvbW1hbmQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjMKZGlmZiAtdSAtcCAtcjEuMyBr
aHRtbC9lZGl0aW5nL2NvbXBvc2l0ZV9lZGl0X2NvbW1hbmQuY3BwCi0tLSBraHRtbC9lZGl0aW5n
L2NvbXBvc2l0ZV9lZGl0X2NvbW1hbmQuY3BwCTI0IE1heSAyMDA1IDA3OjIxOjQ3IC0wMDAwCTEu
MworKysga2h0bWwvZWRpdGluZy9jb21wb3NpdGVfZWRpdF9jb21tYW5kLmNwcAk4IEp1bCAyMDA1
IDAzOjA0OjAzIC0wMDAwCkBAIC00Nyw3ICs0Nyw3IEBACiAjaW5jbHVkZSAid3JhcF9jb250ZW50
c19pbl9kdW1teV9zcGFuX2NvbW1hbmQuaCIKIAogI2luY2x1ZGUgIm1pc2MvaHRtbGF0dHJzLmgi
Ci0jaW5jbHVkZSAibWlzYy9odG1sdGFncy5oIgorI2luY2x1ZGUgImh0bWxuYW1lcy5oIgogI2lu
Y2x1ZGUgInJlbmRlcmluZy9yZW5kZXJfdGV4dC5oIgogI2luY2x1ZGUgInhtbC9kb20yX3Jhbmdl
aW1wbC5oIgogI2luY2x1ZGUgInhtbC9kb21fdGV4dGltcGwuaCIKQEAgLTY3LDYgKzY3LDcgQEAg
dXNpbmcgRE9NOjpOb2RlSW1wbDsKIHVzaW5nIERPTTo6UG9zaXRpb247CiB1c2luZyBET006OlJh
bmdlSW1wbDsKIHVzaW5nIERPTTo6VGV4dEltcGw7Cit1c2luZyBET006OkhUTUxOYW1lczsKIAog
bmFtZXNwYWNlIGtodG1sIHsKIApAQCAtMTI3LDE0ICsxMjgsMTQgQEAgdm9pZCBDb21wb3NpdGVF
ZGl0Q29tbWFuZDo6aW5zZXJ0UGFyYWdyYQogCiB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpp
bnNlcnROb2RlQmVmb3JlKE5vZGVJbXBsICppbnNlcnRDaGlsZCwgTm9kZUltcGwgKnJlZkNoaWxk
KQogewotICAgIEFTU0VSVChyZWZDaGlsZC0+aWQoKSAhPSBJRF9CT0RZKTsKKyAgICBBU1NFUlQo
IXJlZkNoaWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Ym9keSgpKSk7CiAgICAgRWRpdENvbW1h
bmRQdHIgY21kKG5ldyBJbnNlcnROb2RlQmVmb3JlQ29tbWFuZChkb2N1bWVudCgpLCBpbnNlcnRD
aGlsZCwgcmVmQ2hpbGQpKTsKICAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShjbWQpOwogfQog
CiB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjppbnNlcnROb2RlQWZ0ZXIoTm9kZUltcGwgKmlu
c2VydENoaWxkLCBOb2RlSW1wbCAqcmVmQ2hpbGQpCiB7Ci0gICAgQVNTRVJUKHJlZkNoaWxkLT5p
ZCgpICE9IElEX0JPRFkpOworICAgIEFTU0VSVCghcmVmQ2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjpib2R5KCkpKTsKICAgICBpZiAocmVmQ2hpbGQtPnBhcmVudE5vZGUoKS0+bGFzdENoaWxk
KCkgPT0gcmVmQ2hpbGQpIHsKICAgICAgICAgYXBwZW5kTm9kZShpbnNlcnRDaGlsZCwgcmVmQ2hp
bGQtPnBhcmVudE5vZGUoKSk7CiAgICAgfQpAQCAtNTQ1LDcgKzU0Niw3IEBAIHZvaWQgQ29tcG9z
aXRlRWRpdENvbW1hbmQ6Om1vdmVQYXJhZ3JhcGgKICAgICAvLyAgICAgICBhZGRpdGlvbmFsIGxl
dmVsIG9mIHF1b3RpbmcuCiAgICAgTm9kZUltcGwgKnN0YXJ0QmxvY2sgPSBwYXJhZ3JhcGhTdGFy
dC5ub2RlKCktPmVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQoKTsKICAgICBOb2RlSW1wbCAqbmV3
QmxvY2sgPSAwOwotICAgIGlmIChzdGFydEJsb2NrLT5pZCgpID09IElEX0JPRFkgfHwgKGlzTWFp
bEJsb2NrcXVvdGUoc3RhcnRCbG9jaykgJiYgcGFyYWdyYXBoU3RhcnQubm9kZSgpICE9IHN0YXJ0
QmxvY2spKQorICAgIGlmIChzdGFydEJsb2NrLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Ym9keSgp
KSB8fCAoaXNNYWlsQmxvY2txdW90ZShzdGFydEJsb2NrKSAmJiBwYXJhZ3JhcGhTdGFydC5ub2Rl
KCkgIT0gc3RhcnRCbG9jaykpCiAgICAgICAgIG5ld0Jsb2NrID0gY3JlYXRlRGVmYXVsdFBhcmFn
cmFwaEVsZW1lbnQoZG9jdW1lbnQoKSk7CiAgICAgZWxzZQogICAgICAgICBuZXdCbG9jayA9IHN0
YXJ0QmxvY2stPmNsb25lTm9kZShmYWxzZSk7CkBAIC01NTUsMTAgKzU1NiwxMCBAQCB2b2lkIENv
bXBvc2l0ZUVkaXRDb21tYW5kOjptb3ZlUGFyYWdyYXBoCiAgICAgICAgIG1vdmVOb2RlID0gbW92
ZU5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKTsKICAgICBOb2RlSW1wbCAqZW5kTm9kZSA9IHBhcmFn
cmFwaEVuZC5ub2RlKCk7CiAKLSAgICBpZiAocGFyYWdyYXBoU3RhcnQubm9kZSgpLT5pZCgpID09
IElEX0JPRFkpIHsKKyAgICBpZiAocGFyYWdyYXBoU3RhcnQubm9kZSgpLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6Ym9keSgpKSkgewogICAgICAgICBpbnNlcnROb2RlQXQobmV3QmxvY2ssIHBhcmFn
cmFwaFN0YXJ0Lm5vZGUoKSwgMCk7CiAgICAgfQotICAgIGVsc2UgaWYgKHBhcmFncmFwaFN0YXJ0
Lm5vZGUoKS0+aWQoKSA9PSBJRF9CUikgeworICAgIGVsc2UgaWYgKHBhcmFncmFwaFN0YXJ0Lm5v
ZGUoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJyKCkpKSB7CiAgICAgICAgIGluc2VydE5vZGVB
ZnRlcihuZXdCbG9jaywgcGFyYWdyYXBoU3RhcnQubm9kZSgpKTsKICAgICB9CiAgICAgZWxzZSB7
CkBAIC01NzgsNyArNTc5LDcgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6bW92ZVBhcmFn
cmFwaAogRWxlbWVudEltcGwgKmNyZWF0ZUJsb2NrUGxhY2Vob2xkZXJFbGVtZW50KERvY3VtZW50
SW1wbCAqZG9jdW1lbnQpCiB7CiAgICAgaW50IGV4Y2VwdGlvbkNvZGUgPSAwOwotICAgIEVsZW1l
bnRJbXBsICpicmVha05vZGUgPSBkb2N1bWVudC0+Y3JlYXRlSFRNTEVsZW1lbnQoImJyIiwgZXhj
ZXB0aW9uQ29kZSk7CisgICAgRWxlbWVudEltcGwgKmJyZWFrTm9kZSA9IGRvY3VtZW50LT5jcmVh
dGVFbGVtZW50TlMoWEhUTUxfTkFNRVNQQUNFLCAiYnIiLCBleGNlcHRpb25Db2RlKTsKICAgICBB
U1NFUlQoZXhjZXB0aW9uQ29kZSA9PSAwKTsKICAgICBicmVha05vZGUtPnNldEF0dHJpYnV0ZShB
VFRSX0NMQVNTLCBibG9ja1BsYWNlaG9sZGVyQ2xhc3NTdHJpbmcoKSk7CiAgICAgcmV0dXJuIGJy
ZWFrTm9kZTsKSW5kZXg6IGtodG1sL2VkaXRpbmcvZGVsZXRlX3NlbGVjdGlvbl9jb21tYW5kLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL2Rl
bGV0ZV9zZWxlY3Rpb25fY29tbWFuZC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNApkaWZm
IC11IC1wIC1yMS40IGtodG1sL2VkaXRpbmcvZGVsZXRlX3NlbGVjdGlvbl9jb21tYW5kLmNwcAot
LS0ga2h0bWwvZWRpdGluZy9kZWxldGVfc2VsZWN0aW9uX2NvbW1hbmQuY3BwCTUgSnVsIDIwMDUg
MjM6MjE6MDcgLTAwMDAJMS40CisrKyBraHRtbC9lZGl0aW5nL2RlbGV0ZV9zZWxlY3Rpb25fY29t
bWFuZC5jcHAJOCBKdWwgMjAwNSAwMzowNDowNCAtMDAwMApAQCAtMjgsNyArMjgsNyBAQAogI2lu
Y2x1ZGUgImNzcy9jc3NfY29tcHV0ZWRzdHlsZS5oIgogI2luY2x1ZGUgImh0bWxlZGl0aW5nLmgi
CiAjaW5jbHVkZSAia2h0bWxfcGFydC5oIgotI2luY2x1ZGUgIm1pc2MvaHRtbHRhZ3MuaCIKKyNp
bmNsdWRlICJodG1sbmFtZXMuaCIKICNpbmNsdWRlICJyZW5kZXJpbmcvcmVuZGVyX2xpbmUuaCIK
ICNpbmNsdWRlICJyZW5kZXJpbmcvcmVuZGVyX29iamVjdC5oIgogI2luY2x1ZGUgInZpc2libGVf
dGV4dC5oIgpAQCAtNTMsNiArNTMsNyBAQCB1c2luZyBET006Ok5vZGVJbXBsOwogdXNpbmcgRE9N
OjpQb3NpdGlvbjsKIHVzaW5nIERPTTo6UmFuZ2VJbXBsOwogdXNpbmcgRE9NOjpUZXh0SW1wbDsK
K3VzaW5nIERPTTo6SFRNTE5hbWVzOwogCiBuYW1lc3BhY2Uga2h0bWwgewogCkBAIC02MSw5ICs2
MiwxMyBAQCBzdGF0aWMgYm9vbCBpc0xpc3RTdHJ1Y3R1cmVOb2RlKGNvbnN0IE5vCiAgICAgLy8g
RklYTUU6IElycml0YXRpbmcgdGhhdCB3ZSBjYW4gZ2V0IGF3YXkgd2l0aCBqdXN0IGdvaW5nIGF0
IHRoZSByZW5kZXIgdHJlZSBmb3IgaXNUYWJsZVN0cnVjdHVyZU5vZGUsCiAgICAgLy8gYnV0IGhl
cmUgd2UgYWxzbyBoYXZlIHRvIHBlZWsgYXQgdGhlIHR5cGUgb2YgRE9NIG5vZGU/CiAgICAgUmVu
ZGVyT2JqZWN0ICpyID0gbm9kZS0+cmVuZGVyZXIoKTsKLSAgICBOb2RlSW1wbDo6SWQgbm9kZUlE
ID0gbm9kZS0+aWQoKTsKICAgICByZXR1cm4gKHIgJiYgci0+aXNMaXN0SXRlbSgpKQotICAgICAg
ICB8fCAobm9kZUlEID09IElEX09MIHx8IG5vZGVJRCA9PSBJRF9VTCB8fCBub2RlSUQgPT0gSURf
REQgfHwgbm9kZUlEID09IElEX0RUIHx8IG5vZGVJRCA9PSBJRF9ESVIgfHwgbm9kZUlEID09IElE
X01FTlUpOworICAgICAgICB8fCBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b2woKSkKKyAg
ICAgICAgfHwgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnVsKCkpCisgICAgICAgIHx8IG5v
ZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpkZCgpKQorICAgICAgICB8fCBub2RlLT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6ZHQoKSkKKyAgICAgICAgfHwgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OmRpcigpKQorICAgICAgICB8fCBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6bWVudSgp
KTsKIH0KIAogc3RhdGljIGludCBtYXhEZWVwT2Zmc2V0KE5vZGVJbXBsICpuKQpAQCAtMjc3LDgg
KzI4Miw4IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6c2F2ZVR5cGluZ1MKIGJvb2wg
RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6aGFuZGxlU3BlY2lhbENhc2VCUkRlbGV0ZSgpCiB7CiAg
ICAgLy8gQ2hlY2sgZm9yIHNwZWNpYWwtY2FzZSB3aGVyZSB0aGUgc2VsZWN0aW9uIGNvbnRhaW5z
IG9ubHkgYSBCUiBvbiBhIGxpbmUgYnkgaXRzZWxmIGFmdGVyIGFub3RoZXIgQlIuCi0gICAgYm9v
bCB1cHN0cmVhbVN0YXJ0SXNCUiA9IG1fc3RhcnROb2RlLT5pZCgpID09IElEX0JSOwotICAgIGJv
b2wgZG93bnN0cmVhbVN0YXJ0SXNCUiA9IG1fZG93bnN0cmVhbVN0YXJ0Lm5vZGUoKS0+aWQoKSA9
PSBJRF9CUjsKKyAgICBib29sIHVwc3RyZWFtU3RhcnRJc0JSID0gbV9zdGFydE5vZGUtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjpicigpKTsKKyAgICBib29sIGRvd25zdHJlYW1TdGFydElzQlIgPSBt
X2Rvd25zdHJlYW1TdGFydC5ub2RlKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpicigpKTsKICAg
ICBib29sIGlzQlJPbkxpbmVCeUl0c2VsZiA9IHVwc3RyZWFtU3RhcnRJc0JSICYmIGRvd25zdHJl
YW1TdGFydElzQlIgJiYgbV9kb3duc3RyZWFtU3RhcnQubm9kZSgpID09IG1fdXBzdHJlYW1FbmQu
bm9kZSgpOwogICAgIGlmIChpc0JST25MaW5lQnlJdHNlbGYpIHsKICAgICAgICAgcmVtb3ZlTm9k
ZShtX2Rvd25zdHJlYW1TdGFydC5ub2RlKCkpOwpAQCAtMzI2LDExICszMzEsMTEgQEAgdm9pZCBE
ZWxldGVTZWxlY3Rpb25Db21tYW5kOjpoYW5kbGVHZW5lcgogICAgIC8vIGVuZCBvZiBhIGJsb2Nr
IG90aGVyIHRoYW4gdGhlIGJsb2NrIGNvbnRhaW5pbmcgdGhlIHNlbGVjdGlvbiBzdGFydCwgdGhl
biBkbyBub3QgZGVsZXRlIHRoZSAKICAgICAvLyBzdGFydCBibG9jaywgb3RoZXJ3aXNlIGRlbGV0
ZSB0aGUgc3RhcnQgYmxvY2suCiAgICAgLy8gQSBzaW1pbGFyIGNhc2UgaXMgcHJvdmlkZWQgdG8g
Y292ZXIgc2VsZWN0aW9ucyBzdGFydGluZyBpbiBCUiBlbGVtZW50cy4KLSAgICBpZiAoc3RhcnRP
ZmZzZXQgPT0gMSAmJiBtX3N0YXJ0Tm9kZSAmJiBtX3N0YXJ0Tm9kZS0+aWQoKSA9PSBJRF9CUikg
eworICAgIGlmIChzdGFydE9mZnNldCA9PSAxICYmIG1fc3RhcnROb2RlICYmIG1fc3RhcnROb2Rl
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YnIoKSkpIHsKICAgICAgICAgc2V0U3RhcnROb2RlKG1f
c3RhcnROb2RlLT50cmF2ZXJzZU5leHROb2RlKCkpOwogICAgICAgICBzdGFydE9mZnNldCA9IDA7
CiAgICAgfQotICAgIGlmIChtX3N0YXJ0QmxvY2sgIT0gbV9lbmRCbG9jayAmJiBzdGFydE9mZnNl
dCA9PSAwICYmIG1fc3RhcnROb2RlICYmIG1fc3RhcnROb2RlLT5pZCgpID09IElEX0JSICYmIGVu
ZEF0RW5kT2ZCbG9jaykgeworICAgIGlmIChtX3N0YXJ0QmxvY2sgIT0gbV9lbmRCbG9jayAmJiBz
dGFydE9mZnNldCA9PSAwICYmIG1fc3RhcnROb2RlICYmIG1fc3RhcnROb2RlLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6YnIoKSkgJiYgZW5kQXRFbmRPZkJsb2NrKSB7CiAgICAgICAgIC8vIERvbid0
IGRlbGV0ZSB0aGUgQlIgZWxlbWVudAogICAgICAgICBzZXRTdGFydE5vZGUobV9zdGFydE5vZGUt
PnRyYXZlcnNlTmV4dE5vZGUoKSk7CiAgICAgfQpAQCAtNTUyLDcgKzU1Nyw3IEBAIHZvaWQgRGVs
ZXRlU2VsZWN0aW9uQ29tbWFuZDo6bW92ZU5vZGVzQWYKICAgICAgICAgTm9kZUltcGwgKm1vdmVO
b2RlID0gbm9kZTsKICAgICAgICAgbm9kZSA9IG5vZGUtPm5leHRTaWJsaW5nKCk7CiAgICAgICAg
IHJlbW92ZU5vZGUobW92ZU5vZGUpOwotICAgICAgICBpZiAobW92ZU5vZGUtPmlkKCkgPT0gSURf
QlIgJiYgIW1vdmVOb2RlLT5yZW5kZXJlcigpKSB7CisgICAgICAgIGlmIChtb3ZlTm9kZS0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OmJyKCkpICYmICFtb3ZlTm9kZS0+cmVuZGVyZXIoKSkgewogICAg
ICAgICAgICAgLy8gSnVzdCByZW1vdmUgdGhpcyBub2RlLCBhbmQgZG9uJ3QgcHV0IGl0IGJhY2su
CiAgICAgICAgICAgICAvLyBJZiB0aGUgQlIgd2FzIG5vdCByZW5kZXJlZCAoc2luY2UgaXQgd2Fz
IGF0IHRoZSBlbmQgb2YgYSBibG9jaywgZm9yIGluc3RhbmNlKSwgCiAgICAgICAgICAgICAvLyBw
dXR0aW5nIGl0IGJhY2sgaW4gdGhlIGRvY3VtZW50IG1pZ2h0IG1ha2UgaXQgYXBwZWFyLCBhbmQg
dGhhdCBpcyBub3QgZGVzaXJhYmxlLgpAQCAtNTYzLDcgKzU2OCw3IEBAIHZvaWQgRGVsZXRlU2Vs
ZWN0aW9uQ29tbWFuZDo6bW92ZU5vZGVzQWYKICAgICAgICAgZWxzZQogICAgICAgICAgICAgaW5z
ZXJ0Tm9kZUFmdGVyKG1vdmVOb2RlLCByZWZOb2RlKTsKICAgICAgICAgcmVmTm9kZSA9IG1vdmVO
b2RlOwotICAgICAgICBpZiAobW92ZU5vZGUtPmlkKCkgPT0gSURfQlIpCisgICAgICAgIGlmICht
b3ZlTm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJyKCkpKQogICAgICAgICAgICAgYnJlYWs7
CiAgICAgfQogCkluZGV4OiBraHRtbC9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL2h0bWxlZGl0aW5nLmNw
cCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yNDkKZGlmZiAtdSAtcCAtcjEuMjQ5IGtodG1sL2Vk
aXRpbmcvaHRtbGVkaXRpbmcuY3BwCi0tLSBraHRtbC9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAk1
IEp1bCAyMDA1IDIzOjIxOjA4IC0wMDAwCTEuMjQ5CisrKyBraHRtbC9lZGl0aW5nL2h0bWxlZGl0
aW5nLmNwcAk4IEp1bCAyMDA1IDAzOjA0OjA0IC0wMDAwCkBAIC00Miw3ICs0Miw3IEBACiAjaW5j
bHVkZSAiaHRtbF9pbWFnZWltcGwuaCIKICNpbmNsdWRlICJodG1sX2ludGVyY2hhbmdlLmgiCiAj
aW5jbHVkZSAiaHRtbGF0dHJzLmgiCi0jaW5jbHVkZSAiaHRtbHRhZ3MuaCIKKyNpbmNsdWRlICJo
dG1sbmFtZXMuaCIKICNpbmNsdWRlICJraHRtbF9wYXJ0LmgiCiAjaW5jbHVkZSAia2h0bWxfcGFy
dC5oIgogI2luY2x1ZGUgImtodG1sdmlldy5oIgpAQCAtODEsNiArODEsNyBAQCB1c2luZyBET006
OlBvc2l0aW9uOwogdXNpbmcgRE9NOjpSYW5nZUltcGw7CiB1c2luZyBET006OlRleHRJbXBsOwog
dXNpbmcgRE9NOjpUcmVlV2Fsa2VySW1wbDsKK3VzaW5nIERPTTo6SFRNTE5hbWVzOwogCiAjaWYg
QVBQTEVfQ0hBTkdFUwogI2luY2x1ZGUgIktXUUFzc2VydGlvbnMuaCIKQEAgLTEzMSwxMCArMTMy
LDEwIEBAIGJvb2wgaXNTcGVjaWFsRWxlbWVudChOb2RlSW1wbCAqbikKICAgICBpZiAoIW4tPmlz
SFRNTEVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKG4tPmlkKCkg
PT0gSURfQSAmJiBuLT5pc0xpbmsoKSkKKyAgICBpZiAobi0+aXNMaW5rKCkpCiAgICAgICAgIHJl
dHVybiB0cnVlOwogCi0gICAgaWYgKG4tPmlkKCkgPT0gSURfVUwgfHwgbi0+aWQoKSA9PSBJRF9P
TCB8fCBuLT5pZCgpID09IElEX0RMKQorICAgIGlmIChuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
dWwoKSkgfHwgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9sKCkpIHx8IG4tPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjpkbCgpKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBSZW5kZXJPYmpl
Y3QgKnJlbmRlcmVyID0gbi0+cmVuZGVyZXIoKTsKQEAgLTI2Nyw3ICsyNjgsNyBAQCBFbGVtZW50
SW1wbCAqY3JlYXRlRGVmYXVsdFBhcmFncmFwaEVsZW1lCiAgICAgLy8gV2Ugd291bGQgbmVlZCB0
aGlzIG1hcmdpbi16ZXJvaW5nIGNvZGUgYmFjayBpZiB3ZSBldmVyIHJldHVybiB0byB1c2luZyA8
cD4gZWxlbWVudHMgZm9yIGRlZmF1bHQgcGFyYWdyYXBocy4KICAgICAvLyBzdGF0aWMgY29uc3Qg
RE9NU3RyaW5nIGRlZmF1bHRQYXJhZ3JhcGhTdHlsZSgibWFyZ2luLXRvcDogMDsgbWFyZ2luLWJv
dHRvbTogMCIpOyAgICAKICAgICBpbnQgZXhjZXB0aW9uQ29kZSA9IDA7Ci0gICAgRWxlbWVudElt
cGwgKmVsZW1lbnQgPSBkb2N1bWVudC0+Y3JlYXRlSFRNTEVsZW1lbnQoImRpdiIsIGV4Y2VwdGlv
bkNvZGUpOworICAgIEVsZW1lbnRJbXBsICplbGVtZW50ID0gZG9jdW1lbnQtPmNyZWF0ZUVsZW1l
bnROUyhYSFRNTF9OQU1FU1BBQ0UsICJkaXYiLCBleGNlcHRpb25Db2RlKTsKICAgICBBU1NFUlQo
ZXhjZXB0aW9uQ29kZSA9PSAwKTsKICAgICByZXR1cm4gZWxlbWVudDsKIH0KQEAgLTI3NSw3ICsy
NzYsNyBAQCBFbGVtZW50SW1wbCAqY3JlYXRlRGVmYXVsdFBhcmFncmFwaEVsZW1lCiBFbGVtZW50
SW1wbCAqY3JlYXRlQnJlYWtFbGVtZW50KERvY3VtZW50SW1wbCAqZG9jdW1lbnQpCiB7CiAgICAg
aW50IGV4Y2VwdGlvbkNvZGUgPSAwOwotICAgIEVsZW1lbnRJbXBsICpicmVha05vZGUgPSBkb2N1
bWVudC0+Y3JlYXRlSFRNTEVsZW1lbnQoImJyIiwgZXhjZXB0aW9uQ29kZSk7CisgICAgRWxlbWVu
dEltcGwgKmJyZWFrTm9kZSA9IGRvY3VtZW50LT5jcmVhdGVFbGVtZW50TlMoWEhUTUxfTkFNRVNQ
QUNFLCAiYnIiLCBleGNlcHRpb25Db2RlKTsKICAgICBBU1NFUlQoZXhjZXB0aW9uQ29kZSA9PSAw
KTsKICAgICByZXR1cm4gYnJlYWtOb2RlOwogfQpAQCAtMzAzLDcgKzMwNCw3IEBAIE5vZGVJbXBs
ICpuZWFyZXN0TWFpbEJsb2NrcXVvdGUoY29uc3QgTm8KIAogYm9vbCBpc01haWxCbG9ja3F1b3Rl
KGNvbnN0IE5vZGVJbXBsICpub2RlKQogewotICAgIGlmICghbm9kZSB8fCAhbm9kZS0+cmVuZGVy
ZXIoKSB8fCAhbm9kZS0+aXNFbGVtZW50Tm9kZSgpICYmIG5vZGUtPmlkKCkgIT0gSURfQkxPQ0tR
VU9URSkKKyAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPnJlbmRlcmVyKCkgfHwgIW5vZGUtPmlzRWxl
bWVudE5vZGUoKSAmJiAhbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJsb2NrcXVvdGUoKSkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PGNvbnN0IEVsZW1lbnRJbXBsICo+KG5vZGUpLT5nZXRBdHRyaWJ1dGUoInR5cGUiKSA9PSAiY2l0
ZSI7CkluZGV4OiBraHRtbC9lZGl0aW5nL2luc2VydF9saW5lX2JyZWFrX2NvbW1hbmQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VkaXRpbmcvaW5zZXJ0
X2xpbmVfYnJlYWtfY29tbWFuZC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC11
IC1wIC1yMS4xIGtodG1sL2VkaXRpbmcvaW5zZXJ0X2xpbmVfYnJlYWtfY29tbWFuZC5jcHAKLS0t
IGtodG1sL2VkaXRpbmcvaW5zZXJ0X2xpbmVfYnJlYWtfY29tbWFuZC5jcHAJMjQgTWF5IDIwMDUg
MDc6MjE6NDcgLTAwMDAJMS4xCisrKyBraHRtbC9lZGl0aW5nL2luc2VydF9saW5lX2JyZWFrX2Nv
bW1hbmQuY3BwCTggSnVsIDIwMDUgMDM6MDQ6MDQgLTAwMDAKQEAgLTI5LDcgKzI5LDcgQEAKICNp
bmNsdWRlICJ2aXNpYmxlX3Bvc2l0aW9uLmgiCiAjaW5jbHVkZSAidmlzaWJsZV91bml0cy5oIgog
Ci0jaW5jbHVkZSAibWlzYy9odG1sdGFncy5oIgorI2luY2x1ZGUgImh0bWxuYW1lcy5oIgogI2lu
Y2x1ZGUgInhtbC9kb21fZG9jaW1wbC5oIgogI2luY2x1ZGUgInhtbC9kb21fZWxlbWVudGltcGwu
aCIKICNpbmNsdWRlICJ4bWwvZG9tMl9yYW5nZWltcGwuaCIKQEAgLTUwLDYgKzUwLDcgQEAgdXNp
bmcgRE9NOjpOb2RlSW1wbDsKIHVzaW5nIERPTTo6UG9zaXRpb247CiB1c2luZyBET006OlRleHRJ
bXBsOwogdXNpbmcgRE9NOjpDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbkltcGw7Cit1c2luZyBE
T006OkhUTUxOYW1lczsKIAogbmFtZXNwYWNlIGtodG1sIHsKIApAQCAtMTExLDEzICsxMTIsMTMg
QEAgdm9pZCBJbnNlcnRMaW5lQnJlYWtDb21tYW5kOjpkb0FwcGx5KCkKICAgICAgICAgLy8gVGhp
cyBtYWtlcyB0aGUgInJlYWwiIEJSIHdlIHdhbnQgdG8gaW5zZXJ0IGFwcGVhciBpbiB0aGUgcmVu
ZGVyaW5nIHdpdGhvdXQgYW55IAogICAgICAgICAvLyBzaWduaWZpY2FudCBzaWRlIGVmZmVjdHMg
KGFuZCBubyByZWFsIHdvcnJpZXMgZWl0aGVyIHNpbmNlIHlvdSBjYW4ndCBhcnJvdyBwYXN0IAog
ICAgICAgICAvLyB0aGlzIGV4dHJhIG9uZS4KLSAgICAgICAgaWYgKHBvcy5ub2RlKCktPmlkKCkg
PT0gSURfQlIgJiYgcG9zLm9mZnNldCgpID09IDApIHsKKyAgICAgICAgaWYgKHBvcy5ub2RlKCkt
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpicigpKSAmJiBwb3Mub2Zmc2V0KCkgPT0gMCkgewogICAg
ICAgICAgICAgLy8gQWxyZWFkeSBwbGFjZWQgaW4gYSB0cmFpbGluZyBCUi4gSW5zZXJ0ICJyZWFs
IiBCUiBiZWZvcmUgaXQgYW5kIGxlYXZlIHRoZSBzZWxlY3Rpb24gYWxvbmUuCiAgICAgICAgICAg
ICBpbnNlcnROb2RlQmVmb3JlKG5vZGVUb0luc2VydCwgcG9zLm5vZGUoKSk7CiAgICAgICAgIH0K
ICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBOb2RlSW1wbCAqbmV4dCA9IHBvcy5ub2RlKCkt
PnRyYXZlcnNlTmV4dE5vZGUoKTsKLSAgICAgICAgICAgIGJvb2wgaGFzVHJhaWxpbmdCUiA9IG5l
eHQgJiYgbmV4dC0+aWQoKSA9PSBJRF9CUiAmJiBwb3Mubm9kZSgpLT5lbmNsb3NpbmdCbG9ja0Zs
b3dFbGVtZW50KCkgPT0gbmV4dC0+ZW5jbG9zaW5nQmxvY2tGbG93RWxlbWVudCgpOworICAgICAg
ICAgICAgYm9vbCBoYXNUcmFpbGluZ0JSID0gbmV4dCAmJiBuZXh0LT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6YnIoKSkgJiYgcG9zLm5vZGUoKS0+ZW5jbG9zaW5nQmxvY2tGbG93RWxlbWVudCgpID09
IG5leHQtPmVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQoKTsKICAgICAgICAgICAgIGluc2VydE5v
ZGVBZnRlclBvc2l0aW9uKG5vZGVUb0luc2VydCwgcG9zKTsKICAgICAgICAgICAgIGlmIChoYXNU
cmFpbGluZ0JSKSB7CiAgICAgICAgICAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFNlbGVjdGlv
bihQb3NpdGlvbihuZXh0LCAwKSwgRE9XTlNUUkVBTSkpOwpJbmRleDoga2h0bWwvZWRpdGluZy9p
bnNlcnRfcGFyYWdyYXBoX3NlcGFyYXRvcl9jb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL2luc2VydF9wYXJhZ3JhcGhfc2VwYXJh
dG9yX2NvbW1hbmQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtdSAtcCAtcjEu
MSBraHRtbC9lZGl0aW5nL2luc2VydF9wYXJhZ3JhcGhfc2VwYXJhdG9yX2NvbW1hbmQuY3BwCi0t
LSBraHRtbC9lZGl0aW5nL2luc2VydF9wYXJhZ3JhcGhfc2VwYXJhdG9yX2NvbW1hbmQuY3BwCTI0
IE1heSAyMDA1IDA3OjIxOjQ3IC0wMDAwCTEuMQorKysga2h0bWwvZWRpdGluZy9pbnNlcnRfcGFy
YWdyYXBoX3NlcGFyYXRvcl9jb21tYW5kLmNwcAk4IEp1bCAyMDA1IDAzOjA0OjA1IC0wMDAwCkBA
IC0zMSw3ICszMSw3IEBACiAKICNpbmNsdWRlICJjc3MvY3NzX2NvbXB1dGVkc3R5bGUuaCIKICNp
bmNsdWRlICJjc3MvY3NzX3ZhbHVlaW1wbC5oIgotI2luY2x1ZGUgIm1pc2MvaHRtbHRhZ3MuaCIK
KyNpbmNsdWRlICJodG1sbmFtZXMuaCIKICNpbmNsdWRlICJ4bWwvZG9tX2RvY2ltcGwuaCIKICNp
bmNsdWRlICJ4bWwvZG9tX2VsZW1lbnRpbXBsLmgiCiAjaW5jbHVkZSAieG1sL2RvbV90ZXh0aW1w
bC5oIgpAQCAtNTAsNiArNTAsNyBAQCB1c2luZyBET006OkVsZW1lbnRJbXBsOwogdXNpbmcgRE9N
OjpOb2RlSW1wbDsKIHVzaW5nIERPTTo6UG9zaXRpb247CiB1c2luZyBET006OlRleHRJbXBsOwor
dXNpbmcgRE9NOjpIVE1MTmFtZXM7CiAKIG5hbWVzcGFjZSBraHRtbCB7CiAKQEAgLTIxMyw3ICsy
MTQsNyBAQCB2b2lkIEluc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQ6OmRvCiAgICAgLy8g
dGhlbiB0aGlzIDxicj4gd2lsbCBjb2xsYXBzZSBhd2F5IHdoZW4gd2UgYWRkIGEgYmxvY2sgYWZ0
ZXIgaXQuIEFkZCBhbiBleHRyYSA8YnI+LgogICAgIGlmICghZG9jdW1lbnQoKS0+aW5TdHJpY3RN
b2RlKCkpIHsKICAgICAgICAgUG9zaXRpb24gdXBzdHJlYW1Qb3MgPSBwb3MudXBzdHJlYW0oKTsK
LSAgICAgICAgaWYgKHVwc3RyZWFtUG9zLm5vZGUoKS0+aWQoKSA9PSBJRF9CUikKKyAgICAgICAg
aWYgKHVwc3RyZWFtUG9zLm5vZGUoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJyKCkpKQogICAg
ICAgICAgICAgaW5zZXJ0Tm9kZUFmdGVyKGNyZWF0ZUJyZWFrRWxlbWVudChkb2N1bWVudCgpKSwg
dXBzdHJlYW1Qb3Mubm9kZSgpKTsKICAgICB9CiAgICAgCkluZGV4OiBraHRtbC9lZGl0aW5nL21h
cmt1cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWRp
dGluZy9tYXJrdXAuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIzCmRpZmYgLXUgLXAgLXIx
LjIzIGtodG1sL2VkaXRpbmcvbWFya3VwLmNwcAotLS0ga2h0bWwvZWRpdGluZy9tYXJrdXAuY3Bw
CTUgSnVsIDIwMDUgMjM6MjE6MDggLTAwMDAJMS4yMworKysga2h0bWwvZWRpdGluZy9tYXJrdXAu
Y3BwCTggSnVsIDIwMDUgMDM6MDQ6MDUgLTAwMDAKQEAgLTM2LDggKzM2LDcgQEAKICNpbmNsdWRl
ICJ4bWwvZG9tMl9yYW5nZWltcGwuaCIKICNpbmNsdWRlICJyZW5kZXJpbmcvcmVuZGVyX3RleHQu
aCIKICNpbmNsdWRlICJtaXNjL2h0bWxhdHRycy5oIgotI2luY2x1ZGUgIm1pc2MvaHRtbHRhZ3Mu
aCIKLSNpbmNsdWRlICJodG1sL2R0ZC5oIgorI2luY2x1ZGUgImh0bWxuYW1lcy5oIgogCiB1c2lu
ZyBET006OkF0dHJpYnV0ZUltcGw7CiB1c2luZyBET006OkNvbW1lbnRJbXBsOwpAQCAtNDcsOSAr
NDYsOSBAQCB1c2luZyBET006OkRvY3VtZW50RnJhZ21lbnRJbXBsOwogdXNpbmcgRE9NOjpEb2N1
bWVudEltcGw7CiB1c2luZyBET006OkRPTVN0cmluZzsKIHVzaW5nIERPTTo6RWxlbWVudEltcGw7
Ci11c2luZyBET006OkZPUkJJRERFTjsKLXVzaW5nIERPTTo6ZW5kVGFnUmVxdWlyZW1lbnQ7Cit1
c2luZyBET006OlRhZ1N0YXR1c0ZvcmJpZGRlbjsKIHVzaW5nIERPTTo6SFRNTEVsZW1lbnRJbXBs
OwordXNpbmcgRE9NOjpIVE1MTmFtZXM7CiB1c2luZyBET006Ok5hbWVkQXR0ck1hcEltcGw7CiB1
c2luZyBET006Ok5vZGU7CiB1c2luZyBET006Ok5vZGVJbXBsOwpAQCAtMTc3LDEzICsxNzYsMTEg
QEAgc3RhdGljIFFTdHJpbmcgc3RhcnRNYXJrdXAoY29uc3QgTm9kZUltcAogICAgIHN3aXRjaCAo
dHlwZSkgewogICAgICAgICBjYXNlIE5vZGU6OlRFWFRfTk9ERTogewogICAgICAgICAgICAgaWYg
KG5vZGUtPnBhcmVudE5vZGUoKSkgewotICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+cGFy
ZW50Tm9kZSgpLT5pZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfUFJFOgotICAg
ICAgICAgICAgICAgICAgICBjYXNlIElEX1NDUklQVDoKLSAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBJRF9TVFlMRToKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9URVhUQVJFQToKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBzdHJpbmdWYWx1ZUZvclJhbmdlKG5vZGUsIHJhbmdl
KTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPnBhcmVudE5v
ZGUoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnByZSgpKSB8fAorICAgICAgICAgICAgICAgICAg
ICBub2RlLT5wYXJlbnROb2RlKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzY3JpcHQoKSkgfHwK
KyAgICAgICAgICAgICAgICAgICAgbm9kZS0+cGFyZW50Tm9kZSgpLT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6c3R5bGUoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+cGFyZW50Tm9kZSgp
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGV4dGFyZWEoKSkpCisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBzdHJpbmdWYWx1ZUZvclJhbmdlKG5vZGUsIHJhbmdlKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIFFTdHJpbmcgbWFya3VwID0gYW5ub3RhdGUgPyBlc2NhcGVIVE1MKHJlbmRl
cmVkVGV4dChub2RlLCByYW5nZSkpIDogZXNjYXBlSFRNTChzdHJpbmdWYWx1ZUZvclJhbmdlKG5v
ZGUsIHJhbmdlKSk7ICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoZGVmYXVsdFN0eWxlKSB7
CkBAIC0yNDgsOSArMjQ1LDEzIEBAIHN0YXRpYyBRU3RyaW5nIHN0YXJ0TWFya3VwKGNvbnN0IE5v
ZGVJbXAKIAogc3RhdGljIFFTdHJpbmcgZW5kTWFya3VwKGNvbnN0IE5vZGVJbXBsICpub2RlKQog
ewotICAgIGlmICgoIW5vZGUtPmlzSFRNTEVsZW1lbnQoKSB8fCBlbmRUYWdSZXF1aXJlbWVudChu
b2RlLT5pZCgpKSAhPSBGT1JCSURERU4pICYmIG5vZGUtPm5vZGVUeXBlKCkgIT0gTm9kZTo6VEVY
VF9OT0RFICYmIG5vZGUtPm5vZGVUeXBlKCkgIT0gTm9kZTo6RE9DVU1FTlRfTk9ERSkgewotICAg
ICAgICByZXR1cm4gIjwvIiArIG5vZGUtPm5vZGVOYW1lKCkuc3RyaW5nKCkgKyAiPiI7CisgICAg
Ym9vbCBoYXNFbmRUYWcgPSBub2RlLT5pc0VsZW1lbnROb2RlKCk7CisgICAgaWYgKG5vZGUtPmlz
SFRNTEVsZW1lbnQoKSkgeworICAgICAgICBjb25zdCBIVE1MRWxlbWVudEltcGwqIGh0bWxFbHQg
PSBzdGF0aWNfY2FzdDxjb25zdCBIVE1MRWxlbWVudEltcGwqPihub2RlKTsKKyAgICAgICAgaGFz
RW5kVGFnID0gKGh0bWxFbHQtPmVuZFRhZ1JlcXVpcmVtZW50KCkgIT0gVGFnU3RhdHVzRm9yYmlk
ZGVuKTsKICAgICB9CisgICAgaWYgKGhhc0VuZFRhZykKKyAgICAgICAgcmV0dXJuICI8LyIgKyBu
b2RlLT5ub2RlTmFtZSgpLnN0cmluZygpICsgIj4iOwogICAgIHJldHVybiAiIjsKIH0KIApAQCAt
MjY1LDggKzI2NiwxNCBAQCBzdGF0aWMgUVN0cmluZyBtYXJrdXAoY29uc3QgTm9kZUltcGwgKnN0
CiAgICAgICAgICAgICAgICAgbm9kZXMtPmFwcGVuZChjdXJyZW50KTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIG1lICs9IHN0YXJ0TWFya3VwKGN1cnJlbnQsIDAsIERvTm90QW5ub3RhdGVG
b3JJbnRlcmNoYW5nZSwgMCk7Ci0gICAgICAgIH0gICAgICAgIAotICAgICAgICBpZiAoIWN1cnJl
bnQtPmlzSFRNTEVsZW1lbnQoKSB8fCBlbmRUYWdSZXF1aXJlbWVudChjdXJyZW50LT5pZCgpKSAh
PSBGT1JCSURERU4pIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBjb250YWlu
ZXIgPSB0cnVlOworICAgICAgICBpZiAoY3VycmVudC0+aXNIVE1MRWxlbWVudCgpKSB7CisgICAg
ICAgICAgICBjb25zdCBIVE1MRWxlbWVudEltcGwqIGggPSBzdGF0aWNfY2FzdDxjb25zdCBIVE1M
RWxlbWVudEltcGwqPihjdXJyZW50KTsKKyAgICAgICAgICAgIGNvbnRhaW5lciA9IGgtPmVuZFRh
Z1JlcXVpcmVtZW50KCkgIT0gVGFnU3RhdHVzRm9yYmlkZGVuOworICAgICAgICB9CisgICAgICAg
IGlmIChjb250YWluZXIpIHsKICAgICAgICAgICAgIC8vIHByaW50IGNoaWxkcmVuCiAgICAgICAg
ICAgICBpZiAoTm9kZUltcGwgKm4gPSBjdXJyZW50LT5maXJzdENoaWxkKCkpIHsKICAgICAgICAg
ICAgICAgICBtZSArPSBtYXJrdXAobiwgZmFsc2UsIHRydWUsIG5vZGVzKTsKQEAgLTQxNCw5ICs0
MjEsOSBAQCBRU3RyaW5nIGNyZWF0ZU1hcmt1cChjb25zdCBSYW5nZUltcGwgKnJhCiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBib29sIGJyZWFrQXRFbmQgPSBmYWxzZTsKICAgICAgICAgICAg
IGlmIChjb21tb25BbmNlc3RvckJsb2NrID09IGFuY2VzdG9yKSB7Ci0gICAgICAgICAgICAgICAg
Tm9kZUltcGw6OklkIGlkID0gYW5jZXN0b3ItPmlkKCk7CiAgICAgICAgICAgICAgICAgLy8gSW5j
bHVkZSBhbmNlc3RvcnMgdGhhdCBhcmUgcmVxdWlyZWQgdG8gcmV0YWluIHRoZSBhcHBlYXJhbmNl
IG9mIHRoZSBjb3BpZWQgbWFya3VwLgotICAgICAgICAgICAgICAgIGlmIChpZCA9PSBJRF9QUkUg
fHwgaWQgPT0gSURfVEFCTEUgfHwgaWQgPT0gSURfT0wgfHwgaWQgPT0gSURfVUwpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoYW5jZXN0b3ItPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpwcmUoKSkgfHwg
YW5jZXN0b3ItPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0YWJsZSgpKSB8fAorICAgICAgICAgICAg
ICAgICAgICBhbmNlc3Rvci0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9sKCkpIHx8IGFuY2VzdG9y
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dWwoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgYnJl
YWtBdEVuZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CkBAIC01MzksNyArNTQ2LDcgQEAgRE9NOjpEb2N1bWVudEZyYWdtZW50SW1w
bCAqY3JlYXRlRnJhZ21lbgogICAgICAgICAgICAgRWxlbWVudEltcGwgKmVsZW1lbnQ7CiAgICAg
ICAgICAgICBpZiAocy5pc0VtcHR5KCkgJiYgbGlzdC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAg
ICAgICAvLyBGb3IgbGFzdCBsaW5lLCB1c2UgdGhlICJtYWdpYyBCUiIgcmF0aGVyIHRoYW4gYSBQ
LgotICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBkb2N1bWVudC0+Y3JlYXRlSFRNTEVsZW1lbnQo
ImJyIiwgZXhjZXB0aW9uQ29kZSk7CisgICAgICAgICAgICAgICAgZWxlbWVudCA9IGRvY3VtZW50
LT5jcmVhdGVFbGVtZW50TlMoWEhUTUxfTkFNRVNQQUNFLCAiYnIiLCBleGNlcHRpb25Db2RlKTsK
ICAgICAgICAgICAgICAgICBBU1NFUlQoZXhjZXB0aW9uQ29kZSA9PSAwKTsKICAgICAgICAgICAg
ICAgICBlbGVtZW50LT5yZWYoKTsKICAgICAgICAgICAgICAgICBlbGVtZW50LT5zZXRBdHRyaWJ1
dGUoQVRUUl9DTEFTUywgQXBwbGVJbnRlcmNoYW5nZU5ld2xpbmUpOyAgICAgICAgICAgIApJbmRl
eDoga2h0bWwvZWRpdGluZy9yZXBsYWNlX3NlbGVjdGlvbl9jb21tYW5kLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL3JlcGxhY2Vfc2VsZWN0
aW9uX2NvbW1hbmQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjQKZGlmZiAtdSAtcCAtcjEu
NCBraHRtbC9lZGl0aW5nL3JlcGxhY2Vfc2VsZWN0aW9uX2NvbW1hbmQuY3BwCi0tLSBraHRtbC9l
ZGl0aW5nL3JlcGxhY2Vfc2VsZWN0aW9uX2NvbW1hbmQuY3BwCTUgSnVsIDIwMDUgMjM6MjE6MDgg
LTAwMDAJMS40CisrKyBraHRtbC9lZGl0aW5nL3JlcGxhY2Vfc2VsZWN0aW9uX2NvbW1hbmQuY3Bw
CTggSnVsIDIwMDUgMDM6MDQ6MDYgLTAwMDAKQEAgLTI3LDcgKzI3LDcgQEAKIAogI2luY2x1ZGUg
InZpc2libGVfcG9zaXRpb24uaCIKICNpbmNsdWRlICJtaXNjL2h0bWxhdHRycy5oIgotI2luY2x1
ZGUgIm1pc2MvaHRtbHRhZ3MuaCIKKyNpbmNsdWRlICJodG1sbmFtZXMuaCIKICNpbmNsdWRlICJ4
bWwvZG9tX2RvY2ltcGwuaCIKICNpbmNsdWRlICJodG1sX2ludGVyY2hhbmdlLmgiCiAjaW5jbHVk
ZSAieG1sL2RvbV90ZXh0aW1wbC5oIgpAQCAtNTgsNiArNTgsNyBAQCB1c2luZyBET006OkRPTVN0
cmluZzsKIHVzaW5nIERPTTo6SFRNTEVsZW1lbnRJbXBsOwogdXNpbmcgRE9NOjpDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbkltcGw7CiB1c2luZyBET006OlBvc2l0aW9uOwordXNpbmcgRE9NOjpI
VE1MTmFtZXM7CiAKIG5hbWVzcGFjZSBraHRtbCB7CiAKQEAgLTE2NywzMCArMTY4LDE0IEBAIHN0
YXRpYyBib29sIGlzUHJvYmFibHlCbG9jayhjb25zdCBOb2RlSW0KICAgICBpZiAoIW5vZGUpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBzd2l0Y2ggKG5vZGUtPmlkKCkpIHsKLSAg
ICAgICAgY2FzZSBJRF9CTE9DS1FVT1RFOgotICAgICAgICBjYXNlIElEX0REOgotICAgICAgICBj
YXNlIElEX0RJVjoKLSAgICAgICAgY2FzZSBJRF9ETDoKLSAgICAgICAgY2FzZSBJRF9EVDoKLSAg
ICAgICAgY2FzZSBJRF9IMToKLSAgICAgICAgY2FzZSBJRF9IMjoKLSAgICAgICAgY2FzZSBJRF9I
MzoKLSAgICAgICAgY2FzZSBJRF9INDoKLSAgICAgICAgY2FzZSBJRF9INToKLSAgICAgICAgY2Fz
ZSBJRF9INjoKLSAgICAgICAgY2FzZSBJRF9IUjoKLSAgICAgICAgY2FzZSBJRF9MSToKLSAgICAg
ICAgY2FzZSBJRF9PTDoKLSAgICAgICAgY2FzZSBJRF9QOgotICAgICAgICBjYXNlIElEX1BSRToK
LSAgICAgICAgY2FzZSBJRF9URDoKLSAgICAgICAgY2FzZSBJRF9USDoKLSAgICAgICAgY2FzZSBJ
RF9VTDoKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4g
ZmFsc2U7CisgICAgLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24gc2VlbXMgcmVhbGx5IGJyb2tlbiB0
byBtZS4gIEl0IGlzbid0IGV2ZW4gaW5jbHVkaW5nIGFsbCB0aGUgYmxvY2stbGV2ZWwgZWxlbWVu
dHMuCisgICAgcmV0dXJuIChub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YmxvY2txdW90ZSgp
KSB8fCBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZGQoKSkgfHwgbm9kZS0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OmRpdigpKSB8fAorICAgICAgICAgICAgbm9kZS0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OmRsKCkpIHx8IG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpkdCgpKSB8fCBub2Rl
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDEoKSkgfHwKKyAgICAgICAgICAgIG5vZGUtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjpoMigpKSB8fCBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDMo
KSkgfHwgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omg0KCkpIHx8CisgICAgICAgICAgICBu
b2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDUoKSkgfHwgbm9kZS0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6Omg2KCkpIHx8IG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpocigpKSB8fAorICAg
ICAgICAgICAgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmxpKCkpIHx8IG5vZGUtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjpvbCgpKSB8fCBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6cCgp
KSB8fAorICAgICAgICAgICAgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnByZSgpKSB8fCBu
b2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGQoKSkgfHwgbm9kZS0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OnRoKCkpIHx8CisgICAgICAgICAgICBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
dWwoKSkpOwogfQogCiBzdGF0aWMgYm9vbCBpc01haWxQYXN0ZUFzUXVvdGF0aW9uTm9kZShjb25z
dCBOb2RlSW1wbCAqbm9kZSkKQEAgLTIxNCwxNiArMTk5LDggQEAgc3RhdGljIGJvb2wgaXNQcm9i
YWJseVRhYmxlU3RydWN0dXJlTm9kZQogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIAotICAgIHN3aXRjaCAobm9kZS0+aWQoKSkgewotICAgICAgICBjYXNlIElEX1RB
QkxFOgotICAgICAgICBjYXNlIElEX1RCT0RZOgotICAgICAgICBjYXNlIElEX1REOgotICAgICAg
ICBjYXNlIElEX1RGT09UOgotICAgICAgICBjYXNlIElEX1RIRUFEOgotICAgICAgICBjYXNlIElE
X1RSOgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsK
KyAgICByZXR1cm4gKG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0YWJsZSgpKSB8fCBub2Rl
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGJvZHkoKSkgfHwgbm9kZS0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OnRkKCkpIHx8CisgICAgICAgICAgICBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
dGZvb3QoKSkgfHwgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRoZWFkKCkpIHx8IG5vZGUt
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0cigpKSk7CiB9CiAKIHZvaWQgUmVwbGFjZW1lbnRGcmFn
bWVudDo6cHJ1bmVFbXB0eU5vZGVzKCkKQEAgLTI1MCw3ICsyMjcsNyBAQCB2b2lkIFJlcGxhY2Vt
ZW50RnJhZ21lbnQ6OnBydW5lRW1wdHlOb2RlCiBib29sIFJlcGxhY2VtZW50RnJhZ21lbnQ6Omlz
SW50ZXJjaGFuZ2VOZXdsaW5lTm9kZShjb25zdCBOb2RlSW1wbCAqbm9kZSkKIHsKICAgICBzdGF0
aWMgRE9NU3RyaW5nIGludGVyY2hhbmdlTmV3bGluZUNsYXNzU3RyaW5nKEFwcGxlSW50ZXJjaGFu
Z2VOZXdsaW5lKTsKLSAgICByZXR1cm4gbm9kZSAmJiBub2RlLT5pZCgpID09IElEX0JSICYmIHN0
YXRpY19jYXN0PGNvbnN0IEVsZW1lbnRJbXBsICo+KG5vZGUpLT5nZXRBdHRyaWJ1dGUoQVRUUl9D
TEFTUykgPT0gaW50ZXJjaGFuZ2VOZXdsaW5lQ2xhc3NTdHJpbmc7CisgICAgcmV0dXJuIG5vZGUg
JiYgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJyKCkpICYmIHN0YXRpY19jYXN0PGNvbnN0
IEVsZW1lbnRJbXBsICo+KG5vZGUpLT5nZXRBdHRyaWJ1dGUoQVRUUl9DTEFTUykgPT0gaW50ZXJj
aGFuZ2VOZXdsaW5lQ2xhc3NTdHJpbmc7CiB9CiAKIGJvb2wgUmVwbGFjZW1lbnRGcmFnbWVudDo6
aXNJbnRlcmNoYW5nZUNvbnZlcnRlZFNwYWNlU3Bhbihjb25zdCBOb2RlSW1wbCAqbm9kZSkKQEAg
LTUwNywxOCArNDg0LDE5IEBAIHZvaWQgUmVwbGFjZW1lbnRGcmFnbWVudDo6cmVtb3ZlU3R5bGVO
b2QKICAgICAgICAgTm9kZUltcGwgKm5leHQgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCk7CiAg
ICAgICAgIC8vIFRoaXMgbGlzdCBvZiB0YWdzIGNoYW5nZSB0aGUgYXBwZWFyYW5jZSBvZiBjb250
ZW50CiAgICAgICAgIC8vIGluIHdheXMgd2UgY2FuIGFkZCBiYWNrIG9uIGxhdGVyIHdpdGggQ1NT
LCBpZiBuZWNlc3NhcnkuCi0gICAgICAgIGlmIChub2RlLT5pZCgpID09IElEX0IgfHwgCi0gICAg
ICAgICAgICBub2RlLT5pZCgpID09IElEX0JJRyB8fCAKLSAgICAgICAgICAgIG5vZGUtPmlkKCkg
PT0gSURfQ0VOVEVSIHx8IAotICAgICAgICAgICAgbm9kZS0+aWQoKSA9PSBJRF9GT05UIHx8IAot
ICAgICAgICAgICAgbm9kZS0+aWQoKSA9PSBJRF9JIHx8IAotICAgICAgICAgICAgbm9kZS0+aWQo
KSA9PSBJRF9TIHx8IAotICAgICAgICAgICAgbm9kZS0+aWQoKSA9PSBJRF9TTUFMTCB8fCAKLSAg
ICAgICAgICAgIG5vZGUtPmlkKCkgPT0gSURfU1RSSUtFIHx8IAotICAgICAgICAgICAgbm9kZS0+
aWQoKSA9PSBJRF9TVUIgfHwgCi0gICAgICAgICAgICBub2RlLT5pZCgpID09IElEX1NVUCB8fCAK
LSAgICAgICAgICAgIG5vZGUtPmlkKCkgPT0gSURfVFQgfHwgCi0gICAgICAgICAgICBub2RlLT5p
ZCgpID09IElEX1UgfHwgCisgICAgICAgIC8vICBGSVhNRTogVGhpcyBsaXN0IGlzIGluY29tcGxl
dGUKKyAgICAgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpiKCkpIHx8IAorICAg
ICAgICAgICAgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJpZygpKSB8fCAKKyAgICAgICAg
ICAgIG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpjZW50ZXIoKSkgfHwgCisgICAgICAgICAg
ICBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Zm9udCgpKSB8fCAKKyAgICAgICAgICAgIG5v
ZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppKCkpIHx8IAorICAgICAgICAgICAgbm9kZS0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OnMoKSkgfHwgCisgICAgICAgICAgICBub2RlLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6c21hbGwoKSkgfHwgCisgICAgICAgICAgICBub2RlLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6c3RyaWtlKCkpIHx8IAorICAgICAgICAgICAgbm9kZS0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OnN1YigpKSB8fCAKKyAgICAgICAgICAgIG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjpzdXAoKSkgfHwgCisgICAgICAgICAgICBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dHQo
KSkgfHwgCisgICAgICAgICAgICBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dSgpKSB8fCAK
ICAgICAgICAgICAgIGlzU3R5bGVTcGFuKG5vZGUpKSB7CiAgICAgICAgICAgICByZW1vdmVOb2Rl
UHJlc2VydmluZ0NoaWxkcmVuKG5vZGUpOwogICAgICAgICB9CkBAIC03NDQsNyArNzIyLDcgQEAg
dm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgaWYgKCFsaW5lUGxh
Y2Vob2xkZXIpIHsKICAgICAgICAgUG9zaXRpb24gZG93bnN0cmVhbSA9IHN0YXJ0UG9zLmRvd25z
dHJlYW0oKTsKICAgICAgICAgZG93bnN0cmVhbSA9IHBvc2l0aW9uT3V0c2lkZUNvbnRhaW5pbmdT
cGVjaWFsRWxlbWVudChkb3duc3RyZWFtKTsKLSAgICAgICAgaWYgKGRvd25zdHJlYW0ubm9kZSgp
LT5pZCgpID09IElEX0JSICYmIGRvd25zdHJlYW0ub2Zmc2V0KCkgPT0gMCAmJiAKKyAgICAgICAg
aWYgKGRvd25zdHJlYW0ubm9kZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YnIoKSkgJiYgZG93
bnN0cmVhbS5vZmZzZXQoKSA9PSAwICYmIAogICAgICAgICAgICAgbV9mcmFnbWVudC5oYXNJbnRl
cmNoYW5nZU5ld2xpbmVBdEVuZCgpICYmCiAgICAgICAgICAgICBpc1N0YXJ0T2ZMaW5lKFZpc2li
bGVQb3NpdGlvbihkb3duc3RyZWFtLCBWUF9ERUZBVUxUX0FGRklOSVRZKSkpCiAgICAgICAgICAg
ICBsaW5lUGxhY2Vob2xkZXIgPSBkb3duc3RyZWFtLm5vZGUoKTsKQEAgLTkwNiwxMiArODg0LDEy
IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkoKQogICAgICAgICB9CiAg
ICAgfSAKICAgICBlbHNlIHsKLSAgICAgICAgaWYgKG1fbGFzdE5vZGVJbnNlcnRlZCAmJiBtX2xh
c3ROb2RlSW5zZXJ0ZWQtPmlkKCkgPT0gSURfQlIgJiYgIWRvY3VtZW50KCktPmluU3RyaWN0TW9k
ZSgpKSB7CisgICAgICAgIGlmIChtX2xhc3ROb2RlSW5zZXJ0ZWQgJiYgbV9sYXN0Tm9kZUluc2Vy
dGVkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YnIoKSkgJiYgIWRvY3VtZW50KCktPmluU3RyaWN0
TW9kZSgpKSB7CiAgICAgICAgICAgICBkb2N1bWVudCgpLT51cGRhdGVMYXlvdXQoKTsKICAgICAg
ICAgICAgIFZpc2libGVQb3NpdGlvbiBwb3MoUG9zaXRpb24obV9sYXN0Tm9kZUluc2VydGVkLCAx
KSwgRE9XTlNUUkVBTSk7CiAgICAgICAgICAgICBpZiAoaXNFbmRPZkJsb2NrKHBvcykpIHsKICAg
ICAgICAgICAgICAgICBOb2RlSW1wbCAqbmV4dCA9IG1fbGFzdE5vZGVJbnNlcnRlZC0+dHJhdmVy
c2VOZXh0Tm9kZSgpOwotICAgICAgICAgICAgICAgIGJvb2wgaGFzVHJhaWxpbmdCUiA9IG5leHQg
JiYgbmV4dC0+aWQoKSA9PSBJRF9CUiAmJiBtX2xhc3ROb2RlSW5zZXJ0ZWQtPmVuY2xvc2luZ0Js
b2NrRmxvd0VsZW1lbnQoKSA9PSBuZXh0LT5lbmNsb3NpbmdCbG9ja0Zsb3dFbGVtZW50KCk7Cisg
ICAgICAgICAgICAgICAgYm9vbCBoYXNUcmFpbGluZ0JSID0gbmV4dCAmJiBuZXh0LT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6YnIoKSkgJiYgbV9sYXN0Tm9kZUluc2VydGVkLT5lbmNsb3NpbmdCbG9j
a0Zsb3dFbGVtZW50KCkgPT0gbmV4dC0+ZW5jbG9zaW5nQmxvY2tGbG93RWxlbWVudCgpOwogICAg
ICAgICAgICAgICAgIGlmICghaGFzVHJhaWxpbmdCUikgewogICAgICAgICAgICAgICAgICAgICAv
LyBJbnNlcnQgYW4gImV4dHJhIiBCUiBhdCB0aGUgZW5kIG9mIHRoZSBibG9jay4gCiAgICAgICAg
ICAgICAgICAgICAgIGluc2VydE5vZGVCZWZvcmUoY3JlYXRlQnJlYWtFbGVtZW50KGRvY3VtZW50
KCkpLCBtX2xhc3ROb2RlSW5zZXJ0ZWQpOwpAQCAtOTM4LDcgKzkxNiw3IEBAIHZvaWQgUmVwbGFj
ZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkoKQogICAgICAgICAgICAgICAgIGluc2VydE5vZGVB
ZnRlcihub2RlLCByZWZOb2RlKTsKICAgICAgICAgICAgICAgICByZWZOb2RlID0gbm9kZTsKICAg
ICAgICAgICAgICAgICAvLyBXZSB3YW50IHRvIG1vdmUgdGhlIGZpcnN0IEJSIHdlIHNlZSwgc28g
Y2hlY2sgZm9yIHRoYXQgaGVyZS4KLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+aWQoKSA9PSBJ
RF9CUikKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJy
KCkpKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBub2RlID0g
bmV4dDsKICAgICAgICAgICAgIH0KQEAgLTEwODYsNyArMTA2NCw3IEBAIHZvaWQgUmVwbGFjZVNl
bGVjdGlvbkNvbW1hbmQ6OnVwZGF0ZU5vZGUKICAgICAKICAgICAvLyB1cGRhdGUgbV9sYXN0Tm9k
ZUluc2VydGVkCiAgICAgTm9kZUltcGwgKm9sZCA9IG1fbGFzdE5vZGVJbnNlcnRlZDsKLSAgICBt
X2xhc3ROb2RlSW5zZXJ0ZWQgPSBub2RlLT5sYXN0RGVzY2VuZGVudCgpOworICAgIG1fbGFzdE5v
ZGVJbnNlcnRlZCA9IG5vZGUtPmxhc3REZXNjZW5kYW50KCk7CiAgICAgbV9sYXN0Tm9kZUluc2Vy
dGVkLT5yZWYoKTsKICAgICBpZiAob2xkKQogICAgICAgICBvbGQtPmRlcmVmKCk7CkluZGV4OiBr
aHRtbC9lZGl0aW5nL3NlbGVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L1dlYkNvcmUva2h0bWwvZWRpdGluZy9zZWxlY3Rpb24uY3BwLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjg5CmRpZmYgLXUgLXAgLXIxLjg5IGtodG1sL2VkaXRpbmcvc2VsZWN0aW9uLmNwcAotLS0g
a2h0bWwvZWRpdGluZy9zZWxlY3Rpb24uY3BwCTIzIEp1biAyMDA1IDE5OjQ3OjQ4IC0wMDAwCTEu
ODkKKysrIGtodG1sL2VkaXRpbmcvc2VsZWN0aW9uLmNwcAk4IEp1bCAyMDA1IDAzOjA0OjA3IC0w
MDAwCkBAIC0zMyw3ICszMyw2IEBACiAjaW5jbHVkZSAiZG9tL2RvbV9zdHJpbmcuaCIKICNpbmNs
dWRlICJraHRtbF9wYXJ0LmgiCiAjaW5jbHVkZSAia2h0bWx2aWV3LmgiCi0jaW5jbHVkZSAibWlz
Yy9odG1sdGFncy5oIgogI2luY2x1ZGUgInJlbmRlcmluZy9yZW5kZXJfb2JqZWN0LmgiCiAjaW5j
bHVkZSAicmVuZGVyaW5nL3JlbmRlcl9zdHlsZS5oIgogI2luY2x1ZGUgInJlbmRlcmluZy9yZW5k
ZXJfdGV4dC5oIgpAQCAtOTM4LDcgKzkzNyw3IEBAIHZvaWQgU2VsZWN0aW9uOjpkZWJ1Z1JlbmRl
cmVyKFJlbmRlck9iamUKIHsKICAgICBpZiAoci0+bm9kZSgpLT5pc0VsZW1lbnROb2RlKCkpIHsK
ICAgICAgICAgRWxlbWVudEltcGwgKmVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50SW1wbCAq
PihyLT5ub2RlKCkpOwotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzJXNcbiIsIHNlbGVjdGVk
ID8gIj09PiAiIDogIiAgICAiLCBlbGVtZW50LT50YWdOYW1lKCkuc3RyaW5nKCkubGF0aW4xKCkp
OworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzJXNcbiIsIHNlbGVjdGVkID8gIj09PiAiIDog
IiAgICAiLCBlbGVtZW50LT5sb2NhbE5hbWUoKS5zdHJpbmcoKS5sYXRpbjEoKSk7CiAgICAgfQog
ICAgIGVsc2UgaWYgKHItPmlzVGV4dCgpKSB7CiAgICAgICAgIFJlbmRlclRleHQgKnRleHRSZW5k
ZXJlciA9IHN0YXRpY19jYXN0PFJlbmRlclRleHQgKj4ocik7CkluZGV4OiBraHRtbC9lZGl0aW5n
L3Zpc2libGVfcG9zaXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJD
b3JlL2todG1sL2VkaXRpbmcvdmlzaWJsZV9wb3NpdGlvbi5jcHAsdgpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuNTEKZGlmZiAtdSAtcCAtcjEuNTEga2h0bWwvZWRpdGluZy92aXNpYmxlX3Bvc2l0aW9u
LmNwcAotLS0ga2h0bWwvZWRpdGluZy92aXNpYmxlX3Bvc2l0aW9uLmNwcAkyMyBKdW4gMjAwNSAx
OTo0Nzo0OSAtMDAwMAkxLjUxCisrKyBraHRtbC9lZGl0aW5nL3Zpc2libGVfcG9zaXRpb24uY3Bw
CTggSnVsIDIwMDUgMDM6MDQ6MDcgLTAwMDAKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlICJ2
aXNpYmxlX3Bvc2l0aW9uLmgiCiAjaW5jbHVkZSAidmlzaWJsZV91bml0cy5oIgogCi0jaW5jbHVk
ZSAibWlzYy9odG1sdGFncy5oIgorI2luY2x1ZGUgImh0bWxuYW1lcy5oIgogI2luY2x1ZGUgInJl
bmRlcmluZy9yZW5kZXJfbGluZS5oIgogI2luY2x1ZGUgInJlbmRlcmluZy9yZW5kZXJfb2JqZWN0
LmgiCiAjaW5jbHVkZSAicmVuZGVyaW5nL3JlbmRlcl90ZXh0LmgiCkBAIC01MCw2ICs1MCw3IEBA
IHVzaW5nIERPTTo6UG9zaXRpb247CiB1c2luZyBET006OlJhbmdlOwogdXNpbmcgRE9NOjpSYW5n
ZUltcGw7CiB1c2luZyBET006OlRleHRJbXBsOwordXNpbmcgRE9NOjpIVE1MTmFtZXM7CiAKIG5h
bWVzcGFjZSBraHRtbCB7CiAKQEAgLTc0LDcgKzc1LDcgQEAgdm9pZCBWaXNpYmxlUG9zaXRpb246
OmluaXQoY29uc3QgUG9zaXRpbwogICAgIG1fYWZmaW5pdHkgPSBhZmZpbml0eTsKIAogICAgIC8v
IEZvciA8YnI+IDAsIGl0J3MgaW1wb3J0YW50IG5vdCB0byBtb3ZlIHBhc3QgdGhlIDxicj4uCi0g
ICAgaWYgKHBvcy5ub2RlKCkgJiYgcG9zLm5vZGUoKS0+aWQoKSA9PSBJRF9CUiAmJiBwb3Mub2Zm
c2V0KCkgPT0gMCkKKyAgICBpZiAocG9zLm5vZGUoKSAmJiBwb3Mubm9kZSgpLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6YnIoKSkgJiYgcG9zLm9mZnNldCgpID09IDApCiAgICAgICAgIGluaXRVcHN0
cmVhbShwb3MpOwogICAgIGVsc2UKICAgICAgICAgaW5pdERvd25zdHJlYW0ocG9zKTsKQEAgLTI3
NCw3ICsyNzUsNyBAQCBib29sIFZpc2libGVQb3NpdGlvbjo6aXNDYW5kaWRhdGUoY29uc3QgCiAg
ICAgfQogICAgIAogICAgIGlmIChyZW5kZXJlci0+aXNCbG9ja0Zsb3coKSAmJiAoIXJlbmRlcmVy
LT5maXJzdENoaWxkKCkgfHwgIXBvcy5ub2RlKCktPmZpcnN0Q2hpbGQoKSkgJiYgCi0gICAgICAg
KHJlbmRlcmVyLT5oZWlnaHQoKSB8fCBwb3Mubm9kZSgpLT5pZCgpID09IElEX0JPRFkpKSB7Cisg
ICAgICAgKHJlbmRlcmVyLT5oZWlnaHQoKSB8fCBwb3Mubm9kZSgpLT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6Ym9keSgpKSkpIHsKICAgICAgICAgLy8gcmV0dXJuIHRydWUgZm9yIG9mZnNldCAwIGlu
dG8gcmVuZGVyZWQgYmxvY2tzIHRoYXQgYXJlIGVtcHR5IG9mIHJlbmRlcmVkIGtpZHMsIGJ1dCBo
YXZlIGEgaGVpZ2h0CiAgICAgICAgIHJldHVybiBwb3Mub2Zmc2V0KCkgPT0gMDsKICAgICB9CkBA
IC0zNTksNyArMzYwLDcgQEAgbG9uZyBWaXNpYmxlUG9zaXRpb246Om1heE9mZnNldChjb25zdCBO
bwogCiBib29sIFZpc2libGVQb3NpdGlvbjo6aXNBdG9taWNOb2RlKGNvbnN0IE5vZGVJbXBsICpu
b2RlKQogewotICAgIHJldHVybiBub2RlICYmICghbm9kZS0+aGFzQ2hpbGROb2RlcygpIHx8IChu
b2RlLT5pZCgpID09IElEX09CSkVDVCAmJiBub2RlLT5yZW5kZXJlcigpICYmIG5vZGUtPnJlbmRl
cmVyKCktPmlzUmVwbGFjZWQoKSkpOworICAgIHJldHVybiBub2RlICYmICghbm9kZS0+aGFzQ2hp
bGROb2RlcygpIHx8IChub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b2JqZWN0KCkpICYmIG5v
ZGUtPnJlbmRlcmVyKCkgJiYgbm9kZS0+cmVuZGVyZXIoKS0+aXNSZXBsYWNlZCgpKSk7CiB9CiAK
IFFDaGFyIFZpc2libGVQb3NpdGlvbjo6Y2hhcmFjdGVyKCkgY29uc3QKSW5kZXg6IGtodG1sL2Vk
aXRpbmcvdmlzaWJsZV90ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2Vi
Q29yZS9raHRtbC9lZGl0aW5nL3Zpc2libGVfdGV4dC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuMjcKZGlmZiAtdSAtcCAtcjEuMjcga2h0bWwvZWRpdGluZy92aXNpYmxlX3RleHQuY3BwCi0t
LSBraHRtbC9lZGl0aW5nL3Zpc2libGVfdGV4dC5jcHAJMTMgTWF5IDIwMDUgMTY6NDg6NTEgLTAw
MDAJMS4yNworKysga2h0bWwvZWRpdGluZy92aXNpYmxlX3RleHQuY3BwCTggSnVsIDIwMDUgMDM6
MDQ6MDggLTAwMDAKQEAgLTI1LDcgKzI1LDcgQEAKIAogI2luY2x1ZGUgInZpc2libGVfdGV4dC5o
IgogCi0jaW5jbHVkZSAibWlzYy9odG1sdGFncy5oIgorI2luY2x1ZGUgImh0bWxuYW1lcy5oIgog
I2luY2x1ZGUgInJlbmRlcmluZy9yZW5kZXJfdGV4dC5oIgogI2luY2x1ZGUgInhtbC9kb21fbm9k
ZWltcGwuaCIKICNpbmNsdWRlICJ4bWwvZG9tX3Bvc2l0aW9uLmgiCkBAIC0zNyw2ICszNyw3IEBA
IHVzaW5nIERPTTo6Tm9kZTsKIHVzaW5nIERPTTo6Tm9kZUltcGw7CiB1c2luZyBET006Om9mZnNl
dEluQ2hhcmFjdGVyczsKIHVzaW5nIERPTTo6UmFuZ2VJbXBsOwordXNpbmcgRE9NOjpIVE1MTmFt
ZXM7CiAKIC8vIEZJWE1FOiBUaGVzZSBjbGFzc2VzIHNob3VsZCBwcm9iYWJseSB1c2UgdGhlIHJl
bmRlciB0cmVlIGFuZCBub3QgdGhlIERPTSB0cmVlLCBzaW5jZSBlbGVtZW50cyBjb3VsZAogLy8g
YmUgaGlkZGVuIHVzaW5nIENTUywgb3IgYWRkaXRpb25hbCBnZW5lcmF0ZWQgY29udGVudCBjb3Vs
ZCBiZSBhZGRlZC4gIEZvciBub3csIHdlIGp1c3QgbWFrZSBzdXJlCkBAIC0zMzYsNDEgKzMzNywy
NSBAQCBib29sIFRleHRJdGVyYXRvcjo6aGFuZGxlUmVwbGFjZWRFbGVtZW50CiAKIGJvb2wgVGV4
dEl0ZXJhdG9yOjpoYW5kbGVOb25UZXh0Tm9kZSgpCiB7Ci0gICAgc3dpdGNoIChtX25vZGUtPmlk
KCkpIHsKLSAgICAgICAgY2FzZSBJRF9CUjogewotICAgICAgICAgICAgZW1pdENoYXJhY3Rlcign
XG4nLCBtX25vZGUtPnBhcmVudE5vZGUoKSwgbV9ub2RlLCAwLCAxKTsKLSAgICAgICAgICAgIGJy
ZWFrOworICAgIGlmIChtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpicigpKSkgeworICAg
ICAgICBlbWl0Q2hhcmFjdGVyKCdcbicsIG1fbm9kZS0+cGFyZW50Tm9kZSgpLCBtX25vZGUsIDAs
IDEpOworICAgIH0gZWxzZSBpZiAobV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGQoKSkg
fHwgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGgoKSkpIHsKKyAgICAgICAgaWYgKG1f
bGFzdENoYXJhY3RlciAhPSAnXG4nICYmIG1fbGFzdFRleHROb2RlKSB7CisgICAgICAgICAgICBl
bWl0Q2hhcmFjdGVyKCdcdCcsIG1fbGFzdFRleHROb2RlLT5wYXJlbnROb2RlKCksIG1fbGFzdFRl
eHROb2RlLCAwLCAxKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAobV9ub2RlLT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6YmxvY2txdW90ZSgpKSB8fCBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjpkZCgpKSB8fAorICAgICAgICAgICAgICAgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6ZGl2KCkpIHx8CisgICAgICAgICAgICAgICBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjpkbCgpKSB8fCBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpkdCgpKSB8fCAKKyAgICAg
ICAgICAgICAgIG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmgxKCkpIHx8IG1fbm9kZS0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OmgyKCkpIHx8CisgICAgICAgICAgICAgICBtX25vZGUtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjpoMygpKSB8fCBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjpoNCgpKSB8fAorICAgICAgICAgICAgICAgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
aDUoKSkgfHwgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDYoKSkgfHwKKyAgICAgICAg
ICAgICAgIG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmhyKCkpIHx8IG1fbm9kZS0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OmxpKCkpIHx8CisgICAgICAgICAgICAgICBtX25vZGUtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjpvbCgpKSB8fCBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpw
KCkpIHx8CisgICAgICAgICAgICAgICBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpwcmUo
KSkgfHwgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dHIoKSkgfHwKKyAgICAgICAgICAg
ICAgIG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnVsKCkpKSB7CisgICAgICAgIGlmICht
X2xhc3RDaGFyYWN0ZXIgIT0gJ1xuJyAmJiBtX2xhc3RUZXh0Tm9kZSkgeworICAgICAgICAgICAg
ZW1pdENoYXJhY3RlcignXG4nLCBtX2xhc3RUZXh0Tm9kZS0+cGFyZW50Tm9kZSgpLCBtX2xhc3RU
ZXh0Tm9kZSwgMCwgMSk7CiAgICAgICAgIH0KLQotICAgICAgICBjYXNlIElEX1REOgotICAgICAg
ICBjYXNlIElEX1RIOgotICAgICAgICAgICAgaWYgKG1fbGFzdENoYXJhY3RlciAhPSAnXG4nICYm
IG1fbGFzdFRleHROb2RlKSB7Ci0gICAgICAgICAgICAgICAgZW1pdENoYXJhY3RlcignXHQnLCBt
X2xhc3RUZXh0Tm9kZS0+cGFyZW50Tm9kZSgpLCBtX2xhc3RUZXh0Tm9kZSwgMCwgMSk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIElEX0JMT0NLUVVP
VEU6Ci0gICAgICAgIGNhc2UgSURfREQ6Ci0gICAgICAgIGNhc2UgSURfRElWOgotICAgICAgICBj
YXNlIElEX0RMOgotICAgICAgICBjYXNlIElEX0RUOgotICAgICAgICBjYXNlIElEX0gxOgotICAg
ICAgICBjYXNlIElEX0gyOgotICAgICAgICBjYXNlIElEX0gzOgotICAgICAgICBjYXNlIElEX0g0
OgotICAgICAgICBjYXNlIElEX0g1OgotICAgICAgICBjYXNlIElEX0g2OgotICAgICAgICBjYXNl
IElEX0hSOgotICAgICAgICBjYXNlIElEX0xJOgotICAgICAgICBjYXNlIElEX09MOgotICAgICAg
ICBjYXNlIElEX1A6Ci0gICAgICAgIGNhc2UgSURfUFJFOgotICAgICAgICBjYXNlIElEX1RSOgot
ICAgICAgICBjYXNlIElEX1VMOgotICAgICAgICAgICAgaWYgKG1fbGFzdENoYXJhY3RlciAhPSAn
XG4nICYmIG1fbGFzdFRleHROb2RlKSB7Ci0gICAgICAgICAgICAgICAgZW1pdENoYXJhY3Rlcign
XG4nLCBtX2xhc3RUZXh0Tm9kZS0+cGFyZW50Tm9kZSgpLCBtX2xhc3RUZXh0Tm9kZSwgMCwgMSk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKICAgICB9CiAKICAgICByZXR1cm4g
dHJ1ZTsKQEAgLTM4MSw0OSArMzY2LDM3IEBAIHZvaWQgVGV4dEl0ZXJhdG9yOjpleGl0Tm9kZSgp
CiAgICAgYm9vbCBlbmRMaW5lID0gZmFsc2U7CiAgICAgYm9vbCBhZGROZXdsaW5lID0gZmFsc2U7
CiAKLSAgICBzd2l0Y2ggKG1fbm9kZS0+aWQoKSkgewotICAgICAgICBjYXNlIElEX0JMT0NLUVVP
VEU6Ci0gICAgICAgIGNhc2UgSURfREQ6Ci0gICAgICAgIGNhc2UgSURfRElWOgotICAgICAgICBj
YXNlIElEX0RMOgotICAgICAgICBjYXNlIElEX0RUOgotICAgICAgICBjYXNlIElEX0hSOgotICAg
ICAgICBjYXNlIElEX0xJOgotICAgICAgICBjYXNlIElEX09MOgotICAgICAgICBjYXNlIElEX1BS
RToKLSAgICAgICAgY2FzZSBJRF9UUjoKLSAgICAgICAgY2FzZSBJRF9VTDoKLSAgICAgICAgICAg
IGVuZExpbmUgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBJRF9I
MToKLSAgICAgICAgY2FzZSBJRF9IMjoKLSAgICAgICAgY2FzZSBJRF9IMzoKLSAgICAgICAgY2Fz
ZSBJRF9INDoKLSAgICAgICAgY2FzZSBJRF9INToKLSAgICAgICAgY2FzZSBJRF9INjoKLSAgICAg
ICAgY2FzZSBJRF9QOiB7Ci0gICAgICAgICAgICBlbmRMaW5lID0gdHJ1ZTsKLQotICAgICAgICAg
ICAgLy8gSW4gY2VydGFpbiBjYXNlcywgZW1pdCBhIG5ldyBuZXdsaW5lIGNoYXJhY3RlciBmb3Ig
dGhpcyBub2RlCi0gICAgICAgICAgICAvLyByZWdhcmRsZXNzIG9mIHdoZXRoZXIgd2UgZW1pdCBh
bm90aGVyIG9uZS4KLSAgICAgICAgICAgIC8vIEZJWE1FOiBTb21lIGRheSB3ZSBjb3VsZCBkbyB0
aGlzIGZvciBvdGhlciB0YWdzLgotICAgICAgICAgICAgLy8gSG93ZXZlciwgZG9pbmcgaXQganVz
dCBmb3IgdGhlIHRhZ3MgYWJvdmUgbWFrZXMgaXQgbW9yZSBsaWtlbHkKLSAgICAgICAgICAgIC8v
IHdlJ2xsIGVuZCB1cCBnZXR0aW5nIHRoZSByaWdodCByZXN1bHQgd2l0aG91dCBtYXJnaW4gY29s
bGFwc2luZy4KLSAgICAgICAgICAgIC8vIEZvciBleGFtcGxlOiA8ZGl2PjxwPnRleHQ8L3A+PC9k
aXY+IHdpbGwgd29yayByaWdodCBldmVuIGlmIGJvdGgKLSAgICAgICAgICAgIC8vIHRoZSA8ZGl2
PiBhbmQgdGhlIDxwPiBoYXZlIGJvdHRvbSBtYXJnaW5zLgotICAgICAgICAgICAgUmVuZGVyT2Jq
ZWN0ICpyZW5kZXJlciA9IG1fbm9kZS0+cmVuZGVyZXIoKTsKLSAgICAgICAgICAgIGlmIChyZW5k
ZXJlcikgewotICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlICpzdHlsZSA9IHJlbmRlcmVyLT5z
dHlsZSgpOwotICAgICAgICAgICAgICAgIGlmIChzdHlsZSkgewotICAgICAgICAgICAgICAgICAg
ICBpbnQgYm90dG9tTWFyZ2luID0gcmVuZGVyZXItPmNvbGxhcHNlZE1hcmdpbkJvdHRvbSgpOwot
ICAgICAgICAgICAgICAgICAgICBpbnQgZm9udFNpemUgPSBzdHlsZS0+aHRtbEZvbnQoKS5nZXRG
b250RGVmKCkuY29tcHV0ZWRQaXhlbFNpemUoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGJv
dHRvbU1hcmdpbiAqIDIgPj0gZm9udFNpemUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFk
ZE5ld2xpbmUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICB9CisgICAgaWYgKG1fbm9kZS0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJsb2NrcXVvdGUoKSkgfHwgbV9ub2RlLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6ZGQoKSkgfHwKKyAgICAgICAgICAgICAgIG1fbm9kZS0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OmRpdigpKSB8fAorICAgICAgICAgICAgICAgbV9ub2RlLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6ZGwoKSkgfHwgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZHQoKSkgfHwg
CisgICAgICAgICAgICAgICBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpocigpKSB8fCBt
X25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpsaSgpKSB8fAorICAgICAgICAgICAgICAgbV9u
b2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b2woKSkgfHwKKyAgICAgICAgICAgICAgIG1fbm9k
ZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnByZSgpKSB8fCBtX25vZGUtPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjp0cigpKSB8fAorICAgICAgICAgICAgICAgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6dWwoKSkpCisgICAgICAgIGVuZExpbmUgPSB0cnVlOworICAgIGVsc2UgaWYgKG1fbm9k
ZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmgxKCkpIHx8IG1fbm9kZS0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OmgyKCkpIHx8CisgICAgICAgICAgICAgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6aDMoKSkgfHwgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDQoKSkgfHwKKyAgICAg
ICAgICAgICBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoNSgpKSB8fCBtX25vZGUtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjpoNigpKSB8fAorICAgICAgICAgICAgIG1fbm9kZS0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OnAoKSkpIHsKKyAgICAgICAgZW5kTGluZSA9IHRydWU7CisKKyAgICAg
ICAgLy8gSW4gY2VydGFpbiBjYXNlcywgZW1pdCBhIG5ldyBuZXdsaW5lIGNoYXJhY3RlciBmb3Ig
dGhpcyBub2RlCisgICAgICAgIC8vIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB3ZSBlbWl0IGFub3Ro
ZXIgb25lLgorICAgICAgICAvLyBGSVhNRTogU29tZSBkYXkgd2UgY291bGQgZG8gdGhpcyBmb3Ig
b3RoZXIgdGFncy4KKyAgICAgICAgLy8gSG93ZXZlciwgZG9pbmcgaXQganVzdCBmb3IgdGhlIHRh
Z3MgYWJvdmUgbWFrZXMgaXQgbW9yZSBsaWtlbHkKKyAgICAgICAgLy8gd2UnbGwgZW5kIHVwIGdl
dHRpbmcgdGhlIHJpZ2h0IHJlc3VsdCB3aXRob3V0IG1hcmdpbiBjb2xsYXBzaW5nLgorICAgICAg
ICAvLyBGb3IgZXhhbXBsZTogPGRpdj48cD50ZXh0PC9wPjwvZGl2PiB3aWxsIHdvcmsgcmlnaHQg
ZXZlbiBpZiBib3RoCisgICAgICAgIC8vIHRoZSA8ZGl2PiBhbmQgdGhlIDxwPiBoYXZlIGJvdHRv
bSBtYXJnaW5zLgorICAgICAgICBSZW5kZXJPYmplY3QgKnJlbmRlcmVyID0gbV9ub2RlLT5yZW5k
ZXJlcigpOworICAgICAgICBpZiAocmVuZGVyZXIpIHsKKyAgICAgICAgICAgIFJlbmRlclN0eWxl
ICpzdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpOworICAgICAgICAgICAgaWYgKHN0eWxlKSB7Cisg
ICAgICAgICAgICAgICAgaW50IGJvdHRvbU1hcmdpbiA9IHJlbmRlcmVyLT5jb2xsYXBzZWRNYXJn
aW5Cb3R0b20oKTsKKyAgICAgICAgICAgICAgICBpbnQgZm9udFNpemUgPSBzdHlsZS0+aHRtbEZv
bnQoKS5nZXRGb250RGVmKCkuY29tcHV0ZWRQaXhlbFNpemUoKTsKKyAgICAgICAgICAgICAgICBp
ZiAoYm90dG9tTWFyZ2luICogMiA+PSBmb250U2l6ZSkgeworICAgICAgICAgICAgICAgICAgICBh
ZGROZXdsaW5lID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KIApAQCAtNjYwLDM0ICs2MzMsMjIgQEAg
Ym9vbCBTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yOjpoYQogCiBib29sIFNpbXBsaWZp
ZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3I6OmhhbmRsZU5vblRleHROb2RlKCkKIHsKLSAgICBzd2l0
Y2ggKG1fbm9kZS0+aWQoKSkgewotICAgICAgICBjYXNlIElEX0JSOgotICAgICAgICAgICAgZW1p
dE5ld2xpbmVGb3JCUk9yVGV4dCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
SURfVEQ6Ci0gICAgICAgIGNhc2UgSURfVEg6Ci0gICAgICAgIGNhc2UgSURfQkxPQ0tRVU9URToK
LSAgICAgICAgY2FzZSBJRF9ERDoKLSAgICAgICAgY2FzZSBJRF9ESVY6Ci0gICAgICAgIGNhc2Ug
SURfREw6Ci0gICAgICAgIGNhc2UgSURfRFQ6Ci0gICAgICAgIGNhc2UgSURfSDE6Ci0gICAgICAg
IGNhc2UgSURfSDI6Ci0gICAgICAgIGNhc2UgSURfSDM6Ci0gICAgICAgIGNhc2UgSURfSDQ6Ci0g
ICAgICAgIGNhc2UgSURfSDU6Ci0gICAgICAgIGNhc2UgSURfSDY6Ci0gICAgICAgIGNhc2UgSURf
SFI6Ci0gICAgICAgIGNhc2UgSURfUDoKLSAgICAgICAgY2FzZSBJRF9QUkU6Ci0gICAgICAgIGNh
c2UgSURfVFI6Ci0gICAgICAgIGNhc2UgSURfT0w6Ci0gICAgICAgIGNhc2UgSURfVUw6Ci0gICAg
ICAgIGNhc2UgSURfTEk6Ci0gICAgICAgICAgICAvLyBFbWl0IGEgc3BhY2UgdG8gImJyZWFrIHVw
IiBjb250ZW50LiBBbnkgd29yZCBicmVhawotICAgICAgICAgICAgLy8gY2hhcmFjdGVyIHdpbGwg
ZG8uCi0gICAgICAgICAgICBlbWl0Q2hhcmFjdGVyKCcgJywgbV9ub2RlLCAwLCAwKTsKLSAgICAg
ICAgICAgIGJyZWFrOworICAgIGlmIChtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpicigp
KSkKKyAgICAgICAgZW1pdE5ld2xpbmVGb3JCUk9yVGV4dCgpOworICAgIGVsc2UgaWYgKG1fbm9k
ZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRkICgpKSB8fCBtX25vZGUtPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjp0aCgpKSB8fAorICAgICAgICAgICAgIG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OmJsb2NrcXVvdGUoKSkgfHwgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZGQoKSkg
fHwKKyAgICAgICAgICAgICBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpkaXYoKSkgfHwK
KyAgICAgICAgICAgICBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpkbCgpKSB8fCBtX25v
ZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpkdCgpKSB8fCAKKyAgICAgICAgICAgICBtX25vZGUt
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoMSgpKSB8fCBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjpoMigpKSB8fAorICAgICAgICAgICAgIG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
OmgzKCkpIHx8IG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omg0KCkpIHx8CisgICAgICAg
ICAgICAgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDUoKSkgfHwgbV9ub2RlLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6aDYoKSkgfHwKKyAgICAgICAgICAgICBtX25vZGUtPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjpocigpKSB8fCBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpsaSgp
KSB8fAorICAgICAgICAgICAgIG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9sKCkpIHx8
IG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnAoKSkgfHwKKyAgICAgICAgICAgICBtX25v
ZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpwcmUoKSkgfHwgbV9ub2RlLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6dHIoKSkgfHwKKyAgICAgICAgICAgICBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjp1bCgpKSkgeworICAgICAgICAvLyBFbWl0IGEgc3BhY2UgdG8gImJyZWFrIHVwIiBjb250
ZW50LiBBbnkgd29yZCBicmVhaworICAgICAgICAvLyBjaGFyYWN0ZXIgd2lsbCBkby4KKyAgICAg
ICAgZW1pdENoYXJhY3RlcignICcsIG1fbm9kZSwgMCwgMCk7CiAgICAgfQogCiAgICAgcmV0dXJu
IHRydWU7CkluZGV4OiBraHRtbC9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VkaXRpbmcvdmlzaWJsZV91bml0cy5j
cHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzQKZGlmZiAtdSAtcCAtcjEuMzQga2h0bWwvZWRp
dGluZy92aXNpYmxlX3VuaXRzLmNwcAotLS0ga2h0bWwvZWRpdGluZy92aXNpYmxlX3VuaXRzLmNw
cAkyNiBNYXkgMjAwNSAyMDozMDoxMiAtMDAwMAkxLjM0CisrKyBraHRtbC9lZGl0aW5nL3Zpc2li
bGVfdW5pdHMuY3BwCTggSnVsIDIwMDUgMDM6MDQ6MDkgLTAwMDAKQEAgLTI3LDcgKzI3LDcgQEAK
IAogI2luY2x1ZGUgPHFzdHJpbmcuaD4KIAotI2luY2x1ZGUgImh0bWx0YWdzLmgiCisjaW5jbHVk
ZSAiaHRtbG5hbWVzLmgiCiAjaW5jbHVkZSAibWlzYy9oZWxwZXIuaCIKICNpbmNsdWRlICJyZW5k
ZXJpbmcvcmVuZGVyX3RleHQuaCIKICNpbmNsdWRlICJyZW5kZXJpbmcvcmVuZGVyX2Jsb2NrLmgi
CkBAIC00MSw2ICs0MSw3IEBAIHVzaW5nIERPTTo6RWxlbWVudEltcGw7CiB1c2luZyBET006Ok5v
ZGVJbXBsOwogdXNpbmcgRE9NOjpQb3NpdGlvbjsKIHVzaW5nIERPTTo6UmFuZ2VJbXBsOwordXNp
bmcgRE9NOjpIVE1MTmFtZXM7CiAKIG5hbWVzcGFjZSBraHRtbCB7CiAKQEAgLTMzMiw3ICszMzMs
NyBAQCBWaXNpYmxlUG9zaXRpb24gZW5kT2ZMaW5lKGNvbnN0IFZpc2libGVQCiAgICAgICAgIHJl
dHVybiBWaXNpYmxlUG9zaXRpb24oKTsKIAogICAgIGxvbmcgZW5kT2Zmc2V0ID0gMTsKLSAgICBp
ZiAoZW5kTm9kZS0+aWQoKSA9PSBJRF9CUikgeworICAgIGlmIChlbmROb2RlLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6YnIoKSkpIHsKICAgICAgICAgZW5kT2Zmc2V0ID0gMDsKICAgICB9IGVsc2Ug
aWYgKGVuZEJveC0+aXNJbmxpbmVUZXh0Qm94KCkpIHsKICAgICAgICAgSW5saW5lVGV4dEJveCAq
ZW5kVGV4dEJveCA9IHN0YXRpY19jYXN0PElubGluZVRleHRCb3ggKj4oZW5kQm94KTsKSW5kZXg6
IGtodG1sL2h0bWwvZHRkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiBraHRtbC9odG1sL2R0ZC5j
cHAKZGlmZiAtTiBraHRtbC9odG1sL2R0ZC5jcHAKLS0tIGtodG1sL2h0bWwvZHRkLmNwcAkxMiBB
cHIgMjAwNSAyMjo0OTo0MSAtMDAwMAkxLjM4CisrKyAvZGV2L251bGwJMSBKYW4gMTk3MCAwMDow
MDowMCAtMDAwMApAQCAtMSw5ODkgKzAsMCBAQAotLyoqCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBv
ZiB0aGUgRE9NIGltcGxlbWVudGF0aW9uIGZvciBLREUuCi0gKgotICogKEMpIDE5OTkgTGFycyBL
bm9sbCAoa25vbGxAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwMyBBcHBsZSBDb21wdXRl
ciwgSW5jLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBs
ZSBQbGFjZSAtIFN1aXRlIDMzMCwKLSAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgotICoK
LSAqLwotCi0jaW5jbHVkZSAiaHRtbC9kdGQuaCIKLSNpbmNsdWRlICJtaXNjL2h0bWxoYXNoZXMu
aCIKLQotdXNpbmcgbmFtZXNwYWNlIERPTTsKLQotI2luY2x1ZGUgPGtkZWJ1Zy5oPgotCi0vLyBw
cmlvcml0eSBvZiB0YWdzLiBDbG9zaW5nIHRhZ3Mgb2YgaGlnaGVyIHByaW9yaXR5IGNsb3NlIHRh
Z3Mgb2YgbG93ZXIKLS8vIHByaW9yaXR5LgotLy8gVXBkYXRlIHRoaXMgbGlzdCwgd2hlbmV2ZXIg
eW91IGNoYW5nZSBodG1sdGFncy4qCi0vLwotLy8gMCBlbGVtZW50cyB3aXRoIGZvcmJpZGRlbiBj
bG9zZSB0YWcgYW5kIHRleHQuIFRoZXkgZG9uJ3QgZ2V0IHB1c2hlZAotLy8gICB0byB0aGUgc3Rh
Y2suCi0vLyAxIGlubGluZSBlbGVtZW50cwotLy8gMiBmb3JtIGVsZW1lbnRzCi0vLyAzIHJlZ3Vs
YXIgYmxvY2sgbGV2ZWwgZWxlbWVudHMKLS8vIDQgbGlzdHMgKE9MIFVMIERJUiBNRU5VKQotLy8g
NSBURCBUSCBTRUxFQ1QKLS8vIDYgVFIKLS8vIDcgdGJvZHkgdGhlYWQgdGZvb3QgY2FwdGlvbiAg
b2JqZWN0Ci0vLyA4IHRhYmxlCi0vLyA5IGJvZHkgZnJhbWVzZXQKLS8vIDEwIGh0bWwKLWNvbnN0
IHVuc2lnbmVkIHNob3J0IERPTTo6dGFnUHJpb3JpdHlBcnJheVtdID0gewotICAgIDAsIC8vIDAK
LSAgICAxLCAvLyBJRF9BID09IDEKLSAgICAxLCAvLyBJRF9BQkJSCi0gICAgMSwgLy8gSURfQUNS
T05ZTQotICAgIDMsIC8vIElEX0FERFJFU1MKLSAgICAxLCAvLyBJRF9BUFBMRVQKLSAgICAwLCAv
LyBJRF9BUkVBCi0gICAgMSwgLy8gSURfQgotICAgIDAsIC8vIElEX0JBU0UKLSAgICAwLCAvLyBJ
RF9CQVNFRk9OVAotICAgIDEsIC8vIElEX0JETwotICAgIDEsIC8vIElEX0JJRwotICAgIDUsIC8v
IElEX0JMT0NLUVVPVEUKLSAgIDEwLCAvLyBJRF9CT0RZCi0gICAgMCwgLy8gSURfQlIKLSAgICAx
LCAvLyBJRF9CVVRUT04KLSAgICAwLCAvLyBJRF9DQU5WQVMKLSAgICA1LCAvLyBJRF9DQVBUSU9O
Ci0gICAgNSwgLy8gSURfQ0VOVEVSCi0gICAgMSwgLy8gSURfQ0lURQotICAgIDEsIC8vIElEX0NP
REUKLSAgICAwLCAvLyBJRF9DT0wKLSAgICAxLCAvLyBJRF9DT0xHUk9VUAotICAgIDMsIC8vIElE
X0RECi0gICAgMSwgLy8gSURfREVMCi0gICAgMSwgLy8gSURfREZOCi0gICAgNSwgLy8gSURfRElS
Ci0gICAgNSwgLy8gSURfRElWCi0gICAgNSwgLy8gSURfREwKLSAgICAzLCAvLyBJRF9EVAotICAg
IDEsIC8vIElEX0VNCi0gICAgMCwgLy8gSURfRU1CRUQKLSAgICAzLCAvLyBJRF9GSUVMRFNFVAot
ICAgIDEsIC8vIElEX0ZPTlQKLSAgICAzLCAvLyBJRF9GT1JNCi0gICAgMCwgLy8gSURfRlJBTUUK
LSAgIDEwLC8vIElEX0ZSQU1FU0VUCi0gICAgNSwgLy8gSURfSDEKLSAgICA1LCAvLyBJRF9IMgot
ICAgIDUsIC8vIElEX0gzCi0gICAgNSwgLy8gSURfSDQKLSAgICA1LCAvLyBJRF9INQotICAgIDUs
IC8vIElEX0g2Ci0gICAxMCwvLyBJRF9IRUFECi0gICAgMCwgLy8gSURfSFIKLSAgIDExLC8vIElE
X0hUTUwKLSAgICAxLCAvLyBJRF9JCi0gICAgMSwgLy8gSURfSUZSQU1FCi0gICAgMCwgLy8gSURf
SU1HCi0gICAgMCwgLy8gSURfSU5QVVQKLSAgICAxLCAvLyBJRF9JTlMKLSAgICAwLCAvLyBJRF9J
U0lOREVYCi0gICAgMSwgLy8gSURfS0JECi0gICAgMCwgLy8gSURfS0VZR0VOCi0gICAgNSwgLy8g
SURfTEFCRUwKLSAgICAxLCAvLyBJRF9MQVlFUgotICAgIDEsIC8vIElEX0xFR0VORAotICAgIDMs
IC8vIElEX0xJCi0gICAgMCwgLy8gSURfTElOSwotICAgIDEsIC8vIElEX01BUAotICAgIDMsIC8v
IElEX01BUlFVRUUKLSAgICA1LCAvLyBJRF9NRU5VCi0gICAgMCwgLy8gSURfTUVUQQotICAgIDUs
IC8vIElEX05PQlIKLSAgIDEwLC8vIElEX05PRU1CRUQKLSAgIDEwLC8vIElEX05PRlJBTUVTCi0g
ICAgMywgLy8gSURfTk9TQ1JJUFQKLSAgICAxLCAvLyBJRF9OT0xBWUVSCi0gICAgNywgLy8gSURf
T0JKRUNUCi0gICAgNSwgLy8gSURfT0wKLSAgICAxLCAvLyBJRF9PUFRHUk9VUAotICAgIDIsIC8v
IElEX09QVElPTgotICAgIDMsIC8vIElEX1AKLSAgICAwLCAvLyBJRF9QQVJBTQotICAgIDUsIC8v
IElEX1BMQUlOVEVYVAotICAgIDUsIC8vIElEX1BSRQotICAgIDEsIC8vIElEX1EKLSAgICAxLCAv
LyBJRF9TCi0gICAgMSwgLy8gSURfU0FNUAotICAgIDEsIC8vIElEX1NDUklQVAotICAgIDYsIC8v
IElEX1NFTEVDVAotICAgIDEsIC8vIElEX1NNQUxMCi0gICAgMSwgLy8gSURfU1BBTgotICAgIDEs
IC8vIElEX1NUUklLRQotICAgIDEsIC8vIElEX1NUUk9ORwotICAgIDEsIC8vIElEX1NUWUxFCi0g
ICAgMSwgLy8gSURfU1VCCi0gICAgMSwgLy8gSURfU1VQCi0gICAgOSwvLyBJRF9UQUJMRQotICAg
IDgsIC8vIElEX1RCT0RZCi0gICAgNiwgLy8gSURfVEQKLSAgICAxLCAvLyBJRF9URVhUQVJFQQot
ICAgIDgsIC8vIElEX1RGT09UCi0gICAgNiwgLy8gSURfVEgKLSAgICA4LCAvLyBJRF9USEVBRAot
ICAgIDEsIC8vIElEX1RJVExFCi0gICAgNywgLy8gSURfVFIKLSAgICAxLCAvLyBJRF9UVAotICAg
IDEsIC8vIElEX1UKLSAgICA1LCAvLyBJRF9VTAotICAgIDEsIC8vIElEX1ZBUgotICAgIDEsIC8v
IElEX1dCUgotICAgIDUsIC8vIElEX1hNUAotICAgIDAsIC8vIElEX1RFWFQKLX07Ci0KLWNvbnN0
IHRhZ1N0YXR1cyBET006OmVuZFRhZ0FycmF5W10gPSB7Ci0gICAgUkVRVUlSRUQsICAvLyAwCi0g
ICAgUkVRVUlSRUQsICAvLyBJRF9BID09IDEKLSAgICBSRVFVSVJFRCwgIC8vIElEX0FCQlIKLSAg
ICBSRVFVSVJFRCwgIC8vIElEX0FDUk9OWU0KLSAgICBSRVFVSVJFRCwgIC8vIElEX0FERFJFU1MK
LSAgICBSRVFVSVJFRCwgIC8vIElEX0FQUExFVAotICAgIEZPUkJJRERFTiwgLy8gSURfQVJFQQot
ICAgIFJFUVVJUkVELCAgLy8gSURfQgotICAgIEZPUkJJRERFTiwgLy8gSURfQkFTRQotICAgIEZP
UkJJRERFTiwgLy8gSURfQkFTRUZPTlQKLSAgICBSRVFVSVJFRCwgIC8vIElEX0JETwotICAgIFJF
UVVJUkVELCAgLy8gSURfQklHCi0gICAgUkVRVUlSRUQsICAvLyBJRF9CTE9DS1FVT1RFCi0gICAg
UkVRVUlSRUQsICAvLyBJRF9CT0RZCi0gICAgRk9SQklEREVOLCAvLyBJRF9CUgotICAgIFJFUVVJ
UkVELCAgLy8gSURfQlVUVE9OCi0gICAgRk9SQklEREVOLCAvLyBJRF9DQU5WQVMKLSAgICBSRVFV
SVJFRCwgIC8vIElEX0NBUFRJT04KLSAgICBSRVFVSVJFRCwgIC8vIElEX0NFTlRFUgotICAgIFJF
UVVJUkVELCAgLy8gSURfQ0lURQotICAgIFJFUVVJUkVELCAgLy8gSURfQ09ERQotICAgIEZPUkJJ
RERFTiwgLy8gSURfQ09MCi0gICAgT1BUSU9OQUwsICAvLyBJRF9DT0xHUk9VUAotICAgIE9QVElP
TkFMLCAgLy8gSURfREQKLSAgICBSRVFVSVJFRCwgIC8vIElEX0RFTAotICAgIFJFUVVJUkVELCAg
Ly8gSURfREZOCi0gICAgUkVRVUlSRUQsICAvLyBJRF9ESVIKLSAgICBSRVFVSVJFRCwgIC8vIElE
X0RJVgotICAgIFJFUVVJUkVELCAgLy8gSURfREwKLSAgICBPUFRJT05BTCwgIC8vIElEX0RUCi0g
ICAgUkVRVUlSRUQsICAvLyBJRF9FTQotICAgIFJFUVVJUkVELCAgLy8gSURfRU1CRUQKLSAgICBS
RVFVSVJFRCwgIC8vIElEX0ZJRUxEU0VUCi0gICAgUkVRVUlSRUQsICAvLyBJRF9GT05UCi0gICAg
UkVRVUlSRUQsICAvLyBJRF9GT1JNCi0gICAgRk9SQklEREVOLCAvLyBJRF9GUkFNRQotICAgIFJF
UVVJUkVELCAgLy8gSURfRlJBTUVTRVQKLSAgICBSRVFVSVJFRCwgIC8vIElEX0gxCi0gICAgUkVR
VUlSRUQsICAvLyBJRF9IMgotICAgIFJFUVVJUkVELCAgLy8gSURfSDMKLSAgICBSRVFVSVJFRCwg
IC8vIElEX0g0Ci0gICAgUkVRVUlSRUQsICAvLyBJRF9INQotICAgIFJFUVVJUkVELCAgLy8gSURf
SDYKLSAgICBPUFRJT05BTCwgIC8vIElEX0hFQUQKLSAgICBGT1JCSURERU4sIC8vIElEX0hSCi0g
ICAgUkVRVUlSRUQsICAvLyBJRF9IVE1MCi0gICAgUkVRVUlSRUQsICAvLyBJRF9JCi0gICAgUkVR
VUlSRUQsICAvLyBJRF9JRlJBTUUKLSAgICBGT1JCSURERU4sIC8vIElEX0lNRwotICAgIEZPUkJJ
RERFTiwgLy8gSURfSU5QVVQKLSAgICBSRVFVSVJFRCwgIC8vIElEX0lOUwotICAgIEZPUkJJRERF
TiwgLy8gSURfSVNJTkRFWAotICAgIFJFUVVJUkVELCAgLy8gSURfS0JECi0gICAgUkVRVUlSRUQs
ICAvLyBJRF9LRVlHRU4KLSAgICBSRVFVSVJFRCwgIC8vIElEX0xBQkVMCi0gICAgUkVRVUlSRUQs
ICAvLyBJRF9MQVlFUgotICAgIFJFUVVJUkVELCAgLy8gSURfTEVHRU5ECi0gICAgT1BUSU9OQUws
ICAvLyBJRF9MSQotICAgIEZPUkJJRERFTiwgLy8gSURfTElOSwotICAgIFJFUVVJUkVELCAgLy8g
SURfTUFQCi0gICAgUkVRVUlSRUQsICAvLyBJRF9NQVJRVUVFCi0gICAgUkVRVUlSRUQsICAvLyBJ
RF9NRU5VCi0gICAgRk9SQklEREVOLCAvLyBJRF9NRVRBCi0gICAgUkVRVUlSRUQsICAvLyBJRF9O
T0JSCi0gICAgUkVRVUlSRUQsICAvLyBJRF9OT0VNQkVECi0gICAgUkVRVUlSRUQsICAvLyBJRF9O
T0ZSQU1FUwotICAgIFJFUVVJUkVELCAgLy8gSURfTk9TQ1JJUFQKLSAgICBSRVFVSVJFRCwgIC8v
IElEX05PTEFZRVIKLSAgICBSRVFVSVJFRCwgIC8vIElEX09CSkVDVAotICAgIFJFUVVJUkVELCAg
Ly8gSURfT0wKLSAgICBSRVFVSVJFRCwgIC8vIElEX09QVEdST1VQCi0gICAgT1BUSU9OQUwsICAv
LyBJRF9PUFRJT04KLSAgICBPUFRJT05BTCwgIC8vIElEX1AKLSAgICBGT1JCSURERU4sIC8vIElE
X1BBUkFNCi0gICAgUkVRVUlSRUQsICAvLyBJRF9QTEFJTlRFWFQKLSAgICBSRVFVSVJFRCwgIC8v
IElEX1BSRQotICAgIFJFUVVJUkVELCAgLy8gSURfUQotICAgIFJFUVVJUkVELCAgLy8gSURfUwot
ICAgIFJFUVVJUkVELCAgLy8gSURfU0FNUAotICAgIFJFUVVJUkVELCAgLy8gSURfU0NSSVBUCi0g
ICAgUkVRVUlSRUQsICAvLyBJRF9TRUxFQ1QKLSAgICBSRVFVSVJFRCwgIC8vIElEX1NNQUxMCi0g
ICAgUkVRVUlSRUQsICAvLyBJRF9TUEFOCi0gICAgUkVRVUlSRUQsICAvLyBJRF9TVFJJS0UKLSAg
ICBSRVFVSVJFRCwgIC8vIElEX1NUUk9ORwotICAgIFJFUVVJUkVELCAgLy8gSURfU1RZTEUKLSAg
ICBSRVFVSVJFRCwgIC8vIElEX1NVQgotICAgIFJFUVVJUkVELCAgLy8gSURfU1VQCi0gICAgUkVR
VUlSRUQsICAvLyBJRF9UQUJMRQotICAgIE9QVElPTkFMLCAgLy8gSURfVEJPRFkKLSAgICBPUFRJ
T05BTCwgIC8vIElEX1RECi0gICAgUkVRVUlSRUQsICAvLyBJRF9URVhUQVJFQQotICAgIE9QVElP
TkFMLCAgLy8gSURfVEZPT1QKLSAgICBPUFRJT05BTCwgIC8vIElEX1RICi0gICAgT1BUSU9OQUws
ICAvLyBJRF9USEVBRAotICAgIFJFUVVJUkVELCAgLy8gSURfVElUTEUKLSAgICBPUFRJT05BTCwg
IC8vIElEX1RSCi0gICAgUkVRVUlSRUQsICAvLyBJRF9UVAotICAgIFJFUVVJUkVELCAgLy8gSURf
VQotICAgIFJFUVVJUkVELCAgLy8gSURfVUwKLSAgICBSRVFVSVJFRCwgIC8vIElEX1ZBUgotICAg
IFJFUVVJUkVELCAgLy8gSURfV0JSCi0gICAgUkVRVUlSRUQsICAvLyBJRF9YTVAKLSAgICBSRVFV
SVJFRCAgIC8vIElEX1RFWFQKLX07Ci0KLQotc3RhdGljIGNvbnN0IHVzaG9ydCB0YWdfbGlzdF8w
W10gPSB7Ci0gICAgSURfVEVYVCwKLSAgICBJRF9UVCwKLSAgICBJRF9JLAotICAgIElEX0IsCi0g
ICAgSURfVSwKLSAgICBJRF9TLAotICAgIElEX1NUUklLRSwKLSAgICBJRF9CSUcsCi0gICAgSURf
U01BTEwsCi0gICAgSURfRU0sCi0gICAgSURfU1RST05HLAotICAgIElEX0RGTiwKLSAgICBJRF9D
T0RFLAotICAgIElEX1NBTVAsCi0gICAgSURfS0JELAotICAgIElEX1ZBUiwKLSAgICBJRF9DSVRF
LAotICAgIElEX0FCQlIsCi0gICAgSURfQUNST05ZTSwKLSAgICBJRF9BLAotICAgIElEX0NBTlZB
UywKLSAgICBJRF9JTUcsCi0gICAgSURfQVBQTEVULAotICAgIElEX09CSkVDVCwKLSAgICBJRF9F
TUJFRCwKLSAgICBJRF9GT05ULAotICAgIElEX0JBU0VGT05ULAotICAgIElEX0JSLAotICAgIElE
X1NDUklQVCwKLSAgICBJRF9NQVAsCi0gICAgSURfUSwKLSAgICBJRF9TVUIsCi0gICAgSURfU1VQ
LAotICAgIElEX1NQQU4sCi0gICAgSURfQkRPLAotICAgIElEX0lGUkFNRSwKLSAgICBJRF9JTlBV
VCwKLSAgICBJRF9TRUxFQ1QsCi0gICAgSURfVEVYVEFSRUEsCi0gICAgSURfTEFCRUwsCi0gICAg
SURfQlVUVE9OLAotICAgIElEX0lOUywKLSAgICBJRF9ERUwsCi0gICAgSURfQ09NTUVOVCwKLSAg
ICBJRF9OT0JSLAotICAgIElEX1dCUiwKLSAgICAwCi19OwotCi1zdGF0aWMgY29uc3QgdXNob3J0
IHRhZ19saXN0XzFbXSA9IHsKLSAgICBJRF9URVhULAotICAgIElEX1AsCi0gICAgSURfSDEsCi0g
ICAgSURfSDIsCi0gICAgSURfSDMsCi0gICAgSURfSDQsCi0gICAgSURfSDUsCi0gICAgSURfSDYs
Ci0gICAgSURfVUwsCi0gICAgSURfT0wsCi0gICAgSURfRElSLAotICAgIElEX01FTlUsCi0gICAg
SURfUFJFLAotICAgIElEX1BMQUlOVEVYVCwKLSAgICBJRF9ETCwKLSAgICBJRF9ESVYsCi0gICAg
SURfTEFZRVIsCi0gICAgSURfQ0VOVEVSLAotICAgIElEX05PU0NSSVBULAotICAgIElEX05PRlJB
TUVTLAotICAgIElEX0JMT0NLUVVPVEUsCi0gICAgSURfRk9STSwKLSAgICBJRF9JU0lOREVYLAot
ICAgIElEX0hSLAotICAgIElEX1RBQkxFLAotICAgIElEX0ZJRUxEU0VULAotICAgIElEX0FERFJF
U1MsCi0gICAgSURfVFQsCi0gICAgSURfSSwKLSAgICBJRF9CLAotICAgIElEX1UsCi0gICAgSURf
UywKLSAgICBJRF9TVFJJS0UsCi0gICAgSURfQklHLAotICAgIElEX1NNQUxMLAotICAgIElEX0VN
LAotICAgIElEX1NUUk9ORywKLSAgICBJRF9ERk4sCi0gICAgSURfQ09ERSwKLSAgICBJRF9TQU1Q
LAotICAgIElEX0tCRCwKLSAgICBJRF9WQVIsCi0gICAgSURfQ0lURSwKLSAgICBJRF9BQkJSLAot
ICAgIElEX0FDUk9OWU0sCi0gICAgSURfQSwKLSAgICBJRF9DQU5WQVMsCi0gICAgSURfSU1HLAot
ICAgIElEX0FQUExFVCwKLSAgICBJRF9PQkpFQ1QsCi0gICAgSURfRU1CRUQsCi0gICAgSURfRk9O
VCwKLSAgICBJRF9CQVNFRk9OVCwKLSAgICBJRF9CUiwKLSAgICBJRF9TQ1JJUFQsCi0gICAgSURf
TUFQLAotICAgIElEX1EsCi0gICAgSURfU1VCLAotICAgIElEX1NVUCwKLSAgICBJRF9TUEFOLAot
ICAgIElEX0JETywKLSAgICBJRF9JRlJBTUUsCi0gICAgSURfSU5QVVQsCi0gICAgSURfS0VZR0VO
LAotICAgIElEX1NFTEVDVCwKLSAgICBJRF9URVhUQVJFQSwKLSAgICBJRF9MQUJFTCwKLSAgICBJ
RF9CVVRUT04sCi0gICAgSURfQ09NTUVOVCwKLSAgICBJRF9MSSwKLSAgICBJRF9EVCwKLSAgICBJ
RF9ERCwKLSAgICBJRF9YTVAsCi0gICAgSURfSU5TLAotICAgIElEX0RFTCwKLSAgICBJRF9OT0JS
LAotICAgIElEX1dCUiwKLSAgICBJRF9NQVJRVUVFLAotICAgIDAKLX07Ci0KLXN0YXRpYyBjb25z
dCB1c2hvcnQgdGFnX2xpc3RfMltdID0gewotICAgIElEX0NPTU1FTlQsCi0gICAgMAotfTsKLQot
c3RhdGljIGNvbnN0IHVzaG9ydCB0YWdfbGlzdF8zW10gPSB7Ci0gICAgSURfVEVYVCwKLSAgICBJ
RF9QLAotICAgIElEX0gxLAotICAgIElEX0gyLAotICAgIElEX0gzLAotICAgIElEX0g0LAotICAg
IElEX0g1LAotICAgIElEX0g2LAotICAgIElEX1VMLAotICAgIElEX09MLAotICAgIElEX0RJUiwK
LSAgICBJRF9NRU5VLAotICAgIElEX1BSRSwKLSAgICBJRF9QTEFJTlRFWFQsCi0gICAgSURfREws
Ci0gICAgSURfRElWLAotICAgIElEX0xBWUVSLAotICAgIElEX0NFTlRFUiwKLSAgICBJRF9OT1ND
UklQVCwKLSAgICBJRF9OT0ZSQU1FUywKLSAgICBJRF9CTE9DS1FVT1RFLAotICAgIElEX0ZPUk0s
Ci0gICAgSURfSVNJTkRFWCwKLSAgICBJRF9IUiwKLSAgICBJRF9UQUJMRSwKLSAgICBJRF9GSUVM
RFNFVCwKLSAgICBJRF9BRERSRVNTLAotICAgIElEX0NPTU1FTlQsCi0gICAgSURfTEksCi0gICAg
SURfWE1QLAotICAgIElEX01BUlFVRUUsCi0gICAgMAotfTsKLQotc3RhdGljIGNvbnN0IHVzaG9y
dCB0YWdfbGlzdF80W10gPSB7Ci0gICAgSURfVEVYVCwKLSAgICBJRF9QQVJBTSwKLSAgICBJRF9Q
LAotICAgIElEX0gxLAotICAgIElEX0gyLAotICAgIElEX0gzLAotICAgIElEX0g0LAotICAgIElE
X0g1LAotICAgIElEX0g2LAotICAgIElEX1VMLAotICAgIElEX09MLAotICAgIElEX0RJUiwKLSAg
ICBJRF9NRU5VLAotICAgIElEX1BSRSwKLSAgICBJRF9QTEFJTlRFWFQsCi0gICAgSURfREwsCi0g
ICAgSURfRElWLAotICAgIElEX0xBWUVSLAotICAgIElEX0NFTlRFUiwKLSAgICBJRF9OT1NDUklQ
VCwKLSAgICBJRF9OT0ZSQU1FUywKLSAgICBJRF9CTE9DS1FVT1RFLAotICAgIElEX0ZPUk0sCi0g
ICAgSURfSVNJTkRFWCwKLSAgICBJRF9IUiwKLSAgICBJRF9UQUJMRSwKLSAgICBJRF9GSUVMRFNF
VCwKLSAgICBJRF9BRERSRVNTLAotICAgIElEX1RFWFQsCi0gICAgSURfVFQsCi0gICAgSURfSSwK
LSAgICBJRF9CLAotICAgIElEX1UsCi0gICAgSURfUywKLSAgICBJRF9TVFJJS0UsCi0gICAgSURf
QklHLAotICAgIElEX1NNQUxMLAotICAgIElEX0VNLAotICAgIElEX1NUUk9ORywKLSAgICBJRF9E
Rk4sCi0gICAgSURfQ09ERSwKLSAgICBJRF9TQU1QLAotICAgIElEX0tCRCwKLSAgICBJRF9WQVIs
Ci0gICAgSURfQ0lURSwKLSAgICBJRF9BQkJSLAotICAgIElEX0FDUk9OWU0sCi0gICAgSURfQSwK
LSAgICBJRF9DQU5WQVMsCi0gICAgSURfSU1HLAotICAgIElEX0FQUExFVCwKLSAgICBJRF9PQkpF
Q1QsCi0gICAgSURfRU1CRUQsCi0gICAgSURfRk9OVCwKLSAgICBJRF9CQVNFRk9OVCwKLSAgICBJ
RF9CUiwKLSAgICBJRF9TQ1JJUFQsCi0gICAgSURfTUFQLAotICAgIElEX1EsCi0gICAgSURfU1VC
LAotICAgIElEX1NVUCwKLSAgICBJRF9TUEFOLAotICAgIElEX0JETywKLSAgICBJRF9JRlJBTUUs
Ci0gICAgSURfSU5QVVQsCi0gICAgSURfU0VMRUNULAotICAgIElEX1RFWFRBUkVBLAotICAgIElE
X0xBQkVMLAotICAgIElEX0JVVFRPTiwKLSAgICBJRF9DT01NRU5ULAotICAgIElEX0xJLAotICAg
IElEX1hNUCwKLSAgICBJRF9NQVJRVUVFLAotICAgIDAKLX07Ci0KLXN0YXRpYyBjb25zdCB1c2hv
cnQgdGFnX2xpc3RfN1tdID0gewotICAgIElEX1RFWFQsCi0gICAgSURfT1BUR1JPVVAsCi0gICAg
SURfT1BUSU9OLAotICAgIElEX0NPTU1FTlQsCi0gICAgSURfU0NSSVBULAotICAgIDAKLX07Ci0K
LXN0YXRpYyBjb25zdCB1c2hvcnQgdGFnX2xpc3RfOVtdID0gewotICAgIElEX1RILAotICAgIElE
X1RELAotICAgIElEX0NPTU1FTlQsCi0gICAgMAotfTsKLQotc3RhdGljIGNvbnN0IHVzaG9ydCB0
YWdfbGlzdF8xMFtdID0gewotICAgIElEX0ZSQU1FU0VULAotICAgIElEX0ZSQU1FLAotICAgIElE
X0NPTU1FTlQsCi0gICAgMAotfTsKLQotc3RhdGljIGNvbnN0IHVzaG9ydCB0YWdfbGlzdF8xMVtd
ID0gewotICAgIElEX1RFWFQsCi0gICAgSURfU0NSSVBULAotICAgIElEX1NUWUxFLAotICAgIElE
X01FVEEsCi0gICAgSURfTElOSywKLSAgICBJRF9DT01NRU5ULAotICAgIDAKLX07Ci0KLWJvb2wg
Y2hlY2tfYXJyYXkodXNob3J0IGNoaWxkLCBjb25zdCB1c2hvcnQgKnRhZ0xpc3QpCi17Ci0gICAg
aW50IGkgPSAwOwotICAgIHdoaWxlKHRhZ0xpc3RbaV0gIT0gMCkKLSAgICB7Ci0gICAgICAgIGlm
KHRhZ0xpc3RbaV0gPT0gY2hpbGQpIHJldHVybiB0cnVlOwotICAgIGkrKzsKLSAgICB9Ci0gICAg
cmV0dXJuIGZhbHNlOwotfQotCi0KLWJvb2wgRE9NOjpjaGVja0NoaWxkKHVzaG9ydCB0YWdJRCwg
dXNob3J0IGNoaWxkSUQsIGJvb2wgc3RyaWN0KQotewotICAgIC8va2REZWJ1ZyggNjAzMCApIDw8
ICJjaGVja0NoaWxkOiAiIDw8IHRhZ0lEIDw8ICIvIiA8PCBjaGlsZElEIDw8IGVuZGw7Ci0KLSAg
ICAvLyAjIyMgYWxsb3cgY29tbWVudHMgaW5zaWRlIEFOWSBub2RlIHRoYXQgY2FuIGNvbnRhaW4g
Y2hpbGRyZW4KLQotICAgIC8vIFRyZWF0IGN1c3RvbSBlbGVtZW50cyB0aGUgc2FtZSBhcyA8c3Bh
bj4uCi0gICAgaWYgKHRhZ0lEID4gSURfTEFTVF9UQUcpCi0gICAgICAgIHRhZ0lEID0gSURfU1BB
TjsKLSAgICBpZiAoY2hpbGRJRCA+IElEX0xBU1RfVEFHKQotICAgICAgICBjaGlsZElEID0gSURf
U1BBTjsKLQotICAgIHN3aXRjaCh0YWdJRCkKLSAgICB7Ci0gICAgY2FzZSBJRF9UVDoKLSAgICBj
YXNlIElEX0k6Ci0gICAgY2FzZSBJRF9COgotICAgIGNhc2UgSURfVToKLSAgICBjYXNlIElEX1M6
Ci0gICAgY2FzZSBJRF9TVFJJS0U6Ci0gICAgY2FzZSBJRF9CSUc6Ci0gICAgY2FzZSBJRF9TTUFM
TDoKLSAgICBjYXNlIElEX0VNOgotICAgIGNhc2UgSURfU1RST05HOgotICAgIGNhc2UgSURfREZO
OgotICAgIGNhc2UgSURfQ09ERToKLSAgICBjYXNlIElEX1NBTVA6Ci0gICAgY2FzZSBJRF9LQkQ6
Ci0gICAgY2FzZSBJRF9WQVI6Ci0gICAgY2FzZSBJRF9DSVRFOgotICAgIGNhc2UgSURfQUJCUjoK
LSAgICBjYXNlIElEX0FDUk9OWU06Ci0gICAgY2FzZSBJRF9TVUI6Ci0gICAgY2FzZSBJRF9TVVA6
Ci0gICAgY2FzZSBJRF9CRE86Ci0gICAgY2FzZSBJRF9ROgotICAgIGNhc2UgSURfTEVHRU5EOgot
ICAgIGNhc2UgSURfRk9OVDoKLSAgICBjYXNlIElEX0E6Ci0gICAgY2FzZSBJRF9OT0JSOgotICAg
IGNhc2UgSURfV0JSOgotICAgICAgICByZXR1cm4gY2hlY2tfYXJyYXkoY2hpbGRJRCwgdGFnX2xp
c3RfMSk7Ci0gICAgY2FzZSBJRF9QOgotICAgICAgICAvLyBQOiAoIF8wIHwgVEFCTEUgKSAqCi0g
ICAgICAgIHJldHVybiBjaGVja19hcnJheShjaGlsZElELCB0YWdfbGlzdF8wKSB8fCAoIXN0cmlj
dCAmJiBjaGlsZElEID09IElEX1RBQkxFKTsKLSAgICBjYXNlIElEX0gxOgotICAgIGNhc2UgSURf
SDI6Ci0gICAgY2FzZSBJRF9IMzoKLSAgICBjYXNlIElEX0g0OgotICAgIGNhc2UgSURfSDU6Ci0g
ICAgY2FzZSBJRF9INjoKLSAgICAgICAgcmV0dXJuIGNoZWNrX2FycmF5KGNoaWxkSUQsIHRhZ19s
aXN0XzEpICYmIChjaGlsZElEIDwgSURfSDEgfHwgY2hpbGRJRCA+IElEX0g2KTsKLSAgICBjYXNl
IElEX0JBU0VGT05UOgotICAgIGNhc2UgSURfQlI6Ci0gICAgY2FzZSBJRF9BUkVBOgotICAgIGNh
c2UgSURfTElOSzoKLSAgICBjYXNlIElEX0NBTlZBUzoKLSAgICBjYXNlIElEX0lNRzoKLSAgICBj
YXNlIElEX1BBUkFNOgotICAgIGNhc2UgSURfSFI6Ci0gICAgY2FzZSBJRF9JTlBVVDoKLSAgICBj
YXNlIElEX0NPTDoKLSAgICBjYXNlIElEX0ZSQU1FOgotICAgIGNhc2UgSURfSVNJTkRFWDoKLSAg
ICBjYXNlIElEX0JBU0U6Ci0gICAgY2FzZSBJRF9NRVRBOgotICAgIGNhc2UgSURfQ09NTUVOVDoK
LSAgICAgICAgLy8gQkFTRUZPTlQ6IEVNUFRZCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBj
YXNlIElEX0JPRFk6Ci0gICAgICAgIC8vIEJPRFk6IF8xICogKyBfMgotICAgICAgICByZXR1cm4g
Y2hlY2tfYXJyYXkoY2hpbGRJRCwgdGFnX2xpc3RfMSkgfHwgY2hlY2tfYXJyYXkoY2hpbGRJRCwg
dGFnX2xpc3RfMik7Ci0gICAgY2FzZSBJRF9BRERSRVNTOgotICAgICAgICAvLyBBRERSRVNTOiAo
IF8wIHwgUCApICoKLSAgICAgICAgcmV0dXJuIGNoZWNrX2FycmF5KGNoaWxkSUQsIHRhZ19saXN0
XzApIHx8IGNoaWxkSUQgPT0gSURfUDsKLSAgICBjYXNlIElEX0xJOgotICAgIGNhc2UgSURfRFQ6
Ci0gICAgY2FzZSBJRF9ESVY6Ci0gICAgY2FzZSBJRF9TUEFOOgotICAgIGNhc2UgSURfTEFZRVI6
Ci0gICAgY2FzZSBJRF9DRU5URVI6Ci0gICAgY2FzZSBJRF9CTE9DS1FVT1RFOgotICAgIGNhc2Ug
SURfSU5TOgotICAgIGNhc2UgSURfREVMOgotICAgIGNhc2UgSURfREQ6Ci0gICAgY2FzZSBJRF9U
SDoKLSAgICBjYXNlIElEX1REOgotICAgIGNhc2UgSURfSUZSQU1FOgotICAgIGNhc2UgSURfTk9G
UkFNRVM6Ci0gICAgY2FzZSBJRF9OT1NDUklQVDoKLSAgICBjYXNlIElEX0NBUFRJT046Ci0gICAg
Y2FzZSBJRF9NQVJRVUVFOgotICAgIGNhc2UgSURfVUw6Ci0gICAgY2FzZSBJRF9PTDoKLSAgICBj
YXNlIElEX0RJUjoKLSAgICBjYXNlIElEX01FTlU6Ci0gICAgICAgIC8vIERJVjogXzEgKgotICAg
ICAgICByZXR1cm4gY2hlY2tfYXJyYXkoY2hpbGRJRCwgdGFnX2xpc3RfMSk7Ci0gICAgY2FzZSBJ
RF9NQVA6Ci0JLy8gV2UgYWNjZXB0IFNDUklQVCBpbiBjbGllbnQtc2lkZSBpbWFnZSBtYXBzIGFz
IGFuIGV4dGVuc2lvbiB0byB0aGUgRFRELgotICAgICAgICAvLyBNQVA6ICggXzMgKyB8IEFSRUEg
KyB8IFNDUklQVCArICkKLSAgICAgICAgcmV0dXJuIGNoZWNrX2FycmF5KGNoaWxkSUQsIHRhZ19s
aXN0XzMpIHx8Ci0JICAgIGNoaWxkSUQgPT0gSURfQVJFQSB8fAotCSAgICBjaGlsZElEID09IElE
X1NDUklQVDsKLSAgICBjYXNlIElEX09CSkVDVDoKLSAgICBjYXNlIElEX0VNQkVEOgotICAgIGNh
c2UgSURfQVBQTEVUOgotICAgICAgICAvLyBPQkpFQ1Q6IF80ICoKLSAgICAgICAgcmV0dXJuIGNo
ZWNrX2FycmF5KGNoaWxkSUQsIHRhZ19saXN0XzQpOwotICAgIGNhc2UgSURfUFJFOgotICAgIGNh
c2UgSURfWE1QOgotICAgIGNhc2UgSURfUExBSU5URVhUOgotICAgICAgICAvLyBQUkU6IF8wICog
LSBfNQotICAgICAgICByZXR1cm4gY2hlY2tfYXJyYXkoY2hpbGRJRCwgdGFnX2xpc3RfMSk7Ci0g
ICAgY2FzZSBJRF9ETDoKLSAgICAgICAgLy8gREw6IF82ICsKLSAgICAgICAgcmV0dXJuIGNoZWNr
X2FycmF5KGNoaWxkSUQsIHRhZ19saXN0XzEpOwotICAgIGNhc2UgSURfRk9STToKLSAgICAgICAg
Ly8gRk9STTogXzEgKiAtIEZPUk0KLSAgICAgICAgcmV0dXJuIGNoZWNrX2FycmF5KGNoaWxkSUQs
IHRhZ19saXN0XzEpOwotICAgIGNhc2UgSURfTEFCRUw6Ci0gICAgICAgIC8vIExBQkVMOiBfMSAq
IC0gTEFCRUwKLSAgICAgICAgcmV0dXJuIGNoZWNrX2FycmF5KGNoaWxkSUQsIHRhZ19saXN0XzEp
OwotICAgICAgICAvLyBLRVlHRU4gZG9lcyBub3QgcmVhbGx5IGFsbG93IGFueSBjaGlsZHMKLSAg
ICAgICAgLy8gZnJvbSBvdXRzaWRlLCBqdXN0IG5lZWQgdGhpcyB0byBiZSBhYmxlCi0gICAgICAg
IC8vIHRvIGFkZCB0aGUga2V5bGVuZ3RocyBvdXJzZWxmCi0gICAgICAgIC8vIFllcywgY29uc2lk
ZXIgaXQgYSBoYWNrIChEaXJrKQotICAgIGNhc2UgSURfS0VZR0VOOgotICAgIGNhc2UgSURfU0VM
RUNUOgotICAgICAgICAvLyBTRUxFQ1Q6IF83ICsKLSAgICAgICAgcmV0dXJuIGNoZWNrX2FycmF5
KGNoaWxkSUQsIHRhZ19saXN0XzcpOwotICAgIGNhc2UgSURfT1BUR1JPVVA6Ci0gICAgICAgIC8v
IE9QVEdST1VQOiBPUFRJT04gKwotICAgICAgICBpZihjaGlsZElEID09IElEX09QVElPTikgcmV0
dXJuIHRydWU7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBjYXNlIElEX09QVElPTjoKLSAg
ICBjYXNlIElEX1RFWFRBUkVBOgotICAgIGNhc2UgSURfVElUTEU6Ci0gICAgY2FzZSBJRF9TVFlM
RToKLSAgICBjYXNlIElEX1NDUklQVDoKLSAgICAgICAgLy8gT1BUSU9OOiBURVhUCi0gICAgICAg
IGlmKGNoaWxkSUQgPT0gSURfVEVYVCkgcmV0dXJuIHRydWU7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBjYXNlIElEX0ZJRUxEU0VUOgotICAgICAgICAvLyBGSUVMRFNFVDogKCBURVhUICwg
TEVHRU5EICwgXzEgKiApCi0gICAgICAgIGlmKGNoaWxkSUQgPT0gSURfVEVYVCkgcmV0dXJuIHRy
dWU7Ci0gICAgICAgIGlmKGNoaWxkSUQgPT0gSURfTEVHRU5EKSByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgcmV0dXJuIGNoZWNrX2FycmF5KGNoaWxkSUQsIHRhZ19saXN0XzEpOwotICAgIGNhc2UgSURf
QlVUVE9OOgotICAgICAgICAvLyBCVVRUT046IF8xICogLSBfOAotICAgICAgICByZXR1cm4gY2hl
Y2tfYXJyYXkoY2hpbGRJRCwgdGFnX2xpc3RfMSk7Ci0gICAgY2FzZSBJRF9UQUJMRToKLSAgICAg
ICAgLy8gVEFCTEU6ICggQ0FQVElPTiA/ICwgKCBDT0wgKiB8IENPTEdST1VQICogKSAsIFRIRUFE
ID8gLCBURk9PVCA/ICwgVEJPRFkgKyApCi0gICAgICAgIHN3aXRjaChjaGlsZElEKQotICAgICAg
ICB7Ci0gICAgICAgIGNhc2UgSURfQ0FQVElPTjoKLSAgICAgICAgY2FzZSBJRF9DT0w6Ci0gICAg
ICAgIGNhc2UgSURfQ09MR1JPVVA6Ci0gICAgICAgIGNhc2UgSURfVEhFQUQ6Ci0gICAgICAgIGNh
c2UgSURfVEZPT1Q6Ci0gICAgICAgIGNhc2UgSURfVEJPRFk6Ci0gICAgICAgIGNhc2UgSURfVEVY
VDoKLSAgICAgICAgY2FzZSBJRF9GT1JNOgotICAgICAgICBjYXNlIElEX0NPTU1FTlQ6Ci0gICAg
ICAgIGNhc2UgSURfU0NSSVBUOgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICBjYXNlIElE
X1RIRUFEOgotICAgIGNhc2UgSURfVEZPT1Q6Ci0gICAgY2FzZSBJRF9UQk9EWToKLSAgICAgICAg
Ly8gVEhFQUQ6IFRSICsKLSAgICAgICAgaWYoY2hpbGRJRCA9PSBJRF9GT1JNIHx8IGNoaWxkSUQg
PT0gSURfVFIgfHwgY2hpbGRJRCA9PSBJRF9DT01NRU5UIHx8Ci0gICAgICAgICAgIGNoaWxkSUQg
PT0gSURfU0NSSVBUKSAKLSAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBjYXNlIElEX0NPTEdST1VQOgotICAgICAgICAvLyBDT0xHUk9VUDogQ09MICoK
LSAgICAgICAgaWYoY2hpbGRJRCA9PSBJRF9DT0wgfHwgY2hpbGRJRCA9PSBJRF9DT01NRU5UKSBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGNhc2UgSURfVFI6Ci0gICAg
ICAgIC8vIFRSOiBfOSArCi0gICAgICAgIGlmIChjaGlsZElEID09IElEX1NDUklQVCB8fCBjaGls
ZElEID09IElEX0ZPUk0pCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgcmV0dXJu
IGNoZWNrX2FycmF5KGNoaWxkSUQsIHRhZ19saXN0XzkpOwotICAgIGNhc2UgSURfRlJBTUVTRVQ6
Ci0gICAgICAgIC8vIEZSQU1FU0VUOiAoIF8xMCArICYgTk9GUkFNRVMgPyApCi0gICAgICAgIHJl
dHVybiBjaGVja19hcnJheShjaGlsZElELCB0YWdfbGlzdF8xMCk7Ci0gICAgICAgIHJldHVybiAo
Y2hpbGRJRCA9PSBJRF9OT0ZSQU1FUyk7Ci0gICAgY2FzZSBJRF9IRUFEOgotICAgICAgICAvLyBI
RUFEOiAoIFRJVExFICYgSVNJTkRFWCA/ICYgQkFTRSA/ICkgKyBfMTEKLSAgICAgICAgaWYoY2hp
bGRJRCA9PSBJRF9USVRMRSB8fCBjaGlsZElEID09IElEX0lTSU5ERVggfHwgY2hpbGRJRCA9PSBJ
RF9CQVNFKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIHJldHVybiBjaGVja19h
cnJheShjaGlsZElELCB0YWdfbGlzdF8xMSk7Ci0gICAgY2FzZSBJRF9IVE1MOgotICAgICAgICAv
LyBIVE1MOiAoIEhFQUQgLCBDT01NRU5ULCAoIEJPRFkgfCAoIEZSQU1FU0VUICYgTk9GUkFNRVMg
PyApICkgKQotICAgICAgICBzd2l0Y2goY2hpbGRJRCkKLSAgICAgICAgewotICAgICAgICBjYXNl
IElEX0hFQUQ6Ci0gICAgICAgIGNhc2UgSURfQ09NTUVOVDoKLSAgICAgICAgY2FzZSBJRF9CT0RZ
OgotICAgICAgICBjYXNlIElEX0ZSQU1FU0VUOgotICAgICAgICBjYXNlIElEX05PRlJBTUVTOgot
ICAgICAgICBjYXNlIElEX1NDUklQVDoKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgZGVm
YXVsdDoKLSAgICAgICAga2REZWJ1ZyggNjAzMCApIDw8ICJ1bmhhbmRsZWQgdGFnIGluIGR0ZC5j
cHA6Y2hlY2tDaGlsZCgpOiB0YWdJRD0iIDw8IHRhZ0lEIDw8ICIhIiA8PCBlbmRsOwotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi12b2lkIERPTTo6YWRkRm9yYmlkZGVuKGludCB0
YWdJZCwgdXNob3J0ICpmb3JiaWRkZW5UYWdzKQotewotICAgIHN3aXRjaCh0YWdJZCkKLSAgICB7
Ci0gICAgY2FzZSBJRF9MQUJFTDoKLSAgICAgICAgZm9yYmlkZGVuVGFnc1tJRF9MQUJFTF0rKzsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9CVVRUT046Ci0gICAgICAgIGZvcmJpZGRlblRh
Z3NbSURfQV0rKzsKLSAgICAgICAgZm9yYmlkZGVuVGFnc1tJRF9JTlBVVF0rKzsKLSAgICAgICAg
Zm9yYmlkZGVuVGFnc1tJRF9TRUxFQ1RdKys7Ci0gICAgICAgIGZvcmJpZGRlblRhZ3NbSURfVEVY
VEFSRUFdKys7Ci0gICAgICAgIGZvcmJpZGRlblRhZ3NbSURfTEFCRUxdKys7Ci0gICAgICAgIGZv
cmJpZGRlblRhZ3NbSURfQlVUVE9OXSsrOwotICAgICAgICBmb3JiaWRkZW5UYWdzW0lEX0ZPUk1d
Kys7Ci0gICAgICAgIGZvcmJpZGRlblRhZ3NbSURfSVNJTkRFWF0rKzsKLSAgICAgICAgZm9yYmlk
ZGVuVGFnc1tJRF9GSUVMRFNFVF0rKzsKLSAgICAgICAgZm9yYmlkZGVuVGFnc1tJRF9JRlJBTUVd
Kys7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LX0KLQotdm9pZCBET006OnJlbW92ZUZvcmJpZGRlbihpbnQgdGFnSWQsIHVzaG9ydCAqZm9yYmlk
ZGVuVGFncykKLXsKLSAgICBzd2l0Y2godGFnSWQpCi0gICAgewotICAgIGNhc2UgSURfTEFCRUw6
Ci0gICAgICAgIGZvcmJpZGRlblRhZ3NbSURfTEFCRUxdLS07Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgSURfQlVUVE9OOgotICAgICAgICBmb3JiaWRkZW5UYWdzW0lEX0FdLS07Ci0gICAgICAg
IGZvcmJpZGRlblRhZ3NbSURfSU5QVVRdLS07Ci0gICAgICAgIGZvcmJpZGRlblRhZ3NbSURfU0VM
RUNUXS0tOwotICAgICAgICBmb3JiaWRkZW5UYWdzW0lEX1RFWFRBUkVBXS0tOwotICAgICAgICBm
b3JiaWRkZW5UYWdzW0lEX0xBQkVMXS0tOwotICAgICAgICBmb3JiaWRkZW5UYWdzW0lEX0JVVFRP
Tl0tLTsKLSAgICAgICAgZm9yYmlkZGVuVGFnc1tJRF9GT1JNXS0tOwotICAgICAgICBmb3JiaWRk
ZW5UYWdzW0lEX0lTSU5ERVhdLS07Ci0gICAgICAgIGZvcmJpZGRlblRhZ3NbSURfRklFTERTRVRd
LS07Ci0gICAgICAgIGZvcmJpZGRlblRhZ3NbSURfSUZSQU1FXS0tOwotICAgICAgICBicmVhazsK
LSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLQotI2lmIDAKLQotCi1z
dHJ1Y3QgYXR0cl9wcml2IHsKLSAgICBhdHRyX3ByaXYoKSB7IGlkID0gbGVuID0gMCwgdmFsID0g
MDsgfQotICAgIGF0dHJfcHJpdih1c2hvcnQgaSwgY29uc3QgUUNoYXIgKnYsIHVzaG9ydCBsKQot
ICAgIHsgaWQgPWk7IGxlbiA9IGwsIHZhbCA9IHY7IH0KLSAgICB1c2hvcnQgaWQ7Ci0gICAgY29u
c3QgUUNoYXIgKnZhbDsKLSAgICB1c2hvcnQgbGVuOwotfTsKLQotRE9NU3RyaW5nIGZpbmRfYXR0
cih1c2hvcnQgaWQsIGNvbnN0IGF0dHJfcHJpdiAqYXR0cnMpCi17Ci0gICAgaW50IGkgPSAwOwot
ICAgIHdoaWxlKGF0dHJzW2ldLmlkICE9IDApCi0gICAgewotICAgICAgICBpZihhdHRyc1tpXS5p
ZCA9PSBpZCkKLSAgICAgICAgICAgIHJldHVybiBET01TdHJpbmcoYXR0cnNbaV0udmFsLCBhdHRy
c1tpXS5sZW4pOwotICAgICAgICBpKys7Ci0gICAgfQotICAgIHJldHVybiBET01TdHJpbmcoKTsK
LX0KLQotc3RhdGljIGNvbnN0IFFDaGFyIHZhbHVlXzFfMCBbXSA9IHsgJ04nLCdPJywnTicsJ0Un
IH07Ci0KLWF0dHJfcHJpdiBhdHRyX2xpc3RfMVtdID0gewotICAgIGF0dHJfcHJpdihBVFRSX0NM
RUFSLCB2YWx1ZV8xXzAsIDQpCi19OwotCi1zdGF0aWMgY29uc3QgUUNoYXIgdmFsdWVfMl8wIFtd
ID0geyAnUicsJ0UnLCdDJywnVCcgfTsKLQotYXR0cl9wcml2IGF0dHJfbGlzdF8yW10gPSB7Ci0g
ICAgYXR0cl9wcml2KEFUVFJfU0hBUEUsIHZhbHVlXzJfMCwgNCkKLX07Ci0KLXN0YXRpYyBjb25z
dCBRQ2hhciB2YWx1ZV8zXzAgW10gPSB7ICdSJywnRScsJ0MnLCdUJyB9OwotCi1hdHRyX3ByaXYg
YXR0cl9saXN0XzNbXSA9IHsKLSAgICBhdHRyX3ByaXYoQVRUUl9TSEFQRSwgdmFsdWVfM18wLCA0
KQotfTsKLQotc3RhdGljIGNvbnN0IFFDaGFyIHZhbHVlXzRfMCBbXSA9IHsgJ0QnLCdBJywnVCcs
J0EnIH07Ci0KLWF0dHJfcHJpdiBhdHRyX2xpc3RfNFtdID0gewotICAgIGF0dHJfcHJpdihBVFRS
X1ZBTFVFVFlQRSwgdmFsdWVfNF8wLCA0KQotfTsKLQotc3RhdGljIGNvbnN0IFFDaGFyIHZhbHVl
XzVfMCBbXSA9IHsgJ0cnLCdFJywnVCcgfTsKLXN0YXRpYyBjb25zdCBRQ2hhciB2YWx1ZV81XzEg
W10gPSB7ICdBJywnUCcsJ1AnLCdMJywnSScsJ0MnLCdBJywnVCcsJ0knLCdPJywnTicsJy8nLCdY
JywnLScsJ1cnLCdXJywnVycsJy0nLCdGJywnTycsJ1InLCdNJywnLScsJ1UnLCdSJywnTCcsJ0Un
LCdOJywnQycsJ08nLCdEJywnRScsJ0QnIH07Ci0KLWF0dHJfcHJpdiBhdHRyX2xpc3RfNVtdID0g
ewotICAgIGF0dHJfcHJpdihBVFRSX01FVEhPRCwgdmFsdWVfNV8wLCAzKSwKLSAgICBhdHRyX3By
aXYoQVRUUl9FTkNUWVBFLCB2YWx1ZV81XzEsIDMzKQotfTsKLQotc3RhdGljIGNvbnN0IFFDaGFy
IHZhbHVlXzZfMCBbXSA9IHsgJ1QnLCdFJywnWCcsJ1QnIH07Ci0KLWF0dHJfcHJpdiBhdHRyX2xp
c3RfNltdID0gewotICAgIGF0dHJfcHJpdihBVFRSX1RZUEUsIHZhbHVlXzZfMCwgNCkKLX07Ci0K
LXN0YXRpYyBjb25zdCBRQ2hhciB2YWx1ZV83XzAgW10gPSB7ICdTJywnVScsJ0InLCdNJywnSScs
J1QnIH07Ci0KLWF0dHJfcHJpdiBhdHRyX2xpc3RfN1tdID0gewotICAgIGF0dHJfcHJpdihBVFRS
X1RZUEUsIHZhbHVlXzdfMCwgNikKLX07Ci0KLXN0YXRpYyBjb25zdCBRQ2hhciB2YWx1ZV84XzAg
W10gPSB7ICcxJyB9OwotCi1hdHRyX3ByaXYgYXR0cl9saXN0XzhbXSA9IHsKLSAgICBhdHRyX3By
aXYoQVRUUl9TUEFOLCB2YWx1ZV84XzAsIDEpCi19OwotCi1zdGF0aWMgY29uc3QgUUNoYXIgdmFs
dWVfOV8wIFtdID0geyAnMScgfTsKLQotYXR0cl9wcml2IGF0dHJfbGlzdF85W10gPSB7Ci0gICAg
YXR0cl9wcml2KEFUVFJfU1BBTiwgdmFsdWVfOV8wLCAxKQotfTsKLQotc3RhdGljIGNvbnN0IFFD
aGFyIHZhbHVlXzEwXzAgW10gPSB7ICcxJyB9Owotc3RhdGljIGNvbnN0IFFDaGFyIHZhbHVlXzEw
XzEgW10gPSB7ICcxJyB9OwotCi1hdHRyX3ByaXYgYXR0cl9saXN0XzEwW10gPSB7Ci0gICAgYXR0
cl9wcml2KEFUVFJfUk9XU1BBTiwgdmFsdWVfMTBfMCwgMSksCi0gICAgYXR0cl9wcml2KEFUVFJf
Q09MU1BBTiwgdmFsdWVfMTBfMSwgMSkKLX07Ci0KLXN0YXRpYyBjb25zdCBRQ2hhciB2YWx1ZV8x
MV8wIFtdID0geyAnMScgfTsKLXN0YXRpYyBjb25zdCBRQ2hhciB2YWx1ZV8xMV8xIFtdID0geyAn
QScsJ1UnLCdUJywnTycgfTsKLQotYXR0cl9wcml2IGF0dHJfbGlzdF8xMVtdID0gewotICAgIGF0
dHJfcHJpdihBVFRSX0ZSQU1FQk9SREVSLCB2YWx1ZV8xMV8wLCAxKSwKLSAgICBhdHRyX3ByaXYo
QVRUUl9TQ1JPTExJTkcsIHZhbHVlXzExXzEsIDQpCi19OwotCi1zdGF0aWMgY29uc3QgUUNoYXIg
dmFsdWVfMTJfMCBbXSA9IHsgJzEnIH07Ci1zdGF0aWMgY29uc3QgUUNoYXIgdmFsdWVfMTJfMSBb
XSA9IHsgJ0EnLCdVJywnVCcsJ08nIH07Ci0KLWF0dHJfcHJpdiBhdHRyX2xpc3RfMTJbXSA9IHsK
LSAgICBhdHRyX3ByaXYoQVRUUl9GUkFNRUJPUkRFUiwgdmFsdWVfMTJfMCwgMSksCi0gICAgYXR0
cl9wcml2KEFUVFJfU0NST0xMSU5HLCB2YWx1ZV8xMl8xLCA0KQotfTsKLQotc3RhdGljIGNvbnN0
IFFDaGFyIHZhbHVlXzEzXzAgW10gPSB7ICctJywnLycsJy8nLCdXJywnMycsJ0MnLCcvJywnLycs
J0QnLCdUJywnRCcgfTsKLXN0YXRpYyBjb25zdCBRQ2hhciB2YWx1ZV8xM18xIFtdID0geyAnVCcs
J1InLCdBJywnTicsJ1MnLCdJJywnVCcsJ0knLCdPJywnTicsJ0EnLCdMJywnLycsJy8nLCdFJywn
TicgfTsKLQotYXR0cl9wcml2IGF0dHJfbGlzdF8xM1tdID0gewotICAgIGF0dHJfcHJpdihBVFRS
X1ZFUlNJT04sIHZhbHVlXzEzXzAsIDExKSwKLSAgICBhdHRyX3ByaXYoQVRUUl9IVE1MLCB2YWx1
ZV8xM18xLCAxNikKLX07Ci0KLURPTVN0cmluZyBET006OmZpbmREZWZBdHRyTm9uZSh1c2hvcnQp
Ci17Ci0gICAgcmV0dXJuIERPTVN0cmluZygpOwotfTsKLURPTVN0cmluZyBET006OmZpbmREZWZB
dHRyQlIodXNob3J0IGlkKQotewotICAgIHJldHVybiBmaW5kX2F0dHIoaWQsIGF0dHJfbGlzdF8x
KTsKLX0KLURPTVN0cmluZyBET006OmZpbmREZWZBdHRyQSh1c2hvcnQgaWQpCi17Ci0gICAgcmV0
dXJuIGZpbmRfYXR0cihpZCwgYXR0cl9saXN0XzIpOwotfQotRE9NU3RyaW5nIERPTTo6ZmluZERl
ZkF0dHJBUkVBKHVzaG9ydCBpZCkKLXsKLSAgICByZXR1cm4gZmluZF9hdHRyKGlkLCBhdHRyX2xp
c3RfMyk7Ci19Ci1ET01TdHJpbmcgRE9NOjpmaW5kRGVmQXR0clBBUkFNKHVzaG9ydCBpZCkKLXsK
LSAgICByZXR1cm4gZmluZF9hdHRyKGlkLCBhdHRyX2xpc3RfNCk7Ci19Ci1ET01TdHJpbmcgRE9N
OjpmaW5kRGVmQXR0ckZPUk0odXNob3J0IGlkKQotewotICAgIHJldHVybiBmaW5kX2F0dHIoaWQs
IGF0dHJfbGlzdF81KTsKLX0KLURPTVN0cmluZyBET006OmZpbmREZWZBdHRySU5QVVQodXNob3J0
IGlkKQotewotICAgIHJldHVybiBmaW5kX2F0dHIoaWQsIGF0dHJfbGlzdF82KTsKLX0KLURPTVN0
cmluZyBET006OmZpbmREZWZBdHRyQlVUVE9OKHVzaG9ydCBpZCkKLXsKLSAgICByZXR1cm4gZmlu
ZF9hdHRyKGlkLCBhdHRyX2xpc3RfNyk7Ci19Ci1ET01TdHJpbmcgRE9NOjpmaW5kRGVmQXR0ckNP
TEdST1VQKHVzaG9ydCBpZCkKLXsKLSAgICByZXR1cm4gZmluZF9hdHRyKGlkLCBhdHRyX2xpc3Rf
OCk7Ci19Ci1ET01TdHJpbmcgRE9NOjpmaW5kRGVmQXR0ckNPTCh1c2hvcnQgaWQpCi17Ci0gICAg
cmV0dXJuIGZpbmRfYXR0cihpZCwgYXR0cl9saXN0XzkpOwotfQotRE9NU3RyaW5nIERPTTo6Zmlu
ZERlZkF0dHJUSCh1c2hvcnQgaWQpCi17Ci0gICAgcmV0dXJuIGZpbmRfYXR0cihpZCwgYXR0cl9s
aXN0XzEwKTsKLX0KLURPTVN0cmluZyBET006OmZpbmREZWZBdHRyRlJBTUUodXNob3J0IGlkKQot
ewotICAgIHJldHVybiBmaW5kX2F0dHIoaWQsIGF0dHJfbGlzdF8xMSk7Ci19Ci1ET01TdHJpbmcg
RE9NOjpmaW5kRGVmQXR0cklGUkFNRSh1c2hvcnQgaWQpCi17Ci0gICAgcmV0dXJuIGZpbmRfYXR0
cihpZCwgYXR0cl9saXN0XzEyKTsKLX0KLURPTVN0cmluZyBET006OmZpbmREZWZBdHRySFRNTCh1
c2hvcnQgaWQpCi17Ci0gICAgcmV0dXJuIGZpbmRfYXR0cihpZCwgYXR0cl9saXN0XzEzKTsKLX0K
LQotI2VuZGlmCkluZGV4OiBraHRtbC9odG1sL2R0ZC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IGto
dG1sL2h0bWwvZHRkLmgKZGlmZiAtTiBraHRtbC9odG1sL2R0ZC5oCi0tLSBraHRtbC9odG1sL2R0
ZC5oCTEyIEFwciAyMDA1IDIyOjQ5OjQxIC0wMDAwCTEuNQorKysgL2Rldi9udWxsCTEgSmFuIDE5
NzAgMDA6MDA6MDAgLTAwMDAKQEAgLTEsNTggKzAsMCBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBw
YXJ0IG9mIHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4KLSAqCi0gKiAoQykgMTk5OSBM
YXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKLSAqIEJvc3RvbiwgTUEgMDIx
MTEtMTMwNywgVVNBLgotICoKLSAqLwotI2lmbmRlZiBfRE9NX2R0ZF9oXwotI2RlZmluZSBfRE9N
X2R0ZF9oXwotCi0jaW5jbHVkZSAiZG9tL2RvbV9zdHJpbmcuaCIKLSNpbmNsdWRlICJtaXNjL2h0
bWx0YWdzLmgiCi0KLW5hbWVzcGFjZSBET00KLXsKLQotdm9pZCBhZGRGb3JiaWRkZW4oaW50IHRh
Z0lkLCB1c2hvcnQgKmZvcmJpZGRlblRhZ3MpOwotdm9pZCByZW1vdmVGb3JiaWRkZW4oaW50IHRh
Z0lkLCB1c2hvcnQgKmZvcmJpZGRlblRhZ3MpOwotCi1lbnVtIHRhZ1N0YXR1cyB7IE9QVElPTkFM
LCBSRVFVSVJFRCwgRk9SQklEREVOIH07Ci0KLWJvb2wgY2hlY2tDaGlsZCh1c2hvcnQgdGFnSUQs
IHVzaG9ydCBjaGlsZElELCBib29sIHN0cmljdCk7Ci0KLWV4dGVybiBjb25zdCB1bnNpZ25lZCBz
aG9ydCB0YWdQcmlvcml0eUFycmF5W107Ci1leHRlcm4gY29uc3QgdGFnU3RhdHVzIGVuZFRhZ0Fy
cmF5W107Ci0KLWlubGluZSB1bnNpZ25lZCBzaG9ydCB0YWdQcmlvcml0eShRX1VJTlQzMiB0YWdJ
ZCkKLXsKLSAgICAvLyBUcmVhdCBjdXN0b20gZWxlbWVudHMgdGhlIHNhbWUgYXMgPHNwYW4+OyBh
bHNvIGRvbid0IHJlYWQgcGFzdCB0aGUgZW5kIG9mIHRoZSBhcnJheS4KLSAgICBpZiAodGFnSWQg
PiBJRF9MQVNUX1RBRykKLSAgICAgICAgcmV0dXJuIHRhZ1ByaW9yaXR5QXJyYXlbSURfU1BBTl07
Ci0gICAgcmV0dXJuIHRhZ1ByaW9yaXR5QXJyYXlbdGFnSWRdOwotfQotCi1pbmxpbmUgdGFnU3Rh
dHVzIGVuZFRhZ1JlcXVpcmVtZW50KFFfVUlOVDMyIHRhZ0lkKQotewotICAgIC8vIFRyZWF0IGN1
c3RvbSBlbGVtZW50cyB0aGUgc2FtZSBhcyA8c3Bhbj47IGFsc28gZG9uJ3QgcmVhZCBwYXN0IHRo
ZSBlbmQgb2YgdGhlIGFycmF5LgotICAgIGlmICh0YWdJZCA+IElEX0xBU1RfVEFHKQotICAgICAg
ICByZXR1cm4gZW5kVGFnQXJyYXlbSURfU1BBTl07Ci0gICAgcmV0dXJuIGVuZFRhZ0FycmF5W3Rh
Z0lkXTsKLX0KLQotfSAvL25hbWVzcGFjZSBET00KLSNlbmRpZgpJbmRleDoga2h0bWwvaHRtbC9o
dG1sX2Jhc2VpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9r
aHRtbC9odG1sL2h0bWxfYmFzZWltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjcyCmRp
ZmYgLXUgLXAgLXIxLjcyIGtodG1sL2h0bWwvaHRtbF9iYXNlaW1wbC5jcHAKLS0tIGtodG1sL2h0
bWwvaHRtbF9iYXNlaW1wbC5jcHAJMTIgTWF5IDIwMDUgMTc6MTE6MjEgLTAwMDAJMS43MgorKysg
a2h0bWwvaHRtbC9odG1sX2Jhc2VpbXBsLmNwcAk4IEp1bCAyMDA1IDAzOjA0OjA5IC0wMDAwCkBA
IC00OCw3ICs0OCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBET007CiB1c2luZyBuYW1lc3BhY2Uga2h0
bWw7CiAKIEhUTUxCb2R5RWxlbWVudEltcGw6OkhUTUxCb2R5RWxlbWVudEltcGwoRG9jdW1lbnRQ
dHIgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50SW1wbChkb2MpLCBtX2xpbmtEZWNsKDApCisgICAg
OiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjpib2R5KCksIGRvYyksIG1fbGlua0RlY2woMCkK
IHsKIH0KIApAQCAtNjEsMTEgKzYxLDYgQEAgSFRNTEJvZHlFbGVtZW50SW1wbDo6fkhUTUxCb2R5
RWxlbWVudEltcAogICAgIH0KIH0KIAotTm9kZUltcGw6OklkIEhUTUxCb2R5RWxlbWVudEltcGw6
OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfQk9EWTsKLX0KLQogdm9pZCBIVE1MQm9keUVs
ZW1lbnRJbXBsOjpjcmVhdGVMaW5rRGVjbCgpCiB7CiAgICAgbV9saW5rRGVjbCA9IG5ldyBDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbkltcGw7CkBAIC0yODksNyArMjg0LDE4IEBAIHZvaWQgSFRN
TEJvZHlFbGVtZW50SW1wbDo6c2V0VkxpbmsoY29uc3QKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAog
SFRNTEZyYW1lRWxlbWVudEltcGw6OkhUTUxGcmFtZUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpk
b2MpCi0gICAgOiBIVE1MRWxlbWVudEltcGwoZG9jKQorICAgIDogSFRNTEVsZW1lbnRJbXBsKEhU
TUxOYW1lczo6ZnJhbWUoKSwgZG9jKQoreworICAgIGluaXQoKTsKK30KKworSFRNTEZyYW1lRWxl
bWVudEltcGw6OkhUTUxGcmFtZUVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05h
bWUsIERvY3VtZW50UHRyICpkb2MpCisgICAgOiBIVE1MRWxlbWVudEltcGwodGFnTmFtZSwgZG9j
KQoreworICAgIGluaXQoKTsKK30KKwordm9pZCBIVE1MRnJhbWVFbGVtZW50SW1wbDo6aW5pdCgp
CiB7CiAgICAgbV9mcmFtZUJvcmRlciA9IHRydWU7CiAgICAgbV9mcmFtZUJvcmRlclNldCA9IGZh
bHNlOwpAQCAtMzAzLDExICszMDksNiBAQCBIVE1MRnJhbWVFbGVtZW50SW1wbDo6fkhUTUxGcmFt
ZUVsZW1lbnRJCiB7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MRnJhbWVFbGVtZW50SW1wbDo6aWQo
KSBjb25zdAotewotICAgIHJldHVybiBJRF9GUkFNRTsKLX0KLQogYm9vbCBIVE1MRnJhbWVFbGVt
ZW50SW1wbDo6aXNVUkxBbGxvd2VkKGNvbnN0IEF0b21pY1N0cmluZyAmVVJMU3RyaW5nKSBjb25z
dAogewogICAgIGlmIChVUkxTdHJpbmcuaXNFbXB0eSgpKSB7CkBAIC00ODIsNyArNDgzLDcgQEAg
dm9pZCBIVE1MRnJhbWVFbGVtZW50SW1wbDo6YXR0YWNoKCkKIAogICAgIC8vIGluaGVyaXQgZGVm
YXVsdCBzZXR0aW5ncyBmcm9tIHBhcmVudCBmcmFtZXNldAogICAgIGZvciAoTm9kZUltcGwgKm5v
ZGUgPSBwYXJlbnROb2RlKCk7IG5vZGU7IG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCkpCi0gICAg
ICAgIGlmIChub2RlLT5pZCgpID09IElEX0ZSQU1FU0VUKSB7CisgICAgICAgIGlmIChub2RlLT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6ZnJhbWVzZXQoKSkpIHsKICAgICAgICAgICAgIEhUTUxGcmFt
ZVNldEVsZW1lbnRJbXBsKiBmcmFtZXNldCA9IHN0YXRpY19jYXN0PEhUTUxGcmFtZVNldEVsZW1l
bnRJbXBsKj4obm9kZSk7CiAgICAgICAgICAgICBpZiAoIW1fZnJhbWVCb3JkZXJTZXQpCiAgICAg
ICAgICAgICAgICAgbV9mcmFtZUJvcmRlciA9IGZyYW1lc2V0LT5mcmFtZUJvcmRlcigpOwpAQCAt
NjYxLDcgKzY2Miw3IEBAIHZvaWQgSFRNTEZyYW1lRWxlbWVudEltcGw6OnNldFNyYyhjb25zdCAK
IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogSFRNTEZyYW1lU2V0RWxlbWVudEltcGw6OkhUTUxGcmFt
ZVNldEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0gICAgOiBIVE1MRWxlbWVudEltcGwo
ZG9jKQorICAgIDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6ZnJhbWVzZXQoKSwgZG9jKQog
ewogICAgIC8vIGRlZmF1bHQgdmFsdWUgZm9yIHJvd3MgYW5kIGNvbHMuLi4KICAgICBtX3RvdGFs
Um93cyA9IDE7CkBAIC02ODUsOSArNjg2LDExIEBAIEhUTUxGcmFtZVNldEVsZW1lbnRJbXBsOjp+
SFRNTEZyYW1lU2V0RWwKICAgICAgICAgZGVsZXRlIFtdIG1fY29sczsKIH0KIAotTm9kZUltcGw6
OklkIEhUTUxGcmFtZVNldEVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Citib29sIEhUTUxGcmFtZVNl
dEVsZW1lbnRJbXBsOjpjaGVja0RURChjb25zdCBOb2RlSW1wbCogbmV3Q2hpbGQpCiB7Ci0gICAg
cmV0dXJuIElEX0ZSQU1FU0VUOworCS8vIEZJWE1FOiBPbGQgY29kZSBoYWQgYWRqYWNlbnQgZG91
YmxlIHJldHVybnMgYW5kIHNlZW1lZCB0byB3YW50IHRvIGRvIHNvbWV0aGluZyB3aXRoIE5PRlJB
TUVTIChidXQgZGlkbid0KS4KKwkvLyBXaGF0IGlzIHRoZSBjb3JyZWN0IGJlaGF2aW9yPworCXJl
dHVybiBuZXdDaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZyYW1lc2V0KCkpIHx8IG5ld0No
aWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZnJhbWUoKSk7CiB9CiAKIHZvaWQgSFRNTEZyYW1l
U2V0RWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwg
KmF0dHIpCkBAIC03NTIsOCArNzU1LDcgQEAgdm9pZCBIVE1MRnJhbWVTZXRFbGVtZW50SW1wbDo6
YXR0YWNoKCkKICAgICBIVE1MRWxlbWVudEltcGwqIG5vZGUgPSBzdGF0aWNfY2FzdDxIVE1MRWxl
bWVudEltcGwqPihwYXJlbnROb2RlKCkpOwogICAgIHdoaWxlKG5vZGUpCiAgICAgewotICAgICAg
ICBpZihub2RlLT5pZCgpID09IElEX0ZSQU1FU0VUKQotICAgICAgICB7CisgICAgICAgIGlmIChu
b2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZnJhbWVzZXQoKSkpIHsKICAgICAgICAgICAgIEhU
TUxGcmFtZVNldEVsZW1lbnRJbXBsKiBmcmFtZXNldCA9IHN0YXRpY19jYXN0PEhUTUxGcmFtZVNl
dEVsZW1lbnRJbXBsKj4obm9kZSk7CiAgICAgICAgICAgICBpZighZnJhbWVCb3JkZXJTZXQpICBm
cmFtZWJvcmRlciA9IGZyYW1lc2V0LT5mcmFtZUJvcmRlcigpOwogICAgICAgICAgICAgaWYoIW5v
cmVzaXplKSAgbm9yZXNpemUgPSBmcmFtZXNldC0+bm9SZXNpemUoKTsKQEAgLTgxNyw3ICs4MTks
NyBAQCB2b2lkIEhUTUxGcmFtZVNldEVsZW1lbnRJbXBsOjpzZXRSb3dzKGNvCiAvLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCiAKIEhUTUxIZWFkRWxlbWVudEltcGw6OkhUTUxIZWFkRWxlbWVudEltcGwoRG9j
dW1lbnRQdHIgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50SW1wbChkb2MpCisgICAgOiBIVE1MRWxl
bWVudEltcGwoSFRNTE5hbWVzOjpoZWFkKCksIGRvYykKIHsKIH0KIApAQCAtODI1LDExICs4Mjcs
NiBAQCBIVE1MSGVhZEVsZW1lbnRJbXBsOjp+SFRNTEhlYWRFbGVtZW50SW1wCiB7CiB9CiAKLU5v
ZGVJbXBsOjpJZCBIVE1MSGVhZEVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IElEX0hFQUQ7Ci19Ci0KIERPTVN0cmluZyBIVE1MSGVhZEVsZW1lbnRJbXBsOjpwcm9maWxlKCkg
Y29uc3QKIHsKICAgICByZXR1cm4gZ2V0QXR0cmlidXRlKEFUVFJfUFJPRklMRSk7CkBAIC04NDAs
MTAgKzgzNywxOCBAQCB2b2lkIEhUTUxIZWFkRWxlbWVudEltcGw6OnNldFByb2ZpbGUoY29uCiAg
ICAgc2V0QXR0cmlidXRlKEFUVFJfUFJPRklMRSwgdmFsdWUpOwogfQogCitib29sIEhUTUxIZWFk
RWxlbWVudEltcGw6OmNoZWNrRFREKGNvbnN0IE5vZGVJbXBsKiBuZXdDaGlsZCkKK3sKKwlyZXR1
cm4gbmV3Q2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0aXRsZSgpKSB8fCBuZXdDaGlsZC0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OmlzaW5kZXgoKSkgfHwKKwkJICAgbmV3Q2hpbGQtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjpiYXNlKCkpIHx8IG5ld0NoaWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6c2NyaXB0KCkpIHx8CisJCSAgIG5ld0NoaWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c3R5
bGUoKSkgfHwgbmV3Q2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjptZXRhKCkpIHx8CisJCSAg
IG5ld0NoaWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6bGluaygpKSB8fCBuZXdDaGlsZC0+aXNU
ZXh0Tm9kZSgpOworfQorCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxIdG1sRWxlbWVudElt
cGw6OkhUTUxIdG1sRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgICA6IEhUTUxFbGVt
ZW50SW1wbChkb2MpCisgICAgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjpodG1sKCksIGRv
YykKIHsKIH0KIApAQCAtODUxLDExICs4NTYsNiBAQCBIVE1MSHRtbEVsZW1lbnRJbXBsOjp+SFRN
TEh0bWxFbGVtZW50SW1wCiB7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MSHRtbEVsZW1lbnRJbXBs
OjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0hUTUw7Ci19Ci0KIERPTVN0cmluZyBIVE1M
SHRtbEVsZW1lbnRJbXBsOjp2ZXJzaW9uKCkgY29uc3QKIHsKICAgICByZXR1cm4gZ2V0QXR0cmli
dXRlKEFUVFJfVkVSU0lPTik7CkBAIC04NjYsOSArODY2LDE3IEBAIHZvaWQgSFRNTEh0bWxFbGVt
ZW50SW1wbDo6c2V0VmVyc2lvbihjb24KICAgICBzZXRBdHRyaWJ1dGUoQVRUUl9WRVJTSU9OLCB2
YWx1ZSk7CiB9CiAKK2Jvb2wgSFRNTEh0bWxFbGVtZW50SW1wbDo6Y2hlY2tEVEQoY29uc3QgTm9k
ZUltcGwqIG5ld0NoaWxkKQoreworCS8vIEZJWE1FOiBXaHkgaXMgPHNjcmlwdD4gYWxsb3dlZCBo
ZXJlPworCXJldHVybiBuZXdDaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmhlYWQoKSkgfHwg
bmV3Q2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpib2R5KCkpIHx8CisJCSAgIG5ld0NoaWxk
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZnJhbWVzZXQoKSkgfHwgbmV3Q2hpbGQtPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjpub2ZyYW1lcygpKSB8fAorCQkgICBuZXdDaGlsZC0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OnNjcmlwdCgpKTsKK30KKwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1IVE1MSUZy
YW1lRWxlbWVudEltcGw6OkhUTUxJRnJhbWVFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKSA6
IEhUTUxGcmFtZUVsZW1lbnRJbXBsKGRvYykKK0hUTUxJRnJhbWVFbGVtZW50SW1wbDo6SFRNTElG
cmFtZUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpIDogSFRNTEZyYW1lRWxlbWVudEltcGwo
SFRNTE5hbWVzOjppZnJhbWUoKSwgZG9jKQogewogICAgIG1fZnJhbWVCb3JkZXIgPSBmYWxzZTsK
ICAgICBtX21hcmdpbldpZHRoID0gLTE7CkBAIC04ODAsMTEgKzg4OCw2IEBAIEhUTUxJRnJhbWVF
bGVtZW50SW1wbDo6fkhUTUxJRnJhbWVFbGVtZW4KIHsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxJ
RnJhbWVFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9JRlJBTUU7Ci19
Ci0KIGJvb2wgSFRNTElGcmFtZUVsZW1lbnRJbXBsOjptYXBUb0VudHJ5KE5vZGVJbXBsOjpJZCBh
dHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdAogewogICAgIHN3aXRjaCAo
YXR0cikgewpJbmRleDoga2h0bWwvaHRtbC9odG1sX2Jhc2VpbXBsLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sX2Jhc2VpbXBsLmgsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuMjcKZGlmZiAtdSAtcCAtcjEuMjcga2h0bWwvaHRtbC9odG1sX2Jh
c2VpbXBsLmgKLS0tIGtodG1sL2h0bWwvaHRtbF9iYXNlaW1wbC5oCTExIE1heSAyMDA1IDA1OjQ5
OjM0IC0wMDAwCTEuMjcKKysrIGtodG1sL2h0bWwvaHRtbF9iYXNlaW1wbC5oCTggSnVsIDIwMDUg
MDM6MDQ6MTAgLTAwMDAKQEAgLTI2LDcgKzI2LDYgQEAKICNpZm5kZWYgSFRNTF9CQVNFSU1QTF9I
CiAjZGVmaW5lIEhUTUxfQkFTRUlNUExfSAogCi0jaW5jbHVkZSAiaHRtbC9kdGQuaCIKICNpbmNs
dWRlICJodG1sL2h0bWxfZWxlbWVudGltcGwuaCIKICNpbmNsdWRlICJtaXNjL2todG1sbGF5b3V0
LmgiCiAKQEAgLTU1LDggKzU0LDkgQEAgcHVibGljOgogICAgIEhUTUxCb2R5RWxlbWVudEltcGwo
RG9jdW1lbnRQdHIgKmRvYyk7CiAgICAgfkhUTUxCb2R5RWxlbWVudEltcGwoKTsKIAotICAgIHZp
cnR1YWwgSWQgaWQoKSBjb25zdDsKLQorICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdS
ZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9CisgICAgdmly
dHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAxMDsgfQorICAgIAogICAgIHZp
cnR1YWwgYm9vbCBtYXBUb0VudHJ5KE5vZGVJbXBsOjpJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVF
bnRyeSYgcmVzdWx0KSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1
dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqKTsKIApAQCAtOTIsMTEgKzkyLDE0IEBAIGNsYXNzIEhU
TUxGcmFtZUVsZW1lbnRJbXBsIDogcHVibGljIEhUTUwKIAogcHVibGljOgogICAgIEhUTUxGcmFt
ZUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpOwotCisgICAgSFRNTEZyYW1lRWxlbWVudElt
cGwoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnRQdHIqIGRvYyk7CiAgICAg
fkhUTUxGcmFtZUVsZW1lbnRJbXBsKCk7CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7Cisg
ICAgdm9pZCBpbml0KCk7CiAKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWly
ZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNGb3JiaWRkZW47IH0KKyAgICB2aXJ0dWFs
IGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgCiAgICAgdmlydHVhbCB2
b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKik7CiAgICAgdmly
dHVhbCB2b2lkIGF0dGFjaCgpOwogICAgIHZpcnR1YWwgdm9pZCBkZXRhY2goKTsKQEAgLTE2OCwx
MCArMTcxLDExIEBAIGNsYXNzIEhUTUxGcmFtZVNldEVsZW1lbnRJbXBsIDogcHVibGljIEgKICAg
ICBmcmllbmQgY2xhc3Mga2h0bWw6OlJlbmRlckZyYW1lU2V0OwogcHVibGljOgogICAgIEhUTUxG
cmFtZVNldEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpOwotCiAgICAgfkhUTUxGcmFtZVNl
dEVsZW1lbnRJbXBsKCk7CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CisgICAgdmlydHVh
bCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3Rh
dHVzUmVxdWlyZWQ7IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0
dXJuIDEwOyB9CisJdmlydHVhbCBib29sIGNoZWNrRFREKGNvbnN0IE5vZGVJbXBsKiBuZXdDaGls
ZCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmli
dXRlSW1wbCAqKTsKICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoKCk7CkBAIC0yMTYsMTAgKzIyMCwx
MSBAQCBjbGFzcyBIVE1MSGVhZEVsZW1lbnRJbXBsIDogcHVibGljIEhUTUxFCiB7CiBwdWJsaWM6
CiAgICAgSFRNTEhlYWRFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKTsKLQogICAgIH5IVE1M
SGVhZEVsZW1lbnRJbXBsKCk7CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CisgICAgdmly
dHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFn
U3RhdHVzT3B0aW9uYWw7IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsg
cmV0dXJuIDEwOyB9CisJdmlydHVhbCBib29sIGNoZWNrRFREKGNvbnN0IE5vZGVJbXBsKiBuZXdD
aGlsZCk7CiAKICAgICBET01TdHJpbmcgcHJvZmlsZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0UHJv
ZmlsZShjb25zdCBET01TdHJpbmcgJik7CkBAIC0yMzMsNyArMjM4LDkgQEAgcHVibGljOgogICAg
IEhUTUxIdG1sRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYyk7CiAgICAgfkhUTUxIdG1sRWxl
bWVudEltcGwoKTsKIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEhU
TUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNS
ZXF1aXJlZDsgfQorICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4g
MTE7IH0KKwl2aXJ0dWFsIGJvb2wgY2hlY2tEVEQoY29uc3QgTm9kZUltcGwqIG5ld0NoaWxkKTsK
IAogICAgIERPTVN0cmluZyB2ZXJzaW9uKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRWZXJzaW9uKGNv
bnN0IERPTVN0cmluZyAmKTsKQEAgLTI0NiwxMCArMjUzLDEwIEBAIGNsYXNzIEhUTUxJRnJhbWVF
bGVtZW50SW1wbCA6IHB1YmxpYyBIVE0KIHsKIHB1YmxpYzoKICAgICBIVE1MSUZyYW1lRWxlbWVu
dEltcGwoRG9jdW1lbnRQdHIgKmRvYyk7Ci0KICAgICB+SFRNTElGcmFtZUVsZW1lbnRJbXBsKCk7
CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CisgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVz
IGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzUmVxdWlyZWQ7IH0K
KyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDE7IH0KIAogICAg
IHZpcnR1YWwgYm9vbCBtYXBUb0VudHJ5KE5vZGVJbXBsOjpJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1
dGVFbnRyeSYgcmVzdWx0KSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRy
aWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqYXR0cik7CkluZGV4OiBraHRtbC9odG1sL2h0bWxf
YmxvY2tpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRt
bC9odG1sL2h0bWxfYmxvY2tpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNwpkaWZm
IC11IC1wIC1yMS4xNyBraHRtbC9odG1sL2h0bWxfYmxvY2tpbXBsLmNwcAotLS0ga2h0bWwvaHRt
bC9odG1sX2Jsb2NraW1wbC5jcHAJMTEgTWF5IDIwMDUgMDU6NDk6MzQgLTAwMDAJMS4xNworKysg
a2h0bWwvaHRtbC9odG1sX2Jsb2NraW1wbC5jcHAJOCBKdWwgMjAwNSAwMzowNDoxMCAtMDAwMApA
QCAtMzcsNyArMzcsNyBAQCB1c2luZyBuYW1lc3BhY2Uga2h0bWw7CiB1c2luZyBuYW1lc3BhY2Ug
RE9NOwogCiBIVE1MQmxvY2txdW90ZUVsZW1lbnRJbXBsOjpIVE1MQmxvY2txdW90ZUVsZW1lbnRJ
bXBsKERvY3VtZW50UHRyICpkb2MpCi0gICAgOiBIVE1MRWxlbWVudEltcGwoZG9jKQorICAgIDog
SFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6YmxvY2txdW90ZSgpLCBkb2MpCiB7CiB9CiAKQEAg
LTQ1LDExICs0NSw2IEBAIEhUTUxCbG9ja3F1b3RlRWxlbWVudEltcGw6On5IVE1MQmxvY2txdW8K
IHsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxCbG9ja3F1b3RlRWxlbWVudEltcGw6OmlkKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gSURfQkxPQ0tRVU9URTsKLX0KLQogRE9NU3RyaW5nIEhUTUxCbG9j
a3F1b3RlRWxlbWVudEltcGw6OmNpdGUoKSBjb25zdAogewogICAgIHJldHVybiBnZXRBdHRyaWJ1
dGUoQVRUUl9DSVRFKTsKQEAgLTYzLDcgKzU4LDcgQEAgdm9pZCBIVE1MQmxvY2txdW90ZUVsZW1l
bnRJbXBsOjpzZXRDaXRlKAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MRGl2RWxlbWVudElt
cGw6OkhUTUxEaXZFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAgIDogSFRNTEVsZW1l
bnRJbXBsKGRvYykKKyAgICA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6OmRpdigpLCBkb2Mp
CiB7CiB9CiAKQEAgLTcxLDExICs2Niw2IEBAIEhUTUxEaXZFbGVtZW50SW1wbDo6fkhUTUxEaXZF
bGVtZW50SW1wbCgKIHsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxEaXZFbGVtZW50SW1wbDo6aWQo
KSBjb25zdAotewotICAgIHJldHVybiBJRF9ESVY7Ci19Ci0KIGJvb2wgSFRNTERpdkVsZW1lbnRJ
bXBsOjptYXBUb0VudHJ5KE5vZGVJbXBsOjpJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYg
cmVzdWx0KSBjb25zdAogewogICAgIGlmIChhdHRyID09IEFUVFJfQUxJR04pIHsKQEAgLTEyMCw3
ICsxMTAsNyBAQCB2b2lkIEhUTUxEaXZFbGVtZW50SW1wbDo6c2V0QWxpZ24oY29uc3QgCiAvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxIUkVsZW1lbnRJbXBsOjpIVE1MSFJFbGVtZW50SW1wbChE
b2N1bWVudFB0ciAqZG9jKQotICAgIDogSFRNTEVsZW1lbnRJbXBsKGRvYykKKyAgICA6IEhUTUxF
bGVtZW50SW1wbChIVE1MTmFtZXM6OmhyKCksIGRvYykKIHsKIH0KIApAQCAtMTI4LDExICsxMTgs
NiBAQCBIVE1MSFJFbGVtZW50SW1wbDo6fkhUTUxIUkVsZW1lbnRJbXBsKCkKIHsKIH0KIAotTm9k
ZUltcGw6OklkIEhUTUxIUkVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElE
X0hSOwotfQotCiBib29sIEhUTUxIUkVsZW1lbnRJbXBsOjptYXBUb0VudHJ5KE5vZGVJbXBsOjpJ
ZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdAogewogICAgIHN3aXRj
aCAoYXR0cikgewpAQCAtMjUyLDExICsyMzcsMjEgQEAgdm9pZCBIVE1MSFJFbGVtZW50SW1wbDo6
c2V0V2lkdGgoY29uc3QgRAogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUhUTUxIZWFkaW5nRWxl
bWVudEltcGw6OkhUTUxIZWFkaW5nRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgdXNob3J0
IF90YWdpZCkKLSAgICA6IEhUTUxHZW5lcmljRWxlbWVudEltcGwoZG9jLCBfdGFnaWQpCitIVE1M
SGVhZGluZ0VsZW1lbnRJbXBsOjpIVE1MSGVhZGluZ0VsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmll
ZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50UHRyICpkb2MpCisgICAgOiBIVE1MRWxlbWVudEltcGwo
dGFnTmFtZSwgZG9jKQogewogfQogCitib29sIEhUTUxIZWFkaW5nRWxlbWVudEltcGw6OmNoZWNr
RFREKGNvbnN0IE5vZGVJbXBsKiBuZXdDaGlsZCkKK3sKKyAgICBpZiAobmV3Q2hpbGQtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjpoMSgpKSB8fCBuZXdDaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
OmgyKCkpIHx8CisgICAgICAgIG5ld0NoaWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDMoKSkg
fHwgbmV3Q2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoNCgpKSB8fAorICAgICAgICBuZXdD
aGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omg1KCkpIHx8IG5ld0NoaWxkLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6aDYoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBp
bkVpdGhlclRhZ0xpc3QobmV3Q2hpbGQpOworfQorCiBET01TdHJpbmcgSFRNTEhlYWRpbmdFbGVt
ZW50SW1wbDo6YWxpZ24oKSBjb25zdAogewogICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoQVRUUl9B
TElHTik7CkBAIC0yNzAsMTMgKzI2NSwxMyBAQCB2b2lkIEhUTUxIZWFkaW5nRWxlbWVudEltcGw6
OnNldEFsaWduKGNvCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxQYXJhZ3JhcGhFbGVtZW50
SW1wbDo6SFRNTFBhcmFncmFwaEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0gICAgOiBI
VE1MRWxlbWVudEltcGwoZG9jKQorICAgIDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6cCgp
LCBkb2MpCiB7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MUGFyYWdyYXBoRWxlbWVudEltcGw6Omlk
KCkgY29uc3QKK2Jvb2wgSFRNTFBhcmFncmFwaEVsZW1lbnRJbXBsOjpjaGVja0RURChjb25zdCBO
b2RlSW1wbCogbmV3Q2hpbGQpCiB7Ci0gICAgcmV0dXJuIElEX1A7CisgICAgcmV0dXJuIGluSW5s
aW5lVGFnTGlzdChuZXdDaGlsZCkgfHwgKGdldERvY3VtZW50KCktPmluQ29tcGF0TW9kZSgpICYm
IG5ld0NoaWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGFibGUoKSkpOwogfQogCiBib29sIEhU
TUxQYXJhZ3JhcGhFbGVtZW50SW1wbDo6bWFwVG9FbnRyeShOb2RlSW1wbDo6SWQgYXR0ciwgTWFw
cGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3QKQEAgLTMyMiw4ICszMTcsOCBAQCB2b2lk
IEhUTUxQYXJhZ3JhcGhFbGVtZW50SW1wbDo6c2V0QWxpZ24oCiAKIC8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KIAotSFRNTFByZUVsZW1lbnRJbXBsOjpIVE1MUHJlRWxlbWVudEltcGwoRG9jdW1lbnRQdHIg
KmRvYywgdW5zaWduZWQgc2hvcnQgX3RhZ2lkKQotICAgIDogSFRNTEdlbmVyaWNFbGVtZW50SW1w
bChkb2MsIF90YWdpZCkKK0hUTUxQcmVFbGVtZW50SW1wbDo6SFRNTFByZUVsZW1lbnRJbXBsKGNv
bnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50UHRyICpkb2MpCisgICAgOiBIVE1M
RWxlbWVudEltcGwodGFnTmFtZSwgZG9jKQogewogfQogCkBAIC0zNDMsMTYgKzMzOCwxMSBAQCB2
b2lkIEhUTUxQcmVFbGVtZW50SW1wbDo6c2V0V2lkdGgobG9uZyB3CiBjb25zdCBpbnQgZGVmYXVs
dE1pbmltdW1EZWxheSA9IDYwOwogCiBIVE1MTWFycXVlZUVsZW1lbnRJbXBsOjpIVE1MTWFycXVl
ZUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi06IEhUTUxFbGVtZW50SW1wbChkb2MpLAor
OiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjptYXJxdWVlKCksIGRvYyksCiAgIG1fbWluaW11
bURlbGF5KGRlZmF1bHRNaW5pbXVtRGVsYXkpCiB7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MTWFy
cXVlZUVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX01BUlFVRUU7Ci19
Ci0KIGJvb2wgSFRNTE1hcnF1ZWVFbGVtZW50SW1wbDo6bWFwVG9FbnRyeShOb2RlSW1wbDo6SWQg
YXR0ciwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3QKIHsKICAgICBzd2l0Y2gg
KGF0dHIpIHsKQEAgLTQzNCwxOSArNDI0LDMgQEAgdm9pZCBIVE1MTWFycXVlZUVsZW1lbnRJbXBs
OjpwYXJzZU1hcHBlZAogICAgICAgICAgICAgSFRNTEVsZW1lbnRJbXBsOjpwYXJzZU1hcHBlZEF0
dHJpYnV0ZShhdHRyKTsKICAgICB9CiB9Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1IVE1MTGF5
ZXJFbGVtZW50SW1wbDo6SFRNTExheWVyRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAg
ICA6IEhUTUxEaXZFbGVtZW50SW1wbCggZG9jICkKLXsKLX0KLQotSFRNTExheWVyRWxlbWVudElt
cGw6On5IVE1MTGF5ZXJFbGVtZW50SW1wbCgpCi17Ci19Ci0KLU5vZGVJbXBsOjpJZCBIVE1MTGF5
ZXJFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9MQVlFUjsKLX0KSW5k
ZXg6IGtodG1sL2h0bWwvaHRtbF9ibG9ja2ltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfYmxvY2tpbXBsLmgsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuOQpkaWZmIC11IC1wIC1yMS45IGtodG1sL2h0bWwvaHRtbF9ibG9ja2ltcGwuaAot
LS0ga2h0bWwvaHRtbC9odG1sX2Jsb2NraW1wbC5oCTExIE1heSAyMDA1IDA1OjQ5OjM0IC0wMDAw
CTEuOQorKysga2h0bWwvaHRtbC9odG1sX2Jsb2NraW1wbC5oCTggSnVsIDIwMDUgMDM6MDQ6MTAg
LTAwMDAKQEAgLTI2LDcgKzI2LDYgQEAKICNkZWZpbmUgSFRNTF9CTE9DS0lNUExfSAogCiAjaW5j
bHVkZSAiaHRtbF9lbGVtZW50aW1wbC5oIgotI2luY2x1ZGUgImR0ZC5oIgogCiBuYW1lc3BhY2Ug
RE9NIHsKIApAQCAtNDAsOCArMzksOSBAQCBwdWJsaWM6CiAgICAgSFRNTEJsb2NrcXVvdGVFbGVt
ZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKTsKICAgICB+SFRNTEJsb2NrcXVvdGVFbGVtZW50SW1w
bCgpOwogCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwotCisgICAgdmlydHVhbCBIVE1MVGFn
U3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzUmVxdWly
ZWQ7IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDU7IH0K
KyAgICAKICAgICBET01TdHJpbmcgY2l0ZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0Q2l0ZShjb25z
dCBET01TdHJpbmcgJik7CiB9OwpAQCAtNTUsOCArNTUsOSBAQCBjbGFzcyBIVE1MRGl2RWxlbWVu
dEltcGwgOiBwdWJsaWMgSFRNTEVsCiBwdWJsaWM6CiAgICAgSFRNTERpdkVsZW1lbnRJbXBsKERv
Y3VtZW50UHRyICpkb2MpOwogICAgIH5IVE1MRGl2RWxlbWVudEltcGwoKTsKLQotICAgIHZpcnR1
YWwgSWQgaWQoKSBjb25zdDsKKyAgICAKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFn
UmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQorICAgIHZp
cnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gNTsgfQogICAgIAogICAgIHZp
cnR1YWwgYm9vbCBtYXBUb0VudHJ5KElkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1
bHQpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRB
dHRyaWJ1dGVJbXBsICp0b2tlbik7CkBAIC03Miw4ICs3Myw5IEBAIGNsYXNzIEhUTUxIUkVsZW1l
bnRJbXBsIDogcHVibGljIEhUTUxFbGUKIHB1YmxpYzoKICAgICBIVE1MSFJFbGVtZW50SW1wbChE
b2N1bWVudFB0ciAqZG9jKTsKICAgICB+SFRNTEhSRWxlbWVudEltcGwoKTsKLQotICAgIHZpcnR1
YWwgSWQgaWQoKSBjb25zdDsKKyAgICAKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFn
UmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNGb3JiaWRkZW47IH0KKyAgICB2
aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KICAgICAKICAgICB2
aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVz
dWx0KSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVk
QXR0cmlidXRlSW1wbCAqKTsKQEAgLTkzLDEwICs5NSwxNCBAQCBwdWJsaWM6CiAKIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KIAotY2xhc3MgSFRNTEhlYWRpbmdFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1M
R2VuZXJpY0VsZW1lbnRJbXBsCitjbGFzcyBIVE1MSGVhZGluZ0VsZW1lbnRJbXBsIDogcHVibGlj
IEhUTUxFbGVtZW50SW1wbAogewogcHVibGljOgotICAgIEhUTUxIZWFkaW5nRWxlbWVudEltcGwo
RG9jdW1lbnRQdHIgKmRvYywgdXNob3J0IF90YWdpZCk7CisgICAgSFRNTEhlYWRpbmdFbGVtZW50
SW1wbChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudFB0ciAqZG9jKTsKKwor
ICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0
dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBj
b25zdCB7IHJldHVybiA1OyB9CisJdmlydHVhbCBib29sIGNoZWNrRFREKGNvbnN0IE5vZGVJbXBs
KiBuZXdDaGlsZCk7CiAKICAgICBET01TdHJpbmcgYWxpZ24oKSBjb25zdDsKICAgICB2b2lkIHNl
dEFsaWduKGNvbnN0IERPTVN0cmluZyAmKTsKQEAgLTEwNCwyMSArMTEwLDE3IEBAIHB1YmxpYzoK
IAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0vKgotICogd2VyZSBub3QgdXNpbmcgSFRNTEVsZW1l
bnRJbXBsIGFzIHBhcmVudCBjbGFzcywgc2luY2UgYQotICogcGFyYWdyYXBoIHNob3VsZCBiZSBh
YmxlIHRvIGZsb3cgYXJvdW5kIGFsaWduZWQgb2JqZWN0cy4gVGh1cwotICogYSA8cD4gZWxlbWVu
dCBoYXMgdG8gYmUgaW5saW5lLCBhbmQgaXMgcmVuZGVyZWQgYnkKLSAqIEhUTUxCbG9ja0ltcGw6
OmNhbGNQYXJhZ3JhcGgKLSAqLwogY2xhc3MgSFRNTFBhcmFncmFwaEVsZW1lbnRJbXBsIDogcHVi
bGljIEhUTUxFbGVtZW50SW1wbAogewogcHVibGljOgogICAgIEhUTUxQYXJhZ3JhcGhFbGVtZW50
SW1wbChEb2N1bWVudFB0ciAqZG9jKTsKIAorICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRU
YWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c09wdGlvbmFsOyB9CisgICAg
dmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAzOyB9CisgICAgdmlydHVh
bCBib29sIGNoZWNrRFREKGNvbnN0IE5vZGVJbXBsKiBuZXdDaGlsZCk7CisKICAgICB2aXJ0dWFs
IGJvb2wgbWFwVG9FbnRyeShJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBj
b25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmli
dXRlSW1wbCAqYXR0cik7Ci0gICAgCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwogCiAgICAg
RE9NU3RyaW5nIGFsaWduKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRBbGlnbihjb25zdCBET01TdHJp
bmcgJik7CkBAIC0xMjYsMTMgKzEyOCwxNiBAQCBwdWJsaWM6CiAKIC8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KIAotY2xhc3MgSFRNTFByZUVsZW1lbnRJbXBsIDogcHVibGljIEhUTUxHZW5lcmljRWxlbWVu
dEltcGwKK2NsYXNzIEhUTUxQcmVFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MRWxlbWVudEltcGwK
IHsKIHB1YmxpYzoKLSAgICBIVE1MUHJlRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgdXNo
b3J0IF90YWdpZCk7CisgICAgSFRNTFByZUVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUm
IHRhZ05hbWUsIERvY3VtZW50UHRyICpkb2MpOworCisgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVz
IGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzUmVxdWlyZWQ7IH0K
KyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDU7IH0KIAogICAg
IGxvbmcgd2lkdGgoKSBjb25zdDsKLSAgICB2b2lkIHNldFdpZHRoKCBsb25nIHcgKTsKKyAgICB2
b2lkIHNldFdpZHRoKGxvbmcgdyk7CiB9OwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xNDEs
OSArMTQ2LDEwIEBAIGNsYXNzIEhUTUxNYXJxdWVlRWxlbWVudEltcGwgOiBwdWJsaWMgSFQKIHsK
IHB1YmxpYzoKICAgICBIVE1MTWFycXVlZUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpOwot
Ci0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwogICAgIAorICAgIHZpcnR1YWwgSFRNTFRhZ1N0
YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVk
OyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAzOyB9CisK
ICAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRy
eSYgcmVzdWx0KSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUo
TWFwcGVkQXR0cmlidXRlSW1wbCAqdG9rZW4pOwogCkBAIC0xNTMsMTggKzE1OSw1IEBAIHByaXZh
dGU6CiAgICAgaW50IG1fbWluaW11bURlbGF5OwogfTsKIAotLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ci1jbGFzcyBIVE1MTGF5ZXJFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MRGl2RWxlbWVudEltcGwK
LXsKLXB1YmxpYzoKLSAgICBIVE1MTGF5ZXJFbGVtZW50SW1wbCggRG9jdW1lbnRQdHIgKmRvYyAp
OwotICAgIH5IVE1MTGF5ZXJFbGVtZW50SW1wbCgpOwotCi0gICAgdmlydHVhbCBJZCBpZCgpIGNv
bnN0OwotCi0gICAgYm9vbCBmaXhlZDsKLX07Ci0KIH07IC8vbmFtZXNwYWNlCiAjZW5kaWYKSW5k
ZXg6IGtodG1sL2h0bWwvaHRtbF9jYW52YXNpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfY2FudmFzaW1wbC5jcHAsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuMwpkaWZmIC11IC1wIC1yMS4zIGtodG1sL2h0bWwvaHRtbF9jYW52YXNp
bXBsLmNwcAotLS0ga2h0bWwvaHRtbC9odG1sX2NhbnZhc2ltcGwuY3BwCTExIE1heSAyMDA1IDA1
OjQ5OjM0IC0wMDAwCTEuMworKysga2h0bWwvaHRtbC9odG1sX2NhbnZhc2ltcGwuY3BwCTggSnVs
IDIwMDUgMDM6MDQ6MTAgLTAwMDAKQEAgLTU1LDcgKzU1LDcgQEAgdXNpbmcgbmFtZXNwYWNlIGto
dG1sOwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MQ2FudmFzRWxlbWVudEltcGw6OkhUTUxD
YW52YXNFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAgIDogSFRNTEltYWdlRWxlbWVu
dEltcGwoZG9jKQorICAgIDogSFRNTEltYWdlRWxlbWVudEltcGwoSFRNTE5hbWVzOjpjYW52YXMo
KSwgZG9jKQogewogfQogCkBAIC02MywxMSArNjMsNiBAQCBIVE1MQ2FudmFzRWxlbWVudEltcGw6
On5IVE1MQ2FudmFzRWxlbWVuCiB7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MQ2FudmFzRWxlbWVu
dEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfQ0FOVkFTOwotfQotCiBib29sIEhU
TUxDYW52YXNFbGVtZW50SW1wbDo6bWFwVG9FbnRyeShOb2RlSW1wbDo6SWQgYXR0ciwgTWFwcGVk
QXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3QKIHsKICAgICByZXR1cm4gSFRNTEltYWdlRWxl
bWVudEltcGw6Om1hcFRvRW50cnkoYXR0ciwgcmVzdWx0KTsKSW5kZXg6IGtodG1sL2h0bWwvaHRt
bF9jYW52YXNpbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0
bWwvaHRtbC9odG1sX2NhbnZhc2ltcGwuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yCmRpZmYg
LXUgLXAgLXIxLjIga2h0bWwvaHRtbC9odG1sX2NhbnZhc2ltcGwuaAotLS0ga2h0bWwvaHRtbC9o
dG1sX2NhbnZhc2ltcGwuaAkxMSBNYXkgMjAwNSAwNTo0OTozNCAtMDAwMAkxLjIKKysrIGtodG1s
L2h0bWwvaHRtbF9jYW52YXNpbXBsLmgJOCBKdWwgMjAwNSAwMzowNDoxMCAtMDAwMApAQCAtNDMs
MTEgKzQzLDggQEAgY2xhc3MgSFRNTENhbnZhc0VsZW1lbnRJbXBsCiB7CiBwdWJsaWM6CiAgICAg
SFRNTENhbnZhc0VsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpOwotCiAgICAgfkhUTUxDYW52
YXNFbGVtZW50SW1wbCgpOwogCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwotCiAgICAgdmly
dHVhbCBib29sIG1hcFRvRW50cnkoTm9kZUltcGw6OklkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVu
dHJ5JiByZXN1bHQpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0
ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICopOwogCkluZGV4OiBraHRtbC9odG1sL2h0bWxfZG9jdW1l
bnRpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9o
dG1sL2h0bWxfZG9jdW1lbnRpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS42MApkaWZm
IC11IC1wIC1yMS42MCBraHRtbC9odG1sL2h0bWxfZG9jdW1lbnRpbXBsLmNwcAotLS0ga2h0bWwv
aHRtbC9odG1sX2RvY3VtZW50aW1wbC5jcHAJMTEgTWF5IDIwMDUgMDA6NTg6MjggLTAwMDAJMS42
MAorKysga2h0bWwvaHRtbC9odG1sX2RvY3VtZW50aW1wbC5jcHAJOCBKdWwgMjAwNSAwMzowNDox
MSAtMDAwMApAQCAtNjAsNiArNjAsNyBAQAogI2luY2x1ZGUgImh0bWwvaHRtbF9taXNjaW1wbC5o
IgogI2luY2x1ZGUgImh0bWwvaHRtbF9pbWFnZWltcGwuaCIKICNpbmNsdWRlICJodG1sL2h0bWxf
Zm9ybWltcGwuaCIKKyNpbmNsdWRlICJodG1sZmFjdG9yeS5oIgogCiAjaW5jbHVkZSAia2h0bWx2
aWV3LmgiCiAjaW5jbHVkZSAia2h0bWxfcGFydC5oIgpAQCAtMjQ2LDEyICsyNDcsMTQgQEAgVG9r
ZW5pemVyICpIVE1MRG9jdW1lbnRJbXBsOjpjcmVhdGVUb2tlbgogYm9vbCBIVE1MRG9jdW1lbnRJ
bXBsOjpjaGlsZEFsbG93ZWQoIE5vZGVJbXBsICpuZXdDaGlsZCApCiB7CiAgICAgLy8gIyMjIHN1
cHBvcnQgY29tbWVudHMuIGV0YyBhcyBhIGNoaWxkCi0gICAgcmV0dXJuIChuZXdDaGlsZC0+aWQo
KSA9PSBJRF9IVE1MIHx8IG5ld0NoaWxkLT5pZCgpID09IElEX0NPTU1FTlQpOworICAgIHJldHVy
biAobmV3Q2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpodG1sKCkpIHx8IG5ld0NoaWxkLT5p
c0NvbW1lbnROb2RlKCkpOwogfQogCi1FbGVtZW50SW1wbCAqSFRNTERvY3VtZW50SW1wbDo6Y3Jl
YXRlRWxlbWVudCggY29uc3QgRE9NU3RyaW5nICZuYW1lLCBpbnQgJmV4Y2VwdGlvbmNvZGUgKQor
RWxlbWVudEltcGwgKkhUTUxEb2N1bWVudEltcGw6OmNyZWF0ZUVsZW1lbnQoY29uc3QgRE9NU3Ry
aW5nICZuYW1lLCBpbnQgJmV4Y2VwdGlvbmNvZGUpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUhUTUxF
bGVtZW50KG5hbWUsIGV4Y2VwdGlvbmNvZGUpOworICAgIC8vIERvIG5vdCBjaGVjayBuYW1lIHZh
bGlkaXR5LiAgT3RoZXIgYnJvd3NlcnMgZG9uJ3QsIGFuZCBpdCB0YWtlcyB0aW1lLgorICAgIERP
TVN0cmluZyBsb3dlck5hbWUobmFtZS5sb3dlcigpKTsKKyAgICByZXR1cm4gSFRNTEVsZW1lbnRG
YWN0b3J5OjpjcmVhdGVIVE1MRWxlbWVudChBdG9taWNTdHJpbmcobG93ZXJOYW1lKSwgdGhpcywg
MCwgZmFsc2UpOwogfQogCiB2b2lkIEhUTUxEb2N1bWVudEltcGw6OnNsb3RIaXN0b3J5Q2hhbmdl
ZCgpCkluZGV4OiBraHRtbC9odG1sL2h0bWxfZG9jdW1lbnRpbXBsLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sX2RvY3VtZW50aW1wbC5oLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjI5CmRpZmYgLXUgLXAgLXIxLjI5IGtodG1sL2h0bWwvaHRt
bF9kb2N1bWVudGltcGwuaAotLS0ga2h0bWwvaHRtbC9odG1sX2RvY3VtZW50aW1wbC5oCTExIE1h
eSAyMDA1IDAwOjU4OjI4IC0wMDAwCTEuMjkKKysrIGtodG1sL2h0bWwvaHRtbF9kb2N1bWVudGlt
cGwuaAk4IEp1bCAyMDA1IDAzOjA0OjExIC0wMDAwCkBAIC0zNCw3ICszNCw3IEBAIGNsYXNzIFFT
dHJpbmc7CiAKIG5hbWVzcGFjZSBET00gewogCi0gICAgY2xhc3MgSFRNTEVsZW1lbnRJbXBsOwor
Y2xhc3MgSFRNTEVsZW1lbnRJbXBsOwogCiBjbGFzcyBIVE1MRG9jdW1lbnRJbXBsIDogcHVibGlj
IERPTTo6RG9jdW1lbnRJbXBsLCBwdWJsaWMga2h0bWw6OkNhY2hlZE9iamVjdENsaWVudAogewpJ
bmRleDoga2h0bWwvaHRtbC9odG1sX2VsZW1lbnRpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfZWxlbWVudGltcGwuY3BwLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjg3CmRpZmYgLXUgLXAgLXIxLjg3IGtodG1sL2h0bWwvaHRtbF9l
bGVtZW50aW1wbC5jcHAKLS0tIGtodG1sL2h0bWwvaHRtbF9lbGVtZW50aW1wbC5jcHAJMTMgTWF5
IDIwMDUgMTY6NDg6NTEgLTAwMDAJMS44NworKysga2h0bWwvaHRtbC9odG1sX2VsZW1lbnRpbXBs
LmNwcAk4IEp1bCAyMDA1IDAzOjA0OjExIC0wMDAwCkBAIC0yOCwxMiArMjgsMTMgQEAKIC8vI2Rl
ZmluZSBFVkVOVF9ERUJVRwogLy8jZGVmaW5lIFVOU1VQUE9SVEVEX0FUVFIKIAotI2luY2x1ZGUg
Imh0bWwvZHRkLmgiCiAjaW5jbHVkZSAiaHRtbC9odG1sX2VsZW1lbnRpbXBsLmgiCiAjaW5jbHVk
ZSAiaHRtbC9odG1sX2RvY3VtZW50aW1wbC5oIgogI2luY2x1ZGUgImh0bWwvaHRtbHRva2VuaXpl
ci5oIgorI2luY2x1ZGUgImh0bWxmYWN0b3J5LmgiCiAKICNpbmNsdWRlICJtaXNjL2h0bWxoYXNo
ZXMuaCIKKyNpbmNsdWRlICJtaXNjL2hhc2hzZXQuaCIKICNpbmNsdWRlICJlZGl0aW5nL3Zpc2li
bGVfdGV4dC5oIgogCiAjaW5jbHVkZSAia2h0bWx2aWV3LmgiCkBAIC01OCw4ICs1OSw4IEBAIHVz
aW5nIG5hbWVzcGFjZSBraHRtbDsKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUhUTUxFbGVtZW50SW1wbDo6
SFRNTEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0gICAgOiBTdHlsZWRFbGVtZW50SW1w
bChkb2MpCitIVE1MRWxlbWVudEltcGw6OkhUTUxFbGVtZW50SW1wbChjb25zdCBRdWFsaWZpZWRO
YW1lJiB0YWdOYW1lLCBEb2N1bWVudFB0ciAqZG9jKQorICAgIDogU3R5bGVkRWxlbWVudEltcGwo
dGFnTmFtZSwgZG9jKQogewogfQogCkBAIC02Nyw1MSArNjgsNDAgQEAgSFRNTEVsZW1lbnRJbXBs
Ojp+SFRNTEVsZW1lbnRJbXBsKCkKIHsKIH0KIAotYm9vbCBIVE1MRWxlbWVudEltcGw6OmlzSW5s
aW5lKCkgY29uc3QKK0RPTVN0cmluZyBIVE1MRWxlbWVudEltcGw6Om5vZGVOYW1lKCkgY29uc3QK
IHsKLSAgICBpZiAocmVuZGVyZXIoKSkKLSAgICAgICAgcmV0dXJuIEVsZW1lbnRJbXBsOjppc0lu
bGluZSgpOwotICAgIAotICAgIHN3aXRjaChpZCgpKSB7Ci0gICAgICAgIGNhc2UgSURfQToKLSAg
ICAgICAgY2FzZSBJRF9GT05UOgotICAgICAgICBjYXNlIElEX1RUOgotICAgICAgICBjYXNlIElE
X1U6Ci0gICAgICAgIGNhc2UgSURfQjoKLSAgICAgICAgY2FzZSBJRF9JOgotICAgICAgICBjYXNl
IElEX1M6Ci0gICAgICAgIGNhc2UgSURfU1RSSUtFOgotICAgICAgICBjYXNlIElEX0JJRzoKLSAg
ICAgICAgY2FzZSBJRF9TTUFMTDoKLSAgICAKLSAgICAgICAgICAgIC8vICVwaHJhc2UKLSAgICAg
ICAgY2FzZSBJRF9FTToKLSAgICAgICAgY2FzZSBJRF9TVFJPTkc6Ci0gICAgICAgIGNhc2UgSURf
REZOOgotICAgICAgICBjYXNlIElEX0NPREU6Ci0gICAgICAgIGNhc2UgSURfU0FNUDoKLSAgICAg
ICAgY2FzZSBJRF9LQkQ6Ci0gICAgICAgIGNhc2UgSURfVkFSOgotICAgICAgICBjYXNlIElEX0NJ
VEU6Ci0gICAgICAgIGNhc2UgSURfQUJCUjoKLSAgICAgICAgY2FzZSBJRF9BQ1JPTllNOgorICAg
IC8vIEZJWE1FOiBXb3VsZCBiZSBuaWNlIHRvIGhhdmUgYW4gYXRvbWljc3RyaW5nIGxvb2t1cCBi
YXNlZCBvZmYgdXBwZXJjYXNlIGNoYXJzIHRoYXQgZG9lcyBub3QgaGF2ZSB0byBjb3B5CisgICAg
Ly8gdGhlIHN0cmluZyBvbiBhIGhpdCBpbiB0aGUgaGFzaC4KKyAgICBpZiAoZ2V0RG9jdW1lbnQo
KS0+aXNIVE1MRG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIG1fdGFnTmFtZS5sb2NhbE5hbWUo
KS5pbXBsZW1lbnRhdGlvbigpLT51cHBlcigpOworICAgIHJldHVybiBFbGVtZW50SW1wbDo6bm9k
ZU5hbWUoKTsKK30KICAgICAKLSAgICAgICAgICAgIC8vICVzcGVjaWFsCi0gICAgICAgIGNhc2Ug
SURfU1VCOgotICAgICAgICBjYXNlIElEX1NVUDoKLSAgICAgICAgY2FzZSBJRF9TUEFOOgotICAg
ICAgICBjYXNlIElEX05PQlI6Ci0gICAgICAgIGNhc2UgSURfV0JSOgotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJl
dHVybiBFbGVtZW50SW1wbDo6aXNJbmxpbmUoKTsKLSAgICB9CitIVE1MVGFnU3RhdHVzIEhUTUxF
bGVtZW50SW1wbDo6ZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdAoreworICAgIGlmIChoYXNMb2Nh
bE5hbWUoSFRNTE5hbWVzOjpkdCgpKSB8fCBoYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpkZCgpKSkK
KyAgICAgICAgcmV0dXJuIFRhZ1N0YXR1c09wdGlvbmFsOworCisgICAgLy8gU2FtZSB2YWx1ZXMg
YXMgPHNwYW4+LiAgVGhpcyB3YXkgY3VzdG9tIHRhZyBuYW1lIGVsZW1lbnRzIHdpbGwgYmVoYXZl
IGxpa2UgaW5saW5lIHNwYW5zLgorICAgIHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsKK30KKwor
aW50IEhUTUxFbGVtZW50SW1wbDo6dGFnUHJpb3JpdHkoKSBjb25zdAoreworICAgIGlmIChoYXNM
b2NhbE5hbWUoSFRNTE5hbWVzOjphZGRyZXNzKCkpIHx8IGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6
OmRkKCkpIHx8IGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmR0KCkpIHx8IGhhc0xvY2FsTmFtZShI
VE1MTmFtZXM6Om5vc2NyaXB0KCkpKQorICAgICAgICByZXR1cm4gMzsKKyAgICBpZiAoaGFzTG9j
YWxOYW1lKEhUTUxOYW1lczo6Y2VudGVyKCkpIHx8IGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om5v
YnIoKSkpCisgICAgICAgIHJldHVybiA1OworICAgIGlmIChoYXNMb2NhbE5hbWUoSFRNTE5hbWVz
Ojpub2VtYmVkKCkpIHx8IGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om5vZnJhbWVzKCkpKQorICAg
ICAgICByZXR1cm4gMTA7CisKKyAgICAvLyBTYW1lIHZhbHVlcyBhcyA8c3Bhbj4uICBUaGlzIHdh
eSBjdXN0b20gdGFnIG5hbWUgZWxlbWVudHMgd2lsbCBiZWhhdmUgbGlrZSBpbmxpbmUgc3BhbnMu
CisgICAgcmV0dXJuIDE7CiB9CiAKIE5vZGVJbXBsICpIVE1MRWxlbWVudEltcGw6OmNsb25lTm9k
ZShib29sIGRlZXApCiB7Ci0gICAgSFRNTEVsZW1lbnRJbXBsICpjbG9uZSA9IHN0YXRpY19jYXN0
PEhUTUxFbGVtZW50SW1wbCAqPihnZXREb2N1bWVudCgpLT5jcmVhdGVIVE1MRWxlbWVudChsb2Nh
bE5hbWVQYXJ0KGlkKCkpKSk7CisgICAgSFRNTEVsZW1lbnRJbXBsICpjbG9uZSA9IEhUTUxFbGVt
ZW50RmFjdG9yeTo6Y3JlYXRlSFRNTEVsZW1lbnQobG9jYWxOYW1lKCksIGdldERvY3VtZW50KCks
IDAsIGZhbHNlKTsKICAgICBpZiAoIWNsb25lKQogICAgICAgICByZXR1cm4gMDsKIApAQCAtMzI1
LDI2ICszMTUsMTcgQEAgRE9NU3RyaW5nIEhUTUxFbGVtZW50SW1wbDo6b3V0ZXJUZXh0KCkgYwog
RG9jdW1lbnRGcmFnbWVudEltcGwgKkhUTUxFbGVtZW50SW1wbDo6Y3JlYXRlQ29udGV4dHVhbEZy
YWdtZW50KGNvbnN0IERPTVN0cmluZyAmaHRtbCkKIHsKICAgICAvLyB0aGUgZm9sbG93aW5nIGlz
IGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgZGVmaW5pdGlvbiBhcyB1c2VkIGJ5IElFCi0gICAgaWYo
IGVuZFRhZ1JlcXVpcmVtZW50KGlkKCkpID09IEZPUkJJRERFTiApCi0gICAgICAgIHJldHVybiBO
VUxMOwotICAgIC8vIElFIGRpc2FsbG93cyBpbm5lckhUTUwgb24gaW5saW5lIGVsZW1lbnRzLiBJ
IGRvbid0IHNlZSB3aHkgd2Ugc2hvdWxkIGhhdmUgdGhpcyByZXN0cmljdGlvbiwgYXMgb3VyCi0g
ICAgLy8gZGh0bWwgZW5naW5lIGNhbiBjb3BlIHdpdGggaXQuIExhcnMKLSAgICAvL2lmICggaXNJ
bmxpbmUoKSApIHJldHVybiBmYWxzZTsKLSAgICBzd2l0Y2goIGlkKCkgKSB7Ci0gICAgICAgIGNh
c2UgSURfQ09MOgotICAgICAgICBjYXNlIElEX0NPTEdST1VQOgotICAgICAgICBjYXNlIElEX0ZS
QU1FU0VUOgotICAgICAgICBjYXNlIElEX0hFQUQ6Ci0gICAgICAgIGNhc2UgSURfU1RZTEU6Ci0g
ICAgICAgIGNhc2UgSURfVElUTEU6Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBpZiAoICFnZXREb2N1bWVu
dCgpLT5pc0hUTUxEb2N1bWVudCgpICkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKGVu
ZFRhZ1JlcXVpcmVtZW50KCkgPT0gVGFnU3RhdHVzRm9yYmlkZGVuKQorICAgICAgICByZXR1cm4g
MDsKKworICAgIGlmIChoYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpjb2woKSkgfHwgaGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6Y29sZ3JvdXAoKSkgfHwgaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6ZnJh
bWVzZXQoKSkgfHwKKyAgICAgICAgaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6aGVhZCgpKSB8fCBo
YXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpzdHlsZSgpKSB8fCBoYXNMb2NhbE5hbWUoSFRNTE5hbWVz
Ojp0aXRsZSgpKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoIWdldERvY3VtZW50KCkt
PmlzSFRNTERvY3VtZW50KCkpCisgICAgICAgIHJldHVybiAwOwogCi0gICAgRG9jdW1lbnRGcmFn
bWVudEltcGwgKmZyYWdtZW50ID0gbmV3IERvY3VtZW50RnJhZ21lbnRJbXBsKCBkb2NQdHIoKSAp
OworICAgIERvY3VtZW50RnJhZ21lbnRJbXBsICpmcmFnbWVudCA9IG5ldyBEb2N1bWVudEZyYWdt
ZW50SW1wbChkb2NQdHIoKSk7CiAgICAgZnJhZ21lbnQtPnJlZigpOwogICAgIHsKICAgICAgICAg
SFRNTFRva2VuaXplciB0b2soZG9jUHRyKCksIGZyYWdtZW50KTsKQEAgLTM1OCwxNCArMzM5LDE0
IEBAIERvY3VtZW50RnJhZ21lbnRJbXBsICpIVE1MRWxlbWVudEltcGw6OmMKICAgICBpbnQgaWdu
b3JlZEV4Y2VwdGlvbkNvZGU7CiAKICAgICAvLyB3ZSBuZWVkIHRvIHBvcCA8aHRtbD4gYW5kIDxi
b2R5PiBlbGVtZW50cyBhbmQgcmVtb3ZlIDxoZWFkPiB0bwotICAgIC8vIGFjY29tYWRhdGUgZm9s
a3MgcGFzc2luZyBjb21wbGV0ZSBIVE1MIGRvY3VtZW50cyB0byBtYWtlIHRoZQorICAgIC8vIGFj
Y29tbW9kYXRlIGZvbGtzIHBhc3NpbmcgY29tcGxldGUgSFRNTCBkb2N1bWVudHMgdG8gbWFrZSB0
aGUKICAgICAvLyBjaGlsZCBvZiBhbiBlbGVtZW50LgogCiAgICAgTm9kZUltcGwgKm5leHROb2Rl
OwogICAgIGZvciAoTm9kZUltcGwgKm5vZGUgPSBmcmFnbWVudC0+Zmlyc3RDaGlsZCgpOyBub2Rl
ICE9IE5VTEw7IG5vZGUgPSBuZXh0Tm9kZSkgewogICAgICAgICBuZXh0Tm9kZSA9IG5vZGUtPm5l
eHRTaWJsaW5nKCk7CiAJbm9kZS0+cmVmKCk7Ci0gICAgICAgIGlmIChub2RlLT5pZCgpID09IElE
X0hUTUwgfHwgbm9kZS0+aWQoKSA9PSBJRF9CT0RZKSB7CisgICAgICAgIGlmIChub2RlLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6aHRtbCgpKSB8fCBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
Ym9keSgpKSkgewogCSAgICBOb2RlSW1wbCAqZmlyc3RDaGlsZCA9IG5vZGUtPmZpcnN0Q2hpbGQo
KTsKICAgICAgICAgICAgIGlmIChmaXJzdENoaWxkICE9IE5VTEwpIHsKICAgICAgICAgICAgICAg
ICBuZXh0Tm9kZSA9IGZpcnN0Q2hpbGQ7CkBAIC0zNzksOSArMzYwLDkgQEAgRG9jdW1lbnRGcmFn
bWVudEltcGwgKkhUTUxFbGVtZW50SW1wbDo6YwogICAgICAgICAgICAgICAgIGNoaWxkLT5kZXJl
ZigpOwogCSAgICB9CiAgICAgICAgICAgICBmcmFnbWVudC0+cmVtb3ZlQ2hpbGQobm9kZSwgaWdu
b3JlZEV4Y2VwdGlvbkNvZGUpOwotCX0gZWxzZSBpZiAobm9kZS0+aWQoKSA9PSBJRF9IRUFEKSB7
CisJfSBlbHNlIGlmIChub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aGVhZCgpKSkKIAkgICAg
ZnJhZ21lbnQtPnJlbW92ZUNoaWxkKG5vZGUsIGlnbm9yZWRFeGNlcHRpb25Db2RlKTsKLQl9CisK
ICAgICAgICAgLy8gSW1wb3J0YW50IHRvIGRvIHRoaXMgZGVyZWYgYWZ0ZXIgcmVtb3ZlQ2hpbGQs
IGJlY2F1c2UgaWYgdGhlIG9ubHkgdGhpbmcKICAgICAgICAgLy8ga2VlcGluZyBhIG5vZGUgYXJv
dW5kIGlzIGEgcGFyZW50IHRoYXQgaXMgbm9uLTAsIHJlbW92ZUNoaWxkIHdpbGwgbm90CiAgICAg
ICAgIC8vIGRlbGV0ZSB0aGUgbm9kZS4gVGhpcyB3b3JrcyBmaW5lIGluIEphdmFTY3JpcHQgYmVj
YXVzZSB0aGVyZSdzIGFsd2F5cwpAQCAtNDAwLDcgKzM4MSw3IEBAIERvY3VtZW50RnJhZ21lbnRJ
bXBsICpIVE1MRWxlbWVudEltcGw6OmMKIAogdm9pZCBIVE1MRWxlbWVudEltcGw6OnNldElubmVy
SFRNTChjb25zdCBET01TdHJpbmcgJmh0bWwsIGludCAmZXhjZXB0aW9uKQogewotICAgIERvY3Vt
ZW50RnJhZ21lbnRJbXBsICpmcmFnbWVudCA9IGNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCggaHRt
bCApOworICAgIERvY3VtZW50RnJhZ21lbnRJbXBsICpmcmFnbWVudCA9IGNyZWF0ZUNvbnRleHR1
YWxGcmFnbWVudChodG1sKTsKICAgICBpZiAoZnJhZ21lbnQgPT0gTlVMTCkgewogCWV4Y2VwdGlv
biA9IERPTUV4Y2VwdGlvbjo6Tk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOwogICAgICAgICBy
ZXR1cm47CkBAIC00MTgsNyArMzk5LDcgQEAgdm9pZCBIVE1MRWxlbWVudEltcGw6OnNldE91dGVy
SFRNTChjb25zdAogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIEhUTUxFbGVtZW50SW1wbCAq
cGFyZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KHApOwotICAgIERvY3VtZW50
RnJhZ21lbnRJbXBsICpmcmFnbWVudCA9IHBhcmVudC0+Y3JlYXRlQ29udGV4dHVhbEZyYWdtZW50
KCBodG1sICk7CisgICAgRG9jdW1lbnRGcmFnbWVudEltcGwgKmZyYWdtZW50ID0gcGFyZW50LT5j
cmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoaHRtbCk7CiAKICAgICBpZiAoIWZyYWdtZW50KSB7CiAJ
ZXhjZXB0aW9uID0gRE9NRXhjZXB0aW9uOjpOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI7CkBA
IC00MzQsMjkgKzQxNSwxNyBAQCB2b2lkIEhUTUxFbGVtZW50SW1wbDo6c2V0T3V0ZXJIVE1MKGNv
bnN0CiB2b2lkIEhUTUxFbGVtZW50SW1wbDo6c2V0SW5uZXJUZXh0KGNvbnN0IERPTVN0cmluZyAm
dGV4dCwgaW50ICZleGNlcHRpb24pCiB7CiAgICAgLy8gZm9sbG93aW5nIHRoZSBJRSBzcGVjcy4K
LSAgICBpZiAoZW5kVGFnUmVxdWlyZW1lbnQoaWQoKSkgPT0gRk9SQklEREVOKSB7CisgICAgaWYg
KGVuZFRhZ1JlcXVpcmVtZW50KCkgPT0gVGFnU3RhdHVzRm9yYmlkZGVuKSB7CiAJZXhjZXB0aW9u
ID0gRE9NRXhjZXB0aW9uOjpOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICAvLyBJRSBkaXNhbGxvd3MgaW5uZXJUZXh0IG9uIGlubGluZSBl
bGVtZW50cy4gSSBkb24ndCBzZWUgd2h5IHdlIHNob3VsZCBoYXZlIHRoaXMgcmVzdHJpY3Rpb24s
IGFzIG91cgotICAgIC8vIGRodG1sIGVuZ2luZSBjYW4gY29wZSB3aXRoIGl0LiBMYXJzCi0gICAg
Ly9pZiAoIGlzSW5saW5lKCkgKSByZXR1cm4gZmFsc2U7Ci0gICAgc3dpdGNoKCBpZCgpICkgewot
ICAgICAgICBjYXNlIElEX0NPTDoKLSAgICAgICAgY2FzZSBJRF9DT0xHUk9VUDoKLSAgICAgICAg
Y2FzZSBJRF9GUkFNRVNFVDoKLSAgICAgICAgY2FzZSBJRF9IRUFEOgotICAgICAgICBjYXNlIElE
X0hUTUw6Ci0gICAgICAgIGNhc2UgSURfVEFCTEU6Ci0gICAgICAgIGNhc2UgSURfVEJPRFk6Ci0g
ICAgICAgIGNhc2UgSURfVEZPT1Q6Ci0gICAgICAgIGNhc2UgSURfVEhFQUQ6Ci0gICAgICAgIGNh
c2UgSURfVFI6Ci0gICAgICAgICAgICBleGNlcHRpb24gPSBET01FeGNlcHRpb246Ok5PX01PRElG
SUNBVElPTl9BTExPV0VEX0VSUjsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgIGJyZWFrOworICAgIGlmIChoYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpj
b2woKSkgfHwgaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6Y29sZ3JvdXAoKSkgfHwgaGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6ZnJhbWVzZXQoKSkgfHwKKyAgICAgICAgaGFzTG9jYWxOYW1lKEhUTUxO
YW1lczo6aGVhZCgpKSB8fCBoYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpodG1sKCkpIHx8IGhhc0xv
Y2FsTmFtZShIVE1MTmFtZXM6OnRhYmxlKCkpIHx8IAorICAgICAgICBoYXNMb2NhbE5hbWUoSFRN
TE5hbWVzOjp0Ym9keSgpKSB8fCBoYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0Zm9vdCgpKSB8fCBo
YXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0aGVhZCgpKSB8fAorICAgICAgICBoYXNMb2NhbE5hbWUo
SFRNTE5hbWVzOjp0cigpKSkgeworICAgICAgICBleGNlcHRpb24gPSBET01FeGNlcHRpb246Ok5P
X01PRElGSUNBVElPTl9BTExPV0VEX0VSUjsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAg
IHJlbW92ZUNoaWxkcmVuKCk7CkBAIC00NjYsMjUgKzQzNSwxNyBAQCB2b2lkIEhUTUxFbGVtZW50
SW1wbDo6c2V0SW5uZXJUZXh0KGNvbnN0CiB2b2lkIEhUTUxFbGVtZW50SW1wbDo6c2V0T3V0ZXJU
ZXh0KGNvbnN0IERPTVN0cmluZyAmdGV4dCwgaW50ICZleGNlcHRpb24pCiB7CiAgICAgLy8gZm9s
bG93aW5nIHRoZSBJRSBzcGVjcy4KLSAgICBpZiggZW5kVGFnUmVxdWlyZW1lbnQoaWQoKSkgPT0g
Rk9SQklEREVOICkgeworICAgIGlmIChlbmRUYWdSZXF1aXJlbWVudCgpID09IFRhZ1N0YXR1c0Zv
cmJpZGRlbikgewogCWV4Y2VwdGlvbiA9IERPTUV4Y2VwdGlvbjo6Tk9fTU9ESUZJQ0FUSU9OX0FM
TE9XRURfRVJSOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIHN3aXRjaCggaWQoKSApIHsK
LSAgICAgICAgY2FzZSBJRF9DT0w6Ci0gICAgICAgIGNhc2UgSURfQ09MR1JPVVA6Ci0gICAgICAg
IGNhc2UgSURfRlJBTUVTRVQ6Ci0gICAgICAgIGNhc2UgSURfSEVBRDoKLSAgICAgICAgY2FzZSBJ
RF9IVE1MOgotICAgICAgICBjYXNlIElEX1RBQkxFOgotICAgICAgICBjYXNlIElEX1RCT0RZOgot
ICAgICAgICBjYXNlIElEX1RGT09UOgotICAgICAgICBjYXNlIElEX1RIRUFEOgotICAgICAgICBj
YXNlIElEX1RSOgotICAgICAgICAgICAgZXhjZXB0aW9uID0gRE9NRXhjZXB0aW9uOjpOT19NT0RJ
RklDQVRJT05fQUxMT1dFRF9FUlI7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICBicmVhazsKKworICAgIGlmIChoYXNMb2NhbE5hbWUoSFRNTE5hbWVz
Ojpjb2woKSkgfHwgaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6Y29sZ3JvdXAoKSkgfHwgaGFzTG9j
YWxOYW1lKEhUTUxOYW1lczo6ZnJhbWVzZXQoKSkgfHwKKyAgICAgICAgaGFzTG9jYWxOYW1lKEhU
TUxOYW1lczo6aGVhZCgpKSB8fCBoYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpodG1sKCkpIHx8IGhh
c0xvY2FsTmFtZShIVE1MTmFtZXM6OnRhYmxlKCkpIHx8IAorICAgICAgICBoYXNMb2NhbE5hbWUo
SFRNTE5hbWVzOjp0Ym9keSgpKSB8fCBoYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0Zm9vdCgpKSB8
fCBoYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0aGVhZCgpKSB8fAorICAgICAgICBoYXNMb2NhbE5h
bWUoSFRNTE5hbWVzOjp0cigpKSkgeworICAgICAgICBleGNlcHRpb24gPSBET01FeGNlcHRpb246
Ok5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUjsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAog
ICAgIE5vZGVJbXBsICpwYXJlbnQgPSBwYXJlbnROb2RlKCk7CkBAIC01MjUsMTcgKzQ4Niw2IEBA
IHZvaWQgSFRNTEVsZW1lbnRJbXBsOjpzZXRPdXRlclRleHQoY29uc3QKICAgICB9CiB9CiAKLQot
RE9NU3RyaW5nIEhUTUxFbGVtZW50SW1wbDo6bmFtZXNwYWNlVVJJKCkgY29uc3QKLXsKLSAgICAv
LyBGb3IgSFRNTCBkb2N1bWVudHMsIHdlIHRyZWF0IEhUTUwgZWxlbWVudHMgYXMgaGF2aW5nIG5v
IG5hbWVzcGFjZS4gQnV0IGZvciBYTUwgZG9jdW1lbnRzCi0gICAgLy8gdGhlIGVsZW1lbnRzIGhh
dmUgdGhlIG5hbWVzcGFjZSBkZWZpbmVkIGluIHRoZSBYSFRNTCBzcGVjCi0gICAgaWYgKGdldERv
Y3VtZW50KCktPmlzSFRNTERvY3VtZW50KCkpCi0gICAgICAgIHJldHVybiBET01TdHJpbmcoKTsK
LSAgICBlbHNlCi0gICAgICAgIHJldHVybiBYSFRNTF9OQU1FU1BBQ0U7Ci19Ci0KIHZvaWQgSFRN
TEVsZW1lbnRJbXBsOjphZGRIVE1MQWxpZ25tZW50KE1hcHBlZEF0dHJpYnV0ZUltcGwqIGF0dHIp
CiB7CiAgICAgLy9xRGVidWcoImFsaWdubWVudCBpcyAlcyIsIGFsaWdubWVudC5zdHJpbmcoKS5s
YXRpbjEoKSApOwpAQCAtNjgyLDkgKzYzMiw5IEBAIERPTVN0cmluZyBIVE1MRWxlbWVudEltcGw6
OnRvU3RyaW5nKCkgY28KIAlET01TdHJpbmcgcmVzdWx0ID0gb3BlblRhZ1N0YXJ0VG9TdHJpbmco
KTsKIAlyZXN1bHQgKz0gIj4iOwogCi0JaWYgKGVuZFRhZ1JlcXVpcmVtZW50KGlkKCkpID09IFJF
UVVJUkVEKSB7CisJaWYgKGVuZFRhZ1JlcXVpcmVtZW50KCkgPT0gVGFnU3RhdHVzUmVxdWlyZWQp
IHsKIAkgICAgcmVzdWx0ICs9ICI8LyI7Ci0JICAgIHJlc3VsdCArPSB0YWdOYW1lKCk7CisJICAg
IHJlc3VsdCArPSBub2RlTmFtZSgpOwogCSAgICByZXN1bHQgKz0gIj4iOwogCX0KIApAQCAtNjk0
LDcgKzY0NCw3IEBAIERPTVN0cmluZyBIVE1MRWxlbWVudEltcGw6OnRvU3RyaW5nKCkgY28KICAg
ICByZXR1cm4gRWxlbWVudEltcGw6OnRvU3RyaW5nKCk7CiB9CiAKLURPTVN0cmluZyBIVE1MRWxl
bWVudEltcGw6OmlkRE9NKCkgY29uc3QKK0RPTVN0cmluZyBIVE1MRWxlbWVudEltcGw6OmlkKCkg
Y29uc3QKIHsKICAgICByZXR1cm4gZ2V0QXR0cmlidXRlKEFUVFJfSUQpOwogfQpAQCAtNzQ5LDE1
ICs2OTksMjg3IEBAIFNoYXJlZFB0cjxIVE1MQ29sbGVjdGlvbkltcGw+IEhUTUxFbGVtZW4KICAg
ICByZXR1cm4gU2hhcmVkUHRyPEhUTUxDb2xsZWN0aW9uSW1wbD4obmV3IEhUTUxDb2xsZWN0aW9u
SW1wbCh0aGlzLCBIVE1MQ29sbGVjdGlvbkltcGw6Ok5PREVfQ0hJTERSRU4pKTsKIH0KIAotLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorLy8gRE9NIFNlY3Rpb24gMS4xLjEKK2Jvb2wgSFRNTEVsZW1lbnRJ
bXBsOjpjaGlsZEFsbG93ZWQoTm9kZUltcGwgKm5ld0NoaWxkKQoreworICAgIGlmICghRWxlbWVu
dEltcGw6OmNoaWxkQWxsb3dlZChuZXdDaGlsZCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAot
SFRNTEdlbmVyaWNFbGVtZW50SW1wbDo6SFRNTEdlbmVyaWNFbGVtZW50SW1wbChEb2N1bWVudFB0
ciAqZG9jLCB1c2hvcnQgaSkKLSAgICA6IEhUTUxFbGVtZW50SW1wbChkb2MpCisgICAgLy8gRm9y
IFhNTCBkb2N1bWVudHMsIHdlIGFyZSBub24tdmFsaWRhdGluZyBhbmQgZG8gbm90IGNoZWNrIGFn
YWluc3QgYSBEVEQsIGV2ZW4gZm9yIEhUTUwgZWxlbWVudHMuCisJaWYgKCFnZXREb2N1bWVudCgp
LT5pc0hUTUxEb2N1bWVudCgpKQorCQlyZXR1cm4gdHJ1ZTsKKwkKKwkvLyBGdXR1cmUtcHJvb2Yg
Zm9yIFhNTCBjb250ZW50IGluc2lkZSBIVE1MIGRvY3VtZW50cyAod2UgbWF5IGFsbG93IHRoaXMg
c29tZSBkYXkpLgorCWlmIChuZXdDaGlsZC0+aXNFbGVtZW50Tm9kZSgpICYmICFuZXdDaGlsZC0+
aXNIVE1MRWxlbWVudCgpKQorCQlyZXR1cm4gdHJ1ZTsKKworCS8vIEVsZW1lbnRzIHdpdGggZm9y
YmlkZGVuIHRhZyBzdGF0dXMgY2FuIG5ldmVyIGhhdmUgY2hpbGRyZW4KKwlpZiAoZW5kVGFnUmVx
dWlyZW1lbnQoKSA9PSBUYWdTdGF0dXNGb3JiaWRkZW4pCisJCXJldHVybiBmYWxzZTsKKworCS8v
IENvbW1lbnQgbm9kZXMgYXJlIGFsd2F5cyBhbGxvd2VkLgorCWlmIChuZXdDaGlsZC0+aXNDb21t
ZW50Tm9kZSgpKQorCQlyZXR1cm4gdHJ1ZTsKKworICAgIC8vIE5vdyBjYWxsIGNoZWNrRFRELgor
CXJldHVybiBjaGVja0RURChuZXdDaGlsZCk7Cit9CisKKy8vIERURCBTdHVmZgorLy8gVGhpcyB1
bmZvcnR1bmF0ZSBmdW5jdGlvbiBpcyBvbmx5IG5lZWRlZCB3aGVuIGNoZWNraW5nIGFnYWluc3Qg
dGhlIERURC4gIE90aGVyIGxhbmd1YWdlcyAobGlrZSBTVkcpIHdvbid0IG5lZWQgdGhpcy4KK2Jv
b2wgSFRNTEVsZW1lbnRJbXBsOjppc1JlY29nbml6ZWRUYWdOYW1lKGNvbnN0IFF1YWxpZmllZE5h
bWUmIHRhZ05hbWUpCit7CisgICAgc3RhdGljIEhhc2hTZXQ8RE9NU3RyaW5nSW1wbCosIFBvaW50
ZXJIYXNoPERPTVN0cmluZ0ltcGwqPiA+IHRhZ0xpc3Q7CisgICAgaWYgKHRhZ0xpc3QuaXNFbXB0
eSgpKSB7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6YSgpLmxvY2FsTmFtZVB0
cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjphYmJyKCkubG9jYWxOYW1l
UHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmFjcm9ueW0oKS5sb2Nh
bE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6YWRkcmVzcygp
LmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjphcHBs
ZXQoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6
YXJlYSgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVz
OjpiKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6
OmJhc2UoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1l
czo6YmFzZWZvbnQoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhU
TUxOYW1lczo6YmRvKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChI
VE1MTmFtZXM6OmJpZygpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQo
SFRNTE5hbWVzOjpibG9ja3F1b3RlKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0
Lmluc2VydChIVE1MTmFtZXM6OmJvZHkoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xp
c3QuaW5zZXJ0KEhUTUxOYW1lczo6YnIoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xp
c3QuaW5zZXJ0KEhUTUxOYW1lczo6YnV0dG9uKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0
YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmNhbnZhcygpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAg
ICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpjYXB0aW9uKCkubG9jYWxOYW1lUHRyKCkpOwor
ICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmNlbnRlcigpLmxvY2FsTmFtZVB0cigp
KTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpjaXRlKCkubG9jYWxOYW1lUHRy
KCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmNvZGUoKS5sb2NhbE5hbWVQ
dHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6Y29sKCkubG9jYWxOYW1l
UHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmNvbGdyb3VwKCkubG9j
YWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmRkKCkubG9j
YWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmRlbCgpLmxv
Y2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpkZm4oKS5s
b2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6ZGlyKCku
bG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmRpdigp
LmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpkbCgp
LmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpkdCgp
LmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjplbSgp
LmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjplbWJl
ZCgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpm
aWVsZHNldCgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5h
bWVzOjpmb250KCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1M
TmFtZXM6OmZvcm0oKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhU
TUxOYW1lczo6ZnJhbWUoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0
KEhUTUxOYW1lczo6ZnJhbWVzZXQoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3Qu
aW5zZXJ0KEhUTUxOYW1lczo6aGVhZCgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlz
dC5pbnNlcnQoSFRNTE5hbWVzOjpoMSgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlz
dC5pbnNlcnQoSFRNTE5hbWVzOjpoMigpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlz
dC5pbnNlcnQoSFRNTE5hbWVzOjpoMygpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlz
dC5pbnNlcnQoSFRNTE5hbWVzOjpoNCgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlz
dC5pbnNlcnQoSFRNTE5hbWVzOjpoNSgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlz
dC5pbnNlcnQoSFRNTE5hbWVzOjpoNigpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlz
dC5pbnNlcnQoSFRNTE5hbWVzOjpocigpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlz
dC5pbnNlcnQoSFRNTE5hbWVzOjpodG1sKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdM
aXN0Lmluc2VydChIVE1MTmFtZXM6OmkoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xp
c3QuaW5zZXJ0KEhUTUxOYW1lczo6aWZyYW1lKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0
YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmltZygpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAg
dGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjppbnB1dCgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAg
ICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjppbnMoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAg
ICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6aXNpbmRleCgpLmxvY2FsTmFtZVB0cigpKTsK
KyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjprYmQoKS5sb2NhbE5hbWVQdHIoKSk7
CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6a2V5Z2VuKCkubG9jYWxOYW1lUHRy
KCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmxhYmVsKCkubG9jYWxOYW1l
UHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmxheWVyKCkubG9jYWxO
YW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmxlZ2VuZCgpLmxv
Y2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpsaSgpLmxv
Y2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpsaW5rKCku
bG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6Om1hcCgp
LmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjptYXJx
dWVlKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6
Om1lbnUoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1l
czo6bWV0YSgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5h
bWVzOjpub2JyKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1M
TmFtZXM6Om5vZW1iZWQoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0
KEhUTUxOYW1lczo6bm9mcmFtZXMoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3Qu
aW5zZXJ0KEhUTUxOYW1lczo6bm9sYXllcigpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFn
TGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpub3NjcmlwdCgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAg
ICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpvYmplY3QoKS5sb2NhbE5hbWVQdHIoKSk7Cisg
ICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6b2woKS5sb2NhbE5hbWVQdHIoKSk7Cisg
ICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6b3B0Z3JvdXAoKS5sb2NhbE5hbWVQdHIo
KSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6b3B0aW9uKCkubG9jYWxOYW1l
UHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnAoKS5sb2NhbE5hbWVQ
dHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6cGFyYW0oKS5sb2NhbE5h
bWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6cGxhaW50ZXh0KCku
bG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnByZSgp
LmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpxKCku
bG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnMoKS5s
b2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6c2FtcCgp
LmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpzY3Jp
cHQoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6
c2VsZWN0KCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFt
ZXM6OnNtYWxsKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1M
TmFtZXM6OnNwYW4oKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhU
TUxOYW1lczo6c3RyaWtlKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2Vy
dChIVE1MTmFtZXM6OnN0cm9uZygpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5p
bnNlcnQoSFRNTE5hbWVzOjpzdHlsZSgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlz
dC5pbnNlcnQoSFRNTE5hbWVzOjpzdWIoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xp
c3QuaW5zZXJ0KEhUTUxOYW1lczo6c3VwKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdM
aXN0Lmluc2VydChIVE1MTmFtZXM6OnRhYmxlKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0
YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnRib2R5KCkubG9jYWxOYW1lUHRyKCkpOworICAgICAg
ICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnRkKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAg
ICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnRleHRhcmVhKCkubG9jYWxOYW1lUHRyKCkpOwor
ICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnRmb290KCkubG9jYWxOYW1lUHRyKCkp
OworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnRoKCkubG9jYWxOYW1lUHRyKCkp
OworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnRoZWFkKCkubG9jYWxOYW1lUHRy
KCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnRpdGxlKCkubG9jYWxOYW1l
UHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnRyKCkubG9jYWxOYW1l
UHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnR0KCkubG9jYWxOYW1l
UHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnUoKS5sb2NhbE5hbWVQ
dHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6dWwoKS5sb2NhbE5hbWVQ
dHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6dmFyKCkubG9jYWxOYW1l
UHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OndicigpLmxvY2FsTmFt
ZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjp4bXAoKS5sb2NhbE5h
bWVQdHIoKSk7CisgICAgfQorCisgICAgcmV0dXJuIHRhZ0xpc3QuY29udGFpbnModGFnTmFtZS5s
b2NhbE5hbWVQdHIoKSk7Cit9CisKKy8vIFRoZSB0ZXJtcyBpbmxpbmUgYW5kIGJsb2NrIGFyZSB1
c2VkIGhlcmUgbG9vc2VseS4gIERvbid0IG1ha2UgdGhlIG1pc3Rha2Ugb2YgYXNzdW1pbmcgYWxs
IGlubGluZXMgb3IgYWxsIGJsb2NrcworLy8gbmVlZCB0byBiZSBpbiB0aGVzZSB0d28gbGlzdHMu
CitIYXNoU2V0PERPTVN0cmluZ0ltcGwqLCBQb2ludGVySGFzaDxET01TdHJpbmdJbXBsKj4gPiog
aW5saW5lVGFnTGlzdCgpIHsKKyAgICBzdGF0aWMgSGFzaFNldDxET01TdHJpbmdJbXBsKiwgUG9p
bnRlckhhc2g8RE9NU3RyaW5nSW1wbCo+ID4gdGFnTGlzdDsKKyAgICBpZiAodGFnTGlzdC5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjp0dCgpLmxvY2FsTmFt
ZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjppKCkubG9jYWxOYW1l
UHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmIoKS5sb2NhbE5hbWVQ
dHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6dSgpLmxvY2FsTmFtZVB0
cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpzKCkubG9jYWxOYW1lUHRy
KCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnN0cmlrZSgpLmxvY2FsTmFt
ZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpiaWcoKS5sb2NhbE5h
bWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6c21hbGwoKS5sb2Nh
bE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6ZW0oKS5sb2Nh
bE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6c3Ryb25nKCku
bG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmRmbigp
LmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpjb2Rl
KCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnNh
bXAoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6
a2JkKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6
OnZhcigpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVz
OjpjaXRlKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFt
ZXM6OmFiYnIoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxO
YW1lczo6YWNyb255bSgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQo
SFRNTE5hbWVzOjphKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChI
VE1MTmFtZXM6OmNhbnZhcygpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNl
cnQoSFRNTE5hbWVzOjppbWcoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5z
ZXJ0KEhUTUxOYW1lczo6YXBwbGV0KCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0
Lmluc2VydChIVE1MTmFtZXM6Om9iamVjdCgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFn
TGlzdC5pbnNlcnQoSFRNTE5hbWVzOjplbWJlZCgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAg
dGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpmb250KCkubG9jYWxOYW1lUHRyKCkpOworICAgICAg
ICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmJhc2Vmb250KCkubG9jYWxOYW1lUHRyKCkpOwor
ICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmJyKCkubG9jYWxOYW1lUHRyKCkpOwor
ICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnNjcmlwdCgpLmxvY2FsTmFtZVB0cigp
KTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjptYXAoKS5sb2NhbE5hbWVQdHIo
KSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6cSgpLmxvY2FsTmFtZVB0cigp
KTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpzdWIoKS5sb2NhbE5hbWVQdHIo
KSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6c3VwKCkubG9jYWxOYW1lUHRy
KCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnNwYW4oKS5sb2NhbE5hbWVQ
dHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6YmRvKCkubG9jYWxOYW1l
UHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmlmcmFtZSgpLmxvY2Fs
TmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjppbnB1dCgpLmxv
Y2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjprZXlnZW4o
KS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6c2Vs
ZWN0KCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6
OnRleHRhcmVhKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1M
TmFtZXM6OmxhYmVsKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChI
VE1MTmFtZXM6OmJ1dHRvbigpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNl
cnQoSFRNTE5hbWVzOjppbnMoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5z
ZXJ0KEhUTUxOYW1lczo6ZGVsKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmlu
c2VydChIVE1MTmFtZXM6Om5vYnIoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3Qu
aW5zZXJ0KEhUTUxOYW1lczo6d2JyKCkubG9jYWxOYW1lUHRyKCkpOworICAgIH0KKyAgICByZXR1
cm4gJnRhZ0xpc3Q7Cit9CisKK0hhc2hTZXQ8RE9NU3RyaW5nSW1wbCosIFBvaW50ZXJIYXNoPERP
TVN0cmluZ0ltcGwqPiA+KiBibG9ja1RhZ0xpc3QoKSB7CisgICAgc3RhdGljIEhhc2hTZXQ8RE9N
U3RyaW5nSW1wbCosIFBvaW50ZXJIYXNoPERPTVN0cmluZ0ltcGwqPiA+IHRhZ0xpc3Q7CisgICAg
aWYgKHRhZ0xpc3QuaXNFbXB0eSgpKSB7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1l
czo6cCgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVz
OjpoMSgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVz
OjpoMigpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVz
OjpoMygpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVz
OjpoNCgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVz
OjpoNSgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVz
OjpoNigpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVz
Ojp1bCgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVz
OjpvbCgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVz
OjpkaXIoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1l
czo6bWVudSgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5h
bWVzOjpwcmUoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxO
YW1lczo6cGxhaW50ZXh0KCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2Vy
dChIVE1MTmFtZXM6OnhtcCgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNl
cnQoSFRNTE5hbWVzOjpkbCgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNl
cnQoSFRNTE5hbWVzOjpkaXYoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5z
ZXJ0KEhUTUxOYW1lczo6bGF5ZXIoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3Qu
aW5zZXJ0KEhUTUxOYW1lczo6Y2VudGVyKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdM
aXN0Lmluc2VydChIVE1MTmFtZXM6Om5vc2NyaXB0KCkubG9jYWxOYW1lUHRyKCkpOworICAgICAg
ICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6Om5vZnJhbWVzKCkubG9jYWxOYW1lUHRyKCkpOwor
ICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmJsb2NrcXVvdGUoKS5sb2NhbE5hbWVQ
dHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6Zm9ybSgpLmxvY2FsTmFt
ZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjppc2luZGV4KCkubG9j
YWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmhyKCkubG9j
YWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnRhYmxlKCku
bG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmZpZWxk
c2V0KCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6
OmFkZHJlc3MoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxO
YW1lczo6bGkoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxO
YW1lczo6ZGQoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxO
YW1lczo6ZHQoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxO
YW1lczo6bWFycXVlZSgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICB9CisgICAgcmV0dXJuICZ0YWdM
aXN0OworfQorCitib29sIEhUTUxFbGVtZW50SW1wbDo6aW5FaXRoZXJUYWdMaXN0KGNvbnN0IE5v
ZGVJbXBsKiBuZXdDaGlsZCkKIHsKLSAgICBtX2VsZW1lbnRJZCA9IGk7CisgICAgaWYgKG5ld0No
aWxkLT5pc1RleHROb2RlKCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAKKyAgICBp
ZiAobmV3Q2hpbGQtPmlzSFRNTEVsZW1lbnQoKSkgeworICAgICAgICBjb25zdCBIVE1MRWxlbWVu
dEltcGwqIGNoaWxkID0gc3RhdGljX2Nhc3Q8Y29uc3QgSFRNTEVsZW1lbnRJbXBsKj4obmV3Q2hp
bGQpOworICAgICAgICBpZiAoaW5saW5lVGFnTGlzdCgpLT5jb250YWlucyhjaGlsZC0+dGFnTmFt
ZSgpLmxvY2FsTmFtZVB0cigpKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBp
ZiAoYmxvY2tUYWdMaXN0KCktPmNvbnRhaW5zKGNoaWxkLT50YWdOYW1lKCkubG9jYWxOYW1lUHRy
KCkpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiAhaXNSZWNvZ25p
emVkVGFnTmFtZShjaGlsZC0+dGFnTmFtZSgpKTsgLy8gQWNjZXB0IGN1c3RvbSBodG1sIHRhZ3MK
KyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MR2VuZXJp
Y0VsZW1lbnRJbXBsOjppZCgpIGNvbnN0Citib29sIEhUTUxFbGVtZW50SW1wbDo6aW5JbmxpbmVU
YWdMaXN0KGNvbnN0IE5vZGVJbXBsKiBuZXdDaGlsZCkKIHsKLSAgICByZXR1cm4gbV9lbGVtZW50
SWQ7CisgICAgaWYgKG5ld0NoaWxkLT5pc1RleHROb2RlKCkpCisgICAgICAgIHJldHVybiB0cnVl
OworCisgICAgaWYgKG5ld0NoaWxkLT5pc0hUTUxFbGVtZW50KCkpIHsKKyAgICAgICAgY29uc3Qg
SFRNTEVsZW1lbnRJbXBsKiBjaGlsZCA9IHN0YXRpY19jYXN0PGNvbnN0IEhUTUxFbGVtZW50SW1w
bCo+KG5ld0NoaWxkKTsKKyAgICAgICAgaWYgKGlubGluZVRhZ0xpc3QoKS0+Y29udGFpbnMoY2hp
bGQtPnRhZ05hbWUoKS5sb2NhbE5hbWVQdHIoKSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgcmV0dXJuICFpc1JlY29nbml6ZWRUYWdOYW1lKGNoaWxkLT50YWdOYW1lKCkpOyAv
LyBBY2NlcHQgY3VzdG9tIGh0bWwgdGFncworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30K
KworYm9vbCBIVE1MRWxlbWVudEltcGw6OmluQmxvY2tUYWdMaXN0KGNvbnN0IE5vZGVJbXBsKiBu
ZXdDaGlsZCkKK3sKKyAgICBpZiAobmV3Q2hpbGQtPmlzVGV4dE5vZGUoKSkKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgICAgICAKKyAgICBpZiAobmV3Q2hpbGQtPmlzSFRNTEVsZW1lbnQo
KSkgeworICAgICAgICBjb25zdCBIVE1MRWxlbWVudEltcGwqIGNoaWxkID0gc3RhdGljX2Nhc3Q8
Y29uc3QgSFRNTEVsZW1lbnRJbXBsKj4obmV3Q2hpbGQpOworICAgICAgICBpZiAoYmxvY2tUYWdM
aXN0KCktPmNvbnRhaW5zKGNoaWxkLT50YWdOYW1lKCkubG9jYWxOYW1lUHRyKCkpKQorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiAhaXNSZWNvZ25pemVkVGFnTmFtZShj
aGlsZC0+dGFnTmFtZSgpKTsgLy8gQWNjZXB0IGN1c3RvbSBodG1sIHRhZ3MKKyAgICB9CisKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgSFRNTEVsZW1lbnRJbXBsOjpjaGVja0RURChjb25z
dCBOb2RlSW1wbCogbmV3Q2hpbGQpCit7CisgICAgaWYgKGhhc1RhZ05hbWUoSFRNTE5hbWVzOjph
ZGRyZXNzKCkpICYmIG5ld0NoaWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6cCgpKSkKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGluRWl0aGVyVGFnTGlzdChuZXdDaGlsZCk7CiB9
CkluZGV4OiBraHRtbC9odG1sL2h0bWxfZWxlbWVudGltcGwuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfZWxlbWVudGltcGwuaCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS4zNQpkaWZmIC11IC1wIC1yMS4zNSBraHRtbC9odG1sL2h0bWxfZWxl
bWVudGltcGwuaAotLS0ga2h0bWwvaHRtbC9odG1sX2VsZW1lbnRpbXBsLmgJMTEgTWF5IDIwMDUg
MDU6NDk6MzQgLTAwMDAJMS4zNQorKysga2h0bWwvaHRtbC9odG1sX2VsZW1lbnRpbXBsLmgJOCBK
dWwgMjAwNSAwMzowNDoxMiAtMDAwMApAQCAtMjUsMjcgKzI1LDI2IEBACiAjZGVmaW5lIEhUTUxf
RUxFTUVOVElNUExfSAogCiAjaW5jbHVkZSAieG1sL2RvbV9lbGVtZW50aW1wbC5oIgotI2luY2x1
ZGUgPHFwdHJkaWN0Lmg+CisjaW5jbHVkZSAiaHRtbG5hbWVzLmgiCiAKIG5hbWVzcGFjZSBET00g
ewogCiBjbGFzcyBEb2N1bWVudEZyYWdtZW50SW1wbDsKIGNsYXNzIERPTVN0cmluZzsKIGNsYXNz
IEhUTUxDb2xsZWN0aW9uSW1wbDsKLSAgICAKKworZW51bSBIVE1MVGFnU3RhdHVzIHsgVGFnU3Rh
dHVzT3B0aW9uYWwsIFRhZ1N0YXR1c1JlcXVpcmVkLCBUYWdTdGF0dXNGb3JiaWRkZW4gfTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgCiBjbGFzcyBIVE1MRWxlbWVudEltcGwgOiBwdWJsaWMgU3R5
bGVkRWxlbWVudEltcGwKIHsKIHB1YmxpYzoKLSAgICBIVE1MRWxlbWVudEltcGwoRG9jdW1lbnRQ
dHIgKmRvYyk7Ci0KKyAgICBIVE1MRWxlbWVudEltcGwoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFn
TmFtZSwgRG9jdW1lbnRQdHIgKmRvYyk7CiAgICAgdmlydHVhbCB+SFRNTEVsZW1lbnRJbXBsKCk7
CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNIVE1MRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7
IH0KIAotICAgIHZpcnR1YWwgYm9vbCBpc0lubGluZSgpIGNvbnN0OwotICAgICAKLSAgICB2aXJ0
dWFsIElkIGlkKCkgY29uc3QgPSAwOwotICAgIAorCXZpcnR1YWwgRE9NU3RyaW5nIG5vZGVOYW1l
KCkgY29uc3Q7CisKICAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShJZCBhdHRyLCBNYXBwZWRB
dHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCogYXR0cik7CiAKQEAgLTUzLDcgKzUyLDcg
QEAgcHVibGljOgogCiAgICAgU2hhcmVkUHRyPEhUTUxDb2xsZWN0aW9uSW1wbD4gY2hpbGRyZW4o
KTsKICAgICAKLSAgICBET01TdHJpbmcgaWRET00oKSBjb25zdDsgLy8gcmVuYW1lIHRvIGlkIGFm
dGVyIGVsaW1pbmF0aW5nIE5vZGVJbXBsOjppZCBzb21lIGRheQorICAgIERPTVN0cmluZyBpZCgp
IGNvbnN0OwogICAgIHZvaWQgc2V0SWQoY29uc3QgRE9NU3RyaW5nICZ2YWx1ZSk7CiAgICAgRE9N
U3RyaW5nIHRpdGxlKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRUaXRsZShjb25zdCBET01TdHJpbmcg
JnZhbHVlKTsKQEAgLTczLDggKzcyLDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0T3V0ZXJIVE1M
KGNvbnN0IERPTVN0cmluZyAmaHRtbCwgaW50ICZleGNlcHRpb24pOwogICAgIHZvaWQgc2V0SW5u
ZXJUZXh0KGNvbnN0IERPTVN0cmluZyAmdGV4dCwgaW50ICZleGNlcHRpb24pOwogICAgIHZvaWQg
c2V0T3V0ZXJUZXh0KGNvbnN0IERPTVN0cmluZyAmdGV4dCwgaW50ICZleGNlcHRpb24pOwotCi0g
ICAgdmlydHVhbCBET01TdHJpbmcgbmFtZXNwYWNlVVJJKCkgY29uc3Q7CiAgICAgCiAgICAgdmly
dHVhbCBib29sIGlzRm9jdXNhYmxlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlzQ29udGVu
dEVkaXRhYmxlKCkgY29uc3Q7CkBAIC04OSwyMiArODYsMjMgQEAgcHVibGljOgogCiAgICAgdmly
dHVhbCBET01TdHJpbmcgdG9TdHJpbmcoKSBjb25zdDsKIAorICAgIHZpcnR1YWwgSFRNTFRhZ1N0
YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9y
aXR5KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGNoaWxkQWxsb3dlZChOb2RlSW1wbCogbmV3
Q2hpbGQpOyAvLyBFcnJvci1jaGVja2luZyBkdXJpbmcgcGFyc2luZyB0aGF0IGNoZWNrcyB0aGUg
RFRECisKKyAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY2hlY2sgdGhlIERURCBmb3IgYSBnaXZl
biBjaGlsZCBub2RlLgorICAgIHZpcnR1YWwgYm9vbCBjaGVja0RURChjb25zdCBOb2RlSW1wbCog
bmV3Q2hpbGQpOworICAgIHN0YXRpYyBib29sIGluRWl0aGVyVGFnTGlzdChjb25zdCBOb2RlSW1w
bCogbmV3Q2hpbGQpOworICAgIHN0YXRpYyBib29sIGluSW5saW5lVGFnTGlzdChjb25zdCBOb2Rl
SW1wbCogbmV3Q2hpbGQpOworICAgIHN0YXRpYyBib29sIGluQmxvY2tUYWdMaXN0KGNvbnN0IE5v
ZGVJbXBsKiBuZXdDaGlsZCk7CisgICAgc3RhdGljIGJvb2wgaXNSZWNvZ25pemVkVGFnTmFtZShj
b25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lKTsKKwogcHJvdGVjdGVkOgogCiAgICAgLy8gZm9y
IElNRywgT0JKRUNUIGFuZCBBUFBMRVQKICAgICB2b2lkIGFkZEhUTUxBbGlnbm1lbnQoTWFwcGVk
QXR0cmlidXRlSW1wbCogaHRtbEF0dHIpOwogfTsKIAotY2xhc3MgSFRNTEdlbmVyaWNFbGVtZW50
SW1wbCA6IHB1YmxpYyBIVE1MRWxlbWVudEltcGwKLXsKLXB1YmxpYzoKLSAgICBIVE1MR2VuZXJp
Y0VsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIHVzaG9ydCBlbGVtZW50SWQpOwotICAgIHZp
cnR1YWwgSWQgaWQoKSBjb25zdDsKLQotcHJvdGVjdGVkOgotICAgIHVzaG9ydCBtX2VsZW1lbnRJ
ZDsKLX07Ci0KIH0gLy9uYW1lc3BhY2UKIAogI2VuZGlmCkluZGV4OiBraHRtbC9odG1sL2h0bWxf
Zm9ybWltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1s
L2h0bWwvaHRtbF9mb3JtaW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTcwCmRpZmYg
LXUgLXAgLXIxLjE3MCBraHRtbC9odG1sL2h0bWxfZm9ybWltcGwuY3BwCi0tLSBraHRtbC9odG1s
L2h0bWxfZm9ybWltcGwuY3BwCTI5IEp1biAyMDA1IDIwOjE0OjU3IC0wMDAwCTEuMTcwCisrKyBr
aHRtbC9odG1sL2h0bWxfZm9ybWltcGwuY3BwCTggSnVsIDIwMDUgMDM6MDQ6MTQgLTAwMDAKQEAg
LTEwMyw3ICsxMDMsNyBAQCBwcml2YXRlOgogfTsKIAogSFRNTEZvcm1FbGVtZW50SW1wbDo6SFRN
TEZvcm1FbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAgIDogSFRNTEVsZW1lbnRJbXBs
KGRvYykKKyAgICA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6OmZvcm0oKSwgZG9jKQogewog
ICAgIGNvbGxlY3Rpb25JbmZvID0gMDsKICAgICBtX3Bvc3QgPSBmYWxzZTsKQEAgLTEzMCwxMSAr
MTMwLDYgQEAgSFRNTEZvcm1FbGVtZW50SW1wbDo6fkhUTUxGb3JtRWxlbWVudEltcAogICAgICAg
ICBpbWdFbGVtZW50c1tpXS0+bV9mb3JtID0gMDsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxGb3Jt
RWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfRk9STTsKLX0KLQogI2lm
IEFQUExFX0NIQU5HRVMKIAogYm9vbCBIVE1MRm9ybUVsZW1lbnRJbXBsOjpmb3JtV291bGRIYXZl
U2VjdXJlU3VibWlzc2lvbihjb25zdCBET01TdHJpbmcgJnVybCkKQEAgLTE5Miw3ICsxODcsNyBA
QCB2b2lkIEhUTUxGb3JtRWxlbWVudEltcGw6OnN1Ym1pdENsaWNrKCkKIHsKICAgICBib29sIHN1
Ym1pdEZvdW5kID0gZmFsc2U7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZvcm1FbGVt
ZW50cy5jb3VudCgpOyArK2kpIHsKLSAgICAgICAgaWYgKGZvcm1FbGVtZW50c1tpXS0+aWQoKSA9
PSBJRF9JTlBVVCkgeworICAgICAgICBpZiAoZm9ybUVsZW1lbnRzW2ldLT5oYXNMb2NhbE5hbWUo
SFRNTE5hbWVzOjppbnB1dCgpKSkgewogICAgICAgICAgICAgSFRNTElucHV0RWxlbWVudEltcGwg
KmVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50SW1wbCAqPihmb3JtRWxlbWVu
dHNbaV0pOwogICAgICAgICAgICAgaWYgKGVsZW1lbnQtPmlzU3VjY2Vzc2Z1bFN1Ym1pdEJ1dHRv
bigpICYmIGVsZW1lbnQtPnJlbmRlcmVyKCkpIHsKICAgICAgICAgICAgICAgICBzdWJtaXRGb3Vu
ZCA9IHRydWU7CkBAIC0zOTksNyArMzk0LDcgQEAgYm9vbCBIVE1MRm9ybUVsZW1lbnRJbXBsOjpm
b3JtRGF0YShGb3JtRAogCiAgICAgICAgICAgICAgICAgICAgIC8vIGlmIHRoZSBjdXJyZW50IHR5
cGUgaXMgRklMRSwgdGhlbiB3ZSBhbHNvIG5lZWQgdG8KICAgICAgICAgICAgICAgICAgICAgLy8g
aW5jbHVkZSB0aGUgZmlsZW5hbWUKLSAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQtPm5v
ZGVUeXBlKCkgPT0gTm9kZTo6RUxFTUVOVF9OT0RFICYmIGN1cnJlbnQtPmlkKCkgPT0gSURfSU5Q
VVQgJiYKKyAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQtPmhhc0xvY2FsTmFtZShIVE1M
TmFtZXM6OmlucHV0KCkpICYmCiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxI
VE1MSW5wdXRFbGVtZW50SW1wbCo+KGN1cnJlbnQpLT5pbnB1dFR5cGUoKSA9PSBIVE1MSW5wdXRF
bGVtZW50SW1wbDo6RklMRSkKICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
ICAgICAgICAgUVN0cmluZyBwYXRoID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudEltcGwq
PihjdXJyZW50KS0+dmFsdWUoKS5zdHJpbmcoKTsKQEAgLTU0Nyw3ICs1NDIsNyBAQCB2b2lkIEhU
TUxGb3JtRWxlbWVudEltcGw6OnN1Ym1pdCggYm9vbCBhCiAjaWYgQVBQTEVfQ0hBTkdFUwogICAg
ICAgICAvLyBPdXIgYXBwIG5lZWRzIHRvIGdldCBmb3JtIHZhbHVlcyBmb3IgcGFzc3dvcmQgZmll
bGRzIGZvciBkb2luZyBwYXNzd29yZCBhdXRvY29tcGxldGUsCiAgICAgICAgIC8vIHNvIHdlIGFy
ZSBtb3JlIGxlbmllbnQgaW4gcHVzaGluZyB2YWx1ZXMsIGFuZCBsZXQgdGhlIGFwcCBkZWNpZGUg
d2hhdCB0byBzYXZlIHdoZW4uCi0gICAgICAgIGlmIChjdXJyZW50LT5pZCgpID09IElEX0lOUFVU
KSB7CisgICAgICAgIGlmIChjdXJyZW50LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjppbnB1dCgp
KSkgewogICAgICAgICAgICAgSFRNTElucHV0RWxlbWVudEltcGwgKmlucHV0ID0gc3RhdGljX2Nh
c3Q8SFRNTElucHV0RWxlbWVudEltcGwqPihjdXJyZW50KTsKICAgICAgICAgICAgIGlmIChpbnB1
dC0+aW5wdXRUeXBlKCkgPT0gSFRNTElucHV0RWxlbWVudEltcGw6OlRFWFQKICAgICAgICAgICAg
ICAgICB8fCBpbnB1dC0+aW5wdXRUeXBlKCkgPT0gIEhUTUxJbnB1dEVsZW1lbnRJbXBsOjpQQVNT
V09SRApAQCAtNzA5LDcgKzcwNCw3IEBAIHZvaWQgSFRNTEZvcm1FbGVtZW50SW1wbDo6cmFkaW9D
bGlja2VkKCAKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZm9ybUVsZW1lbnRzLmNv
dW50KCk7ICsraSkgewogICAgICAgICBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbCAqY3VycmVu
dCA9IGZvcm1FbGVtZW50c1tpXTsKLSAgICAgICAgaWYgKGN1cnJlbnQtPmlkKCkgPT0gSURfSU5Q
VVQgJiYKKyAgICAgICAgaWYgKGN1cnJlbnQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmlucHV0
KCkpICYmCiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50SW1wbCo+KGN1
cnJlbnQpLT5pbnB1dFR5cGUoKSA9PSBIVE1MSW5wdXRFbGVtZW50SW1wbDo6UkFESU8gJiYKICAg
ICAgICAgICAgIGN1cnJlbnQgIT0gY2FsbGVyICYmIGN1cnJlbnQtPmZvcm0oKSA9PSBjYWxsZXIt
PmZvcm0oKSAmJiBjdXJyZW50LT5uYW1lKCkgPT0gY2FsbGVyLT5uYW1lKCkpIHsKICAgICAgICAg
ICAgIHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnRJbXBsKj4oY3VycmVudCktPnNldENoZWNr
ZWQoZmFsc2UpOwpAQCAtODY0LDggKzg1OSw4IEBAIHZvaWQgSFRNTEZvcm1FbGVtZW50SW1wbDo6
c2V0VGFyZ2V0KGNvbnMKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1IVE1MR2VuZXJpY0Zvcm1F
bGVtZW50SW1wbDo6SFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywg
SFRNTEZvcm1FbGVtZW50SW1wbCAqZikKLSAgICA6IEhUTUxFbGVtZW50SW1wbChkb2MpCitIVE1M
R2VuZXJpY0Zvcm1FbGVtZW50SW1wbDo6SFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnRQdHIgKmRvYywgSFRNTEZvcm1FbGVtZW50
SW1wbCAqZikKKyAgICA6IEhUTUxFbGVtZW50SW1wbCh0YWdOYW1lLCBkb2MpCiB7CiAgICAgbV9k
aXNhYmxlZCA9IG1fcmVhZE9ubHkgPSBmYWxzZTsKICAgICBtX2Rvcm1hbnQgPSBmYWxzZTsKQEAg
LTk2Nyw5ICs5NjIsOCBAQCB2b2lkIEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsOjpyZW1vdmVk
CiBIVE1MRm9ybUVsZW1lbnRJbXBsICpIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbDo6Z2V0Rm9y
bSgpIGNvbnN0CiB7CiAgICAgTm9kZUltcGwgKnAgPSBwYXJlbnROb2RlKCk7Ci0gICAgd2hpbGUo
cCkKLSAgICB7Ci0gICAgICAgIGlmKCBwLT5pZCgpID09IElEX0ZPUk0gKQorICAgIHdoaWxlKHAp
IHsKKyAgICAgICAgaWYgKHAtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpmb3JtKCkpKQogICAgICAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudEltcGwgKj4ocCk7CiAgICAg
ICAgIHAgPSBwLT5wYXJlbnROb2RlKCk7CiAgICAgfQpAQCAtMTE4OSw3ICsxMTgzLDcgQEAgdm9p
ZCBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbDo6c2V0VGFiSQogLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQogCiBIVE1MQnV0dG9uRWxlbWVudEltcGw6OkhUTUxCdXR0b25FbGVtZW50SW1wbChEb2N1bWVu
dFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmKQotICAgIDogSFRNTEdlbmVyaWNGb3Jt
RWxlbWVudEltcGwoZG9jLCBmKQorICAgIDogSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwoSFRN
TE5hbWVzOjpidXR0b24oKSwgZG9jLCBmKQogewogICAgIG1fdHlwZSA9IFNVQk1JVDsKICAgICBt
X2RpcnR5ID0gdHJ1ZTsKQEAgLTEyMDAsMTEgKzExOTQsNiBAQCBIVE1MQnV0dG9uRWxlbWVudElt
cGw6On5IVE1MQnV0dG9uRWxlbWVuCiB7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MQnV0dG9uRWxl
bWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfQlVUVE9OOwotfQotCiBET01T
dHJpbmcgSFRNTEJ1dHRvbkVsZW1lbnRJbXBsOjp0eXBlKCkgY29uc3QKIHsKICAgICByZXR1cm4g
Z2V0QXR0cmlidXRlKEFUVFJfVFlQRSk7CkBAIC0xMzI2LDcgKzEzMTUsNyBAQCB2b2lkIEhUTUxC
dXR0b25FbGVtZW50SW1wbDo6c2V0VmFsdWUoY29uCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhU
TUxGaWVsZFNldEVsZW1lbnRJbXBsOjpIVE1MRmllbGRTZXRFbGVtZW50SW1wbChEb2N1bWVudFB0
ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmKQotICAgOiBIVE1MR2VuZXJpY0Zvcm1FbGVt
ZW50SW1wbChkb2MsIGYpCisgICA6IEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKEhUTUxOYW1l
czo6ZmllbGRzZXQoKSwgZG9jLCBmKQogewogfQogCkBAIC0xMzM0LDE0ICsxMzIzLDE0IEBAIEhU
TUxGaWVsZFNldEVsZW1lbnRJbXBsOjp+SFRNTEZpZWxkU2V0RWwKIHsKIH0KIAotYm9vbCBIVE1M
RmllbGRTZXRFbGVtZW50SW1wbDo6aXNGb2N1c2FibGUoKSBjb25zdAorYm9vbCBIVE1MRmllbGRT
ZXRFbGVtZW50SW1wbDo6Y2hlY2tEVEQoY29uc3QgTm9kZUltcGwqIG5ld0NoaWxkKQogewotICAg
IHJldHVybiBmYWxzZTsKKwlyZXR1cm4gbmV3Q2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjps
ZWdlbmQoKSkgfHwgSFRNTEVsZW1lbnRJbXBsOjpjaGVja0RURChuZXdDaGlsZCk7CiB9CiAKLU5v
ZGVJbXBsOjpJZCBIVE1MRmllbGRTZXRFbGVtZW50SW1wbDo6aWQoKSBjb25zdAorYm9vbCBIVE1M
RmllbGRTZXRFbGVtZW50SW1wbDo6aXNGb2N1c2FibGUoKSBjb25zdAogewotICAgIHJldHVybiBJ
RF9GSUVMRFNFVDsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIERPTVN0cmluZyBIVE1MRmllbGRT
ZXRFbGVtZW50SW1wbDo6dHlwZSgpIGNvbnN0CkBAIC0xMzU3LDggKzEzNDYsMjEgQEAgUmVuZGVy
T2JqZWN0KiBIVE1MRmllbGRTZXRFbGVtZW50SW1wbDo6YwogLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQog
CiBIVE1MSW5wdXRFbGVtZW50SW1wbDo6SFRNTElucHV0RWxlbWVudEltcGwoRG9jdW1lbnRQdHIg
KmRvYywgSFRNTEZvcm1FbGVtZW50SW1wbCAqZikKLSAgICA6IEhUTUxHZW5lcmljRm9ybUVsZW1l
bnRJbXBsKGRvYywgZiksIG1faW1hZ2VMb2FkZXIoMCksIG1fdmFsdWVNYXRjaGVzUmVuZGVyZXIo
ZmFsc2UpCisgICAgOiBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbChIVE1MTmFtZXM6OmlucHV0
KCksIGRvYywgZikKK3sKKyAgICBpbml0KCk7Cit9CisKK0hUTUxJbnB1dEVsZW1lbnRJbXBsOjpI
VE1MSW5wdXRFbGVtZW50SW1wbChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVu
dFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmKQorICAgIDogSFRNTEdlbmVyaWNGb3Jt
RWxlbWVudEltcGwodGFnTmFtZSwgZG9jLCBmKQogeworICAgIGluaXQoKTsKK30KKwordm9pZCBI
VE1MSW5wdXRFbGVtZW50SW1wbDo6aW5pdCgpCit7CisgICAgbV9pbWFnZUxvYWRlciA9IDA7Cisg
ICAgbV92YWx1ZU1hdGNoZXNSZW5kZXJlciA9IGZhbHNlOwogICAgIG1fdHlwZSA9IFRFWFQ7CiAg
ICAgbV9tYXhMZW4gPSAtMTsKICAgICBtX3NpemUgPSAyMDsKQEAgLTEzNzYsOCArMTM3OCw4IEBA
IEhUTUxJbnB1dEVsZW1lbnRJbXBsOjpIVE1MSW5wdXRFbGVtZW50SW0KIAogICAgIG1fbWF4UmVz
dWx0cyA9IC0xOwogCi0gICAgaWYgKCBtX2Zvcm0gKQotICAgICAgICBtX2F1dG9jb21wbGV0ZSA9
IGYtPmF1dG9Db21wbGV0ZSgpOworICAgIGlmIChtX2Zvcm0pCisgICAgICAgIG1fYXV0b2NvbXBs
ZXRlID0gbV9mb3JtLT5hdXRvQ29tcGxldGUoKTsKIH0KIAogSFRNTElucHV0RWxlbWVudEltcGw6
On5IVE1MSW5wdXRFbGVtZW50SW1wbCgpCkBAIC0xMzg2LDExICsxMzg4LDYgQEAgSFRNTElucHV0
RWxlbWVudEltcGw6On5IVE1MSW5wdXRFbGVtZW50SQogICAgIGRlbGV0ZSBtX2ltYWdlTG9hZGVy
OwogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTElucHV0RWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gSURfSU5QVVQ7Ci19Ci0KIHZvaWQgSFRNTElucHV0RWxlbWVudEltcGw6OnNl
dFR5cGUoY29uc3QgRE9NU3RyaW5nJiB0KQogewogICAgIHR5cGVFbnVtIG5ld1R5cGU7CkBAIC0y
NDY4LDcgKzI0NjUsNyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnRJbXBsOjpzZXRVc2VNYXAoY29u
CiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxMYWJlbEVsZW1lbnRJbXBsOjpIVE1MTGFiZWxF
bGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAgIDogSFRNTEVsZW1lbnRJbXBsKGRvYykK
KyAgICA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6OmxhYmVsKCksIGRvYykKIHsKIH0KIApA
QCAtMjQ4MSwxMSArMjQ3OCw2IEBAIGJvb2wgSFRNTExhYmVsRWxlbWVudEltcGw6OmlzRm9jdXNh
YmxlKCkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MTGFiZWxFbGVt
ZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9MQUJFTDsKLX0KLQogdm9pZCBI
VE1MTGFiZWxFbGVtZW50SW1wbDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRl
SW1wbCAqYXR0cikKIHsKICAgICBzd2l0Y2goYXR0ci0+aWQoKSkKQEAgLTI1MzksNyArMjUzMSw3
IEBAIHZvaWQgSFRNTExhYmVsRWxlbWVudEltcGw6OmFjY2Vzc0tleUFjdGkKIEhUTUxGb3JtRWxl
bWVudEltcGwgKkhUTUxMYWJlbEVsZW1lbnRJbXBsOjpmb3JtKCkKIHsKICAgICBmb3IgKE5vZGVJ
bXBsICpwID0gcGFyZW50Tm9kZSgpOyBwICE9IDA7IHAgPSBwLT5wYXJlbnROb2RlKCkpIHsKLSAg
ICAgICAgaWYgKHAtPmlkKCkgPT0gSURfRk9STSkKKyAgICAgICAgaWYgKHAtPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjpmb3JtKCkpKQogICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxG
b3JtRWxlbWVudEltcGwgKj4ocCk7CiAgICAgfQogICAgIApAQCAtMjU2OSw3ICsyNTYxLDcgQEAg
dm9pZCBIVE1MTGFiZWxFbGVtZW50SW1wbDo6c2V0SHRtbEZvcihjbwogLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQogCiBIVE1MTGVnZW5kRWxlbWVudEltcGw6OkhUTUxMZWdlbmRFbGVtZW50SW1wbChEb2N1
bWVudFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmKQotOiBIVE1MR2VuZXJpY0Zvcm1F
bGVtZW50SW1wbChkb2MsIGYpCis6IEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKEhUTUxOYW1l
czo6bGVnZW5kKCksIGRvYywgZikKIHsKIH0KIApAQCAtMjU4MiwxMSArMjU3NCw2IEBAIGJvb2wg
SFRNTExlZ2VuZEVsZW1lbnRJbXBsOjppc0ZvY3VzYWJsZSgKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLU5vZGVJbXBsOjpJZCBIVE1MTGVnZW5kRWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gSURfTEVHRU5EOwotfQotCiBSZW5kZXJPYmplY3QqIEhUTUxMZWdlbmRFbGVtZW50
SW1wbDo6Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqIGFyZW5hLCBSZW5kZXJTdHlsZSogc3R5
bGUpCiB7CiAgICAgcmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRlckxlZ2VuZCh0aGlzKTsKQEAgLTI2
MjEsNyArMjYwOCw3IEBAIEVsZW1lbnRJbXBsICpIVE1MTGVnZW5kRWxlbWVudEltcGw6OmZvcm0K
IHsKICAgICAvLyBDaGVjayBpZiB0aGVyZSdzIGEgZmllbGRzZXQgYmVsb25naW5nIHRvIHRoaXMg
bGVnZW5kLgogICAgIE5vZGVJbXBsICpmaWVsZHNldCA9IHBhcmVudE5vZGUoKTsKLSAgICB3aGls
ZSAoZmllbGRzZXQgJiYgZmllbGRzZXQtPmlkKCkgIT0gSURfRklFTERTRVQpCisgICAgd2hpbGUg
KGZpZWxkc2V0ICYmICFmaWVsZHNldC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZpZWxkc2V0KCkp
KQogICAgICAgICBmaWVsZHNldCA9IGZpZWxkc2V0LT5wYXJlbnROb2RlKCk7CiAgICAgaWYgKCFm
aWVsZHNldCkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0yNjMyLDcgKzI2MTksNyBAQCBFbGVtZW50
SW1wbCAqSFRNTExlZ2VuZEVsZW1lbnRJbXBsOjpmb3JtCiAgICAgd2hpbGUgKChub2RlID0gbm9k
ZS0+dHJhdmVyc2VOZXh0Tm9kZShmaWVsZHNldCkpKSB7CiAgICAgICAgIGlmIChub2RlLT5pc0hU
TUxFbGVtZW50KCkpIHsKICAgICAgICAgICAgIEhUTUxFbGVtZW50SW1wbCAqZWxlbWVudCA9IHN0
YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCAqPihub2RlKTsKLSAgICAgICAgICAgIGlmIChlbGVt
ZW50LT5pZCgpICE9IElEX0xFR0VORCAmJiBlbGVtZW50LT5pc0dlbmVyaWNGb3JtRWxlbWVudCgp
KQorICAgICAgICAgICAgaWYgKCFlbGVtZW50LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpsZWdl
bmQoKSkgJiYgZWxlbWVudC0+aXNHZW5lcmljRm9ybUVsZW1lbnQoKSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gZWxlbWVudDsKICAgICAgICAgfQogICAgIH0KQEAgLTI2NTUsOCArMjY0MiwyMCBA
QCB2b2lkIEhUTUxMZWdlbmRFbGVtZW50SW1wbDo6YWNjZXNzS2V5QWN0CiAvLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCiAKIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6SFRNTFNlbGVjdEVsZW1lbnRJbXBsKERv
Y3VtZW50UHRyICpkb2MsIEhUTUxGb3JtRWxlbWVudEltcGwgKmYpCi0gICAgOiBIVE1MR2VuZXJp
Y0Zvcm1FbGVtZW50SW1wbChkb2MsIGYpLCBtX29wdGlvbnMoMCkKKyAgICA6IEhUTUxHZW5lcmlj
Rm9ybUVsZW1lbnRJbXBsKEhUTUxOYW1lczo6c2VsZWN0KCksIGRvYywgZiksIG1fb3B0aW9ucygw
KQogeworICAgIGluaXQoKTsKK30KKworSFRNTFNlbGVjdEVsZW1lbnRJbXBsOjpIVE1MU2VsZWN0
RWxlbWVudEltcGwoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnRQdHIgKmRv
YywgSFRNTEZvcm1FbGVtZW50SW1wbCAqZikKKyAgICA6IEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJ
bXBsKHRhZ05hbWUsIGRvYywgZiksIG1fb3B0aW9ucygwKQoreworICAgIGluaXQoKTsKK30KKwor
dm9pZCBIVE1MU2VsZWN0RWxlbWVudEltcGw6OmluaXQoKQoreworICAgIG1fb3B0aW9ucyA9IDA7
CiAgICAgbV9tdWx0aXBsZSA9IGZhbHNlOwogICAgIG1fcmVjYWxjTGlzdEl0ZW1zID0gZmFsc2U7
CiAgICAgLy8gMCBtZWFucyBpbnZhbGlkIChpLmUuIG5vdCBzZXQpCkBAIC0yNjczLDkgKzI2NzIs
MTAgQEAgSFRNTFNlbGVjdEVsZW1lbnRJbXBsOjp+SFRNTFNlbGVjdEVsZW1lbgogICAgIH0KIH0K
IAotTm9kZUltcGw6OklkIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6aWQoKSBjb25zdAorYm9vbCBI
VE1MU2VsZWN0RWxlbWVudEltcGw6OmNoZWNrRFREKGNvbnN0IE5vZGVJbXBsKiBuZXdDaGlsZCkK
IHsKLSAgICByZXR1cm4gSURfU0VMRUNUOworCXJldHVybiBuZXdDaGlsZC0+aXNUZXh0Tm9kZSgp
IHx8IG5ld0NoaWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpIHx8IG5ld0NoaWxk
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b3B0Z3JvdXAoKSkgfHwKKwkJICAgbmV3Q2hpbGQtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjpzY3JpcHQoKSk7CiB9CiAKIHZvaWQgSFRNTFNlbGVjdEVsZW1l
bnRJbXBsOjpyZWNhbGNTdHlsZSggU3R5bGVDaGFuZ2UgY2ggKQpAQCAtMjY5OSw3ICsyNjk5LDcg
QEAgbG9uZyBIVE1MU2VsZWN0RWxlbWVudEltcGw6OnNlbGVjdGVkSW5kZQogICAgIHVpbnQgbyA9
IDA7CiAgICAgUU1lbUFycmF5PEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKj4gaXRlbXMgPSBs
aXN0SXRlbXMoKTsKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGl0ZW1zLnNpemUo
KTsgaSsrKSB7Ci0gICAgICAgIGlmIChpdGVtc1tpXS0+aWQoKSA9PSBJRF9PUFRJT04pIHsKKyAg
ICAgICAgaWYgKGl0ZW1zW2ldLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvcHRpb24oKSkpIHsK
ICAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudEltcGwqPihpdGVt
c1tpXSktPnNlbGVjdGVkKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG87CiAgICAgICAgICAg
ICBvKys7CkBAIC0yNzE1LDcgKzI3MTUsNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6
c2V0U2VsZWN0ZWRJCiAgICAgUU1lbUFycmF5PEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKj4g
aXRlbXMgPSBsaXN0SXRlbXMoKTsKICAgICBpbnQgbGlzdEluZGV4OwogICAgIGZvciAobGlzdElu
ZGV4ID0gMDsgbGlzdEluZGV4IDwgaW50KGl0ZW1zLnNpemUoKSk7IGxpc3RJbmRleCsrKSB7Ci0g
ICAgICAgIGlmIChpdGVtc1tsaXN0SW5kZXhdLT5pZCgpID09IElEX09QVElPTikKKyAgICAgICAg
aWYgKGl0ZW1zW2xpc3RJbmRleF0tPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9wdGlvbigpKSkK
ICAgICAgICAgICAgIHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50SW1wbCo+KGl0ZW1zW2xp
c3RJbmRleF0pLT5zZXRTZWxlY3RlZChmYWxzZSk7CiAgICAgfQogICAgIGxpc3RJbmRleCA9IG9w
dGlvblRvTGlzdEluZGV4KGluZGV4KTsKQEAgLTI3MzEsNyArMjczMSw3IEBAIGxvbmcgSFRNTFNl
bGVjdEVsZW1lbnRJbXBsOjpsZW5ndGgoKSBjb24KICAgICB1aW50IGk7CiAgICAgUU1lbUFycmF5
PEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKj4gaXRlbXMgPSBsaXN0SXRlbXMoKTsKICAgICBm
b3IgKGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgaWYgKGl0ZW1zW2ld
LT5pZCgpID09IElEX09QVElPTikKKyAgICAgICAgaWYgKGl0ZW1zW2ldLT5oYXNMb2NhbE5hbWUo
SFRNTE5hbWVzOjpvcHRpb24oKSkpCiAgICAgICAgICAgICBsZW4rKzsKICAgICB9CiAgICAgcmV0
dXJuIGxlbjsKQEAgLTI3MzksNyArMjczOSw3IEBAIGxvbmcgSFRNTFNlbGVjdEVsZW1lbnRJbXBs
OjpsZW5ndGgoKSBjb24KIAogdm9pZCBIVE1MU2VsZWN0RWxlbWVudEltcGw6OmFkZCggSFRNTEVs
ZW1lbnRJbXBsICplbGVtZW50LCBIVE1MRWxlbWVudEltcGwgKmJlZm9yZSApCiB7Ci0gICAgaWYg
KCFlbGVtZW50IHx8IGVsZW1lbnQtPmlkKCkgIT0gSURfT1BUSU9OKQorICAgIGlmICghZWxlbWVu
dCB8fCAhZWxlbWVudC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpKQogICAgICAg
ICByZXR1cm47CiAKICAgICBpbnQgZXhjZXB0aW9uY29kZSA9IDA7CkBAIC0yNzczLDEzICsyNzcz
LDEyIEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnRJbXBsOjpmb2N1cygpCiAgICAgZ2V0RG9jdW1l
bnQoKS0+c2V0Rm9jdXNOb2RlKHRoaXMpOwogfQogCi1ET01TdHJpbmcgSFRNTFNlbGVjdEVsZW1l
bnRJbXBsOjp2YWx1ZSggKQorRE9NU3RyaW5nIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6dmFsdWUo
KQogewogICAgIHVpbnQgaTsKICAgICBRTWVtQXJyYXk8SFRNTEdlbmVyaWNGb3JtRWxlbWVudElt
cGwqPiBpdGVtcyA9IGxpc3RJdGVtcygpOwogICAgIGZvciAoaSA9IDA7IGkgPCBpdGVtcy5zaXpl
KCk7IGkrKykgewotICAgICAgICBpZiAoIGl0ZW1zW2ldLT5pZCgpID09IElEX09QVElPTgotICAg
ICAgICAgICAgJiYgc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnRJbXBsKj4oaXRlbXNbaV0p
LT5zZWxlY3RlZCgpKQorICAgICAgICBpZiAoaXRlbXNbaV0tPmhhc0xvY2FsTmFtZShIVE1MTmFt
ZXM6Om9wdGlvbigpKSAmJiBzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudEltcGwqPihpdGVt
c1tpXSktPnNlbGVjdGVkKCkpCiAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTE9w
dGlvbkVsZW1lbnRJbXBsKj4oaXRlbXNbaV0pLT52YWx1ZSgpOwogICAgIH0KICAgICByZXR1cm4g
RE9NU3RyaW5nKCIiKTsKQEAgLTI3OTMsMTMgKzI3OTIsMTMgQEAgdm9pZCBIVE1MU2VsZWN0RWxl
bWVudEltcGw6OnNldFZhbHVlKGNvbgogICAgIC8vIGFuZCBtYWtlIGl0IHRoZSBjdXJyZW50IHNl
bGVjdGlvbi4KICAgICBRTWVtQXJyYXk8SFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwqPiBpdGVt
cyA9IGxpc3RJdGVtcygpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpdGVtcy5zaXpl
KCk7IGkrKykKLSAgICAgICAgaWYgKGl0ZW1zW2ldLT5pZCgpID09IElEX09QVElPTiAmJiBzdGF0
aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudEltcGwqPihpdGVtc1tpXSktPnZhbHVlKCkgPT0gdmFs
dWUpIHsKKyAgICAgICAgaWYgKGl0ZW1zW2ldLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvcHRp
b24oKSkgJiYgc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnRJbXBsKj4oaXRlbXNbaV0pLT52
YWx1ZSgpID09IHZhbHVlKSB7CiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxl
bWVudEltcGwqPihpdGVtc1tpXSktPnNldFNlbGVjdGVkKHRydWUpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiB9CiAKLVFTdHJpbmcgSFRNTFNlbGVjdEVsZW1lbnRJbXBsOjpzdGF0
ZSggKQorUVN0cmluZyBIVE1MU2VsZWN0RWxlbWVudEltcGw6OnN0YXRlKCkKIHsKICNpZiAhQVBQ
TEVfQ0hBTkdFUwogICAgIFFTdHJpbmcgc3RhdGU7CkBAIC0yODEyLDcgKzI4MTEsNyBAQCBRU3Ry
aW5nIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6c3RhdGUoICkKICAgICBRQ2hhciBzdGF0ZUNoYXJz
W2xdOwogICAgIAogICAgIGZvcihpbnQgaSA9IDA7IGkgPCBsOyBpKyspCi0gICAgICAgIGlmKGl0
ZW1zW2ldLT5pZCgpID09IElEX09QVElPTiAmJiBzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVu
dEltcGwqPihpdGVtc1tpXSktPnNlbGVjdGVkKCkpCisgICAgICAgIGlmKGl0ZW1zW2ldLT5oYXNM
b2NhbE5hbWUoSFRNTE5hbWVzOjpvcHRpb24oKSkgJiYgc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVs
ZW1lbnRJbXBsKj4oaXRlbXNbaV0pLT5zZWxlY3RlZCgpKQogICAgICAgICAgICAgc3RhdGVDaGFy
c1tpXSA9ICdYJzsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgc3RhdGVDaGFyc1tpXSA9ICcu
JzsKQEAgLTI4NDksNyArMjg0OCw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnRJbXBsOjpyZXN0
b3JlU3RhdGUKIAogICAgIGludCBsID0gaXRlbXMuY291bnQoKTsKICAgICBmb3IoaW50IGkgPSAw
OyBpIDwgbDsgaSsrKSB7Ci0gICAgICAgIGlmKGl0ZW1zW2ldLT5pZCgpID09IElEX09QVElPTikg
eworICAgICAgICBpZihpdGVtc1tpXS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkp
KSB7CiAgICAgICAgICAgICBIVE1MT3B0aW9uRWxlbWVudEltcGwqIG9lID0gc3RhdGljX2Nhc3Q8
SFRNTE9wdGlvbkVsZW1lbnRJbXBsKj4oaXRlbXNbaV0pOwogICAgICAgICAgICAgb2UtPnNldFNl
bGVjdGVkKHN0YXRlW2ldID09ICdYJyk7CiAgICAgICAgIH0KQEAgLTI5NDEsNyArMjk0MCw3IEBA
IGJvb2wgSFRNTFNlbGVjdEVsZW1lbnRJbXBsOjphcHBlbmRGb3JtRGEKIAogICAgIHVpbnQgaTsK
ICAgICBmb3IgKGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgaWYgKGl0
ZW1zW2ldLT5pZCgpID09IElEX09QVElPTikgeworICAgICAgICBpZiAoaXRlbXNbaV0tPmhhc0xv
Y2FsTmFtZShIVE1MTmFtZXM6Om9wdGlvbigpKSkgewogICAgICAgICAgICAgSFRNTE9wdGlvbkVs
ZW1lbnRJbXBsICpvcHRpb24gPSBzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudEltcGwqPihp
dGVtc1tpXSk7CiAgICAgICAgICAgICBpZiAob3B0aW9uLT5zZWxlY3RlZCgpKSB7CiAgICAgICAg
ICAgICAgICAgZW5jb2RlZF92YWx1ZXMuYXBwZW5kRGF0YShuYW1lKCksIG9wdGlvbi0+dmFsdWUo
KSk7CkBAIC0yOTU0LDcgKzI5NTMsNyBAQCBib29sIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6YXBw
ZW5kRm9ybURhCiAgICAgLy8gaW4gYW55IGNhc2UuIG90aGVyd2lzZSB3ZSBoYXZlIG5vIGNvbnNp
c3RlbmN5IHdpdGggdGhlIERPTSBpbnRlcmZhY2UuIEZJWE1FIQogICAgIC8vIHdlIHJldHVybiB0
aGUgZmlyc3Qgb25lIGlmIGl0IHdhcyBhIGNvbWJvYm94IHNlbGVjdAogICAgIGlmICghc3VjY2Vz
c2Z1bCAmJiAhbV9tdWx0aXBsZSAmJiBtX3NpemUgPD0gMSAmJiBpdGVtcy5zaXplKCkgJiYKLSAg
ICAgICAgKGl0ZW1zWzBdLT5pZCgpID09IElEX09QVElPTikgKSB7CisgICAgICAgIChpdGVtc1sw
XS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpKSkgewogICAgICAgICBIVE1MT3B0
aW9uRWxlbWVudEltcGwgKm9wdGlvbiA9IHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50SW1w
bCo+KGl0ZW1zWzBdKTsKICAgICAgICAgaWYgKG9wdGlvbi0+dmFsdWUoKS5pc051bGwoKSkKICAg
ICAgICAgICAgIGVuY29kZWRfdmFsdWVzLmFwcGVuZERhdGEobmFtZSgpLCBvcHRpb24tPnRleHQo
KS5zdHJpbmcoKS5zdHJpcFdoaXRlU3BhY2UoKSk7CkBAIC0yOTc3LDcgKzI5NzYsNyBAQCBpbnQg
SFRNTFNlbGVjdEVsZW1lbnRJbXBsOjpvcHRpb25Ub0xpc3RJCiAgICAgZm9yICg7CiAgICAgICAg
ICBvcHRpb25JbmRleDIgPCBpbnQoaXRlbXMuc2l6ZSgpKSAmJiBvcHRpb25JbmRleDIgPD0gb3B0
aW9uSW5kZXg7CiAgICAgICAgICBsaXN0SW5kZXgrKykgeyAvLyBub3QgYSB0eXBvIQotICAgICAg
ICBpZiAoaXRlbXNbbGlzdEluZGV4XS0+aWQoKSA9PSBJRF9PUFRJT04pCisgICAgICAgIGlmIChp
dGVtc1tsaXN0SW5kZXhdLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvcHRpb24oKSkpCiAgICAg
ICAgICAgICBvcHRpb25JbmRleDIrKzsKICAgICB9CiAgICAgbGlzdEluZGV4LS07CkBAIC0yOTg4
LDEzICsyOTg3LDEzIEBAIGludCBIVE1MU2VsZWN0RWxlbWVudEltcGw6Omxpc3RUb09wdGlvbkkK
IHsKICAgICBRTWVtQXJyYXk8SFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwqPiBpdGVtcyA9IGxp
c3RJdGVtcygpOwogICAgIGlmIChsaXN0SW5kZXggPCAwIHx8IGxpc3RJbmRleCA+PSBpbnQoaXRl
bXMuc2l6ZSgpKSB8fAotICAgICAgICBpdGVtc1tsaXN0SW5kZXhdLT5pZCgpICE9IElEX09QVElP
TikKKyAgICAgICAgIWl0ZW1zW2xpc3RJbmRleF0tPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9w
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgaW50IG9wdGlvbkluZGV4ID0gMDsg
Ly8gYWN0dWFsIGluZGV4IG9mIG9wdGlvbiBub3QgY291bnRpbmcgT1BUR1JPVVAgZW50cmllcyB0
aGF0IG1heSBiZSBpbiBsaXN0CiAgICAgaW50IGk7CiAgICAgZm9yIChpID0gMDsgaSA8IGxpc3RJ
bmRleDsgaSsrKQotICAgICAgICBpZiAoaXRlbXNbaV0tPmlkKCkgPT0gSURfT1BUSU9OKQorICAg
ICAgICBpZiAoaXRlbXNbaV0tPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9wdGlvbigpKSkKICAg
ICAgICAgICAgIG9wdGlvbkluZGV4Kys7CiAgICAgcmV0dXJuIG9wdGlvbkluZGV4OwogfQpAQCAt
MzAyMCwxMyArMzAxOSwxMyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6cmVjYWxjTGlz
dEl0CiAgICAgbV9saXN0SXRlbXMucmVzaXplKDApOwogICAgIEhUTUxPcHRpb25FbGVtZW50SW1w
bCogZm91bmRTZWxlY3RlZCA9IDA7CiAgICAgd2hpbGUoY3VycmVudCkgewotICAgICAgICBpZiAo
Y3VycmVudC0+aWQoKSA9PSBJRF9PUFRHUk9VUCAmJiBjdXJyZW50LT5maXJzdENoaWxkKCkpIHsK
KyAgICAgICAgaWYgKGN1cnJlbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvcHRncm91cCgpKSAm
JiBjdXJyZW50LT5maXJzdENoaWxkKCkpIHsKICAgICAgICAgICAgIC8vICMjIyB3aGF0IGlmIG9w
dGdyb3VwIGNvbnRhaW5zIGp1c3QgY29tbWVudHM/IGRvbid0IHdhbnQgb25lIG9mIG5vIG9wdGlv
bnMgaW4gaXQuLi4KICAgICAgICAgICAgIG1fbGlzdEl0ZW1zLnJlc2l6ZShtX2xpc3RJdGVtcy5z
aXplKCkrMSk7CiAgICAgICAgICAgICBtX2xpc3RJdGVtc1ttX2xpc3RJdGVtcy5zaXplKCktMV0g
PSBzdGF0aWNfY2FzdDxIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbCo+KGN1cnJlbnQpOwogICAg
ICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQtPmZpcnN0Q2hpbGQoKTsKICAgICAgICAgfQotICAg
ICAgICBpZiAoY3VycmVudC0+aWQoKSA9PSBJRF9PUFRJT04pIHsKKyAgICAgICAgaWYgKGN1cnJl
bnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvcHRpb24oKSkpIHsKICAgICAgICAgICAgIG1fbGlz
dEl0ZW1zLnJlc2l6ZShtX2xpc3RJdGVtcy5zaXplKCkrMSk7CiAgICAgICAgICAgICBtX2xpc3RJ
dGVtc1ttX2xpc3RJdGVtcy5zaXplKCktMV0gPSBzdGF0aWNfY2FzdDxIVE1MR2VuZXJpY0Zvcm1F
bGVtZW50SW1wbCo+KGN1cnJlbnQpOwogICAgICAgICAgICAgaWYgKCFmb3VuZFNlbGVjdGVkICYm
ICFtX211bHRpcGxlICYmIG1fc2l6ZSA8PSAxKSB7CkBAIC0zMDY4LDcgKzMwNjcsNyBAQCB2b2lk
IEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6cmVzZXQoKQogICAgIFFNZW1BcnJheTxIVE1MR2VuZXJp
Y0Zvcm1FbGVtZW50SW1wbCo+IGl0ZW1zID0gbGlzdEl0ZW1zKCk7CiAgICAgdWludCBpOwogICAg
IGZvciAoaSA9IDA7IGkgPCBpdGVtcy5zaXplKCk7IGkrKykgewotICAgICAgICBpZiAoaXRlbXNb
aV0tPmlkKCkgPT0gSURfT1BUSU9OKSB7CisgICAgICAgIGlmIChpdGVtc1tpXS0+aGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpKSB7CiAgICAgICAgICAgICBIVE1MT3B0aW9uRWxlbWVu
dEltcGwgKm9wdGlvbiA9IHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50SW1wbCo+KGl0ZW1z
W2ldKTsKICAgICAgICAgICAgIGJvb2wgc2VsZWN0ZWQgPSAoIW9wdGlvbi0+Z2V0QXR0cmlidXRl
KEFUVFJfU0VMRUNURUQpLmlzTnVsbCgpKTsKICAgICAgICAgICAgIG9wdGlvbi0+c2V0U2VsZWN0
ZWQoc2VsZWN0ZWQpOwpAQCAtMzA4Niw3ICszMDg1LDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVu
dEltcGw6Om5vdGlmeU9wdGlvbgogICAgICAgICBRTWVtQXJyYXk8SFRNTEdlbmVyaWNGb3JtRWxl
bWVudEltcGwqPiBpdGVtcyA9IGxpc3RJdGVtcygpOwogICAgICAgICB1aW50IGk7CiAgICAgICAg
IGZvciAoaSA9IDA7IGkgPCBpdGVtcy5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgaWYgKGl0
ZW1zW2ldLT5pZCgpID09IElEX09QVElPTikKKyAgICAgICAgICAgIGlmIChpdGVtc1tpXS0+aGFz
TG9jYWxOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpKQogICAgICAgICAgICAgICAgIHN0YXRpY19j
YXN0PEhUTUxPcHRpb25FbGVtZW50SW1wbCo+KGl0ZW1zW2ldKS0+bV9zZWxlY3RlZCA9IChpdGVt
c1tpXSA9PSBzZWxlY3RlZE9wdGlvbik7CiAgICAgICAgIH0KICAgICB9CkBAIC0zMTMzLDcgKzMx
MzIsNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6c2V0U2l6ZShsb25nCiAvLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCiAKIEhUTUxLZXlnZW5FbGVtZW50SW1wbDo6SFRNTEtleWdlbkVsZW1lbnRJ
bXBsKERvY3VtZW50UHRyKiBkb2MsIEhUTUxGb3JtRWxlbWVudEltcGwqIGYpCi0gICAgOiBIVE1M
U2VsZWN0RWxlbWVudEltcGwoZG9jLCBmKQorICAgIDogSFRNTFNlbGVjdEVsZW1lbnRJbXBsKEhU
TUxOYW1lczo6a2V5Z2VuKCksIGRvYywgZikKIHsKICAgICBRU3RyaW5nTGlzdCBrZXlzID0gS1NT
TEtleUdlbjo6c3VwcG9ydGVkS2V5U2l6ZXMoKTsKICAgICBmb3IgKFFTdHJpbmdMaXN0OjpJdGVy
YXRvciBpID0ga2V5cy5iZWdpbigpOyBpICE9IGtleXMuZW5kKCk7ICsraSkgewpAQCAtMzE0Mywx
MSArMzE0Miw2IEBAIEhUTUxLZXlnZW5FbGVtZW50SW1wbDo6SFRNTEtleWdlbkVsZW1lbnQKICAg
ICB9CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MS2V5Z2VuRWxlbWVudEltcGw6OmlkKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gSURfS0VZR0VOOwotfQotCiBET01TdHJpbmcgSFRNTEtleWdlbkVsZW1l
bnRJbXBsOjp0eXBlKCkgY29uc3QKIHsKICAgICByZXR1cm4gImtleWdlbiI7CkBAIC0zMjAyLDcg
KzMxOTYsNyBAQCBib29sIEhUTUxLZXlnZW5FbGVtZW50SW1wbDo6YXBwZW5kRm9ybURhCiAvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxPcHRHcm91cEVsZW1lbnRJbXBsOjpIVE1MT3B0R3JvdXBF
bGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmKQotICAg
IDogSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwoZG9jLCBmKQorICAgIDogSFRNTEdlbmVyaWNG
b3JtRWxlbWVudEltcGwoSFRNTE5hbWVzOjpvcHRncm91cCgpLCBkb2MsIGYpCiB7CiB9CiAKQEAg
LTMyMTUsMTEgKzMyMDksNiBAQCBib29sIEhUTUxPcHRHcm91cEVsZW1lbnRJbXBsOjppc0ZvY3Vz
YWJsCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTE9wdEdyb3VwRWxl
bWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfT1BUR1JPVVA7Ci19Ci0KIERP
TVN0cmluZyBIVE1MT3B0R3JvdXBFbGVtZW50SW1wbDo6dHlwZSgpIGNvbnN0CiB7CiAgICAgcmV0
dXJuICJvcHRncm91cCI7CkBAIC0zMjczLDcgKzMyNjIsNyBAQCB2b2lkIEhUTUxPcHRHcm91cEVs
ZW1lbnRJbXBsOjpwYXJzZU1hcHBlCiB2b2lkIEhUTUxPcHRHcm91cEVsZW1lbnRJbXBsOjpyZWNh
bGNTZWxlY3RPcHRpb25zKCkKIHsKICAgICBOb2RlSW1wbCAqc2VsZWN0ID0gcGFyZW50Tm9kZSgp
OwotICAgIHdoaWxlIChzZWxlY3QgJiYgc2VsZWN0LT5pZCgpICE9IElEX1NFTEVDVCkKKyAgICB3
aGlsZSAoc2VsZWN0ICYmICFzZWxlY3QtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzZWxlY3QoKSkp
CiAgICAgICAgIHNlbGVjdCA9IHNlbGVjdC0+cGFyZW50Tm9kZSgpOwogICAgIGlmIChzZWxlY3Qp
CiAgICAgICAgIHN0YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50SW1wbCo+KHNlbGVjdCktPnNl
dFJlY2FsY0xpc3RJdGVtcygpOwpAQCAtMzI5Miw3ICszMjgxLDcgQEAgdm9pZCBIVE1MT3B0R3Jv
dXBFbGVtZW50SW1wbDo6c2V0TGFiZWwoYwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MT3B0
aW9uRWxlbWVudEltcGw6OkhUTUxPcHRpb25FbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCBI
VE1MRm9ybUVsZW1lbnRJbXBsICpmKQotICAgIDogSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwo
ZG9jLCBmKQorICAgIDogSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwoSFRNTE5hbWVzOjpvcHRp
b24oKSwgZG9jLCBmKQogewogICAgIG1fc2VsZWN0ZWQgPSBmYWxzZTsKIH0KQEAgLTMzMDIsMTEg
KzMyOTEsNiBAQCBib29sIEhUTUxPcHRpb25FbGVtZW50SW1wbDo6aXNGb2N1c2FibGUoCiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTE9wdGlvbkVsZW1lbnRJbXBsOjpp
ZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX09QVElPTjsKLX0KLQogRE9NU3RyaW5nIEhUTUxP
cHRpb25FbGVtZW50SW1wbDo6dHlwZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuICJvcHRpb24iOwpA
QCAtMzM1Myw4ICszMzM3LDcgQEAgbG9uZyBIVE1MT3B0aW9uRWxlbWVudEltcGw6OmluZGV4KCkg
Y29ucwogICAgIGludCBsID0gaXRlbXMuY291bnQoKTsKICAgICBpbnQgb3B0aW9uSW5kZXggPSAw
OwogICAgIGZvcihpbnQgaSA9IDA7IGkgPCBsOyBpKyspIHsKLSAgICAgICAgaWYoaXRlbXNbaV0t
PmlkKCkgPT0gSURfT1BUSU9OKQotICAgICAgICB7CisgICAgICAgIGlmIChpdGVtc1tpXS0+aGFz
TG9jYWxOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpKSB7CiAgICAgICAgICAgICBpZiAoc3RhdGlj
X2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnRJbXBsKj4oaXRlbXNbaV0pID09IHRoaXMpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIG9wdGlvbkluZGV4OwogICAgICAgICAgICAgb3B0aW9uSW5kZXgrKzsK
QEAgLTM0MTksNyArMzQwMiw3IEBAIHZvaWQgSFRNTE9wdGlvbkVsZW1lbnRJbXBsOjpjaGlsZHJl
bkNoYW4KIEhUTUxTZWxlY3RFbGVtZW50SW1wbCAqSFRNTE9wdGlvbkVsZW1lbnRJbXBsOjpnZXRT
ZWxlY3QoKSBjb25zdAogewogICAgIE5vZGVJbXBsICpzZWxlY3QgPSBwYXJlbnROb2RlKCk7Ci0g
ICAgd2hpbGUgKHNlbGVjdCAmJiBzZWxlY3QtPmlkKCkgIT0gSURfU0VMRUNUKQorICAgIHdoaWxl
IChzZWxlY3QgJiYgIXNlbGVjdC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnNlbGVjdCgpKSkKICAg
ICAgICAgc2VsZWN0ID0gc2VsZWN0LT5wYXJlbnROb2RlKCk7CiAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PEhUTUxTZWxlY3RFbGVtZW50SW1wbCo+KHNlbGVjdCk7CiB9CkBAIC0zNDQ3LDcgKzM0MzAs
NyBAQCB2b2lkIEhUTUxPcHRpb25FbGVtZW50SW1wbDo6c2V0TGFiZWwoY29uCiAvLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCiAKIEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBsOjpIVE1MVGV4dEFyZWFFbGVtZW50
SW1wbChEb2N1bWVudFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmKQotICAgIDogSFRN
TEdlbmVyaWNGb3JtRWxlbWVudEltcGwoZG9jLCBmKSwgbV92YWx1ZUlzVmFsaWQoZmFsc2UpLCBt
X3ZhbHVlTWF0Y2hlc1JlbmRlcmVyKGZhbHNlKQorICAgIDogSFRNTEdlbmVyaWNGb3JtRWxlbWVu
dEltcGwoSFRNTE5hbWVzOjp0ZXh0YXJlYSgpLCBkb2MsIGYpLCBtX3ZhbHVlSXNWYWxpZChmYWxz
ZSksIG1fdmFsdWVNYXRjaGVzUmVuZGVyZXIoZmFsc2UpCiB7CiAgICAgLy8gRFREIHJlcXVpcmVz
IHJvd3MgJiBjb2xzIGJlIHNwZWNpZmllZCwgYnV0IHdlIHdpbGwgcHJvdmlkZSByZWFzb25hYmxl
IGRlZmF1bHRzCiAgICAgbV9yb3dzID0gMjsKQEAgLTM0NjAsMTEgKzM0NDMsNiBAQCBIVE1MVGV4
dEFyZWFFbGVtZW50SW1wbDo6fkhUTUxUZXh0QXJlYUVsCiAgICAgaWYgKGdldERvY3VtZW50KCkp
IGdldERvY3VtZW50KCktPmRlcmVnaXN0ZXJNYWludGFpbnNTdGF0ZSh0aGlzKTsKIH0KIAotTm9k
ZUltcGw6OklkIEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIElEX1RFWFRBUkVBOwotfQotCiBET01TdHJpbmcgSFRNTFRleHRBcmVhRWxlbWVudEltcGw6
OnR5cGUoKSBjb25zdAogewogICAgIHJldHVybiAidGV4dGFyZWEiOwpAQCAtMzcxNCwxNyArMzY5
MiwxMiBAQCB2b2lkIEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBsOjpzZXRSb3dzKGxvCiAvLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCiAKIEhUTUxJc0luZGV4RWxlbWVudEltcGw6OkhUTUxJc0luZGV4RWxlbWVu
dEltcGwoRG9jdW1lbnRQdHIgKmRvYywgSFRNTEZvcm1FbGVtZW50SW1wbCAqZikKLSAgICA6IEhU
TUxJbnB1dEVsZW1lbnRJbXBsKGRvYywgZikKKyAgICA6IEhUTUxJbnB1dEVsZW1lbnRJbXBsKEhU
TUxOYW1lczo6aXNpbmRleCgpLCBkb2MsIGYpCiB7CiAgICAgbV90eXBlID0gVEVYVDsKICAgICBz
ZXRPdmVycmlkZU5hbWUoImlzaW5kZXgiKTsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxJc0luZGV4
RWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfSVNJTkRFWDsKLX0KLQog
dm9pZCBIVE1MSXNJbmRleEVsZW1lbnRJbXBsOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRB
dHRyaWJ1dGVJbXBsKiBhdHRyKQogewogICAgIHN3aXRjaChhdHRyLT5pZCgpKQpJbmRleDoga2h0
bWwvaHRtbC9odG1sX2Zvcm1pbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dl
YkNvcmUva2h0bWwvaHRtbC9odG1sX2Zvcm1pbXBsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
NzUKZGlmZiAtdSAtcCAtcjEuNzUga2h0bWwvaHRtbC9odG1sX2Zvcm1pbXBsLmgKLS0tIGtodG1s
L2h0bWwvaHRtbF9mb3JtaW1wbC5oCTI0IEp1biAyMDA1IDA1OjUzOjI3IC0wMDAwCTEuNzUKKysr
IGtodG1sL2h0bWwvaHRtbF9mb3JtaW1wbC5oCTggSnVsIDIwMDUgMDM6MDQ6MTUgLTAwMDAKQEAg
LTY3LDcgKzY3LDggQEAgcHVibGljOgogICAgIEhUTUxGb3JtRWxlbWVudEltcGwoRG9jdW1lbnRQ
dHIgKmRvYyk7CiAgICAgdmlydHVhbCB+SFRNTEZvcm1FbGVtZW50SW1wbCgpOwogCi0gICAgdmly
dHVhbCBJZCBpZCgpIGNvbnN0OworICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1
aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9CisgICAgdmlydHVh
bCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAzOyB9CiAKICAgICB2aXJ0dWFsIHZv
aWQgYXR0YWNoKCk7CiAgICAgdmlydHVhbCB2b2lkIGRldGFjaCgpOwpAQCAtMTYxLDkgKzE2Miwx
MiBAQCBjbGFzcyBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbCA6IHB1YmxpCiAgICAgZnJpZW5k
IGNsYXNzIGtodG1sOjpSZW5kZXJGb3JtRWxlbWVudDsKIAogcHVibGljOgotICAgIEhUTUxHZW5l
cmljRm9ybUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIEhUTUxGb3JtRWxlbWVudEltcGwg
KmYgPSAwKTsKKyAgICBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbChjb25zdCBRdWFsaWZpZWRO
YW1lJiB0YWdOYW1lLCBEb2N1bWVudFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmID0g
MCk7CiAgICAgdmlydHVhbCB+SFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwoKTsKIAorICAgIHZp
cnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRh
Z1N0YXR1c1JlcXVpcmVkOyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7
IHJldHVybiAxOyB9CisKICAgICBIVE1MRm9ybUVsZW1lbnRJbXBsICpmb3JtKCkgeyByZXR1cm4g
bV9mb3JtOyB9CiAKICAgICB2aXJ0dWFsIERPTVN0cmluZyB0eXBlKCkgY29uc3QgPSAwOwpAQCAt
MjM1LDcgKzIzOSw2IEBAIGNsYXNzIEhUTUxCdXR0b25FbGVtZW50SW1wbCA6IHB1YmxpYyBIVE0K
IHsKIHB1YmxpYzoKICAgICBIVE1MQnV0dG9uRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywg
SFRNTEZvcm1FbGVtZW50SW1wbCAqZiA9IDApOwotCiAgICAgdmlydHVhbCB+SFRNTEJ1dHRvbkVs
ZW1lbnRJbXBsKCk7CiAKICAgICBlbnVtIHR5cGVFbnVtIHsKQEAgLTI0NCw3ICsyNDcsNiBAQCBw
dWJsaWM6CiAgICAgICAgIEJVVFRPTgogICAgIH07CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29u
c3Q7CiAgICAgRE9NU3RyaW5nIHR5cGUoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9pZCBwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICphdHRyKTsKQEAgLTI4MCwxMSAr
MjgyLDExIEBAIGNsYXNzIEhUTUxGaWVsZFNldEVsZW1lbnRJbXBsIDogcHVibGljIEgKIHsKIHB1
YmxpYzoKICAgICBIVE1MRmllbGRTZXRFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCBIVE1M
Rm9ybUVsZW1lbnRJbXBsICpmID0gMCk7Ci0KICAgICB2aXJ0dWFsIH5IVE1MRmllbGRTZXRFbGVt
ZW50SW1wbCgpOwotCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwogICAgIAorICAgIHZpcnR1
YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMzsgfQorCXZpcnR1YWwgYm9vbCBj
aGVja0RURChjb25zdCBOb2RlSW1wbCogbmV3Q2hpbGQpOworCiAgICAgdmlydHVhbCBib29sIGlz
Rm9jdXNhYmxlKCkgY29uc3Q7CiAgICAgCiAgICAgdmlydHVhbCBraHRtbDo6UmVuZGVyT2JqZWN0
ICpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSAqLCBraHRtbDo6UmVuZGVyU3R5bGUgKik7CkBA
IC0zMjYsOSArMzI4LDEyIEBAIHB1YmxpYzoKICAgICB9OwogCiAgICAgSFRNTElucHV0RWxlbWVu
dEltcGwoRG9jdW1lbnRQdHIgKmRvYywgSFRNTEZvcm1FbGVtZW50SW1wbCAqZiA9IDApOworICAg
IEhUTUxJbnB1dEVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3Vt
ZW50UHRyICpkb2MsIEhUTUxGb3JtRWxlbWVudEltcGwgKmYgPSAwKTsKICAgICB2aXJ0dWFsIH5I
VE1MSW5wdXRFbGVtZW50SW1wbCgpOworICAgIHZvaWQgaW5pdCgpOwogCi0gICAgdmlydHVhbCBJ
ZCBpZCgpIGNvbnN0OworICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVu
dCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c0ZvcmJpZGRlbjsgfQorICAgIHZpcnR1YWwgaW50
IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMDsgfQogCiAgICAgdmlydHVhbCBib29sIGlz
RW51bWVyYXRhYmxlKCkgY29uc3QgeyByZXR1cm4gaW5wdXRUeXBlKCkgIT0gSU1BR0U7IH0KIApA
QCAtNDU5LDkgKzQ2NCw5IEBAIHB1YmxpYzoKICAgICBIVE1MTGFiZWxFbGVtZW50SW1wbChEb2N1
bWVudFB0ciAqZG9jKTsKICAgICB2aXJ0dWFsIH5IVE1MTGFiZWxFbGVtZW50SW1wbCgpOwogCisg
ICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiA1OyB9CisKICAgICB2
aXJ0dWFsIGJvb2wgaXNGb2N1c2FibGUoKSBjb25zdDsKLSAgICAKLSAgICB2aXJ0dWFsIElkIGlk
KCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVk
QXR0cmlidXRlSW1wbCAqYXR0cik7CiAKQEAgLTQ5Niw3ICs1MDEsNiBAQCBwdWJsaWM6CiAKICAg
ICB2aXJ0dWFsIGJvb2wgaXNGb2N1c2FibGUoKSBjb25zdDsKICAgICAKLSAgICB2aXJ0dWFsIElk
IGlkKCkgY29uc3Q7CiAgICAgdmlydHVhbCBraHRtbDo6UmVuZGVyT2JqZWN0ICpjcmVhdGVSZW5k
ZXJlcihSZW5kZXJBcmVuYSAqLCBraHRtbDo6UmVuZGVyU3R5bGUgKik7CiAKICAgICB2aXJ0dWFs
IERPTVN0cmluZyB0eXBlKCkgY29uc3Q7CkBAIC01MjUsOSArNTI5LDEzIEBAIGNsYXNzIEhUTUxT
ZWxlY3RFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE0KIAogcHVibGljOgogICAgIEhUTUxTZWxlY3RF
bGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmID0gMCk7
CisgICAgSFRNTFNlbGVjdEVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUs
IERvY3VtZW50UHRyICpkb2MsIEhUTUxGb3JtRWxlbWVudEltcGwgKmYgPSAwKTsKICAgICB+SFRN
TFNlbGVjdEVsZW1lbnRJbXBsKCk7CisgICAgdm9pZCBpbml0KCk7CisKKyAgICB2aXJ0dWFsIGlu
dCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDY7IH0KKwl2aXJ0dWFsIGJvb2wgY2hlY2tE
VEQoY29uc3QgTm9kZUltcGwqIG5ld0NoaWxkKTsKIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25z
dDsKICAgICBET01TdHJpbmcgdHlwZSgpIGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lkIHJlY2Fs
Y1N0eWxlKCBTdHlsZUNoYW5nZSApOwpAQCAtNjE0LDcgKzYyMiw3IEBAIGNsYXNzIEhUTUxLZXln
ZW5FbGVtZW50SW1wbCA6IHB1YmxpYyBIVE0KIHB1YmxpYzoKICAgICBIVE1MS2V5Z2VuRWxlbWVu
dEltcGwoRG9jdW1lbnRQdHIgKmRvYywgSFRNTEZvcm1FbGVtZW50SW1wbCAqZiA9IDApOwogCi0g
ICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkg
Y29uc3QgeyByZXR1cm4gMDsgfQogCiAgICAgRE9NU3RyaW5nIHR5cGUoKSBjb25zdDsKIApAQCAt
NjM2LDcgKzY0NCw4IEBAIHB1YmxpYzoKICAgICBIVE1MT3B0R3JvdXBFbGVtZW50SW1wbChEb2N1
bWVudFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmID0gMCk7CiAgICAgdmlydHVhbCB+
SFRNTE9wdEdyb3VwRWxlbWVudEltcGwoKTsKIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsK
Kwl2aXJ0dWFsIGJvb2wgY2hlY2tEVEQoY29uc3QgTm9kZUltcGwqIG5ld0NoaWxkKSB7IHJldHVy
biBuZXdDaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9wdGlvbigpKTsgfQorCiAgICAgRE9N
U3RyaW5nIHR5cGUoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgYm9vbCBpc0ZvY3VzYWJsZSgpIGNv
bnN0OwpAQCAtNjY0LDkgKzY3MywxMiBAQCBjbGFzcyBIVE1MT3B0aW9uRWxlbWVudEltcGwgOiBw
dWJsaWMgSFRNCiBwdWJsaWM6CiAgICAgSFRNTE9wdGlvbkVsZW1lbnRJbXBsKERvY3VtZW50UHRy
ICpkb2MsIEhUTUxGb3JtRWxlbWVudEltcGwgKmYgPSAwKTsKIAorICAgIHZpcnR1YWwgSFRNTFRh
Z1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c09wdGlv
bmFsOyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAyOyB9
CisJdmlydHVhbCBib29sIGNoZWNrRFREKGNvbnN0IE5vZGVJbXBsKiBuZXdDaGlsZCkgeyByZXR1
cm4gbmV3Q2hpbGQtPmlzVGV4dE5vZGUoKTsgfQorCiAgICAgdmlydHVhbCBib29sIGlzRm9jdXNh
YmxlKCkgY29uc3Q7Ci0gICAgCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OworCiAgICAgRE9N
U3RyaW5nIHR5cGUoKSBjb25zdDsKIAogICAgIERPTVN0cmluZyB0ZXh0KCkgY29uc3Q7CkBAIC03
MTQsMTAgKzcyNiw5IEBAIHB1YmxpYzoKICAgICBIVE1MVGV4dEFyZWFFbGVtZW50SW1wbChEb2N1
bWVudFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmID0gMCk7CiAgICAgfkhUTUxUZXh0
QXJlYUVsZW1lbnRJbXBsKCk7CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CisJdmlydHVh
bCBib29sIGNoZWNrRFREKGNvbnN0IE5vZGVJbXBsKiBuZXdDaGlsZCkgeyByZXR1cm4gbmV3Q2hp
bGQtPmlzVGV4dE5vZGUoKTsgfQogCiAgICAgbG9uZyBjb2xzKCkgY29uc3QgeyByZXR1cm4gbV9j
b2xzOyB9Ci0KICAgICBsb25nIHJvd3MoKSBjb25zdCB7IHJldHVybiBtX3Jvd3M7IH0KIAogICAg
IFdyYXBNZXRob2Qgd3JhcCgpIGNvbnN0IHsgcmV0dXJuIG1fd3JhcDsgfQpAQCAtNzg1LDcgKzc5
Niw4IEBAIGNsYXNzIEhUTUxJc0luZGV4RWxlbWVudEltcGwgOiBwdWJsaWMgSFQKIHB1YmxpYzoK
ICAgICBIVE1MSXNJbmRleEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIEhUTUxGb3JtRWxl
bWVudEltcGwgKmYgPSAwKTsKIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdT
dGF0dXNGb3JiaWRkZW47IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsg
cmV0dXJuIDA7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBw
ZWRBdHRyaWJ1dGVJbXBsICphdHRyKTsKIApJbmRleDoga2h0bWwvaHRtbC9odG1sX2hlYWRpbXBs
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9odG1sL2h0
bWxfaGVhZGltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjUwCmRpZmYgLXUgLXAgLXIx
LjUwIGtodG1sL2h0bWwvaHRtbF9oZWFkaW1wbC5jcHAKLS0tIGtodG1sL2h0bWwvaHRtbF9oZWFk
aW1wbC5jcHAJMjIgSnVuIDIwMDUgMTg6MjI6MDEgLTAwMDAJMS41MAorKysga2h0bWwvaHRtbC9o
dG1sX2hlYWRpbXBsLmNwcAk4IEp1bCAyMDA1IDAzOjA0OjE1IC0wMDAwCkBAIC00Niw3ICs0Niw3
IEBAIHVzaW5nIG5hbWVzcGFjZSBET007CiB1c2luZyBuYW1lc3BhY2Uga2h0bWw7CiAKIEhUTUxC
YXNlRWxlbWVudEltcGw6OkhUTUxCYXNlRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAg
ICA6IEhUTUxFbGVtZW50SW1wbChkb2MpCisgICAgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVz
OjpiYXNlKCksIGRvYykKIHsKIH0KIApAQCAtNTQsMTEgKzU0LDYgQEAgSFRNTEJhc2VFbGVtZW50
SW1wbDo6fkhUTUxCYXNlRWxlbWVudEltcAogewogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTEJhc2VF
bGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9CQVNFOwotfQotCiB2b2lk
IEhUTUxCYXNlRWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0
ZUltcGwgKmF0dHIpCiB7CiAgICAgc3dpdGNoKGF0dHItPmlkKCkpCkBAIC0xMTksNyArMTE0LDcg
QEAgdm9pZCBIVE1MQmFzZUVsZW1lbnRJbXBsOjpzZXRUYXJnZXQoY29ucwogLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQogCiBIVE1MTGlua0VsZW1lbnRJbXBsOjpIVE1MTGlua0VsZW1lbnRJbXBsKERvY3Vt
ZW50UHRyICpkb2MpCi0gICAgOiBIVE1MRWxlbWVudEltcGwoZG9jKQorICAgIDogSFRNTEVsZW1l
bnRJbXBsKEhUTUxOYW1lczo6bGluaygpLCBkb2MpCiB7CiAgICAgbV9zaGVldCA9IDA7CiAgICAg
bV9sb2FkaW5nID0gZmFsc2U7CkBAIC0xMzQsMTEgKzEyOSw2IEBAIEhUTUxMaW5rRWxlbWVudElt
cGw6On5IVE1MTGlua0VsZW1lbnRJbXAKICAgICBpZihtX2NhY2hlZFNoZWV0KSBtX2NhY2hlZFNo
ZWV0LT5kZXJlZih0aGlzKTsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxMaW5rRWxlbWVudEltcGw6
OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfTElOSzsKLX0KLQogdm9pZCBIVE1MTGlua0Vs
ZW1lbnRJbXBsOjpzZXREaXNhYmxlZFN0YXRlKGJvb2wgX2Rpc2FibGVkKQogewogICAgIGludCBv
bGREaXNhYmxlZFN0YXRlID0gbV9kaXNhYmxlZFN0YXRlOwpAQCAtNDIzLDcgKzQxMyw3IEBAIHZv
aWQgSFRNTExpbmtFbGVtZW50SW1wbDo6c2V0VHlwZShjb25zdCAKIAogLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQogCi1IVE1MTWV0YUVsZW1lbnRJbXBsOjpIVE1MTWV0YUVsZW1lbnRJbXBsKERvY3VtZW50
UHRyICpkb2MpIDogSFRNTEVsZW1lbnRJbXBsKGRvYykKK0hUTUxNZXRhRWxlbWVudEltcGw6OkhU
TUxNZXRhRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykgOiBIVE1MRWxlbWVudEltcGwoSFRN
TE5hbWVzOjptZXRhKCksIGRvYykKIHsKIH0KIApAQCAtNDMxLDExICs0MjEsNiBAQCBIVE1MTWV0
YUVsZW1lbnRJbXBsOjp+SFRNTE1ldGFFbGVtZW50SW1wCiB7CiB9CiAKLU5vZGVJbXBsOjpJZCBI
VE1MTWV0YUVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX01FVEE7Ci19
Ci0KIHZvaWQgSFRNTE1ldGFFbGVtZW50SW1wbDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVk
QXR0cmlidXRlSW1wbCAqYXR0cikKIHsKICAgICBzd2l0Y2goYXR0ci0+aWQoKSkKQEAgLTUxMiw3
ICs0OTcsNyBAQCB2b2lkIEhUTUxNZXRhRWxlbWVudEltcGw6OnNldFNjaGVtZShjb25zCiAvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxTY3JpcHRFbGVtZW50SW1wbDo6SFRNTFNjcmlwdEVsZW1l
bnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0gICAgOiBIVE1MRWxlbWVudEltcGwoZG9jKSwgbV9j
YWNoZWRTY3JpcHQoMCksIG1fY3JlYXRlZEJ5UGFyc2VyKGZhbHNlKSwgbV9ldmFsdWF0ZWQoZmFs
c2UpCisgICAgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjpzY3JpcHQoKSwgZG9jKSwgbV9j
YWNoZWRTY3JpcHQoMCksIG1fY3JlYXRlZEJ5UGFyc2VyKGZhbHNlKSwgbV9ldmFsdWF0ZWQoZmFs
c2UpCiB7CiB9CiAKQEAgLTUyMiwxMSArNTA3LDYgQEAgSFRNTFNjcmlwdEVsZW1lbnRJbXBsOjp+
SFRNTFNjcmlwdEVsZW1lbgogICAgICAgICBtX2NhY2hlZFNjcmlwdC0+ZGVyZWYodGhpcyk7CiB9
CiAKLU5vZGVJbXBsOjpJZCBIVE1MU2NyaXB0RWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gSURfU0NSSVBUOwotfQotCiBib29sIEhUTUxTY3JpcHRFbGVtZW50SW1wbDo6aXNV
UkxBdHRyaWJ1dGUoQXR0cmlidXRlSW1wbCAqYXR0cikgY29uc3QKIHsKICAgICByZXR1cm4gYXR0
ci0+aWQoKSA9PSBBVFRSX1NSQzsKQEAgLTY5Nyw3ICs2NzcsNyBAQCB2b2lkIEhUTUxTY3JpcHRF
bGVtZW50SW1wbDo6c2V0VHlwZShjb25zCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSFRNTFN0
eWxlRWxlbWVudEltcGw6OkhUTUxTdHlsZUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpIDog
SFRNTEVsZW1lbnRJbXBsKGRvYykKK0hUTUxTdHlsZUVsZW1lbnRJbXBsOjpIVE1MU3R5bGVFbGVt
ZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKSA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6OnN0
eWxlKCksIGRvYykKIHsKICAgICBtX3NoZWV0ID0gMDsKICAgICBtX2xvYWRpbmcgPSBmYWxzZTsK
QEAgLTcwOCwxMSArNjg4LDYgQEAgSFRNTFN0eWxlRWxlbWVudEltcGw6On5IVE1MU3R5bGVFbGVt
ZW50SQogICAgIGlmKG1fc2hlZXQpIG1fc2hlZXQtPmRlcmVmKCk7CiB9CiAKLU5vZGVJbXBsOjpJ
ZCBIVE1MU3R5bGVFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9TVFlM
RTsKLX0KLQogLy8gb3RoZXIgc3R1ZmYuLi4KIHZvaWQgSFRNTFN0eWxlRWxlbWVudEltcGw6OnBh
cnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIpCiB7CkBAIC04MjQs
NyArNzk5LDcgQEAgdm9pZCBIVE1MU3R5bGVFbGVtZW50SW1wbDo6c2V0VHlwZShjb25zdAogLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MVGl0bGVFbGVtZW50SW1wbDo6SFRNTFRpdGxlRWxlbWVu
dEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50SW1wbChkb2MpLCBtX3Rp
dGxlKCIiKQorICAgIDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6dGl0bGUoKSwgZG9jKSwg
bV90aXRsZSgiIikKIHsKIH0KIApAQCAtODMyLDExICs4MDcsNiBAQCBIVE1MVGl0bGVFbGVtZW50
SW1wbDo6fkhUTUxUaXRsZUVsZW1lbnRJCiB7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MVGl0bGVF
bGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9USVRMRTsKLX0KLQogdm9p
ZCBIVE1MVGl0bGVFbGVtZW50SW1wbDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKQogewogICAgIEhU
TUxFbGVtZW50SW1wbDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKSW5kZXg6IGtodG1sL2h0bWwv
aHRtbF9oZWFkaW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2to
dG1sL2h0bWwvaHRtbF9oZWFkaW1wbC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIwCmRpZmYg
LXUgLXAgLXIxLjIwIGtodG1sL2h0bWwvaHRtbF9oZWFkaW1wbC5oCi0tLSBraHRtbC9odG1sL2h0
bWxfaGVhZGltcGwuaAkxOSBKdW4gMjAwNSAwNTo0NDoyOCAtMDAwMAkxLjIwCisrKyBraHRtbC9o
dG1sL2h0bWxfaGVhZGltcGwuaAk4IEp1bCAyMDA1IDAzOjA0OjE1IC0wMDAwCkBAIC00OSwxMCAr
NDksMTIgQEAgcHVibGljOgogICAgIEhUTUxCYXNlRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRv
Yyk7CiAgICAgfkhUTUxCYXNlRWxlbWVudEltcGwoKTsKIAorICAgIHZpcnR1YWwgSFRNTFRhZ1N0
YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c0ZvcmJpZGRl
bjsgfQorICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMDsgfQor
CiAgICAgRE9NU3RyaW5nIGhyZWYoKSBjb25zdCB7IHJldHVybiBtX2hyZWY7IH0KICAgICBET01T
dHJpbmcgdGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXQ7IH0KIAotICAgIHZpcnR1YWwg
SWQgaWQoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFw
cGVkQXR0cmlidXRlSW1wbCAqYXR0cik7CiAgICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b0Rv
Y3VtZW50KCk7CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZWRGcm9tRG9jdW1lbnQoKTsKQEAgLTc3
LDcgKzc5LDggQEAgcHVibGljOgogICAgIEhUTUxMaW5rRWxlbWVudEltcGwoRG9jdW1lbnRQdHIg
KmRvYyk7CiAgICAgfkhUTUxMaW5rRWxlbWVudEltcGwoKTsKIAotICAgIHZpcnR1YWwgSWQgaWQo
KSBjb25zdDsKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBj
b25zdCB7IHJldHVybiBUYWdTdGF0dXNGb3JiaWRkZW47IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQ
cmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KIAogICAgIGJvb2wgZGlzYWJsZWQoKSBjb25z
dDsKICAgICB2b2lkIHNldERpc2FibGVkKGJvb2wpOwpAQCAtMTUyLDEwICsxNTUsMTEgQEAgY2xh
c3MgSFRNTE1ldGFFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MRQogewogcHVibGljOgogICAgIEhU
TUxNZXRhRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYyk7Ci0KICAgICB+SFRNTE1ldGFFbGVt
ZW50SW1wbCgpOwogCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OworICAgIHZpcnR1YWwgSFRN
TFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c0Zv
cmJpZGRlbjsgfQorICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4g
MDsgfQorCiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJp
YnV0ZUltcGwgKmF0dHIpOwogICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9Eb2N1bWVudCgp
OwogCkBAIC0xODUsMTMgKzE4OSwxNyBAQCBjbGFzcyBIVE1MU2NyaXB0RWxlbWVudEltcGwgOiBw
dWJsaWMgSFRNCiBwdWJsaWM6CiAgICAgSFRNTFNjcmlwdEVsZW1lbnRJbXBsKERvY3VtZW50UHRy
ICpkb2MpOwogICAgIH5IVE1MU2NyaXB0RWxlbWVudEltcGwoKTsKLSAgICAKKworICAgIHZpcnR1
YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0
YXR1c1JlcXVpcmVkOyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJl
dHVybiAxOyB9CisJdmlydHVhbCBib29sIGNoZWNrRFREKGNvbnN0IE5vZGVJbXBsKiBuZXdDaGls
ZCkgeyByZXR1cm4gbmV3Q2hpbGQtPmlzVGV4dE5vZGUoKTsgfQorCiAgICAgdmlydHVhbCB2b2lk
IGluc2VydGVkSW50b0RvY3VtZW50KCk7CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZWRGcm9tRG9j
dW1lbnQoKTsKICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5RmluaXNoZWQoa2h0bWw6OkNhY2hlZE9i
amVjdCAqZmluaXNoZWRPYmopOworCiAgICAgdmlydHVhbCB2b2lkIGNoaWxkcmVuQ2hhbmdlZCgp
OwotICAgIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKKwogICAgIHZpcnR1YWwgYm9vbCBp
c1VSTEF0dHJpYnV0ZShBdHRyaWJ1dGVJbXBsICphdHRyKSBjb25zdDsKIAogICAgIHZvaWQgc2V0
Q3JlYXRlZEJ5UGFyc2VyKGJvb2wgY3JlYXRlZEJ5UGFyc2VyKSB7IG1fY3JlYXRlZEJ5UGFyc2Vy
ID0gY3JlYXRlZEJ5UGFyc2VyOyB9CkBAIC0yMzMsNyArMjQxLDkgQEAgcHVibGljOgogICAgIEhU
TUxTdHlsZUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpOwogICAgIH5IVE1MU3R5bGVFbGVt
ZW50SW1wbCgpOwogCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OworICAgIHZpcnR1YWwgSFRN
TFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1Jl
cXVpcmVkOyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAx
OyB9CisJdmlydHVhbCBib29sIGNoZWNrRFREKGNvbnN0IE5vZGVJbXBsKiBuZXdDaGlsZCkgeyBy
ZXR1cm4gbmV3Q2hpbGQtPmlzVGV4dE5vZGUoKTsgfQogCiAgICAgU3R5bGVTaGVldEltcGwgKnNo
ZWV0KCkgY29uc3QgeyByZXR1cm4gbV9zaGVldDsgfQogCkBAIC0yNjgsMTAgKzI3OCw5IEBAIGNs
YXNzIEhUTUxUaXRsZUVsZW1lbnRJbXBsIDogcHVibGljIEhUTUwKIHsKIHB1YmxpYzoKICAgICBI
VE1MVGl0bGVFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKTsKLQogICAgIH5IVE1MVGl0bGVF
bGVtZW50SW1wbCgpOwogCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OworCXZpcnR1YWwgYm9v
bCBjaGVja0RURChjb25zdCBOb2RlSW1wbCogbmV3Q2hpbGQpIHsgcmV0dXJuIG5ld0NoaWxkLT5p
c1RleHROb2RlKCk7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9Eb2N1bWVudCgp
OwogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkRnJvbURvY3VtZW50KCk7CkluZGV4OiBraHRtbC9o
dG1sL2h0bWxfaW1hZ2VpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2Vi
Q29yZS9raHRtbC9odG1sL2h0bWxfaW1hZ2VpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS40MwpkaWZmIC11IC1wIC1yMS40MyBraHRtbC9odG1sL2h0bWxfaW1hZ2VpbXBsLmNwcAotLS0g
a2h0bWwvaHRtbC9odG1sX2ltYWdlaW1wbC5jcHAJMjEgSnVuIDIwMDUgMjI6Mjc6NTUgLTAwMDAJ
MS40MworKysga2h0bWwvaHRtbC9odG1sX2ltYWdlaW1wbC5jcHAJOCBKdWwgMjAwNSAwMzowNDox
NiAtMDAwMApAQCAtNTEsNyArNTEsNyBAQAogdXNpbmcgbmFtZXNwYWNlIERPTTsKIHVzaW5nIG5h
bWVzcGFjZSBraHRtbDsKIAotLy8jZGVmaW5lIElOU1RSVU1FTlRfTEFZT1VUX1NDSEVEVUxJTkcg
MQorLy8gI2RlZmluZSBJTlNUUlVNRU5UX0xBWU9VVF9TQ0hFRFVMSU5HIDEKIAogSFRNTEltYWdl
TG9hZGVyOjpIVE1MSW1hZ2VMb2FkZXIoRWxlbWVudEltcGwqIGVsdCkKIDptX2VsZW1lbnQoZWx0
KSwgbV9pbWFnZSgwKSwgbV9maXJlZExvYWQodHJ1ZSksIG1faW1hZ2VDb21wbGV0ZSh0cnVlKQpA
QCAtNzUsNyArNzUsNyBAQCB2b2lkIEhUTUxJbWFnZUxvYWRlcjo6dXBkYXRlRnJvbUVsZW1lbnQo
CiAgICAgICAgIHJldHVybjsKIAogICAgIEF0b21pY1N0cmluZyBhdHRyOwotICAgIGlmIChlbGVt
ZW50KCktPmlkKCkgPT0gSURfT0JKRUNUKQorICAgIGlmIChlbGVtZW50KCktPmhhc0xvY2FsTmFt
ZShIVE1MTmFtZXM6Om9iamVjdCgpKSkKICAgICAgICAgYXR0ciA9IGVsZW1lbnQoKS0+Z2V0QXR0
cmlidXRlKEFUVFJfREFUQSk7CiAgICAgZWxzZQogICAgICAgICBhdHRyID0gZWxlbWVudCgpLT5n
ZXRBdHRyaWJ1dGUoQVRUUl9TUkMpOwpAQCAtODYsNiArODYsMTAgQEAgdm9pZCBIVE1MSW1hZ2VM
b2FkZXI6OnVwZGF0ZUZyb21FbGVtZW50KAogICAgICAgICBuZXdJbWFnZSA9IGVsZW1lbnQoKS0+
Z2V0RG9jdW1lbnQoKS0+ZG9jTG9hZGVyKCktPnJlcXVlc3RJbWFnZShraHRtbDo6cGFyc2VVUkwo
YXR0cikpOwogCiAgICAgaWYgKG5ld0ltYWdlICE9IG1faW1hZ2UpIHsKKyNpZmRlZiBJTlNUUlVN
RU5UX0xBWU9VVF9TQ0hFRFVMSU5HCisgICAgICAgIGlmICghZG9jdW1lbnQtPm93bmVyRWxlbWVu
dCgpICYmIG5ld0ltYWdlKQorICAgICAgICAgICAgcHJpbnRmKCJJbWFnZSByZXF1ZXN0ZWQgYXQg
JWRcbiIsIGVsZW1lbnQoKS0+Z2V0RG9jdW1lbnQoKS0+ZWxhcHNlZFRpbWUoKSk7CisjZW5kaWYK
ICAgICAgICAgbV9maXJlZExvYWQgPSBmYWxzZTsKICAgICAgICAgbV9pbWFnZUNvbXBsZXRlID0g
ZmFsc2U7CiAgICAgICAgIENhY2hlZEltYWdlKiBvbGRJbWFnZSA9IG1faW1hZ2U7CkBAIC0xMzMs
MjEgKzEzNywyMSBAQCB2b2lkIEhUTUxJbWFnZUxvYWRlcjo6bm90aWZ5RmluaXNoZWQoQ2FjCiAv
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxJbWFnZUVsZW1lbnRJbXBsOjpIVE1MSW1hZ2VFbGVt
ZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmKQotICAgIDog
SFRNTEVsZW1lbnRJbXBsKGRvYyksIG1faW1hZ2VMb2FkZXIodGhpcyksIGlzbWFwKGZhbHNlKSwg
bV9mb3JtKGYpCisgICAgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjppbWcoKSwgZG9jKSwg
bV9pbWFnZUxvYWRlcih0aGlzKSwgaXNtYXAoZmFsc2UpLCBtX2Zvcm0oZikKIHsKICAgICBpZiAo
bV9mb3JtKQogICAgICAgICBtX2Zvcm0tPnJlZ2lzdGVySW1nRWxlbWVudCh0aGlzKTsKIH0KIAot
SFRNTEltYWdlRWxlbWVudEltcGw6On5IVE1MSW1hZ2VFbGVtZW50SW1wbCgpCitIVE1MSW1hZ2VF
bGVtZW50SW1wbDo6SFRNTEltYWdlRWxlbWVudEltcGwoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFn
TmFtZSwgRG9jdW1lbnRQdHIgKmRvYykKKyAgICA6IEhUTUxFbGVtZW50SW1wbCh0YWdOYW1lLCBk
b2MpLCBtX2ltYWdlTG9hZGVyKHRoaXMpLCBpc21hcChmYWxzZSksIG1fZm9ybSgwKQogewotICAg
IGlmIChtX2Zvcm0pCi0gICAgICAgIG1fZm9ybS0+cmVtb3ZlSW1nRWxlbWVudCh0aGlzKTsKIH0K
IAotTm9kZUltcGw6OklkIEhUTUxJbWFnZUVsZW1lbnRJbXBsOjppZCgpIGNvbnN0CitIVE1MSW1h
Z2VFbGVtZW50SW1wbDo6fkhUTUxJbWFnZUVsZW1lbnRJbXBsKCkKIHsKLSAgICByZXR1cm4gSURf
SU1HOworICAgIGlmIChtX2Zvcm0pCisgICAgICAgIG1fZm9ybS0+cmVtb3ZlSW1nRWxlbWVudCh0
aGlzKTsKIH0KIAogYm9vbCBIVE1MSW1hZ2VFbGVtZW50SW1wbDo6bWFwVG9FbnRyeShOb2RlSW1w
bDo6SWQgYXR0ciwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3QKQEAgLTUyOCw3
ICs1MzIsNyBAQCBsb25nIEhUTUxJbWFnZUVsZW1lbnRJbXBsOjp5KCkgY29uc3QKIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KIAogSFRNTE1hcEVsZW1lbnRJbXBsOjpIVE1MTWFwRWxlbWVudEltcGwoRG9j
dW1lbnRQdHIgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50SW1wbChkb2MpCisgICAgOiBIVE1MRWxl
bWVudEltcGwoSFRNTE5hbWVzOjptYXAoKSwgZG9jKQogewogfQogCkBAIC01MzgsOSArNTQyLDEx
IEBAIEhUTUxNYXBFbGVtZW50SW1wbDo6fkhUTUxNYXBFbGVtZW50SW1wbCgKICAgICAgICAgZ2V0
RG9jdW1lbnQoKS0+cmVtb3ZlSW1hZ2VNYXAodGhpcyk7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1M
TWFwRWxlbWVudEltcGw6OmlkKCkgY29uc3QKK2Jvb2wgSFRNTE1hcEVsZW1lbnRJbXBsOjpjaGVj
a0RURChjb25zdCBOb2RlSW1wbCogbmV3Q2hpbGQpCiB7Ci0gICAgcmV0dXJuIElEX01BUDsKKwkv
LyBGSVhNRTogVGhpcyBzZWVtcyByZWFsbHkgb2RkLCBhbGxvd2luZyBvbmx5IGJsb2NrcyBpbnNp
ZGUgbWFwLgorCXJldHVybiBuZXdDaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmFyZWEoKSkg
fHwgbmV3Q2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzY3JpcHQoKSkgfHwKKwkJICAgaW5C
bG9ja1RhZ0xpc3QobmV3Q2hpbGQpOwogfQogCiBib29sCkBAIC01NTIsMzIgKzU1OCwyOCBAQCBI
VE1MTWFwRWxlbWVudEltcGw6Om1hcE1vdXNlRXZlbnQoaW50IHhfCiAgICAgUVB0clN0YWNrPE5v
ZGVJbXBsPiBub2RlU3RhY2s7CiAKICAgICBOb2RlSW1wbCAqY3VycmVudCA9IGZpcnN0Q2hpbGQo
KTsKLSAgICB3aGlsZSgxKQotICAgIHsKLSAgICAgICAgaWYoIWN1cnJlbnQpCi0gICAgICAgIHsK
KyAgICB3aGlsZSAoMSkgeworICAgICAgICBpZiAoIWN1cnJlbnQpIHsKICAgICAgICAgICAgIGlm
KG5vZGVTdGFjay5pc0VtcHR5KCkpIGJyZWFrOwogICAgICAgICAgICAgY3VycmVudCA9IG5vZGVT
dGFjay5wb3AoKTsKICAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0U2libGluZygp
OwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgaWYoY3VycmVudC0+
aWQoKT09SURfQVJFQSkKLSAgICAgICAgeworICAgICAgICAKKyAgICAgICAgaWYgKGN1cnJlbnQt
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjphcmVhKCkpKSB7CiAgICAgICAgICAgICAvL2NvdXQgPDwg
ImFyZWEgZm91bmQgIiA8PCBlbmRsOwotICAgICAgICAgICAgSFRNTEFyZWFFbGVtZW50SW1wbCog
YXJlYT1zdGF0aWNfY2FzdDxIVE1MQXJlYUVsZW1lbnRJbXBsKj4oY3VycmVudCk7CisgICAgICAg
ICAgICBIVE1MQXJlYUVsZW1lbnRJbXBsKiBhcmVhID0gc3RhdGljX2Nhc3Q8SFRNTEFyZWFFbGVt
ZW50SW1wbCo+KGN1cnJlbnQpOwogICAgICAgICAgICAgaWYgKGFyZWEtPm1hcE1vdXNlRXZlbnQo
eF8seV8sd2lkdGhfLGhlaWdodF8sIGluZm8pKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICB9CisgICAgICAgIAogICAgICAgICBOb2RlSW1wbCAqY2hpbGQgPSBjdXJyZW50
LT5maXJzdENoaWxkKCk7Ci0gICAgICAgIGlmKGNoaWxkKQotICAgICAgICB7CisgICAgICAgIGlm
IChjaGlsZCkgewogICAgICAgICAgICAgbm9kZVN0YWNrLnB1c2goY3VycmVudCk7CiAgICAgICAg
ICAgICBjdXJyZW50ID0gY2hpbGQ7CiAgICAgICAgIH0KICAgICAgICAgZWxzZQotICAgICAgICB7
CiAgICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAg
fQogICAgIH0KIAogICAgIHJldHVybiBmYWxzZTsKQEAgLTYyMiw3ICs2MjQsNyBAQCB2b2lkIEhU
TUxNYXBFbGVtZW50SW1wbDo6c2V0TmFtZShjb25zdCBECiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAK
IEhUTUxBcmVhRWxlbWVudEltcGw6OkhUTUxBcmVhRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRv
YykKLSAgICA6IEhUTUxBbmNob3JFbGVtZW50SW1wbChkb2MpCisgICAgOiBIVE1MQW5jaG9yRWxl
bWVudEltcGwoSFRNTE5hbWVzOjphcmVhKCksIGRvYykKIHsKICAgICBtX2Nvb3Jkcz0wOwogICAg
IG1fY29vcmRzTGVuID0gMDsKQEAgLTYzNSwxMSArNjM3LDYgQEAgSFRNTEFyZWFFbGVtZW50SW1w
bDo6fkhUTUxBcmVhRWxlbWVudEltcAogICAgIGlmIChtX2Nvb3JkcykgZGVsZXRlIFtdIG1fY29v
cmRzOwogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTEFyZWFFbGVtZW50SW1wbDo6aWQoKSBjb25zdAot
ewotICAgIHJldHVybiBJRF9BUkVBOwotfQotCiB2b2lkIEhUTUxBcmVhRWxlbWVudEltcGw6OnBh
cnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIpCiB7CiAgICAgc3dp
dGNoIChhdHRyLT5pZCgpKQpJbmRleDoga2h0bWwvaHRtbC9odG1sX2ltYWdlaW1wbC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbF9pbWFnZWlt
cGwuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yMQpkaWZmIC11IC1wIC1yMS4yMSBraHRtbC9o
dG1sL2h0bWxfaW1hZ2VpbXBsLmgKLS0tIGtodG1sL2h0bWwvaHRtbF9pbWFnZWltcGwuaAkxMSBN
YXkgMjAwNSAwNTo0OTozNCAtMDAwMAkxLjIxCisrKyBraHRtbC9odG1sL2h0bWxfaW1hZ2VpbXBs
LmgJOCBKdWwgMjAwNSAwMzowNDoxNiAtMDAwMApAQCAtNzUsOSArNzUsMTEgQEAgY2xhc3MgSFRN
TEltYWdlRWxlbWVudEltcGwKICAgICBmcmllbmQgY2xhc3MgSFRNTEZvcm1FbGVtZW50SW1wbDsK
IHB1YmxpYzoKICAgICBIVE1MSW1hZ2VFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCBIVE1M
Rm9ybUVsZW1lbnRJbXBsICpmID0gMCk7CisgICAgSFRNTEltYWdlRWxlbWVudEltcGwoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnRQdHIqIGRvYyk7CiAgICAgfkhUTUxJbWFn
ZUVsZW1lbnRJbXBsKCk7CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CisgICAgdmlydHVh
bCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3Rh
dHVzRm9yYmlkZGVuOyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJl
dHVybiAwOyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShOb2RlSW1wbDo6SWQgYXR0
ciwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lk
IHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKik7CkBAIC0xNjEsNyAr
MTYzLDggQEAgcHVibGljOgogICAgIEhUTUxBcmVhRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRv
Yyk7CiAgICAgfkhUTUxBcmVhRWxlbWVudEltcGwoKTsKIAotICAgIHZpcnR1YWwgSWQgaWQoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25z
dCB7IHJldHVybiBUYWdTdGF0dXNGb3JiaWRkZW47IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQcmlv
cml0eSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICphdHRyKTsKIApAQCAtMjEyLDEwICsyMTUs
MTEgQEAgY2xhc3MgSFRNTE1hcEVsZW1lbnRJbXBsIDogcHVibGljIEhUTUxFbAogewogcHVibGlj
OgogICAgIEhUTUxNYXBFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKTsKLQogICAgIH5IVE1M
TWFwRWxlbWVudEltcGwoKTsKIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdT
dGF0dXNSZXF1aXJlZDsgfQorICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyBy
ZXR1cm4gMTsgfQorCXZpcnR1YWwgYm9vbCBjaGVja0RURChjb25zdCBOb2RlSW1wbCogbmV3Q2hp
bGQpOwogCiAgICAgdmlydHVhbCBET01TdHJpbmcgZ2V0TmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1f
bmFtZTsgfQogCkluZGV4OiBraHRtbC9odG1sL2h0bWxfaW5saW5laW1wbC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sX2lubGluZWltcGwu
Y3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjQyCmRpZmYgLXUgLXAgLXIxLjQyIGtodG1sL2h0
bWwvaHRtbF9pbmxpbmVpbXBsLmNwcAotLS0ga2h0bWwvaHRtbC9odG1sX2lubGluZWltcGwuY3Bw
CTExIE1heSAyMDA1IDA1OjQ5OjM0IC0wMDAwCTEuNDIKKysrIGtodG1sL2h0bWwvaHRtbF9pbmxp
bmVpbXBsLmNwcAk4IEp1bCAyMDA1IDAzOjA0OjE2IC0wMDAwCkBAIC00NSw3ICs0NSwxMyBAQCB1
c2luZyBuYW1lc3BhY2Uga2h0bWw7CiBuYW1lc3BhY2UgRE9NIHsKIAogSFRNTEFuY2hvckVsZW1l
bnRJbXBsOjpIVE1MQW5jaG9yRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgICA6IEhU
TUxFbGVtZW50SW1wbChkb2MpCisgICAgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjphKCks
IGRvYykKK3sKKyAgICBtX2hhc1RhcmdldCA9IGZhbHNlOworfQorCitIVE1MQW5jaG9yRWxlbWVu
dEltcGw6OkhUTUxBbmNob3JFbGVtZW50SW1wbChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1l
LCBEb2N1bWVudFB0ciAqZG9jKQorICAgIDogSFRNTEVsZW1lbnRJbXBsKHRhZ05hbWUsIGRvYykK
IHsKICAgICBtX2hhc1RhcmdldCA9IGZhbHNlOwogfQpAQCAtMTA0LDExICsxMTAsNiBAQCBib29s
IEhUTUxBbmNob3JFbGVtZW50SW1wbDo6aXNLZXlib2FyZEZvCiAgICAgcmV0dXJuIGdldERvY3Vt
ZW50KCktPnBhcnQoKS0+dGFic1RvTGlua3MoKTsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxBbmNo
b3JFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9BOwotfQotCiB2b2lk
IEhUTUxBbmNob3JFbGVtZW50SW1wbDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudEltcGwgKmV2
dCkKIHsKICAgICAvLyBSZWFjdCBvbiBjbGlja3MgYW5kIG9uIGtleXByZXNzZXMuCkBAIC0xNTIs
NyArMTUzLDcgQEAgdm9pZCBIVE1MQW5jaG9yRWxlbWVudEltcGw6OmRlZmF1bHRFdmVudAogICAg
ICAgICBpZiAoIGUgJiYgZS0+YnV0dG9uKCkgPT0gMSApCiAgICAgICAgICAgICB1dGFyZ2V0ID0g
Il9ibGFuayI7CiAKLSAgICAgICAgaWYgKCBldnQtPnRhcmdldCgpLT5pZCgpID09IElEX0lNRyAp
IHsKKyAgICAgICAgaWYgKGV2dC0+dGFyZ2V0KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppbWco
KSkpIHsKICAgICAgICAgICAgIEhUTUxJbWFnZUVsZW1lbnRJbXBsKiBpbWcgPSBzdGF0aWNfY2Fz
dDxIVE1MSW1hZ2VFbGVtZW50SW1wbCo+KCBldnQtPnRhcmdldCgpICk7CiAgICAgICAgICAgICBp
ZiAoIGltZyAmJiBpbWctPmlzU2VydmVyTWFwKCkgKQogICAgICAgICAgICAgewpAQCAtMzgyLDcg
KzM4Myw3IEBAIHZvaWQgSFRNTEFuY2hvckVsZW1lbnRJbXBsOjpmb2N1cygpCiAKIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KIAotSFRNTEJSRWxlbWVudEltcGw6OkhUTUxCUkVsZW1lbnRJbXBsKERvY3Vt
ZW50UHRyICpkb2MpIDogSFRNTEVsZW1lbnRJbXBsKGRvYykKK0hUTUxCUkVsZW1lbnRJbXBsOjpI
VE1MQlJFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKSA6IEhUTUxFbGVtZW50SW1wbChIVE1M
TmFtZXM6OmJyKCksIGRvYykKIHsKIH0KIApAQCAtMzkwLDExICszOTEsNiBAQCBIVE1MQlJFbGVt
ZW50SW1wbDo6fkhUTUxCUkVsZW1lbnRJbXBsKCkKIHsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxC
UkVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0JSOwotfQotCiBib29s
IEhUTUxCUkVsZW1lbnRJbXBsOjptYXBUb0VudHJ5KE5vZGVJbXBsOjpJZCBhdHRyLCBNYXBwZWRB
dHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdAogewogICAgIGlmIChhdHRyID09IEFUVFJfQ0xF
QVIpIHsKQEAgLTQ0NSw3ICs0NDEsNyBAQCB2b2lkIEhUTUxCUkVsZW1lbnRJbXBsOjpzZXRDbGVh
cihjb25zdCBECiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxGb250RWxlbWVudEltcGw6OkhU
TUxGb250RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50SW1w
bChkb2MpCisgICAgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjpmb250KCksIGRvYykKIHsK
IH0KIApAQCAtNDUzLDExICs0NDksNiBAQCBIVE1MRm9udEVsZW1lbnRJbXBsOjp+SFRNTEZvbnRF
bGVtZW50SW1wCiB7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MRm9udEVsZW1lbnRJbXBsOjppZCgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0ZPTlQ7Ci19Ci0KIC8vIEFsbG93cyBsZWFkaW5nIHNw
YWNlcy4KIC8vIEFsbG93cyB0cmFpbGluZyBub25udW1lcmljIGNoYXJhY3RlcnMuCiAvLyBSZXR1
cm5zIDEwIGZvciBhbnkgc2l6ZSBncmVhdGVyIHRoYW4gOS4KQEAgLTU5MCw4ICs1ODEsOCBAQCB2
b2lkIEhUTUxGb250RWxlbWVudEltcGw6OnNldFNpemUoY29uc3QgCiAKIC8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KIAotSFRNTE1vZEVsZW1lbnRJbXBsOjpIVE1MTW9kRWxlbWVudEltcGwoRG9jdW1lbnRQ
dHIgKmRvYywgdXNob3J0IGVsZW1lbnRJZCkKLSAgICA6IEhUTUxHZW5lcmljRWxlbWVudEltcGwo
ZG9jLCBlbGVtZW50SWQpCitIVE1MTW9kRWxlbWVudEltcGw6OkhUTUxNb2RFbGVtZW50SW1wbChj
b25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudFB0ciAqZG9jKQorICAgIDogSFRN
TEVsZW1lbnRJbXBsKHRhZ05hbWUsIGRvYykKIHsKIH0KIApAQCAtNjE4LDE1ICs2MDksMTAgQEAg
dm9pZCBIVE1MTW9kRWxlbWVudEltcGw6OnNldERhdGVUaW1lKGNvbgogLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQogCiBIVE1MUXVvdGVFbGVtZW50SW1wbDo6SFRNTFF1b3RlRWxlbWVudEltcGwoRG9jdW1l
bnRQdHIgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50SW1wbChkb2MpCisgICAgOiBIVE1MRWxlbWVu
dEltcGwoSFRNTE5hbWVzOjpxKCksIGRvYykKIHsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxRdW90
ZUVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX1E7Ci19Ci0gICAgCiBE
T01TdHJpbmcgSFRNTFF1b3RlRWxlbWVudEltcGw6OmNpdGUoKSBjb25zdAogewogICAgIHJldHVy
biBnZXRBdHRyaWJ1dGUoQVRUUl9DSVRFKTsKSW5kZXg6IGtodG1sL2h0bWwvaHRtbF9pbmxpbmVp
bXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9o
dG1sX2lubGluZWltcGwuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xOQpkaWZmIC11IC1wIC1y
MS4xOSBraHRtbC9odG1sL2h0bWxfaW5saW5laW1wbC5oCi0tLSBraHRtbC9odG1sL2h0bWxfaW5s
aW5laW1wbC5oCTExIE1heSAyMDA1IDA1OjQ5OjM0IC0wMDAwCTEuMTkKKysrIGtodG1sL2h0bWwv
aHRtbF9pbmxpbmVpbXBsLmgJOCBKdWwgMjAwNSAwMzowNDoxNiAtMDAwMApAQCAtMzQsMTIgKzM0
LDE1IEBAIGNsYXNzIEhUTUxBbmNob3JFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE0KIHsKIHB1Ymxp
YzoKICAgICBIVE1MQW5jaG9yRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYyk7CisgICAgSFRN
TEFuY2hvckVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50
UHRyKiBkb2MpOwogICAgIH5IVE1MQW5jaG9yRWxlbWVudEltcGwoKTsKIAorICAgIHZpcnR1YWwg
SFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1
c1JlcXVpcmVkOyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVy
biAxOyB9CisKICAgICB2aXJ0dWFsIGJvb2wgaXNNb3VzZUZvY3VzYWJsZSgpIGNvbnN0OwogICAg
IHZpcnR1YWwgYm9vbCBpc0tleWJvYXJkRm9jdXNhYmxlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBi
b29sIGlzRm9jdXNhYmxlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwogICAg
IHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICph
dHRyKTsKICAgICB2aXJ0dWFsIHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudEltcGwgKmV2
dCk7CiAgICAgdmlydHVhbCB2b2lkIGFjY2Vzc0tleUFjdGlvbihib29sIGZ1bGxBY3Rpb24pOwpA
QCAtOTcsOSArMTAwLDEwIEBAIGNsYXNzIEhUTUxCUkVsZW1lbnRJbXBsIDogcHVibGljIEhUTUxF
bGUKIHB1YmxpYzoKICAgICBIVE1MQlJFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKTsKICAg
ICB+SFRNTEJSRWxlbWVudEltcGwoKTsKLQotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKICAg
ICAKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7
IHJldHVybiBUYWdTdGF0dXNGb3JiaWRkZW47IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0
eSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKwogICAgIHZpcnR1YWwgYm9vbCBtYXBUb0VudHJ5KElk
IGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0OwogICAgIHZpcnR1YWwg
dm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICphdHRyKTsKICAg
ICAKQEAgLTExNiw5ICsxMjAsMTAgQEAgY2xhc3MgSFRNTEZvbnRFbGVtZW50SW1wbCA6IHB1Ymxp
YyBIVE1MRQogcHVibGljOgogICAgIEhUTUxGb250RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRv
Yyk7CiAgICAgfkhUTUxGb250RWxlbWVudEltcGwoKTsKLQotICAgIHZpcnR1YWwgSWQgaWQoKSBj
b25zdDsKICAgICAKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQo
KSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQorICAgIHZpcnR1YWwgaW50IHRh
Z1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMTsgfQorCiAgICAgdmlydHVhbCBib29sIG1hcFRv
RW50cnkoSWQgYXR0ciwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3Q7CiAgICAg
dmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0
dHIpOwogCkBAIC0xMzQsMTAgKzEzOSwxMyBAQCBwdWJsaWM6CiAKIC8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KIAotY2xhc3MgSFRNTE1vZEVsZW1lbnRJbXBsIDogcHVibGljIEhUTUxHZW5lcmljRWxlbWVu
dEltcGwKK2NsYXNzIEhUTUxNb2RFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MRWxlbWVudEltcGwK
IHsKIHB1YmxpYzoKLSAgICBIVE1MTW9kRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgdXNo
b3J0IGVsZW1lbnRJZCk7CisgICAgSFRNTE1vZEVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5h
bWUmIHRhZ05hbWUsIERvY3VtZW50UHRyICpkb2MpOworCisgICAgdmlydHVhbCBIVE1MVGFnU3Rh
dHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzUmVxdWlyZWQ7
IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDE7IH0KIAog
ICAgIERPTVN0cmluZyBjaXRlKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRDaXRlKGNvbnN0IERPTVN0
cmluZyAmKTsKQEAgLTE1Miw5ICsxNjAsMTAgQEAgY2xhc3MgSFRNTFF1b3RlRWxlbWVudEltcGwg
OiBwdWJsaWMgSFRNTAogewogcHVibGljOgogICAgIEhUTUxRdW90ZUVsZW1lbnRJbXBsKERvY3Vt
ZW50UHRyICpkb2MpOwotCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwogICAgIAorICAgIHZp
cnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRh
Z1N0YXR1c1JlcXVpcmVkOyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7
IHJldHVybiAxOyB9CisKICAgICBET01TdHJpbmcgY2l0ZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0
Q2l0ZShjb25zdCBET01TdHJpbmcgJik7CiB9OwpJbmRleDoga2h0bWwvaHRtbC9odG1sX2xpc3Rp
bXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9odG1s
L2h0bWxfbGlzdGltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjkKZGlmZiAtdSAtcCAt
cjEuOSBraHRtbC9odG1sL2h0bWxfbGlzdGltcGwuY3BwCi0tLSBraHRtbC9odG1sL2h0bWxfbGlz
dGltcGwuY3BwCTExIE1heSAyMDA1IDA1OjQ5OjM0IC0wMDAwCTEuOQorKysga2h0bWwvaHRtbC9o
dG1sX2xpc3RpbXBsLmNwcAk4IEp1bCAyMDA1IDAzOjA0OjE3IC0wMDAwCkBAIC0zMiwxMSArMzIs
NiBAQCB1c2luZyBuYW1lc3BhY2Uga2h0bWw7CiAKIG5hbWVzcGFjZSBET00gewogCi1Ob2RlSW1w
bDo6SWQgSFRNTFVMaXN0RWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURf
VUw7Ci19Ci0KIGJvb2wgSFRNTFVMaXN0RWxlbWVudEltcGw6Om1hcFRvRW50cnkoTm9kZUltcGw6
OklkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0CiB7CiAgICAgc3dp
dGNoIChhdHRyKSB7CkBAIC04NCwxMSArNzksNiBAQCB2b2lkIEhUTUxVTGlzdEVsZW1lbnRJbXBs
OjpzZXRUeXBlKGNvbnN0CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotTm9kZUltcGw6OklkIEhU
TUxEaXJlY3RvcnlFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9ESVI7
Ci19Ci0KIGJvb2wgSFRNTERpcmVjdG9yeUVsZW1lbnRJbXBsOjpjb21wYWN0KCkgY29uc3QKIHsK
ICAgICByZXR1cm4gIWdldEF0dHJpYnV0ZShBVFRSX0NPTVBBQ1QpLmlzTnVsbCgpOwpAQCAtMTAx
LDExICs5MSw2IEBAIHZvaWQgSFRNTERpcmVjdG9yeUVsZW1lbnRJbXBsOjpzZXRDb21wYWMKIAog
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Ob2RlSW1wbDo6SWQgSFRNTE1lbnVFbGVtZW50SW1wbDo6
aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9NRU5VOwotfQotCiBib29sIEhUTUxNZW51RWxl
bWVudEltcGw6OmNvbXBhY3QoKSBjb25zdAogewogICAgIHJldHVybiAhZ2V0QXR0cmlidXRlKEFU
VFJfQ09NUEFDVCkuaXNOdWxsKCk7CkBAIC0xMTgsMTEgKzEwMyw2IEBAIHZvaWQgSFRNTE1lbnVF
bGVtZW50SW1wbDo6c2V0Q29tcGFjdChib28KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Ob2Rl
SW1wbDo6SWQgSFRNTE9MaXN0RWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
SURfT0w7Ci19Ci0KIGJvb2wgSFRNTE9MaXN0RWxlbWVudEltcGw6Om1hcFRvRW50cnkoTm9kZUlt
cGw6OklkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0CiB7CiAgICAg
c3dpdGNoIChhdHRyKSB7CkBAIC0xNTUsNyArMTM1LDcgQEAgdm9pZCBIVE1MT0xpc3RFbGVtZW50
SW1wbDo6cGFyc2VNYXBwZWRBdAogICAgIGNhc2UgQVRUUl9TVEFSVDoKICAgICAgICAgICAgIF9z
dGFydCA9ICFhdHRyLT5pc051bGwoKSA/IGF0dHItPnZhbHVlKCkudG9JbnQoKSA6IDE7CiAgICAg
ZGVmYXVsdDoKLSAgICAgICAgSFRNTFVMaXN0RWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKGF0dHIpOworICAgICAgICBIVE1MRWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KGF0dHIpOwogICAgIH0KIH0KIApAQCAtMTg2LDExICsxNjYsNiBAQCB2b2lkIEhUTUxPTGlzdEVs
ZW1lbnRJbXBsOjpzZXRUeXBlKGNvbnN0CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotTm9kZUlt
cGw6OklkIEhUTUxMSUVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0xJ
OwotfQotCiBib29sIEhUTUxMSUVsZW1lbnRJbXBsOjptYXBUb0VudHJ5KE5vZGVJbXBsOjpJZCBh
dHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdAogewogICAgIHN3aXRjaCAo
YXR0cikgewpAQCAtMjUyLDExICsyMjcsOCBAQCB2b2lkIEhUTUxMSUVsZW1lbnRJbXBsOjphdHRh
Y2goKQogICAgICAgICBOb2RlSW1wbCAqbGlzdE5vZGUgPSAwOwogICAgICAgICBOb2RlSW1wbCAq
biA9IHRoaXM7CiAgICAgICAgIHdoaWxlICghbGlzdE5vZGUgJiYgKG4gPSBuLT5wYXJlbnROb2Rl
KCkpKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKG4tPmlkKCkpIHsKLSAgICAgICAgICAgICAgICBj
YXNlIElEX1VMOgotICAgICAgICAgICAgICAgIGNhc2UgSURfT0w6Ci0gICAgICAgICAgICAgICAg
ICAgIGxpc3ROb2RlID0gbjsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChuLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6dWwoKSkgfHwgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9sKCkp
KQorICAgICAgICAgICAgICAgIGxpc3ROb2RlID0gbjsKICAgICAgICAgfQogICAgICAgICAKICAg
ICAgICAgLy8gSWYgd2UgYXJlIG5vdCBpbiBhIGxpc3QsIHRlbGwgdGhlIHJlbmRlcmVyIHNvIGl0
IGNhbiBwb3NpdGlvbiB1cyBpbnNpZGUuCkBAIC0yNjUsNyArMjM3LDcgQEAgdm9pZCBIVE1MTElF
bGVtZW50SW1wbDo6YXR0YWNoKCkKICAgICAgICAgICAgIHJlbmRlci0+c2V0Tm90SW5MaXN0KHRy
dWUpOwogCiAJLy8gSWYgd2UgYXJlIGZpcnN0LCBhbmQgdGhlIE9MIGhhcyBhIHN0YXJ0IGF0dHIs
IHNldCB0aGUgdmFsdWUuCi0JaWYgKGxpc3ROb2RlICYmIGxpc3ROb2RlLT5pZCgpID09IElEX09M
ICYmICFtX3JlbmRlci0+cHJldmlvdXNTaWJsaW5nKCkpIHsKKwlpZiAobGlzdE5vZGUgJiYgbGlz
dE5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvbCgpKSAmJiAhbV9yZW5kZXItPnByZXZpb3Vz
U2libGluZygpKSB7CiAJICAgIEhUTUxPTGlzdEVsZW1lbnRJbXBsICpvbCA9IHN0YXRpY19jYXN0
PEhUTUxPTGlzdEVsZW1lbnRJbXBsICo+KGxpc3ROb2RlKTsKICAgICAgICAgICAgIHJlbmRlci0+
c2V0VmFsdWUob2wtPnN0YXJ0KCkpOwogCX0KQEAgLTI5NSwxMiArMjY3LDggQEAgdm9pZCBIVE1M
TElFbGVtZW50SW1wbDo6c2V0VmFsdWUobG9uZyB2YQogewogICAgIHNldEF0dHJpYnV0ZShBVFRS
X1ZBTFVFLCBRU3RyaW5nOjpudW1iZXIodmFsdWUpKTsKIH0KLS8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
IAotTm9kZUltcGw6OklkIEhUTUxETGlzdEVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIElEX0RMOwotfQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBib29sIEhUTUxETGlzdEVs
ZW1lbnRJbXBsOjpjb21wYWN0KCkgY29uc3QKIHsKSW5kZXg6IGtodG1sL2h0bWwvaHRtbF9saXN0
aW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwv
aHRtbF9saXN0aW1wbC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjcKZGlmZiAtdSAtcCAtcjEu
NyBraHRtbC9odG1sL2h0bWxfbGlzdGltcGwuaAotLS0ga2h0bWwvaHRtbC9odG1sX2xpc3RpbXBs
LmgJMTEgTWF5IDIwMDUgMDU6NDk6MzQgLTAwMDAJMS43CisrKyBraHRtbC9odG1sL2h0bWxfbGlz
dGltcGwuaAk4IEp1bCAyMDA1IDAzOjA0OjE3IC0wMDAwCkBAIC0zNSwxMCArMzUsMTEgQEAgbmFt
ZXNwYWNlIERPTQogY2xhc3MgSFRNTFVMaXN0RWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTEVsZW1l
bnRJbXBsCiB7CiBwdWJsaWM6Ci0gICAgSFRNTFVMaXN0RWxlbWVudEltcGwoRG9jdW1lbnRQdHIg
KmRvYykgOiBIVE1MRWxlbWVudEltcGwoZG9jKSB7fQorICAgIEhUTUxVTGlzdEVsZW1lbnRJbXBs
KERvY3VtZW50UHRyICpkb2MpIDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6dWwoKSwgZG9j
KSB7fQogICAgIHZpcnR1YWwgfkhUTUxVTGlzdEVsZW1lbnRJbXBsKCkge30KIAotICAgIHZpcnR1
YWwgSWQgaWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWly
ZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQorICAgIHZpcnR1YWwg
aW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gNTsgfQogCiAgICAgdmlydHVhbCBib29s
IG1hcFRvRW50cnkoSWQgYXR0ciwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3Q7
CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUlt
cGwgKik7CkBAIC01Nyw5ICs1OCwxMCBAQCBwdWJsaWM6CiBjbGFzcyBIVE1MRGlyZWN0b3J5RWxl
bWVudEltcGwgOiBwdWJsaWMgSFRNTEVsZW1lbnRJbXBsCiB7CiBwdWJsaWM6Ci0gICAgSFRNTERp
cmVjdG9yeUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpIDogSFRNTEVsZW1lbnRJbXBsKGRv
Yykge30KKyAgICBIVE1MRGlyZWN0b3J5RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykgOiBI
VE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjpkaXIoKSwgZG9jKSB7fQogCi0gICAgdmlydHVhbCBJ
ZCBpZCgpIGNvbnN0OworICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVu
dCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9CisgICAgdmlydHVhbCBpbnQg
dGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiA1OyB9CiAKICAgICBib29sIGNvbXBhY3QoKSBj
b25zdDsKICAgICB2b2lkIHNldENvbXBhY3QoYm9vbCk7CkBAIC03MCw5ICs3MiwxMCBAQCBwdWJs
aWM6CiBjbGFzcyBIVE1MTWVudUVsZW1lbnRJbXBsIDogcHVibGljIEhUTUxFbGVtZW50SW1wbAog
ewogcHVibGljOgotICAgIEhUTUxNZW51RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykgOiBI
VE1MRWxlbWVudEltcGwoZG9jKSB7fQorICAgIEhUTUxNZW51RWxlbWVudEltcGwoRG9jdW1lbnRQ
dHIgKmRvYykgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjptZW51KCksIGRvYykge30KIAot
ICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5k
VGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQorICAg
IHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gNTsgfQogCiAgICAgYm9v
bCBjb21wYWN0KCkgY29uc3Q7CiAgICAgdm9pZCBzZXRDb21wYWN0KGJvb2wpOwpAQCAtODAsMTQg
KzgzLDE1IEBAIHB1YmxpYzoKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1jbGFzcyBIVE1MT0xp
c3RFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MVUxpc3RFbGVtZW50SW1wbAorY2xhc3MgSFRNTE9M
aXN0RWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTEVsZW1lbnRJbXBsCiB7CiBwdWJsaWM6CiAgICAg
SFRNTE9MaXN0RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgICAgICAgOiBIVE1MVUxp
c3RFbGVtZW50SW1wbChkb2MpIHsgX3N0YXJ0ID0gMTsgfQotCi0gICAgdmlydHVhbCBJZCBpZCgp
IGNvbnN0OworICAgICAgICA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6Om9sKCksIGRvYykg
eyBfc3RhcnQgPSAxOyB9CiAgICAgCisgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1Jl
cXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzUmVxdWlyZWQ7IH0KKyAgICB2aXJ0
dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDU7IH0KKwogICAgIHZpcnR1YWwg
Ym9vbCBtYXBUb0VudHJ5KElkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNv
bnN0OwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1
dGVJbXBsICopOwogCkBAIC0xMTAsMTAgKzExNCwxMSBAQCBjbGFzcyBIVE1MTElFbGVtZW50SW1w
bCA6IHB1YmxpYyBIVE1MRWxlCiB7CiBwdWJsaWM6CiAgICAgSFRNTExJRWxlbWVudEltcGwoRG9j
dW1lbnRQdHIgKmRvYykKLSAgICAgICAgOiBIVE1MRWxlbWVudEltcGwoZG9jKSB7IGlzVmFsdWVk
ID0gZmFsc2U7IH0KKyAgICAgICAgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjpsaSgpLCBk
b2MpIHsgaXNWYWx1ZWQgPSBmYWxzZTsgfQogICAgIHZpcnR1YWwgfkhUTUxMSUVsZW1lbnRJbXBs
KCkge30KIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEhUTUxUYWdT
dGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNPcHRpb25h
bDsgfQorICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMzsgfQog
CiAgICAgdmlydHVhbCBib29sIG1hcFRvRW50cnkoTm9kZUltcGw6OklkIGF0dHIsIE1hcHBlZEF0
dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICphdHRyKTsKQEAgLTEzNiwxMCArMTQxLDEx
IEBAIHByaXZhdGU6CiBjbGFzcyBIVE1MRExpc3RFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MRWxl
bWVudEltcGwKIHsKIHB1YmxpYzoKLSAgICBIVE1MRExpc3RFbGVtZW50SW1wbChEb2N1bWVudFB0
ciAqZG9jKSA6IEhUTUxFbGVtZW50SW1wbChkb2MpIHt9CisgICAgSFRNTERMaXN0RWxlbWVudElt
cGwoRG9jdW1lbnRQdHIgKmRvYykgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjpkbCgpLCBk
b2MpIHt9CiAgICAgdmlydHVhbCB+SFRNTERMaXN0RWxlbWVudEltcGwoKSB7fQogCi0gICAgdmly
dHVhbCBJZCBpZCgpIGNvbnN0OworICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1
aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9CisgICAgdmlydHVh
bCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiA1OyB9CiAKICAgICBib29sIGNvbXBh
Y3QoKSBjb25zdDsKICAgICB2b2lkIHNldENvbXBhY3QoYm9vbCk7CkluZGV4OiBraHRtbC9odG1s
L2h0bWxfbWlzY2ltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3Jl
L2todG1sL2h0bWwvaHRtbF9taXNjaW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjYK
ZGlmZiAtdSAtcCAtcjEuMjYga2h0bWwvaHRtbC9odG1sX21pc2NpbXBsLmNwcAotLS0ga2h0bWwv
aHRtbC9odG1sX21pc2NpbXBsLmNwcAkxMSBKdW4gMjAwNSAwOTo1MTowMSAtMDAwMAkxLjI2Cisr
KyBraHRtbC9odG1sL2h0bWxfbWlzY2ltcGwuY3BwCTggSnVsIDIwMDUgMDM6MDQ6MTcgLTAwMDAK
QEAgLTM1LDE1ICszNSwxMCBAQAogbmFtZXNwYWNlIERPTSB7CiAKIEhUTUxCYXNlRm9udEVsZW1l
bnRJbXBsOjpIVE1MQmFzZUZvbnRFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAgIDog
SFRNTEVsZW1lbnRJbXBsKGRvYykKKyAgICA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6OmJh
c2Vmb250KCksIGRvYykKIHsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxCYXNlRm9udEVsZW1lbnRJ
bXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0JBU0VGT05UOwotfQotCiBET01TdHJp
bmcgSFRNTEJhc2VGb250RWxlbWVudEltcGw6OmNvbG9yKCkgY29uc3QKIHsKICAgICByZXR1cm4g
Z2V0QXR0cmlidXRlKEFUVFJfQ09MT1IpOwpAQCAtMTQxLDcyICsxMzYsNzIgQEAgTm9kZUltcGwg
KkhUTUxDb2xsZWN0aW9uSW1wbDo6dHJhdmVyc2VOZQogICAgICAgICAgICAgSFRNTEVsZW1lbnRJ
bXBsICplID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KGN1cnJlbnQpOwogICAgICAg
ICAgICAgc3dpdGNoKHR5cGUpIHsKICAgICAgICAgICAgIGNhc2UgRE9DX0lNQUdFUzoKLSAgICAg
ICAgICAgICAgICBpZihlLT5pZCgpID09IElEX0lNRykKKyAgICAgICAgICAgICAgICBpZiAoZS0+
aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6aW1nKCkpKQogICAgICAgICAgICAgICAgICAgICBmb3Vu
ZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIERPQ19G
T1JNUzoKLSAgICAgICAgICAgICAgICBpZihlLT5pZCgpID09IElEX0ZPUk0pCisgICAgICAgICAg
ICAgICAgaWYoZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6Zm9ybSgpKSkKICAgICAgICAgICAg
ICAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgY2FzZSBET0NfTkFNRUFCTEVfSVRFTVM6Ci0gICAgICAgICAgICAgICAgaWYoZS0+aWQoKSA9
PSBJRF9JTUcpCisgICAgICAgICAgICAgICAgaWYgKGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6
OmltZygpKSkKICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwotICAgICAgICAgICAg
ICAgIGlmKGUtPmlkKCkgPT0gSURfRk9STSkKKyAgICAgICAgICAgICAgICBpZiAoZS0+aGFzTG9j
YWxOYW1lKEhUTUxOYW1lczo6Zm9ybSgpKSkKICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0
cnVlOwotICAgICAgICAgICAgICAgIGlmKGUtPmlkKCkgPT0gSURfQVBQTEVUKQorICAgICAgICAg
ICAgICAgIGlmIChlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjphcHBsZXQoKSkpCiAgICAgICAg
ICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBpZihlLT5pZCgpID09
IElEX0VNQkVEKQorICAgICAgICAgICAgICAgIGlmIChlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVz
OjplbWJlZCgpKSkKICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwotICAgICAgICAg
ICAgICAgIGlmKGUtPmlkKCkgPT0gSURfT0JKRUNUKQorICAgICAgICAgICAgICAgIGlmIChlLT5o
YXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvYmplY3QoKSkpCiAgICAgICAgICAgICAgICAgICAgIGZv
dW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgVEFC
TEVfVEJPRElFUzoKLSAgICAgICAgICAgICAgICBpZihlLT5pZCgpID09IElEX1RCT0RZKQorICAg
ICAgICAgICAgICAgIGlmIChlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0Ym9keSgpKSkKICAg
ICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGVsc2UgaWYo
ZS0+aWQoKSA9PSBJRF9UQUJMRSkKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChlLT5oYXNMb2Nh
bE5hbWUoSFRNTE5hbWVzOjp0YWJsZSgpKSkKICAgICAgICAgICAgICAgICAgICAgZGVlcCA9IGZh
bHNlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBUUl9DRUxMUzoK
LSAgICAgICAgICAgICAgICBpZihlLT5pZCgpID09IElEX1REIHx8IGUtPmlkKCkgPT0gSURfVEgp
CisgICAgICAgICAgICAgICAgaWYgKGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnRkKCkpIHx8
IGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnRoKCkpKQogICAgICAgICAgICAgICAgICAgICBm
b3VuZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZihlLT5pZCgpID09IElEX1RBQkxF
KQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnRh
YmxlKCkpKQogICAgICAgICAgICAgICAgICAgICBkZWVwID0gZmFsc2U7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFRBQkxFX1JPV1M6CiAgICAgICAgICAgICBjYXNl
IFRTRUNUSU9OX1JPV1M6Ci0gICAgICAgICAgICAgICAgaWYoZS0+aWQoKSA9PSBJRF9UUikKKyAg
ICAgICAgICAgICAgICBpZiAoZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dHIoKSkpCiAgICAg
ICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBlbHNlIGlmKGUt
PmlkKCkgPT0gSURfVEFCTEUpCisgICAgICAgICAgICAgICAgZWxzZSBpZiAoZS0+aGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6dGFibGUoKSkpCiAgICAgICAgICAgICAgICAgICAgIGRlZXAgPSBmYWxz
ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgU0VMRUNUX09QVElP
TlM6Ci0gICAgICAgICAgICAgICAgaWYoZS0+aWQoKSA9PSBJRF9PUFRJT04pCisgICAgICAgICAg
ICAgICAgaWYgKGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9wdGlvbigpKSkKICAgICAgICAg
ICAgICAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgY2FzZSBNQVBfQVJFQVM6Ci0gICAgICAgICAgICAgICAgaWYoZS0+aWQoKSA9PSBJRF9B
UkVBKQorICAgICAgICAgICAgICAgIGlmIChlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjphcmVh
KCkpKQogICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICBjYXNlIERPQ19BUFBMRVRTOiAgIC8vIGFsbCBPQkpFQ1QgYW5k
IEFQUExFVCBlbGVtZW50cwotICAgICAgICAgICAgICAgIGlmKGUtPmlkKCkgPT0gSURfT0JKRUNU
IHx8IGUtPmlkKCkgPT0gSURfQVBQTEVUKQorICAgICAgICAgICAgICAgIGlmIChlLT5oYXNMb2Nh
bE5hbWUoSFRNTE5hbWVzOjpvYmplY3QoKSkgfHwgZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6
YXBwbGV0KCkpKQogICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIERPQ19FTUJFRFM6ICAgLy8gYWxsIEVNQkVE
IGVsZW1lbnRzCi0gICAgICAgICAgICAgICAgaWYoZS0+aWQoKSA9PSBJRF9FTUJFRCkKKyAgICAg
ICAgICAgICAgICBpZiAoZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6ZW1iZWQoKSkpCiAgICAg
ICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIGNhc2UgRE9DX09CSkVDVFM6ICAgLy8gYWxsIE9CSkVDVCBlbGVtZW50cwotICAg
ICAgICAgICAgICAgIGlmKGUtPmlkKCkgPT0gSURfT0JKRUNUKQorICAgICAgICAgICAgICAgIGlm
IChlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvYmplY3QoKSkpCiAgICAgICAgICAgICAgICAg
ICAgIGZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNh
c2UgRE9DX0xJTktTOiAgICAgLy8gYWxsIEEgX2FuZF8gQVJFQSBlbGVtZW50cyB3aXRoIGEgdmFs
dWUgZm9yIGhyZWYKLSAgICAgICAgICAgICAgICBpZihlLT5pZCgpID09IElEX0EgfHwgZS0+aWQo
KSA9PSBJRF9BUkVBKQotICAgICAgICAgICAgICAgICAgICBpZighZS0+Z2V0QXR0cmlidXRlKEFU
VFJfSFJFRikuaXNOdWxsKCkpCisgICAgICAgICAgICAgICAgaWYgKGUtPmhhc0xvY2FsTmFtZShI
VE1MTmFtZXM6OmEoKSkgfHwgZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6YXJlYSgpKSkKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKCFlLT5nZXRBdHRyaWJ1dGUoQVRUUl9IUkVGKS5pc051bGwo
KSkKICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIGNhc2UgRE9DX0FOQ0hPUlM6ICAgICAgLy8gYWxsIEEgZWxl
bWVudHMgd2l0aCBhIHZhbHVlIGZvciBuYW1lIG9yIGFuIGlkIGF0dHJpYnV0ZQotICAgICAgICAg
ICAgICAgIGlmKGUtPmlkKCkgPT0gSURfQSkKLSAgICAgICAgICAgICAgICAgICAgaWYoIWUtPmdl
dEF0dHJpYnV0ZShBVFRSX05BTUUpLmlzTnVsbCgpKQorICAgICAgICAgICAgICAgIGlmIChlLT5o
YXNMb2NhbE5hbWUoSFRNTE5hbWVzOjphKCkpKQorICAgICAgICAgICAgICAgICAgICBpZiAoIWUt
PmdldEF0dHJpYnV0ZShBVFRSX05BTUUpLmlzTnVsbCgpKQogICAgICAgICAgICAgICAgICAgICAg
ICAgZm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2Fz
ZSBET0NfQUxMOgpAQCAtMjE5LDkgKzIxNCw5IEBAIE5vZGVJbXBsICpIVE1MQ29sbGVjdGlvbklt
cGw6OnRyYXZlcnNlTmUKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAga2RE
ZWJ1ZyggNjAzMCApIDw8ICJFcnJvciBpbiBIVE1MQ29sbGVjdGlvbiwgd3JvbmcgdGFnSWQhIiA8
PCBlbmRsOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGZvdW5kKSB7CisKKyAgICAg
ICAgICAgIGlmIChmb3VuZCkKICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudDsKLSAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIGlmIChkZWVwKSB7CiAgICAgICAgICAgICAgICAgY3VycmVu
dCA9IGN1cnJlbnQtPnRyYXZlcnNlTmV4dE5vZGUobV9iYXNlLmdldCgpKTsKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKQEAgLTI5OCwyOSArMjkzLDMxIEBAIE5vZGVJbXBsICpIVE1MQ29sbGVj
dGlvbkltcGw6Om5leHRJdGVtKCkKIAogYm9vbCBIVE1MQ29sbGVjdGlvbkltcGw6OmNoZWNrRm9y
TmFtZU1hdGNoKE5vZGVJbXBsICpub2RlLCBib29sIGNoZWNrTmFtZSwgY29uc3QgRE9NU3RyaW5n
ICZuYW1lLCBib29sIGNhc2VTZW5zaXRpdmUpIGNvbnN0CiB7Ci0gICAgRWxlbWVudEltcGwgKmUg
PSBzdGF0aWNfY2FzdDxFbGVtZW50SW1wbCAqPihub2RlKTsKKyAgICBpZiAoIW5vZGUtPmlzSFRN
TEVsZW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIEhUTUxFbGVtZW50
SW1wbCAqZSA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCo+KG5vZGUpOwogICAgIGlmIChj
YXNlU2Vuc2l0aXZlKSB7CiAgICAgICAgIGlmIChjaGVja05hbWUpIHsKICAgICAgICAgICAgIC8v
IGRvY3VtZW50LmFsbCByZXR1cm5zIG9ubHkgaW1hZ2VzLCBmb3JtcywgYXBwbGV0cywgb2JqZWN0
cyBhbmQgZW1iZWRzCiAgICAgICAgICAgICAvLyBieSBuYW1lICh0aG91Z2ggZXZlcnl0aGluZyBi
eSBpZCkKICAgICAgICAgICAgIGlmICh0eXBlID09IERPQ19BTEwgJiYgCi0gICAgICAgICAgICAg
ICAgIShlLT5pZCgpID09IElEX0lNRyB8fCBlLT5pZCgpID09IElEX0ZPUk0gfHwKLSAgICAgICAg
ICAgICAgICAgIGUtPmlkKCkgPT0gSURfQVBQTEVUIHx8IGUtPmlkKCkgPT0gSURfT0JKRUNUIHx8
Ci0gICAgICAgICAgICAgICAgICBlLT5pZCgpID09IElEX0VNQkVEKSkKKyAgICAgICAgICAgICAg
ICAhKGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmltZygpKSB8fCBlLT5oYXNMb2NhbE5hbWUo
SFRNTE5hbWVzOjpmb3JtKCkpIHx8CisgICAgICAgICAgICAgICAgICBlLT5oYXNMb2NhbE5hbWUo
SFRNTE5hbWVzOjphcHBsZXQoKSkgfHwgZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b2JqZWN0
KCkpIHx8CisgICAgICAgICAgICAgICAgICBlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjplbWJl
ZCgpKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAgICByZXR1
cm4gZS0+Z2V0QXR0cmlidXRlKEFUVFJfTkFNRSkgPT0gbmFtZSAmJiBlLT5nZXRBdHRyaWJ1dGUo
QVRUUl9JRCkgIT0gbmFtZTsKLSAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgfSBlbHNlCiAgICAg
ICAgICAgICByZXR1cm4gZS0+Z2V0QXR0cmlidXRlKEFUVFJfSUQpID09IG5hbWU7Ci0gICAgICAg
IH0KICAgICB9IGVsc2UgewogICAgICAgICBpZiAoY2hlY2tOYW1lKSB7CiAgICAgICAgICAgICAv
LyBkb2N1bWVudC5hbGwgcmV0dXJucyBvbmx5IGltYWdlcywgZm9ybXMsIGFwcGxldHMsIG9iamVj
dHMgYW5kIGVtYmVkcwogICAgICAgICAgICAgLy8gYnkgbmFtZSAodGhvdWdoIGV2ZXJ5dGhpbmcg
YnkgaWQpCiAgICAgICAgICAgICBpZiAodHlwZSA9PSBET0NfQUxMICYmIAotICAgICAgICAgICAg
ICAgICEoZS0+aWQoKSA9PSBJRF9JTUcgfHwgZS0+aWQoKSA9PSBJRF9GT1JNIHx8Ci0gICAgICAg
ICAgICAgICAgICBlLT5pZCgpID09IElEX0FQUExFVCB8fCBlLT5pZCgpID09IElEX09CSkVDVCB8
fAotICAgICAgICAgICAgICAgICAgZS0+aWQoKSA9PSBJRF9FTUJFRCkpCisgICAgICAgICAgICAg
ICAgIShlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjppbWcoKSkgfHwgZS0+aGFzTG9jYWxOYW1l
KEhUTUxOYW1lczo6Zm9ybSgpKSB8fAorICAgICAgICAgICAgICAgICAgZS0+aGFzTG9jYWxOYW1l
KEhUTUxOYW1lczo6YXBwbGV0KCkpIHx8IGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9iamVj
dCgpKSB8fAorICAgICAgICAgICAgICAgICAgZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6ZW1i
ZWQoKSkpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAgICAgcmV0
dXJuIGUtPmdldEF0dHJpYnV0ZShBVFRSX05BTUUpLmRvbVN0cmluZygpLmxvd2VyKCkgPT0gbmFt
ZS5sb3dlcigpICYmCkBAIC0zNzksNyArMzc2LDkgQEAgdm9pZCBIVE1MQ29sbGVjdGlvbkltcGw6
OnVwZGF0ZU5hbWVDYWNoZQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgZm9yIChOb2RlSW1w
bCAqbiA9IHRyYXZlcnNlTmV4dEl0ZW0obV9iYXNlLmdldCgpKTsgbjsgbiA9IHRyYXZlcnNlTmV4
dEl0ZW0obikpIHsKLSAgICAgICAgRWxlbWVudEltcGwgKmUgPSBzdGF0aWNfY2FzdDxFbGVtZW50
SW1wbCAqPihuKTsKKyAgICAgICAgaWYgKCFuLT5pc0hUTUxFbGVtZW50KCkpCisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgSFRNTEVsZW1lbnRJbXBsKiBlID0gc3RhdGljX2Nhc3Q8SFRN
TEVsZW1lbnRJbXBsKj4obik7CiAgICAgICAgIFFTdHJpbmcgaWRBdHRyID0gZS0+Z2V0QXR0cmli
dXRlKEFUVFJfSUQpLnN0cmluZygpOwogICAgICAgICBRU3RyaW5nIG5hbWVBdHRyID0gZS0+Z2V0
QXR0cmlidXRlKEFUVFJfTkFNRSkuc3RyaW5nKCk7CiAgICAgICAgIGlmICghaWRBdHRyLmlzRW1w
dHkoKSkgewpAQCAtMzkzLDkgKzM5Miw5IEBAIHZvaWQgSFRNTENvbGxlY3Rpb25JbXBsOjp1cGRh
dGVOYW1lQ2FjaGUKICAgICAgICAgfQogICAgICAgICBpZiAoIW5hbWVBdHRyLmlzRW1wdHkoKSAm
JiBpZEF0dHIgIT0gbmFtZUF0dHIKICAgICAgICAgICAgICYmICh0eXBlICE9IERPQ19BTEwgfHwg
Ci0gICAgICAgICAgICAgICAgKGUtPmlkKCkgPT0gSURfSU1HIHx8IGUtPmlkKCkgPT0gSURfRk9S
TSB8fAotICAgICAgICAgICAgICAgICBlLT5pZCgpID09IElEX0FQUExFVCB8fCBlLT5pZCgpID09
IElEX09CSkVDVCB8fAotICAgICAgICAgICAgICAgICBlLT5pZCgpID09IElEX0VNQkVEKSkpIHsK
KyAgICAgICAgICAgICAgICAoZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6aW1nKCkpIHx8IGUt
Pmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmZvcm0oKSkgfHwKKyAgICAgICAgICAgICAgICAgZS0+
aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6YXBwbGV0KCkpIHx8IGUtPmhhc0xvY2FsTmFtZShIVE1M
TmFtZXM6Om9iamVjdCgpKSB8fAorICAgICAgICAgICAgICAgICBlLT5oYXNMb2NhbE5hbWUoSFRN
TE5hbWVzOjplbWJlZCgpKSkpKSB7CiAgICAgICAgICAgICAvLyBhZGQgdG8gbmFtZSBjYWNoZQog
ICAgICAgICAgICAgUVB0clZlY3RvcjxOb2RlSW1wbD4gKm5hbWVWZWN0b3IgPSBpbmZvLT5uYW1l
Q2FjaGUuZmluZChuYW1lQXR0cik7CiAgICAgICAgICAgICBpZiAoIW5hbWVWZWN0b3IpIHsKQEAg
LTUzMiwxMiArNTMxLDEwIEBAIE5vZGVJbXBsKiBIVE1MRm9ybUNvbGxlY3Rpb25JbXBsOjpnZXRO
YW0KIAogTm9kZUltcGwqIEhUTUxGb3JtQ29sbGVjdGlvbkltcGw6OmdldE5hbWVkRm9ybUl0ZW0o
aW50IGF0dHJfaWQsIGNvbnN0IERPTVN0cmluZyYgbmFtZSwgaW50IGR1cGxpY2F0ZU51bWJlciwg
Ym9vbCBjYXNlU2Vuc2l0aXZlKSBjb25zdAogewotICAgIGlmKG1fYmFzZS0+bm9kZVR5cGUoKSA9
PSBOb2RlOjpFTEVNRU5UX05PREUpCi0gICAgeworICAgIGlmIChtX2Jhc2UtPm5vZGVUeXBlKCkg
PT0gTm9kZTo6RUxFTUVOVF9OT0RFKSB7CiAgICAgICAgIEhUTUxFbGVtZW50SW1wbCogYmFzZUVs
ZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwqPihtX2Jhc2UuZ2V0KCkpOwogICAg
ICAgICBib29sIGZvdW5kSW5wdXRFbGVtZW50cyA9IGZhbHNlOwotICAgICAgICBpZihiYXNlRWxl
bWVudC0+aWQoKSA9PSBJRF9GT1JNKQotICAgICAgICB7CisgICAgICAgIGlmIChiYXNlRWxlbWVu
dC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6Zm9ybSgpKSkgewogICAgICAgICAgICAgSFRNTEZv
cm1FbGVtZW50SW1wbCogZiA9IHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudEltcGwqPihiYXNl
RWxlbWVudCk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZi0+Zm9ybUVs
ZW1lbnRzLmNvdW50KCk7ICsraSkgewogICAgICAgICAgICAgICAgIEhUTUxHZW5lcmljRm9ybUVs
ZW1lbnRJbXBsKiBlID0gZi0+Zm9ybUVsZW1lbnRzW2ldOwpAQCAtNTU3LDggKzU1NCw3IEBAIE5v
ZGVJbXBsKiBIVE1MRm9ybUNvbGxlY3Rpb25JbXBsOjpnZXROYW0KICAgICAgICAgICAgIH0KICAg
ICAgICAgfQogCi0gICAgICAgIGlmICggIWZvdW5kSW5wdXRFbGVtZW50cyApCi0gICAgICAgIHsK
KyAgICAgICAgaWYgKCFmb3VuZElucHV0RWxlbWVudHMpIHsKICAgICAgICAgICAgIEhUTUxGb3Jt
RWxlbWVudEltcGwqIGYgPSBzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnRJbXBsKj4oYmFzZUVs
ZW1lbnQpOwogCiAgICAgICAgICAgICBmb3IodW5zaWduZWQgaSA9IDA7IGkgPCBmLT5pbWdFbGVt
ZW50cy5jb3VudCgpOyArK2kpCkBAIC02NTAsNyArNjQ2LDcgQEAgdm9pZCBIVE1MRm9ybUNvbGxl
Y3Rpb25JbXBsOjp1cGRhdGVOYW1lQwogCiAgICAgUURpY3Q8Y2hhcj4gZm91bmRJbnB1dEVsZW1l
bnRzOwogCi0gICAgaWYgKG1fYmFzZS0+aWQoKSAhPSBJRF9GT1JNKSB7CisgICAgaWYgKCFtX2Jh
c2UtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpmb3JtKCkpKSB7CiAgICAgICAgIGluZm8tPmhhc05h
bWVDYWNoZSA9IHRydWU7CiAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4OiBraHRtbC9odG1s
L2h0bWxfbWlzY2ltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9r
aHRtbC9odG1sL2h0bWxfbWlzY2ltcGwuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNgpkaWZm
IC11IC1wIC1yMS4xNiBraHRtbC9odG1sL2h0bWxfbWlzY2ltcGwuaAotLS0ga2h0bWwvaHRtbC9o
dG1sX21pc2NpbXBsLmgJMTEgTWF5IDIwMDUgMDA6NTg6MjggLTAwMDAJMS4xNgorKysga2h0bWwv
aHRtbC9odG1sX21pc2NpbXBsLmgJOCBKdWwgMjAwNSAwMzowNDoxNyAtMDAwMApAQCAtMzksNyAr
MzksOCBAQCBjbGFzcyBIVE1MQmFzZUZvbnRFbGVtZW50SW1wbCA6IHB1YmxpYyBICiBwdWJsaWM6
CiAgICAgSFRNTEJhc2VGb250RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYyk7CiAKLSAgICB2
aXJ0dWFsIElkIGlkKCkgY29uc3Q7CisgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1Jl
cXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzRm9yYmlkZGVuOyB9CisgICAgdmly
dHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAwOyB9CiAKICAgICBET01TdHJp
bmcgY29sb3IoKSBjb25zdDsKICAgICB2b2lkIHNldENvbG9yKGNvbnN0IERPTVN0cmluZyAmKTsK
SW5kZXg6IGtodG1sL2h0bWwvaHRtbF9vYmplY3RpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfb2JqZWN0aW1wbC5jcHAsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuNjcKZGlmZiAtdSAtcCAtcjEuNjcga2h0bWwvaHRtbC9odG1sX29i
amVjdGltcGwuY3BwCi0tLSBraHRtbC9odG1sL2h0bWxfb2JqZWN0aW1wbC5jcHAJMjkgSnVuIDIw
MDUgMTc6NTA6MjQgLTAwMDAJMS42NworKysga2h0bWwvaHRtbC9odG1sX29iamVjdGltcGwuY3Bw
CTggSnVsIDIwMDUgMDM6MDQ6MTggLTAwMDAKQEAgLTU4LDcgKzU4LDcgQEAgbmFtZXNwYWNlIERP
TSB7CiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxBcHBsZXRFbGVtZW50SW1wbDo6SFRNTEFw
cGxldEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0gIDogSFRNTEVsZW1lbnRJbXBsKGRv
YykKKyAgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjphcHBsZXQoKSwgZG9jKQogewogICAg
IGFwcGxldEluc3RhbmNlID0gMDsKICAgICBtX2FsbFBhcmFtc0F2YWlsYWJsZSA9IGZhbHNlOwpA
QCAtNjksOSArNjksOSBAQCBIVE1MQXBwbGV0RWxlbWVudEltcGw6On5IVE1MQXBwbGV0RWxlbWVu
CiAgICAgZGVsZXRlIGFwcGxldEluc3RhbmNlOwogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTEFwcGxl
dEVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Citib29sIEhUTUxBcHBsZXRFbGVtZW50SW1wbDo6Y2hl
Y2tEVEQoY29uc3QgTm9kZUltcGwqIG5ld0NoaWxkKQogewotICAgIHJldHVybiBJRF9BUFBMRVQ7
CisJcmV0dXJuIG5ld0NoaWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6cGFyYW0oKSkgfHwgSFRN
TEVsZW1lbnRJbXBsOjpjaGVja0RURChuZXdDaGlsZCk7CiB9CiAKIGJvb2wgSFRNTEFwcGxldEVs
ZW1lbnRJbXBsOjptYXBUb0VudHJ5KE5vZGVJbXBsOjpJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVF
bnRyeSYgcmVzdWx0KSBjb25zdApAQCAtMzUzLDE2ICszNTMsMTYgQEAgdm9pZCBIVE1MQXBwbGV0
RWxlbWVudEltcGw6OnNldFdpZHRoKGNvbgogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MRW1i
ZWRFbGVtZW50SW1wbDo6SFRNTEVtYmVkRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAg
ICA6IEhUTUxFbGVtZW50SW1wbChkb2MpLCBlbWJlZEluc3RhbmNlKDApCisgICAgOiBIVE1MRWxl
bWVudEltcGwoSFRNTE5hbWVzOjplbWJlZCgpLCBkb2MpLCBlbWJlZEluc3RhbmNlKDApCiB7fQog
CiBIVE1MRW1iZWRFbGVtZW50SW1wbDo6fkhUTUxFbWJlZEVsZW1lbnRJbXBsKCkKIHsKIH0KIAot
Tm9kZUltcGw6OklkIEhUTUxFbWJlZEVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Citib29sIEhUTUxF
bWJlZEVsZW1lbnRJbXBsOjpjaGVja0RURChjb25zdCBOb2RlSW1wbCogbmV3Q2hpbGQpCiB7Ci0g
ICAgcmV0dXJuIElEX0VNQkVEOworCXJldHVybiBuZXdDaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OnBhcmFtKCkpIHx8IEhUTUxFbGVtZW50SW1wbDo6Y2hlY2tEVEQobmV3Q2hpbGQpOwogfQog
CiAjaWYgQVBQTEVfQ0hBTkdFUwpAQCAtNDc5LDcgKzQ3OSw3IEBAIGJvb2wgSFRNTEVtYmVkRWxl
bWVudEltcGw6OnJlbmRlcmVySXNOZWUKICAgICBLSFRNTFBhcnQgKnBhcnQgPSBnZXREb2N1bWVu
dCgpLT5wYXJ0KCk7CiAgICAgaWYgKCFwYXJ0KQogCXJldHVybiBmYWxzZTsKLSAgICByZXR1cm4g
cGFydC0+cGx1Z2luc0VuYWJsZWQoKSAmJiBwYXJlbnROb2RlKCktPmlkKCkgIT0gSURfT0JKRUNU
OworICAgIHJldHVybiBwYXJ0LT5wbHVnaW5zRW5hYmxlZCgpICYmICFwYXJlbnROb2RlKCktPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjpvYmplY3QoKSk7CiB9CiAKIFJlbmRlck9iamVjdCAqSFRNTEVt
YmVkRWxlbWVudEltcGw6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hICphcmVuYSwgUmVuZGVy
U3R5bGUgKnN0eWxlKQpAQCAtNTA0LDkgKzUwNCw5IEBAIGJvb2wgSFRNTEVtYmVkRWxlbWVudElt
cGw6OmlzVVJMQXR0cmlidXQKIAogSFRNTE9iamVjdEVsZW1lbnRJbXBsOjpIVE1MT2JqZWN0RWxl
bWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykgCiAjaWYgQVBQTEVfQ0hBTkdFUwotOiBIVE1MRWxl
bWVudEltcGwoZG9jKSwgbV9pbWFnZUxvYWRlcigwKSwgb2JqZWN0SW5zdGFuY2UoMCkKKzogSFRN
TEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6b2JqZWN0KCksIGRvYyksIG1faW1hZ2VMb2FkZXIoMCks
IG9iamVjdEluc3RhbmNlKDApCiAjZWxzZQotOiBIVE1MRWxlbWVudEltcGwoZG9jKSwgbV9pbWFn
ZUxvYWRlcigwKQorOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjpvYmplY3QoKSwgZG9jKSwg
bV9pbWFnZUxvYWRlcigwKQogI2VuZGlmCiB7CiAgICAgbmVlZFdpZGdldFVwZGF0ZSA9IGZhbHNl
OwpAQCAtNTE4LDkgKzUxOCw5IEBAIEhUTUxPYmplY3RFbGVtZW50SW1wbDo6fkhUTUxPYmplY3RF
bGVtZW4KICAgICBkZWxldGUgbV9pbWFnZUxvYWRlcjsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxP
YmplY3RFbGVtZW50SW1wbDo6aWQoKSBjb25zdAorYm9vbCBIVE1MT2JqZWN0RWxlbWVudEltcGw6
OmNoZWNrRFREKGNvbnN0IE5vZGVJbXBsKiBuZXdDaGlsZCkKIHsKLSAgICByZXR1cm4gSURfT0JK
RUNUOworCXJldHVybiBuZXdDaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnBhcmFtKCkpIHx8
IEhUTUxFbGVtZW50SW1wbDo6Y2hlY2tEVEQobmV3Q2hpbGQpOwogfQogCiAjaWYgQVBQTEVfQ0hB
TkdFUwpAQCAtNTU1LDcgKzU1NSw3IEBAIEtKUzo6QmluZGluZ3M6Okluc3RhbmNlICpIVE1MT2Jq
ZWN0RWxlbWUKIEhUTUxGb3JtRWxlbWVudEltcGwgKkhUTUxPYmplY3RFbGVtZW50SW1wbDo6Zm9y
bSgpIGNvbnN0CiB7CiAgICAgZm9yIChOb2RlSW1wbCAqcCA9IHBhcmVudE5vZGUoKTsgcCAhPSAw
OyBwID0gcC0+cGFyZW50Tm9kZSgpKSB7Ci0gICAgICAgIGlmIChwLT5pZCgpID09IElEX0ZPUk0p
CisgICAgICAgIGlmIChwLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Zm9ybSgpKSkKICAgICAgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnRJbXBsICo+KHApOwogICAgIH0K
ICAgICAKQEAgLTk1MCw3ICs5NTAsNyBAQCB2b2lkIEhUTUxPYmplY3RFbGVtZW50SW1wbDo6c2V0
V2lkdGgoY29uCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxQYXJhbUVsZW1lbnRJbXBsOjpI
VE1MUGFyYW1FbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAgIDogSFRNTEVsZW1lbnRJ
bXBsKGRvYykKKyAgICA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6OnBhcmFtKCksIGRvYykK
IHsKIH0KIApAQCAtOTU4LDExICs5NTgsNiBAQCBIVE1MUGFyYW1FbGVtZW50SW1wbDo6fkhUTUxQ
YXJhbUVsZW1lbnRJCiB7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MUGFyYW1FbGVtZW50SW1wbDo6
aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9QQVJBTTsKLX0KLQogdm9pZCBIVE1MUGFyYW1F
bGVtZW50SW1wbDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqYXR0
cikKIHsKICAgICBzd2l0Y2goIGF0dHItPmlkKCkgKQpJbmRleDoga2h0bWwvaHRtbC9odG1sX29i
amVjdGltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9o
dG1sL2h0bWxfb2JqZWN0aW1wbC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjMxCmRpZmYgLXUg
LXAgLXIxLjMxIGtodG1sL2h0bWwvaHRtbF9vYmplY3RpbXBsLmgKLS0tIGtodG1sL2h0bWwvaHRt
bF9vYmplY3RpbXBsLmgJMTEgTWF5IDIwMDUgMDU6NDk6MzQgLTAwMDAJMS4zMQorKysga2h0bWwv
aHRtbC9odG1sX29iamVjdGltcGwuaAk4IEp1bCAyMDA1IDAzOjA0OjE4IC0wMDAwCkBAIC00Miwx
MSArNDIsMTIgQEAgY2xhc3MgSFRNTEFwcGxldEVsZW1lbnRJbXBsIDogcHVibGljIEhUTQogewog
cHVibGljOgogICAgIEhUTUxBcHBsZXRFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKTsKLQog
ICAgIH5IVE1MQXBwbGV0RWxlbWVudEltcGwoKTsKIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25z
dDsKLQorICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0
IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3Jp
dHkoKSBjb25zdCB7IHJldHVybiAxOyB9CisJdmlydHVhbCBib29sIGNoZWNrRFREKGNvbnN0IE5v
ZGVJbXBsKiBuZXdDaGlsZCk7CisJCiAgICAgdmlydHVhbCBib29sIG1hcFRvRW50cnkoSWQgYXR0
ciwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lk
IHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKnRva2VuKTsKICAgICAK
QEAgLTExMiwxMCArMTEzLDExIEBAIGNsYXNzIEhUTUxFbWJlZEVsZW1lbnRJbXBsIDogcHVibGlj
IEhUTUwKIHsKIHB1YmxpYzoKICAgICBIVE1MRW1iZWRFbGVtZW50SW1wbChEb2N1bWVudFB0ciAq
ZG9jKTsKLQogICAgIH5IVE1MRW1iZWRFbGVtZW50SW1wbCgpOwogCi0gICAgdmlydHVhbCBJZCBp
ZCgpIGNvbnN0OworICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgp
IGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9CisgICAgdmlydHVhbCBpbnQgdGFn
UHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBib29sIGNoZWNrRFRE
KGNvbnN0IE5vZGVJbXBsKiBuZXdDaGlsZCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRy
eShJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdDsKICAgICB2aXJ0
dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqYXR0cik7
CkBAIC0xNDYsMTAgKzE0OCwxMSBAQCBjbGFzcyBIVE1MT2JqZWN0RWxlbWVudEltcGwgOiBwdWJs
aWMgSFRNCiB7CiBwdWJsaWM6CiAgICAgSFRNTE9iamVjdEVsZW1lbnRJbXBsKERvY3VtZW50UHRy
ICpkb2MpOwotCiAgICAgfkhUTUxPYmplY3RFbGVtZW50SW1wbCgpOwogCi0gICAgdmlydHVhbCBJ
ZCBpZCgpIGNvbnN0OworICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVu
dCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9CisgICAgdmlydHVhbCBpbnQg
dGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiA3OyB9CisJdmlydHVhbCBib29sIGNoZWNrRFRE
KGNvbnN0IE5vZGVJbXBsKiBuZXdDaGlsZCk7CiAKICAgICBIVE1MRm9ybUVsZW1lbnRJbXBsICpm
b3JtKCkgY29uc3Q7CiAKQEAgLTI0NywxMCArMjUwLDEwIEBAIGNsYXNzIEhUTUxQYXJhbUVsZW1l
bnRJbXBsIDogcHVibGljIEhUTUwKICAgICBmcmllbmQgY2xhc3MgSFRNTEFwcGxldEVsZW1lbnRJ
bXBsOwogcHVibGljOgogICAgIEhUTUxQYXJhbUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2Mp
OwotCiAgICAgfkhUTUxQYXJhbUVsZW1lbnRJbXBsKCk7CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkg
Y29uc3Q7CisgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29u
c3QgeyByZXR1cm4gVGFnU3RhdHVzRm9yYmlkZGVuOyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJp
b3JpdHkoKSBjb25zdCB7IHJldHVybiAwOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqdG9rZW4pOwogCkluZGV4OiBraHRtbC9o
dG1sL2h0bWxfdGFibGVpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2Vi
Q29yZS9raHRtbC9odG1sL2h0bWxfdGFibGVpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS41MwpkaWZmIC11IC1wIC1yMS41MyBraHRtbC9odG1sL2h0bWxfdGFibGVpbXBsLmNwcAotLS0g
a2h0bWwvaHRtbC9odG1sX3RhYmxlaW1wbC5jcHAJMTcgSnVuIDIwMDUgMjE6NTU6MzkgLTAwMDAJ
MS41MworKysga2h0bWwvaHRtbC9odG1sX3RhYmxlaW1wbC5jcHAJOCBKdWwgMjAwNSAwMzowNDoy
MCAtMDAwMApAQCAtNTEsNyArNTEsNyBAQCB1c2luZyBuYW1lc3BhY2Uga2h0bWw7CiBuYW1lc3Bh
Y2UgRE9NIHsKIAogSFRNTFRhYmxlRWxlbWVudEltcGw6OkhUTUxUYWJsZUVsZW1lbnRJbXBsKERv
Y3VtZW50UHRyICpkb2MpCi0gIDogSFRNTEVsZW1lbnRJbXBsKGRvYykKKyAgOiBIVE1MRWxlbWVu
dEltcGwoSFRNTE5hbWVzOjp0YWJsZSgpLCBkb2MpCiB7CiAgICAgdENhcHRpb24gPSAwOwogICAg
IGhlYWQgPSAwOwpAQCAtNzMsOSArNzMsMTMgQEAgSFRNTFRhYmxlRWxlbWVudEltcGw6On5IVE1M
VGFibGVFbGVtZW50SQogewogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTFRhYmxlRWxlbWVudEltcGw6
OmlkKCkgY29uc3QKK2Jvb2wgSFRNTFRhYmxlRWxlbWVudEltcGw6OmNoZWNrRFREKGNvbnN0IE5v
ZGVJbXBsKiBuZXdDaGlsZCkKIHsKLSAgICByZXR1cm4gSURfVEFCTEU7CisgICAgcmV0dXJuIG5l
d0NoaWxkLT5pc1RleHROb2RlKCkgfHwgbmV3Q2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpj
YXB0aW9uKCkpIHx8CisgICAgICAgICAgIG5ld0NoaWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
Y29sKCkpIHx8IG5ld0NoaWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Y29sZ3JvdXAoKSkgfHwK
KyAgICAgICAgICAgbmV3Q2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0aGVhZCgpKSB8fCBu
ZXdDaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRmb290KCkpIHx8CisgICAgICAgICAgIG5l
d0NoaWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGJvZHkoKSkgfHwgbmV3Q2hpbGQtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjpmb3JtKCkpIHx8CisgICAgICAgICAgIG5ld0NoaWxkLT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6c2NyaXB0KCkpOwogfQogCiBOb2RlSW1wbCogSFRNTFRhYmxlRWxlbWVu
dEltcGw6OnNldENhcHRpb24oIEhUTUxUYWJsZUNhcHRpb25FbGVtZW50SW1wbCAqYyApCkBAIC0x
NDYsNyArMTUwLDcgQEAgSFRNTEVsZW1lbnRJbXBsICpIVE1MVGFibGVFbGVtZW50SW1wbDo6Ywog
ICAgIGlmKCFoZWFkKQogICAgIHsKICAgICAgICAgaW50IGV4Y2VwdGlvbmNvZGUgPSAwOwotICAg
ICAgICBoZWFkID0gbmV3IEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbChkb2NQdHIoKSwgSURf
VEhFQUQsIHRydWUgLyogaW1wbGljaXQgKi8pOworICAgICAgICBoZWFkID0gbmV3IEhUTUxUYWJs
ZVNlY3Rpb25FbGVtZW50SW1wbChIVE1MTmFtZXM6OnRoZWFkKCksIGRvY1B0cigpLCB0cnVlIC8q
IGltcGxpY2l0ICovKTsKICAgICAgICAgaWYoZm9vdCkKICAgICAgICAgICAgIGluc2VydEJlZm9y
ZSggaGVhZCwgZm9vdCwgZXhjZXB0aW9uY29kZSApOwogICAgICAgICBlbHNlIGlmKGZpcnN0Qm9k
eSkKQEAgLTE3MSw3ICsxNzUsNyBAQCBIVE1MRWxlbWVudEltcGwgKkhUTUxUYWJsZUVsZW1lbnRJ
bXBsOjpjCiAgICAgaWYoIWZvb3QpCiAgICAgewogICAgICAgICBpbnQgZXhjZXB0aW9uY29kZSA9
IDA7Ci0gICAgICAgIGZvb3QgPSBuZXcgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsKGRvY1B0
cigpLCBJRF9URk9PVCwgdHJ1ZSAvKmltcGxpY2l0ICovKTsKKyAgICAgICAgZm9vdCA9IG5ldyBI
VE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGwoSFRNTE5hbWVzOjp0Zm9vdCgpLCBkb2NQdHIoKSwg
dHJ1ZSAvKmltcGxpY2l0ICovKTsKICAgICAgICAgaWYoZmlyc3RCb2R5KQogICAgICAgICAgICAg
aW5zZXJ0QmVmb3JlKCBmb290LCBmaXJzdEJvZHksIGV4Y2VwdGlvbmNvZGUgKTsKICAgICAgICAg
ZWxzZQpAQCAtMjE2LDcgKzIyMCw3IEBAIEhUTUxFbGVtZW50SW1wbCAqSFRNTFRhYmxlRWxlbWVu
dEltcGw6OmkKICAgICAvLyAobm90ZTogdGhpcyBpcyBkaWZmZXJlbnQgZnJvbSAiaWYgdGhlIHRh
YmxlIGhhcyBubyBzZWN0aW9ucyIsIHNpbmNlIHdlIGNhbiBoYXZlCiAgICAgLy8gPFRBQkxFPjxU
Uj4pCiAgICAgaWYoIWZpcnN0Qm9keSAmJiAhaGVhZCAmJiAhZm9vdCAmJiAhaGFzQ2hpbGROb2Rl
cygpKQotICAgICAgICBzZXRUQm9keSggbmV3IEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbChk
b2NQdHIoKSwgSURfVEJPRFksIHRydWUgLyogaW1wbGljaXQgKi8pICk7CisgICAgICAgIHNldFRC
b2R5KCBuZXcgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsKEhUTUxOYW1lczo6dGJvZHkoKSwg
ZG9jUHRyKCksIHRydWUgLyogaW1wbGljaXQgKi8pICk7CiAKICAgICAvL2tkRGVidWcoNjAzMCkg
PDwga19mdW5jaW5mbyA8PCBpbmRleCA8PCBlbmRsOwogICAgIC8vIElFIHRyZWF0cyBpbmRleD0t
MSBhcyBkZWZhdWx0IHZhbHVlIG1lYW5pbmcgJ2FwcGVuZCBhZnRlciBsYXN0JwpAQCAtMjMwLDcg
KzIzNCw4IEBAIEhUTUxFbGVtZW50SW1wbCAqSFRNTFRhYmxlRWxlbWVudEltcGw6OmkKICAgICB7
CiAJLy8gdGhlcmUgY291bGQgYmUgMiB0Zm9vdCBlbGVtZW50cyBpbiB0aGUgdGFibGUuIE9ubHkg
dGhlIGZpcnN0IG9uZSBpcyB0aGUgImZvb3QiLCB0aGF0J3Mgd2h5IHdlIGhhdmUgdGhlIG1vcmUK
IAkvLyBjb21wbGljYXRlZCBpZiBzdGF0ZW1lbnQgYmVsb3cuCi0gICAgICAgIGlmICggbm9kZSAh
PSBmb290ICYmIChub2RlLT5pZCgpID09IElEX1RIRUFEIHx8IG5vZGUtPmlkKCkgPT0gSURfVEZP
T1QgfHwgbm9kZS0+aWQoKSA9PSBJRF9UQk9EWSkgKQorICAgICAgICBpZiAobm9kZSAhPSBmb290
ICYmIChub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGhlYWQoKSkgfHwgbm9kZS0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OnRmb290KCkpIHx8IAorICAgICAgICAgICAgbm9kZS0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OnRib2R5KCkpKSkKICAgICAgICAgewogICAgICAgICAgICAgc2VjdGlvbiA9
IHN0YXRpY19jYXN0PEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbCAqPihub2RlKTsKICAgICAg
ICAgICAgIGxhc3RTZWN0aW9uID0gc2VjdGlvbjsKQEAgLTI3Niw4ICsyODEsOCBAQCB2b2lkIEhU
TUxUYWJsZUVsZW1lbnRJbXBsOjpkZWxldGVSb3coIGxvCiAgICAgYm9vbCBmb3VuZCA9IGZhbHNl
OwogICAgIGZvciAoIDsgbm9kZSA7IG5vZGUgPSBub2RlLT5uZXh0U2libGluZygpICkKICAgICB7
Ci0gICAgICAgIGlmICggbm9kZSAhPSBmb290ICYmIChub2RlLT5pZCgpID09IElEX1RIRUFEIHx8
IG5vZGUtPmlkKCkgPT0gSURfVEZPT1QgfHwgbm9kZS0+aWQoKSA9PSBJRF9UQk9EWSkgKQotICAg
ICAgICB7CisgICAgICAgIGlmIChub2RlICE9IGZvb3QgJiYgKG5vZGUtPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjp0aGVhZCgpKSB8fCBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGZvb3QoKSkg
fHwgCisgICAgICAgICAgICBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGJvZHkoKSkpKSB7
CiAgICAgICAgICAgICBzZWN0aW9uID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlU2VjdGlvbkVsZW1l
bnRJbXBsICo+KG5vZGUpOwogICAgICAgICAgICAgbGFzdFNlY3Rpb24gPSBzZWN0aW9uOwogICAg
ICAgICAgICAgaW50IHJvd3MgPSBzZWN0aW9uLT5udW1Sb3dzKCk7CkBAIC0zMDksNyArMzE0LDcg
QEAgTm9kZUltcGwgKkhUTUxUYWJsZUVsZW1lbnRJbXBsOjphZGRDaGlsZAogICAgIGtkRGVidWco
IDYwMzAgKSA8PCBub2RlTmFtZSgpLnN0cmluZygpIDw8ICIoVGFibGUpOjphZGRDaGlsZCggIiA8
PCBjaGlsZC0+bm9kZU5hbWUoKS5zdHJpbmcoKSA8PCAiICkiIDw8IGVuZGw7CiAjZW5kaWYKIAot
ICAgIGlmIChjaGlsZC0+aWQoKSA9PSBJRF9GT1JNKSB7CisgICAgaWYgKGNoaWxkLT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6Zm9ybSgpKSkgewogICAgICAgICAvLyBGaXJzdCBhZGQgdGhlIGNoaWxk
LgogICAgICAgICBIVE1MRWxlbWVudEltcGw6OmFkZENoaWxkKGNoaWxkKTsKICAgICAgICAgLy8g
Tm93IHNpbXBseSByZXR1cm4gb3Vyc2VsdmVzIGFzIHRoZSBuZXdub2RlLiAgVGhpcyBoYXMgdGhl
IGVmZmVjdCBvZgpAQCAtMzM3LDI4ICszNDIsMTUgQEAgTm9kZUltcGwgKkhUTUxUYWJsZUVsZW1l
bnRJbXBsOjphZGRDaGlsZAogCiAgICAgaW50IGV4Y2VwdGlvbmNvZGUgPSAwOwogICAgIE5vZGVJ
bXBsICpyZXR2YWwgPSBhcHBlbmRDaGlsZCggY2hpbGQsIGV4Y2VwdGlvbmNvZGUgKTsKLSAgICBp
ZiAoIHJldHZhbCApIHsKLQlzd2l0Y2goY2hpbGQtPmlkKCkpIHsKLQljYXNlIElEX0NBUFRJT046
Ci0JICAgIGlmICggIXRDYXB0aW9uICkKLQkJdENhcHRpb24gPSBzdGF0aWNfY2FzdDxIVE1MVGFi
bGVDYXB0aW9uRWxlbWVudEltcGwgKj4oY2hpbGQpOwotCSAgICBicmVhazsKLQljYXNlIElEX0NP
TDoKLQljYXNlIElEX0NPTEdST1VQOgotCSAgICBicmVhazsKLQljYXNlIElEX1RIRUFEOgotCSAg
ICBpZiAoICFoZWFkICkKLQkJaGVhZCA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZVNlY3Rpb25FbGVt
ZW50SW1wbCAqPihjaGlsZCk7Ci0JICAgIGJyZWFrOwotCWNhc2UgSURfVEZPT1Q6Ci0JICAgIGlm
ICggIWZvb3QgKQotCQlmb290ID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJ
bXBsICo+KGNoaWxkKTsKLQkgICAgYnJlYWs7Ci0JY2FzZSBJRF9UQk9EWToKLQkgICAgaWYgKCAh
Zmlyc3RCb2R5ICkKLQkJZmlyc3RCb2R5ID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlU2VjdGlvbkVs
ZW1lbnRJbXBsICo+KGNoaWxkKTsKLQkgICAgYnJlYWs7Ci0JfQorICAgIGlmIChyZXR2YWwpIHsK
KyAgICAgICAgaWYgKCF0Q2FwdGlvbiAmJiBjaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmNh
cHRpb24oKSkpCisgICAgICAgICAgICB0Q2FwdGlvbiA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZUNh
cHRpb25FbGVtZW50SW1wbCAqPihjaGlsZCk7CisgICAgICAgIGVsc2UgaWYgKCFoZWFkICYmIGNo
aWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGhlYWQoKSkpCisgICAgICAgICAgICBoZWFkID0g
c3RhdGljX2Nhc3Q8SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsICo+KGNoaWxkKTsKKyAgICAg
ICAgZWxzZSBpZiAoIWZvb3QgJiYgY2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0Zm9vdCgp
KSkKKyAgICAgICAgICAgIGZvb3QgPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVTZWN0aW9uRWxlbWVu
dEltcGwgKj4oY2hpbGQpOworCWVsc2UgaWYgKCFmaXJzdEJvZHkgJiYgY2hpbGQtPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjp0Ym9keSgpKSkKKwkgICAgZmlyc3RCb2R5ID0gc3RhdGljX2Nhc3Q8SFRN
TFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsICo+KGNoaWxkKTsKICAgICB9CiAgICAgcmV0dXJuIHJl
dHZhbDsKIH0KQEAgLTgwMiwxNyArNzk0LDE2IEBAIHZvaWQgSFRNTFRhYmxlUGFydEVsZW1lbnRJ
bXBsOjpwYXJzZU1hcHAKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1IVE1MVGFibGVTZWN0aW9u
RWxlbWVudEltcGw6OkhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9j
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdXNob3J0IHRhZ2lkLCBib29sIGltcGxpY2l0KQotICAgIDogSFRNTFRhYmxlUGFydEVsZW1l
bnRJbXBsKGRvYykKK0hUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbDo6SFRNTFRhYmxlU2VjdGlv
bkVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50UHRyICpk
b2MsIGJvb2wgaW1wbGljaXQpCisgICAgOiBIVE1MVGFibGVQYXJ0RWxlbWVudEltcGwodGFnTmFt
ZSwgZG9jKQogewotICAgIF9pZCA9IHRhZ2lkOwogICAgIG1faW1wbGljaXQgPSBpbXBsaWNpdDsK
IH0KIAotTm9kZUltcGw6OklkIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbDo6aWQoKSBjb25z
dAorYm9vbCBIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGw6OmNoZWNrRFREKGNvbnN0IE5vZGVJ
bXBsKiBuZXdDaGlsZCkKIHsKLSAgICByZXR1cm4gX2lkOworICAgIHJldHVybiBuZXdDaGlsZC0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRyKCkpIHx8IG5ld0NoaWxkLT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6Zm9ybSgpKSB8fAorICAgICAgICAgICBuZXdDaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OnNjcmlwdCgpKTsKIH0KIAogTm9kZUltcGwgKkhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1w
bDo6YWRkQ2hpbGQoTm9kZUltcGwgKmNoaWxkKQpAQCAtODIxLDcgKzgxMiw3IEBAIE5vZGVJbXBs
ICpIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGw6OmEKICAgICBrZERlYnVnKCA2MDMwICkgPDwg
bm9kZU5hbWUoKS5zdHJpbmcoKSA8PCAiKFRib2R5KTo6YWRkQ2hpbGQoICIgPDwgY2hpbGQtPm5v
ZGVOYW1lKCkuc3RyaW5nKCkgPDwgIiApIiA8PCBlbmRsOwogI2VuZGlmCiAKLSAgICBpZiAoY2hp
bGQtPmlkKCkgPT0gSURfRk9STSkgeworICAgIGlmIChjaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OmZvcm0oKSkpIHsKICAgICAgICAgLy8gRmlyc3QgYWRkIHRoZSBjaGlsZC4KICAgICAgICAg
SFRNTEVsZW1lbnRJbXBsOjphZGRDaGlsZChjaGlsZCk7CiAgICAgICAgIC8vIE5vdyBzaW1wbHkg
cmV0dXJuIG91cnNlbHZlcyBhcyB0aGUgbmV3bm9kZS4gIFRoaXMgaGFzIHRoZSBlZmZlY3Qgb2YK
QEAgLTg3Nyw3ICs4NjgsNyBAQCBpbnQgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsOjpudW1S
b3dzCiAgICAgaW50IHJvd3MgPSAwOwogICAgIGNvbnN0IE5vZGVJbXBsICpuID0gZmlyc3RDaGls
ZCgpOwogICAgIHdoaWxlIChuKSB7Ci0gICAgICAgIGlmIChuLT5pZCgpID09IElEX1RSKQorICAg
ICAgICBpZiAobi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRyKCkpKQogICAgICAgICAgICAgcm93
cysrOwogICAgICAgICBuID0gbi0+bmV4dFNpYmxpbmcoKTsKICAgICB9CkBAIC05MzIsOSArOTIz
LDEwIEBAIFNoYXJlZFB0cjxIVE1MQ29sbGVjdGlvbkltcGw+IEhUTUxUYWJsZVMKIAogLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQogCi1Ob2RlSW1wbDo6SWQgSFRNTFRhYmxlUm93RWxlbWVudEltcGw6Omlk
KCkgY29uc3QKK2Jvb2wgSFRNTFRhYmxlUm93RWxlbWVudEltcGw6OmNoZWNrRFREKGNvbnN0IE5v
ZGVJbXBsKiBuZXdDaGlsZCkKIHsKLSAgICByZXR1cm4gSURfVFI7CisgICAgcmV0dXJuIG5ld0No
aWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGQoKSkgfHwgbmV3Q2hpbGQtPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjp0aCgpKSB8fAorICAgICAgICAgICBuZXdDaGlsZC0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OmZvcm0oKSkgfHwgbmV3Q2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzY3JpcHQo
KSk7CiB9CiAKIE5vZGVJbXBsICpIVE1MVGFibGVSb3dFbGVtZW50SW1wbDo6YWRkQ2hpbGQoTm9k
ZUltcGwgKmNoaWxkKQpAQCAtOTQzLDcgKzkzNSw3IEBAIE5vZGVJbXBsICpIVE1MVGFibGVSb3dF
bGVtZW50SW1wbDo6YWRkQ2gKICAgICBrZERlYnVnKCA2MDMwICkgPDwgbm9kZU5hbWUoKS5zdHJp
bmcoKSA8PCAiKFRyb3cpOjphZGRDaGlsZCggIiA8PCBjaGlsZC0+bm9kZU5hbWUoKS5zdHJpbmco
KSA8PCAiICkiIDw8IGVuZGw7CiAjZW5kaWYKIAotICAgIGlmIChjaGlsZC0+aWQoKSA9PSBJRF9G
T1JNKSB7CisgICAgaWYgKGNoaWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Zm9ybSgpKSkgewog
ICAgICAgICAvLyBGaXJzdCBhZGQgdGhlIGNoaWxkLgogICAgICAgICBIVE1MRWxlbWVudEltcGw6
OmFkZENoaWxkKGNoaWxkKTsKICAgICAgICAgLy8gTm93IHNpbXBseSByZXR1cm4gb3Vyc2VsdmVz
IGFzIHRoZSBuZXdub2RlLiAgVGhpcyBoYXMgdGhlIGVmZmVjdCBvZgpAQCAtOTU4LDE2ICs5NTAs
MTYgQEAgbG9uZyBIVE1MVGFibGVSb3dFbGVtZW50SW1wbDo6cm93SW5kZXgoKQogICAgIGludCBy
SW5kZXggPSAwOwogCiAgICAgTm9kZUltcGwgKnRhYmxlID0gcGFyZW50Tm9kZSgpOwotICAgIGlm
ICggIXRhYmxlICkKKyAgICBpZiAoIXRhYmxlKQogCXJldHVybiAtMTsKICAgICB0YWJsZSA9IHRh
YmxlLT5wYXJlbnROb2RlKCk7Ci0gICAgaWYgKCAhdGFibGUgfHwgdGFibGUtPmlkKCkgIT0gSURf
VEFCTEUgKQorICAgIGlmICghdGFibGUgfHwgIXRhYmxlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
dGFibGUoKSkpCiAJcmV0dXJuIC0xOwogCiAgICAgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBs
ICpmb290ID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlRWxlbWVudEltcGwgKj4odGFibGUpLT50Rm9v
dCgpOwogICAgIE5vZGVJbXBsICpub2RlID0gdGFibGUtPmZpcnN0Q2hpbGQoKTsKLSAgICB3aGls
ZSAoIG5vZGUgKSB7Ci0gICAgICAgIGlmICggbm9kZSAhPSBmb290ICYmIChub2RlLT5pZCgpID09
IElEX1RIRUFEIHx8IG5vZGUtPmlkKCkgPT0gSURfVEZPT1QgfHwgbm9kZS0+aWQoKSA9PSBJRF9U
Qk9EWSkgKSB7CisgICAgd2hpbGUgKG5vZGUpIHsKKyAgICAgICAgaWYgKG5vZGUgIT0gZm9vdCAm
JiAobm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRoZWFkKCkpIHx8IG5vZGUtPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjp0Zm9vdCgpKSB8fCBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGJv
ZHkoKSkpKSB7CiAJICAgIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbCogc2VjdGlvbiA9IHN0
YXRpY19jYXN0PEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbCAqPihub2RlKTsKIAkgICAgY29u
c3QgTm9kZUltcGwgKnJvdyA9IHNlY3Rpb24tPmZpcnN0Q2hpbGQoKTsKIAkgICAgd2hpbGUgKCBy
b3cgKSB7CkBAIC05OTYsNyArOTg4LDcgQEAgbG9uZyBIVE1MVGFibGVSb3dFbGVtZW50SW1wbDo6
c2VjdGlvblJvdwogICAgIGNvbnN0IE5vZGVJbXBsICpuID0gdGhpczsKICAgICBkbyB7CiAgICAg
ICAgIG4gPSBuLT5wcmV2aW91c1NpYmxpbmcoKTsKLSAgICAgICAgaWYgKG4gJiYgbi0+aXNFbGVt
ZW50Tm9kZSgpICYmIG4tPmlkKCkgPT0gSURfVFIpCisgICAgICAgIGlmIChuICYmIG4tPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjp0cigpKSkKICAgICAgICAgICAgIHJJbmRleCsrOwogICAgIH0KICAg
ICB3aGlsZSAobik7CkBAIC0xMDEzLDcgKzEwMDUsNyBAQCBIVE1MRWxlbWVudEltcGwgKkhUTUxU
YWJsZVJvd0VsZW1lbnRJbXBsCiAgICAgICAgIGV4Y2VwdGlvbmNvZGUgPSBET01FeGNlcHRpb246
OklOREVYX1NJWkVfRVJSOyAvLyBwZXIgdGhlIERPTQogICAgIGVsc2UKICAgICB7Ci0gICAgICAg
IGMgPSBuZXcgSFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsKGRvY1B0cigpLCBJRF9URCk7CisgICAg
ICAgIGMgPSBuZXcgSFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6dGQoKSwgZG9j
UHRyKCkpOwogICAgICAgICBpZihudW1DZWxscyA9PSBpbmRleCB8fCBpbmRleCA9PSAtMSkKICAg
ICAgICAgICAgIGFwcGVuZENoaWxkKGMsIGV4Y2VwdGlvbmNvZGUpOwogICAgICAgICBlbHNlIHsK
QEAgLTExMDMsMTUgKzEwOTUsMTQgQEAgdm9pZCBIVE1MVGFibGVSb3dFbGVtZW50SW1wbDo6c2V0
VkFsaWduKAogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUhUTUxUYWJsZUNlbGxFbGVtZW50SW1w
bDo6SFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIGludCB0YWcpCi0g
IDogSFRNTFRhYmxlUGFydEVsZW1lbnRJbXBsKGRvYykKK0hUTUxUYWJsZUNlbGxFbGVtZW50SW1w
bDo6SFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUs
IERvY3VtZW50UHRyICpkb2MpCisgIDogSFRNTFRhYmxlUGFydEVsZW1lbnRJbXBsKHRhZ05hbWUs
IGRvYykKIHsKLSAgX2NvbCA9IC0xOwotICBfcm93ID0gLTE7Ci0gIGNTcGFuID0gclNwYW4gPSAx
OwotICBfaWQgPSB0YWc7Ci0gIHJvd0hlaWdodCA9IDA7Ci0gIG1fc29saWQgPSBmYWxzZTsKKyAg
ICBfY29sID0gLTE7CisgICAgX3JvdyA9IC0xOworICAgIGNTcGFuID0gclNwYW4gPSAxOworICAg
IHJvd0hlaWdodCA9IDA7CisgICAgbV9zb2xpZCA9IGZhbHNlOwogfQogCiBIVE1MVGFibGVDZWxs
RWxlbWVudEltcGw6On5IVE1MVGFibGVDZWxsRWxlbWVudEltcGwoKQpAQCAtMTEyMiw3ICsxMTEz
LDcgQEAgbG9uZyBIVE1MVGFibGVDZWxsRWxlbWVudEltcGw6OmNlbGxJbmRleAogewogICAgIGlu
dCBpbmRleCA9IDA7CiAgICAgZm9yIChjb25zdCBOb2RlSW1wbCAqIG5vZGUgPSBwcmV2aW91c1Np
YmxpbmcoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPnByZXZpb3VzU2libGluZygpKSB7Ci0gICAgICAg
IGlmIChub2RlLT5pZCgpID09IElEX1REIHx8IG5vZGUtPmlkKCkgPT0gSURfVEgpCisgICAgICAg
IGlmIChub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGQoKSkgfHwgbm9kZS0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OnRoKCkpKQogICAgICAgICAgICAgaW5kZXgrKzsKICAgICB9CiAgICAgCkBA
IC0xMTg5LDkgKzExODAsOSBAQCB2b2lkIEhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbDo6cGFyc2VN
YXBwCiAvLyB1c2VkIGJ5IHRhYmxlIGNlbGxzIHRvIHNoYXJlIHN0eWxlIGRlY2xzIGNyZWF0ZWQg
YnkgdGhlIGVuY2xvc2luZyB0YWJsZS4KIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uSW1wbCog
SFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsOjphZGRpdGlvbmFsQXR0cmlidXRlU3R5bGVEZWNsKCkK
IHsKLSAgICBIVE1MRWxlbWVudEltcGwqIHAgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwq
PihwYXJlbnROb2RlKCkpOwotICAgIHdoaWxlKHAgJiYgcC0+aWQoKSAhPSBJRF9UQUJMRSkKLSAg
ICAgICAgcCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCo+KHAtPnBhcmVudE5vZGUoKSk7
CisgICAgTm9kZUltcGwqIHAgPSBwYXJlbnROb2RlKCk7CisgICAgd2hpbGUgKHAgJiYgIXAtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjp0YWJsZSgpKSkKKyAgICAgICAgcCA9IHAtPnBhcmVudE5vZGUo
KTsKIAogICAgIGlmIChwKSB7CiAgICAgICAgIEhUTUxUYWJsZUVsZW1lbnRJbXBsKiB0YWJsZSA9
IHN0YXRpY19jYXN0PEhUTUxUYWJsZUVsZW1lbnRJbXBsKj4ocCk7CkBAIC0xMjAxLDE1ICsxMTky
LDYgQEAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25JbXBsKiBIVE1MVGFibAogICAgIHJldHVy
biAwOwogfQogCi12b2lkIEhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbDo6YXR0YWNoKCkKLXsKLSAg
ICBIVE1MRWxlbWVudEltcGwqIHAgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwqPihwYXJl
bnROb2RlKCkpOwotICAgIHdoaWxlKHAgJiYgcC0+aWQoKSAhPSBJRF9UQUJMRSkKLSAgICAgICAg
cCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCo+KHAtPnBhcmVudE5vZGUoKSk7Ci0KLSAg
ICBIVE1MVGFibGVQYXJ0RWxlbWVudEltcGw6OmF0dGFjaCgpOwotfQotCiBib29sIEhUTUxUYWJs
ZUNlbGxFbGVtZW50SW1wbDo6aXNVUkxBdHRyaWJ1dGUoQXR0cmlidXRlSW1wbCAqYXR0cikgY29u
c3QKIHsKICAgICByZXR1cm4gYXR0ci0+aWQoKSA9PSBBVFRSX0JBQ0tHUk9VTkQ7CkBAIC0xMzQ3
LDE2ICsxMzI5LDEwIEBAIHZvaWQgSFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsOjpzZXRXaWR0aCgK
IAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1IVE1MVGFibGVDb2xFbGVtZW50SW1wbDo6SFRNTFRh
YmxlQ29sRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgdXNob3J0IGkpCi0gICAgOiBIVE1M
VGFibGVQYXJ0RWxlbWVudEltcGwoZG9jKQorSFRNTFRhYmxlQ29sRWxlbWVudEltcGw6OkhUTUxU
YWJsZUNvbEVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50
UHRyICpkb2MpCisgICAgOiBIVE1MVGFibGVQYXJ0RWxlbWVudEltcGwodGFnTmFtZSwgZG9jKQog
ewotICAgIF9pZCA9IGk7Ci0gICAgX3NwYW4gPSAoX2lkID09IElEX0NPTEdST1VQID8gMCA6IDEp
OwotfQotCi1Ob2RlSW1wbDo6SWQgSFRNTFRhYmxlQ29sRWxlbWVudEltcGw6OmlkKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gX2lkOworICAgIF9zcGFuID0gKHRhZ05hbWUubWF0Y2hlcyhIVE1MTmFt
ZXM6OmNvbGdyb3VwKCkpID8gMCA6IDEpOwogfQogCiBib29sIEhUTUxUYWJsZUNvbEVsZW1lbnRJ
bXBsOjptYXBUb0VudHJ5KE5vZGVJbXBsOjpJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYg
cmVzdWx0KSBjb25zdApAQCAtMTQ0NywxMSArMTQyMyw2IEBAIHZvaWQgSFRNTFRhYmxlQ29sRWxl
bWVudEltcGw6OnNldFdpZHRoKGMKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Ob2RlSW1wbDo6
SWQgSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IElEX0NBUFRJT047Ci19Ci0KIGJvb2wgSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnRJbXBsOjptYXBU
b0VudHJ5KE5vZGVJbXBsOjpJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBj
b25zdAogewogICAgIGlmIChhdHRyID09IEFUVFJfQUxJR04pIHsKSW5kZXg6IGtodG1sL2h0bWwv
aHRtbF90YWJsZWltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9r
aHRtbC9odG1sL2h0bWxfdGFibGVpbXBsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjEKZGlm
ZiAtdSAtcCAtcjEuMjEga2h0bWwvaHRtbC9odG1sX3RhYmxlaW1wbC5oCi0tLSBraHRtbC9odG1s
L2h0bWxfdGFibGVpbXBsLmgJMTcgSnVuIDIwMDUgMjE6NTU6MzkgLTAwMDAJMS4yMQorKysga2h0
bWwvaHRtbC9odG1sX3RhYmxlaW1wbC5oCTggSnVsIDIwMDUgMDM6MDQ6MjAgLTAwMDAKQEAgLTYy
LDcgKzYyLDkgQEAgcHVibGljOgogICAgIEhUTUxUYWJsZUVsZW1lbnRJbXBsKERvY3VtZW50UHRy
ICpkb2MpOwogICAgIH5IVE1MVGFibGVFbGVtZW50SW1wbCgpOwogCi0gICAgdmlydHVhbCBJZCBp
ZCgpIGNvbnN0OworICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgp
IGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9CisgICAgdmlydHVhbCBpbnQgdGFn
UHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiA5OyB9CisgICAgdmlydHVhbCBib29sIGNoZWNrRFRE
KGNvbnN0IE5vZGVJbXBsKiBuZXdDaGlsZCk7CiAKICAgICBIVE1MVGFibGVDYXB0aW9uRWxlbWVu
dEltcGwgKmNhcHRpb24oKSBjb25zdCB7IHJldHVybiB0Q2FwdGlvbjsgfQogICAgIE5vZGVJbXBs
ICpzZXRDYXB0aW9uKCBIVE1MVGFibGVDYXB0aW9uRWxlbWVudEltcGwgKiApOwpAQCAtMTQ3LDgg
KzE0OSw4IEBAIGNsYXNzIEhUTUxUYWJsZVBhcnRFbGVtZW50SW1wbCA6IHB1YmxpYyAKIAogewog
cHVibGljOgotICAgIEhUTUxUYWJsZVBhcnRFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQot
ICAgICAgICA6IEhUTUxFbGVtZW50SW1wbChkb2MpCisgICAgSFRNTFRhYmxlUGFydEVsZW1lbnRJ
bXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50UHRyICpkb2MpCisgICAg
ICAgIDogSFRNTEVsZW1lbnRJbXBsKHRhZ05hbWUsIGRvYykKICAgICAgICAgeyB9CiAKICAgICB2
aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShOb2RlSW1wbDo6SWQgYXR0ciwgTWFwcGVkQXR0cmlidXRl
RW50cnkmIHJlc3VsdCkgY29uc3Q7CkBAIC0xNjAsOSArMTYyLDExIEBAIHB1YmxpYzoKIGNsYXNz
IEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MVGFibGVQYXJ0RWxlbWVu
dEltcGwKIHsKIHB1YmxpYzoKLSAgICBIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGwoRG9jdW1l
bnRQdHIgKmRvYywgdXNob3J0IHRhZ2lkLCBib29sIGltcGxpY2l0KTsKKyAgICBIVE1MVGFibGVT
ZWN0aW9uRWxlbWVudEltcGwoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnRQ
dHIgKmRvYywgYm9vbCBpbXBsaWNpdCk7CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7Cisg
ICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1
cm4gVGFnU3RhdHVzT3B0aW9uYWw7IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNv
bnN0IHsgcmV0dXJuIDg7IH0KKyAgICB2aXJ0dWFsIGJvb2wgY2hlY2tEVEQoY29uc3QgTm9kZUlt
cGwqIG5ld0NoaWxkKTsKIAogICAgIHZpcnR1YWwgTm9kZUltcGwgKmFkZENoaWxkKE5vZGVJbXBs
ICpjaGlsZCk7CiAgICAgCkBAIC0xODQsOSArMTg4LDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0
VkFsaWduKCBjb25zdCBET01TdHJpbmcgJiApOwogCiAgICAga2h0bWw6OlNoYXJlZFB0cjxIVE1M
Q29sbGVjdGlvbkltcGw+IHJvd3MoKTsKLQotcHJvdGVjdGVkOgotICAgIHVzaG9ydCBfaWQ7CiB9
OwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xOTUsMTAgKzE5NiwxMiBAQCBjbGFzcyBIVE1M
VGFibGVSb3dFbGVtZW50SW1wbCA6IHB1YmxpYyBICiB7CiBwdWJsaWM6CiAgICAgSFRNTFRhYmxl
Um93RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgICAgICAgOiBIVE1MVGFibGVQYXJ0
RWxlbWVudEltcGwoZG9jKSB7fQotCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OworICAgICAg
ICA6IEhUTUxUYWJsZVBhcnRFbGVtZW50SW1wbChIVE1MTmFtZXM6OnRyKCksIGRvYykge30KIAor
ICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0
dXJuIFRhZ1N0YXR1c09wdGlvbmFsOyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBj
b25zdCB7IHJldHVybiA3OyB9CisgICAgdmlydHVhbCBib29sIGNoZWNrRFREKGNvbnN0IE5vZGVJ
bXBsKiBuZXdDaGlsZCk7CisJCiAgICAgdmlydHVhbCBOb2RlSW1wbCAqYWRkQ2hpbGQoTm9kZUlt
cGwgKmNoaWxkKTsKICAgICAKICAgICBsb25nIHJvd0luZGV4KCkgY29uc3Q7CkBAIC0yMzgsMTAg
KzI0MSwxMiBAQCBwcm90ZWN0ZWQ6CiBjbGFzcyBIVE1MVGFibGVDZWxsRWxlbWVudEltcGwgOiBw
dWJsaWMgSFRNTFRhYmxlUGFydEVsZW1lbnRJbXBsCiB7CiBwdWJsaWM6Ci0gICAgSFRNTFRhYmxl
Q2VsbEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIGludCB0YWdJZCk7CisgICAgSFRNTFRh
YmxlQ2VsbEVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50
UHRyICpkb2MpOwogICAgIH5IVE1MVGFibGVDZWxsRWxlbWVudEltcGwoKTsKIAotICAgIC8vICMj
IyBGSVggdGhlc2UgdHdvLi4uCisgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVp
cmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzT3B0aW9uYWw7IH0KKyAgICB2aXJ0dWFs
IGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDY7IH0KKwogICAgIGxvbmcgY2VsbElu
ZGV4KCkgY29uc3Q7CiAKICAgICBpbnQgY29sKCkgY29uc3QgeyByZXR1cm4gX2NvbDsgfQpAQCAt
MjUxLDE0ICsyNTYsMTAgQEAgcHVibGljOgogCiAgICAgaW50IGNvbFNwYW4oKSBjb25zdCB7IHJl
dHVybiBjU3BhbjsgfQogICAgIGludCByb3dTcGFuKCkgY29uc3QgeyByZXR1cm4gclNwYW47IH0K
LSAgICAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3QgeyByZXR1cm4gX2lkOyB9Ci0gICAgCisK
ICAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShOb2RlSW1wbDo6SWQgYXR0ciwgTWFwcGVkQXR0
cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVk
QXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIpOwogCi0gICAgdmlydHVhbCB2b2lk
IGF0dGFjaCgpOwotCiAgICAgLy8gdXNlZCBieSB0YWJsZSBjZWxscyB0byBzaGFyZSBzdHlsZSBk
ZWNscyBjcmVhdGVkIGJ5IHRoZSBlbmNsb3NpbmcgdGFibGUuCiAgICAgdmlydHVhbCBDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbkltcGwqIGFkZGl0aW9uYWxBdHRyaWJ1dGVTdHlsZURlY2woKTsK
ICAgICAKQEAgLTMxMSw3ICszMTIsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgaW50IF9jb2w7CiAgICAg
aW50IHJTcGFuOwogICAgIGludCBjU3BhbjsKLSAgICBpbnQgX2lkOwogICAgIGludCByb3dIZWln
aHQ7CiAgICAgYm9vbCBtX3NvbGlkICAgICAgICA6IDE7CiB9OwpAQCAtMzIxLDEwICszMjEsMTEg
QEAgcHJvdGVjdGVkOgogY2xhc3MgSFRNTFRhYmxlQ29sRWxlbWVudEltcGwgOiBwdWJsaWMgSFRN
TFRhYmxlUGFydEVsZW1lbnRJbXBsCiB7CiBwdWJsaWM6Ci0gICAgSFRNTFRhYmxlQ29sRWxlbWVu
dEltcGwoRG9jdW1lbnRQdHIgKmRvYywgdXNob3J0IGkpOwotCi0gICAgdmlydHVhbCBJZCBpZCgp
IGNvbnN0OworICAgIEhUTUxUYWJsZUNvbEVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUm
IHRhZ05hbWUsIERvY3VtZW50UHRyICpkb2MpOwogCisgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVz
IGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gaGFzTG9jYWxOYW1lKEhUTUxOYW1l
czo6Y29sKCkpID8gVGFnU3RhdHVzRm9yYmlkZGVuIDogVGFnU3RhdHVzT3B0aW9uYWw7IH0KKyAg
ICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIGhhc0xvY2FsTmFtZShI
VE1MTmFtZXM6OmNvbCgpKSA/IDAgOiAxOyB9CisgICAgdmlydHVhbCBib29sIGNoZWNrRFREKGNv
bnN0IE5vZGVJbXBsKiBuZXdDaGlsZCkgeyByZXR1cm4gaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6
Y29sZ3JvdXAoKSkgJiYgbmV3Q2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpjb2woKSk7IH0K
ICAgICB2b2lkIHNldFRhYmxlKEhUTUxUYWJsZUVsZW1lbnRJbXBsICp0KSB7IHRhYmxlID0gdDsg
fQogCiAgICAgLy8gb3ZlcnJpZGVzCkBAIC0zNTEsMTAgKzM1Miw2IEBAIHB1YmxpYzoKICAgICB2
b2lkIHNldFdpZHRoKCBjb25zdCBET01TdHJpbmcgJiApOwogCiBwcm90ZWN0ZWQ6Ci0gICAgLy8g
Y291bGQgYmUgSURfQ09MIG9yIElEX0NPTEdST1VQIC4uLiBUaGUgRE9NIGlzIG5vdCBxdWl0ZSBj
bGVhciBvbgotICAgIC8vIHRoaXMsIGJ1dCBzaW5jZSBib3RoIGVsZW1lbnRzIHdvcmsgcXVpdGUg
c2ltaWxhciwgd2UgdXNlIG9uZQotICAgIC8vIERPTUVsZW1lbnQgZm9yIHRoZW0uLi4KLSAgICB1
c2hvcnQgX2lkOwogICAgIGludCBfc3BhbjsKICAgICBIVE1MVGFibGVFbGVtZW50SW1wbCAqdGFi
bGU7CiB9OwpAQCAtMzY1LDkgKzM2MiwxMCBAQCBjbGFzcyBIVE1MVGFibGVDYXB0aW9uRWxlbWVu
dEltcGwgOiBwdWJsCiB7CiBwdWJsaWM6CiAgICAgSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnRJbXBs
KERvY3VtZW50UHRyICpkb2MpCi0gICAgICAgIDogSFRNTFRhYmxlUGFydEVsZW1lbnRJbXBsKGRv
Yykge30KKyAgICAgICAgOiBIVE1MVGFibGVQYXJ0RWxlbWVudEltcGwoSFRNTE5hbWVzOjpjYXB0
aW9uKCksIGRvYykge30KIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0
dXNSZXF1aXJlZDsgfQorICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1
cm4gNTsgfQogICAgIAogICAgIHZpcnR1YWwgYm9vbCBtYXBUb0VudHJ5KE5vZGVJbXBsOjpJZCBh
dHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdDsKICAgICB2aXJ0dWFsIHZv
aWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqYXR0cik7CkluZGV4
OiBraHRtbC9odG1sL2h0bWxuYW1lcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sbmFtZXMuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjIKZGlmZiAtdSAtcCAtcjEuMiBraHRtbC9odG1sL2h0bWxuYW1lcy5jcHAKLS0tIGtodG1sL2h0
bWwvaHRtbG5hbWVzLmNwcAkxNiBKdW4gMjAwNSAyMDozMzo1NyAtMDAwMAkxLjIKKysrIGtodG1s
L2h0bWwvaHRtbG5hbWVzLmNwcAk4IEp1bCAyMDA1IDAzOjA0OjIwIC0wMDAwCkBAIC0yMCw1NTEg
KzIwLDIzNSBAQAogICoKICAqLwogCisjZGVmaW5lIEtIVE1MX0hUTUxOQU1FU19ISURFX0dMT0JB
TFMgMQorCisjaW5jbHVkZSA8cXB0cmRpY3QuaD4KICNpbmNsdWRlICJodG1sbmFtZXMuaCIKICNp
bmNsdWRlICJkb21fcW5hbWUuaCIKIAogbmFtZXNwYWNlIERPTSB7CiAKLWNvbnN0IEF0b21pY1N0
cmluZyYgSFRNTE5hbWVzOjp4aHRtbE5hbWVzcGFjZVVSSSgpCi17Ci0gICAgc3RhdGljIEF0b21p
Y1N0cmluZyB4aHRtbE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIik7Ci0gICAgcmV0
dXJuIHhodG1sTlM7Ci19Ci0KLQotLy8gVGFnIG5hbWVzLgotY29uc3QgUXVhbGlmaWVkTmFtZSYg
SFRNTE5hbWVzOjphKCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBhKG51bGxBdG9tLCAi
YSIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiBhOwotfQotCi1jb25zdCBRdWFs
aWZpZWROYW1lJiBIVE1MTmFtZXM6OmFkZHJlc3MoKQotewotICAgIHN0YXRpYyBRdWFsaWZpZWRO
YW1lIGFkZHJlc3MobnVsbEF0b20sICJhZGRyZXNzIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0g
ICAgcmV0dXJuIGFkZHJlc3M7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6
YXBwbGV0KCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBhcHBsZXQobnVsbEF0b20sICJh
cHBsZXQiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4gYXBwbGV0OwotfQotCi1j
b25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OmFyZWEoKQotewotICAgIHN0YXRpYyBRdWFs
aWZpZWROYW1lIGFyZWEobnVsbEF0b20sICJhcmVhIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0g
ICAgcmV0dXJuIGFyZWE7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6Yigp
Ci17Ci0gICAgc3RhdGljIFF1YWxpZmllZE5hbWUgYihudWxsQXRvbSwgImIiLCB4aHRtbE5hbWVz
cGFjZVVSSSgpKTsKLSAgICByZXR1cm4gYjsKLX0KLQotY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRN
TE5hbWVzOjpiYXNlKCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBiYXNlKG51bGxBdG9t
LCAiYmFzZSIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiBiYXNlOwotfQotCi1j
b25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OmJhc2Vmb250KCkKLXsKLSAgICBzdGF0aWMg
UXVhbGlmaWVkTmFtZSBiYXNlZm9udChudWxsQXRvbSwgImJhc2Vmb250IiwgeGh0bWxOYW1lc3Bh
Y2VVUkkoKSk7Ci0gICAgcmV0dXJuIGJhc2Vmb250OwotfQotCi1jb25zdCBRdWFsaWZpZWROYW1l
JiBIVE1MTmFtZXM6OmJpZygpCi17Ci0gICAgc3RhdGljIFF1YWxpZmllZE5hbWUgYmlnKG51bGxB
dG9tLCAiYmlnIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJuIGJpZzsKLX0KLQot
Y29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpibG9ja3F1b3RlKCkKLXsKLSAgICBzdGF0
aWMgUXVhbGlmaWVkTmFtZSBibG9ja3F1b3RlKG51bGxBdG9tLCAiYmxvY2txdW90ZSIsIHhodG1s
TmFtZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiBibG9ja3F1b3RlOwotfQotCi1jb25zdCBRdWFs
aWZpZWROYW1lJiBIVE1MTmFtZXM6OmJvZHkoKQotewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1l
IGJvZHkobnVsbEF0b20sICJib2R5IiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJu
IGJvZHk7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6YnIoKQotewotICAg
IHN0YXRpYyBRdWFsaWZpZWROYW1lIGJyKG51bGxBdG9tLCAiYnIiLCB4aHRtbE5hbWVzcGFjZVVS
SSgpKTsKLSAgICByZXR1cm4gYnI7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1l
czo6YnV0dG9uKCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBidXR0b24obnVsbEF0b20s
ICJidXR0b24iLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4gYnV0dG9uOwotfQot
Ci1jb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OmNhbnZhcygpCi17Ci0gICAgc3RhdGlj
IFF1YWxpZmllZE5hbWUgY2FudmFzKG51bGxBdG9tLCAiY2FudmFzIiwgeGh0bWxOYW1lc3BhY2VV
UkkoKSk7Ci0gICAgcmV0dXJuIGNhbnZhczsKLX0KLQotY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRN
TE5hbWVzOjpjYXB0aW9uKCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBjYXB0aW9uKG51
bGxBdG9tLCAiY2FwdGlvbiIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiBjYXB0
aW9uOwotfQotCi1jb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OmNlbnRlcigpCi17Ci0g
ICAgc3RhdGljIFF1YWxpZmllZE5hbWUgY2VudGVyKG51bGxBdG9tLCAiY2VudGVyIiwgeGh0bWxO
YW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJuIGNlbnRlcjsKLX0KLQotY29uc3QgUXVhbGlmaWVk
TmFtZSYgSFRNTE5hbWVzOjpjb2RlKCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBjb2Rl
KG51bGxBdG9tLCAiY29kZSIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiBjb2Rl
OwotfQotCi1jb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OmNvbCgpCi17Ci0gICAgc3Rh
dGljIFF1YWxpZmllZE5hbWUgY29sKG51bGxBdG9tLCAiY29sIiwgeGh0bWxOYW1lc3BhY2VVUkko
KSk7Ci0gICAgcmV0dXJuIGNvbDsKLX0KK3ZvaWQqIHhodG1sTmFtZXNwYWNlVVJJQXRvbVsoc2l6
ZW9mKEF0b21pY1N0cmluZykgKyBzaXplb2Yodm9pZCopIC0gMSkgLyBzaXplb2Yodm9pZCopXTsK
IAotY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpjb2xncm91cCgpCi17Ci0gICAgc3Rh
dGljIFF1YWxpZmllZE5hbWUgY29sZ3JvdXAobnVsbEF0b20sICJjb2xncm91cCIsIHhodG1sTmFt
ZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiBjb2xncm91cDsKLX0KLQotY29uc3QgUXVhbGlmaWVk
TmFtZSYgSFRNTE5hbWVzOjpkZCgpCi17Ci0gICAgc3RhdGljIFF1YWxpZmllZE5hbWUgZGQobnVs
bEF0b20sICJkZCIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiBkZDsKLX0KLQot
Y29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpkZWwoKQotewotICAgIHN0YXRpYyBRdWFs
aWZpZWROYW1lIGRlbChudWxsQXRvbSwgImRlbCIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAg
IHJldHVybiBkZWw7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6ZGZuKCkK
LXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBkZm4obnVsbEF0b20sICJkZm4iLCB4aHRtbE5h
bWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4gZGZuOwotfQotCi1jb25zdCBRdWFsaWZpZWROYW1l
JiBIVE1MTmFtZXM6OmRpcigpCi17Ci0gICAgc3RhdGljIFF1YWxpZmllZE5hbWUgZGlyKG51bGxB
dG9tLCAiZGlyIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJuIGRpcjsKLX0KLQot
Y29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpkaXYoKQotewotICAgIHN0YXRpYyBRdWFs
aWZpZWROYW1lIGRpdihudWxsQXRvbSwgImRpdiIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAg
IHJldHVybiBkaXY7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6ZGwoKQot
ewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIGRsKG51bGxBdG9tLCAiZGwiLCB4aHRtbE5hbWVz
cGFjZVVSSSgpKTsKLSAgICByZXR1cm4gZGw7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhU
TUxOYW1lczo6ZHQoKQotewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIGR0KG51bGxBdG9tLCAi
ZHQiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4gZHQ7Ci19Ci0KLWNvbnN0IFF1
YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6ZW0oKQotewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1l
IGVtKG51bGxBdG9tLCAiZW0iLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4gZW07
Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6ZW1iZWQoKQotewotICAgIHN0
YXRpYyBRdWFsaWZpZWROYW1lIGVtYmVkKG51bGxBdG9tLCAiZW1iZWQiLCB4aHRtbE5hbWVzcGFj
ZVVSSSgpKTsKLSAgICByZXR1cm4gZW1iZWQ7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhU
TUxOYW1lczo6ZmllbGRzZXQoKQotewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIGZpZWxkc2V0
KG51bGxBdG9tLCAiZmllbGRzZXQiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4g
ZmllbGRzZXQ7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6Zm9udCgpCi17
Ci0gICAgc3RhdGljIFF1YWxpZmllZE5hbWUgZm9udChudWxsQXRvbSwgImZvbnQiLCB4aHRtbE5h
bWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4gZm9udDsKLX0KLQotY29uc3QgUXVhbGlmaWVkTmFt
ZSYgSFRNTE5hbWVzOjpmb3JtKCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBmb3JtKG51
bGxBdG9tLCAiZm9ybSIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiBmb3JtOwot
fQotCi1jb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OmZyYW1lKCkKLXsKLSAgICBzdGF0
aWMgUXVhbGlmaWVkTmFtZSBmcmFtZShudWxsQXRvbSwgImZyYW1lIiwgeGh0bWxOYW1lc3BhY2VV
UkkoKSk7Ci0gICAgcmV0dXJuIGZyYW1lOwotfQotCi1jb25zdCBRdWFsaWZpZWROYW1lJiBIVE1M
TmFtZXM6OmZyYW1lc2V0KCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBmcmFtZXNldChu
dWxsQXRvbSwgImZyYW1lc2V0IiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJuIGZy
YW1lc2V0OwotfQotCi1jb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OmhlYWQoKQotewot
ICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIGhlYWQobnVsbEF0b20sICJoZWFkIiwgeGh0bWxOYW1l
c3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJuIGhlYWQ7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUm
IEhUTUxOYW1lczo6aDEoKQotewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIGgxKG51bGxBdG9t
LCAiaDEiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4gaDE7Ci19Ci0KLWNvbnN0
IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6aDIoKQotewotICAgIHN0YXRpYyBRdWFsaWZpZWRO
YW1lIGgyKG51bGxBdG9tLCAiaDIiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4g
aDI7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6aDMoKQotewotICAgIHN0
YXRpYyBRdWFsaWZpZWROYW1lIGgzKG51bGxBdG9tLCAiaDMiLCB4aHRtbE5hbWVzcGFjZVVSSSgp
KTsKLSAgICByZXR1cm4gaDM7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6
aDQoKQotewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIGg0KG51bGxBdG9tLCAiaDQiLCB4aHRt
bE5hbWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4gaDQ7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5h
bWUmIEhUTUxOYW1lczo6aDUoKQotewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIGg1KG51bGxB
dG9tLCAiaDUiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4gaDU7Ci19Ci0KLWNv
bnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6aDYoKQotewotICAgIHN0YXRpYyBRdWFsaWZp
ZWROYW1lIGg2KG51bGxBdG9tLCAiaDYiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKLSAgICByZXR1
cm4gaDY7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6aHIoKQotewotICAg
IHN0YXRpYyBRdWFsaWZpZWROYW1lIGhyKG51bGxBdG9tLCAiaHIiLCB4aHRtbE5hbWVzcGFjZVVS
SSgpKTsKLSAgICByZXR1cm4gaHI7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1l
czo6aHRtbCgpCi17Ci0gICAgc3RhdGljIFF1YWxpZmllZE5hbWUgaHRtbChudWxsQXRvbSwgImh0
bWwiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4gaHRtbDsKLX0KLQotY29uc3Qg
UXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjppKCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFt
ZSBpKG51bGxBdG9tLCAiaSIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiBpOwot
fQotCi1jb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OmlmcmFtZSgpCi17Ci0gICAgc3Rh
dGljIFF1YWxpZmllZE5hbWUgaWZyYW1lKG51bGxBdG9tLCAiaWZyYW1lIiwgeGh0bWxOYW1lc3Bh
Y2VVUkkoKSk7Ci0gICAgcmV0dXJuIGlmcmFtZTsKLX0KLQotY29uc3QgUXVhbGlmaWVkTmFtZSYg
SFRNTE5hbWVzOjppbWcoKQotewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIGltZyhudWxsQXRv
bSwgImltZyIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiBpbWc7Ci19Ci0KLWNv
bnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6aW5wdXQoKQotewotICAgIHN0YXRpYyBRdWFs
aWZpZWROYW1lIGlucHV0KG51bGxBdG9tLCAiaW5wdXQiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsK
LSAgICByZXR1cm4gaW5wdXQ7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6
aW5zKCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBpbnMobnVsbEF0b20sICJpbnMiLCB4
aHRtbE5hbWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4gaW5zOwotfQotCi1jb25zdCBRdWFsaWZp
ZWROYW1lJiBIVE1MTmFtZXM6OmlzaW5kZXgoKQotewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1l
IGlzaW5kZXgobnVsbEF0b20sICJpc2luZGV4IiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAg
cmV0dXJuIGlzaW5kZXg7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6a2Jk
KCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBrYmQobnVsbEF0b20sICJrYmQiLCB4aHRt
bE5hbWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4ga2JkOwotfQotCi1jb25zdCBRdWFsaWZpZWRO
YW1lJiBIVE1MTmFtZXM6OmtleWdlbigpCi17Ci0gICAgc3RhdGljIFF1YWxpZmllZE5hbWUga2V5
Z2VuKG51bGxBdG9tLCAia2V5Z2VuIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJu
IGtleWdlbjsKLX0KLQotY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpsYWJlbCgpCi17
Ci0gICAgc3RhdGljIFF1YWxpZmllZE5hbWUgbGFiZWwobnVsbEF0b20sICJsYWJlbCIsIHhodG1s
TmFtZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiBsYWJlbDsKLX0KLQotY29uc3QgUXVhbGlmaWVk
TmFtZSYgSFRNTE5hbWVzOjpsZWdlbmQoKQotewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIGxl
Z2VuZChudWxsQXRvbSwgImxlZ2VuZCIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAgIHJldHVy
biBsZWdlbmQ7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6bGkoKQotewot
ICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIGxpKG51bGxBdG9tLCAibGkiLCB4aHRtbE5hbWVzcGFj
ZVVSSSgpKTsKLSAgICByZXR1cm4gbGk7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxO
YW1lczo6bGluaygpCi17Ci0gICAgc3RhdGljIFF1YWxpZmllZE5hbWUgbGluayhudWxsQXRvbSwg
ImxpbmsiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4gbGluazsKLX0KLQotY29u
c3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjptYXAoKQotewotICAgIHN0YXRpYyBRdWFsaWZp
ZWROYW1lIG1hcChudWxsQXRvbSwgIm1hcCIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAgIHJl
dHVybiBtYXA7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6bWFycXVlZSgp
Ci17Ci0gICAgc3RhdGljIFF1YWxpZmllZE5hbWUgbWFycXVlZShudWxsQXRvbSwgIm1hcnF1ZWUi
LCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4gbWFycXVlZTsKLX0KLQotY29uc3Qg
UXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjptZW51KCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVk
TmFtZSBtZW51KG51bGxBdG9tLCAibWVudSIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAgIHJl
dHVybiBtZW51OwotfQotCi1jb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6Om1ldGEoKQot
ewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIG1ldGEobnVsbEF0b20sICJtZXRhIiwgeGh0bWxO
YW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJuIG1ldGE7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5h
bWUmIEhUTUxOYW1lczo6bm9lbWJlZCgpCi17Ci0gICAgc3RhdGljIFF1YWxpZmllZE5hbWUgbm9l
bWJlZChudWxsQXRvbSwgIm5vZW1iZWQiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKLSAgICByZXR1
cm4gbm9lbWJlZDsKLX0KLQotY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpub2ZyYW1l
cygpCi17Ci0gICAgc3RhdGljIFF1YWxpZmllZE5hbWUgbm9mcmFtZXMobnVsbEF0b20sICJub2Zy
YW1lcyIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiBub2ZyYW1lczsKLX0KLQot
Y29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpub3NjcmlwdCgpCi17Ci0gICAgc3RhdGlj
IFF1YWxpZmllZE5hbWUgbm9zY3JpcHQobnVsbEF0b20sICJub3NjcmlwdCIsIHhodG1sTmFtZXNw
YWNlVVJJKCkpOwotICAgIHJldHVybiBub3NjcmlwdDsKLX0KLQotY29uc3QgUXVhbGlmaWVkTmFt
ZSYgSFRNTE5hbWVzOjpvYmplY3QoKQotewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIG9iamVj
dChudWxsQXRvbSwgIm9iamVjdCIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiBv
YmplY3Q7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6b2woKQotewotICAg
IHN0YXRpYyBRdWFsaWZpZWROYW1lIG9sKG51bGxBdG9tLCAib2wiLCB4aHRtbE5hbWVzcGFjZVVS
SSgpKTsKLSAgICByZXR1cm4gb2w7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1l
czo6b3B0Z3JvdXAoKQotewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIG9wdGdyb3VwKG51bGxB
dG9tLCAib3B0Z3JvdXAiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4gb3B0Z3Jv
dXA7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6cCgpCi17Ci0gICAgc3Rh
dGljIFF1YWxpZmllZE5hbWUgcChudWxsQXRvbSwgInAiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsK
LSAgICByZXR1cm4gcDsKLX0KLQotY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpwYXJh
bSgpCi17Ci0gICAgc3RhdGljIFF1YWxpZmllZE5hbWUgcGFyYW0obnVsbEF0b20sICJwYXJhbSIs
IHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiBwYXJhbTsKLX0KLQotY29uc3QgUXVh
bGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpwcmUoKQotewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1l
IHByZShudWxsQXRvbSwgInByZSIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiBw
cmU7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6cSgpCi17Ci0gICAgc3Rh
dGljIFF1YWxpZmllZE5hbWUgcShudWxsQXRvbSwgInEiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsK
LSAgICByZXR1cm4gcTsKLX0KLQotY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpzKCkK
LXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBzKG51bGxBdG9tLCAicyIsIHhodG1sTmFtZXNw
YWNlVVJJKCkpOwotICAgIHJldHVybiBzOwotfQotCi1jb25zdCBRdWFsaWZpZWROYW1lJiBIVE1M
TmFtZXM6OnNhbXAoKQotewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIHNhbXAobnVsbEF0b20s
ICJzYW1wIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJuIHNhbXA7Ci19Ci0KLWNv
bnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6c2NyaXB0KCkKLXsKLSAgICBzdGF0aWMgUXVh
bGlmaWVkTmFtZSBzY3JpcHQobnVsbEF0b20sICJzY3JpcHQiLCB4aHRtbE5hbWVzcGFjZVVSSSgp
KTsKLSAgICByZXR1cm4gc2NyaXB0OwotfQotCi1jb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFt
ZXM6OnNlbGVjdCgpCi17Ci0gICAgc3RhdGljIFF1YWxpZmllZE5hbWUgc2VsZWN0KG51bGxBdG9t
LCAic2VsZWN0IiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJuIHNlbGVjdDsKLX0K
LQotY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpzbWFsbCgpCi17Ci0gICAgc3RhdGlj
IFF1YWxpZmllZE5hbWUgc21hbGwobnVsbEF0b20sICJzbWFsbCIsIHhodG1sTmFtZXNwYWNlVVJJ
KCkpOwotICAgIHJldHVybiBzbWFsbDsKLX0KLQotY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5h
bWVzOjpzdHJpa2UoKQotewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIHN0cmlrZShudWxsQXRv
bSwgInN0cmlrZSIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiBzdHJpa2U7Ci19
Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6c3Ryb25nKCkKLXsKLSAgICBzdGF0
aWMgUXVhbGlmaWVkTmFtZSBzdHJvbmcobnVsbEF0b20sICJzdHJvbmciLCB4aHRtbE5hbWVzcGFj
ZVVSSSgpKTsKLSAgICByZXR1cm4gc3Ryb25nOwotfQotCi1jb25zdCBRdWFsaWZpZWROYW1lJiBI
VE1MTmFtZXM6OnN0eWxlKCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBzdHlsZShudWxs
QXRvbSwgInN0eWxlIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJuIHN0eWxlOwot
fQotCi1jb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OnRhYmxlKCkKLXsKLSAgICBzdGF0
aWMgUXVhbGlmaWVkTmFtZSB0YWJsZShudWxsQXRvbSwgInRhYmxlIiwgeGh0bWxOYW1lc3BhY2VV
UkkoKSk7Ci0gICAgcmV0dXJuIHRhYmxlOwotfQotCi1jb25zdCBRdWFsaWZpZWROYW1lJiBIVE1M
TmFtZXM6OnRib2R5KCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSB0Ym9keShudWxsQXRv
bSwgInRib2R5IiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJuIHRib2R5OwotfQot
Ci1jb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OnRkKCkKLXsKLSAgICBzdGF0aWMgUXVh
bGlmaWVkTmFtZSB0ZChudWxsQXRvbSwgInRkIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAg
cmV0dXJuIHRkOwotfQotCi1jb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OnRleHRhcmVh
KCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSB0ZXh0YXJlYShudWxsQXRvbSwgInRleHRh
cmVhIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJuIHRleHRhcmVhOwotfQotCi1j
b25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OnRmb290KCkKLXsKLSAgICBzdGF0aWMgUXVh
bGlmaWVkTmFtZSB0Zm9vdChudWxsQXRvbSwgInRmb290IiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7
Ci0gICAgcmV0dXJuIHRmb290OwotfQotCi1jb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6
OnRoKCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSB0aChudWxsQXRvbSwgInRoIiwgeGh0
bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJuIHRoOwotfQotCi1jb25zdCBRdWFsaWZpZWRO
YW1lJiBIVE1MTmFtZXM6OnRoZWFkKCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSB0aGVh
ZChudWxsQXRvbSwgInRoZWFkIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJuIHRo
ZWFkOwotfQotCi1jb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OnRpdGxlKCkKLXsKLSAg
ICBzdGF0aWMgUXVhbGlmaWVkTmFtZSB0aXRsZShudWxsQXRvbSwgInRpdGxlIiwgeGh0bWxOYW1l
c3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJuIHRpdGxlOwotfQotCi1jb25zdCBRdWFsaWZpZWROYW1l
JiBIVE1MTmFtZXM6OnRyKCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSB0cihudWxsQXRv
bSwgInRyIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJuIHRyOwotfQotCi1jb25z
dCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OnR0KCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVk
TmFtZSB0dChudWxsQXRvbSwgInR0IiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJu
IHR0OwotfQotCi1jb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OnUoKQotewotICAgIHN0
YXRpYyBRdWFsaWZpZWROYW1lIHUobnVsbEF0b20sICJ1IiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7
Ci0gICAgcmV0dXJuIHU7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6dWwo
KQotewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIHVsKG51bGxBdG9tLCAidWwiLCB4aHRtbE5h
bWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4gdWw7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUm
IEhUTUxOYW1lczo6dmFyKCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSB2YXIobnVsbEF0
b20sICJ2YXIiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4gdmFyOwotfQotCi1j
b25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OnhtcCgpCi17Ci0gICAgc3RhdGljIFF1YWxp
ZmllZE5hbWUgeG1wKG51bGxBdG9tLCAieG1wIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAg
cmV0dXJuIHhtcDsKKy8vIERlZmluZSBhIFF1YWxpZmllZE5hbWUtc2l6ZWQgYXJyYXkgb2YgcG9p
bnRlcnMgdG8gYXZvaWQgc3RhdGljIGluaXRpYWxpemF0aW9uLgorLy8gVXNlIGFuIGFycmF5IG9m
IHBvaW50ZXJzIGluc3RlYWQgb2YgYW4gYXJyYXkgb2YgY2hhciBpbiBjYXNlIHRoZXJlIGlzIHNv
bWUgYWxpZ25tZW50IGlzc3VlLgorI2RlZmluZSBERUZJTkVfR0xPQkFMKG5hbWUpIFwKKyAgICB2
b2lkKiBuYW1lICMjIFFOYW1lWyhzaXplb2YoUXVhbGlmaWVkTmFtZSkgKyBzaXplb2Yodm9pZCop
IC0gMSkgLyBzaXplb2Yodm9pZCopXTsKKworREVGSU5FX0dMT0JBTChhKQorREVGSU5FX0dMT0JB
TChhYmJyKQorREVGSU5FX0dMT0JBTChhY3JvbnltKQorREVGSU5FX0dMT0JBTChhZGRyZXNzKQor
REVGSU5FX0dMT0JBTChhcHBsZXQpCitERUZJTkVfR0xPQkFMKGFyZWEpCitERUZJTkVfR0xPQkFM
KGIpCitERUZJTkVfR0xPQkFMKGJhc2UpCitERUZJTkVfR0xPQkFMKGJhc2Vmb250KQorREVGSU5F
X0dMT0JBTChiZG8pCitERUZJTkVfR0xPQkFMKGJpZykKK0RFRklORV9HTE9CQUwoYmxvY2txdW90
ZSkKK0RFRklORV9HTE9CQUwoYm9keSkKK0RFRklORV9HTE9CQUwoYnIpCitERUZJTkVfR0xPQkFM
KGJ1dHRvbikKK0RFRklORV9HTE9CQUwoY2FudmFzKQorREVGSU5FX0dMT0JBTChjYXB0aW9uKQor
REVGSU5FX0dMT0JBTChjZW50ZXIpCitERUZJTkVfR0xPQkFMKGNpdGUpCitERUZJTkVfR0xPQkFM
KGNvZGUpCitERUZJTkVfR0xPQkFMKGNvbCkKK0RFRklORV9HTE9CQUwoY29sZ3JvdXApCitERUZJ
TkVfR0xPQkFMKGRkKQorREVGSU5FX0dMT0JBTChkZWwpCitERUZJTkVfR0xPQkFMKGRmbikKK0RF
RklORV9HTE9CQUwoZGlyKQorREVGSU5FX0dMT0JBTChkaXYpCitERUZJTkVfR0xPQkFMKGRsKQor
REVGSU5FX0dMT0JBTChkdCkKK0RFRklORV9HTE9CQUwoZW0pCitERUZJTkVfR0xPQkFMKGVtYmVk
KQorREVGSU5FX0dMT0JBTChmaWVsZHNldCkKK0RFRklORV9HTE9CQUwoZm9udCkKK0RFRklORV9H
TE9CQUwoZm9ybSkKK0RFRklORV9HTE9CQUwoZnJhbWUpCitERUZJTkVfR0xPQkFMKGZyYW1lc2V0
KQorREVGSU5FX0dMT0JBTChoZWFkKQorREVGSU5FX0dMT0JBTChoMSkKK0RFRklORV9HTE9CQUwo
aDIpCitERUZJTkVfR0xPQkFMKGgzKQorREVGSU5FX0dMT0JBTChoNCkKK0RFRklORV9HTE9CQUwo
aDUpCitERUZJTkVfR0xPQkFMKGg2KQorREVGSU5FX0dMT0JBTChocikKK0RFRklORV9HTE9CQUwo
aHRtbCkKK0RFRklORV9HTE9CQUwoaSkKK0RFRklORV9HTE9CQUwoaWZyYW1lKQorREVGSU5FX0dM
T0JBTChpbWcpCitERUZJTkVfR0xPQkFMKGlucHV0KQorREVGSU5FX0dMT0JBTChpbnMpCitERUZJ
TkVfR0xPQkFMKGlzaW5kZXgpCitERUZJTkVfR0xPQkFMKGtiZCkKK0RFRklORV9HTE9CQUwoa2V5
Z2VuKQorREVGSU5FX0dMT0JBTChsYWJlbCkKK0RFRklORV9HTE9CQUwobGF5ZXIpCitERUZJTkVf
R0xPQkFMKGxlZ2VuZCkKK0RFRklORV9HTE9CQUwobGkpCitERUZJTkVfR0xPQkFMKGxpbmspCitE
RUZJTkVfR0xPQkFMKG1hcCkKK0RFRklORV9HTE9CQUwobWFycXVlZSkKK0RFRklORV9HTE9CQUwo
bWVudSkKK0RFRklORV9HTE9CQUwobWV0YSkKK0RFRklORV9HTE9CQUwobm9icikKK0RFRklORV9H
TE9CQUwobm9lbWJlZCkKK0RFRklORV9HTE9CQUwobm9mcmFtZXMpCitERUZJTkVfR0xPQkFMKG5v
bGF5ZXIpCitERUZJTkVfR0xPQkFMKG5vc2NyaXB0KQorREVGSU5FX0dMT0JBTChvYmplY3QpCitE
RUZJTkVfR0xPQkFMKG9sKQorREVGSU5FX0dMT0JBTChvcHRncm91cCkKK0RFRklORV9HTE9CQUwo
b3B0aW9uKQorREVGSU5FX0dMT0JBTChwKQorREVGSU5FX0dMT0JBTChwYXJhbSkKK0RFRklORV9H
TE9CQUwocGxhaW50ZXh0KQorREVGSU5FX0dMT0JBTChwcmUpCitERUZJTkVfR0xPQkFMKHEpCitE
RUZJTkVfR0xPQkFMKHMpCitERUZJTkVfR0xPQkFMKHNhbXApCitERUZJTkVfR0xPQkFMKHNjcmlw
dCkKK0RFRklORV9HTE9CQUwoc2VsZWN0KQorREVGSU5FX0dMT0JBTChzbWFsbCkKK0RFRklORV9H
TE9CQUwoc3BhbikKK0RFRklORV9HTE9CQUwoc3RyaWtlKQorREVGSU5FX0dMT0JBTChzdHJvbmcp
CitERUZJTkVfR0xPQkFMKHN0eWxlKQorREVGSU5FX0dMT0JBTChzdWIpCitERUZJTkVfR0xPQkFM
KHN1cCkKK0RFRklORV9HTE9CQUwodGFibGUpCitERUZJTkVfR0xPQkFMKHRib2R5KQorREVGSU5F
X0dMT0JBTCh0ZCkKK0RFRklORV9HTE9CQUwodGV4dGFyZWEpCitERUZJTkVfR0xPQkFMKHRmb290
KQorREVGSU5FX0dMT0JBTCh0aCkKK0RFRklORV9HTE9CQUwodGhlYWQpCitERUZJTkVfR0xPQkFM
KHRpdGxlKQorREVGSU5FX0dMT0JBTCh0cikKK0RFRklORV9HTE9CQUwodHQpCitERUZJTkVfR0xP
QkFMKHUpCitERUZJTkVfR0xPQkFMKHVsKQorREVGSU5FX0dMT0JBTCh2YXIpCitERUZJTkVfR0xP
QkFMKHdicikKK0RFRklORV9HTE9CQUwoeG1wKQorCit2b2lkIEhUTUxOYW1lczo6aW5pdCgpCit7
CisgICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQ7CisgICAgaWYgKCFpbml0aWFsaXplZCkgewor
ICAgICAgICAvLyBVc2UgcGxhY2VtZW50IG5ldyB0byBpbml0aWFsaXplIHRoZSBnbG9iYWxzLgor
ICAgICAgICBzdGF0aWMgQXRvbWljU3RyaW5nIHhodG1sTlMoImh0dHA6Ly93d3cudzMub3JnLzE5
OTkveGh0bWwiKTsKKyAgICAgICAgbmV3ICgmeGh0bWxOYW1lc3BhY2VVUklBdG9tKSBBdG9taWNT
dHJpbmcoeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJmFRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxs
QXRvbSwgImEiLCB4aHRtbE5TKTsKKyAgICAgICAgbmV3ICgmYWJiclFOYW1lKSBRdWFsaWZpZWRO
YW1lKG51bGxBdG9tLCAiYWJiciIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZhY3JvbnltUU5h
bWUpIFF1YWxpZmllZE5hbWUobnVsbEF0b20sICJhY3JvbnltIiwgeGh0bWxOUyk7CisgICAgICAg
IG5ldyAoJmFkZHJlc3NRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgImFkZHJlc3MiLCB4
aHRtbE5TKTsKKyAgICAgICAgbmV3ICgmYXBwbGV0UU5hbWUpIFF1YWxpZmllZE5hbWUobnVsbEF0
b20sICJhcHBsZXQiLCB4aHRtbE5TKTsKKyAgICAgICAgbmV3ICgmYXJlYVFOYW1lKSBRdWFsaWZp
ZWROYW1lKG51bGxBdG9tLCAiYXJlYSIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZiUU5hbWUp
IFF1YWxpZmllZE5hbWUobnVsbEF0b20sICJiIiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJmJh
c2VRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgImJhc2UiLCB4aHRtbE5TKTsKKyAgICAg
ICAgbmV3ICgmYmFzZWZvbnRRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgImJhc2Vmb250
IiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJmJkb1FOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxB
dG9tLCAiYmRvIiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJmJpZ1FOYW1lKSBRdWFsaWZpZWRO
YW1lKG51bGxBdG9tLCAiYmlnIiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJmJsb2NrcXVvdGVR
TmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgImJsb2NrcXVvdGUiLCB4aHRtbE5TKTsKKyAg
ICAgICAgbmV3ICgmYm9keVFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAiYm9keSIsIHho
dG1sTlMpOworICAgICAgICBuZXcgKCZiclFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAi
YnIiLCB4aHRtbE5TKTsKKyAgICAgICAgbmV3ICgmYnV0dG9uUU5hbWUpIFF1YWxpZmllZE5hbWUo
bnVsbEF0b20sICJidXR0b24iLCB4aHRtbE5TKTsKKyAgICAgICAgbmV3ICgmY2FudmFzUU5hbWUp
IFF1YWxpZmllZE5hbWUobnVsbEF0b20sICJjYW52YXMiLCB4aHRtbE5TKTsKKyAgICAgICAgbmV3
ICgmY2FwdGlvblFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAiY2FwdGlvbiIsIHhodG1s
TlMpOworICAgICAgICBuZXcgKCZjZW50ZXJRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwg
ImNlbnRlciIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZjaXRlUU5hbWUpIFF1YWxpZmllZE5h
bWUobnVsbEF0b20sICJjaXRlIiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJmNvZGVRTmFtZSkg
UXVhbGlmaWVkTmFtZShudWxsQXRvbSwgImNvZGUiLCB4aHRtbE5TKTsKKyAgICAgICAgbmV3ICgm
Y29sUU5hbWUpIFF1YWxpZmllZE5hbWUobnVsbEF0b20sICJjb2wiLCB4aHRtbE5TKTsKKyAgICAg
ICAgbmV3ICgmY29sZ3JvdXBRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgImNvbGdyb3Vw
IiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJmRkUU5hbWUpIFF1YWxpZmllZE5hbWUobnVsbEF0
b20sICJkZCIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZkZWxRTmFtZSkgUXVhbGlmaWVkTmFt
ZShudWxsQXRvbSwgImRlbCIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZkZm5RTmFtZSkgUXVh
bGlmaWVkTmFtZShudWxsQXRvbSwgImRmbiIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZkaXJR
TmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgImRpciIsIHhodG1sTlMpOworICAgICAgICBu
ZXcgKCZkaXZRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgImRpdiIsIHhodG1sTlMpOwor
ICAgICAgICBuZXcgKCZkbFFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAiZGwiLCB4aHRt
bE5TKTsKKyAgICAgICAgbmV3ICgmZHRRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgImR0
IiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJmVtUU5hbWUpIFF1YWxpZmllZE5hbWUobnVsbEF0
b20sICJlbSIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZlbWJlZFFOYW1lKSBRdWFsaWZpZWRO
YW1lKG51bGxBdG9tLCAiZW1iZWQiLCB4aHRtbE5TKTsKKyAgICAgICAgbmV3ICgmZmllbGRzZXRR
TmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgImZpZWxkc2V0IiwgeGh0bWxOUyk7CisgICAg
ICAgIG5ldyAoJmZvbnRRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgImZvbnQiLCB4aHRt
bE5TKTsKKyAgICAgICAgbmV3ICgmZm9ybVFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAi
Zm9ybSIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZmcmFtZVFOYW1lKSBRdWFsaWZpZWROYW1l
KG51bGxBdG9tLCAiZnJhbWUiLCB4aHRtbE5TKTsKKyAgICAgICAgbmV3ICgmZnJhbWVzZXRRTmFt
ZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgImZyYW1lc2V0IiwgeGh0bWxOUyk7CisgICAgICAg
IG5ldyAoJmhlYWRRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgImhlYWQiLCB4aHRtbE5T
KTsKKyAgICAgICAgbmV3ICgmaDFRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgImgxIiwg
eGh0bWxOUyk7CisgICAgICAgIG5ldyAoJmgyUU5hbWUpIFF1YWxpZmllZE5hbWUobnVsbEF0b20s
ICJoMiIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZoM1FOYW1lKSBRdWFsaWZpZWROYW1lKG51
bGxBdG9tLCAiaDMiLCB4aHRtbE5TKTsKKyAgICAgICAgbmV3ICgmaDRRTmFtZSkgUXVhbGlmaWVk
TmFtZShudWxsQXRvbSwgImg0IiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJmg1UU5hbWUpIFF1
YWxpZmllZE5hbWUobnVsbEF0b20sICJoNSIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZoNlFO
YW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAiaDYiLCB4aHRtbE5TKTsKKyAgICAgICAgbmV3
ICgmaHJRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgImhyIiwgeGh0bWxOUyk7CisgICAg
ICAgIG5ldyAoJmh0bWxRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgImh0bWwiLCB4aHRt
bE5TKTsKKyAgICAgICAgbmV3ICgmaVFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAiaSIs
IHhodG1sTlMpOworICAgICAgICBuZXcgKCZpZnJhbWVRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxs
QXRvbSwgImlmcmFtZSIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZpbWdRTmFtZSkgUXVhbGlm
aWVkTmFtZShudWxsQXRvbSwgImltZyIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZpbnB1dFFO
YW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAiaW5wdXQiLCB4aHRtbE5TKTsKKyAgICAgICAg
bmV3ICgmaW5zUU5hbWUpIFF1YWxpZmllZE5hbWUobnVsbEF0b20sICJpbnMiLCB4aHRtbE5TKTsK
KyAgICAgICAgbmV3ICgmaXNpbmRleFFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAiaXNp
bmRleCIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZrYmRRTmFtZSkgUXVhbGlmaWVkTmFtZShu
dWxsQXRvbSwgImtiZCIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZrZXlnZW5RTmFtZSkgUXVh
bGlmaWVkTmFtZShudWxsQXRvbSwgImtleWdlbiIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZs
YWJlbFFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAibGFiZWwiLCB4aHRtbE5TKTsKKyAg
ICAgICAgbmV3ICgmbGF5ZXJRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgImxheWVyIiwg
eGh0bWxOUyk7CisgICAgICAgIG5ldyAoJmxlZ2VuZFFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxB
dG9tLCAibGVnZW5kIiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJmxpUU5hbWUpIFF1YWxpZmll
ZE5hbWUobnVsbEF0b20sICJsaSIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZsaW5rUU5hbWUp
IFF1YWxpZmllZE5hbWUobnVsbEF0b20sICJsaW5rIiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAo
Jm1hcFFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAibWFwIiwgeGh0bWxOUyk7CisgICAg
ICAgIG5ldyAoJm1hcnF1ZWVRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgIm1hcnF1ZWUi
LCB4aHRtbE5TKTsKKyAgICAgICAgbmV3ICgmbWVudVFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxB
dG9tLCAibWVudSIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZtZXRhUU5hbWUpIFF1YWxpZmll
ZE5hbWUobnVsbEF0b20sICJtZXRhIiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJm5vYnJRTmFt
ZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgIm5vYnIiLCB4aHRtbE5TKTsKKyAgICAgICAgbmV3
ICgmbm9lbWJlZFFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAibm9lbWJlZCIsIHhodG1s
TlMpOworICAgICAgICBuZXcgKCZub2ZyYW1lc1FOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9t
LCAibm9mcmFtZXMiLCB4aHRtbE5TKTsKKyAgICAgICAgbmV3ICgmbm9sYXllclFOYW1lKSBRdWFs
aWZpZWROYW1lKG51bGxBdG9tLCAibm9sYXllciIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZu
b3NjcmlwdFFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAibm9zY3JpcHQiLCB4aHRtbE5T
KTsKKyAgICAgICAgbmV3ICgmb2JqZWN0UU5hbWUpIFF1YWxpZmllZE5hbWUobnVsbEF0b20sICJv
YmplY3QiLCB4aHRtbE5TKTsKKyAgICAgICAgbmV3ICgmb2xRTmFtZSkgUXVhbGlmaWVkTmFtZShu
dWxsQXRvbSwgIm9sIiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJm9wdGdyb3VwUU5hbWUpIFF1
YWxpZmllZE5hbWUobnVsbEF0b20sICJvcHRncm91cCIsIHhodG1sTlMpOworICAgICAgICBuZXcg
KCZvcHRpb25RTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgIm9wdGlvbiIsIHhodG1sTlMp
OworICAgICAgICBuZXcgKCZwUU5hbWUpIFF1YWxpZmllZE5hbWUobnVsbEF0b20sICJwIiwgeGh0
bWxOUyk7CisgICAgICAgIG5ldyAoJnBhcmFtUU5hbWUpIFF1YWxpZmllZE5hbWUobnVsbEF0b20s
ICJwYXJhbSIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZwbGFpbnRleHRRTmFtZSkgUXVhbGlm
aWVkTmFtZShudWxsQXRvbSwgInBsYWludGV4dCIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZw
cmVRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgInByZSIsIHhodG1sTlMpOworICAgICAg
ICBuZXcgKCZxUU5hbWUpIFF1YWxpZmllZE5hbWUobnVsbEF0b20sICJxIiwgeGh0bWxOUyk7Cisg
ICAgICAgIG5ldyAoJnNRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgInMiLCB4aHRtbE5T
KTsKKyAgICAgICAgbmV3ICgmc2FtcFFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAic2Ft
cCIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZzY3JpcHRRTmFtZSkgUXVhbGlmaWVkTmFtZShu
dWxsQXRvbSwgInNjcmlwdCIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZzZWxlY3RRTmFtZSkg
UXVhbGlmaWVkTmFtZShudWxsQXRvbSwgInNlbGVjdCIsIHhodG1sTlMpOworICAgICAgICBuZXcg
KCZzbWFsbFFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAic21hbGwiLCB4aHRtbE5TKTsK
KyAgICAgICAgbmV3ICgmc3BhblFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAic3BhbiIs
IHhodG1sTlMpOworICAgICAgICBuZXcgKCZzdHJpa2VRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxs
QXRvbSwgInN0cmlrZSIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZzdHJvbmdRTmFtZSkgUXVh
bGlmaWVkTmFtZShudWxsQXRvbSwgInN0cm9uZyIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZz
dHlsZVFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAic3R5bGUiLCB4aHRtbE5TKTsKKyAg
ICAgICAgbmV3ICgmc3ViUU5hbWUpIFF1YWxpZmllZE5hbWUobnVsbEF0b20sICJzdWIiLCB4aHRt
bE5TKTsKKyAgICAgICAgbmV3ICgmc3VwUU5hbWUpIFF1YWxpZmllZE5hbWUobnVsbEF0b20sICJz
dXAiLCB4aHRtbE5TKTsKKyAgICAgICAgbmV3ICgmdGFibGVRTmFtZSkgUXVhbGlmaWVkTmFtZShu
dWxsQXRvbSwgInRhYmxlIiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJnRib2R5UU5hbWUpIFF1
YWxpZmllZE5hbWUobnVsbEF0b20sICJ0Ym9keSIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZ0
ZFFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAidGQiLCB4aHRtbE5TKTsKKyAgICAgICAg
bmV3ICgmdGV4dGFyZWFRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgInRleHRhcmVhIiwg
eGh0bWxOUyk7CisgICAgICAgIG5ldyAoJnRmb290UU5hbWUpIFF1YWxpZmllZE5hbWUobnVsbEF0
b20sICJ0Zm9vdCIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZ0aFFOYW1lKSBRdWFsaWZpZWRO
YW1lKG51bGxBdG9tLCAidGgiLCB4aHRtbE5TKTsKKyAgICAgICAgbmV3ICgmdGhlYWRRTmFtZSkg
UXVhbGlmaWVkTmFtZShudWxsQXRvbSwgInRoZWFkIiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAo
JnRpdGxlUU5hbWUpIFF1YWxpZmllZE5hbWUobnVsbEF0b20sICJ0aXRsZSIsIHhodG1sTlMpOwor
ICAgICAgICBuZXcgKCZ0clFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAidHIiLCB4aHRt
bE5TKTsKKyAgICAgICAgbmV3ICgmdHRRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgInR0
IiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJnVRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRv
bSwgInUiLCB4aHRtbE5TKTsKKyAgICAgICAgbmV3ICgmdWxRTmFtZSkgUXVhbGlmaWVkTmFtZShu
dWxsQXRvbSwgInVsIiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJnZhclFOYW1lKSBRdWFsaWZp
ZWROYW1lKG51bGxBdG9tLCAidmFyIiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJndiclFOYW1l
KSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAid2JyIiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAo
JnhtcFFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAieG1wIiwgeGh0bWxOUyk7CisgICAg
ICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKKyAgICB9CiB9CiAKIH0KSW5kZXg6IGtodG1sL2h0bWwv
aHRtbG5hbWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwv
aHRtbC9odG1sbmFtZXMuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yCmRpZmYgLXUgLXAgLXIx
LjIga2h0bWwvaHRtbC9odG1sbmFtZXMuaAotLS0ga2h0bWwvaHRtbC9odG1sbmFtZXMuaAkxNiBK
dW4gMjAwNSAyMDozMzo1NyAtMDAwMAkxLjIKKysrIGtodG1sL2h0bWwvaHRtbG5hbWVzLmgJOCBK
dWwgMjAwNSAwMzowNDoyMCAtMDAwMApAQCAtMjIsMTEyICsyMiwyNDEgQEAKICNpZm5kZWYgSFRN
TE5BTUVTX0gKICNkZWZpbmUgSFRNTE5BTUVTX0gKIAotI2luY2x1ZGUgInhtbC9kb21fZWxlbWVu
dGltcGwuaCIKKyNpbmNsdWRlICJkb21fcW5hbWUuaCIKIAogbmFtZXNwYWNlIERPTQogewogCiBj
bGFzcyBRdWFsaWZpZWROYW1lOwogCisvLyBUaGUgZ2xvYmFscy4KKy8vIERlZmluZSBleHRlcm5h
bCBnbG9iYWwgdmFyaWFibGVzIGZvciBhbGwgSFRNTCBuYW1lcyBhYm92ZS4KKyNpZiAhS0hUTUxf
SFRNTE5BTUVTX0hJREVfR0xPQkFMUworICAgIGV4dGVybiBjb25zdCBBdG9taWNTdHJpbmcgIHho
dG1sTmFtZXNwYWNlVVJJQXRvbTsKKyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSBhUU5h
bWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgYWJiclFOYW1lOworICAgIGV4dGVy
biBjb25zdCBRdWFsaWZpZWROYW1lIGFjcm9ueW1RTmFtZTsKKyAgICBleHRlcm4gY29uc3QgUXVh
bGlmaWVkTmFtZSBhZGRyZXNzUU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUg
YXBwbGV0UU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgYXJlYVFOYW1lOwor
ICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIGJRTmFtZTsKKyAgICBleHRlcm4gY29uc3Qg
UXVhbGlmaWVkTmFtZSBiYXNlUU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUg
YmFzZWZvbnRRTmFtZTsKKyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSBiZG9RTmFtZTsK
KyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSBiaWdRTmFtZTsKKyAgICBleHRlcm4gY29u
c3QgUXVhbGlmaWVkTmFtZSBibG9ja3F1b3RlUU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxp
ZmllZE5hbWUgYm9keVFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIGJyUU5h
bWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgYnV0dG9uUU5hbWU7CisgICAgZXh0
ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgY2FudmFzUU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1
YWxpZmllZE5hbWUgY2FwdGlvblFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1l
IGNlbnRlclFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIGNpdGVRTmFtZTsK
KyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSBjb2RlUU5hbWU7CisgICAgZXh0ZXJuIGNv
bnN0IFF1YWxpZmllZE5hbWUgY29sUU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5h
bWUgY29sZ3JvdXBRTmFtZTsKKyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSBkZFFOYW1l
OworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIGRlbFFOYW1lOworICAgIGV4dGVybiBj
b25zdCBRdWFsaWZpZWROYW1lIGRmblFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWRO
YW1lIGRpclFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIGRpdlFOYW1lOwor
ICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIGRsUU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0
IFF1YWxpZmllZE5hbWUgZHRRTmFtZTsKKyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSBl
bVFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIGVtYmVkUU5hbWU7CisgICAg
ZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgZmllbGRzZXRRTmFtZTsKKyAgICBleHRlcm4gY29u
c3QgUXVhbGlmaWVkTmFtZSBmb250UU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5h
bWUgZm9ybVFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIGZyYW1lUU5hbWU7
CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgZnJhbWVzZXRRTmFtZTsKKyAgICBleHRl
cm4gY29uc3QgUXVhbGlmaWVkTmFtZSBoZWFkUU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxp
ZmllZE5hbWUgaDFRTmFtZTsKKyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSBoMlFOYW1l
OworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIGgzUU5hbWU7CisgICAgZXh0ZXJuIGNv
bnN0IFF1YWxpZmllZE5hbWUgaDRRTmFtZTsKKyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFt
ZSBoNVFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIGg2UU5hbWU7CisgICAg
ZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgaHJRTmFtZTsKKyAgICBleHRlcm4gY29uc3QgUXVh
bGlmaWVkTmFtZSBodG1sUU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgaVFO
YW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIGlmcmFtZVFOYW1lOworICAgIGV4
dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIGltZ1FOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFs
aWZpZWROYW1lIGlucHV0UU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgaW5z
UU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgaXNpbmRleFFOYW1lOworICAg
IGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIGtiZFFOYW1lOworICAgIGV4dGVybiBjb25zdCBR
dWFsaWZpZWROYW1lIGtleWdlblFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1l
IGxhYmVsUU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgbGF5ZXJRTmFtZTsK
KyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSBsZWdlbmRRTmFtZTsKKyAgICBleHRlcm4g
Y29uc3QgUXVhbGlmaWVkTmFtZSBsaVFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWRO
YW1lIGxpbmtRTmFtZTsKKyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSBtYXBRTmFtZTsK
KyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSBtYXJxdWVlUU5hbWU7CisgICAgZXh0ZXJu
IGNvbnN0IFF1YWxpZmllZE5hbWUgbWVudVFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZp
ZWROYW1lIG1ldGFRTmFtZTsKKyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSBub2JyUU5h
bWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgbm9lbWJlZFFOYW1lOworICAgIGV4
dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIG5vZnJhbWVzUU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0
IFF1YWxpZmllZE5hbWUgbm9sYXllclFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWRO
YW1lIG5vc2NyaXB0UU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgb2JqZWN0
UU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgb2xRTmFtZTsKKyAgICBleHRl
cm4gY29uc3QgUXVhbGlmaWVkTmFtZSBvcHRncm91cFFOYW1lOworICAgIGV4dGVybiBjb25zdCBR
dWFsaWZpZWROYW1lIG9wdGlvblFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1l
IHBRTmFtZTsKKyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSBwYXJhbVFOYW1lOworICAg
IGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIHBsYWludGV4dFFOYW1lOworICAgIGV4dGVybiBj
b25zdCBRdWFsaWZpZWROYW1lIHByZVFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWRO
YW1lIHFRTmFtZTsKKyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSBzUU5hbWU7CisgICAg
ZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgc2FtcFFOYW1lOworICAgIGV4dGVybiBjb25zdCBR
dWFsaWZpZWROYW1lIHNjcmlwdFFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1l
IHNlbGVjdFFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIHNtYWxsUU5hbWU7
CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgc3BhblFOYW1lOworICAgIGV4dGVybiBj
b25zdCBRdWFsaWZpZWROYW1lIHN0cmlrZVFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZp
ZWROYW1lIHN0cm9uZ1FOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIHN0eWxl
UU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgc3ViUU5hbWU7CisgICAgZXh0
ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgc3VwUU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxp
ZmllZE5hbWUgdGFibGVRTmFtZTsKKyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSB0Ym9k
eVFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIHRkUU5hbWU7CisgICAgZXh0
ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgdGV4dGFyZWFRTmFtZTsKKyAgICBleHRlcm4gY29uc3Qg
UXVhbGlmaWVkTmFtZSB0Zm9vdFFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1l
IHRoUU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgdGhlYWRRTmFtZTsKKyAg
ICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSB0aXRsZVFOYW1lOworICAgIGV4dGVybiBjb25z
dCBRdWFsaWZpZWROYW1lIHRyUU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUg
dHRRTmFtZTsKKyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSB1UU5hbWU7CisgICAgZXh0
ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgdWxRTmFtZTsKKyAgICBleHRlcm4gY29uc3QgUXVhbGlm
aWVkTmFtZSB2YXJRTmFtZTsKKyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSB3YnJRTmFt
ZTsKKyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSB4bXBRTmFtZTsKKworI2VuZGlmCisK
IGNsYXNzIEhUTUxOYW1lcwogewogcHVibGljOgorI2lmICFLSFRNTF9IVE1MTkFNRVNfSElERV9H
TE9CQUxTCiAgICAgLy8gVGhlIG5hbWVzcGFjZSBVUkkuCi0gICAgc3RhdGljIGNvbnN0IEF0b21p
Y1N0cmluZyYgeGh0bWxOYW1lc3BhY2VVUkkoKTsKKyAgICBzdGF0aWMgY29uc3QgQXRvbWljU3Ry
aW5nJiB4aHRtbE5hbWVzcGFjZVVSSSgpIHsgcmV0dXJuIHhodG1sTmFtZXNwYWNlVVJJQXRvbTsg
fQogICAgIAotICAgIC8vIEZ1bGwgdGFnIG5hbWVzLgotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZp
ZWROYW1lJiBhKCk7Ci0gICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGFkZHJlc3MoKTsK
LSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXBwbGV0KCk7Ci0gICAgc3RhdGljIGNv
bnN0IFF1YWxpZmllZE5hbWUmIGFyZWEoKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFt
ZSYgYigpOwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBiYXNlKCk7Ci0gICAgc3Rh
dGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGJhc2Vmb250KCk7Ci0gICAgc3RhdGljIGNvbnN0IFF1
YWxpZmllZE5hbWUmIGJpZygpOwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBibG9j
a3F1b3RlKCk7Ci0gICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGJvZHkoKTsKLSAgICBz
dGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgYnIoKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlm
aWVkTmFtZSYgYnV0dG9uKCk7Ci0gICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGNhbnZh
cygpOwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBjYXB0aW9uKCk7Ci0gICAgc3Rh
dGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGNlbnRlcigpOwotICAgIHN0YXRpYyBjb25zdCBRdWFs
aWZpZWROYW1lJiBjb2RlKCk7Ci0gICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGNvbCgp
OwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBjb2xncm91cCgpOwotICAgIHN0YXRp
YyBjb25zdCBRdWFsaWZpZWROYW1lJiBkZCgpOwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWRO
YW1lJiBkZWwoKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgZGZuKCk7Ci0gICAg
c3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGRpcigpOwotICAgIHN0YXRpYyBjb25zdCBRdWFs
aWZpZWROYW1lJiBkaXYoKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgZGwoKTsK
LSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgZHQoKTsKLSAgICBzdGF0aWMgY29uc3Qg
UXVhbGlmaWVkTmFtZSYgZW0oKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgZW1i
ZWQoKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgZmllbGRzZXQoKTsKLSAgICBz
dGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgZm9udCgpOwotICAgIHN0YXRpYyBjb25zdCBRdWFs
aWZpZWROYW1lJiBmb3JtKCk7Ci0gICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGZyYW1l
KCk7Ci0gICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGZyYW1lc2V0KCk7Ci0gICAgc3Rh
dGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGhlYWQoKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlm
aWVkTmFtZSYgaDEoKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgaDIoKTsKLSAg
ICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgaDMoKTsKLSAgICBzdGF0aWMgY29uc3QgUXVh
bGlmaWVkTmFtZSYgaDQoKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgaDUoKTsK
LSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgaDYoKTsKLSAgICBzdGF0aWMgY29uc3Qg
UXVhbGlmaWVkTmFtZSYgaHIoKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgaHRt
bCgpOwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBpKCk7Ci0gICAgc3RhdGljIGNv
bnN0IFF1YWxpZmllZE5hbWUmIGlmcmFtZSgpOwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWRO
YW1lJiBpbWcoKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgaW5wdXQoKTsKLSAg
ICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgaW5zKCk7Ci0gICAgc3RhdGljIGNvbnN0IFF1
YWxpZmllZE5hbWUmIGlzaW5kZXgoKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYg
a2JkKCk7Ci0gICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGtleWdlbigpOwotICAgIHN0
YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBsYWJlbCgpOwotICAgIHN0YXRpYyBjb25zdCBRdWFs
aWZpZWROYW1lJiBsZWdlbmQoKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgbGko
KTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgbGluaygpOwotICAgIHN0YXRpYyBj
b25zdCBRdWFsaWZpZWROYW1lJiBtYXAoKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFt
ZSYgbWFycXVlZSgpOwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBtZW51KCk7Ci0g
ICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIG1ldGEoKTsKLSAgICBzdGF0aWMgY29uc3Qg
UXVhbGlmaWVkTmFtZSYgbm9lbWJlZCgpOwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1l
JiBub2ZyYW1lcygpOwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBub3NjcmlwdCgp
OwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBvYmplY3QoKTsKLSAgICBzdGF0aWMg
Y29uc3QgUXVhbGlmaWVkTmFtZSYgb2woKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFt
ZSYgb3B0Z3JvdXAoKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgb3B0aW9uKCk7
Ci0gICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIHAoKTsKLSAgICBzdGF0aWMgY29uc3Qg
UXVhbGlmaWVkTmFtZSYgcGFyYW0oKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYg
cHJlKCk7Ci0gICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIHEoKTsKLSAgICBzdGF0aWMg
Y29uc3QgUXVhbGlmaWVkTmFtZSYgcygpOwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1l
JiBzYW1wKCk7Ci0gICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIHNjcmlwdCgpOwotICAg
IHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBzZWxlY3QoKTsKLSAgICBzdGF0aWMgY29uc3Qg
UXVhbGlmaWVkTmFtZSYgc21hbGwoKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYg
c3RyaWtlKCk7Ci0gICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIHN0cm9uZygpOwotICAg
IHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBzdHlsZSgpOwotICAgIHN0YXRpYyBjb25zdCBR
dWFsaWZpZWROYW1lJiB0YWJsZSgpOwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiB0
Ym9keSgpOwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiB0ZCgpOwotICAgIHN0YXRp
YyBjb25zdCBRdWFsaWZpZWROYW1lJiB0ZXh0YXJlYSgpOwotICAgIHN0YXRpYyBjb25zdCBRdWFs
aWZpZWROYW1lJiB0Zm9vdCgpOwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiB0aCgp
OwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiB0aGVhZCgpOwotICAgIHN0YXRpYyBj
b25zdCBRdWFsaWZpZWROYW1lJiB0aXRsZSgpOwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWRO
YW1lJiB0cigpOwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiB0dCgpOwotICAgIHN0
YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiB1KCk7Ci0gICAgc3RhdGljIGNvbnN0IFF1YWxpZmll
ZE5hbWUmIHVsKCk7Ci0gICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIHZhcigpOwotICAg
IHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiB4bXAoKTsKKy8vIEZ1bGwgdGFnIG5hbWVzLgor
I2RlZmluZSBERUZJTkVfR0VUVEVSKG5hbWUpIFwKKyAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVk
TmFtZSYgbmFtZSgpIHsgcmV0dXJuIG5hbWUgIyMgUU5hbWU7IH0KKworICAgIERFRklORV9HRVRU
RVIoYSkKKyAgICBERUZJTkVfR0VUVEVSKGFiYnIpCisgICAgREVGSU5FX0dFVFRFUihhY3Jvbnlt
KQorICAgIERFRklORV9HRVRURVIoYWRkcmVzcykKKyAgICBERUZJTkVfR0VUVEVSKGFwcGxldCkK
KyAgICBERUZJTkVfR0VUVEVSKGFyZWEpCisgICAgREVGSU5FX0dFVFRFUihiKQorICAgIERFRklO
RV9HRVRURVIoYmFzZSkKKyAgICBERUZJTkVfR0VUVEVSKGJhc2Vmb250KQorICAgIERFRklORV9H
RVRURVIoYmRvKQorICAgIERFRklORV9HRVRURVIoYmlnKQorICAgIERFRklORV9HRVRURVIoYmxv
Y2txdW90ZSkKKyAgICBERUZJTkVfR0VUVEVSKGJvZHkpCisgICAgREVGSU5FX0dFVFRFUihicikK
KyAgICBERUZJTkVfR0VUVEVSKGJ1dHRvbikKKyAgICBERUZJTkVfR0VUVEVSKGNhbnZhcykKKyAg
ICBERUZJTkVfR0VUVEVSKGNhcHRpb24pCisgICAgREVGSU5FX0dFVFRFUihjZW50ZXIpCisgICAg
REVGSU5FX0dFVFRFUihjaXRlKQorICAgIERFRklORV9HRVRURVIoY29kZSkKKyAgICBERUZJTkVf
R0VUVEVSKGNvbCkKKyAgICBERUZJTkVfR0VUVEVSKGNvbGdyb3VwKQorICAgIERFRklORV9HRVRU
RVIoZGQpCisgICAgREVGSU5FX0dFVFRFUihkZWwpCisgICAgREVGSU5FX0dFVFRFUihkZm4pCisg
ICAgREVGSU5FX0dFVFRFUihkaXIpCisgICAgREVGSU5FX0dFVFRFUihkaXYpCisgICAgREVGSU5F
X0dFVFRFUihkbCkKKyAgICBERUZJTkVfR0VUVEVSKGR0KQorICAgIERFRklORV9HRVRURVIoZW0p
CisgICAgREVGSU5FX0dFVFRFUihlbWJlZCkKKyAgICBERUZJTkVfR0VUVEVSKGZpZWxkc2V0KQor
ICAgIERFRklORV9HRVRURVIoZm9udCkKKyAgICBERUZJTkVfR0VUVEVSKGZvcm0pCisgICAgREVG
SU5FX0dFVFRFUihmcmFtZSkKKyAgICBERUZJTkVfR0VUVEVSKGZyYW1lc2V0KQorICAgIERFRklO
RV9HRVRURVIoaGVhZCkKKyAgICBERUZJTkVfR0VUVEVSKGgxKQorICAgIERFRklORV9HRVRURVIo
aDIpCisgICAgREVGSU5FX0dFVFRFUihoMykKKyAgICBERUZJTkVfR0VUVEVSKGg0KQorICAgIERF
RklORV9HRVRURVIoaDUpCisgICAgREVGSU5FX0dFVFRFUihoNikKKyAgICBERUZJTkVfR0VUVEVS
KGhyKQorICAgIERFRklORV9HRVRURVIoaHRtbCkKKyAgICBERUZJTkVfR0VUVEVSKGkpCisgICAg
REVGSU5FX0dFVFRFUihpZnJhbWUpCisgICAgREVGSU5FX0dFVFRFUihpbWcpCisgICAgREVGSU5F
X0dFVFRFUihpbnB1dCkKKyAgICBERUZJTkVfR0VUVEVSKGlucykKKyAgICBERUZJTkVfR0VUVEVS
KGlzaW5kZXgpCisgICAgREVGSU5FX0dFVFRFUihrYmQpCisgICAgREVGSU5FX0dFVFRFUihrZXln
ZW4pCisgICAgREVGSU5FX0dFVFRFUihsYWJlbCkKKyAgICBERUZJTkVfR0VUVEVSKGxheWVyKQor
ICAgIERFRklORV9HRVRURVIobGVnZW5kKQorICAgIERFRklORV9HRVRURVIobGkpCisgICAgREVG
SU5FX0dFVFRFUihsaW5rKQorICAgIERFRklORV9HRVRURVIobWFwKQorICAgIERFRklORV9HRVRU
RVIobWFycXVlZSkKKyAgICBERUZJTkVfR0VUVEVSKG1lbnUpCisgICAgREVGSU5FX0dFVFRFUiht
ZXRhKQorICAgIERFRklORV9HRVRURVIobm9icikKKyAgICBERUZJTkVfR0VUVEVSKG5vZW1iZWQp
CisgICAgREVGSU5FX0dFVFRFUihub2ZyYW1lcykKKyAgICBERUZJTkVfR0VUVEVSKG5vbGF5ZXIp
CisgICAgREVGSU5FX0dFVFRFUihub3NjcmlwdCkKKyAgICBERUZJTkVfR0VUVEVSKG9iamVjdCkK
KyAgICBERUZJTkVfR0VUVEVSKG9sKQorICAgIERFRklORV9HRVRURVIob3B0Z3JvdXApCisgICAg
REVGSU5FX0dFVFRFUihvcHRpb24pCisgICAgREVGSU5FX0dFVFRFUihwKQorICAgIERFRklORV9H
RVRURVIocGFyYW0pCisgICAgREVGSU5FX0dFVFRFUihwbGFpbnRleHQpCisgICAgREVGSU5FX0dF
VFRFUihwcmUpCisgICAgREVGSU5FX0dFVFRFUihxKQorICAgIERFRklORV9HRVRURVIocykKKyAg
ICBERUZJTkVfR0VUVEVSKHNhbXApCisgICAgREVGSU5FX0dFVFRFUihzY3JpcHQpCisgICAgREVG
SU5FX0dFVFRFUihzZWxlY3QpCisgICAgREVGSU5FX0dFVFRFUihzbWFsbCkKKyAgICBERUZJTkVf
R0VUVEVSKHNwYW4pCisgICAgREVGSU5FX0dFVFRFUihzdHJpa2UpCisgICAgREVGSU5FX0dFVFRF
UihzdHJvbmcpCisgICAgREVGSU5FX0dFVFRFUihzdHlsZSkKKyAgICBERUZJTkVfR0VUVEVSKHN1
YikKKyAgICBERUZJTkVfR0VUVEVSKHN1cCkKKyAgICBERUZJTkVfR0VUVEVSKHRhYmxlKQorICAg
IERFRklORV9HRVRURVIodGJvZHkpCisgICAgREVGSU5FX0dFVFRFUih0ZCkKKyAgICBERUZJTkVf
R0VUVEVSKHRleHRhcmVhKQorICAgIERFRklORV9HRVRURVIodGZvb3QpCisgICAgREVGSU5FX0dF
VFRFUih0aCkKKyAgICBERUZJTkVfR0VUVEVSKHRoZWFkKQorICAgIERFRklORV9HRVRURVIodGl0
bGUpCisgICAgREVGSU5FX0dFVFRFUih0cikKKyAgICBERUZJTkVfR0VUVEVSKHR0KQorICAgIERF
RklORV9HRVRURVIodSkKKyAgICBERUZJTkVfR0VUVEVSKHVsKQorICAgIERFRklORV9HRVRURVIo
dmFyKQorICAgIERFRklORV9HRVRURVIod2JyKQorICAgIERFRklORV9HRVRURVIoeG1wKQogCiAg
ICAgLy8gQXR0cmlidXRlIG5hbWVzLgorI2VuZGlmCisKKyAgICAvLyBJbml0IHJvdXRpbmUKKyAg
ICBzdGF0aWMgdm9pZCBpbml0KCk7CiB9OwogCiB9CkluZGV4OiBraHRtbC9odG1sL2h0bWxwYXJz
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwv
aHRtbHBhcnNlci5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuOTYKZGlmZiAtdSAtcCAtcjEu
OTYga2h0bWwvaHRtbC9odG1scGFyc2VyLmNwcAotLS0ga2h0bWwvaHRtbC9odG1scGFyc2VyLmNw
cAkxMSBNYXkgMjAwNSAwMDo1ODoyOCAtMDAwMAkxLjk2CisrKyBraHRtbC9odG1sL2h0bWxwYXJz
ZXIuY3BwCTggSnVsIDIwMDUgMDM6MDQ6MjEgLTAwMDAKQEAgLTQ0LDkgKzQ0LDEyIEBACiAjaW5j
bHVkZSAiaHRtbC9odG1sX21pc2NpbXBsLmgiCiAjaW5jbHVkZSAiaHRtbC9odG1sX3RhYmxlaW1w
bC5oIgogI2luY2x1ZGUgImh0bWwvaHRtbF9vYmplY3RpbXBsLmgiCisjaW5jbHVkZSAiaHRtbGZh
Y3RvcnkuaCIKICNpbmNsdWRlICJ4bWwvZG9tX3RleHRpbXBsLmgiCiAjaW5jbHVkZSAieG1sL2Rv
bV9ub2RlaW1wbC5oIgogI2luY2x1ZGUgIm1pc2MvaHRtbGhhc2hlcy5oIgorI2luY2x1ZGUgIm1p
c2MvbWFpbl90aHJlYWRfbWFsbG9jLmgiCisjaW5jbHVkZSAibWlzYy9oYXNoc2V0LmgiCiAjaW5j
bHVkZSAiaHRtbC9odG1sdG9rZW5pemVyLmgiCiAjaW5jbHVkZSAia2h0bWx2aWV3LmgiCiAjaW5j
bHVkZSAia2h0bWxfcGFydC5oIgpAQCAtNTUsNiArNTgsOCBAQAogCiAjaW5jbHVkZSAicmVuZGVy
aW5nL3JlbmRlcl9vYmplY3QuaCIKIAorI2luY2x1ZGUgIm1pc2MvcG9pbnRlcmhhc2guaCIKKwog
I2luY2x1ZGUgPGtkZWJ1Zy5oPgogI2luY2x1ZGUgPGtsb2NhbGUuaD4KIApAQCAtNjksMjQgKzc0
LDI2IEBAIHVzaW5nIG5hbWVzcGFjZSBraHRtbDsKIGNsYXNzIEhUTUxTdGFja0VsZW0KIHsKIHB1
YmxpYzoKLSAgICBIVE1MU3RhY2tFbGVtKCBpbnQgX2lkLAotICAgICAgICAgICAgICAgICAgIGlu
dCBfbGV2ZWwsCi0gICAgICAgICAgICAgICAgICAgRE9NOjpOb2RlSW1wbCAqX25vZGUsCi0gICAg
ICAgICAgICAgICAgICAgSFRNTFN0YWNrRWxlbSAqIF9uZXh0CisgICAgSFRNTFN0YWNrRWxlbShj
b25zdCBBdG9taWNTdHJpbmcmIF90YWdOYW1lLAorICAgICAgICAgICAgICAgICAgaW50IF9sZXZl
bCwKKyAgICAgICAgICAgICAgICAgIERPTTo6Tm9kZUltcGwgKl9ub2RlLAorICAgICAgICAgICAg
ICAgICAgSFRNTFN0YWNrRWxlbSAqIF9uZXh0CiAgICAgICAgICkKICAgICAgICAgOgotICAgICAg
ICBpZChfaWQpLAorICAgICAgICB0YWdOYW1lKF90YWdOYW1lKSwKICAgICAgICAgbGV2ZWwoX2xl
dmVsKSwKICAgICAgICAgc3RyYXlUYWJsZUNvbnRlbnQoZmFsc2UpLAogICAgICAgICBub2RlKF9u
b2RlKSwKICAgICAgICAgbmV4dChfbmV4dCkKICAgICAgICAgeyB9CiAKLSAgICBpbnQgICAgICAg
aWQ7Ci0gICAgaW50ICAgICAgIGxldmVsOwotICAgIGJvb2wgICAgICBzdHJheVRhYmxlQ29udGVu
dDsKLSAgICBOb2RlSW1wbCAqbm9kZTsKLSAgICBIVE1MU3RhY2tFbGVtICpuZXh0OworICAgIE1B
SU5fVEhSRUFEX0FMTE9DQVRFRDsKKworICAgIEF0b21pY1N0cmluZyB0YWdOYW1lOworICAgIGlu
dCBsZXZlbDsKKyAgICBib29sIHN0cmF5VGFibGVDb250ZW50OworICAgIE5vZGVJbXBsKiBub2Rl
OworICAgIEhUTUxTdGFja0VsZW0qIG5leHQ7CiB9OwogCiAvKioKQEAgLTExMiwxNCArMTE5LDkg
QEAgcHVibGljOgogICogICAgZWxlbWVudCBvciBpZ25vcmUgdGhlIHRhZy4KICAqCiAgKi8KLUtI
VE1MUGFyc2VyOjpLSFRNTFBhcnNlcihLSFRNTFZpZXcgKl9wYXJlbnQsIERvY3VtZW50UHRyICpk
b2MsIGJvb2wgaW5jbHVkZXNDb21tZW50cykgCitIVE1MUGFyc2VyOjpIVE1MUGFyc2VyKEtIVE1M
VmlldyAqX3BhcmVudCwgRG9jdW1lbnRQdHIgKmRvYywgYm9vbCBpbmNsdWRlc0NvbW1lbnRzKSAK
ICAgICA6IGN1cnJlbnQoMCksIGN1cnJlbnRJc1JlZmVyZW5jZWQoZmFsc2UpLCBpbmNsdWRlc0Nv
bW1lbnRzSW5ET00oaW5jbHVkZXNDb21tZW50cykKIHsKLSAgICAvL2tkRGVidWcoIDYwMzUgKSA8
PCAicGFyc2VyIGNvbnN0cnVjdG9yIiA8PCBlbmRsOwotI2lmIFNQRUVEX0RFQlVHID4gMAotICAg
IHF0LnN0YXJ0KCk7Ci0jZW5kaWYKLQogICAgIEhUTUxXaWRnZXQgICAgPSBfcGFyZW50OwogICAg
IGRvY3VtZW50ICAgICAgPSBkb2M7CiAgICAgZG9jdW1lbnQtPnJlZigpOwpAQCAtMTI5LDcgKzEz
MSw3IEBAIEtIVE1MUGFyc2VyOjpLSFRNTFBhcnNlcihLSFRNTFZpZXcgKl9wYXIKICAgICByZXNl
dCgpOwogfQogCi1LSFRNTFBhcnNlcjo6S0hUTUxQYXJzZXIoRE9NOjpEb2N1bWVudEZyYWdtZW50
SW1wbCAqaSwgRG9jdW1lbnRQdHIgKmRvYywgYm9vbCBpbmNsdWRlc0NvbW1lbnRzKQorSFRNTFBh
cnNlcjo6SFRNTFBhcnNlcihET006OkRvY3VtZW50RnJhZ21lbnRJbXBsICppLCBEb2N1bWVudFB0
ciAqZG9jLCBib29sIGluY2x1ZGVzQ29tbWVudHMpCiAgICAgOiBjdXJyZW50KDApLCBjdXJyZW50
SXNSZWZlcmVuY2VkKGZhbHNlKSwgaW5jbHVkZXNDb21tZW50c0luRE9NKGluY2x1ZGVzQ29tbWVu
dHMpCiB7CiAgICAgSFRNTFdpZGdldCA9IDA7CkBAIC0xNDMsMTIgKzE0NSw4IEBAIEtIVE1MUGFy
c2VyOjpLSFRNTFBhcnNlcihET006OkRvY3VtZW50RnIKICAgICBpbkJvZHkgPSB0cnVlOwogfQog
Ci1LSFRNTFBhcnNlcjo6fktIVE1MUGFyc2VyKCkKK0hUTUxQYXJzZXI6On5IVE1MUGFyc2VyKCkK
IHsKLSNpZiBTUEVFRF9ERUJVRyA+IDAKLSAgICBrZERlYnVnKCApIDw8ICJUSU1FOiBwYXJzaW5n
IHRpbWUgd2FzID0gIiA8PCBxdC5lbGFwc2VkKCkgPDwgZW5kbDsKLSNlbmRpZgotCiAgICAgZnJl
ZUJsb2NrKCk7CiAKICAgICBzZXRDdXJyZW50KDApOwpAQCAtMTU5LDE1ICsxNTcsMTIgQEAgS0hU
TUxQYXJzZXI6On5LSFRNTFBhcnNlcigpCiAgICAgICAgIGlzaW5kZXgtPmRlcmVmKCk7CiB9CiAK
LXZvaWQgS0hUTUxQYXJzZXI6OnJlc2V0KCkKK3ZvaWQgSFRNTFBhcnNlcjo6cmVzZXQoKQogewog
ICAgIHNldEN1cnJlbnQoZG9jKCkpOwogCiAgICAgZnJlZUJsb2NrKCk7CiAKLSAgICAvLyBiZWZv
cmUgcGFyc2luZywgbm8gdGFncyBhcmUgZm9yYmlkZGVuCi0gICAgbWVtc2V0KGZvcmJpZGRlblRh
ZywgMCwgc2l6ZW9mKGZvcmJpZGRlblRhZykpOwotCiAgICAgaW5Cb2R5ID0gZmFsc2U7CiAgICAg
aGF2ZUZyYW1lU2V0ID0gZmFsc2U7CiAgICAgaGF2ZUNvbnRlbnQgPSBmYWxzZTsKQEAgLTE4MCwx
MCArMTc1LDEwIEBAIHZvaWQgS0hUTUxQYXJzZXI6OnJlc2V0KCkKICAgICBlbmQgPSBmYWxzZTsK
ICAgICBpc2luZGV4ID0gMDsKICAgICAKLSAgICBkaXNjYXJkX3VudGlsID0gMDsKKyAgICBkaXNj
YXJkX3VudGlsID0gbnVsbEF0b207CiB9CiAKLXZvaWQgS0hUTUxQYXJzZXI6OnNldEN1cnJlbnQo
RE9NOjpOb2RlSW1wbCAqbmV3Q3VycmVudCkgCit2b2lkIEhUTUxQYXJzZXI6OnNldEN1cnJlbnQo
RE9NOjpOb2RlSW1wbCAqbmV3Q3VycmVudCkgCiB7CiAgICAgYm9vbCBuZXdDdXJyZW50SXNSZWZl
cmVuY2VkID0gbmV3Q3VycmVudCAmJiBuZXdDdXJyZW50ICE9IGRvYygpOwogICAgIGlmIChuZXdD
dXJyZW50SXNSZWZlcmVuY2VkKSAKQEAgLTE5NCwxNDQgKzE4OSwxMDggQEAgdm9pZCBLSFRNTFBh
cnNlcjo6c2V0Q3VycmVudChET006Ok5vZGVJbQogICAgIGN1cnJlbnRJc1JlZmVyZW5jZWQgPSBu
ZXdDdXJyZW50SXNSZWZlcmVuY2VkOwogfQogCi12b2lkIEtIVE1MUGFyc2VyOjpwYXJzZVRva2Vu
KFRva2VuICp0KQordm9pZCBIVE1MUGFyc2VyOjpwYXJzZVRva2VuKFRva2VuICp0KQogewotICAg
IGlmKGRpc2NhcmRfdW50aWwpIHsKLSAgICAgICAgaWYodC0+aWQgPT0gZGlzY2FyZF91bnRpbCkK
LSAgICAgICAgICAgIGRpc2NhcmRfdW50aWwgPSAwOworICAgIGlmICghZGlzY2FyZF91bnRpbC5p
c051bGwoKSkgeworICAgICAgICBpZiAodC0+dGFnTmFtZSA9PSBkaXNjYXJkX3VudGlsICYmICF0
LT5iZWdpblRhZykKKyAgICAgICAgICAgIGRpc2NhcmRfdW50aWwgPSBudWxsQXRvbTsKIAogICAg
ICAgICAvLyBkbyBub3Qgc2tpcCA8L2lmcmFtZT4KLSAgICAgICAgaWYgKCBkaXNjYXJkX3VudGls
IHx8IGN1cnJlbnQtPmlkKCkgKyBJRF9DTE9TRV9UQUcgIT0gdC0+aWQgKQorICAgICAgICBpZiAo
IWRpc2NhcmRfdW50aWwuaXNOdWxsKCkgfHwgKGN1cnJlbnQtPmxvY2FsTmFtZSgpICE9IHQtPnRh
Z05hbWUpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotI2lmZGVmIFBBUlNFUl9ERUJV
RwotICAgIGtkRGVidWcoIDYwMzUgKSA8PCAiXG5cbj09PiBwYXJzZXI6IHByb2Nlc3NpbmcgdG9r
ZW4gIiA8PCBnZXRUYWdOYW1lKHQtPmlkKS5zdHJpbmcoKSA8PCAiKCIgPDwgdC0+aWQgPDwgIiki
Ci0gICAgICAgICAgICAgICAgICAgIDw8ICIgY3VycmVudCA9ICIgPDwgZ2V0VGFnTmFtZShjdXJy
ZW50LT5pZCgpKS5zdHJpbmcoKSA8PCAiKCIgPDwgY3VycmVudC0+aWQoKSA8PCAiKSIgPDwgZW5k
bDsKLSAgICBrZERlYnVnKDYwMzUpIDw8ICIgaW5Cb2R5PSIgPDwgaW5Cb2R5IDw8ICIgaGF2ZUZy
YW1lU2V0PSIgPDwgaGF2ZUZyYW1lU2V0IDw8IGVuZGw7Ci0jZW5kaWYKKyAgICAvLyBBcHBhcmVu
dGx5IHNvbWUgc2l0ZXMgdXNlIDwvYnI+IGluc3RlYWQgb2YgPGJyPi4gIEJlIGNvbXBhdGlibGUg
d2l0aCBJRSBhbmQgRmlyZWZveCBhbmQgdHJlYXQgdGhpcyBsaWtlIDxicj4uCisgICAgaWYgKHQt
PmlzQ2xvc2VUYWcoSFRNTE5hbWVzOjpicigpKSAmJiBkb2MoKS0+aW5Db21wYXRNb2RlKCkpCisg
ICAgICAgIHQtPmJlZ2luVGFnID0gdHJ1ZTsKIAotICAgIC8vIGhvbHkgc2hpdC4gYXBwYXJlbnRs
eSBzb21lIHNpdGVzIHVzZSA8L2JyPiBpbnN0ZWFkIG9mIDxicj4KLSAgICAvLyBiZSBjb21wYXRp
YmxlIHdpdGggSUUgYW5kIE5TCi0gICAgaWYgKHQtPmlkID09IElEX0JSICsgSURfQ0xPU0VfVEFH
ICYmIGRvYygpLT5pbkNvbXBhdE1vZGUoKSkKLSAgICAgICAgdC0+aWQgPSBJRF9CUjsKLQotICAg
IGlmICh0LT5pZCA+IElEX0NMT1NFX1RBRykKLSAgICB7CisgICAgaWYgKCF0LT5iZWdpblRhZykg
ewogICAgICAgICBwcm9jZXNzQ2xvc2VUYWcodCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
ICAgICAvLyBpZ25vcmUgc3BhY2VzLCBpZiB3ZSdyZSBub3QgaW5zaWRlIGEgcGFyYWdyYXBoIG9y
IG90aGVyIGlubGluZSBjb2RlCi0gICAgaWYoIHQtPmlkID09IElEX1RFWFQgJiYgdC0+dGV4dCAp
IHsKLSAgICAgICAgaWYoaW5Cb2R5ICYmICFza2lwTW9kZSgpICYmIGN1cnJlbnQtPmlkKCkgIT0g
SURfU1RZTEUgCi0gICAgICAgICAgICAmJiBjdXJyZW50LT5pZCgpICE9IElEX1RJVExFICYmIGN1
cnJlbnQtPmlkKCkgIT0gSURfU0NSSVBUICYmCi0gICAgICAgICAgICAhdC0+dGV4dC0+Y29udGFp
bnNPbmx5V2hpdGVzcGFjZSgpKSAKKyAgICBpZiAodC0+dGFnTmFtZSA9PSB0ZXh0QXRvbSAmJiB0
LT50ZXh0KSB7CisgICAgICAgIGlmIChpbkJvZHkgJiYgIXNraXBNb2RlKCkgJiYgY3VycmVudC0+
bG9jYWxOYW1lKCkgIT0gSFRNTE5hbWVzOjpzdHlsZSgpICYmIGN1cnJlbnQtPmxvY2FsTmFtZSgp
ICE9IEhUTUxOYW1lczo6dGl0bGUoKSAmJiAKKyAgICAgICAgICAgIGN1cnJlbnQtPmxvY2FsTmFt
ZSgpICE9IEhUTUxOYW1lczo6c2NyaXB0KCkgJiYgIXQtPnRleHQtPmNvbnRhaW5zT25seVdoaXRl
c3BhY2UoKSkgCiAgICAgICAgICAgICBoYXZlQ29udGVudCA9IHRydWU7Ci0jaWZkZWYgUEFSU0VS
X0RFQlVHCi0gICAgICAgIGtkRGVidWcoNjAzNSkgPDwgImxlbmd0aD0iPDwgdC0+dGV4dC0+bCA8
PCAiIHRleHQ9JyIgPDwgUUNvbnN0U3RyaW5nKHQtPnRleHQtPnMsIHQtPnRleHQtPmwpLnN0cmlu
ZygpIDw8ICInIiA8PCBlbmRsOwotI2VuZGlmCiAgICAgfQogCi0gICAgTm9kZUltcGwgKm4gPSBn
ZXRFbGVtZW50KHQpOworICAgIE5vZGVJbXBsICpuID0gZ2V0Tm9kZSh0KTsKICAgICAvLyBqdXN0
IHRvIGJlIHN1cmUsIGFuZCB0byBjYXRjaCBjdXJyZW50bHkgdW5pbXBsZW1lbnRlZCBzdHVmZgot
ICAgIGlmKCFuKQorICAgIGlmICghbikKICAgICAgICAgcmV0dXJuOwogCiAgICAgU2hhcmVkUHRy
PE5vZGVJbXBsPiBwcm90ZWN0Tm9kZShuKTsKIAogICAgIC8vIHNldCBhdHRyaWJ1dGVzCi0gICAg
aWYobi0+aXNFbGVtZW50Tm9kZSgpKQotICAgIHsKLSAgICAgICAgRWxlbWVudEltcGwgKmUgPSBz
dGF0aWNfY2FzdDxFbGVtZW50SW1wbCAqPihuKTsKKyAgICBpZiAobi0+aXNIVE1MRWxlbWVudCgp
KSB7CisgICAgICAgIEhUTUxFbGVtZW50SW1wbCAqZSA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50
SW1wbCo+KG4pOwogICAgICAgICBlLT5zZXRBdHRyaWJ1dGVNYXAodC0+YXR0cnMpOwogCiAgICAg
ICAgIC8vIHRha2UgY2FyZSBvZiBvcHRpb25hbCBjbG9zZSB0YWdzCi0gICAgICAgIGlmKGVuZFRh
Z1JlcXVpcmVtZW50KGUtPmlkKCkpID09IERPTTo6T1BUSU9OQUwpCi0gICAgICAgICAgICBwb3BC
bG9jayh0LT5pZCk7CisgICAgICAgIGlmIChlLT5lbmRUYWdSZXF1aXJlbWVudCgpID09IFRhZ1N0
YXR1c09wdGlvbmFsKQorICAgICAgICAgICAgcG9wQmxvY2sodC0+dGFnTmFtZSk7CiAgICAgICAg
ICAgICAKLSAgICAgICAgaWYgKGlzSGVhZGVyVGFnKHQtPmlkKSkKKyAgICAgICAgaWYgKGlzSGVh
ZGVyVGFnKHQtPnRhZ05hbWUpKQogICAgICAgICAgICAgLy8gRG8gbm90IGFsbG93IHR3byBoZWFk
ZXIgdGFncyB0byBiZSBuZXN0ZWQgaWYgdGhlIGludGVydmVuaW5nIHRhZ3MgYXJlIGlubGluZXMu
CiAgICAgICAgICAgICBwb3BOZXN0ZWRIZWFkZXJUYWcoKTsKICAgICB9CiAKLSAgICAvLyBpZiB0
aGlzIHRhZyBpcyBmb3JiaWRkZW4gaW5zaWRlIHRoZSBjdXJyZW50IGNvbnRleHQsIHBvcAotICAg
IC8vIGJsb2NrcyB1bnRpbCB3ZSBhcmUgYWxsb3dlZCB0byBhZGQgaXQuLi4KLSAgICB3aGlsZSAo
YmxvY2tTdGFjayAmJiB0LT5pZCA8PSBJRF9MQVNUX1RBRyAmJiBmb3JiaWRkZW5UYWdbdC0+aWRd
KSB7Ci0jaWZkZWYgUEFSU0VSX0RFQlVHCi0gICAgICAgIGtkRGVidWcoIDYwMzUgKSA8PCAidC0+
aWQ6ICIgPDwgdC0+aWQgPDwgIiBpcyBmb3JiaWRkZW4gOi0oICIgPDwgZW5kbDsKLSNlbmRpZgot
ICAgICAgICBwb3BPbmVCbG9jaygpOwotICAgIH0KLQotICAgIGlmICghaW5zZXJ0Tm9kZShuLCB0
LT5mbGF0KSkgCi0gICAgeworICAgIGlmICghaW5zZXJ0Tm9kZShuLCB0LT5mbGF0KSkgewogICAg
ICAgICAvLyB3ZSBjb3VsZG4ndCBpbnNlcnQgdGhlIG5vZGUuLi4KLSAgICAgICAgCi0gICAgICAg
IGlmKG4tPmlzRWxlbWVudE5vZGUoKSkKLSAgICAgICAgewotICAgICAgICAgICAgRWxlbWVudElt
cGwgKmUgPSBzdGF0aWNfY2FzdDxFbGVtZW50SW1wbCAqPihuKTsKKyAgICAgICAgaWYgKG4tPmlz
RWxlbWVudE5vZGUoKSkgeworICAgICAgICAgICAgRWxlbWVudEltcGwqIGUgPSBzdGF0aWNfY2Fz
dDxFbGVtZW50SW1wbCo+KG4pOwogICAgICAgICAgICAgZS0+c2V0QXR0cmlidXRlTWFwKDApOwog
ICAgICAgICB9CiAgICAgICAgICAgICAKLSNpZmRlZiBQQVJTRVJfREVCVUcKLSAgICAgICAga2RE
ZWJ1ZyggNjAzNSApIDw8ICJpbnNlcnROb2RlIGZhaWxlZCBjdXJyZW50PSIgPDwgY3VycmVudC0+
aWQoKSA8PCAiLCBuZXc9IiA8PCBuLT5pZCgpIDw8ICIhIiA8PCBlbmRsOwotI2VuZGlmCiAgICAg
ICAgIGlmIChtYXAgPT0gbikKLSAgICAgICAgewotI2lmZGVmIFBBUlNFUl9ERUJVRwotICAgICAg
ICAgICAga2REZWJ1ZyggNjAzNSApIDw8ICIgIC0tPiByZXNldHRpbmcgbWFwISIgPDwgZW5kbDsK
LSNlbmRpZgogICAgICAgICAgICAgbWFwID0gMDsKLSAgICAgICAgfQorCiAgICAgICAgIGlmIChm
b3JtID09IG4pCi0gICAgICAgIHsKLSNpZmRlZiBQQVJTRVJfREVCVUcKLSAgICAgICAgICAgIGtk
RGVidWcoIDYwMzUgKSA8PCAiICAgLS0+IHJlc2V0dGluZyBmb3JtISIgPDwgZW5kbDsKLSNlbmRp
ZgogICAgICAgICAgICAgZm9ybSA9IDA7Ci0gICAgICAgIH0KICAgICB9CiB9CiAKLXN0YXRpYyBi
b29sIGlzVGFibGVSZWxhdGVkVGFnKGludCBpZCkKK3N0YXRpYyBib29sIGlzVGFibGVTZWN0aW9u
KE5vZGVJbXBsKiBuKQogewotICAgIHJldHVybiAoaWQgPT0gSURfVFIgfHwgaWQgPT0gSURfVEQg
fHwgaWQgPT0gSURfVEFCTEUgfHwgaWQgPT0gSURfVEJPRFkgfHwgaWQgPT0gSURfVEZPT1QgfHwg
aWQgPT0gSURfVEhFQUQgfHwKLSAgICAgICAgICAgIGlkID09IElEX1RIKTsKKyAgICByZXR1cm4g
bi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRib2R5KCkpIHx8IG4tPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjp0Zm9vdCgpKSB8fCBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGhlYWQoKSk7CiB9CiAK
LWJvb2wgS0hUTUxQYXJzZXI6Omluc2VydE5vZGUoTm9kZUltcGwgKm4sIGJvb2wgZmxhdCkKK3N0
YXRpYyBib29sIGlzVGFibGVQYXJ0KE5vZGVJbXBsKiBuKQogewotICAgIFNoYXJlZFB0cjxOb2Rl
SW1wbD4gcHJvdGVjdE5vZGUobik7CisgICAgcmV0dXJuIG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVz
Ojp0cigpKSB8fCBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGQoKSkgfHwgbi0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OnRoKCkpIHx8CisgICAgICAgICAgIGlzVGFibGVTZWN0aW9uKG4pOworfQog
Ci0gICAgaW50IGlkID0gbi0+aWQoKTsKK3N0YXRpYyBib29sIGlzVGFibGVSZWxhdGVkKE5vZGVJ
bXBsKiBuKQoreworICAgIHJldHVybiBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGFibGUoKSkg
fHwgaXNUYWJsZVBhcnQobik7Cit9CisKK2Jvb2wgSFRNTFBhcnNlcjo6aW5zZXJ0Tm9kZShOb2Rl
SW1wbCAqbiwgYm9vbCBmbGF0KQoreworICAgIFNoYXJlZFB0cjxOb2RlSW1wbD4gcHJvdGVjdE5v
ZGUobik7CiAKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSA9IG4tPmxvY2FsTmFt
ZSgpOworICAgIGludCB0YWdQcmlvcml0eSA9IG4tPmlzSFRNTEVsZW1lbnQoKSA/IHN0YXRpY19j
YXN0PEhUTUxFbGVtZW50SW1wbCo+KG4pLT50YWdQcmlvcml0eSgpIDogMDsKKyAgICAgICAgCiAg
ICAgLy8gbGV0J3MgYmUgc3R1cGlkIGFuZCBqdXN0IHRyeSB0byBpbnNlcnQgaXQuCi0gICAgLy8g
dGhpcyBzaG91bGQgd29yayBpZiB0aGUgZG9jdW1lbnQgaXMgd2VsbGZvcm1lZAotI2lmZGVmIFBB
UlNFUl9ERUJVRwotICAgIE5vZGVJbXBsICp0bXAgPSBjdXJyZW50OwotI2VuZGlmCisgICAgLy8g
dGhpcyBzaG91bGQgd29yayBpZiB0aGUgZG9jdW1lbnQgaXMgd2VsbC1mb3JtZWQKICAgICBOb2Rl
SW1wbCAqbmV3Tm9kZSA9IGN1cnJlbnQtPmFkZENoaWxkKG4pOwotICAgIGlmICggbmV3Tm9kZSAp
IHsKLSNpZmRlZiBQQVJTRVJfREVCVUcKLSAgICAgICAga2REZWJ1ZyggNjAzNSApIDw8ICJhZGRl
ZCAiIDw8IG4tPm5vZGVOYW1lKCkuc3RyaW5nKCkgPDwgIiB0byAiIDw8IHRtcC0+bm9kZU5hbWUo
KS5zdHJpbmcoKSA8PCAiLCBuZXcgY3VycmVudD0iIDw8IG5ld05vZGUtPm5vZGVOYW1lKCkuc3Ry
aW5nKCkgPDwgZW5kbDsKLSNlbmRpZgotICAgICAgICAvLyBkb24ndCBwdXNoIGVsZW1lbnRzIHdp
dGhvdXQgZW5kIHRhZyBvbiB0aGUgc3RhY2sKLSAgICAgICAgaWYodGFnUHJpb3JpdHkoaWQpICE9
IDAgJiYgIWZsYXQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHB1c2hCbG9jayhpZCwgdGFnUHJp
b3JpdHkoaWQpKTsKKyAgICBpZiAobmV3Tm9kZSkgeworICAgICAgICAvLyBkb24ndCBwdXNoIGVs
ZW1lbnRzIHdpdGhvdXQgZW5kIHRhZ3MgKGUuZy4sIDxpbWc+KSBvbiB0aGUgc3RhY2sKKyAgICAg
ICAgaWYgKHRhZ1ByaW9yaXR5ID4gMCAmJiAhZmxhdCkgeworICAgICAgICAgICAgcHVzaEJsb2Nr
KGxvY2FsTmFtZSwgdGFnUHJpb3JpdHkpOwogICAgICAgICAgICAgaWYgKG5ld05vZGUgPT0gY3Vy
cmVudCkKLSAgICAgICAgICAgICAgICBwb3BCbG9jayhpZCk7CisgICAgICAgICAgICAgICAgcG9w
QmxvY2sobG9jYWxOYW1lKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBzZXRD
dXJyZW50KG5ld05vZGUpOwotI2lmIFNQRUVEX0RFQlVHIDwgMgotICAgICAgICAgICAgaWYoIW4t
PmF0dGFjaGVkKCkgJiYgSFRNTFdpZGdldCkKKyAgICAgICAgICAgIGlmICghbi0+YXR0YWNoZWQo
KSAmJiBIVE1MV2lkZ2V0KQogICAgICAgICAgICAgICAgIG4tPmF0dGFjaCgpOwotI2VuZGlmCiAg
ICAgICAgIH0KICAgICAgICAgZWxzZSB7Ci0jaWYgU1BFRURfREVCVUcgPCAyCi0gICAgICAgICAg
ICBpZighbi0+YXR0YWNoZWQoKSAmJiBIVE1MV2lkZ2V0KQorICAgICAgICAgICAgaWYgKCFuLT5h
dHRhY2hlZCgpICYmIEhUTUxXaWRnZXQpCiAgICAgICAgICAgICAgICAgbi0+YXR0YWNoKCk7CiAg
ICAgICAgICAgICBpZiAobi0+bWFpbnRhaW5zU3RhdGUoKSkgewogICAgICAgICAgICAgICAgIGRv
YygpLT5yZWdpc3Rlck1haW50YWluc1N0YXRlKG4pOwpAQCAtMzQwLDEwNCArMjk5LDg2IEBAIGJv
b2wgS0hUTUxQYXJzZXI6Omluc2VydE5vZGUoTm9kZUltcGwgKm4KICAgICAgICAgICAgICAgICAg
ICAgbi0+cmVzdG9yZVN0YXRlKHN0YXRlcyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBu
LT5jbG9zZVJlbmRlcmVyKCk7Ci0jZW5kaWYKICAgICAgICAgfQogCiAgICAgICAgIHJldHVybiB0
cnVlOwotICAgIH0gZWxzZSB7Ci0jaWZkZWYgUEFSU0VSX0RFQlVHCi0gICAgICAgIGtkRGVidWco
IDYwMzUgKSA8PCAiQURESU5HIE5PREUgRkFJTEVEISEhISBjdXJyZW50ID0gIiA8PCBjdXJyZW50
LT5ub2RlTmFtZSgpLnN0cmluZygpIDw8ICIsIG5ldyA9ICIgPDwgbi0+bm9kZU5hbWUoKS5zdHJp
bmcoKSA8PCBlbmRsOwotI2VuZGlmCi0gICAgICAgIC8vIGVycm9yIGhhbmRsaW5nLi4uCi0gICAg
ICAgIEhUTUxFbGVtZW50SW1wbCAqZTsKLSAgICAgICAgYm9vbCBoYW5kbGVkID0gZmFsc2U7Ci0K
LSAgICAgICAgLy8gc3dpdGNoIGFjY29yZGluZyB0byB0aGUgZWxlbWVudCB0byBpbnNlcnQKLSAg
ICAgICAgc3dpdGNoKGlkKQotICAgICAgICB7Ci0gICAgICAgIGNhc2UgSURfVFI6Ci0gICAgICAg
IGNhc2UgSURfVEg6Ci0gICAgICAgIGNhc2UgSURfVEQ6Ci0gICAgICAgICAgICBpZiAoaW5TdHJh
eVRhYmxlQ29udGVudCAmJiAhaXNUYWJsZVJlbGF0ZWRUYWcoY3VycmVudC0+aWQoKSkpIHsKKyAg
ICB9IGVsc2UKKyAgICAgICAgcmV0dXJuIGhhbmRsZUVycm9yKG4sIGZsYXQsIGxvY2FsTmFtZSwg
dGFnUHJpb3JpdHkpOyAvLyBUcnkgdG8gaGFuZGxlIHRoZSBlcnJvci4KK30KKworYm9vbCBIVE1M
UGFyc2VyOjpoYW5kbGVFcnJvcihOb2RlSW1wbCogbiwgYm9vbCBmbGF0LCBjb25zdCBBdG9taWNT
dHJpbmcmIGxvY2FsTmFtZSwgaW50IHRhZ1ByaW9yaXR5KQoreworICAgIC8vIEVycm9yIGhhbmRs
aW5nIGNvZGUuICBUaGlzIGlzIGp1c3QgYWQgaG9jIGhhbmRsaW5nIG9mIHNwZWNpZmljIHBhcmVu
dC9jaGlsZCBjb21iaW5hdGlvbnMuCisgICAgSFRNTEVsZW1lbnRJbXBsICplOworICAgIGJvb2wg
aGFuZGxlZCA9IGZhbHNlOworCisgICAgLy8gMS4gQ2hlY2sgb3V0IHRoZSBlbGVtZW50J3MgdGFn
IG5hbWUgdG8gZGVjaWRlIGhvdyB0byBkZWFsIHdpdGggZXJyb3JzLgorICAgIGlmIChuLT5pc1Rl
eHROb2RlKCkpIHsKKyAgICAgICAgaWYgKGN1cnJlbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpz
ZWxlY3QoKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfSBlbHNlIGlmIChuLT5p
c0hUTUxFbGVtZW50KCkpIHsKKyAgICAgICAgSFRNTEVsZW1lbnRJbXBsKiBoID0gc3RhdGljX2Nh
c3Q8SFRNTEVsZW1lbnRJbXBsKj4obik7CisgICAgICAgIGlmIChoLT5oYXNMb2NhbE5hbWUoSFRN
TE5hbWVzOjp0cigpKSB8fCBoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0aCgpKSB8fAorICAg
ICAgICAgICAgaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dGQoKSkpIHsKKyAgICAgICAgICAg
IGlmIChpblN0cmF5VGFibGVDb250ZW50ICYmICFpc1RhYmxlUmVsYXRlZChjdXJyZW50KSkgewog
ICAgICAgICAgICAgICAgIC8vIHBvcCBvdXQgdG8gdGhlIG5lYXJlc3QgZW5jbG9zaW5nIHRhYmxl
LXJlbGF0ZWQgdGFnLgotICAgICAgICAgICAgICAgIHdoaWxlIChibG9ja1N0YWNrICYmICFpc1Rh
YmxlUmVsYXRlZFRhZyhjdXJyZW50LT5pZCgpKSkKKyAgICAgICAgICAgICAgICB3aGlsZSAoYmxv
Y2tTdGFjayAmJiAhaXNUYWJsZVJlbGF0ZWQoY3VycmVudCkpCiAgICAgICAgICAgICAgICAgICAg
IHBvcE9uZUJsb2NrKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGluc2VydE5vZGUobik7CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJRF9DT01NRU5U
OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSURfSEVBRDoKLSAgICAgICAgICAg
IC8vICMjIyBhbGxsb3cgbm90IGhhdmluZyA8SFRNTD4gaW4gYXQgYWxsLCBhcyBwZXIgSFRNTCBz
cGVjCi0gICAgICAgICAgICBpZiAoIWN1cnJlbnQtPmlzRG9jdW1lbnROb2RlKCkgJiYgY3VycmVu
dC0+aWQoKSAhPSBJRF9IVE1MICkKKyAgICAgICAgfSBlbHNlIGlmIChoLT5oYXNMb2NhbE5hbWUo
SFRNTE5hbWVzOjpoZWFkKCkpKSB7CisgICAgICAgICAgICBpZiAoIWN1cnJlbnQtPmlzRG9jdW1l
bnROb2RlKCkgJiYgIWN1cnJlbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpodG1sKCkpKQogICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgLy8gV2UgY2FuIGRlYWwgd2l0aCBhIGJhc2UsIG1ldGEgYW5kIGxpbmsgZWxlbWVudCBpbiB0
aGUgYm9keSwgYnkganVzdCBhZGRpbmcgdGhlIGVsZW1lbnQgdG8gaGVhZC4KLSAgICAgICAgY2Fz
ZSBJRF9NRVRBOgotICAgICAgICBjYXNlIElEX0xJTks6Ci0gICAgICAgIGNhc2UgSURfQkFTRToK
LSAgICAgICAgICAgIGlmKCAhaGVhZCApCisgICAgICAgIH0gZWxzZSBpZiAoaC0+aGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6bWV0YSgpKSB8fCBoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpsaW5r
KCkpIHx8IGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmJhc2UoKSkpIHsKKyAgICAgICAgICAg
IGlmICghaGVhZCkKICAgICAgICAgICAgICAgICBjcmVhdGVIZWFkKCk7Ci0gICAgICAgICAgICBp
ZiggaGVhZCApIHsKLSAgICAgICAgICAgICAgICBpZiAoIGhlYWQtPmFkZENoaWxkKG4pICkgewot
I2lmIFNQRUVEX0RFQlVHIDwgMgotICAgICAgICAgICAgICAgICAgICBpZighbi0+YXR0YWNoZWQo
KSAmJiBIVE1MV2lkZ2V0KQorICAgICAgICAgICAgaWYgKGhlYWQpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoaGVhZC0+YWRkQ2hpbGQobikpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFuLT5h
dHRhY2hlZCgpICYmIEhUTUxXaWRnZXQpCiAgICAgICAgICAgICAgICAgICAgICAgICBuLT5hdHRh
Y2goKTsKLSNlbmRpZgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQkJfSBlbHNl
IHsKLQkJICAgIHJldHVybiBmYWxzZTsKLQkJfQorICAgICAgICAgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBJRF9IVE1MOgorICAgICAgICB9IGVsc2UgaWYgKGgtPmhh
c0xvY2FsTmFtZShIVE1MTmFtZXM6Omh0bWwoKSkpIHsKICAgICAgICAgICAgIGlmICghY3VycmVu
dC0+aXNEb2N1bWVudE5vZGUoKSApIHsKLQkJaWYgKCBkb2MoKS0+Zmlyc3RDaGlsZCgpLT5pZCgp
ID09IElEX0hUTUwpIHsKLQkJICAgIC8vIHdlIGhhdmUgYW5vdGhlciA8SFRNTD4gZWxlbWVudC4u
Li4gYXBwbHkgYXR0cmlidXRlcyB0byBleGlzdGluZyBvbmUKLQkJICAgIC8vIG1ha2Ugc3VyZSB3
ZSBkb24ndCBvdmVyd3JpdGUgYWxyZWFkeSBleGlzdGluZyBhdHRyaWJ1dGVzCi0JCSAgICBOYW1l
ZEF0dHJNYXBJbXBsICptYXAgPSBzdGF0aWNfY2FzdDxFbGVtZW50SW1wbCo+KG4pLT5hdHRyaWJ1
dGVzKHRydWUpOwotCQkgICAgTmFtZWRBdHRyTWFwSW1wbCAqYm1hcCA9IHN0YXRpY19jYXN0PEVs
ZW1lbnRJbXBsKj4oZG9jKCktPmZpcnN0Q2hpbGQoKSktPmF0dHJpYnV0ZXMoZmFsc2UpOwotCQkg
ICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7Ci0JCSAgICBmb3IgKHVuc2lnbmVkIGxvbmcgbCA9IDA7
IG1hcCAmJiBsIDwgbWFwLT5sZW5ndGgoKTsgKytsKSB7Ci0JCQlBdHRyaWJ1dGVJbXBsKiBpdCA9
IG1hcC0+YXR0cmlidXRlSXRlbShsKTsKLQkJCWNoYW5nZWQgPSAhYm1hcC0+Z2V0QXR0cmlidXRl
SXRlbShpdC0+aWQoKSk7Ci0JCQlibWFwLT5pbnNlcnRBdHRyaWJ1dGUoaXQtPmNsb25lKGZhbHNl
KSk7Ci0JCSAgICB9Ci0JCSAgICBpZiAoIGNoYW5nZWQgKQotCQkJZG9jKCktPnJlY2FsY1N0eWxl
KCBOb2RlSW1wbDo6SW5oZXJpdCApOwotCQl9CisgICAgICAgICAgICAgICAgaWYgKGRvYygpLT5m
aXJzdENoaWxkKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpodG1sKCkpKSB7CisgICAgICAgICAg
ICAgICAgICAgIC8vIHdlIGhhdmUgYW5vdGhlciA8SFRNTD4gZWxlbWVudC4uLi4gYXBwbHkgYXR0
cmlidXRlcyB0byBleGlzdGluZyBvbmUKKyAgICAgICAgICAgICAgICAgICAgLy8gbWFrZSBzdXJl
IHdlIGRvbid0IG92ZXJ3cml0ZSBhbHJlYWR5IGV4aXN0aW5nIGF0dHJpYnV0ZXMKKyAgICAgICAg
ICAgICAgICAgICAgTmFtZWRBdHRyTWFwSW1wbCAqbWFwID0gc3RhdGljX2Nhc3Q8RWxlbWVudElt
cGwqPihuKS0+YXR0cmlidXRlcyh0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgTmFtZWRBdHRy
TWFwSW1wbCAqYm1hcCA9IHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsKj4oZG9jKCktPmZpcnN0Q2hp
bGQoKSktPmF0dHJpYnV0ZXMoZmFsc2UpOworICAgICAgICAgICAgICAgICAgICBib29sIGNoYW5n
ZWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBsb25nIGwgPSAw
OyBtYXAgJiYgbCA8IG1hcC0+bGVuZ3RoKCk7ICsrbCkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgQXR0cmlidXRlSW1wbCogaXQgPSBtYXAtPmF0dHJpYnV0ZUl0ZW0obCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBjaGFuZ2VkID0gIWJtYXAtPmdldEF0dHJpYnV0ZUl0ZW0oaXQtPmlkKCkp
OworICAgICAgICAgICAgICAgICAgICAgICAgYm1hcC0+aW5zZXJ0QXR0cmlidXRlKGl0LT5jbG9u
ZShmYWxzZSkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlm
IChjaGFuZ2VkKQorICAgICAgICAgICAgICAgICAgICAgICAgZG9jKCktPnJlY2FsY1N0eWxlKE5v
ZGVJbXBsOjpJbmhlcml0KTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotCSAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJRF9U
SVRMRToKLSAgICAgICAgY2FzZSBJRF9TVFlMRToKLSAgICAgICAgICAgIGlmICggIWhlYWQgKQor
ICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFtZShIVE1MTmFt
ZXM6OnRpdGxlKCkpIHx8IGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnN0eWxlKCkpKSB7Cisg
ICAgICAgICAgICBpZiAoIWhlYWQpCiAgICAgICAgICAgICAgICAgY3JlYXRlSGVhZCgpOwotICAg
ICAgICAgICAgaWYgKCBoZWFkICkgeworICAgICAgICAgICAgaWYgKGhlYWQpIHsKICAgICAgICAg
ICAgICAgICBET006Ok5vZGVJbXBsICpuZXdOb2RlID0gaGVhZC0+YWRkQ2hpbGQobik7Ci0gICAg
ICAgICAgICAgICAgaWYgKCBuZXdOb2RlICkgewotICAgICAgICAgICAgICAgICAgICBwdXNoQmxv
Y2soaWQsIHRhZ1ByaW9yaXR5KGlkKSk7CisgICAgICAgICAgICAgICAgaWYgKG5ld05vZGUpIHsK
KyAgICAgICAgICAgICAgICAgICAgcHVzaEJsb2NrKGxvY2FsTmFtZSwgdGFnUHJpb3JpdHkpOwog
ICAgICAgICAgICAgICAgICAgICBzZXRDdXJyZW50KG5ld05vZGUpOwotI2lmIFNQRUVEX0RFQlVH
IDwgMgotCQkgICAgaWYoIW4tPmF0dGFjaGVkKCkgJiYgSFRNTFdpZGdldCkKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKCFuLT5hdHRhY2hlZCgpICYmIEhUTUxXaWRnZXQpCiAgICAgICAgICAgICAg
ICAgICAgICAgICBuLT5hdHRhY2goKTsKLSNlbmRpZgogICAgICAgICAgICAgICAgIH0gZWxzZSB7
Ci0jaWZkZWYgUEFSU0VSX0RFQlVHCi0gICAgICAgICAgICAgICAgICAgIGtkRGVidWcoIDYwMzUg
KSA8PCAiYWRkaW5nIHN0eWxlIGJlZm9yZSB0byBib2R5IGZhaWxlZCEhISEiIDw8IGVuZGw7Ci0j
ZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgZGlzY2FyZF91bnRpbCA9IElEX1NUWUxFICsgSURf
Q0xPU0VfVEFHOworICAgICAgICAgICAgICAgICAgICBzZXRTa2lwTW9kZShIVE1MTmFtZXM6OnN0
eWxlKCkpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfSBlbHNlIGlm
KGluQm9keSkgewotICAgICAgICAgICAgICAgIGRpc2NhcmRfdW50aWwgPSBJRF9TVFlMRSArIElE
X0NMT1NFX1RBRzsKKyAgICAgICAgICAgICAgICBzZXRTa2lwTW9kZShIVE1MTmFtZXM6OnN0eWxl
KCkpOwogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgLy8gU0NSSVBUIGFuZCBPQkpFQ1QgYXJlIGFsbG93
ZWQgaW4gdGhlIGJvZHkuCi0gICAgICAgIGNhc2UgSURfQk9EWToKLSAgICAgICAgICAgIGlmKGlu
Qm9keSAmJiBkb2MoKS0+Ym9keSgpKSB7CisgICAgICAgIH0gZWxzZSBpZiAoaC0+aGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6Ym9keSgpKSkgeworICAgICAgICAgICAgaWYgKGluQm9keSAmJiBkb2Mo
KS0+Ym9keSgpKSB7CiAgICAgICAgICAgICAgICAgLy8gd2UgaGF2ZSBhbm90aGVyIDxCT0RZPiBl
bGVtZW50Li4uLiBhcHBseSBhdHRyaWJ1dGVzIHRvIGV4aXN0aW5nIG9uZQogICAgICAgICAgICAg
ICAgIC8vIG1ha2Ugc3VyZSB3ZSBkb24ndCBvdmVyd3JpdGUgYWxyZWFkeSBleGlzdGluZyBhdHRy
aWJ1dGVzCiAgICAgICAgICAgICAgICAgLy8gc29tZSBzaXRlcyB1c2UgPGJvZHkgYmdjb2xvcj1y
aWdodGNvbG9yPi4uLjxib2R5IGJnY29sb3I9d3Jvbmdjb2xvcj4KQEAgLTQ0OSw2NjEgKzM5MCw1
ODcgQEAgYm9vbCBLSFRNTFBhcnNlcjo6aW5zZXJ0Tm9kZShOb2RlSW1wbCAqbgogICAgICAgICAg
ICAgICAgICAgICBjaGFuZ2VkID0gIWJtYXAtPmdldEF0dHJpYnV0ZUl0ZW0oaXQtPmlkKCkpOwog
ICAgICAgICAgICAgICAgICAgICBibWFwLT5pbnNlcnRBdHRyaWJ1dGUoaXQtPmNsb25lKGZhbHNl
KSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICggY2hhbmdlZCApCi0g
ICAgICAgICAgICAgICAgICAgIGRvYygpLT5yZWNhbGNTdHlsZSggTm9kZUltcGw6OkluaGVyaXQg
KTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoIGN1cnJlbnQtPmlzRG9jdW1lbnROb2RlKCkgKQot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIC8vIHRoZSBmb2xsb3dpbmcgaXMgYSBoYWNrIHRv
IG1vdmUgbm9uIHJlbmRlcmVkIGVsZW1lbnRzCi0gICAgICAgICAgICAvLyBvdXRzaWRlIG9mIHRh
Ymxlcy4KLSAgICAgICAgICAgIC8vIG5lZWRlZCBmb3IgYnJva2VuIGNvbnN0cnVjdHMgbGlrZSA8
dGFibGU+PGZvcm0gLi4uPjx0cj4uLi4uCi0gICAgICAgIGNhc2UgSURfSU5QVVQ6Ci0gICAgICAg
IHsKLSAgICAgICAgICAgIEVsZW1lbnRJbXBsICplID0gc3RhdGljX2Nhc3Q8RWxlbWVudEltcGwg
Kj4obik7Ci0gICAgICAgICAgICBET01TdHJpbmcgdHlwZSA9IGUtPmdldEF0dHJpYnV0ZShBVFRS
X1RZUEUpOwotCi0gICAgICAgICAgICBpZiAoIHN0cmNhc2VjbXAoIHR5cGUsICJoaWRkZW4iICkg
PT0gMCAmJiBmb3JtKSB7CisgICAgICAgICAgICAgICAgaWYgKGNoYW5nZWQpCisgICAgICAgICAg
ICAgICAgICAgIGRvYygpLT5yZWNhbGNTdHlsZShOb2RlSW1wbDo6SW5oZXJpdCk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBp
ZiAoIWN1cnJlbnQtPmlzRG9jdW1lbnROb2RlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmlucHV0
KCkpKSB7CisgICAgICAgICAgICBET01TdHJpbmcgdHlwZSA9IGgtPmdldEF0dHJpYnV0ZShBVFRS
X1RZUEUpOworICAgICAgICAgICAgaWYgKHN0cmNhc2VjbXAodHlwZSwgImhpZGRlbiIpID09IDAg
JiYgZm9ybSkgewogICAgICAgICAgICAgICAgIGZvcm0tPmFkZENoaWxkKG4pOwotI2lmIFNQRUVE
X0RFQlVHIDwgMgotICAgICAgICAgICAgICAgIGlmKCFuLT5hdHRhY2hlZCgpICYmIEhUTUxXaWRn
ZXQpCisgICAgICAgICAgICAgICAgaWYgKCFuLT5hdHRhY2hlZCgpICYmIEhUTUxXaWRnZXQpCiAg
ICAgICAgICAgICAgICAgICAgIG4tPmF0dGFjaCgpOwotI2VuZGlmCiAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgICBjYXNlIElEX1RFWFQ6Ci0gICAgICAgICAgICAvLyBpZ25vcmUgdGV4dCBpbnNp
ZGUgdGhlIGZvbGxvd2luZyBlbGVtZW50cy4KLSAgICAgICAgICAgIHN3aXRjaChjdXJyZW50LT5p
ZCgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgY2FzZSBJRF9TRUxFQ1Q6Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
ICAgICA7Ci0gICAgICAgICAgICAgICAgLy8gZmFsbCB0aHJvdWdoISEKLSAgICAgICAgICAgIH07
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJRF9ERDoKLSAgICAgICAgY2FzZSBJ
RF9EVDoKKyAgICAgICAgfSBlbHNlIGlmIChoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpkZCgp
KSB8fCBoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpkdCgpKSkgewogICAgICAgICAgICAgZSA9
IG5ldyBIVE1MRExpc3RFbGVtZW50SW1wbChkb2N1bWVudCk7Ci0gICAgICAgICAgICBpZiAoIGlu
c2VydE5vZGUoZSkgKSB7CisgICAgICAgICAgICBpZiAoaW5zZXJ0Tm9kZShlKSkgewogICAgICAg
ICAgICAgICAgIGluc2VydE5vZGUobik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJRF9BUkVBOgot
ICAgICAgICB7Ci0gICAgICAgICAgICBpZihtYXApCi0gICAgICAgICAgICB7CisgICAgICAgIH0g
ZWxzZSBpZiAoaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6YXJlYSgpKSkgeworICAgICAgICAg
ICAgaWYgKG1hcCkgewogICAgICAgICAgICAgICAgIG1hcC0+YWRkQ2hpbGQobik7Ci0jaWYgU1BF
RURfREVCVUcgPCAyCi0gICAgICAgICAgICAgICAgaWYoIW4tPmF0dGFjaGVkKCkgJiYgSFRNTFdp
ZGdldCkKKyAgICAgICAgICAgICAgICBpZiAoIW4tPmF0dGFjaGVkKCkgJiYgSFRNTFdpZGdldCkK
ICAgICAgICAgICAgICAgICAgICAgbi0+YXR0YWNoKCk7Ci0jZW5kaWYKICAgICAgICAgICAgICAg
ICBoYW5kbGVkID0gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgfQotICAgICAgICBjYXNlIElEX0NBUFRJT046IHsKLSAgICAgICAgICAgIHN3aXRjaCAoY3Vy
cmVudC0+aWQoKSkgewotICAgICAgICAgICAgICAgIGNhc2UgSURfVEhFQUQ6Ci0gICAgICAgICAg
ICAgICAgY2FzZSBJRF9UQk9EWToKLSAgICAgICAgICAgICAgICBjYXNlIElEX1RGT09UOgotICAg
ICAgICAgICAgICAgIGNhc2UgSURfVFI6Ci0gICAgICAgICAgICAgICAgY2FzZSBJRF9USDoKLSAg
ICAgICAgICAgICAgICBjYXNlIElEX1REOiB7Ci0gICAgICAgICAgICAgICAgICAgIE5vZGVJbXBs
KiB0c2VjdGlvbiA9IGN1cnJlbnQ7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50LT5p
ZCgpID09IElEX1RSKQotICAgICAgICAgICAgICAgICAgICAgICAgdHNlY3Rpb24gPSBjdXJyZW50
LT5wYXJlbnQoKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY3VycmVudC0+aWQoKSA9
PSBJRF9URCB8fCBjdXJyZW50LT5pZCgpID09IElEX1RIKQotICAgICAgICAgICAgICAgICAgICAg
ICAgdHNlY3Rpb24gPSBjdXJyZW50LT5wYXJlbnQoKS0+cGFyZW50KCk7Ci0gICAgICAgICAgICAg
ICAgICAgIE5vZGVJbXBsKiB0YWJsZSA9IHRzZWN0aW9uLT5wYXJlbnQoKTsKLSAgICAgICAgICAg
ICAgICAgICAgaW50IGV4Y2VwdGlvbmNvZGUgPSAwOwotICAgICAgICAgICAgICAgICAgICB0YWJs
ZS0+aW5zZXJ0QmVmb3JlKG4sIHRzZWN0aW9uLCBleGNlcHRpb25jb2RlKTsKLSAgICAgICAgICAg
ICAgICAgICAgcHVzaEJsb2NrKGlkLCB0YWdQcmlvcml0eShpZCkpOwotICAgICAgICAgICAgICAg
ICAgICBzZXRDdXJyZW50KG4pOwotICAgICAgICAgICAgICAgICAgICBpblN0cmF5VGFibGVDb250
ZW50Kys7Ci0gICAgICAgICAgICAgICAgICAgIGJsb2NrU3RhY2stPnN0cmF5VGFibGVDb250ZW50
ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmNhcHRpb24o
KSkpIHsKKyAgICAgICAgICAgIGlmIChpc1RhYmxlUGFydChjdXJyZW50KSkgeworICAgICAgICAg
ICAgICAgIE5vZGVJbXBsKiB0c2VjdGlvbiA9IGN1cnJlbnQ7CisgICAgICAgICAgICAgICAgaWYg
KGN1cnJlbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0cigpKSkKKyAgICAgICAgICAgICAgICAg
ICAgdHNlY3Rpb24gPSBjdXJyZW50LT5wYXJlbnQoKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlm
IChjdXJyZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGQoKSkgfHwgY3VycmVudC0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OnRoKCkpKQorICAgICAgICAgICAgICAgICAgICB0c2VjdGlvbiA9IGN1
cnJlbnQtPnBhcmVudCgpLT5wYXJlbnQoKTsKKyAgICAgICAgICAgICAgICBOb2RlSW1wbCogdGFi
bGUgPSB0c2VjdGlvbi0+cGFyZW50KCk7CisgICAgICAgICAgICAgICAgaW50IGV4Y2VwdGlvbmNv
ZGUgPSAwOworICAgICAgICAgICAgICAgIHRhYmxlLT5pbnNlcnRCZWZvcmUobiwgdHNlY3Rpb24s
IGV4Y2VwdGlvbmNvZGUpOworICAgICAgICAgICAgICAgIHB1c2hCbG9jayhsb2NhbE5hbWUsIHRh
Z1ByaW9yaXR5KTsKKyAgICAgICAgICAgICAgICBzZXRDdXJyZW50KG4pOworICAgICAgICAgICAg
ICAgIGluU3RyYXlUYWJsZUNvbnRlbnQrKzsKKyAgICAgICAgICAgICAgICBibG9ja1N0YWNrLT5z
dHJheVRhYmxlQ29udGVudCA9IHRydWU7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNl
IElEX1RIRUFEOgotICAgICAgICBjYXNlIElEX1RCT0RZOgotICAgICAgICBjYXNlIElEX1RGT09U
OgotICAgICAgICBjYXNlIElEX0NPTEdST1VQOiB7Ci0gICAgICAgICAgICBpZiAoaXNUYWJsZVJl
bGF0ZWRUYWcoY3VycmVudC0+aWQoKSkpIHsKLSAgICAgICAgICAgICAgICB3aGlsZSAoYmxvY2tT
dGFjayAmJiBjdXJyZW50LT5pZCgpICE9IElEX1RBQkxFICYmIGlzVGFibGVSZWxhdGVkVGFnKGN1
cnJlbnQtPmlkKCkpKQorICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFtZShIVE1MTmFt
ZXM6OnRoZWFkKCkpIHx8IGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnRib2R5KCkpIHx8Cisg
ICAgICAgICAgICAgICAgICAgaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dGZvb3QoKSkgfHwg
aC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6Y29sZ3JvdXAoKSkpIHsKKyAgICAgICAgICAgIGlm
IChpc1RhYmxlUmVsYXRlZChjdXJyZW50KSkgeworICAgICAgICAgICAgICAgIHdoaWxlIChibG9j
a1N0YWNrICYmIGlzVGFibGVQYXJ0KGN1cnJlbnQpKQogICAgICAgICAgICAgICAgICAgICBwb3BP
bmVCbG9jaygpOwogICAgICAgICAgICAgICAgIHJldHVybiBpbnNlcnROb2RlKG4pOwogICAgICAg
ICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotCi0gICAgICAgIC8vIHN3aXRjaCBvbiB0aGUgY3VycmVudGx5IGFjdGl2ZSBl
bGVtZW50Ci0gICAgICAgIHN3aXRjaChjdXJyZW50LT5pZCgpKQotICAgICAgICB7Ci0gICAgICAg
IGNhc2UgSURfSFRNTDoKLSAgICAgICAgICAgIHN3aXRjaChpZCkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgIGNhc2UgSURfU0NSSVBUOgotICAgICAgICAgICAgY2FzZSBJRF9TVFlMRToKLSAg
ICAgICAgICAgIGNhc2UgSURfTUVUQToKLSAgICAgICAgICAgIGNhc2UgSURfTElOSzoKLSAgICAg
ICAgICAgIGNhc2UgSURfT0JKRUNUOgotICAgICAgICAgICAgY2FzZSBJRF9FTUJFRDoKLSAgICAg
ICAgICAgIGNhc2UgSURfVElUTEU6Ci0gICAgICAgICAgICBjYXNlIElEX0lTSU5ERVg6Ci0gICAg
ICAgICAgICBjYXNlIElEX0JBU0U6Ci0gICAgICAgICAgICAgICAgaWYoIWhlYWQpIHsKKyAgICB9
CisgICAgCisgICAgLy8gMi4gTmV4dCB3ZSBleGFtaW5lIG91ciBjdXJyZW50bHkgYWN0aXZlIGVs
ZW1lbnQgdG8gZG8gc29tZSBmdXJ0aGVyIGVycm9yIGhhbmRsaW5nLgorICAgIGlmIChjdXJyZW50
LT5pc0hUTUxFbGVtZW50KCkpIHsKKyAgICAgICAgSFRNTEVsZW1lbnRJbXBsKiBoID0gc3RhdGlj
X2Nhc3Q8SFRNTEVsZW1lbnRJbXBsKj4oY3VycmVudCk7CisgICAgICAgIGNvbnN0IEF0b21pY1N0
cmluZyYgY3VycmVudFRhZ05hbWUgPSBjdXJyZW50LT5sb2NhbE5hbWUoKTsKKyAgICAgICAgaWYg
KGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Omh0bWwoKSkpIHsKKyAgICAgICAgICAgIEhUTUxF
bGVtZW50SW1wbCogZWx0ID0gbi0+aXNIVE1MRWxlbWVudCgpID8gc3RhdGljX2Nhc3Q8SFRNTEVs
ZW1lbnRJbXBsKj4obikgOiAwOworICAgICAgICAgICAgaWYgKGVsdCAmJiAoZWx0LT5oYXNMb2Nh
bE5hbWUoSFRNTE5hbWVzOjpzY3JpcHQoKSkgfHwgZWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVz
OjpzdHlsZSgpKSB8fAorICAgICAgICAgICAgICAgIGVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1l
czo6bWV0YSgpKSB8fCBlbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmxpbmsoKSkgfHwKKyAg
ICAgICAgICAgICAgICBlbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9iamVjdCgpKSB8fCBl
bHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmVtYmVkKCkpIHx8CisgICAgICAgICAgICAgICAg
ZWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0aXRsZSgpKSB8fCBlbHQtPmhhc0xvY2FsTmFt
ZShIVE1MTmFtZXM6OmlzaW5kZXgoKSkgfHwKKyAgICAgICAgICAgICAgICBlbHQtPmhhc0xvY2Fs
TmFtZShIVE1MTmFtZXM6OmJhc2UoKSkpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFoZWFkKSB7
CiAgICAgICAgICAgICAgICAgICAgIGhlYWQgPSBuZXcgSFRNTEhlYWRFbGVtZW50SW1wbChkb2N1
bWVudCk7CiAgICAgICAgICAgICAgICAgICAgIGUgPSBoZWFkOwogICAgICAgICAgICAgICAgICAg
ICBpbnNlcnROb2RlKGUpOwogICAgICAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNl
IElEX1RFWFQ6IHsKLSAgICAgICAgICAgICAgICBUZXh0SW1wbCAqdCA9IHN0YXRpY19jYXN0PFRl
eHRJbXBsICo+KG4pOwotICAgICAgICAgICAgICAgIGlmICh0LT5jb250YWluc09ubHlXaGl0ZXNw
YWNlKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAg
ICAvKiBGYWxsIHRocm91Z2ggdG8gZGVmYXVsdCAqLworICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBpZiAobi0+aXNUZXh0Tm9kZSgpKSB7CisgICAgICAgICAgICAgICAgICAg
IFRleHRJbXBsICp0ID0gc3RhdGljX2Nhc3Q8VGV4dEltcGwgKj4obik7CisgICAgICAgICAgICAg
ICAgICAgIGlmICh0LT5jb250YWluc09ubHlXaGl0ZXNwYWNlKCkpCisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisJCQkJfQorCQkJCWlmICghaGF2ZUZyYW1lU2V0KSB7CisJ
CQkJCWUgPSBuZXcgSFRNTEJvZHlFbGVtZW50SW1wbChkb2N1bWVudCk7CisJCQkJCXN0YXJ0Qm9k
eSgpOworCQkJCQlpbnNlcnROb2RlKGUpOworCQkJCQloYW5kbGVkID0gdHJ1ZTsKKwkJCQl9CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGlmICgg
aGF2ZUZyYW1lU2V0ICkgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZSA9IG5ldyBIVE1MQm9keUVs
ZW1lbnRJbXBsKGRvY3VtZW50KTsKLSAgICAgICAgICAgICAgICBzdGFydEJvZHkoKTsKLSAgICAg
ICAgICAgICAgICBpbnNlcnROb2RlKGUpOwotICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVl
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgSURfSEVBRDoKLSAgICAgICAgICAgIC8vIHdlIGNhbiBnZXQgaGVy
ZSBvbmx5IGlmIHRoZSBlbGVtZW50IGlzIG5vdCBhbGxvd2VkIGluIGhlYWQuCi0gICAgICAgICAg
ICBpZiAoaWQgPT0gSURfSFRNTCkKKyAgICAgICAgfSBlbHNlIGlmIChoLT5oYXNMb2NhbE5hbWUo
SFRNTE5hbWVzOjpoZWFkKCkpKSB7CisgICAgICAgICAgICBpZiAobi0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6Omh0bWwoKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAg
ICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGUgYm9keSBzdGFydHMg
aGVyZS4uLgotICAgICAgICAgICAgICAgIGlmICggaGF2ZUZyYW1lU2V0ICkgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgcG9wQmxvY2soSURfSEVBRCk7Ci0gICAgICAgICAgICAgICAgZSA9IG5ldyBI
VE1MQm9keUVsZW1lbnRJbXBsKGRvY3VtZW50KTsKLSAgICAgICAgICAgICAgICBzdGFydEJvZHko
KTsKLSAgICAgICAgICAgICAgICBpbnNlcnROb2RlKGUpOwotICAgICAgICAgICAgICAgIGhhbmRs
ZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIGlmICghaGF2ZUZyYW1lU2V0KSB7CisgICAgICAg
ICAgICAgICAgICAgIHBvcEJsb2NrKGN1cnJlbnRUYWdOYW1lKTsKKyAgICAgICAgICAgICAgICAg
ICAgZSA9IG5ldyBIVE1MQm9keUVsZW1lbnRJbXBsKGRvY3VtZW50KTsKKyAgICAgICAgICAgICAg
ICAgICAgc3RhcnRCb2R5KCk7CisgICAgICAgICAgICAgICAgICAgIGluc2VydE5vZGUoZSk7Cisg
ICAgICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElEX0JPRFk6Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJRF9DQVBUSU9OOgorICAgICAgICB9IGVs
c2UgaWYgKGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmNhcHRpb24oKSkpIHsKICAgICAgICAg
ICAgIC8vIElsbGVnYWwgY29udGVudCBpbiBhIGNhcHRpb24uIENsb3NlIHRoZSBjYXB0aW9uIGFu
ZCB0cnkgYWdhaW4uCi0gICAgICAgICAgICBwb3BCbG9jayhJRF9DQVBUSU9OKTsKLSAgICAgICAg
ICAgIHN3aXRjaCggaWQgKSB7Ci0gICAgICAgICAgICBjYXNlIElEX1RIRUFEOgotICAgICAgICAg
ICAgY2FzZSBJRF9URk9PVDoKLSAgICAgICAgICAgIGNhc2UgSURfVEJPRFk6Ci0gICAgICAgICAg
ICBjYXNlIElEX1RSOgotICAgICAgICAgICAgY2FzZSBJRF9URDoKLSAgICAgICAgICAgIGNhc2Ug
SURfVEg6CisgICAgICAgICAgICBwb3BCbG9jayhjdXJyZW50VGFnTmFtZSk7CisgICAgICAgICAg
ICBpZiAoaXNUYWJsZVBhcnQobikpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGluc2VydE5vZGUo
biwgZmxhdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBJRF9UQUJMRToKLSAgICAgICAgY2FzZSBJRF9USEVBRDoKLSAgICAgICAgY2FzZSBJRF9URk9P
VDoKLSAgICAgICAgY2FzZSBJRF9UQk9EWToKLSAgICAgICAgY2FzZSBJRF9UUjoKLSAgICAgICAg
ICAgIHN3aXRjaChpZCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIGNhc2UgSURfVEFCTEU6
Ci0gICAgICAgICAgICAgICAgcG9wQmxvY2soSURfVEFCTEUpOyAvLyBlbmQgdGhlIHRhYmxlCisg
ICAgICAgIH0gZWxzZSBpZiAoaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dGFibGUoKSkgfHwg
aC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dHIoKSkgfHwgaXNUYWJsZVNlY3Rpb24oaCkpIHsK
KyAgICAgICAgICAgIGlmIChuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGFibGUoKSkpIHsKKyAg
ICAgICAgICAgICAgICBwb3BCbG9jayhsb2NhbE5hbWUpOyAvLyBlbmQgdGhlIHRhYmxlCiAgICAg
ICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7ICAgICAgLy8gLi4uYW5kIHN0YXJ0IGEgbmV3IG9u
ZQotICAgICAgICAgICAgICAgIGJyZWFrOwotCSAgICBjYXNlIElEX1RFWFQ6Ci0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgVGV4dEltcGwgKnQgPSBzdGF0aWNfY2FzdDxUZXh0SW1wbCAq
PihuKTsKLSAgICAgICAgICAgICAgICBpZiAodC0+Y29udGFpbnNPbmx5V2hpdGVzcGFjZSgpKQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgRE9NU3Ry
aW5nSW1wbCAqaSA9IHQtPnN0cmluZygpOwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBw
b3MgPSAwOwotICAgICAgICAgICAgICAgIHdoaWxlKHBvcyA8IGktPmwgJiYgKCAqKGktPnMrcG9z
KSA9PSBRQ2hhcignICcpIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICooaS0+cytwb3MpID09IFFDaGFyKDB4YTApKSkgcG9zKys7Ci0gICAgICAgICAgICAgICAgaWYo
cG9zID09IGktPmwpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBOb2Rl
SW1wbCAqbm9kZSA9IGN1cnJlbnQ7Ci0gICAgICAgICAgICAgICAgTm9kZUltcGwgKnBhcmVudCA9
IG5vZGUtPnBhcmVudE5vZGUoKTsKLQotICAgICAgICAgICAgICAgIE5vZGVJbXBsICpwYXJlbnRw
YXJlbnQgPSBwYXJlbnQtPnBhcmVudE5vZGUoKTsKLQotICAgICAgICAgICAgICAgIGlmIChuLT5p
c1RleHROb2RlKCkgfHwKLSAgICAgICAgICAgICAgICAgICAgKCBub2RlLT5pZCgpID09IElEX1RS
ICYmCi0gICAgICAgICAgICAgICAgICAgICAoIHBhcmVudC0+aWQoKSA9PSBJRF9USEVBRCB8fAot
ICAgICAgICAgICAgICAgICAgICAgIHBhcmVudC0+aWQoKSA9PSBJRF9UQk9EWSB8fAotICAgICAg
ICAgICAgICAgICAgICAgIHBhcmVudC0+aWQoKSA9PSBJRF9URk9PVCApICYmIHBhcmVudHBhcmVu
dC0+aWQoKSA9PSBJRF9UQUJMRSApIHx8Ci0gICAgICAgICAgICAgICAgICAgICggIWNoZWNrQ2hp
bGQoSURfVFIsIGlkLCAhZG9jKCktPmluQ29tcGF0TW9kZSgpKSAmJiAoIG5vZGUtPmlkKCkgPT0g
SURfVEhFQUQgfHwgbm9kZS0+aWQoKSA9PSBJRF9UQk9EWSB8fCBub2RlLT5pZCgpID09IElEX1RG
T09UICkgJiYKLSAgICAgICAgICAgICAgICAgICAgIHBhcmVudC0+aWQoKSA9PSBJRF9UQUJMRSAp
KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbm9kZSA9IChub2RlLT5p
ZCgpID09IElEX1RBQkxFKSA/IG5vZGUgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICgo
bm9kZS0+aWQoKSA9PSBJRF9UUikgPyBwYXJlbnRwYXJlbnQgOiBwYXJlbnQpOworICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBib29sIHBvc3NpYmx5TW92ZVN0cmF5Q29udGVu
dCA9IHRydWU7CisgICAgICAgICAgICAgICAgaW50IGV4Y2VwdGlvbkNvZGUgPSAwOworICAgICAg
ICAgICAgICAgIGlmIChuLT5pc1RleHROb2RlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgVGV4
dEltcGwgKnQgPSBzdGF0aWNfY2FzdDxUZXh0SW1wbCAqPihuKTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKHQtPmNvbnRhaW5zT25seVdoaXRlc3BhY2UoKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgRE9NU3RyaW5nSW1wbCAqaSA9
IHQtPnN0cmluZygpOworICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcG9zID0gMDsK
KyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHBvcyA8IGktPmwgJiYgKCooaS0+cytwb3MpID09
IFFDaGFyKCcgJykgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICooaS0+cytwb3MpID09IFFDaGFyKDB4YTApKSkgcG9zKys7CisgICAgICAgICAgICAgICAgICAg
IGlmIChwb3MgPT0gaS0+bCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHBvc3NpYmx5TW92ZVN0
cmF5Q29udGVudCA9IGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBp
ZiAocG9zc2libHlNb3ZlU3RyYXlDb250ZW50KSB7CisgICAgICAgICAgICAgICAgICAgIE5vZGVJ
bXBsICpub2RlID0gY3VycmVudDsKICAgICAgICAgICAgICAgICAgICAgTm9kZUltcGwgKnBhcmVu
dCA9IG5vZGUtPnBhcmVudE5vZGUoKTsKLSAgICAgICAgICAgICAgICAgICAgaW50IGV4Y2VwdGlv
bmNvZGUgPSAwOwotICAgICAgICAgICAgICAgICAgICBwYXJlbnQtPmluc2VydEJlZm9yZSggbiwg
bm9kZSwgZXhjZXB0aW9uY29kZSApOwotICAgICAgICAgICAgICAgICAgICBpZiAoIGV4Y2VwdGlv
bmNvZGUgKSB7Ci0jaWZkZWYgUEFSU0VSX0RFQlVHCi0gICAgICAgICAgICAgICAgICAgICAgICBr
ZERlYnVnKCA2MDM1ICkgPDwgImFkZGluZyBjb250ZW50IGJlZm9yZSB0YWJsZSBmYWlsZWQhIiA8
PCBlbmRsOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgTm9kZUltcGwgKmdyYW5kcGFyZW50ID0gcGFyZW50LT5wYXJlbnROb2RlKCk7
CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKG4tPmlzVGV4dE5vZGUoKSB8fAorICAgICAgICAg
ICAgICAgICAgICAgICAgKGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnRyKCkpICYmCisgICAg
ICAgICAgICAgICAgICAgICAgICAgaXNUYWJsZVNlY3Rpb24ocGFyZW50KSAmJiBncmFuZHBhcmVu
dC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRhYmxlKCkpKSB8fAorICAgICAgICAgICAgICAgICAg
ICAgICAgICgoIW4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0ZCgpKSAmJiAhbi0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OnRoKCkpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAhbi0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OmZvcm0oKSkgJiYgIW4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpz
Y3JpcHQoKSkpICYmIGlzVGFibGVTZWN0aW9uKG5vZGUpICYmCisgICAgICAgICAgICAgICAgICAg
ICAgICAgcGFyZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGFibGUoKSkpKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBub2RlID0gKG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0YWJs
ZSgpKSkgPyBub2RlIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChub2RlLT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6dHIoKSkpID8gZ3JhbmRwYXJlbnQgOiBwYXJlbnQpOworICAg
ICAgICAgICAgICAgICAgICAgICAgTm9kZUltcGwgKnBhcmVudCA9IG5vZGUtPnBhcmVudE5vZGUo
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudC0+aW5zZXJ0QmVmb3JlKG4sIG5vZGUs
IGV4Y2VwdGlvbkNvZGUpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFleGNlcHRpb25D
b2RlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4tPmlzSFRNTEVsZW1lbnQo
KSAmJiB0YWdQcmlvcml0eSA+IDAgJiYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICFmbGF0ICYmIHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCo+KG4pLT5lbmRUYWdSZXF1aXJl
bWVudCgpICE9IFRhZ1N0YXR1c0ZvcmJpZGRlbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2hCbG9jayhsb2NhbE5hbWUs
IHRhZ1ByaW9yaXR5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q3VycmVu
dChuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5TdHJheVRhYmxlQ29udGVu
dCsrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9ja1N0YWNrLT5zdHJheVRh
YmxlQ29udGVudCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmIChuLT5p
c0VsZW1lbnROb2RlKCkgJiYgdGFnUHJpb3JpdHkoaWQpICE9IDAgJiYgCi0gICAgICAgICAgICAg
ICAgICAgICAgICAhZmxhdCAmJiBlbmRUYWdSZXF1aXJlbWVudChpZCkgIT0gRE9NOjpGT1JCSURE
RU4pCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHB1c2hC
bG9jayhpZCwgdGFnUHJpb3JpdHkoaWQpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldEN1
cnJlbnQobik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpblN0cmF5VGFibGVDb250ZW50Kys7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBibG9ja1N0YWNrLT5zdHJheVRhYmxlQ29udGVudCA9
IHRydWU7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFleGNlcHRpb25Db2RlKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRy
KCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUgPSBuZXcgSFRNTFRhYmxlQ2VsbEVs
ZW1lbnRJbXBsKEhUTUxOYW1lczo6dGQoKSwgZG9jdW1lbnQpOworICAgICAgICAgICAgICAgICAg
ICAgICAgZWxzZSBpZiAoY3VycmVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRhYmxlKCkpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUgPSBuZXcgSFRNTFRhYmxlU2VjdGlvbkVsZW1l
bnRJbXBsKEhUTUxOYW1lczo6dGJvZHkoKSwgZG9jdW1lbnQsIHRydWUpOyAvLyBpbXBsaWNpdCAK
KyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlID0gbmV3IEhUTUxUYWJsZVJvd0VsZW1lbnRJbXBsKGRvY3VtZW50KTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0Tm9kZShlKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgIGlmICggY3VycmVudC0+aWQoKSA9PSBJRF9UUiApCi0gICAgICAg
ICAgICAgICAgICAgIGUgPSBuZXcgSFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsKGRvY3VtZW50LCBJ
RF9URCk7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoIGN1cnJlbnQtPmlkKCkgPT0gSURfVEFC
TEUgKQotICAgICAgICAgICAgICAgICAgICBlID0gbmV3IEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50
SW1wbCggZG9jdW1lbnQsIElEX1RCT0RZLCB0cnVlIC8qIGltcGxpY2l0ICovICk7Ci0gICAgICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBlID0gbmV3IEhUTUxUYWJsZVJvd0Vs
ZW1lbnRJbXBsKCBkb2N1bWVudCApOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IGluc2VydE5vZGUoZSk7Ci0gICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9IC8vIGVuZCBkZWZhdWx0Ci0gICAgICAgICAg
ICB9IC8vIGVuZCBzd2l0Y2gKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElEX09C
SkVDVDoKLSAgICAgICAgICAgIGRpc2NhcmRfdW50aWwgPSBJRF9PQkpFQ1QgKyBJRF9DTE9TRV9U
QUc7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoaC0+aGFzTG9j
YWxOYW1lKEhUTUxOYW1lczo6b2JqZWN0KCkpKSB7CisgICAgICAgICAgICBzZXRTa2lwTW9kZShI
VE1MTmFtZXM6Om9iamVjdCgpKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
Y2FzZSBJRF9VTDoKLSAgICAgICAgY2FzZSBJRF9PTDoKLSAgICAgICAgY2FzZSBJRF9ESVI6Ci0g
ICAgICAgIGNhc2UgSURfTUVOVToKKyAgICAgICAgfSBlbHNlIGlmIChoLT5oYXNMb2NhbE5hbWUo
SFRNTE5hbWVzOjp1bCgpKSB8fCBoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvbCgpKSB8fAor
ICAgICAgICAgICAgICAgICBoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpkaXIoKSkgfHwgaC0+
aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6bWVudSgpKSkgewogICAgICAgICAgICAgZSA9IG5ldyBI
VE1MRGl2RWxlbWVudEltcGwoZG9jdW1lbnQpOwogICAgICAgICAgICAgaW5zZXJ0Tm9kZShlKTsK
ICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICBjYXNlIElEX0RMOgotICAgICAgICAgICAgICAgIHBvcEJsb2NrKElEX0RMKTsKLSAgICAg
ICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIGNhc2UgSURfRFQ6Ci0gICAgICAgICAgICAgICAgcG9wQmxvY2soSURfRFQpOwotICAg
ICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIElEX1NFTEVDVDoKLSAgICAgICAgICAgIGlmKCBuLT5pc0lubGluZSgpICkKKyAg
ICAgICAgfSBlbHNlIGlmIChoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpkbCgpKSB8fCBoLT5o
YXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpkdCgpKSkgeworICAgICAgICAgICAgcG9wQmxvY2soY3Vy
cmVudFRhZ05hbWUpOworICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7CisgICAgICAgIH0gZWxz
ZSBpZiAoaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6c2VsZWN0KCkpKSB7CisgICAgICAgICAg
ICBpZiAoaXNJbmxpbmUobikpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSURfUDoKLSAgICAgICAgY2FzZSBJRF9IMToKLSAg
ICAgICAgY2FzZSBJRF9IMjoKLSAgICAgICAgY2FzZSBJRF9IMzoKLSAgICAgICAgY2FzZSBJRF9I
NDoKLSAgICAgICAgY2FzZSBJRF9INToKLSAgICAgICAgY2FzZSBJRF9INjoKLSAgICAgICAgICAg
IGlmKCFuLT5pc0lubGluZSgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHBvcEJs
b2NrKGN1cnJlbnQtPmlkKCkpOworICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFtZShI
VE1MTmFtZXM6OnAoKSkgfHwgaXNIZWFkZXJUYWcoY3VycmVudFRhZ05hbWUpKSB7CisgICAgICAg
ICAgICBpZiAoIWlzSW5saW5lKG4pKSB7CisgICAgICAgICAgICAgICAgcG9wQmxvY2soY3VycmVu
dFRhZ05hbWUpOwogICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwogICAgICAgICAgICAg
fQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSURfT1BUSU9OOgotICAgICAgICBj
YXNlIElEX09QVEdST1VQOgotICAgICAgICAgICAgaWYgKGlkID09IElEX09QVEdST1VQKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIHBvcEJsb2NrKGN1cnJlbnQtPmlkKCkpOworICAg
ICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9wdGlvbigpKSB8fCBo
LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvcHRncm91cCgpKSkgeworICAgICAgICAgICAgaWYg
KGxvY2FsTmFtZSA9PSBIVE1MTmFtZXM6Om9wdGdyb3VwKCkpIHsKKyAgICAgICAgICAgICAgICBw
b3BCbG9jayhjdXJyZW50VGFnTmFtZSk7CiAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7
CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmKGlkID09IElEX1NFTEVDVCkKLSAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgIGVsc2UgaWYgKGxvY2FsTmFtZSA9PSBIVE1MTmFtZXM6
OnNlbGVjdCgpKSB7CiAgICAgICAgICAgICAgICAgLy8gSUUgdHJlYXRzIGEgbmVzdGVkIHNlbGVj
dCBhcyA8L3NlbGVjdD4uIExldCdzIGRvIHRoZSBzYW1lCi0gICAgICAgICAgICAgICAgcG9wQmxv
Y2soIElEX1NFTEVDVCApOwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IHBvcEJsb2NrKGxvY2FsTmFtZSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIC8vIGhlYWQgZWxlbWVudHMgaW4gdGhlIGJvZHkgc2hvdWxkIGJlIGlnbm9y
ZWQuCi0gICAgICAgIGNhc2UgSURfQUREUkVTUzoKLSAgICAgICAgICAgIHBvcEJsb2NrKElEX0FE
RFJFU1MpOworICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmFk
ZHJlc3MoKSkpIHsKKyAgICAgICAgICAgIHBvcEJsb2NrKGN1cnJlbnRUYWdOYW1lKTsKICAgICAg
ICAgICAgIGhhbmRsZWQgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
SURfQ09MR1JPVVA6Ci0gICAgICAgICAgICBpZiAoaWQgIT0gSURfVEVYVCkgewotICAgICAgICAg
ICAgICAgIHBvcEJsb2NrKElEX0NPTEdST1VQKTsKKyAgICAgICAgfSBlbHNlIGlmIChoLT5oYXNM
b2NhbE5hbWUoSFRNTE5hbWVzOjpjb2xncm91cCgpKSkgeworICAgICAgICAgICAgaWYgKCFuLT5p
c1RleHROb2RlKCkpIHsKKyAgICAgICAgICAgICAgICBwb3BCbG9jayhjdXJyZW50VGFnTmFtZSk7
CiAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJRF9GT05UOgotICAgICAgICAgICAgcG9wQmxvY2so
SURfRk9OVCk7CisgICAgICAgIH0gZWxzZSBpZiAoaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6
Zm9udCgpKSkgeworICAgICAgICAgICAgcG9wQmxvY2soY3VycmVudFRhZ05hbWUpOwogICAgICAg
ICAgICAgaGFuZGxlZCA9IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgIGlmKGN1cnJlbnQtPmlzRG9jdW1lbnROb2RlKCkpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgaWYoY3VycmVudC0+Zmlyc3RDaGlsZCgpID09IDApIHsKLSAg
ICAgICAgICAgICAgICAgICAgZSA9IG5ldyBIVE1MSHRtbEVsZW1lbnRJbXBsKGRvY3VtZW50KTsK
LSAgICAgICAgICAgICAgICAgICAgaW5zZXJ0Tm9kZShlKTsKLSAgICAgICAgICAgICAgICAgICAg
aGFuZGxlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgZWxzZSBpZihjdXJyZW50LT5pc0lubGluZSgpKQotICAgICAgICAgICAgeworICAgICAg
ICB9IGVsc2UgaWYgKCFoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpib2R5KCkpKSB7CisgICAg
ICAgICAgICBpZiAoaXNJbmxpbmUoY3VycmVudCkpIHsKICAgICAgICAgICAgICAgICBwb3BJbmxp
bmVCbG9ja3MoKTsKICAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKICAgICAgICAgICAg
IH0KICAgICAgICAgfQotCi0gICAgICAgIC8vIGlmIHdlIGNvdWxkbid0IGhhbmRsZSB0aGUgZXJy
b3IsIGp1c3QgcmV0aHJvdyB0aGUgZXhjZXB0aW9uLi4uCi0gICAgICAgIGlmKCFoYW5kbGVkKQot
ICAgICAgICB7Ci0gICAgICAgICAgICAvL2tkRGVidWcoIDYwMzUgKSA8PCAiRXhjZXB0aW9uIGhh
bmRsZXIgZmFpbGVkIGluIEhUTUxQQXJzZXI6Omluc2VydE5vZGUoKSIgPDwgZW5kbDsKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgZWxzZSBpZiAoY3VycmVudC0+aXNEb2N1
bWVudE5vZGUoKSkgeworICAgICAgICBpZiAoY3VycmVudC0+Zmlyc3RDaGlsZCgpID09IDApIHsK
KyAgICAgICAgICAgIGUgPSBuZXcgSFRNTEh0bWxFbGVtZW50SW1wbChkb2N1bWVudCk7CisgICAg
ICAgICAgICBpbnNlcnROb2RlKGUpOworICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7CiAgICAg
ICAgIH0KLQotICAgICAgICByZXR1cm4gaW5zZXJ0Tm9kZShuKTsKICAgICB9CisKKyAgICAvLyAz
LiBJZiB3ZSBjb3VsZG4ndCBoYW5kbGUgdGhlIGVycm9yLCBqdXN0IHJldHVybiBmYWxzZSBhbmQg
YXR0ZW1wdCB0byBlcnJvci1jb3JyZWN0IGFnYWluLgorICAgIGlmICghaGFuZGxlZCkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBpbnNlcnROb2RlKG4pOwogfQogCi1Ob2RlSW1w
bCAqS0hUTUxQYXJzZXI6OmdldEVsZW1lbnQoVG9rZW4qIHQpCit0eXBlZGVmIGJvb2wgKEhUTUxQ
YXJzZXI6OipDcmVhdGVFcnJvckNoZWNrRnVuYykoVG9rZW4qIHQsIE5vZGVJbXBsKiYpOwordHlw
ZWRlZiBIYXNoTWFwPERPTVN0cmluZ0ltcGwgKiwgQ3JlYXRlRXJyb3JDaGVja0Z1bmMsIFBvaW50
ZXJIYXNoPERPTVN0cmluZ0ltcGwgKj4gPiBGdW5jdGlvbk1hcDsKKworYm9vbCBIVE1MUGFyc2Vy
Ojp0ZXh0Q3JlYXRlRXJyb3JDaGVjayhUb2tlbiogdCwgTm9kZUltcGwqJiByZXN1bHQpCiB7Ci0g
ICAgc3dpdGNoICh0LT5pZCkKLSAgICB7Ci0gICAgY2FzZSBJRF9IRUFEOgotICAgICAgICBpZiAo
IWhlYWQgJiYgY3VycmVudC0+aWQoKSA9PSBJRF9IVE1MKSB7Ci0gICAgICAgICAgICBoZWFkID0g
bmV3IEhUTUxIZWFkRWxlbWVudEltcGwoZG9jdW1lbnQpOwotICAgICAgICAgICAgcmV0dXJuIGhl
YWQ7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgY2FzZSBJRF9CT0RZOgotICAg
ICAgICAvLyBib2R5IG5vIGxvbmdlciBhbGxvd2VkIGlmIHdlIGhhdmUgYSBmcmFtZXNldAotICAg
ICAgICBpZiAoaGF2ZUZyYW1lU2V0KQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHBv
cEJsb2NrKElEX0hFQUQpOwotICAgICAgICBzdGFydEJvZHkoKTsKLSAgICAgICAgcmV0dXJuIG5l
dyBIVE1MQm9keUVsZW1lbnRJbXBsKGRvY3VtZW50KTsKLQotLy8gZnJhbWVzCi0gICAgY2FzZSBJ
RF9GUkFNRVNFVDoKLSAgICAgICAgcG9wQmxvY2soSURfSEVBRCk7Ci0gICAgICAgIGlmIChpbkJv
ZHkgJiYgIWhhdmVGcmFtZVNldCAmJiAhaGF2ZUNvbnRlbnQpIHsKLSAgICAgICAgICAgIHBvcEJs
b2NrKElEX0JPRFkpOwotICAgICAgICAgICAgLy8gIyMjIGFjdHVhbGx5IGZvciBJRSBkb2N1bWVu
dC5ib2R5IHJldHVybnMgdGhlIG5vdyBoaWRkZW4gImJvZHkiIGVsZW1lbnQKLSAgICAgICAgICAg
IC8vIHdlIGNhbid0IGltcGxlbWVudCB0aGF0IGJlaGF2aW91ciBub3cgYmVjYXVzZSBpdCBjb3Vs
ZCBjYXVzZSB0b28gbWFueQotICAgICAgICAgICAgLy8gcmVncmVzc2lvbnMgYW5kIHRoZSBoZWFk
YWNoZXMgYXJlIG5vdCB3b3J0aCB0aGUgd29yayBhcyBsb25nIGFzIHRoZXJlIGlzCi0gICAgICAg
ICAgICAvLyBubyBzaXRlIGFjdHVhbGx5IHJlbHlpbmcgb24gdGhhdCBkZXRhaWwgKERpcmspCi0g
ICAgICAgICAgICBpZiAoZG9jKCktPmJvZHkoKSkKLSAgICAgICAgICAgICAgICBkb2MoKS0+Ym9k
eSgpLT5zZXRBdHRyaWJ1dGUoQVRUUl9TVFlMRSwgImRpc3BsYXk6bm9uZSIpOwotICAgICAgICAg
ICAgaW5Cb2R5ID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKChoYXZlQ29udGVudCB8
fCBoYXZlRnJhbWVTZXQpICYmIGN1cnJlbnQtPmlkKCkgPT0gSURfSFRNTCkKLSAgICAgICAgICAg
IHJldHVybiAwOwotICAgICAgICBoYXZlRnJhbWVTZXQgPSB0cnVlOwotICAgICAgICBzdGFydEJv
ZHkoKTsKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MRnJhbWVTZXRFbGVtZW50SW1wbChkb2N1bWVu
dCk7CisgICAgcmVzdWx0ID0gbmV3IFRleHRJbXBsKGRvY3VtZW50LCB0LT50ZXh0KTsKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgSFRNTFBhcnNlcjo6Y29tbWVudENyZWF0ZUVycm9yQ2hl
Y2soVG9rZW4qIHQsIE5vZGVJbXBsKiYgcmVzdWx0KQoreworICAgIGlmIChpbmNsdWRlc0NvbW1l
bnRzSW5ET00pCisgICAgICAgIHJlc3VsdCA9IG5ldyBDb21tZW50SW1wbChkb2N1bWVudCwgdC0+
dGV4dCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEhUTUxQYXJzZXI6OmhlYWRDcmVh
dGVFcnJvckNoZWNrKFRva2VuKiB0LCBOb2RlSW1wbComIHJlc3VsdCkKK3sKKyAgICByZXR1cm4g
KCFoZWFkIHx8IGN1cnJlbnQtPmxvY2FsTmFtZSgpID09IEhUTUxOYW1lczo6aHRtbCgpKTsKK30K
IAorYm9vbCBIVE1MUGFyc2VyOjpib2R5Q3JlYXRlRXJyb3JDaGVjayhUb2tlbiogdCwgTm9kZUlt
cGwqJiByZXN1bHQpCit7CisgICAgLy8gYm9keSBubyBsb25nZXIgYWxsb3dlZCBpZiB3ZSBoYXZl
IGEgZnJhbWVzZXQKKyAgICBpZiAoaGF2ZUZyYW1lU2V0KQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgcG9wQmxvY2soSFRNTE5hbWVzOjpoZWFkKCkpOworICAgIHN0YXJ0Qm9keSgpOworICAg
IHJldHVybiB0cnVlOworfQorCitib29sIEhUTUxQYXJzZXI6OmZyYW1lc2V0Q3JlYXRlRXJyb3JD
aGVjayhUb2tlbiogdCwgTm9kZUltcGwqJiByZXN1bHQpCit7CisgICAgcG9wQmxvY2soSFRNTE5h
bWVzOjpoZWFkKCkpOworICAgIGlmIChpbkJvZHkgJiYgIWhhdmVGcmFtZVNldCAmJiAhaGF2ZUNv
bnRlbnQpIHsKKyAgICAgICAgcG9wQmxvY2soSFRNTE5hbWVzOjpib2R5KCkpOworICAgICAgICAv
LyAjIyMgYWN0dWFsbHkgZm9yIElFIGRvY3VtZW50LmJvZHkgcmV0dXJucyB0aGUgbm93IGhpZGRl
biAiYm9keSIgZWxlbWVudAorICAgICAgICAvLyB3ZSBjYW4ndCBpbXBsZW1lbnQgdGhhdCBiZWhh
dmlvdXIgbm93IGJlY2F1c2UgaXQgY291bGQgY2F1c2UgdG9vIG1hbnkKKyAgICAgICAgLy8gcmVn
cmVzc2lvbnMgYW5kIHRoZSBoZWFkYWNoZXMgYXJlIG5vdCB3b3J0aCB0aGUgd29yayBhcyBsb25n
IGFzIHRoZXJlIGlzCisgICAgICAgIC8vIG5vIHNpdGUgYWN0dWFsbHkgcmVseWluZyBvbiB0aGF0
IGRldGFpbCAoRGlyaykKKyAgICAgICAgaWYgKGRvYygpLT5ib2R5KCkpCisgICAgICAgICAgICBk
b2MoKS0+Ym9keSgpLT5zZXRBdHRyaWJ1dGUoQVRUUl9TVFlMRSwgImRpc3BsYXk6bm9uZSIpOwor
ICAgICAgICBpbkJvZHkgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKChoYXZlQ29udGVudCB8fCBo
YXZlRnJhbWVTZXQpICYmIGN1cnJlbnQtPmxvY2FsTmFtZSgpID09IEhUTUxOYW1lczo6aHRtbCgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaGF2ZUZyYW1lU2V0ID0gdHJ1ZTsKKyAgICBz
dGFydEJvZHkoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBIVE1MUGFyc2VyOjppZnJh
bWVDcmVhdGVFcnJvckNoZWNrKFRva2VuKiB0LCBOb2RlSW1wbComIHJlc3VsdCkKK3sKICAgICAv
LyBhIGJpdCBvZiBhIHNwZWNpYWwgY2FzZSwgc2luY2UgdGhlIGZyYW1lIGlzIGlubGluZWQKLSAg
ICBjYXNlIElEX0lGUkFNRToKLSAgICAgICAgZGlzY2FyZF91bnRpbCA9IElEX0lGUkFNRSArIElE
X0NMT1NFX1RBRzsKLSAgICAgICAgYnJlYWs7Ci0KLS8vIGZvcm0gZWxlbWVudHMKLSAgICBjYXNl
IElEX0ZPUk06Ci0gICAgICAgIC8vIE9ubHkgY3JlYXRlIGEgbmV3IGZvcm0gaWYgd2UncmUgbm90
IGFscmVhZHkgaW5zaWRlIG9uZS4KLSAgICAgICAgLy8gVGhpcyBpcyBjb25zaXN0ZW50IHdpdGgg
b3RoZXIgYnJvd3NlcnMnIGJlaGF2aW9yLgotICAgICAgICBpZiAoZm9ybSkKLSAgICAgICAgICAg
IHJldHVybiAwOwotICAgICAgICBmb3JtID0gbmV3IEhUTUxGb3JtRWxlbWVudEltcGwoZG9jdW1l
bnQpOwotICAgICAgICByZXR1cm4gZm9ybTsKLSAgICBjYXNlIElEX0JVVFRPTjoKLSAgICAgICAg
cmV0dXJuIG5ldyBIVE1MQnV0dG9uRWxlbWVudEltcGwoZG9jdW1lbnQsIGZvcm0pOwotICAgIGNh
c2UgSURfRklFTERTRVQ6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTEZpZWxkU2V0RWxlbWVudElt
cGwoZG9jdW1lbnQsIGZvcm0pOwotICAgIGNhc2UgSURfSU5QVVQ6Ci0gICAgICAgIHJldHVybiBu
ZXcgSFRNTElucHV0RWxlbWVudEltcGwoZG9jdW1lbnQsIGZvcm0pOwotICAgIGNhc2UgSURfSVNJ
TkRFWDogewotICAgICAgICBOb2RlSW1wbCAqbiA9IGhhbmRsZUlzaW5kZXgodCk7Ci0gICAgICAg
IGlmICghaW5Cb2R5KSB7Ci0gICAgICAgICAgICBpZiAoaXNpbmRleCkKLSAgICAgICAgICAgICAg
ICBpc2luZGV4LT5kZXJlZigpOwotICAgICAgICAgICAgaXNpbmRleCA9IG47Ci0gICAgICAgICAg
ICBpc2luZGV4LT5yZWYoKTsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9CisgICAg
c2V0U2tpcE1vZGUoSFRNTE5hbWVzOjppZnJhbWUoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2Jvb2wgSFRNTFBhcnNlcjo6Zm9ybUNyZWF0ZUVycm9yQ2hlY2soVG9rZW4qIHQsIE5vZGVJbXBs
KiYgcmVzdWx0KQoreworICAgIC8vIE9ubHkgY3JlYXRlIGEgbmV3IGZvcm0gaWYgd2UncmUgbm90
IGFscmVhZHkgaW5zaWRlIG9uZS4KKyAgICAvLyBUaGlzIGlzIGNvbnNpc3RlbnQgd2l0aCBvdGhl
ciBicm93c2VycycgYmVoYXZpb3IuCisgICAgcmV0dXJuICFmb3JtOworfQorCitib29sIEhUTUxQ
YXJzZXI6OmlzaW5kZXhDcmVhdGVFcnJvckNoZWNrKFRva2VuKiB0LCBOb2RlSW1wbComIHJlc3Vs
dCkKK3sKKyAgICBOb2RlSW1wbCAqbiA9IGhhbmRsZUlzaW5kZXgodCk7CisgICAgaWYgKCFpbkJv
ZHkpIHsKKyAgICAgICAgaWYgKGlzaW5kZXgpCisgICAgICAgICAgICBpc2luZGV4LT5kZXJlZigp
OworICAgICAgICBpc2luZGV4ID0gbjsKKyAgICAgICAgaXNpbmRleC0+cmVmKCk7CisgICAgfSBl
bHNlIHsKICAgICAgICAgdC0+ZmxhdCA9IHRydWU7Ci0gICAgICAgIHJldHVybiBuOworICAgICAg
ICByZXN1bHQgPSBuOwogICAgIH0KLSAgICBjYXNlIElEX0tFWUdFTjoKLSAgICAgICAgcmV0dXJu
IG5ldyBIVE1MS2V5Z2VuRWxlbWVudEltcGwoZG9jdW1lbnQsIGZvcm0pOwotICAgIGNhc2UgSURf
TEVHRU5EOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxMZWdlbmRFbGVtZW50SW1wbChkb2N1bWVu
dCwgZm9ybSk7Ci0gICAgY2FzZSBJRF9PUFRHUk9VUDoKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1M
T3B0R3JvdXBFbGVtZW50SW1wbChkb2N1bWVudCwgZm9ybSk7Ci0gICAgY2FzZSBJRF9PUFRJT046
Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTE9wdGlvbkVsZW1lbnRJbXBsKGRvY3VtZW50LCBmb3Jt
KTsKLSAgICBjYXNlIElEX1NFTEVDVDoKLSAgICAgICAgaW5TZWxlY3QgPSB0cnVlOwotICAgICAg
ICByZXR1cm4gbmV3IEhUTUxTZWxlY3RFbGVtZW50SW1wbChkb2N1bWVudCwgZm9ybSk7Ci0gICAg
Y2FzZSBJRF9URVhUQVJFQToKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MVGV4dEFyZWFFbGVtZW50
SW1wbChkb2N1bWVudCwgZm9ybSk7Ci0KLS8vIGxpc3RzCi0gICAgY2FzZSBJRF9ERDoKLSAgICAg
ICAgcG9wQmxvY2soSURfRFQpOwotICAgICAgICBwb3BCbG9jayhJRF9ERCk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgSURfRFQ6Ci0gICAgICAgIHBvcEJsb2NrKElEX0REKTsKLSAgICAgICAg
cG9wQmxvY2soSURfRFQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIElEX0xJOgotICAgICAg
ICBwb3BCbG9jayhJRF9MSSk7Ci0gICAgICAgIGJyZWFrOwotCi0vLyBhbmNob3IKLSAgICBjYXNl
IElEX0E6Ci0gICAgICAgIC8vIE5ldmVyIGFsbG93IG5lc3RlZCA8YT5zLgotICAgICAgICBwb3BC
bG9jayhJRF9BKTsKLSAgICAgICAgYnJlYWs7Ci0KLS8vIGltYWdlcwotICAgIGNhc2UgSURfSU1H
OgotICAgICAgICByZXR1cm4gbmV3IEhUTUxJbWFnZUVsZW1lbnRJbXBsKGRvY3VtZW50LCBmb3Jt
KTsKLSAgICBjYXNlIElEX01BUDoKLSAgICAgICAgbWFwID0gbmV3IEhUTUxNYXBFbGVtZW50SW1w
bChkb2N1bWVudCk7Ci0gICAgICAgIHJldHVybiBtYXA7Ci0KLS8vIHRhYmxlcwotICAgIGNhc2Ug
SURfVFI6Ci0gICAgICAgIHBvcEJsb2NrKElEX1RSKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBJRF9URDoKLSAgICBjYXNlIElEX1RIOgotICAgICAgICBwb3BCbG9jayhJRF9USCk7Ci0gICAg
ICAgIHBvcEJsb2NrKElEX1REKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9UQk9EWToK
LSAgICBjYXNlIElEX1RIRUFEOgotICAgIGNhc2UgSURfVEZPT1Q6Ci0gICAgICAgIHBvcEJsb2Nr
KElEX1RIRUFEKTsKLSAgICAgICAgcG9wQmxvY2soSURfVEJPRFkpOwotICAgICAgICBwb3BCbG9j
ayhJRF9URk9PVCk7Ci0gICAgICAgIGJyZWFrOwotCi0vLyBlbGVtZW50cyB3aXRoIG5vIHNwZWNp
YWwgcmVwcmVzZW50YXRpb24gaW4gdGhlIERPTQotICAgIGNhc2UgSURfVFQ6Ci0gICAgY2FzZSBJ
RF9VOgotICAgIGNhc2UgSURfQjoKLSAgICBjYXNlIElEX0k6Ci0gICAgY2FzZSBJRF9TOgotICAg
IGNhc2UgSURfU1RSSUtFOgotICAgIGNhc2UgSURfQklHOgotICAgIGNhc2UgSURfU01BTEw6Ci0g
ICAgICAgIGlmICghYWxsb3dOZXN0ZWRSZWR1bmRhbnRUYWcodC0+aWQpKQotICAgICAgICAgICAg
cmV0dXJuIDA7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBJRF9OT0JSOgotICAgIGNhc2Ug
SURfV0JSOgotICAgICAgICBwb3BCbG9jayh0LT5pZCk7IC8vIERvbid0IGFsbG93IG5lc3RlZCA8
bm9icj4gb3IgPHdicj4KLSAgICAgICAgYnJlYWs7Ci0KLS8vIHRoZXNlIGFyZSBzcGVjaWFsLCBh
bmQgbm9ybWFsbHkgbm90IHJlbmRlcmVkCi0gICAgY2FzZSBJRF9OT0VNQkVEOgotICAgICAgICBk
aXNjYXJkX3VudGlsID0gSURfTk9FTUJFRCArIElEX0NMT1NFX1RBRzsKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgY2FzZSBJRF9OT0ZSQU1FUzoKLSAgICAgICAgZGlzY2FyZF91bnRpbCA9IElEX05P
RlJBTUVTICsgSURfQ0xPU0VfVEFHOwotICAgICAgICByZXR1cm4gMDsKLSAgICBjYXNlIElEX05P
U0NSSVBUOgotICAgICAgICBpZiAoSFRNTFdpZGdldCAmJiBIVE1MV2lkZ2V0LT5wYXJ0KCktPmpT
Y3JpcHRFbmFibGVkKCkpCi0gICAgICAgICAgICBkaXNjYXJkX3VudGlsID0gSURfTk9TQ1JJUFQg
KyBJRF9DTE9TRV9UQUc7Ci0gICAgICAgIHJldHVybiAwOwotICAgIGNhc2UgSURfTk9MQVlFUjoK
LSAgICAgICAgLy9kaXNjYXJkX3VudGlsID0gSURfTk9MQVlFUiArIElEX0NMT1NFX1RBRzsKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgY2FzZSBJRF9URVhUOgotICAgICAgICByZXR1cm4gbmV3IFRl
eHRJbXBsKGRvY3VtZW50LCB0LT50ZXh0KTsKLSAgICBjYXNlIElEX0NPTU1FTlQ6Ci0gICAgICAg
IGlmICghaW5jbHVkZXNDb21tZW50c0luRE9NKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
ICAgIGJyZWFrOwotCi0gICAgY2FzZSBJRF9TQ1JJUFQ6Ci0gICAgICAgIHsKLSAgICAgICAgICAg
IEhUTUxTY3JpcHRFbGVtZW50SW1wbCAqc2NyaXB0RWxlbWVudCA9IG5ldyBIVE1MU2NyaXB0RWxl
bWVudEltcGwoZG9jdW1lbnQpOwotICAgICAgICAgICAgc2NyaXB0RWxlbWVudC0+c2V0Q3JlYXRl
ZEJ5UGFyc2VyKHRydWUpOwotICAgICAgICAgICAgcmV0dXJuIHNjcmlwdEVsZW1lbnQ7Ci0gICAg
ICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgSFRNTFBhcnNlcjo6c2VsZWN0Q3Jl
YXRlRXJyb3JDaGVjayhUb2tlbiogdCwgTm9kZUltcGwqJiByZXN1bHQpCit7CisgICAgaW5TZWxl
Y3QgPSB0cnVlOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEhUTUxQYXJzZXI6OmRkQ3Jl
YXRlRXJyb3JDaGVjayhUb2tlbiogdCwgTm9kZUltcGwqJiByZXN1bHQpCit7CisgICAgcG9wQmxv
Y2soSFRNTE5hbWVzOjpkdCgpKTsKKyAgICBwb3BCbG9jayhIVE1MTmFtZXM6OmRkKCkpOworICAg
IHJldHVybiB0cnVlOworfQorCitib29sIEhUTUxQYXJzZXI6OmR0Q3JlYXRlRXJyb3JDaGVjayhU
b2tlbiogdCwgTm9kZUltcGwqJiByZXN1bHQpCit7CisgICAgcG9wQmxvY2soSFRNTE5hbWVzOjpk
ZCgpKTsKKyAgICBwb3BCbG9jayhIVE1MTmFtZXM6OmR0KCkpOworICAgIHJldHVybiB0cnVlOwor
fQorCitib29sIEhUTUxQYXJzZXI6Om5lc3RlZENyZWF0ZUVycm9yQ2hlY2soVG9rZW4qIHQsIE5v
ZGVJbXBsKiYgcmVzdWx0KQoreworICAgIHBvcEJsb2NrKHQtPnRhZ05hbWUpOworICAgIHJldHVy
biB0cnVlOworfQorCitib29sIEhUTUxQYXJzZXI6Om5lc3RlZFN0eWxlQ3JlYXRlRXJyb3JDaGVj
ayhUb2tlbiogdCwgTm9kZUltcGwqJiByZXN1bHQpCit7CisgICAgcmV0dXJuIGFsbG93TmVzdGVk
UmVkdW5kYW50VGFnKHQtPnRhZ05hbWUpOworfQorCitib29sIEhUTUxQYXJzZXI6OnRhYmxlQ2Vs
bENyZWF0ZUVycm9yQ2hlY2soVG9rZW4qIHQsIE5vZGVJbXBsKiYgcmVzdWx0KQoreworICAgIHBv
cEJsb2NrKEhUTUxOYW1lczo6dGQoKSk7CisgICAgcG9wQmxvY2soSFRNTE5hbWVzOjp0aCgpKTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBIVE1MUGFyc2VyOjp0YWJsZVNlY3Rpb25DcmVh
dGVFcnJvckNoZWNrKFRva2VuKiB0LCBOb2RlSW1wbComIHJlc3VsdCkKK3sKKyAgICBwb3BCbG9j
ayhIVE1MTmFtZXM6OnRoZWFkKCkpOworICAgIHBvcEJsb2NrKEhUTUxOYW1lczo6dGJvZHkoKSk7
CisgICAgcG9wQmxvY2soSFRNTE5hbWVzOjp0Zm9vdCgpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBIVE1MUGFyc2VyOjpub2VtYmVkQ3JlYXRlRXJyb3JDaGVjayhUb2tlbiogdCwgTm9k
ZUltcGwqJiByZXN1bHQpCit7CisgICAgc2V0U2tpcE1vZGUoSFRNTE5hbWVzOjpub2VtYmVkKCkp
OworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBIVE1MUGFyc2VyOjpub2ZyYW1lc0NyZWF0
ZUVycm9yQ2hlY2soVG9rZW4qIHQsIE5vZGVJbXBsKiYgcmVzdWx0KQoreworICAgIHNldFNraXBN
b2RlKEhUTUxOYW1lczo6bm9mcmFtZXMoKSk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29s
IEhUTUxQYXJzZXI6Om5vc2NyaXB0Q3JlYXRlRXJyb3JDaGVjayhUb2tlbiogdCwgTm9kZUltcGwq
JiByZXN1bHQpCit7CisgICAgaWYgKEhUTUxXaWRnZXQgJiYgSFRNTFdpZGdldC0+cGFydCgpLT5q
U2NyaXB0RW5hYmxlZCgpKQorICAgICAgICBzZXRTa2lwTW9kZShIVE1MTmFtZXM6Om5vc2NyaXB0
KCkpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBIVE1MUGFyc2VyOjpub2xheWVyQ3Jl
YXRlRXJyb3JDaGVjayhUb2tlbiogdCwgTm9kZUltcGwqJiByZXN1bHQpCit7CisgICAgcmV0dXJu
IGZhbHNlOworfQorCitOb2RlSW1wbCAqSFRNTFBhcnNlcjo6Z2V0Tm9kZShUb2tlbiogdCkKK3sK
KyAgICAvLyBJbml0IG91ciBlcnJvciBoYW5kbGluZyB0YWJsZS4KKyAgICBzdGF0aWMgRnVuY3Rp
b25NYXAgZ0Z1bmN0aW9uTWFwOworICAgIGlmIChnRnVuY3Rpb25NYXAuaXNFbXB0eSgpKSB7Cisg
ICAgICAgIGdGdW5jdGlvbk1hcC5pbnNlcnQodGV4dEF0b20uaW1wbGVtZW50YXRpb24oKSwgJkhU
TUxQYXJzZXI6OnRleHRDcmVhdGVFcnJvckNoZWNrKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLmlu
c2VydChjb21tZW50QXRvbS5pbXBsZW1lbnRhdGlvbigpLCAmSFRNTFBhcnNlcjo6Y29tbWVudENy
ZWF0ZUVycm9yQ2hlY2spOworICAgICAgICBnRnVuY3Rpb25NYXAuaW5zZXJ0KEhUTUxOYW1lczo6
aGVhZCgpLmxvY2FsTmFtZVB0cigpLCAmSFRNTFBhcnNlcjo6aGVhZENyZWF0ZUVycm9yQ2hlY2sp
OworICAgICAgICBnRnVuY3Rpb25NYXAuaW5zZXJ0KEhUTUxOYW1lczo6Ym9keSgpLmxvY2FsTmFt
ZVB0cigpLCAmSFRNTFBhcnNlcjo6Ym9keUNyZWF0ZUVycm9yQ2hlY2spOworICAgICAgICBnRnVu
Y3Rpb25NYXAuaW5zZXJ0KEhUTUxOYW1lczo6ZnJhbWVzZXQoKS5sb2NhbE5hbWVQdHIoKSwgJkhU
TUxQYXJzZXI6OmZyYW1lc2V0Q3JlYXRlRXJyb3JDaGVjayk7CisgICAgICAgIGdGdW5jdGlvbk1h
cC5pbnNlcnQoSFRNTE5hbWVzOjppZnJhbWUoKS5sb2NhbE5hbWVQdHIoKSwgJkhUTUxQYXJzZXI6
OmlmcmFtZUNyZWF0ZUVycm9yQ2hlY2spOworICAgICAgICBnRnVuY3Rpb25NYXAuaW5zZXJ0KEhU
TUxOYW1lczo6Zm9ybSgpLmxvY2FsTmFtZVB0cigpLCAmSFRNTFBhcnNlcjo6Zm9ybUNyZWF0ZUVy
cm9yQ2hlY2spOworICAgICAgICBnRnVuY3Rpb25NYXAuaW5zZXJ0KEhUTUxOYW1lczo6aXNpbmRl
eCgpLmxvY2FsTmFtZVB0cigpLCAmSFRNTFBhcnNlcjo6aXNpbmRleENyZWF0ZUVycm9yQ2hlY2sp
OworICAgICAgICBnRnVuY3Rpb25NYXAuaW5zZXJ0KEhUTUxOYW1lczo6c2VsZWN0KCkubG9jYWxO
YW1lUHRyKCksICZIVE1MUGFyc2VyOjpzZWxlY3RDcmVhdGVFcnJvckNoZWNrKTsKKyAgICAgICAg
Z0Z1bmN0aW9uTWFwLmluc2VydChIVE1MTmFtZXM6OmRkKCkubG9jYWxOYW1lUHRyKCksICZIVE1M
UGFyc2VyOjpkZENyZWF0ZUVycm9yQ2hlY2spOworICAgICAgICBnRnVuY3Rpb25NYXAuaW5zZXJ0
KEhUTUxOYW1lczo6ZHQoKS5sb2NhbE5hbWVQdHIoKSwgJkhUTUxQYXJzZXI6OmR0Q3JlYXRlRXJy
b3JDaGVjayk7CisgICAgICAgIGdGdW5jdGlvbk1hcC5pbnNlcnQoSFRNTE5hbWVzOjpsaSgpLmxv
Y2FsTmFtZVB0cigpLCAmSFRNTFBhcnNlcjo6bmVzdGVkQ3JlYXRlRXJyb3JDaGVjayk7CisgICAg
ICAgIGdGdW5jdGlvbk1hcC5pbnNlcnQoSFRNTE5hbWVzOjphKCkubG9jYWxOYW1lUHRyKCksICZI
VE1MUGFyc2VyOjpuZXN0ZWRDcmVhdGVFcnJvckNoZWNrKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFw
Lmluc2VydChIVE1MTmFtZXM6Om5vYnIoKS5sb2NhbE5hbWVQdHIoKSwgJkhUTUxQYXJzZXI6Om5l
c3RlZENyZWF0ZUVycm9yQ2hlY2spOworICAgICAgICBnRnVuY3Rpb25NYXAuaW5zZXJ0KEhUTUxO
YW1lczo6d2JyKCkubG9jYWxOYW1lUHRyKCksICZIVE1MUGFyc2VyOjpuZXN0ZWRDcmVhdGVFcnJv
ckNoZWNrKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLmluc2VydChIVE1MTmFtZXM6OnRyKCkubG9j
YWxOYW1lUHRyKCksICZIVE1MUGFyc2VyOjpuZXN0ZWRDcmVhdGVFcnJvckNoZWNrKTsKKyAgICAg
ICAgZ0Z1bmN0aW9uTWFwLmluc2VydChIVE1MTmFtZXM6OnRkKCkubG9jYWxOYW1lUHRyKCksICZI
VE1MUGFyc2VyOjp0YWJsZUNlbGxDcmVhdGVFcnJvckNoZWNrKTsKKyAgICAgICAgZ0Z1bmN0aW9u
TWFwLmluc2VydChIVE1MTmFtZXM6OnRoKCkubG9jYWxOYW1lUHRyKCksICZIVE1MUGFyc2VyOjp0
YWJsZUNlbGxDcmVhdGVFcnJvckNoZWNrKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLmluc2VydChI
VE1MTmFtZXM6OnRib2R5KCkubG9jYWxOYW1lUHRyKCksICZIVE1MUGFyc2VyOjp0YWJsZVNlY3Rp
b25DcmVhdGVFcnJvckNoZWNrKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLmluc2VydChIVE1MTmFt
ZXM6OnRoZWFkKCkubG9jYWxOYW1lUHRyKCksICZIVE1MUGFyc2VyOjp0YWJsZVNlY3Rpb25DcmVh
dGVFcnJvckNoZWNrKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLmluc2VydChIVE1MTmFtZXM6OnRm
b290KCkubG9jYWxOYW1lUHRyKCksICZIVE1MUGFyc2VyOjp0YWJsZVNlY3Rpb25DcmVhdGVFcnJv
ckNoZWNrKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLmluc2VydChIVE1MTmFtZXM6OnR0KCkubG9j
YWxOYW1lUHRyKCksICZIVE1MUGFyc2VyOjpuZXN0ZWRTdHlsZUNyZWF0ZUVycm9yQ2hlY2spOwor
ICAgICAgICBnRnVuY3Rpb25NYXAuaW5zZXJ0KEhUTUxOYW1lczo6dSgpLmxvY2FsTmFtZVB0cigp
LCAmSFRNTFBhcnNlcjo6bmVzdGVkU3R5bGVDcmVhdGVFcnJvckNoZWNrKTsKKyAgICAgICAgZ0Z1
bmN0aW9uTWFwLmluc2VydChIVE1MTmFtZXM6OmIoKS5sb2NhbE5hbWVQdHIoKSwgJkhUTUxQYXJz
ZXI6Om5lc3RlZFN0eWxlQ3JlYXRlRXJyb3JDaGVjayk7CisgICAgICAgIGdGdW5jdGlvbk1hcC5p
bnNlcnQoSFRNTE5hbWVzOjppKCkubG9jYWxOYW1lUHRyKCksICZIVE1MUGFyc2VyOjpuZXN0ZWRT
dHlsZUNyZWF0ZUVycm9yQ2hlY2spOworICAgICAgICBnRnVuY3Rpb25NYXAuaW5zZXJ0KEhUTUxO
YW1lczo6cygpLmxvY2FsTmFtZVB0cigpLCAmSFRNTFBhcnNlcjo6bmVzdGVkU3R5bGVDcmVhdGVF
cnJvckNoZWNrKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLmluc2VydChIVE1MTmFtZXM6OnN0cmlr
ZSgpLmxvY2FsTmFtZVB0cigpLCAmSFRNTFBhcnNlcjo6bmVzdGVkU3R5bGVDcmVhdGVFcnJvckNo
ZWNrKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLmluc2VydChIVE1MTmFtZXM6OmJpZygpLmxvY2Fs
TmFtZVB0cigpLCAmSFRNTFBhcnNlcjo6bmVzdGVkU3R5bGVDcmVhdGVFcnJvckNoZWNrKTsKKyAg
ICAgICAgZ0Z1bmN0aW9uTWFwLmluc2VydChIVE1MTmFtZXM6OnNtYWxsKCkubG9jYWxOYW1lUHRy
KCksICZIVE1MUGFyc2VyOjpuZXN0ZWRTdHlsZUNyZWF0ZUVycm9yQ2hlY2spOworICAgICAgICBn
RnVuY3Rpb25NYXAuaW5zZXJ0KEhUTUxOYW1lczo6bm9lbWJlZCgpLmxvY2FsTmFtZVB0cigpLCAm
SFRNTFBhcnNlcjo6bm9lbWJlZENyZWF0ZUVycm9yQ2hlY2spOworICAgICAgICBnRnVuY3Rpb25N
YXAuaW5zZXJ0KEhUTUxOYW1lczo6bm9mcmFtZXMoKS5sb2NhbE5hbWVQdHIoKSwgJkhUTUxQYXJz
ZXI6Om5vZnJhbWVzQ3JlYXRlRXJyb3JDaGVjayk7CisgICAgICAgIGdGdW5jdGlvbk1hcC5pbnNl
cnQoSFRNTE5hbWVzOjpub3NjcmlwdCgpLmxvY2FsTmFtZVB0cigpLCAmSFRNTFBhcnNlcjo6bm9z
Y3JpcHRDcmVhdGVFcnJvckNoZWNrKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLmluc2VydChIVE1M
TmFtZXM6Om5vbGF5ZXIoKS5sb2NhbE5hbWVQdHIoKSwgJkhUTUxQYXJzZXI6Om5vbGF5ZXJDcmVh
dGVFcnJvckNoZWNrKTsKICAgICB9CiAKLSAgICByZXR1cm4gZG9jdW1lbnQtPmRvY3VtZW50KCkt
PmNyZWF0ZUhUTUxFbGVtZW50KHQtPmlkKTsKKyAgICBib29sIHByb2NlZWQgPSB0cnVlOworICAg
IE5vZGVJbXBsKiByZXN1bHQgPSAwOworICAgIENyZWF0ZUVycm9yQ2hlY2tGdW5jIGVycm9yQ2hl
Y2tGdW5jID0gZ0Z1bmN0aW9uTWFwLmdldCh0LT50YWdOYW1lLmltcGxlbWVudGF0aW9uKCkpOwor
ICAgIGlmIChlcnJvckNoZWNrRnVuYykKKyAgICAgICAgcHJvY2VlZCA9ICh0aGlzLT4qKGVycm9y
Q2hlY2tGdW5jKSkodCwgcmVzdWx0KTsKKworICAgIGlmIChwcm9jZWVkKSB7CisgICAgICAgIHJl
c3VsdCA9IEhUTUxFbGVtZW50RmFjdG9yeTo6Y3JlYXRlSFRNTEVsZW1lbnQodC0+dGFnTmFtZSwg
ZG9jKCksIGZvcm0pOworICAgICAgICBpZiAodC0+dGFnTmFtZSA9PSBIVE1MTmFtZXM6OmZvcm0o
KSkKKyAgICAgICAgICAgIGZvcm0gPSBzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnRJbXBsKj4o
cmVzdWx0KTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogI2RlZmluZSBNQVhfUkVE
VU5EQU5UIDIwCiAKLWJvb2wgS0hUTUxQYXJzZXI6OmFsbG93TmVzdGVkUmVkdW5kYW50VGFnKGlu
dCBfaWQpCitib29sIEhUTUxQYXJzZXI6OmFsbG93TmVzdGVkUmVkdW5kYW50VGFnKGNvbnN0IEF0
b21pY1N0cmluZyYgX3RhZ05hbWUpCiB7CiAgICAgLy8gd3d3LmxpY2VvLmVkdS5teCBpcyBhbiBl
eGFtcGxlIG9mIGEgc2l0ZSB0aGF0IGFjaGlldmVzIGEgbGV2ZWwgb2YgbmVzdGluZyBvZgogICAg
IC8vIGFib3V0IDE1MDAgdGFncywgYWxsIGZyb20gYSBidW5jaCBvZiA8Yj5zLiAgV2Ugd2lsbCBv
bmx5IGFsbG93IGF0IG1vc3QgMjAKICAgICAvLyBuZXN0ZWQgdGFncyBvZiB0aGUgc2FtZSB0eXBl
IGJlZm9yZSBqdXN0IGlnbm9yaW5nIHRoZW0gYWxsIHRvZ2V0aGVyLgogICAgIGludCBpID0gMDsK
ICAgICBmb3IgKEhUTUxTdGFja0VsZW0qIGN1cnIgPSBibG9ja1N0YWNrOwotICAgICAgICAgaSA8
IE1BWF9SRURVTkRBTlQgJiYgY3VyciAmJiBjdXJyLT5pZCA9PSBfaWQ7CisgICAgICAgICBpIDwg
TUFYX1JFRFVOREFOVCAmJiBjdXJyICYmIGN1cnItPnRhZ05hbWUgPT0gX3RhZ05hbWU7CiAgICAg
ICAgICBjdXJyID0gY3Vyci0+bmV4dCwgaSsrKTsKICAgICByZXR1cm4gaSAhPSBNQVhfUkVEVU5E
QU5UOwogfQogCi12b2lkIEtIVE1MUGFyc2VyOjpwcm9jZXNzQ2xvc2VUYWcoVG9rZW4gKnQpCit2
b2lkIEhUTUxQYXJzZXI6OnByb2Nlc3NDbG9zZVRhZyhUb2tlbiAqdCkKIHsKLSAgICAvLyBzdXBw
b3J0IGZvciByZWFsbHkgYnJva2VuIGh0bWwuIENhbid0IGJlbGlldmUgSSdtIHN1cHBvcnRpbmcg
c3VjaCBjcmFwIChsYXJzKQotICAgIHN3aXRjaCh0LT5pZCkKLSAgICB7Ci0gICAgY2FzZSBJRF9I
VE1MK0lEX0NMT1NFX1RBRzoKLSAgICBjYXNlIElEX0JPRFkrSURfQ0xPU0VfVEFHOgotICAgICAg
ICAvLyB3ZSBuZXZlciBjbG9zZSB0aGUgYm9keSB0YWcsIHNpbmNlIHNvbWUgc3R1cGlkIHdlYiBw
YWdlcyBjbG9zZSBpdCBiZWZvcmUgdGhlIGFjdHVhbCBlbmQgb2YgdGhlIGRvYy4KLSAgICAgICAg
Ly8gbGV0J3MgcmVseSBvbiB0aGUgZW5kKCkgY2FsbCB0byBjbG9zZSB0aGluZ3MuCisgICAgLy8g
U3VwcG9ydCBmb3IgcmVhbGx5IGJyb2tlbiBodG1sLgorICAgIC8vIHdlIG5ldmVyIGNsb3NlIHRo
ZSBib2R5IHRhZywgc2luY2Ugc29tZSBzdHVwaWQgd2ViIHBhZ2VzIGNsb3NlIGl0IGJlZm9yZSB0
aGUgYWN0dWFsIGVuZCBvZiB0aGUgZG9jLgorICAgIC8vIGxldCdzIHJlbHkgb24gdGhlIGVuZCgp
IGNhbGwgdG8gY2xvc2UgdGhpbmdzLgorICAgIGlmICh0LT50YWdOYW1lID09IEhUTUxOYW1lczo6
aHRtbCgpIHx8IHQtPnRhZ05hbWUgPT0gSFRNTE5hbWVzOjpib2R5KCkpCiAgICAgICAgIHJldHVy
bjsKLSAgICBjYXNlIElEX0ZPUk0rSURfQ0xPU0VfVEFHOgorICAgIAorICAgIGlmICh0LT50YWdO
YW1lID09IEhUTUxOYW1lczo6Zm9ybSgpKQogICAgICAgICBmb3JtID0gMDsKLSAgICAgICAgLy8g
dGhpcyBvbmUgaXMgdG8gZ2V0IHRoZSByaWdodCBzdHlsZSBvbiB0aGUgYm9keSBlbGVtZW50Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgSURfTUFQK0lEX0NMT1NFX1RBRzoKKyAgICBlbHNlIGlm
ICh0LT50YWdOYW1lID09IEhUTUxOYW1lczo6bWFwKCkpCiAgICAgICAgIG1hcCA9IDA7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgSURfU0VMRUNUK0lEX0NMT1NFX1RBRzoKKyAgICBlbHNlIGlm
ICh0LT50YWdOYW1lID09IEhUTUxOYW1lczo6c2VsZWN0KCkpCiAgICAgICAgIGluU2VsZWN0ID0g
ZmFsc2U7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAg
IH0KLQotI2lmZGVmIFBBUlNFUl9ERUJVRwotICAgIGtkRGVidWcoIDYwMzUgKSA8PCAiYWRkZWQg
dGhlIGZvbGxvd2luZyBjaGlsZHMgdG8gIiA8PCBjdXJyZW50LT5ub2RlTmFtZSgpLnN0cmluZygp
IDw8IGVuZGw7Ci0gICAgTm9kZUltcGwgKmNoaWxkID0gY3VycmVudC0+Zmlyc3RDaGlsZCgpOwot
ICAgIHdoaWxlKGNoaWxkICE9IDApCi0gICAgewotICAgICAgICBrZERlYnVnKCA2MDM1ICkgPDwg
IiAgICAiIDw8IGNoaWxkLT5ub2RlTmFtZSgpLnN0cmluZygpIDw8IGVuZGw7Ci0gICAgICAgIGNo
aWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCk7Ci0gICAgfQotI2VuZGlmCisgICAgICAgIAogICAg
IEhUTUxTdGFja0VsZW0qIG9sZEVsZW0gPSBibG9ja1N0YWNrOwotICAgIHBvcEJsb2NrKHQtPmlk
LUlEX0NMT1NFX1RBRyk7Ci0gICAgaWYgKG9sZEVsZW0gPT0gYmxvY2tTdGFjayAmJiB0LT5pZCA9
PSBJRF9QK0lEX0NMT1NFX1RBRykgeworICAgIHBvcEJsb2NrKHQtPnRhZ05hbWUpOworICAgIGlm
IChvbGRFbGVtID09IGJsb2NrU3RhY2sgJiYgdC0+dGFnTmFtZSA9PSBIVE1MTmFtZXM6OnAoKSkg
ewogICAgICAgICAvLyBXZSBlbmNvdW50ZXJlZCBhIHN0cmF5IDwvcD4uICBBbWF6aW5nbHkgR2Vj
a28sIFdpbklFLCBhbmQgTWFjSUUgYWxsIHRyZWF0CiAgICAgICAgIC8vIHRoaXMgYXMgYSB2YWxp
ZCBicmVhaywgaS5lLiwgPHA+PC9wPi4gIFNvIGdvIGFoZWFkIGFuZCBtYWtlIHRoZSBlbXB0eQog
ICAgICAgICAvLyBwYXJhZ3JhcGguCi0gICAgICAgIHQtPmlkLT1JRF9DTE9TRV9UQUc7CisgICAg
ICAgIHQtPmJlZ2luVGFnID0gdHJ1ZTsKICAgICAgICAgcGFyc2VUb2tlbih0KTsKLSAgICAgICAg
cG9wQmxvY2soSURfUCk7CisgICAgICAgIHBvcEJsb2NrKHQtPnRhZ05hbWUpOwogICAgIH0KICNp
ZmRlZiBQQVJTRVJfREVCVUcKICAgICBrZERlYnVnKCA2MDM1ICkgPDwgImNsb3NlVGFnIC0tPiBj
dXJyZW50ID0gIiA8PCBjdXJyZW50LT5ub2RlTmFtZSgpLnN0cmluZygpIDw8IGVuZGw7CiAjZW5k
aWYKIH0KIAotYm9vbCBLSFRNTFBhcnNlcjo6aXNIZWFkZXJUYWcoaW50IF9pZCkKK2Jvb2wgSFRN
TFBhcnNlcjo6aXNIZWFkZXJUYWcoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lKQogewotICAg
IHN3aXRjaCAoX2lkKSB7Ci0gICAgICAgIGNhc2UgSURfSDE6Ci0gICAgICAgIGNhc2UgSURfSDI6
Ci0gICAgICAgIGNhc2UgSURfSDM6Ci0gICAgICAgIGNhc2UgSURfSDQ6Ci0gICAgICAgIGNhc2Ug
SURfSDU6Ci0gICAgICAgIGNhc2UgSURfSDY6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBzdGF0aWMgSGFz
aFNldDxET01TdHJpbmdJbXBsKiwgUG9pbnRlckhhc2g8RE9NU3RyaW5nSW1wbCo+ID4gaGVhZGVy
VGFnczsKKyAgICBpZiAoaGVhZGVyVGFncy5pc0VtcHR5KCkpIHsKKyAgICAgICAgaGVhZGVyVGFn
cy5pbnNlcnQoSFRNTE5hbWVzOjpoMSgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgaGVhZGVy
VGFncy5pbnNlcnQoSFRNTE5hbWVzOjpoMigpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgaGVh
ZGVyVGFncy5pbnNlcnQoSFRNTE5hbWVzOjpoMygpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAg
aGVhZGVyVGFncy5pbnNlcnQoSFRNTE5hbWVzOjpoNCgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAg
ICAgaGVhZGVyVGFncy5pbnNlcnQoSFRNTE5hbWVzOjpoNSgpLmxvY2FsTmFtZVB0cigpKTsKKyAg
ICAgICAgaGVhZGVyVGFncy5pbnNlcnQoSFRNTE5hbWVzOjpoNigpLmxvY2FsTmFtZVB0cigpKTsK
ICAgICB9CisgICAgCisgICAgcmV0dXJuIGhlYWRlclRhZ3MuY29udGFpbnModGFnTmFtZS5pbXBs
ZW1lbnRhdGlvbigpKTsKIH0KIAotdm9pZCBLSFRNTFBhcnNlcjo6cG9wTmVzdGVkSGVhZGVyVGFn
KCkKK3ZvaWQgSFRNTFBhcnNlcjo6cG9wTmVzdGVkSGVhZGVyVGFnKCkKIHsKICAgICAvLyBUaGlz
IGZ1bmN0aW9uIG9ubHkgY2FyZXMgYWJvdXQgY2hlY2tpbmcgZm9yIG5lc3RlZCBoZWFkZXJzIHRo
YXQgaGF2ZSBvbmx5IGlubGluZXMgaW4gYmV0d2VlbiB0aGVtLgogICAgIE5vZGVJbXBsKiBjdXJy
Tm9kZSA9IGN1cnJlbnQ7CiAgICAgZm9yIChIVE1MU3RhY2tFbGVtKiBjdXJyID0gYmxvY2tTdGFj
azsgY3VycjsgY3VyciA9IGN1cnItPm5leHQpIHsKLSAgICAgICAgaWYgKGlzSGVhZGVyVGFnKGN1
cnItPmlkKSkgewotICAgICAgICAgICAgcG9wQmxvY2soY3Vyci0+aWQpOworICAgICAgICBpZiAo
aXNIZWFkZXJUYWcoY3Vyci0+dGFnTmFtZSkpIHsKKyAgICAgICAgICAgIHBvcEJsb2NrKGN1cnIt
PnRhZ05hbWUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGlmIChj
dXJyTm9kZSAmJiAhY3Vyck5vZGUtPmlzSW5saW5lKCkpCisgICAgICAgIGlmIChjdXJyTm9kZSAm
JiAhaXNJbmxpbmUoY3Vyck5vZGUpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBjdXJy
Tm9kZSA9IGN1cnItPm5vZGU7CiAgICAgfQogfQogCi1ib29sIEtIVE1MUGFyc2VyOjppc1Jlc2lk
dWFsU3R5bGVUYWcoaW50IF9pZCkKK2Jvb2wgSFRNTFBhcnNlcjo6aXNJbmxpbmUoRE9NOjpOb2Rl
SW1wbCogbm9kZSkgY29uc3QKIHsKLSAgICBzd2l0Y2ggKF9pZCkgewotICAgICAgICBjYXNlIElE
X0E6Ci0gICAgICAgIGNhc2UgSURfRk9OVDoKLSAgICAgICAgY2FzZSBJRF9UVDoKLSAgICAgICAg
Y2FzZSBJRF9VOgotICAgICAgICBjYXNlIElEX0I6Ci0gICAgICAgIGNhc2UgSURfSToKLSAgICAg
ICAgY2FzZSBJRF9TOgotICAgICAgICBjYXNlIElEX1NUUklLRToKLSAgICAgICAgY2FzZSBJRF9C
SUc6Ci0gICAgICAgIGNhc2UgSURfU01BTEw6Ci0gICAgICAgIGNhc2UgSURfRU06Ci0gICAgICAg
IGNhc2UgSURfU1RST05HOgotICAgICAgICBjYXNlIElEX0RGTjoKLSAgICAgICAgY2FzZSBJRF9D
T0RFOgotICAgICAgICBjYXNlIElEX1NBTVA6Ci0gICAgICAgIGNhc2UgSURfS0JEOgotICAgICAg
ICBjYXNlIElEX1ZBUjoKKyAgICBpZiAobm9kZS0+aXNUZXh0Tm9kZSgpKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKworICAgIGlmIChub2RlLT5pc0hUTUxFbGVtZW50KCkpIHsKKyAgICAgICAgSFRN
TEVsZW1lbnRJbXBsKiBlID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsKj4obm9kZSk7Cisg
ICAgICAgIGlmIChlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjphKCkpIHx8IGUtPmhhc0xvY2Fs
TmFtZShIVE1MTmFtZXM6OmZvbnQoKSkgfHwgZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dHQo
KSkgfHwKKyAgICAgICAgICAgIGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnUoKSkgfHwgZS0+
aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6YigpKSB8fCBlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVz
OjppKCkpIHx8CisgICAgICAgICAgICBlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpzKCkpIHx8
IGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnN0cmlrZSgpKSB8fCBlLT5oYXNMb2NhbE5hbWUo
SFRNTE5hbWVzOjpiaWcoKSkgfHwKKyAgICAgICAgICAgIGUtPmhhc0xvY2FsTmFtZShIVE1MTmFt
ZXM6OnNtYWxsKCkpIHx8IGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmVtKCkpIHx8IGUtPmhh
c0xvY2FsTmFtZShIVE1MTmFtZXM6OnN0cm9uZygpKSB8fAorICAgICAgICAgICAgZS0+aGFzTG9j
YWxOYW1lKEhUTUxOYW1lczo6ZGZuKCkpIHx8IGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmNv
ZGUoKSkgfHwgZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6c2FtcCgpKSB8fAorICAgICAgICAg
ICAgZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6a2JkKCkpIHx8IGUtPmhhc0xvY2FsTmFtZShI
VE1MTmFtZXM6OnZhcigpKSB8fCBlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpjaXRlKCkpIHx8
CisgICAgICAgICAgICBlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjphYmJyKCkpIHx8IGUtPmhh
c0xvY2FsTmFtZShIVE1MTmFtZXM6OmFjcm9ueW0oKSkgfHwgZS0+aGFzTG9jYWxOYW1lKEhUTUxO
YW1lczo6c3ViKCkpIHx8CisgICAgICAgICAgICBlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpz
dXAoKSkgfHwgZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6c3BhbigpKSB8fCBlLT5oYXNMb2Nh
bE5hbWUoSFRNTE5hbWVzOjpub2JyKCkpIHx8CisgICAgICAgICAgICBlLT5oYXNMb2NhbE5hbWUo
SFRNTE5hbWVzOjp3YnIoKSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CisgICAgCisgICAgcmV0dXJu
IGZhbHNlOworfQorCitib29sIEhUTUxQYXJzZXI6OmlzUmVzaWR1YWxTdHlsZVRhZyhjb25zdCBB
dG9taWNTdHJpbmcmIHRhZ05hbWUpCit7CisgICAgc3RhdGljIEhhc2hTZXQ8RE9NU3RyaW5nSW1w
bCosIFBvaW50ZXJIYXNoPERPTVN0cmluZ0ltcGwqPiA+IHJlc2lkdWFsU3R5bGVUYWdzOworICAg
IGlmIChyZXNpZHVhbFN0eWxlVGFncy5pc0VtcHR5KCkpIHsKKyAgICAgICAgcmVzaWR1YWxTdHls
ZVRhZ3MuaW5zZXJ0KEhUTUxOYW1lczo6YSgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgcmVz
aWR1YWxTdHlsZVRhZ3MuaW5zZXJ0KEhUTUxOYW1lczo6Zm9udCgpLmxvY2FsTmFtZVB0cigpKTsK
KyAgICAgICAgcmVzaWR1YWxTdHlsZVRhZ3MuaW5zZXJ0KEhUTUxOYW1lczo6dHQoKS5sb2NhbE5h
bWVQdHIoKSk7CisgICAgICAgIHJlc2lkdWFsU3R5bGVUYWdzLmluc2VydChIVE1MTmFtZXM6OnUo
KS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHJlc2lkdWFsU3R5bGVUYWdzLmluc2VydChIVE1M
TmFtZXM6OmIoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHJlc2lkdWFsU3R5bGVUYWdzLmlu
c2VydChIVE1MTmFtZXM6OmkoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHJlc2lkdWFsU3R5
bGVUYWdzLmluc2VydChIVE1MTmFtZXM6OnMoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHJl
c2lkdWFsU3R5bGVUYWdzLmluc2VydChIVE1MTmFtZXM6OnN0cmlrZSgpLmxvY2FsTmFtZVB0cigp
KTsKKyAgICAgICAgcmVzaWR1YWxTdHlsZVRhZ3MuaW5zZXJ0KEhUTUxOYW1lczo6YmlnKCkubG9j
YWxOYW1lUHRyKCkpOworICAgICAgICByZXNpZHVhbFN0eWxlVGFncy5pbnNlcnQoSFRNTE5hbWVz
OjpzbWFsbCgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgcmVzaWR1YWxTdHlsZVRhZ3MuaW5z
ZXJ0KEhUTUxOYW1lczo6ZW0oKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHJlc2lkdWFsU3R5
bGVUYWdzLmluc2VydChIVE1MTmFtZXM6OnN0cm9uZygpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAg
ICAgcmVzaWR1YWxTdHlsZVRhZ3MuaW5zZXJ0KEhUTUxOYW1lczo6ZGZuKCkubG9jYWxOYW1lUHRy
KCkpOworICAgICAgICByZXNpZHVhbFN0eWxlVGFncy5pbnNlcnQoSFRNTE5hbWVzOjpjb2RlKCku
bG9jYWxOYW1lUHRyKCkpOworICAgICAgICByZXNpZHVhbFN0eWxlVGFncy5pbnNlcnQoSFRNTE5h
bWVzOjpzYW1wKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICByZXNpZHVhbFN0eWxlVGFncy5p
bnNlcnQoSFRNTE5hbWVzOjprYmQoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHJlc2lkdWFs
U3R5bGVUYWdzLmluc2VydChIVE1MTmFtZXM6OnZhcigpLmxvY2FsTmFtZVB0cigpKTsKKyAgICB9
CisgICAgCisgICAgcmV0dXJuIHJlc2lkdWFsU3R5bGVUYWdzLmNvbnRhaW5zKHRhZ05hbWUuaW1w
bGVtZW50YXRpb24oKSk7CiB9CiAKLWJvb2wgS0hUTUxQYXJzZXI6OmlzQWZmZWN0ZWRCeVJlc2lk
dWFsU3R5bGUoaW50IF9pZCkKK2Jvb2wgSFRNTFBhcnNlcjo6aXNBZmZlY3RlZEJ5UmVzaWR1YWxT
dHlsZShjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUpCiB7Ci0gICAgaWYgKGlzUmVzaWR1YWxT
dHlsZVRhZyhfaWQpKQorICAgIGlmIChpc1Jlc2lkdWFsU3R5bGVUYWcodGFnTmFtZSkpCiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIAotICAgIHN3aXRjaCAoX2lkKSB7Ci0gICAgICAgIGNhc2Ug
SURfUDoKLSAgICAgICAgY2FzZSBJRF9ESVY6Ci0gICAgICAgIGNhc2UgSURfQkxPQ0tRVU9URToK
LSAgICAgICAgY2FzZSBJRF9BRERSRVNTOgotICAgICAgICBjYXNlIElEX0gxOgotICAgICAgICBj
YXNlIElEX0gyOgotICAgICAgICBjYXNlIElEX0gzOgotICAgICAgICBjYXNlIElEX0g0OgotICAg
ICAgICBjYXNlIElEX0g1OgotICAgICAgICBjYXNlIElEX0g2OgotICAgICAgICBjYXNlIElEX0NF
TlRFUjoKLSAgICAgICAgY2FzZSBJRF9VTDoKLSAgICAgICAgY2FzZSBJRF9PTDoKLSAgICAgICAg
Y2FzZSBJRF9MSToKLSAgICAgICAgY2FzZSBJRF9ETDoKLSAgICAgICAgY2FzZSBJRF9EVDoKLSAg
ICAgICAgY2FzZSBJRF9ERDoKLSAgICAgICAgY2FzZSBJRF9QUkU6Ci0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBzdGF0aWMgSGFzaFNldDxET01TdHJpbmdJbXBsKiwgUG9pbnRlckhhc2g8RE9NU3RyaW5nSW1w
bCo+ID4gYWZmZWN0ZWRCbG9ja1RhZ3M7CisgICAgaWYgKGFmZmVjdGVkQmxvY2tUYWdzLmlzRW1w
dHkoKSkgeworICAgICAgICBhZmZlY3RlZEJsb2NrVGFncy5pbnNlcnQoSFRNTE5hbWVzOjpoMSgp
LmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgYWZmZWN0ZWRCbG9ja1RhZ3MuaW5zZXJ0KEhUTUxO
YW1lczo6aDIoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIGFmZmVjdGVkQmxvY2tUYWdzLmlu
c2VydChIVE1MTmFtZXM6OmgzKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICBhZmZlY3RlZEJs
b2NrVGFncy5pbnNlcnQoSFRNTE5hbWVzOjpoNCgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAg
YWZmZWN0ZWRCbG9ja1RhZ3MuaW5zZXJ0KEhUTUxOYW1lczo6aDUoKS5sb2NhbE5hbWVQdHIoKSk7
CisgICAgICAgIGFmZmVjdGVkQmxvY2tUYWdzLmluc2VydChIVE1MTmFtZXM6Omg2KCkubG9jYWxO
YW1lUHRyKCkpOworICAgICAgICBhZmZlY3RlZEJsb2NrVGFncy5pbnNlcnQoSFRNTE5hbWVzOjpw
KCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICBhZmZlY3RlZEJsb2NrVGFncy5pbnNlcnQoSFRN
TE5hbWVzOjpkaXYoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIGFmZmVjdGVkQmxvY2tUYWdz
Lmluc2VydChIVE1MTmFtZXM6OmJsb2NrcXVvdGUoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAg
IGFmZmVjdGVkQmxvY2tUYWdzLmluc2VydChIVE1MTmFtZXM6OmFkZHJlc3MoKS5sb2NhbE5hbWVQ
dHIoKSk7CisgICAgICAgIGFmZmVjdGVkQmxvY2tUYWdzLmluc2VydChIVE1MTmFtZXM6OmNlbnRl
cigpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgYWZmZWN0ZWRCbG9ja1RhZ3MuaW5zZXJ0KEhU
TUxOYW1lczo6dWwoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIGFmZmVjdGVkQmxvY2tUYWdz
Lmluc2VydChIVE1MTmFtZXM6Om9sKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICBhZmZlY3Rl
ZEJsb2NrVGFncy5pbnNlcnQoSFRNTE5hbWVzOjpsaSgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAg
ICAgYWZmZWN0ZWRCbG9ja1RhZ3MuaW5zZXJ0KEhUTUxOYW1lczo6ZGwoKS5sb2NhbE5hbWVQdHIo
KSk7CisgICAgICAgIGFmZmVjdGVkQmxvY2tUYWdzLmluc2VydChIVE1MTmFtZXM6OmR0KCkubG9j
YWxOYW1lUHRyKCkpOworICAgICAgICBhZmZlY3RlZEJsb2NrVGFncy5pbnNlcnQoSFRNTE5hbWVz
OjpkZCgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgYWZmZWN0ZWRCbG9ja1RhZ3MuaW5zZXJ0
KEhUTUxOYW1lczo6cHJlKCkubG9jYWxOYW1lUHRyKCkpOwogICAgIH0KKyAgICAKKyAgICByZXR1
cm4gYWZmZWN0ZWRCbG9ja1RhZ3MuY29udGFpbnModGFnTmFtZS5pbXBsZW1lbnRhdGlvbigpKTsK
IH0KIAotdm9pZCBLSFRNTFBhcnNlcjo6aGFuZGxlUmVzaWR1YWxTdHlsZUNsb3NlVGFnQWNyb3Nz
QmxvY2tzKEhUTUxTdGFja0VsZW0qIGVsZW0pCit2b2lkIEhUTUxQYXJzZXI6OmhhbmRsZVJlc2lk
dWFsU3R5bGVDbG9zZVRhZ0Fjcm9zc0Jsb2NrcyhIVE1MU3RhY2tFbGVtKiBlbGVtKQogewogICAg
IC8vIEZpbmQgdGhlIGVsZW1lbnQgdGhhdCBjcm9zc2VzIG92ZXIgdG8gYSBoaWdoZXIgbGV2ZWwu
ICAgRm9yIG5vdywgaWYgdGhlcmUgaXMgbW9yZSB0aGFuCiAgICAgLy8gb25lLCB3ZSB3aWxsIGp1
c3QgZ2l2ZSB1cCBhbmQgbm90IGF0dGVtcHQgYW55IHNvcnQgb2YgY29ycmVjdGlvbi4gIEl0J3Mg
aGlnaGx5IHVubGlrZWx5IHRoYXQKQEAgLTExMjUsNyArOTkyLDcgQEAgdm9pZCBLSFRNTFBhcnNl
cjo6aGFuZGxlUmVzaWR1YWxTdHlsZUNsbwogICAgICAgICBjdXJyID0gY3Vyci0+bmV4dDsKICAg
ICB9CiAKLSAgICBpZiAoIWN1cnIgfHwgIW1heEVsZW0gfHwgIWlzQWZmZWN0ZWRCeVJlc2lkdWFs
U3R5bGUobWF4RWxlbS0+aWQpKSByZXR1cm47CisgICAgaWYgKCFjdXJyIHx8ICFtYXhFbGVtIHx8
ICFpc0FmZmVjdGVkQnlSZXNpZHVhbFN0eWxlKG1heEVsZW0tPnRhZ05hbWUpKSByZXR1cm47CiAK
ICAgICBOb2RlSW1wbCogcmVzaWR1YWxFbGVtID0gcHJldi0+bm9kZTsKICAgICBOb2RlSW1wbCog
YmxvY2tFbGVtID0gcHJldk1heEVsZW0gPyBwcmV2TWF4RWxlbS0+bm9kZSA6IGN1cnJlbnQ7CkBA
IC0xMTQ3LDcgKzEwMTQsNyBAQCB2b2lkIEtIVE1MUGFyc2VyOjpoYW5kbGVSZXNpZHVhbFN0eWxl
Q2xvCiAgICAgICAgIEhUTUxTdGFja0VsZW0qIHByZXZFbGVtID0gbWF4RWxlbTsKICAgICAgICAg
d2hpbGUgKGN1cnJFbGVtICE9IGVsZW0pIHsKICAgICAgICAgICAgIEhUTUxTdGFja0VsZW0qIG5l
eHRFbGVtID0gY3VyckVsZW0tPm5leHQ7Ci0gICAgICAgICAgICBpZiAoIWlzUmVzaWR1YWxTdHls
ZVRhZyhjdXJyRWxlbS0+aWQpKSB7CisgICAgICAgICAgICBpZiAoIWlzUmVzaWR1YWxTdHlsZVRh
ZyhjdXJyRWxlbS0+dGFnTmFtZSkpIHsKICAgICAgICAgICAgICAgICBwcmV2RWxlbS0+bmV4dCA9
IG5leHRFbGVtOwogICAgICAgICAgICAgICAgIHByZXZFbGVtLT5ub2RlID0gY3VyckVsZW0tPm5v
ZGU7CiAgICAgICAgICAgICAgICAgZGVsZXRlIGN1cnJFbGVtOwpAQCAtMTE2OSw3ICsxMDM2LDcg
QEAgdm9pZCBLSFRNTFBhcnNlcjo6aGFuZGxlUmVzaWR1YWxTdHlsZUNsbwogICAgICAgICBOb2Rl
SW1wbCogY3Vyck5vZGUgPSAwOwogICAgICAgICBjdXJyRWxlbSA9IG1heEVsZW07CiAgICAgICAg
IHdoaWxlIChjdXJyRWxlbS0+bm9kZSAhPSByZXNpZHVhbEVsZW0pIHsKLSAgICAgICAgICAgIGlm
IChpc1Jlc2lkdWFsU3R5bGVUYWcoY3VyckVsZW0tPm5vZGUtPmlkKCkpKSB7CisgICAgICAgICAg
ICBpZiAoaXNSZXNpZHVhbFN0eWxlVGFnKGN1cnJFbGVtLT5ub2RlLT5sb2NhbE5hbWUoKSkpIHsK
ICAgICAgICAgICAgICAgICAvLyBDcmVhdGUgYSBjbG9uZSBvZiB0aGlzIGVsZW1lbnQuCiAgICAg
ICAgICAgICAgICAgY3Vyck5vZGUgPSBjdXJyRWxlbS0+bm9kZS0+Y2xvbmVOb2RlKGZhbHNlKTsK
IApAQCAtMTI0NSw3ICsxMTEyLDcgQEAgdm9pZCBLSFRNTFBhcnNlcjo6aGFuZGxlUmVzaWR1YWxT
dHlsZUNsbwogICAgICAgICAvLyBXZSB3aWxsIGFjdHVhbGx5IHNjaGVkdWxlIHRoaXMgdGFnIGZv
ciByZW9wZW5pbmcKICAgICAgICAgLy8gYWZ0ZXIgd2UgY29tcGxldGUgdGhlIGNsb3NlIG9mIHRo
aXMgZW50aXJlIGJsb2NrLgogICAgICAgICBOb2RlSW1wbCogY3Vyck5vZGUgPSBjdXJyZW50Owot
ICAgICAgICBpZiAoaXNSZXNpZHVhbFN0eWxlVGFnKGN1cnItPmlkKSkgeworICAgICAgICBpZiAo
aXNSZXNpZHVhbFN0eWxlVGFnKGN1cnItPnRhZ05hbWUpKSB7CiAgICAgICAgICAgICAvLyBXZSd2
ZSBvdmVybG9hZGVkIHRoZSB1c2Ugb2Ygc3RhY2sgZWxlbWVudHMgYW5kIGFyZSBqdXN0IHJldXNp
bmcgdGhlCiAgICAgICAgICAgICAvLyBzdHJ1Y3Qgd2l0aCBhIHNsaWdodGx5IGRpZmZlcmVudCBt
ZWFuaW5nIHRvIHRoZSB2YXJpYWJsZXMuICBJbnN0ZWFkIG9mIGNoYWluaW5nCiAgICAgICAgICAg
ICAvLyBmcm9tIGlubmVybW9zdCB0byBvdXRlcm1vc3QsIHdlIGJ1aWxkIHVwIGEgbGlzdCBvZiBh
bGwgdGhlIHRhZ3Mgd2UgbmVlZCB0byByZW9wZW4KQEAgLTEyNjksNyArMTEzNiw3IEBAIHZvaWQg
S0hUTUxQYXJzZXI6OmhhbmRsZVJlc2lkdWFsU3R5bGVDbG8KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiBpdCBiZWNvbWVzIG5lY2Vzc2Fy
eSB0byBkbyBzby4KIH0KIAotdm9pZCBLSFRNTFBhcnNlcjo6cmVvcGVuUmVzaWR1YWxTdHlsZVRh
Z3MoSFRNTFN0YWNrRWxlbSogZWxlbSwgRE9NOjpOb2RlSW1wbCogbWFsZm9ybWVkVGFibGVQYXJl
bnQpCit2b2lkIEhUTUxQYXJzZXI6OnJlb3BlblJlc2lkdWFsU3R5bGVUYWdzKEhUTUxTdGFja0Vs
ZW0qIGVsZW0sIERPTTo6Tm9kZUltcGwqIG1hbGZvcm1lZFRhYmxlUGFyZW50KQogewogICAgIC8v
IExvb3AgZm9yIGVhY2ggdGFnIHRoYXQgbmVlZHMgdG8gYmUgcmVvcGVuZWQuCiAgICAgd2hpbGUg
KGVsZW0pIHsKQEAgLTEyODYsNyArMTE1Myw3IEBAIHZvaWQgS0hUTUxQYXJzZXI6OnJlb3BlblJl
c2lkdWFsU3R5bGVUYWcKICAgICAgICAgLy8gRklYTUU6IElzIGl0IHJlYWxseSBPSyB0byBpZ25v
cmUgdGhlIGV4Y2VwdGlvbnMgaGVyZT8KIAogICAgICAgICAvLyBOb3cgcHVzaCBhIG5ldyBzdGFj
ayBlbGVtZW50IGZvciB0aGlzIG5vZGUgd2UganVzdCBjcmVhdGVkLgotICAgICAgICBwdXNoQmxv
Y2soZWxlbS0+aWQsIGVsZW0tPmxldmVsKTsKKyAgICAgICAgcHVzaEJsb2NrKGVsZW0tPnRhZ05h
bWUsIGVsZW0tPmxldmVsKTsKIAogICAgICAgICAvLyBTZXQgb3VyIHN0cmF5VGFibGVDb250ZW50
IGJvb2xlYW4gaWYgbmVlZGVkLCBzbyB0aGF0IHRoZSByZW9wZW5lZCB0YWcgYWxzbyBrbm93cwog
ICAgICAgICAvLyB0aGF0IGl0IGlzIGluc2lkZSBhIG1hbGZvcm1lZCB0YWJsZS4KQEAgLTEzMDcs
MzUgKzExNzQsMjEgQEAgdm9pZCBLSFRNTFBhcnNlcjo6cmVvcGVuUmVzaWR1YWxTdHlsZVRhZwog
ICAgIH0KIH0KIAotdm9pZCBLSFRNTFBhcnNlcjo6cHVzaEJsb2NrKGludCBfaWQsIGludCBfbGV2
ZWwpCit2b2lkIEhUTUxQYXJzZXI6OnB1c2hCbG9jayhjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05h
bWUsIGludCBfbGV2ZWwpCiB7Ci0gICAgSFRNTFN0YWNrRWxlbSAqRWxlbSA9IG5ldyBIVE1MU3Rh
Y2tFbGVtKF9pZCwgX2xldmVsLCBjdXJyZW50LCBibG9ja1N0YWNrKTsKLQorICAgIEhUTUxTdGFj
a0VsZW0gKkVsZW0gPSBuZXcgSFRNTFN0YWNrRWxlbSh0YWdOYW1lLCBfbGV2ZWwsIGN1cnJlbnQs
IGJsb2NrU3RhY2spOwogICAgIGJsb2NrU3RhY2sgPSBFbGVtOwotICAgIGFkZEZvcmJpZGRlbihf
aWQsIGZvcmJpZGRlblRhZyk7CiB9CiAKLXZvaWQgS0hUTUxQYXJzZXI6OnBvcEJsb2NrKCBpbnQg
X2lkICkKK3ZvaWQgSFRNTFBhcnNlcjo6cG9wQmxvY2soY29uc3QgQXRvbWljU3RyaW5nJiBfdGFn
TmFtZSkKIHsKICAgICBIVE1MU3RhY2tFbGVtICpFbGVtID0gYmxvY2tTdGFjazsKICAgICAKICAg
ICBpbnQgbWF4TGV2ZWwgPSAwOwogCi0jaWZkZWYgUEFSU0VSX0RFQlVHCi0gICAga2REZWJ1Zygg
NjAzNSApIDw8ICJwb3BCbG9jaygiIDw8IGdldFRhZ05hbWUoX2lkKS5zdHJpbmcoKSA8PCAiKSIg
PDwgZW5kbDsKLSAgICB3aGlsZShFbGVtKSB7Ci0gICAgICAgIGtkRGVidWcoIDYwMzUpIDw8ICIg
ICA+ICIgPDwgZ2V0VGFnTmFtZShFbGVtLT5pZCkuc3RyaW5nKCkgPDwgZW5kbDsKLSAgICAgICAg
RWxlbSA9IEVsZW0tPm5leHQ7Ci0gICAgfQotICAgIEVsZW0gPSBibG9ja1N0YWNrOwotI2VuZGlm
Ci0KLSAgICB3aGlsZSggRWxlbSAmJiAoRWxlbS0+aWQgIT0gX2lkKSkKLSAgICB7CisgICAgd2hp
bGUgKEVsZW0gJiYgKEVsZW0tPnRhZ05hbWUgIT0gX3RhZ05hbWUpKSB7CiAgICAgICAgIGlmICht
YXhMZXZlbCA8IEVsZW0tPmxldmVsKQotICAgICAgICB7CiAgICAgICAgICAgICBtYXhMZXZlbCA9
IEVsZW0tPmxldmVsOwotICAgICAgICB9CiAgICAgICAgIEVsZW0gPSBFbGVtLT5uZXh0OwogICAg
IH0KIApAQCAtMTM0NSwyMCArMTE5OCwxOCBAQCB2b2lkIEtIVE1MUGFyc2VyOjpwb3BCbG9jaygg
aW50IF9pZCApCiAgICAgaWYgKG1heExldmVsID4gRWxlbS0+bGV2ZWwpIHsKICAgICAgICAgLy8g
V2UgZGlkbid0IG1hdGNoIGJlY2F1c2UgdGhlIHRhZyBpcyBpbiBhIGRpZmZlcmVudCBzY29wZSwg
ZS5nLiwKICAgICAgICAgLy8gPGI+PHA+Rm9vPC9iPi4gIFRyeSB0byBjb3JyZWN0IHRoZSBwcm9i
bGVtLgotICAgICAgICBpZiAoIWlzUmVzaWR1YWxTdHlsZVRhZyhfaWQpKQorICAgICAgICBpZiAo
IWlzUmVzaWR1YWxTdHlsZVRhZyhfdGFnTmFtZSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIHJldHVybiBoYW5kbGVSZXNpZHVhbFN0eWxlQ2xvc2VUYWdBY3Jvc3NCbG9ja3MoRWxlbSk7
CiAgICAgfQogCi0gICAgYm9vbCBpc0FmZmVjdGVkQnlTdHlsZSA9IGlzQWZmZWN0ZWRCeVJlc2lk
dWFsU3R5bGUoRWxlbS0+aWQpOworICAgIGJvb2wgaXNBZmZlY3RlZEJ5U3R5bGUgPSBpc0FmZmVj
dGVkQnlSZXNpZHVhbFN0eWxlKEVsZW0tPnRhZ05hbWUpOwogICAgIEhUTUxTdGFja0VsZW0qIHJl
c2lkdWFsU3R5bGVTdGFjayA9IDA7CiAgICAgTm9kZUltcGwqIG1hbGZvcm1lZFRhYmxlUGFyZW50
ID0gMDsKICAgICAKICAgICBFbGVtID0gYmxvY2tTdGFjazsKLSAgICB3aGlsZSAoRWxlbSkKLSAg
ICB7Ci0gICAgICAgIGlmIChFbGVtLT5pZCA9PSBfaWQpCi0gICAgICAgIHsKKyAgICB3aGlsZSAo
RWxlbSkgeworICAgICAgICBpZiAoRWxlbS0+dGFnTmFtZSA9PSBfdGFnTmFtZSkgewogICAgICAg
ICAgICAgaW50IHN0cmF5VGFibGUgPSBpblN0cmF5VGFibGVDb250ZW50OwogICAgICAgICAgICAg
cG9wT25lQmxvY2soKTsKICAgICAgICAgICAgIEVsZW0gPSAwOwpAQCAtMTM2OSwxNCArMTIyMCwx
MyBAQCB2b2lkIEtIVE1MUGFyc2VyOjpwb3BCbG9jayggaW50IF9pZCApCiAgICAgICAgICAgICAv
LyBtdXN0IGFsc28ga25vdyB0aGF0IGl0IGlzIHRoZSByb290IG9mIG1hbGZvcm1lZCBjb250ZW50
IGluc2lkZSBhIDx0Ym9keT4vPHRyPi4KICAgICAgICAgICAgIGlmIChzdHJheVRhYmxlICYmIChp
blN0cmF5VGFibGVDb250ZW50IDwgc3RyYXlUYWJsZSkgJiYgcmVzaWR1YWxTdHlsZVN0YWNrKSB7
CiAgICAgICAgICAgICAgICAgTm9kZUltcGwqIGN1cnIgPSBjdXJyZW50OwotICAgICAgICAgICAg
ICAgIHdoaWxlIChjdXJyICYmIGN1cnItPmlkKCkgIT0gSURfVEFCTEUpCisgICAgICAgICAgICAg
ICAgd2hpbGUgKGN1cnIgJiYgIWN1cnItPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0YWJsZSgpKSkK
ICAgICAgICAgICAgICAgICAgICAgY3VyciA9IGN1cnItPnBhcmVudE5vZGUoKTsKICAgICAgICAg
ICAgICAgICBtYWxmb3JtZWRUYWJsZVBhcmVudCA9IGN1cnIgPyBjdXJyLT5wYXJlbnROb2RlKCkg
OiAwOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewot
ICAgICAgICAgICAgaWYgKEVsZW0tPmlkID09IElEX0ZPUk0gJiYgZm9ybSkKKyAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICBpZiAoZm9ybSAmJiBFbGVtLT50YWdOYW1lID09IEhUTUxOYW1lczo6
Zm9ybSgpKQogICAgICAgICAgICAgICAgIC8vIEEgPGZvcm0+IGlzIGJlaW5nIGNsb3NlZCBwcmVt
YXR1cmVseSAoYW5kIHRoaXMgaXMKICAgICAgICAgICAgICAgICAvLyBtYWxmb3JtZWQgSFRNTCku
ICBTZXQgYW4gYXR0cmlidXRlIG9uIHRoZSBmb3JtIHRvIGNsZWFyIG91dCBpdHMKICAgICAgICAg
ICAgICAgICAvLyBib3R0b20gbWFyZ2luLgpAQCAtMTM4NSw3ICsxMjM1LDcgQEAgdm9pZCBLSFRN
TFBhcnNlcjo6cG9wQmxvY2soIGludCBfaWQgKQogICAgICAgICAgICAgLy8gU2NoZWR1bGUgdGhp
cyB0YWcgZm9yIHJlb3BlbmluZwogICAgICAgICAgICAgLy8gYWZ0ZXIgd2UgY29tcGxldGUgdGhl
IGNsb3NlIG9mIHRoaXMgZW50aXJlIGJsb2NrLgogICAgICAgICAgICAgTm9kZUltcGwqIGN1cnJO
b2RlID0gY3VycmVudDsKLSAgICAgICAgICAgIGlmIChpc0FmZmVjdGVkQnlTdHlsZSAmJiBpc1Jl
c2lkdWFsU3R5bGVUYWcoRWxlbS0+aWQpKSB7CisgICAgICAgICAgICBpZiAoaXNBZmZlY3RlZEJ5
U3R5bGUgJiYgaXNSZXNpZHVhbFN0eWxlVGFnKEVsZW0tPnRhZ05hbWUpKSB7CiAgICAgICAgICAg
ICAgICAgLy8gV2UndmUgb3ZlcmxvYWRlZCB0aGUgdXNlIG9mIHN0YWNrIGVsZW1lbnRzIGFuZCBh
cmUganVzdCByZXVzaW5nIHRoZQogICAgICAgICAgICAgICAgIC8vIHN0cnVjdCB3aXRoIGEgc2xp
Z2h0bHkgZGlmZmVyZW50IG1lYW5pbmcgdG8gdGhlIHZhcmlhYmxlcy4gIEluc3RlYWQgb2YgY2hh
aW5pbmcKICAgICAgICAgICAgICAgICAvLyBmcm9tIGlubmVybW9zdCB0byBvdXRlcm1vc3QsIHdl
IGJ1aWxkIHVwIGEgbGlzdCBvZiBhbGwgdGhlIHRhZ3Mgd2UgbmVlZCB0byByZW9wZW4KQEAgLTE0
MDgsMTkgKzEyNTgsMTQgQEAgdm9pZCBLSFRNTFBhcnNlcjo6cG9wQmxvY2soIGludCBfaWQgKQog
ICAgIHJlb3BlblJlc2lkdWFsU3R5bGVUYWdzKHJlc2lkdWFsU3R5bGVTdGFjaywgbWFsZm9ybWVk
VGFibGVQYXJlbnQpOwogfQogCi12b2lkIEtIVE1MUGFyc2VyOjpwb3BPbmVCbG9jayhib29sIGRl
bEJsb2NrKQordm9pZCBIVE1MUGFyc2VyOjpwb3BPbmVCbG9jayhib29sIGRlbEJsb2NrKQogewog
ICAgIEhUTUxTdGFja0VsZW0gKkVsZW0gPSBibG9ja1N0YWNrOwogCiAgICAgLy8gd2Ugc2hvdWxk
IG5ldmVyIGdldCBoZXJlLCBidXQgc29tZSBiYWQgaHRtbCBtaWdodCBjYXVzZSBpdC4KLSNpZm5k
ZWYgUEFSU0VSX0RFQlVHCi0gICAgaWYoIUVsZW0pIHJldHVybjsKLSNlbHNlCi0gICAga2REZWJ1
ZyggNjAzNSApIDw8ICJwb3BwaW5nIGJsb2NrOiAiIDw8IGdldFRhZ05hbWUoRWxlbS0+aWQpLnN0
cmluZygpIDw8ICIoIiA8PCBFbGVtLT5pZCA8PCAiKSIgPDwgZW5kbDsKLSNlbmRpZgotCi0jaWYg
U1BFRURfREVCVUcgPCAxCi0gICAgaWYoKEVsZW0tPm5vZGUgIT0gY3VycmVudCkpIHsKKyAgICBp
ZiAoIUVsZW0pIHJldHVybjsKKyAgICAKKyAgICBpZiAoKEVsZW0tPm5vZGUgIT0gY3VycmVudCkp
IHsKICAgICAgICAgaWYgKGN1cnJlbnQtPm1haW50YWluc1N0YXRlKCkgJiYgZG9jKCkpewogICAg
ICAgICAgICAgZG9jKCktPnJlZ2lzdGVyTWFpbnRhaW5zU3RhdGUoY3VycmVudCk7CiAgICAgICAg
ICAgICBRU3RyaW5nTGlzdCAmc3RhdGVzID0gZG9jKCktPnJlc3RvcmVTdGF0ZSgpOwpAQCAtMTQz
MSw5ICsxMjc2LDYgQEAgdm9pZCBLSFRNTFBhcnNlcjo6cG9wT25lQmxvY2soYm9vbCBkZWxCbAog
ICAgICAgICAvLyBBIGZldyBlbGVtZW50cyAoPGFwcGxldD4sIDxvYmplY3Q+KSBuZWVkIHRvIGtu
b3cgd2hlbiBhbGwgY2hpbGQgZWxlbWVudHMgKDxwYXJhbT5zKSBhcmUgYXZhaWxhYmxlOgogICAg
ICAgICBjdXJyZW50LT5jbG9zZVJlbmRlcmVyKCk7CiAgICAgfQotI2VuZGlmCi0KLSAgICByZW1v
dmVGb3JiaWRkZW4oRWxlbS0+aWQsIGZvcmJpZGRlblRhZyk7CiAKICAgICBibG9ja1N0YWNrID0g
RWxlbS0+bmV4dDsKICAgICBzZXRDdXJyZW50KEVsZW0tPm5vZGUpOwpAQCAtMTQ0NSwxOSArMTI4
NywxOSBAQCB2b2lkIEtIVE1MUGFyc2VyOjpwb3BPbmVCbG9jayhib29sIGRlbEJsCiAgICAgICAg
IGRlbGV0ZSBFbGVtOwogfQogCi12b2lkIEtIVE1MUGFyc2VyOjpwb3BJbmxpbmVCbG9ja3MoKQor
dm9pZCBIVE1MUGFyc2VyOjpwb3BJbmxpbmVCbG9ja3MoKQogewotICAgIHdoaWxlIChibG9ja1N0
YWNrICYmIGN1cnJlbnQtPmlzSW5saW5lKCkpCisgICAgd2hpbGUgKGJsb2NrU3RhY2sgJiYgaXNJ
bmxpbmUoY3VycmVudCkpCiAgICAgICAgIHBvcE9uZUJsb2NrKCk7CiB9CiAKLXZvaWQgS0hUTUxQ
YXJzZXI6OmZyZWVCbG9jaygpCit2b2lkIEhUTUxQYXJzZXI6OmZyZWVCbG9jaygpCiB7CiAgICAg
d2hpbGUgKGJsb2NrU3RhY2spCiAgICAgICAgIHBvcE9uZUJsb2NrKCk7CiB9CiAKLXZvaWQgS0hU
TUxQYXJzZXI6OmNyZWF0ZUhlYWQoKQordm9pZCBIVE1MUGFyc2VyOjpjcmVhdGVIZWFkKCkKIHsK
ICAgICBpZihoZWFkIHx8ICFkb2MoKS0+Zmlyc3RDaGlsZCgpKQogICAgICAgICByZXR1cm47CkBA
IC0xNDc0LDcgKzEzMTYsNyBAQCB2b2lkIEtIVE1MUGFyc2VyOjpjcmVhdGVIZWFkKCkKICAgICB9
CiB9CiAKLU5vZGVJbXBsICpLSFRNTFBhcnNlcjo6aGFuZGxlSXNpbmRleCggVG9rZW4gKnQgKQor
Tm9kZUltcGwgKkhUTUxQYXJzZXI6OmhhbmRsZUlzaW5kZXgoIFRva2VuICp0ICkKIHsKICAgICBO
b2RlSW1wbCAqbjsKICAgICBIVE1MRm9ybUVsZW1lbnRJbXBsICpteWZvcm0gPSBmb3JtOwpAQCAt
MTUwNCw3ICsxMzQ2LDcgQEAgTm9kZUltcGwgKktIVE1MUGFyc2VyOjpoYW5kbGVJc2luZGV4KCBU
bwogICAgIHJldHVybiBuOwogfQogCi12b2lkIEtIVE1MUGFyc2VyOjpzdGFydEJvZHkoKQordm9p
ZCBIVE1MUGFyc2VyOjpzdGFydEJvZHkoKQogewogICAgIGlmKGluQm9keSkgcmV0dXJuOwogCkBA
IC0xNTE2LDcgKzEzNTgsNyBAQCB2b2lkIEtIVE1MUGFyc2VyOjpzdGFydEJvZHkoKQogICAgIH0K
IH0KIAotdm9pZCBLSFRNTFBhcnNlcjo6ZmluaXNoZWQoKQordm9pZCBIVE1MUGFyc2VyOjpmaW5p
c2hlZCgpCiB7CiAgICAgLy8gSW4gdGhlIGNhc2Ugb2YgYSBjb21wbGV0ZWx5IGVtcHR5IGRvY3Vt
ZW50LCBoZXJlJ3MgdGhlIHBsYWNlIHRvIGNyZWF0ZSB0aGUgSFRNTCBlbGVtZW50LgogICAgIGlm
IChjdXJyZW50LT5pc0RvY3VtZW50Tm9kZSgpICYmIGN1cnJlbnQtPmZpcnN0Q2hpbGQoKSA9PSAw
KSB7CkluZGV4OiBraHRtbC9odG1sL2h0bWxwYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9odG1sL2h0bWxwYXJzZXIuaCx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS4yNwpkaWZmIC11IC1wIC1yMS4yNyBraHRtbC9odG1sL2h0bWxwYXJzZXIuaAotLS0g
a2h0bWwvaHRtbC9odG1scGFyc2VyLmgJNiBKYW4gMjAwNSAyMToxMzoxNiAtMDAwMAkxLjI3Cisr
KyBraHRtbC9odG1sL2h0bWxwYXJzZXIuaAk4IEp1bCAyMDA1IDAzOjA0OjIxIC0wMDAwCkBAIC0y
OSwxOSArMjksOSBAQAogI2lmbmRlZiBIVE1MUEFSU0VSX0gKICNkZWZpbmUgSFRNTFBBUlNFUl9I
CiAKLS8vIDAgYWxsCi0vLyAxIGRvbXRyZWUgKyByZW5kZXJ0cmVlICsgc3R5bGVGb3JFbGVtZW50
LCBubyBsYXlvdXRpbmcKLS8vIDIgZG9tdHJlZSBvbmx5Ci0jZGVmaW5lIFNQRUVEX0RFQlVHIDAK
LQotI2lmZGVmIFNQRUVEX0RFQlVHCi0jaW5jbHVkZSA8cWRhdGV0aW1lLmg+Ci0jZW5kaWYKLQog
I2luY2x1ZGUgImRvbS9kb21fc3RyaW5nLmgiCiAjaW5jbHVkZSAieG1sL2RvbV9ub2RlaW1wbC5o
IgogI2luY2x1ZGUgImh0bWwvaHRtbF9kb2N1bWVudGltcGwuaCIKLSNpbmNsdWRlICJtaXNjL2h0
bWx0YWdzLmgiCiAKIGNsYXNzIEtIVE1MVmlldzsKIGNsYXNzIEhUTUxTdGFja0VsZW07CkBAIC02
MSwxOCArNTEsMTYgQEAgbmFtZXNwYWNlIGtodG1sIHsKICAgICBjbGFzcyBUb2tlbjsKIH07CiAK
LWNsYXNzIEtIVE1MUGFyc2VyOwotCiAvKioKICAqIFRoZSBwYXJzZXIgZm9yIGh0bWwuIEl0IHJl
Y2VpdmVzIGEgc3RyZWFtIG9mIHRva2VucyBmcm9tIHRoZSBIVE1MVG9rZW5pemVyLCBhbmQKICAq
IGJ1aWxkcyB1cCB0aGUgRG9jdW1lbnQgc3RydWN0dXJlIGZvcm0gaXQuCiAgKi8KLWNsYXNzIEtI
VE1MUGFyc2VyCitjbGFzcyBIVE1MUGFyc2VyCiB7CiBwdWJsaWM6Ci0gICAgS0hUTUxQYXJzZXIo
S0hUTUxWaWV3ICp3LCBET006OkRvY3VtZW50UHRyICppLCBib29sIGluY2x1ZGVzQ29tbWVudHM9
ZmFsc2UpOwotICAgIEtIVE1MUGFyc2VyKERPTTo6RG9jdW1lbnRGcmFnbWVudEltcGwgKmZyYWcs
IERPTTo6RG9jdW1lbnRQdHIgKmRvYywgYm9vbCBpbmNsdWRlc0NvbW1lbnRzPWZhbHNlKTsKLSAg
ICB2aXJ0dWFsIH5LSFRNTFBhcnNlcigpOworICAgIEhUTUxQYXJzZXIoS0hUTUxWaWV3ICp3LCBE
T006OkRvY3VtZW50UHRyICppLCBib29sIGluY2x1ZGVzQ29tbWVudHM9ZmFsc2UpOworICAgIEhU
TUxQYXJzZXIoRE9NOjpEb2N1bWVudEZyYWdtZW50SW1wbCAqZnJhZywgRE9NOjpEb2N1bWVudFB0
ciAqZG9jLCBib29sIGluY2x1ZGVzQ29tbWVudHM9ZmFsc2UpOworICAgIHZpcnR1YWwgfkhUTUxQ
YXJzZXIoKTsKIAogICAgIC8qKgogICAgICAqIHBhcnNlcyBvbmUgdG9rZW4gZGVsaXZlcmVkIGJ5
IHRoZSB0b2tlbml6ZXIKQEAgLTg5LDcgKzc3LDcgQEAgcHVibGljOgogICAgICAqLwogICAgIHZv
aWQgcmVzZXQoKTsKIAotICAgIGJvb2wgc2tpcE1vZGUoKSBjb25zdCB7IHJldHVybiAoZGlzY2Fy
ZF91bnRpbCAhPSAwKTsgfQorICAgIGJvb2wgc2tpcE1vZGUoKSBjb25zdCB7IHJldHVybiAhZGlz
Y2FyZF91bnRpbC5pc051bGwoKTsgfQogICAgIGJvb2wgbm9TcGFjZXMoKSBjb25zdCB7IHJldHVy
biAhaW5Cb2R5OyB9CiAgICAgYm9vbCBzZWxlY3RNb2RlKCkgY29uc3QgeyByZXR1cm4gaW5TZWxl
Y3Q7IH0KIApAQCAtOTcsNDggKzg1LDcwIEBAIHB1YmxpYzoKICAgICBET006OkRvY3VtZW50UHRy
ICpkb2NQdHIoKSBjb25zdCB7IHJldHVybiBkb2N1bWVudDsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAg
dm9pZCBzZXRDdXJyZW50KERPTTo6Tm9kZUltcGwgKm5ld0N1cnJlbnQpOworICAgIHZvaWQgc2V0
Q3VycmVudChET006Ok5vZGVJbXBsKiBuZXdDdXJyZW50KTsKKyAgICB2b2lkIHNldFNraXBNb2Rl
KGNvbnN0IERPTTo6UXVhbGlmaWVkTmFtZSYgcU5hbWUpIHsgZGlzY2FyZF91bnRpbCA9IHFOYW1l
LmxvY2FsTmFtZSgpOyB9CiAKICAgICBLSFRNTFZpZXcgKkhUTUxXaWRnZXQ7CiAgICAgRE9NOjpE
b2N1bWVudFB0ciAqZG9jdW1lbnQ7CiAKICAgICAvKgotICAgICAqIGdlbmVyYXRlIGFuIGVsZW1l
bnQgZnJvbSB0aGUgdG9rZW4KKyAgICAgKiBnZW5lcmF0ZSBhIG5vZGUgZnJvbSB0aGUgdG9rZW4K
ICAgICAgKi8KLSAgICBET006Ok5vZGVJbXBsICpnZXRFbGVtZW50KGtodG1sOjpUb2tlbiAqKTsK
KyAgICBET006Ok5vZGVJbXBsICpnZXROb2RlKGtodG1sOjpUb2tlbiAqKTsKKyAgICBib29sIHRl
eHRDcmVhdGVFcnJvckNoZWNrKGtodG1sOjpUb2tlbiosIERPTTo6Tm9kZUltcGwqJik7CisgICAg
Ym9vbCBjb21tZW50Q3JlYXRlRXJyb3JDaGVjayhraHRtbDo6VG9rZW4qLCBET006Ok5vZGVJbXBs
KiYpOworICAgIGJvb2wgaGVhZENyZWF0ZUVycm9yQ2hlY2soa2h0bWw6OlRva2VuKiwgRE9NOjpO
b2RlSW1wbComKTsKKyAgICBib29sIGJvZHlDcmVhdGVFcnJvckNoZWNrKGtodG1sOjpUb2tlbios
IERPTTo6Tm9kZUltcGwqJik7CisgICAgYm9vbCBmcmFtZXNldENyZWF0ZUVycm9yQ2hlY2soa2h0
bWw6OlRva2VuKiwgRE9NOjpOb2RlSW1wbComKTsKKyAgICBib29sIGlmcmFtZUNyZWF0ZUVycm9y
Q2hlY2soa2h0bWw6OlRva2VuKiwgRE9NOjpOb2RlSW1wbComKTsKKyAgICBib29sIGZvcm1DcmVh
dGVFcnJvckNoZWNrKGtodG1sOjpUb2tlbiosIERPTTo6Tm9kZUltcGwqJik7CisgICAgYm9vbCBp
c2luZGV4Q3JlYXRlRXJyb3JDaGVjayhraHRtbDo6VG9rZW4qLCBET006Ok5vZGVJbXBsKiYpOwor
ICAgIGJvb2wgc2VsZWN0Q3JlYXRlRXJyb3JDaGVjayhraHRtbDo6VG9rZW4qLCBET006Ok5vZGVJ
bXBsKiYpOworICAgIGJvb2wgZGRDcmVhdGVFcnJvckNoZWNrKGtodG1sOjpUb2tlbiosIERPTTo6
Tm9kZUltcGwqJik7CisgICAgYm9vbCBkdENyZWF0ZUVycm9yQ2hlY2soa2h0bWw6OlRva2VuKiwg
RE9NOjpOb2RlSW1wbComKTsKKyAgICBib29sIG5lc3RlZENyZWF0ZUVycm9yQ2hlY2soa2h0bWw6
OlRva2VuKiwgRE9NOjpOb2RlSW1wbComKTsKKyAgICBib29sIG5lc3RlZFN0eWxlQ3JlYXRlRXJy
b3JDaGVjayhraHRtbDo6VG9rZW4qLCBET006Ok5vZGVJbXBsKiYpOworICAgIGJvb2wgdGFibGVD
ZWxsQ3JlYXRlRXJyb3JDaGVjayhraHRtbDo6VG9rZW4qLCBET006Ok5vZGVJbXBsKiYpOworICAg
IGJvb2wgdGFibGVTZWN0aW9uQ3JlYXRlRXJyb3JDaGVjayhraHRtbDo6VG9rZW4qLCBET006Ok5v
ZGVJbXBsKiYpOworICAgIGJvb2wgbm9lbWJlZENyZWF0ZUVycm9yQ2hlY2soa2h0bWw6OlRva2Vu
KiwgRE9NOjpOb2RlSW1wbComKTsKKyAgICBib29sIG5vc2NyaXB0Q3JlYXRlRXJyb3JDaGVjayhr
aHRtbDo6VG9rZW4qLCBET006Ok5vZGVJbXBsKiYpOworICAgIGJvb2wgbm9mcmFtZXNDcmVhdGVF
cnJvckNoZWNrKGtodG1sOjpUb2tlbiosIERPTTo6Tm9kZUltcGwqJik7CisgICAgYm9vbCBub2xh
eWVyQ3JlYXRlRXJyb3JDaGVjayhraHRtbDo6VG9rZW4qLCBET006Ok5vZGVJbXBsKiYpOwogCiAg
ICAgdm9pZCBwcm9jZXNzQ2xvc2VUYWcoa2h0bWw6OlRva2VuICopOwogCiAgICAgYm9vbCBpbnNl
cnROb2RlKERPTTo6Tm9kZUltcGwgKm4sIGJvb2wgZmxhdCA9IGZhbHNlKTsKKyAgICBib29sIGhh
bmRsZUVycm9yKERPTTo6Tm9kZUltcGwqIG4sIGJvb2wgZmxhdCwgY29uc3QgRE9NOjpBdG9taWNT
dHJpbmcmIGxvY2FsTmFtZSwgaW50IHRhZ1ByaW9yaXR5KTsKKyAgICAKKyAgICAvLyBUaGUgY3Vy
cmVudGx5IGFjdGl2ZSBlbGVtZW50ICh0aGUgb25lIG5ldyBlbGVtZW50cyB3aWxsIGJlIGFkZGVk
IHRvKS4gIENhbiBiZSBhIERvY3VtZW50RnJhZ21lbnQsIGEgRG9jdW1lbnQgb3IgYW4gRWxlbWVu
dC4KKyAgICBET006Ok5vZGVJbXBsKiBjdXJyZW50OwogCi0gICAgLyoKLSAgICAgKiBUaGUgY3Vy
cmVudGx5IGFjdGl2ZSBlbGVtZW50ICh0aGUgb25lIG5ldyBlbGVtZW50cyB3aWxsIGJlIGFkZGVk
IHRvKQotICAgICAqLwotICAgIERPTTo6Tm9kZUltcGwgKmN1cnJlbnQ7CiAgICAgYm9vbCBjdXJy
ZW50SXNSZWZlcmVuY2VkOwogCiAgICAgSFRNTFN0YWNrRWxlbSAqYmxvY2tTdGFjazsKIAotICAg
IHZvaWQgcHVzaEJsb2NrKCBpbnQgX2lkLCBpbnQgX2xldmVsKTsKLQotICAgIHZvaWQgcG9wQmxv
Y2soIGludCBfaWQgKTsKKyAgICB2b2lkIHB1c2hCbG9jayhjb25zdCBET006OkF0b21pY1N0cmlu
ZyYgdGFnTmFtZSwgaW50IF9sZXZlbCk7CisgICAgdm9pZCBwb3BCbG9jayhjb25zdCBET006OkF0
b21pY1N0cmluZyYgdGFnTmFtZSk7CisgICAgdm9pZCBwb3BCbG9jayhjb25zdCBET006OlF1YWxp
ZmllZE5hbWUmIHFOYW1lKSB7IHJldHVybiBwb3BCbG9jayhxTmFtZS5sb2NhbE5hbWUoKSk7IH0g
Ly8gQ29udmVuaWVuY2UgZnVuY3Rpb24gZm9yIHJlYWRhYmlsaXR5LgogICAgIHZvaWQgcG9wT25l
QmxvY2soYm9vbCBkZWxCbG9jayA9IHRydWUpOwogICAgIHZvaWQgcG9wSW5saW5lQmxvY2tzKCk7
CiAKLSAgICB2b2lkIGZyZWVCbG9jayggdm9pZCk7CisgICAgdm9pZCBmcmVlQmxvY2soKTsKIAog
ICAgIHZvaWQgY3JlYXRlSGVhZCgpOwogCi0gICAgYm9vbCBpc1Jlc2lkdWFsU3R5bGVUYWcoaW50
IF9pZCk7Ci0gICAgYm9vbCBpc0FmZmVjdGVkQnlSZXNpZHVhbFN0eWxlKGludCBfaWQpOworICAg
IGJvb2wgaXNSZXNpZHVhbFN0eWxlVGFnKGNvbnN0IERPTTo6QXRvbWljU3RyaW5nJiB0YWdOYW1l
KTsKKyAgICBib29sIGlzQWZmZWN0ZWRCeVJlc2lkdWFsU3R5bGUoY29uc3QgRE9NOjpBdG9taWNT
dHJpbmcmIHRhZ05hbWUpOwogICAgIHZvaWQgaGFuZGxlUmVzaWR1YWxTdHlsZUNsb3NlVGFnQWNy
b3NzQmxvY2tzKEhUTUxTdGFja0VsZW0qIGVsZW0pOwogICAgIHZvaWQgcmVvcGVuUmVzaWR1YWxT
dHlsZVRhZ3MoSFRNTFN0YWNrRWxlbSogZWxlbSwgRE9NOjpOb2RlSW1wbCogbWFsZm9ybWVkVGFi
bGVQYXJlbnQpOwogCi0gICAgYm9vbCBhbGxvd05lc3RlZFJlZHVuZGFudFRhZyhpbnQgX2lkKTsK
KyAgICBib29sIGFsbG93TmVzdGVkUmVkdW5kYW50VGFnKGNvbnN0IERPTTo6QXRvbWljU3RyaW5n
JiB0YWdOYW1lKTsKICAgICAKLSAgICBzdGF0aWMgYm9vbCBpc0hlYWRlclRhZyhpbnQgX2lkKTsK
KyAgICBzdGF0aWMgYm9vbCBpc0hlYWRlclRhZyhjb25zdCBET006OkF0b21pY1N0cmluZyYgdGFn
TmFtZSk7CiAgICAgdm9pZCBwb3BOZXN0ZWRIZWFkZXJUYWcoKTsKIAorICAgIGJvb2wgaXNJbmxp
bmUoRE9NOjpOb2RlSW1wbCogbm9kZSkgY29uc3Q7CisgICAgCiAgICAgLyoKICAgICAgKiBjdXJy
ZW50bHkgYWN0aXZlIGZvcm0KICAgICAgKi8KQEAgLTE3NSwxOCArMTg1LDEyIEBAIHByb3RlY3Rl
ZDoKICAgICAvKgogICAgICAqIHRlbGxzIHRoZSBwYXJzZXIgdG8gZGlzY2FyZCBhbGwgdGFncywg
dW50aWwgaXQgcmVhY2hlcyB0aGUgb25lIHNwZWNpZmllZAogICAgICAqLwotICAgIGludCBkaXNj
YXJkX3VudGlsOworICAgIERPTTo6QXRvbWljU3RyaW5nIGRpc2NhcmRfdW50aWw7CiAKICAgICBi
b29sIGhlYWRMb2FkZWQ7CiAgICAgaW50IGluU3RyYXlUYWJsZUNvbnRlbnQ7CiAKICAgICBib29s
IGluY2x1ZGVzQ29tbWVudHNJbkRPTTsKLSAgICAKLSAgICB1c2hvcnQgZm9yYmlkZGVuVGFnW0lE
X0xBU1RfVEFHICsgMV07Ci0gICAgCi0jaWYgU1BFRURfREVCVUcgPiAwCi0gICAgUVRpbWUgcXQ7
Ci0jZW5kaWYKIH07Ci0KKyAgICAKICNlbmRpZiAvLyBIVE1MUEFSU0VSX0gKSW5kZXg6IGtodG1s
L2h0bWwvaHRtbHRva2VuaXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dl
YkNvcmUva2h0bWwvaHRtbC9odG1sdG9rZW5pemVyLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS45NQpkaWZmIC11IC1wIC1yMS45NSBraHRtbC9odG1sL2h0bWx0b2tlbml6ZXIuY3BwCi0tLSBr
aHRtbC9odG1sL2h0bWx0b2tlbml6ZXIuY3BwCTUgSnVsIDIwMDUgMjM6MjE6MTAgLTAwMDAJMS45
NQorKysga2h0bWwvaHRtbC9odG1sdG9rZW5pemVyLmNwcAk4IEp1bCAyMDA1IDAzOjA0OjIzIC0w
MDAwCkBAIC0zOSw3ICszOSw2IEBACiAjaW5jbHVkZSAiaHRtbC9odG1sdG9rZW5pemVyLmgiCiAj
aW5jbHVkZSAiaHRtbC9odG1sX2RvY3VtZW50aW1wbC5oIgogI2luY2x1ZGUgImh0bWwvaHRtbHBh
cnNlci5oIgotI2luY2x1ZGUgImh0bWwvZHRkLmgiCiAKICNpbmNsdWRlICJtaXNjL2xvYWRlci5o
IgogI2luY2x1ZGUgIm1pc2MvaHRtbGhhc2hlcy5oIgpAQCAtNjMsNyArNjIsMTAgQEAgdXNpbmcg
RE9NOjpET01TdHJpbmc7CiB1c2luZyBET006OkRPTVN0cmluZ0ltcGw7CiB1c2luZyBET006OkRv
Y3VtZW50SW1wbDsKIHVzaW5nIERPTTo6ZW1wdHlBdG9tOwotdXNpbmcgRE9NOjplbmRUYWdSZXF1
aXJlbWVudDsKK3VzaW5nIERPTTo6Y29tbWVudEF0b207Cit1c2luZyBET006Om51bGxBdG9tOwor
dXNpbmcgRE9NOjp0ZXh0QXRvbTsKK3VzaW5nIERPTTo6SFRNTE5hbWVzOwogCiAvLyB0dXJuIG9m
ZiBpbmxpbmluZyB0byB2b2lkIHdhcm5pbmcgd2l0aCBuZXdlciBnY2MKICN1bmRlZiBfX2lubGlu
ZQpAQCAtMjM5LDcgKzI0MSw3IEBAIEhUTUxUb2tlbml6ZXI6OkhUTUxUb2tlbml6ZXIoRE9NOjpE
b2N1bWUKICAgICBzY3JpcHRDb2RlID0gMDsKICAgICBzY3JpcHRDb2RlU2l6ZSA9IHNjcmlwdENv
ZGVNYXhTaXplID0gc2NyaXB0Q29kZVJlc3luYyA9IDA7CiAgICAgY2hhcnNldHMgPSBLR2xvYmFs
OjpjaGFyc2V0cygpOwotICAgIHBhcnNlciA9IG5ldyBLSFRNTFBhcnNlcihfdmlldywgX2RvYywg
aW5jbHVkZXNDb21tZW50cyk7CisgICAgcGFyc2VyID0gbmV3IEhUTUxQYXJzZXIoX3ZpZXcsIF9k
b2MsIGluY2x1ZGVzQ29tbWVudHMpOwogICAgIG1fZXhlY3V0aW5nU2NyaXB0ID0gMDsKICAgICBs
b2FkaW5nRXh0U2NyaXB0ID0gZmFsc2U7CiAgICAgb25Ib2xkID0gZmFsc2U7CkBAIC0yNTksNyAr
MjYxLDcgQEAgSFRNTFRva2VuaXplcjo6SFRNTFRva2VuaXplcihET006OkRvY3VtZQogICAgIHNj
cmlwdENvZGUgPSAwOwogICAgIHNjcmlwdENvZGVTaXplID0gc2NyaXB0Q29kZU1heFNpemUgPSBz
Y3JpcHRDb2RlUmVzeW5jID0gMDsKICAgICBjaGFyc2V0cyA9IEtHbG9iYWw6OmNoYXJzZXRzKCk7
Ci0gICAgcGFyc2VyID0gbmV3IEtIVE1MUGFyc2VyKGksIF9kb2MsIGluY2x1ZGVzQ29tbWVudHMp
OworICAgIHBhcnNlciA9IG5ldyBIVE1MUGFyc2VyKGksIF9kb2MsIGluY2x1ZGVzQ29tbWVudHMp
OwogICAgIG1fZXhlY3V0aW5nU2NyaXB0ID0gMDsKICAgICBsb2FkaW5nRXh0U2NyaXB0ID0gZmFs
c2U7CiAgICAgb25Ib2xkID0gZmFsc2U7CkBAIC00NTEsMTAgKzQ1MywxMCBAQCB2b2lkIEhUTUxU
b2tlbml6ZXI6OnBhcnNlU3BlY2lhbChUb2tlbml6CiAgICAgICAgICAgICBlbHNlIHsKICAgICAg
ICAgICAgICAgICBwcm9jZXNzTGlzdGluZyhUb2tlbml6ZXJTdHJpbmcoc2NyaXB0Q29kZSwgc2Ny
aXB0Q29kZVNpemUpKTsKICAgICAgICAgICAgICAgICBwcm9jZXNzVG9rZW4oKTsKLSAgICAgICAg
ICAgICAgICBpZiAoIHN0eWxlICkgICAgICAgICB7IGN1cnJUb2tlbi5pZCA9IElEX1NUWUxFICsg
SURfQ0xPU0VfVEFHOyB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoIHRleHRhcmVhICkgeyBj
dXJyVG9rZW4uaWQgPSBJRF9URVhUQVJFQSArIElEX0NMT1NFX1RBRzsgfQotICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKCB0aXRsZSApIHsgY3VyclRva2VuLmlkID0gSURfVElUTEUgKyBJRF9DTE9T
RV9UQUc7IH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmICggeG1wICkgIHsgY3VyclRva2VuLmlk
ID0gSURfWE1QICsgSURfQ0xPU0VfVEFHOyB9CisgICAgICAgICAgICAgICAgaWYgKCBzdHlsZSAp
ICAgICAgICAgeyBjdXJyVG9rZW4udGFnTmFtZSA9IEhUTUxOYW1lczo6c3R5bGUoKS5sb2NhbE5h
bWUoKTsgY3VyclRva2VuLmJlZ2luVGFnID0gZmFsc2U7IH0KKyAgICAgICAgICAgICAgICBlbHNl
IGlmICggdGV4dGFyZWEgKSB7IGN1cnJUb2tlbi50YWdOYW1lID0gSFRNTE5hbWVzOjp0ZXh0YXJl
YSgpLmxvY2FsTmFtZSgpOyBjdXJyVG9rZW4uYmVnaW5UYWcgPSBmYWxzZTsgfQorICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKCB0aXRsZSApIHsgY3VyclRva2VuLnRhZ05hbWUgPSBIVE1MTmFtZXM6
OnRpdGxlKCkubG9jYWxOYW1lKCk7IGN1cnJUb2tlbi5iZWdpblRhZyA9IGZhbHNlOyB9CisgICAg
ICAgICAgICAgICAgZWxzZSBpZiAoIHhtcCApICB7IGN1cnJUb2tlbi50YWdOYW1lID0gSFRNTE5h
bWVzOjp4bXAoKS5sb2NhbE5hbWUoKTsgY3VyclRva2VuLmJlZ2luVGFnID0gZmFsc2U7IH0KICAg
ICAgICAgICAgICAgICBwcm9jZXNzVG9rZW4oKTsKICAgICAgICAgICAgICAgICBzdHlsZSA9IHNj
cmlwdCA9IHN0eWxlID0gdGV4dGFyZWEgPSB0aXRsZSA9IHhtcCA9IGZhbHNlOwogICAgICAgICAg
ICAgICAgIHRxdW90ZSA9IE5vUXVvdGU7CkBAIC01MjQsNyArNTI2LDggQEAgdm9pZCBIVE1MVG9r
ZW5pemVyOjpzY3JpcHRIYW5kbGVyKCkKICAgICBwcm9jZXNzTGlzdGluZyhUb2tlbml6ZXJTdHJp
bmcoc2NyaXB0Q29kZSwgc2NyaXB0Q29kZVNpemUpKTsKICAgICBRU3RyaW5nIGV4U2NyaXB0KCBi
dWZmZXIsIGRlc3QtYnVmZmVyICk7CiAgICAgcHJvY2Vzc1Rva2VuKCk7Ci0gICAgY3VyclRva2Vu
LmlkID0gSURfU0NSSVBUICsgSURfQ0xPU0VfVEFHOworICAgIGN1cnJUb2tlbi50YWdOYW1lID0g
SFRNTE5hbWVzOjpzY3JpcHQoKS5sb2NhbE5hbWUoKTsKKyAgICBjdXJyVG9rZW4uYmVnaW5UYWcg
PSBmYWxzZTsKICAgICBwcm9jZXNzVG9rZW4oKTsKIAogICAgIFRva2VuaXplclN0cmluZyAqc2F2
ZWRQcmVwZW5kaW5nU3JjID0gY3VycmVudFByZXBlbmRpbmdTcmM7CkBAIC03MDEsMTAgKzcwNCwx
MiBAQCB2b2lkIEhUTUxUb2tlbml6ZXI6OnBhcnNlQ29tbWVudChUb2tlbml6CiAgICAgICAgICAg
ICAgICAgICAgICAgICBjaGVja1NjcmlwdEJ1ZmZlcigpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgc2NyaXB0Q29kZVsgc2NyaXB0Q29kZVNpemUgXSA9IDA7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBzY3JpcHRDb2RlWyBzY3JpcHRDb2RlU2l6ZSArIDEgXSA9IDA7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBjdXJyVG9rZW4uaWQgPSBJRF9DT01NRU5UOworICAgICAgICAgICAgICAgICAg
ICAgICAgY3VyclRva2VuLnRhZ05hbWUgPSBjb21tZW50QXRvbTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGN1cnJUb2tlbi5iZWdpblRhZyA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBwcm9jZXNzTGlzdGluZyhUb2tlbml6ZXJTdHJpbmcoc2NyaXB0Q29kZSwgc2NyaXB0Q29kZVNp
emUgLSBlbmRDaGFyc0NvdW50KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzVG9r
ZW4oKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJUb2tlbi5pZCA9IElEX0NPTU1FTlQg
KyBJRF9DTE9TRV9UQUc7CisgICAgICAgICAgICAgICAgICAgICAgICBjdXJyVG9rZW4udGFnTmFt
ZSA9IGNvbW1lbnRBdG9tOworICAgICAgICAgICAgICAgICAgICAgICAgY3VyclRva2VuLmJlZ2lu
VGFnID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzVG9rZW4oKTsKICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBzY3JpcHRDb2RlU2l6ZSA9
IDA7CkBAIC0xMDIyLDEwICsxMDI3LDEyIEBAIHZvaWQgSFRNTFRva2VuaXplcjo6cGFyc2VUYWco
VG9rZW5pemVyU3QKICAgICAgICAgICAgICAgICAgICAgZmluaXNoID0gdHJ1ZTsKICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIC8v
IFVzZSB0b2xvd2VyKCkgaW5zdGVhZCBvZiB8IDB4MjAgdG8gbG93ZXJjYXNlIHRoZSBjaGFyIGJl
Y2F1c2UgdGhlcmUgaXMgbm8gCi0gICAgICAgICAgICAgICAgLy8gcGVyZm9ybWFuY2UgZ2FpbiBp
biB1c2luZyB8IDB4MjAgc2luY2UgdG9sb3dlcigpIGlzIG9wdGltaXplZCBhbmQgCi0gICAgICAg
ICAgICAgICAgLy8gfCAweDIwIHR1cm5zIGNoYXJhY3RlcnMgc3VjaCBhcyAnXycgaW50byBqdW5r
LgotICAgICAgICAgICAgICAgIGNCdWZmZXJbY0J1ZmZlclBvcysrXSA9IHRvbG93ZXIoY3VyY2hh
cik7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gdG9sb3dlcigpIHNob3dz
IHVwIG9uIHByb2ZpbGVzLiBUaGlzIGlzIGZhc3RlciEKKyAgICAgICAgICAgICAgICBpZiAoY3Vy
Y2hhciA+PSAnQScgJiYgY3VyY2hhciA8PSAnWicpCisgICAgICAgICAgICAgICAgICAgIGNCdWZm
ZXJbY0J1ZmZlclBvcysrXSA9IGN1cmNoYXIgKyAoJ2EnIC0gJ0EnKTsKKyAgICAgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGNCdWZmZXJbY0J1ZmZlclBvcysrXSA9IGN1cmNo
YXI7CiAgICAgICAgICAgICAgICAgKytzcmM7CiAgICAgICAgICAgICB9CiAKQEAgLTEwNDcsMjcg
KzEwNTQsMTMgQEAgdm9pZCBIVE1MVG9rZW5pemVyOjpwYXJzZVRhZyhUb2tlbml6ZXJTdAogICAg
ICAgICAgICAgICAgICAgICAvLyBTdGFydCBUYWcKICAgICAgICAgICAgICAgICAgICAgYmVnaW5U
YWcgPSB0cnVlOwogCi0gICAgICAgICAgICAgICAgLy8gQWNjZXB0IGVtcHR5IHhtbCB0YWdzIGxp
a2UgPGJyLz4uICBXZSB0cmltIG9mZiB0aGUgIi8iIHNvIHRoYXQgd2hlbiB3ZSBjYWxsCi0gICAg
ICAgICAgICAgICAgLy8gZ2V0VGFnSUQsIHdlJ2xsIGxvb2sgdXAgImJyIiBhcyB0aGUgdGFnIG5h
bWUgYW5kIG5vdCAiYnIvIi4KKyAgICAgICAgICAgICAgICAvLyBJZ25vcmUgdGhlIC8gaW4gZmFr
ZSB4bWwgdGFncyBsaWtlIDxici8+LiAgV2UgdHJpbSBvZmYgdGhlICIvIiBzbyB0aGF0IHdlJ2xs
IGdldCAiYnIiIGFzIHRoZSB0YWcgbmFtZSBhbmQgbm90ICJici8iLgogICAgICAgICAgICAgICAg
IGlmKGxlbiA+IDEgJiYgcHRyW2xlbi0xXSA9PSAnLycgKQogICAgICAgICAgICAgICAgICAgICBw
dHJbLS1sZW5dID0gJ1wwJzsKIAotICAgICAgICAgICAgICAgIC8vIExvb2sgdXAgdGhlIHRhZ0lE
IGZvciB0aGUgc3BlY2lmaWVkIHRhZyBuYW1lIChub3cgdGhhdCB3ZSd2ZSBzaGF2ZWQgb2ZmIGFu
eQotICAgICAgICAgICAgICAgIC8vIGludmFsaWQgLyB0aGF0IG1pZ2h0IGhhdmUgZm9sbG93ZWQg
dGhlIG5hbWUpLgotICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHRhZ0lEID0gZ2V0VGFn
SUQocHRyLCBsZW4pOwotICAgICAgICAgICAgICAgIGlmICghdGFnSUQpIHsKLSAgICAgICAgICAg
ICAgICAgICAgRE9NU3RyaW5nIHRhZ05hbWUocHRyKTsKLSAgICAgICAgICAgICAgICAgICAgRG9j
dW1lbnRJbXBsICpkb2MgPSBwYXJzZXItPmRvY1B0cigpLT5kb2N1bWVudCgpOwotICAgICAgICAg
ICAgICAgICAgICBpZiAoZG9jLT5pc1ZhbGlkTmFtZSh0YWdOYW1lKSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHRhZ0lEID0gcGFyc2VyLT5kb2NQdHIoKS0+ZG9jdW1lbnQoKS0+dGFnSWQoMCwg
dGFnTmFtZS5pbXBsZW1lbnRhdGlvbigpLCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGlmICh0YWdJRCkgewotI2lmZGVmIFRPS0VOX0RFQlVHCi0gICAgICAgICAg
ICAgICAgICAgIFFDU3RyaW5nIHRtcChwdHIsIGxlbisxKTsKLSAgICAgICAgICAgICAgICAgICAg
a2REZWJ1ZyggNjAzNiApIDw8ICJmb3VuZCB0YWcgaWQ9IiA8PCB0YWdJRCA8PCAiOiAiIDw8IHRt
cC5kYXRhKCkgPDwgZW5kbDsKLSNlbmRpZgotICAgICAgICAgICAgICAgICAgICBjdXJyVG9rZW4u
aWQgPSBiZWdpblRhZyA/IHRhZ0lEIDogdGFnSUQgKyBJRF9DTE9TRV9UQUc7Ci0gICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIC8vIE5vdyB0aGF0IHdlJ3ZlIHNoYXZlZCBvZmYgYW55
IGludmFsaWQgLyB0aGF0IG1pZ2h0IGhhdmUgZm9sbG93ZWQgdGhlIG5hbWUpLCBtYWtlIHRoZSB0
YWcuCisgICAgICAgICAgICAgICAgY3VyclRva2VuLnRhZ05hbWUgPSBBdG9taWNTdHJpbmcocHRy
KTsKKyAgICAgICAgICAgICAgICBjdXJyVG9rZW4uYmVnaW5UYWcgPSBiZWdpblRhZzsKICAgICAg
ICAgICAgICAgICBkZXN0ID0gYnVmZmVyOwogICAgICAgICAgICAgICAgIHRhZyA9IFNlYXJjaEF0
dHJpYnV0ZTsKICAgICAgICAgICAgICAgICBjQnVmZmVyUG9zID0gMDsKQEAgLTExMTgsMTUgKzEx
MTEsNiBAQCB2b2lkIEhUTUxUb2tlbml6ZXI6OnBhcnNlVGFnKFRva2VuaXplclN0CiAgICAgICAg
ICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRy
TmFtZSA9IFFTdHJpbmc6OmZyb21MYXRpbjEoUUNTdHJpbmcoY0J1ZmZlciwgY0J1ZmZlclBvcysx
KS5kYXRhKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJOYW1lUHJlc2VudCA9
ICFhdHRyTmFtZS5pc0VtcHR5KCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBU
aGlzIGlzIGEgZGVsaWJlcmF0ZSBxdWlyayB0byBtYXRjaCBNb3ppbGxhIGFuZCBPcGVyYS4gIFdl
IGhhdmUgdG8gZG8gdGhpcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNpbmNlIHNp
dGVzIHRoYXQgdXNlIHRoZSAic3RhbmRhcmRzLWNvbXBsaWFudCIgcGF0aCBzb21ldGltZXMgc2Vu
ZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDxzY3JpcHQgc3JjPSJmb28uanMiLz4u
ICBCb3RoIE1veiBhbmQgT3BlcmEgd2lsbCBob25vciB0aGlzLCBkZXNwaXRlIGl0Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gYmVpbmcgYm9ndXMgSFRNTC4gIFRoZXkgZG8gbm90IGhv
bm9yIHRoZSAiLyIgZm9yIG90aGVyIHRhZ3MuICBUaGlzIGJlaGF2aW9yCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gYWxzbyBkZXZpYXRlcyBmcm9tIFdpbklFLCBidXQgaW4gdGhpcyBj
YXNlIHdlJ2xsIGp1c3QgY29weSBNb3ogYW5kIE9wZXJhLgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChjdXJyVG9rZW4uaWQgPT0gSURfU0NSSVBUICYmIGN1cmNoYXIgPT0gJz4nICYm
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJOYW1lID09ICIvIikKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyclRva2VuLmZsYXQgPSB0cnVlOwogICAgICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgICAgICAgICBkZXN0ID0gYnVmZmVyOwpAQCAtMTE0MiwxMCArMTEyNiwxMiBAQCB2b2lk
IEhUTUxUb2tlbml6ZXI6OnBhcnNlVGFnKFRva2VuaXplclN0CiAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAvLyBVc2UgdG9sb3dlcigpIGluc3RlYWQgb2YgfCAweDIwIHRvIGxvd2Vy
Y2FzZSB0aGUgY2hhciBiZWNhdXNlIHRoZXJlIGlzIG5vIAotICAgICAgICAgICAgICAgIC8vIHBl
cmZvcm1hbmNlIGdhaW4gaW4gdXNpbmcgfCAweDIwIHNpbmNlIHRvbG93ZXIoKSBpcyBvcHRpbWl6
ZWQgYW5kIAotICAgICAgICAgICAgICAgIC8vIHwgMHgyMCB0dXJucyBjaGFyYWN0ZXJzIHN1Y2gg
YXMgJ18nIGludG8ganVuay4KLSAgICAgICAgICAgICAgICBjQnVmZmVyW2NCdWZmZXJQb3MrK10g
PSB0b2xvd2VyKGN1cmNoYXIpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8v
IHRvbG93ZXIoKSBzaG93cyB1cCBvbiBwcm9maWxlcy4gVGhpcyBpcyBmYXN0ZXIhCisgICAgICAg
ICAgICAgICAgaWYgKGN1cmNoYXIgPj0gJ0EnICYmIGN1cmNoYXIgPD0gJ1onKQorICAgICAgICAg
ICAgICAgICAgICBjQnVmZmVyW2NCdWZmZXJQb3MrK10gPSBjdXJjaGFyICsgKCdhJyAtICdBJyk7
CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBjQnVmZmVyW2NCdWZm
ZXJQb3MrK10gPSBjdXJjaGFyOwogICAgICAgICAgICAgICAgICsrc3JjOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgaWYgKCBjQnVmZmVyUG9zID09IENCVUZMRU4gKSB7CkBAIC0xMzI4LDE4
ICsxMzE0LDE1IEBAIHZvaWQgSFRNTFRva2VuaXplcjo6cGFyc2VUYWcoVG9rZW5pemVyU3QKICAg
ICAgICAgICAgIGlmICgqc3JjICE9ICc8JykKICAgICAgICAgICAgICAgICArK3NyYzsKIAotICAg
ICAgICAgICAgaWYgKCAhY3VyclRva2VuLmlkICkgLy9zdG9wIGlmIHRhZyBpcyB1bmtub3duCisg
ICAgICAgICAgICBpZiAoY3VyclRva2VuLnRhZ05hbWUgPT0gbnVsbEF0b20pIC8vc3RvcCBpZiB0
YWcgaXMgdW5rbm93bgogICAgICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICAgICAgdWlu
dCB0YWdJRCA9IGN1cnJUb2tlbi5pZDsKKyAgICAgICAgICAgIEF0b21pY1N0cmluZyB0YWdOYW1l
ID0gY3VyclRva2VuLnRhZ05hbWU7CiAjaWYgZGVmaW5lZChUT0tFTl9ERUJVRykgJiYgVE9LRU5f
REVCVUcgPiAwCiAgICAgICAgICAgICBrZERlYnVnKCA2MDM2ICkgPDwgImFwcGVuZGluZyBUYWc6
ICIgPDwgdGFnSUQgPDwgZW5kbDsKICNlbmRpZgotICAgICAgICAgICAgYm9vbCBiZWdpblRhZyA9
ICFjdXJyVG9rZW4uZmxhdCAmJiAodGFnSUQgPD0gSURfQ0xPU0VfVEFHKTsKLQotICAgICAgICAg
ICAgaWYgKHRhZ0lEID4gSURfQ0xPU0VfVEFHKQotICAgICAgICAgICAgICAgIHRhZ0lEIC09IElE
X0NMT1NFX1RBRzsKLSAgICAgICAgICAgIGVsc2UgaWYgKHRhZ0lEID09IElEX1NDUklQVCkgewor
ICAgICAgICAgICAgYm9vbCBiZWdpblRhZyA9ICFjdXJyVG9rZW4uZmxhdCAmJiBjdXJyVG9rZW4u
YmVnaW5UYWc7CisgICAgICAgICAgICBpZiAoYmVnaW5UYWcgJiYgY3VyclRva2VuLnRhZ05hbWUg
PT0gSFRNTE5hbWVzOjpzY3JpcHQoKSkgewogICAgICAgICAgICAgICAgIEF0dHJpYnV0ZUltcGwq
IGEgPSAwOwogICAgICAgICAgICAgICAgIGJvb2wgZm91bmRUeXBlQXR0cmlidXRlID0gZmFsc2U7
CiAgICAgICAgICAgICAgICAgc2NyaXB0U3JjID0gUVN0cmluZzo6bnVsbDsKQEAgLTE0MTQsNzEg
KzEzOTcsNDkgQEAgdm9pZCBIVE1MVG9rZW5pemVyOjpwYXJzZVRhZyhUb2tlbml6ZXJTdAogCiAg
ICAgICAgICAgICBwcm9jZXNzVG9rZW4oKTsKIAotICAgICAgICAgICAgLy8gd2UgaGF2ZSB0byB0
YWtlIGNhcmUgdG8gY2xvc2UgdGhlIHByZSBibG9jayBpbgotICAgICAgICAgICAgLy8gY2FzZSB3
ZSBlbmNvdW50ZXIgYW4gdW5hbGxvd2VkIGVsZW1lbnQuLi4uCi0gICAgICAgICAgICBpZihwcmUg
JiYgYmVnaW5UYWcgJiYgIURPTTo6Y2hlY2tDaGlsZChJRF9QUkUsIHRhZ0lELCAhcGFyc2VyLT5k
b2MoKS0+aW5Db21wYXRNb2RlKCkpKSB7Ci0gICAgICAgICAgICAgICAga2REZWJ1Zyg2MDM2KSA8
PCAiIG5vdCBhbGxvd2VkIGluIDxwcmU+ICIgPDwgKGludCl0YWdJRCA8PCBlbmRsOwotICAgICAg
ICAgICAgICAgIHByZSA9IGZhbHNlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBzd2l0
Y2goIHRhZ0lEICkgewotICAgICAgICAgICAgY2FzZSBJRF9QUkU6CisgICAgICAgICAgICBpZiAo
dGFnTmFtZSA9PSBIVE1MTmFtZXM6OnByZSgpKSB7CiAgICAgICAgICAgICAgICAgcHJlUG9zID0g
MDsKICAgICAgICAgICAgICAgICBwcmUgPSBiZWdpblRhZzsKICAgICAgICAgICAgICAgICBkaXNj
YXJkID0gTEZEaXNjYXJkOyAvLyBEaXNjYXJkIHRoZSBmaXJzdCBMRiBhZnRlciB3ZSBvcGVuIGEg
cHJlLgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBJRF9TQ1JJUFQ6
CisgICAgICAgICAgICB9IGVsc2UgaWYgKHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpzY3JpcHQoKSkg
ewogICAgICAgICAgICAgICAgIGlmIChiZWdpblRhZykgewogICAgICAgICAgICAgICAgICAgICBz
ZWFyY2hTdG9wcGVyID0gc2NyaXB0RW5kOwogICAgICAgICAgICAgICAgICAgICBzZWFyY2hTdG9w
cGVyTGVuID0gODsKICAgICAgICAgICAgICAgICAgICAgc2NyaXB0ID0gdHJ1ZTsKICAgICAgICAg
ICAgICAgICAgICAgcGFyc2VTcGVjaWFsKHNyYyk7CiAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKHRhZ0lEIDw9IElEX0NMT1NFX1RBRykgeyAvLyBIYW5kbGUgPHNj
cmlwdCBzcmM9ImZvbyIvPgotICAgICAgICAgICAgICAgICAgICBzY3JpcHQgPSB0cnVlOwotICAg
ICAgICAgICAgICAgICAgICBzY3JpcHRIYW5kbGVyKCk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBJRF9TVFlMRToKKyAgICAgICAg
ICAgIH0gZWxzZSBpZiAodGFnTmFtZSA9PSBIVE1MTmFtZXM6OnN0eWxlKCkpIHsKICAgICAgICAg
ICAgICAgICBpZiAoYmVnaW5UYWcpIHsKICAgICAgICAgICAgICAgICAgICAgc2VhcmNoU3RvcHBl
ciA9IHN0eWxlRW5kOwogICAgICAgICAgICAgICAgICAgICBzZWFyY2hTdG9wcGVyTGVuID0gNzsK
ICAgICAgICAgICAgICAgICAgICAgc3R5bGUgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBw
YXJzZVNwZWNpYWwoc3JjKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBjYXNlIElEX1RFWFRBUkVBOgorICAgICAgICAgICAgfSBlbHNlIGlm
ICh0YWdOYW1lID09IEhUTUxOYW1lczo6dGV4dGFyZWEoKSkgewogICAgICAgICAgICAgICAgIGlm
KGJlZ2luVGFnKSB7CiAgICAgICAgICAgICAgICAgICAgIHNlYXJjaFN0b3BwZXIgPSB0ZXh0YXJl
YUVuZDsKICAgICAgICAgICAgICAgICAgICAgc2VhcmNoU3RvcHBlckxlbiA9IDEwOwogICAgICAg
ICAgICAgICAgICAgICB0ZXh0YXJlYSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIHBhcnNl
U3BlY2lhbChzcmMpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIGNhc2UgSURfVElUTEU6Ci0gICAgICAgICAgICAgICAgaWYgKGJlZ2luVGFn
KSB7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHRhZ05hbWUgPT0gSFRNTE5hbWVzOjp0aXRsZSgp
KSB7CisgICAgICAgICAgICAgICAgIGlmIChiZWdpblRhZykgewogICAgICAgICAgICAgICAgICAg
ICBzZWFyY2hTdG9wcGVyID0gdGl0bGVFbmQ7CiAgICAgICAgICAgICAgICAgICAgIHNlYXJjaFN0
b3BwZXJMZW4gPSA3OwogICAgICAgICAgICAgICAgICAgICB0aXRsZSA9IHRydWU7CiAgICAgICAg
ICAgICAgICAgICAgIHBhcnNlU3BlY2lhbChzcmMpOwogICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgSURfWE1QOgorICAgICAgICAgICAg
fSBlbHNlIGlmICh0YWdOYW1lID09IEhUTUxOYW1lczo6eG1wKCkpIHsKICAgICAgICAgICAgICAg
ICBpZiAoYmVnaW5UYWcpIHsKICAgICAgICAgICAgICAgICAgICAgc2VhcmNoU3RvcHBlciA9IHht
cEVuZDsKICAgICAgICAgICAgICAgICAgICAgc2VhcmNoU3RvcHBlckxlbiA9IDU7CiAgICAgICAg
ICAgICAgICAgICAgIHhtcCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIHBhcnNlU3BlY2lh
bChzcmMpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIGNhc2UgSURfU0VMRUNUOgorICAgICAgICAgICAgfSBlbHNlIGlmICh0YWdOYW1lID09
IEhUTUxOYW1lczo6c2VsZWN0KCkpCiAgICAgICAgICAgICAgICAgc2VsZWN0ID0gYmVnaW5UYWc7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIElEX1BMQUlOVEVYVDoK
KyAgICAgICAgICAgIGVsc2UgaWYgKHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpwbGFpbnRleHQoKSkK
ICAgICAgICAgICAgICAgICBwbGFpbnRleHQgPSBiZWdpblRhZzsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIH0KLQogICAgICAgICAgICAgcmV0dXJuOyAvLyBGaW5pc2hlZCBw
YXJzaW5nIHRhZyEKICAgICAgICAgfQogICAgICAgICB9IC8vIGVuZCBzd2l0Y2gKQEAgLTE5ODks
MTAgKzE5NTAsMTAgQEAgdm9pZCBIVE1MVG9rZW5pemVyOjpwcm9jZXNzVG9rZW4oKQogI2VuZGlm
CiAgICAgICAgIGN1cnJUb2tlbi50ZXh0ID0gbmV3IERPTVN0cmluZ0ltcGwoIGJ1ZmZlciwgZGVz
dCAtIGJ1ZmZlciApOwogICAgICAgICBjdXJyVG9rZW4udGV4dC0+cmVmKCk7Ci0gICAgICAgIGlm
IChjdXJyVG9rZW4uaWQgIT0gSURfQ09NTUVOVCkKLSAgICAgICAgICAgIGN1cnJUb2tlbi5pZCA9
IElEX1RFWFQ7CisgICAgICAgIGlmIChjdXJyVG9rZW4udGFnTmFtZSAhPSBjb21tZW50QXRvbSkK
KyAgICAgICAgICAgIGN1cnJUb2tlbi50YWdOYW1lID0gdGV4dEF0b207CiAgICAgfQotICAgIGVs
c2UgaWYoIWN1cnJUb2tlbi5pZCkgeworICAgIGVsc2UgaWYgKGN1cnJUb2tlbi50YWdOYW1lID09
IG51bGxBdG9tKSB7CiAgICAgICAgIGN1cnJUb2tlbi5yZXNldCgpOwogICAgICAgICBpZiAoanNQ
cm94eSkKICAgICAgICAgICAgIGpzUHJveHktPnNldEV2ZW50SGFuZGxlckxpbmVubyhsaW5lbm8r
c3JjLmxpbmVDb3VudCgpKTsKSW5kZXg6IGtodG1sL2h0bWwvaHRtbHRva2VuaXplci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbHRva2VuaXpl
ci5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjM2CmRpZmYgLXUgLXAgLXIxLjM2IGtodG1sL2h0
bWwvaHRtbHRva2VuaXplci5oCi0tLSBraHRtbC9odG1sL2h0bWx0b2tlbml6ZXIuaAk1IEp1bCAy
MDA1IDIzOjIxOjEwIC0wMDAwCTEuMzYKKysrIGtodG1sL2h0bWwvaHRtbHRva2VuaXplci5oCTgg
SnVsIDIwMDUgMDM6MDQ6MjMgLTAwMDAKQEAgLTM0LDggKzM0LDYgQEAKICNpbmNsdWRlIDxxcHRy
cXVldWUuaD4KIAogI2luY2x1ZGUgIm1pc2MvbG9hZGVyX2NsaWVudC5oIgotI2luY2x1ZGUgIm1p
c2MvaHRtbHRhZ3MuaCIKLSNpbmNsdWRlICJ4bWwvZG9tX3N0cmluZ2ltcGwuaCIKICNpbmNsdWRl
ICJ4bWwveG1sX3Rva2VuaXplci5oIgogI2luY2x1ZGUgImh0bWwvaHRtbF9lbGVtZW50aW1wbC5o
IgogI2luY2x1ZGUgInhtbC9kb21fZG9jaW1wbC5oIgpAQCAtNDcsNyArNDUsNyBAQAogI2VuZGlm
CiAKIGNsYXNzIEtDaGFyc2V0czsKLWNsYXNzIEtIVE1MUGFyc2VyOworY2xhc3MgSFRNTFBhcnNl
cjsKIGNsYXNzIEtIVE1MVmlldzsKIAogbmFtZXNwYWNlIERPTSB7CkBAIC03MCwyMiArNjgsMjQg
QEAgY2xhc3MgVG9rZW4KIHsKIHB1YmxpYzoKICAgICBUb2tlbigpIHsKLSAgICAgICAgaWQgPSAw
OwogICAgICAgICBhdHRycyA9IDA7CiAgICAgICAgIHRleHQgPSAwOworICAgICAgICBiZWdpblRh
ZyA9IHRydWU7CiAgICAgICAgIGZsYXQgPSBmYWxzZTsKICAgICAgICAgLy9xRGVidWcoIm5ldyB0
b2tlbiwgY3JlYXRpbmcgJTA4bHgiLCBhdHRycyk7CiAgICAgfQorCiAgICAgflRva2VuKCkgewot
ICAgICAgICBpZihhdHRycykgYXR0cnMtPmRlcmVmKCk7Ci0gICAgICAgIGlmKHRleHQpIHRleHQt
PmRlcmVmKCk7CisgICAgICAgIGlmIChhdHRycykgYXR0cnMtPmRlcmVmKCk7CisgICAgICAgIGlm
ICh0ZXh0KSB0ZXh0LT5kZXJlZigpOwogICAgIH0KKwogICAgIHZvaWQgYWRkQXR0cmlidXRlKERP
TTo6RG9jdW1lbnRJbXBsKiBkb2MsIFFDaGFyKiBidWZmZXIsIGNvbnN0IFFTdHJpbmcmIGF0dHJO
YW1lLCBjb25zdCBET006OkF0b21pY1N0cmluZyYgdikKICAgICB7CiAgICAgICAgIERPTTo6QXR0
cmlidXRlSW1wbCogYSA9IDA7Ci0gICAgICAgIGlmKGJ1ZmZlci0+dW5pY29kZSgpKQorICAgICAg
ICBpZiAoYnVmZmVyLT51bmljb2RlKCkpCiAgICAgICAgICAgICBhID0gbmV3IERPTTo6TWFwcGVk
QXR0cmlidXRlSW1wbChidWZmZXItPnVuaWNvZGUoKSwgdik7Ci0gICAgICAgIGVsc2UgaWYgKCAh
YXR0ck5hbWUuaXNFbXB0eSgpICYmIGF0dHJOYW1lICE9ICIvIiApCisgICAgICAgIGVsc2UgaWYg
KCFhdHRyTmFtZS5pc0VtcHR5KCkgJiYgYXR0ck5hbWUgIT0gIi8iKQogICAgICAgICAgICAgYSA9
IG5ldyBET006Ok1hcHBlZEF0dHJpYnV0ZUltcGwoZG9jLT5hdHRySWQoMCwgRE9NOjpET01TdHJp
bmcoYXR0ck5hbWUpLmltcGxlbWVudGF0aW9uKCksIGZhbHNlKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYpOwogCkBAIC05NywyMyArOTcsMzMgQEAgcHVi
bGljOgogICAgICAgICAgICAgYXR0cnMtPmluc2VydEF0dHJpYnV0ZShhKTsKICAgICAgICAgfQog
ICAgIH0KKworICAgIGJvb2wgaXNPcGVuVGFnKGNvbnN0IERPTTo6UXVhbGlmaWVkTmFtZSYgZnVs
bE5hbWUpIGNvbnN0IHsgcmV0dXJuIGJlZ2luVGFnICYmIGZ1bGxOYW1lLmxvY2FsTmFtZSgpID09
IHRhZ05hbWU7IH0KKyAgICBib29sIGlzQ2xvc2VUYWcoY29uc3QgRE9NOjpRdWFsaWZpZWROYW1l
JiBmdWxsTmFtZSkgY29uc3QgeyByZXR1cm4gIWJlZ2luVGFnICYmIGZ1bGxOYW1lLmxvY2FsTmFt
ZSgpID09IHRhZ05hbWU7IH0KKwogICAgIHZvaWQgcmVzZXQoKQogICAgIHsKLSAgICAgICAgaWYo
YXR0cnMpIHsKKyAgICAgICAgaWYgKGF0dHJzKSB7CiAgICAgICAgICAgICBhdHRycy0+ZGVyZWYo
KTsKICAgICAgICAgICAgIGF0dHJzID0gMDsKICAgICAgICAgfQotICAgICAgICBpZCA9IDA7Ci0g
ICAgICAgIGlmKHRleHQpIHsKKyAgICAgICAgCisgICAgICAgIHRhZ05hbWUgPSBET006Om51bGxB
dG9tOworICAgICAgICAKKyAgICAgICAgaWYgKHRleHQpIHsKICAgICAgICAgICAgIHRleHQtPmRl
cmVmKCk7CiAgICAgICAgICAgICB0ZXh0ID0gMDsKICAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgYmVnaW5UYWcgPSB0cnVlOwogICAgICAgICBmbGF0ID0gZmFsc2U7CiAgICAgfQorCiAgICAg
RE9NOjpOYW1lZE1hcHBlZEF0dHJNYXBJbXBsKiBhdHRyczsKICAgICBET006OkRPTVN0cmluZ0lt
cGwqIHRleHQ7Ci0gICAgdXNob3J0IGlkOwotICAgIGJvb2wgZmxhdDsKKyAgICBET006OkF0b21p
Y1N0cmluZyB0YWdOYW1lOworICAgIGJvb2wgYmVnaW5UYWcgOiAxOworICAgIGJvb2wgZmxhdCA6
IDE7CiB9OwogCiAvLyBUaGUgY291bnQgb2Ygc3BhY2VzIHVzZWQgZm9yIGVhY2ggdGFiLgpAQCAt
MzY4LDcgKzM3OCw3IEBAIHByb3RlY3RlZDoKICAgICBUb2tlbml6ZXJTdHJpbmcgc3JjOwogCiAg
ICAgS0NoYXJzZXRzICpjaGFyc2V0czsKLSAgICBLSFRNTFBhcnNlciAqcGFyc2VyOworICAgIEhU
TUxQYXJzZXIgKnBhcnNlcjsKIAogICAgIFFHdWFyZGVkUHRyPEtIVE1MVmlldz4gdmlldzsKICAg
ICAKSW5kZXg6IGtodG1sL21pc2MvZGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1dlYkNvcmUva2h0bWwvbWlzYy9kZWNvZGVyLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS4zNQpkaWZmIC11IC1wIC1yMS4zNSBraHRtbC9taXNjL2RlY29kZXIuY3BwCi0tLSBraHRt
bC9taXNjL2RlY29kZXIuY3BwCTI4IEp1biAyMDA1IDE4OjQ3OjEyIC0wMDAwCTEuMzUKKysrIGto
dG1sL21pc2MvZGVjb2Rlci5jcHAJOCBKdWwgMjAwNSAwMzowNDoyMyAtMDAwMApAQCAtNDEsNiAr
NDEsMTIgQEAgdXNpbmcgbmFtZXNwYWNlIGtodG1sOwogI2luY2x1ZGUgPGtkZWJ1Zy5oPgogI2lu
Y2x1ZGUgPGtsb2NhbGUuaD4KIAorI2luY2x1ZGUgImh0bWxuYW1lcy5oIgorCit1c2luZyBET006
OkF0b21pY1N0cmluZzsKK3VzaW5nIERPTTo6SFRNTE5hbWVzOwordXNpbmcgRE9NOjpudWxsQXRv
bTsKKwogY2xhc3MgS2FuamlDb2RlCiB7CiBwdWJsaWM6CkBAIC01MjYsMTIgKzUzMiw4IEBAIFFT
dHJpbmcgRGVjb2Rlcjo6ZGVjb2RlKGNvbnN0IGNoYXIgKmRhdGEKICAgICAgICAgICAgICAgICAg
ICAgICAgIGxlbisrOwogICAgICAgICAgICAgICAgICAgICB9CiAJCSAgICB0bXBbbGVuXSA9IDA7
Ci0gICAgICAgICAgICAgICAgICAgIGludCBpZCA9IGtodG1sOjpnZXRUYWdJRCh0bXAsIGxlbik7
Ci0gICAgICAgICAgICAgICAgICAgIGlmKGVuZCkgaWQgKz0gSURfQ0xPU0VfVEFHOwotCi0gICAg
ICAgICAgICAgICAgICAgIHN3aXRjaCggaWQgKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2Ug
SURfTUVUQToKLSAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBBdG9t
aWNTdHJpbmcgdGFnKHRtcCk7CisgICAgICAgICAgICAgICAgICAgIGlmICghZW5kICYmIHRhZyA9
PSBIVE1MTmFtZXM6Om1ldGEoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm91bmQg
YSBtZXRhIHRhZy4uLgogICAgICAgICAgICAgICAgICAgICAgICAgLy9wdHIgKz0gNTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiBlbmQgPSBwdHI7CkBAIC01NzAsMjggKzU3
MiwxMSBAQCBRU3RyaW5nIERlY29kZXI6OmRlY29kZShjb25zdCBjaGFyICpkYXRhCiAKIAkJCSAg
ICBwb3MgPSBlbmRwb3MgKyAxOwogCQkJfQotCQkgICAgfQotICAgICAgICAgICAgICAgICAgICBj
YXNlIChJRF9NRVRBK0lEX0NMT1NFX1RBRyk6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURf
U0NSSVBUOgotICAgICAgICAgICAgICAgICAgICBjYXNlIChJRF9TQ1JJUFQrSURfQ0xPU0VfVEFH
KToKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9OT1NDUklQVDoKLSAgICAgICAgICAgICAg
ICAgICAgY2FzZSAoSURfTk9TQ1JJUFQrSURfQ0xPU0VfVEFHKToKLSAgICAgICAgICAgICAgICAg
ICAgY2FzZSBJRF9TVFlMRToKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAoSURfU1RZTEUrSURf
Q0xPU0VfVEFHKToKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9MSU5LOgotICAgICAgICAg
ICAgICAgICAgICBjYXNlIChJRF9MSU5LK0lEX0NMT1NFX1RBRyk6Ci0gICAgICAgICAgICAgICAg
ICAgIGNhc2UgSURfT0JKRUNUOgotICAgICAgICAgICAgICAgICAgICBjYXNlIChJRF9PQkpFQ1Qr
SURfQ0xPU0VfVEFHKToKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9USVRMRToKLSAgICAg
ICAgICAgICAgICAgICAgY2FzZSAoSURfVElUTEUrSURfQ0xPU0VfVEFHKToKLSAgICAgICAgICAg
ICAgICAgICAgY2FzZSBJRF9CQVNFOgotICAgICAgICAgICAgICAgICAgICBjYXNlIChJRF9CQVNF
K0lEX0NMT1NFX1RBRyk6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfSFRNTDoKLSAgICAg
ICAgICAgICAgICAgICAgY2FzZSBJRF9IRUFEOgotICAgICAgICAgICAgICAgICAgICBjYXNlIDA6
Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgKDAgKyBJRF9DTE9TRV9UQUcgKToKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorCQkg
ICAgfSBlbHNlIGlmICh0YWcgIT0gSFRNTE5hbWVzOjpzY3JpcHQoKSAmJiB0YWcgIT0gSFRNTE5h
bWVzOjpub3NjcmlwdCgpICYmIHRhZyAhPSBIVE1MTmFtZXM6OnN0eWxlKCkgJiYKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0YWcgIT0gSFRNTE5hbWVzOjpsaW5rKCkgJiYgdGFnICE9
IEhUTUxOYW1lczo6bWV0YSgpICYmIHRhZyAhPSBIVE1MTmFtZXM6Om9iamVjdCgpICYmCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnICE9IEhUTUxOYW1lczo6dGl0bGUoKSAmJiB0
YWcgIT0gSFRNTE5hbWVzOjpiYXNlKCkgJiYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKGVuZCB8fCB0YWcgIT0gSFRNTE5hbWVzOjpodG1sKCkpICYmCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKGVuZCB8fCB0YWcgIT0gSFRNTE5hbWVzOjpoZWFkKCkpICYmIGlzYWxw
aGEodG1wWzBdKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgYm9keSA9IHRydWU7CiAjaWZk
ZWYgREVDT0RFX0RFQlVHCiAJCQlrZERlYnVnKCA2MDA1ICkgPDwgIkRlY29kZXI6IG5vIGNoYXJz
ZXQgZm91bmQuIElkPSIgPDwgaWQgPDwgZW5kbDsKSW5kZXg6IGtodG1sL21pc2MvaGFzaG1hcC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL21pc2MvaGFzaG1h
cC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtdSAtcCAtcjEuMSBraHRtbC9taXNj
L2hhc2htYXAuaAotLS0ga2h0bWwvbWlzYy9oYXNobWFwLmgJNiBKdWwgMjAwNSAwMToyODo0MiAt
MDAwMAkxLjEKKysrIGtodG1sL21pc2MvaGFzaG1hcC5oCTggSnVsIDIwMDUgMDM6MDQ6MjQgLTAw
MDAKQEAgLTc3LDcgKzc3LDcgQEAgY2xhc3MgSGFzaE1hcCB7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBL
ZXksIHR5cGVuYW1lIE1hcHBlZCwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgS2V5
VHJhaXRzLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHM+CiBpbnQgSGFzaE1hcDxLZXksIE1hcHBlZCwg
SGFzaEZ1bmN0aW9ucywgS2V5VHJhaXRzLCBNYXBwZWRUcmFpdHM+OjpzaXplKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gbV9pbXBsLmNvdW50KCk7IAorICAgIHJldHVybiBtX2ltcGwuc2l6ZSgpOyAK
IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBNYXBwZWQsIHR5cGVuYW1lIEhh
c2hGdW5jdGlvbnMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzPgpJ
bmRleDoga2h0bWwvbWlzYy9odG1saGFzaGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvV2ViQ29yZS9raHRtbC9taXNjL2h0bWxoYXNoZXMuY3BwLHYKcmV0cmlldmluZyByZXZp
c2lvbiAxLjEwCmRpZmYgLXUgLXAgLXIxLjEwIGtodG1sL21pc2MvaHRtbGhhc2hlcy5jcHAKLS0t
IGtodG1sL21pc2MvaHRtbGhhc2hlcy5jcHAJNSBKYW4gMjAwNSAyMjo1Njo0NiAtMDAwMAkxLjEw
CisrKyBraHRtbC9taXNjL2h0bWxoYXNoZXMuY3BwCTggSnVsIDIwMDUgMDM6MDQ6MjQgLTAwMDAK
QEAgLTI1LDIyICsyNSwxMyBAQAogLy8gdHVybiBvZmYgaW5saW5pbmcgdG8gdm9pZCB3YXJuaW5n
IHdpdGggbmV3ZXIgZ2NjCiAjdW5kZWYgX19pbmxpbmUKICNkZWZpbmUgX19pbmxpbmUKLSNpbmNs
dWRlICJodG1sdGFncy5jIgogI2luY2x1ZGUgImh0bWxhdHRycy5jIgogI3VuZGVmIF9faW5saW5l
CiAKLXVuc2lnbmVkIHNob3J0IGtodG1sOjpnZXRUYWdJRChjb25zdCBjaGFyICp0YWdTdHIsIGlu
dCBsZW4pCit1bnNpZ25lZCBzaG9ydCBraHRtbDo6Z2V0QXR0cklEKGNvbnN0IGNoYXIgKmF0dHJT
dHIsIGludCBsZW4pCiB7Ci0gICAgY29uc3Qgc3RydWN0IHRhZ3MgKnRhZ1B0ciA9IGZpbmRUYWco
dGFnU3RyLCBsZW4pOwotICAgIGlmICghdGFnUHRyKQorICAgIGNvbnN0IHN0cnVjdCBhdHRycyAq
YXR0clB0ciA9IGZpbmRBdHRyKGF0dHJTdHIsIGxlbik7CisgICAgaWYgKCFhdHRyUHRyKQogICAg
ICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gdGFnUHRyLT5pZDsKLX0KLQotdW5zaWduZWQgc2hv
cnQga2h0bWw6OmdldEF0dHJJRChjb25zdCBjaGFyICp0YWdTdHIsIGludCBsZW4pCi17Ci0gICAg
Y29uc3Qgc3RydWN0IGF0dHJzICp0YWdQdHIgPSBmaW5kQXR0cih0YWdTdHIsIGxlbik7Ci0gICAg
aWYgKCF0YWdQdHIpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiB0YWdQdHItPmlkOwor
ICAgIHJldHVybiBhdHRyUHRyLT5pZDsKIH0KSW5kZXg6IGtodG1sL21pc2MvaHRtbGhhc2hlcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL21pc2MvaHRtbGhh
c2hlcy5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjYKZGlmZiAtdSAtcCAtcjEuNiBraHRtbC9t
aXNjL2h0bWxoYXNoZXMuaAotLS0ga2h0bWwvbWlzYy9odG1saGFzaGVzLmgJNSBKYW4gMjAwNSAy
Mjo1Njo0NiAtMDAwMAkxLjYKKysrIGtodG1sL21pc2MvaHRtbGhhc2hlcy5oCTggSnVsIDIwMDUg
MDM6MDQ6MjQgLTAwMDAKQEAgLTIzLDEyICsyMywxMCBAQAogI2lmbmRlZiBIVE1MSEFTSEVTX0gK
ICNkZWZpbmUgSFRNTEhBU0hFU19ICiAKLSNpbmNsdWRlICJodG1sdGFncy5oIgogI2luY2x1ZGUg
Imh0bWxhdHRycy5oIgogCiBuYW1lc3BhY2Uga2h0bWwKIHsKLSAgdW5zaWduZWQgc2hvcnQgZ2V0
VGFnSUQoY29uc3QgY2hhciAqdGFnU3RyLCBpbnQgbGVuKTsKICAgdW5zaWduZWQgc2hvcnQgZ2V0
QXR0cklEKGNvbnN0IGNoYXIgKnRhZ1N0ciwgaW50IGxlbik7CiB9CiAKSW5kZXg6IGtodG1sL3Jl
bmRlcmluZy9yZW5kZXJfYXBwbGV0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3Qv
V2ViQ29yZS9raHRtbC9yZW5kZXJpbmcvcmVuZGVyX2FwcGxldC5jcHAsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuMzAKZGlmZiAtdSAtcCAtcjEuMzAga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9hcHBs
ZXQuY3BwCi0tLSBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2FwcGxldC5jcHAJMTAgTWF5IDIwMDUg
MTg6NDI6MDMgLTAwMDAJMS4zMAorKysga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9hcHBsZXQuY3Bw
CTggSnVsIDIwMDUgMDM6MDQ6MjQgLTAwMDAKQEAgLTM2LDcgKzM2LDYgQEAKICNpZm5kZWYgUV9X
U19RV1MgLy8gV2UgZG9uJ3QgaGF2ZSBKYXZhIGluIFF0IEVtYmVkZGVkCiAKICNpbmNsdWRlICJq
YXZhL2tqYXZhYXBwbGV0d2lkZ2V0LmgiCi0jaW5jbHVkZSAibWlzYy9odG1sdGFncy5oIgogI2lu
Y2x1ZGUgImh0bWwvaHRtbF9vYmplY3RpbXBsLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBraHRtbDsK
QEAgLTEwMyw3ICsxMDIsNyBAQCB2b2lkIFJlbmRlckFwcGxldDo6Y3JlYXRlV2lkZ2V0SWZOZWNl
c3NhCiAgICAgICAgICAgICAgICAgICAgICAgICAgbV9oZWlnaHQgLSBib3JkZXJUb3AoKSAtIGJv
cmRlckJvdHRvbSgpIC0gcGFkZGluZ1RvcCgpIC0gcGFkZGluZ0JvdHRvbSgpOwogICAgICAgICAg
ICAgTm9kZUltcGwgKmNoaWxkID0gZWxlbWVudCgpLT5maXJzdENoaWxkKCk7CiAgICAgICAgICAg
ICB3aGlsZSAoY2hpbGQpIHsKLSAgICAgICAgICAgICAgICBpZiAoY2hpbGQtPmlkKCkgPT0gSURf
UEFSQU0pIHsKKyAgICAgICAgICAgICAgICBpZiAoY2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjpwYXJhbSgpKSkgewogICAgICAgICAgICAgICAgICAgICBIVE1MUGFyYW1FbGVtZW50SW1wbCAq
cCA9IHN0YXRpY19jYXN0PEhUTUxQYXJhbUVsZW1lbnRJbXBsICo+KGNoaWxkKTsKICAgICAgICAg
ICAgICAgICAgICAgbV9hcmdzLmluc2VydChwLT5uYW1lKCkuc3RyaW5nKCksIHAtPnZhbHVlKCku
c3RyaW5nKCkpOwogICAgICAgICAgICAgICAgIH0KSW5kZXg6IGtodG1sL3JlbmRlcmluZy9yZW5k
ZXJfYmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1s
L3JlbmRlcmluZy9yZW5kZXJfYmxvY2suY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE4Ngpk
aWZmIC11IC1wIC1yMS4xODYga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9ibG9jay5jcHAKLS0tIGto
dG1sL3JlbmRlcmluZy9yZW5kZXJfYmxvY2suY3BwCTUgSnVsIDIwMDUgMjM6MjE6MTEgLTAwMDAJ
MS4xODYKKysrIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfYmxvY2suY3BwCTggSnVsIDIwMDUgMDM6
MDQ6MjcgLTAwMDAKQEAgLTQwLDcgKzQwLDYgQEAKIAogI2luY2x1ZGUgImtodG1sdmlldy5oIgog
I2luY2x1ZGUgImtodG1sX3BhcnQuaCIKLSNpbmNsdWRlICJodG1sdGFncy5oIgogCiB1c2luZyBu
YW1lc3BhY2UgRE9NOwogCkBAIC00NzUsNyArNDc0LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5
b3V0QmxvY2soYm9vbCByZWxheQogICAgICAgICBtX3RvcE1hcmdpblF1aXJrID0gc3R5bGUoKS0+
bWFyZ2luVG9wKCkucXVpcms7CiAgICAgICAgIG1fYm90dG9tTWFyZ2luUXVpcmsgPSBzdHlsZSgp
LT5tYXJnaW5Cb3R0b20oKS5xdWlyazsKIAotICAgICAgICBpZiAoZWxlbWVudCgpICYmIGVsZW1l
bnQoKS0+aWQoKSA9PSBJRF9GT1JNICYmIGVsZW1lbnQoKS0+aXNNYWxmb3JtZWQoKSkKKyAgICAg
ICAgaWYgKGVsZW1lbnQoKSAmJiBlbGVtZW50KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpmb3Jt
KCkpICYmIGVsZW1lbnQoKS0+aXNNYWxmb3JtZWQoKSkKICAgICAgICAgICAgIC8vIFNlZSBpZiB0
aGlzIGZvcm0gaXMgbWFsZm9ybWVkIChpLmUuLCB1bmNsb3NlZCkuIElmIHNvLCBkb24ndCBnaXZl
IHRoZSBmb3JtCiAgICAgICAgICAgICAvLyBhIGJvdHRvbSBtYXJnaW4uCiAgICAgICAgICAgICBt
X21heEJvdHRvbVBvc01hcmdpbiA9IG1fbWF4Qm90dG9tTmVnTWFyZ2luID0gMDsKSW5kZXg6IGto
dG1sL3JlbmRlcmluZy9yZW5kZXJfYm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvV2ViQ29yZS9raHRtbC9yZW5kZXJpbmcvcmVuZGVyX2JveC5jcHAsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuMTU0CmRpZmYgLXUgLXAgLXIxLjE1NCBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2Jv
eC5jcHAKLS0tIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfYm94LmNwcAkxMSBKdW4gMjAwNSAwNTow
MToxNyAtMDAwMAkxLjE1NAorKysga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9ib3guY3BwCTggSnVs
IDIwMDUgMDM6MDQ6MjkgLTAwMDAKQEAgLTI1Niw3ICsyNTYsNyBAQCB2b2lkIFJlbmRlckJveDo6
cGFpbnRSb290Qm94RGVjb3JhdGlvbnMoCiAgICAgICAgIC8vIGFub255bW91cyBibG9ja3MgY3Jl
YXRlZCBieSBpbmxpbmUgPGJvZHk+IHRhZ3MgZXRjLiAgV2UgY2FuIGxvY2F0ZSB0aGUgPGJvZHk+
CiAgICAgICAgIC8vIHJlbmRlciBvYmplY3QgdmVyeSBlYXNpbHkgdmlhIHRoZSBET00uCiAgICAg
ICAgIEhUTUxFbGVtZW50SW1wbCogYm9keSA9IGRvY3VtZW50KCktPmJvZHkoKTsKLSAgICAgICAg
UmVuZGVyT2JqZWN0KiBib2R5T2JqZWN0ID0gKGJvZHkgJiYgYm9keS0+aWQoKSA9PSBJRF9CT0RZ
KSA/IGJvZHktPnJlbmRlcmVyKCkgOiAwOworICAgICAgICBSZW5kZXJPYmplY3QqIGJvZHlPYmpl
Y3QgPSAoYm9keSAmJiBib2R5LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpib2R5KCkpKSA/IGJv
ZHktPnJlbmRlcmVyKCkgOiAwOwogICAgICAgICBpZiAoYm9keU9iamVjdCkgewogICAgICAgICAg
ICAgYmdMYXllciA9IGJvZHlPYmplY3QtPnN0eWxlKCktPmJhY2tncm91bmRMYXllcnMoKTsKICAg
ICAgICAgICAgIGJnQ29sb3IgPSBib2R5T2JqZWN0LT5zdHlsZSgpLT5iYWNrZ3JvdW5kQ29sb3Io
KTsKQEAgLTM2OSw3ICszNjksNyBAQCB2b2lkIFJlbmRlckJveDo6cGFpbnRCYWNrZ3JvdW5kRXh0
ZW5kZWQoCiAgICAgICAgIGJvb2wgaXNUcmFuc3BhcmVudDsKICAgICAgICAgRE9NOjpOb2RlSW1w
bCogZWx0ID0gZG9jdW1lbnQoKS0+b3duZXJFbGVtZW50KCk7CiAgICAgICAgIGlmIChlbHQpIHsK
LSAgICAgICAgICAgIGlmIChlbHQtPmlkKCkgPT0gSURfRlJBTUUpCisgICAgICAgICAgICBpZiAo
ZWx0LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZnJhbWUoKSkpCiAgICAgICAgICAgICAgICAgaXNU
cmFuc3BhcmVudCA9IGZhbHNlOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAg
Ly8gTG9jYXRlIHRoZSA8Ym9keT4gZWxlbWVudCB1c2luZyB0aGUgRE9NLiAgVGhpcyBpcyBlYXNp
ZXIgdGhhbiB0cnlpbmcKQEAgLTM3Nyw3ICszNzcsNyBAQCB2b2lkIFJlbmRlckJveDo6cGFpbnRC
YWNrZ3JvdW5kRXh0ZW5kZWQoCiAgICAgICAgICAgICAgICAgLy8gYW5vbnltb3VzIGJsb2NrcyBj
cmVhdGVkIGJ5IGlubGluZSA8Ym9keT4gdGFncyBldGMuICBXZSBjYW4gbG9jYXRlIHRoZSA8Ym9k
eT4KICAgICAgICAgICAgICAgICAvLyByZW5kZXIgb2JqZWN0IHZlcnkgZWFzaWx5IHZpYSB0aGUg
RE9NLgogICAgICAgICAgICAgICAgIEhUTUxFbGVtZW50SW1wbCogYm9keSA9IGRvY3VtZW50KCkt
PmJvZHkoKTsKLSAgICAgICAgICAgICAgICBpc1RyYW5zcGFyZW50ID0gIWJvZHkgfHwgYm9keS0+
aWQoKSAhPSBJRF9GUkFNRVNFVDsgLy8gQ2FuJ3Qgc2Nyb2xsIGEgZnJhbWVzZXQgZG9jdW1lbnQg
YW55d2F5LgorICAgICAgICAgICAgICAgIGlzVHJhbnNwYXJlbnQgPSAhYm9keSB8fCAhYm9keS0+
aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6ZnJhbWVzZXQoKSk7IC8vIENhbid0IHNjcm9sbCBhIGZy
YW1lc2V0IGRvY3VtZW50IGFueXdheS4KICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlCiAg
ICAgICAgICAgICBpc1RyYW5zcGFyZW50ID0gY2FudmFzKCktPnZpZXcoKS0+aXNUcmFuc3BhcmVu
dCgpOwpJbmRleDoga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9jYW52YXNpbWFnZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9j
YW52YXNpbWFnZS5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTEKZGlmZiAtdSAtcCAtcjEu
MTEga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9jYW52YXNpbWFnZS5jcHAKLS0tIGtodG1sL3JlbmRl
cmluZy9yZW5kZXJfY2FudmFzaW1hZ2UuY3BwCTI1IE1heSAyMDA1IDAxOjMzOjIyIC0wMDAwCTEu
MTEKKysrIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfY2FudmFzaW1hZ2UuY3BwCTggSnVsIDIwMDUg
MDM6MDQ6MjkgLTAwMDAKQEAgLTM3LDEwICszNyw4IEBACiAjaW5jbHVkZSAiY3NzL2Nzc2hlbHBl
ci5oIgogI2luY2x1ZGUgIm1pc2MvaGVscGVyLmgiCiAjaW5jbHVkZSAibWlzYy9odG1sYXR0cnMu
aCIKLSNpbmNsdWRlICJtaXNjL2h0bWx0YWdzLmgiCiAjaW5jbHVkZSAiaHRtbC9odG1sX2Zvcm1p
bXBsLmgiCiAjaW5jbHVkZSAiaHRtbC9odG1sX2NhbnZhc2ltcGwuaCIKLSNpbmNsdWRlICJodG1s
L2R0ZC5oIgogI2luY2x1ZGUgInhtbC9kb20yX2V2ZW50c2ltcGwuaCIKICNpbmNsdWRlICJodG1s
L2h0bWxfZG9jdW1lbnRpbXBsLmgiCiAjaW5jbHVkZSA8bWF0aC5oPgpAQCAtMTg2LDcgKzE4NCw3
IEBAIHZvaWQgUmVuZGVyQ2FudmFzSW1hZ2U6OnBhaW50KFBhaW50SW5mbyYKICAgICB9CiAgICAg
CiAgICAgaWYgKGRyYXduSW1hZ2UoKSkgewotICAgICAgICBIVE1MQ2FudmFzRWxlbWVudEltcGwq
IGkgPSAoZWxlbWVudCgpICYmIGVsZW1lbnQoKS0+aWQoKSA9PSBJRF9DQU5WQVMpID8gc3RhdGlj
X2Nhc3Q8SFRNTENhbnZhc0VsZW1lbnRJbXBsKj4oZWxlbWVudCgpKSA6IDA7CisgICAgICAgIEhU
TUxDYW52YXNFbGVtZW50SW1wbCogaSA9IChlbGVtZW50KCkgJiYgZWxlbWVudCgpLT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6Y2FudmFzKCkpKSA/IHN0YXRpY19jYXN0PEhUTUxDYW52YXNFbGVtZW50
SW1wbCo+KGVsZW1lbnQoKSkgOiAwOwogICAgICAgICBpbnQgb2xkT3BlcmF0aW9uID0gMDsKICAg
ICAgICAgaWYgKGkgJiYgIWktPmNvbXBvc2l0ZU9wZXJhdG9yKCkuaXNOdWxsKCkpewogICAgICAg
ICAgICAgb2xkT3BlcmF0aW9uID0gUVBhaW50ZXI6OmdldENvbXBvc2l0ZU9wZXJhdGlvbihwLT5j
dXJyZW50Q29udGV4dCgpKTsKSW5kZXg6IGtodG1sL3JlbmRlcmluZy9yZW5kZXJfY2FudmFzaW1h
Z2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9yZW5kZXJp
bmcvcmVuZGVyX2NhbnZhc2ltYWdlLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMwpkaWZmIC11
IC1wIC1yMS4zIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfY2FudmFzaW1hZ2UuaAotLS0ga2h0bWwv
cmVuZGVyaW5nL3JlbmRlcl9jYW52YXNpbWFnZS5oCTQgU2VwIDIwMDQgMTk6NTk6NTggLTAwMDAJ
MS4zCisrKyBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2NhbnZhc2ltYWdlLmgJOCBKdWwgMjAwNSAw
MzowNDoyOSAtMDAwMApAQCAtMjYsNyArMjYsNiBAQAogI2lmbmRlZiBSRU5ERVJfQ0FOVkFTSU1B
R0VfSAogI2RlZmluZSBSRU5ERVJfQ0FOVkFTSU1BR0VfSAogCi0jaW5jbHVkZSAiaHRtbC9kdGQu
aCIKICNpbmNsdWRlICJodG1sL2h0bWxfZWxlbWVudGltcGwuaCIKICNpbmNsdWRlICJyZW5kZXJp
bmcvcmVuZGVyX2ltYWdlLmgiCiAjaW5jbHVkZSAiZG9tL2RvbV9zdHJpbmcuaCIKSW5kZXg6IGto
dG1sL3JlbmRlcmluZy9yZW5kZXJfZmxvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L1dlYkNvcmUva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9mbG93LmNwcCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS4xNjAKZGlmZiAtdSAtcCAtcjEuMTYwIGtodG1sL3JlbmRlcmluZy9yZW5kZXJf
Zmxvdy5jcHAKLS0tIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfZmxvdy5jcHAJMTEgTWF5IDIwMDUg
MDI6MTA6MTAgLTAwMDAJMS4xNjAKKysrIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfZmxvdy5jcHAJ
OCBKdWwgMjAwNSAwMzowNDozMCAtMDAwMApAQCAtNDAsNyArNDAsNiBAQAogI2luY2x1ZGUgInJl
bmRlcl9saW5lLmgiCiAKICNpbmNsdWRlICJraHRtbHZpZXcuaCIKLSNpbmNsdWRlICJodG1sdGFn
cy5oIgogCiB1c2luZyBuYW1lc3BhY2UgRE9NOwogdXNpbmcgbmFtZXNwYWNlIGtodG1sOwpAQCAt
NjU0LDcgKzY1Myw3IEBAIHZvaWQgUmVuZGVyRmxvdzo6YWRkRm9jdXNSaW5nUmVjdHMoUVBhaW4K
ICAgICAvLyBPbmx5IHBhaW50IGZvY3VzIHJpbmcgYXJvdW5kIG91dGVybW9zdCBjb250ZW50ZWRp
dGFibGUgZWxlbWVudC4KICAgICAvLyBCdXQgc2tpcCB0aGUgYm9keSBlbGVtZW50IGlmIGl0IGlz
IG91dGVybW9zdC4KICAgICBpZiAoZWxlbWVudCgpICYmIGVsZW1lbnQoKS0+aXNDb250ZW50RWRp
dGFibGUoKSkgewotICAgICAgICBpZiAoZWxlbWVudCgpLT5wYXJlbnROb2RlKCkgJiYgIWVsZW1l
bnQoKS0+cGFyZW50Tm9kZSgpLT5pc0NvbnRlbnRFZGl0YWJsZSgpICYmIGVsZW1lbnQoKS0+aWQo
KSAhPSBJRF9CT0RZKQorICAgICAgICBpZiAoZWxlbWVudCgpLT5wYXJlbnROb2RlKCkgJiYgIWVs
ZW1lbnQoKS0+cGFyZW50Tm9kZSgpLT5pc0NvbnRlbnRFZGl0YWJsZSgpICYmICFlbGVtZW50KCkt
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpib2R5KCkpKQogICAgICAgICAgICAgcC0+YWRkRm9jdXNS
aW5nUmVjdChfdHgsIF90eSwgd2lkdGgoKSwgaGVpZ2h0KCkpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQpJbmRleDoga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9mb3JtLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9yZW5kZXJpbmcvcmVuZGVyX2Zvcm0uY3Bw
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEwOApkaWZmIC11IC1wIC1yMS4xMDgga2h0bWwvcmVu
ZGVyaW5nL3JlbmRlcl9mb3JtLmNwcAotLS0ga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9mb3JtLmNw
cAkyNCBKdW4gMjAwNSAwNTo1MzoyOCAtMDAwMAkxLjEwOAorKysga2h0bWwvcmVuZGVyaW5nL3Jl
bmRlcl9mb3JtLmNwcAk4IEp1bCAyMDA1IDAzOjA0OjMxIC0wMDAwCkBAIC03OTcsNyArNzk3LDcg
QEAgUmVuZGVyT2JqZWN0KiBSZW5kZXJGaWVsZHNldDo6ZmluZExlZ2VuZAogewogICAgIGZvciAo
UmVuZGVyT2JqZWN0KiBsZWdlbmQgPSBmaXJzdENoaWxkKCk7IGxlZ2VuZDsgbGVnZW5kID0gbGVn
ZW5kLT5uZXh0U2libGluZygpKSB7CiAgICAgICBpZiAoIWxlZ2VuZC0+aXNGbG9hdGluZ09yUG9z
aXRpb25lZCgpICYmIGxlZ2VuZC0+ZWxlbWVudCgpICYmCi0gICAgICAgICAgbGVnZW5kLT5lbGVt
ZW50KCktPmlkKCkgPT0gSURfTEVHRU5EKQorICAgICAgICAgIGxlZ2VuZC0+ZWxlbWVudCgpLT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6bGVnZW5kKCkpKQogICAgICAgICByZXR1cm4gbGVnZW5kOwog
ICAgIH0KICAgICByZXR1cm4gMDsKQEAgLTExOTEsNyArMTE5MSw3IEBAIHZvaWQgUmVuZGVyU2Vs
ZWN0Ojp1cGRhdGVGcm9tRWxlbWVudCgpCiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxLQ29tYm9C
b3gqPihtX3dpZGdldCktPmNsZWFyKCk7CiAKICAgICAgICAgZm9yIChsaXN0SW5kZXggPSAwOyBs
aXN0SW5kZXggPCBpbnQobGlzdEl0ZW1zLnNpemUoKSk7IGxpc3RJbmRleCsrKSB7Ci0gICAgICAg
ICAgICBpZiAobGlzdEl0ZW1zW2xpc3RJbmRleF0tPmlkKCkgPT0gSURfT1BUR1JPVVApIHsKKyAg
ICAgICAgICAgIGlmIChsaXN0SXRlbXNbbGlzdEluZGV4XS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
Om9wdGdyb3VwKCkpKSB7CiAgICAgICAgICAgICAgICAgUVN0cmluZyBsYWJlbCA9IGxpc3RJdGVt
c1tsaXN0SW5kZXhdLT5nZXRBdHRyaWJ1dGUoQVRUUl9MQUJFTCkuc3RyaW5nKCk7CiAgICAgICAg
ICAgICAgICAgbGFiZWwucmVwbGFjZShRQ2hhcignXFwnKSwgYmFja3NsYXNoQXNDdXJyZW5jeVN5
bWJvbCgpKTsKIApAQCAtMTIxNSwxNCArMTIxNSwxNCBAQCB2b2lkIFJlbmRlclNlbGVjdDo6dXBk
YXRlRnJvbUVsZW1lbnQoKQogICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxLQ29tYm9C
b3gqPihtX3dpZGdldCktPmluc2VydEl0ZW0obGFiZWwsIGxpc3RJbmRleCk7CiAjZW5kaWYKICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGxpc3RJdGVtc1tsaXN0SW5kZXhdLT5p
ZCgpID09IElEX09QVElPTikgeworICAgICAgICAgICAgZWxzZSBpZiAobGlzdEl0ZW1zW2xpc3RJ
bmRleF0tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvcHRpb24oKSkpIHsKICAgICAgICAgICAgICAg
ICBRU3RyaW5nIGl0ZW1UZXh0ID0gc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnRJbXBsKj4o
bGlzdEl0ZW1zW2xpc3RJbmRleF0pLT50ZXh0KCkuc3RyaW5nKCk7CiAgICAgICAgICAgICAgICAg
aXRlbVRleHQucmVwbGFjZShRQ2hhcignXFwnKSwgYmFja3NsYXNoQXNDdXJyZW5jeVN5bWJvbCgp
KTsKIAogICAgICAgICAgICAgICAgIC8vIEluIFdpbklFLCBsZWFkaW5nIGFuZCB0cmFpbGluZyB3
aGl0ZXNwYWNlIGlzIGlnbm9yZWQgaW4gb3B0aW9ucy4gV2UgbWF0Y2ggdGhpcyBiZWhhdmlvci4K
ICAgICAgICAgICAgICAgICBpdGVtVGV4dCA9IGl0ZW1UZXh0LnN0cmlwV2hpdGVTcGFjZSgpOwog
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChsaXN0SXRlbXNbbGlzdEluZGV4
XS0+cGFyZW50Tm9kZSgpLT5pZCgpID09IElEX09QVEdST1VQKQorICAgICAgICAgICAgICAgIGlm
IChsaXN0SXRlbXNbbGlzdEluZGV4XS0+cGFyZW50Tm9kZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6b3B0Z3JvdXAoKSkpCiAgICAgICAgICAgICAgICAgICAgIGl0ZW1UZXh0LnByZXBlbmQoIiAg
ICAiKTsKIAogI2lmIEFQUExFX0NIQU5HRVMKQEAgLTEzNDgsNyArMTM0OCw3IEBAIHZvaWQgUmVu
ZGVyU2VsZWN0OjpsYXlvdXQoICkKIAogICAgIGJvb2wgZm91bmRPcHRpb24gPSBmYWxzZTsKICAg
ICBmb3IgKHVpbnQgaSA9IDA7IGkgPCBsaXN0SXRlbXMuc2l6ZSgpICYmICFmb3VuZE9wdGlvbjsg
aSsrKQotCWZvdW5kT3B0aW9uID0gKGxpc3RJdGVtc1tpXS0+aWQoKSA9PSBJRF9PUFRJT04pOwor
CWZvdW5kT3B0aW9uID0gKGxpc3RJdGVtc1tpXS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9wdGlv
bigpKSk7CiAKICAgICBtX3dpZGdldC0+c2V0RW5hYmxlZChmb3VuZE9wdGlvbiAmJiAhIGVsZW1l
bnQoKS0+ZGlzYWJsZWQoKSk7CiB9CkBAIC0xMzYyLDEyICsxMzYyLDEyIEBAIHZvaWQgUmVuZGVy
U2VsZWN0OjpzbG90U2VsZWN0ZWQoaW50IGluZGUKICAgICBRTWVtQXJyYXk8SFRNTEdlbmVyaWNG
b3JtRWxlbWVudEltcGwqPiBsaXN0SXRlbXMgPSBlbGVtZW50KCktPmxpc3RJdGVtcygpOwogICAg
IGlmKGluZGV4ID49IDAgJiYgaW5kZXggPCBpbnQobGlzdEl0ZW1zLnNpemUoKSkpCiAgICAgewot
ICAgICAgICBib29sIGZvdW5kID0gKCBsaXN0SXRlbXNbaW5kZXhdLT5pZCgpID09IElEX09QVElP
TiApOworICAgICAgICBib29sIGZvdW5kID0gKGxpc3RJdGVtc1tpbmRleF0tPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjpvcHRpb24oKSkpOwogCiAgICAgICAgIGlmICggIWZvdW5kICkgewogICAgICAg
ICAgICAgLy8gdGhpcyBvbmUgaXMgbm90IHNlbGVjdGFibGUsICB3ZSBuZWVkIHRvIGZpbmQgYW4g
b3B0aW9uIGVsZW1lbnQKICAgICAgICAgICAgIHdoaWxlICggKCB1bnNpZ25lZCApIGluZGV4IDwg
bGlzdEl0ZW1zLnNpemUoKSApIHsKLSAgICAgICAgICAgICAgICBpZiAoIGxpc3RJdGVtc1tpbmRl
eF0tPmlkKCkgPT0gSURfT1BUSU9OICkgeworICAgICAgICAgICAgICAgIGlmIChsaXN0SXRlbXNb
aW5kZXhdLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpKSB7CiAgICAgICAgICAgICAg
ICAgICAgIGZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgfQpAQCAtMTM3Niw3ICsxMzc2LDcgQEAgdm9pZCBSZW5kZXJTZWxlY3Q6OnNsb3RT
ZWxlY3RlZChpbnQgaW5kZQogCiAgICAgICAgICAgICBpZiAoICFmb3VuZCApIHsKICAgICAgICAg
ICAgICAgICB3aGlsZSAoIGluZGV4ID49IDAgKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgg
bGlzdEl0ZW1zW2luZGV4XS0+aWQoKSA9PSBJRF9PUFRJT04gKSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChsaXN0SXRlbXNbaW5kZXhdLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkp
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMTM5MCw3ICsxMzkw
LDcgQEAgdm9pZCBSZW5kZXJTZWxlY3Q6OnNsb3RTZWxlY3RlZChpbnQgaW5kZQogICAgICAgICAg
ICAgICAgIHN0YXRpY19jYXN0PENvbWJvQm94V2lkZ2V0Kj4oIG1fd2lkZ2V0ICktPnNldEN1cnJl
bnRJdGVtKCBpbmRleCApOwogCiAgICAgICAgICAgICBmb3IgKCB1bnNpZ25lZCBpbnQgaSA9IDA7
IGkgPCBsaXN0SXRlbXMuc2l6ZSgpOyArK2kgKQotICAgICAgICAgICAgICAgIGlmICggbGlzdEl0
ZW1zW2ldLT5pZCgpID09IElEX09QVElPTiAmJiBpICE9ICh1bnNpZ25lZCBpbnQpIGluZGV4ICkK
KyAgICAgICAgICAgICAgICBpZiAobGlzdEl0ZW1zW2ldLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
b3B0aW9uKCkpICYmIGkgIT0gKHVuc2lnbmVkIGludCkgaW5kZXgpCiAgICAgICAgICAgICAgICAg
ICAgIHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50SW1wbCo+KCBsaXN0SXRlbXNbaV0gKS0+
bV9zZWxlY3RlZCA9IGZhbHNlOwogCiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxIVE1MT3B0aW9u
RWxlbWVudEltcGwqPihsaXN0SXRlbXNbaW5kZXhdKS0+bV9zZWxlY3RlZCA9IHRydWU7CkBAIC0x
NDExLDcgKzE0MTEsNyBAQCB2b2lkIFJlbmRlclNlbGVjdDo6c2xvdFNlbGVjdGlvbkNoYW5nZWQo
CiAgICAgZm9yICggdW5zaWduZWQgaSA9IDA7IGkgPCBsaXN0SXRlbXMuY291bnQoKTsgaSsrICkK
ICAgICAgICAgLy8gZG9uJ3QgdXNlIHNldFNlbGVjdGVkKCkgaGVyZSBiZWNhdXNlIGl0IHdpbGwg
Y2F1c2UgdXMgdG8gYmUgY2FsbGVkCiAgICAgICAgIC8vIGFnYWluIHdpdGggdXBkYXRlU2VsZWN0
aW9uLgotICAgICAgICBpZiAoIGxpc3RJdGVtc1tpXS0+aWQoKSA9PSBJRF9PUFRJT04gKQorICAg
ICAgICBpZiAobGlzdEl0ZW1zW2ldLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpKQog
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnRJbXBsKj4oIGxpc3RJdGVt
c1tpXSApCiAgICAgICAgICAgICAgICAgLT5tX3NlbGVjdGVkID0gc3RhdGljX2Nhc3Q8S0xpc3RC
b3gqPiggbV93aWRnZXQgKS0+aXNTZWxlY3RlZCggaSApOwogCkBAIC0xNDUzLDcgKzE0NTMsNyBA
QCB2b2lkIFJlbmRlclNlbGVjdDo6dXBkYXRlU2VsZWN0aW9uKCkKICAgICAgICAgLy8gaWYgbXVs
dGktc2VsZWN0LCB3ZSBzZWxlY3Qgb25seSB0aGUgbmV3IHNlbGVjdGVkIGluZGV4CiAgICAgICAg
IEtMaXN0Qm94ICpsaXN0Qm94ID0gc3RhdGljX2Nhc3Q8S0xpc3RCb3gqPihtX3dpZGdldCk7CiAg
ICAgICAgIGZvciAoaSA9IDA7IGkgPCBpbnQobGlzdEl0ZW1zLnNpemUoKSk7IGkrKykKLSAgICAg
ICAgICAgIGxpc3RCb3gtPnNldFNlbGVjdGVkKGksbGlzdEl0ZW1zW2ldLT5pZCgpID09IElEX09Q
VElPTiAmJgorICAgICAgICAgICAgbGlzdEJveC0+c2V0U2VsZWN0ZWQoaSwgbGlzdEl0ZW1zW2ld
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpICYmCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50SW1wbCo+KGxpc3RJdGVt
c1tpXSktPnNlbGVjdGVkKCkpOwogICAgIH0KICAgICBlbHNlIHsKQEAgLTE0NjEsNyArMTQ2MSw3
IEBAIHZvaWQgUmVuZGVyU2VsZWN0Ojp1cGRhdGVTZWxlY3Rpb24oKQogICAgICAgICB1bnNpZ25l
ZCBmaXJzdE9wdGlvbiA9IGxpc3RJdGVtcy5zaXplKCk7CiAgICAgICAgIGkgPSBsaXN0SXRlbXMu
c2l6ZSgpOwogICAgICAgICB3aGlsZSAoaS0tKQotICAgICAgICAgICAgaWYgKGxpc3RJdGVtc1tp
XS0+aWQoKSA9PSBJRF9PUFRJT04pIHsKKyAgICAgICAgICAgIGlmIChsaXN0SXRlbXNbaV0tPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjpvcHRpb24oKSkpIHsKICAgICAgICAgICAgICAgICBpZiAoZm91
bmQpCiAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50SW1w
bCo+KGxpc3RJdGVtc1tpXSktPm1fc2VsZWN0ZWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBl
bHNlIGlmIChzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudEltcGwqPihsaXN0SXRlbXNbaV0p
LT5zZWxlY3RlZCgpKSB7CkluZGV4OiBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2ZyYW1lcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvcmVuZGVyaW5nL3Jl
bmRlcl9mcmFtZXMuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjY5CmRpZmYgLXUgLXAgLXIx
LjY5IGtodG1sL3JlbmRlcmluZy9yZW5kZXJfZnJhbWVzLmNwcAotLS0ga2h0bWwvcmVuZGVyaW5n
L3JlbmRlcl9mcmFtZXMuY3BwCTEwIE1heSAyMDA1IDE4OjQyOjA0IC0wMDAwCTEuNjkKKysrIGto
dG1sL3JlbmRlcmluZy9yZW5kZXJfZnJhbWVzLmNwcAk4IEp1bCAyMDA1IDAzOjA0OjMyIC0wMDAw
CkBAIC0zNCw3ICszNCw2IEBACiAjaW5jbHVkZSAibWlzYy9odG1sYXR0cnMuaCIKICNpbmNsdWRl
ICJ4bWwvZG9tMl9ldmVudHNpbXBsLmgiCiAjaW5jbHVkZSAieG1sL2RvbV9kb2NpbXBsLmgiCi0j
aW5jbHVkZSAibWlzYy9odG1sdGFncy5oIgogI2luY2x1ZGUgImtodG1sdmlldy5oIgogI2luY2x1
ZGUgImtodG1sX3BhcnQuaCIKICNpbmNsdWRlICJyZW5kZXJfYXJlbmEuaCIKQEAgLTY2OSwxNyAr
NjY4LDE3IEBAIHZvaWQgUmVuZGVyUGFydE9iamVjdDo6dXBkYXRlV2lkZ2V0KCkKIAogICBzZXRO
ZWVkc0xheW91dEFuZE1pbk1heFJlY2FsYygpOwogCi0gIGlmIChlbGVtZW50KCktPmlkKCkgPT0g
SURfT0JKRUNUKSB7CisgIGlmIChlbGVtZW50KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvYmpl
Y3QoKSkpIHsKIAogICAgICAgSFRNTE9iamVjdEVsZW1lbnRJbXBsICpvID0gc3RhdGljX2Nhc3Q8
SFRNTE9iamVjdEVsZW1lbnRJbXBsICo+KGVsZW1lbnQoKSk7CiAKICAgICAgIC8vIENoZWNrIGZv
ciBhIGNoaWxkIEVNQkVEIHRhZy4KICAgICAgIEhUTUxFbWJlZEVsZW1lbnRJbXBsICplbWJlZCA9
IDA7CiAgICAgICBmb3IgKE5vZGVJbXBsICpjaGlsZCA9IG8tPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7
ICkgewotICAgICAgICAgIGlmIChjaGlsZC0+aWQoKSA9PSBJRF9FTUJFRCkgeworICAgICAgICAg
IGlmIChjaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmVtYmVkKCkpKSB7CiAgICAgICAgICAg
ICAgIGVtYmVkID0gc3RhdGljX2Nhc3Q8SFRNTEVtYmVkRWxlbWVudEltcGwgKj4oIGNoaWxkICk7
CiAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0gZWxzZSBpZiAoY2hpbGQtPmlkKCkg
PT0gSURfT0JKRUNUKSB7CisgICAgICAgICAgfSBlbHNlIGlmIChjaGlsZC0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6Om9iamVjdCgpKSkgewogICAgICAgICAgICAgICBjaGlsZCA9IGNoaWxkLT5uZXh0
U2libGluZygpOyAgICAgICAgIC8vIERvbid0IGRlc2NlbmQgaW50byBuZXN0ZWQgT0JKRUNUIHRh
Z3MKICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICBjaGlsZCA9IGNoaWxkLT50cmF2
ZXJzZU5leHROb2RlKG8pOyAgIC8vIE90aGVyd2lzZSBkZXNjZW5kIChFTUJFRHMgbWF5IGJlIGlu
c2lkZSBDT01NRU5UIHRhZ3MpCkBAIC03MTksNyArNzE4LDcgQEAgdm9pZCBSZW5kZXJQYXJ0T2Jq
ZWN0Ojp1cGRhdGVXaWRnZXQoKQogICAgICAgLy8gR2V0IHRoZSBhdHRyaWJ1dGVzIGZyb20gdGhl
IHBhcmFtcyBpZiB0aGVyZSBpcyBubyBFTUJFRCB0YWcuCiAgICAgICBOb2RlSW1wbCAqY2hpbGQg
PSBvLT5maXJzdENoaWxkKCk7CiAgICAgICB3aGlsZSAoY2hpbGQgJiYgKHVybC5pc0VtcHR5KCkg
fHwgc2VydmljZVR5cGUuaXNFbXB0eSgpIHx8ICFlbWJlZCkpIHsKLSAgICAgICAgICBpZiAoY2hp
bGQtPmlkKCkgPT0gSURfUEFSQU0pIHsKKyAgICAgICAgICBpZiAoY2hpbGQtPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjpwYXJhbSgpKSkgewogICAgICAgICAgICAgICBIVE1MUGFyYW1FbGVtZW50SW1w
bCAqcCA9IHN0YXRpY19jYXN0PEhUTUxQYXJhbUVsZW1lbnRJbXBsICo+KCBjaGlsZCApOwogICAg
ICAgICAgICAgICBRU3RyaW5nIG5hbWUgPSBwLT5uYW1lKCkuc3RyaW5nKCkubG93ZXIoKTsKICAg
ICAgICAgICAgICAgaWYgKHVybC5pc0VtcHR5KCkgJiYgKG5hbWUgPT0gInNyYyIgfHwgbmFtZSA9
PSAibW92aWUiIHx8IG5hbWUgPT0gImNvZGUiIHx8IG5hbWUgPT0gInVybCIpKSB7CkBAIC04MTAs
MTQgKzgwOSwxNCBAQCB2b2lkIFJlbmRlclBhcnRPYmplY3Q6OnVwZGF0ZVdpZGdldCgpCiAgICAg
ICAvLyBGaW5kIG91dCBpZiB3ZSBzdXBwb3J0IGZhbGxiYWNrIGNvbnRlbnQuCiAgICAgICBtX2hh
c0ZhbGxiYWNrQ29udGVudCA9IGZhbHNlOwogICAgICAgZm9yIChOb2RlSW1wbCAqY2hpbGQgPSBv
LT5maXJzdENoaWxkKCk7IGNoaWxkICYmICFtX2hhc0ZhbGxiYWNrQ29udGVudDsgY2hpbGQgPSBj
aGlsZC0+bmV4dFNpYmxpbmcoKSkgewotICAgICAgICAgIGlmICgoIWNoaWxkLT5pc1RleHROb2Rl
KCkgJiYgY2hpbGQtPmlkKCkgIT0gSURfRU1CRUQgJiYgY2hpbGQtPmlkKCkgIT0gSURfUEFSQU0p
IHx8IC8vIERpc2NvdW50IDxlbWJlZD4gYW5kIDxwYXJhbT4KKyAgICAgICAgICBpZiAoKCFjaGls
ZC0+aXNUZXh0Tm9kZSgpICYmICFjaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmVtYmVkKCkp
ICYmICFjaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnBhcmFtKCkpKSB8fCAvLyBEaXNjb3Vu
dCA8ZW1iZWQ+IGFuZCA8cGFyYW0+CiAgICAgICAgICAgICAgIChjaGlsZC0+aXNUZXh0Tm9kZSgp
ICYmICFjaGlsZC0+Y29udGFpbnNPbmx5V2hpdGVzcGFjZSgpKSkKICAgICAgICAgICAgICAgbV9o
YXNGYWxsYmFja0NvbnRlbnQgPSB0cnVlOwogICAgICAgfQogICAgICAgYm9vbCBzdWNjZXNzID0g
cGFydC0+cmVxdWVzdE9iamVjdCggdGhpcywgdXJsLCBzZXJ2aWNlVHlwZSwgcGFyYW1OYW1lcywg
cGFyYW1WYWx1ZXMgKTsKICAgICAgIGlmICghc3VjY2VzcyAmJiBtX2hhc0ZhbGxiYWNrQ29udGVu
dCkKICAgICAgICAgICBvLT5yZW5kZXJGYWxsYmFja0NvbnRlbnQoKTsKLSAgfSBlbHNlIGlmICgg
ZWxlbWVudCgpLT5pZCgpID09IElEX0VNQkVEICkgeworICB9IGVsc2UgaWYgKGVsZW1lbnQoKS0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OmVtYmVkKCkpKSB7CiAKICAgICAgIEhUTUxFbWJlZEVsZW1l
bnRJbXBsICpvID0gc3RhdGljX2Nhc3Q8SFRNTEVtYmVkRWxlbWVudEltcGwgKj4oZWxlbWVudCgp
KTsKICAgICAgIHVybCA9IG8tPnVybDsKQEAgLTg0NCw3ICs4NDMsNyBAQCB2b2lkIFJlbmRlclBh
cnRPYmplY3Q6OnVwZGF0ZVdpZGdldCgpCiAgICAgICB9CiAgICAgICBwYXJ0LT5yZXF1ZXN0T2Jq
ZWN0KCB0aGlzLCB1cmwsIHNlcnZpY2VUeXBlLCBwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcyApOwog
ICB9IGVsc2UgewotICAgICAgYXNzZXJ0KGVsZW1lbnQoKS0+aWQoKSA9PSBJRF9JRlJBTUUpOwor
ICAgICAgYXNzZXJ0KGVsZW1lbnQoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmlmcmFtZSgpKSk7
CiAgICAgICBIVE1MSUZyYW1lRWxlbWVudEltcGwgKm8gPSBzdGF0aWNfY2FzdDxIVE1MSUZyYW1l
RWxlbWVudEltcGwgKj4oZWxlbWVudCgpKTsKICAgICAgIHVybCA9IG8tPm1fVVJMLnN0cmluZygp
OwogICAgICAgaWYgKHVybC5pc0VtcHR5KCkpIHsKQEAgLTg5MCw3ICs4ODksNyBAQCB2b2lkIFJl
bmRlclBhcnRPYmplY3Q6OnNsb3RWaWV3Q2xlYXJlZCgpCiAgICAgICBRU2Nyb2xsVmlldzo6U2Ny
b2xsQmFyTW9kZSBzY3JvbGwgPSBRU2Nyb2xsVmlldzo6QXV0bzsKICAgICAgIGludCBtYXJnaW53
ID0gLTE7CiAgICAgICBpbnQgbWFyZ2luaCA9IC0xOwotICAgICAgaWYgKCBlbGVtZW50KCktPmlk
KCkgPT0gSURfSUZSQU1FKSB7CisgICAgICBpZiAoZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6aWZyYW1lKCkpKSB7CiAJICBIVE1MSUZyYW1lRWxlbWVudEltcGwgKmZyYW1lID0gc3Rh
dGljX2Nhc3Q8SFRNTElGcmFtZUVsZW1lbnRJbXBsICo+KGVsZW1lbnQoKSk7CiAJICBpZihmcmFt
ZS0+bV9mcmFtZUJvcmRlcikKIAkgICAgICBmcmFtZVN0eWxlID0gUUZyYW1lOjpCb3g7CkBAIC05
MTAsNyArOTA5LDcgQEAgdm9pZCBSZW5kZXJQYXJ0T2JqZWN0OjpzbG90Vmlld0NsZWFyZWQoKQog
ICAgICAgICAgIGtkRGVidWcoNjAzMSkgPDwgImZyYW1lIGlzIGEgS0hUTUx2aWV3ISIgPDwgZW5k
bDsKICNlbmRpZgogICAgICAgICAgIEtIVE1MVmlldyAqaHRtbFZpZXcgPSBzdGF0aWNfY2FzdDxL
SFRNTFZpZXcgKj4odmlldyk7Ci0gICAgICAgICAgaHRtbFZpZXctPnNldElnbm9yZVdoZWVsRXZl
bnRzKCBlbGVtZW50KCktPmlkKCkgPT0gSURfSUZSQU1FICk7CisgICAgICAgICAgaHRtbFZpZXct
PnNldElnbm9yZVdoZWVsRXZlbnRzKGVsZW1lbnQoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omlm
cmFtZSgpKSk7CiAgICAgICAgICAgaWYobWFyZ2ludyAhPSAtMSkgaHRtbFZpZXctPnNldE1hcmdp
bldpZHRoKG1hcmdpbncpOwogICAgICAgICAgIGlmKG1hcmdpbmggIT0gLTEpIGh0bWxWaWV3LT5z
ZXRNYXJnaW5IZWlnaHQobWFyZ2luaCk7CiAgICAgICAgIH0KSW5kZXg6IGtodG1sL3JlbmRlcmlu
Zy9yZW5kZXJfaW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3Jl
L2todG1sL3JlbmRlcmluZy9yZW5kZXJfaW1hZ2UuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
Ljc3CmRpZmYgLXUgLXAgLXIxLjc3IGtodG1sL3JlbmRlcmluZy9yZW5kZXJfaW1hZ2UuY3BwCi0t
LSBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2ltYWdlLmNwcAk1IEp1bCAyMDA1IDIzOjIxOjExIC0w
MDAwCTEuNzcKKysrIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfaW1hZ2UuY3BwCTggSnVsIDIwMDUg
MDM6MDQ6MzIgLTAwMDAKQEAgLTM3LDEwICszNyw4IEBACiAjaW5jbHVkZSAiY3NzL2Nzc2hlbHBl
ci5oIgogI2luY2x1ZGUgIm1pc2MvaGVscGVyLmgiCiAjaW5jbHVkZSAibWlzYy9odG1sYXR0cnMu
aCIKLSNpbmNsdWRlICJtaXNjL2h0bWx0YWdzLmgiCiAjaW5jbHVkZSAiaHRtbC9odG1sX2Zvcm1p
bXBsLmgiCiAjaW5jbHVkZSAiaHRtbC9odG1sX2ltYWdlaW1wbC5oIgotI2luY2x1ZGUgImh0bWwv
ZHRkLmgiCiAjaW5jbHVkZSAieG1sL2RvbTJfZXZlbnRzaW1wbC5oIgogI2luY2x1ZGUgImh0bWwv
aHRtbF9kb2N1bWVudGltcGwuaCIKICNpbmNsdWRlIDxtYXRoLmg+CkBAIC00MTksNyArNDE3LDcg
QEAgdm9pZCBSZW5kZXJJbWFnZTo6cGFpbnQoUGFpbnRJbmZvJiBpLCBpbgogCiAKIC8vICAgICAg
ICAgICAgIHAtPmRyYXdQaXhtYXAoIG9mZnMueCgpLCB5LCBwaXgsIHJlY3QueCgpLCByZWN0Lnko
KSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpICk7Ci0gICAgICAgICAgICAgSFRNTEltYWdl
RWxlbWVudEltcGwqIGkgPSAoZWxlbWVudCgpICYmIGVsZW1lbnQoKS0+aWQoKSA9PSBJRF9JTUcp
ID8gc3RhdGljX2Nhc3Q8SFRNTEltYWdlRWxlbWVudEltcGwqPihlbGVtZW50KCkpIDogMDsKKyAg
ICAgICAgICAgICBIVE1MSW1hZ2VFbGVtZW50SW1wbCogaSA9IChlbGVtZW50KCkgJiYgZWxlbWVu
dCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW1nKCkpKSA/IHN0YXRpY19jYXN0PEhUTUxJbWFn
ZUVsZW1lbnRJbXBsKj4oZWxlbWVudCgpKSA6IDA7CiAgICAgICAgICAgICAgaWYgKGkgJiYgIWkt
PmNvbXBvc2l0ZU9wZXJhdG9yKCkuaXNOdWxsKCkpewogICAgICAgICAgICAgICAgIHAtPmRyYXdQ
aXhtYXAgKG9mZnMsIHBpeCwgcmVjdCwgaS0+Y29tcG9zaXRlT3BlcmF0b3IoKSk7CiAgICAgICAg
ICAgICAgfQpAQCAtNDg2LDcgKzQ4NCw3IEBAIHZvaWQgUmVuZGVySW1hZ2U6OmxheW91dCgpCiAK
IEhUTUxNYXBFbGVtZW50SW1wbCogUmVuZGVySW1hZ2U6OmltYWdlTWFwKCkKIHsKLSAgICBIVE1M
SW1hZ2VFbGVtZW50SW1wbCogaSA9IGVsZW1lbnQoKS0+aWQoKSA9PSBJRF9JTUcgPyBzdGF0aWNf
Y2FzdDxIVE1MSW1hZ2VFbGVtZW50SW1wbCo+KGVsZW1lbnQoKSkgOiAwOworICAgIEhUTUxJbWFn
ZUVsZW1lbnRJbXBsKiBpID0gZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW1nKCkp
ID8gc3RhdGljX2Nhc3Q8SFRNTEltYWdlRWxlbWVudEltcGwqPihlbGVtZW50KCkpIDogMDsKICAg
ICByZXR1cm4gaSA/IGktPmdldERvY3VtZW50KCktPmdldEltYWdlTWFwKGktPmltYWdlTWFwKCkp
IDogMDsKIH0KIApAQCAtNTEyLDkgKzUxMCw5IEBAIGJvb2wgUmVuZGVySW1hZ2U6Om5vZGVBdFBv
aW50KE5vZGVJbmZvJiAKIAogdm9pZCBSZW5kZXJJbWFnZTo6dXBkYXRlQWx0VGV4dCgpCiB7Ci0g
ICAgaWYgKGVsZW1lbnQoKS0+aWQoKSA9PSBJRF9JTlBVVCkKKyAgICBpZiAoZWxlbWVudCgpLT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6aW5wdXQoKSkpCiAgICAgICAgIGFsdCA9IHN0YXRpY19jYXN0
PEhUTUxJbnB1dEVsZW1lbnRJbXBsKj4oZWxlbWVudCgpKS0+YWx0VGV4dCgpOwotICAgIGVsc2Ug
aWYgKGVsZW1lbnQoKS0+aWQoKSA9PSBJRF9JTUcpCisgICAgZWxzZSBpZiAoZWxlbWVudCgpLT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6aW1nKCkpKQogICAgICAgICBhbHQgPSBzdGF0aWNfY2FzdDxI
VE1MSW1hZ2VFbGVtZW50SW1wbCo+KGVsZW1lbnQoKSktPmFsdFRleHQoKTsKIH0KIApJbmRleDog
a2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9pbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9XZWJDb3JlL2todG1sL3JlbmRlcmluZy9yZW5kZXJfaW1hZ2UuaCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS4yNwpkaWZmIC11IC1wIC1yMS4yNyBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2lt
YWdlLmgKLS0tIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfaW1hZ2UuaAkyNSBGZWIgMjAwNSAwMDoy
NToxMiAtMDAwMAkxLjI3CisrKyBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2ltYWdlLmgJOCBKdWwg
MjAwNSAwMzowNDozMiAtMDAwMApAQCAtMjMsNyArMjMsNiBAQAogI2lmbmRlZiBSRU5ERVJfSU1B
R0VfSAogI2RlZmluZSBSRU5ERVJfSU1BR0VfSAogCi0jaW5jbHVkZSAiaHRtbC9kdGQuaCIKICNp
bmNsdWRlICJodG1sL2h0bWxfZWxlbWVudGltcGwuaCIKICNpbmNsdWRlICJyZW5kZXJpbmcvcmVu
ZGVyX3JlcGxhY2VkLmgiCiAjaW5jbHVkZSAiZG9tL2RvbV9zdHJpbmcuaCIKSW5kZXg6IGtodG1s
L3JlbmRlcmluZy9yZW5kZXJfbGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9XZWJDb3JlL2todG1sL3JlbmRlcmluZy9yZW5kZXJfbGF5ZXIuY3BwLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjk2CmRpZmYgLXUgLXAgLXIxLjk2IGtodG1sL3JlbmRlcmluZy9yZW5kZXJfbGF5
ZXIuY3BwCi0tLSBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2xheWVyLmNwcAkxMCBNYXkgMjAwNSAy
MjoyNTowNCAtMDAwMAkxLjk2CisrKyBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2xheWVyLmNwcAk4
IEp1bCAyMDA1IDAzOjA0OjM0IC0wMDAwCkBAIC00OSw3ICs0OSw2IEBACiAjaW5jbHVkZSAicmVu
ZGVyX2FyZW5hLmgiCiAjaW5jbHVkZSAieG1sL2RvbV9kb2NpbXBsLmgiCiAjaW5jbHVkZSAieG1s
L2RvbTJfZXZlbnRzaW1wbC5oIgotI2luY2x1ZGUgIm1pc2MvaHRtbHRhZ3MuaCIKICNpbmNsdWRl
ICJodG1sL2h0bWxfYmxvY2tpbXBsLmgiCiAKICNpbmNsdWRlIDxxc2Nyb2xsYmFyLmg+CkBAIC0x
NDY3LDcgKzE0NjYsNyBAQCBpbnQgTWFycXVlZTo6bWFycXVlZVNwZWVkKCkgY29uc3QKIHsKICAg
ICBpbnQgcmVzdWx0ID0gbV9sYXllci0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+bWFycXVlZVNwZWVk
KCk7CiAgICAgRE9NOjpOb2RlSW1wbCogZWx0ID0gbV9sYXllci0+cmVuZGVyZXIoKS0+ZWxlbWVu
dCgpOwotICAgIGlmIChlbHQgJiYgZWx0LT5pZCgpID09IElEX01BUlFVRUUpIHsKKyAgICBpZiAo
ZWx0ICYmIGVsdC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om1hcnF1ZWUoKSkpIHsKICAgICAgICAg
SFRNTE1hcnF1ZWVFbGVtZW50SW1wbCogbWFycXVlZUVsdCA9IHN0YXRpY19jYXN0PEhUTUxNYXJx
dWVlRWxlbWVudEltcGwqPihlbHQpOwogICAgICAgICByZXN1bHQgPSBrTWF4KHJlc3VsdCwgbWFy
cXVlZUVsdC0+bWluaW11bURlbGF5KCkpOwogICAgIH0KSW5kZXg6IGtodG1sL3JlbmRlcmluZy9y
ZW5kZXJfbGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0
bWwvcmVuZGVyaW5nL3JlbmRlcl9saW5lLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40Mwpk
aWZmIC11IC1wIC1yMS40MyBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2xpbmUuY3BwCi0tLSBraHRt
bC9yZW5kZXJpbmcvcmVuZGVyX2xpbmUuY3BwCTUgSnVsIDIwMDUgMjM6MjE6MTIgLTAwMDAJMS40
MworKysga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9saW5lLmNwcAk4IEp1bCAyMDA1IDAzOjA0OjM1
IC0wMDAwCkBAIC0zNyw3ICszNyw2IEBACiAjaW5jbHVkZSAicmVuZGVyX2xpbmUuaCIKIAogI2lu
Y2x1ZGUgImtodG1sdmlldy5oIgotI2luY2x1ZGUgImh0bWx0YWdzLmgiCiAKIHVzaW5nIG5hbWVz
cGFjZSBET007CiAKSW5kZXg6IGtodG1sL3JlbmRlcmluZy9yZW5kZXJfbGlzdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9s
aXN0LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS42MgpkaWZmIC11IC1wIC1yMS42MiBraHRt
bC9yZW5kZXJpbmcvcmVuZGVyX2xpc3QuY3BwCi0tLSBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2xp
c3QuY3BwCTUgSnVsIDIwMDUgMjM6MjE6MTIgLTAwMDAJMS42MgorKysga2h0bWwvcmVuZGVyaW5n
L3JlbmRlcl9saXN0LmNwcAk4IEp1bCAyMDA1IDAzOjA0OjM1IC0wMDAwCkBAIC0yNiw3ICsyNiw4
IEBACiAjaW5jbHVkZSAicmVuZGVyaW5nL3JlbmRlcl9jYW52YXMuaCIKIAogI2luY2x1ZGUgInht
bC9kb21fZG9jaW1wbC5oIgotI2luY2x1ZGUgIm1pc2MvaHRtbHRhZ3MuaCIKKworI2luY2x1ZGUg
Imh0bWxuYW1lcy5oIgogCiAjaW5jbHVkZSA8cXBhaW50ZXIuaD4KIApAQCAtMzcsNiArMzgsNyBA
QAogLy8jZGVmaW5lIEJPWF9ERUJVRwogCiB1c2luZyBET006OkRvY3VtZW50SW1wbDsKK3VzaW5n
IERPTTo6SFRNTE5hbWVzOwogdXNpbmcgbmFtZXNwYWNlIGtodG1sOwogCiBjb25zdCBpbnQgY01h
cmtlclBhZGRpbmcgPSA3OwpAQCAtMjEzLDcgKzIxNSw3IEBAIHN0YXRpYyBSZW5kZXJPYmplY3Qq
IGdldFBhcmVudE9mRmlyc3RMaW4KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICAg
ICAgaWYgKGN1cnJDaGlsZC0+c3R5bGUoKS0+aHRtbEhhY2tzKCkgJiYgY3VyckNoaWxkLT5lbGVt
ZW50KCkgJiYKLSAgICAgICAgICAgIChjdXJyQ2hpbGQtPmVsZW1lbnQoKS0+aWQoKSA9PSBJRF9V
TCB8fCBjdXJyQ2hpbGQtPmVsZW1lbnQoKS0+aWQoKSA9PSBJRF9PTCkpCisgICAgICAgICAgICAo
Y3VyckNoaWxkLT5lbGVtZW50KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp1bCgpKXx8IGN1cnJD
aGlsZC0+ZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b2woKSkpKQogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgUmVuZGVyT2JqZWN0KiBsaW5lQm94ID0g
Z2V0UGFyZW50T2ZGaXJzdExpbmVCb3goY3VyckNoaWxkLCBtYXJrZXIpOwpJbmRleDoga2h0bWwv
cmVuZGVyaW5nL3JlbmRlcl9vYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9XZWJDb3JlL2todG1sL3JlbmRlcmluZy9yZW5kZXJfb2JqZWN0LmNwcCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS4xOTcKZGlmZiAtdSAtcCAtcjEuMTk3IGtodG1sL3JlbmRlcmluZy9yZW5kZXJf
b2JqZWN0LmNwcAotLS0ga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9vYmplY3QuY3BwCTUgSnVsIDIw
MDUgMjM6MjE6MTIgLTAwMDAJMS4xOTcKKysrIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfb2JqZWN0
LmNwcAk4IEp1bCAyMDA1IDAzOjA0OjM3IC0wMDAwCkBAIC00Myw2ICs0Myw3IEBACiAjaW5jbHVk
ZSAicmVuZGVyX2lubGluZS5oIgogI2luY2x1ZGUgInJlbmRlcl9ibG9jay5oIgogI2luY2x1ZGUg
InJlbmRlcl9mbGV4Ym94LmgiCisjaW5jbHVkZSAiaHRtbG5hbWVzLmgiCiAKICNpZiBBUFBMRV9D
SEFOR0VTCiAvLyBGb3IgYWNjZXNzaWJpbGl0eQpAQCAtMTc1LDE3ICsxNzYsMTcgQEAgYm9vbCBS
ZW5kZXJPYmplY3Q6OmlzUm9vdCgpIGNvbnN0CiAKIGJvb2wgUmVuZGVyT2JqZWN0Ojppc0JvZHko
KSBjb25zdAogewotICAgIHJldHVybiBlbGVtZW50KCkgJiYgZWxlbWVudCgpLT5yZW5kZXJlcigp
ID09IHRoaXMgJiYgZWxlbWVudCgpLT5pZCgpID09IElEX0JPRFk7CisgICAgcmV0dXJuIGVsZW1l
bnQoKSAmJiBlbGVtZW50KCktPnJlbmRlcmVyKCkgPT0gdGhpcyAmJiBlbGVtZW50KCktPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjpib2R5KCkpOwogfQogCiBib29sIFJlbmRlck9iamVjdDo6aXNIUigp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIGVsZW1lbnQoKSAmJiBlbGVtZW50KCktPmlkKCkgPT0gSURf
SFI7CisgICAgcmV0dXJuIGVsZW1lbnQoKSAmJiBlbGVtZW50KCktPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjpocigpKTsKIH0KIAogYm9vbCBSZW5kZXJPYmplY3Q6OmlzSFRNTE1hcnF1ZWUoKSBjb25z
dAogewotICAgIHJldHVybiBlbGVtZW50KCkgJiYgZWxlbWVudCgpLT5yZW5kZXJlcigpID09IHRo
aXMgJiYgZWxlbWVudCgpLT5pZCgpID09IElEX01BUlFVRUU7CisgICAgcmV0dXJuIGVsZW1lbnQo
KSAmJiBlbGVtZW50KCktPnJlbmRlcmVyKCkgPT0gdGhpcyAmJiBlbGVtZW50KCktPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjptYXJxdWVlKCkpOwogfQogCiBib29sIFJlbmRlck9iamVjdDo6Y2FuSGF2
ZUNoaWxkcmVuKCkgY29uc3QKQEAgLTczNyw3ICs3MzgsNyBAQCBib29sIFJlbmRlck9iamVjdDo6
c2l6ZXNUb01heFdpZHRoKCkgY29uCiAgICAgLy8gYnV0IHRoZXkgYWxsb3cgdGV4dCB0byBzaXQg
b24gdGhlIHNhbWUgbGluZSBhcyB0aGUgbWFycXVlZS4KICAgICBpZiAoaXNGbG9hdGluZygpIHx8
IChpc0NvbXBhY3QoKSAmJiBpc0lubGluZSgpKSB8fCAKICAgICAgICAgKGlzSW5saW5lQmxvY2tP
cklubGluZVRhYmxlKCkgJiYgIWlzSFRNTE1hcnF1ZWUoKSkgfHwKLSAgICAgICAgKGVsZW1lbnQo
KSAmJiAoZWxlbWVudCgpLT5pZCgpID09IElEX0JVVFRPTiB8fCBlbGVtZW50KCktPmlkKCkgPT0g
SURfTEVHRU5EKSkpCisgICAgICAgIChlbGVtZW50KCkgJiYgKGVsZW1lbnQoKS0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OmJ1dHRvbigpKSB8fCBlbGVtZW50KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjpsZWdlbmQoKSkpKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgCiAgICAgLy8gQ2hpbGRy
ZW4gb2YgYSBob3Jpem9udGFsIG1hcnF1ZWUgZG8gbm90IGZpbGwgdGhlIGNvbnRhaW5lciBieSBk
ZWZhdWx0LgpAQCAtMTMyNiw3ICsxMzI3LDcgQEAgUVN0cmluZyBSZW5kZXJPYmplY3Q6OmluZm9y
bWF0aW9uKCkgY29ucwogICAgIGlmIChlbGVtZW50KCkgJiYgZWxlbWVudCgpLT5hY3RpdmUoKSkg
dHMgPDwgImFjdCAiOwogICAgIGlmIChlbGVtZW50KCkgJiYgZWxlbWVudCgpLT5pc0xpbmsoKSkg
dHMgPDwgImFuY2hvciAiOwogICAgIGlmIChlbGVtZW50KCkgJiYgZWxlbWVudCgpLT5mb2N1c2Vk
KCkpIHRzIDw8ICJmb2N1cyAiOwotICAgIGlmIChlbGVtZW50KCkpIHRzIDw8ICIgPCIgPDwgIGdl
dFRhZ05hbWUoZWxlbWVudCgpLT5pZCgpKS5zdHJpbmcoKSA8PCAiPiI7CisgICAgaWYgKGVsZW1l
bnQoKSkgdHMgPDwgIiA8IiA8PCAgZWxlbWVudCgpLT5sb2NhbE5hbWUoKS5zdHJpbmcoKSA8PCAi
PiI7CiAgICAgdHMgPDwgIiAoIiA8PCB4UG9zKCkgPDwgIiwiIDw8IHlQb3MoKSA8PCAiLCIgPDwg
d2lkdGgoKSA8PCAiLCIgPDwgaGVpZ2h0KCkgPDwgIikiCiAJPDwgKGlzVGFibGVDZWxsKCkgPwog
CSAgICAoIFFTdHJpbmc6OmZyb21MYXRpbjEoIiBbcj0iKSArCkBAIC0xNTU2LDcgKzE1NTcsNyBA
QCB2b2lkIFJlbmRlck9iamVjdDo6c2V0U3R5bGUoUmVuZGVyU3R5bGUgCiAgICAgICAgIC8vIFRo
ZSBiYWNrZ3JvdW5kIG9mIHRoZSByb290IGVsZW1lbnQgb3IgdGhlIGJvZHkgZWxlbWVudCBjb3Vs
ZCBwcm9wYWdhdGUgdXAgdG8KICAgICAgICAgLy8gdGhlIGNhbnZhcy4gIEp1c3QgZGlydHkgdGhl
IGVudGlyZSBjYW52YXMgd2hlbiBvdXIgc3R5bGUgY2hhbmdlcyBzdWJzdGFudGlhbGx5LgogICAg
ICAgICBpZiAoZCA+PSBSZW5kZXJTdHlsZTo6UmVwYWludCAmJiBlbGVtZW50KCkgJiYKLSAgICAg
ICAgICAgIChlbGVtZW50KCktPmlkKCkgPT0gSURfSFRNTCB8fCBlbGVtZW50KCktPmlkKCkgPT0g
SURfQk9EWSkpCisgICAgICAgICAgICAoZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
aHRtbCgpKSB8fCBlbGVtZW50KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpib2R5KCkpKSkKICAg
ICAgICAgICAgIGNhbnZhcygpLT5yZXBhaW50KCk7CiAgICAgICAgIGVsc2UgaWYgKG1fcGFyZW50
ICYmICFpc1RleHQoKSkgewogICAgICAgICAgICAgLy8gRG8gYSByZXBhaW50IHdpdGggdGhlIG9s
ZCBzdHlsZSBmaXJzdCwgZS5nLiwgZm9yIGV4YW1wbGUgaWYgd2UgZ28gZnJvbQpAQCAtMjE4OCw3
ICsyMTg5LDcgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OmdldFRleHREZWNvcmF0aW9uQ29sbwogICAg
ICAgICBpZiAoY3VyciAmJiBjdXJyLT5pc1JlbmRlckJsb2NrKCkgJiYgY3Vyci0+Y29udGludWF0
aW9uKCkpCiAgICAgICAgICAgICBjdXJyID0gY3Vyci0+Y29udGludWF0aW9uKCk7CiAgICAgfSB3
aGlsZSAoY3VyciAmJiBkZWNvcmF0aW9ucyAmJiAoIXF1aXJrc01vZGUgfHwgIWN1cnItPmVsZW1l
bnQoKSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjdXJyLT5lbGVt
ZW50KCktPmlkKCkgIT0gSURfQSAmJiBjdXJyLT5lbGVtZW50KCktPmlkKCkgIT0gSURfRk9OVCkp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIWN1cnItPmVsZW1lbnQo
KS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmEoKSkgJiYgIWN1cnItPmVsZW1lbnQoKS0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OmZvbnQoKSkpKSk7CiAKICAgICAvLyBJZiB3ZSBiYWlsZWQgb3V0LCB1
c2UgdGhlIGVsZW1lbnQgd2UgYmFpbGVkIG91dCBhdCAodHlwaWNhbGx5IGEgPGZvbnQ+IG9yIDxh
PiBlbGVtZW50KS4KICAgICBpZiAoZGVjb3JhdGlvbnMgJiYgY3VycikgewpAQCAtMjMyMiw3ICsy
MzIzLDcgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OnNldFBpeG1hcChjb25zdCBRUGl4bQogICAgIC8v
IHdvdWxkIGF2b2lkIHB1dHRpbmcgdGhpcyBmdW5jdGlvbiBhbmQgdGhlIENhY2hlZE9iamVjdENs
aWVudCBiYXNlIGNsYXNzIGludG8gUmVuZGVyT2JqZWN0LgogCiAgICAgaWYgKGltYWdlICYmIGlt
YWdlLT5waXhtYXBfc2l6ZSgpID09IGltYWdlLT52YWxpZF9yZWN0KCkuc2l6ZSgpICYmIHBhcmVu
dCgpKSB7Ci0gICAgICAgIGlmIChjYW52YXMoKSAmJiBlbGVtZW50KCkgJiYgKGVsZW1lbnQoKS0+
aWQoKSA9PSBJRF9IVE1MIHx8IGVsZW1lbnQoKS0+aWQoKSA9PSBJRF9CT0RZKSkKKyAgICAgICAg
aWYgKGNhbnZhcygpICYmIGVsZW1lbnQoKSAmJiAoZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6aHRtbCgpKSB8fCBlbGVtZW50KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpib2R5KCkp
KSkKICAgICAgICAgICAgIGNhbnZhcygpLT5yZXBhaW50KCk7ICAgIC8vIHJlcGFpbnQgdGhlIGVu
dGlyZSBjYW52YXMgc2luY2UgdGhlIGJhY2tncm91bmQgZ2V0cyBwcm9wYWdhdGVkIHVwCiAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgIHJlcGFpbnQoKTsgICAgICAgICAgICAgIC8vIHJlcGFpbnQg
b2JqZWN0LCB3aGljaCBpcyBhIGJveCBvciBhIGNvbnRhaW5lciB3aXRoIGJveGVzIGluc2lkZSBp
dApJbmRleDoga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9zdHlsZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3JlbmRlcmluZy9yZW5kZXJfc3R5bGUuaCx2CnJl
dHJpZXZpbmcgcmV2aXNpb24gMS44MgpkaWZmIC11IC1wIC1yMS44MiBraHRtbC9yZW5kZXJpbmcv
cmVuZGVyX3N0eWxlLmgKLS0tIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfc3R5bGUuaAkxMiBNYXkg
MjAwNSAxNzoxMToyMiAtMDAwMAkxLjgyCisrKyBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX3N0eWxl
LmgJOCBKdWwgMjAwNSAwMzowNDozOCAtMDAwMApAQCAtMjk5LDggKzI5OSwxMCBAQCBjbGFzcyBT
dHlsZVN1cnJvdW5kRGF0YSA6IHB1YmxpYyBTaGFyZWQ8CiB7CiBwdWJsaWM6CiAgICAgU3R5bGVT
dXJyb3VuZERhdGEoKTsKKyAgICBTdHlsZVN1cnJvdW5kRGF0YShjb25zdCBTdHlsZVN1cnJvdW5k
RGF0YSYgbyk7CisgICAgCisgICAgTUFJTl9USFJFQURfQUxMT0NBVEVEOwogCi0gICAgU3R5bGVT
dXJyb3VuZERhdGEoY29uc3QgU3R5bGVTdXJyb3VuZERhdGEmIG8gKTsKICAgICBib29sIG9wZXJh
dG9yPT0oY29uc3QgU3R5bGVTdXJyb3VuZERhdGEmIG8pIGNvbnN0OwogICAgIGJvb2wgb3BlcmF0
b3IhPShjb25zdCBTdHlsZVN1cnJvdW5kRGF0YSYgbykgY29uc3QgewogICAgICAgICByZXR1cm4g
ISgqdGhpcyA9PSBvKTsKQEAgLTMyMCw5ICszMjIsOSBAQCBjbGFzcyBTdHlsZUJveERhdGEgOiBw
dWJsaWMgU2hhcmVkPFN0eWxlCiB7CiBwdWJsaWM6CiAgICAgU3R5bGVCb3hEYXRhKCk7CisgICAg
U3R5bGVCb3hEYXRhKGNvbnN0IFN0eWxlQm94RGF0YSYgbyk7CiAKLSAgICBTdHlsZUJveERhdGEo
Y29uc3QgU3R5bGVCb3hEYXRhJiBvICk7Ci0KKyAgICBNQUlOX1RIUkVBRF9BTExPQ0FURUQ7CiAK
ICAgICAvLyBjb3B5IGFuZCBhc3NpZ25tZW50CiAvLyAgICBTdHlsZUJveERhdGEoY29uc3QgU3R5
bGVCb3hEYXRhICZvdGhlcik7CkBAIC0zOTksMTEgKzQwMSwxMSBAQCBjbGFzcyBTdHlsZVZpc3Vh
bERhdGEgOiBwdWJsaWMgU2hhcmVkPFN0CiB7CiBwdWJsaWM6CiAgICAgU3R5bGVWaXN1YWxEYXRh
KCk7Ci0KICAgICB+U3R5bGVWaXN1YWxEYXRhKCk7Ci0KICAgICBTdHlsZVZpc3VhbERhdGEoY29u
c3QgU3R5bGVWaXN1YWxEYXRhJiBvICk7CiAKKyAgICBNQUlOX1RIUkVBRF9BTExPQ0FURUQ7CisK
ICAgICBib29sIG9wZXJhdG9yPT0oIGNvbnN0IFN0eWxlVmlzdWFsRGF0YSAmbyApIGNvbnN0IHsK
IAlyZXR1cm4gKCBjbGlwID09IG8uY2xpcCAmJgogICAgICAgICAgICAgICAgICBoYXNDbGlwID09
IG8uaGFzQ2xpcCAmJgpAQCAtNTIxLDYgKzUyMyw4IEBAIHB1YmxpYzoKICAgICB+U3R5bGVCYWNr
Z3JvdW5kRGF0YSgpIHt9CiAgICAgU3R5bGVCYWNrZ3JvdW5kRGF0YShjb25zdCBTdHlsZUJhY2tn
cm91bmREYXRhJiBvICk7CiAKKyAgICBNQUlOX1RIUkVBRF9BTExPQ0FURUQ7CisKICAgICBib29s
IG9wZXJhdG9yPT0oY29uc3QgU3R5bGVCYWNrZ3JvdW5kRGF0YSYgbykgY29uc3Q7CiAgICAgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IFN0eWxlQmFja2dyb3VuZERhdGEgJm8pIGNvbnN0IHsKIAlyZXR1
cm4gISgqdGhpcyA9PSBvKTsKQEAgLTU0Myw2ICs1NDcsOCBAQCBwdWJsaWM6CiAgICAgU3R5bGVN
YXJxdWVlRGF0YSgpOwogICAgIFN0eWxlTWFycXVlZURhdGEoY29uc3QgU3R5bGVNYXJxdWVlRGF0
YSYgbyk7CiAgICAgCisgICAgTUFJTl9USFJFQURfQUxMT0NBVEVEOworCiAgICAgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IFN0eWxlTWFycXVlZURhdGEmIG8pIGNvbnN0OwogICAgIGJvb2wgb3BlcmF0
b3IhPShjb25zdCBTdHlsZU1hcnF1ZWVEYXRhJiBvKSBjb25zdCB7CiAgICAgICAgIHJldHVybiAh
KCp0aGlzID09IG8pOwpAQCAtNTcxLDYgKzU3Nyw4IEBAIHB1YmxpYzoKICAgICBTdHlsZUZsZXhp
YmxlQm94RGF0YSgpOwogICAgIFN0eWxlRmxleGlibGVCb3hEYXRhKGNvbnN0IFN0eWxlRmxleGli
bGVCb3hEYXRhJiBvKTsKIAorICAgIE1BSU5fVEhSRUFEX0FMTE9DQVRFRDsKKwogICAgIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBTdHlsZUZsZXhpYmxlQm94RGF0YSYgbykgY29uc3Q7CiAgICAgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IFN0eWxlRmxleGlibGVCb3hEYXRhICZvKSBjb25zdCB7CiAgICAg
ICAgIHJldHVybiAhKCp0aGlzID09IG8pOwpAQCAtNjc3LDYgKzY4NSw4IEBAIHB1YmxpYzoKICAg
ICB+U3R5bGVDU1MzTm9uSW5oZXJpdGVkRGF0YSgpOwogICAgIFN0eWxlQ1NTM05vbkluaGVyaXRl
ZERhdGEoY29uc3QgU3R5bGVDU1MzTm9uSW5oZXJpdGVkRGF0YSYgbyk7CiAKKyAgICBNQUlOX1RI
UkVBRF9BTExPQ0FURUQ7CisKICNpZm5kZWYgS0hUTUxfTk9fWEJMCiAgICAgYm9vbCBiaW5kaW5n
c0VxdWl2YWxlbnQoY29uc3QgU3R5bGVDU1MzTm9uSW5oZXJpdGVkRGF0YSYgbykgY29uc3Q7CiAj
ZW5kaWYKQEAgLTcxNSw2ICs3MjUsOCBAQCBwdWJsaWM6CiAgICAgflN0eWxlQ1NTM0luaGVyaXRl
ZERhdGEoKTsKICAgICBTdHlsZUNTUzNJbmhlcml0ZWREYXRhKGNvbnN0IFN0eWxlQ1NTM0luaGVy
aXRlZERhdGEmIG8pOwogCisgICAgTUFJTl9USFJFQURfQUxMT0NBVEVEOworCiAgICAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IFN0eWxlQ1NTM0luaGVyaXRlZERhdGEmIG8pIGNvbnN0OwogICAgIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBTdHlsZUNTUzNJbmhlcml0ZWREYXRhICZvKSBjb25zdCB7CiAg
ICAgICAgIHJldHVybiAhKCp0aGlzID09IG8pOwpAQCAtNzY5LDYgKzc4MSw4IEBAIHB1YmxpYzoK
ICAgICB+U3R5bGVJbmhlcml0ZWREYXRhKCk7CiAgICAgU3R5bGVJbmhlcml0ZWREYXRhKGNvbnN0
IFN0eWxlSW5oZXJpdGVkRGF0YSYgbyApOwogCisgICAgTUFJTl9USFJFQURfQUxMT0NBVEVEOwor
ICAgIAogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTdHlsZUluaGVyaXRlZERhdGEmIG8pIGNv
bnN0OwogICAgIGJvb2wgb3BlcmF0b3IgIT0gKCBjb25zdCBTdHlsZUluaGVyaXRlZERhdGEgJm8g
KSBjb25zdCB7CiAJcmV0dXJuICEoKnRoaXMgPT0gbyk7CkluZGV4OiBraHRtbC9yZW5kZXJpbmcv
cmVuZGVyX3RhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9r
aHRtbC9yZW5kZXJpbmcvcmVuZGVyX3RhYmxlLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4x
MjYKZGlmZiAtdSAtcCAtcjEuMTI2IGtodG1sL3JlbmRlcmluZy9yZW5kZXJfdGFibGUuY3BwCi0t
LSBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX3RhYmxlLmNwcAkxMSBNYXkgMjAwNSAwMjoxMDoxMCAt
MDAwMAkxLjEyNgorKysga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl90YWJsZS5jcHAJOCBKdWwgMjAw
NSAwMzowNDo0MCAtMDAwMApAQCAtMzEsOCArMzEsOCBAQAogI2luY2x1ZGUgInJlbmRlcmluZy9y
ZW5kZXJfdGFibGUuaCIKICNpbmNsdWRlICJyZW5kZXJpbmcvdGFibGVfbGF5b3V0LmgiCiAjaW5j
bHVkZSAiaHRtbC9odG1sX3RhYmxlaW1wbC5oIgotI2luY2x1ZGUgIm1pc2MvaHRtbHRhZ3MuaCIK
ICNpbmNsdWRlICJtaXNjL2h0bWxhdHRycy5oIgorI2luY2x1ZGUgImh0bWxuYW1lcy5oIgogI2lu
Y2x1ZGUgInhtbC9kb21fZG9jaW1wbC5oIgogCiAjaW5jbHVkZSA8a2dsb2JhbC5oPgpAQCAtMTEy
LDcgKzExMiw3IEBAIHZvaWQgUmVuZGVyVGFibGU6OmFkZENoaWxkKFJlbmRlck9iamVjdCAKICNl
bmRpZgogICAgIFJlbmRlck9iamVjdCAqbyA9IGNoaWxkOwogCi0gICAgaWYgKGNoaWxkLT5lbGVt
ZW50KCkgJiYgY2hpbGQtPmVsZW1lbnQoKS0+aWQoKSA9PSBJRF9GT1JNKSB7CisgICAgaWYgKGNo
aWxkLT5lbGVtZW50KCkgJiYgY2hpbGQtPmVsZW1lbnQoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
OmZvcm0oKSkpIHsKICAgICAgICAgUmVuZGVyQ29udGFpbmVyOjphZGRDaGlsZChjaGlsZCxiZWZv
cmVDaGlsZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0yNjIsNyArMjYyLDcgQEAgdm9p
ZCBSZW5kZXJUYWJsZTo6bGF5b3V0KCkKIAogICAgIFJlbmRlck9iamVjdCAqY2hpbGQgPSBmaXJz
dENoaWxkKCk7CiAgICAgd2hpbGUoIGNoaWxkICkgewotCWlmICggY2hpbGQtPm5lZWRzTGF5b3V0
KCkgJiYgIShjaGlsZC0+ZWxlbWVudCgpICYmIGNoaWxkLT5lbGVtZW50KCktPmlkKCkgPT0gSURf
Rk9STSkpCisJaWYgKCBjaGlsZC0+bmVlZHNMYXlvdXQoKSAmJiAhKGNoaWxkLT5lbGVtZW50KCkg
JiYgY2hpbGQtPmVsZW1lbnQoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZvcm0oKSkpKQogCSAg
ICBjaGlsZC0+bGF5b3V0KCk7CiAJaWYgKCBjaGlsZC0+aXNUYWJsZVNlY3Rpb24oKSApIHsKIAkg
ICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGFibGVTZWN0aW9uICo+KGNoaWxkKS0+Y2FsY1Jvd0hlaWdo
dCgpOwpAQCAtODQ5LDcgKzg0OSw3IEBAIHZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjphZGRDaGls
ZChSZW5kZXIKICNlbmRpZgogICAgIFJlbmRlck9iamVjdCAqcm93ID0gY2hpbGQ7CiAKLSAgICBp
ZiAoY2hpbGQtPmVsZW1lbnQoKSAmJiBjaGlsZC0+ZWxlbWVudCgpLT5pZCgpID09IElEX0ZPUk0p
IHsKKyAgICBpZiAoY2hpbGQtPmVsZW1lbnQoKSAmJiBjaGlsZC0+ZWxlbWVudCgpLT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6Zm9ybSgpKSkgewogICAgICAgICBSZW5kZXJDb250YWluZXI6OmFkZENo
aWxkKGNoaWxkLGJlZm9yZUNoaWxkKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE0OTUs
NyArMTQ5NSw3IEBAIHZvaWQgUmVuZGVyVGFibGVSb3c6OmFkZENoaWxkKFJlbmRlck9iamUKICAg
ICBrZERlYnVnKCA2MDQwICkgPDwgcmVuZGVyTmFtZSgpIDw8ICIoVGFibGVSb3cpOjphZGRDaGls
ZCggIiA8PCBjaGlsZC0+cmVuZGVyTmFtZSgpIDw8ICIgKSIgIDw8ICIsICIgPDwKICAgICAgICAg
ICAgICAgICAgICAgICAgKGJlZm9yZUNoaWxkID8gYmVmb3JlQ2hpbGQtPnJlbmRlck5hbWUoKSA6
ICIwIikgPDwgIiApIiA8PCBlbmRsOwogI2VuZGlmCi0gICAgaWYgKGNoaWxkLT5lbGVtZW50KCkg
JiYgY2hpbGQtPmVsZW1lbnQoKS0+aWQoKSA9PSBJRF9GT1JNKSB7CisgICAgaWYgKGNoaWxkLT5l
bGVtZW50KCkgJiYgY2hpbGQtPmVsZW1lbnQoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZvcm0o
KSkpIHsKICAgICAgICAgUmVuZGVyQ29udGFpbmVyOjphZGRDaGlsZChjaGlsZCxiZWZvcmVDaGls
ZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xNjA2LDcgKzE2MDYsNyBAQCB2b2lkIFJl
bmRlclRhYmxlQ2VsbDo6dXBkYXRlRnJvbUVsZW1lbnQoCiAgICAgaW50IG9sZFJTcGFuID0gclNw
YW47CiAgICAgaW50IG9sZENTcGFuID0gY1NwYW47CiAgICAgRE9NOjpOb2RlSW1wbCogbm9kZSA9
IGVsZW1lbnQoKTsKLSAgICBpZiAobm9kZSAmJiAobm9kZS0+aWQoKSA9PSBJRF9URCB8fCBub2Rl
LT5pZCgpID09IElEX1RIKSkgeworICAgIGlmIChub2RlICYmIChub2RlLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6dGQoKSkgfHwgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRoKCkpKSkgewog
ICAgICAgICBET006OkhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbCAqdGMgPSBzdGF0aWNfY2FzdDxE
T006OkhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbCAqPihub2RlKTsKICAgICAgICAgY1NwYW4gPSB0
Yy0+Y29sU3BhbigpOwogICAgICAgICByU3BhbiA9IHRjLT5yb3dTcGFuKCk7CkBAIC0yMjkwLDcg
KzIyOTAsNyBAQCB2b2lkIFJlbmRlclRhYmxlQ29sOjp1cGRhdGVGcm9tRWxlbWVudCgpCiB7CiAg
ICAgaW50IG9sZFNwYW4gPSBfc3BhbjsKICAgICBET006Ok5vZGVJbXBsICpub2RlID0gZWxlbWVu
dCgpOwotICAgIGlmIChub2RlICYmIChub2RlLT5pZCgpID09IElEX0NPTCB8fCBub2RlLT5pZCgp
ID09IElEX0NPTEdST1VQKSkgeworICAgIGlmIChub2RlICYmIChub2RlLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6Y29sKCkpIHx8IG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpjb2xncm91cCgp
KSkpIHsKICAgICAgICAgRE9NOjpIVE1MVGFibGVDb2xFbGVtZW50SW1wbCAqdGMgPSBzdGF0aWNf
Y2FzdDxET006OkhUTUxUYWJsZUNvbEVsZW1lbnRJbXBsICo+KG5vZGUpOwogICAgICAgICBfc3Bh
biA9IHRjLT5zcGFuKCk7CiAgICAgfSAKSW5kZXg6IGtodG1sL3htbC9kb20yX3JhbmdlaW1wbC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwveG1sL2RvbTJf
cmFuZ2VpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40MApkaWZmIC11IC1wIC1yMS40
MCBraHRtbC94bWwvZG9tMl9yYW5nZWltcGwuY3BwCi0tLSBraHRtbC94bWwvZG9tMl9yYW5nZWlt
cGwuY3BwCTEzIE1heSAyMDA1IDE2OjQ4OjUxIC0wMDAwCTEuNDAKKysrIGtodG1sL3htbC9kb20y
X3JhbmdlaW1wbC5jcHAJOCBKdWwgMjAwNSAwMzowNDo0MSAtMDAwMApAQCAtMjksNyArMjksNiBA
QAogI2luY2x1ZGUgImRvbV90ZXh0aW1wbC5oIgogI2luY2x1ZGUgImRvbV94bWxpbXBsLmgiCiAj
aW5jbHVkZSAiaHRtbC9odG1sX2VsZW1lbnRpbXBsLmgiCi0jaW5jbHVkZSAibWlzYy9odG1sdGFn
cy5oIgogI2luY2x1ZGUgImVkaXRpbmcvbWFya3VwLmgiCiAjaW5jbHVkZSAiZWRpdGluZy92aXNp
YmxlX3Bvc2l0aW9uLmgiCiAjaW5jbHVkZSAiZWRpdGluZy92aXNpYmxlX3VuaXRzLmgiCkluZGV4
OiBraHRtbC94bWwvZG9tMl90cmF2ZXJzYWxpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC94bWwvZG9tMl90cmF2ZXJzYWxpbXBsLmNwcCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS4xMApkaWZmIC11IC1wIC1yMS4xMCBraHRtbC94bWwvZG9tMl90cmF2
ZXJzYWxpbXBsLmNwcAotLS0ga2h0bWwveG1sL2RvbTJfdHJhdmVyc2FsaW1wbC5jcHAJMTAgTWF5
IDIwMDUgMjE6NTk6MTQgLTAwMDAJMS4xMAorKysga2h0bWwveG1sL2RvbTJfdHJhdmVyc2FsaW1w
bC5jcHAJOCBKdWwgMjAwNSAwMzowNDo0MSAtMDAwMApAQCAtMjYsOCArMjYsNiBAQAogI2luY2x1
ZGUgImRvbS9kb21fZXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAieG1sL2RvbV9kb2NpbXBsLmgiCiAK
LSNpbmNsdWRlICJodG1sdGFncy5oIgotCiBuYW1lc3BhY2UgRE9NIHsKIAogTm9kZUZpbHRlcklt
cGw6Ok5vZGVGaWx0ZXJJbXBsKE5vZGVGaWx0ZXJDb25kaXRpb24gKmNvbmRpdGlvbikKSW5kZXg6
IGtodG1sL3htbC9kb21fYXRvbWljc3RyaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvV2ViQ29yZS9raHRtbC94bWwvZG9tX2F0b21pY3N0cmluZy5jcHAsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuOApkaWZmIC11IC1wIC1yMS44IGtodG1sL3htbC9kb21fYXRvbWljc3RyaW5n
LmNwcAotLS0ga2h0bWwveG1sL2RvbV9hdG9taWNzdHJpbmcuY3BwCTYgSnVsIDIwMDUgMDE6Mjg6
NDQgLTAwMDAJMS44CisrKyBraHRtbC94bWwvZG9tX2F0b21pY3N0cmluZy5jcHAJOCBKdWwgMjAw
NSAwMzowNDo0MSAtMDAwMApAQCAtMjYsMTMgKzI2LDcgQEAKIC8vIHBvcnRhYmxlLCBhbmQgaXQg
d291bGQgYmUgZ29vZCB0byBmaWd1cmUgb3V0IGEgMTAwJSBjbGVhbiB3YXkgdGhhdCBzdGlsbCBh
dm9pZHMgY29kZSB0aGF0CiAvLyBydW5zIGF0IGluaXQgdGltZS4KIAotI2lmIEFQUExFX0NIQU5H
RVMKLSNkZWZpbmUgQVZPSURfU1RBVElDX0NPTlNUUlVDVE9SUyAxCi0jZW5kaWYKLQotI2lmIEFW
T0lEX1NUQVRJQ19DT05TVFJVQ1RPUlMKICNkZWZpbmUgS0hUTUxfQVRPTUlDU1RSSU5HX0hJREVf
R0xPQkFMUyAxCi0jZW5kaWYKIAogI2luY2x1ZGUgImRvbV9hdG9taWNzdHJpbmcuaCIKICNpbmNs
dWRlICJ4bWwvZG9tX3N0cmluZ2ltcGwuaCIKQEAgLTE1Miw0MiArMTQ2LDMwIEBAIHZvaWQgQXRv
bWljU3RyaW5nOjpyZW1vdmUoRE9NU3RyaW5nSW1wbCAKICAgICBzdHJpbmdUYWJsZS5yZW1vdmUo
cik7CiB9CiAKLS8vIEdsb2JhbCBjb25zdGFudHMgZm9yIHByb3BlcnR5IG5hbWUgc3RyaW5ncy4K
LQotI2lmICFBVk9JRF9TVEFUSUNfQ09OU1RSVUNUT1JTCi0gICAgLy8gRGVmaW5lIGFuIEF0b21p
Y1N0cmluZyBpbiB0aGUgbm9ybWFsIHdheS4KLSAgICAjZGVmaW5lIERFRklORV9HTE9CQUwobmFt
ZSwgc3RyaW5nKSBleHRlcm4gY29uc3QgQXRvbWljU3RyaW5nIG5hbWUgIyMgQXRvbShzdHJpbmcp
OwotCi0gICAgZXh0ZXJuIGNvbnN0IEF0b21pY1N0cmluZyBudWxsQXRvbTsKLSAgICBleHRlcm4g
Y29uc3QgQXRvbWljU3RyaW5nIGVtcHR5QXRvbTsKLSNlbHNlCi0gICAgLy8gRGVmaW5lIGFuIEF0
b21pY1N0cmluZy1zaXplZCBhcnJheSBvZiBwb2ludGVycyB0byBhdm9pZCBzdGF0aWMgaW5pdGlh
bGl6YXRpb24uCi0gICAgLy8gVXNlIGFuIGFycmF5IG9mIHBvaW50ZXJzIGluc3RlYWQgb2YgYW4g
YXJyYXkgb2YgY2hhciBpbiBjYXNlIHRoZXJlIGlzIHNvbWUgYWxpZ25tZW50IGlzc3VlLgotICAg
ICNkZWZpbmUgREVGSU5FX0dMT0JBTChuYW1lLCBzdHJpbmcpIFwKLSAgICAgICAgdm9pZCAqIG5h
bWUgIyMgQXRvbVsoc2l6ZW9mKEF0b21pY1N0cmluZykgKyBzaXplb2Yodm9pZCAqKSAtIDEpIC8g
c2l6ZW9mKHZvaWQgKildOwotCi0gICAgREVGSU5FX0dMT0JBTChudWxsLCBpZ25vcmVkKQotICAg
IERFRklORV9HTE9CQUwoZW1wdHksIGlnbm9yZWQpCi0jZW5kaWYKLQotI2RlZmluZSBDQUxMX0RF
RklORV9HTE9CQUwobmFtZSkgREVGSU5FX0dMT0JBTChuYW1lLCAjbmFtZSkKLUtIVE1MX0FUT01J
Q1NUUklOR19FQUNIX0dMT0JBTChDQUxMX0RFRklORV9HTE9CQUwpCisvLyBEZWZpbmUgYW4gQXRv
bWljU3RyaW5nLXNpemVkIGFycmF5IG9mIHBvaW50ZXJzIHRvIGF2b2lkIHN0YXRpYyBpbml0aWFs
aXphdGlvbi4KKy8vIFVzZSBhbiBhcnJheSBvZiBwb2ludGVycyBpbnN0ZWFkIG9mIGFuIGFycmF5
IG9mIGNoYXIgaW4gY2FzZSB0aGVyZSBpcyBzb21lIGFsaWdubWVudCBpc3N1ZS4KKyNkZWZpbmUg
REVGSU5FX0dMT0JBTChuYW1lKSBcCisgICAgdm9pZCogbmFtZSAjIyBBdG9tWyhzaXplb2YoQXRv
bWljU3RyaW5nKSArIHNpemVvZih2b2lkKikgLSAxKSAvIHNpemVvZih2b2lkKildOworCitERUZJ
TkVfR0xPQkFMKG51bGwpCitERUZJTkVfR0xPQkFMKGVtcHR5KQorREVGSU5FX0dMT0JBTCh0ZXh0
KQorREVGSU5FX0dMT0JBTChjb21tZW50KQorREVGSU5FX0dMT0JBTChzdGFyKQogCiB2b2lkIEF0
b21pY1N0cmluZzo6aW5pdCgpCiB7Ci0jaWYgQVZPSURfU1RBVElDX0NPTlNUUlVDVE9SUwogICAg
IHN0YXRpYyBib29sIGluaXRpYWxpemVkOwogICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKICAgICAg
ICAgLy8gVXNlIHBsYWNlbWVudCBuZXcgdG8gaW5pdGlhbGl6ZSB0aGUgZ2xvYmFscy4KICAgICAg
ICAgbmV3ICgmbnVsbEF0b20pIEF0b21pY1N0cmluZzsKICAgICAgICAgbmV3ICgmZW1wdHlBdG9t
KSBBdG9taWNTdHJpbmcoIiIpOwotICAgICAgICAKLSAgICAgICAgI2RlZmluZSBQTEFDRU1FTlRf
TkVXX0dMT0JBTChuYW1lLCBzdHJpbmcpIG5ldyAoJm5hbWUgIyMgUHJvcGVydHlOYW1lKSBBdG9t
aWNTdHJpbmcoc3RyaW5nKTsKLSAgICAgICAgI2RlZmluZSBDQUxMX1BMQUNFTUVOVF9ORVdfR0xP
QkFMKG5hbWUpIFBMQUNFTUVOVF9ORVdfR0xPQkFMKG5hbWUsICNuYW1lKQotICAgICAgICBLSFRN
TF9BVE9NSUNTVFJJTkdfRUFDSF9HTE9CQUwoQ0FMTF9QTEFDRU1FTlRfTkVXX0dMT0JBTCkKKyAg
ICAgICAgbmV3ICgmdGV4dEF0b20pIEF0b21pY1N0cmluZygiI3RleHQiKTsKKyAgICAgICAgbmV3
ICgmY29tbWVudEF0b20pIEF0b21pY1N0cmluZygiI2NvbW1lbnQiKTsKKyAgICAgICAgbmV3ICgm
c3RhckF0b20pIEF0b21pY1N0cmluZygiKiIpOworCiAgICAgICAgIGluaXRpYWxpemVkID0gdHJ1
ZTsKICAgICB9Ci0jZW5kaWYKIH0KIAogYm9vbCBvcGVyYXRvcj09KGNvbnN0IEF0b21pY1N0cmlu
ZyAmYSwgY29uc3QgRE9NU3RyaW5nICZiKQpJbmRleDoga2h0bWwveG1sL2RvbV9hdG9taWNzdHJp
bmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC94bWwvZG9t
X2F0b21pY3N0cmluZy5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjQKZGlmZiAtdSAtcCAtcjEu
NCBraHRtbC94bWwvZG9tX2F0b21pY3N0cmluZy5oCi0tLSBraHRtbC94bWwvZG9tX2F0b21pY3N0
cmluZy5oCTI4IEp1biAyMDA1IDAxOjU0OjM0IC0wMDAwCTEuNAorKysga2h0bWwveG1sL2RvbV9h
dG9taWNzdHJpbmcuaAk4IEp1bCAyMDA1IDAzOjA0OjQxIC0wMDAwCkBAIC01NSw3ICs1NSw3IEBA
IHB1YmxpYzoKICAgICBib29sIHBlcmNlbnRhZ2UoaW50ICZfcGVyY2VudGFnZSkgY29uc3QgeyBy
ZXR1cm4gbV9zdHJpbmcucGVyY2VudGFnZShfcGVyY2VudGFnZSk7IH0KICAgICBraHRtbDo6TGVu
Z3RoKiB0b0xlbmd0aEFycmF5KGludCYgbGVuKSBjb25zdCB7IHJldHVybiBtX3N0cmluZy50b0xl
bmd0aEFycmF5KGxlbik7IH0KICAgICBraHRtbDo6TGVuZ3RoKiB0b0Nvb3Jkc0FycmF5KGludCYg
bGVuKSBjb25zdCB7IHJldHVybiBtX3N0cmluZy50b0Nvb3Jkc0FycmF5KGxlbik7IH0KLSAgICAK
KwogICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcuaXNOdWxsKCk7IH0K
ICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX3N0cmluZy5pc0VtcHR5KCk7IH0K
IApAQCAtMTA5LDE2ICsxMDksMTQgQEAgaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBdG9t
aWNTdHJpbgogCiAvLyBMaXN0IG9mIHByb3BlcnR5IG5hbWVzLCBwYXNzZWQgdG8gYSBtYWNybyBz
byB3ZSBjYW4gZG8gc2V0IHRoZW0gdXAgdmFyaW91cwogLy8gd2F5cyB3aXRob3V0IHJlcGVhdGlu
ZyB0aGUgbGlzdC4KLSNkZWZpbmUgS0hUTUxfQVRPTUlDU1RSSU5HX0VBQ0hfR0xPQkFMKG1hY3Jv
KQogCi0gICAgLy8gRGVmaW5lIGV4dGVybmFsIGdsb2JhbCB2YXJpYWJsZXMgZm9yIGFsbCBwcm9w
ZXJ0eSBuYW1lcyBhYm92ZSAoYW5kIG9uZSBtb3JlKS4KKy8vIERlZmluZSBleHRlcm5hbCBnbG9i
YWwgdmFyaWFibGVzIGZvciB0aGUgY29tbW9ubHkgdXNlZCBhdG9taWMgc3RyaW5ncy4KICNpZiAh
S0hUTUxfQVRPTUlDU1RSSU5HX0hJREVfR0xPQkFMUwogICAgIGV4dGVybiBjb25zdCBBdG9taWNT
dHJpbmcgbnVsbEF0b207CiAgICAgZXh0ZXJuIGNvbnN0IEF0b21pY1N0cmluZyBlbXB0eUF0b207
Ci0jZGVmaW5lIEtIVE1MX0FUT01JQ1NUUklOR19ERUNMQVJFX0dMT0JBTChuYW1lKSBleHRlcm4g
Y29uc3QgQXRvbWljU3RyaW5nIG5hbWUgIyMgUHJvcGVydHlOYW1lOwotICAgIEtIVE1MX0FUT01J
Q1NUUklOR19FQUNIX0dMT0JBTChLSFRNTF9BVE9NSUNTVFJJTkdfREVDTEFSRV9HTE9CQUwpCi0g
ICAgS0hUTUxfQVRPTUlDU1RSSU5HX0RFQ0xBUkVfR0xPQkFMKHNwZWNpYWxQcm90b3R5cGUpCi0j
dW5kZWYgS0hUTUxfQVRPTUlDU1RSSU5HX0RFQ0xBUkVfR0xPQkFMCisgICAgZXh0ZXJuIGNvbnN0
IEF0b21pY1N0cmluZyB0ZXh0QXRvbTsKKyAgICBleHRlcm4gY29uc3QgQXRvbWljU3RyaW5nIGNv
bW1lbnRBdG9tOworICAgIGV4dGVybiBjb25zdCBBdG9taWNTdHJpbmcgc3RhckF0b207CiAjZW5k
aWYKICAgICAgICAgCiBib29sIG9wZXJhdG9yPT0oY29uc3QgQXRvbWljU3RyaW5nICZhLCBjb25z
dCBET01TdHJpbmcgJmIpOwpJbmRleDoga2h0bWwveG1sL2RvbV9kb2NpbXBsLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC94bWwvZG9tX2RvY2ltcGwuY3Bw
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIzMQpkaWZmIC11IC1wIC1yMS4yMzEga2h0bWwveG1s
L2RvbV9kb2NpbXBsLmNwcAotLS0ga2h0bWwveG1sL2RvbV9kb2NpbXBsLmNwcAkzIEp1bCAyMDA1
IDEwOjA1OjA4IC0wMDAwCTEuMjMxCisrKyBraHRtbC94bWwvZG9tX2RvY2ltcGwuY3BwCTggSnVs
IDIwMDUgMDM6MDQ6NDQgLTAwMDAKQEAgLTM0LDggKzM0LDYgQEAKICNpbmNsdWRlICJ4bWwvZG9t
Ml92aWV3c2ltcGwuaCIKICNpbmNsdWRlICJ4bWwveG1sX3Rva2VuaXplci5oIgogCi0jaW5jbHVk
ZSAieG1sX25hbWVzcGFjZV90YWJsZS5oIgotCiAjaW5jbHVkZSAiY3NzL2Nzc2hlbHBlci5oIgog
I2luY2x1ZGUgImNzcy9jc3NzdHlsZXNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiY3NzL2Nzc19zdHls
ZXNoZWV0aW1wbC5oIgpAQCAtNjUsMTcgKzYzLDExIEBACiAjaW5jbHVkZSAia2h0bWxfc2V0dGlu
Z3MuaCIKICNpbmNsdWRlICJraHRtbHBhcnRfcC5oIgogCi0jaW5jbHVkZSAiaHRtbC9odG1sX2Jh
c2VpbXBsLmgiCi0jaW5jbHVkZSAiaHRtbC9odG1sX2Jsb2NraW1wbC5oIgotI2luY2x1ZGUgImh0
bWwvaHRtbF9jYW52YXNpbXBsLmgiCisvLyBGSVhNRTogV2Ugd2FudCB0byBjdXQgdGhlIHJlbWFp
bmluZyBIVE1MIGRlcGVuZGVuY2llcyBzbyB0aGF0IHdlIGRvbid0IG5lZWQgdG8gaW5jbHVkZSB0
aGVzZSBmaWxlcy4KICNpbmNsdWRlICJodG1sL2h0bWxfZG9jdW1lbnRpbXBsLmgiCi0jaW5jbHVk
ZSAiaHRtbC9odG1sX2Zvcm1pbXBsLmgiCiAjaW5jbHVkZSAiaHRtbC9odG1sX2hlYWRpbXBsLmgi
CiAjaW5jbHVkZSAiaHRtbC9odG1sX2ltYWdlaW1wbC5oIgotI2luY2x1ZGUgImh0bWwvaHRtbF9s
aXN0aW1wbC5oIgotI2luY2x1ZGUgImh0bWwvaHRtbF9taXNjaW1wbC5oIgotI2luY2x1ZGUgImh0
bWwvaHRtbF90YWJsZWltcGwuaCIKLSNpbmNsdWRlICJodG1sL2h0bWxfb2JqZWN0aW1wbC5oIgor
I2luY2x1ZGUgImh0bWxmYWN0b3J5LmgiCiAKICNpbmNsdWRlICJjc3N2YWx1ZXMuaCIKIApAQCAt
NTA0LDkgKzQ5Niw5IEBAIEVsZW1lbnRJbXBsICpEb2N1bWVudEltcGw6OmRvY3VtZW50RWxlbWUK
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RWxlbWVudEltcGwqPihuKTsKIH0KIAotRWxlbWVudElt
cGwgKkRvY3VtZW50SW1wbDo6Y3JlYXRlRWxlbWVudCggY29uc3QgRE9NU3RyaW5nICZuYW1lLCBp
bnQgJmV4Y2VwdGlvbmNvZGUgKQorRWxlbWVudEltcGwgKkRvY3VtZW50SW1wbDo6Y3JlYXRlRWxl
bWVudChjb25zdCBET01TdHJpbmcgJm5hbWUsIGludCAmZXhjZXB0aW9uQ29kZSkKIHsKLSAgICBy
ZXR1cm4gbmV3IFhNTEVsZW1lbnRJbXBsKCBkb2N1bWVudCwgbmFtZS5pbXBsZW1lbnRhdGlvbigp
ICk7CisgICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnROUyhlbXB0eUF0b20sIG5hbWUsIGV4Y2VwdGlv
bkNvZGUpOwogfQogCiBEb2N1bWVudEZyYWdtZW50SW1wbCAqRG9jdW1lbnRJbXBsOjpjcmVhdGVE
b2N1bWVudEZyYWdtZW50KCAgKQpAQCAtNTczLDEwICs1NjUsOCBAQCBOb2RlSW1wbCAqRG9jdW1l
bnRJbXBsOjppbXBvcnROb2RlKE5vZGVJCiAgICAgICAgICAgICByZXR1cm4gY3JlYXRlQ29tbWVu
dChpbXBvcnRlZE5vZGUtPm5vZGVWYWx1ZSgpKTsKICAgICAgICAgY2FzZSBOb2RlOjpFTEVNRU5U
X05PREU6IHsKICAgICAgICAgICAgIEVsZW1lbnRJbXBsICpvbGRFbGVtZW50ID0gc3RhdGljX2Nh
c3Q8RWxlbWVudEltcGwgKj4oaW1wb3J0ZWROb2RlKTsKLSAgICAgICAgICAgIERvY3VtZW50SW1w
bCAqb2xkRG9jID0gb2xkRWxlbWVudC0+Z2V0RG9jdW1lbnQoKTsKLSAgICAgICAgICAgIHN0YXRp
YyBET01TdHJpbmcgSFRNTE5hbWVzcGFjZShYSFRNTF9OQU1FU1BBQ0UpOwotICAgICAgICAgICAg
RE9NU3RyaW5nIGVsZW1lbnROYW1lc3BhY2UgPSBvbGRFbGVtZW50LT5pc0hUTUxFbGVtZW50KCkg
PyBIVE1MTmFtZXNwYWNlIDogb2xkRWxlbWVudC0+bmFtZXNwYWNlVVJJKCk7Ci0gICAgICAgICAg
ICBFbGVtZW50SW1wbCAqbmV3RWxlbWVudCA9IGNyZWF0ZUVsZW1lbnROUyhlbGVtZW50TmFtZXNw
YWNlLmltcGxlbWVudGF0aW9uKCksIG9sZEVsZW1lbnQtPnRhZ05hbWUoKSwgZXhjZXB0aW9uY29k
ZSk7CisgICAgICAgICAgICAvLyBGSVhNRTogUHJlZml4IGlzIGxvc3QuICBJcyB0aGF0IHJpZ2h0
PworICAgICAgICAgICAgRWxlbWVudEltcGwgKm5ld0VsZW1lbnQgPSBjcmVhdGVFbGVtZW50TlMo
b2xkRWxlbWVudC0+bmFtZXNwYWNlVVJJKCksIG9sZEVsZW1lbnQtPmxvY2FsTmFtZSgpLCBleGNl
cHRpb25jb2RlKTsKICAgICAgICAgICAgIGlmIChleGNlcHRpb25jb2RlICE9IDApCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIDA7CiAKQEAgLTU5Nyw3ICs1ODcsOCBAQCBOb2RlSW1wbCAqRG9jdW1l
bnRJbXBsOjppbXBvcnROb2RlKE5vZGVJCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyAjIyMg
ZXh0cmFjdCBhbmQgc2V0IG5ldyBwcmVmaXgKICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICAgICAgICAgIE5vZGVJbXBsOjpJZCBub2RlSWQgPSBhdHRySWQob2xkRG9jLT5uYW1l
c3BhY2VVUkkoYXR0ci0+YXR0ckltcGwoKS0+aWQoKSksIGxvY2FsTmFtZS5pbXBsZW1lbnRhdGlv
bigpLCBmYWxzZSAvKiBhbGxvY2F0ZSAqLyk7CisgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1F
OiBMb3NlIHRoZSBuYW1lc3BhY2UgaGVyZSBmb3Igbm93LiAgVGhpcyBjb2RlIHdpbGwgY2hhbmdl
IHNvb24gYW55d2F5LgorICAgICAgICAgICAgICAgICAgICBOb2RlSW1wbDo6SWQgbm9kZUlkID0g
YXR0cklkKDAsIGxvY2FsTmFtZS5pbXBsZW1lbnRhdGlvbigpLCBmYWxzZSAvKiBhbGxvY2F0ZSAq
Lyk7CiAgICAgICAgICAgICAgICAgICAgIG5ld0VsZW1lbnQtPnNldEF0dHJpYnV0ZShub2RlSWQs
IHZhbHVlLmltcGxlbWVudGF0aW9uKCksIGV4Y2VwdGlvbmNvZGUpOwogICAgICAgICAgICAgICAg
ICAgICBpZiAoZXhjZXB0aW9uY29kZSAhPSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBu
ZXdFbGVtZW50LT5kZXJlZigpOwpAQCAtNjM2LDI4ICs2MjcsMzYgQEAgTm9kZUltcGwgKkRvY3Vt
ZW50SW1wbDo6aW1wb3J0Tm9kZShOb2RlSQogCiBFbGVtZW50SW1wbCAqRG9jdW1lbnRJbXBsOjpj
cmVhdGVFbGVtZW50TlMoIGNvbnN0IERPTVN0cmluZyAmX25hbWVzcGFjZVVSSSwgY29uc3QgRE9N
U3RyaW5nICZfcXVhbGlmaWVkTmFtZSwgaW50ICZleGNlcHRpb25jb2RlKQogewotICAgIEVsZW1l
bnRJbXBsICplID0gMDsKLSAgICBRU3RyaW5nIHFOYW1lID0gX3F1YWxpZmllZE5hbWUuc3RyaW5n
KCk7Ci0gICAgaW50IGNvbG9uUG9zID0gcU5hbWUuZmluZCgnOicsMCk7Ci0KKyAgICAvLyBTcGxp
dCB0aGUgbmFtZS4KKyAgICBpbnQgZXhjZXB0aW9uQ29kZSA9IDA7CisgICAgRWxlbWVudEltcGwq
IGUgPSAwOworICAgIERPTVN0cmluZyBwcmVmaXgsIGxvY2FsTmFtZTsKKyAgICBpbnQgY29sb25Q
b3MgPSBfcXVhbGlmaWVkTmFtZS5maW5kKCc6Jyk7CisgICAgaWYgKGNvbG9uUG9zID49IDApIHsK
KyAgICAgICAgcHJlZml4ID0gX3F1YWxpZmllZE5hbWUuc3Vic3RyaW5nKDAsIGNvbG9uUG9zKTsK
KyAgICAgICAgbG9jYWxOYW1lID0gX3F1YWxpZmllZE5hbWUuc3Vic3RyaW5nKGNvbG9uUG9zKzEs
IF9xdWFsaWZpZWROYW1lLmxlbmd0aCgpIC0gY29sb25Qb3MpOworICAgIH0KKyAgICBlbHNlCisg
ICAgICAgIGxvY2FsTmFtZSA9IF9xdWFsaWZpZWROYW1lOworICAgIAorICAgIC8vIEZJWE1FOiBV
c2UgcmVnaXN0ZXJlZCBuYW1lc3BhY2VzIGFuZCBsb29rIHVwIGluIGEgaGFzaCB0byBmaW5kIHRo
ZSByaWdodCBmYWN0b3J5LgogICAgIGlmIChfbmFtZXNwYWNlVVJJID09IFhIVE1MX05BTUVTUEFD
RSkgewotICAgICAgICAvLyBVc2VyIHJlcXVlc3RlZCBhbiBlbGVtZW50IGluIHRoZSBYSFRNTCBu
YW1lc3BhY2UgLSB0aGlzIG1lYW5zIHdlIGNyZWF0ZSBhIHNwZWNpZmljIGVsZW1lbnQKLSAgICAg
ICAgLy8gKGVsZW1lbnRzIG5vdCBpbiB0aGlzIG5hbWVzcGFjZSBhcmUgdHJlYXRlZCBhcyBub3Jt
YWwgWE1MIGVsZW1lbnRzKQotICAgICAgICBlID0gY3JlYXRlSFRNTEVsZW1lbnQocU5hbWUubWlk
KGNvbG9uUG9zKzEpLCBleGNlcHRpb25jb2RlKTsKLSAgICAgICAgaWYgKGV4Y2VwdGlvbmNvZGUp
CisgICAgICAgIC8vIEZJWE1FOiBSZWFsbHkgc2hvdWxkIG9ubHkgYmUgZG9uZSBmcm9tIHRoZSBw
dWJsaWMgRE9NIEFQSS4gIEludGVybmFsIGNhbGxlcnMga25vdyB0aGUgbmFtZSBpcyB2YWxpZC4K
KyAgICAgICAgaWYgKCFpc1ZhbGlkTmFtZShsb2NhbE5hbWUpKSB7CisgICAgICAgICAgICBleGNl
cHRpb25jb2RlID0gRE9NRXhjZXB0aW9uOjpJTlZBTElEX0NIQVJBQ1RFUl9FUlI7CiAgICAgICAg
ICAgICByZXR1cm4gMDsKLSAgICAgICAgaWYgKGUgJiYgY29sb25Qb3MgPj0gMCkgewotICAgICAg
ICAgICAgZS0+c2V0UHJlZml4KHFOYW1lLmxlZnQoY29sb25Qb3MpLCBleGNlcHRpb25jb2RlKTsK
LSAgICAgICAgICAgIGlmIChleGNlcHRpb25jb2RlKSB7Ci0gICAgICAgICAgICAgICAgZGVsZXRl
IGU7CisgICAgICAgIH0KKyAgICAgICAgZSA9IEhUTUxFbGVtZW50RmFjdG9yeTo6Y3JlYXRlSFRN
TEVsZW1lbnQoQXRvbWljU3RyaW5nKGxvY2FsTmFtZSksIHRoaXMsIDAsIGZhbHNlKTsKKyAgICAg
ICAgaWYgKGUgJiYgIXByZWZpeC5pc051bGwoKSkgeworICAgICAgICAgICAgZS0+c2V0UHJlZml4
KEF0b21pY1N0cmluZyhwcmVmaXgpLCBleGNlcHRpb25Db2RlKTsKKyAgICAgICAgICAgIGlmIChl
eGNlcHRpb25Db2RlKQogICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgfQog
ICAgICAgICB9CiAgICAgfQotCisgICAgCiAgICAgaWYgKCFlKQotICAgICAgICBlID0gbmV3IFhN
TEVsZW1lbnRJbXBsKCBkb2N1bWVudCwgX3F1YWxpZmllZE5hbWUuaW1wbGVtZW50YXRpb24oKSwg
X25hbWVzcGFjZVVSSS5pbXBsZW1lbnRhdGlvbigpICk7Ci0KKyAgICAgICAgZSA9IG5ldyBFbGVt
ZW50SW1wbChRdWFsaWZpZWROYW1lKEF0b21pY1N0cmluZyhwcmVmaXgpLCBBdG9taWNTdHJpbmco
bG9jYWxOYW1lKSwgQXRvbWljU3RyaW5nKF9uYW1lc3BhY2VVUkkpKSwgZG9jdW1lbnQpOworICAg
IAogICAgIHJldHVybiBlOwogfQogCkBAIC04MTEsMjIwICs4MTAsNiBAQCB1bnNpZ25lZCBzaG9y
dCBEb2N1bWVudEltcGw6Om5vZGVUeXBlKCkgCiAgICAgcmV0dXJuIE5vZGU6OkRPQ1VNRU5UX05P
REU7CiB9CiAKLUVsZW1lbnRJbXBsICpEb2N1bWVudEltcGw6OmNyZWF0ZUhUTUxFbGVtZW50KCBj
b25zdCBET01TdHJpbmcgJm5hbWUsIGludCAmZXhjZXB0aW9uY29kZSApCi17Ci0gICAgaWYgKCFp
c1ZhbGlkTmFtZShuYW1lKSkgewotICAgICAgICBleGNlcHRpb25jb2RlID0gRE9NRXhjZXB0aW9u
OjpJTlZBTElEX0NIQVJBQ1RFUl9FUlI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBy
ZXR1cm4gY3JlYXRlSFRNTEVsZW1lbnQodGFnSWQoMCwgbmFtZS5pbXBsZW1lbnRhdGlvbigpLCBm
YWxzZSkpOwotfQotCi1FbGVtZW50SW1wbCAqRG9jdW1lbnRJbXBsOjpjcmVhdGVIVE1MRWxlbWVu
dCh1bnNpZ25lZCBzaG9ydCB0YWdJRCkKLXsKLSAgICBzd2l0Y2ggKHRhZ0lEKQotICAgIHsKLSAg
ICBjYXNlIElEX0hUTUw6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTEh0bWxFbGVtZW50SW1wbChk
b2NQdHIoKSk7Ci0gICAgY2FzZSBJRF9IRUFEOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxIZWFk
RWxlbWVudEltcGwoZG9jUHRyKCkpOwotICAgIGNhc2UgSURfQk9EWToKLSAgICAgICAgcmV0dXJu
IG5ldyBIVE1MQm9keUVsZW1lbnRJbXBsKGRvY1B0cigpKTsKLQotLy8gaGVhZCBlbGVtZW50cwot
ICAgIGNhc2UgSURfQkFTRToKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MQmFzZUVsZW1lbnRJbXBs
KGRvY1B0cigpKTsKLSAgICBjYXNlIElEX0xJTks6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTExp
bmtFbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0gICAgY2FzZSBJRF9NRVRBOgotICAgICAgICByZXR1
cm4gbmV3IEhUTUxNZXRhRWxlbWVudEltcGwoZG9jUHRyKCkpOwotICAgIGNhc2UgSURfU1RZTEU6
Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTFN0eWxlRWxlbWVudEltcGwoZG9jUHRyKCkpOwotICAg
IGNhc2UgSURfVElUTEU6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTFRpdGxlRWxlbWVudEltcGwo
ZG9jUHRyKCkpOwotCi0vLyBmcmFtZXMKLSAgICBjYXNlIElEX0ZSQU1FOgotICAgICAgICByZXR1
cm4gbmV3IEhUTUxGcmFtZUVsZW1lbnRJbXBsKGRvY1B0cigpKTsKLSAgICBjYXNlIElEX0ZSQU1F
U0VUOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxGcmFtZVNldEVsZW1lbnRJbXBsKGRvY1B0cigp
KTsKLSAgICBjYXNlIElEX0lGUkFNRToKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MSUZyYW1lRWxl
bWVudEltcGwoZG9jUHRyKCkpOwotCi0vLyBmb3JtIGVsZW1lbnRzCi0vLyAjIyMgRklYTUU6IHdl
IG5lZWQgYSB3YXkgdG8gc2V0IGZvcm0gZGVwZW5kZW5jeSBhZnRlciB3ZSBoYXZlIG1hZGUgdGhl
IGZvcm0gZWxlbWVudHMKLSAgICBjYXNlIElEX0ZPUk06Ci0gICAgICAgIHJldHVybiBuZXcgSFRN
TEZvcm1FbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0gICAgY2FzZSBJRF9CVVRUT046Ci0gICAgICAg
IHJldHVybiBuZXcgSFRNTEJ1dHRvbkVsZW1lbnRJbXBsKGRvY1B0cigpKTsKLSAgICBjYXNlIElE
X0ZJRUxEU0VUOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxGaWVsZFNldEVsZW1lbnRJbXBsKGRv
Y1B0cigpKTsKLSAgICBjYXNlIElEX0lOUFVUOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxJbnB1
dEVsZW1lbnRJbXBsKGRvY1B0cigpKTsKLSAgICBjYXNlIElEX0lTSU5ERVg6Ci0gICAgICAgIHJl
dHVybiBuZXcgSFRNTElzSW5kZXhFbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0gICAgY2FzZSBJRF9M
QUJFTDoKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MTGFiZWxFbGVtZW50SW1wbChkb2NQdHIoKSk7
Ci0gICAgY2FzZSBJRF9MRUdFTkQ6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTExlZ2VuZEVsZW1l
bnRJbXBsKGRvY1B0cigpKTsKLSAgICBjYXNlIElEX09QVEdST1VQOgotICAgICAgICByZXR1cm4g
bmV3IEhUTUxPcHRHcm91cEVsZW1lbnRJbXBsKGRvY1B0cigpKTsKLSAgICBjYXNlIElEX09QVElP
TjoKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MT3B0aW9uRWxlbWVudEltcGwoZG9jUHRyKCkpOwot
ICAgIGNhc2UgSURfU0VMRUNUOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxTZWxlY3RFbGVtZW50
SW1wbChkb2NQdHIoKSk7Ci0gICAgY2FzZSBJRF9URVhUQVJFQToKLSAgICAgICAgcmV0dXJuIG5l
dyBIVE1MVGV4dEFyZWFFbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0KLS8vIGxpc3RzCi0gICAgY2Fz
ZSBJRF9ETDoKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MRExpc3RFbGVtZW50SW1wbChkb2NQdHIo
KSk7Ci0gICAgY2FzZSBJRF9ERDoKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MR2VuZXJpY0VsZW1l
bnRJbXBsKGRvY1B0cigpLCB0YWdJRCk7Ci0gICAgY2FzZSBJRF9EVDoKLSAgICAgICAgcmV0dXJu
IG5ldyBIVE1MR2VuZXJpY0VsZW1lbnRJbXBsKGRvY1B0cigpLCB0YWdJRCk7Ci0gICAgY2FzZSBJ
RF9VTDoKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MVUxpc3RFbGVtZW50SW1wbChkb2NQdHIoKSk7
Ci0gICAgY2FzZSBJRF9PTDoKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MT0xpc3RFbGVtZW50SW1w
bChkb2NQdHIoKSk7Ci0gICAgY2FzZSBJRF9ESVI6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTERp
cmVjdG9yeUVsZW1lbnRJbXBsKGRvY1B0cigpKTsKLSAgICBjYXNlIElEX01FTlU6Ci0gICAgICAg
IHJldHVybiBuZXcgSFRNTE1lbnVFbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0gICAgY2FzZSBJRF9M
SToKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MTElFbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0KLS8v
IGZvcm1hdHRpbmcgZWxlbWVudHMgKGJsb2NrKQotICAgIGNhc2UgSURfQkxPQ0tRVU9URToKLSAg
ICAgICAgcmV0dXJuIG5ldyBIVE1MQmxvY2txdW90ZUVsZW1lbnRJbXBsKGRvY1B0cigpKTsKLSAg
ICBjYXNlIElEX0RJVjoKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MRGl2RWxlbWVudEltcGwoZG9j
UHRyKCkpOwotICAgIGNhc2UgSURfSDE6Ci0gICAgY2FzZSBJRF9IMjoKLSAgICBjYXNlIElEX0gz
OgotICAgIGNhc2UgSURfSDQ6Ci0gICAgY2FzZSBJRF9INToKLSAgICBjYXNlIElEX0g2OgotICAg
ICAgICByZXR1cm4gbmV3IEhUTUxIZWFkaW5nRWxlbWVudEltcGwoZG9jUHRyKCksIHRhZ0lEKTsK
LSAgICBjYXNlIElEX0hSOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxIUkVsZW1lbnRJbXBsKGRv
Y1B0cigpKTsKLSAgICBjYXNlIElEX1A6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTFBhcmFncmFw
aEVsZW1lbnRJbXBsKGRvY1B0cigpKTsKLSAgICBjYXNlIElEX1BSRToKLSAgICBjYXNlIElEX1hN
UDoKLSAgICBjYXNlIElEX1BMQUlOVEVYVDoKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MUHJlRWxl
bWVudEltcGwoZG9jUHRyKCksIHRhZ0lEKTsKLSAgICBjYXNlIElEX0xBWUVSOgotICAgICAgICBy
ZXR1cm4gbmV3IEhUTUxMYXllckVsZW1lbnRJbXBsKGRvY1B0cigpKTsKLQotLy8gZm9udCBzdHVm
ZgotICAgIGNhc2UgSURfQkFTRUZPTlQ6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTEJhc2VGb250
RWxlbWVudEltcGwoZG9jUHRyKCkpOwotICAgIGNhc2UgSURfRk9OVDoKLSAgICAgICAgcmV0dXJu
IG5ldyBIVE1MRm9udEVsZW1lbnRJbXBsKGRvY1B0cigpKTsKLQotLy8gaW5zL2RlbAotICAgIGNh
c2UgSURfREVMOgotICAgIGNhc2UgSURfSU5TOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxNb2RF
bGVtZW50SW1wbChkb2NQdHIoKSwgdGFnSUQpOwotCi0vLyBhbmNob3IKLSAgICBjYXNlIElEX0E6
Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTEFuY2hvckVsZW1lbnRJbXBsKGRvY1B0cigpKTsKLQot
Ly8gaW1hZ2VzCi0gICAgY2FzZSBJRF9JTUc6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTEltYWdl
RWxlbWVudEltcGwoZG9jUHRyKCkpOwotICAgIGNhc2UgSURfTUFQOgotICAgICAgICByZXR1cm4g
bmV3IEhUTUxNYXBFbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0gICAgY2FzZSBJRF9BUkVBOgotICAg
ICAgICByZXR1cm4gbmV3IEhUTUxBcmVhRWxlbWVudEltcGwoZG9jUHRyKCkpOwotICAgIGNhc2Ug
SURfQ0FOVkFTOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxDYW52YXNFbGVtZW50SW1wbChkb2NQ
dHIoKSk7Ci0KLS8vIG9iamVjdHMsIGFwcGxldHMgYW5kIHNjcmlwdHMKLSAgICBjYXNlIElEX0FQ
UExFVDoKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MQXBwbGV0RWxlbWVudEltcGwoZG9jUHRyKCkp
OwotICAgIGNhc2UgSURfRU1CRUQ6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTEVtYmVkRWxlbWVu
dEltcGwoZG9jUHRyKCkpOwotICAgIGNhc2UgSURfT0JKRUNUOgotICAgICAgICByZXR1cm4gbmV3
IEhUTUxPYmplY3RFbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0gICAgY2FzZSBJRF9QQVJBTToKLSAg
ICAgICAgcmV0dXJuIG5ldyBIVE1MUGFyYW1FbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0gICAgY2Fz
ZSBJRF9TQ1JJUFQ6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTFNjcmlwdEVsZW1lbnRJbXBsKGRv
Y1B0cigpKTsKLQotLy8gdGFibGVzCi0gICAgY2FzZSBJRF9UQUJMRToKLSAgICAgICAgcmV0dXJu
IG5ldyBIVE1MVGFibGVFbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0gICAgY2FzZSBJRF9DQVBUSU9O
OgotICAgICAgICByZXR1cm4gbmV3IEhUTUxUYWJsZUNhcHRpb25FbGVtZW50SW1wbChkb2NQdHIo
KSk7Ci0gICAgY2FzZSBJRF9DT0xHUk9VUDoKLSAgICBjYXNlIElEX0NPTDoKLSAgICAgICAgcmV0
dXJuIG5ldyBIVE1MVGFibGVDb2xFbGVtZW50SW1wbChkb2NQdHIoKSwgdGFnSUQpOwotICAgIGNh
c2UgSURfVFI6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTFRhYmxlUm93RWxlbWVudEltcGwoZG9j
UHRyKCkpOwotICAgIGNhc2UgSURfVEQ6Ci0gICAgY2FzZSBJRF9USDoKLSAgICAgICAgcmV0dXJu
IG5ldyBIVE1MVGFibGVDZWxsRWxlbWVudEltcGwoZG9jUHRyKCksIHRhZ0lEKTsKLSAgICBjYXNl
IElEX1RIRUFEOgotICAgIGNhc2UgSURfVEJPRFk6Ci0gICAgY2FzZSBJRF9URk9PVDoKLSAgICAg
ICAgcmV0dXJuIG5ldyBIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGwoZG9jUHRyKCksIHRhZ0lE
LCBmYWxzZSk7Ci0KLS8vIGlubGluZSBlbGVtZW50cwotICAgIGNhc2UgSURfQlI6Ci0gICAgICAg
IHJldHVybiBuZXcgSFRNTEJSRWxlbWVudEltcGwoZG9jUHRyKCkpOwotICAgIGNhc2UgSURfUToK
LSAgICAgICAgcmV0dXJuIG5ldyBIVE1MUXVvdGVFbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0KLSAg
ICBjYXNlIElEX01BUlFVRUU6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTE1hcnF1ZWVFbGVtZW50
SW1wbChkb2NQdHIoKSk7Ci0gICAKLS8vIGVsZW1lbnRzIHdpdGggbm8gc3BlY2lhbCByZXByZXNl
bnRhdGlvbiBpbiB0aGUgRE9NCi0KLS8vIGJsb2NrOgotICAgIGNhc2UgSURfQUREUkVTUzoKLSAg
ICBjYXNlIElEX0NFTlRFUjoKLQotLy8gaW5saW5lCi0gICAgICAgIC8vICVmb250c3R5bGUKLSAg
ICBjYXNlIElEX1RUOgotICAgIGNhc2UgSURfVToKLSAgICBjYXNlIElEX0I6Ci0gICAgY2FzZSBJ
RF9JOgotICAgIGNhc2UgSURfUzoKLSAgICBjYXNlIElEX1NUUklLRToKLSAgICBjYXNlIElEX0JJ
RzoKLSAgICBjYXNlIElEX1NNQUxMOgotCi0gICAgICAgIC8vICVwaHJhc2UKLSAgICBjYXNlIElE
X0VNOgotICAgIGNhc2UgSURfU1RST05HOgotICAgIGNhc2UgSURfREZOOgotICAgIGNhc2UgSURf
Q09ERToKLSAgICBjYXNlIElEX1NBTVA6Ci0gICAgY2FzZSBJRF9LQkQ6Ci0gICAgY2FzZSBJRF9W
QVI6Ci0gICAgY2FzZSBJRF9DSVRFOgotICAgIGNhc2UgSURfQUJCUjoKLSAgICBjYXNlIElEX0FD
Uk9OWU06Ci0KLSAgICAgICAgLy8gJXNwZWNpYWwKLSAgICBjYXNlIElEX1NVQjoKLSAgICBjYXNl
IElEX1NVUDoKLSAgICBjYXNlIElEX1NQQU46Ci0gICAgY2FzZSBJRF9OT0JSOgotICAgIGNhc2Ug
SURfV0JSOgotCi0gICAgY2FzZSBJRF9CRE86Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJu
IG5ldyBIVE1MR2VuZXJpY0VsZW1lbnRJbXBsKGRvY1B0cigpLCB0YWdJRCk7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIDA7Ci19Ci0KIFFTdHJpbmcgRG9jdW1lbnRJbXBsOjpuZXh0U3RhdGUoKQogewog
ICAgUVN0cmluZyBzdGF0ZTsKQEAgLTE0NjQsMTAgKzEyNDksMTAgQEAgSFRNTEVsZW1lbnRJbXBs
KiBEb2N1bWVudEltcGw6OmJvZHkoKQogICAgIC8vIHRyeSB0byBwcmVmZXIgYSBGUkFNRVNFVCBl
bGVtZW50IG92ZXIgQk9EWQogICAgIE5vZGVJbXBsKiBib2R5ID0gMDsKICAgICBmb3IgKE5vZGVJ
bXBsKiBpID0gZGUtPmZpcnN0Q2hpbGQoKTsgaTsgaSA9IGktPm5leHRTaWJsaW5nKCkpIHsKLSAg
ICAgICAgaWYgKGktPmlkKCkgPT0gSURfRlJBTUVTRVQpCisgICAgICAgIGlmIChpLT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6ZnJhbWVzZXQoKSkpCiAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8SFRNTEVsZW1lbnRJbXBsKj4oaSk7CiAgICAgICAgIAotICAgICAgICBpZiAoaS0+aWQoKSA9
PSBJRF9CT0RZKQorICAgICAgICBpZiAoaS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJvZHkoKSkp
CiAgICAgICAgICAgICBib2R5ID0gaTsKICAgICB9CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhU
TUxFbGVtZW50SW1wbCAqPihib2R5KTsKQEAgLTE1OTcsNyArMTM4Miw3IEBAIGJvb2wgRG9jdW1l
bnRJbXBsOjpzaG91bGRTY2hlZHVsZUxheW91dCgKICAgICAvLyAoYykgd2UgaGF2ZSBhIDxib2R5
PgogICAgIHJldHVybiAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5uZWVkc0xheW91dCgpICYm
IGhhdmVTdHlsZXNoZWV0c0xvYWRlZCgpICYmCiAgICAgICAgICAgICBkb2N1bWVudEVsZW1lbnQo
KSAmJiBkb2N1bWVudEVsZW1lbnQoKS0+cmVuZGVyZXIoKSAmJgotICAgICAgICAgICAgKGRvY3Vt
ZW50RWxlbWVudCgpLT5pZCgpICE9IElEX0hUTUwgfHwgYm9keSgpKSk7CisgICAgICAgICAgICAo
IWRvY3VtZW50RWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aHRtbCgpKSB8fCBib2R5
KCkpKTsKIH0KIAogaW50IERvY3VtZW50SW1wbDo6bWluaW11bUxheW91dERlbGF5KCkKQEAgLTE3
MjEsNDIgKzE1MDYsNiBAQCB2b2lkIERvY3VtZW50SW1wbDo6ZGV0ZXJtaW5lUGFyc2VNb2RlKCBj
CiAgICAga2REZWJ1Zyg2MDIwKSA8PCAiIHVzaW5nIHN0cmljdCBwYXJzZU1vZGUiIDw8IGVuZGw7
CiB9CiAKLS8vIFBsZWFzZSBzZWUgaWYgdGhlcmVgcyBhIHBvc3NpYmlsaXR5IHRvIG1lcmdlIHRo
YXQgY29kZQotLy8gd2l0aCB0aGUgbmV4dCBmdW5jdGlvbiBhbmQgZ2V0RWxlbWVudEJ5SUQoKS4K
LU5vZGVJbXBsICpEb2N1bWVudEltcGw6OmZpbmRFbGVtZW50KCBJZCBpZCApCi17Ci0gICAgUVB0
clN0YWNrPE5vZGVJbXBsPiBub2RlU3RhY2s7Ci0gICAgTm9kZUltcGwgKmN1cnJlbnQgPSBfZmly
c3Q7Ci0KLSAgICB3aGlsZSgxKQotICAgIHsKLSAgICAgICAgaWYoIWN1cnJlbnQpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGlmKG5vZGVTdGFjay5pc0VtcHR5KCkpIGJyZWFrOwotICAgICAgICAg
ICAgY3VycmVudCA9IG5vZGVTdGFjay5wb3AoKTsKLSAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJy
ZW50LT5uZXh0U2libGluZygpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewot
ICAgICAgICAgICAgaWYoY3VycmVudC0+aWQoKSA9PSBpZCkKLSAgICAgICAgICAgICAgICByZXR1
cm4gY3VycmVudDsKLQotICAgICAgICAgICAgTm9kZUltcGwgKmNoaWxkID0gY3VycmVudC0+Zmly
c3RDaGlsZCgpOwotICAgICAgICAgICAgaWYoY2hpbGQpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgbm9kZVN0YWNrLnB1c2goY3VycmVudCk7Ci0gICAgICAgICAgICAgICAgY3VycmVu
dCA9IGNoaWxkOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0U2libGluZygpOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KIE5vZGVJ
bXBsICpEb2N1bWVudEltcGw6Om5leHRGb2N1c05vZGUoTm9kZUltcGwgKmZyb21Ob2RlKQogewog
ICAgIHVuc2lnbmVkIHNob3J0IGZyb21UYWJJbmRleDsKQEAgLTIxNTEsMTIgKzE5MDAsMTMgQEAg
Tm9kZUltcGw6OklkIERvY3VtZW50SW1wbDo6YXR0cklkKERPTVN0cgogCiAgICAgLy8gbm93IGxl
dHMgZmluZCBvdXQgdGhlIG5hbWVzcGFjZQogICAgIFFfVUlOVDE2IG5zID0gbm9OYW1lc3BhY2U7
CisgICAgLyogRklYTUU6IEp1c3QgYnJlYWsgbmFtZXNwYWNlZCBhdHRyaWJ1dGVzIGZvciBub3cu
ICBXaWxsIGZpeCBpbiBuZXh0IHN0YWdlIG9mIFF1YWxpZmllZE5hbWUgY29udmVyc2lvbi4KICAg
ICBpZiAoX25hbWVzcGFjZVVSSSkgewogICAgICAgICBET01TdHJpbmcgbnNVKF9uYW1lc3BhY2VV
UkkpOwogICAgICAgICBpbnQgbnNJRCA9IFhtbE5hbWVzcGFjZVRhYmxlOjpnZXROYW1lc3BhY2VJ
RChuc1UsIHJlYWRvbmx5KTsKICAgICAgICAgaWYgKG5zSUQgIT0gLTEpCiAgICAgICAgICAgICBu
cyA9IChRX1VJTlQxNiluc0lEOwotICAgIH0KKyAgICB9Ki8KICAgICAKICAgICAvLyBMb29rIGlu
IHRoZSBtX2F0dHJOYW1lcyBhcnJheSBmb3IgdGhlIG5hbWUKICAgICAvLyAjIyMgeWVhaCwgdGhp
cyBpcyBsYW1lLiB1c2UgYSBkaWN0aW9uYXJ5IC8gbWFwIGluc3RlYWQKQEAgLTIyMDcsOTUgKzE5
NTcsNiBAQCBET01TdHJpbmcgRG9jdW1lbnRJbXBsOjphdHRyTmFtZShOb2RlSW1wCiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAotTm9kZUltcGw6OklkIERvY3VtZW50SW1wbDo6dGFnSWQoRE9NU3Ry
aW5nSW1wbCogX25hbWVzcGFjZVVSSSwgRE9NU3RyaW5nSW1wbCAqX25hbWUsIGJvb2wgcmVhZG9u
bHkpCi17Ci0gICAgaWYgKCFfbmFtZSkgcmV0dXJuIDA7Ci0gICAgLy8gRWFjaCBkb2N1bWVudCBt
YWludGFpbnMgYSBtYXBwaW5nIG9mIHRhZyBuYW1lIC0+IGlkIGZvciBldmVyeSB0YWcgbmFtZSBl
bmNvdW50ZXJlZAotICAgIC8vIGluIHRoZSBkb2N1bWVudC4KLSAgICBOb2RlSW1wbDo6SWQgaWQg
PSAwOwotCi0gICAgLy8gRmlyc3Qgc2VlIGlmIGl0J3MgYSBIVE1MIGVsZW1lbnQgbmFtZQotICAg
IFFDb25zdFN0cmluZyBuKF9uYW1lLT5zLCBfbmFtZS0+bCk7Ci0gICAgaWYgKCFfbmFtZXNwYWNl
VVJJIHx8ICFzdHJjYXNlY21wKF9uYW1lc3BhY2VVUkksIFhIVE1MX05BTUVTUEFDRSkpIHsKLSAg
ICAgICAgLy8gd2UncmUgaW4gSFRNTCBuYW1lc3BhY2UgaWYgd2Uga25vdyB0aGUgdGFnLgotICAg
ICAgICAvLyB4aHRtbCBpcyBsb3dlciBjYXNlIC0gY2FzZSBzZW5zaXRpdmUsIGVhc3kgdG8gaW1w
bGVtZW50Ci0gICAgICAgIGlmICggaHRtbE1vZGUoKSA9PSBYSHRtbCAmJiAoaWQgPSBnZXRUYWdJ
RChuLnN0cmluZygpLmFzY2lpKCksIF9uYW1lLT5sKSkgKQotICAgICAgICAgICAgcmV0dXJuIGlk
OwotICAgICAgICAvLyBjb21wYXRpYmlsaXR5OiB1cHBlciBjYXNlIC0gY2FzZSBpbnNlbnNpdGl2
ZQotICAgICAgICBpZiAoIGh0bWxNb2RlKCkgIT0gWEh0bWwgJiYgKGlkID0gZ2V0VGFnSUQobi5z
dHJpbmcoKS5sb3dlcigpLmFzY2lpKCksIF9uYW1lLT5sICkpICkKLSAgICAgICAgICAgIHJldHVy
biBpZDsKLQotICAgICAgICAvLyBvaywgdGhlIGZhc3QgcGF0aCBkaWRuJ3Qgd29yayBvdXQsIHdl
IG5lZWQgdGhlIGZ1bGwgY2hlY2sKLSAgICB9Ci0KLSAgICAvLyBub3cgbGV0cyBmaW5kIG91dCB0
aGUgbmFtZXNwYWNlCi0gICAgUV9VSU5UMTYgbnMgPSBub05hbWVzcGFjZTsKLSAgICBpZiAoX25h
bWVzcGFjZVVSSSkgewotICAgICAgICBET01TdHJpbmcgbnNVKF9uYW1lc3BhY2VVUkkpOwotICAg
ICAgICBpbnQgbnNJRCA9IFhtbE5hbWVzcGFjZVRhYmxlOjpnZXROYW1lc3BhY2VJRChuc1UsIHJl
YWRvbmx5KTsKLSAgICAgICAgaWYgKG5zSUQgIT0gLTEpCi0gICAgICAgICAgICBucyA9IChRX1VJ
TlQxNiluc0lEOwotICAgIH0KLQotICAgIC8vIExvb2sgaW4gdGhlIG1fZWxlbWVudE5hbWVzIGFy
cmF5IGZvciB0aGUgbmFtZQotICAgIC8vICMjIyB5ZWFoLCB0aGlzIGlzIGxhbWUuIHVzZSBhIGRp
Y3Rpb25hcnkgLyBtYXAgaW5zdGVhZAotICAgIERPTVN0cmluZyBubWUobi5zdHJpbmcoKSk7Ci0g
ICAgLy8gY29tcGF0aWJpbGl0eSBtb2RlIGhhcyB0byBzdG9yZSB1cHBlciBjYXNlCi0gICAgaWYg
KGh0bWxNb2RlKCkgIT0gWEh0bWwpIG5tZSA9IG5tZS51cHBlcigpOwotICAgIGZvciAoaWQgPSAw
OyBpZCA8IG1fZWxlbWVudE5hbWVDb3VudDsgaWQrKykKLSAgICAgICAgaWYgKERPTVN0cmluZyht
X2VsZW1lbnROYW1lc1tpZF0pID09IG5tZSkKLSAgICAgICAgICAgIHJldHVybiBtYWtlSWQobnMs
IElEX0xBU1RfVEFHICsgMSArIGlkKTsKLQotICAgIC8vIHVua25vd24KLSAgICBpZiAocmVhZG9u
bHkpIHJldHVybiAwOwotCi0gICAgLy8gTmFtZSBub3QgZm91bmQgaW4gbV9lbGVtZW50TmFtZXMs
IHNvIGxldCdzIGFkZCBpdAotICAgIGlmIChtX2VsZW1lbnROYW1lQ291bnQrMSA+IG1fZWxlbWVu
dE5hbWVBbGxvYykgewotICAgICAgICBtX2VsZW1lbnROYW1lQWxsb2MgKz0gMTAwOwotICAgICAg
ICBET01TdHJpbmdJbXBsICoqbmV3TmFtZXMgPSBuZXcgRE9NU3RyaW5nSW1wbCogW21fZWxlbWVu
dE5hbWVBbGxvY107Ci0gICAgICAgIC8vICMjIyB5ZWFoLCB0aGlzIGlzIGxhbWUuIHVzZSBhIGRp
Y3Rpb25hcnkgLyBtYXAgaW5zdGVhZAotICAgICAgICBpZiAobV9lbGVtZW50TmFtZXMpIHsKLSAg
ICAgICAgICAgIHVuc2lnbmVkIHNob3J0IGk7Ci0gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwg
bV9lbGVtZW50TmFtZUNvdW50OyBpKyspCi0gICAgICAgICAgICAgICAgbmV3TmFtZXNbaV0gPSBt
X2VsZW1lbnROYW1lc1tpXTsKLSAgICAgICAgICAgIGRlbGV0ZSBbXSBtX2VsZW1lbnROYW1lczsK
LSAgICAgICAgfQotICAgICAgICBtX2VsZW1lbnROYW1lcyA9IG5ld05hbWVzOwotICAgIH0KLQot
ICAgIGlkID0gbV9lbGVtZW50TmFtZUNvdW50Kys7Ci0gICAgbV9lbGVtZW50TmFtZXNbaWRdID0g
bm1lLmltcGxlbWVudGF0aW9uKCk7Ci0gICAgbV9lbGVtZW50TmFtZXNbaWRdLT5yZWYoKTsKLQot
ICAgIHJldHVybiBtYWtlSWQobnMsIElEX0xBU1RfVEFHICsgMSArIGlkKTsKLX0KLQotRE9NU3Ry
aW5nIERvY3VtZW50SW1wbDo6dGFnTmFtZShOb2RlSW1wbDo6SWQgX2lkKSBjb25zdAotewotICAg
IGlmIChsb2NhbE5hbWVQYXJ0KF9pZCkgPiBJRF9MQVNUX1RBRykKLSAgICAgICAgcmV0dXJuIG1f
ZWxlbWVudE5hbWVzW2xvY2FsTmFtZVBhcnQoX2lkKSAtIChJRF9MQVNUX1RBRyArIDEpXTsKLSAg
ICBlbHNlIHsKLSAgICAgICAgLy8gIyMjIHB1dCB0aGVtIGluIGEgY2FjaGUKLSAgICAgICAgaWYg
KGh0bWxNb2RlKCkgPT0gWEh0bWwpCi0gICAgICAgICAgICByZXR1cm4gZ2V0VGFnTmFtZShfaWQp
Lmxvd2VyKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBnZXRUYWdOYW1lKF9p
ZCk7Ci0gICAgfQotfQotCi0KLURPTVN0cmluZ0ltcGwqIERvY3VtZW50SW1wbDo6bmFtZXNwYWNl
VVJJKE5vZGVJbXBsOjpJZCBfaWQpIGNvbnN0Ci17Ci0gICAgaWYgKF9pZCA8PSBJRF9MQVNUX1RB
RykKLSAgICAgICAgcmV0dXJuIGh0bWxNb2RlKCkgPT0gWEh0bWwgPyBYbWxOYW1lc3BhY2VUYWJs
ZTo6Z2V0TmFtZXNwYWNlVVJJKHhodG1sTmFtZXNwYWNlKS5pbXBsZW1lbnRhdGlvbigpIDogMDsK
LQotICAgIHVuc2lnbmVkIHNob3J0IG5zID0gX2lkID4+IDE2OwotCi0gICAgaWYgKCFucykgcmV0
dXJuIDA7Ci0KLSAgICByZXR1cm4gWG1sTmFtZXNwYWNlVGFibGU6OmdldE5hbWVzcGFjZVVSSShu
cykuaW1wbGVtZW50YXRpb24oKTsKLX0KLQogU3R5bGVTaGVldExpc3RJbXBsKiBEb2N1bWVudElt
cGw6OnN0eWxlU2hlZXRzKCkKIHsKICAgICByZXR1cm4gbV9zdHlsZVNoZWV0czsKQEAgLTI0MTks
MTEgKzIwODAsMTEgQEAgdm9pZCBEb2N1bWVudEltcGw6OnJlY2FsY1N0eWxlU2VsZWN0b3IoKQog
ICAgICAgICAgICAgfQogCiAgICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAobi0+aXNIVE1MRWxl
bWVudCgpICYmIChuLT5pZCgpID09IElEX0xJTksgfHwgbi0+aWQoKSA9PSBJRF9TVFlMRSkpIHsK
LSAgICAgICAgICAgIEVsZW1lbnRJbXBsICplID0gc3RhdGljX2Nhc3Q8RWxlbWVudEltcGwgKj4o
bik7CisgICAgICAgIGVsc2UgaWYgKG4tPmlzSFRNTEVsZW1lbnQoKSAmJiAobi0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OmxpbmsoKSkgfHwgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnN0eWxlKCkp
KSkgeworICAgICAgICAgICAgSFRNTEVsZW1lbnRJbXBsICplID0gc3RhdGljX2Nhc3Q8SFRNTEVs
ZW1lbnRJbXBsICo+KG4pOwogICAgICAgICAgICAgUVN0cmluZyB0aXRsZSA9IGUtPmdldEF0dHJp
YnV0ZSggQVRUUl9USVRMRSApLnN0cmluZygpOwogICAgICAgICAgICAgYm9vbCBlbmFibGVkVmlh
U2NyaXB0ID0gZmFsc2U7Ci0gICAgICAgICAgICBpZiAobi0+aWQoKSA9PSBJRF9MSU5LKSB7Cisg
ICAgICAgICAgICBpZiAoZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6bGluaygpKSkgewogICAg
ICAgICAgICAgICAgIC8vIDxMSU5LPiBlbGVtZW50CiAgICAgICAgICAgICAgICAgSFRNTExpbmtF
bGVtZW50SW1wbCogbCA9IHN0YXRpY19jYXN0PEhUTUxMaW5rRWxlbWVudEltcGwqPihuKTsKICAg
ICAgICAgICAgICAgICBpZiAobC0+aXNMb2FkaW5nKCkgfHwgbC0+aXNEaXNhYmxlZCgpKQpAQCAt
MjQzNSw3ICsyMDk2LDcgQEAgdm9pZCBEb2N1bWVudEltcGw6OnJlY2FsY1N0eWxlU2VsZWN0b3Io
KQogCiAgICAgICAgICAgICAvLyBHZXQgdGhlIGN1cnJlbnQgcHJlZmVycmVkIHN0eWxlc2V0LiAg
VGhpcyBpcyB0aGUKICAgICAgICAgICAgIC8vIHNldCBvZiBzaGVldHMgdGhhdCB3aWxsIGJlIGVu
YWJsZWQuCi0gICAgICAgICAgICBpZiAoIG4tPmlkKCkgPT0gSURfTElOSyApCisgICAgICAgICAg
ICBpZiAoZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6bGluaygpKSkKICAgICAgICAgICAgICAg
ICBzaGVldCA9IHN0YXRpY19jYXN0PEhUTUxMaW5rRWxlbWVudEltcGwqPihuKS0+c2hlZXQoKTsK
ICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAvLyA8U1RZTEU+IGVsZW1lbnQKQEAg
LTI0NTIsNyArMjExMyw3IEBAIHZvaWQgRG9jdW1lbnRJbXBsOjpyZWNhbGNTdHlsZVNlbGVjdG9y
KCkKICAgICAgICAgICAgICAgICAgICAgLy8gdXMgYXMgdGhlIHByZWZlcnJlZCBzZXQuICBPdGhl
cndpc2UsIGp1c3QgaWdub3JlCiAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgc2hlZXQuCiAg
ICAgICAgICAgICAgICAgICAgIFFTdHJpbmcgcmVsID0gZS0+Z2V0QXR0cmlidXRlKCBBVFRSX1JF
TCApLnN0cmluZygpOwotICAgICAgICAgICAgICAgICAgICBpZiAobi0+aWQoKSA9PSBJRF9TVFlM
RSB8fCAhcmVsLmNvbnRhaW5zKCJhbHRlcm5hdGUiKSkKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnN0eWxlKCkpIHx8ICFyZWwuY29udGFpbnMoImFs
dGVybmF0ZSIpKQogICAgICAgICAgICAgICAgICAgICAgICAgbV9wcmVmZXJyZWRTdHlsZXNoZWV0
U2V0ID0gdmlldygpLT5wYXJ0KCktPmQtPm1fc2hlZXRVc2VkID0gdGl0bGU7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgIApAQCAtMjQ3MSw3ICsyMTMyLDcgQEAgdm9p
ZCBEb2N1bWVudEltcGw6OnJlY2FsY1N0eWxlU2VsZWN0b3IoKQogICAgIAogICAgICAgICAvLyBG
b3IgSFRNTCBkb2N1bWVudHMsIHN0eWxlc2hlZXRzIGFyZSBub3QgYWxsb3dlZCB3aXRoaW4vYWZ0
ZXIgdGhlIDxCT0RZPiB0YWcuIFNvIHdlCiAgICAgICAgIC8vIGNhbiBzdG9wIHNlYXJjaGluZyBo
ZXJlLgotICAgICAgICBpZiAoaXNIVE1MRG9jdW1lbnQoKSAmJiBuLT5pZCgpID09IElEX0JPRFkp
CisgICAgICAgIGlmIChpc0hUTUxEb2N1bWVudCgpICYmIG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVz
Ojpib2R5KCkpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogCkluZGV4OiBraHRtbC94bWwv
ZG9tX2RvY2ltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRt
bC94bWwvZG9tX2RvY2ltcGwuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMTUKZGlmZiAtdSAt
cCAtcjEuMTE1IGtodG1sL3htbC9kb21fZG9jaW1wbC5oCi0tLSBraHRtbC94bWwvZG9tX2RvY2lt
cGwuaAkyMiBKdW4gMjAwNSAxODoyMjowMiAtMDAwMAkxLjExNQorKysga2h0bWwveG1sL2RvbV9k
b2NpbXBsLmgJOCBKdWwgMjAwNSAwMzowNDo0NCAtMDAwMApAQCAtMTc3LDcgKzE3Nyw3IEBAIHB1
YmxpYzoKIAogICAgIERPTUltcGxlbWVudGF0aW9uSW1wbCAqaW1wbGVtZW50YXRpb24oKSBjb25z
dDsKICAgICB2aXJ0dWFsIEVsZW1lbnRJbXBsICpkb2N1bWVudEVsZW1lbnQoKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIEVsZW1lbnRJbXBsICpjcmVhdGVFbGVtZW50ICggY29uc3QgRE9NU3RyaW5nICZ0
YWdOYW1lLCBpbnQgJmV4Y2VwdGlvbmNvZGUgKTsKKyAgICB2aXJ0dWFsIEVsZW1lbnRJbXBsICpj
cmVhdGVFbGVtZW50KGNvbnN0IERPTVN0cmluZyAmdGFnTmFtZSwgaW50ICZleGNlcHRpb25jb2Rl
KTsKICAgICBEb2N1bWVudEZyYWdtZW50SW1wbCAqY3JlYXRlRG9jdW1lbnRGcmFnbWVudCAoKTsK
ICAgICBUZXh0SW1wbCAqY3JlYXRlVGV4dE5vZGUgKCBjb25zdCBET01TdHJpbmcgJmRhdGEgKTsK
ICAgICBDb21tZW50SW1wbCAqY3JlYXRlQ29tbWVudCAoIGNvbnN0IERPTVN0cmluZyAmZGF0YSAp
OwpAQCAtMTg4LDcgKzE4OCw3IEBAIHB1YmxpYzoKICAgICBBdHRySW1wbCAqY3JlYXRlQXR0cmli
dXRlTlMoY29uc3QgRE9NU3RyaW5nICZuYW1lc3BhY2VVUkksIGNvbnN0IERPTVN0cmluZyAmcXVh
bGlmaWVkTmFtZSwgaW50ICZleGNlcHRpb24pOwogICAgIEVudGl0eVJlZmVyZW5jZUltcGwgKmNy
ZWF0ZUVudGl0eVJlZmVyZW5jZSAoIGNvbnN0IERPTVN0cmluZyAmbmFtZSApOwogICAgIE5vZGVJ
bXBsICppbXBvcnROb2RlKCBOb2RlSW1wbCAqaW1wb3J0ZWROb2RlLCBib29sIGRlZXAsIGludCAm
ZXhjZXB0aW9uY29kZSApOwotICAgIHZpcnR1YWwgRWxlbWVudEltcGwgKmNyZWF0ZUVsZW1lbnRO
UyAoIGNvbnN0IERPTVN0cmluZyAmX25hbWVzcGFjZVVSSSwgY29uc3QgRE9NU3RyaW5nICZfcXVh
bGlmaWVkTmFtZSwgaW50ICZleGNlcHRpb25jb2RlICk7CisgICAgdmlydHVhbCBFbGVtZW50SW1w
bCAqY3JlYXRlRWxlbWVudE5TKGNvbnN0IERPTVN0cmluZyAmX25hbWVzcGFjZVVSSSwgY29uc3Qg
RE9NU3RyaW5nICZfcXVhbGlmaWVkTmFtZSwgaW50ICZleGNlcHRpb25jb2RlKTsKICAgICBFbGVt
ZW50SW1wbCAqZ2V0RWxlbWVudEJ5SWQgKCBjb25zdCBET01TdHJpbmcgJmVsZW1lbnRJZCApIGNv
bnN0OwogICAgIEVsZW1lbnRJbXBsICplbGVtZW50RnJvbVBvaW50ICggY29uc3QgaW50IF94LCBj
b25zdCBpbnQgX3kgKSBjb25zdDsKIApAQCAtMjE4LDkgKzIxOCw2IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIGJvb2wgaXNEb2N1bWVudE5vZGUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAg
dmlydHVhbCBib29sIGlzSFRNTERvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAot
ICAgIEVsZW1lbnRJbXBsICpjcmVhdGVIVE1MRWxlbWVudChjb25zdCBET01TdHJpbmcgJnRhZ05h
bWUsIGludCAmZXhjZXB0aW9uY29kZSk7Ci0gICAgRWxlbWVudEltcGwgKmNyZWF0ZUhUTUxFbGVt
ZW50KHVuc2lnbmVkIHNob3J0IHRhZ0lEKTsKLQogICAgIGtodG1sOjpDU1NTdHlsZVNlbGVjdG9y
ICpzdHlsZVNlbGVjdG9yKCkgeyByZXR1cm4gbV9zdHlsZVNlbGVjdG9yOyB9CiAKICAgICBFbGVt
ZW50SW1wbCAqRG9jdW1lbnRJbXBsOjpnZXRFbGVtZW50QnlBY2Nlc3NLZXkoIGNvbnN0IERPTVN0
cmluZyAma2V5ICk7CkBAIC0zODcsOSArMzg0LDYgQEAgcHVibGljOgogICAgIHZvaWQgcmVzZXRW
aXNpdGVkTGlua0NvbG9yKCk7CiAgICAgdm9pZCByZXNldEFjdGl2ZUxpbmtDb2xvcigpOwogICAg
IAotICAgIC8vIGludGVybmFsCi0gICAgTm9kZUltcGwgKmZpbmRFbGVtZW50KCBJZCBpZCApOwot
CiAgICAgYm9vbCBwcmVwYXJlTW91c2VFdmVudCggYm9vbCByZWFkb25seSwgaW50IHgsIGludCB5
LCBNb3VzZUV2ZW50ICpldiApOwogCiAgICAgdmlydHVhbCBib29sIGNoaWxkQWxsb3dlZCggTm9k
ZUltcGwgKm5ld0NoaWxkICk7CkBAIC0zOTksMTYgKzM5Myw5IEBAIHB1YmxpYzoKICAgICAvLyAj
IyMgdGhpbmsgYWJvdXQgaW1wbGVtZW50aW5nIHJlZidjb3VudGluZyBmb3IgdGhlIGlkJ3MKICAg
ICAvLyBpbiBvcmRlciB0byBiZSBhYmxlIHRvIHJlYXNzaWduIHRob3NlIHRoYXQgYXJlIG5vIGxv
bmdlciBpbiB1c2UKICAgICAvLyAoY291bGQgbWFrZSBwcm9ibGVtcyB3aGVuIGl0IGlzIHN0aWxs
IGtlcHQgc29tZXdoZXJlIGFyb3VuZCwgaS5lLiBzdHlsZXNlbGVjdG9yKQotICAgIE5vZGVJbXBs
OjpJZCB0YWdJZChET01TdHJpbmdJbXBsKiBfbmFtZXNwYWNlVVJJLCBET01TdHJpbmdJbXBsICpf
bmFtZSwgYm9vbCByZWFkb25seSk7Ci0gICAgRE9NU3RyaW5nIHRhZ05hbWUoTm9kZUltcGw6Oklk
IF9pZCkgY29uc3Q7Ci0KICAgICBOb2RlSW1wbDo6SWQgYXR0cklkKERPTVN0cmluZ0ltcGwqIF9u
YW1lc3BhY2VVUkksIERPTVN0cmluZ0ltcGwgKl9uYW1lLCBib29sIHJlYWRvbmx5KTsKICAgICBE
T01TdHJpbmcgYXR0ck5hbWUoTm9kZUltcGw6OklkIF9pZCkgY29uc3Q7CiAKLSAgICAvLyB0aGUg
bmFtZXNwYWNlIHVyaSBpcyBtYXBwZWQgdG8gdGhlIHNhbWUgaWQgZm9yIGJvdGgKLSAgICAvLyB0
YWduYW1lcyBhcyB3ZWxsIGFzIGF0dHJpYnV0ZXMuCi0gICAgRE9NU3RyaW5nSW1wbCogbmFtZXNw
YWNlVVJJKE5vZGVJbXBsOjpJZCBfaWQpIGNvbnN0OwotCiAgICAgU3R5bGVTaGVldExpc3RJbXBs
KiBzdHlsZVNoZWV0cygpOwogCiAgICAgLyogTmV3bHkgcHJvcG9zZWQgQ1NTMyBtZWNoYW5pc20g
Zm9yIHNlbGVjdGluZyBhbHRlcm5hdGUKSW5kZXg6IGtodG1sL3htbC9kb21fZWxlbWVudGltcGwu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3htbC9kb21f
ZWxlbWVudGltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjY3CmRpZmYgLXUgLXAgLXIx
LjY3IGtodG1sL3htbC9kb21fZWxlbWVudGltcGwuY3BwCi0tLSBraHRtbC94bWwvZG9tX2VsZW1l
bnRpbXBsLmNwcAkxMSBNYXkgMjAwNSAwNTo0OTozNSAtMDAwMAkxLjY3CisrKyBraHRtbC94bWwv
ZG9tX2VsZW1lbnRpbXBsLmNwcAk4IEp1bCAyMDA1IDAzOjA0OjQ1IC0wMDAwCkBAIC0zMyw3ICsz
Myw2IEBACiAKICNpbmNsdWRlICJraHRtbF9wYXJ0LmgiCiAKLSNpbmNsdWRlICJodG1sL2R0ZC5o
IgogI2luY2x1ZGUgImh0bWwvaHRtbHBhcnNlci5oIgogCiAjaW5jbHVkZSAicmVuZGVyaW5nL3Jl
bmRlcl9jYW52YXMuaCIKQEAgLTkwLDE4ICs4OSwxOCBAQCB1bnNpZ25lZCBzaG9ydCBBdHRySW1w
bDo6bm9kZVR5cGUoKSBjb25zCiAgICAgcmV0dXJuIE5vZGU6OkFUVFJJQlVURV9OT0RFOwogfQog
Ci1ET01TdHJpbmcgQXR0ckltcGw6OnByZWZpeCgpIGNvbnN0Citjb25zdCBBdG9taWNTdHJpbmcm
IEF0dHJJbXBsOjpwcmVmaXgoKSBjb25zdAogewogICAgIHJldHVybiBtX2F0dHJpYnV0ZS0+cHJl
Zml4KCk7CiB9CiAKLXZvaWQgQXR0ckltcGw6OnNldFByZWZpeChjb25zdCBET01TdHJpbmcgJl9w
cmVmaXgsIGludCAmZXhjZXB0aW9uY29kZSApCit2b2lkIEF0dHJJbXBsOjpzZXRQcmVmaXgoY29u
c3QgQXRvbWljU3RyaW5nICZfcHJlZml4LCBpbnQgJmV4Y2VwdGlvbmNvZGUgKQogewogICAgIGNo
ZWNrU2V0UHJlZml4KF9wcmVmaXgsIGV4Y2VwdGlvbmNvZGUpOwogICAgIGlmIChleGNlcHRpb25j
b2RlKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2F0dHJpYnV0ZS0+c2V0UHJlZml4KF9wcmVm
aXguaW1wbGVtZW50YXRpb24oKSk7CisgICAgbV9hdHRyaWJ1dGUtPnNldFByZWZpeChfcHJlZml4
KTsKIH0KIAogRE9NU3RyaW5nIEF0dHJJbXBsOjpub2RlVmFsdWUoKSBjb25zdApAQCAtMjAyLDEx
ICsyMDEsMTAgQEAgRE9NU3RyaW5nIEF0dHJJbXBsOjp2YWx1ZSgpIGNvbnN0CiAKIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KIAotRWxlbWVudEltcGw6OkVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2Mp
Ci0gICAgOiBDb250YWluZXJOb2RlSW1wbChkb2MpCitFbGVtZW50SW1wbDo6RWxlbWVudEltcGwo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgcU5hbWUsIERvY3VtZW50UHRyICpkb2MpCisgICAgOiBDb250
YWluZXJOb2RlSW1wbChkb2MpLCBtX3RhZ05hbWUocU5hbWUpCiB7CiAgICAgbmFtZWRBdHRyTWFw
ID0gMDsKLSAgICBtX3ByZWZpeCA9IDA7CiB9CiAKIEVsZW1lbnRJbXBsOjp+RWxlbWVudEltcGwo
KQpAQCAtMjE1LDkgKzIxMywyMiBAQCBFbGVtZW50SW1wbDo6fkVsZW1lbnRJbXBsKCkKICAgICAg
ICAgbmFtZWRBdHRyTWFwLT5kZXRhY2hGcm9tRWxlbWVudCgpOwogICAgICAgICBuYW1lZEF0dHJN
YXAtPmRlcmVmKCk7CiAgICAgfQorfQogCi0gICAgaWYgKG1fcHJlZml4KQotICAgICAgICBtX3By
ZWZpeC0+ZGVyZWYoKTsKK05vZGVJbXBsICpFbGVtZW50SW1wbDo6Y2xvbmVOb2RlKGJvb2wgZGVl
cCkKK3sKKyAgICBpbnQgZXhjZXB0aW9uQ29kZSA9IDA7CisgICAgRWxlbWVudEltcGwgKmNsb25l
ID0gZ2V0RG9jdW1lbnQoKS0+Y3JlYXRlRWxlbWVudE5TKG5hbWVzcGFjZVVSSSgpLCBub2RlTmFt
ZSgpLCBleGNlcHRpb25Db2RlKTsKKyAgICBhc3NlcnQoIWV4Y2VwdGlvbkNvZGUpOworICAgIAor
ICAgIC8vIGNsb25lIGF0dHJpYnV0ZXMKKyAgICBpZiAobmFtZWRBdHRyTWFwKQorICAgICAgICAq
Y2xvbmUtPmF0dHJpYnV0ZXMoKSA9ICpuYW1lZEF0dHJNYXA7CisKKyAgICBpZiAoZGVlcCkKKyAg
ICAgICAgY2xvbmVDaGlsZE5vZGVzKGNsb25lKTsKKworICAgIHJldHVybiBjbG9uZTsKIH0KIAog
dm9pZCBFbGVtZW50SW1wbDo6cmVtb3ZlQXR0cmlidXRlKCBOb2RlSW1wbDo6SWQgaWQsIGludCAm
ZXhjZXB0aW9uY29kZSApCkBAIC0zNTEsMzYgKzM2MiwyNCBAQCB2b2lkIEVsZW1lbnRJbXBsOjpz
ZXRBdHRyaWJ1dGVNYXAoIE5hbWVkCiBib29sIEVsZW1lbnRJbXBsOjpoYXNBdHRyaWJ1dGVzKCkg
Y29uc3QKIHsKICAgICB1cGRhdGVTdHlsZUF0dHJpYnV0ZUlmTmVlZGVkKCk7Ci0KICAgICByZXR1
cm4gbmFtZWRBdHRyTWFwICYmIG5hbWVkQXR0ck1hcC0+bGVuZ3RoKCkgPiAwOwogfQogCiBET01T
dHJpbmcgRWxlbWVudEltcGw6Om5vZGVOYW1lKCkgY29uc3QKIHsKLSAgICByZXR1cm4gdGFnTmFt
ZSgpOwotfQotCi1ET01TdHJpbmcgRWxlbWVudEltcGw6OnRhZ05hbWUoKSBjb25zdAotewotICAg
IERPTVN0cmluZyB0biA9IGdldERvY3VtZW50KCktPnRhZ05hbWUoaWQoKSk7Ci0KLSAgICBpZiAo
bV9wcmVmaXgpCi0gICAgICAgIHJldHVybiBET01TdHJpbmcobV9wcmVmaXgpICsgIjoiICsgdG47
Ci0KKyAgICBET01TdHJpbmcgdG4gPSBtX3RhZ05hbWUubG9jYWxOYW1lKCk7CisgICAgaWYgKG1f
dGFnTmFtZS5oYXNQcmVmaXgoKSkKKyAgICAgICAgcmV0dXJuIERPTVN0cmluZyhtX3RhZ05hbWUu
cHJlZml4KCkpICsgIjoiICsgdG47CiAgICAgcmV0dXJuIHRuOwogfQogCi12b2lkIEVsZW1lbnRJ
bXBsOjpzZXRQcmVmaXgoIGNvbnN0IERPTVN0cmluZyAmX3ByZWZpeCwgaW50ICZleGNlcHRpb25j
b2RlICkKK3ZvaWQgRWxlbWVudEltcGw6OnNldFByZWZpeChjb25zdCBBdG9taWNTdHJpbmcgJl9w
cmVmaXgsIGludCAmZXhjZXB0aW9uY29kZSkKIHsKICAgICBjaGVja1NldFByZWZpeChfcHJlZml4
LCBleGNlcHRpb25jb2RlKTsKICAgICBpZiAoZXhjZXB0aW9uY29kZSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgaWYgKG1fcHJlZml4KQotICAgICAgICBtX3ByZWZpeC0+ZGVyZWYoKTsKLSAgICBt
X3ByZWZpeCA9IF9wcmVmaXguaW1wbGVtZW50YXRpb24oKTsKLSAgICBpZiAobV9wcmVmaXgpCi0g
ICAgICAgIG1fcHJlZml4LT5yZWYoKTsKKyAgICBtX3RhZ05hbWUuc2V0UHJlZml4KF9wcmVmaXgp
OwogfQogCiB2b2lkIEVsZW1lbnRJbXBsOjpjcmVhdGVBdHRyaWJ1dGVNYXAoKSBjb25zdApAQCAt
NTIxLDE4ICs1MjAsNiBAQCB2b2lkIEVsZW1lbnRJbXBsOjpyZWNhbGNTdHlsZSggU3R5bGVDaGFu
CiAgICAgc2V0SGFzQ2hhbmdlZENoaWxkKCBmYWxzZSApOwogfQogCi0vLyBET00gU2VjdGlvbiAx
LjEuMQotYm9vbCBFbGVtZW50SW1wbDo6Y2hpbGRBbGxvd2VkKCBOb2RlSW1wbCAqbmV3Q2hpbGQg
KQotewotICAgIGlmICghY2hpbGRUeXBlQWxsb3dlZChuZXdDaGlsZC0+bm9kZVR5cGUoKSkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIEZvciBYTUwgZG9jdW1lbnRzLCB3ZSBhcmUg
bm9uLXZhbGlkYXRpbmcgYW5kIGRvIG5vdCBjaGVjayBhZ2FpbnN0IGEgRFRELCBldmVuIGZvciBI
VE1MIGVsZW1lbnRzLgotICAgIGlmIChnZXREb2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpKQot
ICAgICAgICByZXR1cm4gY2hlY2tDaGlsZChpZCgpLCBuZXdDaGlsZC0+aWQoKSwgIWdldERvY3Vt
ZW50KCktPmluQ29tcGF0TW9kZSgpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogYm9vbCBFbGVt
ZW50SW1wbDo6Y2hpbGRUeXBlQWxsb3dlZCggdW5zaWduZWQgc2hvcnQgdHlwZSApCiB7CiAgICAg
c3dpdGNoICh0eXBlKSB7CkBAIC01NjksNyArNTU2LDcgQEAgdm9pZCBFbGVtZW50SW1wbDo6ZGlz
cGF0Y2hBdHRyQWRkaXRpb25FdgogCiBET01TdHJpbmcgRWxlbWVudEltcGw6Om9wZW5UYWdTdGFy
dFRvU3RyaW5nKCkgY29uc3QKIHsKLSAgICBET01TdHJpbmcgcmVzdWx0ID0gRE9NU3RyaW5nKCI8
IikgKyB0YWdOYW1lKCk7CisgICAgRE9NU3RyaW5nIHJlc3VsdCA9IERPTVN0cmluZygiPCIpICsg
bm9kZU5hbWUoKTsKIAogICAgIE5hbWVkQXR0ck1hcEltcGwgKmF0dHJNYXAgPSBhdHRyaWJ1dGVz
KHRydWUpOwogCkBAIC02MTAsNyArNTk3LDcgQEAgRE9NU3RyaW5nIEVsZW1lbnRJbXBsOjp0b1N0
cmluZygpIGNvbnN0CiAJfQogCiAJcmVzdWx0ICs9ICI8LyI7Ci0JcmVzdWx0ICs9IHRhZ05hbWUo
KTsKKwlyZXN1bHQgKz0gbm9kZU5hbWUoKTsKIAlyZXN1bHQgKz0gIj4iOwogICAgIH0gZWxzZSB7
CiAJcmVzdWx0ICs9ICIgLz4iOwpAQCAtNzU5LDEyICs3NDYsNyBAQCBDU1NTdHlsZURlY2xhcmF0
aW9uSW1wbCAqRWxlbWVudEltcGw6OnN0CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotWE1MRWxl
bWVudEltcGw6OlhNTEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIERPTVN0cmluZ0ltcGwg
Kl90YWdOYW1lKQotICAgIDogRWxlbWVudEltcGwoZG9jKQotewotICAgIG1faWQgPSBkb2MtPmRv
Y3VtZW50KCktPnRhZ0lkKDAgLyogbm8gbmFtZXNwYWNlICovLCBfdGFnTmFtZSwgIGZhbHNlIC8q
IGFsbG9jYXRlICovKTsKLX0KLQorLyoKIFhNTEVsZW1lbnRJbXBsOjpYTUxFbGVtZW50SW1wbChE
b2N1bWVudFB0ciAqZG9jLCBET01TdHJpbmdJbXBsICpfcXVhbGlmaWVkTmFtZSwgRE9NU3RyaW5n
SW1wbCAqX25hbWVzcGFjZVVSSSkKICAgICA6IEVsZW1lbnRJbXBsKGRvYykKIHsKQEAgLTc4MCw0
OSArNzYyLDI0IEBAIFhNTEVsZW1lbnRJbXBsOjpYTUxFbGVtZW50SW1wbChEb2N1bWVudFAKICAg
ICAgICAgRE9NU3RyaW5nSW1wbCogbG9jYWxOYW1lID0gX3F1YWxpZmllZE5hbWUtPmNvcHkoKTsK
ICAgICAgICAgbG9jYWxOYW1lLT5yZWYoKTsKICAgICAgICAgbG9jYWxOYW1lLT5yZW1vdmUoMCxj
b2xvbnBvcysxKTsKLSAgICAgICAgbV9pZCA9IGRvYy0+ZG9jdW1lbnQoKS0+dGFnSWQoX25hbWVz
cGFjZVVSSSwgbG9jYWxOYW1lLCBmYWxzZSAvKiBhbGxvY2F0ZSAqLyk7CisgICAgICAgIG1faWQg
PSBkb2MtPmRvY3VtZW50KCktPnRhZ0lkKF9uYW1lc3BhY2VVUkksIGxvY2FsTmFtZSwgZmFsc2Up
OwogICAgICAgICBsb2NhbE5hbWUtPmRlcmVmKCk7Ci0gICAgICAgIG1fcHJlZml4ID0gX3F1YWxp
ZmllZE5hbWUtPmNvcHkoKTsKLSAgICAgICAgbV9wcmVmaXgtPnJlZigpOwotICAgICAgICBtX3By
ZWZpeC0+dHJ1bmNhdGUoY29sb25wb3MpOworICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IFRo
aXMgaXMgYSB0ZW1wb3Jhcnkgc2l0dWF0aW9uIGZvciBzdGFnZSBvbmUgb2YgdGhlIFF1YWxpZmll
ZE5hbWUgcGF0Y2guICBUaGlzIGlzIGFsc28gYSByZWFsbHkgc3R1cGlkIHdheSB0bworICAgICAg
ICAvLyBoYXZlIHRvIGhhbmRsZSB0aGUgcHJlZml4LiAgV2F5IHRvbyBtdWNoIGNvcHlpbmcuICBX
ZSBzaG91bGQgbWFrZSBzdXJlIHRoZSBYTUwgdG9rZW5pemVyIGhhcyBkb25lIHRoZSBzcGxpdAor
ICAgICAgICAvLyBhbHJlYWR5IGludG8gcHJlZml4IGFuZCBsb2NhbE5hbWUuCisgICAgICAgIERP
TVN0cmluZ0ltcGwqIHByZWZpeCA9IF9xdWFsaWZpZWROYW1lLT5jb3B5KCk7CisgICAgICAgIHBy
ZWZpeC0+cmVmKCk7CisgICAgICAgIHByZWZpeC0+dHJ1bmNhdGUoY29sb25wb3MpOworICAgICAg
ICBtX3RhZ05hbWUgPSBRdWFsaWZpZWROYW1lKHByZWZpeCwgbnVsbEF0b20sIG51bGxBdG9tKTsK
KyAgICAgICAgcHJlZml4LT5kZXJlZigpOwogICAgIH0KLSAgICBlbHNlIHsKKyAgICBlbHNlCiAg
ICAgICAgIC8vIG5vIHByZWZpeAotICAgICAgICBtX2lkID0gZG9jLT5kb2N1bWVudCgpLT50YWdJ
ZChfbmFtZXNwYWNlVVJJLCBfcXVhbGlmaWVkTmFtZSwgZmFsc2UgLyogYWxsb2NhdGUgKi8pOwot
ICAgICAgICBtX3ByZWZpeCA9IDA7Ci0gICAgfQorICAgICAgICBtX2lkID0gZG9jLT5kb2N1bWVu
dCgpLT50YWdJZChfbmFtZXNwYWNlVVJJLCBfcXVhbGlmaWVkTmFtZSwgZmFsc2UpOwogfQogCi1Y
TUxFbGVtZW50SW1wbDo6flhNTEVsZW1lbnRJbXBsKCkKLXsKLX0KLQotRE9NU3RyaW5nIFhNTEVs
ZW1lbnRJbXBsOjpsb2NhbE5hbWUoKSBjb25zdAotewotICAgIHJldHVybiBnZXREb2N1bWVudCgp
LT50YWdOYW1lKG1faWQpOwotfQotCi1ET01TdHJpbmcgWE1MRWxlbWVudEltcGw6Om5hbWVzcGFj
ZVVSSSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdldERvY3VtZW50KCktPm5hbWVzcGFjZVVSSSht
X2lkKTsKLX0KLQotTm9kZUltcGwgKlhNTEVsZW1lbnRJbXBsOjpjbG9uZU5vZGUgKCBib29sIGRl
ZXAgKQotewotICAgIC8vICMjIyB3ZSBsb3NlIG5hbWVzcGFjZSBoZXJlIEZJWE1FCi0gICAgLy8g
c2hvdWxkIHBhc3MgaWQgYXJvdW5kCi0gICAgWE1MRWxlbWVudEltcGwgKmNsb25lID0gbmV3IFhN
TEVsZW1lbnRJbXBsKGRvY1B0cigpLCBnZXREb2N1bWVudCgpLT50YWdOYW1lKG1faWQpLmltcGxl
bWVudGF0aW9uKCkpOwotICAgIGNsb25lLT5tX2lkID0gbV9pZDsKLQotICAgIC8vIGNsb25lIGF0
dHJpYnV0ZXMKLSAgICBpZiAobmFtZWRBdHRyTWFwKQotICAgICAgICAqY2xvbmUtPmF0dHJpYnV0
ZXMoZmFsc2UpID0gKm5hbWVkQXR0ck1hcDsKLQotICAgIGlmIChkZWVwKQotICAgICAgICBjbG9u
ZUNoaWxkTm9kZXMoY2xvbmUpOwotCi0gICAgcmV0dXJuIGNsb25lOwotfQorKi8KIAogLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQogCkBAIC0xMjcwLDggKzEyMjcsOCBAQCB2b2lkIE5hbWVkTWFwcGVkQXR0
ck1hcEltcGw6OnBhcnNlQ2xhc3NBCiAgICAgfQogfQogCi1TdHlsZWRFbGVtZW50SW1wbDo6U3R5
bGVkRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgICA6IEVsZW1lbnRJbXBsKGRvYykK
K1N0eWxlZEVsZW1lbnRJbXBsOjpTdHlsZWRFbGVtZW50SW1wbChjb25zdCBRdWFsaWZpZWROYW1l
JiBuYW1lLCBEb2N1bWVudFB0ciAqZG9jKQorICAgIDogRWxlbWVudEltcGwobmFtZSwgZG9jKQog
ewogICAgIG1faW5saW5lU3R5bGVEZWNsID0gMDsKICAgICBtX2lzU3R5bGVBdHRyaWJ1dGVWYWxp
ZCA9IHRydWU7CkluZGV4OiBraHRtbC94bWwvZG9tX2VsZW1lbnRpbXBsLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwveG1sL2RvbV9lbGVtZW50aW1wbC5oLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjQxCmRpZmYgLXUgLXAgLXIxLjQxIGtodG1sL3htbC9kb21f
ZWxlbWVudGltcGwuaAotLS0ga2h0bWwveG1sL2RvbV9lbGVtZW50aW1wbC5oCTEyIE1heSAyMDA1
IDE3OjExOjIyIC0wMDAwCTEuNDEKKysrIGtodG1sL3htbC9kb21fZWxlbWVudGltcGwuaAk4IEp1
bCAyMDA1IDAzOjA0OjQ2IC0wMDAwCkBAIC0yMywxMyArMjMsMTQgQEAKICAqIEJvc3RvbiwgTUEg
MDIxMTEtMTMwNywgVVNBLgogICoKICAqLwotI2lmbmRlZiBfRE9NX0VMRU1FTlRJbXBsX2hfCi0j
ZGVmaW5lIF9ET01fRUxFTUVOVEltcGxfaF8KKyNpZm5kZWYgX0RPTV9FTEVNRU5USU1QTF9oXwor
I2RlZmluZSBfRE9NX0VMRU1FTlRJTVBMX2hfCiAKICNpbmNsdWRlICJkb21fbm9kZWltcGwuaCIK
ICNpbmNsdWRlICJ4bWwvZG9tX3N0cmluZ2ltcGwuaCIKICNpbmNsdWRlICJtaXNjL3NoYXJlZC5o
IgogI2luY2x1ZGUgImNzcy9jc3NfdmFsdWVpbXBsLmgiCisjaW5jbHVkZSAiZG9tX3FuYW1lLmgi
CiAKICNpZiBBUFBMRV9DSEFOR0VTCiAjaWZkZWYgX19PQkpDX18KQEAgLTEyOCw4ICsxMjksOCBA
QCBwdWJsaWM6CiAgICAgLy8gRE9NIG1ldGhvZHMgb3ZlcnJpZGRlbiBmcm9tICBwYXJlbnQgY2xh
c3NlcwogICAgIHZpcnR1YWwgRE9NU3RyaW5nIG5vZGVOYW1lKCkgY29uc3Q7CiAgICAgdmlydHVh
bCB1bnNpZ25lZCBzaG9ydCBub2RlVHlwZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgRE9NU3RyaW5n
IHByZWZpeCgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBzZXRQcmVmaXgoY29uc3QgRE9NU3Ry
aW5nICZfcHJlZml4LCBpbnQgJmV4Y2VwdGlvbmNvZGUgKTsKKyAgICB2aXJ0dWFsIGNvbnN0IEF0
b21pY1N0cmluZyYgcHJlZml4KCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNldFByZWZpeChj
b25zdCBBdG9taWNTdHJpbmcgJl9wcmVmaXgsIGludCAmZXhjZXB0aW9uY29kZSApOwogCiAgICAg
dmlydHVhbCBET01TdHJpbmcgbm9kZVZhbHVlKCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHNl
dE5vZGVWYWx1ZSggY29uc3QgRE9NU3RyaW5nICYsIGludCAmZXhjZXB0aW9uY29kZSApOwpAQCAt
MTU2LDcgKzE1Nyw3IEBAIGNsYXNzIEVsZW1lbnRJbXBsIDogcHVibGljIENvbnRhaW5lck5vZGUK
ICAgICBmcmllbmQgY2xhc3MgTm9kZUltcGw7CiAgICAgZnJpZW5kIGNsYXNzIGtodG1sOjpDU1NT
dHlsZVNlbGVjdG9yOwogcHVibGljOgotICAgIEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2Mp
OworICAgIEVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50
UHRyICpkb2MpOwogICAgIH5FbGVtZW50SW1wbCgpOwogCiAgICAgLy8gVXNlZCB0byBxdWlja2x5
IGRldGVybWluZSB3aGV0aGVyIG9yIG5vdCBhbiBlbGVtZW50IGhhcyBhIGdpdmVuIENTUyBjbGFz
cy4KQEAgLTE4NiwxNSArMTg3LDI0IEBAIHB1YmxpYzoKICAgICBTaGFyZWRQdHI8QXR0ckltcGw+
IHNldEF0dHJpYnV0ZU5vZGVOUyhBdHRySW1wbCAqbmV3QXR0ciwgaW50ICZleGNlcHRpb24pIHsg
cmV0dXJuIHNldEF0dHJpYnV0ZU5vZGUobmV3QXR0ciwgZXhjZXB0aW9uKTsgfQogICAgIFNoYXJl
ZFB0cjxBdHRySW1wbD4gcmVtb3ZlQXR0cmlidXRlTm9kZShBdHRySW1wbCAqb2xkQXR0ciwgaW50
ICZleGNlcHRpb24pOwogICAgIAotICAgIERPTVN0cmluZyBwcmVmaXgoKSBjb25zdCB7IHJldHVy
biBtX3ByZWZpeDsgfQotICAgIHZvaWQgc2V0UHJlZml4KGNvbnN0IERPTVN0cmluZyAmX3ByZWZp
eCwgaW50ICZleGNlcHRpb25jb2RlICk7Ci0KICAgICB2aXJ0dWFsIENTU1N0eWxlRGVjbGFyYXRp
b25JbXBsICpzdHlsZSgpOwogCisgICAgdmlydHVhbCBjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdO
YW1lKCkgY29uc3QgeyByZXR1cm4gbV90YWdOYW1lOyB9CisgICAgdmlydHVhbCBib29sIGhhc1Rh
Z05hbWUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSkgY29uc3QgeyByZXR1cm4gbV90YWdO
YW1lLm1hdGNoZXModGFnTmFtZSk7IH0KKyAgICAKKyAgICAvLyBBIG1vcmUgbGlnaHR3ZWlnaHQg
Y2hlY2sgdGhhbiBoYXNUYWdOYW1lLiAgVXNlIHRoaXMgY2hlY2sgd2hlbiB5b3Uga25vdyB0aGUg
bmFtZXNwYWNlcyBvZiB0aGUgdHdvIFF1YWxpZmllZE5hbWVzIG1hdGNoLCBlLmcuLCB0aGF0IHRo
ZXkncmUKKyAgICAvLyBib3RoIEhUTUwgbmFtZXMuCisgICAgYm9vbCBoYXNMb2NhbE5hbWUoY29u
c3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSkgY29uc3QgeyByZXR1cm4gbV90YWdOYW1lLmxvY2Fs
TmFtZSgpID09IHRhZ05hbWUubG9jYWxOYW1lKCk7IH0KKyAgICBib29sIGhhc0xvY2FsTmFtZShj
b25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSkgY29uc3QgeyByZXR1cm4gbV90YWdOYW1lLmxv
Y2FsTmFtZSgpID09IGxvY2FsTmFtZTsgfQorCisgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJp
bmcmIGxvY2FsTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFnTmFtZS5sb2NhbE5hbWUoKTsgfQor
ICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgoKSBjb25zdCB7IHJldHVybiBt
X3RhZ05hbWUucHJlZml4KCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0UHJlZml4KGNvbnN0IEF0
b21pY1N0cmluZyAmX3ByZWZpeCwgaW50ICZleGNlcHRpb25jb2RlKTsKKyAgICB2aXJ0dWFsIGNv
bnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJKCkgY29uc3QgeyByZXR1cm4gbV90YWdOYW1l
Lm5hbWVzcGFjZVVSSSgpOyB9CisgICAgCiAgICAgLy8gRE9NIG1ldGhvZHMgb3ZlcnJpZGRlbiBm
cm9tICBwYXJlbnQgY2xhc3NlcwotICAgIHZpcnR1YWwgRE9NU3RyaW5nIHRhZ05hbWUoKSBjb25z
dDsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0IG5vZGVUeXBlKCkgY29uc3Q7Ci0gICAgdmly
dHVhbCBOb2RlSW1wbCAqY2xvbmVOb2RlICggYm9vbCBkZWVwICkgPSAwOworICAgIHZpcnR1YWwg
Tm9kZUltcGwgKmNsb25lTm9kZShib29sIGRlZXApOwogICAgIHZpcnR1YWwgRE9NU3RyaW5nIG5v
ZGVOYW1lKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlzRWxlbWVudE5vZGUoKSBjb25zdCB7
IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b0RvY3VtZW50KCk7
CkBAIC0yMjEsNyArMjMxLDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCByZWNhbGNTdHls
ZSggU3R5bGVDaGFuZ2UgPSBOb0NoYW5nZSApOwogCiAgICAgdmlydHVhbCB2b2lkIG1vdXNlRXZl
bnRIYW5kbGVyKCBNb3VzZUV2ZW50ICovKmV2Ki8sIGJvb2wgLyppbnNpZGUqLyApIHt9OwotICAg
IHZpcnR1YWwgYm9vbCBjaGlsZEFsbG93ZWQoIE5vZGVJbXBsICpuZXdDaGlsZCApOwogICAgIHZp
cnR1YWwgYm9vbCBjaGlsZFR5cGVBbGxvd2VkKCB1bnNpZ25lZCBzaG9ydCB0eXBlICk7CiAgCiAg
ICAgdmlydHVhbCBBdHRyaWJ1dGVJbXBsKiBjcmVhdGVBdHRyaWJ1dGUoSWQgaWQsIERPTVN0cmlu
Z0ltcGwqIHZhbHVlKTsKQEAgLTI1NCwyOSArMjYzLDcgQEAgcHJpdmF0ZToKIAogcHJvdGVjdGVk
OiAvLyBtZW1iZXIgdmFyaWFibGVzCiAgICAgbXV0YWJsZSBOYW1lZEF0dHJNYXBJbXBsICpuYW1l
ZEF0dHJNYXA7Ci0gICAgRE9NU3RyaW5nSW1wbCAqbV9wcmVmaXg7Ci19OwotCi0KLWNsYXNzIFhN
TEVsZW1lbnRJbXBsIDogcHVibGljIEVsZW1lbnRJbXBsCi17Ci0KLXB1YmxpYzoKLSAgICBYTUxF
bGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCBET01TdHJpbmdJbXBsICpfdGFnTmFtZSk7Ci0g
ICAgWE1MRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgRE9NU3RyaW5nSW1wbCAqX3F1YWxp
ZmllZE5hbWUsIERPTVN0cmluZ0ltcGwgKl9uYW1lc3BhY2VVUkkpOwotICAgIH5YTUxFbGVtZW50
SW1wbCgpOwotCi0gICAgLy8gRE9NIG1ldGhvZHMgb3ZlcnJpZGRlbiBmcm9tICBwYXJlbnQgY2xh
c3NlcwotICAgIHZpcnR1YWwgRE9NU3RyaW5nIG5hbWVzcGFjZVVSSSgpIGNvbnN0OwotICAgIHZp
cnR1YWwgRE9NU3RyaW5nIGxvY2FsTmFtZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgTm9kZUltcGwg
KmNsb25lTm9kZSAoIGJvb2wgZGVlcCApOwotCi0gICAgLy8gT3RoZXIgbWV0aG9kcyAobm90IHBh
cnQgb2YgRE9NKQotICAgIHZpcnR1YWwgYm9vbCBpc1hNTEVsZW1lbnROb2RlKCkgY29uc3QgeyBy
ZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9
Ci0KLXByb3RlY3RlZDoKLSAgICBJZCBtX2lkOworICAgIFF1YWxpZmllZE5hbWUgbV90YWdOYW1l
OwogfTsKIAogLy8gdGhlIG1hcCBvZiBhdHRyaWJ1dGVzIG9mIGFuIGVsZW1lbnQKQEAgLTQxNCw3
ICs0MDEsNyBAQCBwcml2YXRlOgogY2xhc3MgU3R5bGVkRWxlbWVudEltcGwgOiBwdWJsaWMgRWxl
bWVudEltcGwKIHsKIHB1YmxpYzoKLSAgICBTdHlsZWRFbGVtZW50SW1wbChEb2N1bWVudFB0ciAq
ZG9jKTsKKyAgICBTdHlsZWRFbGVtZW50SW1wbChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1l
LCBEb2N1bWVudFB0ciAqZG9jKTsKICAgICB2aXJ0dWFsIH5TdHlsZWRFbGVtZW50SW1wbCgpOwog
CiAgICAgdmlydHVhbCBib29sIGlzU3R5bGVkRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7
IH0KSW5kZXg6IGtodG1sL3htbC9kb21fbm9kZWltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3htbC9kb21fbm9kZWltcGwuY3BwLHYKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjE1NgpkaWZmIC11IC1wIC1yMS4xNTYga2h0bWwveG1sL2RvbV9ub2RlaW1w
bC5jcHAKLS0tIGtodG1sL3htbC9kb21fbm9kZWltcGwuY3BwCTIzIEp1biAyMDA1IDE5OjQ3OjUw
IC0wMDAwCTEuMTU2CisrKyBraHRtbC94bWwvZG9tX25vZGVpbXBsLmNwcAk4IEp1bCAyMDA1IDAz
OjA0OjQ3IC0wMDAwCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5jbHVkZSAiZG9tL2RvbV9leGNlcHRp
b24uaCIKICNpbmNsdWRlICJkb20vZG9tMl9ldmVudHMuaCIKICNpbmNsdWRlICJtaXNjL2h0bWxh
dHRycy5oIgotI2luY2x1ZGUgIm1pc2MvaHRtbHRhZ3MuaCIKICNpbmNsdWRlICJ4bWwvZG9tX2Vs
ZW1lbnRpbXBsLmgiCiAjaW5jbHVkZSAieG1sL2RvbV90ZXh0aW1wbC5oIgogI2luY2x1ZGUgInht
bC9kb20yX2V2ZW50c2ltcGwuaCIKQEAgLTUwLDcgKzQ5LDggQEAKICNpbmNsdWRlICJraHRtbHZp
ZXcuaCIKICNpbmNsdWRlICJraHRtbF9wYXJ0LmgiCiAKLSNpbmNsdWRlICJodG1sL2R0ZC5oIgor
Ly8gRklYTUU6IFNob3VsZCBub3QgaGF2ZSB0byBpbmNsdWRlIHRoaXMuICBDdXQgdGhlIEhUTUwg
ZGVwZW5kZW5jeSEKKyNpbmNsdWRlICJodG1sbmFtZXMuaCIKIAogI2lmbmRlZiBLSFRNTF9OT19Y
QkwKICNpbmNsdWRlICJ4YmwveGJsX2JpbmRpbmdfbWFuYWdlci5oIgpAQCAtNjQsOSArNjQsMzAg
QEAKICNkZWZpbmUgTE9HKGNoYW5uZWwsIGZvcm1hdEFuZEFyZ3MuLi4pICgodm9pZCkwKQogI2Vu
ZGlmCiAKLXVzaW5nIG5hbWVzcGFjZSBET007CiB1c2luZyBuYW1lc3BhY2Uga2h0bWw7CiAKK25h
bWVzcGFjZSBET00geworLyoqCisgKiBOb2RlTGlzdCB3aGljaCBsaXN0cyBhbGwgTm9kZXMgaW4g
YSBkb2N1bWVudCB3aXRoIGEgZ2l2ZW4gdGFnIG5hbWUKKyAqLworY2xhc3MgVGFnTm9kZUxpc3RJ
bXBsIDogcHVibGljIE5vZGVMaXN0SW1wbAoreworcHVibGljOgorICAgIFRhZ05vZGVMaXN0SW1w
bChOb2RlSW1wbCAqbiwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IEF0
b21pY1N0cmluZyYgbG9jYWxOYW1lKTsKKworICAgIC8vIERPTSBtZXRob2RzIG92ZXJyaWRkZW4g
ZnJvbSAgcGFyZW50IGNsYXNzZXMKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgbGVuZ3RoKCkg
Y29uc3Q7CisgICAgdmlydHVhbCBOb2RlSW1wbCAqaXRlbSAodW5zaWduZWQgbG9uZyBpbmRleCkg
Y29uc3Q7CisKKyAgICAvLyBPdGhlciBtZXRob2RzIChub3QgcGFydCBvZiBET00pCisKK3Byb3Rl
Y3RlZDoKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZU1hdGNoZXMoTm9kZUltcGwgKnRlc3ROb2RlKSBj
b25zdDsKKworICAgIEF0b21pY1N0cmluZyBtX25hbWVzcGFjZVVSSTsKKyAgICBBdG9taWNTdHJp
bmcgbV9sb2NhbE5hbWU7Cit9OworCiBOb2RlSW1wbDo6Tm9kZUltcGwoRG9jdW1lbnRQdHIgKmRv
YykKICAgICA6IGRvY3VtZW50KGRvYyksCiAgICAgICBtX3ByZXZpb3VzKDApLApAQCAtMTU0LDcg
KzE3NSw3IEBAIE5vZGVJbXBsICpOb2RlSW1wbDo6bGFzdENoaWxkKCkgY29uc3QKICAgcmV0dXJu
IDA7CiB9CiAKLU5vZGVJbXBsICpOb2RlSW1wbDo6bGFzdERlc2NlbmRlbnQoKSBjb25zdAorTm9k
ZUltcGwgKk5vZGVJbXBsOjpsYXN0RGVzY2VuZGFudCgpIGNvbnN0CiB7CiAgICAgTm9kZUltcGwg
Km4gPSBjb25zdF9jYXN0PE5vZGVJbXBsICo+KHRoaXMpOwogICAgIHdoaWxlIChuICYmIG4tPmxh
c3RDaGlsZCgpKQpAQCAtMjM5LDEzICsyNjAsMTMgQEAgdm9pZCBOb2RlSW1wbDo6bm9ybWFsaXpl
ICgpCiAgICAgfQogfQogCi1ET01TdHJpbmcgTm9kZUltcGw6OnByZWZpeCgpIGNvbnN0Citjb25z
dCBBdG9taWNTdHJpbmcmIE5vZGVJbXBsOjpwcmVmaXgoKSBjb25zdAogewogICAgIC8vIEZvciBu
b2RlcyBvdGhlciB0aGFuIGVsZW1lbnRzIGFuZCBhdHRyaWJ1dGVzLCB0aGUgcHJlZml4IGlzIGFs
d2F5cyBudWxsCi0gICAgcmV0dXJuIERPTVN0cmluZygpOworICAgIHJldHVybiBudWxsQXRvbTsK
IH0KIAotdm9pZCBOb2RlSW1wbDo6c2V0UHJlZml4KGNvbnN0IERPTVN0cmluZyAmLypfcHJlZml4
Ki8sIGludCAmZXhjZXB0aW9uY29kZSApCit2b2lkIE5vZGVJbXBsOjpzZXRQcmVmaXgoY29uc3Qg
QXRvbWljU3RyaW5nICYvKl9wcmVmaXgqLywgaW50ICZleGNlcHRpb25jb2RlICkKIHsKICAgICAv
LyBUaGUgc3BlYyBzYXlzIHRoYXQgZm9yIG5vZGVzIG90aGVyIHRoYW4gZWxlbWVudHMgYW5kIGF0
dHJpYnV0ZXMsIHByZWZpeCBpcyBhbHdheXMgbnVsbC4KICAgICAvLyBJdCBkb2VzIG5vdCBzYXkg
d2hhdCB0byBkbyB3aGVuIHRoZSB1c2VyIHRyaWVzIHRvIHNldCB0aGUgcHJlZml4IG9uIGFub3Ro
ZXIgdHlwZSBvZgpAQCAtMjUzLDE0ICsyNzQsMTQgQEAgdm9pZCBOb2RlSW1wbDo6c2V0UHJlZml4
KGNvbnN0IERPTVN0cmluZwogICAgIGV4Y2VwdGlvbmNvZGUgPSBET01FeGNlcHRpb246Ok5BTUVT
UEFDRV9FUlI7CiB9CiAKLURPTVN0cmluZyBOb2RlSW1wbDo6bG9jYWxOYW1lKCkgY29uc3QKK2Nv
bnN0IEF0b21pY1N0cmluZyYgTm9kZUltcGw6OmxvY2FsTmFtZSgpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIERPTVN0cmluZygpOworICAgIHJldHVybiBlbXB0eUF0b207CiB9CiAKLURPTVN0cmluZyBO
b2RlSW1wbDo6bmFtZXNwYWNlVVJJKCkgY29uc3QKK2NvbnN0IEF0b21pY1N0cmluZyYgTm9kZUlt
cGw6Om5hbWVzcGFjZVVSSSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIERPTVN0cmluZygpOworICAg
IHJldHVybiBlbXB0eUF0b207CiB9CiAKIHZvaWQgTm9kZUltcGw6OnNldEZpcnN0Q2hpbGQoTm9k
ZUltcGwgKikKQEAgLTMwNiwxMiArMzI3LDYgQEAgdm9pZCBOb2RlSW1wbDo6c2V0Q2hhbmdlZChi
b29sIGIpCiAgICAgfQogfQogCi1ib29sIE5vZGVJbXBsOjppc0lubGluZSgpIGNvbnN0Ci17Ci0g
ICAgaWYgKG1fcmVuZGVyKSByZXR1cm4gbV9yZW5kZXItPnN0eWxlKCktPmRpc3BsYXkoKSA9PSBr
aHRtbDo6SU5MSU5FOwotICAgIHJldHVybiAhaXNFbGVtZW50Tm9kZSgpOwotfQotCiBib29sIE5v
ZGVJbXBsOjppc0ZvY3VzYWJsZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTAw
Niw0MyArMTAyMSwzNCBAQCBOb2RlSW1wbCAqTm9kZUltcGw6OnRyYXZlcnNlUHJldmlvdXNOb2Rl
CiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgTm9kZUltcGw6OmNoZWNrU2V0UHJlZml4KGNvbnN0
IERPTVN0cmluZyAmX3ByZWZpeCwgaW50ICZleGNlcHRpb25jb2RlKQordm9pZCBOb2RlSW1wbDo6
Y2hlY2tTZXRQcmVmaXgoY29uc3QgQXRvbWljU3RyaW5nICZfcHJlZml4LCBpbnQgJmV4Y2VwdGlv
bmNvZGUpCiB7CiAgICAgLy8gUGVyZm9ybSBlcnJvciBjaGVja2luZyBhcyByZXF1aXJlZCBieSBz
cGVjIGZvciBzZXR0aW5nIE5vZGUucHJlZml4LiBVc2VkIGJ5CiAgICAgLy8gRWxlbWVudEltcGw6
OnNldFByZWZpeCgpIGFuZCBBdHRySW1wbDo6c2V0UHJlZml4KCkKIAotI2lmIDAKLSAgICAvLyBG
SVhNRTogQWRkIHRoaXMgY2hlY2sgKGJ1dCBub3QgaW4gYSB3YXkgdGhhdCBkZXBlbmRzIG9uIHRo
ZSBDKysgRE9NISkKLSAgICAvLyBJTlZBTElEX0NIQVJBQ1RFUl9FUlI6IFJhaXNlZCBpZiB0aGUg
c3BlY2lmaWVkIHByZWZpeCBjb250YWlucyBhbiBpbGxlZ2FsIGNoYXJhY3Rlci4KLSAgICBpZiAo
IUVsZW1lbnQ6OmtodG1sVmFsaWRQcmVmaXgoX3ByZWZpeCkpIHsKLSAgICAgICAgZXhjZXB0aW9u
Y29kZSA9IERPTUV4Y2VwdGlvbjo6SU5WQUxJRF9DSEFSQUNURVJfRVJSOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotI2VuZGlmCi0KKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHN1cHBvcnQgZm9y
IElOVkFMSURfQ0hBUkFDVEVSX0VSUjogUmFpc2VkIGlmIHRoZSBzcGVjaWZpZWQgcHJlZml4IGNv
bnRhaW5zIGFuIGlsbGVnYWwgY2hhcmFjdGVyLgorICAgIAogICAgIC8vIE5PX01PRElGSUNBVElP
Tl9BTExPV0VEX0VSUjogUmFpc2VkIGlmIHRoaXMgbm9kZSBpcyByZWFkb25seS4KICAgICBpZiAo
aXNSZWFkT25seSgpKSB7CiAgICAgICAgIGV4Y2VwdGlvbmNvZGUgPSBET01FeGNlcHRpb246Ok5P
X01PRElGSUNBVElPTl9BTExPV0VEX0VSUjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IC8vIE5BTUVTUEFDRV9FUlI6IC0gUmFpc2VkIGlmIHRoZSBzcGVjaWZpZWQgcHJlZml4IGlzIG1h
bGZvcm1lZAorICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgTkFNRVNQQUNFX0VSUjogLSBSYWlzZWQg
aWYgdGhlIHNwZWNpZmllZCBwcmVmaXggaXMgbWFsZm9ybWVkCisgICAgLy8gV2UgaGF2ZSB0byBj
b21tZW50IHRoaXMgb3V0LCBzaW5jZSBpdCdzIHVzZWQgZm9yIGF0dHJpYnV0ZXMgYW5kIHRhZyBu
YW1lcywgYW5kIHdlJ3ZlIG9ubHkKKyAgICAvLyBzd2l0Y2hlZCBvbmUgb3Zlci4KKyAgICAvKgog
ICAgIC8vIC0gaWYgdGhlIG5hbWVzcGFjZVVSSSBvZiB0aGlzIG5vZGUgaXMgbnVsbCwKICAgICAv
LyAtIGlmIHRoZSBzcGVjaWZpZWQgcHJlZml4IGlzICJ4bWwiIGFuZCB0aGUgbmFtZXNwYWNlVVJJ
IG9mIHRoaXMgbm9kZSBpcyBkaWZmZXJlbnQgZnJvbQogICAgIC8vICAgImh0dHA6Ly93d3cudzMu
b3JnL1hNTC8xOTk4L25hbWVzcGFjZSIsCiAgICAgLy8gLSBpZiB0aGlzIG5vZGUgaXMgYW4gYXR0
cmlidXRlIGFuZCB0aGUgc3BlY2lmaWVkIHByZWZpeCBpcyAieG1sbnMiIGFuZAogICAgIC8vICAg
dGhlIG5hbWVzcGFjZVVSSSBvZiB0aGlzIG5vZGUgaXMgZGlmZmVyZW50IGZyb20gImh0dHA6Ly93
d3cudzMub3JnLzIwMDAveG1sbnMvIiwKICAgICAvLyAtIG9yIGlmIHRoaXMgbm9kZSBpcyBhbiBh
dHRyaWJ1dGUgYW5kIHRoZSBxdWFsaWZpZWROYW1lIG9mIHRoaXMgbm9kZSBpcyAieG1sbnMiIFtO
YW1lc3BhY2VzXS4KLSAgICBpZiAoCi0jaWYgMAotICAgICAgICAvLyBGSVhNRTogQWRkIHRoaXMg
Y2hlY2sgKGJ1dCBub3QgaW4gYSB3YXkgdGhhdCBkZXBlbmRzIG9uIHRoZSBDKysgRE9NISkKLSAg
ICAgICAgRWxlbWVudDo6a2h0bWxNYWxmb3JtZWRQcmVmaXgoX3ByZWZpeCkgfHwKLSNlbmRpZgot
ICAgICAgICAobmFtZXNwYWNlUGFydChpZCgpKSA9PSBub05hbWVzcGFjZSAmJiBpZCgpID4gSURf
TEFTVF9UQUcpIHx8CisgICAgaWYgKChuYW1lc3BhY2VQYXJ0KGlkKCkpID09IG5vTmFtZXNwYWNl
ICYmIGlkKCkgPiBJRF9MQVNUX1RBRykgfHwKICAgICAgICAgKF9wcmVmaXggPT0gInhtbCIgJiYg
RE9NU3RyaW5nKGdldERvY3VtZW50KCktPm5hbWVzcGFjZVVSSShpZCgpKSkgIT0gImh0dHA6Ly93
d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIpKSB7CiAgICAgICAgIGV4Y2VwdGlvbmNvZGUg
PSBET01FeGNlcHRpb246Ok5BTUVTUEFDRV9FUlI7CiAgICAgICAgIHJldHVybjsKLSAgICB9Cisg
ICAgfSovCiB9CiAKIHZvaWQgTm9kZUltcGw6OmNoZWNrQWRkQ2hpbGQoTm9kZUltcGwgKm5ld0No
aWxkLCBpbnQgJmV4Y2VwdGlvbmNvZGUpCkBAIC0xMjgzLDkgKzEyODksMTAgQEAgUmVuZGVyT2Jq
ZWN0ICogTm9kZUltcGw6Om5leHRSZW5kZXJlcigpCiAgICAgcmV0dXJuIDA7CiB9CiAKKy8vIEZJ
WE1FOiBUaGlzIGNvZGUgaXMgdXNlZCBieSBlZGl0aW5nLiAgU2VlbXMgbGlrZSBpdCBjb3VsZCBt
b3ZlIG92ZXIgdGhlcmUgYW5kIG5vdCBwb2xsdXRlIE5vZGVJbXBsLgogYm9vbCBOb2RlSW1wbDo6
aXNBdG9taWNOb2RlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gIWhhc0NoaWxkTm9kZXMoKSB8fCAo
aWQoKSA9PSBJRF9PQkpFQ1QgJiYgcmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5pc1JlcGxhY2Vk
KCkpOworICAgIHJldHVybiAhaGFzQ2hpbGROb2RlcygpIHx8IChyZW5kZXJlcigpICYmIHJlbmRl
cmVyKCktPmlzV2lkZ2V0KCkpOwogfQogCiBOb2RlSW1wbCAqTm9kZUltcGw6OnByZXZpb3VzTm9k
ZUNvbnNpZGVyaW5nQXRvbWljTm9kZXMoKSBjb25zdApAQCAtMTQwMiwxMyArMTQwOSwxNSBAQCBs
b25nIE5vZGVJbXBsOjptYXhPZmZzZXQoKSBjb25zdAogICAgIHJldHVybiAxOwogfQogCisvLyBG
SVhNRTogU2hvdWxkbid0IHRoZXNlIGZ1bmN0aW9ucyBiZSBpbiB0aGUgZWRpdGluZyBjb2RlPyAg
Q29kZSB0aGF0IGFza3MgcXVlc3Rpb25zIGFib3V0IEhUTUwgaW4gdGhlIGNvcmUgRE9NIGNsYXNz
CisvLyBpcyBvYnZpb3VzbHkgbWlzcGxhY2VkLgogLy8gbWV0aG9kIGZvciBlZGl0aW5nIG1hZG5l
c3MsIHdoaWNoIGFsbG93cyBCUiwxIGFzIGEgcG9zaXRpb24sIHRob3VnaCB0aGF0IGlzIGluY29y
cmVjdAogbG9uZyBOb2RlSW1wbDo6bWF4RGVlcE9mZnNldCgpIGNvbnN0CiB7CiAgICAgaWYgKG9m
ZnNldEluQ2hhcmFjdGVycyhub2RlVHlwZSgpKSkKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PGNvbnN0IFRleHRJbXBsKj4odGhpcyktPmxlbmd0aCgpOwogICAgICAgICAKLSAgICBpZiAoaWQo
KSA9PSBJRF9CUiB8fCAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5pc1JlcGxhY2VkKCkpKQor
ICAgIGlmIChoYXNUYWdOYW1lKEhUTUxOYW1lczo6YnIoKSkgfHwgKHJlbmRlcmVyKCkgJiYgcmVu
ZGVyZXIoKS0+aXNSZXBsYWNlZCgpKSkKICAgICAgICAgcmV0dXJuIDE7CiAKICAgICByZXR1cm4g
Y2hpbGROb2RlQ291bnQoKTsKQEAgLTE0NjQsNyArMTQ3Myw3IEBAIEVsZW1lbnRJbXBsICpOb2Rl
SW1wbDo6ZW5jbG9zaW5nQmxvY2tGbG8KICAgICAgICAgbiA9IG4tPnBhcmVudE5vZGUoKTsKICAg
ICAgICAgaWYgKCFuKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGlmIChuLT5pc0Jsb2Nr
Rmxvd09yVGFibGUoKSB8fCBuLT5pZCgpID09IElEX0JPRFkpCisgICAgICAgIGlmIChuLT5pc0Js
b2NrRmxvd09yVGFibGUoKSB8fCBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Ym9keSgpKSkKICAg
ICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxFbGVtZW50SW1wbCAqPihuKTsKICAgICB9CiAg
ICAgcmV0dXJuIDA7CkBAIC0xNDgwLDcgKzE0ODksNyBAQCBFbGVtZW50SW1wbCAqTm9kZUltcGw6
OmVuY2xvc2luZ0Jsb2NrRmxvCiAgICAgICAgIG4gPSBuLT5wYXJlbnROb2RlKCk7CiAgICAgICAg
IGlmICghbikKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBpZiAobi0+aXNCbG9ja0Zsb3co
KSB8fCBuLT5pZCgpID09IElEX0JPRFkpCisgICAgICAgIGlmIChuLT5pc0Jsb2NrRmxvdygpIHx8
IG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpib2R5KCkpKQogICAgICAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PEVsZW1lbnRJbXBsICo+KG4pOwogICAgIH0KICAgICByZXR1cm4gMDsKQEAgLTE0
OTMsNyArMTUwMiw3IEBAIEVsZW1lbnRJbXBsICpOb2RlSW1wbDo6ZW5jbG9zaW5nSW5saW5lRWwK
IAogICAgIHdoaWxlICgxKSB7CiAgICAgICAgIHAgPSBuLT5wYXJlbnROb2RlKCk7Ci0gICAgICAg
IGlmICghcCB8fCBwLT5pc0Jsb2NrRmxvdygpIHx8IHAtPmlkKCkgPT0gSURfQk9EWSkKKyAgICAg
ICAgaWYgKCFwIHx8IHAtPmlzQmxvY2tGbG93KCkgfHwgcC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
OmJvZHkoKSkpCiAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RWxlbWVudEltcGwgKj4o
bik7CiAgICAgICAgIC8vIEFsc28gc3RvcCBpZiBhbnkgcHJldmlvdXMgc2libGluZyBpcyBhIGJs
b2NrCiAgICAgICAgIGZvciAoTm9kZUltcGwgKnNpYmxpbmcgPSBuLT5wcmV2aW91c1NpYmxpbmco
KTsgc2libGluZzsgc2libGluZyA9IHNpYmxpbmctPnByZXZpb3VzU2libGluZygpKSB7CkBAIC0x
NTEyLDcgKzE1MjEsNyBAQCBFbGVtZW50SW1wbCAqTm9kZUltcGw6OnJvb3RFZGl0YWJsZUVsZW1l
CiAgICAgICAgIHJldHVybiAwOwogCiAgICAgTm9kZUltcGwgKm4gPSBjb25zdF9jYXN0PE5vZGVJ
bXBsICo+KHRoaXMpOwotICAgIGlmIChuLT5pZCgpID09IElEX0JPRFkpCisgICAgaWYgKG4tPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjpib2R5KCkpKQogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
RWxlbWVudEltcGwgKj4obik7CiAKICAgICBOb2RlSW1wbCAqcmVzdWx0ID0gbi0+aXNFZGl0YWJs
ZUJsb2NrKCkgPyBuIDogMDsKQEAgLTE1MjAsNyArMTUyOSw3IEBAIEVsZW1lbnRJbXBsICpOb2Rl
SW1wbDo6cm9vdEVkaXRhYmxlRWxlbWUKICAgICAgICAgbiA9IG4tPnBhcmVudE5vZGUoKTsKICAg
ICAgICAgaWYgKCFuIHx8ICFuLT5pc0NvbnRlbnRFZGl0YWJsZSgpKQogICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGlmIChuLT5pZCgpID09IElEX0JPRFkpIHsKKyAgICAgICAgaWYgKG4tPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjpib2R5KCkpKSB7CiAgICAgICAgICAgICByZXN1bHQgPSBuOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTE1NDAsNiArMTU0OSw4IEBAIGJvb2wg
Tm9kZUltcGw6OmluU2FtZUNvbnRhaW5pbmdCbG9ja0Zsb3cKICAgICByZXR1cm4gbiA/IGVuY2xv
c2luZ0Jsb2NrRmxvd0VsZW1lbnQoKSA9PSBuLT5lbmNsb3NpbmdCbG9ja0Zsb3dFbGVtZW50KCkg
OiBmYWxzZTsKIH0KIAorLy8gRklYTUU6IEVuZCBvZiBvYnZpb3VzbHkgbWlzcGxhY2VkIEhUTUwg
ZWRpdGluZyBmdW5jdGlvbnMuICBUcnkgdG8gbW92ZSB0aGVzZSBvdXQgb2YgTm9kZUltcGwuCisK
IHZvaWQgTm9kZUltcGw6OmFkZEV2ZW50TGlzdGVuZXIoY29uc3QgRE9NU3RyaW5nICZ0eXBlLCBF
dmVudExpc3RlbmVyICpsaXN0ZW5lciwgYm9vbCB1c2VDYXB0dXJlKQogewogICAgIGFkZEV2ZW50
TGlzdGVuZXIoRXZlbnRJbXBsOjp0eXBlVG9JZCh0eXBlKSwgbGlzdGVuZXIsIHVzZUNhcHR1cmUp
OwpAQCAtMTU1MCwyNSArMTU2MSwxNSBAQCB2b2lkIE5vZGVJbXBsOjpyZW1vdmVFdmVudExpc3Rl
bmVyKGNvbnN0CiAgICAgcmVtb3ZlRXZlbnRMaXN0ZW5lcihFdmVudEltcGw6OnR5cGVUb0lkKHR5
cGUpLCBsaXN0ZW5lciwgdXNlQ2FwdHVyZSk7CiB9CiAKLVNoYXJlZFB0cjxOb2RlTGlzdEltcGw+
IE5vZGVJbXBsOjpnZXRFbGVtZW50c0J5VGFnTmFtZU5TICggY29uc3QgRE9NU3RyaW5nICZuYW1l
c3BhY2VVUkksIGNvbnN0IERPTVN0cmluZyAmbG9jYWxOYW1lICkKK1NoYXJlZFB0cjxOb2RlTGlz
dEltcGw+IE5vZGVJbXBsOjpnZXRFbGVtZW50c0J5VGFnTmFtZU5TKGNvbnN0IERPTVN0cmluZyAm
bmFtZXNwYWNlVVJJLCBjb25zdCBET01TdHJpbmcgJmxvY2FsTmFtZSkKIHsKLSAgICBpZiAobG9j
YWxOYW1lLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gU2hhcmVkUHRyPE5vZGVMaXN0SW1wbD4o
KTsKLQotICAgIElkIGlkTWFzayA9IG5hbWVzcGFjZU1hc2sgfCBsb2NhbE5hbWVNYXNrOwotICAg
IGlmIChsb2NhbE5hbWVbMF0gPT0gJyonKQotICAgICAgICBpZE1hc2sgJj0gfmxvY2FsTmFtZU1h
c2s7Ci0gICAgaWYgKG5hbWVzcGFjZVVSSS5pc051bGwoKSB8fCBuYW1lc3BhY2VVUklbMF0gPT0g
JyonKQotICAgICAgICBpZE1hc2sgJj0gfm5hbWVzcGFjZU1hc2s7Ci0KLSAgICBJZCBpZCA9IDA7
IC8vIDAgbWVhbnMgImFsbCBpdGVtcyIKLSAgICBpZiAoKGlkTWFzayAmIGxvY2FsTmFtZU1hc2sp
IHx8ICFuYW1lc3BhY2VVUkkuaXNOdWxsKCkpIHsgLy8gbm90IGdldEVsZW1lbnRzQnlUYWdOYW1l
KCIqIikKLSAgICAgICAgaWQgPSBnZXREb2N1bWVudCgpLT50YWdJZChuYW1lc3BhY2VVUkkuaW1w
bGVtZW50YXRpb24oKSwgbG9jYWxOYW1lLmltcGxlbWVudGF0aW9uKCksIHRydWUpOwotICAgICAg
ICBpZiAoICFpZCApIC8vIG5vdCBmb3VuZCAtPiB3ZSB3YW50IHRvIHJldHVybiBhbiBlbXB0eSBs
aXN0LCBub3QgImFsbCBpdGVtcyIKLSAgICAgICAgICAgIGlkID0gKElkKS0xOyAvLyBIQUNLLiBI
RUFEIGhhcyBhIGNsZWFuZXIgaW1wbGVtZW50YXRpb24gb2YgVGFnTm9kZUxpc3RJbXBsIGl0IHNl
ZW1zLgotICAgIH0KLQotICAgIHJldHVybiBTaGFyZWRQdHI8Tm9kZUxpc3RJbXBsPihuZXcgVGFn
Tm9kZUxpc3RJbXBsKHRoaXMsIGlkLCBpZE1hc2spKTsKKyAgICBpZiAobmFtZXNwYWNlVVJJLmlz
TnVsbCgpIHx8IGxvY2FsTmFtZS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIFNoYXJlZFB0cjxO
b2RlTGlzdEltcGw+KCk7IC8vIEZJWE1FOiBXaG8gY2FyZXMgYWJvdXQgdGhpcyBhZGRpdGlvbmFs
IGNoZWNrPworICAgIAorICAgIERPTVN0cmluZyBuYW1lID0gbG9jYWxOYW1lOworICAgIGlmIChn
ZXREb2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpKQorICAgICAgICBuYW1lID0gbG9jYWxOYW1l
Lmxvd2VyKCk7CisgICAgcmV0dXJuIFNoYXJlZFB0cjxOb2RlTGlzdEltcGw+KG5ldyBUYWdOb2Rl
TGlzdEltcGwodGhpcywgQXRvbWljU3RyaW5nKG5hbWVzcGFjZVVSSSksIEF0b21pY1N0cmluZyhu
YW1lKSkpOwogfQogCiBib29sIE5vZGVJbXBsOjppc1N1cHBvcnRlZChjb25zdCBET01TdHJpbmcg
JmZlYXR1cmUsIGNvbnN0IERPTVN0cmluZyAmdmVyc2lvbikKQEAgLTE1OTIsMTMgKzE1OTMsNiBA
QCBOYW1lZEF0dHJNYXBJbXBsICpOb2RlSW1wbDo6YXR0cmlidXRlcygpCiAgICAgcmV0dXJuIDA7
CiB9CiAKLSNpZiBBUFBMRV9DSEFOR0VTCi1Ob2RlSW1wbDo6SWQgTm9kZUltcGw6OmlkZW50aWZp
ZXIoKSBjb25zdAotewotICAgIHJldHVybiBpZCgpOwotfQotI2VuZGlmCi0KICNpZm5kZWYgTkRF
QlVHCiAKIHN0YXRpYyB2b2lkIGFwcGVuZEF0dHJpYnV0ZURlc2MoY29uc3QgTm9kZUltcGwgKm5v
ZGUsIFFTdHJpbmcgJnN0cmluZywgTm9kZUltcGw6OklkIGF0dHJJRCwgUVN0cmluZyBhdHRyRGVz
YykKQEAgLTE2MzgsNyArMTYzMiw3IEBAIHZvaWQgTm9kZUltcGw6OnNob3dUcmVlQW5kTWFyayhO
b2RlSW1wbCAKIHsKICAgICBOb2RlSW1wbCAqcm9vdE5vZGU7CiAgICAgTm9kZUltcGwgKm5vZGUg
PSAoTm9kZUltcGwgKil0aGlzOwotICAgIHdoaWxlKG5vZGUtPnBhcmVudE5vZGUoKSAhPSBOVUxM
ICYmIG5vZGUtPmlkKCkgIT0gSURfQk9EWSkKKyAgICB3aGlsZSAobm9kZS0+cGFyZW50Tm9kZSgp
ICYmICFub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Ym9keSgpKSkKICAgICAgICAgbm9kZSA9
IG5vZGUtPnBhcmVudE5vZGUoKTsKICAgICByb290Tm9kZSA9IG5vZGU7CiAJCkBAIC0yMDk0LDEx
ICsyMDg4LDggQEAgTm9kZUltcGwgKkNvbnRhaW5lck5vZGVJbXBsOjphZGRDaGlsZChObwogICAg
IFNoYXJlZFB0cjxOb2RlSW1wbD4gcHJvdGVjdE5ld0NoaWxkKG5ld0NoaWxkKTsgLy8gbWFrZSBz
dXJlIHRoZSBuZXcgY2hpbGQgaXMgcmVmJ2QgYW5kIGRlcmVmJ2Qgc28gd2UgZG9uJ3QgbGVhayBp
dAogCiAgICAgLy8gc2hvcnQgY2hlY2sgZm9yIGNvbnNpc3RlbmN5IHdpdGggRFRECi0gICAgaWYo
IWlzWE1MRWxlbWVudE5vZGUoKSAmJiAhbmV3Q2hpbGQtPmlzWE1MRWxlbWVudE5vZGUoKSAmJiAh
Y2hpbGRBbGxvd2VkKG5ld0NoaWxkKSkKLSAgICB7Ci0gICAgICAgIC8va2REZWJ1ZyggNjAyMCAp
IDw8ICJBZGRDaGlsZCBmYWlsZWQhIGlkPSIgPDwgaWQoKSA8PCAiLCBjaGlsZC0+aWQ9IiA8PCBu
ZXdDaGlsZC0+aWQoKSA8PCBlbmRsOworICAgIGlmIChnZXREb2N1bWVudCgpLT5pc0hUTUxEb2N1
bWVudCgpICYmICFjaGlsZEFsbG93ZWQobmV3Q2hpbGQpKQogICAgICAgICByZXR1cm4gMDsKLSAg
ICB9CiAKICAgICAvLyBqdXN0IGFkZCBpdC4uLgogICAgIG5ld0NoaWxkLT5zZXRQYXJlbnQodGhp
cyk7CkBAIC0yNTM2LDEwICsyNTI3LDEwIEBAIGJvb2wgQ2hpbGROb2RlTGlzdEltcGw6Om5vZGVN
YXRjaGVzKE5vZGUKICAgICByZXR1cm4gdGVzdE5vZGUtPnBhcmVudE5vZGUoKSA9PSByb290Tm9k
ZTsKIH0KIAotVGFnTm9kZUxpc3RJbXBsOjpUYWdOb2RlTGlzdEltcGwoTm9kZUltcGwgKm4sIE5v
ZGVJbXBsOjpJZCBfaWQsIE5vZGVJbXBsOjpJZCBfaWRNYXNrICkKK1RhZ05vZGVMaXN0SW1wbDo6
VGFnTm9kZUxpc3RJbXBsKE5vZGVJbXBsICpuLCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFj
ZVVSSSwgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUpCiAgICAgOiBOb2RlTGlzdEltcGwo
biksIAotICAgICAgbV9pZChfaWQgJiBfaWRNYXNrKSwgCi0gICAgICBtX2lkTWFzayhfaWRNYXNr
KQorICAgICAgbV9uYW1lc3BhY2VVUkkobmFtZXNwYWNlVVJJKSwgCisgICAgICBtX2xvY2FsTmFt
ZShsb2NhbE5hbWUpCiB7CiB9CiAKQEAgLTI1NDgsMTUgKzI1MzksMjAgQEAgdW5zaWduZWQgbG9u
ZyBUYWdOb2RlTGlzdEltcGw6Omxlbmd0aCgpIAogICAgIHJldHVybiByZWN1cnNpdmVMZW5ndGgo
KTsKIH0KIAotTm9kZUltcGwgKlRhZ05vZGVMaXN0SW1wbDo6aXRlbSAoIHVuc2lnbmVkIGxvbmcg
aW5kZXggKSBjb25zdAorTm9kZUltcGwgKlRhZ05vZGVMaXN0SW1wbDo6aXRlbSh1bnNpZ25lZCBs
b25nIGluZGV4KSBjb25zdAogewotICAgIHJldHVybiByZWN1cnNpdmVJdGVtKCBpbmRleCApOwor
ICAgIHJldHVybiByZWN1cnNpdmVJdGVtKGluZGV4KTsKIH0KIAotYm9vbCBUYWdOb2RlTGlzdElt
cGw6Om5vZGVNYXRjaGVzKCBOb2RlSW1wbCAqdGVzdE5vZGUgKSBjb25zdAorYm9vbCBUYWdOb2Rl
TGlzdEltcGw6Om5vZGVNYXRjaGVzKE5vZGVJbXBsICp0ZXN0Tm9kZSkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gKCB0ZXN0Tm9kZS0+aXNFbGVtZW50Tm9kZSgpICYmCi0gICAgICAgICAgICAgKHRlc3RO
b2RlLT5pZCgpICYgbV9pZE1hc2spID09IG1faWQpOworICAgIGlmICghdGVzdE5vZGUtPmlzRWxl
bWVudE5vZGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKG1fbmFtZXNwYWNl
VVJJICE9IHN0YXJBdG9tICYmIG1fbmFtZXNwYWNlVVJJICE9IHRlc3ROb2RlLT5uYW1lc3BhY2VV
UkkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiBtX2xvY2FsTmFt
ZSA9PSBzdGFyQXRvbSB8fCBtX2xvY2FsTmFtZSA9PSB0ZXN0Tm9kZS0+bG9jYWxOYW1lKCk7CiB9
CiAKIE5hbWVOb2RlTGlzdEltcGw6Ok5hbWVOb2RlTGlzdEltcGwoTm9kZUltcGwgKm4sIGNvbnN0
IERPTVN0cmluZyAmdCApCkBAIC0yNTk1LDEwNiArMjU5MSw0IEBAIFNoYXJlZFB0cjxOb2RlSW1w
bD4gTmFtZWROb2RlTWFwSW1wbDo6cmUKICAgICByZXR1cm4gcmVtb3ZlTmFtZWRJdGVtKG1hcElk
KG5hbWVzcGFjZVVSSSwgbG9jYWxOYW1lLCB0cnVlKSwgZXhjZXB0aW9uKTsKIH0KIAotLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotCi0vLyAjIyMgdW51c2VkCi0jaWYgMAotR2VuZXJpY1JPTmFtZWRO
b2RlTWFwSW1wbDo6R2VuZXJpY1JPTmFtZWROb2RlTWFwSW1wbChEb2N1bWVudFB0ciogZG9jKQot
ICAgIDogTmFtZWROb2RlTWFwSW1wbCgpCi17Ci0gICAgbV9kb2MgPSBkb2MtPmRvY3VtZW50KCk7
Ci0gICAgbV9jb250ZW50cyA9IG5ldyBRUHRyTGlzdDxOb2RlSW1wbD47Ci19Ci0KLUdlbmVyaWNS
T05hbWVkTm9kZU1hcEltcGw6On5HZW5lcmljUk9OYW1lZE5vZGVNYXBJbXBsKCkKLXsKLSAgICB3
aGlsZSAobV9jb250ZW50cy0+Y291bnQoKSA+IDApCi0gICAgICAgIG1fY29udGVudHMtPnRha2Uo
MCktPmRlcmVmKCk7Ci0KLSAgICBkZWxldGUgbV9jb250ZW50czsKLX0KLQotTm9kZUltcGwgKkdl
bmVyaWNST05hbWVkTm9kZU1hcEltcGw6OmdldE5hbWVkSXRlbSAoIGNvbnN0IERPTVN0cmluZyAm
bmFtZSwgaW50ICYvKmV4Y2VwdGlvbmNvZGUqLyApIGNvbnN0Ci17Ci0gICAgUVB0ckxpc3RJdGVy
YXRvcjxOb2RlSW1wbD4gaXQoKm1fY29udGVudHMpOwotICAgIGZvciAoOyBpdC5jdXJyZW50KCk7
ICsraXQpCi0gICAgICAgIGlmIChpdC5jdXJyZW50KCktPm5vZGVOYW1lKCkgPT0gbmFtZSkKLSAg
ICAgICAgICAgIHJldHVybiBpdC5jdXJyZW50KCk7Ci0gICAgcmV0dXJuIDA7CiB9Ci0KLU5vZGUg
R2VuZXJpY1JPTmFtZWROb2RlTWFwSW1wbDo6c2V0TmFtZWRJdGVtICggY29uc3QgTm9kZSAmLyph
cmcqLywgaW50ICZleGNlcHRpb25jb2RlICkKLXsKLSAgICAvLyBjYW4ndCBtb2RpZnkgdGhpcyBs
aXN0IHRocm91Z2ggc3RhbmRhcmQgRE9NIGZ1bmN0aW9ucwotICAgIC8vIE5PX01PRElGSUNBVElP
Tl9BTExPV0VEX0VSUjogUmFpc2VkIGlmIHRoaXMgbWFwIGlzIHJlYWRvbmx5Ci0gICAgZXhjZXB0
aW9uY29kZSA9IERPTUV4Y2VwdGlvbjo6Tk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOwotICAg
IHJldHVybiAwOwotfQotCi1Ob2RlIEdlbmVyaWNST05hbWVkTm9kZU1hcEltcGw6OnJlbW92ZU5h
bWVkSXRlbSAoIGNvbnN0IERPTVN0cmluZyAmLypuYW1lKi8sIGludCAmZXhjZXB0aW9uY29kZSAp
Ci17Ci0gICAgLy8gY2FuJ3QgbW9kaWZ5IHRoaXMgbGlzdCB0aHJvdWdoIHN0YW5kYXJkIERPTSBm
dW5jdGlvbnMKLSAgICAvLyBOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI6IFJhaXNlZCBpZiB0
aGlzIG1hcCBpcyByZWFkb25seQotICAgIGV4Y2VwdGlvbmNvZGUgPSBET01FeGNlcHRpb246Ok5P
X01PRElGSUNBVElPTl9BTExPV0VEX0VSUjsKLSAgICByZXR1cm4gMDsKLX0KLQotTm9kZUltcGwg
KkdlbmVyaWNST05hbWVkTm9kZU1hcEltcGw6Oml0ZW0gKCB1bnNpZ25lZCBsb25nIGluZGV4ICkg
Y29uc3QKLXsKLSAgICAvLyAjIyMgY2hlY2sgdGhpcyB3aGVuIGNhbGxpbmcgZnJvbSBqYXZhc2Ny
aXB0IHVzaW5nIC0xID0gMl5zaXplb2YoaW50KS0xCi0gICAgLy8gKGFsc28gZm9yIG90aGVyIHNp
bWlsYXIgbWV0aG9kcykKLSAgICBpZiAoaW5kZXggPj0gbV9jb250ZW50cy0+Y291bnQoKSkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gbV9jb250ZW50cy0+YXQoaW5kZXgpOwotfQot
Ci11bnNpZ25lZCBsb25nIEdlbmVyaWNST05hbWVkTm9kZU1hcEltcGw6Omxlbmd0aCggICkgY29u
c3QKLXsKLSAgICByZXR1cm4gbV9jb250ZW50cy0+Y291bnQoKTsKLX0KLQotTm9kZUltcGwgKkdl
bmVyaWNST05hbWVkTm9kZU1hcEltcGw6OmdldE5hbWVkSXRlbU5TKCBjb25zdCBET01TdHJpbmcg
Jm5hbWVzcGFjZVVSSSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgRE9NU3RyaW5nICZsb2NhbE5hbWUsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAmLypleGNlcHRpb25jb2Rl
Ki8gKSBjb25zdAotewotICAgIE5vZGVJbXBsOjpJZCBzZWFyY2hJZCA9IG1fZG9jLT50YWdJZChu
YW1lc3BhY2VVUkkuaW1wbGVtZW50YXRpb24oKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsTmFtZS5pbXBsZW1lbnRhdGlvbigpLCB0cnVl
KTsKLQotICAgIFFQdHJMaXN0SXRlcmF0b3I8Tm9kZUltcGw+IGl0KCptX2NvbnRlbnRzKTsKLSAg
ICBmb3IgKDsgaXQuY3VycmVudCgpOyArK2l0KQotICAgICAgICBpZiAoaXQuY3VycmVudCgpLT5p
ZCgpID09IHNlYXJjaElkKQotICAgICAgICAgICAgcmV0dXJuIGl0LmN1cnJlbnQoKTsKLQotICAg
IHJldHVybiAwOwotfQotCi1Ob2RlSW1wbCAqR2VuZXJpY1JPTmFtZWROb2RlTWFwSW1wbDo6c2V0
TmFtZWRJdGVtTlMoIE5vZGVJbXBsICovKmFyZyovLCBpbnQgJmV4Y2VwdGlvbmNvZGUgKQotewot
ICAgIC8vIGNhbid0IG1vZGlmeSB0aGlzIGxpc3QgdGhyb3VnaCBzdGFuZGFyZCBET00gZnVuY3Rp
b25zCi0gICAgLy8gTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOiBSYWlzZWQgaWYgdGhpcyBt
YXAgaXMgcmVhZG9ubHkKLSAgICBleGNlcHRpb25jb2RlID0gRE9NRXhjZXB0aW9uOjpOT19NT0RJ
RklDQVRJT05fQUxMT1dFRF9FUlI7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLU5vZGVJbXBsICpHZW5l
cmljUk9OYW1lZE5vZGVNYXBJbXBsOjpyZW1vdmVOYW1lZEl0ZW1OUyggY29uc3QgRE9NU3RyaW5n
ICYvKm5hbWVzcGFjZVVSSSovLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBET01TdHJpbmcgJi8qbG9jYWxOYW1lKi8sCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAm
ZXhjZXB0aW9uY29kZSApCi17Ci0gICAgLy8gY2FuJ3QgbW9kaWZ5IHRoaXMgbGlzdCB0aHJvdWdo
IHN0YW5kYXJkIERPTSBmdW5jdGlvbnMKLSAgICBleGNlcHRpb25jb2RlID0gRE9NRXhjZXB0aW9u
OjpOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQg
R2VuZXJpY1JPTmFtZWROb2RlTWFwSW1wbDo6YWRkTm9kZShOb2RlSW1wbCAqbikKLXsKLSAgICAv
LyBUaGUgc3BlYyBzYXlzIHRoYXQgaW4gdGhlIGNhc2Ugb2YgZHVwbGljYXRlcyB3ZSBvbmx5IGtl
ZXAgdGhlIGZpcnN0IG9uZQotICAgIGludCBleGNlcHRpb25jb2RlID0gMDsKLSAgICBpZiAoZ2V0
TmFtZWRJdGVtKG4tPm5vZGVOYW1lKCksZXhjZXB0aW9uY29kZSkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIG4tPnJlZigpOwotICAgIG1fY29udGVudHMtPmFwcGVuZChuKTsKLX0KLQotI2VuZGlm
CkluZGV4OiBraHRtbC94bWwvZG9tX25vZGVpbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1dlYkNvcmUva2h0bWwveG1sL2RvbV9ub2RlaW1wbC5oLHYKcmV0cmlldmluZyByZXZp
c2lvbiAxLjg3CmRpZmYgLXUgLXAgLXIxLjg3IGtodG1sL3htbC9kb21fbm9kZWltcGwuaAotLS0g
a2h0bWwveG1sL2RvbV9ub2RlaW1wbC5oCTIzIEp1biAyMDA1IDE5OjQ3OjUwIC0wMDAwCTEuODcK
KysrIGtodG1sL3htbC9kb21fbm9kZWltcGwuaAk4IEp1bCAyMDA1IDAzOjA0OjQ4IC0wMDAwCkBA
IC01OSw2ICs1OSw3IEBAIGNsYXNzIEV2ZW50SW1wbDsKIGNsYXNzIEV2ZW50TGlzdGVuZXI7CiBj
bGFzcyBOb2RlTGlzdEltcGw7CiBjbGFzcyBOYW1lZEF0dHJNYXBJbXBsOworY2xhc3MgUXVhbGlm
aWVkTmFtZTsKIGNsYXNzIFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyOwogCiAvLyBUaGUgbmFtZXNw
YWNlIHVzZWQgZm9yIFhIVE1MIGVsZW1lbnRzCkBAIC0xMDIsNiArMTAzLDcgQEAgcHVibGljOgog
ICAgIE1BSU5fVEhSRUFEX0FMTE9DQVRFRDsKIAogICAgIC8vIERPTSBtZXRob2RzICYgYXR0cmli
dXRlcyBmb3IgTm9kZQorICAgIHZpcnR1YWwgYm9vbCBoYXNUYWdOYW1lKGNvbnN0IFF1YWxpZmll
ZE5hbWUmIHRhZ05hbWUpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBET01T
dHJpbmcgbm9kZU5hbWUoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBET01TdHJpbmcgbm9kZVZh
bHVlKCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHNldE5vZGVWYWx1ZSggY29uc3QgRE9NU3Ry
aW5nICZfbm9kZVZhbHVlLCBpbnQgJmV4Y2VwdGlvbmNvZGUgKTsKQEAgLTEyMiwxNCArMTI0LDE0
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlKGludCAmZXhjZXB0aW9uY29kZSk7
CiAgICAgdmlydHVhbCBib29sIGhhc0NoaWxkTm9kZXMgKCAgKSBjb25zdDsKICAgICB2aXJ0dWFs
IE5vZGVJbXBsICpjbG9uZU5vZGUgKCBib29sIGRlZXAgKSA9IDA7Ci0gICAgdmlydHVhbCBET01T
dHJpbmcgbG9jYWxOYW1lKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBET01TdHJpbmcgbmFtZXNwYWNl
VVJJKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBET01TdHJpbmcgcHJlZml4KCkgY29uc3Q7Ci0gICAg
dmlydHVhbCB2b2lkIHNldFByZWZpeChjb25zdCBET01TdHJpbmcgJl9wcmVmaXgsIGludCAmZXhj
ZXB0aW9uY29kZSApOworICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUo
KSBjb25zdDsKKyAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJKCkg
Y29uc3Q7CisgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCgpIGNvbnN0Owor
ICAgIHZpcnR1YWwgdm9pZCBzZXRQcmVmaXgoY29uc3QgQXRvbWljU3RyaW5nICZfcHJlZml4LCBp
bnQgJmV4Y2VwdGlvbmNvZGUpOwogICAgIHZvaWQgbm9ybWFsaXplICgpOwogICAgIHN0YXRpYyBi
b29sIGlzU3VwcG9ydGVkKGNvbnN0IERPTVN0cmluZyAmZmVhdHVyZSwgY29uc3QgRE9NU3RyaW5n
ICZ2ZXJzaW9uKTsKIAotICAgIE5vZGVJbXBsICpsYXN0RGVzY2VuZGVudCgpIGNvbnN0OworICAg
IE5vZGVJbXBsICpsYXN0RGVzY2VuZGFudCgpIGNvbnN0OwogCiAgICAgLy8gT3RoZXIgbWV0aG9k
cyAobm90IHBhcnQgb2YgRE9NKQogICAgIHZpcnR1YWwgYm9vbCBpc0VsZW1lbnROb2RlKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTEzNyw4ICsxMzksOCBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCBib29sIGlzU3R5bGVkRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAg
dmlydHVhbCBib29sIGlzQXR0cmlidXRlTm9kZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAg
ICAgdmlydHVhbCBib29sIGlzVGV4dE5vZGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAg
IHZpcnR1YWwgYm9vbCBpc0NvbW1lbnROb2RlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAg
ICB2aXJ0dWFsIGJvb2wgaXNEb2N1bWVudE5vZGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQot
ICAgIHZpcnR1YWwgYm9vbCBpc1hNTEVsZW1lbnROb2RlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KICAgICBib29sIGlzQmxvY2tGbG93KCkgY29uc3Q7CiAgICAgYm9vbCBpc0Jsb2NrRmxvd09y
VGFibGUoKSBjb25zdDsKICAgICAKQEAgLTE4OCwzNSArMTkwLDE4IEBAIHB1YmxpYzoKICAgICBi
b29sIGluU2FtZVJvb3RFZGl0YWJsZUVsZW1lbnQoTm9kZUltcGwgKik7CiAgICAgYm9vbCBpblNh
bWVDb250YWluaW5nQmxvY2tGbG93RWxlbWVudChOb2RlSW1wbCAqKTsKICAgICAKLSAgICAvLyB1
c2VkIGJ5IHRoZSBwYXJzZXIuIERvZXNuJ3QgZG8gYXMgbWFueSBlcnJvciBjaGVja2luZ3MgYXMK
LSAgICAvLyBhcHBlbmRDaGlsZCgpLCBhbmQgcmV0dXJucyB0aGUgbm9kZSBpbnRvIHdoaWNoIHdp
bGwgYmUgcGFyc2VkIG5leHQuCisgICAgLy8gdXNlZCBieSB0aGUgcGFyc2VyLiBDaGVja3MgYWdh
aW5zdCB0aGUgRFRELCB1bmxpa2UgRE9NIG9wZXJhdGlvbnMgbGlrZQorICAgIC8vIGFwcGVuZENo
aWxkKCksIGFuZCByZXR1cm5zIHRoZSBuZXcgY29udGFpbmVyIG5vZGUgZm9yIGZ1dHVyZSBpbnNl
cnRpb25zIGFzIHlvdSBwYXJzZS4KICAgICB2aXJ0dWFsIE5vZGVJbXBsICphZGRDaGlsZChOb2Rl
SW1wbCAqbmV3Q2hpbGQpOwogICAgIAogICAgIC8vIGNhbGxlZCBieSB0aGUgcGFyc2VyIHdoZW4g
dGhpcyBlbGVtZW50J3MgY2xvc2UgdGFnIGlzIHJlYWNoZWQsCiAgICAgLy8gc2lnbmFsbGluZyB0
aGF0IGFsbCBjaGlsZCB0YWdzIGhhdmUgYmVlbiBwYXJzZWQgYW5kIGFkZGVkLgogICAgIC8vIFRo
aXMgaXMgb25seSBuZWVkZWQgZm9yIDxhcHBsZXQ+IGFuZCA8b2JqZWN0PiBlbGVtZW50cywgd2hp
Y2ggY2FuJ3QgbGF5IHRoZW1zZWx2ZXMgb3V0CiAgICAgLy8gdW50aWwgdGhleSBrbm93IGFsbCBv
ZiB0aGVpciBuZXN0ZWQgPHBhcmFtPnMuIFszNjAzMTkxLCA0MDQwODQ4XQotICAgIHZpcnR1YWwg
dm9pZCBjbG9zZVJlbmRlcmVyKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGNsb3NlUmVuZGVyZXIo
KSB7fQorCisgICAgdHlwZWRlZiBRX1VJTlQzMiBJZDsgLy8gRklYTUU6IFlhbmsgdGhpcyBvbmNl
IGF0dHJpYnV0ZXMgYXJlIGFsc28gc3dpdGNoZWQgb3Zlci4KIAotICAgIHR5cGVkZWYgUV9VSU5U
MzIgSWQ7Ci0gICAgLy8gaWQoKSBpcyB1c2VkIHRvIGVhc2lseSBhbmQgZXhhY3RseSBpZGVudGlm
eSBhIG5vZGUuIEl0Ci0gICAgLy8gaXMgb3B0aW1pemVkIGZvciBxdWljayBjb21wYXJpc29uIGFu
ZCBsb3cgbWVtb3J5IGNvbnN1bXB0aW9uLgotICAgIC8vIGl0cyB2YWx1ZSBkZXBlbmRzIG9uIHRo
ZSBvd25lciBkb2N1bWVudCBvZiB0aGUgbm9kZSBhbmQgaXMKLSAgICAvLyBjYXRlZ29yaXplZCBp
biB0aGUgZm9sbG93aW5nIHdheToKLSAgICAvLyAxLi5JRF9MQVNUX1RBRzogdGhlIG5vZGUgaW5o
ZXJpdHMgSFRNTEVsZW1lbnRJbXBsIGFuZCBpcwotICAgIC8vICAgICAgICAgICAgICAgICBwYXJ0
IG9mIHRoZSBIVE1MIG5hbWVzcGFjZS4KLSAgICAvLyAgICAgICAgICAgICAgICAgVGhlIEhUTUwg
bmFtZXNwYWNlIGlzIGVpdGhlciB0aGUgZ2xvYmFsCi0gICAgLy8gICAgICAgICAgICAgICAgIG9u
ZSAobm8gbmFtZXNwYWNlKSBvciB0aGUgWEhUTUwgbmFtZXNwYWNlCi0gICAgLy8gICAgICAgICAg
ICAgICAgIGRlcGVuZGluZyBvbiB0aGUgb3duZXIgZG9jdW1lbnQncyBkb2N0eXBlCi0gICAgLy8g
SURfTEFTVF9UQUcrMS4uMHhmZmZmOiBub24tSFRNTCBlbGVtZW50cyBpbiB0aGUgZ2xvYmFsIG5h
bWVzcGFjZQotICAgIC8vIG90aGVycyAgICAgICBub24tSFRNTCBlbGVtZW50cyBpbiBhIG5hbWVz
cGFjZS4KLSAgICAvLyAgICAgICAgICAgICAgICAgdGhlIHVwcGVyIDE2IGJpdCBpZGVudGlmeSB0
aGUgbmFtZXNwYWNlCi0gICAgLy8gICAgICAgICAgICAgICAgIHRoZSBsb3dlciAxNiBiaXQgaWRl
bnRpZnkgdGhlIGxvY2FsIHBhcnQgb2YgdGhlCi0gICAgLy8gICAgICAgICAgICAgICAgIHF1YWxp
ZmllZCBlbGVtZW50IG5hbWUuCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0IHsgcmV0dXJuIDA7
IH07Ci0jaWYgQVBQTEVfQ0hBTkdFUwotICAgIElkIGlkZW50aWZpZXIoKSBjb25zdDsKLSNlbmRp
ZgogICAgIGVudW0gTW91c2VFdmVudFR5cGUgewogICAgICAgICBNb3VzZVByZXNzLAogICAgICAg
ICBNb3VzZVJlbGVhc2UsCkBAIC0yNzgsOCArMjYzLDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
Ym9vbCBpc0tleWJvYXJkRm9jdXNhYmxlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlzTW91
c2VGb2N1c2FibGUoKSBjb25zdDsKICAgICAKLSAgICB2aXJ0dWFsIGJvb2wgaXNJbmxpbmUoKSBj
b25zdDsKLSAgICAKICAgICB2aXJ0dWFsIGJvb2wgaXNDb250ZW50RWRpdGFibGUoKSBjb25zdDsK
ICAgICB2aXJ0dWFsIFFSZWN0IGdldFJlY3QoKSBjb25zdDsKIApAQCAtMzY5LDExICszNTIsMTUg
QEAgcHVibGljOgogICAgIGtodG1sOjpSZW5kZXJPYmplY3QgKnByZXZpb3VzUmVuZGVyZXIoKTsK
ICAgICB2b2lkIHNldFJlbmRlcmVyKGtodG1sOjpSZW5kZXJPYmplY3QqIHJlbmRlcmVyKSB7IG1f
cmVuZGVyID0gcmVuZGVyZXI7IH0KICAgICAKLSAgICB2b2lkIGNoZWNrU2V0UHJlZml4KGNvbnN0
IERPTVN0cmluZyAmX3ByZWZpeCwgaW50ICZleGNlcHRpb25jb2RlKTsKLSAgICB2b2lkIGNoZWNr
QWRkQ2hpbGQoTm9kZUltcGwgKm5ld0NoaWxkLCBpbnQgJmV4Y2VwdGlvbmNvZGUpOworICAgIHZv
aWQgY2hlY2tTZXRQcmVmaXgoY29uc3QgQXRvbWljU3RyaW5nICZfcHJlZml4LCBpbnQgJmV4Y2Vw
dGlvbmNvZGUpOwogICAgIGJvb2wgaXNBbmNlc3Rvcihjb25zdCBOb2RlSW1wbCAqKSBjb25zdDsK
LSAgICB2aXJ0dWFsIGJvb2wgY2hpbGRBbGxvd2VkKCBOb2RlSW1wbCAqbmV3Q2hpbGQgKTsKIAor
CS8vIFRoZXNlIHR3byBtZXRob2RzIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuICBUaGUgZm9ybWVy
IGlzIHVzZWQgdG8gZG8gc3RyaWN0IGVycm9yLWNoZWNraW5nCisJLy8gd2hlbiBhZGRpbmcgY2hp
bGRyZW4gdmlhIHRoZSBwdWJsaWMgRE9NIEFQSSAoZS5nLiwgYXBwZW5kQ2hpbGQoKSkuICBUaGUg
bGF0dGVyIGlzIGNhbGxlZCBvbmx5IHdoZW4gcGFyc2luZywgCisJLy8gdG8gc2FuaXR5LWNoZWNr
IGFnYWluc3QgdGhlIERURCBmb3IgZXJyb3IgcmVjb3ZlcnkuCisJdm9pZCBjaGVja0FkZENoaWxk
KE5vZGVJbXBsICpuZXdDaGlsZCwgaW50ICZleGNlcHRpb25jb2RlKTsgICAgLy8gRXJyb3ItY2hl
Y2tpbmcgd2hlbiBhZGRpbmcgdmlhIHRoZSBET00gQVBJCisJdmlydHVhbCBib29sIGNoaWxkQWxs
b3dlZChOb2RlSW1wbCAqbmV3Q2hpbGQpOwkJCQkgICAvLyBFcnJvci1jaGVja2luZyBkdXJpbmcg
cGFyc2luZyB0aGF0IGNoZWNrcyB0aGUgRFRECisJCiAgICAgdmlydHVhbCBsb25nIG1heE9mZnNl
dCgpIGNvbnN0OwogICAgIGxvbmcgbWF4RGVlcE9mZnNldCgpIGNvbnN0OwogICAgIHZpcnR1YWwg
bG9uZyBjYXJldE1pbk9mZnNldCgpIGNvbnN0OwpAQCAtNDgxLDcgKzQ2OCw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIG5vdGlmeU5vZGVMaXN0c1N1YnRyZWVNb2RpZmllZCgpOwogICAgIHZvaWQgbm90
aWZ5TG9jYWxOb2RlTGlzdHNTdWJ0cmVlTW9kaWZpZWQoKTsKIAotICAgIFNoYXJlZFB0cjxOb2Rl
TGlzdEltcGw+IGdldEVsZW1lbnRzQnlUYWdOYW1lKGNvbnN0IERPTVN0cmluZyAmbmFtZSkgeyBy
ZXR1cm4gZ2V0RWxlbWVudHNCeVRhZ05hbWVOUyhET01TdHJpbmcoKSwgbmFtZSk7IH0KKyAgICBT
aGFyZWRQdHI8Tm9kZUxpc3RJbXBsPiBnZXRFbGVtZW50c0J5VGFnTmFtZShjb25zdCBET01TdHJp
bmcgJm5hbWUpIHsgcmV0dXJuIGdldEVsZW1lbnRzQnlUYWdOYW1lTlMoIioiLCBuYW1lKTsgfQog
ICAgIFNoYXJlZFB0cjxOb2RlTGlzdEltcGw+IGdldEVsZW1lbnRzQnlUYWdOYW1lTlMoY29uc3Qg
RE9NU3RyaW5nICZuYW1lc3BhY2VVUkksIGNvbnN0IERPTVN0cmluZyAmbG9jYWxOYW1lKTsKIAog
cHJpdmF0ZTogLy8gbWVtYmVycwpAQCAtNjE4LDMwICs2MDUsNiBAQCBwcm90ZWN0ZWQ6CiAgICAg
dmlydHVhbCBib29sIG5vZGVNYXRjaGVzKCBOb2RlSW1wbCAqdGVzdE5vZGUgKSBjb25zdDsKIH07
CiAKLQotLyoqCi0gKiBOb2RlTGlzdCB3aGljaCBsaXN0cyBhbGwgTm9kZXMgaW4gYSBkb2N1bWVu
dCB3aXRoIGEgZ2l2ZW4gdGFnIG5hbWUKLSAqLwotY2xhc3MgVGFnTm9kZUxpc3RJbXBsIDogcHVi
bGljIE5vZGVMaXN0SW1wbAotewotcHVibGljOgotICAgIFRhZ05vZGVMaXN0SW1wbCggTm9kZUlt
cGwgKm4sIE5vZGVJbXBsOjpJZCB0YWdJZCwgTm9kZUltcGw6OklkIHRhZ0lkTWFzayApOwotCi0g
ICAgLy8gRE9NIG1ldGhvZHMgb3ZlcnJpZGRlbiBmcm9tICBwYXJlbnQgY2xhc3NlcwotCi0gICAg
dmlydHVhbCB1bnNpZ25lZCBsb25nIGxlbmd0aCgpIGNvbnN0OwotICAgIHZpcnR1YWwgTm9kZUlt
cGwgKml0ZW0gKCB1bnNpZ25lZCBsb25nIGluZGV4ICkgY29uc3Q7Ci0KLSAgICAvLyBPdGhlciBt
ZXRob2RzIChub3QgcGFydCBvZiBET00pCi0KLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIGJvb2wg
bm9kZU1hdGNoZXMoIE5vZGVJbXBsICp0ZXN0Tm9kZSApIGNvbnN0OwotCi0gICAgTm9kZUltcGw6
OklkIG1faWQ7Ci0gICAgTm9kZUltcGw6OklkIG1faWRNYXNrOwotfTsKLQotCiAvKioKICAqIE5v
ZGVMaXN0IHdoaWNoIGxpc3RzIGFsbCBOb2RlcyBpbiBhIEVsZW1lbnQgd2l0aCBhIGdpdmVuICJu
YW1lPSIgdGFnCiAgKi8KSW5kZXg6IGtodG1sL3htbC9kb21fcG9zaXRpb24uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3htbC9kb21fcG9zaXRpb24uY3Bw
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjcxCmRpZmYgLXUgLXAgLXIxLjcxIGtodG1sL3htbC9k
b21fcG9zaXRpb24uY3BwCi0tLSBraHRtbC94bWwvZG9tX3Bvc2l0aW9uLmNwcAkyMSBKdW4gMjAw
NSAxODoxMToxMCAtMDAwMAkxLjcxCisrKyBraHRtbC94bWwvZG9tX3Bvc2l0aW9uLmNwcAk4IEp1
bCAyMDA1IDAzOjA0OjQ5IC0wMDAwCkBAIC0zNSw3ICszNSw2IEBACiAjaW5jbHVkZSAiZG9tMl9y
YW5nZWltcGwuaCIKICNpbmNsdWRlICJkb20yX3ZpZXdzaW1wbC5oIgogI2luY2x1ZGUgImhlbHBl
ci5oIgotI2luY2x1ZGUgImh0bWx0YWdzLmgiCiAjaW5jbHVkZSAidGV4dF9hZmZpbml0eS5oIgog
I2luY2x1ZGUgInZpc2libGVfcG9zaXRpb24uaCIKICNpbmNsdWRlICJ2aXNpYmxlX3VuaXRzLmgi
CkBAIC00NSw2ICs0NCw3IEBACiAjaW5jbHVkZSAicmVuZGVyaW5nL3JlbmRlcl9zdHlsZS5oIgog
I2luY2x1ZGUgInJlbmRlcmluZy9yZW5kZXJfdGV4dC5oIgogI2luY2x1ZGUgImVkaXRpbmcvdmlz
aWJsZV90ZXh0LmgiCisjaW5jbHVkZSAiaHRtbG5hbWVzLmgiCiAKICNpZiBBUFBMRV9DSEFOR0VT
CiAjaW5jbHVkZSAiS1dRQXNzZXJ0aW9ucy5oIgpAQCAtNDQwLDcgKzQ0MCw3IEBAIFBvc2l0aW9u
IFBvc2l0aW9uOjpkb3duc3RyZWFtKCkgY29uc3QKIAogICAgICAgICAvLyBzdG9wIGJlZm9yZSBn
b2luZyBhYm92ZSB0aGUgYm9keSwgdXAgaW50byB0aGUgaGVhZAogICAgICAgICAvLyByZXR1cm4g
dGhlIGxhc3QgdmlzaWJsZSBzdHJlYW1lciBwb3NpdGlvbgotICAgICAgICBpZiAoY3VycmVudE5v
ZGUtPmlkKCkgPT0gSURfQk9EWSAmJiBjdXJyZW50T2Zmc2V0ID49IChpbnQpIGN1cnJlbnROb2Rl
LT5jaGlsZE5vZGVDb3VudCgpKQorICAgICAgICBpZiAoY3VycmVudE5vZGUtPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjpib2R5KCkpICYmIGN1cnJlbnRPZmZzZXQgPj0gKGludCkgY3VycmVudE5vZGUt
PmNoaWxkTm9kZUNvdW50KCkpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAg
ICAgICAvLyBsaW1pdCB0cmF2ZXJzYWwgdG8gYmxvY2sgb3IgdGFibGUgZW5jbG9zaW5nIHRoZSBv
cmlnaW5hbCBlbGVtZW50CkBAIC02OTQsNyArNjk0LDcgQEAgYm9vbCBQb3NpdGlvbjo6cmVuZGVy
c0luRGlmZmVyZW50UG9zaXRpbwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgaWYg
KG5vZGUoKSA9PSBwb3Mubm9kZSgpKSB7Ci0gICAgICAgIGlmIChub2RlKCktPmlkKCkgPT0gSURf
QlIpCisgICAgICAgIGlmIChub2RlKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpicigpKSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBpZiAob2Zmc2V0KCkgPT0gcG9zLm9m
ZnNldCgpKQpAQCAtNzA2LDEwICs3MDYsMTAgQEAgYm9vbCBQb3NpdGlvbjo6cmVuZGVyc0luRGlm
ZmVyZW50UG9zaXRpbwogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIGlmIChub2RlKCktPmlk
KCkgPT0gSURfQlIgJiYgcG9zLmluUmVuZGVyZWRDb250ZW50KCkpCisgICAgaWYgKG5vZGUoKS0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJyKCkpICYmIHBvcy5pblJlbmRlcmVkQ29udGVudCgpKQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICAKLSAgICBpZiAocG9zLm5vZGUo
KS0+aWQoKSA9PSBJRF9CUiAmJiBpblJlbmRlcmVkQ29udGVudCgpKQorICAgIGlmIChwb3Mubm9k
ZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YnIoKSkgJiYgaW5SZW5kZXJlZENvbnRlbnQoKSkK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgCiAgICAgaWYgKG5vZGUoKS0+
ZW5jbG9zaW5nQmxvY2tGbG93RWxlbWVudCgpICE9IHBvcy5ub2RlKCktPmVuY2xvc2luZ0Jsb2Nr
Rmxvd0VsZW1lbnQoKSkKQEAgLTc2NCw3ICs3NjQsNyBAQCBQb3NpdGlvbiBQb3NpdGlvbjo6bGVh
ZGluZ1doaXRlc3BhY2VQb3NpCiAgICAgaWYgKGlzTnVsbCgpKQogICAgICAgICByZXR1cm4gUG9z
aXRpb24oKTsKICAgICAKLSAgICBpZiAodXBzdHJlYW0oKS5ub2RlKCktPmlkKCkgPT0gSURfQlIp
CisgICAgaWYgKHVwc3RyZWFtKCkubm9kZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YnIoKSkp
CiAgICAgICAgIHJldHVybiBQb3NpdGlvbigpOwogCiAgICAgUG9zaXRpb24gcHJldiA9IHByZXZp
b3VzQ2hhcmFjdGVyUG9zaXRpb24oYWZmaW5pdHkpOwpAQCAtNzk0LDcgKzc5NCw3IEBAIFBvc2l0
aW9uIFBvc2l0aW9uOjp0cmFpbGluZ1doaXRlc3BhY2VQb3MKICAgICAgICAgfQogICAgIH0KIAot
ICAgIGlmIChkb3duc3RyZWFtKCkubm9kZSgpLT5pZCgpID09IElEX0JSKQorICAgIGlmIChkb3du
c3RyZWFtKCkubm9kZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YnIoKSkpCiAgICAgICAgIHJl
dHVybiBQb3NpdGlvbigpOwogCiAgICAgUG9zaXRpb24gbmV4dCA9IG5leHRDaGFyYWN0ZXJQb3Np
dGlvbihhZmZpbml0eSk7CkluZGV4OiBraHRtbC94bWwvZG9tX3FuYW1lLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC94bWwvZG9tX3FuYW1lLmNwcCx2CnJl
dHJpZXZpbmcgcmV2aXNpb24gMS4yCmRpZmYgLXUgLXAgLXIxLjIga2h0bWwveG1sL2RvbV9xbmFt
ZS5jcHAKLS0tIGtodG1sL3htbC9kb21fcW5hbWUuY3BwCTE2IEp1biAyMDA1IDIxOjA2OjQ2IC0w
MDAwCTEuMgorKysga2h0bWwveG1sL2RvbV9xbmFtZS5jcHAJOCBKdWwgMjAwNSAwMzowNDo0OSAt
MDAwMApAQCAtMTksNDggKzE5LDk4IEBACiAgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4K
ICAqLwogCi0jaW5jbHVkZSA8cXB0cmRpY3QuaD4KICNpbmNsdWRlICJkb21fcW5hbWUuaCIKKyNp
bmNsdWRlICJtaXNjL2hhc2hzZXQuaCIKKwordXNpbmcga2h0bWw6Okhhc2hTZXQ7CiAKIG5hbWVz
cGFjZSBET00gewogCi1zdGF0aWMgUVB0ckRpY3Q8UVB0ckRpY3Q8UVB0ckRpY3Q8UXVhbGlmaWVk
TmFtZTo6UXVhbGlmaWVkTmFtZUltcGw+ID4gPiogZ05hbWVDYWNoZSA9IDA7CitzdHJ1Y3QgUXVh
bGlmaWVkTmFtZUNvbXBvbmVudHMgeworICAgIERPTVN0cmluZ0ltcGwgKm1fcHJlZml4OworICAg
IERPTVN0cmluZ0ltcGwgKm1fbG9jYWxOYW1lOworICAgIERPTVN0cmluZ0ltcGwgKm1fbmFtZXNw
YWNlOworfTsKIAotUXVhbGlmaWVkTmFtZTo6UXVhbGlmaWVkTmFtZShjb25zdCBBdG9taWNTdHJp
bmcmIHAsIGNvbnN0IEF0b21pY1N0cmluZyYgbCwgY29uc3QgQXRvbWljU3RyaW5nJiBuKQorLy8g
R29sZGVuIHJhdGlvIC0gYXJiaXRyYXJ5IHN0YXJ0IHZhbHVlIHRvIGF2b2lkIG1hcHBpbmcgYWxs
IDAncyB0byBhbGwgMCdzCitzdGF0aWMgY29uc3QgdW5zaWduZWQgUEhJID0gMHg5ZTM3NzliOVU7
CisgICAgCitpbmxpbmUgdW5zaWduZWQgaGFzaENvbXBvbmVudHMoY29uc3QgUXVhbGlmaWVkTmFt
ZUNvbXBvbmVudHMmIGJ1ZikKIHsKLSAgICAvLyBPYnRhaW4gYW4gYXBwcm9wcmlhdGUgaW5uZXIg
ZnJvbSBvdXIgZGljdGlvbmFyeS4KLSAgICBRUHRyRGljdDxRUHRyRGljdDxRdWFsaWZpZWROYW1l
SW1wbD4gPiogbmFtZXNwYWNlRGljdCA9IDA7Ci0gICAgUVB0ckRpY3Q8UXVhbGlmaWVkTmFtZUlt
cGw+KiBwcmVmaXhEaWN0ID0gMDsKLSAgICBpZiAoZ05hbWVDYWNoZSkgewotICAgICAgICBuYW1l
c3BhY2VEaWN0ID0gZ05hbWVDYWNoZS0+ZmluZCgodm9pZCopKG4uaW1wbGVtZW50YXRpb24oKSkp
OwotICAgICAgICBpZiAobmFtZXNwYWNlRGljdCkgewotICAgICAgICAgICAgcHJlZml4RGljdCA9
IG5hbWVzcGFjZURpY3QtPmZpbmQoKHZvaWQqKXAuaW1wbGVtZW50YXRpb24oKSk7Ci0gICAgICAg
ICAgICBpZiAocHJlZml4RGljdCkKLSAgICAgICAgICAgICAgICBtX2ltcGwgPSBwcmVmaXhEaWN0
LT5maW5kKCh2b2lkKilsLmltcGxlbWVudGF0aW9uKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgaWYgKCFtX2ltcGwpIHsKLSAgICAgICAgbV9pbXBsID0gbmV3IFF1YWxpZmllZE5hbWVJbXBs
KHAsIGwsIG4pOwotCi0gICAgICAgIC8vIFB1dCB0aGUgb2JqZWN0IGludG8gdGhlIGhhc2guCi0g
ICAgICAgIGlmICghZ05hbWVDYWNoZSkKLSAgICAgICAgICAgIGdOYW1lQ2FjaGUgPSBuZXcgUVB0
ckRpY3Q8UVB0ckRpY3Q8UVB0ckRpY3Q8UXVhbGlmaWVkTmFtZUltcGw+ID4gPjsKLSAgICAgICAg
Ci0gICAgICAgIGlmICghbmFtZXNwYWNlRGljdCkgewotICAgICAgICAgICAgbmFtZXNwYWNlRGlj
dCA9IG5ldyBRUHRyRGljdDxRUHRyRGljdDxRdWFsaWZpZWROYW1lSW1wbD4gPjsKLSAgICAgICAg
ICAgIG5hbWVzcGFjZURpY3QtPnNldEF1dG9EZWxldGUodHJ1ZSk7Ci0gICAgICAgICAgICBnTmFt
ZUNhY2hlLT5pbnNlcnQoKHZvaWQqKW4uaW1wbGVtZW50YXRpb24oKSwgbmFtZXNwYWNlRGljdCk7
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmICghcHJlZml4RGljdCkgewotICAgICAg
ICAgICAgcHJlZml4RGljdCA9IG5ldyBRUHRyRGljdDxRdWFsaWZpZWROYW1lSW1wbD47Ci0gICAg
ICAgICAgICBuYW1lc3BhY2VEaWN0LT5pbnNlcnQoKHZvaWQqKXAuaW1wbGVtZW50YXRpb24oKSwg
cHJlZml4RGljdCk7Ci0gICAgICAgIH0KKyAgICB1bnNpZ25lZCBsID0gc2l6ZW9mKFF1YWxpZmll
ZE5hbWVDb21wb25lbnRzKSAvIHNpemVvZih1aW50MTZfdCk7CisgICAgY29uc3QgdWludDE2X3Qg
KnMgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQxNl90Kj4oJmJ1Zik7CisgICAgdWludDMy
X3QgaGFzaCA9IFBISTsKKyAgICB1aW50MzJfdCB0bXA7CiAgICAgICAgIAotICAgICAgICBwcmVm
aXhEaWN0LT5pbnNlcnQoKHZvaWQqKWwuaW1wbGVtZW50YXRpb24oKSwgbV9pbXBsKTsKKyAgICBp
bnQgcmVtID0gbCAmIDE7CisgICAgbCA+Pj0gMTsKKyAgICAgICAgCisgICAgLy8gTWFpbiBsb29w
CisgICAgZm9yICg7IGwgPiAwOyBsLS0pIHsKKyAgICAgICAgaGFzaCArPSBzWzBdOworICAgICAg
ICB0bXAgPSAoc1sxXSA8PCAxMSkgXiBoYXNoOworICAgICAgICBoYXNoID0gKGhhc2ggPDwgMTYp
IF4gdG1wOworICAgICAgICBzICs9IDI7CisgICAgICAgIGhhc2ggKz0gaGFzaCA+PiAxMTsKICAg
ICB9CiAgICAgCisgICAgLy8gSGFuZGxlIGVuZCBjYXNlCisgICAgaWYgKHJlbSkgeworICAgICAg
ICBoYXNoICs9IHNbMF07CisgICAgICAgIGhhc2ggXj0gaGFzaCA8PCAxMTsKKyAgICAgICAgaGFz
aCArPSBoYXNoID4+IDE3OworICAgIH0KKyAgICAgICAgCisgICAgLy8gRm9yY2UgImF2YWxhbmNo
aW5nIiBvZiBmaW5hbCAxMjcgYml0cworICAgIGhhc2ggXj0gaGFzaCA8PCAzOworICAgIGhhc2gg
Kz0gaGFzaCA+PiA1OworICAgIGhhc2ggXj0gaGFzaCA8PCAyOworICAgIGhhc2ggKz0gaGFzaCA+
PiAxNTsKKyAgICBoYXNoIF49IGhhc2ggPDwgMTA7CisgICAgICAgIAorICAgIC8vIHRoaXMgYXZv
aWRzIGV2ZXIgcmV0dXJuaW5nIGEgaGFzaCBjb2RlIG9mIDAsIHNpbmNlIHRoYXQgaXMgdXNlZCB0
bworICAgIC8vIHNpZ25hbCAiaGFzaCBub3QgY29tcHV0ZWQgeWV0IiwgdXNpbmcgYSB2YWx1ZSB0
aGF0IGlzIGxpa2VseSB0byBiZQorICAgIC8vIGVmZmVjdGl2ZWx5IHRoZSBzYW1lIGFzIDAgd2hl
biB0aGUgbG93IGJpdHMgYXJlIG1hc2tlZAorICAgIGlmIChoYXNoID09IDApCisgICAgICAgIGhh
c2ggPSAweDgwMDAwMDAwOworICAgICAgICAKKyAgICByZXR1cm4gaGFzaDsKK30KKworc3RydWN0
IFFOYW1lSGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgUXVhbGlmaWVkTmFt
ZTo6UXVhbGlmaWVkTmFtZUltcGwgKm5hbWUpIHsgICAgCisgICAgICAgIFF1YWxpZmllZE5hbWVD
b21wb25lbnRzIGNvbXBvbmVudHMgPSB7IG5hbWUtPm1fcHJlZml4LmltcGxlbWVudGF0aW9uKCks
IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLT5t
X2xvY2FsTmFtZS5pbXBsZW1lbnRhdGlvbigpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbmFtZS0+bV9uYW1lc3BhY2UuaW1wbGVtZW50YXRpb24oKSB9
OworICAgICAgICByZXR1cm4gaGFzaENvbXBvbmVudHMoY29tcG9uZW50cyk7CisgICAgfQorICAg
IHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFF1YWxpZmllZE5hbWU6OlF1YWxpZmllZE5hbWVJbXBs
ICphLCBjb25zdCBRdWFsaWZpZWROYW1lOjpRdWFsaWZpZWROYW1lSW1wbCAqYikgeyByZXR1cm4g
YSA9PSBiOyB9Cit9OworCit0eXBlZGVmIEhhc2hTZXQ8UXVhbGlmaWVkTmFtZTo6UXVhbGlmaWVk
TmFtZUltcGwqLCBRTmFtZUhhc2g+IFFOYW1lU2V0OworCitzdGF0aWMgUU5hbWVTZXQgKmdOYW1l
Q2FjaGU7CisKK2lubGluZSBib29sIGVxdWFsQ29tcG9uZW50cyhRdWFsaWZpZWROYW1lOjpRdWFs
aWZpZWROYW1lSW1wbCogY29uc3QmIG5hbWUsIGNvbnN0IFF1YWxpZmllZE5hbWVDb21wb25lbnRz
ICZjb21wb25lbnRzKQoreworICAgIHJldHVybiBjb21wb25lbnRzLm1fbG9jYWxOYW1lID09IG5h
bWUtPm1fbG9jYWxOYW1lLmltcGxlbWVudGF0aW9uKCkgJiYKKyAgICAgICAgICAgY29tcG9uZW50
cy5tX25hbWVzcGFjZSA9PSBuYW1lLT5tX25hbWVzcGFjZS5pbXBsZW1lbnRhdGlvbigpICYmCisg
ICAgICAgICAgIGNvbXBvbmVudHMubV9wcmVmaXggPT0gbmFtZS0+bV9wcmVmaXguaW1wbGVtZW50
YXRpb24oKTsKK30KKworaW5saW5lIFF1YWxpZmllZE5hbWU6OlF1YWxpZmllZE5hbWVJbXBsICpj
b252ZXJ0Q29tcG9uZW50cyhjb25zdCBRdWFsaWZpZWROYW1lQ29tcG9uZW50cyYgY29tcG9uZW50
cywgdW5zaWduZWQgaGFzaCkKK3sKKyAgICByZXR1cm4gbmV3IFF1YWxpZmllZE5hbWU6OlF1YWxp
ZmllZE5hbWVJbXBsKGNvbXBvbmVudHMubV9wcmVmaXgsIGNvbXBvbmVudHMubV9sb2NhbE5hbWUs
IGNvbXBvbmVudHMubV9uYW1lc3BhY2UpOworfQorCisKK1F1YWxpZmllZE5hbWU6OlF1YWxpZmll
ZE5hbWUoY29uc3QgQXRvbWljU3RyaW5nJiBwLCBjb25zdCBBdG9taWNTdHJpbmcmIGwsIGNvbnN0
IEF0b21pY1N0cmluZyYgbikKKyAgICA6IG1faW1wbCgwKQoreworICAgIGlmICghZ05hbWVDYWNo
ZSkKKyAgICAgICAgZ05hbWVDYWNoZSA9IG5ldyBRTmFtZVNldDsKKyAgICBRdWFsaWZpZWROYW1l
Q29tcG9uZW50cyBjb21wb25lbnRzID0geyBwLmltcGxlbWVudGF0aW9uKCksIGwuaW1wbGVtZW50
YXRpb24oKSwgbi5pbXBsZW1lbnRhdGlvbigpIH07CisgICAgbV9pbXBsID0gKmdOYW1lQ2FjaGUt
Pmluc2VydDxRdWFsaWZpZWROYW1lQ29tcG9uZW50cywgaGFzaENvbXBvbmVudHMsIGVxdWFsQ29t
cG9uZW50cywgY29udmVydENvbXBvbmVudHM+KGNvbXBvbmVudHMpLmZpcnN0OyAgICAKICAgICBy
ZWYoKTsKIH0KIApAQCAtODgsMzEgKzEzOCwxNiBAQCBjb25zdCBRdWFsaWZpZWROYW1lJiBRdWFs
aWZpZWROYW1lOjpvcGVyCiAKIHZvaWQgUXVhbGlmaWVkTmFtZTo6ZGVyZWYoKQogewotICAgIGlm
IChtX2ltcGwtPnJlZkNvdW50KCkgPT0gMSkgewotICAgICAgICAvLyBCZWZvcmUgZGVjcmVtZW50
aW5nIHRoZSByZWYgdG8gMCwgcmVtb3ZlIG91cnNlbHZlcyBmcm9tIHRoZSBoYXNoIHRhYmxlLgot
ICAgICAgICBRUHRyRGljdDxRUHRyRGljdDxRdWFsaWZpZWROYW1lSW1wbD4gPiogbmFtZXNwYWNl
RGljdCA9IDA7Ci0gICAgICAgIFFQdHJEaWN0PFF1YWxpZmllZE5hbWVJbXBsPiogcHJlZml4RGlj
dCA9IDA7Ci0gICAgICAgIGlmIChnTmFtZUNhY2hlKSB7Ci0gICAgICAgICAgICBuYW1lc3BhY2VE
aWN0ID0gZ05hbWVDYWNoZS0+ZmluZCgodm9pZCopKG5hbWVzcGFjZVVSSSgpLmltcGxlbWVudGF0
aW9uKCkpKTsKLSAgICAgICAgICAgIGlmIChuYW1lc3BhY2VEaWN0KSB7Ci0gICAgICAgICAgICAg
ICAgcHJlZml4RGljdCA9IG5hbWVzcGFjZURpY3QtPmZpbmQoKHZvaWQqKXByZWZpeCgpLmltcGxl
bWVudGF0aW9uKCkpOwotICAgICAgICAgICAgICAgIGlmIChwcmVmaXhEaWN0KQotICAgICAgICAg
ICAgICAgICAgICBwcmVmaXhEaWN0LT5yZW1vdmUoKHZvaWQqKWxvY2FsTmFtZSgpLmltcGxlbWVu
dGF0aW9uKCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIAorICAgIGlm
IChtX2ltcGwtPmhhc09uZVJlZigpKQorICAgICAgICBnTmFtZUNhY2hlLT5yZW1vdmUobV9pbXBs
KTsKKyAgICAgICAgCiAgICAgbV9pbXBsLT5kZXJlZigpOwogfQogCi1ib29sIG9wZXJhdG9yPT0o
Y29uc3QgQXRvbWljU3RyaW5nJiBhLCBjb25zdCBRdWFsaWZpZWROYW1lJiBxKQoteyAKLSAgICBy
ZXR1cm4gYSA9PSBxLmxvY2FsTmFtZSgpOwotfQotCi1ib29sIG9wZXJhdG9yPT0oY29uc3QgUXVh
bGlmaWVkTmFtZSYgcSwgY29uc3QgQXRvbWljU3RyaW5nJiBhKQordm9pZCBRdWFsaWZpZWROYW1l
OjpzZXRQcmVmaXgoY29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgpCiB7Ci0gICAgcmV0dXJuIGEg
PT0gcS5sb2NhbE5hbWUoKTsKKyAgICBRdWFsaWZpZWROYW1lIG90aGVyKHByZWZpeCwgbG9jYWxO
YW1lKCksIG5hbWVzcGFjZVVSSSgpKTsKKyAgICAqdGhpcyA9IG90aGVyOwogfQogCiB9CkluZGV4
OiBraHRtbC94bWwvZG9tX3FuYW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dl
YkNvcmUva2h0bWwveG1sL2RvbV9xbmFtZS5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIKZGlm
ZiAtdSAtcCAtcjEuMiBraHRtbC94bWwvZG9tX3FuYW1lLmgKLS0tIGtodG1sL3htbC9kb21fcW5h
bWUuaAkxNiBKdW4gMjAwNSAyMTowNjo0NiAtMDAwMAkxLjIKKysrIGtodG1sL3htbC9kb21fcW5h
bWUuaAk4IEp1bCAyMDA1IDAzOjA0OjQ5IC0wMDAwCkBAIC0zMiw5ICszMiw2IEBAIHB1YmxpYzoK
ICAgICBwdWJsaWM6CiAgICAgICAgIFF1YWxpZmllZE5hbWVJbXBsKGNvbnN0IEF0b21pY1N0cmlu
ZyYgcCwgY29uc3QgQXRvbWljU3RyaW5nJiBsLCBjb25zdCBBdG9taWNTdHJpbmcmIG4pIDptX3By
ZWZpeChwKSwgbV9sb2NhbE5hbWUobCksIG1fbmFtZXNwYWNlKG4pIHt9CiAKLSAgICAgICAgZnJp
ZW5kIGNsYXNzIFF1YWxpZmllZE5hbWU7Ci0KLSAgICBwcml2YXRlOgogICAgICAgICBBdG9taWNT
dHJpbmcgbV9wcmVmaXg7CiAgICAgICAgIEF0b21pY1N0cmluZyBtX2xvY2FsTmFtZTsKICAgICAg
ICAgQXRvbWljU3RyaW5nIG1fbmFtZXNwYWNlOwpAQCAtNTQsNiArNTEsOSBAQCBwdWJsaWM6CiAK
ICAgICBib29sIG1hdGNoZXMoY29uc3QgUXVhbGlmaWVkTmFtZSYgb3RoZXIpIGNvbnN0IHsgcmV0
dXJuIG1faW1wbCA9PSBvdGhlci5tX2ltcGwgfHwgKGxvY2FsTmFtZSgpID09IG90aGVyLmxvY2Fs
TmFtZSgpICYmIG5hbWVzcGFjZVVSSSgpID09IG90aGVyLm5hbWVzcGFjZVVSSSgpKTsgfQogCisg
ICAgYm9vbCBoYXNQcmVmaXgoKSBjb25zdCB7IHJldHVybiBtX2ltcGwtPm1fcHJlZml4ICE9IG51
bGxBdG9tOyB9CisgICAgdm9pZCBzZXRQcmVmaXgoY29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgp
OworCiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgoKSBjb25zdCB7IHJldHVybiBtX2lt
cGwtPm1fcHJlZml4OyB9CiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUoKSBjb25z
dCB7IHJldHVybiBtX2ltcGwtPm1fbG9jYWxOYW1lOyB9CiAgICAgY29uc3QgQXRvbWljU3RyaW5n
JiBuYW1lc3BhY2VVUkkoKSBjb25zdCB7IHJldHVybiBtX2ltcGwtPm1fbmFtZXNwYWNlOyB9CkBA
IC02NiwxMSArNjYsMTAgQEAgcHJpdmF0ZToKICAgICBRdWFsaWZpZWROYW1lSW1wbCogbV9pbXBs
OwogfTsKIAotYm9vbCBvcGVyYXRvcj09KGNvbnN0IEF0b21pY1N0cmluZyYgYSwgY29uc3QgUXVh
bGlmaWVkTmFtZSYgcSk7CitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEF0b21pY1N0cmlu
ZyYgYSwgY29uc3QgUXVhbGlmaWVkTmFtZSYgcSkgeyByZXR1cm4gYSA9PSBxLmxvY2FsTmFtZSgp
OyB9CiBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEF0b21pY1N0cmluZyYgYSwgY29uc3Qg
UXVhbGlmaWVkTmFtZSYgcSkgeyByZXR1cm4gYSAhPSBxLmxvY2FsTmFtZSgpOyB9Ci1ib29sIG9w
ZXJhdG9yPT0oY29uc3QgUXVhbGlmaWVkTmFtZSYgcSwgY29uc3QgQXRvbWljU3RyaW5nJiBhKTsK
K2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgUXVhbGlmaWVkTmFtZSYgcSwgY29uc3QgQXRv
bWljU3RyaW5nJiBhKSB7IHJldHVybiBhID09IHEubG9jYWxOYW1lKCk7IH0KIGlubGluZSBib29s
IG9wZXJhdG9yIT0oY29uc3QgUXVhbGlmaWVkTmFtZSYgcSwgY29uc3QgQXRvbWljU3RyaW5nJiBh
KSB7IHJldHVybiBhICE9IHEubG9jYWxOYW1lKCk7IH0KIAotCiB9CiAjZW5kaWYKSW5kZXg6IGto
dG1sL3htbC9kb21fdGV4dGltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9X
ZWJDb3JlL2todG1sL3htbC9kb21fdGV4dGltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjIzCmRpZmYgLXUgLXAgLXIxLjIzIGtodG1sL3htbC9kb21fdGV4dGltcGwuY3BwCi0tLSBraHRt
bC94bWwvZG9tX3RleHRpbXBsLmNwcAkxOSBPY3QgMjAwNCAyMzowNDoyOSAtMDAwMAkxLjIzCisr
KyBraHRtbC94bWwvZG9tX3RleHRpbXBsLmNwcAk4IEp1bCAyMDA1IDAzOjA0OjQ5IC0wMDAwCkBA
IC0zMDQsOSArMzA0LDE0IEBAIENvbW1lbnRJbXBsOjp+Q29tbWVudEltcGwoKQogewogfQogCitj
b25zdCBBdG9taWNTdHJpbmcmIENvbW1lbnRJbXBsOjpsb2NhbE5hbWUoKSBjb25zdAoreworICAg
IHJldHVybiBjb21tZW50QXRvbTsKK30KKwogRE9NU3RyaW5nIENvbW1lbnRJbXBsOjpub2RlTmFt
ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuICIjY29tbWVudCI7CisgICAgcmV0dXJuIGNvbW1lbnRB
dG9tLnN0cmluZygpOwogfQogCiB1bnNpZ25lZCBzaG9ydCBDb21tZW50SW1wbDo6bm9kZVR5cGUo
KSBjb25zdApAQCAtMzE5LDExICszMjQsNiBAQCBOb2RlSW1wbCAqQ29tbWVudEltcGw6OmNsb25l
Tm9kZShib29sIC8qCiAgICAgcmV0dXJuIGdldERvY3VtZW50KCktPmNyZWF0ZUNvbW1lbnQoIHN0
ciApOwogfQogCi1Ob2RlSW1wbDo6SWQgQ29tbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gSURfQ09NTUVOVDsKLX0KLQogLy8gRE9NIFNlY3Rpb24gMS4xLjEKIGJvb2wgQ29tbWVu
dEltcGw6OmNoaWxkVHlwZUFsbG93ZWQoIHVuc2lnbmVkIHNob3J0IC8qdHlwZSovICkKIHsKQEAg
LTM5NCw5ICszOTQsMTQgQEAgVGV4dEltcGwgKlRleHRJbXBsOjpzcGxpdFRleHQoIGNvbnN0IHVu
cwogICAgIHJldHVybiBuZXdUZXh0OwogfQogCitjb25zdCBBdG9taWNTdHJpbmcmIFRleHRJbXBs
Ojpsb2NhbE5hbWUoKSBjb25zdAoreworICAgIHJldHVybiB0ZXh0QXRvbTsKK30KKwogRE9NU3Ry
aW5nIFRleHRJbXBsOjpub2RlTmFtZSgpIGNvbnN0CiB7Ci0gIHJldHVybiAiI3RleHQiOworICAg
IHJldHVybiB0ZXh0QXRvbS5zdHJpbmcoKTsKIH0KIAogdW5zaWduZWQgc2hvcnQgVGV4dEltcGw6
Om5vZGVUeXBlKCkgY29uc3QKQEAgLTQ2MiwxMSArNDY3LDYgQEAgdm9pZCBUZXh0SW1wbDo6YXR0
YWNoKCkKICAgICBDaGFyYWN0ZXJEYXRhSW1wbDo6YXR0YWNoKCk7CiB9CiAKLU5vZGVJbXBsOjpJ
ZCBUZXh0SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9URVhUOwotfQotCiB2b2lk
IFRleHRJbXBsOjpyZWNhbGNTdHlsZSggU3R5bGVDaGFuZ2UgY2hhbmdlICkKIHsKIC8vICAgICAg
cURlYnVnKCJ0ZXh0SW1wbDo6cmVjYWxjU3R5bGUiKTsKSW5kZXg6IGtodG1sL3htbC9kb21fdGV4
dGltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC94bWwv
ZG9tX3RleHRpbXBsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTYKZGlmZiAtdSAtcCAtcjEu
MTYga2h0bWwveG1sL2RvbV90ZXh0aW1wbC5oCi0tLSBraHRtbC94bWwvZG9tX3RleHRpbXBsLmgJ
MTAgTWF5IDIwMDUgMjE6NTk6MTUgLTAwMDAJMS4xNgorKysga2h0bWwveG1sL2RvbV90ZXh0aW1w
bC5oCTggSnVsIDIwMDUgMDM6MDQ6NDkgLTAwMDAKQEAgLTk1LDEzICs5NSwxMyBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCB+Q29tbWVudEltcGwoKTsKIAogICAgIC8vIERPTSBtZXRob2RzIG92ZXJy
aWRkZW4gZnJvbSAgcGFyZW50IGNsYXNzZXMKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2Fs
TmFtZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgRE9NU3RyaW5nIG5vZGVOYW1lKCkgY29uc3Q7CiAg
ICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCBub2RlVHlwZSgpIGNvbnN0OwogICAgIHZpcnR1YWwg
Tm9kZUltcGwgKmNsb25lTm9kZShib29sIGRlZXApOwogCiAgICAgLy8gT3RoZXIgbWV0aG9kcyAo
bm90IHBhcnQgb2YgRE9NKQotCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OworICAgIHZpcnR1
YWwgYm9vbCBpc0NvbW1lbnROb2RlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1
YWwgYm9vbCBjaGlsZFR5cGVBbGxvd2VkKCB1bnNpZ25lZCBzaG9ydCB0eXBlICk7CiAKICAgICB2
aXJ0dWFsIERPTVN0cmluZyB0b1N0cmluZygpIGNvbnN0OwpAQCAtMTIxLDYgKzEyMSw3IEBAIHB1
YmxpYzoKICAgICBUZXh0SW1wbCAqc3BsaXRUZXh0ICggY29uc3QgdW5zaWduZWQgbG9uZyBvZmZz
ZXQsIGludCAmZXhjZXB0aW9uY29kZSApOwogCiAgICAgLy8gRE9NIG1ldGhvZHMgb3ZlcnJpZGRl
biBmcm9tICBwYXJlbnQgY2xhc3NlcworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1l
KCkgY29uc3Q7CiAgICAgdmlydHVhbCBET01TdHJpbmcgbm9kZU5hbWUoKSBjb25zdDsKICAgICB2
aXJ0dWFsIHVuc2lnbmVkIHNob3J0IG5vZGVUeXBlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBOb2Rl
SW1wbCAqY2xvbmVOb2RlKGJvb2wgZGVlcCk7CkBAIC0xMjgsNyArMTI5LDYgQEAgcHVibGljOgog
ICAgIC8vIE90aGVyIG1ldGhvZHMgKG5vdCBwYXJ0IG9mIERPTSkKIAogICAgIHZpcnR1YWwgYm9v
bCBpc1RleHROb2RlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgSWQgaWQo
KSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoKCk7CiAgICAgdmlydHVhbCBib29sIHJl
bmRlcmVySXNOZWVkZWQoa2h0bWw6OlJlbmRlclN0eWxlICopOwogICAgIHZpcnR1YWwga2h0bWw6
OlJlbmRlck9iamVjdCAqY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEgKiwga2h0bWw6OlJlbmRl
clN0eWxlICopOwpJbmRleDoga2h0bWwveG1sL3htbF90b2tlbml6ZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3htbC94bWxfdG9rZW5pemVyLmNwcCx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zMQpkaWZmIC11IC1wIC1yMS4zMSBraHRtbC94bWwveG1s
X3Rva2VuaXplci5jcHAKLS0tIGtodG1sL3htbC94bWxfdG9rZW5pemVyLmNwcAk0IE1heSAyMDA1
IDIxOjExOjIzIC0wMDAwCTEuMzEKKysrIGtodG1sL3htbC94bWxfdG9rZW5pemVyLmNwcAk4IEp1
bCAyMDA1IDAzOjA0OjUwIC0wMDAwCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSAieG1sL2Rv
bV94bWxpbXBsLmgiCiAjaW5jbHVkZSAiaHRtbC9odG1sX2hlYWRpbXBsLmgiCiAjaW5jbHVkZSAi
aHRtbC9odG1sX3RhYmxlaW1wbC5oIgotI2luY2x1ZGUgIm1pc2MvaHRtbHRhZ3MuaCIKKyNpbmNs
dWRlICJodG1sbmFtZXMuaCIKICNpbmNsdWRlICJtaXNjL2h0bWxhdHRycy5oIgogI2luY2x1ZGUg
Im1pc2MvbG9hZGVyLmgiCiAKQEAgLTQ0LDYgKzQ0LDcgQEAgdXNpbmcgRE9NOjpEb2N1bWVudElt
cGw7CiB1c2luZyBET006OkRvY3VtZW50UHRyOwogdXNpbmcgRE9NOjpET01TdHJpbmc7CiB1c2lu
ZyBET006OkVsZW1lbnRJbXBsOwordXNpbmcgRE9NOjpIVE1MTmFtZXM7CiB1c2luZyBET006OkhU
TUxTY3JpcHRFbGVtZW50SW1wbDsKIHVzaW5nIERPTTo6SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJ
bXBsOwogdXNpbmcgRE9NOjpOb2RlOwpAQCAtMzIyLDE4ICszMjMsMTggQEAgdm9pZCBYTUxUb2tl
bml6ZXI6OnN0YXJ0RWxlbWVudChjb25zdCB4bQogICAgIC8vIEZJWE1FOiBUaGlzIGhhY2sgZW5z
dXJlcyBpbXBsaWNpdCB0YWJsZSBib2RpZXMgZ2V0IGNvbnN0cnVjdGVkIGluIFhIVE1MIGFuZCBY
TUwgZmlsZXMuCiAgICAgLy8gV2Ugd2FudCB0byBjb25zb2xpZGF0ZSB0aGlzIHdpdGggdGhlIEhU
TUwgcGFyc2VyIGFuZCBIVE1MIERPTSBjb2RlIGF0IHNvbWUgcG9pbnQuCiAgICAgLy8gRm9yIG5v
dywgaXQncyB0b28gcmlza3kgdG8gcmlwIHRoYXQgY29kZSB1cC4KLSAgICBpZiAobV9jdXJyZW50
Tm9kZS0+aWQoKSA9PSBJRF9UQUJMRSAmJgotICAgICAgICBuZXdFbGVtZW50LT5pZCgpID09IElE
X1RSICYmCisgICAgaWYgKG1fY3VycmVudE5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0YWJs
ZSgpKSAmJgorICAgICAgICBuZXdFbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dHIoKSkg
JiYKICAgICAgICAgbV9jdXJyZW50Tm9kZS0+aXNIVE1MRWxlbWVudCgpICYmIG5ld0VsZW1lbnQt
PmlzSFRNTEVsZW1lbnQoKSkgewogICAgICAgICBOb2RlSW1wbCogaW1wbGljaXRUQm9keSA9Ci0g
ICAgICAgICAgIG5ldyBIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGwoIG1fZG9jLCBJRF9UQk9E
WSwgdHJ1ZSAvKiBpbXBsaWNpdCAqLyApOworICAgICAgICAgICBuZXcgSFRNTFRhYmxlU2VjdGlv
bkVsZW1lbnRJbXBsKEhUTUxOYW1lczo6dGJvZHkoKSwgbV9kb2MsIHRydWUgLyogaW1wbGljaXQg
Ki8pOwogICAgICAgICBtX2N1cnJlbnROb2RlLT5hZGRDaGlsZChpbXBsaWNpdFRCb2R5KTsKICAg
ICAgICAgaWYgKG1fdmlldyAmJiAhaW1wbGljaXRUQm9keS0+YXR0YWNoZWQoKSkKICAgICAgICAg
ICAgIGltcGxpY2l0VEJvZHktPmF0dGFjaCgpOwogICAgICAgICBtX2N1cnJlbnROb2RlID0gaW1w
bGljaXRUQm9keTsKICAgICB9CiAKLSAgICBpZiAobmV3RWxlbWVudC0+aWQoKSA9PSBJRF9TQ1JJ
UFQpCisgICAgaWYgKG5ld0VsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzY3JpcHQoKSkp
CiAgICAgICAgIHN0YXRpY19jYXN0PEhUTUxTY3JpcHRFbGVtZW50SW1wbCAqPihuZXdFbGVtZW50
KS0+c2V0Q3JlYXRlZEJ5UGFyc2VyKHRydWUpOwogCiAgICAgaWYgKG1fY3VycmVudE5vZGUtPmFk
ZENoaWxkKG5ld0VsZW1lbnQpKSB7CkBAIC02NTAsNyArNjUxLDcgQEAgdm9pZCBYTUxUb2tlbml6
ZXI6OmFkZFNjcmlwdHMoTm9kZUltcGwgKgogICAgIC8vIFJlY3Vyc2l2ZWx5IGdvIHRocm91Z2gg
dGhlIGVudGlyZSBkb2N1bWVudCB0cmVlLCBsb29raW5nIGZvciBodG1sIDxzY3JpcHQ+IHRhZ3Mu
IEZvciBlYWNoIG9mIHRoZXNlCiAgICAgLy8gdGhhdCBpcyBmb3VuZCwgYWRkIGl0IHRvIHRoZSBt
X3NjcmlwdHMgbGlzdCBmcm9tIHdoaWNoIHRoZXkgd2lsbCBiZSBleGVjdXRlZAogCi0gICAgaWYg
KG4tPmlkKCkgPT0gSURfU0NSSVBUKSB7CisgICAgaWYgKG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjpzY3JpcHQoKSkpIHsKICAgICAgICAgbV9zY3JpcHRzLmFwcGVuZChzdGF0aWNfY2FzdDxIVE1M
U2NyaXB0RWxlbWVudEltcGwqPihuKSk7CiAgICAgfQogCkluZGV4OiBrd3EvRE9NLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9ET00ubW0sdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuMzYKZGlmZiAtdSAtcCAtcjEuMzYga3dxL0RPTS5tbQotLS0ga3dxL0RPTS5t
bQkxOSBNYXkgMjAwNSAxODozMjoyNyAtMDAwMAkxLjM2CisrKyBrd3EvRE9NLm1tCTggSnVsIDIw
MDUgMDM6MDQ6NTEgLTAwMDAKQEAgLTQ0LDcgKzQ0LDYgQEAKICNpbXBvcnQgImRvbV90ZXh0aW1w
bC5oIgogI2ltcG9ydCAiZG9tX3htbGltcGwuaCIKICNpbXBvcnQgImh0bWxfZWxlbWVudGltcGwu
aCIKLSNpbXBvcnQgImh0bWx0YWdzLmgiCiAKICNpbXBvcnQgImtodG1sX3BhcnQuaCIKIApAQCAt
NzIsNiArNzEsNyBAQCB1c2luZyBET006OkVsZW1lbnRJbXBsOwogdXNpbmcgRE9NOjpFbnRpdHlJ
bXBsOwogdXNpbmcgRE9NOjpGaWx0ZXJOb2RlOwogdXNpbmcgRE9NOjpIVE1MRWxlbWVudEltcGw7
Cit1c2luZyBET006OkhUTUxOYW1lczsKIHVzaW5nIERPTTo6TmFtZWROb2RlTWFwSW1wbDsKIHVz
aW5nIERPTTo6Tm9kZTsKIHVzaW5nIERPTTo6Tm9kZUZpbHRlcjsKQEAgLTMzOCw3ICszMzgsOCBA
QCB1c2luZyBraHRtbDo6U2hhcmVkUHRyOwogICAgIEFTU0VSVChwcmVmaXgpOwogCiAgICAgaW50
IGV4Y2VwdGlvbkNvZGUgPSAwOwotICAgIFtzZWxmIF9ub2RlSW1wbF0tPnNldFByZWZpeChwcmVm
aXgsIGV4Y2VwdGlvbkNvZGUpOworICAgIERPTVN0cmluZyBwcmVmaXhTdHIocHJlZml4KTsKKyAg
ICBbc2VsZiBfbm9kZUltcGxdLT5zZXRQcmVmaXgocHJlZml4U3RyLmltcGxlbWVudGF0aW9uKCks
IGV4Y2VwdGlvbkNvZGUpOwogICAgIHJhaXNlT25ET01FcnJvcihleGNlcHRpb25Db2RlKTsKIH0K
IApAQCAtMzk5LDE1NCArNDAwLDEyMyBAQCB1c2luZyBraHRtbDo6U2hhcmVkUHRyOwogICAgIHN3
aXRjaCAoaW1wbC0+bm9kZVR5cGUoKSkgewogICAgICAgICBjYXNlIE5vZGU6OkVMRU1FTlRfTk9E
RToKICAgICAgICAgICAgIGlmIChpbXBsLT5pc0hUTUxFbGVtZW50KCkpIHsKLSAgICAgICAgICAg
ICAgICAvLyBGSVhNRTogVGhlcmUgYXJlIG5vIGlkZW50aWZpZXJzIGZvciBIVE1MSGVhZGluZ0Vs
ZW1lbnQsIEhUTUxNb2RFbGVtZW50LCAKLSAgICAgICAgICAgICAgICAvLyBIVE1MVGFibGVDYXB0
aW9uRWxlbWVudCwgSFRNTFRhYmxlQ29sRWxlbWVudCwgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQu
Ci0gICAgICAgICAgICAgICAgLy8gRmluZCBvdGhlciB3YXlzIHRvIGlkZW50aWZ5IHRoZW0uCi0g
ICAgICAgICAgICAgICAgc3dpdGNoIChpbXBsLT5pZGVudGlmaWVyKCkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgY2FzZSBJRF9IVE1MOgotICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNs
YXNzID0gW0RPTUhUTUxIdG1sRWxlbWVudCBjbGFzc107Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9IRUFEOgotICAgICAgICAgICAg
ICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxIZWFkRWxlbWVudCBjbGFzc107Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJ
RF9MSU5LOgotICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxM
aW5rRWxlbWVudCBjbGFzc107Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICAgICAgY2FzZSBJRF9USVRMRToKLSAgICAgICAgICAgICAgICAgICAgICAgIHdy
YXBwZXJDbGFzcyA9IFtET01IVE1MVGl0bGVFbGVtZW50IGNsYXNzXTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX01FVEE6Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTE1ldGFFbGVtZW50IGNs
YXNzXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
ICBjYXNlIElEX0JBU0U6Ci0gICAgICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBb
RE9NSFRNTEJhc2VFbGVtZW50IGNsYXNzXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0lTSU5ERVg6Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTElzSW5kZXhFbGVtZW50IGNsYXNzXTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIElE
X1NUWUxFOgotICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxT
dHlsZUVsZW1lbnQgY2xhc3NdOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgICAgIGNhc2UgSURfQk9EWToKLSAgICAgICAgICAgICAgICAgICAgICAgIHdy
YXBwZXJDbGFzcyA9IFtET01IVE1MQm9keUVsZW1lbnQgY2xhc3NdOwotICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfRk9STToKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MRm9ybUVsZW1lbnQgY2xh
c3NdOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAg
IGNhc2UgSURfU0VMRUNUOgotICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0g
W0RPTUhUTUxTZWxlY3RFbGVtZW50IGNsYXNzXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX09QVEdST1VQOgotICAgICAgICAgICAg
ICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxPcHRHcm91cEVsZW1lbnQgY2xhc3Nd
OwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNh
c2UgSURfT1BUSU9OOgotICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RP
TUhUTUxPcHRpb25FbGVtZW50IGNsYXNzXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0lOUFVUOgotICAgICAgICAgICAgICAgICAg
ICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxJbnB1dEVsZW1lbnQgY2xhc3NdOwotICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfVEVY
VEFSRUE6Ci0gICAgICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTFRl
eHRBcmVhRWxlbWVudCBjbGFzc107Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICAgICAgY2FzZSBJRF9CVVRUT046Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTEJ1dHRvbkVsZW1lbnQgY2xhc3NdOwotICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfTEFCRUw6
Ci0gICAgICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTExhYmVsRWxl
bWVudCBjbGFzc107Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsgIAotICAgICAgICAg
ICAgICAgICAgICBjYXNlIElEX0ZJRUxEU0VUOgotICAgICAgICAgICAgICAgICAgICAgICAgd3Jh
cHBlckNsYXNzID0gW0RPTUhUTUxGaWVsZFNldEVsZW1lbnQgY2xhc3NdOwotICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7ICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfTEVH
RU5EOgotICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxMZWdl
bmRFbGVtZW50IGNsYXNzXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgICAgICBjYXNlIElEX1VMOgotICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBl
ckNsYXNzID0gW0RPTUhUTUxVTGlzdEVsZW1lbnQgY2xhc3NdOwotICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfT0w6Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTE9MaXN0RWxlbWVudCBjbGFzc107
Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBJRF9ETDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1M
RExpc3RFbGVtZW50IGNsYXNzXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICBjYXNlIElEX0RJUjoKLSAgICAgICAgICAgICAgICAgICAgICAgIHdy
YXBwZXJDbGFzcyA9IFtET01IVE1MRGlyZWN0b3J5RWxlbWVudCBjbGFzc107Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9NRU5VOgot
ICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxNZW51RWxlbWVu
dCBjbGFzc107Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICAgICAgY2FzZSBJRF9MSToKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9
IFtET01IVE1MTElFbGVtZW50IGNsYXNzXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0RJVjoKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MRGl2RWxlbWVudCBjbGFzc107Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9QOgotICAg
ICAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxQYXJhZ3JhcGhFbGVt
ZW50IGNsYXNzXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgICAgICBjYXNlIElEX1E6Ci0gICAgICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3Mg
PSBbRE9NSFRNTFF1b3RlRWxlbWVudCBjbGFzc107Ci0gICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9QUkU6Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTFByZUVsZW1lbnQgY2xhc3NdOwotICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfQlI6
Ci0gICAgICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTEJSRWxlbWVu
dCBjbGFzc107Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICAgICAgY2FzZSBJRF9CQVNFRk9OVDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJD
bGFzcyA9IFtET01IVE1MRm9udEVsZW1lbnQgY2xhc3NdOwotICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfRk9OVDoKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MRm9udEVsZW1lbnQgY2xhc3NdOwot
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2Ug
SURfSFI6Ci0gICAgICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTEhS
RWxlbWVudCBjbGFzc107Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICAgICAgY2FzZSBJRF9BOgotICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNs
YXNzID0gW0RPTUhUTUxBbmNob3JFbGVtZW50IGNsYXNzXTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0lNRzoKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MSW1hZ2VFbGVtZW50IGNsYXNzXTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNl
IElEX09CSkVDVDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01I
VE1MT2JqZWN0RWxlbWVudCBjbGFzc107Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9QQVJBTToKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MUGFyYW1FbGVtZW50IGNsYXNzXTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0FQUExF
VDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MQXBwbGV0
RWxlbWVudCBjbGFzc107Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICAgICAgY2FzZSBJRF9NQVA6Ci0gICAgICAgICAgICAgICAgICAgICAgICB3cmFwcGVy
Q2xhc3MgPSBbRE9NSFRNTE1hcEVsZW1lbnQgY2xhc3NdOwotICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfQVJFQToKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MQXJlYUVsZW1lbnQgY2xhc3NdOwot
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2Ug
SURfU0NSSVBUOgotICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhU
TUxTY3JpcHRFbGVtZW50IGNsYXNzXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgICAgICBjYXNlIElEX1RBQkxFOgotICAgICAgICAgICAgICAgICAgICAg
ICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxUYWJsZUVsZW1lbnQgY2xhc3NdOwotICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfVEQ6Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTFRhYmxlQ2VsbEVs
ZW1lbnQgY2xhc3NdOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgICAgIGNhc2UgSURfVFI6Ci0gICAgICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xh
c3MgPSBbRE9NSFRNTFRhYmxlUm93RWxlbWVudCBjbGFzc107Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9GUkFNRVNFVDoKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MRnJhbWVTZXRFbGVtZW50
IGNsYXNzXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
ICAgICBjYXNlIElEX0ZSQU1FOgotICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNz
ID0gW0RPTUhUTUxGcmFtZUVsZW1lbnQgY2xhc3NdOwotICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfSUZSQU1FOgotICAgICAgICAgICAg
ICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxJRnJhbWVFbGVtZW50IGNsYXNzXTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxFbGVt
ZW50IGNsYXNzXTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gRklYTUU6
IFJlZmxlY3QgbWFycXVlZSBvbmNlIHRoZSBBUEkgaGFzIGJlZW4gZGV0ZXJtaW5lZC4KKyAgICAg
ICAgICAgICAgICAvLyBGSVhNRTogV2UgY291bGQgbWFrZSB0aGUgSFRNTCBjbGFzc2VzIGhhbmQg
YmFjayB0aGVpciBjbGFzcyBuYW1lcyBhbmQgdGhlbiB1c2UgdGhhdCB0byBtYWtlCisgICAgICAg
ICAgICAgICAgLy8gdGhlIGFwcHJvcHJpYXRlIE9iai1DIGNsYXNzIGZyb20gdGhlIHN0cmluZy4K
KyAgICAgICAgICAgICAgICBIVE1MRWxlbWVudEltcGwqIGh0bWxFbHQgPSBzdGF0aWNfY2FzdDxI
VE1MRWxlbWVudEltcGwqPihpbXBsKTsKKyAgICAgICAgICAgICAgICBpZiAoaHRtbEVsdC0+aGFz
TG9jYWxOYW1lKEhUTUxOYW1lczo6aHRtbCgpKSkKKyAgICAgICAgICAgICAgICAgICAgd3JhcHBl
ckNsYXNzID0gW0RPTUhUTUxIdG1sRWxlbWVudCBjbGFzc107CisgICAgICAgICAgICAgICAgZWxz
ZSBpZiAoaHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6aGVhZCgpKSkKKyAgICAgICAg
ICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxIZWFkRWxlbWVudCBjbGFzc107Cisg
ICAgICAgICAgICAgICAgZWxzZSBpZiAoaHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6
bGluaygpKSkKKyAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxMaW5r
RWxlbWVudCBjbGFzc107CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaHRtbEVsdC0+aGFzTG9j
YWxOYW1lKEhUTUxOYW1lczo6dGl0bGUoKSkpCisgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJD
bGFzcyA9IFtET01IVE1MVGl0bGVFbGVtZW50IGNsYXNzXTsKKyAgICAgICAgICAgICAgICBlbHNl
IGlmIChodG1sRWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjptZXRhKCkpKQorICAgICAgICAg
ICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTE1ldGFFbGVtZW50IGNsYXNzXTsKKyAg
ICAgICAgICAgICAgICBlbHNlIGlmIChodG1sRWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpi
YXNlKCkpKQorICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTEJhc2VF
bGVtZW50IGNsYXNzXTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChodG1sRWx0LT5oYXNMb2Nh
bE5hbWUoSFRNTE5hbWVzOjppc2luZGV4KCkpKQorICAgICAgICAgICAgICAgICAgICB3cmFwcGVy
Q2xhc3MgPSBbRE9NSFRNTElzSW5kZXhFbGVtZW50IGNsYXNzXTsKKyAgICAgICAgICAgICAgICBl
bHNlIGlmIChodG1sRWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpzdHlsZSgpKSkKKyAgICAg
ICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxTdHlsZUVsZW1lbnQgY2xhc3Nd
OworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGh0bWxFbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFt
ZXM6OmJvZHkoKSkpCisgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1M
Qm9keUVsZW1lbnQgY2xhc3NdOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGh0bWxFbHQtPmhh
c0xvY2FsTmFtZShIVE1MTmFtZXM6OmZvcm0oKSkpCisgICAgICAgICAgICAgICAgICAgIHdyYXBw
ZXJDbGFzcyA9IFtET01IVE1MRm9ybUVsZW1lbnQgY2xhc3NdOworICAgICAgICAgICAgICAgIGVs
c2UgaWYgKGh0bWxFbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnNlbGVjdCgpKSkKKyAgICAg
ICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxTZWxlY3RFbGVtZW50IGNsYXNz
XTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChodG1sRWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5h
bWVzOjpvcHRncm91cCgpKSkKKyAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RP
TUhUTUxPcHRHcm91cEVsZW1lbnQgY2xhc3NdOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGh0
bWxFbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9wdGlvbigpKSkKKyAgICAgICAgICAgICAg
ICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxPcHRpb25FbGVtZW50IGNsYXNzXTsKKyAgICAg
ICAgICAgICAgICBlbHNlIGlmIChodG1sRWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjppbnB1
dCgpKSkKKyAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxJbnB1dEVs
ZW1lbnQgY2xhc3NdOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGh0bWxFbHQtPmhhc0xvY2Fs
TmFtZShIVE1MTmFtZXM6OnRleHRhcmVhKCkpKQorICAgICAgICAgICAgICAgICAgICB3cmFwcGVy
Q2xhc3MgPSBbRE9NSFRNTFRleHRBcmVhRWxlbWVudCBjbGFzc107CisgICAgICAgICAgICAgICAg
ZWxzZSBpZiAoaHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6YnV0dG9uKCkpKQorICAg
ICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTEJ1dHRvbkVsZW1lbnQgY2xh
c3NdOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGh0bWxFbHQtPmhhc0xvY2FsTmFtZShIVE1M
TmFtZXM6OmxhYmVsKCkpKQorICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9N
SFRNTExhYmVsRWxlbWVudCBjbGFzc107CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaHRtbEVs
dC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6ZmllbGRzZXQoKSkpCisgICAgICAgICAgICAgICAg
ICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MRmllbGRTZXRFbGVtZW50IGNsYXNzXTsKKyAgICAg
ICAgICAgICAgICBlbHNlIGlmIChodG1sRWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpsZWdl
bmQoKSkpCisgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MTGVnZW5k
RWxlbWVudCBjbGFzc107CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaHRtbEVsdC0+aGFzTG9j
YWxOYW1lKEhUTUxOYW1lczo6dWwoKSkpCisgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFz
cyA9IFtET01IVE1MVUxpc3RFbGVtZW50IGNsYXNzXTsKKyAgICAgICAgICAgICAgICBlbHNlIGlm
IChodG1sRWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvbCgpKSkgICAgICAgICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTE9MaXN0
RWxlbWVudCBjbGFzc107CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaHRtbEVsdC0+aGFzTG9j
YWxOYW1lKEhUTUxOYW1lczo6ZGwoKSkpCisgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFz
cyA9IFtET01IVE1MRExpc3RFbGVtZW50IGNsYXNzXTsKKyAgICAgICAgICAgICAgICBlbHNlIGlm
IChodG1sRWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpkaXIoKSkpCisgICAgICAgICAgICAg
ICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MRGlyZWN0b3J5RWxlbWVudCBjbGFzc107Cisg
ICAgICAgICAgICAgICAgZWxzZSBpZiAoaHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6
bWVudSgpKSkKKyAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxNZW51
RWxlbWVudCBjbGFzc107CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaHRtbEVsdC0+aGFzTG9j
YWxOYW1lKEhUTUxOYW1lczo6bGkoKSkpCisgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFz
cyA9IFtET01IVE1MTElFbGVtZW50IGNsYXNzXTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmICho
dG1sRWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpkaXYoKSkpCisgICAgICAgICAgICAgICAg
ICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MRGl2RWxlbWVudCBjbGFzc107CisgICAgICAgICAg
ICAgICAgZWxzZSBpZiAoaHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6cCgpKSkKKyAg
ICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxQYXJhZ3JhcGhFbGVtZW50
IGNsYXNzXTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChodG1sRWx0LT5oYXNMb2NhbE5hbWUo
SFRNTE5hbWVzOjpoMSgpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWxFbHQtPmhh
c0xvY2FsTmFtZShIVE1MTmFtZXM6OmgyKCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAg
aHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6aDMoKSkgfHwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICBodG1sRWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpoNCgpKSB8fAorICAg
ICAgICAgICAgICAgICAgICAgICAgIGh0bWxFbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Omg1
KCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhU
TUxOYW1lczo6aDYoKSkpCisgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01I
VE1MSGVhZGluZ0VsZW1lbnQgY2xhc3NdOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGh0bWxF
bHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnEoKSkpCisgICAgICAgICAgICAgICAgICAgIHdy
YXBwZXJDbGFzcyA9IFtET01IVE1MUXVvdGVFbGVtZW50IGNsYXNzXTsKKyAgICAgICAgICAgICAg
ICBlbHNlIGlmIChodG1sRWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpwcmUoKSkpCisgICAg
ICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MUHJlRWxlbWVudCBjbGFzc107
CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1l
czo6YnIoKSkpCisgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MQlJF
bGVtZW50IGNsYXNzXTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChodG1sRWx0LT5oYXNMb2Nh
bE5hbWUoSFRNTE5hbWVzOjpiYXNlZm9udCgpKSkKKyAgICAgICAgICAgICAgICAgICAgd3JhcHBl
ckNsYXNzID0gW0RPTUhUTUxCYXNlRm9udEVsZW1lbnQgY2xhc3NdOworICAgICAgICAgICAgICAg
IGVsc2UgaWYgKGh0bWxFbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmZvbnQoKSkpCisgICAg
ICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MRm9udEVsZW1lbnQgY2xhc3Nd
OworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGh0bWxFbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFt
ZXM6OmhyKCkpKQorICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTEhS
RWxlbWVudCBjbGFzc107CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaHRtbEVsdC0+aGFzTG9j
YWxOYW1lKEhUTUxOYW1lczo6YSgpKSkKKyAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNz
ID0gW0RPTUhUTUxBbmNob3JFbGVtZW50IGNsYXNzXTsKKyAgICAgICAgICAgICAgICBlbHNlIGlm
IChodG1sRWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjppbWcoKSkgfHwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICBodG1sRWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpjYW52YXMoKSkp
CisgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MSW1hZ2VFbGVtZW50
IGNsYXNzXTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChodG1sRWx0LT5oYXNMb2NhbE5hbWUo
SFRNTE5hbWVzOjpvYmplY3QoKSkpCisgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9
IFtET01IVE1MT2JqZWN0RWxlbWVudCBjbGFzc107CisgICAgICAgICAgICAgICAgZWxzZSBpZiAo
aHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6cGFyYW0oKSkpCisgICAgICAgICAgICAg
ICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MUGFyYW1FbGVtZW50IGNsYXNzXTsKKyAgICAg
ICAgICAgICAgICBlbHNlIGlmIChodG1sRWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjphcHBs
ZXQoKSkpCisgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MQXBwbGV0
RWxlbWVudCBjbGFzc107CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaHRtbEVsdC0+aGFzTG9j
YWxOYW1lKEhUTUxOYW1lczo6bWFwKCkpKQorICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xh
c3MgPSBbRE9NSFRNTE1hcEVsZW1lbnQgY2xhc3NdOworICAgICAgICAgICAgICAgIGVsc2UgaWYg
KGh0bWxFbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmFyZWEoKSkpCisgICAgICAgICAgICAg
ICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MQXJlYUVsZW1lbnQgY2xhc3NdOworICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKGh0bWxFbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnNjcmlw
dCgpKSkKKyAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxTY3JpcHRF
bGVtZW50IGNsYXNzXTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChodG1sRWx0LT5oYXNMb2Nh
bE5hbWUoSFRNTE5hbWVzOjp0YWJsZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNs
YXNzID0gW0RPTUhUTUxUYWJsZUVsZW1lbnQgY2xhc3NdOworICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKGh0bWxFbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnRoZWFkKCkpIHx8CisgICAgICAg
ICAgICAgICAgICAgICAgICAgaHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dGJvZHko
KSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICBodG1sRWx0LT5oYXNMb2NhbE5hbWUoSFRN
TE5hbWVzOjp0Zm9vdCgpKSkKKyAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RP
TUhUTUxUYWJsZVNlY3Rpb25FbGVtZW50IGNsYXNzXTsKKyAgICAgICAgICAgICAgICBlbHNlIGlm
IChodG1sRWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0ZCgpKSkKKyAgICAgICAgICAgICAg
ICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxUYWJsZUNlbGxFbGVtZW50IGNsYXNzXTsKKyAg
ICAgICAgICAgICAgICBlbHNlIGlmIChodG1sRWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0
cigpKSkKKyAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxUYWJsZVJv
d0VsZW1lbnQgY2xhc3NdOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGh0bWxFbHQtPmhhc0xv
Y2FsTmFtZShIVE1MTmFtZXM6OmNvbCgpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgIGh0
bWxFbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmNvbGdyb3VwKCkpKQorICAgICAgICAgICAg
ICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTFRhYmxlQ29sRWxlbWVudCBjbGFzc107Cisg
ICAgICAgICAgICAgICAgZWxzZSBpZiAoaHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6
Y2FwdGlvbigpKSkKKyAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxU
YWJsZUNhcHRpb25FbGVtZW50IGNsYXNzXTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChodG1s
RWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpmcmFtZXNldCgpKSkKKyAgICAgICAgICAgICAg
ICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxGcmFtZVNldEVsZW1lbnQgY2xhc3NdOworICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKGh0bWxFbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmZy
YW1lKCkpKQorICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTEZyYW1l
RWxlbWVudCBjbGFzc107CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaHRtbEVsdC0+aGFzTG9j
YWxOYW1lKEhUTUxOYW1lczo6aWZyYW1lKCkpKQorICAgICAgICAgICAgICAgICAgICB3cmFwcGVy
Q2xhc3MgPSBbRE9NSFRNTElGcmFtZUVsZW1lbnQgY2xhc3NdOworICAgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxFbGVtZW50IGNs
YXNzXTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNz
ID0gW0RPTUVsZW1lbnQgY2xhc3NdOwogICAgICAgICAgICAgfQpAQCAtMTI2OCw3ICsxMjM4LDcg
QEAgdXNpbmcga2h0bWw6OlNoYXJlZFB0cjsKIAogLSAoTlNTdHJpbmcgKil0YWdOYW1lCiB7Ci0g
ICAgcmV0dXJuIFtzZWxmIF9lbGVtZW50SW1wbF0tPnRhZ05hbWUoKTsKKyAgICByZXR1cm4gW3Nl
bGYgX2VsZW1lbnRJbXBsXS0+bm9kZU5hbWUoKTsKIH0KIAogLSAoRE9NTmFtZWROb2RlTWFwICop
YXR0cmlidXRlcwpJbmRleDoga3dxL0RPTUhUTUwubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1dlYkNvcmUva3dxL0RPTUhUTUwubW0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTgK
ZGlmZiAtdSAtcCAtcjEuMTgga3dxL0RPTUhUTUwubW0KLS0tIGt3cS9ET01IVE1MLm1tCTEzIE1h
eSAyMDA1IDE2OjQ4OjUxIC0wMDAwCTEuMTgKKysrIGt3cS9ET01IVE1MLm1tCTggSnVsIDIwMDUg
MDM6MDQ6NTMgLTAwMDAKQEAgLTc0LDcgKzc0LDYgQEAgdXNpbmcgRE9NOjpIVE1MRm9ybUNvbGxl
Y3Rpb25JbXBsOwogdXNpbmcgRE9NOjpIVE1MRm9ybUVsZW1lbnRJbXBsOwogdXNpbmcgRE9NOjpI
VE1MRnJhbWVFbGVtZW50SW1wbDsKIHVzaW5nIERPTTo6SFRNTEZyYW1lU2V0RWxlbWVudEltcGw7
Ci11c2luZyBET006OkhUTUxHZW5lcmljRWxlbWVudEltcGw7CiB1c2luZyBET006OkhUTUxHZW5l
cmljRm9ybUVsZW1lbnRJbXBsOwogdXNpbmcgRE9NOjpIVE1MSGVhZEVsZW1lbnRJbXBsOwogdXNp
bmcgRE9NOjpIVE1MSGVhZGluZ0VsZW1lbnRJbXBsOwpAQCAtMTkwNSw5ICsxOTA0LDkgQEAgdXNp
bmcgRE9NOjpOb2RlSW1wbDsKIAogQGltcGxlbWVudGF0aW9uIERPTUhUTUxRdW90ZUVsZW1lbnQK
IAotLSAoSFRNTEdlbmVyaWNFbGVtZW50SW1wbCAqKV9xdW90ZUVsZW1lbnRJbXBsCistIChIVE1M
RWxlbWVudEltcGwgKilfcXVvdGVFbGVtZW50SW1wbAogewotICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxIVE1MR2VuZXJpY0VsZW1lbnRJbXBsICo+KERPTV9jYXN0PE5vZGVJbXBsICo+KF9pbnRlcm5h
bCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwgKj4oRE9NX2Nhc3Q8
Tm9kZUltcGwgKj4oX2ludGVybmFsKSk7CiB9CiAKIC0gKE5TU3RyaW5nICopY2l0ZQpJbmRleDog
a3dxL0tXUUFjY09iamVjdC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29y
ZS9rd3EvS1dRQWNjT2JqZWN0Lm1tLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjY4CmRpZmYgLXUg
LXAgLXIxLjY4IGt3cS9LV1FBY2NPYmplY3QubW0KLS0tIGt3cS9LV1FBY2NPYmplY3QubW0JNSBK
dW4gMjAwNSAwNzowNjo1MiAtMDAwMAkxLjY4CisrKyBrd3EvS1dRQWNjT2JqZWN0Lm1tCTggSnVs
IDIwMDUgMDM6MDQ6NTUgLTAwMDAKQEAgLTQ4LDcgKzQ4LDYgQEAKICNpbXBvcnQgImRvbTJfZXZl
bnRzaW1wbC5oIgogI2ltcG9ydCAiZG9tMl9yYW5nZS5oIgogI2ltcG9ydCAiaHRtbGF0dHJzLmgi
Ci0jaW1wb3J0ICJodG1sdGFncy5oIgogI2ltcG9ydCAia2h0bWx2aWV3LmgiCiAjaW1wb3J0ICJr
aHRtbF9wYXJ0LmgiCiAjaW1wb3J0ICJyZW5kZXJfY2FudmFzLmgiCkBAIC03Nyw2ICs3Niw3IEBA
IHVzaW5nIERPTTo6SFRNTENvbGxlY3Rpb25JbXBsOwogdXNpbmcgRE9NOjpIVE1MRWxlbWVudElt
cGw7CiB1c2luZyBET006OkhUTUxJbnB1dEVsZW1lbnRJbXBsOwogdXNpbmcgRE9NOjpIVE1MTWFw
RWxlbWVudEltcGw7Cit1c2luZyBET006OkhUTUxOYW1lczsKIHVzaW5nIERPTTo6Tm9kZTsKIHVz
aW5nIERPTTo6Tm9kZUltcGw7CiB1c2luZyBET006OlBvc2l0aW9uOwpAQCAtMzY2LDcgKzM2Niw3
IEBAIHVzaW5nIGtodG1sOjpWaXNpYmxlUG9zaXRpb247CiAgICAgfQogICAgIGlmIChtX3JlbmRl
cmVyLT5pc0xpc3RNYXJrZXIoKSkKICAgICAgICAgcmV0dXJuIEAiQVhMaXN0TWFya2VyIjsKLSAg
ICBpZiAobV9yZW5kZXJlci0+ZWxlbWVudCgpICYmIG1fcmVuZGVyZXItPmVsZW1lbnQoKS0+aWRl
bnRpZmllcigpID09IElEX0JVVFRPTikKKyAgICBpZiAobV9yZW5kZXJlci0+ZWxlbWVudCgpICYm
IG1fcmVuZGVyZXItPmVsZW1lbnQoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJ1dHRvbigpKSkK
ICAgICAgICAgcmV0dXJuIE5TQWNjZXNzaWJpbGl0eUJ1dHRvblJvbGU7CiAgICAgaWYgKG1fcmVu
ZGVyZXItPmlzVGV4dCgpKQogICAgICAgICByZXR1cm4gTlNBY2Nlc3NpYmlsaXR5U3RhdGljVGV4
dFJvbGU7CkBAIC01MzIsNyArNTMyLDcgQEAgdXNpbmcga2h0bWw6OlZpc2libGVQb3NpdGlvbjsK
ICAgICBpZiAoIW1fcmVuZGVyZXIgfHwgbV9hcmVhRWxlbWVudCB8fCAhbV9yZW5kZXJlci0+ZWxl
bWVudCgpKQogICAgICAgICByZXR1cm4gbmlsOwogICAgIAotICAgIGlmIChtX3JlbmRlcmVyLT5l
bGVtZW50KCktPmlzSFRNTEVsZW1lbnQoKSAmJiBtX3JlbmRlcmVyLT5lbGVtZW50KCktPmlkZW50
aWZpZXIoKSA9PSBJRF9CVVRUT04pCisgICAgaWYgKG1fcmVuZGVyZXItPmVsZW1lbnQoKS0+aXNI
VE1MRWxlbWVudCgpICYmIG1fcmVuZGVyZXItPmVsZW1lbnQoKS0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OmJ1dHRvbigpKSkKICAgICAgICAgcmV0dXJuIFtzZWxmIHRleHRVbmRlckVsZW1lbnRdOwog
ICAgIGlmIChtX3JlbmRlcmVyLT5lbGVtZW50KCktPmlzTGluaygpKQogICAgICAgICByZXR1cm4g
W3NlbGYgdGV4dFVuZGVyRWxlbWVudF07CkBAIC02MjIsNyArNjIyLDcgQEAgc3RhdGljIFFSZWN0
IGJvdW5kaW5nQm94UmVjdChSZW5kZXJPYmplYwogICAgIHJldHVybiAoIW1fcmVuZGVyZXItPmlz
TGlzdE1hcmtlcigpICYmICFtX3JlbmRlcmVyLT5pc0NhbnZhcygpICYmIAogICAgICAgICAgICAg
IW1fcmVuZGVyZXItPmlzSW1hZ2UoKSAmJgogICAgICAgICAgICAgIShtX3JlbmRlcmVyLT5lbGVt
ZW50KCkgJiYgbV9yZW5kZXJlci0+ZWxlbWVudCgpLT5pc0hUTUxFbGVtZW50KCkgJiYKLSAgICAg
ICAgICAgICAgbV9yZW5kZXJlci0+ZWxlbWVudCgpLT5pZGVudGlmaWVyKCkgPT0gSURfQlVUVE9O
KSk7CisgICAgICAgICAgICAgIG1fcmVuZGVyZXItPmVsZW1lbnQoKS0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OmJ1dHRvbigpKSkpOwogfQogCiAtIChOU0FycmF5ICopYWNjZXNzaWJpbGl0eUF0dHJp
YnV0ZU5hbWVzCkluZGV4OiBrd3EvS1dRRE9NTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
a3dxL0tXUURPTU5vZGUuY3BwCmRpZmYgLU4ga3dxL0tXUURPTU5vZGUuY3BwCi0tLSBrd3EvS1dR
RE9NTm9kZS5jcHAJMTEgSnVsIDIwMDMgMTY6MjQ6MzcgLTAwMDAJMS45CisrKyAvZGV2L251bGwJ
MSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMApAQCAtMSwzNCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDAzIEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbmNsdWRlICJLV1FET01Ob2RlLmgiCi0KLXVzaW5nIERPTTo6Tm9kZUltcGw7Ci0K
LS8vIFRoaXMgbmVlZHMgdG8gYmUgaW4gYSBDKysgc291cmNlIGZpbGUgYmVjYXVzZSBpZCBpcyBh
IHJlc2VydmVkIHdvcmQgaW4gT2JqZWN0aXZlLUMrKy4KLU5vZGVJbXBsOjpJZCBpZEZyb21Ob2Rl
KE5vZGVJbXBsICpub2RlKQotewotICAgIHJldHVybiBub2RlLT5pZCgpOwotfQpJbmRleDoga3dx
L0tXUURPTU5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiBrd3EvS1dRRE9NTm9kZS5oCmRpZmYg
LU4ga3dxL0tXUURPTU5vZGUuaAotLS0ga3dxL0tXUURPTU5vZGUuaAkxMSBKdWwgMjAwMyAxNjoy
NDozNyAtMDAwMAkxLjUKKysrIC9kZXYvbnVsbAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCkBA
IC0xLDI4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgQXBwbGUgQ29tcHV0ZXIs
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImRvbV9ub2RlaW1w
bC5oIgotCi1ET006Ok5vZGVJbXBsOjpJZCBpZEZyb21Ob2RlKERPTTo6Tm9kZUltcGwgKik7Cklu
ZGV4OiBrd3EvS1dRS0hUTUxQYXJ0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3Qv
V2ViQ29yZS9rd3EvS1dRS0hUTUxQYXJ0LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS45CmRp
ZmYgLXUgLXAgLXIxLjkga3dxL0tXUUtIVE1MUGFydC5jcHAKLS0tIGt3cS9LV1FLSFRNTFBhcnQu
Y3BwCTI3IE1hciAyMDAzIDAxOjU3OjQ3IC0wMDAwCTEuOQorKysga3dxL0tXUUtIVE1MUGFydC5j
cHAJOCBKdWwgMjAwNSAwMzowNDo1NSAtMDAwMApAQCAtMzIsMTMgKzMyLDE1IEBACiAKIHVzaW5n
IERPTTo6RG9jdW1lbnRJbXBsOwogdXNpbmcgRE9NOjpIVE1MRG9jdW1lbnRJbXBsOwordXNpbmcg
RE9NOjpIVE1MTmFtZXM7CiB1c2luZyBET006Ok5vZGVJbXBsOwogCisvLyBGSVhNRTogV2hhdCBv
biBlYXJ0aCBpcyB0aGlzIHNpbmdsZSB0aW55IGZpbGUgd2l0aCBvbmx5IHRoaXMgbWV0aG9kIGRv
aW5nIGhlcmU/CiBib29sIEtXUUtIVE1MUGFydDo6aXNGcmFtZVNldCgpIGNvbnN0CiB7CiAgICAg
RG9jdW1lbnRJbXBsICpkb2N1bWVudCA9IGQtPm1fZG9jOwogICAgIGlmICghZG9jdW1lbnQgfHwg
IWRvY3VtZW50LT5pc0hUTUxEb2N1bWVudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
Tm9kZUltcGwgKmJvZHkgPSBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnRJbXBsICo+KGRvY3VtZW50
KS0+Ym9keSgpOwotICAgIHJldHVybiBib2R5ICYmIGJvZHktPnJlbmRlcmVyKCkgJiYgYm9keS0+
aWQoKSA9PSBJRF9GUkFNRVNFVDsKKyAgICByZXR1cm4gYm9keSAmJiBib2R5LT5yZW5kZXJlcigp
ICYmIGJvZHktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpmcmFtZXNldCgpKTsKIH0KSW5kZXg6IGt3
cS9LV1FLSFRNTFBhcnQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUv
a3dxL0tXUUtIVE1MUGFydC5tbSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS42NDMKZGlmZiAtdSAt
cCAtcjEuNjQzIGt3cS9LV1FLSFRNTFBhcnQubW0KLS0tIGt3cS9LV1FLSFRNTFBhcnQubW0JMjYg
TWF5IDIwMDUgMjA6MzA6MTIgLTAwMDAJMS42NDMKKysrIGt3cS9LV1FLSFRNTFBhcnQubW0JOCBK
dWwgMjAwNSAwMzowNTowMCAtMDAwMApAQCAtMjgsNyArMjgsNiBAQAogI2ltcG9ydCAiRE9NSW50
ZXJuYWwuaCIKIAogI2ltcG9ydCAiS1dRQ2xpcGJvYXJkLmgiCi0jaW1wb3J0ICJLV1FET01Ob2Rl
LmgiCiAjaW1wb3J0ICJLV1FEdW1teVZpZXcuaCIKICNpbXBvcnQgIktXUUVkaXRDb21tYW5kLmgi
CiAjaW1wb3J0ICJLV1FFeGNlcHRpb25zLmgiCkBAIC0xMDAsNiArOTksNyBAQCB1c2luZyBET006
OkhUTUxFbGVtZW50SW1wbDsKIHVzaW5nIERPTTo6SFRNTEZvcm1FbGVtZW50SW1wbDsKIHVzaW5n
IERPTTo6SFRNTEZyYW1lRWxlbWVudEltcGw7CiB1c2luZyBET006OkhUTUxHZW5lcmljRm9ybUVs
ZW1lbnRJbXBsOwordXNpbmcgRE9NOjpIVE1MTmFtZXM7CiB1c2luZyBET006OkhUTUxUYWJsZUNl
bGxFbGVtZW50SW1wbDsKIHVzaW5nIERPTTo6Tm9kZTsKIHVzaW5nIERPTTo6Tm9kZUltcGw7CkBA
IC0zNjEsMTMgKzM2MSwxMiBAQCBzdGF0aWMgSFRNTEZvcm1FbGVtZW50SW1wbCAqc2NhbkZvckZv
cm0oCiB7CiAgICAgTm9kZUltcGwgKm47CiAgICAgZm9yIChuID0gc3RhcnQ7IG47IG4gPSBuLT50
cmF2ZXJzZU5leHROb2RlKCkpIHsKLSAgICAgICAgTm9kZUltcGw6OklkIG5vZGVJRCA9IGlkRnJv
bU5vZGUobik7Ci0gICAgICAgIGlmIChub2RlSUQgPT0gSURfRk9STSkgeworICAgICAgICBpZiAo
bi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZvcm0oKSkpIHsKICAgICAgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnRJbXBsICo+KG4pOwogICAgICAgICB9IGVsc2UgaWYg
KG4tPmlzSFRNTEVsZW1lbnQoKQogICAgICAgICAgICAgICAgICAgICYmIHN0YXRpY19jYXN0PEhU
TUxFbGVtZW50SW1wbCAqPihuKS0+aXNHZW5lcmljRm9ybUVsZW1lbnQoKSkgewogICAgICAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsICo+KG4pLT5m
b3JtKCk7Ci0gICAgICAgIH0gZWxzZSBpZiAobm9kZUlEID09IElEX0ZSQU1FIHx8IG5vZGVJRCA9
PSBJRF9JRlJBTUUpIHsKKyAgICAgICAgfSBlbHNlIGlmIChuLT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6ZnJhbWUoKSkgfHwgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmlmcmFtZSgpKSkgewogICAg
ICAgICAgICAgTm9kZUltcGwgKmNoaWxkRG9jID0gc3RhdGljX2Nhc3Q8SFRNTEZyYW1lRWxlbWVu
dEltcGwgKj4obiktPmNvbnRlbnREb2N1bWVudCgpOwogICAgICAgICAgICAgSFRNTEZvcm1FbGVt
ZW50SW1wbCAqZnJhbWVSZXN1bHQgPSBzY2FuRm9yRm9ybShjaGlsZERvYyk7CiAgICAgICAgICAg
ICBpZiAoZnJhbWVSZXN1bHQpIHsKQEAgLTM5MCw3ICszODksNyBAQCBIVE1MRm9ybUVsZW1lbnRJ
bXBsICpLV1FLSFRNTFBhcnQ6OmN1cnJlCiAgICAgLy8gdHJ5IHdhbGtpbmcgdXAgdGhlIG5vZGUg
dHJlZSB0byBmaW5kIGEgZm9ybSBlbGVtZW50CiAgICAgTm9kZUltcGwgKm47CiAgICAgZm9yIChu
ID0gc3RhcnQ7IG47IG4gPSBuLT5wYXJlbnROb2RlKCkpIHsKLSAgICAgICAgaWYgKGlkRnJvbU5v
ZGUobikgPT0gSURfRk9STSkgeworICAgICAgICBpZiAobi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
OmZvcm0oKSkpIHsKICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1l
bnRJbXBsICo+KG4pOwogICAgICAgICB9IGVsc2UgaWYgKG4tPmlzSFRNTEVsZW1lbnQoKQogICAg
ICAgICAgICAgICAgICAgICYmIHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCAqPihuKS0+aXNH
ZW5lcmljRm9ybUVsZW1lbnQoKSkgewpAQCAtNDg5LDggKzQ4OCw3IEBAIE5TU3RyaW5nICpLV1FL
SFRNTFBhcnQ6OnNlYXJjaEZvckxhYmVsc0EKICAgICAgICAgaWYgKGFib3ZlQ2VsbCkgewogICAg
ICAgICAgICAgLy8gc2VhcmNoIHdpdGhpbiB0aGUgYWJvdmUgY2VsbCB3ZSBmb3VuZCBmb3IgYSBt
YXRjaAogICAgICAgICAgICAgZm9yIChOb2RlSW1wbCAqbiA9IGFib3ZlQ2VsbC0+Zmlyc3RDaGls
ZCgpOyBuOyBuID0gbi0+dHJhdmVyc2VOZXh0Tm9kZShhYm92ZUNlbGwpKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKGlkRnJvbU5vZGUobikgPT0gSURfVEVYVAotICAgICAgICAgICAgICAgICAgICAm
JiBuLT5yZW5kZXJlcigpICYmIG4tPnJlbmRlcmVyKCktPnN0eWxlKCktPnZpc2liaWxpdHkoKSA9
PSBWSVNJQkxFKQorICAgICAgICAgICAgICAgIGlmIChuLT5pc1RleHROb2RlKCkgJiYgbi0+cmVu
ZGVyZXIoKSAmJiBuLT5yZW5kZXJlcigpLT5zdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0gVklTSUJM
RSkKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIC8vIEZvciBlYWNoIHRl
eHQgY2h1bmssIHJ1biB0aGUgcmVnZXhwCiAgICAgICAgICAgICAgICAgICAgIFFTdHJpbmcgbm9k
ZVN0cmluZyA9IG4tPm5vZGVWYWx1ZSgpLnN0cmluZygpOwpAQCAtNTI1LDIzICs1MjMsMjEgQEAg
TlNTdHJpbmcgKktXUUtIVE1MUGFydDo6c2VhcmNoRm9yTGFiZWxzQgogICAgICAgICAgbiAmJiBs
ZW5ndGhTZWFyY2hlZCA8IGNoYXJzU2VhcmNoZWRUaHJlc2hvbGQ7CiAgICAgICAgICBuID0gbi0+
dHJhdmVyc2VQcmV2aW91c05vZGUoKSkKICAgICB7Ci0gICAgICAgIE5vZGVJbXBsOjpJZCBub2Rl
SUQgPSBpZEZyb21Ob2RlKG4pOwotICAgICAgICBpZiAobm9kZUlEID09IElEX0ZPUk0KKyAgICAg
ICAgaWYgKG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpmb3JtKCkpCiAgICAgICAgICAgICB8fCAo
bi0+aXNIVE1MRWxlbWVudCgpCiAgICAgICAgICAgICAgICAgJiYgc3RhdGljX2Nhc3Q8SFRNTEVs
ZW1lbnRJbXBsICo+KG4pLT5pc0dlbmVyaWNGb3JtRWxlbWVudCgpKSkKICAgICAgICAgewogICAg
ICAgICAgICAgLy8gV2UgaGl0IGFub3RoZXIgZm9ybSBlbGVtZW50IG9yIHRoZSBzdGFydCBvZiB0
aGUgZm9ybSAtIGJhaWwgb3V0CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfSBlbHNlIGlm
IChub2RlSUQgPT0gSURfVEQgJiYgIXN0YXJ0aW5nVGFibGVDZWxsKSB7CisgICAgICAgIH0gZWxz
ZSBpZiAobi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRkKCkpICYmICFzdGFydGluZ1RhYmxlQ2Vs
bCkgewogICAgICAgICAgICAgc3RhcnRpbmdUYWJsZUNlbGwgPSBzdGF0aWNfY2FzdDxIVE1MVGFi
bGVDZWxsRWxlbWVudEltcGwgKj4obik7Ci0gICAgICAgIH0gZWxzZSBpZiAobm9kZUlEID09IElE
X1RSICYmIHN0YXJ0aW5nVGFibGVDZWxsKSB7CisgICAgICAgIH0gZWxzZSBpZiAobi0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OnRyKCkpICYmIHN0YXJ0aW5nVGFibGVDZWxsKSB7CiAgICAgICAgICAg
ICBOU1N0cmluZyAqcmVzdWx0ID0gc2VhcmNoRm9yTGFiZWxzQWJvdmVDZWxsKHJlZ0V4cCwgc3Rh
cnRpbmdUYWJsZUNlbGwpOwogICAgICAgICAgICAgaWYgKHJlc3VsdCkgewogICAgICAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBzZWFyY2hlZENl
bGxBYm92ZSA9IHRydWU7Ci0gICAgICAgIH0gZWxzZSBpZiAobm9kZUlEID09IElEX1RFWFQKLSAg
ICAgICAgICAgICAgICAgICAmJiBuLT5yZW5kZXJlcigpICYmIG4tPnJlbmRlcmVyKCktPnN0eWxl
KCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFKQorICAgICAgICB9IGVsc2UgaWYgKG4tPmlzVGV4
dE5vZGUoKSAmJiBuLT5yZW5kZXJlcigpICYmIG4tPnJlbmRlcmVyKCktPnN0eWxlKCktPnZpc2li
aWxpdHkoKSA9PSBWSVNJQkxFKQogICAgICAgICB7CiAgICAgICAgICAgICAvLyBGb3IgZWFjaCB0
ZXh0IGNodW5rLCBydW4gdGhlIHJlZ2V4cAogICAgICAgICAgICAgUVN0cmluZyBub2RlU3RyaW5n
ID0gbi0+bm9kZVZhbHVlKCkuc3RyaW5nKCk7CkBAIC0yODQ4LDE0ICsyODQ0LDEwIEBAIE5TRmls
ZVdyYXBwZXIgKktXUUtIVE1MUGFydDo6ZmlsZVdyYXBwZXIKIAogc3RhdGljIEVsZW1lbnRJbXBs
ICpsaXN0UGFyZW50KEVsZW1lbnRJbXBsICppdGVtKQogewotICAgIC8vIEljayEgIEF2b2lkIHVz
ZSBvZiBpdGVtLT5pZCgpIHdoaWNoIGNvbmZ1c2VzIE9iakMrKy4KLSAgICB1bnNpZ25lZCBzaG9y
dCBfaWQgPSBpdGVtLT5pZGVudGlmaWVyKCk7Ci0gICAgCi0gICAgd2hpbGUgKF9pZCAhPSBJRF9V
TCAmJiBfaWQgIT0gSURfT0wpIHsKKyAgICB3aGlsZSAoIWl0ZW0tPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjp1bCgpKSAmJiAhaXRlbS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9sKCkpKSB7CiAgICAg
ICAgIGl0ZW0gPSBzdGF0aWNfY2FzdDxFbGVtZW50SW1wbCAqPihpdGVtLT5wYXJlbnROb2RlKCkp
OwogICAgICAgICBpZiAoIWl0ZW0pCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgX2lkID0g
aXRlbS0+aWRlbnRpZmllcigpOwogICAgIH0KICAgICByZXR1cm4gaXRlbTsKIH0KQEAgLTI4Njgs
NyArMjg2MCw3IEBAIHN0YXRpYyBOb2RlSW1wbCogaXNUZXh0Rmlyc3RJbkxpc3RJdGVtKE4KICAg
ICB3aGlsZSAocGFyKSB7CiAgICAgICAgIGlmIChwYXItPmZpcnN0Q2hpbGQoKSAhPSBlKQogICAg
ICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIGlmIChwYXItPmlkZW50aWZpZXIoKSA9PSBJRF9M
SSkKKyAgICAgICAgaWYgKHBhci0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmxpKCkpKQogICAgICAg
ICAgICAgcmV0dXJuIHBhcjsKICAgICAgICAgZSA9IHBhcjsKICAgICAgICAgcGFyID0gcGFyLT5w
YXJlbnROb2RlKCk7CkBAIC0zMDIyLDEwOSArMzAxNCw5NSBAQCBOU0F0dHJpYnV0ZWRTdHJpbmcg
KktXUUtIVE1MUGFydDo6YXR0cmliCiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
ICAgIC8vIFRoaXMgaXMgb3VyIHNpbXBsZSBIVE1MIC0+IEFTQ0lJIHRyYW5zZm9ybWF0aW9uOgog
ICAgICAgICAgICAgICAgIFFTdHJpbmcgdGV4dDsKLSAgICAgICAgICAgICAgICBOb2RlSW1wbDo6
SWQgX2lkID0gbi0+aWRlbnRpZmllcigpOwotICAgICAgICAgICAgICAgIHN3aXRjaChfaWQpIHsK
LSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9BOgotICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gTm90ZSB0aGUgc3RhcnQgb2YgdGhlIDxhPiBlbGVtZW50LiAgV2Ugd2lsbCBhZGQgdGhlIE5T
TGlua0F0dHJpYnV0ZU5hbWUKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGF0dHJpYnV0ZSB0
byB0aGUgYXR0cmlidXRlZCBzdHJpbmcgd2hlbiBuYXZpZ2F0aW5nIHRvIHRoZSBuZXh0IHNpYmxp
bmcgCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBvZiB0aGlzIG5vZGUuCi0gICAgICAgICAg
ICAgICAgICAgICAgICBsaW5rU3RhcnRMb2NhdGlvbiA9IFtyZXN1bHQgbGVuZ3RoXTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGxpbmtTdGFydE5vZGUgPSBzdGF0aWNfY2FzdDxFbGVtZW50SW1w
bCo+KG4pOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgY2FzZSBJRF9CUjoKLSAgICAgICAgICAgICAgICAgICAgICAgIHRleHQgKz0gIlxuIjsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGhhc05ld0xpbmUgPSB0cnVlOwotICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfTEk6
Ci0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
UVN0cmluZyBsaXN0VGV4dDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbGVtZW50SW1w
bCAqaXRlbVBhcmVudCA9IGxpc3RQYXJlbnQoc3RhdGljX2Nhc3Q8RWxlbWVudEltcGwgKj4obikp
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICghaGFzTmV3TGluZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlz
dFRleHQgKz0gJ1xuJzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNOZXdMaW5lID0g
dHJ1ZTsKLSAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0SXRlbXMuYXBwZW5k
KHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsKj4obikpOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIExpc3RJdGVtSW5mbyBpbmZvOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8u
c3RhcnQgPSBbcmVzdWx0IGxlbmd0aF07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5m
by5lbmQgPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RJdGVtTG9jYXRpb25z
LmFwcGVuZCAoaW5mbyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbGlzdFRleHQgKz0gJ1x0JzsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoaXRlbVBhcmVudCAmJiByZW5kZXJlci0+aXNMaXN0SXRlbSgpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRlckxpc3RJdGVtICpsaXN0UmVuZGVyZXIg
PSBzdGF0aWNfY2FzdDxSZW5kZXJMaXN0SXRlbSo+KHJlbmRlcmVyKTsKLQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtYXhNYXJrZXJXaWR0aCA9IE1BWChbZm9udCBwb2ludFNpemVd
LCBtYXhNYXJrZXJXaWR0aCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRj
aChzdHlsZS0+bGlzdFN0eWxlVHlwZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjYXNlIGtodG1sOjpESVNDOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGxpc3RUZXh0ICs9ICgoUUNoYXIpQlVMTEVUX0NIQVIpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2FzZSBraHRtbDo6Q0lSQ0xFOgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGxpc3RUZXh0ICs9ICgoUUNoYXIpQ0lSQ0xFX0NIQVIpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBraHRtbDo6U1FVQVJFOgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RUZXh0ICs9ICgoUUNoYXIpU1FVQVJFX0NI
QVIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBraHRtbDo6TE5PTkU6Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFFTdHJpbmcgbWFya2VyID0gbGlzdFJlbmRlcmVyLT5tYXJrZXJTdHJp
bmdWYWx1ZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RU
ZXh0ICs9IG1hcmtlcjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBVc2UgQXBwS2l0IG1ldHJpY3MuICBXaWxsIGJlIHJlbmRlcmVkIGJ5IEFwcEtpdC4KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBtYXJrZXJXaWR0aCA9IFtm
b250IHdpZHRoT2ZTdHJpbmc6IG1hcmtlci5nZXROU1N0cmluZygpXTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhNYXJrZXJXaWR0aCA9IE1BWChtYXJrZXJXaWR0
aCwgbWF4TWFya2VyV2lkdGgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgaWYgKG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjphKCkpKSB7CisgICAg
ICAgICAgICAgICAgICAgIC8vIE5vdGUgdGhlIHN0YXJ0IG9mIHRoZSA8YT4gZWxlbWVudC4gIFdl
IHdpbGwgYWRkIHRoZSBOU0xpbmtBdHRyaWJ1dGVOYW1lCisgICAgICAgICAgICAgICAgICAgIC8v
IGF0dHJpYnV0ZSB0byB0aGUgYXR0cmlidXRlZCBzdHJpbmcgd2hlbiBuYXZpZ2F0aW5nIHRvIHRo
ZSBuZXh0IHNpYmxpbmcgCisgICAgICAgICAgICAgICAgICAgIC8vIG9mIHRoaXMgbm9kZS4KKyAg
ICAgICAgICAgICAgICAgICAgbGlua1N0YXJ0TG9jYXRpb24gPSBbcmVzdWx0IGxlbmd0aF07Cisg
ICAgICAgICAgICAgICAgICAgIGxpbmtTdGFydE5vZGUgPSBzdGF0aWNfY2FzdDxFbGVtZW50SW1w
bCo+KG4pOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobi0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OmJyKCkpKSB7CisgICAgICAgICAgICAgICAgICAgIHRleHQgKz0gIlxuIjsKKyAgICAgICAg
ICAgICAgICAgICAgaGFzTmV3TGluZSA9IHRydWU7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlm
IChuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6bGkoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAg
UVN0cmluZyBsaXN0VGV4dDsKKyAgICAgICAgICAgICAgICAgICAgRWxlbWVudEltcGwgKml0ZW1Q
YXJlbnQgPSBsaXN0UGFyZW50KHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsICo+KG4pKTsKKyAgICAg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmICghaGFzTmV3TGluZSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGxpc3RUZXh0ICs9ICdcbic7CisgICAgICAgICAgICAgICAg
ICAgIGhhc05ld0xpbmUgPSB0cnVlOwogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGxpc3RUZXh0ICs9ICcgJzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdFRl
eHQgKz0gJ1x0JzsKLSAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlNNdXRh
YmxlRGljdGlvbmFyeSAqYXR0cnM7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYXR0cnMgPSBbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0cnMgc2V0T2JqZWN0OmZvbnQgZm9y
S2V5Ok5TRm9udEF0dHJpYnV0ZU5hbWVdOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoc3R5bGUgJiYgc3R5bGUtPmNvbG9yKCkuaXNWYWxpZCgpKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgW2F0dHJzIHNldE9iamVjdDpzdHlsZS0+Y29sb3IoKS5nZXRO
U0NvbG9yKCkgZm9yS2V5Ok5TRm9yZWdyb3VuZENvbG9yQXR0cmlidXRlTmFtZV07Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHlsZSAmJiBzdHlsZS0+YmFja2dyb3VuZENv
bG9yKCkuaXNWYWxpZCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0
dHJzIHNldE9iamVjdDpzdHlsZS0+YmFja2dyb3VuZENvbG9yKCkuZ2V0TlNDb2xvcigpIGZvcktl
eTpOU0JhY2tncm91bmRDb2xvckF0dHJpYnV0ZU5hbWVdOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIE5TQXR0cmlidXRlZFN0cmluZyAqcGFydGlhbFN0cmlu
ZyA9IFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzpsaXN0VGV4dC5n
ZXROU1N0cmluZygpIGF0dHJpYnV0ZXM6YXR0cnNdOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBbYXR0cnMgcmVsZWFzZV07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFtyZXN1bHQgYXBwZW5kQXR0cmlidXRlZFN0cmluZzogcGFydGlhbFN0cmluZ107ICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGFydGlhbFN0cmluZyBy
ZWxlYXNlXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIGxpc3RJdGVtcy5hcHBlbmQoc3RhdGljX2Nhc3Q8RWxlbWVudEltcGwqPihuKSk7CisgICAg
ICAgICAgICAgICAgICAgIExpc3RJdGVtSW5mbyBpbmZvOworICAgICAgICAgICAgICAgICAgICBp
bmZvLnN0YXJ0ID0gW3Jlc3VsdCBsZW5ndGhdOworICAgICAgICAgICAgICAgICAgICBpbmZvLmVu
ZCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGxpc3RJdGVtTG9jYXRpb25zLmFwcGVuZCAoaW5m
byk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBsaXN0VGV4dCAr
PSAnXHQnOworICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbVBhcmVudCAmJiByZW5kZXJlci0+
aXNMaXN0SXRlbSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJMaXN0SXRlbSAq
bGlzdFJlbmRlcmVyID0gc3RhdGljX2Nhc3Q8UmVuZGVyTGlzdEl0ZW0qPihyZW5kZXJlcik7CisK
KyAgICAgICAgICAgICAgICAgICAgICAgIG1heE1hcmtlcldpZHRoID0gTUFYKFtmb250IHBvaW50
U2l6ZV0sIG1heE1hcmtlcldpZHRoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaChz
dHlsZS0+bGlzdFN0eWxlVHlwZSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBraHRtbDo6RElTQzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdFRleHQg
Kz0gKChRQ2hhcilCVUxMRVRfQ0hBUik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Uga2h0bWw6OkNJUkNMRToK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdFRleHQgKz0gKChRQ2hhcilDSVJD
TEVfQ0hBUik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNhc2Uga2h0bWw6OlNRVUFSRToKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbGlzdFRleHQgKz0gKChRQ2hhcilTUVVBUkVfQ0hBUik7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNhc2Uga2h0bWw6OkxOT05FOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBRU3RyaW5nIG1hcmtlciA9IGxpc3RSZW5kZXJlci0+bWFy
a2VyU3RyaW5nVmFsdWUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdFRl
eHQgKz0gbWFya2VyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBVc2UgQXBw
S2l0IG1ldHJpY3MuICBXaWxsIGJlIHJlbmRlcmVkIGJ5IEFwcEtpdC4KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZmxvYXQgbWFya2VyV2lkdGggPSBbZm9udCB3aWR0aE9mU3RyaW5n
OiBtYXJrZXIuZ2V0TlNTdHJpbmcoKV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1heE1hcmtlcldpZHRoID0gTUFYKG1hcmtlcldpZHRoLCBtYXhNYXJrZXJXaWR0aCk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKIAot
ICAgICAgICAgICAgICAgICAgICBjYXNlIElEX09MOgotICAgICAgICAgICAgICAgICAgICBjYXNl
IElEX1VMOgorICAgICAgICAgICAgICAgICAgICAgICAgbGlzdFRleHQgKz0gJyAnOworICAgICAg
ICAgICAgICAgICAgICAgICAgbGlzdFRleHQgKz0gJ1x0JzsKKworICAgICAgICAgICAgICAgICAg
ICAgICAgTlNNdXRhYmxlRGljdGlvbmFyeSAqYXR0cnM7CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGF0dHJzID0gW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIFthdHRycyBzZXRPYmplY3Q6Zm9udCBmb3JLZXk6TlNGb250QXR0cmli
dXRlTmFtZV07CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3R5bGUgJiYgc3R5bGUtPmNv
bG9yKCkuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRycyBzZXRP
YmplY3Q6c3R5bGUtPmNvbG9yKCkuZ2V0TlNDb2xvcigpIGZvcktleTpOU0ZvcmVncm91bmRDb2xv
ckF0dHJpYnV0ZU5hbWVdOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0eWxlICYmIHN0
eWxlLT5iYWNrZ3JvdW5kQ29sb3IoKS5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgW2F0dHJzIHNldE9iamVjdDpzdHlsZS0+YmFja2dyb3VuZENvbG9yKCkuZ2V0TlNDb2xv
cigpIGZvcktleTpOU0JhY2tncm91bmRDb2xvckF0dHJpYnV0ZU5hbWVdOworCisgICAgICAgICAg
ICAgICAgICAgICAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKnBhcnRpYWxTdHJpbmcgPSBbW05TQXR0
cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6bGlzdFRleHQuZ2V0TlNTdHJpbmco
KSBhdHRyaWJ1dGVzOmF0dHJzXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFthdHRycyByZWxl
YXNlXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFtyZXN1bHQgYXBwZW5kQXR0cmlidXRlZFN0
cmluZzogcGFydGlhbFN0cmluZ107ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAg
ICAgICAgW3BhcnRpYWxTdHJpbmcgcmVsZWFzZV07CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9sKCkp
IHx8IG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp1bCgpKSkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCFoYXNOZXdMaW5lKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQg
Kz0gIlxuIjsKICAgICAgICAgICAgICAgICAgICAgICAgIGhhc05ld0xpbmUgPSB0cnVlOwotICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJ
RF9URDoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9USDoKLSAgICAgICAgICAgICAgICAg
ICAgY2FzZSBJRF9IUjoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9ERDoKLSAgICAgICAg
ICAgICAgICAgICAgY2FzZSBJRF9ETDoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9EVDoK
LSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9QUkU6Ci0gICAgICAgICAgICAgICAgICAgIGNh
c2UgSURfQkxPQ0tRVU9URToKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9ESVY6CisgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRkKCkp
IHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OnRoKCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OmhyKCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbi0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OmRkKCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmRsKCkpIHx8CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmR0KCkpIHx8CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnByZSgpKSB8
fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjpibG9ja3F1b3RlKCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OmRpdigpKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCFoYXNOZXdMaW5lKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQgKz0gJ1xuJzsK
ICAgICAgICAgICAgICAgICAgICAgICAgIGhhc05ld0xpbmUgPSB0cnVlOwotICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfUDoKLSAgICAg
ICAgICAgICAgICAgICAgY2FzZSBJRF9UUjoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9I
MToKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9IMjoKLSAgICAgICAgICAgICAgICAgICAg
Y2FzZSBJRF9IMzoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9INDoKLSAgICAgICAgICAg
ICAgICAgICAgY2FzZSBJRF9INToKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9INjogewor
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpw
KCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OnRyKCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OmgxKCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmgyKCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmgzKCkpIHx8CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omg0KCkpIHx8CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omg1KCkp
IHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6Omg2KCkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWhhc05ld0xpbmUpCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCArPSAnXG4nOwogICAgICAgICAgICAgICAg
ICAgICAgICAgCkBAIC0zMTM5LDEwICszMTE3LDggQEAgTlNBdHRyaWJ1dGVkU3RyaW5nICpLV1FL
SFRNTFBhcnQ6OmF0dHJpYgogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICBoYXNOZXdMaW5lID0gdHJ1ZTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9JTUc6
CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpp
bWcoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZW5kaW5nU3R5bGVkU3BhY2Ug
IT0gbmlsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpbmtTdGFydExvY2F0
aW9uID09IFtyZXN1bHQgbGVuZ3RoXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICArK2xpbmtTdGFydExvY2F0aW9uOwpAQCAtMzE1Niw4ICszMTMyLDkgQEAgTlNBdHRyaWJ1dGVk
U3RyaW5nICpLV1FLSFRNTFBhcnQ6OmF0dHJpYgogICAgICAgICAgICAgICAgICAgICAgICAgTlNB
dHRyaWJ1dGVkU3RyaW5nICppU3RyaW5nID0gW05TQXR0cmlidXRlZFN0cmluZyBhdHRyaWJ1dGVk
U3RyaW5nV2l0aEF0dGFjaG1lbnQ6YXR0YWNobWVudF07CiAgICAgICAgICAgICAgICAgICAgICAg
ICBbcmVzdWx0IGFwcGVuZEF0dHJpYnV0ZWRTdHJpbmc6IGlTdHJpbmddOwogICAgICAgICAgICAg
ICAgICAgICAgICAgW2F0dGFjaG1lbnQgcmVsZWFzZV07Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KKwogICAg
ICAgICAgICAgICAgIE5TQXR0cmlidXRlZFN0cmluZyAqcGFydGlhbFN0cmluZyA9IFtbTlNBdHRy
aWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzp0ZXh0LmdldE5TU3RyaW5nKCldOwog
ICAgICAgICAgICAgICAgIFtyZXN1bHQgYXBwZW5kQXR0cmlidXRlZFN0cmluZzogcGFydGlhbFN0
cmluZ107CiAgICAgICAgICAgICAgICAgW3BhcnRpYWxTdHJpbmcgcmVsZWFzZV07CkBAIC0zMTc5
LDcxICszMTU2LDYwIEBAIE5TQXR0cmlidXRlZFN0cmluZyAqS1dRS0hUTUxQYXJ0OjphdHRyaWIK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIG5leHQgPSBuLT5uZXh0U2libGlu
ZygpOwogCi0gICAgICAgICAgICBOb2RlSW1wbDo6SWQgX2lkID0gbi0+aWRlbnRpZmllcigpOwot
ICAgICAgICAgICAgc3dpdGNoKF9pZCkgewotICAgICAgICAgICAgICAgIGNhc2UgSURfQToKLSAg
ICAgICAgICAgICAgICAgICAgLy8gRW5kIG9mIGEgPGE+IGVsZW1lbnQuICBDcmVhdGUgYW4gYXR0
cmlidXRlZCBzdHJpbmcgTlNMaW5rQXR0cmlidXRlTmFtZSBhdHRyaWJ1dGUKLSAgICAgICAgICAg
ICAgICAgICAgLy8gZm9yIHRoZSByYW5nZSBvZiB0aGUgbGluay4gIE5vdGUgdGhhdCB3ZSBjcmVh
dGUgdGhlIGF0dHJpYnV0ZWQgc3RyaW5nIGZyb20gdGhlIERPTSwgd2hpY2gKLSAgICAgICAgICAg
ICAgICAgICAgLy8gd2lsbCBoYXZlIGNvcnJlY3RlZCBhbnkgaWxsZWdhbGx5IG5lc3RlZCA8YT4g
ZWxlbWVudHMuCi0gICAgICAgICAgICAgICAgICAgIGlmIChsaW5rU3RhcnROb2RlICYmIG4gPT0g
bGlua1N0YXJ0Tm9kZSl7Ci0gICAgICAgICAgICAgICAgICAgICAgICBET01TdHJpbmcgaHJlZiA9
IHBhcnNlVVJMKGxpbmtTdGFydE5vZGUtPmdldEF0dHJpYnV0ZShBVFRSX0hSRUYpKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIEtVUkwga1VSTCA9IEtXUShsaW5rU3RhcnROb2RlLT5nZXREb2N1
bWVudCgpLT5wYXJ0KCkpLT5jb21wbGV0ZVVSTChocmVmLnN0cmluZygpKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgTlNVUkwgKlVSTCA9IGtVUkwu
Z2V0TlNVUkwoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFtyZXN1bHQgYWRkQXR0cmlidXRl
Ok5TTGlua0F0dHJpYnV0ZU5hbWUgdmFsdWU6VVJMIHJhbmdlOk5TTWFrZVJhbmdlKGxpbmtTdGFy
dExvY2F0aW9uLCBbcmVzdWx0IGxlbmd0aF0tbGlua1N0YXJ0TG9jYXRpb24pXTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGxpbmtTdGFydE5vZGUgPSAwOwotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKG4tPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjphKCkpKSB7CisgICAgICAgICAgICAgICAgLy8gRW5kIG9mIGEgPGE+IGVs
ZW1lbnQuICBDcmVhdGUgYW4gYXR0cmlidXRlZCBzdHJpbmcgTlNMaW5rQXR0cmlidXRlTmFtZSBh
dHRyaWJ1dGUKKyAgICAgICAgICAgICAgICAvLyBmb3IgdGhlIHJhbmdlIG9mIHRoZSBsaW5rLiAg
Tm90ZSB0aGF0IHdlIGNyZWF0ZSB0aGUgYXR0cmlidXRlZCBzdHJpbmcgZnJvbSB0aGUgRE9NLCB3
aGljaAorICAgICAgICAgICAgICAgIC8vIHdpbGwgaGF2ZSBjb3JyZWN0ZWQgYW55IGlsbGVnYWxs
eSBuZXN0ZWQgPGE+IGVsZW1lbnRzLgorICAgICAgICAgICAgICAgIGlmIChsaW5rU3RhcnROb2Rl
ICYmIG4gPT0gbGlua1N0YXJ0Tm9kZSkgeworICAgICAgICAgICAgICAgICAgICBET01TdHJpbmcg
aHJlZiA9IHBhcnNlVVJMKGxpbmtTdGFydE5vZGUtPmdldEF0dHJpYnV0ZShBVFRSX0hSRUYpKTsK
KyAgICAgICAgICAgICAgICAgICAgS1VSTCBrVVJMID0gS1dRKGxpbmtTdGFydE5vZGUtPmdldERv
Y3VtZW50KCktPnBhcnQoKSktPmNvbXBsZXRlVVJMKGhyZWYuc3RyaW5nKCkpOworICAgICAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgTlNVUkwgKlVSTCA9IGtVUkwuZ2V0TlNV
UkwoKTsKKyAgICAgICAgICAgICAgICAgICAgW3Jlc3VsdCBhZGRBdHRyaWJ1dGU6TlNMaW5rQXR0
cmlidXRlTmFtZSB2YWx1ZTpVUkwgcmFuZ2U6TlNNYWtlUmFuZ2UobGlua1N0YXJ0TG9jYXRpb24s
IFtyZXN1bHQgbGVuZ3RoXS1saW5rU3RhcnRMb2NhdGlvbildOworICAgICAgICAgICAgICAgICAg
ICBsaW5rU3RhcnROb2RlID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBlbHNlIGlmIChuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b2woKSkgfHwgbi0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OnVsKCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFoYXNO
ZXdMaW5lKQorICAgICAgICAgICAgICAgICAgICB0ZXh0ICs9ICdcbic7CisgICAgICAgICAgICAg
ICAgaGFzTmV3TGluZSA9IHRydWU7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG4tPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjpsaSgpKSkgewogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IGNhc2UgSURfT0w6Ci0gICAgICAgICAgICAgICAgY2FzZSBJRF9VTDoKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKCFoYXNOZXdMaW5lKQotICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCArPSAn
XG4nOwotICAgICAgICAgICAgICAgICAgICBoYXNOZXdMaW5lID0gdHJ1ZTsKLSAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICBjYXNlIElEX0xJOgotICAgICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgaSwgY291bnQgPSBsaXN0
SXRlbXMuY291bnQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBj
b3VudDsgaSsrKXsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGlzdEl0ZW1zLmF0
KGkpID09IG4pewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0SXRlbUxvY2F0
aW9uc1tpXS5lbmQgPSBbcmVzdWx0IGxlbmd0aF07Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpbnQgaSwgY291bnQgPSBsaXN0SXRlbXMu
Y291bnQoKTsKKyAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKyl7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChsaXN0SXRlbXMuYXQoaSkgPT0gbil7CisgICAgICAgICAg
ICAgICAgICAgICAgICBsaXN0SXRlbUxvY2F0aW9uc1tpXS5lbmQgPSBbcmVzdWx0IGxlbmd0aF07
CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICBpZiAoIWhhc05ld0xpbmUpCi0gICAgICAgICAgICAgICAgICAg
ICAgICB0ZXh0ICs9ICdcbic7Ci0gICAgICAgICAgICAgICAgICAgIGhhc05ld0xpbmUgPSB0cnVl
OwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgIGNhc2UgSURf
VEQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBJRF9USDoKLSAgICAgICAgICAgICAgICBjYXNlIElE
X0hSOgotICAgICAgICAgICAgICAgIGNhc2UgSURfREQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBJ
RF9ETDoKLSAgICAgICAgICAgICAgICBjYXNlIElEX0RUOgotICAgICAgICAgICAgICAgIGNhc2Ug
SURfUFJFOgotICAgICAgICAgICAgICAgIGNhc2UgSURfQkxPQ0tRVU9URToKLSAgICAgICAgICAg
ICAgICBjYXNlIElEX0RJVjoKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNOZXdMaW5lKQot
ICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCArPSAnXG4nOwotICAgICAgICAgICAgICAgICAg
ICBoYXNOZXdMaW5lID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgY2FzZSBJRF9QOgotICAgICAgICAgICAgICAgIGNhc2UgSURfVFI6Ci0gICAgICAg
ICAgICAgICAgY2FzZSBJRF9IMToKLSAgICAgICAgICAgICAgICBjYXNlIElEX0gyOgotICAgICAg
ICAgICAgICAgIGNhc2UgSURfSDM6Ci0gICAgICAgICAgICAgICAgY2FzZSBJRF9INDoKLSAgICAg
ICAgICAgICAgICBjYXNlIElEX0g1OgotICAgICAgICAgICAgICAgIGNhc2UgSURfSDY6Ci0gICAg
ICAgICAgICAgICAgICAgIGlmICghaGFzTmV3TGluZSkKLSAgICAgICAgICAgICAgICAgICAgICAg
IHRleHQgKz0gJ1xuJzsKLSAgICAgICAgICAgICAgICAgICAgLy8gQW4gZXh0cmEgbmV3bGluZSBp
cyBuZWVkZWQgYXQgdGhlIHN0YXJ0LCBub3QgdGhlIGVuZCwgb2YgdGhlc2UgdHlwZXMgb2YgdGFn
cywKLSAgICAgICAgICAgICAgICAgICAgLy8gc28gZG9uJ3QgYWRkIGFub3RoZXIgaGVyZS4KLSAg
ICAgICAgICAgICAgICAgICAgaGFzTmV3TGluZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIWhhc05ld0xp
bmUpCisgICAgICAgICAgICAgICAgICAgIHRleHQgKz0gJ1xuJzsKKyAgICAgICAgICAgICAgICBo
YXNOZXdMaW5lID0gdHJ1ZTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobi0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OnRkKCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjp0aCgpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6aHIoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OmRkKCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjpkbCgpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6ZHQoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OnByZSgpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6YmxvY2txdW90ZSgpKSB8fAorICAgICAgICAgICAgICAgICAgICAg
ICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZGl2KCkpKSB7CisgICAgICAgICAgICAgICAgaWYg
KCFoYXNOZXdMaW5lKQorICAgICAgICAgICAgICAgICAgICB0ZXh0ICs9ICdcbic7CisgICAgICAg
ICAgICAgICAgaGFzTmV3TGluZSA9IHRydWU7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG4tPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjpwKCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgIG4tPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjp0cigpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICBuLT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6aDEoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgbi0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OmgyKCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgIG4t
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoMygpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICBu
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDQoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAg
bi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omg1KCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAg
IG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoNigpKSkgeworICAgICAgICAgICAgICAgIGlmICgh
aGFzTmV3TGluZSkKKyAgICAgICAgICAgICAgICAgICAgdGV4dCArPSAnXG4nOworICAgICAgICAg
ICAgICAgIC8vIEFuIGV4dHJhIG5ld2xpbmUgaXMgbmVlZGVkIGF0IHRoZSBzdGFydCwgbm90IHRo
ZSBlbmQsIG9mIHRoZXNlIHR5cGVzIG9mIHRhZ3MsCisgICAgICAgICAgICAgICAgLy8gc28gZG9u
J3QgYWRkIGFub3RoZXIgaGVyZS4KKyAgICAgICAgICAgICAgICBoYXNOZXdMaW5lID0gdHJ1ZTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgTlNBdHRyaWJ1dGVkU3Ry
aW5nICpwYXJ0aWFsU3RyaW5nID0gW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRo
U3RyaW5nOnRleHQuZ2V0TlNTdHJpbmcoKV07CkBAIC0zNDc2LDcgKzM0NDIsNyBAQCBSZW5kZXJT
dHlsZSAqS1dRS0hUTUxQYXJ0OjpzdHlsZUZvclNlbGVjCiAgICAgICAgIHJldHVybiBub2RlLT5y
ZW5kZXJlcigpLT5zdHlsZSgpOwogCiAgICAgaW50IGV4Y2VwdGlvbkNvZGUgPSAwOwotICAgIEVs
ZW1lbnRJbXBsICpzdHlsZUVsZW1lbnQgPSB4bWxEb2NJbXBsKCktPmNyZWF0ZUhUTUxFbGVtZW50
KCJzcGFuIiwgZXhjZXB0aW9uQ29kZSk7CisgICAgRWxlbWVudEltcGwgKnN0eWxlRWxlbWVudCA9
IHhtbERvY0ltcGwoKS0+Y3JlYXRlRWxlbWVudE5TKFhIVE1MX05BTUVTUEFDRSwgInNwYW4iLCBl
eGNlcHRpb25Db2RlKTsKICAgICBBU1NFUlQoZXhjZXB0aW9uQ29kZSA9PSAwKTsKIAogICAgIHN0
eWxlRWxlbWVudC0+cmVmKCk7CkBAIC0zNzAzLDcgKzM2NjksNyBAQCB2b2lkIEtXUUtIVE1MUGFy
dDo6c2V0U2VsZWN0aW9uRnJvbU5vbmUoCiAgICAgICAgIHdoaWxlIChub2RlKSB7CiAgICAgICAg
ICAgICAvLyBMb29rIGZvciBhIGJsb2NrIGZsb3csIGJ1dCBza2lwIG92ZXIgdGhlIEhUTUwgZWxl
bWVudCwgc2luY2Ugd2UgcmVhbGx5CiAgICAgICAgICAgICAvLyB3YW50IHRvIGdldCBhdCBsZWFz
dCBhcyBmYXIgYXMgdGhlIHRoZSBCT0RZIGVsZW1lbnQgaW4gYSBkb2N1bWVudC4KLSAgICAgICAg
ICAgIGlmIChub2RlLT5pc0Jsb2NrRmxvdygpICYmIG5vZGUtPmlkZW50aWZpZXIoKSAhPSBJRF9I
VE1MKQorICAgICAgICAgICAgaWYgKG5vZGUtPmlzQmxvY2tGbG93KCkgJiYgbm9kZS0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6Omh0bWwoKSkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpOwogICAgICAgICB9CkluZGV4OiBr
d3EvS1dRUmVuZGVyVHJlZURlYnVnLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3Qv
V2ViQ29yZS9rd3EvS1dRUmVuZGVyVHJlZURlYnVnLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS40MQpkaWZmIC11IC1wIC1yMS40MSBrd3EvS1dRUmVuZGVyVHJlZURlYnVnLmNwcAotLS0ga3dx
L0tXUVJlbmRlclRyZWVEZWJ1Zy5jcHAJMTYgTWF5IDIwMDUgMjI6MDM6NDggLTAwMDAJMS40MQor
Kysga3dxL0tXUVJlbmRlclRyZWVEZWJ1Zy5jcHAJOCBKdWwgMjAwNSAwMzowNTowMCAtMDAwMApA
QCAtMjcsNyArMjcsNiBAQAogCiAjaW5jbHVkZSAiZG9tX2RvY2ltcGwuaCIKICNpbmNsdWRlICJk
b21fcG9zaXRpb24uaCIKLSNpbmNsdWRlICJodG1sdGFncy5oIgogI2luY2x1ZGUgImpzZWRpdGlu
Zy5oIgogI2luY2x1ZGUgImtodG1sdmlldy5oIgogI2luY2x1ZGUgInJlbmRlcl9jYW52YXMuaCIK
QEAgLTExNiw5ICsxMTUsMTMgQEAgc3RhdGljIFFTdHJpbmcgZ2V0VGFnTmFtZShOb2RlSW1wbCAq
bikKIHsKICAgICBpZiAobi0+aXNEb2N1bWVudE5vZGUoKSkKICAgICAgICAgcmV0dXJuICIiOwot
ICAgIGlmIChuLT5pZCgpIDw9IElEX0xBU1RfVEFHKQotICAgICAgICByZXR1cm4gZ2V0VGFnTmFt
ZShuLT5pZCgpKS5zdHJpbmcoKTsKLSAgICByZXR1cm4gbi0+bm9kZU5hbWUoKS5zdHJpbmcoKTsK
KyAgICBpZiAobi0+aXNUZXh0Tm9kZSgpKQorICAgICAgICByZXR1cm4gIlRFWFQiOyAvLyBGSVhN
RTogUmVtb3ZlIG9uY2UgdGhlIGxheW91dCB0ZXN0cyBhcmUgcmVhZHkgdG8gY2hhbmdlLgorICAg
IGlmIChuLT5pc0NvbW1lbnROb2RlKCkpCisgICAgICAgIHJldHVybiAiQ09NTUVOVCI7CisgICAg
aWYgKG4tPmlzSFRNTEVsZW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIG4tPm5vZGVOYW1lKCkudXBw
ZXIoKS5zdHJpbmcoKTsgLy8gRklYTUU6IFdlIHdhbnQgdG8gZHVtcCB0aGUgcmVhbCBET00gbmFt
ZSwgbm90IGFuIHVwcGVyY2FzZSBuYW1lLgorICAgIHJldHVybiBuLT5ub2RlTmFtZSgpLnN0cmlu
ZygpOyAKIH0KIAogc3RhdGljIFFUZXh0U3RyZWFtICZvcGVyYXRvcjw8KFFUZXh0U3RyZWFtICZ0
cywgY29uc3QgUmVuZGVyT2JqZWN0ICZvKQpJbmRleDoga3dxL1dlYkNvcmVCcmlkZ2UubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva3dxL1dlYkNvcmVCcmlkZ2UubW0s
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzk2CmRpZmYgLXUgLXAgLXIxLjM5NiBrd3EvV2ViQ29y
ZUJyaWRnZS5tbQotLS0ga3dxL1dlYkNvcmVCcmlkZ2UubW0JMTQgSnVuIDIwMDUgMDA6MjM6NDUg
LTAwMDAJMS4zOTYKKysrIGt3cS9XZWJDb3JlQnJpZGdlLm1tCTggSnVsIDIwMDUgMDM6MDU6MDEg
LTAwMDAKQEAgLTM5LDcgKzM5LDYgQEAKICNpbXBvcnQgImh0bWxfaW1hZ2VpbXBsLmgiCiAjaW1w
b3J0ICJodG1sYXR0cnMuaCIKICNpbXBvcnQgImh0bWxlZGl0aW5nLmgiCi0jaW1wb3J0ICJodG1s
dGFncy5oIgogI2ltcG9ydCAia2h0bWxfcGFydC5oIgogI2ltcG9ydCAia2h0bWx2aWV3LmgiCiAj
aW1wb3J0ICJranNfcHJveHkuaCIKQEAgLTY3LDcgKzY2LDYgQEAKICNpbXBvcnQgIktXUUFzc2Vy
dGlvbnMuaCIKICNpbXBvcnQgIktXUUNoYXJzZXRzLmgiCiAjaW1wb3J0ICJLV1FDbGlwYm9hcmQu
aCIKLSNpbXBvcnQgIktXUURPTU5vZGUuaCIKICNpbXBvcnQgIktXUUVkaXRDb21tYW5kLmgiCiAj
aW1wb3J0ICJLV1FGb250LmgiCiAjaW1wb3J0ICJLV1FGb3VuZGF0aW9uRXh0cmFzLmgiCkBAIC0x
MDAsNiArOTgsNyBAQCB1c2luZyBET006OkhUTUxGb3JtRWxlbWVudEltcGw7CiB1c2luZyBET006
OkhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsOwogdXNpbmcgRE9NOjpIVE1MSW1hZ2VFbGVtZW50
SW1wbDsKIHVzaW5nIERPTTo6SFRNTElucHV0RWxlbWVudEltcGw7Cit1c2luZyBET006OkhUTUxO
YW1lczsKIHVzaW5nIERPTTo6Tm9kZUltcGw7CiB1c2luZyBET006OlBvc2l0aW9uOwogdXNpbmcg
RE9NOjpSYW5nZUltcGw7CkBAIC05MTMsNyArOTEyLDcgQEAgc3RhdGljIE5TVmlldyAqdmlld0Zv
ckVsZW1lbnQoRWxlbWVudEltcAogc3RhdGljIEhUTUxJbnB1dEVsZW1lbnRJbXBsICppbnB1dEVs
ZW1lbnRGcm9tRE9NRWxlbWVudChET01FbGVtZW50ICplbGVtZW50KQogewogICAgIE5vZGVJbXBs
ICpub2RlID0gW2VsZW1lbnQgX25vZGVJbXBsXTsKLSAgICBpZiAobm9kZSAmJiBpZEZyb21Ob2Rl
KG5vZGUpID09IElEX0lOUFVUKSB7CisgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjppbnB1dCgpKSkgewogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVu
dEltcGwgKj4obm9kZSk7CiAgICAgfQogICAgIHJldHVybiBuaWw7CkBAIC05MjYsNyArOTI1LDcg
QEAgc3RhdGljIEhUTUxGb3JtRWxlbWVudEltcGwgKmZvcm1FbGVtZW50RgogICAgIC8vIG1hcHMu
Z29vZ2xlLmNvbSBjcmFzaGVzIG90aGVyd2lzZSBiZWNhdXNlIGl0IGlzIGFuIHhzbHQgZmlsZQog
ICAgIC8vIHRoYXQgY29udGFpbnMgPGZvcm0+IGVsZW1lbnRzIHRoYXQgYXJlbid0IGluIGFueSBu
YW1lc3BhY2UsIHNvCiAgICAgLy8gdGhleSBjb21lIG91dCBhcyBnZW5lcmljIENNTCBlbGVtZW50
cwotICAgIGlmIChub2RlICYmIG5vZGUtPmlzSFRNTEVsZW1lbnQoKSAmJiBpZEZyb21Ob2RlKG5v
ZGUpID09IElEX0ZPUk0pIHsKKyAgICBpZiAobm9kZSAmJiBub2RlLT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6Zm9ybSgpKSkgewogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVt
ZW50SW1wbCAqPihub2RlKTsKICAgICB9CiAgICAgcmV0dXJuIG5pbDsKQEAgLTEwOTYsNyArMTA5
NSw3IEBAIHN0YXRpYyBIVE1MRm9ybUVsZW1lbnRJbXBsICpmb3JtRWxlbWVudEYKICAgICAKICAg
ICAgICAgICAgIC8vIEZJWE1FOiBDb2RlIGNvcGllZCBmcm9tIFJlbmRlckltYWdlOjp1cGRhdGVG
cm9tRWxlbWVudDsgc2hvdWxkIHNoYXJlLgogICAgICAgICAgICAgRE9NU3RyaW5nIGF0dHI7Ci0g
ICAgICAgICAgICBpZiAoaWRGcm9tTm9kZShpKSA9PSBJRF9PQkpFQ1QpIHsKKyAgICAgICAgICAg
IGlmIChpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b2JqZWN0KCkpKSB7CiAgICAgICAgICAgICAg
ICAgYXR0ciA9IGktPmdldEF0dHJpYnV0ZShBVFRSX0RBVEEpOwogICAgICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgICAgICBhdHRyID0gaS0+Z2V0QXR0cmlidXRlKEFUVFJfU1JDKTsKQEAg
LTExMDgsOSArMTEwNyw5IEBAIHN0YXRpYyBIVE1MRm9ybUVsZW1lbnRJbXBsICpmb3JtRWxlbWVu
dEYKICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gRklYTUU6IENvZGUgY29waWVkIGZyb20g
UmVuZGVySW1hZ2U6OnVwZGF0ZUZyb21FbGVtZW50OyBzaG91bGQgc2hhcmUuCiAgICAgICAgICAg
ICBET01TdHJpbmcgYWx0OwotICAgICAgICAgICAgaWYgKGlkRnJvbU5vZGUoaSkgPT0gSURfSU5Q
VVQpCisgICAgICAgICAgICBpZiAoaS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmlucHV0KCkpKQog
ICAgICAgICAgICAgICAgIGFsdCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnRJbXBsICo+
KGkpLT5hbHRUZXh0KCk7Ci0gICAgICAgICAgICBlbHNlIGlmIChpZEZyb21Ob2RlKGkpID09IElE
X0lNRykKKyAgICAgICAgICAgIGVsc2UgaWYgKGktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppbWco
KSkpCiAgICAgICAgICAgICAgICAgYWx0ID0gc3RhdGljX2Nhc3Q8SFRNTEltYWdlRWxlbWVudElt
cGwgKj4oaSktPmFsdFRleHQoKTsKICAgICAgICAgICAgIGlmICghYWx0LmlzTnVsbCgpKSB7CiAg
ICAgICAgICAgICAgICAgUVN0cmluZyBhbHRUZXh0ID0gYWx0LnN0cmluZygpOwpJbmRleDogbGF5
b3V0LXRlc3RzL2Zhc3QvZG9tL2Nzcy1kb20tcmVhZC1leHBlY3RlZC50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUvbGF5b3V0LXRlc3RzL2Zhc3QvZG9tL2Nzcy1kb20t
cmVhZC1leHBlY3RlZC50eHQsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC11IC1wIC1y
MS4xIGxheW91dC10ZXN0cy9mYXN0L2RvbS9jc3MtZG9tLXJlYWQtZXhwZWN0ZWQudHh0Ci0tLSBs
YXlvdXQtdGVzdHMvZmFzdC9kb20vY3NzLWRvbS1yZWFkLWV4cGVjdGVkLnR4dAkxOSBKdW4gMjAw
NSAwNjozODowOSAtMDAwMAkxLjEKKysrIGxheW91dC10ZXN0cy9mYXN0L2RvbS9jc3MtZG9tLXJl
YWQtZXhwZWN0ZWQudHh0CTggSnVsIDIwMDUgMDM6MDU6MDMgLTAwMDAKQEAgLTksNSArOSw1IEBA
IFNlcmlhbGl6ZWQgc3R5bGUsIHVzaW5nIENTUyBET006CiAudHdvIHsgZGlzcGxheTogaW5saW5l
OyB9CiAudGhyZWUgeyBkaXNwbGF5OiBsaXN0LWl0ZW07IGxpc3Qtc3R5bGUtdHlwZTogc3F1YXJl
OyBtYXJnaW4tbGVmdDogM2VtOyB9CiAuZm91ciB7IGRpc3BsYXk6IG5vbmU7IGNvbG9yOiByZWQ7
IH0KLUkgeyBkaXNwbGF5OiBibG9jazsgfQoraSB7IGRpc3BsYXk6IGJsb2NrOyB9CiAKSW5kZXg6
IGxheW91dC10ZXN0cy9mYXN0L292ZXJmbG93LzAwMy1leHBlY3RlZC50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUvbGF5b3V0LXRlc3RzL2Zhc3Qvb3ZlcmZsb3cvMDAz
LWV4cGVjdGVkLnR4dCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMApkaWZmIC11IC1wIC1yMS4x
MCBsYXlvdXQtdGVzdHMvZmFzdC9vdmVyZmxvdy8wMDMtZXhwZWN0ZWQudHh0Ci0tLSBsYXlvdXQt
dGVzdHMvZmFzdC9vdmVyZmxvdy8wMDMtZXhwZWN0ZWQudHh0CTExIEZlYiAyMDA1IDIyOjU5OjA3
IC0wMDAwCTEuMTAKKysrIGxheW91dC10ZXN0cy9mYXN0L292ZXJmbG93LzAwMy1leHBlY3RlZC50
eHQJOCBKdWwgMjAwNSAwMzowNTowNCAtMDAwMApAQCAtNCwxNCArNCwxNCBAQCBsYXllciBhdCAo
MTAsMTApIHNpemUgNzgweDMwMgogICBSZW5kZXJCbG9jayB7ZmFrZX0gYXQgKDEwLDEwKSBzaXpl
IDc4MHgzMDIgW2JnY29sb3I9I0ZGRkYwMF0KIGxheWVyIGF0ICgxMCwxMCkgc2l6ZSAyODJ4MzAy
IGNsaXAgYXQgKDExLDExKSBzaXplIDI2NXgzMDAgc2Nyb2xsSGVpZ2h0IDEyOTIKICAgUmVuZGVy
QmxvY2sge2NoYW5uZWx9IGF0ICgwLDApIHNpemUgMjgyeDMwMiBbYmdjb2xvcj0jRUVFRUVFXSBb
Ym9yZGVyOiAoMXB4IHNvbGlkICMwMDAwMDApXQotICAgIFJlbmRlckJsb2NrIHtUSVRMRX0gYXQg
KDExLDExKSBzaXplIDI1NXgxOQorICAgIFJlbmRlckJsb2NrIHt0aXRsZX0gYXQgKDExLDExKSBz
aXplIDI1NXgxOQogICAgICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQgKDAsMCkgc2l6ZSAxNTR4MTkK
ICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggMTU0OiAic2NvdHRhbmRyZXcuY29tIgog
ICAgIFJlbmRlckJsb2NrIHtkZXNjcmlwdGlvbn0gYXQgKDExLDQwKSBzaXplIDI1NXgxMgogICAg
ICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQgKDAsMCkgc2l6ZSAxOTF4MTIKICAgICAgICAgdGV4dCBy
dW4gYXQgKDAsMCkgd2lkdGggMTkxOiAiREhUTUwsIERPTSBhbmQgSmF2YVNjcmlwdCBOZXdzIgog
ICAgIFJlbmRlckJsb2NrIHtpdGVtfSBhdCAoMSw2Mikgc2l6ZSAyNjV4OTcgW2JnY29sb3I9I0ZG
RkZGRl0gW2JvcmRlcjogKDFweCBzb2xpZCAjQ0NDQ0NDKSBub25lICgxcHggc29saWQgI0NDQ0ND
Qykgbm9uZV0KLSAgICAgIFJlbmRlcklubGluZSB7VElUTEV9IGF0ICgwLDApIHNpemUgMjMzeDE1
CisgICAgICBSZW5kZXJJbmxpbmUge3RpdGxlfSBhdCAoMCwwKSBzaXplIDIzM3gxNQogICAgICAg
ICBSZW5kZXJUZXh0IHtURVhUfSBhdCAoMTAsMTEpIHNpemUgMjMzeDE1CiAgICAgICAgICAgdGV4
dCBydW4gYXQgKDEwLDExKSB3aWR0aCAyMzM6ICJESFRNTCBBbmltYXRpb24gQXJyYXkgR2VuZXJh
dG9yIgogICAgICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQgKDAsMCkgc2l6ZSAweDAKQEAgLTI0LDcg
KzI0LDcgQEAgbGF5ZXIgYXQgKDEwLDEwKSBzaXplIDI4MngzMDIgY2xpcCBhdCAoMQogICAgICAg
UmVuZGVyVGV4dCB7VEVYVH0gYXQgKDAsMCkgc2l6ZSAweDAKICAgICAgIFJlbmRlclRleHQge1RF
WFR9IGF0ICgwLDApIHNpemUgMHgwCiAgICAgUmVuZGVyQmxvY2sge2l0ZW19IGF0ICgxLDE2OSkg
c2l6ZSAyNjV4ODIgW2JnY29sb3I9I0ZGRkZGRl0gW2JvcmRlcjogKDFweCBzb2xpZCAjQ0NDQ0ND
KSBub25lICgxcHggc29saWQgI0NDQ0NDQykgbm9uZV0KLSAgICAgIFJlbmRlcklubGluZSB7VElU
TEV9IGF0ICgwLDApIHNpemUgMTc3eDE1CisgICAgICBSZW5kZXJJbmxpbmUge3RpdGxlfSBhdCAo
MCwwKSBzaXplIDE3N3gxNQogICAgICAgICBSZW5kZXJUZXh0IHtURVhUfSBhdCAoMTAsMTEpIHNp
emUgMTc3eDE1CiAgICAgICAgICAgdGV4dCBydW4gYXQgKDEwLDExKSB3aWR0aCAxNzc6ICJET00g
YW5kIEV4dGVuZGVkIEVudHJpZXMiCiAgICAgICBSZW5kZXJUZXh0IHtURVhUfSBhdCAoMTg3LDEx
KSBzaXplIDR4MTUKQEAgLTM4LDcgKzM4LDcgQEAgbGF5ZXIgYXQgKDEwLDEwKSBzaXplIDI4Mngz
MDIgY2xpcCBhdCAoMQogICAgICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQgKDAsMCkgc2l6ZSAweDAK
ICAgICAgIFJlbmRlclRleHQge1RFWFR9IGF0ICgwLDApIHNpemUgMHgwCiAgICAgUmVuZGVyQmxv
Y2sge2l0ZW19IGF0ICgxLDI2MSkgc2l6ZSAyNjV4ODIgW2JnY29sb3I9I0ZGRkZGRl0gW2JvcmRl
cjogKDFweCBzb2xpZCAjQ0NDQ0NDKSBub25lICgxcHggc29saWQgI0NDQ0NDQykgbm9uZV0KLSAg
ICAgIFJlbmRlcklubGluZSB7VElUTEV9IGF0ICgwLDApIHNpemUgMTY0eDE1CisgICAgICBSZW5k
ZXJJbmxpbmUge3RpdGxlfSBhdCAoMCwwKSBzaXplIDE2NHgxNQogICAgICAgICBSZW5kZXJUZXh0
IHtURVhUfSBhdCAoMTAsMTEpIHNpemUgMTY0eDE1CiAgICAgICAgICAgdGV4dCBydW4gYXQgKDEw
LDExKSB3aWR0aCAxNjQ6ICJjZWxsc3BhY2luZyBhbmQgdGhlIERPTSIKICAgICAgIFJlbmRlclRl
eHQge1RFWFR9IGF0ICgxNzQsMTEpIHNpemUgNHgxNQpAQCAtNTIsNyArNTIsNyBAQCBsYXllciBh
dCAoMTAsMTApIHNpemUgMjgyeDMwMiBjbGlwIGF0ICgxCiAgICAgICBSZW5kZXJUZXh0IHtURVhU
fSBhdCAoMCwwKSBzaXplIDB4MAogICAgICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQgKDAsMCkgc2l6
ZSAweDAKICAgICBSZW5kZXJCbG9jayB7aXRlbX0gYXQgKDEsMzUzKSBzaXplIDI2NXg5NyBbYmdj
b2xvcj0jRkZGRkZGXSBbYm9yZGVyOiAoMXB4IHNvbGlkICNDQ0NDQ0MpIG5vbmUgKDFweCBzb2xp
ZCAjQ0NDQ0NDKSBub25lXQotICAgICAgUmVuZGVySW5saW5lIHtUSVRMRX0gYXQgKDAsMCkgc2l6
ZSAxNzd4MTUKKyAgICAgIFJlbmRlcklubGluZSB7dGl0bGV9IGF0ICgwLDApIHNpemUgMTc3eDE1
CiAgICAgICAgIFJlbmRlclRleHQge1RFWFR9IGF0ICgxMCwxMSkgc2l6ZSAxNzd4MTUKICAgICAg
ICAgICB0ZXh0IHJ1biBhdCAoMTAsMTEpIHdpZHRoIDE3NzogImNvbnRlbnRlZGl0YWJsZSBmb3Ig
TW96aWxsYSIKICAgICAgIFJlbmRlclRleHQge1RFWFR9IGF0ICgxODcsMTEpIHNpemUgNHgxNQpA
QCAtNjcsNyArNjcsNyBAQCBsYXllciBhdCAoMTAsMTApIHNpemUgMjgyeDMwMiBjbGlwIGF0ICgx
CiAgICAgICBSZW5kZXJUZXh0IHtURVhUfSBhdCAoMCwwKSBzaXplIDB4MAogICAgICAgUmVuZGVy
VGV4dCB7VEVYVH0gYXQgKDAsMCkgc2l6ZSAweDAKICAgICBSZW5kZXJCbG9jayB7aXRlbX0gYXQg
KDEsNDYwKSBzaXplIDI2NXg4MiBbYmdjb2xvcj0jRkZGRkZGXSBbYm9yZGVyOiAoMXB4IHNvbGlk
ICNDQ0NDQ0MpIG5vbmUgKDFweCBzb2xpZCAjQ0NDQ0NDKSBub25lXQotICAgICAgUmVuZGVySW5s
aW5lIHtUSVRMRX0gYXQgKDAsMCkgc2l6ZSAxODJ4MzAKKyAgICAgIFJlbmRlcklubGluZSB7dGl0
bGV9IGF0ICgwLDApIHNpemUgMTgyeDMwCiAgICAgICAgIFJlbmRlclRleHQge1RFWFR9IGF0ICgx
MCwxMSkgc2l6ZSAxODJ4MzAKICAgICAgICAgICB0ZXh0IHJ1biBhdCAoMTAsMTEpIHdpZHRoIDE4
MjogIkRIVE1MIFRpbWVsaW5lL0tleWZyYW1lIgogICAgICAgICAgIHRleHQgcnVuIGF0ICgxMCwy
Nikgd2lkdGggNjk6ICJBbmltYXRpb24iCkBAIC04MSw3ICs4MSw3IEBAIGxheWVyIGF0ICgxMCwx
MCkgc2l6ZSAyODJ4MzAyIGNsaXAgYXQgKDEKICAgICAgIFJlbmRlclRleHQge1RFWFR9IGF0ICgw
LDApIHNpemUgMHgwCiAgICAgICBSZW5kZXJUZXh0IHtURVhUfSBhdCAoMCwwKSBzaXplIDB4MAog
ICAgIFJlbmRlckJsb2NrIHtpdGVtfSBhdCAoMSw1NTIpIHNpemUgMjY1eDk3IFtiZ2NvbG9yPSNG
RkZGRkZdIFtib3JkZXI6ICgxcHggc29saWQgI0NDQ0NDQykgbm9uZSAoMXB4IHNvbGlkICNDQ0ND
Q0MpIG5vbmVdCi0gICAgICBSZW5kZXJJbmxpbmUge1RJVExFfSBhdCAoMCwwKSBzaXplIDE1N3gz
MAorICAgICAgUmVuZGVySW5saW5lIHt0aXRsZX0gYXQgKDAsMCkgc2l6ZSAxNTd4MzAKICAgICAg
ICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQgKDEwLDExKSBzaXplIDE1N3gzMAogICAgICAgICAgIHRl
eHQgcnVuIGF0ICgxMCwxMSkgd2lkdGggMTU3OiAiRHluQVBJIDIuOSBhbmQgTW96aWxsYSIKICAg
ICAgICAgICB0ZXh0IHJ1biBhdCAoMTAsMjYpIHdpZHRoIDEyNDogImNvbXBhdGliaWxpdHkgcG9y
dHMiCkBAIC05Niw3ICs5Niw3IEBAIGxheWVyIGF0ICgxMCwxMCkgc2l6ZSAyODJ4MzAyIGNsaXAg
YXQgKDEKICAgICAgIFJlbmRlclRleHQge1RFWFR9IGF0ICgwLDApIHNpemUgMHgwCiAgICAgICBS
ZW5kZXJUZXh0IHtURVhUfSBhdCAoMCwwKSBzaXplIDB4MAogICAgIFJlbmRlckJsb2NrIHtpdGVt
fSBhdCAoMSw2NTkpIHNpemUgMjY1eDY3IFtiZ2NvbG9yPSNGRkZGRkZdIFtib3JkZXI6ICgxcHgg
c29saWQgI0NDQ0NDQykgbm9uZSAoMXB4IHNvbGlkICNDQ0NDQ0MpIG5vbmVdCi0gICAgICBSZW5k
ZXJJbmxpbmUge1RJVExFfSBhdCAoMCwwKSBzaXplIDE1NHgxNQorICAgICAgUmVuZGVySW5saW5l
IHt0aXRsZX0gYXQgKDAsMCkgc2l6ZSAxNTR4MTUKICAgICAgICAgUmVuZGVyVGV4dCB7VEVYVH0g
YXQgKDEwLDExKSBzaXplIDE1NHgxNQogICAgICAgICAgIHRleHQgcnVuIGF0ICgxMCwxMSkgd2lk
dGggMTU0OiAiIWxpbmVEcmF3IGJvb2ttYXJrbGV0IgogICAgICAgUmVuZGVyVGV4dCB7VEVYVH0g
YXQgKDE2NCwxMSkgc2l6ZSA0eDE1CkBAIC0xMDksNyArMTA5LDcgQEAgbGF5ZXIgYXQgKDEwLDEw
KSBzaXplIDI4MngzMDIgY2xpcCBhdCAoMQogICAgICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQgKDAs
MCkgc2l6ZSAweDAKICAgICAgIFJlbmRlclRleHQge1RFWFR9IGF0ICgwLDApIHNpemUgMHgwCiAg
ICAgUmVuZGVyQmxvY2sge2l0ZW19IGF0ICgxLDczNikgc2l6ZSAyNjV4OTcgW2JnY29sb3I9I0ZG
RkZGRl0gW2JvcmRlcjogKDFweCBzb2xpZCAjQ0NDQ0NDKSBub25lICgxcHggc29saWQgI0NDQ0ND
Qykgbm9uZV0KLSAgICAgIFJlbmRlcklubGluZSB7VElUTEV9IGF0ICgwLDApIHNpemUgMjAxeDE1
CisgICAgICBSZW5kZXJJbmxpbmUge3RpdGxlfSBhdCAoMCwwKSBzaXplIDIwMXgxNQogICAgICAg
ICBSZW5kZXJUZXh0IHtURVhUfSBhdCAoMTAsMTEpIHNpemUgMjAxeDE1CiAgICAgICAgICAgdGV4
dCBydW4gYXQgKDEwLDExKSB3aWR0aCAyMDE6ICJNb3ppbGxhLCBESFRNTCBhbmQgRE9NIGxpbmtz
IgogICAgICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQgKDIxMSwxMSkgc2l6ZSA0eDE1CkBAIC0xMjQs
NyArMTI0LDcgQEAgbGF5ZXIgYXQgKDEwLDEwKSBzaXplIDI4MngzMDIgY2xpcCBhdCAoMQogICAg
ICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQgKDAsMCkgc2l6ZSAweDAKICAgICAgIFJlbmRlclRleHQg
e1RFWFR9IGF0ICgwLDApIHNpemUgMHgwCiAgICAgUmVuZGVyQmxvY2sge2l0ZW19IGF0ICgxLDg0
Mykgc2l6ZSAyNjV4NjcgW2JnY29sb3I9I0ZGRkZGRl0gW2JvcmRlcjogKDFweCBzb2xpZCAjQ0ND
Q0NDKSBub25lICgxcHggc29saWQgI0NDQ0NDQykgbm9uZV0KLSAgICAgIFJlbmRlcklubGluZSB7
VElUTEV9IGF0ICgwLDApIHNpemUgMTAzeDE1CisgICAgICBSZW5kZXJJbmxpbmUge3RpdGxlfSBh
dCAoMCwwKSBzaXplIDEwM3gxNQogICAgICAgICBSZW5kZXJUZXh0IHtURVhUfSBhdCAoMTAsMTEp
IHNpemUgMTAzeDE1CiAgICAgICAgICAgdGV4dCBydW4gYXQgKDEwLDExKSB3aWR0aCAxMDM6ICJN
b3ppbGxhIDEuMCBSQzIiCiAgICAgICBSZW5kZXJUZXh0IHtURVhUfSBhdCAoMTEzLDExKSBzaXpl
IDR4MTUKQEAgLTEzNyw3ICsxMzcsNyBAQCBsYXllciBhdCAoMTAsMTApIHNpemUgMjgyeDMwMiBj
bGlwIGF0ICgxCiAgICAgICBSZW5kZXJUZXh0IHtURVhUfSBhdCAoMCwwKSBzaXplIDB4MAogICAg
ICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQgKDAsMCkgc2l6ZSAweDAKICAgICBSZW5kZXJCbG9jayB7
aXRlbX0gYXQgKDEsOTIwKSBzaXplIDI2NXg5NyBbYmdjb2xvcj0jRkZGRkZGXSBbYm9yZGVyOiAo
MXB4IHNvbGlkICNDQ0NDQ0MpIG5vbmUgKDFweCBzb2xpZCAjQ0NDQ0NDKSBub25lXQotICAgICAg
UmVuZGVySW5saW5lIHtUSVRMRX0gYXQgKDAsMCkgc2l6ZSAyMzZ4MzAKKyAgICAgIFJlbmRlcklu
bGluZSB7dGl0bGV9IGF0ICgwLDApIHNpemUgMjM2eDMwCiAgICAgICAgIFJlbmRlclRleHQge1RF
WFR9IGF0ICgxMCwxMSkgc2l6ZSAyMzZ4MzAKICAgICAgICAgICB0ZXh0IHJ1biBhdCAoMTAsMTEp
IHdpZHRoIDIzNjogImphdmFzY3JpcHQ6IGlzIGRlcHJlY2F0ZWQuIERvbid0IHVzZSIKICAgICAg
ICAgICB0ZXh0IHJ1biBhdCAoMTAsMjYpIHdpZHRoIDEzOiAiaXQuIgpAQCAtMTUyLDcgKzE1Miw3
IEBAIGxheWVyIGF0ICgxMCwxMCkgc2l6ZSAyODJ4MzAyIGNsaXAgYXQgKDEKICAgICAgIFJlbmRl
clRleHQge1RFWFR9IGF0ICgwLDApIHNpemUgMHgwCiAgICAgICBSZW5kZXJUZXh0IHtURVhUfSBh
dCAoMCwwKSBzaXplIDB4MAogICAgIFJlbmRlckJsb2NrIHtpdGVtfSBhdCAoMSwxMDI3KSBzaXpl
IDI2NXg2NyBbYmdjb2xvcj0jRkZGRkZGXSBbYm9yZGVyOiAoMXB4IHNvbGlkICNDQ0NDQ0MpIG5v
bmUgKDFweCBzb2xpZCAjQ0NDQ0NDKSBub25lXQotICAgICAgUmVuZGVySW5saW5lIHtUSVRMRX0g
YXQgKDAsMCkgc2l6ZSAxNzZ4MTUKKyAgICAgIFJlbmRlcklubGluZSB7dGl0bGV9IGF0ICgwLDAp
IHNpemUgMTc2eDE1CiAgICAgICAgIFJlbmRlclRleHQge1RFWFR9IGF0ICgxMCwxMSkgc2l6ZSAx
NzZ4MTUKICAgICAgICAgICB0ZXh0IHJ1biBhdCAoMTAsMTEpIHdpZHRoIDE3NjogIkNvbmRpdGlv
bmFsIFNjcmlwdCBMb2FkaW5nIgogICAgICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQgKDAsMCkgc2l6
ZSAweDAKQEAgLTE2Myw3ICsxNjMsNyBAQCBsYXllciBhdCAoMTAsMTApIHNpemUgMjgyeDMwMiBj
bGlwIGF0ICgxCiAgICAgICBSZW5kZXJUZXh0IHtURVhUfSBhdCAoMCwwKSBzaXplIDB4MAogICAg
ICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQgKDAsMCkgc2l6ZSAweDAKICAgICBSZW5kZXJCbG9jayB7
aXRlbX0gYXQgKDEsMTEwNCkgc2l6ZSAyNjV4ODIgW2JnY29sb3I9I0ZGRkZGRl0gW2JvcmRlcjog
KDFweCBzb2xpZCAjQ0NDQ0NDKSBub25lICgxcHggc29saWQgI0NDQ0NDQykgbm9uZV0KLSAgICAg
IFJlbmRlcklubGluZSB7VElUTEV9IGF0ICgwLDApIHNpemUgMTE1eDE1CisgICAgICBSZW5kZXJJ
bmxpbmUge3RpdGxlfSBhdCAoMCwwKSBzaXplIDExNXgxNQogICAgICAgICBSZW5kZXJUZXh0IHtU
RVhUfSBhdCAoMTAsMTEpIHNpemUgMTE1eDE1CiAgICAgICAgICAgdGV4dCBydW4gYXQgKDEwLDEx
KSB3aWR0aCAxMTU6ICJTdG9yaWVzIGFuZCBUb29scyIKICAgICAgIFJlbmRlclRleHQge1RFWFR9
IGF0ICgxMjUsMTEpIHNpemUgNHgxNQpAQCAtMTc3LDcgKzE3Nyw3IEBAIGxheWVyIGF0ICgxMCwx
MCkgc2l6ZSAyODJ4MzAyIGNsaXAgYXQgKDEKICAgICAgIFJlbmRlclRleHQge1RFWFR9IGF0ICgw
LDApIHNpemUgMHgwCiAgICAgICBSZW5kZXJUZXh0IHtURVhUfSBhdCAoMCwwKSBzaXplIDB4MAog
ICAgIFJlbmRlckJsb2NrIHtpdGVtfSBhdCAoMSwxMTk2KSBzaXplIDI2NXg5NyBbYmdjb2xvcj0j
RkZGRkZGXSBbYm9yZGVyOiAoMXB4IHNvbGlkICNDQ0NDQ0MpIG5vbmUgKDFweCBzb2xpZCAjQ0ND
Q0NDKSBub25lXQotICAgICAgUmVuZGVySW5saW5lIHtUSVRMRX0gYXQgKDAsMCkgc2l6ZSAxNjZ4
MTUKKyAgICAgIFJlbmRlcklubGluZSB7dGl0bGV9IGF0ICgwLDApIHNpemUgMTY2eDE1CiAgICAg
ICAgIFJlbmRlclRleHQge1RFWFR9IGF0ICgxMCwxMSkgc2l6ZSAxNjZ4MTUKICAgICAgICAgICB0
ZXh0IHJ1biBhdCAoMTAsMTEpIHdpZHRoIDE2NjogIldob2xlIExvdHRvIEdlY2tvIExpbmtzIgog
ICAgICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQgKDE3NiwxMSkgc2l6ZSA0eDE1CkluZGV4OiBsYXlv
dXQtdGVzdHMvZmFzdC90b2tlbml6ZXIvMDAyLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9sYXlvdXQtdGVzdHMvZmFzdC90b2tlbml6ZXIvMDAyLWV4
cGVjdGVkLnR4dCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXUgLXAgLXIxLjEgbGF5
b3V0LXRlc3RzL2Zhc3QvdG9rZW5pemVyLzAwMi1leHBlY3RlZC50eHQKLS0tIGxheW91dC10ZXN0
cy9mYXN0L3Rva2VuaXplci8wMDItZXhwZWN0ZWQudHh0CTI2IEp1bCAyMDA0IDIyOjQ1OjUxIC0w
MDAwCTEuMQorKysgbGF5b3V0LXRlc3RzL2Zhc3QvdG9rZW5pemVyLzAwMi1leHBlY3RlZC50eHQJ
OCBKdWwgMjAwNSAwMzowNTowNCAtMDAwMApAQCAtMSw3ICsxLDcgQEAKIGxheWVyIGF0ICgwLDAp
IHNpemUgODAweDYwMAogICBSZW5kZXJDYW52YXMgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCi1sYXll
ciBhdCAoMCwwKSBzaXplIDgwMHgzNAotICBSZW5kZXJCbG9jayB7SFRNTH0gYXQgKDAsMCkgc2l6
ZSA4MDB4MzQKLSAgICBSZW5kZXJCb2R5IHtCT0RZfSBhdCAoOCw4KSBzaXplIDc4NHgxOAorbGF5
ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisgIFJlbmRlckJsb2NrIHtIVE1MfSBhdCAoMCwwKSBz
aXplIDgwMHg2MDAKKyAgICBSZW5kZXJCb2R5IHtCT0RZfSBhdCAoOCw4KSBzaXplIDc4NHg1ODQK
ICAgICAgIFJlbmRlclRleHQge1RFWFR9IGF0ICgwLDApIHNpemUgMzE1eDE4CiAgICAgICAgIHRl
eHQgcnVuIGF0ICgwLDApIHdpZHRoIDMxNTogInlvdSBzaG91bGRuJ3Qgc2VlIGEgcmFuZG9tIGNo
aW5lc2UgY2hhcmFjdGVyIGhlcmUiCkluZGV4OiBsYXlvdXQtdGVzdHMvZmFzdC90b2tlbml6ZXIv
ZXh0ZXJuYWwtc2NyaXB0LWRvY3VtZW50LXdyaXRlLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9sYXlvdXQtdGVzdHMvZmFzdC90b2tlbml6ZXIvZXh0
ZXJuYWwtc2NyaXB0LWRvY3VtZW50LXdyaXRlLWV4cGVjdGVkLnR4dCx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS4xCmRpZmYgLXUgLXAgLXIxLjEgbGF5b3V0LXRlc3RzL2Zhc3QvdG9rZW5pemVyL2V4
dGVybmFsLXNjcmlwdC1kb2N1bWVudC13cml0ZS1leHBlY3RlZC50eHQKLS0tIGxheW91dC10ZXN0
cy9mYXN0L3Rva2VuaXplci9leHRlcm5hbC1zY3JpcHQtZG9jdW1lbnQtd3JpdGUtZXhwZWN0ZWQu
dHh0CTE5IE9jdCAyMDA0IDE5OjAxOjE1IC0wMDAwCTEuMQorKysgbGF5b3V0LXRlc3RzL2Zhc3Qv
dG9rZW5pemVyL2V4dGVybmFsLXNjcmlwdC1kb2N1bWVudC13cml0ZS1leHBlY3RlZC50eHQJOCBK
dWwgMjAwNSAwMzowNTowNCAtMDAwMApAQCAtNCw1ICs0LDUgQEAgbGF5ZXIgYXQgKDAsMCkgc2l6
ZSA4MDB4MzQKICAgUmVuZGVyQmxvY2sge0hUTUx9IGF0ICgwLDApIHNpemUgODAweDM0CiAgICAg
UmVuZGVyQm9keSB7Qk9EWX0gYXQgKDgsOCkgc2l6ZSA3ODR4MTgKICAgICAgIFJlbmRlcklubGlu
ZSB7U1BBTn0gYXQgKDAsMCkgc2l6ZSAweDAKLSAgICAgIFJlbmRlclRleHQge1RFWFR9IGF0ICgw
LDApIHNpemUgMjI2eDE4Ci0gICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDIyNjogIlRo
aXMgc2hvdWxkIGJlIGEgc3BhbjogW29iamVjdCBzcGFuXSIKKyAgICAgIFJlbmRlclRleHQge1RF
WFR9IGF0ICgwLDApIHNpemUgMjM5eDE4CisgICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRo
IDIzOTogIlRoaXMgc2hvdWxkIGJlIGEgc3BhbjogW29iamVjdCBTUEFOXSIKSW5kZXg6IGxheW91
dC10ZXN0cy9mYXN0L3Rva2VuaXplci9zY3JpcHRfZXh0cmFfY2xvc2UtZXhwZWN0ZWQudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2xheW91dC10ZXN0cy9mYXN0L3Rv
a2VuaXplci9zY3JpcHRfZXh0cmFfY2xvc2UtZXhwZWN0ZWQudHh0LHYKcmV0cmlldmluZyByZXZp
c2lvbiAxLjUKZGlmZiAtdSAtcCAtcjEuNSBsYXlvdXQtdGVzdHMvZmFzdC90b2tlbml6ZXIvc2Ny
aXB0X2V4dHJhX2Nsb3NlLWV4cGVjdGVkLnR4dAotLS0gbGF5b3V0LXRlc3RzL2Zhc3QvdG9rZW5p
emVyL3NjcmlwdF9leHRyYV9jbG9zZS1leHBlY3RlZC50eHQJNiBKdWwgMjAwNSAxODo0OTowNiAt
MDAwMAkxLjUKKysrIGxheW91dC10ZXN0cy9mYXN0L3Rva2VuaXplci9zY3JpcHRfZXh0cmFfY2xv
c2UtZXhwZWN0ZWQudHh0CTggSnVsIDIwMDUgMDM6MDU6MDQgLTAwMDAKQEAgLTYsNyArNiw2IEBA
IGxheWVyIGF0ICgwLDApIHNpemUgODAweDYwMAogICAgICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQg
KDAsMCkgc2l6ZSA1NXgxOAogICAgICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCA1NTogIlRF
U1QuLi4gIgogICAgICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQgKDAsMCkgc2l6ZSAweDAKLSAgICAg
IFJlbmRlclRleHQge1RFWFR9IGF0ICgwLDApIHNpemUgMHgwCiAgICAgICBSZW5kZXJUZXh0IHtU
RVhUfSBhdCAoNTUsMCkgc2l6ZSAyMzJ4MTgKICAgICAgICAgdGV4dCBydW4gYXQgKDU1LDApIHdp
ZHRoIDY5OiAiUEFTU0VELiAiCiAgICAgICAgIHRleHQgcnVuIGF0ICgxMjQsMCkgd2lkdGggMTYz
OiAiVGhpcyB0ZXh0IHNob3VsZCBzaG93IHVwLiIKSW5kZXg6IGxheW91dC10ZXN0cy9mYXN0L3Rv
a2VuaXplci9zY3JpcHRfcXVpcmstZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IGxh
eW91dC10ZXN0cy9mYXN0L3Rva2VuaXplci9zY3JpcHRfcXVpcmstZXhwZWN0ZWQudHh0CmRpZmYg
LU4gbGF5b3V0LXRlc3RzL2Zhc3QvdG9rZW5pemVyL3NjcmlwdF9xdWlyay1leHBlY3RlZC50eHQK
LS0tIGxheW91dC10ZXN0cy9mYXN0L3Rva2VuaXplci9zY3JpcHRfcXVpcmstZXhwZWN0ZWQudHh0
CTE3IEp1biAyMDA1IDIwOjAwOjExIC0wMDAwCTEuMQorKysgL2Rldi9udWxsCTEgSmFuIDE5NzAg
MDA6MDA6MDAgLTAwMDAKQEAgLTEsOSArMCwwIEBACi1sYXllciBhdCAoMCwwKSBzaXplIDgwMHg2
MDAKLSAgUmVuZGVyQ2FudmFzIGF0ICgwLDApIHNpemUgODAweDYwMAotbGF5ZXIgYXQgKDAsMCkg
c2l6ZSA4MDB4NjAwCi0gIFJlbmRlckJsb2NrIHtIVE1MfSBhdCAoMCwwKSBzaXplIDgwMHg2MDAK
LSAgICBSZW5kZXJCb2R5IHtCT0RZfSBhdCAoOCw4KSBzaXplIDc4NHg1ODQKLSAgICAgIFJlbmRl
clRleHQge1RFWFR9IGF0ICgwLDApIHNpemUgMjc1eDE4Ci0gICAgICAgIHRleHQgcnVuIGF0ICgw
LDApIHdpZHRoIDExMjogIlRFU1QgUEFTU0VELiAiCi0gICAgICAgIHRleHQgcnVuIGF0ICgxMTIs
MCkgd2lkdGggMTYzOiAiVGhpcyB0ZXh0IHNob3VsZCBzaG93IHVwLiIKLSAgICAgIFJlbmRlclRl
eHQge1RFWFR9IGF0ICgwLDApIHNpemUgMHgwCkluZGV4OiBsYXlvdXQtdGVzdHMvZmFzdC90b2tl
bml6ZXIvc2NyaXB0X3F1aXJrLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogbGF5b3V0LXRlc3Rz
L2Zhc3QvdG9rZW5pemVyL3NjcmlwdF9xdWlyay5odG1sCmRpZmYgLU4gbGF5b3V0LXRlc3RzL2Zh
c3QvdG9rZW5pemVyL3NjcmlwdF9xdWlyay5odG1sCi0tLSBsYXlvdXQtdGVzdHMvZmFzdC90b2tl
bml6ZXIvc2NyaXB0X3F1aXJrLmh0bWwJMTcgSnVuIDIwMDUgMjA6MDA6MTEgLTAwMDAJMS4xCisr
KyAvZGV2L251bGwJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMApAQCAtMSw2ICswLDAgQEAKLTxo
dG1sPgotPGJvZHk+Ci08c2NyaXB0IHNyYz0icmVzb3VyY2VzL2VtcHR5X3NjcmlwdC5qcyIgLz4K
LVRFU1QgUEFTU0VELiAgVGhpcyB0ZXh0IHNob3VsZCBzaG93IHVwLgotPC9ib2R5PgotPC9odG1s
ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>2860</attachid>
            <date>2005-07-07 23:08:54 -0700</date>
            <delta_ts>2005-07-07 23:14:52 -0700</delta_ts>
            <desc>Implement unrelated micro-optimizations to get back the remaining couple of milliseconds</desc>
            <filename>patch-24.txt</filename>
            <type>text/plain</type>
            <size>794080</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUucGJwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvV2ViQ29yZS9XZWJDb3JlLnBicHJvai9wcm9qZWN0LnBieHByb2osdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuNTYxCmRpZmYgLXUgLXAgLXIxLjU2MSBXZWJDb3JlLnBicHJvai9w
cm9qZWN0LnBieHByb2oKLS0tIFdlYkNvcmUucGJwcm9qL3Byb2plY3QucGJ4cHJvagk2IEp1bCAy
MDA1IDAxOjI4OjQxIC0wMDAwCTEuNTYxCisrKyBXZWJDb3JlLnBicHJvai9wcm9qZWN0LnBieHBy
b2oJOCBKdWwgMjAwNSAwNTo0OToyOCAtMDAwMApAQCAtMjE0LDMyICsyMTQsNiBAQAogLy8yRDIK
IC8vMkQzCiAvLzJENAotLy8zNTAKLS8vMzUxCi0vLzM1MgotLy8zNTMKLS8vMzU0Ci0JCTM1NEYy
NDg5MDJFRTI4NTkwQUNBMkFDQSA9IHsKLQkJCWZpbGVFbmNvZGluZyA9IDMwOwotCQkJaXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsKLQkJCWxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
Ci0JCQlwYXRoID0gS1dRRE9NTm9kZS5oOwotCQkJcmVmVHlwZSA9IDQ7Ci0JCQlzb3VyY2VUcmVl
ID0gIjxncm91cD4iOwotCQl9OwotCQkzNTRGMjQ4QTAyRUUyODU5MEFDQTJBQ0EgPSB7Ci0JCQlm
aWxlRW5jb2RpbmcgPSAzMDsKLQkJCWlzYSA9IFBCWEZpbGVSZWZlcmVuY2U7Ci0JCQlsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsKLQkJCXBhdGggPSBLV1FET01Ob2RlLmNw
cDsKLQkJCXJlZlR5cGUgPSA0OwotCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsKLS8v
MzUwCi0vLzM1MQotLy8zNTIKLS8vMzUzCi0vLzM1NAogLy81MTAKIC8vNTExCiAvLzUxMgpAQCAt
MjQ4NSw3ICsyNDU5LDYgQEAKIAkJCQk5M0YxOThEQzA4MjQ1RTU5MDAxRTlBQkMsCiAJCQkJOTNG
MTk4REUwODI0NUU1OTAwMUU5QUJDLAogCQkJCTkzRjE5OEUwMDgyNDVFNTkwMDFFOUFCQywKLQkJ
CQk5M0YxOThFMjA4MjQ1RTU5MDAxRTlBQkMsCiAJCQkJOTNGMTk4RTMwODI0NUU1OTAwMUU5QUJD
LAogCQkJCTkzRjE5OEU0MDgyNDVFNTkwMDFFOUFCQywKIAkJCQk5M0YxOThFNTA4MjQ1RTU5MDAx
RTlBQkMsCkBAIC0yNTYyLDcgKzI1MzUsNiBAQAogCQkJCTkzRjE5OTJFMDgyNDVFNTkwMDFFOUFC
QywKIAkJCQk5M0YxOTkyRjA4MjQ1RTU5MDAxRTlBQkMsCiAJCQkJOTNGMTk5MzAwODI0NUU1OTAw
MUU5QUJDLAotCQkJCTkzRjE5OTMxMDgyNDVFNTkwMDFFOUFCQywKIAkJCQk5M0YxOTkzMjA4MjQ1
RTU5MDAxRTlBQkMsCiAJCQkJOTNGMTk5MzMwODI0NUU1OTAwMUU5QUJDLAogCQkJCTkzRjE5OTM0
MDgyNDVFNTkwMDFFOUFCQywKQEAgLTI3MTcsNyArMjY4OSw2IEBACiAJCQkJOTNGMTk5QzkwODI0
NUU1OTAwMUU5QUJDLAogCQkJCTkzRjE5OUNBMDgyNDVFNTkwMDFFOUFCQywKIAkJCQk5M0YxOTlD
QjA4MjQ1RTU5MDAxRTlBQkMsCi0JCQkJOTNGMTk5Q0MwODI0NUU1OTAwMUU5QUJDLAogCQkJCTkz
RjE5OUNFMDgyNDVFNTkwMDFFOUFCQywKIAkJCQk5M0YxOTlDRjA4MjQ1RTU5MDAxRTlBQkMsCiAJ
CQkJOTNGMTk5RDAwODI0NUU1OTAwMUU5QUJDLApAQCAtMjc5OSw2ICsyNzcwLDcgQEAKIAkJCQk2
NURFODUyOTA4NzY1RkMzMDAxMTQyOEEsCiAJCQkJNjVERTg1MkEwODc2NUZDMzAwMTE0MjhBLAog
CQkJCUE4NUQ3QzE5MDg3QTZFRDkwMDZBOTE3MiwKKwkJCQlCQ0VGMzQzNTA4N0I1NjNFMDBCQkY4
MzMsCiAJCQkpOwogCQkJaXNhID0gUEJYSGVhZGVyc0J1aWxkUGhhc2U7CiAJCQlydW5Pbmx5Rm9y
RGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKQEAgLTMwNDMsMTIgKzMwMTUsNiBAQAogCQkJ
c2V0dGluZ3MgPSB7CiAJCQl9OwogCQl9OwotCQk5M0YxOThFMjA4MjQ1RTU5MDAxRTlBQkMgPSB7
Ci0JCQlmaWxlUmVmID0gRjUyM0QyMzYwMkRFNDM5NjAxODYzNUNBOwotCQkJaXNhID0gUEJYQnVp
bGRGaWxlOwotCQkJc2V0dGluZ3MgPSB7Ci0JCQl9OwotCQl9OwogCQk5M0YxOThFMzA4MjQ1RTU5
MDAxRTlBQkMgPSB7CiAJCQlmaWxlUmVmID0gRjUyM0QyMzgwMkRFNDM5NjAxODYzNUNBOwogCQkJ
aXNhID0gUEJYQnVpbGRGaWxlOwpAQCAtMzUwNSwxMiArMzQ3MSw2IEBACiAJCQlzZXR0aW5ncyA9
IHsKIAkJCX07CiAJCX07Ci0JCTkzRjE5OTMxMDgyNDVFNTkwMDFFOUFCQyA9IHsKLQkJCWZpbGVS
ZWYgPSAzNTRGMjQ4OTAyRUUyODU5MEFDQTJBQ0E7Ci0JCQlpc2EgPSBQQlhCdWlsZEZpbGU7Ci0J
CQlzZXR0aW5ncyA9IHsKLQkJCX07Ci0JCX07CiAJCTkzRjE5OTMyMDgyNDVFNTkwMDFFOUFCQyA9
IHsKIAkJCWZpbGVSZWYgPSBGNTg3ODY4NTAyREUzQjg2MDFFQTQxMjI7CiAJCQlpc2EgPSBQQlhC
dWlsZEZpbGU7CkBAIC00NDczLDEyICs0NDMzLDYgQEAKIAkJCXNldHRpbmdzID0gewogCQkJfTsK
IAkJfTsKLQkJOTNGMTk5Q0MwODI0NUU1OTAwMUU5QUJDID0gewotCQkJZmlsZVJlZiA9IEJDN0ZE
RTMyMDVDMUQ5QUIwMDcwQTkwMjsKLQkJCWlzYSA9IFBCWEJ1aWxkRmlsZTsKLQkJCXNldHRpbmdz
ID0gewotCQkJfTsKLQkJfTsKIAkJOTNGMTk5Q0UwODI0NUU1OTAwMUU5QUJDID0gewogCQkJZmls
ZVJlZiA9IEJDM0IzNjQ2MDVDOUQ1RTIwMEU0MjkwMjsKIAkJCWlzYSA9IFBCWEJ1aWxkRmlsZTsK
QEAgLTUwMTMsNyArNDk2Nyw2IEBACiAJCQkJOTNGMTlBOEIwODI0NUU1OTAwMUU5QUJDLAogCQkJ
CTkzRjE5QThDMDgyNDVFNTkwMDFFOUFCQywKIAkJCQk5M0YxOUE4RDA4MjQ1RTU5MDAxRTlBQkMs
Ci0JCQkJOTNGMTlBOEUwODI0NUU1OTAwMUU5QUJDLAogCQkJCTkzRjE5QThGMDgyNDVFNTkwMDFF
OUFCQywKIAkJCQk5M0YxOUE5MDA4MjQ1RTU5MDAxRTlBQkMsCiAJCQkJOTNGMTlBOTEwODI0NUU1
OTAwMUU5QUJDLApAQCAtNTA2Niw3ICs1MDE5LDYgQEAKIAkJCQk5M0YxOUFDMDA4MjQ1RTU5MDAx
RTlBQkMsCiAJCQkJOTNGMTlBQzEwODI0NUU1OTAwMUU5QUJDLAogCQkJCTkzRjE5QUMyMDgyNDVF
NTkwMDFFOUFCQywKLQkJCQk5M0YxOUFDMzA4MjQ1RTU5MDAxRTlBQkMsCiAJCQkJOTNGMTlBQzQw
ODI0NUU1OTAwMUU5QUJDLAogCQkJCTkzRjE5QUM1MDgyNDVFNTkwMDFFOUFCQywKIAkJCQk5M0Yx
OUFDNjA4MjQ1RTU5MDAxRTlBQkMsCkBAIC01MTA4LDcgKzUwNjAsNiBAQAogCQkJCTkzRjE5QUVD
MDgyNDVFNTkwMDFFOUFCQywKIAkJCQk5M0YxOUFFRDA4MjQ1RTU5MDAxRTlBQkMsCiAJCQkJOTNG
MTlBRUUwODI0NUU1OTAwMUU5QUJDLAotCQkJCTkzRjE5QUVGMDgyNDVFNTkwMDFFOUFCQywKIAkJ
CQk5M0YxOUFGMDA4MjQ1RTU5MDAxRTlBQkMsCiAJCQkJOTNGMTlBRjEwODI0NUU1OTAwMUU5QUJD
LAogCQkJCTkzRjE5QUYyMDgyNDVFNTkwMDFFOUFCQywKQEAgLTUxNzQsNiArNTEyNSw3IEBACiAJ
CQkJNTUwQTBCQ0QwODVGNjA0RDAwNzM1M0Q2LAogCQkJCTY1RjM3ODJBMDg3MEQ5NTgwMDBCMkY5
NCwKIAkJCQlBODVEN0MxODA4N0E2RUQ5MDA2QTkxNzIsCisJCQkJQkNFRjM0MzQwODdCNTYzRTAw
QkJGODMzLAogCQkJKTsKIAkJCWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNlOwogCQkJcnVuT25s
eUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CkBAIC01ODE0LDEyICs1NzY2LDYgQEAK
IAkJCXNldHRpbmdzID0gewogCQkJfTsKIAkJfTsKLQkJOTNGMTlBOEUwODI0NUU1OTAwMUU5QUJD
ID0gewotCQkJZmlsZVJlZiA9IEY1MjNEMjM1MDJERTQzOTYwMTg2MzVDQTsKLQkJCWlzYSA9IFBC
WEJ1aWxkRmlsZTsKLQkJCXNldHRpbmdzID0gewotCQkJfTsKLQkJfTsKIAkJOTNGMTlBOEYwODI0
NUU1OTAwMUU5QUJDID0gewogCQkJZmlsZVJlZiA9IEY1MjNEMjM3MDJERTQzOTYwMTg2MzVDQTsK
IAkJCWlzYSA9IFBCWEJ1aWxkRmlsZTsKQEAgLTYxMzIsMTIgKzYwNzgsNiBAQAogCQkJc2V0dGlu
Z3MgPSB7CiAJCQl9OwogCQl9OwotCQk5M0YxOUFDMzA4MjQ1RTU5MDAxRTlBQkMgPSB7Ci0JCQlm
aWxlUmVmID0gMzU0RjI0OEEwMkVFMjg1OTBBQ0EyQUNBOwotCQkJaXNhID0gUEJYQnVpbGRGaWxl
OwotCQkJc2V0dGluZ3MgPSB7Ci0JCQl9OwotCQl9OwogCQk5M0YxOUFDNDA4MjQ1RTU5MDAxRTlB
QkMgPSB7CiAJCQlmaWxlUmVmID0gRjUxMTdCQ0EwMkY5RkZFRjAxODYzNUNFOwogCQkJaXNhID0g
UEJYQnVpbGRGaWxlOwpAQCAtNjM4NCwxMiArNjMyNCw2IEBACiAJCQlzZXR0aW5ncyA9IHsKIAkJ
CX07CiAJCX07Ci0JCTkzRjE5QUVGMDgyNDVFNTkwMDFFOUFCQyA9IHsKLQkJCWZpbGVSZWYgPSBC
QzdGREUzMTA1QzFEOUFCMDA3MEE5MDI7Ci0JCQlpc2EgPSBQQlhCdWlsZEZpbGU7Ci0JCQlzZXR0
aW5ncyA9IHsKLQkJCX07Ci0JCX07CiAJCTkzRjE5QUYwMDgyNDVFNTkwMDFFOUFCQyA9IHsKIAkJ
CWZpbGVSZWYgPSBCQzNCMzY0NTA1QzlENUUyMDBFNDI5MDI7CiAJCQlpc2EgPSBQQlhCdWlsZEZp
bGU7CkBAIC02OTcxLDIyICs2OTA1LDYgQEAKIAkJCXJlZlR5cGUgPSA0OwogCQkJc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsKIAkJfTsKLQkJQkM3RkRFMzEwNUMxRDlBQjAwNzBBOTAyID0gewotCQkJ
ZmlsZUVuY29kaW5nID0gMzA7Ci0JCQlpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOwotCQkJbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7Ci0JCQlwYXRoID0geG1sX25hbWVzcGFj
ZV90YWJsZS5jcHA7Ci0JCQlyZWZUeXBlID0gNDsKLQkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
Ci0JCX07Ci0JCUJDN0ZERTMyMDVDMUQ5QUIwMDcwQTkwMiA9IHsKLQkJCWZpbGVFbmNvZGluZyA9
IDMwOwotCQkJaXNhID0gUEJYRmlsZVJlZmVyZW5jZTsKLQkJCWxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7Ci0JCQlwYXRoID0geG1sX25hbWVzcGFjZV90YWJsZS5oOwotCQkJcmVm
VHlwZSA9IDQ7Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwotCQl9OwogCQlCQzgwQTY5MzA0
NjhCNzgxMDBEQkNDOUMgPSB7CiAJCQlmaWxlRW5jb2RpbmcgPSAzMDsKIAkJCWlzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7CkBAIC03MTMyLDYgKzcwNTAsMzQgQEAKIAkJCXJlZlR5cGUgPSA0OwogCQkJ
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJQkNFRjM0MzIwODdCNTYzRTAwQkJGODMz
ID0geworCQkJZmlsZUVuY29kaW5nID0gMzA7CisJCQlpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOwor
CQkJbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7CisJCQlwYXRoID0gaHRt
bGZhY3RvcnkuY3BwOworCQkJcmVmVHlwZSA9IDQ7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4i
OworCQl9OworCQlCQ0VGMzQzMzA4N0I1NjNFMDBCQkY4MzMgPSB7CisJCQlmaWxlRW5jb2Rpbmcg
PSAzMDsKKwkJCWlzYSA9IFBCWEZpbGVSZWZlcmVuY2U7CisJCQlsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOworCQkJcGF0aCA9IGh0bWxmYWN0b3J5Lmg7CisJCQlyZWZUeXBlID0g
NDsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCUJDRUYzNDM0MDg3QjU2M0Uw
MEJCRjgzMyA9IHsKKwkJCWZpbGVSZWYgPSBCQ0VGMzQzMjA4N0I1NjNFMDBCQkY4MzM7CisJCQlp
c2EgPSBQQlhCdWlsZEZpbGU7CisJCQlzZXR0aW5ncyA9IHsKKwkJCX07CisJCX07CisJCUJDRUYz
NDM1MDg3QjU2M0UwMEJCRjgzMyA9IHsKKwkJCWZpbGVSZWYgPSBCQ0VGMzQzMzA4N0I1NjNFMDBC
QkY4MzM7CisJCQlpc2EgPSBQQlhCdWlsZEZpbGU7CisJCQlzZXR0aW5ncyA9IHsKKwkJCX07CisJ
CX07CiAJCUJDRjAxOTI0MDNEMzgwMjIwMEIyRDA0RCA9IHsKIAkJCWZpbGVFbmNvZGluZyA9IDMw
OwogCQkJaXNhID0gUEJYRmlsZVJlZmVyZW5jZTsKQEAgLTc1NDcsOCArNzQ5Myw2IEBACiAJCQkJ
MkQ5MDY2MEMwNjY1RDkzNzAwNkI2RjFBLAogCQkJCUY1ODc4NENEMDJERTM3NTkwMUVBNDEyMiwK
IAkJCQlGNTg3ODREQTAyREUzNzU5MDFFQTQxMjIsCi0JCQkJMzU0RjI0ODkwMkVFMjg1OTBBQ0Ey
QUNBLAotCQkJCTM1NEYyNDhBMDJFRTI4NTkwQUNBMkFDQSwKIAkJCQk5MzFDOEExNjAzODAyODhC
MDA4NjM1Q0UsCiAJCQkJOTMxQzhBMTcwMzgwMjg4QjAwODYzNUNFLAogCQkJCUJFRjdFRUEwMDVG
RjhGMEQwMDk3MTdFRSwKQEAgLTg1MTcsMjIgKzg0NjEsNiBAQAogCQkJcmVmVHlwZSA9IDQ7CiAJ
CQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OwotCQlGNTIzRDIzNTAyREU0Mzk2MDE4NjM1
Q0EgPSB7Ci0JCQlmaWxlRW5jb2RpbmcgPSAzMDsKLQkJCWlzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
Ci0JCQlsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsKLQkJCXBhdGggPSBk
dGQuY3BwOwotCQkJcmVmVHlwZSA9IDQ7Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwotCQl9
OwotCQlGNTIzRDIzNjAyREU0Mzk2MDE4NjM1Q0EgPSB7Ci0JCQlmaWxlRW5jb2RpbmcgPSAzMDsK
LQkJCWlzYSA9IFBCWEZpbGVSZWZlcmVuY2U7Ci0JCQlsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOwotCQkJcGF0aCA9IGR0ZC5oOwotCQkJcmVmVHlwZSA9IDQ7Ci0JCQlzb3VyY2VU
cmVlID0gIjxncm91cD4iOwotCQl9OwogCQlGNTIzRDIzNzAyREU0Mzk2MDE4NjM1Q0EgPSB7CiAJ
CQlmaWxlRW5jb2RpbmcgPSAzMDsKIAkJCWlzYSA9IFBCWEZpbGVSZWZlcmVuY2U7CkBAIC04NzU5
LDEwICs4Njg3LDEwIEBACiAJCX07CiAJCUY1MjNEMjc3MDJERTQzOTgwMTg2MzVDQSA9IHsKIAkJ
CWNoaWxkcmVuID0gKAorCQkJCUJDRUYzNDMyMDg3QjU2M0UwMEJCRjgzMywKKwkJCQlCQ0VGMzQz
MzA4N0I1NjNFMDBCQkY4MzMsCiAJCQkJNTUwQTBCQ0IwODVGNjA0RDAwNzM1M0Q2LAogCQkJCTU1
MEEwQkNDMDg1RjYwNEQwMDczNTNENiwKLQkJCQlGNTIzRDIzNTAyREU0Mzk2MDE4NjM1Q0EsCi0J
CQkJRjUyM0QyMzYwMkRFNDM5NjAxODYzNUNBLAogCQkJCUY1MjNEMjM3MDJERTQzOTYwMTg2MzVD
QSwKIAkJCQlGNTIzRDIzODAyREU0Mzk2MDE4NjM1Q0EsCiAJCQkJRjUyM0QyMzkwMkRFNDM5NjAx
ODYzNUNBLApAQCAtOTQ3NCw4ICs5NDAyLDYgQEAKIAkJCQlGNTIzRDMwNjAyREU0NDc2MDE4NjM1
Q0EsCiAJCQkJRjUyM0QzMDcwMkRFNDQ3NjAxODYzNUNBLAogCQkJCUY1MjNEMzA4MDJERTQ0NzYw
MTg2MzVDQSwKLQkJCQlCQzdGREUzMTA1QzFEOUFCMDA3MEE5MDIsCi0JCQkJQkM3RkRFMzIwNUMx
RDlBQjAwNzBBOTAyLAogCQkJCUY1MjNEMzA5MDJERTQ0NzYwMTg2MzVDQSwKIAkJCQlGNTIzRDMw
QTAyREU0NDc2MDE4NjM1Q0EsCiAJCQkpOwpJbmRleDoga2h0bWwva2h0bWxfcGFydC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwva2h0bWxfcGFydC5jcHAs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzI1CmRpZmYgLXUgLXAgLXIxLjMyNSBraHRtbC9raHRt
bF9wYXJ0LmNwcAotLS0ga2h0bWwva2h0bWxfcGFydC5jcHAJMjggSnVuIDIwMDUgMjM6MjI6MTYg
LTAwMDAJMS4zMjUKKysrIGtodG1sL2todG1sX3BhcnQuY3BwCTggSnVsIDIwMDUgMDU6NDk6MzEg
LTAwMDAKQEAgLTIwOCw2ICsyMDgsNyBAQCBLSFRNTFBhcnQ6OktIVE1MUGFydCggS0hUTUxWaWV3
ICp2aWV3LCBRCiB2b2lkIEtIVE1MUGFydDo6aW5pdCggS0hUTUxWaWV3ICp2aWV3LCBHVUlQcm9m
aWxlIHByb2YgKQogewogICBBdG9taWNTdHJpbmc6OmluaXQoKTsKKyAgSFRNTE5hbWVzOjppbml0
KCk7IC8vIEZJWE1FOiBXZSBzaG91bGQgbWFrZSB0aGlzIGhhcHBlbiBvbmx5IHdoZW4gSFRNTCBp
cyB1c2VkLgogICBpZiAoIHByb2YgPT0gRGVmYXVsdEdVSSApCiAgICAgc2V0WE1MRmlsZSggImto
dG1sLnJjIiApOwogICBlbHNlIGlmICggcHJvZiA9PSBCcm93c2VyVmlld0dVSSApCkBAIC01NzI0
LDcgKzU3MjUsNyBAQCBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb25JbXBsICpLSFRNTFBhCiAg
ICAgaW50IGV4Y2VwdGlvbkNvZGUgPSAwOwogCiAgICAgaWYgKGQtPm1fdHlwaW5nU3R5bGUpIHsK
LSAgICAgICAgc3R5bGVFbGVtZW50ID0geG1sRG9jSW1wbCgpLT5jcmVhdGVIVE1MRWxlbWVudCgi
c3BhbiIsIGV4Y2VwdGlvbkNvZGUpOworICAgICAgICBzdHlsZUVsZW1lbnQgPSB4bWxEb2NJbXBs
KCktPmNyZWF0ZUVsZW1lbnROUyhYSFRNTF9OQU1FU1BBQ0UsICJzcGFuIiwgZXhjZXB0aW9uQ29k
ZSk7CiAgICAgICAgIGFzc2VydChleGNlcHRpb25Db2RlID09IDApOwogCiAgICAgICAgIHN0eWxl
RWxlbWVudC0+cmVmKCk7CkluZGV4OiBraHRtbC9raHRtbHZpZXcuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2todG1sdmlldy5jcHAsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuMTMzCmRpZmYgLXUgLXAgLXIxLjEzMyBraHRtbC9raHRtbHZpZXcuY3BwCi0t
LSBraHRtbC9raHRtbHZpZXcuY3BwCTExIE1heSAyMDA1IDAwOjU4OjI3IC0wMDAwCTEuMTMzCisr
KyBraHRtbC9raHRtbHZpZXcuY3BwCTggSnVsIDIwMDUgMDU6NDk6MzMgLTAwMDAKQEAgLTYwNywx
MiArNjA3LDEyIEBAIHZvaWQgS0hUTUxWaWV3OjpsYXlvdXQoKQogICAgIGlmIChkb2N1bWVudC0+
aXNIVE1MRG9jdW1lbnQoKSkgewogICAgICAgICBOb2RlSW1wbCAqYm9keSA9IHN0YXRpY19jYXN0
PEhUTUxEb2N1bWVudEltcGwqPihkb2N1bWVudCktPmJvZHkoKTsKICAgICAgICAgaWYgKGJvZHkg
JiYgYm9keS0+cmVuZGVyZXIoKSkgewotICAgICAgICAgICAgaWYgKGJvZHktPmlkKCkgPT0gSURf
RlJBTUVTRVQpIHsKKyAgICAgICAgICAgIGlmIChib2R5LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
ZnJhbWVzZXQoKSkpIHsKICAgICAgICAgICAgICAgICBib2R5LT5yZW5kZXJlcigpLT5zZXROZWVk
c0xheW91dCh0cnVlKTsKICAgICAgICAgICAgICAgICB2TW9kZSA9IEFsd2F5c09mZjsKICAgICAg
ICAgICAgICAgICBoTW9kZSA9IEFsd2F5c09mZjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGVsc2UgaWYgKGJvZHktPmlkKCkgPT0gSURfQk9EWSkgeworICAgICAgICAgICAgZWxzZSBpZiAo
Ym9keS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJvZHkoKSkpIHsKICAgICAgICAgICAgICAgICBS
ZW5kZXJPYmplY3QqIG8gPSAocm9vdFJlbmRlcmVyLT5zdHlsZSgpLT5vdmVyZmxvdygpID09IE9W
SVNJQkxFKSA/IGJvZHktPnJlbmRlcmVyKCkgOiByb290UmVuZGVyZXI7CiAgICAgICAgICAgICAg
ICAgYXBwbHlPdmVyZmxvd1RvVmlld3BvcnQobywgaE1vZGUsIHZNb2RlKTsgLy8gT25seSBhcHBs
aWVzIHRvIEhUTUwgVUFzLCBub3QgdG8gWE1ML1hIVE1MIFVBcwogICAgICAgICAgICAgfQpAQCAt
ODc3LDEwICs4NzcsNyBAQCB2b2lkIEtIVE1MVmlldzo6dmlld3BvcnRNb3VzZURvdWJsZUNsaWNr
CiAKIHN0YXRpYyBib29sIGlzU3VibWl0SW1hZ2UoRE9NOjpOb2RlSW1wbCAqbm9kZSkKIHsKLSAg
ICByZXR1cm4gbm9kZQotICAgICAgICAmJiBub2RlLT5pc0hUTUxFbGVtZW50KCkKLSAgICAgICAg
JiYgbm9kZS0+aWQoKSA9PSBJRF9JTlBVVAotICAgICAgICAmJiBzdGF0aWNfY2FzdDxIVE1MSW5w
dXRFbGVtZW50SW1wbCo+KG5vZGUpLT5pbnB1dFR5cGUoKSA9PSBIVE1MSW5wdXRFbGVtZW50SW1w
bDo6SU1BR0U7CisgICAgcmV0dXJuIG5vZGUgJiYgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
OmlucHV0KCkpICYmIHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnRJbXBsKj4obm9kZSktPmlu
cHV0VHlwZSgpID09IEhUTUxJbnB1dEVsZW1lbnRJbXBsOjpJTUFHRTsKIH0KIAogdm9pZCBLSFRN
TFZpZXc6OnZpZXdwb3J0TW91c2VNb3ZlRXZlbnQoIFFNb3VzZUV2ZW50ICogX21vdXNlICkKSW5k
ZXg6IGtodG1sL2Nzcy9jc3NfYmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L1dlYkNvcmUva2h0bWwvY3NzL2Nzc19iYXNlLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4x
NQpkaWZmIC11IC1wIC1yMS4xNSBraHRtbC9jc3MvY3NzX2Jhc2UuY3BwCi0tLSBraHRtbC9jc3Mv
Y3NzX2Jhc2UuY3BwCTEyIEp1biAyMDA1IDA0OjA3OjMwIC0wMDAwCTEuMTUKKysrIGtodG1sL2Nz
cy9jc3NfYmFzZS5jcHAJOCBKdWwgMjAwNSAwNTo0OTozMyAtMDAwMApAQCAtOTMsOSArOTMsMTUg
QEAgU3R5bGVMaXN0SW1wbDo6flN0eWxlTGlzdEltcGwoKQogCiAvLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQogCitjb25zdCBRdWFsaWZpZWROYW1lJiBDU1NTZWxlY3Rvcjo6YW55VGFnTmFtZSgp
Cit7CisgICAgc3RhdGljIFF1YWxpZmllZE5hbWUgYW55TmFtZShudWxsQXRvbSwgc3RhckF0b20s
IHN0YXJBdG9tKTsKKyAgICByZXR1cm4gYW55TmFtZTsKK30KKwogdm9pZCBDU1NTZWxlY3Rvcjo6
cHJpbnQodm9pZCkKIHsKLSAgICBrZERlYnVnKCA2MDgwICkgPDwgIltTZWxlY3RvcjogdGFnID0g
IiA8PCAgICAgICB0YWcgPDwgIiwgYXR0ciA9IFwiIiA8PCBhdHRyIDw8ICJcIiwgbWF0Y2ggPSBc
IiIgPDwgbWF0Y2gKKyAgICBrZERlYnVnKCA2MDgwICkgPDwgIltTZWxlY3RvcjogdGFnID0gIiA8
PCAgICAgICB0YWcubG9jYWxOYW1lKCkuc3RyaW5nKCkgPDwgIiwgYXR0ciA9IFwiIiA8PCBhdHRy
IDw8ICJcIiwgbWF0Y2ggPSBcIiIgPDwgbWF0Y2gKIAkJICAgIDw8ICJcIiB2YWx1ZSA9IFwiIiA8
PCB2YWx1ZS5zdHJpbmcoKS5sYXRpbjEoKSA8PCAiXCIgcmVsYXRpb24gPSAiIDw8IChpbnQpcmVs
YXRpb24KIAkJICAgIDw8ICJdIiA8PCBlbmRsOwogICAgIGlmICggdGFnSGlzdG9yeSApCkBAIC0x
MDcsNyArMTEzLDcgQEAgdW5zaWduZWQgaW50IENTU1NlbGVjdG9yOjpzcGVjaWZpY2l0eSgpCiB7
CiAgICAgLy8gRklYTUU6IFBzZXVkby1lbGVtZW50cyBhbmQgcHNldWRvLWNsYXNzZXMgZG8gbm90
IGhhdmUgdGhlIHNhbWUgc3BlY2lmaWNpdHkuIFRoaXMgZnVuY3Rpb24KICAgICAvLyBpc24ndCBx
dWl0ZSBjb3JyZWN0LgotICAgIGludCBzID0gKChsb2NhbE5hbWVQYXJ0KHRhZykgPT0gYW55TG9j
YWxOYW1lKSA/IDAgOiAxKTsKKyAgICBpbnQgcyA9ICh0YWcubG9jYWxOYW1lKCkgPT0gc3RhckF0
b20gPyAwIDogMSk7CiAgICAgc3dpdGNoKG1hdGNoKQogICAgIHsKICAgICBjYXNlIElkOgpAQCAt
MjQwLDYwICsyNDYsNTkgQEAgYm9vbCBDU1NTZWxlY3Rvcjo6b3BlcmF0b3IgPT0gKCBjb25zdCBD
UwogCiBET01TdHJpbmcgQ1NTU2VsZWN0b3I6OnNlbGVjdG9yVGV4dCgpIGNvbnN0CiB7Ci0gICAg
Ly8gRklYTUU6IFN1cHBvcnQgbmFtZXNwYWNlcyB3aGVuIGR1bXBpbmcgdGhlIHNlbGVjdG9yIHRl
eHQuICBUaGlzIHJlcXVpcmVzIHByZXNlcnZpbmcKLSAgICAvLyB0aGUgb3JpZ2luYWwgbmFtZXNw
YWNlIHByZWZpeCB1c2VkLiBVZ2guIC1kd2gKKyAgICAvLyBGSVhNRTogU3VwcG9ydCBuYW1lc3Bh
Y2VzIHdoZW4gZHVtcGluZyB0aGUgc2VsZWN0b3IgdGV4dC4gLWR3aAogICAgIERPTVN0cmluZyBz
dHI7CiAgICAgY29uc3QgQ1NTU2VsZWN0b3IqIGNzID0gdGhpczsKLSAgICBRX1VJTlQxNiB0YWcg
PSBsb2NhbE5hbWVQYXJ0KGNzLT50YWcpOwotICAgIGlmICggdGFnID09IGFueUxvY2FsTmFtZSAm
JiBjcy0+YXR0ciA9PSBBVFRSX0lEICYmIGNzLT5tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6RXhhY3Qg
KQorICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lID0gY3MtPnRhZy5sb2NhbE5hbWUo
KTsKKyAgICBpZiAobG9jYWxOYW1lID09IHN0YXJBdG9tICYmIGNzLT5hdHRyID09IEFUVFJfSUQg
JiYgY3MtPm1hdGNoID09IENTU1NlbGVjdG9yOjpFeGFjdCkKICAgICB7CiAgICAgICAgIHN0ciA9
ICIjIjsKICAgICAgICAgc3RyICs9IGNzLT52YWx1ZS5zdHJpbmcoKTsKICAgICB9Ci0gICAgZWxz
ZSBpZiAoIHRhZyA9PSBhbnlMb2NhbE5hbWUgJiYgY3MtPmF0dHIgPT0gQVRUUl9DTEFTUyAmJiBj
cy0+bWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OkNsYXNzICkKKyAgICBlbHNlIGlmIChsb2NhbE5hbWUg
PT0gc3RhckF0b20gJiYgY3MtPmF0dHIgPT0gQVRUUl9DTEFTUyAmJiBjcy0+bWF0Y2ggPT0gQ1NT
U2VsZWN0b3I6OkNsYXNzKQogICAgIHsKICAgICAgICAgc3RyID0gIi4iOwogICAgICAgICBzdHIg
Kz0gY3MtPnZhbHVlLnN0cmluZygpOwogICAgIH0KLSAgICBlbHNlIGlmICggdGFnID09IGFueUxv
Y2FsTmFtZSAmJiBjcy0+bWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzICkKKyAgICBl
bHNlIGlmIChsb2NhbE5hbWUgPT0gc3RhckF0b20gICYmIGNzLT5tYXRjaCA9PSBDU1NTZWxlY3Rv
cjo6UHNldWRvQ2xhc3MpCiAgICAgewogICAgICAgICBzdHIgPSAiOiI7CiAgICAgICAgIHN0ciAr
PSBjcy0+dmFsdWUuc3RyaW5nKCk7CiAgICAgfQotICAgIGVsc2UgaWYgKCB0YWcgPT0gYW55TG9j
YWxOYW1lICYmIGNzLT5tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVudCApCisgICAg
ZWxzZSBpZiAobG9jYWxOYW1lID09IHN0YXJBdG9tICYmIGNzLT5tYXRjaCA9PSBDU1NTZWxlY3Rv
cjo6UHNldWRvRWxlbWVudCkKICAgICB7CiAgICAgICAgIHN0ciA9ICI6OiI7CiAgICAgICAgIHN0
ciArPSBjcy0+dmFsdWUuc3RyaW5nKCk7CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAg
IGlmICggdGFnID09IGFueUxvY2FsTmFtZSApCisgICAgICAgIGlmIChsb2NhbE5hbWUgPT0gc3Rh
ckF0b20pCiAgICAgICAgICAgICBzdHIgPSAiKiI7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHN0ciA9IGdldFRhZ05hbWUoIGNzLT50YWcgKTsKLSAgICAgICAgaWYgKCBjcy0+YXR0ciA9PSBB
VFRSX0lEICYmIGNzLT5tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6RXhhY3QgKQorICAgICAgICAgICAg
c3RyID0gbG9jYWxOYW1lOworICAgICAgICBpZiAoY3MtPmF0dHIgPT0gQVRUUl9JRCAmJiBjcy0+
bWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OkV4YWN0KQogICAgICAgICB7CiAgICAgICAgICAgICBzdHIg
Kz0gIiMiOwogICAgICAgICAgICAgc3RyICs9IGNzLT52YWx1ZS5zdHJpbmcoKTsKICAgICAgICAg
fQotICAgICAgICBlbHNlIGlmICggY3MtPmF0dHIgPT0gQVRUUl9DTEFTUyAmJiBjcy0+bWF0Y2gg
PT0gQ1NTU2VsZWN0b3I6OkNsYXNzICkKKyAgICAgICAgZWxzZSBpZiAoY3MtPmF0dHIgPT0gQVRU
Ul9DTEFTUyAmJiBjcy0+bWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OkNsYXNzKQogICAgICAgICB7CiAg
ICAgICAgICAgICBzdHIgKz0gIi4iOwogICAgICAgICAgICAgc3RyICs9IGNzLT52YWx1ZS5zdHJp
bmcoKTsKICAgICAgICAgfQotICAgICAgICBlbHNlIGlmICggY3MtPm1hdGNoID09IENTU1NlbGVj
dG9yOjpQc2V1ZG9DbGFzcyApCisgICAgICAgIGVsc2UgaWYgKGNzLT5tYXRjaCA9PSBDU1NTZWxl
Y3Rvcjo6UHNldWRvQ2xhc3MpCiAgICAgICAgIHsKICAgICAgICAgICAgIHN0ciArPSAiOiI7CiAg
ICAgICAgICAgICBzdHIgKz0gY3MtPnZhbHVlLnN0cmluZygpOwogICAgICAgICB9Ci0gICAgICAg
IGVsc2UgaWYgKCBjcy0+bWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnQgKQorICAg
ICAgICBlbHNlIGlmIChjcy0+bWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnQpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIHN0ciArPSAiOjoiOwogICAgICAgICAgICAgc3RyICs9IGNz
LT52YWx1ZS5zdHJpbmcoKTsKICAgICAgICAgfQogICAgICAgICAvLyBvcHRpb25hbCBhdHRyaWJ1
dGUKLSAgICAgICAgaWYgKCBjcy0+YXR0ciApIHsKLSAgICAgICAgICAgIERPTVN0cmluZyBhdHRy
TmFtZSA9IGdldEF0dHJOYW1lKCBjcy0+YXR0ciApOworICAgICAgICBpZiAoY3MtPmF0dHIpIHsK
KyAgICAgICAgICAgIERPTVN0cmluZyBhdHRyTmFtZSA9IGdldEF0dHJOYW1lKGNzLT5hdHRyKTsK
ICAgICAgICAgICAgIHN0ciArPSAiWyI7CiAgICAgICAgICAgICBzdHIgKz0gYXR0ck5hbWU7CiAg
ICAgICAgICAgICBzd2l0Y2ggKGNzLT5tYXRjaCkgewpJbmRleDoga2h0bWwvY3NzL2Nzc19iYXNl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvY3NzL2Nzc19i
YXNlLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTIKZGlmZiAtdSAtcCAtcjEuMTIga2h0bWwv
Y3NzL2Nzc19iYXNlLmgKLS0tIGtodG1sL2Nzcy9jc3NfYmFzZS5oCTEyIEp1biAyMDA1IDA0OjA3
OjMwIC0wMDAwCTEuMTIKKysrIGtodG1sL2Nzcy9jc3NfYmFzZS5oCTggSnVsIDIwMDUgMDU6NDk6
MzMgLTAwMDAKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJkb20vZG9tX3N0cmluZy5oIgog
I2luY2x1ZGUgImRvbS9kb21fbWlzYy5oIgogI2luY2x1ZGUgInhtbC9kb21fbm9kZWltcGwuaCIK
KyNpbmNsdWRlICJkb21fcW5hbWUuaCIKICNpbmNsdWRlICJtaXNjL3NoYXJlZC5oIgogI2luY2x1
ZGUgPHFkYXRldGltZS5oPgogI2luY2x1ZGUgPHFwdHJsaXN0Lmg+CkBAIC00NiwyMCArNDcsMjAg
QEAgbmFtZXNwYWNlIERPTSB7CiAgICAgY2xhc3MgRG9jdW1lbnRJbXBsOwogCiAgICAgc3RydWN0
IENTU05hbWVzcGFjZSB7Ci0gICAgICAgIERPTVN0cmluZyBtX3ByZWZpeDsKLSAgICAgICAgRE9N
U3RyaW5nIG1fdXJpOworICAgICAgICBBdG9taWNTdHJpbmcgbV9wcmVmaXg7CisgICAgICAgIEF0
b21pY1N0cmluZyBtX3VyaTsKICAgICAgICAgQ1NTTmFtZXNwYWNlKiBtX3BhcmVudDsKIAogICAg
ICAgICBNQUlOX1RIUkVBRF9BTExPQ0FURUQ7CiAKLSAgICAgICAgQ1NTTmFtZXNwYWNlKGNvbnN0
IERPTVN0cmluZyYgcCwgY29uc3QgRE9NU3RyaW5nJiB1LCBDU1NOYW1lc3BhY2UqIHBhcmVudCkg
CisgICAgICAgIENTU05hbWVzcGFjZShjb25zdCBBdG9taWNTdHJpbmcmIHAsIGNvbnN0IEF0b21p
Y1N0cmluZyYgdSwgQ1NTTmFtZXNwYWNlKiBwYXJlbnQpIAogICAgICAgICAgICAgOm1fcHJlZml4
KHApLCBtX3VyaSh1KSwgbV9wYXJlbnQocGFyZW50KSB7fQogICAgICAgICB+Q1NTTmFtZXNwYWNl
KCkgeyBkZWxldGUgbV9wYXJlbnQ7IH0KICAgICAgICAgCi0gICAgICAgIGNvbnN0IERPTVN0cmlu
ZyYgdXJpKCkgeyByZXR1cm4gbV91cmk7IH0KLSAgICAgICAgY29uc3QgRE9NU3RyaW5nJiBwcmVm
aXgoKSB7IHJldHVybiBtX3ByZWZpeDsgfQorICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHVy
aSgpIHsgcmV0dXJuIG1fdXJpOyB9CisgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4
KCkgeyByZXR1cm4gbV9wcmVmaXg7IH0KICAgICAgICAgCi0gICAgICAgIENTU05hbWVzcGFjZSog
bmFtZXNwYWNlRm9yUHJlZml4KGNvbnN0IERPTVN0cmluZyYgcHJlZml4KSB7CisgICAgICAgIENT
U05hbWVzcGFjZSogbmFtZXNwYWNlRm9yUHJlZml4KGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4
KSB7CiAgICAgICAgICAgICBpZiAocHJlZml4ID09IG1fcHJlZml4KQogICAgICAgICAgICAgICAg
IHJldHVybiB0aGlzOwogICAgICAgICAgICAgaWYgKG1fcGFyZW50KQpAQCAtNzIsOCArNzMsMTQg
QEAgbmFtZXNwYWNlIERPTSB7CiAgICAgY2xhc3MgQ1NTU2VsZWN0b3IKICAgICB7CiAgICAgcHVi
bGljOgotCUNTU1NlbGVjdG9yKCkKLQkgICAgOiB0YWdIaXN0b3J5KDApLCBzaW1wbGVTZWxlY3Rv
cigwKSwgbmV4dFNlbGVjdG9yKDApLCBhdHRyKDApLCB0YWcoYW55UU5hbWUpLAorICAgICAgICBD
U1NTZWxlY3RvcigpCisgICAgICAgICAgICA6IHRhZ0hpc3RvcnkoMCksIHNpbXBsZVNlbGVjdG9y
KDApLCBuZXh0U2VsZWN0b3IoMCksIGF0dHIoMCksIHRhZyhhbnlUYWdOYW1lKCkpLAorICAgICAg
ICAgICAgICByZWxhdGlvbiggRGVzY2VuZGFudCApLCBtYXRjaCggTm9uZSApLAorICAgICAgICAg
ICAgICBwc2V1ZG9JZCggMCApLCBfcHNldWRvVHlwZShQc2V1ZG9Ob3RQYXJzZWQpCisgICAgICAg
IHt9CisgICAgICAgIAorCUNTU1NlbGVjdG9yKGNvbnN0IFF1YWxpZmllZE5hbWUmIHFOYW1lKQor
CSAgICA6IHRhZ0hpc3RvcnkoMCksIHNpbXBsZVNlbGVjdG9yKDApLCBuZXh0U2VsZWN0b3IoMCks
IGF0dHIoMCksIHRhZyhxTmFtZSksCiAgICAgICAgICAgICAgIHJlbGF0aW9uKCBEZXNjZW5kYW50
ICksIG1hdGNoKCBOb25lICksCiAgICAgICAgICAgICAgIHBzZXVkb0lkKCAwICksIF9wc2V1ZG9U
eXBlKFBzZXVkb05vdFBhcnNlZCkKICAgICAgICAge30KQEAgLTE2NywxMiArMTc0LDE3IEBAIG5h
bWVzcGFjZSBET00gewogICAgICAgICAgICAgcmV0dXJuIF9wc2V1ZG9UeXBlOwogICAgICAgICB9
CiAKKyAgICAgICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGFueVRhZ05hbWUoKTsKKwor
ICAgICAgICBib29sIGhhc1RhZygpIGNvbnN0IHsgcmV0dXJuIHRhZyAhPSBhbnlUYWdOYW1lKCk7
IH0KKwogCW11dGFibGUgRE9NOjpBdG9taWNTdHJpbmcgdmFsdWU7CiAJQ1NTU2VsZWN0b3IqIHRh
Z0hpc3Rvcnk7CiAgICAgICAgIENTU1NlbGVjdG9yKiBzaW1wbGVTZWxlY3RvcjsgLy8gVXNlZCBm
b3IgOm5vdC4KICAgICAgICAgQ1NTU2VsZWN0b3IqIG5leHRTZWxlY3RvcjsgLy8gdXNlZCBmb3Ig
LC1jaGFpbmVkIHNlbGVjdG9ycwogCVFfVUlOVDMyICAgICBhdHRyOwotCVFfVUlOVDMyICAgICB0
YWc7CisJCisgICAgICAgIFF1YWxpZmllZE5hbWUgdGFnOwogCiAgICAgICAgIFJlbGF0aW9uIHJl
bGF0aW9uICAgICAgICAgICAgICA6IDM7CiAJbXV0YWJsZSBNYXRjaCAgbWF0Y2ggICAgICAgICAg
IDogNDsKSW5kZXg6IGtodG1sL2Nzcy9jc3NfcnVsZWltcGwuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2Nzcy9jc3NfcnVsZWltcGwuY3BwLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjE4CmRpZmYgLXUgLXAgLXIxLjE4IGtodG1sL2Nzcy9jc3NfcnVsZWlt
cGwuY3BwCi0tLSBraHRtbC9jc3MvY3NzX3J1bGVpbXBsLmNwcAkxMSBNYXkgMjAwNSAwNTo0OToz
NCAtMDAwMAkxLjE4CisrKyBraHRtbC9jc3MvY3NzX3J1bGVpbXBsLmNwcAk4IEp1bCAyMDA1IDA1
OjQ5OjM0IC0wMDAwCkBAIC0zMSw3ICszMSw2IEBACiAjaW5jbHVkZSAiY3NzL2Nzc19ydWxlaW1w
bC5oIgogCiAjaW5jbHVkZSAibWlzYy9sb2FkZXIuaCIKLSNpbmNsdWRlICJtaXNjL2h0bWx0YWdz
LmgiCiAjaW5jbHVkZSAibWlzYy9odG1sYXR0cnMuaCIKICNpbmNsdWRlICJ4bWwvZG9tX2RvY2lt
cGwuaCIKIApJbmRleDoga2h0bWwvY3NzL2Nzc19ydWxlaW1wbC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2Nzcy9jc3NfcnVsZWltcGwuaCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS4xNApkaWZmIC11IC1wIC1yMS4xNCBraHRtbC9jc3MvY3NzX3J1bGVpbXBs
LmgKLS0tIGtodG1sL2Nzcy9jc3NfcnVsZWltcGwuaAkxMCBNYXkgMjAwNSAxODo0MjowMiAtMDAw
MAkxLjE0CisrKyBraHRtbC9jc3MvY3NzX3J1bGVpbXBsLmgJOCBKdWwgMjAwNSAwNTo0OTozNCAt
MDAwMApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgImNzcy9jc3NfYmFzZS5oIgogI2luY2x1
ZGUgIm1pc2MvbG9hZGVyX2NsaWVudC5oIgogI2luY2x1ZGUgIm1pc2Mvc2hhcmVkLmgiCisjaW5j
bHVkZSAibWlzYy9tYWluX3RocmVhZF9tYWxsb2MuaCIKICNpbmNsdWRlICJjc3NfdmFsdWVpbXBs
LmgiCiAKIG5hbWVzcGFjZSBraHRtbCB7CkBAIC01MCw2ICs1MSw4IEBAIHB1YmxpYzoKICAgICBD
U1NSdWxlSW1wbChTdHlsZUJhc2VJbXBsICpwYXJlbnQpCiAgICAgICAgIDogU3R5bGVCYXNlSW1w
bChwYXJlbnQpLCBtX3R5cGUoQ1NTUnVsZTo6VU5LTk9XTl9SVUxFKSB7fQogCisgICAgTUFJTl9U
SFJFQURfQUxMT0NBVEVEOworCiAgICAgdmlydHVhbCBib29sIGlzUnVsZSgpIHsgcmV0dXJuIHRy
dWU7IH0KICAgICB1bnNpZ25lZCBzaG9ydCB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9
CiAKQEAgLTcxLDYgKzc0LDggQEAgcHVibGljOgogICAgIENTU0NoYXJzZXRSdWxlSW1wbChTdHls
ZUJhc2VJbXBsICpwYXJlbnQpCiAgICAgICAgIDogQ1NTUnVsZUltcGwocGFyZW50KSB7IG1fdHlw
ZSA9IENTU1J1bGU6OkNIQVJTRVRfUlVMRTsgfQogCisgICAgTUFJTl9USFJFQURfQUxMT0NBVEVE
OworCiAgICAgdmlydHVhbCBib29sIGlzQ2hhcnNldFJ1bGUoKSB7IHJldHVybiB0cnVlOyB9CiAK
ICAgICBET01TdHJpbmcgZW5jb2RpbmcoKSBjb25zdCB7IHJldHVybiBtX2VuY29kaW5nOyB9CkBA
IC04NSw5ICs5MCwxMCBAQCBjbGFzcyBDU1NGb250RmFjZVJ1bGVJbXBsIDogcHVibGljIENTU1J1
CiB7CiBwdWJsaWM6CiAgICAgQ1NTRm9udEZhY2VSdWxlSW1wbChTdHlsZUJhc2VJbXBsICpwYXJl
bnQpOwotCiAgICAgdmlydHVhbCB+Q1NTRm9udEZhY2VSdWxlSW1wbCgpOwogCisgICAgTUFJTl9U
SFJFQURfQUxMT0NBVEVEOworICAgIAogICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uSW1w
bCAqc3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlOyB9CiAKICAgICB2aXJ0dWFsIGJvb2wg
aXNGb250RmFjZVJ1bGUoKSB7IHJldHVybiB0cnVlOyB9CkBAIC0xMDQsOSArMTEwLDEwIEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRE9NOjpET01TdHJpbmcgJm1lZGlh
ICk7CiAgICAgQ1NTSW1wb3J0UnVsZUltcGwoIFN0eWxlQmFzZUltcGwgKnBhcmVudCwgY29uc3Qg
RE9NOjpET01TdHJpbmcgJmhyZWYsCiAgICAgICAgICAgICAgICAgICAgICAgIE1lZGlhTGlzdElt
cGwgKm1lZGlhICk7Ci0KICAgICB2aXJ0dWFsIH5DU1NJbXBvcnRSdWxlSW1wbCgpOwogCisgICAg
TUFJTl9USFJFQURfQUxMT0NBVEVEOworCiAgICAgRE9NOjpET01TdHJpbmcgaHJlZigpIGNvbnN0
IHsgcmV0dXJuIG1fc3RySHJlZjsgfQogICAgIE1lZGlhTGlzdEltcGwgKm1lZGlhKCkgY29uc3Qg
eyByZXR1cm4gbV9sc3RNZWRpYTsgfQogICAgIENTU1N0eWxlU2hlZXRJbXBsICpzdHlsZVNoZWV0
KCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZVNoZWV0OyB9CkBAIC0xNTYsOSArMTYzLDEwIEBAIHB1
YmxpYzoKICAgICBDU1NNZWRpYVJ1bGVJbXBsKCBTdHlsZUJhc2VJbXBsICpwYXJlbnQgKTsKICAg
ICBDU1NNZWRpYVJ1bGVJbXBsKCBTdHlsZUJhc2VJbXBsICpwYXJlbnQsIGNvbnN0IERPTTo6RE9N
U3RyaW5nICZtZWRpYSApOwogICAgIENTU01lZGlhUnVsZUltcGwoIFN0eWxlQmFzZUltcGwgKnBh
cmVudCwgTWVkaWFMaXN0SW1wbCAqbWVkaWFMaXN0LCBDU1NSdWxlTGlzdEltcGwgKnJ1bGVMaXN0
ICk7Ci0KICAgICB2aXJ0dWFsIH5DU1NNZWRpYVJ1bGVJbXBsKCk7CiAKKyAgICBNQUlOX1RIUkVB
RF9BTExPQ0FURUQ7CisKICAgICBNZWRpYUxpc3RJbXBsICptZWRpYSgpIGNvbnN0IHsgcmV0dXJu
IG1fbHN0TWVkaWE7IH0KICAgICBDU1NSdWxlTGlzdEltcGwgKmNzc1J1bGVzKCkgeyByZXR1cm4g
bV9sc3RDU1NSdWxlczsgfQogCkBAIC0xNzksOSArMTg3LDEwIEBAIGNsYXNzIENTU1BhZ2VSdWxl
SW1wbCA6IHB1YmxpYyBDU1NSdWxlSW0KIHsKIHB1YmxpYzoKICAgICBDU1NQYWdlUnVsZUltcGwo
U3R5bGVCYXNlSW1wbCAqcGFyZW50KTsKLQogICAgIHZpcnR1YWwgfkNTU1BhZ2VSdWxlSW1wbCgp
OwogCisgICAgTUFJTl9USFJFQURfQUxMT0NBVEVEOworCiAgICAgQ1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb25JbXBsICpzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGU7IH0KIAogICAgIHZp
cnR1YWwgYm9vbCBpc1BhZ2VSdWxlKCkgeyByZXR1cm4gdHJ1ZTsgfQpAQCAtMTk5LDkgKzIwOCwx
MCBAQCBjbGFzcyBDU1NTdHlsZVJ1bGVJbXBsIDogcHVibGljIENTU1J1bGVJCiB7CiBwdWJsaWM6
CiAgICAgQ1NTU3R5bGVSdWxlSW1wbChTdHlsZUJhc2VJbXBsICpwYXJlbnQpOwotCiAgICAgdmly
dHVhbCB+Q1NTU3R5bGVSdWxlSW1wbCgpOwogCisgICAgTUFJTl9USFJFQURfQUxMT0NBVEVEOwor
CiAgICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25JbXBsICpzdHlsZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc3R5bGU7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBpc1N0eWxlUnVsZSgpIHsgcmV0dXJu
IHRydWU7IH0KQEAgLTIyNyw2ICsyMzcsOCBAQCBjbGFzcyBDU1NVbmtub3duUnVsZUltcGwgOiBw
dWJsaWMgQ1NTUnVsCiBwdWJsaWM6CiAgICAgQ1NTVW5rbm93blJ1bGVJbXBsKFN0eWxlQmFzZUlt
cGwgKnBhcmVudCkgOiBDU1NSdWxlSW1wbChwYXJlbnQpIHt9CiAKKyAgICBNQUlOX1RIUkVBRF9B
TExPQ0FURUQ7CisKICAgICB2aXJ0dWFsIGJvb2wgaXNVbmtub3duUnVsZSgpIHsgcmV0dXJuIHRy
dWU7IH0KIH07CiAKSW5kZXg6IGtodG1sL2Nzcy9jc3Nfc3R5bGVzaGVldGltcGwuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2Nzcy9jc3Nfc3R5bGVzaGVl
dGltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEyCmRpZmYgLXUgLXAgLXIxLjEyIGto
dG1sL2Nzcy9jc3Nfc3R5bGVzaGVldGltcGwuY3BwCi0tLSBraHRtbC9jc3MvY3NzX3N0eWxlc2hl
ZXRpbXBsLmNwcAkxMSBNYXkgMjAwNSAwMDo1ODoyNyAtMDAwMAkxLjEyCisrKyBraHRtbC9jc3Mv
Y3NzX3N0eWxlc2hlZXRpbXBsLmNwcAk4IEp1bCAyMDA1IDA1OjQ5OjM0IC0wMDAwCkBAIC0zOCw4
ICszOCw2IEBACiAjaW5jbHVkZSAiaHRtbC9odG1sX2RvY3VtZW50aW1wbC5oIgogI2luY2x1ZGUg
Im1pc2MvbG9hZGVyLmgiCiAKLSNpbmNsdWRlICJ4bWxfbmFtZXNwYWNlX3RhYmxlLmgiCi0KICNp
bmNsdWRlIDxrZGVidWcuaD4KIAogdXNpbmcgbmFtZXNwYWNlIERPTTsKQEAgLTIxMCw3ICsyMDgs
NyBAQCB2b2lkIENTU1N0eWxlU2hlZXRJbXBsOjpkZWxldGVSdWxlKCB1bnNpCiAgICAgYi0+ZGVy
ZWYoKTsKIH0KIAotdm9pZCBDU1NTdHlsZVNoZWV0SW1wbDo6YWRkTmFtZXNwYWNlKENTU1BhcnNl
ciogcCwgY29uc3QgRE9NOjpET01TdHJpbmcmIHByZWZpeCwgY29uc3QgRE9NOjpET01TdHJpbmcm
IHVyaSkKK3ZvaWQgQ1NTU3R5bGVTaGVldEltcGw6OmFkZE5hbWVzcGFjZShDU1NQYXJzZXIqIHAs
IGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4LCBjb25zdCBBdG9taWNTdHJpbmcmIHVyaSkKIHsK
ICAgICBpZiAodXJpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjIwLDI2ICsyMTgs
MjEgQEAgdm9pZCBDU1NTdHlsZVNoZWV0SW1wbDo6YWRkTmFtZXNwYWNlKENTUwogICAgIGlmIChw
cmVmaXguaXNFbXB0eSgpKQogICAgICAgICAvLyBTZXQgdGhlIGRlZmF1bHQgbmFtZXNwYWNlIG9u
IHRoZSBwYXJzZXIgc28gdGhhdCBzZWxlY3RvcnMgdGhhdCBvbWl0IG5hbWVzcGFjZSBpbmZvIHdp
bGwKICAgICAgICAgLy8gYmUgYWJsZSB0byBwaWNrIGl0IHVwIGVhc2lseS4KLSAgICAgICAgcC0+
ZGVmYXVsdE5hbWVzcGFjZSA9IFhtbE5hbWVzcGFjZVRhYmxlOjpnZXROYW1lc3BhY2VJRCh1cmks
IGZhbHNlKTsKKyAgICAgICAgcC0+ZGVmYXVsdE5hbWVzcGFjZSA9IHVyaTsKIH0KIAotdm9pZCBD
U1NTdHlsZVNoZWV0SW1wbDo6ZGV0ZXJtaW5lTmFtZXNwYWNlKFFfVUlOVDMyJiBpZCwgY29uc3Qg
RE9NOjpET01TdHJpbmcmIHByZWZpeCkKK2NvbnN0IEF0b21pY1N0cmluZyYgQ1NTU3R5bGVTaGVl
dEltcGw6OmRldGVybWluZU5hbWVzcGFjZShjb25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCkKIHsK
LSAgICAvLyBJZiB0aGUgc3R5bGVzaGVldCBoYXMgbm8gbmFtZXNwYWNlcyB3ZSBjYW4ganVzdCBy
ZXR1cm4uICBUaGVyZSB3b24ndCBiZSBhbnkgbmVlZCB0byBldmVyIGNoZWNrCi0gICAgLy8gbmFt
ZXNwYWNlIHZhbHVlcyBpbiBzZWxlY3RvcnMuCi0gICAgaWYgKCFtX25hbWVzcGFjZXMpCi0gICAg
ICAgIHJldHVybjsKLSAgICAKICAgICBpZiAocHJlZml4LmlzRW1wdHkoKSkKLSAgICAgICAgaWQg
PSBtYWtlSWQobm9OYW1lc3BhY2UsIGxvY2FsTmFtZVBhcnQoaWQpKTsgLy8gTm8gbmFtZXNwYWNl
LiBJZiBhbiBlbGVtZW50L2F0dHJpYnV0ZSBoYXMgYSBuYW1lc3BhY2UsIHdlIHdvbid0IG1hdGNo
IGl0LgotICAgIGVsc2UgaWYgKHByZWZpeCA9PSAiKiIpCi0gICAgICAgIGlkID0gbWFrZUlkKGFu
eU5hbWVzcGFjZSwgbG9jYWxOYW1lUGFydChpZCkpOyAvLyBXZSdsbCBtYXRjaCBhbnkgbmFtZXNw
YWNlLgotICAgIGVsc2UgeworICAgICAgICByZXR1cm4gZW1wdHlBdG9tOyAvLyBObyBuYW1lc3Bh
Y2UuIElmIGFuIGVsZW1lbnQvYXR0cmlidXRlIGhhcyBhIG5hbWVzcGFjZSwgd2Ugd29uJ3QgbWF0
Y2ggaXQuCisgICAgZWxzZSBpZiAocHJlZml4ID09IHN0YXJBdG9tKQorICAgICAgICByZXR1cm4g
c3RhckF0b207IC8vIFdlJ2xsIG1hdGNoIGFueSBuYW1lc3BhY2UuCisgICAgZWxzZSBpZiAobV9u
YW1lc3BhY2VzKSB7CiAgICAgICAgIENTU05hbWVzcGFjZSogbnMgPSBtX25hbWVzcGFjZXMtPm5h
bWVzcGFjZUZvclByZWZpeChwcmVmaXgpOwogICAgICAgICBpZiAobnMpCi0gICAgICAgICAgICAv
LyBMb29rIHVwIHRoZSBpZCBmb3IgdGhpcyBuYW1lc3BhY2UgVVJJLgotICAgICAgICAgICAgaWQg
PSBtYWtlSWQoWG1sTmFtZXNwYWNlVGFibGU6OmdldE5hbWVzcGFjZUlEKG5zLT51cmkoKSwgZmFs
c2UpLCBsb2NhbE5hbWVQYXJ0KGlkKSk7CisgICAgICAgICAgICByZXR1cm4gbnMtPnVyaSgpOwog
ICAgIH0KKyAgICByZXR1cm4gZW1wdHlBdG9tOyAvLyBBc3N1bWUgd2Ugd29udCBtYXRjaCBhbnkg
bmFtZXNwYWNlcy4KIH0KIAogYm9vbCBDU1NTdHlsZVNoZWV0SW1wbDo6cGFyc2VTdHJpbmcoY29u
c3QgRE9NU3RyaW5nICZzdHJpbmcsIGJvb2wgc3RyaWN0KQpJbmRleDoga2h0bWwvY3NzL2Nzc19z
dHlsZXNoZWV0aW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2to
dG1sL2Nzcy9jc3Nfc3R5bGVzaGVldGltcGwuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMQpk
aWZmIC11IC1wIC1yMS4xMSBraHRtbC9jc3MvY3NzX3N0eWxlc2hlZXRpbXBsLmgKLS0tIGtodG1s
L2Nzcy9jc3Nfc3R5bGVzaGVldGltcGwuaAkxMSBNYXkgMjAwNSAwMDo1ODoyNyAtMDAwMAkxLjEx
CisrKyBraHRtbC9jc3MvY3NzX3N0eWxlc2hlZXRpbXBsLmgJOCBKdWwgMjAwNSAwNTo0OTozNCAt
MDAwMApAQCAtMTA0LDggKzEwNCw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGRlbGV0ZVJ1bGUgKCB1
bnNpZ25lZCBsb25nIGluZGV4LCBpbnQgJmV4Y2VwdGlvbmNvZGUgKTsKICAgICB1bnNpZ25lZCBs
b25nIGFkZFJ1bGUgKCBjb25zdCBET01TdHJpbmcgJnNlbGVjdG9yLCBjb25zdCBET01TdHJpbmcg
JnN0eWxlLCBsb25nIGluZGV4LCBpbnQgJmV4Y2VwdGlvbmNvZGUgKTsKIAotICAgIHZvaWQgYWRk
TmFtZXNwYWNlKENTU1BhcnNlciogcCwgY29uc3QgRE9NOjpET01TdHJpbmcmIHByZWZpeCwgY29u
c3QgRE9NOjpET01TdHJpbmcmIHVyaSk7Ci0gICAgdm9pZCBkZXRlcm1pbmVOYW1lc3BhY2UoUV9V
SU5UMzImIGlkLCBjb25zdCBET006OkRPTVN0cmluZyYgcHJlZml4KTsKKyAgICB2b2lkIGFkZE5h
bWVzcGFjZShDU1NQYXJzZXIqIHAsIGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4LCBjb25zdCBB
dG9taWNTdHJpbmcmIHVyaSk7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBkZXRlcm1pbmVOYW1l
c3BhY2UoY29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgpOwogICAgIAogICAgIHZpcnR1YWwgYm9v
bCBwYXJzZVN0cmluZyggY29uc3QgRE9NU3RyaW5nICZzdHJpbmcsIGJvb2wgc3RyaWN0ID0gdHJ1
ZSApOwogCkluZGV4OiBraHRtbC9jc3MvY3NzcGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9jc3MvY3NzcGFyc2VyLmNwcCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS45OApkaWZmIC11IC1wIC1yMS45OCBraHRtbC9jc3MvY3NzcGFyc2VyLmNwcAot
LS0ga2h0bWwvY3NzL2Nzc3BhcnNlci5jcHAJMTEgTWF5IDIwMDUgMDI6MTA6MDkgLTAwMDAJMS45
OAorKysga2h0bWwvY3NzL2Nzc3BhcnNlci5jcHAJOCBKdWwgMjAwNSAwNTo0OTozNiAtMDAwMApA
QCAtMTAyLDcgKzEwMiw3IEBAIENTU1BhcnNlcjo6Q1NTUGFyc2VyKCBib29sIHN0cmljdFBhcnNp
bmcKICAgICBpbXBvcnRhbnQgPSBmYWxzZTsKICAgICBpblBhcnNlU2hvcnRIYW5kID0gZmFsc2U7
CiAgICAgCi0gICAgZGVmYXVsdE5hbWVzcGFjZSA9IGFueU5hbWVzcGFjZTsKKyAgICBkZWZhdWx0
TmFtZXNwYWNlID0gc3RhckF0b207CiAgICAgCiAgICAgeXlfc3RhcnQgPSAxOwogCkBAIC0xNjEs
NyArMTYxLDcgQEAgdm9pZCBDU1NQYXJzZXI6OnNldHVwUGFyc2VyKGNvbnN0IGNoYXIgKgogdm9p
ZCBDU1NQYXJzZXI6OnBhcnNlU2hlZXQoIENTU1N0eWxlU2hlZXRJbXBsICpzaGVldCwgY29uc3Qg
RE9NU3RyaW5nICZzdHJpbmcgKQogewogICAgIHN0eWxlRWxlbWVudCA9IHNoZWV0OwotICAgIGRl
ZmF1bHROYW1lc3BhY2UgPSBhbnlOYW1lc3BhY2U7IC8vIFJlc2V0IHRoZSBkZWZhdWx0IG5hbWVz
cGFjZS4KKyAgICBkZWZhdWx0TmFtZXNwYWNlID0gc3RhckF0b207IC8vIFJlc2V0IHRoZSBkZWZh
dWx0IG5hbWVzcGFjZS4KICAgICAKICAgICBzZXR1cFBhcnNlciAoIiIsIHN0cmluZywgIiIpOwog
CkluZGV4OiBraHRtbC9jc3MvY3NzcGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L1dlYkNvcmUva2h0bWwvY3NzL2Nzc3BhcnNlci5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjMwCmRpZmYgLXUgLXAgLXIxLjMwIGtodG1sL2Nzcy9jc3NwYXJzZXIuaAotLS0ga2h0bWwvY3Nz
L2Nzc3BhcnNlci5oCTE5IE5vdiAyMDA0IDAwOjEyOjIwIC0wMDAwCTEuMzAKKysrIGtodG1sL2Nz
cy9jc3NwYXJzZXIuaAk4IEp1bCAyMDA1IDA1OjQ5OjM2IC0wMDAwCkBAIC0xNjQsNyArMTY0LDcg
QEAgbmFtZXNwYWNlIERPTSB7CiAJaW50IG1heFBhcnNlZFByb3BlcnRpZXM7CiAJYm9vbCBpblBh
cnNlU2hvcnRIYW5kOwogCi0gICAgICAgIFFfVUlOVDE2IGRlZmF1bHROYW1lc3BhY2U7CisgICAg
ICAgIEF0b21pY1N0cmluZyBkZWZhdWx0TmFtZXNwYWNlOwogICAgICAgICAKIAlzdGF0aWMgQ1NT
UGFyc2VyICpjdXJyZW50UGFyc2VyOwogCkluZGV4OiBraHRtbC9jc3MvY3Nzc3R5bGVzZWxlY3Rv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvY3NzL2Nz
c3N0eWxlc2VsZWN0b3IuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE4OApkaWZmIC11IC1w
IC1yMS4xODgga2h0bWwvY3NzL2Nzc3N0eWxlc2VsZWN0b3IuY3BwCi0tLSBraHRtbC9jc3MvY3Nz
c3R5bGVzZWxlY3Rvci5jcHAJNiBKdWwgMjAwNSAwMToyODo0MSAtMDAwMAkxLjE4OAorKysga2h0
bWwvY3NzL2Nzc3N0eWxlc2VsZWN0b3IuY3BwCTggSnVsIDIwMDUgMDU6NDk6NDAgLTAwMDAKQEAg
LTMzOSw3ICszMzksNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUnVsZXMoQ1NTUnVs
CiAgICAgICAgICAgICBtYXRjaFJ1bGVzRm9yTGlzdChydWxlcy0+Z2V0Q2xhc3NSdWxlcyhzaW5n
bGVDbGFzcy0+c3RyaW5nKCkuaW1wbGVtZW50YXRpb24oKSksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJ
bmRleCk7CiAgICAgfQotICAgIG1hdGNoUnVsZXNGb3JMaXN0KHJ1bGVzLT5nZXRUYWdSdWxlcyhs
b2NhbE5hbWVQYXJ0KGVsZW1lbnQtPmlkKCkpKSwKKyAgICBtYXRjaFJ1bGVzRm9yTGlzdChydWxl
cy0+Z2V0VGFnUnVsZXMoZWxlbWVudC0+bG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSksCiAg
ICAgICAgICAgICAgICAgICAgICAgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgpOwogICAg
IG1hdGNoUnVsZXNGb3JMaXN0KHJ1bGVzLT5nZXRVbml2ZXJzYWxSdWxlcygpLCBmaXJzdFJ1bGVJ
bmRleCwgbGFzdFJ1bGVJbmRleCk7CiAgICAgCkBAIC0zNjAsOSArMzYwLDkgQEAgdm9pZCBDU1NT
dHlsZVNlbGVjdG9yOjptYXRjaFJ1bGVzRm9yTGlzdAogICAgIGlmICghcnVsZXMpIHJldHVybjsK
ICAgICBmb3IgKENTU1J1bGVEYXRhKiBkID0gcnVsZXMtPmZpcnN0KCk7IGQ7IGQgPSBkLT5uZXh0
KCkpIHsKICAgICAgICAgQ1NTU3R5bGVSdWxlSW1wbCogcnVsZSA9IGQtPnJ1bGUoKTsKLSAgICAg
ICAgUV9VSU5UMTYgY3NzVGFnSWQgPSBsb2NhbE5hbWVQYXJ0KGVsZW1lbnQtPmlkKCkpOwotICAg
ICAgICBRX1VJTlQxNiB0YWcgPSBsb2NhbE5hbWVQYXJ0KGQtPnNlbGVjdG9yKCktPnRhZyk7Ci0g
ICAgICAgIGlmICgoY3NzVGFnSWQgPT0gdGFnIHx8IHRhZyA9PSBhbnlMb2NhbE5hbWUpICYmIGNo
ZWNrU2VsZWN0b3IoZC0+c2VsZWN0b3IoKSwgZWxlbWVudCkpIHsKKyAgICAgICAgY29uc3QgQXRv
bWljU3RyaW5nJiBsb2NhbE5hbWUgPSBlbGVtZW50LT5sb2NhbE5hbWUoKTsKKyAgICAgICAgY29u
c3QgQXRvbWljU3RyaW5nJiBzZWxlY3RvckxvY2FsTmFtZSA9IGQtPnNlbGVjdG9yKCktPnRhZy5s
b2NhbE5hbWUoKTsKKyAgICAgICAgaWYgKChsb2NhbE5hbWUgPT0gc2VsZWN0b3JMb2NhbE5hbWUg
fHwgc2VsZWN0b3JMb2NhbE5hbWUgPT0gc3RhckF0b20pICYmIGNoZWNrU2VsZWN0b3IoZC0+c2Vs
ZWN0b3IoKSwgZWxlbWVudCkpIHsKICAgICAgICAgICAgIC8vIElmIHRoZSBydWxlIGhhcyBubyBw
cm9wZXJ0aWVzIHRvIGFwcGx5LCB0aGVuIGlnbm9yZSBpdC4KICAgICAgICAgICAgIENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uSW1wbCogZGVjbCA9IHJ1bGUtPmRlY2xhcmF0aW9uKCk7CiAgICAg
ICAgICAgICBpZiAoIWRlY2wgfHwgIWRlY2wtPmxlbmd0aCgpKSBjb250aW51ZTsKQEAgLTYwOSw3
ICs2MDksNyBAQCBib29sIENTU1N0eWxlU2VsZWN0b3I6OmNhblNoYXJlU3R5bGVXaXRoCiAgICAg
aWYgKG4tPmlzU3R5bGVkRWxlbWVudCgpKSB7CiAgICAgICAgIGJvb2wgbW91c2VJbnNpZGUgPSBl
bGVtZW50LT5yZW5kZXJlcigpID8gZWxlbWVudC0+cmVuZGVyZXIoKS0+bW91c2VJbnNpZGUoKSA6
IGZhbHNlOwogICAgICAgICBTdHlsZWRFbGVtZW50SW1wbCogcyA9IHN0YXRpY19jYXN0PFN0eWxl
ZEVsZW1lbnRJbXBsKj4obik7Ci0gICAgICAgIGlmIChzLT5yZW5kZXJlcigpICYmIChzLT5pZCgp
ID09IGVsZW1lbnQtPmlkKCkpICYmICFzLT5oYXNJRCgpICYmCisgICAgICAgIGlmIChzLT5yZW5k
ZXJlcigpICYmIChzLT50YWdOYW1lKCkgPT0gZWxlbWVudC0+dGFnTmFtZSgpKSAmJiAhcy0+aGFz
SUQoKSAmJgogICAgICAgICAgICAgKHMtPmhhc0NsYXNzKCkgPT0gZWxlbWVudC0+aGFzQ2xhc3Mo
KSkgJiYgIXMtPmlubGluZVN0eWxlRGVjbCgpICYmCiAgICAgICAgICAgICAocy0+aGFzTWFwcGVk
QXR0cmlidXRlcygpID09IHN0eWxlZEVsZW1lbnQtPmhhc01hcHBlZEF0dHJpYnV0ZXMoKSkgJiYK
ICAgICAgICAgICAgIChzLT5pc0xpbmsoKSA9PSBlbGVtZW50LT5pc0xpbmsoKSkgJiYgCkBAIC04
ODUsMjMgKzg4NSwyMyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFkanVzdFJlbmRlclN0eWxl
CiAgICAgICAgIC8vIFNpdGVzIGFsc28gY29tbW9ubHkgdXNlIGRpc3BsYXk6aW5saW5lL2Jsb2Nr
IG9uIDx0ZD5zIGFuZCA8dGFibGU+cy4gIEluIHF1aXJrcyBtb2RlIHdlIGZvcmNlCiAgICAgICAg
IC8vIHRoZXNlIHRhZ3MgdG8gcmV0YWluIHRoZWlyIGRpc3BsYXkgdHlwZXMuCiAgICAgICAgIGlm
ICghc3RyaWN0UGFyc2luZyAmJiBlKSB7Ci0gICAgICAgICAgICBpZiAoZS0+aWQoKSA9PSBJRF9U
RCkgeworICAgICAgICAgICAgaWYgKGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0ZCgpKSkgewog
ICAgICAgICAgICAgICAgIHN0eWxlLT5zZXREaXNwbGF5KFRBQkxFX0NFTEwpOwogICAgICAgICAg
ICAgICAgIHN0eWxlLT5zZXRGbG9hdGluZyhGTk9ORSk7CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBlbHNlIGlmIChlLT5pZCgpID09IElEX1RBQkxFKQorICAgICAgICAgICAgZWxzZSBpZiAo
ZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRhYmxlKCkpKQogICAgICAgICAgICAgICAgIHN0eWxl
LT5zZXREaXNwbGF5KHN0eWxlLT5pc0Rpc3BsYXlJbmxpbmVUeXBlKCkgPyBJTkxJTkVfVEFCTEUg
OiBUQUJMRSk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBGcmFtZXMgYW5kIGZyYW1lc2V0cyBu
ZXZlciBob25vciBwb3NpdGlvbjpyZWxhdGl2ZSBvciBwb3NpdGlvbjphYnNvbHV0ZS4gIFRoaXMg
aXMgbmVjZXNzYXJ5IHRvCiAgICAgICAgIC8vIGZpeCBhIGNyYXNoIHdoZXJlIGEgc2l0ZSB0cmll
cyB0byBwb3NpdGlvbiB0aGVzZSBvYmplY3RzLiAgVGhleSBhbHNvIG5ldmVyIGhvbm9yIGRpc3Bs
YXkuCi0gICAgICAgIGlmIChlICYmIChlLT5pZCgpID09IElEX0ZSQU1FIHx8IGUtPmlkKCkgPT0g
SURfRlJBTUVTRVQpKSB7CisgICAgICAgIGlmIChlICYmIChlLT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6ZnJhbWUoKSkgfHwgZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZyYW1lc2V0KCkpKSkgewog
ICAgICAgICAgICAgc3R5bGUtPnNldFBvc2l0aW9uKFNUQVRJQyk7CiAgICAgICAgICAgICBzdHls
ZS0+c2V0RGlzcGxheShCTE9DSyk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBUYWJsZSBoZWFk
ZXJzIHdpdGggYSB0ZXh0LWFsaWduIG9mIGF1dG8gd2lsbCBjaGFuZ2UgdGhlIHRleHQtYWxpZ24g
dG8gY2VudGVyLgotICAgICAgICBpZiAoZSAmJiBlLT5pZCgpID09IElEX1RIICYmIHN0eWxlLT50
ZXh0QWxpZ24oKSA9PSBUQUFVVE8pCisgICAgICAgIGlmIChlICYmIGUtPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjp0aCgpKSAmJiBzdHlsZS0+dGV4dEFsaWduKCkgPT0gVEFBVVRPKQogICAgICAgICAg
ICAgc3R5bGUtPnNldFRleHRBbGlnbihDRU5URVIpOwogICAgICAgICAKICAgICAgICAgLy8gTXV0
YXRlIHRoZSBkaXNwbGF5IHRvIEJMT0NLIG9yIFRBQkxFIGZvciBjZXJ0YWluIGNhc2VzLCBlLmcu
LCBpZiBzb21lb25lIGF0dGVtcHRzIHRvCkBAIC05NzksNyArOTc5LDcgQEAgYm9vbCBDU1NTdHls
ZVNlbGVjdG9yOjpjaGVja1NlbGVjdG9yKENTUwogICAgIC8vIFdlIHRyYWNrIHdoZXRoZXIgb3Ig
bm90IHRoZSBydWxlIGNvbnRhaW5zIG9ubHkgOmhvdmVyIGFuZCA6YWN0aXZlIGluIGEgc2ltcGxl
IHNlbGVjdG9yLiBJZgogICAgIC8vIHNvLCB3ZSBjYW4ndCBhbGxvdyB0aGF0IHRvIGFwcGx5IHRv
IGV2ZXJ5IGVsZW1lbnQgb24gdGhlIHBhZ2UuICBXZSBhc3N1bWUgdGhlIGF1dGhvciBpbnRlbmRl
ZAogICAgIC8vIHRvIGFwcGx5IHRoZSBydWxlcyBvbmx5IHRvIGxpbmtzLgotICAgIGJvb2wgb25s
eUhvdmVyQWN0aXZlID0gKHNlbC0+dGFnID09IGFueVFOYW1lICYmCisgICAgYm9vbCBvbmx5SG92
ZXJBY3RpdmUgPSAoIXNlbC0+aGFzVGFnKCkgJiYKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAoc2VsLT5tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3MgJiYKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChzZWwtPnBzZXVkb1R5cGUoKSA9PSBDU1NTZWxlY3Rvcjo6UHNl
dWRvSG92ZXIgfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWwtPnBzZXVkb1R5
cGUoKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQWN0aXZlKSkpOwpAQCAtMTA5NiwxOSArMTA5Niwx
NCBAQCBib29sIENTU1N0eWxlU2VsZWN0b3I6OmNoZWNrT25lU2VsZWN0b3IoCiAgICAgaWYoIWUp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChzZWwtPnRhZyAhPSBhbnlRTmFtZSkg
ewotICAgICAgICBpbnQgZWx0SUQgPSBlLT5pZCgpOwotICAgICAgICBRX1VJTlQxNiBsb2NhbE5h
bWUgPSBsb2NhbE5hbWVQYXJ0KGVsdElEKTsKLSAgICAgICAgUV9VSU5UMTYgbnMgPSBuYW1lc3Bh
Y2VQYXJ0KGVsdElEKTsKLSAgICAgICAgUV9VSU5UMTYgc2VsTG9jYWxOYW1lID0gbG9jYWxOYW1l
UGFydChzZWwtPnRhZyk7Ci0gICAgICAgIFFfVUlOVDE2IHNlbE5TID0gbmFtZXNwYWNlUGFydChz
ZWwtPnRhZyk7Ci0gICAgICAgIAotICAgICAgICBpZiAobG9jYWxOYW1lIDw9IElEX0xBU1RfVEFH
ICYmIGUtPmlzSFRNTEVsZW1lbnQoKSkKLSAgICAgICAgICAgIG5zID0geGh0bWxOYW1lc3BhY2U7
IC8vIEZJWE1FOiBSZWFsbHkgd2FudCB0byBtb3ZlIGF3YXkgZnJvbSB0aGlzIGNvbXBsaWNhdGVk
IGhhY2tlcnkgYW5kIGp1c3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN3
aXRjaCB0YWdzIGFuZCBhdHRyIG5hbWVzIG92ZXIgdG8gQXRvbWljU3RyaW5ncy4KLSAgICAgICAg
Ci0gICAgICAgIGlmICgoc2VsTG9jYWxOYW1lICE9IGFueUxvY2FsTmFtZSAmJiBsb2NhbE5hbWUg
IT0gc2VsTG9jYWxOYW1lKSB8fAotICAgICAgICAgICAgKHNlbE5TICE9IGFueU5hbWVzcGFjZSAm
JiBucyAhPSBzZWxOUykpCisgICAgaWYgKHNlbC0+aGFzVGFnKCkpIHsKKyAgICAgICAgY29uc3Qg
QXRvbWljU3RyaW5nJiBsb2NhbE5hbWUgPSBlLT5sb2NhbE5hbWUoKTsKKyAgICAgICAgY29uc3Qg
QXRvbWljU3RyaW5nJiBucyA9IGUtPm5hbWVzcGFjZVVSSSgpOworICAgICAgICBjb25zdCBBdG9t
aWNTdHJpbmcmIHNlbExvY2FsTmFtZSA9IHNlbC0+dGFnLmxvY2FsTmFtZSgpOworICAgICAgICBj
b25zdCBBdG9taWNTdHJpbmcmIHNlbE5TID0gc2VsLT50YWcubmFtZXNwYWNlVVJJKCk7CisgICAg
CisgICAgICAgIGlmICgoc2VsTG9jYWxOYW1lICE9IHN0YXJBdG9tICYmIGxvY2FsTmFtZSAhPSBz
ZWxMb2NhbE5hbWUpIHx8CisgICAgICAgICAgICAoc2VsTlMgIT0gc3RhckF0b20gJiYgbnMgIT0g
c2VsTlMpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtMTI5NSw3ICsx
MjkwLDcgQEAgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpjaGVja09uZVNlbGVjdG9yKAogICAgICAg
ICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvSG92ZXI6IHsKICAgICAgICAgICAgICAgICAv
LyBJZiB3ZSdyZSBpbiBxdWlya3MgbW9kZSwgdGhlbiBob3ZlciBzaG91bGQgbmV2ZXIgbWF0Y2gg
YW5jaG9ycyB3aXRoIG5vCiAgICAgICAgICAgICAgICAgLy8gaHJlZi4gIFRoaXMgaXMgaW1wb3J0
YW50IGZvciBzaXRlcyBsaWtlIHdzai5jb20uCi0gICAgICAgICAgICAgICAgaWYgKHN0cmljdFBh
cnNpbmcgfHwgZS0+aWQoKSAhPSBJRF9BIHx8IGUtPmlzTGluaygpKSB7CisgICAgICAgICAgICAg
ICAgaWYgKHN0cmljdFBhcnNpbmcgfHwgIWUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjphKCkpIHx8
IGUtPmlzTGluaygpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50ID09IGUgJiYg
c3R5bGUpCiAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZS0+c2V0QWZmZWN0ZWRCeUhvdmVy
UnVsZXModHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChlLT5yZW5kZXJlcigpKSB7CkBA
IC0xMzI2LDcgKzEzMjEsNyBAQCBib29sIENTU1N0eWxlU2VsZWN0b3I6OmNoZWNrT25lU2VsZWN0
b3IoCiAgICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9BY3RpdmU6CiAgICAgICAg
ICAgICAgICAgLy8gSWYgd2UncmUgaW4gcXVpcmtzIG1vZGUsIHRoZW4gOmFjdGl2ZSBzaG91bGQg
bmV2ZXIgbWF0Y2ggYW5jaG9ycyB3aXRoIG5vCiAgICAgICAgICAgICAgICAgLy8gaHJlZi4gCi0g
ICAgICAgICAgICAgICAgaWYgKHN0cmljdFBhcnNpbmcgfHwgZS0+aWQoKSAhPSBJRF9BIHx8IGUt
PmlzTGluaygpKSB7CisgICAgICAgICAgICAgICAgaWYgKHN0cmljdFBhcnNpbmcgfHwgIWUtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjphKCkpIHx8IGUtPmlzTGluaygpKSB7CiAgICAgICAgICAgICAg
ICAgICAgIGlmIChlbGVtZW50ID09IGUgJiYgc3R5bGUpCiAgICAgICAgICAgICAgICAgICAgICAg
ICBzdHlsZS0+c2V0QWZmZWN0ZWRCeUFjdGl2ZVJ1bGVzKHRydWUpOwogICAgICAgICAgICAgICAg
ICAgICBlbHNlIGlmIChlLT5yZW5kZXJlcigpKQpAQCAtMTQyMCwxOSArMTQxNSw2IEBAIHZvaWQg
Q1NTUnVsZVNldDo6YWRkVG9SdWxlU2V0KERPTTo6RE9NU3QKICAgICAgICAgcnVsZXMtPmFwcGVu
ZChtX3J1bGVDb3VudCsrLCBydWxlLCBzZWwpOwogfQogCi12b2lkIENTU1J1bGVTZXQ6OmFkZFRv
UnVsZVNldChpbnQga2V5LCBJbnRSdWxlTWFwJiBtYXAsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBDU1NTdHlsZVJ1bGVJbXBsKiBydWxlLCBDU1NTZWxlY3Rvciogc2VsKQotewotICAg
IGFzc2VydChrZXkpOwotICAgIGFzc2VydChrZXkgIT0gLTEpOwotICAgIENTU1J1bGVEYXRhTGlz
dCogcnVsZXMgPSBtYXAuZ2V0KGtleSk7Ci0gICAgaWYgKCFydWxlcykgewotICAgICAgICBydWxl
cyA9IG5ldyBDU1NSdWxlRGF0YUxpc3QobV9ydWxlQ291bnQrKywgcnVsZSwgc2VsKTsKLSAgICAg
ICAgbWFwLmluc2VydChrZXksIHJ1bGVzKTsKLSAgICB9IGVsc2UKLSAgICAgICAgcnVsZXMtPmFw
cGVuZChtX3J1bGVDb3VudCsrLCBydWxlLCBzZWwpOwotfQotCiB2b2lkIENTU1J1bGVTZXQ6OmFk
ZFJ1bGUoQ1NTU3R5bGVSdWxlSW1wbCogcnVsZSwgQ1NTU2VsZWN0b3IqIHNlbCkKIHsKICAgICBp
ZiAoc2VsLT5tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6SWQpIHsKQEAgLTE0NDQsMTAgKzE0MjYsOSBA
QCB2b2lkIENTU1J1bGVTZXQ6OmFkZFJ1bGUoQ1NTU3R5bGVSdWxlSW1wCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgIAotICAgIFFfVUlOVDE2IGxvY2FsTmFtZSA9IGxvY2FsTmFtZVBhcnQo
c2VsLT50YWcpOwotICAgIGlmIChsb2NhbE5hbWUgIT0gYW55TG9jYWxOYW1lKSB7Ci0gICAgICAg
IC8vIEZJWE1FOiBtYXliZSBpdCB3b3VsZCBiZSBiZXR0ZXIgdG8ganVzdCB1c2UgYW4gaW50LWtl
eWVkIEhhc2hNYXAgaGVyZQotICAgICAgICBhZGRUb1J1bGVTZXQobG9jYWxOYW1lLCBtX3RhZ1J1
bGVzLCBydWxlLCBzZWwpOworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lID0gc2Vs
LT50YWcubG9jYWxOYW1lKCk7CisgICAgaWYgKGxvY2FsTmFtZSAhPSBzdGFyQXRvbSkgeworICAg
ICAgICBhZGRUb1J1bGVTZXQobG9jYWxOYW1lLmltcGxlbWVudGF0aW9uKCksIG1fdGFnUnVsZXMs
IHJ1bGUsIHNlbCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCkluZGV4OiBraHRtbC9j
c3MvY3Nzc3R5bGVzZWxlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJD
b3JlL2todG1sL2Nzcy9jc3NzdHlsZXNlbGVjdG9yLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
MzQKZGlmZiAtdSAtcCAtcjEuMzQga2h0bWwvY3NzL2Nzc3N0eWxlc2VsZWN0b3IuaAotLS0ga2h0
bWwvY3NzL2Nzc3N0eWxlc2VsZWN0b3IuaAk2IEp1bCAyMDA1IDAxOjI4OjQyIC0wMDAwCTEuMzQK
KysrIGtodG1sL2Nzcy9jc3NzdHlsZXNlbGVjdG9yLmgJOCBKdWwgMjAwNSAwNTo0OTo0MCAtMDAw
MApAQCAtMjQsNyArMjQsNiBAQAogI2RlZmluZSBfQ1NTX2Nzc3N0eWxlc2VsZWN0b3JfaF8KIAog
I2luY2x1ZGUgPHFwdHJ2ZWN0b3IuaD4KLSNpbmNsdWRlIDxxcHRyZGljdC5oPgogI2luY2x1ZGUg
Im1pc2MvcG9pbnRlcmhhc2guaCIKIAogI2luY2x1ZGUgInJlbmRlcmluZy9yZW5kZXJfc3R5bGUu
aCIKQEAgLTI3NCwyNSArMjczLDIyIEBAIHB1YmxpYzoKICAgICAgICAgTUFJTl9USFJFQURfQUxM
T0NBVEVEOwogCiAgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxET006OkRPTVN0cmluZ0ltcGwgKiwg
Q1NTUnVsZURhdGFMaXN0ICosIFBvaW50ZXJIYXNoPERPTTo6RE9NU3RyaW5nSW1wbCAqPiA+IEF0
b21SdWxlTWFwOwotICAgICAgICB0eXBlZGVmIEhhc2hNYXA8aW50LCBDU1NSdWxlRGF0YUxpc3Qg
KiwgUG9pbnRlckhhc2g8aW50PiA+IEludFJ1bGVNYXA7CiAKICAgICAgICAgdm9pZCBhZGRSdWxl
c0Zyb21TaGVldChET006OkNTU1N0eWxlU2hlZXRJbXBsKiBzaGVldCwgY29uc3QgRE9NOjpET01T
dHJpbmcgJm1lZGl1bSA9ICJzY3JlZW4iKTsKIAogICAgICAgICB2b2lkIGFkZFJ1bGUoRE9NOjpD
U1NTdHlsZVJ1bGVJbXBsKiBydWxlLCBET006OkNTU1NlbGVjdG9yKiBzZWwpOwogICAgICAgICB2
b2lkIGFkZFRvUnVsZVNldChET006OkRPTVN0cmluZ0ltcGwqIGtleSwgQXRvbVJ1bGVNYXAmIG1h
cCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgRE9NOjpDU1NTdHlsZVJ1bGVJbXBsKiBydWxl
LCBET006OkNTU1NlbGVjdG9yKiBzZWwpOwotICAgICAgICB2b2lkIGFkZFRvUnVsZVNldChpbnQg
a2V5LCBJbnRSdWxlTWFwJiBtYXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIERPTTo6Q1NT
U3R5bGVSdWxlSW1wbCogcnVsZSwgRE9NOjpDU1NTZWxlY3Rvciogc2VsKTsKIAogICAgICAgICBD
U1NSdWxlRGF0YUxpc3QqIGdldElEUnVsZXMoRE9NOjpET01TdHJpbmdJbXBsKiBrZXkpIHsgcmV0
dXJuIG1faWRSdWxlcy5nZXQoa2V5KTsgfQogICAgICAgICBDU1NSdWxlRGF0YUxpc3QqIGdldENs
YXNzUnVsZXMoRE9NOjpET01TdHJpbmdJbXBsKiBrZXkpIHsgcmV0dXJuIG1fY2xhc3NSdWxlcy5n
ZXQoa2V5KTsgfQotICAgICAgICBDU1NSdWxlRGF0YUxpc3QqIGdldFRhZ1J1bGVzKGludCBrZXkp
IHsgcmV0dXJuIG1fdGFnUnVsZXMuZ2V0KGtleSk7IH0KKyAgICAgICAgQ1NTUnVsZURhdGFMaXN0
KiBnZXRUYWdSdWxlcyhET006OkRPTVN0cmluZ0ltcGwqIGtleSkgeyByZXR1cm4gbV90YWdSdWxl
cy5nZXQoa2V5KTsgfQogICAgICAgICBDU1NSdWxlRGF0YUxpc3QqIGdldFVuaXZlcnNhbFJ1bGVz
KCkgeyByZXR1cm4gbV91bml2ZXJzYWxSdWxlczsgfQogCiAgICAgcHVibGljOgogICAgICAgICBB
dG9tUnVsZU1hcCBtX2lkUnVsZXM7CiAgICAgICAgIEF0b21SdWxlTWFwIG1fY2xhc3NSdWxlczsK
LSAgICAgICAgSW50UnVsZU1hcCBtX3RhZ1J1bGVzOworICAgICAgICBBdG9tUnVsZU1hcCBtX3Rh
Z1J1bGVzOwogICAgICAgICBDU1NSdWxlRGF0YUxpc3QqIG1fdW5pdmVyc2FsUnVsZXM7CiAgICAg
ICAgIAogICAgICAgICB1aW50IG1fcnVsZUNvdW50OwpJbmRleDoga2h0bWwvY3NzL3BhcnNlci55
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2Nzcy9wYXJzZXIu
eSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zOQpkaWZmIC11IC1wIC1yMS4zOSBraHRtbC9jc3Mv
cGFyc2VyLnkKLS0tIGtodG1sL2Nzcy9wYXJzZXIueQkyMiBKdW4gMjAwNSAyMTowNTo1OSAtMDAw
MAkxLjM5CisrKyBraHRtbC9jc3MvcGFyc2VyLnkJOCBKdWwgMjAwNSAwNTo0OTo0MSAtMDAwMApA
QCAtMzQsOSArMzQsNyBAQAogI2luY2x1ZGUgPGNzcy9jc3NfdmFsdWVpbXBsLmg+CiAjaW5jbHVk
ZSA8bWlzYy9odG1saGFzaGVzLmg+CiAjaW5jbHVkZSAiY3NzcGFyc2VyLmgiCi0KLSNpbmNsdWRl
ICJ4bWxfbmFtZXNwYWNlX3RhYmxlLmgiCi0gICAgCisgICAKICNpbmNsdWRlIDxhc3NlcnQuaD4K
ICNpbmNsdWRlIDxrZGVidWcuaD4KIC8vICNkZWZpbmUgQ1NTX0RFQlVHCkBAIC0xMzEsNyArMTI5
LDYgQEAgc3RhdGljIGlubGluZSBpbnQgZ2V0VmFsdWVJRChjb25zdCBjaGFyIAogICAgIGZsb2F0
IHZhbDsKICAgICBpbnQgcHJvcF9pZDsKICAgICBpbnQgYXR0cmlidXRlOwotICAgIGludCBlbGVt
ZW50OwogICAgIENTU1NlbGVjdG9yOjpSZWxhdGlvbiByZWxhdGlvbjsKICAgICBib29sIGI7CiAg
ICAgaW50IGk7CkBAIC0xNzcsNiArMTc0LDggQEAgc3RhdGljIGludCBjc3N5eWxleCggWVlTVFlQ
RSAqeXlsdmFsICkgewogJXRva2VuICcuJwogJXRva2VuICdbJwogCisldG9rZW4gPHN0cmluZz4g
JyonCisKICV0b2tlbiBJTVBPUlRfU1lNCiAldG9rZW4gUEFHRV9TWU0KICV0b2tlbiBNRURJQV9T
WU0KQEAgLTI2Niw3ICsyNjUsNyBAQCBzdGF0aWMgaW50IGNzc3l5bGV4KCBZWVNUWVBFICp5eWx2
YWwgKSB7CiAldHlwZSA8dmFsdWU+IHVuYXJ5X3Rlcm0KICV0eXBlIDx2YWx1ZT4gZnVuY3Rpb24K
IAotJXR5cGUgPGVsZW1lbnQ+IGVsZW1lbnRfbmFtZQorJXR5cGUgPHN0cmluZz4gZWxlbWVudF9u
YW1lCiAKICV0eXBlIDxhdHRyaWJ1dGU+IGF0dHJpYl9pZAogCkBAIC00MDYsNyArNDA1LDcgQEAg
TkFNRVNQQUNFX1NZTSBtYXliZV9zcGFjZSBtYXliZV9uc19wcmVmaQogI2VuZGlmCiAgICAgQ1NT
UGFyc2VyICpwID0gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyICo+KHBhcnNlcik7CiAgICAgaWYgKHAt
PnN0eWxlRWxlbWVudCAmJiBwLT5zdHlsZUVsZW1lbnQtPmlzQ1NTU3R5bGVTaGVldCgpKQotICAg
ICAgICBzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0SW1wbCo+KHAtPnN0eWxlRWxlbWVudCktPmFk
ZE5hbWVzcGFjZShwLCBkb21TdHJpbmcoJDMpLCBkb21TdHJpbmcoJDQpKTsKKyAgICAgICAgc3Rh
dGljX2Nhc3Q8Q1NTU3R5bGVTaGVldEltcGwqPihwLT5zdHlsZUVsZW1lbnQpLT5hZGROYW1lc3Bh
Y2UocCwgYXRvbWljU3RyaW5nKCQzKSwgYXRvbWljU3RyaW5nKCQ0KSk7CiB9CiB8IE5BTUVTUEFD
RV9TWU0gZXJyb3IgaW52YWxpZF9ibG9jawogfCBOQU1FU1BBQ0VfU1lNIGVycm9yICc7JwpAQCAt
NjI1LDY1ICs2MjQsNzEgQEAgbmFtZXNwYWNlX3NlbGVjdG9yOgogCiBzaW1wbGVfc2VsZWN0b3I6
CiAgICAgZWxlbWVudF9uYW1lIG1heWJlX3NwYWNlIHsKLQkkJCA9IG5ldyBDU1NTZWxlY3Rvcigp
OwotCSQkLT50YWcgPSAkMTsKKyAgICAgICAgQ1NTUGFyc2VyICpwID0gc3RhdGljX2Nhc3Q8Q1NT
UGFyc2VyICo+KHBhcnNlcik7CisJJCQgPSBuZXcgQ1NTU2VsZWN0b3IoUXVhbGlmaWVkTmFtZShu
dWxsQXRvbSwgYXRvbWljU3RyaW5nKCQxKSwgcC0+ZGVmYXVsdE5hbWVzcGFjZSkpOwogICAgIH0K
ICAgICB8IGVsZW1lbnRfbmFtZSBzcGVjaWZpZXJfbGlzdCBtYXliZV9zcGFjZSB7Ci0JJCQgPSAk
MjsKLQlpZiAoICQkICkKLSAgICAgICAgICAgICQkLT50YWcgPSAkMTsKKyAgICAgICAgJCQgPSAk
MjsKKwlpZiAoJCQpIHsKKyAgICAgICAgICAgIENTU1BhcnNlciAqcCA9IHN0YXRpY19jYXN0PENT
U1BhcnNlciAqPihwYXJzZXIpOworICAgICAgICAgICAgJCQtPnRhZyA9IFF1YWxpZmllZE5hbWUo
bnVsbEF0b20sIGF0b21pY1N0cmluZygkMSksIHAtPmRlZmF1bHROYW1lc3BhY2UpOworICAgICAg
ICB9CiAgICAgfQogICAgIHwgc3BlY2lmaWVyX2xpc3QgbWF5YmVfc3BhY2UgewogCSQkID0gJDE7
Ci0gICAgICAgIGlmICgkJCkKLSAgICAgICAgICAgICQkLT50YWcgPSBtYWtlSWQoc3RhdGljX2Nh
c3Q8Q1NTUGFyc2VyKj4ocGFyc2VyKS0+ZGVmYXVsdE5hbWVzcGFjZSwgYW55TG9jYWxOYW1lKTs7
CisgICAgICAgIENTU1BhcnNlciAqcCA9IHN0YXRpY19jYXN0PENTU1BhcnNlciAqPihwYXJzZXIp
OworICAgICAgICBpZiAoJCQgJiYgcC0+ZGVmYXVsdE5hbWVzcGFjZSAhPSBzdGFyQXRvbSkKKyAg
ICAgICAgICAgICQkLT50YWcgPSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCBzdGFyQXRvbSwgcC0+
ZGVmYXVsdE5hbWVzcGFjZSk7CiAgICAgfQogICAgIHwgbmFtZXNwYWNlX3NlbGVjdG9yICd8JyBl
bGVtZW50X25hbWUgbWF5YmVfc3BhY2UgewotICAgICAgICAkJCA9IG5ldyBDU1NTZWxlY3Rvcigp
OwotICAgICAgICAkJC0+dGFnID0gJDM7CisgICAgICAgIEF0b21pY1N0cmluZyBuYW1lc3BhY2VQ
cmVmaXggPSBhdG9taWNTdHJpbmcoJDEpOwogICAgICAgICBDU1NQYXJzZXIgKnAgPSBzdGF0aWNf
Y2FzdDxDU1NQYXJzZXIgKj4ocGFyc2VyKTsKICAgICAgICAgaWYgKHAtPnN0eWxlRWxlbWVudCAm
JiBwLT5zdHlsZUVsZW1lbnQtPmlzQ1NTU3R5bGVTaGVldCgpKQotICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8Q1NTU3R5bGVTaGVldEltcGwqPihwLT5zdHlsZUVsZW1lbnQpLT5kZXRlcm1pbmVOYW1l
c3BhY2UoJCQtPnRhZywgZG9tU3RyaW5nKCQxKSk7CisgICAgICAgICAgICAkJCA9IG5ldyBDU1NT
ZWxlY3RvcihRdWFsaWZpZWROYW1lKG5hbWVzcGFjZVByZWZpeCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXRvbWljU3RyaW5nKCQzKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTU3R5
bGVTaGVldEltcGwqPihwLT5zdHlsZUVsZW1lbnQpLT5kZXRlcm1pbmVOYW1lc3BhY2UobmFtZXNw
YWNlUHJlZml4KSkpOworICAgICAgICBlbHNlIC8vIEZJWE1FOiBTaG91bGRuJ3QgdGhpcyBjYXNl
IGJlIGFuIGVycm9yPworICAgICAgICAgICAgJCQgPSBuZXcgQ1NTU2VsZWN0b3IoUXVhbGlmaWVk
TmFtZShudWxsQXRvbSwgYXRvbWljU3RyaW5nKCQzKSwgcC0+ZGVmYXVsdE5hbWVzcGFjZSkpOwog
ICAgIH0KICAgICB8IG5hbWVzcGFjZV9zZWxlY3RvciAnfCcgZWxlbWVudF9uYW1lIHNwZWNpZmll
cl9saXN0IG1heWJlX3NwYWNlIHsKICAgICAgICAgJCQgPSAkNDsKICAgICAgICAgaWYgKCQkKSB7
Ci0gICAgICAgICAgICAkJC0+dGFnID0gJDM7CisgICAgICAgICAgICBBdG9taWNTdHJpbmcgbmFt
ZXNwYWNlUHJlZml4ID0gYXRvbWljU3RyaW5nKCQxKTsKICAgICAgICAgICAgIENTU1BhcnNlciAq
cCA9IHN0YXRpY19jYXN0PENTU1BhcnNlciAqPihwYXJzZXIpOwogICAgICAgICAgICAgaWYgKHAt
PnN0eWxlRWxlbWVudCAmJiBwLT5zdHlsZUVsZW1lbnQtPmlzQ1NTU3R5bGVTaGVldCgpKQotICAg
ICAgICAgICAgICAgIHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXRJbXBsKj4ocC0+c3R5bGVFbGVt
ZW50KS0+ZGV0ZXJtaW5lTmFtZXNwYWNlKCQkLT50YWcsIGRvbVN0cmluZygkMSkpOworICAgICAg
ICAgICAgICAgICQkLT50YWcgPSBRdWFsaWZpZWROYW1lKG5hbWVzcGFjZVByZWZpeCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdG9taWNTdHJpbmcoJDMpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PENTU1N0eWxl
U2hlZXRJbXBsKj4ocC0+c3R5bGVFbGVtZW50KS0+ZGV0ZXJtaW5lTmFtZXNwYWNlKG5hbWVzcGFj
ZVByZWZpeCkpOworICAgICAgICAgICAgZWxzZSAvLyBGSVhNRTogU2hvdWxkbid0IHRoaXMgY2Fz
ZSBiZSBhbiBlcnJvcj8KKyAgICAgICAgICAgICAgICAkJC0+dGFnID0gUXVhbGlmaWVkTmFtZShu
dWxsQXRvbSwgYXRvbWljU3RyaW5nKCQzKSwgcC0+ZGVmYXVsdE5hbWVzcGFjZSk7CiAgICAgICAg
IH0KICAgICB9CiAgICAgfCBuYW1lc3BhY2Vfc2VsZWN0b3IgJ3wnIHNwZWNpZmllcl9saXN0IG1h
eWJlX3NwYWNlIHsKICAgICAgICAgJCQgPSAkMzsKICAgICAgICAgaWYgKCQkKSB7Ci0gICAgICAg
ICAgICAkJC0+dGFnID0gbWFrZUlkKGFueU5hbWVzcGFjZSwgYW55TG9jYWxOYW1lKTsKKyAgICAg
ICAgICAgIEF0b21pY1N0cmluZyBuYW1lc3BhY2VQcmVmaXggPSBhdG9taWNTdHJpbmcoJDEpOwog
ICAgICAgICAgICAgQ1NTUGFyc2VyICpwID0gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyICo+KHBhcnNl
cik7CiAgICAgICAgICAgICBpZiAocC0+c3R5bGVFbGVtZW50ICYmIHAtPnN0eWxlRWxlbWVudC0+
aXNDU1NTdHlsZVNoZWV0KCkpCi0gICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTU3R5bGVT
aGVldEltcGwqPihwLT5zdHlsZUVsZW1lbnQpLT5kZXRlcm1pbmVOYW1lc3BhY2UoJCQtPnRhZywg
ZG9tU3RyaW5nKCQxKSk7CisgICAgICAgICAgICAgICAgJCQtPnRhZyA9IFF1YWxpZmllZE5hbWUo
bmFtZXNwYWNlUHJlZml4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0YXJBdG9tLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRp
Y19jYXN0PENTU1N0eWxlU2hlZXRJbXBsKj4ocC0+c3R5bGVFbGVtZW50KS0+ZGV0ZXJtaW5lTmFt
ZXNwYWNlKG5hbWVzcGFjZVByZWZpeCkpOwogICAgICAgICB9CiAgICAgfQogICA7CiAKIGVsZW1l
bnRfbmFtZToKICAgICBJREVOVCB7Ci0JQ1NTUGFyc2VyICpwID0gc3RhdGljX2Nhc3Q8Q1NTUGFy
c2VyICo+KHBhcnNlcik7CisgICAgICAgIFBhcnNlU3RyaW5nJiBzdHIgPSAkMTsKKyAgICAgICAg
Q1NTUGFyc2VyICpwID0gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyICo+KHBhcnNlcik7CiAJRE9NOjpE
b2N1bWVudEltcGwgKmRvYyA9IHAtPmRvY3VtZW50KCk7Ci0JUVN0cmluZyB0YWcgPSBxU3RyaW5n
KCQxKTsKLQlpZiAoIGRvYyApIHsKLQkgICAgaWYgKGRvYy0+aXNIVE1MRG9jdW1lbnQoKSkKLQkJ
dGFnID0gdGFnLmxvd2VyKCk7Ci0JICAgIGNvbnN0IERPTVN0cmluZyBkdGFnKHRhZyk7Ci0gICAg
ICAgICAgICAkJCA9IG1ha2VJZChwLT5kZWZhdWx0TmFtZXNwYWNlLCBkb2MtPnRhZ0lkKDAsIGR0
YWcuaW1wbGVtZW50YXRpb24oKSwgZmFsc2UpKTsKLQl9IGVsc2UgewotCSAgICAkJCA9IG1ha2VJ
ZChwLT5kZWZhdWx0TmFtZXNwYWNlLCBraHRtbDo6Z2V0VGFnSUQodGFnLmxvd2VyKCkuYXNjaWko
KSwgdGFnLmxlbmd0aCgpKSk7Ci0JICAgIC8vIHRoaXMgY2FzZSBzaG91bGQgbmV2ZXIgaGFwcGVu
IC0gb25seSB3aGVuIGxvYWRpbmcKLQkgICAgLy8gdGhlIGRlZmF1bHQgc3R5bGVzaGVldCAtIHdo
aWNoIG11c3Qgbm90IGNvbnRhaW4gdW5rbm93biB0YWdzCi0vLyAJICAgIGFzc2VydCgkJCAhPSAw
KTsKLQl9CisJaWYgKGRvYyAmJiBkb2MtPmlzSFRNTERvY3VtZW50KCkpCisgICAgICAgICAgICBz
dHIubG93ZXIoKTsKKyAgICAgICAgJCQgPSBzdHI7CiAgICAgfQogICAgIHwgJyonIHsKLQkkJCA9
IG1ha2VJZChzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJzZXIpLT5kZWZhdWx0TmFtZXNwYWNl
LCBhbnlMb2NhbE5hbWUpOworCXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBzdGFyID0gJyonOworICAg
ICAgICAkJC5zdHJpbmcgPSAmc3RhcjsKKyAgICAgICAgJCQubGVuZ3RoID0gMTsKICAgICB9CiAg
IDsKIApAQCAtNzcwLDE4ICs3NzUsMjIgQEAgYXR0cmliOgogICAgICAgICAkJCA9IG5ldyBDU1NT
ZWxlY3RvcigpOwogICAgICAgICAkJC0+YXR0ciA9ICQ1OwogICAgICAgICAkJC0+bWF0Y2ggPSBD
U1NTZWxlY3Rvcjo6U2V0OwotICAgICAgICBDU1NQYXJzZXIgKnAgPSBzdGF0aWNfY2FzdDxDU1NQ
YXJzZXIgKj4ocGFyc2VyKTsKLSAgICAgICAgaWYgKHAtPnN0eWxlRWxlbWVudCAmJiBwLT5zdHls
ZUVsZW1lbnQtPmlzQ1NTU3R5bGVTaGVldCgpKQotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q1NT
U3R5bGVTaGVldEltcGwqPihwLT5zdHlsZUVsZW1lbnQpLT5kZXRlcm1pbmVOYW1lc3BhY2UoJCQt
PmF0dHIsIGRvbVN0cmluZygkMykpOworICAgICAgICAvLyBGSVhNRTogRm9yIG5vdyB3ZSdyZSBi
cmVha2luZyBuYW1lc3BhY2Ugc3VwcG9ydCBvbiBhdHRyaWJ1dGVzLiAgV2hlbiB3ZSBzd2l0Y2gg
dG8gYXRvbWljc3RyaW5nLCB0aGVuIHdlIGNhbiBtYWtlCisgICAgICAgIC8vIGl0IHdvcmsgYWdh
aW4uCisgICAgICAgIC8vQ1NTUGFyc2VyICpwID0gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyICo+KHBh
cnNlcik7CisgICAgICAgIC8vaWYgKHAtPnN0eWxlRWxlbWVudCAmJiBwLT5zdHlsZUVsZW1lbnQt
PmlzQ1NTU3R5bGVTaGVldCgpKQorICAgICAgICAvLyAgICBzdGF0aWNfY2FzdDxDU1NTdHlsZVNo
ZWV0SW1wbCo+KHAtPnN0eWxlRWxlbWVudCktPmRldGVybWluZU5hbWVzcGFjZSgkJC0+YXR0ciwg
ZG9tU3RyaW5nKCQzKSk7CiAgICAgfQogICAgIHwgJ1snIG1heWJlX3NwYWNlIG5hbWVzcGFjZV9z
ZWxlY3RvciAnfCcgYXR0cmliX2lkIG1hdGNoIG1heWJlX3NwYWNlIGlkZW50X29yX3N0cmluZyBt
YXliZV9zcGFjZSAnXScgewogICAgICAgICAkJCA9IG5ldyBDU1NTZWxlY3RvcigpOwogICAgICAg
ICAkJC0+YXR0ciA9ICQ1OwogICAgICAgICAkJC0+bWF0Y2ggPSAoQ1NTU2VsZWN0b3I6Ok1hdGNo
KSQ2OwogICAgICAgICAkJC0+dmFsdWUgPSBhdG9taWNTdHJpbmcoJDgpOwotICAgICAgICBDU1NQ
YXJzZXIgKnAgPSBzdGF0aWNfY2FzdDxDU1NQYXJzZXIgKj4ocGFyc2VyKTsKLSAgICAgICAgaWYg
KHAtPnN0eWxlRWxlbWVudCAmJiBwLT5zdHlsZUVsZW1lbnQtPmlzQ1NTU3R5bGVTaGVldCgpKQot
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldEltcGwqPihwLT5zdHlsZUVsZW1l
bnQpLT5kZXRlcm1pbmVOYW1lc3BhY2UoJCQtPmF0dHIsIGRvbVN0cmluZygkMykpOworICAgICAg
ICAvLyBGSVhNRTogRm9yIG5vdyB3ZSdyZSBicmVha2luZyBuYW1lc3BhY2Ugc3VwcG9ydCBvbiBh
dHRyaWJ1dGVzLiAgV2hlbiB3ZSBzd2l0Y2ggdG8gYXRvbWljc3RyaW5nLCB0aGVuIHdlIGNhbiBt
YWtlCisgICAgICAgIC8vIGl0IHdvcmsgYWdhaW4uCisgICAgICAgIC8vQ1NTUGFyc2VyICpwID0g
c3RhdGljX2Nhc3Q8Q1NTUGFyc2VyICo+KHBhcnNlcik7CisgICAgICAgIC8vaWYgKHAtPnN0eWxl
RWxlbWVudCAmJiBwLT5zdHlsZUVsZW1lbnQtPmlzQ1NTU3R5bGVTaGVldCgpKQorICAgICAgICAv
LyAgICBzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0SW1wbCo+KHAtPnN0eWxlRWxlbWVudCktPmRl
dGVybWluZU5hbWVzcGFjZSgkJC0+YXR0ciwgZG9tU3RyaW5nKCQzKSk7CiAgICAgfQogICA7CiAK
SW5kZXg6IGtodG1sL2RvbS9jc3Nfc3R5bGVzaGVldC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
L2N2cy9yb290L1dlYkNvcmUva2h0bWwvZG9tL2Nzc19zdHlsZXNoZWV0LmNwcCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS44CmRpZmYgLXUgLXAgLXIxLjgga2h0bWwvZG9tL2Nzc19zdHlsZXNoZWV0
LmNwcAotLS0ga2h0bWwvZG9tL2Nzc19zdHlsZXNoZWV0LmNwcAkyMCBNYXkgMjAwNCAxNTowOToz
MiAtMDAwMAkxLjgKKysrIGtodG1sL2RvbS9jc3Nfc3R5bGVzaGVldC5jcHAJOCBKdWwgMjAwNSAw
NTo0OTo0MSAtMDAwMApAQCAtMzg1LDcgKzM4NSw3IEBAIExpbmtTdHlsZSAmIExpbmtTdHlsZTo6
b3BlcmF0b3IgPSAoY29uc3QKIAogICAgIC8vICMjIyBjaGVjayBsaW5rIGlzIHJlYWxseSBsaW5r
aW5nIGEgc3R5bGUgc2hlZXQKICAgICBpZiggbiAmJiBuLT5pc0VsZW1lbnROb2RlKCkgJiYKLQko
bi0+aWQoKSA9PSBJRF9TVFlMRSB8fCBuLT5pZCgpID09IElEX0xJTkspICkgeworCShuLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6c3R5bGUoKSkgfHwgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omxp
bmsoKSkpKSB7CiAgICAgbm9kZSA9IG47CiAgICAgaWYobm9kZSkgbm9kZS0+cmVmKCk7CiAgICAg
fQpAQCAtMzk5LDEyICszOTksMTQgQEAgTGlua1N0eWxlOjp+TGlua1N0eWxlKCkKIAogU3R5bGVT
aGVldCBMaW5rU3R5bGU6OnNoZWV0KCkKIHsKLSAgICBpbnQgaWQgPSBub2RlID8gbm9kZS0+aWQo
KSA6IDA7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm4gU3R5bGVTaGVldCgpOworCiAg
ICAgLy8gIyMjIGFkZCBQSQogICAgIHJldHVybiAKLQkoIGlkID09IElEX1NUWUxFKSA/CisJKG5v
ZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzdHlsZSgpKSkgPwogCXN0YXRpY19jYXN0PEhUTUxT
dHlsZUVsZW1lbnRJbXBsICo+KG5vZGUpLT5zaGVldCgpCi0JOiAoIChpZCA9PSBJRF9MSU5LKSA/
CisJOiAoIG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpsaW5rKCkpID8KIAkgICAgc3RhdGlj
X2Nhc3Q8SFRNTExpbmtFbGVtZW50SW1wbCAqPihub2RlKS0+c2hlZXQoKQogCSAgICA6IFN0eWxl
U2hlZXQoKSApOwogfQpJbmRleDoga2h0bWwvZG9tL2RvbV9lbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9kb20vZG9tX2VsZW1lbnQuY3BwLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjEyCmRpZmYgLXUgLXAgLXIxLjEyIGtodG1sL2RvbS9kb21f
ZWxlbWVudC5jcHAKLS0tIGtodG1sL2RvbS9kb21fZWxlbWVudC5jcHAJMTIgTWF5IDIwMDUgMTc6
MTE6MjEgLTAwMDAJMS4xMgorKysga2h0bWwvZG9tL2RvbV9lbGVtZW50LmNwcAk4IEp1bCAyMDA1
IDA1OjQ5OjQxIC0wMDAwCkBAIC0xNDEsNyArMTQxLDcgQEAgRWxlbWVudDo6fkVsZW1lbnQoKQog
RE9NU3RyaW5nIEVsZW1lbnQ6OnRhZ05hbWUoKSBjb25zdAogewogICAgIGlmICghaW1wbCkgdGhy
b3cgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbjo6Tk9UX0ZPVU5EX0VSUik7Ci0gICAgcmV0dXJu
IHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsKj4oaW1wbCktPnRhZ05hbWUoKTsKKyAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8RWxlbWVudEltcGwqPihpbXBsKS0+bm9kZU5hbWUoKTsKIH0KIAogRE9NU3Ry
aW5nIEVsZW1lbnQ6OmdldEF0dHJpYnV0ZSggY29uc3QgRE9NU3RyaW5nICZuYW1lICkKSW5kZXg6
IGtodG1sL2RvbS9kb21fbm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dl
YkNvcmUva2h0bWwvZG9tL2RvbV9ub2RlLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMgpk
aWZmIC11IC1wIC1yMS4xMiBraHRtbC9kb20vZG9tX25vZGUuY3BwCi0tLSBraHRtbC9kb20vZG9t
X25vZGUuY3BwCTExIE1heSAyMDA1IDAwOjU4OjI4IC0wMDAwCTEuMTIKKysrIGtodG1sL2RvbS9k
b21fbm9kZS5jcHAJOCBKdWwgMjAwNSAwNTo0OTo0MSAtMDAwMApAQCAtMzI0LDcgKzMyNCw3IEBA
IGJvb2wgTm9kZTo6aXNTdXBwb3J0ZWQoIGNvbnN0IERPTVN0cmluZyAKIERPTVN0cmluZyBOb2Rl
OjpuYW1lc3BhY2VVUkkoICApIGNvbnN0CiB7CiAgICAgaWYgKCFpbXBsKSByZXR1cm4gRE9NU3Ry
aW5nKCk7Ci0gICAgcmV0dXJuIGltcGwtPmdldERvY3VtZW50KCktPm5hbWVzcGFjZVVSSShpbXBs
LT5pZCgpKTsKKyAgICByZXR1cm4gaW1wbC0+bmFtZXNwYWNlVVJJKCk7CiB9CiAKIERPTVN0cmlu
ZyBOb2RlOjpwcmVmaXgoICApIGNvbnN0CkBAIC0zMzcsNyArMzM3LDcgQEAgdm9pZCBOb2RlOjpz
ZXRQcmVmaXgoY29uc3QgRE9NU3RyaW5nICZwcgogewogICAgIGlmICghaW1wbCkgdGhyb3cgRE9N
RXhjZXB0aW9uKERPTUV4Y2VwdGlvbjo6Tk9UX0ZPVU5EX0VSUik7CiAgICAgaW50IGV4Y2VwdGlv
bmNvZGUgPSAwOwotICAgIGltcGwtPnNldFByZWZpeChwcmVmaXgsZXhjZXB0aW9uY29kZSk7Cisg
ICAgaW1wbC0+c2V0UHJlZml4KHByZWZpeC5pbXBsZW1lbnRhdGlvbigpLGV4Y2VwdGlvbmNvZGUp
OwogICAgIGlmIChleGNlcHRpb25jb2RlKQogICAgICAgICB0aHJvdyBET01FeGNlcHRpb24oZXhj
ZXB0aW9uY29kZSk7CiB9CkBAIC0zNzYsMTMgKzM3Niw2IEBAIGJvb2wgTm9kZTo6ZGlzcGF0Y2hF
dmVudChjb25zdCBFdmVudCAmZXYKICAgICByZXR1cm4gcjsKIH0KIAotCi11bnNpZ25lZCBpbnQg
Tm9kZTo6ZWxlbWVudElkKCkgY29uc3QKLXsKLSAgICBpZiAoIWltcGwpIHJldHVybiAwOwotICAg
IHJldHVybiBpbXBsLT5pZCgpOwotfQotCiB1bnNpZ25lZCBsb25nIE5vZGU6OmluZGV4KCkgY29u
c3QKIHsKICAgICBpZiAoIWltcGwpIHJldHVybiAwOwpJbmRleDoga2h0bWwvZG9tL2RvbV9ub2Rl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZG9tL2RvbV9u
b2RlLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTIKZGlmZiAtdSAtcCAtcjEuMTIga2h0bWwv
ZG9tL2RvbV9ub2RlLmgKLS0tIGtodG1sL2RvbS9kb21fbm9kZS5oCTE4IE1heSAyMDA1IDIxOjEw
OjI0IC0wMDAwCTEuMTIKKysrIGtodG1sL2RvbS9kb21fbm9kZS5oCTggSnVsIDIwMDUgMDU6NDk6
NDIgLTAwMDAKQEAgLTg1NSwxMyArODU1LDYgQEAgcHVibGljOgogICAgIGJvb2wgZGlzcGF0Y2hF
dmVudChjb25zdCBFdmVudCAmZXZ0KTsKIAogICAgIC8qKgotICAgICAqIEBpbnRlcm5hbAotICAg
ICAqIG5vdCBwYXJ0IG9mIHRoZSBET00uCi0gICAgICogQHJldHVybnMgdGhlIGVsZW1lbnQgaWQs
IGluIGNhc2UgdGhpcyBpcyBhbiBlbGVtZW50LCAwIG90aGVyd2lzZQotICAgICAqLwotICAgIFFf
VUlOVDMyIGVsZW1lbnRJZCgpIGNvbnN0OwotCi0gICAgLyoqCiAgICAgICogdGVzdHMgaWYgdGhp
cyBOb2RlIGlzIDAuIFVzZWZ1bCBlc3BlY2lhbGx5LCBpZiBjYXN0aW5nIHRvIGEgZGVyaXZlZAog
ICAgICAqIGNsYXNzOgogICAgICAqCkluZGV4OiBraHRtbC9kb20vaHRtbF9iYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9kb20vaHRtbF9iYXNlLmNw
cCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS42CmRpZmYgLXUgLXAgLXIxLjYga2h0bWwvZG9tL2h0
bWxfYmFzZS5jcHAKLS0tIGtodG1sL2RvbS9odG1sX2Jhc2UuY3BwCTMgTm92IDIwMDMgMDY6MzI6
MDQgLTAwMDAJMS42CisrKyBraHRtbC9kb20vaHRtbF9iYXNlLmNwcAk4IEp1bCAyMDA1IDA1OjQ5
OjQyIC0wMDAwCkBAIC00MSw3ICs0MSw3IEBAIEhUTUxCb2R5RWxlbWVudDo6SFRNTEJvZHlFbGVt
ZW50KEhUTUxCb2QKIAogSFRNTEJvZHlFbGVtZW50ICZIVE1MQm9keUVsZW1lbnQ6Om9wZXJhdG9y
ID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfQk9E
WSApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpib2R5KCkgKTsKICAgICBy
ZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTEzNSw3ICsxMzUsNyBAQCBIVE1MRnJhbWVFbGVtZW50OjpI
VE1MRnJhbWVFbGVtZW50KEhUTUxGCiAKIEhUTUxGcmFtZUVsZW1lbnQgJkhUTUxGcmFtZUVsZW1l
bnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBv
dGhlciwgSURfRlJBTUUgKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6ZnJh
bWUoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtMjY1LDcgKzI2NSw3IEBAIEhUTUxJ
RnJhbWVFbGVtZW50OjpIVE1MSUZyYW1lRWxlbWVudChIVE0KIAogSFRNTElGcmFtZUVsZW1lbnQg
JkhUTUxJRnJhbWVFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAg
ICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0lGUkFNRSApOworICAgIGFzc2lnbk90aGVyKCBvdGhl
ciwgSFRNTE5hbWVzOjppZnJhbWUoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtNDE0
LDcgKzQxNCw3IEBAIEhUTUxGcmFtZVNldEVsZW1lbnQ6OkhUTUxGcmFtZVNldEVsZW1lbnQKIAog
SFRNTEZyYW1lU2V0RWxlbWVudCAmSFRNTEZyYW1lU2V0RWxlbWVudDo6b3BlcmF0b3IgPSAoY29u
c3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9GUkFNRVNFVCAp
OworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpmcmFtZXNldCgpICk7CiAgICAg
cmV0dXJuICp0aGlzOwogfQogCkBAIC00NjYsNyArNDY2LDcgQEAgSFRNTEhlYWRFbGVtZW50OjpI
VE1MSGVhZEVsZW1lbnQoSFRNTEhlYQogCiBIVE1MSGVhZEVsZW1lbnQgJkhUTUxIZWFkRWxlbWVu
dDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90
aGVyLCBJRF9IRUFEICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OmhlYWQo
KSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtNTA3LDcgKzUwNyw3IEBAIEhUTUxIdG1s
RWxlbWVudDo6SFRNTEh0bWxFbGVtZW50KEhUTUxIdG0KIAogSFRNTEh0bWxFbGVtZW50ICZIVE1M
SHRtbEVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2ln
bk90aGVyKCBvdGhlciwgSURfSFRNTCApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5h
bWVzOjpodG1sKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKSW5kZXg6IGtodG1sL2RvbS9o
dG1sX2Jsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRt
bC9kb20vaHRtbF9ibG9jay5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNApkaWZmIC11IC1w
IC1yMS40IGtodG1sL2RvbS9odG1sX2Jsb2NrLmNwcAotLS0ga2h0bWwvZG9tL2h0bWxfYmxvY2su
Y3BwCTEwIEp1biAyMDAyIDIwOjA3OjM0IC0wMDAwCTEuNAorKysga2h0bWwvZG9tL2h0bWxfYmxv
Y2suY3BwCTggSnVsIDIwMDUgMDU6NDk6NDMgLTAwMDAKQEAgLTQzLDcgKzQzLDcgQEAgSFRNTEJs
b2NrcXVvdGVFbGVtZW50OjpIVE1MQmxvY2txdW90ZUVsZQogCiBIVE1MQmxvY2txdW90ZUVsZW1l
bnQgJkhUTUxCbG9ja3F1b3RlRWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIp
CiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9CTE9DS1FVT1RFICk7CisgICAgYXNzaWdu
T3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OmJsb2NrcXVvdGUoKSApOwogICAgIHJldHVybiAqdGhp
czsKIH0KIApAQCAtODQsNyArODQsNyBAQCBIVE1MRGl2RWxlbWVudDo6SFRNTERpdkVsZW1lbnQo
SFRNTERpdkVsCiAKIEhUTUxEaXZFbGVtZW50ICZIVE1MRGl2RWxlbWVudDo6b3BlcmF0b3IgPSAo
Y29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9ESVYgKTsK
KyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6ZGl2KCkgKTsKICAgICByZXR1cm4g
KnRoaXM7CiB9CiAKQEAgLTEyNSw3ICsxMjUsNyBAQCBIVE1MSFJFbGVtZW50OjpIVE1MSFJFbGVt
ZW50KEhUTUxIUkVsZW1lCiAKIEhUTUxIUkVsZW1lbnQgJkhUTUxIUkVsZW1lbnQ6Om9wZXJhdG9y
ID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfSFIg
KTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6aHIoKSApOwogICAgIHJldHVy
biAqdGhpczsKIH0KIApAQCAtMjA1LDE2ICsyMDUsMTcgQEAgSFRNTEhlYWRpbmdFbGVtZW50OjpI
VE1MSGVhZGluZ0VsZW1lbnQoSAogCiBIVE1MSGVhZGluZ0VsZW1lbnQgJkhUTUxIZWFkaW5nRWxl
bWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgaWYob3RoZXIuZWxl
bWVudElkKCkgIT0gSURfSDEgfHwKLSAgICAgICBvdGhlci5lbGVtZW50SWQoKSAhPSBJRF9IMiB8
fAotICAgICAgIG90aGVyLmVsZW1lbnRJZCgpICE9IElEX0gzIHx8Ci0gICAgICAgb3RoZXIuZWxl
bWVudElkKCkgIT0gSURfSDQgfHwKLSAgICAgICBvdGhlci5lbGVtZW50SWQoKSAhPSBJRF9INSB8
fAotICAgICAgIG90aGVyLmVsZW1lbnRJZCgpICE9IElEX0g2ICkKKyAgICBpZiAoIW90aGVyLmhh
bmRsZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDEoKSkgJiYKKyAgICAgICAgIW90aGVyLmhh
bmRsZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDIoKSkgJiYKKyAgICAgICAgIW90aGVyLmhh
bmRsZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDMoKSkgJiYKKyAgICAgICAgIW90aGVyLmhh
bmRsZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDQoKSkgJiYKKyAgICAgICAgIW90aGVyLmhh
bmRsZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDUoKSkgJiYKKyAgICAgICAgIW90aGVyLmhh
bmRsZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDYoKSkpCiAgICAgewogCWlmICggaW1wbCAp
IGltcGwtPmRlcmVmKCk7CiAJaW1wbCA9IDA7CiAgICAgfSBlbHNlIHsKKwogICAgIE5vZGU6Om9w
ZXJhdG9yID0gKG90aGVyKTsKICAgICB9CiAgICAgcmV0dXJuICp0aGlzOwpAQCAtMjU3LDcgKzI1
OCw3IEBAIEhUTUxQYXJhZ3JhcGhFbGVtZW50OjpIVE1MUGFyYWdyYXBoRWxlbWUKIAogSFRNTFBh
cmFncmFwaEVsZW1lbnQgJkhUTUxQYXJhZ3JhcGhFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBO
b2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX1AgKTsKKyAgICBhc3Np
Z25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6cCgpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQog
CkBAIC0yOTgsNyArMjk5LDcgQEAgSFRNTFByZUVsZW1lbnQ6OkhUTUxQcmVFbGVtZW50KEhUTUxQ
cmVFbAogCiBIVE1MUHJlRWxlbWVudCAmSFRNTFByZUVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0
IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfUFJFICk7CisgICAg
YXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OnByZSgpICk7CiAgICAgcmV0dXJuICp0aGlz
OwogfQogCkluZGV4OiBraHRtbC9kb20vaHRtbF9lbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9kb20vaHRtbF9lbGVtZW50LmNwcCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS4xNApkaWZmIC11IC1wIC1yMS4xNCBraHRtbC9kb20vaHRtbF9lbGVt
ZW50LmNwcAotLS0ga2h0bWwvZG9tL2h0bWxfZWxlbWVudC5jcHAJMTEgTWF5IDIwMDUgMDA6NTg6
MjggLTAwMDAJMS4xNAorKysga2h0bWwvZG9tL2h0bWxfZWxlbWVudC5jcHAJOCBKdWwgMjAwNSAw
NTo0OTo0MyAtMDAwMApAQCAtMTgyLDkgKzE4Miw5IEBAIEhUTUxDb2xsZWN0aW9uIEhUTUxFbGVt
ZW50OjpjaGlsZHJlbigpIGMKICAgICByZXR1cm4gSFRNTENvbGxlY3Rpb24oaW1wbCwgSFRNTENv
bGxlY3Rpb25JbXBsOjpOT0RFX0NISUxEUkVOKTsKIH0KIAotdm9pZCBIVE1MRWxlbWVudDo6YXNz
aWduT3RoZXIoIGNvbnN0IE5vZGUgJm90aGVyLCBpbnQgZWxlbWVudElkICkKK3ZvaWQgSFRNTEVs
ZW1lbnQ6OmFzc2lnbk90aGVyKCBjb25zdCBOb2RlICZvdGhlciwgY29uc3QgUXVhbGlmaWVkTmFt
ZSYgdGFnTmFtZSApCiB7Ci0gICAgaWYoKGludClvdGhlci5lbGVtZW50SWQoKSAhPSBlbGVtZW50
SWQpIHsKKyAgICBpZiAoIW90aGVyLmhhbmRsZSgpLT5oYXNUYWdOYW1lKHRhZ05hbWUpKSB7CiAJ
aWYgKCBpbXBsICkgaW1wbC0+ZGVyZWYoKTsKIAlpbXBsID0gMDsKICAgICB9IGVsc2UgewpJbmRl
eDoga2h0bWwvZG9tL2h0bWxfZWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9XZWJDb3JlL2todG1sL2RvbS9odG1sX2VsZW1lbnQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS44CmRpZmYgLXUgLXAgLXIxLjgga2h0bWwvZG9tL2h0bWxfZWxlbWVudC5oCi0tLSBraHRtbC9k
b20vaHRtbF9lbGVtZW50LmgJMjIgTWF5IDIwMDQgMDE6NTA6NDggLTAwMDAJMS44CisrKyBraHRt
bC9kb20vaHRtbF9lbGVtZW50LmgJOCBKdWwgMjAwNSAwNTo0OTo0MyAtMDAwMApAQCAtMzAsNiAr
MzAsOCBAQAogI2RlZmluZSBIVE1MX0VMRU1FTlRfSAogCiAjaW5jbHVkZSA8ZG9tL2RvbV9lbGVt
ZW50Lmg+CisjaW5jbHVkZSAiZG9tX3FuYW1lLmgiCisKIGNsYXNzIEtIVE1MVmlldzsKIAogbmFt
ZXNwYWNlIERPTSB7CkBAIC0yMjUsNyArMjI3LDcgQEAgcHJvdGVjdGVkOgogICAgIC8qCiAgICAg
ICogQGludGVybmFsCiAgICAgICovCi0gICAgdm9pZCBhc3NpZ25PdGhlciggY29uc3QgTm9kZSAm
b3RoZXIsIGludCBlbGVtZW50SWQgKTsKKyAgICB2b2lkIGFzc2lnbk90aGVyKCBjb25zdCBOb2Rl
ICZvdGhlciwgY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSApOwogfTsKIAogfTsgLy9uYW1l
c3BhY2UKSW5kZXg6IGtodG1sL2RvbS9odG1sX2Zvcm0uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2RvbS9odG1sX2Zvcm0uY3BwLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjExCmRpZmYgLXUgLXAgLXIxLjExIGtodG1sL2RvbS9odG1sX2Zvcm0uY3BwCi0t
LSBraHRtbC9kb20vaHRtbF9mb3JtLmNwcAkxMSBNYXkgMjAwNSAwMDo1ODoyOCAtMDAwMAkxLjEx
CisrKyBraHRtbC9kb20vaHRtbF9mb3JtLmNwcAk4IEp1bCAyMDA1IDA1OjQ5OjQzIC0wMDAwCkBA
IC00Nyw3ICs0Nyw3IEBAIEhUTUxCdXR0b25FbGVtZW50OjpIVE1MQnV0dG9uRWxlbWVudChIVE0K
IAogSFRNTEJ1dHRvbkVsZW1lbnQgJkhUTUxCdXR0b25FbGVtZW50OjpvcGVyYXRvciA9IChjb25z
dCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0JVVFRPTiApOwkK
KyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6YnV0dG9uKCkgKTsJCiAgICAgcmV0
dXJuICp0aGlzOwogfQogCkBAIC0xNTcsNyArMTU3LDcgQEAgSFRNTEZpZWxkU2V0RWxlbWVudDo6
SFRNTEZpZWxkU2V0RWxlbWVudAogCiBIVE1MRmllbGRTZXRFbGVtZW50ICZIVE1MRmllbGRTZXRF
bGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhl
ciggb3RoZXIsIElEX0ZJRUxEU0VUICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFt
ZXM6OmZpZWxkc2V0KCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTE5Myw3ICsxOTMs
NyBAQCBIVE1MRm9ybUVsZW1lbnQ6OkhUTUxGb3JtRWxlbWVudChIVE1MRm9yCiAKIEhUTUxGb3Jt
RWxlbWVudCAmSFRNTEZvcm1FbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikK
IHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0ZPUk0gKTsKKyAgICBhc3NpZ25PdGhlcigg
b3RoZXIsIEhUTUxOYW1lczo6Zm9ybSgpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC0z
MTEsNyArMzExLDcgQEAgSFRNTElucHV0RWxlbWVudDo6SFRNTElucHV0RWxlbWVudChIVE1MSQog
CiBIVE1MSW5wdXRFbGVtZW50ICZIVE1MSW5wdXRFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBO
b2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0lOUFVUICk7CisgICAg
YXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OmlucHV0KCkgKTsKICAgICByZXR1cm4gKnRo
aXM7CiB9CiAKQEAgLTU3NCw3ICs1NzQsNyBAQCBIVE1MTGFiZWxFbGVtZW50OjpIVE1MTGFiZWxF
bGVtZW50KEhUTUxMCiAKIEhUTUxMYWJlbEVsZW1lbnQgJkhUTUxMYWJlbEVsZW1lbnQ6Om9wZXJh
dG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURf
TEFCRUwgKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6bGFiZWwoKSApOwog
ICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtNjMzLDcgKzYzMyw3IEBAIEhUTUxMZWdlbmRFbGVt
ZW50OjpIVE1MTGVnZW5kRWxlbWVudChIVE0KIAogSFRNTExlZ2VuZEVsZW1lbnQgJkhUTUxMZWdl
bmRFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25P
dGhlciggb3RoZXIsIElEX0xFR0VORCApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5h
bWVzOjpsZWdlbmQoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtNjkxLDcgKzY5MSw3
IEBAIEhUTUxPcHRHcm91cEVsZW1lbnQ6OkhUTUxPcHRHcm91cEVsZW1lbnQKIAogSFRNTE9wdEdy
b3VwRWxlbWVudCAmSFRNTE9wdEdyb3VwRWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAm
b3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9PUFRHUk9VUCApOworICAgIGFz
c2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpvcHRncm91cCgpICk7CiAgICAgcmV0dXJuICp0
aGlzOwogfQogCkBAIC03NDQsNyArNzQ0LDcgQEAgSFRNTFNlbGVjdEVsZW1lbnQ6OkhUTUxTZWxl
Y3RFbGVtZW50KEhUTQogCiBIVE1MU2VsZWN0RWxlbWVudCAmSFRNTFNlbGVjdEVsZW1lbnQ6Om9w
ZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwg
SURfU0VMRUNUICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OnNlbGVjdCgp
ICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC05MDYsNyArOTA2LDcgQEAgSFRNTFRleHRB
cmVhRWxlbWVudDo6SFRNTFRleHRBcmVhRWxlbWVudAogCiBIVE1MVGV4dEFyZWFFbGVtZW50ICZI
VE1MVGV4dEFyZWFFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAg
ICBhc3NpZ25PdGhlciggb3RoZXIsIElEX1RFWFRBUkVBICk7CisgICAgYXNzaWduT3RoZXIoIG90
aGVyLCBIVE1MTmFtZXM6OnRleHRhcmVhKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAg
LTEwNzQsNyArMTA3NCw3IEBAIEhUTUxPcHRpb25FbGVtZW50OjpIVE1MT3B0aW9uRWxlbWVudChI
VE0KIAogSFRNTE9wdGlvbkVsZW1lbnQgJkhUTUxPcHRpb25FbGVtZW50OjpvcGVyYXRvciA9IChj
b25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX09QVElPTiAp
OworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpvcHRpb24oKSApOwogICAgIHJl
dHVybiAqdGhpczsKIH0KIApAQCAtMTE4Miw3ICsxMTgyLDcgQEAgSFRNTElzSW5kZXhFbGVtZW50
OjpIVE1MSXNJbmRleEVsZW1lbnQoSAogCiBIVE1MSXNJbmRleEVsZW1lbnQgJkhUTUxJc0luZGV4
RWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3Ro
ZXIoIG90aGVyLCBJRF9JU0lOREVYICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFt
ZXM6OmlzaW5kZXgoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApJbmRleDoga2h0bWwvZG9t
L2h0bWxfaGVhZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0
bWwvZG9tL2h0bWxfaGVhZC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTAKZGlmZiAtdSAt
cCAtcjEuMTAga2h0bWwvZG9tL2h0bWxfaGVhZC5jcHAKLS0tIGtodG1sL2RvbS9odG1sX2hlYWQu
Y3BwCTIyIEp1biAyMDA1IDE4OjIyOjAxIC0wMDAwCTEuMTAKKysrIGtodG1sL2RvbS9odG1sX2hl
YWQuY3BwCTggSnVsIDIwMDUgMDU6NDk6NDQgLTAwMDAKQEAgLTQyLDcgKzQyLDcgQEAgSFRNTEJh
c2VFbGVtZW50OjpIVE1MQmFzZUVsZW1lbnQoSFRNTEJhcwogCiBIVE1MQmFzZUVsZW1lbnQgJkhU
TUxCYXNlRWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNz
aWduT3RoZXIoIG90aGVyLCBJRF9CQVNFICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1M
TmFtZXM6OmJhc2UoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtOTcsNyArOTcsNyBA
QCBIVE1MTGlua0VsZW1lbnQ6OkhUTUxMaW5rRWxlbWVudChIVE1MTGluCiAKIEhUTUxMaW5rRWxl
bWVudCAmSFRNTExpbmtFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsK
LSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0xJTksgKTsKKyAgICBhc3NpZ25PdGhlciggb3Ro
ZXIsIEhUTUxOYW1lczo6bGluaygpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC0yMzgs
NyArMjM4LDcgQEAgSFRNTE1ldGFFbGVtZW50OjpIVE1MTWV0YUVsZW1lbnQoSFRNTE1ldAogCiBI
VE1MTWV0YUVsZW1lbnQgJkhUTUxNZXRhRWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAm
b3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9NRVRBICk7CisgICAgYXNzaWdu
T3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6Om1ldGEoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0K
IApAQCAtMzEyLDcgKzMxMiw3IEBAIEhUTUxTY3JpcHRFbGVtZW50OjpIVE1MU2NyaXB0RWxlbWVu
dChIVE0KIAogSFRNTFNjcmlwdEVsZW1lbnQgJkhUTUxTY3JpcHRFbGVtZW50OjpvcGVyYXRvciA9
IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX1NDUklQ
VCApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpzY3JpcHQoKSApOwogICAg
IHJldHVybiAqdGhpczsKIH0KIApAQCAtNDI0LDcgKzQyNCw3IEBAIEhUTUxTdHlsZUVsZW1lbnQ6
OkhUTUxTdHlsZUVsZW1lbnQoSFRNTFMKIAogSFRNTFN0eWxlRWxlbWVudCAmSFRNTFN0eWxlRWxl
bWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIo
IG90aGVyLCBJRF9TVFlMRSApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpz
dHlsZSgpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC00OTYsNyArNDk2LDcgQEAgSFRN
TFRpdGxlRWxlbWVudDo6SFRNTFRpdGxlRWxlbWVudChIVE1MVAogCiBIVE1MVGl0bGVFbGVtZW50
ICZIVE1MVGl0bGVFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAg
ICBhc3NpZ25PdGhlciggb3RoZXIsIElEX1RJVExFICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVy
LCBIVE1MTmFtZXM6OnRpdGxlKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKSW5kZXg6IGto
dG1sL2RvbS9odG1sX2ltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2Vi
Q29yZS9raHRtbC9kb20vaHRtbF9pbWFnZS5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuOQpk
aWZmIC11IC1wIC1yMS45IGtodG1sL2RvbS9odG1sX2ltYWdlLmNwcAotLS0ga2h0bWwvZG9tL2h0
bWxfaW1hZ2UuY3BwCTMgTm92IDIwMDMgMDY6MzI6MDQgLTAwMDAJMS45CisrKyBraHRtbC9kb20v
aHRtbF9pbWFnZS5jcHAJOCBKdWwgMjAwNSAwNTo0OTo0NCAtMDAwMApAQCAtNDYsNyArNDYsNyBA
QCBIVE1MQXJlYUVsZW1lbnQ6OkhUTUxBcmVhRWxlbWVudChIVE1MQXJlCiAKIEhUTUxBcmVhRWxl
bWVudCAmSFRNTEFyZWFFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsK
LSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0FSRUEgKTsKKyAgICBhc3NpZ25PdGhlciggb3Ro
ZXIsIEhUTUxOYW1lczo6YXJlYSgpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC0xNzYs
NyArMTc2LDcgQEAgSFRNTEltYWdlRWxlbWVudDo6SFRNTEltYWdlRWxlbWVudChIVE1MSQogCiBI
VE1MSW1hZ2VFbGVtZW50ICZIVE1MSW1hZ2VFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2Rl
ICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0lNRyApOworICAgIGFzc2ln
bk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjppbWcoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0K
IApAQCAtMzcyLDcgKzM3Miw3IEBAIEhUTUxNYXBFbGVtZW50OjpIVE1MTWFwRWxlbWVudChIVE1M
TWFwRWwKIAogSFRNTE1hcEVsZW1lbnQgJkhUTUxNYXBFbGVtZW50OjpvcGVyYXRvciA9IChjb25z
dCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX01BUCApOworICAg
IGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjptYXAoKSApOwogICAgIHJldHVybiAqdGhp
czsKIH0KIApJbmRleDoga2h0bWwvZG9tL2h0bWxfaW5saW5lLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9kb20vaHRtbF9pbmxpbmUuY3BwLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjcKZGlmZiAtdSAtcCAtcjEuNyBraHRtbC9kb20vaHRtbF9pbmxpbmUu
Y3BwCi0tLSBraHRtbC9kb20vaHRtbF9pbmxpbmUuY3BwCTExIE1heSAyMDA1IDAwOjU4OjI4IC0w
MDAwCTEuNworKysga2h0bWwvZG9tL2h0bWxfaW5saW5lLmNwcAk4IEp1bCAyMDA1IDA1OjQ5OjQ0
IC0wMDAwCkBAIC00NSw3ICs0NSw3IEBAIEhUTUxBbmNob3JFbGVtZW50OjpIVE1MQW5jaG9yRWxl
bWVudChIVE0KIAogSFRNTEFuY2hvckVsZW1lbnQgJkhUTUxBbmNob3JFbGVtZW50OjpvcGVyYXRv
ciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0Eg
KTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6YSgpICk7CiAgICAgcmV0dXJu
ICp0aGlzOwogfQogCkBAIC0yMTcsNyArMjE3LDcgQEAgSFRNTEJSRWxlbWVudDo6SFRNTEJSRWxl
bWVudChIVE1MQlJFbGVtZQogCiBIVE1MQlJFbGVtZW50ICZIVE1MQlJFbGVtZW50OjpvcGVyYXRv
ciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0JS
ICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OmJyKCkgKTsKICAgICByZXR1
cm4gKnRoaXM7CiB9CiAKQEAgLTI1OCw3ICsyNTgsNyBAQCBIVE1MRm9udEVsZW1lbnQ6OkhUTUxG
b250RWxlbWVudChIVE1MRm9uCiAKIEhUTUxGb250RWxlbWVudCAmSFRNTEZvbnRFbGVtZW50Ojpv
cGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIs
IElEX0ZPTlQgKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6Zm9udCgpICk7
CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC0zMTksNyArMzE5LDcgQEAgSFRNTE1vZEVsZW1l
bnQ6OkhUTUxNb2RFbGVtZW50KGNvbnN0IEhUTQogSFRNTE1vZEVsZW1lbnQ6OkhUTUxNb2RFbGVt
ZW50KEhUTUxFbGVtZW50SW1wbCAqX2ltcGwpCiAgICAgOiBIVE1MRWxlbWVudCgpCiB7Ci0gICAg
aWYgKF9pbXBsICYmIChfaW1wbC0+aWQoKSA9PSBJRF9JTlMgfHwgX2ltcGwtPmlkKCkgPT0gSURf
REVMKSkKKyAgICBpZiAoX2ltcGwgJiYgKF9pbXBsLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW5z
KCkpIHx8IF9pbXBsLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZGVsKCkpKSkKICAgICAgICAgaW1w
bCA9IF9pbXBsOwogICAgIGVsc2UKICAgICAgICAgaW1wbCA9IDA7CkBAIC0zMjgsOSArMzI4LDgg
QEAgSFRNTE1vZEVsZW1lbnQ6OkhUTUxNb2RFbGVtZW50KEhUTUxFbGVtZQogCiBIVE1MTW9kRWxl
bWVudCAmSFRNTE1vZEVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewot
ICAgIGlmKCBvdGhlci5lbGVtZW50SWQoKSAhPSBJRF9JTlMgJiYKLQlvdGhlci5lbGVtZW50SWQo
KSAhPSBJRF9ERUwgKQotICAgIHsKKyAgICBpZiAoIW90aGVyLmhhbmRsZSgpLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6aW5zKCkpICYmCisgICAgICAgICFvdGhlci5oYW5kbGUoKS0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OmRlbCgpKSkgewogCWlmICggaW1wbCApIGltcGwtPmRlcmVmKCk7CiAJaW1w
bCA9IDA7CiAgICAgfSBlbHNlIHsKQEAgLTM4MSwxOSArMzgwLDE2IEBAIEhUTUxRdW90ZUVsZW1l
bnQ6OkhUTUxRdW90ZUVsZW1lbnQoY29uc3QKIHsKIH0KIAotSFRNTFF1b3RlRWxlbWVudDo6SFRN
TFF1b3RlRWxlbWVudChIVE1MR2VuZXJpY0VsZW1lbnRJbXBsICpfaW1wbCkKK0hUTUxRdW90ZUVs
ZW1lbnQ6OkhUTUxRdW90ZUVsZW1lbnQoSFRNTFF1b3RlRWxlbWVudEltcGwgKl9pbXBsKQogICAg
IDogSFRNTEVsZW1lbnQoKQogewotICAgIGlmIChfaW1wbCAmJiBfaW1wbC0+aWQoKSA9PSBJRF9R
KQotICAgICAgICBpbXBsID0gX2ltcGw7Ci0gICAgZWxzZQotICAgICAgICBpbXBsID0gMDsKKyAg
ICBpbXBsID0gX2ltcGw7CiAgICAgaWYgKCBpbXBsICkgaW1wbC0+cmVmKCk7CiB9CiAKIEhUTUxR
dW90ZUVsZW1lbnQgJkhUTUxRdW90ZUVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90
aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfUSApOworICAgIGFzc2lnbk90aGVy
KCBvdGhlciwgSFRNTE5hbWVzOjpxKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKSW5kZXg6
IGtodG1sL2RvbS9odG1sX2lubGluZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9X
ZWJDb3JlL2todG1sL2RvbS9odG1sX2lubGluZS5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjMK
ZGlmZiAtdSAtcCAtcjEuMyBraHRtbC9kb20vaHRtbF9pbmxpbmUuaAotLS0ga2h0bWwvZG9tL2h0
bWxfaW5saW5lLmgJMTUgQXByIDIwMDIgMjM6NDI6MDEgLTAwMDAJMS4zCisrKyBraHRtbC9kb20v
aHRtbF9pbmxpbmUuaAk4IEp1bCAyMDA1IDA1OjQ5OjQ0IC0wMDAwCkBAIC00MjUsNyArNDI1LDcg
QEAgcHVibGljOgogICAgIEhUTUxRdW90ZUVsZW1lbnQoY29uc3QgTm9kZSAmb3RoZXIpIDogSFRN
TEVsZW1lbnQoKQogICAgICAgICAgeygqdGhpcyk9b3RoZXI7fQogcHJvdGVjdGVkOgotICAgIEhU
TUxRdW90ZUVsZW1lbnQoSFRNTEdlbmVyaWNFbGVtZW50SW1wbCAqaW1wbCk7CisgICAgSFRNTFF1
b3RlRWxlbWVudChIVE1MUXVvdGVFbGVtZW50SW1wbCAqaW1wbCk7CiBwdWJsaWM6CiAKICAgICBI
VE1MUXVvdGVFbGVtZW50ICYgb3BlcmF0b3IgPSAoY29uc3QgSFRNTFF1b3RlRWxlbWVudCAmb3Ro
ZXIpOwpJbmRleDoga2h0bWwvZG9tL2h0bWxfbGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
L2N2cy9yb290L1dlYkNvcmUva2h0bWwvZG9tL2h0bWxfbGlzdC5jcHAsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuNApkaWZmIC11IC1wIC1yMS40IGtodG1sL2RvbS9odG1sX2xpc3QuY3BwCi0tLSBr
aHRtbC9kb20vaHRtbF9saXN0LmNwcAkxMCBKdW4gMjAwMiAyMDowNzozNiAtMDAwMAkxLjQKKysr
IGtodG1sL2RvbS9odG1sX2xpc3QuY3BwCTggSnVsIDIwMDUgMDU6NDk6NDUgLTAwMDAKQEAgLTQx
LDcgKzQxLDcgQEAgSFRNTERMaXN0RWxlbWVudDo6SFRNTERMaXN0RWxlbWVudChIVE1MRAogCiBI
VE1MRExpc3RFbGVtZW50ICZIVE1MRExpc3RFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2Rl
ICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0RMICk7CisgICAgYXNzaWdu
T3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OmRsKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAK
QEAgLTg4LDcgKzg4LDcgQEAgSFRNTERpcmVjdG9yeUVsZW1lbnQ6OkhUTUxEaXJlY3RvcnlFbGVt
ZQogCiBIVE1MRGlyZWN0b3J5RWxlbWVudCAmSFRNTERpcmVjdG9yeUVsZW1lbnQ6Om9wZXJhdG9y
ID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfRElS
ICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OmRpcigpICk7CiAgICAgcmV0
dXJuICp0aGlzOwogfQogCkBAIC0xMzUsNyArMTM1LDcgQEAgSFRNTExJRWxlbWVudDo6SFRNTExJ
RWxlbWVudChIVE1MTElFbGVtZQogCiBIVE1MTElFbGVtZW50ICZIVE1MTElFbGVtZW50OjpvcGVy
YXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElE
X0xJICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OmxpKCkgKTsKICAgICBy
ZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTE5MCw3ICsxOTAsNyBAQCBIVE1MTWVudUVsZW1lbnQ6OkhU
TUxNZW51RWxlbWVudChIVE1MTWVuCiAKIEhUTUxNZW51RWxlbWVudCAmSFRNTE1lbnVFbGVtZW50
OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3Ro
ZXIsIElEX01FTlUgKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6bWVudSgp
ICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC0yMzcsNyArMjM3LDcgQEAgSFRNTE9MaXN0
RWxlbWVudDo6SFRNTE9MaXN0RWxlbWVudChIVE1MTwogCiBIVE1MT0xpc3RFbGVtZW50ICZIVE1M
T0xpc3RFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3Np
Z25PdGhlciggb3RoZXIsIElEX09MICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFt
ZXM6Om9sKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTMxMCw3ICszMTAsNyBAQCBI
VE1MVUxpc3RFbGVtZW50OjpIVE1MVUxpc3RFbGVtZW50KEhUTUxVCiAKIEhUTUxVTGlzdEVsZW1l
bnQgJkhUTUxVTGlzdEVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewot
ICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfVUwgKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIs
IEhUTUxOYW1lczo6dWwoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApJbmRleDoga2h0bWwv
ZG9tL2h0bWxfbWlzYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUv
a2h0bWwvZG9tL2h0bWxfbWlzYy5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNwpkaWZmIC11
IC1wIC1yMS43IGtodG1sL2RvbS9odG1sX21pc2MuY3BwCi0tLSBraHRtbC9kb20vaHRtbF9taXNj
LmNwcAkxMSBNYXkgMjAwNSAwMDo1ODoyOCAtMDAwMAkxLjcKKysrIGtodG1sL2RvbS9odG1sX21p
c2MuY3BwCTggSnVsIDIwMDUgMDU6NDk6NDUgLTAwMDAKQEAgLTQxLDcgKzQxLDcgQEAgSFRNTEJh
c2VGb250RWxlbWVudDo6SFRNTEJhc2VGb250RWxlbWVudAogCiBIVE1MQmFzZUZvbnRFbGVtZW50
ICZIVE1MQmFzZUZvbnRFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsK
LSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0JBU0VGT05UICk7CisgICAgYXNzaWduT3RoZXIo
IG90aGVyLCBIVE1MTmFtZXM6OmJhc2Vmb250KCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAK
SW5kZXg6IGtodG1sL2RvbS9odG1sX29iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1dlYkNvcmUva2h0bWwvZG9tL2h0bWxfb2JqZWN0LmNwcCx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS41CmRpZmYgLXUgLXAgLXIxLjUga2h0bWwvZG9tL2h0bWxfb2JqZWN0LmNwcAotLS0g
a2h0bWwvZG9tL2h0bWxfb2JqZWN0LmNwcAkxIE1hciAyMDA0IDE3OjA0OjI0IC0wMDAwCTEuNQor
Kysga2h0bWwvZG9tL2h0bWxfb2JqZWN0LmNwcAk4IEp1bCAyMDA1IDA1OjQ5OjQ1IC0wMDAwCkBA
IC00Myw3ICs0Myw3IEBAIEhUTUxBcHBsZXRFbGVtZW50OjpIVE1MQXBwbGV0RWxlbWVudChIVE0K
IAogSFRNTEFwcGxldEVsZW1lbnQgJkhUTUxBcHBsZXRFbGVtZW50OjpvcGVyYXRvciA9IChjb25z
dCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0FQUExFVCApOwor
ICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjphcHBsZXQoKSApOwogICAgIHJldHVy
biAqdGhpczsKIH0KIApAQCAtMTk0LDcgKzE5NCw3IEBAIEhUTUxPYmplY3RFbGVtZW50OjpIVE1M
T2JqZWN0RWxlbWVudChIVE0KIAogSFRNTE9iamVjdEVsZW1lbnQgJkhUTUxPYmplY3RFbGVtZW50
OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3Ro
ZXIsIElEX09CSkVDVCApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpvYmpl
Y3QoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtNDMyLDcgKzQzMiw3IEBAIEhUTUxQ
YXJhbUVsZW1lbnQ6OkhUTUxQYXJhbUVsZW1lbnQoSFRNTFAKIAogSFRNTFBhcmFtRWxlbWVudCAm
SFRNTFBhcmFtRWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAg
YXNzaWduT3RoZXIoIG90aGVyLCBJRF9QQVJBTSApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwg
SFRNTE5hbWVzOjpwYXJhbSgpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkluZGV4OiBraHRt
bC9kb20vaHRtbF90YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNv
cmUva2h0bWwvZG9tL2h0bWxfdGFibGUuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjYKZGlm
ZiAtdSAtcCAtcjEuNiBraHRtbC9kb20vaHRtbF90YWJsZS5jcHAKLS0tIGtodG1sL2RvbS9odG1s
X3RhYmxlLmNwcAkzMSBPY3QgMjAwMyAwMDo0NzoxNiAtMDAwMAkxLjYKKysrIGtodG1sL2RvbS9o
dG1sX3RhYmxlLmNwcAk4IEp1bCAyMDA1IDA1OjQ5OjQ2IC0wMDAwCkBAIC00NSw3ICs0NSw3IEBA
IEhUTUxUYWJsZUNhcHRpb25FbGVtZW50OjpIVE1MVGFibGVDYXB0aW8KIAogSFRNTFRhYmxlQ2Fw
dGlvbkVsZW1lbnQgJkhUTUxUYWJsZUNhcHRpb25FbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBO
b2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0NBUFRJT04gKTsKKyAg
ICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6Y2FwdGlvbigpICk7CiAgICAgcmV0dXJu
ICp0aGlzOwogfQogCkBAIC04Niw5ICs4Niw4IEBAIEhUTUxUYWJsZUNlbGxFbGVtZW50OjpIVE1M
VGFibGVDZWxsRWxlbWUKIAogSFRNTFRhYmxlQ2VsbEVsZW1lbnQgJkhUTUxUYWJsZUNlbGxFbGVt
ZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBpZiggb3RoZXIuZWxl
bWVudElkKCkgIT0gSURfVEQgJiYKLQlvdGhlci5lbGVtZW50SWQoKSAhPSBJRF9USCApCi0gICAg
eworICAgIGlmICghb3RoZXIuaGFuZGxlKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0ZCgpKSB8
fAorICAgICAgICAhb3RoZXIuaGFuZGxlKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0aCgpKSkg
ewogCWlmICggaW1wbCApIGltcGwtPmRlcmVmKCk7CiAJaW1wbCA9IDA7CiAgICAgfSBlbHNlIHsK
QEAgLTI5NSw5ICsyOTQsOCBAQCBIVE1MVGFibGVDb2xFbGVtZW50OjpIVE1MVGFibGVDb2xFbGVt
ZW50CiAKIEhUTUxUYWJsZUNvbEVsZW1lbnQgJkhUTUxUYWJsZUNvbEVsZW1lbnQ6Om9wZXJhdG9y
ID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGlmKCBvdGhlci5lbGVtZW50SWQoKSAhPSBJ
RF9DT0wgJiYKLQlvdGhlci5lbGVtZW50SWQoKSAhPSBJRF9DT0xHUk9VUCApCi0gICAgeworICAg
IGlmICghb3RoZXIuaGFuZGxlKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpjb2woKSkgJiYKKyAg
ICAgICAgIW90aGVyLmhhbmRsZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Y29sZ3JvdXAoKSkp
IHsKIAlpZiAoIGltcGwgKSBpbXBsLT5kZXJlZigpOwogCWltcGwgPSAwOwogICAgIH0gZWxzZSB7
CkBAIC00MDEsNyArMzk5LDcgQEAgSFRNTFRhYmxlRWxlbWVudDo6SFRNTFRhYmxlRWxlbWVudChI
VE1MVAogCiBIVE1MVGFibGVFbGVtZW50ICZIVE1MVGFibGVFbGVtZW50OjpvcGVyYXRvciA9IChj
b25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX1RBQkxFICk7
CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OnRhYmxlKCkgKTsKICAgICByZXR1
cm4gKnRoaXM7CiB9CiAKQEAgLTYzOCw3ICs2MzYsNyBAQCBIVE1MVGFibGVSb3dFbGVtZW50OjpI
VE1MVGFibGVSb3dFbGVtZW50CiAKIEhUTUxUYWJsZVJvd0VsZW1lbnQgJkhUTUxUYWJsZVJvd0Vs
ZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVy
KCBvdGhlciwgSURfVFIgKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6dHIo
KSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtNzc1LDEwICs3NzMsOSBAQCBIVE1MVGFi
bGVTZWN0aW9uRWxlbWVudDo6SFRNTFRhYmxlU2VjdGlvCiAKIEhUTUxUYWJsZVNlY3Rpb25FbGVt
ZW50ICZIVE1MVGFibGVTZWN0aW9uRWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3Ro
ZXIpCiB7Ci0gICAgaWYob3RoZXIuZWxlbWVudElkKCkgIT0gSURfVEJPRFkgJiYKLSAgICAgICBv
dGhlci5lbGVtZW50SWQoKSAhPSBJRF9USEVBRCAmJgotICAgICAgIG90aGVyLmVsZW1lbnRJZCgp
ICE9IElEX1RGT09UICkKLSAgICB7CisgICAgaWYgKCFvdGhlci5oYW5kbGUoKS0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OnRib2R5KCkpICYmCisgICAgICAgICFvdGhlci5oYW5kbGUoKS0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OnRoZWFkKCkpICYmCisgICAgICAgICFvdGhlci5oYW5kbGUoKS0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OnRmb290KCkpKSB7CiAJaWYgKCBpbXBsICkgaW1wbC0+ZGVyZWYo
KTsKIAlpbXBsID0gMDsKICAgICB9IGVsc2UgewpJbmRleDoga2h0bWwvZWNtYS9ranNfY3NzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lY21hL2tqc19j
c3MuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjI3CmRpZmYgLXUgLXAgLXIxLjI3IGtodG1s
L2VjbWEva2pzX2Nzcy5jcHAKLS0tIGtodG1sL2VjbWEva2pzX2Nzcy5jcHAJMyBKdWwgMjAwNSAx
MDo0Nzo1NSAtMDAwMAkxLjI3CisrKyBraHRtbC9lY21hL2tqc19jc3MuY3BwCTggSnVsIDIwMDUg
MDU6NDk6NDcgLTAwMDAKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlICJ4bWwvZG9tX2RvY2lt
cGwuaCIKICNpbmNsdWRlICJodG1sL2h0bWxfaGVhZGltcGwuaCIgLy8gZm9yIEhUTUxTdHlsZUVs
ZW1lbnQKICNpbmNsdWRlICJranNfZG9tLmgiCi0jaW5jbHVkZSAibWlzYy9odG1sdGFncy5oIgor
I2luY2x1ZGUgImh0bWxuYW1lcy5oIgogCiAjaW5jbHVkZSA8a2RlYnVnLmg+CiAKQEAgLTU1LDYg
KzU1LDcgQEAgdXNpbmcgRE9NOjpDb3VudGVySW1wbDsKIHVzaW5nIERPTTo6RG9jdW1lbnRJbXBs
OwogdXNpbmcgRE9NOjpET01TdHJpbmc7CiB1c2luZyBET006OkVsZW1lbnRJbXBsOwordXNpbmcg
RE9NOjpIVE1MTmFtZXM7CiB1c2luZyBET006OkhUTUxTdHlsZUVsZW1lbnRJbXBsOwogdXNpbmcg
RE9NOjpNZWRpYUxpc3RJbXBsOwogdXNpbmcgRE9NOjpSZWN0SW1wbDsKQEAgLTQwNCw3ICs0MDUs
NyBAQCBWYWx1ZSBET01TdHlsZVNoZWV0TGlzdDo6dHJ5R2V0KEV4ZWNTdGF0CiAgIC8vIGFuZCBk
b2Vzbid0IGxvb2sgZm9yIG5hbWUgYXR0cmlidXRlIChzZWUgaW1wbGVtZW50YXRpb24gYWJvdmUp
LgogICAvLyBCdXQgdW5pY2l0eSBvZiBzdHlsZXNoZWV0IGlkcyBpcyBnb29kIHByYWN0aWNlIGFu
eXdheSA7KQogICBFbGVtZW50SW1wbCAqZWxlbWVudCA9IG1fZG9jLT5nZXRFbGVtZW50QnlJZChw
LnN0cmluZygpKTsKLSAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC0+aWQoKSA9PSBJRF9TVFlMRSkK
KyAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnN0eWxlKCkp
KQogICAgIHJldHVybiBnZXRET01TdHlsZVNoZWV0KGV4ZWMsIHN0YXRpY19jYXN0PEhUTUxTdHls
ZUVsZW1lbnRJbXBsICo+KGVsZW1lbnQpLT5zaGVldCgpKTsKIAogICByZXR1cm4gRE9NT2JqZWN0
Ojp0cnlHZXQoZXhlYywgcCk7CkluZGV4OiBraHRtbC9lY21hL2tqc19kb20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VjbWEva2pzX2RvbS5jcHAsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuNzcKZGlmZiAtdSAtcCAtcjEuNzcga2h0bWwvZWNtYS9ranNf
ZG9tLmNwcAotLS0ga2h0bWwvZWNtYS9ranNfZG9tLmNwcAkzIEp1bCAyMDA1IDEwOjQ3OjU1IC0w
MDAwCTEuNzcKKysrIGtodG1sL2VjbWEva2pzX2RvbS5jcHAJOCBKdWwgMjAwNSAwNTo0OTo0OCAt
MDAwMApAQCAtNDcsOCArNDcsNiBAQAogCiAjaW5jbHVkZSAiaHRtbF9vYmplY3RpbXBsLmgiCiAK
LSNpbmNsdWRlICJtaXNjL2h0bWx0YWdzLmgiCi0KICNpZiBBUFBMRV9DSEFOR0VTCiAjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvcnVudGltZV9vYmplY3QuaD4KICNlbmRpZgpAQCAtNjcsNiArNjUs
NyBAQCB1c2luZyBET006OkhUTUxBcHBsZXRFbGVtZW50SW1wbDsKIHVzaW5nIERPTTo6SFRNTERv
Y3VtZW50SW1wbDsKIHVzaW5nIERPTTo6SFRNTEVsZW1lbnRJbXBsOwogdXNpbmcgRE9NOjpIVE1M
RW1iZWRFbGVtZW50SW1wbDsKK3VzaW5nIERPTTo6SFRNTE5hbWVzOwogdXNpbmcgRE9NOjpIVE1M
T2JqZWN0RWxlbWVudEltcGw7CiB1c2luZyBET006Ok5hbWVkTm9kZU1hcEltcGw7CiB1c2luZyBE
T006Ok5vZGU7CkBAIC00NjIsNyArNDYxLDcgQEAgdm9pZCBET01Ob2RlOjpwdXRWYWx1ZShFeGVj
U3RhdGUgKmV4ZWMsIAogICAgIG5vZGUuc2V0Tm9kZVZhbHVlKHZhbHVlLnRvU3RyaW5nKGV4ZWMp
LnN0cmluZygpLCBleGNlcHRpb24pOwogICAgIGJyZWFrOwogICBjYXNlIFByZWZpeDoKLSAgICBu
b2RlLnNldFByZWZpeCh2YWx1ZS50b1N0cmluZyhleGVjKS5zdHJpbmcoKSwgZXhjZXB0aW9uKTsK
KyAgICBub2RlLnNldFByZWZpeCh2YWx1ZS50b1N0cmluZyhleGVjKS5zdHJpbmcoKS5pbXBsZW1l
bnRhdGlvbigpLCBleGNlcHRpb24pOwogICAgIGJyZWFrOwogICBjYXNlIE9uQWJvcnQ6CiAgICAg
c2V0TGlzdGVuZXIoZXhlYyxET006OkV2ZW50SW1wbDo6QUJPUlRfRVZFTlQsdmFsdWUpOwpAQCAt
MTE4Nyw3ICsxMTg2LDcgQEAgVmFsdWUgRE9NRWxlbWVudDo6dHJ5R2V0KEV4ZWNTdGF0ZSAqZXhl
YwogICB7CiAgICAgc3dpdGNoKCBlbnRyeS0+dmFsdWUgKSB7CiAgICAgY2FzZSBUYWdOYW1lOgot
ICAgICAgcmV0dXJuIGdldFN0cmluZ09yTnVsbChlbGVtZW50LnRhZ05hbWUoKSk7CisgICAgICBy
ZXR1cm4gZ2V0U3RyaW5nT3JOdWxsKGVsZW1lbnQubm9kZU5hbWUoKSk7CiAgICAgY2FzZSBTdHls
ZToKICAgICAgIHJldHVybiBnZXRET01DU1NTdHlsZURlY2xhcmF0aW9uKGV4ZWMsZWxlbWVudC5z
dHlsZSgpKTsKICAgICBkZWZhdWx0OgpAQCAtMTcxMCwyNiArMTcwOSwyMSBAQCBWYWx1ZUltcCAq
Z2V0UnVudGltZU9iamVjdChFeGVjU3RhdGUgKmV4CiAgICAgaWYgKCFuKQogICAgICAgICByZXR1
cm4gMDsKIAotICAgIHN3aXRjaCAobi0+aWQoKSkgewotICAgICAgICBjYXNlIElEX0FQUExFVDog
ewotICAgICAgICAgICAgSFRNTEFwcGxldEVsZW1lbnRJbXBsICphcHBsZXRFbGVtZW50ID0gc3Rh
dGljX2Nhc3Q8SFRNTEFwcGxldEVsZW1lbnRJbXBsICo+KG4pOwotICAgICAgICAgICAgaWYgKGFw
cGxldEVsZW1lbnQtPmdldEFwcGxldEluc3RhbmNlKCkpCi0gICAgICAgICAgICAgICAgLy8gVGhl
IGluc3RhbmNlIGlzIG93bmVkIGJ5IHRoZSBhcHBsZXQgZWxlbWVudC4KLSAgICAgICAgICAgICAg
ICByZXR1cm4gbmV3IFJ1bnRpbWVPYmplY3RJbXAoYXBwbGV0RWxlbWVudC0+Z2V0QXBwbGV0SW5z
dGFuY2UoKSwgZmFsc2UpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
Y2FzZSBJRF9FTUJFRDogewotICAgICAgICAgICAgSFRNTEVtYmVkRWxlbWVudEltcGwgKmVtYmVk
RWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxFbWJlZEVsZW1lbnRJbXBsICo+KG4pOwotICAgICAg
ICAgICAgaWYgKGVtYmVkRWxlbWVudC0+Z2V0RW1iZWRJbnN0YW5jZSgpKQotICAgICAgICAgICAg
ICAgIHJldHVybiBuZXcgUnVudGltZU9iamVjdEltcChlbWJlZEVsZW1lbnQtPmdldEVtYmVkSW5z
dGFuY2UoKSwgZmFsc2UpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
Y2FzZSBJRF9PQkpFQ1Q6IHsKLSAgICAgICAgICAgIEhUTUxPYmplY3RFbGVtZW50SW1wbCAqb2Jq
ZWN0RWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxPYmplY3RFbGVtZW50SW1wbCAqPihuKTsKLSAg
ICAgICAgICAgIGlmIChvYmplY3RFbGVtZW50LT5nZXRPYmplY3RJbnN0YW5jZSgpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBuZXcgUnVudGltZU9iamVjdEltcChvYmplY3RFbGVtZW50LT5nZXRP
YmplY3RJbnN0YW5jZSgpLCBmYWxzZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQor
ICAgIGlmIChuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YXBwbGV0KCkpKSB7CisgICAgICAgIEhU
TUxBcHBsZXRFbGVtZW50SW1wbCAqYXBwbGV0RWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxBcHBs
ZXRFbGVtZW50SW1wbCAqPihuKTsKKyAgICAgICAgaWYgKGFwcGxldEVsZW1lbnQtPmdldEFwcGxl
dEluc3RhbmNlKCkpCisgICAgICAgICAgICAvLyBUaGUgaW5zdGFuY2UgaXMgb3duZWQgYnkgdGhl
IGFwcGxldCBlbGVtZW50LgorICAgICAgICAgICAgcmV0dXJuIG5ldyBSdW50aW1lT2JqZWN0SW1w
KGFwcGxldEVsZW1lbnQtPmdldEFwcGxldEluc3RhbmNlKCksIGZhbHNlKTsKKyAgICB9CisgICAg
ZWxzZSBpZiAobi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmVtYmVkKCkpKSB7CisgICAgICAgIEhU
TUxFbWJlZEVsZW1lbnRJbXBsICplbWJlZEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRW1iZWRF
bGVtZW50SW1wbCAqPihuKTsKKyAgICAgICAgaWYgKGVtYmVkRWxlbWVudC0+Z2V0RW1iZWRJbnN0
YW5jZSgpKQorICAgICAgICAgICAgcmV0dXJuIG5ldyBSdW50aW1lT2JqZWN0SW1wKGVtYmVkRWxl
bWVudC0+Z2V0RW1iZWRJbnN0YW5jZSgpLCBmYWxzZSk7CisgICAgfQorICAgIGVsc2UgaWYgKG4t
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvYmplY3QoKSkpIHsKKyAgICAgICAgSFRNTE9iamVjdEVs
ZW1lbnRJbXBsICpvYmplY3RFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTE9iamVjdEVsZW1lbnRJ
bXBsICo+KG4pOworICAgICAgICBpZiAob2JqZWN0RWxlbWVudC0+Z2V0T2JqZWN0SW5zdGFuY2Uo
KSkKKyAgICAgICAgICAgIHJldHVybiBuZXcgUnVudGltZU9iamVjdEltcChvYmplY3RFbGVtZW50
LT5nZXRPYmplY3RJbnN0YW5jZSgpLCBmYWxzZSk7CiAgICAgfQogICAgIAogICAgIC8vIElmIHdl
IGRvbid0IGhhdmUgYSBydW50aW1lIG9iamVjdCByZXR1cm4gMC4KSW5kZXg6IGtodG1sL2VjbWEv
a2pzX2h0bWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1s
L2VjbWEva2pzX2h0bWwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEyMQpkaWZmIC11IC1w
IC1yMS4xMjEga2h0bWwvZWNtYS9ranNfaHRtbC5jcHAKLS0tIGtodG1sL2VjbWEva2pzX2h0bWwu
Y3BwCTMgSnVsIDIwMDUgMTA6NDc6NTYgLTAwMDAJMS4xMjEKKysrIGtodG1sL2VjbWEva2pzX2h0
bWwuY3BwCTggSnVsIDIwMDUgMDU6NDk6NTQgLTAwMDAKQEAgLTQ2LDggKzQ2LDYgQEAKICNpbmNs
dWRlICJranNfZXZlbnRzLmgiCiAjaW5jbHVkZSAia2pzX3Byb3h5LmgiCiAKLSNpbmNsdWRlICJt
aXNjL2h0bWx0YWdzLmgiCi0KICNpbmNsdWRlICJyZW5kZXJpbmcvcmVuZGVyX2NhbnZhc2ltYWdl
LmgiCiAjaW5jbHVkZSAicmVuZGVyaW5nL3JlbmRlcl9vYmplY3QuaCIKICNpbmNsdWRlICJyZW5k
ZXJpbmcvcmVuZGVyX2xheWVyLmgiCkBAIC0xMDksNiArMTA3LDcgQEAgdXNpbmcgRE9NOjpIVE1M
TWFwRWxlbWVudEltcGw7CiB1c2luZyBET006OkhUTUxNZW51RWxlbWVudEltcGw7CiB1c2luZyBE
T006OkhUTUxNZXRhRWxlbWVudEltcGw7CiB1c2luZyBET006OkhUTUxNb2RFbGVtZW50SW1wbDsK
K3VzaW5nIERPTTo6SFRNTE5hbWVzOwogdXNpbmcgRE9NOjpIVE1MT0xpc3RFbGVtZW50SW1wbDsK
IHVzaW5nIERPTTo6SFRNTE9iamVjdEVsZW1lbnRJbXBsOwogdXNpbmcgRE9NOjpIVE1MT3B0R3Jv
dXBFbGVtZW50SW1wbDsKQEAgLTM1Myw3ICszNTIsNyBAQCBWYWx1ZSBIVE1MRG9jdW1lbnQ6OnRy
eUdldChFeGVjU3RhdGUgKmV4CiAgIGlmICh2YWwpCiAgICAgcmV0dXJuIFZhbHVlKHZhbCk7CiAK
LSAgSFRNTEJvZHlFbGVtZW50SW1wbCAqYm9keUVsZW1lbnQgPSAoYm9keSAmJiBib2R5LT5pZCgp
ID09IElEX0JPRFkpID8gc3RhdGljX2Nhc3Q8SFRNTEJvZHlFbGVtZW50SW1wbCAqPihib2R5KSA6
IDA7CisgIEhUTUxCb2R5RWxlbWVudEltcGwgKmJvZHlFbGVtZW50ID0gKGJvZHkgJiYgYm9keS0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJvZHkoKSkpID8gc3RhdGljX2Nhc3Q8SFRNTEJvZHlFbGVt
ZW50SW1wbCAqPihib2R5KSA6IDA7CiAKICAgaWYgKGVudHJ5KSB7CiAgICAgc3dpdGNoIChlbnRy
eS0+dmFsdWUpIHsKQEAgLTQyOSw3ICs0MjgsNyBAQCB2b2lkIEtKUzo6SFRNTERvY3VtZW50Ojpw
dXRWYWx1ZShFeGVjU3RhCiAgIERPTUV4Y2VwdGlvblRyYW5zbGF0b3IgZXhjZXB0aW9uKGV4ZWMp
OwogICBIVE1MRG9jdW1lbnRJbXBsICZkb2MgPSAqc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50SW1w
bCAqPihpbXBsKCkpOwogICBIVE1MRWxlbWVudEltcGwgKmJvZHkgPSBkb2MuYm9keSgpOwotICBI
VE1MQm9keUVsZW1lbnRJbXBsICpib2R5RWxlbWVudCA9IChib2R5ICYmIGJvZHktPmlkKCkgPT0g
SURfQk9EWSkgPyBzdGF0aWNfY2FzdDxIVE1MQm9keUVsZW1lbnRJbXBsICo+KGJvZHkpIDogMDsK
KyAgSFRNTEJvZHlFbGVtZW50SW1wbCAqYm9keUVsZW1lbnQgPSAoYm9keSAmJiBib2R5LT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6Ym9keSgpKSkgPyBzdGF0aWNfY2FzdDxIVE1MQm9keUVsZW1lbnRJ
bXBsICo+KGJvZHkpIDogMDsKIAogICBzd2l0Y2ggKHRva2VuKSB7CiAgIGNhc2UgVGl0bGU6CkBA
IC01ODMsMTMzICs1ODIsMjE4IEBAIGNvbnN0IENsYXNzSW5mbyBLSlM6OkhUTUxFbGVtZW50Ojpt
YXJxdWUKIAogY29uc3QgQ2xhc3NJbmZvKiBLSlM6OkhUTUxFbGVtZW50OjpjbGFzc0luZm8oKSBj
b25zdAogewotICBzd2l0Y2ggKGltcGwoKS0+aWQoKSkgewotICBjYXNlIElEX0hUTUw6Ci0gICAg
cmV0dXJuICZodG1sX2luZm87Ci0gIGNhc2UgSURfSEVBRDoKLSAgICByZXR1cm4gJmhlYWRfaW5m
bzsKLSAgY2FzZSBJRF9MSU5LOgotICAgIHJldHVybiAmbGlua19pbmZvOwotICBjYXNlIElEX1RJ
VExFOgotICAgIHJldHVybiAmdGl0bGVfaW5mbzsKLSAgY2FzZSBJRF9NRVRBOgotICAgIHJldHVy
biAmbWV0YV9pbmZvOwotICBjYXNlIElEX0JBU0U6Ci0gICAgcmV0dXJuICZiYXNlX2luZm87Ci0g
IGNhc2UgSURfSVNJTkRFWDoKLSAgICByZXR1cm4gJmlzSW5kZXhfaW5mbzsKLSAgY2FzZSBJRF9T
VFlMRToKLSAgICByZXR1cm4gJnN0eWxlX2luZm87Ci0gIGNhc2UgSURfQk9EWToKLSAgICByZXR1
cm4gJmJvZHlfaW5mbzsKLSAgY2FzZSBJRF9GT1JNOgotICAgIHJldHVybiAmZm9ybV9pbmZvOwot
ICBjYXNlIElEX1NFTEVDVDoKLSAgICByZXR1cm4gJnNlbGVjdF9pbmZvOwotICBjYXNlIElEX09Q
VEdST1VQOgotICAgIHJldHVybiAmb3B0R3JvdXBfaW5mbzsKLSAgY2FzZSBJRF9PUFRJT046Ci0g
ICAgcmV0dXJuICZvcHRpb25faW5mbzsKLSAgY2FzZSBJRF9JTlBVVDoKLSAgICByZXR1cm4gJmlu
cHV0X2luZm87Ci0gIGNhc2UgSURfVEVYVEFSRUE6Ci0gICAgcmV0dXJuICZ0ZXh0QXJlYV9pbmZv
OwotICBjYXNlIElEX0JVVFRPTjoKLSAgICByZXR1cm4gJmJ1dHRvbl9pbmZvOwotICBjYXNlIElE
X0xBQkVMOgotICAgIHJldHVybiAmbGFiZWxfaW5mbzsKLSAgY2FzZSBJRF9GSUVMRFNFVDoKLSAg
ICByZXR1cm4gJmZpZWxkU2V0X2luZm87Ci0gIGNhc2UgSURfTEVHRU5EOgotICAgIHJldHVybiAm
bGVnZW5kX2luZm87Ci0gIGNhc2UgSURfVUw6Ci0gICAgcmV0dXJuICZ1bF9pbmZvOwotICBjYXNl
IElEX09MOgotICAgIHJldHVybiAmb2xfaW5mbzsKLSAgY2FzZSBJRF9ETDoKLSAgICByZXR1cm4g
JmRsX2luZm87Ci0gIGNhc2UgSURfRElSOgotICAgIHJldHVybiAmZGlyX2luZm87Ci0gIGNhc2Ug
SURfTUVOVToKLSAgICByZXR1cm4gJm1lbnVfaW5mbzsKLSAgY2FzZSBJRF9MSToKLSAgICByZXR1
cm4gJmxpX2luZm87Ci0gIGNhc2UgSURfRElWOgotICAgIHJldHVybiAmZGl2X2luZm87Ci0gIGNh
c2UgSURfUDoKLSAgICByZXR1cm4gJnBfaW5mbzsKLSAgY2FzZSBJRF9IMToKLSAgY2FzZSBJRF9I
MjoKLSAgY2FzZSBJRF9IMzoKLSAgY2FzZSBJRF9INDoKLSAgY2FzZSBJRF9INToKLSAgY2FzZSBJ
RF9INjoKLSAgICByZXR1cm4gJmhlYWRpbmdfaW5mbzsKLSAgY2FzZSBJRF9CTE9DS1FVT1RFOgot
ICAgIHJldHVybiAmYmxvY2tRdW90ZV9pbmZvOwotICBjYXNlIElEX1E6Ci0gICAgcmV0dXJuICZx
X2luZm87Ci0gIGNhc2UgSURfUFJFOgotICAgIHJldHVybiAmcHJlX2luZm87Ci0gIGNhc2UgSURf
QlI6Ci0gICAgcmV0dXJuICZicl9pbmZvOwotICBjYXNlIElEX0JBU0VGT05UOgotICAgIHJldHVy
biAmYmFzZUZvbnRfaW5mbzsKLSAgY2FzZSBJRF9GT05UOgotICAgIHJldHVybiAmZm9udF9pbmZv
OwotICBjYXNlIElEX0hSOgotICAgIHJldHVybiAmaHJfaW5mbzsKLSAgY2FzZSBJRF9JTlM6Ci0g
IGNhc2UgSURfREVMOgotICAgIHJldHVybiAmbW9kX2luZm87Ci0gIGNhc2UgSURfQToKLSAgICBy
ZXR1cm4gJmFfaW5mbzsKLSAgY2FzZSBJRF9DQU5WQVM6Ci0gICAgcmV0dXJuICZjYW52YXNfaW5m
bzsKLSAgY2FzZSBJRF9JTUc6Ci0gICAgcmV0dXJuICZpbWdfaW5mbzsKLSAgY2FzZSBJRF9PQkpF
Q1Q6Ci0gICAgcmV0dXJuICZvYmplY3RfaW5mbzsKLSAgY2FzZSBJRF9QQVJBTToKLSAgICByZXR1
cm4gJnBhcmFtX2luZm87Ci0gIGNhc2UgSURfQVBQTEVUOgotICAgIHJldHVybiAmYXBwbGV0X2lu
Zm87Ci0gIGNhc2UgSURfTUFQOgotICAgIHJldHVybiAmbWFwX2luZm87Ci0gIGNhc2UgSURfQVJF
QToKLSAgICByZXR1cm4gJmFyZWFfaW5mbzsKLSAgY2FzZSBJRF9TQ1JJUFQ6Ci0gICAgcmV0dXJu
ICZzY3JpcHRfaW5mbzsKLSAgY2FzZSBJRF9UQUJMRToKLSAgICByZXR1cm4gJnRhYmxlX2luZm87
Ci0gIGNhc2UgSURfQ0FQVElPTjoKLSAgICByZXR1cm4gJmNhcHRpb25faW5mbzsKLSAgY2FzZSBJ
RF9DT0w6Ci0gICAgcmV0dXJuICZjb2xfaW5mbzsKLSAgY2FzZSBJRF9USEVBRDoKLSAgICByZXR1
cm4gJnRhYmxlc2VjdGlvbl9pbmZvOwotICBjYXNlIElEX1RCT0RZOgotICAgIHJldHVybiAmdGFi
bGVzZWN0aW9uX2luZm87Ci0gIGNhc2UgSURfVEZPT1Q6Ci0gICAgcmV0dXJuICZ0YWJsZXNlY3Rp
b25faW5mbzsKLSAgY2FzZSBJRF9UUjoKLSAgICByZXR1cm4gJnRyX2luZm87Ci0gIGNhc2UgSURf
VEg6Ci0gICAgcmV0dXJuICZ0YWJsZWNlbGxfaW5mbzsKLSAgY2FzZSBJRF9URDoKLSAgICByZXR1
cm4gJnRhYmxlY2VsbF9pbmZvOwotICBjYXNlIElEX0ZSQU1FU0VUOgotICAgIHJldHVybiAmZnJh
bWVTZXRfaW5mbzsKLSAgY2FzZSBJRF9GUkFNRToKLSAgICByZXR1cm4gJmZyYW1lX2luZm87Ci0g
IGNhc2UgSURfSUZSQU1FOgotICAgIHJldHVybiAmaUZyYW1lX2luZm87Ci0gIGNhc2UgSURfTUFS
UVVFRToKLSAgICByZXR1cm4gJm1hcnF1ZWVfaW5mbzsKLSAgZGVmYXVsdDoKKyAgICAvLyBXZSBh
bHJlYWR5IGtub3cgd2UgaGF2ZSBhbiBIVE1MIGVsZW1lbnQsIHNvIHdlIG9ubHkgbmVlZCB0byBj
b21wYXJlIHRoZSBsb2NhbE5hbWUgY29tcG9uZW50IG9mIHRoZSBxdWFsaWZpZWQgbmFtZS4KKyAg
ICBzdGF0aWMgUVB0ckRpY3Q8Y29uc3QgQ2xhc3NJbmZvPiBjbGFzc0luZm9EaWN0OworICAgIGlm
IChjbGFzc0luZm9EaWN0LmlzRW1wdHkoKSkgeworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2Vy
dChIVE1MTmFtZXM6OmEoKS5sb2NhbE5hbWVQdHIoKSwgJmFfaW5mbyk7CisgICAgICAgIGNsYXNz
SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6YXBwbGV0KCkubG9jYWxOYW1lUHRyKCksICZhcHBs
ZXRfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6YXJlYSgp
LmxvY2FsTmFtZVB0cigpLCAmYXJlYV9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNl
cnQoSFRNTE5hbWVzOjpiYXNlKCkubG9jYWxOYW1lUHRyKCksICZiYXNlX2luZm8pOworICAgICAg
ICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmJhc2Vmb250KCkubG9jYWxOYW1lUHRy
KCksICZiYXNlRm9udF9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5h
bWVzOjpibG9ja3F1b3RlKCkubG9jYWxOYW1lUHRyKCksICZibG9ja1F1b3RlX2luZm8pOworICAg
ICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmJvZHkoKS5sb2NhbE5hbWVQdHIo
KSwgJmJvZHlfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6
YnIoKS5sb2NhbE5hbWVQdHIoKSwgJmJyX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmlu
c2VydChIVE1MTmFtZXM6OmJ1dHRvbigpLmxvY2FsTmFtZVB0cigpLCAmYnV0dG9uX2luZm8pOwor
ICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmNhbnZhcygpLmxvY2FsTmFt
ZVB0cigpLCAmY2FudmFzX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1M
TmFtZXM6OmNhcHRpb24oKS5sb2NhbE5hbWVQdHIoKSwgJmNhcHRpb25faW5mbyk7CisgICAgICAg
IGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6Y29sKCkubG9jYWxOYW1lUHRyKCksICZj
b2xfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6Y29sZ3Jv
dXAoKS5sb2NhbE5hbWVQdHIoKSwgJmNvbF9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5p
bnNlcnQoSFRNTE5hbWVzOjpkZWwoKS5sb2NhbE5hbWVQdHIoKSwgJm1vZF9pbmZvKTsKKyAgICAg
ICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpkaXIoKS5sb2NhbE5hbWVQdHIoKSwg
JmRpcl9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpkaXYo
KS5sb2NhbE5hbWVQdHIoKSwgJmRpdl9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNl
cnQoSFRNTE5hbWVzOjpkbCgpLmxvY2FsTmFtZVB0cigpLCAmZGxfaW5mbyk7CisgICAgICAgIGNs
YXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6ZmllbGRzZXQoKS5sb2NhbE5hbWVQdHIoKSwg
JmZpZWxkU2V0X2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6
OmZvbnQoKS5sb2NhbE5hbWVQdHIoKSwgJmZvbnRfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0Rp
Y3QuaW5zZXJ0KEhUTUxOYW1lczo6Zm9ybSgpLmxvY2FsTmFtZVB0cigpLCAmZm9ybV9pbmZvKTsK
KyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpmcmFtZSgpLmxvY2FsTmFt
ZVB0cigpLCAmZnJhbWVfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxO
YW1lczo6ZnJhbWVzZXQoKS5sb2NhbE5hbWVQdHIoKSwgJmZyYW1lU2V0X2luZm8pOworICAgICAg
ICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmgxKCkubG9jYWxOYW1lUHRyKCksICZo
ZWFkaW5nX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Omgy
KCkubG9jYWxOYW1lUHRyKCksICZoZWFkaW5nX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0
Lmluc2VydChIVE1MTmFtZXM6OmgzKCkubG9jYWxOYW1lUHRyKCksICZoZWFkaW5nX2luZm8pOwor
ICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Omg0KCkubG9jYWxOYW1lUHRy
KCksICZoZWFkaW5nX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFt
ZXM6Omg1KCkubG9jYWxOYW1lUHRyKCksICZoZWFkaW5nX2luZm8pOworICAgICAgICBjbGFzc0lu
Zm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Omg2KCkubG9jYWxOYW1lUHRyKCksICZoZWFkaW5nX2lu
Zm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmhlYWQoKS5sb2Nh
bE5hbWVQdHIoKSwgJmhlYWRfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhU
TUxOYW1lczo6aHIoKS5sb2NhbE5hbWVQdHIoKSwgJmhyX2luZm8pOworICAgICAgICBjbGFzc0lu
Zm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Omh0bWwoKS5sb2NhbE5hbWVQdHIoKSwgJmh0bWxfaW5m
byk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6aWZyYW1lKCkubG9j
YWxOYW1lUHRyKCksICZpRnJhbWVfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0
KEhUTUxOYW1lczo6aW1nKCkubG9jYWxOYW1lUHRyKCksICZpbWdfaW5mbyk7CisgICAgICAgIGNs
YXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6aW5wdXQoKS5sb2NhbE5hbWVQdHIoKSwgJmlu
cHV0X2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Omlucygp
LmxvY2FsTmFtZVB0cigpLCAmbW9kX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2Vy
dChIVE1MTmFtZXM6OmlzaW5kZXgoKS5sb2NhbE5hbWVQdHIoKSwgJmlzSW5kZXhfaW5mbyk7Cisg
ICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6bGFiZWwoKS5sb2NhbE5hbWVQ
dHIoKSwgJmxhYmVsX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFt
ZXM6OmxlZ2VuZCgpLmxvY2FsTmFtZVB0cigpLCAmbGVnZW5kX2luZm8pOworICAgICAgICBjbGFz
c0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmxpKCkubG9jYWxOYW1lUHRyKCksICZsaV9pbmZv
KTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpsaW5rKCkubG9jYWxO
YW1lUHRyKCksICZsaW5rX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1M
TmFtZXM6Om1hcCgpLmxvY2FsTmFtZVB0cigpLCAmbWFwX2luZm8pOworICAgICAgICBjbGFzc0lu
Zm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Om1hcnF1ZWUoKS5sb2NhbE5hbWVQdHIoKSwgJm1hcnF1
ZWVfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6bWVudSgp
LmxvY2FsTmFtZVB0cigpLCAmbWVudV9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNl
cnQoSFRNTE5hbWVzOjptZXRhKCkubG9jYWxOYW1lUHRyKCksICZtZXRhX2luZm8pOworICAgICAg
ICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Om9iamVjdCgpLmxvY2FsTmFtZVB0cigp
LCAmb2JqZWN0X2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6
Om9sKCkubG9jYWxOYW1lUHRyKCksICZvbF9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5p
bnNlcnQoSFRNTE5hbWVzOjpvcHRpb24oKS5sb2NhbE5hbWVQdHIoKSwgJm9wdGlvbl9pbmZvKTsK
KyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpvcHRncm91cCgpLmxvY2Fs
TmFtZVB0cigpLCAmb3B0R3JvdXBfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0
KEhUTUxOYW1lczo6cCgpLmxvY2FsTmFtZVB0cigpLCAmcF9pbmZvKTsKKyAgICAgICAgY2xhc3NJ
bmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpwYXJhbSgpLmxvY2FsTmFtZVB0cigpLCAmcGFyYW1f
aW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6cHJlKCkubG9j
YWxOYW1lUHRyKCksICZwcmVfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhU
TUxOYW1lczo6cSgpLmxvY2FsTmFtZVB0cigpLCAmcV9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZv
RGljdC5pbnNlcnQoSFRNTE5hbWVzOjpzY3JpcHQoKS5sb2NhbE5hbWVQdHIoKSwgJnNjcmlwdF9p
bmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpzZWxlY3QoKS5s
b2NhbE5hbWVQdHIoKSwgJnNlbGVjdF9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNl
cnQoSFRNTE5hbWVzOjpzdHlsZSgpLmxvY2FsTmFtZVB0cigpLCAmc3R5bGVfaW5mbyk7CisgICAg
ICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6dGFibGUoKS5sb2NhbE5hbWVQdHIo
KSwgJnRhYmxlX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6
OnRib2R5KCkubG9jYWxOYW1lUHRyKCksICZ0YWJsZXNlY3Rpb25faW5mbyk7CisgICAgICAgIGNs
YXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6dGQoKS5sb2NhbE5hbWVQdHIoKSwgJnRhYmxl
Y2VsbF9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjp0ZXh0
YXJlYSgpLmxvY2FsTmFtZVB0cigpLCAmdGV4dEFyZWFfaW5mbyk7CisgICAgICAgIGNsYXNzSW5m
b0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6dGgoKS5sb2NhbE5hbWVQdHIoKSwgJnRhYmxlY2VsbF9p
bmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjp0aGVhZCgpLmxv
Y2FsTmFtZVB0cigpLCAmdGFibGVzZWN0aW9uX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0
Lmluc2VydChIVE1MTmFtZXM6OnRmb290KCkubG9jYWxOYW1lUHRyKCksICZ0YWJsZXNlY3Rpb25f
aW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6dGl0bGUoKS5s
b2NhbE5hbWVQdHIoKSwgJnRpdGxlX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2Vy
dChIVE1MTmFtZXM6OnRyKCkubG9jYWxOYW1lUHRyKCksICZ0cl9pbmZvKTsKKyAgICAgICAgY2xh
c3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjp1bCgpLmxvY2FsTmFtZVB0cigpLCAmdWxfaW5m
byk7CisgICAgfQorICAgIAorICAgIEhUTUxFbGVtZW50SW1wbCogZWxlbWVudCA9IHN0YXRpY19j
YXN0PEhUTUxFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgY29uc3QgQ2xhc3NJbmZvKiByZXN1
bHQgPSBjbGFzc0luZm9EaWN0LmZpbmQoZWxlbWVudC0+bG9jYWxOYW1lKCkuaW1wbGVtZW50YXRp
b24oKSk7CisgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICByZXR1
cm4gJmluZm87Ci0gIH0KIH0KKworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVs
ZW1lbnQ6Omh0bWxfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6Omh0bWxHZXR0ZXIsICZIVE1MRWxl
bWVudDo6aHRtbFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVs
ZW1lbnQ6OmhlYWRfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmhlYWRHZXR0ZXIsICZIVE1MRWxl
bWVudDo6aGVhZFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVs
ZW1lbnQ6OmxpbmtfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmxpbmtHZXR0ZXIsICZIVE1MRWxl
bWVudDo6bGlua1NldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVs
ZW1lbnQ6OnRpdGxlX2dldHNldCA9IHsgJkhUTUxFbGVtZW50Ojp0aXRsZUdldHRlciwgJkhUTUxF
bGVtZW50Ojp0aXRsZVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRN
TEVsZW1lbnQ6Om1ldGFfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6Om1ldGFHZXR0ZXIsICZIVE1M
RWxlbWVudDo6bWV0YVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRN
TEVsZW1lbnQ6OmJhc2VfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmJhc2VHZXR0ZXIsICZIVE1M
RWxlbWVudDo6YmFzZVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRN
TEVsZW1lbnQ6OmlzSW5kZXhfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmlzSW5kZXhHZXR0ZXIs
ICZIVE1MRWxlbWVudDo6aXNJbmRleFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNl
dEluZm8gSFRNTEVsZW1lbnQ6OnN0eWxlX2dldHNldCA9IHsgJkhUTUxFbGVtZW50OjpzdHlsZUdl
dHRlciwgJkhUTUxFbGVtZW50OjpzdHlsZVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6Okdl
dFNldEluZm8gSFRNTEVsZW1lbnQ6OmJvZHlfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmJvZHlH
ZXR0ZXIsICZIVE1MRWxlbWVudDo6Ym9keVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6Okdl
dFNldEluZm8gSFRNTEVsZW1lbnQ6OmZvcm1fZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmZvcm1H
ZXR0ZXIsICZIVE1MRWxlbWVudDo6Zm9ybVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6Okdl
dFNldEluZm8gSFRNTEVsZW1lbnQ6OnNlbGVjdF9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6c2Vs
ZWN0R2V0dGVyLCAmSFRNTEVsZW1lbnQ6OnNlbGVjdFNldHRlciB9OworY29uc3QgSFRNTEVsZW1l
bnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6Om9wdEdyb3VwX2dldHNldCA9IHsgJkhUTUxFbGVt
ZW50OjpvcHRHcm91cEdldHRlciwgJkhUTUxFbGVtZW50OjpvcHRHcm91cFNldHRlciB9OworY29u
c3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6Om9wdGlvbl9nZXRzZXQgPSB7
ICZIVE1MRWxlbWVudDo6b3B0aW9uR2V0dGVyLCAmSFRNTEVsZW1lbnQ6Om9wdGlvblNldHRlciB9
OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmlucHV0X2dldHNl
dCA9IHsgJkhUTUxFbGVtZW50OjppbnB1dEdldHRlciwgJkhUTUxFbGVtZW50OjppbnB1dFNldHRl
ciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OnRleHRBcmVh
X2dldHNldCA9IHsgJkhUTUxFbGVtZW50Ojp0ZXh0QXJlYUdldHRlciwgJkhUTUxFbGVtZW50Ojp0
ZXh0QXJlYVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1l
bnQ6OmJ1dHRvbl9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6YnV0dG9uR2V0dGVyLCAmSFRNTEVs
ZW1lbnQ6OmJ1dHRvblNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRN
TEVsZW1lbnQ6OmxhYmVsX2dldHNldCA9IHsgJkhUTUxFbGVtZW50OjpsYWJlbEdldHRlciwgJkhU
TUxFbGVtZW50OjpsYWJlbFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8g
SFRNTEVsZW1lbnQ6OmZpZWxkU2V0X2dldHNldCA9IHsgJkhUTUxFbGVtZW50OjpmaWVsZFNldEdl
dHRlciwgJkhUTUxFbGVtZW50OjpmaWVsZFNldFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6
OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmxlZ2VuZF9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6
bGVnZW5kR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmxlZ2VuZFNldHRlciB9OworY29uc3QgSFRNTEVs
ZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OnVsX2dldHNldCA9IHsgJkhUTUxFbGVtZW50
Ojp1TGlzdEdldHRlciwgJkhUTUxFbGVtZW50Ojp1TGlzdFNldHRlciB9OworY29uc3QgSFRNTEVs
ZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6Om9sX2dldHNldCA9IHsgJkhUTUxFbGVtZW50
OjpvTGlzdEdldHRlciwgJkhUTUxFbGVtZW50OjpvTGlzdFNldHRlciB9OworY29uc3QgSFRNTEVs
ZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmRsX2dldHNldCA9IHsgJkhUTUxFbGVtZW50
OjpkTGlzdEdldHRlciwgJkhUTUxFbGVtZW50OjpkTGlzdFNldHRlciB9OworY29uc3QgSFRNTEVs
ZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmRpcl9nZXRzZXQgPSB7ICZIVE1MRWxlbWVu
dDo6ZGlyR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmRpclNldHRlciB9OworY29uc3QgSFRNTEVsZW1l
bnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6Om1lbnVfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6
Om1lbnVHZXR0ZXIsICZIVE1MRWxlbWVudDo6bWVudVNldHRlciB9OworY29uc3QgSFRNTEVsZW1l
bnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmxpX2dldHNldCA9IHsgJkhUTUxFbGVtZW50Ojps
aUdldHRlciwgJkhUTUxFbGVtZW50OjpsaVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6Okdl
dFNldEluZm8gSFRNTEVsZW1lbnQ6OmRpdl9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6ZGl2R2V0
dGVyLCAmSFRNTEVsZW1lbnQ6OmRpdlNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNl
dEluZm8gSFRNTEVsZW1lbnQ6OnBfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OnBhcmFncmFwaEdl
dHRlciwgJkhUTUxFbGVtZW50OjpwYXJhZ3JhcGhTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50
OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjpoZWFkaW5nX2dldHNldCA9IHsgJkhUTUxFbGVtZW50
OjpoZWFkaW5nR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmhlYWRpbmdTZXR0ZXIgfTsKK2NvbnN0IEhU
TUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjpibG9ja1F1b3RlX2dldHNldCA9IHsg
JkhUTUxFbGVtZW50OjpibG9ja1F1b3RlR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmJsb2NrUXVvdGVT
ZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjpxX2dl
dHNldCA9IHsgJkhUTUxFbGVtZW50OjpxdW90ZUdldHRlciwgJkhUTUxFbGVtZW50OjpxdW90ZVNl
dHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OnByZV9n
ZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6cHJlR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OnByZVNldHRl
ciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmJyX2dldHNl
dCA9IHsgJkhUTUxFbGVtZW50OjpickdldHRlciwgJkhUTUxFbGVtZW50OjpiclNldHRlciB9Owor
Y29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmJhc2VGb250X2dldHNl
dCA9IHsgJkhUTUxFbGVtZW50OjpiYXNlRm9udEdldHRlciwgJkhUTUxFbGVtZW50OjpiYXNlRm9u
dFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmZv
bnRfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmZvbnRHZXR0ZXIsICZIVE1MRWxlbWVudDo6Zm9u
dFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6Omhy
X2dldHNldCA9IHsgJkhUTUxFbGVtZW50OjpockdldHRlciwgJkhUTUxFbGVtZW50OjpoclNldHRl
ciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6Om1vZF9nZXRz
ZXQgPSB7ICZIVE1MRWxlbWVudDo6bW9kR2V0dGVyLCAmSFRNTEVsZW1lbnQ6Om1vZFNldHRlciB9
OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmFfZ2V0c2V0ID0g
eyAmSFRNTEVsZW1lbnQ6OmFuY2hvckdldHRlciwgJkhUTUxFbGVtZW50OjphbmNob3JTZXR0ZXIg
fTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjpjYW52YXNfZ2V0
c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmltYWdlR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmltYWdlU2V0
dGVyIH07Citjb25zdCBIVE1MRWxlbWVudDo6R2V0U2V0SW5mbyBIVE1MRWxlbWVudDo6aW1nX2dl
dHNldCA9IHsgJkhUTUxFbGVtZW50OjppbWFnZUdldHRlciwgJkhUTUxFbGVtZW50OjppbWFnZVNl
dHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6Om9iamVj
dF9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6b2JqZWN0R2V0dGVyLCAmSFRNTEVsZW1lbnQ6Om9i
amVjdFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6
OnBhcmFtX2dldHNldCA9IHsgJkhUTUxFbGVtZW50OjpwYXJhbUdldHRlciwgJkhUTUxFbGVtZW50
OjpwYXJhbVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1l
bnQ6OmFwcGxldF9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6YXBwbGV0R2V0dGVyLCAmSFRNTEVs
ZW1lbnQ6OmFwcGxldFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRN
TEVsZW1lbnQ6Om1hcF9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6bWFwR2V0dGVyLCAmSFRNTEVs
ZW1lbnQ6Om1hcFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVs
ZW1lbnQ6OmFyZWFfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmFyZWFHZXR0ZXIsICZIVE1MRWxl
bWVudDo6YXJlYVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVs
ZW1lbnQ6OnNjcmlwdF9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6c2NyaXB0R2V0dGVyLCAmSFRN
TEVsZW1lbnQ6OnNjcmlwdFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8g
SFRNTEVsZW1lbnQ6OnRhYmxlX2dldHNldCA9IHsgJkhUTUxFbGVtZW50Ojp0YWJsZUdldHRlciwg
JkhUTUxFbGVtZW50Ojp0YWJsZVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldElu
Zm8gSFRNTEVsZW1lbnQ6OmNhcHRpb25fZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OnRhYmxlQ2Fw
dGlvbkdldHRlciwgJkhUTUxFbGVtZW50Ojp0YWJsZUNhcHRpb25TZXR0ZXIgfTsKK2NvbnN0IEhU
TUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50Ojpjb2xfZ2V0c2V0ID0geyAmSFRNTEVs
ZW1lbnQ6OnRhYmxlQ29sR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OnRhYmxlQ29sU2V0dGVyIH07Citj
b25zdCBIVE1MRWxlbWVudDo6R2V0U2V0SW5mbyBIVE1MRWxlbWVudDo6dGFibGVzZWN0aW9uX2dl
dHNldCA9IHsgJkhUTUxFbGVtZW50Ojp0YWJsZVNlY3Rpb25HZXR0ZXIsICZIVE1MRWxlbWVudDo6
dGFibGVTZWN0aW9uU2V0dGVyIH07Citjb25zdCBIVE1MRWxlbWVudDo6R2V0U2V0SW5mbyBIVE1M
RWxlbWVudDo6dHJfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OnRhYmxlUm93R2V0dGVyLCAmSFRN
TEVsZW1lbnQ6OnRhYmxlUm93U2V0dGVyIH07Citjb25zdCBIVE1MRWxlbWVudDo6R2V0U2V0SW5m
byBIVE1MRWxlbWVudDo6dGFibGVjZWxsX2dldHNldCA9IHsgJkhUTUxFbGVtZW50Ojp0YWJsZUNl
bGxHZXR0ZXIsICZIVE1MRWxlbWVudDo6dGFibGVDZWxsU2V0dGVyIH07Citjb25zdCBIVE1MRWxl
bWVudDo6R2V0U2V0SW5mbyBIVE1MRWxlbWVudDo6ZnJhbWVTZXRfZ2V0c2V0ID0geyAmSFRNTEVs
ZW1lbnQ6OmZyYW1lU2V0R2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmZyYW1lU2V0U2V0dGVyIH07Citj
b25zdCBIVE1MRWxlbWVudDo6R2V0U2V0SW5mbyBIVE1MRWxlbWVudDo6ZnJhbWVfZ2V0c2V0ID0g
eyAmSFRNTEVsZW1lbnQ6OmZyYW1lR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmZyYW1lU2V0dGVyIH07
Citjb25zdCBIVE1MRWxlbWVudDo6R2V0U2V0SW5mbyBIVE1MRWxlbWVudDo6aUZyYW1lX2dldHNl
dCA9IHsgJkhUTUxFbGVtZW50OjppRnJhbWVHZXR0ZXIsICZIVE1MRWxlbWVudDo6aUZyYW1lU2V0
dGVyIH07Citjb25zdCBIVE1MRWxlbWVudDo6R2V0U2V0SW5mbyBIVE1MRWxlbWVudDo6bWFycXVl
ZV9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6bWFycXVlZUdldHRlciwgJkhUTUxFbGVtZW50Ojpt
YXJxdWVlU2V0dGVyIH07CisKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvKiBIVE1MRWxl
bWVudDo6Z2V0U2V0SW5mbygpIGNvbnN0Cit7CisgICAgLy8gV2UgYWxyZWFkeSBrbm93IHdlIGhh
dmUgYW4gSFRNTCBlbGVtZW50LCBzbyB3ZSBvbmx5IG5lZWQgdG8gY29tcGFyZSB0aGUgbG9jYWxO
YW1lIGNvbXBvbmVudCBvZiB0aGUgcXVhbGlmaWVkIG5hbWUuCisgICAgc3RhdGljIFFQdHJEaWN0
PGNvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvPiBnZXRTZXRJbmZvRGljdDsKKyAgICBpZiAo
Z2V0U2V0SW5mb0RpY3QuaXNFbXB0eSgpKSB7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2Vy
dChIVE1MTmFtZXM6OmEoKS5sb2NhbE5hbWVQdHIoKSwgJmFfZ2V0c2V0KTsKKyAgICAgICAgZ2V0
U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6YXBwbGV0KCkubG9jYWxOYW1lUHRyKCksICZh
cHBsZXRfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6
YXJlYSgpLmxvY2FsTmFtZVB0cigpLCAmYXJlYV9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZv
RGljdC5pbnNlcnQoSFRNTE5hbWVzOjpiYXNlKCkubG9jYWxOYW1lUHRyKCksICZiYXNlX2dldHNl
dCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmJhc2Vmb250KCku
bG9jYWxOYW1lUHRyKCksICZiYXNlRm9udF9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGlj
dC5pbnNlcnQoSFRNTE5hbWVzOjpibG9ja3F1b3RlKCkubG9jYWxOYW1lUHRyKCksICZibG9ja1F1
b3RlX2dldHNldCk7IAorICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpi
b2R5KCkubG9jYWxOYW1lUHRyKCksICZib2R5X2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9E
aWN0Lmluc2VydChIVE1MTmFtZXM6OmJyKCkubG9jYWxOYW1lUHRyKCksICZicl9nZXRzZXQpOwor
ICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpidXR0b24oKS5sb2NhbE5h
bWVQdHIoKSwgJmJ1dHRvbl9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQo
SFRNTE5hbWVzOjpjYW52YXMoKS5sb2NhbE5hbWVQdHIoKSwgJmNhbnZhc19nZXRzZXQpOworICAg
ICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpjYXB0aW9uKCkubG9jYWxOYW1l
UHRyKCksICZjYXB0aW9uX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChI
VE1MTmFtZXM6OmNvbCgpLmxvY2FsTmFtZVB0cigpLCAmY29sX2dldHNldCk7CisgICAgICAgIGdl
dFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmNvbGdyb3VwKCkubG9jYWxOYW1lUHRyKCks
ICZjb2xfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6
ZGVsKCkubG9jYWxOYW1lUHRyKCksICZtb2RfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0Rp
Y3QuaW5zZXJ0KEhUTUxOYW1lczo6ZGlyKCkubG9jYWxOYW1lUHRyKCksICZkaXJfZ2V0c2V0KTsK
KyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6ZGl2KCkubG9jYWxOYW1l
UHRyKCksICZkaXZfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxO
YW1lczo6ZGwoKS5sb2NhbE5hbWVQdHIoKSwgJmRsX2dldHNldCk7CisgICAgICAgIGdldFNldElu
Zm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmZpZWxkc2V0KCkubG9jYWxOYW1lUHRyKCksICZmaWVs
ZFNldF9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpm
b250KCkubG9jYWxOYW1lUHRyKCksICZmb250X2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9E
aWN0Lmluc2VydChIVE1MTmFtZXM6OmZvcm0oKS5sb2NhbE5hbWVQdHIoKSwgJmZvcm1fZ2V0c2V0
KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6ZnJhbWUoKS5sb2Nh
bE5hbWVQdHIoKSwgJmZyYW1lX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2Vy
dChIVE1MTmFtZXM6OmZyYW1lc2V0KCkubG9jYWxOYW1lUHRyKCksICZmcmFtZVNldF9nZXRzZXQp
OworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpoMSgpLmxvY2FsTmFt
ZVB0cigpLCAmaGVhZGluZ19nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQo
SFRNTE5hbWVzOjpoMigpLmxvY2FsTmFtZVB0cigpLCAmaGVhZGluZ19nZXRzZXQpOworICAgICAg
ICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpoMygpLmxvY2FsTmFtZVB0cigpLCAm
aGVhZGluZ19nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVz
OjpoNCgpLmxvY2FsTmFtZVB0cigpLCAmaGVhZGluZ19nZXRzZXQpOworICAgICAgICBnZXRTZXRJ
bmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpoNSgpLmxvY2FsTmFtZVB0cigpLCAmaGVhZGluZ19n
ZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpoNigpLmxv
Y2FsTmFtZVB0cigpLCAmaGVhZGluZ19nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5p
bnNlcnQoSFRNTE5hbWVzOjpoZWFkKCkubG9jYWxOYW1lUHRyKCksICZoZWFkX2dldHNldCk7Cisg
ICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmhyKCkubG9jYWxOYW1lUHRy
KCksICZocl9nZXRzZXQpOyAKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1l
czo6aHRtbCgpLmxvY2FsTmFtZVB0cigpLCAmaHRtbF9nZXRzZXQpOworICAgICAgICBnZXRTZXRJ
bmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjppZnJhbWUoKS5sb2NhbE5hbWVQdHIoKSwgJmlGcmFt
ZV9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjppbWco
KS5sb2NhbE5hbWVQdHIoKSwgJmltZ19nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5p
bnNlcnQoSFRNTE5hbWVzOjppbnB1dCgpLmxvY2FsTmFtZVB0cigpLCAmaW5wdXRfZ2V0c2V0KTsK
KyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6aW5zKCkubG9jYWxOYW1l
UHRyKCksICZtb2RfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxO
YW1lczo6aXNpbmRleCgpLmxvY2FsTmFtZVB0cigpLCAmaXNJbmRleF9nZXRzZXQpOworICAgICAg
ICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpsYWJlbCgpLmxvY2FsTmFtZVB0cigp
LCAmbGFiZWxfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1l
czo6bGVnZW5kKCkubG9jYWxOYW1lUHRyKCksICZsZWdlbmRfZ2V0c2V0KTsKKyAgICAgICAgZ2V0
U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6bGkoKS5sb2NhbE5hbWVQdHIoKSwgJmxpX2dl
dHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmxpbmsoKS5s
b2NhbE5hbWVQdHIoKSwgJmxpbmtfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5z
ZXJ0KEhUTUxOYW1lczo6bWFwKCkubG9jYWxOYW1lUHRyKCksICZtYXBfZ2V0c2V0KTsKKyAgICAg
ICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6bWFycXVlZSgpLmxvY2FsTmFtZVB0
cigpLCAmbWFycXVlZV9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRN
TE5hbWVzOjptZW51KCkubG9jYWxOYW1lUHRyKCksICZtZW51X2dldHNldCk7CisgICAgICAgIGdl
dFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Om1ldGEoKS5sb2NhbE5hbWVQdHIoKSwgJm1l
dGFfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6b2Jq
ZWN0KCkubG9jYWxOYW1lUHRyKCksICZvYmplY3RfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5m
b0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6b2woKS5sb2NhbE5hbWVQdHIoKSwgJm9sX2dldHNldCk7
CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Om9wdGlvbigpLmxvY2Fs
TmFtZVB0cigpLCAmb3B0aW9uX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2Vy
dChIVE1MTmFtZXM6Om9wdGdyb3VwKCkubG9jYWxOYW1lUHRyKCksICZvcHRHcm91cF9nZXRzZXQp
OworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpwKCkubG9jYWxOYW1l
UHRyKCksICZwX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFt
ZXM6OnBhcmFtKCkubG9jYWxOYW1lUHRyKCksICZwYXJhbV9nZXRzZXQpOworICAgICAgICBnZXRT
ZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpwcmUoKS5sb2NhbE5hbWVQdHIoKSwgJnByZV9n
ZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpxKCkubG9j
YWxOYW1lUHRyKCksICZxX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChI
VE1MTmFtZXM6OnNjcmlwdCgpLmxvY2FsTmFtZVB0cigpLCAmc2NyaXB0X2dldHNldCk7CisgICAg
ICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OnNlbGVjdCgpLmxvY2FsTmFtZVB0
cigpLCAmc2VsZWN0X2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1M
TmFtZXM6OnN0eWxlKCkubG9jYWxOYW1lUHRyKCksICZzdHlsZV9nZXRzZXQpOworICAgICAgICBn
ZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjp0YWJsZSgpLmxvY2FsTmFtZVB0cigpLCAm
dGFibGVfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6
dGJvZHkoKS5sb2NhbE5hbWVQdHIoKSwgJnRhYmxlc2VjdGlvbl9nZXRzZXQpOworICAgICAgICBn
ZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjp0ZCgpLmxvY2FsTmFtZVB0cigpLCAmdGFi
bGVjZWxsX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6
OnRleHRhcmVhKCkubG9jYWxOYW1lUHRyKCksICZ0ZXh0QXJlYV9nZXRzZXQpOworICAgICAgICBn
ZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjp0aCgpLmxvY2FsTmFtZVB0cigpLCAmdGFi
bGVjZWxsX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6
OnRoZWFkKCkubG9jYWxOYW1lUHRyKCksICZ0YWJsZXNlY3Rpb25fZ2V0c2V0KTsKKyAgICAgICAg
Z2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6dGZvb3QoKS5sb2NhbE5hbWVQdHIoKSwg
JnRhYmxlc2VjdGlvbl9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRN
TE5hbWVzOjp0aXRsZSgpLmxvY2FsTmFtZVB0cigpLCAmdGl0bGVfZ2V0c2V0KTsKKyAgICAgICAg
Z2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6dHIoKS5sb2NhbE5hbWVQdHIoKSwgJnRy
X2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OnVsKCku
bG9jYWxOYW1lUHRyKCksICZ1bF9nZXRzZXQpOworICAgIH0KKyAgICAKKyAgICBIVE1MRWxlbWVu
dEltcGwqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwqPihpbXBsKCkpOwor
ICAgIGNvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvKiByZXN1bHQgPSBnZXRTZXRJbmZvRGlj
dC5maW5kKGVsZW1lbnQtPmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCkpOworICAgIGlmIChy
ZXN1bHQpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIDA7Cit9CisKIC8qCiBA
YmVnaW4gSFRNTEVsZW1lbnRUYWJsZSAxNAogICBpZAkJS0pTOjpIVE1MRWxlbWVudDo6RWxlbWVu
dElkCURvbnREZWxldGUKQEAgLTExODQsNyArMTI2OCw3IEBAIGNvbnN0IENsYXNzSW5mbyogS0pT
OjpIVE1MRWxlbWVudDo6Y2xhc3MKIEBlbmQKIAogQGJlZ2luIEhUTUxDYW52YXNFbGVtZW50VGFi
bGUgMQotICBnZXRDb250ZXh0ICAgICAgS0pTOjpIVE1MRWxlbWVudDo6R2V0Q29udGV4dCAgICAg
ICAgICAgICAgICAgIERvbnREZWxldGV8RnVuY3Rpb24gMAorICBnZXRDb250ZXh0ICAgICAgS0pT
OjpIVE1MRWxlbWVudDo6R2V0Q29udGV4dCAgICAgICAgICAgICAgICAgIERvbnREZWxldGV8RnVu
Y3Rpb24gMQogQGVuZAogKi8KIApAQCAtMTE5NSwzNSArMTI3OSwzMiBAQCBIVE1MRWxlbWVudDo6
SFRNTEVsZW1lbnQoRXhlY1N0YXRlICpleGVjCiAKIFZhbHVlIEtKUzo6SFRNTEVsZW1lbnQ6OnRy
eUdldChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSkgY29u
c3QKIHsKLSAgSFRNTEVsZW1lbnRJbXBsICZlbGVtZW50ID0gKnN0YXRpY19jYXN0PEhUTUxFbGVt
ZW50SW1wbCAqPihpbXBsKCkpOworICAgIEhUTUxFbGVtZW50SW1wbCAmZWxlbWVudCA9ICpzdGF0
aWNfY2FzdDxIVE1MRWxlbWVudEltcGwgKj4oaW1wbCgpKTsKICNpZmRlZiBLSlNfVkVSQk9TRQot
ICBrZERlYnVnKDYwNzApIDw8ICJLSlM6OkhUTUxFbGVtZW50Ojp0cnlHZXQgIiA8PCBwcm9wZXJ0
eU5hbWUucXN0cmluZygpIDw8ICIgdGhpc1RhZz0iIDw8IGVsZW1lbnQudGFnTmFtZSgpLnN0cmlu
ZygpIDw8IGVuZGw7CisgICAga2REZWJ1Zyg2MDcwKSA8PCAiS0pTOjpIVE1MRWxlbWVudDo6dHJ5
R2V0ICIgPDwgcHJvcGVydHlOYW1lLnFzdHJpbmcoKSA8PCAiIHRoaXNUYWc9IiA8PCBlbGVtZW50
LnRhZ05hbWUoKS5zdHJpbmcoKSA8PCBlbmRsOwogI2VuZGlmCi0gIC8vIEZpcnN0IGxvb2sgYXQg
ZHluYW1pYyBwcm9wZXJ0aWVzCi0gIHN3aXRjaCAoZWxlbWVudC5pZCgpKSB7Ci0gICAgY2FzZSBJ
RF9GT1JNOiB7Ci0gICAgICBIVE1MRm9ybUVsZW1lbnRJbXBsICZmb3JtID0gc3RhdGljX2Nhc3Q8
SFRNTEZvcm1FbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIC8vIENoZWNrIGlmIHdlJ3Jl
IHJldHJpZXZpbmcgYW4gZWxlbWVudCAoYnkgaW5kZXggb3IgYnkgbmFtZSkKLSAgICAgIGJvb2wg
b2s7Ci0gICAgICB1aW50IHUgPSBwcm9wZXJ0eU5hbWUudG9VTG9uZygmb2spOwotICAgICAgaWYg
KG9rKQotICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLCBmb3JtLmVsZW1lbnRzKCktPml0
ZW0odSkpOwotICAgICAgVmFsdWVJbXAgKm5hbWVkSXRlbXMgPSBIVE1MQ29sbGVjdGlvbihleGVj
LCBmb3JtLmVsZW1lbnRzKCkuZ2V0KCkpLmdldE5hbWVkSXRlbXMoZXhlYywgcHJvcGVydHlOYW1l
KTsKLSAgICAgIGlmICghbmFtZWRJdGVtcy0+aXNVbmRlZmluZWQoKSkKLSAgICAgICAgcmV0dXJu
IG5hbWVkSXRlbXM7Ci0gICAgfQotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9TRUxFQ1Q6IHsK
LSAgICAgIEhUTUxTZWxlY3RFbGVtZW50SW1wbCAmc2VsZWN0ID0gc3RhdGljX2Nhc3Q8SFRNTFNl
bGVjdEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgYm9vbCBvazsKLSAgICAgIHVpbnQg
dSA9IHByb3BlcnR5TmFtZS50b1VMb25nKCZvayk7Ci0gICAgICBpZiAob2spCi0gICAgICAgIHJl
dHVybiBnZXRET01Ob2RlKGV4ZWMsIHNlbGVjdC5vcHRpb25zSFRNTENvbGxlY3Rpb24oKS0+aXRl
bSh1KSk7IC8vIG5vdCBzcGVjaWZpZWQgYnkgRE9NKD8pIGJ1dCBzdXBwb3J0ZWQgaW4gbmV0c2Nh
cGUvSUUKKyAgICAvLyBGaXJzdCBsb29rIGF0IGR5bmFtaWMgcHJvcGVydGllcworICAgIGlmIChl
bGVtZW50Lmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmZvcm0oKSkpIHsKKyAgICAgICAgSFRNTEZv
cm1FbGVtZW50SW1wbCAmZm9ybSA9IHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudEltcGwgJj4o
ZWxlbWVudCk7CisgICAgICAgIC8vIENoZWNrIGlmIHdlJ3JlIHJldHJpZXZpbmcgYW4gZWxlbWVu
dCAoYnkgaW5kZXggb3IgYnkgbmFtZSkKKyAgICAgICAgYm9vbCBvazsKKyAgICAgICAgdWludCB1
ID0gcHJvcGVydHlOYW1lLnRvVUxvbmcoJm9rKTsKKyAgICAgICAgaWYgKG9rKQorICAgICAgICAg
ICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYywgZm9ybS5lbGVtZW50cygpLT5pdGVtKHUpKTsKKyAg
ICAgICAgVmFsdWVJbXAgKm5hbWVkSXRlbXMgPSBIVE1MQ29sbGVjdGlvbihleGVjLCBmb3JtLmVs
ZW1lbnRzKCkuZ2V0KCkpLmdldE5hbWVkSXRlbXMoZXhlYywgcHJvcGVydHlOYW1lKTsKKyAgICAg
ICAgaWYgKCFuYW1lZEl0ZW1zLT5pc1VuZGVmaW5lZCgpKQorICAgICAgICAgICAgcmV0dXJuIG5h
bWVkSXRlbXM7CisgICAgfQorICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFzTG9jYWxOYW1lKEhUTUxO
YW1lczo6c2VsZWN0KCkpKSB7CisgICAgICAgIEhUTUxTZWxlY3RFbGVtZW50SW1wbCAmc2VsZWN0
ID0gc3RhdGljX2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgICAg
ICBib29sIG9rOworICAgICAgICB1aW50IHUgPSBwcm9wZXJ0eU5hbWUudG9VTG9uZygmb2spOwor
ICAgICAgICBpZiAob2spCisgICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLCBzZWxl
Y3Qub3B0aW9uc0hUTUxDb2xsZWN0aW9uKCktPml0ZW0odSkpOyAvLyBub3Qgc3BlY2lmaWVkIGJ5
IERPTSg/KSBidXQgc3VwcG9ydGVkIGluIG5ldHNjYXBlL0lFCiAgICAgfQotICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBJRF9GUkFNRVNFVDogeworICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6ZnJhbWVzZXQoKSkpIHsKICAgICAgICAgTm9kZUltcGwgKmZyYW1lID0g
ZWxlbWVudC5jaGlsZHJlbigpLT5uYW1lZEl0ZW0ocHJvcGVydHlOYW1lLnN0cmluZygpKTsKLSAg
ICAgICAgaWYgKGZyYW1lICYmIGZyYW1lLT5pZCgpID09IElEX0ZSQU1FKSB7CisgICAgICAgIGlm
IChmcmFtZSAmJiBmcmFtZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZyYW1lKCkpKSB7CiAgICAg
ICAgICAgICBEb2N1bWVudEltcGwqIGRvYyA9IHN0YXRpY19jYXN0PEhUTUxGcmFtZUVsZW1lbnRJ
bXBsICo+KGZyYW1lKS0+Y29udGVudERvY3VtZW50KCk7CiAgICAgICAgICAgICBpZiAoZG9jKSB7
CiAgICAgICAgICAgICAgICAgS0hUTUxQYXJ0KiBwYXJ0ID0gZG9jLT5wYXJ0KCk7CkBAIC0xMjM2
LDczICsxMzE3LDU3IEBAIFZhbHVlIEtKUzo6SFRNTEVsZW1lbnQ6OnRyeUdldChFeGVjU3RhdGUK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBJRF9GUkFNRToKLSAgICBjYXNlIElEX0lGUkFNRTogeworICAgIGVsc2UgaWYgKGVsZW1lbnQu
aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6ZnJhbWUoKSkgfHwgZWxlbWVudC5oYXNMb2NhbE5hbWUo
SFRNTE5hbWVzOjppZnJhbWUoKSkpIHsKICAgICAgICAgRG9jdW1lbnRJbXBsKiBkb2MgPSBzdGF0
aWNfY2FzdDxIVE1MRnJhbWVFbGVtZW50SW1wbCAmPihlbGVtZW50KS5jb250ZW50RG9jdW1lbnQo
KTsKLSAgICAgICAgaWYgKCBkb2MgKSB7CisgICAgICAgIGlmIChkb2MpIHsKICAgICAgICAgICAg
IEtIVE1MUGFydCogcGFydCA9IGRvYy0+cGFydCgpOwotICAgICAgICAgICAgaWYgKCBwYXJ0ICkg
eworICAgICAgICAgICAgaWYgKHBhcnQpIHsKICAgICAgICAgICAgICAgV2luZG93ICp3aW5kb3cg
PSBXaW5kb3c6OnJldHJpZXZlV2luZG93KHBhcnQpOwogCSAgICAgIGlmICh3aW5kb3cgJiYgd2lu
ZG93LT5oYXNQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUpKQogICAgICAgICAgICAgICAgIHJl
dHVybiB3aW5kb3ctPmdldChleGVjLCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAgICAgfQotICAgICAgYnJlYWs7CiAjaWYgQVBQTEVfQ0hBTkdFUwotICAgIGNhc2Ug
SURfRU1CRUQ6Ci0gICAgY2FzZSBJRF9PQkpFQ1Q6Ci0gICAgY2FzZSBJRF9BUFBMRVQ6IHsKLQlp
ZiAocHJvcGVydHlOYW1lID09ICJfX2FwcGxlX3J1bnRpbWVfb2JqZWN0IikgeworICAgIGVsc2Ug
aWYgKGVsZW1lbnQuaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6ZW1iZWQoKSkgfHwgZWxlbWVudC5o
YXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvYmplY3QoKSkgfHwKKyAgICAgICAgICAgICBlbGVtZW50
Lmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmFwcGxldCgpKSkgeworCWlmIChwcm9wZXJ0eU5hbWUg
PT0gIl9fYXBwbGVfcnVudGltZV9vYmplY3QiKQogCSAgICByZXR1cm4gZ2V0UnVudGltZU9iamVj
dChleGVjLCZlbGVtZW50KTsKLQl9Ci0KIAlWYWx1ZSBydW50aW1lT2JqZWN0ID0gZ2V0UnVudGlt
ZU9iamVjdChleGVjLCZlbGVtZW50KTsKIAlpZiAoIXJ1bnRpbWVPYmplY3QuaXNOdWxsKCkpIHsK
IAkgICAgT2JqZWN0SW1wICppbXAgPSBzdGF0aWNfY2FzdDxPYmplY3RJbXAgKj4ocnVudGltZU9i
amVjdC5pbXAoKSk7Ci0JICAgIGlmIChpbXAtPmhhc1Byb3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFt
ZSkpIHsKKwkgICAgaWYgKGltcC0+aGFzUHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lKSkKIAkJ
cmV0dXJuIGltcC0+Z2V0IChleGVjLCBwcm9wZXJ0eU5hbWUpOwotCSAgICB9CiAJfQogICAgIH0K
LSAgICAgIGJyZWFrOwogI2VuZGlmCi0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQogCi0gIGNvbnN0IEhhc2hUYWJsZSogdGFibGUgPSBjbGFzc0luZm8oKS0+cHJvcEhhc2hUYWJs
ZTsgLy8gZ2V0IHRoZSByaWdodCBoYXNodGFibGUKLSAgY29uc3QgSGFzaEVudHJ5KiBlbnRyeSA9
IExvb2t1cDo6ZmluZEVudHJ5KHRhYmxlLCBwcm9wZXJ0eU5hbWUpOwotICBpZiAoZW50cnkpIHsK
LSAgICBpZiAoZW50cnktPmF0dHIgJiBGdW5jdGlvbikKLSAgICAgIHJldHVybiBsb29rdXBPckNy
ZWF0ZUZ1bmN0aW9uPEtKUzo6SFRNTEVsZW1lbnRGdW5jdGlvbj4oZXhlYywgcHJvcGVydHlOYW1l
LCB0aGlzLCBlbnRyeS0+dmFsdWUsIGVudHJ5LT5wYXJhbXMsIGVudHJ5LT5hdHRyKTsKLSAgICBy
ZXR1cm4gZ2V0VmFsdWVQcm9wZXJ0eShleGVjLCBlbnRyeS0+dmFsdWUpOwotICB9CisgICAgY29u
c3QgSGFzaFRhYmxlKiB0YWJsZSA9IGNsYXNzSW5mbygpLT5wcm9wSGFzaFRhYmxlOyAvLyBnZXQg
dGhlIHJpZ2h0IGhhc2h0YWJsZQorICAgIGNvbnN0IEhhc2hFbnRyeSogZW50cnkgPSBMb29rdXA6
OmZpbmRFbnRyeSh0YWJsZSwgcHJvcGVydHlOYW1lKTsKKyAgICBpZiAoZW50cnkpIHsKKyAgICAg
ICAgaWYgKGVudHJ5LT5hdHRyICYgRnVuY3Rpb24pCisgICAgICAgICAgICByZXR1cm4gbG9va3Vw
T3JDcmVhdGVGdW5jdGlvbjxLSlM6OkhUTUxFbGVtZW50RnVuY3Rpb24+KGV4ZWMsIHByb3BlcnR5
TmFtZSwgdGhpcywgZW50cnktPnZhbHVlLCBlbnRyeS0+cGFyYW1zLCBlbnRyeS0+YXR0cik7Cisg
ICAgICAgIHJldHVybiBnZXRWYWx1ZVByb3BlcnR5KGV4ZWMsIGVudHJ5LT52YWx1ZSk7CisgICAg
fQogCi0gIC8vIEJhc2UgSFRNTEVsZW1lbnQgc3R1ZmYgb3IgcGFyZW50IGNsYXNzIGZvcndhcmQs
IGFzIHVzdWFsCi0gIHJldHVybiBET01PYmplY3RMb29rdXBHZXQ8S0pTOjpIVE1MRWxlbWVudEZ1
bmN0aW9uLCBLSlM6OkhUTUxFbGVtZW50LCBET01FbGVtZW50PihleGVjLCBwcm9wZXJ0eU5hbWUs
ICZIVE1MRWxlbWVudFRhYmxlLCB0aGlzKTsKKyAgICAvLyBCYXNlIEhUTUxFbGVtZW50IHN0dWZm
IG9yIHBhcmVudCBjbGFzcyBmb3J3YXJkLCBhcyB1c3VhbAorICAgIHJldHVybiBET01PYmplY3RM
b29rdXBHZXQ8S0pTOjpIVE1MRWxlbWVudEZ1bmN0aW9uLCBLSlM6OkhUTUxFbGVtZW50LCBET01F
bGVtZW50PihleGVjLCBwcm9wZXJ0eU5hbWUsICZIVE1MRWxlbWVudFRhYmxlLCB0aGlzKTsKIH0K
IAogYm9vbCBLSlM6OkhUTUxFbGVtZW50OjppbXBsZW1lbnRzQ2FsbCgpIGNvbnN0CiB7CiAgICAg
SFRNTEVsZW1lbnRJbXBsICplbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+
KGltcGwoKSk7Ci0gICAgc3dpdGNoIChlbGVtZW50LT5pZCgpKSB7Ci0JY2FzZSBJRF9FTUJFRDoK
LQljYXNlIElEX09CSkVDVDoKLQljYXNlIElEX0FQUExFVDogewotCQlEb2N1bWVudEltcGwqIGRv
YyA9IGVsZW1lbnQtPmdldERvY3VtZW50KCk7Ci0JCUtKU1Byb3h5ICpwcm94eSA9IEtKU1Byb3h5
Ojpwcm94eShkb2MtPnBhcnQoKSk7Ci0JCUV4ZWNTdGF0ZSAqZXhlYyA9IHByb3h5LT5pbnRlcnBy
ZXRlcigpLT5nbG9iYWxFeGVjKCk7Ci0JCVZhbHVlIHJ1bnRpbWVPYmplY3QgPSBnZXRSdW50aW1l
T2JqZWN0KGV4ZWMsZWxlbWVudCk7Ci0JCWlmICghcnVudGltZU9iamVjdC5pc051bGwoKSkgewot
CQkgICAgT2JqZWN0SW1wICppbXAgPSBzdGF0aWNfY2FzdDxPYmplY3RJbXAgKj4ocnVudGltZU9i
amVjdC5pbXAoKSk7Ci0JCSAgICByZXR1cm4gaW1wLT5pbXBsZW1lbnRzQ2FsbCAoKTsKLQkJfQot
CSAgICB9Ci0JICAgIGJyZWFrOwotCWRlZmF1bHQ6Ci0JICAgIGJyZWFrOworICAgIGlmIChlbGVt
ZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZW1iZWQoKSkgfHwKKyAgICAgICAgZWxlbWVudC0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9iamVjdCgpKSB8fAorICAgICAgICBlbGVtZW50LT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6YXBwbGV0KCkpKSB7CisgICAJRG9jdW1lbnRJbXBsKiBkb2MgPSBl
bGVtZW50LT5nZXREb2N1bWVudCgpOworICAgICAgICBLSlNQcm94eSAqcHJveHkgPSBLSlNQcm94
eTo6cHJveHkoZG9jLT5wYXJ0KCkpOworICAgICAgICBFeGVjU3RhdGUgKmV4ZWMgPSBwcm94eS0+
aW50ZXJwcmV0ZXIoKS0+Z2xvYmFsRXhlYygpOworICAgICAgICBWYWx1ZSBydW50aW1lT2JqZWN0
ID0gZ2V0UnVudGltZU9iamVjdChleGVjLGVsZW1lbnQpOworICAgICAgICBpZiAoIXJ1bnRpbWVP
YmplY3QuaXNOdWxsKCkpIHsKKyAgICAgICAgICAgIE9iamVjdEltcCAqaW1wID0gc3RhdGljX2Nh
c3Q8T2JqZWN0SW1wICo+KHJ1bnRpbWVPYmplY3QuaW1wKCkpOworICAgICAgICAgICAgcmV0dXJu
IGltcC0+aW1wbGVtZW50c0NhbGwgKCk7CisgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIGZh
bHNlOwogfQpAQCAtMTMxMCw4MTkgKzEzNzUsOTA4IEBAIGJvb2wgS0pTOjpIVE1MRWxlbWVudDo6
aW1wbGVtZW50c0NhbGwoKSAKIFZhbHVlIEtKUzo6SFRNTEVsZW1lbnQ6OmNhbGwoRXhlY1N0YXRl
ICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QmYXJncykKIHsKICAgICBIVE1MRWxl
bWVudEltcGwgKmVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwgKj4oaW1wbCgp
KTsKLSAgICBzd2l0Y2ggKGVsZW1lbnQtPmlkKCkpIHsKLQljYXNlIElEX0VNQkVEOgotCWNhc2Ug
SURfT0JKRUNUOgotCWNhc2UgSURfQVBQTEVUOiB7Ci0JCVZhbHVlIHJ1bnRpbWVPYmplY3QgPSBn
ZXRSdW50aW1lT2JqZWN0KGV4ZWMsZWxlbWVudCk7Ci0JCWlmICghcnVudGltZU9iamVjdC5pc051
bGwoKSkgewotCQkgICAgT2JqZWN0SW1wICppbXAgPSBzdGF0aWNfY2FzdDxPYmplY3RJbXAgKj4o
cnVudGltZU9iamVjdC5pbXAoKSk7Ci0JCSAgICByZXR1cm4gaW1wLT5jYWxsIChleGVjLCB0aGlz
T2JqLCBhcmdzKTsKLQkJfQotCSAgICB9Ci0JICAgIGJyZWFrOwotCWRlZmF1bHQ6Ci0JICAgIGJy
ZWFrOworICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZW1iZWQoKSkgfHwK
KyAgICAgICAgZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9iamVjdCgpKSB8fAorICAg
ICAgICBlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YXBwbGV0KCkpKSB7CisgICAgICAg
IFZhbHVlIHJ1bnRpbWVPYmplY3QgPSBnZXRSdW50aW1lT2JqZWN0KGV4ZWMsZWxlbWVudCk7Cisg
ICAgICAgIGlmICghcnVudGltZU9iamVjdC5pc051bGwoKSkgeworICAgICAgICAgICAgT2JqZWN0
SW1wICppbXAgPSBzdGF0aWNfY2FzdDxPYmplY3RJbXAgKj4ocnVudGltZU9iamVjdC5pbXAoKSk7
CisgICAgICAgICAgICByZXR1cm4gaW1wLT5jYWxsIChleGVjLCB0aGlzT2JqLCBhcmdzKTsKKyAg
ICAgICAgfQogICAgIH0KICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBWYWx1
ZSBnZXRJbnB1dFNlbGVjdGlvblN0YXJ0KEhUTUxJbnB1dEVsZW1lbnRJbXBsICZpbnB1dCkKK1Zh
bHVlIEhUTUxFbGVtZW50OjpodG1sR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBj
b25zdAogewotICBpZiAoaW5wdXQuY2FuSGF2ZVNlbGVjdGlvbigpKSB7Ci0gICAgcmV0dXJuIE51
bWJlcihpbnB1dC5zZWxlY3Rpb25TdGFydCgpKTsKLSAgfQotICByZXR1cm4gVW5kZWZpbmVkKCk7
CisgICAgSFRNTEh0bWxFbGVtZW50SW1wbCYgaHRtbCA9ICpzdGF0aWNfY2FzdDxIVE1MSHRtbEVs
ZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBpZiAodG9rZW4gPT0gSHRtbFZlcnNpb24pCisgICAg
ICAgIHJldHVybiBTdHJpbmcoaHRtbC52ZXJzaW9uKCkpOworICAgIHJldHVybiBVbmRlZmluZWQo
KTsKIH0KIAotc3RhdGljIFZhbHVlIGdldElucHV0U2VsZWN0aW9uRW5kKEhUTUxJbnB1dEVsZW1l
bnRJbXBsICZpbnB1dCkKK1ZhbHVlIEhUTUxFbGVtZW50OjpoZWFkR2V0dGVyKEV4ZWNTdGF0ZSog
ZXhlYywgaW50IHRva2VuKSBjb25zdAogewotICBpZiAoaW5wdXQuY2FuSGF2ZVNlbGVjdGlvbigp
KSB7Ci0gICAgcmV0dXJuIE51bWJlcihpbnB1dC5zZWxlY3Rpb25FbmQoKSk7Ci0gIH0KLSAgcmV0
dXJuIFVuZGVmaW5lZCgpOworICAgIEhUTUxIZWFkRWxlbWVudEltcGwgJmhlYWQgPSAqc3RhdGlj
X2Nhc3Q8SFRNTEhlYWRFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IEhl
YWRQcm9maWxlKQorICAgICAgICByZXR1cm4gU3RyaW5nKGhlYWQucHJvZmlsZSgpKTsKKyAgICBy
ZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLVZhbHVlIEtKUzo6SFRNTEVsZW1lbnQ6OmdldFZhbHVl
UHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZSBIVE1MRWxl
bWVudDo6bGlua0dldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKLSAg
SFRNTEVsZW1lbnRJbXBsICZlbGVtZW50ID0gKnN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCAq
PihpbXBsKCkpOwotICBzd2l0Y2ggKGVsZW1lbnQuaWQoKSkgewotICBjYXNlIElEX0hUTUw6IHsK
LSAgICBIVE1MSHRtbEVsZW1lbnRJbXBsICZodG1sID0gc3RhdGljX2Nhc3Q8SFRNTEh0bWxFbGVt
ZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICBpZiAgICAgICh0b2tlbiA9PSBIdG1sVmVyc2lvbikg
ICAgICAgICByZXR1cm4gU3RyaW5nKGh0bWwudmVyc2lvbigpKTsKLSAgfQotICBicmVhazsKLSAg
Y2FzZSBJRF9IRUFEOiB7Ci0gICAgSFRNTEhlYWRFbGVtZW50SW1wbCAmaGVhZCA9IHN0YXRpY19j
YXN0PEhUTUxIZWFkRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgaWYgICAgICAodG9rZW4g
PT0gSGVhZFByb2ZpbGUpICAgICAgICAgcmV0dXJuIFN0cmluZyhoZWFkLnByb2ZpbGUoKSk7Ci0g
IH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfTElOSzogewotICAgIEhUTUxMaW5rRWxlbWVudEltcGwg
JmxpbmsgPSBzdGF0aWNfY2FzdDxIVE1MTGlua0VsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAg
IHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIExpbmtEaXNhYmxlZDogICAgICAgIHJldHVybiBC
b29sZWFuKGxpbmsuZGlzYWJsZWQoKSk7Ci0gICAgY2FzZSBMaW5rQ2hhcnNldDogICAgICAgICBy
ZXR1cm4gU3RyaW5nKGxpbmsuY2hhcnNldCgpKTsKLSAgICBjYXNlIExpbmtIcmVmOiAgICAgICAg
ICAgIHJldHVybiBTdHJpbmcobGluay5ocmVmKCkpOwotICAgIGNhc2UgTGlua0hyZWZMYW5nOiAg
ICAgICAgcmV0dXJuIFN0cmluZyhsaW5rLmhyZWZsYW5nKCkpOwotICAgIGNhc2UgTGlua01lZGlh
OiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhsaW5rLm1lZGlhKCkpOwotICAgIGNhc2UgTGlua1Jl
bDogICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhsaW5rLnJlbCgpKTsKLSAgICBjYXNlIExpbmtS
ZXY6ICAgICAgICAgICAgIHJldHVybiBTdHJpbmcobGluay5yZXYoKSk7Ci0gICAgY2FzZSBMaW5r
VGFyZ2V0OiAgICAgICAgICByZXR1cm4gU3RyaW5nKGxpbmsudGFyZ2V0KCkpOwotICAgIGNhc2Ug
TGlua1R5cGU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhsaW5rLnR5cGUoKSk7Ci0gICAgY2Fz
ZSBMaW5rU2hlZXQ6ICAgICAgICAgICByZXR1cm4gZ2V0RE9NU3R5bGVTaGVldChleGVjLCBsaW5r
LnNoZWV0KCkpOwotICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9USVRMRTogewotICAg
IEhUTUxUaXRsZUVsZW1lbnRJbXBsICZ0aXRsZSA9IHN0YXRpY19jYXN0PEhUTUxUaXRsZUVsZW1l
bnRJbXBsICY+KGVsZW1lbnQpOworICAgIEhUTUxMaW5rRWxlbWVudEltcGwgJmxpbmsgPSAqc3Rh
dGljX2Nhc3Q8SFRNTExpbmtFbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tl
bikgewotICAgIGNhc2UgVGl0bGVUZXh0OiAgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0
aXRsZS50ZXh0KCkpOwotICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9NRVRBOiB7Ci0g
ICAgSFRNTE1ldGFFbGVtZW50SW1wbCAmbWV0YSA9IHN0YXRpY19jYXN0PEhUTUxNZXRhRWxlbWVu
dEltcGwgJj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgTWV0YUNv
bnRlbnQ6ICAgICAgICAgcmV0dXJuIFN0cmluZyhtZXRhLmNvbnRlbnQoKSk7Ci0gICAgY2FzZSBN
ZXRhSHR0cEVxdWl2OiAgICAgICByZXR1cm4gU3RyaW5nKG1ldGEuaHR0cEVxdWl2KCkpOwotICAg
IGNhc2UgTWV0YU5hbWU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhtZXRhLm5hbWUoKSk7Ci0g
ICAgY2FzZSBNZXRhU2NoZW1lOiAgICAgICAgICByZXR1cm4gU3RyaW5nKG1ldGEuc2NoZW1lKCkp
OworICAgICAgICBjYXNlIExpbmtEaXNhYmxlZDoKKyAgICAgICAgICAgIHJldHVybiBCb29sZWFu
KGxpbmsuZGlzYWJsZWQoKSk7CisgICAgICAgIGNhc2UgTGlua0NoYXJzZXQ6CisgICAgICAgICAg
ICByZXR1cm4gU3RyaW5nKGxpbmsuY2hhcnNldCgpKTsKKyAgICAgICAgY2FzZSBMaW5rSHJlZjoK
KyAgICAgICAgICAgIHJldHVybiBTdHJpbmcobGluay5ocmVmKCkpOworICAgICAgICBjYXNlIExp
bmtIcmVmTGFuZzoKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcobGluay5ocmVmbGFuZygpKTsK
KyAgICAgICAgY2FzZSBMaW5rTWVkaWE6ICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiBT
dHJpbmcobGluay5tZWRpYSgpKTsKKyAgICAgICAgY2FzZSBMaW5rUmVsOiAgICAgICAgICAgICAK
KyAgICAgICAgICAgIHJldHVybiBTdHJpbmcobGluay5yZWwoKSk7CisgICAgICAgIGNhc2UgTGlu
a1JldjogICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcobGluay5yZXYoKSk7
CisgICAgICAgIGNhc2UgTGlua1RhcmdldDogICAgICAgICAgCisgICAgICAgICAgICByZXR1cm4g
U3RyaW5nKGxpbmsudGFyZ2V0KCkpOworICAgICAgICBjYXNlIExpbmtUeXBlOiAgICAgICAgICAg
IAorICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhsaW5rLnR5cGUoKSk7CisgICAgICAgIGNhc2Ug
TGlua1NoZWV0OiAgICAgICAgICAgCisgICAgICAgICAgICByZXR1cm4gZ2V0RE9NU3R5bGVTaGVl
dChleGVjLCBsaW5rLnNoZWV0KCkpOwogICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9C
QVNFOiB7Ci0gICAgSFRNTEJhc2VFbGVtZW50SW1wbCAmYmFzZSA9IHN0YXRpY19jYXN0PEhUTUxC
YXNlRWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQor
CitWYWx1ZSBIVE1MRWxlbWVudDo6dGl0bGVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0Cit7CisgICAgSFRNTFRpdGxlRWxlbWVudEltcGwmIHRpdGxlID0gKnN0YXRpY19j
YXN0PEhUTUxUaXRsZUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBpZiAodG9rZW4gPT0gVGl0
bGVUZXh0KQorICAgICAgICByZXR1cm4gU3RyaW5nKHRpdGxlLnRleHQoKSk7CisgICAgcmV0dXJu
IFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6bWV0YUdldHRlcihFeGVjU3Rh
dGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MTWV0YUVsZW1lbnRJbXBsJiBt
ZXRhID0gKnN0YXRpY19jYXN0PEhUTUxNZXRhRWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIHN3
aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIEJhc2VIcmVmOiAgICAgICAgICAgIHJldHVybiBTdHJp
bmcoYmFzZS5ocmVmKCkpOwotICAgIGNhc2UgQmFzZVRhcmdldDogICAgICAgICAgcmV0dXJuIFN0
cmluZyhiYXNlLnRhcmdldCgpKTsKKyAgICAgICAgY2FzZSBNZXRhQ29udGVudDogICAgICAgICBy
ZXR1cm4gU3RyaW5nKG1ldGEuY29udGVudCgpKTsKKyAgICAgICAgY2FzZSBNZXRhSHR0cEVxdWl2
OiAgICAgICByZXR1cm4gU3RyaW5nKG1ldGEuaHR0cEVxdWl2KCkpOworICAgICAgICBjYXNlIE1l
dGFOYW1lOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcobWV0YS5uYW1lKCkpOworICAgICAgICBj
YXNlIE1ldGFTY2hlbWU6ICAgICAgICAgIHJldHVybiBTdHJpbmcobWV0YS5zY2hlbWUoKSk7CiAg
ICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX0lTSU5ERVg6IHsKLSAgICBIVE1MSXNJbmRl
eEVsZW1lbnRJbXBsICZpc2luZGV4ID0gc3RhdGljX2Nhc3Q8SFRNTElzSW5kZXhFbGVtZW50SW1w
bCAmPihlbGVtZW50KTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxF
bGVtZW50OjpiYXNlR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAorewor
ICAgIEhUTUxCYXNlRWxlbWVudEltcGwmIGJhc2UgPSAqc3RhdGljX2Nhc3Q8SFRNTEJhc2VFbGVt
ZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgSXNJbmRl
eEZvcm06ICAgICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYywgaXNpbmRleC5mb3JtKCkp
OyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVudAotICAgIGNhc2UgSXNJbmRleFByb21wdDogICAgICAg
ICAgcmV0dXJuIFN0cmluZyhpc2luZGV4LnByb21wdCgpKTsKLSAgICB9Ci0gIH0KLSAgYnJlYWs7
Ci0gIGNhc2UgSURfU1RZTEU6IHsKLSAgICBIVE1MU3R5bGVFbGVtZW50SW1wbCAmc3R5bGUgPSBz
dGF0aWNfY2FzdDxIVE1MU3R5bGVFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICBzd2l0Y2gg
KHRva2VuKSB7Ci0gICAgY2FzZSBTdHlsZURpc2FibGVkOiAgICAgICAgcmV0dXJuIEJvb2xlYW4o
c3R5bGUuZGlzYWJsZWQoKSk7Ci0gICAgY2FzZSBTdHlsZU1lZGlhOiAgICAgICAgICAgcmV0dXJu
IFN0cmluZyhzdHlsZS5tZWRpYSgpKTsKLSAgICBjYXNlIFN0eWxlVHlwZTogICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKHN0eWxlLnR5cGUoKSk7Ci0gICAgY2FzZSBTdHlsZVNoZWV0OiAgICAgICAg
ICAgcmV0dXJuIGdldERPTVN0eWxlU2hlZXQoZXhlYywgc3R5bGUuc2hlZXQoKSk7Ci0gICAgfQot
ICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX0JPRFk6IHsKLSAgICBIVE1MQm9keUVsZW1lbnRJbXBs
ICZib2R5ID0gc3RhdGljX2Nhc3Q8SFRNTEJvZHlFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAg
ICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBCb2R5QUxpbms6ICAgICAgICAgICByZXR1cm4g
U3RyaW5nKGJvZHkuYUxpbmsoKSk7Ci0gICAgY2FzZSBCb2R5QmFja2dyb3VuZDogICAgICByZXR1
cm4gU3RyaW5nKGJvZHkuYmFja2dyb3VuZCgpKTsKLSAgICBjYXNlIEJvZHlCZ0NvbG9yOiAgICAg
ICAgIHJldHVybiBTdHJpbmcoYm9keS5iZ0NvbG9yKCkpOwotICAgIGNhc2UgQm9keUxpbms6ICAg
ICAgICAgICAgcmV0dXJuIFN0cmluZyhib2R5LmxpbmsoKSk7Ci0gICAgY2FzZSBCb2R5VGV4dDog
ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGJvZHkudGV4dCgpKTsKLSAgICBjYXNlIEJvZHlWTGlu
azogICAgICAgICAgIHJldHVybiBTdHJpbmcoYm9keS52TGluaygpKTsKLSAgICBkZWZhdWx0Ogot
ICAgICAgLy8gVXBkYXRlIHRoZSBkb2N1bWVudCdzIGxheW91dCBiZWZvcmUgd2UgY29tcHV0ZSB0
aGVzZSBhdHRyaWJ1dGVzLgotICAgICAgRG9jdW1lbnRJbXBsICpkb2MgPSBib2R5LmdldERvY3Vt
ZW50KCk7Ci0gICAgICBpZiAoZG9jKQotICAgICAgICBkb2MtPnVwZGF0ZUxheW91dElnbm9yZVBl
bmRpbmdTdHlsZXNoZWV0cygpOwotICAgICAgS0hUTUxWaWV3ICp2aWV3ID0gZG9jID8gZG9jLT52
aWV3KCkgOiAwOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgICBjYXNlIEJvZHlTY3Jv
bGxMZWZ0OgotICAgICAgICAgICAgcmV0dXJuIE51bWJlcih2aWV3ID8gdmlldy0+Y29udGVudHNY
KCkgOiAwKTsKLSAgICAgICAgY2FzZSBCb2R5U2Nyb2xsVG9wOgotICAgICAgICAgICAgcmV0dXJu
IE51bWJlcih2aWV3ID8gdmlldy0+Y29udGVudHNZKCkgOiAwKTsKLSAgICAgICAgY2FzZSBCb2R5
U2Nyb2xsSGVpZ2h0OiAgIHJldHVybiBOdW1iZXIodmlldyA/IHZpZXctPmNvbnRlbnRzSGVpZ2h0
KCkgOiAwKTsKLSAgICAgICAgY2FzZSBCb2R5U2Nyb2xsV2lkdGg6ICAgIHJldHVybiBOdW1iZXIo
dmlldyA/IHZpZXctPmNvbnRlbnRzV2lkdGgoKSA6IDApOwotICAgICAgfQorICAgICAgICBjYXNl
IEJhc2VIcmVmOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYmFzZS5ocmVmKCkpOworICAgICAg
ICBjYXNlIEJhc2VUYXJnZXQ6ICAgICAgICAgIHJldHVybiBTdHJpbmcoYmFzZS50YXJnZXQoKSk7
CiAgICAgfQotICB9Ci0gIGJyZWFrOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KIAotICBj
YXNlIElEX0ZPUk06IHsKLSAgICBIVE1MRm9ybUVsZW1lbnRJbXBsICZmb3JtID0gc3RhdGljX2Nh
c3Q8SFRNTEZvcm1FbGVtZW50SW1wbCAmPihlbGVtZW50KTsKK1ZhbHVlIEhUTUxFbGVtZW50Ojpp
c0luZGV4R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAgIEhU
TUxJc0luZGV4RWxlbWVudEltcGwmIGlzaW5kZXggPSAqc3RhdGljX2Nhc3Q8SFRNTElzSW5kZXhF
bGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgRm9y
bUVsZW1lbnRzOiAgICAgICAgcmV0dXJuIGdldEhUTUxDb2xsZWN0aW9uKGV4ZWMsIGZvcm0uZWxl
bWVudHMoKS5nZXQoKSk7Ci0gICAgY2FzZSBGb3JtTGVuZ3RoOiAgICAgICAgICByZXR1cm4gTnVt
YmVyKGZvcm0ubGVuZ3RoKCkpOwotICAgIGNhc2UgRm9ybU5hbWU6ICAgICAgICAgICAgcmV0dXJu
IFN0cmluZyhmb3JtLm5hbWUoKSk7Ci0gICAgY2FzZSBGb3JtQWNjZXB0Q2hhcnNldDogICByZXR1
cm4gU3RyaW5nKGZvcm0uYWNjZXB0Q2hhcnNldCgpKTsKLSAgICBjYXNlIEZvcm1BY3Rpb246ICAg
ICAgICAgIHJldHVybiBTdHJpbmcoZm9ybS5hY3Rpb24oKSk7Ci0gICAgY2FzZSBGb3JtRW5jVHlw
ZTogICAgICAgICByZXR1cm4gU3RyaW5nKGZvcm0uZW5jdHlwZSgpKTsKLSAgICBjYXNlIEZvcm1N
ZXRob2Q6ICAgICAgICAgIHJldHVybiBTdHJpbmcoZm9ybS5tZXRob2QoKSk7Ci0gICAgY2FzZSBG
b3JtVGFyZ2V0OiAgICAgICAgICByZXR1cm4gU3RyaW5nKGZvcm0udGFyZ2V0KCkpOwotICAgIH0K
LSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9TRUxFQ1Q6IHsKLSAgICBIVE1MU2VsZWN0RWxlbWVu
dEltcGwgJnNlbGVjdCA9IHN0YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50SW1wbCAmPihlbGVt
ZW50KTsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBTZWxlY3RUeXBlOiAgICAgICAg
ICAgIHJldHVybiBTdHJpbmcoc2VsZWN0LnR5cGUoKSk7Ci0gICAgY2FzZSBTZWxlY3RTZWxlY3Rl
ZEluZGV4OiAgIHJldHVybiBOdW1iZXIoc2VsZWN0LnNlbGVjdGVkSW5kZXgoKSk7Ci0gICAgY2Fz
ZSBTZWxlY3RWYWx1ZTogICAgICAgICAgIHJldHVybiBTdHJpbmcoc2VsZWN0LnZhbHVlKCkpOwot
ICAgIGNhc2UgU2VsZWN0TGVuZ3RoOiAgICAgICAgICByZXR1cm4gTnVtYmVyKHNlbGVjdC5sZW5n
dGgoKSk7Ci0gICAgY2FzZSBTZWxlY3RGb3JtOiAgICAgICAgICAgIHJldHVybiBnZXRET01Ob2Rl
KGV4ZWMsIHNlbGVjdC5mb3JtKCkpOyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVudAotICAgIGNhc2Ug
U2VsZWN0T3B0aW9uczogICAgICAgICByZXR1cm4gZ2V0U2VsZWN0SFRNTENvbGxlY3Rpb24oZXhl
Yywgc2VsZWN0Lm9wdGlvbnNIVE1MQ29sbGVjdGlvbigpLmdldCgpLCAmc2VsZWN0KTsgLy8gdHlw
ZSBIVE1MQ29sbGVjdGlvbgotICAgIGNhc2UgU2VsZWN0RGlzYWJsZWQ6ICAgICAgICByZXR1cm4g
Qm9vbGVhbihzZWxlY3QuZGlzYWJsZWQoKSk7Ci0gICAgY2FzZSBTZWxlY3RNdWx0aXBsZTogICAg
ICAgIHJldHVybiBCb29sZWFuKHNlbGVjdC5tdWx0aXBsZSgpKTsKLSAgICBjYXNlIFNlbGVjdE5h
bWU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhzZWxlY3QubmFtZSgpKTsKLSAgICBjYXNlIFNl
bGVjdFNpemU6ICAgICAgICAgICAgcmV0dXJuIE51bWJlcihzZWxlY3Quc2l6ZSgpKTsKLSAgICBj
YXNlIFNlbGVjdFRhYkluZGV4OiAgICAgICAgcmV0dXJuIE51bWJlcihzZWxlY3QudGFiSW5kZXgo
KSk7CisgICAgICAgIGNhc2UgSXNJbmRleEZvcm06ICAgICAgICAgICAgcmV0dXJuIGdldERPTU5v
ZGUoZXhlYywgaXNpbmRleC5mb3JtKCkpOyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVudAorICAgICAg
ICBjYXNlIElzSW5kZXhQcm9tcHQ6ICAgICAgICAgIHJldHVybiBTdHJpbmcoaXNpbmRleC5wcm9t
cHQoKSk7CiAgICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX09QVEdST1VQOiB7Ci0gICAg
SFRNTE9wdEdyb3VwRWxlbWVudEltcGwgJm9wdGdyb3VwID0gc3RhdGljX2Nhc3Q8SFRNTE9wdEdy
b3VwRWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQor
CitWYWx1ZSBIVE1MRWxlbWVudDo6c3R5bGVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0Cit7CisgICAgSFRNTFN0eWxlRWxlbWVudEltcGwmIHN0eWxlID0gKnN0YXRpY19j
YXN0PEhUTUxTdHlsZUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7
Ci0gICAgY2FzZSBPcHRHcm91cERpc2FibGVkOiAgICAgICAgcmV0dXJuIEJvb2xlYW4ob3B0Z3Jv
dXAuZGlzYWJsZWQoKSk7Ci0gICAgY2FzZSBPcHRHcm91cExhYmVsOiAgICAgICAgICAgcmV0dXJu
IFN0cmluZyhvcHRncm91cC5sYWJlbCgpKTsKLSAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2Ug
SURfT1BUSU9OOiB7Ci0gICAgSFRNTE9wdGlvbkVsZW1lbnRJbXBsICZvcHRpb24gPSBzdGF0aWNf
Y2FzdDxIVE1MT3B0aW9uRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tl
bikgewotICAgIGNhc2UgT3B0aW9uRm9ybTogICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShl
eGVjLG9wdGlvbi5mb3JtKCkpOyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVudAotICAgIGNhc2UgT3B0
aW9uRGVmYXVsdFNlbGVjdGVkOiByZXR1cm4gQm9vbGVhbihvcHRpb24uZGVmYXVsdFNlbGVjdGVk
KCkpOwotICAgIGNhc2UgT3B0aW9uVGV4dDogICAgICAgICAgICByZXR1cm4gU3RyaW5nKG9wdGlv
bi50ZXh0KCkpOwotICAgIGNhc2UgT3B0aW9uSW5kZXg6ICAgICAgICAgICByZXR1cm4gTnVtYmVy
KG9wdGlvbi5pbmRleCgpKTsKLSAgICBjYXNlIE9wdGlvbkRpc2FibGVkOiAgICAgICAgcmV0dXJu
IEJvb2xlYW4ob3B0aW9uLmRpc2FibGVkKCkpOwotICAgIGNhc2UgT3B0aW9uTGFiZWw6ICAgICAg
ICAgICByZXR1cm4gU3RyaW5nKG9wdGlvbi5sYWJlbCgpKTsKLSAgICBjYXNlIE9wdGlvblNlbGVj
dGVkOiAgICAgICAgcmV0dXJuIEJvb2xlYW4ob3B0aW9uLnNlbGVjdGVkKCkpOwotICAgIGNhc2Ug
T3B0aW9uVmFsdWU6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKG9wdGlvbi52YWx1ZSgpKTsKLSAg
ICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfSU5QVVQ6IHsKLSAgICBIVE1MSW5wdXRFbGVt
ZW50SW1wbCAmaW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50SW1wbCAmPihlbGVt
ZW50KTsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBJbnB1dERlZmF1bHRWYWx1ZTog
ICAgcmV0dXJuIFN0cmluZyhpbnB1dC5kZWZhdWx0VmFsdWUoKSk7Ci0gICAgY2FzZSBJbnB1dERl
ZmF1bHRDaGVja2VkOiAgcmV0dXJuIEJvb2xlYW4oaW5wdXQuZGVmYXVsdENoZWNrZWQoKSk7Ci0g
ICAgY2FzZSBJbnB1dEZvcm06ICAgICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyxpbnB1
dC5mb3JtKCkpOyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVudAotICAgIGNhc2UgSW5wdXRBY2NlcHQ6
ICAgICAgICAgIHJldHVybiBTdHJpbmcoaW5wdXQuYWNjZXB0KCkpOwotICAgIGNhc2UgSW5wdXRB
Y2Nlc3NLZXk6ICAgICAgIHJldHVybiBTdHJpbmcoaW5wdXQuYWNjZXNzS2V5KCkpOwotICAgIGNh
c2UgSW5wdXRBbGlnbjogICAgICAgICAgIHJldHVybiBTdHJpbmcoaW5wdXQuYWxpZ24oKSk7Ci0g
ICAgY2FzZSBJbnB1dEFsdDogICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpbnB1dC5hbHQoKSk7
Ci0gICAgY2FzZSBJbnB1dENoZWNrZWQ6ICAgICAgICAgcmV0dXJuIEJvb2xlYW4oaW5wdXQuY2hl
Y2tlZCgpKTsKLSAgICBjYXNlIElucHV0RGlzYWJsZWQ6ICAgICAgICByZXR1cm4gQm9vbGVhbihp
bnB1dC5kaXNhYmxlZCgpKTsKLSAgICBjYXNlIElucHV0TWF4TGVuZ3RoOiAgICAgICByZXR1cm4g
TnVtYmVyKGlucHV0Lm1heExlbmd0aCgpKTsKLSAgICBjYXNlIElucHV0TmFtZTogICAgICAgICAg
ICByZXR1cm4gU3RyaW5nKGlucHV0Lm5hbWUoKSk7Ci0gICAgY2FzZSBJbnB1dFJlYWRPbmx5OiAg
ICAgICAgcmV0dXJuIEJvb2xlYW4oaW5wdXQucmVhZE9ubHkoKSk7Ci0gICAgY2FzZSBJbnB1dFNl
bGVjdGlvblN0YXJ0OiAgcmV0dXJuIGdldElucHV0U2VsZWN0aW9uU3RhcnQoaW5wdXQpOwotICAg
IGNhc2UgSW5wdXRTZWxlY3Rpb25FbmQ6ICAgIHJldHVybiBnZXRJbnB1dFNlbGVjdGlvbkVuZChp
bnB1dCk7Ci0gICAgY2FzZSBJbnB1dFNpemU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpbnB1
dC5zaXplRE9NKCkpOwotICAgIGNhc2UgSW5wdXRTcmM6ICAgICAgICAgICAgIHJldHVybiBTdHJp
bmcoaW5wdXQuc3JjKCkpOwotICAgIGNhc2UgSW5wdXRUYWJJbmRleDogICAgICAgIHJldHVybiBO
dW1iZXIoaW5wdXQudGFiSW5kZXgoKSk7Ci0gICAgY2FzZSBJbnB1dFR5cGU6ICAgICAgICAgICAg
cmV0dXJuIFN0cmluZyhpbnB1dC50eXBlKCkpOwotICAgIGNhc2UgSW5wdXRVc2VNYXA6ICAgICAg
ICAgIHJldHVybiBTdHJpbmcoaW5wdXQudXNlTWFwKCkpOwotICAgIGNhc2UgSW5wdXRWYWx1ZTog
ICAgICAgICAgIHJldHVybiBTdHJpbmcoaW5wdXQudmFsdWUoKSk7CisgICAgICAgIGNhc2UgU3R5
bGVEaXNhYmxlZDogICAgICAgIHJldHVybiBCb29sZWFuKHN0eWxlLmRpc2FibGVkKCkpOworICAg
ICAgICBjYXNlIFN0eWxlTWVkaWE6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHN0eWxlLm1lZGlh
KCkpOworICAgICAgICBjYXNlIFN0eWxlVHlwZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKHN0
eWxlLnR5cGUoKSk7CisgICAgICAgIGNhc2UgU3R5bGVTaGVldDogICAgICAgICAgIHJldHVybiBn
ZXRET01TdHlsZVNoZWV0KGV4ZWMsIHN0eWxlLnNoZWV0KCkpOwogICAgIH0KLSAgfQotICBicmVh
azsKLSAgY2FzZSBJRF9URVhUQVJFQTogewotICAgIEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBsICZ0
ZXh0YXJlYSA9IHN0YXRpY19jYXN0PEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBsICY+KGVsZW1lbnQp
OwotICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIFRleHRBcmVhRGVmYXVsdFZhbHVlOiAg
ICByZXR1cm4gU3RyaW5nKHRleHRhcmVhLmRlZmF1bHRWYWx1ZSgpKTsKLSAgICBjYXNlIFRleHRB
cmVhRm9ybTogICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLHRleHRhcmVhLmZvcm0o
KSk7IC8vIHR5cGUgSFRNTEZvcm1FbGVtZW50Ci0gICAgY2FzZSBUZXh0QXJlYUFjY2Vzc0tleTog
ICAgICAgcmV0dXJuIFN0cmluZyh0ZXh0YXJlYS5hY2Nlc3NLZXkoKSk7Ci0gICAgY2FzZSBUZXh0
QXJlYUNvbHM6ICAgICAgICAgICAgcmV0dXJuIE51bWJlcih0ZXh0YXJlYS5jb2xzKCkpOwotICAg
IGNhc2UgVGV4dEFyZWFEaXNhYmxlZDogICAgICAgIHJldHVybiBCb29sZWFuKHRleHRhcmVhLmRp
c2FibGVkKCkpOwotICAgIGNhc2UgVGV4dEFyZWFOYW1lOiAgICAgICAgICAgIHJldHVybiBTdHJp
bmcodGV4dGFyZWEubmFtZSgpKTsKLSAgICBjYXNlIFRleHRBcmVhUmVhZE9ubHk6ICAgICAgICBy
ZXR1cm4gQm9vbGVhbih0ZXh0YXJlYS5yZWFkT25seSgpKTsKLSAgICBjYXNlIFRleHRBcmVhUm93
czogICAgICAgICAgICByZXR1cm4gTnVtYmVyKHRleHRhcmVhLnJvd3MoKSk7Ci0gICAgY2FzZSBU
ZXh0QXJlYVNlbGVjdGlvblN0YXJ0OiAgcmV0dXJuIE51bWJlcih0ZXh0YXJlYS5zZWxlY3Rpb25T
dGFydCgpKTsKLSAgICBjYXNlIFRleHRBcmVhU2VsZWN0aW9uRW5kOiAgICByZXR1cm4gTnVtYmVy
KHRleHRhcmVhLnNlbGVjdGlvbkVuZCgpKTsKLSAgICBjYXNlIFRleHRBcmVhVGFiSW5kZXg6ICAg
ICAgICByZXR1cm4gTnVtYmVyKHRleHRhcmVhLnRhYkluZGV4KCkpOwotICAgIGNhc2UgVGV4dEFy
ZWFUeXBlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcodGV4dGFyZWEudHlwZSgpKTsKLSAgICBj
YXNlIFRleHRBcmVhVmFsdWU6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRleHRhcmVhLnZhbHVl
KCkpOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OmJv
ZHlHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTEJv
ZHlFbGVtZW50SW1wbCYgYm9keSA9ICpzdGF0aWNfY2FzdDxIVE1MQm9keUVsZW1lbnRJbXBsKj4o
aW1wbCgpKTsKKwlzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgQm9keUFMaW5rOiAgICAg
ICAgICAgcmV0dXJuIFN0cmluZyhib2R5LmFMaW5rKCkpOworICAgICAgICBjYXNlIEJvZHlCYWNr
Z3JvdW5kOiAgICAgIHJldHVybiBTdHJpbmcoYm9keS5iYWNrZ3JvdW5kKCkpOworICAgICAgICBj
YXNlIEJvZHlCZ0NvbG9yOiAgICAgICAgIHJldHVybiBTdHJpbmcoYm9keS5iZ0NvbG9yKCkpOwor
ICAgICAgICBjYXNlIEJvZHlMaW5rOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYm9keS5saW5r
KCkpOworICAgICAgICBjYXNlIEJvZHlUZXh0OiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYm9k
eS50ZXh0KCkpOworICAgICAgICBjYXNlIEJvZHlWTGluazogICAgICAgICAgIHJldHVybiBTdHJp
bmcoYm9keS52TGluaygpKTsKKyAgICAgICAgZGVmYXVsdDogeworICAgICAgICAgICAgLy8gVXBk
YXRlIHRoZSBkb2N1bWVudCdzIGxheW91dCBiZWZvcmUgd2UgY29tcHV0ZSB0aGVzZSBhdHRyaWJ1
dGVzLgorICAgICAgICAgICAgRG9jdW1lbnRJbXBsICpkb2MgPSBib2R5LmdldERvY3VtZW50KCk7
CisgICAgICAgICAgICBpZiAoZG9jKQorICAgICAgICAgICAgICAgIGRvYy0+dXBkYXRlTGF5b3V0
SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CisgICAgICAgICAgICBLSFRNTFZpZXcgKnZpZXcg
PSBkb2MgPyBkb2MtPnZpZXcoKSA6IDA7CisgICAgICAgICAgICBzd2l0Y2ggKHRva2VuKSB7Cisg
ICAgICAgICAgICAgICAgY2FzZSBCb2R5U2Nyb2xsTGVmdDoKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIE51bWJlcih2aWV3ID8gdmlldy0+Y29udGVudHNYKCkgOiAwKTsKKyAgICAgICAgICAg
ICAgICBjYXNlIEJvZHlTY3JvbGxUb3A6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOdW1i
ZXIodmlldyA/IHZpZXctPmNvbnRlbnRzWSgpIDogMCk7CisgICAgICAgICAgICAgICAgY2FzZSBC
b2R5U2Nyb2xsSGVpZ2h0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTnVtYmVyKHZpZXcg
PyB2aWV3LT5jb250ZW50c0hlaWdodCgpIDogMCk7CisgICAgICAgICAgICAgICAgY2FzZSBCb2R5
U2Nyb2xsV2lkdGg6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOdW1iZXIodmlldyA/IHZp
ZXctPmNvbnRlbnRzV2lkdGgoKSA6IDApOworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAg
fQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX0JVVFRPTjogewotICAgIEhUTUxCdXR0b25FbGVt
ZW50SW1wbCAmYnV0dG9uID0gc3RhdGljX2Nhc3Q8SFRNTEJ1dHRvbkVsZW1lbnRJbXBsICY+KGVs
ZW1lbnQpOwotICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIEJ1dHRvbkZvcm06ICAgICAg
ICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyxidXR0b24uZm9ybSgpKTsgLy8gdHlwZSBIVE1M
Rm9ybUVsZW1lbnQKLSAgICBjYXNlIEJ1dHRvbkFjY2Vzc0tleTogICAgICAgcmV0dXJuIFN0cmlu
ZyhidXR0b24uYWNjZXNzS2V5KCkpOwotICAgIGNhc2UgQnV0dG9uRGlzYWJsZWQ6ICAgICAgICBy
ZXR1cm4gQm9vbGVhbihidXR0b24uZGlzYWJsZWQoKSk7Ci0gICAgY2FzZSBCdXR0b25OYW1lOiAg
ICAgICAgICAgIHJldHVybiBTdHJpbmcoYnV0dG9uLm5hbWUoKSk7Ci0gICAgY2FzZSBCdXR0b25U
YWJJbmRleDogICAgICAgIHJldHVybiBOdW1iZXIoYnV0dG9uLnRhYkluZGV4KCkpOwotICAgIGNh
c2UgQnV0dG9uVHlwZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGJ1dHRvbi50eXBlKCkpOwot
ICAgIGNhc2UgQnV0dG9uVmFsdWU6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGJ1dHRvbi52YWx1
ZSgpKTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50Ojpm
b3JtR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxG
b3JtRWxlbWVudEltcGwmIGZvcm0gPSAqc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50SW1wbCo+
KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNlIEZvcm1FbGVtZW50
czogICAgICAgIHJldHVybiBnZXRIVE1MQ29sbGVjdGlvbihleGVjLCBmb3JtLmVsZW1lbnRzKCku
Z2V0KCkpOworICAgICAgICBjYXNlIEZvcm1MZW5ndGg6ICAgICAgICAgIHJldHVybiBOdW1iZXIo
Zm9ybS5sZW5ndGgoKSk7CisgICAgICAgIGNhc2UgRm9ybU5hbWU6ICAgICAgICAgICAgcmV0dXJu
IFN0cmluZyhmb3JtLm5hbWUoKSk7CisgICAgICAgIGNhc2UgRm9ybUFjY2VwdENoYXJzZXQ6ICAg
cmV0dXJuIFN0cmluZyhmb3JtLmFjY2VwdENoYXJzZXQoKSk7CisgICAgICAgIGNhc2UgRm9ybUFj
dGlvbjogICAgICAgICAgcmV0dXJuIFN0cmluZyhmb3JtLmFjdGlvbigpKTsKKyAgICAgICAgY2Fz
ZSBGb3JtRW5jVHlwZTogICAgICAgICByZXR1cm4gU3RyaW5nKGZvcm0uZW5jdHlwZSgpKTsKKyAg
ICAgICAgY2FzZSBGb3JtTWV0aG9kOiAgICAgICAgICByZXR1cm4gU3RyaW5nKGZvcm0ubWV0aG9k
KCkpOworICAgICAgICBjYXNlIEZvcm1UYXJnZXQ6ICAgICAgICAgIHJldHVybiBTdHJpbmcoZm9y
bS50YXJnZXQoKSk7CiAgICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX0xBQkVMOiB7Ci0g
ICAgSFRNTExhYmVsRWxlbWVudEltcGwgJmxhYmVsID0gc3RhdGljX2Nhc3Q8SFRNTExhYmVsRWxl
bWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgTGFi
ZWxGb3JtOiAgICAgICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsbGFiZWwuZm9ybSgpKTsg
Ly8gdHlwZSBIVE1MRm9ybUVsZW1lbnQKLSAgICBjYXNlIExhYmVsQWNjZXNzS2V5OiAgICAgICBy
ZXR1cm4gU3RyaW5nKGxhYmVsLmFjY2Vzc0tleSgpKTsKLSAgICBjYXNlIExhYmVsSHRtbEZvcjog
ICAgICAgICByZXR1cm4gU3RyaW5nKGxhYmVsLmh0bWxGb3IoKSk7CisgICAgcmV0dXJuIFVuZGVm
aW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6c2VsZWN0R2V0dGVyKEV4ZWNTdGF0ZSog
ZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxTZWxlY3RFbGVtZW50SW1wbCYgc2Vs
ZWN0ID0gKnN0YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAg
c3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNlIFNlbGVjdFR5cGU6ICAgICAgICAgICAgcmV0
dXJuIFN0cmluZyhzZWxlY3QudHlwZSgpKTsKKyAgICAgICAgY2FzZSBTZWxlY3RTZWxlY3RlZElu
ZGV4OiAgIHJldHVybiBOdW1iZXIoc2VsZWN0LnNlbGVjdGVkSW5kZXgoKSk7CisgICAgICAgIGNh
c2UgU2VsZWN0VmFsdWU6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHNlbGVjdC52YWx1ZSgpKTsK
KyAgICAgICAgY2FzZSBTZWxlY3RMZW5ndGg6ICAgICAgICAgIHJldHVybiBOdW1iZXIoc2VsZWN0
Lmxlbmd0aCgpKTsKKyAgICAgICAgY2FzZSBTZWxlY3RGb3JtOiAgICAgICAgICAgIHJldHVybiBn
ZXRET01Ob2RlKGV4ZWMsIHNlbGVjdC5mb3JtKCkpOyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVudAor
ICAgICAgICBjYXNlIFNlbGVjdE9wdGlvbnM6ICAgICAgICAgcmV0dXJuIGdldFNlbGVjdEhUTUxD
b2xsZWN0aW9uKGV4ZWMsIHNlbGVjdC5vcHRpb25zSFRNTENvbGxlY3Rpb24oKS5nZXQoKSwgJnNl
bGVjdCk7IC8vIHR5cGUgSFRNTENvbGxlY3Rpb24KKyAgICAgICAgY2FzZSBTZWxlY3REaXNhYmxl
ZDogICAgICAgIHJldHVybiBCb29sZWFuKHNlbGVjdC5kaXNhYmxlZCgpKTsKKyAgICAgICAgY2Fz
ZSBTZWxlY3RNdWx0aXBsZTogICAgICAgIHJldHVybiBCb29sZWFuKHNlbGVjdC5tdWx0aXBsZSgp
KTsKKyAgICAgICAgY2FzZSBTZWxlY3ROYW1lOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoc2Vs
ZWN0Lm5hbWUoKSk7CisgICAgICAgIGNhc2UgU2VsZWN0U2l6ZTogICAgICAgICAgICByZXR1cm4g
TnVtYmVyKHNlbGVjdC5zaXplKCkpOworICAgICAgICBjYXNlIFNlbGVjdFRhYkluZGV4OiAgICAg
ICAgcmV0dXJuIE51bWJlcihzZWxlY3QudGFiSW5kZXgoKSk7CiAgICAgfQotICB9Ci0gIGJyZWFr
OwotICBjYXNlIElEX0ZJRUxEU0VUOiB7Ci0gICAgSFRNTEZpZWxkU2V0RWxlbWVudEltcGwgJmZp
ZWxkU2V0ID0gc3RhdGljX2Nhc3Q8SFRNTEZpZWxkU2V0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7
CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6b3B0R3Jv
dXBHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTE9w
dEdyb3VwRWxlbWVudEltcGwmIG9wdGdyb3VwID0gKnN0YXRpY19jYXN0PEhUTUxPcHRHcm91cEVs
ZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBGaWVs
ZFNldEZvcm06ICAgICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyxmaWVsZFNldC5mb3Jt
KCkpOyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVudAorICAgICAgICBjYXNlIE9wdEdyb3VwRGlzYWJs
ZWQ6ICAgICAgICByZXR1cm4gQm9vbGVhbihvcHRncm91cC5kaXNhYmxlZCgpKTsKKyAgICAgICAg
Y2FzZSBPcHRHcm91cExhYmVsOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhvcHRncm91cC5sYWJl
bCgpKTsKICAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfTEVHRU5EOiB7Ci0gICAgSFRN
TExlZ2VuZEVsZW1lbnRJbXBsICZsZWdlbmQgPSBzdGF0aWNfY2FzdDxIVE1MTGVnZW5kRWxlbWVu
dEltcGwgJj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgTGVnZW5k
Rm9ybTogICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLGxlZ2VuZC5mb3JtKCkpOyAv
LyB0eXBlIEhUTUxGb3JtRWxlbWVudAotICAgIGNhc2UgTGVnZW5kQWNjZXNzS2V5OiAgICAgICBy
ZXR1cm4gU3RyaW5nKGxlZ2VuZC5hY2Nlc3NLZXkoKSk7Ci0gICAgY2FzZSBMZWdlbmRBbGlnbjog
ICAgICAgICAgIHJldHVybiBTdHJpbmcobGVnZW5kLmFsaWduKCkpOworICAgIHJldHVybiBVbmRl
ZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6Om9wdGlvbkdldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MT3B0aW9uRWxlbWVudEltcGwmIG9w
dGlvbiA9ICpzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudEltcGwqPihpbXBsKCkpOworICAg
IHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBPcHRpb25Gb3JtOiAgICAgICAgICAgIHJl
dHVybiBnZXRET01Ob2RlKGV4ZWMsb3B0aW9uLmZvcm0oKSk7IC8vIHR5cGUgSFRNTEZvcm1FbGVt
ZW50CisgICAgICAgIGNhc2UgT3B0aW9uRGVmYXVsdFNlbGVjdGVkOiByZXR1cm4gQm9vbGVhbihv
cHRpb24uZGVmYXVsdFNlbGVjdGVkKCkpOworICAgICAgICBjYXNlIE9wdGlvblRleHQ6ICAgICAg
ICAgICAgcmV0dXJuIFN0cmluZyhvcHRpb24udGV4dCgpKTsKKyAgICAgICAgY2FzZSBPcHRpb25J
bmRleDogICAgICAgICAgIHJldHVybiBOdW1iZXIob3B0aW9uLmluZGV4KCkpOworICAgICAgICBj
YXNlIE9wdGlvbkRpc2FibGVkOiAgICAgICAgcmV0dXJuIEJvb2xlYW4ob3B0aW9uLmRpc2FibGVk
KCkpOworICAgICAgICBjYXNlIE9wdGlvbkxhYmVsOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhv
cHRpb24ubGFiZWwoKSk7CisgICAgICAgIGNhc2UgT3B0aW9uU2VsZWN0ZWQ6ICAgICAgICByZXR1
cm4gQm9vbGVhbihvcHRpb24uc2VsZWN0ZWQoKSk7CisgICAgICAgIGNhc2UgT3B0aW9uVmFsdWU6
ICAgICAgICAgICByZXR1cm4gU3RyaW5nKG9wdGlvbi52YWx1ZSgpKTsKICAgICB9Ci0gIH0KLSAg
YnJlYWs7Ci0gIGNhc2UgSURfVUw6IHsKLSAgICBIVE1MVUxpc3RFbGVtZW50SW1wbCAmdUxpc3Qg
PSBzdGF0aWNfY2FzdDxIVE1MVUxpc3RFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICByZXR1
cm4gVW5kZWZpbmVkKCk7Cit9CisKK3N0YXRpYyBWYWx1ZSBnZXRJbnB1dFNlbGVjdGlvblN0YXJ0
KEhUTUxJbnB1dEVsZW1lbnRJbXBsICZpbnB1dCkKK3sKKyAgICBpZiAoaW5wdXQuY2FuSGF2ZVNl
bGVjdGlvbigpKQorICAgICAgICByZXR1cm4gTnVtYmVyKGlucHV0LnNlbGVjdGlvblN0YXJ0KCkp
OworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworc3RhdGljIFZhbHVlIGdldElucHV0U2Vs
ZWN0aW9uRW5kKEhUTUxJbnB1dEVsZW1lbnRJbXBsICZpbnB1dCkKK3sKKyAgICBpZiAoaW5wdXQu
Y2FuSGF2ZVNlbGVjdGlvbigpKQorICAgICAgICByZXR1cm4gTnVtYmVyKGlucHV0LnNlbGVjdGlv
bkVuZCgpKTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50
OjppbnB1dEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBI
VE1MSW5wdXRFbGVtZW50SW1wbCYgaW5wdXQgPSAqc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVu
dEltcGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIFVMaXN0Q29t
cGFjdDogICAgICAgICByZXR1cm4gQm9vbGVhbih1TGlzdC5jb21wYWN0KCkpOwotICAgIGNhc2Ug
VUxpc3RUeXBlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcodUxpc3QudHlwZSgpKTsKKyAgICAg
ICAgY2FzZSBJbnB1dERlZmF1bHRWYWx1ZTogICAgcmV0dXJuIFN0cmluZyhpbnB1dC5kZWZhdWx0
VmFsdWUoKSk7CisgICAgICAgIGNhc2UgSW5wdXREZWZhdWx0Q2hlY2tlZDogIHJldHVybiBCb29s
ZWFuKGlucHV0LmRlZmF1bHRDaGVja2VkKCkpOworICAgICAgICBjYXNlIElucHV0Rm9ybTogICAg
ICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLGlucHV0LmZvcm0oKSk7IC8vIHR5cGUgSFRN
TEZvcm1FbGVtZW50CisgICAgICAgIGNhc2UgSW5wdXRBY2NlcHQ6ICAgICAgICAgIHJldHVybiBT
dHJpbmcoaW5wdXQuYWNjZXB0KCkpOworICAgICAgICBjYXNlIElucHV0QWNjZXNzS2V5OiAgICAg
ICByZXR1cm4gU3RyaW5nKGlucHV0LmFjY2Vzc0tleSgpKTsKKyAgICAgICAgY2FzZSBJbnB1dEFs
aWduOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpbnB1dC5hbGlnbigpKTsKKyAgICAgICAgY2Fz
ZSBJbnB1dEFsdDogICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpbnB1dC5hbHQoKSk7CisgICAg
ICAgIGNhc2UgSW5wdXRDaGVja2VkOiAgICAgICAgIHJldHVybiBCb29sZWFuKGlucHV0LmNoZWNr
ZWQoKSk7CisgICAgICAgIGNhc2UgSW5wdXREaXNhYmxlZDogICAgICAgIHJldHVybiBCb29sZWFu
KGlucHV0LmRpc2FibGVkKCkpOworICAgICAgICBjYXNlIElucHV0TWF4TGVuZ3RoOiAgICAgICBy
ZXR1cm4gTnVtYmVyKGlucHV0Lm1heExlbmd0aCgpKTsKKyAgICAgICAgY2FzZSBJbnB1dE5hbWU6
ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpbnB1dC5uYW1lKCkpOworICAgICAgICBjYXNlIElu
cHV0UmVhZE9ubHk6ICAgICAgICByZXR1cm4gQm9vbGVhbihpbnB1dC5yZWFkT25seSgpKTsKKyAg
ICAgICAgY2FzZSBJbnB1dFNlbGVjdGlvblN0YXJ0OiAgcmV0dXJuIGdldElucHV0U2VsZWN0aW9u
U3RhcnQoaW5wdXQpOworICAgICAgICBjYXNlIElucHV0U2VsZWN0aW9uRW5kOiAgICByZXR1cm4g
Z2V0SW5wdXRTZWxlY3Rpb25FbmQoaW5wdXQpOworICAgICAgICBjYXNlIElucHV0U2l6ZTogICAg
ICAgICAgICByZXR1cm4gU3RyaW5nKGlucHV0LnNpemVET00oKSk7CisgICAgICAgIGNhc2UgSW5w
dXRTcmM6ICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoaW5wdXQuc3JjKCkpOworICAgICAgICBj
YXNlIElucHV0VGFiSW5kZXg6ICAgICAgICByZXR1cm4gTnVtYmVyKGlucHV0LnRhYkluZGV4KCkp
OworICAgICAgICBjYXNlIElucHV0VHlwZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGlucHV0
LnR5cGUoKSk7CisgICAgICAgIGNhc2UgSW5wdXRVc2VNYXA6ICAgICAgICAgIHJldHVybiBTdHJp
bmcoaW5wdXQudXNlTWFwKCkpOworICAgICAgICBjYXNlIElucHV0VmFsdWU6ICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKGlucHV0LnZhbHVlKCkpOwogICAgIH0KLSAgfQotICBicmVhazsKLSAgY2Fz
ZSBJRF9PTDogewotICAgIEhUTUxPTGlzdEVsZW1lbnRJbXBsICZvTGlzdCA9IHN0YXRpY19jYXN0
PEhUTUxPTGlzdEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgIHN3aXRjaCAodG9rZW4pIHsK
LSAgICBjYXNlIE9MaXN0Q29tcGFjdDogICAgICAgICByZXR1cm4gQm9vbGVhbihvTGlzdC5jb21w
YWN0KCkpOwotICAgIGNhc2UgT0xpc3RTdGFydDogICAgICAgICAgIHJldHVybiBOdW1iZXIob0xp
c3Quc3RhcnQoKSk7Ci0gICAgY2FzZSBPTGlzdFR5cGU6ICAgICAgICAgICAgcmV0dXJuIFN0cmlu
ZyhvTGlzdC50eXBlKCkpOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRN
TEVsZW1lbnQ6OnRleHRBcmVhR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25z
dAoreworICAgIEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBsJiB0ZXh0YXJlYSA9ICpzdGF0aWNfY2Fz
dDxIVE1MVGV4dEFyZWFFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikg
eworICAgICAgICBjYXNlIFRleHRBcmVhRGVmYXVsdFZhbHVlOiAgICByZXR1cm4gU3RyaW5nKHRl
eHRhcmVhLmRlZmF1bHRWYWx1ZSgpKTsKKyAgICAgICAgY2FzZSBUZXh0QXJlYUZvcm06ICAgICAg
ICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyx0ZXh0YXJlYS5mb3JtKCkpOyAvLyB0eXBlIEhU
TUxGb3JtRWxlbWVudAorICAgICAgICBjYXNlIFRleHRBcmVhQWNjZXNzS2V5OiAgICAgICByZXR1
cm4gU3RyaW5nKHRleHRhcmVhLmFjY2Vzc0tleSgpKTsKKyAgICAgICAgY2FzZSBUZXh0QXJlYUNv
bHM6ICAgICAgICAgICAgcmV0dXJuIE51bWJlcih0ZXh0YXJlYS5jb2xzKCkpOworICAgICAgICBj
YXNlIFRleHRBcmVhRGlzYWJsZWQ6ICAgICAgICByZXR1cm4gQm9vbGVhbih0ZXh0YXJlYS5kaXNh
YmxlZCgpKTsKKyAgICAgICAgY2FzZSBUZXh0QXJlYU5hbWU6ICAgICAgICAgICAgcmV0dXJuIFN0
cmluZyh0ZXh0YXJlYS5uYW1lKCkpOworICAgICAgICBjYXNlIFRleHRBcmVhUmVhZE9ubHk6ICAg
ICAgICByZXR1cm4gQm9vbGVhbih0ZXh0YXJlYS5yZWFkT25seSgpKTsKKyAgICAgICAgY2FzZSBU
ZXh0QXJlYVJvd3M6ICAgICAgICAgICAgcmV0dXJuIE51bWJlcih0ZXh0YXJlYS5yb3dzKCkpOwor
ICAgICAgICBjYXNlIFRleHRBcmVhU2VsZWN0aW9uU3RhcnQ6ICByZXR1cm4gTnVtYmVyKHRleHRh
cmVhLnNlbGVjdGlvblN0YXJ0KCkpOworICAgICAgICBjYXNlIFRleHRBcmVhU2VsZWN0aW9uRW5k
OiAgICByZXR1cm4gTnVtYmVyKHRleHRhcmVhLnNlbGVjdGlvbkVuZCgpKTsKKyAgICAgICAgY2Fz
ZSBUZXh0QXJlYVRhYkluZGV4OiAgICAgICAgcmV0dXJuIE51bWJlcih0ZXh0YXJlYS50YWJJbmRl
eCgpKTsKKyAgICAgICAgY2FzZSBUZXh0QXJlYVR5cGU6ICAgICAgICAgICAgcmV0dXJuIFN0cmlu
Zyh0ZXh0YXJlYS50eXBlKCkpOworICAgICAgICBjYXNlIFRleHRBcmVhVmFsdWU6ICAgICAgICAg
ICByZXR1cm4gU3RyaW5nKHRleHRhcmVhLnZhbHVlKCkpOwogICAgIH0KLSAgfQotICBicmVhazsK
LSAgY2FzZSBJRF9ETDogewotICAgIEhUTUxETGlzdEVsZW1lbnRJbXBsICZkTGlzdCA9IHN0YXRp
Y19jYXN0PEhUTUxETGlzdEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgIHJldHVybiBVbmRl
ZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OmJ1dHRvbkdldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MQnV0dG9uRWxlbWVudEltcGwmIGJ1
dHRvbiA9ICpzdGF0aWNfY2FzdDxIVE1MQnV0dG9uRWxlbWVudEltcGwqPihpbXBsKCkpOwogICAg
IHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIERMaXN0Q29tcGFjdDogICAgICAgICByZXR1cm4g
Qm9vbGVhbihkTGlzdC5jb21wYWN0KCkpOworICAgICAgICBjYXNlIEJ1dHRvbkZvcm06ICAgICAg
ICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyxidXR0b24uZm9ybSgpKTsgLy8gdHlwZSBIVE1M
Rm9ybUVsZW1lbnQKKyAgICAgICAgY2FzZSBCdXR0b25BY2Nlc3NLZXk6ICAgICAgIHJldHVybiBT
dHJpbmcoYnV0dG9uLmFjY2Vzc0tleSgpKTsKKyAgICAgICAgY2FzZSBCdXR0b25EaXNhYmxlZDog
ICAgICAgIHJldHVybiBCb29sZWFuKGJ1dHRvbi5kaXNhYmxlZCgpKTsKKyAgICAgICAgY2FzZSBC
dXR0b25OYW1lOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYnV0dG9uLm5hbWUoKSk7CisgICAg
ICAgIGNhc2UgQnV0dG9uVGFiSW5kZXg6ICAgICAgICByZXR1cm4gTnVtYmVyKGJ1dHRvbi50YWJJ
bmRleCgpKTsKKyAgICAgICAgY2FzZSBCdXR0b25UeXBlOiAgICAgICAgICAgIHJldHVybiBTdHJp
bmcoYnV0dG9uLnR5cGUoKSk7CisgICAgICAgIGNhc2UgQnV0dG9uVmFsdWU6ICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKGJ1dHRvbi52YWx1ZSgpKTsKICAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNh
c2UgSURfRElSOiB7Ci0gICAgSFRNTERpcmVjdG9yeUVsZW1lbnRJbXBsICZkaXJlY3RvcnkgPSBz
dGF0aWNfY2FzdDxIVE1MRGlyZWN0b3J5RWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgcmV0
dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6bGFiZWxHZXR0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTExhYmVsRWxlbWVudElt
cGwmIGxhYmVsID0gKnN0YXRpY19jYXN0PEhUTUxMYWJlbEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsK
ICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBEaXJlY3RvcnlDb21wYWN0OiAgICAgICAg
IHJldHVybiBCb29sZWFuKGRpcmVjdG9yeS5jb21wYWN0KCkpOworICAgICAgICBjYXNlIExhYmVs
Rm9ybTogICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLGxhYmVsLmZvcm0oKSk7IC8v
IHR5cGUgSFRNTEZvcm1FbGVtZW50CisgICAgICAgIGNhc2UgTGFiZWxBY2Nlc3NLZXk6ICAgICAg
IHJldHVybiBTdHJpbmcobGFiZWwuYWNjZXNzS2V5KCkpOworICAgICAgICBjYXNlIExhYmVsSHRt
bEZvcjogICAgICAgICByZXR1cm4gU3RyaW5nKGxhYmVsLmh0bWxGb3IoKSk7CiAgICAgfQotICB9
Ci0gIGJyZWFrOwotICBjYXNlIElEX01FTlU6IHsKLSAgICBIVE1MTWVudUVsZW1lbnRJbXBsICZt
ZW51ID0gc3RhdGljX2Nhc3Q8SFRNTE1lbnVFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICBy
ZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50OjpmaWVsZFNldEdldHRl
cihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MRmllbGRTZXRF
bGVtZW50SW1wbCYgZmllbGRTZXQgPSAqc3RhdGljX2Nhc3Q8SFRNTEZpZWxkU2V0RWxlbWVudElt
cGwqPihpbXBsKCkpOworICAgIGlmICh0b2tlbiA9PSBGaWVsZFNldEZvcm0pCisgICAgICAgIHJl
dHVybiBnZXRET01Ob2RlKGV4ZWMsZmllbGRTZXQuZm9ybSgpKTsgLy8gdHlwZSBIVE1MRm9ybUVs
ZW1lbnQKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50Ojps
ZWdlbmRHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRN
TExlZ2VuZEVsZW1lbnRJbXBsJiBsZWdlbmQgPSAqc3RhdGljX2Nhc3Q8SFRNTExlZ2VuZEVsZW1l
bnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBNZW51Q29t
cGFjdDogICAgICAgICByZXR1cm4gQm9vbGVhbihtZW51LmNvbXBhY3QoKSk7CisgICAgICAgIGNh
c2UgTGVnZW5kRm9ybTogICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLGxlZ2VuZC5m
b3JtKCkpOyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVudAorICAgICAgICBjYXNlIExlZ2VuZEFjY2Vz
c0tleTogICAgICAgcmV0dXJuIFN0cmluZyhsZWdlbmQuYWNjZXNzS2V5KCkpOworICAgICAgICBj
YXNlIExlZ2VuZEFsaWduOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhsZWdlbmQuYWxpZ24oKSk7
CiAgICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX0xJOiB7Ci0gICAgSFRNTExJRWxlbWVu
dEltcGwgJmxpID0gc3RhdGljX2Nhc3Q8SFRNTExJRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Cisg
ICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6dUxpc3RHZXR0
ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTFVMaXN0RWxl
bWVudEltcGwmIHVMaXN0ID0gKnN0YXRpY19jYXN0PEhUTUxVTGlzdEVsZW1lbnRJbXBsKj4oaW1w
bCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBMSVR5cGU6ICAgICAgICAgICAg
cmV0dXJuIFN0cmluZyhsaS50eXBlKCkpOwotICAgIGNhc2UgTElWYWx1ZTogICAgICAgICAgIHJl
dHVybiBOdW1iZXIobGkudmFsdWUoKSk7CisgICAgICAgIGNhc2UgVUxpc3RDb21wYWN0OiAgICAg
ICAgIHJldHVybiBCb29sZWFuKHVMaXN0LmNvbXBhY3QoKSk7CisgICAgICAgIGNhc2UgVUxpc3RU
eXBlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcodUxpc3QudHlwZSgpKTsKICAgICB9Ci0gIH0K
LSAgYnJlYWs7Ci0gIGNhc2UgSURfRElWOiB7Ci0gICAgSFRNTERpdkVsZW1lbnRJbXBsICZkaXYg
PSBzdGF0aWNfY2FzdDxIVE1MRGl2RWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgcmV0dXJu
IFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6b0xpc3RHZXR0ZXIoRXhlY1N0
YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTE9MaXN0RWxlbWVudEltcGwm
IG9MaXN0ID0gKnN0YXRpY19jYXN0PEhUTUxPTGlzdEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAg
ICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBEaXZBbGlnbjogICAgICAgICAgIHJldHVybiBT
dHJpbmcoZGl2LmFsaWduKCkpOworICAgICAgICBjYXNlIE9MaXN0Q29tcGFjdDogICAgICAgICBy
ZXR1cm4gQm9vbGVhbihvTGlzdC5jb21wYWN0KCkpOworICAgICAgICBjYXNlIE9MaXN0U3RhcnQ6
ICAgICAgICAgICByZXR1cm4gTnVtYmVyKG9MaXN0LnN0YXJ0KCkpOworICAgICAgICBjYXNlIE9M
aXN0VHlwZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKG9MaXN0LnR5cGUoKSk7CiAgICAgfQot
ICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX1A6IHsKLSAgICBIVE1MUGFyYWdyYXBoRWxlbWVudElt
cGwgJnBhcmFncmFwaCA9IHN0YXRpY19jYXN0PEhUTUxQYXJhZ3JhcGhFbGVtZW50SW1wbCAmPihl
bGVtZW50KTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50
OjpkTGlzdEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBI
VE1MRExpc3RFbGVtZW50SW1wbCYgZExpc3QgPSAqc3RhdGljX2Nhc3Q8SFRNTERMaXN0RWxlbWVu
dEltcGwqPihpbXBsKCkpOworICAgIGlmICh0b2tlbiA9PSBETGlzdENvbXBhY3QpCisgICAgICAg
IHJldHVybiBCb29sZWFuKGRMaXN0LmNvbXBhY3QoKSk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgp
OworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6ZGlyR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50
IHRva2VuKSBjb25zdAoreworICAgIEhUTUxEaXJlY3RvcnlFbGVtZW50SW1wbCYgZGlyID0gKnN0
YXRpY19jYXN0PEhUTUxEaXJlY3RvcnlFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRv
a2VuID09IERpcmVjdG9yeUNvbXBhY3QpCisgICAgICAgIHJldHVybiBCb29sZWFuKGRpci5jb21w
YWN0KCkpOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6
Om1lbnVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRN
TE1lbnVFbGVtZW50SW1wbCYgbWVudSA9ICpzdGF0aWNfY2FzdDxIVE1MTWVudUVsZW1lbnRJbXBs
Kj4oaW1wbCgpKTsKKyAgICBpZiAodG9rZW4gPT0gTWVudUNvbXBhY3QpCisgICAgICAgIHJldHVy
biBCb29sZWFuKG1lbnUuY29tcGFjdCgpKTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisK
K1ZhbHVlIEhUTUxFbGVtZW50OjpsaUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikg
Y29uc3QKK3sKKyAgICBIVE1MTElFbGVtZW50SW1wbCYgbGkgPSAqc3RhdGljX2Nhc3Q8SFRNTExJ
RWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIFBh
cmFncmFwaEFsaWduOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhwYXJhZ3JhcGguYWxpZ24oKSk7
CisgICAgICAgIGNhc2UgTElUeXBlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcobGkudHlwZSgp
KTsKKyAgICAgICAgY2FzZSBMSVZhbHVlOiAgICAgICAgICAgcmV0dXJuIE51bWJlcihsaS52YWx1
ZSgpKTsKICAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfSDE6Ci0gIGNhc2UgSURfSDI6
Ci0gIGNhc2UgSURfSDM6Ci0gIGNhc2UgSURfSDQ6Ci0gIGNhc2UgSURfSDU6Ci0gIGNhc2UgSURf
SDY6IHsKLSAgICBIVE1MSGVhZGluZ0VsZW1lbnRJbXBsICZoZWFkaW5nID0gc3RhdGljX2Nhc3Q8
SFRNTEhlYWRpbmdFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICByZXR1cm4gVW5kZWZpbmVk
KCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50OjpkaXZHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBp
bnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTERpdkVsZW1lbnRJbXBsJiBkaXYgPSAqc3RhdGlj
X2Nhc3Q8SFRNTERpdkVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBpZiAodG9rZW4gPT0gRGl2
QWxpZ24pCisgICAgICAgIHJldHVybiBTdHJpbmcoZGl2LmFsaWduKCkpOworICAgIHJldHVybiBV
bmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OnBhcmFncmFwaEdldHRlcihFeGVj
U3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MUGFyYWdyYXBoRWxlbWVu
dEltcGwmIHAgPSAqc3RhdGljX2Nhc3Q8SFRNTFBhcmFncmFwaEVsZW1lbnRJbXBsKj4oaW1wbCgp
KTsKKyAgICBpZiAodG9rZW4gPT0gUGFyYWdyYXBoQWxpZ24pCisgICAgICAgIHJldHVybiBTdHJp
bmcocC5hbGlnbigpKTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxF
bGVtZW50OjpoZWFkaW5nR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAor
eworICAgIEhUTUxIZWFkaW5nRWxlbWVudEltcGwmIGggPSAqc3RhdGljX2Nhc3Q8SFRNTEhlYWRp
bmdFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IEhlYWRpbmdBbGlnbikK
KyAgICAgICAgcmV0dXJuIFN0cmluZyhoLmFsaWduKCkpOworICAgIHJldHVybiBVbmRlZmluZWQo
KTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OmJsb2NrUXVvdGVHZXR0ZXIoRXhlY1N0YXRlKiBl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTEJsb2NrcXVvdGVFbGVtZW50SW1wbCYg
YmxvY2tRdW90ZSA9ICpzdGF0aWNfY2FzdDxIVE1MQmxvY2txdW90ZUVsZW1lbnRJbXBsKj4oaW1w
bCgpKTsKKyAgICBpZiAodG9rZW4gPT0gQmxvY2tRdW90ZUNpdGUpCisgICAgICAgIHJldHVybiBT
dHJpbmcoYmxvY2tRdW90ZS5jaXRlKCkpOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKwor
VmFsdWUgSFRNTEVsZW1lbnQ6OnF1b3RlR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2Vu
KSBjb25zdAoreworICAgIEhUTUxRdW90ZUVsZW1lbnRJbXBsJiBxdW90ZSA9ICpzdGF0aWNfY2Fz
dDxIVE1MUXVvdGVFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IFF1b3Rl
Q2l0ZSkKKyAgICAgICAgcmV0dXJuIFN0cmluZyhxdW90ZS5jaXRlKCkpOworICAgIHJldHVybiBV
bmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OnByZUdldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9y
ICd3cmFwJyB3aGVuIHdoaXRlLXNwYWNlOiBwcmUtd3JhcCBpcyBpbXBsZW1lbnRlZC4KKyAgICBI
VE1MUHJlRWxlbWVudEltcGwmIHByZSA9ICpzdGF0aWNfY2FzdDxIVE1MUHJlRWxlbWVudEltcGwq
PihpbXBsKCkpOworICAgIGlmICh0b2tlbiA9PSBQcmVXaWR0aCkKKyAgICAgICAgcmV0dXJuIE51
bWJlcihwcmUud2lkdGgoKSk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBI
VE1MRWxlbWVudDo6YnJHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7
CisgICAgSFRNTEJSRWxlbWVudEltcGwmIGJyID0gKnN0YXRpY19jYXN0PEhUTUxCUkVsZW1lbnRJ
bXBsKj4oaW1wbCgpKTsKKyAgICBpZiAodG9rZW4gPT0gQlJDbGVhcikKKyAgICAgICAgcmV0dXJu
IFN0cmluZyhici5jbGVhcigpKTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVl
IEhUTUxFbGVtZW50OjpiYXNlRm9udEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikg
Y29uc3QKK3sKKyAgICBIVE1MQmFzZUZvbnRFbGVtZW50SW1wbCYgYmFzZUZvbnQgPSAqc3RhdGlj
X2Nhc3Q8SFRNTEJhc2VGb250RWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAodG9r
ZW4pIHsKLSAgICBjYXNlIEhlYWRpbmdBbGlnbjogICAgICAgICAgIHJldHVybiBTdHJpbmcoaGVh
ZGluZy5hbGlnbigpKTsKKyAgICAgICAgY2FzZSBCYXNlRm9udENvbG9yOiAgICAgICAgICAgcmV0
dXJuIFN0cmluZyhiYXNlRm9udC5jb2xvcigpKTsKKyAgICAgICAgY2FzZSBCYXNlRm9udEZhY2U6
ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhiYXNlRm9udC5mYWNlKCkpOworICAgICAgICBjYXNl
IEJhc2VGb250U2l6ZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGJhc2VGb250LnNpemUoKSk7
CiAgICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX0JMT0NLUVVPVEU6IHsKLSAgICBIVE1M
QmxvY2txdW90ZUVsZW1lbnRJbXBsICZibG9ja3F1b3RlID0gc3RhdGljX2Nhc3Q8SFRNTEJsb2Nr
cXVvdGVFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9
CisKK1ZhbHVlIEhUTUxFbGVtZW50Ojpmb250R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRv
a2VuKSBjb25zdAoreworICAgIEhUTUxGb250RWxlbWVudEltcGwmIGZvbnQgPSAqc3RhdGljX2Nh
c3Q8SFRNTEZvbnRFbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tlbikgewot
ICAgIGNhc2UgQmxvY2tRdW90ZUNpdGU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhibG9ja3F1
b3RlLmNpdGUoKSk7CisgICAgICAgIGNhc2UgRm9udENvbG9yOiAgICAgICAgICAgcmV0dXJuIFN0
cmluZyhmb250LmNvbG9yKCkpOworICAgICAgICBjYXNlIEZvbnRGYWNlOiAgICAgICAgICAgIHJl
dHVybiBTdHJpbmcoZm9udC5mYWNlKCkpOworICAgICAgICBjYXNlIEZvbnRTaXplOiAgICAgICAg
ICAgIHJldHVybiBTdHJpbmcoZm9udC5zaXplKCkpOwogICAgIH0KLSAgfQotICBjYXNlIElEX1E6
IHsKLSAgICBIVE1MUXVvdGVFbGVtZW50SW1wbCAmcXVvdGUgPSBzdGF0aWNfY2FzdDxIVE1MUXVv
dGVFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisK
K1ZhbHVlIEhUTUxFbGVtZW50OjpockdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikg
Y29uc3QKK3sKKyAgICBIVE1MSFJFbGVtZW50SW1wbCYgaHIgPSAqc3RhdGljX2Nhc3Q8SFRNTEhS
RWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIFF1
b3RlQ2l0ZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKHF1b3RlLmNpdGUoKSk7CisgICAgICAg
IGNhc2UgSFJBbGlnbjogICAgICAgICAgIHJldHVybiBTdHJpbmcoaHIuYWxpZ24oKSk7CisgICAg
ICAgIGNhc2UgSFJOb1NoYWRlOiAgICAgICAgIHJldHVybiBCb29sZWFuKGhyLm5vU2hhZGUoKSk7
CisgICAgICAgIGNhc2UgSFJTaXplOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoaHIuc2l6ZSgp
KTsKKyAgICAgICAgY2FzZSBIUldpZHRoOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhoci53aWR0
aCgpKTsKICAgICB9Ci0gIH0KLSAgY2FzZSBJRF9QUkU6IHsKLSAgICBIVE1MUHJlRWxlbWVudElt
cGwgJnByZSA9IHN0YXRpY19jYXN0PEhUTUxQcmVFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAg
ICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50Ojptb2RHZXR0ZXIo
RXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTE1vZEVsZW1lbnRJ
bXBsJiBtb2QgPSAqc3RhdGljX2Nhc3Q8SFRNTE1vZEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAg
ICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBQcmVXaWR0aDogICAgICAgICAgIHJldHVybiBO
dW1iZXIocHJlLndpZHRoKCkpOworICAgICAgICBjYXNlIE1vZENpdGU6ICAgICAgICAgICAgcmV0
dXJuIFN0cmluZyhtb2QuY2l0ZSgpKTsKKyAgICAgICAgY2FzZSBNb2REYXRlVGltZTogICAgICAg
IHJldHVybiBTdHJpbmcobW9kLmRhdGVUaW1lKCkpOwogICAgIH0KLSAgfQotICBicmVhazsKLSAg
Y2FzZSBJRF9CUjogewotICAgIEhUTUxCUkVsZW1lbnRJbXBsICZiciA9IHN0YXRpY19jYXN0PEhU
TUxCUkVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30K
KworVmFsdWUgSFRNTEVsZW1lbnQ6OmFuY2hvckdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0
b2tlbikgY29uc3QKK3sKKyAgICBIVE1MQW5jaG9yRWxlbWVudEltcGwmIGFuY2hvciA9ICpzdGF0
aWNfY2FzdDxIVE1MQW5jaG9yRWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAodG9r
ZW4pIHsKLSAgICBjYXNlIEJSQ2xlYXI6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGJyLmNsZWFy
KCkpOworICAgICAgICBjYXNlIEFuY2hvckFjY2Vzc0tleTogICAgICAgcmV0dXJuIFN0cmluZyhh
bmNob3IuYWNjZXNzS2V5KCkpOworICAgICAgICBjYXNlIEFuY2hvckNoYXJzZXQ6ICAgICAgICAg
cmV0dXJuIFN0cmluZyhhbmNob3IuY2hhcnNldCgpKTsKKyAgICAgICAgY2FzZSBBbmNob3JDb29y
ZHM6ICAgICAgICAgIHJldHVybiBTdHJpbmcoYW5jaG9yLmNvb3JkcygpKTsKKyAgICAgICAgY2Fz
ZSBBbmNob3JIcmVmOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYW5jaG9yLmhyZWYoKSk7Cisg
ICAgICAgIGNhc2UgQW5jaG9ySHJlZkxhbmc6ICAgICAgICByZXR1cm4gU3RyaW5nKGFuY2hvci5o
cmVmbGFuZygpKTsKKyAgICAgICAgY2FzZSBBbmNob3JIYXNoOiAgICAgICAgICAgIHJldHVybiBT
dHJpbmcoJyMnK0tVUkwoYW5jaG9yLmhyZWYoKS5zdHJpbmcoKSkucmVmKCkpOworICAgICAgICBj
YXNlIEFuY2hvckhvc3Q6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhLVVJMKGFuY2hvci5ocmVm
KCkuc3RyaW5nKCkpLmhvc3QoKSk7CisgICAgICAgIGNhc2UgQW5jaG9ySG9zdG5hbWU6IHsKKyAg
ICAgICAgICAgIEtVUkwgdXJsKGFuY2hvci5ocmVmKCkuc3RyaW5nKCkpOworICAgICAgICAgICAg
a2REZWJ1Zyg2MDcwKSA8PCAiYW5jaG9yOjpob3N0bmFtZSB1c2VzOiIgPDx1cmwudXJsKCk8PGVu
ZGw7CisgICAgICAgICAgICBpZiAodXJsLnBvcnQoKT09MCkKKyAgICAgICAgICAgICAgICByZXR1
cm4gU3RyaW5nKHVybC5ob3N0KCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IHJldHVybiBTdHJpbmcodXJsLmhvc3QoKSArICI6IiArIFFTdHJpbmc6Om51bWJlcih1cmwucG9y
dCgpKSk7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBBbmNob3JQYXRoTmFtZTogICAgICAgIHJl
dHVybiBTdHJpbmcoS1VSTChhbmNob3IuaHJlZigpLnN0cmluZygpKS5wYXRoKCkpOworICAgICAg
ICBjYXNlIEFuY2hvclBvcnQ6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhRU3RyaW5nOjpudW1i
ZXIoS1VSTChhbmNob3IuaHJlZigpLnN0cmluZygpKS5wb3J0KCkpKTsKKyAgICAgICAgY2FzZSBB
bmNob3JQcm90b2NvbDogICAgICAgIHJldHVybiBTdHJpbmcoS1VSTChhbmNob3IuaHJlZigpLnN0
cmluZygpKS5wcm90b2NvbCgpKyI6Iik7CisgICAgICAgIGNhc2UgQW5jaG9yU2VhcmNoOiAgICAg
ICAgICByZXR1cm4gU3RyaW5nKEtVUkwoYW5jaG9yLmhyZWYoKS5zdHJpbmcoKSkucXVlcnkoKSk7
CisgICAgICAgIGNhc2UgQW5jaG9yTmFtZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGFuY2hv
ci5uYW1lKCkpOworICAgICAgICBjYXNlIEFuY2hvclJlbDogICAgICAgICAgICAgcmV0dXJuIFN0
cmluZyhhbmNob3IucmVsKCkpOworICAgICAgICBjYXNlIEFuY2hvclJldjogICAgICAgICAgICAg
cmV0dXJuIFN0cmluZyhhbmNob3IucmV2KCkpOworICAgICAgICBjYXNlIEFuY2hvclNoYXBlOiAg
ICAgICAgICAgcmV0dXJuIFN0cmluZyhhbmNob3Iuc2hhcGUoKSk7CisgICAgICAgIGNhc2UgQW5j
aG9yVGFiSW5kZXg6ICAgICAgICByZXR1cm4gTnVtYmVyKGFuY2hvci50YWJJbmRleCgpKTsKKyAg
ICAgICAgY2FzZSBBbmNob3JUYXJnZXQ6ICAgICAgICAgIHJldHVybiBTdHJpbmcoYW5jaG9yLnRh
cmdldCgpKTsKKyAgICAgICAgY2FzZSBBbmNob3JUeXBlOiAgICAgICAgICAgIHJldHVybiBTdHJp
bmcoYW5jaG9yLnR5cGUoKSk7CisgICAgICAgIGNhc2UgQW5jaG9yVGV4dDoKKyAgICAgICAgICAg
IGlmIChEb2N1bWVudEltcGwqIGRvYyA9IGFuY2hvci5nZXREb2N1bWVudCgpKQorICAgICAgICAg
ICAgICAgIGRvYy0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CisgICAg
ICAgICAgICByZXR1cm4gU3RyaW5nKGFuY2hvci5pbm5lclRleHQoKSk7CiAgICAgfQotICB9Ci0g
IGJyZWFrOwotICBjYXNlIElEX0JBU0VGT05UOiB7Ci0gICAgSFRNTEJhc2VGb250RWxlbWVudElt
cGwgJmJhc2VGb250ID0gc3RhdGljX2Nhc3Q8SFRNTEJhc2VGb250RWxlbWVudEltcGwgJj4oZWxl
bWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgQmFzZUZvbnRDb2xvcjogICAg
ICAgICAgIHJldHVybiBTdHJpbmcoYmFzZUZvbnQuY29sb3IoKSk7Ci0gICAgY2FzZSBCYXNlRm9u
dEZhY2U6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhiYXNlRm9udC5mYWNlKCkpOwotICAgIGNh
c2UgQmFzZUZvbnRTaXplOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYmFzZUZvbnQuc2l6ZSgp
KTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50OjppbWFn
ZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MSW1h
Z2VFbGVtZW50SW1wbCYgaW1hZ2UgPSAqc3RhdGljX2Nhc3Q8SFRNTEltYWdlRWxlbWVudEltcGwq
PihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBJbWFnZU5hbWU6
ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpbWFnZS5uYW1lKCkpOworICAgICAgICBjYXNlIElt
YWdlQWxpZ246ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGltYWdlLmFsaWduKCkpOworICAgICAg
ICBjYXNlIEltYWdlQWx0OiAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGltYWdlLmFsdCgpKTsK
KyAgICAgICAgY2FzZSBJbWFnZUJvcmRlcjogICAgICAgICAgcmV0dXJuIE51bWJlcihpbWFnZS5i
b3JkZXIoKSk7CisgICAgICAgIGNhc2UgSW1hZ2VIZWlnaHQ6ICAgICAgICAgIHJldHVybiBOdW1i
ZXIoaW1hZ2UuaGVpZ2h0KHRydWUpKTsKKyAgICAgICAgY2FzZSBJbWFnZUhzcGFjZTogICAgICAg
ICAgcmV0dXJuIE51bWJlcihpbWFnZS5oc3BhY2UoKSk7CisgICAgICAgIGNhc2UgSW1hZ2VJc01h
cDogICAgICAgICAgIHJldHVybiBCb29sZWFuKGltYWdlLmlzTWFwKCkpOworICAgICAgICBjYXNl
IEltYWdlTG9uZ0Rlc2M6ICAgICAgICByZXR1cm4gU3RyaW5nKGltYWdlLmxvbmdEZXNjKCkpOwor
ICAgICAgICBjYXNlIEltYWdlU3JjOiAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGltYWdlLnNy
YygpKTsKKyAgICAgICAgY2FzZSBJbWFnZVVzZU1hcDogICAgICAgICAgcmV0dXJuIFN0cmluZyhp
bWFnZS51c2VNYXAoKSk7CisgICAgICAgIGNhc2UgSW1hZ2VWc3BhY2U6ICAgICAgICAgIHJldHVy
biBOdW1iZXIoaW1hZ2UudnNwYWNlKCkpOworICAgICAgICBjYXNlIEltYWdlV2lkdGg6ICAgICAg
ICAgICByZXR1cm4gTnVtYmVyKGltYWdlLndpZHRoKHRydWUpKTsKKyAgICAgICAgY2FzZSBJbWFn
ZVg6ICAgICAgICAgICAgICAgcmV0dXJuIE51bWJlcihpbWFnZS54KCkpOworICAgICAgICBjYXNl
IEltYWdlWTogICAgICAgICAgICAgICByZXR1cm4gTnVtYmVyKGltYWdlLnkoKSk7CiAgICAgfQot
ICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX0ZPTlQ6IHsKLSAgICBIVE1MRm9udEVsZW1lbnRJbXBs
ICZmb250ID0gc3RhdGljX2Nhc3Q8SFRNTEZvbnRFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAg
ICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBGb250Q29sb3I6ICAgICAgICAgICByZXR1cm4g
U3RyaW5nKGZvbnQuY29sb3IoKSk7Ci0gICAgY2FzZSBGb250RmFjZTogICAgICAgICAgICByZXR1
cm4gU3RyaW5nKGZvbnQuZmFjZSgpKTsKLSAgICBjYXNlIEZvbnRTaXplOiAgICAgICAgICAgIHJl
dHVybiBTdHJpbmcoZm9udC5zaXplKCkpOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKwor
VmFsdWUgSFRNTEVsZW1lbnQ6Om9iamVjdEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tl
bikgY29uc3QKK3sKKyAgICBIVE1MT2JqZWN0RWxlbWVudEltcGwmIG9iamVjdCA9ICpzdGF0aWNf
Y2FzdDxIVE1MT2JqZWN0RWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4p
IHsKKyAgICAgICAgY2FzZSBPYmplY3RGb3JtOiAgICAgICAgICAgIHJldHVybiBnZXRET01Ob2Rl
KGV4ZWMsb2JqZWN0LmZvcm0oKSk7IC8vIHR5cGUgSFRNTEZvcm1FbGVtZW50CisgICAgICAgIGNh
c2UgT2JqZWN0Q29kZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKG9iamVjdC5jb2RlKCkpOwor
ICAgICAgICBjYXNlIE9iamVjdEFsaWduOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3Qu
YWxpZ24oKSk7CisgICAgICAgIGNhc2UgT2JqZWN0QXJjaGl2ZTogICAgICAgICByZXR1cm4gU3Ry
aW5nKG9iamVjdC5hcmNoaXZlKCkpOworICAgICAgICBjYXNlIE9iamVjdEJvcmRlcjogICAgICAg
ICAgcmV0dXJuIFN0cmluZyhvYmplY3QuYm9yZGVyKCkpOworICAgICAgICBjYXNlIE9iamVjdENv
ZGVCYXNlOiAgICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3QuY29kZUJhc2UoKSk7CisgICAgICAg
IGNhc2UgT2JqZWN0Q29kZVR5cGU6ICAgICAgICByZXR1cm4gU3RyaW5nKG9iamVjdC5jb2RlVHlw
ZSgpKTsKKyAgICAgICAgY2FzZSBPYmplY3RDb250ZW50RG9jdW1lbnQ6IHJldHVybiBjaGVja05v
ZGVTZWN1cml0eShleGVjLG9iamVjdC5jb250ZW50RG9jdW1lbnQoKSkgPyAKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRET01Ob2RlKGV4ZWMsIG9iamVjdC5j
b250ZW50RG9jdW1lbnQoKSkgOiBVbmRlZmluZWQoKTsKKyAgICAgICAgY2FzZSBPYmplY3REYXRh
OiAgICAgICAgICAgIHJldHVybiBTdHJpbmcob2JqZWN0LmRhdGEoKSk7CisgICAgICAgIGNhc2Ug
T2JqZWN0RGVjbGFyZTogICAgICAgICByZXR1cm4gQm9vbGVhbihvYmplY3QuZGVjbGFyZSgpKTsK
KyAgICAgICAgY2FzZSBPYmplY3RIZWlnaHQ6ICAgICAgICAgIHJldHVybiBTdHJpbmcob2JqZWN0
LmhlaWdodCgpKTsKKyAgICAgICAgY2FzZSBPYmplY3RIc3BhY2U6ICAgICAgICAgIHJldHVybiBT
dHJpbmcob2JqZWN0LmhzcGFjZSgpKTsKKyAgICAgICAgY2FzZSBPYmplY3ROYW1lOiAgICAgICAg
ICAgIHJldHVybiBTdHJpbmcob2JqZWN0Lm5hbWUoKSk7CisgICAgICAgIGNhc2UgT2JqZWN0U3Rh
bmRieTogICAgICAgICByZXR1cm4gU3RyaW5nKG9iamVjdC5zdGFuZGJ5KCkpOworICAgICAgICBj
YXNlIE9iamVjdFRhYkluZGV4OiAgICAgICAgcmV0dXJuIE51bWJlcihvYmplY3QudGFiSW5kZXgo
KSk7CisgICAgICAgIGNhc2UgT2JqZWN0VHlwZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKG9i
amVjdC50eXBlKCkpOworICAgICAgICBjYXNlIE9iamVjdFVzZU1hcDogICAgICAgICAgcmV0dXJu
IFN0cmluZyhvYmplY3QudXNlTWFwKCkpOworICAgICAgICBjYXNlIE9iamVjdFZzcGFjZTogICAg
ICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3QudnNwYWNlKCkpOworICAgICAgICBjYXNlIE9iamVj
dFdpZHRoOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3Qud2lkdGgoKSk7CiAgICAgfQot
ICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX0hSOiB7Ci0gICAgSFRNTEhSRWxlbWVudEltcGwgJmhy
ID0gc3RhdGljX2Nhc3Q8SFRNTEhSRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgc3dpdGNo
ICh0b2tlbikgewotICAgIGNhc2UgSFJBbGlnbjogICAgICAgICAgIHJldHVybiBTdHJpbmcoaHIu
YWxpZ24oKSk7Ci0gICAgY2FzZSBIUk5vU2hhZGU6ICAgICAgICAgcmV0dXJuIEJvb2xlYW4oaHIu
bm9TaGFkZSgpKTsKLSAgICBjYXNlIEhSU2l6ZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGhy
LnNpemUoKSk7Ci0gICAgY2FzZSBIUldpZHRoOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhoci53
aWR0aCgpKTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50
OjpwYXJhbUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBI
VE1MUGFyYW1FbGVtZW50SW1wbCYgcGFyYW0gPSAqc3RhdGljX2Nhc3Q8SFRNTFBhcmFtRWxlbWVu
dEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBQYXJh
bU5hbWU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhwYXJhbS5uYW1lKCkpOworICAgICAgICBj
YXNlIFBhcmFtVHlwZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKHBhcmFtLnR5cGUoKSk7Cisg
ICAgICAgIGNhc2UgUGFyYW1WYWx1ZTogICAgICAgICAgIHJldHVybiBTdHJpbmcocGFyYW0udmFs
dWUoKSk7CisgICAgICAgIGNhc2UgUGFyYW1WYWx1ZVR5cGU6ICAgICAgIHJldHVybiBTdHJpbmco
cGFyYW0udmFsdWVUeXBlKCkpOwogICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9JTlM6
Ci0gIGNhc2UgSURfREVMOiB7Ci0gICAgSFRNTE1vZEVsZW1lbnRJbXBsICZtb2QgPSBzdGF0aWNf
Y2FzdDxIVE1MTW9kRWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgcmV0dXJuIFVuZGVmaW5l
ZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6YXBwbGV0R2V0dGVyKEV4ZWNTdGF0ZSogZXhl
YywgaW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxBcHBsZXRFbGVtZW50SW1wbCYgYXBwbGV0
ID0gKnN0YXRpY19jYXN0PEhUTUxBcHBsZXRFbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dp
dGNoICh0b2tlbikgewotICAgIGNhc2UgTW9kQ2l0ZTogICAgICAgICAgICByZXR1cm4gU3RyaW5n
KG1vZC5jaXRlKCkpOwotICAgIGNhc2UgTW9kRGF0ZVRpbWU6ICAgICAgICByZXR1cm4gU3RyaW5n
KG1vZC5kYXRlVGltZSgpKTsKKyAgICAgICAgY2FzZSBBcHBsZXRBbGlnbjogICAgICAgICAgIHJl
dHVybiBTdHJpbmcoYXBwbGV0LmFsaWduKCkpOworICAgICAgICBjYXNlIEFwcGxldEFsdDogICAg
ICAgICAgICAgcmV0dXJuIFN0cmluZyhhcHBsZXQuYWx0KCkpOworICAgICAgICBjYXNlIEFwcGxl
dEFyY2hpdmU6ICAgICAgICAgcmV0dXJuIFN0cmluZyhhcHBsZXQuYXJjaGl2ZSgpKTsKKyAgICAg
ICAgY2FzZSBBcHBsZXRDb2RlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYXBwbGV0LmNvZGUo
KSk7CisgICAgICAgIGNhc2UgQXBwbGV0Q29kZUJhc2U6ICAgICAgICByZXR1cm4gU3RyaW5nKGFw
cGxldC5jb2RlQmFzZSgpKTsKKyAgICAgICAgY2FzZSBBcHBsZXRIZWlnaHQ6ICAgICAgICAgIHJl
dHVybiBTdHJpbmcoYXBwbGV0LmhlaWdodCgpKTsKKyAgICAgICAgY2FzZSBBcHBsZXRIc3BhY2U6
ICAgICAgICAgIHJldHVybiBTdHJpbmcoYXBwbGV0LmhzcGFjZSgpKTsKKyAgICAgICAgY2FzZSBB
cHBsZXROYW1lOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYXBwbGV0Lm5hbWUoKSk7CisgICAg
ICAgIGNhc2UgQXBwbGV0T2JqZWN0OiAgICAgICAgICByZXR1cm4gU3RyaW5nKGFwcGxldC5vYmpl
Y3QoKSk7CisgICAgICAgIGNhc2UgQXBwbGV0VnNwYWNlOiAgICAgICAgICByZXR1cm4gU3RyaW5n
KGFwcGxldC52c3BhY2UoKSk7CisgICAgICAgIGNhc2UgQXBwbGV0V2lkdGg6ICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKGFwcGxldC53aWR0aCgpKTsKICAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNh
c2UgSURfQTogewotICAgIEhUTUxBbmNob3JFbGVtZW50SW1wbCAmYW5jaG9yID0gc3RhdGljX2Nh
c3Q8SFRNTEFuY2hvckVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgIHN3aXRjaCAodG9rZW4p
IHsKLSAgICBjYXNlIEFuY2hvckFjY2Vzc0tleTogICAgICAgcmV0dXJuIFN0cmluZyhhbmNob3Iu
YWNjZXNzS2V5KCkpOwotICAgIGNhc2UgQW5jaG9yQ2hhcnNldDogICAgICAgICByZXR1cm4gU3Ry
aW5nKGFuY2hvci5jaGFyc2V0KCkpOwotICAgIGNhc2UgQW5jaG9yQ29vcmRzOiAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKGFuY2hvci5jb29yZHMoKSk7Ci0gICAgY2FzZSBBbmNob3JIcmVmOiAgICAg
ICAgICAgIHJldHVybiBTdHJpbmcoYW5jaG9yLmhyZWYoKSk7Ci0gICAgY2FzZSBBbmNob3JIcmVm
TGFuZzogICAgICAgIHJldHVybiBTdHJpbmcoYW5jaG9yLmhyZWZsYW5nKCkpOwotICAgIGNhc2Ug
QW5jaG9ySGFzaDogICAgICAgICAgICByZXR1cm4gU3RyaW5nKCcjJytLVVJMKGFuY2hvci5ocmVm
KCkuc3RyaW5nKCkpLnJlZigpKTsKLSAgICBjYXNlIEFuY2hvckhvc3Q6ICAgICAgICAgICAgcmV0
dXJuIFN0cmluZyhLVVJMKGFuY2hvci5ocmVmKCkuc3RyaW5nKCkpLmhvc3QoKSk7Ci0gICAgY2Fz
ZSBBbmNob3JIb3N0bmFtZTogewotICAgICAgS1VSTCB1cmwoYW5jaG9yLmhyZWYoKS5zdHJpbmco
KSk7Ci0gICAgICBrZERlYnVnKDYwNzApIDw8ICJhbmNob3I6Omhvc3RuYW1lIHVzZXM6IiA8PHVy
bC51cmwoKTw8ZW5kbDsKLSAgICAgIGlmICh1cmwucG9ydCgpPT0wKQotICAgICAgICByZXR1cm4g
U3RyaW5nKHVybC5ob3N0KCkpOwotICAgICAgZWxzZQotICAgICAgICByZXR1cm4gU3RyaW5nKHVy
bC5ob3N0KCkgKyAiOiIgKyBRU3RyaW5nOjpudW1iZXIodXJsLnBvcnQoKSkpOwotICAgIH0KLSAg
ICBjYXNlIEFuY2hvclBhdGhOYW1lOiAgICAgICAgcmV0dXJuIFN0cmluZyhLVVJMKGFuY2hvci5o
cmVmKCkuc3RyaW5nKCkpLnBhdGgoKSk7Ci0gICAgY2FzZSBBbmNob3JQb3J0OiAgICAgICAgICAg
IHJldHVybiBTdHJpbmcoUVN0cmluZzo6bnVtYmVyKEtVUkwoYW5jaG9yLmhyZWYoKS5zdHJpbmco
KSkucG9ydCgpKSk7Ci0gICAgY2FzZSBBbmNob3JQcm90b2NvbDogICAgICAgIHJldHVybiBTdHJp
bmcoS1VSTChhbmNob3IuaHJlZigpLnN0cmluZygpKS5wcm90b2NvbCgpKyI6Iik7Ci0gICAgY2Fz
ZSBBbmNob3JTZWFyY2g6ICAgICAgICAgIHJldHVybiBTdHJpbmcoS1VSTChhbmNob3IuaHJlZigp
LnN0cmluZygpKS5xdWVyeSgpKTsKLSAgICBjYXNlIEFuY2hvck5hbWU6ICAgICAgICAgICAgcmV0
dXJuIFN0cmluZyhhbmNob3IubmFtZSgpKTsKLSAgICBjYXNlIEFuY2hvclJlbDogICAgICAgICAg
ICAgcmV0dXJuIFN0cmluZyhhbmNob3IucmVsKCkpOwotICAgIGNhc2UgQW5jaG9yUmV2OiAgICAg
ICAgICAgICByZXR1cm4gU3RyaW5nKGFuY2hvci5yZXYoKSk7Ci0gICAgY2FzZSBBbmNob3JTaGFw
ZTogICAgICAgICAgIHJldHVybiBTdHJpbmcoYW5jaG9yLnNoYXBlKCkpOwotICAgIGNhc2UgQW5j
aG9yVGFiSW5kZXg6ICAgICAgICByZXR1cm4gTnVtYmVyKGFuY2hvci50YWJJbmRleCgpKTsKLSAg
ICBjYXNlIEFuY2hvclRhcmdldDogICAgICAgICAgcmV0dXJuIFN0cmluZyhhbmNob3IudGFyZ2V0
KCkpOwotICAgIGNhc2UgQW5jaG9yVHlwZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGFuY2hv
ci50eXBlKCkpOwotICAgIGNhc2UgQW5jaG9yVGV4dDoKLSAgICAgIGlmIChEb2N1bWVudEltcGwq
IGRvYyA9IGFuY2hvci5nZXREb2N1bWVudCgpKQotICAgICAgICBkb2MtPnVwZGF0ZUxheW91dEln
bm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwotICAgICAgcmV0dXJuIFN0cmluZyhhbmNob3IuaW5u
ZXJUZXh0KCkpOwotICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9JTUc6IHsKLSAgICBI
VE1MSW1hZ2VFbGVtZW50SW1wbCAmaW1hZ2UgPSBzdGF0aWNfY2FzdDxIVE1MSW1hZ2VFbGVtZW50
SW1wbCAmPihlbGVtZW50KTsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBJbWFnZU5h
bWU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpbWFnZS5uYW1lKCkpOwotICAgIGNhc2UgSW1h
Z2VBbGlnbjogICAgICAgICAgIHJldHVybiBTdHJpbmcoaW1hZ2UuYWxpZ24oKSk7Ci0gICAgY2Fz
ZSBJbWFnZUFsdDogICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpbWFnZS5hbHQoKSk7Ci0gICAg
Y2FzZSBJbWFnZUJvcmRlcjogICAgICAgICAgcmV0dXJuIE51bWJlcihpbWFnZS5ib3JkZXIoKSk7
Ci0gICAgY2FzZSBJbWFnZUhlaWdodDogICAgICAgICAgcmV0dXJuIE51bWJlcihpbWFnZS5oZWln
aHQodHJ1ZSkpOwotICAgIGNhc2UgSW1hZ2VIc3BhY2U6ICAgICAgICAgIHJldHVybiBOdW1iZXIo
aW1hZ2UuaHNwYWNlKCkpOwotICAgIGNhc2UgSW1hZ2VJc01hcDogICAgICAgICAgIHJldHVybiBC
b29sZWFuKGltYWdlLmlzTWFwKCkpOwotICAgIGNhc2UgSW1hZ2VMb25nRGVzYzogICAgICAgIHJl
dHVybiBTdHJpbmcoaW1hZ2UubG9uZ0Rlc2MoKSk7Ci0gICAgY2FzZSBJbWFnZVNyYzogICAgICAg
ICAgICAgcmV0dXJuIFN0cmluZyhpbWFnZS5zcmMoKSk7Ci0gICAgY2FzZSBJbWFnZVVzZU1hcDog
ICAgICAgICAgcmV0dXJuIFN0cmluZyhpbWFnZS51c2VNYXAoKSk7Ci0gICAgY2FzZSBJbWFnZVZz
cGFjZTogICAgICAgICAgcmV0dXJuIE51bWJlcihpbWFnZS52c3BhY2UoKSk7Ci0gICAgY2FzZSBJ
bWFnZVdpZHRoOiAgICAgICAgICAgcmV0dXJuIE51bWJlcihpbWFnZS53aWR0aCh0cnVlKSk7Ci0g
ICAgY2FzZSBJbWFnZVg6ICAgICAgICAgICAgICAgcmV0dXJuIE51bWJlcihpbWFnZS54KCkpOwot
ICAgIGNhc2UgSW1hZ2VZOiAgICAgICAgICAgICAgIHJldHVybiBOdW1iZXIoaW1hZ2UueSgpKTsK
LSAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfT0JKRUNUOiB7Ci0gICAgSFRNTE9iamVj
dEVsZW1lbnRJbXBsICZvYmplY3QgPSBzdGF0aWNfY2FzdDxIVE1MT2JqZWN0RWxlbWVudEltcGwg
Jj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgT2JqZWN0Rm9ybTog
ICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLG9iamVjdC5mb3JtKCkpOyAvLyB0eXBl
IEhUTUxGb3JtRWxlbWVudAotICAgIGNhc2UgT2JqZWN0Q29kZTogICAgICAgICAgICByZXR1cm4g
U3RyaW5nKG9iamVjdC5jb2RlKCkpOwotICAgIGNhc2UgT2JqZWN0QWxpZ246ICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKG9iamVjdC5hbGlnbigpKTsKLSAgICBjYXNlIE9iamVjdEFyY2hpdmU6ICAg
ICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3QuYXJjaGl2ZSgpKTsKLSAgICBjYXNlIE9iamVjdEJv
cmRlcjogICAgICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3QuYm9yZGVyKCkpOwotICAgIGNhc2Ug
T2JqZWN0Q29kZUJhc2U6ICAgICAgICByZXR1cm4gU3RyaW5nKG9iamVjdC5jb2RlQmFzZSgpKTsK
LSAgICBjYXNlIE9iamVjdENvZGVUeXBlOiAgICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3QuY29k
ZVR5cGUoKSk7Ci0gICAgY2FzZSBPYmplY3RDb250ZW50RG9jdW1lbnQ6IHJldHVybiBjaGVja05v
ZGVTZWN1cml0eShleGVjLG9iamVjdC5jb250ZW50RG9jdW1lbnQoKSkgPyAKLQkJCQkgICAgICAg
Z2V0RE9NTm9kZShleGVjLCBvYmplY3QuY29udGVudERvY3VtZW50KCkpIDogVW5kZWZpbmVkKCk7
Ci0gICAgY2FzZSBPYmplY3REYXRhOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcob2JqZWN0LmRh
dGEoKSk7Ci0gICAgY2FzZSBPYmplY3REZWNsYXJlOiAgICAgICAgIHJldHVybiBCb29sZWFuKG9i
amVjdC5kZWNsYXJlKCkpOwotICAgIGNhc2UgT2JqZWN0SGVpZ2h0OiAgICAgICAgICByZXR1cm4g
U3RyaW5nKG9iamVjdC5oZWlnaHQoKSk7Ci0gICAgY2FzZSBPYmplY3RIc3BhY2U6ICAgICAgICAg
IHJldHVybiBTdHJpbmcob2JqZWN0LmhzcGFjZSgpKTsKLSAgICBjYXNlIE9iamVjdE5hbWU6ICAg
ICAgICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3QubmFtZSgpKTsKLSAgICBjYXNlIE9iamVjdFN0
YW5kYnk6ICAgICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3Quc3RhbmRieSgpKTsKLSAgICBjYXNl
IE9iamVjdFRhYkluZGV4OiAgICAgICAgcmV0dXJuIE51bWJlcihvYmplY3QudGFiSW5kZXgoKSk7
Ci0gICAgY2FzZSBPYmplY3RUeXBlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcob2JqZWN0LnR5
cGUoKSk7Ci0gICAgY2FzZSBPYmplY3RVc2VNYXA6ICAgICAgICAgIHJldHVybiBTdHJpbmcob2Jq
ZWN0LnVzZU1hcCgpKTsKLSAgICBjYXNlIE9iamVjdFZzcGFjZTogICAgICAgICAgcmV0dXJuIFN0
cmluZyhvYmplY3QudnNwYWNlKCkpOwotICAgIGNhc2UgT2JqZWN0V2lkdGg6ICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKG9iamVjdC53aWR0aCgpKTsKLSAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNh
c2UgSURfUEFSQU06IHsKLSAgICBIVE1MUGFyYW1FbGVtZW50SW1wbCAmcGFyYW0gPSBzdGF0aWNf
Y2FzdDxIVE1MUGFyYW1FbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICBzd2l0Y2ggKHRva2Vu
KSB7Ci0gICAgY2FzZSBQYXJhbU5hbWU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhwYXJhbS5u
YW1lKCkpOwotICAgIGNhc2UgUGFyYW1UeXBlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcocGFy
YW0udHlwZSgpKTsKLSAgICBjYXNlIFBhcmFtVmFsdWU6ICAgICAgICAgICByZXR1cm4gU3RyaW5n
KHBhcmFtLnZhbHVlKCkpOwotICAgIGNhc2UgUGFyYW1WYWx1ZVR5cGU6ICAgICAgIHJldHVybiBT
dHJpbmcocGFyYW0udmFsdWVUeXBlKCkpOwotICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJ
RF9BUFBMRVQ6IHsKLSAgICBIVE1MQXBwbGV0RWxlbWVudEltcGwgJmFwcGxldCA9IHN0YXRpY19j
YXN0PEhUTUxBcHBsZXRFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICBzd2l0Y2ggKHRva2Vu
KSB7Ci0gICAgY2FzZSBBcHBsZXRBbGlnbjogICAgICAgICAgIHJldHVybiBTdHJpbmcoYXBwbGV0
LmFsaWduKCkpOwotICAgIGNhc2UgQXBwbGV0QWx0OiAgICAgICAgICAgICByZXR1cm4gU3RyaW5n
KGFwcGxldC5hbHQoKSk7Ci0gICAgY2FzZSBBcHBsZXRBcmNoaXZlOiAgICAgICAgIHJldHVybiBT
dHJpbmcoYXBwbGV0LmFyY2hpdmUoKSk7Ci0gICAgY2FzZSBBcHBsZXRDb2RlOiAgICAgICAgICAg
IHJldHVybiBTdHJpbmcoYXBwbGV0LmNvZGUoKSk7Ci0gICAgY2FzZSBBcHBsZXRDb2RlQmFzZTog
ICAgICAgIHJldHVybiBTdHJpbmcoYXBwbGV0LmNvZGVCYXNlKCkpOwotICAgIGNhc2UgQXBwbGV0
SGVpZ2h0OiAgICAgICAgICByZXR1cm4gU3RyaW5nKGFwcGxldC5oZWlnaHQoKSk7Ci0gICAgY2Fz
ZSBBcHBsZXRIc3BhY2U6ICAgICAgICAgIHJldHVybiBTdHJpbmcoYXBwbGV0LmhzcGFjZSgpKTsK
LSAgICBjYXNlIEFwcGxldE5hbWU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhhcHBsZXQubmFt
ZSgpKTsKLSAgICBjYXNlIEFwcGxldE9iamVjdDogICAgICAgICAgcmV0dXJuIFN0cmluZyhhcHBs
ZXQub2JqZWN0KCkpOwotICAgIGNhc2UgQXBwbGV0VnNwYWNlOiAgICAgICAgICByZXR1cm4gU3Ry
aW5nKGFwcGxldC52c3BhY2UoKSk7Ci0gICAgY2FzZSBBcHBsZXRXaWR0aDogICAgICAgICAgIHJl
dHVybiBTdHJpbmcoYXBwbGV0LndpZHRoKCkpOwotICAgIH0KLSAgfQotICBicmVhazsKLSAgY2Fz
ZSBJRF9NQVA6IHsKLSAgICBIVE1MTWFwRWxlbWVudEltcGwgJm1hcCA9IHN0YXRpY19jYXN0PEhU
TUxNYXBFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9
CisKK1ZhbHVlIEhUTUxFbGVtZW50OjptYXBHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0Cit7CisgICAgSFRNTE1hcEVsZW1lbnRJbXBsJiBtYXAgPSAqc3RhdGljX2Nhc3Q8
SFRNTE1hcEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAg
Y2FzZSBNYXBBcmVhczogICAgICAgICAgIHJldHVybiBnZXRIVE1MQ29sbGVjdGlvbihleGVjLCBt
YXAuYXJlYXMoKS5nZXQoKSk7IC8vIHR5cGUgSFRNTENvbGxlY3Rpb24KLSAgICBjYXNlIE1hcE5h
bWU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhtYXAubmFtZSgpKTsKLSAgICB9Ci0gIH0KLSAg
YnJlYWs7Ci0gIGNhc2UgSURfQVJFQTogewotICAgIEhUTUxBcmVhRWxlbWVudEltcGwgJmFyZWEg
PSBzdGF0aWNfY2FzdDxIVE1MQXJlYUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgIHN3aXRj
aCAodG9rZW4pIHsKLSAgICBjYXNlIEFyZWFBY2Nlc3NLZXk6ICAgICAgIHJldHVybiBTdHJpbmco
YXJlYS5hY2Nlc3NLZXkoKSk7Ci0gICAgY2FzZSBBcmVhQWx0OiAgICAgICAgICAgICByZXR1cm4g
U3RyaW5nKGFyZWEuYWx0KCkpOwotICAgIGNhc2UgQXJlYUNvb3JkczogICAgICAgICAgcmV0dXJu
IFN0cmluZyhhcmVhLmNvb3JkcygpKTsKLSAgICBjYXNlIEFyZWFIcmVmOiAgICAgICAgICAgIHJl
dHVybiBTdHJpbmcoYXJlYS5ocmVmKCkpOwotICAgIGNhc2UgQXJlYUhhc2g6ICAgICAgICAgICAg
cmV0dXJuIFN0cmluZygnIycrS1VSTChhcmVhLmhyZWYoKS5zdHJpbmcoKSkucmVmKCkpOwotICAg
IGNhc2UgQXJlYUhvc3Q6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhLVVJMKGFyZWEuaHJlZigp
LnN0cmluZygpKS5ob3N0KCkpOwotICAgIGNhc2UgQXJlYUhvc3ROYW1lOiB7Ci0gICAgICBLVVJM
IHVybChhcmVhLmhyZWYoKS5zdHJpbmcoKSk7Ci0gICAgICBrZERlYnVnKDYwNzApIDw8ICJsaW5r
Ojpob3N0bmFtZSB1c2VzOiIgPDx1cmwudXJsKCk8PGVuZGw7Ci0gICAgICBpZiAodXJsLnBvcnQo
KT09MCkKLSAgICAgICAgcmV0dXJuIFN0cmluZyh1cmwuaG9zdCgpKTsKLSAgICAgIGVsc2UKLSAg
ICAgICAgcmV0dXJuIFN0cmluZyh1cmwuaG9zdCgpICsgIjoiICsgUVN0cmluZzo6bnVtYmVyKHVy
bC5wb3J0KCkpKTsKKyAgICAgICAgY2FzZSBNYXBBcmVhczogICAgICAgICAgIHJldHVybiBnZXRI
VE1MQ29sbGVjdGlvbihleGVjLCBtYXAuYXJlYXMoKS5nZXQoKSk7IC8vIHR5cGUgSFRNTENvbGxl
Y3Rpb24KKyAgICAgICAgY2FzZSBNYXBOYW1lOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcobWFw
Lm5hbWUoKSk7CiAgICAgfQotICAgIGNhc2UgQXJlYVBhdGhOYW1lOiAgICAgICAgcmV0dXJuIFN0
cmluZyhLVVJMKGFyZWEuaHJlZigpLnN0cmluZygpKS5wYXRoKCkpOwotICAgIGNhc2UgQXJlYVBv
cnQ6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhRU3RyaW5nOjpudW1iZXIoS1VSTChhcmVhLmhy
ZWYoKS5zdHJpbmcoKSkucG9ydCgpKSk7Ci0gICAgY2FzZSBBcmVhUHJvdG9jb2w6ICAgICAgICBy
ZXR1cm4gU3RyaW5nKEtVUkwoYXJlYS5ocmVmKCkuc3RyaW5nKCkpLnByb3RvY29sKCkrIjoiKTsK
LSAgICBjYXNlIEFyZWFTZWFyY2g6ICAgICAgICAgIHJldHVybiBTdHJpbmcoS1VSTChhcmVhLmhy
ZWYoKS5zdHJpbmcoKSkucXVlcnkoKSk7Ci0gICAgY2FzZSBBcmVhTm9IcmVmOiAgICAgICAgICBy
ZXR1cm4gQm9vbGVhbihhcmVhLm5vSHJlZigpKTsKLSAgICBjYXNlIEFyZWFTaGFwZTogICAgICAg
ICAgIHJldHVybiBTdHJpbmcoYXJlYS5zaGFwZSgpKTsKLSAgICBjYXNlIEFyZWFUYWJJbmRleDog
ICAgICAgIHJldHVybiBOdW1iZXIoYXJlYS50YWJJbmRleCgpKTsKLSAgICBjYXNlIEFyZWFUYXJn
ZXQ6ICAgICAgICAgIHJldHVybiBTdHJpbmcoYXJlYS50YXJnZXQoKSk7CisgICAgcmV0dXJuIFVu
ZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6YXJlYUdldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MQXJlYUVsZW1lbnRJbXBsJiBhcmVh
ID0gKnN0YXRpY19jYXN0PEhUTUxBcmVhRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRj
aCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBBcmVhQWNjZXNzS2V5OiAgICAgICByZXR1cm4gU3Ry
aW5nKGFyZWEuYWNjZXNzS2V5KCkpOworICAgICAgICBjYXNlIEFyZWFBbHQ6ICAgICAgICAgICAg
IHJldHVybiBTdHJpbmcoYXJlYS5hbHQoKSk7CisgICAgICAgIGNhc2UgQXJlYUNvb3JkczogICAg
ICAgICAgcmV0dXJuIFN0cmluZyhhcmVhLmNvb3JkcygpKTsKKyAgICAgICAgY2FzZSBBcmVhSHJl
ZjogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGFyZWEuaHJlZigpKTsKKyAgICAgICAgY2FzZSBB
cmVhSGFzaDogICAgICAgICAgICByZXR1cm4gU3RyaW5nKCcjJytLVVJMKGFyZWEuaHJlZigpLnN0
cmluZygpKS5yZWYoKSk7CisgICAgICAgIGNhc2UgQXJlYUhvc3Q6ICAgICAgICAgICAgcmV0dXJu
IFN0cmluZyhLVVJMKGFyZWEuaHJlZigpLnN0cmluZygpKS5ob3N0KCkpOworICAgICAgICBjYXNl
IEFyZWFIb3N0TmFtZTogeworICAgICAgICAgICAgS1VSTCB1cmwoYXJlYS5ocmVmKCkuc3RyaW5n
KCkpOworICAgICAgICAgICAga2REZWJ1Zyg2MDcwKSA8PCAibGluazo6aG9zdG5hbWUgdXNlczoi
IDw8dXJsLnVybCgpPDxlbmRsOworICAgICAgICAgICAgaWYgKHVybC5wb3J0KCk9PTApCisgICAg
ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh1cmwuaG9zdCgpKTsKKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKHVybC5ob3N0KCkgKyAiOiIgKyBRU3RyaW5n
OjpudW1iZXIodXJsLnBvcnQoKSkpOworICAgICAgICB9CisgICAgICAgIGNhc2UgQXJlYVBhdGhO
YW1lOiAgICAgICAgcmV0dXJuIFN0cmluZyhLVVJMKGFyZWEuaHJlZigpLnN0cmluZygpKS5wYXRo
KCkpOworICAgICAgICBjYXNlIEFyZWFQb3J0OiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoUVN0
cmluZzo6bnVtYmVyKEtVUkwoYXJlYS5ocmVmKCkuc3RyaW5nKCkpLnBvcnQoKSkpOworICAgICAg
ICBjYXNlIEFyZWFQcm90b2NvbDogICAgICAgIHJldHVybiBTdHJpbmcoS1VSTChhcmVhLmhyZWYo
KS5zdHJpbmcoKSkucHJvdG9jb2woKSsiOiIpOworICAgICAgICBjYXNlIEFyZWFTZWFyY2g6ICAg
ICAgICAgIHJldHVybiBTdHJpbmcoS1VSTChhcmVhLmhyZWYoKS5zdHJpbmcoKSkucXVlcnkoKSk7
CisgICAgICAgIGNhc2UgQXJlYU5vSHJlZjogICAgICAgICAgcmV0dXJuIEJvb2xlYW4oYXJlYS5u
b0hyZWYoKSk7CisgICAgICAgIGNhc2UgQXJlYVNoYXBlOiAgICAgICAgICAgcmV0dXJuIFN0cmlu
ZyhhcmVhLnNoYXBlKCkpOworICAgICAgICBjYXNlIEFyZWFUYWJJbmRleDogICAgICAgIHJldHVy
biBOdW1iZXIoYXJlYS50YWJJbmRleCgpKTsKKyAgICAgICAgY2FzZSBBcmVhVGFyZ2V0OiAgICAg
ICAgICByZXR1cm4gU3RyaW5nKGFyZWEudGFyZ2V0KCkpOwogICAgIH0KLSAgfQotICBicmVhazsK
LSAgY2FzZSBJRF9TQ1JJUFQ6IHsKLSAgICBIVE1MU2NyaXB0RWxlbWVudEltcGwgJnNjcmlwdCA9
IHN0YXRpY19jYXN0PEhUTUxTY3JpcHRFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICBzd2l0
Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBTY3JpcHRUZXh0OiAgICAgICAgICAgIHJldHVybiBTdHJp
bmcoc2NyaXB0LnRleHQoKSk7Ci0gICAgY2FzZSBTY3JpcHRIdG1sRm9yOiAgICAgICAgIHJldHVy
biBTdHJpbmcoc2NyaXB0Lmh0bWxGb3IoKSk7Ci0gICAgY2FzZSBTY3JpcHRFdmVudDogICAgICAg
ICAgIHJldHVybiBTdHJpbmcoc2NyaXB0LmV2ZW50KCkpOwotICAgIGNhc2UgU2NyaXB0Q2hhcnNl
dDogICAgICAgICByZXR1cm4gU3RyaW5nKHNjcmlwdC5jaGFyc2V0KCkpOwotICAgIGNhc2UgU2Ny
aXB0RGVmZXI6ICAgICAgICAgICByZXR1cm4gQm9vbGVhbihzY3JpcHQuZGVmZXIoKSk7Ci0gICAg
Y2FzZSBTY3JpcHRTcmM6ICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoc2NyaXB0LnNyYygpKTsK
LSAgICBjYXNlIFNjcmlwdFR5cGU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhzY3JpcHQudHlw
ZSgpKTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50Ojpz
Y3JpcHRHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRN
TFNjcmlwdEVsZW1lbnRJbXBsJiBzY3JpcHQgPSAqc3RhdGljX2Nhc3Q8SFRNTFNjcmlwdEVsZW1l
bnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgU2Ny
aXB0VGV4dDogICAgICAgICAgICByZXR1cm4gU3RyaW5nKHNjcmlwdC50ZXh0KCkpOworICAgICAg
ICBjYXNlIFNjcmlwdEh0bWxGb3I6ICAgICAgICAgcmV0dXJuIFN0cmluZyhzY3JpcHQuaHRtbEZv
cigpKTsKKyAgICAgICAgY2FzZSBTY3JpcHRFdmVudDogICAgICAgICAgIHJldHVybiBTdHJpbmco
c2NyaXB0LmV2ZW50KCkpOworICAgICAgICBjYXNlIFNjcmlwdENoYXJzZXQ6ICAgICAgICAgcmV0
dXJuIFN0cmluZyhzY3JpcHQuY2hhcnNldCgpKTsKKyAgICAgICAgY2FzZSBTY3JpcHREZWZlcjog
ICAgICAgICAgIHJldHVybiBCb29sZWFuKHNjcmlwdC5kZWZlcigpKTsKKyAgICAgICAgY2FzZSBT
Y3JpcHRTcmM6ICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoc2NyaXB0LnNyYygpKTsKKyAgICAg
ICAgY2FzZSBTY3JpcHRUeXBlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoc2NyaXB0LnR5cGUo
KSk7CiAgICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX1RBQkxFOiB7Ci0gICAgSFRNTFRh
YmxlRWxlbWVudEltcGwgJnRhYmxlID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlRWxlbWVudEltcGwg
Jj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgVGFibGVDYXB0aW9u
OiAgICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsdGFibGUuY2FwdGlvbigpKTsgLy8gdHlw
ZSBIVE1MVGFibGVDYXB0aW9uRWxlbWVudAotICAgIGNhc2UgVGFibGVUSGVhZDogICAgICAgICAg
IHJldHVybiBnZXRET01Ob2RlKGV4ZWMsdGFibGUudEhlYWQoKSk7IC8vIHR5cGUgSFRNTFRhYmxl
U2VjdGlvbkVsZW1lbnQKLSAgICBjYXNlIFRhYmxlVEZvb3Q6ICAgICAgICAgICByZXR1cm4gZ2V0
RE9NTm9kZShleGVjLHRhYmxlLnRGb290KCkpOyAvLyB0eXBlIEhUTUxUYWJsZVNlY3Rpb25FbGVt
ZW50Ci0gICAgY2FzZSBUYWJsZVJvd3M6ICAgICAgICAgICAgcmV0dXJuIGdldEhUTUxDb2xsZWN0
aW9uKGV4ZWMsIHRhYmxlLnJvd3MoKS5nZXQoKSk7IC8vIHR5cGUgSFRNTENvbGxlY3Rpb24KLSAg
ICBjYXNlIFRhYmxlVEJvZGllczogICAgICAgICByZXR1cm4gZ2V0SFRNTENvbGxlY3Rpb24oZXhl
YywgdGFibGUudEJvZGllcygpLmdldCgpKTsgLy8gdHlwZSBIVE1MQ29sbGVjdGlvbgotICAgIGNh
c2UgVGFibGVBbGlnbjogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGUuYWxpZ24oKSk7Ci0g
ICAgY2FzZSBUYWJsZUJnQ29sb3I6ICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZS5iZ0NvbG9y
KCkpOwotICAgIGNhc2UgVGFibGVCb3JkZXI6ICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGUu
Ym9yZGVyKCkpOwotICAgIGNhc2UgVGFibGVDZWxsUGFkZGluZzogICAgIHJldHVybiBTdHJpbmco
dGFibGUuY2VsbFBhZGRpbmcoKSk7Ci0gICAgY2FzZSBUYWJsZUNlbGxTcGFjaW5nOiAgICAgcmV0
dXJuIFN0cmluZyh0YWJsZS5jZWxsU3BhY2luZygpKTsKLSAgICBjYXNlIFRhYmxlRnJhbWU6ICAg
ICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlLmZyYW1lKCkpOwotICAgIGNhc2UgVGFibGVSdWxl
czogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGUucnVsZXMoKSk7Ci0gICAgY2FzZSBUYWJs
ZVN1bW1hcnk6ICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZS5zdW1tYXJ5KCkpOwotICAgIGNh
c2UgVGFibGVXaWR0aDogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGUud2lkdGgoKSk7Cisg
ICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6dGFibGVHZXR0
ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTFRhYmxlRWxl
bWVudEltcGwmIHRhYmxlID0gKnN0YXRpY19jYXN0PEhUTUxUYWJsZUVsZW1lbnRJbXBsKj4oaW1w
bCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgVGFibGVDYXB0aW9uOiAg
ICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsdGFibGUuY2FwdGlvbigpKTsgLy8gdHlwZSBI
VE1MVGFibGVDYXB0aW9uRWxlbWVudAorICAgICAgICBjYXNlIFRhYmxlVEhlYWQ6ICAgICAgICAg
ICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLHRhYmxlLnRIZWFkKCkpOyAvLyB0eXBlIEhUTUxUYWJs
ZVNlY3Rpb25FbGVtZW50CisgICAgICAgIGNhc2UgVGFibGVURm9vdDogICAgICAgICAgIHJldHVy
biBnZXRET01Ob2RlKGV4ZWMsdGFibGUudEZvb3QoKSk7IC8vIHR5cGUgSFRNTFRhYmxlU2VjdGlv
bkVsZW1lbnQKKyAgICAgICAgY2FzZSBUYWJsZVJvd3M6ICAgICAgICAgICAgcmV0dXJuIGdldEhU
TUxDb2xsZWN0aW9uKGV4ZWMsIHRhYmxlLnJvd3MoKS5nZXQoKSk7IC8vIHR5cGUgSFRNTENvbGxl
Y3Rpb24KKyAgICAgICAgY2FzZSBUYWJsZVRCb2RpZXM6ICAgICAgICAgcmV0dXJuIGdldEhUTUxD
b2xsZWN0aW9uKGV4ZWMsIHRhYmxlLnRCb2RpZXMoKS5nZXQoKSk7IC8vIHR5cGUgSFRNTENvbGxl
Y3Rpb24KKyAgICAgICAgY2FzZSBUYWJsZUFsaWduOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0
YWJsZS5hbGlnbigpKTsKKyAgICAgICAgY2FzZSBUYWJsZUJnQ29sb3I6ICAgICAgICAgcmV0dXJu
IFN0cmluZyh0YWJsZS5iZ0NvbG9yKCkpOworICAgICAgICBjYXNlIFRhYmxlQm9yZGVyOiAgICAg
ICAgICByZXR1cm4gU3RyaW5nKHRhYmxlLmJvcmRlcigpKTsKKyAgICAgICAgY2FzZSBUYWJsZUNl
bGxQYWRkaW5nOiAgICAgcmV0dXJuIFN0cmluZyh0YWJsZS5jZWxsUGFkZGluZygpKTsKKyAgICAg
ICAgY2FzZSBUYWJsZUNlbGxTcGFjaW5nOiAgICAgcmV0dXJuIFN0cmluZyh0YWJsZS5jZWxsU3Bh
Y2luZygpKTsKKyAgICAgICAgY2FzZSBUYWJsZUZyYW1lOiAgICAgICAgICAgcmV0dXJuIFN0cmlu
Zyh0YWJsZS5mcmFtZSgpKTsKKyAgICAgICAgY2FzZSBUYWJsZVJ1bGVzOiAgICAgICAgICAgcmV0
dXJuIFN0cmluZyh0YWJsZS5ydWxlcygpKTsKKyAgICAgICAgY2FzZSBUYWJsZVN1bW1hcnk6ICAg
ICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZS5zdW1tYXJ5KCkpOworICAgICAgICBjYXNlIFRhYmxl
V2lkdGg6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlLndpZHRoKCkpOwogICAgIH0KLSAg
fQotICBicmVhazsKLSAgY2FzZSBJRF9DQVBUSU9OOiB7Ci0gICAgSFRNTFRhYmxlQ2FwdGlvbkVs
ZW1lbnRJbXBsICZ0YWJsZUNhcHRpb24gPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVDYXB0aW9uRWxl
bWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1
ZSBIVE1MRWxlbWVudDo6dGFibGVDYXB0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRv
a2VuKSBjb25zdAoreworICAgIEhUTUxUYWJsZUNhcHRpb25FbGVtZW50SW1wbCYgdGFibGVDYXB0
aW9uID0gKnN0YXRpY19jYXN0PEhUTUxUYWJsZUNhcHRpb25FbGVtZW50SW1wbCo+KGltcGwoKSk7
CisgICAgaWYgKHRva2VuID09IFRhYmxlQ2FwdGlvbkFsaWduKQorICAgICAgICByZXR1cm4gU3Ry
aW5nKHRhYmxlQ2FwdGlvbi5hbGlnbigpKTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisK
K1ZhbHVlIEhUTUxFbGVtZW50Ojp0YWJsZUNvbEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0
b2tlbikgY29uc3QKK3sKKyAgICBIVE1MVGFibGVDb2xFbGVtZW50SW1wbCYgdGFibGVDb2wgPSAq
c3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ29sRWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIHN3aXRj
aCAodG9rZW4pIHsKLSAgICBjYXNlIFRhYmxlQ2FwdGlvbkFsaWduOiAgICAgICByZXR1cm4gU3Ry
aW5nKHRhYmxlQ2FwdGlvbi5hbGlnbigpKTsKKyAgICAgICAgY2FzZSBUYWJsZUNvbEFsaWduOiAg
ICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNvbC5hbGlnbigpKTsKKyAgICAgICAgY2FzZSBU
YWJsZUNvbENoOiAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNvbC5jaCgpKTsKKyAg
ICAgICAgY2FzZSBUYWJsZUNvbENoT2ZmOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNv
bC5jaE9mZigpKTsKKyAgICAgICAgY2FzZSBUYWJsZUNvbFNwYW46ICAgICAgICAgICAgcmV0dXJu
IE51bWJlcih0YWJsZUNvbC5zcGFuKCkpOworICAgICAgICBjYXNlIFRhYmxlQ29sVkFsaWduOiAg
ICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ29sLnZBbGlnbigpKTsKKyAgICAgICAgY2FzZSBU
YWJsZUNvbFdpZHRoOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNvbC53aWR0aCgpKTsK
ICAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfQ09MOiB7Ci0gICAgSFRNTFRhYmxlQ29s
RWxlbWVudEltcGwgJnRhYmxlQ29sID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ29sRWxlbWVudElt
cGwgJj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgVGFibGVDb2xB
bGlnbjogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVDb2wuYWxpZ24oKSk7Ci0gICAgY2Fz
ZSBUYWJsZUNvbENoOiAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNvbC5jaCgpKTsK
LSAgICBjYXNlIFRhYmxlQ29sQ2hPZmY6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ29s
LmNoT2ZmKCkpOwotICAgIGNhc2UgVGFibGVDb2xTcGFuOiAgICAgICAgICAgIHJldHVybiBOdW1i
ZXIodGFibGVDb2wuc3BhbigpKTsKLSAgICBjYXNlIFRhYmxlQ29sVkFsaWduOiAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKHRhYmxlQ29sLnZBbGlnbigpKTsKLSAgICBjYXNlIFRhYmxlQ29sV2lkdGg6
ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ29sLndpZHRoKCkpOworICAgIHJldHVybiBV
bmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OnRhYmxlU2VjdGlvbkdldHRlcihF
eGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MVGFibGVTZWN0aW9u
RWxlbWVudEltcGwmIHRhYmxlU2VjdGlvbiA9ICpzdGF0aWNfY2FzdDxIVE1MVGFibGVTZWN0aW9u
RWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2Fz
ZSBUYWJsZVNlY3Rpb25BbGlnbjogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVTZWN0aW9u
LmFsaWduKCkpOworICAgICAgICBjYXNlIFRhYmxlU2VjdGlvbkNoOiAgICAgICAgICAgICAgcmV0
dXJuIFN0cmluZyh0YWJsZVNlY3Rpb24uY2goKSk7CisgICAgICAgIGNhc2UgVGFibGVTZWN0aW9u
Q2hPZmY6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlU2VjdGlvbi5jaE9mZigpKTsKKyAg
ICAgICAgY2FzZSBUYWJsZVNlY3Rpb25WQWxpZ246ICAgICAgICAgIHJldHVybiBTdHJpbmcodGFi
bGVTZWN0aW9uLnZBbGlnbigpKTsKKyAgICAgICAgY2FzZSBUYWJsZVNlY3Rpb25Sb3dzOiAgICAg
ICAgICAgIHJldHVybiBnZXRIVE1MQ29sbGVjdGlvbihleGVjLCB0YWJsZVNlY3Rpb24ucm93cygp
LmdldCgpKTsgLy8gdHlwZSBIVE1MQ29sbGVjdGlvbgogICAgIH0KLSAgfQotICBicmVhazsKLSAg
Y2FzZSBJRF9USEVBRDoKLSAgY2FzZSBJRF9UQk9EWToKLSAgY2FzZSBJRF9URk9PVDogewotICAg
IEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbCAmdGFibGVTZWN0aW9uID0gc3RhdGljX2Nhc3Q8
SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgIHN3aXRjaCAodG9r
ZW4pIHsKLSAgICBjYXNlIFRhYmxlU2VjdGlvbkFsaWduOiAgICAgICAgICAgcmV0dXJuIFN0cmlu
Zyh0YWJsZVNlY3Rpb24uYWxpZ24oKSk7Ci0gICAgY2FzZSBUYWJsZVNlY3Rpb25DaDogICAgICAg
ICAgICAgIHJldHVybiBTdHJpbmcodGFibGVTZWN0aW9uLmNoKCkpOwotICAgIGNhc2UgVGFibGVT
ZWN0aW9uQ2hPZmY6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlU2VjdGlvbi5jaE9mZigp
KTsKLSAgICBjYXNlIFRhYmxlU2VjdGlvblZBbGlnbjogICAgICAgICAgcmV0dXJuIFN0cmluZyh0
YWJsZVNlY3Rpb24udkFsaWduKCkpOwotICAgIGNhc2UgVGFibGVTZWN0aW9uUm93czogICAgICAg
ICAgICByZXR1cm4gZ2V0SFRNTENvbGxlY3Rpb24oZXhlYywgdGFibGVTZWN0aW9uLnJvd3MoKS5n
ZXQoKSk7IC8vIHR5cGUgSFRNTENvbGxlY3Rpb24KKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9
CisKK1ZhbHVlIEhUTUxFbGVtZW50Ojp0YWJsZVJvd0dldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGlu
dCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MVGFibGVSb3dFbGVtZW50SW1wbCYgdGFibGVSb3cg
PSAqc3RhdGljX2Nhc3Q8SFRNTFRhYmxlUm93RWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3
aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBUYWJsZVJvd1Jvd0luZGV4OiAgICAgICAgcmV0
dXJuIE51bWJlcih0YWJsZVJvdy5yb3dJbmRleCgpKTsKKyAgICAgICAgY2FzZSBUYWJsZVJvd1Nl
Y3Rpb25Sb3dJbmRleDogcmV0dXJuIE51bWJlcih0YWJsZVJvdy5zZWN0aW9uUm93SW5kZXgoKSk7
CisgICAgICAgIGNhc2UgVGFibGVSb3dDZWxsczogICAgICAgICAgIHJldHVybiBnZXRIVE1MQ29s
bGVjdGlvbihleGVjLCB0YWJsZVJvdy5jZWxscygpLmdldCgpKTsgLy8gdHlwZSBIVE1MQ29sbGVj
dGlvbgorICAgICAgICBjYXNlIFRhYmxlUm93QWxpZ246ICAgICAgICAgICByZXR1cm4gU3RyaW5n
KHRhYmxlUm93LmFsaWduKCkpOworICAgICAgICBjYXNlIFRhYmxlUm93QmdDb2xvcjogICAgICAg
ICByZXR1cm4gU3RyaW5nKHRhYmxlUm93LmJnQ29sb3IoKSk7CisgICAgICAgIGNhc2UgVGFibGVS
b3dDaDogICAgICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVSb3cuY2goKSk7CisgICAgICAg
IGNhc2UgVGFibGVSb3dDaE9mZjogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVSb3cuY2hP
ZmYoKSk7CisgICAgICAgIGNhc2UgVGFibGVSb3dWQWxpZ246ICAgICAgICAgIHJldHVybiBTdHJp
bmcodGFibGVSb3cudkFsaWduKCkpOwogICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9U
UjogewotICAgSFRNTFRhYmxlUm93RWxlbWVudEltcGwgJnRhYmxlUm93ID0gc3RhdGljX2Nhc3Q8
SFRNTFRhYmxlUm93RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICBzd2l0Y2ggKHRva2VuKSB7
Ci0gICBjYXNlIFRhYmxlUm93Um93SW5kZXg6ICAgICAgICByZXR1cm4gTnVtYmVyKHRhYmxlUm93
LnJvd0luZGV4KCkpOwotICAgY2FzZSBUYWJsZVJvd1NlY3Rpb25Sb3dJbmRleDogcmV0dXJuIE51
bWJlcih0YWJsZVJvdy5zZWN0aW9uUm93SW5kZXgoKSk7Ci0gICBjYXNlIFRhYmxlUm93Q2VsbHM6
ICAgICAgICAgICByZXR1cm4gZ2V0SFRNTENvbGxlY3Rpb24oZXhlYywgdGFibGVSb3cuY2VsbHMo
KS5nZXQoKSk7IC8vIHR5cGUgSFRNTENvbGxlY3Rpb24KLSAgIGNhc2UgVGFibGVSb3dBbGlnbjog
ICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVSb3cuYWxpZ24oKSk7Ci0gICBjYXNlIFRhYmxl
Um93QmdDb2xvcjogICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlUm93LmJnQ29sb3IoKSk7Ci0g
ICBjYXNlIFRhYmxlUm93Q2g6ICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlUm93LmNo
KCkpOwotICAgY2FzZSBUYWJsZVJvd0NoT2ZmOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJs
ZVJvdy5jaE9mZigpKTsKLSAgIGNhc2UgVGFibGVSb3dWQWxpZ246ICAgICAgICAgIHJldHVybiBT
dHJpbmcodGFibGVSb3cudkFsaWduKCkpOwotICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElE
X1RIOgotICBjYXNlIElEX1REOiB7Ci0gICAgSFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsICZ0YWJs
ZUNlbGwgPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVDZWxsRWxlbWVudEltcGwgJj4oZWxlbWVudCk7
Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgVGFibGVDZWxsQ2VsbEluZGV4OiAgICAg
ICByZXR1cm4gTnVtYmVyKHRhYmxlQ2VsbC5jZWxsSW5kZXgoKSk7Ci0gICAgY2FzZSBUYWJsZUNl
bGxBYmJyOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVDZWxsLmFiYnIoKSk7Ci0gICAg
Y2FzZSBUYWJsZUNlbGxBbGlnbjogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVDZWxsLmFs
aWduKCkpOwotICAgIGNhc2UgVGFibGVDZWxsQXhpczogICAgICAgICAgICByZXR1cm4gU3RyaW5n
KHRhYmxlQ2VsbC5heGlzKCkpOwotICAgIGNhc2UgVGFibGVDZWxsQmdDb2xvcjogICAgICAgICBy
ZXR1cm4gU3RyaW5nKHRhYmxlQ2VsbC5iZ0NvbG9yKCkpOwotICAgIGNhc2UgVGFibGVDZWxsQ2g6
ICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ2VsbC5jaCgpKTsKLSAgICBjYXNlIFRh
YmxlQ2VsbENoT2ZmOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNlbGwuY2hPZmYoKSk7
Ci0gICAgY2FzZSBUYWJsZUNlbGxDb2xTcGFuOiAgICAgICAgIHJldHVybiBOdW1iZXIodGFibGVD
ZWxsLmNvbFNwYW4oKSk7Ci0gICAgY2FzZSBUYWJsZUNlbGxIZWFkZXJzOiAgICAgICAgIHJldHVy
biBTdHJpbmcodGFibGVDZWxsLmhlYWRlcnMoKSk7Ci0gICAgY2FzZSBUYWJsZUNlbGxIZWlnaHQ6
ICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVDZWxsLmhlaWdodCgpKTsKLSAgICBjYXNlIFRh
YmxlQ2VsbE5vV3JhcDogICAgICAgICAgcmV0dXJuIEJvb2xlYW4odGFibGVDZWxsLm5vV3JhcCgp
KTsKLSAgICBjYXNlIFRhYmxlQ2VsbFJvd1NwYW46ICAgICAgICAgcmV0dXJuIE51bWJlcih0YWJs
ZUNlbGwucm93U3BhbigpKTsKLSAgICBjYXNlIFRhYmxlQ2VsbFNjb3BlOiAgICAgICAgICAgcmV0
dXJuIFN0cmluZyh0YWJsZUNlbGwuc2NvcGUoKSk7Ci0gICAgY2FzZSBUYWJsZUNlbGxWQWxpZ246
ICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVDZWxsLnZBbGlnbigpKTsKLSAgICBjYXNlIFRh
YmxlQ2VsbFdpZHRoOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNlbGwud2lkdGgoKSk7
CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6dGFibGVD
ZWxsR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxU
YWJsZUNlbGxFbGVtZW50SW1wbCYgdGFibGVDZWxsID0gKnN0YXRpY19jYXN0PEhUTUxUYWJsZUNl
bGxFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICBj
YXNlIFRhYmxlQ2VsbENlbGxJbmRleDogICAgICAgcmV0dXJuIE51bWJlcih0YWJsZUNlbGwuY2Vs
bEluZGV4KCkpOworICAgICAgICBjYXNlIFRhYmxlQ2VsbEFiYnI6ICAgICAgICAgICAgcmV0dXJu
IFN0cmluZyh0YWJsZUNlbGwuYWJicigpKTsKKyAgICAgICAgY2FzZSBUYWJsZUNlbGxBbGlnbjog
ICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVDZWxsLmFsaWduKCkpOworICAgICAgICBjYXNl
IFRhYmxlQ2VsbEF4aXM6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNlbGwuYXhpcygp
KTsKKyAgICAgICAgY2FzZSBUYWJsZUNlbGxCZ0NvbG9yOiAgICAgICAgIHJldHVybiBTdHJpbmco
dGFibGVDZWxsLmJnQ29sb3IoKSk7CisgICAgICAgIGNhc2UgVGFibGVDZWxsQ2g6ICAgICAgICAg
ICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ2VsbC5jaCgpKTsKKyAgICAgICAgY2FzZSBUYWJsZUNl
bGxDaE9mZjogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVDZWxsLmNoT2ZmKCkpOworICAg
ICAgICBjYXNlIFRhYmxlQ2VsbENvbFNwYW46ICAgICAgICAgcmV0dXJuIE51bWJlcih0YWJsZUNl
bGwuY29sU3BhbigpKTsKKyAgICAgICAgY2FzZSBUYWJsZUNlbGxIZWFkZXJzOiAgICAgICAgIHJl
dHVybiBTdHJpbmcodGFibGVDZWxsLmhlYWRlcnMoKSk7CisgICAgICAgIGNhc2UgVGFibGVDZWxs
SGVpZ2h0OiAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ2VsbC5oZWlnaHQoKSk7CisgICAg
ICAgIGNhc2UgVGFibGVDZWxsTm9XcmFwOiAgICAgICAgICByZXR1cm4gQm9vbGVhbih0YWJsZUNl
bGwubm9XcmFwKCkpOworICAgICAgICBjYXNlIFRhYmxlQ2VsbFJvd1NwYW46ICAgICAgICAgcmV0
dXJuIE51bWJlcih0YWJsZUNlbGwucm93U3BhbigpKTsKKyAgICAgICAgY2FzZSBUYWJsZUNlbGxT
Y29wZTogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVDZWxsLnNjb3BlKCkpOworICAgICAg
ICBjYXNlIFRhYmxlQ2VsbFZBbGlnbjogICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNlbGwu
dkFsaWduKCkpOworICAgICAgICBjYXNlIFRhYmxlQ2VsbFdpZHRoOiAgICAgICAgICAgcmV0dXJu
IFN0cmluZyh0YWJsZUNlbGwud2lkdGgoKSk7CiAgICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNl
IElEX0ZSQU1FU0VUOiB7Ci0gICAgSFRNTEZyYW1lU2V0RWxlbWVudEltcGwgJmZyYW1lU2V0ID0g
c3RhdGljX2Nhc3Q8SFRNTEZyYW1lU2V0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgcmV0
dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6ZnJhbWVTZXRHZXR0ZXIo
RXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTEZyYW1lU2V0RWxl
bWVudEltcGwmIGZyYW1lU2V0ID0gKnN0YXRpY19jYXN0PEhUTUxGcmFtZVNldEVsZW1lbnRJbXBs
Kj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBGcmFtZVNldENvbHM6
ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhmcmFtZVNldC5jb2xzKCkpOwotICAgIGNhc2UgRnJh
bWVTZXRSb3dzOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoZnJhbWVTZXQucm93cygpKTsKKyAg
ICAgICAgY2FzZSBGcmFtZVNldENvbHM6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhmcmFtZVNl
dC5jb2xzKCkpOworICAgICAgICBjYXNlIEZyYW1lU2V0Um93czogICAgICAgICAgICByZXR1cm4g
U3RyaW5nKGZyYW1lU2V0LnJvd3MoKSk7CiAgICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElE
X0ZSQU1FOiB7Ci0gICAgSFRNTEZyYW1lRWxlbWVudEltcGwgJmZyYW1lRWxlbWVudCA9IHN0YXRp
Y19jYXN0PEhUTUxGcmFtZUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgIHN3aXRjaCAodG9r
ZW4pIHsKLSAgICBjYXNlIEZyYW1lQ29udGVudERvY3VtZW50OiByZXR1cm4gY2hlY2tOb2RlU2Vj
dXJpdHkoZXhlYyxmcmFtZUVsZW1lbnQuY29udGVudERvY3VtZW50KCkpID8gCi0JCQkJICAgICAg
Z2V0RE9NTm9kZShleGVjLCBmcmFtZUVsZW1lbnQuY29udGVudERvY3VtZW50KCkpIDogVW5kZWZp
bmVkKCk7Ci0gICAgY2FzZSBGcmFtZUNvbnRlbnRXaW5kb3c6ICAgcmV0dXJuIGNoZWNrTm9kZVNl
Y3VyaXR5KGV4ZWMsZnJhbWVFbGVtZW50LmNvbnRlbnREb2N1bWVudCgpKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgPyBXaW5kb3c6OnJldHJpZXZlKGZyYW1lRWxlbWVudC5j
b250ZW50UGFydCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBVbmRl
ZmluZWQoKTsKLSAgICBjYXNlIEZyYW1lRnJhbWVCb3JkZXI6ICAgICByZXR1cm4gU3RyaW5nKGZy
YW1lRWxlbWVudC5mcmFtZUJvcmRlcigpKTsKLSAgICBjYXNlIEZyYW1lTG9uZ0Rlc2M6ICAgICAg
ICByZXR1cm4gU3RyaW5nKGZyYW1lRWxlbWVudC5sb25nRGVzYygpKTsKLSAgICBjYXNlIEZyYW1l
TWFyZ2luSGVpZ2h0OiAgICByZXR1cm4gU3RyaW5nKGZyYW1lRWxlbWVudC5tYXJnaW5IZWlnaHQo
KSk7Ci0gICAgY2FzZSBGcmFtZU1hcmdpbldpZHRoOiAgICAgcmV0dXJuIFN0cmluZyhmcmFtZUVs
ZW1lbnQubWFyZ2luV2lkdGgoKSk7Ci0gICAgY2FzZSBGcmFtZU5hbWU6ICAgICAgICAgICAgcmV0
dXJuIFN0cmluZyhmcmFtZUVsZW1lbnQubmFtZSgpKTsKLSAgICBjYXNlIEZyYW1lTm9SZXNpemU6
ICAgICAgICByZXR1cm4gQm9vbGVhbihmcmFtZUVsZW1lbnQubm9SZXNpemUoKSk7Ci0gICAgY2Fz
ZSBGcmFtZVNjcm9sbGluZzogICAgICAgcmV0dXJuIFN0cmluZyhmcmFtZUVsZW1lbnQuc2Nyb2xs
aW5nKCkpOwotICAgIGNhc2UgRnJhbWVTcmM6Ci0gICAgY2FzZSBGcmFtZUxvY2F0aW9uOiAgICAg
ICAgcmV0dXJuIFN0cmluZyhmcmFtZUVsZW1lbnQuc3JjKCkpOworICAgIHJldHVybiBVbmRlZmlu
ZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OmZyYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhl
YywgaW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxGcmFtZUVsZW1lbnRJbXBsJiBmcmFtZUVs
ZW1lbnQgPSAqc3RhdGljX2Nhc3Q8SFRNTEZyYW1lRWxlbWVudEltcGwqPihpbXBsKCkpOworICAg
IHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBGcmFtZUNvbnRlbnREb2N1bWVudDogcmV0
dXJuIGNoZWNrTm9kZVNlY3VyaXR5KGV4ZWMsZnJhbWVFbGVtZW50LmNvbnRlbnREb2N1bWVudCgp
KSA/IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0RE9NTm9k
ZShleGVjLCBmcmFtZUVsZW1lbnQuY29udGVudERvY3VtZW50KCkpIDogVW5kZWZpbmVkKCk7Cisg
ICAgICAgIGNhc2UgRnJhbWVDb250ZW50V2luZG93OiAgIHJldHVybiBjaGVja05vZGVTZWN1cml0
eShleGVjLGZyYW1lRWxlbWVudC5jb250ZW50RG9jdW1lbnQoKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA/IFdpbmRvdzo6cmV0cmlldmUoZnJhbWVFbGVtZW50LmNv
bnRlbnRQYXJ0KCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBV
bmRlZmluZWQoKTsKKyAgICAgICAgY2FzZSBGcmFtZUZyYW1lQm9yZGVyOiAgICAgcmV0dXJuIFN0
cmluZyhmcmFtZUVsZW1lbnQuZnJhbWVCb3JkZXIoKSk7CisgICAgICAgIGNhc2UgRnJhbWVMb25n
RGVzYzogICAgICAgIHJldHVybiBTdHJpbmcoZnJhbWVFbGVtZW50LmxvbmdEZXNjKCkpOworICAg
ICAgICBjYXNlIEZyYW1lTWFyZ2luSGVpZ2h0OiAgICByZXR1cm4gU3RyaW5nKGZyYW1lRWxlbWVu
dC5tYXJnaW5IZWlnaHQoKSk7CisgICAgICAgIGNhc2UgRnJhbWVNYXJnaW5XaWR0aDogICAgIHJl
dHVybiBTdHJpbmcoZnJhbWVFbGVtZW50Lm1hcmdpbldpZHRoKCkpOworICAgICAgICBjYXNlIEZy
YW1lTmFtZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGZyYW1lRWxlbWVudC5uYW1lKCkpOwor
ICAgICAgICBjYXNlIEZyYW1lTm9SZXNpemU6ICAgICAgICByZXR1cm4gQm9vbGVhbihmcmFtZUVs
ZW1lbnQubm9SZXNpemUoKSk7CisgICAgICAgIGNhc2UgRnJhbWVTY3JvbGxpbmc6ICAgICAgIHJl
dHVybiBTdHJpbmcoZnJhbWVFbGVtZW50LnNjcm9sbGluZygpKTsKKyAgICAgICAgY2FzZSBGcmFt
ZVNyYzoKKyAgICAgICAgY2FzZSBGcmFtZUxvY2F0aW9uOiAgICAgICAgcmV0dXJuIFN0cmluZyhm
cmFtZUVsZW1lbnQuc3JjKCkpOwogICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9JRlJB
TUU6IHsKLSAgICBIVE1MSUZyYW1lRWxlbWVudEltcGwgJmlGcmFtZSA9IHN0YXRpY19jYXN0PEhU
TUxJRnJhbWVFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0g
ICAgY2FzZSBJRnJhbWVBbGlnbjogICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpRnJhbWUu
YWxpZ24oKSk7Ci0gICAgICAvLyAjIyMgc2VjdXJpdHkgY2hlY2sgPwotICAgIGNhc2UgSUZyYW1l
RG9jdW1lbnQ6IC8vIG5vbi1zdGFuZGFyZCwgbWFwcGVkIHRvIGNvbnRlbnREb2N1bWVudAotICAg
IGNhc2UgSUZyYW1lQ29udGVudERvY3VtZW50OiByZXR1cm4gY2hlY2tOb2RlU2VjdXJpdHkoZXhl
YyxpRnJhbWUuY29udGVudERvY3VtZW50KCkpID8gCi0JCQkJICBnZXRET01Ob2RlKGV4ZWMsIGlG
cmFtZS5jb250ZW50RG9jdW1lbnQoKSkgOiBVbmRlZmluZWQoKTsKLSAgICBjYXNlIElGcmFtZUNv
bnRlbnRXaW5kb3c6CXJldHVybiBjaGVja05vZGVTZWN1cml0eShleGVjLGlGcmFtZS5jb250ZW50
RG9jdW1lbnQoKSkgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFdpbmRv
dzo6cmV0cmlldmUoaUZyYW1lLmNvbnRlbnRQYXJ0KCkpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA6IFVuZGVmaW5lZCgpOwotICAgIGNhc2UgSUZyYW1lRnJhbWVCb3JkZXI6
ICAgICByZXR1cm4gU3RyaW5nKGlGcmFtZS5mcmFtZUJvcmRlcigpKTsKLSAgICBjYXNlIElGcmFt
ZUhlaWdodDogICAgICAgICAgcmV0dXJuIFN0cmluZyhpRnJhbWUuaGVpZ2h0KCkpOwotICAgIGNh
c2UgSUZyYW1lTG9uZ0Rlc2M6ICAgICAgICByZXR1cm4gU3RyaW5nKGlGcmFtZS5sb25nRGVzYygp
KTsKLSAgICBjYXNlIElGcmFtZU1hcmdpbkhlaWdodDogICAgcmV0dXJuIFN0cmluZyhpRnJhbWUu
bWFyZ2luSGVpZ2h0KCkpOwotICAgIGNhc2UgSUZyYW1lTWFyZ2luV2lkdGg6ICAgICByZXR1cm4g
U3RyaW5nKGlGcmFtZS5tYXJnaW5XaWR0aCgpKTsKLSAgICBjYXNlIElGcmFtZU5hbWU6ICAgICAg
ICAgICAgcmV0dXJuIFN0cmluZyhpRnJhbWUubmFtZSgpKTsKLSAgICBjYXNlIElGcmFtZVNjcm9s
bGluZzogICAgICAgcmV0dXJuIFN0cmluZyhpRnJhbWUuc2Nyb2xsaW5nKCkpOwotICAgIGNhc2Ug
SUZyYW1lU3JjOiAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGlGcmFtZS5zcmMoKSk7Ci0gICAg
Y2FzZSBJRnJhbWVXaWR0aDogICAgICAgICAgIHJldHVybiBTdHJpbmcoaUZyYW1lLndpZHRoKCkp
OworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OmlGcmFt
ZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MSUZy
YW1lRWxlbWVudEltcGwmIGlGcmFtZSA9ICpzdGF0aWNfY2FzdDxIVE1MSUZyYW1lRWxlbWVudElt
cGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBJRnJhbWVB
bGlnbjogICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpRnJhbWUuYWxpZ24oKSk7CisgICAg
ICAgICAgLy8gIyMjIHNlY3VyaXR5IGNoZWNrID8KKyAgICAgICAgY2FzZSBJRnJhbWVEb2N1bWVu
dDogLy8gbm9uLXN0YW5kYXJkLCBtYXBwZWQgdG8gY29udGVudERvY3VtZW50CisgICAgICAgIGNh
c2UgSUZyYW1lQ29udGVudERvY3VtZW50OiByZXR1cm4gY2hlY2tOb2RlU2VjdXJpdHkoZXhlYyxp
RnJhbWUuY29udGVudERvY3VtZW50KCkpID8gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdldERPTU5vZGUoZXhlYywgaUZyYW1lLmNvbnRlbnREb2N1bWVudCgpKSA6IFVu
ZGVmaW5lZCgpOworICAgICAgICBjYXNlIElGcmFtZUNvbnRlbnRXaW5kb3c6CXJldHVybiBjaGVj
a05vZGVTZWN1cml0eShleGVjLGlGcmFtZS5jb250ZW50RG9jdW1lbnQoKSkgCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBXaW5kb3c6OnJldHJpZXZlKGlGcmFtZS5j
b250ZW50UGFydCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDog
VW5kZWZpbmVkKCk7CisgICAgICAgIGNhc2UgSUZyYW1lRnJhbWVCb3JkZXI6ICAgICByZXR1cm4g
U3RyaW5nKGlGcmFtZS5mcmFtZUJvcmRlcigpKTsKKyAgICAgICAgY2FzZSBJRnJhbWVIZWlnaHQ6
ICAgICAgICAgIHJldHVybiBTdHJpbmcoaUZyYW1lLmhlaWdodCgpKTsKKyAgICAgICAgY2FzZSBJ
RnJhbWVMb25nRGVzYzogICAgICAgIHJldHVybiBTdHJpbmcoaUZyYW1lLmxvbmdEZXNjKCkpOwor
ICAgICAgICBjYXNlIElGcmFtZU1hcmdpbkhlaWdodDogICAgcmV0dXJuIFN0cmluZyhpRnJhbWUu
bWFyZ2luSGVpZ2h0KCkpOworICAgICAgICBjYXNlIElGcmFtZU1hcmdpbldpZHRoOiAgICAgcmV0
dXJuIFN0cmluZyhpRnJhbWUubWFyZ2luV2lkdGgoKSk7CisgICAgICAgIGNhc2UgSUZyYW1lTmFt
ZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGlGcmFtZS5uYW1lKCkpOworICAgICAgICBjYXNl
IElGcmFtZVNjcm9sbGluZzogICAgICAgcmV0dXJuIFN0cmluZyhpRnJhbWUuc2Nyb2xsaW5nKCkp
OworICAgICAgICBjYXNlIElGcmFtZVNyYzogICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpRnJh
bWUuc3JjKCkpOworICAgICAgICBjYXNlIElGcmFtZVdpZHRoOiAgICAgICAgICAgcmV0dXJuIFN0
cmluZyhpRnJhbWUud2lkdGgoKSk7CiAgICAgfQotICAgIGJyZWFrOwotICB9Ci0gIH0gLy8geGVt
YWNzIChvciBhcm50KSBjb3VsZCBiZSBhIGJpdCBzbWFydGVyIHdoZW4gaXQgY29tZXMgdG8gaW5k
ZW50aW5nIHN3aXRjaCgpZXMgOykKLSAgLy8gaXRzIG5vdCBhcm50IHRvIGJsYW1lIC0gaXRzIHRo
ZSBvcmlnaW5hbCBTdHJvdXN0cnVwIHN0eWxlIHdlIGxpa2UgOikgKERpcmspCisgICAgcmV0dXJu
IFVuZGVmaW5lZCgpOworfQogCi0gIC8vIGdlbmVyaWMgcHJvcGVydGllcwotICBzd2l0Y2ggKHRv
a2VuKSB7Ci0gIGNhc2UgRWxlbWVudElkOgotICAgICAgLy8gaWh0LmNvbSByZWxpZXMgb24gdGhp
cyB2YWx1ZSBiZWluZyAiIiB3aGVuIG5vIGlkIGlzIHByZXNlbnQuICBPdGhlciBicm93c2VycyBk
byB0aGlzIGFzIHdlbGwuCi0gICAgICAvLyBTbyB3ZSB1c2UgU3RyaW5nKCkgaW5zdGVhZCBvZiBT
dHJpbmcoKSBoZXJlLgotICAgIHJldHVybiBTdHJpbmcoZWxlbWVudC5pZERPTSgpKTsKLSAgY2Fz
ZSBFbGVtZW50VGl0bGU6Ci0gICAgcmV0dXJuIFN0cmluZyhlbGVtZW50LnRpdGxlKCkpOwotICBj
YXNlIEVsZW1lbnRMYW5nOgotICAgIHJldHVybiBTdHJpbmcoZWxlbWVudC5sYW5nKCkpOwotICBj
YXNlIEVsZW1lbnREaXI6Ci0gICAgcmV0dXJuIFN0cmluZyhlbGVtZW50LmRpcigpKTsKLSAgY2Fz
ZSBFbGVtZW50Q2xhc3NOYW1lOgotICAgIHJldHVybiBTdHJpbmcoZWxlbWVudC5jbGFzc05hbWUo
KSk7Ci0gIGNhc2UgRWxlbWVudElubmVySFRNTDoKLSAgICByZXR1cm4gU3RyaW5nKGVsZW1lbnQu
aW5uZXJIVE1MKCkpOwotICBjYXNlIEVsZW1lbnRJbm5lclRleHQ6Ci0gICAgaWYgKERvY3VtZW50
SW1wbCogZG9jID0gaW1wbCgpLT5nZXREb2N1bWVudCgpKQotICAgICAgZG9jLT51cGRhdGVMYXlv
dXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKLSAgICByZXR1cm4gU3RyaW5nKGVsZW1lbnQu
aW5uZXJUZXh0KCkpOwotICBjYXNlIEVsZW1lbnRPdXRlckhUTUw6Ci0gICAgcmV0dXJuIFN0cmlu
ZyhlbGVtZW50Lm91dGVySFRNTCgpKTsKLSAgY2FzZSBFbGVtZW50T3V0ZXJUZXh0OgotICAgIHJl
dHVybiBTdHJpbmcoZWxlbWVudC5vdXRlclRleHQoKSk7Ci0gIGNhc2UgRWxlbWVudERvY3VtZW50
OgotICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsZWxlbWVudC5vd25lckRvY3VtZW50KCkpOwot
ICBjYXNlIEVsZW1lbnRDaGlsZHJlbjoKLSAgICByZXR1cm4gZ2V0SFRNTENvbGxlY3Rpb24oZXhl
YywgZWxlbWVudC5jaGlsZHJlbigpLmdldCgpKTsKLSAgY2FzZSBFbGVtZW50Q29udGVudEVkaXRh
YmxlOgotICAgIHJldHVybiBTdHJpbmcoZWxlbWVudC5jb250ZW50RWRpdGFibGUoKSk7Ci0gIGNh
c2UgRWxlbWVudElzQ29udGVudEVkaXRhYmxlOgotICAgIHJldHVybiBCb29sZWFuKGVsZW1lbnQu
aXNDb250ZW50RWRpdGFibGUoKSk7Ci0gIC8vICMjIyB3aGF0IGFib3V0IHN0eWxlPyBvciBpcyB0
aGlzIHVzZWQgaW5zdGVhZCBmb3IgRE9NMiBzdHlsZXNoZWV0cz8KLSAgfQotICBrZFdhcm5pbmco
KSA8PCAiSFRNTEVsZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkgdW5oYW5kbGVkIHRva2VuICIgPDwg
dG9rZW4gPDwgZW5kbDsKLSAgcmV0dXJuIFVuZGVmaW5lZCgpOworVmFsdWUgSFRNTEVsZW1lbnQ6
Om1hcnF1ZWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAg
Ly8gRklYTUU6IEZpbmQgb3V0IHdoYXQgV2luSUUgZXhwb3NlcyBhcyBwcm9wZXJ0aWVzIGFuZCBp
bXBsZW1lbnQgdGhpcy4KKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxF
bGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25z
dAoreworICAgIC8vIENoZWNrIG91ciBzZXQgb2YgZ2VuZXJpYyBwcm9wZXJ0aWVzIGZpcnN0Lgor
ICAgIEhUTUxFbGVtZW50SW1wbCAmZWxlbWVudCA9ICpzdGF0aWNfY2FzdDxIVE1MRWxlbWVudElt
cGwgKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgRWxlbWVu
dElkOgorICAgICAgICAvLyBpaHQuY29tIHJlbGllcyBvbiB0aGlzIHZhbHVlIGJlaW5nICIiIHdo
ZW4gbm8gaWQgaXMgcHJlc2VudC4gIE90aGVyIGJyb3dzZXJzIGRvIHRoaXMgYXMgd2VsbC4KKyAg
ICAgICAgLy8gU28gd2UgdXNlIFN0cmluZygpIGluc3RlYWQgb2YgU3RyaW5nKCkgaGVyZS4KKyAg
ICAgICAgcmV0dXJuIFN0cmluZyhlbGVtZW50LmlkKCkpOworICAgICAgICBjYXNlIEVsZW1lbnRU
aXRsZToKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcoZWxlbWVudC50aXRsZSgpKTsKKyAgICAg
ICAgY2FzZSBFbGVtZW50TGFuZzoKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcoZWxlbWVudC5s
YW5nKCkpOworICAgICAgICBjYXNlIEVsZW1lbnREaXI6CisgICAgICAgICAgICByZXR1cm4gU3Ry
aW5nKGVsZW1lbnQuZGlyKCkpOworICAgICAgICBjYXNlIEVsZW1lbnRDbGFzc05hbWU6CisgICAg
ICAgICAgICByZXR1cm4gU3RyaW5nKGVsZW1lbnQuY2xhc3NOYW1lKCkpOworICAgICAgICBjYXNl
IEVsZW1lbnRJbm5lckhUTUw6CisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGVsZW1lbnQuaW5u
ZXJIVE1MKCkpOworICAgICAgICBjYXNlIEVsZW1lbnRJbm5lclRleHQ6CisgICAgICAgICAgICBp
ZiAoRG9jdW1lbnRJbXBsKiBkb2MgPSBpbXBsKCktPmdldERvY3VtZW50KCkpCisgICAgICAgICAg
ICAgICAgZG9jLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKKyAgICAg
ICAgICAgIHJldHVybiBTdHJpbmcoZWxlbWVudC5pbm5lclRleHQoKSk7CisgICAgICAgIGNhc2Ug
RWxlbWVudE91dGVySFRNTDoKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcoZWxlbWVudC5vdXRl
ckhUTUwoKSk7CisgICAgICAgIGNhc2UgRWxlbWVudE91dGVyVGV4dDoKKyAgICAgICAgICAgIHJl
dHVybiBTdHJpbmcoZWxlbWVudC5vdXRlclRleHQoKSk7CisgICAgICAgIGNhc2UgRWxlbWVudERv
Y3VtZW50OgorICAgICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyxlbGVtZW50Lm93bmVy
RG9jdW1lbnQoKSk7CisgICAgICAgIGNhc2UgRWxlbWVudENoaWxkcmVuOgorICAgICAgICAgICAg
cmV0dXJuIGdldEhUTUxDb2xsZWN0aW9uKGV4ZWMsIGVsZW1lbnQuY2hpbGRyZW4oKS5nZXQoKSk7
CisgICAgICAgIGNhc2UgRWxlbWVudENvbnRlbnRFZGl0YWJsZToKKyAgICAgICAgICAgIHJldHVy
biBTdHJpbmcoZWxlbWVudC5jb250ZW50RWRpdGFibGUoKSk7CisgICAgICAgIGNhc2UgRWxlbWVu
dElzQ29udGVudEVkaXRhYmxlOgorICAgICAgICAgICAgcmV0dXJuIEJvb2xlYW4oZWxlbWVudC5p
c0NvbnRlbnRFZGl0YWJsZSgpKTsKKyAgICB9CisKKyAgICAvLyBOb3cgY2hlY2sgdGhlIHByb3Bl
cnRpZXMgc3BlY2lmaWMgdG8gb3VyIGVsZW1lbnQgdHlwZS4KKyAgICBjb25zdCBHZXRTZXRJbmZv
KiBpbmZvID0gZ2V0U2V0SW5mbygpOworICAgIGlmIChpbmZvICYmIGluZm8tPm1fZ2V0dGVyKQor
ICAgICAgICByZXR1cm4gKHRoaXMtPiooaW5mby0+bV9nZXR0ZXIpKShleGVjLCB0b2tlbik7Cisg
ICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCiBib29sIEtKUzo6SFRNTEVsZW1lbnQ6Omhhc093
blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1l
KSBjb25zdAogewogI2lmZGVmIEtKU19WRVJCT1NFCi0gIC8va2REZWJ1Zyg2MDcwKSA8PCAiSFRN
TEVsZW1lbnQ6Omhhc1Byb3BlcnR5ICIgPDwgcHJvcGVydHlOYW1lLnFzdHJpbmcoKSA8PCBlbmRs
OworICAgIC8va2REZWJ1Zyg2MDcwKSA8PCAiSFRNTEVsZW1lbnQ6Omhhc1Byb3BlcnR5ICIgPDwg
cHJvcGVydHlOYW1lLnFzdHJpbmcoKSA8PCBlbmRsOwogI2VuZGlmCi0gIEhUTUxFbGVtZW50SW1w
bCAmZWxlbWVudCA9ICpzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwgKj4oaW1wbCgpKTsKLSAg
Ly8gRmlyc3QgbG9vayBhdCBkeW5hbWljIHByb3BlcnRpZXMgLSBrZWVwIHRoaXMgaW4gc3luYyB3
aXRoIHRyeUdldAotICBzd2l0Y2ggKGVsZW1lbnQuaWQoKSkgewotICAgIGNhc2UgSURfRk9STTog
ewotICAgICAgSFRNTEZvcm1FbGVtZW50SW1wbCAmZm9ybSA9IHN0YXRpY19jYXN0PEhUTUxGb3Jt
RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICAvLyBDaGVjayBpZiB3ZSdyZSByZXRyaWV2
aW5nIGFuIGVsZW1lbnQgKGJ5IGluZGV4IG9yIGJ5IG5hbWUpCi0gICAgICBib29sIG9rOwotICAg
ICAgdWludCB1ID0gcHJvcGVydHlOYW1lLnRvVUxvbmcoJm9rKTsKLSAgICAgIGlmIChvayAmJiBm
b3JtLmVsZW1lbnRzKCktPml0ZW0odSkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgaWYg
KGZvcm0uZWxlbWVudHMoKS0+bmFtZWRJdGVtKHByb3BlcnR5TmFtZS5zdHJpbmcoKSkpCi0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgSURfU0VMRUNU
OiB7Ci0gICAgICBIVE1MU2VsZWN0RWxlbWVudEltcGwgJnNlbGVjdCA9IHN0YXRpY19jYXN0PEhU
TUxTZWxlY3RFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIGJvb2wgb2s7Ci0gICAgICB1
aW50IHUgPSBwcm9wZXJ0eU5hbWUudG9VTG9uZygmb2spOwotICAgICAgaWYgKG9rICYmIHNlbGVj
dC5vcHRpb25zSFRNTENvbGxlY3Rpb24oKS0+aXRlbSh1KSkKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBJRF9JTlBVVDogewotICAgICAgSFRNTElu
cHV0RWxlbWVudEltcGwgJmlucHV0ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudEltcGwg
Jj4oZWxlbWVudCk7Ci0gICAgICBjb25zdCBIYXNoVGFibGUqIHRhYmxlID0gY2xhc3NJbmZvKCkt
PnByb3BIYXNoVGFibGU7Ci0gICAgICBjb25zdCBIYXNoRW50cnkqIGVudHJ5ID0gTG9va3VwOjpm
aW5kRW50cnkodGFibGUsIHByb3BlcnR5TmFtZSk7Ci0gICAgICBpZiAoZW50cnkpIHsKLSAgICAg
ICAgc3dpdGNoKGVudHJ5LT52YWx1ZSkgewotICAgICAgICAgIGNhc2UgSW5wdXRTZWxlY3Rpb25T
dGFydDoKLSAgICAgICAgICBjYXNlIElucHV0U2VsZWN0aW9uRW5kOgotICAgICAgICAgIGNhc2Ug
SW5wdXRTZXRTZWxlY3Rpb25SYW5nZToKLSAgICAgICAgICAgIHJldHVybiBpbnB1dC5jYW5IYXZl
U2VsZWN0aW9uKCk7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOworICAg
IEhUTUxFbGVtZW50SW1wbCAmZWxlbWVudCA9ICpzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwg
Kj4oaW1wbCgpKTsKKyAgICAvLyBGaXJzdCBsb29rIGF0IGR5bmFtaWMgcHJvcGVydGllcyAtIGtl
ZXAgdGhpcyBpbiBzeW5jIHdpdGggdHJ5R2V0CisgICAgaWYgKGVsZW1lbnQuaGFzTG9jYWxOYW1l
KEhUTUxOYW1lczo6Zm9ybSgpKSkgeworICAgICAgICBIVE1MRm9ybUVsZW1lbnRJbXBsICZmb3Jt
ID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICAgICAg
Ly8gQ2hlY2sgaWYgd2UncmUgcmV0cmlldmluZyBhbiBlbGVtZW50IChieSBpbmRleCBvciBieSBu
YW1lKQorICAgICAgICBib29sIG9rOworICAgICAgICB1aW50IHUgPSBwcm9wZXJ0eU5hbWUudG9V
TG9uZygmb2spOworICAgICAgICBpZiAob2sgJiYgZm9ybS5lbGVtZW50cygpLT5pdGVtKHUpKQor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChmb3JtLmVsZW1lbnRzKCktPm5h
bWVkSXRlbShwcm9wZXJ0eU5hbWUuc3RyaW5nKCkpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6c2Vs
ZWN0KCkpKSB7CisgICAgICAgIEhUTUxTZWxlY3RFbGVtZW50SW1wbCAmc2VsZWN0ID0gc3RhdGlj
X2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgICAgICBib29sIG9r
OworICAgICAgICB1aW50IHUgPSBwcm9wZXJ0eU5hbWUudG9VTG9uZygmb2spOworICAgICAgICBp
ZiAob2sgJiYgc2VsZWN0Lm9wdGlvbnNIVE1MQ29sbGVjdGlvbigpLT5pdGVtKHUpKQorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6aW5wdXQoKSkpIHsKKyAgICAgICAgSFRNTElucHV0RWxlbWVudEltcGwg
JmlucHV0ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Cisg
ICAgICAgIGNvbnN0IEhhc2hUYWJsZSogdGFibGUgPSBjbGFzc0luZm8oKS0+cHJvcEhhc2hUYWJs
ZTsKKyAgICAgICAgY29uc3QgSGFzaEVudHJ5KiBlbnRyeSA9IExvb2t1cDo6ZmluZEVudHJ5KHRh
YmxlLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICBpZiAoZW50cnkpIHsKKyAgICAgICAgICAgIHN3
aXRjaChlbnRyeS0+dmFsdWUpIHsKKyAgICAgICAgICAgIGNhc2UgSW5wdXRTZWxlY3Rpb25TdGFy
dDoKKyAgICAgICAgICAgIGNhc2UgSW5wdXRTZWxlY3Rpb25FbmQ6CisgICAgICAgICAgICBjYXNl
IElucHV0U2V0U2VsZWN0aW9uUmFuZ2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIGlucHV0LmNh
bkhhdmVTZWxlY3Rpb24oKTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGJyZWFrOwog
ICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KIAotICByZXR1cm4gRE9NRWxl
bWVudDo6aGFzT3duUHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lKTsKKyAgICByZXR1cm4gRE9N
RWxlbWVudDo6aGFzT3duUHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lKTsKIH0KIAogVVN0cmlu
ZyBLSlM6OkhUTUxFbGVtZW50Ojp0b1N0cmluZyhFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0CiB7Ci0g
IGlmIChpbXBsKCktPmlkKCkgPT0gSURfQSkKLSAgICByZXR1cm4gVVN0cmluZyhzdGF0aWNfY2Fz
dDxjb25zdCBIVE1MQW5jaG9yRWxlbWVudEltcGwgKj4oaW1wbCgpKS0+aHJlZigpKTsKLSAgZWxz
ZQotICAgIHJldHVybiBET01FbGVtZW50Ojp0b1N0cmluZyhleGVjKTsKKyAgICBpZiAoaW1wbCgp
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YSgpKSkKKyAgICAgICAgcmV0dXJuIFVTdHJpbmcoc3Rh
dGljX2Nhc3Q8Y29uc3QgSFRNTEFuY2hvckVsZW1lbnRJbXBsICo+KGltcGwoKSktPmhyZWYoKSk7
CisgICAgZWxzZQorICAgICAgICByZXR1cm4gRE9NRWxlbWVudDo6dG9TdHJpbmcoZXhlYyk7CiB9
CiAKIHN0YXRpYyBIVE1MRm9ybUVsZW1lbnRJbXBsICpnZXRGb3JtKEhUTUxFbGVtZW50SW1wbCAq
ZWxlbWVudCkKIHsKLSAgaWYgKGVsZW1lbnQtPmlzR2VuZXJpY0Zvcm1FbGVtZW50KCkpCi0gICAg
cmV0dXJuIHN0YXRpY19jYXN0PEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsICo+KGVsZW1lbnQp
LT5mb3JtKCk7Ci0KLSAgc3dpdGNoIChlbGVtZW50LT5pZCgpKSB7Ci0gICAgY2FzZSBJRF9MQUJF
TDoKLSAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MTGFiZWxFbGVtZW50SW1wbCAqPihlbGVt
ZW50KS0+Zm9ybSgpOwotICAgIGNhc2UgSURfT0JKRUNUOgotICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PEhUTUxPYmplY3RFbGVtZW50SW1wbCAqPihlbGVtZW50KS0+Zm9ybSgpOwotICB9CisgICAg
aWYgKGVsZW1lbnQtPmlzR2VuZXJpY0Zvcm1FbGVtZW50KCkpCisgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbCAqPihlbGVtZW50KS0+Zm9ybSgpOwor
ICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6bGFiZWwoKSkpCisgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxIVE1MTGFiZWxFbGVtZW50SW1wbCAqPihlbGVtZW50KS0+Zm9y
bSgpOworICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b2JqZWN0KCkpKQor
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTE9iamVjdEVsZW1lbnRJbXBsICo+KGVsZW1l
bnQpLT5mb3JtKCk7CiAKLSAgcmV0dXJuIDA7CisgICAgcmV0dXJuIDA7CiB9CiAKIHZvaWQgS0pT
OjpIVE1MRWxlbWVudDo6cHVzaEV2ZW50SGFuZGxlclNjb3BlKEV4ZWNTdGF0ZSAqZXhlYywgU2Nv
cGVDaGFpbiAmc2NvcGUpIGNvbnN0CkBAIC0yMTQyLDcgKzIyOTYsNyBAQCB2b2lkIEtKUzo6SFRN
TEVsZW1lbnQ6OnB1c2hFdmVudEhhbmRsZXJTCiAgICAgc2NvcGUucHVzaChzdGF0aWNfY2FzdDxP
YmplY3RJbXAgKj4oZ2V0RE9NTm9kZShleGVjLCBmb3JtKSkpOwogICBlbHNlIHsKICAgICBOb2Rl
SW1wbCAqZm9ybSA9IGVsZW1lbnQtPnBhcmVudE5vZGUoKTsKLSAgICB3aGlsZSAoZm9ybSAmJiBm
b3JtLT5pZCgpICE9IElEX0ZPUk0pCisgICAgd2hpbGUgKGZvcm0gJiYgIWZvcm0tPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjpmb3JtKCkpKQogICAgICAgZm9ybSA9IGZvcm0tPnBhcmVudE5vZGUoKTsK
ICAgICAKICAgICBpZiAoZm9ybSkKQEAgLTIxNjIsMTg4ICsyMzE2LDE3MyBAQCBIVE1MRWxlbWVu
dEZ1bmN0aW9uOjpIVE1MRWxlbWVudEZ1bmN0aW9uCiAKIFZhbHVlIEtKUzo6SFRNTEVsZW1lbnRG
dW5jdGlvbjo6dHJ5Q2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3Qg
TGlzdCAmYXJncykKIHsKLSAgaWYgKCF0aGlzT2JqLmluaGVyaXRzKCZLSlM6OkhUTUxFbGVtZW50
OjppbmZvKSkgewotICAgIE9iamVjdCBlcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9y
KTsKLSAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKLSAgICByZXR1cm4gZXJyOwotICB9Ci0g
IGtkRGVidWcoKSA8PCAiS0pTOjpIVE1MRWxlbWVudEZ1bmN0aW9uOjp0cnlDYWxsICIgPDwgZW5k
bDsKLSAgRE9NRXhjZXB0aW9uVHJhbnNsYXRvciBleGNlcHRpb24oZXhlYyk7Ci0gIEhUTUxFbGVt
ZW50SW1wbCAmZWxlbWVudCA9ICpzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwgKj4oc3RhdGlj
X2Nhc3Q8SFRNTEVsZW1lbnQgKj4odGhpc09iai5pbXAoKSktPmltcGwoKSk7Ci0KLSAgc3dpdGNo
IChlbGVtZW50LmlkKCkpIHsKLSAgICBjYXNlIElEX0ZPUk06IHsKLSAgICAgIEhUTUxGb3JtRWxl
bWVudEltcGwgJmZvcm0gPSBzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnRJbXBsICY+KGVsZW1l
bnQpOwotICAgICAgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OkZvcm1TdWJtaXQpIHsKLSAg
ICAgICAgZm9ybS5zdWJtaXQoKTsKLSAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwotICAgICAg
fQotICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6Rm9ybVJlc2V0KSB7Ci0g
ICAgICAgIGZvcm0ucmVzZXQoKTsKLSAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwotICAgICAg
fQorICAgIGlmICghdGhpc09iai5pbmhlcml0cygmS0pTOjpIVE1MRWxlbWVudDo6aW5mbykpIHsK
KyAgICAgICAgT2JqZWN0IGVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBlRXJyb3IpOworICAg
ICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKKyAgICAgICAgcmV0dXJuIGVycjsKICAgICB9
Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9TRUxFQ1Q6IHsKLSAgICAgIEhUTUxTZWxlY3RFbGVt
ZW50SW1wbCAmc2VsZWN0ID0gc3RhdGljX2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnRJbXBsICY+KGVs
ZW1lbnQpOwotICAgICAgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlNlbGVjdEFkZCkgewot
ICAgICAgICBzZWxlY3QuYWRkKHRvSFRNTEVsZW1lbnQoYXJnc1swXSksIHRvSFRNTEVsZW1lbnQo
YXJnc1sxXSkpOwotICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9Ci0gICAgICBl
bHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpTZWxlY3RSZW1vdmUpIHsKLSAgICAgICAg
c2VsZWN0LnJlbW92ZShpbnQoYXJnc1swXS50b051bWJlcihleGVjKSkpOwotICAgICAgICByZXR1
cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxF
bGVtZW50OjpTZWxlY3RCbHVyKSB7Ci0gICAgICAgIHNlbGVjdC5ibHVyKCk7Ci0gICAgICAgIHJl
dHVybiBVbmRlZmluZWQoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRN
TEVsZW1lbnQ6OlNlbGVjdEZvY3VzKSB7Ci0gICAgICAgIHNlbGVjdC5mb2N1cygpOwotICAgICAg
ICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9CisgICAga2REZWJ1ZygpIDw8ICJLSlM6OkhU
TUxFbGVtZW50RnVuY3Rpb246OnRyeUNhbGwgIiA8PCBlbmRsOworICAgIERPTUV4Y2VwdGlvblRy
YW5zbGF0b3IgZXhjZXB0aW9uKGV4ZWMpOworICAgIEhUTUxFbGVtZW50SW1wbCAmZWxlbWVudCA9
ICpzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwgKj4oc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQg
Kj4odGhpc09iai5pbXAoKSktPmltcGwoKSk7CisKKyAgICBpZiAoZWxlbWVudC5oYXNMb2NhbE5h
bWUoSFRNTE5hbWVzOjpmb3JtKCkpKSB7CisgICAgICAgIEhUTUxGb3JtRWxlbWVudEltcGwgJmZv
cm0gPSBzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgICAg
ICBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6Rm9ybVN1Ym1pdCkgeworICAgICAgICAgICAg
Zm9ybS5zdWJtaXQoKTsKKyAgICAgICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKKyAgICAgICAg
fQorICAgICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpGb3JtUmVzZXQpIHsK
KyAgICAgICAgICAgIGZvcm0ucmVzZXQoKTsKKyAgICAgICAgICAgIHJldHVybiBVbmRlZmluZWQo
KTsKKyAgICAgICAgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0lOUFVUOiB7Ci0g
ICAgICBIVE1MSW5wdXRFbGVtZW50SW1wbCAmaW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRF
bGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50
OjpJbnB1dEJsdXIpIHsKLSAgICAgICAgaW5wdXQuYmx1cigpOwotICAgICAgICByZXR1cm4gVW5k
ZWZpbmVkKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50
OjpJbnB1dEZvY3VzKSB7Ci0gICAgICAgIGlucHV0LmZvY3VzKCk7Ci0gICAgICAgIHJldHVybiBV
bmRlZmluZWQoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1l
bnQ6OklucHV0U2VsZWN0KSB7Ci0gICAgICAgIGlucHV0LnNlbGVjdCgpOwotICAgICAgICByZXR1
cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxF
bGVtZW50OjpJbnB1dENsaWNrKSB7Ci0gICAgICAgIGlucHV0LmNsaWNrKCk7Ci0gICAgICAgIHJl
dHVybiBVbmRlZmluZWQoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRN
TEVsZW1lbnQ6OklucHV0U2V0U2VsZWN0aW9uUmFuZ2UpIHsKLSAgICAgICAgaW5wdXQuc2V0U2Vs
ZWN0aW9uUmFuZ2UoYXJnc1swXS50b0ludDMyKGV4ZWMpLCBhcmdzWzFdLnRvSW50MzIoZXhlYykp
OwotICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9CisgICAgZWxzZSBpZiAoZWxl
bWVudC5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpzZWxlY3QoKSkpIHsKKyAgICAgICAgSFRNTFNl
bGVjdEVsZW1lbnRJbXBsICZzZWxlY3QgPSBzdGF0aWNfY2FzdDxIVE1MU2VsZWN0RWxlbWVudElt
cGwgJj4oZWxlbWVudCk7CisgICAgICAgIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpTZWxl
Y3RBZGQpIHsKKyAgICAgICAgICAgIHNlbGVjdC5hZGQodG9IVE1MRWxlbWVudChhcmdzWzBdKSwg
dG9IVE1MRWxlbWVudChhcmdzWzFdKSk7CisgICAgICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7
CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6U2Vs
ZWN0UmVtb3ZlKSB7CisgICAgICAgICAgICBzZWxlY3QucmVtb3ZlKGludChhcmdzWzBdLnRvTnVt
YmVyKGV4ZWMpKSk7CisgICAgICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CisgICAgICAgIH0K
KyAgICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6U2VsZWN0Qmx1cikgewor
ICAgICAgICAgICAgc2VsZWN0LmJsdXIoKTsKKyAgICAgICAgICAgIHJldHVybiBVbmRlZmluZWQo
KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpT
ZWxlY3RGb2N1cykgeworICAgICAgICAgICAgc2VsZWN0LmZvY3VzKCk7CisgICAgICAgICAgICBy
ZXR1cm4gVW5kZWZpbmVkKCk7CisgICAgICAgIH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2Fz
ZSBJRF9MQUJFTDogewotICAgICAgSFRNTExhYmVsRWxlbWVudEltcGwgJmxhYmVsID0gc3RhdGlj
X2Nhc3Q8SFRNTExhYmVsRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICAKLSAgICAgIGlm
IChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpMYWJlbEZvY3VzKSB7Ci0gICAgICAgICAgbGFiZWwu
Zm9jdXMoKTsKLSAgICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9CisgICAgZWxz
ZSBpZiAoZWxlbWVudC5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjppbnB1dCgpKSkgeworICAgICAg
ICBIVE1MSW5wdXRFbGVtZW50SW1wbCAmaW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVt
ZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICAgICAgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6
OklucHV0Qmx1cikgeworICAgICAgICAgICAgaW5wdXQuYmx1cigpOworICAgICAgICAgICAgcmV0
dXJuIFVuZGVmaW5lZCgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6
SFRNTEVsZW1lbnQ6OklucHV0Rm9jdXMpIHsKKyAgICAgICAgICAgIGlucHV0LmZvY3VzKCk7Cisg
ICAgICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBp
ZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6SW5wdXRTZWxlY3QpIHsKKyAgICAgICAgICAgIGlu
cHV0LnNlbGVjdCgpOworICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAgICAgICB9
CisgICAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OklucHV0Q2xpY2spIHsK
KyAgICAgICAgICAgIGlucHV0LmNsaWNrKCk7CisgICAgICAgICAgICByZXR1cm4gVW5kZWZpbmVk
KCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6
SW5wdXRTZXRTZWxlY3Rpb25SYW5nZSkgeworICAgICAgICAgICAgaW5wdXQuc2V0U2VsZWN0aW9u
UmFuZ2UoYXJnc1swXS50b0ludDMyKGV4ZWMpLCBhcmdzWzFdLnRvSW50MzIoZXhlYykpOworICAg
ICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAgICAgICB9CiAgICAgfQotICAgIGJyZWFr
OwotICAgIGNhc2UgSURfTEVHRU5EOiB7Ci0gICAgICBIVE1MTGVnZW5kRWxlbWVudEltcGwgJmxl
Z2VuZCA9IHN0YXRpY19jYXN0PEhUTUxMZWdlbmRFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAg
ICAgICAgCi0gICAgICBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6TGVnZW5kRm9jdXMpIHsK
LSAgICAgICAgICBsZWdlbmQuZm9jdXMoKTsKLSAgICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7
Ci0gICAgICB9CisgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpi
dXR0b24oKSkpIHsKKyAgICAgICAgSFRNTEJ1dHRvbkVsZW1lbnRJbXBsICZidXR0b24gPSBzdGF0
aWNfY2FzdDxIVE1MQnV0dG9uRWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgICAgIGlmIChp
ZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpCdXR0b25CbHVyKSB7CisgICAgICAgICAgICBidXR0b24u
Ymx1cigpOworICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAgICAgICB9CisgICAg
ICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OkJ1dHRvbkZvY3VzKSB7CisgICAg
ICAgICAgICBidXR0b24uZm9jdXMoKTsKKyAgICAgICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsK
KyAgICAgICAgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0JVVFRPTjogewotICAg
ICAgSFRNTEJ1dHRvbkVsZW1lbnRJbXBsICZidXR0b24gPSBzdGF0aWNfY2FzdDxIVE1MQnV0dG9u
RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICAKLSAgICAgIGlmIChpZCA9PSBLSlM6OkhU
TUxFbGVtZW50OjpCdXR0b25CbHVyKSB7Ci0gICAgICAgIGJ1dHRvbi5ibHVyKCk7Ci0gICAgICAg
IHJldHVybiBVbmRlZmluZWQoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6
SFRNTEVsZW1lbnQ6OkJ1dHRvbkZvY3VzKSB7Ci0gICAgICAgIGJ1dHRvbi5mb2N1cygpOwotICAg
ICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9CisgICAgZWxzZSBpZiAoZWxlbWVudC5o
YXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpsYWJlbCgpKSkgeworICAgICAgICBIVE1MTGFiZWxFbGVt
ZW50SW1wbCAmbGFiZWwgPSBzdGF0aWNfY2FzdDxIVE1MTGFiZWxFbGVtZW50SW1wbCAmPihlbGVt
ZW50KTsKKyAgICAgICAgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OkxhYmVsRm9jdXMpIHsK
KyAgICAgICAgICAgIGxhYmVsLmZvY3VzKCk7CisgICAgICAgICAgICByZXR1cm4gVW5kZWZpbmVk
KCk7CisgICAgICAgIH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9URVhUQVJFQTog
ewotICAgICAgSFRNTFRleHRBcmVhRWxlbWVudEltcGwgJnRleHRhcmVhID0gc3RhdGljX2Nhc3Q8
SFRNTFRleHRBcmVhRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBpZiAoaWQgPT0gS0pT
OjpIVE1MRWxlbWVudDo6VGV4dEFyZWFCbHVyKSB7Ci0gICAgICAgIHRleHRhcmVhLmJsdXIoKTsK
LSAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoaWQg
PT0gS0pTOjpIVE1MRWxlbWVudDo6VGV4dEFyZWFGb2N1cykgewotICAgICAgICB0ZXh0YXJlYS5m
b2N1cygpOwotICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9Ci0gICAgICBlbHNl
IGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUZXh0QXJlYVNlbGVjdCkgewotICAgICAgICB0
ZXh0YXJlYS5zZWxlY3QoKTsKLSAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwotICAgICAgfQot
ICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6VGV4dEFyZWFTZXRTZWxlY3Rp
b25SYW5nZSkgewotICAgICAgICB0ZXh0YXJlYS5zZXRTZWxlY3Rpb25SYW5nZShhcmdzWzBdLnRv
SW50MzIoZXhlYyksIGFyZ3NbMV0udG9JbnQzMihleGVjKSk7Ci0gICAgICAgIHJldHVybiBVbmRl
ZmluZWQoKTsKLSAgICAgIH0KKyAgICBlbHNlIGlmIChlbGVtZW50Lmhhc0xvY2FsTmFtZShIVE1M
TmFtZXM6OmxlZ2VuZCgpKSkgeworICAgICAgICBIVE1MTGVnZW5kRWxlbWVudEltcGwgJmxlZ2Vu
ZCA9IHN0YXRpY19jYXN0PEhUTUxMZWdlbmRFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICAg
ICAgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OkxlZ2VuZEZvY3VzKSB7CisgICAgICAgICAg
ICBsZWdlbmQuZm9jdXMoKTsKKyAgICAgICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKKyAgICAg
ICAgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0E6IHsKLSAgICAgIEhUTUxBbmNo
b3JFbGVtZW50SW1wbCAmYW5jaG9yID0gc3RhdGljX2Nhc3Q8SFRNTEFuY2hvckVsZW1lbnRJbXBs
ICY+KGVsZW1lbnQpOwotICAgICAgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OkFuY2hvckJs
dXIpIHsKLSAgICAgICAgYW5jaG9yLmJsdXIoKTsKLSAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgp
OwotICAgICAgfQotICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6QW5jaG9y
Rm9jdXMpIHsKLSAgICAgICAgYW5jaG9yLmZvY3VzKCk7Ci0gICAgICAgIHJldHVybiBVbmRlZmlu
ZWQoKTsKLSAgICAgIH0gCi0gICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpB
bmNob3JUb1N0cmluZykgewotCXJldHVybiBTdHJpbmcodGhpc09iai50b1N0cmluZyhleGVjKSk7
Ci0gICAgICB9CisgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0
ZXh0YXJlYSgpKSkgeworICAgICAgICBIVE1MVGV4dEFyZWFFbGVtZW50SW1wbCAmdGV4dGFyZWEg
PSBzdGF0aWNfY2FzdDxIVE1MVGV4dEFyZWFFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICAg
ICAgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRleHRBcmVhQmx1cikgeworICAgICAgICAg
ICAgdGV4dGFyZWEuYmx1cigpOworICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAg
ICAgICB9CisgICAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRleHRBcmVh
Rm9jdXMpIHsKKyAgICAgICAgICAgIHRleHRhcmVhLmZvY3VzKCk7CisgICAgICAgICAgICByZXR1
cm4gVW5kZWZpbmVkKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpI
VE1MRWxlbWVudDo6VGV4dEFyZWFTZWxlY3QpIHsKKyAgICAgICAgICAgIHRleHRhcmVhLnNlbGVj
dCgpOworICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAgICAgICB9CisgICAgICAg
IGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRleHRBcmVhU2V0U2VsZWN0aW9uUmFu
Z2UpIHsKKyAgICAgICAgICAgIHRleHRhcmVhLnNldFNlbGVjdGlvblJhbmdlKGFyZ3NbMF0udG9J
bnQzMihleGVjKSwgYXJnc1sxXS50b0ludDMyKGV4ZWMpKTsKKyAgICAgICAgICAgIHJldHVybiBV
bmRlZmluZWQoKTsKKyAgICAgICAgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX1RB
QkxFOiB7Ci0gICAgICBIVE1MVGFibGVFbGVtZW50SW1wbCAmdGFibGUgPSBzdGF0aWNfY2FzdDxI
VE1MVGFibGVFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIGlmIChpZCA9PSBLSlM6OkhU
TUxFbGVtZW50OjpUYWJsZUNyZWF0ZVRIZWFkKQotICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShl
eGVjLHRhYmxlLmNyZWF0ZVRIZWFkKCkpOwotICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1M
RWxlbWVudDo6VGFibGVEZWxldGVUSGVhZCkgewotICAgICAgICB0YWJsZS5kZWxldGVUSGVhZCgp
OwotICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChp
ZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUYWJsZUNyZWF0ZVRGb290KQotICAgICAgICByZXR1cm4g
Z2V0RE9NTm9kZShleGVjLHRhYmxlLmNyZWF0ZVRGb290KCkpOwotICAgICAgZWxzZSBpZiAoaWQg
PT0gS0pTOjpIVE1MRWxlbWVudDo6VGFibGVEZWxldGVURm9vdCkgewotICAgICAgICB0YWJsZS5k
ZWxldGVURm9vdCgpOwotICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9Ci0gICAg
ICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUYWJsZUNyZWF0ZUNhcHRpb24pCi0g
ICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsdGFibGUuY3JlYXRlQ2FwdGlvbigpKTsKLSAg
ICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRhYmxlRGVsZXRlQ2FwdGlvbikg
ewotICAgICAgICB0YWJsZS5kZWxldGVDYXB0aW9uKCk7Ci0gICAgICAgIHJldHVybiBVbmRlZmlu
ZWQoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRh
YmxlSW5zZXJ0Um93KQotICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLHRhYmxlLmluc2Vy
dFJvdyhhcmdzWzBdLnRvSW50MzIoZXhlYyksIGV4Y2VwdGlvbikpOwotICAgICAgZWxzZSBpZiAo
aWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6VGFibGVEZWxldGVSb3cpIHsKLSAgICAgICAgdGFibGUu
ZGVsZXRlUm93KGFyZ3NbMF0udG9JbnQzMihleGVjKSwgZXhjZXB0aW9uKTsKLSAgICAgICAgcmV0
dXJuIFVuZGVmaW5lZCgpOwotICAgICAgfQorICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6YSgpKSkgeworICAgICAgICBIVE1MQW5jaG9yRWxlbWVudEltcGwgJmFu
Y2hvciA9IHN0YXRpY19jYXN0PEhUTUxBbmNob3JFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAg
ICAgICAgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OkFuY2hvckJsdXIpIHsKKyAgICAgICAg
ICAgIGFuY2hvci5ibHVyKCk7CisgICAgICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6QW5jaG9yRm9j
dXMpIHsKKyAgICAgICAgICAgIGFuY2hvci5mb2N1cygpOworICAgICAgICAgICAgcmV0dXJuIFVu
ZGVmaW5lZCgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVs
ZW1lbnQ6OkFuY2hvclRvU3RyaW5nKQorICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0aGlzT2Jq
LnRvU3RyaW5nKGV4ZWMpKTsKICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9USEVBRDoK
LSAgICBjYXNlIElEX1RCT0RZOgotICAgIGNhc2UgSURfVEZPT1Q6IHsKLSAgICAgIEhUTUxUYWJs
ZVNlY3Rpb25FbGVtZW50SW1wbCAmdGFibGVTZWN0aW9uID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxl
U2VjdGlvbkVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgaWYgKGlkID09IEtKUzo6SFRN
TEVsZW1lbnQ6OlRhYmxlU2VjdGlvbkluc2VydFJvdykKLSAgICAgICAgcmV0dXJuIGdldERPTU5v
ZGUoZXhlYywgdGFibGVTZWN0aW9uLmluc2VydFJvdyhhcmdzWzBdLnRvSW50MzIoZXhlYyksIGV4
Y2VwdGlvbikpOwotICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6VGFibGVT
ZWN0aW9uRGVsZXRlUm93KSB7Ci0gICAgICAgIHRhYmxlU2VjdGlvbi5kZWxldGVSb3coYXJnc1sw
XS50b0ludDMyKGV4ZWMpLCBleGNlcHRpb24pOwotICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7
Ci0gICAgICB9CisgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0
YWJsZSgpKSkgeworICAgICAgICBIVE1MVGFibGVFbGVtZW50SW1wbCAmdGFibGUgPSBzdGF0aWNf
Y2FzdDxIVE1MVGFibGVFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICAgICAgaWYgKGlkID09
IEtKUzo6SFRNTEVsZW1lbnQ6OlRhYmxlQ3JlYXRlVEhlYWQpCisgICAgICAgICAgICByZXR1cm4g
Z2V0RE9NTm9kZShleGVjLHRhYmxlLmNyZWF0ZVRIZWFkKCkpOworICAgICAgICBlbHNlIGlmIChp
ZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUYWJsZURlbGV0ZVRIZWFkKSB7CisgICAgICAgICAgICB0
YWJsZS5kZWxldGVUSGVhZCgpOworICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAg
ICAgICB9CisgICAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRhYmxlQ3Jl
YXRlVEZvb3QpCisgICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLHRhYmxlLmNyZWF0
ZVRGb290KCkpOworICAgICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUYWJs
ZURlbGV0ZVRGb290KSB7CisgICAgICAgICAgICB0YWJsZS5kZWxldGVURm9vdCgpOworICAgICAg
ICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGlk
ID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRhYmxlQ3JlYXRlQ2FwdGlvbikKKyAgICAgICAgICAgIHJl
dHVybiBnZXRET01Ob2RlKGV4ZWMsdGFibGUuY3JlYXRlQ2FwdGlvbigpKTsKKyAgICAgICAgZWxz
ZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6VGFibGVEZWxldGVDYXB0aW9uKSB7CisgICAg
ICAgICAgICB0YWJsZS5kZWxldGVDYXB0aW9uKCk7CisgICAgICAgICAgICByZXR1cm4gVW5kZWZp
bmVkKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVu
dDo6VGFibGVJbnNlcnRSb3cpCisgICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLHRh
YmxlLmluc2VydFJvdyhhcmdzWzBdLnRvSW50MzIoZXhlYyksIGV4Y2VwdGlvbikpOworICAgICAg
ICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUYWJsZURlbGV0ZVJvdykgeworICAg
ICAgICAgICAgdGFibGUuZGVsZXRlUm93KGFyZ3NbMF0udG9JbnQzMihleGVjKSwgZXhjZXB0aW9u
KTsKKyAgICAgICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKKyAgICAgICAgfQogICAgIH0KLSAg
ICBicmVhazsKLSAgICBjYXNlIElEX1RSOiB7Ci0gICAgICBIVE1MVGFibGVSb3dFbGVtZW50SW1w
bCAmdGFibGVSb3cgPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVSb3dFbGVtZW50SW1wbCAmPihlbGVt
ZW50KTsKLSAgICAgIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUYWJsZVJvd0luc2VydENl
bGwpCi0gICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsdGFibGVSb3cuaW5zZXJ0Q2VsbChh
cmdzWzBdLnRvSW50MzIoZXhlYyksIGV4Y2VwdGlvbikpOwotICAgICAgZWxzZSBpZiAoaWQgPT0g
S0pTOjpIVE1MRWxlbWVudDo6VGFibGVSb3dEZWxldGVDZWxsKSB7Ci0gICAgICAgIHRhYmxlUm93
LmRlbGV0ZUNlbGwoYXJnc1swXS50b0ludDMyKGV4ZWMpLCBleGNlcHRpb24pOwotICAgICAgICBy
ZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9CisgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNMb2Nh
bE5hbWUoSFRNTE5hbWVzOjp0aGVhZCgpKSB8fAorICAgICAgICAgICAgIGVsZW1lbnQuaGFzTG9j
YWxOYW1lKEhUTUxOYW1lczo6dGJvZHkoKSkgfHwKKyAgICAgICAgICAgICBlbGVtZW50Lmhhc0xv
Y2FsTmFtZShIVE1MTmFtZXM6OnRmb290KCkpKSB7CisgICAgICAgIEhUTUxUYWJsZVNlY3Rpb25F
bGVtZW50SW1wbCAmdGFibGVTZWN0aW9uID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlU2VjdGlvbkVs
ZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgICAgICBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVu
dDo6VGFibGVTZWN0aW9uSW5zZXJ0Um93KQorICAgICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUo
ZXhlYywgdGFibGVTZWN0aW9uLmluc2VydFJvdyhhcmdzWzBdLnRvSW50MzIoZXhlYyksIGV4Y2Vw
dGlvbikpOworICAgICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUYWJsZVNl
Y3Rpb25EZWxldGVSb3cpIHsKKyAgICAgICAgICAgIHRhYmxlU2VjdGlvbi5kZWxldGVSb3coYXJn
c1swXS50b0ludDMyKGV4ZWMpLCBleGNlcHRpb24pOworICAgICAgICAgICAgcmV0dXJuIFVuZGVm
aW5lZCgpOworICAgICAgICB9CiAgICAgfQotICAgIGNhc2UgSURfTUFSUVVFRTogeworICAgIGVs
c2UgaWYgKGVsZW1lbnQuaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dHIoKSkpIHsKKyAgICAgICAg
SFRNTFRhYmxlUm93RWxlbWVudEltcGwgJnRhYmxlUm93ID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxl
Um93RWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgICAgIGlmIChpZCA9PSBLSlM6OkhUTUxF
bGVtZW50OjpUYWJsZVJvd0luc2VydENlbGwpCisgICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9k
ZShleGVjLHRhYmxlUm93Lmluc2VydENlbGwoYXJnc1swXS50b0ludDMyKGV4ZWMpLCBleGNlcHRp
b24pKTsKKyAgICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6VGFibGVSb3dE
ZWxldGVDZWxsKSB7CisgICAgICAgICAgICB0YWJsZVJvdy5kZWxldGVDZWxsKGFyZ3NbMF0udG9J
bnQzMihleGVjKSwgZXhjZXB0aW9uKTsKKyAgICAgICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsK
KyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmIChlbGVtZW50Lmhhc0xvY2FsTmFtZShIVE1M
TmFtZXM6Om1hcnF1ZWUoKSkpIHsKICAgICAgICAgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6
Ok1hcnF1ZWVTdGFydCAmJiBlbGVtZW50LnJlbmRlcmVyKCkgJiYgCiAgICAgICAgICAgICBlbGVt
ZW50LnJlbmRlcmVyKCktPmxheWVyKCkgJiYKICAgICAgICAgICAgIGVsZW1lbnQucmVuZGVyZXIo
KS0+bGF5ZXIoKS0+bWFycXVlZSgpKSB7CkBAIC0yMzUxLDE0ICsyNDkwLDE0IEBAIFZhbHVlIEtK
Uzo6SFRNTEVsZW1lbnRGdW5jdGlvbjo6dHJ5Q2FsbCgKICAgICAgICAgICAgIHJldHVybiBVbmRl
ZmluZWQoKTsKICAgICAgICAgfQogICAgICAgICBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6
TWFycXVlZVN0b3AgJiYgZWxlbWVudC5yZW5kZXJlcigpICYmIAotICAgICAgICAgICAgICAgICBl
bGVtZW50LnJlbmRlcmVyKCktPmxheWVyKCkgJiYKLSAgICAgICAgICAgICAgICAgZWxlbWVudC5y
ZW5kZXJlcigpLT5sYXllcigpLT5tYXJxdWVlKCkpIHsKKyAgICAgICAgICAgIGVsZW1lbnQucmVu
ZGVyZXIoKS0+bGF5ZXIoKSAmJgorICAgICAgICAgICAgZWxlbWVudC5yZW5kZXJlcigpLT5sYXll
cigpLT5tYXJxdWVlKCkpIHsKICAgICAgICAgICAgIGVsZW1lbnQucmVuZGVyZXIoKS0+bGF5ZXIo
KS0+bWFycXVlZSgpLT5zdG9wKCk7CiAgICAgICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiAg
ICAgICAgIH0KLSAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGNhc2UgSURfQ0FOVkFTOiB7Cisj
aWYgQVBQTEVfQ0hBTkdFUworICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFzTG9jYWxOYW1lKEhUTUxO
YW1lczo6Y2FudmFzKCkpKSB7CiAgICAgICAgIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpH
ZXRDb250ZXh0KSB7CiAgICAgICAgICAgICBpZiAoYXJncy5zaXplKCkgPT0gMCB8fCAoYXJncy5z
aXplKCkgPT0gMSAmJiBhcmdzWzBdLnRvU3RyaW5nKGV4ZWMpLnFzdHJpbmcoKS5sb3dlcigpID09
ICIyZCIpKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdChuZXcgQ29udGV4dDJEKCZl
bGVtZW50KSk7CkBAIC0yMzY2LDc0MiArMjUwNSw3NjQgQEAgVmFsdWUgS0pTOjpIVE1MRWxlbWVu
dEZ1bmN0aW9uOjp0cnlDYWxsKAogICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogICAg
ICAgICB9CiAgICAgfQotICAgIAotICAgIGJyZWFrOwotICB9CisjZW5kaWYKIAotICByZXR1cm4g
VW5kZWZpbmVkKCk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCiB2b2lkIEtKUzo6SFRN
TEVsZW1lbnQ6OnRyeVB1dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3Bl
cnR5TmFtZSwgY29uc3QgVmFsdWUmIHZhbHVlLCBpbnQgYXR0cikKIHsKICNpZmRlZiBLSlNfVkVS
Qk9TRQotICBET006OkRPTVN0cmluZyBzdHIgPSB2YWx1ZS5pc0EoTnVsbFR5cGUpID8gRE9NOjpE
T01TdHJpbmcoKSA6IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpOworICAgIERPTTo6RE9N
U3RyaW5nIHN0ciA9IHZhbHVlLmlzQShOdWxsVHlwZSkgPyBET006OkRPTVN0cmluZygpIDogdmFs
dWUudG9TdHJpbmcoZXhlYykuc3RyaW5nKCk7CiAjZW5kaWYKLSAgSFRNTEVsZW1lbnRJbXBsICZl
bGVtZW50ID0gKnN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCAqPihpbXBsKCkpOworICAgIEhU
TUxFbGVtZW50SW1wbCAmZWxlbWVudCA9ICpzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwgKj4o
aW1wbCgpKTsKICNpZmRlZiBLSlNfVkVSQk9TRQotICBrZERlYnVnKDYwNzApIDw8ICJLSlM6OkhU
TUxFbGVtZW50Ojp0cnlQdXQgIiA8PCBwcm9wZXJ0eU5hbWUucXN0cmluZygpCi0gICAgICAgICAg
ICAgICAgPDwgIiB0aGlzVGFnPSIgPDwgZWxlbWVudC50YWdOYW1lKCkuc3RyaW5nKCkKLSAgICAg
ICAgICAgICAgICA8PCAiIHN0cj0iIDw8IHN0ci5zdHJpbmcoKSA8PCBlbmRsOworICAgIGtkRGVi
dWcoNjA3MCkgPDwgIktKUzo6SFRNTEVsZW1lbnQ6OnRyeVB1dCAiIDw8IHByb3BlcnR5TmFtZS5x
c3RyaW5nKCkKKyAgICAgICAgICAgICAgICAgIDw8ICIgdGhpc1RhZz0iIDw8IGVsZW1lbnQudGFn
TmFtZSgpLnN0cmluZygpCisgICAgICAgICAgICAgICAgICA8PCAiIHN0cj0iIDw8IHN0ci5zdHJp
bmcoKSA8PCBlbmRsOwogI2VuZGlmCi0gIC8vIEZpcnN0IGxvb2sgYXQgZHluYW1pYyBwcm9wZXJ0
aWVzCi0gIHN3aXRjaCAoZWxlbWVudC5pZCgpKSB7Ci0gICAgY2FzZSBJRF9TRUxFQ1Q6IHsKLSAg
ICAgIEhUTUxTZWxlY3RFbGVtZW50SW1wbCAmc2VsZWN0ID0gc3RhdGljX2Nhc3Q8SFRNTFNlbGVj
dEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgYm9vbCBvazsKLSAgICAgIC8qdWludCB1
ID0qLyBwcm9wZXJ0eU5hbWUudG9VTG9uZygmb2spOwotICAgICAgaWYgKG9rKSB7Ci0gICAgICAg
IE9iamVjdCBjb2xsID0gT2JqZWN0OjpkeW5hbWljQ2FzdCggZ2V0U2VsZWN0SFRNTENvbGxlY3Rp
b24oZXhlYywgc2VsZWN0Lm9wdGlvbnNIVE1MQ29sbGVjdGlvbigpLmdldCgpLCAmc2VsZWN0KSAp
OwotICAgICAgICBpZiAoICFjb2xsLmlzTnVsbCgpICkKLSAgICAgICAgICBjb2xsLnB1dChleGVj
LHByb3BlcnR5TmFtZSx2YWx1ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KKyAgICAvLyBG
aXJzdCBsb29rIGF0IGR5bmFtaWMgcHJvcGVydGllcworICAgIGlmIChlbGVtZW50Lmhhc0xvY2Fs
TmFtZShIVE1MTmFtZXM6OnNlbGVjdCgpKSkgeworICAgICAgICBIVE1MU2VsZWN0RWxlbWVudElt
cGwgJnNlbGVjdCA9IHN0YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50SW1wbCAmPihlbGVtZW50
KTsKKyAgICAgICAgYm9vbCBvazsKKyAgICAgICAgLyp1aW50IHUgPSovIHByb3BlcnR5TmFtZS50
b1VMb25nKCZvayk7CisgICAgICAgIGlmIChvaykgeworICAgICAgICAgICAgT2JqZWN0IGNvbGwg
PSBPYmplY3Q6OmR5bmFtaWNDYXN0KCBnZXRTZWxlY3RIVE1MQ29sbGVjdGlvbihleGVjLCBzZWxl
Y3Qub3B0aW9uc0hUTUxDb2xsZWN0aW9uKCkuZ2V0KCksICZzZWxlY3QpICk7CisgICAgICAgICAg
ICBpZiAoIWNvbGwuaXNOdWxsKCkpCisgICAgICAgICAgICAgICAgY29sbC5wdXQoZXhlYyxwcm9w
ZXJ0eU5hbWUsdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgfQog
I2lmIEFQUExFX0NIQU5HRVMKLSAgICBjYXNlIElEX0VNQkVEOgotICAgIGNhc2UgSURfT0JKRUNU
OgotICAgIGNhc2UgSURfQVBQTEVUOiB7CisgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNMb2NhbE5h
bWUoSFRNTE5hbWVzOjplbWJlZCgpKSB8fAorICAgICAgICAgICAgIGVsZW1lbnQuaGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6b2JqZWN0KCkpIHx8CisgICAgICAgICAgICAgZWxlbWVudC5oYXNMb2Nh
bE5hbWUoSFRNTE5hbWVzOjphcHBsZXQoKSkpIHsKIAlWYWx1ZSBydW50aW1lT2JqZWN0ID0gZ2V0
UnVudGltZU9iamVjdChleGVjLCZlbGVtZW50KTsKIAlpZiAoIXJ1bnRpbWVPYmplY3QuaXNOdWxs
KCkpIHsKIAkgICAgT2JqZWN0SW1wICppbXAgPSBzdGF0aWNfY2FzdDxPYmplY3RJbXAgKj4ocnVu
dGltZU9iamVjdC5pbXAoKSk7Ci0JICAgIGlmIChpbXAtPmNhblB1dChleGVjLCBwcm9wZXJ0eU5h
bWUpKSB7CisJICAgIGlmIChpbXAtPmNhblB1dChleGVjLCBwcm9wZXJ0eU5hbWUpKQogCQlyZXR1
cm4gaW1wLT5wdXQgKGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUpOwotCSAgICB9CiAJfQogICAg
IH0KLSAgICAgIGJyZWFrOwogI2VuZGlmCi0gICAgYnJlYWs7Ci0gIGRlZmF1bHQ6Ci0gICAgICBi
cmVhazsKLSAgfQogCi0gIGNvbnN0IEhhc2hUYWJsZSogdGFibGUgPSBjbGFzc0luZm8oKS0+cHJv
cEhhc2hUYWJsZTsgLy8gZ2V0IHRoZSByaWdodCBoYXNodGFibGUKLSAgY29uc3QgSGFzaEVudHJ5
KiBlbnRyeSA9IExvb2t1cDo6ZmluZEVudHJ5KHRhYmxlLCBwcm9wZXJ0eU5hbWUpOwotICBpZiAo
ZW50cnkpIHsKLSAgICBpZiAoZW50cnktPmF0dHIgJiBGdW5jdGlvbikgLy8gZnVuY3Rpb246IHB1
dCBhcyBvdmVycmlkZSBwcm9wZXJ0eQotICAgIHsKLSAgICAgIE9iamVjdEltcDo6cHV0KGV4ZWMs
IHByb3BlcnR5TmFtZSwgdmFsdWUsIGF0dHIpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBl
bHNlIGlmICgoZW50cnktPmF0dHIgJiBSZWFkT25seSkgPT0gMCkgLy8gbGV0IERPTU9iamVjdExv
b2t1cFB1dCBwcmludCB0aGUgd2FybmluZyBpZiBub3QKLSAgICB7Ci0gICAgICBwdXRWYWx1ZShl
eGVjLCBlbnRyeS0+dmFsdWUsIHZhbHVlLCBhdHRyKTsKLSAgICAgIHJldHVybjsKKyAgICBjb25z
dCBIYXNoVGFibGUqIHRhYmxlID0gY2xhc3NJbmZvKCktPnByb3BIYXNoVGFibGU7IC8vIGdldCB0
aGUgcmlnaHQgaGFzaHRhYmxlCisgICAgY29uc3QgSGFzaEVudHJ5KiBlbnRyeSA9IExvb2t1cDo6
ZmluZEVudHJ5KHRhYmxlLCBwcm9wZXJ0eU5hbWUpOworICAgIGlmIChlbnRyeSkgeworICAgICAg
ICBpZiAoZW50cnktPmF0dHIgJiBGdW5jdGlvbikgeyAvLyBmdW5jdGlvbjogcHV0IGFzIG92ZXJy
aWRlIHByb3BlcnR5CisgICAgICAgICAgICBPYmplY3RJbXA6OnB1dChleGVjLCBwcm9wZXJ0eU5h
bWUsIHZhbHVlLCBhdHRyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICBlbHNlIGlmICgoZW50cnktPmF0dHIgJiBSZWFkT25seSkgPT0gMCkgeyAvLyBsZXQgRE9NT2Jq
ZWN0TG9va3VwUHV0IHByaW50IHRoZSB3YXJuaW5nIGlmIG5vdAorICAgICAgICAgICAgcHV0VmFs
dWUoZXhlYywgZW50cnktPnZhbHVlLCB2YWx1ZSwgYXR0cik7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KICAgICB9Ci0gIH0KLSAgRE9NT2JqZWN0TG9va3VwUHV0PEtKUzo6SFRNTEVs
ZW1lbnQsIERPTUVsZW1lbnQ+KGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIGF0dHIsICZIVE1M
RWxlbWVudFRhYmxlLCB0aGlzKTsKKworICAgIERPTU9iamVjdExvb2t1cFB1dDxLSlM6OkhUTUxF
bGVtZW50LCBET01FbGVtZW50PihleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBhdHRyLCAmSFRN
TEVsZW1lbnRUYWJsZSwgdGhpcyk7CiB9CiAKLXZvaWQgSFRNTEVsZW1lbnQ6OnB1dFZhbHVlKEV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGludCkKK3ZvaWQg
SFRNTEVsZW1lbnQ6Omh0bWxTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0
IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKIHsKLSAgRE9NRXhjZXB0
aW9uVHJhbnNsYXRvciBleGNlcHRpb24oZXhlYyk7Ci0gIERPTTo6RE9NU3RyaW5nIHN0ciA9IHZh
bHVlLmlzQShOdWxsVHlwZSkgPyBET006OkRPTVN0cmluZygpIDogdmFsdWUudG9TdHJpbmcoZXhl
Yykuc3RyaW5nKCk7Ci0gIEhUTUxFbGVtZW50SW1wbCAmZWxlbWVudCA9ICpzdGF0aWNfY2FzdDxI
VE1MRWxlbWVudEltcGwgKj4oaW1wbCgpKTsKLSNpZmRlZiBLSlNfVkVSQk9TRQotICBrZERlYnVn
KDYwNzApIDw8ICJLSlM6OkhUTUxFbGVtZW50OjpwdXRWYWx1ZSAiCi0gICAgICAgICAgICAgICAg
PDwgIiB0aGlzVGFnPSIgPDwgZWxlbWVudC50YWdOYW1lKCkuc3RyaW5nKCkKLSAgICAgICAgICAg
ICAgICA8PCAiIHRva2VuPSIgPDwgdG9rZW4gPDwgZW5kbDsKLSNlbmRpZgorICAgIEhUTUxIZWFk
RWxlbWVudEltcGwgJmhlYWQgPSAqc3RhdGljX2Nhc3Q8SFRNTEhlYWRFbGVtZW50SW1wbCo+KGlt
cGwoKSk7CisgICAgaWYgKHRva2VuID09IEhlYWRQcm9maWxlKSAKKyAgICAgICAgaGVhZC5zZXRQ
cm9maWxlKHN0cik7Cit9CiAKLSAgc3dpdGNoIChlbGVtZW50LmlkKCkpIHsKLSAgY2FzZSBJRF9I
VE1MOiB7Ci0gICAgICBIVE1MSHRtbEVsZW1lbnRJbXBsICZodG1sID0gc3RhdGljX2Nhc3Q8SFRN
TEh0bWxFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAg
ICAgIGNhc2UgSHRtbFZlcnNpb246ICAgICAgICAgeyBodG1sLnNldFZlcnNpb24oc3RyKTsgcmV0
dXJuOyB9Ci0gICAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfSEVBRDogewotICAgIEhU
TUxIZWFkRWxlbWVudEltcGwgJmhlYWQgPSBzdGF0aWNfY2FzdDxIVE1MSGVhZEVsZW1lbnRJbXBs
ICY+KGVsZW1lbnQpOwordm9pZCBIVE1MRWxlbWVudDo6aGVhZFNldHRlcihFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYg
c3RyKQoreworICAgIEhUTUxIZWFkRWxlbWVudEltcGwgJmhlYWQgPSAqc3RhdGljX2Nhc3Q8SFRN
TEhlYWRFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IEhlYWRQcm9maWxl
KSAKKyAgICAgICAgaGVhZC5zZXRQcm9maWxlKHN0cik7Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6
OmxpbmtTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1
ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MTGlua0VsZW1lbnRJbXBs
ICZsaW5rID0gKnN0YXRpY19jYXN0PEhUTUxMaW5rRWxlbWVudEltcGwqPihpbXBsKCkpOwogICAg
IHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIEhlYWRQcm9maWxlOiAgICAgICAgIHsgaGVhZC5z
ZXRQcm9maWxlKHN0cik7IHJldHVybjsgfQotICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJ
RF9MSU5LOiB7Ci0gICAgSFRNTExpbmtFbGVtZW50SW1wbCAmbGluayA9IHN0YXRpY19jYXN0PEhU
TUxMaW5rRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAg
ICAgY2FzZSBMaW5rRGlzYWJsZWQ6ICAgICAgICB7IGxpbmsuc2V0RGlzYWJsZWQodmFsdWUudG9C
b29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIExpbmtDaGFyc2V0OiAgICAgICAg
IHsgbGluay5zZXRDaGFyc2V0KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBMaW5rSHJlZjog
ICAgICAgICAgICB7IGxpbmsuc2V0SHJlZihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgTGlu
a0hyZWZMYW5nOiAgICAgICAgeyBsaW5rLnNldEhyZWZsYW5nKHN0cik7IHJldHVybjsgfQotICAg
ICAgY2FzZSBMaW5rTWVkaWE6ICAgICAgICAgICB7IGxpbmsuc2V0TWVkaWEoc3RyKTsgcmV0dXJu
OyB9Ci0gICAgICBjYXNlIExpbmtSZWw6ICAgICAgICAgICAgIHsgbGluay5zZXRSZWwoc3RyKTsg
cmV0dXJuOyB9Ci0gICAgICBjYXNlIExpbmtSZXY6ICAgICAgICAgICAgIHsgbGluay5zZXRSZXYo
c3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIExpbmtUYXJnZXQ6ICAgICAgICAgIHsgbGluay5z
ZXRUYXJnZXQoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIExpbmtUeXBlOiAgICAgICAgICAg
IHsgbGluay5zZXRUeXBlKHN0cik7IHJldHVybjsgfQotICAgICAgfQotICAgIH0KLSAgICBicmVh
azsKLSAgICBjYXNlIElEX1RJVExFOiB7Ci0gICAgICBIVE1MVGl0bGVFbGVtZW50SW1wbCAmdGl0
bGUgPSBzdGF0aWNfY2FzdDxIVE1MVGl0bGVFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAg
IHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgVGl0bGVUZXh0OiAgICAgICAgICAgICAgICAg
eyB0aXRsZS5zZXRUZXh0KHN0cik7IHJldHVybjsgfQotICAgICAgfQotICAgIH0KLSAgICBicmVh
azsKLSAgICBjYXNlIElEX01FVEE6IHsKLSAgICAgIEhUTUxNZXRhRWxlbWVudEltcGwgJm1ldGEg
PSBzdGF0aWNfY2FzdDxIVE1MTWV0YUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dp
dGNoICh0b2tlbikgewotICAgICAgY2FzZSBNZXRhQ29udGVudDogICAgICAgICB7IG1ldGEuc2V0
Q29udGVudChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgTWV0YUh0dHBFcXVpdjogICAgICAg
eyBtZXRhLnNldEh0dHBFcXVpdihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgTWV0YU5hbWU6
ICAgICAgICAgICAgeyBtZXRhLnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIE1l
dGFTY2hlbWU6ICAgICAgICAgIHsgbWV0YS5zZXRTY2hlbWUoc3RyKTsgcmV0dXJuOyB9Ci0gICAg
ICB9CisgICAgICAgIGNhc2UgTGlua0Rpc2FibGVkOiAgICAgICAgeyBsaW5rLnNldERpc2FibGVk
KHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIExpbmtDaGFy
c2V0OiAgICAgICAgIHsgbGluay5zZXRDaGFyc2V0KHN0cik7IHJldHVybjsgfQorICAgICAgICBj
YXNlIExpbmtIcmVmOiAgICAgICAgICAgIHsgbGluay5zZXRIcmVmKHN0cik7IHJldHVybjsgfQor
ICAgICAgICBjYXNlIExpbmtIcmVmTGFuZzogICAgICAgIHsgbGluay5zZXRIcmVmbGFuZyhzdHIp
OyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBMaW5rTWVkaWE6ICAgICAgICAgICB7IGxpbmsuc2V0
TWVkaWEoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgTGlua1JlbDogICAgICAgICAgICAg
eyBsaW5rLnNldFJlbChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBMaW5rUmV2OiAgICAg
ICAgICAgICB7IGxpbmsuc2V0UmV2KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIExpbmtU
YXJnZXQ6ICAgICAgICAgIHsgbGluay5zZXRUYXJnZXQoc3RyKTsgcmV0dXJuOyB9CisgICAgICAg
IGNhc2UgTGlua1R5cGU6ICAgICAgICAgICAgeyBsaW5rLnNldFR5cGUoc3RyKTsgcmV0dXJuOyB9
CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfQkFTRTogewotICAgICAgSFRNTEJhc2VF
bGVtZW50SW1wbCAmYmFzZSA9IHN0YXRpY19jYXN0PEhUTUxCYXNlRWxlbWVudEltcGwgJj4oZWxl
bWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIEJhc2VIcmVmOiAgICAg
ICAgICAgIHsgYmFzZS5zZXRIcmVmKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBCYXNlVGFy
Z2V0OiAgICAgICAgICB7IGJhc2Uuc2V0VGFyZ2V0KHN0cik7IHJldHVybjsgfQotICAgICAgfQor
fQorCit2b2lkIEhUTUxFbGVtZW50Ojp0aXRsZVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQorewor
ICAgICBIVE1MVGl0bGVFbGVtZW50SW1wbCYgdGl0bGUgPSAqc3RhdGljX2Nhc3Q8SFRNTFRpdGxl
RWxlbWVudEltcGwqPihpbXBsKCkpOworICAgICBpZiAodG9rZW4gPT0gVGl0bGVUZXh0KQorICAg
ICAgICB0aXRsZS5zZXRUZXh0KHN0cik7Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6Om1ldGFTZXR0
ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3Qg
RE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MTWV0YUVsZW1lbnRJbXBsJiBtZXRhID0g
KnN0YXRpY19jYXN0PEhUTUxNZXRhRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAo
dG9rZW4pIHsKKyAgICAgICAgY2FzZSBNZXRhQ29udGVudDogICAgICAgICB7IG1ldGEuc2V0Q29u
dGVudChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBNZXRhSHR0cEVxdWl2OiAgICAgICB7
IG1ldGEuc2V0SHR0cEVxdWl2KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIE1ldGFOYW1l
OiAgICAgICAgICAgIHsgbWV0YS5zZXROYW1lKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNl
IE1ldGFTY2hlbWU6ICAgICAgICAgIHsgbWV0YS5zZXRTY2hlbWUoc3RyKTsgcmV0dXJuOyB9CiAg
ICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfSVNJTkRFWDogewotICAgICAgSFRNTElzSW5k
ZXhFbGVtZW50SW1wbCAmaXNpbmRleCA9IHN0YXRpY19jYXN0PEhUTUxJc0luZGV4RWxlbWVudElt
cGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICAvLyByZWFkLW9u
bHk6IGZvcm0KLSAgICAgIGNhc2UgSXNJbmRleFByb21wdDogICAgICAgICAgICAgICB7IGlzaW5k
ZXguc2V0UHJvbXB0KHN0cik7IHJldHVybjsgfQotICAgICAgfQorfQorCit2b2lkIEhUTUxFbGVt
ZW50OjpiYXNlU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYg
dmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTEJhc2VFbGVtZW50
SW1wbCYgYmFzZSA9ICpzdGF0aWNfY2FzdDxIVE1MQmFzZUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsK
KyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgQmFzZUhyZWY6ICAgICAgICAgICAg
eyBiYXNlLnNldEhyZWYoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQmFzZVRhcmdldDog
ICAgICAgICAgeyBiYXNlLnNldFRhcmdldChzdHIpOyByZXR1cm47IH0KICAgICB9Ci0gICAgYnJl
YWs7Ci0gICAgY2FzZSBJRF9TVFlMRTogewotICAgICAgSFRNTFN0eWxlRWxlbWVudEltcGwgJnN0
eWxlID0gc3RhdGljX2Nhc3Q8SFRNTFN0eWxlRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAg
ICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIFN0eWxlRGlzYWJsZWQ6ICAgICAgICB7IHN0
eWxlLnNldERpc2FibGVkKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQotICAgICAg
Y2FzZSBTdHlsZU1lZGlhOiAgICAgICAgICAgeyBzdHlsZS5zZXRNZWRpYShzdHIpOyByZXR1cm47
IH0KLSAgICAgIGNhc2UgU3R5bGVUeXBlOiAgICAgICAgICAgIHsgc3R5bGUuc2V0VHlwZShzdHIp
OyByZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6aXNJbmRleFNldHRl
cihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBE
T006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxJc0luZGV4RWxlbWVudEltcGwmIGlzaW5k
ZXggPSAqc3RhdGljX2Nhc3Q8SFRNTElzSW5kZXhFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAg
aWYgKHRva2VuID09IElzSW5kZXhQcm9tcHQpCisgICAgICAgIGlzaW5kZXguc2V0UHJvbXB0KHN0
cik7Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OnN0eWxlU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIp
Cit7CisgICAgSFRNTFN0eWxlRWxlbWVudEltcGwmIHN0eWxlID0gKnN0YXRpY19jYXN0PEhUTUxT
dHlsZUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAg
IGNhc2UgU3R5bGVEaXNhYmxlZDogICAgICAgIHsgc3R5bGUuc2V0RGlzYWJsZWQodmFsdWUudG9C
b29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgU3R5bGVNZWRpYTogICAgICAg
ICAgIHsgc3R5bGUuc2V0TWVkaWEoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgU3R5bGVU
eXBlOiAgICAgICAgICAgIHsgc3R5bGUuc2V0VHlwZShzdHIpOyByZXR1cm47IH0KICAgICB9Ci0g
ICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9CT0RZOiB7Ci0gICAgICBIVE1MQm9keUVsZW1lbnRJbXBs
ICZib2R5ID0gc3RhdGljX2Nhc3Q8SFRNTEJvZHlFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAg
ICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgQm9keUFMaW5rOiAgICAgICAgICAgeyBi
b2R5LnNldEFMaW5rKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBCb2R5QmFja2dyb3VuZDog
ICAgICB7IGJvZHkuc2V0QmFja2dyb3VuZChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQm9k
eUJnQ29sb3I6ICAgICAgICAgeyBib2R5LnNldEJnQ29sb3Ioc3RyKTsgcmV0dXJuOyB9Ci0gICAg
ICBjYXNlIEJvZHlMaW5rOiAgICAgICAgICAgIHsgYm9keS5zZXRMaW5rKHN0cik7IHJldHVybjsg
fQotICAgICAgY2FzZSBCb2R5VGV4dDogICAgICAgICAgICB7IGJvZHkuc2V0VGV4dChzdHIpOyBy
ZXR1cm47IH0KLSAgICAgIGNhc2UgQm9keVZMaW5rOiAgICAgICAgICAgeyBib2R5LnNldFZMaW5r
KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBCb2R5U2Nyb2xsTGVmdDoKLSAgICAgIGNhc2Ug
Qm9keVNjcm9sbFRvcDogewotICAgICAgICAgIFFTY3JvbGxWaWV3KiBzdmlldyA9IGJvZHkub3du
ZXJEb2N1bWVudCgpLT52aWV3KCk7Ci0gICAgICAgICAgaWYgKHN2aWV3KSB7Ci0gICAgICAgICAg
ICAgIC8vIFVwZGF0ZSB0aGUgZG9jdW1lbnQncyBsYXlvdXQgYmVmb3JlIHdlIGNvbXB1dGUgdGhl
c2UgYXR0cmlidXRlcy4KLSAgICAgICAgICAgICAgaWYgKERvY3VtZW50SW1wbCogZG9jID0gYm9k
eS5nZXREb2N1bWVudCgpKQotICAgICAgICAgICAgICAgICAgZG9jLT51cGRhdGVMYXlvdXRJZ25v
cmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKLSAgICAgICAgICAgICAgaWYgKHRva2VuID09IEJvZHlT
Y3JvbGxMZWZ0KQotICAgICAgICAgICAgICAgICAgc3ZpZXctPnNldENvbnRlbnRzUG9zKHZhbHVl
LnRvSW50MzIoZXhlYyksIHN2aWV3LT5jb250ZW50c1koKSk7Ci0gICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICAgIHN2aWV3LT5zZXRDb250ZW50c1Bvcyhzdmlldy0+Y29udGVudHNY
KCksIHZhbHVlLnRvSW50MzIoZXhlYykpOwotICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm47
Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OmJvZHlTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sK
KyAgICBIVE1MQm9keUVsZW1lbnRJbXBsJiBib2R5ID0gKnN0YXRpY19jYXN0PEhUTUxCb2R5RWxl
bWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBC
b2R5QUxpbms6ICAgICAgICAgICB7IGJvZHkuc2V0QUxpbmsoc3RyKTsgcmV0dXJuOyB9CisgICAg
ICAgIGNhc2UgQm9keUJhY2tncm91bmQ6ICAgICAgeyBib2R5LnNldEJhY2tncm91bmQoc3RyKTsg
cmV0dXJuOyB9CisgICAgICAgIGNhc2UgQm9keUJnQ29sb3I6ICAgICAgICAgeyBib2R5LnNldEJn
Q29sb3Ioc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQm9keUxpbms6ICAgICAgICAgICAg
eyBib2R5LnNldExpbmsoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQm9keVRleHQ6ICAg
ICAgICAgICAgeyBib2R5LnNldFRleHQoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQm9k
eVZMaW5rOiAgICAgICAgICAgeyBib2R5LnNldFZMaW5rKHN0cik7IHJldHVybjsgfQorICAgICAg
ICBjYXNlIEJvZHlTY3JvbGxMZWZ0OgorICAgICAgICBjYXNlIEJvZHlTY3JvbGxUb3A6IHsKKyAg
ICAgICAgICAgIFFTY3JvbGxWaWV3KiBzdmlldyA9IGJvZHkub3duZXJEb2N1bWVudCgpLT52aWV3
KCk7CisgICAgICAgICAgICBpZiAoc3ZpZXcpIHsKKyAgICAgICAgICAgICAgICAvLyBVcGRhdGUg
dGhlIGRvY3VtZW50J3MgbGF5b3V0IGJlZm9yZSB3ZSBjb21wdXRlIHRoZXNlIGF0dHJpYnV0ZXMu
CisgICAgICAgICAgICAgICAgaWYgKERvY3VtZW50SW1wbCogZG9jID0gYm9keS5nZXREb2N1bWVu
dCgpKQorICAgICAgICAgICAgICAgICAgICBkb2MtPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdT
dHlsZXNoZWV0cygpOworICAgICAgICAgICAgICAgIGlmICh0b2tlbiA9PSBCb2R5U2Nyb2xsTGVm
dCkKKyAgICAgICAgICAgICAgICAgICAgc3ZpZXctPnNldENvbnRlbnRzUG9zKHZhbHVlLnRvSW50
MzIoZXhlYyksIHN2aWV3LT5jb250ZW50c1koKSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgICAgICBzdmlldy0+c2V0Q29udGVudHNQb3Moc3ZpZXctPmNvbnRlbnRzWCgp
LCB2YWx1ZS50b0ludDMyKGV4ZWMpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQotICAgICAgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0ZP
Uk06IHsKLSAgICAgIEhUTUxGb3JtRWxlbWVudEltcGwgJmZvcm0gPSBzdGF0aWNfY2FzdDxIVE1M
Rm9ybUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAg
ICAgLy8gcmVhZC1vbmx5OiBlbGVtZW50cwotICAgICAgLy8gcmVhZC1vbmx5OiBsZW5ndGgKLSAg
ICAgIGNhc2UgRm9ybU5hbWU6ICAgICAgICAgICAgeyBmb3JtLnNldE5hbWUoc3RyKTsgcmV0dXJu
OyB9Ci0gICAgICBjYXNlIEZvcm1BY2NlcHRDaGFyc2V0OiAgIHsgZm9ybS5zZXRBY2NlcHRDaGFy
c2V0KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBGb3JtQWN0aW9uOiAgICAgICAgICB7IGZv
cm0uc2V0QWN0aW9uKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBGb3JtRW5jVHlwZTogICAg
ICAgICB7IGZvcm0uc2V0RW5jdHlwZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgRm9ybU1l
dGhvZDogICAgICAgICAgeyBmb3JtLnNldE1ldGhvZChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNh
c2UgRm9ybVRhcmdldDogICAgICAgICAgeyBmb3JtLnNldFRhcmdldChzdHIpOyByZXR1cm47IH0K
LSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6Zm9ybVNldHRlcihFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYg
c3RyKQoreworICAgIEhUTUxGb3JtRWxlbWVudEltcGwmIGZvcm0gPSAqc3RhdGljX2Nhc3Q8SFRN
TEZvcm1FbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAg
ICAvLyByZWFkLW9ubHk6IGVsZW1lbnRzCisgICAgICAgIC8vIHJlYWQtb25seTogbGVuZ3RoCisg
ICAgICAgIGNhc2UgRm9ybU5hbWU6ICAgICAgICAgICAgeyBmb3JtLnNldE5hbWUoc3RyKTsgcmV0
dXJuOyB9CisgICAgICAgIGNhc2UgRm9ybUFjY2VwdENoYXJzZXQ6ICAgeyBmb3JtLnNldEFjY2Vw
dENoYXJzZXQoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgRm9ybUFjdGlvbjogICAgICAg
ICAgeyBmb3JtLnNldEFjdGlvbihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBGb3JtRW5j
VHlwZTogICAgICAgICB7IGZvcm0uc2V0RW5jdHlwZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAg
Y2FzZSBGb3JtTWV0aG9kOiAgICAgICAgICB7IGZvcm0uc2V0TWV0aG9kKHN0cik7IHJldHVybjsg
fQorICAgICAgICBjYXNlIEZvcm1UYXJnZXQ6ICAgICAgICAgIHsgZm9ybS5zZXRUYXJnZXQoc3Ry
KTsgcmV0dXJuOyB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfU0VMRUNUOiB7Ci0g
ICAgICBIVE1MU2VsZWN0RWxlbWVudEltcGwgJnNlbGVjdCA9IHN0YXRpY19jYXN0PEhUTUxTZWxl
Y3RFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAg
IC8vIHJlYWQtb25seTogdHlwZQotICAgICAgY2FzZSBTZWxlY3RTZWxlY3RlZEluZGV4OiAgIHsg
c2VsZWN0LnNldFNlbGVjdGVkSW5kZXgodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQot
ICAgICAgY2FzZSBTZWxlY3RWYWx1ZTogICAgICAgICAgIHsgc2VsZWN0LnNldFZhbHVlKHN0cik7
IHJldHVybjsgfQotICAgICAgY2FzZSBTZWxlY3RMZW5ndGg6ICAgICAgICAgIHsgLy8gcmVhZC1v
bmx5IGFjY29yZGluZyB0byB0aGUgTlMgc3BlYywgYnV0IHdlYnBhZ2VzIG5lZWQgaXQgd3JpdGVh
YmxlCit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OnNlbGVjdFNldHRlcihFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3Ry
KQoreworICAgIEhUTUxTZWxlY3RFbGVtZW50SW1wbCYgc2VsZWN0ID0gKnN0YXRpY19jYXN0PEhU
TUxTZWxlY3RFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAg
ICAgICAvLyByZWFkLW9ubHk6IHR5cGUKKyAgICAgICAgY2FzZSBTZWxlY3RTZWxlY3RlZEluZGV4
OiAgIHsgc2VsZWN0LnNldFNlbGVjdGVkSW5kZXgodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVy
bjsgfQorICAgICAgICBjYXNlIFNlbGVjdFZhbHVlOiAgICAgICAgICAgeyBzZWxlY3Quc2V0VmFs
dWUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgU2VsZWN0TGVuZ3RoOiAgICAgICAgICB7
IC8vIHJlYWQtb25seSBhY2NvcmRpbmcgdG8gdGhlIE5TIHNwZWMsIGJ1dCB3ZWJwYWdlcyBuZWVk
IGl0IHdyaXRlYWJsZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBP
YmplY3QgY29sbCA9IE9iamVjdDo6ZHluYW1pY0Nhc3QoIGdldFNlbGVjdEhUTUxDb2xsZWN0aW9u
KGV4ZWMsIHNlbGVjdC5vcHRpb25zSFRNTENvbGxlY3Rpb24oKS5nZXQoKSwgJnNlbGVjdCkgKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhY29sbC5pc051
bGwoKSApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbC5w
dXQoZXhlYyxsZW5ndGhQcm9wZXJ0eU5hbWUsdmFsdWUpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAvLyByZWFkLW9ubHk6IGZvcm0KLSAgICAgIC8vIHJlYWQtb25s
eTogb3B0aW9ucwotICAgICAgY2FzZSBTZWxlY3REaXNhYmxlZDogICAgICAgIHsgc2VsZWN0LnNl
dERpc2FibGVkKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBT
ZWxlY3RNdWx0aXBsZTogICAgICAgIHsgc2VsZWN0LnNldE11bHRpcGxlKHZhbHVlLnRvQm9vbGVh
bihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBTZWxlY3ROYW1lOiAgICAgICAgICAgIHsg
c2VsZWN0LnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFNlbGVjdFNpemU6ICAg
ICAgICAgICAgeyBzZWxlY3Quc2V0U2l6ZSh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9
Ci0gICAgICBjYXNlIFNlbGVjdFRhYkluZGV4OiAgICAgICAgeyBzZWxlY3Quc2V0VGFiSW5kZXgo
dmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQotICAgICAgfQotICAgIH0KLSAgICBicmVh
azsKLSAgICBjYXNlIElEX09QVEdST1VQOiB7Ci0gICAgICBIVE1MT3B0R3JvdXBFbGVtZW50SW1w
bCAmb3B0Z3JvdXAgPSBzdGF0aWNfY2FzdDxIVE1MT3B0R3JvdXBFbGVtZW50SW1wbCAmPihlbGVt
ZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgT3B0R3JvdXBEaXNhYmxl
ZDogICAgICAgIHsgb3B0Z3JvdXAuc2V0RGlzYWJsZWQodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsg
cmV0dXJuOyB9Ci0gICAgICBjYXNlIE9wdEdyb3VwTGFiZWw6ICAgICAgICAgICB7IG9wdGdyb3Vw
LnNldExhYmVsKHN0cik7IHJldHVybjsgfQotICAgICAgfQotICAgIH0KLSAgICBicmVhazsKLSAg
ICBjYXNlIElEX09QVElPTjogewotICAgICAgSFRNTE9wdGlvbkVsZW1lbnRJbXBsICZvcHRpb24g
PSBzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBz
d2l0Y2ggKHRva2VuKSB7Ci0gICAgICAvLyByZWFkLW9ubHk6IGZvcm0KLSAgICAgIGNhc2UgT3B0
aW9uRGVmYXVsdFNlbGVjdGVkOiB7IG9wdGlvbi5zZXREZWZhdWx0U2VsZWN0ZWQodmFsdWUudG9C
b29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIE9wdGlvblRleHQ6ICAgICAgICAg
ICAgeyBvcHRpb24uc2V0VGV4dChzdHIsIGV4Y2VwdGlvbik7IHJldHVybjsgfQotICAgICAgLy8g
cmVhZC1vbmx5OiBpbmRleAotICAgICAgY2FzZSBPcHRpb25EaXNhYmxlZDogICAgICAgIHsgb3B0
aW9uLnNldERpc2FibGVkKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQotICAgICAg
Y2FzZSBPcHRpb25MYWJlbDogICAgICAgICAgIHsgb3B0aW9uLnNldExhYmVsKHN0cik7IHJldHVy
bjsgfQotICAgICAgY2FzZSBPcHRpb25TZWxlY3RlZDogICAgICAgIHsgb3B0aW9uLnNldFNlbGVj
dGVkKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBPcHRpb25W
YWx1ZTogICAgICAgICAgIHsgb3B0aW9uLnNldFZhbHVlKHN0cik7IHJldHVybjsgfQotICAgICAg
fQotICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0lOUFVUOiB7Ci0gICAgICBIVE1MSW5w
dXRFbGVtZW50SW1wbCAmaW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50SW1wbCAm
PihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgSW5wdXREZWZh
dWx0VmFsdWU6ICAgIHsgaW5wdXQuc2V0RGVmYXVsdFZhbHVlKHN0cik7IHJldHVybjsgfQotICAg
ICAgY2FzZSBJbnB1dERlZmF1bHRDaGVja2VkOiAgeyBpbnB1dC5zZXREZWZhdWx0Q2hlY2tlZCh2
YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KLSAgICAgIC8vIHJlYWQtb25seTogZm9y
bQotICAgICAgY2FzZSBJbnB1dEFjY2VwdDogICAgICAgICAgeyBpbnB1dC5zZXRBY2NlcHQoc3Ry
KTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElucHV0QWNjZXNzS2V5OiAgICAgICB7IGlucHV0LnNl
dEFjY2Vzc0tleShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSW5wdXRBbGlnbjogICAgICAg
ICAgIHsgaW5wdXQuc2V0QWxpZ24oc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElucHV0QWx0
OiAgICAgICAgICAgICB7IGlucHV0LnNldEFsdChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2Ug
SW5wdXRDaGVja2VkOiAgICAgICAgIHsgaW5wdXQuc2V0Q2hlY2tlZCh2YWx1ZS50b0Jvb2xlYW4o
ZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSW5wdXREaXNhYmxlZDogICAgICAgIHsgaW5w
dXQuc2V0RGlzYWJsZWQodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBj
YXNlIElucHV0TWF4TGVuZ3RoOiAgICAgICB7IGlucHV0LnNldE1heExlbmd0aCh2YWx1ZS50b0lu
dDMyKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElucHV0TmFtZTogICAgICAgICAgICB7
IGlucHV0LnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElucHV0UmVhZE9ubHk6
ICAgICAgICB7IGlucHV0LnNldFJlYWRPbmx5KHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVy
bjsgfQotICAgICAgY2FzZSBJbnB1dFNlbGVjdGlvblN0YXJ0OiAgeyBpbnB1dC5zZXRTZWxlY3Rp
b25TdGFydCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElucHV0
U2VsZWN0aW9uRW5kOiAgICB7IGlucHV0LnNldFNlbGVjdGlvbkVuZCh2YWx1ZS50b0ludDMyKGV4
ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElucHV0U2l6ZTogICAgICAgICAgICB7IGlucHV0
LnNldFNpemUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElucHV0U3JjOiAgICAgICAgICAg
ICB7IGlucHV0LnNldFNyYyhzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSW5wdXRUYWJJbmRl
eDogICAgICAgIHsgaW5wdXQuc2V0VGFiSW5kZXgodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVy
bjsgfQotICAgICAgY2FzZSBJbnB1dFR5cGU6ICAgICAgICAgICAgeyBpbnB1dC5zZXRUeXBlKHN0
cik7IHJldHVybjsgfQotICAgICAgY2FzZSBJbnB1dFVzZU1hcDogICAgICAgICAgeyBpbnB1dC5z
ZXRVc2VNYXAoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElucHV0VmFsdWU6ICAgICAgICAg
ICB7IGlucHV0LnNldFZhbHVlKHN0cik7IHJldHVybjsgfQotICAgICAgfQotICAgIH0KLSAgICBi
cmVhazsKLSAgICBjYXNlIElEX1RFWFRBUkVBOiB7Ci0gICAgICBIVE1MVGV4dEFyZWFFbGVtZW50
SW1wbCAmdGV4dGFyZWEgPSBzdGF0aWNfY2FzdDxIVE1MVGV4dEFyZWFFbGVtZW50SW1wbCAmPihl
bGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgVGV4dEFyZWFEZWZh
dWx0VmFsdWU6ICAgIHsgdGV4dGFyZWEuc2V0RGVmYXVsdFZhbHVlKHN0cik7IHJldHVybjsgfQot
ICAgICAgLy8gcmVhZC1vbmx5OiBmb3JtCi0gICAgICBjYXNlIFRleHRBcmVhQWNjZXNzS2V5OiAg
ICAgICB7IHRleHRhcmVhLnNldEFjY2Vzc0tleShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2Ug
VGV4dEFyZWFDb2xzOiAgICAgICAgICAgIHsgdGV4dGFyZWEuc2V0Q29scyh2YWx1ZS50b0ludDMy
KGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRleHRBcmVhRGlzYWJsZWQ6ICAgICAgICB7
IHRleHRhcmVhLnNldERpc2FibGVkKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQot
ICAgICAgY2FzZSBUZXh0QXJlYU5hbWU6ICAgICAgICAgICAgeyB0ZXh0YXJlYS5zZXROYW1lKHN0
cik7IHJldHVybjsgfQotICAgICAgY2FzZSBUZXh0QXJlYVJlYWRPbmx5OiAgICAgICAgeyB0ZXh0
YXJlYS5zZXRSZWFkT25seSh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KLSAgICAg
IGNhc2UgVGV4dEFyZWFSb3dzOiAgICAgICAgICAgIHsgdGV4dGFyZWEuc2V0Um93cyh2YWx1ZS50
b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRleHRBcmVhU2VsZWN0aW9uU3Rh
cnQ6ICB7IHRleHRhcmVhLnNldFNlbGVjdGlvblN0YXJ0KHZhbHVlLnRvSW50MzIoZXhlYykpOyBy
ZXR1cm47IH0KLSAgICAgIGNhc2UgVGV4dEFyZWFTZWxlY3Rpb25FbmQ6ICAgIHsgdGV4dGFyZWEu
c2V0U2VsZWN0aW9uRW5kKHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNh
c2UgVGV4dEFyZWFUYWJJbmRleDogICAgICAgIHsgdGV4dGFyZWEuc2V0VGFiSW5kZXgodmFsdWUu
dG9JbnQzMihleGVjKSk7IHJldHVybjsgfQotICAgICAgLy8gcmVhZC1vbmx5OiB0eXBlCi0gICAg
ICBjYXNlIFRleHRBcmVhVmFsdWU6ICAgICAgICAgICB7IHRleHRhcmVhLnNldFZhbHVlKHN0cik7
IHJldHVybjsgfQotICAgICAgfQotICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0JVVFRP
TjogewotICAgICAgSFRNTEJ1dHRvbkVsZW1lbnRJbXBsICZidXR0b24gPSBzdGF0aWNfY2FzdDxI
VE1MQnV0dG9uRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7
Ci0gICAgICAvLyByZWFkLW9ubHk6IGZvcm0KLSAgICAgIGNhc2UgQnV0dG9uQWNjZXNzS2V5OiAg
ICAgICB7IGJ1dHRvbi5zZXRBY2Nlc3NLZXkoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEJ1
dHRvbkRpc2FibGVkOiAgICAgICAgeyBidXR0b24uc2V0RGlzYWJsZWQodmFsdWUudG9Cb29sZWFu
KGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEJ1dHRvbk5hbWU6ICAgICAgICAgICAgeyBi
dXR0b24uc2V0TmFtZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQnV0dG9uVGFiSW5kZXg6
ICAgICAgICB7IGJ1dHRvbi5zZXRUYWJJbmRleCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJu
OyB9Ci0gICAgICAvLyByZWFkLW9ubHk6IHR5cGUKLSAgICAgIGNhc2UgQnV0dG9uVmFsdWU6ICAg
ICAgICAgICB7IGJ1dHRvbi5zZXRWYWx1ZShzdHIpOyByZXR1cm47IH0KLSAgICAgIH0KLSAgICB9
Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9MQUJFTDogewotICAgICAgSFRNTExhYmVsRWxlbWVu
dEltcGwgJmxhYmVsID0gc3RhdGljX2Nhc3Q8SFRNTExhYmVsRWxlbWVudEltcGwgJj4oZWxlbWVu
dCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICAvLyByZWFkLW9ubHk6IGZvcm0KLSAg
ICAgIGNhc2UgTGFiZWxBY2Nlc3NLZXk6ICAgICAgIHsgbGFiZWwuc2V0QWNjZXNzS2V5KHN0cik7
IHJldHVybjsgfQotICAgICAgY2FzZSBMYWJlbEh0bWxGb3I6ICAgICAgICAgeyBsYWJlbC5zZXRI
dG1sRm9yKHN0cik7IHJldHVybjsgfQotICAgICAgfQotICAgIH0KLSAgICBicmVhazsKLSAgICBj
YXNlIElEX0xFR0VORDogewotICAgICAgSFRNTExlZ2VuZEVsZW1lbnRJbXBsICZsZWdlbmQgPSBz
dGF0aWNfY2FzdDxIVE1MTGVnZW5kRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0
Y2ggKHRva2VuKSB7Ci0gICAgICAvLyByZWFkLW9ubHk6IGZvcm0KLSAgICAgIGNhc2UgTGVnZW5k
QWNjZXNzS2V5OiAgICAgICB7IGxlZ2VuZC5zZXRBY2Nlc3NLZXkoc3RyKTsgcmV0dXJuOyB9Ci0g
ICAgICBjYXNlIExlZ2VuZEFsaWduOiAgICAgICAgICAgeyBsZWdlbmQuc2V0QWxpZ24oc3RyKTsg
cmV0dXJuOyB9Ci0gICAgICB9Ci0gICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfVUw6IHsK
LSAgICAgIEhUTUxVTGlzdEVsZW1lbnRJbXBsICZ1TGlzdCA9IHN0YXRpY19jYXN0PEhUTUxVTGlz
dEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAg
Y2FzZSBVTGlzdENvbXBhY3Q6ICAgICAgICAgeyB1TGlzdC5zZXRDb21wYWN0KHZhbHVlLnRvQm9v
bGVhbihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBVTGlzdFR5cGU6ICAgICAgICAgICAg
eyB1TGlzdC5zZXRUeXBlKHN0cik7IHJldHVybjsgfQotICAgICAgfQotICAgIH0KLSAgICBicmVh
azsKLSAgICBjYXNlIElEX09MOiB7Ci0gICAgICBIVE1MT0xpc3RFbGVtZW50SW1wbCAmb0xpc3Qg
PSBzdGF0aWNfY2FzdDxIVE1MT0xpc3RFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3
aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgT0xpc3RDb21wYWN0OiAgICAgICAgIHsgb0xpc3Qu
c2V0Q29tcGFjdCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2Ug
T0xpc3RTdGFydDogICAgICAgICAgIHsgb0xpc3Quc2V0U3RhcnQodmFsdWUudG9JbnQzMihleGVj
KSk7IHJldHVybjsgfQotICAgICAgY2FzZSBPTGlzdFR5cGU6ICAgICAgICAgICAgeyBvTGlzdC5z
ZXRUeXBlKHN0cik7IHJldHVybjsgfQotICAgICAgfQotICAgIH0KLSAgICBicmVhazsKLSAgICBj
YXNlIElEX0RMOiB7Ci0gICAgICBIVE1MRExpc3RFbGVtZW50SW1wbCAmZExpc3QgPSBzdGF0aWNf
Y2FzdDxIVE1MRExpc3RFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9r
ZW4pIHsKLSAgICAgIGNhc2UgRExpc3RDb21wYWN0OiAgICAgICAgIHsgZExpc3Quc2V0Q29tcGFj
dCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KLSAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgLy8gcmVhZC1vbmx5OiBmb3JtCisg
ICAgICAgIC8vIHJlYWQtb25seTogb3B0aW9ucworICAgICAgICBjYXNlIFNlbGVjdERpc2FibGVk
OiAgICAgICAgeyBzZWxlY3Quc2V0RGlzYWJsZWQodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0
dXJuOyB9CisgICAgICAgIGNhc2UgU2VsZWN0TXVsdGlwbGU6ICAgICAgICB7IHNlbGVjdC5zZXRN
dWx0aXBsZSh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBT
ZWxlY3ROYW1lOiAgICAgICAgICAgIHsgc2VsZWN0LnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9Cisg
ICAgICAgIGNhc2UgU2VsZWN0U2l6ZTogICAgICAgICAgICB7IHNlbGVjdC5zZXRTaXplKHZhbHVl
LnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBTZWxlY3RUYWJJbmRleDog
ICAgICAgIHsgc2VsZWN0LnNldFRhYkluZGV4KHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47
IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9ESVI6IHsKLSAgICAgIEhUTUxEaXJl
Y3RvcnlFbGVtZW50SW1wbCAmZGlyZWN0b3J5ID0gc3RhdGljX2Nhc3Q8SFRNTERpcmVjdG9yeUVs
ZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgY2Fz
ZSBEaXJlY3RvcnlDb21wYWN0OiAgICAgeyBkaXJlY3Rvcnkuc2V0Q29tcGFjdCh2YWx1ZS50b0Jv
b2xlYW4oZXhlYykpOyByZXR1cm47IH0KLSAgICAgIH0KLSAgICB9Ci0gICAgYnJlYWs7Ci0gICAg
Y2FzZSBJRF9NRU5VOiB7Ci0gICAgICBIVE1MTWVudUVsZW1lbnRJbXBsICZtZW51ID0gc3RhdGlj
X2Nhc3Q8SFRNTE1lbnVFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9r
ZW4pIHsKLSAgICAgIGNhc2UgTWVudUNvbXBhY3Q6ICAgICAgICAgeyBtZW51LnNldENvbXBhY3Qo
dmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICB9Ci0gICAgfQotICAgIGJy
ZWFrOwotICAgIGNhc2UgSURfTEk6IHsKLSAgICAgIEhUTUxMSUVsZW1lbnRJbXBsICZsaSA9IHN0
YXRpY19jYXN0PEhUTUxMSUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0
b2tlbikgewotICAgICAgY2FzZSBMSVR5cGU6ICAgICAgICAgICAgeyBsaS5zZXRUeXBlKHN0cik7
IHJldHVybjsgfQotICAgICAgY2FzZSBMSVZhbHVlOiAgICAgICAgICAgeyBsaS5zZXRWYWx1ZSh2
YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICB9Cit9CisKK3ZvaWQgSFRNTEVs
ZW1lbnQ6Om9wdEdyb3VwU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBW
YWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTE9wdEdy
b3VwRWxlbWVudEltcGwmIG9wdGdyb3VwID0gKnN0YXRpY19jYXN0PEhUTUxPcHRHcm91cEVsZW1l
bnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgT3B0
R3JvdXBEaXNhYmxlZDogICAgICAgIHsgb3B0Z3JvdXAuc2V0RGlzYWJsZWQodmFsdWUudG9Cb29s
ZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgT3B0R3JvdXBMYWJlbDogICAgICAg
ICAgIHsgb3B0Z3JvdXAuc2V0TGFiZWwoc3RyKTsgcmV0dXJuOyB9CiAgICAgfQotICAgIGJyZWFr
OwotICAgIGNhc2UgSURfRElWOiB7Ci0gICAgICBIVE1MRGl2RWxlbWVudEltcGwgJmRpdiA9IHN0
YXRpY19jYXN0PEhUTUxEaXZFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAo
dG9rZW4pIHsKLSAgICAgIGNhc2UgRGl2QWxpZ246ICAgICAgICAgICB7IGRpdi5zZXRBbGlnbihz
dHIpOyByZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6b3B0aW9uU2V0
dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0
IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgRE9NRXhjZXB0aW9uVHJhbnNsYXRvciBleGNl
cHRpb24oZXhlYyk7CisgICAgSFRNTE9wdGlvbkVsZW1lbnRJbXBsJiBvcHRpb24gPSAqc3RhdGlj
X2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2Vu
KSB7CisgICAgICAgIC8vIHJlYWQtb25seTogZm9ybQorICAgICAgICBjYXNlIE9wdGlvbkRlZmF1
bHRTZWxlY3RlZDogeyBvcHRpb24uc2V0RGVmYXVsdFNlbGVjdGVkKHZhbHVlLnRvQm9vbGVhbihl
eGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIE9wdGlvblRleHQ6ICAgICAgICAgICAgeyBv
cHRpb24uc2V0VGV4dChzdHIsIGV4Y2VwdGlvbik7IHJldHVybjsgfQorICAgICAgICAvLyByZWFk
LW9ubHk6IGluZGV4CisgICAgICAgIGNhc2UgT3B0aW9uRGlzYWJsZWQ6ICAgICAgICB7IG9wdGlv
bi5zZXREaXNhYmxlZCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAg
Y2FzZSBPcHRpb25MYWJlbDogICAgICAgICAgIHsgb3B0aW9uLnNldExhYmVsKHN0cik7IHJldHVy
bjsgfQorICAgICAgICBjYXNlIE9wdGlvblNlbGVjdGVkOiAgICAgICAgeyBvcHRpb24uc2V0U2Vs
ZWN0ZWQodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgT3B0
aW9uVmFsdWU6ICAgICAgICAgICB7IG9wdGlvbi5zZXRWYWx1ZShzdHIpOyByZXR1cm47IH0KICAg
ICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9QOiB7Ci0gICAgICBIVE1MUGFyYWdyYXBoRWxl
bWVudEltcGwgJnBhcmFncmFwaCA9IHN0YXRpY19jYXN0PEhUTUxQYXJhZ3JhcGhFbGVtZW50SW1w
bCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgUGFyYWdy
YXBoQWxpZ246ICAgICB7IHBhcmFncmFwaC5zZXRBbGlnbihzdHIpOyByZXR1cm47IH0KLSAgICAg
IH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6aW5wdXRTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikK
K3sKKyAgICBIVE1MSW5wdXRFbGVtZW50SW1wbCYgaW5wdXQgPSAqc3RhdGljX2Nhc3Q8SFRNTElu
cHV0RWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAg
Y2FzZSBJbnB1dERlZmF1bHRWYWx1ZTogICAgeyBpbnB1dC5zZXREZWZhdWx0VmFsdWUoc3RyKTsg
cmV0dXJuOyB9CisgICAgICAgIGNhc2UgSW5wdXREZWZhdWx0Q2hlY2tlZDogIHsgaW5wdXQuc2V0
RGVmYXVsdENoZWNrZWQodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAg
IC8vIHJlYWQtb25seTogZm9ybQorICAgICAgICBjYXNlIElucHV0QWNjZXB0OiAgICAgICAgICB7
IGlucHV0LnNldEFjY2VwdChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJbnB1dEFjY2Vz
c0tleTogICAgICAgeyBpbnB1dC5zZXRBY2Nlc3NLZXkoc3RyKTsgcmV0dXJuOyB9CisgICAgICAg
IGNhc2UgSW5wdXRBbGlnbjogICAgICAgICAgIHsgaW5wdXQuc2V0QWxpZ24oc3RyKTsgcmV0dXJu
OyB9CisgICAgICAgIGNhc2UgSW5wdXRBbHQ6ICAgICAgICAgICAgIHsgaW5wdXQuc2V0QWx0KHN0
cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIElucHV0Q2hlY2tlZDogICAgICAgICB7IGlucHV0
LnNldENoZWNrZWQodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNh
c2UgSW5wdXREaXNhYmxlZDogICAgICAgIHsgaW5wdXQuc2V0RGlzYWJsZWQodmFsdWUudG9Cb29s
ZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgSW5wdXRNYXhMZW5ndGg6ICAgICAg
IHsgaW5wdXQuc2V0TWF4TGVuZ3RoKHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KKyAg
ICAgICAgY2FzZSBJbnB1dE5hbWU6ICAgICAgICAgICAgeyBpbnB1dC5zZXROYW1lKHN0cik7IHJl
dHVybjsgfQorICAgICAgICBjYXNlIElucHV0UmVhZE9ubHk6ICAgICAgICB7IGlucHV0LnNldFJl
YWRPbmx5KHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIElu
cHV0U2l6ZTogICAgICAgICAgICB7IGlucHV0LnNldFNpemUoc3RyKTsgcmV0dXJuOyB9CisgICAg
ICAgIGNhc2UgSW5wdXRTZWxlY3Rpb25TdGFydDogIHsgaW5wdXQuc2V0U2VsZWN0aW9uU3RhcnQo
dmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIElucHV0U2VsZWN0
aW9uRW5kOiAgICB7IGlucHV0LnNldFNlbGVjdGlvbkVuZCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsg
cmV0dXJuOyB9CisgICAgICAgIGNhc2UgSW5wdXRTcmM6ICAgICAgICAgICAgIHsgaW5wdXQuc2V0
U3JjKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIElucHV0VGFiSW5kZXg6ICAgICAgICB7
IGlucHV0LnNldFRhYkluZGV4KHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KKyAgICAg
ICAgY2FzZSBJbnB1dFR5cGU6ICAgICAgICAgICAgeyBpbnB1dC5zZXRUeXBlKHN0cik7IHJldHVy
bjsgfQorICAgICAgICBjYXNlIElucHV0VXNlTWFwOiAgICAgICAgICB7IGlucHV0LnNldFVzZU1h
cChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJbnB1dFZhbHVlOiAgICAgICAgICAgeyBp
bnB1dC5zZXRWYWx1ZShzdHIpOyByZXR1cm47IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2Fz
ZSBJRF9IMToKLSAgICBjYXNlIElEX0gyOgotICAgIGNhc2UgSURfSDM6Ci0gICAgY2FzZSBJRF9I
NDoKLSAgICBjYXNlIElEX0g1OgotICAgIGNhc2UgSURfSDY6IHsKLSAgICAgIEhUTUxIZWFkaW5n
RWxlbWVudEltcGwgJmhlYWRpbmcgPSBzdGF0aWNfY2FzdDxIVE1MSGVhZGluZ0VsZW1lbnRJbXBs
ICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgY2FzZSBIZWFkaW5n
QWxpZ246ICAgICAgICAgeyBoZWFkaW5nLnNldEFsaWduKHN0cik7IHJldHVybjsgfQotICAgICAg
fQorfQorCit2b2lkIEhUTUxFbGVtZW50Ojp0ZXh0QXJlYVNldHRlcihFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3Ry
KQoreworICAgIEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBsJiB0ZXh0YXJlYSA9ICpzdGF0aWNfY2Fz
dDxIVE1MVGV4dEFyZWFFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikg
eworICAgICAgICBjYXNlIFRleHRBcmVhRGVmYXVsdFZhbHVlOiAgICB7IHRleHRhcmVhLnNldERl
ZmF1bHRWYWx1ZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgLy8gcmVhZC1vbmx5OiBmb3JtCisg
ICAgICAgIGNhc2UgVGV4dEFyZWFBY2Nlc3NLZXk6ICAgICAgIHsgdGV4dGFyZWEuc2V0QWNjZXNz
S2V5KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRleHRBcmVhQ29sczogICAgICAgICAg
ICB7IHRleHRhcmVhLnNldENvbHModmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQorICAg
ICAgICBjYXNlIFRleHRBcmVhRGlzYWJsZWQ6ICAgICAgICB7IHRleHRhcmVhLnNldERpc2FibGVk
KHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRleHRBcmVh
TmFtZTogICAgICAgICAgICB7IHRleHRhcmVhLnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9CisgICAg
ICAgIGNhc2UgVGV4dEFyZWFSZWFkT25seTogICAgICAgIHsgdGV4dGFyZWEuc2V0UmVhZE9ubHko
dmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGV4dEFyZWFS
b3dzOiAgICAgICAgICAgIHsgdGV4dGFyZWEuc2V0Um93cyh2YWx1ZS50b0ludDMyKGV4ZWMpKTsg
cmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGV4dEFyZWFTZWxlY3Rpb25TdGFydDogIHsgdGV4dGFy
ZWEuc2V0U2VsZWN0aW9uU3RhcnQodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQorICAg
ICAgICBjYXNlIFRleHRBcmVhU2VsZWN0aW9uRW5kOiAgICB7IHRleHRhcmVhLnNldFNlbGVjdGlv
bkVuZCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGV4dEFy
ZWFUYWJJbmRleDogICAgICAgIHsgdGV4dGFyZWEuc2V0VGFiSW5kZXgodmFsdWUudG9JbnQzMihl
eGVjKSk7IHJldHVybjsgfQorICAgICAgICAvLyByZWFkLW9ubHk6IHR5cGUKKyAgICAgICAgY2Fz
ZSBUZXh0QXJlYVZhbHVlOiAgICAgICAgICAgeyB0ZXh0YXJlYS5zZXRWYWx1ZShzdHIpOyByZXR1
cm47IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9CTE9DS1FVT1RFOiB7Ci0gICAg
ICBIVE1MQmxvY2txdW90ZUVsZW1lbnRJbXBsICZibG9ja3F1b3RlID0gc3RhdGljX2Nhc3Q8SFRN
TEJsb2NrcXVvdGVFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4p
IHsKLSAgICAgIGNhc2UgQmxvY2tRdW90ZUNpdGU6ICAgICAgIHsgYmxvY2txdW90ZS5zZXRDaXRl
KHN0cik7IHJldHVybjsgfQotICAgICAgfQorfQorCit2b2lkIEhUTUxFbGVtZW50OjpidXR0b25T
ZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29u
c3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MQnV0dG9uRWxlbWVudEltcGwmIGJ1
dHRvbiA9ICpzdGF0aWNfY2FzdDxIVE1MQnV0dG9uRWxlbWVudEltcGwqPihpbXBsKCkpOworICAg
IHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgLy8gcmVhZC1vbmx5OiBmb3JtCisgICAgICAgIGNh
c2UgQnV0dG9uQWNjZXNzS2V5OiAgICAgICB7IGJ1dHRvbi5zZXRBY2Nlc3NLZXkoc3RyKTsgcmV0
dXJuOyB9CisgICAgICAgIGNhc2UgQnV0dG9uRGlzYWJsZWQ6ICAgICAgICB7IGJ1dHRvbi5zZXRE
aXNhYmxlZCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBC
dXR0b25OYW1lOiAgICAgICAgICAgIHsgYnV0dG9uLnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9Cisg
ICAgICAgIGNhc2UgQnV0dG9uVGFiSW5kZXg6ICAgICAgICB7IGJ1dHRvbi5zZXRUYWJJbmRleCh2
YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIC8vIHJlYWQtb25seTogdHlw
ZQorICAgICAgICBjYXNlIEJ1dHRvblZhbHVlOiAgICAgICAgICAgeyBidXR0b24uc2V0VmFsdWUo
c3RyKTsgcmV0dXJuOyB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfUTogewotICAg
ICAgSFRNTFF1b3RlRWxlbWVudEltcGwgJnF1b3RlID0gc3RhdGljX2Nhc3Q8SFRNTFF1b3RlRWxl
bWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNl
IFF1b3RlQ2l0ZTogICAgICAgICAgICB7IHF1b3RlLnNldENpdGUoc3RyKTsgcmV0dXJuOyB9Ci0g
ICAgICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OmxhYmVsU2V0dGVyKEV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBz
dHIpCit7CisgICAgSFRNTExhYmVsRWxlbWVudEltcGwmIGxhYmVsID0gKnN0YXRpY19jYXN0PEhU
TUxMYWJlbEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAg
ICAgIC8vIHJlYWQtb25seTogZm9ybQorICAgICAgICBjYXNlIExhYmVsQWNjZXNzS2V5OiAgICAg
ICB7IGxhYmVsLnNldEFjY2Vzc0tleShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBMYWJl
bEh0bWxGb3I6ICAgICAgICAgeyBsYWJlbC5zZXRIdG1sRm9yKHN0cik7IHJldHVybjsgfQogICAg
IH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX1BSRTogewotICAgICAgSFRNTFByZUVsZW1lbnRJ
bXBsICZwcmUgPSBzdGF0aWNfY2FzdDxIVE1MUHJlRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0g
ICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIFByZVdpZHRoOiAgICAgICAgICAgeyBw
cmUuc2V0V2lkdGgodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQotICAgICAgfQorfQor
Cit2b2lkIEhUTUxFbGVtZW50OjpmaWVsZFNldFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQorewor
fQorCit2b2lkIEhUTUxFbGVtZW50OjpsZWdlbmRTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sK
KyAgICBIVE1MTGVnZW5kRWxlbWVudEltcGwmIGxlZ2VuZCA9ICpzdGF0aWNfY2FzdDxIVE1MTGVn
ZW5kRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAg
Ly8gcmVhZC1vbmx5OiBmb3JtCisgICAgICAgIGNhc2UgTGVnZW5kQWNjZXNzS2V5OiAgICAgICB7
IGxlZ2VuZC5zZXRBY2Nlc3NLZXkoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgTGVnZW5k
QWxpZ246ICAgICAgICAgICB7IGxlZ2VuZC5zZXRBbGlnbihzdHIpOyByZXR1cm47IH0KICAgICB9
Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9CUjogewotICAgICAgSFRNTEJSRWxlbWVudEltcGwg
JmJyID0gc3RhdGljX2Nhc3Q8SFRNTEJSRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBz
d2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIEJSQ2xlYXI6ICAgICAgICAgICB7IGJyLnNldENs
ZWFyKHN0cik7IHJldHVybjsgfQotICAgICAgfQorfQorCit2b2lkIEhUTUxFbGVtZW50Ojp1TGlz
dFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBj
b25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxVTGlzdEVsZW1lbnRJbXBsJiB1
TGlzdCA9ICpzdGF0aWNfY2FzdDxIVE1MVUxpc3RFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAg
c3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNlIFVMaXN0Q29tcGFjdDogICAgICAgICB7IHVM
aXN0LnNldENvbXBhY3QodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAg
IGNhc2UgVUxpc3RUeXBlOiAgICAgICAgICAgIHsgdUxpc3Quc2V0VHlwZShzdHIpOyByZXR1cm47
IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9CQVNFRk9OVDogewotICAgICAgSFRN
TEJhc2VGb250RWxlbWVudEltcGwgJmJhc2VGb250ID0gc3RhdGljX2Nhc3Q8SFRNTEJhc2VGb250
RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBj
YXNlIEJhc2VGb250Q29sb3I6ICAgICAgICAgICB7IGJhc2VGb250LnNldENvbG9yKHN0cik7IHJl
dHVybjsgfQotICAgICAgY2FzZSBCYXNlRm9udEZhY2U6ICAgICAgICAgICAgeyBiYXNlRm9udC5z
ZXRGYWNlKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBCYXNlRm9udFNpemU6ICAgICAgICAg
ICAgeyBiYXNlRm9udC5zZXRTaXplKHN0cik7IHJldHVybjsgfQotICAgICAgfQorfQorCit2b2lk
IEhUTUxFbGVtZW50OjpvTGlzdFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29u
c3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxP
TGlzdEVsZW1lbnRJbXBsJiBvTGlzdCA9ICpzdGF0aWNfY2FzdDxIVE1MT0xpc3RFbGVtZW50SW1w
bCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNlIE9MaXN0Q29t
cGFjdDogICAgICAgICB7IG9MaXN0LnNldENvbXBhY3QodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsg
cmV0dXJuOyB9CisgICAgICAgIGNhc2UgT0xpc3RTdGFydDogICAgICAgICAgIHsgb0xpc3Quc2V0
U3RhcnQodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIE9MaXN0
VHlwZTogICAgICAgICAgICB7IG9MaXN0LnNldFR5cGUoc3RyKTsgcmV0dXJuOyB9CiAgICAgfQot
ICAgIGJyZWFrOwotICAgIGNhc2UgSURfRk9OVDogewotICAgICAgSFRNTEZvbnRFbGVtZW50SW1w
bCAmZm9udCA9IHN0YXRpY19jYXN0PEhUTUxGb250RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0g
ICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIEZvbnRDb2xvcjogICAgICAgICAgIHsg
Zm9udC5zZXRDb2xvcihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgRm9udEZhY2U6ICAgICAg
ICAgICAgeyBmb250LnNldEZhY2Uoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEZvbnRTaXpl
OiAgICAgICAgICAgIHsgZm9udC5zZXRTaXplKHN0cik7IHJldHVybjsgfQotICAgICAgfQorfQor
Cit2b2lkIEhUTUxFbGVtZW50OjpkTGlzdFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
biwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAg
IEhUTUxETGlzdEVsZW1lbnRJbXBsJiBkTGlzdCA9ICpzdGF0aWNfY2FzdDxIVE1MRExpc3RFbGVt
ZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IERMaXN0Q29tcGFjdCkKKyAgICAg
ICAgZExpc3Quc2V0Q29tcGFjdCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOworfQorCit2b2lkIEhU
TUxFbGVtZW50OjpkaXJTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZh
bHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MRGlyZWN0
b3J5RWxlbWVudEltcGwmIGRpcmVjdG9yeSA9ICpzdGF0aWNfY2FzdDxIVE1MRGlyZWN0b3J5RWxl
bWVudEltcGwqPihpbXBsKCkpOworICAgIGlmICh0b2tlbiA9PSBEaXJlY3RvcnlDb21wYWN0KQor
ICAgICAgICBkaXJlY3Rvcnkuc2V0Q29tcGFjdCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOworfQor
Cit2b2lkIEhUTUxFbGVtZW50OjptZW51U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
LCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAg
SFRNTE1lbnVFbGVtZW50SW1wbCYgbWVudSA9ICpzdGF0aWNfY2FzdDxIVE1MTWVudUVsZW1lbnRJ
bXBsKj4oaW1wbCgpKTsKKyAgICBpZiAodG9rZW4gPT0gTWVudUNvbXBhY3QpCisgICAgICAgIG1l
bnUuc2V0Q29tcGFjdCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOworfQorCit2b2lkIEhUTUxFbGVt
ZW50OjpsaVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZh
bHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxMSUVsZW1lbnRJbXBs
JiBsaSA9ICpzdGF0aWNfY2FzdDxIVE1MTElFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dp
dGNoICh0b2tlbikgeworICAgICAgICBjYXNlIExJVHlwZTogICAgICAgICAgICB7IGxpLnNldFR5
cGUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgTElWYWx1ZTogICAgICAgICAgIHsgbGku
c2V0VmFsdWUodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQogICAgIH0KLSAgICBicmVh
azsKLSAgICBjYXNlIElEX0hSOiB7Ci0gICAgICBIVE1MSFJFbGVtZW50SW1wbCAmaHIgPSBzdGF0
aWNfY2FzdDxIVE1MSFJFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9r
ZW4pIHsKLSAgICAgIGNhc2UgSFJBbGlnbjogICAgICAgICAgIHsgaHIuc2V0QWxpZ24oc3RyKTsg
cmV0dXJuOyB9Ci0gICAgICBjYXNlIEhSTm9TaGFkZTogICAgICAgICB7IGhyLnNldE5vU2hhZGUo
dmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEhSU2l6ZTogICAg
ICAgICAgICB7IGhyLnNldFNpemUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEhSV2lkdGg6
ICAgICAgICAgICB7IGhyLnNldFdpZHRoKHN0cik7IHJldHVybjsgfQotICAgICAgfQorfQorCit2
b2lkIEhUTUxFbGVtZW50OjpkaXZTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNv
bnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1M
RGl2RWxlbWVudEltcGwmIGRpdiA9ICpzdGF0aWNfY2FzdDxIVE1MRGl2RWxlbWVudEltcGwqPihp
bXBsKCkpOworICAgIGlmICh0b2tlbiA9PSBEaXZBbGlnbikKKyAgICAgICAgZGl2LnNldEFsaWdu
KHN0cik7Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OnBhcmFncmFwaFNldHRlcihFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmlu
ZyYgc3RyKQoreworICAgIEhUTUxQYXJhZ3JhcGhFbGVtZW50SW1wbCYgcGFyYWdyYXBoID0gKnN0
YXRpY19jYXN0PEhUTUxQYXJhZ3JhcGhFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRv
a2VuID09IFBhcmFncmFwaEFsaWduKQorICAgICAgICBwYXJhZ3JhcGguc2V0QWxpZ24oc3RyKTsK
K30KKwordm9pZCBIVE1MRWxlbWVudDo6aGVhZGluZ1NldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQor
eworICAgIEhUTUxIZWFkaW5nRWxlbWVudEltcGwmIGhlYWRpbmcgPSAqc3RhdGljX2Nhc3Q8SFRN
TEhlYWRpbmdFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IEhlYWRpbmdB
bGlnbikKKyAgICAgICAgaGVhZGluZy5zZXRBbGlnbihzdHIpOworfQorCit2b2lkIEhUTUxFbGVt
ZW50OjpibG9ja1F1b3RlU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBW
YWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTEJsb2Nr
cXVvdGVFbGVtZW50SW1wbCYgYmxvY2tRdW90ZSA9ICpzdGF0aWNfY2FzdDxIVE1MQmxvY2txdW90
ZUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBpZiAodG9rZW4gPT0gQmxvY2tRdW90ZUNpdGUp
CisgICAgICAgIGJsb2NrUXVvdGUuc2V0Q2l0ZShzdHIpOworfQorCit2b2lkIEhUTUxFbGVtZW50
OjpxdW90ZVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZh
bHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxRdW90ZUVsZW1lbnRJ
bXBsJiBxdW90ZSA9ICpzdGF0aWNfY2FzdDxIVE1MUXVvdGVFbGVtZW50SW1wbCo+KGltcGwoKSk7
CisgICAgaWYgKHRva2VuID09IFF1b3RlQ2l0ZSkKKyAgICAgICAgcXVvdGUuc2V0Q2l0ZShzdHIp
OworfQorCit2b2lkIEhUTUxFbGVtZW50OjpwcmVTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sK
KyAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yICd3cmFwJyB3aGVuIHdoaXRlLXNwYWNlOiBw
cmUtd3JhcCBpcyBpbXBsZW1lbnRlZC4KKyAgICBIVE1MUHJlRWxlbWVudEltcGwmIHByZSA9ICpz
dGF0aWNfY2FzdDxIVE1MUHJlRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIGlmICh0b2tlbiA9
PSBQcmVXaWR0aCkKKyAgICAgICAgcHJlLnNldFdpZHRoKHZhbHVlLnRvSW50MzIoZXhlYykpOwor
fQorCit2b2lkIEhUTUxFbGVtZW50OjpiclNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
biwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAg
IEhUTUxCUkVsZW1lbnRJbXBsJiBiciA9ICpzdGF0aWNfY2FzdDxIVE1MQlJFbGVtZW50SW1wbCo+
KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IEJSQ2xlYXIpCisgICAgICAgIGJyLnNldENsZWFy
KHN0cik7Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OmJhc2VGb250U2V0dGVyKEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5n
JiBzdHIpCit7CisgICAgSFRNTEJhc2VGb250RWxlbWVudEltcGwmIGJhc2VGb250ID0gKnN0YXRp
Y19jYXN0PEhUTUxCYXNlRm9udEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRv
a2VuKSB7CisgICAgICAgIGNhc2UgQmFzZUZvbnRDb2xvcjogICAgICAgICAgIHsgYmFzZUZvbnQu
c2V0Q29sb3Ioc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQmFzZUZvbnRGYWNlOiAgICAg
ICAgICAgIHsgYmFzZUZvbnQuc2V0RmFjZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBC
YXNlRm9udFNpemU6ICAgICAgICAgICAgeyBiYXNlRm9udC5zZXRTaXplKHN0cik7IHJldHVybjsg
fQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0lOUzoKLSAgICBjYXNlIElEX0RFTDog
ewotICAgICAgSFRNTE1vZEVsZW1lbnRJbXBsICZtb2QgPSBzdGF0aWNfY2FzdDxIVE1MTW9kRWxl
bWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNl
IE1vZENpdGU6ICAgICAgICAgICAgeyBtb2Quc2V0Q2l0ZShzdHIpOyByZXR1cm47IH0KLSAgICAg
IGNhc2UgTW9kRGF0ZVRpbWU6ICAgICAgICB7IG1vZC5zZXREYXRlVGltZShzdHIpOyByZXR1cm47
IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6Zm9udFNldHRlcihFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmlu
ZyYgc3RyKQoreworICAgIEhUTUxGb250RWxlbWVudEltcGwmIGZvbnQgPSAqc3RhdGljX2Nhc3Q8
SFRNTEZvbnRFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAg
ICAgICBjYXNlIEZvbnRDb2xvcjogICAgICAgICAgIHsgZm9udC5zZXRDb2xvcihzdHIpOyByZXR1
cm47IH0KKyAgICAgICAgY2FzZSBGb250RmFjZTogICAgICAgICAgICB7IGZvbnQuc2V0RmFjZShz
dHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBGb250U2l6ZTogICAgICAgICAgICB7IGZvbnQu
c2V0U2l6ZShzdHIpOyByZXR1cm47IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9B
OiB7Ci0gICAgICBIVE1MQW5jaG9yRWxlbWVudEltcGwgJmFuY2hvciA9IHN0YXRpY19jYXN0PEhU
TUxBbmNob3JFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsK
LSAgICAgIGNhc2UgQW5jaG9yQWNjZXNzS2V5OiAgICAgICB7IGFuY2hvci5zZXRBY2Nlc3NLZXko
c3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEFuY2hvckNoYXJzZXQ6ICAgICAgICAgeyBhbmNo
b3Iuc2V0Q2hhcnNldChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQW5jaG9yQ29vcmRzOiAg
ICAgICAgICB7IGFuY2hvci5zZXRDb29yZHMoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEFu
Y2hvckhyZWY6ICAgICAgICAgICAgeyBhbmNob3Iuc2V0SHJlZihzdHIpOyByZXR1cm47IH0KLSAg
ICAgIGNhc2UgQW5jaG9ySHJlZkxhbmc6ICAgICAgICB7IGFuY2hvci5zZXRIcmVmbGFuZyhzdHIp
OyByZXR1cm47IH0KLSAgICAgIGNhc2UgQW5jaG9yTmFtZTogICAgICAgICAgICB7IGFuY2hvci5z
ZXROYW1lKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBBbmNob3JSZWw6ICAgICAgICAgICAg
IHsgYW5jaG9yLnNldFJlbChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQW5jaG9yUmV2OiAg
ICAgICAgICAgICB7IGFuY2hvci5zZXRSZXYoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEFu
Y2hvclNoYXBlOiAgICAgICAgICAgeyBhbmNob3Iuc2V0U2hhcGUoc3RyKTsgcmV0dXJuOyB9Ci0g
ICAgICBjYXNlIEFuY2hvclRhYkluZGV4OiAgICAgICAgeyBhbmNob3Iuc2V0VGFiSW5kZXgodmFs
dWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBBbmNob3JUYXJnZXQ6ICAg
ICAgICAgIHsgYW5jaG9yLnNldFRhcmdldChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQW5j
aG9yVHlwZTogICAgICAgICAgICB7IGFuY2hvci5zZXRUeXBlKHN0cik7IHJldHVybjsgfQotICAg
ICAgfQorfQorCit2b2lkIEhUTUxFbGVtZW50OjpoclNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQor
eworICAgIEhUTUxIUkVsZW1lbnRJbXBsJiBociA9ICpzdGF0aWNfY2FzdDxIVE1MSFJFbGVtZW50
SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNlIEhSQWxp
Z246ICAgICAgICAgICB7IGhyLnNldEFsaWduKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNl
IEhSTm9TaGFkZTogICAgICAgICB7IGhyLnNldE5vU2hhZGUodmFsdWUudG9Cb29sZWFuKGV4ZWMp
KTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgSFJTaXplOiAgICAgICAgICAgIHsgaHIuc2V0U2l6
ZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBIUldpZHRoOiAgICAgICAgICAgeyBoci5z
ZXRXaWR0aChzdHIpOyByZXR1cm47IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9J
TUc6IHsKLSAgICAgIEhUTUxJbWFnZUVsZW1lbnRJbXBsICZpbWFnZSA9IHN0YXRpY19jYXN0PEhU
TUxJbWFnZUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewot
ICAgICAgY2FzZSBJbWFnZU5hbWU6ICAgICAgICAgICAgeyBpbWFnZS5zZXROYW1lKHN0cik7IHJl
dHVybjsgfQotICAgICAgY2FzZSBJbWFnZUFsaWduOiAgICAgICAgICAgeyBpbWFnZS5zZXRBbGln
bihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSW1hZ2VBbHQ6ICAgICAgICAgICAgIHsgaW1h
Z2Uuc2V0QWx0KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBJbWFnZUJvcmRlcjogICAgICAg
ICAgeyBpbWFnZS5zZXRCb3JkZXIodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQotICAg
ICAgY2FzZSBJbWFnZUhlaWdodDogICAgICAgICAgeyBpbWFnZS5zZXRIZWlnaHQodmFsdWUudG9J
bnQzMihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBJbWFnZUhzcGFjZTogICAgICAgICAg
eyBpbWFnZS5zZXRIc3BhY2UodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQotICAgICAg
Y2FzZSBJbWFnZUlzTWFwOiAgICAgICAgICAgeyBpbWFnZS5zZXRJc01hcCh2YWx1ZS50b0Jvb2xl
YW4oZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSW1hZ2VMb25nRGVzYzogICAgICAgIHsg
aW1hZ2Uuc2V0TG9uZ0Rlc2Moc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEltYWdlU3JjOiAg
ICAgICAgICAgICB7IGltYWdlLnNldFNyYyhzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSW1h
Z2VVc2VNYXA6ICAgICAgICAgIHsgaW1hZ2Uuc2V0VXNlTWFwKHN0cik7IHJldHVybjsgfQotICAg
ICAgY2FzZSBJbWFnZVZzcGFjZTogICAgICAgICAgeyBpbWFnZS5zZXRWc3BhY2UodmFsdWUudG9J
bnQzMihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBJbWFnZVdpZHRoOiAgICAgICAgICAg
eyBpbWFnZS5zZXRXaWR0aCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICB9
Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6Om1vZFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQorewor
ICAgIEhUTUxNb2RFbGVtZW50SW1wbCYgbW9kID0gKnN0YXRpY19jYXN0PEhUTUxNb2RFbGVtZW50
SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNlIE1vZENp
dGU6ICAgICAgICAgICAgeyBtb2Quc2V0Q2l0ZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2Fz
ZSBNb2REYXRlVGltZTogICAgICAgIHsgbW9kLnNldERhdGVUaW1lKHN0cik7IHJldHVybjsgfQog
ICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX09CSkVDVDogewotICAgICAgSFRNTE9iamVj
dEVsZW1lbnRJbXBsICZvYmplY3QgPSBzdGF0aWNfY2FzdDxIVE1MT2JqZWN0RWxlbWVudEltcGwg
Jj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICAvLyByZWFkLW9ubHk6
IGZvcm0KLSAgICAgIGNhc2UgT2JqZWN0Q29kZTogICAgICAgICAgICAgICAgIHsgb2JqZWN0LnNl
dENvZGUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIE9iamVjdEFsaWduOiAgICAgICAgICAg
eyBvYmplY3Quc2V0QWxpZ24oc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIE9iamVjdEFyY2hp
dmU6ICAgICAgICAgeyBvYmplY3Quc2V0QXJjaGl2ZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNh
c2UgT2JqZWN0Qm9yZGVyOiAgICAgICAgICB7IG9iamVjdC5zZXRCb3JkZXIoc3RyKTsgcmV0dXJu
OyB9Ci0gICAgICBjYXNlIE9iamVjdENvZGVCYXNlOiAgICAgICAgeyBvYmplY3Quc2V0Q29kZUJh
c2Uoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIE9iamVjdENvZGVUeXBlOiAgICAgICAgeyBv
YmplY3Quc2V0Q29kZVR5cGUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICAvLyByZWFkLW9ubHk6IE9i
amVjdENvbnRlbnREb2N1bWVudAotICAgICAgY2FzZSBPYmplY3REYXRhOiAgICAgICAgICAgIHsg
b2JqZWN0LnNldERhdGEoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIE9iamVjdERlY2xhcmU6
ICAgICAgICAgeyBvYmplY3Quc2V0RGVjbGFyZSh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1
cm47IH0KLSAgICAgIGNhc2UgT2JqZWN0SGVpZ2h0OiAgICAgICAgICB7IG9iamVjdC5zZXRIZWln
aHQoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIE9iamVjdEhzcGFjZTogICAgICAgICAgeyBv
YmplY3Quc2V0SHNwYWNlKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBPYmplY3ROYW1lOiAg
ICAgICAgICAgIHsgb2JqZWN0LnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIE9i
amVjdFN0YW5kYnk6ICAgICAgICAgeyBvYmplY3Quc2V0U3RhbmRieShzdHIpOyByZXR1cm47IH0K
LSAgICAgIGNhc2UgT2JqZWN0VGFiSW5kZXg6ICAgICAgICB7IG9iamVjdC5zZXRUYWJJbmRleCh2
YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIE9iamVjdFR5cGU6ICAg
ICAgICAgICAgeyBvYmplY3Quc2V0VHlwZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgT2Jq
ZWN0VXNlTWFwOiAgICAgICAgICB7IG9iamVjdC5zZXRVc2VNYXAoc3RyKTsgcmV0dXJuOyB9Ci0g
ICAgICBjYXNlIE9iamVjdFZzcGFjZTogICAgICAgICAgeyBvYmplY3Quc2V0VnNwYWNlKHN0cik7
IHJldHVybjsgfQotICAgICAgY2FzZSBPYmplY3RXaWR0aDogICAgICAgICAgIHsgb2JqZWN0LnNl
dFdpZHRoKHN0cik7IHJldHVybjsgfQotICAgICAgfQorfQorCit2b2lkIEhUTUxFbGVtZW50Ojph
bmNob3JTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1
ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MQW5jaG9yRWxlbWVudElt
cGwmIGFuY2hvciA9ICpzdGF0aWNfY2FzdDxIVE1MQW5jaG9yRWxlbWVudEltcGwqPihpbXBsKCkp
OworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBBbmNob3JBY2Nlc3NLZXk6ICAg
ICAgIHsgYW5jaG9yLnNldEFjY2Vzc0tleShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBB
bmNob3JDaGFyc2V0OiAgICAgICAgIHsgYW5jaG9yLnNldENoYXJzZXQoc3RyKTsgcmV0dXJuOyB9
CisgICAgICAgIGNhc2UgQW5jaG9yQ29vcmRzOiAgICAgICAgICB7IGFuY2hvci5zZXRDb29yZHMo
c3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQW5jaG9ySHJlZjogICAgICAgICAgICB7IGFu
Y2hvci5zZXRIcmVmKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEFuY2hvckhyZWZMYW5n
OiAgICAgICAgeyBhbmNob3Iuc2V0SHJlZmxhbmcoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNh
c2UgQW5jaG9yTmFtZTogICAgICAgICAgICB7IGFuY2hvci5zZXROYW1lKHN0cik7IHJldHVybjsg
fQorICAgICAgICBjYXNlIEFuY2hvclJlbDogICAgICAgICAgICAgeyBhbmNob3Iuc2V0UmVsKHN0
cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEFuY2hvclJldjogICAgICAgICAgICAgeyBhbmNo
b3Iuc2V0UmV2KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEFuY2hvclNoYXBlOiAgICAg
ICAgICAgeyBhbmNob3Iuc2V0U2hhcGUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQW5j
aG9yVGFiSW5kZXg6ICAgICAgICB7IGFuY2hvci5zZXRUYWJJbmRleCh2YWx1ZS50b0ludDMyKGV4
ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQW5jaG9yVGFyZ2V0OiAgICAgICAgICB7IGFu
Y2hvci5zZXRUYXJnZXQoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQW5jaG9yVHlwZTog
ICAgICAgICAgICB7IGFuY2hvci5zZXRUeXBlKHN0cik7IHJldHVybjsgfQogICAgIH0KLSAgICBi
cmVhazsKLSAgICBjYXNlIElEX1BBUkFNOiB7Ci0gICAgICBIVE1MUGFyYW1FbGVtZW50SW1wbCAm
cGFyYW0gPSBzdGF0aWNfY2FzdDxIVE1MUGFyYW1FbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAg
ICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgUGFyYW1OYW1lOiAgICAgICAgICAgIHsg
cGFyYW0uc2V0TmFtZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgUGFyYW1UeXBlOiAgICAg
ICAgICAgIHsgcGFyYW0uc2V0VHlwZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgUGFyYW1W
YWx1ZTogICAgICAgICAgIHsgcGFyYW0uc2V0VmFsdWUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBj
YXNlIFBhcmFtVmFsdWVUeXBlOiAgICAgICB7IHBhcmFtLnNldFZhbHVlVHlwZShzdHIpOyByZXR1
cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6aW1hZ2VTZXR0ZXIoRXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01T
dHJpbmcmIHN0cikKK3sKKyAgICBIVE1MSW1hZ2VFbGVtZW50SW1wbCYgaW1hZ2UgPSAqc3RhdGlj
X2Nhc3Q8SFRNTEltYWdlRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4p
IHsKKyAgICAgICAgY2FzZSBJbWFnZU5hbWU6ICAgICAgICAgICAgeyBpbWFnZS5zZXROYW1lKHN0
cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEltYWdlQWxpZ246ICAgICAgICAgICB7IGltYWdl
LnNldEFsaWduKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEltYWdlQWx0OiAgICAgICAg
ICAgICB7IGltYWdlLnNldEFsdChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJbWFnZUJv
cmRlcjogICAgICAgICAgeyBpbWFnZS5zZXRCb3JkZXIodmFsdWUudG9JbnQzMihleGVjKSk7IHJl
dHVybjsgfQorICAgICAgICBjYXNlIEltYWdlSGVpZ2h0OiAgICAgICAgICB7IGltYWdlLnNldEhl
aWdodCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgSW1hZ2VI
c3BhY2U6ICAgICAgICAgIHsgaW1hZ2Uuc2V0SHNwYWNlKHZhbHVlLnRvSW50MzIoZXhlYykpOyBy
ZXR1cm47IH0KKyAgICAgICAgY2FzZSBJbWFnZUlzTWFwOiAgICAgICAgICAgeyBpbWFnZS5zZXRJ
c01hcCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJbWFn
ZUxvbmdEZXNjOiAgICAgICAgeyBpbWFnZS5zZXRMb25nRGVzYyhzdHIpOyByZXR1cm47IH0KKyAg
ICAgICAgY2FzZSBJbWFnZVNyYzogICAgICAgICAgICAgeyBpbWFnZS5zZXRTcmMoc3RyKTsgcmV0
dXJuOyB9CisgICAgICAgIGNhc2UgSW1hZ2VVc2VNYXA6ICAgICAgICAgIHsgaW1hZ2Uuc2V0VXNl
TWFwKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEltYWdlVnNwYWNlOiAgICAgICAgICB7
IGltYWdlLnNldFZzcGFjZSh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAg
IGNhc2UgSW1hZ2VXaWR0aDogICAgICAgICAgIHsgaW1hZ2Uuc2V0V2lkdGgodmFsdWUudG9JbnQz
MihleGVjKSk7IHJldHVybjsgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0FQUExF
VDogewotICAgICAgSFRNTEFwcGxldEVsZW1lbnRJbXBsICZhcHBsZXQgPSBzdGF0aWNfY2FzdDxI
VE1MQXBwbGV0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7
Ci0gICAgICBjYXNlIEFwcGxldEFsaWduOiAgICAgICAgICAgeyBhcHBsZXQuc2V0QWxpZ24oc3Ry
KTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEFwcGxldEFsdDogICAgICAgICAgICAgeyBhcHBsZXQu
c2V0QWx0KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBBcHBsZXRBcmNoaXZlOiAgICAgICAg
IHsgYXBwbGV0LnNldEFyY2hpdmUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEFwcGxldENv
ZGU6ICAgICAgICAgICAgeyBhcHBsZXQuc2V0Q29kZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNh
c2UgQXBwbGV0Q29kZUJhc2U6ICAgICAgICB7IGFwcGxldC5zZXRDb2RlQmFzZShzdHIpOyByZXR1
cm47IH0KLSAgICAgIGNhc2UgQXBwbGV0SGVpZ2h0OiAgICAgICAgICB7IGFwcGxldC5zZXRIZWln
aHQoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEFwcGxldEhzcGFjZTogICAgICAgICAgeyBh
cHBsZXQuc2V0SHNwYWNlKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBBcHBsZXROYW1lOiAg
ICAgICAgICAgIHsgYXBwbGV0LnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEFw
cGxldE9iamVjdDogICAgICAgICAgeyBhcHBsZXQuc2V0T2JqZWN0KHN0cik7IHJldHVybjsgfQot
ICAgICAgY2FzZSBBcHBsZXRWc3BhY2U6ICAgICAgICAgIHsgYXBwbGV0LnNldFZzcGFjZShzdHIp
OyByZXR1cm47IH0KLSAgICAgIGNhc2UgQXBwbGV0V2lkdGg6ICAgICAgICAgICB7IGFwcGxldC5z
ZXRXaWR0aChzdHIpOyByZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6
b2JqZWN0U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFs
dWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTE9iamVjdEVsZW1lbnRJ
bXBsJiBvYmplY3QgPSAqc3RhdGljX2Nhc3Q8SFRNTE9iamVjdEVsZW1lbnRJbXBsKj4oaW1wbCgp
KTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIC8vIHJlYWQtb25seTogZm9ybQorICAg
ICAgICBjYXNlIE9iamVjdENvZGU6ICAgICAgICAgICAgeyBvYmplY3Quc2V0Q29kZShzdHIpOyBy
ZXR1cm47IH0KKyAgICAgICAgY2FzZSBPYmplY3RBbGlnbjogICAgICAgICAgIHsgb2JqZWN0LnNl
dEFsaWduKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIE9iamVjdEFyY2hpdmU6ICAgICAg
ICAgeyBvYmplY3Quc2V0QXJjaGl2ZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBPYmpl
Y3RCb3JkZXI6ICAgICAgICAgIHsgb2JqZWN0LnNldEJvcmRlcihzdHIpOyByZXR1cm47IH0KKyAg
ICAgICAgY2FzZSBPYmplY3RDb2RlQmFzZTogICAgICAgIHsgb2JqZWN0LnNldENvZGVCYXNlKHN0
cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIE9iamVjdENvZGVUeXBlOiAgICAgICAgeyBvYmpl
Y3Quc2V0Q29kZVR5cGUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIC8vIHJlYWQtb25seTogT2Jq
ZWN0Q29udGVudERvY3VtZW50CisgICAgICAgIGNhc2UgT2JqZWN0RGF0YTogICAgICAgICAgICB7
IG9iamVjdC5zZXREYXRhKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIE9iamVjdERlY2xh
cmU6ICAgICAgICAgeyBvYmplY3Quc2V0RGVjbGFyZSh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyBy
ZXR1cm47IH0KKyAgICAgICAgY2FzZSBPYmplY3RIZWlnaHQ6ICAgICAgICAgIHsgb2JqZWN0LnNl
dEhlaWdodChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBPYmplY3RIc3BhY2U6ICAgICAg
ICAgIHsgb2JqZWN0LnNldEhzcGFjZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBPYmpl
Y3ROYW1lOiAgICAgICAgICAgIHsgb2JqZWN0LnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9CisgICAg
ICAgIGNhc2UgT2JqZWN0U3RhbmRieTogICAgICAgICB7IG9iamVjdC5zZXRTdGFuZGJ5KHN0cik7
IHJldHVybjsgfQorICAgICAgICBjYXNlIE9iamVjdFRhYkluZGV4OiAgICAgICAgeyBvYmplY3Qu
c2V0VGFiSW5kZXgodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNl
IE9iamVjdFR5cGU6ICAgICAgICAgICAgeyBvYmplY3Quc2V0VHlwZShzdHIpOyByZXR1cm47IH0K
KyAgICAgICAgY2FzZSBPYmplY3RVc2VNYXA6ICAgICAgICAgIHsgb2JqZWN0LnNldFVzZU1hcChz
dHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBPYmplY3RWc3BhY2U6ICAgICAgICAgIHsgb2Jq
ZWN0LnNldFZzcGFjZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBPYmplY3RXaWR0aDog
ICAgICAgICAgIHsgb2JqZWN0LnNldFdpZHRoKHN0cik7IHJldHVybjsgfQogICAgIH0KLSAgICBi
cmVhazsKLSAgICBjYXNlIElEX01BUDogewotICAgICAgSFRNTE1hcEVsZW1lbnRJbXBsICZtYXAg
PSBzdGF0aWNfY2FzdDxIVE1MTWFwRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0
Y2ggKHRva2VuKSB7Ci0gICAgICAvLyByZWFkLW9ubHk6IGFyZWFzCi0gICAgICBjYXNlIE1hcE5h
bWU6ICAgICAgICAgICAgICAgICB7IG1hcC5zZXROYW1lKHN0cik7IHJldHVybjsgfQotICAgICB9
Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OnBhcmFtU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7
CisgICAgSFRNTFBhcmFtRWxlbWVudEltcGwmIHBhcmFtID0gKnN0YXRpY19jYXN0PEhUTUxQYXJh
bUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNh
c2UgUGFyYW1OYW1lOiAgICAgICAgICAgIHsgcGFyYW0uc2V0TmFtZShzdHIpOyByZXR1cm47IH0K
KyAgICAgICAgY2FzZSBQYXJhbVR5cGU6ICAgICAgICAgICAgeyBwYXJhbS5zZXRUeXBlKHN0cik7
IHJldHVybjsgfQorICAgICAgICBjYXNlIFBhcmFtVmFsdWU6ICAgICAgICAgICB7IHBhcmFtLnNl
dFZhbHVlKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFBhcmFtVmFsdWVUeXBlOiAgICAg
ICB7IHBhcmFtLnNldFZhbHVlVHlwZShzdHIpOyByZXR1cm47IH0KICAgICB9Ci0gICAgYnJlYWs7
Ci0gICAgY2FzZSBJRF9BUkVBOiB7Ci0gICAgICBIVE1MQXJlYUVsZW1lbnRJbXBsICZhcmVhID0g
c3RhdGljX2Nhc3Q8SFRNTEFyZWFFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRj
aCAodG9rZW4pIHsKLSAgICAgIGNhc2UgQXJlYUFjY2Vzc0tleTogICAgICAgeyBhcmVhLnNldEFj
Y2Vzc0tleShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQXJlYUFsdDogICAgICAgICAgICAg
eyBhcmVhLnNldEFsdChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQXJlYUNvb3JkczogICAg
ICAgICAgeyBhcmVhLnNldENvb3JkcyhzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQXJlYUhy
ZWY6ICAgICAgICAgICAgeyBhcmVhLnNldEhyZWYoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNl
IEFyZWFOb0hyZWY6ICAgICAgICAgIHsgYXJlYS5zZXROb0hyZWYodmFsdWUudG9Cb29sZWFuKGV4
ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEFyZWFTaGFwZTogICAgICAgICAgIHsgYXJlYS5z
ZXRTaGFwZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQXJlYVRhYkluZGV4OiAgICAgICAg
eyBhcmVhLnNldFRhYkluZGV4KHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KLSAgICAg
IGNhc2UgQXJlYVRhcmdldDogICAgICAgICAgeyBhcmVhLnNldFRhcmdldChzdHIpOyByZXR1cm47
IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6YXBwbGV0U2V0dGVyKEV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3Ry
aW5nJiBzdHIpCit7CisgICAgSFRNTEFwcGxldEVsZW1lbnRJbXBsJiBhcHBsZXQgPSAqc3RhdGlj
X2Nhc3Q8SFRNTEFwcGxldEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2Vu
KSB7CisgICAgICAgIGNhc2UgQXBwbGV0QWxpZ246ICAgICAgICAgICB7IGFwcGxldC5zZXRBbGln
bihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBBcHBsZXRBbHQ6ICAgICAgICAgICAgIHsg
YXBwbGV0LnNldEFsdChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBBcHBsZXRBcmNoaXZl
OiAgICAgICAgIHsgYXBwbGV0LnNldEFyY2hpdmUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNh
c2UgQXBwbGV0Q29kZTogICAgICAgICAgICB7IGFwcGxldC5zZXRDb2RlKHN0cik7IHJldHVybjsg
fQorICAgICAgICBjYXNlIEFwcGxldENvZGVCYXNlOiAgICAgICAgeyBhcHBsZXQuc2V0Q29kZUJh
c2Uoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQXBwbGV0SGVpZ2h0OiAgICAgICAgICB7
IGFwcGxldC5zZXRIZWlnaHQoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQXBwbGV0SHNw
YWNlOiAgICAgICAgICB7IGFwcGxldC5zZXRIc3BhY2Uoc3RyKTsgcmV0dXJuOyB9CisgICAgICAg
IGNhc2UgQXBwbGV0TmFtZTogICAgICAgICAgICB7IGFwcGxldC5zZXROYW1lKHN0cik7IHJldHVy
bjsgfQorICAgICAgICBjYXNlIEFwcGxldE9iamVjdDogICAgICAgICAgeyBhcHBsZXQuc2V0T2Jq
ZWN0KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEFwcGxldFZzcGFjZTogICAgICAgICAg
eyBhcHBsZXQuc2V0VnNwYWNlKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEFwcGxldFdp
ZHRoOiAgICAgICAgICAgeyBhcHBsZXQuc2V0V2lkdGgoc3RyKTsgcmV0dXJuOyB9CiAgICAgfQot
ICAgIGJyZWFrOwotICAgIGNhc2UgSURfU0NSSVBUOiB7Ci0gICAgICBIVE1MU2NyaXB0RWxlbWVu
dEltcGwgJnNjcmlwdCA9IHN0YXRpY19jYXN0PEhUTUxTY3JpcHRFbGVtZW50SW1wbCAmPihlbGVt
ZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgU2NyaXB0VGV4dDogICAg
ICAgICAgICB7IHNjcmlwdC5zZXRUZXh0KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBTY3Jp
cHRIdG1sRm9yOiAgICAgICAgIHsgc2NyaXB0LnNldEh0bWxGb3Ioc3RyKTsgcmV0dXJuOyB9Ci0g
ICAgICBjYXNlIFNjcmlwdEV2ZW50OiAgICAgICAgICAgeyBzY3JpcHQuc2V0RXZlbnQoc3RyKTsg
cmV0dXJuOyB9Ci0gICAgICBjYXNlIFNjcmlwdENoYXJzZXQ6ICAgICAgICAgeyBzY3JpcHQuc2V0
Q2hhcnNldChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgU2NyaXB0RGVmZXI6ICAgICAgICAg
ICB7IHNjcmlwdC5zZXREZWZlcih2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KLSAg
ICAgIGNhc2UgU2NyaXB0U3JjOiAgICAgICAgICAgICB7IHNjcmlwdC5zZXRTcmMoc3RyKTsgcmV0
dXJuOyB9Ci0gICAgICBjYXNlIFNjcmlwdFR5cGU6ICAgICAgICAgICAgeyBzY3JpcHQuc2V0VHlw
ZShzdHIpOyByZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6bWFwU2V0
dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0
IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTE1hcEVsZW1lbnRJbXBsJiBtYXAgPSAq
c3RhdGljX2Nhc3Q8SFRNTE1hcEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBpZiAodG9rZW4g
PT0gTWFwTmFtZSkKKyAgICAgICAgLy8gcmVhZC1vbmx5OiBhcmVhcworICAgICAgICBtYXAuc2V0
TmFtZShzdHIpOworfQorCit2b2lkIEhUTUxFbGVtZW50OjphcmVhU2V0dGVyKEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5n
JiBzdHIpCit7CisgICAgSFRNTEFyZWFFbGVtZW50SW1wbCYgYXJlYSA9ICpzdGF0aWNfY2FzdDxI
VE1MQXJlYUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAg
ICAgIGNhc2UgQXJlYUFjY2Vzc0tleTogICAgICAgeyBhcmVhLnNldEFjY2Vzc0tleShzdHIpOyBy
ZXR1cm47IH0KKyAgICAgICAgY2FzZSBBcmVhQWx0OiAgICAgICAgICAgICB7IGFyZWEuc2V0QWx0
KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEFyZWFDb29yZHM6ICAgICAgICAgIHsgYXJl
YS5zZXRDb29yZHMoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQXJlYUhyZWY6ICAgICAg
ICAgICAgeyBhcmVhLnNldEhyZWYoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQXJlYU5v
SHJlZjogICAgICAgICAgeyBhcmVhLnNldE5vSHJlZih2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyBy
ZXR1cm47IH0KKyAgICAgICAgY2FzZSBBcmVhU2hhcGU6ICAgICAgICAgICB7IGFyZWEuc2V0U2hh
cGUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQXJlYVRhYkluZGV4OiAgICAgICAgeyBh
cmVhLnNldFRhYkluZGV4KHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAg
Y2FzZSBBcmVhVGFyZ2V0OiAgICAgICAgICB7IGFyZWEuc2V0VGFyZ2V0KHN0cik7IHJldHVybjsg
fQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX1RBQkxFOiB7Ci0gICAgICBIVE1MVGFi
bGVFbGVtZW50SW1wbCAmdGFibGUgPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVFbGVtZW50SW1wbCAm
PihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgVGFibGVDYXB0
aW9uOiAgICAgICAgIHsgdGFibGUuc2V0Q2FwdGlvbih0b0hUTUxUYWJsZUNhcHRpb25FbGVtZW50
KHZhbHVlKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJsZVRIZWFkOiAgICAgICAgICAgeyB0
YWJsZS5zZXRUSGVhZCh0b0hUTUxUYWJsZVNlY3Rpb25FbGVtZW50KHZhbHVlKSk7IHJldHVybjsg
fQotICAgICAgY2FzZSBUYWJsZVRGb290OiAgICAgICAgICAgeyB0YWJsZS5zZXRURm9vdCh0b0hU
TUxUYWJsZVNlY3Rpb25FbGVtZW50KHZhbHVlKSk7IHJldHVybjsgfQotICAgICAgLy8gcmVhZC1v
bmx5OiByb3dzCi0gICAgICAvLyByZWFkLW9ubHk6IHRib2RpZXMKLSAgICAgIGNhc2UgVGFibGVB
bGlnbjogICAgICAgICAgIHsgdGFibGUuc2V0QWxpZ24oc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBj
YXNlIFRhYmxlQmdDb2xvcjogICAgICAgICB7IHRhYmxlLnNldEJnQ29sb3Ioc3RyKTsgcmV0dXJu
OyB9Ci0gICAgICBjYXNlIFRhYmxlQm9yZGVyOiAgICAgICAgICB7IHRhYmxlLnNldEJvcmRlcihz
dHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVDZWxsUGFkZGluZzogICAgIHsgdGFibGUu
c2V0Q2VsbFBhZGRpbmcoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlQ2VsbFNwYWNp
bmc6ICAgICB7IHRhYmxlLnNldENlbGxTcGFjaW5nKHN0cik7IHJldHVybjsgfQotICAgICAgY2Fz
ZSBUYWJsZUZyYW1lOiAgICAgICAgICAgeyB0YWJsZS5zZXRGcmFtZShzdHIpOyByZXR1cm47IH0K
LSAgICAgIGNhc2UgVGFibGVSdWxlczogICAgICAgICAgIHsgdGFibGUuc2V0UnVsZXMoc3RyKTsg
cmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlU3VtbWFyeTogICAgICAgICB7IHRhYmxlLnNldFN1
bW1hcnkoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlV2lkdGg6ICAgICAgICAgICB7
IHRhYmxlLnNldFdpZHRoKHN0cik7IHJldHVybjsgfQotICAgICAgfQorfQorCit2b2lkIEhUTUxF
bGVtZW50OjpzY3JpcHRTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZh
bHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MU2NyaXB0
RWxlbWVudEltcGwmIHNjcmlwdCA9ICpzdGF0aWNfY2FzdDxIVE1MU2NyaXB0RWxlbWVudEltcGwq
PihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBTY3JpcHRUZXh0
OiAgICAgICAgICAgIHsgc2NyaXB0LnNldFRleHQoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNh
c2UgU2NyaXB0SHRtbEZvcjogICAgICAgICB7IHNjcmlwdC5zZXRIdG1sRm9yKHN0cik7IHJldHVy
bjsgfQorICAgICAgICBjYXNlIFNjcmlwdEV2ZW50OiAgICAgICAgICAgeyBzY3JpcHQuc2V0RXZl
bnQoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgU2NyaXB0Q2hhcnNldDogICAgICAgICB7
IHNjcmlwdC5zZXRDaGFyc2V0KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFNjcmlwdERl
ZmVyOiAgICAgICAgICAgeyBzY3JpcHQuc2V0RGVmZXIodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsg
cmV0dXJuOyB9CisgICAgICAgIGNhc2UgU2NyaXB0U3JjOiAgICAgICAgICAgICB7IHNjcmlwdC5z
ZXRTcmMoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgU2NyaXB0VHlwZTogICAgICAgICAg
ICB7IHNjcmlwdC5zZXRUeXBlKHN0cik7IHJldHVybjsgfQogICAgIH0KLSAgICBicmVhazsKLSAg
ICBjYXNlIElEX0NBUFRJT046IHsKLSAgICAgIEhUTUxUYWJsZUNhcHRpb25FbGVtZW50SW1wbCAm
dGFibGVDYXB0aW9uID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnRJbXBsICY+
KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgY2FzZSBUYWJsZUFsaWdu
OiAgICAgICAgICAgeyB0YWJsZUNhcHRpb24uc2V0QWxpZ24oc3RyKTsgcmV0dXJuOyB9Ci0gICAg
ICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OnRhYmxlU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIp
Cit7CisgICAgSFRNTFRhYmxlRWxlbWVudEltcGwmIHRhYmxlID0gKnN0YXRpY19jYXN0PEhUTUxU
YWJsZUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAg
IGNhc2UgVGFibGVDYXB0aW9uOiAgICAgICAgIHsgdGFibGUuc2V0Q2FwdGlvbih0b0hUTUxUYWJs
ZUNhcHRpb25FbGVtZW50KHZhbHVlKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxlVEhl
YWQ6ICAgICAgICAgICB7IHRhYmxlLnNldFRIZWFkKHRvSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQo
dmFsdWUpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGFibGVURm9vdDogICAgICAgICAgIHsg
dGFibGUuc2V0VEZvb3QodG9IVE1MVGFibGVTZWN0aW9uRWxlbWVudCh2YWx1ZSkpOyByZXR1cm47
IH0KKyAgICAgICAgLy8gcmVhZC1vbmx5OiByb3dzCisgICAgICAgIC8vIHJlYWQtb25seTogdGJv
ZGllcworICAgICAgICBjYXNlIFRhYmxlQWxpZ246ICAgICAgICAgICB7IHRhYmxlLnNldEFsaWdu
KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxlQmdDb2xvcjogICAgICAgICB7IHRh
YmxlLnNldEJnQ29sb3Ioc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGFibGVCb3JkZXI6
ICAgICAgICAgIHsgdGFibGUuc2V0Qm9yZGVyKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNl
IFRhYmxlQ2VsbFBhZGRpbmc6ICAgICB7IHRhYmxlLnNldENlbGxQYWRkaW5nKHN0cik7IHJldHVy
bjsgfQorICAgICAgICBjYXNlIFRhYmxlQ2VsbFNwYWNpbmc6ICAgICB7IHRhYmxlLnNldENlbGxT
cGFjaW5nKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxlRnJhbWU6ICAgICAgICAg
ICB7IHRhYmxlLnNldEZyYW1lKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxlUnVs
ZXM6ICAgICAgICAgICB7IHRhYmxlLnNldFJ1bGVzKHN0cik7IHJldHVybjsgfQorICAgICAgICBj
YXNlIFRhYmxlU3VtbWFyeTogICAgICAgICB7IHRhYmxlLnNldFN1bW1hcnkoc3RyKTsgcmV0dXJu
OyB9CisgICAgICAgIGNhc2UgVGFibGVXaWR0aDogICAgICAgICAgIHsgdGFibGUuc2V0V2lkdGgo
c3RyKTsgcmV0dXJuOyB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfQ09MOiB7Ci0g
ICAgICBIVE1MVGFibGVDb2xFbGVtZW50SW1wbCAmdGFibGVDb2wgPSBzdGF0aWNfY2FzdDxIVE1M
VGFibGVDb2xFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsK
LSAgICAgIGNhc2UgVGFibGVDb2xBbGlnbjogICAgICAgICAgIHsgdGFibGVDb2wuc2V0QWxpZ24o
c3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlQ29sQ2g6ICAgICAgICAgICAgICB7IHRh
YmxlQ29sLnNldENoKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJsZUNvbENoT2ZmOiAg
ICAgICAgICAgeyB0YWJsZUNvbC5zZXRDaE9mZihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2Ug
VGFibGVDb2xTcGFuOiAgICAgICAgICAgIHsgdGFibGVDb2wuc2V0U3Bhbih2YWx1ZS50b0ludDMy
KGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlQ29sVkFsaWduOiAgICAgICAgICB7
IHRhYmxlQ29sLnNldFZBbGlnbihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVDb2xX
aWR0aDogICAgICAgICAgIHsgdGFibGVDb2wuc2V0V2lkdGgoc3RyKTsgcmV0dXJuOyB9Ci0gICAg
ICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OnRhYmxlQ2FwdGlvblNldHRlcihFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmlu
ZyYgc3RyKQoreworICAgIEhUTUxUYWJsZUNhcHRpb25FbGVtZW50SW1wbCYgdGFibGVDYXB0aW9u
ID0gKnN0YXRpY19jYXN0PEhUTUxUYWJsZUNhcHRpb25FbGVtZW50SW1wbCo+KGltcGwoKSk7Cisg
ICAgaWYgKHRva2VuID09IFRhYmxlQ2FwdGlvbkFsaWduKQorICAgICAgICB0YWJsZUNhcHRpb24u
c2V0QWxpZ24oc3RyKTsKK30KKwordm9pZCBIVE1MRWxlbWVudDo6dGFibGVDb2xTZXR0ZXIoRXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpE
T01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MVGFibGVDb2xFbGVtZW50SW1wbCYgdGFibGVDb2wg
PSAqc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ29sRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3
aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBUYWJsZUNvbEFsaWduOiAgICAgICAgICAgeyB0
YWJsZUNvbC5zZXRBbGlnbihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZUNvbENo
OiAgICAgICAgICAgICAgeyB0YWJsZUNvbC5zZXRDaChzdHIpOyByZXR1cm47IH0KKyAgICAgICAg
Y2FzZSBUYWJsZUNvbENoT2ZmOiAgICAgICAgICAgeyB0YWJsZUNvbC5zZXRDaE9mZihzdHIpOyBy
ZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZUNvbFNwYW46ICAgICAgICAgICAgeyB0YWJsZUNv
bC5zZXRTcGFuKHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBU
YWJsZUNvbFZBbGlnbjogICAgICAgICAgeyB0YWJsZUNvbC5zZXRWQWxpZ24oc3RyKTsgcmV0dXJu
OyB9CisgICAgICAgIGNhc2UgVGFibGVDb2xXaWR0aDogICAgICAgICAgIHsgdGFibGVDb2wuc2V0
V2lkdGgoc3RyKTsgcmV0dXJuOyB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfVEhF
QUQ6Ci0gICAgY2FzZSBJRF9UQk9EWToKLSAgICBjYXNlIElEX1RGT09UOiB7Ci0gICAgICBIVE1M
VGFibGVTZWN0aW9uRWxlbWVudEltcGwgJnRhYmxlU2VjdGlvbiA9IHN0YXRpY19jYXN0PEhUTUxU
YWJsZVNlY3Rpb25FbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4p
IHsKLSAgICAgIGNhc2UgVGFibGVTZWN0aW9uQWxpZ246ICAgICAgICAgICB7IHRhYmxlU2VjdGlv
bi5zZXRBbGlnbihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVTZWN0aW9uQ2g6ICAg
ICAgICAgICAgICB7IHRhYmxlU2VjdGlvbi5zZXRDaChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNh
c2UgVGFibGVTZWN0aW9uQ2hPZmY6ICAgICAgICAgICB7IHRhYmxlU2VjdGlvbi5zZXRDaE9mZihz
dHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVTZWN0aW9uVkFsaWduOiAgICAgICAgICB7
IHRhYmxlU2VjdGlvbi5zZXRWQWxpZ24oc3RyKTsgcmV0dXJuOyB9Ci0gICAgICAvLyByZWFkLW9u
bHk6IHJvd3MKLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6dGFibGVTZWN0aW9uU2V0
dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0
IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBs
JiB0YWJsZVNlY3Rpb24gPSAqc3RhdGljX2Nhc3Q8SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBs
Kj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgVGFibGVTZWN0
aW9uQWxpZ246ICAgICAgICAgICB7IHRhYmxlU2VjdGlvbi5zZXRBbGlnbihzdHIpOyByZXR1cm47
IH0KKyAgICAgICAgY2FzZSBUYWJsZVNlY3Rpb25DaDogICAgICAgICAgICAgIHsgdGFibGVTZWN0
aW9uLnNldENoKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxlU2VjdGlvbkNoT2Zm
OiAgICAgICAgICAgeyB0YWJsZVNlY3Rpb24uc2V0Q2hPZmYoc3RyKTsgcmV0dXJuOyB9CisgICAg
ICAgIGNhc2UgVGFibGVTZWN0aW9uVkFsaWduOiAgICAgICAgICB7IHRhYmxlU2VjdGlvbi5zZXRW
QWxpZ24oc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIC8vIHJlYWQtb25seTogcm93cwogICAgIH0K
LSAgICBicmVhazsKLSAgICBjYXNlIElEX1RSOiB7Ci0gICAgICBIVE1MVGFibGVSb3dFbGVtZW50
SW1wbCAmdGFibGVSb3cgPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVSb3dFbGVtZW50SW1wbCAmPihl
bGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIC8vIHJlYWQtb25seTogcm93
SW5kZXgKLSAgICAgIC8vIHJlYWQtb25seTogc2VjdGlvblJvd0luZGV4Ci0gICAgICAvLyByZWFk
LW9ubHk6IGNlbGxzCi0gICAgICBjYXNlIFRhYmxlUm93QWxpZ246ICAgICAgICAgICB7IHRhYmxl
Um93LnNldEFsaWduKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJsZVJvd0JnQ29sb3I6
ICAgICAgICAgeyB0YWJsZVJvdy5zZXRCZ0NvbG9yKHN0cik7IHJldHVybjsgfQotICAgICAgY2Fz
ZSBUYWJsZVJvd0NoOiAgICAgICAgICAgICAgeyB0YWJsZVJvdy5zZXRDaChzdHIpOyByZXR1cm47
IH0KLSAgICAgIGNhc2UgVGFibGVSb3dDaE9mZjogICAgICAgICAgIHsgdGFibGVSb3cuc2V0Q2hP
ZmYoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlUm93VkFsaWduOiAgICAgICAgICB7
IHRhYmxlUm93LnNldFZBbGlnbihzdHIpOyByZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBI
VE1MRWxlbWVudDo6dGFibGVSb3dTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNv
bnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1M
VGFibGVSb3dFbGVtZW50SW1wbCYgdGFibGVSb3cgPSAqc3RhdGljX2Nhc3Q8SFRNTFRhYmxlUm93
RWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgLy8g
cmVhZC1vbmx5OiByb3dJbmRleAorICAgICAgICAvLyByZWFkLW9ubHk6IHNlY3Rpb25Sb3dJbmRl
eAorICAgICAgICAvLyByZWFkLW9ubHk6IGNlbGxzCisgICAgICAgIGNhc2UgVGFibGVSb3dBbGln
bjogICAgICAgICAgIHsgdGFibGVSb3cuc2V0QWxpZ24oc3RyKTsgcmV0dXJuOyB9CisgICAgICAg
IGNhc2UgVGFibGVSb3dCZ0NvbG9yOiAgICAgICAgIHsgdGFibGVSb3cuc2V0QmdDb2xvcihzdHIp
OyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZVJvd0NoOiAgICAgICAgICAgICAgeyB0YWJs
ZVJvdy5zZXRDaChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZVJvd0NoT2ZmOiAg
ICAgICAgICAgeyB0YWJsZVJvdy5zZXRDaE9mZihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2Fz
ZSBUYWJsZVJvd1ZBbGlnbjogICAgICAgICAgeyB0YWJsZVJvdy5zZXRWQWxpZ24oc3RyKTsgcmV0
dXJuOyB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfVEg6Ci0gICAgY2FzZSBJRF9U
RDogewotICAgICAgSFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsICZ0YWJsZUNlbGwgPSBzdGF0aWNf
Y2FzdDxIVE1MVGFibGVDZWxsRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2gg
KHRva2VuKSB7Ci0gICAgICAvLyByZWFkLW9ubHk6IGNlbGxJbmRleAotICAgICAgY2FzZSBUYWJs
ZUNlbGxBYmJyOiAgICAgICAgICAgIHsgdGFibGVDZWxsLnNldEFiYnIoc3RyKTsgcmV0dXJuOyB9
Ci0gICAgICBjYXNlIFRhYmxlQ2VsbEFsaWduOiAgICAgICAgICAgeyB0YWJsZUNlbGwuc2V0QWxp
Z24oc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlQ2VsbEF4aXM6ICAgICAgICAgICAg
eyB0YWJsZUNlbGwuc2V0QXhpcyhzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVDZWxs
QmdDb2xvcjogICAgICAgICB7IHRhYmxlQ2VsbC5zZXRCZ0NvbG9yKHN0cik7IHJldHVybjsgfQot
ICAgICAgY2FzZSBUYWJsZUNlbGxDaDogICAgICAgICAgICAgIHsgdGFibGVDZWxsLnNldENoKHN0
cik7IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJsZUNlbGxDaE9mZjogICAgICAgICAgIHsgdGFi
bGVDZWxsLnNldENoT2ZmKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJsZUNlbGxDb2xT
cGFuOiAgICAgICAgIHsgdGFibGVDZWxsLnNldENvbFNwYW4odmFsdWUudG9JbnQzMihleGVjKSk7
IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJsZUNlbGxIZWFkZXJzOiAgICAgICAgIHsgdGFibGVD
ZWxsLnNldEhlYWRlcnMoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlQ2VsbEhlaWdo
dDogICAgICAgICAgeyB0YWJsZUNlbGwuc2V0SGVpZ2h0KHN0cik7IHJldHVybjsgfQotICAgICAg
Y2FzZSBUYWJsZUNlbGxOb1dyYXA6ICAgICAgICAgIHsgdGFibGVDZWxsLnNldE5vV3JhcCh2YWx1
ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVDZWxsUm93U3Bh
bjogICAgICAgICB7IHRhYmxlQ2VsbC5zZXRSb3dTcGFuKHZhbHVlLnRvSW50MzIoZXhlYykpOyBy
ZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVDZWxsU2NvcGU6ICAgICAgICAgICB7IHRhYmxlQ2Vs
bC5zZXRTY29wZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVDZWxsVkFsaWduOiAg
ICAgICAgICB7IHRhYmxlQ2VsbC5zZXRWQWxpZ24oc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNl
IFRhYmxlQ2VsbFdpZHRoOiAgICAgICAgICAgeyB0YWJsZUNlbGwuc2V0V2lkdGgoc3RyKTsgcmV0
dXJuOyB9Ci0gICAgICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OnRhYmxlQ2VsbFNldHRlcihF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006
OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbCYgdGFibGVD
ZWxsID0gKnN0YXRpY19jYXN0PEhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbCo+KGltcGwoKSk7Cisg
ICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICAvLyByZWFkLW9ubHk6IGNlbGxJbmRleAorICAg
ICAgICBjYXNlIFRhYmxlQ2VsbEFiYnI6ICAgICAgICAgICAgeyB0YWJsZUNlbGwuc2V0QWJicihz
dHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZUNlbGxBbGlnbjogICAgICAgICAgIHsg
dGFibGVDZWxsLnNldEFsaWduKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxlQ2Vs
bEF4aXM6ICAgICAgICAgICAgeyB0YWJsZUNlbGwuc2V0QXhpcyhzdHIpOyByZXR1cm47IH0KKyAg
ICAgICAgY2FzZSBUYWJsZUNlbGxCZ0NvbG9yOiAgICAgICAgIHsgdGFibGVDZWxsLnNldEJnQ29s
b3Ioc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGFibGVDZWxsQ2g6ICAgICAgICAgICAg
ICB7IHRhYmxlQ2VsbC5zZXRDaChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZUNl
bGxDaE9mZjogICAgICAgICAgIHsgdGFibGVDZWxsLnNldENoT2ZmKHN0cik7IHJldHVybjsgfQor
ICAgICAgICBjYXNlIFRhYmxlQ2VsbENvbFNwYW46ICAgICAgICAgeyB0YWJsZUNlbGwuc2V0Q29s
U3Bhbih2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGFibGVD
ZWxsSGVhZGVyczogICAgICAgICB7IHRhYmxlQ2VsbC5zZXRIZWFkZXJzKHN0cik7IHJldHVybjsg
fQorICAgICAgICBjYXNlIFRhYmxlQ2VsbEhlaWdodDogICAgICAgICAgeyB0YWJsZUNlbGwuc2V0
SGVpZ2h0KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxlQ2VsbE5vV3JhcDogICAg
ICAgICAgeyB0YWJsZUNlbGwuc2V0Tm9XcmFwKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVy
bjsgfQorICAgICAgICBjYXNlIFRhYmxlQ2VsbFJvd1NwYW46ICAgICAgICAgeyB0YWJsZUNlbGwu
c2V0Um93U3Bhbih2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2Ug
VGFibGVDZWxsU2NvcGU6ICAgICAgICAgICB7IHRhYmxlQ2VsbC5zZXRTY29wZShzdHIpOyByZXR1
cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZUNlbGxWQWxpZ246ICAgICAgICAgIHsgdGFibGVDZWxs
LnNldFZBbGlnbihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZUNlbGxXaWR0aDog
ICAgICAgICAgIHsgdGFibGVDZWxsLnNldFdpZHRoKHN0cik7IHJldHVybjsgfQogICAgIH0KLSAg
ICBicmVhazsKLSAgICBjYXNlIElEX0ZSQU1FU0VUOiB7Ci0gICAgICBIVE1MRnJhbWVTZXRFbGVt
ZW50SW1wbCAmZnJhbWVTZXQgPSBzdGF0aWNfY2FzdDxIVE1MRnJhbWVTZXRFbGVtZW50SW1wbCAm
PihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgRnJhbWVTZXRD
b2xzOiAgICAgICAgICAgIHsgZnJhbWVTZXQuc2V0Q29scyhzdHIpOyByZXR1cm47IH0KLSAgICAg
IGNhc2UgRnJhbWVTZXRSb3dzOiAgICAgICAgICAgIHsgZnJhbWVTZXQuc2V0Um93cyhzdHIpOyBy
ZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6ZnJhbWVTZXRTZXR0ZXIo
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9N
OjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MRnJhbWVTZXRFbGVtZW50SW1wbCYgZnJhbWVT
ZXQgPSAqc3RhdGljX2Nhc3Q8SFRNTEZyYW1lU2V0RWxlbWVudEltcGwqPihpbXBsKCkpOworICAg
IHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBGcmFtZVNldENvbHM6ICAgICAgICAgICAg
eyBmcmFtZVNldC5zZXRDb2xzKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEZyYW1lU2V0
Um93czogICAgICAgICAgICB7IGZyYW1lU2V0LnNldFJvd3Moc3RyKTsgcmV0dXJuOyB9CiAgICAg
fQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfRlJBTUU6IHsKLSAgICAgIEhUTUxGcmFtZUVsZW1l
bnRJbXBsICZmcmFtZUVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRnJhbWVFbGVtZW50SW1wbCAm
PihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgICAvLyByZWFkLW9ubHk6
IEZyYW1lQ29udGVudERvY3VtZW50OgotICAgICAgY2FzZSBGcmFtZUZyYW1lQm9yZGVyOiAgICAg
eyBmcmFtZUVsZW1lbnQuc2V0RnJhbWVCb3JkZXIoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNl
IEZyYW1lTG9uZ0Rlc2M6ICAgICAgICB7IGZyYW1lRWxlbWVudC5zZXRMb25nRGVzYyhzdHIpOyBy
ZXR1cm47IH0KLSAgICAgIGNhc2UgRnJhbWVNYXJnaW5IZWlnaHQ6ICAgIHsgZnJhbWVFbGVtZW50
LnNldE1hcmdpbkhlaWdodChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgRnJhbWVNYXJnaW5X
aWR0aDogICAgIHsgZnJhbWVFbGVtZW50LnNldE1hcmdpbldpZHRoKHN0cik7IHJldHVybjsgfQot
ICAgICAgY2FzZSBGcmFtZU5hbWU6ICAgICAgICAgICAgeyBmcmFtZUVsZW1lbnQuc2V0TmFtZShz
dHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgRnJhbWVOb1Jlc2l6ZTogICAgICAgIHsgZnJhbWVF
bGVtZW50LnNldE5vUmVzaXplKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQotICAg
ICAgY2FzZSBGcmFtZVNjcm9sbGluZzogICAgICAgeyBmcmFtZUVsZW1lbnQuc2V0U2Nyb2xsaW5n
KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBGcmFtZVNyYzogICAgICAgICAgICAgeyBmcmFt
ZUVsZW1lbnQuc2V0U3JjKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBGcmFtZUxvY2F0aW9u
OiAgICAgICAgeyBmcmFtZUVsZW1lbnQuc2V0TG9jYXRpb24oc3RyKTsgcmV0dXJuOyB9Ci0gICAg
ICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OmZyYW1lU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIp
Cit7CisgICAgSFRNTEZyYW1lRWxlbWVudEltcGwmIGZyYW1lRWxlbWVudCA9ICpzdGF0aWNfY2Fz
dDxIVE1MRnJhbWVFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgewor
ICAgICAgICAvLyByZWFkLW9ubHk6IEZyYW1lQ29udGVudERvY3VtZW50OgorICAgICAgICBjYXNl
IEZyYW1lRnJhbWVCb3JkZXI6ICAgICB7IGZyYW1lRWxlbWVudC5zZXRGcmFtZUJvcmRlcihzdHIp
OyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBGcmFtZUxvbmdEZXNjOiAgICAgICAgeyBmcmFtZUVs
ZW1lbnQuc2V0TG9uZ0Rlc2Moc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgRnJhbWVNYXJn
aW5IZWlnaHQ6ICAgIHsgZnJhbWVFbGVtZW50LnNldE1hcmdpbkhlaWdodChzdHIpOyByZXR1cm47
IH0KKyAgICAgICAgY2FzZSBGcmFtZU1hcmdpbldpZHRoOiAgICAgeyBmcmFtZUVsZW1lbnQuc2V0
TWFyZ2luV2lkdGgoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgRnJhbWVOYW1lOiAgICAg
ICAgICAgIHsgZnJhbWVFbGVtZW50LnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNh
c2UgRnJhbWVOb1Jlc2l6ZTogICAgICAgIHsgZnJhbWVFbGVtZW50LnNldE5vUmVzaXplKHZhbHVl
LnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIEZyYW1lU2Nyb2xsaW5n
OiAgICAgICB7IGZyYW1lRWxlbWVudC5zZXRTY3JvbGxpbmcoc3RyKTsgcmV0dXJuOyB9CisgICAg
ICAgIGNhc2UgRnJhbWVTcmM6ICAgICAgICAgICAgIHsgZnJhbWVFbGVtZW50LnNldFNyYyhzdHIp
OyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBGcmFtZUxvY2F0aW9uOiAgICAgICAgeyBmcmFtZUVs
ZW1lbnQuc2V0TG9jYXRpb24oc3RyKTsgcmV0dXJuOyB9CiAgICAgfQotICAgIGJyZWFrOwotICAg
IGNhc2UgSURfSUZSQU1FOiB7Ci0gICAgICBIVE1MSUZyYW1lRWxlbWVudEltcGwgJmlGcmFtZSA9
IHN0YXRpY19jYXN0PEhUTUxJRnJhbWVFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3
aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgSUZyYW1lQWxpZ246ICAgICAgICAgICB7IGlGcmFt
ZS5zZXRBbGlnbihzdHIpOyByZXR1cm47IH0KLSAgICAgIC8vIHJlYWQtb25seTogSUZyYW1lQ29u
dGVudERvY3VtZW50Ci0gICAgICBjYXNlIElGcmFtZUZyYW1lQm9yZGVyOiAgICAgeyBpRnJhbWUu
c2V0RnJhbWVCb3JkZXIoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElGcmFtZUhlaWdodDog
ICAgICAgICAgeyBpRnJhbWUuc2V0SGVpZ2h0KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBJ
RnJhbWVMb25nRGVzYzogICAgICAgIHsgaUZyYW1lLnNldExvbmdEZXNjKHN0cik7IHJldHVybjsg
fQotICAgICAgY2FzZSBJRnJhbWVNYXJnaW5IZWlnaHQ6ICAgIHsgaUZyYW1lLnNldE1hcmdpbkhl
aWdodChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSUZyYW1lTWFyZ2luV2lkdGg6ICAgICB7
IGlGcmFtZS5zZXRNYXJnaW5XaWR0aChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSUZyYW1l
TmFtZTogICAgICAgICAgICB7IGlGcmFtZS5zZXROYW1lKHN0cik7IHJldHVybjsgfQotICAgICAg
Y2FzZSBJRnJhbWVTY3JvbGxpbmc6ICAgICAgIHsgaUZyYW1lLnNldFNjcm9sbGluZyhzdHIpOyBy
ZXR1cm47IH0KLSAgICAgIGNhc2UgSUZyYW1lU3JjOiAgICAgICAgICAgICB7IGlGcmFtZS5zZXRT
cmMoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElGcmFtZVdpZHRoOiAgICAgICAgICAgeyBp
RnJhbWUuc2V0V2lkdGgoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICB9Ci0gICAgICBicmVhazsKK30K
Kwordm9pZCBIVE1MRWxlbWVudDo6aUZyYW1lU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7Cisg
ICAgSFRNTElGcmFtZUVsZW1lbnRJbXBsJiBpRnJhbWUgPSAqc3RhdGljX2Nhc3Q8SFRNTElGcmFt
ZUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNh
c2UgSUZyYW1lQWxpZ246ICAgICAgICAgICB7IGlGcmFtZS5zZXRBbGlnbihzdHIpOyByZXR1cm47
IH0KKyAgICAgICAgLy8gcmVhZC1vbmx5OiBJRnJhbWVDb250ZW50RG9jdW1lbnQKKyAgICAgICAg
Y2FzZSBJRnJhbWVGcmFtZUJvcmRlcjogICAgIHsgaUZyYW1lLnNldEZyYW1lQm9yZGVyKHN0cik7
IHJldHVybjsgfQorICAgICAgICBjYXNlIElGcmFtZUhlaWdodDogICAgICAgICAgeyBpRnJhbWUu
c2V0SGVpZ2h0KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIElGcmFtZUxvbmdEZXNjOiAg
ICAgICAgeyBpRnJhbWUuc2V0TG9uZ0Rlc2Moc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2Ug
SUZyYW1lTWFyZ2luSGVpZ2h0OiAgICB7IGlGcmFtZS5zZXRNYXJnaW5IZWlnaHQoc3RyKTsgcmV0
dXJuOyB9CisgICAgICAgIGNhc2UgSUZyYW1lTWFyZ2luV2lkdGg6ICAgICB7IGlGcmFtZS5zZXRN
YXJnaW5XaWR0aChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJRnJhbWVOYW1lOiAgICAg
ICAgICAgIHsgaUZyYW1lLnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgSUZy
YW1lU2Nyb2xsaW5nOiAgICAgICB7IGlGcmFtZS5zZXRTY3JvbGxpbmcoc3RyKTsgcmV0dXJuOyB9
CisgICAgICAgIGNhc2UgSUZyYW1lU3JjOiAgICAgICAgICAgICB7IGlGcmFtZS5zZXRTcmMoc3Ry
KTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgSUZyYW1lV2lkdGg6ICAgICAgICAgICB7IGlGcmFt
ZS5zZXRXaWR0aChzdHIpOyByZXR1cm47IH0KICAgICB9Ci0gIH0KK30KIAotICAvLyBnZW5lcmlj
IHByb3BlcnRpZXMKLSAgc3dpdGNoICh0b2tlbikgewotICBjYXNlIEVsZW1lbnRJZDoKLSAgICBl
bGVtZW50LnNldElkKHN0cik7Ci0gICAgcmV0dXJuOwotICBjYXNlIEVsZW1lbnRUaXRsZToKLSAg
ICBlbGVtZW50LnNldFRpdGxlKHN0cik7Ci0gICAgcmV0dXJuOwotICBjYXNlIEVsZW1lbnRMYW5n
OgotICAgIGVsZW1lbnQuc2V0TGFuZyhzdHIpOwotICAgIHJldHVybjsKLSAgY2FzZSBFbGVtZW50
RGlyOgotICAgIGVsZW1lbnQuc2V0RGlyKHN0cik7Ci0gICAgcmV0dXJuOwotICBjYXNlIEVsZW1l
bnRDbGFzc05hbWU6Ci0gICAgZWxlbWVudC5zZXRDbGFzc05hbWUoc3RyKTsKLSAgICByZXR1cm47
Ci0gIGNhc2UgRWxlbWVudElubmVySFRNTDoKLSAgICBlbGVtZW50LnNldElubmVySFRNTChzdHIs
IGV4Y2VwdGlvbik7Ci0gICAgcmV0dXJuOwotICBjYXNlIEVsZW1lbnRJbm5lclRleHQ6Ci0gICAg
ZWxlbWVudC5zZXRJbm5lclRleHQoc3RyLCBleGNlcHRpb24pOwotICAgIHJldHVybjsKLSAgY2Fz
ZSBFbGVtZW50T3V0ZXJIVE1MOgotICAgIGVsZW1lbnQuc2V0T3V0ZXJIVE1MKHN0ciwgZXhjZXB0
aW9uKTsKLSAgICByZXR1cm47Ci0gIGNhc2UgRWxlbWVudE91dGVyVGV4dDoKLSAgICBlbGVtZW50
LnNldE91dGVyVGV4dChzdHIsIGV4Y2VwdGlvbik7Ci0gICAgcmV0dXJuOwotICBjYXNlIEVsZW1l
bnRDb250ZW50RWRpdGFibGU6Ci0gICAgZWxlbWVudC5zZXRDb250ZW50RWRpdGFibGUoc3RyKTsK
LSAgICByZXR1cm47Ci0gIGRlZmF1bHQ6Ci0gICAga2RXYXJuaW5nKCkgPDwgIktKUzo6SFRNTEVs
ZW1lbnQ6OnB1dFZhbHVlIHVuaGFuZGxlZCB0b2tlbiAiIDw8IHRva2VuIDw8ICIgdGhpc1RhZz0i
IDw8IGVsZW1lbnQudGFnTmFtZSgpLnN0cmluZygpIDw8ICIgc3RyPSIgPDwgc3RyLnN0cmluZygp
IDw8IGVuZGw7Ci0gIH0KK3ZvaWQgSFRNTEVsZW1lbnQ6Om1hcnF1ZWVTZXR0ZXIoRXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJp
bmcmIHN0cikKK3sKKyAgICAvLyBGSVhNRTogRmluZCBvdXQgd2hhdCBXaW5JRSBzdXBwb3J0cyBh
bmQgaW1wbGVtZW50IGl0LgorfQorCit2b2lkIEhUTUxFbGVtZW50OjpwdXRWYWx1ZShFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBpbnQpCit7CisgICAgRE9N
RXhjZXB0aW9uVHJhbnNsYXRvciBleGNlcHRpb24oZXhlYyk7CisgICAgRE9NOjpET01TdHJpbmcg
c3RyID0gdmFsdWUuaXNBKE51bGxUeXBlKSA/IERPTTo6RE9NU3RyaW5nKCkgOiB2YWx1ZS50b1N0
cmluZyhleGVjKS5zdHJpbmcoKTsKKyAKKyAgICAvLyBDaGVjayBvdXIgc2V0IG9mIGdlbmVyaWMg
cHJvcGVydGllcyBmaXJzdC4KKyAgICBIVE1MRWxlbWVudEltcGwgJmVsZW1lbnQgPSAqc3RhdGlj
X2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgewor
ICAgICAgICBjYXNlIEVsZW1lbnRJZDoKKyAgICAgICAgICAgIGVsZW1lbnQuc2V0SWQoc3RyKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBFbGVtZW50VGl0bGU6CisgICAgICAg
ICAgICBlbGVtZW50LnNldFRpdGxlKHN0cik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IGNhc2UgRWxlbWVudExhbmc6CisgICAgICAgICAgICBlbGVtZW50LnNldExhbmcoc3RyKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBFbGVtZW50RGlyOgorICAgICAgICAgICAg
ZWxlbWVudC5zZXREaXIoc3RyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBF
bGVtZW50Q2xhc3NOYW1lOgorICAgICAgICAgICAgZWxlbWVudC5zZXRDbGFzc05hbWUoc3RyKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBFbGVtZW50SW5uZXJIVE1MOgorICAg
ICAgICAgICAgZWxlbWVudC5zZXRJbm5lckhUTUwoc3RyLCBleGNlcHRpb24pOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICBjYXNlIEVsZW1lbnRJbm5lclRleHQ6CisgICAgICAgICAgICBl
bGVtZW50LnNldElubmVyVGV4dChzdHIsIGV4Y2VwdGlvbik7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIGNhc2UgRWxlbWVudE91dGVySFRNTDoKKyAgICAgICAgICAgIGVsZW1lbnQuc2V0
T3V0ZXJIVE1MKHN0ciwgZXhjZXB0aW9uKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
Y2FzZSBFbGVtZW50T3V0ZXJUZXh0OgorICAgICAgICAgICAgZWxlbWVudC5zZXRPdXRlclRleHQo
c3RyLCBleGNlcHRpb24pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIEVsZW1l
bnRDb250ZW50RWRpdGFibGU6CisgICAgICAgICAgICBlbGVtZW50LnNldENvbnRlbnRFZGl0YWJs
ZShzdHIpOworICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIE5vdyBjaGVjayBm
b3IgcHJvcGVydGllcyB0aGF0IGFwcGx5IHRvIGEgc3BlY2lmaWMgZWxlbWVudCB0eXBlLgorICAg
IGNvbnN0IEdldFNldEluZm8qIGluZm8gPSBnZXRTZXRJbmZvKCk7CisgICAgaWYgKGluZm8gJiYg
aW5mby0+bV9zZXR0ZXIpCisgICAgICAgIHJldHVybiAodGhpcy0+KihpbmZvLT5tX3NldHRlcikp
KGV4ZWMsIHRva2VuLCB2YWx1ZSwgc3RyKTsgIAogfQogCiBIVE1MRWxlbWVudEltcGwgKnRvSFRN
TEVsZW1lbnQoVmFsdWVJbXAgKnZhbCkKQEAgLTMxMTMsMjMgKzMyNzQsMTcgQEAgSFRNTEVsZW1l
bnRJbXBsICp0b0hUTUxFbGVtZW50KFZhbHVlSW1wIAogCiBIVE1MVGFibGVDYXB0aW9uRWxlbWVu
dEltcGwgKnRvSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQoVmFsdWVJbXAgKnZhbCkKIHsKLSAgICBp
ZiAoSFRNTEVsZW1lbnRJbXBsICplID0gdG9IVE1MRWxlbWVudCh2YWwpKQotICAgICAgICBzd2l0
Y2ggKGUtPmlkKCkpIHsKLSAgICAgICAgICAgIGNhc2UgSURfQ0FQVElPTjoKLSAgICAgICAgICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnRJbXBsICo+KGUp
OwotICAgICAgICB9CisgICAgSFRNTEVsZW1lbnRJbXBsICplID0gdG9IVE1MRWxlbWVudCh2YWwp
OworICAgIGlmIChlICYmIGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpjYXB0aW9uKCkpKQorICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnRJbXBsICo+KGUp
OwogICAgIHJldHVybiAwOwogfQogCiBIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGwgKnRvSFRN
TFRhYmxlU2VjdGlvbkVsZW1lbnQoVmFsdWVJbXAgKnZhbCkKIHsKLSAgICBpZiAoSFRNTEVsZW1l
bnRJbXBsICplID0gdG9IVE1MRWxlbWVudCh2YWwpKQotICAgICAgICBzd2l0Y2ggKGUtPmlkKCkp
IHsKLSAgICAgICAgICAgIGNhc2UgSURfVEhFQUQ6Ci0gICAgICAgICAgICBjYXNlIElEX1RCT0RZ
OgotICAgICAgICAgICAgY2FzZSBJRF9URk9PVDoKLSAgICAgICAgICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsICo+KGUpOwotICAgICAgICB9Cisg
ICAgSFRNTEVsZW1lbnRJbXBsICplID0gdG9IVE1MRWxlbWVudCh2YWwpOworICAgIGlmIChlICYm
IChlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGhlYWQoKSkgfHwgZS0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OnRib2R5KCkpIHx8IGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0Zm9vdCgpKSkpCisg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGwgKj4o
ZSk7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTMxNzgsMTAgKzMzMzMsMTAgQEAgVmFsdWUgS0pT
OjpIVE1MQ29sbGVjdGlvbjo6dHJ5R2V0KEV4ZWNTdAogICBlbHNlIGlmIChwcm9wZXJ0eU5hbWUg
PT0gInNlbGVjdGVkSW5kZXgiKSB7CiAgICAgLy8gTk9OLVNUQU5EQVJEIG9wdGlvbnMuc2VsZWN0
ZWRJbmRleAogICAgIE5vZGVJbXBsICpvcHRpb24gPSBjb2xsZWN0aW9uLml0ZW0oMCk7Ci0gICAg
aWYgKG9wdGlvbi0+aWQoKSA9PSBJRF9PUFRJT04pIHsKKyAgICBpZiAob3B0aW9uLT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpKSB7CiAgICAgICBOb2RlSW1wbCAqc2VsZWN0ID0gb3B0
aW9uOwogICAgICAgd2hpbGUgKChzZWxlY3QgPSBzZWxlY3QtPnBhcmVudE5vZGUoKSkpCi0gICAg
ICAgIGlmIChzZWxlY3QtPmlkKCkgPT0gSURfU0VMRUNUKQorICAgICAgICBpZiAoc2VsZWN0LT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6c2VsZWN0KCkpKQogCSAgcmV0dXJuIE51bWJlcihzdGF0aWNf
Y2FzdDxIVE1MU2VsZWN0RWxlbWVudEltcGwgKj4oc2VsZWN0KS0+c2VsZWN0ZWRJbmRleCgpKTsK
ICAgICB9CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwpAQCAtMzM2OSw3ICszNTI0LDcgQEAgdm9p
ZCBLSlM6OkhUTUxTZWxlY3RDb2xsZWN0aW9uOjp0cnlQdXQoRQogCiAgIC8vIGlzIHYgYW4gb3B0
aW9uIGVsZW1lbnQgPwogICBOb2RlSW1wbCAqb3B0aW9uID0gdG9Ob2RlKHZhbHVlKTsKLSAgaWYg
KCFvcHRpb24gfHwgb3B0aW9uLT5pZCgpICE9IElEX09QVElPTikKKyAgaWYgKCFvcHRpb24gfHwg
IW9wdGlvbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9wdGlvbigpKSkKICAgICByZXR1cm47CiAK
ICAgaW50IGV4Y2VwdGlvbiA9IDA7CkluZGV4OiBraHRtbC9lY21hL2tqc19odG1sLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWNtYS9ranNfaHRtbC5oLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjQ5CmRpZmYgLXUgLXAgLXIxLjQ5IGtodG1sL2VjbWEva2pz
X2h0bWwuaAotLS0ga2h0bWwvZWNtYS9ranNfaHRtbC5oCTMgSnVsIDIwMDUgMTA6NDc6NTYgLTAw
MDAJMS40OQorKysga2h0bWwvZWNtYS9ranNfaHRtbC5oCTggSnVsIDIwMDUgMDU6NDk6NTQgLTAw
MDAKQEAgLTg1LDYgKzg1LDEzMSBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgIGNhcHRpb25faW5m
bywgY29sX2luZm8sIHRhYmxlc2VjdGlvbl9pbmZvLCB0cl9pbmZvLAogICAgICAgdGFibGVjZWxs
X2luZm8sIGZyYW1lU2V0X2luZm8sIGZyYW1lX2luZm8sIGlGcmFtZV9pbmZvLCBtYXJxdWVlX2lu
Zm87CiAKKyAgICAvLyBGSVhNRTogTWlnaHQgbWFrZSBzZW5zZSB0byBjb21iaW5lIHRoaXMgd2l0
aCBDbGFzc0luZm8gc29tZSBkYXkuCisgICAgdHlwZWRlZiBWYWx1ZSAoSFRNTEVsZW1lbnQ6OipH
ZXR0ZXJGdW5jdGlvbikoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHR5
cGVkZWYgdm9pZCAoSFRNTEVsZW1lbnQ6OipTZXR0ZXJGdW5jdGlvbikoRXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0
cik7CisgICAgc3RydWN0IEdldFNldEluZm8geyBHZXR0ZXJGdW5jdGlvbiBtX2dldHRlcjsgU2V0
dGVyRnVuY3Rpb24gbV9zZXR0ZXI7IH07CisgICAgY29uc3QgR2V0U2V0SW5mbyogZ2V0U2V0SW5m
bygpIGNvbnN0OworICAgIHN0YXRpYyBjb25zdCBHZXRTZXRJbmZvIGh0bWxfZ2V0c2V0LCBoZWFk
X2dldHNldCwgbGlua19nZXRzZXQsIHRpdGxlX2dldHNldCwKKyAgICAgIG1ldGFfZ2V0c2V0LCBi
YXNlX2dldHNldCwgaXNJbmRleF9nZXRzZXQsIHN0eWxlX2dldHNldCwgYm9keV9nZXRzZXQsIGZv
cm1fZ2V0c2V0LAorICAgICAgc2VsZWN0X2dldHNldCwgb3B0R3JvdXBfZ2V0c2V0LCBvcHRpb25f
Z2V0c2V0LCBpbnB1dF9nZXRzZXQsIHRleHRBcmVhX2dldHNldCwKKyAgICAgIGJ1dHRvbl9nZXRz
ZXQsIGxhYmVsX2dldHNldCwgZmllbGRTZXRfZ2V0c2V0LCBsZWdlbmRfZ2V0c2V0LCB1bF9nZXRz
ZXQsIG9sX2dldHNldCwKKyAgICAgIGRsX2dldHNldCwgZGlyX2dldHNldCwgbWVudV9nZXRzZXQs
IGxpX2dldHNldCwgZGl2X2dldHNldCwgcF9nZXRzZXQsIGhlYWRpbmdfZ2V0c2V0LAorICAgICAg
YmxvY2tRdW90ZV9nZXRzZXQsIHFfZ2V0c2V0LCBwcmVfZ2V0c2V0LCBicl9nZXRzZXQsIGJhc2VG
b250X2dldHNldCwgZm9udF9nZXRzZXQsCisgICAgICBocl9nZXRzZXQsIG1vZF9nZXRzZXQsIGFf
Z2V0c2V0LCBjYW52YXNfZ2V0c2V0LCBpbWdfZ2V0c2V0LCBvYmplY3RfZ2V0c2V0LCBwYXJhbV9n
ZXRzZXQsCisgICAgICBhcHBsZXRfZ2V0c2V0LCBtYXBfZ2V0c2V0LCBhcmVhX2dldHNldCwgc2Ny
aXB0X2dldHNldCwgdGFibGVfZ2V0c2V0LAorICAgICAgY2FwdGlvbl9nZXRzZXQsIGNvbF9nZXRz
ZXQsIHRhYmxlc2VjdGlvbl9nZXRzZXQsIHRyX2dldHNldCwKKyAgICAgIHRhYmxlY2VsbF9nZXRz
ZXQsIGZyYW1lU2V0X2dldHNldCwgZnJhbWVfZ2V0c2V0LCBpRnJhbWVfZ2V0c2V0LCBtYXJxdWVl
X2dldHNldDsKKworICAgIFZhbHVlIGh0bWxHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0OworICAgIHZvaWQgIGh0bWxTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAg
VmFsdWUgaGVhZEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAg
dm9pZCAgaGVhZFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUm
IHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBsaW5rR2V0dGVy
KEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBsaW5rU2V0dGVy
KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERP
TTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIHRpdGxlR2V0dGVyKEV4ZWNTdGF0ZSogZXhl
YywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICB0aXRsZVNldHRlcihFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYg
c3RyKTsKKyAgICBWYWx1ZSBtZXRhR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBj
b25zdDsKKyAgICB2b2lkICBtZXRhU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBj
b25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVl
IGJhc2VHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQg
IGJhc2VTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1
ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgaXNJbmRleEdldHRlcihF
eGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgaXNJbmRleFNldHRl
cihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBE
T006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBzdHlsZUdldHRlcihFeGVjU3RhdGUqIGV4
ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgc3R5bGVTZXR0ZXIoRXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcm
IHN0cik7CisgICAgVmFsdWUgYm9keUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikg
Y29uc3Q7CisgICAgdm9pZCAgYm9keVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwg
Y29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1
ZSBmb3JtR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lk
ICBmb3JtU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFs
dWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIHNlbGVjdEdldHRlcihF
eGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgc2VsZWN0U2V0dGVy
KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERP
TTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIG9wdEdyb3VwR2V0dGVyKEV4ZWNTdGF0ZSog
ZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBvcHRHcm91cFNldHRlcihFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0
cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBvcHRpb25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQg
dG9rZW4pIGNvbnN0OworICAgIHZvaWQgIG9wdGlvblNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsK
KyAgICBWYWx1ZSBpbnB1dEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7
CisgICAgdm9pZCAgaW5wdXRTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0
IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgdGV4
dEFyZWFHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQg
IHRleHRBcmVhU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYg
dmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIGJ1dHRvbkdldHRl
cihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgYnV0dG9uU2V0
dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0
IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIGxhYmVsR2V0dGVyKEV4ZWNTdGF0ZSog
ZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBsYWJlbFNldHRlcihFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmlu
ZyYgc3RyKTsKKyAgICBWYWx1ZSBmaWVsZFNldEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0
b2tlbikgY29uc3Q7CisgICAgdm9pZCAgZmllbGRTZXRTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7
CisgICAgVmFsdWUgbGVnZW5kR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25z
dDsKKyAgICB2b2lkICBsZWdlbmRTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNv
bnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUg
dUxpc3RHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQg
IHVMaXN0U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFs
dWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIG9MaXN0R2V0dGVyKEV4
ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBvTGlzdFNldHRlcihF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006
OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBkTGlzdEdldHRlcihFeGVjU3RhdGUqIGV4ZWMs
IGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgZExpc3RTZXR0ZXIoRXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0
cik7CisgICAgVmFsdWUgZGlyR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25z
dDsKKyAgICB2b2lkICBkaXJTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0
IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgbWVu
dUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgbWVu
dVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBj
b25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBsaUdldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgbGlTZXR0ZXIoRXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcm
IHN0cik7CisgICAgVmFsdWUgZGl2R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBj
b25zdDsKKyAgICB2b2lkICBkaXZTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNv
bnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUg
cGFyYWdyYXBoR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2
b2lkICBwYXJhZ3JhcGhTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZh
bHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgaGVhZGlu
Z0dldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgaGVh
ZGluZ1NldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVl
LCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBibG9ja1F1b3RlR2V0dGVy
KEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBibG9ja1F1b3Rl
U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNv
bnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIHF1b3RlR2V0dGVyKEV4ZWNTdGF0
ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBxdW90ZVNldHRlcihFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0
cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBwcmVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0OworICAgIHZvaWQgIHByZVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
biwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBW
YWx1ZSBickdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9p
ZCAgYnJTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1
ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgYmFzZUZvbnRHZXR0ZXIo
RXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGJhc2VGb250U2V0
dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0
IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIGZvbnRHZXR0ZXIoRXhlY1N0YXRlKiBl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGZvbnRTZXR0ZXIoRXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcm
IHN0cik7CisgICAgVmFsdWUgaHJHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNv
bnN0OworICAgIHZvaWQgIGhyU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25z
dCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIG1v
ZEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgbW9k
U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNv
bnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIGFuY2hvckdldHRlcihFeGVjU3Rh
dGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgYW5jaG9yU2V0dGVyKEV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9N
U3RyaW5nJiBzdHIpOworICAgIFZhbHVlIGltYWdlR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50
IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBpbWFnZVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsK
KyAgICBWYWx1ZSBvYmplY3RHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0
OworICAgIHZvaWQgIG9iamVjdFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29u
c3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBw
YXJhbUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAg
cGFyYW1TZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1
ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgYXBwbGV0R2V0dGVyKEV4
ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBhcHBsZXRTZXR0ZXIo
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9N
OjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgbWFwR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywg
aW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBtYXBTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7
CisgICAgVmFsdWUgYXJlYUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7
CisgICAgdm9pZCAgYXJlYVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3Qg
VmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBzY3Jp
cHRHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIHNj
cmlwdFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVl
LCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSB0YWJsZUdldHRlcihFeGVj
U3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgdGFibGVTZXR0ZXIoRXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpE
T01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgdGFibGVDYXB0aW9uR2V0dGVyKEV4ZWNTdGF0ZSog
ZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICB0YWJsZUNhcHRpb25TZXR0ZXIoRXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpE
T01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgdGFibGVDb2xHZXR0ZXIoRXhlY1N0YXRlKiBleGVj
LCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIHRhYmxlQ29sU2V0dGVyKEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5n
JiBzdHIpOworICAgIFZhbHVlIHRhYmxlU2VjdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGlu
dCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgdGFibGVTZWN0aW9uU2V0dGVyKEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5n
JiBzdHIpOworICAgIFZhbHVlIHRhYmxlUm93R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRv
a2VuKSBjb25zdDsKKyAgICB2b2lkICB0YWJsZVJvd1NldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsK
KyAgICBWYWx1ZSB0YWJsZUNlbGxHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNv
bnN0OworICAgIHZvaWQgIHRhYmxlQ2VsbFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
biwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBW
YWx1ZSBmcmFtZVNldEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7Cisg
ICAgdm9pZCAgZnJhbWVTZXRTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0
IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgZnJh
bWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGZy
YW1lU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUs
IGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIGlGcmFtZUdldHRlcihFeGVj
U3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgaUZyYW1lU2V0dGVyKEV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6
RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIG1hcnF1ZWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVj
LCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIG1hcnF1ZWVTZXR0ZXIoRXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcm
IHN0cik7CisKICAgICBlbnVtIHsgSHRtbFZlcnNpb24sIEhlYWRQcm9maWxlLCBMaW5rSHJlZiwg
TGlua1JlbCwgTGlua01lZGlhLAogICAgICAgICAgICBMaW5rQ2hhcnNldCwgTGlua0Rpc2FibGVk
LCBMaW5rSHJlZkxhbmcsIExpbmtSZXYsIExpbmtUYXJnZXQsIExpbmtUeXBlLAogICAgICAgICAg
ICBMaW5rU2hlZXQsIFRpdGxlVGV4dCwgTWV0YU5hbWUsIE1ldGFIdHRwRXF1aXYsIE1ldGFDb250
ZW50LCBNZXRhU2NoZW1lLApJbmRleDoga2h0bWwvZWNtYS9ranNfd2luZG93LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lY21hL2tqc193aW5kb3cuY3Bw
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE2MgpkaWZmIC11IC1wIC1yMS4xNjIga2h0bWwvZWNt
YS9ranNfd2luZG93LmNwcAotLS0ga2h0bWwvZWNtYS9ranNfd2luZG93LmNwcAkzIEp1bCAyMDA1
IDEwOjQ3OjU2IC0wMDAwCTEuMTYyCisrKyBraHRtbC9lY21hL2tqc193aW5kb3cuY3BwCTggSnVs
IDIwMDUgMDU6NDk6NTcgLTAwMDAKQEAgLTY4LDcgKzY4LDYgQEAKICNpbmNsdWRlICJodG1sL2h0
bWxfZG9jdW1lbnRpbXBsLmgiCiAjaW5jbHVkZSAiY3NzL2Nzc19ydWxlaW1wbC5oIgogI2luY2x1
ZGUgImNzcy9jc3Nfc3R5bGVzaGVldGltcGwuaCIKLSNpbmNsdWRlICJtaXNjL2h0bWx0YWdzLmgi
CiAKIC8vIE11c3QgaW5jbHVkZSA8Y21hdGg+IGluc3RlYWQgb2YgPG1hdGguaD4gYmVjYXVzZSBv
ZiBhIGJ1ZyBpbiB0aGUKIC8vIGdjYyAzLjMgbGlicmFyeSB2ZXJzaW9uIG9mIDxtYXRoLmg+IHdo
ZXJlIGlmIHlvdSBpbmNsdWRlIGJvdGgKSW5kZXg6IGtodG1sL2VkaXRpbmcvYXBwbHlfc3R5bGVf
Y29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwv
ZWRpdGluZy9hcHBseV9zdHlsZV9jb21tYW5kLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40
CmRpZmYgLXUgLXAgLXIxLjQga2h0bWwvZWRpdGluZy9hcHBseV9zdHlsZV9jb21tYW5kLmNwcAot
LS0ga2h0bWwvZWRpdGluZy9hcHBseV9zdHlsZV9jb21tYW5kLmNwcAk1IEp1bCAyMDA1IDIzOjIx
OjA3IC0wMDAwCTEuNAorKysga2h0bWwvZWRpdGluZy9hcHBseV9zdHlsZV9jb21tYW5kLmNwcAk4
IEp1bCAyMDA1IDA1OjQ5OjU4IC0wMDAwCkBAIC0zMyw3ICszMyw3IEBACiAjaW5jbHVkZSAiY3Nz
L2Nzc3Byb3BlcnRpZXMuaCIKICNpbmNsdWRlICJkb20vZG9tX3N0cmluZy5oIgogI2luY2x1ZGUg
Imh0bWwvaHRtbF9lbGVtZW50aW1wbC5oIgotI2luY2x1ZGUgIm1pc2MvaHRtbHRhZ3MuaCIKKyNp
bmNsdWRlICJodG1sbmFtZXMuaCIKICNpbmNsdWRlICJtaXNjL2h0bWxhdHRycy5oIgogI2luY2x1
ZGUgInJlbmRlcmluZy9yZW5kZXJfb2JqZWN0LmgiCiAjaW5jbHVkZSAieG1sL2RvbV9kb2NpbXBs
LmgiCkBAIC02NSw2ICs2NSw3IEBAIHVzaW5nIERPTTo6Tm9kZUltcGw7CiB1c2luZyBET006OlBv
c2l0aW9uOwogdXNpbmcgRE9NOjpSYW5nZUltcGw7CiB1c2luZyBET006OlRleHRJbXBsOwordXNp
bmcgRE9NOjpIVE1MTmFtZXM7CiAKIG5hbWVzcGFjZSBraHRtbCB7CiAKQEAgLTI0OSwxMiArMjUw
LDEyIEBAIGJvb2wgaXNTdHlsZVNwYW4oY29uc3QgTm9kZUltcGwgKm5vZGUpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAogICAgIGNvbnN0IEhUTUxFbGVtZW50SW1wbCAqZWxlbSA9IHN0YXRpY19j
YXN0PGNvbnN0IEhUTUxFbGVtZW50SW1wbCAqPihub2RlKTsKLSAgICByZXR1cm4gZWxlbS0+aWQo
KSA9PSBJRF9TUEFOICYmIGVsZW0tPmdldEF0dHJpYnV0ZShBVFRSX0NMQVNTKSA9PSBzdHlsZVNw
YW5DbGFzc1N0cmluZygpOworICAgIHJldHVybiBlbGVtLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVz
OjpzcGFuKCkpICYmIGVsZW0tPmdldEF0dHJpYnV0ZShBVFRSX0NMQVNTKSA9PSBzdHlsZVNwYW5D
bGFzc1N0cmluZygpOwogfQogCiBzdGF0aWMgYm9vbCBpc0VtcHR5U3R5bGVTcGFuKGNvbnN0IE5v
ZGVJbXBsICpub2RlKQogewotICAgIGlmICghbm9kZSB8fCAhbm9kZS0+aXNIVE1MRWxlbWVudCgp
IHx8IG5vZGUtPmlkKCkgIT0gSURfU1BBTikKKyAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPmlzSFRN
TEVsZW1lbnQoKSB8fCAhbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnNwYW4oKSkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIGNvbnN0IEhUTUxFbGVtZW50SW1wbCAqZWxlbSA9IHN0
YXRpY19jYXN0PGNvbnN0IEhUTUxFbGVtZW50SW1wbCAqPihub2RlKTsKQEAgLTI2NCw3ICsyNjUs
NyBAQCBzdGF0aWMgYm9vbCBpc0VtcHR5U3R5bGVTcGFuKGNvbnN0IE5vZGVJCiAKIHN0YXRpYyBi
b29sIGlzRW1wdHlGb250VGFnKGNvbnN0IE5vZGVJbXBsICpub2RlKQogewotICAgIGlmICghbm9k
ZSB8fCBub2RlLT5pZCgpICE9IElEX0ZPTlQpCisgICAgaWYgKCFub2RlIHx8ICFub2RlLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6Zm9udCgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
Y29uc3QgRWxlbWVudEltcGwgKmVsZW0gPSBzdGF0aWNfY2FzdDxjb25zdCBFbGVtZW50SW1wbCAq
Pihub2RlKTsKQEAgLTI3NSw3ICsyNzYsNyBAQCBzdGF0aWMgYm9vbCBpc0VtcHR5Rm9udFRhZyhj
b25zdCBOb2RlSW1wCiBzdGF0aWMgRWxlbWVudEltcGwgKmNyZWF0ZUZvbnRFbGVtZW50KERvY3Vt
ZW50SW1wbCAqZG9jdW1lbnQpCiB7CiAgICAgaW50IGV4Y2VwdGlvbkNvZGUgPSAwOwotICAgIEVs
ZW1lbnRJbXBsICpmb250Tm9kZSA9IGRvY3VtZW50LT5jcmVhdGVIVE1MRWxlbWVudCgiZm9udCIs
IGV4Y2VwdGlvbkNvZGUpOworICAgIEVsZW1lbnRJbXBsICpmb250Tm9kZSA9IGRvY3VtZW50LT5j
cmVhdGVFbGVtZW50TlMoWEhUTUxfTkFNRVNQQUNFLCAiZm9udCIsIGV4Y2VwdGlvbkNvZGUpOwog
ICAgIEFTU0VSVChleGNlcHRpb25Db2RlID09IDApOwogICAgIGZvbnROb2RlLT5zZXRBdHRyaWJ1
dGUoQVRUUl9DTEFTUywgc3R5bGVTcGFuQ2xhc3NTdHJpbmcoKSk7CiAgICAgcmV0dXJuIGZvbnRO
b2RlOwpAQCAtMjg0LDcgKzI4NSw3IEBAIHN0YXRpYyBFbGVtZW50SW1wbCAqY3JlYXRlRm9udEVs
ZW1lbnQoRG8KIEVsZW1lbnRJbXBsICpjcmVhdGVTdHlsZVNwYW5FbGVtZW50KERvY3VtZW50SW1w
bCAqZG9jdW1lbnQpCiB7CiAgICAgaW50IGV4Y2VwdGlvbkNvZGUgPSAwOwotICAgIEVsZW1lbnRJ
bXBsICpzdHlsZUVsZW1lbnQgPSBkb2N1bWVudC0+Y3JlYXRlSFRNTEVsZW1lbnQoIlNQQU4iLCBl
eGNlcHRpb25Db2RlKTsKKyAgICBFbGVtZW50SW1wbCAqc3R5bGVFbGVtZW50ID0gZG9jdW1lbnQt
PmNyZWF0ZUVsZW1lbnROUyhYSFRNTF9OQU1FU1BBQ0UsICJzcGFuIiwgZXhjZXB0aW9uQ29kZSk7
CiAgICAgQVNTRVJUKGV4Y2VwdGlvbkNvZGUgPT0gMCk7CiAgICAgc3R5bGVFbGVtZW50LT5zZXRB
dHRyaWJ1dGUoQVRUUl9DTEFTUywgc3R5bGVTcGFuQ2xhc3NTdHJpbmcoKSk7CiAgICAgcmV0dXJu
IHN0eWxlRWxlbWVudDsKQEAgLTU4Niw3ICs1ODcsNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5k
OjphcHBseUlubGluZVN0eWxlCiAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBjdXJyZW50IGdy
b3VwLgogICAgICAgICAgICAgICAgICAgICBpZiAobm9kZSA9PSBlbmQubm9kZSgpIHx8IAogICAg
ICAgICAgICAgICAgICAgICAgICAgcnVuU3RhcnQtPnBhcmVudE5vZGUoKSAhPSBuZXh0LT5wYXJl
bnROb2RlKCkgfHwgCi0gICAgICAgICAgICAgICAgICAgICAgICAobmV4dC0+aXNIVE1MRWxlbWVu
dCgpICYmIG5leHQtPmlkKCkgIT0gSURfQlIpIHx8IAorICAgICAgICAgICAgICAgICAgICAgICAg
KG5leHQtPmlzRWxlbWVudE5vZGUoKSAmJiAhbmV4dC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJy
KCkpKSB8fCAKICAgICAgICAgICAgICAgICAgICAgICAgIChuZXh0LT5yZW5kZXJlcigpICYmICFu
ZXh0LT5yZW5kZXJlcigpLT5pc0lubGluZSgpKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgICAgICBub2RlID0gbmV4dDsKQEAgLTYxMSwxMSArNjEyLDEx
IEBAIGJvb2wgQXBwbHlTdHlsZUNvbW1hbmQ6OmlzSFRNTFN0eWxlTm9kZSgKICAgICBmb3IgKFFW
YWx1ZUxpc3RDb25zdEl0ZXJhdG9yPENTU1Byb3BlcnR5PiBpdCA9IHN0eWxlLT52YWx1ZXNJdGVy
YXRvcigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgc3dpdGNoICgoKml0KS5pZCgpKSB7
CiAgICAgICAgICAgICBjYXNlIENTU19QUk9QX0ZPTlRfV0VJR0hUOgotICAgICAgICAgICAgICAg
IGlmIChlbGVtLT5pZCgpID09IElEX0IpCisgICAgICAgICAgICAgICAgaWYgKGVsZW0tPmhhc0xv
Y2FsTmFtZShIVE1MTmFtZXM6OmIoKSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDU1NfUFJPUF9GT05U
X1NUWUxFOgotICAgICAgICAgICAgICAgIGlmIChlbGVtLT5pZCgpID09IElEX0kpCisgICAgICAg
ICAgICAgICAgaWYgKGVsZW0tPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmkoKSkpCiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQpAQCAtNjM4LDcgKzYz
OSw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUhUTUxGb250U3QKICAgICBBU1NF
UlQoc3R5bGUpOwogICAgIEFTU0VSVChlbGVtKTsKIAotICAgIGlmIChlbGVtLT5pZCgpICE9IElE
X0ZPTlQpCisgICAgaWYgKCFlbGVtLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpmb250KCkpKQog
ICAgICAgICByZXR1cm47CiAKICAgICBpbnQgZXhjZXB0aW9uQ29kZSA9IDA7CkBAIC0xMDQ3LDcg
KzEwNDgsNyBAQCBzdGF0aWMgYm9vbCBhcmVJZGVudGljYWxFbGVtZW50cyhOb2RlSW1wCiAgICAg
RWxlbWVudEltcGwgKmZpcnN0RWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsICo+KGZp
cnN0KTsKICAgICBFbGVtZW50SW1wbCAqc2Vjb25kRWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1l
bnRJbXBsICo+KHNlY29uZCk7CiAgICAgCi0gICAgaWYgKGZpcnN0RWxlbWVudC0+aWQoKSAhPSBz
ZWNvbmRFbGVtZW50LT5pZCgpKQorICAgIGlmICghZmlyc3RFbGVtZW50LT50YWdOYW1lKCkubWF0
Y2hlcyhzZWNvbmRFbGVtZW50LT50YWdOYW1lKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICBOYW1lZEF0dHJNYXBJbXBsICpmaXJzdE1hcCA9IGZpcnN0RWxlbWVudC0+YXR0cmlidXRl
cygpOwpAQCAtMTEyOSw3ICsxMTMwLDcgQEAgYm9vbCBBcHBseVN0eWxlQ29tbWFuZDo6bWVyZ2VF
bmRXaXRoTmV4dAogICAgICAgICBlbmRPZmZzZXQgPSBwYXJlbnRMYXN0T2Zmc2V0OwogICAgIH0K
IAotICAgIGlmICghZW5kTm9kZS0+aXNFbGVtZW50Tm9kZSgpIHx8IGVuZE5vZGUtPmlkKCkgPT0g
SURfQlIpCisgICAgaWYgKCFlbmROb2RlLT5pc0VsZW1lbnROb2RlKCkgfHwgZW5kTm9kZS0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OmJyKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBO
b2RlSW1wbCAqbmV4dFNpYmxpbmcgPSBlbmROb2RlLT5uZXh0U2libGluZygpOwpAQCAtMTI3NCwx
NCArMTI3NSwxNCBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphZGRJbmxpbmVTdHlsZUlmCiAg
ICAgfQogCiAgICAgaWYgKHN0eWxlQ2hhbmdlLmFwcGx5Qm9sZCgpKSB7Ci0gICAgICAgIEVsZW1l
bnRJbXBsICpib2xkRWxlbWVudCA9IGRvY3VtZW50KCktPmNyZWF0ZUhUTUxFbGVtZW50KCJCIiwg
ZXhjZXB0aW9uQ29kZSk7CisgICAgICAgIEVsZW1lbnRJbXBsICpib2xkRWxlbWVudCA9IGRvY3Vt
ZW50KCktPmNyZWF0ZUVsZW1lbnROUyhYSFRNTF9OQU1FU1BBQ0UsICJiIiwgZXhjZXB0aW9uQ29k
ZSk7CiAgICAgICAgIEFTU0VSVChleGNlcHRpb25Db2RlID09IDApOwogICAgICAgICBpbnNlcnRO
b2RlQmVmb3JlKGJvbGRFbGVtZW50LCBzdGFydE5vZGUpOwogICAgICAgICBzdXJyb3VuZE5vZGVS
YW5nZVdpdGhFbGVtZW50KHN0YXJ0Tm9kZSwgZW5kTm9kZSwgYm9sZEVsZW1lbnQpOwogICAgIH0K
IAogICAgIGlmIChzdHlsZUNoYW5nZS5hcHBseUl0YWxpYygpKSB7Ci0gICAgICAgIEVsZW1lbnRJ
bXBsICppdGFsaWNFbGVtZW50ID0gZG9jdW1lbnQoKS0+Y3JlYXRlSFRNTEVsZW1lbnQoIkkiLCBl
eGNlcHRpb25Db2RlKTsKKyAgICAgICAgRWxlbWVudEltcGwgKml0YWxpY0VsZW1lbnQgPSBkb2N1
bWVudCgpLT5jcmVhdGVFbGVtZW50TlMoWEhUTUxfTkFNRVNQQUNFLCAiaSIsIGV4Y2VwdGlvbkNv
ZGUpOwogICAgICAgICBBU1NFUlQoZXhjZXB0aW9uQ29kZSA9PSAwKTsKICAgICAgICAgaW5zZXJ0
Tm9kZUJlZm9yZShpdGFsaWNFbGVtZW50LCBzdGFydE5vZGUpOwogICAgICAgICBzdXJyb3VuZE5v
ZGVSYW5nZVdpdGhFbGVtZW50KHN0YXJ0Tm9kZSwgZW5kTm9kZSwgaXRhbGljRWxlbWVudCk7Cklu
ZGV4OiBraHRtbC9lZGl0aW5nL2JyZWFrX2Jsb2NrcXVvdGVfY29tbWFuZC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWRpdGluZy9icmVha19ibG9ja3F1
b3RlX2NvbW1hbmQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtdSAtcCAtcjEu
MSBraHRtbC9lZGl0aW5nL2JyZWFrX2Jsb2NrcXVvdGVfY29tbWFuZC5jcHAKLS0tIGtodG1sL2Vk
aXRpbmcvYnJlYWtfYmxvY2txdW90ZV9jb21tYW5kLmNwcAkyNCBNYXkgMjAwNSAwNzoyMTo0NyAt
MDAwMAkxLjEKKysrIGtodG1sL2VkaXRpbmcvYnJlYWtfYmxvY2txdW90ZV9jb21tYW5kLmNwcAk4
IEp1bCAyMDA1IDA1OjQ5OjU4IC0wMDAwCkBAIC0yOCw3ICsyOCw3IEBACiAjaW5jbHVkZSAiaHRt
bGVkaXRpbmcuaCIKICNpbmNsdWRlICJ2aXNpYmxlX3Bvc2l0aW9uLmgiCiAKLSNpbmNsdWRlICJt
aXNjL2h0bWx0YWdzLmgiCisjaW5jbHVkZSAiaHRtbG5hbWVzLmgiCiAjaW5jbHVkZSAieG1sL2Rv
bV9lbGVtZW50aW1wbC5oIgogI2luY2x1ZGUgInhtbC9kb21fdGV4dGltcGwuaCIKIApAQCAtNDMs
NiArNDMsNyBAQCB1c2luZyBET006OkVsZW1lbnRJbXBsOwogdXNpbmcgRE9NOjpOb2RlSW1wbDsK
IHVzaW5nIERPTTo6UG9zaXRpb247CiB1c2luZyBET006OlRleHRJbXBsOwordXNpbmcgRE9NOjpI
VE1MTmFtZXM7CiAKIG5hbWVzcGFjZSBraHRtbCB7CiAKQEAgLTE0Niw3ICsxNDcsNyBAQCB2b2lk
IEJyZWFrQmxvY2txdW90ZUNvbW1hbmQ6OmRvQXBwbHkoKQogICAgICAgICBib29sIHN0YXJ0SXNC
UiA9IGZhbHNlOwogICAgICAgICBpZiAoc3RhcnROb2RlICE9IHRvcEJsb2NrcXVvdGUpIHsKICAg
ICAgICAgICAgIE5vZGVJbXBsICpuID0gc3RhcnROb2RlOwotICAgICAgICAgICAgc3RhcnRJc0JS
ID0gbi0+aWQoKSA9PSBJRF9CUjsKKyAgICAgICAgICAgIHN0YXJ0SXNCUiA9IG4tPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjpicigpKTsKICAgICAgICAgICAgIGlmIChzdGFydElzQlIpCiAgICAgICAg
ICAgICAgICAgbiA9IG4tPm5leHRTaWJsaW5nKCk7CiAgICAgICAgICAgICB3aGlsZSAobikgewpJ
bmRleDoga2h0bWwvZWRpdGluZy9jb21wb3NpdGVfZWRpdF9jb21tYW5kLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL2NvbXBvc2l0ZV9lZGl0
X2NvbW1hbmQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjMKZGlmZiAtdSAtcCAtcjEuMyBr
aHRtbC9lZGl0aW5nL2NvbXBvc2l0ZV9lZGl0X2NvbW1hbmQuY3BwCi0tLSBraHRtbC9lZGl0aW5n
L2NvbXBvc2l0ZV9lZGl0X2NvbW1hbmQuY3BwCTI0IE1heSAyMDA1IDA3OjIxOjQ3IC0wMDAwCTEu
MworKysga2h0bWwvZWRpdGluZy9jb21wb3NpdGVfZWRpdF9jb21tYW5kLmNwcAk4IEp1bCAyMDA1
IDA1OjQ5OjU4IC0wMDAwCkBAIC00Nyw3ICs0Nyw3IEBACiAjaW5jbHVkZSAid3JhcF9jb250ZW50
c19pbl9kdW1teV9zcGFuX2NvbW1hbmQuaCIKIAogI2luY2x1ZGUgIm1pc2MvaHRtbGF0dHJzLmgi
Ci0jaW5jbHVkZSAibWlzYy9odG1sdGFncy5oIgorI2luY2x1ZGUgImh0bWxuYW1lcy5oIgogI2lu
Y2x1ZGUgInJlbmRlcmluZy9yZW5kZXJfdGV4dC5oIgogI2luY2x1ZGUgInhtbC9kb20yX3Jhbmdl
aW1wbC5oIgogI2luY2x1ZGUgInhtbC9kb21fdGV4dGltcGwuaCIKQEAgLTY3LDYgKzY3LDcgQEAg
dXNpbmcgRE9NOjpOb2RlSW1wbDsKIHVzaW5nIERPTTo6UG9zaXRpb247CiB1c2luZyBET006OlJh
bmdlSW1wbDsKIHVzaW5nIERPTTo6VGV4dEltcGw7Cit1c2luZyBET006OkhUTUxOYW1lczsKIAog
bmFtZXNwYWNlIGtodG1sIHsKIApAQCAtMTI3LDE0ICsxMjgsMTQgQEAgdm9pZCBDb21wb3NpdGVF
ZGl0Q29tbWFuZDo6aW5zZXJ0UGFyYWdyYQogCiB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpp
bnNlcnROb2RlQmVmb3JlKE5vZGVJbXBsICppbnNlcnRDaGlsZCwgTm9kZUltcGwgKnJlZkNoaWxk
KQogewotICAgIEFTU0VSVChyZWZDaGlsZC0+aWQoKSAhPSBJRF9CT0RZKTsKKyAgICBBU1NFUlQo
IXJlZkNoaWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Ym9keSgpKSk7CiAgICAgRWRpdENvbW1h
bmRQdHIgY21kKG5ldyBJbnNlcnROb2RlQmVmb3JlQ29tbWFuZChkb2N1bWVudCgpLCBpbnNlcnRD
aGlsZCwgcmVmQ2hpbGQpKTsKICAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShjbWQpOwogfQog
CiB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjppbnNlcnROb2RlQWZ0ZXIoTm9kZUltcGwgKmlu
c2VydENoaWxkLCBOb2RlSW1wbCAqcmVmQ2hpbGQpCiB7Ci0gICAgQVNTRVJUKHJlZkNoaWxkLT5p
ZCgpICE9IElEX0JPRFkpOworICAgIEFTU0VSVCghcmVmQ2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjpib2R5KCkpKTsKICAgICBpZiAocmVmQ2hpbGQtPnBhcmVudE5vZGUoKS0+bGFzdENoaWxk
KCkgPT0gcmVmQ2hpbGQpIHsKICAgICAgICAgYXBwZW5kTm9kZShpbnNlcnRDaGlsZCwgcmVmQ2hp
bGQtPnBhcmVudE5vZGUoKSk7CiAgICAgfQpAQCAtNTQ1LDcgKzU0Niw3IEBAIHZvaWQgQ29tcG9z
aXRlRWRpdENvbW1hbmQ6Om1vdmVQYXJhZ3JhcGgKICAgICAvLyAgICAgICBhZGRpdGlvbmFsIGxl
dmVsIG9mIHF1b3RpbmcuCiAgICAgTm9kZUltcGwgKnN0YXJ0QmxvY2sgPSBwYXJhZ3JhcGhTdGFy
dC5ub2RlKCktPmVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQoKTsKICAgICBOb2RlSW1wbCAqbmV3
QmxvY2sgPSAwOwotICAgIGlmIChzdGFydEJsb2NrLT5pZCgpID09IElEX0JPRFkgfHwgKGlzTWFp
bEJsb2NrcXVvdGUoc3RhcnRCbG9jaykgJiYgcGFyYWdyYXBoU3RhcnQubm9kZSgpICE9IHN0YXJ0
QmxvY2spKQorICAgIGlmIChzdGFydEJsb2NrLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Ym9keSgp
KSB8fCAoaXNNYWlsQmxvY2txdW90ZShzdGFydEJsb2NrKSAmJiBwYXJhZ3JhcGhTdGFydC5ub2Rl
KCkgIT0gc3RhcnRCbG9jaykpCiAgICAgICAgIG5ld0Jsb2NrID0gY3JlYXRlRGVmYXVsdFBhcmFn
cmFwaEVsZW1lbnQoZG9jdW1lbnQoKSk7CiAgICAgZWxzZQogICAgICAgICBuZXdCbG9jayA9IHN0
YXJ0QmxvY2stPmNsb25lTm9kZShmYWxzZSk7CkBAIC01NTUsMTAgKzU1NiwxMCBAQCB2b2lkIENv
bXBvc2l0ZUVkaXRDb21tYW5kOjptb3ZlUGFyYWdyYXBoCiAgICAgICAgIG1vdmVOb2RlID0gbW92
ZU5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKTsKICAgICBOb2RlSW1wbCAqZW5kTm9kZSA9IHBhcmFn
cmFwaEVuZC5ub2RlKCk7CiAKLSAgICBpZiAocGFyYWdyYXBoU3RhcnQubm9kZSgpLT5pZCgpID09
IElEX0JPRFkpIHsKKyAgICBpZiAocGFyYWdyYXBoU3RhcnQubm9kZSgpLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6Ym9keSgpKSkgewogICAgICAgICBpbnNlcnROb2RlQXQobmV3QmxvY2ssIHBhcmFn
cmFwaFN0YXJ0Lm5vZGUoKSwgMCk7CiAgICAgfQotICAgIGVsc2UgaWYgKHBhcmFncmFwaFN0YXJ0
Lm5vZGUoKS0+aWQoKSA9PSBJRF9CUikgeworICAgIGVsc2UgaWYgKHBhcmFncmFwaFN0YXJ0Lm5v
ZGUoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJyKCkpKSB7CiAgICAgICAgIGluc2VydE5vZGVB
ZnRlcihuZXdCbG9jaywgcGFyYWdyYXBoU3RhcnQubm9kZSgpKTsKICAgICB9CiAgICAgZWxzZSB7
CkBAIC01NzgsNyArNTc5LDcgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6bW92ZVBhcmFn
cmFwaAogRWxlbWVudEltcGwgKmNyZWF0ZUJsb2NrUGxhY2Vob2xkZXJFbGVtZW50KERvY3VtZW50
SW1wbCAqZG9jdW1lbnQpCiB7CiAgICAgaW50IGV4Y2VwdGlvbkNvZGUgPSAwOwotICAgIEVsZW1l
bnRJbXBsICpicmVha05vZGUgPSBkb2N1bWVudC0+Y3JlYXRlSFRNTEVsZW1lbnQoImJyIiwgZXhj
ZXB0aW9uQ29kZSk7CisgICAgRWxlbWVudEltcGwgKmJyZWFrTm9kZSA9IGRvY3VtZW50LT5jcmVh
dGVFbGVtZW50TlMoWEhUTUxfTkFNRVNQQUNFLCAiYnIiLCBleGNlcHRpb25Db2RlKTsKICAgICBB
U1NFUlQoZXhjZXB0aW9uQ29kZSA9PSAwKTsKICAgICBicmVha05vZGUtPnNldEF0dHJpYnV0ZShB
VFRSX0NMQVNTLCBibG9ja1BsYWNlaG9sZGVyQ2xhc3NTdHJpbmcoKSk7CiAgICAgcmV0dXJuIGJy
ZWFrTm9kZTsKSW5kZXg6IGtodG1sL2VkaXRpbmcvZGVsZXRlX3NlbGVjdGlvbl9jb21tYW5kLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL2Rl
bGV0ZV9zZWxlY3Rpb25fY29tbWFuZC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNApkaWZm
IC11IC1wIC1yMS40IGtodG1sL2VkaXRpbmcvZGVsZXRlX3NlbGVjdGlvbl9jb21tYW5kLmNwcAot
LS0ga2h0bWwvZWRpdGluZy9kZWxldGVfc2VsZWN0aW9uX2NvbW1hbmQuY3BwCTUgSnVsIDIwMDUg
MjM6MjE6MDcgLTAwMDAJMS40CisrKyBraHRtbC9lZGl0aW5nL2RlbGV0ZV9zZWxlY3Rpb25fY29t
bWFuZC5jcHAJOCBKdWwgMjAwNSAwNTo0OTo1OSAtMDAwMApAQCAtMjgsNyArMjgsNyBAQAogI2lu
Y2x1ZGUgImNzcy9jc3NfY29tcHV0ZWRzdHlsZS5oIgogI2luY2x1ZGUgImh0bWxlZGl0aW5nLmgi
CiAjaW5jbHVkZSAia2h0bWxfcGFydC5oIgotI2luY2x1ZGUgIm1pc2MvaHRtbHRhZ3MuaCIKKyNp
bmNsdWRlICJodG1sbmFtZXMuaCIKICNpbmNsdWRlICJyZW5kZXJpbmcvcmVuZGVyX2xpbmUuaCIK
ICNpbmNsdWRlICJyZW5kZXJpbmcvcmVuZGVyX29iamVjdC5oIgogI2luY2x1ZGUgInZpc2libGVf
dGV4dC5oIgpAQCAtNTMsNiArNTMsNyBAQCB1c2luZyBET006Ok5vZGVJbXBsOwogdXNpbmcgRE9N
OjpQb3NpdGlvbjsKIHVzaW5nIERPTTo6UmFuZ2VJbXBsOwogdXNpbmcgRE9NOjpUZXh0SW1wbDsK
K3VzaW5nIERPTTo6SFRNTE5hbWVzOwogCiBuYW1lc3BhY2Uga2h0bWwgewogCkBAIC02MSw5ICs2
MiwxMyBAQCBzdGF0aWMgYm9vbCBpc0xpc3RTdHJ1Y3R1cmVOb2RlKGNvbnN0IE5vCiAgICAgLy8g
RklYTUU6IElycml0YXRpbmcgdGhhdCB3ZSBjYW4gZ2V0IGF3YXkgd2l0aCBqdXN0IGdvaW5nIGF0
IHRoZSByZW5kZXIgdHJlZSBmb3IgaXNUYWJsZVN0cnVjdHVyZU5vZGUsCiAgICAgLy8gYnV0IGhl
cmUgd2UgYWxzbyBoYXZlIHRvIHBlZWsgYXQgdGhlIHR5cGUgb2YgRE9NIG5vZGU/CiAgICAgUmVu
ZGVyT2JqZWN0ICpyID0gbm9kZS0+cmVuZGVyZXIoKTsKLSAgICBOb2RlSW1wbDo6SWQgbm9kZUlE
ID0gbm9kZS0+aWQoKTsKICAgICByZXR1cm4gKHIgJiYgci0+aXNMaXN0SXRlbSgpKQotICAgICAg
ICB8fCAobm9kZUlEID09IElEX09MIHx8IG5vZGVJRCA9PSBJRF9VTCB8fCBub2RlSUQgPT0gSURf
REQgfHwgbm9kZUlEID09IElEX0RUIHx8IG5vZGVJRCA9PSBJRF9ESVIgfHwgbm9kZUlEID09IElE
X01FTlUpOworICAgICAgICB8fCBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b2woKSkKKyAg
ICAgICAgfHwgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnVsKCkpCisgICAgICAgIHx8IG5v
ZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpkZCgpKQorICAgICAgICB8fCBub2RlLT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6ZHQoKSkKKyAgICAgICAgfHwgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OmRpcigpKQorICAgICAgICB8fCBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6bWVudSgp
KTsKIH0KIAogc3RhdGljIGludCBtYXhEZWVwT2Zmc2V0KE5vZGVJbXBsICpuKQpAQCAtMjc3LDgg
KzI4Miw4IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6c2F2ZVR5cGluZ1MKIGJvb2wg
RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6aGFuZGxlU3BlY2lhbENhc2VCUkRlbGV0ZSgpCiB7CiAg
ICAgLy8gQ2hlY2sgZm9yIHNwZWNpYWwtY2FzZSB3aGVyZSB0aGUgc2VsZWN0aW9uIGNvbnRhaW5z
IG9ubHkgYSBCUiBvbiBhIGxpbmUgYnkgaXRzZWxmIGFmdGVyIGFub3RoZXIgQlIuCi0gICAgYm9v
bCB1cHN0cmVhbVN0YXJ0SXNCUiA9IG1fc3RhcnROb2RlLT5pZCgpID09IElEX0JSOwotICAgIGJv
b2wgZG93bnN0cmVhbVN0YXJ0SXNCUiA9IG1fZG93bnN0cmVhbVN0YXJ0Lm5vZGUoKS0+aWQoKSA9
PSBJRF9CUjsKKyAgICBib29sIHVwc3RyZWFtU3RhcnRJc0JSID0gbV9zdGFydE5vZGUtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjpicigpKTsKKyAgICBib29sIGRvd25zdHJlYW1TdGFydElzQlIgPSBt
X2Rvd25zdHJlYW1TdGFydC5ub2RlKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpicigpKTsKICAg
ICBib29sIGlzQlJPbkxpbmVCeUl0c2VsZiA9IHVwc3RyZWFtU3RhcnRJc0JSICYmIGRvd25zdHJl
YW1TdGFydElzQlIgJiYgbV9kb3duc3RyZWFtU3RhcnQubm9kZSgpID09IG1fdXBzdHJlYW1FbmQu
bm9kZSgpOwogICAgIGlmIChpc0JST25MaW5lQnlJdHNlbGYpIHsKICAgICAgICAgcmVtb3ZlTm9k
ZShtX2Rvd25zdHJlYW1TdGFydC5ub2RlKCkpOwpAQCAtMzI2LDExICszMzEsMTEgQEAgdm9pZCBE
ZWxldGVTZWxlY3Rpb25Db21tYW5kOjpoYW5kbGVHZW5lcgogICAgIC8vIGVuZCBvZiBhIGJsb2Nr
IG90aGVyIHRoYW4gdGhlIGJsb2NrIGNvbnRhaW5pbmcgdGhlIHNlbGVjdGlvbiBzdGFydCwgdGhl
biBkbyBub3QgZGVsZXRlIHRoZSAKICAgICAvLyBzdGFydCBibG9jaywgb3RoZXJ3aXNlIGRlbGV0
ZSB0aGUgc3RhcnQgYmxvY2suCiAgICAgLy8gQSBzaW1pbGFyIGNhc2UgaXMgcHJvdmlkZWQgdG8g
Y292ZXIgc2VsZWN0aW9ucyBzdGFydGluZyBpbiBCUiBlbGVtZW50cy4KLSAgICBpZiAoc3RhcnRP
ZmZzZXQgPT0gMSAmJiBtX3N0YXJ0Tm9kZSAmJiBtX3N0YXJ0Tm9kZS0+aWQoKSA9PSBJRF9CUikg
eworICAgIGlmIChzdGFydE9mZnNldCA9PSAxICYmIG1fc3RhcnROb2RlICYmIG1fc3RhcnROb2Rl
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YnIoKSkpIHsKICAgICAgICAgc2V0U3RhcnROb2RlKG1f
c3RhcnROb2RlLT50cmF2ZXJzZU5leHROb2RlKCkpOwogICAgICAgICBzdGFydE9mZnNldCA9IDA7
CiAgICAgfQotICAgIGlmIChtX3N0YXJ0QmxvY2sgIT0gbV9lbmRCbG9jayAmJiBzdGFydE9mZnNl
dCA9PSAwICYmIG1fc3RhcnROb2RlICYmIG1fc3RhcnROb2RlLT5pZCgpID09IElEX0JSICYmIGVu
ZEF0RW5kT2ZCbG9jaykgeworICAgIGlmIChtX3N0YXJ0QmxvY2sgIT0gbV9lbmRCbG9jayAmJiBz
dGFydE9mZnNldCA9PSAwICYmIG1fc3RhcnROb2RlICYmIG1fc3RhcnROb2RlLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6YnIoKSkgJiYgZW5kQXRFbmRPZkJsb2NrKSB7CiAgICAgICAgIC8vIERvbid0
IGRlbGV0ZSB0aGUgQlIgZWxlbWVudAogICAgICAgICBzZXRTdGFydE5vZGUobV9zdGFydE5vZGUt
PnRyYXZlcnNlTmV4dE5vZGUoKSk7CiAgICAgfQpAQCAtNTUyLDcgKzU1Nyw3IEBAIHZvaWQgRGVs
ZXRlU2VsZWN0aW9uQ29tbWFuZDo6bW92ZU5vZGVzQWYKICAgICAgICAgTm9kZUltcGwgKm1vdmVO
b2RlID0gbm9kZTsKICAgICAgICAgbm9kZSA9IG5vZGUtPm5leHRTaWJsaW5nKCk7CiAgICAgICAg
IHJlbW92ZU5vZGUobW92ZU5vZGUpOwotICAgICAgICBpZiAobW92ZU5vZGUtPmlkKCkgPT0gSURf
QlIgJiYgIW1vdmVOb2RlLT5yZW5kZXJlcigpKSB7CisgICAgICAgIGlmIChtb3ZlTm9kZS0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OmJyKCkpICYmICFtb3ZlTm9kZS0+cmVuZGVyZXIoKSkgewogICAg
ICAgICAgICAgLy8gSnVzdCByZW1vdmUgdGhpcyBub2RlLCBhbmQgZG9uJ3QgcHV0IGl0IGJhY2su
CiAgICAgICAgICAgICAvLyBJZiB0aGUgQlIgd2FzIG5vdCByZW5kZXJlZCAoc2luY2UgaXQgd2Fz
IGF0IHRoZSBlbmQgb2YgYSBibG9jaywgZm9yIGluc3RhbmNlKSwgCiAgICAgICAgICAgICAvLyBw
dXR0aW5nIGl0IGJhY2sgaW4gdGhlIGRvY3VtZW50IG1pZ2h0IG1ha2UgaXQgYXBwZWFyLCBhbmQg
dGhhdCBpcyBub3QgZGVzaXJhYmxlLgpAQCAtNTYzLDcgKzU2OCw3IEBAIHZvaWQgRGVsZXRlU2Vs
ZWN0aW9uQ29tbWFuZDo6bW92ZU5vZGVzQWYKICAgICAgICAgZWxzZQogICAgICAgICAgICAgaW5z
ZXJ0Tm9kZUFmdGVyKG1vdmVOb2RlLCByZWZOb2RlKTsKICAgICAgICAgcmVmTm9kZSA9IG1vdmVO
b2RlOwotICAgICAgICBpZiAobW92ZU5vZGUtPmlkKCkgPT0gSURfQlIpCisgICAgICAgIGlmICht
b3ZlTm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJyKCkpKQogICAgICAgICAgICAgYnJlYWs7
CiAgICAgfQogCkluZGV4OiBraHRtbC9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL2h0bWxlZGl0aW5nLmNw
cCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yNDkKZGlmZiAtdSAtcCAtcjEuMjQ5IGtodG1sL2Vk
aXRpbmcvaHRtbGVkaXRpbmcuY3BwCi0tLSBraHRtbC9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAk1
IEp1bCAyMDA1IDIzOjIxOjA4IC0wMDAwCTEuMjQ5CisrKyBraHRtbC9lZGl0aW5nL2h0bWxlZGl0
aW5nLmNwcAk4IEp1bCAyMDA1IDA1OjQ5OjU5IC0wMDAwCkBAIC00Miw3ICs0Miw3IEBACiAjaW5j
bHVkZSAiaHRtbF9pbWFnZWltcGwuaCIKICNpbmNsdWRlICJodG1sX2ludGVyY2hhbmdlLmgiCiAj
aW5jbHVkZSAiaHRtbGF0dHJzLmgiCi0jaW5jbHVkZSAiaHRtbHRhZ3MuaCIKKyNpbmNsdWRlICJo
dG1sbmFtZXMuaCIKICNpbmNsdWRlICJraHRtbF9wYXJ0LmgiCiAjaW5jbHVkZSAia2h0bWxfcGFy
dC5oIgogI2luY2x1ZGUgImtodG1sdmlldy5oIgpAQCAtODEsNiArODEsNyBAQCB1c2luZyBET006
OlBvc2l0aW9uOwogdXNpbmcgRE9NOjpSYW5nZUltcGw7CiB1c2luZyBET006OlRleHRJbXBsOwog
dXNpbmcgRE9NOjpUcmVlV2Fsa2VySW1wbDsKK3VzaW5nIERPTTo6SFRNTE5hbWVzOwogCiAjaWYg
QVBQTEVfQ0hBTkdFUwogI2luY2x1ZGUgIktXUUFzc2VydGlvbnMuaCIKQEAgLTEzMSwxMCArMTMy
LDEwIEBAIGJvb2wgaXNTcGVjaWFsRWxlbWVudChOb2RlSW1wbCAqbikKICAgICBpZiAoIW4tPmlz
SFRNTEVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKG4tPmlkKCkg
PT0gSURfQSAmJiBuLT5pc0xpbmsoKSkKKyAgICBpZiAobi0+aXNMaW5rKCkpCiAgICAgICAgIHJl
dHVybiB0cnVlOwogCi0gICAgaWYgKG4tPmlkKCkgPT0gSURfVUwgfHwgbi0+aWQoKSA9PSBJRF9P
TCB8fCBuLT5pZCgpID09IElEX0RMKQorICAgIGlmIChuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
dWwoKSkgfHwgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9sKCkpIHx8IG4tPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjpkbCgpKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBSZW5kZXJPYmpl
Y3QgKnJlbmRlcmVyID0gbi0+cmVuZGVyZXIoKTsKQEAgLTI2Nyw3ICsyNjgsNyBAQCBFbGVtZW50
SW1wbCAqY3JlYXRlRGVmYXVsdFBhcmFncmFwaEVsZW1lCiAgICAgLy8gV2Ugd291bGQgbmVlZCB0
aGlzIG1hcmdpbi16ZXJvaW5nIGNvZGUgYmFjayBpZiB3ZSBldmVyIHJldHVybiB0byB1c2luZyA8
cD4gZWxlbWVudHMgZm9yIGRlZmF1bHQgcGFyYWdyYXBocy4KICAgICAvLyBzdGF0aWMgY29uc3Qg
RE9NU3RyaW5nIGRlZmF1bHRQYXJhZ3JhcGhTdHlsZSgibWFyZ2luLXRvcDogMDsgbWFyZ2luLWJv
dHRvbTogMCIpOyAgICAKICAgICBpbnQgZXhjZXB0aW9uQ29kZSA9IDA7Ci0gICAgRWxlbWVudElt
cGwgKmVsZW1lbnQgPSBkb2N1bWVudC0+Y3JlYXRlSFRNTEVsZW1lbnQoImRpdiIsIGV4Y2VwdGlv
bkNvZGUpOworICAgIEVsZW1lbnRJbXBsICplbGVtZW50ID0gZG9jdW1lbnQtPmNyZWF0ZUVsZW1l
bnROUyhYSFRNTF9OQU1FU1BBQ0UsICJkaXYiLCBleGNlcHRpb25Db2RlKTsKICAgICBBU1NFUlQo
ZXhjZXB0aW9uQ29kZSA9PSAwKTsKICAgICByZXR1cm4gZWxlbWVudDsKIH0KQEAgLTI3NSw3ICsy
NzYsNyBAQCBFbGVtZW50SW1wbCAqY3JlYXRlRGVmYXVsdFBhcmFncmFwaEVsZW1lCiBFbGVtZW50
SW1wbCAqY3JlYXRlQnJlYWtFbGVtZW50KERvY3VtZW50SW1wbCAqZG9jdW1lbnQpCiB7CiAgICAg
aW50IGV4Y2VwdGlvbkNvZGUgPSAwOwotICAgIEVsZW1lbnRJbXBsICpicmVha05vZGUgPSBkb2N1
bWVudC0+Y3JlYXRlSFRNTEVsZW1lbnQoImJyIiwgZXhjZXB0aW9uQ29kZSk7CisgICAgRWxlbWVu
dEltcGwgKmJyZWFrTm9kZSA9IGRvY3VtZW50LT5jcmVhdGVFbGVtZW50TlMoWEhUTUxfTkFNRVNQ
QUNFLCAiYnIiLCBleGNlcHRpb25Db2RlKTsKICAgICBBU1NFUlQoZXhjZXB0aW9uQ29kZSA9PSAw
KTsKICAgICByZXR1cm4gYnJlYWtOb2RlOwogfQpAQCAtMzAzLDcgKzMwNCw3IEBAIE5vZGVJbXBs
ICpuZWFyZXN0TWFpbEJsb2NrcXVvdGUoY29uc3QgTm8KIAogYm9vbCBpc01haWxCbG9ja3F1b3Rl
KGNvbnN0IE5vZGVJbXBsICpub2RlKQogewotICAgIGlmICghbm9kZSB8fCAhbm9kZS0+cmVuZGVy
ZXIoKSB8fCAhbm9kZS0+aXNFbGVtZW50Tm9kZSgpICYmIG5vZGUtPmlkKCkgIT0gSURfQkxPQ0tR
VU9URSkKKyAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPnJlbmRlcmVyKCkgfHwgIW5vZGUtPmlzRWxl
bWVudE5vZGUoKSAmJiAhbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJsb2NrcXVvdGUoKSkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PGNvbnN0IEVsZW1lbnRJbXBsICo+KG5vZGUpLT5nZXRBdHRyaWJ1dGUoInR5cGUiKSA9PSAiY2l0
ZSI7CkluZGV4OiBraHRtbC9lZGl0aW5nL2luc2VydF9saW5lX2JyZWFrX2NvbW1hbmQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VkaXRpbmcvaW5zZXJ0
X2xpbmVfYnJlYWtfY29tbWFuZC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC11
IC1wIC1yMS4xIGtodG1sL2VkaXRpbmcvaW5zZXJ0X2xpbmVfYnJlYWtfY29tbWFuZC5jcHAKLS0t
IGtodG1sL2VkaXRpbmcvaW5zZXJ0X2xpbmVfYnJlYWtfY29tbWFuZC5jcHAJMjQgTWF5IDIwMDUg
MDc6MjE6NDcgLTAwMDAJMS4xCisrKyBraHRtbC9lZGl0aW5nL2luc2VydF9saW5lX2JyZWFrX2Nv
bW1hbmQuY3BwCTggSnVsIDIwMDUgMDU6NDk6NTkgLTAwMDAKQEAgLTI5LDcgKzI5LDcgQEAKICNp
bmNsdWRlICJ2aXNpYmxlX3Bvc2l0aW9uLmgiCiAjaW5jbHVkZSAidmlzaWJsZV91bml0cy5oIgog
Ci0jaW5jbHVkZSAibWlzYy9odG1sdGFncy5oIgorI2luY2x1ZGUgImh0bWxuYW1lcy5oIgogI2lu
Y2x1ZGUgInhtbC9kb21fZG9jaW1wbC5oIgogI2luY2x1ZGUgInhtbC9kb21fZWxlbWVudGltcGwu
aCIKICNpbmNsdWRlICJ4bWwvZG9tMl9yYW5nZWltcGwuaCIKQEAgLTUwLDYgKzUwLDcgQEAgdXNp
bmcgRE9NOjpOb2RlSW1wbDsKIHVzaW5nIERPTTo6UG9zaXRpb247CiB1c2luZyBET006OlRleHRJ
bXBsOwogdXNpbmcgRE9NOjpDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbkltcGw7Cit1c2luZyBE
T006OkhUTUxOYW1lczsKIAogbmFtZXNwYWNlIGtodG1sIHsKIApAQCAtMTExLDEzICsxMTIsMTMg
QEAgdm9pZCBJbnNlcnRMaW5lQnJlYWtDb21tYW5kOjpkb0FwcGx5KCkKICAgICAgICAgLy8gVGhp
cyBtYWtlcyB0aGUgInJlYWwiIEJSIHdlIHdhbnQgdG8gaW5zZXJ0IGFwcGVhciBpbiB0aGUgcmVu
ZGVyaW5nIHdpdGhvdXQgYW55IAogICAgICAgICAvLyBzaWduaWZpY2FudCBzaWRlIGVmZmVjdHMg
KGFuZCBubyByZWFsIHdvcnJpZXMgZWl0aGVyIHNpbmNlIHlvdSBjYW4ndCBhcnJvdyBwYXN0IAog
ICAgICAgICAvLyB0aGlzIGV4dHJhIG9uZS4KLSAgICAgICAgaWYgKHBvcy5ub2RlKCktPmlkKCkg
PT0gSURfQlIgJiYgcG9zLm9mZnNldCgpID09IDApIHsKKyAgICAgICAgaWYgKHBvcy5ub2RlKCkt
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpicigpKSAmJiBwb3Mub2Zmc2V0KCkgPT0gMCkgewogICAg
ICAgICAgICAgLy8gQWxyZWFkeSBwbGFjZWQgaW4gYSB0cmFpbGluZyBCUi4gSW5zZXJ0ICJyZWFs
IiBCUiBiZWZvcmUgaXQgYW5kIGxlYXZlIHRoZSBzZWxlY3Rpb24gYWxvbmUuCiAgICAgICAgICAg
ICBpbnNlcnROb2RlQmVmb3JlKG5vZGVUb0luc2VydCwgcG9zLm5vZGUoKSk7CiAgICAgICAgIH0K
ICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBOb2RlSW1wbCAqbmV4dCA9IHBvcy5ub2RlKCkt
PnRyYXZlcnNlTmV4dE5vZGUoKTsKLSAgICAgICAgICAgIGJvb2wgaGFzVHJhaWxpbmdCUiA9IG5l
eHQgJiYgbmV4dC0+aWQoKSA9PSBJRF9CUiAmJiBwb3Mubm9kZSgpLT5lbmNsb3NpbmdCbG9ja0Zs
b3dFbGVtZW50KCkgPT0gbmV4dC0+ZW5jbG9zaW5nQmxvY2tGbG93RWxlbWVudCgpOworICAgICAg
ICAgICAgYm9vbCBoYXNUcmFpbGluZ0JSID0gbmV4dCAmJiBuZXh0LT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6YnIoKSkgJiYgcG9zLm5vZGUoKS0+ZW5jbG9zaW5nQmxvY2tGbG93RWxlbWVudCgpID09
IG5leHQtPmVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQoKTsKICAgICAgICAgICAgIGluc2VydE5v
ZGVBZnRlclBvc2l0aW9uKG5vZGVUb0luc2VydCwgcG9zKTsKICAgICAgICAgICAgIGlmIChoYXNU
cmFpbGluZ0JSKSB7CiAgICAgICAgICAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFNlbGVjdGlv
bihQb3NpdGlvbihuZXh0LCAwKSwgRE9XTlNUUkVBTSkpOwpJbmRleDoga2h0bWwvZWRpdGluZy9p
bnNlcnRfcGFyYWdyYXBoX3NlcGFyYXRvcl9jb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL2luc2VydF9wYXJhZ3JhcGhfc2VwYXJh
dG9yX2NvbW1hbmQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtdSAtcCAtcjEu
MSBraHRtbC9lZGl0aW5nL2luc2VydF9wYXJhZ3JhcGhfc2VwYXJhdG9yX2NvbW1hbmQuY3BwCi0t
LSBraHRtbC9lZGl0aW5nL2luc2VydF9wYXJhZ3JhcGhfc2VwYXJhdG9yX2NvbW1hbmQuY3BwCTI0
IE1heSAyMDA1IDA3OjIxOjQ3IC0wMDAwCTEuMQorKysga2h0bWwvZWRpdGluZy9pbnNlcnRfcGFy
YWdyYXBoX3NlcGFyYXRvcl9jb21tYW5kLmNwcAk4IEp1bCAyMDA1IDA1OjUwOjAwIC0wMDAwCkBA
IC0zMSw3ICszMSw3IEBACiAKICNpbmNsdWRlICJjc3MvY3NzX2NvbXB1dGVkc3R5bGUuaCIKICNp
bmNsdWRlICJjc3MvY3NzX3ZhbHVlaW1wbC5oIgotI2luY2x1ZGUgIm1pc2MvaHRtbHRhZ3MuaCIK
KyNpbmNsdWRlICJodG1sbmFtZXMuaCIKICNpbmNsdWRlICJ4bWwvZG9tX2RvY2ltcGwuaCIKICNp
bmNsdWRlICJ4bWwvZG9tX2VsZW1lbnRpbXBsLmgiCiAjaW5jbHVkZSAieG1sL2RvbV90ZXh0aW1w
bC5oIgpAQCAtNTAsNiArNTAsNyBAQCB1c2luZyBET006OkVsZW1lbnRJbXBsOwogdXNpbmcgRE9N
OjpOb2RlSW1wbDsKIHVzaW5nIERPTTo6UG9zaXRpb247CiB1c2luZyBET006OlRleHRJbXBsOwor
dXNpbmcgRE9NOjpIVE1MTmFtZXM7CiAKIG5hbWVzcGFjZSBraHRtbCB7CiAKQEAgLTIxMyw3ICsy
MTQsNyBAQCB2b2lkIEluc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQ6OmRvCiAgICAgLy8g
dGhlbiB0aGlzIDxicj4gd2lsbCBjb2xsYXBzZSBhd2F5IHdoZW4gd2UgYWRkIGEgYmxvY2sgYWZ0
ZXIgaXQuIEFkZCBhbiBleHRyYSA8YnI+LgogICAgIGlmICghZG9jdW1lbnQoKS0+aW5TdHJpY3RN
b2RlKCkpIHsKICAgICAgICAgUG9zaXRpb24gdXBzdHJlYW1Qb3MgPSBwb3MudXBzdHJlYW0oKTsK
LSAgICAgICAgaWYgKHVwc3RyZWFtUG9zLm5vZGUoKS0+aWQoKSA9PSBJRF9CUikKKyAgICAgICAg
aWYgKHVwc3RyZWFtUG9zLm5vZGUoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJyKCkpKQogICAg
ICAgICAgICAgaW5zZXJ0Tm9kZUFmdGVyKGNyZWF0ZUJyZWFrRWxlbWVudChkb2N1bWVudCgpKSwg
dXBzdHJlYW1Qb3Mubm9kZSgpKTsKICAgICB9CiAgICAgCkluZGV4OiBraHRtbC9lZGl0aW5nL21h
cmt1cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWRp
dGluZy9tYXJrdXAuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIzCmRpZmYgLXUgLXAgLXIx
LjIzIGtodG1sL2VkaXRpbmcvbWFya3VwLmNwcAotLS0ga2h0bWwvZWRpdGluZy9tYXJrdXAuY3Bw
CTUgSnVsIDIwMDUgMjM6MjE6MDggLTAwMDAJMS4yMworKysga2h0bWwvZWRpdGluZy9tYXJrdXAu
Y3BwCTggSnVsIDIwMDUgMDU6NTA6MDAgLTAwMDAKQEAgLTM2LDggKzM2LDcgQEAKICNpbmNsdWRl
ICJ4bWwvZG9tMl9yYW5nZWltcGwuaCIKICNpbmNsdWRlICJyZW5kZXJpbmcvcmVuZGVyX3RleHQu
aCIKICNpbmNsdWRlICJtaXNjL2h0bWxhdHRycy5oIgotI2luY2x1ZGUgIm1pc2MvaHRtbHRhZ3Mu
aCIKLSNpbmNsdWRlICJodG1sL2R0ZC5oIgorI2luY2x1ZGUgImh0bWxuYW1lcy5oIgogCiB1c2lu
ZyBET006OkF0dHJpYnV0ZUltcGw7CiB1c2luZyBET006OkNvbW1lbnRJbXBsOwpAQCAtNDcsOSAr
NDYsOSBAQCB1c2luZyBET006OkRvY3VtZW50RnJhZ21lbnRJbXBsOwogdXNpbmcgRE9NOjpEb2N1
bWVudEltcGw7CiB1c2luZyBET006OkRPTVN0cmluZzsKIHVzaW5nIERPTTo6RWxlbWVudEltcGw7
Ci11c2luZyBET006OkZPUkJJRERFTjsKLXVzaW5nIERPTTo6ZW5kVGFnUmVxdWlyZW1lbnQ7Cit1
c2luZyBET006OlRhZ1N0YXR1c0ZvcmJpZGRlbjsKIHVzaW5nIERPTTo6SFRNTEVsZW1lbnRJbXBs
OwordXNpbmcgRE9NOjpIVE1MTmFtZXM7CiB1c2luZyBET006Ok5hbWVkQXR0ck1hcEltcGw7CiB1
c2luZyBET006Ok5vZGU7CiB1c2luZyBET006Ok5vZGVJbXBsOwpAQCAtMTc3LDEzICsxNzYsMTEg
QEAgc3RhdGljIFFTdHJpbmcgc3RhcnRNYXJrdXAoY29uc3QgTm9kZUltcAogICAgIHN3aXRjaCAo
dHlwZSkgewogICAgICAgICBjYXNlIE5vZGU6OlRFWFRfTk9ERTogewogICAgICAgICAgICAgaWYg
KG5vZGUtPnBhcmVudE5vZGUoKSkgewotICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+cGFy
ZW50Tm9kZSgpLT5pZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfUFJFOgotICAg
ICAgICAgICAgICAgICAgICBjYXNlIElEX1NDUklQVDoKLSAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBJRF9TVFlMRToKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9URVhUQVJFQToKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBzdHJpbmdWYWx1ZUZvclJhbmdlKG5vZGUsIHJhbmdl
KTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPnBhcmVudE5v
ZGUoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnByZSgpKSB8fAorICAgICAgICAgICAgICAgICAg
ICBub2RlLT5wYXJlbnROb2RlKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzY3JpcHQoKSkgfHwK
KyAgICAgICAgICAgICAgICAgICAgbm9kZS0+cGFyZW50Tm9kZSgpLT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6c3R5bGUoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+cGFyZW50Tm9kZSgp
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGV4dGFyZWEoKSkpCisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBzdHJpbmdWYWx1ZUZvclJhbmdlKG5vZGUsIHJhbmdlKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIFFTdHJpbmcgbWFya3VwID0gYW5ub3RhdGUgPyBlc2NhcGVIVE1MKHJlbmRl
cmVkVGV4dChub2RlLCByYW5nZSkpIDogZXNjYXBlSFRNTChzdHJpbmdWYWx1ZUZvclJhbmdlKG5v
ZGUsIHJhbmdlKSk7ICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoZGVmYXVsdFN0eWxlKSB7
CkBAIC0yNDgsOSArMjQ1LDEzIEBAIHN0YXRpYyBRU3RyaW5nIHN0YXJ0TWFya3VwKGNvbnN0IE5v
ZGVJbXAKIAogc3RhdGljIFFTdHJpbmcgZW5kTWFya3VwKGNvbnN0IE5vZGVJbXBsICpub2RlKQog
ewotICAgIGlmICgoIW5vZGUtPmlzSFRNTEVsZW1lbnQoKSB8fCBlbmRUYWdSZXF1aXJlbWVudChu
b2RlLT5pZCgpKSAhPSBGT1JCSURERU4pICYmIG5vZGUtPm5vZGVUeXBlKCkgIT0gTm9kZTo6VEVY
VF9OT0RFICYmIG5vZGUtPm5vZGVUeXBlKCkgIT0gTm9kZTo6RE9DVU1FTlRfTk9ERSkgewotICAg
ICAgICByZXR1cm4gIjwvIiArIG5vZGUtPm5vZGVOYW1lKCkuc3RyaW5nKCkgKyAiPiI7CisgICAg
Ym9vbCBoYXNFbmRUYWcgPSBub2RlLT5pc0VsZW1lbnROb2RlKCk7CisgICAgaWYgKG5vZGUtPmlz
SFRNTEVsZW1lbnQoKSkgeworICAgICAgICBjb25zdCBIVE1MRWxlbWVudEltcGwqIGh0bWxFbHQg
PSBzdGF0aWNfY2FzdDxjb25zdCBIVE1MRWxlbWVudEltcGwqPihub2RlKTsKKyAgICAgICAgaGFz
RW5kVGFnID0gKGh0bWxFbHQtPmVuZFRhZ1JlcXVpcmVtZW50KCkgIT0gVGFnU3RhdHVzRm9yYmlk
ZGVuKTsKICAgICB9CisgICAgaWYgKGhhc0VuZFRhZykKKyAgICAgICAgcmV0dXJuICI8LyIgKyBu
b2RlLT5ub2RlTmFtZSgpLnN0cmluZygpICsgIj4iOwogICAgIHJldHVybiAiIjsKIH0KIApAQCAt
MjY1LDggKzI2NiwxNCBAQCBzdGF0aWMgUVN0cmluZyBtYXJrdXAoY29uc3QgTm9kZUltcGwgKnN0
CiAgICAgICAgICAgICAgICAgbm9kZXMtPmFwcGVuZChjdXJyZW50KTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIG1lICs9IHN0YXJ0TWFya3VwKGN1cnJlbnQsIDAsIERvTm90QW5ub3RhdGVG
b3JJbnRlcmNoYW5nZSwgMCk7Ci0gICAgICAgIH0gICAgICAgIAotICAgICAgICBpZiAoIWN1cnJl
bnQtPmlzSFRNTEVsZW1lbnQoKSB8fCBlbmRUYWdSZXF1aXJlbWVudChjdXJyZW50LT5pZCgpKSAh
PSBGT1JCSURERU4pIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBjb250YWlu
ZXIgPSB0cnVlOworICAgICAgICBpZiAoY3VycmVudC0+aXNIVE1MRWxlbWVudCgpKSB7CisgICAg
ICAgICAgICBjb25zdCBIVE1MRWxlbWVudEltcGwqIGggPSBzdGF0aWNfY2FzdDxjb25zdCBIVE1M
RWxlbWVudEltcGwqPihjdXJyZW50KTsKKyAgICAgICAgICAgIGNvbnRhaW5lciA9IGgtPmVuZFRh
Z1JlcXVpcmVtZW50KCkgIT0gVGFnU3RhdHVzRm9yYmlkZGVuOworICAgICAgICB9CisgICAgICAg
IGlmIChjb250YWluZXIpIHsKICAgICAgICAgICAgIC8vIHByaW50IGNoaWxkcmVuCiAgICAgICAg
ICAgICBpZiAoTm9kZUltcGwgKm4gPSBjdXJyZW50LT5maXJzdENoaWxkKCkpIHsKICAgICAgICAg
ICAgICAgICBtZSArPSBtYXJrdXAobiwgZmFsc2UsIHRydWUsIG5vZGVzKTsKQEAgLTQxNCw5ICs0
MjEsOSBAQCBRU3RyaW5nIGNyZWF0ZU1hcmt1cChjb25zdCBSYW5nZUltcGwgKnJhCiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBib29sIGJyZWFrQXRFbmQgPSBmYWxzZTsKICAgICAgICAgICAg
IGlmIChjb21tb25BbmNlc3RvckJsb2NrID09IGFuY2VzdG9yKSB7Ci0gICAgICAgICAgICAgICAg
Tm9kZUltcGw6OklkIGlkID0gYW5jZXN0b3ItPmlkKCk7CiAgICAgICAgICAgICAgICAgLy8gSW5j
bHVkZSBhbmNlc3RvcnMgdGhhdCBhcmUgcmVxdWlyZWQgdG8gcmV0YWluIHRoZSBhcHBlYXJhbmNl
IG9mIHRoZSBjb3BpZWQgbWFya3VwLgotICAgICAgICAgICAgICAgIGlmIChpZCA9PSBJRF9QUkUg
fHwgaWQgPT0gSURfVEFCTEUgfHwgaWQgPT0gSURfT0wgfHwgaWQgPT0gSURfVUwpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoYW5jZXN0b3ItPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpwcmUoKSkgfHwg
YW5jZXN0b3ItPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0YWJsZSgpKSB8fAorICAgICAgICAgICAg
ICAgICAgICBhbmNlc3Rvci0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9sKCkpIHx8IGFuY2VzdG9y
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dWwoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgYnJl
YWtBdEVuZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CkBAIC01MzksNyArNTQ2LDcgQEAgRE9NOjpEb2N1bWVudEZyYWdtZW50SW1w
bCAqY3JlYXRlRnJhZ21lbgogICAgICAgICAgICAgRWxlbWVudEltcGwgKmVsZW1lbnQ7CiAgICAg
ICAgICAgICBpZiAocy5pc0VtcHR5KCkgJiYgbGlzdC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAg
ICAgICAvLyBGb3IgbGFzdCBsaW5lLCB1c2UgdGhlICJtYWdpYyBCUiIgcmF0aGVyIHRoYW4gYSBQ
LgotICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBkb2N1bWVudC0+Y3JlYXRlSFRNTEVsZW1lbnQo
ImJyIiwgZXhjZXB0aW9uQ29kZSk7CisgICAgICAgICAgICAgICAgZWxlbWVudCA9IGRvY3VtZW50
LT5jcmVhdGVFbGVtZW50TlMoWEhUTUxfTkFNRVNQQUNFLCAiYnIiLCBleGNlcHRpb25Db2RlKTsK
ICAgICAgICAgICAgICAgICBBU1NFUlQoZXhjZXB0aW9uQ29kZSA9PSAwKTsKICAgICAgICAgICAg
ICAgICBlbGVtZW50LT5yZWYoKTsKICAgICAgICAgICAgICAgICBlbGVtZW50LT5zZXRBdHRyaWJ1
dGUoQVRUUl9DTEFTUywgQXBwbGVJbnRlcmNoYW5nZU5ld2xpbmUpOyAgICAgICAgICAgIApJbmRl
eDoga2h0bWwvZWRpdGluZy9yZXBsYWNlX3NlbGVjdGlvbl9jb21tYW5kLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL3JlcGxhY2Vfc2VsZWN0
aW9uX2NvbW1hbmQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjQKZGlmZiAtdSAtcCAtcjEu
NCBraHRtbC9lZGl0aW5nL3JlcGxhY2Vfc2VsZWN0aW9uX2NvbW1hbmQuY3BwCi0tLSBraHRtbC9l
ZGl0aW5nL3JlcGxhY2Vfc2VsZWN0aW9uX2NvbW1hbmQuY3BwCTUgSnVsIDIwMDUgMjM6MjE6MDgg
LTAwMDAJMS40CisrKyBraHRtbC9lZGl0aW5nL3JlcGxhY2Vfc2VsZWN0aW9uX2NvbW1hbmQuY3Bw
CTggSnVsIDIwMDUgMDU6NTA6MDEgLTAwMDAKQEAgLTI3LDcgKzI3LDcgQEAKIAogI2luY2x1ZGUg
InZpc2libGVfcG9zaXRpb24uaCIKICNpbmNsdWRlICJtaXNjL2h0bWxhdHRycy5oIgotI2luY2x1
ZGUgIm1pc2MvaHRtbHRhZ3MuaCIKKyNpbmNsdWRlICJodG1sbmFtZXMuaCIKICNpbmNsdWRlICJ4
bWwvZG9tX2RvY2ltcGwuaCIKICNpbmNsdWRlICJodG1sX2ludGVyY2hhbmdlLmgiCiAjaW5jbHVk
ZSAieG1sL2RvbV90ZXh0aW1wbC5oIgpAQCAtNTgsNiArNTgsNyBAQCB1c2luZyBET006OkRPTVN0
cmluZzsKIHVzaW5nIERPTTo6SFRNTEVsZW1lbnRJbXBsOwogdXNpbmcgRE9NOjpDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbkltcGw7CiB1c2luZyBET006OlBvc2l0aW9uOwordXNpbmcgRE9NOjpI
VE1MTmFtZXM7CiAKIG5hbWVzcGFjZSBraHRtbCB7CiAKQEAgLTE2NywzMCArMTY4LDE0IEBAIHN0
YXRpYyBib29sIGlzUHJvYmFibHlCbG9jayhjb25zdCBOb2RlSW0KICAgICBpZiAoIW5vZGUpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBzd2l0Y2ggKG5vZGUtPmlkKCkpIHsKLSAg
ICAgICAgY2FzZSBJRF9CTE9DS1FVT1RFOgotICAgICAgICBjYXNlIElEX0REOgotICAgICAgICBj
YXNlIElEX0RJVjoKLSAgICAgICAgY2FzZSBJRF9ETDoKLSAgICAgICAgY2FzZSBJRF9EVDoKLSAg
ICAgICAgY2FzZSBJRF9IMToKLSAgICAgICAgY2FzZSBJRF9IMjoKLSAgICAgICAgY2FzZSBJRF9I
MzoKLSAgICAgICAgY2FzZSBJRF9INDoKLSAgICAgICAgY2FzZSBJRF9INToKLSAgICAgICAgY2Fz
ZSBJRF9INjoKLSAgICAgICAgY2FzZSBJRF9IUjoKLSAgICAgICAgY2FzZSBJRF9MSToKLSAgICAg
ICAgY2FzZSBJRF9PTDoKLSAgICAgICAgY2FzZSBJRF9QOgotICAgICAgICBjYXNlIElEX1BSRToK
LSAgICAgICAgY2FzZSBJRF9URDoKLSAgICAgICAgY2FzZSBJRF9USDoKLSAgICAgICAgY2FzZSBJ
RF9VTDoKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4g
ZmFsc2U7CisgICAgLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24gc2VlbXMgcmVhbGx5IGJyb2tlbiB0
byBtZS4gIEl0IGlzbid0IGV2ZW4gaW5jbHVkaW5nIGFsbCB0aGUgYmxvY2stbGV2ZWwgZWxlbWVu
dHMuCisgICAgcmV0dXJuIChub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YmxvY2txdW90ZSgp
KSB8fCBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZGQoKSkgfHwgbm9kZS0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OmRpdigpKSB8fAorICAgICAgICAgICAgbm9kZS0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OmRsKCkpIHx8IG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpkdCgpKSB8fCBub2Rl
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDEoKSkgfHwKKyAgICAgICAgICAgIG5vZGUtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjpoMigpKSB8fCBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDMo
KSkgfHwgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omg0KCkpIHx8CisgICAgICAgICAgICBu
b2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDUoKSkgfHwgbm9kZS0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6Omg2KCkpIHx8IG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpocigpKSB8fAorICAg
ICAgICAgICAgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmxpKCkpIHx8IG5vZGUtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjpvbCgpKSB8fCBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6cCgp
KSB8fAorICAgICAgICAgICAgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnByZSgpKSB8fCBu
b2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGQoKSkgfHwgbm9kZS0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OnRoKCkpIHx8CisgICAgICAgICAgICBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
dWwoKSkpOwogfQogCiBzdGF0aWMgYm9vbCBpc01haWxQYXN0ZUFzUXVvdGF0aW9uTm9kZShjb25z
dCBOb2RlSW1wbCAqbm9kZSkKQEAgLTIxNCwxNiArMTk5LDggQEAgc3RhdGljIGJvb2wgaXNQcm9i
YWJseVRhYmxlU3RydWN0dXJlTm9kZQogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIAotICAgIHN3aXRjaCAobm9kZS0+aWQoKSkgewotICAgICAgICBjYXNlIElEX1RB
QkxFOgotICAgICAgICBjYXNlIElEX1RCT0RZOgotICAgICAgICBjYXNlIElEX1REOgotICAgICAg
ICBjYXNlIElEX1RGT09UOgotICAgICAgICBjYXNlIElEX1RIRUFEOgotICAgICAgICBjYXNlIElE
X1RSOgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsK
KyAgICByZXR1cm4gKG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0YWJsZSgpKSB8fCBub2Rl
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGJvZHkoKSkgfHwgbm9kZS0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OnRkKCkpIHx8CisgICAgICAgICAgICBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
dGZvb3QoKSkgfHwgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRoZWFkKCkpIHx8IG5vZGUt
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0cigpKSk7CiB9CiAKIHZvaWQgUmVwbGFjZW1lbnRGcmFn
bWVudDo6cHJ1bmVFbXB0eU5vZGVzKCkKQEAgLTI1MCw3ICsyMjcsNyBAQCB2b2lkIFJlcGxhY2Vt
ZW50RnJhZ21lbnQ6OnBydW5lRW1wdHlOb2RlCiBib29sIFJlcGxhY2VtZW50RnJhZ21lbnQ6Omlz
SW50ZXJjaGFuZ2VOZXdsaW5lTm9kZShjb25zdCBOb2RlSW1wbCAqbm9kZSkKIHsKICAgICBzdGF0
aWMgRE9NU3RyaW5nIGludGVyY2hhbmdlTmV3bGluZUNsYXNzU3RyaW5nKEFwcGxlSW50ZXJjaGFu
Z2VOZXdsaW5lKTsKLSAgICByZXR1cm4gbm9kZSAmJiBub2RlLT5pZCgpID09IElEX0JSICYmIHN0
YXRpY19jYXN0PGNvbnN0IEVsZW1lbnRJbXBsICo+KG5vZGUpLT5nZXRBdHRyaWJ1dGUoQVRUUl9D
TEFTUykgPT0gaW50ZXJjaGFuZ2VOZXdsaW5lQ2xhc3NTdHJpbmc7CisgICAgcmV0dXJuIG5vZGUg
JiYgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJyKCkpICYmIHN0YXRpY19jYXN0PGNvbnN0
IEVsZW1lbnRJbXBsICo+KG5vZGUpLT5nZXRBdHRyaWJ1dGUoQVRUUl9DTEFTUykgPT0gaW50ZXJj
aGFuZ2VOZXdsaW5lQ2xhc3NTdHJpbmc7CiB9CiAKIGJvb2wgUmVwbGFjZW1lbnRGcmFnbWVudDo6
aXNJbnRlcmNoYW5nZUNvbnZlcnRlZFNwYWNlU3Bhbihjb25zdCBOb2RlSW1wbCAqbm9kZSkKQEAg
LTUwNywxOCArNDg0LDE5IEBAIHZvaWQgUmVwbGFjZW1lbnRGcmFnbWVudDo6cmVtb3ZlU3R5bGVO
b2QKICAgICAgICAgTm9kZUltcGwgKm5leHQgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCk7CiAg
ICAgICAgIC8vIFRoaXMgbGlzdCBvZiB0YWdzIGNoYW5nZSB0aGUgYXBwZWFyYW5jZSBvZiBjb250
ZW50CiAgICAgICAgIC8vIGluIHdheXMgd2UgY2FuIGFkZCBiYWNrIG9uIGxhdGVyIHdpdGggQ1NT
LCBpZiBuZWNlc3NhcnkuCi0gICAgICAgIGlmIChub2RlLT5pZCgpID09IElEX0IgfHwgCi0gICAg
ICAgICAgICBub2RlLT5pZCgpID09IElEX0JJRyB8fCAKLSAgICAgICAgICAgIG5vZGUtPmlkKCkg
PT0gSURfQ0VOVEVSIHx8IAotICAgICAgICAgICAgbm9kZS0+aWQoKSA9PSBJRF9GT05UIHx8IAot
ICAgICAgICAgICAgbm9kZS0+aWQoKSA9PSBJRF9JIHx8IAotICAgICAgICAgICAgbm9kZS0+aWQo
KSA9PSBJRF9TIHx8IAotICAgICAgICAgICAgbm9kZS0+aWQoKSA9PSBJRF9TTUFMTCB8fCAKLSAg
ICAgICAgICAgIG5vZGUtPmlkKCkgPT0gSURfU1RSSUtFIHx8IAotICAgICAgICAgICAgbm9kZS0+
aWQoKSA9PSBJRF9TVUIgfHwgCi0gICAgICAgICAgICBub2RlLT5pZCgpID09IElEX1NVUCB8fCAK
LSAgICAgICAgICAgIG5vZGUtPmlkKCkgPT0gSURfVFQgfHwgCi0gICAgICAgICAgICBub2RlLT5p
ZCgpID09IElEX1UgfHwgCisgICAgICAgIC8vICBGSVhNRTogVGhpcyBsaXN0IGlzIGluY29tcGxl
dGUKKyAgICAgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpiKCkpIHx8IAorICAg
ICAgICAgICAgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJpZygpKSB8fCAKKyAgICAgICAg
ICAgIG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpjZW50ZXIoKSkgfHwgCisgICAgICAgICAg
ICBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Zm9udCgpKSB8fCAKKyAgICAgICAgICAgIG5v
ZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppKCkpIHx8IAorICAgICAgICAgICAgbm9kZS0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OnMoKSkgfHwgCisgICAgICAgICAgICBub2RlLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6c21hbGwoKSkgfHwgCisgICAgICAgICAgICBub2RlLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6c3RyaWtlKCkpIHx8IAorICAgICAgICAgICAgbm9kZS0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OnN1YigpKSB8fCAKKyAgICAgICAgICAgIG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjpzdXAoKSkgfHwgCisgICAgICAgICAgICBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dHQo
KSkgfHwgCisgICAgICAgICAgICBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dSgpKSB8fCAK
ICAgICAgICAgICAgIGlzU3R5bGVTcGFuKG5vZGUpKSB7CiAgICAgICAgICAgICByZW1vdmVOb2Rl
UHJlc2VydmluZ0NoaWxkcmVuKG5vZGUpOwogICAgICAgICB9CkBAIC03NDQsNyArNzIyLDcgQEAg
dm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgaWYgKCFsaW5lUGxh
Y2Vob2xkZXIpIHsKICAgICAgICAgUG9zaXRpb24gZG93bnN0cmVhbSA9IHN0YXJ0UG9zLmRvd25z
dHJlYW0oKTsKICAgICAgICAgZG93bnN0cmVhbSA9IHBvc2l0aW9uT3V0c2lkZUNvbnRhaW5pbmdT
cGVjaWFsRWxlbWVudChkb3duc3RyZWFtKTsKLSAgICAgICAgaWYgKGRvd25zdHJlYW0ubm9kZSgp
LT5pZCgpID09IElEX0JSICYmIGRvd25zdHJlYW0ub2Zmc2V0KCkgPT0gMCAmJiAKKyAgICAgICAg
aWYgKGRvd25zdHJlYW0ubm9kZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YnIoKSkgJiYgZG93
bnN0cmVhbS5vZmZzZXQoKSA9PSAwICYmIAogICAgICAgICAgICAgbV9mcmFnbWVudC5oYXNJbnRl
cmNoYW5nZU5ld2xpbmVBdEVuZCgpICYmCiAgICAgICAgICAgICBpc1N0YXJ0T2ZMaW5lKFZpc2li
bGVQb3NpdGlvbihkb3duc3RyZWFtLCBWUF9ERUZBVUxUX0FGRklOSVRZKSkpCiAgICAgICAgICAg
ICBsaW5lUGxhY2Vob2xkZXIgPSBkb3duc3RyZWFtLm5vZGUoKTsKQEAgLTkwNiwxMiArODg0LDEy
IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkoKQogICAgICAgICB9CiAg
ICAgfSAKICAgICBlbHNlIHsKLSAgICAgICAgaWYgKG1fbGFzdE5vZGVJbnNlcnRlZCAmJiBtX2xh
c3ROb2RlSW5zZXJ0ZWQtPmlkKCkgPT0gSURfQlIgJiYgIWRvY3VtZW50KCktPmluU3RyaWN0TW9k
ZSgpKSB7CisgICAgICAgIGlmIChtX2xhc3ROb2RlSW5zZXJ0ZWQgJiYgbV9sYXN0Tm9kZUluc2Vy
dGVkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YnIoKSkgJiYgIWRvY3VtZW50KCktPmluU3RyaWN0
TW9kZSgpKSB7CiAgICAgICAgICAgICBkb2N1bWVudCgpLT51cGRhdGVMYXlvdXQoKTsKICAgICAg
ICAgICAgIFZpc2libGVQb3NpdGlvbiBwb3MoUG9zaXRpb24obV9sYXN0Tm9kZUluc2VydGVkLCAx
KSwgRE9XTlNUUkVBTSk7CiAgICAgICAgICAgICBpZiAoaXNFbmRPZkJsb2NrKHBvcykpIHsKICAg
ICAgICAgICAgICAgICBOb2RlSW1wbCAqbmV4dCA9IG1fbGFzdE5vZGVJbnNlcnRlZC0+dHJhdmVy
c2VOZXh0Tm9kZSgpOwotICAgICAgICAgICAgICAgIGJvb2wgaGFzVHJhaWxpbmdCUiA9IG5leHQg
JiYgbmV4dC0+aWQoKSA9PSBJRF9CUiAmJiBtX2xhc3ROb2RlSW5zZXJ0ZWQtPmVuY2xvc2luZ0Js
b2NrRmxvd0VsZW1lbnQoKSA9PSBuZXh0LT5lbmNsb3NpbmdCbG9ja0Zsb3dFbGVtZW50KCk7Cisg
ICAgICAgICAgICAgICAgYm9vbCBoYXNUcmFpbGluZ0JSID0gbmV4dCAmJiBuZXh0LT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6YnIoKSkgJiYgbV9sYXN0Tm9kZUluc2VydGVkLT5lbmNsb3NpbmdCbG9j
a0Zsb3dFbGVtZW50KCkgPT0gbmV4dC0+ZW5jbG9zaW5nQmxvY2tGbG93RWxlbWVudCgpOwogICAg
ICAgICAgICAgICAgIGlmICghaGFzVHJhaWxpbmdCUikgewogICAgICAgICAgICAgICAgICAgICAv
LyBJbnNlcnQgYW4gImV4dHJhIiBCUiBhdCB0aGUgZW5kIG9mIHRoZSBibG9jay4gCiAgICAgICAg
ICAgICAgICAgICAgIGluc2VydE5vZGVCZWZvcmUoY3JlYXRlQnJlYWtFbGVtZW50KGRvY3VtZW50
KCkpLCBtX2xhc3ROb2RlSW5zZXJ0ZWQpOwpAQCAtOTM4LDcgKzkxNiw3IEBAIHZvaWQgUmVwbGFj
ZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkoKQogICAgICAgICAgICAgICAgIGluc2VydE5vZGVB
ZnRlcihub2RlLCByZWZOb2RlKTsKICAgICAgICAgICAgICAgICByZWZOb2RlID0gbm9kZTsKICAg
ICAgICAgICAgICAgICAvLyBXZSB3YW50IHRvIG1vdmUgdGhlIGZpcnN0IEJSIHdlIHNlZSwgc28g
Y2hlY2sgZm9yIHRoYXQgaGVyZS4KLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+aWQoKSA9PSBJ
RF9CUikKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJy
KCkpKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBub2RlID0g
bmV4dDsKICAgICAgICAgICAgIH0KQEAgLTEwODYsNyArMTA2NCw3IEBAIHZvaWQgUmVwbGFjZVNl
bGVjdGlvbkNvbW1hbmQ6OnVwZGF0ZU5vZGUKICAgICAKICAgICAvLyB1cGRhdGUgbV9sYXN0Tm9k
ZUluc2VydGVkCiAgICAgTm9kZUltcGwgKm9sZCA9IG1fbGFzdE5vZGVJbnNlcnRlZDsKLSAgICBt
X2xhc3ROb2RlSW5zZXJ0ZWQgPSBub2RlLT5sYXN0RGVzY2VuZGVudCgpOworICAgIG1fbGFzdE5v
ZGVJbnNlcnRlZCA9IG5vZGUtPmxhc3REZXNjZW5kYW50KCk7CiAgICAgbV9sYXN0Tm9kZUluc2Vy
dGVkLT5yZWYoKTsKICAgICBpZiAob2xkKQogICAgICAgICBvbGQtPmRlcmVmKCk7CkluZGV4OiBr
aHRtbC9lZGl0aW5nL3NlbGVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L1dlYkNvcmUva2h0bWwvZWRpdGluZy9zZWxlY3Rpb24uY3BwLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjg5CmRpZmYgLXUgLXAgLXIxLjg5IGtodG1sL2VkaXRpbmcvc2VsZWN0aW9uLmNwcAotLS0g
a2h0bWwvZWRpdGluZy9zZWxlY3Rpb24uY3BwCTIzIEp1biAyMDA1IDE5OjQ3OjQ4IC0wMDAwCTEu
ODkKKysrIGtodG1sL2VkaXRpbmcvc2VsZWN0aW9uLmNwcAk4IEp1bCAyMDA1IDA1OjUwOjAyIC0w
MDAwCkBAIC0zMyw3ICszMyw2IEBACiAjaW5jbHVkZSAiZG9tL2RvbV9zdHJpbmcuaCIKICNpbmNs
dWRlICJraHRtbF9wYXJ0LmgiCiAjaW5jbHVkZSAia2h0bWx2aWV3LmgiCi0jaW5jbHVkZSAibWlz
Yy9odG1sdGFncy5oIgogI2luY2x1ZGUgInJlbmRlcmluZy9yZW5kZXJfb2JqZWN0LmgiCiAjaW5j
bHVkZSAicmVuZGVyaW5nL3JlbmRlcl9zdHlsZS5oIgogI2luY2x1ZGUgInJlbmRlcmluZy9yZW5k
ZXJfdGV4dC5oIgpAQCAtOTM4LDcgKzkzNyw3IEBAIHZvaWQgU2VsZWN0aW9uOjpkZWJ1Z1JlbmRl
cmVyKFJlbmRlck9iamUKIHsKICAgICBpZiAoci0+bm9kZSgpLT5pc0VsZW1lbnROb2RlKCkpIHsK
ICAgICAgICAgRWxlbWVudEltcGwgKmVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50SW1wbCAq
PihyLT5ub2RlKCkpOwotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzJXNcbiIsIHNlbGVjdGVk
ID8gIj09PiAiIDogIiAgICAiLCBlbGVtZW50LT50YWdOYW1lKCkuc3RyaW5nKCkubGF0aW4xKCkp
OworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzJXNcbiIsIHNlbGVjdGVkID8gIj09PiAiIDog
IiAgICAiLCBlbGVtZW50LT5sb2NhbE5hbWUoKS5zdHJpbmcoKS5sYXRpbjEoKSk7CiAgICAgfQog
ICAgIGVsc2UgaWYgKHItPmlzVGV4dCgpKSB7CiAgICAgICAgIFJlbmRlclRleHQgKnRleHRSZW5k
ZXJlciA9IHN0YXRpY19jYXN0PFJlbmRlclRleHQgKj4ocik7CkluZGV4OiBraHRtbC9lZGl0aW5n
L3Zpc2libGVfcG9zaXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJD
b3JlL2todG1sL2VkaXRpbmcvdmlzaWJsZV9wb3NpdGlvbi5jcHAsdgpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuNTEKZGlmZiAtdSAtcCAtcjEuNTEga2h0bWwvZWRpdGluZy92aXNpYmxlX3Bvc2l0aW9u
LmNwcAotLS0ga2h0bWwvZWRpdGluZy92aXNpYmxlX3Bvc2l0aW9uLmNwcAkyMyBKdW4gMjAwNSAx
OTo0Nzo0OSAtMDAwMAkxLjUxCisrKyBraHRtbC9lZGl0aW5nL3Zpc2libGVfcG9zaXRpb24uY3Bw
CTggSnVsIDIwMDUgMDU6NTA6MDIgLTAwMDAKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlICJ2
aXNpYmxlX3Bvc2l0aW9uLmgiCiAjaW5jbHVkZSAidmlzaWJsZV91bml0cy5oIgogCi0jaW5jbHVk
ZSAibWlzYy9odG1sdGFncy5oIgorI2luY2x1ZGUgImh0bWxuYW1lcy5oIgogI2luY2x1ZGUgInJl
bmRlcmluZy9yZW5kZXJfbGluZS5oIgogI2luY2x1ZGUgInJlbmRlcmluZy9yZW5kZXJfb2JqZWN0
LmgiCiAjaW5jbHVkZSAicmVuZGVyaW5nL3JlbmRlcl90ZXh0LmgiCkBAIC01MCw2ICs1MCw3IEBA
IHVzaW5nIERPTTo6UG9zaXRpb247CiB1c2luZyBET006OlJhbmdlOwogdXNpbmcgRE9NOjpSYW5n
ZUltcGw7CiB1c2luZyBET006OlRleHRJbXBsOwordXNpbmcgRE9NOjpIVE1MTmFtZXM7CiAKIG5h
bWVzcGFjZSBraHRtbCB7CiAKQEAgLTc0LDcgKzc1LDcgQEAgdm9pZCBWaXNpYmxlUG9zaXRpb246
OmluaXQoY29uc3QgUG9zaXRpbwogICAgIG1fYWZmaW5pdHkgPSBhZmZpbml0eTsKIAogICAgIC8v
IEZvciA8YnI+IDAsIGl0J3MgaW1wb3J0YW50IG5vdCB0byBtb3ZlIHBhc3QgdGhlIDxicj4uCi0g
ICAgaWYgKHBvcy5ub2RlKCkgJiYgcG9zLm5vZGUoKS0+aWQoKSA9PSBJRF9CUiAmJiBwb3Mub2Zm
c2V0KCkgPT0gMCkKKyAgICBpZiAocG9zLm5vZGUoKSAmJiBwb3Mubm9kZSgpLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6YnIoKSkgJiYgcG9zLm9mZnNldCgpID09IDApCiAgICAgICAgIGluaXRVcHN0
cmVhbShwb3MpOwogICAgIGVsc2UKICAgICAgICAgaW5pdERvd25zdHJlYW0ocG9zKTsKQEAgLTI3
NCw3ICsyNzUsNyBAQCBib29sIFZpc2libGVQb3NpdGlvbjo6aXNDYW5kaWRhdGUoY29uc3QgCiAg
ICAgfQogICAgIAogICAgIGlmIChyZW5kZXJlci0+aXNCbG9ja0Zsb3coKSAmJiAoIXJlbmRlcmVy
LT5maXJzdENoaWxkKCkgfHwgIXBvcy5ub2RlKCktPmZpcnN0Q2hpbGQoKSkgJiYgCi0gICAgICAg
KHJlbmRlcmVyLT5oZWlnaHQoKSB8fCBwb3Mubm9kZSgpLT5pZCgpID09IElEX0JPRFkpKSB7Cisg
ICAgICAgKHJlbmRlcmVyLT5oZWlnaHQoKSB8fCBwb3Mubm9kZSgpLT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6Ym9keSgpKSkpIHsKICAgICAgICAgLy8gcmV0dXJuIHRydWUgZm9yIG9mZnNldCAwIGlu
dG8gcmVuZGVyZWQgYmxvY2tzIHRoYXQgYXJlIGVtcHR5IG9mIHJlbmRlcmVkIGtpZHMsIGJ1dCBo
YXZlIGEgaGVpZ2h0CiAgICAgICAgIHJldHVybiBwb3Mub2Zmc2V0KCkgPT0gMDsKICAgICB9CkBA
IC0zNTksNyArMzYwLDcgQEAgbG9uZyBWaXNpYmxlUG9zaXRpb246Om1heE9mZnNldChjb25zdCBO
bwogCiBib29sIFZpc2libGVQb3NpdGlvbjo6aXNBdG9taWNOb2RlKGNvbnN0IE5vZGVJbXBsICpu
b2RlKQogewotICAgIHJldHVybiBub2RlICYmICghbm9kZS0+aGFzQ2hpbGROb2RlcygpIHx8IChu
b2RlLT5pZCgpID09IElEX09CSkVDVCAmJiBub2RlLT5yZW5kZXJlcigpICYmIG5vZGUtPnJlbmRl
cmVyKCktPmlzUmVwbGFjZWQoKSkpOworICAgIHJldHVybiBub2RlICYmICghbm9kZS0+aGFzQ2hp
bGROb2RlcygpIHx8IChub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b2JqZWN0KCkpICYmIG5v
ZGUtPnJlbmRlcmVyKCkgJiYgbm9kZS0+cmVuZGVyZXIoKS0+aXNSZXBsYWNlZCgpKSk7CiB9CiAK
IFFDaGFyIFZpc2libGVQb3NpdGlvbjo6Y2hhcmFjdGVyKCkgY29uc3QKSW5kZXg6IGtodG1sL2Vk
aXRpbmcvdmlzaWJsZV90ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2Vi
Q29yZS9raHRtbC9lZGl0aW5nL3Zpc2libGVfdGV4dC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuMjcKZGlmZiAtdSAtcCAtcjEuMjcga2h0bWwvZWRpdGluZy92aXNpYmxlX3RleHQuY3BwCi0t
LSBraHRtbC9lZGl0aW5nL3Zpc2libGVfdGV4dC5jcHAJMTMgTWF5IDIwMDUgMTY6NDg6NTEgLTAw
MDAJMS4yNworKysga2h0bWwvZWRpdGluZy92aXNpYmxlX3RleHQuY3BwCTggSnVsIDIwMDUgMDU6
NTA6MDMgLTAwMDAKQEAgLTI1LDcgKzI1LDcgQEAKIAogI2luY2x1ZGUgInZpc2libGVfdGV4dC5o
IgogCi0jaW5jbHVkZSAibWlzYy9odG1sdGFncy5oIgorI2luY2x1ZGUgImh0bWxuYW1lcy5oIgog
I2luY2x1ZGUgInJlbmRlcmluZy9yZW5kZXJfdGV4dC5oIgogI2luY2x1ZGUgInhtbC9kb21fbm9k
ZWltcGwuaCIKICNpbmNsdWRlICJ4bWwvZG9tX3Bvc2l0aW9uLmgiCkBAIC0zNyw2ICszNyw3IEBA
IHVzaW5nIERPTTo6Tm9kZTsKIHVzaW5nIERPTTo6Tm9kZUltcGw7CiB1c2luZyBET006Om9mZnNl
dEluQ2hhcmFjdGVyczsKIHVzaW5nIERPTTo6UmFuZ2VJbXBsOwordXNpbmcgRE9NOjpIVE1MTmFt
ZXM7CiAKIC8vIEZJWE1FOiBUaGVzZSBjbGFzc2VzIHNob3VsZCBwcm9iYWJseSB1c2UgdGhlIHJl
bmRlciB0cmVlIGFuZCBub3QgdGhlIERPTSB0cmVlLCBzaW5jZSBlbGVtZW50cyBjb3VsZAogLy8g
YmUgaGlkZGVuIHVzaW5nIENTUywgb3IgYWRkaXRpb25hbCBnZW5lcmF0ZWQgY29udGVudCBjb3Vs
ZCBiZSBhZGRlZC4gIEZvciBub3csIHdlIGp1c3QgbWFrZSBzdXJlCkBAIC0zMzYsNDEgKzMzNywy
NSBAQCBib29sIFRleHRJdGVyYXRvcjo6aGFuZGxlUmVwbGFjZWRFbGVtZW50CiAKIGJvb2wgVGV4
dEl0ZXJhdG9yOjpoYW5kbGVOb25UZXh0Tm9kZSgpCiB7Ci0gICAgc3dpdGNoIChtX25vZGUtPmlk
KCkpIHsKLSAgICAgICAgY2FzZSBJRF9CUjogewotICAgICAgICAgICAgZW1pdENoYXJhY3Rlcign
XG4nLCBtX25vZGUtPnBhcmVudE5vZGUoKSwgbV9ub2RlLCAwLCAxKTsKLSAgICAgICAgICAgIGJy
ZWFrOworICAgIGlmIChtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpicigpKSkgeworICAg
ICAgICBlbWl0Q2hhcmFjdGVyKCdcbicsIG1fbm9kZS0+cGFyZW50Tm9kZSgpLCBtX25vZGUsIDAs
IDEpOworICAgIH0gZWxzZSBpZiAobV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGQoKSkg
fHwgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGgoKSkpIHsKKyAgICAgICAgaWYgKG1f
bGFzdENoYXJhY3RlciAhPSAnXG4nICYmIG1fbGFzdFRleHROb2RlKSB7CisgICAgICAgICAgICBl
bWl0Q2hhcmFjdGVyKCdcdCcsIG1fbGFzdFRleHROb2RlLT5wYXJlbnROb2RlKCksIG1fbGFzdFRl
eHROb2RlLCAwLCAxKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAobV9ub2RlLT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6YmxvY2txdW90ZSgpKSB8fCBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjpkZCgpKSB8fAorICAgICAgICAgICAgICAgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6ZGl2KCkpIHx8CisgICAgICAgICAgICAgICBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjpkbCgpKSB8fCBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpkdCgpKSB8fCAKKyAgICAg
ICAgICAgICAgIG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmgxKCkpIHx8IG1fbm9kZS0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OmgyKCkpIHx8CisgICAgICAgICAgICAgICBtX25vZGUtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjpoMygpKSB8fCBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjpoNCgpKSB8fAorICAgICAgICAgICAgICAgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
aDUoKSkgfHwgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDYoKSkgfHwKKyAgICAgICAg
ICAgICAgIG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmhyKCkpIHx8IG1fbm9kZS0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OmxpKCkpIHx8CisgICAgICAgICAgICAgICBtX25vZGUtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjpvbCgpKSB8fCBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpw
KCkpIHx8CisgICAgICAgICAgICAgICBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpwcmUo
KSkgfHwgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dHIoKSkgfHwKKyAgICAgICAgICAg
ICAgIG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnVsKCkpKSB7CisgICAgICAgIGlmICht
X2xhc3RDaGFyYWN0ZXIgIT0gJ1xuJyAmJiBtX2xhc3RUZXh0Tm9kZSkgeworICAgICAgICAgICAg
ZW1pdENoYXJhY3RlcignXG4nLCBtX2xhc3RUZXh0Tm9kZS0+cGFyZW50Tm9kZSgpLCBtX2xhc3RU
ZXh0Tm9kZSwgMCwgMSk7CiAgICAgICAgIH0KLQotICAgICAgICBjYXNlIElEX1REOgotICAgICAg
ICBjYXNlIElEX1RIOgotICAgICAgICAgICAgaWYgKG1fbGFzdENoYXJhY3RlciAhPSAnXG4nICYm
IG1fbGFzdFRleHROb2RlKSB7Ci0gICAgICAgICAgICAgICAgZW1pdENoYXJhY3RlcignXHQnLCBt
X2xhc3RUZXh0Tm9kZS0+cGFyZW50Tm9kZSgpLCBtX2xhc3RUZXh0Tm9kZSwgMCwgMSk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIElEX0JMT0NLUVVP
VEU6Ci0gICAgICAgIGNhc2UgSURfREQ6Ci0gICAgICAgIGNhc2UgSURfRElWOgotICAgICAgICBj
YXNlIElEX0RMOgotICAgICAgICBjYXNlIElEX0RUOgotICAgICAgICBjYXNlIElEX0gxOgotICAg
ICAgICBjYXNlIElEX0gyOgotICAgICAgICBjYXNlIElEX0gzOgotICAgICAgICBjYXNlIElEX0g0
OgotICAgICAgICBjYXNlIElEX0g1OgotICAgICAgICBjYXNlIElEX0g2OgotICAgICAgICBjYXNl
IElEX0hSOgotICAgICAgICBjYXNlIElEX0xJOgotICAgICAgICBjYXNlIElEX09MOgotICAgICAg
ICBjYXNlIElEX1A6Ci0gICAgICAgIGNhc2UgSURfUFJFOgotICAgICAgICBjYXNlIElEX1RSOgot
ICAgICAgICBjYXNlIElEX1VMOgotICAgICAgICAgICAgaWYgKG1fbGFzdENoYXJhY3RlciAhPSAn
XG4nICYmIG1fbGFzdFRleHROb2RlKSB7Ci0gICAgICAgICAgICAgICAgZW1pdENoYXJhY3Rlcign
XG4nLCBtX2xhc3RUZXh0Tm9kZS0+cGFyZW50Tm9kZSgpLCBtX2xhc3RUZXh0Tm9kZSwgMCwgMSk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKICAgICB9CiAKICAgICByZXR1cm4g
dHJ1ZTsKQEAgLTM4MSw0OSArMzY2LDM3IEBAIHZvaWQgVGV4dEl0ZXJhdG9yOjpleGl0Tm9kZSgp
CiAgICAgYm9vbCBlbmRMaW5lID0gZmFsc2U7CiAgICAgYm9vbCBhZGROZXdsaW5lID0gZmFsc2U7
CiAKLSAgICBzd2l0Y2ggKG1fbm9kZS0+aWQoKSkgewotICAgICAgICBjYXNlIElEX0JMT0NLUVVP
VEU6Ci0gICAgICAgIGNhc2UgSURfREQ6Ci0gICAgICAgIGNhc2UgSURfRElWOgotICAgICAgICBj
YXNlIElEX0RMOgotICAgICAgICBjYXNlIElEX0RUOgotICAgICAgICBjYXNlIElEX0hSOgotICAg
ICAgICBjYXNlIElEX0xJOgotICAgICAgICBjYXNlIElEX09MOgotICAgICAgICBjYXNlIElEX1BS
RToKLSAgICAgICAgY2FzZSBJRF9UUjoKLSAgICAgICAgY2FzZSBJRF9VTDoKLSAgICAgICAgICAg
IGVuZExpbmUgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBJRF9I
MToKLSAgICAgICAgY2FzZSBJRF9IMjoKLSAgICAgICAgY2FzZSBJRF9IMzoKLSAgICAgICAgY2Fz
ZSBJRF9INDoKLSAgICAgICAgY2FzZSBJRF9INToKLSAgICAgICAgY2FzZSBJRF9INjoKLSAgICAg
ICAgY2FzZSBJRF9QOiB7Ci0gICAgICAgICAgICBlbmRMaW5lID0gdHJ1ZTsKLQotICAgICAgICAg
ICAgLy8gSW4gY2VydGFpbiBjYXNlcywgZW1pdCBhIG5ldyBuZXdsaW5lIGNoYXJhY3RlciBmb3Ig
dGhpcyBub2RlCi0gICAgICAgICAgICAvLyByZWdhcmRsZXNzIG9mIHdoZXRoZXIgd2UgZW1pdCBh
bm90aGVyIG9uZS4KLSAgICAgICAgICAgIC8vIEZJWE1FOiBTb21lIGRheSB3ZSBjb3VsZCBkbyB0
aGlzIGZvciBvdGhlciB0YWdzLgotICAgICAgICAgICAgLy8gSG93ZXZlciwgZG9pbmcgaXQganVz
dCBmb3IgdGhlIHRhZ3MgYWJvdmUgbWFrZXMgaXQgbW9yZSBsaWtlbHkKLSAgICAgICAgICAgIC8v
IHdlJ2xsIGVuZCB1cCBnZXR0aW5nIHRoZSByaWdodCByZXN1bHQgd2l0aG91dCBtYXJnaW4gY29s
bGFwc2luZy4KLSAgICAgICAgICAgIC8vIEZvciBleGFtcGxlOiA8ZGl2PjxwPnRleHQ8L3A+PC9k
aXY+IHdpbGwgd29yayByaWdodCBldmVuIGlmIGJvdGgKLSAgICAgICAgICAgIC8vIHRoZSA8ZGl2
PiBhbmQgdGhlIDxwPiBoYXZlIGJvdHRvbSBtYXJnaW5zLgotICAgICAgICAgICAgUmVuZGVyT2Jq
ZWN0ICpyZW5kZXJlciA9IG1fbm9kZS0+cmVuZGVyZXIoKTsKLSAgICAgICAgICAgIGlmIChyZW5k
ZXJlcikgewotICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlICpzdHlsZSA9IHJlbmRlcmVyLT5z
dHlsZSgpOwotICAgICAgICAgICAgICAgIGlmIChzdHlsZSkgewotICAgICAgICAgICAgICAgICAg
ICBpbnQgYm90dG9tTWFyZ2luID0gcmVuZGVyZXItPmNvbGxhcHNlZE1hcmdpbkJvdHRvbSgpOwot
ICAgICAgICAgICAgICAgICAgICBpbnQgZm9udFNpemUgPSBzdHlsZS0+aHRtbEZvbnQoKS5nZXRG
b250RGVmKCkuY29tcHV0ZWRQaXhlbFNpemUoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGJv
dHRvbU1hcmdpbiAqIDIgPj0gZm9udFNpemUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFk
ZE5ld2xpbmUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICB9CisgICAgaWYgKG1fbm9kZS0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJsb2NrcXVvdGUoKSkgfHwgbV9ub2RlLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6ZGQoKSkgfHwKKyAgICAgICAgICAgICAgIG1fbm9kZS0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OmRpdigpKSB8fAorICAgICAgICAgICAgICAgbV9ub2RlLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6ZGwoKSkgfHwgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZHQoKSkgfHwg
CisgICAgICAgICAgICAgICBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpocigpKSB8fCBt
X25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpsaSgpKSB8fAorICAgICAgICAgICAgICAgbV9u
b2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b2woKSkgfHwKKyAgICAgICAgICAgICAgIG1fbm9k
ZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnByZSgpKSB8fCBtX25vZGUtPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjp0cigpKSB8fAorICAgICAgICAgICAgICAgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6dWwoKSkpCisgICAgICAgIGVuZExpbmUgPSB0cnVlOworICAgIGVsc2UgaWYgKG1fbm9k
ZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmgxKCkpIHx8IG1fbm9kZS0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OmgyKCkpIHx8CisgICAgICAgICAgICAgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6aDMoKSkgfHwgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDQoKSkgfHwKKyAgICAg
ICAgICAgICBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoNSgpKSB8fCBtX25vZGUtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjpoNigpKSB8fAorICAgICAgICAgICAgIG1fbm9kZS0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OnAoKSkpIHsKKyAgICAgICAgZW5kTGluZSA9IHRydWU7CisKKyAgICAg
ICAgLy8gSW4gY2VydGFpbiBjYXNlcywgZW1pdCBhIG5ldyBuZXdsaW5lIGNoYXJhY3RlciBmb3Ig
dGhpcyBub2RlCisgICAgICAgIC8vIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB3ZSBlbWl0IGFub3Ro
ZXIgb25lLgorICAgICAgICAvLyBGSVhNRTogU29tZSBkYXkgd2UgY291bGQgZG8gdGhpcyBmb3Ig
b3RoZXIgdGFncy4KKyAgICAgICAgLy8gSG93ZXZlciwgZG9pbmcgaXQganVzdCBmb3IgdGhlIHRh
Z3MgYWJvdmUgbWFrZXMgaXQgbW9yZSBsaWtlbHkKKyAgICAgICAgLy8gd2UnbGwgZW5kIHVwIGdl
dHRpbmcgdGhlIHJpZ2h0IHJlc3VsdCB3aXRob3V0IG1hcmdpbiBjb2xsYXBzaW5nLgorICAgICAg
ICAvLyBGb3IgZXhhbXBsZTogPGRpdj48cD50ZXh0PC9wPjwvZGl2PiB3aWxsIHdvcmsgcmlnaHQg
ZXZlbiBpZiBib3RoCisgICAgICAgIC8vIHRoZSA8ZGl2PiBhbmQgdGhlIDxwPiBoYXZlIGJvdHRv
bSBtYXJnaW5zLgorICAgICAgICBSZW5kZXJPYmplY3QgKnJlbmRlcmVyID0gbV9ub2RlLT5yZW5k
ZXJlcigpOworICAgICAgICBpZiAocmVuZGVyZXIpIHsKKyAgICAgICAgICAgIFJlbmRlclN0eWxl
ICpzdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpOworICAgICAgICAgICAgaWYgKHN0eWxlKSB7Cisg
ICAgICAgICAgICAgICAgaW50IGJvdHRvbU1hcmdpbiA9IHJlbmRlcmVyLT5jb2xsYXBzZWRNYXJn
aW5Cb3R0b20oKTsKKyAgICAgICAgICAgICAgICBpbnQgZm9udFNpemUgPSBzdHlsZS0+aHRtbEZv
bnQoKS5nZXRGb250RGVmKCkuY29tcHV0ZWRQaXhlbFNpemUoKTsKKyAgICAgICAgICAgICAgICBp
ZiAoYm90dG9tTWFyZ2luICogMiA+PSBmb250U2l6ZSkgeworICAgICAgICAgICAgICAgICAgICBh
ZGROZXdsaW5lID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KIApAQCAtNjYwLDM0ICs2MzMsMjIgQEAg
Ym9vbCBTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yOjpoYQogCiBib29sIFNpbXBsaWZp
ZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3I6OmhhbmRsZU5vblRleHROb2RlKCkKIHsKLSAgICBzd2l0
Y2ggKG1fbm9kZS0+aWQoKSkgewotICAgICAgICBjYXNlIElEX0JSOgotICAgICAgICAgICAgZW1p
dE5ld2xpbmVGb3JCUk9yVGV4dCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
SURfVEQ6Ci0gICAgICAgIGNhc2UgSURfVEg6Ci0gICAgICAgIGNhc2UgSURfQkxPQ0tRVU9URToK
LSAgICAgICAgY2FzZSBJRF9ERDoKLSAgICAgICAgY2FzZSBJRF9ESVY6Ci0gICAgICAgIGNhc2Ug
SURfREw6Ci0gICAgICAgIGNhc2UgSURfRFQ6Ci0gICAgICAgIGNhc2UgSURfSDE6Ci0gICAgICAg
IGNhc2UgSURfSDI6Ci0gICAgICAgIGNhc2UgSURfSDM6Ci0gICAgICAgIGNhc2UgSURfSDQ6Ci0g
ICAgICAgIGNhc2UgSURfSDU6Ci0gICAgICAgIGNhc2UgSURfSDY6Ci0gICAgICAgIGNhc2UgSURf
SFI6Ci0gICAgICAgIGNhc2UgSURfUDoKLSAgICAgICAgY2FzZSBJRF9QUkU6Ci0gICAgICAgIGNh
c2UgSURfVFI6Ci0gICAgICAgIGNhc2UgSURfT0w6Ci0gICAgICAgIGNhc2UgSURfVUw6Ci0gICAg
ICAgIGNhc2UgSURfTEk6Ci0gICAgICAgICAgICAvLyBFbWl0IGEgc3BhY2UgdG8gImJyZWFrIHVw
IiBjb250ZW50LiBBbnkgd29yZCBicmVhawotICAgICAgICAgICAgLy8gY2hhcmFjdGVyIHdpbGwg
ZG8uCi0gICAgICAgICAgICBlbWl0Q2hhcmFjdGVyKCcgJywgbV9ub2RlLCAwLCAwKTsKLSAgICAg
ICAgICAgIGJyZWFrOworICAgIGlmIChtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpicigp
KSkKKyAgICAgICAgZW1pdE5ld2xpbmVGb3JCUk9yVGV4dCgpOworICAgIGVsc2UgaWYgKG1fbm9k
ZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRkICgpKSB8fCBtX25vZGUtPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjp0aCgpKSB8fAorICAgICAgICAgICAgIG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OmJsb2NrcXVvdGUoKSkgfHwgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZGQoKSkg
fHwKKyAgICAgICAgICAgICBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpkaXYoKSkgfHwK
KyAgICAgICAgICAgICBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpkbCgpKSB8fCBtX25v
ZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpkdCgpKSB8fCAKKyAgICAgICAgICAgICBtX25vZGUt
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoMSgpKSB8fCBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjpoMigpKSB8fAorICAgICAgICAgICAgIG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
OmgzKCkpIHx8IG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omg0KCkpIHx8CisgICAgICAg
ICAgICAgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDUoKSkgfHwgbV9ub2RlLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6aDYoKSkgfHwKKyAgICAgICAgICAgICBtX25vZGUtPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjpocigpKSB8fCBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpsaSgp
KSB8fAorICAgICAgICAgICAgIG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9sKCkpIHx8
IG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnAoKSkgfHwKKyAgICAgICAgICAgICBtX25v
ZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpwcmUoKSkgfHwgbV9ub2RlLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6dHIoKSkgfHwKKyAgICAgICAgICAgICBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjp1bCgpKSkgeworICAgICAgICAvLyBFbWl0IGEgc3BhY2UgdG8gImJyZWFrIHVwIiBjb250
ZW50LiBBbnkgd29yZCBicmVhaworICAgICAgICAvLyBjaGFyYWN0ZXIgd2lsbCBkby4KKyAgICAg
ICAgZW1pdENoYXJhY3RlcignICcsIG1fbm9kZSwgMCwgMCk7CiAgICAgfQogCiAgICAgcmV0dXJu
IHRydWU7CkluZGV4OiBraHRtbC9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VkaXRpbmcvdmlzaWJsZV91bml0cy5j
cHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzQKZGlmZiAtdSAtcCAtcjEuMzQga2h0bWwvZWRp
dGluZy92aXNpYmxlX3VuaXRzLmNwcAotLS0ga2h0bWwvZWRpdGluZy92aXNpYmxlX3VuaXRzLmNw
cAkyNiBNYXkgMjAwNSAyMDozMDoxMiAtMDAwMAkxLjM0CisrKyBraHRtbC9lZGl0aW5nL3Zpc2li
bGVfdW5pdHMuY3BwCTggSnVsIDIwMDUgMDU6NTA6MDQgLTAwMDAKQEAgLTI3LDcgKzI3LDcgQEAK
IAogI2luY2x1ZGUgPHFzdHJpbmcuaD4KIAotI2luY2x1ZGUgImh0bWx0YWdzLmgiCisjaW5jbHVk
ZSAiaHRtbG5hbWVzLmgiCiAjaW5jbHVkZSAibWlzYy9oZWxwZXIuaCIKICNpbmNsdWRlICJyZW5k
ZXJpbmcvcmVuZGVyX3RleHQuaCIKICNpbmNsdWRlICJyZW5kZXJpbmcvcmVuZGVyX2Jsb2NrLmgi
CkBAIC00MSw2ICs0MSw3IEBAIHVzaW5nIERPTTo6RWxlbWVudEltcGw7CiB1c2luZyBET006Ok5v
ZGVJbXBsOwogdXNpbmcgRE9NOjpQb3NpdGlvbjsKIHVzaW5nIERPTTo6UmFuZ2VJbXBsOwordXNp
bmcgRE9NOjpIVE1MTmFtZXM7CiAKIG5hbWVzcGFjZSBraHRtbCB7CiAKQEAgLTMzMiw3ICszMzMs
NyBAQCBWaXNpYmxlUG9zaXRpb24gZW5kT2ZMaW5lKGNvbnN0IFZpc2libGVQCiAgICAgICAgIHJl
dHVybiBWaXNpYmxlUG9zaXRpb24oKTsKIAogICAgIGxvbmcgZW5kT2Zmc2V0ID0gMTsKLSAgICBp
ZiAoZW5kTm9kZS0+aWQoKSA9PSBJRF9CUikgeworICAgIGlmIChlbmROb2RlLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6YnIoKSkpIHsKICAgICAgICAgZW5kT2Zmc2V0ID0gMDsKICAgICB9IGVsc2Ug
aWYgKGVuZEJveC0+aXNJbmxpbmVUZXh0Qm94KCkpIHsKICAgICAgICAgSW5saW5lVGV4dEJveCAq
ZW5kVGV4dEJveCA9IHN0YXRpY19jYXN0PElubGluZVRleHRCb3ggKj4oZW5kQm94KTsKSW5kZXg6
IGtodG1sL2h0bWwvZHRkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiBraHRtbC9odG1sL2R0ZC5j
cHAKZGlmZiAtTiBraHRtbC9odG1sL2R0ZC5jcHAKLS0tIGtodG1sL2h0bWwvZHRkLmNwcAkxMiBB
cHIgMjAwNSAyMjo0OTo0MSAtMDAwMAkxLjM4CisrKyAvZGV2L251bGwJMSBKYW4gMTk3MCAwMDow
MDowMCAtMDAwMApAQCAtMSw5ODkgKzAsMCBAQAotLyoqCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBv
ZiB0aGUgRE9NIGltcGxlbWVudGF0aW9uIGZvciBLREUuCi0gKgotICogKEMpIDE5OTkgTGFycyBL
bm9sbCAoa25vbGxAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwMyBBcHBsZSBDb21wdXRl
ciwgSW5jLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBs
ZSBQbGFjZSAtIFN1aXRlIDMzMCwKLSAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgotICoK
LSAqLwotCi0jaW5jbHVkZSAiaHRtbC9kdGQuaCIKLSNpbmNsdWRlICJtaXNjL2h0bWxoYXNoZXMu
aCIKLQotdXNpbmcgbmFtZXNwYWNlIERPTTsKLQotI2luY2x1ZGUgPGtkZWJ1Zy5oPgotCi0vLyBw
cmlvcml0eSBvZiB0YWdzLiBDbG9zaW5nIHRhZ3Mgb2YgaGlnaGVyIHByaW9yaXR5IGNsb3NlIHRh
Z3Mgb2YgbG93ZXIKLS8vIHByaW9yaXR5LgotLy8gVXBkYXRlIHRoaXMgbGlzdCwgd2hlbmV2ZXIg
eW91IGNoYW5nZSBodG1sdGFncy4qCi0vLwotLy8gMCBlbGVtZW50cyB3aXRoIGZvcmJpZGRlbiBj
bG9zZSB0YWcgYW5kIHRleHQuIFRoZXkgZG9uJ3QgZ2V0IHB1c2hlZAotLy8gICB0byB0aGUgc3Rh
Y2suCi0vLyAxIGlubGluZSBlbGVtZW50cwotLy8gMiBmb3JtIGVsZW1lbnRzCi0vLyAzIHJlZ3Vs
YXIgYmxvY2sgbGV2ZWwgZWxlbWVudHMKLS8vIDQgbGlzdHMgKE9MIFVMIERJUiBNRU5VKQotLy8g
NSBURCBUSCBTRUxFQ1QKLS8vIDYgVFIKLS8vIDcgdGJvZHkgdGhlYWQgdGZvb3QgY2FwdGlvbiAg
b2JqZWN0Ci0vLyA4IHRhYmxlCi0vLyA5IGJvZHkgZnJhbWVzZXQKLS8vIDEwIGh0bWwKLWNvbnN0
IHVuc2lnbmVkIHNob3J0IERPTTo6dGFnUHJpb3JpdHlBcnJheVtdID0gewotICAgIDAsIC8vIDAK
LSAgICAxLCAvLyBJRF9BID09IDEKLSAgICAxLCAvLyBJRF9BQkJSCi0gICAgMSwgLy8gSURfQUNS
T05ZTQotICAgIDMsIC8vIElEX0FERFJFU1MKLSAgICAxLCAvLyBJRF9BUFBMRVQKLSAgICAwLCAv
LyBJRF9BUkVBCi0gICAgMSwgLy8gSURfQgotICAgIDAsIC8vIElEX0JBU0UKLSAgICAwLCAvLyBJ
RF9CQVNFRk9OVAotICAgIDEsIC8vIElEX0JETwotICAgIDEsIC8vIElEX0JJRwotICAgIDUsIC8v
IElEX0JMT0NLUVVPVEUKLSAgIDEwLCAvLyBJRF9CT0RZCi0gICAgMCwgLy8gSURfQlIKLSAgICAx
LCAvLyBJRF9CVVRUT04KLSAgICAwLCAvLyBJRF9DQU5WQVMKLSAgICA1LCAvLyBJRF9DQVBUSU9O
Ci0gICAgNSwgLy8gSURfQ0VOVEVSCi0gICAgMSwgLy8gSURfQ0lURQotICAgIDEsIC8vIElEX0NP
REUKLSAgICAwLCAvLyBJRF9DT0wKLSAgICAxLCAvLyBJRF9DT0xHUk9VUAotICAgIDMsIC8vIElE
X0RECi0gICAgMSwgLy8gSURfREVMCi0gICAgMSwgLy8gSURfREZOCi0gICAgNSwgLy8gSURfRElS
Ci0gICAgNSwgLy8gSURfRElWCi0gICAgNSwgLy8gSURfREwKLSAgICAzLCAvLyBJRF9EVAotICAg
IDEsIC8vIElEX0VNCi0gICAgMCwgLy8gSURfRU1CRUQKLSAgICAzLCAvLyBJRF9GSUVMRFNFVAot
ICAgIDEsIC8vIElEX0ZPTlQKLSAgICAzLCAvLyBJRF9GT1JNCi0gICAgMCwgLy8gSURfRlJBTUUK
LSAgIDEwLC8vIElEX0ZSQU1FU0VUCi0gICAgNSwgLy8gSURfSDEKLSAgICA1LCAvLyBJRF9IMgot
ICAgIDUsIC8vIElEX0gzCi0gICAgNSwgLy8gSURfSDQKLSAgICA1LCAvLyBJRF9INQotICAgIDUs
IC8vIElEX0g2Ci0gICAxMCwvLyBJRF9IRUFECi0gICAgMCwgLy8gSURfSFIKLSAgIDExLC8vIElE
X0hUTUwKLSAgICAxLCAvLyBJRF9JCi0gICAgMSwgLy8gSURfSUZSQU1FCi0gICAgMCwgLy8gSURf
SU1HCi0gICAgMCwgLy8gSURfSU5QVVQKLSAgICAxLCAvLyBJRF9JTlMKLSAgICAwLCAvLyBJRF9J
U0lOREVYCi0gICAgMSwgLy8gSURfS0JECi0gICAgMCwgLy8gSURfS0VZR0VOCi0gICAgNSwgLy8g
SURfTEFCRUwKLSAgICAxLCAvLyBJRF9MQVlFUgotICAgIDEsIC8vIElEX0xFR0VORAotICAgIDMs
IC8vIElEX0xJCi0gICAgMCwgLy8gSURfTElOSwotICAgIDEsIC8vIElEX01BUAotICAgIDMsIC8v
IElEX01BUlFVRUUKLSAgICA1LCAvLyBJRF9NRU5VCi0gICAgMCwgLy8gSURfTUVUQQotICAgIDUs
IC8vIElEX05PQlIKLSAgIDEwLC8vIElEX05PRU1CRUQKLSAgIDEwLC8vIElEX05PRlJBTUVTCi0g
ICAgMywgLy8gSURfTk9TQ1JJUFQKLSAgICAxLCAvLyBJRF9OT0xBWUVSCi0gICAgNywgLy8gSURf
T0JKRUNUCi0gICAgNSwgLy8gSURfT0wKLSAgICAxLCAvLyBJRF9PUFRHUk9VUAotICAgIDIsIC8v
IElEX09QVElPTgotICAgIDMsIC8vIElEX1AKLSAgICAwLCAvLyBJRF9QQVJBTQotICAgIDUsIC8v
IElEX1BMQUlOVEVYVAotICAgIDUsIC8vIElEX1BSRQotICAgIDEsIC8vIElEX1EKLSAgICAxLCAv
LyBJRF9TCi0gICAgMSwgLy8gSURfU0FNUAotICAgIDEsIC8vIElEX1NDUklQVAotICAgIDYsIC8v
IElEX1NFTEVDVAotICAgIDEsIC8vIElEX1NNQUxMCi0gICAgMSwgLy8gSURfU1BBTgotICAgIDEs
IC8vIElEX1NUUklLRQotICAgIDEsIC8vIElEX1NUUk9ORwotICAgIDEsIC8vIElEX1NUWUxFCi0g
ICAgMSwgLy8gSURfU1VCCi0gICAgMSwgLy8gSURfU1VQCi0gICAgOSwvLyBJRF9UQUJMRQotICAg
IDgsIC8vIElEX1RCT0RZCi0gICAgNiwgLy8gSURfVEQKLSAgICAxLCAvLyBJRF9URVhUQVJFQQot
ICAgIDgsIC8vIElEX1RGT09UCi0gICAgNiwgLy8gSURfVEgKLSAgICA4LCAvLyBJRF9USEVBRAot
ICAgIDEsIC8vIElEX1RJVExFCi0gICAgNywgLy8gSURfVFIKLSAgICAxLCAvLyBJRF9UVAotICAg
IDEsIC8vIElEX1UKLSAgICA1LCAvLyBJRF9VTAotICAgIDEsIC8vIElEX1ZBUgotICAgIDEsIC8v
IElEX1dCUgotICAgIDUsIC8vIElEX1hNUAotICAgIDAsIC8vIElEX1RFWFQKLX07Ci0KLWNvbnN0
IHRhZ1N0YXR1cyBET006OmVuZFRhZ0FycmF5W10gPSB7Ci0gICAgUkVRVUlSRUQsICAvLyAwCi0g
ICAgUkVRVUlSRUQsICAvLyBJRF9BID09IDEKLSAgICBSRVFVSVJFRCwgIC8vIElEX0FCQlIKLSAg
ICBSRVFVSVJFRCwgIC8vIElEX0FDUk9OWU0KLSAgICBSRVFVSVJFRCwgIC8vIElEX0FERFJFU1MK
LSAgICBSRVFVSVJFRCwgIC8vIElEX0FQUExFVAotICAgIEZPUkJJRERFTiwgLy8gSURfQVJFQQot
ICAgIFJFUVVJUkVELCAgLy8gSURfQgotICAgIEZPUkJJRERFTiwgLy8gSURfQkFTRQotICAgIEZP
UkJJRERFTiwgLy8gSURfQkFTRUZPTlQKLSAgICBSRVFVSVJFRCwgIC8vIElEX0JETwotICAgIFJF
UVVJUkVELCAgLy8gSURfQklHCi0gICAgUkVRVUlSRUQsICAvLyBJRF9CTE9DS1FVT1RFCi0gICAg
UkVRVUlSRUQsICAvLyBJRF9CT0RZCi0gICAgRk9SQklEREVOLCAvLyBJRF9CUgotICAgIFJFUVVJ
UkVELCAgLy8gSURfQlVUVE9OCi0gICAgRk9SQklEREVOLCAvLyBJRF9DQU5WQVMKLSAgICBSRVFV
SVJFRCwgIC8vIElEX0NBUFRJT04KLSAgICBSRVFVSVJFRCwgIC8vIElEX0NFTlRFUgotICAgIFJF
UVVJUkVELCAgLy8gSURfQ0lURQotICAgIFJFUVVJUkVELCAgLy8gSURfQ09ERQotICAgIEZPUkJJ
RERFTiwgLy8gSURfQ09MCi0gICAgT1BUSU9OQUwsICAvLyBJRF9DT0xHUk9VUAotICAgIE9QVElP
TkFMLCAgLy8gSURfREQKLSAgICBSRVFVSVJFRCwgIC8vIElEX0RFTAotICAgIFJFUVVJUkVELCAg
Ly8gSURfREZOCi0gICAgUkVRVUlSRUQsICAvLyBJRF9ESVIKLSAgICBSRVFVSVJFRCwgIC8vIElE
X0RJVgotICAgIFJFUVVJUkVELCAgLy8gSURfREwKLSAgICBPUFRJT05BTCwgIC8vIElEX0RUCi0g
ICAgUkVRVUlSRUQsICAvLyBJRF9FTQotICAgIFJFUVVJUkVELCAgLy8gSURfRU1CRUQKLSAgICBS
RVFVSVJFRCwgIC8vIElEX0ZJRUxEU0VUCi0gICAgUkVRVUlSRUQsICAvLyBJRF9GT05UCi0gICAg
UkVRVUlSRUQsICAvLyBJRF9GT1JNCi0gICAgRk9SQklEREVOLCAvLyBJRF9GUkFNRQotICAgIFJF
UVVJUkVELCAgLy8gSURfRlJBTUVTRVQKLSAgICBSRVFVSVJFRCwgIC8vIElEX0gxCi0gICAgUkVR
VUlSRUQsICAvLyBJRF9IMgotICAgIFJFUVVJUkVELCAgLy8gSURfSDMKLSAgICBSRVFVSVJFRCwg
IC8vIElEX0g0Ci0gICAgUkVRVUlSRUQsICAvLyBJRF9INQotICAgIFJFUVVJUkVELCAgLy8gSURf
SDYKLSAgICBPUFRJT05BTCwgIC8vIElEX0hFQUQKLSAgICBGT1JCSURERU4sIC8vIElEX0hSCi0g
ICAgUkVRVUlSRUQsICAvLyBJRF9IVE1MCi0gICAgUkVRVUlSRUQsICAvLyBJRF9JCi0gICAgUkVR
VUlSRUQsICAvLyBJRF9JRlJBTUUKLSAgICBGT1JCSURERU4sIC8vIElEX0lNRwotICAgIEZPUkJJ
RERFTiwgLy8gSURfSU5QVVQKLSAgICBSRVFVSVJFRCwgIC8vIElEX0lOUwotICAgIEZPUkJJRERF
TiwgLy8gSURfSVNJTkRFWAotICAgIFJFUVVJUkVELCAgLy8gSURfS0JECi0gICAgUkVRVUlSRUQs
ICAvLyBJRF9LRVlHRU4KLSAgICBSRVFVSVJFRCwgIC8vIElEX0xBQkVMCi0gICAgUkVRVUlSRUQs
ICAvLyBJRF9MQVlFUgotICAgIFJFUVVJUkVELCAgLy8gSURfTEVHRU5ECi0gICAgT1BUSU9OQUws
ICAvLyBJRF9MSQotICAgIEZPUkJJRERFTiwgLy8gSURfTElOSwotICAgIFJFUVVJUkVELCAgLy8g
SURfTUFQCi0gICAgUkVRVUlSRUQsICAvLyBJRF9NQVJRVUVFCi0gICAgUkVRVUlSRUQsICAvLyBJ
RF9NRU5VCi0gICAgRk9SQklEREVOLCAvLyBJRF9NRVRBCi0gICAgUkVRVUlSRUQsICAvLyBJRF9O
T0JSCi0gICAgUkVRVUlSRUQsICAvLyBJRF9OT0VNQkVECi0gICAgUkVRVUlSRUQsICAvLyBJRF9O
T0ZSQU1FUwotICAgIFJFUVVJUkVELCAgLy8gSURfTk9TQ1JJUFQKLSAgICBSRVFVSVJFRCwgIC8v
IElEX05PTEFZRVIKLSAgICBSRVFVSVJFRCwgIC8vIElEX09CSkVDVAotICAgIFJFUVVJUkVELCAg
Ly8gSURfT0wKLSAgICBSRVFVSVJFRCwgIC8vIElEX09QVEdST1VQCi0gICAgT1BUSU9OQUwsICAv
LyBJRF9PUFRJT04KLSAgICBPUFRJT05BTCwgIC8vIElEX1AKLSAgICBGT1JCSURERU4sIC8vIElE
X1BBUkFNCi0gICAgUkVRVUlSRUQsICAvLyBJRF9QTEFJTlRFWFQKLSAgICBSRVFVSVJFRCwgIC8v
IElEX1BSRQotICAgIFJFUVVJUkVELCAgLy8gSURfUQotICAgIFJFUVVJUkVELCAgLy8gSURfUwot
ICAgIFJFUVVJUkVELCAgLy8gSURfU0FNUAotICAgIFJFUVVJUkVELCAgLy8gSURfU0NSSVBUCi0g
ICAgUkVRVUlSRUQsICAvLyBJRF9TRUxFQ1QKLSAgICBSRVFVSVJFRCwgIC8vIElEX1NNQUxMCi0g
ICAgUkVRVUlSRUQsICAvLyBJRF9TUEFOCi0gICAgUkVRVUlSRUQsICAvLyBJRF9TVFJJS0UKLSAg
ICBSRVFVSVJFRCwgIC8vIElEX1NUUk9ORwotICAgIFJFUVVJUkVELCAgLy8gSURfU1RZTEUKLSAg
ICBSRVFVSVJFRCwgIC8vIElEX1NVQgotICAgIFJFUVVJUkVELCAgLy8gSURfU1VQCi0gICAgUkVR
VUlSRUQsICAvLyBJRF9UQUJMRQotICAgIE9QVElPTkFMLCAgLy8gSURfVEJPRFkKLSAgICBPUFRJ
T05BTCwgIC8vIElEX1RECi0gICAgUkVRVUlSRUQsICAvLyBJRF9URVhUQVJFQQotICAgIE9QVElP
TkFMLCAgLy8gSURfVEZPT1QKLSAgICBPUFRJT05BTCwgIC8vIElEX1RICi0gICAgT1BUSU9OQUws
ICAvLyBJRF9USEVBRAotICAgIFJFUVVJUkVELCAgLy8gSURfVElUTEUKLSAgICBPUFRJT05BTCwg
IC8vIElEX1RSCi0gICAgUkVRVUlSRUQsICAvLyBJRF9UVAotICAgIFJFUVVJUkVELCAgLy8gSURf
VQotICAgIFJFUVVJUkVELCAgLy8gSURfVUwKLSAgICBSRVFVSVJFRCwgIC8vIElEX1ZBUgotICAg
IFJFUVVJUkVELCAgLy8gSURfV0JSCi0gICAgUkVRVUlSRUQsICAvLyBJRF9YTVAKLSAgICBSRVFV
SVJFRCAgIC8vIElEX1RFWFQKLX07Ci0KLQotc3RhdGljIGNvbnN0IHVzaG9ydCB0YWdfbGlzdF8w
W10gPSB7Ci0gICAgSURfVEVYVCwKLSAgICBJRF9UVCwKLSAgICBJRF9JLAotICAgIElEX0IsCi0g
ICAgSURfVSwKLSAgICBJRF9TLAotICAgIElEX1NUUklLRSwKLSAgICBJRF9CSUcsCi0gICAgSURf
U01BTEwsCi0gICAgSURfRU0sCi0gICAgSURfU1RST05HLAotICAgIElEX0RGTiwKLSAgICBJRF9D
T0RFLAotICAgIElEX1NBTVAsCi0gICAgSURfS0JELAotICAgIElEX1ZBUiwKLSAgICBJRF9DSVRF
LAotICAgIElEX0FCQlIsCi0gICAgSURfQUNST05ZTSwKLSAgICBJRF9BLAotICAgIElEX0NBTlZB
UywKLSAgICBJRF9JTUcsCi0gICAgSURfQVBQTEVULAotICAgIElEX09CSkVDVCwKLSAgICBJRF9F
TUJFRCwKLSAgICBJRF9GT05ULAotICAgIElEX0JBU0VGT05ULAotICAgIElEX0JSLAotICAgIElE
X1NDUklQVCwKLSAgICBJRF9NQVAsCi0gICAgSURfUSwKLSAgICBJRF9TVUIsCi0gICAgSURfU1VQ
LAotICAgIElEX1NQQU4sCi0gICAgSURfQkRPLAotICAgIElEX0lGUkFNRSwKLSAgICBJRF9JTlBV
VCwKLSAgICBJRF9TRUxFQ1QsCi0gICAgSURfVEVYVEFSRUEsCi0gICAgSURfTEFCRUwsCi0gICAg
SURfQlVUVE9OLAotICAgIElEX0lOUywKLSAgICBJRF9ERUwsCi0gICAgSURfQ09NTUVOVCwKLSAg
ICBJRF9OT0JSLAotICAgIElEX1dCUiwKLSAgICAwCi19OwotCi1zdGF0aWMgY29uc3QgdXNob3J0
IHRhZ19saXN0XzFbXSA9IHsKLSAgICBJRF9URVhULAotICAgIElEX1AsCi0gICAgSURfSDEsCi0g
ICAgSURfSDIsCi0gICAgSURfSDMsCi0gICAgSURfSDQsCi0gICAgSURfSDUsCi0gICAgSURfSDYs
Ci0gICAgSURfVUwsCi0gICAgSURfT0wsCi0gICAgSURfRElSLAotICAgIElEX01FTlUsCi0gICAg
SURfUFJFLAotICAgIElEX1BMQUlOVEVYVCwKLSAgICBJRF9ETCwKLSAgICBJRF9ESVYsCi0gICAg
SURfTEFZRVIsCi0gICAgSURfQ0VOVEVSLAotICAgIElEX05PU0NSSVBULAotICAgIElEX05PRlJB
TUVTLAotICAgIElEX0JMT0NLUVVPVEUsCi0gICAgSURfRk9STSwKLSAgICBJRF9JU0lOREVYLAot
ICAgIElEX0hSLAotICAgIElEX1RBQkxFLAotICAgIElEX0ZJRUxEU0VULAotICAgIElEX0FERFJF
U1MsCi0gICAgSURfVFQsCi0gICAgSURfSSwKLSAgICBJRF9CLAotICAgIElEX1UsCi0gICAgSURf
UywKLSAgICBJRF9TVFJJS0UsCi0gICAgSURfQklHLAotICAgIElEX1NNQUxMLAotICAgIElEX0VN
LAotICAgIElEX1NUUk9ORywKLSAgICBJRF9ERk4sCi0gICAgSURfQ09ERSwKLSAgICBJRF9TQU1Q
LAotICAgIElEX0tCRCwKLSAgICBJRF9WQVIsCi0gICAgSURfQ0lURSwKLSAgICBJRF9BQkJSLAot
ICAgIElEX0FDUk9OWU0sCi0gICAgSURfQSwKLSAgICBJRF9DQU5WQVMsCi0gICAgSURfSU1HLAot
ICAgIElEX0FQUExFVCwKLSAgICBJRF9PQkpFQ1QsCi0gICAgSURfRU1CRUQsCi0gICAgSURfRk9O
VCwKLSAgICBJRF9CQVNFRk9OVCwKLSAgICBJRF9CUiwKLSAgICBJRF9TQ1JJUFQsCi0gICAgSURf
TUFQLAotICAgIElEX1EsCi0gICAgSURfU1VCLAotICAgIElEX1NVUCwKLSAgICBJRF9TUEFOLAot
ICAgIElEX0JETywKLSAgICBJRF9JRlJBTUUsCi0gICAgSURfSU5QVVQsCi0gICAgSURfS0VZR0VO
LAotICAgIElEX1NFTEVDVCwKLSAgICBJRF9URVhUQVJFQSwKLSAgICBJRF9MQUJFTCwKLSAgICBJ
RF9CVVRUT04sCi0gICAgSURfQ09NTUVOVCwKLSAgICBJRF9MSSwKLSAgICBJRF9EVCwKLSAgICBJ
RF9ERCwKLSAgICBJRF9YTVAsCi0gICAgSURfSU5TLAotICAgIElEX0RFTCwKLSAgICBJRF9OT0JS
LAotICAgIElEX1dCUiwKLSAgICBJRF9NQVJRVUVFLAotICAgIDAKLX07Ci0KLXN0YXRpYyBjb25z
dCB1c2hvcnQgdGFnX2xpc3RfMltdID0gewotICAgIElEX0NPTU1FTlQsCi0gICAgMAotfTsKLQot
c3RhdGljIGNvbnN0IHVzaG9ydCB0YWdfbGlzdF8zW10gPSB7Ci0gICAgSURfVEVYVCwKLSAgICBJ
RF9QLAotICAgIElEX0gxLAotICAgIElEX0gyLAotICAgIElEX0gzLAotICAgIElEX0g0LAotICAg
IElEX0g1LAotICAgIElEX0g2LAotICAgIElEX1VMLAotICAgIElEX09MLAotICAgIElEX0RJUiwK
LSAgICBJRF9NRU5VLAotICAgIElEX1BSRSwKLSAgICBJRF9QTEFJTlRFWFQsCi0gICAgSURfREws
Ci0gICAgSURfRElWLAotICAgIElEX0xBWUVSLAotICAgIElEX0NFTlRFUiwKLSAgICBJRF9OT1ND
UklQVCwKLSAgICBJRF9OT0ZSQU1FUywKLSAgICBJRF9CTE9DS1FVT1RFLAotICAgIElEX0ZPUk0s
Ci0gICAgSURfSVNJTkRFWCwKLSAgICBJRF9IUiwKLSAgICBJRF9UQUJMRSwKLSAgICBJRF9GSUVM
RFNFVCwKLSAgICBJRF9BRERSRVNTLAotICAgIElEX0NPTU1FTlQsCi0gICAgSURfTEksCi0gICAg
SURfWE1QLAotICAgIElEX01BUlFVRUUsCi0gICAgMAotfTsKLQotc3RhdGljIGNvbnN0IHVzaG9y
dCB0YWdfbGlzdF80W10gPSB7Ci0gICAgSURfVEVYVCwKLSAgICBJRF9QQVJBTSwKLSAgICBJRF9Q
LAotICAgIElEX0gxLAotICAgIElEX0gyLAotICAgIElEX0gzLAotICAgIElEX0g0LAotICAgIElE
X0g1LAotICAgIElEX0g2LAotICAgIElEX1VMLAotICAgIElEX09MLAotICAgIElEX0RJUiwKLSAg
ICBJRF9NRU5VLAotICAgIElEX1BSRSwKLSAgICBJRF9QTEFJTlRFWFQsCi0gICAgSURfREwsCi0g
ICAgSURfRElWLAotICAgIElEX0xBWUVSLAotICAgIElEX0NFTlRFUiwKLSAgICBJRF9OT1NDUklQ
VCwKLSAgICBJRF9OT0ZSQU1FUywKLSAgICBJRF9CTE9DS1FVT1RFLAotICAgIElEX0ZPUk0sCi0g
ICAgSURfSVNJTkRFWCwKLSAgICBJRF9IUiwKLSAgICBJRF9UQUJMRSwKLSAgICBJRF9GSUVMRFNF
VCwKLSAgICBJRF9BRERSRVNTLAotICAgIElEX1RFWFQsCi0gICAgSURfVFQsCi0gICAgSURfSSwK
LSAgICBJRF9CLAotICAgIElEX1UsCi0gICAgSURfUywKLSAgICBJRF9TVFJJS0UsCi0gICAgSURf
QklHLAotICAgIElEX1NNQUxMLAotICAgIElEX0VNLAotICAgIElEX1NUUk9ORywKLSAgICBJRF9E
Rk4sCi0gICAgSURfQ09ERSwKLSAgICBJRF9TQU1QLAotICAgIElEX0tCRCwKLSAgICBJRF9WQVIs
Ci0gICAgSURfQ0lURSwKLSAgICBJRF9BQkJSLAotICAgIElEX0FDUk9OWU0sCi0gICAgSURfQSwK
LSAgICBJRF9DQU5WQVMsCi0gICAgSURfSU1HLAotICAgIElEX0FQUExFVCwKLSAgICBJRF9PQkpF
Q1QsCi0gICAgSURfRU1CRUQsCi0gICAgSURfRk9OVCwKLSAgICBJRF9CQVNFRk9OVCwKLSAgICBJ
RF9CUiwKLSAgICBJRF9TQ1JJUFQsCi0gICAgSURfTUFQLAotICAgIElEX1EsCi0gICAgSURfU1VC
LAotICAgIElEX1NVUCwKLSAgICBJRF9TUEFOLAotICAgIElEX0JETywKLSAgICBJRF9JRlJBTUUs
Ci0gICAgSURfSU5QVVQsCi0gICAgSURfU0VMRUNULAotICAgIElEX1RFWFRBUkVBLAotICAgIElE
X0xBQkVMLAotICAgIElEX0JVVFRPTiwKLSAgICBJRF9DT01NRU5ULAotICAgIElEX0xJLAotICAg
IElEX1hNUCwKLSAgICBJRF9NQVJRVUVFLAotICAgIDAKLX07Ci0KLXN0YXRpYyBjb25zdCB1c2hv
cnQgdGFnX2xpc3RfN1tdID0gewotICAgIElEX1RFWFQsCi0gICAgSURfT1BUR1JPVVAsCi0gICAg
SURfT1BUSU9OLAotICAgIElEX0NPTU1FTlQsCi0gICAgSURfU0NSSVBULAotICAgIDAKLX07Ci0K
LXN0YXRpYyBjb25zdCB1c2hvcnQgdGFnX2xpc3RfOVtdID0gewotICAgIElEX1RILAotICAgIElE
X1RELAotICAgIElEX0NPTU1FTlQsCi0gICAgMAotfTsKLQotc3RhdGljIGNvbnN0IHVzaG9ydCB0
YWdfbGlzdF8xMFtdID0gewotICAgIElEX0ZSQU1FU0VULAotICAgIElEX0ZSQU1FLAotICAgIElE
X0NPTU1FTlQsCi0gICAgMAotfTsKLQotc3RhdGljIGNvbnN0IHVzaG9ydCB0YWdfbGlzdF8xMVtd
ID0gewotICAgIElEX1RFWFQsCi0gICAgSURfU0NSSVBULAotICAgIElEX1NUWUxFLAotICAgIElE
X01FVEEsCi0gICAgSURfTElOSywKLSAgICBJRF9DT01NRU5ULAotICAgIDAKLX07Ci0KLWJvb2wg
Y2hlY2tfYXJyYXkodXNob3J0IGNoaWxkLCBjb25zdCB1c2hvcnQgKnRhZ0xpc3QpCi17Ci0gICAg
aW50IGkgPSAwOwotICAgIHdoaWxlKHRhZ0xpc3RbaV0gIT0gMCkKLSAgICB7Ci0gICAgICAgIGlm
KHRhZ0xpc3RbaV0gPT0gY2hpbGQpIHJldHVybiB0cnVlOwotICAgIGkrKzsKLSAgICB9Ci0gICAg
cmV0dXJuIGZhbHNlOwotfQotCi0KLWJvb2wgRE9NOjpjaGVja0NoaWxkKHVzaG9ydCB0YWdJRCwg
dXNob3J0IGNoaWxkSUQsIGJvb2wgc3RyaWN0KQotewotICAgIC8va2REZWJ1ZyggNjAzMCApIDw8
ICJjaGVja0NoaWxkOiAiIDw8IHRhZ0lEIDw8ICIvIiA8PCBjaGlsZElEIDw8IGVuZGw7Ci0KLSAg
ICAvLyAjIyMgYWxsb3cgY29tbWVudHMgaW5zaWRlIEFOWSBub2RlIHRoYXQgY2FuIGNvbnRhaW4g
Y2hpbGRyZW4KLQotICAgIC8vIFRyZWF0IGN1c3RvbSBlbGVtZW50cyB0aGUgc2FtZSBhcyA8c3Bh
bj4uCi0gICAgaWYgKHRhZ0lEID4gSURfTEFTVF9UQUcpCi0gICAgICAgIHRhZ0lEID0gSURfU1BB
TjsKLSAgICBpZiAoY2hpbGRJRCA+IElEX0xBU1RfVEFHKQotICAgICAgICBjaGlsZElEID0gSURf
U1BBTjsKLQotICAgIHN3aXRjaCh0YWdJRCkKLSAgICB7Ci0gICAgY2FzZSBJRF9UVDoKLSAgICBj
YXNlIElEX0k6Ci0gICAgY2FzZSBJRF9COgotICAgIGNhc2UgSURfVToKLSAgICBjYXNlIElEX1M6
Ci0gICAgY2FzZSBJRF9TVFJJS0U6Ci0gICAgY2FzZSBJRF9CSUc6Ci0gICAgY2FzZSBJRF9TTUFM
TDoKLSAgICBjYXNlIElEX0VNOgotICAgIGNhc2UgSURfU1RST05HOgotICAgIGNhc2UgSURfREZO
OgotICAgIGNhc2UgSURfQ09ERToKLSAgICBjYXNlIElEX1NBTVA6Ci0gICAgY2FzZSBJRF9LQkQ6
Ci0gICAgY2FzZSBJRF9WQVI6Ci0gICAgY2FzZSBJRF9DSVRFOgotICAgIGNhc2UgSURfQUJCUjoK
LSAgICBjYXNlIElEX0FDUk9OWU06Ci0gICAgY2FzZSBJRF9TVUI6Ci0gICAgY2FzZSBJRF9TVVA6
Ci0gICAgY2FzZSBJRF9CRE86Ci0gICAgY2FzZSBJRF9ROgotICAgIGNhc2UgSURfTEVHRU5EOgot
ICAgIGNhc2UgSURfRk9OVDoKLSAgICBjYXNlIElEX0E6Ci0gICAgY2FzZSBJRF9OT0JSOgotICAg
IGNhc2UgSURfV0JSOgotICAgICAgICByZXR1cm4gY2hlY2tfYXJyYXkoY2hpbGRJRCwgdGFnX2xp
c3RfMSk7Ci0gICAgY2FzZSBJRF9QOgotICAgICAgICAvLyBQOiAoIF8wIHwgVEFCTEUgKSAqCi0g
ICAgICAgIHJldHVybiBjaGVja19hcnJheShjaGlsZElELCB0YWdfbGlzdF8wKSB8fCAoIXN0cmlj
dCAmJiBjaGlsZElEID09IElEX1RBQkxFKTsKLSAgICBjYXNlIElEX0gxOgotICAgIGNhc2UgSURf
SDI6Ci0gICAgY2FzZSBJRF9IMzoKLSAgICBjYXNlIElEX0g0OgotICAgIGNhc2UgSURfSDU6Ci0g
ICAgY2FzZSBJRF9INjoKLSAgICAgICAgcmV0dXJuIGNoZWNrX2FycmF5KGNoaWxkSUQsIHRhZ19s
aXN0XzEpICYmIChjaGlsZElEIDwgSURfSDEgfHwgY2hpbGRJRCA+IElEX0g2KTsKLSAgICBjYXNl
IElEX0JBU0VGT05UOgotICAgIGNhc2UgSURfQlI6Ci0gICAgY2FzZSBJRF9BUkVBOgotICAgIGNh
c2UgSURfTElOSzoKLSAgICBjYXNlIElEX0NBTlZBUzoKLSAgICBjYXNlIElEX0lNRzoKLSAgICBj
YXNlIElEX1BBUkFNOgotICAgIGNhc2UgSURfSFI6Ci0gICAgY2FzZSBJRF9JTlBVVDoKLSAgICBj
YXNlIElEX0NPTDoKLSAgICBjYXNlIElEX0ZSQU1FOgotICAgIGNhc2UgSURfSVNJTkRFWDoKLSAg
ICBjYXNlIElEX0JBU0U6Ci0gICAgY2FzZSBJRF9NRVRBOgotICAgIGNhc2UgSURfQ09NTUVOVDoK
LSAgICAgICAgLy8gQkFTRUZPTlQ6IEVNUFRZCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBj
YXNlIElEX0JPRFk6Ci0gICAgICAgIC8vIEJPRFk6IF8xICogKyBfMgotICAgICAgICByZXR1cm4g
Y2hlY2tfYXJyYXkoY2hpbGRJRCwgdGFnX2xpc3RfMSkgfHwgY2hlY2tfYXJyYXkoY2hpbGRJRCwg
dGFnX2xpc3RfMik7Ci0gICAgY2FzZSBJRF9BRERSRVNTOgotICAgICAgICAvLyBBRERSRVNTOiAo
IF8wIHwgUCApICoKLSAgICAgICAgcmV0dXJuIGNoZWNrX2FycmF5KGNoaWxkSUQsIHRhZ19saXN0
XzApIHx8IGNoaWxkSUQgPT0gSURfUDsKLSAgICBjYXNlIElEX0xJOgotICAgIGNhc2UgSURfRFQ6
Ci0gICAgY2FzZSBJRF9ESVY6Ci0gICAgY2FzZSBJRF9TUEFOOgotICAgIGNhc2UgSURfTEFZRVI6
Ci0gICAgY2FzZSBJRF9DRU5URVI6Ci0gICAgY2FzZSBJRF9CTE9DS1FVT1RFOgotICAgIGNhc2Ug
SURfSU5TOgotICAgIGNhc2UgSURfREVMOgotICAgIGNhc2UgSURfREQ6Ci0gICAgY2FzZSBJRF9U
SDoKLSAgICBjYXNlIElEX1REOgotICAgIGNhc2UgSURfSUZSQU1FOgotICAgIGNhc2UgSURfTk9G
UkFNRVM6Ci0gICAgY2FzZSBJRF9OT1NDUklQVDoKLSAgICBjYXNlIElEX0NBUFRJT046Ci0gICAg
Y2FzZSBJRF9NQVJRVUVFOgotICAgIGNhc2UgSURfVUw6Ci0gICAgY2FzZSBJRF9PTDoKLSAgICBj
YXNlIElEX0RJUjoKLSAgICBjYXNlIElEX01FTlU6Ci0gICAgICAgIC8vIERJVjogXzEgKgotICAg
ICAgICByZXR1cm4gY2hlY2tfYXJyYXkoY2hpbGRJRCwgdGFnX2xpc3RfMSk7Ci0gICAgY2FzZSBJ
RF9NQVA6Ci0JLy8gV2UgYWNjZXB0IFNDUklQVCBpbiBjbGllbnQtc2lkZSBpbWFnZSBtYXBzIGFz
IGFuIGV4dGVuc2lvbiB0byB0aGUgRFRELgotICAgICAgICAvLyBNQVA6ICggXzMgKyB8IEFSRUEg
KyB8IFNDUklQVCArICkKLSAgICAgICAgcmV0dXJuIGNoZWNrX2FycmF5KGNoaWxkSUQsIHRhZ19s
aXN0XzMpIHx8Ci0JICAgIGNoaWxkSUQgPT0gSURfQVJFQSB8fAotCSAgICBjaGlsZElEID09IElE
X1NDUklQVDsKLSAgICBjYXNlIElEX09CSkVDVDoKLSAgICBjYXNlIElEX0VNQkVEOgotICAgIGNh
c2UgSURfQVBQTEVUOgotICAgICAgICAvLyBPQkpFQ1Q6IF80ICoKLSAgICAgICAgcmV0dXJuIGNo
ZWNrX2FycmF5KGNoaWxkSUQsIHRhZ19saXN0XzQpOwotICAgIGNhc2UgSURfUFJFOgotICAgIGNh
c2UgSURfWE1QOgotICAgIGNhc2UgSURfUExBSU5URVhUOgotICAgICAgICAvLyBQUkU6IF8wICog
LSBfNQotICAgICAgICByZXR1cm4gY2hlY2tfYXJyYXkoY2hpbGRJRCwgdGFnX2xpc3RfMSk7Ci0g
ICAgY2FzZSBJRF9ETDoKLSAgICAgICAgLy8gREw6IF82ICsKLSAgICAgICAgcmV0dXJuIGNoZWNr
X2FycmF5KGNoaWxkSUQsIHRhZ19saXN0XzEpOwotICAgIGNhc2UgSURfRk9STToKLSAgICAgICAg
Ly8gRk9STTogXzEgKiAtIEZPUk0KLSAgICAgICAgcmV0dXJuIGNoZWNrX2FycmF5KGNoaWxkSUQs
IHRhZ19saXN0XzEpOwotICAgIGNhc2UgSURfTEFCRUw6Ci0gICAgICAgIC8vIExBQkVMOiBfMSAq
IC0gTEFCRUwKLSAgICAgICAgcmV0dXJuIGNoZWNrX2FycmF5KGNoaWxkSUQsIHRhZ19saXN0XzEp
OwotICAgICAgICAvLyBLRVlHRU4gZG9lcyBub3QgcmVhbGx5IGFsbG93IGFueSBjaGlsZHMKLSAg
ICAgICAgLy8gZnJvbSBvdXRzaWRlLCBqdXN0IG5lZWQgdGhpcyB0byBiZSBhYmxlCi0gICAgICAg
IC8vIHRvIGFkZCB0aGUga2V5bGVuZ3RocyBvdXJzZWxmCi0gICAgICAgIC8vIFllcywgY29uc2lk
ZXIgaXQgYSBoYWNrIChEaXJrKQotICAgIGNhc2UgSURfS0VZR0VOOgotICAgIGNhc2UgSURfU0VM
RUNUOgotICAgICAgICAvLyBTRUxFQ1Q6IF83ICsKLSAgICAgICAgcmV0dXJuIGNoZWNrX2FycmF5
KGNoaWxkSUQsIHRhZ19saXN0XzcpOwotICAgIGNhc2UgSURfT1BUR1JPVVA6Ci0gICAgICAgIC8v
IE9QVEdST1VQOiBPUFRJT04gKwotICAgICAgICBpZihjaGlsZElEID09IElEX09QVElPTikgcmV0
dXJuIHRydWU7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBjYXNlIElEX09QVElPTjoKLSAg
ICBjYXNlIElEX1RFWFRBUkVBOgotICAgIGNhc2UgSURfVElUTEU6Ci0gICAgY2FzZSBJRF9TVFlM
RToKLSAgICBjYXNlIElEX1NDUklQVDoKLSAgICAgICAgLy8gT1BUSU9OOiBURVhUCi0gICAgICAg
IGlmKGNoaWxkSUQgPT0gSURfVEVYVCkgcmV0dXJuIHRydWU7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBjYXNlIElEX0ZJRUxEU0VUOgotICAgICAgICAvLyBGSUVMRFNFVDogKCBURVhUICwg
TEVHRU5EICwgXzEgKiApCi0gICAgICAgIGlmKGNoaWxkSUQgPT0gSURfVEVYVCkgcmV0dXJuIHRy
dWU7Ci0gICAgICAgIGlmKGNoaWxkSUQgPT0gSURfTEVHRU5EKSByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgcmV0dXJuIGNoZWNrX2FycmF5KGNoaWxkSUQsIHRhZ19saXN0XzEpOwotICAgIGNhc2UgSURf
QlVUVE9OOgotICAgICAgICAvLyBCVVRUT046IF8xICogLSBfOAotICAgICAgICByZXR1cm4gY2hl
Y2tfYXJyYXkoY2hpbGRJRCwgdGFnX2xpc3RfMSk7Ci0gICAgY2FzZSBJRF9UQUJMRToKLSAgICAg
ICAgLy8gVEFCTEU6ICggQ0FQVElPTiA/ICwgKCBDT0wgKiB8IENPTEdST1VQICogKSAsIFRIRUFE
ID8gLCBURk9PVCA/ICwgVEJPRFkgKyApCi0gICAgICAgIHN3aXRjaChjaGlsZElEKQotICAgICAg
ICB7Ci0gICAgICAgIGNhc2UgSURfQ0FQVElPTjoKLSAgICAgICAgY2FzZSBJRF9DT0w6Ci0gICAg
ICAgIGNhc2UgSURfQ09MR1JPVVA6Ci0gICAgICAgIGNhc2UgSURfVEhFQUQ6Ci0gICAgICAgIGNh
c2UgSURfVEZPT1Q6Ci0gICAgICAgIGNhc2UgSURfVEJPRFk6Ci0gICAgICAgIGNhc2UgSURfVEVY
VDoKLSAgICAgICAgY2FzZSBJRF9GT1JNOgotICAgICAgICBjYXNlIElEX0NPTU1FTlQ6Ci0gICAg
ICAgIGNhc2UgSURfU0NSSVBUOgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICBjYXNlIElE
X1RIRUFEOgotICAgIGNhc2UgSURfVEZPT1Q6Ci0gICAgY2FzZSBJRF9UQk9EWToKLSAgICAgICAg
Ly8gVEhFQUQ6IFRSICsKLSAgICAgICAgaWYoY2hpbGRJRCA9PSBJRF9GT1JNIHx8IGNoaWxkSUQg
PT0gSURfVFIgfHwgY2hpbGRJRCA9PSBJRF9DT01NRU5UIHx8Ci0gICAgICAgICAgIGNoaWxkSUQg
PT0gSURfU0NSSVBUKSAKLSAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBjYXNlIElEX0NPTEdST1VQOgotICAgICAgICAvLyBDT0xHUk9VUDogQ09MICoK
LSAgICAgICAgaWYoY2hpbGRJRCA9PSBJRF9DT0wgfHwgY2hpbGRJRCA9PSBJRF9DT01NRU5UKSBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGNhc2UgSURfVFI6Ci0gICAg
ICAgIC8vIFRSOiBfOSArCi0gICAgICAgIGlmIChjaGlsZElEID09IElEX1NDUklQVCB8fCBjaGls
ZElEID09IElEX0ZPUk0pCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgcmV0dXJu
IGNoZWNrX2FycmF5KGNoaWxkSUQsIHRhZ19saXN0XzkpOwotICAgIGNhc2UgSURfRlJBTUVTRVQ6
Ci0gICAgICAgIC8vIEZSQU1FU0VUOiAoIF8xMCArICYgTk9GUkFNRVMgPyApCi0gICAgICAgIHJl
dHVybiBjaGVja19hcnJheShjaGlsZElELCB0YWdfbGlzdF8xMCk7Ci0gICAgICAgIHJldHVybiAo
Y2hpbGRJRCA9PSBJRF9OT0ZSQU1FUyk7Ci0gICAgY2FzZSBJRF9IRUFEOgotICAgICAgICAvLyBI
RUFEOiAoIFRJVExFICYgSVNJTkRFWCA/ICYgQkFTRSA/ICkgKyBfMTEKLSAgICAgICAgaWYoY2hp
bGRJRCA9PSBJRF9USVRMRSB8fCBjaGlsZElEID09IElEX0lTSU5ERVggfHwgY2hpbGRJRCA9PSBJ
RF9CQVNFKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIHJldHVybiBjaGVja19h
cnJheShjaGlsZElELCB0YWdfbGlzdF8xMSk7Ci0gICAgY2FzZSBJRF9IVE1MOgotICAgICAgICAv
LyBIVE1MOiAoIEhFQUQgLCBDT01NRU5ULCAoIEJPRFkgfCAoIEZSQU1FU0VUICYgTk9GUkFNRVMg
PyApICkgKQotICAgICAgICBzd2l0Y2goY2hpbGRJRCkKLSAgICAgICAgewotICAgICAgICBjYXNl
IElEX0hFQUQ6Ci0gICAgICAgIGNhc2UgSURfQ09NTUVOVDoKLSAgICAgICAgY2FzZSBJRF9CT0RZ
OgotICAgICAgICBjYXNlIElEX0ZSQU1FU0VUOgotICAgICAgICBjYXNlIElEX05PRlJBTUVTOgot
ICAgICAgICBjYXNlIElEX1NDUklQVDoKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgZGVm
YXVsdDoKLSAgICAgICAga2REZWJ1ZyggNjAzMCApIDw8ICJ1bmhhbmRsZWQgdGFnIGluIGR0ZC5j
cHA6Y2hlY2tDaGlsZCgpOiB0YWdJRD0iIDw8IHRhZ0lEIDw8ICIhIiA8PCBlbmRsOwotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi12b2lkIERPTTo6YWRkRm9yYmlkZGVuKGludCB0
YWdJZCwgdXNob3J0ICpmb3JiaWRkZW5UYWdzKQotewotICAgIHN3aXRjaCh0YWdJZCkKLSAgICB7
Ci0gICAgY2FzZSBJRF9MQUJFTDoKLSAgICAgICAgZm9yYmlkZGVuVGFnc1tJRF9MQUJFTF0rKzsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9CVVRUT046Ci0gICAgICAgIGZvcmJpZGRlblRh
Z3NbSURfQV0rKzsKLSAgICAgICAgZm9yYmlkZGVuVGFnc1tJRF9JTlBVVF0rKzsKLSAgICAgICAg
Zm9yYmlkZGVuVGFnc1tJRF9TRUxFQ1RdKys7Ci0gICAgICAgIGZvcmJpZGRlblRhZ3NbSURfVEVY
VEFSRUFdKys7Ci0gICAgICAgIGZvcmJpZGRlblRhZ3NbSURfTEFCRUxdKys7Ci0gICAgICAgIGZv
cmJpZGRlblRhZ3NbSURfQlVUVE9OXSsrOwotICAgICAgICBmb3JiaWRkZW5UYWdzW0lEX0ZPUk1d
Kys7Ci0gICAgICAgIGZvcmJpZGRlblRhZ3NbSURfSVNJTkRFWF0rKzsKLSAgICAgICAgZm9yYmlk
ZGVuVGFnc1tJRF9GSUVMRFNFVF0rKzsKLSAgICAgICAgZm9yYmlkZGVuVGFnc1tJRF9JRlJBTUVd
Kys7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LX0KLQotdm9pZCBET006OnJlbW92ZUZvcmJpZGRlbihpbnQgdGFnSWQsIHVzaG9ydCAqZm9yYmlk
ZGVuVGFncykKLXsKLSAgICBzd2l0Y2godGFnSWQpCi0gICAgewotICAgIGNhc2UgSURfTEFCRUw6
Ci0gICAgICAgIGZvcmJpZGRlblRhZ3NbSURfTEFCRUxdLS07Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgSURfQlVUVE9OOgotICAgICAgICBmb3JiaWRkZW5UYWdzW0lEX0FdLS07Ci0gICAgICAg
IGZvcmJpZGRlblRhZ3NbSURfSU5QVVRdLS07Ci0gICAgICAgIGZvcmJpZGRlblRhZ3NbSURfU0VM
RUNUXS0tOwotICAgICAgICBmb3JiaWRkZW5UYWdzW0lEX1RFWFRBUkVBXS0tOwotICAgICAgICBm
b3JiaWRkZW5UYWdzW0lEX0xBQkVMXS0tOwotICAgICAgICBmb3JiaWRkZW5UYWdzW0lEX0JVVFRP
Tl0tLTsKLSAgICAgICAgZm9yYmlkZGVuVGFnc1tJRF9GT1JNXS0tOwotICAgICAgICBmb3JiaWRk
ZW5UYWdzW0lEX0lTSU5ERVhdLS07Ci0gICAgICAgIGZvcmJpZGRlblRhZ3NbSURfRklFTERTRVRd
LS07Ci0gICAgICAgIGZvcmJpZGRlblRhZ3NbSURfSUZSQU1FXS0tOwotICAgICAgICBicmVhazsK
LSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLQotI2lmIDAKLQotCi1z
dHJ1Y3QgYXR0cl9wcml2IHsKLSAgICBhdHRyX3ByaXYoKSB7IGlkID0gbGVuID0gMCwgdmFsID0g
MDsgfQotICAgIGF0dHJfcHJpdih1c2hvcnQgaSwgY29uc3QgUUNoYXIgKnYsIHVzaG9ydCBsKQot
ICAgIHsgaWQgPWk7IGxlbiA9IGwsIHZhbCA9IHY7IH0KLSAgICB1c2hvcnQgaWQ7Ci0gICAgY29u
c3QgUUNoYXIgKnZhbDsKLSAgICB1c2hvcnQgbGVuOwotfTsKLQotRE9NU3RyaW5nIGZpbmRfYXR0
cih1c2hvcnQgaWQsIGNvbnN0IGF0dHJfcHJpdiAqYXR0cnMpCi17Ci0gICAgaW50IGkgPSAwOwot
ICAgIHdoaWxlKGF0dHJzW2ldLmlkICE9IDApCi0gICAgewotICAgICAgICBpZihhdHRyc1tpXS5p
ZCA9PSBpZCkKLSAgICAgICAgICAgIHJldHVybiBET01TdHJpbmcoYXR0cnNbaV0udmFsLCBhdHRy
c1tpXS5sZW4pOwotICAgICAgICBpKys7Ci0gICAgfQotICAgIHJldHVybiBET01TdHJpbmcoKTsK
LX0KLQotc3RhdGljIGNvbnN0IFFDaGFyIHZhbHVlXzFfMCBbXSA9IHsgJ04nLCdPJywnTicsJ0Un
IH07Ci0KLWF0dHJfcHJpdiBhdHRyX2xpc3RfMVtdID0gewotICAgIGF0dHJfcHJpdihBVFRSX0NM
RUFSLCB2YWx1ZV8xXzAsIDQpCi19OwotCi1zdGF0aWMgY29uc3QgUUNoYXIgdmFsdWVfMl8wIFtd
ID0geyAnUicsJ0UnLCdDJywnVCcgfTsKLQotYXR0cl9wcml2IGF0dHJfbGlzdF8yW10gPSB7Ci0g
ICAgYXR0cl9wcml2KEFUVFJfU0hBUEUsIHZhbHVlXzJfMCwgNCkKLX07Ci0KLXN0YXRpYyBjb25z
dCBRQ2hhciB2YWx1ZV8zXzAgW10gPSB7ICdSJywnRScsJ0MnLCdUJyB9OwotCi1hdHRyX3ByaXYg
YXR0cl9saXN0XzNbXSA9IHsKLSAgICBhdHRyX3ByaXYoQVRUUl9TSEFQRSwgdmFsdWVfM18wLCA0
KQotfTsKLQotc3RhdGljIGNvbnN0IFFDaGFyIHZhbHVlXzRfMCBbXSA9IHsgJ0QnLCdBJywnVCcs
J0EnIH07Ci0KLWF0dHJfcHJpdiBhdHRyX2xpc3RfNFtdID0gewotICAgIGF0dHJfcHJpdihBVFRS
X1ZBTFVFVFlQRSwgdmFsdWVfNF8wLCA0KQotfTsKLQotc3RhdGljIGNvbnN0IFFDaGFyIHZhbHVl
XzVfMCBbXSA9IHsgJ0cnLCdFJywnVCcgfTsKLXN0YXRpYyBjb25zdCBRQ2hhciB2YWx1ZV81XzEg
W10gPSB7ICdBJywnUCcsJ1AnLCdMJywnSScsJ0MnLCdBJywnVCcsJ0knLCdPJywnTicsJy8nLCdY
JywnLScsJ1cnLCdXJywnVycsJy0nLCdGJywnTycsJ1InLCdNJywnLScsJ1UnLCdSJywnTCcsJ0Un
LCdOJywnQycsJ08nLCdEJywnRScsJ0QnIH07Ci0KLWF0dHJfcHJpdiBhdHRyX2xpc3RfNVtdID0g
ewotICAgIGF0dHJfcHJpdihBVFRSX01FVEhPRCwgdmFsdWVfNV8wLCAzKSwKLSAgICBhdHRyX3By
aXYoQVRUUl9FTkNUWVBFLCB2YWx1ZV81XzEsIDMzKQotfTsKLQotc3RhdGljIGNvbnN0IFFDaGFy
IHZhbHVlXzZfMCBbXSA9IHsgJ1QnLCdFJywnWCcsJ1QnIH07Ci0KLWF0dHJfcHJpdiBhdHRyX2xp
c3RfNltdID0gewotICAgIGF0dHJfcHJpdihBVFRSX1RZUEUsIHZhbHVlXzZfMCwgNCkKLX07Ci0K
LXN0YXRpYyBjb25zdCBRQ2hhciB2YWx1ZV83XzAgW10gPSB7ICdTJywnVScsJ0InLCdNJywnSScs
J1QnIH07Ci0KLWF0dHJfcHJpdiBhdHRyX2xpc3RfN1tdID0gewotICAgIGF0dHJfcHJpdihBVFRS
X1RZUEUsIHZhbHVlXzdfMCwgNikKLX07Ci0KLXN0YXRpYyBjb25zdCBRQ2hhciB2YWx1ZV84XzAg
W10gPSB7ICcxJyB9OwotCi1hdHRyX3ByaXYgYXR0cl9saXN0XzhbXSA9IHsKLSAgICBhdHRyX3By
aXYoQVRUUl9TUEFOLCB2YWx1ZV84XzAsIDEpCi19OwotCi1zdGF0aWMgY29uc3QgUUNoYXIgdmFs
dWVfOV8wIFtdID0geyAnMScgfTsKLQotYXR0cl9wcml2IGF0dHJfbGlzdF85W10gPSB7Ci0gICAg
YXR0cl9wcml2KEFUVFJfU1BBTiwgdmFsdWVfOV8wLCAxKQotfTsKLQotc3RhdGljIGNvbnN0IFFD
aGFyIHZhbHVlXzEwXzAgW10gPSB7ICcxJyB9Owotc3RhdGljIGNvbnN0IFFDaGFyIHZhbHVlXzEw
XzEgW10gPSB7ICcxJyB9OwotCi1hdHRyX3ByaXYgYXR0cl9saXN0XzEwW10gPSB7Ci0gICAgYXR0
cl9wcml2KEFUVFJfUk9XU1BBTiwgdmFsdWVfMTBfMCwgMSksCi0gICAgYXR0cl9wcml2KEFUVFJf
Q09MU1BBTiwgdmFsdWVfMTBfMSwgMSkKLX07Ci0KLXN0YXRpYyBjb25zdCBRQ2hhciB2YWx1ZV8x
MV8wIFtdID0geyAnMScgfTsKLXN0YXRpYyBjb25zdCBRQ2hhciB2YWx1ZV8xMV8xIFtdID0geyAn
QScsJ1UnLCdUJywnTycgfTsKLQotYXR0cl9wcml2IGF0dHJfbGlzdF8xMVtdID0gewotICAgIGF0
dHJfcHJpdihBVFRSX0ZSQU1FQk9SREVSLCB2YWx1ZV8xMV8wLCAxKSwKLSAgICBhdHRyX3ByaXYo
QVRUUl9TQ1JPTExJTkcsIHZhbHVlXzExXzEsIDQpCi19OwotCi1zdGF0aWMgY29uc3QgUUNoYXIg
dmFsdWVfMTJfMCBbXSA9IHsgJzEnIH07Ci1zdGF0aWMgY29uc3QgUUNoYXIgdmFsdWVfMTJfMSBb
XSA9IHsgJ0EnLCdVJywnVCcsJ08nIH07Ci0KLWF0dHJfcHJpdiBhdHRyX2xpc3RfMTJbXSA9IHsK
LSAgICBhdHRyX3ByaXYoQVRUUl9GUkFNRUJPUkRFUiwgdmFsdWVfMTJfMCwgMSksCi0gICAgYXR0
cl9wcml2KEFUVFJfU0NST0xMSU5HLCB2YWx1ZV8xMl8xLCA0KQotfTsKLQotc3RhdGljIGNvbnN0
IFFDaGFyIHZhbHVlXzEzXzAgW10gPSB7ICctJywnLycsJy8nLCdXJywnMycsJ0MnLCcvJywnLycs
J0QnLCdUJywnRCcgfTsKLXN0YXRpYyBjb25zdCBRQ2hhciB2YWx1ZV8xM18xIFtdID0geyAnVCcs
J1InLCdBJywnTicsJ1MnLCdJJywnVCcsJ0knLCdPJywnTicsJ0EnLCdMJywnLycsJy8nLCdFJywn
TicgfTsKLQotYXR0cl9wcml2IGF0dHJfbGlzdF8xM1tdID0gewotICAgIGF0dHJfcHJpdihBVFRS
X1ZFUlNJT04sIHZhbHVlXzEzXzAsIDExKSwKLSAgICBhdHRyX3ByaXYoQVRUUl9IVE1MLCB2YWx1
ZV8xM18xLCAxNikKLX07Ci0KLURPTVN0cmluZyBET006OmZpbmREZWZBdHRyTm9uZSh1c2hvcnQp
Ci17Ci0gICAgcmV0dXJuIERPTVN0cmluZygpOwotfTsKLURPTVN0cmluZyBET006OmZpbmREZWZB
dHRyQlIodXNob3J0IGlkKQotewotICAgIHJldHVybiBmaW5kX2F0dHIoaWQsIGF0dHJfbGlzdF8x
KTsKLX0KLURPTVN0cmluZyBET006OmZpbmREZWZBdHRyQSh1c2hvcnQgaWQpCi17Ci0gICAgcmV0
dXJuIGZpbmRfYXR0cihpZCwgYXR0cl9saXN0XzIpOwotfQotRE9NU3RyaW5nIERPTTo6ZmluZERl
ZkF0dHJBUkVBKHVzaG9ydCBpZCkKLXsKLSAgICByZXR1cm4gZmluZF9hdHRyKGlkLCBhdHRyX2xp
c3RfMyk7Ci19Ci1ET01TdHJpbmcgRE9NOjpmaW5kRGVmQXR0clBBUkFNKHVzaG9ydCBpZCkKLXsK
LSAgICByZXR1cm4gZmluZF9hdHRyKGlkLCBhdHRyX2xpc3RfNCk7Ci19Ci1ET01TdHJpbmcgRE9N
OjpmaW5kRGVmQXR0ckZPUk0odXNob3J0IGlkKQotewotICAgIHJldHVybiBmaW5kX2F0dHIoaWQs
IGF0dHJfbGlzdF81KTsKLX0KLURPTVN0cmluZyBET006OmZpbmREZWZBdHRySU5QVVQodXNob3J0
IGlkKQotewotICAgIHJldHVybiBmaW5kX2F0dHIoaWQsIGF0dHJfbGlzdF82KTsKLX0KLURPTVN0
cmluZyBET006OmZpbmREZWZBdHRyQlVUVE9OKHVzaG9ydCBpZCkKLXsKLSAgICByZXR1cm4gZmlu
ZF9hdHRyKGlkLCBhdHRyX2xpc3RfNyk7Ci19Ci1ET01TdHJpbmcgRE9NOjpmaW5kRGVmQXR0ckNP
TEdST1VQKHVzaG9ydCBpZCkKLXsKLSAgICByZXR1cm4gZmluZF9hdHRyKGlkLCBhdHRyX2xpc3Rf
OCk7Ci19Ci1ET01TdHJpbmcgRE9NOjpmaW5kRGVmQXR0ckNPTCh1c2hvcnQgaWQpCi17Ci0gICAg
cmV0dXJuIGZpbmRfYXR0cihpZCwgYXR0cl9saXN0XzkpOwotfQotRE9NU3RyaW5nIERPTTo6Zmlu
ZERlZkF0dHJUSCh1c2hvcnQgaWQpCi17Ci0gICAgcmV0dXJuIGZpbmRfYXR0cihpZCwgYXR0cl9s
aXN0XzEwKTsKLX0KLURPTVN0cmluZyBET006OmZpbmREZWZBdHRyRlJBTUUodXNob3J0IGlkKQot
ewotICAgIHJldHVybiBmaW5kX2F0dHIoaWQsIGF0dHJfbGlzdF8xMSk7Ci19Ci1ET01TdHJpbmcg
RE9NOjpmaW5kRGVmQXR0cklGUkFNRSh1c2hvcnQgaWQpCi17Ci0gICAgcmV0dXJuIGZpbmRfYXR0
cihpZCwgYXR0cl9saXN0XzEyKTsKLX0KLURPTVN0cmluZyBET006OmZpbmREZWZBdHRySFRNTCh1
c2hvcnQgaWQpCi17Ci0gICAgcmV0dXJuIGZpbmRfYXR0cihpZCwgYXR0cl9saXN0XzEzKTsKLX0K
LQotI2VuZGlmCkluZGV4OiBraHRtbC9odG1sL2R0ZC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IGto
dG1sL2h0bWwvZHRkLmgKZGlmZiAtTiBraHRtbC9odG1sL2R0ZC5oCi0tLSBraHRtbC9odG1sL2R0
ZC5oCTEyIEFwciAyMDA1IDIyOjQ5OjQxIC0wMDAwCTEuNQorKysgL2Rldi9udWxsCTEgSmFuIDE5
NzAgMDA6MDA6MDAgLTAwMDAKQEAgLTEsNTggKzAsMCBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBw
YXJ0IG9mIHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4KLSAqCi0gKiAoQykgMTk5OSBM
YXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKLSAqIEJvc3RvbiwgTUEgMDIx
MTEtMTMwNywgVVNBLgotICoKLSAqLwotI2lmbmRlZiBfRE9NX2R0ZF9oXwotI2RlZmluZSBfRE9N
X2R0ZF9oXwotCi0jaW5jbHVkZSAiZG9tL2RvbV9zdHJpbmcuaCIKLSNpbmNsdWRlICJtaXNjL2h0
bWx0YWdzLmgiCi0KLW5hbWVzcGFjZSBET00KLXsKLQotdm9pZCBhZGRGb3JiaWRkZW4oaW50IHRh
Z0lkLCB1c2hvcnQgKmZvcmJpZGRlblRhZ3MpOwotdm9pZCByZW1vdmVGb3JiaWRkZW4oaW50IHRh
Z0lkLCB1c2hvcnQgKmZvcmJpZGRlblRhZ3MpOwotCi1lbnVtIHRhZ1N0YXR1cyB7IE9QVElPTkFM
LCBSRVFVSVJFRCwgRk9SQklEREVOIH07Ci0KLWJvb2wgY2hlY2tDaGlsZCh1c2hvcnQgdGFnSUQs
IHVzaG9ydCBjaGlsZElELCBib29sIHN0cmljdCk7Ci0KLWV4dGVybiBjb25zdCB1bnNpZ25lZCBz
aG9ydCB0YWdQcmlvcml0eUFycmF5W107Ci1leHRlcm4gY29uc3QgdGFnU3RhdHVzIGVuZFRhZ0Fy
cmF5W107Ci0KLWlubGluZSB1bnNpZ25lZCBzaG9ydCB0YWdQcmlvcml0eShRX1VJTlQzMiB0YWdJ
ZCkKLXsKLSAgICAvLyBUcmVhdCBjdXN0b20gZWxlbWVudHMgdGhlIHNhbWUgYXMgPHNwYW4+OyBh
bHNvIGRvbid0IHJlYWQgcGFzdCB0aGUgZW5kIG9mIHRoZSBhcnJheS4KLSAgICBpZiAodGFnSWQg
PiBJRF9MQVNUX1RBRykKLSAgICAgICAgcmV0dXJuIHRhZ1ByaW9yaXR5QXJyYXlbSURfU1BBTl07
Ci0gICAgcmV0dXJuIHRhZ1ByaW9yaXR5QXJyYXlbdGFnSWRdOwotfQotCi1pbmxpbmUgdGFnU3Rh
dHVzIGVuZFRhZ1JlcXVpcmVtZW50KFFfVUlOVDMyIHRhZ0lkKQotewotICAgIC8vIFRyZWF0IGN1
c3RvbSBlbGVtZW50cyB0aGUgc2FtZSBhcyA8c3Bhbj47IGFsc28gZG9uJ3QgcmVhZCBwYXN0IHRo
ZSBlbmQgb2YgdGhlIGFycmF5LgotICAgIGlmICh0YWdJZCA+IElEX0xBU1RfVEFHKQotICAgICAg
ICByZXR1cm4gZW5kVGFnQXJyYXlbSURfU1BBTl07Ci0gICAgcmV0dXJuIGVuZFRhZ0FycmF5W3Rh
Z0lkXTsKLX0KLQotfSAvL25hbWVzcGFjZSBET00KLSNlbmRpZgpJbmRleDoga2h0bWwvaHRtbC9o
dG1sX2Jhc2VpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9r
aHRtbC9odG1sL2h0bWxfYmFzZWltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjcyCmRp
ZmYgLXUgLXAgLXIxLjcyIGtodG1sL2h0bWwvaHRtbF9iYXNlaW1wbC5jcHAKLS0tIGtodG1sL2h0
bWwvaHRtbF9iYXNlaW1wbC5jcHAJMTIgTWF5IDIwMDUgMTc6MTE6MjEgLTAwMDAJMS43MgorKysg
a2h0bWwvaHRtbC9odG1sX2Jhc2VpbXBsLmNwcAk4IEp1bCAyMDA1IDA1OjUwOjA0IC0wMDAwCkBA
IC00OCw3ICs0OCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBET007CiB1c2luZyBuYW1lc3BhY2Uga2h0
bWw7CiAKIEhUTUxCb2R5RWxlbWVudEltcGw6OkhUTUxCb2R5RWxlbWVudEltcGwoRG9jdW1lbnRQ
dHIgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50SW1wbChkb2MpLCBtX2xpbmtEZWNsKDApCisgICAg
OiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjpib2R5KCksIGRvYyksIG1fbGlua0RlY2woMCkK
IHsKIH0KIApAQCAtNjEsMTEgKzYxLDYgQEAgSFRNTEJvZHlFbGVtZW50SW1wbDo6fkhUTUxCb2R5
RWxlbWVudEltcAogICAgIH0KIH0KIAotTm9kZUltcGw6OklkIEhUTUxCb2R5RWxlbWVudEltcGw6
OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfQk9EWTsKLX0KLQogdm9pZCBIVE1MQm9keUVs
ZW1lbnRJbXBsOjpjcmVhdGVMaW5rRGVjbCgpCiB7CiAgICAgbV9saW5rRGVjbCA9IG5ldyBDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbkltcGw7CkBAIC0yODksNyArMjg0LDE4IEBAIHZvaWQgSFRN
TEJvZHlFbGVtZW50SW1wbDo6c2V0VkxpbmsoY29uc3QKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAog
SFRNTEZyYW1lRWxlbWVudEltcGw6OkhUTUxGcmFtZUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpk
b2MpCi0gICAgOiBIVE1MRWxlbWVudEltcGwoZG9jKQorICAgIDogSFRNTEVsZW1lbnRJbXBsKEhU
TUxOYW1lczo6ZnJhbWUoKSwgZG9jKQoreworICAgIGluaXQoKTsKK30KKworSFRNTEZyYW1lRWxl
bWVudEltcGw6OkhUTUxGcmFtZUVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05h
bWUsIERvY3VtZW50UHRyICpkb2MpCisgICAgOiBIVE1MRWxlbWVudEltcGwodGFnTmFtZSwgZG9j
KQoreworICAgIGluaXQoKTsKK30KKwordm9pZCBIVE1MRnJhbWVFbGVtZW50SW1wbDo6aW5pdCgp
CiB7CiAgICAgbV9mcmFtZUJvcmRlciA9IHRydWU7CiAgICAgbV9mcmFtZUJvcmRlclNldCA9IGZh
bHNlOwpAQCAtMzAzLDExICszMDksNiBAQCBIVE1MRnJhbWVFbGVtZW50SW1wbDo6fkhUTUxGcmFt
ZUVsZW1lbnRJCiB7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MRnJhbWVFbGVtZW50SW1wbDo6aWQo
KSBjb25zdAotewotICAgIHJldHVybiBJRF9GUkFNRTsKLX0KLQogYm9vbCBIVE1MRnJhbWVFbGVt
ZW50SW1wbDo6aXNVUkxBbGxvd2VkKGNvbnN0IEF0b21pY1N0cmluZyAmVVJMU3RyaW5nKSBjb25z
dAogewogICAgIGlmIChVUkxTdHJpbmcuaXNFbXB0eSgpKSB7CkBAIC00ODIsNyArNDgzLDcgQEAg
dm9pZCBIVE1MRnJhbWVFbGVtZW50SW1wbDo6YXR0YWNoKCkKIAogICAgIC8vIGluaGVyaXQgZGVm
YXVsdCBzZXR0aW5ncyBmcm9tIHBhcmVudCBmcmFtZXNldAogICAgIGZvciAoTm9kZUltcGwgKm5v
ZGUgPSBwYXJlbnROb2RlKCk7IG5vZGU7IG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCkpCi0gICAg
ICAgIGlmIChub2RlLT5pZCgpID09IElEX0ZSQU1FU0VUKSB7CisgICAgICAgIGlmIChub2RlLT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6ZnJhbWVzZXQoKSkpIHsKICAgICAgICAgICAgIEhUTUxGcmFt
ZVNldEVsZW1lbnRJbXBsKiBmcmFtZXNldCA9IHN0YXRpY19jYXN0PEhUTUxGcmFtZVNldEVsZW1l
bnRJbXBsKj4obm9kZSk7CiAgICAgICAgICAgICBpZiAoIW1fZnJhbWVCb3JkZXJTZXQpCiAgICAg
ICAgICAgICAgICAgbV9mcmFtZUJvcmRlciA9IGZyYW1lc2V0LT5mcmFtZUJvcmRlcigpOwpAQCAt
NjYxLDcgKzY2Miw3IEBAIHZvaWQgSFRNTEZyYW1lRWxlbWVudEltcGw6OnNldFNyYyhjb25zdCAK
IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogSFRNTEZyYW1lU2V0RWxlbWVudEltcGw6OkhUTUxGcmFt
ZVNldEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0gICAgOiBIVE1MRWxlbWVudEltcGwo
ZG9jKQorICAgIDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6ZnJhbWVzZXQoKSwgZG9jKQog
ewogICAgIC8vIGRlZmF1bHQgdmFsdWUgZm9yIHJvd3MgYW5kIGNvbHMuLi4KICAgICBtX3RvdGFs
Um93cyA9IDE7CkBAIC02ODUsOSArNjg2LDExIEBAIEhUTUxGcmFtZVNldEVsZW1lbnRJbXBsOjp+
SFRNTEZyYW1lU2V0RWwKICAgICAgICAgZGVsZXRlIFtdIG1fY29sczsKIH0KIAotTm9kZUltcGw6
OklkIEhUTUxGcmFtZVNldEVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Citib29sIEhUTUxGcmFtZVNl
dEVsZW1lbnRJbXBsOjpjaGVja0RURChjb25zdCBOb2RlSW1wbCogbmV3Q2hpbGQpCiB7Ci0gICAg
cmV0dXJuIElEX0ZSQU1FU0VUOworCS8vIEZJWE1FOiBPbGQgY29kZSBoYWQgYWRqYWNlbnQgZG91
YmxlIHJldHVybnMgYW5kIHNlZW1lZCB0byB3YW50IHRvIGRvIHNvbWV0aGluZyB3aXRoIE5PRlJB
TUVTIChidXQgZGlkbid0KS4KKwkvLyBXaGF0IGlzIHRoZSBjb3JyZWN0IGJlaGF2aW9yPworCXJl
dHVybiBuZXdDaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZyYW1lc2V0KCkpIHx8IG5ld0No
aWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZnJhbWUoKSk7CiB9CiAKIHZvaWQgSFRNTEZyYW1l
U2V0RWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwg
KmF0dHIpCkBAIC03NTIsOCArNzU1LDcgQEAgdm9pZCBIVE1MRnJhbWVTZXRFbGVtZW50SW1wbDo6
YXR0YWNoKCkKICAgICBIVE1MRWxlbWVudEltcGwqIG5vZGUgPSBzdGF0aWNfY2FzdDxIVE1MRWxl
bWVudEltcGwqPihwYXJlbnROb2RlKCkpOwogICAgIHdoaWxlKG5vZGUpCiAgICAgewotICAgICAg
ICBpZihub2RlLT5pZCgpID09IElEX0ZSQU1FU0VUKQotICAgICAgICB7CisgICAgICAgIGlmIChu
b2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZnJhbWVzZXQoKSkpIHsKICAgICAgICAgICAgIEhU
TUxGcmFtZVNldEVsZW1lbnRJbXBsKiBmcmFtZXNldCA9IHN0YXRpY19jYXN0PEhUTUxGcmFtZVNl
dEVsZW1lbnRJbXBsKj4obm9kZSk7CiAgICAgICAgICAgICBpZighZnJhbWVCb3JkZXJTZXQpICBm
cmFtZWJvcmRlciA9IGZyYW1lc2V0LT5mcmFtZUJvcmRlcigpOwogICAgICAgICAgICAgaWYoIW5v
cmVzaXplKSAgbm9yZXNpemUgPSBmcmFtZXNldC0+bm9SZXNpemUoKTsKQEAgLTgxNyw3ICs4MTks
NyBAQCB2b2lkIEhUTUxGcmFtZVNldEVsZW1lbnRJbXBsOjpzZXRSb3dzKGNvCiAvLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCiAKIEhUTUxIZWFkRWxlbWVudEltcGw6OkhUTUxIZWFkRWxlbWVudEltcGwoRG9j
dW1lbnRQdHIgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50SW1wbChkb2MpCisgICAgOiBIVE1MRWxl
bWVudEltcGwoSFRNTE5hbWVzOjpoZWFkKCksIGRvYykKIHsKIH0KIApAQCAtODI1LDExICs4Mjcs
NiBAQCBIVE1MSGVhZEVsZW1lbnRJbXBsOjp+SFRNTEhlYWRFbGVtZW50SW1wCiB7CiB9CiAKLU5v
ZGVJbXBsOjpJZCBIVE1MSGVhZEVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IElEX0hFQUQ7Ci19Ci0KIERPTVN0cmluZyBIVE1MSGVhZEVsZW1lbnRJbXBsOjpwcm9maWxlKCkg
Y29uc3QKIHsKICAgICByZXR1cm4gZ2V0QXR0cmlidXRlKEFUVFJfUFJPRklMRSk7CkBAIC04NDAs
MTAgKzgzNywxOCBAQCB2b2lkIEhUTUxIZWFkRWxlbWVudEltcGw6OnNldFByb2ZpbGUoY29uCiAg
ICAgc2V0QXR0cmlidXRlKEFUVFJfUFJPRklMRSwgdmFsdWUpOwogfQogCitib29sIEhUTUxIZWFk
RWxlbWVudEltcGw6OmNoZWNrRFREKGNvbnN0IE5vZGVJbXBsKiBuZXdDaGlsZCkKK3sKKwlyZXR1
cm4gbmV3Q2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0aXRsZSgpKSB8fCBuZXdDaGlsZC0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OmlzaW5kZXgoKSkgfHwKKwkJICAgbmV3Q2hpbGQtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjpiYXNlKCkpIHx8IG5ld0NoaWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6c2NyaXB0KCkpIHx8CisJCSAgIG5ld0NoaWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c3R5
bGUoKSkgfHwgbmV3Q2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjptZXRhKCkpIHx8CisJCSAg
IG5ld0NoaWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6bGluaygpKSB8fCBuZXdDaGlsZC0+aXNU
ZXh0Tm9kZSgpOworfQorCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxIdG1sRWxlbWVudElt
cGw6OkhUTUxIdG1sRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgICA6IEhUTUxFbGVt
ZW50SW1wbChkb2MpCisgICAgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjpodG1sKCksIGRv
YykKIHsKIH0KIApAQCAtODUxLDExICs4NTYsNiBAQCBIVE1MSHRtbEVsZW1lbnRJbXBsOjp+SFRN
TEh0bWxFbGVtZW50SW1wCiB7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MSHRtbEVsZW1lbnRJbXBs
OjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0hUTUw7Ci19Ci0KIERPTVN0cmluZyBIVE1M
SHRtbEVsZW1lbnRJbXBsOjp2ZXJzaW9uKCkgY29uc3QKIHsKICAgICByZXR1cm4gZ2V0QXR0cmli
dXRlKEFUVFJfVkVSU0lPTik7CkBAIC04NjYsOSArODY2LDE3IEBAIHZvaWQgSFRNTEh0bWxFbGVt
ZW50SW1wbDo6c2V0VmVyc2lvbihjb24KICAgICBzZXRBdHRyaWJ1dGUoQVRUUl9WRVJTSU9OLCB2
YWx1ZSk7CiB9CiAKK2Jvb2wgSFRNTEh0bWxFbGVtZW50SW1wbDo6Y2hlY2tEVEQoY29uc3QgTm9k
ZUltcGwqIG5ld0NoaWxkKQoreworCS8vIEZJWE1FOiBXaHkgaXMgPHNjcmlwdD4gYWxsb3dlZCBo
ZXJlPworCXJldHVybiBuZXdDaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmhlYWQoKSkgfHwg
bmV3Q2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpib2R5KCkpIHx8CisJCSAgIG5ld0NoaWxk
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZnJhbWVzZXQoKSkgfHwgbmV3Q2hpbGQtPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjpub2ZyYW1lcygpKSB8fAorCQkgICBuZXdDaGlsZC0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OnNjcmlwdCgpKTsKK30KKwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1IVE1MSUZy
YW1lRWxlbWVudEltcGw6OkhUTUxJRnJhbWVFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKSA6
IEhUTUxGcmFtZUVsZW1lbnRJbXBsKGRvYykKK0hUTUxJRnJhbWVFbGVtZW50SW1wbDo6SFRNTElG
cmFtZUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpIDogSFRNTEZyYW1lRWxlbWVudEltcGwo
SFRNTE5hbWVzOjppZnJhbWUoKSwgZG9jKQogewogICAgIG1fZnJhbWVCb3JkZXIgPSBmYWxzZTsK
ICAgICBtX21hcmdpbldpZHRoID0gLTE7CkBAIC04ODAsMTEgKzg4OCw2IEBAIEhUTUxJRnJhbWVF
bGVtZW50SW1wbDo6fkhUTUxJRnJhbWVFbGVtZW4KIHsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxJ
RnJhbWVFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9JRlJBTUU7Ci19
Ci0KIGJvb2wgSFRNTElGcmFtZUVsZW1lbnRJbXBsOjptYXBUb0VudHJ5KE5vZGVJbXBsOjpJZCBh
dHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdAogewogICAgIHN3aXRjaCAo
YXR0cikgewpJbmRleDoga2h0bWwvaHRtbC9odG1sX2Jhc2VpbXBsLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sX2Jhc2VpbXBsLmgsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuMjcKZGlmZiAtdSAtcCAtcjEuMjcga2h0bWwvaHRtbC9odG1sX2Jh
c2VpbXBsLmgKLS0tIGtodG1sL2h0bWwvaHRtbF9iYXNlaW1wbC5oCTExIE1heSAyMDA1IDA1OjQ5
OjM0IC0wMDAwCTEuMjcKKysrIGtodG1sL2h0bWwvaHRtbF9iYXNlaW1wbC5oCTggSnVsIDIwMDUg
MDU6NTA6MDUgLTAwMDAKQEAgLTI2LDcgKzI2LDYgQEAKICNpZm5kZWYgSFRNTF9CQVNFSU1QTF9I
CiAjZGVmaW5lIEhUTUxfQkFTRUlNUExfSAogCi0jaW5jbHVkZSAiaHRtbC9kdGQuaCIKICNpbmNs
dWRlICJodG1sL2h0bWxfZWxlbWVudGltcGwuaCIKICNpbmNsdWRlICJtaXNjL2todG1sbGF5b3V0
LmgiCiAKQEAgLTU1LDggKzU0LDkgQEAgcHVibGljOgogICAgIEhUTUxCb2R5RWxlbWVudEltcGwo
RG9jdW1lbnRQdHIgKmRvYyk7CiAgICAgfkhUTUxCb2R5RWxlbWVudEltcGwoKTsKIAotICAgIHZp
cnR1YWwgSWQgaWQoKSBjb25zdDsKLQorICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdS
ZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9CisgICAgdmly
dHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAxMDsgfQorICAgIAogICAgIHZp
cnR1YWwgYm9vbCBtYXBUb0VudHJ5KE5vZGVJbXBsOjpJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVF
bnRyeSYgcmVzdWx0KSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1
dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqKTsKIApAQCAtOTIsMTEgKzkyLDE0IEBAIGNsYXNzIEhU
TUxGcmFtZUVsZW1lbnRJbXBsIDogcHVibGljIEhUTUwKIAogcHVibGljOgogICAgIEhUTUxGcmFt
ZUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpOwotCisgICAgSFRNTEZyYW1lRWxlbWVudElt
cGwoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnRQdHIqIGRvYyk7CiAgICAg
fkhUTUxGcmFtZUVsZW1lbnRJbXBsKCk7CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7Cisg
ICAgdm9pZCBpbml0KCk7CiAKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWly
ZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNGb3JiaWRkZW47IH0KKyAgICB2aXJ0dWFs
IGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgCiAgICAgdmlydHVhbCB2
b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKik7CiAgICAgdmly
dHVhbCB2b2lkIGF0dGFjaCgpOwogICAgIHZpcnR1YWwgdm9pZCBkZXRhY2goKTsKQEAgLTE2OCwx
MCArMTcxLDExIEBAIGNsYXNzIEhUTUxGcmFtZVNldEVsZW1lbnRJbXBsIDogcHVibGljIEgKICAg
ICBmcmllbmQgY2xhc3Mga2h0bWw6OlJlbmRlckZyYW1lU2V0OwogcHVibGljOgogICAgIEhUTUxG
cmFtZVNldEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpOwotCiAgICAgfkhUTUxGcmFtZVNl
dEVsZW1lbnRJbXBsKCk7CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CisgICAgdmlydHVh
bCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3Rh
dHVzUmVxdWlyZWQ7IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0
dXJuIDEwOyB9CisJdmlydHVhbCBib29sIGNoZWNrRFREKGNvbnN0IE5vZGVJbXBsKiBuZXdDaGls
ZCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmli
dXRlSW1wbCAqKTsKICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoKCk7CkBAIC0yMTYsMTAgKzIyMCwx
MSBAQCBjbGFzcyBIVE1MSGVhZEVsZW1lbnRJbXBsIDogcHVibGljIEhUTUxFCiB7CiBwdWJsaWM6
CiAgICAgSFRNTEhlYWRFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKTsKLQogICAgIH5IVE1M
SGVhZEVsZW1lbnRJbXBsKCk7CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CisgICAgdmly
dHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFn
U3RhdHVzT3B0aW9uYWw7IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsg
cmV0dXJuIDEwOyB9CisJdmlydHVhbCBib29sIGNoZWNrRFREKGNvbnN0IE5vZGVJbXBsKiBuZXdD
aGlsZCk7CiAKICAgICBET01TdHJpbmcgcHJvZmlsZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0UHJv
ZmlsZShjb25zdCBET01TdHJpbmcgJik7CkBAIC0yMzMsNyArMjM4LDkgQEAgcHVibGljOgogICAg
IEhUTUxIdG1sRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYyk7CiAgICAgfkhUTUxIdG1sRWxl
bWVudEltcGwoKTsKIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEhU
TUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNS
ZXF1aXJlZDsgfQorICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4g
MTE7IH0KKwl2aXJ0dWFsIGJvb2wgY2hlY2tEVEQoY29uc3QgTm9kZUltcGwqIG5ld0NoaWxkKTsK
IAogICAgIERPTVN0cmluZyB2ZXJzaW9uKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRWZXJzaW9uKGNv
bnN0IERPTVN0cmluZyAmKTsKQEAgLTI0NiwxMCArMjUzLDEwIEBAIGNsYXNzIEhUTUxJRnJhbWVF
bGVtZW50SW1wbCA6IHB1YmxpYyBIVE0KIHsKIHB1YmxpYzoKICAgICBIVE1MSUZyYW1lRWxlbWVu
dEltcGwoRG9jdW1lbnRQdHIgKmRvYyk7Ci0KICAgICB+SFRNTElGcmFtZUVsZW1lbnRJbXBsKCk7
CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CisgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVz
IGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzUmVxdWlyZWQ7IH0K
KyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDE7IH0KIAogICAg
IHZpcnR1YWwgYm9vbCBtYXBUb0VudHJ5KE5vZGVJbXBsOjpJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1
dGVFbnRyeSYgcmVzdWx0KSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRy
aWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqYXR0cik7CkluZGV4OiBraHRtbC9odG1sL2h0bWxf
YmxvY2tpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRt
bC9odG1sL2h0bWxfYmxvY2tpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNwpkaWZm
IC11IC1wIC1yMS4xNyBraHRtbC9odG1sL2h0bWxfYmxvY2tpbXBsLmNwcAotLS0ga2h0bWwvaHRt
bC9odG1sX2Jsb2NraW1wbC5jcHAJMTEgTWF5IDIwMDUgMDU6NDk6MzQgLTAwMDAJMS4xNworKysg
a2h0bWwvaHRtbC9odG1sX2Jsb2NraW1wbC5jcHAJOCBKdWwgMjAwNSAwNTo1MDowNSAtMDAwMApA
QCAtMzcsNyArMzcsNyBAQCB1c2luZyBuYW1lc3BhY2Uga2h0bWw7CiB1c2luZyBuYW1lc3BhY2Ug
RE9NOwogCiBIVE1MQmxvY2txdW90ZUVsZW1lbnRJbXBsOjpIVE1MQmxvY2txdW90ZUVsZW1lbnRJ
bXBsKERvY3VtZW50UHRyICpkb2MpCi0gICAgOiBIVE1MRWxlbWVudEltcGwoZG9jKQorICAgIDog
SFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6YmxvY2txdW90ZSgpLCBkb2MpCiB7CiB9CiAKQEAg
LTQ1LDExICs0NSw2IEBAIEhUTUxCbG9ja3F1b3RlRWxlbWVudEltcGw6On5IVE1MQmxvY2txdW8K
IHsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxCbG9ja3F1b3RlRWxlbWVudEltcGw6OmlkKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gSURfQkxPQ0tRVU9URTsKLX0KLQogRE9NU3RyaW5nIEhUTUxCbG9j
a3F1b3RlRWxlbWVudEltcGw6OmNpdGUoKSBjb25zdAogewogICAgIHJldHVybiBnZXRBdHRyaWJ1
dGUoQVRUUl9DSVRFKTsKQEAgLTYzLDcgKzU4LDcgQEAgdm9pZCBIVE1MQmxvY2txdW90ZUVsZW1l
bnRJbXBsOjpzZXRDaXRlKAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MRGl2RWxlbWVudElt
cGw6OkhUTUxEaXZFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAgIDogSFRNTEVsZW1l
bnRJbXBsKGRvYykKKyAgICA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6OmRpdigpLCBkb2Mp
CiB7CiB9CiAKQEAgLTcxLDExICs2Niw2IEBAIEhUTUxEaXZFbGVtZW50SW1wbDo6fkhUTUxEaXZF
bGVtZW50SW1wbCgKIHsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxEaXZFbGVtZW50SW1wbDo6aWQo
KSBjb25zdAotewotICAgIHJldHVybiBJRF9ESVY7Ci19Ci0KIGJvb2wgSFRNTERpdkVsZW1lbnRJ
bXBsOjptYXBUb0VudHJ5KE5vZGVJbXBsOjpJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYg
cmVzdWx0KSBjb25zdAogewogICAgIGlmIChhdHRyID09IEFUVFJfQUxJR04pIHsKQEAgLTEyMCw3
ICsxMTAsNyBAQCB2b2lkIEhUTUxEaXZFbGVtZW50SW1wbDo6c2V0QWxpZ24oY29uc3QgCiAvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxIUkVsZW1lbnRJbXBsOjpIVE1MSFJFbGVtZW50SW1wbChE
b2N1bWVudFB0ciAqZG9jKQotICAgIDogSFRNTEVsZW1lbnRJbXBsKGRvYykKKyAgICA6IEhUTUxF
bGVtZW50SW1wbChIVE1MTmFtZXM6OmhyKCksIGRvYykKIHsKIH0KIApAQCAtMTI4LDExICsxMTgs
NiBAQCBIVE1MSFJFbGVtZW50SW1wbDo6fkhUTUxIUkVsZW1lbnRJbXBsKCkKIHsKIH0KIAotTm9k
ZUltcGw6OklkIEhUTUxIUkVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElE
X0hSOwotfQotCiBib29sIEhUTUxIUkVsZW1lbnRJbXBsOjptYXBUb0VudHJ5KE5vZGVJbXBsOjpJ
ZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdAogewogICAgIHN3aXRj
aCAoYXR0cikgewpAQCAtMjUyLDExICsyMzcsMjEgQEAgdm9pZCBIVE1MSFJFbGVtZW50SW1wbDo6
c2V0V2lkdGgoY29uc3QgRAogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUhUTUxIZWFkaW5nRWxl
bWVudEltcGw6OkhUTUxIZWFkaW5nRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgdXNob3J0
IF90YWdpZCkKLSAgICA6IEhUTUxHZW5lcmljRWxlbWVudEltcGwoZG9jLCBfdGFnaWQpCitIVE1M
SGVhZGluZ0VsZW1lbnRJbXBsOjpIVE1MSGVhZGluZ0VsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmll
ZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50UHRyICpkb2MpCisgICAgOiBIVE1MRWxlbWVudEltcGwo
dGFnTmFtZSwgZG9jKQogewogfQogCitib29sIEhUTUxIZWFkaW5nRWxlbWVudEltcGw6OmNoZWNr
RFREKGNvbnN0IE5vZGVJbXBsKiBuZXdDaGlsZCkKK3sKKyAgICBpZiAobmV3Q2hpbGQtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjpoMSgpKSB8fCBuZXdDaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
OmgyKCkpIHx8CisgICAgICAgIG5ld0NoaWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDMoKSkg
fHwgbmV3Q2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoNCgpKSB8fAorICAgICAgICBuZXdD
aGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omg1KCkpIHx8IG5ld0NoaWxkLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6aDYoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBp
bkVpdGhlclRhZ0xpc3QobmV3Q2hpbGQpOworfQorCiBET01TdHJpbmcgSFRNTEhlYWRpbmdFbGVt
ZW50SW1wbDo6YWxpZ24oKSBjb25zdAogewogICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoQVRUUl9B
TElHTik7CkBAIC0yNzAsMTMgKzI2NSwxMyBAQCB2b2lkIEhUTUxIZWFkaW5nRWxlbWVudEltcGw6
OnNldEFsaWduKGNvCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxQYXJhZ3JhcGhFbGVtZW50
SW1wbDo6SFRNTFBhcmFncmFwaEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0gICAgOiBI
VE1MRWxlbWVudEltcGwoZG9jKQorICAgIDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6cCgp
LCBkb2MpCiB7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MUGFyYWdyYXBoRWxlbWVudEltcGw6Omlk
KCkgY29uc3QKK2Jvb2wgSFRNTFBhcmFncmFwaEVsZW1lbnRJbXBsOjpjaGVja0RURChjb25zdCBO
b2RlSW1wbCogbmV3Q2hpbGQpCiB7Ci0gICAgcmV0dXJuIElEX1A7CisgICAgcmV0dXJuIGluSW5s
aW5lVGFnTGlzdChuZXdDaGlsZCkgfHwgKGdldERvY3VtZW50KCktPmluQ29tcGF0TW9kZSgpICYm
IG5ld0NoaWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGFibGUoKSkpOwogfQogCiBib29sIEhU
TUxQYXJhZ3JhcGhFbGVtZW50SW1wbDo6bWFwVG9FbnRyeShOb2RlSW1wbDo6SWQgYXR0ciwgTWFw
cGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3QKQEAgLTMyMiw4ICszMTcsOCBAQCB2b2lk
IEhUTUxQYXJhZ3JhcGhFbGVtZW50SW1wbDo6c2V0QWxpZ24oCiAKIC8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KIAotSFRNTFByZUVsZW1lbnRJbXBsOjpIVE1MUHJlRWxlbWVudEltcGwoRG9jdW1lbnRQdHIg
KmRvYywgdW5zaWduZWQgc2hvcnQgX3RhZ2lkKQotICAgIDogSFRNTEdlbmVyaWNFbGVtZW50SW1w
bChkb2MsIF90YWdpZCkKK0hUTUxQcmVFbGVtZW50SW1wbDo6SFRNTFByZUVsZW1lbnRJbXBsKGNv
bnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50UHRyICpkb2MpCisgICAgOiBIVE1M
RWxlbWVudEltcGwodGFnTmFtZSwgZG9jKQogewogfQogCkBAIC0zNDMsMTYgKzMzOCwxMSBAQCB2
b2lkIEhUTUxQcmVFbGVtZW50SW1wbDo6c2V0V2lkdGgobG9uZyB3CiBjb25zdCBpbnQgZGVmYXVs
dE1pbmltdW1EZWxheSA9IDYwOwogCiBIVE1MTWFycXVlZUVsZW1lbnRJbXBsOjpIVE1MTWFycXVl
ZUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi06IEhUTUxFbGVtZW50SW1wbChkb2MpLAor
OiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjptYXJxdWVlKCksIGRvYyksCiAgIG1fbWluaW11
bURlbGF5KGRlZmF1bHRNaW5pbXVtRGVsYXkpCiB7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MTWFy
cXVlZUVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX01BUlFVRUU7Ci19
Ci0KIGJvb2wgSFRNTE1hcnF1ZWVFbGVtZW50SW1wbDo6bWFwVG9FbnRyeShOb2RlSW1wbDo6SWQg
YXR0ciwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3QKIHsKICAgICBzd2l0Y2gg
KGF0dHIpIHsKQEAgLTQzNCwxOSArNDI0LDMgQEAgdm9pZCBIVE1MTWFycXVlZUVsZW1lbnRJbXBs
OjpwYXJzZU1hcHBlZAogICAgICAgICAgICAgSFRNTEVsZW1lbnRJbXBsOjpwYXJzZU1hcHBlZEF0
dHJpYnV0ZShhdHRyKTsKICAgICB9CiB9Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1IVE1MTGF5
ZXJFbGVtZW50SW1wbDo6SFRNTExheWVyRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAg
ICA6IEhUTUxEaXZFbGVtZW50SW1wbCggZG9jICkKLXsKLX0KLQotSFRNTExheWVyRWxlbWVudElt
cGw6On5IVE1MTGF5ZXJFbGVtZW50SW1wbCgpCi17Ci19Ci0KLU5vZGVJbXBsOjpJZCBIVE1MTGF5
ZXJFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9MQVlFUjsKLX0KSW5k
ZXg6IGtodG1sL2h0bWwvaHRtbF9ibG9ja2ltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfYmxvY2tpbXBsLmgsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuOQpkaWZmIC11IC1wIC1yMS45IGtodG1sL2h0bWwvaHRtbF9ibG9ja2ltcGwuaAot
LS0ga2h0bWwvaHRtbC9odG1sX2Jsb2NraW1wbC5oCTExIE1heSAyMDA1IDA1OjQ5OjM0IC0wMDAw
CTEuOQorKysga2h0bWwvaHRtbC9odG1sX2Jsb2NraW1wbC5oCTggSnVsIDIwMDUgMDU6NTA6MDUg
LTAwMDAKQEAgLTI2LDcgKzI2LDYgQEAKICNkZWZpbmUgSFRNTF9CTE9DS0lNUExfSAogCiAjaW5j
bHVkZSAiaHRtbF9lbGVtZW50aW1wbC5oIgotI2luY2x1ZGUgImR0ZC5oIgogCiBuYW1lc3BhY2Ug
RE9NIHsKIApAQCAtNDAsOCArMzksOSBAQCBwdWJsaWM6CiAgICAgSFRNTEJsb2NrcXVvdGVFbGVt
ZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKTsKICAgICB+SFRNTEJsb2NrcXVvdGVFbGVtZW50SW1w
bCgpOwogCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwotCisgICAgdmlydHVhbCBIVE1MVGFn
U3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzUmVxdWly
ZWQ7IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDU7IH0K
KyAgICAKICAgICBET01TdHJpbmcgY2l0ZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0Q2l0ZShjb25z
dCBET01TdHJpbmcgJik7CiB9OwpAQCAtNTUsOCArNTUsOSBAQCBjbGFzcyBIVE1MRGl2RWxlbWVu
dEltcGwgOiBwdWJsaWMgSFRNTEVsCiBwdWJsaWM6CiAgICAgSFRNTERpdkVsZW1lbnRJbXBsKERv
Y3VtZW50UHRyICpkb2MpOwogICAgIH5IVE1MRGl2RWxlbWVudEltcGwoKTsKLQotICAgIHZpcnR1
YWwgSWQgaWQoKSBjb25zdDsKKyAgICAKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFn
UmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQorICAgIHZp
cnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gNTsgfQogICAgIAogICAgIHZp
cnR1YWwgYm9vbCBtYXBUb0VudHJ5KElkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1
bHQpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRB
dHRyaWJ1dGVJbXBsICp0b2tlbik7CkBAIC03Miw4ICs3Myw5IEBAIGNsYXNzIEhUTUxIUkVsZW1l
bnRJbXBsIDogcHVibGljIEhUTUxFbGUKIHB1YmxpYzoKICAgICBIVE1MSFJFbGVtZW50SW1wbChE
b2N1bWVudFB0ciAqZG9jKTsKICAgICB+SFRNTEhSRWxlbWVudEltcGwoKTsKLQotICAgIHZpcnR1
YWwgSWQgaWQoKSBjb25zdDsKKyAgICAKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFn
UmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNGb3JiaWRkZW47IH0KKyAgICB2
aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KICAgICAKICAgICB2
aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVz
dWx0KSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVk
QXR0cmlidXRlSW1wbCAqKTsKQEAgLTkzLDEwICs5NSwxNCBAQCBwdWJsaWM6CiAKIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KIAotY2xhc3MgSFRNTEhlYWRpbmdFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1M
R2VuZXJpY0VsZW1lbnRJbXBsCitjbGFzcyBIVE1MSGVhZGluZ0VsZW1lbnRJbXBsIDogcHVibGlj
IEhUTUxFbGVtZW50SW1wbAogewogcHVibGljOgotICAgIEhUTUxIZWFkaW5nRWxlbWVudEltcGwo
RG9jdW1lbnRQdHIgKmRvYywgdXNob3J0IF90YWdpZCk7CisgICAgSFRNTEhlYWRpbmdFbGVtZW50
SW1wbChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudFB0ciAqZG9jKTsKKwor
ICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0
dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBj
b25zdCB7IHJldHVybiA1OyB9CisJdmlydHVhbCBib29sIGNoZWNrRFREKGNvbnN0IE5vZGVJbXBs
KiBuZXdDaGlsZCk7CiAKICAgICBET01TdHJpbmcgYWxpZ24oKSBjb25zdDsKICAgICB2b2lkIHNl
dEFsaWduKGNvbnN0IERPTVN0cmluZyAmKTsKQEAgLTEwNCwyMSArMTEwLDE3IEBAIHB1YmxpYzoK
IAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0vKgotICogd2VyZSBub3QgdXNpbmcgSFRNTEVsZW1l
bnRJbXBsIGFzIHBhcmVudCBjbGFzcywgc2luY2UgYQotICogcGFyYWdyYXBoIHNob3VsZCBiZSBh
YmxlIHRvIGZsb3cgYXJvdW5kIGFsaWduZWQgb2JqZWN0cy4gVGh1cwotICogYSA8cD4gZWxlbWVu
dCBoYXMgdG8gYmUgaW5saW5lLCBhbmQgaXMgcmVuZGVyZWQgYnkKLSAqIEhUTUxCbG9ja0ltcGw6
OmNhbGNQYXJhZ3JhcGgKLSAqLwogY2xhc3MgSFRNTFBhcmFncmFwaEVsZW1lbnRJbXBsIDogcHVi
bGljIEhUTUxFbGVtZW50SW1wbAogewogcHVibGljOgogICAgIEhUTUxQYXJhZ3JhcGhFbGVtZW50
SW1wbChEb2N1bWVudFB0ciAqZG9jKTsKIAorICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRU
YWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c09wdGlvbmFsOyB9CisgICAg
dmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAzOyB9CisgICAgdmlydHVh
bCBib29sIGNoZWNrRFREKGNvbnN0IE5vZGVJbXBsKiBuZXdDaGlsZCk7CisKICAgICB2aXJ0dWFs
IGJvb2wgbWFwVG9FbnRyeShJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBj
b25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmli
dXRlSW1wbCAqYXR0cik7Ci0gICAgCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwogCiAgICAg
RE9NU3RyaW5nIGFsaWduKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRBbGlnbihjb25zdCBET01TdHJp
bmcgJik7CkBAIC0xMjYsMTMgKzEyOCwxNiBAQCBwdWJsaWM6CiAKIC8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KIAotY2xhc3MgSFRNTFByZUVsZW1lbnRJbXBsIDogcHVibGljIEhUTUxHZW5lcmljRWxlbWVu
dEltcGwKK2NsYXNzIEhUTUxQcmVFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MRWxlbWVudEltcGwK
IHsKIHB1YmxpYzoKLSAgICBIVE1MUHJlRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgdXNo
b3J0IF90YWdpZCk7CisgICAgSFRNTFByZUVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUm
IHRhZ05hbWUsIERvY3VtZW50UHRyICpkb2MpOworCisgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVz
IGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzUmVxdWlyZWQ7IH0K
KyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDU7IH0KIAogICAg
IGxvbmcgd2lkdGgoKSBjb25zdDsKLSAgICB2b2lkIHNldFdpZHRoKCBsb25nIHcgKTsKKyAgICB2
b2lkIHNldFdpZHRoKGxvbmcgdyk7CiB9OwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xNDEs
OSArMTQ2LDEwIEBAIGNsYXNzIEhUTUxNYXJxdWVlRWxlbWVudEltcGwgOiBwdWJsaWMgSFQKIHsK
IHB1YmxpYzoKICAgICBIVE1MTWFycXVlZUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpOwot
Ci0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwogICAgIAorICAgIHZpcnR1YWwgSFRNTFRhZ1N0
YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVk
OyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAzOyB9CisK
ICAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRy
eSYgcmVzdWx0KSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUo
TWFwcGVkQXR0cmlidXRlSW1wbCAqdG9rZW4pOwogCkBAIC0xNTMsMTggKzE1OSw1IEBAIHByaXZh
dGU6CiAgICAgaW50IG1fbWluaW11bURlbGF5OwogfTsKIAotLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ci1jbGFzcyBIVE1MTGF5ZXJFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MRGl2RWxlbWVudEltcGwK
LXsKLXB1YmxpYzoKLSAgICBIVE1MTGF5ZXJFbGVtZW50SW1wbCggRG9jdW1lbnRQdHIgKmRvYyAp
OwotICAgIH5IVE1MTGF5ZXJFbGVtZW50SW1wbCgpOwotCi0gICAgdmlydHVhbCBJZCBpZCgpIGNv
bnN0OwotCi0gICAgYm9vbCBmaXhlZDsKLX07Ci0KIH07IC8vbmFtZXNwYWNlCiAjZW5kaWYKSW5k
ZXg6IGtodG1sL2h0bWwvaHRtbF9jYW52YXNpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfY2FudmFzaW1wbC5jcHAsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuMwpkaWZmIC11IC1wIC1yMS4zIGtodG1sL2h0bWwvaHRtbF9jYW52YXNp
bXBsLmNwcAotLS0ga2h0bWwvaHRtbC9odG1sX2NhbnZhc2ltcGwuY3BwCTExIE1heSAyMDA1IDA1
OjQ5OjM0IC0wMDAwCTEuMworKysga2h0bWwvaHRtbC9odG1sX2NhbnZhc2ltcGwuY3BwCTggSnVs
IDIwMDUgMDU6NTA6MDUgLTAwMDAKQEAgLTU1LDcgKzU1LDcgQEAgdXNpbmcgbmFtZXNwYWNlIGto
dG1sOwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MQ2FudmFzRWxlbWVudEltcGw6OkhUTUxD
YW52YXNFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAgIDogSFRNTEltYWdlRWxlbWVu
dEltcGwoZG9jKQorICAgIDogSFRNTEltYWdlRWxlbWVudEltcGwoSFRNTE5hbWVzOjpjYW52YXMo
KSwgZG9jKQogewogfQogCkBAIC02MywxMSArNjMsNiBAQCBIVE1MQ2FudmFzRWxlbWVudEltcGw6
On5IVE1MQ2FudmFzRWxlbWVuCiB7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MQ2FudmFzRWxlbWVu
dEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfQ0FOVkFTOwotfQotCiBib29sIEhU
TUxDYW52YXNFbGVtZW50SW1wbDo6bWFwVG9FbnRyeShOb2RlSW1wbDo6SWQgYXR0ciwgTWFwcGVk
QXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3QKIHsKICAgICByZXR1cm4gSFRNTEltYWdlRWxl
bWVudEltcGw6Om1hcFRvRW50cnkoYXR0ciwgcmVzdWx0KTsKSW5kZXg6IGtodG1sL2h0bWwvaHRt
bF9jYW52YXNpbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0
bWwvaHRtbC9odG1sX2NhbnZhc2ltcGwuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yCmRpZmYg
LXUgLXAgLXIxLjIga2h0bWwvaHRtbC9odG1sX2NhbnZhc2ltcGwuaAotLS0ga2h0bWwvaHRtbC9o
dG1sX2NhbnZhc2ltcGwuaAkxMSBNYXkgMjAwNSAwNTo0OTozNCAtMDAwMAkxLjIKKysrIGtodG1s
L2h0bWwvaHRtbF9jYW52YXNpbXBsLmgJOCBKdWwgMjAwNSAwNTo1MDowNSAtMDAwMApAQCAtNDMs
MTEgKzQzLDggQEAgY2xhc3MgSFRNTENhbnZhc0VsZW1lbnRJbXBsCiB7CiBwdWJsaWM6CiAgICAg
SFRNTENhbnZhc0VsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpOwotCiAgICAgfkhUTUxDYW52
YXNFbGVtZW50SW1wbCgpOwogCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwotCiAgICAgdmly
dHVhbCBib29sIG1hcFRvRW50cnkoTm9kZUltcGw6OklkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVu
dHJ5JiByZXN1bHQpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0
ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICopOwogCkluZGV4OiBraHRtbC9odG1sL2h0bWxfZG9jdW1l
bnRpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9o
dG1sL2h0bWxfZG9jdW1lbnRpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS42MApkaWZm
IC11IC1wIC1yMS42MCBraHRtbC9odG1sL2h0bWxfZG9jdW1lbnRpbXBsLmNwcAotLS0ga2h0bWwv
aHRtbC9odG1sX2RvY3VtZW50aW1wbC5jcHAJMTEgTWF5IDIwMDUgMDA6NTg6MjggLTAwMDAJMS42
MAorKysga2h0bWwvaHRtbC9odG1sX2RvY3VtZW50aW1wbC5jcHAJOCBKdWwgMjAwNSAwNTo1MDow
NyAtMDAwMApAQCAtNjAsNiArNjAsNyBAQAogI2luY2x1ZGUgImh0bWwvaHRtbF9taXNjaW1wbC5o
IgogI2luY2x1ZGUgImh0bWwvaHRtbF9pbWFnZWltcGwuaCIKICNpbmNsdWRlICJodG1sL2h0bWxf
Zm9ybWltcGwuaCIKKyNpbmNsdWRlICJodG1sZmFjdG9yeS5oIgogCiAjaW5jbHVkZSAia2h0bWx2
aWV3LmgiCiAjaW5jbHVkZSAia2h0bWxfcGFydC5oIgpAQCAtMjQ2LDEyICsyNDcsMTQgQEAgVG9r
ZW5pemVyICpIVE1MRG9jdW1lbnRJbXBsOjpjcmVhdGVUb2tlbgogYm9vbCBIVE1MRG9jdW1lbnRJ
bXBsOjpjaGlsZEFsbG93ZWQoIE5vZGVJbXBsICpuZXdDaGlsZCApCiB7CiAgICAgLy8gIyMjIHN1
cHBvcnQgY29tbWVudHMuIGV0YyBhcyBhIGNoaWxkCi0gICAgcmV0dXJuIChuZXdDaGlsZC0+aWQo
KSA9PSBJRF9IVE1MIHx8IG5ld0NoaWxkLT5pZCgpID09IElEX0NPTU1FTlQpOworICAgIHJldHVy
biAobmV3Q2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpodG1sKCkpIHx8IG5ld0NoaWxkLT5p
c0NvbW1lbnROb2RlKCkpOwogfQogCi1FbGVtZW50SW1wbCAqSFRNTERvY3VtZW50SW1wbDo6Y3Jl
YXRlRWxlbWVudCggY29uc3QgRE9NU3RyaW5nICZuYW1lLCBpbnQgJmV4Y2VwdGlvbmNvZGUgKQor
RWxlbWVudEltcGwgKkhUTUxEb2N1bWVudEltcGw6OmNyZWF0ZUVsZW1lbnQoY29uc3QgRE9NU3Ry
aW5nICZuYW1lLCBpbnQgJmV4Y2VwdGlvbmNvZGUpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUhUTUxF
bGVtZW50KG5hbWUsIGV4Y2VwdGlvbmNvZGUpOworICAgIC8vIERvIG5vdCBjaGVjayBuYW1lIHZh
bGlkaXR5LiAgT3RoZXIgYnJvd3NlcnMgZG9uJ3QsIGFuZCBpdCB0YWtlcyB0aW1lLgorICAgIERP
TVN0cmluZyBsb3dlck5hbWUobmFtZS5sb3dlcigpKTsKKyAgICByZXR1cm4gSFRNTEVsZW1lbnRG
YWN0b3J5OjpjcmVhdGVIVE1MRWxlbWVudChBdG9taWNTdHJpbmcobG93ZXJOYW1lKSwgdGhpcywg
MCwgZmFsc2UpOwogfQogCiB2b2lkIEhUTUxEb2N1bWVudEltcGw6OnNsb3RIaXN0b3J5Q2hhbmdl
ZCgpCkluZGV4OiBraHRtbC9odG1sL2h0bWxfZG9jdW1lbnRpbXBsLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sX2RvY3VtZW50aW1wbC5oLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjI5CmRpZmYgLXUgLXAgLXIxLjI5IGtodG1sL2h0bWwvaHRt
bF9kb2N1bWVudGltcGwuaAotLS0ga2h0bWwvaHRtbC9odG1sX2RvY3VtZW50aW1wbC5oCTExIE1h
eSAyMDA1IDAwOjU4OjI4IC0wMDAwCTEuMjkKKysrIGtodG1sL2h0bWwvaHRtbF9kb2N1bWVudGlt
cGwuaAk4IEp1bCAyMDA1IDA1OjUwOjA3IC0wMDAwCkBAIC0zNCw3ICszNCw3IEBAIGNsYXNzIFFT
dHJpbmc7CiAKIG5hbWVzcGFjZSBET00gewogCi0gICAgY2xhc3MgSFRNTEVsZW1lbnRJbXBsOwor
Y2xhc3MgSFRNTEVsZW1lbnRJbXBsOwogCiBjbGFzcyBIVE1MRG9jdW1lbnRJbXBsIDogcHVibGlj
IERPTTo6RG9jdW1lbnRJbXBsLCBwdWJsaWMga2h0bWw6OkNhY2hlZE9iamVjdENsaWVudAogewpJ
bmRleDoga2h0bWwvaHRtbC9odG1sX2VsZW1lbnRpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfZWxlbWVudGltcGwuY3BwLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjg3CmRpZmYgLXUgLXAgLXIxLjg3IGtodG1sL2h0bWwvaHRtbF9l
bGVtZW50aW1wbC5jcHAKLS0tIGtodG1sL2h0bWwvaHRtbF9lbGVtZW50aW1wbC5jcHAJMTMgTWF5
IDIwMDUgMTY6NDg6NTEgLTAwMDAJMS44NworKysga2h0bWwvaHRtbC9odG1sX2VsZW1lbnRpbXBs
LmNwcAk4IEp1bCAyMDA1IDA1OjUwOjA3IC0wMDAwCkBAIC0yOCwxMiArMjgsMTMgQEAKIC8vI2Rl
ZmluZSBFVkVOVF9ERUJVRwogLy8jZGVmaW5lIFVOU1VQUE9SVEVEX0FUVFIKIAotI2luY2x1ZGUg
Imh0bWwvZHRkLmgiCiAjaW5jbHVkZSAiaHRtbC9odG1sX2VsZW1lbnRpbXBsLmgiCiAjaW5jbHVk
ZSAiaHRtbC9odG1sX2RvY3VtZW50aW1wbC5oIgogI2luY2x1ZGUgImh0bWwvaHRtbHRva2VuaXpl
ci5oIgorI2luY2x1ZGUgImh0bWxmYWN0b3J5LmgiCiAKICNpbmNsdWRlICJtaXNjL2h0bWxoYXNo
ZXMuaCIKKyNpbmNsdWRlICJtaXNjL2hhc2hzZXQuaCIKICNpbmNsdWRlICJlZGl0aW5nL3Zpc2li
bGVfdGV4dC5oIgogCiAjaW5jbHVkZSAia2h0bWx2aWV3LmgiCkBAIC01OCw4ICs1OSw4IEBAIHVz
aW5nIG5hbWVzcGFjZSBraHRtbDsKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUhUTUxFbGVtZW50SW1wbDo6
SFRNTEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0gICAgOiBTdHlsZWRFbGVtZW50SW1w
bChkb2MpCitIVE1MRWxlbWVudEltcGw6OkhUTUxFbGVtZW50SW1wbChjb25zdCBRdWFsaWZpZWRO
YW1lJiB0YWdOYW1lLCBEb2N1bWVudFB0ciAqZG9jKQorICAgIDogU3R5bGVkRWxlbWVudEltcGwo
dGFnTmFtZSwgZG9jKQogewogfQogCkBAIC02Nyw1MSArNjgsNDAgQEAgSFRNTEVsZW1lbnRJbXBs
Ojp+SFRNTEVsZW1lbnRJbXBsKCkKIHsKIH0KIAotYm9vbCBIVE1MRWxlbWVudEltcGw6OmlzSW5s
aW5lKCkgY29uc3QKK0RPTVN0cmluZyBIVE1MRWxlbWVudEltcGw6Om5vZGVOYW1lKCkgY29uc3QK
IHsKLSAgICBpZiAocmVuZGVyZXIoKSkKLSAgICAgICAgcmV0dXJuIEVsZW1lbnRJbXBsOjppc0lu
bGluZSgpOwotICAgIAotICAgIHN3aXRjaChpZCgpKSB7Ci0gICAgICAgIGNhc2UgSURfQToKLSAg
ICAgICAgY2FzZSBJRF9GT05UOgotICAgICAgICBjYXNlIElEX1RUOgotICAgICAgICBjYXNlIElE
X1U6Ci0gICAgICAgIGNhc2UgSURfQjoKLSAgICAgICAgY2FzZSBJRF9JOgotICAgICAgICBjYXNl
IElEX1M6Ci0gICAgICAgIGNhc2UgSURfU1RSSUtFOgotICAgICAgICBjYXNlIElEX0JJRzoKLSAg
ICAgICAgY2FzZSBJRF9TTUFMTDoKLSAgICAKLSAgICAgICAgICAgIC8vICVwaHJhc2UKLSAgICAg
ICAgY2FzZSBJRF9FTToKLSAgICAgICAgY2FzZSBJRF9TVFJPTkc6Ci0gICAgICAgIGNhc2UgSURf
REZOOgotICAgICAgICBjYXNlIElEX0NPREU6Ci0gICAgICAgIGNhc2UgSURfU0FNUDoKLSAgICAg
ICAgY2FzZSBJRF9LQkQ6Ci0gICAgICAgIGNhc2UgSURfVkFSOgotICAgICAgICBjYXNlIElEX0NJ
VEU6Ci0gICAgICAgIGNhc2UgSURfQUJCUjoKLSAgICAgICAgY2FzZSBJRF9BQ1JPTllNOgorICAg
IC8vIEZJWE1FOiBXb3VsZCBiZSBuaWNlIHRvIGhhdmUgYW4gYXRvbWljc3RyaW5nIGxvb2t1cCBi
YXNlZCBvZmYgdXBwZXJjYXNlIGNoYXJzIHRoYXQgZG9lcyBub3QgaGF2ZSB0byBjb3B5CisgICAg
Ly8gdGhlIHN0cmluZyBvbiBhIGhpdCBpbiB0aGUgaGFzaC4KKyAgICBpZiAoZ2V0RG9jdW1lbnQo
KS0+aXNIVE1MRG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIG1fdGFnTmFtZS5sb2NhbE5hbWUo
KS5pbXBsZW1lbnRhdGlvbigpLT51cHBlcigpOworICAgIHJldHVybiBFbGVtZW50SW1wbDo6bm9k
ZU5hbWUoKTsKK30KICAgICAKLSAgICAgICAgICAgIC8vICVzcGVjaWFsCi0gICAgICAgIGNhc2Ug
SURfU1VCOgotICAgICAgICBjYXNlIElEX1NVUDoKLSAgICAgICAgY2FzZSBJRF9TUEFOOgotICAg
ICAgICBjYXNlIElEX05PQlI6Ci0gICAgICAgIGNhc2UgSURfV0JSOgotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJl
dHVybiBFbGVtZW50SW1wbDo6aXNJbmxpbmUoKTsKLSAgICB9CitIVE1MVGFnU3RhdHVzIEhUTUxF
bGVtZW50SW1wbDo6ZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdAoreworICAgIGlmIChoYXNMb2Nh
bE5hbWUoSFRNTE5hbWVzOjpkdCgpKSB8fCBoYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpkZCgpKSkK
KyAgICAgICAgcmV0dXJuIFRhZ1N0YXR1c09wdGlvbmFsOworCisgICAgLy8gU2FtZSB2YWx1ZXMg
YXMgPHNwYW4+LiAgVGhpcyB3YXkgY3VzdG9tIHRhZyBuYW1lIGVsZW1lbnRzIHdpbGwgYmVoYXZl
IGxpa2UgaW5saW5lIHNwYW5zLgorICAgIHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsKK30KKwor
aW50IEhUTUxFbGVtZW50SW1wbDo6dGFnUHJpb3JpdHkoKSBjb25zdAoreworICAgIGlmIChoYXNM
b2NhbE5hbWUoSFRNTE5hbWVzOjphZGRyZXNzKCkpIHx8IGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6
OmRkKCkpIHx8IGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmR0KCkpIHx8IGhhc0xvY2FsTmFtZShI
VE1MTmFtZXM6Om5vc2NyaXB0KCkpKQorICAgICAgICByZXR1cm4gMzsKKyAgICBpZiAoaGFzTG9j
YWxOYW1lKEhUTUxOYW1lczo6Y2VudGVyKCkpIHx8IGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om5v
YnIoKSkpCisgICAgICAgIHJldHVybiA1OworICAgIGlmIChoYXNMb2NhbE5hbWUoSFRNTE5hbWVz
Ojpub2VtYmVkKCkpIHx8IGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om5vZnJhbWVzKCkpKQorICAg
ICAgICByZXR1cm4gMTA7CisKKyAgICAvLyBTYW1lIHZhbHVlcyBhcyA8c3Bhbj4uICBUaGlzIHdh
eSBjdXN0b20gdGFnIG5hbWUgZWxlbWVudHMgd2lsbCBiZWhhdmUgbGlrZSBpbmxpbmUgc3BhbnMu
CisgICAgcmV0dXJuIDE7CiB9CiAKIE5vZGVJbXBsICpIVE1MRWxlbWVudEltcGw6OmNsb25lTm9k
ZShib29sIGRlZXApCiB7Ci0gICAgSFRNTEVsZW1lbnRJbXBsICpjbG9uZSA9IHN0YXRpY19jYXN0
PEhUTUxFbGVtZW50SW1wbCAqPihnZXREb2N1bWVudCgpLT5jcmVhdGVIVE1MRWxlbWVudChsb2Nh
bE5hbWVQYXJ0KGlkKCkpKSk7CisgICAgSFRNTEVsZW1lbnRJbXBsICpjbG9uZSA9IEhUTUxFbGVt
ZW50RmFjdG9yeTo6Y3JlYXRlSFRNTEVsZW1lbnQobG9jYWxOYW1lKCksIGdldERvY3VtZW50KCks
IDAsIGZhbHNlKTsKICAgICBpZiAoIWNsb25lKQogICAgICAgICByZXR1cm4gMDsKIApAQCAtMzI1
LDI2ICszMTUsMTcgQEAgRE9NU3RyaW5nIEhUTUxFbGVtZW50SW1wbDo6b3V0ZXJUZXh0KCkgYwog
RG9jdW1lbnRGcmFnbWVudEltcGwgKkhUTUxFbGVtZW50SW1wbDo6Y3JlYXRlQ29udGV4dHVhbEZy
YWdtZW50KGNvbnN0IERPTVN0cmluZyAmaHRtbCkKIHsKICAgICAvLyB0aGUgZm9sbG93aW5nIGlz
IGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgZGVmaW5pdGlvbiBhcyB1c2VkIGJ5IElFCi0gICAgaWYo
IGVuZFRhZ1JlcXVpcmVtZW50KGlkKCkpID09IEZPUkJJRERFTiApCi0gICAgICAgIHJldHVybiBO
VUxMOwotICAgIC8vIElFIGRpc2FsbG93cyBpbm5lckhUTUwgb24gaW5saW5lIGVsZW1lbnRzLiBJ
IGRvbid0IHNlZSB3aHkgd2Ugc2hvdWxkIGhhdmUgdGhpcyByZXN0cmljdGlvbiwgYXMgb3VyCi0g
ICAgLy8gZGh0bWwgZW5naW5lIGNhbiBjb3BlIHdpdGggaXQuIExhcnMKLSAgICAvL2lmICggaXNJ
bmxpbmUoKSApIHJldHVybiBmYWxzZTsKLSAgICBzd2l0Y2goIGlkKCkgKSB7Ci0gICAgICAgIGNh
c2UgSURfQ09MOgotICAgICAgICBjYXNlIElEX0NPTEdST1VQOgotICAgICAgICBjYXNlIElEX0ZS
QU1FU0VUOgotICAgICAgICBjYXNlIElEX0hFQUQ6Ci0gICAgICAgIGNhc2UgSURfU1RZTEU6Ci0g
ICAgICAgIGNhc2UgSURfVElUTEU6Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBpZiAoICFnZXREb2N1bWVu
dCgpLT5pc0hUTUxEb2N1bWVudCgpICkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKGVu
ZFRhZ1JlcXVpcmVtZW50KCkgPT0gVGFnU3RhdHVzRm9yYmlkZGVuKQorICAgICAgICByZXR1cm4g
MDsKKworICAgIGlmIChoYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpjb2woKSkgfHwgaGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6Y29sZ3JvdXAoKSkgfHwgaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6ZnJh
bWVzZXQoKSkgfHwKKyAgICAgICAgaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6aGVhZCgpKSB8fCBo
YXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpzdHlsZSgpKSB8fCBoYXNMb2NhbE5hbWUoSFRNTE5hbWVz
Ojp0aXRsZSgpKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoIWdldERvY3VtZW50KCkt
PmlzSFRNTERvY3VtZW50KCkpCisgICAgICAgIHJldHVybiAwOwogCi0gICAgRG9jdW1lbnRGcmFn
bWVudEltcGwgKmZyYWdtZW50ID0gbmV3IERvY3VtZW50RnJhZ21lbnRJbXBsKCBkb2NQdHIoKSAp
OworICAgIERvY3VtZW50RnJhZ21lbnRJbXBsICpmcmFnbWVudCA9IG5ldyBEb2N1bWVudEZyYWdt
ZW50SW1wbChkb2NQdHIoKSk7CiAgICAgZnJhZ21lbnQtPnJlZigpOwogICAgIHsKICAgICAgICAg
SFRNTFRva2VuaXplciB0b2soZG9jUHRyKCksIGZyYWdtZW50KTsKQEAgLTM1OCwxNCArMzM5LDE0
IEBAIERvY3VtZW50RnJhZ21lbnRJbXBsICpIVE1MRWxlbWVudEltcGw6OmMKICAgICBpbnQgaWdu
b3JlZEV4Y2VwdGlvbkNvZGU7CiAKICAgICAvLyB3ZSBuZWVkIHRvIHBvcCA8aHRtbD4gYW5kIDxi
b2R5PiBlbGVtZW50cyBhbmQgcmVtb3ZlIDxoZWFkPiB0bwotICAgIC8vIGFjY29tYWRhdGUgZm9s
a3MgcGFzc2luZyBjb21wbGV0ZSBIVE1MIGRvY3VtZW50cyB0byBtYWtlIHRoZQorICAgIC8vIGFj
Y29tbW9kYXRlIGZvbGtzIHBhc3NpbmcgY29tcGxldGUgSFRNTCBkb2N1bWVudHMgdG8gbWFrZSB0
aGUKICAgICAvLyBjaGlsZCBvZiBhbiBlbGVtZW50LgogCiAgICAgTm9kZUltcGwgKm5leHROb2Rl
OwogICAgIGZvciAoTm9kZUltcGwgKm5vZGUgPSBmcmFnbWVudC0+Zmlyc3RDaGlsZCgpOyBub2Rl
ICE9IE5VTEw7IG5vZGUgPSBuZXh0Tm9kZSkgewogICAgICAgICBuZXh0Tm9kZSA9IG5vZGUtPm5l
eHRTaWJsaW5nKCk7CiAJbm9kZS0+cmVmKCk7Ci0gICAgICAgIGlmIChub2RlLT5pZCgpID09IElE
X0hUTUwgfHwgbm9kZS0+aWQoKSA9PSBJRF9CT0RZKSB7CisgICAgICAgIGlmIChub2RlLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6aHRtbCgpKSB8fCBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
Ym9keSgpKSkgewogCSAgICBOb2RlSW1wbCAqZmlyc3RDaGlsZCA9IG5vZGUtPmZpcnN0Q2hpbGQo
KTsKICAgICAgICAgICAgIGlmIChmaXJzdENoaWxkICE9IE5VTEwpIHsKICAgICAgICAgICAgICAg
ICBuZXh0Tm9kZSA9IGZpcnN0Q2hpbGQ7CkBAIC0zNzksOSArMzYwLDkgQEAgRG9jdW1lbnRGcmFn
bWVudEltcGwgKkhUTUxFbGVtZW50SW1wbDo6YwogICAgICAgICAgICAgICAgIGNoaWxkLT5kZXJl
ZigpOwogCSAgICB9CiAgICAgICAgICAgICBmcmFnbWVudC0+cmVtb3ZlQ2hpbGQobm9kZSwgaWdu
b3JlZEV4Y2VwdGlvbkNvZGUpOwotCX0gZWxzZSBpZiAobm9kZS0+aWQoKSA9PSBJRF9IRUFEKSB7
CisJfSBlbHNlIGlmIChub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aGVhZCgpKSkKIAkgICAg
ZnJhZ21lbnQtPnJlbW92ZUNoaWxkKG5vZGUsIGlnbm9yZWRFeGNlcHRpb25Db2RlKTsKLQl9CisK
ICAgICAgICAgLy8gSW1wb3J0YW50IHRvIGRvIHRoaXMgZGVyZWYgYWZ0ZXIgcmVtb3ZlQ2hpbGQs
IGJlY2F1c2UgaWYgdGhlIG9ubHkgdGhpbmcKICAgICAgICAgLy8ga2VlcGluZyBhIG5vZGUgYXJv
dW5kIGlzIGEgcGFyZW50IHRoYXQgaXMgbm9uLTAsIHJlbW92ZUNoaWxkIHdpbGwgbm90CiAgICAg
ICAgIC8vIGRlbGV0ZSB0aGUgbm9kZS4gVGhpcyB3b3JrcyBmaW5lIGluIEphdmFTY3JpcHQgYmVj
YXVzZSB0aGVyZSdzIGFsd2F5cwpAQCAtNDAwLDcgKzM4MSw3IEBAIERvY3VtZW50RnJhZ21lbnRJ
bXBsICpIVE1MRWxlbWVudEltcGw6OmMKIAogdm9pZCBIVE1MRWxlbWVudEltcGw6OnNldElubmVy
SFRNTChjb25zdCBET01TdHJpbmcgJmh0bWwsIGludCAmZXhjZXB0aW9uKQogewotICAgIERvY3Vt
ZW50RnJhZ21lbnRJbXBsICpmcmFnbWVudCA9IGNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCggaHRt
bCApOworICAgIERvY3VtZW50RnJhZ21lbnRJbXBsICpmcmFnbWVudCA9IGNyZWF0ZUNvbnRleHR1
YWxGcmFnbWVudChodG1sKTsKICAgICBpZiAoZnJhZ21lbnQgPT0gTlVMTCkgewogCWV4Y2VwdGlv
biA9IERPTUV4Y2VwdGlvbjo6Tk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOwogICAgICAgICBy
ZXR1cm47CkBAIC00MTgsNyArMzk5LDcgQEAgdm9pZCBIVE1MRWxlbWVudEltcGw6OnNldE91dGVy
SFRNTChjb25zdAogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIEhUTUxFbGVtZW50SW1wbCAq
cGFyZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KHApOwotICAgIERvY3VtZW50
RnJhZ21lbnRJbXBsICpmcmFnbWVudCA9IHBhcmVudC0+Y3JlYXRlQ29udGV4dHVhbEZyYWdtZW50
KCBodG1sICk7CisgICAgRG9jdW1lbnRGcmFnbWVudEltcGwgKmZyYWdtZW50ID0gcGFyZW50LT5j
cmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoaHRtbCk7CiAKICAgICBpZiAoIWZyYWdtZW50KSB7CiAJ
ZXhjZXB0aW9uID0gRE9NRXhjZXB0aW9uOjpOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI7CkBA
IC00MzQsMjkgKzQxNSwxNyBAQCB2b2lkIEhUTUxFbGVtZW50SW1wbDo6c2V0T3V0ZXJIVE1MKGNv
bnN0CiB2b2lkIEhUTUxFbGVtZW50SW1wbDo6c2V0SW5uZXJUZXh0KGNvbnN0IERPTVN0cmluZyAm
dGV4dCwgaW50ICZleGNlcHRpb24pCiB7CiAgICAgLy8gZm9sbG93aW5nIHRoZSBJRSBzcGVjcy4K
LSAgICBpZiAoZW5kVGFnUmVxdWlyZW1lbnQoaWQoKSkgPT0gRk9SQklEREVOKSB7CisgICAgaWYg
KGVuZFRhZ1JlcXVpcmVtZW50KCkgPT0gVGFnU3RhdHVzRm9yYmlkZGVuKSB7CiAJZXhjZXB0aW9u
ID0gRE9NRXhjZXB0aW9uOjpOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICAvLyBJRSBkaXNhbGxvd3MgaW5uZXJUZXh0IG9uIGlubGluZSBl
bGVtZW50cy4gSSBkb24ndCBzZWUgd2h5IHdlIHNob3VsZCBoYXZlIHRoaXMgcmVzdHJpY3Rpb24s
IGFzIG91cgotICAgIC8vIGRodG1sIGVuZ2luZSBjYW4gY29wZSB3aXRoIGl0LiBMYXJzCi0gICAg
Ly9pZiAoIGlzSW5saW5lKCkgKSByZXR1cm4gZmFsc2U7Ci0gICAgc3dpdGNoKCBpZCgpICkgewot
ICAgICAgICBjYXNlIElEX0NPTDoKLSAgICAgICAgY2FzZSBJRF9DT0xHUk9VUDoKLSAgICAgICAg
Y2FzZSBJRF9GUkFNRVNFVDoKLSAgICAgICAgY2FzZSBJRF9IRUFEOgotICAgICAgICBjYXNlIElE
X0hUTUw6Ci0gICAgICAgIGNhc2UgSURfVEFCTEU6Ci0gICAgICAgIGNhc2UgSURfVEJPRFk6Ci0g
ICAgICAgIGNhc2UgSURfVEZPT1Q6Ci0gICAgICAgIGNhc2UgSURfVEhFQUQ6Ci0gICAgICAgIGNh
c2UgSURfVFI6Ci0gICAgICAgICAgICBleGNlcHRpb24gPSBET01FeGNlcHRpb246Ok5PX01PRElG
SUNBVElPTl9BTExPV0VEX0VSUjsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgIGJyZWFrOworICAgIGlmIChoYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpj
b2woKSkgfHwgaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6Y29sZ3JvdXAoKSkgfHwgaGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6ZnJhbWVzZXQoKSkgfHwKKyAgICAgICAgaGFzTG9jYWxOYW1lKEhUTUxO
YW1lczo6aGVhZCgpKSB8fCBoYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpodG1sKCkpIHx8IGhhc0xv
Y2FsTmFtZShIVE1MTmFtZXM6OnRhYmxlKCkpIHx8IAorICAgICAgICBoYXNMb2NhbE5hbWUoSFRN
TE5hbWVzOjp0Ym9keSgpKSB8fCBoYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0Zm9vdCgpKSB8fCBo
YXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0aGVhZCgpKSB8fAorICAgICAgICBoYXNMb2NhbE5hbWUo
SFRNTE5hbWVzOjp0cigpKSkgeworICAgICAgICBleGNlcHRpb24gPSBET01FeGNlcHRpb246Ok5P
X01PRElGSUNBVElPTl9BTExPV0VEX0VSUjsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAg
IHJlbW92ZUNoaWxkcmVuKCk7CkBAIC00NjYsMjUgKzQzNSwxNyBAQCB2b2lkIEhUTUxFbGVtZW50
SW1wbDo6c2V0SW5uZXJUZXh0KGNvbnN0CiB2b2lkIEhUTUxFbGVtZW50SW1wbDo6c2V0T3V0ZXJU
ZXh0KGNvbnN0IERPTVN0cmluZyAmdGV4dCwgaW50ICZleGNlcHRpb24pCiB7CiAgICAgLy8gZm9s
bG93aW5nIHRoZSBJRSBzcGVjcy4KLSAgICBpZiggZW5kVGFnUmVxdWlyZW1lbnQoaWQoKSkgPT0g
Rk9SQklEREVOICkgeworICAgIGlmIChlbmRUYWdSZXF1aXJlbWVudCgpID09IFRhZ1N0YXR1c0Zv
cmJpZGRlbikgewogCWV4Y2VwdGlvbiA9IERPTUV4Y2VwdGlvbjo6Tk9fTU9ESUZJQ0FUSU9OX0FM
TE9XRURfRVJSOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIHN3aXRjaCggaWQoKSApIHsK
LSAgICAgICAgY2FzZSBJRF9DT0w6Ci0gICAgICAgIGNhc2UgSURfQ09MR1JPVVA6Ci0gICAgICAg
IGNhc2UgSURfRlJBTUVTRVQ6Ci0gICAgICAgIGNhc2UgSURfSEVBRDoKLSAgICAgICAgY2FzZSBJ
RF9IVE1MOgotICAgICAgICBjYXNlIElEX1RBQkxFOgotICAgICAgICBjYXNlIElEX1RCT0RZOgot
ICAgICAgICBjYXNlIElEX1RGT09UOgotICAgICAgICBjYXNlIElEX1RIRUFEOgotICAgICAgICBj
YXNlIElEX1RSOgotICAgICAgICAgICAgZXhjZXB0aW9uID0gRE9NRXhjZXB0aW9uOjpOT19NT0RJ
RklDQVRJT05fQUxMT1dFRF9FUlI7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICBicmVhazsKKworICAgIGlmIChoYXNMb2NhbE5hbWUoSFRNTE5hbWVz
Ojpjb2woKSkgfHwgaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6Y29sZ3JvdXAoKSkgfHwgaGFzTG9j
YWxOYW1lKEhUTUxOYW1lczo6ZnJhbWVzZXQoKSkgfHwKKyAgICAgICAgaGFzTG9jYWxOYW1lKEhU
TUxOYW1lczo6aGVhZCgpKSB8fCBoYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpodG1sKCkpIHx8IGhh
c0xvY2FsTmFtZShIVE1MTmFtZXM6OnRhYmxlKCkpIHx8IAorICAgICAgICBoYXNMb2NhbE5hbWUo
SFRNTE5hbWVzOjp0Ym9keSgpKSB8fCBoYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0Zm9vdCgpKSB8
fCBoYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0aGVhZCgpKSB8fAorICAgICAgICBoYXNMb2NhbE5h
bWUoSFRNTE5hbWVzOjp0cigpKSkgeworICAgICAgICBleGNlcHRpb24gPSBET01FeGNlcHRpb246
Ok5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUjsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAog
ICAgIE5vZGVJbXBsICpwYXJlbnQgPSBwYXJlbnROb2RlKCk7CkBAIC01MjUsMTcgKzQ4Niw2IEBA
IHZvaWQgSFRNTEVsZW1lbnRJbXBsOjpzZXRPdXRlclRleHQoY29uc3QKICAgICB9CiB9CiAKLQot
RE9NU3RyaW5nIEhUTUxFbGVtZW50SW1wbDo6bmFtZXNwYWNlVVJJKCkgY29uc3QKLXsKLSAgICAv
LyBGb3IgSFRNTCBkb2N1bWVudHMsIHdlIHRyZWF0IEhUTUwgZWxlbWVudHMgYXMgaGF2aW5nIG5v
IG5hbWVzcGFjZS4gQnV0IGZvciBYTUwgZG9jdW1lbnRzCi0gICAgLy8gdGhlIGVsZW1lbnRzIGhh
dmUgdGhlIG5hbWVzcGFjZSBkZWZpbmVkIGluIHRoZSBYSFRNTCBzcGVjCi0gICAgaWYgKGdldERv
Y3VtZW50KCktPmlzSFRNTERvY3VtZW50KCkpCi0gICAgICAgIHJldHVybiBET01TdHJpbmcoKTsK
LSAgICBlbHNlCi0gICAgICAgIHJldHVybiBYSFRNTF9OQU1FU1BBQ0U7Ci19Ci0KIHZvaWQgSFRN
TEVsZW1lbnRJbXBsOjphZGRIVE1MQWxpZ25tZW50KE1hcHBlZEF0dHJpYnV0ZUltcGwqIGF0dHIp
CiB7CiAgICAgLy9xRGVidWcoImFsaWdubWVudCBpcyAlcyIsIGFsaWdubWVudC5zdHJpbmcoKS5s
YXRpbjEoKSApOwpAQCAtNjgyLDkgKzYzMiw5IEBAIERPTVN0cmluZyBIVE1MRWxlbWVudEltcGw6
OnRvU3RyaW5nKCkgY28KIAlET01TdHJpbmcgcmVzdWx0ID0gb3BlblRhZ1N0YXJ0VG9TdHJpbmco
KTsKIAlyZXN1bHQgKz0gIj4iOwogCi0JaWYgKGVuZFRhZ1JlcXVpcmVtZW50KGlkKCkpID09IFJF
UVVJUkVEKSB7CisJaWYgKGVuZFRhZ1JlcXVpcmVtZW50KCkgPT0gVGFnU3RhdHVzUmVxdWlyZWQp
IHsKIAkgICAgcmVzdWx0ICs9ICI8LyI7Ci0JICAgIHJlc3VsdCArPSB0YWdOYW1lKCk7CisJICAg
IHJlc3VsdCArPSBub2RlTmFtZSgpOwogCSAgICByZXN1bHQgKz0gIj4iOwogCX0KIApAQCAtNjk0
LDcgKzY0NCw3IEBAIERPTVN0cmluZyBIVE1MRWxlbWVudEltcGw6OnRvU3RyaW5nKCkgY28KICAg
ICByZXR1cm4gRWxlbWVudEltcGw6OnRvU3RyaW5nKCk7CiB9CiAKLURPTVN0cmluZyBIVE1MRWxl
bWVudEltcGw6OmlkRE9NKCkgY29uc3QKK0RPTVN0cmluZyBIVE1MRWxlbWVudEltcGw6OmlkKCkg
Y29uc3QKIHsKICAgICByZXR1cm4gZ2V0QXR0cmlidXRlKEFUVFJfSUQpOwogfQpAQCAtNzQ5LDE1
ICs2OTksMjg3IEBAIFNoYXJlZFB0cjxIVE1MQ29sbGVjdGlvbkltcGw+IEhUTUxFbGVtZW4KICAg
ICByZXR1cm4gU2hhcmVkUHRyPEhUTUxDb2xsZWN0aW9uSW1wbD4obmV3IEhUTUxDb2xsZWN0aW9u
SW1wbCh0aGlzLCBIVE1MQ29sbGVjdGlvbkltcGw6Ok5PREVfQ0hJTERSRU4pKTsKIH0KIAotLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorLy8gRE9NIFNlY3Rpb24gMS4xLjEKK2Jvb2wgSFRNTEVsZW1lbnRJ
bXBsOjpjaGlsZEFsbG93ZWQoTm9kZUltcGwgKm5ld0NoaWxkKQoreworICAgIGlmICghRWxlbWVu
dEltcGw6OmNoaWxkQWxsb3dlZChuZXdDaGlsZCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAot
SFRNTEdlbmVyaWNFbGVtZW50SW1wbDo6SFRNTEdlbmVyaWNFbGVtZW50SW1wbChEb2N1bWVudFB0
ciAqZG9jLCB1c2hvcnQgaSkKLSAgICA6IEhUTUxFbGVtZW50SW1wbChkb2MpCisgICAgLy8gRm9y
IFhNTCBkb2N1bWVudHMsIHdlIGFyZSBub24tdmFsaWRhdGluZyBhbmQgZG8gbm90IGNoZWNrIGFn
YWluc3QgYSBEVEQsIGV2ZW4gZm9yIEhUTUwgZWxlbWVudHMuCisJaWYgKCFnZXREb2N1bWVudCgp
LT5pc0hUTUxEb2N1bWVudCgpKQorCQlyZXR1cm4gdHJ1ZTsKKwkKKwkvLyBGdXR1cmUtcHJvb2Yg
Zm9yIFhNTCBjb250ZW50IGluc2lkZSBIVE1MIGRvY3VtZW50cyAod2UgbWF5IGFsbG93IHRoaXMg
c29tZSBkYXkpLgorCWlmIChuZXdDaGlsZC0+aXNFbGVtZW50Tm9kZSgpICYmICFuZXdDaGlsZC0+
aXNIVE1MRWxlbWVudCgpKQorCQlyZXR1cm4gdHJ1ZTsKKworCS8vIEVsZW1lbnRzIHdpdGggZm9y
YmlkZGVuIHRhZyBzdGF0dXMgY2FuIG5ldmVyIGhhdmUgY2hpbGRyZW4KKwlpZiAoZW5kVGFnUmVx
dWlyZW1lbnQoKSA9PSBUYWdTdGF0dXNGb3JiaWRkZW4pCisJCXJldHVybiBmYWxzZTsKKworCS8v
IENvbW1lbnQgbm9kZXMgYXJlIGFsd2F5cyBhbGxvd2VkLgorCWlmIChuZXdDaGlsZC0+aXNDb21t
ZW50Tm9kZSgpKQorCQlyZXR1cm4gdHJ1ZTsKKworICAgIC8vIE5vdyBjYWxsIGNoZWNrRFRELgor
CXJldHVybiBjaGVja0RURChuZXdDaGlsZCk7Cit9CisKKy8vIERURCBTdHVmZgorLy8gVGhpcyB1
bmZvcnR1bmF0ZSBmdW5jdGlvbiBpcyBvbmx5IG5lZWRlZCB3aGVuIGNoZWNraW5nIGFnYWluc3Qg
dGhlIERURC4gIE90aGVyIGxhbmd1YWdlcyAobGlrZSBTVkcpIHdvbid0IG5lZWQgdGhpcy4KK2Jv
b2wgSFRNTEVsZW1lbnRJbXBsOjppc1JlY29nbml6ZWRUYWdOYW1lKGNvbnN0IFF1YWxpZmllZE5h
bWUmIHRhZ05hbWUpCit7CisgICAgc3RhdGljIEhhc2hTZXQ8RE9NU3RyaW5nSW1wbCosIFBvaW50
ZXJIYXNoPERPTVN0cmluZ0ltcGwqPiA+IHRhZ0xpc3Q7CisgICAgaWYgKHRhZ0xpc3QuaXNFbXB0
eSgpKSB7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6YSgpLmxvY2FsTmFtZVB0
cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjphYmJyKCkubG9jYWxOYW1l
UHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmFjcm9ueW0oKS5sb2Nh
bE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6YWRkcmVzcygp
LmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjphcHBs
ZXQoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6
YXJlYSgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVz
OjpiKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6
OmJhc2UoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1l
czo6YmFzZWZvbnQoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhU
TUxOYW1lczo6YmRvKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChI
VE1MTmFtZXM6OmJpZygpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQo
SFRNTE5hbWVzOjpibG9ja3F1b3RlKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0
Lmluc2VydChIVE1MTmFtZXM6OmJvZHkoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xp
c3QuaW5zZXJ0KEhUTUxOYW1lczo6YnIoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xp
c3QuaW5zZXJ0KEhUTUxOYW1lczo6YnV0dG9uKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0
YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmNhbnZhcygpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAg
ICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpjYXB0aW9uKCkubG9jYWxOYW1lUHRyKCkpOwor
ICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmNlbnRlcigpLmxvY2FsTmFtZVB0cigp
KTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpjaXRlKCkubG9jYWxOYW1lUHRy
KCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmNvZGUoKS5sb2NhbE5hbWVQ
dHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6Y29sKCkubG9jYWxOYW1l
UHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmNvbGdyb3VwKCkubG9j
YWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmRkKCkubG9j
YWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmRlbCgpLmxv
Y2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpkZm4oKS5s
b2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6ZGlyKCku
bG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmRpdigp
LmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpkbCgp
LmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpkdCgp
LmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjplbSgp
LmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjplbWJl
ZCgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpm
aWVsZHNldCgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5h
bWVzOjpmb250KCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1M
TmFtZXM6OmZvcm0oKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhU
TUxOYW1lczo6ZnJhbWUoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0
KEhUTUxOYW1lczo6ZnJhbWVzZXQoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3Qu
aW5zZXJ0KEhUTUxOYW1lczo6aGVhZCgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlz
dC5pbnNlcnQoSFRNTE5hbWVzOjpoMSgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlz
dC5pbnNlcnQoSFRNTE5hbWVzOjpoMigpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlz
dC5pbnNlcnQoSFRNTE5hbWVzOjpoMygpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlz
dC5pbnNlcnQoSFRNTE5hbWVzOjpoNCgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlz
dC5pbnNlcnQoSFRNTE5hbWVzOjpoNSgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlz
dC5pbnNlcnQoSFRNTE5hbWVzOjpoNigpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlz
dC5pbnNlcnQoSFRNTE5hbWVzOjpocigpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlz
dC5pbnNlcnQoSFRNTE5hbWVzOjpodG1sKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdM
aXN0Lmluc2VydChIVE1MTmFtZXM6OmkoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xp
c3QuaW5zZXJ0KEhUTUxOYW1lczo6aWZyYW1lKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0
YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmltZygpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAg
dGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjppbnB1dCgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAg
ICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjppbnMoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAg
ICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6aXNpbmRleCgpLmxvY2FsTmFtZVB0cigpKTsK
KyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjprYmQoKS5sb2NhbE5hbWVQdHIoKSk7
CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6a2V5Z2VuKCkubG9jYWxOYW1lUHRy
KCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmxhYmVsKCkubG9jYWxOYW1l
UHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmxheWVyKCkubG9jYWxO
YW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmxlZ2VuZCgpLmxv
Y2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpsaSgpLmxv
Y2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpsaW5rKCku
bG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6Om1hcCgp
LmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjptYXJx
dWVlKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6
Om1lbnUoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1l
czo6bWV0YSgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5h
bWVzOjpub2JyKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1M
TmFtZXM6Om5vZW1iZWQoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0
KEhUTUxOYW1lczo6bm9mcmFtZXMoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3Qu
aW5zZXJ0KEhUTUxOYW1lczo6bm9sYXllcigpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFn
TGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpub3NjcmlwdCgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAg
ICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpvYmplY3QoKS5sb2NhbE5hbWVQdHIoKSk7Cisg
ICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6b2woKS5sb2NhbE5hbWVQdHIoKSk7Cisg
ICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6b3B0Z3JvdXAoKS5sb2NhbE5hbWVQdHIo
KSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6b3B0aW9uKCkubG9jYWxOYW1l
UHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnAoKS5sb2NhbE5hbWVQ
dHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6cGFyYW0oKS5sb2NhbE5h
bWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6cGxhaW50ZXh0KCku
bG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnByZSgp
LmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpxKCku
bG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnMoKS5s
b2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6c2FtcCgp
LmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpzY3Jp
cHQoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6
c2VsZWN0KCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFt
ZXM6OnNtYWxsKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1M
TmFtZXM6OnNwYW4oKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhU
TUxOYW1lczo6c3RyaWtlKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2Vy
dChIVE1MTmFtZXM6OnN0cm9uZygpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5p
bnNlcnQoSFRNTE5hbWVzOjpzdHlsZSgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlz
dC5pbnNlcnQoSFRNTE5hbWVzOjpzdWIoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xp
c3QuaW5zZXJ0KEhUTUxOYW1lczo6c3VwKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdM
aXN0Lmluc2VydChIVE1MTmFtZXM6OnRhYmxlKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0
YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnRib2R5KCkubG9jYWxOYW1lUHRyKCkpOworICAgICAg
ICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnRkKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAg
ICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnRleHRhcmVhKCkubG9jYWxOYW1lUHRyKCkpOwor
ICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnRmb290KCkubG9jYWxOYW1lUHRyKCkp
OworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnRoKCkubG9jYWxOYW1lUHRyKCkp
OworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnRoZWFkKCkubG9jYWxOYW1lUHRy
KCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnRpdGxlKCkubG9jYWxOYW1l
UHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnRyKCkubG9jYWxOYW1l
UHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnR0KCkubG9jYWxOYW1l
UHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnUoKS5sb2NhbE5hbWVQ
dHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6dWwoKS5sb2NhbE5hbWVQ
dHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6dmFyKCkubG9jYWxOYW1l
UHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OndicigpLmxvY2FsTmFt
ZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjp4bXAoKS5sb2NhbE5h
bWVQdHIoKSk7CisgICAgfQorCisgICAgcmV0dXJuIHRhZ0xpc3QuY29udGFpbnModGFnTmFtZS5s
b2NhbE5hbWVQdHIoKSk7Cit9CisKKy8vIFRoZSB0ZXJtcyBpbmxpbmUgYW5kIGJsb2NrIGFyZSB1
c2VkIGhlcmUgbG9vc2VseS4gIERvbid0IG1ha2UgdGhlIG1pc3Rha2Ugb2YgYXNzdW1pbmcgYWxs
IGlubGluZXMgb3IgYWxsIGJsb2NrcworLy8gbmVlZCB0byBiZSBpbiB0aGVzZSB0d28gbGlzdHMu
CitIYXNoU2V0PERPTVN0cmluZ0ltcGwqLCBQb2ludGVySGFzaDxET01TdHJpbmdJbXBsKj4gPiog
aW5saW5lVGFnTGlzdCgpIHsKKyAgICBzdGF0aWMgSGFzaFNldDxET01TdHJpbmdJbXBsKiwgUG9p
bnRlckhhc2g8RE9NU3RyaW5nSW1wbCo+ID4gdGFnTGlzdDsKKyAgICBpZiAodGFnTGlzdC5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjp0dCgpLmxvY2FsTmFt
ZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjppKCkubG9jYWxOYW1l
UHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmIoKS5sb2NhbE5hbWVQ
dHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6dSgpLmxvY2FsTmFtZVB0
cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpzKCkubG9jYWxOYW1lUHRy
KCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnN0cmlrZSgpLmxvY2FsTmFt
ZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpiaWcoKS5sb2NhbE5h
bWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6c21hbGwoKS5sb2Nh
bE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6ZW0oKS5sb2Nh
bE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6c3Ryb25nKCku
bG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmRmbigp
LmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpjb2Rl
KCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnNh
bXAoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6
a2JkKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6
OnZhcigpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVz
OjpjaXRlKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFt
ZXM6OmFiYnIoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxO
YW1lczo6YWNyb255bSgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQo
SFRNTE5hbWVzOjphKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChI
VE1MTmFtZXM6OmNhbnZhcygpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNl
cnQoSFRNTE5hbWVzOjppbWcoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5z
ZXJ0KEhUTUxOYW1lczo6YXBwbGV0KCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0
Lmluc2VydChIVE1MTmFtZXM6Om9iamVjdCgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFn
TGlzdC5pbnNlcnQoSFRNTE5hbWVzOjplbWJlZCgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAg
dGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpmb250KCkubG9jYWxOYW1lUHRyKCkpOworICAgICAg
ICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmJhc2Vmb250KCkubG9jYWxOYW1lUHRyKCkpOwor
ICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmJyKCkubG9jYWxOYW1lUHRyKCkpOwor
ICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnNjcmlwdCgpLmxvY2FsTmFtZVB0cigp
KTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjptYXAoKS5sb2NhbE5hbWVQdHIo
KSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6cSgpLmxvY2FsTmFtZVB0cigp
KTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpzdWIoKS5sb2NhbE5hbWVQdHIo
KSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6c3VwKCkubG9jYWxOYW1lUHRy
KCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnNwYW4oKS5sb2NhbE5hbWVQ
dHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6YmRvKCkubG9jYWxOYW1l
UHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmlmcmFtZSgpLmxvY2Fs
TmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjppbnB1dCgpLmxv
Y2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjprZXlnZW4o
KS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6c2Vs
ZWN0KCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6
OnRleHRhcmVhKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1M
TmFtZXM6OmxhYmVsKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChI
VE1MTmFtZXM6OmJ1dHRvbigpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNl
cnQoSFRNTE5hbWVzOjppbnMoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5z
ZXJ0KEhUTUxOYW1lczo6ZGVsKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmlu
c2VydChIVE1MTmFtZXM6Om5vYnIoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3Qu
aW5zZXJ0KEhUTUxOYW1lczo6d2JyKCkubG9jYWxOYW1lUHRyKCkpOworICAgIH0KKyAgICByZXR1
cm4gJnRhZ0xpc3Q7Cit9CisKK0hhc2hTZXQ8RE9NU3RyaW5nSW1wbCosIFBvaW50ZXJIYXNoPERP
TVN0cmluZ0ltcGwqPiA+KiBibG9ja1RhZ0xpc3QoKSB7CisgICAgc3RhdGljIEhhc2hTZXQ8RE9N
U3RyaW5nSW1wbCosIFBvaW50ZXJIYXNoPERPTVN0cmluZ0ltcGwqPiA+IHRhZ0xpc3Q7CisgICAg
aWYgKHRhZ0xpc3QuaXNFbXB0eSgpKSB7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1l
czo6cCgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVz
OjpoMSgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVz
OjpoMigpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVz
OjpoMygpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVz
OjpoNCgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVz
OjpoNSgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVz
OjpoNigpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVz
Ojp1bCgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVz
OjpvbCgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVz
OjpkaXIoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1l
czo6bWVudSgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5h
bWVzOjpwcmUoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxO
YW1lczo6cGxhaW50ZXh0KCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2Vy
dChIVE1MTmFtZXM6OnhtcCgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNl
cnQoSFRNTE5hbWVzOjpkbCgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNl
cnQoSFRNTE5hbWVzOjpkaXYoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5z
ZXJ0KEhUTUxOYW1lczo6bGF5ZXIoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3Qu
aW5zZXJ0KEhUTUxOYW1lczo6Y2VudGVyKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdM
aXN0Lmluc2VydChIVE1MTmFtZXM6Om5vc2NyaXB0KCkubG9jYWxOYW1lUHRyKCkpOworICAgICAg
ICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6Om5vZnJhbWVzKCkubG9jYWxOYW1lUHRyKCkpOwor
ICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmJsb2NrcXVvdGUoKS5sb2NhbE5hbWVQ
dHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6Zm9ybSgpLmxvY2FsTmFt
ZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjppc2luZGV4KCkubG9j
YWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmhyKCkubG9j
YWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnRhYmxlKCku
bG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmZpZWxk
c2V0KCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6
OmFkZHJlc3MoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxO
YW1lczo6bGkoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxO
YW1lczo6ZGQoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxO
YW1lczo6ZHQoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxO
YW1lczo6bWFycXVlZSgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICB9CisgICAgcmV0dXJuICZ0YWdM
aXN0OworfQorCitib29sIEhUTUxFbGVtZW50SW1wbDo6aW5FaXRoZXJUYWdMaXN0KGNvbnN0IE5v
ZGVJbXBsKiBuZXdDaGlsZCkKIHsKLSAgICBtX2VsZW1lbnRJZCA9IGk7CisgICAgaWYgKG5ld0No
aWxkLT5pc1RleHROb2RlKCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAKKyAgICBp
ZiAobmV3Q2hpbGQtPmlzSFRNTEVsZW1lbnQoKSkgeworICAgICAgICBjb25zdCBIVE1MRWxlbWVu
dEltcGwqIGNoaWxkID0gc3RhdGljX2Nhc3Q8Y29uc3QgSFRNTEVsZW1lbnRJbXBsKj4obmV3Q2hp
bGQpOworICAgICAgICBpZiAoaW5saW5lVGFnTGlzdCgpLT5jb250YWlucyhjaGlsZC0+dGFnTmFt
ZSgpLmxvY2FsTmFtZVB0cigpKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBp
ZiAoYmxvY2tUYWdMaXN0KCktPmNvbnRhaW5zKGNoaWxkLT50YWdOYW1lKCkubG9jYWxOYW1lUHRy
KCkpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiAhaXNSZWNvZ25p
emVkVGFnTmFtZShjaGlsZC0+dGFnTmFtZSgpKTsgLy8gQWNjZXB0IGN1c3RvbSBodG1sIHRhZ3MK
KyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MR2VuZXJp
Y0VsZW1lbnRJbXBsOjppZCgpIGNvbnN0Citib29sIEhUTUxFbGVtZW50SW1wbDo6aW5JbmxpbmVU
YWdMaXN0KGNvbnN0IE5vZGVJbXBsKiBuZXdDaGlsZCkKIHsKLSAgICByZXR1cm4gbV9lbGVtZW50
SWQ7CisgICAgaWYgKG5ld0NoaWxkLT5pc1RleHROb2RlKCkpCisgICAgICAgIHJldHVybiB0cnVl
OworCisgICAgaWYgKG5ld0NoaWxkLT5pc0hUTUxFbGVtZW50KCkpIHsKKyAgICAgICAgY29uc3Qg
SFRNTEVsZW1lbnRJbXBsKiBjaGlsZCA9IHN0YXRpY19jYXN0PGNvbnN0IEhUTUxFbGVtZW50SW1w
bCo+KG5ld0NoaWxkKTsKKyAgICAgICAgaWYgKGlubGluZVRhZ0xpc3QoKS0+Y29udGFpbnMoY2hp
bGQtPnRhZ05hbWUoKS5sb2NhbE5hbWVQdHIoKSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgcmV0dXJuICFpc1JlY29nbml6ZWRUYWdOYW1lKGNoaWxkLT50YWdOYW1lKCkpOyAv
LyBBY2NlcHQgY3VzdG9tIGh0bWwgdGFncworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30K
KworYm9vbCBIVE1MRWxlbWVudEltcGw6OmluQmxvY2tUYWdMaXN0KGNvbnN0IE5vZGVJbXBsKiBu
ZXdDaGlsZCkKK3sKKyAgICBpZiAobmV3Q2hpbGQtPmlzVGV4dE5vZGUoKSkKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgICAgICAKKyAgICBpZiAobmV3Q2hpbGQtPmlzSFRNTEVsZW1lbnQo
KSkgeworICAgICAgICBjb25zdCBIVE1MRWxlbWVudEltcGwqIGNoaWxkID0gc3RhdGljX2Nhc3Q8
Y29uc3QgSFRNTEVsZW1lbnRJbXBsKj4obmV3Q2hpbGQpOworICAgICAgICBpZiAoYmxvY2tUYWdM
aXN0KCktPmNvbnRhaW5zKGNoaWxkLT50YWdOYW1lKCkubG9jYWxOYW1lUHRyKCkpKQorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiAhaXNSZWNvZ25pemVkVGFnTmFtZShj
aGlsZC0+dGFnTmFtZSgpKTsgLy8gQWNjZXB0IGN1c3RvbSBodG1sIHRhZ3MKKyAgICB9CisKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgSFRNTEVsZW1lbnRJbXBsOjpjaGVja0RURChjb25z
dCBOb2RlSW1wbCogbmV3Q2hpbGQpCit7CisgICAgaWYgKGhhc1RhZ05hbWUoSFRNTE5hbWVzOjph
ZGRyZXNzKCkpICYmIG5ld0NoaWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6cCgpKSkKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGluRWl0aGVyVGFnTGlzdChuZXdDaGlsZCk7CiB9
CkluZGV4OiBraHRtbC9odG1sL2h0bWxfZWxlbWVudGltcGwuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfZWxlbWVudGltcGwuaCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS4zNQpkaWZmIC11IC1wIC1yMS4zNSBraHRtbC9odG1sL2h0bWxfZWxl
bWVudGltcGwuaAotLS0ga2h0bWwvaHRtbC9odG1sX2VsZW1lbnRpbXBsLmgJMTEgTWF5IDIwMDUg
MDU6NDk6MzQgLTAwMDAJMS4zNQorKysga2h0bWwvaHRtbC9odG1sX2VsZW1lbnRpbXBsLmgJOCBK
dWwgMjAwNSAwNTo1MDowNyAtMDAwMApAQCAtMjUsMjcgKzI1LDI2IEBACiAjZGVmaW5lIEhUTUxf
RUxFTUVOVElNUExfSAogCiAjaW5jbHVkZSAieG1sL2RvbV9lbGVtZW50aW1wbC5oIgotI2luY2x1
ZGUgPHFwdHJkaWN0Lmg+CisjaW5jbHVkZSAiaHRtbG5hbWVzLmgiCiAKIG5hbWVzcGFjZSBET00g
ewogCiBjbGFzcyBEb2N1bWVudEZyYWdtZW50SW1wbDsKIGNsYXNzIERPTVN0cmluZzsKIGNsYXNz
IEhUTUxDb2xsZWN0aW9uSW1wbDsKLSAgICAKKworZW51bSBIVE1MVGFnU3RhdHVzIHsgVGFnU3Rh
dHVzT3B0aW9uYWwsIFRhZ1N0YXR1c1JlcXVpcmVkLCBUYWdTdGF0dXNGb3JiaWRkZW4gfTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgCiBjbGFzcyBIVE1MRWxlbWVudEltcGwgOiBwdWJsaWMgU3R5
bGVkRWxlbWVudEltcGwKIHsKIHB1YmxpYzoKLSAgICBIVE1MRWxlbWVudEltcGwoRG9jdW1lbnRQ
dHIgKmRvYyk7Ci0KKyAgICBIVE1MRWxlbWVudEltcGwoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFn
TmFtZSwgRG9jdW1lbnRQdHIgKmRvYyk7CiAgICAgdmlydHVhbCB+SFRNTEVsZW1lbnRJbXBsKCk7
CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNIVE1MRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7
IH0KIAotICAgIHZpcnR1YWwgYm9vbCBpc0lubGluZSgpIGNvbnN0OwotICAgICAKLSAgICB2aXJ0
dWFsIElkIGlkKCkgY29uc3QgPSAwOwotICAgIAorCXZpcnR1YWwgRE9NU3RyaW5nIG5vZGVOYW1l
KCkgY29uc3Q7CisKICAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShJZCBhdHRyLCBNYXBwZWRB
dHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCogYXR0cik7CiAKQEAgLTUzLDcgKzUyLDcg
QEAgcHVibGljOgogCiAgICAgU2hhcmVkUHRyPEhUTUxDb2xsZWN0aW9uSW1wbD4gY2hpbGRyZW4o
KTsKICAgICAKLSAgICBET01TdHJpbmcgaWRET00oKSBjb25zdDsgLy8gcmVuYW1lIHRvIGlkIGFm
dGVyIGVsaW1pbmF0aW5nIE5vZGVJbXBsOjppZCBzb21lIGRheQorICAgIERPTVN0cmluZyBpZCgp
IGNvbnN0OwogICAgIHZvaWQgc2V0SWQoY29uc3QgRE9NU3RyaW5nICZ2YWx1ZSk7CiAgICAgRE9N
U3RyaW5nIHRpdGxlKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRUaXRsZShjb25zdCBET01TdHJpbmcg
JnZhbHVlKTsKQEAgLTczLDggKzcyLDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0T3V0ZXJIVE1M
KGNvbnN0IERPTVN0cmluZyAmaHRtbCwgaW50ICZleGNlcHRpb24pOwogICAgIHZvaWQgc2V0SW5u
ZXJUZXh0KGNvbnN0IERPTVN0cmluZyAmdGV4dCwgaW50ICZleGNlcHRpb24pOwogICAgIHZvaWQg
c2V0T3V0ZXJUZXh0KGNvbnN0IERPTVN0cmluZyAmdGV4dCwgaW50ICZleGNlcHRpb24pOwotCi0g
ICAgdmlydHVhbCBET01TdHJpbmcgbmFtZXNwYWNlVVJJKCkgY29uc3Q7CiAgICAgCiAgICAgdmly
dHVhbCBib29sIGlzRm9jdXNhYmxlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlzQ29udGVu
dEVkaXRhYmxlKCkgY29uc3Q7CkBAIC04OSwyMiArODYsMjMgQEAgcHVibGljOgogCiAgICAgdmly
dHVhbCBET01TdHJpbmcgdG9TdHJpbmcoKSBjb25zdDsKIAorICAgIHZpcnR1YWwgSFRNTFRhZ1N0
YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9y
aXR5KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGNoaWxkQWxsb3dlZChOb2RlSW1wbCogbmV3
Q2hpbGQpOyAvLyBFcnJvci1jaGVja2luZyBkdXJpbmcgcGFyc2luZyB0aGF0IGNoZWNrcyB0aGUg
RFRECisKKyAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY2hlY2sgdGhlIERURCBmb3IgYSBnaXZl
biBjaGlsZCBub2RlLgorICAgIHZpcnR1YWwgYm9vbCBjaGVja0RURChjb25zdCBOb2RlSW1wbCog
bmV3Q2hpbGQpOworICAgIHN0YXRpYyBib29sIGluRWl0aGVyVGFnTGlzdChjb25zdCBOb2RlSW1w
bCogbmV3Q2hpbGQpOworICAgIHN0YXRpYyBib29sIGluSW5saW5lVGFnTGlzdChjb25zdCBOb2Rl
SW1wbCogbmV3Q2hpbGQpOworICAgIHN0YXRpYyBib29sIGluQmxvY2tUYWdMaXN0KGNvbnN0IE5v
ZGVJbXBsKiBuZXdDaGlsZCk7CisgICAgc3RhdGljIGJvb2wgaXNSZWNvZ25pemVkVGFnTmFtZShj
b25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lKTsKKwogcHJvdGVjdGVkOgogCiAgICAgLy8gZm9y
IElNRywgT0JKRUNUIGFuZCBBUFBMRVQKICAgICB2b2lkIGFkZEhUTUxBbGlnbm1lbnQoTWFwcGVk
QXR0cmlidXRlSW1wbCogaHRtbEF0dHIpOwogfTsKIAotY2xhc3MgSFRNTEdlbmVyaWNFbGVtZW50
SW1wbCA6IHB1YmxpYyBIVE1MRWxlbWVudEltcGwKLXsKLXB1YmxpYzoKLSAgICBIVE1MR2VuZXJp
Y0VsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIHVzaG9ydCBlbGVtZW50SWQpOwotICAgIHZp
cnR1YWwgSWQgaWQoKSBjb25zdDsKLQotcHJvdGVjdGVkOgotICAgIHVzaG9ydCBtX2VsZW1lbnRJ
ZDsKLX07Ci0KIH0gLy9uYW1lc3BhY2UKIAogI2VuZGlmCkluZGV4OiBraHRtbC9odG1sL2h0bWxf
Zm9ybWltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1s
L2h0bWwvaHRtbF9mb3JtaW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTcwCmRpZmYg
LXUgLXAgLXIxLjE3MCBraHRtbC9odG1sL2h0bWxfZm9ybWltcGwuY3BwCi0tLSBraHRtbC9odG1s
L2h0bWxfZm9ybWltcGwuY3BwCTI5IEp1biAyMDA1IDIwOjE0OjU3IC0wMDAwCTEuMTcwCisrKyBr
aHRtbC9odG1sL2h0bWxfZm9ybWltcGwuY3BwCTggSnVsIDIwMDUgMDU6NTA6MDkgLTAwMDAKQEAg
LTEwMyw3ICsxMDMsNyBAQCBwcml2YXRlOgogfTsKIAogSFRNTEZvcm1FbGVtZW50SW1wbDo6SFRN
TEZvcm1FbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAgIDogSFRNTEVsZW1lbnRJbXBs
KGRvYykKKyAgICA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6OmZvcm0oKSwgZG9jKQogewog
ICAgIGNvbGxlY3Rpb25JbmZvID0gMDsKICAgICBtX3Bvc3QgPSBmYWxzZTsKQEAgLTEzMCwxMSAr
MTMwLDYgQEAgSFRNTEZvcm1FbGVtZW50SW1wbDo6fkhUTUxGb3JtRWxlbWVudEltcAogICAgICAg
ICBpbWdFbGVtZW50c1tpXS0+bV9mb3JtID0gMDsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxGb3Jt
RWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfRk9STTsKLX0KLQogI2lm
IEFQUExFX0NIQU5HRVMKIAogYm9vbCBIVE1MRm9ybUVsZW1lbnRJbXBsOjpmb3JtV291bGRIYXZl
U2VjdXJlU3VibWlzc2lvbihjb25zdCBET01TdHJpbmcgJnVybCkKQEAgLTE5Miw3ICsxODcsNyBA
QCB2b2lkIEhUTUxGb3JtRWxlbWVudEltcGw6OnN1Ym1pdENsaWNrKCkKIHsKICAgICBib29sIHN1
Ym1pdEZvdW5kID0gZmFsc2U7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZvcm1FbGVt
ZW50cy5jb3VudCgpOyArK2kpIHsKLSAgICAgICAgaWYgKGZvcm1FbGVtZW50c1tpXS0+aWQoKSA9
PSBJRF9JTlBVVCkgeworICAgICAgICBpZiAoZm9ybUVsZW1lbnRzW2ldLT5oYXNMb2NhbE5hbWUo
SFRNTE5hbWVzOjppbnB1dCgpKSkgewogICAgICAgICAgICAgSFRNTElucHV0RWxlbWVudEltcGwg
KmVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50SW1wbCAqPihmb3JtRWxlbWVu
dHNbaV0pOwogICAgICAgICAgICAgaWYgKGVsZW1lbnQtPmlzU3VjY2Vzc2Z1bFN1Ym1pdEJ1dHRv
bigpICYmIGVsZW1lbnQtPnJlbmRlcmVyKCkpIHsKICAgICAgICAgICAgICAgICBzdWJtaXRGb3Vu
ZCA9IHRydWU7CkBAIC0zOTksNyArMzk0LDcgQEAgYm9vbCBIVE1MRm9ybUVsZW1lbnRJbXBsOjpm
b3JtRGF0YShGb3JtRAogCiAgICAgICAgICAgICAgICAgICAgIC8vIGlmIHRoZSBjdXJyZW50IHR5
cGUgaXMgRklMRSwgdGhlbiB3ZSBhbHNvIG5lZWQgdG8KICAgICAgICAgICAgICAgICAgICAgLy8g
aW5jbHVkZSB0aGUgZmlsZW5hbWUKLSAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQtPm5v
ZGVUeXBlKCkgPT0gTm9kZTo6RUxFTUVOVF9OT0RFICYmIGN1cnJlbnQtPmlkKCkgPT0gSURfSU5Q
VVQgJiYKKyAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQtPmhhc0xvY2FsTmFtZShIVE1M
TmFtZXM6OmlucHV0KCkpICYmCiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxI
VE1MSW5wdXRFbGVtZW50SW1wbCo+KGN1cnJlbnQpLT5pbnB1dFR5cGUoKSA9PSBIVE1MSW5wdXRF
bGVtZW50SW1wbDo6RklMRSkKICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
ICAgICAgICAgUVN0cmluZyBwYXRoID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudEltcGwq
PihjdXJyZW50KS0+dmFsdWUoKS5zdHJpbmcoKTsKQEAgLTU0Nyw3ICs1NDIsNyBAQCB2b2lkIEhU
TUxGb3JtRWxlbWVudEltcGw6OnN1Ym1pdCggYm9vbCBhCiAjaWYgQVBQTEVfQ0hBTkdFUwogICAg
ICAgICAvLyBPdXIgYXBwIG5lZWRzIHRvIGdldCBmb3JtIHZhbHVlcyBmb3IgcGFzc3dvcmQgZmll
bGRzIGZvciBkb2luZyBwYXNzd29yZCBhdXRvY29tcGxldGUsCiAgICAgICAgIC8vIHNvIHdlIGFy
ZSBtb3JlIGxlbmllbnQgaW4gcHVzaGluZyB2YWx1ZXMsIGFuZCBsZXQgdGhlIGFwcCBkZWNpZGUg
d2hhdCB0byBzYXZlIHdoZW4uCi0gICAgICAgIGlmIChjdXJyZW50LT5pZCgpID09IElEX0lOUFVU
KSB7CisgICAgICAgIGlmIChjdXJyZW50LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjppbnB1dCgp
KSkgewogICAgICAgICAgICAgSFRNTElucHV0RWxlbWVudEltcGwgKmlucHV0ID0gc3RhdGljX2Nh
c3Q8SFRNTElucHV0RWxlbWVudEltcGwqPihjdXJyZW50KTsKICAgICAgICAgICAgIGlmIChpbnB1
dC0+aW5wdXRUeXBlKCkgPT0gSFRNTElucHV0RWxlbWVudEltcGw6OlRFWFQKICAgICAgICAgICAg
ICAgICB8fCBpbnB1dC0+aW5wdXRUeXBlKCkgPT0gIEhUTUxJbnB1dEVsZW1lbnRJbXBsOjpQQVNT
V09SRApAQCAtNzA5LDcgKzcwNCw3IEBAIHZvaWQgSFRNTEZvcm1FbGVtZW50SW1wbDo6cmFkaW9D
bGlja2VkKCAKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZm9ybUVsZW1lbnRzLmNv
dW50KCk7ICsraSkgewogICAgICAgICBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbCAqY3VycmVu
dCA9IGZvcm1FbGVtZW50c1tpXTsKLSAgICAgICAgaWYgKGN1cnJlbnQtPmlkKCkgPT0gSURfSU5Q
VVQgJiYKKyAgICAgICAgaWYgKGN1cnJlbnQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmlucHV0
KCkpICYmCiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50SW1wbCo+KGN1
cnJlbnQpLT5pbnB1dFR5cGUoKSA9PSBIVE1MSW5wdXRFbGVtZW50SW1wbDo6UkFESU8gJiYKICAg
ICAgICAgICAgIGN1cnJlbnQgIT0gY2FsbGVyICYmIGN1cnJlbnQtPmZvcm0oKSA9PSBjYWxsZXIt
PmZvcm0oKSAmJiBjdXJyZW50LT5uYW1lKCkgPT0gY2FsbGVyLT5uYW1lKCkpIHsKICAgICAgICAg
ICAgIHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnRJbXBsKj4oY3VycmVudCktPnNldENoZWNr
ZWQoZmFsc2UpOwpAQCAtODY0LDggKzg1OSw4IEBAIHZvaWQgSFRNTEZvcm1FbGVtZW50SW1wbDo6
c2V0VGFyZ2V0KGNvbnMKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1IVE1MR2VuZXJpY0Zvcm1F
bGVtZW50SW1wbDo6SFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywg
SFRNTEZvcm1FbGVtZW50SW1wbCAqZikKLSAgICA6IEhUTUxFbGVtZW50SW1wbChkb2MpCitIVE1M
R2VuZXJpY0Zvcm1FbGVtZW50SW1wbDo6SFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnRQdHIgKmRvYywgSFRNTEZvcm1FbGVtZW50
SW1wbCAqZikKKyAgICA6IEhUTUxFbGVtZW50SW1wbCh0YWdOYW1lLCBkb2MpCiB7CiAgICAgbV9k
aXNhYmxlZCA9IG1fcmVhZE9ubHkgPSBmYWxzZTsKICAgICBtX2Rvcm1hbnQgPSBmYWxzZTsKQEAg
LTk2Nyw5ICs5NjIsOCBAQCB2b2lkIEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsOjpyZW1vdmVk
CiBIVE1MRm9ybUVsZW1lbnRJbXBsICpIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbDo6Z2V0Rm9y
bSgpIGNvbnN0CiB7CiAgICAgTm9kZUltcGwgKnAgPSBwYXJlbnROb2RlKCk7Ci0gICAgd2hpbGUo
cCkKLSAgICB7Ci0gICAgICAgIGlmKCBwLT5pZCgpID09IElEX0ZPUk0gKQorICAgIHdoaWxlKHAp
IHsKKyAgICAgICAgaWYgKHAtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpmb3JtKCkpKQogICAgICAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudEltcGwgKj4ocCk7CiAgICAg
ICAgIHAgPSBwLT5wYXJlbnROb2RlKCk7CiAgICAgfQpAQCAtMTE4OSw3ICsxMTgzLDcgQEAgdm9p
ZCBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbDo6c2V0VGFiSQogLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQogCiBIVE1MQnV0dG9uRWxlbWVudEltcGw6OkhUTUxCdXR0b25FbGVtZW50SW1wbChEb2N1bWVu
dFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmKQotICAgIDogSFRNTEdlbmVyaWNGb3Jt
RWxlbWVudEltcGwoZG9jLCBmKQorICAgIDogSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwoSFRN
TE5hbWVzOjpidXR0b24oKSwgZG9jLCBmKQogewogICAgIG1fdHlwZSA9IFNVQk1JVDsKICAgICBt
X2RpcnR5ID0gdHJ1ZTsKQEAgLTEyMDAsMTEgKzExOTQsNiBAQCBIVE1MQnV0dG9uRWxlbWVudElt
cGw6On5IVE1MQnV0dG9uRWxlbWVuCiB7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MQnV0dG9uRWxl
bWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfQlVUVE9OOwotfQotCiBET01T
dHJpbmcgSFRNTEJ1dHRvbkVsZW1lbnRJbXBsOjp0eXBlKCkgY29uc3QKIHsKICAgICByZXR1cm4g
Z2V0QXR0cmlidXRlKEFUVFJfVFlQRSk7CkBAIC0xMzI2LDcgKzEzMTUsNyBAQCB2b2lkIEhUTUxC
dXR0b25FbGVtZW50SW1wbDo6c2V0VmFsdWUoY29uCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhU
TUxGaWVsZFNldEVsZW1lbnRJbXBsOjpIVE1MRmllbGRTZXRFbGVtZW50SW1wbChEb2N1bWVudFB0
ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmKQotICAgOiBIVE1MR2VuZXJpY0Zvcm1FbGVt
ZW50SW1wbChkb2MsIGYpCisgICA6IEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKEhUTUxOYW1l
czo6ZmllbGRzZXQoKSwgZG9jLCBmKQogewogfQogCkBAIC0xMzM0LDE0ICsxMzIzLDE0IEBAIEhU
TUxGaWVsZFNldEVsZW1lbnRJbXBsOjp+SFRNTEZpZWxkU2V0RWwKIHsKIH0KIAotYm9vbCBIVE1M
RmllbGRTZXRFbGVtZW50SW1wbDo6aXNGb2N1c2FibGUoKSBjb25zdAorYm9vbCBIVE1MRmllbGRT
ZXRFbGVtZW50SW1wbDo6Y2hlY2tEVEQoY29uc3QgTm9kZUltcGwqIG5ld0NoaWxkKQogewotICAg
IHJldHVybiBmYWxzZTsKKwlyZXR1cm4gbmV3Q2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjps
ZWdlbmQoKSkgfHwgSFRNTEVsZW1lbnRJbXBsOjpjaGVja0RURChuZXdDaGlsZCk7CiB9CiAKLU5v
ZGVJbXBsOjpJZCBIVE1MRmllbGRTZXRFbGVtZW50SW1wbDo6aWQoKSBjb25zdAorYm9vbCBIVE1M
RmllbGRTZXRFbGVtZW50SW1wbDo6aXNGb2N1c2FibGUoKSBjb25zdAogewotICAgIHJldHVybiBJ
RF9GSUVMRFNFVDsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIERPTVN0cmluZyBIVE1MRmllbGRT
ZXRFbGVtZW50SW1wbDo6dHlwZSgpIGNvbnN0CkBAIC0xMzU3LDggKzEzNDYsMjEgQEAgUmVuZGVy
T2JqZWN0KiBIVE1MRmllbGRTZXRFbGVtZW50SW1wbDo6YwogLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQog
CiBIVE1MSW5wdXRFbGVtZW50SW1wbDo6SFRNTElucHV0RWxlbWVudEltcGwoRG9jdW1lbnRQdHIg
KmRvYywgSFRNTEZvcm1FbGVtZW50SW1wbCAqZikKLSAgICA6IEhUTUxHZW5lcmljRm9ybUVsZW1l
bnRJbXBsKGRvYywgZiksIG1faW1hZ2VMb2FkZXIoMCksIG1fdmFsdWVNYXRjaGVzUmVuZGVyZXIo
ZmFsc2UpCisgICAgOiBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbChIVE1MTmFtZXM6OmlucHV0
KCksIGRvYywgZikKK3sKKyAgICBpbml0KCk7Cit9CisKK0hUTUxJbnB1dEVsZW1lbnRJbXBsOjpI
VE1MSW5wdXRFbGVtZW50SW1wbChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVu
dFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmKQorICAgIDogSFRNTEdlbmVyaWNGb3Jt
RWxlbWVudEltcGwodGFnTmFtZSwgZG9jLCBmKQogeworICAgIGluaXQoKTsKK30KKwordm9pZCBI
VE1MSW5wdXRFbGVtZW50SW1wbDo6aW5pdCgpCit7CisgICAgbV9pbWFnZUxvYWRlciA9IDA7Cisg
ICAgbV92YWx1ZU1hdGNoZXNSZW5kZXJlciA9IGZhbHNlOwogICAgIG1fdHlwZSA9IFRFWFQ7CiAg
ICAgbV9tYXhMZW4gPSAtMTsKICAgICBtX3NpemUgPSAyMDsKQEAgLTEzNzYsOCArMTM3OCw4IEBA
IEhUTUxJbnB1dEVsZW1lbnRJbXBsOjpIVE1MSW5wdXRFbGVtZW50SW0KIAogICAgIG1fbWF4UmVz
dWx0cyA9IC0xOwogCi0gICAgaWYgKCBtX2Zvcm0gKQotICAgICAgICBtX2F1dG9jb21wbGV0ZSA9
IGYtPmF1dG9Db21wbGV0ZSgpOworICAgIGlmIChtX2Zvcm0pCisgICAgICAgIG1fYXV0b2NvbXBs
ZXRlID0gbV9mb3JtLT5hdXRvQ29tcGxldGUoKTsKIH0KIAogSFRNTElucHV0RWxlbWVudEltcGw6
On5IVE1MSW5wdXRFbGVtZW50SW1wbCgpCkBAIC0xMzg2LDExICsxMzg4LDYgQEAgSFRNTElucHV0
RWxlbWVudEltcGw6On5IVE1MSW5wdXRFbGVtZW50SQogICAgIGRlbGV0ZSBtX2ltYWdlTG9hZGVy
OwogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTElucHV0RWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gSURfSU5QVVQ7Ci19Ci0KIHZvaWQgSFRNTElucHV0RWxlbWVudEltcGw6OnNl
dFR5cGUoY29uc3QgRE9NU3RyaW5nJiB0KQogewogICAgIHR5cGVFbnVtIG5ld1R5cGU7CkBAIC0y
NDY4LDcgKzI0NjUsNyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnRJbXBsOjpzZXRVc2VNYXAoY29u
CiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxMYWJlbEVsZW1lbnRJbXBsOjpIVE1MTGFiZWxF
bGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAgIDogSFRNTEVsZW1lbnRJbXBsKGRvYykK
KyAgICA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6OmxhYmVsKCksIGRvYykKIHsKIH0KIApA
QCAtMjQ4MSwxMSArMjQ3OCw2IEBAIGJvb2wgSFRNTExhYmVsRWxlbWVudEltcGw6OmlzRm9jdXNh
YmxlKCkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MTGFiZWxFbGVt
ZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9MQUJFTDsKLX0KLQogdm9pZCBI
VE1MTGFiZWxFbGVtZW50SW1wbDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRl
SW1wbCAqYXR0cikKIHsKICAgICBzd2l0Y2goYXR0ci0+aWQoKSkKQEAgLTI1MzksNyArMjUzMSw3
IEBAIHZvaWQgSFRNTExhYmVsRWxlbWVudEltcGw6OmFjY2Vzc0tleUFjdGkKIEhUTUxGb3JtRWxl
bWVudEltcGwgKkhUTUxMYWJlbEVsZW1lbnRJbXBsOjpmb3JtKCkKIHsKICAgICBmb3IgKE5vZGVJ
bXBsICpwID0gcGFyZW50Tm9kZSgpOyBwICE9IDA7IHAgPSBwLT5wYXJlbnROb2RlKCkpIHsKLSAg
ICAgICAgaWYgKHAtPmlkKCkgPT0gSURfRk9STSkKKyAgICAgICAgaWYgKHAtPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjpmb3JtKCkpKQogICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxG
b3JtRWxlbWVudEltcGwgKj4ocCk7CiAgICAgfQogICAgIApAQCAtMjU2OSw3ICsyNTYxLDcgQEAg
dm9pZCBIVE1MTGFiZWxFbGVtZW50SW1wbDo6c2V0SHRtbEZvcihjbwogLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQogCiBIVE1MTGVnZW5kRWxlbWVudEltcGw6OkhUTUxMZWdlbmRFbGVtZW50SW1wbChEb2N1
bWVudFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmKQotOiBIVE1MR2VuZXJpY0Zvcm1F
bGVtZW50SW1wbChkb2MsIGYpCis6IEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKEhUTUxOYW1l
czo6bGVnZW5kKCksIGRvYywgZikKIHsKIH0KIApAQCAtMjU4MiwxMSArMjU3NCw2IEBAIGJvb2wg
SFRNTExlZ2VuZEVsZW1lbnRJbXBsOjppc0ZvY3VzYWJsZSgKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLU5vZGVJbXBsOjpJZCBIVE1MTGVnZW5kRWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gSURfTEVHRU5EOwotfQotCiBSZW5kZXJPYmplY3QqIEhUTUxMZWdlbmRFbGVtZW50
SW1wbDo6Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqIGFyZW5hLCBSZW5kZXJTdHlsZSogc3R5
bGUpCiB7CiAgICAgcmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRlckxlZ2VuZCh0aGlzKTsKQEAgLTI2
MjEsNyArMjYwOCw3IEBAIEVsZW1lbnRJbXBsICpIVE1MTGVnZW5kRWxlbWVudEltcGw6OmZvcm0K
IHsKICAgICAvLyBDaGVjayBpZiB0aGVyZSdzIGEgZmllbGRzZXQgYmVsb25naW5nIHRvIHRoaXMg
bGVnZW5kLgogICAgIE5vZGVJbXBsICpmaWVsZHNldCA9IHBhcmVudE5vZGUoKTsKLSAgICB3aGls
ZSAoZmllbGRzZXQgJiYgZmllbGRzZXQtPmlkKCkgIT0gSURfRklFTERTRVQpCisgICAgd2hpbGUg
KGZpZWxkc2V0ICYmICFmaWVsZHNldC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZpZWxkc2V0KCkp
KQogICAgICAgICBmaWVsZHNldCA9IGZpZWxkc2V0LT5wYXJlbnROb2RlKCk7CiAgICAgaWYgKCFm
aWVsZHNldCkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0yNjMyLDcgKzI2MTksNyBAQCBFbGVtZW50
SW1wbCAqSFRNTExlZ2VuZEVsZW1lbnRJbXBsOjpmb3JtCiAgICAgd2hpbGUgKChub2RlID0gbm9k
ZS0+dHJhdmVyc2VOZXh0Tm9kZShmaWVsZHNldCkpKSB7CiAgICAgICAgIGlmIChub2RlLT5pc0hU
TUxFbGVtZW50KCkpIHsKICAgICAgICAgICAgIEhUTUxFbGVtZW50SW1wbCAqZWxlbWVudCA9IHN0
YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCAqPihub2RlKTsKLSAgICAgICAgICAgIGlmIChlbGVt
ZW50LT5pZCgpICE9IElEX0xFR0VORCAmJiBlbGVtZW50LT5pc0dlbmVyaWNGb3JtRWxlbWVudCgp
KQorICAgICAgICAgICAgaWYgKCFlbGVtZW50LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpsZWdl
bmQoKSkgJiYgZWxlbWVudC0+aXNHZW5lcmljRm9ybUVsZW1lbnQoKSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gZWxlbWVudDsKICAgICAgICAgfQogICAgIH0KQEAgLTI2NTUsOCArMjY0MiwyMCBA
QCB2b2lkIEhUTUxMZWdlbmRFbGVtZW50SW1wbDo6YWNjZXNzS2V5QWN0CiAvLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCiAKIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6SFRNTFNlbGVjdEVsZW1lbnRJbXBsKERv
Y3VtZW50UHRyICpkb2MsIEhUTUxGb3JtRWxlbWVudEltcGwgKmYpCi0gICAgOiBIVE1MR2VuZXJp
Y0Zvcm1FbGVtZW50SW1wbChkb2MsIGYpLCBtX29wdGlvbnMoMCkKKyAgICA6IEhUTUxHZW5lcmlj
Rm9ybUVsZW1lbnRJbXBsKEhUTUxOYW1lczo6c2VsZWN0KCksIGRvYywgZiksIG1fb3B0aW9ucygw
KQogeworICAgIGluaXQoKTsKK30KKworSFRNTFNlbGVjdEVsZW1lbnRJbXBsOjpIVE1MU2VsZWN0
RWxlbWVudEltcGwoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnRQdHIgKmRv
YywgSFRNTEZvcm1FbGVtZW50SW1wbCAqZikKKyAgICA6IEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJ
bXBsKHRhZ05hbWUsIGRvYywgZiksIG1fb3B0aW9ucygwKQoreworICAgIGluaXQoKTsKK30KKwor
dm9pZCBIVE1MU2VsZWN0RWxlbWVudEltcGw6OmluaXQoKQoreworICAgIG1fb3B0aW9ucyA9IDA7
CiAgICAgbV9tdWx0aXBsZSA9IGZhbHNlOwogICAgIG1fcmVjYWxjTGlzdEl0ZW1zID0gZmFsc2U7
CiAgICAgLy8gMCBtZWFucyBpbnZhbGlkIChpLmUuIG5vdCBzZXQpCkBAIC0yNjczLDkgKzI2NzIs
MTAgQEAgSFRNTFNlbGVjdEVsZW1lbnRJbXBsOjp+SFRNTFNlbGVjdEVsZW1lbgogICAgIH0KIH0K
IAotTm9kZUltcGw6OklkIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6aWQoKSBjb25zdAorYm9vbCBI
VE1MU2VsZWN0RWxlbWVudEltcGw6OmNoZWNrRFREKGNvbnN0IE5vZGVJbXBsKiBuZXdDaGlsZCkK
IHsKLSAgICByZXR1cm4gSURfU0VMRUNUOworCXJldHVybiBuZXdDaGlsZC0+aXNUZXh0Tm9kZSgp
IHx8IG5ld0NoaWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpIHx8IG5ld0NoaWxk
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b3B0Z3JvdXAoKSkgfHwKKwkJICAgbmV3Q2hpbGQtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjpzY3JpcHQoKSk7CiB9CiAKIHZvaWQgSFRNTFNlbGVjdEVsZW1l
bnRJbXBsOjpyZWNhbGNTdHlsZSggU3R5bGVDaGFuZ2UgY2ggKQpAQCAtMjY5OSw3ICsyNjk5LDcg
QEAgbG9uZyBIVE1MU2VsZWN0RWxlbWVudEltcGw6OnNlbGVjdGVkSW5kZQogICAgIHVpbnQgbyA9
IDA7CiAgICAgUU1lbUFycmF5PEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKj4gaXRlbXMgPSBs
aXN0SXRlbXMoKTsKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGl0ZW1zLnNpemUo
KTsgaSsrKSB7Ci0gICAgICAgIGlmIChpdGVtc1tpXS0+aWQoKSA9PSBJRF9PUFRJT04pIHsKKyAg
ICAgICAgaWYgKGl0ZW1zW2ldLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvcHRpb24oKSkpIHsK
ICAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudEltcGwqPihpdGVt
c1tpXSktPnNlbGVjdGVkKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG87CiAgICAgICAgICAg
ICBvKys7CkBAIC0yNzE1LDcgKzI3MTUsNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6
c2V0U2VsZWN0ZWRJCiAgICAgUU1lbUFycmF5PEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKj4g
aXRlbXMgPSBsaXN0SXRlbXMoKTsKICAgICBpbnQgbGlzdEluZGV4OwogICAgIGZvciAobGlzdElu
ZGV4ID0gMDsgbGlzdEluZGV4IDwgaW50KGl0ZW1zLnNpemUoKSk7IGxpc3RJbmRleCsrKSB7Ci0g
ICAgICAgIGlmIChpdGVtc1tsaXN0SW5kZXhdLT5pZCgpID09IElEX09QVElPTikKKyAgICAgICAg
aWYgKGl0ZW1zW2xpc3RJbmRleF0tPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9wdGlvbigpKSkK
ICAgICAgICAgICAgIHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50SW1wbCo+KGl0ZW1zW2xp
c3RJbmRleF0pLT5zZXRTZWxlY3RlZChmYWxzZSk7CiAgICAgfQogICAgIGxpc3RJbmRleCA9IG9w
dGlvblRvTGlzdEluZGV4KGluZGV4KTsKQEAgLTI3MzEsNyArMjczMSw3IEBAIGxvbmcgSFRNTFNl
bGVjdEVsZW1lbnRJbXBsOjpsZW5ndGgoKSBjb24KICAgICB1aW50IGk7CiAgICAgUU1lbUFycmF5
PEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKj4gaXRlbXMgPSBsaXN0SXRlbXMoKTsKICAgICBm
b3IgKGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgaWYgKGl0ZW1zW2ld
LT5pZCgpID09IElEX09QVElPTikKKyAgICAgICAgaWYgKGl0ZW1zW2ldLT5oYXNMb2NhbE5hbWUo
SFRNTE5hbWVzOjpvcHRpb24oKSkpCiAgICAgICAgICAgICBsZW4rKzsKICAgICB9CiAgICAgcmV0
dXJuIGxlbjsKQEAgLTI3MzksNyArMjczOSw3IEBAIGxvbmcgSFRNTFNlbGVjdEVsZW1lbnRJbXBs
OjpsZW5ndGgoKSBjb24KIAogdm9pZCBIVE1MU2VsZWN0RWxlbWVudEltcGw6OmFkZCggSFRNTEVs
ZW1lbnRJbXBsICplbGVtZW50LCBIVE1MRWxlbWVudEltcGwgKmJlZm9yZSApCiB7Ci0gICAgaWYg
KCFlbGVtZW50IHx8IGVsZW1lbnQtPmlkKCkgIT0gSURfT1BUSU9OKQorICAgIGlmICghZWxlbWVu
dCB8fCAhZWxlbWVudC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpKQogICAgICAg
ICByZXR1cm47CiAKICAgICBpbnQgZXhjZXB0aW9uY29kZSA9IDA7CkBAIC0yNzczLDEzICsyNzcz
LDEyIEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnRJbXBsOjpmb2N1cygpCiAgICAgZ2V0RG9jdW1l
bnQoKS0+c2V0Rm9jdXNOb2RlKHRoaXMpOwogfQogCi1ET01TdHJpbmcgSFRNTFNlbGVjdEVsZW1l
bnRJbXBsOjp2YWx1ZSggKQorRE9NU3RyaW5nIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6dmFsdWUo
KQogewogICAgIHVpbnQgaTsKICAgICBRTWVtQXJyYXk8SFRNTEdlbmVyaWNGb3JtRWxlbWVudElt
cGwqPiBpdGVtcyA9IGxpc3RJdGVtcygpOwogICAgIGZvciAoaSA9IDA7IGkgPCBpdGVtcy5zaXpl
KCk7IGkrKykgewotICAgICAgICBpZiAoIGl0ZW1zW2ldLT5pZCgpID09IElEX09QVElPTgotICAg
ICAgICAgICAgJiYgc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnRJbXBsKj4oaXRlbXNbaV0p
LT5zZWxlY3RlZCgpKQorICAgICAgICBpZiAoaXRlbXNbaV0tPmhhc0xvY2FsTmFtZShIVE1MTmFt
ZXM6Om9wdGlvbigpKSAmJiBzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudEltcGwqPihpdGVt
c1tpXSktPnNlbGVjdGVkKCkpCiAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTE9w
dGlvbkVsZW1lbnRJbXBsKj4oaXRlbXNbaV0pLT52YWx1ZSgpOwogICAgIH0KICAgICByZXR1cm4g
RE9NU3RyaW5nKCIiKTsKQEAgLTI3OTMsMTMgKzI3OTIsMTMgQEAgdm9pZCBIVE1MU2VsZWN0RWxl
bWVudEltcGw6OnNldFZhbHVlKGNvbgogICAgIC8vIGFuZCBtYWtlIGl0IHRoZSBjdXJyZW50IHNl
bGVjdGlvbi4KICAgICBRTWVtQXJyYXk8SFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwqPiBpdGVt
cyA9IGxpc3RJdGVtcygpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpdGVtcy5zaXpl
KCk7IGkrKykKLSAgICAgICAgaWYgKGl0ZW1zW2ldLT5pZCgpID09IElEX09QVElPTiAmJiBzdGF0
aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudEltcGwqPihpdGVtc1tpXSktPnZhbHVlKCkgPT0gdmFs
dWUpIHsKKyAgICAgICAgaWYgKGl0ZW1zW2ldLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvcHRp
b24oKSkgJiYgc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnRJbXBsKj4oaXRlbXNbaV0pLT52
YWx1ZSgpID09IHZhbHVlKSB7CiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxl
bWVudEltcGwqPihpdGVtc1tpXSktPnNldFNlbGVjdGVkKHRydWUpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiB9CiAKLVFTdHJpbmcgSFRNTFNlbGVjdEVsZW1lbnRJbXBsOjpzdGF0
ZSggKQorUVN0cmluZyBIVE1MU2VsZWN0RWxlbWVudEltcGw6OnN0YXRlKCkKIHsKICNpZiAhQVBQ
TEVfQ0hBTkdFUwogICAgIFFTdHJpbmcgc3RhdGU7CkBAIC0yODEyLDcgKzI4MTEsNyBAQCBRU3Ry
aW5nIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6c3RhdGUoICkKICAgICBRQ2hhciBzdGF0ZUNoYXJz
W2xdOwogICAgIAogICAgIGZvcihpbnQgaSA9IDA7IGkgPCBsOyBpKyspCi0gICAgICAgIGlmKGl0
ZW1zW2ldLT5pZCgpID09IElEX09QVElPTiAmJiBzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVu
dEltcGwqPihpdGVtc1tpXSktPnNlbGVjdGVkKCkpCisgICAgICAgIGlmKGl0ZW1zW2ldLT5oYXNM
b2NhbE5hbWUoSFRNTE5hbWVzOjpvcHRpb24oKSkgJiYgc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVs
ZW1lbnRJbXBsKj4oaXRlbXNbaV0pLT5zZWxlY3RlZCgpKQogICAgICAgICAgICAgc3RhdGVDaGFy
c1tpXSA9ICdYJzsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgc3RhdGVDaGFyc1tpXSA9ICcu
JzsKQEAgLTI4NDksNyArMjg0OCw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnRJbXBsOjpyZXN0
b3JlU3RhdGUKIAogICAgIGludCBsID0gaXRlbXMuY291bnQoKTsKICAgICBmb3IoaW50IGkgPSAw
OyBpIDwgbDsgaSsrKSB7Ci0gICAgICAgIGlmKGl0ZW1zW2ldLT5pZCgpID09IElEX09QVElPTikg
eworICAgICAgICBpZihpdGVtc1tpXS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkp
KSB7CiAgICAgICAgICAgICBIVE1MT3B0aW9uRWxlbWVudEltcGwqIG9lID0gc3RhdGljX2Nhc3Q8
SFRNTE9wdGlvbkVsZW1lbnRJbXBsKj4oaXRlbXNbaV0pOwogICAgICAgICAgICAgb2UtPnNldFNl
bGVjdGVkKHN0YXRlW2ldID09ICdYJyk7CiAgICAgICAgIH0KQEAgLTI5NDEsNyArMjk0MCw3IEBA
IGJvb2wgSFRNTFNlbGVjdEVsZW1lbnRJbXBsOjphcHBlbmRGb3JtRGEKIAogICAgIHVpbnQgaTsK
ICAgICBmb3IgKGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgaWYgKGl0
ZW1zW2ldLT5pZCgpID09IElEX09QVElPTikgeworICAgICAgICBpZiAoaXRlbXNbaV0tPmhhc0xv
Y2FsTmFtZShIVE1MTmFtZXM6Om9wdGlvbigpKSkgewogICAgICAgICAgICAgSFRNTE9wdGlvbkVs
ZW1lbnRJbXBsICpvcHRpb24gPSBzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudEltcGwqPihp
dGVtc1tpXSk7CiAgICAgICAgICAgICBpZiAob3B0aW9uLT5zZWxlY3RlZCgpKSB7CiAgICAgICAg
ICAgICAgICAgZW5jb2RlZF92YWx1ZXMuYXBwZW5kRGF0YShuYW1lKCksIG9wdGlvbi0+dmFsdWUo
KSk7CkBAIC0yOTU0LDcgKzI5NTMsNyBAQCBib29sIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6YXBw
ZW5kRm9ybURhCiAgICAgLy8gaW4gYW55IGNhc2UuIG90aGVyd2lzZSB3ZSBoYXZlIG5vIGNvbnNp
c3RlbmN5IHdpdGggdGhlIERPTSBpbnRlcmZhY2UuIEZJWE1FIQogICAgIC8vIHdlIHJldHVybiB0
aGUgZmlyc3Qgb25lIGlmIGl0IHdhcyBhIGNvbWJvYm94IHNlbGVjdAogICAgIGlmICghc3VjY2Vz
c2Z1bCAmJiAhbV9tdWx0aXBsZSAmJiBtX3NpemUgPD0gMSAmJiBpdGVtcy5zaXplKCkgJiYKLSAg
ICAgICAgKGl0ZW1zWzBdLT5pZCgpID09IElEX09QVElPTikgKSB7CisgICAgICAgIChpdGVtc1sw
XS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpKSkgewogICAgICAgICBIVE1MT3B0
aW9uRWxlbWVudEltcGwgKm9wdGlvbiA9IHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50SW1w
bCo+KGl0ZW1zWzBdKTsKICAgICAgICAgaWYgKG9wdGlvbi0+dmFsdWUoKS5pc051bGwoKSkKICAg
ICAgICAgICAgIGVuY29kZWRfdmFsdWVzLmFwcGVuZERhdGEobmFtZSgpLCBvcHRpb24tPnRleHQo
KS5zdHJpbmcoKS5zdHJpcFdoaXRlU3BhY2UoKSk7CkBAIC0yOTc3LDcgKzI5NzYsNyBAQCBpbnQg
SFRNTFNlbGVjdEVsZW1lbnRJbXBsOjpvcHRpb25Ub0xpc3RJCiAgICAgZm9yICg7CiAgICAgICAg
ICBvcHRpb25JbmRleDIgPCBpbnQoaXRlbXMuc2l6ZSgpKSAmJiBvcHRpb25JbmRleDIgPD0gb3B0
aW9uSW5kZXg7CiAgICAgICAgICBsaXN0SW5kZXgrKykgeyAvLyBub3QgYSB0eXBvIQotICAgICAg
ICBpZiAoaXRlbXNbbGlzdEluZGV4XS0+aWQoKSA9PSBJRF9PUFRJT04pCisgICAgICAgIGlmIChp
dGVtc1tsaXN0SW5kZXhdLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvcHRpb24oKSkpCiAgICAg
ICAgICAgICBvcHRpb25JbmRleDIrKzsKICAgICB9CiAgICAgbGlzdEluZGV4LS07CkBAIC0yOTg4
LDEzICsyOTg3LDEzIEBAIGludCBIVE1MU2VsZWN0RWxlbWVudEltcGw6Omxpc3RUb09wdGlvbkkK
IHsKICAgICBRTWVtQXJyYXk8SFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwqPiBpdGVtcyA9IGxp
c3RJdGVtcygpOwogICAgIGlmIChsaXN0SW5kZXggPCAwIHx8IGxpc3RJbmRleCA+PSBpbnQoaXRl
bXMuc2l6ZSgpKSB8fAotICAgICAgICBpdGVtc1tsaXN0SW5kZXhdLT5pZCgpICE9IElEX09QVElP
TikKKyAgICAgICAgIWl0ZW1zW2xpc3RJbmRleF0tPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9w
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgaW50IG9wdGlvbkluZGV4ID0gMDsg
Ly8gYWN0dWFsIGluZGV4IG9mIG9wdGlvbiBub3QgY291bnRpbmcgT1BUR1JPVVAgZW50cmllcyB0
aGF0IG1heSBiZSBpbiBsaXN0CiAgICAgaW50IGk7CiAgICAgZm9yIChpID0gMDsgaSA8IGxpc3RJ
bmRleDsgaSsrKQotICAgICAgICBpZiAoaXRlbXNbaV0tPmlkKCkgPT0gSURfT1BUSU9OKQorICAg
ICAgICBpZiAoaXRlbXNbaV0tPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9wdGlvbigpKSkKICAg
ICAgICAgICAgIG9wdGlvbkluZGV4Kys7CiAgICAgcmV0dXJuIG9wdGlvbkluZGV4OwogfQpAQCAt
MzAyMCwxMyArMzAxOSwxMyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6cmVjYWxjTGlz
dEl0CiAgICAgbV9saXN0SXRlbXMucmVzaXplKDApOwogICAgIEhUTUxPcHRpb25FbGVtZW50SW1w
bCogZm91bmRTZWxlY3RlZCA9IDA7CiAgICAgd2hpbGUoY3VycmVudCkgewotICAgICAgICBpZiAo
Y3VycmVudC0+aWQoKSA9PSBJRF9PUFRHUk9VUCAmJiBjdXJyZW50LT5maXJzdENoaWxkKCkpIHsK
KyAgICAgICAgaWYgKGN1cnJlbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvcHRncm91cCgpKSAm
JiBjdXJyZW50LT5maXJzdENoaWxkKCkpIHsKICAgICAgICAgICAgIC8vICMjIyB3aGF0IGlmIG9w
dGdyb3VwIGNvbnRhaW5zIGp1c3QgY29tbWVudHM/IGRvbid0IHdhbnQgb25lIG9mIG5vIG9wdGlv
bnMgaW4gaXQuLi4KICAgICAgICAgICAgIG1fbGlzdEl0ZW1zLnJlc2l6ZShtX2xpc3RJdGVtcy5z
aXplKCkrMSk7CiAgICAgICAgICAgICBtX2xpc3RJdGVtc1ttX2xpc3RJdGVtcy5zaXplKCktMV0g
PSBzdGF0aWNfY2FzdDxIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbCo+KGN1cnJlbnQpOwogICAg
ICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQtPmZpcnN0Q2hpbGQoKTsKICAgICAgICAgfQotICAg
ICAgICBpZiAoY3VycmVudC0+aWQoKSA9PSBJRF9PUFRJT04pIHsKKyAgICAgICAgaWYgKGN1cnJl
bnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvcHRpb24oKSkpIHsKICAgICAgICAgICAgIG1fbGlz
dEl0ZW1zLnJlc2l6ZShtX2xpc3RJdGVtcy5zaXplKCkrMSk7CiAgICAgICAgICAgICBtX2xpc3RJ
dGVtc1ttX2xpc3RJdGVtcy5zaXplKCktMV0gPSBzdGF0aWNfY2FzdDxIVE1MR2VuZXJpY0Zvcm1F
bGVtZW50SW1wbCo+KGN1cnJlbnQpOwogICAgICAgICAgICAgaWYgKCFmb3VuZFNlbGVjdGVkICYm
ICFtX211bHRpcGxlICYmIG1fc2l6ZSA8PSAxKSB7CkBAIC0zMDY4LDcgKzMwNjcsNyBAQCB2b2lk
IEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6cmVzZXQoKQogICAgIFFNZW1BcnJheTxIVE1MR2VuZXJp
Y0Zvcm1FbGVtZW50SW1wbCo+IGl0ZW1zID0gbGlzdEl0ZW1zKCk7CiAgICAgdWludCBpOwogICAg
IGZvciAoaSA9IDA7IGkgPCBpdGVtcy5zaXplKCk7IGkrKykgewotICAgICAgICBpZiAoaXRlbXNb
aV0tPmlkKCkgPT0gSURfT1BUSU9OKSB7CisgICAgICAgIGlmIChpdGVtc1tpXS0+aGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpKSB7CiAgICAgICAgICAgICBIVE1MT3B0aW9uRWxlbWVu
dEltcGwgKm9wdGlvbiA9IHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50SW1wbCo+KGl0ZW1z
W2ldKTsKICAgICAgICAgICAgIGJvb2wgc2VsZWN0ZWQgPSAoIW9wdGlvbi0+Z2V0QXR0cmlidXRl
KEFUVFJfU0VMRUNURUQpLmlzTnVsbCgpKTsKICAgICAgICAgICAgIG9wdGlvbi0+c2V0U2VsZWN0
ZWQoc2VsZWN0ZWQpOwpAQCAtMzA4Niw3ICszMDg1LDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVu
dEltcGw6Om5vdGlmeU9wdGlvbgogICAgICAgICBRTWVtQXJyYXk8SFRNTEdlbmVyaWNGb3JtRWxl
bWVudEltcGwqPiBpdGVtcyA9IGxpc3RJdGVtcygpOwogICAgICAgICB1aW50IGk7CiAgICAgICAg
IGZvciAoaSA9IDA7IGkgPCBpdGVtcy5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgaWYgKGl0
ZW1zW2ldLT5pZCgpID09IElEX09QVElPTikKKyAgICAgICAgICAgIGlmIChpdGVtc1tpXS0+aGFz
TG9jYWxOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpKQogICAgICAgICAgICAgICAgIHN0YXRpY19j
YXN0PEhUTUxPcHRpb25FbGVtZW50SW1wbCo+KGl0ZW1zW2ldKS0+bV9zZWxlY3RlZCA9IChpdGVt
c1tpXSA9PSBzZWxlY3RlZE9wdGlvbik7CiAgICAgICAgIH0KICAgICB9CkBAIC0zMTMzLDcgKzMx
MzIsNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6c2V0U2l6ZShsb25nCiAvLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCiAKIEhUTUxLZXlnZW5FbGVtZW50SW1wbDo6SFRNTEtleWdlbkVsZW1lbnRJ
bXBsKERvY3VtZW50UHRyKiBkb2MsIEhUTUxGb3JtRWxlbWVudEltcGwqIGYpCi0gICAgOiBIVE1M
U2VsZWN0RWxlbWVudEltcGwoZG9jLCBmKQorICAgIDogSFRNTFNlbGVjdEVsZW1lbnRJbXBsKEhU
TUxOYW1lczo6a2V5Z2VuKCksIGRvYywgZikKIHsKICAgICBRU3RyaW5nTGlzdCBrZXlzID0gS1NT
TEtleUdlbjo6c3VwcG9ydGVkS2V5U2l6ZXMoKTsKICAgICBmb3IgKFFTdHJpbmdMaXN0OjpJdGVy
YXRvciBpID0ga2V5cy5iZWdpbigpOyBpICE9IGtleXMuZW5kKCk7ICsraSkgewpAQCAtMzE0Mywx
MSArMzE0Miw2IEBAIEhUTUxLZXlnZW5FbGVtZW50SW1wbDo6SFRNTEtleWdlbkVsZW1lbnQKICAg
ICB9CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MS2V5Z2VuRWxlbWVudEltcGw6OmlkKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gSURfS0VZR0VOOwotfQotCiBET01TdHJpbmcgSFRNTEtleWdlbkVsZW1l
bnRJbXBsOjp0eXBlKCkgY29uc3QKIHsKICAgICByZXR1cm4gImtleWdlbiI7CkBAIC0zMjAyLDcg
KzMxOTYsNyBAQCBib29sIEhUTUxLZXlnZW5FbGVtZW50SW1wbDo6YXBwZW5kRm9ybURhCiAvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxPcHRHcm91cEVsZW1lbnRJbXBsOjpIVE1MT3B0R3JvdXBF
bGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmKQotICAg
IDogSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwoZG9jLCBmKQorICAgIDogSFRNTEdlbmVyaWNG
b3JtRWxlbWVudEltcGwoSFRNTE5hbWVzOjpvcHRncm91cCgpLCBkb2MsIGYpCiB7CiB9CiAKQEAg
LTMyMTUsMTEgKzMyMDksNiBAQCBib29sIEhUTUxPcHRHcm91cEVsZW1lbnRJbXBsOjppc0ZvY3Vz
YWJsCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTE9wdEdyb3VwRWxl
bWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfT1BUR1JPVVA7Ci19Ci0KIERP
TVN0cmluZyBIVE1MT3B0R3JvdXBFbGVtZW50SW1wbDo6dHlwZSgpIGNvbnN0CiB7CiAgICAgcmV0
dXJuICJvcHRncm91cCI7CkBAIC0zMjczLDcgKzMyNjIsNyBAQCB2b2lkIEhUTUxPcHRHcm91cEVs
ZW1lbnRJbXBsOjpwYXJzZU1hcHBlCiB2b2lkIEhUTUxPcHRHcm91cEVsZW1lbnRJbXBsOjpyZWNh
bGNTZWxlY3RPcHRpb25zKCkKIHsKICAgICBOb2RlSW1wbCAqc2VsZWN0ID0gcGFyZW50Tm9kZSgp
OwotICAgIHdoaWxlIChzZWxlY3QgJiYgc2VsZWN0LT5pZCgpICE9IElEX1NFTEVDVCkKKyAgICB3
aGlsZSAoc2VsZWN0ICYmICFzZWxlY3QtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzZWxlY3QoKSkp
CiAgICAgICAgIHNlbGVjdCA9IHNlbGVjdC0+cGFyZW50Tm9kZSgpOwogICAgIGlmIChzZWxlY3Qp
CiAgICAgICAgIHN0YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50SW1wbCo+KHNlbGVjdCktPnNl
dFJlY2FsY0xpc3RJdGVtcygpOwpAQCAtMzI5Miw3ICszMjgxLDcgQEAgdm9pZCBIVE1MT3B0R3Jv
dXBFbGVtZW50SW1wbDo6c2V0TGFiZWwoYwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MT3B0
aW9uRWxlbWVudEltcGw6OkhUTUxPcHRpb25FbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCBI
VE1MRm9ybUVsZW1lbnRJbXBsICpmKQotICAgIDogSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwo
ZG9jLCBmKQorICAgIDogSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwoSFRNTE5hbWVzOjpvcHRp
b24oKSwgZG9jLCBmKQogewogICAgIG1fc2VsZWN0ZWQgPSBmYWxzZTsKIH0KQEAgLTMzMDIsMTEg
KzMyOTEsNiBAQCBib29sIEhUTUxPcHRpb25FbGVtZW50SW1wbDo6aXNGb2N1c2FibGUoCiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTE9wdGlvbkVsZW1lbnRJbXBsOjpp
ZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX09QVElPTjsKLX0KLQogRE9NU3RyaW5nIEhUTUxP
cHRpb25FbGVtZW50SW1wbDo6dHlwZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuICJvcHRpb24iOwpA
QCAtMzM1Myw4ICszMzM3LDcgQEAgbG9uZyBIVE1MT3B0aW9uRWxlbWVudEltcGw6OmluZGV4KCkg
Y29ucwogICAgIGludCBsID0gaXRlbXMuY291bnQoKTsKICAgICBpbnQgb3B0aW9uSW5kZXggPSAw
OwogICAgIGZvcihpbnQgaSA9IDA7IGkgPCBsOyBpKyspIHsKLSAgICAgICAgaWYoaXRlbXNbaV0t
PmlkKCkgPT0gSURfT1BUSU9OKQotICAgICAgICB7CisgICAgICAgIGlmIChpdGVtc1tpXS0+aGFz
TG9jYWxOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpKSB7CiAgICAgICAgICAgICBpZiAoc3RhdGlj
X2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnRJbXBsKj4oaXRlbXNbaV0pID09IHRoaXMpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIG9wdGlvbkluZGV4OwogICAgICAgICAgICAgb3B0aW9uSW5kZXgrKzsK
QEAgLTM0MTksNyArMzQwMiw3IEBAIHZvaWQgSFRNTE9wdGlvbkVsZW1lbnRJbXBsOjpjaGlsZHJl
bkNoYW4KIEhUTUxTZWxlY3RFbGVtZW50SW1wbCAqSFRNTE9wdGlvbkVsZW1lbnRJbXBsOjpnZXRT
ZWxlY3QoKSBjb25zdAogewogICAgIE5vZGVJbXBsICpzZWxlY3QgPSBwYXJlbnROb2RlKCk7Ci0g
ICAgd2hpbGUgKHNlbGVjdCAmJiBzZWxlY3QtPmlkKCkgIT0gSURfU0VMRUNUKQorICAgIHdoaWxl
IChzZWxlY3QgJiYgIXNlbGVjdC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnNlbGVjdCgpKSkKICAg
ICAgICAgc2VsZWN0ID0gc2VsZWN0LT5wYXJlbnROb2RlKCk7CiAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PEhUTUxTZWxlY3RFbGVtZW50SW1wbCo+KHNlbGVjdCk7CiB9CkBAIC0zNDQ3LDcgKzM0MzAs
NyBAQCB2b2lkIEhUTUxPcHRpb25FbGVtZW50SW1wbDo6c2V0TGFiZWwoY29uCiAvLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCiAKIEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBsOjpIVE1MVGV4dEFyZWFFbGVtZW50
SW1wbChEb2N1bWVudFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmKQotICAgIDogSFRN
TEdlbmVyaWNGb3JtRWxlbWVudEltcGwoZG9jLCBmKSwgbV92YWx1ZUlzVmFsaWQoZmFsc2UpLCBt
X3ZhbHVlTWF0Y2hlc1JlbmRlcmVyKGZhbHNlKQorICAgIDogSFRNTEdlbmVyaWNGb3JtRWxlbWVu
dEltcGwoSFRNTE5hbWVzOjp0ZXh0YXJlYSgpLCBkb2MsIGYpLCBtX3ZhbHVlSXNWYWxpZChmYWxz
ZSksIG1fdmFsdWVNYXRjaGVzUmVuZGVyZXIoZmFsc2UpCiB7CiAgICAgLy8gRFREIHJlcXVpcmVz
IHJvd3MgJiBjb2xzIGJlIHNwZWNpZmllZCwgYnV0IHdlIHdpbGwgcHJvdmlkZSByZWFzb25hYmxl
IGRlZmF1bHRzCiAgICAgbV9yb3dzID0gMjsKQEAgLTM0NjAsMTEgKzM0NDMsNiBAQCBIVE1MVGV4
dEFyZWFFbGVtZW50SW1wbDo6fkhUTUxUZXh0QXJlYUVsCiAgICAgaWYgKGdldERvY3VtZW50KCkp
IGdldERvY3VtZW50KCktPmRlcmVnaXN0ZXJNYWludGFpbnNTdGF0ZSh0aGlzKTsKIH0KIAotTm9k
ZUltcGw6OklkIEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIElEX1RFWFRBUkVBOwotfQotCiBET01TdHJpbmcgSFRNTFRleHRBcmVhRWxlbWVudEltcGw6
OnR5cGUoKSBjb25zdAogewogICAgIHJldHVybiAidGV4dGFyZWEiOwpAQCAtMzcxNCwxNyArMzY5
MiwxMiBAQCB2b2lkIEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBsOjpzZXRSb3dzKGxvCiAvLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCiAKIEhUTUxJc0luZGV4RWxlbWVudEltcGw6OkhUTUxJc0luZGV4RWxlbWVu
dEltcGwoRG9jdW1lbnRQdHIgKmRvYywgSFRNTEZvcm1FbGVtZW50SW1wbCAqZikKLSAgICA6IEhU
TUxJbnB1dEVsZW1lbnRJbXBsKGRvYywgZikKKyAgICA6IEhUTUxJbnB1dEVsZW1lbnRJbXBsKEhU
TUxOYW1lczo6aXNpbmRleCgpLCBkb2MsIGYpCiB7CiAgICAgbV90eXBlID0gVEVYVDsKICAgICBz
ZXRPdmVycmlkZU5hbWUoImlzaW5kZXgiKTsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxJc0luZGV4
RWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfSVNJTkRFWDsKLX0KLQog
dm9pZCBIVE1MSXNJbmRleEVsZW1lbnRJbXBsOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRB
dHRyaWJ1dGVJbXBsKiBhdHRyKQogewogICAgIHN3aXRjaChhdHRyLT5pZCgpKQpJbmRleDoga2h0
bWwvaHRtbC9odG1sX2Zvcm1pbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dl
YkNvcmUva2h0bWwvaHRtbC9odG1sX2Zvcm1pbXBsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
NzUKZGlmZiAtdSAtcCAtcjEuNzUga2h0bWwvaHRtbC9odG1sX2Zvcm1pbXBsLmgKLS0tIGtodG1s
L2h0bWwvaHRtbF9mb3JtaW1wbC5oCTI0IEp1biAyMDA1IDA1OjUzOjI3IC0wMDAwCTEuNzUKKysr
IGtodG1sL2h0bWwvaHRtbF9mb3JtaW1wbC5oCTggSnVsIDIwMDUgMDU6NTA6MTAgLTAwMDAKQEAg
LTY3LDcgKzY3LDggQEAgcHVibGljOgogICAgIEhUTUxGb3JtRWxlbWVudEltcGwoRG9jdW1lbnRQ
dHIgKmRvYyk7CiAgICAgdmlydHVhbCB+SFRNTEZvcm1FbGVtZW50SW1wbCgpOwogCi0gICAgdmly
dHVhbCBJZCBpZCgpIGNvbnN0OworICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1
aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9CisgICAgdmlydHVh
bCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAzOyB9CiAKICAgICB2aXJ0dWFsIHZv
aWQgYXR0YWNoKCk7CiAgICAgdmlydHVhbCB2b2lkIGRldGFjaCgpOwpAQCAtMTYxLDkgKzE2Miwx
MiBAQCBjbGFzcyBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbCA6IHB1YmxpCiAgICAgZnJpZW5k
IGNsYXNzIGtodG1sOjpSZW5kZXJGb3JtRWxlbWVudDsKIAogcHVibGljOgotICAgIEhUTUxHZW5l
cmljRm9ybUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIEhUTUxGb3JtRWxlbWVudEltcGwg
KmYgPSAwKTsKKyAgICBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbChjb25zdCBRdWFsaWZpZWRO
YW1lJiB0YWdOYW1lLCBEb2N1bWVudFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmID0g
MCk7CiAgICAgdmlydHVhbCB+SFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwoKTsKIAorICAgIHZp
cnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRh
Z1N0YXR1c1JlcXVpcmVkOyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7
IHJldHVybiAxOyB9CisKICAgICBIVE1MRm9ybUVsZW1lbnRJbXBsICpmb3JtKCkgeyByZXR1cm4g
bV9mb3JtOyB9CiAKICAgICB2aXJ0dWFsIERPTVN0cmluZyB0eXBlKCkgY29uc3QgPSAwOwpAQCAt
MjM1LDcgKzIzOSw2IEBAIGNsYXNzIEhUTUxCdXR0b25FbGVtZW50SW1wbCA6IHB1YmxpYyBIVE0K
IHsKIHB1YmxpYzoKICAgICBIVE1MQnV0dG9uRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywg
SFRNTEZvcm1FbGVtZW50SW1wbCAqZiA9IDApOwotCiAgICAgdmlydHVhbCB+SFRNTEJ1dHRvbkVs
ZW1lbnRJbXBsKCk7CiAKICAgICBlbnVtIHR5cGVFbnVtIHsKQEAgLTI0NCw3ICsyNDcsNiBAQCBw
dWJsaWM6CiAgICAgICAgIEJVVFRPTgogICAgIH07CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29u
c3Q7CiAgICAgRE9NU3RyaW5nIHR5cGUoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9pZCBwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICphdHRyKTsKQEAgLTI4MCwxMSAr
MjgyLDExIEBAIGNsYXNzIEhUTUxGaWVsZFNldEVsZW1lbnRJbXBsIDogcHVibGljIEgKIHsKIHB1
YmxpYzoKICAgICBIVE1MRmllbGRTZXRFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCBIVE1M
Rm9ybUVsZW1lbnRJbXBsICpmID0gMCk7Ci0KICAgICB2aXJ0dWFsIH5IVE1MRmllbGRTZXRFbGVt
ZW50SW1wbCgpOwotCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwogICAgIAorICAgIHZpcnR1
YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMzsgfQorCXZpcnR1YWwgYm9vbCBj
aGVja0RURChjb25zdCBOb2RlSW1wbCogbmV3Q2hpbGQpOworCiAgICAgdmlydHVhbCBib29sIGlz
Rm9jdXNhYmxlKCkgY29uc3Q7CiAgICAgCiAgICAgdmlydHVhbCBraHRtbDo6UmVuZGVyT2JqZWN0
ICpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSAqLCBraHRtbDo6UmVuZGVyU3R5bGUgKik7CkBA
IC0zMjYsOSArMzI4LDEyIEBAIHB1YmxpYzoKICAgICB9OwogCiAgICAgSFRNTElucHV0RWxlbWVu
dEltcGwoRG9jdW1lbnRQdHIgKmRvYywgSFRNTEZvcm1FbGVtZW50SW1wbCAqZiA9IDApOworICAg
IEhUTUxJbnB1dEVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3Vt
ZW50UHRyICpkb2MsIEhUTUxGb3JtRWxlbWVudEltcGwgKmYgPSAwKTsKICAgICB2aXJ0dWFsIH5I
VE1MSW5wdXRFbGVtZW50SW1wbCgpOworICAgIHZvaWQgaW5pdCgpOwogCi0gICAgdmlydHVhbCBJ
ZCBpZCgpIGNvbnN0OworICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVu
dCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c0ZvcmJpZGRlbjsgfQorICAgIHZpcnR1YWwgaW50
IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMDsgfQogCiAgICAgdmlydHVhbCBib29sIGlz
RW51bWVyYXRhYmxlKCkgY29uc3QgeyByZXR1cm4gaW5wdXRUeXBlKCkgIT0gSU1BR0U7IH0KIApA
QCAtNDU5LDkgKzQ2NCw5IEBAIHB1YmxpYzoKICAgICBIVE1MTGFiZWxFbGVtZW50SW1wbChEb2N1
bWVudFB0ciAqZG9jKTsKICAgICB2aXJ0dWFsIH5IVE1MTGFiZWxFbGVtZW50SW1wbCgpOwogCisg
ICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiA1OyB9CisKICAgICB2
aXJ0dWFsIGJvb2wgaXNGb2N1c2FibGUoKSBjb25zdDsKLSAgICAKLSAgICB2aXJ0dWFsIElkIGlk
KCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVk
QXR0cmlidXRlSW1wbCAqYXR0cik7CiAKQEAgLTQ5Niw3ICs1MDEsNiBAQCBwdWJsaWM6CiAKICAg
ICB2aXJ0dWFsIGJvb2wgaXNGb2N1c2FibGUoKSBjb25zdDsKICAgICAKLSAgICB2aXJ0dWFsIElk
IGlkKCkgY29uc3Q7CiAgICAgdmlydHVhbCBraHRtbDo6UmVuZGVyT2JqZWN0ICpjcmVhdGVSZW5k
ZXJlcihSZW5kZXJBcmVuYSAqLCBraHRtbDo6UmVuZGVyU3R5bGUgKik7CiAKICAgICB2aXJ0dWFs
IERPTVN0cmluZyB0eXBlKCkgY29uc3Q7CkBAIC01MjUsOSArNTI5LDEzIEBAIGNsYXNzIEhUTUxT
ZWxlY3RFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE0KIAogcHVibGljOgogICAgIEhUTUxTZWxlY3RF
bGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmID0gMCk7
CisgICAgSFRNTFNlbGVjdEVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUs
IERvY3VtZW50UHRyICpkb2MsIEhUTUxGb3JtRWxlbWVudEltcGwgKmYgPSAwKTsKICAgICB+SFRN
TFNlbGVjdEVsZW1lbnRJbXBsKCk7CisgICAgdm9pZCBpbml0KCk7CisKKyAgICB2aXJ0dWFsIGlu
dCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDY7IH0KKwl2aXJ0dWFsIGJvb2wgY2hlY2tE
VEQoY29uc3QgTm9kZUltcGwqIG5ld0NoaWxkKTsKIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25z
dDsKICAgICBET01TdHJpbmcgdHlwZSgpIGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lkIHJlY2Fs
Y1N0eWxlKCBTdHlsZUNoYW5nZSApOwpAQCAtNjE0LDcgKzYyMiw3IEBAIGNsYXNzIEhUTUxLZXln
ZW5FbGVtZW50SW1wbCA6IHB1YmxpYyBIVE0KIHB1YmxpYzoKICAgICBIVE1MS2V5Z2VuRWxlbWVu
dEltcGwoRG9jdW1lbnRQdHIgKmRvYywgSFRNTEZvcm1FbGVtZW50SW1wbCAqZiA9IDApOwogCi0g
ICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkg
Y29uc3QgeyByZXR1cm4gMDsgfQogCiAgICAgRE9NU3RyaW5nIHR5cGUoKSBjb25zdDsKIApAQCAt
NjM2LDcgKzY0NCw4IEBAIHB1YmxpYzoKICAgICBIVE1MT3B0R3JvdXBFbGVtZW50SW1wbChEb2N1
bWVudFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmID0gMCk7CiAgICAgdmlydHVhbCB+
SFRNTE9wdEdyb3VwRWxlbWVudEltcGwoKTsKIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsK
Kwl2aXJ0dWFsIGJvb2wgY2hlY2tEVEQoY29uc3QgTm9kZUltcGwqIG5ld0NoaWxkKSB7IHJldHVy
biBuZXdDaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9wdGlvbigpKTsgfQorCiAgICAgRE9N
U3RyaW5nIHR5cGUoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgYm9vbCBpc0ZvY3VzYWJsZSgpIGNv
bnN0OwpAQCAtNjY0LDkgKzY3MywxMiBAQCBjbGFzcyBIVE1MT3B0aW9uRWxlbWVudEltcGwgOiBw
dWJsaWMgSFRNCiBwdWJsaWM6CiAgICAgSFRNTE9wdGlvbkVsZW1lbnRJbXBsKERvY3VtZW50UHRy
ICpkb2MsIEhUTUxGb3JtRWxlbWVudEltcGwgKmYgPSAwKTsKIAorICAgIHZpcnR1YWwgSFRNTFRh
Z1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c09wdGlv
bmFsOyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAyOyB9
CisJdmlydHVhbCBib29sIGNoZWNrRFREKGNvbnN0IE5vZGVJbXBsKiBuZXdDaGlsZCkgeyByZXR1
cm4gbmV3Q2hpbGQtPmlzVGV4dE5vZGUoKTsgfQorCiAgICAgdmlydHVhbCBib29sIGlzRm9jdXNh
YmxlKCkgY29uc3Q7Ci0gICAgCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OworCiAgICAgRE9N
U3RyaW5nIHR5cGUoKSBjb25zdDsKIAogICAgIERPTVN0cmluZyB0ZXh0KCkgY29uc3Q7CkBAIC03
MTQsMTAgKzcyNiw5IEBAIHB1YmxpYzoKICAgICBIVE1MVGV4dEFyZWFFbGVtZW50SW1wbChEb2N1
bWVudFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmID0gMCk7CiAgICAgfkhUTUxUZXh0
QXJlYUVsZW1lbnRJbXBsKCk7CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CisJdmlydHVh
bCBib29sIGNoZWNrRFREKGNvbnN0IE5vZGVJbXBsKiBuZXdDaGlsZCkgeyByZXR1cm4gbmV3Q2hp
bGQtPmlzVGV4dE5vZGUoKTsgfQogCiAgICAgbG9uZyBjb2xzKCkgY29uc3QgeyByZXR1cm4gbV9j
b2xzOyB9Ci0KICAgICBsb25nIHJvd3MoKSBjb25zdCB7IHJldHVybiBtX3Jvd3M7IH0KIAogICAg
IFdyYXBNZXRob2Qgd3JhcCgpIGNvbnN0IHsgcmV0dXJuIG1fd3JhcDsgfQpAQCAtNzg1LDcgKzc5
Niw4IEBAIGNsYXNzIEhUTUxJc0luZGV4RWxlbWVudEltcGwgOiBwdWJsaWMgSFQKIHB1YmxpYzoK
ICAgICBIVE1MSXNJbmRleEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIEhUTUxGb3JtRWxl
bWVudEltcGwgKmYgPSAwKTsKIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdT
dGF0dXNGb3JiaWRkZW47IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsg
cmV0dXJuIDA7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBw
ZWRBdHRyaWJ1dGVJbXBsICphdHRyKTsKIApJbmRleDoga2h0bWwvaHRtbC9odG1sX2hlYWRpbXBs
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9odG1sL2h0
bWxfaGVhZGltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjUwCmRpZmYgLXUgLXAgLXIx
LjUwIGtodG1sL2h0bWwvaHRtbF9oZWFkaW1wbC5jcHAKLS0tIGtodG1sL2h0bWwvaHRtbF9oZWFk
aW1wbC5jcHAJMjIgSnVuIDIwMDUgMTg6MjI6MDEgLTAwMDAJMS41MAorKysga2h0bWwvaHRtbC9o
dG1sX2hlYWRpbXBsLmNwcAk4IEp1bCAyMDA1IDA1OjUwOjEwIC0wMDAwCkBAIC00Niw3ICs0Niw3
IEBAIHVzaW5nIG5hbWVzcGFjZSBET007CiB1c2luZyBuYW1lc3BhY2Uga2h0bWw7CiAKIEhUTUxC
YXNlRWxlbWVudEltcGw6OkhUTUxCYXNlRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAg
ICA6IEhUTUxFbGVtZW50SW1wbChkb2MpCisgICAgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVz
OjpiYXNlKCksIGRvYykKIHsKIH0KIApAQCAtNTQsMTEgKzU0LDYgQEAgSFRNTEJhc2VFbGVtZW50
SW1wbDo6fkhUTUxCYXNlRWxlbWVudEltcAogewogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTEJhc2VF
bGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9CQVNFOwotfQotCiB2b2lk
IEhUTUxCYXNlRWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0
ZUltcGwgKmF0dHIpCiB7CiAgICAgc3dpdGNoKGF0dHItPmlkKCkpCkBAIC0xMTksNyArMTE0LDcg
QEAgdm9pZCBIVE1MQmFzZUVsZW1lbnRJbXBsOjpzZXRUYXJnZXQoY29ucwogLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQogCiBIVE1MTGlua0VsZW1lbnRJbXBsOjpIVE1MTGlua0VsZW1lbnRJbXBsKERvY3Vt
ZW50UHRyICpkb2MpCi0gICAgOiBIVE1MRWxlbWVudEltcGwoZG9jKQorICAgIDogSFRNTEVsZW1l
bnRJbXBsKEhUTUxOYW1lczo6bGluaygpLCBkb2MpCiB7CiAgICAgbV9zaGVldCA9IDA7CiAgICAg
bV9sb2FkaW5nID0gZmFsc2U7CkBAIC0xMzQsMTEgKzEyOSw2IEBAIEhUTUxMaW5rRWxlbWVudElt
cGw6On5IVE1MTGlua0VsZW1lbnRJbXAKICAgICBpZihtX2NhY2hlZFNoZWV0KSBtX2NhY2hlZFNo
ZWV0LT5kZXJlZih0aGlzKTsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxMaW5rRWxlbWVudEltcGw6
OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfTElOSzsKLX0KLQogdm9pZCBIVE1MTGlua0Vs
ZW1lbnRJbXBsOjpzZXREaXNhYmxlZFN0YXRlKGJvb2wgX2Rpc2FibGVkKQogewogICAgIGludCBv
bGREaXNhYmxlZFN0YXRlID0gbV9kaXNhYmxlZFN0YXRlOwpAQCAtNDIzLDcgKzQxMyw3IEBAIHZv
aWQgSFRNTExpbmtFbGVtZW50SW1wbDo6c2V0VHlwZShjb25zdCAKIAogLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQogCi1IVE1MTWV0YUVsZW1lbnRJbXBsOjpIVE1MTWV0YUVsZW1lbnRJbXBsKERvY3VtZW50
UHRyICpkb2MpIDogSFRNTEVsZW1lbnRJbXBsKGRvYykKK0hUTUxNZXRhRWxlbWVudEltcGw6OkhU
TUxNZXRhRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykgOiBIVE1MRWxlbWVudEltcGwoSFRN
TE5hbWVzOjptZXRhKCksIGRvYykKIHsKIH0KIApAQCAtNDMxLDExICs0MjEsNiBAQCBIVE1MTWV0
YUVsZW1lbnRJbXBsOjp+SFRNTE1ldGFFbGVtZW50SW1wCiB7CiB9CiAKLU5vZGVJbXBsOjpJZCBI
VE1MTWV0YUVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX01FVEE7Ci19
Ci0KIHZvaWQgSFRNTE1ldGFFbGVtZW50SW1wbDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVk
QXR0cmlidXRlSW1wbCAqYXR0cikKIHsKICAgICBzd2l0Y2goYXR0ci0+aWQoKSkKQEAgLTUxMiw3
ICs0OTcsNyBAQCB2b2lkIEhUTUxNZXRhRWxlbWVudEltcGw6OnNldFNjaGVtZShjb25zCiAvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxTY3JpcHRFbGVtZW50SW1wbDo6SFRNTFNjcmlwdEVsZW1l
bnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0gICAgOiBIVE1MRWxlbWVudEltcGwoZG9jKSwgbV9j
YWNoZWRTY3JpcHQoMCksIG1fY3JlYXRlZEJ5UGFyc2VyKGZhbHNlKSwgbV9ldmFsdWF0ZWQoZmFs
c2UpCisgICAgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjpzY3JpcHQoKSwgZG9jKSwgbV9j
YWNoZWRTY3JpcHQoMCksIG1fY3JlYXRlZEJ5UGFyc2VyKGZhbHNlKSwgbV9ldmFsdWF0ZWQoZmFs
c2UpCiB7CiB9CiAKQEAgLTUyMiwxMSArNTA3LDYgQEAgSFRNTFNjcmlwdEVsZW1lbnRJbXBsOjp+
SFRNTFNjcmlwdEVsZW1lbgogICAgICAgICBtX2NhY2hlZFNjcmlwdC0+ZGVyZWYodGhpcyk7CiB9
CiAKLU5vZGVJbXBsOjpJZCBIVE1MU2NyaXB0RWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gSURfU0NSSVBUOwotfQotCiBib29sIEhUTUxTY3JpcHRFbGVtZW50SW1wbDo6aXNV
UkxBdHRyaWJ1dGUoQXR0cmlidXRlSW1wbCAqYXR0cikgY29uc3QKIHsKICAgICByZXR1cm4gYXR0
ci0+aWQoKSA9PSBBVFRSX1NSQzsKQEAgLTY5Nyw3ICs2NzcsNyBAQCB2b2lkIEhUTUxTY3JpcHRF
bGVtZW50SW1wbDo6c2V0VHlwZShjb25zCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSFRNTFN0
eWxlRWxlbWVudEltcGw6OkhUTUxTdHlsZUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpIDog
SFRNTEVsZW1lbnRJbXBsKGRvYykKK0hUTUxTdHlsZUVsZW1lbnRJbXBsOjpIVE1MU3R5bGVFbGVt
ZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKSA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6OnN0
eWxlKCksIGRvYykKIHsKICAgICBtX3NoZWV0ID0gMDsKICAgICBtX2xvYWRpbmcgPSBmYWxzZTsK
QEAgLTcwOCwxMSArNjg4LDYgQEAgSFRNTFN0eWxlRWxlbWVudEltcGw6On5IVE1MU3R5bGVFbGVt
ZW50SQogICAgIGlmKG1fc2hlZXQpIG1fc2hlZXQtPmRlcmVmKCk7CiB9CiAKLU5vZGVJbXBsOjpJ
ZCBIVE1MU3R5bGVFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9TVFlM
RTsKLX0KLQogLy8gb3RoZXIgc3R1ZmYuLi4KIHZvaWQgSFRNTFN0eWxlRWxlbWVudEltcGw6OnBh
cnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIpCiB7CkBAIC04MjQs
NyArNzk5LDcgQEAgdm9pZCBIVE1MU3R5bGVFbGVtZW50SW1wbDo6c2V0VHlwZShjb25zdAogLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MVGl0bGVFbGVtZW50SW1wbDo6SFRNTFRpdGxlRWxlbWVu
dEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50SW1wbChkb2MpLCBtX3Rp
dGxlKCIiKQorICAgIDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6dGl0bGUoKSwgZG9jKSwg
bV90aXRsZSgiIikKIHsKIH0KIApAQCAtODMyLDExICs4MDcsNiBAQCBIVE1MVGl0bGVFbGVtZW50
SW1wbDo6fkhUTUxUaXRsZUVsZW1lbnRJCiB7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MVGl0bGVF
bGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9USVRMRTsKLX0KLQogdm9p
ZCBIVE1MVGl0bGVFbGVtZW50SW1wbDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKQogewogICAgIEhU
TUxFbGVtZW50SW1wbDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKSW5kZXg6IGtodG1sL2h0bWwv
aHRtbF9oZWFkaW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2to
dG1sL2h0bWwvaHRtbF9oZWFkaW1wbC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIwCmRpZmYg
LXUgLXAgLXIxLjIwIGtodG1sL2h0bWwvaHRtbF9oZWFkaW1wbC5oCi0tLSBraHRtbC9odG1sL2h0
bWxfaGVhZGltcGwuaAkxOSBKdW4gMjAwNSAwNTo0NDoyOCAtMDAwMAkxLjIwCisrKyBraHRtbC9o
dG1sL2h0bWxfaGVhZGltcGwuaAk4IEp1bCAyMDA1IDA1OjUwOjEwIC0wMDAwCkBAIC00OSwxMCAr
NDksMTIgQEAgcHVibGljOgogICAgIEhUTUxCYXNlRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRv
Yyk7CiAgICAgfkhUTUxCYXNlRWxlbWVudEltcGwoKTsKIAorICAgIHZpcnR1YWwgSFRNTFRhZ1N0
YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c0ZvcmJpZGRl
bjsgfQorICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMDsgfQor
CiAgICAgRE9NU3RyaW5nIGhyZWYoKSBjb25zdCB7IHJldHVybiBtX2hyZWY7IH0KICAgICBET01T
dHJpbmcgdGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXQ7IH0KIAotICAgIHZpcnR1YWwg
SWQgaWQoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFw
cGVkQXR0cmlidXRlSW1wbCAqYXR0cik7CiAgICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b0Rv
Y3VtZW50KCk7CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZWRGcm9tRG9jdW1lbnQoKTsKQEAgLTc3
LDcgKzc5LDggQEAgcHVibGljOgogICAgIEhUTUxMaW5rRWxlbWVudEltcGwoRG9jdW1lbnRQdHIg
KmRvYyk7CiAgICAgfkhUTUxMaW5rRWxlbWVudEltcGwoKTsKIAotICAgIHZpcnR1YWwgSWQgaWQo
KSBjb25zdDsKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBj
b25zdCB7IHJldHVybiBUYWdTdGF0dXNGb3JiaWRkZW47IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQ
cmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KIAogICAgIGJvb2wgZGlzYWJsZWQoKSBjb25z
dDsKICAgICB2b2lkIHNldERpc2FibGVkKGJvb2wpOwpAQCAtMTUyLDEwICsxNTUsMTEgQEAgY2xh
c3MgSFRNTE1ldGFFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MRQogewogcHVibGljOgogICAgIEhU
TUxNZXRhRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYyk7Ci0KICAgICB+SFRNTE1ldGFFbGVt
ZW50SW1wbCgpOwogCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OworICAgIHZpcnR1YWwgSFRN
TFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c0Zv
cmJpZGRlbjsgfQorICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4g
MDsgfQorCiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJp
YnV0ZUltcGwgKmF0dHIpOwogICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9Eb2N1bWVudCgp
OwogCkBAIC0xODUsMTMgKzE4OSwxNyBAQCBjbGFzcyBIVE1MU2NyaXB0RWxlbWVudEltcGwgOiBw
dWJsaWMgSFRNCiBwdWJsaWM6CiAgICAgSFRNTFNjcmlwdEVsZW1lbnRJbXBsKERvY3VtZW50UHRy
ICpkb2MpOwogICAgIH5IVE1MU2NyaXB0RWxlbWVudEltcGwoKTsKLSAgICAKKworICAgIHZpcnR1
YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0
YXR1c1JlcXVpcmVkOyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJl
dHVybiAxOyB9CisJdmlydHVhbCBib29sIGNoZWNrRFREKGNvbnN0IE5vZGVJbXBsKiBuZXdDaGls
ZCkgeyByZXR1cm4gbmV3Q2hpbGQtPmlzVGV4dE5vZGUoKTsgfQorCiAgICAgdmlydHVhbCB2b2lk
IGluc2VydGVkSW50b0RvY3VtZW50KCk7CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZWRGcm9tRG9j
dW1lbnQoKTsKICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5RmluaXNoZWQoa2h0bWw6OkNhY2hlZE9i
amVjdCAqZmluaXNoZWRPYmopOworCiAgICAgdmlydHVhbCB2b2lkIGNoaWxkcmVuQ2hhbmdlZCgp
OwotICAgIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKKwogICAgIHZpcnR1YWwgYm9vbCBp
c1VSTEF0dHJpYnV0ZShBdHRyaWJ1dGVJbXBsICphdHRyKSBjb25zdDsKIAogICAgIHZvaWQgc2V0
Q3JlYXRlZEJ5UGFyc2VyKGJvb2wgY3JlYXRlZEJ5UGFyc2VyKSB7IG1fY3JlYXRlZEJ5UGFyc2Vy
ID0gY3JlYXRlZEJ5UGFyc2VyOyB9CkBAIC0yMzMsNyArMjQxLDkgQEAgcHVibGljOgogICAgIEhU
TUxTdHlsZUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpOwogICAgIH5IVE1MU3R5bGVFbGVt
ZW50SW1wbCgpOwogCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OworICAgIHZpcnR1YWwgSFRN
TFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1Jl
cXVpcmVkOyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAx
OyB9CisJdmlydHVhbCBib29sIGNoZWNrRFREKGNvbnN0IE5vZGVJbXBsKiBuZXdDaGlsZCkgeyBy
ZXR1cm4gbmV3Q2hpbGQtPmlzVGV4dE5vZGUoKTsgfQogCiAgICAgU3R5bGVTaGVldEltcGwgKnNo
ZWV0KCkgY29uc3QgeyByZXR1cm4gbV9zaGVldDsgfQogCkBAIC0yNjgsMTAgKzI3OCw5IEBAIGNs
YXNzIEhUTUxUaXRsZUVsZW1lbnRJbXBsIDogcHVibGljIEhUTUwKIHsKIHB1YmxpYzoKICAgICBI
VE1MVGl0bGVFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKTsKLQogICAgIH5IVE1MVGl0bGVF
bGVtZW50SW1wbCgpOwogCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OworCXZpcnR1YWwgYm9v
bCBjaGVja0RURChjb25zdCBOb2RlSW1wbCogbmV3Q2hpbGQpIHsgcmV0dXJuIG5ld0NoaWxkLT5p
c1RleHROb2RlKCk7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9Eb2N1bWVudCgp
OwogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkRnJvbURvY3VtZW50KCk7CkluZGV4OiBraHRtbC9o
dG1sL2h0bWxfaW1hZ2VpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2Vi
Q29yZS9raHRtbC9odG1sL2h0bWxfaW1hZ2VpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS40MwpkaWZmIC11IC1wIC1yMS40MyBraHRtbC9odG1sL2h0bWxfaW1hZ2VpbXBsLmNwcAotLS0g
a2h0bWwvaHRtbC9odG1sX2ltYWdlaW1wbC5jcHAJMjEgSnVuIDIwMDUgMjI6Mjc6NTUgLTAwMDAJ
MS40MworKysga2h0bWwvaHRtbC9odG1sX2ltYWdlaW1wbC5jcHAJOCBKdWwgMjAwNSAwNTo1MDox
MSAtMDAwMApAQCAtNTEsNyArNTEsNyBAQAogdXNpbmcgbmFtZXNwYWNlIERPTTsKIHVzaW5nIG5h
bWVzcGFjZSBraHRtbDsKIAotLy8jZGVmaW5lIElOU1RSVU1FTlRfTEFZT1VUX1NDSEVEVUxJTkcg
MQorLy8gI2RlZmluZSBJTlNUUlVNRU5UX0xBWU9VVF9TQ0hFRFVMSU5HIDEKIAogSFRNTEltYWdl
TG9hZGVyOjpIVE1MSW1hZ2VMb2FkZXIoRWxlbWVudEltcGwqIGVsdCkKIDptX2VsZW1lbnQoZWx0
KSwgbV9pbWFnZSgwKSwgbV9maXJlZExvYWQodHJ1ZSksIG1faW1hZ2VDb21wbGV0ZSh0cnVlKQpA
QCAtNzUsNyArNzUsNyBAQCB2b2lkIEhUTUxJbWFnZUxvYWRlcjo6dXBkYXRlRnJvbUVsZW1lbnQo
CiAgICAgICAgIHJldHVybjsKIAogICAgIEF0b21pY1N0cmluZyBhdHRyOwotICAgIGlmIChlbGVt
ZW50KCktPmlkKCkgPT0gSURfT0JKRUNUKQorICAgIGlmIChlbGVtZW50KCktPmhhc0xvY2FsTmFt
ZShIVE1MTmFtZXM6Om9iamVjdCgpKSkKICAgICAgICAgYXR0ciA9IGVsZW1lbnQoKS0+Z2V0QXR0
cmlidXRlKEFUVFJfREFUQSk7CiAgICAgZWxzZQogICAgICAgICBhdHRyID0gZWxlbWVudCgpLT5n
ZXRBdHRyaWJ1dGUoQVRUUl9TUkMpOwpAQCAtODYsNiArODYsMTAgQEAgdm9pZCBIVE1MSW1hZ2VM
b2FkZXI6OnVwZGF0ZUZyb21FbGVtZW50KAogICAgICAgICBuZXdJbWFnZSA9IGVsZW1lbnQoKS0+
Z2V0RG9jdW1lbnQoKS0+ZG9jTG9hZGVyKCktPnJlcXVlc3RJbWFnZShraHRtbDo6cGFyc2VVUkwo
YXR0cikpOwogCiAgICAgaWYgKG5ld0ltYWdlICE9IG1faW1hZ2UpIHsKKyNpZmRlZiBJTlNUUlVN
RU5UX0xBWU9VVF9TQ0hFRFVMSU5HCisgICAgICAgIGlmICghZG9jdW1lbnQtPm93bmVyRWxlbWVu
dCgpICYmIG5ld0ltYWdlKQorICAgICAgICAgICAgcHJpbnRmKCJJbWFnZSByZXF1ZXN0ZWQgYXQg
JWRcbiIsIGVsZW1lbnQoKS0+Z2V0RG9jdW1lbnQoKS0+ZWxhcHNlZFRpbWUoKSk7CisjZW5kaWYK
ICAgICAgICAgbV9maXJlZExvYWQgPSBmYWxzZTsKICAgICAgICAgbV9pbWFnZUNvbXBsZXRlID0g
ZmFsc2U7CiAgICAgICAgIENhY2hlZEltYWdlKiBvbGRJbWFnZSA9IG1faW1hZ2U7CkBAIC0xMzMs
MjEgKzEzNywyMSBAQCB2b2lkIEhUTUxJbWFnZUxvYWRlcjo6bm90aWZ5RmluaXNoZWQoQ2FjCiAv
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxJbWFnZUVsZW1lbnRJbXBsOjpIVE1MSW1hZ2VFbGVt
ZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmKQotICAgIDog
SFRNTEVsZW1lbnRJbXBsKGRvYyksIG1faW1hZ2VMb2FkZXIodGhpcyksIGlzbWFwKGZhbHNlKSwg
bV9mb3JtKGYpCisgICAgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjppbWcoKSwgZG9jKSwg
bV9pbWFnZUxvYWRlcih0aGlzKSwgaXNtYXAoZmFsc2UpLCBtX2Zvcm0oZikKIHsKICAgICBpZiAo
bV9mb3JtKQogICAgICAgICBtX2Zvcm0tPnJlZ2lzdGVySW1nRWxlbWVudCh0aGlzKTsKIH0KIAot
SFRNTEltYWdlRWxlbWVudEltcGw6On5IVE1MSW1hZ2VFbGVtZW50SW1wbCgpCitIVE1MSW1hZ2VF
bGVtZW50SW1wbDo6SFRNTEltYWdlRWxlbWVudEltcGwoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFn
TmFtZSwgRG9jdW1lbnRQdHIgKmRvYykKKyAgICA6IEhUTUxFbGVtZW50SW1wbCh0YWdOYW1lLCBk
b2MpLCBtX2ltYWdlTG9hZGVyKHRoaXMpLCBpc21hcChmYWxzZSksIG1fZm9ybSgwKQogewotICAg
IGlmIChtX2Zvcm0pCi0gICAgICAgIG1fZm9ybS0+cmVtb3ZlSW1nRWxlbWVudCh0aGlzKTsKIH0K
IAotTm9kZUltcGw6OklkIEhUTUxJbWFnZUVsZW1lbnRJbXBsOjppZCgpIGNvbnN0CitIVE1MSW1h
Z2VFbGVtZW50SW1wbDo6fkhUTUxJbWFnZUVsZW1lbnRJbXBsKCkKIHsKLSAgICByZXR1cm4gSURf
SU1HOworICAgIGlmIChtX2Zvcm0pCisgICAgICAgIG1fZm9ybS0+cmVtb3ZlSW1nRWxlbWVudCh0
aGlzKTsKIH0KIAogYm9vbCBIVE1MSW1hZ2VFbGVtZW50SW1wbDo6bWFwVG9FbnRyeShOb2RlSW1w
bDo6SWQgYXR0ciwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3QKQEAgLTUyOCw3
ICs1MzIsNyBAQCBsb25nIEhUTUxJbWFnZUVsZW1lbnRJbXBsOjp5KCkgY29uc3QKIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KIAogSFRNTE1hcEVsZW1lbnRJbXBsOjpIVE1MTWFwRWxlbWVudEltcGwoRG9j
dW1lbnRQdHIgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50SW1wbChkb2MpCisgICAgOiBIVE1MRWxl
bWVudEltcGwoSFRNTE5hbWVzOjptYXAoKSwgZG9jKQogewogfQogCkBAIC01MzgsOSArNTQyLDEx
IEBAIEhUTUxNYXBFbGVtZW50SW1wbDo6fkhUTUxNYXBFbGVtZW50SW1wbCgKICAgICAgICAgZ2V0
RG9jdW1lbnQoKS0+cmVtb3ZlSW1hZ2VNYXAodGhpcyk7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1M
TWFwRWxlbWVudEltcGw6OmlkKCkgY29uc3QKK2Jvb2wgSFRNTE1hcEVsZW1lbnRJbXBsOjpjaGVj
a0RURChjb25zdCBOb2RlSW1wbCogbmV3Q2hpbGQpCiB7Ci0gICAgcmV0dXJuIElEX01BUDsKKwkv
LyBGSVhNRTogVGhpcyBzZWVtcyByZWFsbHkgb2RkLCBhbGxvd2luZyBvbmx5IGJsb2NrcyBpbnNp
ZGUgbWFwLgorCXJldHVybiBuZXdDaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmFyZWEoKSkg
fHwgbmV3Q2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzY3JpcHQoKSkgfHwKKwkJICAgaW5C
bG9ja1RhZ0xpc3QobmV3Q2hpbGQpOwogfQogCiBib29sCkBAIC01NTIsMzIgKzU1OCwyOCBAQCBI
VE1MTWFwRWxlbWVudEltcGw6Om1hcE1vdXNlRXZlbnQoaW50IHhfCiAgICAgUVB0clN0YWNrPE5v
ZGVJbXBsPiBub2RlU3RhY2s7CiAKICAgICBOb2RlSW1wbCAqY3VycmVudCA9IGZpcnN0Q2hpbGQo
KTsKLSAgICB3aGlsZSgxKQotICAgIHsKLSAgICAgICAgaWYoIWN1cnJlbnQpCi0gICAgICAgIHsK
KyAgICB3aGlsZSAoMSkgeworICAgICAgICBpZiAoIWN1cnJlbnQpIHsKICAgICAgICAgICAgIGlm
KG5vZGVTdGFjay5pc0VtcHR5KCkpIGJyZWFrOwogICAgICAgICAgICAgY3VycmVudCA9IG5vZGVT
dGFjay5wb3AoKTsKICAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0U2libGluZygp
OwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgaWYoY3VycmVudC0+
aWQoKT09SURfQVJFQSkKLSAgICAgICAgeworICAgICAgICAKKyAgICAgICAgaWYgKGN1cnJlbnQt
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjphcmVhKCkpKSB7CiAgICAgICAgICAgICAvL2NvdXQgPDwg
ImFyZWEgZm91bmQgIiA8PCBlbmRsOwotICAgICAgICAgICAgSFRNTEFyZWFFbGVtZW50SW1wbCog
YXJlYT1zdGF0aWNfY2FzdDxIVE1MQXJlYUVsZW1lbnRJbXBsKj4oY3VycmVudCk7CisgICAgICAg
ICAgICBIVE1MQXJlYUVsZW1lbnRJbXBsKiBhcmVhID0gc3RhdGljX2Nhc3Q8SFRNTEFyZWFFbGVt
ZW50SW1wbCo+KGN1cnJlbnQpOwogICAgICAgICAgICAgaWYgKGFyZWEtPm1hcE1vdXNlRXZlbnQo
eF8seV8sd2lkdGhfLGhlaWdodF8sIGluZm8pKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICB9CisgICAgICAgIAogICAgICAgICBOb2RlSW1wbCAqY2hpbGQgPSBjdXJyZW50
LT5maXJzdENoaWxkKCk7Ci0gICAgICAgIGlmKGNoaWxkKQotICAgICAgICB7CisgICAgICAgIGlm
IChjaGlsZCkgewogICAgICAgICAgICAgbm9kZVN0YWNrLnB1c2goY3VycmVudCk7CiAgICAgICAg
ICAgICBjdXJyZW50ID0gY2hpbGQ7CiAgICAgICAgIH0KICAgICAgICAgZWxzZQotICAgICAgICB7
CiAgICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAg
fQogICAgIH0KIAogICAgIHJldHVybiBmYWxzZTsKQEAgLTYyMiw3ICs2MjQsNyBAQCB2b2lkIEhU
TUxNYXBFbGVtZW50SW1wbDo6c2V0TmFtZShjb25zdCBECiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAK
IEhUTUxBcmVhRWxlbWVudEltcGw6OkhUTUxBcmVhRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRv
YykKLSAgICA6IEhUTUxBbmNob3JFbGVtZW50SW1wbChkb2MpCisgICAgOiBIVE1MQW5jaG9yRWxl
bWVudEltcGwoSFRNTE5hbWVzOjphcmVhKCksIGRvYykKIHsKICAgICBtX2Nvb3Jkcz0wOwogICAg
IG1fY29vcmRzTGVuID0gMDsKQEAgLTYzNSwxMSArNjM3LDYgQEAgSFRNTEFyZWFFbGVtZW50SW1w
bDo6fkhUTUxBcmVhRWxlbWVudEltcAogICAgIGlmIChtX2Nvb3JkcykgZGVsZXRlIFtdIG1fY29v
cmRzOwogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTEFyZWFFbGVtZW50SW1wbDo6aWQoKSBjb25zdAot
ewotICAgIHJldHVybiBJRF9BUkVBOwotfQotCiB2b2lkIEhUTUxBcmVhRWxlbWVudEltcGw6OnBh
cnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIpCiB7CiAgICAgc3dp
dGNoIChhdHRyLT5pZCgpKQpJbmRleDoga2h0bWwvaHRtbC9odG1sX2ltYWdlaW1wbC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbF9pbWFnZWlt
cGwuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yMQpkaWZmIC11IC1wIC1yMS4yMSBraHRtbC9o
dG1sL2h0bWxfaW1hZ2VpbXBsLmgKLS0tIGtodG1sL2h0bWwvaHRtbF9pbWFnZWltcGwuaAkxMSBN
YXkgMjAwNSAwNTo0OTozNCAtMDAwMAkxLjIxCisrKyBraHRtbC9odG1sL2h0bWxfaW1hZ2VpbXBs
LmgJOCBKdWwgMjAwNSAwNTo1MDoxMSAtMDAwMApAQCAtNzUsOSArNzUsMTEgQEAgY2xhc3MgSFRN
TEltYWdlRWxlbWVudEltcGwKICAgICBmcmllbmQgY2xhc3MgSFRNTEZvcm1FbGVtZW50SW1wbDsK
IHB1YmxpYzoKICAgICBIVE1MSW1hZ2VFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCBIVE1M
Rm9ybUVsZW1lbnRJbXBsICpmID0gMCk7CisgICAgSFRNTEltYWdlRWxlbWVudEltcGwoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnRQdHIqIGRvYyk7CiAgICAgfkhUTUxJbWFn
ZUVsZW1lbnRJbXBsKCk7CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CisgICAgdmlydHVh
bCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3Rh
dHVzRm9yYmlkZGVuOyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJl
dHVybiAwOyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShOb2RlSW1wbDo6SWQgYXR0
ciwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lk
IHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKik7CkBAIC0xNjEsNyAr
MTYzLDggQEAgcHVibGljOgogICAgIEhUTUxBcmVhRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRv
Yyk7CiAgICAgfkhUTUxBcmVhRWxlbWVudEltcGwoKTsKIAotICAgIHZpcnR1YWwgSWQgaWQoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25z
dCB7IHJldHVybiBUYWdTdGF0dXNGb3JiaWRkZW47IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQcmlv
cml0eSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICphdHRyKTsKIApAQCAtMjEyLDEwICsyMTUs
MTEgQEAgY2xhc3MgSFRNTE1hcEVsZW1lbnRJbXBsIDogcHVibGljIEhUTUxFbAogewogcHVibGlj
OgogICAgIEhUTUxNYXBFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKTsKLQogICAgIH5IVE1M
TWFwRWxlbWVudEltcGwoKTsKIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdT
dGF0dXNSZXF1aXJlZDsgfQorICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyBy
ZXR1cm4gMTsgfQorCXZpcnR1YWwgYm9vbCBjaGVja0RURChjb25zdCBOb2RlSW1wbCogbmV3Q2hp
bGQpOwogCiAgICAgdmlydHVhbCBET01TdHJpbmcgZ2V0TmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1f
bmFtZTsgfQogCkluZGV4OiBraHRtbC9odG1sL2h0bWxfaW5saW5laW1wbC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sX2lubGluZWltcGwu
Y3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjQyCmRpZmYgLXUgLXAgLXIxLjQyIGtodG1sL2h0
bWwvaHRtbF9pbmxpbmVpbXBsLmNwcAotLS0ga2h0bWwvaHRtbC9odG1sX2lubGluZWltcGwuY3Bw
CTExIE1heSAyMDA1IDA1OjQ5OjM0IC0wMDAwCTEuNDIKKysrIGtodG1sL2h0bWwvaHRtbF9pbmxp
bmVpbXBsLmNwcAk4IEp1bCAyMDA1IDA1OjUwOjExIC0wMDAwCkBAIC00NSw3ICs0NSwxMyBAQCB1
c2luZyBuYW1lc3BhY2Uga2h0bWw7CiBuYW1lc3BhY2UgRE9NIHsKIAogSFRNTEFuY2hvckVsZW1l
bnRJbXBsOjpIVE1MQW5jaG9yRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgICA6IEhU
TUxFbGVtZW50SW1wbChkb2MpCisgICAgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjphKCks
IGRvYykKK3sKKyAgICBtX2hhc1RhcmdldCA9IGZhbHNlOworfQorCitIVE1MQW5jaG9yRWxlbWVu
dEltcGw6OkhUTUxBbmNob3JFbGVtZW50SW1wbChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1l
LCBEb2N1bWVudFB0ciAqZG9jKQorICAgIDogSFRNTEVsZW1lbnRJbXBsKHRhZ05hbWUsIGRvYykK
IHsKICAgICBtX2hhc1RhcmdldCA9IGZhbHNlOwogfQpAQCAtMTA0LDExICsxMTAsNiBAQCBib29s
IEhUTUxBbmNob3JFbGVtZW50SW1wbDo6aXNLZXlib2FyZEZvCiAgICAgcmV0dXJuIGdldERvY3Vt
ZW50KCktPnBhcnQoKS0+dGFic1RvTGlua3MoKTsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxBbmNo
b3JFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9BOwotfQotCiB2b2lk
IEhUTUxBbmNob3JFbGVtZW50SW1wbDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudEltcGwgKmV2
dCkKIHsKICAgICAvLyBSZWFjdCBvbiBjbGlja3MgYW5kIG9uIGtleXByZXNzZXMuCkBAIC0xNTIs
NyArMTUzLDcgQEAgdm9pZCBIVE1MQW5jaG9yRWxlbWVudEltcGw6OmRlZmF1bHRFdmVudAogICAg
ICAgICBpZiAoIGUgJiYgZS0+YnV0dG9uKCkgPT0gMSApCiAgICAgICAgICAgICB1dGFyZ2V0ID0g
Il9ibGFuayI7CiAKLSAgICAgICAgaWYgKCBldnQtPnRhcmdldCgpLT5pZCgpID09IElEX0lNRyAp
IHsKKyAgICAgICAgaWYgKGV2dC0+dGFyZ2V0KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppbWco
KSkpIHsKICAgICAgICAgICAgIEhUTUxJbWFnZUVsZW1lbnRJbXBsKiBpbWcgPSBzdGF0aWNfY2Fz
dDxIVE1MSW1hZ2VFbGVtZW50SW1wbCo+KCBldnQtPnRhcmdldCgpICk7CiAgICAgICAgICAgICBp
ZiAoIGltZyAmJiBpbWctPmlzU2VydmVyTWFwKCkgKQogICAgICAgICAgICAgewpAQCAtMzgyLDcg
KzM4Myw3IEBAIHZvaWQgSFRNTEFuY2hvckVsZW1lbnRJbXBsOjpmb2N1cygpCiAKIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KIAotSFRNTEJSRWxlbWVudEltcGw6OkhUTUxCUkVsZW1lbnRJbXBsKERvY3Vt
ZW50UHRyICpkb2MpIDogSFRNTEVsZW1lbnRJbXBsKGRvYykKK0hUTUxCUkVsZW1lbnRJbXBsOjpI
VE1MQlJFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKSA6IEhUTUxFbGVtZW50SW1wbChIVE1M
TmFtZXM6OmJyKCksIGRvYykKIHsKIH0KIApAQCAtMzkwLDExICszOTEsNiBAQCBIVE1MQlJFbGVt
ZW50SW1wbDo6fkhUTUxCUkVsZW1lbnRJbXBsKCkKIHsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxC
UkVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0JSOwotfQotCiBib29s
IEhUTUxCUkVsZW1lbnRJbXBsOjptYXBUb0VudHJ5KE5vZGVJbXBsOjpJZCBhdHRyLCBNYXBwZWRB
dHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdAogewogICAgIGlmIChhdHRyID09IEFUVFJfQ0xF
QVIpIHsKQEAgLTQ0NSw3ICs0NDEsNyBAQCB2b2lkIEhUTUxCUkVsZW1lbnRJbXBsOjpzZXRDbGVh
cihjb25zdCBECiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxGb250RWxlbWVudEltcGw6OkhU
TUxGb250RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50SW1w
bChkb2MpCisgICAgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjpmb250KCksIGRvYykKIHsK
IH0KIApAQCAtNDUzLDExICs0NDksNiBAQCBIVE1MRm9udEVsZW1lbnRJbXBsOjp+SFRNTEZvbnRF
bGVtZW50SW1wCiB7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MRm9udEVsZW1lbnRJbXBsOjppZCgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0ZPTlQ7Ci19Ci0KIC8vIEFsbG93cyBsZWFkaW5nIHNw
YWNlcy4KIC8vIEFsbG93cyB0cmFpbGluZyBub25udW1lcmljIGNoYXJhY3RlcnMuCiAvLyBSZXR1
cm5zIDEwIGZvciBhbnkgc2l6ZSBncmVhdGVyIHRoYW4gOS4KQEAgLTU5MCw4ICs1ODEsOCBAQCB2
b2lkIEhUTUxGb250RWxlbWVudEltcGw6OnNldFNpemUoY29uc3QgCiAKIC8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KIAotSFRNTE1vZEVsZW1lbnRJbXBsOjpIVE1MTW9kRWxlbWVudEltcGwoRG9jdW1lbnRQ
dHIgKmRvYywgdXNob3J0IGVsZW1lbnRJZCkKLSAgICA6IEhUTUxHZW5lcmljRWxlbWVudEltcGwo
ZG9jLCBlbGVtZW50SWQpCitIVE1MTW9kRWxlbWVudEltcGw6OkhUTUxNb2RFbGVtZW50SW1wbChj
b25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudFB0ciAqZG9jKQorICAgIDogSFRN
TEVsZW1lbnRJbXBsKHRhZ05hbWUsIGRvYykKIHsKIH0KIApAQCAtNjE4LDE1ICs2MDksMTAgQEAg
dm9pZCBIVE1MTW9kRWxlbWVudEltcGw6OnNldERhdGVUaW1lKGNvbgogLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQogCiBIVE1MUXVvdGVFbGVtZW50SW1wbDo6SFRNTFF1b3RlRWxlbWVudEltcGwoRG9jdW1l
bnRQdHIgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50SW1wbChkb2MpCisgICAgOiBIVE1MRWxlbWVu
dEltcGwoSFRNTE5hbWVzOjpxKCksIGRvYykKIHsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxRdW90
ZUVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX1E7Ci19Ci0gICAgCiBE
T01TdHJpbmcgSFRNTFF1b3RlRWxlbWVudEltcGw6OmNpdGUoKSBjb25zdAogewogICAgIHJldHVy
biBnZXRBdHRyaWJ1dGUoQVRUUl9DSVRFKTsKSW5kZXg6IGtodG1sL2h0bWwvaHRtbF9pbmxpbmVp
bXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9o
dG1sX2lubGluZWltcGwuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xOQpkaWZmIC11IC1wIC1y
MS4xOSBraHRtbC9odG1sL2h0bWxfaW5saW5laW1wbC5oCi0tLSBraHRtbC9odG1sL2h0bWxfaW5s
aW5laW1wbC5oCTExIE1heSAyMDA1IDA1OjQ5OjM0IC0wMDAwCTEuMTkKKysrIGtodG1sL2h0bWwv
aHRtbF9pbmxpbmVpbXBsLmgJOCBKdWwgMjAwNSAwNTo1MDoxMSAtMDAwMApAQCAtMzQsMTIgKzM0
LDE1IEBAIGNsYXNzIEhUTUxBbmNob3JFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE0KIHsKIHB1Ymxp
YzoKICAgICBIVE1MQW5jaG9yRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYyk7CisgICAgSFRN
TEFuY2hvckVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50
UHRyKiBkb2MpOwogICAgIH5IVE1MQW5jaG9yRWxlbWVudEltcGwoKTsKIAorICAgIHZpcnR1YWwg
SFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1
c1JlcXVpcmVkOyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVy
biAxOyB9CisKICAgICB2aXJ0dWFsIGJvb2wgaXNNb3VzZUZvY3VzYWJsZSgpIGNvbnN0OwogICAg
IHZpcnR1YWwgYm9vbCBpc0tleWJvYXJkRm9jdXNhYmxlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBi
b29sIGlzRm9jdXNhYmxlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwogICAg
IHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICph
dHRyKTsKICAgICB2aXJ0dWFsIHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudEltcGwgKmV2
dCk7CiAgICAgdmlydHVhbCB2b2lkIGFjY2Vzc0tleUFjdGlvbihib29sIGZ1bGxBY3Rpb24pOwpA
QCAtOTcsOSArMTAwLDEwIEBAIGNsYXNzIEhUTUxCUkVsZW1lbnRJbXBsIDogcHVibGljIEhUTUxF
bGUKIHB1YmxpYzoKICAgICBIVE1MQlJFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKTsKICAg
ICB+SFRNTEJSRWxlbWVudEltcGwoKTsKLQotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKICAg
ICAKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7
IHJldHVybiBUYWdTdGF0dXNGb3JiaWRkZW47IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0
eSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKwogICAgIHZpcnR1YWwgYm9vbCBtYXBUb0VudHJ5KElk
IGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0OwogICAgIHZpcnR1YWwg
dm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICphdHRyKTsKICAg
ICAKQEAgLTExNiw5ICsxMjAsMTAgQEAgY2xhc3MgSFRNTEZvbnRFbGVtZW50SW1wbCA6IHB1Ymxp
YyBIVE1MRQogcHVibGljOgogICAgIEhUTUxGb250RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRv
Yyk7CiAgICAgfkhUTUxGb250RWxlbWVudEltcGwoKTsKLQotICAgIHZpcnR1YWwgSWQgaWQoKSBj
b25zdDsKICAgICAKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQo
KSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQorICAgIHZpcnR1YWwgaW50IHRh
Z1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMTsgfQorCiAgICAgdmlydHVhbCBib29sIG1hcFRv
RW50cnkoSWQgYXR0ciwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3Q7CiAgICAg
dmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0
dHIpOwogCkBAIC0xMzQsMTAgKzEzOSwxMyBAQCBwdWJsaWM6CiAKIC8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KIAotY2xhc3MgSFRNTE1vZEVsZW1lbnRJbXBsIDogcHVibGljIEhUTUxHZW5lcmljRWxlbWVu
dEltcGwKK2NsYXNzIEhUTUxNb2RFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MRWxlbWVudEltcGwK
IHsKIHB1YmxpYzoKLSAgICBIVE1MTW9kRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgdXNo
b3J0IGVsZW1lbnRJZCk7CisgICAgSFRNTE1vZEVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5h
bWUmIHRhZ05hbWUsIERvY3VtZW50UHRyICpkb2MpOworCisgICAgdmlydHVhbCBIVE1MVGFnU3Rh
dHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzUmVxdWlyZWQ7
IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDE7IH0KIAog
ICAgIERPTVN0cmluZyBjaXRlKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRDaXRlKGNvbnN0IERPTVN0
cmluZyAmKTsKQEAgLTE1Miw5ICsxNjAsMTAgQEAgY2xhc3MgSFRNTFF1b3RlRWxlbWVudEltcGwg
OiBwdWJsaWMgSFRNTAogewogcHVibGljOgogICAgIEhUTUxRdW90ZUVsZW1lbnRJbXBsKERvY3Vt
ZW50UHRyICpkb2MpOwotCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwogICAgIAorICAgIHZp
cnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRh
Z1N0YXR1c1JlcXVpcmVkOyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7
IHJldHVybiAxOyB9CisKICAgICBET01TdHJpbmcgY2l0ZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0
Q2l0ZShjb25zdCBET01TdHJpbmcgJik7CiB9OwpJbmRleDoga2h0bWwvaHRtbC9odG1sX2xpc3Rp
bXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9odG1s
L2h0bWxfbGlzdGltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjkKZGlmZiAtdSAtcCAt
cjEuOSBraHRtbC9odG1sL2h0bWxfbGlzdGltcGwuY3BwCi0tLSBraHRtbC9odG1sL2h0bWxfbGlz
dGltcGwuY3BwCTExIE1heSAyMDA1IDA1OjQ5OjM0IC0wMDAwCTEuOQorKysga2h0bWwvaHRtbC9o
dG1sX2xpc3RpbXBsLmNwcAk4IEp1bCAyMDA1IDA1OjUwOjEyIC0wMDAwCkBAIC0zMiwxMSArMzIs
NiBAQCB1c2luZyBuYW1lc3BhY2Uga2h0bWw7CiAKIG5hbWVzcGFjZSBET00gewogCi1Ob2RlSW1w
bDo6SWQgSFRNTFVMaXN0RWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURf
VUw7Ci19Ci0KIGJvb2wgSFRNTFVMaXN0RWxlbWVudEltcGw6Om1hcFRvRW50cnkoTm9kZUltcGw6
OklkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0CiB7CiAgICAgc3dp
dGNoIChhdHRyKSB7CkBAIC04NCwxMSArNzksNiBAQCB2b2lkIEhUTUxVTGlzdEVsZW1lbnRJbXBs
OjpzZXRUeXBlKGNvbnN0CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotTm9kZUltcGw6OklkIEhU
TUxEaXJlY3RvcnlFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9ESVI7
Ci19Ci0KIGJvb2wgSFRNTERpcmVjdG9yeUVsZW1lbnRJbXBsOjpjb21wYWN0KCkgY29uc3QKIHsK
ICAgICByZXR1cm4gIWdldEF0dHJpYnV0ZShBVFRSX0NPTVBBQ1QpLmlzTnVsbCgpOwpAQCAtMTAx
LDExICs5MSw2IEBAIHZvaWQgSFRNTERpcmVjdG9yeUVsZW1lbnRJbXBsOjpzZXRDb21wYWMKIAog
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Ob2RlSW1wbDo6SWQgSFRNTE1lbnVFbGVtZW50SW1wbDo6
aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9NRU5VOwotfQotCiBib29sIEhUTUxNZW51RWxl
bWVudEltcGw6OmNvbXBhY3QoKSBjb25zdAogewogICAgIHJldHVybiAhZ2V0QXR0cmlidXRlKEFU
VFJfQ09NUEFDVCkuaXNOdWxsKCk7CkBAIC0xMTgsMTEgKzEwMyw2IEBAIHZvaWQgSFRNTE1lbnVF
bGVtZW50SW1wbDo6c2V0Q29tcGFjdChib28KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Ob2Rl
SW1wbDo6SWQgSFRNTE9MaXN0RWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
SURfT0w7Ci19Ci0KIGJvb2wgSFRNTE9MaXN0RWxlbWVudEltcGw6Om1hcFRvRW50cnkoTm9kZUlt
cGw6OklkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0CiB7CiAgICAg
c3dpdGNoIChhdHRyKSB7CkBAIC0xNTUsNyArMTM1LDcgQEAgdm9pZCBIVE1MT0xpc3RFbGVtZW50
SW1wbDo6cGFyc2VNYXBwZWRBdAogICAgIGNhc2UgQVRUUl9TVEFSVDoKICAgICAgICAgICAgIF9z
dGFydCA9ICFhdHRyLT5pc051bGwoKSA/IGF0dHItPnZhbHVlKCkudG9JbnQoKSA6IDE7CiAgICAg
ZGVmYXVsdDoKLSAgICAgICAgSFRNTFVMaXN0RWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKGF0dHIpOworICAgICAgICBIVE1MRWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KGF0dHIpOwogICAgIH0KIH0KIApAQCAtMTg2LDExICsxNjYsNiBAQCB2b2lkIEhUTUxPTGlzdEVs
ZW1lbnRJbXBsOjpzZXRUeXBlKGNvbnN0CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotTm9kZUlt
cGw6OklkIEhUTUxMSUVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0xJ
OwotfQotCiBib29sIEhUTUxMSUVsZW1lbnRJbXBsOjptYXBUb0VudHJ5KE5vZGVJbXBsOjpJZCBh
dHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdAogewogICAgIHN3aXRjaCAo
YXR0cikgewpAQCAtMjUyLDExICsyMjcsOCBAQCB2b2lkIEhUTUxMSUVsZW1lbnRJbXBsOjphdHRh
Y2goKQogICAgICAgICBOb2RlSW1wbCAqbGlzdE5vZGUgPSAwOwogICAgICAgICBOb2RlSW1wbCAq
biA9IHRoaXM7CiAgICAgICAgIHdoaWxlICghbGlzdE5vZGUgJiYgKG4gPSBuLT5wYXJlbnROb2Rl
KCkpKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKG4tPmlkKCkpIHsKLSAgICAgICAgICAgICAgICBj
YXNlIElEX1VMOgotICAgICAgICAgICAgICAgIGNhc2UgSURfT0w6Ci0gICAgICAgICAgICAgICAg
ICAgIGxpc3ROb2RlID0gbjsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChuLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6dWwoKSkgfHwgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9sKCkp
KQorICAgICAgICAgICAgICAgIGxpc3ROb2RlID0gbjsKICAgICAgICAgfQogICAgICAgICAKICAg
ICAgICAgLy8gSWYgd2UgYXJlIG5vdCBpbiBhIGxpc3QsIHRlbGwgdGhlIHJlbmRlcmVyIHNvIGl0
IGNhbiBwb3NpdGlvbiB1cyBpbnNpZGUuCkBAIC0yNjUsNyArMjM3LDcgQEAgdm9pZCBIVE1MTElF
bGVtZW50SW1wbDo6YXR0YWNoKCkKICAgICAgICAgICAgIHJlbmRlci0+c2V0Tm90SW5MaXN0KHRy
dWUpOwogCiAJLy8gSWYgd2UgYXJlIGZpcnN0LCBhbmQgdGhlIE9MIGhhcyBhIHN0YXJ0IGF0dHIs
IHNldCB0aGUgdmFsdWUuCi0JaWYgKGxpc3ROb2RlICYmIGxpc3ROb2RlLT5pZCgpID09IElEX09M
ICYmICFtX3JlbmRlci0+cHJldmlvdXNTaWJsaW5nKCkpIHsKKwlpZiAobGlzdE5vZGUgJiYgbGlz
dE5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvbCgpKSAmJiAhbV9yZW5kZXItPnByZXZpb3Vz
U2libGluZygpKSB7CiAJICAgIEhUTUxPTGlzdEVsZW1lbnRJbXBsICpvbCA9IHN0YXRpY19jYXN0
PEhUTUxPTGlzdEVsZW1lbnRJbXBsICo+KGxpc3ROb2RlKTsKICAgICAgICAgICAgIHJlbmRlci0+
c2V0VmFsdWUob2wtPnN0YXJ0KCkpOwogCX0KQEAgLTI5NSwxMiArMjY3LDggQEAgdm9pZCBIVE1M
TElFbGVtZW50SW1wbDo6c2V0VmFsdWUobG9uZyB2YQogewogICAgIHNldEF0dHJpYnV0ZShBVFRS
X1ZBTFVFLCBRU3RyaW5nOjpudW1iZXIodmFsdWUpKTsKIH0KLS8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
IAotTm9kZUltcGw6OklkIEhUTUxETGlzdEVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIElEX0RMOwotfQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBib29sIEhUTUxETGlzdEVs
ZW1lbnRJbXBsOjpjb21wYWN0KCkgY29uc3QKIHsKSW5kZXg6IGtodG1sL2h0bWwvaHRtbF9saXN0
aW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwv
aHRtbF9saXN0aW1wbC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjcKZGlmZiAtdSAtcCAtcjEu
NyBraHRtbC9odG1sL2h0bWxfbGlzdGltcGwuaAotLS0ga2h0bWwvaHRtbC9odG1sX2xpc3RpbXBs
LmgJMTEgTWF5IDIwMDUgMDU6NDk6MzQgLTAwMDAJMS43CisrKyBraHRtbC9odG1sL2h0bWxfbGlz
dGltcGwuaAk4IEp1bCAyMDA1IDA1OjUwOjEyIC0wMDAwCkBAIC0zNSwxMCArMzUsMTEgQEAgbmFt
ZXNwYWNlIERPTQogY2xhc3MgSFRNTFVMaXN0RWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTEVsZW1l
bnRJbXBsCiB7CiBwdWJsaWM6Ci0gICAgSFRNTFVMaXN0RWxlbWVudEltcGwoRG9jdW1lbnRQdHIg
KmRvYykgOiBIVE1MRWxlbWVudEltcGwoZG9jKSB7fQorICAgIEhUTUxVTGlzdEVsZW1lbnRJbXBs
KERvY3VtZW50UHRyICpkb2MpIDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6dWwoKSwgZG9j
KSB7fQogICAgIHZpcnR1YWwgfkhUTUxVTGlzdEVsZW1lbnRJbXBsKCkge30KIAotICAgIHZpcnR1
YWwgSWQgaWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWly
ZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQorICAgIHZpcnR1YWwg
aW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gNTsgfQogCiAgICAgdmlydHVhbCBib29s
IG1hcFRvRW50cnkoSWQgYXR0ciwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3Q7
CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUlt
cGwgKik7CkBAIC01Nyw5ICs1OCwxMCBAQCBwdWJsaWM6CiBjbGFzcyBIVE1MRGlyZWN0b3J5RWxl
bWVudEltcGwgOiBwdWJsaWMgSFRNTEVsZW1lbnRJbXBsCiB7CiBwdWJsaWM6Ci0gICAgSFRNTERp
cmVjdG9yeUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpIDogSFRNTEVsZW1lbnRJbXBsKGRv
Yykge30KKyAgICBIVE1MRGlyZWN0b3J5RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykgOiBI
VE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjpkaXIoKSwgZG9jKSB7fQogCi0gICAgdmlydHVhbCBJ
ZCBpZCgpIGNvbnN0OworICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVu
dCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9CisgICAgdmlydHVhbCBpbnQg
dGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiA1OyB9CiAKICAgICBib29sIGNvbXBhY3QoKSBj
b25zdDsKICAgICB2b2lkIHNldENvbXBhY3QoYm9vbCk7CkBAIC03MCw5ICs3MiwxMCBAQCBwdWJs
aWM6CiBjbGFzcyBIVE1MTWVudUVsZW1lbnRJbXBsIDogcHVibGljIEhUTUxFbGVtZW50SW1wbAog
ewogcHVibGljOgotICAgIEhUTUxNZW51RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykgOiBI
VE1MRWxlbWVudEltcGwoZG9jKSB7fQorICAgIEhUTUxNZW51RWxlbWVudEltcGwoRG9jdW1lbnRQ
dHIgKmRvYykgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjptZW51KCksIGRvYykge30KIAot
ICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5k
VGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQorICAg
IHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gNTsgfQogCiAgICAgYm9v
bCBjb21wYWN0KCkgY29uc3Q7CiAgICAgdm9pZCBzZXRDb21wYWN0KGJvb2wpOwpAQCAtODAsMTQg
KzgzLDE1IEBAIHB1YmxpYzoKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1jbGFzcyBIVE1MT0xp
c3RFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MVUxpc3RFbGVtZW50SW1wbAorY2xhc3MgSFRNTE9M
aXN0RWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTEVsZW1lbnRJbXBsCiB7CiBwdWJsaWM6CiAgICAg
SFRNTE9MaXN0RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgICAgICAgOiBIVE1MVUxp
c3RFbGVtZW50SW1wbChkb2MpIHsgX3N0YXJ0ID0gMTsgfQotCi0gICAgdmlydHVhbCBJZCBpZCgp
IGNvbnN0OworICAgICAgICA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6Om9sKCksIGRvYykg
eyBfc3RhcnQgPSAxOyB9CiAgICAgCisgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1Jl
cXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzUmVxdWlyZWQ7IH0KKyAgICB2aXJ0
dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDU7IH0KKwogICAgIHZpcnR1YWwg
Ym9vbCBtYXBUb0VudHJ5KElkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNv
bnN0OwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1
dGVJbXBsICopOwogCkBAIC0xMTAsMTAgKzExNCwxMSBAQCBjbGFzcyBIVE1MTElFbGVtZW50SW1w
bCA6IHB1YmxpYyBIVE1MRWxlCiB7CiBwdWJsaWM6CiAgICAgSFRNTExJRWxlbWVudEltcGwoRG9j
dW1lbnRQdHIgKmRvYykKLSAgICAgICAgOiBIVE1MRWxlbWVudEltcGwoZG9jKSB7IGlzVmFsdWVk
ID0gZmFsc2U7IH0KKyAgICAgICAgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjpsaSgpLCBk
b2MpIHsgaXNWYWx1ZWQgPSBmYWxzZTsgfQogICAgIHZpcnR1YWwgfkhUTUxMSUVsZW1lbnRJbXBs
KCkge30KIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEhUTUxUYWdT
dGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNPcHRpb25h
bDsgfQorICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMzsgfQog
CiAgICAgdmlydHVhbCBib29sIG1hcFRvRW50cnkoTm9kZUltcGw6OklkIGF0dHIsIE1hcHBlZEF0
dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICphdHRyKTsKQEAgLTEzNiwxMCArMTQxLDEx
IEBAIHByaXZhdGU6CiBjbGFzcyBIVE1MRExpc3RFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MRWxl
bWVudEltcGwKIHsKIHB1YmxpYzoKLSAgICBIVE1MRExpc3RFbGVtZW50SW1wbChEb2N1bWVudFB0
ciAqZG9jKSA6IEhUTUxFbGVtZW50SW1wbChkb2MpIHt9CisgICAgSFRNTERMaXN0RWxlbWVudElt
cGwoRG9jdW1lbnRQdHIgKmRvYykgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjpkbCgpLCBk
b2MpIHt9CiAgICAgdmlydHVhbCB+SFRNTERMaXN0RWxlbWVudEltcGwoKSB7fQogCi0gICAgdmly
dHVhbCBJZCBpZCgpIGNvbnN0OworICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1
aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9CisgICAgdmlydHVh
bCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiA1OyB9CiAKICAgICBib29sIGNvbXBh
Y3QoKSBjb25zdDsKICAgICB2b2lkIHNldENvbXBhY3QoYm9vbCk7CkluZGV4OiBraHRtbC9odG1s
L2h0bWxfbWlzY2ltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3Jl
L2todG1sL2h0bWwvaHRtbF9taXNjaW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjYK
ZGlmZiAtdSAtcCAtcjEuMjYga2h0bWwvaHRtbC9odG1sX21pc2NpbXBsLmNwcAotLS0ga2h0bWwv
aHRtbC9odG1sX21pc2NpbXBsLmNwcAkxMSBKdW4gMjAwNSAwOTo1MTowMSAtMDAwMAkxLjI2Cisr
KyBraHRtbC9odG1sL2h0bWxfbWlzY2ltcGwuY3BwCTggSnVsIDIwMDUgMDU6NTA6MTIgLTAwMDAK
QEAgLTM1LDE1ICszNSwxMCBAQAogbmFtZXNwYWNlIERPTSB7CiAKIEhUTUxCYXNlRm9udEVsZW1l
bnRJbXBsOjpIVE1MQmFzZUZvbnRFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAgIDog
SFRNTEVsZW1lbnRJbXBsKGRvYykKKyAgICA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6OmJh
c2Vmb250KCksIGRvYykKIHsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxCYXNlRm9udEVsZW1lbnRJ
bXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0JBU0VGT05UOwotfQotCiBET01TdHJp
bmcgSFRNTEJhc2VGb250RWxlbWVudEltcGw6OmNvbG9yKCkgY29uc3QKIHsKICAgICByZXR1cm4g
Z2V0QXR0cmlidXRlKEFUVFJfQ09MT1IpOwpAQCAtMTQxLDcyICsxMzYsNzIgQEAgTm9kZUltcGwg
KkhUTUxDb2xsZWN0aW9uSW1wbDo6dHJhdmVyc2VOZQogICAgICAgICAgICAgSFRNTEVsZW1lbnRJ
bXBsICplID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KGN1cnJlbnQpOwogICAgICAg
ICAgICAgc3dpdGNoKHR5cGUpIHsKICAgICAgICAgICAgIGNhc2UgRE9DX0lNQUdFUzoKLSAgICAg
ICAgICAgICAgICBpZihlLT5pZCgpID09IElEX0lNRykKKyAgICAgICAgICAgICAgICBpZiAoZS0+
aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6aW1nKCkpKQogICAgICAgICAgICAgICAgICAgICBmb3Vu
ZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIERPQ19G
T1JNUzoKLSAgICAgICAgICAgICAgICBpZihlLT5pZCgpID09IElEX0ZPUk0pCisgICAgICAgICAg
ICAgICAgaWYoZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6Zm9ybSgpKSkKICAgICAgICAgICAg
ICAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgY2FzZSBET0NfTkFNRUFCTEVfSVRFTVM6Ci0gICAgICAgICAgICAgICAgaWYoZS0+aWQoKSA9
PSBJRF9JTUcpCisgICAgICAgICAgICAgICAgaWYgKGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6
OmltZygpKSkKICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwotICAgICAgICAgICAg
ICAgIGlmKGUtPmlkKCkgPT0gSURfRk9STSkKKyAgICAgICAgICAgICAgICBpZiAoZS0+aGFzTG9j
YWxOYW1lKEhUTUxOYW1lczo6Zm9ybSgpKSkKICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0
cnVlOwotICAgICAgICAgICAgICAgIGlmKGUtPmlkKCkgPT0gSURfQVBQTEVUKQorICAgICAgICAg
ICAgICAgIGlmIChlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjphcHBsZXQoKSkpCiAgICAgICAg
ICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBpZihlLT5pZCgpID09
IElEX0VNQkVEKQorICAgICAgICAgICAgICAgIGlmIChlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVz
OjplbWJlZCgpKSkKICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwotICAgICAgICAg
ICAgICAgIGlmKGUtPmlkKCkgPT0gSURfT0JKRUNUKQorICAgICAgICAgICAgICAgIGlmIChlLT5o
YXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvYmplY3QoKSkpCiAgICAgICAgICAgICAgICAgICAgIGZv
dW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgVEFC
TEVfVEJPRElFUzoKLSAgICAgICAgICAgICAgICBpZihlLT5pZCgpID09IElEX1RCT0RZKQorICAg
ICAgICAgICAgICAgIGlmIChlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0Ym9keSgpKSkKICAg
ICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGVsc2UgaWYo
ZS0+aWQoKSA9PSBJRF9UQUJMRSkKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChlLT5oYXNMb2Nh
bE5hbWUoSFRNTE5hbWVzOjp0YWJsZSgpKSkKICAgICAgICAgICAgICAgICAgICAgZGVlcCA9IGZh
bHNlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBUUl9DRUxMUzoK
LSAgICAgICAgICAgICAgICBpZihlLT5pZCgpID09IElEX1REIHx8IGUtPmlkKCkgPT0gSURfVEgp
CisgICAgICAgICAgICAgICAgaWYgKGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnRkKCkpIHx8
IGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnRoKCkpKQogICAgICAgICAgICAgICAgICAgICBm
b3VuZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZihlLT5pZCgpID09IElEX1RBQkxF
KQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnRh
YmxlKCkpKQogICAgICAgICAgICAgICAgICAgICBkZWVwID0gZmFsc2U7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFRBQkxFX1JPV1M6CiAgICAgICAgICAgICBjYXNl
IFRTRUNUSU9OX1JPV1M6Ci0gICAgICAgICAgICAgICAgaWYoZS0+aWQoKSA9PSBJRF9UUikKKyAg
ICAgICAgICAgICAgICBpZiAoZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dHIoKSkpCiAgICAg
ICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBlbHNlIGlmKGUt
PmlkKCkgPT0gSURfVEFCTEUpCisgICAgICAgICAgICAgICAgZWxzZSBpZiAoZS0+aGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6dGFibGUoKSkpCiAgICAgICAgICAgICAgICAgICAgIGRlZXAgPSBmYWxz
ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgU0VMRUNUX09QVElP
TlM6Ci0gICAgICAgICAgICAgICAgaWYoZS0+aWQoKSA9PSBJRF9PUFRJT04pCisgICAgICAgICAg
ICAgICAgaWYgKGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9wdGlvbigpKSkKICAgICAgICAg
ICAgICAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgY2FzZSBNQVBfQVJFQVM6Ci0gICAgICAgICAgICAgICAgaWYoZS0+aWQoKSA9PSBJRF9B
UkVBKQorICAgICAgICAgICAgICAgIGlmIChlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjphcmVh
KCkpKQogICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICBjYXNlIERPQ19BUFBMRVRTOiAgIC8vIGFsbCBPQkpFQ1QgYW5k
IEFQUExFVCBlbGVtZW50cwotICAgICAgICAgICAgICAgIGlmKGUtPmlkKCkgPT0gSURfT0JKRUNU
IHx8IGUtPmlkKCkgPT0gSURfQVBQTEVUKQorICAgICAgICAgICAgICAgIGlmIChlLT5oYXNMb2Nh
bE5hbWUoSFRNTE5hbWVzOjpvYmplY3QoKSkgfHwgZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6
YXBwbGV0KCkpKQogICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIERPQ19FTUJFRFM6ICAgLy8gYWxsIEVNQkVE
IGVsZW1lbnRzCi0gICAgICAgICAgICAgICAgaWYoZS0+aWQoKSA9PSBJRF9FTUJFRCkKKyAgICAg
ICAgICAgICAgICBpZiAoZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6ZW1iZWQoKSkpCiAgICAg
ICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIGNhc2UgRE9DX09CSkVDVFM6ICAgLy8gYWxsIE9CSkVDVCBlbGVtZW50cwotICAg
ICAgICAgICAgICAgIGlmKGUtPmlkKCkgPT0gSURfT0JKRUNUKQorICAgICAgICAgICAgICAgIGlm
IChlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvYmplY3QoKSkpCiAgICAgICAgICAgICAgICAg
ICAgIGZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNh
c2UgRE9DX0xJTktTOiAgICAgLy8gYWxsIEEgX2FuZF8gQVJFQSBlbGVtZW50cyB3aXRoIGEgdmFs
dWUgZm9yIGhyZWYKLSAgICAgICAgICAgICAgICBpZihlLT5pZCgpID09IElEX0EgfHwgZS0+aWQo
KSA9PSBJRF9BUkVBKQotICAgICAgICAgICAgICAgICAgICBpZighZS0+Z2V0QXR0cmlidXRlKEFU
VFJfSFJFRikuaXNOdWxsKCkpCisgICAgICAgICAgICAgICAgaWYgKGUtPmhhc0xvY2FsTmFtZShI
VE1MTmFtZXM6OmEoKSkgfHwgZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6YXJlYSgpKSkKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKCFlLT5nZXRBdHRyaWJ1dGUoQVRUUl9IUkVGKS5pc051bGwo
KSkKICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIGNhc2UgRE9DX0FOQ0hPUlM6ICAgICAgLy8gYWxsIEEgZWxl
bWVudHMgd2l0aCBhIHZhbHVlIGZvciBuYW1lIG9yIGFuIGlkIGF0dHJpYnV0ZQotICAgICAgICAg
ICAgICAgIGlmKGUtPmlkKCkgPT0gSURfQSkKLSAgICAgICAgICAgICAgICAgICAgaWYoIWUtPmdl
dEF0dHJpYnV0ZShBVFRSX05BTUUpLmlzTnVsbCgpKQorICAgICAgICAgICAgICAgIGlmIChlLT5o
YXNMb2NhbE5hbWUoSFRNTE5hbWVzOjphKCkpKQorICAgICAgICAgICAgICAgICAgICBpZiAoIWUt
PmdldEF0dHJpYnV0ZShBVFRSX05BTUUpLmlzTnVsbCgpKQogICAgICAgICAgICAgICAgICAgICAg
ICAgZm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2Fz
ZSBET0NfQUxMOgpAQCAtMjE5LDkgKzIxNCw5IEBAIE5vZGVJbXBsICpIVE1MQ29sbGVjdGlvbklt
cGw6OnRyYXZlcnNlTmUKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAga2RE
ZWJ1ZyggNjAzMCApIDw8ICJFcnJvciBpbiBIVE1MQ29sbGVjdGlvbiwgd3JvbmcgdGFnSWQhIiA8
PCBlbmRsOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGZvdW5kKSB7CisKKyAgICAg
ICAgICAgIGlmIChmb3VuZCkKICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudDsKLSAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIGlmIChkZWVwKSB7CiAgICAgICAgICAgICAgICAgY3VycmVu
dCA9IGN1cnJlbnQtPnRyYXZlcnNlTmV4dE5vZGUobV9iYXNlLmdldCgpKTsKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKQEAgLTI5OCwyOSArMjkzLDMxIEBAIE5vZGVJbXBsICpIVE1MQ29sbGVj
dGlvbkltcGw6Om5leHRJdGVtKCkKIAogYm9vbCBIVE1MQ29sbGVjdGlvbkltcGw6OmNoZWNrRm9y
TmFtZU1hdGNoKE5vZGVJbXBsICpub2RlLCBib29sIGNoZWNrTmFtZSwgY29uc3QgRE9NU3RyaW5n
ICZuYW1lLCBib29sIGNhc2VTZW5zaXRpdmUpIGNvbnN0CiB7Ci0gICAgRWxlbWVudEltcGwgKmUg
PSBzdGF0aWNfY2FzdDxFbGVtZW50SW1wbCAqPihub2RlKTsKKyAgICBpZiAoIW5vZGUtPmlzSFRN
TEVsZW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIEhUTUxFbGVtZW50
SW1wbCAqZSA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCo+KG5vZGUpOwogICAgIGlmIChj
YXNlU2Vuc2l0aXZlKSB7CiAgICAgICAgIGlmIChjaGVja05hbWUpIHsKICAgICAgICAgICAgIC8v
IGRvY3VtZW50LmFsbCByZXR1cm5zIG9ubHkgaW1hZ2VzLCBmb3JtcywgYXBwbGV0cywgb2JqZWN0
cyBhbmQgZW1iZWRzCiAgICAgICAgICAgICAvLyBieSBuYW1lICh0aG91Z2ggZXZlcnl0aGluZyBi
eSBpZCkKICAgICAgICAgICAgIGlmICh0eXBlID09IERPQ19BTEwgJiYgCi0gICAgICAgICAgICAg
ICAgIShlLT5pZCgpID09IElEX0lNRyB8fCBlLT5pZCgpID09IElEX0ZPUk0gfHwKLSAgICAgICAg
ICAgICAgICAgIGUtPmlkKCkgPT0gSURfQVBQTEVUIHx8IGUtPmlkKCkgPT0gSURfT0JKRUNUIHx8
Ci0gICAgICAgICAgICAgICAgICBlLT5pZCgpID09IElEX0VNQkVEKSkKKyAgICAgICAgICAgICAg
ICAhKGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmltZygpKSB8fCBlLT5oYXNMb2NhbE5hbWUo
SFRNTE5hbWVzOjpmb3JtKCkpIHx8CisgICAgICAgICAgICAgICAgICBlLT5oYXNMb2NhbE5hbWUo
SFRNTE5hbWVzOjphcHBsZXQoKSkgfHwgZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b2JqZWN0
KCkpIHx8CisgICAgICAgICAgICAgICAgICBlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjplbWJl
ZCgpKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAgICByZXR1
cm4gZS0+Z2V0QXR0cmlidXRlKEFUVFJfTkFNRSkgPT0gbmFtZSAmJiBlLT5nZXRBdHRyaWJ1dGUo
QVRUUl9JRCkgIT0gbmFtZTsKLSAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgfSBlbHNlCiAgICAg
ICAgICAgICByZXR1cm4gZS0+Z2V0QXR0cmlidXRlKEFUVFJfSUQpID09IG5hbWU7Ci0gICAgICAg
IH0KICAgICB9IGVsc2UgewogICAgICAgICBpZiAoY2hlY2tOYW1lKSB7CiAgICAgICAgICAgICAv
LyBkb2N1bWVudC5hbGwgcmV0dXJucyBvbmx5IGltYWdlcywgZm9ybXMsIGFwcGxldHMsIG9iamVj
dHMgYW5kIGVtYmVkcwogICAgICAgICAgICAgLy8gYnkgbmFtZSAodGhvdWdoIGV2ZXJ5dGhpbmcg
YnkgaWQpCiAgICAgICAgICAgICBpZiAodHlwZSA9PSBET0NfQUxMICYmIAotICAgICAgICAgICAg
ICAgICEoZS0+aWQoKSA9PSBJRF9JTUcgfHwgZS0+aWQoKSA9PSBJRF9GT1JNIHx8Ci0gICAgICAg
ICAgICAgICAgICBlLT5pZCgpID09IElEX0FQUExFVCB8fCBlLT5pZCgpID09IElEX09CSkVDVCB8
fAotICAgICAgICAgICAgICAgICAgZS0+aWQoKSA9PSBJRF9FTUJFRCkpCisgICAgICAgICAgICAg
ICAgIShlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjppbWcoKSkgfHwgZS0+aGFzTG9jYWxOYW1l
KEhUTUxOYW1lczo6Zm9ybSgpKSB8fAorICAgICAgICAgICAgICAgICAgZS0+aGFzTG9jYWxOYW1l
KEhUTUxOYW1lczo6YXBwbGV0KCkpIHx8IGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9iamVj
dCgpKSB8fAorICAgICAgICAgICAgICAgICAgZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6ZW1i
ZWQoKSkpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAgICAgcmV0
dXJuIGUtPmdldEF0dHJpYnV0ZShBVFRSX05BTUUpLmRvbVN0cmluZygpLmxvd2VyKCkgPT0gbmFt
ZS5sb3dlcigpICYmCkBAIC0zNzksNyArMzc2LDkgQEAgdm9pZCBIVE1MQ29sbGVjdGlvbkltcGw6
OnVwZGF0ZU5hbWVDYWNoZQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgZm9yIChOb2RlSW1w
bCAqbiA9IHRyYXZlcnNlTmV4dEl0ZW0obV9iYXNlLmdldCgpKTsgbjsgbiA9IHRyYXZlcnNlTmV4
dEl0ZW0obikpIHsKLSAgICAgICAgRWxlbWVudEltcGwgKmUgPSBzdGF0aWNfY2FzdDxFbGVtZW50
SW1wbCAqPihuKTsKKyAgICAgICAgaWYgKCFuLT5pc0hUTUxFbGVtZW50KCkpCisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgSFRNTEVsZW1lbnRJbXBsKiBlID0gc3RhdGljX2Nhc3Q8SFRN
TEVsZW1lbnRJbXBsKj4obik7CiAgICAgICAgIFFTdHJpbmcgaWRBdHRyID0gZS0+Z2V0QXR0cmli
dXRlKEFUVFJfSUQpLnN0cmluZygpOwogICAgICAgICBRU3RyaW5nIG5hbWVBdHRyID0gZS0+Z2V0
QXR0cmlidXRlKEFUVFJfTkFNRSkuc3RyaW5nKCk7CiAgICAgICAgIGlmICghaWRBdHRyLmlzRW1w
dHkoKSkgewpAQCAtMzkzLDkgKzM5Miw5IEBAIHZvaWQgSFRNTENvbGxlY3Rpb25JbXBsOjp1cGRh
dGVOYW1lQ2FjaGUKICAgICAgICAgfQogICAgICAgICBpZiAoIW5hbWVBdHRyLmlzRW1wdHkoKSAm
JiBpZEF0dHIgIT0gbmFtZUF0dHIKICAgICAgICAgICAgICYmICh0eXBlICE9IERPQ19BTEwgfHwg
Ci0gICAgICAgICAgICAgICAgKGUtPmlkKCkgPT0gSURfSU1HIHx8IGUtPmlkKCkgPT0gSURfRk9S
TSB8fAotICAgICAgICAgICAgICAgICBlLT5pZCgpID09IElEX0FQUExFVCB8fCBlLT5pZCgpID09
IElEX09CSkVDVCB8fAotICAgICAgICAgICAgICAgICBlLT5pZCgpID09IElEX0VNQkVEKSkpIHsK
KyAgICAgICAgICAgICAgICAoZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6aW1nKCkpIHx8IGUt
Pmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmZvcm0oKSkgfHwKKyAgICAgICAgICAgICAgICAgZS0+
aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6YXBwbGV0KCkpIHx8IGUtPmhhc0xvY2FsTmFtZShIVE1M
TmFtZXM6Om9iamVjdCgpKSB8fAorICAgICAgICAgICAgICAgICBlLT5oYXNMb2NhbE5hbWUoSFRN
TE5hbWVzOjplbWJlZCgpKSkpKSB7CiAgICAgICAgICAgICAvLyBhZGQgdG8gbmFtZSBjYWNoZQog
ICAgICAgICAgICAgUVB0clZlY3RvcjxOb2RlSW1wbD4gKm5hbWVWZWN0b3IgPSBpbmZvLT5uYW1l
Q2FjaGUuZmluZChuYW1lQXR0cik7CiAgICAgICAgICAgICBpZiAoIW5hbWVWZWN0b3IpIHsKQEAg
LTUzMiwxMiArNTMxLDEwIEBAIE5vZGVJbXBsKiBIVE1MRm9ybUNvbGxlY3Rpb25JbXBsOjpnZXRO
YW0KIAogTm9kZUltcGwqIEhUTUxGb3JtQ29sbGVjdGlvbkltcGw6OmdldE5hbWVkRm9ybUl0ZW0o
aW50IGF0dHJfaWQsIGNvbnN0IERPTVN0cmluZyYgbmFtZSwgaW50IGR1cGxpY2F0ZU51bWJlciwg
Ym9vbCBjYXNlU2Vuc2l0aXZlKSBjb25zdAogewotICAgIGlmKG1fYmFzZS0+bm9kZVR5cGUoKSA9
PSBOb2RlOjpFTEVNRU5UX05PREUpCi0gICAgeworICAgIGlmIChtX2Jhc2UtPm5vZGVUeXBlKCkg
PT0gTm9kZTo6RUxFTUVOVF9OT0RFKSB7CiAgICAgICAgIEhUTUxFbGVtZW50SW1wbCogYmFzZUVs
ZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwqPihtX2Jhc2UuZ2V0KCkpOwogICAg
ICAgICBib29sIGZvdW5kSW5wdXRFbGVtZW50cyA9IGZhbHNlOwotICAgICAgICBpZihiYXNlRWxl
bWVudC0+aWQoKSA9PSBJRF9GT1JNKQotICAgICAgICB7CisgICAgICAgIGlmIChiYXNlRWxlbWVu
dC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6Zm9ybSgpKSkgewogICAgICAgICAgICAgSFRNTEZv
cm1FbGVtZW50SW1wbCogZiA9IHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudEltcGwqPihiYXNl
RWxlbWVudCk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZi0+Zm9ybUVs
ZW1lbnRzLmNvdW50KCk7ICsraSkgewogICAgICAgICAgICAgICAgIEhUTUxHZW5lcmljRm9ybUVs
ZW1lbnRJbXBsKiBlID0gZi0+Zm9ybUVsZW1lbnRzW2ldOwpAQCAtNTU3LDggKzU1NCw3IEBAIE5v
ZGVJbXBsKiBIVE1MRm9ybUNvbGxlY3Rpb25JbXBsOjpnZXROYW0KICAgICAgICAgICAgIH0KICAg
ICAgICAgfQogCi0gICAgICAgIGlmICggIWZvdW5kSW5wdXRFbGVtZW50cyApCi0gICAgICAgIHsK
KyAgICAgICAgaWYgKCFmb3VuZElucHV0RWxlbWVudHMpIHsKICAgICAgICAgICAgIEhUTUxGb3Jt
RWxlbWVudEltcGwqIGYgPSBzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnRJbXBsKj4oYmFzZUVs
ZW1lbnQpOwogCiAgICAgICAgICAgICBmb3IodW5zaWduZWQgaSA9IDA7IGkgPCBmLT5pbWdFbGVt
ZW50cy5jb3VudCgpOyArK2kpCkBAIC02NTAsNyArNjQ2LDcgQEAgdm9pZCBIVE1MRm9ybUNvbGxl
Y3Rpb25JbXBsOjp1cGRhdGVOYW1lQwogCiAgICAgUURpY3Q8Y2hhcj4gZm91bmRJbnB1dEVsZW1l
bnRzOwogCi0gICAgaWYgKG1fYmFzZS0+aWQoKSAhPSBJRF9GT1JNKSB7CisgICAgaWYgKCFtX2Jh
c2UtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpmb3JtKCkpKSB7CiAgICAgICAgIGluZm8tPmhhc05h
bWVDYWNoZSA9IHRydWU7CiAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4OiBraHRtbC9odG1s
L2h0bWxfbWlzY2ltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9r
aHRtbC9odG1sL2h0bWxfbWlzY2ltcGwuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNgpkaWZm
IC11IC1wIC1yMS4xNiBraHRtbC9odG1sL2h0bWxfbWlzY2ltcGwuaAotLS0ga2h0bWwvaHRtbC9o
dG1sX21pc2NpbXBsLmgJMTEgTWF5IDIwMDUgMDA6NTg6MjggLTAwMDAJMS4xNgorKysga2h0bWwv
aHRtbC9odG1sX21pc2NpbXBsLmgJOCBKdWwgMjAwNSAwNTo1MDoxMiAtMDAwMApAQCAtMzksNyAr
MzksOCBAQCBjbGFzcyBIVE1MQmFzZUZvbnRFbGVtZW50SW1wbCA6IHB1YmxpYyBICiBwdWJsaWM6
CiAgICAgSFRNTEJhc2VGb250RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYyk7CiAKLSAgICB2
aXJ0dWFsIElkIGlkKCkgY29uc3Q7CisgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1Jl
cXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzRm9yYmlkZGVuOyB9CisgICAgdmly
dHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAwOyB9CiAKICAgICBET01TdHJp
bmcgY29sb3IoKSBjb25zdDsKICAgICB2b2lkIHNldENvbG9yKGNvbnN0IERPTVN0cmluZyAmKTsK
SW5kZXg6IGtodG1sL2h0bWwvaHRtbF9vYmplY3RpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfb2JqZWN0aW1wbC5jcHAsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuNjcKZGlmZiAtdSAtcCAtcjEuNjcga2h0bWwvaHRtbC9odG1sX29i
amVjdGltcGwuY3BwCi0tLSBraHRtbC9odG1sL2h0bWxfb2JqZWN0aW1wbC5jcHAJMjkgSnVuIDIw
MDUgMTc6NTA6MjQgLTAwMDAJMS42NworKysga2h0bWwvaHRtbC9odG1sX29iamVjdGltcGwuY3Bw
CTggSnVsIDIwMDUgMDU6NTA6MTMgLTAwMDAKQEAgLTU4LDcgKzU4LDcgQEAgbmFtZXNwYWNlIERP
TSB7CiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxBcHBsZXRFbGVtZW50SW1wbDo6SFRNTEFw
cGxldEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0gIDogSFRNTEVsZW1lbnRJbXBsKGRv
YykKKyAgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjphcHBsZXQoKSwgZG9jKQogewogICAg
IGFwcGxldEluc3RhbmNlID0gMDsKICAgICBtX2FsbFBhcmFtc0F2YWlsYWJsZSA9IGZhbHNlOwpA
QCAtNjksOSArNjksOSBAQCBIVE1MQXBwbGV0RWxlbWVudEltcGw6On5IVE1MQXBwbGV0RWxlbWVu
CiAgICAgZGVsZXRlIGFwcGxldEluc3RhbmNlOwogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTEFwcGxl
dEVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Citib29sIEhUTUxBcHBsZXRFbGVtZW50SW1wbDo6Y2hl
Y2tEVEQoY29uc3QgTm9kZUltcGwqIG5ld0NoaWxkKQogewotICAgIHJldHVybiBJRF9BUFBMRVQ7
CisJcmV0dXJuIG5ld0NoaWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6cGFyYW0oKSkgfHwgSFRN
TEVsZW1lbnRJbXBsOjpjaGVja0RURChuZXdDaGlsZCk7CiB9CiAKIGJvb2wgSFRNTEFwcGxldEVs
ZW1lbnRJbXBsOjptYXBUb0VudHJ5KE5vZGVJbXBsOjpJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVF
bnRyeSYgcmVzdWx0KSBjb25zdApAQCAtMzUzLDE2ICszNTMsMTYgQEAgdm9pZCBIVE1MQXBwbGV0
RWxlbWVudEltcGw6OnNldFdpZHRoKGNvbgogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MRW1i
ZWRFbGVtZW50SW1wbDo6SFRNTEVtYmVkRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAg
ICA6IEhUTUxFbGVtZW50SW1wbChkb2MpLCBlbWJlZEluc3RhbmNlKDApCisgICAgOiBIVE1MRWxl
bWVudEltcGwoSFRNTE5hbWVzOjplbWJlZCgpLCBkb2MpLCBlbWJlZEluc3RhbmNlKDApCiB7fQog
CiBIVE1MRW1iZWRFbGVtZW50SW1wbDo6fkhUTUxFbWJlZEVsZW1lbnRJbXBsKCkKIHsKIH0KIAot
Tm9kZUltcGw6OklkIEhUTUxFbWJlZEVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Citib29sIEhUTUxF
bWJlZEVsZW1lbnRJbXBsOjpjaGVja0RURChjb25zdCBOb2RlSW1wbCogbmV3Q2hpbGQpCiB7Ci0g
ICAgcmV0dXJuIElEX0VNQkVEOworCXJldHVybiBuZXdDaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OnBhcmFtKCkpIHx8IEhUTUxFbGVtZW50SW1wbDo6Y2hlY2tEVEQobmV3Q2hpbGQpOwogfQog
CiAjaWYgQVBQTEVfQ0hBTkdFUwpAQCAtNDc5LDcgKzQ3OSw3IEBAIGJvb2wgSFRNTEVtYmVkRWxl
bWVudEltcGw6OnJlbmRlcmVySXNOZWUKICAgICBLSFRNTFBhcnQgKnBhcnQgPSBnZXREb2N1bWVu
dCgpLT5wYXJ0KCk7CiAgICAgaWYgKCFwYXJ0KQogCXJldHVybiBmYWxzZTsKLSAgICByZXR1cm4g
cGFydC0+cGx1Z2luc0VuYWJsZWQoKSAmJiBwYXJlbnROb2RlKCktPmlkKCkgIT0gSURfT0JKRUNU
OworICAgIHJldHVybiBwYXJ0LT5wbHVnaW5zRW5hYmxlZCgpICYmICFwYXJlbnROb2RlKCktPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjpvYmplY3QoKSk7CiB9CiAKIFJlbmRlck9iamVjdCAqSFRNTEVt
YmVkRWxlbWVudEltcGw6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hICphcmVuYSwgUmVuZGVy
U3R5bGUgKnN0eWxlKQpAQCAtNTA0LDkgKzUwNCw5IEBAIGJvb2wgSFRNTEVtYmVkRWxlbWVudElt
cGw6OmlzVVJMQXR0cmlidXQKIAogSFRNTE9iamVjdEVsZW1lbnRJbXBsOjpIVE1MT2JqZWN0RWxl
bWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykgCiAjaWYgQVBQTEVfQ0hBTkdFUwotOiBIVE1MRWxl
bWVudEltcGwoZG9jKSwgbV9pbWFnZUxvYWRlcigwKSwgb2JqZWN0SW5zdGFuY2UoMCkKKzogSFRN
TEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6b2JqZWN0KCksIGRvYyksIG1faW1hZ2VMb2FkZXIoMCks
IG9iamVjdEluc3RhbmNlKDApCiAjZWxzZQotOiBIVE1MRWxlbWVudEltcGwoZG9jKSwgbV9pbWFn
ZUxvYWRlcigwKQorOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjpvYmplY3QoKSwgZG9jKSwg
bV9pbWFnZUxvYWRlcigwKQogI2VuZGlmCiB7CiAgICAgbmVlZFdpZGdldFVwZGF0ZSA9IGZhbHNl
OwpAQCAtNTE4LDkgKzUxOCw5IEBAIEhUTUxPYmplY3RFbGVtZW50SW1wbDo6fkhUTUxPYmplY3RF
bGVtZW4KICAgICBkZWxldGUgbV9pbWFnZUxvYWRlcjsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxP
YmplY3RFbGVtZW50SW1wbDo6aWQoKSBjb25zdAorYm9vbCBIVE1MT2JqZWN0RWxlbWVudEltcGw6
OmNoZWNrRFREKGNvbnN0IE5vZGVJbXBsKiBuZXdDaGlsZCkKIHsKLSAgICByZXR1cm4gSURfT0JK
RUNUOworCXJldHVybiBuZXdDaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnBhcmFtKCkpIHx8
IEhUTUxFbGVtZW50SW1wbDo6Y2hlY2tEVEQobmV3Q2hpbGQpOwogfQogCiAjaWYgQVBQTEVfQ0hB
TkdFUwpAQCAtNTU1LDcgKzU1NSw3IEBAIEtKUzo6QmluZGluZ3M6Okluc3RhbmNlICpIVE1MT2Jq
ZWN0RWxlbWUKIEhUTUxGb3JtRWxlbWVudEltcGwgKkhUTUxPYmplY3RFbGVtZW50SW1wbDo6Zm9y
bSgpIGNvbnN0CiB7CiAgICAgZm9yIChOb2RlSW1wbCAqcCA9IHBhcmVudE5vZGUoKTsgcCAhPSAw
OyBwID0gcC0+cGFyZW50Tm9kZSgpKSB7Ci0gICAgICAgIGlmIChwLT5pZCgpID09IElEX0ZPUk0p
CisgICAgICAgIGlmIChwLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Zm9ybSgpKSkKICAgICAgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnRJbXBsICo+KHApOwogICAgIH0K
ICAgICAKQEAgLTk1MCw3ICs5NTAsNyBAQCB2b2lkIEhUTUxPYmplY3RFbGVtZW50SW1wbDo6c2V0
V2lkdGgoY29uCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxQYXJhbUVsZW1lbnRJbXBsOjpI
VE1MUGFyYW1FbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAgIDogSFRNTEVsZW1lbnRJ
bXBsKGRvYykKKyAgICA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6OnBhcmFtKCksIGRvYykK
IHsKIH0KIApAQCAtOTU4LDExICs5NTgsNiBAQCBIVE1MUGFyYW1FbGVtZW50SW1wbDo6fkhUTUxQ
YXJhbUVsZW1lbnRJCiB7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MUGFyYW1FbGVtZW50SW1wbDo6
aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9QQVJBTTsKLX0KLQogdm9pZCBIVE1MUGFyYW1F
bGVtZW50SW1wbDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqYXR0
cikKIHsKICAgICBzd2l0Y2goIGF0dHItPmlkKCkgKQpJbmRleDoga2h0bWwvaHRtbC9odG1sX29i
amVjdGltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9o
dG1sL2h0bWxfb2JqZWN0aW1wbC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjMxCmRpZmYgLXUg
LXAgLXIxLjMxIGtodG1sL2h0bWwvaHRtbF9vYmplY3RpbXBsLmgKLS0tIGtodG1sL2h0bWwvaHRt
bF9vYmplY3RpbXBsLmgJMTEgTWF5IDIwMDUgMDU6NDk6MzQgLTAwMDAJMS4zMQorKysga2h0bWwv
aHRtbC9odG1sX29iamVjdGltcGwuaAk4IEp1bCAyMDA1IDA1OjUwOjEzIC0wMDAwCkBAIC00Miwx
MSArNDIsMTIgQEAgY2xhc3MgSFRNTEFwcGxldEVsZW1lbnRJbXBsIDogcHVibGljIEhUTQogewog
cHVibGljOgogICAgIEhUTUxBcHBsZXRFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKTsKLQog
ICAgIH5IVE1MQXBwbGV0RWxlbWVudEltcGwoKTsKIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25z
dDsKLQorICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0
IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3Jp
dHkoKSBjb25zdCB7IHJldHVybiAxOyB9CisJdmlydHVhbCBib29sIGNoZWNrRFREKGNvbnN0IE5v
ZGVJbXBsKiBuZXdDaGlsZCk7CisJCiAgICAgdmlydHVhbCBib29sIG1hcFRvRW50cnkoSWQgYXR0
ciwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lk
IHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKnRva2VuKTsKICAgICAK
QEAgLTExMiwxMCArMTEzLDExIEBAIGNsYXNzIEhUTUxFbWJlZEVsZW1lbnRJbXBsIDogcHVibGlj
IEhUTUwKIHsKIHB1YmxpYzoKICAgICBIVE1MRW1iZWRFbGVtZW50SW1wbChEb2N1bWVudFB0ciAq
ZG9jKTsKLQogICAgIH5IVE1MRW1iZWRFbGVtZW50SW1wbCgpOwogCi0gICAgdmlydHVhbCBJZCBp
ZCgpIGNvbnN0OworICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgp
IGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9CisgICAgdmlydHVhbCBpbnQgdGFn
UHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBib29sIGNoZWNrRFRE
KGNvbnN0IE5vZGVJbXBsKiBuZXdDaGlsZCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRy
eShJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdDsKICAgICB2aXJ0
dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqYXR0cik7
CkBAIC0xNDYsMTAgKzE0OCwxMSBAQCBjbGFzcyBIVE1MT2JqZWN0RWxlbWVudEltcGwgOiBwdWJs
aWMgSFRNCiB7CiBwdWJsaWM6CiAgICAgSFRNTE9iamVjdEVsZW1lbnRJbXBsKERvY3VtZW50UHRy
ICpkb2MpOwotCiAgICAgfkhUTUxPYmplY3RFbGVtZW50SW1wbCgpOwogCi0gICAgdmlydHVhbCBJ
ZCBpZCgpIGNvbnN0OworICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVu
dCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9CisgICAgdmlydHVhbCBpbnQg
dGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiA3OyB9CisJdmlydHVhbCBib29sIGNoZWNrRFRE
KGNvbnN0IE5vZGVJbXBsKiBuZXdDaGlsZCk7CiAKICAgICBIVE1MRm9ybUVsZW1lbnRJbXBsICpm
b3JtKCkgY29uc3Q7CiAKQEAgLTI0NywxMCArMjUwLDEwIEBAIGNsYXNzIEhUTUxQYXJhbUVsZW1l
bnRJbXBsIDogcHVibGljIEhUTUwKICAgICBmcmllbmQgY2xhc3MgSFRNTEFwcGxldEVsZW1lbnRJ
bXBsOwogcHVibGljOgogICAgIEhUTUxQYXJhbUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2Mp
OwotCiAgICAgfkhUTUxQYXJhbUVsZW1lbnRJbXBsKCk7CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkg
Y29uc3Q7CisgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29u
c3QgeyByZXR1cm4gVGFnU3RhdHVzRm9yYmlkZGVuOyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJp
b3JpdHkoKSBjb25zdCB7IHJldHVybiAwOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqdG9rZW4pOwogCkluZGV4OiBraHRtbC9o
dG1sL2h0bWxfdGFibGVpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2Vi
Q29yZS9raHRtbC9odG1sL2h0bWxfdGFibGVpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS41MwpkaWZmIC11IC1wIC1yMS41MyBraHRtbC9odG1sL2h0bWxfdGFibGVpbXBsLmNwcAotLS0g
a2h0bWwvaHRtbC9odG1sX3RhYmxlaW1wbC5jcHAJMTcgSnVuIDIwMDUgMjE6NTU6MzkgLTAwMDAJ
MS41MworKysga2h0bWwvaHRtbC9odG1sX3RhYmxlaW1wbC5jcHAJOCBKdWwgMjAwNSAwNTo1MDox
NCAtMDAwMApAQCAtNTEsNyArNTEsNyBAQCB1c2luZyBuYW1lc3BhY2Uga2h0bWw7CiBuYW1lc3Bh
Y2UgRE9NIHsKIAogSFRNTFRhYmxlRWxlbWVudEltcGw6OkhUTUxUYWJsZUVsZW1lbnRJbXBsKERv
Y3VtZW50UHRyICpkb2MpCi0gIDogSFRNTEVsZW1lbnRJbXBsKGRvYykKKyAgOiBIVE1MRWxlbWVu
dEltcGwoSFRNTE5hbWVzOjp0YWJsZSgpLCBkb2MpCiB7CiAgICAgdENhcHRpb24gPSAwOwogICAg
IGhlYWQgPSAwOwpAQCAtNzMsOSArNzMsMTMgQEAgSFRNTFRhYmxlRWxlbWVudEltcGw6On5IVE1M
VGFibGVFbGVtZW50SQogewogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTFRhYmxlRWxlbWVudEltcGw6
OmlkKCkgY29uc3QKK2Jvb2wgSFRNTFRhYmxlRWxlbWVudEltcGw6OmNoZWNrRFREKGNvbnN0IE5v
ZGVJbXBsKiBuZXdDaGlsZCkKIHsKLSAgICByZXR1cm4gSURfVEFCTEU7CisgICAgcmV0dXJuIG5l
d0NoaWxkLT5pc1RleHROb2RlKCkgfHwgbmV3Q2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpj
YXB0aW9uKCkpIHx8CisgICAgICAgICAgIG5ld0NoaWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
Y29sKCkpIHx8IG5ld0NoaWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Y29sZ3JvdXAoKSkgfHwK
KyAgICAgICAgICAgbmV3Q2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0aGVhZCgpKSB8fCBu
ZXdDaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRmb290KCkpIHx8CisgICAgICAgICAgIG5l
d0NoaWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGJvZHkoKSkgfHwgbmV3Q2hpbGQtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjpmb3JtKCkpIHx8CisgICAgICAgICAgIG5ld0NoaWxkLT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6c2NyaXB0KCkpOwogfQogCiBOb2RlSW1wbCogSFRNTFRhYmxlRWxlbWVu
dEltcGw6OnNldENhcHRpb24oIEhUTUxUYWJsZUNhcHRpb25FbGVtZW50SW1wbCAqYyApCkBAIC0x
NDYsNyArMTUwLDcgQEAgSFRNTEVsZW1lbnRJbXBsICpIVE1MVGFibGVFbGVtZW50SW1wbDo6Ywog
ICAgIGlmKCFoZWFkKQogICAgIHsKICAgICAgICAgaW50IGV4Y2VwdGlvbmNvZGUgPSAwOwotICAg
ICAgICBoZWFkID0gbmV3IEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbChkb2NQdHIoKSwgSURf
VEhFQUQsIHRydWUgLyogaW1wbGljaXQgKi8pOworICAgICAgICBoZWFkID0gbmV3IEhUTUxUYWJs
ZVNlY3Rpb25FbGVtZW50SW1wbChIVE1MTmFtZXM6OnRoZWFkKCksIGRvY1B0cigpLCB0cnVlIC8q
IGltcGxpY2l0ICovKTsKICAgICAgICAgaWYoZm9vdCkKICAgICAgICAgICAgIGluc2VydEJlZm9y
ZSggaGVhZCwgZm9vdCwgZXhjZXB0aW9uY29kZSApOwogICAgICAgICBlbHNlIGlmKGZpcnN0Qm9k
eSkKQEAgLTE3MSw3ICsxNzUsNyBAQCBIVE1MRWxlbWVudEltcGwgKkhUTUxUYWJsZUVsZW1lbnRJ
bXBsOjpjCiAgICAgaWYoIWZvb3QpCiAgICAgewogICAgICAgICBpbnQgZXhjZXB0aW9uY29kZSA9
IDA7Ci0gICAgICAgIGZvb3QgPSBuZXcgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsKGRvY1B0
cigpLCBJRF9URk9PVCwgdHJ1ZSAvKmltcGxpY2l0ICovKTsKKyAgICAgICAgZm9vdCA9IG5ldyBI
VE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGwoSFRNTE5hbWVzOjp0Zm9vdCgpLCBkb2NQdHIoKSwg
dHJ1ZSAvKmltcGxpY2l0ICovKTsKICAgICAgICAgaWYoZmlyc3RCb2R5KQogICAgICAgICAgICAg
aW5zZXJ0QmVmb3JlKCBmb290LCBmaXJzdEJvZHksIGV4Y2VwdGlvbmNvZGUgKTsKICAgICAgICAg
ZWxzZQpAQCAtMjE2LDcgKzIyMCw3IEBAIEhUTUxFbGVtZW50SW1wbCAqSFRNTFRhYmxlRWxlbWVu
dEltcGw6OmkKICAgICAvLyAobm90ZTogdGhpcyBpcyBkaWZmZXJlbnQgZnJvbSAiaWYgdGhlIHRh
YmxlIGhhcyBubyBzZWN0aW9ucyIsIHNpbmNlIHdlIGNhbiBoYXZlCiAgICAgLy8gPFRBQkxFPjxU
Uj4pCiAgICAgaWYoIWZpcnN0Qm9keSAmJiAhaGVhZCAmJiAhZm9vdCAmJiAhaGFzQ2hpbGROb2Rl
cygpKQotICAgICAgICBzZXRUQm9keSggbmV3IEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbChk
b2NQdHIoKSwgSURfVEJPRFksIHRydWUgLyogaW1wbGljaXQgKi8pICk7CisgICAgICAgIHNldFRC
b2R5KCBuZXcgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsKEhUTUxOYW1lczo6dGJvZHkoKSwg
ZG9jUHRyKCksIHRydWUgLyogaW1wbGljaXQgKi8pICk7CiAKICAgICAvL2tkRGVidWcoNjAzMCkg
PDwga19mdW5jaW5mbyA8PCBpbmRleCA8PCBlbmRsOwogICAgIC8vIElFIHRyZWF0cyBpbmRleD0t
MSBhcyBkZWZhdWx0IHZhbHVlIG1lYW5pbmcgJ2FwcGVuZCBhZnRlciBsYXN0JwpAQCAtMjMwLDcg
KzIzNCw4IEBAIEhUTUxFbGVtZW50SW1wbCAqSFRNTFRhYmxlRWxlbWVudEltcGw6OmkKICAgICB7
CiAJLy8gdGhlcmUgY291bGQgYmUgMiB0Zm9vdCBlbGVtZW50cyBpbiB0aGUgdGFibGUuIE9ubHkg
dGhlIGZpcnN0IG9uZSBpcyB0aGUgImZvb3QiLCB0aGF0J3Mgd2h5IHdlIGhhdmUgdGhlIG1vcmUK
IAkvLyBjb21wbGljYXRlZCBpZiBzdGF0ZW1lbnQgYmVsb3cuCi0gICAgICAgIGlmICggbm9kZSAh
PSBmb290ICYmIChub2RlLT5pZCgpID09IElEX1RIRUFEIHx8IG5vZGUtPmlkKCkgPT0gSURfVEZP
T1QgfHwgbm9kZS0+aWQoKSA9PSBJRF9UQk9EWSkgKQorICAgICAgICBpZiAobm9kZSAhPSBmb290
ICYmIChub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGhlYWQoKSkgfHwgbm9kZS0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OnRmb290KCkpIHx8IAorICAgICAgICAgICAgbm9kZS0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OnRib2R5KCkpKSkKICAgICAgICAgewogICAgICAgICAgICAgc2VjdGlvbiA9
IHN0YXRpY19jYXN0PEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbCAqPihub2RlKTsKICAgICAg
ICAgICAgIGxhc3RTZWN0aW9uID0gc2VjdGlvbjsKQEAgLTI3Niw4ICsyODEsOCBAQCB2b2lkIEhU
TUxUYWJsZUVsZW1lbnRJbXBsOjpkZWxldGVSb3coIGxvCiAgICAgYm9vbCBmb3VuZCA9IGZhbHNl
OwogICAgIGZvciAoIDsgbm9kZSA7IG5vZGUgPSBub2RlLT5uZXh0U2libGluZygpICkKICAgICB7
Ci0gICAgICAgIGlmICggbm9kZSAhPSBmb290ICYmIChub2RlLT5pZCgpID09IElEX1RIRUFEIHx8
IG5vZGUtPmlkKCkgPT0gSURfVEZPT1QgfHwgbm9kZS0+aWQoKSA9PSBJRF9UQk9EWSkgKQotICAg
ICAgICB7CisgICAgICAgIGlmIChub2RlICE9IGZvb3QgJiYgKG5vZGUtPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjp0aGVhZCgpKSB8fCBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGZvb3QoKSkg
fHwgCisgICAgICAgICAgICBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGJvZHkoKSkpKSB7
CiAgICAgICAgICAgICBzZWN0aW9uID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlU2VjdGlvbkVsZW1l
bnRJbXBsICo+KG5vZGUpOwogICAgICAgICAgICAgbGFzdFNlY3Rpb24gPSBzZWN0aW9uOwogICAg
ICAgICAgICAgaW50IHJvd3MgPSBzZWN0aW9uLT5udW1Sb3dzKCk7CkBAIC0zMDksNyArMzE0LDcg
QEAgTm9kZUltcGwgKkhUTUxUYWJsZUVsZW1lbnRJbXBsOjphZGRDaGlsZAogICAgIGtkRGVidWco
IDYwMzAgKSA8PCBub2RlTmFtZSgpLnN0cmluZygpIDw8ICIoVGFibGUpOjphZGRDaGlsZCggIiA8
PCBjaGlsZC0+bm9kZU5hbWUoKS5zdHJpbmcoKSA8PCAiICkiIDw8IGVuZGw7CiAjZW5kaWYKIAot
ICAgIGlmIChjaGlsZC0+aWQoKSA9PSBJRF9GT1JNKSB7CisgICAgaWYgKGNoaWxkLT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6Zm9ybSgpKSkgewogICAgICAgICAvLyBGaXJzdCBhZGQgdGhlIGNoaWxk
LgogICAgICAgICBIVE1MRWxlbWVudEltcGw6OmFkZENoaWxkKGNoaWxkKTsKICAgICAgICAgLy8g
Tm93IHNpbXBseSByZXR1cm4gb3Vyc2VsdmVzIGFzIHRoZSBuZXdub2RlLiAgVGhpcyBoYXMgdGhl
IGVmZmVjdCBvZgpAQCAtMzM3LDI4ICszNDIsMTUgQEAgTm9kZUltcGwgKkhUTUxUYWJsZUVsZW1l
bnRJbXBsOjphZGRDaGlsZAogCiAgICAgaW50IGV4Y2VwdGlvbmNvZGUgPSAwOwogICAgIE5vZGVJ
bXBsICpyZXR2YWwgPSBhcHBlbmRDaGlsZCggY2hpbGQsIGV4Y2VwdGlvbmNvZGUgKTsKLSAgICBp
ZiAoIHJldHZhbCApIHsKLQlzd2l0Y2goY2hpbGQtPmlkKCkpIHsKLQljYXNlIElEX0NBUFRJT046
Ci0JICAgIGlmICggIXRDYXB0aW9uICkKLQkJdENhcHRpb24gPSBzdGF0aWNfY2FzdDxIVE1MVGFi
bGVDYXB0aW9uRWxlbWVudEltcGwgKj4oY2hpbGQpOwotCSAgICBicmVhazsKLQljYXNlIElEX0NP
TDoKLQljYXNlIElEX0NPTEdST1VQOgotCSAgICBicmVhazsKLQljYXNlIElEX1RIRUFEOgotCSAg
ICBpZiAoICFoZWFkICkKLQkJaGVhZCA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZVNlY3Rpb25FbGVt
ZW50SW1wbCAqPihjaGlsZCk7Ci0JICAgIGJyZWFrOwotCWNhc2UgSURfVEZPT1Q6Ci0JICAgIGlm
ICggIWZvb3QgKQotCQlmb290ID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJ
bXBsICo+KGNoaWxkKTsKLQkgICAgYnJlYWs7Ci0JY2FzZSBJRF9UQk9EWToKLQkgICAgaWYgKCAh
Zmlyc3RCb2R5ICkKLQkJZmlyc3RCb2R5ID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlU2VjdGlvbkVs
ZW1lbnRJbXBsICo+KGNoaWxkKTsKLQkgICAgYnJlYWs7Ci0JfQorICAgIGlmIChyZXR2YWwpIHsK
KyAgICAgICAgaWYgKCF0Q2FwdGlvbiAmJiBjaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmNh
cHRpb24oKSkpCisgICAgICAgICAgICB0Q2FwdGlvbiA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZUNh
cHRpb25FbGVtZW50SW1wbCAqPihjaGlsZCk7CisgICAgICAgIGVsc2UgaWYgKCFoZWFkICYmIGNo
aWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGhlYWQoKSkpCisgICAgICAgICAgICBoZWFkID0g
c3RhdGljX2Nhc3Q8SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsICo+KGNoaWxkKTsKKyAgICAg
ICAgZWxzZSBpZiAoIWZvb3QgJiYgY2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0Zm9vdCgp
KSkKKyAgICAgICAgICAgIGZvb3QgPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVTZWN0aW9uRWxlbWVu
dEltcGwgKj4oY2hpbGQpOworCWVsc2UgaWYgKCFmaXJzdEJvZHkgJiYgY2hpbGQtPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjp0Ym9keSgpKSkKKwkgICAgZmlyc3RCb2R5ID0gc3RhdGljX2Nhc3Q8SFRN
TFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsICo+KGNoaWxkKTsKICAgICB9CiAgICAgcmV0dXJuIHJl
dHZhbDsKIH0KQEAgLTgwMiwxNyArNzk0LDE2IEBAIHZvaWQgSFRNTFRhYmxlUGFydEVsZW1lbnRJ
bXBsOjpwYXJzZU1hcHAKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1IVE1MVGFibGVTZWN0aW9u
RWxlbWVudEltcGw6OkhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9j
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdXNob3J0IHRhZ2lkLCBib29sIGltcGxpY2l0KQotICAgIDogSFRNTFRhYmxlUGFydEVsZW1l
bnRJbXBsKGRvYykKK0hUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbDo6SFRNTFRhYmxlU2VjdGlv
bkVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50UHRyICpk
b2MsIGJvb2wgaW1wbGljaXQpCisgICAgOiBIVE1MVGFibGVQYXJ0RWxlbWVudEltcGwodGFnTmFt
ZSwgZG9jKQogewotICAgIF9pZCA9IHRhZ2lkOwogICAgIG1faW1wbGljaXQgPSBpbXBsaWNpdDsK
IH0KIAotTm9kZUltcGw6OklkIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbDo6aWQoKSBjb25z
dAorYm9vbCBIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGw6OmNoZWNrRFREKGNvbnN0IE5vZGVJ
bXBsKiBuZXdDaGlsZCkKIHsKLSAgICByZXR1cm4gX2lkOworICAgIHJldHVybiBuZXdDaGlsZC0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRyKCkpIHx8IG5ld0NoaWxkLT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6Zm9ybSgpKSB8fAorICAgICAgICAgICBuZXdDaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OnNjcmlwdCgpKTsKIH0KIAogTm9kZUltcGwgKkhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1w
bDo6YWRkQ2hpbGQoTm9kZUltcGwgKmNoaWxkKQpAQCAtODIxLDcgKzgxMiw3IEBAIE5vZGVJbXBs
ICpIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGw6OmEKICAgICBrZERlYnVnKCA2MDMwICkgPDwg
bm9kZU5hbWUoKS5zdHJpbmcoKSA8PCAiKFRib2R5KTo6YWRkQ2hpbGQoICIgPDwgY2hpbGQtPm5v
ZGVOYW1lKCkuc3RyaW5nKCkgPDwgIiApIiA8PCBlbmRsOwogI2VuZGlmCiAKLSAgICBpZiAoY2hp
bGQtPmlkKCkgPT0gSURfRk9STSkgeworICAgIGlmIChjaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OmZvcm0oKSkpIHsKICAgICAgICAgLy8gRmlyc3QgYWRkIHRoZSBjaGlsZC4KICAgICAgICAg
SFRNTEVsZW1lbnRJbXBsOjphZGRDaGlsZChjaGlsZCk7CiAgICAgICAgIC8vIE5vdyBzaW1wbHkg
cmV0dXJuIG91cnNlbHZlcyBhcyB0aGUgbmV3bm9kZS4gIFRoaXMgaGFzIHRoZSBlZmZlY3Qgb2YK
QEAgLTg3Nyw3ICs4NjgsNyBAQCBpbnQgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsOjpudW1S
b3dzCiAgICAgaW50IHJvd3MgPSAwOwogICAgIGNvbnN0IE5vZGVJbXBsICpuID0gZmlyc3RDaGls
ZCgpOwogICAgIHdoaWxlIChuKSB7Ci0gICAgICAgIGlmIChuLT5pZCgpID09IElEX1RSKQorICAg
ICAgICBpZiAobi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRyKCkpKQogICAgICAgICAgICAgcm93
cysrOwogICAgICAgICBuID0gbi0+bmV4dFNpYmxpbmcoKTsKICAgICB9CkBAIC05MzIsOSArOTIz
LDEwIEBAIFNoYXJlZFB0cjxIVE1MQ29sbGVjdGlvbkltcGw+IEhUTUxUYWJsZVMKIAogLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQogCi1Ob2RlSW1wbDo6SWQgSFRNTFRhYmxlUm93RWxlbWVudEltcGw6Omlk
KCkgY29uc3QKK2Jvb2wgSFRNTFRhYmxlUm93RWxlbWVudEltcGw6OmNoZWNrRFREKGNvbnN0IE5v
ZGVJbXBsKiBuZXdDaGlsZCkKIHsKLSAgICByZXR1cm4gSURfVFI7CisgICAgcmV0dXJuIG5ld0No
aWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGQoKSkgfHwgbmV3Q2hpbGQtPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjp0aCgpKSB8fAorICAgICAgICAgICBuZXdDaGlsZC0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OmZvcm0oKSkgfHwgbmV3Q2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzY3JpcHQo
KSk7CiB9CiAKIE5vZGVJbXBsICpIVE1MVGFibGVSb3dFbGVtZW50SW1wbDo6YWRkQ2hpbGQoTm9k
ZUltcGwgKmNoaWxkKQpAQCAtOTQzLDcgKzkzNSw3IEBAIE5vZGVJbXBsICpIVE1MVGFibGVSb3dF
bGVtZW50SW1wbDo6YWRkQ2gKICAgICBrZERlYnVnKCA2MDMwICkgPDwgbm9kZU5hbWUoKS5zdHJp
bmcoKSA8PCAiKFRyb3cpOjphZGRDaGlsZCggIiA8PCBjaGlsZC0+bm9kZU5hbWUoKS5zdHJpbmco
KSA8PCAiICkiIDw8IGVuZGw7CiAjZW5kaWYKIAotICAgIGlmIChjaGlsZC0+aWQoKSA9PSBJRF9G
T1JNKSB7CisgICAgaWYgKGNoaWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Zm9ybSgpKSkgewog
ICAgICAgICAvLyBGaXJzdCBhZGQgdGhlIGNoaWxkLgogICAgICAgICBIVE1MRWxlbWVudEltcGw6
OmFkZENoaWxkKGNoaWxkKTsKICAgICAgICAgLy8gTm93IHNpbXBseSByZXR1cm4gb3Vyc2VsdmVz
IGFzIHRoZSBuZXdub2RlLiAgVGhpcyBoYXMgdGhlIGVmZmVjdCBvZgpAQCAtOTU4LDE2ICs5NTAs
MTYgQEAgbG9uZyBIVE1MVGFibGVSb3dFbGVtZW50SW1wbDo6cm93SW5kZXgoKQogICAgIGludCBy
SW5kZXggPSAwOwogCiAgICAgTm9kZUltcGwgKnRhYmxlID0gcGFyZW50Tm9kZSgpOwotICAgIGlm
ICggIXRhYmxlICkKKyAgICBpZiAoIXRhYmxlKQogCXJldHVybiAtMTsKICAgICB0YWJsZSA9IHRh
YmxlLT5wYXJlbnROb2RlKCk7Ci0gICAgaWYgKCAhdGFibGUgfHwgdGFibGUtPmlkKCkgIT0gSURf
VEFCTEUgKQorICAgIGlmICghdGFibGUgfHwgIXRhYmxlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
dGFibGUoKSkpCiAJcmV0dXJuIC0xOwogCiAgICAgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBs
ICpmb290ID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlRWxlbWVudEltcGwgKj4odGFibGUpLT50Rm9v
dCgpOwogICAgIE5vZGVJbXBsICpub2RlID0gdGFibGUtPmZpcnN0Q2hpbGQoKTsKLSAgICB3aGls
ZSAoIG5vZGUgKSB7Ci0gICAgICAgIGlmICggbm9kZSAhPSBmb290ICYmIChub2RlLT5pZCgpID09
IElEX1RIRUFEIHx8IG5vZGUtPmlkKCkgPT0gSURfVEZPT1QgfHwgbm9kZS0+aWQoKSA9PSBJRF9U
Qk9EWSkgKSB7CisgICAgd2hpbGUgKG5vZGUpIHsKKyAgICAgICAgaWYgKG5vZGUgIT0gZm9vdCAm
JiAobm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRoZWFkKCkpIHx8IG5vZGUtPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjp0Zm9vdCgpKSB8fCBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGJv
ZHkoKSkpKSB7CiAJICAgIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbCogc2VjdGlvbiA9IHN0
YXRpY19jYXN0PEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbCAqPihub2RlKTsKIAkgICAgY29u
c3QgTm9kZUltcGwgKnJvdyA9IHNlY3Rpb24tPmZpcnN0Q2hpbGQoKTsKIAkgICAgd2hpbGUgKCBy
b3cgKSB7CkBAIC05OTYsNyArOTg4LDcgQEAgbG9uZyBIVE1MVGFibGVSb3dFbGVtZW50SW1wbDo6
c2VjdGlvblJvdwogICAgIGNvbnN0IE5vZGVJbXBsICpuID0gdGhpczsKICAgICBkbyB7CiAgICAg
ICAgIG4gPSBuLT5wcmV2aW91c1NpYmxpbmcoKTsKLSAgICAgICAgaWYgKG4gJiYgbi0+aXNFbGVt
ZW50Tm9kZSgpICYmIG4tPmlkKCkgPT0gSURfVFIpCisgICAgICAgIGlmIChuICYmIG4tPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjp0cigpKSkKICAgICAgICAgICAgIHJJbmRleCsrOwogICAgIH0KICAg
ICB3aGlsZSAobik7CkBAIC0xMDEzLDcgKzEwMDUsNyBAQCBIVE1MRWxlbWVudEltcGwgKkhUTUxU
YWJsZVJvd0VsZW1lbnRJbXBsCiAgICAgICAgIGV4Y2VwdGlvbmNvZGUgPSBET01FeGNlcHRpb246
OklOREVYX1NJWkVfRVJSOyAvLyBwZXIgdGhlIERPTQogICAgIGVsc2UKICAgICB7Ci0gICAgICAg
IGMgPSBuZXcgSFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsKGRvY1B0cigpLCBJRF9URCk7CisgICAg
ICAgIGMgPSBuZXcgSFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6dGQoKSwgZG9j
UHRyKCkpOwogICAgICAgICBpZihudW1DZWxscyA9PSBpbmRleCB8fCBpbmRleCA9PSAtMSkKICAg
ICAgICAgICAgIGFwcGVuZENoaWxkKGMsIGV4Y2VwdGlvbmNvZGUpOwogICAgICAgICBlbHNlIHsK
QEAgLTExMDMsMTUgKzEwOTUsMTQgQEAgdm9pZCBIVE1MVGFibGVSb3dFbGVtZW50SW1wbDo6c2V0
VkFsaWduKAogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUhUTUxUYWJsZUNlbGxFbGVtZW50SW1w
bDo6SFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIGludCB0YWcpCi0g
IDogSFRNTFRhYmxlUGFydEVsZW1lbnRJbXBsKGRvYykKK0hUTUxUYWJsZUNlbGxFbGVtZW50SW1w
bDo6SFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUs
IERvY3VtZW50UHRyICpkb2MpCisgIDogSFRNTFRhYmxlUGFydEVsZW1lbnRJbXBsKHRhZ05hbWUs
IGRvYykKIHsKLSAgX2NvbCA9IC0xOwotICBfcm93ID0gLTE7Ci0gIGNTcGFuID0gclNwYW4gPSAx
OwotICBfaWQgPSB0YWc7Ci0gIHJvd0hlaWdodCA9IDA7Ci0gIG1fc29saWQgPSBmYWxzZTsKKyAg
ICBfY29sID0gLTE7CisgICAgX3JvdyA9IC0xOworICAgIGNTcGFuID0gclNwYW4gPSAxOworICAg
IHJvd0hlaWdodCA9IDA7CisgICAgbV9zb2xpZCA9IGZhbHNlOwogfQogCiBIVE1MVGFibGVDZWxs
RWxlbWVudEltcGw6On5IVE1MVGFibGVDZWxsRWxlbWVudEltcGwoKQpAQCAtMTEyMiw3ICsxMTEz
LDcgQEAgbG9uZyBIVE1MVGFibGVDZWxsRWxlbWVudEltcGw6OmNlbGxJbmRleAogewogICAgIGlu
dCBpbmRleCA9IDA7CiAgICAgZm9yIChjb25zdCBOb2RlSW1wbCAqIG5vZGUgPSBwcmV2aW91c1Np
YmxpbmcoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPnByZXZpb3VzU2libGluZygpKSB7Ci0gICAgICAg
IGlmIChub2RlLT5pZCgpID09IElEX1REIHx8IG5vZGUtPmlkKCkgPT0gSURfVEgpCisgICAgICAg
IGlmIChub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGQoKSkgfHwgbm9kZS0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OnRoKCkpKQogICAgICAgICAgICAgaW5kZXgrKzsKICAgICB9CiAgICAgCkBA
IC0xMTg5LDkgKzExODAsOSBAQCB2b2lkIEhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbDo6cGFyc2VN
YXBwCiAvLyB1c2VkIGJ5IHRhYmxlIGNlbGxzIHRvIHNoYXJlIHN0eWxlIGRlY2xzIGNyZWF0ZWQg
YnkgdGhlIGVuY2xvc2luZyB0YWJsZS4KIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uSW1wbCog
SFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsOjphZGRpdGlvbmFsQXR0cmlidXRlU3R5bGVEZWNsKCkK
IHsKLSAgICBIVE1MRWxlbWVudEltcGwqIHAgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwq
PihwYXJlbnROb2RlKCkpOwotICAgIHdoaWxlKHAgJiYgcC0+aWQoKSAhPSBJRF9UQUJMRSkKLSAg
ICAgICAgcCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCo+KHAtPnBhcmVudE5vZGUoKSk7
CisgICAgTm9kZUltcGwqIHAgPSBwYXJlbnROb2RlKCk7CisgICAgd2hpbGUgKHAgJiYgIXAtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjp0YWJsZSgpKSkKKyAgICAgICAgcCA9IHAtPnBhcmVudE5vZGUo
KTsKIAogICAgIGlmIChwKSB7CiAgICAgICAgIEhUTUxUYWJsZUVsZW1lbnRJbXBsKiB0YWJsZSA9
IHN0YXRpY19jYXN0PEhUTUxUYWJsZUVsZW1lbnRJbXBsKj4ocCk7CkBAIC0xMjAxLDE1ICsxMTky
LDYgQEAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25JbXBsKiBIVE1MVGFibAogICAgIHJldHVy
biAwOwogfQogCi12b2lkIEhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbDo6YXR0YWNoKCkKLXsKLSAg
ICBIVE1MRWxlbWVudEltcGwqIHAgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwqPihwYXJl
bnROb2RlKCkpOwotICAgIHdoaWxlKHAgJiYgcC0+aWQoKSAhPSBJRF9UQUJMRSkKLSAgICAgICAg
cCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCo+KHAtPnBhcmVudE5vZGUoKSk7Ci0KLSAg
ICBIVE1MVGFibGVQYXJ0RWxlbWVudEltcGw6OmF0dGFjaCgpOwotfQotCiBib29sIEhUTUxUYWJs
ZUNlbGxFbGVtZW50SW1wbDo6aXNVUkxBdHRyaWJ1dGUoQXR0cmlidXRlSW1wbCAqYXR0cikgY29u
c3QKIHsKICAgICByZXR1cm4gYXR0ci0+aWQoKSA9PSBBVFRSX0JBQ0tHUk9VTkQ7CkBAIC0xMzQ3
LDE2ICsxMzI5LDEwIEBAIHZvaWQgSFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsOjpzZXRXaWR0aCgK
IAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1IVE1MVGFibGVDb2xFbGVtZW50SW1wbDo6SFRNTFRh
YmxlQ29sRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgdXNob3J0IGkpCi0gICAgOiBIVE1M
VGFibGVQYXJ0RWxlbWVudEltcGwoZG9jKQorSFRNTFRhYmxlQ29sRWxlbWVudEltcGw6OkhUTUxU
YWJsZUNvbEVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50
UHRyICpkb2MpCisgICAgOiBIVE1MVGFibGVQYXJ0RWxlbWVudEltcGwodGFnTmFtZSwgZG9jKQog
ewotICAgIF9pZCA9IGk7Ci0gICAgX3NwYW4gPSAoX2lkID09IElEX0NPTEdST1VQID8gMCA6IDEp
OwotfQotCi1Ob2RlSW1wbDo6SWQgSFRNTFRhYmxlQ29sRWxlbWVudEltcGw6OmlkKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gX2lkOworICAgIF9zcGFuID0gKHRhZ05hbWUubWF0Y2hlcyhIVE1MTmFt
ZXM6OmNvbGdyb3VwKCkpID8gMCA6IDEpOwogfQogCiBib29sIEhUTUxUYWJsZUNvbEVsZW1lbnRJ
bXBsOjptYXBUb0VudHJ5KE5vZGVJbXBsOjpJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYg
cmVzdWx0KSBjb25zdApAQCAtMTQ0NywxMSArMTQyMyw2IEBAIHZvaWQgSFRNTFRhYmxlQ29sRWxl
bWVudEltcGw6OnNldFdpZHRoKGMKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Ob2RlSW1wbDo6
SWQgSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IElEX0NBUFRJT047Ci19Ci0KIGJvb2wgSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnRJbXBsOjptYXBU
b0VudHJ5KE5vZGVJbXBsOjpJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBj
b25zdAogewogICAgIGlmIChhdHRyID09IEFUVFJfQUxJR04pIHsKSW5kZXg6IGtodG1sL2h0bWwv
aHRtbF90YWJsZWltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9r
aHRtbC9odG1sL2h0bWxfdGFibGVpbXBsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjEKZGlm
ZiAtdSAtcCAtcjEuMjEga2h0bWwvaHRtbC9odG1sX3RhYmxlaW1wbC5oCi0tLSBraHRtbC9odG1s
L2h0bWxfdGFibGVpbXBsLmgJMTcgSnVuIDIwMDUgMjE6NTU6MzkgLTAwMDAJMS4yMQorKysga2h0
bWwvaHRtbC9odG1sX3RhYmxlaW1wbC5oCTggSnVsIDIwMDUgMDU6NTA6MTQgLTAwMDAKQEAgLTYy
LDcgKzYyLDkgQEAgcHVibGljOgogICAgIEhUTUxUYWJsZUVsZW1lbnRJbXBsKERvY3VtZW50UHRy
ICpkb2MpOwogICAgIH5IVE1MVGFibGVFbGVtZW50SW1wbCgpOwogCi0gICAgdmlydHVhbCBJZCBp
ZCgpIGNvbnN0OworICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgp
IGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9CisgICAgdmlydHVhbCBpbnQgdGFn
UHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiA5OyB9CisgICAgdmlydHVhbCBib29sIGNoZWNrRFRE
KGNvbnN0IE5vZGVJbXBsKiBuZXdDaGlsZCk7CiAKICAgICBIVE1MVGFibGVDYXB0aW9uRWxlbWVu
dEltcGwgKmNhcHRpb24oKSBjb25zdCB7IHJldHVybiB0Q2FwdGlvbjsgfQogICAgIE5vZGVJbXBs
ICpzZXRDYXB0aW9uKCBIVE1MVGFibGVDYXB0aW9uRWxlbWVudEltcGwgKiApOwpAQCAtMTQ3LDgg
KzE0OSw4IEBAIGNsYXNzIEhUTUxUYWJsZVBhcnRFbGVtZW50SW1wbCA6IHB1YmxpYyAKIAogewog
cHVibGljOgotICAgIEhUTUxUYWJsZVBhcnRFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQot
ICAgICAgICA6IEhUTUxFbGVtZW50SW1wbChkb2MpCisgICAgSFRNTFRhYmxlUGFydEVsZW1lbnRJ
bXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50UHRyICpkb2MpCisgICAg
ICAgIDogSFRNTEVsZW1lbnRJbXBsKHRhZ05hbWUsIGRvYykKICAgICAgICAgeyB9CiAKICAgICB2
aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShOb2RlSW1wbDo6SWQgYXR0ciwgTWFwcGVkQXR0cmlidXRl
RW50cnkmIHJlc3VsdCkgY29uc3Q7CkBAIC0xNjAsOSArMTYyLDExIEBAIHB1YmxpYzoKIGNsYXNz
IEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MVGFibGVQYXJ0RWxlbWVu
dEltcGwKIHsKIHB1YmxpYzoKLSAgICBIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGwoRG9jdW1l
bnRQdHIgKmRvYywgdXNob3J0IHRhZ2lkLCBib29sIGltcGxpY2l0KTsKKyAgICBIVE1MVGFibGVT
ZWN0aW9uRWxlbWVudEltcGwoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnRQ
dHIgKmRvYywgYm9vbCBpbXBsaWNpdCk7CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7Cisg
ICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1
cm4gVGFnU3RhdHVzT3B0aW9uYWw7IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNv
bnN0IHsgcmV0dXJuIDg7IH0KKyAgICB2aXJ0dWFsIGJvb2wgY2hlY2tEVEQoY29uc3QgTm9kZUlt
cGwqIG5ld0NoaWxkKTsKIAogICAgIHZpcnR1YWwgTm9kZUltcGwgKmFkZENoaWxkKE5vZGVJbXBs
ICpjaGlsZCk7CiAgICAgCkBAIC0xODQsOSArMTg4LDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0
VkFsaWduKCBjb25zdCBET01TdHJpbmcgJiApOwogCiAgICAga2h0bWw6OlNoYXJlZFB0cjxIVE1M
Q29sbGVjdGlvbkltcGw+IHJvd3MoKTsKLQotcHJvdGVjdGVkOgotICAgIHVzaG9ydCBfaWQ7CiB9
OwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xOTUsMTAgKzE5NiwxMiBAQCBjbGFzcyBIVE1M
VGFibGVSb3dFbGVtZW50SW1wbCA6IHB1YmxpYyBICiB7CiBwdWJsaWM6CiAgICAgSFRNTFRhYmxl
Um93RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgICAgICAgOiBIVE1MVGFibGVQYXJ0
RWxlbWVudEltcGwoZG9jKSB7fQotCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OworICAgICAg
ICA6IEhUTUxUYWJsZVBhcnRFbGVtZW50SW1wbChIVE1MTmFtZXM6OnRyKCksIGRvYykge30KIAor
ICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0
dXJuIFRhZ1N0YXR1c09wdGlvbmFsOyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBj
b25zdCB7IHJldHVybiA3OyB9CisgICAgdmlydHVhbCBib29sIGNoZWNrRFREKGNvbnN0IE5vZGVJ
bXBsKiBuZXdDaGlsZCk7CisJCiAgICAgdmlydHVhbCBOb2RlSW1wbCAqYWRkQ2hpbGQoTm9kZUlt
cGwgKmNoaWxkKTsKICAgICAKICAgICBsb25nIHJvd0luZGV4KCkgY29uc3Q7CkBAIC0yMzgsMTAg
KzI0MSwxMiBAQCBwcm90ZWN0ZWQ6CiBjbGFzcyBIVE1MVGFibGVDZWxsRWxlbWVudEltcGwgOiBw
dWJsaWMgSFRNTFRhYmxlUGFydEVsZW1lbnRJbXBsCiB7CiBwdWJsaWM6Ci0gICAgSFRNTFRhYmxl
Q2VsbEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIGludCB0YWdJZCk7CisgICAgSFRNTFRh
YmxlQ2VsbEVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50
UHRyICpkb2MpOwogICAgIH5IVE1MVGFibGVDZWxsRWxlbWVudEltcGwoKTsKIAotICAgIC8vICMj
IyBGSVggdGhlc2UgdHdvLi4uCisgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVp
cmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzT3B0aW9uYWw7IH0KKyAgICB2aXJ0dWFs
IGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDY7IH0KKwogICAgIGxvbmcgY2VsbElu
ZGV4KCkgY29uc3Q7CiAKICAgICBpbnQgY29sKCkgY29uc3QgeyByZXR1cm4gX2NvbDsgfQpAQCAt
MjUxLDE0ICsyNTYsMTAgQEAgcHVibGljOgogCiAgICAgaW50IGNvbFNwYW4oKSBjb25zdCB7IHJl
dHVybiBjU3BhbjsgfQogICAgIGludCByb3dTcGFuKCkgY29uc3QgeyByZXR1cm4gclNwYW47IH0K
LSAgICAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3QgeyByZXR1cm4gX2lkOyB9Ci0gICAgCisK
ICAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShOb2RlSW1wbDo6SWQgYXR0ciwgTWFwcGVkQXR0
cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVk
QXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIpOwogCi0gICAgdmlydHVhbCB2b2lk
IGF0dGFjaCgpOwotCiAgICAgLy8gdXNlZCBieSB0YWJsZSBjZWxscyB0byBzaGFyZSBzdHlsZSBk
ZWNscyBjcmVhdGVkIGJ5IHRoZSBlbmNsb3NpbmcgdGFibGUuCiAgICAgdmlydHVhbCBDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbkltcGwqIGFkZGl0aW9uYWxBdHRyaWJ1dGVTdHlsZURlY2woKTsK
ICAgICAKQEAgLTMxMSw3ICszMTIsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgaW50IF9jb2w7CiAgICAg
aW50IHJTcGFuOwogICAgIGludCBjU3BhbjsKLSAgICBpbnQgX2lkOwogICAgIGludCByb3dIZWln
aHQ7CiAgICAgYm9vbCBtX3NvbGlkICAgICAgICA6IDE7CiB9OwpAQCAtMzIxLDEwICszMjEsMTEg
QEAgcHJvdGVjdGVkOgogY2xhc3MgSFRNTFRhYmxlQ29sRWxlbWVudEltcGwgOiBwdWJsaWMgSFRN
TFRhYmxlUGFydEVsZW1lbnRJbXBsCiB7CiBwdWJsaWM6Ci0gICAgSFRNTFRhYmxlQ29sRWxlbWVu
dEltcGwoRG9jdW1lbnRQdHIgKmRvYywgdXNob3J0IGkpOwotCi0gICAgdmlydHVhbCBJZCBpZCgp
IGNvbnN0OworICAgIEhUTUxUYWJsZUNvbEVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUm
IHRhZ05hbWUsIERvY3VtZW50UHRyICpkb2MpOwogCisgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVz
IGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gaGFzTG9jYWxOYW1lKEhUTUxOYW1l
czo6Y29sKCkpID8gVGFnU3RhdHVzRm9yYmlkZGVuIDogVGFnU3RhdHVzT3B0aW9uYWw7IH0KKyAg
ICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIGhhc0xvY2FsTmFtZShI
VE1MTmFtZXM6OmNvbCgpKSA/IDAgOiAxOyB9CisgICAgdmlydHVhbCBib29sIGNoZWNrRFREKGNv
bnN0IE5vZGVJbXBsKiBuZXdDaGlsZCkgeyByZXR1cm4gaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6
Y29sZ3JvdXAoKSkgJiYgbmV3Q2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpjb2woKSk7IH0K
ICAgICB2b2lkIHNldFRhYmxlKEhUTUxUYWJsZUVsZW1lbnRJbXBsICp0KSB7IHRhYmxlID0gdDsg
fQogCiAgICAgLy8gb3ZlcnJpZGVzCkBAIC0zNTEsMTAgKzM1Miw2IEBAIHB1YmxpYzoKICAgICB2
b2lkIHNldFdpZHRoKCBjb25zdCBET01TdHJpbmcgJiApOwogCiBwcm90ZWN0ZWQ6Ci0gICAgLy8g
Y291bGQgYmUgSURfQ09MIG9yIElEX0NPTEdST1VQIC4uLiBUaGUgRE9NIGlzIG5vdCBxdWl0ZSBj
bGVhciBvbgotICAgIC8vIHRoaXMsIGJ1dCBzaW5jZSBib3RoIGVsZW1lbnRzIHdvcmsgcXVpdGUg
c2ltaWxhciwgd2UgdXNlIG9uZQotICAgIC8vIERPTUVsZW1lbnQgZm9yIHRoZW0uLi4KLSAgICB1
c2hvcnQgX2lkOwogICAgIGludCBfc3BhbjsKICAgICBIVE1MVGFibGVFbGVtZW50SW1wbCAqdGFi
bGU7CiB9OwpAQCAtMzY1LDkgKzM2MiwxMCBAQCBjbGFzcyBIVE1MVGFibGVDYXB0aW9uRWxlbWVu
dEltcGwgOiBwdWJsCiB7CiBwdWJsaWM6CiAgICAgSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnRJbXBs
KERvY3VtZW50UHRyICpkb2MpCi0gICAgICAgIDogSFRNTFRhYmxlUGFydEVsZW1lbnRJbXBsKGRv
Yykge30KKyAgICAgICAgOiBIVE1MVGFibGVQYXJ0RWxlbWVudEltcGwoSFRNTE5hbWVzOjpjYXB0
aW9uKCksIGRvYykge30KIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0
dXNSZXF1aXJlZDsgfQorICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1
cm4gNTsgfQogICAgIAogICAgIHZpcnR1YWwgYm9vbCBtYXBUb0VudHJ5KE5vZGVJbXBsOjpJZCBh
dHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdDsKICAgICB2aXJ0dWFsIHZv
aWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqYXR0cik7CkluZGV4
OiBraHRtbC9odG1sL2h0bWxuYW1lcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sbmFtZXMuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjIKZGlmZiAtdSAtcCAtcjEuMiBraHRtbC9odG1sL2h0bWxuYW1lcy5jcHAKLS0tIGtodG1sL2h0
bWwvaHRtbG5hbWVzLmNwcAkxNiBKdW4gMjAwNSAyMDozMzo1NyAtMDAwMAkxLjIKKysrIGtodG1s
L2h0bWwvaHRtbG5hbWVzLmNwcAk4IEp1bCAyMDA1IDA1OjUwOjE1IC0wMDAwCkBAIC0yMCw1NTEg
KzIwLDIzNSBAQAogICoKICAqLwogCisjZGVmaW5lIEtIVE1MX0hUTUxOQU1FU19ISURFX0dMT0JB
TFMgMQorCisjaW5jbHVkZSA8cXB0cmRpY3QuaD4KICNpbmNsdWRlICJodG1sbmFtZXMuaCIKICNp
bmNsdWRlICJkb21fcW5hbWUuaCIKIAogbmFtZXNwYWNlIERPTSB7CiAKLWNvbnN0IEF0b21pY1N0
cmluZyYgSFRNTE5hbWVzOjp4aHRtbE5hbWVzcGFjZVVSSSgpCi17Ci0gICAgc3RhdGljIEF0b21p
Y1N0cmluZyB4aHRtbE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIik7Ci0gICAgcmV0
dXJuIHhodG1sTlM7Ci19Ci0KLQotLy8gVGFnIG5hbWVzLgotY29uc3QgUXVhbGlmaWVkTmFtZSYg
SFRNTE5hbWVzOjphKCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBhKG51bGxBdG9tLCAi
YSIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiBhOwotfQotCi1jb25zdCBRdWFs
aWZpZWROYW1lJiBIVE1MTmFtZXM6OmFkZHJlc3MoKQotewotICAgIHN0YXRpYyBRdWFsaWZpZWRO
YW1lIGFkZHJlc3MobnVsbEF0b20sICJhZGRyZXNzIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0g
ICAgcmV0dXJuIGFkZHJlc3M7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6
YXBwbGV0KCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBhcHBsZXQobnVsbEF0b20sICJh
cHBsZXQiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4gYXBwbGV0OwotfQotCi1j
b25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OmFyZWEoKQotewotICAgIHN0YXRpYyBRdWFs
aWZpZWROYW1lIGFyZWEobnVsbEF0b20sICJhcmVhIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0g
ICAgcmV0dXJuIGFyZWE7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6Yigp
Ci17Ci0gICAgc3RhdGljIFF1YWxpZmllZE5hbWUgYihudWxsQXRvbSwgImIiLCB4aHRtbE5hbWVz
cGFjZVVSSSgpKTsKLSAgICByZXR1cm4gYjsKLX0KLQotY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRN
TE5hbWVzOjpiYXNlKCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBiYXNlKG51bGxBdG9t
LCAiYmFzZSIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiBiYXNlOwotfQotCi1j
b25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OmJhc2Vmb250KCkKLXsKLSAgICBzdGF0aWMg
UXVhbGlmaWVkTmFtZSBiYXNlZm9udChudWxsQXRvbSwgImJhc2Vmb250IiwgeGh0bWxOYW1lc3Bh
Y2VVUkkoKSk7Ci0gICAgcmV0dXJuIGJhc2Vmb250OwotfQotCi1jb25zdCBRdWFsaWZpZWROYW1l
JiBIVE1MTmFtZXM6OmJpZygpCi17Ci0gICAgc3RhdGljIFF1YWxpZmllZE5hbWUgYmlnKG51bGxB
dG9tLCAiYmlnIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJuIGJpZzsKLX0KLQot
Y29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpibG9ja3F1b3RlKCkKLXsKLSAgICBzdGF0
aWMgUXVhbGlmaWVkTmFtZSBibG9ja3F1b3RlKG51bGxBdG9tLCAiYmxvY2txdW90ZSIsIHhodG1s
TmFtZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiBibG9ja3F1b3RlOwotfQotCi1jb25zdCBRdWFs
aWZpZWROYW1lJiBIVE1MTmFtZXM6OmJvZHkoKQotewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1l
IGJvZHkobnVsbEF0b20sICJib2R5IiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJu
IGJvZHk7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6YnIoKQotewotICAg
IHN0YXRpYyBRdWFsaWZpZWROYW1lIGJyKG51bGxBdG9tLCAiYnIiLCB4aHRtbE5hbWVzcGFjZVVS
SSgpKTsKLSAgICByZXR1cm4gYnI7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1l
czo6YnV0dG9uKCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBidXR0b24obnVsbEF0b20s
ICJidXR0b24iLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4gYnV0dG9uOwotfQot
Ci1jb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OmNhbnZhcygpCi17Ci0gICAgc3RhdGlj
IFF1YWxpZmllZE5hbWUgY2FudmFzKG51bGxBdG9tLCAiY2FudmFzIiwgeGh0bWxOYW1lc3BhY2VV
UkkoKSk7Ci0gICAgcmV0dXJuIGNhbnZhczsKLX0KLQotY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRN
TE5hbWVzOjpjYXB0aW9uKCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBjYXB0aW9uKG51
bGxBdG9tLCAiY2FwdGlvbiIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiBjYXB0
aW9uOwotfQotCi1jb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OmNlbnRlcigpCi17Ci0g
ICAgc3RhdGljIFF1YWxpZmllZE5hbWUgY2VudGVyKG51bGxBdG9tLCAiY2VudGVyIiwgeGh0bWxO
YW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJuIGNlbnRlcjsKLX0KLQotY29uc3QgUXVhbGlmaWVk
TmFtZSYgSFRNTE5hbWVzOjpjb2RlKCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBjb2Rl
KG51bGxBdG9tLCAiY29kZSIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiBjb2Rl
OwotfQotCi1jb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OmNvbCgpCi17Ci0gICAgc3Rh
dGljIFF1YWxpZmllZE5hbWUgY29sKG51bGxBdG9tLCAiY29sIiwgeGh0bWxOYW1lc3BhY2VVUkko
KSk7Ci0gICAgcmV0dXJuIGNvbDsKLX0KK3ZvaWQqIHhodG1sTmFtZXNwYWNlVVJJQXRvbVsoc2l6
ZW9mKEF0b21pY1N0cmluZykgKyBzaXplb2Yodm9pZCopIC0gMSkgLyBzaXplb2Yodm9pZCopXTsK
IAotY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpjb2xncm91cCgpCi17Ci0gICAgc3Rh
dGljIFF1YWxpZmllZE5hbWUgY29sZ3JvdXAobnVsbEF0b20sICJjb2xncm91cCIsIHhodG1sTmFt
ZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiBjb2xncm91cDsKLX0KLQotY29uc3QgUXVhbGlmaWVk
TmFtZSYgSFRNTE5hbWVzOjpkZCgpCi17Ci0gICAgc3RhdGljIFF1YWxpZmllZE5hbWUgZGQobnVs
bEF0b20sICJkZCIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiBkZDsKLX0KLQot
Y29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpkZWwoKQotewotICAgIHN0YXRpYyBRdWFs
aWZpZWROYW1lIGRlbChudWxsQXRvbSwgImRlbCIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAg
IHJldHVybiBkZWw7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6ZGZuKCkK
LXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBkZm4obnVsbEF0b20sICJkZm4iLCB4aHRtbE5h
bWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4gZGZuOwotfQotCi1jb25zdCBRdWFsaWZpZWROYW1l
JiBIVE1MTmFtZXM6OmRpcigpCi17Ci0gICAgc3RhdGljIFF1YWxpZmllZE5hbWUgZGlyKG51bGxB
dG9tLCAiZGlyIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJuIGRpcjsKLX0KLQot
Y29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpkaXYoKQotewotICAgIHN0YXRpYyBRdWFs
aWZpZWROYW1lIGRpdihudWxsQXRvbSwgImRpdiIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAg
IHJldHVybiBkaXY7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6ZGwoKQot
ewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIGRsKG51bGxBdG9tLCAiZGwiLCB4aHRtbE5hbWVz
cGFjZVVSSSgpKTsKLSAgICByZXR1cm4gZGw7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhU
TUxOYW1lczo6ZHQoKQotewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIGR0KG51bGxBdG9tLCAi
ZHQiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4gZHQ7Ci19Ci0KLWNvbnN0IFF1
YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6ZW0oKQotewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1l
IGVtKG51bGxBdG9tLCAiZW0iLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4gZW07
Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6ZW1iZWQoKQotewotICAgIHN0
YXRpYyBRdWFsaWZpZWROYW1lIGVtYmVkKG51bGxBdG9tLCAiZW1iZWQiLCB4aHRtbE5hbWVzcGFj
ZVVSSSgpKTsKLSAgICByZXR1cm4gZW1iZWQ7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhU
TUxOYW1lczo6ZmllbGRzZXQoKQotewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIGZpZWxkc2V0
KG51bGxBdG9tLCAiZmllbGRzZXQiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4g
ZmllbGRzZXQ7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6Zm9udCgpCi17
Ci0gICAgc3RhdGljIFF1YWxpZmllZE5hbWUgZm9udChudWxsQXRvbSwgImZvbnQiLCB4aHRtbE5h
bWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4gZm9udDsKLX0KLQotY29uc3QgUXVhbGlmaWVkTmFt
ZSYgSFRNTE5hbWVzOjpmb3JtKCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBmb3JtKG51
bGxBdG9tLCAiZm9ybSIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiBmb3JtOwot
fQotCi1jb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OmZyYW1lKCkKLXsKLSAgICBzdGF0
aWMgUXVhbGlmaWVkTmFtZSBmcmFtZShudWxsQXRvbSwgImZyYW1lIiwgeGh0bWxOYW1lc3BhY2VV
UkkoKSk7Ci0gICAgcmV0dXJuIGZyYW1lOwotfQotCi1jb25zdCBRdWFsaWZpZWROYW1lJiBIVE1M
TmFtZXM6OmZyYW1lc2V0KCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBmcmFtZXNldChu
dWxsQXRvbSwgImZyYW1lc2V0IiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJuIGZy
YW1lc2V0OwotfQotCi1jb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OmhlYWQoKQotewot
ICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIGhlYWQobnVsbEF0b20sICJoZWFkIiwgeGh0bWxOYW1l
c3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJuIGhlYWQ7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUm
IEhUTUxOYW1lczo6aDEoKQotewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIGgxKG51bGxBdG9t
LCAiaDEiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4gaDE7Ci19Ci0KLWNvbnN0
IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6aDIoKQotewotICAgIHN0YXRpYyBRdWFsaWZpZWRO
YW1lIGgyKG51bGxBdG9tLCAiaDIiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4g
aDI7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6aDMoKQotewotICAgIHN0
YXRpYyBRdWFsaWZpZWROYW1lIGgzKG51bGxBdG9tLCAiaDMiLCB4aHRtbE5hbWVzcGFjZVVSSSgp
KTsKLSAgICByZXR1cm4gaDM7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6
aDQoKQotewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIGg0KG51bGxBdG9tLCAiaDQiLCB4aHRt
bE5hbWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4gaDQ7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5h
bWUmIEhUTUxOYW1lczo6aDUoKQotewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIGg1KG51bGxB
dG9tLCAiaDUiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4gaDU7Ci19Ci0KLWNv
bnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6aDYoKQotewotICAgIHN0YXRpYyBRdWFsaWZp
ZWROYW1lIGg2KG51bGxBdG9tLCAiaDYiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKLSAgICByZXR1
cm4gaDY7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6aHIoKQotewotICAg
IHN0YXRpYyBRdWFsaWZpZWROYW1lIGhyKG51bGxBdG9tLCAiaHIiLCB4aHRtbE5hbWVzcGFjZVVS
SSgpKTsKLSAgICByZXR1cm4gaHI7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1l
czo6aHRtbCgpCi17Ci0gICAgc3RhdGljIFF1YWxpZmllZE5hbWUgaHRtbChudWxsQXRvbSwgImh0
bWwiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4gaHRtbDsKLX0KLQotY29uc3Qg
UXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjppKCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFt
ZSBpKG51bGxBdG9tLCAiaSIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiBpOwot
fQotCi1jb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OmlmcmFtZSgpCi17Ci0gICAgc3Rh
dGljIFF1YWxpZmllZE5hbWUgaWZyYW1lKG51bGxBdG9tLCAiaWZyYW1lIiwgeGh0bWxOYW1lc3Bh
Y2VVUkkoKSk7Ci0gICAgcmV0dXJuIGlmcmFtZTsKLX0KLQotY29uc3QgUXVhbGlmaWVkTmFtZSYg
SFRNTE5hbWVzOjppbWcoKQotewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIGltZyhudWxsQXRv
bSwgImltZyIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiBpbWc7Ci19Ci0KLWNv
bnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6aW5wdXQoKQotewotICAgIHN0YXRpYyBRdWFs
aWZpZWROYW1lIGlucHV0KG51bGxBdG9tLCAiaW5wdXQiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsK
LSAgICByZXR1cm4gaW5wdXQ7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6
aW5zKCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBpbnMobnVsbEF0b20sICJpbnMiLCB4
aHRtbE5hbWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4gaW5zOwotfQotCi1jb25zdCBRdWFsaWZp
ZWROYW1lJiBIVE1MTmFtZXM6OmlzaW5kZXgoKQotewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1l
IGlzaW5kZXgobnVsbEF0b20sICJpc2luZGV4IiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAg
cmV0dXJuIGlzaW5kZXg7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6a2Jk
KCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBrYmQobnVsbEF0b20sICJrYmQiLCB4aHRt
bE5hbWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4ga2JkOwotfQotCi1jb25zdCBRdWFsaWZpZWRO
YW1lJiBIVE1MTmFtZXM6OmtleWdlbigpCi17Ci0gICAgc3RhdGljIFF1YWxpZmllZE5hbWUga2V5
Z2VuKG51bGxBdG9tLCAia2V5Z2VuIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJu
IGtleWdlbjsKLX0KLQotY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpsYWJlbCgpCi17
Ci0gICAgc3RhdGljIFF1YWxpZmllZE5hbWUgbGFiZWwobnVsbEF0b20sICJsYWJlbCIsIHhodG1s
TmFtZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiBsYWJlbDsKLX0KLQotY29uc3QgUXVhbGlmaWVk
TmFtZSYgSFRNTE5hbWVzOjpsZWdlbmQoKQotewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIGxl
Z2VuZChudWxsQXRvbSwgImxlZ2VuZCIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAgIHJldHVy
biBsZWdlbmQ7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6bGkoKQotewot
ICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIGxpKG51bGxBdG9tLCAibGkiLCB4aHRtbE5hbWVzcGFj
ZVVSSSgpKTsKLSAgICByZXR1cm4gbGk7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxO
YW1lczo6bGluaygpCi17Ci0gICAgc3RhdGljIFF1YWxpZmllZE5hbWUgbGluayhudWxsQXRvbSwg
ImxpbmsiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4gbGluazsKLX0KLQotY29u
c3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjptYXAoKQotewotICAgIHN0YXRpYyBRdWFsaWZp
ZWROYW1lIG1hcChudWxsQXRvbSwgIm1hcCIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAgIHJl
dHVybiBtYXA7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6bWFycXVlZSgp
Ci17Ci0gICAgc3RhdGljIFF1YWxpZmllZE5hbWUgbWFycXVlZShudWxsQXRvbSwgIm1hcnF1ZWUi
LCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4gbWFycXVlZTsKLX0KLQotY29uc3Qg
UXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjptZW51KCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVk
TmFtZSBtZW51KG51bGxBdG9tLCAibWVudSIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAgIHJl
dHVybiBtZW51OwotfQotCi1jb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6Om1ldGEoKQot
ewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIG1ldGEobnVsbEF0b20sICJtZXRhIiwgeGh0bWxO
YW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJuIG1ldGE7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5h
bWUmIEhUTUxOYW1lczo6bm9lbWJlZCgpCi17Ci0gICAgc3RhdGljIFF1YWxpZmllZE5hbWUgbm9l
bWJlZChudWxsQXRvbSwgIm5vZW1iZWQiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKLSAgICByZXR1
cm4gbm9lbWJlZDsKLX0KLQotY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpub2ZyYW1l
cygpCi17Ci0gICAgc3RhdGljIFF1YWxpZmllZE5hbWUgbm9mcmFtZXMobnVsbEF0b20sICJub2Zy
YW1lcyIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiBub2ZyYW1lczsKLX0KLQot
Y29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpub3NjcmlwdCgpCi17Ci0gICAgc3RhdGlj
IFF1YWxpZmllZE5hbWUgbm9zY3JpcHQobnVsbEF0b20sICJub3NjcmlwdCIsIHhodG1sTmFtZXNw
YWNlVVJJKCkpOwotICAgIHJldHVybiBub3NjcmlwdDsKLX0KLQotY29uc3QgUXVhbGlmaWVkTmFt
ZSYgSFRNTE5hbWVzOjpvYmplY3QoKQotewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIG9iamVj
dChudWxsQXRvbSwgIm9iamVjdCIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiBv
YmplY3Q7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6b2woKQotewotICAg
IHN0YXRpYyBRdWFsaWZpZWROYW1lIG9sKG51bGxBdG9tLCAib2wiLCB4aHRtbE5hbWVzcGFjZVVS
SSgpKTsKLSAgICByZXR1cm4gb2w7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1l
czo6b3B0Z3JvdXAoKQotewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIG9wdGdyb3VwKG51bGxB
dG9tLCAib3B0Z3JvdXAiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4gb3B0Z3Jv
dXA7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6cCgpCi17Ci0gICAgc3Rh
dGljIFF1YWxpZmllZE5hbWUgcChudWxsQXRvbSwgInAiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsK
LSAgICByZXR1cm4gcDsKLX0KLQotY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpwYXJh
bSgpCi17Ci0gICAgc3RhdGljIFF1YWxpZmllZE5hbWUgcGFyYW0obnVsbEF0b20sICJwYXJhbSIs
IHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiBwYXJhbTsKLX0KLQotY29uc3QgUXVh
bGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpwcmUoKQotewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1l
IHByZShudWxsQXRvbSwgInByZSIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiBw
cmU7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6cSgpCi17Ci0gICAgc3Rh
dGljIFF1YWxpZmllZE5hbWUgcShudWxsQXRvbSwgInEiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsK
LSAgICByZXR1cm4gcTsKLX0KLQotY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpzKCkK
LXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBzKG51bGxBdG9tLCAicyIsIHhodG1sTmFtZXNw
YWNlVVJJKCkpOwotICAgIHJldHVybiBzOwotfQotCi1jb25zdCBRdWFsaWZpZWROYW1lJiBIVE1M
TmFtZXM6OnNhbXAoKQotewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIHNhbXAobnVsbEF0b20s
ICJzYW1wIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJuIHNhbXA7Ci19Ci0KLWNv
bnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6c2NyaXB0KCkKLXsKLSAgICBzdGF0aWMgUXVh
bGlmaWVkTmFtZSBzY3JpcHQobnVsbEF0b20sICJzY3JpcHQiLCB4aHRtbE5hbWVzcGFjZVVSSSgp
KTsKLSAgICByZXR1cm4gc2NyaXB0OwotfQotCi1jb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFt
ZXM6OnNlbGVjdCgpCi17Ci0gICAgc3RhdGljIFF1YWxpZmllZE5hbWUgc2VsZWN0KG51bGxBdG9t
LCAic2VsZWN0IiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJuIHNlbGVjdDsKLX0K
LQotY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpzbWFsbCgpCi17Ci0gICAgc3RhdGlj
IFF1YWxpZmllZE5hbWUgc21hbGwobnVsbEF0b20sICJzbWFsbCIsIHhodG1sTmFtZXNwYWNlVVJJ
KCkpOwotICAgIHJldHVybiBzbWFsbDsKLX0KLQotY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5h
bWVzOjpzdHJpa2UoKQotewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIHN0cmlrZShudWxsQXRv
bSwgInN0cmlrZSIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiBzdHJpa2U7Ci19
Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6c3Ryb25nKCkKLXsKLSAgICBzdGF0
aWMgUXVhbGlmaWVkTmFtZSBzdHJvbmcobnVsbEF0b20sICJzdHJvbmciLCB4aHRtbE5hbWVzcGFj
ZVVSSSgpKTsKLSAgICByZXR1cm4gc3Ryb25nOwotfQotCi1jb25zdCBRdWFsaWZpZWROYW1lJiBI
VE1MTmFtZXM6OnN0eWxlKCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBzdHlsZShudWxs
QXRvbSwgInN0eWxlIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJuIHN0eWxlOwot
fQotCi1jb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OnRhYmxlKCkKLXsKLSAgICBzdGF0
aWMgUXVhbGlmaWVkTmFtZSB0YWJsZShudWxsQXRvbSwgInRhYmxlIiwgeGh0bWxOYW1lc3BhY2VV
UkkoKSk7Ci0gICAgcmV0dXJuIHRhYmxlOwotfQotCi1jb25zdCBRdWFsaWZpZWROYW1lJiBIVE1M
TmFtZXM6OnRib2R5KCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSB0Ym9keShudWxsQXRv
bSwgInRib2R5IiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJuIHRib2R5OwotfQot
Ci1jb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OnRkKCkKLXsKLSAgICBzdGF0aWMgUXVh
bGlmaWVkTmFtZSB0ZChudWxsQXRvbSwgInRkIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAg
cmV0dXJuIHRkOwotfQotCi1jb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OnRleHRhcmVh
KCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSB0ZXh0YXJlYShudWxsQXRvbSwgInRleHRh
cmVhIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJuIHRleHRhcmVhOwotfQotCi1j
b25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OnRmb290KCkKLXsKLSAgICBzdGF0aWMgUXVh
bGlmaWVkTmFtZSB0Zm9vdChudWxsQXRvbSwgInRmb290IiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7
Ci0gICAgcmV0dXJuIHRmb290OwotfQotCi1jb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6
OnRoKCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSB0aChudWxsQXRvbSwgInRoIiwgeGh0
bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJuIHRoOwotfQotCi1jb25zdCBRdWFsaWZpZWRO
YW1lJiBIVE1MTmFtZXM6OnRoZWFkKCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSB0aGVh
ZChudWxsQXRvbSwgInRoZWFkIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJuIHRo
ZWFkOwotfQotCi1jb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OnRpdGxlKCkKLXsKLSAg
ICBzdGF0aWMgUXVhbGlmaWVkTmFtZSB0aXRsZShudWxsQXRvbSwgInRpdGxlIiwgeGh0bWxOYW1l
c3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJuIHRpdGxlOwotfQotCi1jb25zdCBRdWFsaWZpZWROYW1l
JiBIVE1MTmFtZXM6OnRyKCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSB0cihudWxsQXRv
bSwgInRyIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJuIHRyOwotfQotCi1jb25z
dCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OnR0KCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVk
TmFtZSB0dChudWxsQXRvbSwgInR0IiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJu
IHR0OwotfQotCi1jb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OnUoKQotewotICAgIHN0
YXRpYyBRdWFsaWZpZWROYW1lIHUobnVsbEF0b20sICJ1IiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7
Ci0gICAgcmV0dXJuIHU7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6dWwo
KQotewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIHVsKG51bGxBdG9tLCAidWwiLCB4aHRtbE5h
bWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4gdWw7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUm
IEhUTUxOYW1lczo6dmFyKCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSB2YXIobnVsbEF0
b20sICJ2YXIiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4gdmFyOwotfQotCi1j
b25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OnhtcCgpCi17Ci0gICAgc3RhdGljIFF1YWxp
ZmllZE5hbWUgeG1wKG51bGxBdG9tLCAieG1wIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAg
cmV0dXJuIHhtcDsKKy8vIERlZmluZSBhIFF1YWxpZmllZE5hbWUtc2l6ZWQgYXJyYXkgb2YgcG9p
bnRlcnMgdG8gYXZvaWQgc3RhdGljIGluaXRpYWxpemF0aW9uLgorLy8gVXNlIGFuIGFycmF5IG9m
IHBvaW50ZXJzIGluc3RlYWQgb2YgYW4gYXJyYXkgb2YgY2hhciBpbiBjYXNlIHRoZXJlIGlzIHNv
bWUgYWxpZ25tZW50IGlzc3VlLgorI2RlZmluZSBERUZJTkVfR0xPQkFMKG5hbWUpIFwKKyAgICB2
b2lkKiBuYW1lICMjIFFOYW1lWyhzaXplb2YoUXVhbGlmaWVkTmFtZSkgKyBzaXplb2Yodm9pZCop
IC0gMSkgLyBzaXplb2Yodm9pZCopXTsKKworREVGSU5FX0dMT0JBTChhKQorREVGSU5FX0dMT0JB
TChhYmJyKQorREVGSU5FX0dMT0JBTChhY3JvbnltKQorREVGSU5FX0dMT0JBTChhZGRyZXNzKQor
REVGSU5FX0dMT0JBTChhcHBsZXQpCitERUZJTkVfR0xPQkFMKGFyZWEpCitERUZJTkVfR0xPQkFM
KGIpCitERUZJTkVfR0xPQkFMKGJhc2UpCitERUZJTkVfR0xPQkFMKGJhc2Vmb250KQorREVGSU5F
X0dMT0JBTChiZG8pCitERUZJTkVfR0xPQkFMKGJpZykKK0RFRklORV9HTE9CQUwoYmxvY2txdW90
ZSkKK0RFRklORV9HTE9CQUwoYm9keSkKK0RFRklORV9HTE9CQUwoYnIpCitERUZJTkVfR0xPQkFM
KGJ1dHRvbikKK0RFRklORV9HTE9CQUwoY2FudmFzKQorREVGSU5FX0dMT0JBTChjYXB0aW9uKQor
REVGSU5FX0dMT0JBTChjZW50ZXIpCitERUZJTkVfR0xPQkFMKGNpdGUpCitERUZJTkVfR0xPQkFM
KGNvZGUpCitERUZJTkVfR0xPQkFMKGNvbCkKK0RFRklORV9HTE9CQUwoY29sZ3JvdXApCitERUZJ
TkVfR0xPQkFMKGRkKQorREVGSU5FX0dMT0JBTChkZWwpCitERUZJTkVfR0xPQkFMKGRmbikKK0RF
RklORV9HTE9CQUwoZGlyKQorREVGSU5FX0dMT0JBTChkaXYpCitERUZJTkVfR0xPQkFMKGRsKQor
REVGSU5FX0dMT0JBTChkdCkKK0RFRklORV9HTE9CQUwoZW0pCitERUZJTkVfR0xPQkFMKGVtYmVk
KQorREVGSU5FX0dMT0JBTChmaWVsZHNldCkKK0RFRklORV9HTE9CQUwoZm9udCkKK0RFRklORV9H
TE9CQUwoZm9ybSkKK0RFRklORV9HTE9CQUwoZnJhbWUpCitERUZJTkVfR0xPQkFMKGZyYW1lc2V0
KQorREVGSU5FX0dMT0JBTChoZWFkKQorREVGSU5FX0dMT0JBTChoMSkKK0RFRklORV9HTE9CQUwo
aDIpCitERUZJTkVfR0xPQkFMKGgzKQorREVGSU5FX0dMT0JBTChoNCkKK0RFRklORV9HTE9CQUwo
aDUpCitERUZJTkVfR0xPQkFMKGg2KQorREVGSU5FX0dMT0JBTChocikKK0RFRklORV9HTE9CQUwo
aHRtbCkKK0RFRklORV9HTE9CQUwoaSkKK0RFRklORV9HTE9CQUwoaWZyYW1lKQorREVGSU5FX0dM
T0JBTChpbWcpCitERUZJTkVfR0xPQkFMKGlucHV0KQorREVGSU5FX0dMT0JBTChpbnMpCitERUZJ
TkVfR0xPQkFMKGlzaW5kZXgpCitERUZJTkVfR0xPQkFMKGtiZCkKK0RFRklORV9HTE9CQUwoa2V5
Z2VuKQorREVGSU5FX0dMT0JBTChsYWJlbCkKK0RFRklORV9HTE9CQUwobGF5ZXIpCitERUZJTkVf
R0xPQkFMKGxlZ2VuZCkKK0RFRklORV9HTE9CQUwobGkpCitERUZJTkVfR0xPQkFMKGxpbmspCitE
RUZJTkVfR0xPQkFMKG1hcCkKK0RFRklORV9HTE9CQUwobWFycXVlZSkKK0RFRklORV9HTE9CQUwo
bWVudSkKK0RFRklORV9HTE9CQUwobWV0YSkKK0RFRklORV9HTE9CQUwobm9icikKK0RFRklORV9H
TE9CQUwobm9lbWJlZCkKK0RFRklORV9HTE9CQUwobm9mcmFtZXMpCitERUZJTkVfR0xPQkFMKG5v
bGF5ZXIpCitERUZJTkVfR0xPQkFMKG5vc2NyaXB0KQorREVGSU5FX0dMT0JBTChvYmplY3QpCitE
RUZJTkVfR0xPQkFMKG9sKQorREVGSU5FX0dMT0JBTChvcHRncm91cCkKK0RFRklORV9HTE9CQUwo
b3B0aW9uKQorREVGSU5FX0dMT0JBTChwKQorREVGSU5FX0dMT0JBTChwYXJhbSkKK0RFRklORV9H
TE9CQUwocGxhaW50ZXh0KQorREVGSU5FX0dMT0JBTChwcmUpCitERUZJTkVfR0xPQkFMKHEpCitE
RUZJTkVfR0xPQkFMKHMpCitERUZJTkVfR0xPQkFMKHNhbXApCitERUZJTkVfR0xPQkFMKHNjcmlw
dCkKK0RFRklORV9HTE9CQUwoc2VsZWN0KQorREVGSU5FX0dMT0JBTChzbWFsbCkKK0RFRklORV9H
TE9CQUwoc3BhbikKK0RFRklORV9HTE9CQUwoc3RyaWtlKQorREVGSU5FX0dMT0JBTChzdHJvbmcp
CitERUZJTkVfR0xPQkFMKHN0eWxlKQorREVGSU5FX0dMT0JBTChzdWIpCitERUZJTkVfR0xPQkFM
KHN1cCkKK0RFRklORV9HTE9CQUwodGFibGUpCitERUZJTkVfR0xPQkFMKHRib2R5KQorREVGSU5F
X0dMT0JBTCh0ZCkKK0RFRklORV9HTE9CQUwodGV4dGFyZWEpCitERUZJTkVfR0xPQkFMKHRmb290
KQorREVGSU5FX0dMT0JBTCh0aCkKK0RFRklORV9HTE9CQUwodGhlYWQpCitERUZJTkVfR0xPQkFM
KHRpdGxlKQorREVGSU5FX0dMT0JBTCh0cikKK0RFRklORV9HTE9CQUwodHQpCitERUZJTkVfR0xP
QkFMKHUpCitERUZJTkVfR0xPQkFMKHVsKQorREVGSU5FX0dMT0JBTCh2YXIpCitERUZJTkVfR0xP
QkFMKHdicikKK0RFRklORV9HTE9CQUwoeG1wKQorCit2b2lkIEhUTUxOYW1lczo6aW5pdCgpCit7
CisgICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQ7CisgICAgaWYgKCFpbml0aWFsaXplZCkgewor
ICAgICAgICAvLyBVc2UgcGxhY2VtZW50IG5ldyB0byBpbml0aWFsaXplIHRoZSBnbG9iYWxzLgor
ICAgICAgICBzdGF0aWMgQXRvbWljU3RyaW5nIHhodG1sTlMoImh0dHA6Ly93d3cudzMub3JnLzE5
OTkveGh0bWwiKTsKKyAgICAgICAgbmV3ICgmeGh0bWxOYW1lc3BhY2VVUklBdG9tKSBBdG9taWNT
dHJpbmcoeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJmFRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxs
QXRvbSwgImEiLCB4aHRtbE5TKTsKKyAgICAgICAgbmV3ICgmYWJiclFOYW1lKSBRdWFsaWZpZWRO
YW1lKG51bGxBdG9tLCAiYWJiciIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZhY3JvbnltUU5h
bWUpIFF1YWxpZmllZE5hbWUobnVsbEF0b20sICJhY3JvbnltIiwgeGh0bWxOUyk7CisgICAgICAg
IG5ldyAoJmFkZHJlc3NRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgImFkZHJlc3MiLCB4
aHRtbE5TKTsKKyAgICAgICAgbmV3ICgmYXBwbGV0UU5hbWUpIFF1YWxpZmllZE5hbWUobnVsbEF0
b20sICJhcHBsZXQiLCB4aHRtbE5TKTsKKyAgICAgICAgbmV3ICgmYXJlYVFOYW1lKSBRdWFsaWZp
ZWROYW1lKG51bGxBdG9tLCAiYXJlYSIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZiUU5hbWUp
IFF1YWxpZmllZE5hbWUobnVsbEF0b20sICJiIiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJmJh
c2VRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgImJhc2UiLCB4aHRtbE5TKTsKKyAgICAg
ICAgbmV3ICgmYmFzZWZvbnRRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgImJhc2Vmb250
IiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJmJkb1FOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxB
dG9tLCAiYmRvIiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJmJpZ1FOYW1lKSBRdWFsaWZpZWRO
YW1lKG51bGxBdG9tLCAiYmlnIiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJmJsb2NrcXVvdGVR
TmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgImJsb2NrcXVvdGUiLCB4aHRtbE5TKTsKKyAg
ICAgICAgbmV3ICgmYm9keVFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAiYm9keSIsIHho
dG1sTlMpOworICAgICAgICBuZXcgKCZiclFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAi
YnIiLCB4aHRtbE5TKTsKKyAgICAgICAgbmV3ICgmYnV0dG9uUU5hbWUpIFF1YWxpZmllZE5hbWUo
bnVsbEF0b20sICJidXR0b24iLCB4aHRtbE5TKTsKKyAgICAgICAgbmV3ICgmY2FudmFzUU5hbWUp
IFF1YWxpZmllZE5hbWUobnVsbEF0b20sICJjYW52YXMiLCB4aHRtbE5TKTsKKyAgICAgICAgbmV3
ICgmY2FwdGlvblFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAiY2FwdGlvbiIsIHhodG1s
TlMpOworICAgICAgICBuZXcgKCZjZW50ZXJRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwg
ImNlbnRlciIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZjaXRlUU5hbWUpIFF1YWxpZmllZE5h
bWUobnVsbEF0b20sICJjaXRlIiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJmNvZGVRTmFtZSkg
UXVhbGlmaWVkTmFtZShudWxsQXRvbSwgImNvZGUiLCB4aHRtbE5TKTsKKyAgICAgICAgbmV3ICgm
Y29sUU5hbWUpIFF1YWxpZmllZE5hbWUobnVsbEF0b20sICJjb2wiLCB4aHRtbE5TKTsKKyAgICAg
ICAgbmV3ICgmY29sZ3JvdXBRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgImNvbGdyb3Vw
IiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJmRkUU5hbWUpIFF1YWxpZmllZE5hbWUobnVsbEF0
b20sICJkZCIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZkZWxRTmFtZSkgUXVhbGlmaWVkTmFt
ZShudWxsQXRvbSwgImRlbCIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZkZm5RTmFtZSkgUXVh
bGlmaWVkTmFtZShudWxsQXRvbSwgImRmbiIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZkaXJR
TmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgImRpciIsIHhodG1sTlMpOworICAgICAgICBu
ZXcgKCZkaXZRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgImRpdiIsIHhodG1sTlMpOwor
ICAgICAgICBuZXcgKCZkbFFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAiZGwiLCB4aHRt
bE5TKTsKKyAgICAgICAgbmV3ICgmZHRRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgImR0
IiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJmVtUU5hbWUpIFF1YWxpZmllZE5hbWUobnVsbEF0
b20sICJlbSIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZlbWJlZFFOYW1lKSBRdWFsaWZpZWRO
YW1lKG51bGxBdG9tLCAiZW1iZWQiLCB4aHRtbE5TKTsKKyAgICAgICAgbmV3ICgmZmllbGRzZXRR
TmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgImZpZWxkc2V0IiwgeGh0bWxOUyk7CisgICAg
ICAgIG5ldyAoJmZvbnRRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgImZvbnQiLCB4aHRt
bE5TKTsKKyAgICAgICAgbmV3ICgmZm9ybVFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAi
Zm9ybSIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZmcmFtZVFOYW1lKSBRdWFsaWZpZWROYW1l
KG51bGxBdG9tLCAiZnJhbWUiLCB4aHRtbE5TKTsKKyAgICAgICAgbmV3ICgmZnJhbWVzZXRRTmFt
ZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgImZyYW1lc2V0IiwgeGh0bWxOUyk7CisgICAgICAg
IG5ldyAoJmhlYWRRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgImhlYWQiLCB4aHRtbE5T
KTsKKyAgICAgICAgbmV3ICgmaDFRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgImgxIiwg
eGh0bWxOUyk7CisgICAgICAgIG5ldyAoJmgyUU5hbWUpIFF1YWxpZmllZE5hbWUobnVsbEF0b20s
ICJoMiIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZoM1FOYW1lKSBRdWFsaWZpZWROYW1lKG51
bGxBdG9tLCAiaDMiLCB4aHRtbE5TKTsKKyAgICAgICAgbmV3ICgmaDRRTmFtZSkgUXVhbGlmaWVk
TmFtZShudWxsQXRvbSwgImg0IiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJmg1UU5hbWUpIFF1
YWxpZmllZE5hbWUobnVsbEF0b20sICJoNSIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZoNlFO
YW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAiaDYiLCB4aHRtbE5TKTsKKyAgICAgICAgbmV3
ICgmaHJRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgImhyIiwgeGh0bWxOUyk7CisgICAg
ICAgIG5ldyAoJmh0bWxRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgImh0bWwiLCB4aHRt
bE5TKTsKKyAgICAgICAgbmV3ICgmaVFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAiaSIs
IHhodG1sTlMpOworICAgICAgICBuZXcgKCZpZnJhbWVRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxs
QXRvbSwgImlmcmFtZSIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZpbWdRTmFtZSkgUXVhbGlm
aWVkTmFtZShudWxsQXRvbSwgImltZyIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZpbnB1dFFO
YW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAiaW5wdXQiLCB4aHRtbE5TKTsKKyAgICAgICAg
bmV3ICgmaW5zUU5hbWUpIFF1YWxpZmllZE5hbWUobnVsbEF0b20sICJpbnMiLCB4aHRtbE5TKTsK
KyAgICAgICAgbmV3ICgmaXNpbmRleFFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAiaXNp
bmRleCIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZrYmRRTmFtZSkgUXVhbGlmaWVkTmFtZShu
dWxsQXRvbSwgImtiZCIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZrZXlnZW5RTmFtZSkgUXVh
bGlmaWVkTmFtZShudWxsQXRvbSwgImtleWdlbiIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZs
YWJlbFFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAibGFiZWwiLCB4aHRtbE5TKTsKKyAg
ICAgICAgbmV3ICgmbGF5ZXJRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgImxheWVyIiwg
eGh0bWxOUyk7CisgICAgICAgIG5ldyAoJmxlZ2VuZFFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxB
dG9tLCAibGVnZW5kIiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJmxpUU5hbWUpIFF1YWxpZmll
ZE5hbWUobnVsbEF0b20sICJsaSIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZsaW5rUU5hbWUp
IFF1YWxpZmllZE5hbWUobnVsbEF0b20sICJsaW5rIiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAo
Jm1hcFFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAibWFwIiwgeGh0bWxOUyk7CisgICAg
ICAgIG5ldyAoJm1hcnF1ZWVRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgIm1hcnF1ZWUi
LCB4aHRtbE5TKTsKKyAgICAgICAgbmV3ICgmbWVudVFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxB
dG9tLCAibWVudSIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZtZXRhUU5hbWUpIFF1YWxpZmll
ZE5hbWUobnVsbEF0b20sICJtZXRhIiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJm5vYnJRTmFt
ZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgIm5vYnIiLCB4aHRtbE5TKTsKKyAgICAgICAgbmV3
ICgmbm9lbWJlZFFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAibm9lbWJlZCIsIHhodG1s
TlMpOworICAgICAgICBuZXcgKCZub2ZyYW1lc1FOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9t
LCAibm9mcmFtZXMiLCB4aHRtbE5TKTsKKyAgICAgICAgbmV3ICgmbm9sYXllclFOYW1lKSBRdWFs
aWZpZWROYW1lKG51bGxBdG9tLCAibm9sYXllciIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZu
b3NjcmlwdFFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAibm9zY3JpcHQiLCB4aHRtbE5T
KTsKKyAgICAgICAgbmV3ICgmb2JqZWN0UU5hbWUpIFF1YWxpZmllZE5hbWUobnVsbEF0b20sICJv
YmplY3QiLCB4aHRtbE5TKTsKKyAgICAgICAgbmV3ICgmb2xRTmFtZSkgUXVhbGlmaWVkTmFtZShu
dWxsQXRvbSwgIm9sIiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJm9wdGdyb3VwUU5hbWUpIFF1
YWxpZmllZE5hbWUobnVsbEF0b20sICJvcHRncm91cCIsIHhodG1sTlMpOworICAgICAgICBuZXcg
KCZvcHRpb25RTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgIm9wdGlvbiIsIHhodG1sTlMp
OworICAgICAgICBuZXcgKCZwUU5hbWUpIFF1YWxpZmllZE5hbWUobnVsbEF0b20sICJwIiwgeGh0
bWxOUyk7CisgICAgICAgIG5ldyAoJnBhcmFtUU5hbWUpIFF1YWxpZmllZE5hbWUobnVsbEF0b20s
ICJwYXJhbSIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZwbGFpbnRleHRRTmFtZSkgUXVhbGlm
aWVkTmFtZShudWxsQXRvbSwgInBsYWludGV4dCIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZw
cmVRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgInByZSIsIHhodG1sTlMpOworICAgICAg
ICBuZXcgKCZxUU5hbWUpIFF1YWxpZmllZE5hbWUobnVsbEF0b20sICJxIiwgeGh0bWxOUyk7Cisg
ICAgICAgIG5ldyAoJnNRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgInMiLCB4aHRtbE5T
KTsKKyAgICAgICAgbmV3ICgmc2FtcFFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAic2Ft
cCIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZzY3JpcHRRTmFtZSkgUXVhbGlmaWVkTmFtZShu
dWxsQXRvbSwgInNjcmlwdCIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZzZWxlY3RRTmFtZSkg
UXVhbGlmaWVkTmFtZShudWxsQXRvbSwgInNlbGVjdCIsIHhodG1sTlMpOworICAgICAgICBuZXcg
KCZzbWFsbFFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAic21hbGwiLCB4aHRtbE5TKTsK
KyAgICAgICAgbmV3ICgmc3BhblFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAic3BhbiIs
IHhodG1sTlMpOworICAgICAgICBuZXcgKCZzdHJpa2VRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxs
QXRvbSwgInN0cmlrZSIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZzdHJvbmdRTmFtZSkgUXVh
bGlmaWVkTmFtZShudWxsQXRvbSwgInN0cm9uZyIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZz
dHlsZVFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAic3R5bGUiLCB4aHRtbE5TKTsKKyAg
ICAgICAgbmV3ICgmc3ViUU5hbWUpIFF1YWxpZmllZE5hbWUobnVsbEF0b20sICJzdWIiLCB4aHRt
bE5TKTsKKyAgICAgICAgbmV3ICgmc3VwUU5hbWUpIFF1YWxpZmllZE5hbWUobnVsbEF0b20sICJz
dXAiLCB4aHRtbE5TKTsKKyAgICAgICAgbmV3ICgmdGFibGVRTmFtZSkgUXVhbGlmaWVkTmFtZShu
dWxsQXRvbSwgInRhYmxlIiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJnRib2R5UU5hbWUpIFF1
YWxpZmllZE5hbWUobnVsbEF0b20sICJ0Ym9keSIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZ0
ZFFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAidGQiLCB4aHRtbE5TKTsKKyAgICAgICAg
bmV3ICgmdGV4dGFyZWFRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgInRleHRhcmVhIiwg
eGh0bWxOUyk7CisgICAgICAgIG5ldyAoJnRmb290UU5hbWUpIFF1YWxpZmllZE5hbWUobnVsbEF0
b20sICJ0Zm9vdCIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZ0aFFOYW1lKSBRdWFsaWZpZWRO
YW1lKG51bGxBdG9tLCAidGgiLCB4aHRtbE5TKTsKKyAgICAgICAgbmV3ICgmdGhlYWRRTmFtZSkg
UXVhbGlmaWVkTmFtZShudWxsQXRvbSwgInRoZWFkIiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAo
JnRpdGxlUU5hbWUpIFF1YWxpZmllZE5hbWUobnVsbEF0b20sICJ0aXRsZSIsIHhodG1sTlMpOwor
ICAgICAgICBuZXcgKCZ0clFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAidHIiLCB4aHRt
bE5TKTsKKyAgICAgICAgbmV3ICgmdHRRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgInR0
IiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJnVRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRv
bSwgInUiLCB4aHRtbE5TKTsKKyAgICAgICAgbmV3ICgmdWxRTmFtZSkgUXVhbGlmaWVkTmFtZShu
dWxsQXRvbSwgInVsIiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJnZhclFOYW1lKSBRdWFsaWZp
ZWROYW1lKG51bGxBdG9tLCAidmFyIiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJndiclFOYW1l
KSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAid2JyIiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAo
JnhtcFFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAieG1wIiwgeGh0bWxOUyk7CisgICAg
ICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKKyAgICB9CiB9CiAKIH0KSW5kZXg6IGtodG1sL2h0bWwv
aHRtbG5hbWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwv
aHRtbC9odG1sbmFtZXMuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yCmRpZmYgLXUgLXAgLXIx
LjIga2h0bWwvaHRtbC9odG1sbmFtZXMuaAotLS0ga2h0bWwvaHRtbC9odG1sbmFtZXMuaAkxNiBK
dW4gMjAwNSAyMDozMzo1NyAtMDAwMAkxLjIKKysrIGtodG1sL2h0bWwvaHRtbG5hbWVzLmgJOCBK
dWwgMjAwNSAwNTo1MDoxNSAtMDAwMApAQCAtMjIsMTEyICsyMiwyNDEgQEAKICNpZm5kZWYgSFRN
TE5BTUVTX0gKICNkZWZpbmUgSFRNTE5BTUVTX0gKIAotI2luY2x1ZGUgInhtbC9kb21fZWxlbWVu
dGltcGwuaCIKKyNpbmNsdWRlICJkb21fcW5hbWUuaCIKIAogbmFtZXNwYWNlIERPTQogewogCiBj
bGFzcyBRdWFsaWZpZWROYW1lOwogCisvLyBUaGUgZ2xvYmFscy4KKy8vIERlZmluZSBleHRlcm5h
bCBnbG9iYWwgdmFyaWFibGVzIGZvciBhbGwgSFRNTCBuYW1lcyBhYm92ZS4KKyNpZiAhS0hUTUxf
SFRNTE5BTUVTX0hJREVfR0xPQkFMUworICAgIGV4dGVybiBjb25zdCBBdG9taWNTdHJpbmcgIHho
dG1sTmFtZXNwYWNlVVJJQXRvbTsKKyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSBhUU5h
bWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgYWJiclFOYW1lOworICAgIGV4dGVy
biBjb25zdCBRdWFsaWZpZWROYW1lIGFjcm9ueW1RTmFtZTsKKyAgICBleHRlcm4gY29uc3QgUXVh
bGlmaWVkTmFtZSBhZGRyZXNzUU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUg
YXBwbGV0UU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgYXJlYVFOYW1lOwor
ICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIGJRTmFtZTsKKyAgICBleHRlcm4gY29uc3Qg
UXVhbGlmaWVkTmFtZSBiYXNlUU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUg
YmFzZWZvbnRRTmFtZTsKKyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSBiZG9RTmFtZTsK
KyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSBiaWdRTmFtZTsKKyAgICBleHRlcm4gY29u
c3QgUXVhbGlmaWVkTmFtZSBibG9ja3F1b3RlUU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxp
ZmllZE5hbWUgYm9keVFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIGJyUU5h
bWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgYnV0dG9uUU5hbWU7CisgICAgZXh0
ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgY2FudmFzUU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1
YWxpZmllZE5hbWUgY2FwdGlvblFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1l
IGNlbnRlclFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIGNpdGVRTmFtZTsK
KyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSBjb2RlUU5hbWU7CisgICAgZXh0ZXJuIGNv
bnN0IFF1YWxpZmllZE5hbWUgY29sUU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5h
bWUgY29sZ3JvdXBRTmFtZTsKKyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSBkZFFOYW1l
OworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIGRlbFFOYW1lOworICAgIGV4dGVybiBj
b25zdCBRdWFsaWZpZWROYW1lIGRmblFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWRO
YW1lIGRpclFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIGRpdlFOYW1lOwor
ICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIGRsUU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0
IFF1YWxpZmllZE5hbWUgZHRRTmFtZTsKKyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSBl
bVFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIGVtYmVkUU5hbWU7CisgICAg
ZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgZmllbGRzZXRRTmFtZTsKKyAgICBleHRlcm4gY29u
c3QgUXVhbGlmaWVkTmFtZSBmb250UU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5h
bWUgZm9ybVFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIGZyYW1lUU5hbWU7
CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgZnJhbWVzZXRRTmFtZTsKKyAgICBleHRl
cm4gY29uc3QgUXVhbGlmaWVkTmFtZSBoZWFkUU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxp
ZmllZE5hbWUgaDFRTmFtZTsKKyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSBoMlFOYW1l
OworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIGgzUU5hbWU7CisgICAgZXh0ZXJuIGNv
bnN0IFF1YWxpZmllZE5hbWUgaDRRTmFtZTsKKyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFt
ZSBoNVFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIGg2UU5hbWU7CisgICAg
ZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgaHJRTmFtZTsKKyAgICBleHRlcm4gY29uc3QgUXVh
bGlmaWVkTmFtZSBodG1sUU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgaVFO
YW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIGlmcmFtZVFOYW1lOworICAgIGV4
dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIGltZ1FOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFs
aWZpZWROYW1lIGlucHV0UU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgaW5z
UU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgaXNpbmRleFFOYW1lOworICAg
IGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIGtiZFFOYW1lOworICAgIGV4dGVybiBjb25zdCBR
dWFsaWZpZWROYW1lIGtleWdlblFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1l
IGxhYmVsUU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgbGF5ZXJRTmFtZTsK
KyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSBsZWdlbmRRTmFtZTsKKyAgICBleHRlcm4g
Y29uc3QgUXVhbGlmaWVkTmFtZSBsaVFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWRO
YW1lIGxpbmtRTmFtZTsKKyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSBtYXBRTmFtZTsK
KyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSBtYXJxdWVlUU5hbWU7CisgICAgZXh0ZXJu
IGNvbnN0IFF1YWxpZmllZE5hbWUgbWVudVFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZp
ZWROYW1lIG1ldGFRTmFtZTsKKyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSBub2JyUU5h
bWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgbm9lbWJlZFFOYW1lOworICAgIGV4
dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIG5vZnJhbWVzUU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0
IFF1YWxpZmllZE5hbWUgbm9sYXllclFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWRO
YW1lIG5vc2NyaXB0UU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgb2JqZWN0
UU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgb2xRTmFtZTsKKyAgICBleHRl
cm4gY29uc3QgUXVhbGlmaWVkTmFtZSBvcHRncm91cFFOYW1lOworICAgIGV4dGVybiBjb25zdCBR
dWFsaWZpZWROYW1lIG9wdGlvblFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1l
IHBRTmFtZTsKKyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSBwYXJhbVFOYW1lOworICAg
IGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIHBsYWludGV4dFFOYW1lOworICAgIGV4dGVybiBj
b25zdCBRdWFsaWZpZWROYW1lIHByZVFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWRO
YW1lIHFRTmFtZTsKKyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSBzUU5hbWU7CisgICAg
ZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgc2FtcFFOYW1lOworICAgIGV4dGVybiBjb25zdCBR
dWFsaWZpZWROYW1lIHNjcmlwdFFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1l
IHNlbGVjdFFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIHNtYWxsUU5hbWU7
CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgc3BhblFOYW1lOworICAgIGV4dGVybiBj
b25zdCBRdWFsaWZpZWROYW1lIHN0cmlrZVFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZp
ZWROYW1lIHN0cm9uZ1FOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIHN0eWxl
UU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgc3ViUU5hbWU7CisgICAgZXh0
ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgc3VwUU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxp
ZmllZE5hbWUgdGFibGVRTmFtZTsKKyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSB0Ym9k
eVFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIHRkUU5hbWU7CisgICAgZXh0
ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgdGV4dGFyZWFRTmFtZTsKKyAgICBleHRlcm4gY29uc3Qg
UXVhbGlmaWVkTmFtZSB0Zm9vdFFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1l
IHRoUU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgdGhlYWRRTmFtZTsKKyAg
ICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSB0aXRsZVFOYW1lOworICAgIGV4dGVybiBjb25z
dCBRdWFsaWZpZWROYW1lIHRyUU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUg
dHRRTmFtZTsKKyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSB1UU5hbWU7CisgICAgZXh0
ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgdWxRTmFtZTsKKyAgICBleHRlcm4gY29uc3QgUXVhbGlm
aWVkTmFtZSB2YXJRTmFtZTsKKyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSB3YnJRTmFt
ZTsKKyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSB4bXBRTmFtZTsKKworI2VuZGlmCisK
IGNsYXNzIEhUTUxOYW1lcwogewogcHVibGljOgorI2lmICFLSFRNTF9IVE1MTkFNRVNfSElERV9H
TE9CQUxTCiAgICAgLy8gVGhlIG5hbWVzcGFjZSBVUkkuCi0gICAgc3RhdGljIGNvbnN0IEF0b21p
Y1N0cmluZyYgeGh0bWxOYW1lc3BhY2VVUkkoKTsKKyAgICBzdGF0aWMgY29uc3QgQXRvbWljU3Ry
aW5nJiB4aHRtbE5hbWVzcGFjZVVSSSgpIHsgcmV0dXJuIHhodG1sTmFtZXNwYWNlVVJJQXRvbTsg
fQogICAgIAotICAgIC8vIEZ1bGwgdGFnIG5hbWVzLgotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZp
ZWROYW1lJiBhKCk7Ci0gICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGFkZHJlc3MoKTsK
LSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXBwbGV0KCk7Ci0gICAgc3RhdGljIGNv
bnN0IFF1YWxpZmllZE5hbWUmIGFyZWEoKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFt
ZSYgYigpOwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBiYXNlKCk7Ci0gICAgc3Rh
dGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGJhc2Vmb250KCk7Ci0gICAgc3RhdGljIGNvbnN0IFF1
YWxpZmllZE5hbWUmIGJpZygpOwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBibG9j
a3F1b3RlKCk7Ci0gICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGJvZHkoKTsKLSAgICBz
dGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgYnIoKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlm
aWVkTmFtZSYgYnV0dG9uKCk7Ci0gICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGNhbnZh
cygpOwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBjYXB0aW9uKCk7Ci0gICAgc3Rh
dGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGNlbnRlcigpOwotICAgIHN0YXRpYyBjb25zdCBRdWFs
aWZpZWROYW1lJiBjb2RlKCk7Ci0gICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGNvbCgp
OwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBjb2xncm91cCgpOwotICAgIHN0YXRp
YyBjb25zdCBRdWFsaWZpZWROYW1lJiBkZCgpOwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWRO
YW1lJiBkZWwoKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgZGZuKCk7Ci0gICAg
c3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGRpcigpOwotICAgIHN0YXRpYyBjb25zdCBRdWFs
aWZpZWROYW1lJiBkaXYoKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgZGwoKTsK
LSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgZHQoKTsKLSAgICBzdGF0aWMgY29uc3Qg
UXVhbGlmaWVkTmFtZSYgZW0oKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgZW1i
ZWQoKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgZmllbGRzZXQoKTsKLSAgICBz
dGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgZm9udCgpOwotICAgIHN0YXRpYyBjb25zdCBRdWFs
aWZpZWROYW1lJiBmb3JtKCk7Ci0gICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGZyYW1l
KCk7Ci0gICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGZyYW1lc2V0KCk7Ci0gICAgc3Rh
dGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGhlYWQoKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlm
aWVkTmFtZSYgaDEoKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgaDIoKTsKLSAg
ICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgaDMoKTsKLSAgICBzdGF0aWMgY29uc3QgUXVh
bGlmaWVkTmFtZSYgaDQoKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgaDUoKTsK
LSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgaDYoKTsKLSAgICBzdGF0aWMgY29uc3Qg
UXVhbGlmaWVkTmFtZSYgaHIoKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgaHRt
bCgpOwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBpKCk7Ci0gICAgc3RhdGljIGNv
bnN0IFF1YWxpZmllZE5hbWUmIGlmcmFtZSgpOwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWRO
YW1lJiBpbWcoKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgaW5wdXQoKTsKLSAg
ICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgaW5zKCk7Ci0gICAgc3RhdGljIGNvbnN0IFF1
YWxpZmllZE5hbWUmIGlzaW5kZXgoKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYg
a2JkKCk7Ci0gICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGtleWdlbigpOwotICAgIHN0
YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBsYWJlbCgpOwotICAgIHN0YXRpYyBjb25zdCBRdWFs
aWZpZWROYW1lJiBsZWdlbmQoKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgbGko
KTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgbGluaygpOwotICAgIHN0YXRpYyBj
b25zdCBRdWFsaWZpZWROYW1lJiBtYXAoKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFt
ZSYgbWFycXVlZSgpOwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBtZW51KCk7Ci0g
ICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIG1ldGEoKTsKLSAgICBzdGF0aWMgY29uc3Qg
UXVhbGlmaWVkTmFtZSYgbm9lbWJlZCgpOwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1l
JiBub2ZyYW1lcygpOwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBub3NjcmlwdCgp
OwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBvYmplY3QoKTsKLSAgICBzdGF0aWMg
Y29uc3QgUXVhbGlmaWVkTmFtZSYgb2woKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFt
ZSYgb3B0Z3JvdXAoKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgb3B0aW9uKCk7
Ci0gICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIHAoKTsKLSAgICBzdGF0aWMgY29uc3Qg
UXVhbGlmaWVkTmFtZSYgcGFyYW0oKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYg
cHJlKCk7Ci0gICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIHEoKTsKLSAgICBzdGF0aWMg
Y29uc3QgUXVhbGlmaWVkTmFtZSYgcygpOwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1l
JiBzYW1wKCk7Ci0gICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIHNjcmlwdCgpOwotICAg
IHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBzZWxlY3QoKTsKLSAgICBzdGF0aWMgY29uc3Qg
UXVhbGlmaWVkTmFtZSYgc21hbGwoKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYg
c3RyaWtlKCk7Ci0gICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIHN0cm9uZygpOwotICAg
IHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBzdHlsZSgpOwotICAgIHN0YXRpYyBjb25zdCBR
dWFsaWZpZWROYW1lJiB0YWJsZSgpOwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiB0
Ym9keSgpOwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiB0ZCgpOwotICAgIHN0YXRp
YyBjb25zdCBRdWFsaWZpZWROYW1lJiB0ZXh0YXJlYSgpOwotICAgIHN0YXRpYyBjb25zdCBRdWFs
aWZpZWROYW1lJiB0Zm9vdCgpOwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiB0aCgp
OwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiB0aGVhZCgpOwotICAgIHN0YXRpYyBj
b25zdCBRdWFsaWZpZWROYW1lJiB0aXRsZSgpOwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWRO
YW1lJiB0cigpOwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiB0dCgpOwotICAgIHN0
YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiB1KCk7Ci0gICAgc3RhdGljIGNvbnN0IFF1YWxpZmll
ZE5hbWUmIHVsKCk7Ci0gICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIHZhcigpOwotICAg
IHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiB4bXAoKTsKKy8vIEZ1bGwgdGFnIG5hbWVzLgor
I2RlZmluZSBERUZJTkVfR0VUVEVSKG5hbWUpIFwKKyAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVk
TmFtZSYgbmFtZSgpIHsgcmV0dXJuIG5hbWUgIyMgUU5hbWU7IH0KKworICAgIERFRklORV9HRVRU
RVIoYSkKKyAgICBERUZJTkVfR0VUVEVSKGFiYnIpCisgICAgREVGSU5FX0dFVFRFUihhY3Jvbnlt
KQorICAgIERFRklORV9HRVRURVIoYWRkcmVzcykKKyAgICBERUZJTkVfR0VUVEVSKGFwcGxldCkK
KyAgICBERUZJTkVfR0VUVEVSKGFyZWEpCisgICAgREVGSU5FX0dFVFRFUihiKQorICAgIERFRklO
RV9HRVRURVIoYmFzZSkKKyAgICBERUZJTkVfR0VUVEVSKGJhc2Vmb250KQorICAgIERFRklORV9H
RVRURVIoYmRvKQorICAgIERFRklORV9HRVRURVIoYmlnKQorICAgIERFRklORV9HRVRURVIoYmxv
Y2txdW90ZSkKKyAgICBERUZJTkVfR0VUVEVSKGJvZHkpCisgICAgREVGSU5FX0dFVFRFUihicikK
KyAgICBERUZJTkVfR0VUVEVSKGJ1dHRvbikKKyAgICBERUZJTkVfR0VUVEVSKGNhbnZhcykKKyAg
ICBERUZJTkVfR0VUVEVSKGNhcHRpb24pCisgICAgREVGSU5FX0dFVFRFUihjZW50ZXIpCisgICAg
REVGSU5FX0dFVFRFUihjaXRlKQorICAgIERFRklORV9HRVRURVIoY29kZSkKKyAgICBERUZJTkVf
R0VUVEVSKGNvbCkKKyAgICBERUZJTkVfR0VUVEVSKGNvbGdyb3VwKQorICAgIERFRklORV9HRVRU
RVIoZGQpCisgICAgREVGSU5FX0dFVFRFUihkZWwpCisgICAgREVGSU5FX0dFVFRFUihkZm4pCisg
ICAgREVGSU5FX0dFVFRFUihkaXIpCisgICAgREVGSU5FX0dFVFRFUihkaXYpCisgICAgREVGSU5F
X0dFVFRFUihkbCkKKyAgICBERUZJTkVfR0VUVEVSKGR0KQorICAgIERFRklORV9HRVRURVIoZW0p
CisgICAgREVGSU5FX0dFVFRFUihlbWJlZCkKKyAgICBERUZJTkVfR0VUVEVSKGZpZWxkc2V0KQor
ICAgIERFRklORV9HRVRURVIoZm9udCkKKyAgICBERUZJTkVfR0VUVEVSKGZvcm0pCisgICAgREVG
SU5FX0dFVFRFUihmcmFtZSkKKyAgICBERUZJTkVfR0VUVEVSKGZyYW1lc2V0KQorICAgIERFRklO
RV9HRVRURVIoaGVhZCkKKyAgICBERUZJTkVfR0VUVEVSKGgxKQorICAgIERFRklORV9HRVRURVIo
aDIpCisgICAgREVGSU5FX0dFVFRFUihoMykKKyAgICBERUZJTkVfR0VUVEVSKGg0KQorICAgIERF
RklORV9HRVRURVIoaDUpCisgICAgREVGSU5FX0dFVFRFUihoNikKKyAgICBERUZJTkVfR0VUVEVS
KGhyKQorICAgIERFRklORV9HRVRURVIoaHRtbCkKKyAgICBERUZJTkVfR0VUVEVSKGkpCisgICAg
REVGSU5FX0dFVFRFUihpZnJhbWUpCisgICAgREVGSU5FX0dFVFRFUihpbWcpCisgICAgREVGSU5F
X0dFVFRFUihpbnB1dCkKKyAgICBERUZJTkVfR0VUVEVSKGlucykKKyAgICBERUZJTkVfR0VUVEVS
KGlzaW5kZXgpCisgICAgREVGSU5FX0dFVFRFUihrYmQpCisgICAgREVGSU5FX0dFVFRFUihrZXln
ZW4pCisgICAgREVGSU5FX0dFVFRFUihsYWJlbCkKKyAgICBERUZJTkVfR0VUVEVSKGxheWVyKQor
ICAgIERFRklORV9HRVRURVIobGVnZW5kKQorICAgIERFRklORV9HRVRURVIobGkpCisgICAgREVG
SU5FX0dFVFRFUihsaW5rKQorICAgIERFRklORV9HRVRURVIobWFwKQorICAgIERFRklORV9HRVRU
RVIobWFycXVlZSkKKyAgICBERUZJTkVfR0VUVEVSKG1lbnUpCisgICAgREVGSU5FX0dFVFRFUiht
ZXRhKQorICAgIERFRklORV9HRVRURVIobm9icikKKyAgICBERUZJTkVfR0VUVEVSKG5vZW1iZWQp
CisgICAgREVGSU5FX0dFVFRFUihub2ZyYW1lcykKKyAgICBERUZJTkVfR0VUVEVSKG5vbGF5ZXIp
CisgICAgREVGSU5FX0dFVFRFUihub3NjcmlwdCkKKyAgICBERUZJTkVfR0VUVEVSKG9iamVjdCkK
KyAgICBERUZJTkVfR0VUVEVSKG9sKQorICAgIERFRklORV9HRVRURVIob3B0Z3JvdXApCisgICAg
REVGSU5FX0dFVFRFUihvcHRpb24pCisgICAgREVGSU5FX0dFVFRFUihwKQorICAgIERFRklORV9H
RVRURVIocGFyYW0pCisgICAgREVGSU5FX0dFVFRFUihwbGFpbnRleHQpCisgICAgREVGSU5FX0dF
VFRFUihwcmUpCisgICAgREVGSU5FX0dFVFRFUihxKQorICAgIERFRklORV9HRVRURVIocykKKyAg
ICBERUZJTkVfR0VUVEVSKHNhbXApCisgICAgREVGSU5FX0dFVFRFUihzY3JpcHQpCisgICAgREVG
SU5FX0dFVFRFUihzZWxlY3QpCisgICAgREVGSU5FX0dFVFRFUihzbWFsbCkKKyAgICBERUZJTkVf
R0VUVEVSKHNwYW4pCisgICAgREVGSU5FX0dFVFRFUihzdHJpa2UpCisgICAgREVGSU5FX0dFVFRF
UihzdHJvbmcpCisgICAgREVGSU5FX0dFVFRFUihzdHlsZSkKKyAgICBERUZJTkVfR0VUVEVSKHN1
YikKKyAgICBERUZJTkVfR0VUVEVSKHN1cCkKKyAgICBERUZJTkVfR0VUVEVSKHRhYmxlKQorICAg
IERFRklORV9HRVRURVIodGJvZHkpCisgICAgREVGSU5FX0dFVFRFUih0ZCkKKyAgICBERUZJTkVf
R0VUVEVSKHRleHRhcmVhKQorICAgIERFRklORV9HRVRURVIodGZvb3QpCisgICAgREVGSU5FX0dF
VFRFUih0aCkKKyAgICBERUZJTkVfR0VUVEVSKHRoZWFkKQorICAgIERFRklORV9HRVRURVIodGl0
bGUpCisgICAgREVGSU5FX0dFVFRFUih0cikKKyAgICBERUZJTkVfR0VUVEVSKHR0KQorICAgIERF
RklORV9HRVRURVIodSkKKyAgICBERUZJTkVfR0VUVEVSKHVsKQorICAgIERFRklORV9HRVRURVIo
dmFyKQorICAgIERFRklORV9HRVRURVIod2JyKQorICAgIERFRklORV9HRVRURVIoeG1wKQogCiAg
ICAgLy8gQXR0cmlidXRlIG5hbWVzLgorI2VuZGlmCisKKyAgICAvLyBJbml0IHJvdXRpbmUKKyAg
ICBzdGF0aWMgdm9pZCBpbml0KCk7CiB9OwogCiB9CkluZGV4OiBraHRtbC9odG1sL2h0bWxwYXJz
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwv
aHRtbHBhcnNlci5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuOTYKZGlmZiAtdSAtcCAtcjEu
OTYga2h0bWwvaHRtbC9odG1scGFyc2VyLmNwcAotLS0ga2h0bWwvaHRtbC9odG1scGFyc2VyLmNw
cAkxMSBNYXkgMjAwNSAwMDo1ODoyOCAtMDAwMAkxLjk2CisrKyBraHRtbC9odG1sL2h0bWxwYXJz
ZXIuY3BwCTggSnVsIDIwMDUgMDU6NTA6MTYgLTAwMDAKQEAgLTQ0LDkgKzQ0LDEyIEBACiAjaW5j
bHVkZSAiaHRtbC9odG1sX21pc2NpbXBsLmgiCiAjaW5jbHVkZSAiaHRtbC9odG1sX3RhYmxlaW1w
bC5oIgogI2luY2x1ZGUgImh0bWwvaHRtbF9vYmplY3RpbXBsLmgiCisjaW5jbHVkZSAiaHRtbGZh
Y3RvcnkuaCIKICNpbmNsdWRlICJ4bWwvZG9tX3RleHRpbXBsLmgiCiAjaW5jbHVkZSAieG1sL2Rv
bV9ub2RlaW1wbC5oIgogI2luY2x1ZGUgIm1pc2MvaHRtbGhhc2hlcy5oIgorI2luY2x1ZGUgIm1p
c2MvbWFpbl90aHJlYWRfbWFsbG9jLmgiCisjaW5jbHVkZSAibWlzYy9oYXNoc2V0LmgiCiAjaW5j
bHVkZSAiaHRtbC9odG1sdG9rZW5pemVyLmgiCiAjaW5jbHVkZSAia2h0bWx2aWV3LmgiCiAjaW5j
bHVkZSAia2h0bWxfcGFydC5oIgpAQCAtNTUsNiArNTgsOCBAQAogCiAjaW5jbHVkZSAicmVuZGVy
aW5nL3JlbmRlcl9vYmplY3QuaCIKIAorI2luY2x1ZGUgIm1pc2MvcG9pbnRlcmhhc2guaCIKKwog
I2luY2x1ZGUgPGtkZWJ1Zy5oPgogI2luY2x1ZGUgPGtsb2NhbGUuaD4KIApAQCAtNjksMjQgKzc0
LDI2IEBAIHVzaW5nIG5hbWVzcGFjZSBraHRtbDsKIGNsYXNzIEhUTUxTdGFja0VsZW0KIHsKIHB1
YmxpYzoKLSAgICBIVE1MU3RhY2tFbGVtKCBpbnQgX2lkLAotICAgICAgICAgICAgICAgICAgIGlu
dCBfbGV2ZWwsCi0gICAgICAgICAgICAgICAgICAgRE9NOjpOb2RlSW1wbCAqX25vZGUsCi0gICAg
ICAgICAgICAgICAgICAgSFRNTFN0YWNrRWxlbSAqIF9uZXh0CisgICAgSFRNTFN0YWNrRWxlbShj
b25zdCBBdG9taWNTdHJpbmcmIF90YWdOYW1lLAorICAgICAgICAgICAgICAgICAgaW50IF9sZXZl
bCwKKyAgICAgICAgICAgICAgICAgIERPTTo6Tm9kZUltcGwgKl9ub2RlLAorICAgICAgICAgICAg
ICAgICAgSFRNTFN0YWNrRWxlbSAqIF9uZXh0CiAgICAgICAgICkKICAgICAgICAgOgotICAgICAg
ICBpZChfaWQpLAorICAgICAgICB0YWdOYW1lKF90YWdOYW1lKSwKICAgICAgICAgbGV2ZWwoX2xl
dmVsKSwKICAgICAgICAgc3RyYXlUYWJsZUNvbnRlbnQoZmFsc2UpLAogICAgICAgICBub2RlKF9u
b2RlKSwKICAgICAgICAgbmV4dChfbmV4dCkKICAgICAgICAgeyB9CiAKLSAgICBpbnQgICAgICAg
aWQ7Ci0gICAgaW50ICAgICAgIGxldmVsOwotICAgIGJvb2wgICAgICBzdHJheVRhYmxlQ29udGVu
dDsKLSAgICBOb2RlSW1wbCAqbm9kZTsKLSAgICBIVE1MU3RhY2tFbGVtICpuZXh0OworICAgIE1B
SU5fVEhSRUFEX0FMTE9DQVRFRDsKKworICAgIEF0b21pY1N0cmluZyB0YWdOYW1lOworICAgIGlu
dCBsZXZlbDsKKyAgICBib29sIHN0cmF5VGFibGVDb250ZW50OworICAgIE5vZGVJbXBsKiBub2Rl
OworICAgIEhUTUxTdGFja0VsZW0qIG5leHQ7CiB9OwogCiAvKioKQEAgLTExMiwxNCArMTE5LDkg
QEAgcHVibGljOgogICogICAgZWxlbWVudCBvciBpZ25vcmUgdGhlIHRhZy4KICAqCiAgKi8KLUtI
VE1MUGFyc2VyOjpLSFRNTFBhcnNlcihLSFRNTFZpZXcgKl9wYXJlbnQsIERvY3VtZW50UHRyICpk
b2MsIGJvb2wgaW5jbHVkZXNDb21tZW50cykgCitIVE1MUGFyc2VyOjpIVE1MUGFyc2VyKEtIVE1M
VmlldyAqX3BhcmVudCwgRG9jdW1lbnRQdHIgKmRvYywgYm9vbCBpbmNsdWRlc0NvbW1lbnRzKSAK
ICAgICA6IGN1cnJlbnQoMCksIGN1cnJlbnRJc1JlZmVyZW5jZWQoZmFsc2UpLCBpbmNsdWRlc0Nv
bW1lbnRzSW5ET00oaW5jbHVkZXNDb21tZW50cykKIHsKLSAgICAvL2tkRGVidWcoIDYwMzUgKSA8
PCAicGFyc2VyIGNvbnN0cnVjdG9yIiA8PCBlbmRsOwotI2lmIFNQRUVEX0RFQlVHID4gMAotICAg
IHF0LnN0YXJ0KCk7Ci0jZW5kaWYKLQogICAgIEhUTUxXaWRnZXQgICAgPSBfcGFyZW50OwogICAg
IGRvY3VtZW50ICAgICAgPSBkb2M7CiAgICAgZG9jdW1lbnQtPnJlZigpOwpAQCAtMTI5LDcgKzEz
MSw3IEBAIEtIVE1MUGFyc2VyOjpLSFRNTFBhcnNlcihLSFRNTFZpZXcgKl9wYXIKICAgICByZXNl
dCgpOwogfQogCi1LSFRNTFBhcnNlcjo6S0hUTUxQYXJzZXIoRE9NOjpEb2N1bWVudEZyYWdtZW50
SW1wbCAqaSwgRG9jdW1lbnRQdHIgKmRvYywgYm9vbCBpbmNsdWRlc0NvbW1lbnRzKQorSFRNTFBh
cnNlcjo6SFRNTFBhcnNlcihET006OkRvY3VtZW50RnJhZ21lbnRJbXBsICppLCBEb2N1bWVudFB0
ciAqZG9jLCBib29sIGluY2x1ZGVzQ29tbWVudHMpCiAgICAgOiBjdXJyZW50KDApLCBjdXJyZW50
SXNSZWZlcmVuY2VkKGZhbHNlKSwgaW5jbHVkZXNDb21tZW50c0luRE9NKGluY2x1ZGVzQ29tbWVu
dHMpCiB7CiAgICAgSFRNTFdpZGdldCA9IDA7CkBAIC0xNDMsMTIgKzE0NSw4IEBAIEtIVE1MUGFy
c2VyOjpLSFRNTFBhcnNlcihET006OkRvY3VtZW50RnIKICAgICBpbkJvZHkgPSB0cnVlOwogfQog
Ci1LSFRNTFBhcnNlcjo6fktIVE1MUGFyc2VyKCkKK0hUTUxQYXJzZXI6On5IVE1MUGFyc2VyKCkK
IHsKLSNpZiBTUEVFRF9ERUJVRyA+IDAKLSAgICBrZERlYnVnKCApIDw8ICJUSU1FOiBwYXJzaW5n
IHRpbWUgd2FzID0gIiA8PCBxdC5lbGFwc2VkKCkgPDwgZW5kbDsKLSNlbmRpZgotCiAgICAgZnJl
ZUJsb2NrKCk7CiAKICAgICBzZXRDdXJyZW50KDApOwpAQCAtMTU5LDE1ICsxNTcsMTIgQEAgS0hU
TUxQYXJzZXI6On5LSFRNTFBhcnNlcigpCiAgICAgICAgIGlzaW5kZXgtPmRlcmVmKCk7CiB9CiAK
LXZvaWQgS0hUTUxQYXJzZXI6OnJlc2V0KCkKK3ZvaWQgSFRNTFBhcnNlcjo6cmVzZXQoKQogewog
ICAgIHNldEN1cnJlbnQoZG9jKCkpOwogCiAgICAgZnJlZUJsb2NrKCk7CiAKLSAgICAvLyBiZWZv
cmUgcGFyc2luZywgbm8gdGFncyBhcmUgZm9yYmlkZGVuCi0gICAgbWVtc2V0KGZvcmJpZGRlblRh
ZywgMCwgc2l6ZW9mKGZvcmJpZGRlblRhZykpOwotCiAgICAgaW5Cb2R5ID0gZmFsc2U7CiAgICAg
aGF2ZUZyYW1lU2V0ID0gZmFsc2U7CiAgICAgaGF2ZUNvbnRlbnQgPSBmYWxzZTsKQEAgLTE4MCwx
MCArMTc1LDEwIEBAIHZvaWQgS0hUTUxQYXJzZXI6OnJlc2V0KCkKICAgICBlbmQgPSBmYWxzZTsK
ICAgICBpc2luZGV4ID0gMDsKICAgICAKLSAgICBkaXNjYXJkX3VudGlsID0gMDsKKyAgICBkaXNj
YXJkX3VudGlsID0gbnVsbEF0b207CiB9CiAKLXZvaWQgS0hUTUxQYXJzZXI6OnNldEN1cnJlbnQo
RE9NOjpOb2RlSW1wbCAqbmV3Q3VycmVudCkgCit2b2lkIEhUTUxQYXJzZXI6OnNldEN1cnJlbnQo
RE9NOjpOb2RlSW1wbCAqbmV3Q3VycmVudCkgCiB7CiAgICAgYm9vbCBuZXdDdXJyZW50SXNSZWZl
cmVuY2VkID0gbmV3Q3VycmVudCAmJiBuZXdDdXJyZW50ICE9IGRvYygpOwogICAgIGlmIChuZXdD
dXJyZW50SXNSZWZlcmVuY2VkKSAKQEAgLTE5NCwxNDQgKzE4OSwxMDggQEAgdm9pZCBLSFRNTFBh
cnNlcjo6c2V0Q3VycmVudChET006Ok5vZGVJbQogICAgIGN1cnJlbnRJc1JlZmVyZW5jZWQgPSBu
ZXdDdXJyZW50SXNSZWZlcmVuY2VkOwogfQogCi12b2lkIEtIVE1MUGFyc2VyOjpwYXJzZVRva2Vu
KFRva2VuICp0KQordm9pZCBIVE1MUGFyc2VyOjpwYXJzZVRva2VuKFRva2VuICp0KQogewotICAg
IGlmKGRpc2NhcmRfdW50aWwpIHsKLSAgICAgICAgaWYodC0+aWQgPT0gZGlzY2FyZF91bnRpbCkK
LSAgICAgICAgICAgIGRpc2NhcmRfdW50aWwgPSAwOworICAgIGlmICghZGlzY2FyZF91bnRpbC5p
c051bGwoKSkgeworICAgICAgICBpZiAodC0+dGFnTmFtZSA9PSBkaXNjYXJkX3VudGlsICYmICF0
LT5iZWdpblRhZykKKyAgICAgICAgICAgIGRpc2NhcmRfdW50aWwgPSBudWxsQXRvbTsKIAogICAg
ICAgICAvLyBkbyBub3Qgc2tpcCA8L2lmcmFtZT4KLSAgICAgICAgaWYgKCBkaXNjYXJkX3VudGls
IHx8IGN1cnJlbnQtPmlkKCkgKyBJRF9DTE9TRV9UQUcgIT0gdC0+aWQgKQorICAgICAgICBpZiAo
IWRpc2NhcmRfdW50aWwuaXNOdWxsKCkgfHwgKGN1cnJlbnQtPmxvY2FsTmFtZSgpICE9IHQtPnRh
Z05hbWUpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotI2lmZGVmIFBBUlNFUl9ERUJV
RwotICAgIGtkRGVidWcoIDYwMzUgKSA8PCAiXG5cbj09PiBwYXJzZXI6IHByb2Nlc3NpbmcgdG9r
ZW4gIiA8PCBnZXRUYWdOYW1lKHQtPmlkKS5zdHJpbmcoKSA8PCAiKCIgPDwgdC0+aWQgPDwgIiki
Ci0gICAgICAgICAgICAgICAgICAgIDw8ICIgY3VycmVudCA9ICIgPDwgZ2V0VGFnTmFtZShjdXJy
ZW50LT5pZCgpKS5zdHJpbmcoKSA8PCAiKCIgPDwgY3VycmVudC0+aWQoKSA8PCAiKSIgPDwgZW5k
bDsKLSAgICBrZERlYnVnKDYwMzUpIDw8ICIgaW5Cb2R5PSIgPDwgaW5Cb2R5IDw8ICIgaGF2ZUZy
YW1lU2V0PSIgPDwgaGF2ZUZyYW1lU2V0IDw8IGVuZGw7Ci0jZW5kaWYKKyAgICAvLyBBcHBhcmVu
dGx5IHNvbWUgc2l0ZXMgdXNlIDwvYnI+IGluc3RlYWQgb2YgPGJyPi4gIEJlIGNvbXBhdGlibGUg
d2l0aCBJRSBhbmQgRmlyZWZveCBhbmQgdHJlYXQgdGhpcyBsaWtlIDxicj4uCisgICAgaWYgKHQt
PmlzQ2xvc2VUYWcoSFRNTE5hbWVzOjpicigpKSAmJiBkb2MoKS0+aW5Db21wYXRNb2RlKCkpCisg
ICAgICAgIHQtPmJlZ2luVGFnID0gdHJ1ZTsKIAotICAgIC8vIGhvbHkgc2hpdC4gYXBwYXJlbnRs
eSBzb21lIHNpdGVzIHVzZSA8L2JyPiBpbnN0ZWFkIG9mIDxicj4KLSAgICAvLyBiZSBjb21wYXRp
YmxlIHdpdGggSUUgYW5kIE5TCi0gICAgaWYgKHQtPmlkID09IElEX0JSICsgSURfQ0xPU0VfVEFH
ICYmIGRvYygpLT5pbkNvbXBhdE1vZGUoKSkKLSAgICAgICAgdC0+aWQgPSBJRF9CUjsKLQotICAg
IGlmICh0LT5pZCA+IElEX0NMT1NFX1RBRykKLSAgICB7CisgICAgaWYgKCF0LT5iZWdpblRhZykg
ewogICAgICAgICBwcm9jZXNzQ2xvc2VUYWcodCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
ICAgICAvLyBpZ25vcmUgc3BhY2VzLCBpZiB3ZSdyZSBub3QgaW5zaWRlIGEgcGFyYWdyYXBoIG9y
IG90aGVyIGlubGluZSBjb2RlCi0gICAgaWYoIHQtPmlkID09IElEX1RFWFQgJiYgdC0+dGV4dCAp
IHsKLSAgICAgICAgaWYoaW5Cb2R5ICYmICFza2lwTW9kZSgpICYmIGN1cnJlbnQtPmlkKCkgIT0g
SURfU1RZTEUgCi0gICAgICAgICAgICAmJiBjdXJyZW50LT5pZCgpICE9IElEX1RJVExFICYmIGN1
cnJlbnQtPmlkKCkgIT0gSURfU0NSSVBUICYmCi0gICAgICAgICAgICAhdC0+dGV4dC0+Y29udGFp
bnNPbmx5V2hpdGVzcGFjZSgpKSAKKyAgICBpZiAodC0+dGFnTmFtZSA9PSB0ZXh0QXRvbSAmJiB0
LT50ZXh0KSB7CisgICAgICAgIGlmIChpbkJvZHkgJiYgIXNraXBNb2RlKCkgJiYgY3VycmVudC0+
bG9jYWxOYW1lKCkgIT0gSFRNTE5hbWVzOjpzdHlsZSgpICYmIGN1cnJlbnQtPmxvY2FsTmFtZSgp
ICE9IEhUTUxOYW1lczo6dGl0bGUoKSAmJiAKKyAgICAgICAgICAgIGN1cnJlbnQtPmxvY2FsTmFt
ZSgpICE9IEhUTUxOYW1lczo6c2NyaXB0KCkgJiYgIXQtPnRleHQtPmNvbnRhaW5zT25seVdoaXRl
c3BhY2UoKSkgCiAgICAgICAgICAgICBoYXZlQ29udGVudCA9IHRydWU7Ci0jaWZkZWYgUEFSU0VS
X0RFQlVHCi0gICAgICAgIGtkRGVidWcoNjAzNSkgPDwgImxlbmd0aD0iPDwgdC0+dGV4dC0+bCA8
PCAiIHRleHQ9JyIgPDwgUUNvbnN0U3RyaW5nKHQtPnRleHQtPnMsIHQtPnRleHQtPmwpLnN0cmlu
ZygpIDw8ICInIiA8PCBlbmRsOwotI2VuZGlmCiAgICAgfQogCi0gICAgTm9kZUltcGwgKm4gPSBn
ZXRFbGVtZW50KHQpOworICAgIE5vZGVJbXBsICpuID0gZ2V0Tm9kZSh0KTsKICAgICAvLyBqdXN0
IHRvIGJlIHN1cmUsIGFuZCB0byBjYXRjaCBjdXJyZW50bHkgdW5pbXBsZW1lbnRlZCBzdHVmZgot
ICAgIGlmKCFuKQorICAgIGlmICghbikKICAgICAgICAgcmV0dXJuOwogCiAgICAgU2hhcmVkUHRy
PE5vZGVJbXBsPiBwcm90ZWN0Tm9kZShuKTsKIAogICAgIC8vIHNldCBhdHRyaWJ1dGVzCi0gICAg
aWYobi0+aXNFbGVtZW50Tm9kZSgpKQotICAgIHsKLSAgICAgICAgRWxlbWVudEltcGwgKmUgPSBz
dGF0aWNfY2FzdDxFbGVtZW50SW1wbCAqPihuKTsKKyAgICBpZiAobi0+aXNIVE1MRWxlbWVudCgp
KSB7CisgICAgICAgIEhUTUxFbGVtZW50SW1wbCAqZSA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50
SW1wbCo+KG4pOwogICAgICAgICBlLT5zZXRBdHRyaWJ1dGVNYXAodC0+YXR0cnMpOwogCiAgICAg
ICAgIC8vIHRha2UgY2FyZSBvZiBvcHRpb25hbCBjbG9zZSB0YWdzCi0gICAgICAgIGlmKGVuZFRh
Z1JlcXVpcmVtZW50KGUtPmlkKCkpID09IERPTTo6T1BUSU9OQUwpCi0gICAgICAgICAgICBwb3BC
bG9jayh0LT5pZCk7CisgICAgICAgIGlmIChlLT5lbmRUYWdSZXF1aXJlbWVudCgpID09IFRhZ1N0
YXR1c09wdGlvbmFsKQorICAgICAgICAgICAgcG9wQmxvY2sodC0+dGFnTmFtZSk7CiAgICAgICAg
ICAgICAKLSAgICAgICAgaWYgKGlzSGVhZGVyVGFnKHQtPmlkKSkKKyAgICAgICAgaWYgKGlzSGVh
ZGVyVGFnKHQtPnRhZ05hbWUpKQogICAgICAgICAgICAgLy8gRG8gbm90IGFsbG93IHR3byBoZWFk
ZXIgdGFncyB0byBiZSBuZXN0ZWQgaWYgdGhlIGludGVydmVuaW5nIHRhZ3MgYXJlIGlubGluZXMu
CiAgICAgICAgICAgICBwb3BOZXN0ZWRIZWFkZXJUYWcoKTsKICAgICB9CiAKLSAgICAvLyBpZiB0
aGlzIHRhZyBpcyBmb3JiaWRkZW4gaW5zaWRlIHRoZSBjdXJyZW50IGNvbnRleHQsIHBvcAotICAg
IC8vIGJsb2NrcyB1bnRpbCB3ZSBhcmUgYWxsb3dlZCB0byBhZGQgaXQuLi4KLSAgICB3aGlsZSAo
YmxvY2tTdGFjayAmJiB0LT5pZCA8PSBJRF9MQVNUX1RBRyAmJiBmb3JiaWRkZW5UYWdbdC0+aWRd
KSB7Ci0jaWZkZWYgUEFSU0VSX0RFQlVHCi0gICAgICAgIGtkRGVidWcoIDYwMzUgKSA8PCAidC0+
aWQ6ICIgPDwgdC0+aWQgPDwgIiBpcyBmb3JiaWRkZW4gOi0oICIgPDwgZW5kbDsKLSNlbmRpZgot
ICAgICAgICBwb3BPbmVCbG9jaygpOwotICAgIH0KLQotICAgIGlmICghaW5zZXJ0Tm9kZShuLCB0
LT5mbGF0KSkgCi0gICAgeworICAgIGlmICghaW5zZXJ0Tm9kZShuLCB0LT5mbGF0KSkgewogICAg
ICAgICAvLyB3ZSBjb3VsZG4ndCBpbnNlcnQgdGhlIG5vZGUuLi4KLSAgICAgICAgCi0gICAgICAg
IGlmKG4tPmlzRWxlbWVudE5vZGUoKSkKLSAgICAgICAgewotICAgICAgICAgICAgRWxlbWVudElt
cGwgKmUgPSBzdGF0aWNfY2FzdDxFbGVtZW50SW1wbCAqPihuKTsKKyAgICAgICAgaWYgKG4tPmlz
RWxlbWVudE5vZGUoKSkgeworICAgICAgICAgICAgRWxlbWVudEltcGwqIGUgPSBzdGF0aWNfY2Fz
dDxFbGVtZW50SW1wbCo+KG4pOwogICAgICAgICAgICAgZS0+c2V0QXR0cmlidXRlTWFwKDApOwog
ICAgICAgICB9CiAgICAgICAgICAgICAKLSNpZmRlZiBQQVJTRVJfREVCVUcKLSAgICAgICAga2RE
ZWJ1ZyggNjAzNSApIDw8ICJpbnNlcnROb2RlIGZhaWxlZCBjdXJyZW50PSIgPDwgY3VycmVudC0+
aWQoKSA8PCAiLCBuZXc9IiA8PCBuLT5pZCgpIDw8ICIhIiA8PCBlbmRsOwotI2VuZGlmCiAgICAg
ICAgIGlmIChtYXAgPT0gbikKLSAgICAgICAgewotI2lmZGVmIFBBUlNFUl9ERUJVRwotICAgICAg
ICAgICAga2REZWJ1ZyggNjAzNSApIDw8ICIgIC0tPiByZXNldHRpbmcgbWFwISIgPDwgZW5kbDsK
LSNlbmRpZgogICAgICAgICAgICAgbWFwID0gMDsKLSAgICAgICAgfQorCiAgICAgICAgIGlmIChm
b3JtID09IG4pCi0gICAgICAgIHsKLSNpZmRlZiBQQVJTRVJfREVCVUcKLSAgICAgICAgICAgIGtk
RGVidWcoIDYwMzUgKSA8PCAiICAgLS0+IHJlc2V0dGluZyBmb3JtISIgPDwgZW5kbDsKLSNlbmRp
ZgogICAgICAgICAgICAgZm9ybSA9IDA7Ci0gICAgICAgIH0KICAgICB9CiB9CiAKLXN0YXRpYyBi
b29sIGlzVGFibGVSZWxhdGVkVGFnKGludCBpZCkKK3N0YXRpYyBib29sIGlzVGFibGVTZWN0aW9u
KE5vZGVJbXBsKiBuKQogewotICAgIHJldHVybiAoaWQgPT0gSURfVFIgfHwgaWQgPT0gSURfVEQg
fHwgaWQgPT0gSURfVEFCTEUgfHwgaWQgPT0gSURfVEJPRFkgfHwgaWQgPT0gSURfVEZPT1QgfHwg
aWQgPT0gSURfVEhFQUQgfHwKLSAgICAgICAgICAgIGlkID09IElEX1RIKTsKKyAgICByZXR1cm4g
bi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRib2R5KCkpIHx8IG4tPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjp0Zm9vdCgpKSB8fCBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGhlYWQoKSk7CiB9CiAK
LWJvb2wgS0hUTUxQYXJzZXI6Omluc2VydE5vZGUoTm9kZUltcGwgKm4sIGJvb2wgZmxhdCkKK3N0
YXRpYyBib29sIGlzVGFibGVQYXJ0KE5vZGVJbXBsKiBuKQogewotICAgIFNoYXJlZFB0cjxOb2Rl
SW1wbD4gcHJvdGVjdE5vZGUobik7CisgICAgcmV0dXJuIG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVz
Ojp0cigpKSB8fCBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGQoKSkgfHwgbi0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OnRoKCkpIHx8CisgICAgICAgICAgIGlzVGFibGVTZWN0aW9uKG4pOworfQog
Ci0gICAgaW50IGlkID0gbi0+aWQoKTsKK3N0YXRpYyBib29sIGlzVGFibGVSZWxhdGVkKE5vZGVJ
bXBsKiBuKQoreworICAgIHJldHVybiBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGFibGUoKSkg
fHwgaXNUYWJsZVBhcnQobik7Cit9CisKK2Jvb2wgSFRNTFBhcnNlcjo6aW5zZXJ0Tm9kZShOb2Rl
SW1wbCAqbiwgYm9vbCBmbGF0KQoreworICAgIFNoYXJlZFB0cjxOb2RlSW1wbD4gcHJvdGVjdE5v
ZGUobik7CiAKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSA9IG4tPmxvY2FsTmFt
ZSgpOworICAgIGludCB0YWdQcmlvcml0eSA9IG4tPmlzSFRNTEVsZW1lbnQoKSA/IHN0YXRpY19j
YXN0PEhUTUxFbGVtZW50SW1wbCo+KG4pLT50YWdQcmlvcml0eSgpIDogMDsKKyAgICAgICAgCiAg
ICAgLy8gbGV0J3MgYmUgc3R1cGlkIGFuZCBqdXN0IHRyeSB0byBpbnNlcnQgaXQuCi0gICAgLy8g
dGhpcyBzaG91bGQgd29yayBpZiB0aGUgZG9jdW1lbnQgaXMgd2VsbGZvcm1lZAotI2lmZGVmIFBB
UlNFUl9ERUJVRwotICAgIE5vZGVJbXBsICp0bXAgPSBjdXJyZW50OwotI2VuZGlmCisgICAgLy8g
dGhpcyBzaG91bGQgd29yayBpZiB0aGUgZG9jdW1lbnQgaXMgd2VsbC1mb3JtZWQKICAgICBOb2Rl
SW1wbCAqbmV3Tm9kZSA9IGN1cnJlbnQtPmFkZENoaWxkKG4pOwotICAgIGlmICggbmV3Tm9kZSAp
IHsKLSNpZmRlZiBQQVJTRVJfREVCVUcKLSAgICAgICAga2REZWJ1ZyggNjAzNSApIDw8ICJhZGRl
ZCAiIDw8IG4tPm5vZGVOYW1lKCkuc3RyaW5nKCkgPDwgIiB0byAiIDw8IHRtcC0+bm9kZU5hbWUo
KS5zdHJpbmcoKSA8PCAiLCBuZXcgY3VycmVudD0iIDw8IG5ld05vZGUtPm5vZGVOYW1lKCkuc3Ry
aW5nKCkgPDwgZW5kbDsKLSNlbmRpZgotICAgICAgICAvLyBkb24ndCBwdXNoIGVsZW1lbnRzIHdp
dGhvdXQgZW5kIHRhZyBvbiB0aGUgc3RhY2sKLSAgICAgICAgaWYodGFnUHJpb3JpdHkoaWQpICE9
IDAgJiYgIWZsYXQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHB1c2hCbG9jayhpZCwgdGFnUHJp
b3JpdHkoaWQpKTsKKyAgICBpZiAobmV3Tm9kZSkgeworICAgICAgICAvLyBkb24ndCBwdXNoIGVs
ZW1lbnRzIHdpdGhvdXQgZW5kIHRhZ3MgKGUuZy4sIDxpbWc+KSBvbiB0aGUgc3RhY2sKKyAgICAg
ICAgaWYgKHRhZ1ByaW9yaXR5ID4gMCAmJiAhZmxhdCkgeworICAgICAgICAgICAgcHVzaEJsb2Nr
KGxvY2FsTmFtZSwgdGFnUHJpb3JpdHkpOwogICAgICAgICAgICAgaWYgKG5ld05vZGUgPT0gY3Vy
cmVudCkKLSAgICAgICAgICAgICAgICBwb3BCbG9jayhpZCk7CisgICAgICAgICAgICAgICAgcG9w
QmxvY2sobG9jYWxOYW1lKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBzZXRD
dXJyZW50KG5ld05vZGUpOwotI2lmIFNQRUVEX0RFQlVHIDwgMgotICAgICAgICAgICAgaWYoIW4t
PmF0dGFjaGVkKCkgJiYgSFRNTFdpZGdldCkKKyAgICAgICAgICAgIGlmICghbi0+YXR0YWNoZWQo
KSAmJiBIVE1MV2lkZ2V0KQogICAgICAgICAgICAgICAgIG4tPmF0dGFjaCgpOwotI2VuZGlmCiAg
ICAgICAgIH0KICAgICAgICAgZWxzZSB7Ci0jaWYgU1BFRURfREVCVUcgPCAyCi0gICAgICAgICAg
ICBpZighbi0+YXR0YWNoZWQoKSAmJiBIVE1MV2lkZ2V0KQorICAgICAgICAgICAgaWYgKCFuLT5h
dHRhY2hlZCgpICYmIEhUTUxXaWRnZXQpCiAgICAgICAgICAgICAgICAgbi0+YXR0YWNoKCk7CiAg
ICAgICAgICAgICBpZiAobi0+bWFpbnRhaW5zU3RhdGUoKSkgewogICAgICAgICAgICAgICAgIGRv
YygpLT5yZWdpc3Rlck1haW50YWluc1N0YXRlKG4pOwpAQCAtMzQwLDEwNCArMjk5LDg2IEBAIGJv
b2wgS0hUTUxQYXJzZXI6Omluc2VydE5vZGUoTm9kZUltcGwgKm4KICAgICAgICAgICAgICAgICAg
ICAgbi0+cmVzdG9yZVN0YXRlKHN0YXRlcyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBu
LT5jbG9zZVJlbmRlcmVyKCk7Ci0jZW5kaWYKICAgICAgICAgfQogCiAgICAgICAgIHJldHVybiB0
cnVlOwotICAgIH0gZWxzZSB7Ci0jaWZkZWYgUEFSU0VSX0RFQlVHCi0gICAgICAgIGtkRGVidWco
IDYwMzUgKSA8PCAiQURESU5HIE5PREUgRkFJTEVEISEhISBjdXJyZW50ID0gIiA8PCBjdXJyZW50
LT5ub2RlTmFtZSgpLnN0cmluZygpIDw8ICIsIG5ldyA9ICIgPDwgbi0+bm9kZU5hbWUoKS5zdHJp
bmcoKSA8PCBlbmRsOwotI2VuZGlmCi0gICAgICAgIC8vIGVycm9yIGhhbmRsaW5nLi4uCi0gICAg
ICAgIEhUTUxFbGVtZW50SW1wbCAqZTsKLSAgICAgICAgYm9vbCBoYW5kbGVkID0gZmFsc2U7Ci0K
LSAgICAgICAgLy8gc3dpdGNoIGFjY29yZGluZyB0byB0aGUgZWxlbWVudCB0byBpbnNlcnQKLSAg
ICAgICAgc3dpdGNoKGlkKQotICAgICAgICB7Ci0gICAgICAgIGNhc2UgSURfVFI6Ci0gICAgICAg
IGNhc2UgSURfVEg6Ci0gICAgICAgIGNhc2UgSURfVEQ6Ci0gICAgICAgICAgICBpZiAoaW5TdHJh
eVRhYmxlQ29udGVudCAmJiAhaXNUYWJsZVJlbGF0ZWRUYWcoY3VycmVudC0+aWQoKSkpIHsKKyAg
ICB9IGVsc2UKKyAgICAgICAgcmV0dXJuIGhhbmRsZUVycm9yKG4sIGZsYXQsIGxvY2FsTmFtZSwg
dGFnUHJpb3JpdHkpOyAvLyBUcnkgdG8gaGFuZGxlIHRoZSBlcnJvci4KK30KKworYm9vbCBIVE1M
UGFyc2VyOjpoYW5kbGVFcnJvcihOb2RlSW1wbCogbiwgYm9vbCBmbGF0LCBjb25zdCBBdG9taWNT
dHJpbmcmIGxvY2FsTmFtZSwgaW50IHRhZ1ByaW9yaXR5KQoreworICAgIC8vIEVycm9yIGhhbmRs
aW5nIGNvZGUuICBUaGlzIGlzIGp1c3QgYWQgaG9jIGhhbmRsaW5nIG9mIHNwZWNpZmljIHBhcmVu
dC9jaGlsZCBjb21iaW5hdGlvbnMuCisgICAgSFRNTEVsZW1lbnRJbXBsICplOworICAgIGJvb2wg
aGFuZGxlZCA9IGZhbHNlOworCisgICAgLy8gMS4gQ2hlY2sgb3V0IHRoZSBlbGVtZW50J3MgdGFn
IG5hbWUgdG8gZGVjaWRlIGhvdyB0byBkZWFsIHdpdGggZXJyb3JzLgorICAgIGlmIChuLT5pc1Rl
eHROb2RlKCkpIHsKKyAgICAgICAgaWYgKGN1cnJlbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpz
ZWxlY3QoKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfSBlbHNlIGlmIChuLT5p
c0hUTUxFbGVtZW50KCkpIHsKKyAgICAgICAgSFRNTEVsZW1lbnRJbXBsKiBoID0gc3RhdGljX2Nh
c3Q8SFRNTEVsZW1lbnRJbXBsKj4obik7CisgICAgICAgIGlmIChoLT5oYXNMb2NhbE5hbWUoSFRN
TE5hbWVzOjp0cigpKSB8fCBoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0aCgpKSB8fAorICAg
ICAgICAgICAgaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dGQoKSkpIHsKKyAgICAgICAgICAg
IGlmIChpblN0cmF5VGFibGVDb250ZW50ICYmICFpc1RhYmxlUmVsYXRlZChjdXJyZW50KSkgewog
ICAgICAgICAgICAgICAgIC8vIHBvcCBvdXQgdG8gdGhlIG5lYXJlc3QgZW5jbG9zaW5nIHRhYmxl
LXJlbGF0ZWQgdGFnLgotICAgICAgICAgICAgICAgIHdoaWxlIChibG9ja1N0YWNrICYmICFpc1Rh
YmxlUmVsYXRlZFRhZyhjdXJyZW50LT5pZCgpKSkKKyAgICAgICAgICAgICAgICB3aGlsZSAoYmxv
Y2tTdGFjayAmJiAhaXNUYWJsZVJlbGF0ZWQoY3VycmVudCkpCiAgICAgICAgICAgICAgICAgICAg
IHBvcE9uZUJsb2NrKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGluc2VydE5vZGUobik7CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJRF9DT01NRU5U
OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSURfSEVBRDoKLSAgICAgICAgICAg
IC8vICMjIyBhbGxsb3cgbm90IGhhdmluZyA8SFRNTD4gaW4gYXQgYWxsLCBhcyBwZXIgSFRNTCBz
cGVjCi0gICAgICAgICAgICBpZiAoIWN1cnJlbnQtPmlzRG9jdW1lbnROb2RlKCkgJiYgY3VycmVu
dC0+aWQoKSAhPSBJRF9IVE1MICkKKyAgICAgICAgfSBlbHNlIGlmIChoLT5oYXNMb2NhbE5hbWUo
SFRNTE5hbWVzOjpoZWFkKCkpKSB7CisgICAgICAgICAgICBpZiAoIWN1cnJlbnQtPmlzRG9jdW1l
bnROb2RlKCkgJiYgIWN1cnJlbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpodG1sKCkpKQogICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgLy8gV2UgY2FuIGRlYWwgd2l0aCBhIGJhc2UsIG1ldGEgYW5kIGxpbmsgZWxlbWVudCBpbiB0
aGUgYm9keSwgYnkganVzdCBhZGRpbmcgdGhlIGVsZW1lbnQgdG8gaGVhZC4KLSAgICAgICAgY2Fz
ZSBJRF9NRVRBOgotICAgICAgICBjYXNlIElEX0xJTks6Ci0gICAgICAgIGNhc2UgSURfQkFTRToK
LSAgICAgICAgICAgIGlmKCAhaGVhZCApCisgICAgICAgIH0gZWxzZSBpZiAoaC0+aGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6bWV0YSgpKSB8fCBoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpsaW5r
KCkpIHx8IGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmJhc2UoKSkpIHsKKyAgICAgICAgICAg
IGlmICghaGVhZCkKICAgICAgICAgICAgICAgICBjcmVhdGVIZWFkKCk7Ci0gICAgICAgICAgICBp
ZiggaGVhZCApIHsKLSAgICAgICAgICAgICAgICBpZiAoIGhlYWQtPmFkZENoaWxkKG4pICkgewot
I2lmIFNQRUVEX0RFQlVHIDwgMgotICAgICAgICAgICAgICAgICAgICBpZighbi0+YXR0YWNoZWQo
KSAmJiBIVE1MV2lkZ2V0KQorICAgICAgICAgICAgaWYgKGhlYWQpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoaGVhZC0+YWRkQ2hpbGQobikpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFuLT5h
dHRhY2hlZCgpICYmIEhUTUxXaWRnZXQpCiAgICAgICAgICAgICAgICAgICAgICAgICBuLT5hdHRh
Y2goKTsKLSNlbmRpZgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQkJfSBlbHNl
IHsKLQkJICAgIHJldHVybiBmYWxzZTsKLQkJfQorICAgICAgICAgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBJRF9IVE1MOgorICAgICAgICB9IGVsc2UgaWYgKGgtPmhh
c0xvY2FsTmFtZShIVE1MTmFtZXM6Omh0bWwoKSkpIHsKICAgICAgICAgICAgIGlmICghY3VycmVu
dC0+aXNEb2N1bWVudE5vZGUoKSApIHsKLQkJaWYgKCBkb2MoKS0+Zmlyc3RDaGlsZCgpLT5pZCgp
ID09IElEX0hUTUwpIHsKLQkJICAgIC8vIHdlIGhhdmUgYW5vdGhlciA8SFRNTD4gZWxlbWVudC4u
Li4gYXBwbHkgYXR0cmlidXRlcyB0byBleGlzdGluZyBvbmUKLQkJICAgIC8vIG1ha2Ugc3VyZSB3
ZSBkb24ndCBvdmVyd3JpdGUgYWxyZWFkeSBleGlzdGluZyBhdHRyaWJ1dGVzCi0JCSAgICBOYW1l
ZEF0dHJNYXBJbXBsICptYXAgPSBzdGF0aWNfY2FzdDxFbGVtZW50SW1wbCo+KG4pLT5hdHRyaWJ1
dGVzKHRydWUpOwotCQkgICAgTmFtZWRBdHRyTWFwSW1wbCAqYm1hcCA9IHN0YXRpY19jYXN0PEVs
ZW1lbnRJbXBsKj4oZG9jKCktPmZpcnN0Q2hpbGQoKSktPmF0dHJpYnV0ZXMoZmFsc2UpOwotCQkg
ICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7Ci0JCSAgICBmb3IgKHVuc2lnbmVkIGxvbmcgbCA9IDA7
IG1hcCAmJiBsIDwgbWFwLT5sZW5ndGgoKTsgKytsKSB7Ci0JCQlBdHRyaWJ1dGVJbXBsKiBpdCA9
IG1hcC0+YXR0cmlidXRlSXRlbShsKTsKLQkJCWNoYW5nZWQgPSAhYm1hcC0+Z2V0QXR0cmlidXRl
SXRlbShpdC0+aWQoKSk7Ci0JCQlibWFwLT5pbnNlcnRBdHRyaWJ1dGUoaXQtPmNsb25lKGZhbHNl
KSk7Ci0JCSAgICB9Ci0JCSAgICBpZiAoIGNoYW5nZWQgKQotCQkJZG9jKCktPnJlY2FsY1N0eWxl
KCBOb2RlSW1wbDo6SW5oZXJpdCApOwotCQl9CisgICAgICAgICAgICAgICAgaWYgKGRvYygpLT5m
aXJzdENoaWxkKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpodG1sKCkpKSB7CisgICAgICAgICAg
ICAgICAgICAgIC8vIHdlIGhhdmUgYW5vdGhlciA8SFRNTD4gZWxlbWVudC4uLi4gYXBwbHkgYXR0
cmlidXRlcyB0byBleGlzdGluZyBvbmUKKyAgICAgICAgICAgICAgICAgICAgLy8gbWFrZSBzdXJl
IHdlIGRvbid0IG92ZXJ3cml0ZSBhbHJlYWR5IGV4aXN0aW5nIGF0dHJpYnV0ZXMKKyAgICAgICAg
ICAgICAgICAgICAgTmFtZWRBdHRyTWFwSW1wbCAqbWFwID0gc3RhdGljX2Nhc3Q8RWxlbWVudElt
cGwqPihuKS0+YXR0cmlidXRlcyh0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgTmFtZWRBdHRy
TWFwSW1wbCAqYm1hcCA9IHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsKj4oZG9jKCktPmZpcnN0Q2hp
bGQoKSktPmF0dHJpYnV0ZXMoZmFsc2UpOworICAgICAgICAgICAgICAgICAgICBib29sIGNoYW5n
ZWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBsb25nIGwgPSAw
OyBtYXAgJiYgbCA8IG1hcC0+bGVuZ3RoKCk7ICsrbCkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgQXR0cmlidXRlSW1wbCogaXQgPSBtYXAtPmF0dHJpYnV0ZUl0ZW0obCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBjaGFuZ2VkID0gIWJtYXAtPmdldEF0dHJpYnV0ZUl0ZW0oaXQtPmlkKCkp
OworICAgICAgICAgICAgICAgICAgICAgICAgYm1hcC0+aW5zZXJ0QXR0cmlidXRlKGl0LT5jbG9u
ZShmYWxzZSkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlm
IChjaGFuZ2VkKQorICAgICAgICAgICAgICAgICAgICAgICAgZG9jKCktPnJlY2FsY1N0eWxlKE5v
ZGVJbXBsOjpJbmhlcml0KTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotCSAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJRF9U
SVRMRToKLSAgICAgICAgY2FzZSBJRF9TVFlMRToKLSAgICAgICAgICAgIGlmICggIWhlYWQgKQor
ICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFtZShIVE1MTmFt
ZXM6OnRpdGxlKCkpIHx8IGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnN0eWxlKCkpKSB7Cisg
ICAgICAgICAgICBpZiAoIWhlYWQpCiAgICAgICAgICAgICAgICAgY3JlYXRlSGVhZCgpOwotICAg
ICAgICAgICAgaWYgKCBoZWFkICkgeworICAgICAgICAgICAgaWYgKGhlYWQpIHsKICAgICAgICAg
ICAgICAgICBET006Ok5vZGVJbXBsICpuZXdOb2RlID0gaGVhZC0+YWRkQ2hpbGQobik7Ci0gICAg
ICAgICAgICAgICAgaWYgKCBuZXdOb2RlICkgewotICAgICAgICAgICAgICAgICAgICBwdXNoQmxv
Y2soaWQsIHRhZ1ByaW9yaXR5KGlkKSk7CisgICAgICAgICAgICAgICAgaWYgKG5ld05vZGUpIHsK
KyAgICAgICAgICAgICAgICAgICAgcHVzaEJsb2NrKGxvY2FsTmFtZSwgdGFnUHJpb3JpdHkpOwog
ICAgICAgICAgICAgICAgICAgICBzZXRDdXJyZW50KG5ld05vZGUpOwotI2lmIFNQRUVEX0RFQlVH
IDwgMgotCQkgICAgaWYoIW4tPmF0dGFjaGVkKCkgJiYgSFRNTFdpZGdldCkKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKCFuLT5hdHRhY2hlZCgpICYmIEhUTUxXaWRnZXQpCiAgICAgICAgICAgICAg
ICAgICAgICAgICBuLT5hdHRhY2goKTsKLSNlbmRpZgogICAgICAgICAgICAgICAgIH0gZWxzZSB7
Ci0jaWZkZWYgUEFSU0VSX0RFQlVHCi0gICAgICAgICAgICAgICAgICAgIGtkRGVidWcoIDYwMzUg
KSA8PCAiYWRkaW5nIHN0eWxlIGJlZm9yZSB0byBib2R5IGZhaWxlZCEhISEiIDw8IGVuZGw7Ci0j
ZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgZGlzY2FyZF91bnRpbCA9IElEX1NUWUxFICsgSURf
Q0xPU0VfVEFHOworICAgICAgICAgICAgICAgICAgICBzZXRTa2lwTW9kZShIVE1MTmFtZXM6OnN0
eWxlKCkpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfSBlbHNlIGlm
KGluQm9keSkgewotICAgICAgICAgICAgICAgIGRpc2NhcmRfdW50aWwgPSBJRF9TVFlMRSArIElE
X0NMT1NFX1RBRzsKKyAgICAgICAgICAgICAgICBzZXRTa2lwTW9kZShIVE1MTmFtZXM6OnN0eWxl
KCkpOwogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgLy8gU0NSSVBUIGFuZCBPQkpFQ1QgYXJlIGFsbG93
ZWQgaW4gdGhlIGJvZHkuCi0gICAgICAgIGNhc2UgSURfQk9EWToKLSAgICAgICAgICAgIGlmKGlu
Qm9keSAmJiBkb2MoKS0+Ym9keSgpKSB7CisgICAgICAgIH0gZWxzZSBpZiAoaC0+aGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6Ym9keSgpKSkgeworICAgICAgICAgICAgaWYgKGluQm9keSAmJiBkb2Mo
KS0+Ym9keSgpKSB7CiAgICAgICAgICAgICAgICAgLy8gd2UgaGF2ZSBhbm90aGVyIDxCT0RZPiBl
bGVtZW50Li4uLiBhcHBseSBhdHRyaWJ1dGVzIHRvIGV4aXN0aW5nIG9uZQogICAgICAgICAgICAg
ICAgIC8vIG1ha2Ugc3VyZSB3ZSBkb24ndCBvdmVyd3JpdGUgYWxyZWFkeSBleGlzdGluZyBhdHRy
aWJ1dGVzCiAgICAgICAgICAgICAgICAgLy8gc29tZSBzaXRlcyB1c2UgPGJvZHkgYmdjb2xvcj1y
aWdodGNvbG9yPi4uLjxib2R5IGJnY29sb3I9d3Jvbmdjb2xvcj4KQEAgLTQ0OSw2NjEgKzM5MCw1
ODcgQEAgYm9vbCBLSFRNTFBhcnNlcjo6aW5zZXJ0Tm9kZShOb2RlSW1wbCAqbgogICAgICAgICAg
ICAgICAgICAgICBjaGFuZ2VkID0gIWJtYXAtPmdldEF0dHJpYnV0ZUl0ZW0oaXQtPmlkKCkpOwog
ICAgICAgICAgICAgICAgICAgICBibWFwLT5pbnNlcnRBdHRyaWJ1dGUoaXQtPmNsb25lKGZhbHNl
KSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICggY2hhbmdlZCApCi0g
ICAgICAgICAgICAgICAgICAgIGRvYygpLT5yZWNhbGNTdHlsZSggTm9kZUltcGw6OkluaGVyaXQg
KTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoIGN1cnJlbnQtPmlzRG9jdW1lbnROb2RlKCkgKQot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIC8vIHRoZSBmb2xsb3dpbmcgaXMgYSBoYWNrIHRv
IG1vdmUgbm9uIHJlbmRlcmVkIGVsZW1lbnRzCi0gICAgICAgICAgICAvLyBvdXRzaWRlIG9mIHRh
Ymxlcy4KLSAgICAgICAgICAgIC8vIG5lZWRlZCBmb3IgYnJva2VuIGNvbnN0cnVjdHMgbGlrZSA8
dGFibGU+PGZvcm0gLi4uPjx0cj4uLi4uCi0gICAgICAgIGNhc2UgSURfSU5QVVQ6Ci0gICAgICAg
IHsKLSAgICAgICAgICAgIEVsZW1lbnRJbXBsICplID0gc3RhdGljX2Nhc3Q8RWxlbWVudEltcGwg
Kj4obik7Ci0gICAgICAgICAgICBET01TdHJpbmcgdHlwZSA9IGUtPmdldEF0dHJpYnV0ZShBVFRS
X1RZUEUpOwotCi0gICAgICAgICAgICBpZiAoIHN0cmNhc2VjbXAoIHR5cGUsICJoaWRkZW4iICkg
PT0gMCAmJiBmb3JtKSB7CisgICAgICAgICAgICAgICAgaWYgKGNoYW5nZWQpCisgICAgICAgICAg
ICAgICAgICAgIGRvYygpLT5yZWNhbGNTdHlsZShOb2RlSW1wbDo6SW5oZXJpdCk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBp
ZiAoIWN1cnJlbnQtPmlzRG9jdW1lbnROb2RlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmlucHV0
KCkpKSB7CisgICAgICAgICAgICBET01TdHJpbmcgdHlwZSA9IGgtPmdldEF0dHJpYnV0ZShBVFRS
X1RZUEUpOworICAgICAgICAgICAgaWYgKHN0cmNhc2VjbXAodHlwZSwgImhpZGRlbiIpID09IDAg
JiYgZm9ybSkgewogICAgICAgICAgICAgICAgIGZvcm0tPmFkZENoaWxkKG4pOwotI2lmIFNQRUVE
X0RFQlVHIDwgMgotICAgICAgICAgICAgICAgIGlmKCFuLT5hdHRhY2hlZCgpICYmIEhUTUxXaWRn
ZXQpCisgICAgICAgICAgICAgICAgaWYgKCFuLT5hdHRhY2hlZCgpICYmIEhUTUxXaWRnZXQpCiAg
ICAgICAgICAgICAgICAgICAgIG4tPmF0dGFjaCgpOwotI2VuZGlmCiAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgICBjYXNlIElEX1RFWFQ6Ci0gICAgICAgICAgICAvLyBpZ25vcmUgdGV4dCBpbnNp
ZGUgdGhlIGZvbGxvd2luZyBlbGVtZW50cy4KLSAgICAgICAgICAgIHN3aXRjaChjdXJyZW50LT5p
ZCgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgY2FzZSBJRF9TRUxFQ1Q6Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
ICAgICA7Ci0gICAgICAgICAgICAgICAgLy8gZmFsbCB0aHJvdWdoISEKLSAgICAgICAgICAgIH07
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJRF9ERDoKLSAgICAgICAgY2FzZSBJ
RF9EVDoKKyAgICAgICAgfSBlbHNlIGlmIChoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpkZCgp
KSB8fCBoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpkdCgpKSkgewogICAgICAgICAgICAgZSA9
IG5ldyBIVE1MRExpc3RFbGVtZW50SW1wbChkb2N1bWVudCk7Ci0gICAgICAgICAgICBpZiAoIGlu
c2VydE5vZGUoZSkgKSB7CisgICAgICAgICAgICBpZiAoaW5zZXJ0Tm9kZShlKSkgewogICAgICAg
ICAgICAgICAgIGluc2VydE5vZGUobik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJRF9BUkVBOgot
ICAgICAgICB7Ci0gICAgICAgICAgICBpZihtYXApCi0gICAgICAgICAgICB7CisgICAgICAgIH0g
ZWxzZSBpZiAoaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6YXJlYSgpKSkgeworICAgICAgICAg
ICAgaWYgKG1hcCkgewogICAgICAgICAgICAgICAgIG1hcC0+YWRkQ2hpbGQobik7Ci0jaWYgU1BF
RURfREVCVUcgPCAyCi0gICAgICAgICAgICAgICAgaWYoIW4tPmF0dGFjaGVkKCkgJiYgSFRNTFdp
ZGdldCkKKyAgICAgICAgICAgICAgICBpZiAoIW4tPmF0dGFjaGVkKCkgJiYgSFRNTFdpZGdldCkK
ICAgICAgICAgICAgICAgICAgICAgbi0+YXR0YWNoKCk7Ci0jZW5kaWYKICAgICAgICAgICAgICAg
ICBoYW5kbGVkID0gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgfQotICAgICAgICBjYXNlIElEX0NBUFRJT046IHsKLSAgICAgICAgICAgIHN3aXRjaCAoY3Vy
cmVudC0+aWQoKSkgewotICAgICAgICAgICAgICAgIGNhc2UgSURfVEhFQUQ6Ci0gICAgICAgICAg
ICAgICAgY2FzZSBJRF9UQk9EWToKLSAgICAgICAgICAgICAgICBjYXNlIElEX1RGT09UOgotICAg
ICAgICAgICAgICAgIGNhc2UgSURfVFI6Ci0gICAgICAgICAgICAgICAgY2FzZSBJRF9USDoKLSAg
ICAgICAgICAgICAgICBjYXNlIElEX1REOiB7Ci0gICAgICAgICAgICAgICAgICAgIE5vZGVJbXBs
KiB0c2VjdGlvbiA9IGN1cnJlbnQ7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50LT5p
ZCgpID09IElEX1RSKQotICAgICAgICAgICAgICAgICAgICAgICAgdHNlY3Rpb24gPSBjdXJyZW50
LT5wYXJlbnQoKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY3VycmVudC0+aWQoKSA9
PSBJRF9URCB8fCBjdXJyZW50LT5pZCgpID09IElEX1RIKQotICAgICAgICAgICAgICAgICAgICAg
ICAgdHNlY3Rpb24gPSBjdXJyZW50LT5wYXJlbnQoKS0+cGFyZW50KCk7Ci0gICAgICAgICAgICAg
ICAgICAgIE5vZGVJbXBsKiB0YWJsZSA9IHRzZWN0aW9uLT5wYXJlbnQoKTsKLSAgICAgICAgICAg
ICAgICAgICAgaW50IGV4Y2VwdGlvbmNvZGUgPSAwOwotICAgICAgICAgICAgICAgICAgICB0YWJs
ZS0+aW5zZXJ0QmVmb3JlKG4sIHRzZWN0aW9uLCBleGNlcHRpb25jb2RlKTsKLSAgICAgICAgICAg
ICAgICAgICAgcHVzaEJsb2NrKGlkLCB0YWdQcmlvcml0eShpZCkpOwotICAgICAgICAgICAgICAg
ICAgICBzZXRDdXJyZW50KG4pOwotICAgICAgICAgICAgICAgICAgICBpblN0cmF5VGFibGVDb250
ZW50Kys7Ci0gICAgICAgICAgICAgICAgICAgIGJsb2NrU3RhY2stPnN0cmF5VGFibGVDb250ZW50
ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmNhcHRpb24o
KSkpIHsKKyAgICAgICAgICAgIGlmIChpc1RhYmxlUGFydChjdXJyZW50KSkgeworICAgICAgICAg
ICAgICAgIE5vZGVJbXBsKiB0c2VjdGlvbiA9IGN1cnJlbnQ7CisgICAgICAgICAgICAgICAgaWYg
KGN1cnJlbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0cigpKSkKKyAgICAgICAgICAgICAgICAg
ICAgdHNlY3Rpb24gPSBjdXJyZW50LT5wYXJlbnQoKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlm
IChjdXJyZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGQoKSkgfHwgY3VycmVudC0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OnRoKCkpKQorICAgICAgICAgICAgICAgICAgICB0c2VjdGlvbiA9IGN1
cnJlbnQtPnBhcmVudCgpLT5wYXJlbnQoKTsKKyAgICAgICAgICAgICAgICBOb2RlSW1wbCogdGFi
bGUgPSB0c2VjdGlvbi0+cGFyZW50KCk7CisgICAgICAgICAgICAgICAgaW50IGV4Y2VwdGlvbmNv
ZGUgPSAwOworICAgICAgICAgICAgICAgIHRhYmxlLT5pbnNlcnRCZWZvcmUobiwgdHNlY3Rpb24s
IGV4Y2VwdGlvbmNvZGUpOworICAgICAgICAgICAgICAgIHB1c2hCbG9jayhsb2NhbE5hbWUsIHRh
Z1ByaW9yaXR5KTsKKyAgICAgICAgICAgICAgICBzZXRDdXJyZW50KG4pOworICAgICAgICAgICAg
ICAgIGluU3RyYXlUYWJsZUNvbnRlbnQrKzsKKyAgICAgICAgICAgICAgICBibG9ja1N0YWNrLT5z
dHJheVRhYmxlQ29udGVudCA9IHRydWU7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNl
IElEX1RIRUFEOgotICAgICAgICBjYXNlIElEX1RCT0RZOgotICAgICAgICBjYXNlIElEX1RGT09U
OgotICAgICAgICBjYXNlIElEX0NPTEdST1VQOiB7Ci0gICAgICAgICAgICBpZiAoaXNUYWJsZVJl
bGF0ZWRUYWcoY3VycmVudC0+aWQoKSkpIHsKLSAgICAgICAgICAgICAgICB3aGlsZSAoYmxvY2tT
dGFjayAmJiBjdXJyZW50LT5pZCgpICE9IElEX1RBQkxFICYmIGlzVGFibGVSZWxhdGVkVGFnKGN1
cnJlbnQtPmlkKCkpKQorICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFtZShIVE1MTmFt
ZXM6OnRoZWFkKCkpIHx8IGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnRib2R5KCkpIHx8Cisg
ICAgICAgICAgICAgICAgICAgaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dGZvb3QoKSkgfHwg
aC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6Y29sZ3JvdXAoKSkpIHsKKyAgICAgICAgICAgIGlm
IChpc1RhYmxlUmVsYXRlZChjdXJyZW50KSkgeworICAgICAgICAgICAgICAgIHdoaWxlIChibG9j
a1N0YWNrICYmIGlzVGFibGVQYXJ0KGN1cnJlbnQpKQogICAgICAgICAgICAgICAgICAgICBwb3BP
bmVCbG9jaygpOwogICAgICAgICAgICAgICAgIHJldHVybiBpbnNlcnROb2RlKG4pOwogICAgICAg
ICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotCi0gICAgICAgIC8vIHN3aXRjaCBvbiB0aGUgY3VycmVudGx5IGFjdGl2ZSBl
bGVtZW50Ci0gICAgICAgIHN3aXRjaChjdXJyZW50LT5pZCgpKQotICAgICAgICB7Ci0gICAgICAg
IGNhc2UgSURfSFRNTDoKLSAgICAgICAgICAgIHN3aXRjaChpZCkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgIGNhc2UgSURfU0NSSVBUOgotICAgICAgICAgICAgY2FzZSBJRF9TVFlMRToKLSAg
ICAgICAgICAgIGNhc2UgSURfTUVUQToKLSAgICAgICAgICAgIGNhc2UgSURfTElOSzoKLSAgICAg
ICAgICAgIGNhc2UgSURfT0JKRUNUOgotICAgICAgICAgICAgY2FzZSBJRF9FTUJFRDoKLSAgICAg
ICAgICAgIGNhc2UgSURfVElUTEU6Ci0gICAgICAgICAgICBjYXNlIElEX0lTSU5ERVg6Ci0gICAg
ICAgICAgICBjYXNlIElEX0JBU0U6Ci0gICAgICAgICAgICAgICAgaWYoIWhlYWQpIHsKKyAgICB9
CisgICAgCisgICAgLy8gMi4gTmV4dCB3ZSBleGFtaW5lIG91ciBjdXJyZW50bHkgYWN0aXZlIGVs
ZW1lbnQgdG8gZG8gc29tZSBmdXJ0aGVyIGVycm9yIGhhbmRsaW5nLgorICAgIGlmIChjdXJyZW50
LT5pc0hUTUxFbGVtZW50KCkpIHsKKyAgICAgICAgSFRNTEVsZW1lbnRJbXBsKiBoID0gc3RhdGlj
X2Nhc3Q8SFRNTEVsZW1lbnRJbXBsKj4oY3VycmVudCk7CisgICAgICAgIGNvbnN0IEF0b21pY1N0
cmluZyYgY3VycmVudFRhZ05hbWUgPSBjdXJyZW50LT5sb2NhbE5hbWUoKTsKKyAgICAgICAgaWYg
KGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Omh0bWwoKSkpIHsKKyAgICAgICAgICAgIEhUTUxF
bGVtZW50SW1wbCogZWx0ID0gbi0+aXNIVE1MRWxlbWVudCgpID8gc3RhdGljX2Nhc3Q8SFRNTEVs
ZW1lbnRJbXBsKj4obikgOiAwOworICAgICAgICAgICAgaWYgKGVsdCAmJiAoZWx0LT5oYXNMb2Nh
bE5hbWUoSFRNTE5hbWVzOjpzY3JpcHQoKSkgfHwgZWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVz
OjpzdHlsZSgpKSB8fAorICAgICAgICAgICAgICAgIGVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1l
czo6bWV0YSgpKSB8fCBlbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmxpbmsoKSkgfHwKKyAg
ICAgICAgICAgICAgICBlbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9iamVjdCgpKSB8fCBl
bHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmVtYmVkKCkpIHx8CisgICAgICAgICAgICAgICAg
ZWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0aXRsZSgpKSB8fCBlbHQtPmhhc0xvY2FsTmFt
ZShIVE1MTmFtZXM6OmlzaW5kZXgoKSkgfHwKKyAgICAgICAgICAgICAgICBlbHQtPmhhc0xvY2Fs
TmFtZShIVE1MTmFtZXM6OmJhc2UoKSkpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFoZWFkKSB7
CiAgICAgICAgICAgICAgICAgICAgIGhlYWQgPSBuZXcgSFRNTEhlYWRFbGVtZW50SW1wbChkb2N1
bWVudCk7CiAgICAgICAgICAgICAgICAgICAgIGUgPSBoZWFkOwogICAgICAgICAgICAgICAgICAg
ICBpbnNlcnROb2RlKGUpOwogICAgICAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNl
IElEX1RFWFQ6IHsKLSAgICAgICAgICAgICAgICBUZXh0SW1wbCAqdCA9IHN0YXRpY19jYXN0PFRl
eHRJbXBsICo+KG4pOwotICAgICAgICAgICAgICAgIGlmICh0LT5jb250YWluc09ubHlXaGl0ZXNw
YWNlKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAg
ICAvKiBGYWxsIHRocm91Z2ggdG8gZGVmYXVsdCAqLworICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBpZiAobi0+aXNUZXh0Tm9kZSgpKSB7CisgICAgICAgICAgICAgICAgICAg
IFRleHRJbXBsICp0ID0gc3RhdGljX2Nhc3Q8VGV4dEltcGwgKj4obik7CisgICAgICAgICAgICAg
ICAgICAgIGlmICh0LT5jb250YWluc09ubHlXaGl0ZXNwYWNlKCkpCisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisJCQkJfQorCQkJCWlmICghaGF2ZUZyYW1lU2V0KSB7CisJ
CQkJCWUgPSBuZXcgSFRNTEJvZHlFbGVtZW50SW1wbChkb2N1bWVudCk7CisJCQkJCXN0YXJ0Qm9k
eSgpOworCQkJCQlpbnNlcnROb2RlKGUpOworCQkJCQloYW5kbGVkID0gdHJ1ZTsKKwkJCQl9CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGlmICgg
aGF2ZUZyYW1lU2V0ICkgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZSA9IG5ldyBIVE1MQm9keUVs
ZW1lbnRJbXBsKGRvY3VtZW50KTsKLSAgICAgICAgICAgICAgICBzdGFydEJvZHkoKTsKLSAgICAg
ICAgICAgICAgICBpbnNlcnROb2RlKGUpOwotICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVl
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgSURfSEVBRDoKLSAgICAgICAgICAgIC8vIHdlIGNhbiBnZXQgaGVy
ZSBvbmx5IGlmIHRoZSBlbGVtZW50IGlzIG5vdCBhbGxvd2VkIGluIGhlYWQuCi0gICAgICAgICAg
ICBpZiAoaWQgPT0gSURfSFRNTCkKKyAgICAgICAgfSBlbHNlIGlmIChoLT5oYXNMb2NhbE5hbWUo
SFRNTE5hbWVzOjpoZWFkKCkpKSB7CisgICAgICAgICAgICBpZiAobi0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6Omh0bWwoKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAg
ICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGUgYm9keSBzdGFydHMg
aGVyZS4uLgotICAgICAgICAgICAgICAgIGlmICggaGF2ZUZyYW1lU2V0ICkgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgcG9wQmxvY2soSURfSEVBRCk7Ci0gICAgICAgICAgICAgICAgZSA9IG5ldyBI
VE1MQm9keUVsZW1lbnRJbXBsKGRvY3VtZW50KTsKLSAgICAgICAgICAgICAgICBzdGFydEJvZHko
KTsKLSAgICAgICAgICAgICAgICBpbnNlcnROb2RlKGUpOwotICAgICAgICAgICAgICAgIGhhbmRs
ZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIGlmICghaGF2ZUZyYW1lU2V0KSB7CisgICAgICAg
ICAgICAgICAgICAgIHBvcEJsb2NrKGN1cnJlbnRUYWdOYW1lKTsKKyAgICAgICAgICAgICAgICAg
ICAgZSA9IG5ldyBIVE1MQm9keUVsZW1lbnRJbXBsKGRvY3VtZW50KTsKKyAgICAgICAgICAgICAg
ICAgICAgc3RhcnRCb2R5KCk7CisgICAgICAgICAgICAgICAgICAgIGluc2VydE5vZGUoZSk7Cisg
ICAgICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElEX0JPRFk6Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJRF9DQVBUSU9OOgorICAgICAgICB9IGVs
c2UgaWYgKGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmNhcHRpb24oKSkpIHsKICAgICAgICAg
ICAgIC8vIElsbGVnYWwgY29udGVudCBpbiBhIGNhcHRpb24uIENsb3NlIHRoZSBjYXB0aW9uIGFu
ZCB0cnkgYWdhaW4uCi0gICAgICAgICAgICBwb3BCbG9jayhJRF9DQVBUSU9OKTsKLSAgICAgICAg
ICAgIHN3aXRjaCggaWQgKSB7Ci0gICAgICAgICAgICBjYXNlIElEX1RIRUFEOgotICAgICAgICAg
ICAgY2FzZSBJRF9URk9PVDoKLSAgICAgICAgICAgIGNhc2UgSURfVEJPRFk6Ci0gICAgICAgICAg
ICBjYXNlIElEX1RSOgotICAgICAgICAgICAgY2FzZSBJRF9URDoKLSAgICAgICAgICAgIGNhc2Ug
SURfVEg6CisgICAgICAgICAgICBwb3BCbG9jayhjdXJyZW50VGFnTmFtZSk7CisgICAgICAgICAg
ICBpZiAoaXNUYWJsZVBhcnQobikpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGluc2VydE5vZGUo
biwgZmxhdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBJRF9UQUJMRToKLSAgICAgICAgY2FzZSBJRF9USEVBRDoKLSAgICAgICAgY2FzZSBJRF9URk9P
VDoKLSAgICAgICAgY2FzZSBJRF9UQk9EWToKLSAgICAgICAgY2FzZSBJRF9UUjoKLSAgICAgICAg
ICAgIHN3aXRjaChpZCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIGNhc2UgSURfVEFCTEU6
Ci0gICAgICAgICAgICAgICAgcG9wQmxvY2soSURfVEFCTEUpOyAvLyBlbmQgdGhlIHRhYmxlCisg
ICAgICAgIH0gZWxzZSBpZiAoaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dGFibGUoKSkgfHwg
aC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dHIoKSkgfHwgaXNUYWJsZVNlY3Rpb24oaCkpIHsK
KyAgICAgICAgICAgIGlmIChuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGFibGUoKSkpIHsKKyAg
ICAgICAgICAgICAgICBwb3BCbG9jayhsb2NhbE5hbWUpOyAvLyBlbmQgdGhlIHRhYmxlCiAgICAg
ICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7ICAgICAgLy8gLi4uYW5kIHN0YXJ0IGEgbmV3IG9u
ZQotICAgICAgICAgICAgICAgIGJyZWFrOwotCSAgICBjYXNlIElEX1RFWFQ6Ci0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgVGV4dEltcGwgKnQgPSBzdGF0aWNfY2FzdDxUZXh0SW1wbCAq
PihuKTsKLSAgICAgICAgICAgICAgICBpZiAodC0+Y29udGFpbnNPbmx5V2hpdGVzcGFjZSgpKQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgRE9NU3Ry
aW5nSW1wbCAqaSA9IHQtPnN0cmluZygpOwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBw
b3MgPSAwOwotICAgICAgICAgICAgICAgIHdoaWxlKHBvcyA8IGktPmwgJiYgKCAqKGktPnMrcG9z
KSA9PSBRQ2hhcignICcpIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICooaS0+cytwb3MpID09IFFDaGFyKDB4YTApKSkgcG9zKys7Ci0gICAgICAgICAgICAgICAgaWYo
cG9zID09IGktPmwpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBOb2Rl
SW1wbCAqbm9kZSA9IGN1cnJlbnQ7Ci0gICAgICAgICAgICAgICAgTm9kZUltcGwgKnBhcmVudCA9
IG5vZGUtPnBhcmVudE5vZGUoKTsKLQotICAgICAgICAgICAgICAgIE5vZGVJbXBsICpwYXJlbnRw
YXJlbnQgPSBwYXJlbnQtPnBhcmVudE5vZGUoKTsKLQotICAgICAgICAgICAgICAgIGlmIChuLT5p
c1RleHROb2RlKCkgfHwKLSAgICAgICAgICAgICAgICAgICAgKCBub2RlLT5pZCgpID09IElEX1RS
ICYmCi0gICAgICAgICAgICAgICAgICAgICAoIHBhcmVudC0+aWQoKSA9PSBJRF9USEVBRCB8fAot
ICAgICAgICAgICAgICAgICAgICAgIHBhcmVudC0+aWQoKSA9PSBJRF9UQk9EWSB8fAotICAgICAg
ICAgICAgICAgICAgICAgIHBhcmVudC0+aWQoKSA9PSBJRF9URk9PVCApICYmIHBhcmVudHBhcmVu
dC0+aWQoKSA9PSBJRF9UQUJMRSApIHx8Ci0gICAgICAgICAgICAgICAgICAgICggIWNoZWNrQ2hp
bGQoSURfVFIsIGlkLCAhZG9jKCktPmluQ29tcGF0TW9kZSgpKSAmJiAoIG5vZGUtPmlkKCkgPT0g
SURfVEhFQUQgfHwgbm9kZS0+aWQoKSA9PSBJRF9UQk9EWSB8fCBub2RlLT5pZCgpID09IElEX1RG
T09UICkgJiYKLSAgICAgICAgICAgICAgICAgICAgIHBhcmVudC0+aWQoKSA9PSBJRF9UQUJMRSAp
KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbm9kZSA9IChub2RlLT5p
ZCgpID09IElEX1RBQkxFKSA/IG5vZGUgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICgo
bm9kZS0+aWQoKSA9PSBJRF9UUikgPyBwYXJlbnRwYXJlbnQgOiBwYXJlbnQpOworICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBib29sIHBvc3NpYmx5TW92ZVN0cmF5Q29udGVu
dCA9IHRydWU7CisgICAgICAgICAgICAgICAgaW50IGV4Y2VwdGlvbkNvZGUgPSAwOworICAgICAg
ICAgICAgICAgIGlmIChuLT5pc1RleHROb2RlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgVGV4
dEltcGwgKnQgPSBzdGF0aWNfY2FzdDxUZXh0SW1wbCAqPihuKTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKHQtPmNvbnRhaW5zT25seVdoaXRlc3BhY2UoKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgRE9NU3RyaW5nSW1wbCAqaSA9
IHQtPnN0cmluZygpOworICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcG9zID0gMDsK
KyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHBvcyA8IGktPmwgJiYgKCooaS0+cytwb3MpID09
IFFDaGFyKCcgJykgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICooaS0+cytwb3MpID09IFFDaGFyKDB4YTApKSkgcG9zKys7CisgICAgICAgICAgICAgICAgICAg
IGlmIChwb3MgPT0gaS0+bCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHBvc3NpYmx5TW92ZVN0
cmF5Q29udGVudCA9IGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBp
ZiAocG9zc2libHlNb3ZlU3RyYXlDb250ZW50KSB7CisgICAgICAgICAgICAgICAgICAgIE5vZGVJ
bXBsICpub2RlID0gY3VycmVudDsKICAgICAgICAgICAgICAgICAgICAgTm9kZUltcGwgKnBhcmVu
dCA9IG5vZGUtPnBhcmVudE5vZGUoKTsKLSAgICAgICAgICAgICAgICAgICAgaW50IGV4Y2VwdGlv
bmNvZGUgPSAwOwotICAgICAgICAgICAgICAgICAgICBwYXJlbnQtPmluc2VydEJlZm9yZSggbiwg
bm9kZSwgZXhjZXB0aW9uY29kZSApOwotICAgICAgICAgICAgICAgICAgICBpZiAoIGV4Y2VwdGlv
bmNvZGUgKSB7Ci0jaWZkZWYgUEFSU0VSX0RFQlVHCi0gICAgICAgICAgICAgICAgICAgICAgICBr
ZERlYnVnKCA2MDM1ICkgPDwgImFkZGluZyBjb250ZW50IGJlZm9yZSB0YWJsZSBmYWlsZWQhIiA8
PCBlbmRsOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgTm9kZUltcGwgKmdyYW5kcGFyZW50ID0gcGFyZW50LT5wYXJlbnROb2RlKCk7
CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKG4tPmlzVGV4dE5vZGUoKSB8fAorICAgICAgICAg
ICAgICAgICAgICAgICAgKGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnRyKCkpICYmCisgICAg
ICAgICAgICAgICAgICAgICAgICAgaXNUYWJsZVNlY3Rpb24ocGFyZW50KSAmJiBncmFuZHBhcmVu
dC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRhYmxlKCkpKSB8fAorICAgICAgICAgICAgICAgICAg
ICAgICAgICgoIW4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0ZCgpKSAmJiAhbi0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OnRoKCkpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAhbi0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OmZvcm0oKSkgJiYgIW4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpz
Y3JpcHQoKSkpICYmIGlzVGFibGVTZWN0aW9uKG5vZGUpICYmCisgICAgICAgICAgICAgICAgICAg
ICAgICAgcGFyZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGFibGUoKSkpKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBub2RlID0gKG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0YWJs
ZSgpKSkgPyBub2RlIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChub2RlLT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6dHIoKSkpID8gZ3JhbmRwYXJlbnQgOiBwYXJlbnQpOworICAg
ICAgICAgICAgICAgICAgICAgICAgTm9kZUltcGwgKnBhcmVudCA9IG5vZGUtPnBhcmVudE5vZGUo
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudC0+aW5zZXJ0QmVmb3JlKG4sIG5vZGUs
IGV4Y2VwdGlvbkNvZGUpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFleGNlcHRpb25D
b2RlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4tPmlzSFRNTEVsZW1lbnQo
KSAmJiB0YWdQcmlvcml0eSA+IDAgJiYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICFmbGF0ICYmIHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCo+KG4pLT5lbmRUYWdSZXF1aXJl
bWVudCgpICE9IFRhZ1N0YXR1c0ZvcmJpZGRlbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2hCbG9jayhsb2NhbE5hbWUs
IHRhZ1ByaW9yaXR5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q3VycmVu
dChuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5TdHJheVRhYmxlQ29udGVu
dCsrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9ja1N0YWNrLT5zdHJheVRh
YmxlQ29udGVudCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmIChuLT5p
c0VsZW1lbnROb2RlKCkgJiYgdGFnUHJpb3JpdHkoaWQpICE9IDAgJiYgCi0gICAgICAgICAgICAg
ICAgICAgICAgICAhZmxhdCAmJiBlbmRUYWdSZXF1aXJlbWVudChpZCkgIT0gRE9NOjpGT1JCSURE
RU4pCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHB1c2hC
bG9jayhpZCwgdGFnUHJpb3JpdHkoaWQpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldEN1
cnJlbnQobik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpblN0cmF5VGFibGVDb250ZW50Kys7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBibG9ja1N0YWNrLT5zdHJheVRhYmxlQ29udGVudCA9
IHRydWU7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFleGNlcHRpb25Db2RlKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRy
KCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUgPSBuZXcgSFRNTFRhYmxlQ2VsbEVs
ZW1lbnRJbXBsKEhUTUxOYW1lczo6dGQoKSwgZG9jdW1lbnQpOworICAgICAgICAgICAgICAgICAg
ICAgICAgZWxzZSBpZiAoY3VycmVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRhYmxlKCkpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUgPSBuZXcgSFRNTFRhYmxlU2VjdGlvbkVsZW1l
bnRJbXBsKEhUTUxOYW1lczo6dGJvZHkoKSwgZG9jdW1lbnQsIHRydWUpOyAvLyBpbXBsaWNpdCAK
KyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlID0gbmV3IEhUTUxUYWJsZVJvd0VsZW1lbnRJbXBsKGRvY3VtZW50KTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0Tm9kZShlKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgIGlmICggY3VycmVudC0+aWQoKSA9PSBJRF9UUiApCi0gICAgICAg
ICAgICAgICAgICAgIGUgPSBuZXcgSFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsKGRvY3VtZW50LCBJ
RF9URCk7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoIGN1cnJlbnQtPmlkKCkgPT0gSURfVEFC
TEUgKQotICAgICAgICAgICAgICAgICAgICBlID0gbmV3IEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50
SW1wbCggZG9jdW1lbnQsIElEX1RCT0RZLCB0cnVlIC8qIGltcGxpY2l0ICovICk7Ci0gICAgICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBlID0gbmV3IEhUTUxUYWJsZVJvd0Vs
ZW1lbnRJbXBsKCBkb2N1bWVudCApOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IGluc2VydE5vZGUoZSk7Ci0gICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9IC8vIGVuZCBkZWZhdWx0Ci0gICAgICAgICAg
ICB9IC8vIGVuZCBzd2l0Y2gKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElEX09C
SkVDVDoKLSAgICAgICAgICAgIGRpc2NhcmRfdW50aWwgPSBJRF9PQkpFQ1QgKyBJRF9DTE9TRV9U
QUc7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoaC0+aGFzTG9j
YWxOYW1lKEhUTUxOYW1lczo6b2JqZWN0KCkpKSB7CisgICAgICAgICAgICBzZXRTa2lwTW9kZShI
VE1MTmFtZXM6Om9iamVjdCgpKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
Y2FzZSBJRF9VTDoKLSAgICAgICAgY2FzZSBJRF9PTDoKLSAgICAgICAgY2FzZSBJRF9ESVI6Ci0g
ICAgICAgIGNhc2UgSURfTUVOVToKKyAgICAgICAgfSBlbHNlIGlmIChoLT5oYXNMb2NhbE5hbWUo
SFRNTE5hbWVzOjp1bCgpKSB8fCBoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvbCgpKSB8fAor
ICAgICAgICAgICAgICAgICBoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpkaXIoKSkgfHwgaC0+
aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6bWVudSgpKSkgewogICAgICAgICAgICAgZSA9IG5ldyBI
VE1MRGl2RWxlbWVudEltcGwoZG9jdW1lbnQpOwogICAgICAgICAgICAgaW5zZXJ0Tm9kZShlKTsK
ICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICBjYXNlIElEX0RMOgotICAgICAgICAgICAgICAgIHBvcEJsb2NrKElEX0RMKTsKLSAgICAg
ICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIGNhc2UgSURfRFQ6Ci0gICAgICAgICAgICAgICAgcG9wQmxvY2soSURfRFQpOwotICAg
ICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIElEX1NFTEVDVDoKLSAgICAgICAgICAgIGlmKCBuLT5pc0lubGluZSgpICkKKyAg
ICAgICAgfSBlbHNlIGlmIChoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpkbCgpKSB8fCBoLT5o
YXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpkdCgpKSkgeworICAgICAgICAgICAgcG9wQmxvY2soY3Vy
cmVudFRhZ05hbWUpOworICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7CisgICAgICAgIH0gZWxz
ZSBpZiAoaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6c2VsZWN0KCkpKSB7CisgICAgICAgICAg
ICBpZiAoaXNJbmxpbmUobikpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSURfUDoKLSAgICAgICAgY2FzZSBJRF9IMToKLSAg
ICAgICAgY2FzZSBJRF9IMjoKLSAgICAgICAgY2FzZSBJRF9IMzoKLSAgICAgICAgY2FzZSBJRF9I
NDoKLSAgICAgICAgY2FzZSBJRF9INToKLSAgICAgICAgY2FzZSBJRF9INjoKLSAgICAgICAgICAg
IGlmKCFuLT5pc0lubGluZSgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHBvcEJs
b2NrKGN1cnJlbnQtPmlkKCkpOworICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFtZShI
VE1MTmFtZXM6OnAoKSkgfHwgaXNIZWFkZXJUYWcoY3VycmVudFRhZ05hbWUpKSB7CisgICAgICAg
ICAgICBpZiAoIWlzSW5saW5lKG4pKSB7CisgICAgICAgICAgICAgICAgcG9wQmxvY2soY3VycmVu
dFRhZ05hbWUpOwogICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwogICAgICAgICAgICAg
fQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSURfT1BUSU9OOgotICAgICAgICBj
YXNlIElEX09QVEdST1VQOgotICAgICAgICAgICAgaWYgKGlkID09IElEX09QVEdST1VQKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIHBvcEJsb2NrKGN1cnJlbnQtPmlkKCkpOworICAg
ICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9wdGlvbigpKSB8fCBo
LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvcHRncm91cCgpKSkgeworICAgICAgICAgICAgaWYg
KGxvY2FsTmFtZSA9PSBIVE1MTmFtZXM6Om9wdGdyb3VwKCkpIHsKKyAgICAgICAgICAgICAgICBw
b3BCbG9jayhjdXJyZW50VGFnTmFtZSk7CiAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7
CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmKGlkID09IElEX1NFTEVDVCkKLSAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgIGVsc2UgaWYgKGxvY2FsTmFtZSA9PSBIVE1MTmFtZXM6
OnNlbGVjdCgpKSB7CiAgICAgICAgICAgICAgICAgLy8gSUUgdHJlYXRzIGEgbmVzdGVkIHNlbGVj
dCBhcyA8L3NlbGVjdD4uIExldCdzIGRvIHRoZSBzYW1lCi0gICAgICAgICAgICAgICAgcG9wQmxv
Y2soIElEX1NFTEVDVCApOwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IHBvcEJsb2NrKGxvY2FsTmFtZSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIC8vIGhlYWQgZWxlbWVudHMgaW4gdGhlIGJvZHkgc2hvdWxkIGJlIGlnbm9y
ZWQuCi0gICAgICAgIGNhc2UgSURfQUREUkVTUzoKLSAgICAgICAgICAgIHBvcEJsb2NrKElEX0FE
RFJFU1MpOworICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmFk
ZHJlc3MoKSkpIHsKKyAgICAgICAgICAgIHBvcEJsb2NrKGN1cnJlbnRUYWdOYW1lKTsKICAgICAg
ICAgICAgIGhhbmRsZWQgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
SURfQ09MR1JPVVA6Ci0gICAgICAgICAgICBpZiAoaWQgIT0gSURfVEVYVCkgewotICAgICAgICAg
ICAgICAgIHBvcEJsb2NrKElEX0NPTEdST1VQKTsKKyAgICAgICAgfSBlbHNlIGlmIChoLT5oYXNM
b2NhbE5hbWUoSFRNTE5hbWVzOjpjb2xncm91cCgpKSkgeworICAgICAgICAgICAgaWYgKCFuLT5p
c1RleHROb2RlKCkpIHsKKyAgICAgICAgICAgICAgICBwb3BCbG9jayhjdXJyZW50VGFnTmFtZSk7
CiAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJRF9GT05UOgotICAgICAgICAgICAgcG9wQmxvY2so
SURfRk9OVCk7CisgICAgICAgIH0gZWxzZSBpZiAoaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6
Zm9udCgpKSkgeworICAgICAgICAgICAgcG9wQmxvY2soY3VycmVudFRhZ05hbWUpOwogICAgICAg
ICAgICAgaGFuZGxlZCA9IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgIGlmKGN1cnJlbnQtPmlzRG9jdW1lbnROb2RlKCkpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgaWYoY3VycmVudC0+Zmlyc3RDaGlsZCgpID09IDApIHsKLSAg
ICAgICAgICAgICAgICAgICAgZSA9IG5ldyBIVE1MSHRtbEVsZW1lbnRJbXBsKGRvY3VtZW50KTsK
LSAgICAgICAgICAgICAgICAgICAgaW5zZXJ0Tm9kZShlKTsKLSAgICAgICAgICAgICAgICAgICAg
aGFuZGxlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgZWxzZSBpZihjdXJyZW50LT5pc0lubGluZSgpKQotICAgICAgICAgICAgeworICAgICAg
ICB9IGVsc2UgaWYgKCFoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpib2R5KCkpKSB7CisgICAg
ICAgICAgICBpZiAoaXNJbmxpbmUoY3VycmVudCkpIHsKICAgICAgICAgICAgICAgICBwb3BJbmxp
bmVCbG9ja3MoKTsKICAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKICAgICAgICAgICAg
IH0KICAgICAgICAgfQotCi0gICAgICAgIC8vIGlmIHdlIGNvdWxkbid0IGhhbmRsZSB0aGUgZXJy
b3IsIGp1c3QgcmV0aHJvdyB0aGUgZXhjZXB0aW9uLi4uCi0gICAgICAgIGlmKCFoYW5kbGVkKQot
ICAgICAgICB7Ci0gICAgICAgICAgICAvL2tkRGVidWcoIDYwMzUgKSA8PCAiRXhjZXB0aW9uIGhh
bmRsZXIgZmFpbGVkIGluIEhUTUxQQXJzZXI6Omluc2VydE5vZGUoKSIgPDwgZW5kbDsKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgZWxzZSBpZiAoY3VycmVudC0+aXNEb2N1
bWVudE5vZGUoKSkgeworICAgICAgICBpZiAoY3VycmVudC0+Zmlyc3RDaGlsZCgpID09IDApIHsK
KyAgICAgICAgICAgIGUgPSBuZXcgSFRNTEh0bWxFbGVtZW50SW1wbChkb2N1bWVudCk7CisgICAg
ICAgICAgICBpbnNlcnROb2RlKGUpOworICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7CiAgICAg
ICAgIH0KLQotICAgICAgICByZXR1cm4gaW5zZXJ0Tm9kZShuKTsKICAgICB9CisKKyAgICAvLyAz
LiBJZiB3ZSBjb3VsZG4ndCBoYW5kbGUgdGhlIGVycm9yLCBqdXN0IHJldHVybiBmYWxzZSBhbmQg
YXR0ZW1wdCB0byBlcnJvci1jb3JyZWN0IGFnYWluLgorICAgIGlmICghaGFuZGxlZCkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBpbnNlcnROb2RlKG4pOwogfQogCi1Ob2RlSW1w
bCAqS0hUTUxQYXJzZXI6OmdldEVsZW1lbnQoVG9rZW4qIHQpCit0eXBlZGVmIGJvb2wgKEhUTUxQ
YXJzZXI6OipDcmVhdGVFcnJvckNoZWNrRnVuYykoVG9rZW4qIHQsIE5vZGVJbXBsKiYpOwordHlw
ZWRlZiBIYXNoTWFwPERPTVN0cmluZ0ltcGwgKiwgQ3JlYXRlRXJyb3JDaGVja0Z1bmMsIFBvaW50
ZXJIYXNoPERPTVN0cmluZ0ltcGwgKj4gPiBGdW5jdGlvbk1hcDsKKworYm9vbCBIVE1MUGFyc2Vy
Ojp0ZXh0Q3JlYXRlRXJyb3JDaGVjayhUb2tlbiogdCwgTm9kZUltcGwqJiByZXN1bHQpCiB7Ci0g
ICAgc3dpdGNoICh0LT5pZCkKLSAgICB7Ci0gICAgY2FzZSBJRF9IRUFEOgotICAgICAgICBpZiAo
IWhlYWQgJiYgY3VycmVudC0+aWQoKSA9PSBJRF9IVE1MKSB7Ci0gICAgICAgICAgICBoZWFkID0g
bmV3IEhUTUxIZWFkRWxlbWVudEltcGwoZG9jdW1lbnQpOwotICAgICAgICAgICAgcmV0dXJuIGhl
YWQ7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgY2FzZSBJRF9CT0RZOgotICAg
ICAgICAvLyBib2R5IG5vIGxvbmdlciBhbGxvd2VkIGlmIHdlIGhhdmUgYSBmcmFtZXNldAotICAg
ICAgICBpZiAoaGF2ZUZyYW1lU2V0KQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHBv
cEJsb2NrKElEX0hFQUQpOwotICAgICAgICBzdGFydEJvZHkoKTsKLSAgICAgICAgcmV0dXJuIG5l
dyBIVE1MQm9keUVsZW1lbnRJbXBsKGRvY3VtZW50KTsKLQotLy8gZnJhbWVzCi0gICAgY2FzZSBJ
RF9GUkFNRVNFVDoKLSAgICAgICAgcG9wQmxvY2soSURfSEVBRCk7Ci0gICAgICAgIGlmIChpbkJv
ZHkgJiYgIWhhdmVGcmFtZVNldCAmJiAhaGF2ZUNvbnRlbnQpIHsKLSAgICAgICAgICAgIHBvcEJs
b2NrKElEX0JPRFkpOwotICAgICAgICAgICAgLy8gIyMjIGFjdHVhbGx5IGZvciBJRSBkb2N1bWVu
dC5ib2R5IHJldHVybnMgdGhlIG5vdyBoaWRkZW4gImJvZHkiIGVsZW1lbnQKLSAgICAgICAgICAg
IC8vIHdlIGNhbid0IGltcGxlbWVudCB0aGF0IGJlaGF2aW91ciBub3cgYmVjYXVzZSBpdCBjb3Vs
ZCBjYXVzZSB0b28gbWFueQotICAgICAgICAgICAgLy8gcmVncmVzc2lvbnMgYW5kIHRoZSBoZWFk
YWNoZXMgYXJlIG5vdCB3b3J0aCB0aGUgd29yayBhcyBsb25nIGFzIHRoZXJlIGlzCi0gICAgICAg
ICAgICAvLyBubyBzaXRlIGFjdHVhbGx5IHJlbHlpbmcgb24gdGhhdCBkZXRhaWwgKERpcmspCi0g
ICAgICAgICAgICBpZiAoZG9jKCktPmJvZHkoKSkKLSAgICAgICAgICAgICAgICBkb2MoKS0+Ym9k
eSgpLT5zZXRBdHRyaWJ1dGUoQVRUUl9TVFlMRSwgImRpc3BsYXk6bm9uZSIpOwotICAgICAgICAg
ICAgaW5Cb2R5ID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKChoYXZlQ29udGVudCB8
fCBoYXZlRnJhbWVTZXQpICYmIGN1cnJlbnQtPmlkKCkgPT0gSURfSFRNTCkKLSAgICAgICAgICAg
IHJldHVybiAwOwotICAgICAgICBoYXZlRnJhbWVTZXQgPSB0cnVlOwotICAgICAgICBzdGFydEJv
ZHkoKTsKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MRnJhbWVTZXRFbGVtZW50SW1wbChkb2N1bWVu
dCk7CisgICAgcmVzdWx0ID0gbmV3IFRleHRJbXBsKGRvY3VtZW50LCB0LT50ZXh0KTsKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgSFRNTFBhcnNlcjo6Y29tbWVudENyZWF0ZUVycm9yQ2hl
Y2soVG9rZW4qIHQsIE5vZGVJbXBsKiYgcmVzdWx0KQoreworICAgIGlmIChpbmNsdWRlc0NvbW1l
bnRzSW5ET00pCisgICAgICAgIHJlc3VsdCA9IG5ldyBDb21tZW50SW1wbChkb2N1bWVudCwgdC0+
dGV4dCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEhUTUxQYXJzZXI6OmhlYWRDcmVh
dGVFcnJvckNoZWNrKFRva2VuKiB0LCBOb2RlSW1wbComIHJlc3VsdCkKK3sKKyAgICByZXR1cm4g
KCFoZWFkIHx8IGN1cnJlbnQtPmxvY2FsTmFtZSgpID09IEhUTUxOYW1lczo6aHRtbCgpKTsKK30K
IAorYm9vbCBIVE1MUGFyc2VyOjpib2R5Q3JlYXRlRXJyb3JDaGVjayhUb2tlbiogdCwgTm9kZUlt
cGwqJiByZXN1bHQpCit7CisgICAgLy8gYm9keSBubyBsb25nZXIgYWxsb3dlZCBpZiB3ZSBoYXZl
IGEgZnJhbWVzZXQKKyAgICBpZiAoaGF2ZUZyYW1lU2V0KQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgcG9wQmxvY2soSFRNTE5hbWVzOjpoZWFkKCkpOworICAgIHN0YXJ0Qm9keSgpOworICAg
IHJldHVybiB0cnVlOworfQorCitib29sIEhUTUxQYXJzZXI6OmZyYW1lc2V0Q3JlYXRlRXJyb3JD
aGVjayhUb2tlbiogdCwgTm9kZUltcGwqJiByZXN1bHQpCit7CisgICAgcG9wQmxvY2soSFRNTE5h
bWVzOjpoZWFkKCkpOworICAgIGlmIChpbkJvZHkgJiYgIWhhdmVGcmFtZVNldCAmJiAhaGF2ZUNv
bnRlbnQpIHsKKyAgICAgICAgcG9wQmxvY2soSFRNTE5hbWVzOjpib2R5KCkpOworICAgICAgICAv
LyAjIyMgYWN0dWFsbHkgZm9yIElFIGRvY3VtZW50LmJvZHkgcmV0dXJucyB0aGUgbm93IGhpZGRl
biAiYm9keSIgZWxlbWVudAorICAgICAgICAvLyB3ZSBjYW4ndCBpbXBsZW1lbnQgdGhhdCBiZWhh
dmlvdXIgbm93IGJlY2F1c2UgaXQgY291bGQgY2F1c2UgdG9vIG1hbnkKKyAgICAgICAgLy8gcmVn
cmVzc2lvbnMgYW5kIHRoZSBoZWFkYWNoZXMgYXJlIG5vdCB3b3J0aCB0aGUgd29yayBhcyBsb25n
IGFzIHRoZXJlIGlzCisgICAgICAgIC8vIG5vIHNpdGUgYWN0dWFsbHkgcmVseWluZyBvbiB0aGF0
IGRldGFpbCAoRGlyaykKKyAgICAgICAgaWYgKGRvYygpLT5ib2R5KCkpCisgICAgICAgICAgICBk
b2MoKS0+Ym9keSgpLT5zZXRBdHRyaWJ1dGUoQVRUUl9TVFlMRSwgImRpc3BsYXk6bm9uZSIpOwor
ICAgICAgICBpbkJvZHkgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKChoYXZlQ29udGVudCB8fCBo
YXZlRnJhbWVTZXQpICYmIGN1cnJlbnQtPmxvY2FsTmFtZSgpID09IEhUTUxOYW1lczo6aHRtbCgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaGF2ZUZyYW1lU2V0ID0gdHJ1ZTsKKyAgICBz
dGFydEJvZHkoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBIVE1MUGFyc2VyOjppZnJh
bWVDcmVhdGVFcnJvckNoZWNrKFRva2VuKiB0LCBOb2RlSW1wbComIHJlc3VsdCkKK3sKICAgICAv
LyBhIGJpdCBvZiBhIHNwZWNpYWwgY2FzZSwgc2luY2UgdGhlIGZyYW1lIGlzIGlubGluZWQKLSAg
ICBjYXNlIElEX0lGUkFNRToKLSAgICAgICAgZGlzY2FyZF91bnRpbCA9IElEX0lGUkFNRSArIElE
X0NMT1NFX1RBRzsKLSAgICAgICAgYnJlYWs7Ci0KLS8vIGZvcm0gZWxlbWVudHMKLSAgICBjYXNl
IElEX0ZPUk06Ci0gICAgICAgIC8vIE9ubHkgY3JlYXRlIGEgbmV3IGZvcm0gaWYgd2UncmUgbm90
IGFscmVhZHkgaW5zaWRlIG9uZS4KLSAgICAgICAgLy8gVGhpcyBpcyBjb25zaXN0ZW50IHdpdGgg
b3RoZXIgYnJvd3NlcnMnIGJlaGF2aW9yLgotICAgICAgICBpZiAoZm9ybSkKLSAgICAgICAgICAg
IHJldHVybiAwOwotICAgICAgICBmb3JtID0gbmV3IEhUTUxGb3JtRWxlbWVudEltcGwoZG9jdW1l
bnQpOwotICAgICAgICByZXR1cm4gZm9ybTsKLSAgICBjYXNlIElEX0JVVFRPTjoKLSAgICAgICAg
cmV0dXJuIG5ldyBIVE1MQnV0dG9uRWxlbWVudEltcGwoZG9jdW1lbnQsIGZvcm0pOwotICAgIGNh
c2UgSURfRklFTERTRVQ6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTEZpZWxkU2V0RWxlbWVudElt
cGwoZG9jdW1lbnQsIGZvcm0pOwotICAgIGNhc2UgSURfSU5QVVQ6Ci0gICAgICAgIHJldHVybiBu
ZXcgSFRNTElucHV0RWxlbWVudEltcGwoZG9jdW1lbnQsIGZvcm0pOwotICAgIGNhc2UgSURfSVNJ
TkRFWDogewotICAgICAgICBOb2RlSW1wbCAqbiA9IGhhbmRsZUlzaW5kZXgodCk7Ci0gICAgICAg
IGlmICghaW5Cb2R5KSB7Ci0gICAgICAgICAgICBpZiAoaXNpbmRleCkKLSAgICAgICAgICAgICAg
ICBpc2luZGV4LT5kZXJlZigpOwotICAgICAgICAgICAgaXNpbmRleCA9IG47Ci0gICAgICAgICAg
ICBpc2luZGV4LT5yZWYoKTsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9CisgICAg
c2V0U2tpcE1vZGUoSFRNTE5hbWVzOjppZnJhbWUoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2Jvb2wgSFRNTFBhcnNlcjo6Zm9ybUNyZWF0ZUVycm9yQ2hlY2soVG9rZW4qIHQsIE5vZGVJbXBs
KiYgcmVzdWx0KQoreworICAgIC8vIE9ubHkgY3JlYXRlIGEgbmV3IGZvcm0gaWYgd2UncmUgbm90
IGFscmVhZHkgaW5zaWRlIG9uZS4KKyAgICAvLyBUaGlzIGlzIGNvbnNpc3RlbnQgd2l0aCBvdGhl
ciBicm93c2VycycgYmVoYXZpb3IuCisgICAgcmV0dXJuICFmb3JtOworfQorCitib29sIEhUTUxQ
YXJzZXI6OmlzaW5kZXhDcmVhdGVFcnJvckNoZWNrKFRva2VuKiB0LCBOb2RlSW1wbComIHJlc3Vs
dCkKK3sKKyAgICBOb2RlSW1wbCAqbiA9IGhhbmRsZUlzaW5kZXgodCk7CisgICAgaWYgKCFpbkJv
ZHkpIHsKKyAgICAgICAgaWYgKGlzaW5kZXgpCisgICAgICAgICAgICBpc2luZGV4LT5kZXJlZigp
OworICAgICAgICBpc2luZGV4ID0gbjsKKyAgICAgICAgaXNpbmRleC0+cmVmKCk7CisgICAgfSBl
bHNlIHsKICAgICAgICAgdC0+ZmxhdCA9IHRydWU7Ci0gICAgICAgIHJldHVybiBuOworICAgICAg
ICByZXN1bHQgPSBuOwogICAgIH0KLSAgICBjYXNlIElEX0tFWUdFTjoKLSAgICAgICAgcmV0dXJu
IG5ldyBIVE1MS2V5Z2VuRWxlbWVudEltcGwoZG9jdW1lbnQsIGZvcm0pOwotICAgIGNhc2UgSURf
TEVHRU5EOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxMZWdlbmRFbGVtZW50SW1wbChkb2N1bWVu
dCwgZm9ybSk7Ci0gICAgY2FzZSBJRF9PUFRHUk9VUDoKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1M
T3B0R3JvdXBFbGVtZW50SW1wbChkb2N1bWVudCwgZm9ybSk7Ci0gICAgY2FzZSBJRF9PUFRJT046
Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTE9wdGlvbkVsZW1lbnRJbXBsKGRvY3VtZW50LCBmb3Jt
KTsKLSAgICBjYXNlIElEX1NFTEVDVDoKLSAgICAgICAgaW5TZWxlY3QgPSB0cnVlOwotICAgICAg
ICByZXR1cm4gbmV3IEhUTUxTZWxlY3RFbGVtZW50SW1wbChkb2N1bWVudCwgZm9ybSk7Ci0gICAg
Y2FzZSBJRF9URVhUQVJFQToKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MVGV4dEFyZWFFbGVtZW50
SW1wbChkb2N1bWVudCwgZm9ybSk7Ci0KLS8vIGxpc3RzCi0gICAgY2FzZSBJRF9ERDoKLSAgICAg
ICAgcG9wQmxvY2soSURfRFQpOwotICAgICAgICBwb3BCbG9jayhJRF9ERCk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgSURfRFQ6Ci0gICAgICAgIHBvcEJsb2NrKElEX0REKTsKLSAgICAgICAg
cG9wQmxvY2soSURfRFQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIElEX0xJOgotICAgICAg
ICBwb3BCbG9jayhJRF9MSSk7Ci0gICAgICAgIGJyZWFrOwotCi0vLyBhbmNob3IKLSAgICBjYXNl
IElEX0E6Ci0gICAgICAgIC8vIE5ldmVyIGFsbG93IG5lc3RlZCA8YT5zLgotICAgICAgICBwb3BC
bG9jayhJRF9BKTsKLSAgICAgICAgYnJlYWs7Ci0KLS8vIGltYWdlcwotICAgIGNhc2UgSURfSU1H
OgotICAgICAgICByZXR1cm4gbmV3IEhUTUxJbWFnZUVsZW1lbnRJbXBsKGRvY3VtZW50LCBmb3Jt
KTsKLSAgICBjYXNlIElEX01BUDoKLSAgICAgICAgbWFwID0gbmV3IEhUTUxNYXBFbGVtZW50SW1w
bChkb2N1bWVudCk7Ci0gICAgICAgIHJldHVybiBtYXA7Ci0KLS8vIHRhYmxlcwotICAgIGNhc2Ug
SURfVFI6Ci0gICAgICAgIHBvcEJsb2NrKElEX1RSKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBJRF9URDoKLSAgICBjYXNlIElEX1RIOgotICAgICAgICBwb3BCbG9jayhJRF9USCk7Ci0gICAg
ICAgIHBvcEJsb2NrKElEX1REKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9UQk9EWToK
LSAgICBjYXNlIElEX1RIRUFEOgotICAgIGNhc2UgSURfVEZPT1Q6Ci0gICAgICAgIHBvcEJsb2Nr
KElEX1RIRUFEKTsKLSAgICAgICAgcG9wQmxvY2soSURfVEJPRFkpOwotICAgICAgICBwb3BCbG9j
ayhJRF9URk9PVCk7Ci0gICAgICAgIGJyZWFrOwotCi0vLyBlbGVtZW50cyB3aXRoIG5vIHNwZWNp
YWwgcmVwcmVzZW50YXRpb24gaW4gdGhlIERPTQotICAgIGNhc2UgSURfVFQ6Ci0gICAgY2FzZSBJ
RF9VOgotICAgIGNhc2UgSURfQjoKLSAgICBjYXNlIElEX0k6Ci0gICAgY2FzZSBJRF9TOgotICAg
IGNhc2UgSURfU1RSSUtFOgotICAgIGNhc2UgSURfQklHOgotICAgIGNhc2UgSURfU01BTEw6Ci0g
ICAgICAgIGlmICghYWxsb3dOZXN0ZWRSZWR1bmRhbnRUYWcodC0+aWQpKQotICAgICAgICAgICAg
cmV0dXJuIDA7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBJRF9OT0JSOgotICAgIGNhc2Ug
SURfV0JSOgotICAgICAgICBwb3BCbG9jayh0LT5pZCk7IC8vIERvbid0IGFsbG93IG5lc3RlZCA8
bm9icj4gb3IgPHdicj4KLSAgICAgICAgYnJlYWs7Ci0KLS8vIHRoZXNlIGFyZSBzcGVjaWFsLCBh
bmQgbm9ybWFsbHkgbm90IHJlbmRlcmVkCi0gICAgY2FzZSBJRF9OT0VNQkVEOgotICAgICAgICBk
aXNjYXJkX3VudGlsID0gSURfTk9FTUJFRCArIElEX0NMT1NFX1RBRzsKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgY2FzZSBJRF9OT0ZSQU1FUzoKLSAgICAgICAgZGlzY2FyZF91bnRpbCA9IElEX05P
RlJBTUVTICsgSURfQ0xPU0VfVEFHOwotICAgICAgICByZXR1cm4gMDsKLSAgICBjYXNlIElEX05P
U0NSSVBUOgotICAgICAgICBpZiAoSFRNTFdpZGdldCAmJiBIVE1MV2lkZ2V0LT5wYXJ0KCktPmpT
Y3JpcHRFbmFibGVkKCkpCi0gICAgICAgICAgICBkaXNjYXJkX3VudGlsID0gSURfTk9TQ1JJUFQg
KyBJRF9DTE9TRV9UQUc7Ci0gICAgICAgIHJldHVybiAwOwotICAgIGNhc2UgSURfTk9MQVlFUjoK
LSAgICAgICAgLy9kaXNjYXJkX3VudGlsID0gSURfTk9MQVlFUiArIElEX0NMT1NFX1RBRzsKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgY2FzZSBJRF9URVhUOgotICAgICAgICByZXR1cm4gbmV3IFRl
eHRJbXBsKGRvY3VtZW50LCB0LT50ZXh0KTsKLSAgICBjYXNlIElEX0NPTU1FTlQ6Ci0gICAgICAg
IGlmICghaW5jbHVkZXNDb21tZW50c0luRE9NKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
ICAgIGJyZWFrOwotCi0gICAgY2FzZSBJRF9TQ1JJUFQ6Ci0gICAgICAgIHsKLSAgICAgICAgICAg
IEhUTUxTY3JpcHRFbGVtZW50SW1wbCAqc2NyaXB0RWxlbWVudCA9IG5ldyBIVE1MU2NyaXB0RWxl
bWVudEltcGwoZG9jdW1lbnQpOwotICAgICAgICAgICAgc2NyaXB0RWxlbWVudC0+c2V0Q3JlYXRl
ZEJ5UGFyc2VyKHRydWUpOwotICAgICAgICAgICAgcmV0dXJuIHNjcmlwdEVsZW1lbnQ7Ci0gICAg
ICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgSFRNTFBhcnNlcjo6c2VsZWN0Q3Jl
YXRlRXJyb3JDaGVjayhUb2tlbiogdCwgTm9kZUltcGwqJiByZXN1bHQpCit7CisgICAgaW5TZWxl
Y3QgPSB0cnVlOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEhUTUxQYXJzZXI6OmRkQ3Jl
YXRlRXJyb3JDaGVjayhUb2tlbiogdCwgTm9kZUltcGwqJiByZXN1bHQpCit7CisgICAgcG9wQmxv
Y2soSFRNTE5hbWVzOjpkdCgpKTsKKyAgICBwb3BCbG9jayhIVE1MTmFtZXM6OmRkKCkpOworICAg
IHJldHVybiB0cnVlOworfQorCitib29sIEhUTUxQYXJzZXI6OmR0Q3JlYXRlRXJyb3JDaGVjayhU
b2tlbiogdCwgTm9kZUltcGwqJiByZXN1bHQpCit7CisgICAgcG9wQmxvY2soSFRNTE5hbWVzOjpk
ZCgpKTsKKyAgICBwb3BCbG9jayhIVE1MTmFtZXM6OmR0KCkpOworICAgIHJldHVybiB0cnVlOwor
fQorCitib29sIEhUTUxQYXJzZXI6Om5lc3RlZENyZWF0ZUVycm9yQ2hlY2soVG9rZW4qIHQsIE5v
ZGVJbXBsKiYgcmVzdWx0KQoreworICAgIHBvcEJsb2NrKHQtPnRhZ05hbWUpOworICAgIHJldHVy
biB0cnVlOworfQorCitib29sIEhUTUxQYXJzZXI6Om5lc3RlZFN0eWxlQ3JlYXRlRXJyb3JDaGVj
ayhUb2tlbiogdCwgTm9kZUltcGwqJiByZXN1bHQpCit7CisgICAgcmV0dXJuIGFsbG93TmVzdGVk
UmVkdW5kYW50VGFnKHQtPnRhZ05hbWUpOworfQorCitib29sIEhUTUxQYXJzZXI6OnRhYmxlQ2Vs
bENyZWF0ZUVycm9yQ2hlY2soVG9rZW4qIHQsIE5vZGVJbXBsKiYgcmVzdWx0KQoreworICAgIHBv
cEJsb2NrKEhUTUxOYW1lczo6dGQoKSk7CisgICAgcG9wQmxvY2soSFRNTE5hbWVzOjp0aCgpKTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBIVE1MUGFyc2VyOjp0YWJsZVNlY3Rpb25DcmVh
dGVFcnJvckNoZWNrKFRva2VuKiB0LCBOb2RlSW1wbComIHJlc3VsdCkKK3sKKyAgICBwb3BCbG9j
ayhIVE1MTmFtZXM6OnRoZWFkKCkpOworICAgIHBvcEJsb2NrKEhUTUxOYW1lczo6dGJvZHkoKSk7
CisgICAgcG9wQmxvY2soSFRNTE5hbWVzOjp0Zm9vdCgpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBIVE1MUGFyc2VyOjpub2VtYmVkQ3JlYXRlRXJyb3JDaGVjayhUb2tlbiogdCwgTm9k
ZUltcGwqJiByZXN1bHQpCit7CisgICAgc2V0U2tpcE1vZGUoSFRNTE5hbWVzOjpub2VtYmVkKCkp
OworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBIVE1MUGFyc2VyOjpub2ZyYW1lc0NyZWF0
ZUVycm9yQ2hlY2soVG9rZW4qIHQsIE5vZGVJbXBsKiYgcmVzdWx0KQoreworICAgIHNldFNraXBN
b2RlKEhUTUxOYW1lczo6bm9mcmFtZXMoKSk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29s
IEhUTUxQYXJzZXI6Om5vc2NyaXB0Q3JlYXRlRXJyb3JDaGVjayhUb2tlbiogdCwgTm9kZUltcGwq
JiByZXN1bHQpCit7CisgICAgaWYgKEhUTUxXaWRnZXQgJiYgSFRNTFdpZGdldC0+cGFydCgpLT5q
U2NyaXB0RW5hYmxlZCgpKQorICAgICAgICBzZXRTa2lwTW9kZShIVE1MTmFtZXM6Om5vc2NyaXB0
KCkpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBIVE1MUGFyc2VyOjpub2xheWVyQ3Jl
YXRlRXJyb3JDaGVjayhUb2tlbiogdCwgTm9kZUltcGwqJiByZXN1bHQpCit7CisgICAgcmV0dXJu
IGZhbHNlOworfQorCitOb2RlSW1wbCAqSFRNTFBhcnNlcjo6Z2V0Tm9kZShUb2tlbiogdCkKK3sK
KyAgICAvLyBJbml0IG91ciBlcnJvciBoYW5kbGluZyB0YWJsZS4KKyAgICBzdGF0aWMgRnVuY3Rp
b25NYXAgZ0Z1bmN0aW9uTWFwOworICAgIGlmIChnRnVuY3Rpb25NYXAuaXNFbXB0eSgpKSB7Cisg
ICAgICAgIGdGdW5jdGlvbk1hcC5pbnNlcnQodGV4dEF0b20uaW1wbGVtZW50YXRpb24oKSwgJkhU
TUxQYXJzZXI6OnRleHRDcmVhdGVFcnJvckNoZWNrKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLmlu
c2VydChjb21tZW50QXRvbS5pbXBsZW1lbnRhdGlvbigpLCAmSFRNTFBhcnNlcjo6Y29tbWVudENy
ZWF0ZUVycm9yQ2hlY2spOworICAgICAgICBnRnVuY3Rpb25NYXAuaW5zZXJ0KEhUTUxOYW1lczo6
aGVhZCgpLmxvY2FsTmFtZVB0cigpLCAmSFRNTFBhcnNlcjo6aGVhZENyZWF0ZUVycm9yQ2hlY2sp
OworICAgICAgICBnRnVuY3Rpb25NYXAuaW5zZXJ0KEhUTUxOYW1lczo6Ym9keSgpLmxvY2FsTmFt
ZVB0cigpLCAmSFRNTFBhcnNlcjo6Ym9keUNyZWF0ZUVycm9yQ2hlY2spOworICAgICAgICBnRnVu
Y3Rpb25NYXAuaW5zZXJ0KEhUTUxOYW1lczo6ZnJhbWVzZXQoKS5sb2NhbE5hbWVQdHIoKSwgJkhU
TUxQYXJzZXI6OmZyYW1lc2V0Q3JlYXRlRXJyb3JDaGVjayk7CisgICAgICAgIGdGdW5jdGlvbk1h
cC5pbnNlcnQoSFRNTE5hbWVzOjppZnJhbWUoKS5sb2NhbE5hbWVQdHIoKSwgJkhUTUxQYXJzZXI6
OmlmcmFtZUNyZWF0ZUVycm9yQ2hlY2spOworICAgICAgICBnRnVuY3Rpb25NYXAuaW5zZXJ0KEhU
TUxOYW1lczo6Zm9ybSgpLmxvY2FsTmFtZVB0cigpLCAmSFRNTFBhcnNlcjo6Zm9ybUNyZWF0ZUVy
cm9yQ2hlY2spOworICAgICAgICBnRnVuY3Rpb25NYXAuaW5zZXJ0KEhUTUxOYW1lczo6aXNpbmRl
eCgpLmxvY2FsTmFtZVB0cigpLCAmSFRNTFBhcnNlcjo6aXNpbmRleENyZWF0ZUVycm9yQ2hlY2sp
OworICAgICAgICBnRnVuY3Rpb25NYXAuaW5zZXJ0KEhUTUxOYW1lczo6c2VsZWN0KCkubG9jYWxO
YW1lUHRyKCksICZIVE1MUGFyc2VyOjpzZWxlY3RDcmVhdGVFcnJvckNoZWNrKTsKKyAgICAgICAg
Z0Z1bmN0aW9uTWFwLmluc2VydChIVE1MTmFtZXM6OmRkKCkubG9jYWxOYW1lUHRyKCksICZIVE1M
UGFyc2VyOjpkZENyZWF0ZUVycm9yQ2hlY2spOworICAgICAgICBnRnVuY3Rpb25NYXAuaW5zZXJ0
KEhUTUxOYW1lczo6ZHQoKS5sb2NhbE5hbWVQdHIoKSwgJkhUTUxQYXJzZXI6OmR0Q3JlYXRlRXJy
b3JDaGVjayk7CisgICAgICAgIGdGdW5jdGlvbk1hcC5pbnNlcnQoSFRNTE5hbWVzOjpsaSgpLmxv
Y2FsTmFtZVB0cigpLCAmSFRNTFBhcnNlcjo6bmVzdGVkQ3JlYXRlRXJyb3JDaGVjayk7CisgICAg
ICAgIGdGdW5jdGlvbk1hcC5pbnNlcnQoSFRNTE5hbWVzOjphKCkubG9jYWxOYW1lUHRyKCksICZI
VE1MUGFyc2VyOjpuZXN0ZWRDcmVhdGVFcnJvckNoZWNrKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFw
Lmluc2VydChIVE1MTmFtZXM6Om5vYnIoKS5sb2NhbE5hbWVQdHIoKSwgJkhUTUxQYXJzZXI6Om5l
c3RlZENyZWF0ZUVycm9yQ2hlY2spOworICAgICAgICBnRnVuY3Rpb25NYXAuaW5zZXJ0KEhUTUxO
YW1lczo6d2JyKCkubG9jYWxOYW1lUHRyKCksICZIVE1MUGFyc2VyOjpuZXN0ZWRDcmVhdGVFcnJv
ckNoZWNrKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLmluc2VydChIVE1MTmFtZXM6OnRyKCkubG9j
YWxOYW1lUHRyKCksICZIVE1MUGFyc2VyOjpuZXN0ZWRDcmVhdGVFcnJvckNoZWNrKTsKKyAgICAg
ICAgZ0Z1bmN0aW9uTWFwLmluc2VydChIVE1MTmFtZXM6OnRkKCkubG9jYWxOYW1lUHRyKCksICZI
VE1MUGFyc2VyOjp0YWJsZUNlbGxDcmVhdGVFcnJvckNoZWNrKTsKKyAgICAgICAgZ0Z1bmN0aW9u
TWFwLmluc2VydChIVE1MTmFtZXM6OnRoKCkubG9jYWxOYW1lUHRyKCksICZIVE1MUGFyc2VyOjp0
YWJsZUNlbGxDcmVhdGVFcnJvckNoZWNrKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLmluc2VydChI
VE1MTmFtZXM6OnRib2R5KCkubG9jYWxOYW1lUHRyKCksICZIVE1MUGFyc2VyOjp0YWJsZVNlY3Rp
b25DcmVhdGVFcnJvckNoZWNrKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLmluc2VydChIVE1MTmFt
ZXM6OnRoZWFkKCkubG9jYWxOYW1lUHRyKCksICZIVE1MUGFyc2VyOjp0YWJsZVNlY3Rpb25DcmVh
dGVFcnJvckNoZWNrKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLmluc2VydChIVE1MTmFtZXM6OnRm
b290KCkubG9jYWxOYW1lUHRyKCksICZIVE1MUGFyc2VyOjp0YWJsZVNlY3Rpb25DcmVhdGVFcnJv
ckNoZWNrKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLmluc2VydChIVE1MTmFtZXM6OnR0KCkubG9j
YWxOYW1lUHRyKCksICZIVE1MUGFyc2VyOjpuZXN0ZWRTdHlsZUNyZWF0ZUVycm9yQ2hlY2spOwor
ICAgICAgICBnRnVuY3Rpb25NYXAuaW5zZXJ0KEhUTUxOYW1lczo6dSgpLmxvY2FsTmFtZVB0cigp
LCAmSFRNTFBhcnNlcjo6bmVzdGVkU3R5bGVDcmVhdGVFcnJvckNoZWNrKTsKKyAgICAgICAgZ0Z1
bmN0aW9uTWFwLmluc2VydChIVE1MTmFtZXM6OmIoKS5sb2NhbE5hbWVQdHIoKSwgJkhUTUxQYXJz
ZXI6Om5lc3RlZFN0eWxlQ3JlYXRlRXJyb3JDaGVjayk7CisgICAgICAgIGdGdW5jdGlvbk1hcC5p
bnNlcnQoSFRNTE5hbWVzOjppKCkubG9jYWxOYW1lUHRyKCksICZIVE1MUGFyc2VyOjpuZXN0ZWRT
dHlsZUNyZWF0ZUVycm9yQ2hlY2spOworICAgICAgICBnRnVuY3Rpb25NYXAuaW5zZXJ0KEhUTUxO
YW1lczo6cygpLmxvY2FsTmFtZVB0cigpLCAmSFRNTFBhcnNlcjo6bmVzdGVkU3R5bGVDcmVhdGVF
cnJvckNoZWNrKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLmluc2VydChIVE1MTmFtZXM6OnN0cmlr
ZSgpLmxvY2FsTmFtZVB0cigpLCAmSFRNTFBhcnNlcjo6bmVzdGVkU3R5bGVDcmVhdGVFcnJvckNo
ZWNrKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLmluc2VydChIVE1MTmFtZXM6OmJpZygpLmxvY2Fs
TmFtZVB0cigpLCAmSFRNTFBhcnNlcjo6bmVzdGVkU3R5bGVDcmVhdGVFcnJvckNoZWNrKTsKKyAg
ICAgICAgZ0Z1bmN0aW9uTWFwLmluc2VydChIVE1MTmFtZXM6OnNtYWxsKCkubG9jYWxOYW1lUHRy
KCksICZIVE1MUGFyc2VyOjpuZXN0ZWRTdHlsZUNyZWF0ZUVycm9yQ2hlY2spOworICAgICAgICBn
RnVuY3Rpb25NYXAuaW5zZXJ0KEhUTUxOYW1lczo6bm9lbWJlZCgpLmxvY2FsTmFtZVB0cigpLCAm
SFRNTFBhcnNlcjo6bm9lbWJlZENyZWF0ZUVycm9yQ2hlY2spOworICAgICAgICBnRnVuY3Rpb25N
YXAuaW5zZXJ0KEhUTUxOYW1lczo6bm9mcmFtZXMoKS5sb2NhbE5hbWVQdHIoKSwgJkhUTUxQYXJz
ZXI6Om5vZnJhbWVzQ3JlYXRlRXJyb3JDaGVjayk7CisgICAgICAgIGdGdW5jdGlvbk1hcC5pbnNl
cnQoSFRNTE5hbWVzOjpub3NjcmlwdCgpLmxvY2FsTmFtZVB0cigpLCAmSFRNTFBhcnNlcjo6bm9z
Y3JpcHRDcmVhdGVFcnJvckNoZWNrKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLmluc2VydChIVE1M
TmFtZXM6Om5vbGF5ZXIoKS5sb2NhbE5hbWVQdHIoKSwgJkhUTUxQYXJzZXI6Om5vbGF5ZXJDcmVh
dGVFcnJvckNoZWNrKTsKICAgICB9CiAKLSAgICByZXR1cm4gZG9jdW1lbnQtPmRvY3VtZW50KCkt
PmNyZWF0ZUhUTUxFbGVtZW50KHQtPmlkKTsKKyAgICBib29sIHByb2NlZWQgPSB0cnVlOworICAg
IE5vZGVJbXBsKiByZXN1bHQgPSAwOworICAgIENyZWF0ZUVycm9yQ2hlY2tGdW5jIGVycm9yQ2hl
Y2tGdW5jID0gZ0Z1bmN0aW9uTWFwLmdldCh0LT50YWdOYW1lLmltcGxlbWVudGF0aW9uKCkpOwor
ICAgIGlmIChlcnJvckNoZWNrRnVuYykKKyAgICAgICAgcHJvY2VlZCA9ICh0aGlzLT4qKGVycm9y
Q2hlY2tGdW5jKSkodCwgcmVzdWx0KTsKKworICAgIGlmIChwcm9jZWVkKSB7CisgICAgICAgIHJl
c3VsdCA9IEhUTUxFbGVtZW50RmFjdG9yeTo6Y3JlYXRlSFRNTEVsZW1lbnQodC0+dGFnTmFtZSwg
ZG9jKCksIGZvcm0pOworICAgICAgICBpZiAodC0+dGFnTmFtZSA9PSBIVE1MTmFtZXM6OmZvcm0o
KSkKKyAgICAgICAgICAgIGZvcm0gPSBzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnRJbXBsKj4o
cmVzdWx0KTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogI2RlZmluZSBNQVhfUkVE
VU5EQU5UIDIwCiAKLWJvb2wgS0hUTUxQYXJzZXI6OmFsbG93TmVzdGVkUmVkdW5kYW50VGFnKGlu
dCBfaWQpCitib29sIEhUTUxQYXJzZXI6OmFsbG93TmVzdGVkUmVkdW5kYW50VGFnKGNvbnN0IEF0
b21pY1N0cmluZyYgX3RhZ05hbWUpCiB7CiAgICAgLy8gd3d3LmxpY2VvLmVkdS5teCBpcyBhbiBl
eGFtcGxlIG9mIGEgc2l0ZSB0aGF0IGFjaGlldmVzIGEgbGV2ZWwgb2YgbmVzdGluZyBvZgogICAg
IC8vIGFib3V0IDE1MDAgdGFncywgYWxsIGZyb20gYSBidW5jaCBvZiA8Yj5zLiAgV2Ugd2lsbCBv
bmx5IGFsbG93IGF0IG1vc3QgMjAKICAgICAvLyBuZXN0ZWQgdGFncyBvZiB0aGUgc2FtZSB0eXBl
IGJlZm9yZSBqdXN0IGlnbm9yaW5nIHRoZW0gYWxsIHRvZ2V0aGVyLgogICAgIGludCBpID0gMDsK
ICAgICBmb3IgKEhUTUxTdGFja0VsZW0qIGN1cnIgPSBibG9ja1N0YWNrOwotICAgICAgICAgaSA8
IE1BWF9SRURVTkRBTlQgJiYgY3VyciAmJiBjdXJyLT5pZCA9PSBfaWQ7CisgICAgICAgICBpIDwg
TUFYX1JFRFVOREFOVCAmJiBjdXJyICYmIGN1cnItPnRhZ05hbWUgPT0gX3RhZ05hbWU7CiAgICAg
ICAgICBjdXJyID0gY3Vyci0+bmV4dCwgaSsrKTsKICAgICByZXR1cm4gaSAhPSBNQVhfUkVEVU5E
QU5UOwogfQogCi12b2lkIEtIVE1MUGFyc2VyOjpwcm9jZXNzQ2xvc2VUYWcoVG9rZW4gKnQpCit2
b2lkIEhUTUxQYXJzZXI6OnByb2Nlc3NDbG9zZVRhZyhUb2tlbiAqdCkKIHsKLSAgICAvLyBzdXBw
b3J0IGZvciByZWFsbHkgYnJva2VuIGh0bWwuIENhbid0IGJlbGlldmUgSSdtIHN1cHBvcnRpbmcg
c3VjaCBjcmFwIChsYXJzKQotICAgIHN3aXRjaCh0LT5pZCkKLSAgICB7Ci0gICAgY2FzZSBJRF9I
VE1MK0lEX0NMT1NFX1RBRzoKLSAgICBjYXNlIElEX0JPRFkrSURfQ0xPU0VfVEFHOgotICAgICAg
ICAvLyB3ZSBuZXZlciBjbG9zZSB0aGUgYm9keSB0YWcsIHNpbmNlIHNvbWUgc3R1cGlkIHdlYiBw
YWdlcyBjbG9zZSBpdCBiZWZvcmUgdGhlIGFjdHVhbCBlbmQgb2YgdGhlIGRvYy4KLSAgICAgICAg
Ly8gbGV0J3MgcmVseSBvbiB0aGUgZW5kKCkgY2FsbCB0byBjbG9zZSB0aGluZ3MuCisgICAgLy8g
U3VwcG9ydCBmb3IgcmVhbGx5IGJyb2tlbiBodG1sLgorICAgIC8vIHdlIG5ldmVyIGNsb3NlIHRo
ZSBib2R5IHRhZywgc2luY2Ugc29tZSBzdHVwaWQgd2ViIHBhZ2VzIGNsb3NlIGl0IGJlZm9yZSB0
aGUgYWN0dWFsIGVuZCBvZiB0aGUgZG9jLgorICAgIC8vIGxldCdzIHJlbHkgb24gdGhlIGVuZCgp
IGNhbGwgdG8gY2xvc2UgdGhpbmdzLgorICAgIGlmICh0LT50YWdOYW1lID09IEhUTUxOYW1lczo6
aHRtbCgpIHx8IHQtPnRhZ05hbWUgPT0gSFRNTE5hbWVzOjpib2R5KCkpCiAgICAgICAgIHJldHVy
bjsKLSAgICBjYXNlIElEX0ZPUk0rSURfQ0xPU0VfVEFHOgorICAgIAorICAgIGlmICh0LT50YWdO
YW1lID09IEhUTUxOYW1lczo6Zm9ybSgpKQogICAgICAgICBmb3JtID0gMDsKLSAgICAgICAgLy8g
dGhpcyBvbmUgaXMgdG8gZ2V0IHRoZSByaWdodCBzdHlsZSBvbiB0aGUgYm9keSBlbGVtZW50Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgSURfTUFQK0lEX0NMT1NFX1RBRzoKKyAgICBlbHNlIGlm
ICh0LT50YWdOYW1lID09IEhUTUxOYW1lczo6bWFwKCkpCiAgICAgICAgIG1hcCA9IDA7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgSURfU0VMRUNUK0lEX0NMT1NFX1RBRzoKKyAgICBlbHNlIGlm
ICh0LT50YWdOYW1lID09IEhUTUxOYW1lczo6c2VsZWN0KCkpCiAgICAgICAgIGluU2VsZWN0ID0g
ZmFsc2U7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAg
IH0KLQotI2lmZGVmIFBBUlNFUl9ERUJVRwotICAgIGtkRGVidWcoIDYwMzUgKSA8PCAiYWRkZWQg
dGhlIGZvbGxvd2luZyBjaGlsZHMgdG8gIiA8PCBjdXJyZW50LT5ub2RlTmFtZSgpLnN0cmluZygp
IDw8IGVuZGw7Ci0gICAgTm9kZUltcGwgKmNoaWxkID0gY3VycmVudC0+Zmlyc3RDaGlsZCgpOwot
ICAgIHdoaWxlKGNoaWxkICE9IDApCi0gICAgewotICAgICAgICBrZERlYnVnKCA2MDM1ICkgPDwg
IiAgICAiIDw8IGNoaWxkLT5ub2RlTmFtZSgpLnN0cmluZygpIDw8IGVuZGw7Ci0gICAgICAgIGNo
aWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCk7Ci0gICAgfQotI2VuZGlmCisgICAgICAgIAogICAg
IEhUTUxTdGFja0VsZW0qIG9sZEVsZW0gPSBibG9ja1N0YWNrOwotICAgIHBvcEJsb2NrKHQtPmlk
LUlEX0NMT1NFX1RBRyk7Ci0gICAgaWYgKG9sZEVsZW0gPT0gYmxvY2tTdGFjayAmJiB0LT5pZCA9
PSBJRF9QK0lEX0NMT1NFX1RBRykgeworICAgIHBvcEJsb2NrKHQtPnRhZ05hbWUpOworICAgIGlm
IChvbGRFbGVtID09IGJsb2NrU3RhY2sgJiYgdC0+dGFnTmFtZSA9PSBIVE1MTmFtZXM6OnAoKSkg
ewogICAgICAgICAvLyBXZSBlbmNvdW50ZXJlZCBhIHN0cmF5IDwvcD4uICBBbWF6aW5nbHkgR2Vj
a28sIFdpbklFLCBhbmQgTWFjSUUgYWxsIHRyZWF0CiAgICAgICAgIC8vIHRoaXMgYXMgYSB2YWxp
ZCBicmVhaywgaS5lLiwgPHA+PC9wPi4gIFNvIGdvIGFoZWFkIGFuZCBtYWtlIHRoZSBlbXB0eQog
ICAgICAgICAvLyBwYXJhZ3JhcGguCi0gICAgICAgIHQtPmlkLT1JRF9DTE9TRV9UQUc7CisgICAg
ICAgIHQtPmJlZ2luVGFnID0gdHJ1ZTsKICAgICAgICAgcGFyc2VUb2tlbih0KTsKLSAgICAgICAg
cG9wQmxvY2soSURfUCk7CisgICAgICAgIHBvcEJsb2NrKHQtPnRhZ05hbWUpOwogICAgIH0KICNp
ZmRlZiBQQVJTRVJfREVCVUcKICAgICBrZERlYnVnKCA2MDM1ICkgPDwgImNsb3NlVGFnIC0tPiBj
dXJyZW50ID0gIiA8PCBjdXJyZW50LT5ub2RlTmFtZSgpLnN0cmluZygpIDw8IGVuZGw7CiAjZW5k
aWYKIH0KIAotYm9vbCBLSFRNTFBhcnNlcjo6aXNIZWFkZXJUYWcoaW50IF9pZCkKK2Jvb2wgSFRN
TFBhcnNlcjo6aXNIZWFkZXJUYWcoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lKQogewotICAg
IHN3aXRjaCAoX2lkKSB7Ci0gICAgICAgIGNhc2UgSURfSDE6Ci0gICAgICAgIGNhc2UgSURfSDI6
Ci0gICAgICAgIGNhc2UgSURfSDM6Ci0gICAgICAgIGNhc2UgSURfSDQ6Ci0gICAgICAgIGNhc2Ug
SURfSDU6Ci0gICAgICAgIGNhc2UgSURfSDY6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBzdGF0aWMgSGFz
aFNldDxET01TdHJpbmdJbXBsKiwgUG9pbnRlckhhc2g8RE9NU3RyaW5nSW1wbCo+ID4gaGVhZGVy
VGFnczsKKyAgICBpZiAoaGVhZGVyVGFncy5pc0VtcHR5KCkpIHsKKyAgICAgICAgaGVhZGVyVGFn
cy5pbnNlcnQoSFRNTE5hbWVzOjpoMSgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgaGVhZGVy
VGFncy5pbnNlcnQoSFRNTE5hbWVzOjpoMigpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgaGVh
ZGVyVGFncy5pbnNlcnQoSFRNTE5hbWVzOjpoMygpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAg
aGVhZGVyVGFncy5pbnNlcnQoSFRNTE5hbWVzOjpoNCgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAg
ICAgaGVhZGVyVGFncy5pbnNlcnQoSFRNTE5hbWVzOjpoNSgpLmxvY2FsTmFtZVB0cigpKTsKKyAg
ICAgICAgaGVhZGVyVGFncy5pbnNlcnQoSFRNTE5hbWVzOjpoNigpLmxvY2FsTmFtZVB0cigpKTsK
ICAgICB9CisgICAgCisgICAgcmV0dXJuIGhlYWRlclRhZ3MuY29udGFpbnModGFnTmFtZS5pbXBs
ZW1lbnRhdGlvbigpKTsKIH0KIAotdm9pZCBLSFRNTFBhcnNlcjo6cG9wTmVzdGVkSGVhZGVyVGFn
KCkKK3ZvaWQgSFRNTFBhcnNlcjo6cG9wTmVzdGVkSGVhZGVyVGFnKCkKIHsKICAgICAvLyBUaGlz
IGZ1bmN0aW9uIG9ubHkgY2FyZXMgYWJvdXQgY2hlY2tpbmcgZm9yIG5lc3RlZCBoZWFkZXJzIHRo
YXQgaGF2ZSBvbmx5IGlubGluZXMgaW4gYmV0d2VlbiB0aGVtLgogICAgIE5vZGVJbXBsKiBjdXJy
Tm9kZSA9IGN1cnJlbnQ7CiAgICAgZm9yIChIVE1MU3RhY2tFbGVtKiBjdXJyID0gYmxvY2tTdGFj
azsgY3VycjsgY3VyciA9IGN1cnItPm5leHQpIHsKLSAgICAgICAgaWYgKGlzSGVhZGVyVGFnKGN1
cnItPmlkKSkgewotICAgICAgICAgICAgcG9wQmxvY2soY3Vyci0+aWQpOworICAgICAgICBpZiAo
aXNIZWFkZXJUYWcoY3Vyci0+dGFnTmFtZSkpIHsKKyAgICAgICAgICAgIHBvcEJsb2NrKGN1cnIt
PnRhZ05hbWUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGlmIChj
dXJyTm9kZSAmJiAhY3Vyck5vZGUtPmlzSW5saW5lKCkpCisgICAgICAgIGlmIChjdXJyTm9kZSAm
JiAhaXNJbmxpbmUoY3Vyck5vZGUpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBjdXJy
Tm9kZSA9IGN1cnItPm5vZGU7CiAgICAgfQogfQogCi1ib29sIEtIVE1MUGFyc2VyOjppc1Jlc2lk
dWFsU3R5bGVUYWcoaW50IF9pZCkKK2Jvb2wgSFRNTFBhcnNlcjo6aXNJbmxpbmUoRE9NOjpOb2Rl
SW1wbCogbm9kZSkgY29uc3QKIHsKLSAgICBzd2l0Y2ggKF9pZCkgewotICAgICAgICBjYXNlIElE
X0E6Ci0gICAgICAgIGNhc2UgSURfRk9OVDoKLSAgICAgICAgY2FzZSBJRF9UVDoKLSAgICAgICAg
Y2FzZSBJRF9VOgotICAgICAgICBjYXNlIElEX0I6Ci0gICAgICAgIGNhc2UgSURfSToKLSAgICAg
ICAgY2FzZSBJRF9TOgotICAgICAgICBjYXNlIElEX1NUUklLRToKLSAgICAgICAgY2FzZSBJRF9C
SUc6Ci0gICAgICAgIGNhc2UgSURfU01BTEw6Ci0gICAgICAgIGNhc2UgSURfRU06Ci0gICAgICAg
IGNhc2UgSURfU1RST05HOgotICAgICAgICBjYXNlIElEX0RGTjoKLSAgICAgICAgY2FzZSBJRF9D
T0RFOgotICAgICAgICBjYXNlIElEX1NBTVA6Ci0gICAgICAgIGNhc2UgSURfS0JEOgotICAgICAg
ICBjYXNlIElEX1ZBUjoKKyAgICBpZiAobm9kZS0+aXNUZXh0Tm9kZSgpKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKworICAgIGlmIChub2RlLT5pc0hUTUxFbGVtZW50KCkpIHsKKyAgICAgICAgSFRN
TEVsZW1lbnRJbXBsKiBlID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsKj4obm9kZSk7Cisg
ICAgICAgIGlmIChlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjphKCkpIHx8IGUtPmhhc0xvY2Fs
TmFtZShIVE1MTmFtZXM6OmZvbnQoKSkgfHwgZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dHQo
KSkgfHwKKyAgICAgICAgICAgIGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnUoKSkgfHwgZS0+
aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6YigpKSB8fCBlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVz
OjppKCkpIHx8CisgICAgICAgICAgICBlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpzKCkpIHx8
IGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnN0cmlrZSgpKSB8fCBlLT5oYXNMb2NhbE5hbWUo
SFRNTE5hbWVzOjpiaWcoKSkgfHwKKyAgICAgICAgICAgIGUtPmhhc0xvY2FsTmFtZShIVE1MTmFt
ZXM6OnNtYWxsKCkpIHx8IGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmVtKCkpIHx8IGUtPmhh
c0xvY2FsTmFtZShIVE1MTmFtZXM6OnN0cm9uZygpKSB8fAorICAgICAgICAgICAgZS0+aGFzTG9j
YWxOYW1lKEhUTUxOYW1lczo6ZGZuKCkpIHx8IGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmNv
ZGUoKSkgfHwgZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6c2FtcCgpKSB8fAorICAgICAgICAg
ICAgZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6a2JkKCkpIHx8IGUtPmhhc0xvY2FsTmFtZShI
VE1MTmFtZXM6OnZhcigpKSB8fCBlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpjaXRlKCkpIHx8
CisgICAgICAgICAgICBlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjphYmJyKCkpIHx8IGUtPmhh
c0xvY2FsTmFtZShIVE1MTmFtZXM6OmFjcm9ueW0oKSkgfHwgZS0+aGFzTG9jYWxOYW1lKEhUTUxO
YW1lczo6c3ViKCkpIHx8CisgICAgICAgICAgICBlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpz
dXAoKSkgfHwgZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6c3BhbigpKSB8fCBlLT5oYXNMb2Nh
bE5hbWUoSFRNTE5hbWVzOjpub2JyKCkpIHx8CisgICAgICAgICAgICBlLT5oYXNMb2NhbE5hbWUo
SFRNTE5hbWVzOjp3YnIoKSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CisgICAgCisgICAgcmV0dXJu
IGZhbHNlOworfQorCitib29sIEhUTUxQYXJzZXI6OmlzUmVzaWR1YWxTdHlsZVRhZyhjb25zdCBB
dG9taWNTdHJpbmcmIHRhZ05hbWUpCit7CisgICAgc3RhdGljIEhhc2hTZXQ8RE9NU3RyaW5nSW1w
bCosIFBvaW50ZXJIYXNoPERPTVN0cmluZ0ltcGwqPiA+IHJlc2lkdWFsU3R5bGVUYWdzOworICAg
IGlmIChyZXNpZHVhbFN0eWxlVGFncy5pc0VtcHR5KCkpIHsKKyAgICAgICAgcmVzaWR1YWxTdHls
ZVRhZ3MuaW5zZXJ0KEhUTUxOYW1lczo6YSgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgcmVz
aWR1YWxTdHlsZVRhZ3MuaW5zZXJ0KEhUTUxOYW1lczo6Zm9udCgpLmxvY2FsTmFtZVB0cigpKTsK
KyAgICAgICAgcmVzaWR1YWxTdHlsZVRhZ3MuaW5zZXJ0KEhUTUxOYW1lczo6dHQoKS5sb2NhbE5h
bWVQdHIoKSk7CisgICAgICAgIHJlc2lkdWFsU3R5bGVUYWdzLmluc2VydChIVE1MTmFtZXM6OnUo
KS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHJlc2lkdWFsU3R5bGVUYWdzLmluc2VydChIVE1M
TmFtZXM6OmIoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHJlc2lkdWFsU3R5bGVUYWdzLmlu
c2VydChIVE1MTmFtZXM6OmkoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHJlc2lkdWFsU3R5
bGVUYWdzLmluc2VydChIVE1MTmFtZXM6OnMoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHJl
c2lkdWFsU3R5bGVUYWdzLmluc2VydChIVE1MTmFtZXM6OnN0cmlrZSgpLmxvY2FsTmFtZVB0cigp
KTsKKyAgICAgICAgcmVzaWR1YWxTdHlsZVRhZ3MuaW5zZXJ0KEhUTUxOYW1lczo6YmlnKCkubG9j
YWxOYW1lUHRyKCkpOworICAgICAgICByZXNpZHVhbFN0eWxlVGFncy5pbnNlcnQoSFRNTE5hbWVz
OjpzbWFsbCgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgcmVzaWR1YWxTdHlsZVRhZ3MuaW5z
ZXJ0KEhUTUxOYW1lczo6ZW0oKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHJlc2lkdWFsU3R5
bGVUYWdzLmluc2VydChIVE1MTmFtZXM6OnN0cm9uZygpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAg
ICAgcmVzaWR1YWxTdHlsZVRhZ3MuaW5zZXJ0KEhUTUxOYW1lczo6ZGZuKCkubG9jYWxOYW1lUHRy
KCkpOworICAgICAgICByZXNpZHVhbFN0eWxlVGFncy5pbnNlcnQoSFRNTE5hbWVzOjpjb2RlKCku
bG9jYWxOYW1lUHRyKCkpOworICAgICAgICByZXNpZHVhbFN0eWxlVGFncy5pbnNlcnQoSFRNTE5h
bWVzOjpzYW1wKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICByZXNpZHVhbFN0eWxlVGFncy5p
bnNlcnQoSFRNTE5hbWVzOjprYmQoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHJlc2lkdWFs
U3R5bGVUYWdzLmluc2VydChIVE1MTmFtZXM6OnZhcigpLmxvY2FsTmFtZVB0cigpKTsKKyAgICB9
CisgICAgCisgICAgcmV0dXJuIHJlc2lkdWFsU3R5bGVUYWdzLmNvbnRhaW5zKHRhZ05hbWUuaW1w
bGVtZW50YXRpb24oKSk7CiB9CiAKLWJvb2wgS0hUTUxQYXJzZXI6OmlzQWZmZWN0ZWRCeVJlc2lk
dWFsU3R5bGUoaW50IF9pZCkKK2Jvb2wgSFRNTFBhcnNlcjo6aXNBZmZlY3RlZEJ5UmVzaWR1YWxT
dHlsZShjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUpCiB7Ci0gICAgaWYgKGlzUmVzaWR1YWxT
dHlsZVRhZyhfaWQpKQorICAgIGlmIChpc1Jlc2lkdWFsU3R5bGVUYWcodGFnTmFtZSkpCiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIAotICAgIHN3aXRjaCAoX2lkKSB7Ci0gICAgICAgIGNhc2Ug
SURfUDoKLSAgICAgICAgY2FzZSBJRF9ESVY6Ci0gICAgICAgIGNhc2UgSURfQkxPQ0tRVU9URToK
LSAgICAgICAgY2FzZSBJRF9BRERSRVNTOgotICAgICAgICBjYXNlIElEX0gxOgotICAgICAgICBj
YXNlIElEX0gyOgotICAgICAgICBjYXNlIElEX0gzOgotICAgICAgICBjYXNlIElEX0g0OgotICAg
ICAgICBjYXNlIElEX0g1OgotICAgICAgICBjYXNlIElEX0g2OgotICAgICAgICBjYXNlIElEX0NF
TlRFUjoKLSAgICAgICAgY2FzZSBJRF9VTDoKLSAgICAgICAgY2FzZSBJRF9PTDoKLSAgICAgICAg
Y2FzZSBJRF9MSToKLSAgICAgICAgY2FzZSBJRF9ETDoKLSAgICAgICAgY2FzZSBJRF9EVDoKLSAg
ICAgICAgY2FzZSBJRF9ERDoKLSAgICAgICAgY2FzZSBJRF9QUkU6Ci0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBzdGF0aWMgSGFzaFNldDxET01TdHJpbmdJbXBsKiwgUG9pbnRlckhhc2g8RE9NU3RyaW5nSW1w
bCo+ID4gYWZmZWN0ZWRCbG9ja1RhZ3M7CisgICAgaWYgKGFmZmVjdGVkQmxvY2tUYWdzLmlzRW1w
dHkoKSkgeworICAgICAgICBhZmZlY3RlZEJsb2NrVGFncy5pbnNlcnQoSFRNTE5hbWVzOjpoMSgp
LmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgYWZmZWN0ZWRCbG9ja1RhZ3MuaW5zZXJ0KEhUTUxO
YW1lczo6aDIoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIGFmZmVjdGVkQmxvY2tUYWdzLmlu
c2VydChIVE1MTmFtZXM6OmgzKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICBhZmZlY3RlZEJs
b2NrVGFncy5pbnNlcnQoSFRNTE5hbWVzOjpoNCgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAg
YWZmZWN0ZWRCbG9ja1RhZ3MuaW5zZXJ0KEhUTUxOYW1lczo6aDUoKS5sb2NhbE5hbWVQdHIoKSk7
CisgICAgICAgIGFmZmVjdGVkQmxvY2tUYWdzLmluc2VydChIVE1MTmFtZXM6Omg2KCkubG9jYWxO
YW1lUHRyKCkpOworICAgICAgICBhZmZlY3RlZEJsb2NrVGFncy5pbnNlcnQoSFRNTE5hbWVzOjpw
KCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICBhZmZlY3RlZEJsb2NrVGFncy5pbnNlcnQoSFRN
TE5hbWVzOjpkaXYoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIGFmZmVjdGVkQmxvY2tUYWdz
Lmluc2VydChIVE1MTmFtZXM6OmJsb2NrcXVvdGUoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAg
IGFmZmVjdGVkQmxvY2tUYWdzLmluc2VydChIVE1MTmFtZXM6OmFkZHJlc3MoKS5sb2NhbE5hbWVQ
dHIoKSk7CisgICAgICAgIGFmZmVjdGVkQmxvY2tUYWdzLmluc2VydChIVE1MTmFtZXM6OmNlbnRl
cigpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgYWZmZWN0ZWRCbG9ja1RhZ3MuaW5zZXJ0KEhU
TUxOYW1lczo6dWwoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIGFmZmVjdGVkQmxvY2tUYWdz
Lmluc2VydChIVE1MTmFtZXM6Om9sKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICBhZmZlY3Rl
ZEJsb2NrVGFncy5pbnNlcnQoSFRNTE5hbWVzOjpsaSgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAg
ICAgYWZmZWN0ZWRCbG9ja1RhZ3MuaW5zZXJ0KEhUTUxOYW1lczo6ZGwoKS5sb2NhbE5hbWVQdHIo
KSk7CisgICAgICAgIGFmZmVjdGVkQmxvY2tUYWdzLmluc2VydChIVE1MTmFtZXM6OmR0KCkubG9j
YWxOYW1lUHRyKCkpOworICAgICAgICBhZmZlY3RlZEJsb2NrVGFncy5pbnNlcnQoSFRNTE5hbWVz
OjpkZCgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgYWZmZWN0ZWRCbG9ja1RhZ3MuaW5zZXJ0
KEhUTUxOYW1lczo6cHJlKCkubG9jYWxOYW1lUHRyKCkpOwogICAgIH0KKyAgICAKKyAgICByZXR1
cm4gYWZmZWN0ZWRCbG9ja1RhZ3MuY29udGFpbnModGFnTmFtZS5pbXBsZW1lbnRhdGlvbigpKTsK
IH0KIAotdm9pZCBLSFRNTFBhcnNlcjo6aGFuZGxlUmVzaWR1YWxTdHlsZUNsb3NlVGFnQWNyb3Nz
QmxvY2tzKEhUTUxTdGFja0VsZW0qIGVsZW0pCit2b2lkIEhUTUxQYXJzZXI6OmhhbmRsZVJlc2lk
dWFsU3R5bGVDbG9zZVRhZ0Fjcm9zc0Jsb2NrcyhIVE1MU3RhY2tFbGVtKiBlbGVtKQogewogICAg
IC8vIEZpbmQgdGhlIGVsZW1lbnQgdGhhdCBjcm9zc2VzIG92ZXIgdG8gYSBoaWdoZXIgbGV2ZWwu
ICAgRm9yIG5vdywgaWYgdGhlcmUgaXMgbW9yZSB0aGFuCiAgICAgLy8gb25lLCB3ZSB3aWxsIGp1
c3QgZ2l2ZSB1cCBhbmQgbm90IGF0dGVtcHQgYW55IHNvcnQgb2YgY29ycmVjdGlvbi4gIEl0J3Mg
aGlnaGx5IHVubGlrZWx5IHRoYXQKQEAgLTExMjUsNyArOTkyLDcgQEAgdm9pZCBLSFRNTFBhcnNl
cjo6aGFuZGxlUmVzaWR1YWxTdHlsZUNsbwogICAgICAgICBjdXJyID0gY3Vyci0+bmV4dDsKICAg
ICB9CiAKLSAgICBpZiAoIWN1cnIgfHwgIW1heEVsZW0gfHwgIWlzQWZmZWN0ZWRCeVJlc2lkdWFs
U3R5bGUobWF4RWxlbS0+aWQpKSByZXR1cm47CisgICAgaWYgKCFjdXJyIHx8ICFtYXhFbGVtIHx8
ICFpc0FmZmVjdGVkQnlSZXNpZHVhbFN0eWxlKG1heEVsZW0tPnRhZ05hbWUpKSByZXR1cm47CiAK
ICAgICBOb2RlSW1wbCogcmVzaWR1YWxFbGVtID0gcHJldi0+bm9kZTsKICAgICBOb2RlSW1wbCog
YmxvY2tFbGVtID0gcHJldk1heEVsZW0gPyBwcmV2TWF4RWxlbS0+bm9kZSA6IGN1cnJlbnQ7CkBA
IC0xMTQ3LDcgKzEwMTQsNyBAQCB2b2lkIEtIVE1MUGFyc2VyOjpoYW5kbGVSZXNpZHVhbFN0eWxl
Q2xvCiAgICAgICAgIEhUTUxTdGFja0VsZW0qIHByZXZFbGVtID0gbWF4RWxlbTsKICAgICAgICAg
d2hpbGUgKGN1cnJFbGVtICE9IGVsZW0pIHsKICAgICAgICAgICAgIEhUTUxTdGFja0VsZW0qIG5l
eHRFbGVtID0gY3VyckVsZW0tPm5leHQ7Ci0gICAgICAgICAgICBpZiAoIWlzUmVzaWR1YWxTdHls
ZVRhZyhjdXJyRWxlbS0+aWQpKSB7CisgICAgICAgICAgICBpZiAoIWlzUmVzaWR1YWxTdHlsZVRh
ZyhjdXJyRWxlbS0+dGFnTmFtZSkpIHsKICAgICAgICAgICAgICAgICBwcmV2RWxlbS0+bmV4dCA9
IG5leHRFbGVtOwogICAgICAgICAgICAgICAgIHByZXZFbGVtLT5ub2RlID0gY3VyckVsZW0tPm5v
ZGU7CiAgICAgICAgICAgICAgICAgZGVsZXRlIGN1cnJFbGVtOwpAQCAtMTE2OSw3ICsxMDM2LDcg
QEAgdm9pZCBLSFRNTFBhcnNlcjo6aGFuZGxlUmVzaWR1YWxTdHlsZUNsbwogICAgICAgICBOb2Rl
SW1wbCogY3Vyck5vZGUgPSAwOwogICAgICAgICBjdXJyRWxlbSA9IG1heEVsZW07CiAgICAgICAg
IHdoaWxlIChjdXJyRWxlbS0+bm9kZSAhPSByZXNpZHVhbEVsZW0pIHsKLSAgICAgICAgICAgIGlm
IChpc1Jlc2lkdWFsU3R5bGVUYWcoY3VyckVsZW0tPm5vZGUtPmlkKCkpKSB7CisgICAgICAgICAg
ICBpZiAoaXNSZXNpZHVhbFN0eWxlVGFnKGN1cnJFbGVtLT5ub2RlLT5sb2NhbE5hbWUoKSkpIHsK
ICAgICAgICAgICAgICAgICAvLyBDcmVhdGUgYSBjbG9uZSBvZiB0aGlzIGVsZW1lbnQuCiAgICAg
ICAgICAgICAgICAgY3Vyck5vZGUgPSBjdXJyRWxlbS0+bm9kZS0+Y2xvbmVOb2RlKGZhbHNlKTsK
IApAQCAtMTI0NSw3ICsxMTEyLDcgQEAgdm9pZCBLSFRNTFBhcnNlcjo6aGFuZGxlUmVzaWR1YWxT
dHlsZUNsbwogICAgICAgICAvLyBXZSB3aWxsIGFjdHVhbGx5IHNjaGVkdWxlIHRoaXMgdGFnIGZv
ciByZW9wZW5pbmcKICAgICAgICAgLy8gYWZ0ZXIgd2UgY29tcGxldGUgdGhlIGNsb3NlIG9mIHRo
aXMgZW50aXJlIGJsb2NrLgogICAgICAgICBOb2RlSW1wbCogY3Vyck5vZGUgPSBjdXJyZW50Owot
ICAgICAgICBpZiAoaXNSZXNpZHVhbFN0eWxlVGFnKGN1cnItPmlkKSkgeworICAgICAgICBpZiAo
aXNSZXNpZHVhbFN0eWxlVGFnKGN1cnItPnRhZ05hbWUpKSB7CiAgICAgICAgICAgICAvLyBXZSd2
ZSBvdmVybG9hZGVkIHRoZSB1c2Ugb2Ygc3RhY2sgZWxlbWVudHMgYW5kIGFyZSBqdXN0IHJldXNp
bmcgdGhlCiAgICAgICAgICAgICAvLyBzdHJ1Y3Qgd2l0aCBhIHNsaWdodGx5IGRpZmZlcmVudCBt
ZWFuaW5nIHRvIHRoZSB2YXJpYWJsZXMuICBJbnN0ZWFkIG9mIGNoYWluaW5nCiAgICAgICAgICAg
ICAvLyBmcm9tIGlubmVybW9zdCB0byBvdXRlcm1vc3QsIHdlIGJ1aWxkIHVwIGEgbGlzdCBvZiBh
bGwgdGhlIHRhZ3Mgd2UgbmVlZCB0byByZW9wZW4KQEAgLTEyNjksNyArMTEzNiw3IEBAIHZvaWQg
S0hUTUxQYXJzZXI6OmhhbmRsZVJlc2lkdWFsU3R5bGVDbG8KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiBpdCBiZWNvbWVzIG5lY2Vzc2Fy
eSB0byBkbyBzby4KIH0KIAotdm9pZCBLSFRNTFBhcnNlcjo6cmVvcGVuUmVzaWR1YWxTdHlsZVRh
Z3MoSFRNTFN0YWNrRWxlbSogZWxlbSwgRE9NOjpOb2RlSW1wbCogbWFsZm9ybWVkVGFibGVQYXJl
bnQpCit2b2lkIEhUTUxQYXJzZXI6OnJlb3BlblJlc2lkdWFsU3R5bGVUYWdzKEhUTUxTdGFja0Vs
ZW0qIGVsZW0sIERPTTo6Tm9kZUltcGwqIG1hbGZvcm1lZFRhYmxlUGFyZW50KQogewogICAgIC8v
IExvb3AgZm9yIGVhY2ggdGFnIHRoYXQgbmVlZHMgdG8gYmUgcmVvcGVuZWQuCiAgICAgd2hpbGUg
KGVsZW0pIHsKQEAgLTEyODYsNyArMTE1Myw3IEBAIHZvaWQgS0hUTUxQYXJzZXI6OnJlb3BlblJl
c2lkdWFsU3R5bGVUYWcKICAgICAgICAgLy8gRklYTUU6IElzIGl0IHJlYWxseSBPSyB0byBpZ25v
cmUgdGhlIGV4Y2VwdGlvbnMgaGVyZT8KIAogICAgICAgICAvLyBOb3cgcHVzaCBhIG5ldyBzdGFj
ayBlbGVtZW50IGZvciB0aGlzIG5vZGUgd2UganVzdCBjcmVhdGVkLgotICAgICAgICBwdXNoQmxv
Y2soZWxlbS0+aWQsIGVsZW0tPmxldmVsKTsKKyAgICAgICAgcHVzaEJsb2NrKGVsZW0tPnRhZ05h
bWUsIGVsZW0tPmxldmVsKTsKIAogICAgICAgICAvLyBTZXQgb3VyIHN0cmF5VGFibGVDb250ZW50
IGJvb2xlYW4gaWYgbmVlZGVkLCBzbyB0aGF0IHRoZSByZW9wZW5lZCB0YWcgYWxzbyBrbm93cwog
ICAgICAgICAvLyB0aGF0IGl0IGlzIGluc2lkZSBhIG1hbGZvcm1lZCB0YWJsZS4KQEAgLTEzMDcs
MzUgKzExNzQsMjEgQEAgdm9pZCBLSFRNTFBhcnNlcjo6cmVvcGVuUmVzaWR1YWxTdHlsZVRhZwog
ICAgIH0KIH0KIAotdm9pZCBLSFRNTFBhcnNlcjo6cHVzaEJsb2NrKGludCBfaWQsIGludCBfbGV2
ZWwpCit2b2lkIEhUTUxQYXJzZXI6OnB1c2hCbG9jayhjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05h
bWUsIGludCBfbGV2ZWwpCiB7Ci0gICAgSFRNTFN0YWNrRWxlbSAqRWxlbSA9IG5ldyBIVE1MU3Rh
Y2tFbGVtKF9pZCwgX2xldmVsLCBjdXJyZW50LCBibG9ja1N0YWNrKTsKLQorICAgIEhUTUxTdGFj
a0VsZW0gKkVsZW0gPSBuZXcgSFRNTFN0YWNrRWxlbSh0YWdOYW1lLCBfbGV2ZWwsIGN1cnJlbnQs
IGJsb2NrU3RhY2spOwogICAgIGJsb2NrU3RhY2sgPSBFbGVtOwotICAgIGFkZEZvcmJpZGRlbihf
aWQsIGZvcmJpZGRlblRhZyk7CiB9CiAKLXZvaWQgS0hUTUxQYXJzZXI6OnBvcEJsb2NrKCBpbnQg
X2lkICkKK3ZvaWQgSFRNTFBhcnNlcjo6cG9wQmxvY2soY29uc3QgQXRvbWljU3RyaW5nJiBfdGFn
TmFtZSkKIHsKICAgICBIVE1MU3RhY2tFbGVtICpFbGVtID0gYmxvY2tTdGFjazsKICAgICAKICAg
ICBpbnQgbWF4TGV2ZWwgPSAwOwogCi0jaWZkZWYgUEFSU0VSX0RFQlVHCi0gICAga2REZWJ1Zygg
NjAzNSApIDw8ICJwb3BCbG9jaygiIDw8IGdldFRhZ05hbWUoX2lkKS5zdHJpbmcoKSA8PCAiKSIg
PDwgZW5kbDsKLSAgICB3aGlsZShFbGVtKSB7Ci0gICAgICAgIGtkRGVidWcoIDYwMzUpIDw8ICIg
ICA+ICIgPDwgZ2V0VGFnTmFtZShFbGVtLT5pZCkuc3RyaW5nKCkgPDwgZW5kbDsKLSAgICAgICAg
RWxlbSA9IEVsZW0tPm5leHQ7Ci0gICAgfQotICAgIEVsZW0gPSBibG9ja1N0YWNrOwotI2VuZGlm
Ci0KLSAgICB3aGlsZSggRWxlbSAmJiAoRWxlbS0+aWQgIT0gX2lkKSkKLSAgICB7CisgICAgd2hp
bGUgKEVsZW0gJiYgKEVsZW0tPnRhZ05hbWUgIT0gX3RhZ05hbWUpKSB7CiAgICAgICAgIGlmICht
YXhMZXZlbCA8IEVsZW0tPmxldmVsKQotICAgICAgICB7CiAgICAgICAgICAgICBtYXhMZXZlbCA9
IEVsZW0tPmxldmVsOwotICAgICAgICB9CiAgICAgICAgIEVsZW0gPSBFbGVtLT5uZXh0OwogICAg
IH0KIApAQCAtMTM0NSwyMCArMTE5OCwxOCBAQCB2b2lkIEtIVE1MUGFyc2VyOjpwb3BCbG9jaygg
aW50IF9pZCApCiAgICAgaWYgKG1heExldmVsID4gRWxlbS0+bGV2ZWwpIHsKICAgICAgICAgLy8g
V2UgZGlkbid0IG1hdGNoIGJlY2F1c2UgdGhlIHRhZyBpcyBpbiBhIGRpZmZlcmVudCBzY29wZSwg
ZS5nLiwKICAgICAgICAgLy8gPGI+PHA+Rm9vPC9iPi4gIFRyeSB0byBjb3JyZWN0IHRoZSBwcm9i
bGVtLgotICAgICAgICBpZiAoIWlzUmVzaWR1YWxTdHlsZVRhZyhfaWQpKQorICAgICAgICBpZiAo
IWlzUmVzaWR1YWxTdHlsZVRhZyhfdGFnTmFtZSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIHJldHVybiBoYW5kbGVSZXNpZHVhbFN0eWxlQ2xvc2VUYWdBY3Jvc3NCbG9ja3MoRWxlbSk7
CiAgICAgfQogCi0gICAgYm9vbCBpc0FmZmVjdGVkQnlTdHlsZSA9IGlzQWZmZWN0ZWRCeVJlc2lk
dWFsU3R5bGUoRWxlbS0+aWQpOworICAgIGJvb2wgaXNBZmZlY3RlZEJ5U3R5bGUgPSBpc0FmZmVj
dGVkQnlSZXNpZHVhbFN0eWxlKEVsZW0tPnRhZ05hbWUpOwogICAgIEhUTUxTdGFja0VsZW0qIHJl
c2lkdWFsU3R5bGVTdGFjayA9IDA7CiAgICAgTm9kZUltcGwqIG1hbGZvcm1lZFRhYmxlUGFyZW50
ID0gMDsKICAgICAKICAgICBFbGVtID0gYmxvY2tTdGFjazsKLSAgICB3aGlsZSAoRWxlbSkKLSAg
ICB7Ci0gICAgICAgIGlmIChFbGVtLT5pZCA9PSBfaWQpCi0gICAgICAgIHsKKyAgICB3aGlsZSAo
RWxlbSkgeworICAgICAgICBpZiAoRWxlbS0+dGFnTmFtZSA9PSBfdGFnTmFtZSkgewogICAgICAg
ICAgICAgaW50IHN0cmF5VGFibGUgPSBpblN0cmF5VGFibGVDb250ZW50OwogICAgICAgICAgICAg
cG9wT25lQmxvY2soKTsKICAgICAgICAgICAgIEVsZW0gPSAwOwpAQCAtMTM2OSwxNCArMTIyMCwx
MyBAQCB2b2lkIEtIVE1MUGFyc2VyOjpwb3BCbG9jayggaW50IF9pZCApCiAgICAgICAgICAgICAv
LyBtdXN0IGFsc28ga25vdyB0aGF0IGl0IGlzIHRoZSByb290IG9mIG1hbGZvcm1lZCBjb250ZW50
IGluc2lkZSBhIDx0Ym9keT4vPHRyPi4KICAgICAgICAgICAgIGlmIChzdHJheVRhYmxlICYmIChp
blN0cmF5VGFibGVDb250ZW50IDwgc3RyYXlUYWJsZSkgJiYgcmVzaWR1YWxTdHlsZVN0YWNrKSB7
CiAgICAgICAgICAgICAgICAgTm9kZUltcGwqIGN1cnIgPSBjdXJyZW50OwotICAgICAgICAgICAg
ICAgIHdoaWxlIChjdXJyICYmIGN1cnItPmlkKCkgIT0gSURfVEFCTEUpCisgICAgICAgICAgICAg
ICAgd2hpbGUgKGN1cnIgJiYgIWN1cnItPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0YWJsZSgpKSkK
ICAgICAgICAgICAgICAgICAgICAgY3VyciA9IGN1cnItPnBhcmVudE5vZGUoKTsKICAgICAgICAg
ICAgICAgICBtYWxmb3JtZWRUYWJsZVBhcmVudCA9IGN1cnIgPyBjdXJyLT5wYXJlbnROb2RlKCkg
OiAwOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewot
ICAgICAgICAgICAgaWYgKEVsZW0tPmlkID09IElEX0ZPUk0gJiYgZm9ybSkKKyAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICBpZiAoZm9ybSAmJiBFbGVtLT50YWdOYW1lID09IEhUTUxOYW1lczo6
Zm9ybSgpKQogICAgICAgICAgICAgICAgIC8vIEEgPGZvcm0+IGlzIGJlaW5nIGNsb3NlZCBwcmVt
YXR1cmVseSAoYW5kIHRoaXMgaXMKICAgICAgICAgICAgICAgICAvLyBtYWxmb3JtZWQgSFRNTCku
ICBTZXQgYW4gYXR0cmlidXRlIG9uIHRoZSBmb3JtIHRvIGNsZWFyIG91dCBpdHMKICAgICAgICAg
ICAgICAgICAvLyBib3R0b20gbWFyZ2luLgpAQCAtMTM4NSw3ICsxMjM1LDcgQEAgdm9pZCBLSFRN
TFBhcnNlcjo6cG9wQmxvY2soIGludCBfaWQgKQogICAgICAgICAgICAgLy8gU2NoZWR1bGUgdGhp
cyB0YWcgZm9yIHJlb3BlbmluZwogICAgICAgICAgICAgLy8gYWZ0ZXIgd2UgY29tcGxldGUgdGhl
IGNsb3NlIG9mIHRoaXMgZW50aXJlIGJsb2NrLgogICAgICAgICAgICAgTm9kZUltcGwqIGN1cnJO
b2RlID0gY3VycmVudDsKLSAgICAgICAgICAgIGlmIChpc0FmZmVjdGVkQnlTdHlsZSAmJiBpc1Jl
c2lkdWFsU3R5bGVUYWcoRWxlbS0+aWQpKSB7CisgICAgICAgICAgICBpZiAoaXNBZmZlY3RlZEJ5
U3R5bGUgJiYgaXNSZXNpZHVhbFN0eWxlVGFnKEVsZW0tPnRhZ05hbWUpKSB7CiAgICAgICAgICAg
ICAgICAgLy8gV2UndmUgb3ZlcmxvYWRlZCB0aGUgdXNlIG9mIHN0YWNrIGVsZW1lbnRzIGFuZCBh
cmUganVzdCByZXVzaW5nIHRoZQogICAgICAgICAgICAgICAgIC8vIHN0cnVjdCB3aXRoIGEgc2xp
Z2h0bHkgZGlmZmVyZW50IG1lYW5pbmcgdG8gdGhlIHZhcmlhYmxlcy4gIEluc3RlYWQgb2YgY2hh
aW5pbmcKICAgICAgICAgICAgICAgICAvLyBmcm9tIGlubmVybW9zdCB0byBvdXRlcm1vc3QsIHdl
IGJ1aWxkIHVwIGEgbGlzdCBvZiBhbGwgdGhlIHRhZ3Mgd2UgbmVlZCB0byByZW9wZW4KQEAgLTE0
MDgsMTkgKzEyNTgsMTQgQEAgdm9pZCBLSFRNTFBhcnNlcjo6cG9wQmxvY2soIGludCBfaWQgKQog
ICAgIHJlb3BlblJlc2lkdWFsU3R5bGVUYWdzKHJlc2lkdWFsU3R5bGVTdGFjaywgbWFsZm9ybWVk
VGFibGVQYXJlbnQpOwogfQogCi12b2lkIEtIVE1MUGFyc2VyOjpwb3BPbmVCbG9jayhib29sIGRl
bEJsb2NrKQordm9pZCBIVE1MUGFyc2VyOjpwb3BPbmVCbG9jayhib29sIGRlbEJsb2NrKQogewog
ICAgIEhUTUxTdGFja0VsZW0gKkVsZW0gPSBibG9ja1N0YWNrOwogCiAgICAgLy8gd2Ugc2hvdWxk
IG5ldmVyIGdldCBoZXJlLCBidXQgc29tZSBiYWQgaHRtbCBtaWdodCBjYXVzZSBpdC4KLSNpZm5k
ZWYgUEFSU0VSX0RFQlVHCi0gICAgaWYoIUVsZW0pIHJldHVybjsKLSNlbHNlCi0gICAga2REZWJ1
ZyggNjAzNSApIDw8ICJwb3BwaW5nIGJsb2NrOiAiIDw8IGdldFRhZ05hbWUoRWxlbS0+aWQpLnN0
cmluZygpIDw8ICIoIiA8PCBFbGVtLT5pZCA8PCAiKSIgPDwgZW5kbDsKLSNlbmRpZgotCi0jaWYg
U1BFRURfREVCVUcgPCAxCi0gICAgaWYoKEVsZW0tPm5vZGUgIT0gY3VycmVudCkpIHsKKyAgICBp
ZiAoIUVsZW0pIHJldHVybjsKKyAgICAKKyAgICBpZiAoKEVsZW0tPm5vZGUgIT0gY3VycmVudCkp
IHsKICAgICAgICAgaWYgKGN1cnJlbnQtPm1haW50YWluc1N0YXRlKCkgJiYgZG9jKCkpewogICAg
ICAgICAgICAgZG9jKCktPnJlZ2lzdGVyTWFpbnRhaW5zU3RhdGUoY3VycmVudCk7CiAgICAgICAg
ICAgICBRU3RyaW5nTGlzdCAmc3RhdGVzID0gZG9jKCktPnJlc3RvcmVTdGF0ZSgpOwpAQCAtMTQz
MSw5ICsxMjc2LDYgQEAgdm9pZCBLSFRNTFBhcnNlcjo6cG9wT25lQmxvY2soYm9vbCBkZWxCbAog
ICAgICAgICAvLyBBIGZldyBlbGVtZW50cyAoPGFwcGxldD4sIDxvYmplY3Q+KSBuZWVkIHRvIGtu
b3cgd2hlbiBhbGwgY2hpbGQgZWxlbWVudHMgKDxwYXJhbT5zKSBhcmUgYXZhaWxhYmxlOgogICAg
ICAgICBjdXJyZW50LT5jbG9zZVJlbmRlcmVyKCk7CiAgICAgfQotI2VuZGlmCi0KLSAgICByZW1v
dmVGb3JiaWRkZW4oRWxlbS0+aWQsIGZvcmJpZGRlblRhZyk7CiAKICAgICBibG9ja1N0YWNrID0g
RWxlbS0+bmV4dDsKICAgICBzZXRDdXJyZW50KEVsZW0tPm5vZGUpOwpAQCAtMTQ0NSwxOSArMTI4
NywxOSBAQCB2b2lkIEtIVE1MUGFyc2VyOjpwb3BPbmVCbG9jayhib29sIGRlbEJsCiAgICAgICAg
IGRlbGV0ZSBFbGVtOwogfQogCi12b2lkIEtIVE1MUGFyc2VyOjpwb3BJbmxpbmVCbG9ja3MoKQor
dm9pZCBIVE1MUGFyc2VyOjpwb3BJbmxpbmVCbG9ja3MoKQogewotICAgIHdoaWxlIChibG9ja1N0
YWNrICYmIGN1cnJlbnQtPmlzSW5saW5lKCkpCisgICAgd2hpbGUgKGJsb2NrU3RhY2sgJiYgaXNJ
bmxpbmUoY3VycmVudCkpCiAgICAgICAgIHBvcE9uZUJsb2NrKCk7CiB9CiAKLXZvaWQgS0hUTUxQ
YXJzZXI6OmZyZWVCbG9jaygpCit2b2lkIEhUTUxQYXJzZXI6OmZyZWVCbG9jaygpCiB7CiAgICAg
d2hpbGUgKGJsb2NrU3RhY2spCiAgICAgICAgIHBvcE9uZUJsb2NrKCk7CiB9CiAKLXZvaWQgS0hU
TUxQYXJzZXI6OmNyZWF0ZUhlYWQoKQordm9pZCBIVE1MUGFyc2VyOjpjcmVhdGVIZWFkKCkKIHsK
ICAgICBpZihoZWFkIHx8ICFkb2MoKS0+Zmlyc3RDaGlsZCgpKQogICAgICAgICByZXR1cm47CkBA
IC0xNDc0LDcgKzEzMTYsNyBAQCB2b2lkIEtIVE1MUGFyc2VyOjpjcmVhdGVIZWFkKCkKICAgICB9
CiB9CiAKLU5vZGVJbXBsICpLSFRNTFBhcnNlcjo6aGFuZGxlSXNpbmRleCggVG9rZW4gKnQgKQor
Tm9kZUltcGwgKkhUTUxQYXJzZXI6OmhhbmRsZUlzaW5kZXgoIFRva2VuICp0ICkKIHsKICAgICBO
b2RlSW1wbCAqbjsKICAgICBIVE1MRm9ybUVsZW1lbnRJbXBsICpteWZvcm0gPSBmb3JtOwpAQCAt
MTUwNCw3ICsxMzQ2LDcgQEAgTm9kZUltcGwgKktIVE1MUGFyc2VyOjpoYW5kbGVJc2luZGV4KCBU
bwogICAgIHJldHVybiBuOwogfQogCi12b2lkIEtIVE1MUGFyc2VyOjpzdGFydEJvZHkoKQordm9p
ZCBIVE1MUGFyc2VyOjpzdGFydEJvZHkoKQogewogICAgIGlmKGluQm9keSkgcmV0dXJuOwogCkBA
IC0xNTE2LDcgKzEzNTgsNyBAQCB2b2lkIEtIVE1MUGFyc2VyOjpzdGFydEJvZHkoKQogICAgIH0K
IH0KIAotdm9pZCBLSFRNTFBhcnNlcjo6ZmluaXNoZWQoKQordm9pZCBIVE1MUGFyc2VyOjpmaW5p
c2hlZCgpCiB7CiAgICAgLy8gSW4gdGhlIGNhc2Ugb2YgYSBjb21wbGV0ZWx5IGVtcHR5IGRvY3Vt
ZW50LCBoZXJlJ3MgdGhlIHBsYWNlIHRvIGNyZWF0ZSB0aGUgSFRNTCBlbGVtZW50LgogICAgIGlm
IChjdXJyZW50LT5pc0RvY3VtZW50Tm9kZSgpICYmIGN1cnJlbnQtPmZpcnN0Q2hpbGQoKSA9PSAw
KSB7CkluZGV4OiBraHRtbC9odG1sL2h0bWxwYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9odG1sL2h0bWxwYXJzZXIuaCx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS4yNwpkaWZmIC11IC1wIC1yMS4yNyBraHRtbC9odG1sL2h0bWxwYXJzZXIuaAotLS0g
a2h0bWwvaHRtbC9odG1scGFyc2VyLmgJNiBKYW4gMjAwNSAyMToxMzoxNiAtMDAwMAkxLjI3Cisr
KyBraHRtbC9odG1sL2h0bWxwYXJzZXIuaAk4IEp1bCAyMDA1IDA1OjUwOjE2IC0wMDAwCkBAIC0y
OSwxOSArMjksOSBAQAogI2lmbmRlZiBIVE1MUEFSU0VSX0gKICNkZWZpbmUgSFRNTFBBUlNFUl9I
CiAKLS8vIDAgYWxsCi0vLyAxIGRvbXRyZWUgKyByZW5kZXJ0cmVlICsgc3R5bGVGb3JFbGVtZW50
LCBubyBsYXlvdXRpbmcKLS8vIDIgZG9tdHJlZSBvbmx5Ci0jZGVmaW5lIFNQRUVEX0RFQlVHIDAK
LQotI2lmZGVmIFNQRUVEX0RFQlVHCi0jaW5jbHVkZSA8cWRhdGV0aW1lLmg+Ci0jZW5kaWYKLQog
I2luY2x1ZGUgImRvbS9kb21fc3RyaW5nLmgiCiAjaW5jbHVkZSAieG1sL2RvbV9ub2RlaW1wbC5o
IgogI2luY2x1ZGUgImh0bWwvaHRtbF9kb2N1bWVudGltcGwuaCIKLSNpbmNsdWRlICJtaXNjL2h0
bWx0YWdzLmgiCiAKIGNsYXNzIEtIVE1MVmlldzsKIGNsYXNzIEhUTUxTdGFja0VsZW07CkBAIC02
MSwxOCArNTEsMTYgQEAgbmFtZXNwYWNlIGtodG1sIHsKICAgICBjbGFzcyBUb2tlbjsKIH07CiAK
LWNsYXNzIEtIVE1MUGFyc2VyOwotCiAvKioKICAqIFRoZSBwYXJzZXIgZm9yIGh0bWwuIEl0IHJl
Y2VpdmVzIGEgc3RyZWFtIG9mIHRva2VucyBmcm9tIHRoZSBIVE1MVG9rZW5pemVyLCBhbmQKICAq
IGJ1aWxkcyB1cCB0aGUgRG9jdW1lbnQgc3RydWN0dXJlIGZvcm0gaXQuCiAgKi8KLWNsYXNzIEtI
VE1MUGFyc2VyCitjbGFzcyBIVE1MUGFyc2VyCiB7CiBwdWJsaWM6Ci0gICAgS0hUTUxQYXJzZXIo
S0hUTUxWaWV3ICp3LCBET006OkRvY3VtZW50UHRyICppLCBib29sIGluY2x1ZGVzQ29tbWVudHM9
ZmFsc2UpOwotICAgIEtIVE1MUGFyc2VyKERPTTo6RG9jdW1lbnRGcmFnbWVudEltcGwgKmZyYWcs
IERPTTo6RG9jdW1lbnRQdHIgKmRvYywgYm9vbCBpbmNsdWRlc0NvbW1lbnRzPWZhbHNlKTsKLSAg
ICB2aXJ0dWFsIH5LSFRNTFBhcnNlcigpOworICAgIEhUTUxQYXJzZXIoS0hUTUxWaWV3ICp3LCBE
T006OkRvY3VtZW50UHRyICppLCBib29sIGluY2x1ZGVzQ29tbWVudHM9ZmFsc2UpOworICAgIEhU
TUxQYXJzZXIoRE9NOjpEb2N1bWVudEZyYWdtZW50SW1wbCAqZnJhZywgRE9NOjpEb2N1bWVudFB0
ciAqZG9jLCBib29sIGluY2x1ZGVzQ29tbWVudHM9ZmFsc2UpOworICAgIHZpcnR1YWwgfkhUTUxQ
YXJzZXIoKTsKIAogICAgIC8qKgogICAgICAqIHBhcnNlcyBvbmUgdG9rZW4gZGVsaXZlcmVkIGJ5
IHRoZSB0b2tlbml6ZXIKQEAgLTg5LDcgKzc3LDcgQEAgcHVibGljOgogICAgICAqLwogICAgIHZv
aWQgcmVzZXQoKTsKIAotICAgIGJvb2wgc2tpcE1vZGUoKSBjb25zdCB7IHJldHVybiAoZGlzY2Fy
ZF91bnRpbCAhPSAwKTsgfQorICAgIGJvb2wgc2tpcE1vZGUoKSBjb25zdCB7IHJldHVybiAhZGlz
Y2FyZF91bnRpbC5pc051bGwoKTsgfQogICAgIGJvb2wgbm9TcGFjZXMoKSBjb25zdCB7IHJldHVy
biAhaW5Cb2R5OyB9CiAgICAgYm9vbCBzZWxlY3RNb2RlKCkgY29uc3QgeyByZXR1cm4gaW5TZWxl
Y3Q7IH0KIApAQCAtOTcsNDggKzg1LDcwIEBAIHB1YmxpYzoKICAgICBET006OkRvY3VtZW50UHRy
ICpkb2NQdHIoKSBjb25zdCB7IHJldHVybiBkb2N1bWVudDsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAg
dm9pZCBzZXRDdXJyZW50KERPTTo6Tm9kZUltcGwgKm5ld0N1cnJlbnQpOworICAgIHZvaWQgc2V0
Q3VycmVudChET006Ok5vZGVJbXBsKiBuZXdDdXJyZW50KTsKKyAgICB2b2lkIHNldFNraXBNb2Rl
KGNvbnN0IERPTTo6UXVhbGlmaWVkTmFtZSYgcU5hbWUpIHsgZGlzY2FyZF91bnRpbCA9IHFOYW1l
LmxvY2FsTmFtZSgpOyB9CiAKICAgICBLSFRNTFZpZXcgKkhUTUxXaWRnZXQ7CiAgICAgRE9NOjpE
b2N1bWVudFB0ciAqZG9jdW1lbnQ7CiAKICAgICAvKgotICAgICAqIGdlbmVyYXRlIGFuIGVsZW1l
bnQgZnJvbSB0aGUgdG9rZW4KKyAgICAgKiBnZW5lcmF0ZSBhIG5vZGUgZnJvbSB0aGUgdG9rZW4K
ICAgICAgKi8KLSAgICBET006Ok5vZGVJbXBsICpnZXRFbGVtZW50KGtodG1sOjpUb2tlbiAqKTsK
KyAgICBET006Ok5vZGVJbXBsICpnZXROb2RlKGtodG1sOjpUb2tlbiAqKTsKKyAgICBib29sIHRl
eHRDcmVhdGVFcnJvckNoZWNrKGtodG1sOjpUb2tlbiosIERPTTo6Tm9kZUltcGwqJik7CisgICAg
Ym9vbCBjb21tZW50Q3JlYXRlRXJyb3JDaGVjayhraHRtbDo6VG9rZW4qLCBET006Ok5vZGVJbXBs
KiYpOworICAgIGJvb2wgaGVhZENyZWF0ZUVycm9yQ2hlY2soa2h0bWw6OlRva2VuKiwgRE9NOjpO
b2RlSW1wbComKTsKKyAgICBib29sIGJvZHlDcmVhdGVFcnJvckNoZWNrKGtodG1sOjpUb2tlbios
IERPTTo6Tm9kZUltcGwqJik7CisgICAgYm9vbCBmcmFtZXNldENyZWF0ZUVycm9yQ2hlY2soa2h0
bWw6OlRva2VuKiwgRE9NOjpOb2RlSW1wbComKTsKKyAgICBib29sIGlmcmFtZUNyZWF0ZUVycm9y
Q2hlY2soa2h0bWw6OlRva2VuKiwgRE9NOjpOb2RlSW1wbComKTsKKyAgICBib29sIGZvcm1DcmVh
dGVFcnJvckNoZWNrKGtodG1sOjpUb2tlbiosIERPTTo6Tm9kZUltcGwqJik7CisgICAgYm9vbCBp
c2luZGV4Q3JlYXRlRXJyb3JDaGVjayhraHRtbDo6VG9rZW4qLCBET006Ok5vZGVJbXBsKiYpOwor
ICAgIGJvb2wgc2VsZWN0Q3JlYXRlRXJyb3JDaGVjayhraHRtbDo6VG9rZW4qLCBET006Ok5vZGVJ
bXBsKiYpOworICAgIGJvb2wgZGRDcmVhdGVFcnJvckNoZWNrKGtodG1sOjpUb2tlbiosIERPTTo6
Tm9kZUltcGwqJik7CisgICAgYm9vbCBkdENyZWF0ZUVycm9yQ2hlY2soa2h0bWw6OlRva2VuKiwg
RE9NOjpOb2RlSW1wbComKTsKKyAgICBib29sIG5lc3RlZENyZWF0ZUVycm9yQ2hlY2soa2h0bWw6
OlRva2VuKiwgRE9NOjpOb2RlSW1wbComKTsKKyAgICBib29sIG5lc3RlZFN0eWxlQ3JlYXRlRXJy
b3JDaGVjayhraHRtbDo6VG9rZW4qLCBET006Ok5vZGVJbXBsKiYpOworICAgIGJvb2wgdGFibGVD
ZWxsQ3JlYXRlRXJyb3JDaGVjayhraHRtbDo6VG9rZW4qLCBET006Ok5vZGVJbXBsKiYpOworICAg
IGJvb2wgdGFibGVTZWN0aW9uQ3JlYXRlRXJyb3JDaGVjayhraHRtbDo6VG9rZW4qLCBET006Ok5v
ZGVJbXBsKiYpOworICAgIGJvb2wgbm9lbWJlZENyZWF0ZUVycm9yQ2hlY2soa2h0bWw6OlRva2Vu
KiwgRE9NOjpOb2RlSW1wbComKTsKKyAgICBib29sIG5vc2NyaXB0Q3JlYXRlRXJyb3JDaGVjayhr
aHRtbDo6VG9rZW4qLCBET006Ok5vZGVJbXBsKiYpOworICAgIGJvb2wgbm9mcmFtZXNDcmVhdGVF
cnJvckNoZWNrKGtodG1sOjpUb2tlbiosIERPTTo6Tm9kZUltcGwqJik7CisgICAgYm9vbCBub2xh
eWVyQ3JlYXRlRXJyb3JDaGVjayhraHRtbDo6VG9rZW4qLCBET006Ok5vZGVJbXBsKiYpOwogCiAg
ICAgdm9pZCBwcm9jZXNzQ2xvc2VUYWcoa2h0bWw6OlRva2VuICopOwogCiAgICAgYm9vbCBpbnNl
cnROb2RlKERPTTo6Tm9kZUltcGwgKm4sIGJvb2wgZmxhdCA9IGZhbHNlKTsKKyAgICBib29sIGhh
bmRsZUVycm9yKERPTTo6Tm9kZUltcGwqIG4sIGJvb2wgZmxhdCwgY29uc3QgRE9NOjpBdG9taWNT
dHJpbmcmIGxvY2FsTmFtZSwgaW50IHRhZ1ByaW9yaXR5KTsKKyAgICAKKyAgICAvLyBUaGUgY3Vy
cmVudGx5IGFjdGl2ZSBlbGVtZW50ICh0aGUgb25lIG5ldyBlbGVtZW50cyB3aWxsIGJlIGFkZGVk
IHRvKS4gIENhbiBiZSBhIERvY3VtZW50RnJhZ21lbnQsIGEgRG9jdW1lbnQgb3IgYW4gRWxlbWVu
dC4KKyAgICBET006Ok5vZGVJbXBsKiBjdXJyZW50OwogCi0gICAgLyoKLSAgICAgKiBUaGUgY3Vy
cmVudGx5IGFjdGl2ZSBlbGVtZW50ICh0aGUgb25lIG5ldyBlbGVtZW50cyB3aWxsIGJlIGFkZGVk
IHRvKQotICAgICAqLwotICAgIERPTTo6Tm9kZUltcGwgKmN1cnJlbnQ7CiAgICAgYm9vbCBjdXJy
ZW50SXNSZWZlcmVuY2VkOwogCiAgICAgSFRNTFN0YWNrRWxlbSAqYmxvY2tTdGFjazsKIAotICAg
IHZvaWQgcHVzaEJsb2NrKCBpbnQgX2lkLCBpbnQgX2xldmVsKTsKLQotICAgIHZvaWQgcG9wQmxv
Y2soIGludCBfaWQgKTsKKyAgICB2b2lkIHB1c2hCbG9jayhjb25zdCBET006OkF0b21pY1N0cmlu
ZyYgdGFnTmFtZSwgaW50IF9sZXZlbCk7CisgICAgdm9pZCBwb3BCbG9jayhjb25zdCBET006OkF0
b21pY1N0cmluZyYgdGFnTmFtZSk7CisgICAgdm9pZCBwb3BCbG9jayhjb25zdCBET006OlF1YWxp
ZmllZE5hbWUmIHFOYW1lKSB7IHJldHVybiBwb3BCbG9jayhxTmFtZS5sb2NhbE5hbWUoKSk7IH0g
Ly8gQ29udmVuaWVuY2UgZnVuY3Rpb24gZm9yIHJlYWRhYmlsaXR5LgogICAgIHZvaWQgcG9wT25l
QmxvY2soYm9vbCBkZWxCbG9jayA9IHRydWUpOwogICAgIHZvaWQgcG9wSW5saW5lQmxvY2tzKCk7
CiAKLSAgICB2b2lkIGZyZWVCbG9jayggdm9pZCk7CisgICAgdm9pZCBmcmVlQmxvY2soKTsKIAog
ICAgIHZvaWQgY3JlYXRlSGVhZCgpOwogCi0gICAgYm9vbCBpc1Jlc2lkdWFsU3R5bGVUYWcoaW50
IF9pZCk7Ci0gICAgYm9vbCBpc0FmZmVjdGVkQnlSZXNpZHVhbFN0eWxlKGludCBfaWQpOworICAg
IGJvb2wgaXNSZXNpZHVhbFN0eWxlVGFnKGNvbnN0IERPTTo6QXRvbWljU3RyaW5nJiB0YWdOYW1l
KTsKKyAgICBib29sIGlzQWZmZWN0ZWRCeVJlc2lkdWFsU3R5bGUoY29uc3QgRE9NOjpBdG9taWNT
dHJpbmcmIHRhZ05hbWUpOwogICAgIHZvaWQgaGFuZGxlUmVzaWR1YWxTdHlsZUNsb3NlVGFnQWNy
b3NzQmxvY2tzKEhUTUxTdGFja0VsZW0qIGVsZW0pOwogICAgIHZvaWQgcmVvcGVuUmVzaWR1YWxT
dHlsZVRhZ3MoSFRNTFN0YWNrRWxlbSogZWxlbSwgRE9NOjpOb2RlSW1wbCogbWFsZm9ybWVkVGFi
bGVQYXJlbnQpOwogCi0gICAgYm9vbCBhbGxvd05lc3RlZFJlZHVuZGFudFRhZyhpbnQgX2lkKTsK
KyAgICBib29sIGFsbG93TmVzdGVkUmVkdW5kYW50VGFnKGNvbnN0IERPTTo6QXRvbWljU3RyaW5n
JiB0YWdOYW1lKTsKICAgICAKLSAgICBzdGF0aWMgYm9vbCBpc0hlYWRlclRhZyhpbnQgX2lkKTsK
KyAgICBzdGF0aWMgYm9vbCBpc0hlYWRlclRhZyhjb25zdCBET006OkF0b21pY1N0cmluZyYgdGFn
TmFtZSk7CiAgICAgdm9pZCBwb3BOZXN0ZWRIZWFkZXJUYWcoKTsKIAorICAgIGJvb2wgaXNJbmxp
bmUoRE9NOjpOb2RlSW1wbCogbm9kZSkgY29uc3Q7CisgICAgCiAgICAgLyoKICAgICAgKiBjdXJy
ZW50bHkgYWN0aXZlIGZvcm0KICAgICAgKi8KQEAgLTE3NSwxOCArMTg1LDEyIEBAIHByb3RlY3Rl
ZDoKICAgICAvKgogICAgICAqIHRlbGxzIHRoZSBwYXJzZXIgdG8gZGlzY2FyZCBhbGwgdGFncywg
dW50aWwgaXQgcmVhY2hlcyB0aGUgb25lIHNwZWNpZmllZAogICAgICAqLwotICAgIGludCBkaXNj
YXJkX3VudGlsOworICAgIERPTTo6QXRvbWljU3RyaW5nIGRpc2NhcmRfdW50aWw7CiAKICAgICBi
b29sIGhlYWRMb2FkZWQ7CiAgICAgaW50IGluU3RyYXlUYWJsZUNvbnRlbnQ7CiAKICAgICBib29s
IGluY2x1ZGVzQ29tbWVudHNJbkRPTTsKLSAgICAKLSAgICB1c2hvcnQgZm9yYmlkZGVuVGFnW0lE
X0xBU1RfVEFHICsgMV07Ci0gICAgCi0jaWYgU1BFRURfREVCVUcgPiAwCi0gICAgUVRpbWUgcXQ7
Ci0jZW5kaWYKIH07Ci0KKyAgICAKICNlbmRpZiAvLyBIVE1MUEFSU0VSX0gKSW5kZXg6IGtodG1s
L2h0bWwvaHRtbHRva2VuaXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dl
YkNvcmUva2h0bWwvaHRtbC9odG1sdG9rZW5pemVyLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS45NQpkaWZmIC11IC1wIC1yMS45NSBraHRtbC9odG1sL2h0bWx0b2tlbml6ZXIuY3BwCi0tLSBr
aHRtbC9odG1sL2h0bWx0b2tlbml6ZXIuY3BwCTUgSnVsIDIwMDUgMjM6MjE6MTAgLTAwMDAJMS45
NQorKysga2h0bWwvaHRtbC9odG1sdG9rZW5pemVyLmNwcAk4IEp1bCAyMDA1IDA1OjUwOjE4IC0w
MDAwCkBAIC0zOSw3ICszOSw2IEBACiAjaW5jbHVkZSAiaHRtbC9odG1sdG9rZW5pemVyLmgiCiAj
aW5jbHVkZSAiaHRtbC9odG1sX2RvY3VtZW50aW1wbC5oIgogI2luY2x1ZGUgImh0bWwvaHRtbHBh
cnNlci5oIgotI2luY2x1ZGUgImh0bWwvZHRkLmgiCiAKICNpbmNsdWRlICJtaXNjL2xvYWRlci5o
IgogI2luY2x1ZGUgIm1pc2MvaHRtbGhhc2hlcy5oIgpAQCAtNjMsNyArNjIsMTAgQEAgdXNpbmcg
RE9NOjpET01TdHJpbmc7CiB1c2luZyBET006OkRPTVN0cmluZ0ltcGw7CiB1c2luZyBET006OkRv
Y3VtZW50SW1wbDsKIHVzaW5nIERPTTo6ZW1wdHlBdG9tOwotdXNpbmcgRE9NOjplbmRUYWdSZXF1
aXJlbWVudDsKK3VzaW5nIERPTTo6Y29tbWVudEF0b207Cit1c2luZyBET006Om51bGxBdG9tOwor
dXNpbmcgRE9NOjp0ZXh0QXRvbTsKK3VzaW5nIERPTTo6SFRNTE5hbWVzOwogCiAvLyB0dXJuIG9m
ZiBpbmxpbmluZyB0byB2b2lkIHdhcm5pbmcgd2l0aCBuZXdlciBnY2MKICN1bmRlZiBfX2lubGlu
ZQpAQCAtMjM5LDcgKzI0MSw3IEBAIEhUTUxUb2tlbml6ZXI6OkhUTUxUb2tlbml6ZXIoRE9NOjpE
b2N1bWUKICAgICBzY3JpcHRDb2RlID0gMDsKICAgICBzY3JpcHRDb2RlU2l6ZSA9IHNjcmlwdENv
ZGVNYXhTaXplID0gc2NyaXB0Q29kZVJlc3luYyA9IDA7CiAgICAgY2hhcnNldHMgPSBLR2xvYmFs
OjpjaGFyc2V0cygpOwotICAgIHBhcnNlciA9IG5ldyBLSFRNTFBhcnNlcihfdmlldywgX2RvYywg
aW5jbHVkZXNDb21tZW50cyk7CisgICAgcGFyc2VyID0gbmV3IEhUTUxQYXJzZXIoX3ZpZXcsIF9k
b2MsIGluY2x1ZGVzQ29tbWVudHMpOwogICAgIG1fZXhlY3V0aW5nU2NyaXB0ID0gMDsKICAgICBs
b2FkaW5nRXh0U2NyaXB0ID0gZmFsc2U7CiAgICAgb25Ib2xkID0gZmFsc2U7CkBAIC0yNTksNyAr
MjYxLDcgQEAgSFRNTFRva2VuaXplcjo6SFRNTFRva2VuaXplcihET006OkRvY3VtZQogICAgIHNj
cmlwdENvZGUgPSAwOwogICAgIHNjcmlwdENvZGVTaXplID0gc2NyaXB0Q29kZU1heFNpemUgPSBz
Y3JpcHRDb2RlUmVzeW5jID0gMDsKICAgICBjaGFyc2V0cyA9IEtHbG9iYWw6OmNoYXJzZXRzKCk7
Ci0gICAgcGFyc2VyID0gbmV3IEtIVE1MUGFyc2VyKGksIF9kb2MsIGluY2x1ZGVzQ29tbWVudHMp
OworICAgIHBhcnNlciA9IG5ldyBIVE1MUGFyc2VyKGksIF9kb2MsIGluY2x1ZGVzQ29tbWVudHMp
OwogICAgIG1fZXhlY3V0aW5nU2NyaXB0ID0gMDsKICAgICBsb2FkaW5nRXh0U2NyaXB0ID0gZmFs
c2U7CiAgICAgb25Ib2xkID0gZmFsc2U7CkBAIC00NTEsMTAgKzQ1MywxMCBAQCB2b2lkIEhUTUxU
b2tlbml6ZXI6OnBhcnNlU3BlY2lhbChUb2tlbml6CiAgICAgICAgICAgICBlbHNlIHsKICAgICAg
ICAgICAgICAgICBwcm9jZXNzTGlzdGluZyhUb2tlbml6ZXJTdHJpbmcoc2NyaXB0Q29kZSwgc2Ny
aXB0Q29kZVNpemUpKTsKICAgICAgICAgICAgICAgICBwcm9jZXNzVG9rZW4oKTsKLSAgICAgICAg
ICAgICAgICBpZiAoIHN0eWxlICkgICAgICAgICB7IGN1cnJUb2tlbi5pZCA9IElEX1NUWUxFICsg
SURfQ0xPU0VfVEFHOyB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoIHRleHRhcmVhICkgeyBj
dXJyVG9rZW4uaWQgPSBJRF9URVhUQVJFQSArIElEX0NMT1NFX1RBRzsgfQotICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKCB0aXRsZSApIHsgY3VyclRva2VuLmlkID0gSURfVElUTEUgKyBJRF9DTE9T
RV9UQUc7IH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmICggeG1wICkgIHsgY3VyclRva2VuLmlk
ID0gSURfWE1QICsgSURfQ0xPU0VfVEFHOyB9CisgICAgICAgICAgICAgICAgaWYgKCBzdHlsZSAp
ICAgICAgICAgeyBjdXJyVG9rZW4udGFnTmFtZSA9IEhUTUxOYW1lczo6c3R5bGUoKS5sb2NhbE5h
bWUoKTsgY3VyclRva2VuLmJlZ2luVGFnID0gZmFsc2U7IH0KKyAgICAgICAgICAgICAgICBlbHNl
IGlmICggdGV4dGFyZWEgKSB7IGN1cnJUb2tlbi50YWdOYW1lID0gSFRNTE5hbWVzOjp0ZXh0YXJl
YSgpLmxvY2FsTmFtZSgpOyBjdXJyVG9rZW4uYmVnaW5UYWcgPSBmYWxzZTsgfQorICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKCB0aXRsZSApIHsgY3VyclRva2VuLnRhZ05hbWUgPSBIVE1MTmFtZXM6
OnRpdGxlKCkubG9jYWxOYW1lKCk7IGN1cnJUb2tlbi5iZWdpblRhZyA9IGZhbHNlOyB9CisgICAg
ICAgICAgICAgICAgZWxzZSBpZiAoIHhtcCApICB7IGN1cnJUb2tlbi50YWdOYW1lID0gSFRNTE5h
bWVzOjp4bXAoKS5sb2NhbE5hbWUoKTsgY3VyclRva2VuLmJlZ2luVGFnID0gZmFsc2U7IH0KICAg
ICAgICAgICAgICAgICBwcm9jZXNzVG9rZW4oKTsKICAgICAgICAgICAgICAgICBzdHlsZSA9IHNj
cmlwdCA9IHN0eWxlID0gdGV4dGFyZWEgPSB0aXRsZSA9IHhtcCA9IGZhbHNlOwogICAgICAgICAg
ICAgICAgIHRxdW90ZSA9IE5vUXVvdGU7CkBAIC01MjQsNyArNTI2LDggQEAgdm9pZCBIVE1MVG9r
ZW5pemVyOjpzY3JpcHRIYW5kbGVyKCkKICAgICBwcm9jZXNzTGlzdGluZyhUb2tlbml6ZXJTdHJp
bmcoc2NyaXB0Q29kZSwgc2NyaXB0Q29kZVNpemUpKTsKICAgICBRU3RyaW5nIGV4U2NyaXB0KCBi
dWZmZXIsIGRlc3QtYnVmZmVyICk7CiAgICAgcHJvY2Vzc1Rva2VuKCk7Ci0gICAgY3VyclRva2Vu
LmlkID0gSURfU0NSSVBUICsgSURfQ0xPU0VfVEFHOworICAgIGN1cnJUb2tlbi50YWdOYW1lID0g
SFRNTE5hbWVzOjpzY3JpcHQoKS5sb2NhbE5hbWUoKTsKKyAgICBjdXJyVG9rZW4uYmVnaW5UYWcg
PSBmYWxzZTsKICAgICBwcm9jZXNzVG9rZW4oKTsKIAogICAgIFRva2VuaXplclN0cmluZyAqc2F2
ZWRQcmVwZW5kaW5nU3JjID0gY3VycmVudFByZXBlbmRpbmdTcmM7CkBAIC03MDEsMTAgKzcwNCwx
MiBAQCB2b2lkIEhUTUxUb2tlbml6ZXI6OnBhcnNlQ29tbWVudChUb2tlbml6CiAgICAgICAgICAg
ICAgICAgICAgICAgICBjaGVja1NjcmlwdEJ1ZmZlcigpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgc2NyaXB0Q29kZVsgc2NyaXB0Q29kZVNpemUgXSA9IDA7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBzY3JpcHRDb2RlWyBzY3JpcHRDb2RlU2l6ZSArIDEgXSA9IDA7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBjdXJyVG9rZW4uaWQgPSBJRF9DT01NRU5UOworICAgICAgICAgICAgICAgICAg
ICAgICAgY3VyclRva2VuLnRhZ05hbWUgPSBjb21tZW50QXRvbTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGN1cnJUb2tlbi5iZWdpblRhZyA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBwcm9jZXNzTGlzdGluZyhUb2tlbml6ZXJTdHJpbmcoc2NyaXB0Q29kZSwgc2NyaXB0Q29kZVNp
emUgLSBlbmRDaGFyc0NvdW50KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzVG9r
ZW4oKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJUb2tlbi5pZCA9IElEX0NPTU1FTlQg
KyBJRF9DTE9TRV9UQUc7CisgICAgICAgICAgICAgICAgICAgICAgICBjdXJyVG9rZW4udGFnTmFt
ZSA9IGNvbW1lbnRBdG9tOworICAgICAgICAgICAgICAgICAgICAgICAgY3VyclRva2VuLmJlZ2lu
VGFnID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzVG9rZW4oKTsKICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBzY3JpcHRDb2RlU2l6ZSA9
IDA7CkBAIC0xMDIyLDEwICsxMDI3LDEyIEBAIHZvaWQgSFRNTFRva2VuaXplcjo6cGFyc2VUYWco
VG9rZW5pemVyU3QKICAgICAgICAgICAgICAgICAgICAgZmluaXNoID0gdHJ1ZTsKICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIC8v
IFVzZSB0b2xvd2VyKCkgaW5zdGVhZCBvZiB8IDB4MjAgdG8gbG93ZXJjYXNlIHRoZSBjaGFyIGJl
Y2F1c2UgdGhlcmUgaXMgbm8gCi0gICAgICAgICAgICAgICAgLy8gcGVyZm9ybWFuY2UgZ2FpbiBp
biB1c2luZyB8IDB4MjAgc2luY2UgdG9sb3dlcigpIGlzIG9wdGltaXplZCBhbmQgCi0gICAgICAg
ICAgICAgICAgLy8gfCAweDIwIHR1cm5zIGNoYXJhY3RlcnMgc3VjaCBhcyAnXycgaW50byBqdW5r
LgotICAgICAgICAgICAgICAgIGNCdWZmZXJbY0J1ZmZlclBvcysrXSA9IHRvbG93ZXIoY3VyY2hh
cik7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gdG9sb3dlcigpIHNob3dz
IHVwIG9uIHByb2ZpbGVzLiBUaGlzIGlzIGZhc3RlciEKKyAgICAgICAgICAgICAgICBpZiAoY3Vy
Y2hhciA+PSAnQScgJiYgY3VyY2hhciA8PSAnWicpCisgICAgICAgICAgICAgICAgICAgIGNCdWZm
ZXJbY0J1ZmZlclBvcysrXSA9IGN1cmNoYXIgKyAoJ2EnIC0gJ0EnKTsKKyAgICAgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGNCdWZmZXJbY0J1ZmZlclBvcysrXSA9IGN1cmNo
YXI7CiAgICAgICAgICAgICAgICAgKytzcmM7CiAgICAgICAgICAgICB9CiAKQEAgLTEwNDcsMjcg
KzEwNTQsMTMgQEAgdm9pZCBIVE1MVG9rZW5pemVyOjpwYXJzZVRhZyhUb2tlbml6ZXJTdAogICAg
ICAgICAgICAgICAgICAgICAvLyBTdGFydCBUYWcKICAgICAgICAgICAgICAgICAgICAgYmVnaW5U
YWcgPSB0cnVlOwogCi0gICAgICAgICAgICAgICAgLy8gQWNjZXB0IGVtcHR5IHhtbCB0YWdzIGxp
a2UgPGJyLz4uICBXZSB0cmltIG9mZiB0aGUgIi8iIHNvIHRoYXQgd2hlbiB3ZSBjYWxsCi0gICAg
ICAgICAgICAgICAgLy8gZ2V0VGFnSUQsIHdlJ2xsIGxvb2sgdXAgImJyIiBhcyB0aGUgdGFnIG5h
bWUgYW5kIG5vdCAiYnIvIi4KKyAgICAgICAgICAgICAgICAvLyBJZ25vcmUgdGhlIC8gaW4gZmFr
ZSB4bWwgdGFncyBsaWtlIDxici8+LiAgV2UgdHJpbSBvZmYgdGhlICIvIiBzbyB0aGF0IHdlJ2xs
IGdldCAiYnIiIGFzIHRoZSB0YWcgbmFtZSBhbmQgbm90ICJici8iLgogICAgICAgICAgICAgICAg
IGlmKGxlbiA+IDEgJiYgcHRyW2xlbi0xXSA9PSAnLycgKQogICAgICAgICAgICAgICAgICAgICBw
dHJbLS1sZW5dID0gJ1wwJzsKIAotICAgICAgICAgICAgICAgIC8vIExvb2sgdXAgdGhlIHRhZ0lE
IGZvciB0aGUgc3BlY2lmaWVkIHRhZyBuYW1lIChub3cgdGhhdCB3ZSd2ZSBzaGF2ZWQgb2ZmIGFu
eQotICAgICAgICAgICAgICAgIC8vIGludmFsaWQgLyB0aGF0IG1pZ2h0IGhhdmUgZm9sbG93ZWQg
dGhlIG5hbWUpLgotICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHRhZ0lEID0gZ2V0VGFn
SUQocHRyLCBsZW4pOwotICAgICAgICAgICAgICAgIGlmICghdGFnSUQpIHsKLSAgICAgICAgICAg
ICAgICAgICAgRE9NU3RyaW5nIHRhZ05hbWUocHRyKTsKLSAgICAgICAgICAgICAgICAgICAgRG9j
dW1lbnRJbXBsICpkb2MgPSBwYXJzZXItPmRvY1B0cigpLT5kb2N1bWVudCgpOwotICAgICAgICAg
ICAgICAgICAgICBpZiAoZG9jLT5pc1ZhbGlkTmFtZSh0YWdOYW1lKSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHRhZ0lEID0gcGFyc2VyLT5kb2NQdHIoKS0+ZG9jdW1lbnQoKS0+dGFnSWQoMCwg
dGFnTmFtZS5pbXBsZW1lbnRhdGlvbigpLCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGlmICh0YWdJRCkgewotI2lmZGVmIFRPS0VOX0RFQlVHCi0gICAgICAgICAg
ICAgICAgICAgIFFDU3RyaW5nIHRtcChwdHIsIGxlbisxKTsKLSAgICAgICAgICAgICAgICAgICAg
a2REZWJ1ZyggNjAzNiApIDw8ICJmb3VuZCB0YWcgaWQ9IiA8PCB0YWdJRCA8PCAiOiAiIDw8IHRt
cC5kYXRhKCkgPDwgZW5kbDsKLSNlbmRpZgotICAgICAgICAgICAgICAgICAgICBjdXJyVG9rZW4u
aWQgPSBiZWdpblRhZyA/IHRhZ0lEIDogdGFnSUQgKyBJRF9DTE9TRV9UQUc7Ci0gICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIC8vIE5vdyB0aGF0IHdlJ3ZlIHNoYXZlZCBvZmYgYW55
IGludmFsaWQgLyB0aGF0IG1pZ2h0IGhhdmUgZm9sbG93ZWQgdGhlIG5hbWUpLCBtYWtlIHRoZSB0
YWcuCisgICAgICAgICAgICAgICAgY3VyclRva2VuLnRhZ05hbWUgPSBBdG9taWNTdHJpbmcocHRy
KTsKKyAgICAgICAgICAgICAgICBjdXJyVG9rZW4uYmVnaW5UYWcgPSBiZWdpblRhZzsKICAgICAg
ICAgICAgICAgICBkZXN0ID0gYnVmZmVyOwogICAgICAgICAgICAgICAgIHRhZyA9IFNlYXJjaEF0
dHJpYnV0ZTsKICAgICAgICAgICAgICAgICBjQnVmZmVyUG9zID0gMDsKQEAgLTExMTgsMTUgKzEx
MTEsNiBAQCB2b2lkIEhUTUxUb2tlbml6ZXI6OnBhcnNlVGFnKFRva2VuaXplclN0CiAgICAgICAg
ICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRy
TmFtZSA9IFFTdHJpbmc6OmZyb21MYXRpbjEoUUNTdHJpbmcoY0J1ZmZlciwgY0J1ZmZlclBvcysx
KS5kYXRhKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJOYW1lUHJlc2VudCA9
ICFhdHRyTmFtZS5pc0VtcHR5KCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBU
aGlzIGlzIGEgZGVsaWJlcmF0ZSBxdWlyayB0byBtYXRjaCBNb3ppbGxhIGFuZCBPcGVyYS4gIFdl
IGhhdmUgdG8gZG8gdGhpcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNpbmNlIHNp
dGVzIHRoYXQgdXNlIHRoZSAic3RhbmRhcmRzLWNvbXBsaWFudCIgcGF0aCBzb21ldGltZXMgc2Vu
ZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDxzY3JpcHQgc3JjPSJmb28uanMiLz4u
ICBCb3RoIE1veiBhbmQgT3BlcmEgd2lsbCBob25vciB0aGlzLCBkZXNwaXRlIGl0Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gYmVpbmcgYm9ndXMgSFRNTC4gIFRoZXkgZG8gbm90IGhv
bm9yIHRoZSAiLyIgZm9yIG90aGVyIHRhZ3MuICBUaGlzIGJlaGF2aW9yCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gYWxzbyBkZXZpYXRlcyBmcm9tIFdpbklFLCBidXQgaW4gdGhpcyBj
YXNlIHdlJ2xsIGp1c3QgY29weSBNb3ogYW5kIE9wZXJhLgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChjdXJyVG9rZW4uaWQgPT0gSURfU0NSSVBUICYmIGN1cmNoYXIgPT0gJz4nICYm
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJOYW1lID09ICIvIikKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyclRva2VuLmZsYXQgPSB0cnVlOwogICAgICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgICAgICAgICBkZXN0ID0gYnVmZmVyOwpAQCAtMTE0MiwxMCArMTEyNiwxMiBAQCB2b2lk
IEhUTUxUb2tlbml6ZXI6OnBhcnNlVGFnKFRva2VuaXplclN0CiAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAvLyBVc2UgdG9sb3dlcigpIGluc3RlYWQgb2YgfCAweDIwIHRvIGxvd2Vy
Y2FzZSB0aGUgY2hhciBiZWNhdXNlIHRoZXJlIGlzIG5vIAotICAgICAgICAgICAgICAgIC8vIHBl
cmZvcm1hbmNlIGdhaW4gaW4gdXNpbmcgfCAweDIwIHNpbmNlIHRvbG93ZXIoKSBpcyBvcHRpbWl6
ZWQgYW5kIAotICAgICAgICAgICAgICAgIC8vIHwgMHgyMCB0dXJucyBjaGFyYWN0ZXJzIHN1Y2gg
YXMgJ18nIGludG8ganVuay4KLSAgICAgICAgICAgICAgICBjQnVmZmVyW2NCdWZmZXJQb3MrK10g
PSB0b2xvd2VyKGN1cmNoYXIpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8v
IHRvbG93ZXIoKSBzaG93cyB1cCBvbiBwcm9maWxlcy4gVGhpcyBpcyBmYXN0ZXIhCisgICAgICAg
ICAgICAgICAgaWYgKGN1cmNoYXIgPj0gJ0EnICYmIGN1cmNoYXIgPD0gJ1onKQorICAgICAgICAg
ICAgICAgICAgICBjQnVmZmVyW2NCdWZmZXJQb3MrK10gPSBjdXJjaGFyICsgKCdhJyAtICdBJyk7
CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBjQnVmZmVyW2NCdWZm
ZXJQb3MrK10gPSBjdXJjaGFyOwogICAgICAgICAgICAgICAgICsrc3JjOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgaWYgKCBjQnVmZmVyUG9zID09IENCVUZMRU4gKSB7CkBAIC0xMzI4LDE4
ICsxMzE0LDE1IEBAIHZvaWQgSFRNTFRva2VuaXplcjo6cGFyc2VUYWcoVG9rZW5pemVyU3QKICAg
ICAgICAgICAgIGlmICgqc3JjICE9ICc8JykKICAgICAgICAgICAgICAgICArK3NyYzsKIAotICAg
ICAgICAgICAgaWYgKCAhY3VyclRva2VuLmlkICkgLy9zdG9wIGlmIHRhZyBpcyB1bmtub3duCisg
ICAgICAgICAgICBpZiAoY3VyclRva2VuLnRhZ05hbWUgPT0gbnVsbEF0b20pIC8vc3RvcCBpZiB0
YWcgaXMgdW5rbm93bgogICAgICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICAgICAgdWlu
dCB0YWdJRCA9IGN1cnJUb2tlbi5pZDsKKyAgICAgICAgICAgIEF0b21pY1N0cmluZyB0YWdOYW1l
ID0gY3VyclRva2VuLnRhZ05hbWU7CiAjaWYgZGVmaW5lZChUT0tFTl9ERUJVRykgJiYgVE9LRU5f
REVCVUcgPiAwCiAgICAgICAgICAgICBrZERlYnVnKCA2MDM2ICkgPDwgImFwcGVuZGluZyBUYWc6
ICIgPDwgdGFnSUQgPDwgZW5kbDsKICNlbmRpZgotICAgICAgICAgICAgYm9vbCBiZWdpblRhZyA9
ICFjdXJyVG9rZW4uZmxhdCAmJiAodGFnSUQgPD0gSURfQ0xPU0VfVEFHKTsKLQotICAgICAgICAg
ICAgaWYgKHRhZ0lEID4gSURfQ0xPU0VfVEFHKQotICAgICAgICAgICAgICAgIHRhZ0lEIC09IElE
X0NMT1NFX1RBRzsKLSAgICAgICAgICAgIGVsc2UgaWYgKHRhZ0lEID09IElEX1NDUklQVCkgewor
ICAgICAgICAgICAgYm9vbCBiZWdpblRhZyA9ICFjdXJyVG9rZW4uZmxhdCAmJiBjdXJyVG9rZW4u
YmVnaW5UYWc7CisgICAgICAgICAgICBpZiAoYmVnaW5UYWcgJiYgY3VyclRva2VuLnRhZ05hbWUg
PT0gSFRNTE5hbWVzOjpzY3JpcHQoKSkgewogICAgICAgICAgICAgICAgIEF0dHJpYnV0ZUltcGwq
IGEgPSAwOwogICAgICAgICAgICAgICAgIGJvb2wgZm91bmRUeXBlQXR0cmlidXRlID0gZmFsc2U7
CiAgICAgICAgICAgICAgICAgc2NyaXB0U3JjID0gUVN0cmluZzo6bnVsbDsKQEAgLTE0MTQsNzEg
KzEzOTcsNDkgQEAgdm9pZCBIVE1MVG9rZW5pemVyOjpwYXJzZVRhZyhUb2tlbml6ZXJTdAogCiAg
ICAgICAgICAgICBwcm9jZXNzVG9rZW4oKTsKIAotICAgICAgICAgICAgLy8gd2UgaGF2ZSB0byB0
YWtlIGNhcmUgdG8gY2xvc2UgdGhlIHByZSBibG9jayBpbgotICAgICAgICAgICAgLy8gY2FzZSB3
ZSBlbmNvdW50ZXIgYW4gdW5hbGxvd2VkIGVsZW1lbnQuLi4uCi0gICAgICAgICAgICBpZihwcmUg
JiYgYmVnaW5UYWcgJiYgIURPTTo6Y2hlY2tDaGlsZChJRF9QUkUsIHRhZ0lELCAhcGFyc2VyLT5k
b2MoKS0+aW5Db21wYXRNb2RlKCkpKSB7Ci0gICAgICAgICAgICAgICAga2REZWJ1Zyg2MDM2KSA8
PCAiIG5vdCBhbGxvd2VkIGluIDxwcmU+ICIgPDwgKGludCl0YWdJRCA8PCBlbmRsOwotICAgICAg
ICAgICAgICAgIHByZSA9IGZhbHNlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBzd2l0
Y2goIHRhZ0lEICkgewotICAgICAgICAgICAgY2FzZSBJRF9QUkU6CisgICAgICAgICAgICBpZiAo
dGFnTmFtZSA9PSBIVE1MTmFtZXM6OnByZSgpKSB7CiAgICAgICAgICAgICAgICAgcHJlUG9zID0g
MDsKICAgICAgICAgICAgICAgICBwcmUgPSBiZWdpblRhZzsKICAgICAgICAgICAgICAgICBkaXNj
YXJkID0gTEZEaXNjYXJkOyAvLyBEaXNjYXJkIHRoZSBmaXJzdCBMRiBhZnRlciB3ZSBvcGVuIGEg
cHJlLgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBJRF9TQ1JJUFQ6
CisgICAgICAgICAgICB9IGVsc2UgaWYgKHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpzY3JpcHQoKSkg
ewogICAgICAgICAgICAgICAgIGlmIChiZWdpblRhZykgewogICAgICAgICAgICAgICAgICAgICBz
ZWFyY2hTdG9wcGVyID0gc2NyaXB0RW5kOwogICAgICAgICAgICAgICAgICAgICBzZWFyY2hTdG9w
cGVyTGVuID0gODsKICAgICAgICAgICAgICAgICAgICAgc2NyaXB0ID0gdHJ1ZTsKICAgICAgICAg
ICAgICAgICAgICAgcGFyc2VTcGVjaWFsKHNyYyk7CiAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKHRhZ0lEIDw9IElEX0NMT1NFX1RBRykgeyAvLyBIYW5kbGUgPHNj
cmlwdCBzcmM9ImZvbyIvPgotICAgICAgICAgICAgICAgICAgICBzY3JpcHQgPSB0cnVlOwotICAg
ICAgICAgICAgICAgICAgICBzY3JpcHRIYW5kbGVyKCk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBJRF9TVFlMRToKKyAgICAgICAg
ICAgIH0gZWxzZSBpZiAodGFnTmFtZSA9PSBIVE1MTmFtZXM6OnN0eWxlKCkpIHsKICAgICAgICAg
ICAgICAgICBpZiAoYmVnaW5UYWcpIHsKICAgICAgICAgICAgICAgICAgICAgc2VhcmNoU3RvcHBl
ciA9IHN0eWxlRW5kOwogICAgICAgICAgICAgICAgICAgICBzZWFyY2hTdG9wcGVyTGVuID0gNzsK
ICAgICAgICAgICAgICAgICAgICAgc3R5bGUgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBw
YXJzZVNwZWNpYWwoc3JjKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBjYXNlIElEX1RFWFRBUkVBOgorICAgICAgICAgICAgfSBlbHNlIGlm
ICh0YWdOYW1lID09IEhUTUxOYW1lczo6dGV4dGFyZWEoKSkgewogICAgICAgICAgICAgICAgIGlm
KGJlZ2luVGFnKSB7CiAgICAgICAgICAgICAgICAgICAgIHNlYXJjaFN0b3BwZXIgPSB0ZXh0YXJl
YUVuZDsKICAgICAgICAgICAgICAgICAgICAgc2VhcmNoU3RvcHBlckxlbiA9IDEwOwogICAgICAg
ICAgICAgICAgICAgICB0ZXh0YXJlYSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIHBhcnNl
U3BlY2lhbChzcmMpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIGNhc2UgSURfVElUTEU6Ci0gICAgICAgICAgICAgICAgaWYgKGJlZ2luVGFn
KSB7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHRhZ05hbWUgPT0gSFRNTE5hbWVzOjp0aXRsZSgp
KSB7CisgICAgICAgICAgICAgICAgIGlmIChiZWdpblRhZykgewogICAgICAgICAgICAgICAgICAg
ICBzZWFyY2hTdG9wcGVyID0gdGl0bGVFbmQ7CiAgICAgICAgICAgICAgICAgICAgIHNlYXJjaFN0
b3BwZXJMZW4gPSA3OwogICAgICAgICAgICAgICAgICAgICB0aXRsZSA9IHRydWU7CiAgICAgICAg
ICAgICAgICAgICAgIHBhcnNlU3BlY2lhbChzcmMpOwogICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgSURfWE1QOgorICAgICAgICAgICAg
fSBlbHNlIGlmICh0YWdOYW1lID09IEhUTUxOYW1lczo6eG1wKCkpIHsKICAgICAgICAgICAgICAg
ICBpZiAoYmVnaW5UYWcpIHsKICAgICAgICAgICAgICAgICAgICAgc2VhcmNoU3RvcHBlciA9IHht
cEVuZDsKICAgICAgICAgICAgICAgICAgICAgc2VhcmNoU3RvcHBlckxlbiA9IDU7CiAgICAgICAg
ICAgICAgICAgICAgIHhtcCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIHBhcnNlU3BlY2lh
bChzcmMpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIGNhc2UgSURfU0VMRUNUOgorICAgICAgICAgICAgfSBlbHNlIGlmICh0YWdOYW1lID09
IEhUTUxOYW1lczo6c2VsZWN0KCkpCiAgICAgICAgICAgICAgICAgc2VsZWN0ID0gYmVnaW5UYWc7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIElEX1BMQUlOVEVYVDoK
KyAgICAgICAgICAgIGVsc2UgaWYgKHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpwbGFpbnRleHQoKSkK
ICAgICAgICAgICAgICAgICBwbGFpbnRleHQgPSBiZWdpblRhZzsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIH0KLQogICAgICAgICAgICAgcmV0dXJuOyAvLyBGaW5pc2hlZCBw
YXJzaW5nIHRhZyEKICAgICAgICAgfQogICAgICAgICB9IC8vIGVuZCBzd2l0Y2gKQEAgLTE5ODks
MTAgKzE5NTAsMTAgQEAgdm9pZCBIVE1MVG9rZW5pemVyOjpwcm9jZXNzVG9rZW4oKQogI2VuZGlm
CiAgICAgICAgIGN1cnJUb2tlbi50ZXh0ID0gbmV3IERPTVN0cmluZ0ltcGwoIGJ1ZmZlciwgZGVz
dCAtIGJ1ZmZlciApOwogICAgICAgICBjdXJyVG9rZW4udGV4dC0+cmVmKCk7Ci0gICAgICAgIGlm
IChjdXJyVG9rZW4uaWQgIT0gSURfQ09NTUVOVCkKLSAgICAgICAgICAgIGN1cnJUb2tlbi5pZCA9
IElEX1RFWFQ7CisgICAgICAgIGlmIChjdXJyVG9rZW4udGFnTmFtZSAhPSBjb21tZW50QXRvbSkK
KyAgICAgICAgICAgIGN1cnJUb2tlbi50YWdOYW1lID0gdGV4dEF0b207CiAgICAgfQotICAgIGVs
c2UgaWYoIWN1cnJUb2tlbi5pZCkgeworICAgIGVsc2UgaWYgKGN1cnJUb2tlbi50YWdOYW1lID09
IG51bGxBdG9tKSB7CiAgICAgICAgIGN1cnJUb2tlbi5yZXNldCgpOwogICAgICAgICBpZiAoanNQ
cm94eSkKICAgICAgICAgICAgIGpzUHJveHktPnNldEV2ZW50SGFuZGxlckxpbmVubyhsaW5lbm8r
c3JjLmxpbmVDb3VudCgpKTsKSW5kZXg6IGtodG1sL2h0bWwvaHRtbHRva2VuaXplci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbHRva2VuaXpl
ci5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjM2CmRpZmYgLXUgLXAgLXIxLjM2IGtodG1sL2h0
bWwvaHRtbHRva2VuaXplci5oCi0tLSBraHRtbC9odG1sL2h0bWx0b2tlbml6ZXIuaAk1IEp1bCAy
MDA1IDIzOjIxOjEwIC0wMDAwCTEuMzYKKysrIGtodG1sL2h0bWwvaHRtbHRva2VuaXplci5oCTgg
SnVsIDIwMDUgMDU6NTA6MTggLTAwMDAKQEAgLTM0LDggKzM0LDYgQEAKICNpbmNsdWRlIDxxcHRy
cXVldWUuaD4KIAogI2luY2x1ZGUgIm1pc2MvbG9hZGVyX2NsaWVudC5oIgotI2luY2x1ZGUgIm1p
c2MvaHRtbHRhZ3MuaCIKLSNpbmNsdWRlICJ4bWwvZG9tX3N0cmluZ2ltcGwuaCIKICNpbmNsdWRl
ICJ4bWwveG1sX3Rva2VuaXplci5oIgogI2luY2x1ZGUgImh0bWwvaHRtbF9lbGVtZW50aW1wbC5o
IgogI2luY2x1ZGUgInhtbC9kb21fZG9jaW1wbC5oIgpAQCAtNDcsNyArNDUsNyBAQAogI2VuZGlm
CiAKIGNsYXNzIEtDaGFyc2V0czsKLWNsYXNzIEtIVE1MUGFyc2VyOworY2xhc3MgSFRNTFBhcnNl
cjsKIGNsYXNzIEtIVE1MVmlldzsKIAogbmFtZXNwYWNlIERPTSB7CkBAIC03MCwyMiArNjgsMjQg
QEAgY2xhc3MgVG9rZW4KIHsKIHB1YmxpYzoKICAgICBUb2tlbigpIHsKLSAgICAgICAgaWQgPSAw
OwogICAgICAgICBhdHRycyA9IDA7CiAgICAgICAgIHRleHQgPSAwOworICAgICAgICBiZWdpblRh
ZyA9IHRydWU7CiAgICAgICAgIGZsYXQgPSBmYWxzZTsKICAgICAgICAgLy9xRGVidWcoIm5ldyB0
b2tlbiwgY3JlYXRpbmcgJTA4bHgiLCBhdHRycyk7CiAgICAgfQorCiAgICAgflRva2VuKCkgewot
ICAgICAgICBpZihhdHRycykgYXR0cnMtPmRlcmVmKCk7Ci0gICAgICAgIGlmKHRleHQpIHRleHQt
PmRlcmVmKCk7CisgICAgICAgIGlmIChhdHRycykgYXR0cnMtPmRlcmVmKCk7CisgICAgICAgIGlm
ICh0ZXh0KSB0ZXh0LT5kZXJlZigpOwogICAgIH0KKwogICAgIHZvaWQgYWRkQXR0cmlidXRlKERP
TTo6RG9jdW1lbnRJbXBsKiBkb2MsIFFDaGFyKiBidWZmZXIsIGNvbnN0IFFTdHJpbmcmIGF0dHJO
YW1lLCBjb25zdCBET006OkF0b21pY1N0cmluZyYgdikKICAgICB7CiAgICAgICAgIERPTTo6QXR0
cmlidXRlSW1wbCogYSA9IDA7Ci0gICAgICAgIGlmKGJ1ZmZlci0+dW5pY29kZSgpKQorICAgICAg
ICBpZiAoYnVmZmVyLT51bmljb2RlKCkpCiAgICAgICAgICAgICBhID0gbmV3IERPTTo6TWFwcGVk
QXR0cmlidXRlSW1wbChidWZmZXItPnVuaWNvZGUoKSwgdik7Ci0gICAgICAgIGVsc2UgaWYgKCAh
YXR0ck5hbWUuaXNFbXB0eSgpICYmIGF0dHJOYW1lICE9ICIvIiApCisgICAgICAgIGVsc2UgaWYg
KCFhdHRyTmFtZS5pc0VtcHR5KCkgJiYgYXR0ck5hbWUgIT0gIi8iKQogICAgICAgICAgICAgYSA9
IG5ldyBET006Ok1hcHBlZEF0dHJpYnV0ZUltcGwoZG9jLT5hdHRySWQoMCwgRE9NOjpET01TdHJp
bmcoYXR0ck5hbWUpLmltcGxlbWVudGF0aW9uKCksIGZhbHNlKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYpOwogCkBAIC05NywyMyArOTcsMzMgQEAgcHVi
bGljOgogICAgICAgICAgICAgYXR0cnMtPmluc2VydEF0dHJpYnV0ZShhKTsKICAgICAgICAgfQog
ICAgIH0KKworICAgIGJvb2wgaXNPcGVuVGFnKGNvbnN0IERPTTo6UXVhbGlmaWVkTmFtZSYgZnVs
bE5hbWUpIGNvbnN0IHsgcmV0dXJuIGJlZ2luVGFnICYmIGZ1bGxOYW1lLmxvY2FsTmFtZSgpID09
IHRhZ05hbWU7IH0KKyAgICBib29sIGlzQ2xvc2VUYWcoY29uc3QgRE9NOjpRdWFsaWZpZWROYW1l
JiBmdWxsTmFtZSkgY29uc3QgeyByZXR1cm4gIWJlZ2luVGFnICYmIGZ1bGxOYW1lLmxvY2FsTmFt
ZSgpID09IHRhZ05hbWU7IH0KKwogICAgIHZvaWQgcmVzZXQoKQogICAgIHsKLSAgICAgICAgaWYo
YXR0cnMpIHsKKyAgICAgICAgaWYgKGF0dHJzKSB7CiAgICAgICAgICAgICBhdHRycy0+ZGVyZWYo
KTsKICAgICAgICAgICAgIGF0dHJzID0gMDsKICAgICAgICAgfQotICAgICAgICBpZCA9IDA7Ci0g
ICAgICAgIGlmKHRleHQpIHsKKyAgICAgICAgCisgICAgICAgIHRhZ05hbWUgPSBET006Om51bGxB
dG9tOworICAgICAgICAKKyAgICAgICAgaWYgKHRleHQpIHsKICAgICAgICAgICAgIHRleHQtPmRl
cmVmKCk7CiAgICAgICAgICAgICB0ZXh0ID0gMDsKICAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgYmVnaW5UYWcgPSB0cnVlOwogICAgICAgICBmbGF0ID0gZmFsc2U7CiAgICAgfQorCiAgICAg
RE9NOjpOYW1lZE1hcHBlZEF0dHJNYXBJbXBsKiBhdHRyczsKICAgICBET006OkRPTVN0cmluZ0lt
cGwqIHRleHQ7Ci0gICAgdXNob3J0IGlkOwotICAgIGJvb2wgZmxhdDsKKyAgICBET006OkF0b21p
Y1N0cmluZyB0YWdOYW1lOworICAgIGJvb2wgYmVnaW5UYWcgOiAxOworICAgIGJvb2wgZmxhdCA6
IDE7CiB9OwogCiAvLyBUaGUgY291bnQgb2Ygc3BhY2VzIHVzZWQgZm9yIGVhY2ggdGFiLgpAQCAt
MzY4LDcgKzM3OCw3IEBAIHByb3RlY3RlZDoKICAgICBUb2tlbml6ZXJTdHJpbmcgc3JjOwogCiAg
ICAgS0NoYXJzZXRzICpjaGFyc2V0czsKLSAgICBLSFRNTFBhcnNlciAqcGFyc2VyOworICAgIEhU
TUxQYXJzZXIgKnBhcnNlcjsKIAogICAgIFFHdWFyZGVkUHRyPEtIVE1MVmlldz4gdmlldzsKICAg
ICAKSW5kZXg6IGtodG1sL21pc2MvZGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1dlYkNvcmUva2h0bWwvbWlzYy9kZWNvZGVyLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS4zNQpkaWZmIC11IC1wIC1yMS4zNSBraHRtbC9taXNjL2RlY29kZXIuY3BwCi0tLSBraHRt
bC9taXNjL2RlY29kZXIuY3BwCTI4IEp1biAyMDA1IDE4OjQ3OjEyIC0wMDAwCTEuMzUKKysrIGto
dG1sL21pc2MvZGVjb2Rlci5jcHAJOCBKdWwgMjAwNSAwNTo1MDoxOSAtMDAwMApAQCAtNDEsNiAr
NDEsMTIgQEAgdXNpbmcgbmFtZXNwYWNlIGtodG1sOwogI2luY2x1ZGUgPGtkZWJ1Zy5oPgogI2lu
Y2x1ZGUgPGtsb2NhbGUuaD4KIAorI2luY2x1ZGUgImh0bWxuYW1lcy5oIgorCit1c2luZyBET006
OkF0b21pY1N0cmluZzsKK3VzaW5nIERPTTo6SFRNTE5hbWVzOwordXNpbmcgRE9NOjpudWxsQXRv
bTsKKwogY2xhc3MgS2FuamlDb2RlCiB7CiBwdWJsaWM6CkBAIC01MjYsMTIgKzUzMiw4IEBAIFFT
dHJpbmcgRGVjb2Rlcjo6ZGVjb2RlKGNvbnN0IGNoYXIgKmRhdGEKICAgICAgICAgICAgICAgICAg
ICAgICAgIGxlbisrOwogICAgICAgICAgICAgICAgICAgICB9CiAJCSAgICB0bXBbbGVuXSA9IDA7
Ci0gICAgICAgICAgICAgICAgICAgIGludCBpZCA9IGtodG1sOjpnZXRUYWdJRCh0bXAsIGxlbik7
Ci0gICAgICAgICAgICAgICAgICAgIGlmKGVuZCkgaWQgKz0gSURfQ0xPU0VfVEFHOwotCi0gICAg
ICAgICAgICAgICAgICAgIHN3aXRjaCggaWQgKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2Ug
SURfTUVUQToKLSAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBBdG9t
aWNTdHJpbmcgdGFnKHRtcCk7CisgICAgICAgICAgICAgICAgICAgIGlmICghZW5kICYmIHRhZyA9
PSBIVE1MTmFtZXM6Om1ldGEoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm91bmQg
YSBtZXRhIHRhZy4uLgogICAgICAgICAgICAgICAgICAgICAgICAgLy9wdHIgKz0gNTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiBlbmQgPSBwdHI7CkBAIC01NzAsMjggKzU3
MiwxMSBAQCBRU3RyaW5nIERlY29kZXI6OmRlY29kZShjb25zdCBjaGFyICpkYXRhCiAKIAkJCSAg
ICBwb3MgPSBlbmRwb3MgKyAxOwogCQkJfQotCQkgICAgfQotICAgICAgICAgICAgICAgICAgICBj
YXNlIChJRF9NRVRBK0lEX0NMT1NFX1RBRyk6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURf
U0NSSVBUOgotICAgICAgICAgICAgICAgICAgICBjYXNlIChJRF9TQ1JJUFQrSURfQ0xPU0VfVEFH
KToKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9OT1NDUklQVDoKLSAgICAgICAgICAgICAg
ICAgICAgY2FzZSAoSURfTk9TQ1JJUFQrSURfQ0xPU0VfVEFHKToKLSAgICAgICAgICAgICAgICAg
ICAgY2FzZSBJRF9TVFlMRToKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAoSURfU1RZTEUrSURf
Q0xPU0VfVEFHKToKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9MSU5LOgotICAgICAgICAg
ICAgICAgICAgICBjYXNlIChJRF9MSU5LK0lEX0NMT1NFX1RBRyk6Ci0gICAgICAgICAgICAgICAg
ICAgIGNhc2UgSURfT0JKRUNUOgotICAgICAgICAgICAgICAgICAgICBjYXNlIChJRF9PQkpFQ1Qr
SURfQ0xPU0VfVEFHKToKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9USVRMRToKLSAgICAg
ICAgICAgICAgICAgICAgY2FzZSAoSURfVElUTEUrSURfQ0xPU0VfVEFHKToKLSAgICAgICAgICAg
ICAgICAgICAgY2FzZSBJRF9CQVNFOgotICAgICAgICAgICAgICAgICAgICBjYXNlIChJRF9CQVNF
K0lEX0NMT1NFX1RBRyk6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfSFRNTDoKLSAgICAg
ICAgICAgICAgICAgICAgY2FzZSBJRF9IRUFEOgotICAgICAgICAgICAgICAgICAgICBjYXNlIDA6
Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgKDAgKyBJRF9DTE9TRV9UQUcgKToKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorCQkg
ICAgfSBlbHNlIGlmICh0YWcgIT0gSFRNTE5hbWVzOjpzY3JpcHQoKSAmJiB0YWcgIT0gSFRNTE5h
bWVzOjpub3NjcmlwdCgpICYmIHRhZyAhPSBIVE1MTmFtZXM6OnN0eWxlKCkgJiYKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0YWcgIT0gSFRNTE5hbWVzOjpsaW5rKCkgJiYgdGFnICE9
IEhUTUxOYW1lczo6bWV0YSgpICYmIHRhZyAhPSBIVE1MTmFtZXM6Om9iamVjdCgpICYmCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnICE9IEhUTUxOYW1lczo6dGl0bGUoKSAmJiB0
YWcgIT0gSFRNTE5hbWVzOjpiYXNlKCkgJiYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKGVuZCB8fCB0YWcgIT0gSFRNTE5hbWVzOjpodG1sKCkpICYmCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKGVuZCB8fCB0YWcgIT0gSFRNTE5hbWVzOjpoZWFkKCkpICYmIGlzYWxw
aGEodG1wWzBdKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgYm9keSA9IHRydWU7CiAjaWZk
ZWYgREVDT0RFX0RFQlVHCiAJCQlrZERlYnVnKCA2MDA1ICkgPDwgIkRlY29kZXI6IG5vIGNoYXJz
ZXQgZm91bmQuIElkPSIgPDwgaWQgPDwgZW5kbDsKSW5kZXg6IGtodG1sL21pc2MvaGFzaG1hcC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL21pc2MvaGFzaG1h
cC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtdSAtcCAtcjEuMSBraHRtbC9taXNj
L2hhc2htYXAuaAotLS0ga2h0bWwvbWlzYy9oYXNobWFwLmgJNiBKdWwgMjAwNSAwMToyODo0MiAt
MDAwMAkxLjEKKysrIGtodG1sL21pc2MvaGFzaG1hcC5oCTggSnVsIDIwMDUgMDU6NTA6MTkgLTAw
MDAKQEAgLTc3LDcgKzc3LDcgQEAgY2xhc3MgSGFzaE1hcCB7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBL
ZXksIHR5cGVuYW1lIE1hcHBlZCwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgS2V5
VHJhaXRzLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHM+CiBpbnQgSGFzaE1hcDxLZXksIE1hcHBlZCwg
SGFzaEZ1bmN0aW9ucywgS2V5VHJhaXRzLCBNYXBwZWRUcmFpdHM+OjpzaXplKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gbV9pbXBsLmNvdW50KCk7IAorICAgIHJldHVybiBtX2ltcGwuc2l6ZSgpOyAK
IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBNYXBwZWQsIHR5cGVuYW1lIEhh
c2hGdW5jdGlvbnMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzPgpJ
bmRleDoga2h0bWwvbWlzYy9odG1saGFzaGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvV2ViQ29yZS9raHRtbC9taXNjL2h0bWxoYXNoZXMuY3BwLHYKcmV0cmlldmluZyByZXZp
c2lvbiAxLjEwCmRpZmYgLXUgLXAgLXIxLjEwIGtodG1sL21pc2MvaHRtbGhhc2hlcy5jcHAKLS0t
IGtodG1sL21pc2MvaHRtbGhhc2hlcy5jcHAJNSBKYW4gMjAwNSAyMjo1Njo0NiAtMDAwMAkxLjEw
CisrKyBraHRtbC9taXNjL2h0bWxoYXNoZXMuY3BwCTggSnVsIDIwMDUgMDU6NTA6MTkgLTAwMDAK
QEAgLTI1LDIyICsyNSwxMyBAQAogLy8gdHVybiBvZmYgaW5saW5pbmcgdG8gdm9pZCB3YXJuaW5n
IHdpdGggbmV3ZXIgZ2NjCiAjdW5kZWYgX19pbmxpbmUKICNkZWZpbmUgX19pbmxpbmUKLSNpbmNs
dWRlICJodG1sdGFncy5jIgogI2luY2x1ZGUgImh0bWxhdHRycy5jIgogI3VuZGVmIF9faW5saW5l
CiAKLXVuc2lnbmVkIHNob3J0IGtodG1sOjpnZXRUYWdJRChjb25zdCBjaGFyICp0YWdTdHIsIGlu
dCBsZW4pCit1bnNpZ25lZCBzaG9ydCBraHRtbDo6Z2V0QXR0cklEKGNvbnN0IGNoYXIgKmF0dHJT
dHIsIGludCBsZW4pCiB7Ci0gICAgY29uc3Qgc3RydWN0IHRhZ3MgKnRhZ1B0ciA9IGZpbmRUYWco
dGFnU3RyLCBsZW4pOwotICAgIGlmICghdGFnUHRyKQorICAgIGNvbnN0IHN0cnVjdCBhdHRycyAq
YXR0clB0ciA9IGZpbmRBdHRyKGF0dHJTdHIsIGxlbik7CisgICAgaWYgKCFhdHRyUHRyKQogICAg
ICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gdGFnUHRyLT5pZDsKLX0KLQotdW5zaWduZWQgc2hv
cnQga2h0bWw6OmdldEF0dHJJRChjb25zdCBjaGFyICp0YWdTdHIsIGludCBsZW4pCi17Ci0gICAg
Y29uc3Qgc3RydWN0IGF0dHJzICp0YWdQdHIgPSBmaW5kQXR0cih0YWdTdHIsIGxlbik7Ci0gICAg
aWYgKCF0YWdQdHIpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiB0YWdQdHItPmlkOwor
ICAgIHJldHVybiBhdHRyUHRyLT5pZDsKIH0KSW5kZXg6IGtodG1sL21pc2MvaHRtbGhhc2hlcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL21pc2MvaHRtbGhh
c2hlcy5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjYKZGlmZiAtdSAtcCAtcjEuNiBraHRtbC9t
aXNjL2h0bWxoYXNoZXMuaAotLS0ga2h0bWwvbWlzYy9odG1saGFzaGVzLmgJNSBKYW4gMjAwNSAy
Mjo1Njo0NiAtMDAwMAkxLjYKKysrIGtodG1sL21pc2MvaHRtbGhhc2hlcy5oCTggSnVsIDIwMDUg
MDU6NTA6MTkgLTAwMDAKQEAgLTIzLDEyICsyMywxMCBAQAogI2lmbmRlZiBIVE1MSEFTSEVTX0gK
ICNkZWZpbmUgSFRNTEhBU0hFU19ICiAKLSNpbmNsdWRlICJodG1sdGFncy5oIgogI2luY2x1ZGUg
Imh0bWxhdHRycy5oIgogCiBuYW1lc3BhY2Uga2h0bWwKIHsKLSAgdW5zaWduZWQgc2hvcnQgZ2V0
VGFnSUQoY29uc3QgY2hhciAqdGFnU3RyLCBpbnQgbGVuKTsKICAgdW5zaWduZWQgc2hvcnQgZ2V0
QXR0cklEKGNvbnN0IGNoYXIgKnRhZ1N0ciwgaW50IGxlbik7CiB9CiAKSW5kZXg6IGtodG1sL3Jl
bmRlcmluZy9iaWRpLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9r
aHRtbC9yZW5kZXJpbmcvYmlkaS5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTMzCmRpZmYg
LXUgLXAgLXIxLjEzMyBraHRtbC9yZW5kZXJpbmcvYmlkaS5jcHAKLS0tIGtodG1sL3JlbmRlcmlu
Zy9iaWRpLmNwcAk2IEp1bCAyMDA1IDAwOjIxOjQ3IC0wMDAwCTEuMTMzCisrKyBraHRtbC9yZW5k
ZXJpbmcvYmlkaS5jcHAJOCBKdWwgMjAwNSAwNTo1MDoyMSAtMDAwMApAQCAtMzYwLDEwICszNjAs
OSBAQCBpbmxpbmUgUUNoYXI6OkRpcmVjdGlvbiBCaWRpSXRlcmF0b3I6OmRpCiAgICAgaWYgKCFv
YmotPmlzVGV4dCgpKQogICAgICAgICByZXR1cm4gUUNoYXI6OkRpck9OOwogCi0gICAgUmVuZGVy
VGV4dCAqcmVuZGVyVHh0ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCAqPiggb2JqICk7Ci0gICAg
aWYgKCBwb3MgPj0gcmVuZGVyVHh0LT5zdHJpbmdMZW5ndGgoKSApCisgICAgUmVuZGVyVGV4dCAq
cmVuZGVyVHh0ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCAqPihvYmopOworICAgIGlmIChwb3Mg
Pj0gcmVuZGVyVHh0LT5zdHJpbmdMZW5ndGgoKSkKICAgICAgICAgcmV0dXJuIFFDaGFyOjpEaXJP
TjsKLSAgICAgICAgCiAgICAgcmV0dXJuIHJlbmRlclR4dC0+dGV4dCgpW3Bvc10uZGlyZWN0aW9u
KCk7CiB9CiAKSW5kZXg6IGtodG1sL3JlbmRlcmluZy9icmVha19saW5lcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvcmVuZGVyaW5nL2JyZWFrX2xpbmVz
LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xOQpkaWZmIC11IC1wIC1yMS4xOSBraHRtbC9y
ZW5kZXJpbmcvYnJlYWtfbGluZXMuY3BwCi0tLSBraHRtbC9yZW5kZXJpbmcvYnJlYWtfbGluZXMu
Y3BwCTUgSnVsIDIwMDUgMjM6MjE6MTEgLTAwMDAJMS4xOQorKysga2h0bWwvcmVuZGVyaW5nL2Jy
ZWFrX2xpbmVzLmNwcAk4IEp1bCAyMDA1IDA1OjUwOjIxIC0wMDAwCkBAIC0xMTIsNyArMTEyLDgg
QEAgYm9vbCBpc0JyZWFrYWJsZShjb25zdCBRQ2hhciAqcywgaW50IHBvcwogICAgIGlmIChsYXN0
Q2ggPT0gJy0nIHx8IGxhc3RDaCA9PSAnPycpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAg
cmV0dXJuIGMtPmRpcmVjdGlvbigpID09IFFDaGFyOjpEaXJXUzsKKyAgICAvLyBObyBvdGhlciBh
c2NpaSBjaGFycyBhcmUgYnJlYWthYmxlLgorICAgIHJldHVybiBmYWxzZTsKICNlbmRpZiAgICAK
IH0KIApJbmRleDoga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9hcHBsZXQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3JlbmRlcmluZy9yZW5kZXJfYXBwbGV0
LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zMApkaWZmIC11IC1wIC1yMS4zMCBraHRtbC9y
ZW5kZXJpbmcvcmVuZGVyX2FwcGxldC5jcHAKLS0tIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfYXBw
bGV0LmNwcAkxMCBNYXkgMjAwNSAxODo0MjowMyAtMDAwMAkxLjMwCisrKyBraHRtbC9yZW5kZXJp
bmcvcmVuZGVyX2FwcGxldC5jcHAJOCBKdWwgMjAwNSAwNTo1MDoyMSAtMDAwMApAQCAtMzYsNyAr
MzYsNiBAQAogI2lmbmRlZiBRX1dTX1FXUyAvLyBXZSBkb24ndCBoYXZlIEphdmEgaW4gUXQgRW1i
ZWRkZWQKIAogI2luY2x1ZGUgImphdmEva2phdmFhcHBsZXR3aWRnZXQuaCIKLSNpbmNsdWRlICJt
aXNjL2h0bWx0YWdzLmgiCiAjaW5jbHVkZSAiaHRtbC9odG1sX29iamVjdGltcGwuaCIKIAogdXNp
bmcgbmFtZXNwYWNlIGtodG1sOwpAQCAtMTAzLDcgKzEwMiw3IEBAIHZvaWQgUmVuZGVyQXBwbGV0
OjpjcmVhdGVXaWRnZXRJZk5lY2Vzc2EKICAgICAgICAgICAgICAgICAgICAgICAgICBtX2hlaWdo
dCAtIGJvcmRlclRvcCgpIC0gYm9yZGVyQm90dG9tKCkgLSBwYWRkaW5nVG9wKCkgLSBwYWRkaW5n
Qm90dG9tKCk7CiAgICAgICAgICAgICBOb2RlSW1wbCAqY2hpbGQgPSBlbGVtZW50KCktPmZpcnN0
Q2hpbGQoKTsKICAgICAgICAgICAgIHdoaWxlIChjaGlsZCkgewotICAgICAgICAgICAgICAgIGlm
IChjaGlsZC0+aWQoKSA9PSBJRF9QQVJBTSkgeworICAgICAgICAgICAgICAgIGlmIChjaGlsZC0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OnBhcmFtKCkpKSB7CiAgICAgICAgICAgICAgICAgICAgIEhU
TUxQYXJhbUVsZW1lbnRJbXBsICpwID0gc3RhdGljX2Nhc3Q8SFRNTFBhcmFtRWxlbWVudEltcGwg
Kj4oY2hpbGQpOwogICAgICAgICAgICAgICAgICAgICBtX2FyZ3MuaW5zZXJ0KHAtPm5hbWUoKS5z
dHJpbmcoKSwgcC0+dmFsdWUoKS5zdHJpbmcoKSk7CiAgICAgICAgICAgICAgICAgfQpJbmRleDog
a2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9ibG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1dlYkNvcmUva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9ibG9jay5jcHAsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuMTg2CmRpZmYgLXUgLXAgLXIxLjE4NiBraHRtbC9yZW5kZXJpbmcvcmVu
ZGVyX2Jsb2NrLmNwcAotLS0ga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9ibG9jay5jcHAJNSBKdWwg
MjAwNSAyMzoyMToxMSAtMDAwMAkxLjE4NgorKysga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9ibG9j
ay5jcHAJOCBKdWwgMjAwNSAwNTo1MDoyNCAtMDAwMApAQCAtNDAsNyArNDAsNiBAQAogCiAjaW5j
bHVkZSAia2h0bWx2aWV3LmgiCiAjaW5jbHVkZSAia2h0bWxfcGFydC5oIgotI2luY2x1ZGUgImh0
bWx0YWdzLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBET007CiAKQEAgLTQ3NSw3ICs0NzQsNyBAQCB2
b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9jayhib29sIHJlbGF5CiAgICAgICAgIG1fdG9wTWFy
Z2luUXVpcmsgPSBzdHlsZSgpLT5tYXJnaW5Ub3AoKS5xdWlyazsKICAgICAgICAgbV9ib3R0b21N
YXJnaW5RdWlyayA9IHN0eWxlKCktPm1hcmdpbkJvdHRvbSgpLnF1aXJrOwogCi0gICAgICAgIGlm
IChlbGVtZW50KCkgJiYgZWxlbWVudCgpLT5pZCgpID09IElEX0ZPUk0gJiYgZWxlbWVudCgpLT5p
c01hbGZvcm1lZCgpKQorICAgICAgICBpZiAoZWxlbWVudCgpICYmIGVsZW1lbnQoKS0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OmZvcm0oKSkgJiYgZWxlbWVudCgpLT5pc01hbGZvcm1lZCgpKQogICAg
ICAgICAgICAgLy8gU2VlIGlmIHRoaXMgZm9ybSBpcyBtYWxmb3JtZWQgKGkuZS4sIHVuY2xvc2Vk
KS4gSWYgc28sIGRvbid0IGdpdmUgdGhlIGZvcm0KICAgICAgICAgICAgIC8vIGEgYm90dG9tIG1h
cmdpbi4KICAgICAgICAgICAgIG1fbWF4Qm90dG9tUG9zTWFyZ2luID0gbV9tYXhCb3R0b21OZWdN
YXJnaW4gPSAwOwpJbmRleDoga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9ib3guY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3JlbmRlcmluZy9yZW5kZXJfYm94
LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNTQKZGlmZiAtdSAtcCAtcjEuMTU0IGtodG1s
L3JlbmRlcmluZy9yZW5kZXJfYm94LmNwcAotLS0ga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9ib3gu
Y3BwCTExIEp1biAyMDA1IDA1OjAxOjE3IC0wMDAwCTEuMTU0CisrKyBraHRtbC9yZW5kZXJpbmcv
cmVuZGVyX2JveC5jcHAJOCBKdWwgMjAwNSAwNTo1MDoyNiAtMDAwMApAQCAtMjU2LDcgKzI1Niw3
IEBAIHZvaWQgUmVuZGVyQm94OjpwYWludFJvb3RCb3hEZWNvcmF0aW9ucygKICAgICAgICAgLy8g
YW5vbnltb3VzIGJsb2NrcyBjcmVhdGVkIGJ5IGlubGluZSA8Ym9keT4gdGFncyBldGMuICBXZSBj
YW4gbG9jYXRlIHRoZSA8Ym9keT4KICAgICAgICAgLy8gcmVuZGVyIG9iamVjdCB2ZXJ5IGVhc2ls
eSB2aWEgdGhlIERPTS4KICAgICAgICAgSFRNTEVsZW1lbnRJbXBsKiBib2R5ID0gZG9jdW1lbnQo
KS0+Ym9keSgpOwotICAgICAgICBSZW5kZXJPYmplY3QqIGJvZHlPYmplY3QgPSAoYm9keSAmJiBi
b2R5LT5pZCgpID09IElEX0JPRFkpID8gYm9keS0+cmVuZGVyZXIoKSA6IDA7CisgICAgICAgIFJl
bmRlck9iamVjdCogYm9keU9iamVjdCA9IChib2R5ICYmIGJvZHktPmhhc0xvY2FsTmFtZShIVE1M
TmFtZXM6OmJvZHkoKSkpID8gYm9keS0+cmVuZGVyZXIoKSA6IDA7CiAgICAgICAgIGlmIChib2R5
T2JqZWN0KSB7CiAgICAgICAgICAgICBiZ0xheWVyID0gYm9keU9iamVjdC0+c3R5bGUoKS0+YmFj
a2dyb3VuZExheWVycygpOwogICAgICAgICAgICAgYmdDb2xvciA9IGJvZHlPYmplY3QtPnN0eWxl
KCktPmJhY2tncm91bmRDb2xvcigpOwpAQCAtMzY5LDcgKzM2OSw3IEBAIHZvaWQgUmVuZGVyQm94
OjpwYWludEJhY2tncm91bmRFeHRlbmRlZCgKICAgICAgICAgYm9vbCBpc1RyYW5zcGFyZW50Owog
ICAgICAgICBET006Ok5vZGVJbXBsKiBlbHQgPSBkb2N1bWVudCgpLT5vd25lckVsZW1lbnQoKTsK
ICAgICAgICAgaWYgKGVsdCkgewotICAgICAgICAgICAgaWYgKGVsdC0+aWQoKSA9PSBJRF9GUkFN
RSkKKyAgICAgICAgICAgIGlmIChlbHQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpmcmFtZSgpKSkK
ICAgICAgICAgICAgICAgICBpc1RyYW5zcGFyZW50ID0gZmFsc2U7CiAgICAgICAgICAgICBlbHNl
IHsKICAgICAgICAgICAgICAgICAvLyBMb2NhdGUgdGhlIDxib2R5PiBlbGVtZW50IHVzaW5nIHRo
ZSBET00uICBUaGlzIGlzIGVhc2llciB0aGFuIHRyeWluZwpAQCAtMzc3LDcgKzM3Nyw3IEBAIHZv
aWQgUmVuZGVyQm94OjpwYWludEJhY2tncm91bmRFeHRlbmRlZCgKICAgICAgICAgICAgICAgICAv
LyBhbm9ueW1vdXMgYmxvY2tzIGNyZWF0ZWQgYnkgaW5saW5lIDxib2R5PiB0YWdzIGV0Yy4gIFdl
IGNhbiBsb2NhdGUgdGhlIDxib2R5PgogICAgICAgICAgICAgICAgIC8vIHJlbmRlciBvYmplY3Qg
dmVyeSBlYXNpbHkgdmlhIHRoZSBET00uCiAgICAgICAgICAgICAgICAgSFRNTEVsZW1lbnRJbXBs
KiBib2R5ID0gZG9jdW1lbnQoKS0+Ym9keSgpOwotICAgICAgICAgICAgICAgIGlzVHJhbnNwYXJl
bnQgPSAhYm9keSB8fCBib2R5LT5pZCgpICE9IElEX0ZSQU1FU0VUOyAvLyBDYW4ndCBzY3JvbGwg
YSBmcmFtZXNldCBkb2N1bWVudCBhbnl3YXkuCisgICAgICAgICAgICAgICAgaXNUcmFuc3BhcmVu
dCA9ICFib2R5IHx8ICFib2R5LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpmcmFtZXNldCgpKTsg
Ly8gQ2FuJ3Qgc2Nyb2xsIGEgZnJhbWVzZXQgZG9jdW1lbnQgYW55d2F5LgogICAgICAgICAgICAg
fQogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGlzVHJhbnNwYXJlbnQgPSBjYW52YXMoKS0+
dmlldygpLT5pc1RyYW5zcGFyZW50KCk7CkluZGV4OiBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2Nh
bnZhc2ltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRt
bC9yZW5kZXJpbmcvcmVuZGVyX2NhbnZhc2ltYWdlLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS4xMQpkaWZmIC11IC1wIC1yMS4xMSBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2NhbnZhc2ltYWdl
LmNwcAotLS0ga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9jYW52YXNpbWFnZS5jcHAJMjUgTWF5IDIw
MDUgMDE6MzM6MjIgLTAwMDAJMS4xMQorKysga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9jYW52YXNp
bWFnZS5jcHAJOCBKdWwgMjAwNSAwNTo1MDoyNiAtMDAwMApAQCAtMzcsMTAgKzM3LDggQEAKICNp
bmNsdWRlICJjc3MvY3NzaGVscGVyLmgiCiAjaW5jbHVkZSAibWlzYy9oZWxwZXIuaCIKICNpbmNs
dWRlICJtaXNjL2h0bWxhdHRycy5oIgotI2luY2x1ZGUgIm1pc2MvaHRtbHRhZ3MuaCIKICNpbmNs
dWRlICJodG1sL2h0bWxfZm9ybWltcGwuaCIKICNpbmNsdWRlICJodG1sL2h0bWxfY2FudmFzaW1w
bC5oIgotI2luY2x1ZGUgImh0bWwvZHRkLmgiCiAjaW5jbHVkZSAieG1sL2RvbTJfZXZlbnRzaW1w
bC5oIgogI2luY2x1ZGUgImh0bWwvaHRtbF9kb2N1bWVudGltcGwuaCIKICNpbmNsdWRlIDxtYXRo
Lmg+CkBAIC0xODYsNyArMTg0LDcgQEAgdm9pZCBSZW5kZXJDYW52YXNJbWFnZTo6cGFpbnQoUGFp
bnRJbmZvJgogICAgIH0KICAgICAKICAgICBpZiAoZHJhd25JbWFnZSgpKSB7Ci0gICAgICAgIEhU
TUxDYW52YXNFbGVtZW50SW1wbCogaSA9IChlbGVtZW50KCkgJiYgZWxlbWVudCgpLT5pZCgpID09
IElEX0NBTlZBUykgPyBzdGF0aWNfY2FzdDxIVE1MQ2FudmFzRWxlbWVudEltcGwqPihlbGVtZW50
KCkpIDogMDsKKyAgICAgICAgSFRNTENhbnZhc0VsZW1lbnRJbXBsKiBpID0gKGVsZW1lbnQoKSAm
JiBlbGVtZW50KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpjYW52YXMoKSkpID8gc3RhdGljX2Nh
c3Q8SFRNTENhbnZhc0VsZW1lbnRJbXBsKj4oZWxlbWVudCgpKSA6IDA7CiAgICAgICAgIGludCBv
bGRPcGVyYXRpb24gPSAwOwogICAgICAgICBpZiAoaSAmJiAhaS0+Y29tcG9zaXRlT3BlcmF0b3Io
KS5pc051bGwoKSl7CiAgICAgICAgICAgICBvbGRPcGVyYXRpb24gPSBRUGFpbnRlcjo6Z2V0Q29t
cG9zaXRlT3BlcmF0aW9uKHAtPmN1cnJlbnRDb250ZXh0KCkpOwpJbmRleDoga2h0bWwvcmVuZGVy
aW5nL3JlbmRlcl9jYW52YXNpbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9X
ZWJDb3JlL2todG1sL3JlbmRlcmluZy9yZW5kZXJfY2FudmFzaW1hZ2UuaCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS4zCmRpZmYgLXUgLXAgLXIxLjMga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9jYW52
YXNpbWFnZS5oCi0tLSBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2NhbnZhc2ltYWdlLmgJNCBTZXAg
MjAwNCAxOTo1OTo1OCAtMDAwMAkxLjMKKysrIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfY2FudmFz
aW1hZ2UuaAk4IEp1bCAyMDA1IDA1OjUwOjI3IC0wMDAwCkBAIC0yNiw3ICsyNiw2IEBACiAjaWZu
ZGVmIFJFTkRFUl9DQU5WQVNJTUFHRV9ICiAjZGVmaW5lIFJFTkRFUl9DQU5WQVNJTUFHRV9ICiAK
LSNpbmNsdWRlICJodG1sL2R0ZC5oIgogI2luY2x1ZGUgImh0bWwvaHRtbF9lbGVtZW50aW1wbC5o
IgogI2luY2x1ZGUgInJlbmRlcmluZy9yZW5kZXJfaW1hZ2UuaCIKICNpbmNsdWRlICJkb20vZG9t
X3N0cmluZy5oIgpJbmRleDoga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9jb250YWluZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3JlbmRlcmluZy9yZW5k
ZXJfY29udGFpbmVyLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS42NgpkaWZmIC11IC1wIC1y
MS42NiBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2NvbnRhaW5lci5jcHAKLS0tIGtodG1sL3JlbmRl
cmluZy9yZW5kZXJfY29udGFpbmVyLmNwcAkxNCBGZWIgMjAwNSAxODoxOToxOCAtMDAwMAkxLjY2
CisrKyBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2NvbnRhaW5lci5jcHAJOCBKdWwgMjAwNSAwNTo1
MDoyOSAtMDAwMApAQCAtMjI2LDEyICsyMjYsMTIgQEAgdm9pZCBSZW5kZXJDb250YWluZXI6OnVw
ZGF0ZVBzZXVkb0NoaWxkKAogCiAgICAgLy8gRm9yIDxxPjxwLz48L3E+LCBpZiB0aGlzIG9iamVj
dCBpcyB0aGUgaW5saW5lIGNvbnRpbnVhdGlvbiBvZiB0aGUgPHE+LCB3ZSBvbmx5IHdhbnQgdG8g
Z2VuZXJhdGUKICAgICAvLyA6YWZ0ZXIgY29udGVudCBhbmQgbm90IDpiZWZvcmUgY29udGVudC4K
LSAgICBpZiAodHlwZSA9PSBSZW5kZXJTdHlsZTo6QkVGT1JFICYmIGlzSW5saW5lQ29udGludWF0
aW9uKCkpCisgICAgaWYgKG5ld0NvbnRlbnRXYW50ZWQgJiYgdHlwZSA9PSBSZW5kZXJTdHlsZTo6
QkVGT1JFICYmIGlzSW5saW5lQ29udGludWF0aW9uKCkpCiAgICAgICAgIG5ld0NvbnRlbnRXYW50
ZWQgPSBmYWxzZTsKIAogICAgIC8vIFNpbWlsYXJseSwgaWYgd2UncmUgdGhlIGJlZ2lubmluZyBv
ZiBhIDxxPiwgYW5kIHRoZXJlJ3MgYW4gaW5saW5lIGNvbnRpbnVhdGlvbiBmb3Igb3VyIG9iamVj
dCwKICAgICAvLyB0aGVuIHdlIGRvbid0IGdlbmVyYXRlIHRoZSA6YWZ0ZXIgY29udGVudC4KLSAg
ICBpZiAodHlwZSA9PSBSZW5kZXJTdHlsZTo6QUZURVIgJiYgaXNSZW5kZXJJbmxpbmUoKSAmJiBj
b250aW51YXRpb24oKSkKKyAgICBpZiAobmV3Q29udGVudFdhbnRlZCAmJiB0eXBlID09IFJlbmRl
clN0eWxlOjpBRlRFUiAmJiBpc1JlbmRlcklubGluZSgpICYmIGNvbnRpbnVhdGlvbigpKQogICAg
ICAgICBuZXdDb250ZW50V2FudGVkID0gZmFsc2U7CiAgICAgCiAgICAgLy8gSWYgd2UgZG9uJ3Qg
d2FudCBnZW5lcmF0ZWQgY29udGVudCBhbnkgbG9uZ2VyLCBvciBpZiB3ZSBoYXZlIGdlbmVyYXRl
ZCBjb250ZW50LCBidXQgaXQncyBubyBsb25nZXIKSW5kZXg6IGtodG1sL3JlbmRlcmluZy9yZW5k
ZXJfZmxvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwv
cmVuZGVyaW5nL3JlbmRlcl9mbG93LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNjAKZGlm
ZiAtdSAtcCAtcjEuMTYwIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfZmxvdy5jcHAKLS0tIGtodG1s
L3JlbmRlcmluZy9yZW5kZXJfZmxvdy5jcHAJMTEgTWF5IDIwMDUgMDI6MTA6MTAgLTAwMDAJMS4x
NjAKKysrIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfZmxvdy5jcHAJOCBKdWwgMjAwNSAwNTo1MDoy
OSAtMDAwMApAQCAtNDAsNyArNDAsNiBAQAogI2luY2x1ZGUgInJlbmRlcl9saW5lLmgiCiAKICNp
bmNsdWRlICJraHRtbHZpZXcuaCIKLSNpbmNsdWRlICJodG1sdGFncy5oIgogCiB1c2luZyBuYW1l
c3BhY2UgRE9NOwogdXNpbmcgbmFtZXNwYWNlIGtodG1sOwpAQCAtNjU0LDcgKzY1Myw3IEBAIHZv
aWQgUmVuZGVyRmxvdzo6YWRkRm9jdXNSaW5nUmVjdHMoUVBhaW4KICAgICAvLyBPbmx5IHBhaW50
IGZvY3VzIHJpbmcgYXJvdW5kIG91dGVybW9zdCBjb250ZW50ZWRpdGFibGUgZWxlbWVudC4KICAg
ICAvLyBCdXQgc2tpcCB0aGUgYm9keSBlbGVtZW50IGlmIGl0IGlzIG91dGVybW9zdC4KICAgICBp
ZiAoZWxlbWVudCgpICYmIGVsZW1lbnQoKS0+aXNDb250ZW50RWRpdGFibGUoKSkgewotICAgICAg
ICBpZiAoZWxlbWVudCgpLT5wYXJlbnROb2RlKCkgJiYgIWVsZW1lbnQoKS0+cGFyZW50Tm9kZSgp
LT5pc0NvbnRlbnRFZGl0YWJsZSgpICYmIGVsZW1lbnQoKS0+aWQoKSAhPSBJRF9CT0RZKQorICAg
ICAgICBpZiAoZWxlbWVudCgpLT5wYXJlbnROb2RlKCkgJiYgIWVsZW1lbnQoKS0+cGFyZW50Tm9k
ZSgpLT5pc0NvbnRlbnRFZGl0YWJsZSgpICYmICFlbGVtZW50KCktPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjpib2R5KCkpKQogICAgICAgICAgICAgcC0+YWRkRm9jdXNSaW5nUmVjdChfdHgsIF90eSwg
d2lkdGgoKSwgaGVpZ2h0KCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQpJbmRleDoga2h0bWwv
cmVuZGVyaW5nL3JlbmRlcl9mb3JtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3Qv
V2ViQ29yZS9raHRtbC9yZW5kZXJpbmcvcmVuZGVyX2Zvcm0uY3BwLHYKcmV0cmlldmluZyByZXZp
c2lvbiAxLjEwOApkaWZmIC11IC1wIC1yMS4xMDgga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9mb3Jt
LmNwcAotLS0ga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9mb3JtLmNwcAkyNCBKdW4gMjAwNSAwNTo1
MzoyOCAtMDAwMAkxLjEwOAorKysga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9mb3JtLmNwcAk4IEp1
bCAyMDA1IDA1OjUwOjMwIC0wMDAwCkBAIC03OTcsNyArNzk3LDcgQEAgUmVuZGVyT2JqZWN0KiBS
ZW5kZXJGaWVsZHNldDo6ZmluZExlZ2VuZAogewogICAgIGZvciAoUmVuZGVyT2JqZWN0KiBsZWdl
bmQgPSBmaXJzdENoaWxkKCk7IGxlZ2VuZDsgbGVnZW5kID0gbGVnZW5kLT5uZXh0U2libGluZygp
KSB7CiAgICAgICBpZiAoIWxlZ2VuZC0+aXNGbG9hdGluZ09yUG9zaXRpb25lZCgpICYmIGxlZ2Vu
ZC0+ZWxlbWVudCgpICYmCi0gICAgICAgICAgbGVnZW5kLT5lbGVtZW50KCktPmlkKCkgPT0gSURf
TEVHRU5EKQorICAgICAgICAgIGxlZ2VuZC0+ZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6bGVnZW5kKCkpKQogICAgICAgICByZXR1cm4gbGVnZW5kOwogICAgIH0KICAgICByZXR1cm4g
MDsKQEAgLTExOTEsNyArMTE5MSw3IEBAIHZvaWQgUmVuZGVyU2VsZWN0Ojp1cGRhdGVGcm9tRWxl
bWVudCgpCiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxLQ29tYm9Cb3gqPihtX3dpZGdldCktPmNs
ZWFyKCk7CiAKICAgICAgICAgZm9yIChsaXN0SW5kZXggPSAwOyBsaXN0SW5kZXggPCBpbnQobGlz
dEl0ZW1zLnNpemUoKSk7IGxpc3RJbmRleCsrKSB7Ci0gICAgICAgICAgICBpZiAobGlzdEl0ZW1z
W2xpc3RJbmRleF0tPmlkKCkgPT0gSURfT1BUR1JPVVApIHsKKyAgICAgICAgICAgIGlmIChsaXN0
SXRlbXNbbGlzdEluZGV4XS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9wdGdyb3VwKCkpKSB7CiAg
ICAgICAgICAgICAgICAgUVN0cmluZyBsYWJlbCA9IGxpc3RJdGVtc1tsaXN0SW5kZXhdLT5nZXRB
dHRyaWJ1dGUoQVRUUl9MQUJFTCkuc3RyaW5nKCk7CiAgICAgICAgICAgICAgICAgbGFiZWwucmVw
bGFjZShRQ2hhcignXFwnKSwgYmFja3NsYXNoQXNDdXJyZW5jeVN5bWJvbCgpKTsKIApAQCAtMTIx
NSwxNCArMTIxNSwxNCBAQCB2b2lkIFJlbmRlclNlbGVjdDo6dXBkYXRlRnJvbUVsZW1lbnQoKQog
ICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxLQ29tYm9Cb3gqPihtX3dpZGdldCktPmlu
c2VydEl0ZW0obGFiZWwsIGxpc3RJbmRleCk7CiAjZW5kaWYKICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGVsc2UgaWYgKGxpc3RJdGVtc1tsaXN0SW5kZXhdLT5pZCgpID09IElEX09QVElPTikg
eworICAgICAgICAgICAgZWxzZSBpZiAobGlzdEl0ZW1zW2xpc3RJbmRleF0tPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjpvcHRpb24oKSkpIHsKICAgICAgICAgICAgICAgICBRU3RyaW5nIGl0ZW1UZXh0
ID0gc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnRJbXBsKj4obGlzdEl0ZW1zW2xpc3RJbmRl
eF0pLT50ZXh0KCkuc3RyaW5nKCk7CiAgICAgICAgICAgICAgICAgaXRlbVRleHQucmVwbGFjZShR
Q2hhcignXFwnKSwgYmFja3NsYXNoQXNDdXJyZW5jeVN5bWJvbCgpKTsKIAogICAgICAgICAgICAg
ICAgIC8vIEluIFdpbklFLCBsZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlIGlzIGlnbm9y
ZWQgaW4gb3B0aW9ucy4gV2UgbWF0Y2ggdGhpcyBiZWhhdmlvci4KICAgICAgICAgICAgICAgICBp
dGVtVGV4dCA9IGl0ZW1UZXh0LnN0cmlwV2hpdGVTcGFjZSgpOwogICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIGlmIChsaXN0SXRlbXNbbGlzdEluZGV4XS0+cGFyZW50Tm9kZSgpLT5p
ZCgpID09IElEX09QVEdST1VQKQorICAgICAgICAgICAgICAgIGlmIChsaXN0SXRlbXNbbGlzdElu
ZGV4XS0+cGFyZW50Tm9kZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b3B0Z3JvdXAoKSkpCiAg
ICAgICAgICAgICAgICAgICAgIGl0ZW1UZXh0LnByZXBlbmQoIiAgICAiKTsKIAogI2lmIEFQUExF
X0NIQU5HRVMKQEAgLTEzNDgsNyArMTM0OCw3IEBAIHZvaWQgUmVuZGVyU2VsZWN0OjpsYXlvdXQo
ICkKIAogICAgIGJvb2wgZm91bmRPcHRpb24gPSBmYWxzZTsKICAgICBmb3IgKHVpbnQgaSA9IDA7
IGkgPCBsaXN0SXRlbXMuc2l6ZSgpICYmICFmb3VuZE9wdGlvbjsgaSsrKQotCWZvdW5kT3B0aW9u
ID0gKGxpc3RJdGVtc1tpXS0+aWQoKSA9PSBJRF9PUFRJT04pOworCWZvdW5kT3B0aW9uID0gKGxp
c3RJdGVtc1tpXS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9wdGlvbigpKSk7CiAKICAgICBtX3dp
ZGdldC0+c2V0RW5hYmxlZChmb3VuZE9wdGlvbiAmJiAhIGVsZW1lbnQoKS0+ZGlzYWJsZWQoKSk7
CiB9CkBAIC0xMzYyLDEyICsxMzYyLDEyIEBAIHZvaWQgUmVuZGVyU2VsZWN0OjpzbG90U2VsZWN0
ZWQoaW50IGluZGUKICAgICBRTWVtQXJyYXk8SFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwqPiBs
aXN0SXRlbXMgPSBlbGVtZW50KCktPmxpc3RJdGVtcygpOwogICAgIGlmKGluZGV4ID49IDAgJiYg
aW5kZXggPCBpbnQobGlzdEl0ZW1zLnNpemUoKSkpCiAgICAgewotICAgICAgICBib29sIGZvdW5k
ID0gKCBsaXN0SXRlbXNbaW5kZXhdLT5pZCgpID09IElEX09QVElPTiApOworICAgICAgICBib29s
IGZvdW5kID0gKGxpc3RJdGVtc1tpbmRleF0tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvcHRpb24o
KSkpOwogCiAgICAgICAgIGlmICggIWZvdW5kICkgewogICAgICAgICAgICAgLy8gdGhpcyBvbmUg
aXMgbm90IHNlbGVjdGFibGUsICB3ZSBuZWVkIHRvIGZpbmQgYW4gb3B0aW9uIGVsZW1lbnQKICAg
ICAgICAgICAgIHdoaWxlICggKCB1bnNpZ25lZCApIGluZGV4IDwgbGlzdEl0ZW1zLnNpemUoKSAp
IHsKLSAgICAgICAgICAgICAgICBpZiAoIGxpc3RJdGVtc1tpbmRleF0tPmlkKCkgPT0gSURfT1BU
SU9OICkgeworICAgICAgICAgICAgICAgIGlmIChsaXN0SXRlbXNbaW5kZXhdLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6b3B0aW9uKCkpKSB7CiAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1
ZTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQpAQCAtMTM3
Niw3ICsxMzc2LDcgQEAgdm9pZCBSZW5kZXJTZWxlY3Q6OnNsb3RTZWxlY3RlZChpbnQgaW5kZQog
CiAgICAgICAgICAgICBpZiAoICFmb3VuZCApIHsKICAgICAgICAgICAgICAgICB3aGlsZSAoIGlu
ZGV4ID49IDAgKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICggbGlzdEl0ZW1zW2luZGV4XS0+
aWQoKSA9PSBJRF9PUFRJT04gKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChsaXN0SXRlbXNb
aW5kZXhdLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMTM5MCw3ICsxMzkwLDcgQEAgdm9pZCBSZW5kZXJT
ZWxlY3Q6OnNsb3RTZWxlY3RlZChpbnQgaW5kZQogICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0
PENvbWJvQm94V2lkZ2V0Kj4oIG1fd2lkZ2V0ICktPnNldEN1cnJlbnRJdGVtKCBpbmRleCApOwog
CiAgICAgICAgICAgICBmb3IgKCB1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBsaXN0SXRlbXMuc2l6
ZSgpOyArK2kgKQotICAgICAgICAgICAgICAgIGlmICggbGlzdEl0ZW1zW2ldLT5pZCgpID09IElE
X09QVElPTiAmJiBpICE9ICh1bnNpZ25lZCBpbnQpIGluZGV4ICkKKyAgICAgICAgICAgICAgICBp
ZiAobGlzdEl0ZW1zW2ldLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpICYmIGkgIT0g
KHVuc2lnbmVkIGludCkgaW5kZXgpCiAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEhU
TUxPcHRpb25FbGVtZW50SW1wbCo+KCBsaXN0SXRlbXNbaV0gKS0+bV9zZWxlY3RlZCA9IGZhbHNl
OwogCiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudEltcGwqPihsaXN0
SXRlbXNbaW5kZXhdKS0+bV9zZWxlY3RlZCA9IHRydWU7CkBAIC0xNDExLDcgKzE0MTEsNyBAQCB2
b2lkIFJlbmRlclNlbGVjdDo6c2xvdFNlbGVjdGlvbkNoYW5nZWQoCiAgICAgZm9yICggdW5zaWdu
ZWQgaSA9IDA7IGkgPCBsaXN0SXRlbXMuY291bnQoKTsgaSsrICkKICAgICAgICAgLy8gZG9uJ3Qg
dXNlIHNldFNlbGVjdGVkKCkgaGVyZSBiZWNhdXNlIGl0IHdpbGwgY2F1c2UgdXMgdG8gYmUgY2Fs
bGVkCiAgICAgICAgIC8vIGFnYWluIHdpdGggdXBkYXRlU2VsZWN0aW9uLgotICAgICAgICBpZiAo
IGxpc3RJdGVtc1tpXS0+aWQoKSA9PSBJRF9PUFRJT04gKQorICAgICAgICBpZiAobGlzdEl0ZW1z
W2ldLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpKQogICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnRJbXBsKj4oIGxpc3RJdGVtc1tpXSApCiAgICAgICAgICAg
ICAgICAgLT5tX3NlbGVjdGVkID0gc3RhdGljX2Nhc3Q8S0xpc3RCb3gqPiggbV93aWRnZXQgKS0+
aXNTZWxlY3RlZCggaSApOwogCkBAIC0xNDUzLDcgKzE0NTMsNyBAQCB2b2lkIFJlbmRlclNlbGVj
dDo6dXBkYXRlU2VsZWN0aW9uKCkKICAgICAgICAgLy8gaWYgbXVsdGktc2VsZWN0LCB3ZSBzZWxl
Y3Qgb25seSB0aGUgbmV3IHNlbGVjdGVkIGluZGV4CiAgICAgICAgIEtMaXN0Qm94ICpsaXN0Qm94
ID0gc3RhdGljX2Nhc3Q8S0xpc3RCb3gqPihtX3dpZGdldCk7CiAgICAgICAgIGZvciAoaSA9IDA7
IGkgPCBpbnQobGlzdEl0ZW1zLnNpemUoKSk7IGkrKykKLSAgICAgICAgICAgIGxpc3RCb3gtPnNl
dFNlbGVjdGVkKGksbGlzdEl0ZW1zW2ldLT5pZCgpID09IElEX09QVElPTiAmJgorICAgICAgICAg
ICAgbGlzdEJveC0+c2V0U2VsZWN0ZWQoaSwgbGlzdEl0ZW1zW2ldLT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6b3B0aW9uKCkpICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRp
Y19jYXN0PEhUTUxPcHRpb25FbGVtZW50SW1wbCo+KGxpc3RJdGVtc1tpXSktPnNlbGVjdGVkKCkp
OwogICAgIH0KICAgICBlbHNlIHsKQEAgLTE0NjEsNyArMTQ2MSw3IEBAIHZvaWQgUmVuZGVyU2Vs
ZWN0Ojp1cGRhdGVTZWxlY3Rpb24oKQogICAgICAgICB1bnNpZ25lZCBmaXJzdE9wdGlvbiA9IGxp
c3RJdGVtcy5zaXplKCk7CiAgICAgICAgIGkgPSBsaXN0SXRlbXMuc2l6ZSgpOwogICAgICAgICB3
aGlsZSAoaS0tKQotICAgICAgICAgICAgaWYgKGxpc3RJdGVtc1tpXS0+aWQoKSA9PSBJRF9PUFRJ
T04pIHsKKyAgICAgICAgICAgIGlmIChsaXN0SXRlbXNbaV0tPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjpvcHRpb24oKSkpIHsKICAgICAgICAgICAgICAgICBpZiAoZm91bmQpCiAgICAgICAgICAgICAg
ICAgICAgIHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50SW1wbCo+KGxpc3RJdGVtc1tpXSkt
Pm1fc2VsZWN0ZWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBlbHNlIGlmIChzdGF0aWNfY2Fz
dDxIVE1MT3B0aW9uRWxlbWVudEltcGwqPihsaXN0SXRlbXNbaV0pLT5zZWxlY3RlZCgpKSB7Cklu
ZGV4OiBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2ZyYW1lcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9mcmFtZXMuY3BwLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjY5CmRpZmYgLXUgLXAgLXIxLjY5IGtodG1sL3JlbmRlcmlu
Zy9yZW5kZXJfZnJhbWVzLmNwcAotLS0ga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9mcmFtZXMuY3Bw
CTEwIE1heSAyMDA1IDE4OjQyOjA0IC0wMDAwCTEuNjkKKysrIGtodG1sL3JlbmRlcmluZy9yZW5k
ZXJfZnJhbWVzLmNwcAk4IEp1bCAyMDA1IDA1OjUwOjMxIC0wMDAwCkBAIC0zNCw3ICszNCw2IEBA
CiAjaW5jbHVkZSAibWlzYy9odG1sYXR0cnMuaCIKICNpbmNsdWRlICJ4bWwvZG9tMl9ldmVudHNp
bXBsLmgiCiAjaW5jbHVkZSAieG1sL2RvbV9kb2NpbXBsLmgiCi0jaW5jbHVkZSAibWlzYy9odG1s
dGFncy5oIgogI2luY2x1ZGUgImtodG1sdmlldy5oIgogI2luY2x1ZGUgImtodG1sX3BhcnQuaCIK
ICNpbmNsdWRlICJyZW5kZXJfYXJlbmEuaCIKQEAgLTY2OSwxNyArNjY4LDE3IEBAIHZvaWQgUmVu
ZGVyUGFydE9iamVjdDo6dXBkYXRlV2lkZ2V0KCkKIAogICBzZXROZWVkc0xheW91dEFuZE1pbk1h
eFJlY2FsYygpOwogCi0gIGlmIChlbGVtZW50KCktPmlkKCkgPT0gSURfT0JKRUNUKSB7CisgIGlm
IChlbGVtZW50KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvYmplY3QoKSkpIHsKIAogICAgICAg
SFRNTE9iamVjdEVsZW1lbnRJbXBsICpvID0gc3RhdGljX2Nhc3Q8SFRNTE9iamVjdEVsZW1lbnRJ
bXBsICo+KGVsZW1lbnQoKSk7CiAKICAgICAgIC8vIENoZWNrIGZvciBhIGNoaWxkIEVNQkVEIHRh
Zy4KICAgICAgIEhUTUxFbWJlZEVsZW1lbnRJbXBsICplbWJlZCA9IDA7CiAgICAgICBmb3IgKE5v
ZGVJbXBsICpjaGlsZCA9IG8tPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7ICkgewotICAgICAgICAgIGlm
IChjaGlsZC0+aWQoKSA9PSBJRF9FTUJFRCkgeworICAgICAgICAgIGlmIChjaGlsZC0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OmVtYmVkKCkpKSB7CiAgICAgICAgICAgICAgIGVtYmVkID0gc3RhdGlj
X2Nhc3Q8SFRNTEVtYmVkRWxlbWVudEltcGwgKj4oIGNoaWxkICk7CiAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgIH0gZWxzZSBpZiAoY2hpbGQtPmlkKCkgPT0gSURfT0JKRUNUKSB7Cisg
ICAgICAgICAgfSBlbHNlIGlmIChjaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9iamVjdCgp
KSkgewogICAgICAgICAgICAgICBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpOyAgICAgICAg
IC8vIERvbid0IGRlc2NlbmQgaW50byBuZXN0ZWQgT0JKRUNUIHRhZ3MKICAgICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgICBjaGlsZCA9IGNoaWxkLT50cmF2ZXJzZU5leHROb2RlKG8pOyAg
IC8vIE90aGVyd2lzZSBkZXNjZW5kIChFTUJFRHMgbWF5IGJlIGluc2lkZSBDT01NRU5UIHRhZ3Mp
CkBAIC03MTksNyArNzE4LDcgQEAgdm9pZCBSZW5kZXJQYXJ0T2JqZWN0Ojp1cGRhdGVXaWRnZXQo
KQogICAgICAgLy8gR2V0IHRoZSBhdHRyaWJ1dGVzIGZyb20gdGhlIHBhcmFtcyBpZiB0aGVyZSBp
cyBubyBFTUJFRCB0YWcuCiAgICAgICBOb2RlSW1wbCAqY2hpbGQgPSBvLT5maXJzdENoaWxkKCk7
CiAgICAgICB3aGlsZSAoY2hpbGQgJiYgKHVybC5pc0VtcHR5KCkgfHwgc2VydmljZVR5cGUuaXNF
bXB0eSgpIHx8ICFlbWJlZCkpIHsKLSAgICAgICAgICBpZiAoY2hpbGQtPmlkKCkgPT0gSURfUEFS
QU0pIHsKKyAgICAgICAgICBpZiAoY2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpwYXJhbSgp
KSkgewogICAgICAgICAgICAgICBIVE1MUGFyYW1FbGVtZW50SW1wbCAqcCA9IHN0YXRpY19jYXN0
PEhUTUxQYXJhbUVsZW1lbnRJbXBsICo+KCBjaGlsZCApOwogICAgICAgICAgICAgICBRU3RyaW5n
IG5hbWUgPSBwLT5uYW1lKCkuc3RyaW5nKCkubG93ZXIoKTsKICAgICAgICAgICAgICAgaWYgKHVy
bC5pc0VtcHR5KCkgJiYgKG5hbWUgPT0gInNyYyIgfHwgbmFtZSA9PSAibW92aWUiIHx8IG5hbWUg
PT0gImNvZGUiIHx8IG5hbWUgPT0gInVybCIpKSB7CkBAIC04MTAsMTQgKzgwOSwxNCBAQCB2b2lk
IFJlbmRlclBhcnRPYmplY3Q6OnVwZGF0ZVdpZGdldCgpCiAgICAgICAvLyBGaW5kIG91dCBpZiB3
ZSBzdXBwb3J0IGZhbGxiYWNrIGNvbnRlbnQuCiAgICAgICBtX2hhc0ZhbGxiYWNrQ29udGVudCA9
IGZhbHNlOwogICAgICAgZm9yIChOb2RlSW1wbCAqY2hpbGQgPSBvLT5maXJzdENoaWxkKCk7IGNo
aWxkICYmICFtX2hhc0ZhbGxiYWNrQ29udGVudDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmco
KSkgewotICAgICAgICAgIGlmICgoIWNoaWxkLT5pc1RleHROb2RlKCkgJiYgY2hpbGQtPmlkKCkg
IT0gSURfRU1CRUQgJiYgY2hpbGQtPmlkKCkgIT0gSURfUEFSQU0pIHx8IC8vIERpc2NvdW50IDxl
bWJlZD4gYW5kIDxwYXJhbT4KKyAgICAgICAgICBpZiAoKCFjaGlsZC0+aXNUZXh0Tm9kZSgpICYm
ICFjaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmVtYmVkKCkpICYmICFjaGlsZC0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OnBhcmFtKCkpKSB8fCAvLyBEaXNjb3VudCA8ZW1iZWQ+IGFuZCA8cGFy
YW0+CiAgICAgICAgICAgICAgIChjaGlsZC0+aXNUZXh0Tm9kZSgpICYmICFjaGlsZC0+Y29udGFp
bnNPbmx5V2hpdGVzcGFjZSgpKSkKICAgICAgICAgICAgICAgbV9oYXNGYWxsYmFja0NvbnRlbnQg
PSB0cnVlOwogICAgICAgfQogICAgICAgYm9vbCBzdWNjZXNzID0gcGFydC0+cmVxdWVzdE9iamVj
dCggdGhpcywgdXJsLCBzZXJ2aWNlVHlwZSwgcGFyYW1OYW1lcywgcGFyYW1WYWx1ZXMgKTsKICAg
ICAgIGlmICghc3VjY2VzcyAmJiBtX2hhc0ZhbGxiYWNrQ29udGVudCkKICAgICAgICAgICBvLT5y
ZW5kZXJGYWxsYmFja0NvbnRlbnQoKTsKLSAgfSBlbHNlIGlmICggZWxlbWVudCgpLT5pZCgpID09
IElEX0VNQkVEICkgeworICB9IGVsc2UgaWYgKGVsZW1lbnQoKS0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OmVtYmVkKCkpKSB7CiAKICAgICAgIEhUTUxFbWJlZEVsZW1lbnRJbXBsICpvID0gc3RhdGlj
X2Nhc3Q8SFRNTEVtYmVkRWxlbWVudEltcGwgKj4oZWxlbWVudCgpKTsKICAgICAgIHVybCA9IG8t
PnVybDsKQEAgLTg0NCw3ICs4NDMsNyBAQCB2b2lkIFJlbmRlclBhcnRPYmplY3Q6OnVwZGF0ZVdp
ZGdldCgpCiAgICAgICB9CiAgICAgICBwYXJ0LT5yZXF1ZXN0T2JqZWN0KCB0aGlzLCB1cmwsIHNl
cnZpY2VUeXBlLCBwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcyApOwogICB9IGVsc2UgewotICAgICAg
YXNzZXJ0KGVsZW1lbnQoKS0+aWQoKSA9PSBJRF9JRlJBTUUpOworICAgICAgYXNzZXJ0KGVsZW1l
bnQoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmlmcmFtZSgpKSk7CiAgICAgICBIVE1MSUZyYW1l
RWxlbWVudEltcGwgKm8gPSBzdGF0aWNfY2FzdDxIVE1MSUZyYW1lRWxlbWVudEltcGwgKj4oZWxl
bWVudCgpKTsKICAgICAgIHVybCA9IG8tPm1fVVJMLnN0cmluZygpOwogICAgICAgaWYgKHVybC5p
c0VtcHR5KCkpIHsKQEAgLTg5MCw3ICs4ODksNyBAQCB2b2lkIFJlbmRlclBhcnRPYmplY3Q6OnNs
b3RWaWV3Q2xlYXJlZCgpCiAgICAgICBRU2Nyb2xsVmlldzo6U2Nyb2xsQmFyTW9kZSBzY3JvbGwg
PSBRU2Nyb2xsVmlldzo6QXV0bzsKICAgICAgIGludCBtYXJnaW53ID0gLTE7CiAgICAgICBpbnQg
bWFyZ2luaCA9IC0xOwotICAgICAgaWYgKCBlbGVtZW50KCktPmlkKCkgPT0gSURfSUZSQU1FKSB7
CisgICAgICBpZiAoZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aWZyYW1lKCkpKSB7
CiAJICBIVE1MSUZyYW1lRWxlbWVudEltcGwgKmZyYW1lID0gc3RhdGljX2Nhc3Q8SFRNTElGcmFt
ZUVsZW1lbnRJbXBsICo+KGVsZW1lbnQoKSk7CiAJICBpZihmcmFtZS0+bV9mcmFtZUJvcmRlcikK
IAkgICAgICBmcmFtZVN0eWxlID0gUUZyYW1lOjpCb3g7CkBAIC05MTAsNyArOTA5LDcgQEAgdm9p
ZCBSZW5kZXJQYXJ0T2JqZWN0OjpzbG90Vmlld0NsZWFyZWQoKQogICAgICAgICAgIGtkRGVidWco
NjAzMSkgPDwgImZyYW1lIGlzIGEgS0hUTUx2aWV3ISIgPDwgZW5kbDsKICNlbmRpZgogICAgICAg
ICAgIEtIVE1MVmlldyAqaHRtbFZpZXcgPSBzdGF0aWNfY2FzdDxLSFRNTFZpZXcgKj4odmlldyk7
Ci0gICAgICAgICAgaHRtbFZpZXctPnNldElnbm9yZVdoZWVsRXZlbnRzKCBlbGVtZW50KCktPmlk
KCkgPT0gSURfSUZSQU1FICk7CisgICAgICAgICAgaHRtbFZpZXctPnNldElnbm9yZVdoZWVsRXZl
bnRzKGVsZW1lbnQoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmlmcmFtZSgpKSk7CiAgICAgICAg
ICAgaWYobWFyZ2ludyAhPSAtMSkgaHRtbFZpZXctPnNldE1hcmdpbldpZHRoKG1hcmdpbncpOwog
ICAgICAgICAgIGlmKG1hcmdpbmggIT0gLTEpIGh0bWxWaWV3LT5zZXRNYXJnaW5IZWlnaHQobWFy
Z2luaCk7CiAgICAgICAgIH0KSW5kZXg6IGtodG1sL3JlbmRlcmluZy9yZW5kZXJfaW1hZ2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3JlbmRlcmluZy9y
ZW5kZXJfaW1hZ2UuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjc3CmRpZmYgLXUgLXAgLXIx
Ljc3IGtodG1sL3JlbmRlcmluZy9yZW5kZXJfaW1hZ2UuY3BwCi0tLSBraHRtbC9yZW5kZXJpbmcv
cmVuZGVyX2ltYWdlLmNwcAk1IEp1bCAyMDA1IDIzOjIxOjExIC0wMDAwCTEuNzcKKysrIGtodG1s
L3JlbmRlcmluZy9yZW5kZXJfaW1hZ2UuY3BwCTggSnVsIDIwMDUgMDU6NTA6MzIgLTAwMDAKQEAg
LTM3LDEwICszNyw4IEBACiAjaW5jbHVkZSAiY3NzL2Nzc2hlbHBlci5oIgogI2luY2x1ZGUgIm1p
c2MvaGVscGVyLmgiCiAjaW5jbHVkZSAibWlzYy9odG1sYXR0cnMuaCIKLSNpbmNsdWRlICJtaXNj
L2h0bWx0YWdzLmgiCiAjaW5jbHVkZSAiaHRtbC9odG1sX2Zvcm1pbXBsLmgiCiAjaW5jbHVkZSAi
aHRtbC9odG1sX2ltYWdlaW1wbC5oIgotI2luY2x1ZGUgImh0bWwvZHRkLmgiCiAjaW5jbHVkZSAi
eG1sL2RvbTJfZXZlbnRzaW1wbC5oIgogI2luY2x1ZGUgImh0bWwvaHRtbF9kb2N1bWVudGltcGwu
aCIKICNpbmNsdWRlIDxtYXRoLmg+CkBAIC00MTksNyArNDE3LDcgQEAgdm9pZCBSZW5kZXJJbWFn
ZTo6cGFpbnQoUGFpbnRJbmZvJiBpLCBpbgogCiAKIC8vICAgICAgICAgICAgIHAtPmRyYXdQaXht
YXAoIG9mZnMueCgpLCB5LCBwaXgsIHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCBy
ZWN0LmhlaWdodCgpICk7Ci0gICAgICAgICAgICAgSFRNTEltYWdlRWxlbWVudEltcGwqIGkgPSAo
ZWxlbWVudCgpICYmIGVsZW1lbnQoKS0+aWQoKSA9PSBJRF9JTUcpID8gc3RhdGljX2Nhc3Q8SFRN
TEltYWdlRWxlbWVudEltcGwqPihlbGVtZW50KCkpIDogMDsKKyAgICAgICAgICAgICBIVE1MSW1h
Z2VFbGVtZW50SW1wbCogaSA9IChlbGVtZW50KCkgJiYgZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6aW1nKCkpKSA/IHN0YXRpY19jYXN0PEhUTUxJbWFnZUVsZW1lbnRJbXBsKj4oZWxl
bWVudCgpKSA6IDA7CiAgICAgICAgICAgICAgaWYgKGkgJiYgIWktPmNvbXBvc2l0ZU9wZXJhdG9y
KCkuaXNOdWxsKCkpewogICAgICAgICAgICAgICAgIHAtPmRyYXdQaXhtYXAgKG9mZnMsIHBpeCwg
cmVjdCwgaS0+Y29tcG9zaXRlT3BlcmF0b3IoKSk7CiAgICAgICAgICAgICAgfQpAQCAtNDg2LDcg
KzQ4NCw3IEBAIHZvaWQgUmVuZGVySW1hZ2U6OmxheW91dCgpCiAKIEhUTUxNYXBFbGVtZW50SW1w
bCogUmVuZGVySW1hZ2U6OmltYWdlTWFwKCkKIHsKLSAgICBIVE1MSW1hZ2VFbGVtZW50SW1wbCog
aSA9IGVsZW1lbnQoKS0+aWQoKSA9PSBJRF9JTUcgPyBzdGF0aWNfY2FzdDxIVE1MSW1hZ2VFbGVt
ZW50SW1wbCo+KGVsZW1lbnQoKSkgOiAwOworICAgIEhUTUxJbWFnZUVsZW1lbnRJbXBsKiBpID0g
ZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW1nKCkpID8gc3RhdGljX2Nhc3Q8SFRN
TEltYWdlRWxlbWVudEltcGwqPihlbGVtZW50KCkpIDogMDsKICAgICByZXR1cm4gaSA/IGktPmdl
dERvY3VtZW50KCktPmdldEltYWdlTWFwKGktPmltYWdlTWFwKCkpIDogMDsKIH0KIApAQCAtNTEy
LDkgKzUxMCw5IEBAIGJvb2wgUmVuZGVySW1hZ2U6Om5vZGVBdFBvaW50KE5vZGVJbmZvJiAKIAog
dm9pZCBSZW5kZXJJbWFnZTo6dXBkYXRlQWx0VGV4dCgpCiB7Ci0gICAgaWYgKGVsZW1lbnQoKS0+
aWQoKSA9PSBJRF9JTlBVVCkKKyAgICBpZiAoZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6aW5wdXQoKSkpCiAgICAgICAgIGFsdCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnRJ
bXBsKj4oZWxlbWVudCgpKS0+YWx0VGV4dCgpOwotICAgIGVsc2UgaWYgKGVsZW1lbnQoKS0+aWQo
KSA9PSBJRF9JTUcpCisgICAgZWxzZSBpZiAoZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6aW1nKCkpKQogICAgICAgICBhbHQgPSBzdGF0aWNfY2FzdDxIVE1MSW1hZ2VFbGVtZW50SW1w
bCo+KGVsZW1lbnQoKSktPmFsdFRleHQoKTsKIH0KIApJbmRleDoga2h0bWwvcmVuZGVyaW5nL3Jl
bmRlcl9pbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1s
L3JlbmRlcmluZy9yZW5kZXJfaW1hZ2UuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yNwpkaWZm
IC11IC1wIC1yMS4yNyBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2ltYWdlLmgKLS0tIGtodG1sL3Jl
bmRlcmluZy9yZW5kZXJfaW1hZ2UuaAkyNSBGZWIgMjAwNSAwMDoyNToxMiAtMDAwMAkxLjI3Cisr
KyBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2ltYWdlLmgJOCBKdWwgMjAwNSAwNTo1MDozMiAtMDAw
MApAQCAtMjMsNyArMjMsNiBAQAogI2lmbmRlZiBSRU5ERVJfSU1BR0VfSAogI2RlZmluZSBSRU5E
RVJfSU1BR0VfSAogCi0jaW5jbHVkZSAiaHRtbC9kdGQuaCIKICNpbmNsdWRlICJodG1sL2h0bWxf
ZWxlbWVudGltcGwuaCIKICNpbmNsdWRlICJyZW5kZXJpbmcvcmVuZGVyX3JlcGxhY2VkLmgiCiAj
aW5jbHVkZSAiZG9tL2RvbV9zdHJpbmcuaCIKSW5kZXg6IGtodG1sL3JlbmRlcmluZy9yZW5kZXJf
bGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3Jl
bmRlcmluZy9yZW5kZXJfbGF5ZXIuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjk2CmRpZmYg
LXUgLXAgLXIxLjk2IGtodG1sL3JlbmRlcmluZy9yZW5kZXJfbGF5ZXIuY3BwCi0tLSBraHRtbC9y
ZW5kZXJpbmcvcmVuZGVyX2xheWVyLmNwcAkxMCBNYXkgMjAwNSAyMjoyNTowNCAtMDAwMAkxLjk2
CisrKyBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2xheWVyLmNwcAk4IEp1bCAyMDA1IDA1OjUwOjMz
IC0wMDAwCkBAIC00OSw3ICs0OSw2IEBACiAjaW5jbHVkZSAicmVuZGVyX2FyZW5hLmgiCiAjaW5j
bHVkZSAieG1sL2RvbV9kb2NpbXBsLmgiCiAjaW5jbHVkZSAieG1sL2RvbTJfZXZlbnRzaW1wbC5o
IgotI2luY2x1ZGUgIm1pc2MvaHRtbHRhZ3MuaCIKICNpbmNsdWRlICJodG1sL2h0bWxfYmxvY2tp
bXBsLmgiCiAKICNpbmNsdWRlIDxxc2Nyb2xsYmFyLmg+CkBAIC0xNDY3LDcgKzE0NjYsNyBAQCBp
bnQgTWFycXVlZTo6bWFycXVlZVNwZWVkKCkgY29uc3QKIHsKICAgICBpbnQgcmVzdWx0ID0gbV9s
YXllci0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+bWFycXVlZVNwZWVkKCk7CiAgICAgRE9NOjpOb2Rl
SW1wbCogZWx0ID0gbV9sYXllci0+cmVuZGVyZXIoKS0+ZWxlbWVudCgpOwotICAgIGlmIChlbHQg
JiYgZWx0LT5pZCgpID09IElEX01BUlFVRUUpIHsKKyAgICBpZiAoZWx0ICYmIGVsdC0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6Om1hcnF1ZWUoKSkpIHsKICAgICAgICAgSFRNTE1hcnF1ZWVFbGVtZW50
SW1wbCogbWFycXVlZUVsdCA9IHN0YXRpY19jYXN0PEhUTUxNYXJxdWVlRWxlbWVudEltcGwqPihl
bHQpOwogICAgICAgICByZXN1bHQgPSBrTWF4KHJlc3VsdCwgbWFycXVlZUVsdC0+bWluaW11bURl
bGF5KCkpOwogICAgIH0KSW5kZXg6IGtodG1sL3JlbmRlcmluZy9yZW5kZXJfbGluZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvcmVuZGVyaW5nL3JlbmRl
cl9saW5lLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40MwpkaWZmIC11IC1wIC1yMS40MyBr
aHRtbC9yZW5kZXJpbmcvcmVuZGVyX2xpbmUuY3BwCi0tLSBraHRtbC9yZW5kZXJpbmcvcmVuZGVy
X2xpbmUuY3BwCTUgSnVsIDIwMDUgMjM6MjE6MTIgLTAwMDAJMS40MworKysga2h0bWwvcmVuZGVy
aW5nL3JlbmRlcl9saW5lLmNwcAk4IEp1bCAyMDA1IDA1OjUwOjM0IC0wMDAwCkBAIC0zNyw3ICsz
Nyw2IEBACiAjaW5jbHVkZSAicmVuZGVyX2xpbmUuaCIKIAogI2luY2x1ZGUgImtodG1sdmlldy5o
IgotI2luY2x1ZGUgImh0bWx0YWdzLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBET007CiAKSW5kZXg6
IGtodG1sL3JlbmRlcmluZy9yZW5kZXJfbGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1dlYkNvcmUva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9saXN0LmNwcCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS42MgpkaWZmIC11IC1wIC1yMS42MiBraHRtbC9yZW5kZXJpbmcvcmVuZGVy
X2xpc3QuY3BwCi0tLSBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2xpc3QuY3BwCTUgSnVsIDIwMDUg
MjM6MjE6MTIgLTAwMDAJMS42MgorKysga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9saXN0LmNwcAk4
IEp1bCAyMDA1IDA1OjUwOjM1IC0wMDAwCkBAIC0yNiw3ICsyNiw4IEBACiAjaW5jbHVkZSAicmVu
ZGVyaW5nL3JlbmRlcl9jYW52YXMuaCIKIAogI2luY2x1ZGUgInhtbC9kb21fZG9jaW1wbC5oIgot
I2luY2x1ZGUgIm1pc2MvaHRtbHRhZ3MuaCIKKworI2luY2x1ZGUgImh0bWxuYW1lcy5oIgogCiAj
aW5jbHVkZSA8cXBhaW50ZXIuaD4KIApAQCAtMzcsNiArMzgsNyBAQAogLy8jZGVmaW5lIEJPWF9E
RUJVRwogCiB1c2luZyBET006OkRvY3VtZW50SW1wbDsKK3VzaW5nIERPTTo6SFRNTE5hbWVzOwog
dXNpbmcgbmFtZXNwYWNlIGtodG1sOwogCiBjb25zdCBpbnQgY01hcmtlclBhZGRpbmcgPSA3OwpA
QCAtMjEzLDcgKzIxNSw3IEBAIHN0YXRpYyBSZW5kZXJPYmplY3QqIGdldFBhcmVudE9mRmlyc3RM
aW4KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICAgICAgaWYgKGN1cnJDaGlsZC0+
c3R5bGUoKS0+aHRtbEhhY2tzKCkgJiYgY3VyckNoaWxkLT5lbGVtZW50KCkgJiYKLSAgICAgICAg
ICAgIChjdXJyQ2hpbGQtPmVsZW1lbnQoKS0+aWQoKSA9PSBJRF9VTCB8fCBjdXJyQ2hpbGQtPmVs
ZW1lbnQoKS0+aWQoKSA9PSBJRF9PTCkpCisgICAgICAgICAgICAoY3VyckNoaWxkLT5lbGVtZW50
KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp1bCgpKXx8IGN1cnJDaGlsZC0+ZWxlbWVudCgpLT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6b2woKSkpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAKICAgICAgICAgUmVuZGVyT2JqZWN0KiBsaW5lQm94ID0gZ2V0UGFyZW50T2ZGaXJzdExp
bmVCb3goY3VyckNoaWxkLCBtYXJrZXIpOwpJbmRleDoga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9v
YmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3Jl
bmRlcmluZy9yZW5kZXJfb2JqZWN0LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xOTcKZGlm
ZiAtdSAtcCAtcjEuMTk3IGtodG1sL3JlbmRlcmluZy9yZW5kZXJfb2JqZWN0LmNwcAotLS0ga2h0
bWwvcmVuZGVyaW5nL3JlbmRlcl9vYmplY3QuY3BwCTUgSnVsIDIwMDUgMjM6MjE6MTIgLTAwMDAJ
MS4xOTcKKysrIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfb2JqZWN0LmNwcAk4IEp1bCAyMDA1IDA1
OjUwOjM2IC0wMDAwCkBAIC00Myw2ICs0Myw3IEBACiAjaW5jbHVkZSAicmVuZGVyX2lubGluZS5o
IgogI2luY2x1ZGUgInJlbmRlcl9ibG9jay5oIgogI2luY2x1ZGUgInJlbmRlcl9mbGV4Ym94Lmgi
CisjaW5jbHVkZSAiaHRtbG5hbWVzLmgiCiAKICNpZiBBUFBMRV9DSEFOR0VTCiAvLyBGb3IgYWNj
ZXNzaWJpbGl0eQpAQCAtMTc1LDE3ICsxNzYsMTcgQEAgYm9vbCBSZW5kZXJPYmplY3Q6OmlzUm9v
dCgpIGNvbnN0CiAKIGJvb2wgUmVuZGVyT2JqZWN0Ojppc0JvZHkoKSBjb25zdAogewotICAgIHJl
dHVybiBlbGVtZW50KCkgJiYgZWxlbWVudCgpLT5yZW5kZXJlcigpID09IHRoaXMgJiYgZWxlbWVu
dCgpLT5pZCgpID09IElEX0JPRFk7CisgICAgcmV0dXJuIGVsZW1lbnQoKSAmJiBlbGVtZW50KCkt
PnJlbmRlcmVyKCkgPT0gdGhpcyAmJiBlbGVtZW50KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpi
b2R5KCkpOwogfQogCiBib29sIFJlbmRlck9iamVjdDo6aXNIUigpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIGVsZW1lbnQoKSAmJiBlbGVtZW50KCktPmlkKCkgPT0gSURfSFI7CisgICAgcmV0dXJuIGVs
ZW1lbnQoKSAmJiBlbGVtZW50KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpocigpKTsKIH0KIAog
Ym9vbCBSZW5kZXJPYmplY3Q6OmlzSFRNTE1hcnF1ZWUoKSBjb25zdAogewotICAgIHJldHVybiBl
bGVtZW50KCkgJiYgZWxlbWVudCgpLT5yZW5kZXJlcigpID09IHRoaXMgJiYgZWxlbWVudCgpLT5p
ZCgpID09IElEX01BUlFVRUU7CisgICAgcmV0dXJuIGVsZW1lbnQoKSAmJiBlbGVtZW50KCktPnJl
bmRlcmVyKCkgPT0gdGhpcyAmJiBlbGVtZW50KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjptYXJx
dWVlKCkpOwogfQogCiBib29sIFJlbmRlck9iamVjdDo6Y2FuSGF2ZUNoaWxkcmVuKCkgY29uc3QK
QEAgLTczNyw3ICs3MzgsNyBAQCBib29sIFJlbmRlck9iamVjdDo6c2l6ZXNUb01heFdpZHRoKCkg
Y29uCiAgICAgLy8gYnV0IHRoZXkgYWxsb3cgdGV4dCB0byBzaXQgb24gdGhlIHNhbWUgbGluZSBh
cyB0aGUgbWFycXVlZS4KICAgICBpZiAoaXNGbG9hdGluZygpIHx8IChpc0NvbXBhY3QoKSAmJiBp
c0lubGluZSgpKSB8fCAKICAgICAgICAgKGlzSW5saW5lQmxvY2tPcklubGluZVRhYmxlKCkgJiYg
IWlzSFRNTE1hcnF1ZWUoKSkgfHwKLSAgICAgICAgKGVsZW1lbnQoKSAmJiAoZWxlbWVudCgpLT5p
ZCgpID09IElEX0JVVFRPTiB8fCBlbGVtZW50KCktPmlkKCkgPT0gSURfTEVHRU5EKSkpCisgICAg
ICAgIChlbGVtZW50KCkgJiYgKGVsZW1lbnQoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJ1dHRv
bigpKSB8fCBlbGVtZW50KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpsZWdlbmQoKSkpKSkKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgCiAgICAgLy8gQ2hpbGRyZW4gb2YgYSBob3Jpem9udGFs
IG1hcnF1ZWUgZG8gbm90IGZpbGwgdGhlIGNvbnRhaW5lciBieSBkZWZhdWx0LgpAQCAtMTMyNiw3
ICsxMzI3LDcgQEAgUVN0cmluZyBSZW5kZXJPYmplY3Q6OmluZm9ybWF0aW9uKCkgY29ucwogICAg
IGlmIChlbGVtZW50KCkgJiYgZWxlbWVudCgpLT5hY3RpdmUoKSkgdHMgPDwgImFjdCAiOwogICAg
IGlmIChlbGVtZW50KCkgJiYgZWxlbWVudCgpLT5pc0xpbmsoKSkgdHMgPDwgImFuY2hvciAiOwog
ICAgIGlmIChlbGVtZW50KCkgJiYgZWxlbWVudCgpLT5mb2N1c2VkKCkpIHRzIDw8ICJmb2N1cyAi
OwotICAgIGlmIChlbGVtZW50KCkpIHRzIDw8ICIgPCIgPDwgIGdldFRhZ05hbWUoZWxlbWVudCgp
LT5pZCgpKS5zdHJpbmcoKSA8PCAiPiI7CisgICAgaWYgKGVsZW1lbnQoKSkgdHMgPDwgIiA8IiA8
PCAgZWxlbWVudCgpLT5sb2NhbE5hbWUoKS5zdHJpbmcoKSA8PCAiPiI7CiAgICAgdHMgPDwgIiAo
IiA8PCB4UG9zKCkgPDwgIiwiIDw8IHlQb3MoKSA8PCAiLCIgPDwgd2lkdGgoKSA8PCAiLCIgPDwg
aGVpZ2h0KCkgPDwgIikiCiAJPDwgKGlzVGFibGVDZWxsKCkgPwogCSAgICAoIFFTdHJpbmc6OmZy
b21MYXRpbjEoIiBbcj0iKSArCkBAIC0xNTU2LDcgKzE1NTcsNyBAQCB2b2lkIFJlbmRlck9iamVj
dDo6c2V0U3R5bGUoUmVuZGVyU3R5bGUgCiAgICAgICAgIC8vIFRoZSBiYWNrZ3JvdW5kIG9mIHRo
ZSByb290IGVsZW1lbnQgb3IgdGhlIGJvZHkgZWxlbWVudCBjb3VsZCBwcm9wYWdhdGUgdXAgdG8K
ICAgICAgICAgLy8gdGhlIGNhbnZhcy4gIEp1c3QgZGlydHkgdGhlIGVudGlyZSBjYW52YXMgd2hl
biBvdXIgc3R5bGUgY2hhbmdlcyBzdWJzdGFudGlhbGx5LgogICAgICAgICBpZiAoZCA+PSBSZW5k
ZXJTdHlsZTo6UmVwYWludCAmJiBlbGVtZW50KCkgJiYKLSAgICAgICAgICAgIChlbGVtZW50KCkt
PmlkKCkgPT0gSURfSFRNTCB8fCBlbGVtZW50KCktPmlkKCkgPT0gSURfQk9EWSkpCisgICAgICAg
ICAgICAoZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aHRtbCgpKSB8fCBlbGVtZW50
KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpib2R5KCkpKSkKICAgICAgICAgICAgIGNhbnZhcygp
LT5yZXBhaW50KCk7CiAgICAgICAgIGVsc2UgaWYgKG1fcGFyZW50ICYmICFpc1RleHQoKSkgewog
ICAgICAgICAgICAgLy8gRG8gYSByZXBhaW50IHdpdGggdGhlIG9sZCBzdHlsZSBmaXJzdCwgZS5n
LiwgZm9yIGV4YW1wbGUgaWYgd2UgZ28gZnJvbQpAQCAtMjE4OCw3ICsyMTg5LDcgQEAgdm9pZCBS
ZW5kZXJPYmplY3Q6OmdldFRleHREZWNvcmF0aW9uQ29sbwogICAgICAgICBpZiAoY3VyciAmJiBj
dXJyLT5pc1JlbmRlckJsb2NrKCkgJiYgY3Vyci0+Y29udGludWF0aW9uKCkpCiAgICAgICAgICAg
ICBjdXJyID0gY3Vyci0+Y29udGludWF0aW9uKCk7CiAgICAgfSB3aGlsZSAoY3VyciAmJiBkZWNv
cmF0aW9ucyAmJiAoIXF1aXJrc01vZGUgfHwgIWN1cnItPmVsZW1lbnQoKSB8fAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjdXJyLT5lbGVtZW50KCktPmlkKCkgIT0gSURf
QSAmJiBjdXJyLT5lbGVtZW50KCktPmlkKCkgIT0gSURfRk9OVCkpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoIWN1cnItPmVsZW1lbnQoKS0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OmEoKSkgJiYgIWN1cnItPmVsZW1lbnQoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZv
bnQoKSkpKSk7CiAKICAgICAvLyBJZiB3ZSBiYWlsZWQgb3V0LCB1c2UgdGhlIGVsZW1lbnQgd2Ug
YmFpbGVkIG91dCBhdCAodHlwaWNhbGx5IGEgPGZvbnQ+IG9yIDxhPiBlbGVtZW50KS4KICAgICBp
ZiAoZGVjb3JhdGlvbnMgJiYgY3VycikgewpAQCAtMjMyMiw3ICsyMzIzLDcgQEAgdm9pZCBSZW5k
ZXJPYmplY3Q6OnNldFBpeG1hcChjb25zdCBRUGl4bQogICAgIC8vIHdvdWxkIGF2b2lkIHB1dHRp
bmcgdGhpcyBmdW5jdGlvbiBhbmQgdGhlIENhY2hlZE9iamVjdENsaWVudCBiYXNlIGNsYXNzIGlu
dG8gUmVuZGVyT2JqZWN0LgogCiAgICAgaWYgKGltYWdlICYmIGltYWdlLT5waXhtYXBfc2l6ZSgp
ID09IGltYWdlLT52YWxpZF9yZWN0KCkuc2l6ZSgpICYmIHBhcmVudCgpKSB7Ci0gICAgICAgIGlm
IChjYW52YXMoKSAmJiBlbGVtZW50KCkgJiYgKGVsZW1lbnQoKS0+aWQoKSA9PSBJRF9IVE1MIHx8
IGVsZW1lbnQoKS0+aWQoKSA9PSBJRF9CT0RZKSkKKyAgICAgICAgaWYgKGNhbnZhcygpICYmIGVs
ZW1lbnQoKSAmJiAoZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aHRtbCgpKSB8fCBl
bGVtZW50KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpib2R5KCkpKSkKICAgICAgICAgICAgIGNh
bnZhcygpLT5yZXBhaW50KCk7ICAgIC8vIHJlcGFpbnQgdGhlIGVudGlyZSBjYW52YXMgc2luY2Ug
dGhlIGJhY2tncm91bmQgZ2V0cyBwcm9wYWdhdGVkIHVwCiAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgIHJlcGFpbnQoKTsgICAgICAgICAgICAgIC8vIHJlcGFpbnQgb2JqZWN0LCB3aGljaCBpcyBh
IGJveCBvciBhIGNvbnRhaW5lciB3aXRoIGJveGVzIGluc2lkZSBpdApJbmRleDoga2h0bWwvcmVu
ZGVyaW5nL3JlbmRlcl9zdHlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dl
YkNvcmUva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9zdHlsZS5jcHAsdgpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuNjYKZGlmZiAtdSAtcCAtcjEuNjYga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9zdHlsZS5j
cHAKLS0tIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfc3R5bGUuY3BwCTExIEp1biAyMDA1IDAxOjU4
OjAyIC0wMDAwCTEuNjYKKysrIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfc3R5bGUuY3BwCTggSnVs
IDIwMDUgMDU6NTA6MzcgLTAwMDAKQEAgLTYwNyw2ICs2MDcsOSBAQCB2b2lkIFJlbmRlclN0eWxl
OjpzZXRIYXNQc2V1ZG9TdHlsZShQc2V1CiAKIFJlbmRlclN0eWxlKiBSZW5kZXJTdHlsZTo6Z2V0
UHNldWRvU3R5bGUoUHNldWRvSWQgcGlkKQogeworICAgIGlmICghcHNldWRvU3R5bGUpCisgICAg
ICAgIHJldHVybiAwOworCiAgICAgUmVuZGVyU3R5bGUgKnBzID0gMDsKICAgICBpZiAobm9uaW5o
ZXJpdGVkX2ZsYWdzLl9zdHlsZVR5cGU9PU5PUFNFVURPKSB7CiAJcHMgPSBwc2V1ZG9TdHlsZTsK
SW5kZXg6IGtodG1sL3JlbmRlcmluZy9yZW5kZXJfc3R5bGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9yZW5kZXJpbmcvcmVuZGVyX3N0eWxlLmgsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuODIKZGlmZiAtdSAtcCAtcjEuODIga2h0bWwvcmVuZGVyaW5nL3Jl
bmRlcl9zdHlsZS5oCi0tLSBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX3N0eWxlLmgJMTIgTWF5IDIw
MDUgMTc6MTE6MjIgLTAwMDAJMS44MgorKysga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9zdHlsZS5o
CTggSnVsIDIwMDUgMDU6NTA6MzggLTAwMDAKQEAgLTI5OSw4ICsyOTksMTAgQEAgY2xhc3MgU3R5
bGVTdXJyb3VuZERhdGEgOiBwdWJsaWMgU2hhcmVkPAogewogcHVibGljOgogICAgIFN0eWxlU3Vy
cm91bmREYXRhKCk7CisgICAgU3R5bGVTdXJyb3VuZERhdGEoY29uc3QgU3R5bGVTdXJyb3VuZERh
dGEmIG8pOworICAgIAorICAgIE1BSU5fVEhSRUFEX0FMTE9DQVRFRDsKIAotICAgIFN0eWxlU3Vy
cm91bmREYXRhKGNvbnN0IFN0eWxlU3Vycm91bmREYXRhJiBvICk7CiAgICAgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IFN0eWxlU3Vycm91bmREYXRhJiBvKSBjb25zdDsKICAgICBib29sIG9wZXJhdG9y
IT0oY29uc3QgU3R5bGVTdXJyb3VuZERhdGEmIG8pIGNvbnN0IHsKICAgICAgICAgcmV0dXJuICEo
KnRoaXMgPT0gbyk7CkBAIC0zMjAsOSArMzIyLDkgQEAgY2xhc3MgU3R5bGVCb3hEYXRhIDogcHVi
bGljIFNoYXJlZDxTdHlsZQogewogcHVibGljOgogICAgIFN0eWxlQm94RGF0YSgpOworICAgIFN0
eWxlQm94RGF0YShjb25zdCBTdHlsZUJveERhdGEmIG8pOwogCi0gICAgU3R5bGVCb3hEYXRhKGNv
bnN0IFN0eWxlQm94RGF0YSYgbyApOwotCisgICAgTUFJTl9USFJFQURfQUxMT0NBVEVEOwogCiAg
ICAgLy8gY29weSBhbmQgYXNzaWdubWVudAogLy8gICAgU3R5bGVCb3hEYXRhKGNvbnN0IFN0eWxl
Qm94RGF0YSAmb3RoZXIpOwpAQCAtMzk5LDExICs0MDEsMTEgQEAgY2xhc3MgU3R5bGVWaXN1YWxE
YXRhIDogcHVibGljIFNoYXJlZDxTdAogewogcHVibGljOgogICAgIFN0eWxlVmlzdWFsRGF0YSgp
OwotCiAgICAgflN0eWxlVmlzdWFsRGF0YSgpOwotCiAgICAgU3R5bGVWaXN1YWxEYXRhKGNvbnN0
IFN0eWxlVmlzdWFsRGF0YSYgbyApOwogCisgICAgTUFJTl9USFJFQURfQUxMT0NBVEVEOworCiAg
ICAgYm9vbCBvcGVyYXRvcj09KCBjb25zdCBTdHlsZVZpc3VhbERhdGEgJm8gKSBjb25zdCB7CiAJ
cmV0dXJuICggY2xpcCA9PSBvLmNsaXAgJiYKICAgICAgICAgICAgICAgICAgaGFzQ2xpcCA9PSBv
Lmhhc0NsaXAgJiYKQEAgLTUyMSw2ICs1MjMsOCBAQCBwdWJsaWM6CiAgICAgflN0eWxlQmFja2dy
b3VuZERhdGEoKSB7fQogICAgIFN0eWxlQmFja2dyb3VuZERhdGEoY29uc3QgU3R5bGVCYWNrZ3Jv
dW5kRGF0YSYgbyApOwogCisgICAgTUFJTl9USFJFQURfQUxMT0NBVEVEOworCiAgICAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IFN0eWxlQmFja2dyb3VuZERhdGEmIG8pIGNvbnN0OwogICAgIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBTdHlsZUJhY2tncm91bmREYXRhICZvKSBjb25zdCB7CiAJcmV0dXJu
ICEoKnRoaXMgPT0gbyk7CkBAIC01NDMsNiArNTQ3LDggQEAgcHVibGljOgogICAgIFN0eWxlTWFy
cXVlZURhdGEoKTsKICAgICBTdHlsZU1hcnF1ZWVEYXRhKGNvbnN0IFN0eWxlTWFycXVlZURhdGEm
IG8pOwogICAgIAorICAgIE1BSU5fVEhSRUFEX0FMTE9DQVRFRDsKKwogICAgIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBTdHlsZU1hcnF1ZWVEYXRhJiBvKSBjb25zdDsKICAgICBib29sIG9wZXJhdG9y
IT0oY29uc3QgU3R5bGVNYXJxdWVlRGF0YSYgbykgY29uc3QgewogICAgICAgICByZXR1cm4gISgq
dGhpcyA9PSBvKTsKQEAgLTU3MSw2ICs1NzcsOCBAQCBwdWJsaWM6CiAgICAgU3R5bGVGbGV4aWJs
ZUJveERhdGEoKTsKICAgICBTdHlsZUZsZXhpYmxlQm94RGF0YShjb25zdCBTdHlsZUZsZXhpYmxl
Qm94RGF0YSYgbyk7CiAKKyAgICBNQUlOX1RIUkVBRF9BTExPQ0FURUQ7CisKICAgICBib29sIG9w
ZXJhdG9yPT0oY29uc3QgU3R5bGVGbGV4aWJsZUJveERhdGEmIG8pIGNvbnN0OwogICAgIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBTdHlsZUZsZXhpYmxlQm94RGF0YSAmbykgY29uc3QgewogICAgICAg
ICByZXR1cm4gISgqdGhpcyA9PSBvKTsKQEAgLTY3Nyw2ICs2ODUsOCBAQCBwdWJsaWM6CiAgICAg
flN0eWxlQ1NTM05vbkluaGVyaXRlZERhdGEoKTsKICAgICBTdHlsZUNTUzNOb25Jbmhlcml0ZWRE
YXRhKGNvbnN0IFN0eWxlQ1NTM05vbkluaGVyaXRlZERhdGEmIG8pOwogCisgICAgTUFJTl9USFJF
QURfQUxMT0NBVEVEOworCiAjaWZuZGVmIEtIVE1MX05PX1hCTAogICAgIGJvb2wgYmluZGluZ3NF
cXVpdmFsZW50KGNvbnN0IFN0eWxlQ1NTM05vbkluaGVyaXRlZERhdGEmIG8pIGNvbnN0OwogI2Vu
ZGlmCkBAIC03MTUsNiArNzI1LDggQEAgcHVibGljOgogICAgIH5TdHlsZUNTUzNJbmhlcml0ZWRE
YXRhKCk7CiAgICAgU3R5bGVDU1MzSW5oZXJpdGVkRGF0YShjb25zdCBTdHlsZUNTUzNJbmhlcml0
ZWREYXRhJiBvKTsKIAorICAgIE1BSU5fVEhSRUFEX0FMTE9DQVRFRDsKKwogICAgIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBTdHlsZUNTUzNJbmhlcml0ZWREYXRhJiBvKSBjb25zdDsKICAgICBib29s
IG9wZXJhdG9yIT0oY29uc3QgU3R5bGVDU1MzSW5oZXJpdGVkRGF0YSAmbykgY29uc3QgewogICAg
ICAgICByZXR1cm4gISgqdGhpcyA9PSBvKTsKQEAgLTc2OSw2ICs3ODEsOCBAQCBwdWJsaWM6CiAg
ICAgflN0eWxlSW5oZXJpdGVkRGF0YSgpOwogICAgIFN0eWxlSW5oZXJpdGVkRGF0YShjb25zdCBT
dHlsZUluaGVyaXRlZERhdGEmIG8gKTsKIAorICAgIE1BSU5fVEhSRUFEX0FMTE9DQVRFRDsKKyAg
ICAKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgU3R5bGVJbmhlcml0ZWREYXRhJiBvKSBjb25z
dDsKICAgICBib29sIG9wZXJhdG9yICE9ICggY29uc3QgU3R5bGVJbmhlcml0ZWREYXRhICZvICkg
Y29uc3QgewogCXJldHVybiAhKCp0aGlzID09IG8pOwpJbmRleDoga2h0bWwvcmVuZGVyaW5nL3Jl
bmRlcl90YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0
bWwvcmVuZGVyaW5nL3JlbmRlcl90YWJsZS5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTI2
CmRpZmYgLXUgLXAgLXIxLjEyNiBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX3RhYmxlLmNwcAotLS0g
a2h0bWwvcmVuZGVyaW5nL3JlbmRlcl90YWJsZS5jcHAJMTEgTWF5IDIwMDUgMDI6MTA6MTAgLTAw
MDAJMS4xMjYKKysrIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfdGFibGUuY3BwCTggSnVsIDIwMDUg
MDU6NTA6NDAgLTAwMDAKQEAgLTMxLDggKzMxLDggQEAKICNpbmNsdWRlICJyZW5kZXJpbmcvcmVu
ZGVyX3RhYmxlLmgiCiAjaW5jbHVkZSAicmVuZGVyaW5nL3RhYmxlX2xheW91dC5oIgogI2luY2x1
ZGUgImh0bWwvaHRtbF90YWJsZWltcGwuaCIKLSNpbmNsdWRlICJtaXNjL2h0bWx0YWdzLmgiCiAj
aW5jbHVkZSAibWlzYy9odG1sYXR0cnMuaCIKKyNpbmNsdWRlICJodG1sbmFtZXMuaCIKICNpbmNs
dWRlICJ4bWwvZG9tX2RvY2ltcGwuaCIKIAogI2luY2x1ZGUgPGtnbG9iYWwuaD4KQEAgLTExMiw3
ICsxMTIsNyBAQCB2b2lkIFJlbmRlclRhYmxlOjphZGRDaGlsZChSZW5kZXJPYmplY3QgCiAjZW5k
aWYKICAgICBSZW5kZXJPYmplY3QgKm8gPSBjaGlsZDsKIAotICAgIGlmIChjaGlsZC0+ZWxlbWVu
dCgpICYmIGNoaWxkLT5lbGVtZW50KCktPmlkKCkgPT0gSURfRk9STSkgeworICAgIGlmIChjaGls
ZC0+ZWxlbWVudCgpICYmIGNoaWxkLT5lbGVtZW50KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpm
b3JtKCkpKSB7CiAgICAgICAgIFJlbmRlckNvbnRhaW5lcjo6YWRkQ2hpbGQoY2hpbGQsYmVmb3Jl
Q2hpbGQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMjYyLDcgKzI2Miw3IEBAIHZvaWQg
UmVuZGVyVGFibGU6OmxheW91dCgpCiAKICAgICBSZW5kZXJPYmplY3QgKmNoaWxkID0gZmlyc3RD
aGlsZCgpOwogICAgIHdoaWxlKCBjaGlsZCApIHsKLQlpZiAoIGNoaWxkLT5uZWVkc0xheW91dCgp
ICYmICEoY2hpbGQtPmVsZW1lbnQoKSAmJiBjaGlsZC0+ZWxlbWVudCgpLT5pZCgpID09IElEX0ZP
Uk0pKQorCWlmICggY2hpbGQtPm5lZWRzTGF5b3V0KCkgJiYgIShjaGlsZC0+ZWxlbWVudCgpICYm
IGNoaWxkLT5lbGVtZW50KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpmb3JtKCkpKSkKIAkgICAg
Y2hpbGQtPmxheW91dCgpOwogCWlmICggY2hpbGQtPmlzVGFibGVTZWN0aW9uKCkgKSB7CiAJICAg
IHN0YXRpY19jYXN0PFJlbmRlclRhYmxlU2VjdGlvbiAqPihjaGlsZCktPmNhbGNSb3dIZWlnaHQo
KTsKQEAgLTg0OSw3ICs4NDksNyBAQCB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6YWRkQ2hpbGQo
UmVuZGVyCiAjZW5kaWYKICAgICBSZW5kZXJPYmplY3QgKnJvdyA9IGNoaWxkOwogCi0gICAgaWYg
KGNoaWxkLT5lbGVtZW50KCkgJiYgY2hpbGQtPmVsZW1lbnQoKS0+aWQoKSA9PSBJRF9GT1JNKSB7
CisgICAgaWYgKGNoaWxkLT5lbGVtZW50KCkgJiYgY2hpbGQtPmVsZW1lbnQoKS0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OmZvcm0oKSkpIHsKICAgICAgICAgUmVuZGVyQ29udGFpbmVyOjphZGRDaGls
ZChjaGlsZCxiZWZvcmVDaGlsZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xNDk1LDcg
KzE0OTUsNyBAQCB2b2lkIFJlbmRlclRhYmxlUm93OjphZGRDaGlsZChSZW5kZXJPYmplCiAgICAg
a2REZWJ1ZyggNjA0MCApIDw8IHJlbmRlck5hbWUoKSA8PCAiKFRhYmxlUm93KTo6YWRkQ2hpbGQo
ICIgPDwgY2hpbGQtPnJlbmRlck5hbWUoKSA8PCAiICkiICA8PCAiLCAiIDw8CiAgICAgICAgICAg
ICAgICAgICAgICAgIChiZWZvcmVDaGlsZCA/IGJlZm9yZUNoaWxkLT5yZW5kZXJOYW1lKCkgOiAi
MCIpIDw8ICIgKSIgPDwgZW5kbDsKICNlbmRpZgotICAgIGlmIChjaGlsZC0+ZWxlbWVudCgpICYm
IGNoaWxkLT5lbGVtZW50KCktPmlkKCkgPT0gSURfRk9STSkgeworICAgIGlmIChjaGlsZC0+ZWxl
bWVudCgpICYmIGNoaWxkLT5lbGVtZW50KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpmb3JtKCkp
KSB7CiAgICAgICAgIFJlbmRlckNvbnRhaW5lcjo6YWRkQ2hpbGQoY2hpbGQsYmVmb3JlQ2hpbGQp
OwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTYwNiw3ICsxNjA2LDcgQEAgdm9pZCBSZW5k
ZXJUYWJsZUNlbGw6OnVwZGF0ZUZyb21FbGVtZW50KAogICAgIGludCBvbGRSU3BhbiA9IHJTcGFu
OwogICAgIGludCBvbGRDU3BhbiA9IGNTcGFuOwogICAgIERPTTo6Tm9kZUltcGwqIG5vZGUgPSBl
bGVtZW50KCk7Ci0gICAgaWYgKG5vZGUgJiYgKG5vZGUtPmlkKCkgPT0gSURfVEQgfHwgbm9kZS0+
aWQoKSA9PSBJRF9USCkpIHsKKyAgICBpZiAobm9kZSAmJiAobm9kZS0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OnRkKCkpIHx8IG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0aCgpKSkpIHsKICAg
ICAgICAgRE9NOjpIVE1MVGFibGVDZWxsRWxlbWVudEltcGwgKnRjID0gc3RhdGljX2Nhc3Q8RE9N
OjpIVE1MVGFibGVDZWxsRWxlbWVudEltcGwgKj4obm9kZSk7CiAgICAgICAgIGNTcGFuID0gdGMt
PmNvbFNwYW4oKTsKICAgICAgICAgclNwYW4gPSB0Yy0+cm93U3BhbigpOwpAQCAtMjI5MCw3ICsy
MjkwLDcgQEAgdm9pZCBSZW5kZXJUYWJsZUNvbDo6dXBkYXRlRnJvbUVsZW1lbnQoKQogewogICAg
IGludCBvbGRTcGFuID0gX3NwYW47CiAgICAgRE9NOjpOb2RlSW1wbCAqbm9kZSA9IGVsZW1lbnQo
KTsKLSAgICBpZiAobm9kZSAmJiAobm9kZS0+aWQoKSA9PSBJRF9DT0wgfHwgbm9kZS0+aWQoKSA9
PSBJRF9DT0xHUk9VUCkpIHsKKyAgICBpZiAobm9kZSAmJiAobm9kZS0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OmNvbCgpKSB8fCBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Y29sZ3JvdXAoKSkp
KSB7CiAgICAgICAgIERPTTo6SFRNTFRhYmxlQ29sRWxlbWVudEltcGwgKnRjID0gc3RhdGljX2Nh
c3Q8RE9NOjpIVE1MVGFibGVDb2xFbGVtZW50SW1wbCAqPihub2RlKTsKICAgICAgICAgX3NwYW4g
PSB0Yy0+c3BhbigpOwogICAgIH0gCkluZGV4OiBraHRtbC94bWwvZG9tMl9yYW5nZWltcGwuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3htbC9kb20yX3Jh
bmdlaW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNDAKZGlmZiAtdSAtcCAtcjEuNDAg
a2h0bWwveG1sL2RvbTJfcmFuZ2VpbXBsLmNwcAotLS0ga2h0bWwveG1sL2RvbTJfcmFuZ2VpbXBs
LmNwcAkxMyBNYXkgMjAwNSAxNjo0ODo1MSAtMDAwMAkxLjQwCisrKyBraHRtbC94bWwvZG9tMl9y
YW5nZWltcGwuY3BwCTggSnVsIDIwMDUgMDU6NTA6NDEgLTAwMDAKQEAgLTI5LDcgKzI5LDYgQEAK
ICNpbmNsdWRlICJkb21fdGV4dGltcGwuaCIKICNpbmNsdWRlICJkb21feG1saW1wbC5oIgogI2lu
Y2x1ZGUgImh0bWwvaHRtbF9lbGVtZW50aW1wbC5oIgotI2luY2x1ZGUgIm1pc2MvaHRtbHRhZ3Mu
aCIKICNpbmNsdWRlICJlZGl0aW5nL21hcmt1cC5oIgogI2luY2x1ZGUgImVkaXRpbmcvdmlzaWJs
ZV9wb3NpdGlvbi5oIgogI2luY2x1ZGUgImVkaXRpbmcvdmlzaWJsZV91bml0cy5oIgpJbmRleDog
a2h0bWwveG1sL2RvbTJfdHJhdmVyc2FsaW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1dlYkNvcmUva2h0bWwveG1sL2RvbTJfdHJhdmVyc2FsaW1wbC5jcHAsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuMTAKZGlmZiAtdSAtcCAtcjEuMTAga2h0bWwveG1sL2RvbTJfdHJhdmVy
c2FsaW1wbC5jcHAKLS0tIGtodG1sL3htbC9kb20yX3RyYXZlcnNhbGltcGwuY3BwCTEwIE1heSAy
MDA1IDIxOjU5OjE0IC0wMDAwCTEuMTAKKysrIGtodG1sL3htbC9kb20yX3RyYXZlcnNhbGltcGwu
Y3BwCTggSnVsIDIwMDUgMDU6NTA6NDIgLTAwMDAKQEAgLTI2LDggKzI2LDYgQEAKICNpbmNsdWRl
ICJkb20vZG9tX2V4Y2VwdGlvbi5oIgogI2luY2x1ZGUgInhtbC9kb21fZG9jaW1wbC5oIgogCi0j
aW5jbHVkZSAiaHRtbHRhZ3MuaCIKLQogbmFtZXNwYWNlIERPTSB7CiAKIE5vZGVGaWx0ZXJJbXBs
OjpOb2RlRmlsdGVySW1wbChOb2RlRmlsdGVyQ29uZGl0aW9uICpjb25kaXRpb24pCkluZGV4OiBr
aHRtbC94bWwvZG9tX2F0b21pY3N0cmluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L1dlYkNvcmUva2h0bWwveG1sL2RvbV9hdG9taWNzdHJpbmcuY3BwLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjkKZGlmZiAtdSAtcCAtcjEuOSBraHRtbC94bWwvZG9tX2F0b21pY3N0cmluZy5j
cHAKLS0tIGtodG1sL3htbC9kb21fYXRvbWljc3RyaW5nLmNwcAk4IEp1bCAyMDA1IDA1OjE5OjIx
IC0wMDAwCTEuOQorKysga2h0bWwveG1sL2RvbV9hdG9taWNzdHJpbmcuY3BwCTggSnVsIDIwMDUg
MDU6NTA6NDIgLTAwMDAKQEAgLTI2LDEzICsyNiw3IEBACiAvLyBwb3J0YWJsZSwgYW5kIGl0IHdv
dWxkIGJlIGdvb2QgdG8gZmlndXJlIG91dCBhIDEwMCUgY2xlYW4gd2F5IHRoYXQgc3RpbGwgYXZv
aWRzIGNvZGUgdGhhdAogLy8gcnVucyBhdCBpbml0IHRpbWUuCiAKLSNpZiBBUFBMRV9DSEFOR0VT
Ci0jZGVmaW5lIEFWT0lEX1NUQVRJQ19DT05TVFJVQ1RPUlMgMQotI2VuZGlmCi0KLSNpZiBBVk9J
RF9TVEFUSUNfQ09OU1RSVUNUT1JTCiAjZGVmaW5lIEtIVE1MX0FUT01JQ1NUUklOR19ISURFX0dM
T0JBTFMgMQotI2VuZGlmCiAKICNpbmNsdWRlICJkb21fYXRvbWljc3RyaW5nLmgiCiAjaW5jbHVk
ZSAieG1sL2RvbV9zdHJpbmdpbXBsLmgiCkBAIC0xNjUsNDIgKzE1OSwzMCBAQCB2b2lkIEF0b21p
Y1N0cmluZzo6cmVtb3ZlKERPTVN0cmluZ0ltcGwgCiAgICAgc3RyaW5nVGFibGUucmVtb3ZlKHIp
OwogfQogCi0vLyBHbG9iYWwgY29uc3RhbnRzIGZvciBwcm9wZXJ0eSBuYW1lIHN0cmluZ3MuCi0K
LSNpZiAhQVZPSURfU1RBVElDX0NPTlNUUlVDVE9SUwotICAgIC8vIERlZmluZSBhbiBBdG9taWNT
dHJpbmcgaW4gdGhlIG5vcm1hbCB3YXkuCi0gICAgI2RlZmluZSBERUZJTkVfR0xPQkFMKG5hbWUs
IHN0cmluZykgZXh0ZXJuIGNvbnN0IEF0b21pY1N0cmluZyBuYW1lICMjIEF0b20oc3RyaW5nKTsK
LQotICAgIGV4dGVybiBjb25zdCBBdG9taWNTdHJpbmcgbnVsbEF0b207Ci0gICAgZXh0ZXJuIGNv
bnN0IEF0b21pY1N0cmluZyBlbXB0eUF0b207Ci0jZWxzZQotICAgIC8vIERlZmluZSBhbiBBdG9t
aWNTdHJpbmctc2l6ZWQgYXJyYXkgb2YgcG9pbnRlcnMgdG8gYXZvaWQgc3RhdGljIGluaXRpYWxp
emF0aW9uLgotICAgIC8vIFVzZSBhbiBhcnJheSBvZiBwb2ludGVycyBpbnN0ZWFkIG9mIGFuIGFy
cmF5IG9mIGNoYXIgaW4gY2FzZSB0aGVyZSBpcyBzb21lIGFsaWdubWVudCBpc3N1ZS4KLSAgICAj
ZGVmaW5lIERFRklORV9HTE9CQUwobmFtZSwgc3RyaW5nKSBcCi0gICAgICAgIHZvaWQgKiBuYW1l
ICMjIEF0b21bKHNpemVvZihBdG9taWNTdHJpbmcpICsgc2l6ZW9mKHZvaWQgKikgLSAxKSAvIHNp
emVvZih2b2lkICopXTsKLQotICAgIERFRklORV9HTE9CQUwobnVsbCwgaWdub3JlZCkKLSAgICBE
RUZJTkVfR0xPQkFMKGVtcHR5LCBpZ25vcmVkKQotI2VuZGlmCi0KLSNkZWZpbmUgQ0FMTF9ERUZJ
TkVfR0xPQkFMKG5hbWUpIERFRklORV9HTE9CQUwobmFtZSwgI25hbWUpCi1LSFRNTF9BVE9NSUNT
VFJJTkdfRUFDSF9HTE9CQUwoQ0FMTF9ERUZJTkVfR0xPQkFMKQorLy8gRGVmaW5lIGFuIEF0b21p
Y1N0cmluZy1zaXplZCBhcnJheSBvZiBwb2ludGVycyB0byBhdm9pZCBzdGF0aWMgaW5pdGlhbGl6
YXRpb24uCisvLyBVc2UgYW4gYXJyYXkgb2YgcG9pbnRlcnMgaW5zdGVhZCBvZiBhbiBhcnJheSBv
ZiBjaGFyIGluIGNhc2UgdGhlcmUgaXMgc29tZSBhbGlnbm1lbnQgaXNzdWUuCisjZGVmaW5lIERF
RklORV9HTE9CQUwobmFtZSkgXAorICAgIHZvaWQqIG5hbWUgIyMgQXRvbVsoc2l6ZW9mKEF0b21p
Y1N0cmluZykgKyBzaXplb2Yodm9pZCopIC0gMSkgLyBzaXplb2Yodm9pZCopXTsKKworREVGSU5F
X0dMT0JBTChudWxsKQorREVGSU5FX0dMT0JBTChlbXB0eSkKK0RFRklORV9HTE9CQUwodGV4dCkK
K0RFRklORV9HTE9CQUwoY29tbWVudCkKK0RFRklORV9HTE9CQUwoc3RhcikKIAogdm9pZCBBdG9t
aWNTdHJpbmc6OmluaXQoKQogewotI2lmIEFWT0lEX1NUQVRJQ19DT05TVFJVQ1RPUlMKICAgICBz
dGF0aWMgYm9vbCBpbml0aWFsaXplZDsKICAgICBpZiAoIWluaXRpYWxpemVkKSB7CiAgICAgICAg
IC8vIFVzZSBwbGFjZW1lbnQgbmV3IHRvIGluaXRpYWxpemUgdGhlIGdsb2JhbHMuCiAgICAgICAg
IG5ldyAoJm51bGxBdG9tKSBBdG9taWNTdHJpbmc7CiAgICAgICAgIG5ldyAoJmVtcHR5QXRvbSkg
QXRvbWljU3RyaW5nKCIiKTsKLSAgICAgICAgCi0gICAgICAgICNkZWZpbmUgUExBQ0VNRU5UX05F
V19HTE9CQUwobmFtZSwgc3RyaW5nKSBuZXcgKCZuYW1lICMjIFByb3BlcnR5TmFtZSkgQXRvbWlj
U3RyaW5nKHN0cmluZyk7Ci0gICAgICAgICNkZWZpbmUgQ0FMTF9QTEFDRU1FTlRfTkVXX0dMT0JB
TChuYW1lKSBQTEFDRU1FTlRfTkVXX0dMT0JBTChuYW1lLCAjbmFtZSkKLSAgICAgICAgS0hUTUxf
QVRPTUlDU1RSSU5HX0VBQ0hfR0xPQkFMKENBTExfUExBQ0VNRU5UX05FV19HTE9CQUwpCisgICAg
ICAgIG5ldyAoJnRleHRBdG9tKSBBdG9taWNTdHJpbmcoIiN0ZXh0Iik7CisgICAgICAgIG5ldyAo
JmNvbW1lbnRBdG9tKSBBdG9taWNTdHJpbmcoIiNjb21tZW50Iik7CisgICAgICAgIG5ldyAoJnN0
YXJBdG9tKSBBdG9taWNTdHJpbmcoIioiKTsKKwogICAgICAgICBpbml0aWFsaXplZCA9IHRydWU7
CiAgICAgfQotI2VuZGlmCiB9CiAKIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBdG9taWNTdHJpbmcg
JmEsIGNvbnN0IERPTVN0cmluZyAmYikKSW5kZXg6IGtodG1sL3htbC9kb21fYXRvbWljc3RyaW5n
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwveG1sL2RvbV9h
dG9taWNzdHJpbmcuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40CmRpZmYgLXUgLXAgLXIxLjQg
a2h0bWwveG1sL2RvbV9hdG9taWNzdHJpbmcuaAotLS0ga2h0bWwveG1sL2RvbV9hdG9taWNzdHJp
bmcuaAkyOCBKdW4gMjAwNSAwMTo1NDozNCAtMDAwMAkxLjQKKysrIGtodG1sL3htbC9kb21fYXRv
bWljc3RyaW5nLmgJOCBKdWwgMjAwNSAwNTo1MDo0MiAtMDAwMApAQCAtNTUsNyArNTUsNyBAQCBw
dWJsaWM6CiAgICAgYm9vbCBwZXJjZW50YWdlKGludCAmX3BlcmNlbnRhZ2UpIGNvbnN0IHsgcmV0
dXJuIG1fc3RyaW5nLnBlcmNlbnRhZ2UoX3BlcmNlbnRhZ2UpOyB9CiAgICAga2h0bWw6Okxlbmd0
aCogdG9MZW5ndGhBcnJheShpbnQmIGxlbikgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcudG9MZW5n
dGhBcnJheShsZW4pOyB9CiAgICAga2h0bWw6Okxlbmd0aCogdG9Db29yZHNBcnJheShpbnQmIGxl
bikgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcudG9Db29yZHNBcnJheShsZW4pOyB9Ci0gICAgCisK
ICAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nLmlzTnVsbCgpOyB9CiAg
ICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcuaXNFbXB0eSgpOyB9CiAK
QEAgLTEwOSwxNiArMTA5LDE0IEBAIGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgQXRvbWlj
U3RyaW4KIAogLy8gTGlzdCBvZiBwcm9wZXJ0eSBuYW1lcywgcGFzc2VkIHRvIGEgbWFjcm8gc28g
d2UgY2FuIGRvIHNldCB0aGVtIHVwIHZhcmlvdXMKIC8vIHdheXMgd2l0aG91dCByZXBlYXRpbmcg
dGhlIGxpc3QuCi0jZGVmaW5lIEtIVE1MX0FUT01JQ1NUUklOR19FQUNIX0dMT0JBTChtYWNybykK
IAotICAgIC8vIERlZmluZSBleHRlcm5hbCBnbG9iYWwgdmFyaWFibGVzIGZvciBhbGwgcHJvcGVy
dHkgbmFtZXMgYWJvdmUgKGFuZCBvbmUgbW9yZSkuCisvLyBEZWZpbmUgZXh0ZXJuYWwgZ2xvYmFs
IHZhcmlhYmxlcyBmb3IgdGhlIGNvbW1vbmx5IHVzZWQgYXRvbWljIHN0cmluZ3MuCiAjaWYgIUtI
VE1MX0FUT01JQ1NUUklOR19ISURFX0dMT0JBTFMKICAgICBleHRlcm4gY29uc3QgQXRvbWljU3Ry
aW5nIG51bGxBdG9tOwogICAgIGV4dGVybiBjb25zdCBBdG9taWNTdHJpbmcgZW1wdHlBdG9tOwot
I2RlZmluZSBLSFRNTF9BVE9NSUNTVFJJTkdfREVDTEFSRV9HTE9CQUwobmFtZSkgZXh0ZXJuIGNv
bnN0IEF0b21pY1N0cmluZyBuYW1lICMjIFByb3BlcnR5TmFtZTsKLSAgICBLSFRNTF9BVE9NSUNT
VFJJTkdfRUFDSF9HTE9CQUwoS0hUTUxfQVRPTUlDU1RSSU5HX0RFQ0xBUkVfR0xPQkFMKQotICAg
IEtIVE1MX0FUT01JQ1NUUklOR19ERUNMQVJFX0dMT0JBTChzcGVjaWFsUHJvdG90eXBlKQotI3Vu
ZGVmIEtIVE1MX0FUT01JQ1NUUklOR19ERUNMQVJFX0dMT0JBTAorICAgIGV4dGVybiBjb25zdCBB
dG9taWNTdHJpbmcgdGV4dEF0b207CisgICAgZXh0ZXJuIGNvbnN0IEF0b21pY1N0cmluZyBjb21t
ZW50QXRvbTsKKyAgICBleHRlcm4gY29uc3QgQXRvbWljU3RyaW5nIHN0YXJBdG9tOwogI2VuZGlm
CiAgICAgICAgIAogYm9vbCBvcGVyYXRvcj09KGNvbnN0IEF0b21pY1N0cmluZyAmYSwgY29uc3Qg
RE9NU3RyaW5nICZiKTsKSW5kZXg6IGtodG1sL3htbC9kb21fZG9jaW1wbC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwveG1sL2RvbV9kb2NpbXBsLmNwcCx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yMzEKZGlmZiAtdSAtcCAtcjEuMjMxIGtodG1sL3htbC9k
b21fZG9jaW1wbC5jcHAKLS0tIGtodG1sL3htbC9kb21fZG9jaW1wbC5jcHAJMyBKdWwgMjAwNSAx
MDowNTowOCAtMDAwMAkxLjIzMQorKysga2h0bWwveG1sL2RvbV9kb2NpbXBsLmNwcAk4IEp1bCAy
MDA1IDA1OjUwOjQ0IC0wMDAwCkBAIC0zNCw4ICszNCw2IEBACiAjaW5jbHVkZSAieG1sL2RvbTJf
dmlld3NpbXBsLmgiCiAjaW5jbHVkZSAieG1sL3htbF90b2tlbml6ZXIuaCIKIAotI2luY2x1ZGUg
InhtbF9uYW1lc3BhY2VfdGFibGUuaCIKLQogI2luY2x1ZGUgImNzcy9jc3NoZWxwZXIuaCIKICNp
bmNsdWRlICJjc3MvY3Nzc3R5bGVzZWxlY3Rvci5oIgogI2luY2x1ZGUgImNzcy9jc3Nfc3R5bGVz
aGVldGltcGwuaCIKQEAgLTY1LDE3ICs2MywxMSBAQAogI2luY2x1ZGUgImtodG1sX3NldHRpbmdz
LmgiCiAjaW5jbHVkZSAia2h0bWxwYXJ0X3AuaCIKIAotI2luY2x1ZGUgImh0bWwvaHRtbF9iYXNl
aW1wbC5oIgotI2luY2x1ZGUgImh0bWwvaHRtbF9ibG9ja2ltcGwuaCIKLSNpbmNsdWRlICJodG1s
L2h0bWxfY2FudmFzaW1wbC5oIgorLy8gRklYTUU6IFdlIHdhbnQgdG8gY3V0IHRoZSByZW1haW5p
bmcgSFRNTCBkZXBlbmRlbmNpZXMgc28gdGhhdCB3ZSBkb24ndCBuZWVkIHRvIGluY2x1ZGUgdGhl
c2UgZmlsZXMuCiAjaW5jbHVkZSAiaHRtbC9odG1sX2RvY3VtZW50aW1wbC5oIgotI2luY2x1ZGUg
Imh0bWwvaHRtbF9mb3JtaW1wbC5oIgogI2luY2x1ZGUgImh0bWwvaHRtbF9oZWFkaW1wbC5oIgog
I2luY2x1ZGUgImh0bWwvaHRtbF9pbWFnZWltcGwuaCIKLSNpbmNsdWRlICJodG1sL2h0bWxfbGlz
dGltcGwuaCIKLSNpbmNsdWRlICJodG1sL2h0bWxfbWlzY2ltcGwuaCIKLSNpbmNsdWRlICJodG1s
L2h0bWxfdGFibGVpbXBsLmgiCi0jaW5jbHVkZSAiaHRtbC9odG1sX29iamVjdGltcGwuaCIKKyNp
bmNsdWRlICJodG1sZmFjdG9yeS5oIgogCiAjaW5jbHVkZSAiY3NzdmFsdWVzLmgiCiAKQEAgLTUw
NCw5ICs0OTYsOSBAQCBFbGVtZW50SW1wbCAqRG9jdW1lbnRJbXBsOjpkb2N1bWVudEVsZW1lCiAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsKj4obik7CiB9CiAKLUVsZW1lbnRJbXBs
ICpEb2N1bWVudEltcGw6OmNyZWF0ZUVsZW1lbnQoIGNvbnN0IERPTVN0cmluZyAmbmFtZSwgaW50
ICZleGNlcHRpb25jb2RlICkKK0VsZW1lbnRJbXBsICpEb2N1bWVudEltcGw6OmNyZWF0ZUVsZW1l
bnQoY29uc3QgRE9NU3RyaW5nICZuYW1lLCBpbnQgJmV4Y2VwdGlvbkNvZGUpCiB7Ci0gICAgcmV0
dXJuIG5ldyBYTUxFbGVtZW50SW1wbCggZG9jdW1lbnQsIG5hbWUuaW1wbGVtZW50YXRpb24oKSAp
OworICAgIHJldHVybiBjcmVhdGVFbGVtZW50TlMoZW1wdHlBdG9tLCBuYW1lLCBleGNlcHRpb25D
b2RlKTsKIH0KIAogRG9jdW1lbnRGcmFnbWVudEltcGwgKkRvY3VtZW50SW1wbDo6Y3JlYXRlRG9j
dW1lbnRGcmFnbWVudCggICkKQEAgLTU3MywxMCArNTY1LDggQEAgTm9kZUltcGwgKkRvY3VtZW50
SW1wbDo6aW1wb3J0Tm9kZShOb2RlSQogICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUNvbW1lbnQo
aW1wb3J0ZWROb2RlLT5ub2RlVmFsdWUoKSk7CiAgICAgICAgIGNhc2UgTm9kZTo6RUxFTUVOVF9O
T0RFOiB7CiAgICAgICAgICAgICBFbGVtZW50SW1wbCAqb2xkRWxlbWVudCA9IHN0YXRpY19jYXN0
PEVsZW1lbnRJbXBsICo+KGltcG9ydGVkTm9kZSk7Ci0gICAgICAgICAgICBEb2N1bWVudEltcGwg
Km9sZERvYyA9IG9sZEVsZW1lbnQtPmdldERvY3VtZW50KCk7Ci0gICAgICAgICAgICBzdGF0aWMg
RE9NU3RyaW5nIEhUTUxOYW1lc3BhY2UoWEhUTUxfTkFNRVNQQUNFKTsKLSAgICAgICAgICAgIERP
TVN0cmluZyBlbGVtZW50TmFtZXNwYWNlID0gb2xkRWxlbWVudC0+aXNIVE1MRWxlbWVudCgpID8g
SFRNTE5hbWVzcGFjZSA6IG9sZEVsZW1lbnQtPm5hbWVzcGFjZVVSSSgpOwotICAgICAgICAgICAg
RWxlbWVudEltcGwgKm5ld0VsZW1lbnQgPSBjcmVhdGVFbGVtZW50TlMoZWxlbWVudE5hbWVzcGFj
ZS5pbXBsZW1lbnRhdGlvbigpLCBvbGRFbGVtZW50LT50YWdOYW1lKCksIGV4Y2VwdGlvbmNvZGUp
OworICAgICAgICAgICAgLy8gRklYTUU6IFByZWZpeCBpcyBsb3N0LiAgSXMgdGhhdCByaWdodD8K
KyAgICAgICAgICAgIEVsZW1lbnRJbXBsICpuZXdFbGVtZW50ID0gY3JlYXRlRWxlbWVudE5TKG9s
ZEVsZW1lbnQtPm5hbWVzcGFjZVVSSSgpLCBvbGRFbGVtZW50LT5sb2NhbE5hbWUoKSwgZXhjZXB0
aW9uY29kZSk7CiAgICAgICAgICAgICBpZiAoZXhjZXB0aW9uY29kZSAhPSAwKQogICAgICAgICAg
ICAgICAgIHJldHVybiAwOwogCkBAIC01OTcsNyArNTg3LDggQEAgTm9kZUltcGwgKkRvY3VtZW50
SW1wbDo6aW1wb3J0Tm9kZShOb2RlSQogICAgICAgICAgICAgICAgICAgICAgICAgLy8gIyMjIGV4
dHJhY3QgYW5kIHNldCBuZXcgcHJlZml4CiAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAg
ICAgICAgICAgICAgICBOb2RlSW1wbDo6SWQgbm9kZUlkID0gYXR0cklkKG9sZERvYy0+bmFtZXNw
YWNlVVJJKGF0dHItPmF0dHJJbXBsKCktPmlkKCkpLCBsb2NhbE5hbWUuaW1wbGVtZW50YXRpb24o
KSwgZmFsc2UgLyogYWxsb2NhdGUgKi8pOworICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTog
TG9zZSB0aGUgbmFtZXNwYWNlIGhlcmUgZm9yIG5vdy4gIFRoaXMgY29kZSB3aWxsIGNoYW5nZSBz
b29uIGFueXdheS4KKyAgICAgICAgICAgICAgICAgICAgTm9kZUltcGw6OklkIG5vZGVJZCA9IGF0
dHJJZCgwLCBsb2NhbE5hbWUuaW1wbGVtZW50YXRpb24oKSwgZmFsc2UgLyogYWxsb2NhdGUgKi8p
OwogICAgICAgICAgICAgICAgICAgICBuZXdFbGVtZW50LT5zZXRBdHRyaWJ1dGUobm9kZUlkLCB2
YWx1ZS5pbXBsZW1lbnRhdGlvbigpLCBleGNlcHRpb25jb2RlKTsKICAgICAgICAgICAgICAgICAg
ICAgaWYgKGV4Y2VwdGlvbmNvZGUgIT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgbmV3
RWxlbWVudC0+ZGVyZWYoKTsKQEAgLTYzNiwyOCArNjI3LDM2IEBAIE5vZGVJbXBsICpEb2N1bWVu
dEltcGw6OmltcG9ydE5vZGUoTm9kZUkKIAogRWxlbWVudEltcGwgKkRvY3VtZW50SW1wbDo6Y3Jl
YXRlRWxlbWVudE5TKCBjb25zdCBET01TdHJpbmcgJl9uYW1lc3BhY2VVUkksIGNvbnN0IERPTVN0
cmluZyAmX3F1YWxpZmllZE5hbWUsIGludCAmZXhjZXB0aW9uY29kZSkKIHsKLSAgICBFbGVtZW50
SW1wbCAqZSA9IDA7Ci0gICAgUVN0cmluZyBxTmFtZSA9IF9xdWFsaWZpZWROYW1lLnN0cmluZygp
OwotICAgIGludCBjb2xvblBvcyA9IHFOYW1lLmZpbmQoJzonLDApOwotCisgICAgLy8gU3BsaXQg
dGhlIG5hbWUuCisgICAgaW50IGV4Y2VwdGlvbkNvZGUgPSAwOworICAgIEVsZW1lbnRJbXBsKiBl
ID0gMDsKKyAgICBET01TdHJpbmcgcHJlZml4LCBsb2NhbE5hbWU7CisgICAgaW50IGNvbG9uUG9z
ID0gX3F1YWxpZmllZE5hbWUuZmluZCgnOicpOworICAgIGlmIChjb2xvblBvcyA+PSAwKSB7Cisg
ICAgICAgIHByZWZpeCA9IF9xdWFsaWZpZWROYW1lLnN1YnN0cmluZygwLCBjb2xvblBvcyk7Cisg
ICAgICAgIGxvY2FsTmFtZSA9IF9xdWFsaWZpZWROYW1lLnN1YnN0cmluZyhjb2xvblBvcysxLCBf
cXVhbGlmaWVkTmFtZS5sZW5ndGgoKSAtIGNvbG9uUG9zKTsKKyAgICB9CisgICAgZWxzZQorICAg
ICAgICBsb2NhbE5hbWUgPSBfcXVhbGlmaWVkTmFtZTsKKyAgICAKKyAgICAvLyBGSVhNRTogVXNl
IHJlZ2lzdGVyZWQgbmFtZXNwYWNlcyBhbmQgbG9vayB1cCBpbiBhIGhhc2ggdG8gZmluZCB0aGUg
cmlnaHQgZmFjdG9yeS4KICAgICBpZiAoX25hbWVzcGFjZVVSSSA9PSBYSFRNTF9OQU1FU1BBQ0Up
IHsKLSAgICAgICAgLy8gVXNlciByZXF1ZXN0ZWQgYW4gZWxlbWVudCBpbiB0aGUgWEhUTUwgbmFt
ZXNwYWNlIC0gdGhpcyBtZWFucyB3ZSBjcmVhdGUgYSBzcGVjaWZpYyBlbGVtZW50Ci0gICAgICAg
IC8vIChlbGVtZW50cyBub3QgaW4gdGhpcyBuYW1lc3BhY2UgYXJlIHRyZWF0ZWQgYXMgbm9ybWFs
IFhNTCBlbGVtZW50cykKLSAgICAgICAgZSA9IGNyZWF0ZUhUTUxFbGVtZW50KHFOYW1lLm1pZChj
b2xvblBvcysxKSwgZXhjZXB0aW9uY29kZSk7Ci0gICAgICAgIGlmIChleGNlcHRpb25jb2RlKQor
ICAgICAgICAvLyBGSVhNRTogUmVhbGx5IHNob3VsZCBvbmx5IGJlIGRvbmUgZnJvbSB0aGUgcHVi
bGljIERPTSBBUEkuICBJbnRlcm5hbCBjYWxsZXJzIGtub3cgdGhlIG5hbWUgaXMgdmFsaWQuCisg
ICAgICAgIGlmICghaXNWYWxpZE5hbWUobG9jYWxOYW1lKSkgeworICAgICAgICAgICAgZXhjZXB0
aW9uY29kZSA9IERPTUV4Y2VwdGlvbjo6SU5WQUxJRF9DSEFSQUNURVJfRVJSOwogICAgICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgICAgIGlmIChlICYmIGNvbG9uUG9zID49IDApIHsKLSAgICAgICAg
ICAgIGUtPnNldFByZWZpeChxTmFtZS5sZWZ0KGNvbG9uUG9zKSwgZXhjZXB0aW9uY29kZSk7Ci0g
ICAgICAgICAgICBpZiAoZXhjZXB0aW9uY29kZSkgewotICAgICAgICAgICAgICAgIGRlbGV0ZSBl
OworICAgICAgICB9CisgICAgICAgIGUgPSBIVE1MRWxlbWVudEZhY3Rvcnk6OmNyZWF0ZUhUTUxF
bGVtZW50KEF0b21pY1N0cmluZyhsb2NhbE5hbWUpLCB0aGlzLCAwLCBmYWxzZSk7CisgICAgICAg
IGlmIChlICYmICFwcmVmaXguaXNOdWxsKCkpIHsKKyAgICAgICAgICAgIGUtPnNldFByZWZpeChB
dG9taWNTdHJpbmcocHJlZml4KSwgZXhjZXB0aW9uQ29kZSk7CisgICAgICAgICAgICBpZiAoZXhj
ZXB0aW9uQ29kZSkKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIH0KICAg
ICAgICAgfQogICAgIH0KLQorICAgIAogICAgIGlmICghZSkKLSAgICAgICAgZSA9IG5ldyBYTUxF
bGVtZW50SW1wbCggZG9jdW1lbnQsIF9xdWFsaWZpZWROYW1lLmltcGxlbWVudGF0aW9uKCksIF9u
YW1lc3BhY2VVUkkuaW1wbGVtZW50YXRpb24oKSApOwotCisgICAgICAgIGUgPSBuZXcgRWxlbWVu
dEltcGwoUXVhbGlmaWVkTmFtZShBdG9taWNTdHJpbmcocHJlZml4KSwgQXRvbWljU3RyaW5nKGxv
Y2FsTmFtZSksIEF0b21pY1N0cmluZyhfbmFtZXNwYWNlVVJJKSksIGRvY3VtZW50KTsKKyAgICAK
ICAgICByZXR1cm4gZTsKIH0KIApAQCAtODExLDIyMCArODEwLDYgQEAgdW5zaWduZWQgc2hvcnQg
RG9jdW1lbnRJbXBsOjpub2RlVHlwZSgpIAogICAgIHJldHVybiBOb2RlOjpET0NVTUVOVF9OT0RF
OwogfQogCi1FbGVtZW50SW1wbCAqRG9jdW1lbnRJbXBsOjpjcmVhdGVIVE1MRWxlbWVudCggY29u
c3QgRE9NU3RyaW5nICZuYW1lLCBpbnQgJmV4Y2VwdGlvbmNvZGUgKQotewotICAgIGlmICghaXNW
YWxpZE5hbWUobmFtZSkpIHsKLSAgICAgICAgZXhjZXB0aW9uY29kZSA9IERPTUV4Y2VwdGlvbjo6
SU5WQUxJRF9DSEFSQUNURVJfRVJSOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgcmV0
dXJuIGNyZWF0ZUhUTUxFbGVtZW50KHRhZ0lkKDAsIG5hbWUuaW1wbGVtZW50YXRpb24oKSwgZmFs
c2UpKTsKLX0KLQotRWxlbWVudEltcGwgKkRvY3VtZW50SW1wbDo6Y3JlYXRlSFRNTEVsZW1lbnQo
dW5zaWduZWQgc2hvcnQgdGFnSUQpCi17Ci0gICAgc3dpdGNoICh0YWdJRCkKLSAgICB7Ci0gICAg
Y2FzZSBJRF9IVE1MOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxIdG1sRWxlbWVudEltcGwoZG9j
UHRyKCkpOwotICAgIGNhc2UgSURfSEVBRDoKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MSGVhZEVs
ZW1lbnRJbXBsKGRvY1B0cigpKTsKLSAgICBjYXNlIElEX0JPRFk6Ci0gICAgICAgIHJldHVybiBu
ZXcgSFRNTEJvZHlFbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0KLS8vIGhlYWQgZWxlbWVudHMKLSAg
ICBjYXNlIElEX0JBU0U6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTEJhc2VFbGVtZW50SW1wbChk
b2NQdHIoKSk7Ci0gICAgY2FzZSBJRF9MSU5LOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxMaW5r
RWxlbWVudEltcGwoZG9jUHRyKCkpOwotICAgIGNhc2UgSURfTUVUQToKLSAgICAgICAgcmV0dXJu
IG5ldyBIVE1MTWV0YUVsZW1lbnRJbXBsKGRvY1B0cigpKTsKLSAgICBjYXNlIElEX1NUWUxFOgot
ICAgICAgICByZXR1cm4gbmV3IEhUTUxTdHlsZUVsZW1lbnRJbXBsKGRvY1B0cigpKTsKLSAgICBj
YXNlIElEX1RJVExFOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxUaXRsZUVsZW1lbnRJbXBsKGRv
Y1B0cigpKTsKLQotLy8gZnJhbWVzCi0gICAgY2FzZSBJRF9GUkFNRToKLSAgICAgICAgcmV0dXJu
IG5ldyBIVE1MRnJhbWVFbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0gICAgY2FzZSBJRF9GUkFNRVNF
VDoKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MRnJhbWVTZXRFbGVtZW50SW1wbChkb2NQdHIoKSk7
Ci0gICAgY2FzZSBJRF9JRlJBTUU6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTElGcmFtZUVsZW1l
bnRJbXBsKGRvY1B0cigpKTsKLQotLy8gZm9ybSBlbGVtZW50cwotLy8gIyMjIEZJWE1FOiB3ZSBu
ZWVkIGEgd2F5IHRvIHNldCBmb3JtIGRlcGVuZGVuY3kgYWZ0ZXIgd2UgaGF2ZSBtYWRlIHRoZSBm
b3JtIGVsZW1lbnRzCi0gICAgY2FzZSBJRF9GT1JNOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxG
b3JtRWxlbWVudEltcGwoZG9jUHRyKCkpOwotICAgIGNhc2UgSURfQlVUVE9OOgotICAgICAgICBy
ZXR1cm4gbmV3IEhUTUxCdXR0b25FbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0gICAgY2FzZSBJRF9G
SUVMRFNFVDoKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MRmllbGRTZXRFbGVtZW50SW1wbChkb2NQ
dHIoKSk7Ci0gICAgY2FzZSBJRF9JTlBVVDoKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MSW5wdXRF
bGVtZW50SW1wbChkb2NQdHIoKSk7Ci0gICAgY2FzZSBJRF9JU0lOREVYOgotICAgICAgICByZXR1
cm4gbmV3IEhUTUxJc0luZGV4RWxlbWVudEltcGwoZG9jUHRyKCkpOwotICAgIGNhc2UgSURfTEFC
RUw6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTExhYmVsRWxlbWVudEltcGwoZG9jUHRyKCkpOwot
ICAgIGNhc2UgSURfTEVHRU5EOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxMZWdlbmRFbGVtZW50
SW1wbChkb2NQdHIoKSk7Ci0gICAgY2FzZSBJRF9PUFRHUk9VUDoKLSAgICAgICAgcmV0dXJuIG5l
dyBIVE1MT3B0R3JvdXBFbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0gICAgY2FzZSBJRF9PUFRJT046
Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTE9wdGlvbkVsZW1lbnRJbXBsKGRvY1B0cigpKTsKLSAg
ICBjYXNlIElEX1NFTEVDVDoKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MU2VsZWN0RWxlbWVudElt
cGwoZG9jUHRyKCkpOwotICAgIGNhc2UgSURfVEVYVEFSRUE6Ci0gICAgICAgIHJldHVybiBuZXcg
SFRNTFRleHRBcmVhRWxlbWVudEltcGwoZG9jUHRyKCkpOwotCi0vLyBsaXN0cwotICAgIGNhc2Ug
SURfREw6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTERMaXN0RWxlbWVudEltcGwoZG9jUHRyKCkp
OwotICAgIGNhc2UgSURfREQ6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTEdlbmVyaWNFbGVtZW50
SW1wbChkb2NQdHIoKSwgdGFnSUQpOwotICAgIGNhc2UgSURfRFQ6Ci0gICAgICAgIHJldHVybiBu
ZXcgSFRNTEdlbmVyaWNFbGVtZW50SW1wbChkb2NQdHIoKSwgdGFnSUQpOwotICAgIGNhc2UgSURf
VUw6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTFVMaXN0RWxlbWVudEltcGwoZG9jUHRyKCkpOwot
ICAgIGNhc2UgSURfT0w6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTE9MaXN0RWxlbWVudEltcGwo
ZG9jUHRyKCkpOwotICAgIGNhc2UgSURfRElSOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxEaXJl
Y3RvcnlFbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0gICAgY2FzZSBJRF9NRU5VOgotICAgICAgICBy
ZXR1cm4gbmV3IEhUTUxNZW51RWxlbWVudEltcGwoZG9jUHRyKCkpOwotICAgIGNhc2UgSURfTEk6
Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTExJRWxlbWVudEltcGwoZG9jUHRyKCkpOwotCi0vLyBm
b3JtYXR0aW5nIGVsZW1lbnRzIChibG9jaykKLSAgICBjYXNlIElEX0JMT0NLUVVPVEU6Ci0gICAg
ICAgIHJldHVybiBuZXcgSFRNTEJsb2NrcXVvdGVFbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0gICAg
Y2FzZSBJRF9ESVY6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTERpdkVsZW1lbnRJbXBsKGRvY1B0
cigpKTsKLSAgICBjYXNlIElEX0gxOgotICAgIGNhc2UgSURfSDI6Ci0gICAgY2FzZSBJRF9IMzoK
LSAgICBjYXNlIElEX0g0OgotICAgIGNhc2UgSURfSDU6Ci0gICAgY2FzZSBJRF9INjoKLSAgICAg
ICAgcmV0dXJuIG5ldyBIVE1MSGVhZGluZ0VsZW1lbnRJbXBsKGRvY1B0cigpLCB0YWdJRCk7Ci0g
ICAgY2FzZSBJRF9IUjoKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MSFJFbGVtZW50SW1wbChkb2NQ
dHIoKSk7Ci0gICAgY2FzZSBJRF9QOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxQYXJhZ3JhcGhF
bGVtZW50SW1wbChkb2NQdHIoKSk7Ci0gICAgY2FzZSBJRF9QUkU6Ci0gICAgY2FzZSBJRF9YTVA6
Ci0gICAgY2FzZSBJRF9QTEFJTlRFWFQ6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTFByZUVsZW1l
bnRJbXBsKGRvY1B0cigpLCB0YWdJRCk7Ci0gICAgY2FzZSBJRF9MQVlFUjoKLSAgICAgICAgcmV0
dXJuIG5ldyBIVE1MTGF5ZXJFbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0KLS8vIGZvbnQgc3R1ZmYK
LSAgICBjYXNlIElEX0JBU0VGT05UOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxCYXNlRm9udEVs
ZW1lbnRJbXBsKGRvY1B0cigpKTsKLSAgICBjYXNlIElEX0ZPTlQ6Ci0gICAgICAgIHJldHVybiBu
ZXcgSFRNTEZvbnRFbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0KLS8vIGlucy9kZWwKLSAgICBjYXNl
IElEX0RFTDoKLSAgICBjYXNlIElEX0lOUzoKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MTW9kRWxl
bWVudEltcGwoZG9jUHRyKCksIHRhZ0lEKTsKLQotLy8gYW5jaG9yCi0gICAgY2FzZSBJRF9BOgot
ICAgICAgICByZXR1cm4gbmV3IEhUTUxBbmNob3JFbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0KLS8v
IGltYWdlcwotICAgIGNhc2UgSURfSU1HOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxJbWFnZUVs
ZW1lbnRJbXBsKGRvY1B0cigpKTsKLSAgICBjYXNlIElEX01BUDoKLSAgICAgICAgcmV0dXJuIG5l
dyBIVE1MTWFwRWxlbWVudEltcGwoZG9jUHRyKCkpOwotICAgIGNhc2UgSURfQVJFQToKLSAgICAg
ICAgcmV0dXJuIG5ldyBIVE1MQXJlYUVsZW1lbnRJbXBsKGRvY1B0cigpKTsKLSAgICBjYXNlIElE
X0NBTlZBUzoKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MQ2FudmFzRWxlbWVudEltcGwoZG9jUHRy
KCkpOwotCi0vLyBvYmplY3RzLCBhcHBsZXRzIGFuZCBzY3JpcHRzCi0gICAgY2FzZSBJRF9BUFBM
RVQ6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTEFwcGxldEVsZW1lbnRJbXBsKGRvY1B0cigpKTsK
LSAgICBjYXNlIElEX0VNQkVEOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxFbWJlZEVsZW1lbnRJ
bXBsKGRvY1B0cigpKTsKLSAgICBjYXNlIElEX09CSkVDVDoKLSAgICAgICAgcmV0dXJuIG5ldyBI
VE1MT2JqZWN0RWxlbWVudEltcGwoZG9jUHRyKCkpOwotICAgIGNhc2UgSURfUEFSQU06Ci0gICAg
ICAgIHJldHVybiBuZXcgSFRNTFBhcmFtRWxlbWVudEltcGwoZG9jUHRyKCkpOwotICAgIGNhc2Ug
SURfU0NSSVBUOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxTY3JpcHRFbGVtZW50SW1wbChkb2NQ
dHIoKSk7Ci0KLS8vIHRhYmxlcwotICAgIGNhc2UgSURfVEFCTEU6Ci0gICAgICAgIHJldHVybiBu
ZXcgSFRNTFRhYmxlRWxlbWVudEltcGwoZG9jUHRyKCkpOwotICAgIGNhc2UgSURfQ0FQVElPTjoK
LSAgICAgICAgcmV0dXJuIG5ldyBIVE1MVGFibGVDYXB0aW9uRWxlbWVudEltcGwoZG9jUHRyKCkp
OwotICAgIGNhc2UgSURfQ09MR1JPVVA6Ci0gICAgY2FzZSBJRF9DT0w6Ci0gICAgICAgIHJldHVy
biBuZXcgSFRNTFRhYmxlQ29sRWxlbWVudEltcGwoZG9jUHRyKCksIHRhZ0lEKTsKLSAgICBjYXNl
IElEX1RSOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxUYWJsZVJvd0VsZW1lbnRJbXBsKGRvY1B0
cigpKTsKLSAgICBjYXNlIElEX1REOgotICAgIGNhc2UgSURfVEg6Ci0gICAgICAgIHJldHVybiBu
ZXcgSFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsKGRvY1B0cigpLCB0YWdJRCk7Ci0gICAgY2FzZSBJ
RF9USEVBRDoKLSAgICBjYXNlIElEX1RCT0RZOgotICAgIGNhc2UgSURfVEZPT1Q6Ci0gICAgICAg
IHJldHVybiBuZXcgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsKGRvY1B0cigpLCB0YWdJRCwg
ZmFsc2UpOwotCi0vLyBpbmxpbmUgZWxlbWVudHMKLSAgICBjYXNlIElEX0JSOgotICAgICAgICBy
ZXR1cm4gbmV3IEhUTUxCUkVsZW1lbnRJbXBsKGRvY1B0cigpKTsKLSAgICBjYXNlIElEX1E6Ci0g
ICAgICAgIHJldHVybiBuZXcgSFRNTFF1b3RlRWxlbWVudEltcGwoZG9jUHRyKCkpOwotCi0gICAg
Y2FzZSBJRF9NQVJRVUVFOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxNYXJxdWVlRWxlbWVudElt
cGwoZG9jUHRyKCkpOwotICAgCi0vLyBlbGVtZW50cyB3aXRoIG5vIHNwZWNpYWwgcmVwcmVzZW50
YXRpb24gaW4gdGhlIERPTQotCi0vLyBibG9jazoKLSAgICBjYXNlIElEX0FERFJFU1M6Ci0gICAg
Y2FzZSBJRF9DRU5URVI6Ci0KLS8vIGlubGluZQotICAgICAgICAvLyAlZm9udHN0eWxlCi0gICAg
Y2FzZSBJRF9UVDoKLSAgICBjYXNlIElEX1U6Ci0gICAgY2FzZSBJRF9COgotICAgIGNhc2UgSURf
SToKLSAgICBjYXNlIElEX1M6Ci0gICAgY2FzZSBJRF9TVFJJS0U6Ci0gICAgY2FzZSBJRF9CSUc6
Ci0gICAgY2FzZSBJRF9TTUFMTDoKLQotICAgICAgICAvLyAlcGhyYXNlCi0gICAgY2FzZSBJRF9F
TToKLSAgICBjYXNlIElEX1NUUk9ORzoKLSAgICBjYXNlIElEX0RGTjoKLSAgICBjYXNlIElEX0NP
REU6Ci0gICAgY2FzZSBJRF9TQU1QOgotICAgIGNhc2UgSURfS0JEOgotICAgIGNhc2UgSURfVkFS
OgotICAgIGNhc2UgSURfQ0lURToKLSAgICBjYXNlIElEX0FCQlI6Ci0gICAgY2FzZSBJRF9BQ1JP
TllNOgotCi0gICAgICAgIC8vICVzcGVjaWFsCi0gICAgY2FzZSBJRF9TVUI6Ci0gICAgY2FzZSBJ
RF9TVVA6Ci0gICAgY2FzZSBJRF9TUEFOOgotICAgIGNhc2UgSURfTk9CUjoKLSAgICBjYXNlIElE
X1dCUjoKLQotICAgIGNhc2UgSURfQkRPOgotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBu
ZXcgSFRNTEdlbmVyaWNFbGVtZW50SW1wbChkb2NQdHIoKSwgdGFnSUQpOwotICAgIH0KLQotICAg
IHJldHVybiAwOwotfQotCiBRU3RyaW5nIERvY3VtZW50SW1wbDo6bmV4dFN0YXRlKCkKIHsKICAg
IFFTdHJpbmcgc3RhdGU7CkBAIC0xNDY0LDEwICsxMjQ5LDEwIEBAIEhUTUxFbGVtZW50SW1wbCog
RG9jdW1lbnRJbXBsOjpib2R5KCkKICAgICAvLyB0cnkgdG8gcHJlZmVyIGEgRlJBTUVTRVQgZWxl
bWVudCBvdmVyIEJPRFkKICAgICBOb2RlSW1wbCogYm9keSA9IDA7CiAgICAgZm9yIChOb2RlSW1w
bCogaSA9IGRlLT5maXJzdENoaWxkKCk7IGk7IGkgPSBpLT5uZXh0U2libGluZygpKSB7Ci0gICAg
ICAgIGlmIChpLT5pZCgpID09IElEX0ZSQU1FU0VUKQorICAgICAgICBpZiAoaS0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OmZyYW1lc2V0KCkpKQogICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PEhUTUxFbGVtZW50SW1wbCo+KGkpOwogICAgICAgICAKLSAgICAgICAgaWYgKGktPmlkKCkgPT0g
SURfQk9EWSkKKyAgICAgICAgaWYgKGktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpib2R5KCkpKQog
ICAgICAgICAgICAgYm9keSA9IGk7CiAgICAgfQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1M
RWxlbWVudEltcGwgKj4oYm9keSk7CkBAIC0xNTk3LDcgKzEzODIsNyBAQCBib29sIERvY3VtZW50
SW1wbDo6c2hvdWxkU2NoZWR1bGVMYXlvdXQoCiAgICAgLy8gKGMpIHdlIGhhdmUgYSA8Ym9keT4K
ICAgICByZXR1cm4gKHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+bmVlZHNMYXlvdXQoKSAmJiBo
YXZlU3R5bGVzaGVldHNMb2FkZWQoKSAmJgogICAgICAgICAgICAgZG9jdW1lbnRFbGVtZW50KCkg
JiYgZG9jdW1lbnRFbGVtZW50KCktPnJlbmRlcmVyKCkgJiYKLSAgICAgICAgICAgIChkb2N1bWVu
dEVsZW1lbnQoKS0+aWQoKSAhPSBJRF9IVE1MIHx8IGJvZHkoKSkpOworICAgICAgICAgICAgKCFk
b2N1bWVudEVsZW1lbnQoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omh0bWwoKSkgfHwgYm9keSgp
KSk7CiB9CiAKIGludCBEb2N1bWVudEltcGw6Om1pbmltdW1MYXlvdXREZWxheSgpCkBAIC0xNzIx
LDQyICsxNTA2LDYgQEAgdm9pZCBEb2N1bWVudEltcGw6OmRldGVybWluZVBhcnNlTW9kZSggYwog
ICAgIGtkRGVidWcoNjAyMCkgPDwgIiB1c2luZyBzdHJpY3QgcGFyc2VNb2RlIiA8PCBlbmRsOwog
fQogCi0vLyBQbGVhc2Ugc2VlIGlmIHRoZXJlYHMgYSBwb3NzaWJpbGl0eSB0byBtZXJnZSB0aGF0
IGNvZGUKLS8vIHdpdGggdGhlIG5leHQgZnVuY3Rpb24gYW5kIGdldEVsZW1lbnRCeUlEKCkuCi1O
b2RlSW1wbCAqRG9jdW1lbnRJbXBsOjpmaW5kRWxlbWVudCggSWQgaWQgKQotewotICAgIFFQdHJT
dGFjazxOb2RlSW1wbD4gbm9kZVN0YWNrOwotICAgIE5vZGVJbXBsICpjdXJyZW50ID0gX2ZpcnN0
OwotCi0gICAgd2hpbGUoMSkKLSAgICB7Ci0gICAgICAgIGlmKCFjdXJyZW50KQotICAgICAgICB7
Ci0gICAgICAgICAgICBpZihub2RlU3RhY2suaXNFbXB0eSgpKSBicmVhazsKLSAgICAgICAgICAg
IGN1cnJlbnQgPSBub2RlU3RhY2sucG9wKCk7Ci0gICAgICAgICAgICBjdXJyZW50ID0gY3VycmVu
dC0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGlmKGN1cnJlbnQtPmlkKCkgPT0gaWQpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGN1cnJlbnQ7Ci0KLSAgICAgICAgICAgIE5vZGVJbXBsICpjaGlsZCA9IGN1cnJlbnQtPmZpcnN0
Q2hpbGQoKTsKLSAgICAgICAgICAgIGlmKGNoaWxkKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIG5vZGVTdGFjay5wdXNoKGN1cnJlbnQpOwotICAgICAgICAgICAgICAgIGN1cnJlbnQg
PSBjaGlsZDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC0+bmV4dFNpYmxpbmcoKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCiBOb2RlSW1w
bCAqRG9jdW1lbnRJbXBsOjpuZXh0Rm9jdXNOb2RlKE5vZGVJbXBsICpmcm9tTm9kZSkKIHsKICAg
ICB1bnNpZ25lZCBzaG9ydCBmcm9tVGFiSW5kZXg7CkBAIC0yMTUxLDEyICsxOTAwLDEzIEBAIE5v
ZGVJbXBsOjpJZCBEb2N1bWVudEltcGw6OmF0dHJJZChET01TdHIKIAogICAgIC8vIG5vdyBsZXRz
IGZpbmQgb3V0IHRoZSBuYW1lc3BhY2UKICAgICBRX1VJTlQxNiBucyA9IG5vTmFtZXNwYWNlOwor
ICAgIC8qIEZJWE1FOiBKdXN0IGJyZWFrIG5hbWVzcGFjZWQgYXR0cmlidXRlcyBmb3Igbm93LiAg
V2lsbCBmaXggaW4gbmV4dCBzdGFnZSBvZiBRdWFsaWZpZWROYW1lIGNvbnZlcnNpb24uCiAgICAg
aWYgKF9uYW1lc3BhY2VVUkkpIHsKICAgICAgICAgRE9NU3RyaW5nIG5zVShfbmFtZXNwYWNlVVJJ
KTsKICAgICAgICAgaW50IG5zSUQgPSBYbWxOYW1lc3BhY2VUYWJsZTo6Z2V0TmFtZXNwYWNlSUQo
bnNVLCByZWFkb25seSk7CiAgICAgICAgIGlmIChuc0lEICE9IC0xKQogICAgICAgICAgICAgbnMg
PSAoUV9VSU5UMTYpbnNJRDsKLSAgICB9CisgICAgfSovCiAgICAgCiAgICAgLy8gTG9vayBpbiB0
aGUgbV9hdHRyTmFtZXMgYXJyYXkgZm9yIHRoZSBuYW1lCiAgICAgLy8gIyMjIHllYWgsIHRoaXMg
aXMgbGFtZS4gdXNlIGEgZGljdGlvbmFyeSAvIG1hcCBpbnN0ZWFkCkBAIC0yMjA3LDk1ICsxOTU3
LDYgQEAgRE9NU3RyaW5nIERvY3VtZW50SW1wbDo6YXR0ck5hbWUoTm9kZUltcAogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKLU5vZGVJbXBsOjpJZCBEb2N1bWVudEltcGw6OnRhZ0lkKERPTVN0cmlu
Z0ltcGwqIF9uYW1lc3BhY2VVUkksIERPTVN0cmluZ0ltcGwgKl9uYW1lLCBib29sIHJlYWRvbmx5
KQotewotICAgIGlmICghX25hbWUpIHJldHVybiAwOwotICAgIC8vIEVhY2ggZG9jdW1lbnQgbWFp
bnRhaW5zIGEgbWFwcGluZyBvZiB0YWcgbmFtZSAtPiBpZCBmb3IgZXZlcnkgdGFnIG5hbWUgZW5j
b3VudGVyZWQKLSAgICAvLyBpbiB0aGUgZG9jdW1lbnQuCi0gICAgTm9kZUltcGw6OklkIGlkID0g
MDsKLQotICAgIC8vIEZpcnN0IHNlZSBpZiBpdCdzIGEgSFRNTCBlbGVtZW50IG5hbWUKLSAgICBR
Q29uc3RTdHJpbmcgbihfbmFtZS0+cywgX25hbWUtPmwpOwotICAgIGlmICghX25hbWVzcGFjZVVS
SSB8fCAhc3RyY2FzZWNtcChfbmFtZXNwYWNlVVJJLCBYSFRNTF9OQU1FU1BBQ0UpKSB7Ci0gICAg
ICAgIC8vIHdlJ3JlIGluIEhUTUwgbmFtZXNwYWNlIGlmIHdlIGtub3cgdGhlIHRhZy4KLSAgICAg
ICAgLy8geGh0bWwgaXMgbG93ZXIgY2FzZSAtIGNhc2Ugc2Vuc2l0aXZlLCBlYXN5IHRvIGltcGxl
bWVudAotICAgICAgICBpZiAoIGh0bWxNb2RlKCkgPT0gWEh0bWwgJiYgKGlkID0gZ2V0VGFnSUQo
bi5zdHJpbmcoKS5hc2NpaSgpLCBfbmFtZS0+bCkpICkKLSAgICAgICAgICAgIHJldHVybiBpZDsK
LSAgICAgICAgLy8gY29tcGF0aWJpbGl0eTogdXBwZXIgY2FzZSAtIGNhc2UgaW5zZW5zaXRpdmUK
LSAgICAgICAgaWYgKCBodG1sTW9kZSgpICE9IFhIdG1sICYmIChpZCA9IGdldFRhZ0lEKG4uc3Ry
aW5nKCkubG93ZXIoKS5hc2NpaSgpLCBfbmFtZS0+bCApKSApCi0gICAgICAgICAgICByZXR1cm4g
aWQ7Ci0KLSAgICAgICAgLy8gb2ssIHRoZSBmYXN0IHBhdGggZGlkbid0IHdvcmsgb3V0LCB3ZSBu
ZWVkIHRoZSBmdWxsIGNoZWNrCi0gICAgfQotCi0gICAgLy8gbm93IGxldHMgZmluZCBvdXQgdGhl
IG5hbWVzcGFjZQotICAgIFFfVUlOVDE2IG5zID0gbm9OYW1lc3BhY2U7Ci0gICAgaWYgKF9uYW1l
c3BhY2VVUkkpIHsKLSAgICAgICAgRE9NU3RyaW5nIG5zVShfbmFtZXNwYWNlVVJJKTsKLSAgICAg
ICAgaW50IG5zSUQgPSBYbWxOYW1lc3BhY2VUYWJsZTo6Z2V0TmFtZXNwYWNlSUQobnNVLCByZWFk
b25seSk7Ci0gICAgICAgIGlmIChuc0lEICE9IC0xKQotICAgICAgICAgICAgbnMgPSAoUV9VSU5U
MTYpbnNJRDsKLSAgICB9Ci0KLSAgICAvLyBMb29rIGluIHRoZSBtX2VsZW1lbnROYW1lcyBhcnJh
eSBmb3IgdGhlIG5hbWUKLSAgICAvLyAjIyMgeWVhaCwgdGhpcyBpcyBsYW1lLiB1c2UgYSBkaWN0
aW9uYXJ5IC8gbWFwIGluc3RlYWQKLSAgICBET01TdHJpbmcgbm1lKG4uc3RyaW5nKCkpOwotICAg
IC8vIGNvbXBhdGliaWxpdHkgbW9kZSBoYXMgdG8gc3RvcmUgdXBwZXIgY2FzZQotICAgIGlmICho
dG1sTW9kZSgpICE9IFhIdG1sKSBubWUgPSBubWUudXBwZXIoKTsKLSAgICBmb3IgKGlkID0gMDsg
aWQgPCBtX2VsZW1lbnROYW1lQ291bnQ7IGlkKyspCi0gICAgICAgIGlmIChET01TdHJpbmcobV9l
bGVtZW50TmFtZXNbaWRdKSA9PSBubWUpCi0gICAgICAgICAgICByZXR1cm4gbWFrZUlkKG5zLCBJ
RF9MQVNUX1RBRyArIDEgKyBpZCk7Ci0KLSAgICAvLyB1bmtub3duCi0gICAgaWYgKHJlYWRvbmx5
KSByZXR1cm4gMDsKLQotICAgIC8vIE5hbWUgbm90IGZvdW5kIGluIG1fZWxlbWVudE5hbWVzLCBz
byBsZXQncyBhZGQgaXQKLSAgICBpZiAobV9lbGVtZW50TmFtZUNvdW50KzEgPiBtX2VsZW1lbnRO
YW1lQWxsb2MpIHsKLSAgICAgICAgbV9lbGVtZW50TmFtZUFsbG9jICs9IDEwMDsKLSAgICAgICAg
RE9NU3RyaW5nSW1wbCAqKm5ld05hbWVzID0gbmV3IERPTVN0cmluZ0ltcGwqIFttX2VsZW1lbnRO
YW1lQWxsb2NdOwotICAgICAgICAvLyAjIyMgeWVhaCwgdGhpcyBpcyBsYW1lLiB1c2UgYSBkaWN0
aW9uYXJ5IC8gbWFwIGluc3RlYWQKLSAgICAgICAgaWYgKG1fZWxlbWVudE5hbWVzKSB7Ci0gICAg
ICAgICAgICB1bnNpZ25lZCBzaG9ydCBpOwotICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG1f
ZWxlbWVudE5hbWVDb3VudDsgaSsrKQotICAgICAgICAgICAgICAgIG5ld05hbWVzW2ldID0gbV9l
bGVtZW50TmFtZXNbaV07Ci0gICAgICAgICAgICBkZWxldGUgW10gbV9lbGVtZW50TmFtZXM7Ci0g
ICAgICAgIH0KLSAgICAgICAgbV9lbGVtZW50TmFtZXMgPSBuZXdOYW1lczsKLSAgICB9Ci0KLSAg
ICBpZCA9IG1fZWxlbWVudE5hbWVDb3VudCsrOwotICAgIG1fZWxlbWVudE5hbWVzW2lkXSA9IG5t
ZS5pbXBsZW1lbnRhdGlvbigpOwotICAgIG1fZWxlbWVudE5hbWVzW2lkXS0+cmVmKCk7Ci0KLSAg
ICByZXR1cm4gbWFrZUlkKG5zLCBJRF9MQVNUX1RBRyArIDEgKyBpZCk7Ci19Ci0KLURPTVN0cmlu
ZyBEb2N1bWVudEltcGw6OnRhZ05hbWUoTm9kZUltcGw6OklkIF9pZCkgY29uc3QKLXsKLSAgICBp
ZiAobG9jYWxOYW1lUGFydChfaWQpID4gSURfTEFTVF9UQUcpCi0gICAgICAgIHJldHVybiBtX2Vs
ZW1lbnROYW1lc1tsb2NhbE5hbWVQYXJ0KF9pZCkgLSAoSURfTEFTVF9UQUcgKyAxKV07Ci0gICAg
ZWxzZSB7Ci0gICAgICAgIC8vICMjIyBwdXQgdGhlbSBpbiBhIGNhY2hlCi0gICAgICAgIGlmICho
dG1sTW9kZSgpID09IFhIdG1sKQotICAgICAgICAgICAgcmV0dXJuIGdldFRhZ05hbWUoX2lkKS5s
b3dlcigpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gZ2V0VGFnTmFtZShfaWQp
OwotICAgIH0KLX0KLQotCi1ET01TdHJpbmdJbXBsKiBEb2N1bWVudEltcGw6Om5hbWVzcGFjZVVS
SShOb2RlSW1wbDo6SWQgX2lkKSBjb25zdAotewotICAgIGlmIChfaWQgPD0gSURfTEFTVF9UQUcp
Ci0gICAgICAgIHJldHVybiBodG1sTW9kZSgpID09IFhIdG1sID8gWG1sTmFtZXNwYWNlVGFibGU6
OmdldE5hbWVzcGFjZVVSSSh4aHRtbE5hbWVzcGFjZSkuaW1wbGVtZW50YXRpb24oKSA6IDA7Ci0K
LSAgICB1bnNpZ25lZCBzaG9ydCBucyA9IF9pZCA+PiAxNjsKLQotICAgIGlmICghbnMpIHJldHVy
biAwOwotCi0gICAgcmV0dXJuIFhtbE5hbWVzcGFjZVRhYmxlOjpnZXROYW1lc3BhY2VVUkkobnMp
LmltcGxlbWVudGF0aW9uKCk7Ci19Ci0KIFN0eWxlU2hlZXRMaXN0SW1wbCogRG9jdW1lbnRJbXBs
OjpzdHlsZVNoZWV0cygpCiB7CiAgICAgcmV0dXJuIG1fc3R5bGVTaGVldHM7CkBAIC0yNDE5LDEx
ICsyMDgwLDExIEBAIHZvaWQgRG9jdW1lbnRJbXBsOjpyZWNhbGNTdHlsZVNlbGVjdG9yKCkKICAg
ICAgICAgICAgIH0KIAogICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKG4tPmlzSFRNTEVsZW1l
bnQoKSAmJiAobi0+aWQoKSA9PSBJRF9MSU5LIHx8IG4tPmlkKCkgPT0gSURfU1RZTEUpKSB7Ci0g
ICAgICAgICAgICBFbGVtZW50SW1wbCAqZSA9IHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsICo+KG4p
OworICAgICAgICBlbHNlIGlmIChuLT5pc0hUTUxFbGVtZW50KCkgJiYgKG4tPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjpsaW5rKCkpIHx8IG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzdHlsZSgpKSkp
IHsKKyAgICAgICAgICAgIEhUTUxFbGVtZW50SW1wbCAqZSA9IHN0YXRpY19jYXN0PEhUTUxFbGVt
ZW50SW1wbCAqPihuKTsKICAgICAgICAgICAgIFFTdHJpbmcgdGl0bGUgPSBlLT5nZXRBdHRyaWJ1
dGUoIEFUVFJfVElUTEUgKS5zdHJpbmcoKTsKICAgICAgICAgICAgIGJvb2wgZW5hYmxlZFZpYVNj
cmlwdCA9IGZhbHNlOwotICAgICAgICAgICAgaWYgKG4tPmlkKCkgPT0gSURfTElOSykgeworICAg
ICAgICAgICAgaWYgKGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmxpbmsoKSkpIHsKICAgICAg
ICAgICAgICAgICAvLyA8TElOSz4gZWxlbWVudAogICAgICAgICAgICAgICAgIEhUTUxMaW5rRWxl
bWVudEltcGwqIGwgPSBzdGF0aWNfY2FzdDxIVE1MTGlua0VsZW1lbnRJbXBsKj4obik7CiAgICAg
ICAgICAgICAgICAgaWYgKGwtPmlzTG9hZGluZygpIHx8IGwtPmlzRGlzYWJsZWQoKSkKQEAgLTI0
MzUsNyArMjA5Niw3IEBAIHZvaWQgRG9jdW1lbnRJbXBsOjpyZWNhbGNTdHlsZVNlbGVjdG9yKCkK
IAogICAgICAgICAgICAgLy8gR2V0IHRoZSBjdXJyZW50IHByZWZlcnJlZCBzdHlsZXNldC4gIFRo
aXMgaXMgdGhlCiAgICAgICAgICAgICAvLyBzZXQgb2Ygc2hlZXRzIHRoYXQgd2lsbCBiZSBlbmFi
bGVkLgotICAgICAgICAgICAgaWYgKCBuLT5pZCgpID09IElEX0xJTksgKQorICAgICAgICAgICAg
aWYgKGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmxpbmsoKSkpCiAgICAgICAgICAgICAgICAg
c2hlZXQgPSBzdGF0aWNfY2FzdDxIVE1MTGlua0VsZW1lbnRJbXBsKj4obiktPnNoZWV0KCk7CiAg
ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgLy8gPFNUWUxFPiBlbGVtZW50CkBAIC0y
NDUyLDcgKzIxMTMsNyBAQCB2b2lkIERvY3VtZW50SW1wbDo6cmVjYWxjU3R5bGVTZWxlY3Rvcigp
CiAgICAgICAgICAgICAgICAgICAgIC8vIHVzIGFzIHRoZSBwcmVmZXJyZWQgc2V0LiAgT3RoZXJ3
aXNlLCBqdXN0IGlnbm9yZQogICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIHNoZWV0LgogICAg
ICAgICAgICAgICAgICAgICBRU3RyaW5nIHJlbCA9IGUtPmdldEF0dHJpYnV0ZSggQVRUUl9SRUwg
KS5zdHJpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG4tPmlkKCkgPT0gSURfU1RZTEUg
fHwgIXJlbC5jb250YWlucygiYWx0ZXJuYXRlIikpCisgICAgICAgICAgICAgICAgICAgIGlmIChl
LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpzdHlsZSgpKSB8fCAhcmVsLmNvbnRhaW5zKCJhbHRl
cm5hdGUiKSkKICAgICAgICAgICAgICAgICAgICAgICAgIG1fcHJlZmVycmVkU3R5bGVzaGVldFNl
dCA9IHZpZXcoKS0+cGFydCgpLT5kLT5tX3NoZWV0VXNlZCA9IHRpdGxlOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAKQEAgLTI0NzEsNyArMjEzMiw3IEBAIHZvaWQg
RG9jdW1lbnRJbXBsOjpyZWNhbGNTdHlsZVNlbGVjdG9yKCkKICAgICAKICAgICAgICAgLy8gRm9y
IEhUTUwgZG9jdW1lbnRzLCBzdHlsZXNoZWV0cyBhcmUgbm90IGFsbG93ZWQgd2l0aGluL2FmdGVy
IHRoZSA8Qk9EWT4gdGFnLiBTbyB3ZQogICAgICAgICAvLyBjYW4gc3RvcCBzZWFyY2hpbmcgaGVy
ZS4KLSAgICAgICAgaWYgKGlzSFRNTERvY3VtZW50KCkgJiYgbi0+aWQoKSA9PSBJRF9CT0RZKQor
ICAgICAgICBpZiAoaXNIVE1MRG9jdW1lbnQoKSAmJiBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
Ym9keSgpKSkKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KIApJbmRleDoga2h0bWwveG1sL2Rv
bV9kb2NpbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwv
eG1sL2RvbV9kb2NpbXBsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTE1CmRpZmYgLXUgLXAg
LXIxLjExNSBraHRtbC94bWwvZG9tX2RvY2ltcGwuaAotLS0ga2h0bWwveG1sL2RvbV9kb2NpbXBs
LmgJMjIgSnVuIDIwMDUgMTg6MjI6MDIgLTAwMDAJMS4xMTUKKysrIGtodG1sL3htbC9kb21fZG9j
aW1wbC5oCTggSnVsIDIwMDUgMDU6NTA6NDUgLTAwMDAKQEAgLTE3Nyw3ICsxNzcsNyBAQCBwdWJs
aWM6CiAKICAgICBET01JbXBsZW1lbnRhdGlvbkltcGwgKmltcGxlbWVudGF0aW9uKCkgY29uc3Q7
CiAgICAgdmlydHVhbCBFbGVtZW50SW1wbCAqZG9jdW1lbnRFbGVtZW50KCkgY29uc3Q7Ci0gICAg
dmlydHVhbCBFbGVtZW50SW1wbCAqY3JlYXRlRWxlbWVudCAoIGNvbnN0IERPTVN0cmluZyAmdGFn
TmFtZSwgaW50ICZleGNlcHRpb25jb2RlICk7CisgICAgdmlydHVhbCBFbGVtZW50SW1wbCAqY3Jl
YXRlRWxlbWVudChjb25zdCBET01TdHJpbmcgJnRhZ05hbWUsIGludCAmZXhjZXB0aW9uY29kZSk7
CiAgICAgRG9jdW1lbnRGcmFnbWVudEltcGwgKmNyZWF0ZURvY3VtZW50RnJhZ21lbnQgKCk7CiAg
ICAgVGV4dEltcGwgKmNyZWF0ZVRleHROb2RlICggY29uc3QgRE9NU3RyaW5nICZkYXRhICk7CiAg
ICAgQ29tbWVudEltcGwgKmNyZWF0ZUNvbW1lbnQgKCBjb25zdCBET01TdHJpbmcgJmRhdGEgKTsK
QEAgLTE4OCw3ICsxODgsNyBAQCBwdWJsaWM6CiAgICAgQXR0ckltcGwgKmNyZWF0ZUF0dHJpYnV0
ZU5TKGNvbnN0IERPTVN0cmluZyAmbmFtZXNwYWNlVVJJLCBjb25zdCBET01TdHJpbmcgJnF1YWxp
ZmllZE5hbWUsIGludCAmZXhjZXB0aW9uKTsKICAgICBFbnRpdHlSZWZlcmVuY2VJbXBsICpjcmVh
dGVFbnRpdHlSZWZlcmVuY2UgKCBjb25zdCBET01TdHJpbmcgJm5hbWUgKTsKICAgICBOb2RlSW1w
bCAqaW1wb3J0Tm9kZSggTm9kZUltcGwgKmltcG9ydGVkTm9kZSwgYm9vbCBkZWVwLCBpbnQgJmV4
Y2VwdGlvbmNvZGUgKTsKLSAgICB2aXJ0dWFsIEVsZW1lbnRJbXBsICpjcmVhdGVFbGVtZW50TlMg
KCBjb25zdCBET01TdHJpbmcgJl9uYW1lc3BhY2VVUkksIGNvbnN0IERPTVN0cmluZyAmX3F1YWxp
ZmllZE5hbWUsIGludCAmZXhjZXB0aW9uY29kZSApOworICAgIHZpcnR1YWwgRWxlbWVudEltcGwg
KmNyZWF0ZUVsZW1lbnROUyhjb25zdCBET01TdHJpbmcgJl9uYW1lc3BhY2VVUkksIGNvbnN0IERP
TVN0cmluZyAmX3F1YWxpZmllZE5hbWUsIGludCAmZXhjZXB0aW9uY29kZSk7CiAgICAgRWxlbWVu
dEltcGwgKmdldEVsZW1lbnRCeUlkICggY29uc3QgRE9NU3RyaW5nICZlbGVtZW50SWQgKSBjb25z
dDsKICAgICBFbGVtZW50SW1wbCAqZWxlbWVudEZyb21Qb2ludCAoIGNvbnN0IGludCBfeCwgY29u
c3QgaW50IF95ICkgY29uc3Q7CiAKQEAgLTIxOCw5ICsyMTgsNiBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCBib29sIGlzRG9jdW1lbnROb2RlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZp
cnR1YWwgYm9vbCBpc0hUTUxEb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAg
ICBFbGVtZW50SW1wbCAqY3JlYXRlSFRNTEVsZW1lbnQoY29uc3QgRE9NU3RyaW5nICZ0YWdOYW1l
LCBpbnQgJmV4Y2VwdGlvbmNvZGUpOwotICAgIEVsZW1lbnRJbXBsICpjcmVhdGVIVE1MRWxlbWVu
dCh1bnNpZ25lZCBzaG9ydCB0YWdJRCk7Ci0KICAgICBraHRtbDo6Q1NTU3R5bGVTZWxlY3RvciAq
c3R5bGVTZWxlY3RvcigpIHsgcmV0dXJuIG1fc3R5bGVTZWxlY3RvcjsgfQogCiAgICAgRWxlbWVu
dEltcGwgKkRvY3VtZW50SW1wbDo6Z2V0RWxlbWVudEJ5QWNjZXNzS2V5KCBjb25zdCBET01TdHJp
bmcgJmtleSApOwpAQCAtMzg3LDkgKzM4NCw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlc2V0Vmlz
aXRlZExpbmtDb2xvcigpOwogICAgIHZvaWQgcmVzZXRBY3RpdmVMaW5rQ29sb3IoKTsKICAgICAK
LSAgICAvLyBpbnRlcm5hbAotICAgIE5vZGVJbXBsICpmaW5kRWxlbWVudCggSWQgaWQgKTsKLQog
ICAgIGJvb2wgcHJlcGFyZU1vdXNlRXZlbnQoIGJvb2wgcmVhZG9ubHksIGludCB4LCBpbnQgeSwg
TW91c2VFdmVudCAqZXYgKTsKIAogICAgIHZpcnR1YWwgYm9vbCBjaGlsZEFsbG93ZWQoIE5vZGVJ
bXBsICpuZXdDaGlsZCApOwpAQCAtMzk5LDE2ICszOTMsOSBAQCBwdWJsaWM6CiAgICAgLy8gIyMj
IHRoaW5rIGFib3V0IGltcGxlbWVudGluZyByZWYnY291bnRpbmcgZm9yIHRoZSBpZCdzCiAgICAg
Ly8gaW4gb3JkZXIgdG8gYmUgYWJsZSB0byByZWFzc2lnbiB0aG9zZSB0aGF0IGFyZSBubyBsb25n
ZXIgaW4gdXNlCiAgICAgLy8gKGNvdWxkIG1ha2UgcHJvYmxlbXMgd2hlbiBpdCBpcyBzdGlsbCBr
ZXB0IHNvbWV3aGVyZSBhcm91bmQsIGkuZS4gc3R5bGVzZWxlY3RvcikKLSAgICBOb2RlSW1wbDo6
SWQgdGFnSWQoRE9NU3RyaW5nSW1wbCogX25hbWVzcGFjZVVSSSwgRE9NU3RyaW5nSW1wbCAqX25h
bWUsIGJvb2wgcmVhZG9ubHkpOwotICAgIERPTVN0cmluZyB0YWdOYW1lKE5vZGVJbXBsOjpJZCBf
aWQpIGNvbnN0OwotCiAgICAgTm9kZUltcGw6OklkIGF0dHJJZChET01TdHJpbmdJbXBsKiBfbmFt
ZXNwYWNlVVJJLCBET01TdHJpbmdJbXBsICpfbmFtZSwgYm9vbCByZWFkb25seSk7CiAgICAgRE9N
U3RyaW5nIGF0dHJOYW1lKE5vZGVJbXBsOjpJZCBfaWQpIGNvbnN0OwogCi0gICAgLy8gdGhlIG5h
bWVzcGFjZSB1cmkgaXMgbWFwcGVkIHRvIHRoZSBzYW1lIGlkIGZvciBib3RoCi0gICAgLy8gdGFn
bmFtZXMgYXMgd2VsbCBhcyBhdHRyaWJ1dGVzLgotICAgIERPTVN0cmluZ0ltcGwqIG5hbWVzcGFj
ZVVSSShOb2RlSW1wbDo6SWQgX2lkKSBjb25zdDsKLQogICAgIFN0eWxlU2hlZXRMaXN0SW1wbCog
c3R5bGVTaGVldHMoKTsKIAogICAgIC8qIE5ld2x5IHByb3Bvc2VkIENTUzMgbWVjaGFuaXNtIGZv
ciBzZWxlY3RpbmcgYWx0ZXJuYXRlCkluZGV4OiBraHRtbC94bWwvZG9tX2VsZW1lbnRpbXBsLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC94bWwvZG9tX2Vs
ZW1lbnRpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS42NwpkaWZmIC11IC1wIC1yMS42
NyBraHRtbC94bWwvZG9tX2VsZW1lbnRpbXBsLmNwcAotLS0ga2h0bWwveG1sL2RvbV9lbGVtZW50
aW1wbC5jcHAJMTEgTWF5IDIwMDUgMDU6NDk6MzUgLTAwMDAJMS42NworKysga2h0bWwveG1sL2Rv
bV9lbGVtZW50aW1wbC5jcHAJOCBKdWwgMjAwNSAwNTo1MDo0NiAtMDAwMApAQCAtMzMsNyArMzMs
NiBAQAogCiAjaW5jbHVkZSAia2h0bWxfcGFydC5oIgogCi0jaW5jbHVkZSAiaHRtbC9kdGQuaCIK
ICNpbmNsdWRlICJodG1sL2h0bWxwYXJzZXIuaCIKIAogI2luY2x1ZGUgInJlbmRlcmluZy9yZW5k
ZXJfY2FudmFzLmgiCkBAIC05MCwxOCArODksMTggQEAgdW5zaWduZWQgc2hvcnQgQXR0ckltcGw6
Om5vZGVUeXBlKCkgY29ucwogICAgIHJldHVybiBOb2RlOjpBVFRSSUJVVEVfTk9ERTsKIH0KIAot
RE9NU3RyaW5nIEF0dHJJbXBsOjpwcmVmaXgoKSBjb25zdAorY29uc3QgQXRvbWljU3RyaW5nJiBB
dHRySW1wbDo6cHJlZml4KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9hdHRyaWJ1dGUtPnByZWZp
eCgpOwogfQogCi12b2lkIEF0dHJJbXBsOjpzZXRQcmVmaXgoY29uc3QgRE9NU3RyaW5nICZfcHJl
Zml4LCBpbnQgJmV4Y2VwdGlvbmNvZGUgKQordm9pZCBBdHRySW1wbDo6c2V0UHJlZml4KGNvbnN0
IEF0b21pY1N0cmluZyAmX3ByZWZpeCwgaW50ICZleGNlcHRpb25jb2RlICkKIHsKICAgICBjaGVj
a1NldFByZWZpeChfcHJlZml4LCBleGNlcHRpb25jb2RlKTsKICAgICBpZiAoZXhjZXB0aW9uY29k
ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9hdHRyaWJ1dGUtPnNldFByZWZpeChfcHJlZml4
LmltcGxlbWVudGF0aW9uKCkpOworICAgIG1fYXR0cmlidXRlLT5zZXRQcmVmaXgoX3ByZWZpeCk7
CiB9CiAKIERPTVN0cmluZyBBdHRySW1wbDo6bm9kZVZhbHVlKCkgY29uc3QKQEAgLTIwMiwxMSAr
MjAxLDEwIEBAIERPTVN0cmluZyBBdHRySW1wbDo6dmFsdWUoKSBjb25zdAogCiAvLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCiAKLUVsZW1lbnRJbXBsOjpFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQot
ICAgIDogQ29udGFpbmVyTm9kZUltcGwoZG9jKQorRWxlbWVudEltcGw6OkVsZW1lbnRJbXBsKGNv
bnN0IFF1YWxpZmllZE5hbWUmIHFOYW1lLCBEb2N1bWVudFB0ciAqZG9jKQorICAgIDogQ29udGFp
bmVyTm9kZUltcGwoZG9jKSwgbV90YWdOYW1lKHFOYW1lKQogewogICAgIG5hbWVkQXR0ck1hcCA9
IDA7Ci0gICAgbV9wcmVmaXggPSAwOwogfQogCiBFbGVtZW50SW1wbDo6fkVsZW1lbnRJbXBsKCkK
QEAgLTIxNSw5ICsyMTMsMjIgQEAgRWxlbWVudEltcGw6On5FbGVtZW50SW1wbCgpCiAgICAgICAg
IG5hbWVkQXR0ck1hcC0+ZGV0YWNoRnJvbUVsZW1lbnQoKTsKICAgICAgICAgbmFtZWRBdHRyTWFw
LT5kZXJlZigpOwogICAgIH0KK30KIAotICAgIGlmIChtX3ByZWZpeCkKLSAgICAgICAgbV9wcmVm
aXgtPmRlcmVmKCk7CitOb2RlSW1wbCAqRWxlbWVudEltcGw6OmNsb25lTm9kZShib29sIGRlZXAp
Cit7CisgICAgaW50IGV4Y2VwdGlvbkNvZGUgPSAwOworICAgIEVsZW1lbnRJbXBsICpjbG9uZSA9
IGdldERvY3VtZW50KCktPmNyZWF0ZUVsZW1lbnROUyhuYW1lc3BhY2VVUkkoKSwgbm9kZU5hbWUo
KSwgZXhjZXB0aW9uQ29kZSk7CisgICAgYXNzZXJ0KCFleGNlcHRpb25Db2RlKTsKKyAgICAKKyAg
ICAvLyBjbG9uZSBhdHRyaWJ1dGVzCisgICAgaWYgKG5hbWVkQXR0ck1hcCkKKyAgICAgICAgKmNs
b25lLT5hdHRyaWJ1dGVzKCkgPSAqbmFtZWRBdHRyTWFwOworCisgICAgaWYgKGRlZXApCisgICAg
ICAgIGNsb25lQ2hpbGROb2RlcyhjbG9uZSk7CisKKyAgICByZXR1cm4gY2xvbmU7CiB9CiAKIHZv
aWQgRWxlbWVudEltcGw6OnJlbW92ZUF0dHJpYnV0ZSggTm9kZUltcGw6OklkIGlkLCBpbnQgJmV4
Y2VwdGlvbmNvZGUgKQpAQCAtMzUxLDM2ICszNjIsMjQgQEAgdm9pZCBFbGVtZW50SW1wbDo6c2V0
QXR0cmlidXRlTWFwKCBOYW1lZAogYm9vbCBFbGVtZW50SW1wbDo6aGFzQXR0cmlidXRlcygpIGNv
bnN0CiB7CiAgICAgdXBkYXRlU3R5bGVBdHRyaWJ1dGVJZk5lZWRlZCgpOwotCiAgICAgcmV0dXJu
IG5hbWVkQXR0ck1hcCAmJiBuYW1lZEF0dHJNYXAtPmxlbmd0aCgpID4gMDsKIH0KIAogRE9NU3Ry
aW5nIEVsZW1lbnRJbXBsOjpub2RlTmFtZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHRhZ05hbWUo
KTsKLX0KLQotRE9NU3RyaW5nIEVsZW1lbnRJbXBsOjp0YWdOYW1lKCkgY29uc3QKLXsKLSAgICBE
T01TdHJpbmcgdG4gPSBnZXREb2N1bWVudCgpLT50YWdOYW1lKGlkKCkpOwotCi0gICAgaWYgKG1f
cHJlZml4KQotICAgICAgICByZXR1cm4gRE9NU3RyaW5nKG1fcHJlZml4KSArICI6IiArIHRuOwot
CisgICAgRE9NU3RyaW5nIHRuID0gbV90YWdOYW1lLmxvY2FsTmFtZSgpOworICAgIGlmIChtX3Rh
Z05hbWUuaGFzUHJlZml4KCkpCisgICAgICAgIHJldHVybiBET01TdHJpbmcobV90YWdOYW1lLnBy
ZWZpeCgpKSArICI6IiArIHRuOwogICAgIHJldHVybiB0bjsKIH0KIAotdm9pZCBFbGVtZW50SW1w
bDo6c2V0UHJlZml4KCBjb25zdCBET01TdHJpbmcgJl9wcmVmaXgsIGludCAmZXhjZXB0aW9uY29k
ZSApCit2b2lkIEVsZW1lbnRJbXBsOjpzZXRQcmVmaXgoY29uc3QgQXRvbWljU3RyaW5nICZfcHJl
Zml4LCBpbnQgJmV4Y2VwdGlvbmNvZGUpCiB7CiAgICAgY2hlY2tTZXRQcmVmaXgoX3ByZWZpeCwg
ZXhjZXB0aW9uY29kZSk7CiAgICAgaWYgKGV4Y2VwdGlvbmNvZGUpCiAgICAgICAgIHJldHVybjsK
IAotICAgIGlmIChtX3ByZWZpeCkKLSAgICAgICAgbV9wcmVmaXgtPmRlcmVmKCk7Ci0gICAgbV9w
cmVmaXggPSBfcHJlZml4LmltcGxlbWVudGF0aW9uKCk7Ci0gICAgaWYgKG1fcHJlZml4KQotICAg
ICAgICBtX3ByZWZpeC0+cmVmKCk7CisgICAgbV90YWdOYW1lLnNldFByZWZpeChfcHJlZml4KTsK
IH0KIAogdm9pZCBFbGVtZW50SW1wbDo6Y3JlYXRlQXR0cmlidXRlTWFwKCkgY29uc3QKQEAgLTUy
MSwxOCArNTIwLDYgQEAgdm9pZCBFbGVtZW50SW1wbDo6cmVjYWxjU3R5bGUoIFN0eWxlQ2hhbgog
ICAgIHNldEhhc0NoYW5nZWRDaGlsZCggZmFsc2UgKTsKIH0KIAotLy8gRE9NIFNlY3Rpb24gMS4x
LjEKLWJvb2wgRWxlbWVudEltcGw6OmNoaWxkQWxsb3dlZCggTm9kZUltcGwgKm5ld0NoaWxkICkK
LXsKLSAgICBpZiAoIWNoaWxkVHlwZUFsbG93ZWQobmV3Q2hpbGQtPm5vZGVUeXBlKCkpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBGb3IgWE1MIGRvY3VtZW50cywgd2UgYXJlIG5v
bi12YWxpZGF0aW5nIGFuZCBkbyBub3QgY2hlY2sgYWdhaW5zdCBhIERURCwgZXZlbiBmb3IgSFRN
TCBlbGVtZW50cy4KLSAgICBpZiAoZ2V0RG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSkKLSAg
ICAgICAgcmV0dXJuIGNoZWNrQ2hpbGQoaWQoKSwgbmV3Q2hpbGQtPmlkKCksICFnZXREb2N1bWVu
dCgpLT5pbkNvbXBhdE1vZGUoKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIGJvb2wgRWxlbWVu
dEltcGw6OmNoaWxkVHlwZUFsbG93ZWQoIHVuc2lnbmVkIHNob3J0IHR5cGUgKQogewogICAgIHN3
aXRjaCAodHlwZSkgewpAQCAtNTY5LDcgKzU1Niw3IEBAIHZvaWQgRWxlbWVudEltcGw6OmRpc3Bh
dGNoQXR0ckFkZGl0aW9uRXYKIAogRE9NU3RyaW5nIEVsZW1lbnRJbXBsOjpvcGVuVGFnU3RhcnRU
b1N0cmluZygpIGNvbnN0CiB7Ci0gICAgRE9NU3RyaW5nIHJlc3VsdCA9IERPTVN0cmluZygiPCIp
ICsgdGFnTmFtZSgpOworICAgIERPTVN0cmluZyByZXN1bHQgPSBET01TdHJpbmcoIjwiKSArIG5v
ZGVOYW1lKCk7CiAKICAgICBOYW1lZEF0dHJNYXBJbXBsICphdHRyTWFwID0gYXR0cmlidXRlcyh0
cnVlKTsKIApAQCAtNjEwLDcgKzU5Nyw3IEBAIERPTVN0cmluZyBFbGVtZW50SW1wbDo6dG9TdHJp
bmcoKSBjb25zdAogCX0KIAogCXJlc3VsdCArPSAiPC8iOwotCXJlc3VsdCArPSB0YWdOYW1lKCk7
CisJcmVzdWx0ICs9IG5vZGVOYW1lKCk7CiAJcmVzdWx0ICs9ICI+IjsKICAgICB9IGVsc2Ugewog
CXJlc3VsdCArPSAiIC8+IjsKQEAgLTc1OSwxMiArNzQ2LDcgQEAgQ1NTU3R5bGVEZWNsYXJhdGlv
bkltcGwgKkVsZW1lbnRJbXBsOjpzdAogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVhNTEVsZW1l
bnRJbXBsOjpYTUxFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCBET01TdHJpbmdJbXBsICpf
dGFnTmFtZSkKLSAgICA6IEVsZW1lbnRJbXBsKGRvYykKLXsKLSAgICBtX2lkID0gZG9jLT5kb2N1
bWVudCgpLT50YWdJZCgwIC8qIG5vIG5hbWVzcGFjZSAqLywgX3RhZ05hbWUsICBmYWxzZSAvKiBh
bGxvY2F0ZSAqLyk7Ci19Ci0KKy8qCiBYTUxFbGVtZW50SW1wbDo6WE1MRWxlbWVudEltcGwoRG9j
dW1lbnRQdHIgKmRvYywgRE9NU3RyaW5nSW1wbCAqX3F1YWxpZmllZE5hbWUsIERPTVN0cmluZ0lt
cGwgKl9uYW1lc3BhY2VVUkkpCiAgICAgOiBFbGVtZW50SW1wbChkb2MpCiB7CkBAIC03ODAsNDkg
Kzc2MiwyNCBAQCBYTUxFbGVtZW50SW1wbDo6WE1MRWxlbWVudEltcGwoRG9jdW1lbnRQCiAgICAg
ICAgIERPTVN0cmluZ0ltcGwqIGxvY2FsTmFtZSA9IF9xdWFsaWZpZWROYW1lLT5jb3B5KCk7CiAg
ICAgICAgIGxvY2FsTmFtZS0+cmVmKCk7CiAgICAgICAgIGxvY2FsTmFtZS0+cmVtb3ZlKDAsY29s
b25wb3MrMSk7Ci0gICAgICAgIG1faWQgPSBkb2MtPmRvY3VtZW50KCktPnRhZ0lkKF9uYW1lc3Bh
Y2VVUkksIGxvY2FsTmFtZSwgZmFsc2UgLyogYWxsb2NhdGUgKi8pOworICAgICAgICBtX2lkID0g
ZG9jLT5kb2N1bWVudCgpLT50YWdJZChfbmFtZXNwYWNlVVJJLCBsb2NhbE5hbWUsIGZhbHNlKTsK
ICAgICAgICAgbG9jYWxOYW1lLT5kZXJlZigpOwotICAgICAgICBtX3ByZWZpeCA9IF9xdWFsaWZp
ZWROYW1lLT5jb3B5KCk7Ci0gICAgICAgIG1fcHJlZml4LT5yZWYoKTsKLSAgICAgICAgbV9wcmVm
aXgtPnRydW5jYXRlKGNvbG9ucG9zKTsKKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBUaGlz
IGlzIGEgdGVtcG9yYXJ5IHNpdHVhdGlvbiBmb3Igc3RhZ2Ugb25lIG9mIHRoZSBRdWFsaWZpZWRO
YW1lIHBhdGNoLiAgVGhpcyBpcyBhbHNvIGEgcmVhbGx5IHN0dXBpZCB3YXkgdG8KKyAgICAgICAg
Ly8gaGF2ZSB0byBoYW5kbGUgdGhlIHByZWZpeC4gIFdheSB0b28gbXVjaCBjb3B5aW5nLiAgV2Ug
c2hvdWxkIG1ha2Ugc3VyZSB0aGUgWE1MIHRva2VuaXplciBoYXMgZG9uZSB0aGUgc3BsaXQKKyAg
ICAgICAgLy8gYWxyZWFkeSBpbnRvIHByZWZpeCBhbmQgbG9jYWxOYW1lLgorICAgICAgICBET01T
dHJpbmdJbXBsKiBwcmVmaXggPSBfcXVhbGlmaWVkTmFtZS0+Y29weSgpOworICAgICAgICBwcmVm
aXgtPnJlZigpOworICAgICAgICBwcmVmaXgtPnRydW5jYXRlKGNvbG9ucG9zKTsKKyAgICAgICAg
bV90YWdOYW1lID0gUXVhbGlmaWVkTmFtZShwcmVmaXgsIG51bGxBdG9tLCBudWxsQXRvbSk7Cisg
ICAgICAgIHByZWZpeC0+ZGVyZWYoKTsKICAgICB9Ci0gICAgZWxzZSB7CisgICAgZWxzZQogICAg
ICAgICAvLyBubyBwcmVmaXgKLSAgICAgICAgbV9pZCA9IGRvYy0+ZG9jdW1lbnQoKS0+dGFnSWQo
X25hbWVzcGFjZVVSSSwgX3F1YWxpZmllZE5hbWUsIGZhbHNlIC8qIGFsbG9jYXRlICovKTsKLSAg
ICAgICAgbV9wcmVmaXggPSAwOwotICAgIH0KKyAgICAgICAgbV9pZCA9IGRvYy0+ZG9jdW1lbnQo
KS0+dGFnSWQoX25hbWVzcGFjZVVSSSwgX3F1YWxpZmllZE5hbWUsIGZhbHNlKTsKIH0KIAotWE1M
RWxlbWVudEltcGw6On5YTUxFbGVtZW50SW1wbCgpCi17Ci19Ci0KLURPTVN0cmluZyBYTUxFbGVt
ZW50SW1wbDo6bG9jYWxOYW1lKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0RG9jdW1lbnQoKS0+
dGFnTmFtZShtX2lkKTsKLX0KLQotRE9NU3RyaW5nIFhNTEVsZW1lbnRJbXBsOjpuYW1lc3BhY2VV
UkkoKSBjb25zdAotewotICAgIHJldHVybiBnZXREb2N1bWVudCgpLT5uYW1lc3BhY2VVUkkobV9p
ZCk7Ci19Ci0KLU5vZGVJbXBsICpYTUxFbGVtZW50SW1wbDo6Y2xvbmVOb2RlICggYm9vbCBkZWVw
ICkKLXsKLSAgICAvLyAjIyMgd2UgbG9zZSBuYW1lc3BhY2UgaGVyZSBGSVhNRQotICAgIC8vIHNo
b3VsZCBwYXNzIGlkIGFyb3VuZAotICAgIFhNTEVsZW1lbnRJbXBsICpjbG9uZSA9IG5ldyBYTUxF
bGVtZW50SW1wbChkb2NQdHIoKSwgZ2V0RG9jdW1lbnQoKS0+dGFnTmFtZShtX2lkKS5pbXBsZW1l
bnRhdGlvbigpKTsKLSAgICBjbG9uZS0+bV9pZCA9IG1faWQ7Ci0KLSAgICAvLyBjbG9uZSBhdHRy
aWJ1dGVzCi0gICAgaWYgKG5hbWVkQXR0ck1hcCkKLSAgICAgICAgKmNsb25lLT5hdHRyaWJ1dGVz
KGZhbHNlKSA9ICpuYW1lZEF0dHJNYXA7Ci0KLSAgICBpZiAoZGVlcCkKLSAgICAgICAgY2xvbmVD
aGlsZE5vZGVzKGNsb25lKTsKLQotICAgIHJldHVybiBjbG9uZTsKLX0KKyovCiAKIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KIApAQCAtMTI3MCw4ICsxMjI3LDggQEAgdm9pZCBOYW1lZE1hcHBlZEF0dHJN
YXBJbXBsOjpwYXJzZUNsYXNzQQogICAgIH0KIH0KIAotU3R5bGVkRWxlbWVudEltcGw6OlN0eWxl
ZEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0gICAgOiBFbGVtZW50SW1wbChkb2MpCitT
dHlsZWRFbGVtZW50SW1wbDo6U3R5bGVkRWxlbWVudEltcGwoY29uc3QgUXVhbGlmaWVkTmFtZSYg
bmFtZSwgRG9jdW1lbnRQdHIgKmRvYykKKyAgICA6IEVsZW1lbnRJbXBsKG5hbWUsIGRvYykKIHsK
ICAgICBtX2lubGluZVN0eWxlRGVjbCA9IDA7CiAgICAgbV9pc1N0eWxlQXR0cmlidXRlVmFsaWQg
PSB0cnVlOwpJbmRleDoga2h0bWwveG1sL2RvbV9lbGVtZW50aW1wbC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3htbC9kb21fZWxlbWVudGltcGwuaCx2CnJl
dHJpZXZpbmcgcmV2aXNpb24gMS40MQpkaWZmIC11IC1wIC1yMS40MSBraHRtbC94bWwvZG9tX2Vs
ZW1lbnRpbXBsLmgKLS0tIGtodG1sL3htbC9kb21fZWxlbWVudGltcGwuaAkxMiBNYXkgMjAwNSAx
NzoxMToyMiAtMDAwMAkxLjQxCisrKyBraHRtbC94bWwvZG9tX2VsZW1lbnRpbXBsLmgJOCBKdWwg
MjAwNSAwNTo1MDo0NiAtMDAwMApAQCAtMjMsMTMgKzIzLDE0IEBACiAgKiBCb3N0b24sIE1BIDAy
MTExLTEzMDcsIFVTQS4KICAqCiAgKi8KLSNpZm5kZWYgX0RPTV9FTEVNRU5USW1wbF9oXwotI2Rl
ZmluZSBfRE9NX0VMRU1FTlRJbXBsX2hfCisjaWZuZGVmIF9ET01fRUxFTUVOVElNUExfaF8KKyNk
ZWZpbmUgX0RPTV9FTEVNRU5USU1QTF9oXwogCiAjaW5jbHVkZSAiZG9tX25vZGVpbXBsLmgiCiAj
aW5jbHVkZSAieG1sL2RvbV9zdHJpbmdpbXBsLmgiCiAjaW5jbHVkZSAibWlzYy9zaGFyZWQuaCIK
ICNpbmNsdWRlICJjc3MvY3NzX3ZhbHVlaW1wbC5oIgorI2luY2x1ZGUgImRvbV9xbmFtZS5oIgog
CiAjaWYgQVBQTEVfQ0hBTkdFUwogI2lmZGVmIF9fT0JKQ19fCkBAIC0xMjgsOCArMTI5LDggQEAg
cHVibGljOgogICAgIC8vIERPTSBtZXRob2RzIG92ZXJyaWRkZW4gZnJvbSAgcGFyZW50IGNsYXNz
ZXMKICAgICB2aXJ0dWFsIERPTVN0cmluZyBub2RlTmFtZSgpIGNvbnN0OwogICAgIHZpcnR1YWwg
dW5zaWduZWQgc2hvcnQgbm9kZVR5cGUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIERPTVN0cmluZyBw
cmVmaXgoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0UHJlZml4KGNvbnN0IERPTVN0cmlu
ZyAmX3ByZWZpeCwgaW50ICZleGNlcHRpb25jb2RlICk7CisgICAgdmlydHVhbCBjb25zdCBBdG9t
aWNTdHJpbmcmIHByZWZpeCgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRQcmVmaXgoY29u
c3QgQXRvbWljU3RyaW5nICZfcHJlZml4LCBpbnQgJmV4Y2VwdGlvbmNvZGUgKTsKIAogICAgIHZp
cnR1YWwgRE9NU3RyaW5nIG5vZGVWYWx1ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBzZXRO
b2RlVmFsdWUoIGNvbnN0IERPTVN0cmluZyAmLCBpbnQgJmV4Y2VwdGlvbmNvZGUgKTsKQEAgLTE1
Niw3ICsxNTcsNyBAQCBjbGFzcyBFbGVtZW50SW1wbCA6IHB1YmxpYyBDb250YWluZXJOb2RlCiAg
ICAgZnJpZW5kIGNsYXNzIE5vZGVJbXBsOwogICAgIGZyaWVuZCBjbGFzcyBraHRtbDo6Q1NTU3R5
bGVTZWxlY3RvcjsKIHB1YmxpYzoKLSAgICBFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKTsK
KyAgICBFbGVtZW50SW1wbChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudFB0
ciAqZG9jKTsKICAgICB+RWxlbWVudEltcGwoKTsKIAogICAgIC8vIFVzZWQgdG8gcXVpY2tseSBk
ZXRlcm1pbmUgd2hldGhlciBvciBub3QgYW4gZWxlbWVudCBoYXMgYSBnaXZlbiBDU1MgY2xhc3Mu
CkBAIC0xODYsMTUgKzE4NywyNCBAQCBwdWJsaWM6CiAgICAgU2hhcmVkUHRyPEF0dHJJbXBsPiBz
ZXRBdHRyaWJ1dGVOb2RlTlMoQXR0ckltcGwgKm5ld0F0dHIsIGludCAmZXhjZXB0aW9uKSB7IHJl
dHVybiBzZXRBdHRyaWJ1dGVOb2RlKG5ld0F0dHIsIGV4Y2VwdGlvbik7IH0KICAgICBTaGFyZWRQ
dHI8QXR0ckltcGw+IHJlbW92ZUF0dHJpYnV0ZU5vZGUoQXR0ckltcGwgKm9sZEF0dHIsIGludCAm
ZXhjZXB0aW9uKTsKICAgICAKLSAgICBET01TdHJpbmcgcHJlZml4KCkgY29uc3QgeyByZXR1cm4g
bV9wcmVmaXg7IH0KLSAgICB2b2lkIHNldFByZWZpeChjb25zdCBET01TdHJpbmcgJl9wcmVmaXgs
IGludCAmZXhjZXB0aW9uY29kZSApOwotCiAgICAgdmlydHVhbCBDU1NTdHlsZURlY2xhcmF0aW9u
SW1wbCAqc3R5bGUoKTsKIAorICAgIHZpcnR1YWwgY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFt
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFnTmFtZTsgfQorICAgIHZpcnR1YWwgYm9vbCBoYXNUYWdO
YW1lKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUpIGNvbnN0IHsgcmV0dXJuIG1fdGFnTmFt
ZS5tYXRjaGVzKHRhZ05hbWUpOyB9CisgICAgCisgICAgLy8gQSBtb3JlIGxpZ2h0d2VpZ2h0IGNo
ZWNrIHRoYW4gaGFzVGFnTmFtZS4gIFVzZSB0aGlzIGNoZWNrIHdoZW4geW91IGtub3cgdGhlIG5h
bWVzcGFjZXMgb2YgdGhlIHR3byBRdWFsaWZpZWROYW1lcyBtYXRjaCwgZS5nLiwgdGhhdCB0aGV5
J3JlCisgICAgLy8gYm90aCBIVE1MIG5hbWVzLgorICAgIGJvb2wgaGFzTG9jYWxOYW1lKGNvbnN0
IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUpIGNvbnN0IHsgcmV0dXJuIG1fdGFnTmFtZS5sb2NhbE5h
bWUoKSA9PSB0YWdOYW1lLmxvY2FsTmFtZSgpOyB9CisgICAgYm9vbCBoYXNMb2NhbE5hbWUoY29u
c3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUpIGNvbnN0IHsgcmV0dXJuIG1fdGFnTmFtZS5sb2Nh
bE5hbWUoKSA9PSBsb2NhbE5hbWU7IH0KKworICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5n
JiBsb2NhbE5hbWUoKSBjb25zdCB7IHJldHVybiBtX3RhZ05hbWUubG9jYWxOYW1lKCk7IH0KKyAg
ICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4KCkgY29uc3QgeyByZXR1cm4gbV90
YWdOYW1lLnByZWZpeCgpOyB9CisgICAgdmlydHVhbCB2b2lkIHNldFByZWZpeChjb25zdCBBdG9t
aWNTdHJpbmcgJl9wcmVmaXgsIGludCAmZXhjZXB0aW9uY29kZSk7CisgICAgdmlydHVhbCBjb25z
dCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFnTmFtZS5u
YW1lc3BhY2VVUkkoKTsgfQorICAgIAogICAgIC8vIERPTSBtZXRob2RzIG92ZXJyaWRkZW4gZnJv
bSAgcGFyZW50IGNsYXNzZXMKLSAgICB2aXJ0dWFsIERPTVN0cmluZyB0YWdOYW1lKCkgY29uc3Q7
CiAgICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCBub2RlVHlwZSgpIGNvbnN0OwotICAgIHZpcnR1
YWwgTm9kZUltcGwgKmNsb25lTm9kZSAoIGJvb2wgZGVlcCApID0gMDsKKyAgICB2aXJ0dWFsIE5v
ZGVJbXBsICpjbG9uZU5vZGUoYm9vbCBkZWVwKTsKICAgICB2aXJ0dWFsIERPTVN0cmluZyBub2Rl
TmFtZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBpc0VsZW1lbnROb2RlKCkgY29uc3QgeyBy
ZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9Eb2N1bWVudCgpOwpA
QCAtMjIxLDcgKzIzMSw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcmVjYWxjU3R5bGUo
IFN0eWxlQ2hhbmdlID0gTm9DaGFuZ2UgKTsKIAogICAgIHZpcnR1YWwgdm9pZCBtb3VzZUV2ZW50
SGFuZGxlciggTW91c2VFdmVudCAqLypldiovLCBib29sIC8qaW5zaWRlKi8gKSB7fTsKLSAgICB2
aXJ0dWFsIGJvb2wgY2hpbGRBbGxvd2VkKCBOb2RlSW1wbCAqbmV3Q2hpbGQgKTsKICAgICB2aXJ0
dWFsIGJvb2wgY2hpbGRUeXBlQWxsb3dlZCggdW5zaWduZWQgc2hvcnQgdHlwZSApOwogIAogICAg
IHZpcnR1YWwgQXR0cmlidXRlSW1wbCogY3JlYXRlQXR0cmlidXRlKElkIGlkLCBET01TdHJpbmdJ
bXBsKiB2YWx1ZSk7CkBAIC0yNTQsMjkgKzI2Myw3IEBAIHByaXZhdGU6CiAKIHByb3RlY3RlZDog
Ly8gbWVtYmVyIHZhcmlhYmxlcwogICAgIG11dGFibGUgTmFtZWRBdHRyTWFwSW1wbCAqbmFtZWRB
dHRyTWFwOwotICAgIERPTVN0cmluZ0ltcGwgKm1fcHJlZml4OwotfTsKLQotCi1jbGFzcyBYTUxF
bGVtZW50SW1wbCA6IHB1YmxpYyBFbGVtZW50SW1wbAotewotCi1wdWJsaWM6Ci0gICAgWE1MRWxl
bWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgRE9NU3RyaW5nSW1wbCAqX3RhZ05hbWUpOwotICAg
IFhNTEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIERPTVN0cmluZ0ltcGwgKl9xdWFsaWZp
ZWROYW1lLCBET01TdHJpbmdJbXBsICpfbmFtZXNwYWNlVVJJKTsKLSAgICB+WE1MRWxlbWVudElt
cGwoKTsKLQotICAgIC8vIERPTSBtZXRob2RzIG92ZXJyaWRkZW4gZnJvbSAgcGFyZW50IGNsYXNz
ZXMKLSAgICB2aXJ0dWFsIERPTVN0cmluZyBuYW1lc3BhY2VVUkkoKSBjb25zdDsKLSAgICB2aXJ0
dWFsIERPTVN0cmluZyBsb2NhbE5hbWUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIE5vZGVJbXBsICpj
bG9uZU5vZGUgKCBib29sIGRlZXAgKTsKLQotICAgIC8vIE90aGVyIG1ldGhvZHMgKG5vdCBwYXJ0
IG9mIERPTSkKLSAgICB2aXJ0dWFsIGJvb2wgaXNYTUxFbGVtZW50Tm9kZSgpIGNvbnN0IHsgcmV0
dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3QgeyByZXR1cm4gbV9pZDsgfQot
Ci1wcm90ZWN0ZWQ6Ci0gICAgSWQgbV9pZDsKKyAgICBRdWFsaWZpZWROYW1lIG1fdGFnTmFtZTsK
IH07CiAKIC8vIHRoZSBtYXAgb2YgYXR0cmlidXRlcyBvZiBhbiBlbGVtZW50CkBAIC00MTQsNyAr
NDAxLDcgQEAgcHJpdmF0ZToKIGNsYXNzIFN0eWxlZEVsZW1lbnRJbXBsIDogcHVibGljIEVsZW1l
bnRJbXBsCiB7CiBwdWJsaWM6Ci0gICAgU3R5bGVkRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRv
Yyk7CisgICAgU3R5bGVkRWxlbWVudEltcGwoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwg
RG9jdW1lbnRQdHIgKmRvYyk7CiAgICAgdmlydHVhbCB+U3R5bGVkRWxlbWVudEltcGwoKTsKIAog
ICAgIHZpcnR1YWwgYm9vbCBpc1N0eWxlZEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9
CkluZGV4OiBraHRtbC94bWwvZG9tX25vZGVpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC94bWwvZG9tX25vZGVpbXBsLmNwcCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS4xNTYKZGlmZiAtdSAtcCAtcjEuMTU2IGtodG1sL3htbC9kb21fbm9kZWltcGwu
Y3BwCi0tLSBraHRtbC94bWwvZG9tX25vZGVpbXBsLmNwcAkyMyBKdW4gMjAwNSAxOTo0Nzo1MCAt
MDAwMAkxLjE1NgorKysga2h0bWwveG1sL2RvbV9ub2RlaW1wbC5jcHAJOCBKdWwgMjAwNSAwNTo1
MDo0OCAtMDAwMApAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgImRvbS9kb21fZXhjZXB0aW9u
LmgiCiAjaW5jbHVkZSAiZG9tL2RvbTJfZXZlbnRzLmgiCiAjaW5jbHVkZSAibWlzYy9odG1sYXR0
cnMuaCIKLSNpbmNsdWRlICJtaXNjL2h0bWx0YWdzLmgiCiAjaW5jbHVkZSAieG1sL2RvbV9lbGVt
ZW50aW1wbC5oIgogI2luY2x1ZGUgInhtbC9kb21fdGV4dGltcGwuaCIKICNpbmNsdWRlICJ4bWwv
ZG9tMl9ldmVudHNpbXBsLmgiCkBAIC01MCw3ICs0OSw4IEBACiAjaW5jbHVkZSAia2h0bWx2aWV3
LmgiCiAjaW5jbHVkZSAia2h0bWxfcGFydC5oIgogCi0jaW5jbHVkZSAiaHRtbC9kdGQuaCIKKy8v
IEZJWE1FOiBTaG91bGQgbm90IGhhdmUgdG8gaW5jbHVkZSB0aGlzLiAgQ3V0IHRoZSBIVE1MIGRl
cGVuZGVuY3khCisjaW5jbHVkZSAiaHRtbG5hbWVzLmgiCiAKICNpZm5kZWYgS0hUTUxfTk9fWEJM
CiAjaW5jbHVkZSAieGJsL3hibF9iaW5kaW5nX21hbmFnZXIuaCIKQEAgLTY0LDkgKzY0LDMwIEBA
CiAjZGVmaW5lIExPRyhjaGFubmVsLCBmb3JtYXRBbmRBcmdzLi4uKSAoKHZvaWQpMCkKICNlbmRp
ZgogCi11c2luZyBuYW1lc3BhY2UgRE9NOwogdXNpbmcgbmFtZXNwYWNlIGtodG1sOwogCituYW1l
c3BhY2UgRE9NIHsKKy8qKgorICogTm9kZUxpc3Qgd2hpY2ggbGlzdHMgYWxsIE5vZGVzIGluIGEg
ZG9jdW1lbnQgd2l0aCBhIGdpdmVuIHRhZyBuYW1lCisgKi8KK2NsYXNzIFRhZ05vZGVMaXN0SW1w
bCA6IHB1YmxpYyBOb2RlTGlzdEltcGwKK3sKK3B1YmxpYzoKKyAgICBUYWdOb2RlTGlzdEltcGwo
Tm9kZUltcGwgKm4sIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBBdG9t
aWNTdHJpbmcmIGxvY2FsTmFtZSk7CisKKyAgICAvLyBET00gbWV0aG9kcyBvdmVycmlkZGVuIGZy
b20gIHBhcmVudCBjbGFzc2VzCisgICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGxlbmd0aCgpIGNv
bnN0OworICAgIHZpcnR1YWwgTm9kZUltcGwgKml0ZW0gKHVuc2lnbmVkIGxvbmcgaW5kZXgpIGNv
bnN0OworCisgICAgLy8gT3RoZXIgbWV0aG9kcyAobm90IHBhcnQgb2YgRE9NKQorCitwcm90ZWN0
ZWQ6CisgICAgdmlydHVhbCBib29sIG5vZGVNYXRjaGVzKE5vZGVJbXBsICp0ZXN0Tm9kZSkgY29u
c3Q7CisKKyAgICBBdG9taWNTdHJpbmcgbV9uYW1lc3BhY2VVUkk7CisgICAgQXRvbWljU3RyaW5n
IG1fbG9jYWxOYW1lOworfTsKKwogTm9kZUltcGw6Ok5vZGVJbXBsKERvY3VtZW50UHRyICpkb2Mp
CiAgICAgOiBkb2N1bWVudChkb2MpLAogICAgICAgbV9wcmV2aW91cygwKSwKQEAgLTE1NCw3ICsx
NzUsNyBAQCBOb2RlSW1wbCAqTm9kZUltcGw6Omxhc3RDaGlsZCgpIGNvbnN0CiAgIHJldHVybiAw
OwogfQogCi1Ob2RlSW1wbCAqTm9kZUltcGw6Omxhc3REZXNjZW5kZW50KCkgY29uc3QKK05vZGVJ
bXBsICpOb2RlSW1wbDo6bGFzdERlc2NlbmRhbnQoKSBjb25zdAogewogICAgIE5vZGVJbXBsICpu
ID0gY29uc3RfY2FzdDxOb2RlSW1wbCAqPih0aGlzKTsKICAgICB3aGlsZSAobiAmJiBuLT5sYXN0
Q2hpbGQoKSkKQEAgLTIzOSwxMyArMjYwLDEzIEBAIHZvaWQgTm9kZUltcGw6Om5vcm1hbGl6ZSAo
KQogICAgIH0KIH0KIAotRE9NU3RyaW5nIE5vZGVJbXBsOjpwcmVmaXgoKSBjb25zdAorY29uc3Qg
QXRvbWljU3RyaW5nJiBOb2RlSW1wbDo6cHJlZml4KCkgY29uc3QKIHsKICAgICAvLyBGb3Igbm9k
ZXMgb3RoZXIgdGhhbiBlbGVtZW50cyBhbmQgYXR0cmlidXRlcywgdGhlIHByZWZpeCBpcyBhbHdh
eXMgbnVsbAotICAgIHJldHVybiBET01TdHJpbmcoKTsKKyAgICByZXR1cm4gbnVsbEF0b207CiB9
CiAKLXZvaWQgTm9kZUltcGw6OnNldFByZWZpeChjb25zdCBET01TdHJpbmcgJi8qX3ByZWZpeCov
LCBpbnQgJmV4Y2VwdGlvbmNvZGUgKQordm9pZCBOb2RlSW1wbDo6c2V0UHJlZml4KGNvbnN0IEF0
b21pY1N0cmluZyAmLypfcHJlZml4Ki8sIGludCAmZXhjZXB0aW9uY29kZSApCiB7CiAgICAgLy8g
VGhlIHNwZWMgc2F5cyB0aGF0IGZvciBub2RlcyBvdGhlciB0aGFuIGVsZW1lbnRzIGFuZCBhdHRy
aWJ1dGVzLCBwcmVmaXggaXMgYWx3YXlzIG51bGwuCiAgICAgLy8gSXQgZG9lcyBub3Qgc2F5IHdo
YXQgdG8gZG8gd2hlbiB0aGUgdXNlciB0cmllcyB0byBzZXQgdGhlIHByZWZpeCBvbiBhbm90aGVy
IHR5cGUgb2YKQEAgLTI1MywxNCArMjc0LDE0IEBAIHZvaWQgTm9kZUltcGw6OnNldFByZWZpeChj
b25zdCBET01TdHJpbmcKICAgICBleGNlcHRpb25jb2RlID0gRE9NRXhjZXB0aW9uOjpOQU1FU1BB
Q0VfRVJSOwogfQogCi1ET01TdHJpbmcgTm9kZUltcGw6OmxvY2FsTmFtZSgpIGNvbnN0Citjb25z
dCBBdG9taWNTdHJpbmcmIE5vZGVJbXBsOjpsb2NhbE5hbWUoKSBjb25zdAogewotICAgIHJldHVy
biBET01TdHJpbmcoKTsKKyAgICByZXR1cm4gZW1wdHlBdG9tOwogfQogCi1ET01TdHJpbmcgTm9k
ZUltcGw6Om5hbWVzcGFjZVVSSSgpIGNvbnN0Citjb25zdCBBdG9taWNTdHJpbmcmIE5vZGVJbXBs
OjpuYW1lc3BhY2VVUkkoKSBjb25zdAogewotICAgIHJldHVybiBET01TdHJpbmcoKTsKKyAgICBy
ZXR1cm4gZW1wdHlBdG9tOwogfQogCiB2b2lkIE5vZGVJbXBsOjpzZXRGaXJzdENoaWxkKE5vZGVJ
bXBsICopCkBAIC0zMDYsMTIgKzMyNyw2IEBAIHZvaWQgTm9kZUltcGw6OnNldENoYW5nZWQoYm9v
bCBiKQogICAgIH0KIH0KIAotYm9vbCBOb2RlSW1wbDo6aXNJbmxpbmUoKSBjb25zdAotewotICAg
IGlmIChtX3JlbmRlcikgcmV0dXJuIG1fcmVuZGVyLT5zdHlsZSgpLT5kaXNwbGF5KCkgPT0ga2h0
bWw6OklOTElORTsKLSAgICByZXR1cm4gIWlzRWxlbWVudE5vZGUoKTsKLX0KLQogYm9vbCBOb2Rl
SW1wbDo6aXNGb2N1c2FibGUoKSBjb25zdAogewogICAgIHJldHVybiBmYWxzZTsKQEAgLTEwMDYs
NDMgKzEwMjEsMzQgQEAgTm9kZUltcGwgKk5vZGVJbXBsOjp0cmF2ZXJzZVByZXZpb3VzTm9kZQog
ICAgIHJldHVybiAwOwogfQogCi12b2lkIE5vZGVJbXBsOjpjaGVja1NldFByZWZpeChjb25zdCBE
T01TdHJpbmcgJl9wcmVmaXgsIGludCAmZXhjZXB0aW9uY29kZSkKK3ZvaWQgTm9kZUltcGw6OmNo
ZWNrU2V0UHJlZml4KGNvbnN0IEF0b21pY1N0cmluZyAmX3ByZWZpeCwgaW50ICZleGNlcHRpb25j
b2RlKQogewogICAgIC8vIFBlcmZvcm0gZXJyb3IgY2hlY2tpbmcgYXMgcmVxdWlyZWQgYnkgc3Bl
YyBmb3Igc2V0dGluZyBOb2RlLnByZWZpeC4gVXNlZCBieQogICAgIC8vIEVsZW1lbnRJbXBsOjpz
ZXRQcmVmaXgoKSBhbmQgQXR0ckltcGw6OnNldFByZWZpeCgpCiAKLSNpZiAwCi0gICAgLy8gRklY
TUU6IEFkZCB0aGlzIGNoZWNrIChidXQgbm90IGluIGEgd2F5IHRoYXQgZGVwZW5kcyBvbiB0aGUg
QysrIERPTSEpCi0gICAgLy8gSU5WQUxJRF9DSEFSQUNURVJfRVJSOiBSYWlzZWQgaWYgdGhlIHNw
ZWNpZmllZCBwcmVmaXggY29udGFpbnMgYW4gaWxsZWdhbCBjaGFyYWN0ZXIuCi0gICAgaWYgKCFF
bGVtZW50OjpraHRtbFZhbGlkUHJlZml4KF9wcmVmaXgpKSB7Ci0gICAgICAgIGV4Y2VwdGlvbmNv
ZGUgPSBET01FeGNlcHRpb246OklOVkFMSURfQ0hBUkFDVEVSX0VSUjsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSNlbmRpZgotCisgICAgLy8gRklYTUU6IEltcGxlbWVudCBzdXBwb3J0IGZvciBJ
TlZBTElEX0NIQVJBQ1RFUl9FUlI6IFJhaXNlZCBpZiB0aGUgc3BlY2lmaWVkIHByZWZpeCBjb250
YWlucyBhbiBpbGxlZ2FsIGNoYXJhY3Rlci4KKyAgICAKICAgICAvLyBOT19NT0RJRklDQVRJT05f
QUxMT1dFRF9FUlI6IFJhaXNlZCBpZiB0aGlzIG5vZGUgaXMgcmVhZG9ubHkuCiAgICAgaWYgKGlz
UmVhZE9ubHkoKSkgewogICAgICAgICBleGNlcHRpb25jb2RlID0gRE9NRXhjZXB0aW9uOjpOT19N
T0RJRklDQVRJT05fQUxMT1dFRF9FUlI7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICAv
LyBOQU1FU1BBQ0VfRVJSOiAtIFJhaXNlZCBpZiB0aGUgc3BlY2lmaWVkIHByZWZpeCBpcyBtYWxm
b3JtZWQKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IE5BTUVTUEFDRV9FUlI6IC0gUmFpc2VkIGlm
IHRoZSBzcGVjaWZpZWQgcHJlZml4IGlzIG1hbGZvcm1lZAorICAgIC8vIFdlIGhhdmUgdG8gY29t
bWVudCB0aGlzIG91dCwgc2luY2UgaXQncyB1c2VkIGZvciBhdHRyaWJ1dGVzIGFuZCB0YWcgbmFt
ZXMsIGFuZCB3ZSd2ZSBvbmx5CisgICAgLy8gc3dpdGNoZWQgb25lIG92ZXIuCisgICAgLyoKICAg
ICAvLyAtIGlmIHRoZSBuYW1lc3BhY2VVUkkgb2YgdGhpcyBub2RlIGlzIG51bGwsCiAgICAgLy8g
LSBpZiB0aGUgc3BlY2lmaWVkIHByZWZpeCBpcyAieG1sIiBhbmQgdGhlIG5hbWVzcGFjZVVSSSBv
ZiB0aGlzIG5vZGUgaXMgZGlmZmVyZW50IGZyb20KICAgICAvLyAgICJodHRwOi8vd3d3LnczLm9y
Zy9YTUwvMTk5OC9uYW1lc3BhY2UiLAogICAgIC8vIC0gaWYgdGhpcyBub2RlIGlzIGFuIGF0dHJp
YnV0ZSBhbmQgdGhlIHNwZWNpZmllZCBwcmVmaXggaXMgInhtbG5zIiBhbmQKICAgICAvLyAgIHRo
ZSBuYW1lc3BhY2VVUkkgb2YgdGhpcyBub2RlIGlzIGRpZmZlcmVudCBmcm9tICJodHRwOi8vd3d3
LnczLm9yZy8yMDAwL3htbG5zLyIsCiAgICAgLy8gLSBvciBpZiB0aGlzIG5vZGUgaXMgYW4gYXR0
cmlidXRlIGFuZCB0aGUgcXVhbGlmaWVkTmFtZSBvZiB0aGlzIG5vZGUgaXMgInhtbG5zIiBbTmFt
ZXNwYWNlc10uCi0gICAgaWYgKAotI2lmIDAKLSAgICAgICAgLy8gRklYTUU6IEFkZCB0aGlzIGNo
ZWNrIChidXQgbm90IGluIGEgd2F5IHRoYXQgZGVwZW5kcyBvbiB0aGUgQysrIERPTSEpCi0gICAg
ICAgIEVsZW1lbnQ6OmtodG1sTWFsZm9ybWVkUHJlZml4KF9wcmVmaXgpIHx8Ci0jZW5kaWYKLSAg
ICAgICAgKG5hbWVzcGFjZVBhcnQoaWQoKSkgPT0gbm9OYW1lc3BhY2UgJiYgaWQoKSA+IElEX0xB
U1RfVEFHKSB8fAorICAgIGlmICgobmFtZXNwYWNlUGFydChpZCgpKSA9PSBub05hbWVzcGFjZSAm
JiBpZCgpID4gSURfTEFTVF9UQUcpIHx8CiAgICAgICAgIChfcHJlZml4ID09ICJ4bWwiICYmIERP
TVN0cmluZyhnZXREb2N1bWVudCgpLT5uYW1lc3BhY2VVUkkoaWQoKSkpICE9ICJodHRwOi8vd3d3
LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiKSkgewogICAgICAgICBleGNlcHRpb25jb2RlID0g
RE9NRXhjZXB0aW9uOjpOQU1FU1BBQ0VfRVJSOwogICAgICAgICByZXR1cm47Ci0gICAgfQorICAg
IH0qLwogfQogCiB2b2lkIE5vZGVJbXBsOjpjaGVja0FkZENoaWxkKE5vZGVJbXBsICpuZXdDaGls
ZCwgaW50ICZleGNlcHRpb25jb2RlKQpAQCAtMTI4Myw5ICsxMjg5LDEwIEBAIFJlbmRlck9iamVj
dCAqIE5vZGVJbXBsOjpuZXh0UmVuZGVyZXIoKQogICAgIHJldHVybiAwOwogfQogCisvLyBGSVhN
RTogVGhpcyBjb2RlIGlzIHVzZWQgYnkgZWRpdGluZy4gIFNlZW1zIGxpa2UgaXQgY291bGQgbW92
ZSBvdmVyIHRoZXJlIGFuZCBub3QgcG9sbHV0ZSBOb2RlSW1wbC4KIGJvb2wgTm9kZUltcGw6Omlz
QXRvbWljTm9kZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuICFoYXNDaGlsZE5vZGVzKCkgfHwgKGlk
KCkgPT0gSURfT0JKRUNUICYmIHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+aXNSZXBsYWNlZCgp
KTsKKyAgICByZXR1cm4gIWhhc0NoaWxkTm9kZXMoKSB8fCAocmVuZGVyZXIoKSAmJiByZW5kZXJl
cigpLT5pc1dpZGdldCgpKTsKIH0KIAogTm9kZUltcGwgKk5vZGVJbXBsOjpwcmV2aW91c05vZGVD
b25zaWRlcmluZ0F0b21pY05vZGVzKCkgY29uc3QKQEAgLTE0MDIsMTMgKzE0MDksMTUgQEAgbG9u
ZyBOb2RlSW1wbDo6bWF4T2Zmc2V0KCkgY29uc3QKICAgICByZXR1cm4gMTsKIH0KIAorLy8gRklY
TUU6IFNob3VsZG4ndCB0aGVzZSBmdW5jdGlvbnMgYmUgaW4gdGhlIGVkaXRpbmcgY29kZT8gIENv
ZGUgdGhhdCBhc2tzIHF1ZXN0aW9ucyBhYm91dCBIVE1MIGluIHRoZSBjb3JlIERPTSBjbGFzcwor
Ly8gaXMgb2J2aW91c2x5IG1pc3BsYWNlZC4KIC8vIG1ldGhvZCBmb3IgZWRpdGluZyBtYWRuZXNz
LCB3aGljaCBhbGxvd3MgQlIsMSBhcyBhIHBvc2l0aW9uLCB0aG91Z2ggdGhhdCBpcyBpbmNvcnJl
Y3QKIGxvbmcgTm9kZUltcGw6Om1heERlZXBPZmZzZXQoKSBjb25zdAogewogICAgIGlmIChvZmZz
ZXRJbkNoYXJhY3RlcnMobm9kZVR5cGUoKSkpCiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxj
b25zdCBUZXh0SW1wbCo+KHRoaXMpLT5sZW5ndGgoKTsKICAgICAgICAgCi0gICAgaWYgKGlkKCkg
PT0gSURfQlIgfHwgKHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+aXNSZXBsYWNlZCgpKSkKKyAg
ICBpZiAoaGFzVGFnTmFtZShIVE1MTmFtZXM6OmJyKCkpIHx8IChyZW5kZXJlcigpICYmIHJlbmRl
cmVyKCktPmlzUmVwbGFjZWQoKSkpCiAgICAgICAgIHJldHVybiAxOwogCiAgICAgcmV0dXJuIGNo
aWxkTm9kZUNvdW50KCk7CkBAIC0xNDY0LDcgKzE0NzMsNyBAQCBFbGVtZW50SW1wbCAqTm9kZUlt
cGw6OmVuY2xvc2luZ0Jsb2NrRmxvCiAgICAgICAgIG4gPSBuLT5wYXJlbnROb2RlKCk7CiAgICAg
ICAgIGlmICghbikKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBpZiAobi0+aXNCbG9ja0Zs
b3dPclRhYmxlKCkgfHwgbi0+aWQoKSA9PSBJRF9CT0RZKQorICAgICAgICBpZiAobi0+aXNCbG9j
a0Zsb3dPclRhYmxlKCkgfHwgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJvZHkoKSkpCiAgICAg
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RWxlbWVudEltcGwgKj4obik7CiAgICAgfQogICAg
IHJldHVybiAwOwpAQCAtMTQ4MCw3ICsxNDg5LDcgQEAgRWxlbWVudEltcGwgKk5vZGVJbXBsOjpl
bmNsb3NpbmdCbG9ja0ZsbwogICAgICAgICBuID0gbi0+cGFyZW50Tm9kZSgpOwogICAgICAgICBp
ZiAoIW4pCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgaWYgKG4tPmlzQmxvY2tGbG93KCkg
fHwgbi0+aWQoKSA9PSBJRF9CT0RZKQorICAgICAgICBpZiAobi0+aXNCbG9ja0Zsb3coKSB8fCBu
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Ym9keSgpKSkKICAgICAgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxFbGVtZW50SW1wbCAqPihuKTsKICAgICB9CiAgICAgcmV0dXJuIDA7CkBAIC0xNDkz
LDcgKzE1MDIsNyBAQCBFbGVtZW50SW1wbCAqTm9kZUltcGw6OmVuY2xvc2luZ0lubGluZUVsCiAK
ICAgICB3aGlsZSAoMSkgewogICAgICAgICBwID0gbi0+cGFyZW50Tm9kZSgpOwotICAgICAgICBp
ZiAoIXAgfHwgcC0+aXNCbG9ja0Zsb3coKSB8fCBwLT5pZCgpID09IElEX0JPRFkpCisgICAgICAg
IGlmICghcCB8fCBwLT5pc0Jsb2NrRmxvdygpIHx8IHAtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpi
b2R5KCkpKQogICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsICo+KG4p
OwogICAgICAgICAvLyBBbHNvIHN0b3AgaWYgYW55IHByZXZpb3VzIHNpYmxpbmcgaXMgYSBibG9j
awogICAgICAgICBmb3IgKE5vZGVJbXBsICpzaWJsaW5nID0gbi0+cHJldmlvdXNTaWJsaW5nKCk7
IHNpYmxpbmc7IHNpYmxpbmcgPSBzaWJsaW5nLT5wcmV2aW91c1NpYmxpbmcoKSkgewpAQCAtMTUx
Miw3ICsxNTIxLDcgQEAgRWxlbWVudEltcGwgKk5vZGVJbXBsOjpyb290RWRpdGFibGVFbGVtZQog
ICAgICAgICByZXR1cm4gMDsKIAogICAgIE5vZGVJbXBsICpuID0gY29uc3RfY2FzdDxOb2RlSW1w
bCAqPih0aGlzKTsKLSAgICBpZiAobi0+aWQoKSA9PSBJRF9CT0RZKQorICAgIGlmIChuLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6Ym9keSgpKSkKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEVs
ZW1lbnRJbXBsICo+KG4pOwogCiAgICAgTm9kZUltcGwgKnJlc3VsdCA9IG4tPmlzRWRpdGFibGVC
bG9jaygpID8gbiA6IDA7CkBAIC0xNTIwLDcgKzE1MjksNyBAQCBFbGVtZW50SW1wbCAqTm9kZUlt
cGw6OnJvb3RFZGl0YWJsZUVsZW1lCiAgICAgICAgIG4gPSBuLT5wYXJlbnROb2RlKCk7CiAgICAg
ICAgIGlmICghbiB8fCAhbi0+aXNDb250ZW50RWRpdGFibGUoKSkKICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBpZiAobi0+aWQoKSA9PSBJRF9CT0RZKSB7CisgICAgICAgIGlmIChuLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6Ym9keSgpKSkgewogICAgICAgICAgICAgcmVzdWx0ID0gbjsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0xNTQwLDYgKzE1NDksOCBAQCBib29sIE5v
ZGVJbXBsOjppblNhbWVDb250YWluaW5nQmxvY2tGbG93CiAgICAgcmV0dXJuIG4gPyBlbmNsb3Np
bmdCbG9ja0Zsb3dFbGVtZW50KCkgPT0gbi0+ZW5jbG9zaW5nQmxvY2tGbG93RWxlbWVudCgpIDog
ZmFsc2U7CiB9CiAKKy8vIEZJWE1FOiBFbmQgb2Ygb2J2aW91c2x5IG1pc3BsYWNlZCBIVE1MIGVk
aXRpbmcgZnVuY3Rpb25zLiAgVHJ5IHRvIG1vdmUgdGhlc2Ugb3V0IG9mIE5vZGVJbXBsLgorCiB2
b2lkIE5vZGVJbXBsOjphZGRFdmVudExpc3RlbmVyKGNvbnN0IERPTVN0cmluZyAmdHlwZSwgRXZl
bnRMaXN0ZW5lciAqbGlzdGVuZXIsIGJvb2wgdXNlQ2FwdHVyZSkKIHsKICAgICBhZGRFdmVudExp
c3RlbmVyKEV2ZW50SW1wbDo6dHlwZVRvSWQodHlwZSksIGxpc3RlbmVyLCB1c2VDYXB0dXJlKTsK
QEAgLTE1NTAsMjUgKzE1NjEsMTUgQEAgdm9pZCBOb2RlSW1wbDo6cmVtb3ZlRXZlbnRMaXN0ZW5l
cihjb25zdAogICAgIHJlbW92ZUV2ZW50TGlzdGVuZXIoRXZlbnRJbXBsOjp0eXBlVG9JZCh0eXBl
KSwgbGlzdGVuZXIsIHVzZUNhcHR1cmUpOwogfQogCi1TaGFyZWRQdHI8Tm9kZUxpc3RJbXBsPiBO
b2RlSW1wbDo6Z2V0RWxlbWVudHNCeVRhZ05hbWVOUyAoIGNvbnN0IERPTVN0cmluZyAmbmFtZXNw
YWNlVVJJLCBjb25zdCBET01TdHJpbmcgJmxvY2FsTmFtZSApCitTaGFyZWRQdHI8Tm9kZUxpc3RJ
bXBsPiBOb2RlSW1wbDo6Z2V0RWxlbWVudHNCeVRhZ05hbWVOUyhjb25zdCBET01TdHJpbmcgJm5h
bWVzcGFjZVVSSSwgY29uc3QgRE9NU3RyaW5nICZsb2NhbE5hbWUpCiB7Ci0gICAgaWYgKGxvY2Fs
TmFtZS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIFNoYXJlZFB0cjxOb2RlTGlzdEltcGw+KCk7
Ci0KLSAgICBJZCBpZE1hc2sgPSBuYW1lc3BhY2VNYXNrIHwgbG9jYWxOYW1lTWFzazsKLSAgICBp
ZiAobG9jYWxOYW1lWzBdID09ICcqJykKLSAgICAgICAgaWRNYXNrICY9IH5sb2NhbE5hbWVNYXNr
OwotICAgIGlmIChuYW1lc3BhY2VVUkkuaXNOdWxsKCkgfHwgbmFtZXNwYWNlVVJJWzBdID09ICcq
JykKLSAgICAgICAgaWRNYXNrICY9IH5uYW1lc3BhY2VNYXNrOwotCi0gICAgSWQgaWQgPSAwOyAv
LyAwIG1lYW5zICJhbGwgaXRlbXMiCi0gICAgaWYgKChpZE1hc2sgJiBsb2NhbE5hbWVNYXNrKSB8
fCAhbmFtZXNwYWNlVVJJLmlzTnVsbCgpKSB7IC8vIG5vdCBnZXRFbGVtZW50c0J5VGFnTmFtZSgi
KiIpCi0gICAgICAgIGlkID0gZ2V0RG9jdW1lbnQoKS0+dGFnSWQobmFtZXNwYWNlVVJJLmltcGxl
bWVudGF0aW9uKCksIGxvY2FsTmFtZS5pbXBsZW1lbnRhdGlvbigpLCB0cnVlKTsKLSAgICAgICAg
aWYgKCAhaWQgKSAvLyBub3QgZm91bmQgLT4gd2Ugd2FudCB0byByZXR1cm4gYW4gZW1wdHkgbGlz
dCwgbm90ICJhbGwgaXRlbXMiCi0gICAgICAgICAgICBpZCA9IChJZCktMTsgLy8gSEFDSy4gSEVB
RCBoYXMgYSBjbGVhbmVyIGltcGxlbWVudGF0aW9uIG9mIFRhZ05vZGVMaXN0SW1wbCBpdCBzZWVt
cy4KLSAgICB9Ci0KLSAgICByZXR1cm4gU2hhcmVkUHRyPE5vZGVMaXN0SW1wbD4obmV3IFRhZ05v
ZGVMaXN0SW1wbCh0aGlzLCBpZCwgaWRNYXNrKSk7CisgICAgaWYgKG5hbWVzcGFjZVVSSS5pc051
bGwoKSB8fCBsb2NhbE5hbWUuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBTaGFyZWRQdHI8Tm9k
ZUxpc3RJbXBsPigpOyAvLyBGSVhNRTogV2hvIGNhcmVzIGFib3V0IHRoaXMgYWRkaXRpb25hbCBj
aGVjaz8KKyAgICAKKyAgICBET01TdHJpbmcgbmFtZSA9IGxvY2FsTmFtZTsKKyAgICBpZiAoZ2V0
RG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSkKKyAgICAgICAgbmFtZSA9IGxvY2FsTmFtZS5s
b3dlcigpOworICAgIHJldHVybiBTaGFyZWRQdHI8Tm9kZUxpc3RJbXBsPihuZXcgVGFnTm9kZUxp
c3RJbXBsKHRoaXMsIEF0b21pY1N0cmluZyhuYW1lc3BhY2VVUkkpLCBBdG9taWNTdHJpbmcobmFt
ZSkpKTsKIH0KIAogYm9vbCBOb2RlSW1wbDo6aXNTdXBwb3J0ZWQoY29uc3QgRE9NU3RyaW5nICZm
ZWF0dXJlLCBjb25zdCBET01TdHJpbmcgJnZlcnNpb24pCkBAIC0xNTkyLDEzICsxNTkzLDYgQEAg
TmFtZWRBdHRyTWFwSW1wbCAqTm9kZUltcGw6OmF0dHJpYnV0ZXMoKQogICAgIHJldHVybiAwOwog
fQogCi0jaWYgQVBQTEVfQ0hBTkdFUwotTm9kZUltcGw6OklkIE5vZGVJbXBsOjppZGVudGlmaWVy
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gaWQoKTsKLX0KLSNlbmRpZgotCiAjaWZuZGVmIE5ERUJV
RwogCiBzdGF0aWMgdm9pZCBhcHBlbmRBdHRyaWJ1dGVEZXNjKGNvbnN0IE5vZGVJbXBsICpub2Rl
LCBRU3RyaW5nICZzdHJpbmcsIE5vZGVJbXBsOjpJZCBhdHRySUQsIFFTdHJpbmcgYXR0ckRlc2Mp
CkBAIC0xNjM4LDcgKzE2MzIsNyBAQCB2b2lkIE5vZGVJbXBsOjpzaG93VHJlZUFuZE1hcmsoTm9k
ZUltcGwgCiB7CiAgICAgTm9kZUltcGwgKnJvb3ROb2RlOwogICAgIE5vZGVJbXBsICpub2RlID0g
KE5vZGVJbXBsICopdGhpczsKLSAgICB3aGlsZShub2RlLT5wYXJlbnROb2RlKCkgIT0gTlVMTCAm
JiBub2RlLT5pZCgpICE9IElEX0JPRFkpCisgICAgd2hpbGUgKG5vZGUtPnBhcmVudE5vZGUoKSAm
JiAhbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJvZHkoKSkpCiAgICAgICAgIG5vZGUgPSBu
b2RlLT5wYXJlbnROb2RlKCk7CiAgICAgcm9vdE5vZGUgPSBub2RlOwogCQpAQCAtMjA5NCwxMSAr
MjA4OCw4IEBAIE5vZGVJbXBsICpDb250YWluZXJOb2RlSW1wbDo6YWRkQ2hpbGQoTm8KICAgICBT
aGFyZWRQdHI8Tm9kZUltcGw+IHByb3RlY3ROZXdDaGlsZChuZXdDaGlsZCk7IC8vIG1ha2Ugc3Vy
ZSB0aGUgbmV3IGNoaWxkIGlzIHJlZidkIGFuZCBkZXJlZidkIHNvIHdlIGRvbid0IGxlYWsgaXQK
IAogICAgIC8vIHNob3J0IGNoZWNrIGZvciBjb25zaXN0ZW5jeSB3aXRoIERURAotICAgIGlmKCFp
c1hNTEVsZW1lbnROb2RlKCkgJiYgIW5ld0NoaWxkLT5pc1hNTEVsZW1lbnROb2RlKCkgJiYgIWNo
aWxkQWxsb3dlZChuZXdDaGlsZCkpCi0gICAgewotICAgICAgICAvL2tkRGVidWcoIDYwMjAgKSA8
PCAiQWRkQ2hpbGQgZmFpbGVkISBpZD0iIDw8IGlkKCkgPDwgIiwgY2hpbGQtPmlkPSIgPDwgbmV3
Q2hpbGQtPmlkKCkgPDwgZW5kbDsKKyAgICBpZiAoZ2V0RG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1l
bnQoKSAmJiAhY2hpbGRBbGxvd2VkKG5ld0NoaWxkKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
fQogCiAgICAgLy8ganVzdCBhZGQgaXQuLi4KICAgICBuZXdDaGlsZC0+c2V0UGFyZW50KHRoaXMp
OwpAQCAtMjUzNiwxMCArMjUyNywxMCBAQCBib29sIENoaWxkTm9kZUxpc3RJbXBsOjpub2RlTWF0
Y2hlcyhOb2RlCiAgICAgcmV0dXJuIHRlc3ROb2RlLT5wYXJlbnROb2RlKCkgPT0gcm9vdE5vZGU7
CiB9CiAKLVRhZ05vZGVMaXN0SW1wbDo6VGFnTm9kZUxpc3RJbXBsKE5vZGVJbXBsICpuLCBOb2Rl
SW1wbDo6SWQgX2lkLCBOb2RlSW1wbDo6SWQgX2lkTWFzayApCitUYWdOb2RlTGlzdEltcGw6OlRh
Z05vZGVMaXN0SW1wbChOb2RlSW1wbCAqbiwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VV
UkksIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lKQogICAgIDogTm9kZUxpc3RJbXBsKG4p
LCAKLSAgICAgIG1faWQoX2lkICYgX2lkTWFzayksIAotICAgICAgbV9pZE1hc2soX2lkTWFzaykK
KyAgICAgIG1fbmFtZXNwYWNlVVJJKG5hbWVzcGFjZVVSSSksIAorICAgICAgbV9sb2NhbE5hbWUo
bG9jYWxOYW1lKQogewogfQogCkBAIC0yNTQ4LDE1ICsyNTM5LDIwIEBAIHVuc2lnbmVkIGxvbmcg
VGFnTm9kZUxpc3RJbXBsOjpsZW5ndGgoKSAKICAgICByZXR1cm4gcmVjdXJzaXZlTGVuZ3RoKCk7
CiB9CiAKLU5vZGVJbXBsICpUYWdOb2RlTGlzdEltcGw6Oml0ZW0gKCB1bnNpZ25lZCBsb25nIGlu
ZGV4ICkgY29uc3QKK05vZGVJbXBsICpUYWdOb2RlTGlzdEltcGw6Oml0ZW0odW5zaWduZWQgbG9u
ZyBpbmRleCkgY29uc3QKIHsKLSAgICByZXR1cm4gcmVjdXJzaXZlSXRlbSggaW5kZXggKTsKKyAg
ICByZXR1cm4gcmVjdXJzaXZlSXRlbShpbmRleCk7CiB9CiAKLWJvb2wgVGFnTm9kZUxpc3RJbXBs
Ojpub2RlTWF0Y2hlcyggTm9kZUltcGwgKnRlc3ROb2RlICkgY29uc3QKK2Jvb2wgVGFnTm9kZUxp
c3RJbXBsOjpub2RlTWF0Y2hlcyhOb2RlSW1wbCAqdGVzdE5vZGUpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuICggdGVzdE5vZGUtPmlzRWxlbWVudE5vZGUoKSAmJgotICAgICAgICAgICAgICh0ZXN0Tm9k
ZS0+aWQoKSAmIG1faWRNYXNrKSA9PSBtX2lkKTsKKyAgICBpZiAoIXRlc3ROb2RlLT5pc0VsZW1l
bnROb2RlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChtX25hbWVzcGFjZVVS
SSAhPSBzdGFyQXRvbSAmJiBtX25hbWVzcGFjZVVSSSAhPSB0ZXN0Tm9kZS0+bmFtZXNwYWNlVVJJ
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gbV9sb2NhbE5hbWUg
PT0gc3RhckF0b20gfHwgbV9sb2NhbE5hbWUgPT0gdGVzdE5vZGUtPmxvY2FsTmFtZSgpOwogfQog
CiBOYW1lTm9kZUxpc3RJbXBsOjpOYW1lTm9kZUxpc3RJbXBsKE5vZGVJbXBsICpuLCBjb25zdCBE
T01TdHJpbmcgJnQgKQpAQCAtMjU5NSwxMDYgKzI1OTEsNCBAQCBTaGFyZWRQdHI8Tm9kZUltcGw+
IE5hbWVkTm9kZU1hcEltcGw6OnJlCiAgICAgcmV0dXJuIHJlbW92ZU5hbWVkSXRlbShtYXBJZChu
YW1lc3BhY2VVUkksIGxvY2FsTmFtZSwgdHJ1ZSksIGV4Y2VwdGlvbik7CiB9CiAKLS8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KLQotLy8gIyMjIHVudXNlZAotI2lmIDAKLUdlbmVyaWNST05hbWVkTm9k
ZU1hcEltcGw6OkdlbmVyaWNST05hbWVkTm9kZU1hcEltcGwoRG9jdW1lbnRQdHIqIGRvYykKLSAg
ICA6IE5hbWVkTm9kZU1hcEltcGwoKQotewotICAgIG1fZG9jID0gZG9jLT5kb2N1bWVudCgpOwot
ICAgIG1fY29udGVudHMgPSBuZXcgUVB0ckxpc3Q8Tm9kZUltcGw+OwotfQotCi1HZW5lcmljUk9O
YW1lZE5vZGVNYXBJbXBsOjp+R2VuZXJpY1JPTmFtZWROb2RlTWFwSW1wbCgpCi17Ci0gICAgd2hp
bGUgKG1fY29udGVudHMtPmNvdW50KCkgPiAwKQotICAgICAgICBtX2NvbnRlbnRzLT50YWtlKDAp
LT5kZXJlZigpOwotCi0gICAgZGVsZXRlIG1fY29udGVudHM7Ci19Ci0KLU5vZGVJbXBsICpHZW5l
cmljUk9OYW1lZE5vZGVNYXBJbXBsOjpnZXROYW1lZEl0ZW0gKCBjb25zdCBET01TdHJpbmcgJm5h
bWUsIGludCAmLypleGNlcHRpb25jb2RlKi8gKSBjb25zdAotewotICAgIFFQdHJMaXN0SXRlcmF0
b3I8Tm9kZUltcGw+IGl0KCptX2NvbnRlbnRzKTsKLSAgICBmb3IgKDsgaXQuY3VycmVudCgpOyAr
K2l0KQotICAgICAgICBpZiAoaXQuY3VycmVudCgpLT5ub2RlTmFtZSgpID09IG5hbWUpCi0gICAg
ICAgICAgICByZXR1cm4gaXQuY3VycmVudCgpOwotICAgIHJldHVybiAwOwogfQotCi1Ob2RlIEdl
bmVyaWNST05hbWVkTm9kZU1hcEltcGw6OnNldE5hbWVkSXRlbSAoIGNvbnN0IE5vZGUgJi8qYXJn
Ki8sIGludCAmZXhjZXB0aW9uY29kZSApCi17Ci0gICAgLy8gY2FuJ3QgbW9kaWZ5IHRoaXMgbGlz
dCB0aHJvdWdoIHN0YW5kYXJkIERPTSBmdW5jdGlvbnMKLSAgICAvLyBOT19NT0RJRklDQVRJT05f
QUxMT1dFRF9FUlI6IFJhaXNlZCBpZiB0aGlzIG1hcCBpcyByZWFkb25seQotICAgIGV4Y2VwdGlv
bmNvZGUgPSBET01FeGNlcHRpb246Ok5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUjsKLSAgICBy
ZXR1cm4gMDsKLX0KLQotTm9kZSBHZW5lcmljUk9OYW1lZE5vZGVNYXBJbXBsOjpyZW1vdmVOYW1l
ZEl0ZW0gKCBjb25zdCBET01TdHJpbmcgJi8qbmFtZSovLCBpbnQgJmV4Y2VwdGlvbmNvZGUgKQot
ewotICAgIC8vIGNhbid0IG1vZGlmeSB0aGlzIGxpc3QgdGhyb3VnaCBzdGFuZGFyZCBET00gZnVu
Y3Rpb25zCi0gICAgLy8gTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOiBSYWlzZWQgaWYgdGhp
cyBtYXAgaXMgcmVhZG9ubHkKLSAgICBleGNlcHRpb25jb2RlID0gRE9NRXhjZXB0aW9uOjpOT19N
T0RJRklDQVRJT05fQUxMT1dFRF9FUlI7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLU5vZGVJbXBsICpH
ZW5lcmljUk9OYW1lZE5vZGVNYXBJbXBsOjppdGVtICggdW5zaWduZWQgbG9uZyBpbmRleCApIGNv
bnN0Ci17Ci0gICAgLy8gIyMjIGNoZWNrIHRoaXMgd2hlbiBjYWxsaW5nIGZyb20gamF2YXNjcmlw
dCB1c2luZyAtMSA9IDJec2l6ZW9mKGludCktMQotICAgIC8vIChhbHNvIGZvciBvdGhlciBzaW1p
bGFyIG1ldGhvZHMpCi0gICAgaWYgKGluZGV4ID49IG1fY29udGVudHMtPmNvdW50KCkpCi0gICAg
ICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIG1fY29udGVudHMtPmF0KGluZGV4KTsKLX0KLQot
dW5zaWduZWQgbG9uZyBHZW5lcmljUk9OYW1lZE5vZGVNYXBJbXBsOjpsZW5ndGgoICApIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1fY29udGVudHMtPmNvdW50KCk7Ci19Ci0KLU5vZGVJbXBsICpHZW5l
cmljUk9OYW1lZE5vZGVNYXBJbXBsOjpnZXROYW1lZEl0ZW1OUyggY29uc3QgRE9NU3RyaW5nICZu
YW1lc3BhY2VVUkksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IERPTVN0cmluZyAmbG9jYWxOYW1lLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgJi8qZXhjZXB0aW9uY29kZSov
ICkgY29uc3QKLXsKLSAgICBOb2RlSW1wbDo6SWQgc2VhcmNoSWQgPSBtX2RvYy0+dGFnSWQobmFt
ZXNwYWNlVVJJLmltcGxlbWVudGF0aW9uKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsb2NhbE5hbWUuaW1wbGVtZW50YXRpb24oKSwgdHJ1ZSk7
Ci0KLSAgICBRUHRyTGlzdEl0ZXJhdG9yPE5vZGVJbXBsPiBpdCgqbV9jb250ZW50cyk7Ci0gICAg
Zm9yICg7IGl0LmN1cnJlbnQoKTsgKytpdCkKLSAgICAgICAgaWYgKGl0LmN1cnJlbnQoKS0+aWQo
KSA9PSBzZWFyY2hJZCkKLSAgICAgICAgICAgIHJldHVybiBpdC5jdXJyZW50KCk7Ci0KLSAgICBy
ZXR1cm4gMDsKLX0KLQotTm9kZUltcGwgKkdlbmVyaWNST05hbWVkTm9kZU1hcEltcGw6OnNldE5h
bWVkSXRlbU5TKCBOb2RlSW1wbCAqLyphcmcqLywgaW50ICZleGNlcHRpb25jb2RlICkKLXsKLSAg
ICAvLyBjYW4ndCBtb2RpZnkgdGhpcyBsaXN0IHRocm91Z2ggc3RhbmRhcmQgRE9NIGZ1bmN0aW9u
cwotICAgIC8vIE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUjogUmFpc2VkIGlmIHRoaXMgbWFw
IGlzIHJlYWRvbmx5Ci0gICAgZXhjZXB0aW9uY29kZSA9IERPTUV4Y2VwdGlvbjo6Tk9fTU9ESUZJ
Q0FUSU9OX0FMTE9XRURfRVJSOwotICAgIHJldHVybiAwOwotfQotCi1Ob2RlSW1wbCAqR2VuZXJp
Y1JPTmFtZWROb2RlTWFwSW1wbDo6cmVtb3ZlTmFtZWRJdGVtTlMoIGNvbnN0IERPTVN0cmluZyAm
LypuYW1lc3BhY2VVUkkqLywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgRE9NU3RyaW5nICYvKmxvY2FsTmFtZSovLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgJmV4
Y2VwdGlvbmNvZGUgKQotewotICAgIC8vIGNhbid0IG1vZGlmeSB0aGlzIGxpc3QgdGhyb3VnaCBz
dGFuZGFyZCBET00gZnVuY3Rpb25zCi0gICAgZXhjZXB0aW9uY29kZSA9IERPTUV4Y2VwdGlvbjo6
Tk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOwotICAgIHJldHVybiAwOwotfQotCi12b2lkIEdl
bmVyaWNST05hbWVkTm9kZU1hcEltcGw6OmFkZE5vZGUoTm9kZUltcGwgKm4pCi17Ci0gICAgLy8g
VGhlIHNwZWMgc2F5cyB0aGF0IGluIHRoZSBjYXNlIG9mIGR1cGxpY2F0ZXMgd2Ugb25seSBrZWVw
IHRoZSBmaXJzdCBvbmUKLSAgICBpbnQgZXhjZXB0aW9uY29kZSA9IDA7Ci0gICAgaWYgKGdldE5h
bWVkSXRlbShuLT5ub2RlTmFtZSgpLGV4Y2VwdGlvbmNvZGUpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBuLT5yZWYoKTsKLSAgICBtX2NvbnRlbnRzLT5hcHBlbmQobik7Ci19Ci0KLSNlbmRpZgpJ
bmRleDoga2h0bWwveG1sL2RvbV9ub2RlaW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9XZWJDb3JlL2todG1sL3htbC9kb21fbm9kZWltcGwuaCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS44NwpkaWZmIC11IC1wIC1yMS44NyBraHRtbC94bWwvZG9tX25vZGVpbXBsLmgKLS0tIGto
dG1sL3htbC9kb21fbm9kZWltcGwuaAkyMyBKdW4gMjAwNSAxOTo0Nzo1MCAtMDAwMAkxLjg3Cisr
KyBraHRtbC94bWwvZG9tX25vZGVpbXBsLmgJOCBKdWwgMjAwNSAwNTo1MDo0OCAtMDAwMApAQCAt
NTksNiArNTksNyBAQCBjbGFzcyBFdmVudEltcGw7CiBjbGFzcyBFdmVudExpc3RlbmVyOwogY2xh
c3MgTm9kZUxpc3RJbXBsOwogY2xhc3MgTmFtZWRBdHRyTWFwSW1wbDsKK2NsYXNzIFF1YWxpZmll
ZE5hbWU7CiBjbGFzcyBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcjsKIAogLy8gVGhlIG5hbWVzcGFj
ZSB1c2VkIGZvciBYSFRNTCBlbGVtZW50cwpAQCAtMTAyLDYgKzEwMyw3IEBAIHB1YmxpYzoKICAg
ICBNQUlOX1RIUkVBRF9BTExPQ0FURUQ7CiAKICAgICAvLyBET00gbWV0aG9kcyAmIGF0dHJpYnV0
ZXMgZm9yIE5vZGUKKyAgICB2aXJ0dWFsIGJvb2wgaGFzVGFnTmFtZShjb25zdCBRdWFsaWZpZWRO
YW1lJiB0YWdOYW1lKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgRE9NU3Ry
aW5nIG5vZGVOYW1lKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgRE9NU3RyaW5nIG5vZGVWYWx1
ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBzZXROb2RlVmFsdWUoIGNvbnN0IERPTVN0cmlu
ZyAmX25vZGVWYWx1ZSwgaW50ICZleGNlcHRpb25jb2RlICk7CkBAIC0xMjIsMTQgKzEyNCwxNCBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZShpbnQgJmV4Y2VwdGlvbmNvZGUpOwog
ICAgIHZpcnR1YWwgYm9vbCBoYXNDaGlsZE5vZGVzICggICkgY29uc3Q7CiAgICAgdmlydHVhbCBO
b2RlSW1wbCAqY2xvbmVOb2RlICggYm9vbCBkZWVwICkgPSAwOwotICAgIHZpcnR1YWwgRE9NU3Ry
aW5nIGxvY2FsTmFtZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgRE9NU3RyaW5nIG5hbWVzcGFjZVVS
SSgpIGNvbnN0OwotICAgIHZpcnR1YWwgRE9NU3RyaW5nIHByZWZpeCgpIGNvbnN0OwotICAgIHZp
cnR1YWwgdm9pZCBzZXRQcmVmaXgoY29uc3QgRE9NU3RyaW5nICZfcHJlZml4LCBpbnQgJmV4Y2Vw
dGlvbmNvZGUgKTsKKyAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lKCkg
Y29uc3Q7CisgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSgpIGNv
bnN0OworICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgoKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0UHJlZml4KGNvbnN0IEF0b21pY1N0cmluZyAmX3ByZWZpeCwgaW50
ICZleGNlcHRpb25jb2RlKTsKICAgICB2b2lkIG5vcm1hbGl6ZSAoKTsKICAgICBzdGF0aWMgYm9v
bCBpc1N1cHBvcnRlZChjb25zdCBET01TdHJpbmcgJmZlYXR1cmUsIGNvbnN0IERPTVN0cmluZyAm
dmVyc2lvbik7CiAKLSAgICBOb2RlSW1wbCAqbGFzdERlc2NlbmRlbnQoKSBjb25zdDsKKyAgICBO
b2RlSW1wbCAqbGFzdERlc2NlbmRhbnQoKSBjb25zdDsKIAogICAgIC8vIE90aGVyIG1ldGhvZHMg
KG5vdCBwYXJ0IG9mIERPTSkKICAgICB2aXJ0dWFsIGJvb2wgaXNFbGVtZW50Tm9kZSgpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CkBAIC0xMzcsOCArMTM5LDggQEAgcHVibGljOgogICAgIHZpcnR1
YWwgYm9vbCBpc1N0eWxlZEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZp
cnR1YWwgYm9vbCBpc0F0dHJpYnV0ZU5vZGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAg
IHZpcnR1YWwgYm9vbCBpc1RleHROb2RlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2
aXJ0dWFsIGJvb2wgaXNDb21tZW50Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAg
dmlydHVhbCBib29sIGlzRG9jdW1lbnROb2RlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAg
ICB2aXJ0dWFsIGJvb2wgaXNYTUxFbGVtZW50Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
CiAgICAgYm9vbCBpc0Jsb2NrRmxvdygpIGNvbnN0OwogICAgIGJvb2wgaXNCbG9ja0Zsb3dPclRh
YmxlKCkgY29uc3Q7CiAgICAgCkBAIC0xODgsMzUgKzE5MCwxOCBAQCBwdWJsaWM6CiAgICAgYm9v
bCBpblNhbWVSb290RWRpdGFibGVFbGVtZW50KE5vZGVJbXBsICopOwogICAgIGJvb2wgaW5TYW1l
Q29udGFpbmluZ0Jsb2NrRmxvd0VsZW1lbnQoTm9kZUltcGwgKik7CiAgICAgCi0gICAgLy8gdXNl
ZCBieSB0aGUgcGFyc2VyLiBEb2Vzbid0IGRvIGFzIG1hbnkgZXJyb3IgY2hlY2tpbmdzIGFzCi0g
ICAgLy8gYXBwZW5kQ2hpbGQoKSwgYW5kIHJldHVybnMgdGhlIG5vZGUgaW50byB3aGljaCB3aWxs
IGJlIHBhcnNlZCBuZXh0LgorICAgIC8vIHVzZWQgYnkgdGhlIHBhcnNlci4gQ2hlY2tzIGFnYWlu
c3QgdGhlIERURCwgdW5saWtlIERPTSBvcGVyYXRpb25zIGxpa2UKKyAgICAvLyBhcHBlbmRDaGls
ZCgpLCBhbmQgcmV0dXJucyB0aGUgbmV3IGNvbnRhaW5lciBub2RlIGZvciBmdXR1cmUgaW5zZXJ0
aW9ucyBhcyB5b3UgcGFyc2UuCiAgICAgdmlydHVhbCBOb2RlSW1wbCAqYWRkQ2hpbGQoTm9kZUlt
cGwgKm5ld0NoaWxkKTsKICAgICAKICAgICAvLyBjYWxsZWQgYnkgdGhlIHBhcnNlciB3aGVuIHRo
aXMgZWxlbWVudCdzIGNsb3NlIHRhZyBpcyByZWFjaGVkLAogICAgIC8vIHNpZ25hbGxpbmcgdGhh
dCBhbGwgY2hpbGQgdGFncyBoYXZlIGJlZW4gcGFyc2VkIGFuZCBhZGRlZC4KICAgICAvLyBUaGlz
IGlzIG9ubHkgbmVlZGVkIGZvciA8YXBwbGV0PiBhbmQgPG9iamVjdD4gZWxlbWVudHMsIHdoaWNo
IGNhbid0IGxheSB0aGVtc2VsdmVzIG91dAogICAgIC8vIHVudGlsIHRoZXkga25vdyBhbGwgb2Yg
dGhlaXIgbmVzdGVkIDxwYXJhbT5zLiBbMzYwMzE5MSwgNDA0MDg0OF0KLSAgICB2aXJ0dWFsIHZv
aWQgY2xvc2VSZW5kZXJlcigpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBjbG9zZVJlbmRlcmVyKCkg
e30KKworICAgIHR5cGVkZWYgUV9VSU5UMzIgSWQ7IC8vIEZJWE1FOiBZYW5rIHRoaXMgb25jZSBh
dHRyaWJ1dGVzIGFyZSBhbHNvIHN3aXRjaGVkIG92ZXIuCiAKLSAgICB0eXBlZGVmIFFfVUlOVDMy
IElkOwotICAgIC8vIGlkKCkgaXMgdXNlZCB0byBlYXNpbHkgYW5kIGV4YWN0bHkgaWRlbnRpZnkg
YSBub2RlLiBJdAotICAgIC8vIGlzIG9wdGltaXplZCBmb3IgcXVpY2sgY29tcGFyaXNvbiBhbmQg
bG93IG1lbW9yeSBjb25zdW1wdGlvbi4KLSAgICAvLyBpdHMgdmFsdWUgZGVwZW5kcyBvbiB0aGUg
b3duZXIgZG9jdW1lbnQgb2YgdGhlIG5vZGUgYW5kIGlzCi0gICAgLy8gY2F0ZWdvcml6ZWQgaW4g
dGhlIGZvbGxvd2luZyB3YXk6Ci0gICAgLy8gMS4uSURfTEFTVF9UQUc6IHRoZSBub2RlIGluaGVy
aXRzIEhUTUxFbGVtZW50SW1wbCBhbmQgaXMKLSAgICAvLyAgICAgICAgICAgICAgICAgcGFydCBv
ZiB0aGUgSFRNTCBuYW1lc3BhY2UuCi0gICAgLy8gICAgICAgICAgICAgICAgIFRoZSBIVE1MIG5h
bWVzcGFjZSBpcyBlaXRoZXIgdGhlIGdsb2JhbAotICAgIC8vICAgICAgICAgICAgICAgICBvbmUg
KG5vIG5hbWVzcGFjZSkgb3IgdGhlIFhIVE1MIG5hbWVzcGFjZQotICAgIC8vICAgICAgICAgICAg
ICAgICBkZXBlbmRpbmcgb24gdGhlIG93bmVyIGRvY3VtZW50J3MgZG9jdHlwZQotICAgIC8vIElE
X0xBU1RfVEFHKzEuLjB4ZmZmZjogbm9uLUhUTUwgZWxlbWVudHMgaW4gdGhlIGdsb2JhbCBuYW1l
c3BhY2UKLSAgICAvLyBvdGhlcnMgICAgICAgbm9uLUhUTUwgZWxlbWVudHMgaW4gYSBuYW1lc3Bh
Y2UuCi0gICAgLy8gICAgICAgICAgICAgICAgIHRoZSB1cHBlciAxNiBiaXQgaWRlbnRpZnkgdGhl
IG5hbWVzcGFjZQotICAgIC8vICAgICAgICAgICAgICAgICB0aGUgbG93ZXIgMTYgYml0IGlkZW50
aWZ5IHRoZSBsb2NhbCBwYXJ0IG9mIHRoZQotICAgIC8vICAgICAgICAgICAgICAgICBxdWFsaWZp
ZWQgZWxlbWVudCBuYW1lLgotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdCB7IHJldHVybiAwOyB9
OwotI2lmIEFQUExFX0NIQU5HRVMKLSAgICBJZCBpZGVudGlmaWVyKCkgY29uc3Q7Ci0jZW5kaWYK
ICAgICBlbnVtIE1vdXNlRXZlbnRUeXBlIHsKICAgICAgICAgTW91c2VQcmVzcywKICAgICAgICAg
TW91c2VSZWxlYXNlLApAQCAtMjc4LDggKzI2Myw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJv
b2wgaXNLZXlib2FyZEZvY3VzYWJsZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBpc01vdXNl
Rm9jdXNhYmxlKCkgY29uc3Q7CiAgICAgCi0gICAgdmlydHVhbCBib29sIGlzSW5saW5lKCkgY29u
c3Q7Ci0gICAgCiAgICAgdmlydHVhbCBib29sIGlzQ29udGVudEVkaXRhYmxlKCkgY29uc3Q7CiAg
ICAgdmlydHVhbCBRUmVjdCBnZXRSZWN0KCkgY29uc3Q7CiAKQEAgLTM2OSwxMSArMzUyLDE1IEBA
IHB1YmxpYzoKICAgICBraHRtbDo6UmVuZGVyT2JqZWN0ICpwcmV2aW91c1JlbmRlcmVyKCk7CiAg
ICAgdm9pZCBzZXRSZW5kZXJlcihraHRtbDo6UmVuZGVyT2JqZWN0KiByZW5kZXJlcikgeyBtX3Jl
bmRlciA9IHJlbmRlcmVyOyB9CiAgICAgCi0gICAgdm9pZCBjaGVja1NldFByZWZpeChjb25zdCBE
T01TdHJpbmcgJl9wcmVmaXgsIGludCAmZXhjZXB0aW9uY29kZSk7Ci0gICAgdm9pZCBjaGVja0Fk
ZENoaWxkKE5vZGVJbXBsICpuZXdDaGlsZCwgaW50ICZleGNlcHRpb25jb2RlKTsKKyAgICB2b2lk
IGNoZWNrU2V0UHJlZml4KGNvbnN0IEF0b21pY1N0cmluZyAmX3ByZWZpeCwgaW50ICZleGNlcHRp
b25jb2RlKTsKICAgICBib29sIGlzQW5jZXN0b3IoY29uc3QgTm9kZUltcGwgKikgY29uc3Q7Ci0g
ICAgdmlydHVhbCBib29sIGNoaWxkQWxsb3dlZCggTm9kZUltcGwgKm5ld0NoaWxkICk7CiAKKwkv
LyBUaGVzZSB0d28gbWV0aG9kcyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiAgVGhlIGZvcm1lciBp
cyB1c2VkIHRvIGRvIHN0cmljdCBlcnJvci1jaGVja2luZworCS8vIHdoZW4gYWRkaW5nIGNoaWxk
cmVuIHZpYSB0aGUgcHVibGljIERPTSBBUEkgKGUuZy4sIGFwcGVuZENoaWxkKCkpLiAgVGhlIGxh
dHRlciBpcyBjYWxsZWQgb25seSB3aGVuIHBhcnNpbmcsIAorCS8vIHRvIHNhbml0eS1jaGVjayBh
Z2FpbnN0IHRoZSBEVEQgZm9yIGVycm9yIHJlY292ZXJ5LgorCXZvaWQgY2hlY2tBZGRDaGlsZChO
b2RlSW1wbCAqbmV3Q2hpbGQsIGludCAmZXhjZXB0aW9uY29kZSk7ICAgIC8vIEVycm9yLWNoZWNr
aW5nIHdoZW4gYWRkaW5nIHZpYSB0aGUgRE9NIEFQSQorCXZpcnR1YWwgYm9vbCBjaGlsZEFsbG93
ZWQoTm9kZUltcGwgKm5ld0NoaWxkKTsJCQkJICAgLy8gRXJyb3ItY2hlY2tpbmcgZHVyaW5nIHBh
cnNpbmcgdGhhdCBjaGVja3MgdGhlIERURAorCQogICAgIHZpcnR1YWwgbG9uZyBtYXhPZmZzZXQo
KSBjb25zdDsKICAgICBsb25nIG1heERlZXBPZmZzZXQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGxv
bmcgY2FyZXRNaW5PZmZzZXQoKSBjb25zdDsKQEAgLTQ4MSw3ICs0NjgsNyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBub3RpZnlOb2RlTGlzdHNTdWJ0cmVlTW9kaWZpZWQoKTsKICAgICB2b2lkIG5vdGlm
eUxvY2FsTm9kZUxpc3RzU3VidHJlZU1vZGlmaWVkKCk7CiAKLSAgICBTaGFyZWRQdHI8Tm9kZUxp
c3RJbXBsPiBnZXRFbGVtZW50c0J5VGFnTmFtZShjb25zdCBET01TdHJpbmcgJm5hbWUpIHsgcmV0
dXJuIGdldEVsZW1lbnRzQnlUYWdOYW1lTlMoRE9NU3RyaW5nKCksIG5hbWUpOyB9CisgICAgU2hh
cmVkUHRyPE5vZGVMaXN0SW1wbD4gZ2V0RWxlbWVudHNCeVRhZ05hbWUoY29uc3QgRE9NU3RyaW5n
ICZuYW1lKSB7IHJldHVybiBnZXRFbGVtZW50c0J5VGFnTmFtZU5TKCIqIiwgbmFtZSk7IH0KICAg
ICBTaGFyZWRQdHI8Tm9kZUxpc3RJbXBsPiBnZXRFbGVtZW50c0J5VGFnTmFtZU5TKGNvbnN0IERP
TVN0cmluZyAmbmFtZXNwYWNlVVJJLCBjb25zdCBET01TdHJpbmcgJmxvY2FsTmFtZSk7CiAKIHBy
aXZhdGU6IC8vIG1lbWJlcnMKQEAgLTYxOCwzMCArNjA1LDYgQEAgcHJvdGVjdGVkOgogICAgIHZp
cnR1YWwgYm9vbCBub2RlTWF0Y2hlcyggTm9kZUltcGwgKnRlc3ROb2RlICkgY29uc3Q7CiB9Owog
Ci0KLS8qKgotICogTm9kZUxpc3Qgd2hpY2ggbGlzdHMgYWxsIE5vZGVzIGluIGEgZG9jdW1lbnQg
d2l0aCBhIGdpdmVuIHRhZyBuYW1lCi0gKi8KLWNsYXNzIFRhZ05vZGVMaXN0SW1wbCA6IHB1Ymxp
YyBOb2RlTGlzdEltcGwKLXsKLXB1YmxpYzoKLSAgICBUYWdOb2RlTGlzdEltcGwoIE5vZGVJbXBs
ICpuLCBOb2RlSW1wbDo6SWQgdGFnSWQsIE5vZGVJbXBsOjpJZCB0YWdJZE1hc2sgKTsKLQotICAg
IC8vIERPTSBtZXRob2RzIG92ZXJyaWRkZW4gZnJvbSAgcGFyZW50IGNsYXNzZXMKLQotICAgIHZp
cnR1YWwgdW5zaWduZWQgbG9uZyBsZW5ndGgoKSBjb25zdDsKLSAgICB2aXJ0dWFsIE5vZGVJbXBs
ICppdGVtICggdW5zaWduZWQgbG9uZyBpbmRleCApIGNvbnN0OwotCi0gICAgLy8gT3RoZXIgbWV0
aG9kcyAobm90IHBhcnQgb2YgRE9NKQotCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCBib29sIG5v
ZGVNYXRjaGVzKCBOb2RlSW1wbCAqdGVzdE5vZGUgKSBjb25zdDsKLQotICAgIE5vZGVJbXBsOjpJ
ZCBtX2lkOwotICAgIE5vZGVJbXBsOjpJZCBtX2lkTWFzazsKLX07Ci0KLQogLyoqCiAgKiBOb2Rl
TGlzdCB3aGljaCBsaXN0cyBhbGwgTm9kZXMgaW4gYSBFbGVtZW50IHdpdGggYSBnaXZlbiAibmFt
ZT0iIHRhZwogICovCkluZGV4OiBraHRtbC94bWwvZG9tX3Bvc2l0aW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC94bWwvZG9tX3Bvc2l0aW9uLmNwcCx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS43MQpkaWZmIC11IC1wIC1yMS43MSBraHRtbC94bWwvZG9t
X3Bvc2l0aW9uLmNwcAotLS0ga2h0bWwveG1sL2RvbV9wb3NpdGlvbi5jcHAJMjEgSnVuIDIwMDUg
MTg6MTE6MTAgLTAwMDAJMS43MQorKysga2h0bWwveG1sL2RvbV9wb3NpdGlvbi5jcHAJOCBKdWwg
MjAwNSAwNTo1MDo0OSAtMDAwMApAQCAtMzUsNyArMzUsNiBAQAogI2luY2x1ZGUgImRvbTJfcmFu
Z2VpbXBsLmgiCiAjaW5jbHVkZSAiZG9tMl92aWV3c2ltcGwuaCIKICNpbmNsdWRlICJoZWxwZXIu
aCIKLSNpbmNsdWRlICJodG1sdGFncy5oIgogI2luY2x1ZGUgInRleHRfYWZmaW5pdHkuaCIKICNp
bmNsdWRlICJ2aXNpYmxlX3Bvc2l0aW9uLmgiCiAjaW5jbHVkZSAidmlzaWJsZV91bml0cy5oIgpA
QCAtNDUsNiArNDQsNyBAQAogI2luY2x1ZGUgInJlbmRlcmluZy9yZW5kZXJfc3R5bGUuaCIKICNp
bmNsdWRlICJyZW5kZXJpbmcvcmVuZGVyX3RleHQuaCIKICNpbmNsdWRlICJlZGl0aW5nL3Zpc2li
bGVfdGV4dC5oIgorI2luY2x1ZGUgImh0bWxuYW1lcy5oIgogCiAjaWYgQVBQTEVfQ0hBTkdFUwog
I2luY2x1ZGUgIktXUUFzc2VydGlvbnMuaCIKQEAgLTQ0MCw3ICs0NDAsNyBAQCBQb3NpdGlvbiBQ
b3NpdGlvbjo6ZG93bnN0cmVhbSgpIGNvbnN0CiAKICAgICAgICAgLy8gc3RvcCBiZWZvcmUgZ29p
bmcgYWJvdmUgdGhlIGJvZHksIHVwIGludG8gdGhlIGhlYWQKICAgICAgICAgLy8gcmV0dXJuIHRo
ZSBsYXN0IHZpc2libGUgc3RyZWFtZXIgcG9zaXRpb24KLSAgICAgICAgaWYgKGN1cnJlbnROb2Rl
LT5pZCgpID09IElEX0JPRFkgJiYgY3VycmVudE9mZnNldCA+PSAoaW50KSBjdXJyZW50Tm9kZS0+
Y2hpbGROb2RlQ291bnQoKSkKKyAgICAgICAgaWYgKGN1cnJlbnROb2RlLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6Ym9keSgpKSAmJiBjdXJyZW50T2Zmc2V0ID49IChpbnQpIGN1cnJlbnROb2RlLT5j
aGlsZE5vZGVDb3VudCgpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAg
ICAgLy8gbGltaXQgdHJhdmVyc2FsIHRvIGJsb2NrIG9yIHRhYmxlIGVuY2xvc2luZyB0aGUgb3Jp
Z2luYWwgZWxlbWVudApAQCAtNjk0LDcgKzY5NCw3IEBAIGJvb2wgUG9zaXRpb246OnJlbmRlcnNJ
bkRpZmZlcmVudFBvc2l0aW8KICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIGlmIChu
b2RlKCkgPT0gcG9zLm5vZGUoKSkgewotICAgICAgICBpZiAobm9kZSgpLT5pZCgpID09IElEX0JS
KQorICAgICAgICBpZiAobm9kZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YnIoKSkpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgaWYgKG9mZnNldCgpID09IHBvcy5vZmZz
ZXQoKSkKQEAgLTcwNiwxMCArNzA2LDEwIEBAIGJvb2wgUG9zaXRpb246OnJlbmRlcnNJbkRpZmZl
cmVudFBvc2l0aW8KICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBpZiAobm9kZSgpLT5pZCgp
ID09IElEX0JSICYmIHBvcy5pblJlbmRlcmVkQ29udGVudCgpKQorICAgIGlmIChub2RlKCktPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjpicigpKSAmJiBwb3MuaW5SZW5kZXJlZENvbnRlbnQoKSkKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgCi0gICAgaWYgKHBvcy5ub2RlKCkt
PmlkKCkgPT0gSURfQlIgJiYgaW5SZW5kZXJlZENvbnRlbnQoKSkKKyAgICBpZiAocG9zLm5vZGUo
KS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJyKCkpICYmIGluUmVuZGVyZWRDb250ZW50KCkpCiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgIAogICAgIGlmIChub2RlKCktPmVu
Y2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQoKSAhPSBwb3Mubm9kZSgpLT5lbmNsb3NpbmdCbG9ja0Zs
b3dFbGVtZW50KCkpCkBAIC03NjQsNyArNzY0LDcgQEAgUG9zaXRpb24gUG9zaXRpb246OmxlYWRp
bmdXaGl0ZXNwYWNlUG9zaQogICAgIGlmIChpc051bGwoKSkKICAgICAgICAgcmV0dXJuIFBvc2l0
aW9uKCk7CiAgICAgCi0gICAgaWYgKHVwc3RyZWFtKCkubm9kZSgpLT5pZCgpID09IElEX0JSKQor
ICAgIGlmICh1cHN0cmVhbSgpLm5vZGUoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJyKCkpKQog
ICAgICAgICByZXR1cm4gUG9zaXRpb24oKTsKIAogICAgIFBvc2l0aW9uIHByZXYgPSBwcmV2aW91
c0NoYXJhY3RlclBvc2l0aW9uKGFmZmluaXR5KTsKQEAgLTc5NCw3ICs3OTQsNyBAQCBQb3NpdGlv
biBQb3NpdGlvbjo6dHJhaWxpbmdXaGl0ZXNwYWNlUG9zCiAgICAgICAgIH0KICAgICB9CiAKLSAg
ICBpZiAoZG93bnN0cmVhbSgpLm5vZGUoKS0+aWQoKSA9PSBJRF9CUikKKyAgICBpZiAoZG93bnN0
cmVhbSgpLm5vZGUoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJyKCkpKQogICAgICAgICByZXR1
cm4gUG9zaXRpb24oKTsKIAogICAgIFBvc2l0aW9uIG5leHQgPSBuZXh0Q2hhcmFjdGVyUG9zaXRp
b24oYWZmaW5pdHkpOwpJbmRleDoga2h0bWwveG1sL2RvbV9xbmFtZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwveG1sL2RvbV9xbmFtZS5jcHAsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuMgpkaWZmIC11IC1wIC1yMS4yIGtodG1sL3htbC9kb21fcW5hbWUu
Y3BwCi0tLSBraHRtbC94bWwvZG9tX3FuYW1lLmNwcAkxNiBKdW4gMjAwNSAyMTowNjo0NiAtMDAw
MAkxLjIKKysrIGtodG1sL3htbC9kb21fcW5hbWUuY3BwCTggSnVsIDIwMDUgMDU6NTA6NDkgLTAw
MDAKQEAgLTE5LDQ4ICsxOSw5OCBAQAogICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCiAg
Ki8KIAotI2luY2x1ZGUgPHFwdHJkaWN0Lmg+CiAjaW5jbHVkZSAiZG9tX3FuYW1lLmgiCisjaW5j
bHVkZSAibWlzYy9oYXNoc2V0LmgiCisKK3VzaW5nIGtodG1sOjpIYXNoU2V0OwogCiBuYW1lc3Bh
Y2UgRE9NIHsKIAotc3RhdGljIFFQdHJEaWN0PFFQdHJEaWN0PFFQdHJEaWN0PFF1YWxpZmllZE5h
bWU6OlF1YWxpZmllZE5hbWVJbXBsPiA+ID4qIGdOYW1lQ2FjaGUgPSAwOworc3RydWN0IFF1YWxp
ZmllZE5hbWVDb21wb25lbnRzIHsKKyAgICBET01TdHJpbmdJbXBsICptX3ByZWZpeDsKKyAgICBE
T01TdHJpbmdJbXBsICptX2xvY2FsTmFtZTsKKyAgICBET01TdHJpbmdJbXBsICptX25hbWVzcGFj
ZTsKK307CiAKLVF1YWxpZmllZE5hbWU6OlF1YWxpZmllZE5hbWUoY29uc3QgQXRvbWljU3RyaW5n
JiBwLCBjb25zdCBBdG9taWNTdHJpbmcmIGwsIGNvbnN0IEF0b21pY1N0cmluZyYgbikKKy8vIEdv
bGRlbiByYXRpbyAtIGFyYml0cmFyeSBzdGFydCB2YWx1ZSB0byBhdm9pZCBtYXBwaW5nIGFsbCAw
J3MgdG8gYWxsIDAncworc3RhdGljIGNvbnN0IHVuc2lnbmVkIFBISSA9IDB4OWUzNzc5YjlVOwor
ICAgIAoraW5saW5lIHVuc2lnbmVkIGhhc2hDb21wb25lbnRzKGNvbnN0IFF1YWxpZmllZE5hbWVD
b21wb25lbnRzJiBidWYpCiB7Ci0gICAgLy8gT2J0YWluIGFuIGFwcHJvcHJpYXRlIGlubmVyIGZy
b20gb3VyIGRpY3Rpb25hcnkuCi0gICAgUVB0ckRpY3Q8UVB0ckRpY3Q8UXVhbGlmaWVkTmFtZUlt
cGw+ID4qIG5hbWVzcGFjZURpY3QgPSAwOwotICAgIFFQdHJEaWN0PFF1YWxpZmllZE5hbWVJbXBs
PiogcHJlZml4RGljdCA9IDA7Ci0gICAgaWYgKGdOYW1lQ2FjaGUpIHsKLSAgICAgICAgbmFtZXNw
YWNlRGljdCA9IGdOYW1lQ2FjaGUtPmZpbmQoKHZvaWQqKShuLmltcGxlbWVudGF0aW9uKCkpKTsK
LSAgICAgICAgaWYgKG5hbWVzcGFjZURpY3QpIHsKLSAgICAgICAgICAgIHByZWZpeERpY3QgPSBu
YW1lc3BhY2VEaWN0LT5maW5kKCh2b2lkKilwLmltcGxlbWVudGF0aW9uKCkpOwotICAgICAgICAg
ICAgaWYgKHByZWZpeERpY3QpCi0gICAgICAgICAgICAgICAgbV9pbXBsID0gcHJlZml4RGljdC0+
ZmluZCgodm9pZCopbC5pbXBsZW1lbnRhdGlvbigpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IGlmICghbV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbCA9IG5ldyBRdWFsaWZpZWROYW1lSW1wbChw
LCBsLCBuKTsKLQotICAgICAgICAvLyBQdXQgdGhlIG9iamVjdCBpbnRvIHRoZSBoYXNoLgotICAg
ICAgICBpZiAoIWdOYW1lQ2FjaGUpCi0gICAgICAgICAgICBnTmFtZUNhY2hlID0gbmV3IFFQdHJE
aWN0PFFQdHJEaWN0PFFQdHJEaWN0PFF1YWxpZmllZE5hbWVJbXBsPiA+ID47Ci0gICAgICAgIAot
ICAgICAgICBpZiAoIW5hbWVzcGFjZURpY3QpIHsKLSAgICAgICAgICAgIG5hbWVzcGFjZURpY3Qg
PSBuZXcgUVB0ckRpY3Q8UVB0ckRpY3Q8UXVhbGlmaWVkTmFtZUltcGw+ID47Ci0gICAgICAgICAg
ICBuYW1lc3BhY2VEaWN0LT5zZXRBdXRvRGVsZXRlKHRydWUpOwotICAgICAgICAgICAgZ05hbWVD
YWNoZS0+aW5zZXJ0KCh2b2lkKiluLmltcGxlbWVudGF0aW9uKCksIG5hbWVzcGFjZURpY3QpOwot
ICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoIXByZWZpeERpY3QpIHsKLSAgICAgICAg
ICAgIHByZWZpeERpY3QgPSBuZXcgUVB0ckRpY3Q8UXVhbGlmaWVkTmFtZUltcGw+OwotICAgICAg
ICAgICAgbmFtZXNwYWNlRGljdC0+aW5zZXJ0KCh2b2lkKilwLmltcGxlbWVudGF0aW9uKCksIHBy
ZWZpeERpY3QpOwotICAgICAgICB9CisgICAgdW5zaWduZWQgbCA9IHNpemVvZihRdWFsaWZpZWRO
YW1lQ29tcG9uZW50cykgLyBzaXplb2YodWludDE2X3QpOworICAgIGNvbnN0IHVpbnQxNl90ICpz
ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MTZfdCo+KCZidWYpOworICAgIHVpbnQzMl90
IGhhc2ggPSBQSEk7CisgICAgdWludDMyX3QgdG1wOwogICAgICAgICAKLSAgICAgICAgcHJlZml4
RGljdC0+aW5zZXJ0KCh2b2lkKilsLmltcGxlbWVudGF0aW9uKCksIG1faW1wbCk7CisgICAgaW50
IHJlbSA9IGwgJiAxOworICAgIGwgPj49IDE7CisgICAgICAgIAorICAgIC8vIE1haW4gbG9vcAor
ICAgIGZvciAoOyBsID4gMDsgbC0tKSB7CisgICAgICAgIGhhc2ggKz0gc1swXTsKKyAgICAgICAg
dG1wID0gKHNbMV0gPDwgMTEpIF4gaGFzaDsKKyAgICAgICAgaGFzaCA9IChoYXNoIDw8IDE2KSBe
IHRtcDsKKyAgICAgICAgcyArPSAyOworICAgICAgICBoYXNoICs9IGhhc2ggPj4gMTE7CiAgICAg
fQogICAgIAorICAgIC8vIEhhbmRsZSBlbmQgY2FzZQorICAgIGlmIChyZW0pIHsKKyAgICAgICAg
aGFzaCArPSBzWzBdOworICAgICAgICBoYXNoIF49IGhhc2ggPDwgMTE7CisgICAgICAgIGhhc2gg
Kz0gaGFzaCA+PiAxNzsKKyAgICB9CisgICAgICAgIAorICAgIC8vIEZvcmNlICJhdmFsYW5jaGlu
ZyIgb2YgZmluYWwgMTI3IGJpdHMKKyAgICBoYXNoIF49IGhhc2ggPDwgMzsKKyAgICBoYXNoICs9
IGhhc2ggPj4gNTsKKyAgICBoYXNoIF49IGhhc2ggPDwgMjsKKyAgICBoYXNoICs9IGhhc2ggPj4g
MTU7CisgICAgaGFzaCBePSBoYXNoIDw8IDEwOworICAgICAgICAKKyAgICAvLyB0aGlzIGF2b2lk
cyBldmVyIHJldHVybmluZyBhIGhhc2ggY29kZSBvZiAwLCBzaW5jZSB0aGF0IGlzIHVzZWQgdG8K
KyAgICAvLyBzaWduYWwgImhhc2ggbm90IGNvbXB1dGVkIHlldCIsIHVzaW5nIGEgdmFsdWUgdGhh
dCBpcyBsaWtlbHkgdG8gYmUKKyAgICAvLyBlZmZlY3RpdmVseSB0aGUgc2FtZSBhcyAwIHdoZW4g
dGhlIGxvdyBiaXRzIGFyZSBtYXNrZWQKKyAgICBpZiAoaGFzaCA9PSAwKQorICAgICAgICBoYXNo
ID0gMHg4MDAwMDAwMDsKKyAgICAgICAgCisgICAgcmV0dXJuIGhhc2g7Cit9CisKK3N0cnVjdCBR
TmFtZUhhc2ggeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFF1YWxpZmllZE5hbWU6
OlF1YWxpZmllZE5hbWVJbXBsICpuYW1lKSB7ICAgIAorICAgICAgICBRdWFsaWZpZWROYW1lQ29t
cG9uZW50cyBjb21wb25lbnRzID0geyBuYW1lLT5tX3ByZWZpeC5pbXBsZW1lbnRhdGlvbigpLCAK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZS0+bV9s
b2NhbE5hbWUuaW1wbGVtZW50YXRpb24oKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5hbWUtPm1fbmFtZXNwYWNlLmltcGxlbWVudGF0aW9uKCkgfTsK
KyAgICAgICAgcmV0dXJuIGhhc2hDb21wb25lbnRzKGNvbXBvbmVudHMpOworICAgIH0KKyAgICBz
dGF0aWMgYm9vbCBlcXVhbChjb25zdCBRdWFsaWZpZWROYW1lOjpRdWFsaWZpZWROYW1lSW1wbCAq
YSwgY29uc3QgUXVhbGlmaWVkTmFtZTo6UXVhbGlmaWVkTmFtZUltcGwgKmIpIHsgcmV0dXJuIGEg
PT0gYjsgfQorfTsKKwordHlwZWRlZiBIYXNoU2V0PFF1YWxpZmllZE5hbWU6OlF1YWxpZmllZE5h
bWVJbXBsKiwgUU5hbWVIYXNoPiBRTmFtZVNldDsKKworc3RhdGljIFFOYW1lU2V0ICpnTmFtZUNh
Y2hlOworCitpbmxpbmUgYm9vbCBlcXVhbENvbXBvbmVudHMoUXVhbGlmaWVkTmFtZTo6UXVhbGlm
aWVkTmFtZUltcGwqIGNvbnN0JiBuYW1lLCBjb25zdCBRdWFsaWZpZWROYW1lQ29tcG9uZW50cyAm
Y29tcG9uZW50cykKK3sKKyAgICByZXR1cm4gY29tcG9uZW50cy5tX2xvY2FsTmFtZSA9PSBuYW1l
LT5tX2xvY2FsTmFtZS5pbXBsZW1lbnRhdGlvbigpICYmCisgICAgICAgICAgIGNvbXBvbmVudHMu
bV9uYW1lc3BhY2UgPT0gbmFtZS0+bV9uYW1lc3BhY2UuaW1wbGVtZW50YXRpb24oKSAmJgorICAg
ICAgICAgICBjb21wb25lbnRzLm1fcHJlZml4ID09IG5hbWUtPm1fcHJlZml4LmltcGxlbWVudGF0
aW9uKCk7Cit9CisKK2lubGluZSBRdWFsaWZpZWROYW1lOjpRdWFsaWZpZWROYW1lSW1wbCAqY29u
dmVydENvbXBvbmVudHMoY29uc3QgUXVhbGlmaWVkTmFtZUNvbXBvbmVudHMmIGNvbXBvbmVudHMs
IHVuc2lnbmVkIGhhc2gpCit7CisgICAgcmV0dXJuIG5ldyBRdWFsaWZpZWROYW1lOjpRdWFsaWZp
ZWROYW1lSW1wbChjb21wb25lbnRzLm1fcHJlZml4LCBjb21wb25lbnRzLm1fbG9jYWxOYW1lLCBj
b21wb25lbnRzLm1fbmFtZXNwYWNlKTsKK30KKworCitRdWFsaWZpZWROYW1lOjpRdWFsaWZpZWRO
YW1lKGNvbnN0IEF0b21pY1N0cmluZyYgcCwgY29uc3QgQXRvbWljU3RyaW5nJiBsLCBjb25zdCBB
dG9taWNTdHJpbmcmIG4pCisgICAgOiBtX2ltcGwoMCkKK3sKKyAgICBpZiAoIWdOYW1lQ2FjaGUp
CisgICAgICAgIGdOYW1lQ2FjaGUgPSBuZXcgUU5hbWVTZXQ7CisgICAgUXVhbGlmaWVkTmFtZUNv
bXBvbmVudHMgY29tcG9uZW50cyA9IHsgcC5pbXBsZW1lbnRhdGlvbigpLCBsLmltcGxlbWVudGF0
aW9uKCksIG4uaW1wbGVtZW50YXRpb24oKSB9OworICAgIG1faW1wbCA9ICpnTmFtZUNhY2hlLT5p
bnNlcnQ8UXVhbGlmaWVkTmFtZUNvbXBvbmVudHMsIGhhc2hDb21wb25lbnRzLCBlcXVhbENvbXBv
bmVudHMsIGNvbnZlcnRDb21wb25lbnRzPihjb21wb25lbnRzKS5maXJzdDsgICAgCiAgICAgcmVm
KCk7CiB9CiAKQEAgLTg4LDMxICsxMzgsMTYgQEAgY29uc3QgUXVhbGlmaWVkTmFtZSYgUXVhbGlm
aWVkTmFtZTo6b3BlcgogCiB2b2lkIFF1YWxpZmllZE5hbWU6OmRlcmVmKCkKIHsKLSAgICBpZiAo
bV9pbXBsLT5yZWZDb3VudCgpID09IDEpIHsKLSAgICAgICAgLy8gQmVmb3JlIGRlY3JlbWVudGlu
ZyB0aGUgcmVmIHRvIDAsIHJlbW92ZSBvdXJzZWx2ZXMgZnJvbSB0aGUgaGFzaCB0YWJsZS4KLSAg
ICAgICAgUVB0ckRpY3Q8UVB0ckRpY3Q8UXVhbGlmaWVkTmFtZUltcGw+ID4qIG5hbWVzcGFjZURp
Y3QgPSAwOwotICAgICAgICBRUHRyRGljdDxRdWFsaWZpZWROYW1lSW1wbD4qIHByZWZpeERpY3Qg
PSAwOwotICAgICAgICBpZiAoZ05hbWVDYWNoZSkgewotICAgICAgICAgICAgbmFtZXNwYWNlRGlj
dCA9IGdOYW1lQ2FjaGUtPmZpbmQoKHZvaWQqKShuYW1lc3BhY2VVUkkoKS5pbXBsZW1lbnRhdGlv
bigpKSk7Ci0gICAgICAgICAgICBpZiAobmFtZXNwYWNlRGljdCkgewotICAgICAgICAgICAgICAg
IHByZWZpeERpY3QgPSBuYW1lc3BhY2VEaWN0LT5maW5kKCh2b2lkKilwcmVmaXgoKS5pbXBsZW1l
bnRhdGlvbigpKTsKLSAgICAgICAgICAgICAgICBpZiAocHJlZml4RGljdCkKLSAgICAgICAgICAg
ICAgICAgICAgcHJlZml4RGljdC0+cmVtb3ZlKCh2b2lkKilsb2NhbE5hbWUoKS5pbXBsZW1lbnRh
dGlvbigpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICAKKyAgICBpZiAo
bV9pbXBsLT5oYXNPbmVSZWYoKSkKKyAgICAgICAgZ05hbWVDYWNoZS0+cmVtb3ZlKG1faW1wbCk7
CisgICAgICAgIAogICAgIG1faW1wbC0+ZGVyZWYoKTsKIH0KIAotYm9vbCBvcGVyYXRvcj09KGNv
bnN0IEF0b21pY1N0cmluZyYgYSwgY29uc3QgUXVhbGlmaWVkTmFtZSYgcSkKLXsgCi0gICAgcmV0
dXJuIGEgPT0gcS5sb2NhbE5hbWUoKTsKLX0KLQotYm9vbCBvcGVyYXRvcj09KGNvbnN0IFF1YWxp
ZmllZE5hbWUmIHEsIGNvbnN0IEF0b21pY1N0cmluZyYgYSkKK3ZvaWQgUXVhbGlmaWVkTmFtZTo6
c2V0UHJlZml4KGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4KQogewotICAgIHJldHVybiBhID09
IHEubG9jYWxOYW1lKCk7CisgICAgUXVhbGlmaWVkTmFtZSBvdGhlcihwcmVmaXgsIGxvY2FsTmFt
ZSgpLCBuYW1lc3BhY2VVUkkoKSk7CisgICAgKnRoaXMgPSBvdGhlcjsKIH0KIAogfQpJbmRleDog
a2h0bWwveG1sL2RvbV9xbmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJD
b3JlL2todG1sL3htbC9kb21fcW5hbWUuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yCmRpZmYg
LXUgLXAgLXIxLjIga2h0bWwveG1sL2RvbV9xbmFtZS5oCi0tLSBraHRtbC94bWwvZG9tX3FuYW1l
LmgJMTYgSnVuIDIwMDUgMjE6MDY6NDYgLTAwMDAJMS4yCisrKyBraHRtbC94bWwvZG9tX3FuYW1l
LmgJOCBKdWwgMjAwNSAwNTo1MDo0OSAtMDAwMApAQCAtMzIsOSArMzIsNiBAQCBwdWJsaWM6CiAg
ICAgcHVibGljOgogICAgICAgICBRdWFsaWZpZWROYW1lSW1wbChjb25zdCBBdG9taWNTdHJpbmcm
IHAsIGNvbnN0IEF0b21pY1N0cmluZyYgbCwgY29uc3QgQXRvbWljU3RyaW5nJiBuKSA6bV9wcmVm
aXgocCksIG1fbG9jYWxOYW1lKGwpLCBtX25hbWVzcGFjZShuKSB7fQogCi0gICAgICAgIGZyaWVu
ZCBjbGFzcyBRdWFsaWZpZWROYW1lOwotCi0gICAgcHJpdmF0ZToKICAgICAgICAgQXRvbWljU3Ry
aW5nIG1fcHJlZml4OwogICAgICAgICBBdG9taWNTdHJpbmcgbV9sb2NhbE5hbWU7CiAgICAgICAg
IEF0b21pY1N0cmluZyBtX25hbWVzcGFjZTsKQEAgLTU0LDYgKzUxLDkgQEAgcHVibGljOgogCiAg
ICAgYm9vbCBtYXRjaGVzKGNvbnN0IFF1YWxpZmllZE5hbWUmIG90aGVyKSBjb25zdCB7IHJldHVy
biBtX2ltcGwgPT0gb3RoZXIubV9pbXBsIHx8IChsb2NhbE5hbWUoKSA9PSBvdGhlci5sb2NhbE5h
bWUoKSAmJiBuYW1lc3BhY2VVUkkoKSA9PSBvdGhlci5uYW1lc3BhY2VVUkkoKSk7IH0KIAorICAg
IGJvb2wgaGFzUHJlZml4KCkgY29uc3QgeyByZXR1cm4gbV9pbXBsLT5tX3ByZWZpeCAhPSBudWxs
QXRvbTsgfQorICAgIHZvaWQgc2V0UHJlZml4KGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4KTsK
KwogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4KCkgY29uc3QgeyByZXR1cm4gbV9pbXBs
LT5tX3ByZWZpeDsgfQogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lKCkgY29uc3Qg
eyByZXR1cm4gbV9pbXBsLT5tX2xvY2FsTmFtZTsgfQogICAgIGNvbnN0IEF0b21pY1N0cmluZyYg
bmFtZXNwYWNlVVJJKCkgY29uc3QgeyByZXR1cm4gbV9pbXBsLT5tX25hbWVzcGFjZTsgfQpAQCAt
NjYsMTEgKzY2LDEwIEBAIHByaXZhdGU6CiAgICAgUXVhbGlmaWVkTmFtZUltcGwqIG1faW1wbDsK
IH07CiAKLWJvb2wgb3BlcmF0b3I9PShjb25zdCBBdG9taWNTdHJpbmcmIGEsIGNvbnN0IFF1YWxp
ZmllZE5hbWUmIHEpOworaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBdG9taWNTdHJpbmcm
IGEsIGNvbnN0IFF1YWxpZmllZE5hbWUmIHEpIHsgcmV0dXJuIGEgPT0gcS5sb2NhbE5hbWUoKTsg
fQogaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBBdG9taWNTdHJpbmcmIGEsIGNvbnN0IFF1
YWxpZmllZE5hbWUmIHEpIHsgcmV0dXJuIGEgIT0gcS5sb2NhbE5hbWUoKTsgfQotYm9vbCBvcGVy
YXRvcj09KGNvbnN0IFF1YWxpZmllZE5hbWUmIHEsIGNvbnN0IEF0b21pY1N0cmluZyYgYSk7Citp
bmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFF1YWxpZmllZE5hbWUmIHEsIGNvbnN0IEF0b21p
Y1N0cmluZyYgYSkgeyByZXR1cm4gYSA9PSBxLmxvY2FsTmFtZSgpOyB9CiBpbmxpbmUgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IFF1YWxpZmllZE5hbWUmIHEsIGNvbnN0IEF0b21pY1N0cmluZyYgYSkg
eyByZXR1cm4gYSAhPSBxLmxvY2FsTmFtZSgpOyB9CiAKLQogfQogI2VuZGlmCkluZGV4OiBraHRt
bC94bWwvZG9tX3RleHRpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2Vi
Q29yZS9raHRtbC94bWwvZG9tX3RleHRpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4y
MwpkaWZmIC11IC1wIC1yMS4yMyBraHRtbC94bWwvZG9tX3RleHRpbXBsLmNwcAotLS0ga2h0bWwv
eG1sL2RvbV90ZXh0aW1wbC5jcHAJMTkgT2N0IDIwMDQgMjM6MDQ6MjkgLTAwMDAJMS4yMworKysg
a2h0bWwveG1sL2RvbV90ZXh0aW1wbC5jcHAJOCBKdWwgMjAwNSAwNTo1MDo1MCAtMDAwMApAQCAt
MzA0LDkgKzMwNCwxNCBAQCBDb21tZW50SW1wbDo6fkNvbW1lbnRJbXBsKCkKIHsKIH0KIAorY29u
c3QgQXRvbWljU3RyaW5nJiBDb21tZW50SW1wbDo6bG9jYWxOYW1lKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gY29tbWVudEF0b207Cit9CisKIERPTVN0cmluZyBDb21tZW50SW1wbDo6bm9kZU5hbWUo
KSBjb25zdAogewotICAgIHJldHVybiAiI2NvbW1lbnQiOworICAgIHJldHVybiBjb21tZW50QXRv
bS5zdHJpbmcoKTsKIH0KIAogdW5zaWduZWQgc2hvcnQgQ29tbWVudEltcGw6Om5vZGVUeXBlKCkg
Y29uc3QKQEAgLTMxOSwxMSArMzI0LDYgQEAgTm9kZUltcGwgKkNvbW1lbnRJbXBsOjpjbG9uZU5v
ZGUoYm9vbCAvKgogICAgIHJldHVybiBnZXREb2N1bWVudCgpLT5jcmVhdGVDb21tZW50KCBzdHIg
KTsKIH0KIAotTm9kZUltcGw6OklkIENvbW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIElEX0NPTU1FTlQ7Ci19Ci0KIC8vIERPTSBTZWN0aW9uIDEuMS4xCiBib29sIENvbW1lbnRJ
bXBsOjpjaGlsZFR5cGVBbGxvd2VkKCB1bnNpZ25lZCBzaG9ydCAvKnR5cGUqLyApCiB7CkBAIC0z
OTQsOSArMzk0LDE0IEBAIFRleHRJbXBsICpUZXh0SW1wbDo6c3BsaXRUZXh0KCBjb25zdCB1bnMK
ICAgICByZXR1cm4gbmV3VGV4dDsKIH0KIAorY29uc3QgQXRvbWljU3RyaW5nJiBUZXh0SW1wbDo6
bG9jYWxOYW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gdGV4dEF0b207Cit9CisKIERPTVN0cmlu
ZyBUZXh0SW1wbDo6bm9kZU5hbWUoKSBjb25zdAogewotICByZXR1cm4gIiN0ZXh0IjsKKyAgICBy
ZXR1cm4gdGV4dEF0b20uc3RyaW5nKCk7CiB9CiAKIHVuc2lnbmVkIHNob3J0IFRleHRJbXBsOjpu
b2RlVHlwZSgpIGNvbnN0CkBAIC00NjIsMTEgKzQ2Nyw2IEBAIHZvaWQgVGV4dEltcGw6OmF0dGFj
aCgpCiAgICAgQ2hhcmFjdGVyRGF0YUltcGw6OmF0dGFjaCgpOwogfQogCi1Ob2RlSW1wbDo6SWQg
VGV4dEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfVEVYVDsKLX0KLQogdm9pZCBU
ZXh0SW1wbDo6cmVjYWxjU3R5bGUoIFN0eWxlQ2hhbmdlIGNoYW5nZSApCiB7CiAvLyAgICAgIHFE
ZWJ1ZygidGV4dEltcGw6OnJlY2FsY1N0eWxlIik7CkluZGV4OiBraHRtbC94bWwvZG9tX3RleHRp
bXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwveG1sL2Rv
bV90ZXh0aW1wbC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE2CmRpZmYgLXUgLXAgLXIxLjE2
IGtodG1sL3htbC9kb21fdGV4dGltcGwuaAotLS0ga2h0bWwveG1sL2RvbV90ZXh0aW1wbC5oCTEw
IE1heSAyMDA1IDIxOjU5OjE1IC0wMDAwCTEuMTYKKysrIGtodG1sL3htbC9kb21fdGV4dGltcGwu
aAk4IEp1bCAyMDA1IDA1OjUwOjUwIC0wMDAwCkBAIC05NSwxMyArOTUsMTMgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgfkNvbW1lbnRJbXBsKCk7CiAKICAgICAvLyBET00gbWV0aG9kcyBvdmVycmlk
ZGVuIGZyb20gIHBhcmVudCBjbGFzc2VzCisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5h
bWUoKSBjb25zdDsKICAgICB2aXJ0dWFsIERPTVN0cmluZyBub2RlTmFtZSgpIGNvbnN0OwogICAg
IHZpcnR1YWwgdW5zaWduZWQgc2hvcnQgbm9kZVR5cGUoKSBjb25zdDsKICAgICB2aXJ0dWFsIE5v
ZGVJbXBsICpjbG9uZU5vZGUoYm9vbCBkZWVwKTsKIAogICAgIC8vIE90aGVyIG1ldGhvZHMgKG5v
dCBwYXJ0IG9mIERPTSkKLQotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IGJvb2wgaXNDb21tZW50Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFs
IGJvb2wgY2hpbGRUeXBlQWxsb3dlZCggdW5zaWduZWQgc2hvcnQgdHlwZSApOwogCiAgICAgdmly
dHVhbCBET01TdHJpbmcgdG9TdHJpbmcoKSBjb25zdDsKQEAgLTEyMSw2ICsxMjEsNyBAQCBwdWJs
aWM6CiAgICAgVGV4dEltcGwgKnNwbGl0VGV4dCAoIGNvbnN0IHVuc2lnbmVkIGxvbmcgb2Zmc2V0
LCBpbnQgJmV4Y2VwdGlvbmNvZGUgKTsKIAogICAgIC8vIERPTSBtZXRob2RzIG92ZXJyaWRkZW4g
ZnJvbSAgcGFyZW50IGNsYXNzZXMKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSgp
IGNvbnN0OwogICAgIHZpcnR1YWwgRE9NU3RyaW5nIG5vZGVOYW1lKCkgY29uc3Q7CiAgICAgdmly
dHVhbCB1bnNpZ25lZCBzaG9ydCBub2RlVHlwZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgTm9kZUlt
cGwgKmNsb25lTm9kZShib29sIGRlZXApOwpAQCAtMTI4LDcgKzEyOSw2IEBAIHB1YmxpYzoKICAg
ICAvLyBPdGhlciBtZXRob2RzIChub3QgcGFydCBvZiBET00pCiAKICAgICB2aXJ0dWFsIGJvb2wg
aXNUZXh0Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIElkIGlkKCkg
Y29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaCgpOwogICAgIHZpcnR1YWwgYm9vbCByZW5k
ZXJlcklzTmVlZGVkKGtodG1sOjpSZW5kZXJTdHlsZSAqKTsKICAgICB2aXJ0dWFsIGtodG1sOjpS
ZW5kZXJPYmplY3QgKmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hICosIGtodG1sOjpSZW5kZXJT
dHlsZSAqKTsKSW5kZXg6IGtodG1sL3htbC94bWxfdG9rZW5pemVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC94bWwveG1sX3Rva2VuaXplci5jcHAsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuMzEKZGlmZiAtdSAtcCAtcjEuMzEga2h0bWwveG1sL3htbF90
b2tlbml6ZXIuY3BwCi0tLSBraHRtbC94bWwveG1sX3Rva2VuaXplci5jcHAJNCBNYXkgMjAwNSAy
MToxMToyMyAtMDAwMAkxLjMxCisrKyBraHRtbC94bWwveG1sX3Rva2VuaXplci5jcHAJOCBKdWwg
MjAwNSAwNTo1MDo1MSAtMDAwMApAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgInhtbC9kb21f
eG1saW1wbC5oIgogI2luY2x1ZGUgImh0bWwvaHRtbF9oZWFkaW1wbC5oIgogI2luY2x1ZGUgImh0
bWwvaHRtbF90YWJsZWltcGwuaCIKLSNpbmNsdWRlICJtaXNjL2h0bWx0YWdzLmgiCisjaW5jbHVk
ZSAiaHRtbG5hbWVzLmgiCiAjaW5jbHVkZSAibWlzYy9odG1sYXR0cnMuaCIKICNpbmNsdWRlICJt
aXNjL2xvYWRlci5oIgogCkBAIC00NCw2ICs0NCw3IEBAIHVzaW5nIERPTTo6RG9jdW1lbnRJbXBs
OwogdXNpbmcgRE9NOjpEb2N1bWVudFB0cjsKIHVzaW5nIERPTTo6RE9NU3RyaW5nOwogdXNpbmcg
RE9NOjpFbGVtZW50SW1wbDsKK3VzaW5nIERPTTo6SFRNTE5hbWVzOwogdXNpbmcgRE9NOjpIVE1M
U2NyaXB0RWxlbWVudEltcGw7CiB1c2luZyBET006OkhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1w
bDsKIHVzaW5nIERPTTo6Tm9kZTsKQEAgLTMyMiwxOCArMzIzLDE4IEBAIHZvaWQgWE1MVG9rZW5p
emVyOjpzdGFydEVsZW1lbnQoY29uc3QgeG0KICAgICAvLyBGSVhNRTogVGhpcyBoYWNrIGVuc3Vy
ZXMgaW1wbGljaXQgdGFibGUgYm9kaWVzIGdldCBjb25zdHJ1Y3RlZCBpbiBYSFRNTCBhbmQgWE1M
IGZpbGVzLgogICAgIC8vIFdlIHdhbnQgdG8gY29uc29saWRhdGUgdGhpcyB3aXRoIHRoZSBIVE1M
IHBhcnNlciBhbmQgSFRNTCBET00gY29kZSBhdCBzb21lIHBvaW50LgogICAgIC8vIEZvciBub3cs
IGl0J3MgdG9vIHJpc2t5IHRvIHJpcCB0aGF0IGNvZGUgdXAuCi0gICAgaWYgKG1fY3VycmVudE5v
ZGUtPmlkKCkgPT0gSURfVEFCTEUgJiYKLSAgICAgICAgbmV3RWxlbWVudC0+aWQoKSA9PSBJRF9U
UiAmJgorICAgIGlmIChtX2N1cnJlbnROb2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGFibGUo
KSkgJiYKKyAgICAgICAgbmV3RWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRyKCkpICYm
CiAgICAgICAgIG1fY3VycmVudE5vZGUtPmlzSFRNTEVsZW1lbnQoKSAmJiBuZXdFbGVtZW50LT5p
c0hUTUxFbGVtZW50KCkpIHsKICAgICAgICAgTm9kZUltcGwqIGltcGxpY2l0VEJvZHkgPQotICAg
ICAgICAgICBuZXcgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsKCBtX2RvYywgSURfVEJPRFks
IHRydWUgLyogaW1wbGljaXQgKi8gKTsKKyAgICAgICAgICAgbmV3IEhUTUxUYWJsZVNlY3Rpb25F
bGVtZW50SW1wbChIVE1MTmFtZXM6OnRib2R5KCksIG1fZG9jLCB0cnVlIC8qIGltcGxpY2l0ICov
KTsKICAgICAgICAgbV9jdXJyZW50Tm9kZS0+YWRkQ2hpbGQoaW1wbGljaXRUQm9keSk7CiAgICAg
ICAgIGlmIChtX3ZpZXcgJiYgIWltcGxpY2l0VEJvZHktPmF0dGFjaGVkKCkpCiAgICAgICAgICAg
ICBpbXBsaWNpdFRCb2R5LT5hdHRhY2goKTsKICAgICAgICAgbV9jdXJyZW50Tm9kZSA9IGltcGxp
Y2l0VEJvZHk7CiAgICAgfQogCi0gICAgaWYgKG5ld0VsZW1lbnQtPmlkKCkgPT0gSURfU0NSSVBU
KQorICAgIGlmIChuZXdFbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c2NyaXB0KCkpKQog
ICAgICAgICBzdGF0aWNfY2FzdDxIVE1MU2NyaXB0RWxlbWVudEltcGwgKj4obmV3RWxlbWVudCkt
PnNldENyZWF0ZWRCeVBhcnNlcih0cnVlKTsKIAogICAgIGlmIChtX2N1cnJlbnROb2RlLT5hZGRD
aGlsZChuZXdFbGVtZW50KSkgewpAQCAtNjUwLDcgKzY1MSw3IEBAIHZvaWQgWE1MVG9rZW5pemVy
OjphZGRTY3JpcHRzKE5vZGVJbXBsICoKICAgICAvLyBSZWN1cnNpdmVseSBnbyB0aHJvdWdoIHRo
ZSBlbnRpcmUgZG9jdW1lbnQgdHJlZSwgbG9va2luZyBmb3IgaHRtbCA8c2NyaXB0PiB0YWdzLiBG
b3IgZWFjaCBvZiB0aGVzZQogICAgIC8vIHRoYXQgaXMgZm91bmQsIGFkZCBpdCB0byB0aGUgbV9z
Y3JpcHRzIGxpc3QgZnJvbSB3aGljaCB0aGV5IHdpbGwgYmUgZXhlY3V0ZWQKIAotICAgIGlmIChu
LT5pZCgpID09IElEX1NDUklQVCkgeworICAgIGlmIChuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
c2NyaXB0KCkpKSB7CiAgICAgICAgIG1fc2NyaXB0cy5hcHBlbmQoc3RhdGljX2Nhc3Q8SFRNTFNj
cmlwdEVsZW1lbnRJbXBsKj4obikpOwogICAgIH0KIApJbmRleDoga3dxL0RPTS5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3EvRE9NLm1tLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjM2CmRpZmYgLXUgLXAgLXIxLjM2IGt3cS9ET00ubW0KLS0tIGt3cS9ET00ubW0J
MTkgTWF5IDIwMDUgMTg6MzI6MjcgLTAwMDAJMS4zNgorKysga3dxL0RPTS5tbQk4IEp1bCAyMDA1
IDA1OjUwOjUyIC0wMDAwCkBAIC00NCw3ICs0NCw2IEBACiAjaW1wb3J0ICJkb21fdGV4dGltcGwu
aCIKICNpbXBvcnQgImRvbV94bWxpbXBsLmgiCiAjaW1wb3J0ICJodG1sX2VsZW1lbnRpbXBsLmgi
Ci0jaW1wb3J0ICJodG1sdGFncy5oIgogCiAjaW1wb3J0ICJraHRtbF9wYXJ0LmgiCiAKQEAgLTcy
LDYgKzcxLDcgQEAgdXNpbmcgRE9NOjpFbGVtZW50SW1wbDsKIHVzaW5nIERPTTo6RW50aXR5SW1w
bDsKIHVzaW5nIERPTTo6RmlsdGVyTm9kZTsKIHVzaW5nIERPTTo6SFRNTEVsZW1lbnRJbXBsOwor
dXNpbmcgRE9NOjpIVE1MTmFtZXM7CiB1c2luZyBET006Ok5hbWVkTm9kZU1hcEltcGw7CiB1c2lu
ZyBET006Ok5vZGU7CiB1c2luZyBET006Ok5vZGVGaWx0ZXI7CkBAIC0zMzgsNyArMzM4LDggQEAg
dXNpbmcga2h0bWw6OlNoYXJlZFB0cjsKICAgICBBU1NFUlQocHJlZml4KTsKIAogICAgIGludCBl
eGNlcHRpb25Db2RlID0gMDsKLSAgICBbc2VsZiBfbm9kZUltcGxdLT5zZXRQcmVmaXgocHJlZml4
LCBleGNlcHRpb25Db2RlKTsKKyAgICBET01TdHJpbmcgcHJlZml4U3RyKHByZWZpeCk7CisgICAg
W3NlbGYgX25vZGVJbXBsXS0+c2V0UHJlZml4KHByZWZpeFN0ci5pbXBsZW1lbnRhdGlvbigpLCBl
eGNlcHRpb25Db2RlKTsKICAgICByYWlzZU9uRE9NRXJyb3IoZXhjZXB0aW9uQ29kZSk7CiB9CiAK
QEAgLTM5OSwxNTQgKzQwMCwxMjMgQEAgdXNpbmcga2h0bWw6OlNoYXJlZFB0cjsKICAgICBzd2l0
Y2ggKGltcGwtPm5vZGVUeXBlKCkpIHsKICAgICAgICAgY2FzZSBOb2RlOjpFTEVNRU5UX05PREU6
CiAgICAgICAgICAgICBpZiAoaW1wbC0+aXNIVE1MRWxlbWVudCgpKSB7Ci0gICAgICAgICAgICAg
ICAgLy8gRklYTUU6IFRoZXJlIGFyZSBubyBpZGVudGlmaWVycyBmb3IgSFRNTEhlYWRpbmdFbGVt
ZW50LCBIVE1MTW9kRWxlbWVudCwgCi0gICAgICAgICAgICAgICAgLy8gSFRNTFRhYmxlQ2FwdGlv
bkVsZW1lbnQsIEhUTUxUYWJsZUNvbEVsZW1lbnQsIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50Lgot
ICAgICAgICAgICAgICAgIC8vIEZpbmQgb3RoZXIgd2F5cyB0byBpZGVudGlmeSB0aGVtLgotICAg
ICAgICAgICAgICAgIHN3aXRjaCAoaW1wbC0+aWRlbnRpZmllcigpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGNhc2UgSURfSFRNTDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFz
cyA9IFtET01IVE1MSHRtbEVsZW1lbnQgY2xhc3NdOwotICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfSEVBRDoKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MSGVhZEVsZW1lbnQgY2xhc3NdOwotICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURf
TElOSzoKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MTGlu
a0VsZW1lbnQgY2xhc3NdOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgICAgIGNhc2UgSURfVElUTEU6Ci0gICAgICAgICAgICAgICAgICAgICAgICB3cmFw
cGVyQ2xhc3MgPSBbRE9NSFRNTFRpdGxlRWxlbWVudCBjbGFzc107Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9NRVRBOgotICAgICAg
ICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxNZXRhRWxlbWVudCBjbGFz
c107Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAg
Y2FzZSBJRF9CQVNFOgotICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RP
TUhUTUxCYXNlRWxlbWVudCBjbGFzc107Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9JU0lOREVYOgotICAgICAgICAgICAgICAgICAg
ICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxJc0luZGV4RWxlbWVudCBjbGFzc107Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9T
VFlMRToKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MU3R5
bGVFbGVtZW50IGNsYXNzXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgICAgICBjYXNlIElEX0JPRFk6Ci0gICAgICAgICAgICAgICAgICAgICAgICB3cmFw
cGVyQ2xhc3MgPSBbRE9NSFRNTEJvZHlFbGVtZW50IGNsYXNzXTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0ZPUk06Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTEZvcm1FbGVtZW50IGNsYXNz
XTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBj
YXNlIElEX1NFTEVDVDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtE
T01IVE1MU2VsZWN0RWxlbWVudCBjbGFzc107Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9PUFRHUk9VUDoKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MT3B0R3JvdXBFbGVtZW50IGNsYXNzXTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNl
IElEX09QVElPTjoKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01I
VE1MT3B0aW9uRWxlbWVudCBjbGFzc107Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9JTlBVVDoKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MSW5wdXRFbGVtZW50IGNsYXNzXTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX1RFWFRB
UkVBOgotICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxUZXh0
QXJlYUVsZW1lbnQgY2xhc3NdOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgICAgIGNhc2UgSURfQlVUVE9OOgotICAgICAgICAgICAgICAgICAgICAgICAg
d3JhcHBlckNsYXNzID0gW0RPTUhUTUxCdXR0b25FbGVtZW50IGNsYXNzXTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0xBQkVMOgot
ICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxMYWJlbEVsZW1l
bnQgY2xhc3NdOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7ICAKLSAgICAgICAgICAg
ICAgICAgICAgY2FzZSBJRF9GSUVMRFNFVDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBw
ZXJDbGFzcyA9IFtET01IVE1MRmllbGRTZXRFbGVtZW50IGNsYXNzXTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOyAgICAgIAotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0xFR0VO
RDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MTGVnZW5k
RWxlbWVudCBjbGFzc107Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICAgICAgY2FzZSBJRF9VTDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJD
bGFzcyA9IFtET01IVE1MVUxpc3RFbGVtZW50IGNsYXNzXTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX09MOgotICAgICAgICAgICAg
ICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxPTGlzdEVsZW1lbnQgY2xhc3NdOwot
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2Ug
SURfREw6Ci0gICAgICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTERM
aXN0RWxlbWVudCBjbGFzc107Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICAgICAgY2FzZSBJRF9ESVI6Ci0gICAgICAgICAgICAgICAgICAgICAgICB3cmFw
cGVyQ2xhc3MgPSBbRE9NSFRNTERpcmVjdG9yeUVsZW1lbnQgY2xhc3NdOwotICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfTUVOVToKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MTWVudUVsZW1lbnQg
Y2xhc3NdOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ICAgIGNhc2UgSURfTEk6Ci0gICAgICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBb
RE9NSFRNTExJRWxlbWVudCBjbGFzc107Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9ESVY6Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTERpdkVsZW1lbnQgY2xhc3NdOwotICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfUDoKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MUGFyYWdyYXBoRWxlbWVu
dCBjbGFzc107Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICAgICAgY2FzZSBJRF9ROgotICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0g
W0RPTUhUTUxRdW90ZUVsZW1lbnQgY2xhc3NdOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfUFJFOgotICAgICAgICAgICAgICAgICAg
ICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxQcmVFbGVtZW50IGNsYXNzXTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0JSOgot
ICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxCUkVsZW1lbnQg
Y2xhc3NdOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ICAgIGNhc2UgSURfQkFTRUZPTlQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xh
c3MgPSBbRE9NSFRNTEZvbnRFbGVtZW50IGNsYXNzXTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0ZPTlQ6Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTEZvbnRFbGVtZW50IGNsYXNzXTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIElE
X0hSOgotICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxIUkVs
ZW1lbnQgY2xhc3NdOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgICAgIGNhc2UgSURfQToKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFz
cyA9IFtET01IVE1MQW5jaG9yRWxlbWVudCBjbGFzc107Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9JTUc6Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTEltYWdlRWxlbWVudCBjbGFzc107Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJ
RF9PQkpFQ1Q6Ci0gICAgICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRN
TE9iamVjdEVsZW1lbnQgY2xhc3NdOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgICAgIGNhc2UgSURfUEFSQU06Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTFBhcmFtRWxlbWVudCBjbGFzc107Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9BUFBMRVQ6
Ci0gICAgICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTEFwcGxldEVs
ZW1lbnQgY2xhc3NdOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgICAgIGNhc2UgSURfTUFQOgotICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNs
YXNzID0gW0RPTUhUTUxNYXBFbGVtZW50IGNsYXNzXTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0FSRUE6Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTEFyZWFFbGVtZW50IGNsYXNzXTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIElE
X1NDUklQVDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1M
U2NyaXB0RWxlbWVudCBjbGFzc107Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICAgICAgY2FzZSBJRF9UQUJMRToKLSAgICAgICAgICAgICAgICAgICAgICAg
IHdyYXBwZXJDbGFzcyA9IFtET01IVE1MVGFibGVFbGVtZW50IGNsYXNzXTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX1REOgotICAg
ICAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxUYWJsZUNlbGxFbGVt
ZW50IGNsYXNzXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgICAgICBjYXNlIElEX1RSOgotICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNz
ID0gW0RPTUhUTUxUYWJsZVJvd0VsZW1lbnQgY2xhc3NdOwotICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfRlJBTUVTRVQ6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTEZyYW1lU2V0RWxlbWVudCBj
bGFzc107Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAg
ICAgY2FzZSBJRF9GUkFNRToKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9
IFtET01IVE1MRnJhbWVFbGVtZW50IGNsYXNzXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0lGUkFNRToKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MSUZyYW1lRWxlbWVudCBjbGFzc107Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MRWxlbWVu
dCBjbGFzc107Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBS
ZWZsZWN0IG1hcnF1ZWUgb25jZSB0aGUgQVBJIGhhcyBiZWVuIGRldGVybWluZWQuCisgICAgICAg
ICAgICAgICAgLy8gRklYTUU6IFdlIGNvdWxkIG1ha2UgdGhlIEhUTUwgY2xhc3NlcyBoYW5kIGJh
Y2sgdGhlaXIgY2xhc3MgbmFtZXMgYW5kIHRoZW4gdXNlIHRoYXQgdG8gbWFrZQorICAgICAgICAg
ICAgICAgIC8vIHRoZSBhcHByb3ByaWF0ZSBPYmotQyBjbGFzcyBmcm9tIHRoZSBzdHJpbmcuCisg
ICAgICAgICAgICAgICAgSFRNTEVsZW1lbnRJbXBsKiBodG1sRWx0ID0gc3RhdGljX2Nhc3Q8SFRN
TEVsZW1lbnRJbXBsKj4oaW1wbCk7CisgICAgICAgICAgICAgICAgaWYgKGh0bWxFbHQtPmhhc0xv
Y2FsTmFtZShIVE1MTmFtZXM6Omh0bWwoKSkpCisgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJD
bGFzcyA9IFtET01IVE1MSHRtbEVsZW1lbnQgY2xhc3NdOworICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKGh0bWxFbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmhlYWQoKSkpCisgICAgICAgICAg
ICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MSGVhZEVsZW1lbnQgY2xhc3NdOworICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKGh0bWxFbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Omxp
bmsoKSkpCisgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MTGlua0Vs
ZW1lbnQgY2xhc3NdOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGh0bWxFbHQtPmhhc0xvY2Fs
TmFtZShIVE1MTmFtZXM6OnRpdGxlKCkpKQorICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xh
c3MgPSBbRE9NSFRNTFRpdGxlRWxlbWVudCBjbGFzc107CisgICAgICAgICAgICAgICAgZWxzZSBp
ZiAoaHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6bWV0YSgpKSkKKyAgICAgICAgICAg
ICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxNZXRhRWxlbWVudCBjbGFzc107CisgICAg
ICAgICAgICAgICAgZWxzZSBpZiAoaHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6YmFz
ZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxCYXNlRWxl
bWVudCBjbGFzc107CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaHRtbEVsdC0+aGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6aXNpbmRleCgpKSkKKyAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNs
YXNzID0gW0RPTUhUTUxJc0luZGV4RWxlbWVudCBjbGFzc107CisgICAgICAgICAgICAgICAgZWxz
ZSBpZiAoaHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6c3R5bGUoKSkpCisgICAgICAg
ICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MU3R5bGVFbGVtZW50IGNsYXNzXTsK
KyAgICAgICAgICAgICAgICBlbHNlIGlmIChodG1sRWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVz
Ojpib2R5KCkpKQorICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTEJv
ZHlFbGVtZW50IGNsYXNzXTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChodG1sRWx0LT5oYXNM
b2NhbE5hbWUoSFRNTE5hbWVzOjpmb3JtKCkpKQorICAgICAgICAgICAgICAgICAgICB3cmFwcGVy
Q2xhc3MgPSBbRE9NSFRNTEZvcm1FbGVtZW50IGNsYXNzXTsKKyAgICAgICAgICAgICAgICBlbHNl
IGlmIChodG1sRWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpzZWxlY3QoKSkpCisgICAgICAg
ICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MU2VsZWN0RWxlbWVudCBjbGFzc107
CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1l
czo6b3B0Z3JvdXAoKSkpCisgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01I
VE1MT3B0R3JvdXBFbGVtZW50IGNsYXNzXTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChodG1s
RWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvcHRpb24oKSkpCisgICAgICAgICAgICAgICAg
ICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MT3B0aW9uRWxlbWVudCBjbGFzc107CisgICAgICAg
ICAgICAgICAgZWxzZSBpZiAoaHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6aW5wdXQo
KSkpCisgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MSW5wdXRFbGVt
ZW50IGNsYXNzXTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChodG1sRWx0LT5oYXNMb2NhbE5h
bWUoSFRNTE5hbWVzOjp0ZXh0YXJlYSgpKSkKKyAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNs
YXNzID0gW0RPTUhUTUxUZXh0QXJlYUVsZW1lbnQgY2xhc3NdOworICAgICAgICAgICAgICAgIGVs
c2UgaWYgKGh0bWxFbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmJ1dHRvbigpKSkKKyAgICAg
ICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxCdXR0b25FbGVtZW50IGNsYXNz
XTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChodG1sRWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5h
bWVzOjpsYWJlbCgpKSkKKyAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhU
TUxMYWJlbEVsZW1lbnQgY2xhc3NdOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGh0bWxFbHQt
Pmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmZpZWxkc2V0KCkpKQorICAgICAgICAgICAgICAgICAg
ICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTEZpZWxkU2V0RWxlbWVudCBjbGFzc107CisgICAgICAg
ICAgICAgICAgZWxzZSBpZiAoaHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6bGVnZW5k
KCkpKQorICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTExlZ2VuZEVs
ZW1lbnQgY2xhc3NdOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGh0bWxFbHQtPmhhc0xvY2Fs
TmFtZShIVE1MTmFtZXM6OnVsKCkpKQorICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3Mg
PSBbRE9NSFRNTFVMaXN0RWxlbWVudCBjbGFzc107CisgICAgICAgICAgICAgICAgZWxzZSBpZiAo
aHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b2woKSkpICAgICAgICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxPTGlzdEVs
ZW1lbnQgY2xhc3NdOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGh0bWxFbHQtPmhhc0xvY2Fs
TmFtZShIVE1MTmFtZXM6OmRsKCkpKQorICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3Mg
PSBbRE9NSFRNTERMaXN0RWxlbWVudCBjbGFzc107CisgICAgICAgICAgICAgICAgZWxzZSBpZiAo
aHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6ZGlyKCkpKQorICAgICAgICAgICAgICAg
ICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTERpcmVjdG9yeUVsZW1lbnQgY2xhc3NdOworICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKGh0bWxFbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om1l
bnUoKSkpCisgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MTWVudUVs
ZW1lbnQgY2xhc3NdOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGh0bWxFbHQtPmhhc0xvY2Fs
TmFtZShIVE1MTmFtZXM6OmxpKCkpKQorICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3Mg
PSBbRE9NSFRNTExJRWxlbWVudCBjbGFzc107CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaHRt
bEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6ZGl2KCkpKQorICAgICAgICAgICAgICAgICAg
ICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTERpdkVsZW1lbnQgY2xhc3NdOworICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKGh0bWxFbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnAoKSkpCisgICAg
ICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MUGFyYWdyYXBoRWxlbWVudCBj
bGFzc107CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhU
TUxOYW1lczo6aDEoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICBodG1sRWx0LT5oYXNM
b2NhbE5hbWUoSFRNTE5hbWVzOjpoMigpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgIGh0
bWxFbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmgzKCkpIHx8CisgICAgICAgICAgICAgICAg
ICAgICAgICAgaHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6aDQoKSkgfHwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICBodG1sRWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpoNSgp
KSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWxFbHQtPmhhc0xvY2FsTmFtZShIVE1M
TmFtZXM6Omg2KCkpKQorICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRN
TEhlYWRpbmdFbGVtZW50IGNsYXNzXTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChodG1sRWx0
LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpxKCkpKQorICAgICAgICAgICAgICAgICAgICB3cmFw
cGVyQ2xhc3MgPSBbRE9NSFRNTFF1b3RlRWxlbWVudCBjbGFzc107CisgICAgICAgICAgICAgICAg
ZWxzZSBpZiAoaHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6cHJlKCkpKQorICAgICAg
ICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTFByZUVsZW1lbnQgY2xhc3NdOwor
ICAgICAgICAgICAgICAgIGVsc2UgaWYgKGh0bWxFbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6
OmJyKCkpKQorICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTEJSRWxl
bWVudCBjbGFzc107CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaHRtbEVsdC0+aGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6YmFzZWZvbnQoKSkpCisgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJD
bGFzcyA9IFtET01IVE1MQmFzZUZvbnRFbGVtZW50IGNsYXNzXTsKKyAgICAgICAgICAgICAgICBl
bHNlIGlmIChodG1sRWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpmb250KCkpKQorICAgICAg
ICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTEZvbnRFbGVtZW50IGNsYXNzXTsK
KyAgICAgICAgICAgICAgICBlbHNlIGlmIChodG1sRWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVz
OjpocigpKSkKKyAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxIUkVs
ZW1lbnQgY2xhc3NdOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGh0bWxFbHQtPmhhc0xvY2Fs
TmFtZShIVE1MTmFtZXM6OmEoKSkpCisgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9
IFtET01IVE1MQW5jaG9yRWxlbWVudCBjbGFzc107CisgICAgICAgICAgICAgICAgZWxzZSBpZiAo
aHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6aW1nKCkpIHx8CisgICAgICAgICAgICAg
ICAgICAgICAgICAgaHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6Y2FudmFzKCkpKQor
ICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTEltYWdlRWxlbWVudCBj
bGFzc107CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhU
TUxOYW1lczo6b2JqZWN0KCkpKQorICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBb
RE9NSFRNTE9iamVjdEVsZW1lbnQgY2xhc3NdOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGh0
bWxFbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnBhcmFtKCkpKQorICAgICAgICAgICAgICAg
ICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTFBhcmFtRWxlbWVudCBjbGFzc107CisgICAgICAg
ICAgICAgICAgZWxzZSBpZiAoaHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6YXBwbGV0
KCkpKQorICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTEFwcGxldEVs
ZW1lbnQgY2xhc3NdOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGh0bWxFbHQtPmhhc0xvY2Fs
TmFtZShIVE1MTmFtZXM6Om1hcCgpKSkKKyAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNz
ID0gW0RPTUhUTUxNYXBFbGVtZW50IGNsYXNzXTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmICho
dG1sRWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjphcmVhKCkpKQorICAgICAgICAgICAgICAg
ICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTEFyZWFFbGVtZW50IGNsYXNzXTsKKyAgICAgICAg
ICAgICAgICBlbHNlIGlmIChodG1sRWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpzY3JpcHQo
KSkpCisgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MU2NyaXB0RWxl
bWVudCBjbGFzc107CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaHRtbEVsdC0+aGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6dGFibGUoKSkpCisgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFz
cyA9IFtET01IVE1MVGFibGVFbGVtZW50IGNsYXNzXTsKKyAgICAgICAgICAgICAgICBlbHNlIGlm
IChodG1sRWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0aGVhZCgpKSB8fAorICAgICAgICAg
ICAgICAgICAgICAgICAgIGh0bWxFbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnRib2R5KCkp
IHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxO
YW1lczo6dGZvb3QoKSkpCisgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01I
VE1MVGFibGVTZWN0aW9uRWxlbWVudCBjbGFzc107CisgICAgICAgICAgICAgICAgZWxzZSBpZiAo
aHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dGQoKSkpCisgICAgICAgICAgICAgICAg
ICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MVGFibGVDZWxsRWxlbWVudCBjbGFzc107CisgICAg
ICAgICAgICAgICAgZWxzZSBpZiAoaHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dHIo
KSkpCisgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MVGFibGVSb3dF
bGVtZW50IGNsYXNzXTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChodG1sRWx0LT5oYXNMb2Nh
bE5hbWUoSFRNTE5hbWVzOjpjb2woKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICBodG1s
RWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpjb2xncm91cCgpKSkKKyAgICAgICAgICAgICAg
ICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxUYWJsZUNvbEVsZW1lbnQgY2xhc3NdOworICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKGh0bWxFbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmNh
cHRpb24oKSkpCisgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MVGFi
bGVDYXB0aW9uRWxlbWVudCBjbGFzc107CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaHRtbEVs
dC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6ZnJhbWVzZXQoKSkpCisgICAgICAgICAgICAgICAg
ICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MRnJhbWVTZXRFbGVtZW50IGNsYXNzXTsKKyAgICAg
ICAgICAgICAgICBlbHNlIGlmIChodG1sRWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpmcmFt
ZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxGcmFtZUVs
ZW1lbnQgY2xhc3NdOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGh0bWxFbHQtPmhhc0xvY2Fs
TmFtZShIVE1MTmFtZXM6OmlmcmFtZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNs
YXNzID0gW0RPTUhUTUxJRnJhbWVFbGVtZW50IGNsYXNzXTsKKyAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MRWxlbWVudCBjbGFz
c107CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9
IFtET01FbGVtZW50IGNsYXNzXTsKICAgICAgICAgICAgIH0KQEAgLTEyNjgsNyArMTIzOCw3IEBA
IHVzaW5nIGtodG1sOjpTaGFyZWRQdHI7CiAKIC0gKE5TU3RyaW5nICopdGFnTmFtZQogewotICAg
IHJldHVybiBbc2VsZiBfZWxlbWVudEltcGxdLT50YWdOYW1lKCk7CisgICAgcmV0dXJuIFtzZWxm
IF9lbGVtZW50SW1wbF0tPm5vZGVOYW1lKCk7CiB9CiAKIC0gKERPTU5hbWVkTm9kZU1hcCAqKWF0
dHJpYnV0ZXMKSW5kZXg6IGt3cS9ET01IVE1MLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9XZWJDb3JlL2t3cS9ET01IVE1MLm1tLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE4CmRp
ZmYgLXUgLXAgLXIxLjE4IGt3cS9ET01IVE1MLm1tCi0tLSBrd3EvRE9NSFRNTC5tbQkxMyBNYXkg
MjAwNSAxNjo0ODo1MSAtMDAwMAkxLjE4CisrKyBrd3EvRE9NSFRNTC5tbQk4IEp1bCAyMDA1IDA1
OjUwOjU0IC0wMDAwCkBAIC03NCw3ICs3NCw2IEBAIHVzaW5nIERPTTo6SFRNTEZvcm1Db2xsZWN0
aW9uSW1wbDsKIHVzaW5nIERPTTo6SFRNTEZvcm1FbGVtZW50SW1wbDsKIHVzaW5nIERPTTo6SFRN
TEZyYW1lRWxlbWVudEltcGw7CiB1c2luZyBET006OkhUTUxGcmFtZVNldEVsZW1lbnRJbXBsOwot
dXNpbmcgRE9NOjpIVE1MR2VuZXJpY0VsZW1lbnRJbXBsOwogdXNpbmcgRE9NOjpIVE1MR2VuZXJp
Y0Zvcm1FbGVtZW50SW1wbDsKIHVzaW5nIERPTTo6SFRNTEhlYWRFbGVtZW50SW1wbDsKIHVzaW5n
IERPTTo6SFRNTEhlYWRpbmdFbGVtZW50SW1wbDsKQEAgLTE5MDUsOSArMTkwNCw5IEBAIHVzaW5n
IERPTTo6Tm9kZUltcGw7CiAKIEBpbXBsZW1lbnRhdGlvbiBET01IVE1MUXVvdGVFbGVtZW50CiAK
LS0gKEhUTUxHZW5lcmljRWxlbWVudEltcGwgKilfcXVvdGVFbGVtZW50SW1wbAorLSAoSFRNTEVs
ZW1lbnRJbXBsICopX3F1b3RlRWxlbWVudEltcGwKIHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
SFRNTEdlbmVyaWNFbGVtZW50SW1wbCAqPihET01fY2FzdDxOb2RlSW1wbCAqPihfaW50ZXJuYWwp
KTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KERPTV9jYXN0PE5v
ZGVJbXBsICo+KF9pbnRlcm5hbCkpOwogfQogCiAtIChOU1N0cmluZyAqKWNpdGUKSW5kZXg6IGt3
cS9LV1FBY2NPYmplY3QubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUv
a3dxL0tXUUFjY09iamVjdC5tbSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS42OApkaWZmIC11IC1w
IC1yMS42OCBrd3EvS1dRQWNjT2JqZWN0Lm1tCi0tLSBrd3EvS1dRQWNjT2JqZWN0Lm1tCTUgSnVu
IDIwMDUgMDc6MDY6NTIgLTAwMDAJMS42OAorKysga3dxL0tXUUFjY09iamVjdC5tbQk4IEp1bCAy
MDA1IDA1OjUwOjU1IC0wMDAwCkBAIC00OCw3ICs0OCw2IEBACiAjaW1wb3J0ICJkb20yX2V2ZW50
c2ltcGwuaCIKICNpbXBvcnQgImRvbTJfcmFuZ2UuaCIKICNpbXBvcnQgImh0bWxhdHRycy5oIgot
I2ltcG9ydCAiaHRtbHRhZ3MuaCIKICNpbXBvcnQgImtodG1sdmlldy5oIgogI2ltcG9ydCAia2h0
bWxfcGFydC5oIgogI2ltcG9ydCAicmVuZGVyX2NhbnZhcy5oIgpAQCAtNzcsNiArNzYsNyBAQCB1
c2luZyBET006OkhUTUxDb2xsZWN0aW9uSW1wbDsKIHVzaW5nIERPTTo6SFRNTEVsZW1lbnRJbXBs
OwogdXNpbmcgRE9NOjpIVE1MSW5wdXRFbGVtZW50SW1wbDsKIHVzaW5nIERPTTo6SFRNTE1hcEVs
ZW1lbnRJbXBsOwordXNpbmcgRE9NOjpIVE1MTmFtZXM7CiB1c2luZyBET006Ok5vZGU7CiB1c2lu
ZyBET006Ok5vZGVJbXBsOwogdXNpbmcgRE9NOjpQb3NpdGlvbjsKQEAgLTM2Niw3ICszNjYsNyBA
QCB1c2luZyBraHRtbDo6VmlzaWJsZVBvc2l0aW9uOwogICAgIH0KICAgICBpZiAobV9yZW5kZXJl
ci0+aXNMaXN0TWFya2VyKCkpCiAgICAgICAgIHJldHVybiBAIkFYTGlzdE1hcmtlciI7Ci0gICAg
aWYgKG1fcmVuZGVyZXItPmVsZW1lbnQoKSAmJiBtX3JlbmRlcmVyLT5lbGVtZW50KCktPmlkZW50
aWZpZXIoKSA9PSBJRF9CVVRUT04pCisgICAgaWYgKG1fcmVuZGVyZXItPmVsZW1lbnQoKSAmJiBt
X3JlbmRlcmVyLT5lbGVtZW50KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpidXR0b24oKSkpCiAg
ICAgICAgIHJldHVybiBOU0FjY2Vzc2liaWxpdHlCdXR0b25Sb2xlOwogICAgIGlmIChtX3JlbmRl
cmVyLT5pc1RleHQoKSkKICAgICAgICAgcmV0dXJuIE5TQWNjZXNzaWJpbGl0eVN0YXRpY1RleHRS
b2xlOwpAQCAtNTMyLDcgKzUzMiw3IEBAIHVzaW5nIGtodG1sOjpWaXNpYmxlUG9zaXRpb247CiAg
ICAgaWYgKCFtX3JlbmRlcmVyIHx8IG1fYXJlYUVsZW1lbnQgfHwgIW1fcmVuZGVyZXItPmVsZW1l
bnQoKSkKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAKLSAgICBpZiAobV9yZW5kZXJlci0+ZWxl
bWVudCgpLT5pc0hUTUxFbGVtZW50KCkgJiYgbV9yZW5kZXJlci0+ZWxlbWVudCgpLT5pZGVudGlm
aWVyKCkgPT0gSURfQlVUVE9OKQorICAgIGlmIChtX3JlbmRlcmVyLT5lbGVtZW50KCktPmlzSFRN
TEVsZW1lbnQoKSAmJiBtX3JlbmRlcmVyLT5lbGVtZW50KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjpidXR0b24oKSkpCiAgICAgICAgIHJldHVybiBbc2VsZiB0ZXh0VW5kZXJFbGVtZW50XTsKICAg
ICBpZiAobV9yZW5kZXJlci0+ZWxlbWVudCgpLT5pc0xpbmsoKSkKICAgICAgICAgcmV0dXJuIFtz
ZWxmIHRleHRVbmRlckVsZW1lbnRdOwpAQCAtNjIyLDcgKzYyMiw3IEBAIHN0YXRpYyBRUmVjdCBi
b3VuZGluZ0JveFJlY3QoUmVuZGVyT2JqZWMKICAgICByZXR1cm4gKCFtX3JlbmRlcmVyLT5pc0xp
c3RNYXJrZXIoKSAmJiAhbV9yZW5kZXJlci0+aXNDYW52YXMoKSAmJiAKICAgICAgICAgICAgICFt
X3JlbmRlcmVyLT5pc0ltYWdlKCkgJiYKICAgICAgICAgICAgICEobV9yZW5kZXJlci0+ZWxlbWVu
dCgpICYmIG1fcmVuZGVyZXItPmVsZW1lbnQoKS0+aXNIVE1MRWxlbWVudCgpICYmCi0gICAgICAg
ICAgICAgIG1fcmVuZGVyZXItPmVsZW1lbnQoKS0+aWRlbnRpZmllcigpID09IElEX0JVVFRPTikp
OworICAgICAgICAgICAgICBtX3JlbmRlcmVyLT5lbGVtZW50KCktPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjpidXR0b24oKSkpKTsKIH0KIAogLSAoTlNBcnJheSAqKWFjY2Vzc2liaWxpdHlBdHRyaWJ1
dGVOYW1lcwpJbmRleDoga3dxL0tXUURPTU5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IGt3
cS9LV1FET01Ob2RlLmNwcApkaWZmIC1OIGt3cS9LV1FET01Ob2RlLmNwcAotLS0ga3dxL0tXUURP
TU5vZGUuY3BwCTExIEp1bCAyMDAzIDE2OjI0OjM3IC0wMDAwCTEuOQorKysgL2Rldi9udWxsCTEg
SmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKQEAgLTEsMzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwMyBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW5jbHVkZSAiS1dRRE9NTm9kZS5oIgotCi11c2luZyBET006Ok5vZGVJbXBsOwotCi0v
LyBUaGlzIG5lZWRzIHRvIGJlIGluIGEgQysrIHNvdXJjZSBmaWxlIGJlY2F1c2UgaWQgaXMgYSBy
ZXNlcnZlZCB3b3JkIGluIE9iamVjdGl2ZS1DKysuCi1Ob2RlSW1wbDo6SWQgaWRGcm9tTm9kZShO
b2RlSW1wbCAqbm9kZSkKLXsKLSAgICByZXR1cm4gbm9kZS0+aWQoKTsKLX0KSW5kZXg6IGt3cS9L
V1FET01Ob2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZToga3dxL0tXUURPTU5vZGUuaApkaWZmIC1O
IGt3cS9LV1FET01Ob2RlLmgKLS0tIGt3cS9LV1FET01Ob2RlLmgJMTEgSnVsIDIwMDMgMTY6MjQ6
MzcgLTAwMDAJMS41CisrKyAvZGV2L251bGwJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMApAQCAt
MSwyOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDAzIEFwcGxlIENvbXB1dGVyLCBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJkb21fbm9kZWltcGwu
aCIKLQotRE9NOjpOb2RlSW1wbDo6SWQgaWRGcm9tTm9kZShET006Ok5vZGVJbXBsICopOwpJbmRl
eDoga3dxL0tXUUZvbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9r
d3EvS1dRRm9udC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjMxCmRpZmYgLXUgLXAgLXIxLjMx
IGt3cS9LV1FGb250LmgKLS0tIGt3cS9LV1FGb250LmgJNCBBcHIgMjAwMyAxNjo1NjowMiAtMDAw
MAkxLjMxCisrKyBrd3EvS1dRRm9udC5oCTggSnVsIDIwMDUgMDU6NTA6NTYgLTAwMDAKQEAgLTM3
LDYgKzM3LDcgQEAgY2xhc3MgTlNGb250OwogY2xhc3MgUUZvbnQgewogcHVibGljOgogICAgIGVu
dW0gV2VpZ2h0IHsgTm9ybWFsID0gNTAsIEJvbGQgPSA2MyB9OworICAgIGVudW0gUGl0Y2ggeyBV
bmtub3duLCBGaXhlZCwgVmFyaWFibGUgfTsKIAogICAgIFFGb250KCk7CiAgICAgflFGb250KCk7
CkBAIC02MSw3ICs2Miw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFBpeGVsU2l6ZShmbG9hdCBz
KTsKICAgICBpbnQgcGl4ZWxTaXplKCkgY29uc3QgeyByZXR1cm4gKGludClfc2l6ZTsgfQogCi0g
ICAgYm9vbCBpc0ZpeGVkUGl0Y2goKSBjb25zdDsKKyAgICBib29sIGlzRml4ZWRQaXRjaCgpIGNv
bnN0IHsgaWYgKF9waXRjaCA9PSBVbmtub3duKSBkZXRlcm1pbmVQaXRjaCgpOyByZXR1cm4gX3Bp
dGNoID09IEZpeGVkOyB9OworICAgIHZvaWQgZGV0ZXJtaW5lUGl0Y2goKSBjb25zdDsKICAgICAK
ICAgICB2b2lkIHNldFByaW50ZXJGb250KGJvb2wpOwogICAgIGJvb2wgaXNQcmludGVyRm9udCgp
IGNvbnN0IHsgcmV0dXJuIF9pc1ByaW50ZXJGb250OyB9CkBAIC03OSw3ICs4MSw4IEBAIHByaXZh
dGU6CiAgICAgS1dRRm9udEZhbWlseSBfZmFtaWx5OwogICAgIGludCBfdHJhaXQ7CiAgICAgZmxv
YXQgX3NpemU7Ci0gICAgYm9vbCBfaXNQcmludGVyRm9udDsKKyAgICBib29sIF9pc1ByaW50ZXJG
b250IDogMTsKKyAgICBtdXRhYmxlIFBpdGNoIF9waXRjaCA6IDI7CiAgICAgbXV0YWJsZSBOU0Zv
bnQgKl9OU0ZvbnQ7CiB9OwogCkluZGV4OiBrd3EvS1dRRm9udC5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3EvS1dRRm9udC5tbSx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS40NQpkaWZmIC11IC1wIC1yMS40NSBrd3EvS1dRRm9udC5tbQotLS0ga3dxL0tXUUZvbnQu
bW0JOSBNYXIgMjAwNSAyMjozMDoyNSAtMDAwMAkxLjQ1CisrKyBrd3EvS1dRRm9udC5tbQk4IEp1
bCAyMDA1IDA1OjUwOjU2IC0wMDAwCkBAIC0zNCw2ICszNCw3IEBAIFFGb250OjpRRm9udCgpCiAg
ICAgOiBfdHJhaXQoMCkKICAgICAsIF9zaXplKDEyLjApCiAgICAgLCBfaXNQcmludGVyRm9udChm
YWxzZSkKKyAgICAsIF9waXRjaChVbmtub3duKQogICAgICwgX05TRm9udCgwKQogewogfQpAQCAt
NDgsNiArNDksNyBAQCBRRm9udDo6UUZvbnQoY29uc3QgUUZvbnQgJm90aGVyKQogICAgICwgX3Ry
YWl0KG90aGVyLl90cmFpdCkKICAgICAsIF9zaXplKG90aGVyLl9zaXplKQogICAgICwgX2lzUHJp
bnRlckZvbnQob3RoZXIuX2lzUHJpbnRlckZvbnQpCisgICAgLCBfcGl0Y2gob3RoZXIuX3BpdGNo
KQogICAgICwgX05TRm9udChLV1FSZXRhaW4ob3RoZXIuX05TRm9udCkpCiB7CiB9CkBAIC01OCw2
ICs2MCw3IEBAIFFGb250ICZRRm9udDo6b3BlcmF0b3I9KGNvbnN0IFFGb250ICZvdGgKICAgICBf
dHJhaXQgPSBvdGhlci5fdHJhaXQ7CiAgICAgX3NpemUgPSBvdGhlci5fc2l6ZTsKICAgICBfaXNQ
cmludGVyRm9udCA9IG90aGVyLl9pc1ByaW50ZXJGb250OworICAgIF9waXRjaCA9IG90aGVyLl9w
aXRjaDsKICAgICBLV1FSZXRhaW4ob3RoZXIuX05TRm9udCk7CiAgICAgS1dRUmVsZWFzZShfTlNG
b250KTsKICAgICBfTlNGb250ID0gb3RoZXIuX05TRm9udDsKQEAgLTE0NiwyMSArMTQ5LDIzIEBA
IGJvb2wgUUZvbnQ6OmJvbGQoKSBjb25zdAogICAgIHJldHVybiBfdHJhaXQgJiBOU0JvbGRGb250
TWFzazsKIH0KIAotYm9vbCBRRm9udDo6aXNGaXhlZFBpdGNoKCkgY29uc3QKK3ZvaWQgUUZvbnQ6
OmRldGVybWluZVBpdGNoKCkgY29uc3QKIHsKICAgICBLV1FfQkxPQ0tfRVhDRVBUSU9OUzsKLSAg
ICByZXR1cm4gW1tXZWJDb3JlVGV4dFJlbmRlcmVyRmFjdG9yeSBzaGFyZWRGYWN0b3J5XSBpc0Zv
bnRGaXhlZFBpdGNoOiBnZXROU0ZvbnQoKV07CisgICAgaWYgKFtbV2ViQ29yZVRleHRSZW5kZXJl
ckZhY3Rvcnkgc2hhcmVkRmFjdG9yeV0gaXNGb250Rml4ZWRQaXRjaDogZ2V0TlNGb250KCldKQor
ICAgICAgICBfcGl0Y2ggPSBGaXhlZDsKKyAgICBlbHNlCisgICAgICAgIF9waXRjaCA9IFZhcmlh
YmxlOwogICAgIEtXUV9VTkJMT0NLX0VYQ0VQVElPTlM7Ci0gICAgcmV0dXJuIGZhbHNlOwogfQog
Ci0KIGJvb2wgUUZvbnQ6Om9wZXJhdG9yPT0oY29uc3QgUUZvbnQgJmNvbXBhcmVGb250KSBjb25z
dAogewogICAgIHJldHVybiBfZmFtaWx5ID09IGNvbXBhcmVGb250Ll9mYW1pbHkKICAgICAgICAg
JiYgX3RyYWl0ID09IGNvbXBhcmVGb250Ll90cmFpdAogICAgICAgICAmJiBfc2l6ZSA9PSBjb21w
YXJlRm9udC5fc2l6ZQotICAgICAgICAmJiBfaXNQcmludGVyRm9udCA9PSBjb21wYXJlRm9udC5f
aXNQcmludGVyRm9udDsKKyAgICAgICAgJiYgX2lzUHJpbnRlckZvbnQgPT0gY29tcGFyZUZvbnQu
X2lzUHJpbnRlckZvbnQKKyAgICAgICAgJiYgX3BpdGNoID09IGNvbXBhcmVGb250Ll9waXRjaDsK
IH0KIAogTlNGb250ICpRRm9udDo6Z2V0TlNGb250KCkgY29uc3QKSW5kZXg6IGt3cS9LV1FLSFRN
TFBhcnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9LV1FL
SFRNTFBhcnQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjkKZGlmZiAtdSAtcCAtcjEuOSBr
d3EvS1dRS0hUTUxQYXJ0LmNwcAotLS0ga3dxL0tXUUtIVE1MUGFydC5jcHAJMjcgTWFyIDIwMDMg
MDE6NTc6NDcgLTAwMDAJMS45CisrKyBrd3EvS1dRS0hUTUxQYXJ0LmNwcAk4IEp1bCAyMDA1IDA1
OjUwOjU2IC0wMDAwCkBAIC0zMiwxMyArMzIsMTUgQEAKIAogdXNpbmcgRE9NOjpEb2N1bWVudElt
cGw7CiB1c2luZyBET006OkhUTUxEb2N1bWVudEltcGw7Cit1c2luZyBET006OkhUTUxOYW1lczsK
IHVzaW5nIERPTTo6Tm9kZUltcGw7CiAKKy8vIEZJWE1FOiBXaGF0IG9uIGVhcnRoIGlzIHRoaXMg
c2luZ2xlIHRpbnkgZmlsZSB3aXRoIG9ubHkgdGhpcyBtZXRob2QgZG9pbmcgaGVyZT8KIGJvb2wg
S1dRS0hUTUxQYXJ0Ojppc0ZyYW1lU2V0KCkgY29uc3QKIHsKICAgICBEb2N1bWVudEltcGwgKmRv
Y3VtZW50ID0gZC0+bV9kb2M7CiAgICAgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQtPmlzSFRN
TERvY3VtZW50KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBOb2RlSW1wbCAqYm9keSA9
IHN0YXRpY19jYXN0PEhUTUxEb2N1bWVudEltcGwgKj4oZG9jdW1lbnQpLT5ib2R5KCk7Ci0gICAg
cmV0dXJuIGJvZHkgJiYgYm9keS0+cmVuZGVyZXIoKSAmJiBib2R5LT5pZCgpID09IElEX0ZSQU1F
U0VUOworICAgIHJldHVybiBib2R5ICYmIGJvZHktPnJlbmRlcmVyKCkgJiYgYm9keS0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OmZyYW1lc2V0KCkpOwogfQpJbmRleDoga3dxL0tXUUtIVE1MUGFydC5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3EvS1dRS0hUTUxQYXJ0
Lm1tLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjY0MwpkaWZmIC11IC1wIC1yMS42NDMga3dxL0tX
UUtIVE1MUGFydC5tbQotLS0ga3dxL0tXUUtIVE1MUGFydC5tbQkyNiBNYXkgMjAwNSAyMDozMDox
MiAtMDAwMAkxLjY0MworKysga3dxL0tXUUtIVE1MUGFydC5tbQk4IEp1bCAyMDA1IDA1OjUwOjU5
IC0wMDAwCkBAIC0yOCw3ICsyOCw2IEBACiAjaW1wb3J0ICJET01JbnRlcm5hbC5oIgogCiAjaW1w
b3J0ICJLV1FDbGlwYm9hcmQuaCIKLSNpbXBvcnQgIktXUURPTU5vZGUuaCIKICNpbXBvcnQgIktX
UUR1bW15Vmlldy5oIgogI2ltcG9ydCAiS1dRRWRpdENvbW1hbmQuaCIKICNpbXBvcnQgIktXUUV4
Y2VwdGlvbnMuaCIKQEAgLTEwMCw2ICs5OSw3IEBAIHVzaW5nIERPTTo6SFRNTEVsZW1lbnRJbXBs
OwogdXNpbmcgRE9NOjpIVE1MRm9ybUVsZW1lbnRJbXBsOwogdXNpbmcgRE9NOjpIVE1MRnJhbWVF
bGVtZW50SW1wbDsKIHVzaW5nIERPTTo6SFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGw7Cit1c2lu
ZyBET006OkhUTUxOYW1lczsKIHVzaW5nIERPTTo6SFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsOwog
dXNpbmcgRE9NOjpOb2RlOwogdXNpbmcgRE9NOjpOb2RlSW1wbDsKQEAgLTM2MSwxMyArMzYxLDEy
IEBAIHN0YXRpYyBIVE1MRm9ybUVsZW1lbnRJbXBsICpzY2FuRm9yRm9ybSgKIHsKICAgICBOb2Rl
SW1wbCAqbjsKICAgICBmb3IgKG4gPSBzdGFydDsgbjsgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUo
KSkgewotICAgICAgICBOb2RlSW1wbDo6SWQgbm9kZUlEID0gaWRGcm9tTm9kZShuKTsKLSAgICAg
ICAgaWYgKG5vZGVJRCA9PSBJRF9GT1JNKSB7CisgICAgICAgIGlmIChuLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6Zm9ybSgpKSkgewogICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxG
b3JtRWxlbWVudEltcGwgKj4obik7CiAgICAgICAgIH0gZWxzZSBpZiAobi0+aXNIVE1MRWxlbWVu
dCgpCiAgICAgICAgICAgICAgICAgICAgJiYgc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+
KG4pLT5pc0dlbmVyaWNGb3JtRWxlbWVudCgpKSB7CiAgICAgICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8SFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwgKj4obiktPmZvcm0oKTsKLSAgICAgICAg
fSBlbHNlIGlmIChub2RlSUQgPT0gSURfRlJBTUUgfHwgbm9kZUlEID09IElEX0lGUkFNRSkgewor
ICAgICAgICB9IGVsc2UgaWYgKG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpmcmFtZSgpKSB8fCBu
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aWZyYW1lKCkpKSB7CiAgICAgICAgICAgICBOb2RlSW1w
bCAqY2hpbGREb2MgPSBzdGF0aWNfY2FzdDxIVE1MRnJhbWVFbGVtZW50SW1wbCAqPihuKS0+Y29u
dGVudERvY3VtZW50KCk7CiAgICAgICAgICAgICBIVE1MRm9ybUVsZW1lbnRJbXBsICpmcmFtZVJl
c3VsdCA9IHNjYW5Gb3JGb3JtKGNoaWxkRG9jKTsKICAgICAgICAgICAgIGlmIChmcmFtZVJlc3Vs
dCkgewpAQCAtMzkwLDcgKzM4OSw3IEBAIEhUTUxGb3JtRWxlbWVudEltcGwgKktXUUtIVE1MUGFy
dDo6Y3VycmUKICAgICAvLyB0cnkgd2Fsa2luZyB1cCB0aGUgbm9kZSB0cmVlIHRvIGZpbmQgYSBm
b3JtIGVsZW1lbnQKICAgICBOb2RlSW1wbCAqbjsKICAgICBmb3IgKG4gPSBzdGFydDsgbjsgbiA9
IG4tPnBhcmVudE5vZGUoKSkgewotICAgICAgICBpZiAoaWRGcm9tTm9kZShuKSA9PSBJRF9GT1JN
KSB7CisgICAgICAgIGlmIChuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Zm9ybSgpKSkgewogICAg
ICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudEltcGwgKj4obik7CiAg
ICAgICAgIH0gZWxzZSBpZiAobi0+aXNIVE1MRWxlbWVudCgpCiAgICAgICAgICAgICAgICAgICAg
JiYgc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KG4pLT5pc0dlbmVyaWNGb3JtRWxlbWVu
dCgpKSB7CkBAIC00ODksOCArNDg4LDcgQEAgTlNTdHJpbmcgKktXUUtIVE1MUGFydDo6c2VhcmNo
Rm9yTGFiZWxzQQogICAgICAgICBpZiAoYWJvdmVDZWxsKSB7CiAgICAgICAgICAgICAvLyBzZWFy
Y2ggd2l0aGluIHRoZSBhYm92ZSBjZWxsIHdlIGZvdW5kIGZvciBhIG1hdGNoCiAgICAgICAgICAg
ICBmb3IgKE5vZGVJbXBsICpuID0gYWJvdmVDZWxsLT5maXJzdENoaWxkKCk7IG47IG4gPSBuLT50
cmF2ZXJzZU5leHROb2RlKGFib3ZlQ2VsbCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoaWRGcm9t
Tm9kZShuKSA9PSBJRF9URVhUCi0gICAgICAgICAgICAgICAgICAgICYmIG4tPnJlbmRlcmVyKCkg
JiYgbi0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUpCisgICAg
ICAgICAgICAgICAgaWYgKG4tPmlzVGV4dE5vZGUoKSAmJiBuLT5yZW5kZXJlcigpICYmIG4tPnJl
bmRlcmVyKCktPnN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFKQogICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAgICAgLy8gRm9yIGVhY2ggdGV4dCBjaHVuaywgcnVuIHRo
ZSByZWdleHAKICAgICAgICAgICAgICAgICAgICAgUVN0cmluZyBub2RlU3RyaW5nID0gbi0+bm9k
ZVZhbHVlKCkuc3RyaW5nKCk7CkBAIC01MjUsMjMgKzUyMywyMSBAQCBOU1N0cmluZyAqS1dRS0hU
TUxQYXJ0OjpzZWFyY2hGb3JMYWJlbHNCCiAgICAgICAgICBuICYmIGxlbmd0aFNlYXJjaGVkIDwg
Y2hhcnNTZWFyY2hlZFRocmVzaG9sZDsKICAgICAgICAgIG4gPSBuLT50cmF2ZXJzZVByZXZpb3Vz
Tm9kZSgpKQogICAgIHsKLSAgICAgICAgTm9kZUltcGw6OklkIG5vZGVJRCA9IGlkRnJvbU5vZGUo
bik7Ci0gICAgICAgIGlmIChub2RlSUQgPT0gSURfRk9STQorICAgICAgICBpZiAobi0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OmZvcm0oKSkKICAgICAgICAgICAgIHx8IChuLT5pc0hUTUxFbGVtZW50
KCkKICAgICAgICAgICAgICAgICAmJiBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwgKj4obikt
PmlzR2VuZXJpY0Zvcm1FbGVtZW50KCkpKQogICAgICAgICB7CiAgICAgICAgICAgICAvLyBXZSBo
aXQgYW5vdGhlciBmb3JtIGVsZW1lbnQgb3IgdGhlIHN0YXJ0IG9mIHRoZSBmb3JtIC0gYmFpbCBv
dXQKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9IGVsc2UgaWYgKG5vZGVJRCA9PSBJRF9U
RCAmJiAhc3RhcnRpbmdUYWJsZUNlbGwpIHsKKyAgICAgICAgfSBlbHNlIGlmIChuLT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6dGQoKSkgJiYgIXN0YXJ0aW5nVGFibGVDZWxsKSB7CiAgICAgICAgICAg
ICBzdGFydGluZ1RhYmxlQ2VsbCA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZUNlbGxFbGVtZW50SW1w
bCAqPihuKTsKLSAgICAgICAgfSBlbHNlIGlmIChub2RlSUQgPT0gSURfVFIgJiYgc3RhcnRpbmdU
YWJsZUNlbGwpIHsKKyAgICAgICAgfSBlbHNlIGlmIChuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
dHIoKSkgJiYgc3RhcnRpbmdUYWJsZUNlbGwpIHsKICAgICAgICAgICAgIE5TU3RyaW5nICpyZXN1
bHQgPSBzZWFyY2hGb3JMYWJlbHNBYm92ZUNlbGwocmVnRXhwLCBzdGFydGluZ1RhYmxlQ2VsbCk7
CiAgICAgICAgICAgICBpZiAocmVzdWx0KSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHNlYXJjaGVkQ2VsbEFib3ZlID0gdHJ1ZTsK
LSAgICAgICAgfSBlbHNlIGlmIChub2RlSUQgPT0gSURfVEVYVAotICAgICAgICAgICAgICAgICAg
ICYmIG4tPnJlbmRlcmVyKCkgJiYgbi0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+dmlzaWJpbGl0eSgp
ID09IFZJU0lCTEUpCisgICAgICAgIH0gZWxzZSBpZiAobi0+aXNUZXh0Tm9kZSgpICYmIG4tPnJl
bmRlcmVyKCkgJiYgbi0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lC
TEUpCiAgICAgICAgIHsKICAgICAgICAgICAgIC8vIEZvciBlYWNoIHRleHQgY2h1bmssIHJ1biB0
aGUgcmVnZXhwCiAgICAgICAgICAgICBRU3RyaW5nIG5vZGVTdHJpbmcgPSBuLT5ub2RlVmFsdWUo
KS5zdHJpbmcoKTsKQEAgLTI4NDgsMTQgKzI4NDQsMTAgQEAgTlNGaWxlV3JhcHBlciAqS1dRS0hU
TUxQYXJ0OjpmaWxlV3JhcHBlcgogCiBzdGF0aWMgRWxlbWVudEltcGwgKmxpc3RQYXJlbnQoRWxl
bWVudEltcGwgKml0ZW0pCiB7Ci0gICAgLy8gSWNrISAgQXZvaWQgdXNlIG9mIGl0ZW0tPmlkKCkg
d2hpY2ggY29uZnVzZXMgT2JqQysrLgotICAgIHVuc2lnbmVkIHNob3J0IF9pZCA9IGl0ZW0tPmlk
ZW50aWZpZXIoKTsKLSAgICAKLSAgICB3aGlsZSAoX2lkICE9IElEX1VMICYmIF9pZCAhPSBJRF9P
TCkgeworICAgIHdoaWxlICghaXRlbS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnVsKCkpICYmICFp
dGVtLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b2woKSkpIHsKICAgICAgICAgaXRlbSA9IHN0YXRp
Y19jYXN0PEVsZW1lbnRJbXBsICo+KGl0ZW0tPnBhcmVudE5vZGUoKSk7CiAgICAgICAgIGlmICgh
aXRlbSkKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBfaWQgPSBpdGVtLT5pZGVudGlmaWVy
KCk7CiAgICAgfQogICAgIHJldHVybiBpdGVtOwogfQpAQCAtMjg2OCw3ICsyODYwLDcgQEAgc3Rh
dGljIE5vZGVJbXBsKiBpc1RleHRGaXJzdEluTGlzdEl0ZW0oTgogICAgIHdoaWxlIChwYXIpIHsK
ICAgICAgICAgaWYgKHBhci0+Zmlyc3RDaGlsZCgpICE9IGUpCiAgICAgICAgICAgICByZXR1cm4g
MDsKLSAgICAgICAgaWYgKHBhci0+aWRlbnRpZmllcigpID09IElEX0xJKQorICAgICAgICBpZiAo
cGFyLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6bGkoKSkpCiAgICAgICAgICAgICByZXR1cm4gcGFy
OwogICAgICAgICBlID0gcGFyOwogICAgICAgICBwYXIgPSBwYXItPnBhcmVudE5vZGUoKTsKQEAg
LTMwMjIsMTA5ICszMDE0LDk1IEBAIE5TQXR0cmlidXRlZFN0cmluZyAqS1dRS0hUTUxQYXJ0Ojph
dHRyaWIKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBv
dXIgc2ltcGxlIEhUTUwgLT4gQVNDSUkgdHJhbnNmb3JtYXRpb246CiAgICAgICAgICAgICAgICAg
UVN0cmluZyB0ZXh0OwotICAgICAgICAgICAgICAgIE5vZGVJbXBsOjpJZCBfaWQgPSBuLT5pZGVu
dGlmaWVyKCk7Ci0gICAgICAgICAgICAgICAgc3dpdGNoKF9pZCkgewotICAgICAgICAgICAgICAg
ICAgICBjYXNlIElEX0E6Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3RlIHRoZSBzdGFy
dCBvZiB0aGUgPGE+IGVsZW1lbnQuICBXZSB3aWxsIGFkZCB0aGUgTlNMaW5rQXR0cmlidXRlTmFt
ZQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXR0cmlidXRlIHRvIHRoZSBhdHRyaWJ1dGVk
IHN0cmluZyB3aGVuIG5hdmlnYXRpbmcgdG8gdGhlIG5leHQgc2libGluZyAKLSAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIG9mIHRoaXMgbm9kZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIGxp
bmtTdGFydExvY2F0aW9uID0gW3Jlc3VsdCBsZW5ndGhdOwotICAgICAgICAgICAgICAgICAgICAg
ICAgbGlua1N0YXJ0Tm9kZSA9IHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsKj4obik7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0JS
OgotICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCArPSAiXG4iOwotICAgICAgICAgICAgICAg
ICAgICAgICAgaGFzTmV3TGluZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9MSToKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBRU3RyaW5nIGxpc3RUZXh0
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVsZW1lbnRJbXBsICppdGVtUGFyZW50ID0g
bGlzdFBhcmVudChzdGF0aWNfY2FzdDxFbGVtZW50SW1wbCAqPihuKSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNOZXdM
aW5lKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0VGV4dCArPSAnXG4nOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc05ld0xpbmUgPSB0cnVlOwotICAgIAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RJdGVtcy5hcHBlbmQoc3RhdGljX2Nhc3Q8RWxl
bWVudEltcGwqPihuKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdEl0ZW1JbmZv
IGluZm87Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mby5zdGFydCA9IFtyZXN1bHQg
bGVuZ3RoXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLmVuZCA9IDA7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbGlzdEl0ZW1Mb2NhdGlvbnMuYXBwZW5kIChpbmZvKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsaXN0VGV4dCArPSAnXHQnOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVt
UGFyZW50ICYmIHJlbmRlcmVyLT5pc0xpc3RJdGVtKCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgUmVuZGVyTGlzdEl0ZW0gKmxpc3RSZW5kZXJlciA9IHN0YXRpY19jYXN0PFJl
bmRlckxpc3RJdGVtKj4ocmVuZGVyZXIpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1heE1hcmtlcldpZHRoID0gTUFYKFtmb250IHBvaW50U2l6ZV0sIG1heE1hcmtlcldpZHRo
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoKHN0eWxlLT5saXN0U3R5
bGVUeXBlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Uga2h0
bWw6OkRJU0M6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdFRl
eHQgKz0gKChRQ2hhcilCVUxMRVRfQ0hBUik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
YXNlIGtodG1sOjpDSVJDTEU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbGlzdFRleHQgKz0gKChRQ2hhcilDSVJDTEVfQ0hBUik7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjYXNlIGtodG1sOjpTUVVBUkU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbGlzdFRleHQgKz0gKChRQ2hhcilTUVVBUkVfQ0hBUik7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjYXNlIGtodG1sOjpMTk9ORToKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
UVN0cmluZyBtYXJrZXIgPSBsaXN0UmVuZGVyZXItPm1hcmtlclN0cmluZ1ZhbHVlKCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdFRleHQgKz0gbWFya2VyOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVzZSBBcHBLaXQgbWV0
cmljcy4gIFdpbGwgYmUgcmVuZGVyZWQgYnkgQXBwS2l0LgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZsb2F0IG1hcmtlcldpZHRoID0gW2ZvbnQgd2lkdGhPZlN0cmlu
ZzogbWFya2VyLmdldE5TU3RyaW5nKCldOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1heE1hcmtlcldpZHRoID0gTUFYKG1hcmtlcldpZHRoLCBtYXhNYXJrZXJXaWR0
aCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBp
ZiAobi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmEoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAg
Ly8gTm90ZSB0aGUgc3RhcnQgb2YgdGhlIDxhPiBlbGVtZW50LiAgV2Ugd2lsbCBhZGQgdGhlIE5T
TGlua0F0dHJpYnV0ZU5hbWUKKyAgICAgICAgICAgICAgICAgICAgLy8gYXR0cmlidXRlIHRvIHRo
ZSBhdHRyaWJ1dGVkIHN0cmluZyB3aGVuIG5hdmlnYXRpbmcgdG8gdGhlIG5leHQgc2libGluZyAK
KyAgICAgICAgICAgICAgICAgICAgLy8gb2YgdGhpcyBub2RlLgorICAgICAgICAgICAgICAgICAg
ICBsaW5rU3RhcnRMb2NhdGlvbiA9IFtyZXN1bHQgbGVuZ3RoXTsKKyAgICAgICAgICAgICAgICAg
ICAgbGlua1N0YXJ0Tm9kZSA9IHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsKj4obik7CisgICAgICAg
ICAgICAgICAgfSBlbHNlIGlmIChuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YnIoKSkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgdGV4dCArPSAiXG4iOworICAgICAgICAgICAgICAgICAgICBoYXNO
ZXdMaW5lID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG4tPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjpsaSgpKSkgeworICAgICAgICAgICAgICAgICAgICBRU3RyaW5nIGxpc3RUZXh0
OworICAgICAgICAgICAgICAgICAgICBFbGVtZW50SW1wbCAqaXRlbVBhcmVudCA9IGxpc3RQYXJl
bnQoc3RhdGljX2Nhc3Q8RWxlbWVudEltcGwgKj4obikpOworICAgICAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNOZXdMaW5lKQorICAgICAgICAgICAgICAgICAg
ICAgICAgbGlzdFRleHQgKz0gJ1xuJzsKKyAgICAgICAgICAgICAgICAgICAgaGFzTmV3TGluZSA9
IHRydWU7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdFRleHQgKz0gJyAn
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0VGV4dCArPSAnXHQnOwotICAg
IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOU011dGFibGVEaWN0aW9uYXJ5ICph
dHRyczsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRy
cyA9IFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF07Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFthdHRycyBzZXRPYmplY3Q6Zm9udCBmb3JLZXk6TlNGb250QXR0cmli
dXRlTmFtZV07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHlsZSAmJiBz
dHlsZS0+Y29sb3IoKS5pc1ZhbGlkKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBbYXR0cnMgc2V0T2JqZWN0OnN0eWxlLT5jb2xvcigpLmdldE5TQ29sb3IoKSBmb3JLZXk6
TlNGb3JlZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lXTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHN0eWxlICYmIHN0eWxlLT5iYWNrZ3JvdW5kQ29sb3IoKS5pc1ZhbGlkKCkp
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0cnMgc2V0T2JqZWN0OnN0
eWxlLT5iYWNrZ3JvdW5kQ29sb3IoKS5nZXROU0NvbG9yKCkgZm9yS2V5Ok5TQmFja2dyb3VuZENv
bG9yQXR0cmlidXRlTmFtZV07Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgTlNBdHRyaWJ1dGVkU3RyaW5nICpwYXJ0aWFsU3RyaW5nID0gW1tOU0F0dHJpYnV0
ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOmxpc3RUZXh0LmdldE5TU3RyaW5nKCkgYXR0
cmlidXRlczphdHRyc107Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRycyBy
ZWxlYXNlXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jlc3VsdCBhcHBlbmRB
dHRyaWJ1dGVkU3RyaW5nOiBwYXJ0aWFsU3RyaW5nXTsgICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFtwYXJ0aWFsU3RyaW5nIHJlbGVhc2VdOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbGlzdEl0ZW1zLmFw
cGVuZChzdGF0aWNfY2FzdDxFbGVtZW50SW1wbCo+KG4pKTsKKyAgICAgICAgICAgICAgICAgICAg
TGlzdEl0ZW1JbmZvIGluZm87CisgICAgICAgICAgICAgICAgICAgIGluZm8uc3RhcnQgPSBbcmVz
dWx0IGxlbmd0aF07CisgICAgICAgICAgICAgICAgICAgIGluZm8uZW5kID0gMDsKKyAgICAgICAg
ICAgICAgICAgICAgbGlzdEl0ZW1Mb2NhdGlvbnMuYXBwZW5kIChpbmZvKTsKKyAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGxpc3RUZXh0ICs9ICdcdCc7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChpdGVtUGFyZW50ICYmIHJlbmRlcmVyLT5pc0xpc3RJdGVtKCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRlckxpc3RJdGVtICpsaXN0UmVuZGVyZXIgPSBz
dGF0aWNfY2FzdDxSZW5kZXJMaXN0SXRlbSo+KHJlbmRlcmVyKTsKKworICAgICAgICAgICAgICAg
ICAgICAgICAgbWF4TWFya2VyV2lkdGggPSBNQVgoW2ZvbnQgcG9pbnRTaXplXSwgbWF4TWFya2Vy
V2lkdGgpOworICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoKHN0eWxlLT5saXN0U3R5bGVU
eXBlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIGtodG1sOjpESVNDOgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0VGV4dCArPSAoKFFDaGFyKUJVTExF
VF9DSEFSKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2FzZSBraHRtbDo6Q0lSQ0xFOgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBsaXN0VGV4dCArPSAoKFFDaGFyKUNJUkNMRV9DSEFSKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2FzZSBraHRtbDo6U1FVQVJFOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsaXN0VGV4dCArPSAoKFFDaGFyKVNRVUFSRV9DSEFSKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBraHRt
bDo6TE5PTkU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFFTdHJpbmcgbWFya2VyID0gbGlzdFJlbmRlcmVyLT5tYXJrZXJTdHJpbmdWYWx1ZSgp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0VGV4dCArPSBtYXJrZXI7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVzZSBBcHBLaXQgbWV0cmljcy4gIFdp
bGwgYmUgcmVuZGVyZWQgYnkgQXBwS2l0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmbG9hdCBtYXJrZXJXaWR0aCA9IFtmb250IHdpZHRoT2ZTdHJpbmc6IG1hcmtlci5nZXROU1N0
cmluZygpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4TWFya2VyV2lkdGgg
PSBNQVgobWFya2VyV2lkdGgsIG1heE1hcmtlcldpZHRoKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICAgICAg
ICAgIGNhc2UgSURfT0w6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfVUw6CisgICAgICAg
ICAgICAgICAgICAgICAgICBsaXN0VGV4dCArPSAnICc7CisgICAgICAgICAgICAgICAgICAgICAg
ICBsaXN0VGV4dCArPSAnXHQnOworCisgICAgICAgICAgICAgICAgICAgICAgICBOU011dGFibGVE
aWN0aW9uYXJ5ICphdHRyczsKKworICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnMgPSBbW05T
TXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdOworICAgICAgICAgICAgICAgICAgICAgICAg
W2F0dHJzIHNldE9iamVjdDpmb250IGZvcktleTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChzdHlsZSAmJiBzdHlsZS0+Y29sb3IoKS5pc1ZhbGlkKCkp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHJzIHNldE9iamVjdDpzdHlsZS0+Y29s
b3IoKS5nZXROU0NvbG9yKCkgZm9yS2V5Ok5TRm9yZWdyb3VuZENvbG9yQXR0cmlidXRlTmFtZV07
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3R5bGUgJiYgc3R5bGUtPmJhY2tncm91bmRD
b2xvcigpLmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0cnMgc2V0
T2JqZWN0OnN0eWxlLT5iYWNrZ3JvdW5kQ29sb3IoKS5nZXROU0NvbG9yKCkgZm9yS2V5Ok5TQmFj
a2dyb3VuZENvbG9yQXR0cmlidXRlTmFtZV07CisKKyAgICAgICAgICAgICAgICAgICAgICAgIE5T
QXR0cmlidXRlZFN0cmluZyAqcGFydGlhbFN0cmluZyA9IFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFs
bG9jXSBpbml0V2l0aFN0cmluZzpsaXN0VGV4dC5nZXROU1N0cmluZygpIGF0dHJpYnV0ZXM6YXR0
cnNdOworICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHJzIHJlbGVhc2VdOworICAgICAgICAg
ICAgICAgICAgICAgICAgW3Jlc3VsdCBhcHBlbmRBdHRyaWJ1dGVkU3RyaW5nOiBwYXJ0aWFsU3Ry
aW5nXTsgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBbcGFydGlhbFN0
cmluZyByZWxlYXNlXTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICBlbHNlIGlmIChuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b2woKSkgfHwgbi0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OnVsKCkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWhhc05l
d0xpbmUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCArPSAiXG4iOwogICAgICAg
ICAgICAgICAgICAgICAgICAgaGFzTmV3TGluZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX1REOgotICAgICAgICAg
ICAgICAgICAgICBjYXNlIElEX1RIOgotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0hSOgot
ICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0REOgotICAgICAgICAgICAgICAgICAgICBjYXNl
IElEX0RMOgotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0RUOgotICAgICAgICAgICAgICAg
ICAgICBjYXNlIElEX1BSRToKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9CTE9DS1FVT1RF
OgotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0RJVjoKKyAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIGlmIChuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGQoKSkgfHwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGgoKSkgfHwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aHIo
KSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6ZGQoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6ZGwoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZHQoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6cHJlKCkpIHx8CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJsb2NrcXVvdGUoKSkg
fHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6ZGl2KCkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWhhc05ld0xpbmUpCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCArPSAnXG4nOwogICAgICAgICAgICAgICAg
ICAgICAgICAgaGFzTmV3TGluZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9QOgotICAgICAgICAgICAgICAgICAgICBj
YXNlIElEX1RSOgotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0gxOgotICAgICAgICAgICAg
ICAgICAgICBjYXNlIElEX0gyOgotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0gzOgotICAg
ICAgICAgICAgICAgICAgICBjYXNlIElEX0g0OgotICAgICAgICAgICAgICAgICAgICBjYXNlIElE
X0g1OgotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0g2OiB7CisgICAgICAgICAgICAgICAg
ICAgIH0gZWxzZSBpZiAobi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnAoKSkgfHwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dHIoKSkgfHwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
aDEoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6aDIoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6aDMoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDQoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDUoKSkgfHwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDYoKSkpIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICghaGFzTmV3TGluZSkKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0ZXh0ICs9ICdcbic7CiAgICAgICAgICAgICAgICAgICAgICAgICAKQEAgLTMx
MzksMTAgKzMxMTcsOCBAQCBOU0F0dHJpYnV0ZWRTdHJpbmcgKktXUUtIVE1MUGFydDo6YXR0cmli
CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICAgICAgICAgIGhhc05ld0xpbmUgPSB0cnVlOwotICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0lNRzoKKyAgICAgICAgICAgICAg
ICAgICAgZWxzZSBpZiAobi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmltZygpKSkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHBlbmRpbmdTdHlsZWRTcGFjZSAhPSBuaWwpIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAobGlua1N0YXJ0TG9jYXRpb24gPT0gW3Jlc3VsdCBs
ZW5ndGhdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrbGlua1N0YXJ0TG9j
YXRpb247CkBAIC0zMTU2LDggKzMxMzIsOSBAQCBOU0F0dHJpYnV0ZWRTdHJpbmcgKktXUUtIVE1M
UGFydDo6YXR0cmliCiAgICAgICAgICAgICAgICAgICAgICAgICBOU0F0dHJpYnV0ZWRTdHJpbmcg
KmlTdHJpbmcgPSBbTlNBdHRyaWJ1dGVkU3RyaW5nIGF0dHJpYnV0ZWRTdHJpbmdXaXRoQXR0YWNo
bWVudDphdHRhY2htZW50XTsKICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXN1bHQgYXBwZW5k
QXR0cmlidXRlZFN0cmluZzogaVN0cmluZ107CiAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0
YWNobWVudCByZWxlYXNlXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAgICAgTlNB
dHRyaWJ1dGVkU3RyaW5nICpwYXJ0aWFsU3RyaW5nID0gW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxs
b2NdIGluaXRXaXRoU3RyaW5nOnRleHQuZ2V0TlNTdHJpbmcoKV07CiAgICAgICAgICAgICAgICAg
W3Jlc3VsdCBhcHBlbmRBdHRyaWJ1dGVkU3RyaW5nOiBwYXJ0aWFsU3RyaW5nXTsKICAgICAgICAg
ICAgICAgICBbcGFydGlhbFN0cmluZyByZWxlYXNlXTsKQEAgLTMxNzksNzEgKzMxNTYsNjAgQEAg
TlNBdHRyaWJ1dGVkU3RyaW5nICpLV1FLSFRNTFBhcnQ6OmF0dHJpYgogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgbmV4dCA9IG4tPm5leHRTaWJsaW5nKCk7CiAKLSAgICAgICAg
ICAgIE5vZGVJbXBsOjpJZCBfaWQgPSBuLT5pZGVudGlmaWVyKCk7Ci0gICAgICAgICAgICBzd2l0
Y2goX2lkKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBJRF9BOgotICAgICAgICAgICAgICAgICAg
ICAvLyBFbmQgb2YgYSA8YT4gZWxlbWVudC4gIENyZWF0ZSBhbiBhdHRyaWJ1dGVkIHN0cmluZyBO
U0xpbmtBdHRyaWJ1dGVOYW1lIGF0dHJpYnV0ZQotICAgICAgICAgICAgICAgICAgICAvLyBmb3Ig
dGhlIHJhbmdlIG9mIHRoZSBsaW5rLiAgTm90ZSB0aGF0IHdlIGNyZWF0ZSB0aGUgYXR0cmlidXRl
ZCBzdHJpbmcgZnJvbSB0aGUgRE9NLCB3aGljaAotICAgICAgICAgICAgICAgICAgICAvLyB3aWxs
IGhhdmUgY29ycmVjdGVkIGFueSBpbGxlZ2FsbHkgbmVzdGVkIDxhPiBlbGVtZW50cy4KLSAgICAg
ICAgICAgICAgICAgICAgaWYgKGxpbmtTdGFydE5vZGUgJiYgbiA9PSBsaW5rU3RhcnROb2RlKXsK
LSAgICAgICAgICAgICAgICAgICAgICAgIERPTVN0cmluZyBocmVmID0gcGFyc2VVUkwobGlua1N0
YXJ0Tm9kZS0+Z2V0QXR0cmlidXRlKEFUVFJfSFJFRikpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgS1VSTCBrVVJMID0gS1dRKGxpbmtTdGFydE5vZGUtPmdldERvY3VtZW50KCktPnBhcnQoKSkt
PmNvbXBsZXRlVVJMKGhyZWYuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgICAgICAgICBOU1VSTCAqVVJMID0ga1VSTC5nZXROU1VSTCgpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgW3Jlc3VsdCBhZGRBdHRyaWJ1dGU6TlNMaW5rQXR0cmlidXRl
TmFtZSB2YWx1ZTpVUkwgcmFuZ2U6TlNNYWtlUmFuZ2UobGlua1N0YXJ0TG9jYXRpb24sIFtyZXN1
bHQgbGVuZ3RoXS1saW5rU3RhcnRMb2NhdGlvbildOwotICAgICAgICAgICAgICAgICAgICAgICAg
bGlua1N0YXJ0Tm9kZSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAobi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmEo
KSkpIHsKKyAgICAgICAgICAgICAgICAvLyBFbmQgb2YgYSA8YT4gZWxlbWVudC4gIENyZWF0ZSBh
biBhdHRyaWJ1dGVkIHN0cmluZyBOU0xpbmtBdHRyaWJ1dGVOYW1lIGF0dHJpYnV0ZQorICAgICAg
ICAgICAgICAgIC8vIGZvciB0aGUgcmFuZ2Ugb2YgdGhlIGxpbmsuICBOb3RlIHRoYXQgd2UgY3Jl
YXRlIHRoZSBhdHRyaWJ1dGVkIHN0cmluZyBmcm9tIHRoZSBET00sIHdoaWNoCisgICAgICAgICAg
ICAgICAgLy8gd2lsbCBoYXZlIGNvcnJlY3RlZCBhbnkgaWxsZWdhbGx5IG5lc3RlZCA8YT4gZWxl
bWVudHMuCisgICAgICAgICAgICAgICAgaWYgKGxpbmtTdGFydE5vZGUgJiYgbiA9PSBsaW5rU3Rh
cnROb2RlKSB7CisgICAgICAgICAgICAgICAgICAgIERPTVN0cmluZyBocmVmID0gcGFyc2VVUkwo
bGlua1N0YXJ0Tm9kZS0+Z2V0QXR0cmlidXRlKEFUVFJfSFJFRikpOworICAgICAgICAgICAgICAg
ICAgICBLVVJMIGtVUkwgPSBLV1EobGlua1N0YXJ0Tm9kZS0+Z2V0RG9jdW1lbnQoKS0+cGFydCgp
KS0+Y29tcGxldGVVUkwoaHJlZi5zdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgICAgICBOU1VSTCAqVVJMID0ga1VSTC5nZXROU1VSTCgpOworICAgICAgICAg
ICAgICAgICAgICBbcmVzdWx0IGFkZEF0dHJpYnV0ZTpOU0xpbmtBdHRyaWJ1dGVOYW1lIHZhbHVl
OlVSTCByYW5nZTpOU01ha2VSYW5nZShsaW5rU3RhcnRMb2NhdGlvbiwgW3Jlc3VsdCBsZW5ndGhd
LWxpbmtTdGFydExvY2F0aW9uKV07CisgICAgICAgICAgICAgICAgICAgIGxpbmtTdGFydE5vZGUg
PSAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2Ug
aWYgKG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvbCgpKSB8fCBuLT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6dWwoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWhhc05ld0xpbmUpCisgICAgICAg
ICAgICAgICAgICAgIHRleHQgKz0gJ1xuJzsKKyAgICAgICAgICAgICAgICBoYXNOZXdMaW5lID0g
dHJ1ZTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omxp
KCkpKSB7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgY2FzZSBJRF9PTDoKLSAg
ICAgICAgICAgICAgICBjYXNlIElEX1VMOgotICAgICAgICAgICAgICAgICAgICBpZiAoIWhhc05l
d0xpbmUpCi0gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0ICs9ICdcbic7Ci0gICAgICAgICAg
ICAgICAgICAgIGhhc05ld0xpbmUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LQotICAgICAgICAgICAgICAgIGNhc2UgSURfTEk6Ci0gICAgICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBpLCBjb3VudCA9IGxpc3RJdGVtcy5jb3VudCgpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsaXN0SXRlbXMuYXQoaSkgPT0gbil7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RJdGVtTG9jYXRpb25zW2ldLmVuZCA9IFty
ZXN1bHQgbGVuZ3RoXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGludCBpLCBjb3VudCA9IGxpc3RJdGVtcy5jb3VudCgpOworICAgICAg
ICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKXsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGxpc3RJdGVtcy5hdChpKSA9PSBuKXsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxp
c3RJdGVtTG9jYXRpb25zW2ldLmVuZCA9IFtyZXN1bHQgbGVuZ3RoXTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgIGlmICghaGFzTmV3TGluZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHRleHQgKz0gJ1xu
JzsKLSAgICAgICAgICAgICAgICAgICAgaGFzTmV3TGluZSA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgY2FzZSBJRF9URDoKLSAgICAgICAgICAg
ICAgICBjYXNlIElEX1RIOgotICAgICAgICAgICAgICAgIGNhc2UgSURfSFI6Ci0gICAgICAgICAg
ICAgICAgY2FzZSBJRF9ERDoKLSAgICAgICAgICAgICAgICBjYXNlIElEX0RMOgotICAgICAgICAg
ICAgICAgIGNhc2UgSURfRFQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBJRF9QUkU6Ci0gICAgICAg
ICAgICAgICAgY2FzZSBJRF9CTE9DS1FVT1RFOgotICAgICAgICAgICAgICAgIGNhc2UgSURfRElW
OgotICAgICAgICAgICAgICAgICAgICBpZiAoIWhhc05ld0xpbmUpCi0gICAgICAgICAgICAgICAg
ICAgICAgICB0ZXh0ICs9ICdcbic7Ci0gICAgICAgICAgICAgICAgICAgIGhhc05ld0xpbmUgPSB0
cnVlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIElE
X1A6Ci0gICAgICAgICAgICAgICAgY2FzZSBJRF9UUjoKLSAgICAgICAgICAgICAgICBjYXNlIElE
X0gxOgotICAgICAgICAgICAgICAgIGNhc2UgSURfSDI6Ci0gICAgICAgICAgICAgICAgY2FzZSBJ
RF9IMzoKLSAgICAgICAgICAgICAgICBjYXNlIElEX0g0OgotICAgICAgICAgICAgICAgIGNhc2Ug
SURfSDU6Ci0gICAgICAgICAgICAgICAgY2FzZSBJRF9INjoKLSAgICAgICAgICAgICAgICAgICAg
aWYgKCFoYXNOZXdMaW5lKQotICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCArPSAnXG4nOwot
ICAgICAgICAgICAgICAgICAgICAvLyBBbiBleHRyYSBuZXdsaW5lIGlzIG5lZWRlZCBhdCB0aGUg
c3RhcnQsIG5vdCB0aGUgZW5kLCBvZiB0aGVzZSB0eXBlcyBvZiB0YWdzLAotICAgICAgICAgICAg
ICAgICAgICAvLyBzbyBkb24ndCBhZGQgYW5vdGhlciBoZXJlLgotICAgICAgICAgICAgICAgICAg
ICBoYXNOZXdMaW5lID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICghaGFzTmV3TGluZSkKKyAgICAgICAgICAg
ICAgICAgICAgdGV4dCArPSAnXG4nOworICAgICAgICAgICAgICAgIGhhc05ld0xpbmUgPSB0cnVl
OworICAgICAgICAgICAgfSBlbHNlIGlmIChuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGQoKSkg
fHwKKyAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRoKCkp
IHx8CisgICAgICAgICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpocigp
KSB8fAorICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZGQo
KSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmRs
KCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpk
dCgpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
cHJlKCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjpibG9ja3F1b3RlKCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjpkaXYoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWhhc05ld0xpbmUpCisg
ICAgICAgICAgICAgICAgICAgIHRleHQgKz0gJ1xuJzsKKyAgICAgICAgICAgICAgICBoYXNOZXdM
aW5lID0gdHJ1ZTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobi0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OnAoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OnRyKCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjpoMSgpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6aDIoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OmgzKCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjpoNCgpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6aDUoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6Omg2KCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFoYXNOZXdMaW5lKQorICAg
ICAgICAgICAgICAgICAgICB0ZXh0ICs9ICdcbic7CisgICAgICAgICAgICAgICAgLy8gQW4gZXh0
cmEgbmV3bGluZSBpcyBuZWVkZWQgYXQgdGhlIHN0YXJ0LCBub3QgdGhlIGVuZCwgb2YgdGhlc2Ug
dHlwZXMgb2YgdGFncywKKyAgICAgICAgICAgICAgICAvLyBzbyBkb24ndCBhZGQgYW5vdGhlciBo
ZXJlLgorICAgICAgICAgICAgICAgIGhhc05ld0xpbmUgPSB0cnVlOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgCiAgICAgICAgICAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKnBhcnRpYWxTdHJp
bmcgPSBbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6dGV4dC5nZXRO
U1N0cmluZygpXTsKQEAgLTM0NzYsNyArMzQ0Miw3IEBAIFJlbmRlclN0eWxlICpLV1FLSFRNTFBh
cnQ6OnN0eWxlRm9yU2VsZWMKICAgICAgICAgcmV0dXJuIG5vZGUtPnJlbmRlcmVyKCktPnN0eWxl
KCk7CiAKICAgICBpbnQgZXhjZXB0aW9uQ29kZSA9IDA7Ci0gICAgRWxlbWVudEltcGwgKnN0eWxl
RWxlbWVudCA9IHhtbERvY0ltcGwoKS0+Y3JlYXRlSFRNTEVsZW1lbnQoInNwYW4iLCBleGNlcHRp
b25Db2RlKTsKKyAgICBFbGVtZW50SW1wbCAqc3R5bGVFbGVtZW50ID0geG1sRG9jSW1wbCgpLT5j
cmVhdGVFbGVtZW50TlMoWEhUTUxfTkFNRVNQQUNFLCAic3BhbiIsIGV4Y2VwdGlvbkNvZGUpOwog
ICAgIEFTU0VSVChleGNlcHRpb25Db2RlID09IDApOwogCiAgICAgc3R5bGVFbGVtZW50LT5yZWYo
KTsKQEAgLTM3MDMsNyArMzY2OSw3IEBAIHZvaWQgS1dRS0hUTUxQYXJ0OjpzZXRTZWxlY3Rpb25G
cm9tTm9uZSgKICAgICAgICAgd2hpbGUgKG5vZGUpIHsKICAgICAgICAgICAgIC8vIExvb2sgZm9y
IGEgYmxvY2sgZmxvdywgYnV0IHNraXAgb3ZlciB0aGUgSFRNTCBlbGVtZW50LCBzaW5jZSB3ZSBy
ZWFsbHkKICAgICAgICAgICAgIC8vIHdhbnQgdG8gZ2V0IGF0IGxlYXN0IGFzIGZhciBhcyB0aGUg
dGhlIEJPRFkgZWxlbWVudCBpbiBhIGRvY3VtZW50LgotICAgICAgICAgICAgaWYgKG5vZGUtPmlz
QmxvY2tGbG93KCkgJiYgbm9kZS0+aWRlbnRpZmllcigpICE9IElEX0hUTUwpCisgICAgICAgICAg
ICBpZiAobm9kZS0+aXNCbG9ja0Zsb3coKSAmJiBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
aHRtbCgpKSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIG5vZGUgPSBub2Rl
LT50cmF2ZXJzZU5leHROb2RlKCk7CiAgICAgICAgIH0KSW5kZXg6IGt3cS9LV1FSZW5kZXJUcmVl
RGVidWcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9LV1FS
ZW5kZXJUcmVlRGVidWcuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjQxCmRpZmYgLXUgLXAg
LXIxLjQxIGt3cS9LV1FSZW5kZXJUcmVlRGVidWcuY3BwCi0tLSBrd3EvS1dRUmVuZGVyVHJlZURl
YnVnLmNwcAkxNiBNYXkgMjAwNSAyMjowMzo0OCAtMDAwMAkxLjQxCisrKyBrd3EvS1dRUmVuZGVy
VHJlZURlYnVnLmNwcAk4IEp1bCAyMDA1IDA1OjUxOjAwIC0wMDAwCkBAIC0yNyw3ICsyNyw2IEBA
CiAKICNpbmNsdWRlICJkb21fZG9jaW1wbC5oIgogI2luY2x1ZGUgImRvbV9wb3NpdGlvbi5oIgot
I2luY2x1ZGUgImh0bWx0YWdzLmgiCiAjaW5jbHVkZSAianNlZGl0aW5nLmgiCiAjaW5jbHVkZSAi
a2h0bWx2aWV3LmgiCiAjaW5jbHVkZSAicmVuZGVyX2NhbnZhcy5oIgpAQCAtMTE2LDkgKzExNSwx
MyBAQCBzdGF0aWMgUVN0cmluZyBnZXRUYWdOYW1lKE5vZGVJbXBsICpuKQogewogICAgIGlmIChu
LT5pc0RvY3VtZW50Tm9kZSgpKQogICAgICAgICByZXR1cm4gIiI7Ci0gICAgaWYgKG4tPmlkKCkg
PD0gSURfTEFTVF9UQUcpCi0gICAgICAgIHJldHVybiBnZXRUYWdOYW1lKG4tPmlkKCkpLnN0cmlu
ZygpOwotICAgIHJldHVybiBuLT5ub2RlTmFtZSgpLnN0cmluZygpOworICAgIGlmIChuLT5pc1Rl
eHROb2RlKCkpCisgICAgICAgIHJldHVybiAiVEVYVCI7IC8vIEZJWE1FOiBSZW1vdmUgb25jZSB0
aGUgbGF5b3V0IHRlc3RzIGFyZSByZWFkeSB0byBjaGFuZ2UuCisgICAgaWYgKG4tPmlzQ29tbWVu
dE5vZGUoKSkKKyAgICAgICAgcmV0dXJuICJDT01NRU5UIjsKKyAgICBpZiAobi0+aXNIVE1MRWxl
bWVudCgpKQorICAgICAgICByZXR1cm4gbi0+bm9kZU5hbWUoKS51cHBlcigpLnN0cmluZygpOyAv
LyBGSVhNRTogV2Ugd2FudCB0byBkdW1wIHRoZSByZWFsIERPTSBuYW1lLCBub3QgYW4gdXBwZXJj
YXNlIG5hbWUuCisgICAgcmV0dXJuIG4tPm5vZGVOYW1lKCkuc3RyaW5nKCk7IAogfQogCiBzdGF0
aWMgUVRleHRTdHJlYW0gJm9wZXJhdG9yPDwoUVRleHRTdHJlYW0gJnRzLCBjb25zdCBSZW5kZXJP
YmplY3QgJm8pCkluZGV4OiBrd3EvV2ViQ29yZUJyaWRnZS5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3EvV2ViQ29yZUJyaWRnZS5tbSx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS4zOTYKZGlmZiAtdSAtcCAtcjEuMzk2IGt3cS9XZWJDb3JlQnJpZGdlLm1tCi0tLSBr
d3EvV2ViQ29yZUJyaWRnZS5tbQkxNCBKdW4gMjAwNSAwMDoyMzo0NSAtMDAwMAkxLjM5NgorKysg
a3dxL1dlYkNvcmVCcmlkZ2UubW0JOCBKdWwgMjAwNSAwNTo1MTowMyAtMDAwMApAQCAtMzksNyAr
MzksNiBAQAogI2ltcG9ydCAiaHRtbF9pbWFnZWltcGwuaCIKICNpbXBvcnQgImh0bWxhdHRycy5o
IgogI2ltcG9ydCAiaHRtbGVkaXRpbmcuaCIKLSNpbXBvcnQgImh0bWx0YWdzLmgiCiAjaW1wb3J0
ICJraHRtbF9wYXJ0LmgiCiAjaW1wb3J0ICJraHRtbHZpZXcuaCIKICNpbXBvcnQgImtqc19wcm94
eS5oIgpAQCAtNjcsNyArNjYsNiBAQAogI2ltcG9ydCAiS1dRQXNzZXJ0aW9ucy5oIgogI2ltcG9y
dCAiS1dRQ2hhcnNldHMuaCIKICNpbXBvcnQgIktXUUNsaXBib2FyZC5oIgotI2ltcG9ydCAiS1dR
RE9NTm9kZS5oIgogI2ltcG9ydCAiS1dRRWRpdENvbW1hbmQuaCIKICNpbXBvcnQgIktXUUZvbnQu
aCIKICNpbXBvcnQgIktXUUZvdW5kYXRpb25FeHRyYXMuaCIKQEAgLTEwMCw2ICs5OCw3IEBAIHVz
aW5nIERPTTo6SFRNTEZvcm1FbGVtZW50SW1wbDsKIHVzaW5nIERPTTo6SFRNTEdlbmVyaWNGb3Jt
RWxlbWVudEltcGw7CiB1c2luZyBET006OkhUTUxJbWFnZUVsZW1lbnRJbXBsOwogdXNpbmcgRE9N
OjpIVE1MSW5wdXRFbGVtZW50SW1wbDsKK3VzaW5nIERPTTo6SFRNTE5hbWVzOwogdXNpbmcgRE9N
OjpOb2RlSW1wbDsKIHVzaW5nIERPTTo6UG9zaXRpb247CiB1c2luZyBET006OlJhbmdlSW1wbDsK
QEAgLTkxMyw3ICs5MTIsNyBAQCBzdGF0aWMgTlNWaWV3ICp2aWV3Rm9yRWxlbWVudChFbGVtZW50
SW1wCiBzdGF0aWMgSFRNTElucHV0RWxlbWVudEltcGwgKmlucHV0RWxlbWVudEZyb21ET01FbGVt
ZW50KERPTUVsZW1lbnQgKmVsZW1lbnQpCiB7CiAgICAgTm9kZUltcGwgKm5vZGUgPSBbZWxlbWVu
dCBfbm9kZUltcGxdOwotICAgIGlmIChub2RlICYmIGlkRnJvbU5vZGUobm9kZSkgPT0gSURfSU5Q
VVQpIHsKKyAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmlucHV0KCkpKSB7CiAg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50SW1wbCAqPihub2RlKTsK
ICAgICB9CiAgICAgcmV0dXJuIG5pbDsKQEAgLTkyNiw3ICs5MjUsNyBAQCBzdGF0aWMgSFRNTEZv
cm1FbGVtZW50SW1wbCAqZm9ybUVsZW1lbnRGCiAgICAgLy8gbWFwcy5nb29nbGUuY29tIGNyYXNo
ZXMgb3RoZXJ3aXNlIGJlY2F1c2UgaXQgaXMgYW4geHNsdCBmaWxlCiAgICAgLy8gdGhhdCBjb250
YWlucyA8Zm9ybT4gZWxlbWVudHMgdGhhdCBhcmVuJ3QgaW4gYW55IG5hbWVzcGFjZSwgc28KICAg
ICAvLyB0aGV5IGNvbWUgb3V0IGFzIGdlbmVyaWMgQ01MIGVsZW1lbnRzCi0gICAgaWYgKG5vZGUg
JiYgbm9kZS0+aXNIVE1MRWxlbWVudCgpICYmIGlkRnJvbU5vZGUobm9kZSkgPT0gSURfRk9STSkg
eworICAgIGlmIChub2RlICYmIG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpmb3JtKCkpKSB7
CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnRJbXBsICo+KG5vZGUp
OwogICAgIH0KICAgICByZXR1cm4gbmlsOwpAQCAtMTA5Niw3ICsxMDk1LDcgQEAgc3RhdGljIEhU
TUxGb3JtRWxlbWVudEltcGwgKmZvcm1FbGVtZW50RgogICAgIAogICAgICAgICAgICAgLy8gRklY
TUU6IENvZGUgY29waWVkIGZyb20gUmVuZGVySW1hZ2U6OnVwZGF0ZUZyb21FbGVtZW50OyBzaG91
bGQgc2hhcmUuCiAgICAgICAgICAgICBET01TdHJpbmcgYXR0cjsKLSAgICAgICAgICAgIGlmIChp
ZEZyb21Ob2RlKGkpID09IElEX09CSkVDVCkgeworICAgICAgICAgICAgaWYgKGktPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjpvYmplY3QoKSkpIHsKICAgICAgICAgICAgICAgICBhdHRyID0gaS0+Z2V0
QXR0cmlidXRlKEFUVFJfREFUQSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
ICAgIGF0dHIgPSBpLT5nZXRBdHRyaWJ1dGUoQVRUUl9TUkMpOwpAQCAtMTEwOCw5ICsxMTA3LDkg
QEAgc3RhdGljIEhUTUxGb3JtRWxlbWVudEltcGwgKmZvcm1FbGVtZW50RgogICAgICAgICAgICAg
CiAgICAgICAgICAgICAvLyBGSVhNRTogQ29kZSBjb3BpZWQgZnJvbSBSZW5kZXJJbWFnZTo6dXBk
YXRlRnJvbUVsZW1lbnQ7IHNob3VsZCBzaGFyZS4KICAgICAgICAgICAgIERPTVN0cmluZyBhbHQ7
Ci0gICAgICAgICAgICBpZiAoaWRGcm9tTm9kZShpKSA9PSBJRF9JTlBVVCkKKyAgICAgICAgICAg
IGlmIChpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW5wdXQoKSkpCiAgICAgICAgICAgICAgICAg
YWx0ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudEltcGwgKj4oaSktPmFsdFRleHQoKTsK
LSAgICAgICAgICAgIGVsc2UgaWYgKGlkRnJvbU5vZGUoaSkgPT0gSURfSU1HKQorICAgICAgICAg
ICAgZWxzZSBpZiAoaS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmltZygpKSkKICAgICAgICAgICAg
ICAgICBhbHQgPSBzdGF0aWNfY2FzdDxIVE1MSW1hZ2VFbGVtZW50SW1wbCAqPihpKS0+YWx0VGV4
dCgpOwogICAgICAgICAgICAgaWYgKCFhbHQuaXNOdWxsKCkpIHsKICAgICAgICAgICAgICAgICBR
U3RyaW5nIGFsdFRleHQgPSBhbHQuc3RyaW5nKCk7CkluZGV4OiBsYXlvdXQtdGVzdHMvZmFzdC9k
b20vY3NzLWRvbS1yZWFkLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvV2ViQ29yZS9sYXlvdXQtdGVzdHMvZmFzdC9kb20vY3NzLWRvbS1yZWFkLWV4cGVjdGVkLnR4
dCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXUgLXAgLXIxLjEgbGF5b3V0LXRlc3Rz
L2Zhc3QvZG9tL2Nzcy1kb20tcmVhZC1leHBlY3RlZC50eHQKLS0tIGxheW91dC10ZXN0cy9mYXN0
L2RvbS9jc3MtZG9tLXJlYWQtZXhwZWN0ZWQudHh0CTE5IEp1biAyMDA1IDA2OjM4OjA5IC0wMDAw
CTEuMQorKysgbGF5b3V0LXRlc3RzL2Zhc3QvZG9tL2Nzcy1kb20tcmVhZC1leHBlY3RlZC50eHQJ
OCBKdWwgMjAwNSAwNTo1MTowNSAtMDAwMApAQCAtOSw1ICs5LDUgQEAgU2VyaWFsaXplZCBzdHls
ZSwgdXNpbmcgQ1NTIERPTToKIC50d28geyBkaXNwbGF5OiBpbmxpbmU7IH0KIC50aHJlZSB7IGRp
c3BsYXk6IGxpc3QtaXRlbTsgbGlzdC1zdHlsZS10eXBlOiBzcXVhcmU7IG1hcmdpbi1sZWZ0OiAz
ZW07IH0KIC5mb3VyIHsgZGlzcGxheTogbm9uZTsgY29sb3I6IHJlZDsgfQotSSB7IGRpc3BsYXk6
IGJsb2NrOyB9CitpIHsgZGlzcGxheTogYmxvY2s7IH0KIApJbmRleDogbGF5b3V0LXRlc3RzL2Zh
c3Qvb3ZlcmZsb3cvMDAzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvV2ViQ29yZS9sYXlvdXQtdGVzdHMvZmFzdC9vdmVyZmxvdy8wMDMtZXhwZWN0ZWQudHh0LHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjEwCmRpZmYgLXUgLXAgLXIxLjEwIGxheW91dC10ZXN0cy9m
YXN0L292ZXJmbG93LzAwMy1leHBlY3RlZC50eHQKLS0tIGxheW91dC10ZXN0cy9mYXN0L292ZXJm
bG93LzAwMy1leHBlY3RlZC50eHQJMTEgRmViIDIwMDUgMjI6NTk6MDcgLTAwMDAJMS4xMAorKysg
bGF5b3V0LXRlc3RzL2Zhc3Qvb3ZlcmZsb3cvMDAzLWV4cGVjdGVkLnR4dAk4IEp1bCAyMDA1IDA1
OjUxOjA2IC0wMDAwCkBAIC00LDE0ICs0LDE0IEBAIGxheWVyIGF0ICgxMCwxMCkgc2l6ZSA3ODB4
MzAyCiAgIFJlbmRlckJsb2NrIHtmYWtlfSBhdCAoMTAsMTApIHNpemUgNzgweDMwMiBbYmdjb2xv
cj0jRkZGRjAwXQogbGF5ZXIgYXQgKDEwLDEwKSBzaXplIDI4MngzMDIgY2xpcCBhdCAoMTEsMTEp
IHNpemUgMjY1eDMwMCBzY3JvbGxIZWlnaHQgMTI5MgogICBSZW5kZXJCbG9jayB7Y2hhbm5lbH0g
YXQgKDAsMCkgc2l6ZSAyODJ4MzAyIFtiZ2NvbG9yPSNFRUVFRUVdIFtib3JkZXI6ICgxcHggc29s
aWQgIzAwMDAwMCldCi0gICAgUmVuZGVyQmxvY2sge1RJVExFfSBhdCAoMTEsMTEpIHNpemUgMjU1
eDE5CisgICAgUmVuZGVyQmxvY2sge3RpdGxlfSBhdCAoMTEsMTEpIHNpemUgMjU1eDE5CiAgICAg
ICBSZW5kZXJUZXh0IHtURVhUfSBhdCAoMCwwKSBzaXplIDE1NHgxOQogICAgICAgICB0ZXh0IHJ1
biBhdCAoMCwwKSB3aWR0aCAxNTQ6ICJzY290dGFuZHJldy5jb20iCiAgICAgUmVuZGVyQmxvY2sg
e2Rlc2NyaXB0aW9ufSBhdCAoMTEsNDApIHNpemUgMjU1eDEyCiAgICAgICBSZW5kZXJUZXh0IHtU
RVhUfSBhdCAoMCwwKSBzaXplIDE5MXgxMgogICAgICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0
aCAxOTE6ICJESFRNTCwgRE9NIGFuZCBKYXZhU2NyaXB0IE5ld3MiCiAgICAgUmVuZGVyQmxvY2sg
e2l0ZW19IGF0ICgxLDYyKSBzaXplIDI2NXg5NyBbYmdjb2xvcj0jRkZGRkZGXSBbYm9yZGVyOiAo
MXB4IHNvbGlkICNDQ0NDQ0MpIG5vbmUgKDFweCBzb2xpZCAjQ0NDQ0NDKSBub25lXQotICAgICAg
UmVuZGVySW5saW5lIHtUSVRMRX0gYXQgKDAsMCkgc2l6ZSAyMzN4MTUKKyAgICAgIFJlbmRlcklu
bGluZSB7dGl0bGV9IGF0ICgwLDApIHNpemUgMjMzeDE1CiAgICAgICAgIFJlbmRlclRleHQge1RF
WFR9IGF0ICgxMCwxMSkgc2l6ZSAyMzN4MTUKICAgICAgICAgICB0ZXh0IHJ1biBhdCAoMTAsMTEp
IHdpZHRoIDIzMzogIkRIVE1MIEFuaW1hdGlvbiBBcnJheSBHZW5lcmF0b3IiCiAgICAgICBSZW5k
ZXJUZXh0IHtURVhUfSBhdCAoMCwwKSBzaXplIDB4MApAQCAtMjQsNyArMjQsNyBAQCBsYXllciBh
dCAoMTAsMTApIHNpemUgMjgyeDMwMiBjbGlwIGF0ICgxCiAgICAgICBSZW5kZXJUZXh0IHtURVhU
fSBhdCAoMCwwKSBzaXplIDB4MAogICAgICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQgKDAsMCkgc2l6
ZSAweDAKICAgICBSZW5kZXJCbG9jayB7aXRlbX0gYXQgKDEsMTY5KSBzaXplIDI2NXg4MiBbYmdj
b2xvcj0jRkZGRkZGXSBbYm9yZGVyOiAoMXB4IHNvbGlkICNDQ0NDQ0MpIG5vbmUgKDFweCBzb2xp
ZCAjQ0NDQ0NDKSBub25lXQotICAgICAgUmVuZGVySW5saW5lIHtUSVRMRX0gYXQgKDAsMCkgc2l6
ZSAxNzd4MTUKKyAgICAgIFJlbmRlcklubGluZSB7dGl0bGV9IGF0ICgwLDApIHNpemUgMTc3eDE1
CiAgICAgICAgIFJlbmRlclRleHQge1RFWFR9IGF0ICgxMCwxMSkgc2l6ZSAxNzd4MTUKICAgICAg
ICAgICB0ZXh0IHJ1biBhdCAoMTAsMTEpIHdpZHRoIDE3NzogIkRPTSBhbmQgRXh0ZW5kZWQgRW50
cmllcyIKICAgICAgIFJlbmRlclRleHQge1RFWFR9IGF0ICgxODcsMTEpIHNpemUgNHgxNQpAQCAt
MzgsNyArMzgsNyBAQCBsYXllciBhdCAoMTAsMTApIHNpemUgMjgyeDMwMiBjbGlwIGF0ICgxCiAg
ICAgICBSZW5kZXJUZXh0IHtURVhUfSBhdCAoMCwwKSBzaXplIDB4MAogICAgICAgUmVuZGVyVGV4
dCB7VEVYVH0gYXQgKDAsMCkgc2l6ZSAweDAKICAgICBSZW5kZXJCbG9jayB7aXRlbX0gYXQgKDEs
MjYxKSBzaXplIDI2NXg4MiBbYmdjb2xvcj0jRkZGRkZGXSBbYm9yZGVyOiAoMXB4IHNvbGlkICND
Q0NDQ0MpIG5vbmUgKDFweCBzb2xpZCAjQ0NDQ0NDKSBub25lXQotICAgICAgUmVuZGVySW5saW5l
IHtUSVRMRX0gYXQgKDAsMCkgc2l6ZSAxNjR4MTUKKyAgICAgIFJlbmRlcklubGluZSB7dGl0bGV9
IGF0ICgwLDApIHNpemUgMTY0eDE1CiAgICAgICAgIFJlbmRlclRleHQge1RFWFR9IGF0ICgxMCwx
MSkgc2l6ZSAxNjR4MTUKICAgICAgICAgICB0ZXh0IHJ1biBhdCAoMTAsMTEpIHdpZHRoIDE2NDog
ImNlbGxzcGFjaW5nIGFuZCB0aGUgRE9NIgogICAgICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQgKDE3
NCwxMSkgc2l6ZSA0eDE1CkBAIC01Miw3ICs1Miw3IEBAIGxheWVyIGF0ICgxMCwxMCkgc2l6ZSAy
ODJ4MzAyIGNsaXAgYXQgKDEKICAgICAgIFJlbmRlclRleHQge1RFWFR9IGF0ICgwLDApIHNpemUg
MHgwCiAgICAgICBSZW5kZXJUZXh0IHtURVhUfSBhdCAoMCwwKSBzaXplIDB4MAogICAgIFJlbmRl
ckJsb2NrIHtpdGVtfSBhdCAoMSwzNTMpIHNpemUgMjY1eDk3IFtiZ2NvbG9yPSNGRkZGRkZdIFti
b3JkZXI6ICgxcHggc29saWQgI0NDQ0NDQykgbm9uZSAoMXB4IHNvbGlkICNDQ0NDQ0MpIG5vbmVd
Ci0gICAgICBSZW5kZXJJbmxpbmUge1RJVExFfSBhdCAoMCwwKSBzaXplIDE3N3gxNQorICAgICAg
UmVuZGVySW5saW5lIHt0aXRsZX0gYXQgKDAsMCkgc2l6ZSAxNzd4MTUKICAgICAgICAgUmVuZGVy
VGV4dCB7VEVYVH0gYXQgKDEwLDExKSBzaXplIDE3N3gxNQogICAgICAgICAgIHRleHQgcnVuIGF0
ICgxMCwxMSkgd2lkdGggMTc3OiAiY29udGVudGVkaXRhYmxlIGZvciBNb3ppbGxhIgogICAgICAg
UmVuZGVyVGV4dCB7VEVYVH0gYXQgKDE4NywxMSkgc2l6ZSA0eDE1CkBAIC02Nyw3ICs2Nyw3IEBA
IGxheWVyIGF0ICgxMCwxMCkgc2l6ZSAyODJ4MzAyIGNsaXAgYXQgKDEKICAgICAgIFJlbmRlclRl
eHQge1RFWFR9IGF0ICgwLDApIHNpemUgMHgwCiAgICAgICBSZW5kZXJUZXh0IHtURVhUfSBhdCAo
MCwwKSBzaXplIDB4MAogICAgIFJlbmRlckJsb2NrIHtpdGVtfSBhdCAoMSw0NjApIHNpemUgMjY1
eDgyIFtiZ2NvbG9yPSNGRkZGRkZdIFtib3JkZXI6ICgxcHggc29saWQgI0NDQ0NDQykgbm9uZSAo
MXB4IHNvbGlkICNDQ0NDQ0MpIG5vbmVdCi0gICAgICBSZW5kZXJJbmxpbmUge1RJVExFfSBhdCAo
MCwwKSBzaXplIDE4MngzMAorICAgICAgUmVuZGVySW5saW5lIHt0aXRsZX0gYXQgKDAsMCkgc2l6
ZSAxODJ4MzAKICAgICAgICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQgKDEwLDExKSBzaXplIDE4Mngz
MAogICAgICAgICAgIHRleHQgcnVuIGF0ICgxMCwxMSkgd2lkdGggMTgyOiAiREhUTUwgVGltZWxp
bmUvS2V5ZnJhbWUiCiAgICAgICAgICAgdGV4dCBydW4gYXQgKDEwLDI2KSB3aWR0aCA2OTogIkFu
aW1hdGlvbiIKQEAgLTgxLDcgKzgxLDcgQEAgbGF5ZXIgYXQgKDEwLDEwKSBzaXplIDI4MngzMDIg
Y2xpcCBhdCAoMQogICAgICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQgKDAsMCkgc2l6ZSAweDAKICAg
ICAgIFJlbmRlclRleHQge1RFWFR9IGF0ICgwLDApIHNpemUgMHgwCiAgICAgUmVuZGVyQmxvY2sg
e2l0ZW19IGF0ICgxLDU1Mikgc2l6ZSAyNjV4OTcgW2JnY29sb3I9I0ZGRkZGRl0gW2JvcmRlcjog
KDFweCBzb2xpZCAjQ0NDQ0NDKSBub25lICgxcHggc29saWQgI0NDQ0NDQykgbm9uZV0KLSAgICAg
IFJlbmRlcklubGluZSB7VElUTEV9IGF0ICgwLDApIHNpemUgMTU3eDMwCisgICAgICBSZW5kZXJJ
bmxpbmUge3RpdGxlfSBhdCAoMCwwKSBzaXplIDE1N3gzMAogICAgICAgICBSZW5kZXJUZXh0IHtU
RVhUfSBhdCAoMTAsMTEpIHNpemUgMTU3eDMwCiAgICAgICAgICAgdGV4dCBydW4gYXQgKDEwLDEx
KSB3aWR0aCAxNTc6ICJEeW5BUEkgMi45IGFuZCBNb3ppbGxhIgogICAgICAgICAgIHRleHQgcnVu
IGF0ICgxMCwyNikgd2lkdGggMTI0OiAiY29tcGF0aWJpbGl0eSBwb3J0cyIKQEAgLTk2LDcgKzk2
LDcgQEAgbGF5ZXIgYXQgKDEwLDEwKSBzaXplIDI4MngzMDIgY2xpcCBhdCAoMQogICAgICAgUmVu
ZGVyVGV4dCB7VEVYVH0gYXQgKDAsMCkgc2l6ZSAweDAKICAgICAgIFJlbmRlclRleHQge1RFWFR9
IGF0ICgwLDApIHNpemUgMHgwCiAgICAgUmVuZGVyQmxvY2sge2l0ZW19IGF0ICgxLDY1OSkgc2l6
ZSAyNjV4NjcgW2JnY29sb3I9I0ZGRkZGRl0gW2JvcmRlcjogKDFweCBzb2xpZCAjQ0NDQ0NDKSBu
b25lICgxcHggc29saWQgI0NDQ0NDQykgbm9uZV0KLSAgICAgIFJlbmRlcklubGluZSB7VElUTEV9
IGF0ICgwLDApIHNpemUgMTU0eDE1CisgICAgICBSZW5kZXJJbmxpbmUge3RpdGxlfSBhdCAoMCww
KSBzaXplIDE1NHgxNQogICAgICAgICBSZW5kZXJUZXh0IHtURVhUfSBhdCAoMTAsMTEpIHNpemUg
MTU0eDE1CiAgICAgICAgICAgdGV4dCBydW4gYXQgKDEwLDExKSB3aWR0aCAxNTQ6ICIhbGluZURy
YXcgYm9va21hcmtsZXQiCiAgICAgICBSZW5kZXJUZXh0IHtURVhUfSBhdCAoMTY0LDExKSBzaXpl
IDR4MTUKQEAgLTEwOSw3ICsxMDksNyBAQCBsYXllciBhdCAoMTAsMTApIHNpemUgMjgyeDMwMiBj
bGlwIGF0ICgxCiAgICAgICBSZW5kZXJUZXh0IHtURVhUfSBhdCAoMCwwKSBzaXplIDB4MAogICAg
ICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQgKDAsMCkgc2l6ZSAweDAKICAgICBSZW5kZXJCbG9jayB7
aXRlbX0gYXQgKDEsNzM2KSBzaXplIDI2NXg5NyBbYmdjb2xvcj0jRkZGRkZGXSBbYm9yZGVyOiAo
MXB4IHNvbGlkICNDQ0NDQ0MpIG5vbmUgKDFweCBzb2xpZCAjQ0NDQ0NDKSBub25lXQotICAgICAg
UmVuZGVySW5saW5lIHtUSVRMRX0gYXQgKDAsMCkgc2l6ZSAyMDF4MTUKKyAgICAgIFJlbmRlcklu
bGluZSB7dGl0bGV9IGF0ICgwLDApIHNpemUgMjAxeDE1CiAgICAgICAgIFJlbmRlclRleHQge1RF
WFR9IGF0ICgxMCwxMSkgc2l6ZSAyMDF4MTUKICAgICAgICAgICB0ZXh0IHJ1biBhdCAoMTAsMTEp
IHdpZHRoIDIwMTogIk1vemlsbGEsIERIVE1MIGFuZCBET00gbGlua3MiCiAgICAgICBSZW5kZXJU
ZXh0IHtURVhUfSBhdCAoMjExLDExKSBzaXplIDR4MTUKQEAgLTEyNCw3ICsxMjQsNyBAQCBsYXll
ciBhdCAoMTAsMTApIHNpemUgMjgyeDMwMiBjbGlwIGF0ICgxCiAgICAgICBSZW5kZXJUZXh0IHtU
RVhUfSBhdCAoMCwwKSBzaXplIDB4MAogICAgICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQgKDAsMCkg
c2l6ZSAweDAKICAgICBSZW5kZXJCbG9jayB7aXRlbX0gYXQgKDEsODQzKSBzaXplIDI2NXg2NyBb
Ymdjb2xvcj0jRkZGRkZGXSBbYm9yZGVyOiAoMXB4IHNvbGlkICNDQ0NDQ0MpIG5vbmUgKDFweCBz
b2xpZCAjQ0NDQ0NDKSBub25lXQotICAgICAgUmVuZGVySW5saW5lIHtUSVRMRX0gYXQgKDAsMCkg
c2l6ZSAxMDN4MTUKKyAgICAgIFJlbmRlcklubGluZSB7dGl0bGV9IGF0ICgwLDApIHNpemUgMTAz
eDE1CiAgICAgICAgIFJlbmRlclRleHQge1RFWFR9IGF0ICgxMCwxMSkgc2l6ZSAxMDN4MTUKICAg
ICAgICAgICB0ZXh0IHJ1biBhdCAoMTAsMTEpIHdpZHRoIDEwMzogIk1vemlsbGEgMS4wIFJDMiIK
ICAgICAgIFJlbmRlclRleHQge1RFWFR9IGF0ICgxMTMsMTEpIHNpemUgNHgxNQpAQCAtMTM3LDcg
KzEzNyw3IEBAIGxheWVyIGF0ICgxMCwxMCkgc2l6ZSAyODJ4MzAyIGNsaXAgYXQgKDEKICAgICAg
IFJlbmRlclRleHQge1RFWFR9IGF0ICgwLDApIHNpemUgMHgwCiAgICAgICBSZW5kZXJUZXh0IHtU
RVhUfSBhdCAoMCwwKSBzaXplIDB4MAogICAgIFJlbmRlckJsb2NrIHtpdGVtfSBhdCAoMSw5MjAp
IHNpemUgMjY1eDk3IFtiZ2NvbG9yPSNGRkZGRkZdIFtib3JkZXI6ICgxcHggc29saWQgI0NDQ0ND
Qykgbm9uZSAoMXB4IHNvbGlkICNDQ0NDQ0MpIG5vbmVdCi0gICAgICBSZW5kZXJJbmxpbmUge1RJ
VExFfSBhdCAoMCwwKSBzaXplIDIzNngzMAorICAgICAgUmVuZGVySW5saW5lIHt0aXRsZX0gYXQg
KDAsMCkgc2l6ZSAyMzZ4MzAKICAgICAgICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQgKDEwLDExKSBz
aXplIDIzNngzMAogICAgICAgICAgIHRleHQgcnVuIGF0ICgxMCwxMSkgd2lkdGggMjM2OiAiamF2
YXNjcmlwdDogaXMgZGVwcmVjYXRlZC4gRG9uJ3QgdXNlIgogICAgICAgICAgIHRleHQgcnVuIGF0
ICgxMCwyNikgd2lkdGggMTM6ICJpdC4iCkBAIC0xNTIsNyArMTUyLDcgQEAgbGF5ZXIgYXQgKDEw
LDEwKSBzaXplIDI4MngzMDIgY2xpcCBhdCAoMQogICAgICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQg
KDAsMCkgc2l6ZSAweDAKICAgICAgIFJlbmRlclRleHQge1RFWFR9IGF0ICgwLDApIHNpemUgMHgw
CiAgICAgUmVuZGVyQmxvY2sge2l0ZW19IGF0ICgxLDEwMjcpIHNpemUgMjY1eDY3IFtiZ2NvbG9y
PSNGRkZGRkZdIFtib3JkZXI6ICgxcHggc29saWQgI0NDQ0NDQykgbm9uZSAoMXB4IHNvbGlkICND
Q0NDQ0MpIG5vbmVdCi0gICAgICBSZW5kZXJJbmxpbmUge1RJVExFfSBhdCAoMCwwKSBzaXplIDE3
NngxNQorICAgICAgUmVuZGVySW5saW5lIHt0aXRsZX0gYXQgKDAsMCkgc2l6ZSAxNzZ4MTUKICAg
ICAgICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQgKDEwLDExKSBzaXplIDE3NngxNQogICAgICAgICAg
IHRleHQgcnVuIGF0ICgxMCwxMSkgd2lkdGggMTc2OiAiQ29uZGl0aW9uYWwgU2NyaXB0IExvYWRp
bmciCiAgICAgICBSZW5kZXJUZXh0IHtURVhUfSBhdCAoMCwwKSBzaXplIDB4MApAQCAtMTYzLDcg
KzE2Myw3IEBAIGxheWVyIGF0ICgxMCwxMCkgc2l6ZSAyODJ4MzAyIGNsaXAgYXQgKDEKICAgICAg
IFJlbmRlclRleHQge1RFWFR9IGF0ICgwLDApIHNpemUgMHgwCiAgICAgICBSZW5kZXJUZXh0IHtU
RVhUfSBhdCAoMCwwKSBzaXplIDB4MAogICAgIFJlbmRlckJsb2NrIHtpdGVtfSBhdCAoMSwxMTA0
KSBzaXplIDI2NXg4MiBbYmdjb2xvcj0jRkZGRkZGXSBbYm9yZGVyOiAoMXB4IHNvbGlkICNDQ0ND
Q0MpIG5vbmUgKDFweCBzb2xpZCAjQ0NDQ0NDKSBub25lXQotICAgICAgUmVuZGVySW5saW5lIHtU
SVRMRX0gYXQgKDAsMCkgc2l6ZSAxMTV4MTUKKyAgICAgIFJlbmRlcklubGluZSB7dGl0bGV9IGF0
ICgwLDApIHNpemUgMTE1eDE1CiAgICAgICAgIFJlbmRlclRleHQge1RFWFR9IGF0ICgxMCwxMSkg
c2l6ZSAxMTV4MTUKICAgICAgICAgICB0ZXh0IHJ1biBhdCAoMTAsMTEpIHdpZHRoIDExNTogIlN0
b3JpZXMgYW5kIFRvb2xzIgogICAgICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQgKDEyNSwxMSkgc2l6
ZSA0eDE1CkBAIC0xNzcsNyArMTc3LDcgQEAgbGF5ZXIgYXQgKDEwLDEwKSBzaXplIDI4MngzMDIg
Y2xpcCBhdCAoMQogICAgICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQgKDAsMCkgc2l6ZSAweDAKICAg
ICAgIFJlbmRlclRleHQge1RFWFR9IGF0ICgwLDApIHNpemUgMHgwCiAgICAgUmVuZGVyQmxvY2sg
e2l0ZW19IGF0ICgxLDExOTYpIHNpemUgMjY1eDk3IFtiZ2NvbG9yPSNGRkZGRkZdIFtib3JkZXI6
ICgxcHggc29saWQgI0NDQ0NDQykgbm9uZSAoMXB4IHNvbGlkICNDQ0NDQ0MpIG5vbmVdCi0gICAg
ICBSZW5kZXJJbmxpbmUge1RJVExFfSBhdCAoMCwwKSBzaXplIDE2NngxNQorICAgICAgUmVuZGVy
SW5saW5lIHt0aXRsZX0gYXQgKDAsMCkgc2l6ZSAxNjZ4MTUKICAgICAgICAgUmVuZGVyVGV4dCB7
VEVYVH0gYXQgKDEwLDExKSBzaXplIDE2NngxNQogICAgICAgICAgIHRleHQgcnVuIGF0ICgxMCwx
MSkgd2lkdGggMTY2OiAiV2hvbGUgTG90dG8gR2Vja28gTGlua3MiCiAgICAgICBSZW5kZXJUZXh0
IHtURVhUfSBhdCAoMTc2LDExKSBzaXplIDR4MTUKSW5kZXg6IGxheW91dC10ZXN0cy9mYXN0L3Rv
a2VuaXplci8wMDItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9X
ZWJDb3JlL2xheW91dC10ZXN0cy9mYXN0L3Rva2VuaXplci8wMDItZXhwZWN0ZWQudHh0LHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtdSAtcCAtcjEuMSBsYXlvdXQtdGVzdHMvZmFzdC90
b2tlbml6ZXIvMDAyLWV4cGVjdGVkLnR4dAotLS0gbGF5b3V0LXRlc3RzL2Zhc3QvdG9rZW5pemVy
LzAwMi1leHBlY3RlZC50eHQJMjYgSnVsIDIwMDQgMjI6NDU6NTEgLTAwMDAJMS4xCisrKyBsYXlv
dXQtdGVzdHMvZmFzdC90b2tlbml6ZXIvMDAyLWV4cGVjdGVkLnR4dAk4IEp1bCAyMDA1IDA1OjUx
OjA3IC0wMDAwCkBAIC0xLDcgKzEsNyBAQAogbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCiAg
IFJlbmRlckNhbnZhcyBhdCAoMCwwKSBzaXplIDgwMHg2MDAKLWxheWVyIGF0ICgwLDApIHNpemUg
ODAweDM0Ci0gIFJlbmRlckJsb2NrIHtIVE1MfSBhdCAoMCwwKSBzaXplIDgwMHgzNAotICAgIFJl
bmRlckJvZHkge0JPRFl9IGF0ICg4LDgpIHNpemUgNzg0eDE4CitsYXllciBhdCAoMCwwKSBzaXpl
IDgwMHg2MDAKKyAgUmVuZGVyQmxvY2sge0hUTUx9IGF0ICgwLDApIHNpemUgODAweDYwMAorICAg
IFJlbmRlckJvZHkge0JPRFl9IGF0ICg4LDgpIHNpemUgNzg0eDU4NAogICAgICAgUmVuZGVyVGV4
dCB7VEVYVH0gYXQgKDAsMCkgc2l6ZSAzMTV4MTgKICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkg
d2lkdGggMzE1OiAieW91IHNob3VsZG4ndCBzZWUgYSByYW5kb20gY2hpbmVzZSBjaGFyYWN0ZXIg
aGVyZSIKSW5kZXg6IGxheW91dC10ZXN0cy9mYXN0L3Rva2VuaXplci9leHRlcm5hbC1zY3JpcHQt
ZG9jdW1lbnQtd3JpdGUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9XZWJDb3JlL2xheW91dC10ZXN0cy9mYXN0L3Rva2VuaXplci9leHRlcm5hbC1zY3JpcHQtZG9j
dW1lbnQtd3JpdGUtZXhwZWN0ZWQudHh0LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAt
dSAtcCAtcjEuMSBsYXlvdXQtdGVzdHMvZmFzdC90b2tlbml6ZXIvZXh0ZXJuYWwtc2NyaXB0LWRv
Y3VtZW50LXdyaXRlLWV4cGVjdGVkLnR4dAotLS0gbGF5b3V0LXRlc3RzL2Zhc3QvdG9rZW5pemVy
L2V4dGVybmFsLXNjcmlwdC1kb2N1bWVudC13cml0ZS1leHBlY3RlZC50eHQJMTkgT2N0IDIwMDQg
MTk6MDE6MTUgLTAwMDAJMS4xCisrKyBsYXlvdXQtdGVzdHMvZmFzdC90b2tlbml6ZXIvZXh0ZXJu
YWwtc2NyaXB0LWRvY3VtZW50LXdyaXRlLWV4cGVjdGVkLnR4dAk4IEp1bCAyMDA1IDA1OjUxOjA3
IC0wMDAwCkBAIC00LDUgKzQsNSBAQCBsYXllciBhdCAoMCwwKSBzaXplIDgwMHgzNAogICBSZW5k
ZXJCbG9jayB7SFRNTH0gYXQgKDAsMCkgc2l6ZSA4MDB4MzQKICAgICBSZW5kZXJCb2R5IHtCT0RZ
fSBhdCAoOCw4KSBzaXplIDc4NHgxOAogICAgICAgUmVuZGVySW5saW5lIHtTUEFOfSBhdCAoMCww
KSBzaXplIDB4MAotICAgICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQgKDAsMCkgc2l6ZSAyMjZ4MTgK
LSAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggMjI2OiAiVGhpcyBzaG91bGQgYmUgYSBz
cGFuOiBbb2JqZWN0IHNwYW5dIgorICAgICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQgKDAsMCkgc2l6
ZSAyMzl4MTgKKyAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggMjM5OiAiVGhpcyBzaG91
bGQgYmUgYSBzcGFuOiBbb2JqZWN0IFNQQU5dIgpJbmRleDogbGF5b3V0LXRlc3RzL2Zhc3QvdG9r
ZW5pemVyL3NjcmlwdF9leHRyYV9jbG9zZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2N2cy9yb290L1dlYkNvcmUvbGF5b3V0LXRlc3RzL2Zhc3QvdG9rZW5pemVyL3NjcmlwdF9l
eHRyYV9jbG9zZS1leHBlY3RlZC50eHQsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNQpkaWZmIC11
IC1wIC1yMS41IGxheW91dC10ZXN0cy9mYXN0L3Rva2VuaXplci9zY3JpcHRfZXh0cmFfY2xvc2Ut
ZXhwZWN0ZWQudHh0Ci0tLSBsYXlvdXQtdGVzdHMvZmFzdC90b2tlbml6ZXIvc2NyaXB0X2V4dHJh
X2Nsb3NlLWV4cGVjdGVkLnR4dAk2IEp1bCAyMDA1IDE4OjQ5OjA2IC0wMDAwCTEuNQorKysgbGF5
b3V0LXRlc3RzL2Zhc3QvdG9rZW5pemVyL3NjcmlwdF9leHRyYV9jbG9zZS1leHBlY3RlZC50eHQJ
OCBKdWwgMjAwNSAwNTo1MTowNyAtMDAwMApAQCAtNiw3ICs2LDYgQEAgbGF5ZXIgYXQgKDAsMCkg
c2l6ZSA4MDB4NjAwCiAgICAgICBSZW5kZXJUZXh0IHtURVhUfSBhdCAoMCwwKSBzaXplIDU1eDE4
CiAgICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDU1OiAiVEVTVC4uLiAiCiAgICAgICBS
ZW5kZXJUZXh0IHtURVhUfSBhdCAoMCwwKSBzaXplIDB4MAotICAgICAgUmVuZGVyVGV4dCB7VEVY
VH0gYXQgKDAsMCkgc2l6ZSAweDAKICAgICAgIFJlbmRlclRleHQge1RFWFR9IGF0ICg1NSwwKSBz
aXplIDIzMngxOAogICAgICAgICB0ZXh0IHJ1biBhdCAoNTUsMCkgd2lkdGggNjk6ICJQQVNTRUQu
ICIKICAgICAgICAgdGV4dCBydW4gYXQgKDEyNCwwKSB3aWR0aCAxNjM6ICJUaGlzIHRleHQgc2hv
dWxkIHNob3cgdXAuIgpJbmRleDogbGF5b3V0LXRlc3RzL2Zhc3QvdG9rZW5pemVyL3NjcmlwdF9x
dWlyay1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogbGF5b3V0LXRlc3RzL2Zhc3Qv
dG9rZW5pemVyL3NjcmlwdF9xdWlyay1leHBlY3RlZC50eHQKZGlmZiAtTiBsYXlvdXQtdGVzdHMv
ZmFzdC90b2tlbml6ZXIvc2NyaXB0X3F1aXJrLWV4cGVjdGVkLnR4dAotLS0gbGF5b3V0LXRlc3Rz
L2Zhc3QvdG9rZW5pemVyL3NjcmlwdF9xdWlyay1leHBlY3RlZC50eHQJMTcgSnVuIDIwMDUgMjA6
MDA6MTEgLTAwMDAJMS4xCisrKyAvZGV2L251bGwJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMApA
QCAtMSw5ICswLDAgQEAKLWxheWVyIGF0ICgwLDApIHNpemUgODAweDYwMAotICBSZW5kZXJDYW52
YXMgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCi1sYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKLSAg
UmVuZGVyQmxvY2sge0hUTUx9IGF0ICgwLDApIHNpemUgODAweDYwMAotICAgIFJlbmRlckJvZHkg
e0JPRFl9IGF0ICg4LDgpIHNpemUgNzg0eDU4NAotICAgICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQg
KDAsMCkgc2l6ZSAyNzV4MTgKLSAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggMTEyOiAi
VEVTVCBQQVNTRUQuICIKLSAgICAgICAgdGV4dCBydW4gYXQgKDExMiwwKSB3aWR0aCAxNjM6ICJU
aGlzIHRleHQgc2hvdWxkIHNob3cgdXAuIgotICAgICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQgKDAs
MCkgc2l6ZSAweDAKSW5kZXg6IGxheW91dC10ZXN0cy9mYXN0L3Rva2VuaXplci9zY3JpcHRfcXVp
cmsuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiBsYXlvdXQtdGVzdHMvZmFzdC90b2tlbml6ZXIv
c2NyaXB0X3F1aXJrLmh0bWwKZGlmZiAtTiBsYXlvdXQtdGVzdHMvZmFzdC90b2tlbml6ZXIvc2Ny
aXB0X3F1aXJrLmh0bWwKLS0tIGxheW91dC10ZXN0cy9mYXN0L3Rva2VuaXplci9zY3JpcHRfcXVp
cmsuaHRtbAkxNyBKdW4gMjAwNSAyMDowMDoxMSAtMDAwMAkxLjEKKysrIC9kZXYvbnVsbAkxIEph
biAxOTcwIDAwOjAwOjAwIC0wMDAwCkBAIC0xLDYgKzAsMCBAQAotPGh0bWw+Ci08Ym9keT4KLTxz
Y3JpcHQgc3JjPSJyZXNvdXJjZXMvZW1wdHlfc2NyaXB0LmpzIiAvPgotVEVTVCBQQVNTRUQuICBU
aGlzIHRleHQgc2hvdWxkIHNob3cgdXAuCi08L2JvZHk+Ci08L2h0bWwKXCBObyBuZXdsaW5lIGF0
IGVuZCBvZiBmaWxlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>2861</attachid>
            <date>2005-07-07 23:14:52 -0700</date>
            <delta_ts>2005-07-08 20:01:43 -0700</delta_ts>
            <desc>Make sure to include the HTMLElementFactory.</desc>
            <filename>patch-25.txt</filename>
            <type>text/plain</type>
            <size>816253</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUucGJwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvV2ViQ29yZS9XZWJDb3JlLnBicHJvai9wcm9qZWN0LnBieHByb2osdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuNTYxCmRpZmYgLXUgLXAgLXIxLjU2MSBXZWJDb3JlLnBicHJvai9w
cm9qZWN0LnBieHByb2oKLS0tIFdlYkNvcmUucGJwcm9qL3Byb2plY3QucGJ4cHJvagk2IEp1bCAy
MDA1IDAxOjI4OjQxIC0wMDAwCTEuNTYxCisrKyBXZWJDb3JlLnBicHJvai9wcm9qZWN0LnBieHBy
b2oJOCBKdWwgMjAwNSAwNTo1NjozNyAtMDAwMApAQCAtMjE0LDMyICsyMTQsNiBAQAogLy8yRDIK
IC8vMkQzCiAvLzJENAotLy8zNTAKLS8vMzUxCi0vLzM1MgotLy8zNTMKLS8vMzU0Ci0JCTM1NEYy
NDg5MDJFRTI4NTkwQUNBMkFDQSA9IHsKLQkJCWZpbGVFbmNvZGluZyA9IDMwOwotCQkJaXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsKLQkJCWxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
Ci0JCQlwYXRoID0gS1dRRE9NTm9kZS5oOwotCQkJcmVmVHlwZSA9IDQ7Ci0JCQlzb3VyY2VUcmVl
ID0gIjxncm91cD4iOwotCQl9OwotCQkzNTRGMjQ4QTAyRUUyODU5MEFDQTJBQ0EgPSB7Ci0JCQlm
aWxlRW5jb2RpbmcgPSAzMDsKLQkJCWlzYSA9IFBCWEZpbGVSZWZlcmVuY2U7Ci0JCQlsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsKLQkJCXBhdGggPSBLV1FET01Ob2RlLmNw
cDsKLQkJCXJlZlR5cGUgPSA0OwotCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsKLS8v
MzUwCi0vLzM1MQotLy8zNTIKLS8vMzUzCi0vLzM1NAogLy81MTAKIC8vNTExCiAvLzUxMgpAQCAt
MjQ4NSw3ICsyNDU5LDYgQEAKIAkJCQk5M0YxOThEQzA4MjQ1RTU5MDAxRTlBQkMsCiAJCQkJOTNG
MTk4REUwODI0NUU1OTAwMUU5QUJDLAogCQkJCTkzRjE5OEUwMDgyNDVFNTkwMDFFOUFCQywKLQkJ
CQk5M0YxOThFMjA4MjQ1RTU5MDAxRTlBQkMsCiAJCQkJOTNGMTk4RTMwODI0NUU1OTAwMUU5QUJD
LAogCQkJCTkzRjE5OEU0MDgyNDVFNTkwMDFFOUFCQywKIAkJCQk5M0YxOThFNTA4MjQ1RTU5MDAx
RTlBQkMsCkBAIC0yNTYyLDcgKzI1MzUsNiBAQAogCQkJCTkzRjE5OTJFMDgyNDVFNTkwMDFFOUFC
QywKIAkJCQk5M0YxOTkyRjA4MjQ1RTU5MDAxRTlBQkMsCiAJCQkJOTNGMTk5MzAwODI0NUU1OTAw
MUU5QUJDLAotCQkJCTkzRjE5OTMxMDgyNDVFNTkwMDFFOUFCQywKIAkJCQk5M0YxOTkzMjA4MjQ1
RTU5MDAxRTlBQkMsCiAJCQkJOTNGMTk5MzMwODI0NUU1OTAwMUU5QUJDLAogCQkJCTkzRjE5OTM0
MDgyNDVFNTkwMDFFOUFCQywKQEAgLTI3MTcsNyArMjY4OSw2IEBACiAJCQkJOTNGMTk5QzkwODI0
NUU1OTAwMUU5QUJDLAogCQkJCTkzRjE5OUNBMDgyNDVFNTkwMDFFOUFCQywKIAkJCQk5M0YxOTlD
QjA4MjQ1RTU5MDAxRTlBQkMsCi0JCQkJOTNGMTk5Q0MwODI0NUU1OTAwMUU5QUJDLAogCQkJCTkz
RjE5OUNFMDgyNDVFNTkwMDFFOUFCQywKIAkJCQk5M0YxOTlDRjA4MjQ1RTU5MDAxRTlBQkMsCiAJ
CQkJOTNGMTk5RDAwODI0NUU1OTAwMUU5QUJDLApAQCAtMjc5OSw2ICsyNzcwLDcgQEAKIAkJCQk2
NURFODUyOTA4NzY1RkMzMDAxMTQyOEEsCiAJCQkJNjVERTg1MkEwODc2NUZDMzAwMTE0MjhBLAog
CQkJCUE4NUQ3QzE5MDg3QTZFRDkwMDZBOTE3MiwKKwkJCQlCQ0VGMzQzNTA4N0I1NjNFMDBCQkY4
MzMsCiAJCQkpOwogCQkJaXNhID0gUEJYSGVhZGVyc0J1aWxkUGhhc2U7CiAJCQlydW5Pbmx5Rm9y
RGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKQEAgLTMwNDMsMTIgKzMwMTUsNiBAQAogCQkJ
c2V0dGluZ3MgPSB7CiAJCQl9OwogCQl9OwotCQk5M0YxOThFMjA4MjQ1RTU5MDAxRTlBQkMgPSB7
Ci0JCQlmaWxlUmVmID0gRjUyM0QyMzYwMkRFNDM5NjAxODYzNUNBOwotCQkJaXNhID0gUEJYQnVp
bGRGaWxlOwotCQkJc2V0dGluZ3MgPSB7Ci0JCQl9OwotCQl9OwogCQk5M0YxOThFMzA4MjQ1RTU5
MDAxRTlBQkMgPSB7CiAJCQlmaWxlUmVmID0gRjUyM0QyMzgwMkRFNDM5NjAxODYzNUNBOwogCQkJ
aXNhID0gUEJYQnVpbGRGaWxlOwpAQCAtMzUwNSwxMiArMzQ3MSw2IEBACiAJCQlzZXR0aW5ncyA9
IHsKIAkJCX07CiAJCX07Ci0JCTkzRjE5OTMxMDgyNDVFNTkwMDFFOUFCQyA9IHsKLQkJCWZpbGVS
ZWYgPSAzNTRGMjQ4OTAyRUUyODU5MEFDQTJBQ0E7Ci0JCQlpc2EgPSBQQlhCdWlsZEZpbGU7Ci0J
CQlzZXR0aW5ncyA9IHsKLQkJCX07Ci0JCX07CiAJCTkzRjE5OTMyMDgyNDVFNTkwMDFFOUFCQyA9
IHsKIAkJCWZpbGVSZWYgPSBGNTg3ODY4NTAyREUzQjg2MDFFQTQxMjI7CiAJCQlpc2EgPSBQQlhC
dWlsZEZpbGU7CkBAIC00NDczLDEyICs0NDMzLDYgQEAKIAkJCXNldHRpbmdzID0gewogCQkJfTsK
IAkJfTsKLQkJOTNGMTk5Q0MwODI0NUU1OTAwMUU5QUJDID0gewotCQkJZmlsZVJlZiA9IEJDN0ZE
RTMyMDVDMUQ5QUIwMDcwQTkwMjsKLQkJCWlzYSA9IFBCWEJ1aWxkRmlsZTsKLQkJCXNldHRpbmdz
ID0gewotCQkJfTsKLQkJfTsKIAkJOTNGMTk5Q0UwODI0NUU1OTAwMUU5QUJDID0gewogCQkJZmls
ZVJlZiA9IEJDM0IzNjQ2MDVDOUQ1RTIwMEU0MjkwMjsKIAkJCWlzYSA9IFBCWEJ1aWxkRmlsZTsK
QEAgLTUwMTMsNyArNDk2Nyw2IEBACiAJCQkJOTNGMTlBOEIwODI0NUU1OTAwMUU5QUJDLAogCQkJ
CTkzRjE5QThDMDgyNDVFNTkwMDFFOUFCQywKIAkJCQk5M0YxOUE4RDA4MjQ1RTU5MDAxRTlBQkMs
Ci0JCQkJOTNGMTlBOEUwODI0NUU1OTAwMUU5QUJDLAogCQkJCTkzRjE5QThGMDgyNDVFNTkwMDFF
OUFCQywKIAkJCQk5M0YxOUE5MDA4MjQ1RTU5MDAxRTlBQkMsCiAJCQkJOTNGMTlBOTEwODI0NUU1
OTAwMUU5QUJDLApAQCAtNTA2Niw3ICs1MDE5LDYgQEAKIAkJCQk5M0YxOUFDMDA4MjQ1RTU5MDAx
RTlBQkMsCiAJCQkJOTNGMTlBQzEwODI0NUU1OTAwMUU5QUJDLAogCQkJCTkzRjE5QUMyMDgyNDVF
NTkwMDFFOUFCQywKLQkJCQk5M0YxOUFDMzA4MjQ1RTU5MDAxRTlBQkMsCiAJCQkJOTNGMTlBQzQw
ODI0NUU1OTAwMUU5QUJDLAogCQkJCTkzRjE5QUM1MDgyNDVFNTkwMDFFOUFCQywKIAkJCQk5M0Yx
OUFDNjA4MjQ1RTU5MDAxRTlBQkMsCkBAIC01MTA4LDcgKzUwNjAsNiBAQAogCQkJCTkzRjE5QUVD
MDgyNDVFNTkwMDFFOUFCQywKIAkJCQk5M0YxOUFFRDA4MjQ1RTU5MDAxRTlBQkMsCiAJCQkJOTNG
MTlBRUUwODI0NUU1OTAwMUU5QUJDLAotCQkJCTkzRjE5QUVGMDgyNDVFNTkwMDFFOUFCQywKIAkJ
CQk5M0YxOUFGMDA4MjQ1RTU5MDAxRTlBQkMsCiAJCQkJOTNGMTlBRjEwODI0NUU1OTAwMUU5QUJD
LAogCQkJCTkzRjE5QUYyMDgyNDVFNTkwMDFFOUFCQywKQEAgLTUxNzQsNiArNTEyNSw3IEBACiAJ
CQkJNTUwQTBCQ0QwODVGNjA0RDAwNzM1M0Q2LAogCQkJCTY1RjM3ODJBMDg3MEQ5NTgwMDBCMkY5
NCwKIAkJCQlBODVEN0MxODA4N0E2RUQ5MDA2QTkxNzIsCisJCQkJQkNFRjM0MzQwODdCNTYzRTAw
QkJGODMzLAogCQkJKTsKIAkJCWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNlOwogCQkJcnVuT25s
eUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CkBAIC01ODE0LDEyICs1NzY2LDYgQEAK
IAkJCXNldHRpbmdzID0gewogCQkJfTsKIAkJfTsKLQkJOTNGMTlBOEUwODI0NUU1OTAwMUU5QUJD
ID0gewotCQkJZmlsZVJlZiA9IEY1MjNEMjM1MDJERTQzOTYwMTg2MzVDQTsKLQkJCWlzYSA9IFBC
WEJ1aWxkRmlsZTsKLQkJCXNldHRpbmdzID0gewotCQkJfTsKLQkJfTsKIAkJOTNGMTlBOEYwODI0
NUU1OTAwMUU5QUJDID0gewogCQkJZmlsZVJlZiA9IEY1MjNEMjM3MDJERTQzOTYwMTg2MzVDQTsK
IAkJCWlzYSA9IFBCWEJ1aWxkRmlsZTsKQEAgLTYxMzIsMTIgKzYwNzgsNiBAQAogCQkJc2V0dGlu
Z3MgPSB7CiAJCQl9OwogCQl9OwotCQk5M0YxOUFDMzA4MjQ1RTU5MDAxRTlBQkMgPSB7Ci0JCQlm
aWxlUmVmID0gMzU0RjI0OEEwMkVFMjg1OTBBQ0EyQUNBOwotCQkJaXNhID0gUEJYQnVpbGRGaWxl
OwotCQkJc2V0dGluZ3MgPSB7Ci0JCQl9OwotCQl9OwogCQk5M0YxOUFDNDA4MjQ1RTU5MDAxRTlB
QkMgPSB7CiAJCQlmaWxlUmVmID0gRjUxMTdCQ0EwMkY5RkZFRjAxODYzNUNFOwogCQkJaXNhID0g
UEJYQnVpbGRGaWxlOwpAQCAtNjM4NCwxMiArNjMyNCw2IEBACiAJCQlzZXR0aW5ncyA9IHsKIAkJ
CX07CiAJCX07Ci0JCTkzRjE5QUVGMDgyNDVFNTkwMDFFOUFCQyA9IHsKLQkJCWZpbGVSZWYgPSBC
QzdGREUzMTA1QzFEOUFCMDA3MEE5MDI7Ci0JCQlpc2EgPSBQQlhCdWlsZEZpbGU7Ci0JCQlzZXR0
aW5ncyA9IHsKLQkJCX07Ci0JCX07CiAJCTkzRjE5QUYwMDgyNDVFNTkwMDFFOUFCQyA9IHsKIAkJ
CWZpbGVSZWYgPSBCQzNCMzY0NTA1QzlENUUyMDBFNDI5MDI7CiAJCQlpc2EgPSBQQlhCdWlsZEZp
bGU7CkBAIC02OTcxLDIyICs2OTA1LDYgQEAKIAkJCXJlZlR5cGUgPSA0OwogCQkJc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsKIAkJfTsKLQkJQkM3RkRFMzEwNUMxRDlBQjAwNzBBOTAyID0gewotCQkJ
ZmlsZUVuY29kaW5nID0gMzA7Ci0JCQlpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOwotCQkJbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7Ci0JCQlwYXRoID0geG1sX25hbWVzcGFj
ZV90YWJsZS5jcHA7Ci0JCQlyZWZUeXBlID0gNDsKLQkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
Ci0JCX07Ci0JCUJDN0ZERTMyMDVDMUQ5QUIwMDcwQTkwMiA9IHsKLQkJCWZpbGVFbmNvZGluZyA9
IDMwOwotCQkJaXNhID0gUEJYRmlsZVJlZmVyZW5jZTsKLQkJCWxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7Ci0JCQlwYXRoID0geG1sX25hbWVzcGFjZV90YWJsZS5oOwotCQkJcmVm
VHlwZSA9IDQ7Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwotCQl9OwogCQlCQzgwQTY5MzA0
NjhCNzgxMDBEQkNDOUMgPSB7CiAJCQlmaWxlRW5jb2RpbmcgPSAzMDsKIAkJCWlzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7CkBAIC03MTMyLDYgKzcwNTAsMzQgQEAKIAkJCXJlZlR5cGUgPSA0OwogCQkJ
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJQkNFRjM0MzIwODdCNTYzRTAwQkJGODMz
ID0geworCQkJZmlsZUVuY29kaW5nID0gMzA7CisJCQlpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOwor
CQkJbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7CisJCQlwYXRoID0gaHRt
bGZhY3RvcnkuY3BwOworCQkJcmVmVHlwZSA9IDQ7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4i
OworCQl9OworCQlCQ0VGMzQzMzA4N0I1NjNFMDBCQkY4MzMgPSB7CisJCQlmaWxlRW5jb2Rpbmcg
PSAzMDsKKwkJCWlzYSA9IFBCWEZpbGVSZWZlcmVuY2U7CisJCQlsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOworCQkJcGF0aCA9IGh0bWxmYWN0b3J5Lmg7CisJCQlyZWZUeXBlID0g
NDsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCUJDRUYzNDM0MDg3QjU2M0Uw
MEJCRjgzMyA9IHsKKwkJCWZpbGVSZWYgPSBCQ0VGMzQzMjA4N0I1NjNFMDBCQkY4MzM7CisJCQlp
c2EgPSBQQlhCdWlsZEZpbGU7CisJCQlzZXR0aW5ncyA9IHsKKwkJCX07CisJCX07CisJCUJDRUYz
NDM1MDg3QjU2M0UwMEJCRjgzMyA9IHsKKwkJCWZpbGVSZWYgPSBCQ0VGMzQzMzA4N0I1NjNFMDBC
QkY4MzM7CisJCQlpc2EgPSBQQlhCdWlsZEZpbGU7CisJCQlzZXR0aW5ncyA9IHsKKwkJCX07CisJ
CX07CiAJCUJDRjAxOTI0MDNEMzgwMjIwMEIyRDA0RCA9IHsKIAkJCWZpbGVFbmNvZGluZyA9IDMw
OwogCQkJaXNhID0gUEJYRmlsZVJlZmVyZW5jZTsKQEAgLTc1NDcsOCArNzQ5Myw2IEBACiAJCQkJ
MkQ5MDY2MEMwNjY1RDkzNzAwNkI2RjFBLAogCQkJCUY1ODc4NENEMDJERTM3NTkwMUVBNDEyMiwK
IAkJCQlGNTg3ODREQTAyREUzNzU5MDFFQTQxMjIsCi0JCQkJMzU0RjI0ODkwMkVFMjg1OTBBQ0Ey
QUNBLAotCQkJCTM1NEYyNDhBMDJFRTI4NTkwQUNBMkFDQSwKIAkJCQk5MzFDOEExNjAzODAyODhC
MDA4NjM1Q0UsCiAJCQkJOTMxQzhBMTcwMzgwMjg4QjAwODYzNUNFLAogCQkJCUJFRjdFRUEwMDVG
RjhGMEQwMDk3MTdFRSwKQEAgLTg1MTcsMjIgKzg0NjEsNiBAQAogCQkJcmVmVHlwZSA9IDQ7CiAJ
CQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OwotCQlGNTIzRDIzNTAyREU0Mzk2MDE4NjM1
Q0EgPSB7Ci0JCQlmaWxlRW5jb2RpbmcgPSAzMDsKLQkJCWlzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
Ci0JCQlsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsKLQkJCXBhdGggPSBk
dGQuY3BwOwotCQkJcmVmVHlwZSA9IDQ7Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwotCQl9
OwotCQlGNTIzRDIzNjAyREU0Mzk2MDE4NjM1Q0EgPSB7Ci0JCQlmaWxlRW5jb2RpbmcgPSAzMDsK
LQkJCWlzYSA9IFBCWEZpbGVSZWZlcmVuY2U7Ci0JCQlsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOwotCQkJcGF0aCA9IGR0ZC5oOwotCQkJcmVmVHlwZSA9IDQ7Ci0JCQlzb3VyY2VU
cmVlID0gIjxncm91cD4iOwotCQl9OwogCQlGNTIzRDIzNzAyREU0Mzk2MDE4NjM1Q0EgPSB7CiAJ
CQlmaWxlRW5jb2RpbmcgPSAzMDsKIAkJCWlzYSA9IFBCWEZpbGVSZWZlcmVuY2U7CkBAIC04NzU5
LDEwICs4Njg3LDEwIEBACiAJCX07CiAJCUY1MjNEMjc3MDJERTQzOTgwMTg2MzVDQSA9IHsKIAkJ
CWNoaWxkcmVuID0gKAorCQkJCUJDRUYzNDMyMDg3QjU2M0UwMEJCRjgzMywKKwkJCQlCQ0VGMzQz
MzA4N0I1NjNFMDBCQkY4MzMsCiAJCQkJNTUwQTBCQ0IwODVGNjA0RDAwNzM1M0Q2LAogCQkJCTU1
MEEwQkNDMDg1RjYwNEQwMDczNTNENiwKLQkJCQlGNTIzRDIzNTAyREU0Mzk2MDE4NjM1Q0EsCi0J
CQkJRjUyM0QyMzYwMkRFNDM5NjAxODYzNUNBLAogCQkJCUY1MjNEMjM3MDJERTQzOTYwMTg2MzVD
QSwKIAkJCQlGNTIzRDIzODAyREU0Mzk2MDE4NjM1Q0EsCiAJCQkJRjUyM0QyMzkwMkRFNDM5NjAx
ODYzNUNBLApAQCAtOTQ3NCw4ICs5NDAyLDYgQEAKIAkJCQlGNTIzRDMwNjAyREU0NDc2MDE4NjM1
Q0EsCiAJCQkJRjUyM0QzMDcwMkRFNDQ3NjAxODYzNUNBLAogCQkJCUY1MjNEMzA4MDJERTQ0NzYw
MTg2MzVDQSwKLQkJCQlCQzdGREUzMTA1QzFEOUFCMDA3MEE5MDIsCi0JCQkJQkM3RkRFMzIwNUMx
RDlBQjAwNzBBOTAyLAogCQkJCUY1MjNEMzA5MDJERTQ0NzYwMTg2MzVDQSwKIAkJCQlGNTIzRDMw
QTAyREU0NDc2MDE4NjM1Q0EsCiAJCQkpOwpJbmRleDoga2h0bWwva2h0bWxfcGFydC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwva2h0bWxfcGFydC5jcHAs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzI1CmRpZmYgLXUgLXAgLXIxLjMyNSBraHRtbC9raHRt
bF9wYXJ0LmNwcAotLS0ga2h0bWwva2h0bWxfcGFydC5jcHAJMjggSnVuIDIwMDUgMjM6MjI6MTYg
LTAwMDAJMS4zMjUKKysrIGtodG1sL2todG1sX3BhcnQuY3BwCTggSnVsIDIwMDUgMDU6NTY6NDEg
LTAwMDAKQEAgLTIwOCw2ICsyMDgsNyBAQCBLSFRNTFBhcnQ6OktIVE1MUGFydCggS0hUTUxWaWV3
ICp2aWV3LCBRCiB2b2lkIEtIVE1MUGFydDo6aW5pdCggS0hUTUxWaWV3ICp2aWV3LCBHVUlQcm9m
aWxlIHByb2YgKQogewogICBBdG9taWNTdHJpbmc6OmluaXQoKTsKKyAgSFRNTE5hbWVzOjppbml0
KCk7IC8vIEZJWE1FOiBXZSBzaG91bGQgbWFrZSB0aGlzIGhhcHBlbiBvbmx5IHdoZW4gSFRNTCBp
cyB1c2VkLgogICBpZiAoIHByb2YgPT0gRGVmYXVsdEdVSSApCiAgICAgc2V0WE1MRmlsZSggImto
dG1sLnJjIiApOwogICBlbHNlIGlmICggcHJvZiA9PSBCcm93c2VyVmlld0dVSSApCkBAIC01NzI0
LDcgKzU3MjUsNyBAQCBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb25JbXBsICpLSFRNTFBhCiAg
ICAgaW50IGV4Y2VwdGlvbkNvZGUgPSAwOwogCiAgICAgaWYgKGQtPm1fdHlwaW5nU3R5bGUpIHsK
LSAgICAgICAgc3R5bGVFbGVtZW50ID0geG1sRG9jSW1wbCgpLT5jcmVhdGVIVE1MRWxlbWVudCgi
c3BhbiIsIGV4Y2VwdGlvbkNvZGUpOworICAgICAgICBzdHlsZUVsZW1lbnQgPSB4bWxEb2NJbXBs
KCktPmNyZWF0ZUVsZW1lbnROUyhYSFRNTF9OQU1FU1BBQ0UsICJzcGFuIiwgZXhjZXB0aW9uQ29k
ZSk7CiAgICAgICAgIGFzc2VydChleGNlcHRpb25Db2RlID09IDApOwogCiAgICAgICAgIHN0eWxl
RWxlbWVudC0+cmVmKCk7CkluZGV4OiBraHRtbC9raHRtbHZpZXcuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2todG1sdmlldy5jcHAsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuMTMzCmRpZmYgLXUgLXAgLXIxLjEzMyBraHRtbC9raHRtbHZpZXcuY3BwCi0t
LSBraHRtbC9raHRtbHZpZXcuY3BwCTExIE1heSAyMDA1IDAwOjU4OjI3IC0wMDAwCTEuMTMzCisr
KyBraHRtbC9raHRtbHZpZXcuY3BwCTggSnVsIDIwMDUgMDU6NTY6NDMgLTAwMDAKQEAgLTYwNywx
MiArNjA3LDEyIEBAIHZvaWQgS0hUTUxWaWV3OjpsYXlvdXQoKQogICAgIGlmIChkb2N1bWVudC0+
aXNIVE1MRG9jdW1lbnQoKSkgewogICAgICAgICBOb2RlSW1wbCAqYm9keSA9IHN0YXRpY19jYXN0
PEhUTUxEb2N1bWVudEltcGwqPihkb2N1bWVudCktPmJvZHkoKTsKICAgICAgICAgaWYgKGJvZHkg
JiYgYm9keS0+cmVuZGVyZXIoKSkgewotICAgICAgICAgICAgaWYgKGJvZHktPmlkKCkgPT0gSURf
RlJBTUVTRVQpIHsKKyAgICAgICAgICAgIGlmIChib2R5LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
ZnJhbWVzZXQoKSkpIHsKICAgICAgICAgICAgICAgICBib2R5LT5yZW5kZXJlcigpLT5zZXROZWVk
c0xheW91dCh0cnVlKTsKICAgICAgICAgICAgICAgICB2TW9kZSA9IEFsd2F5c09mZjsKICAgICAg
ICAgICAgICAgICBoTW9kZSA9IEFsd2F5c09mZjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGVsc2UgaWYgKGJvZHktPmlkKCkgPT0gSURfQk9EWSkgeworICAgICAgICAgICAgZWxzZSBpZiAo
Ym9keS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJvZHkoKSkpIHsKICAgICAgICAgICAgICAgICBS
ZW5kZXJPYmplY3QqIG8gPSAocm9vdFJlbmRlcmVyLT5zdHlsZSgpLT5vdmVyZmxvdygpID09IE9W
SVNJQkxFKSA/IGJvZHktPnJlbmRlcmVyKCkgOiByb290UmVuZGVyZXI7CiAgICAgICAgICAgICAg
ICAgYXBwbHlPdmVyZmxvd1RvVmlld3BvcnQobywgaE1vZGUsIHZNb2RlKTsgLy8gT25seSBhcHBs
aWVzIHRvIEhUTUwgVUFzLCBub3QgdG8gWE1ML1hIVE1MIFVBcwogICAgICAgICAgICAgfQpAQCAt
ODc3LDEwICs4NzcsNyBAQCB2b2lkIEtIVE1MVmlldzo6dmlld3BvcnRNb3VzZURvdWJsZUNsaWNr
CiAKIHN0YXRpYyBib29sIGlzU3VibWl0SW1hZ2UoRE9NOjpOb2RlSW1wbCAqbm9kZSkKIHsKLSAg
ICByZXR1cm4gbm9kZQotICAgICAgICAmJiBub2RlLT5pc0hUTUxFbGVtZW50KCkKLSAgICAgICAg
JiYgbm9kZS0+aWQoKSA9PSBJRF9JTlBVVAotICAgICAgICAmJiBzdGF0aWNfY2FzdDxIVE1MSW5w
dXRFbGVtZW50SW1wbCo+KG5vZGUpLT5pbnB1dFR5cGUoKSA9PSBIVE1MSW5wdXRFbGVtZW50SW1w
bDo6SU1BR0U7CisgICAgcmV0dXJuIG5vZGUgJiYgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
OmlucHV0KCkpICYmIHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnRJbXBsKj4obm9kZSktPmlu
cHV0VHlwZSgpID09IEhUTUxJbnB1dEVsZW1lbnRJbXBsOjpJTUFHRTsKIH0KIAogdm9pZCBLSFRN
TFZpZXc6OnZpZXdwb3J0TW91c2VNb3ZlRXZlbnQoIFFNb3VzZUV2ZW50ICogX21vdXNlICkKSW5k
ZXg6IGtodG1sL2Nzcy9jc3NfYmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L1dlYkNvcmUva2h0bWwvY3NzL2Nzc19iYXNlLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4x
NQpkaWZmIC11IC1wIC1yMS4xNSBraHRtbC9jc3MvY3NzX2Jhc2UuY3BwCi0tLSBraHRtbC9jc3Mv
Y3NzX2Jhc2UuY3BwCTEyIEp1biAyMDA1IDA0OjA3OjMwIC0wMDAwCTEuMTUKKysrIGtodG1sL2Nz
cy9jc3NfYmFzZS5jcHAJOCBKdWwgMjAwNSAwNTo1Njo0MyAtMDAwMApAQCAtOTMsOSArOTMsMTUg
QEAgU3R5bGVMaXN0SW1wbDo6flN0eWxlTGlzdEltcGwoKQogCiAvLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQogCitjb25zdCBRdWFsaWZpZWROYW1lJiBDU1NTZWxlY3Rvcjo6YW55VGFnTmFtZSgp
Cit7CisgICAgc3RhdGljIFF1YWxpZmllZE5hbWUgYW55TmFtZShudWxsQXRvbSwgc3RhckF0b20s
IHN0YXJBdG9tKTsKKyAgICByZXR1cm4gYW55TmFtZTsKK30KKwogdm9pZCBDU1NTZWxlY3Rvcjo6
cHJpbnQodm9pZCkKIHsKLSAgICBrZERlYnVnKCA2MDgwICkgPDwgIltTZWxlY3RvcjogdGFnID0g
IiA8PCAgICAgICB0YWcgPDwgIiwgYXR0ciA9IFwiIiA8PCBhdHRyIDw8ICJcIiwgbWF0Y2ggPSBc
IiIgPDwgbWF0Y2gKKyAgICBrZERlYnVnKCA2MDgwICkgPDwgIltTZWxlY3RvcjogdGFnID0gIiA8
PCAgICAgICB0YWcubG9jYWxOYW1lKCkuc3RyaW5nKCkgPDwgIiwgYXR0ciA9IFwiIiA8PCBhdHRy
IDw8ICJcIiwgbWF0Y2ggPSBcIiIgPDwgbWF0Y2gKIAkJICAgIDw8ICJcIiB2YWx1ZSA9IFwiIiA8
PCB2YWx1ZS5zdHJpbmcoKS5sYXRpbjEoKSA8PCAiXCIgcmVsYXRpb24gPSAiIDw8IChpbnQpcmVs
YXRpb24KIAkJICAgIDw8ICJdIiA8PCBlbmRsOwogICAgIGlmICggdGFnSGlzdG9yeSApCkBAIC0x
MDcsNyArMTEzLDcgQEAgdW5zaWduZWQgaW50IENTU1NlbGVjdG9yOjpzcGVjaWZpY2l0eSgpCiB7
CiAgICAgLy8gRklYTUU6IFBzZXVkby1lbGVtZW50cyBhbmQgcHNldWRvLWNsYXNzZXMgZG8gbm90
IGhhdmUgdGhlIHNhbWUgc3BlY2lmaWNpdHkuIFRoaXMgZnVuY3Rpb24KICAgICAvLyBpc24ndCBx
dWl0ZSBjb3JyZWN0LgotICAgIGludCBzID0gKChsb2NhbE5hbWVQYXJ0KHRhZykgPT0gYW55TG9j
YWxOYW1lKSA/IDAgOiAxKTsKKyAgICBpbnQgcyA9ICh0YWcubG9jYWxOYW1lKCkgPT0gc3RhckF0
b20gPyAwIDogMSk7CiAgICAgc3dpdGNoKG1hdGNoKQogICAgIHsKICAgICBjYXNlIElkOgpAQCAt
MjQwLDYwICsyNDYsNTkgQEAgYm9vbCBDU1NTZWxlY3Rvcjo6b3BlcmF0b3IgPT0gKCBjb25zdCBD
UwogCiBET01TdHJpbmcgQ1NTU2VsZWN0b3I6OnNlbGVjdG9yVGV4dCgpIGNvbnN0CiB7Ci0gICAg
Ly8gRklYTUU6IFN1cHBvcnQgbmFtZXNwYWNlcyB3aGVuIGR1bXBpbmcgdGhlIHNlbGVjdG9yIHRl
eHQuICBUaGlzIHJlcXVpcmVzIHByZXNlcnZpbmcKLSAgICAvLyB0aGUgb3JpZ2luYWwgbmFtZXNw
YWNlIHByZWZpeCB1c2VkLiBVZ2guIC1kd2gKKyAgICAvLyBGSVhNRTogU3VwcG9ydCBuYW1lc3Bh
Y2VzIHdoZW4gZHVtcGluZyB0aGUgc2VsZWN0b3IgdGV4dC4gLWR3aAogICAgIERPTVN0cmluZyBz
dHI7CiAgICAgY29uc3QgQ1NTU2VsZWN0b3IqIGNzID0gdGhpczsKLSAgICBRX1VJTlQxNiB0YWcg
PSBsb2NhbE5hbWVQYXJ0KGNzLT50YWcpOwotICAgIGlmICggdGFnID09IGFueUxvY2FsTmFtZSAm
JiBjcy0+YXR0ciA9PSBBVFRSX0lEICYmIGNzLT5tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6RXhhY3Qg
KQorICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lID0gY3MtPnRhZy5sb2NhbE5hbWUo
KTsKKyAgICBpZiAobG9jYWxOYW1lID09IHN0YXJBdG9tICYmIGNzLT5hdHRyID09IEFUVFJfSUQg
JiYgY3MtPm1hdGNoID09IENTU1NlbGVjdG9yOjpFeGFjdCkKICAgICB7CiAgICAgICAgIHN0ciA9
ICIjIjsKICAgICAgICAgc3RyICs9IGNzLT52YWx1ZS5zdHJpbmcoKTsKICAgICB9Ci0gICAgZWxz
ZSBpZiAoIHRhZyA9PSBhbnlMb2NhbE5hbWUgJiYgY3MtPmF0dHIgPT0gQVRUUl9DTEFTUyAmJiBj
cy0+bWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OkNsYXNzICkKKyAgICBlbHNlIGlmIChsb2NhbE5hbWUg
PT0gc3RhckF0b20gJiYgY3MtPmF0dHIgPT0gQVRUUl9DTEFTUyAmJiBjcy0+bWF0Y2ggPT0gQ1NT
U2VsZWN0b3I6OkNsYXNzKQogICAgIHsKICAgICAgICAgc3RyID0gIi4iOwogICAgICAgICBzdHIg
Kz0gY3MtPnZhbHVlLnN0cmluZygpOwogICAgIH0KLSAgICBlbHNlIGlmICggdGFnID09IGFueUxv
Y2FsTmFtZSAmJiBjcy0+bWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzICkKKyAgICBl
bHNlIGlmIChsb2NhbE5hbWUgPT0gc3RhckF0b20gICYmIGNzLT5tYXRjaCA9PSBDU1NTZWxlY3Rv
cjo6UHNldWRvQ2xhc3MpCiAgICAgewogICAgICAgICBzdHIgPSAiOiI7CiAgICAgICAgIHN0ciAr
PSBjcy0+dmFsdWUuc3RyaW5nKCk7CiAgICAgfQotICAgIGVsc2UgaWYgKCB0YWcgPT0gYW55TG9j
YWxOYW1lICYmIGNzLT5tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVudCApCisgICAg
ZWxzZSBpZiAobG9jYWxOYW1lID09IHN0YXJBdG9tICYmIGNzLT5tYXRjaCA9PSBDU1NTZWxlY3Rv
cjo6UHNldWRvRWxlbWVudCkKICAgICB7CiAgICAgICAgIHN0ciA9ICI6OiI7CiAgICAgICAgIHN0
ciArPSBjcy0+dmFsdWUuc3RyaW5nKCk7CiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAg
IGlmICggdGFnID09IGFueUxvY2FsTmFtZSApCisgICAgICAgIGlmIChsb2NhbE5hbWUgPT0gc3Rh
ckF0b20pCiAgICAgICAgICAgICBzdHIgPSAiKiI7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHN0ciA9IGdldFRhZ05hbWUoIGNzLT50YWcgKTsKLSAgICAgICAgaWYgKCBjcy0+YXR0ciA9PSBB
VFRSX0lEICYmIGNzLT5tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6RXhhY3QgKQorICAgICAgICAgICAg
c3RyID0gbG9jYWxOYW1lOworICAgICAgICBpZiAoY3MtPmF0dHIgPT0gQVRUUl9JRCAmJiBjcy0+
bWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OkV4YWN0KQogICAgICAgICB7CiAgICAgICAgICAgICBzdHIg
Kz0gIiMiOwogICAgICAgICAgICAgc3RyICs9IGNzLT52YWx1ZS5zdHJpbmcoKTsKICAgICAgICAg
fQotICAgICAgICBlbHNlIGlmICggY3MtPmF0dHIgPT0gQVRUUl9DTEFTUyAmJiBjcy0+bWF0Y2gg
PT0gQ1NTU2VsZWN0b3I6OkNsYXNzICkKKyAgICAgICAgZWxzZSBpZiAoY3MtPmF0dHIgPT0gQVRU
Ul9DTEFTUyAmJiBjcy0+bWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OkNsYXNzKQogICAgICAgICB7CiAg
ICAgICAgICAgICBzdHIgKz0gIi4iOwogICAgICAgICAgICAgc3RyICs9IGNzLT52YWx1ZS5zdHJp
bmcoKTsKICAgICAgICAgfQotICAgICAgICBlbHNlIGlmICggY3MtPm1hdGNoID09IENTU1NlbGVj
dG9yOjpQc2V1ZG9DbGFzcyApCisgICAgICAgIGVsc2UgaWYgKGNzLT5tYXRjaCA9PSBDU1NTZWxl
Y3Rvcjo6UHNldWRvQ2xhc3MpCiAgICAgICAgIHsKICAgICAgICAgICAgIHN0ciArPSAiOiI7CiAg
ICAgICAgICAgICBzdHIgKz0gY3MtPnZhbHVlLnN0cmluZygpOwogICAgICAgICB9Ci0gICAgICAg
IGVsc2UgaWYgKCBjcy0+bWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnQgKQorICAg
ICAgICBlbHNlIGlmIChjcy0+bWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnQpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIHN0ciArPSAiOjoiOwogICAgICAgICAgICAgc3RyICs9IGNz
LT52YWx1ZS5zdHJpbmcoKTsKICAgICAgICAgfQogICAgICAgICAvLyBvcHRpb25hbCBhdHRyaWJ1
dGUKLSAgICAgICAgaWYgKCBjcy0+YXR0ciApIHsKLSAgICAgICAgICAgIERPTVN0cmluZyBhdHRy
TmFtZSA9IGdldEF0dHJOYW1lKCBjcy0+YXR0ciApOworICAgICAgICBpZiAoY3MtPmF0dHIpIHsK
KyAgICAgICAgICAgIERPTVN0cmluZyBhdHRyTmFtZSA9IGdldEF0dHJOYW1lKGNzLT5hdHRyKTsK
ICAgICAgICAgICAgIHN0ciArPSAiWyI7CiAgICAgICAgICAgICBzdHIgKz0gYXR0ck5hbWU7CiAg
ICAgICAgICAgICBzd2l0Y2ggKGNzLT5tYXRjaCkgewpJbmRleDoga2h0bWwvY3NzL2Nzc19iYXNl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvY3NzL2Nzc19i
YXNlLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTIKZGlmZiAtdSAtcCAtcjEuMTIga2h0bWwv
Y3NzL2Nzc19iYXNlLmgKLS0tIGtodG1sL2Nzcy9jc3NfYmFzZS5oCTEyIEp1biAyMDA1IDA0OjA3
OjMwIC0wMDAwCTEuMTIKKysrIGtodG1sL2Nzcy9jc3NfYmFzZS5oCTggSnVsIDIwMDUgMDU6NTY6
NDMgLTAwMDAKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJkb20vZG9tX3N0cmluZy5oIgog
I2luY2x1ZGUgImRvbS9kb21fbWlzYy5oIgogI2luY2x1ZGUgInhtbC9kb21fbm9kZWltcGwuaCIK
KyNpbmNsdWRlICJkb21fcW5hbWUuaCIKICNpbmNsdWRlICJtaXNjL3NoYXJlZC5oIgogI2luY2x1
ZGUgPHFkYXRldGltZS5oPgogI2luY2x1ZGUgPHFwdHJsaXN0Lmg+CkBAIC00NiwyMCArNDcsMjAg
QEAgbmFtZXNwYWNlIERPTSB7CiAgICAgY2xhc3MgRG9jdW1lbnRJbXBsOwogCiAgICAgc3RydWN0
IENTU05hbWVzcGFjZSB7Ci0gICAgICAgIERPTVN0cmluZyBtX3ByZWZpeDsKLSAgICAgICAgRE9N
U3RyaW5nIG1fdXJpOworICAgICAgICBBdG9taWNTdHJpbmcgbV9wcmVmaXg7CisgICAgICAgIEF0
b21pY1N0cmluZyBtX3VyaTsKICAgICAgICAgQ1NTTmFtZXNwYWNlKiBtX3BhcmVudDsKIAogICAg
ICAgICBNQUlOX1RIUkVBRF9BTExPQ0FURUQ7CiAKLSAgICAgICAgQ1NTTmFtZXNwYWNlKGNvbnN0
IERPTVN0cmluZyYgcCwgY29uc3QgRE9NU3RyaW5nJiB1LCBDU1NOYW1lc3BhY2UqIHBhcmVudCkg
CisgICAgICAgIENTU05hbWVzcGFjZShjb25zdCBBdG9taWNTdHJpbmcmIHAsIGNvbnN0IEF0b21p
Y1N0cmluZyYgdSwgQ1NTTmFtZXNwYWNlKiBwYXJlbnQpIAogICAgICAgICAgICAgOm1fcHJlZml4
KHApLCBtX3VyaSh1KSwgbV9wYXJlbnQocGFyZW50KSB7fQogICAgICAgICB+Q1NTTmFtZXNwYWNl
KCkgeyBkZWxldGUgbV9wYXJlbnQ7IH0KICAgICAgICAgCi0gICAgICAgIGNvbnN0IERPTVN0cmlu
ZyYgdXJpKCkgeyByZXR1cm4gbV91cmk7IH0KLSAgICAgICAgY29uc3QgRE9NU3RyaW5nJiBwcmVm
aXgoKSB7IHJldHVybiBtX3ByZWZpeDsgfQorICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHVy
aSgpIHsgcmV0dXJuIG1fdXJpOyB9CisgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4
KCkgeyByZXR1cm4gbV9wcmVmaXg7IH0KICAgICAgICAgCi0gICAgICAgIENTU05hbWVzcGFjZSog
bmFtZXNwYWNlRm9yUHJlZml4KGNvbnN0IERPTVN0cmluZyYgcHJlZml4KSB7CisgICAgICAgIENT
U05hbWVzcGFjZSogbmFtZXNwYWNlRm9yUHJlZml4KGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4
KSB7CiAgICAgICAgICAgICBpZiAocHJlZml4ID09IG1fcHJlZml4KQogICAgICAgICAgICAgICAg
IHJldHVybiB0aGlzOwogICAgICAgICAgICAgaWYgKG1fcGFyZW50KQpAQCAtNzIsOCArNzMsMTQg
QEAgbmFtZXNwYWNlIERPTSB7CiAgICAgY2xhc3MgQ1NTU2VsZWN0b3IKICAgICB7CiAgICAgcHVi
bGljOgotCUNTU1NlbGVjdG9yKCkKLQkgICAgOiB0YWdIaXN0b3J5KDApLCBzaW1wbGVTZWxlY3Rv
cigwKSwgbmV4dFNlbGVjdG9yKDApLCBhdHRyKDApLCB0YWcoYW55UU5hbWUpLAorICAgICAgICBD
U1NTZWxlY3RvcigpCisgICAgICAgICAgICA6IHRhZ0hpc3RvcnkoMCksIHNpbXBsZVNlbGVjdG9y
KDApLCBuZXh0U2VsZWN0b3IoMCksIGF0dHIoMCksIHRhZyhhbnlUYWdOYW1lKCkpLAorICAgICAg
ICAgICAgICByZWxhdGlvbiggRGVzY2VuZGFudCApLCBtYXRjaCggTm9uZSApLAorICAgICAgICAg
ICAgICBwc2V1ZG9JZCggMCApLCBfcHNldWRvVHlwZShQc2V1ZG9Ob3RQYXJzZWQpCisgICAgICAg
IHt9CisgICAgICAgIAorCUNTU1NlbGVjdG9yKGNvbnN0IFF1YWxpZmllZE5hbWUmIHFOYW1lKQor
CSAgICA6IHRhZ0hpc3RvcnkoMCksIHNpbXBsZVNlbGVjdG9yKDApLCBuZXh0U2VsZWN0b3IoMCks
IGF0dHIoMCksIHRhZyhxTmFtZSksCiAgICAgICAgICAgICAgIHJlbGF0aW9uKCBEZXNjZW5kYW50
ICksIG1hdGNoKCBOb25lICksCiAgICAgICAgICAgICAgIHBzZXVkb0lkKCAwICksIF9wc2V1ZG9U
eXBlKFBzZXVkb05vdFBhcnNlZCkKICAgICAgICAge30KQEAgLTE2NywxMiArMTc0LDE3IEBAIG5h
bWVzcGFjZSBET00gewogICAgICAgICAgICAgcmV0dXJuIF9wc2V1ZG9UeXBlOwogICAgICAgICB9
CiAKKyAgICAgICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGFueVRhZ05hbWUoKTsKKwor
ICAgICAgICBib29sIGhhc1RhZygpIGNvbnN0IHsgcmV0dXJuIHRhZyAhPSBhbnlUYWdOYW1lKCk7
IH0KKwogCW11dGFibGUgRE9NOjpBdG9taWNTdHJpbmcgdmFsdWU7CiAJQ1NTU2VsZWN0b3IqIHRh
Z0hpc3Rvcnk7CiAgICAgICAgIENTU1NlbGVjdG9yKiBzaW1wbGVTZWxlY3RvcjsgLy8gVXNlZCBm
b3IgOm5vdC4KICAgICAgICAgQ1NTU2VsZWN0b3IqIG5leHRTZWxlY3RvcjsgLy8gdXNlZCBmb3Ig
LC1jaGFpbmVkIHNlbGVjdG9ycwogCVFfVUlOVDMyICAgICBhdHRyOwotCVFfVUlOVDMyICAgICB0
YWc7CisJCisgICAgICAgIFF1YWxpZmllZE5hbWUgdGFnOwogCiAgICAgICAgIFJlbGF0aW9uIHJl
bGF0aW9uICAgICAgICAgICAgICA6IDM7CiAJbXV0YWJsZSBNYXRjaCAgbWF0Y2ggICAgICAgICAg
IDogNDsKSW5kZXg6IGtodG1sL2Nzcy9jc3NfcnVsZWltcGwuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2Nzcy9jc3NfcnVsZWltcGwuY3BwLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjE4CmRpZmYgLXUgLXAgLXIxLjE4IGtodG1sL2Nzcy9jc3NfcnVsZWlt
cGwuY3BwCi0tLSBraHRtbC9jc3MvY3NzX3J1bGVpbXBsLmNwcAkxMSBNYXkgMjAwNSAwNTo0OToz
NCAtMDAwMAkxLjE4CisrKyBraHRtbC9jc3MvY3NzX3J1bGVpbXBsLmNwcAk4IEp1bCAyMDA1IDA1
OjU2OjQzIC0wMDAwCkBAIC0zMSw3ICszMSw2IEBACiAjaW5jbHVkZSAiY3NzL2Nzc19ydWxlaW1w
bC5oIgogCiAjaW5jbHVkZSAibWlzYy9sb2FkZXIuaCIKLSNpbmNsdWRlICJtaXNjL2h0bWx0YWdz
LmgiCiAjaW5jbHVkZSAibWlzYy9odG1sYXR0cnMuaCIKICNpbmNsdWRlICJ4bWwvZG9tX2RvY2lt
cGwuaCIKIApJbmRleDoga2h0bWwvY3NzL2Nzc19ydWxlaW1wbC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2Nzcy9jc3NfcnVsZWltcGwuaCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS4xNApkaWZmIC11IC1wIC1yMS4xNCBraHRtbC9jc3MvY3NzX3J1bGVpbXBs
LmgKLS0tIGtodG1sL2Nzcy9jc3NfcnVsZWltcGwuaAkxMCBNYXkgMjAwNSAxODo0MjowMiAtMDAw
MAkxLjE0CisrKyBraHRtbC9jc3MvY3NzX3J1bGVpbXBsLmgJOCBKdWwgMjAwNSAwNTo1Njo0MyAt
MDAwMApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgImNzcy9jc3NfYmFzZS5oIgogI2luY2x1
ZGUgIm1pc2MvbG9hZGVyX2NsaWVudC5oIgogI2luY2x1ZGUgIm1pc2Mvc2hhcmVkLmgiCisjaW5j
bHVkZSAibWlzYy9tYWluX3RocmVhZF9tYWxsb2MuaCIKICNpbmNsdWRlICJjc3NfdmFsdWVpbXBs
LmgiCiAKIG5hbWVzcGFjZSBraHRtbCB7CkBAIC01MCw2ICs1MSw4IEBAIHB1YmxpYzoKICAgICBD
U1NSdWxlSW1wbChTdHlsZUJhc2VJbXBsICpwYXJlbnQpCiAgICAgICAgIDogU3R5bGVCYXNlSW1w
bChwYXJlbnQpLCBtX3R5cGUoQ1NTUnVsZTo6VU5LTk9XTl9SVUxFKSB7fQogCisgICAgTUFJTl9U
SFJFQURfQUxMT0NBVEVEOworCiAgICAgdmlydHVhbCBib29sIGlzUnVsZSgpIHsgcmV0dXJuIHRy
dWU7IH0KICAgICB1bnNpZ25lZCBzaG9ydCB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9
CiAKQEAgLTcxLDYgKzc0LDggQEAgcHVibGljOgogICAgIENTU0NoYXJzZXRSdWxlSW1wbChTdHls
ZUJhc2VJbXBsICpwYXJlbnQpCiAgICAgICAgIDogQ1NTUnVsZUltcGwocGFyZW50KSB7IG1fdHlw
ZSA9IENTU1J1bGU6OkNIQVJTRVRfUlVMRTsgfQogCisgICAgTUFJTl9USFJFQURfQUxMT0NBVEVE
OworCiAgICAgdmlydHVhbCBib29sIGlzQ2hhcnNldFJ1bGUoKSB7IHJldHVybiB0cnVlOyB9CiAK
ICAgICBET01TdHJpbmcgZW5jb2RpbmcoKSBjb25zdCB7IHJldHVybiBtX2VuY29kaW5nOyB9CkBA
IC04NSw5ICs5MCwxMCBAQCBjbGFzcyBDU1NGb250RmFjZVJ1bGVJbXBsIDogcHVibGljIENTU1J1
CiB7CiBwdWJsaWM6CiAgICAgQ1NTRm9udEZhY2VSdWxlSW1wbChTdHlsZUJhc2VJbXBsICpwYXJl
bnQpOwotCiAgICAgdmlydHVhbCB+Q1NTRm9udEZhY2VSdWxlSW1wbCgpOwogCisgICAgTUFJTl9U
SFJFQURfQUxMT0NBVEVEOworICAgIAogICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uSW1w
bCAqc3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlOyB9CiAKICAgICB2aXJ0dWFsIGJvb2wg
aXNGb250RmFjZVJ1bGUoKSB7IHJldHVybiB0cnVlOyB9CkBAIC0xMDQsOSArMTEwLDEwIEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRE9NOjpET01TdHJpbmcgJm1lZGlh
ICk7CiAgICAgQ1NTSW1wb3J0UnVsZUltcGwoIFN0eWxlQmFzZUltcGwgKnBhcmVudCwgY29uc3Qg
RE9NOjpET01TdHJpbmcgJmhyZWYsCiAgICAgICAgICAgICAgICAgICAgICAgIE1lZGlhTGlzdElt
cGwgKm1lZGlhICk7Ci0KICAgICB2aXJ0dWFsIH5DU1NJbXBvcnRSdWxlSW1wbCgpOwogCisgICAg
TUFJTl9USFJFQURfQUxMT0NBVEVEOworCiAgICAgRE9NOjpET01TdHJpbmcgaHJlZigpIGNvbnN0
IHsgcmV0dXJuIG1fc3RySHJlZjsgfQogICAgIE1lZGlhTGlzdEltcGwgKm1lZGlhKCkgY29uc3Qg
eyByZXR1cm4gbV9sc3RNZWRpYTsgfQogICAgIENTU1N0eWxlU2hlZXRJbXBsICpzdHlsZVNoZWV0
KCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZVNoZWV0OyB9CkBAIC0xNTYsOSArMTYzLDEwIEBAIHB1
YmxpYzoKICAgICBDU1NNZWRpYVJ1bGVJbXBsKCBTdHlsZUJhc2VJbXBsICpwYXJlbnQgKTsKICAg
ICBDU1NNZWRpYVJ1bGVJbXBsKCBTdHlsZUJhc2VJbXBsICpwYXJlbnQsIGNvbnN0IERPTTo6RE9N
U3RyaW5nICZtZWRpYSApOwogICAgIENTU01lZGlhUnVsZUltcGwoIFN0eWxlQmFzZUltcGwgKnBh
cmVudCwgTWVkaWFMaXN0SW1wbCAqbWVkaWFMaXN0LCBDU1NSdWxlTGlzdEltcGwgKnJ1bGVMaXN0
ICk7Ci0KICAgICB2aXJ0dWFsIH5DU1NNZWRpYVJ1bGVJbXBsKCk7CiAKKyAgICBNQUlOX1RIUkVB
RF9BTExPQ0FURUQ7CisKICAgICBNZWRpYUxpc3RJbXBsICptZWRpYSgpIGNvbnN0IHsgcmV0dXJu
IG1fbHN0TWVkaWE7IH0KICAgICBDU1NSdWxlTGlzdEltcGwgKmNzc1J1bGVzKCkgeyByZXR1cm4g
bV9sc3RDU1NSdWxlczsgfQogCkBAIC0xNzksOSArMTg3LDEwIEBAIGNsYXNzIENTU1BhZ2VSdWxl
SW1wbCA6IHB1YmxpYyBDU1NSdWxlSW0KIHsKIHB1YmxpYzoKICAgICBDU1NQYWdlUnVsZUltcGwo
U3R5bGVCYXNlSW1wbCAqcGFyZW50KTsKLQogICAgIHZpcnR1YWwgfkNTU1BhZ2VSdWxlSW1wbCgp
OwogCisgICAgTUFJTl9USFJFQURfQUxMT0NBVEVEOworCiAgICAgQ1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb25JbXBsICpzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGU7IH0KIAogICAgIHZp
cnR1YWwgYm9vbCBpc1BhZ2VSdWxlKCkgeyByZXR1cm4gdHJ1ZTsgfQpAQCAtMTk5LDkgKzIwOCwx
MCBAQCBjbGFzcyBDU1NTdHlsZVJ1bGVJbXBsIDogcHVibGljIENTU1J1bGVJCiB7CiBwdWJsaWM6
CiAgICAgQ1NTU3R5bGVSdWxlSW1wbChTdHlsZUJhc2VJbXBsICpwYXJlbnQpOwotCiAgICAgdmly
dHVhbCB+Q1NTU3R5bGVSdWxlSW1wbCgpOwogCisgICAgTUFJTl9USFJFQURfQUxMT0NBVEVEOwor
CiAgICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25JbXBsICpzdHlsZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc3R5bGU7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBpc1N0eWxlUnVsZSgpIHsgcmV0dXJu
IHRydWU7IH0KQEAgLTIyNyw2ICsyMzcsOCBAQCBjbGFzcyBDU1NVbmtub3duUnVsZUltcGwgOiBw
dWJsaWMgQ1NTUnVsCiBwdWJsaWM6CiAgICAgQ1NTVW5rbm93blJ1bGVJbXBsKFN0eWxlQmFzZUlt
cGwgKnBhcmVudCkgOiBDU1NSdWxlSW1wbChwYXJlbnQpIHt9CiAKKyAgICBNQUlOX1RIUkVBRF9B
TExPQ0FURUQ7CisKICAgICB2aXJ0dWFsIGJvb2wgaXNVbmtub3duUnVsZSgpIHsgcmV0dXJuIHRy
dWU7IH0KIH07CiAKSW5kZXg6IGtodG1sL2Nzcy9jc3Nfc3R5bGVzaGVldGltcGwuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2Nzcy9jc3Nfc3R5bGVzaGVl
dGltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEyCmRpZmYgLXUgLXAgLXIxLjEyIGto
dG1sL2Nzcy9jc3Nfc3R5bGVzaGVldGltcGwuY3BwCi0tLSBraHRtbC9jc3MvY3NzX3N0eWxlc2hl
ZXRpbXBsLmNwcAkxMSBNYXkgMjAwNSAwMDo1ODoyNyAtMDAwMAkxLjEyCisrKyBraHRtbC9jc3Mv
Y3NzX3N0eWxlc2hlZXRpbXBsLmNwcAk4IEp1bCAyMDA1IDA1OjU2OjQ0IC0wMDAwCkBAIC0zOCw4
ICszOCw2IEBACiAjaW5jbHVkZSAiaHRtbC9odG1sX2RvY3VtZW50aW1wbC5oIgogI2luY2x1ZGUg
Im1pc2MvbG9hZGVyLmgiCiAKLSNpbmNsdWRlICJ4bWxfbmFtZXNwYWNlX3RhYmxlLmgiCi0KICNp
bmNsdWRlIDxrZGVidWcuaD4KIAogdXNpbmcgbmFtZXNwYWNlIERPTTsKQEAgLTIxMCw3ICsyMDgs
NyBAQCB2b2lkIENTU1N0eWxlU2hlZXRJbXBsOjpkZWxldGVSdWxlKCB1bnNpCiAgICAgYi0+ZGVy
ZWYoKTsKIH0KIAotdm9pZCBDU1NTdHlsZVNoZWV0SW1wbDo6YWRkTmFtZXNwYWNlKENTU1BhcnNl
ciogcCwgY29uc3QgRE9NOjpET01TdHJpbmcmIHByZWZpeCwgY29uc3QgRE9NOjpET01TdHJpbmcm
IHVyaSkKK3ZvaWQgQ1NTU3R5bGVTaGVldEltcGw6OmFkZE5hbWVzcGFjZShDU1NQYXJzZXIqIHAs
IGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4LCBjb25zdCBBdG9taWNTdHJpbmcmIHVyaSkKIHsK
ICAgICBpZiAodXJpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjIwLDI2ICsyMTgs
MjEgQEAgdm9pZCBDU1NTdHlsZVNoZWV0SW1wbDo6YWRkTmFtZXNwYWNlKENTUwogICAgIGlmIChw
cmVmaXguaXNFbXB0eSgpKQogICAgICAgICAvLyBTZXQgdGhlIGRlZmF1bHQgbmFtZXNwYWNlIG9u
IHRoZSBwYXJzZXIgc28gdGhhdCBzZWxlY3RvcnMgdGhhdCBvbWl0IG5hbWVzcGFjZSBpbmZvIHdp
bGwKICAgICAgICAgLy8gYmUgYWJsZSB0byBwaWNrIGl0IHVwIGVhc2lseS4KLSAgICAgICAgcC0+
ZGVmYXVsdE5hbWVzcGFjZSA9IFhtbE5hbWVzcGFjZVRhYmxlOjpnZXROYW1lc3BhY2VJRCh1cmks
IGZhbHNlKTsKKyAgICAgICAgcC0+ZGVmYXVsdE5hbWVzcGFjZSA9IHVyaTsKIH0KIAotdm9pZCBD
U1NTdHlsZVNoZWV0SW1wbDo6ZGV0ZXJtaW5lTmFtZXNwYWNlKFFfVUlOVDMyJiBpZCwgY29uc3Qg
RE9NOjpET01TdHJpbmcmIHByZWZpeCkKK2NvbnN0IEF0b21pY1N0cmluZyYgQ1NTU3R5bGVTaGVl
dEltcGw6OmRldGVybWluZU5hbWVzcGFjZShjb25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCkKIHsK
LSAgICAvLyBJZiB0aGUgc3R5bGVzaGVldCBoYXMgbm8gbmFtZXNwYWNlcyB3ZSBjYW4ganVzdCBy
ZXR1cm4uICBUaGVyZSB3b24ndCBiZSBhbnkgbmVlZCB0byBldmVyIGNoZWNrCi0gICAgLy8gbmFt
ZXNwYWNlIHZhbHVlcyBpbiBzZWxlY3RvcnMuCi0gICAgaWYgKCFtX25hbWVzcGFjZXMpCi0gICAg
ICAgIHJldHVybjsKLSAgICAKICAgICBpZiAocHJlZml4LmlzRW1wdHkoKSkKLSAgICAgICAgaWQg
PSBtYWtlSWQobm9OYW1lc3BhY2UsIGxvY2FsTmFtZVBhcnQoaWQpKTsgLy8gTm8gbmFtZXNwYWNl
LiBJZiBhbiBlbGVtZW50L2F0dHJpYnV0ZSBoYXMgYSBuYW1lc3BhY2UsIHdlIHdvbid0IG1hdGNo
IGl0LgotICAgIGVsc2UgaWYgKHByZWZpeCA9PSAiKiIpCi0gICAgICAgIGlkID0gbWFrZUlkKGFu
eU5hbWVzcGFjZSwgbG9jYWxOYW1lUGFydChpZCkpOyAvLyBXZSdsbCBtYXRjaCBhbnkgbmFtZXNw
YWNlLgotICAgIGVsc2UgeworICAgICAgICByZXR1cm4gZW1wdHlBdG9tOyAvLyBObyBuYW1lc3Bh
Y2UuIElmIGFuIGVsZW1lbnQvYXR0cmlidXRlIGhhcyBhIG5hbWVzcGFjZSwgd2Ugd29uJ3QgbWF0
Y2ggaXQuCisgICAgZWxzZSBpZiAocHJlZml4ID09IHN0YXJBdG9tKQorICAgICAgICByZXR1cm4g
c3RhckF0b207IC8vIFdlJ2xsIG1hdGNoIGFueSBuYW1lc3BhY2UuCisgICAgZWxzZSBpZiAobV9u
YW1lc3BhY2VzKSB7CiAgICAgICAgIENTU05hbWVzcGFjZSogbnMgPSBtX25hbWVzcGFjZXMtPm5h
bWVzcGFjZUZvclByZWZpeChwcmVmaXgpOwogICAgICAgICBpZiAobnMpCi0gICAgICAgICAgICAv
LyBMb29rIHVwIHRoZSBpZCBmb3IgdGhpcyBuYW1lc3BhY2UgVVJJLgotICAgICAgICAgICAgaWQg
PSBtYWtlSWQoWG1sTmFtZXNwYWNlVGFibGU6OmdldE5hbWVzcGFjZUlEKG5zLT51cmkoKSwgZmFs
c2UpLCBsb2NhbE5hbWVQYXJ0KGlkKSk7CisgICAgICAgICAgICByZXR1cm4gbnMtPnVyaSgpOwog
ICAgIH0KKyAgICByZXR1cm4gZW1wdHlBdG9tOyAvLyBBc3N1bWUgd2Ugd29udCBtYXRjaCBhbnkg
bmFtZXNwYWNlcy4KIH0KIAogYm9vbCBDU1NTdHlsZVNoZWV0SW1wbDo6cGFyc2VTdHJpbmcoY29u
c3QgRE9NU3RyaW5nICZzdHJpbmcsIGJvb2wgc3RyaWN0KQpJbmRleDoga2h0bWwvY3NzL2Nzc19z
dHlsZXNoZWV0aW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2to
dG1sL2Nzcy9jc3Nfc3R5bGVzaGVldGltcGwuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMQpk
aWZmIC11IC1wIC1yMS4xMSBraHRtbC9jc3MvY3NzX3N0eWxlc2hlZXRpbXBsLmgKLS0tIGtodG1s
L2Nzcy9jc3Nfc3R5bGVzaGVldGltcGwuaAkxMSBNYXkgMjAwNSAwMDo1ODoyNyAtMDAwMAkxLjEx
CisrKyBraHRtbC9jc3MvY3NzX3N0eWxlc2hlZXRpbXBsLmgJOCBKdWwgMjAwNSAwNTo1Njo0NCAt
MDAwMApAQCAtMTA0LDggKzEwNCw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGRlbGV0ZVJ1bGUgKCB1
bnNpZ25lZCBsb25nIGluZGV4LCBpbnQgJmV4Y2VwdGlvbmNvZGUgKTsKICAgICB1bnNpZ25lZCBs
b25nIGFkZFJ1bGUgKCBjb25zdCBET01TdHJpbmcgJnNlbGVjdG9yLCBjb25zdCBET01TdHJpbmcg
JnN0eWxlLCBsb25nIGluZGV4LCBpbnQgJmV4Y2VwdGlvbmNvZGUgKTsKIAotICAgIHZvaWQgYWRk
TmFtZXNwYWNlKENTU1BhcnNlciogcCwgY29uc3QgRE9NOjpET01TdHJpbmcmIHByZWZpeCwgY29u
c3QgRE9NOjpET01TdHJpbmcmIHVyaSk7Ci0gICAgdm9pZCBkZXRlcm1pbmVOYW1lc3BhY2UoUV9V
SU5UMzImIGlkLCBjb25zdCBET006OkRPTVN0cmluZyYgcHJlZml4KTsKKyAgICB2b2lkIGFkZE5h
bWVzcGFjZShDU1NQYXJzZXIqIHAsIGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4LCBjb25zdCBB
dG9taWNTdHJpbmcmIHVyaSk7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBkZXRlcm1pbmVOYW1l
c3BhY2UoY29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgpOwogICAgIAogICAgIHZpcnR1YWwgYm9v
bCBwYXJzZVN0cmluZyggY29uc3QgRE9NU3RyaW5nICZzdHJpbmcsIGJvb2wgc3RyaWN0ID0gdHJ1
ZSApOwogCkluZGV4OiBraHRtbC9jc3MvY3NzcGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9jc3MvY3NzcGFyc2VyLmNwcCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS45OApkaWZmIC11IC1wIC1yMS45OCBraHRtbC9jc3MvY3NzcGFyc2VyLmNwcAot
LS0ga2h0bWwvY3NzL2Nzc3BhcnNlci5jcHAJMTEgTWF5IDIwMDUgMDI6MTA6MDkgLTAwMDAJMS45
OAorKysga2h0bWwvY3NzL2Nzc3BhcnNlci5jcHAJOCBKdWwgMjAwNSAwNTo1Njo0NiAtMDAwMApA
QCAtMTAyLDcgKzEwMiw3IEBAIENTU1BhcnNlcjo6Q1NTUGFyc2VyKCBib29sIHN0cmljdFBhcnNp
bmcKICAgICBpbXBvcnRhbnQgPSBmYWxzZTsKICAgICBpblBhcnNlU2hvcnRIYW5kID0gZmFsc2U7
CiAgICAgCi0gICAgZGVmYXVsdE5hbWVzcGFjZSA9IGFueU5hbWVzcGFjZTsKKyAgICBkZWZhdWx0
TmFtZXNwYWNlID0gc3RhckF0b207CiAgICAgCiAgICAgeXlfc3RhcnQgPSAxOwogCkBAIC0xNjEs
NyArMTYxLDcgQEAgdm9pZCBDU1NQYXJzZXI6OnNldHVwUGFyc2VyKGNvbnN0IGNoYXIgKgogdm9p
ZCBDU1NQYXJzZXI6OnBhcnNlU2hlZXQoIENTU1N0eWxlU2hlZXRJbXBsICpzaGVldCwgY29uc3Qg
RE9NU3RyaW5nICZzdHJpbmcgKQogewogICAgIHN0eWxlRWxlbWVudCA9IHNoZWV0OwotICAgIGRl
ZmF1bHROYW1lc3BhY2UgPSBhbnlOYW1lc3BhY2U7IC8vIFJlc2V0IHRoZSBkZWZhdWx0IG5hbWVz
cGFjZS4KKyAgICBkZWZhdWx0TmFtZXNwYWNlID0gc3RhckF0b207IC8vIFJlc2V0IHRoZSBkZWZh
dWx0IG5hbWVzcGFjZS4KICAgICAKICAgICBzZXR1cFBhcnNlciAoIiIsIHN0cmluZywgIiIpOwog
CkluZGV4OiBraHRtbC9jc3MvY3NzcGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L1dlYkNvcmUva2h0bWwvY3NzL2Nzc3BhcnNlci5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjMwCmRpZmYgLXUgLXAgLXIxLjMwIGtodG1sL2Nzcy9jc3NwYXJzZXIuaAotLS0ga2h0bWwvY3Nz
L2Nzc3BhcnNlci5oCTE5IE5vdiAyMDA0IDAwOjEyOjIwIC0wMDAwCTEuMzAKKysrIGtodG1sL2Nz
cy9jc3NwYXJzZXIuaAk4IEp1bCAyMDA1IDA1OjU2OjQ2IC0wMDAwCkBAIC0xNjQsNyArMTY0LDcg
QEAgbmFtZXNwYWNlIERPTSB7CiAJaW50IG1heFBhcnNlZFByb3BlcnRpZXM7CiAJYm9vbCBpblBh
cnNlU2hvcnRIYW5kOwogCi0gICAgICAgIFFfVUlOVDE2IGRlZmF1bHROYW1lc3BhY2U7CisgICAg
ICAgIEF0b21pY1N0cmluZyBkZWZhdWx0TmFtZXNwYWNlOwogICAgICAgICAKIAlzdGF0aWMgQ1NT
UGFyc2VyICpjdXJyZW50UGFyc2VyOwogCkluZGV4OiBraHRtbC9jc3MvY3Nzc3R5bGVzZWxlY3Rv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvY3NzL2Nz
c3N0eWxlc2VsZWN0b3IuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE4OApkaWZmIC11IC1w
IC1yMS4xODgga2h0bWwvY3NzL2Nzc3N0eWxlc2VsZWN0b3IuY3BwCi0tLSBraHRtbC9jc3MvY3Nz
c3R5bGVzZWxlY3Rvci5jcHAJNiBKdWwgMjAwNSAwMToyODo0MSAtMDAwMAkxLjE4OAorKysga2h0
bWwvY3NzL2Nzc3N0eWxlc2VsZWN0b3IuY3BwCTggSnVsIDIwMDUgMDU6NTY6NDkgLTAwMDAKQEAg
LTMzOSw3ICszMzksNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUnVsZXMoQ1NTUnVs
CiAgICAgICAgICAgICBtYXRjaFJ1bGVzRm9yTGlzdChydWxlcy0+Z2V0Q2xhc3NSdWxlcyhzaW5n
bGVDbGFzcy0+c3RyaW5nKCkuaW1wbGVtZW50YXRpb24oKSksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJ
bmRleCk7CiAgICAgfQotICAgIG1hdGNoUnVsZXNGb3JMaXN0KHJ1bGVzLT5nZXRUYWdSdWxlcyhs
b2NhbE5hbWVQYXJ0KGVsZW1lbnQtPmlkKCkpKSwKKyAgICBtYXRjaFJ1bGVzRm9yTGlzdChydWxl
cy0+Z2V0VGFnUnVsZXMoZWxlbWVudC0+bG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKSksCiAg
ICAgICAgICAgICAgICAgICAgICAgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgpOwogICAg
IG1hdGNoUnVsZXNGb3JMaXN0KHJ1bGVzLT5nZXRVbml2ZXJzYWxSdWxlcygpLCBmaXJzdFJ1bGVJ
bmRleCwgbGFzdFJ1bGVJbmRleCk7CiAgICAgCkBAIC0zNjAsOSArMzYwLDkgQEAgdm9pZCBDU1NT
dHlsZVNlbGVjdG9yOjptYXRjaFJ1bGVzRm9yTGlzdAogICAgIGlmICghcnVsZXMpIHJldHVybjsK
ICAgICBmb3IgKENTU1J1bGVEYXRhKiBkID0gcnVsZXMtPmZpcnN0KCk7IGQ7IGQgPSBkLT5uZXh0
KCkpIHsKICAgICAgICAgQ1NTU3R5bGVSdWxlSW1wbCogcnVsZSA9IGQtPnJ1bGUoKTsKLSAgICAg
ICAgUV9VSU5UMTYgY3NzVGFnSWQgPSBsb2NhbE5hbWVQYXJ0KGVsZW1lbnQtPmlkKCkpOwotICAg
ICAgICBRX1VJTlQxNiB0YWcgPSBsb2NhbE5hbWVQYXJ0KGQtPnNlbGVjdG9yKCktPnRhZyk7Ci0g
ICAgICAgIGlmICgoY3NzVGFnSWQgPT0gdGFnIHx8IHRhZyA9PSBhbnlMb2NhbE5hbWUpICYmIGNo
ZWNrU2VsZWN0b3IoZC0+c2VsZWN0b3IoKSwgZWxlbWVudCkpIHsKKyAgICAgICAgY29uc3QgQXRv
bWljU3RyaW5nJiBsb2NhbE5hbWUgPSBlbGVtZW50LT5sb2NhbE5hbWUoKTsKKyAgICAgICAgY29u
c3QgQXRvbWljU3RyaW5nJiBzZWxlY3RvckxvY2FsTmFtZSA9IGQtPnNlbGVjdG9yKCktPnRhZy5s
b2NhbE5hbWUoKTsKKyAgICAgICAgaWYgKChsb2NhbE5hbWUgPT0gc2VsZWN0b3JMb2NhbE5hbWUg
fHwgc2VsZWN0b3JMb2NhbE5hbWUgPT0gc3RhckF0b20pICYmIGNoZWNrU2VsZWN0b3IoZC0+c2Vs
ZWN0b3IoKSwgZWxlbWVudCkpIHsKICAgICAgICAgICAgIC8vIElmIHRoZSBydWxlIGhhcyBubyBw
cm9wZXJ0aWVzIHRvIGFwcGx5LCB0aGVuIGlnbm9yZSBpdC4KICAgICAgICAgICAgIENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uSW1wbCogZGVjbCA9IHJ1bGUtPmRlY2xhcmF0aW9uKCk7CiAgICAg
ICAgICAgICBpZiAoIWRlY2wgfHwgIWRlY2wtPmxlbmd0aCgpKSBjb250aW51ZTsKQEAgLTYwOSw3
ICs2MDksNyBAQCBib29sIENTU1N0eWxlU2VsZWN0b3I6OmNhblNoYXJlU3R5bGVXaXRoCiAgICAg
aWYgKG4tPmlzU3R5bGVkRWxlbWVudCgpKSB7CiAgICAgICAgIGJvb2wgbW91c2VJbnNpZGUgPSBl
bGVtZW50LT5yZW5kZXJlcigpID8gZWxlbWVudC0+cmVuZGVyZXIoKS0+bW91c2VJbnNpZGUoKSA6
IGZhbHNlOwogICAgICAgICBTdHlsZWRFbGVtZW50SW1wbCogcyA9IHN0YXRpY19jYXN0PFN0eWxl
ZEVsZW1lbnRJbXBsKj4obik7Ci0gICAgICAgIGlmIChzLT5yZW5kZXJlcigpICYmIChzLT5pZCgp
ID09IGVsZW1lbnQtPmlkKCkpICYmICFzLT5oYXNJRCgpICYmCisgICAgICAgIGlmIChzLT5yZW5k
ZXJlcigpICYmIChzLT50YWdOYW1lKCkgPT0gZWxlbWVudC0+dGFnTmFtZSgpKSAmJiAhcy0+aGFz
SUQoKSAmJgogICAgICAgICAgICAgKHMtPmhhc0NsYXNzKCkgPT0gZWxlbWVudC0+aGFzQ2xhc3Mo
KSkgJiYgIXMtPmlubGluZVN0eWxlRGVjbCgpICYmCiAgICAgICAgICAgICAocy0+aGFzTWFwcGVk
QXR0cmlidXRlcygpID09IHN0eWxlZEVsZW1lbnQtPmhhc01hcHBlZEF0dHJpYnV0ZXMoKSkgJiYK
ICAgICAgICAgICAgIChzLT5pc0xpbmsoKSA9PSBlbGVtZW50LT5pc0xpbmsoKSkgJiYgCkBAIC04
ODUsMjMgKzg4NSwyMyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFkanVzdFJlbmRlclN0eWxl
CiAgICAgICAgIC8vIFNpdGVzIGFsc28gY29tbW9ubHkgdXNlIGRpc3BsYXk6aW5saW5lL2Jsb2Nr
IG9uIDx0ZD5zIGFuZCA8dGFibGU+cy4gIEluIHF1aXJrcyBtb2RlIHdlIGZvcmNlCiAgICAgICAg
IC8vIHRoZXNlIHRhZ3MgdG8gcmV0YWluIHRoZWlyIGRpc3BsYXkgdHlwZXMuCiAgICAgICAgIGlm
ICghc3RyaWN0UGFyc2luZyAmJiBlKSB7Ci0gICAgICAgICAgICBpZiAoZS0+aWQoKSA9PSBJRF9U
RCkgeworICAgICAgICAgICAgaWYgKGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0ZCgpKSkgewog
ICAgICAgICAgICAgICAgIHN0eWxlLT5zZXREaXNwbGF5KFRBQkxFX0NFTEwpOwogICAgICAgICAg
ICAgICAgIHN0eWxlLT5zZXRGbG9hdGluZyhGTk9ORSk7CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBlbHNlIGlmIChlLT5pZCgpID09IElEX1RBQkxFKQorICAgICAgICAgICAgZWxzZSBpZiAo
ZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRhYmxlKCkpKQogICAgICAgICAgICAgICAgIHN0eWxl
LT5zZXREaXNwbGF5KHN0eWxlLT5pc0Rpc3BsYXlJbmxpbmVUeXBlKCkgPyBJTkxJTkVfVEFCTEUg
OiBUQUJMRSk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBGcmFtZXMgYW5kIGZyYW1lc2V0cyBu
ZXZlciBob25vciBwb3NpdGlvbjpyZWxhdGl2ZSBvciBwb3NpdGlvbjphYnNvbHV0ZS4gIFRoaXMg
aXMgbmVjZXNzYXJ5IHRvCiAgICAgICAgIC8vIGZpeCBhIGNyYXNoIHdoZXJlIGEgc2l0ZSB0cmll
cyB0byBwb3NpdGlvbiB0aGVzZSBvYmplY3RzLiAgVGhleSBhbHNvIG5ldmVyIGhvbm9yIGRpc3Bs
YXkuCi0gICAgICAgIGlmIChlICYmIChlLT5pZCgpID09IElEX0ZSQU1FIHx8IGUtPmlkKCkgPT0g
SURfRlJBTUVTRVQpKSB7CisgICAgICAgIGlmIChlICYmIChlLT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6ZnJhbWUoKSkgfHwgZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZyYW1lc2V0KCkpKSkgewog
ICAgICAgICAgICAgc3R5bGUtPnNldFBvc2l0aW9uKFNUQVRJQyk7CiAgICAgICAgICAgICBzdHls
ZS0+c2V0RGlzcGxheShCTE9DSyk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBUYWJsZSBoZWFk
ZXJzIHdpdGggYSB0ZXh0LWFsaWduIG9mIGF1dG8gd2lsbCBjaGFuZ2UgdGhlIHRleHQtYWxpZ24g
dG8gY2VudGVyLgotICAgICAgICBpZiAoZSAmJiBlLT5pZCgpID09IElEX1RIICYmIHN0eWxlLT50
ZXh0QWxpZ24oKSA9PSBUQUFVVE8pCisgICAgICAgIGlmIChlICYmIGUtPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjp0aCgpKSAmJiBzdHlsZS0+dGV4dEFsaWduKCkgPT0gVEFBVVRPKQogICAgICAgICAg
ICAgc3R5bGUtPnNldFRleHRBbGlnbihDRU5URVIpOwogICAgICAgICAKICAgICAgICAgLy8gTXV0
YXRlIHRoZSBkaXNwbGF5IHRvIEJMT0NLIG9yIFRBQkxFIGZvciBjZXJ0YWluIGNhc2VzLCBlLmcu
LCBpZiBzb21lb25lIGF0dGVtcHRzIHRvCkBAIC05NzksNyArOTc5LDcgQEAgYm9vbCBDU1NTdHls
ZVNlbGVjdG9yOjpjaGVja1NlbGVjdG9yKENTUwogICAgIC8vIFdlIHRyYWNrIHdoZXRoZXIgb3Ig
bm90IHRoZSBydWxlIGNvbnRhaW5zIG9ubHkgOmhvdmVyIGFuZCA6YWN0aXZlIGluIGEgc2ltcGxl
IHNlbGVjdG9yLiBJZgogICAgIC8vIHNvLCB3ZSBjYW4ndCBhbGxvdyB0aGF0IHRvIGFwcGx5IHRv
IGV2ZXJ5IGVsZW1lbnQgb24gdGhlIHBhZ2UuICBXZSBhc3N1bWUgdGhlIGF1dGhvciBpbnRlbmRl
ZAogICAgIC8vIHRvIGFwcGx5IHRoZSBydWxlcyBvbmx5IHRvIGxpbmtzLgotICAgIGJvb2wgb25s
eUhvdmVyQWN0aXZlID0gKHNlbC0+dGFnID09IGFueVFOYW1lICYmCisgICAgYm9vbCBvbmx5SG92
ZXJBY3RpdmUgPSAoIXNlbC0+aGFzVGFnKCkgJiYKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAoc2VsLT5tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3MgJiYKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChzZWwtPnBzZXVkb1R5cGUoKSA9PSBDU1NTZWxlY3Rvcjo6UHNl
dWRvSG92ZXIgfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWwtPnBzZXVkb1R5
cGUoKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQWN0aXZlKSkpOwpAQCAtMTA5NiwxOSArMTA5Niwx
NCBAQCBib29sIENTU1N0eWxlU2VsZWN0b3I6OmNoZWNrT25lU2VsZWN0b3IoCiAgICAgaWYoIWUp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChzZWwtPnRhZyAhPSBhbnlRTmFtZSkg
ewotICAgICAgICBpbnQgZWx0SUQgPSBlLT5pZCgpOwotICAgICAgICBRX1VJTlQxNiBsb2NhbE5h
bWUgPSBsb2NhbE5hbWVQYXJ0KGVsdElEKTsKLSAgICAgICAgUV9VSU5UMTYgbnMgPSBuYW1lc3Bh
Y2VQYXJ0KGVsdElEKTsKLSAgICAgICAgUV9VSU5UMTYgc2VsTG9jYWxOYW1lID0gbG9jYWxOYW1l
UGFydChzZWwtPnRhZyk7Ci0gICAgICAgIFFfVUlOVDE2IHNlbE5TID0gbmFtZXNwYWNlUGFydChz
ZWwtPnRhZyk7Ci0gICAgICAgIAotICAgICAgICBpZiAobG9jYWxOYW1lIDw9IElEX0xBU1RfVEFH
ICYmIGUtPmlzSFRNTEVsZW1lbnQoKSkKLSAgICAgICAgICAgIG5zID0geGh0bWxOYW1lc3BhY2U7
IC8vIEZJWE1FOiBSZWFsbHkgd2FudCB0byBtb3ZlIGF3YXkgZnJvbSB0aGlzIGNvbXBsaWNhdGVk
IGhhY2tlcnkgYW5kIGp1c3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN3
aXRjaCB0YWdzIGFuZCBhdHRyIG5hbWVzIG92ZXIgdG8gQXRvbWljU3RyaW5ncy4KLSAgICAgICAg
Ci0gICAgICAgIGlmICgoc2VsTG9jYWxOYW1lICE9IGFueUxvY2FsTmFtZSAmJiBsb2NhbE5hbWUg
IT0gc2VsTG9jYWxOYW1lKSB8fAotICAgICAgICAgICAgKHNlbE5TICE9IGFueU5hbWVzcGFjZSAm
JiBucyAhPSBzZWxOUykpCisgICAgaWYgKHNlbC0+aGFzVGFnKCkpIHsKKyAgICAgICAgY29uc3Qg
QXRvbWljU3RyaW5nJiBsb2NhbE5hbWUgPSBlLT5sb2NhbE5hbWUoKTsKKyAgICAgICAgY29uc3Qg
QXRvbWljU3RyaW5nJiBucyA9IGUtPm5hbWVzcGFjZVVSSSgpOworICAgICAgICBjb25zdCBBdG9t
aWNTdHJpbmcmIHNlbExvY2FsTmFtZSA9IHNlbC0+dGFnLmxvY2FsTmFtZSgpOworICAgICAgICBj
b25zdCBBdG9taWNTdHJpbmcmIHNlbE5TID0gc2VsLT50YWcubmFtZXNwYWNlVVJJKCk7CisgICAg
CisgICAgICAgIGlmICgoc2VsTG9jYWxOYW1lICE9IHN0YXJBdG9tICYmIGxvY2FsTmFtZSAhPSBz
ZWxMb2NhbE5hbWUpIHx8CisgICAgICAgICAgICAoc2VsTlMgIT0gc3RhckF0b20gJiYgbnMgIT0g
c2VsTlMpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtMTI5NSw3ICsx
MjkwLDcgQEAgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpjaGVja09uZVNlbGVjdG9yKAogICAgICAg
ICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvSG92ZXI6IHsKICAgICAgICAgICAgICAgICAv
LyBJZiB3ZSdyZSBpbiBxdWlya3MgbW9kZSwgdGhlbiBob3ZlciBzaG91bGQgbmV2ZXIgbWF0Y2gg
YW5jaG9ycyB3aXRoIG5vCiAgICAgICAgICAgICAgICAgLy8gaHJlZi4gIFRoaXMgaXMgaW1wb3J0
YW50IGZvciBzaXRlcyBsaWtlIHdzai5jb20uCi0gICAgICAgICAgICAgICAgaWYgKHN0cmljdFBh
cnNpbmcgfHwgZS0+aWQoKSAhPSBJRF9BIHx8IGUtPmlzTGluaygpKSB7CisgICAgICAgICAgICAg
ICAgaWYgKHN0cmljdFBhcnNpbmcgfHwgIWUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjphKCkpIHx8
IGUtPmlzTGluaygpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50ID09IGUgJiYg
c3R5bGUpCiAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZS0+c2V0QWZmZWN0ZWRCeUhvdmVy
UnVsZXModHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChlLT5yZW5kZXJlcigpKSB7CkBA
IC0xMzI2LDcgKzEzMjEsNyBAQCBib29sIENTU1N0eWxlU2VsZWN0b3I6OmNoZWNrT25lU2VsZWN0
b3IoCiAgICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9BY3RpdmU6CiAgICAgICAg
ICAgICAgICAgLy8gSWYgd2UncmUgaW4gcXVpcmtzIG1vZGUsIHRoZW4gOmFjdGl2ZSBzaG91bGQg
bmV2ZXIgbWF0Y2ggYW5jaG9ycyB3aXRoIG5vCiAgICAgICAgICAgICAgICAgLy8gaHJlZi4gCi0g
ICAgICAgICAgICAgICAgaWYgKHN0cmljdFBhcnNpbmcgfHwgZS0+aWQoKSAhPSBJRF9BIHx8IGUt
PmlzTGluaygpKSB7CisgICAgICAgICAgICAgICAgaWYgKHN0cmljdFBhcnNpbmcgfHwgIWUtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjphKCkpIHx8IGUtPmlzTGluaygpKSB7CiAgICAgICAgICAgICAg
ICAgICAgIGlmIChlbGVtZW50ID09IGUgJiYgc3R5bGUpCiAgICAgICAgICAgICAgICAgICAgICAg
ICBzdHlsZS0+c2V0QWZmZWN0ZWRCeUFjdGl2ZVJ1bGVzKHRydWUpOwogICAgICAgICAgICAgICAg
ICAgICBlbHNlIGlmIChlLT5yZW5kZXJlcigpKQpAQCAtMTQyMCwxOSArMTQxNSw2IEBAIHZvaWQg
Q1NTUnVsZVNldDo6YWRkVG9SdWxlU2V0KERPTTo6RE9NU3QKICAgICAgICAgcnVsZXMtPmFwcGVu
ZChtX3J1bGVDb3VudCsrLCBydWxlLCBzZWwpOwogfQogCi12b2lkIENTU1J1bGVTZXQ6OmFkZFRv
UnVsZVNldChpbnQga2V5LCBJbnRSdWxlTWFwJiBtYXAsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBDU1NTdHlsZVJ1bGVJbXBsKiBydWxlLCBDU1NTZWxlY3Rvciogc2VsKQotewotICAg
IGFzc2VydChrZXkpOwotICAgIGFzc2VydChrZXkgIT0gLTEpOwotICAgIENTU1J1bGVEYXRhTGlz
dCogcnVsZXMgPSBtYXAuZ2V0KGtleSk7Ci0gICAgaWYgKCFydWxlcykgewotICAgICAgICBydWxl
cyA9IG5ldyBDU1NSdWxlRGF0YUxpc3QobV9ydWxlQ291bnQrKywgcnVsZSwgc2VsKTsKLSAgICAg
ICAgbWFwLmluc2VydChrZXksIHJ1bGVzKTsKLSAgICB9IGVsc2UKLSAgICAgICAgcnVsZXMtPmFw
cGVuZChtX3J1bGVDb3VudCsrLCBydWxlLCBzZWwpOwotfQotCiB2b2lkIENTU1J1bGVTZXQ6OmFk
ZFJ1bGUoQ1NTU3R5bGVSdWxlSW1wbCogcnVsZSwgQ1NTU2VsZWN0b3IqIHNlbCkKIHsKICAgICBp
ZiAoc2VsLT5tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6SWQpIHsKQEAgLTE0NDQsMTAgKzE0MjYsOSBA
QCB2b2lkIENTU1J1bGVTZXQ6OmFkZFJ1bGUoQ1NTU3R5bGVSdWxlSW1wCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgIAotICAgIFFfVUlOVDE2IGxvY2FsTmFtZSA9IGxvY2FsTmFtZVBhcnQo
c2VsLT50YWcpOwotICAgIGlmIChsb2NhbE5hbWUgIT0gYW55TG9jYWxOYW1lKSB7Ci0gICAgICAg
IC8vIEZJWE1FOiBtYXliZSBpdCB3b3VsZCBiZSBiZXR0ZXIgdG8ganVzdCB1c2UgYW4gaW50LWtl
eWVkIEhhc2hNYXAgaGVyZQotICAgICAgICBhZGRUb1J1bGVTZXQobG9jYWxOYW1lLCBtX3RhZ1J1
bGVzLCBydWxlLCBzZWwpOworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lID0gc2Vs
LT50YWcubG9jYWxOYW1lKCk7CisgICAgaWYgKGxvY2FsTmFtZSAhPSBzdGFyQXRvbSkgeworICAg
ICAgICBhZGRUb1J1bGVTZXQobG9jYWxOYW1lLmltcGxlbWVudGF0aW9uKCksIG1fdGFnUnVsZXMs
IHJ1bGUsIHNlbCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCkluZGV4OiBraHRtbC9j
c3MvY3Nzc3R5bGVzZWxlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJD
b3JlL2todG1sL2Nzcy9jc3NzdHlsZXNlbGVjdG9yLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
MzQKZGlmZiAtdSAtcCAtcjEuMzQga2h0bWwvY3NzL2Nzc3N0eWxlc2VsZWN0b3IuaAotLS0ga2h0
bWwvY3NzL2Nzc3N0eWxlc2VsZWN0b3IuaAk2IEp1bCAyMDA1IDAxOjI4OjQyIC0wMDAwCTEuMzQK
KysrIGtodG1sL2Nzcy9jc3NzdHlsZXNlbGVjdG9yLmgJOCBKdWwgMjAwNSAwNTo1Njo1MCAtMDAw
MApAQCAtMjQsNyArMjQsNiBAQAogI2RlZmluZSBfQ1NTX2Nzc3N0eWxlc2VsZWN0b3JfaF8KIAog
I2luY2x1ZGUgPHFwdHJ2ZWN0b3IuaD4KLSNpbmNsdWRlIDxxcHRyZGljdC5oPgogI2luY2x1ZGUg
Im1pc2MvcG9pbnRlcmhhc2guaCIKIAogI2luY2x1ZGUgInJlbmRlcmluZy9yZW5kZXJfc3R5bGUu
aCIKQEAgLTI3NCwyNSArMjczLDIyIEBAIHB1YmxpYzoKICAgICAgICAgTUFJTl9USFJFQURfQUxM
T0NBVEVEOwogCiAgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxET006OkRPTVN0cmluZ0ltcGwgKiwg
Q1NTUnVsZURhdGFMaXN0ICosIFBvaW50ZXJIYXNoPERPTTo6RE9NU3RyaW5nSW1wbCAqPiA+IEF0
b21SdWxlTWFwOwotICAgICAgICB0eXBlZGVmIEhhc2hNYXA8aW50LCBDU1NSdWxlRGF0YUxpc3Qg
KiwgUG9pbnRlckhhc2g8aW50PiA+IEludFJ1bGVNYXA7CiAKICAgICAgICAgdm9pZCBhZGRSdWxl
c0Zyb21TaGVldChET006OkNTU1N0eWxlU2hlZXRJbXBsKiBzaGVldCwgY29uc3QgRE9NOjpET01T
dHJpbmcgJm1lZGl1bSA9ICJzY3JlZW4iKTsKIAogICAgICAgICB2b2lkIGFkZFJ1bGUoRE9NOjpD
U1NTdHlsZVJ1bGVJbXBsKiBydWxlLCBET006OkNTU1NlbGVjdG9yKiBzZWwpOwogICAgICAgICB2
b2lkIGFkZFRvUnVsZVNldChET006OkRPTVN0cmluZ0ltcGwqIGtleSwgQXRvbVJ1bGVNYXAmIG1h
cCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgRE9NOjpDU1NTdHlsZVJ1bGVJbXBsKiBydWxl
LCBET006OkNTU1NlbGVjdG9yKiBzZWwpOwotICAgICAgICB2b2lkIGFkZFRvUnVsZVNldChpbnQg
a2V5LCBJbnRSdWxlTWFwJiBtYXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIERPTTo6Q1NT
U3R5bGVSdWxlSW1wbCogcnVsZSwgRE9NOjpDU1NTZWxlY3Rvciogc2VsKTsKIAogICAgICAgICBD
U1NSdWxlRGF0YUxpc3QqIGdldElEUnVsZXMoRE9NOjpET01TdHJpbmdJbXBsKiBrZXkpIHsgcmV0
dXJuIG1faWRSdWxlcy5nZXQoa2V5KTsgfQogICAgICAgICBDU1NSdWxlRGF0YUxpc3QqIGdldENs
YXNzUnVsZXMoRE9NOjpET01TdHJpbmdJbXBsKiBrZXkpIHsgcmV0dXJuIG1fY2xhc3NSdWxlcy5n
ZXQoa2V5KTsgfQotICAgICAgICBDU1NSdWxlRGF0YUxpc3QqIGdldFRhZ1J1bGVzKGludCBrZXkp
IHsgcmV0dXJuIG1fdGFnUnVsZXMuZ2V0KGtleSk7IH0KKyAgICAgICAgQ1NTUnVsZURhdGFMaXN0
KiBnZXRUYWdSdWxlcyhET006OkRPTVN0cmluZ0ltcGwqIGtleSkgeyByZXR1cm4gbV90YWdSdWxl
cy5nZXQoa2V5KTsgfQogICAgICAgICBDU1NSdWxlRGF0YUxpc3QqIGdldFVuaXZlcnNhbFJ1bGVz
KCkgeyByZXR1cm4gbV91bml2ZXJzYWxSdWxlczsgfQogCiAgICAgcHVibGljOgogICAgICAgICBB
dG9tUnVsZU1hcCBtX2lkUnVsZXM7CiAgICAgICAgIEF0b21SdWxlTWFwIG1fY2xhc3NSdWxlczsK
LSAgICAgICAgSW50UnVsZU1hcCBtX3RhZ1J1bGVzOworICAgICAgICBBdG9tUnVsZU1hcCBtX3Rh
Z1J1bGVzOwogICAgICAgICBDU1NSdWxlRGF0YUxpc3QqIG1fdW5pdmVyc2FsUnVsZXM7CiAgICAg
ICAgIAogICAgICAgICB1aW50IG1fcnVsZUNvdW50OwpJbmRleDoga2h0bWwvY3NzL3BhcnNlci55
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2Nzcy9wYXJzZXIu
eSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zOQpkaWZmIC11IC1wIC1yMS4zOSBraHRtbC9jc3Mv
cGFyc2VyLnkKLS0tIGtodG1sL2Nzcy9wYXJzZXIueQkyMiBKdW4gMjAwNSAyMTowNTo1OSAtMDAw
MAkxLjM5CisrKyBraHRtbC9jc3MvcGFyc2VyLnkJOCBKdWwgMjAwNSAwNTo1Njo1MCAtMDAwMApA
QCAtMzQsOSArMzQsNyBAQAogI2luY2x1ZGUgPGNzcy9jc3NfdmFsdWVpbXBsLmg+CiAjaW5jbHVk
ZSA8bWlzYy9odG1saGFzaGVzLmg+CiAjaW5jbHVkZSAiY3NzcGFyc2VyLmgiCi0KLSNpbmNsdWRl
ICJ4bWxfbmFtZXNwYWNlX3RhYmxlLmgiCi0gICAgCisgICAKICNpbmNsdWRlIDxhc3NlcnQuaD4K
ICNpbmNsdWRlIDxrZGVidWcuaD4KIC8vICNkZWZpbmUgQ1NTX0RFQlVHCkBAIC0xMzEsNyArMTI5
LDYgQEAgc3RhdGljIGlubGluZSBpbnQgZ2V0VmFsdWVJRChjb25zdCBjaGFyIAogICAgIGZsb2F0
IHZhbDsKICAgICBpbnQgcHJvcF9pZDsKICAgICBpbnQgYXR0cmlidXRlOwotICAgIGludCBlbGVt
ZW50OwogICAgIENTU1NlbGVjdG9yOjpSZWxhdGlvbiByZWxhdGlvbjsKICAgICBib29sIGI7CiAg
ICAgaW50IGk7CkBAIC0xNzcsNiArMTc0LDggQEAgc3RhdGljIGludCBjc3N5eWxleCggWVlTVFlQ
RSAqeXlsdmFsICkgewogJXRva2VuICcuJwogJXRva2VuICdbJwogCisldG9rZW4gPHN0cmluZz4g
JyonCisKICV0b2tlbiBJTVBPUlRfU1lNCiAldG9rZW4gUEFHRV9TWU0KICV0b2tlbiBNRURJQV9T
WU0KQEAgLTI2Niw3ICsyNjUsNyBAQCBzdGF0aWMgaW50IGNzc3l5bGV4KCBZWVNUWVBFICp5eWx2
YWwgKSB7CiAldHlwZSA8dmFsdWU+IHVuYXJ5X3Rlcm0KICV0eXBlIDx2YWx1ZT4gZnVuY3Rpb24K
IAotJXR5cGUgPGVsZW1lbnQ+IGVsZW1lbnRfbmFtZQorJXR5cGUgPHN0cmluZz4gZWxlbWVudF9u
YW1lCiAKICV0eXBlIDxhdHRyaWJ1dGU+IGF0dHJpYl9pZAogCkBAIC00MDYsNyArNDA1LDcgQEAg
TkFNRVNQQUNFX1NZTSBtYXliZV9zcGFjZSBtYXliZV9uc19wcmVmaQogI2VuZGlmCiAgICAgQ1NT
UGFyc2VyICpwID0gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyICo+KHBhcnNlcik7CiAgICAgaWYgKHAt
PnN0eWxlRWxlbWVudCAmJiBwLT5zdHlsZUVsZW1lbnQtPmlzQ1NTU3R5bGVTaGVldCgpKQotICAg
ICAgICBzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0SW1wbCo+KHAtPnN0eWxlRWxlbWVudCktPmFk
ZE5hbWVzcGFjZShwLCBkb21TdHJpbmcoJDMpLCBkb21TdHJpbmcoJDQpKTsKKyAgICAgICAgc3Rh
dGljX2Nhc3Q8Q1NTU3R5bGVTaGVldEltcGwqPihwLT5zdHlsZUVsZW1lbnQpLT5hZGROYW1lc3Bh
Y2UocCwgYXRvbWljU3RyaW5nKCQzKSwgYXRvbWljU3RyaW5nKCQ0KSk7CiB9CiB8IE5BTUVTUEFD
RV9TWU0gZXJyb3IgaW52YWxpZF9ibG9jawogfCBOQU1FU1BBQ0VfU1lNIGVycm9yICc7JwpAQCAt
NjI1LDY1ICs2MjQsNzEgQEAgbmFtZXNwYWNlX3NlbGVjdG9yOgogCiBzaW1wbGVfc2VsZWN0b3I6
CiAgICAgZWxlbWVudF9uYW1lIG1heWJlX3NwYWNlIHsKLQkkJCA9IG5ldyBDU1NTZWxlY3Rvcigp
OwotCSQkLT50YWcgPSAkMTsKKyAgICAgICAgQ1NTUGFyc2VyICpwID0gc3RhdGljX2Nhc3Q8Q1NT
UGFyc2VyICo+KHBhcnNlcik7CisJJCQgPSBuZXcgQ1NTU2VsZWN0b3IoUXVhbGlmaWVkTmFtZShu
dWxsQXRvbSwgYXRvbWljU3RyaW5nKCQxKSwgcC0+ZGVmYXVsdE5hbWVzcGFjZSkpOwogICAgIH0K
ICAgICB8IGVsZW1lbnRfbmFtZSBzcGVjaWZpZXJfbGlzdCBtYXliZV9zcGFjZSB7Ci0JJCQgPSAk
MjsKLQlpZiAoICQkICkKLSAgICAgICAgICAgICQkLT50YWcgPSAkMTsKKyAgICAgICAgJCQgPSAk
MjsKKwlpZiAoJCQpIHsKKyAgICAgICAgICAgIENTU1BhcnNlciAqcCA9IHN0YXRpY19jYXN0PENT
U1BhcnNlciAqPihwYXJzZXIpOworICAgICAgICAgICAgJCQtPnRhZyA9IFF1YWxpZmllZE5hbWUo
bnVsbEF0b20sIGF0b21pY1N0cmluZygkMSksIHAtPmRlZmF1bHROYW1lc3BhY2UpOworICAgICAg
ICB9CiAgICAgfQogICAgIHwgc3BlY2lmaWVyX2xpc3QgbWF5YmVfc3BhY2UgewogCSQkID0gJDE7
Ci0gICAgICAgIGlmICgkJCkKLSAgICAgICAgICAgICQkLT50YWcgPSBtYWtlSWQoc3RhdGljX2Nh
c3Q8Q1NTUGFyc2VyKj4ocGFyc2VyKS0+ZGVmYXVsdE5hbWVzcGFjZSwgYW55TG9jYWxOYW1lKTs7
CisgICAgICAgIENTU1BhcnNlciAqcCA9IHN0YXRpY19jYXN0PENTU1BhcnNlciAqPihwYXJzZXIp
OworICAgICAgICBpZiAoJCQgJiYgcC0+ZGVmYXVsdE5hbWVzcGFjZSAhPSBzdGFyQXRvbSkKKyAg
ICAgICAgICAgICQkLT50YWcgPSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCBzdGFyQXRvbSwgcC0+
ZGVmYXVsdE5hbWVzcGFjZSk7CiAgICAgfQogICAgIHwgbmFtZXNwYWNlX3NlbGVjdG9yICd8JyBl
bGVtZW50X25hbWUgbWF5YmVfc3BhY2UgewotICAgICAgICAkJCA9IG5ldyBDU1NTZWxlY3Rvcigp
OwotICAgICAgICAkJC0+dGFnID0gJDM7CisgICAgICAgIEF0b21pY1N0cmluZyBuYW1lc3BhY2VQ
cmVmaXggPSBhdG9taWNTdHJpbmcoJDEpOwogICAgICAgICBDU1NQYXJzZXIgKnAgPSBzdGF0aWNf
Y2FzdDxDU1NQYXJzZXIgKj4ocGFyc2VyKTsKICAgICAgICAgaWYgKHAtPnN0eWxlRWxlbWVudCAm
JiBwLT5zdHlsZUVsZW1lbnQtPmlzQ1NTU3R5bGVTaGVldCgpKQotICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8Q1NTU3R5bGVTaGVldEltcGwqPihwLT5zdHlsZUVsZW1lbnQpLT5kZXRlcm1pbmVOYW1l
c3BhY2UoJCQtPnRhZywgZG9tU3RyaW5nKCQxKSk7CisgICAgICAgICAgICAkJCA9IG5ldyBDU1NT
ZWxlY3RvcihRdWFsaWZpZWROYW1lKG5hbWVzcGFjZVByZWZpeCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXRvbWljU3RyaW5nKCQzKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTU3R5
bGVTaGVldEltcGwqPihwLT5zdHlsZUVsZW1lbnQpLT5kZXRlcm1pbmVOYW1lc3BhY2UobmFtZXNw
YWNlUHJlZml4KSkpOworICAgICAgICBlbHNlIC8vIEZJWE1FOiBTaG91bGRuJ3QgdGhpcyBjYXNl
IGJlIGFuIGVycm9yPworICAgICAgICAgICAgJCQgPSBuZXcgQ1NTU2VsZWN0b3IoUXVhbGlmaWVk
TmFtZShudWxsQXRvbSwgYXRvbWljU3RyaW5nKCQzKSwgcC0+ZGVmYXVsdE5hbWVzcGFjZSkpOwog
ICAgIH0KICAgICB8IG5hbWVzcGFjZV9zZWxlY3RvciAnfCcgZWxlbWVudF9uYW1lIHNwZWNpZmll
cl9saXN0IG1heWJlX3NwYWNlIHsKICAgICAgICAgJCQgPSAkNDsKICAgICAgICAgaWYgKCQkKSB7
Ci0gICAgICAgICAgICAkJC0+dGFnID0gJDM7CisgICAgICAgICAgICBBdG9taWNTdHJpbmcgbmFt
ZXNwYWNlUHJlZml4ID0gYXRvbWljU3RyaW5nKCQxKTsKICAgICAgICAgICAgIENTU1BhcnNlciAq
cCA9IHN0YXRpY19jYXN0PENTU1BhcnNlciAqPihwYXJzZXIpOwogICAgICAgICAgICAgaWYgKHAt
PnN0eWxlRWxlbWVudCAmJiBwLT5zdHlsZUVsZW1lbnQtPmlzQ1NTU3R5bGVTaGVldCgpKQotICAg
ICAgICAgICAgICAgIHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXRJbXBsKj4ocC0+c3R5bGVFbGVt
ZW50KS0+ZGV0ZXJtaW5lTmFtZXNwYWNlKCQkLT50YWcsIGRvbVN0cmluZygkMSkpOworICAgICAg
ICAgICAgICAgICQkLT50YWcgPSBRdWFsaWZpZWROYW1lKG5hbWVzcGFjZVByZWZpeCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdG9taWNTdHJpbmcoJDMpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PENTU1N0eWxl
U2hlZXRJbXBsKj4ocC0+c3R5bGVFbGVtZW50KS0+ZGV0ZXJtaW5lTmFtZXNwYWNlKG5hbWVzcGFj
ZVByZWZpeCkpOworICAgICAgICAgICAgZWxzZSAvLyBGSVhNRTogU2hvdWxkbid0IHRoaXMgY2Fz
ZSBiZSBhbiBlcnJvcj8KKyAgICAgICAgICAgICAgICAkJC0+dGFnID0gUXVhbGlmaWVkTmFtZShu
dWxsQXRvbSwgYXRvbWljU3RyaW5nKCQzKSwgcC0+ZGVmYXVsdE5hbWVzcGFjZSk7CiAgICAgICAg
IH0KICAgICB9CiAgICAgfCBuYW1lc3BhY2Vfc2VsZWN0b3IgJ3wnIHNwZWNpZmllcl9saXN0IG1h
eWJlX3NwYWNlIHsKICAgICAgICAgJCQgPSAkMzsKICAgICAgICAgaWYgKCQkKSB7Ci0gICAgICAg
ICAgICAkJC0+dGFnID0gbWFrZUlkKGFueU5hbWVzcGFjZSwgYW55TG9jYWxOYW1lKTsKKyAgICAg
ICAgICAgIEF0b21pY1N0cmluZyBuYW1lc3BhY2VQcmVmaXggPSBhdG9taWNTdHJpbmcoJDEpOwog
ICAgICAgICAgICAgQ1NTUGFyc2VyICpwID0gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyICo+KHBhcnNl
cik7CiAgICAgICAgICAgICBpZiAocC0+c3R5bGVFbGVtZW50ICYmIHAtPnN0eWxlRWxlbWVudC0+
aXNDU1NTdHlsZVNoZWV0KCkpCi0gICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTU3R5bGVT
aGVldEltcGwqPihwLT5zdHlsZUVsZW1lbnQpLT5kZXRlcm1pbmVOYW1lc3BhY2UoJCQtPnRhZywg
ZG9tU3RyaW5nKCQxKSk7CisgICAgICAgICAgICAgICAgJCQtPnRhZyA9IFF1YWxpZmllZE5hbWUo
bmFtZXNwYWNlUHJlZml4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0YXJBdG9tLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRp
Y19jYXN0PENTU1N0eWxlU2hlZXRJbXBsKj4ocC0+c3R5bGVFbGVtZW50KS0+ZGV0ZXJtaW5lTmFt
ZXNwYWNlKG5hbWVzcGFjZVByZWZpeCkpOwogICAgICAgICB9CiAgICAgfQogICA7CiAKIGVsZW1l
bnRfbmFtZToKICAgICBJREVOVCB7Ci0JQ1NTUGFyc2VyICpwID0gc3RhdGljX2Nhc3Q8Q1NTUGFy
c2VyICo+KHBhcnNlcik7CisgICAgICAgIFBhcnNlU3RyaW5nJiBzdHIgPSAkMTsKKyAgICAgICAg
Q1NTUGFyc2VyICpwID0gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyICo+KHBhcnNlcik7CiAJRE9NOjpE
b2N1bWVudEltcGwgKmRvYyA9IHAtPmRvY3VtZW50KCk7Ci0JUVN0cmluZyB0YWcgPSBxU3RyaW5n
KCQxKTsKLQlpZiAoIGRvYyApIHsKLQkgICAgaWYgKGRvYy0+aXNIVE1MRG9jdW1lbnQoKSkKLQkJ
dGFnID0gdGFnLmxvd2VyKCk7Ci0JICAgIGNvbnN0IERPTVN0cmluZyBkdGFnKHRhZyk7Ci0gICAg
ICAgICAgICAkJCA9IG1ha2VJZChwLT5kZWZhdWx0TmFtZXNwYWNlLCBkb2MtPnRhZ0lkKDAsIGR0
YWcuaW1wbGVtZW50YXRpb24oKSwgZmFsc2UpKTsKLQl9IGVsc2UgewotCSAgICAkJCA9IG1ha2VJ
ZChwLT5kZWZhdWx0TmFtZXNwYWNlLCBraHRtbDo6Z2V0VGFnSUQodGFnLmxvd2VyKCkuYXNjaWko
KSwgdGFnLmxlbmd0aCgpKSk7Ci0JICAgIC8vIHRoaXMgY2FzZSBzaG91bGQgbmV2ZXIgaGFwcGVu
IC0gb25seSB3aGVuIGxvYWRpbmcKLQkgICAgLy8gdGhlIGRlZmF1bHQgc3R5bGVzaGVldCAtIHdo
aWNoIG11c3Qgbm90IGNvbnRhaW4gdW5rbm93biB0YWdzCi0vLyAJICAgIGFzc2VydCgkJCAhPSAw
KTsKLQl9CisJaWYgKGRvYyAmJiBkb2MtPmlzSFRNTERvY3VtZW50KCkpCisgICAgICAgICAgICBz
dHIubG93ZXIoKTsKKyAgICAgICAgJCQgPSBzdHI7CiAgICAgfQogICAgIHwgJyonIHsKLQkkJCA9
IG1ha2VJZChzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJzZXIpLT5kZWZhdWx0TmFtZXNwYWNl
LCBhbnlMb2NhbE5hbWUpOworCXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBzdGFyID0gJyonOworICAg
ICAgICAkJC5zdHJpbmcgPSAmc3RhcjsKKyAgICAgICAgJCQubGVuZ3RoID0gMTsKICAgICB9CiAg
IDsKIApAQCAtNzcwLDE4ICs3NzUsMjIgQEAgYXR0cmliOgogICAgICAgICAkJCA9IG5ldyBDU1NT
ZWxlY3RvcigpOwogICAgICAgICAkJC0+YXR0ciA9ICQ1OwogICAgICAgICAkJC0+bWF0Y2ggPSBD
U1NTZWxlY3Rvcjo6U2V0OwotICAgICAgICBDU1NQYXJzZXIgKnAgPSBzdGF0aWNfY2FzdDxDU1NQ
YXJzZXIgKj4ocGFyc2VyKTsKLSAgICAgICAgaWYgKHAtPnN0eWxlRWxlbWVudCAmJiBwLT5zdHls
ZUVsZW1lbnQtPmlzQ1NTU3R5bGVTaGVldCgpKQotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q1NT
U3R5bGVTaGVldEltcGwqPihwLT5zdHlsZUVsZW1lbnQpLT5kZXRlcm1pbmVOYW1lc3BhY2UoJCQt
PmF0dHIsIGRvbVN0cmluZygkMykpOworICAgICAgICAvLyBGSVhNRTogRm9yIG5vdyB3ZSdyZSBi
cmVha2luZyBuYW1lc3BhY2Ugc3VwcG9ydCBvbiBhdHRyaWJ1dGVzLiAgV2hlbiB3ZSBzd2l0Y2gg
dG8gYXRvbWljc3RyaW5nLCB0aGVuIHdlIGNhbiBtYWtlCisgICAgICAgIC8vIGl0IHdvcmsgYWdh
aW4uCisgICAgICAgIC8vQ1NTUGFyc2VyICpwID0gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyICo+KHBh
cnNlcik7CisgICAgICAgIC8vaWYgKHAtPnN0eWxlRWxlbWVudCAmJiBwLT5zdHlsZUVsZW1lbnQt
PmlzQ1NTU3R5bGVTaGVldCgpKQorICAgICAgICAvLyAgICBzdGF0aWNfY2FzdDxDU1NTdHlsZVNo
ZWV0SW1wbCo+KHAtPnN0eWxlRWxlbWVudCktPmRldGVybWluZU5hbWVzcGFjZSgkJC0+YXR0ciwg
ZG9tU3RyaW5nKCQzKSk7CiAgICAgfQogICAgIHwgJ1snIG1heWJlX3NwYWNlIG5hbWVzcGFjZV9z
ZWxlY3RvciAnfCcgYXR0cmliX2lkIG1hdGNoIG1heWJlX3NwYWNlIGlkZW50X29yX3N0cmluZyBt
YXliZV9zcGFjZSAnXScgewogICAgICAgICAkJCA9IG5ldyBDU1NTZWxlY3RvcigpOwogICAgICAg
ICAkJC0+YXR0ciA9ICQ1OwogICAgICAgICAkJC0+bWF0Y2ggPSAoQ1NTU2VsZWN0b3I6Ok1hdGNo
KSQ2OwogICAgICAgICAkJC0+dmFsdWUgPSBhdG9taWNTdHJpbmcoJDgpOwotICAgICAgICBDU1NQ
YXJzZXIgKnAgPSBzdGF0aWNfY2FzdDxDU1NQYXJzZXIgKj4ocGFyc2VyKTsKLSAgICAgICAgaWYg
KHAtPnN0eWxlRWxlbWVudCAmJiBwLT5zdHlsZUVsZW1lbnQtPmlzQ1NTU3R5bGVTaGVldCgpKQot
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldEltcGwqPihwLT5zdHlsZUVsZW1l
bnQpLT5kZXRlcm1pbmVOYW1lc3BhY2UoJCQtPmF0dHIsIGRvbVN0cmluZygkMykpOworICAgICAg
ICAvLyBGSVhNRTogRm9yIG5vdyB3ZSdyZSBicmVha2luZyBuYW1lc3BhY2Ugc3VwcG9ydCBvbiBh
dHRyaWJ1dGVzLiAgV2hlbiB3ZSBzd2l0Y2ggdG8gYXRvbWljc3RyaW5nLCB0aGVuIHdlIGNhbiBt
YWtlCisgICAgICAgIC8vIGl0IHdvcmsgYWdhaW4uCisgICAgICAgIC8vQ1NTUGFyc2VyICpwID0g
c3RhdGljX2Nhc3Q8Q1NTUGFyc2VyICo+KHBhcnNlcik7CisgICAgICAgIC8vaWYgKHAtPnN0eWxl
RWxlbWVudCAmJiBwLT5zdHlsZUVsZW1lbnQtPmlzQ1NTU3R5bGVTaGVldCgpKQorICAgICAgICAv
LyAgICBzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0SW1wbCo+KHAtPnN0eWxlRWxlbWVudCktPmRl
dGVybWluZU5hbWVzcGFjZSgkJC0+YXR0ciwgZG9tU3RyaW5nKCQzKSk7CiAgICAgfQogICA7CiAK
SW5kZXg6IGtodG1sL2RvbS9jc3Nfc3R5bGVzaGVldC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
L2N2cy9yb290L1dlYkNvcmUva2h0bWwvZG9tL2Nzc19zdHlsZXNoZWV0LmNwcCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS44CmRpZmYgLXUgLXAgLXIxLjgga2h0bWwvZG9tL2Nzc19zdHlsZXNoZWV0
LmNwcAotLS0ga2h0bWwvZG9tL2Nzc19zdHlsZXNoZWV0LmNwcAkyMCBNYXkgMjAwNCAxNTowOToz
MiAtMDAwMAkxLjgKKysrIGtodG1sL2RvbS9jc3Nfc3R5bGVzaGVldC5jcHAJOCBKdWwgMjAwNSAw
NTo1Njo1MSAtMDAwMApAQCAtMzg1LDcgKzM4NSw3IEBAIExpbmtTdHlsZSAmIExpbmtTdHlsZTo6
b3BlcmF0b3IgPSAoY29uc3QKIAogICAgIC8vICMjIyBjaGVjayBsaW5rIGlzIHJlYWxseSBsaW5r
aW5nIGEgc3R5bGUgc2hlZXQKICAgICBpZiggbiAmJiBuLT5pc0VsZW1lbnROb2RlKCkgJiYKLQko
bi0+aWQoKSA9PSBJRF9TVFlMRSB8fCBuLT5pZCgpID09IElEX0xJTkspICkgeworCShuLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6c3R5bGUoKSkgfHwgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omxp
bmsoKSkpKSB7CiAgICAgbm9kZSA9IG47CiAgICAgaWYobm9kZSkgbm9kZS0+cmVmKCk7CiAgICAg
fQpAQCAtMzk5LDEyICszOTksMTQgQEAgTGlua1N0eWxlOjp+TGlua1N0eWxlKCkKIAogU3R5bGVT
aGVldCBMaW5rU3R5bGU6OnNoZWV0KCkKIHsKLSAgICBpbnQgaWQgPSBub2RlID8gbm9kZS0+aWQo
KSA6IDA7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm4gU3R5bGVTaGVldCgpOworCiAg
ICAgLy8gIyMjIGFkZCBQSQogICAgIHJldHVybiAKLQkoIGlkID09IElEX1NUWUxFKSA/CisJKG5v
ZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzdHlsZSgpKSkgPwogCXN0YXRpY19jYXN0PEhUTUxT
dHlsZUVsZW1lbnRJbXBsICo+KG5vZGUpLT5zaGVldCgpCi0JOiAoIChpZCA9PSBJRF9MSU5LKSA/
CisJOiAoIG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpsaW5rKCkpID8KIAkgICAgc3RhdGlj
X2Nhc3Q8SFRNTExpbmtFbGVtZW50SW1wbCAqPihub2RlKS0+c2hlZXQoKQogCSAgICA6IFN0eWxl
U2hlZXQoKSApOwogfQpJbmRleDoga2h0bWwvZG9tL2RvbV9lbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9kb20vZG9tX2VsZW1lbnQuY3BwLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjEyCmRpZmYgLXUgLXAgLXIxLjEyIGtodG1sL2RvbS9kb21f
ZWxlbWVudC5jcHAKLS0tIGtodG1sL2RvbS9kb21fZWxlbWVudC5jcHAJMTIgTWF5IDIwMDUgMTc6
MTE6MjEgLTAwMDAJMS4xMgorKysga2h0bWwvZG9tL2RvbV9lbGVtZW50LmNwcAk4IEp1bCAyMDA1
IDA1OjU2OjUxIC0wMDAwCkBAIC0xNDEsNyArMTQxLDcgQEAgRWxlbWVudDo6fkVsZW1lbnQoKQog
RE9NU3RyaW5nIEVsZW1lbnQ6OnRhZ05hbWUoKSBjb25zdAogewogICAgIGlmICghaW1wbCkgdGhy
b3cgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbjo6Tk9UX0ZPVU5EX0VSUik7Ci0gICAgcmV0dXJu
IHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsKj4oaW1wbCktPnRhZ05hbWUoKTsKKyAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8RWxlbWVudEltcGwqPihpbXBsKS0+bm9kZU5hbWUoKTsKIH0KIAogRE9NU3Ry
aW5nIEVsZW1lbnQ6OmdldEF0dHJpYnV0ZSggY29uc3QgRE9NU3RyaW5nICZuYW1lICkKSW5kZXg6
IGtodG1sL2RvbS9kb21fbm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dl
YkNvcmUva2h0bWwvZG9tL2RvbV9ub2RlLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMgpk
aWZmIC11IC1wIC1yMS4xMiBraHRtbC9kb20vZG9tX25vZGUuY3BwCi0tLSBraHRtbC9kb20vZG9t
X25vZGUuY3BwCTExIE1heSAyMDA1IDAwOjU4OjI4IC0wMDAwCTEuMTIKKysrIGtodG1sL2RvbS9k
b21fbm9kZS5jcHAJOCBKdWwgMjAwNSAwNTo1Njo1MSAtMDAwMApAQCAtMzI0LDcgKzMyNCw3IEBA
IGJvb2wgTm9kZTo6aXNTdXBwb3J0ZWQoIGNvbnN0IERPTVN0cmluZyAKIERPTVN0cmluZyBOb2Rl
OjpuYW1lc3BhY2VVUkkoICApIGNvbnN0CiB7CiAgICAgaWYgKCFpbXBsKSByZXR1cm4gRE9NU3Ry
aW5nKCk7Ci0gICAgcmV0dXJuIGltcGwtPmdldERvY3VtZW50KCktPm5hbWVzcGFjZVVSSShpbXBs
LT5pZCgpKTsKKyAgICByZXR1cm4gaW1wbC0+bmFtZXNwYWNlVVJJKCk7CiB9CiAKIERPTVN0cmlu
ZyBOb2RlOjpwcmVmaXgoICApIGNvbnN0CkBAIC0zMzcsNyArMzM3LDcgQEAgdm9pZCBOb2RlOjpz
ZXRQcmVmaXgoY29uc3QgRE9NU3RyaW5nICZwcgogewogICAgIGlmICghaW1wbCkgdGhyb3cgRE9N
RXhjZXB0aW9uKERPTUV4Y2VwdGlvbjo6Tk9UX0ZPVU5EX0VSUik7CiAgICAgaW50IGV4Y2VwdGlv
bmNvZGUgPSAwOwotICAgIGltcGwtPnNldFByZWZpeChwcmVmaXgsZXhjZXB0aW9uY29kZSk7Cisg
ICAgaW1wbC0+c2V0UHJlZml4KHByZWZpeC5pbXBsZW1lbnRhdGlvbigpLGV4Y2VwdGlvbmNvZGUp
OwogICAgIGlmIChleGNlcHRpb25jb2RlKQogICAgICAgICB0aHJvdyBET01FeGNlcHRpb24oZXhj
ZXB0aW9uY29kZSk7CiB9CkBAIC0zNzYsMTMgKzM3Niw2IEBAIGJvb2wgTm9kZTo6ZGlzcGF0Y2hF
dmVudChjb25zdCBFdmVudCAmZXYKICAgICByZXR1cm4gcjsKIH0KIAotCi11bnNpZ25lZCBpbnQg
Tm9kZTo6ZWxlbWVudElkKCkgY29uc3QKLXsKLSAgICBpZiAoIWltcGwpIHJldHVybiAwOwotICAg
IHJldHVybiBpbXBsLT5pZCgpOwotfQotCiB1bnNpZ25lZCBsb25nIE5vZGU6OmluZGV4KCkgY29u
c3QKIHsKICAgICBpZiAoIWltcGwpIHJldHVybiAwOwpJbmRleDoga2h0bWwvZG9tL2RvbV9ub2Rl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZG9tL2RvbV9u
b2RlLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTIKZGlmZiAtdSAtcCAtcjEuMTIga2h0bWwv
ZG9tL2RvbV9ub2RlLmgKLS0tIGtodG1sL2RvbS9kb21fbm9kZS5oCTE4IE1heSAyMDA1IDIxOjEw
OjI0IC0wMDAwCTEuMTIKKysrIGtodG1sL2RvbS9kb21fbm9kZS5oCTggSnVsIDIwMDUgMDU6NTY6
NTIgLTAwMDAKQEAgLTg1NSwxMyArODU1LDYgQEAgcHVibGljOgogICAgIGJvb2wgZGlzcGF0Y2hF
dmVudChjb25zdCBFdmVudCAmZXZ0KTsKIAogICAgIC8qKgotICAgICAqIEBpbnRlcm5hbAotICAg
ICAqIG5vdCBwYXJ0IG9mIHRoZSBET00uCi0gICAgICogQHJldHVybnMgdGhlIGVsZW1lbnQgaWQs
IGluIGNhc2UgdGhpcyBpcyBhbiBlbGVtZW50LCAwIG90aGVyd2lzZQotICAgICAqLwotICAgIFFf
VUlOVDMyIGVsZW1lbnRJZCgpIGNvbnN0OwotCi0gICAgLyoqCiAgICAgICogdGVzdHMgaWYgdGhp
cyBOb2RlIGlzIDAuIFVzZWZ1bCBlc3BlY2lhbGx5LCBpZiBjYXN0aW5nIHRvIGEgZGVyaXZlZAog
ICAgICAqIGNsYXNzOgogICAgICAqCkluZGV4OiBraHRtbC9kb20vaHRtbF9iYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9kb20vaHRtbF9iYXNlLmNw
cCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS42CmRpZmYgLXUgLXAgLXIxLjYga2h0bWwvZG9tL2h0
bWxfYmFzZS5jcHAKLS0tIGtodG1sL2RvbS9odG1sX2Jhc2UuY3BwCTMgTm92IDIwMDMgMDY6MzI6
MDQgLTAwMDAJMS42CisrKyBraHRtbC9kb20vaHRtbF9iYXNlLmNwcAk4IEp1bCAyMDA1IDA1OjU2
OjUyIC0wMDAwCkBAIC00MSw3ICs0MSw3IEBAIEhUTUxCb2R5RWxlbWVudDo6SFRNTEJvZHlFbGVt
ZW50KEhUTUxCb2QKIAogSFRNTEJvZHlFbGVtZW50ICZIVE1MQm9keUVsZW1lbnQ6Om9wZXJhdG9y
ID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfQk9E
WSApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpib2R5KCkgKTsKICAgICBy
ZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTEzNSw3ICsxMzUsNyBAQCBIVE1MRnJhbWVFbGVtZW50OjpI
VE1MRnJhbWVFbGVtZW50KEhUTUxGCiAKIEhUTUxGcmFtZUVsZW1lbnQgJkhUTUxGcmFtZUVsZW1l
bnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBv
dGhlciwgSURfRlJBTUUgKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6ZnJh
bWUoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtMjY1LDcgKzI2NSw3IEBAIEhUTUxJ
RnJhbWVFbGVtZW50OjpIVE1MSUZyYW1lRWxlbWVudChIVE0KIAogSFRNTElGcmFtZUVsZW1lbnQg
JkhUTUxJRnJhbWVFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAg
ICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0lGUkFNRSApOworICAgIGFzc2lnbk90aGVyKCBvdGhl
ciwgSFRNTE5hbWVzOjppZnJhbWUoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtNDE0
LDcgKzQxNCw3IEBAIEhUTUxGcmFtZVNldEVsZW1lbnQ6OkhUTUxGcmFtZVNldEVsZW1lbnQKIAog
SFRNTEZyYW1lU2V0RWxlbWVudCAmSFRNTEZyYW1lU2V0RWxlbWVudDo6b3BlcmF0b3IgPSAoY29u
c3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9GUkFNRVNFVCAp
OworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpmcmFtZXNldCgpICk7CiAgICAg
cmV0dXJuICp0aGlzOwogfQogCkBAIC00NjYsNyArNDY2LDcgQEAgSFRNTEhlYWRFbGVtZW50OjpI
VE1MSGVhZEVsZW1lbnQoSFRNTEhlYQogCiBIVE1MSGVhZEVsZW1lbnQgJkhUTUxIZWFkRWxlbWVu
dDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90
aGVyLCBJRF9IRUFEICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OmhlYWQo
KSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtNTA3LDcgKzUwNyw3IEBAIEhUTUxIdG1s
RWxlbWVudDo6SFRNTEh0bWxFbGVtZW50KEhUTUxIdG0KIAogSFRNTEh0bWxFbGVtZW50ICZIVE1M
SHRtbEVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2ln
bk90aGVyKCBvdGhlciwgSURfSFRNTCApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5h
bWVzOjpodG1sKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKSW5kZXg6IGtodG1sL2RvbS9o
dG1sX2Jsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRt
bC9kb20vaHRtbF9ibG9jay5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNApkaWZmIC11IC1w
IC1yMS40IGtodG1sL2RvbS9odG1sX2Jsb2NrLmNwcAotLS0ga2h0bWwvZG9tL2h0bWxfYmxvY2su
Y3BwCTEwIEp1biAyMDAyIDIwOjA3OjM0IC0wMDAwCTEuNAorKysga2h0bWwvZG9tL2h0bWxfYmxv
Y2suY3BwCTggSnVsIDIwMDUgMDU6NTY6NTIgLTAwMDAKQEAgLTQzLDcgKzQzLDcgQEAgSFRNTEJs
b2NrcXVvdGVFbGVtZW50OjpIVE1MQmxvY2txdW90ZUVsZQogCiBIVE1MQmxvY2txdW90ZUVsZW1l
bnQgJkhUTUxCbG9ja3F1b3RlRWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIp
CiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9CTE9DS1FVT1RFICk7CisgICAgYXNzaWdu
T3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OmJsb2NrcXVvdGUoKSApOwogICAgIHJldHVybiAqdGhp
czsKIH0KIApAQCAtODQsNyArODQsNyBAQCBIVE1MRGl2RWxlbWVudDo6SFRNTERpdkVsZW1lbnQo
SFRNTERpdkVsCiAKIEhUTUxEaXZFbGVtZW50ICZIVE1MRGl2RWxlbWVudDo6b3BlcmF0b3IgPSAo
Y29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9ESVYgKTsK
KyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6ZGl2KCkgKTsKICAgICByZXR1cm4g
KnRoaXM7CiB9CiAKQEAgLTEyNSw3ICsxMjUsNyBAQCBIVE1MSFJFbGVtZW50OjpIVE1MSFJFbGVt
ZW50KEhUTUxIUkVsZW1lCiAKIEhUTUxIUkVsZW1lbnQgJkhUTUxIUkVsZW1lbnQ6Om9wZXJhdG9y
ID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfSFIg
KTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6aHIoKSApOwogICAgIHJldHVy
biAqdGhpczsKIH0KIApAQCAtMjA1LDE2ICsyMDUsMTcgQEAgSFRNTEhlYWRpbmdFbGVtZW50OjpI
VE1MSGVhZGluZ0VsZW1lbnQoSAogCiBIVE1MSGVhZGluZ0VsZW1lbnQgJkhUTUxIZWFkaW5nRWxl
bWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgaWYob3RoZXIuZWxl
bWVudElkKCkgIT0gSURfSDEgfHwKLSAgICAgICBvdGhlci5lbGVtZW50SWQoKSAhPSBJRF9IMiB8
fAotICAgICAgIG90aGVyLmVsZW1lbnRJZCgpICE9IElEX0gzIHx8Ci0gICAgICAgb3RoZXIuZWxl
bWVudElkKCkgIT0gSURfSDQgfHwKLSAgICAgICBvdGhlci5lbGVtZW50SWQoKSAhPSBJRF9INSB8
fAotICAgICAgIG90aGVyLmVsZW1lbnRJZCgpICE9IElEX0g2ICkKKyAgICBpZiAoIW90aGVyLmhh
bmRsZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDEoKSkgJiYKKyAgICAgICAgIW90aGVyLmhh
bmRsZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDIoKSkgJiYKKyAgICAgICAgIW90aGVyLmhh
bmRsZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDMoKSkgJiYKKyAgICAgICAgIW90aGVyLmhh
bmRsZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDQoKSkgJiYKKyAgICAgICAgIW90aGVyLmhh
bmRsZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDUoKSkgJiYKKyAgICAgICAgIW90aGVyLmhh
bmRsZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDYoKSkpCiAgICAgewogCWlmICggaW1wbCAp
IGltcGwtPmRlcmVmKCk7CiAJaW1wbCA9IDA7CiAgICAgfSBlbHNlIHsKKwogICAgIE5vZGU6Om9w
ZXJhdG9yID0gKG90aGVyKTsKICAgICB9CiAgICAgcmV0dXJuICp0aGlzOwpAQCAtMjU3LDcgKzI1
OCw3IEBAIEhUTUxQYXJhZ3JhcGhFbGVtZW50OjpIVE1MUGFyYWdyYXBoRWxlbWUKIAogSFRNTFBh
cmFncmFwaEVsZW1lbnQgJkhUTUxQYXJhZ3JhcGhFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBO
b2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX1AgKTsKKyAgICBhc3Np
Z25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6cCgpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQog
CkBAIC0yOTgsNyArMjk5LDcgQEAgSFRNTFByZUVsZW1lbnQ6OkhUTUxQcmVFbGVtZW50KEhUTUxQ
cmVFbAogCiBIVE1MUHJlRWxlbWVudCAmSFRNTFByZUVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0
IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfUFJFICk7CisgICAg
YXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OnByZSgpICk7CiAgICAgcmV0dXJuICp0aGlz
OwogfQogCkluZGV4OiBraHRtbC9kb20vaHRtbF9lbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9kb20vaHRtbF9lbGVtZW50LmNwcCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS4xNApkaWZmIC11IC1wIC1yMS4xNCBraHRtbC9kb20vaHRtbF9lbGVt
ZW50LmNwcAotLS0ga2h0bWwvZG9tL2h0bWxfZWxlbWVudC5jcHAJMTEgTWF5IDIwMDUgMDA6NTg6
MjggLTAwMDAJMS4xNAorKysga2h0bWwvZG9tL2h0bWxfZWxlbWVudC5jcHAJOCBKdWwgMjAwNSAw
NTo1Njo1MiAtMDAwMApAQCAtMTgyLDkgKzE4Miw5IEBAIEhUTUxDb2xsZWN0aW9uIEhUTUxFbGVt
ZW50OjpjaGlsZHJlbigpIGMKICAgICByZXR1cm4gSFRNTENvbGxlY3Rpb24oaW1wbCwgSFRNTENv
bGxlY3Rpb25JbXBsOjpOT0RFX0NISUxEUkVOKTsKIH0KIAotdm9pZCBIVE1MRWxlbWVudDo6YXNz
aWduT3RoZXIoIGNvbnN0IE5vZGUgJm90aGVyLCBpbnQgZWxlbWVudElkICkKK3ZvaWQgSFRNTEVs
ZW1lbnQ6OmFzc2lnbk90aGVyKCBjb25zdCBOb2RlICZvdGhlciwgY29uc3QgUXVhbGlmaWVkTmFt
ZSYgdGFnTmFtZSApCiB7Ci0gICAgaWYoKGludClvdGhlci5lbGVtZW50SWQoKSAhPSBlbGVtZW50
SWQpIHsKKyAgICBpZiAoIW90aGVyLmhhbmRsZSgpLT5oYXNUYWdOYW1lKHRhZ05hbWUpKSB7CiAJ
aWYgKCBpbXBsICkgaW1wbC0+ZGVyZWYoKTsKIAlpbXBsID0gMDsKICAgICB9IGVsc2UgewpJbmRl
eDoga2h0bWwvZG9tL2h0bWxfZWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9XZWJDb3JlL2todG1sL2RvbS9odG1sX2VsZW1lbnQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS44CmRpZmYgLXUgLXAgLXIxLjgga2h0bWwvZG9tL2h0bWxfZWxlbWVudC5oCi0tLSBraHRtbC9k
b20vaHRtbF9lbGVtZW50LmgJMjIgTWF5IDIwMDQgMDE6NTA6NDggLTAwMDAJMS44CisrKyBraHRt
bC9kb20vaHRtbF9lbGVtZW50LmgJOCBKdWwgMjAwNSAwNTo1Njo1MyAtMDAwMApAQCAtMzAsNiAr
MzAsOCBAQAogI2RlZmluZSBIVE1MX0VMRU1FTlRfSAogCiAjaW5jbHVkZSA8ZG9tL2RvbV9lbGVt
ZW50Lmg+CisjaW5jbHVkZSAiZG9tX3FuYW1lLmgiCisKIGNsYXNzIEtIVE1MVmlldzsKIAogbmFt
ZXNwYWNlIERPTSB7CkBAIC0yMjUsNyArMjI3LDcgQEAgcHJvdGVjdGVkOgogICAgIC8qCiAgICAg
ICogQGludGVybmFsCiAgICAgICovCi0gICAgdm9pZCBhc3NpZ25PdGhlciggY29uc3QgTm9kZSAm
b3RoZXIsIGludCBlbGVtZW50SWQgKTsKKyAgICB2b2lkIGFzc2lnbk90aGVyKCBjb25zdCBOb2Rl
ICZvdGhlciwgY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSApOwogfTsKIAogfTsgLy9uYW1l
c3BhY2UKSW5kZXg6IGtodG1sL2RvbS9odG1sX2Zvcm0uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2RvbS9odG1sX2Zvcm0uY3BwLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjExCmRpZmYgLXUgLXAgLXIxLjExIGtodG1sL2RvbS9odG1sX2Zvcm0uY3BwCi0t
LSBraHRtbC9kb20vaHRtbF9mb3JtLmNwcAkxMSBNYXkgMjAwNSAwMDo1ODoyOCAtMDAwMAkxLjEx
CisrKyBraHRtbC9kb20vaHRtbF9mb3JtLmNwcAk4IEp1bCAyMDA1IDA1OjU2OjUzIC0wMDAwCkBA
IC00Nyw3ICs0Nyw3IEBAIEhUTUxCdXR0b25FbGVtZW50OjpIVE1MQnV0dG9uRWxlbWVudChIVE0K
IAogSFRNTEJ1dHRvbkVsZW1lbnQgJkhUTUxCdXR0b25FbGVtZW50OjpvcGVyYXRvciA9IChjb25z
dCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0JVVFRPTiApOwkK
KyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6YnV0dG9uKCkgKTsJCiAgICAgcmV0
dXJuICp0aGlzOwogfQogCkBAIC0xNTcsNyArMTU3LDcgQEAgSFRNTEZpZWxkU2V0RWxlbWVudDo6
SFRNTEZpZWxkU2V0RWxlbWVudAogCiBIVE1MRmllbGRTZXRFbGVtZW50ICZIVE1MRmllbGRTZXRF
bGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhl
ciggb3RoZXIsIElEX0ZJRUxEU0VUICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFt
ZXM6OmZpZWxkc2V0KCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTE5Myw3ICsxOTMs
NyBAQCBIVE1MRm9ybUVsZW1lbnQ6OkhUTUxGb3JtRWxlbWVudChIVE1MRm9yCiAKIEhUTUxGb3Jt
RWxlbWVudCAmSFRNTEZvcm1FbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikK
IHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0ZPUk0gKTsKKyAgICBhc3NpZ25PdGhlcigg
b3RoZXIsIEhUTUxOYW1lczo6Zm9ybSgpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC0z
MTEsNyArMzExLDcgQEAgSFRNTElucHV0RWxlbWVudDo6SFRNTElucHV0RWxlbWVudChIVE1MSQog
CiBIVE1MSW5wdXRFbGVtZW50ICZIVE1MSW5wdXRFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBO
b2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0lOUFVUICk7CisgICAg
YXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OmlucHV0KCkgKTsKICAgICByZXR1cm4gKnRo
aXM7CiB9CiAKQEAgLTU3NCw3ICs1NzQsNyBAQCBIVE1MTGFiZWxFbGVtZW50OjpIVE1MTGFiZWxF
bGVtZW50KEhUTUxMCiAKIEhUTUxMYWJlbEVsZW1lbnQgJkhUTUxMYWJlbEVsZW1lbnQ6Om9wZXJh
dG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURf
TEFCRUwgKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6bGFiZWwoKSApOwog
ICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtNjMzLDcgKzYzMyw3IEBAIEhUTUxMZWdlbmRFbGVt
ZW50OjpIVE1MTGVnZW5kRWxlbWVudChIVE0KIAogSFRNTExlZ2VuZEVsZW1lbnQgJkhUTUxMZWdl
bmRFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25P
dGhlciggb3RoZXIsIElEX0xFR0VORCApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5h
bWVzOjpsZWdlbmQoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtNjkxLDcgKzY5MSw3
IEBAIEhUTUxPcHRHcm91cEVsZW1lbnQ6OkhUTUxPcHRHcm91cEVsZW1lbnQKIAogSFRNTE9wdEdy
b3VwRWxlbWVudCAmSFRNTE9wdEdyb3VwRWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAm
b3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9PUFRHUk9VUCApOworICAgIGFz
c2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpvcHRncm91cCgpICk7CiAgICAgcmV0dXJuICp0
aGlzOwogfQogCkBAIC03NDQsNyArNzQ0LDcgQEAgSFRNTFNlbGVjdEVsZW1lbnQ6OkhUTUxTZWxl
Y3RFbGVtZW50KEhUTQogCiBIVE1MU2VsZWN0RWxlbWVudCAmSFRNTFNlbGVjdEVsZW1lbnQ6Om9w
ZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwg
SURfU0VMRUNUICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OnNlbGVjdCgp
ICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC05MDYsNyArOTA2LDcgQEAgSFRNTFRleHRB
cmVhRWxlbWVudDo6SFRNTFRleHRBcmVhRWxlbWVudAogCiBIVE1MVGV4dEFyZWFFbGVtZW50ICZI
VE1MVGV4dEFyZWFFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAg
ICBhc3NpZ25PdGhlciggb3RoZXIsIElEX1RFWFRBUkVBICk7CisgICAgYXNzaWduT3RoZXIoIG90
aGVyLCBIVE1MTmFtZXM6OnRleHRhcmVhKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAg
LTEwNzQsNyArMTA3NCw3IEBAIEhUTUxPcHRpb25FbGVtZW50OjpIVE1MT3B0aW9uRWxlbWVudChI
VE0KIAogSFRNTE9wdGlvbkVsZW1lbnQgJkhUTUxPcHRpb25FbGVtZW50OjpvcGVyYXRvciA9IChj
b25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX09QVElPTiAp
OworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpvcHRpb24oKSApOwogICAgIHJl
dHVybiAqdGhpczsKIH0KIApAQCAtMTE4Miw3ICsxMTgyLDcgQEAgSFRNTElzSW5kZXhFbGVtZW50
OjpIVE1MSXNJbmRleEVsZW1lbnQoSAogCiBIVE1MSXNJbmRleEVsZW1lbnQgJkhUTUxJc0luZGV4
RWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3Ro
ZXIoIG90aGVyLCBJRF9JU0lOREVYICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFt
ZXM6OmlzaW5kZXgoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApJbmRleDoga2h0bWwvZG9t
L2h0bWxfaGVhZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0
bWwvZG9tL2h0bWxfaGVhZC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTAKZGlmZiAtdSAt
cCAtcjEuMTAga2h0bWwvZG9tL2h0bWxfaGVhZC5jcHAKLS0tIGtodG1sL2RvbS9odG1sX2hlYWQu
Y3BwCTIyIEp1biAyMDA1IDE4OjIyOjAxIC0wMDAwCTEuMTAKKysrIGtodG1sL2RvbS9odG1sX2hl
YWQuY3BwCTggSnVsIDIwMDUgMDU6NTY6NTQgLTAwMDAKQEAgLTQyLDcgKzQyLDcgQEAgSFRNTEJh
c2VFbGVtZW50OjpIVE1MQmFzZUVsZW1lbnQoSFRNTEJhcwogCiBIVE1MQmFzZUVsZW1lbnQgJkhU
TUxCYXNlRWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNz
aWduT3RoZXIoIG90aGVyLCBJRF9CQVNFICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1M
TmFtZXM6OmJhc2UoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtOTcsNyArOTcsNyBA
QCBIVE1MTGlua0VsZW1lbnQ6OkhUTUxMaW5rRWxlbWVudChIVE1MTGluCiAKIEhUTUxMaW5rRWxl
bWVudCAmSFRNTExpbmtFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsK
LSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0xJTksgKTsKKyAgICBhc3NpZ25PdGhlciggb3Ro
ZXIsIEhUTUxOYW1lczo6bGluaygpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC0yMzgs
NyArMjM4LDcgQEAgSFRNTE1ldGFFbGVtZW50OjpIVE1MTWV0YUVsZW1lbnQoSFRNTE1ldAogCiBI
VE1MTWV0YUVsZW1lbnQgJkhUTUxNZXRhRWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAm
b3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9NRVRBICk7CisgICAgYXNzaWdu
T3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6Om1ldGEoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0K
IApAQCAtMzEyLDcgKzMxMiw3IEBAIEhUTUxTY3JpcHRFbGVtZW50OjpIVE1MU2NyaXB0RWxlbWVu
dChIVE0KIAogSFRNTFNjcmlwdEVsZW1lbnQgJkhUTUxTY3JpcHRFbGVtZW50OjpvcGVyYXRvciA9
IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX1NDUklQ
VCApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpzY3JpcHQoKSApOwogICAg
IHJldHVybiAqdGhpczsKIH0KIApAQCAtNDI0LDcgKzQyNCw3IEBAIEhUTUxTdHlsZUVsZW1lbnQ6
OkhUTUxTdHlsZUVsZW1lbnQoSFRNTFMKIAogSFRNTFN0eWxlRWxlbWVudCAmSFRNTFN0eWxlRWxl
bWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIo
IG90aGVyLCBJRF9TVFlMRSApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpz
dHlsZSgpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC00OTYsNyArNDk2LDcgQEAgSFRN
TFRpdGxlRWxlbWVudDo6SFRNTFRpdGxlRWxlbWVudChIVE1MVAogCiBIVE1MVGl0bGVFbGVtZW50
ICZIVE1MVGl0bGVFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAg
ICBhc3NpZ25PdGhlciggb3RoZXIsIElEX1RJVExFICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVy
LCBIVE1MTmFtZXM6OnRpdGxlKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKSW5kZXg6IGto
dG1sL2RvbS9odG1sX2ltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2Vi
Q29yZS9raHRtbC9kb20vaHRtbF9pbWFnZS5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuOQpk
aWZmIC11IC1wIC1yMS45IGtodG1sL2RvbS9odG1sX2ltYWdlLmNwcAotLS0ga2h0bWwvZG9tL2h0
bWxfaW1hZ2UuY3BwCTMgTm92IDIwMDMgMDY6MzI6MDQgLTAwMDAJMS45CisrKyBraHRtbC9kb20v
aHRtbF9pbWFnZS5jcHAJOCBKdWwgMjAwNSAwNTo1Njo1NCAtMDAwMApAQCAtNDYsNyArNDYsNyBA
QCBIVE1MQXJlYUVsZW1lbnQ6OkhUTUxBcmVhRWxlbWVudChIVE1MQXJlCiAKIEhUTUxBcmVhRWxl
bWVudCAmSFRNTEFyZWFFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsK
LSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0FSRUEgKTsKKyAgICBhc3NpZ25PdGhlciggb3Ro
ZXIsIEhUTUxOYW1lczo6YXJlYSgpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC0xNzYs
NyArMTc2LDcgQEAgSFRNTEltYWdlRWxlbWVudDo6SFRNTEltYWdlRWxlbWVudChIVE1MSQogCiBI
VE1MSW1hZ2VFbGVtZW50ICZIVE1MSW1hZ2VFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2Rl
ICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0lNRyApOworICAgIGFzc2ln
bk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjppbWcoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0K
IApAQCAtMzcyLDcgKzM3Miw3IEBAIEhUTUxNYXBFbGVtZW50OjpIVE1MTWFwRWxlbWVudChIVE1M
TWFwRWwKIAogSFRNTE1hcEVsZW1lbnQgJkhUTUxNYXBFbGVtZW50OjpvcGVyYXRvciA9IChjb25z
dCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX01BUCApOworICAg
IGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjptYXAoKSApOwogICAgIHJldHVybiAqdGhp
czsKIH0KIApJbmRleDoga2h0bWwvZG9tL2h0bWxfaW5saW5lLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9kb20vaHRtbF9pbmxpbmUuY3BwLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjcKZGlmZiAtdSAtcCAtcjEuNyBraHRtbC9kb20vaHRtbF9pbmxpbmUu
Y3BwCi0tLSBraHRtbC9kb20vaHRtbF9pbmxpbmUuY3BwCTExIE1heSAyMDA1IDAwOjU4OjI4IC0w
MDAwCTEuNworKysga2h0bWwvZG9tL2h0bWxfaW5saW5lLmNwcAk4IEp1bCAyMDA1IDA1OjU2OjU0
IC0wMDAwCkBAIC00NSw3ICs0NSw3IEBAIEhUTUxBbmNob3JFbGVtZW50OjpIVE1MQW5jaG9yRWxl
bWVudChIVE0KIAogSFRNTEFuY2hvckVsZW1lbnQgJkhUTUxBbmNob3JFbGVtZW50OjpvcGVyYXRv
ciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0Eg
KTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6YSgpICk7CiAgICAgcmV0dXJu
ICp0aGlzOwogfQogCkBAIC0yMTcsNyArMjE3LDcgQEAgSFRNTEJSRWxlbWVudDo6SFRNTEJSRWxl
bWVudChIVE1MQlJFbGVtZQogCiBIVE1MQlJFbGVtZW50ICZIVE1MQlJFbGVtZW50OjpvcGVyYXRv
ciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0JS
ICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OmJyKCkgKTsKICAgICByZXR1
cm4gKnRoaXM7CiB9CiAKQEAgLTI1OCw3ICsyNTgsNyBAQCBIVE1MRm9udEVsZW1lbnQ6OkhUTUxG
b250RWxlbWVudChIVE1MRm9uCiAKIEhUTUxGb250RWxlbWVudCAmSFRNTEZvbnRFbGVtZW50Ojpv
cGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIs
IElEX0ZPTlQgKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6Zm9udCgpICk7
CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC0zMTksNyArMzE5LDcgQEAgSFRNTE1vZEVsZW1l
bnQ6OkhUTUxNb2RFbGVtZW50KGNvbnN0IEhUTQogSFRNTE1vZEVsZW1lbnQ6OkhUTUxNb2RFbGVt
ZW50KEhUTUxFbGVtZW50SW1wbCAqX2ltcGwpCiAgICAgOiBIVE1MRWxlbWVudCgpCiB7Ci0gICAg
aWYgKF9pbXBsICYmIChfaW1wbC0+aWQoKSA9PSBJRF9JTlMgfHwgX2ltcGwtPmlkKCkgPT0gSURf
REVMKSkKKyAgICBpZiAoX2ltcGwgJiYgKF9pbXBsLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW5z
KCkpIHx8IF9pbXBsLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZGVsKCkpKSkKICAgICAgICAgaW1w
bCA9IF9pbXBsOwogICAgIGVsc2UKICAgICAgICAgaW1wbCA9IDA7CkBAIC0zMjgsOSArMzI4LDgg
QEAgSFRNTE1vZEVsZW1lbnQ6OkhUTUxNb2RFbGVtZW50KEhUTUxFbGVtZQogCiBIVE1MTW9kRWxl
bWVudCAmSFRNTE1vZEVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewot
ICAgIGlmKCBvdGhlci5lbGVtZW50SWQoKSAhPSBJRF9JTlMgJiYKLQlvdGhlci5lbGVtZW50SWQo
KSAhPSBJRF9ERUwgKQotICAgIHsKKyAgICBpZiAoIW90aGVyLmhhbmRsZSgpLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6aW5zKCkpICYmCisgICAgICAgICFvdGhlci5oYW5kbGUoKS0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OmRlbCgpKSkgewogCWlmICggaW1wbCApIGltcGwtPmRlcmVmKCk7CiAJaW1w
bCA9IDA7CiAgICAgfSBlbHNlIHsKQEAgLTM4MSwxOSArMzgwLDE2IEBAIEhUTUxRdW90ZUVsZW1l
bnQ6OkhUTUxRdW90ZUVsZW1lbnQoY29uc3QKIHsKIH0KIAotSFRNTFF1b3RlRWxlbWVudDo6SFRN
TFF1b3RlRWxlbWVudChIVE1MR2VuZXJpY0VsZW1lbnRJbXBsICpfaW1wbCkKK0hUTUxRdW90ZUVs
ZW1lbnQ6OkhUTUxRdW90ZUVsZW1lbnQoSFRNTFF1b3RlRWxlbWVudEltcGwgKl9pbXBsKQogICAg
IDogSFRNTEVsZW1lbnQoKQogewotICAgIGlmIChfaW1wbCAmJiBfaW1wbC0+aWQoKSA9PSBJRF9R
KQotICAgICAgICBpbXBsID0gX2ltcGw7Ci0gICAgZWxzZQotICAgICAgICBpbXBsID0gMDsKKyAg
ICBpbXBsID0gX2ltcGw7CiAgICAgaWYgKCBpbXBsICkgaW1wbC0+cmVmKCk7CiB9CiAKIEhUTUxR
dW90ZUVsZW1lbnQgJkhUTUxRdW90ZUVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90
aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfUSApOworICAgIGFzc2lnbk90aGVy
KCBvdGhlciwgSFRNTE5hbWVzOjpxKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKSW5kZXg6
IGtodG1sL2RvbS9odG1sX2lubGluZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9X
ZWJDb3JlL2todG1sL2RvbS9odG1sX2lubGluZS5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjMK
ZGlmZiAtdSAtcCAtcjEuMyBraHRtbC9kb20vaHRtbF9pbmxpbmUuaAotLS0ga2h0bWwvZG9tL2h0
bWxfaW5saW5lLmgJMTUgQXByIDIwMDIgMjM6NDI6MDEgLTAwMDAJMS4zCisrKyBraHRtbC9kb20v
aHRtbF9pbmxpbmUuaAk4IEp1bCAyMDA1IDA1OjU2OjU0IC0wMDAwCkBAIC00MjUsNyArNDI1LDcg
QEAgcHVibGljOgogICAgIEhUTUxRdW90ZUVsZW1lbnQoY29uc3QgTm9kZSAmb3RoZXIpIDogSFRN
TEVsZW1lbnQoKQogICAgICAgICAgeygqdGhpcyk9b3RoZXI7fQogcHJvdGVjdGVkOgotICAgIEhU
TUxRdW90ZUVsZW1lbnQoSFRNTEdlbmVyaWNFbGVtZW50SW1wbCAqaW1wbCk7CisgICAgSFRNTFF1
b3RlRWxlbWVudChIVE1MUXVvdGVFbGVtZW50SW1wbCAqaW1wbCk7CiBwdWJsaWM6CiAKICAgICBI
VE1MUXVvdGVFbGVtZW50ICYgb3BlcmF0b3IgPSAoY29uc3QgSFRNTFF1b3RlRWxlbWVudCAmb3Ro
ZXIpOwpJbmRleDoga2h0bWwvZG9tL2h0bWxfbGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
L2N2cy9yb290L1dlYkNvcmUva2h0bWwvZG9tL2h0bWxfbGlzdC5jcHAsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuNApkaWZmIC11IC1wIC1yMS40IGtodG1sL2RvbS9odG1sX2xpc3QuY3BwCi0tLSBr
aHRtbC9kb20vaHRtbF9saXN0LmNwcAkxMCBKdW4gMjAwMiAyMDowNzozNiAtMDAwMAkxLjQKKysr
IGtodG1sL2RvbS9odG1sX2xpc3QuY3BwCTggSnVsIDIwMDUgMDU6NTY6NTQgLTAwMDAKQEAgLTQx
LDcgKzQxLDcgQEAgSFRNTERMaXN0RWxlbWVudDo6SFRNTERMaXN0RWxlbWVudChIVE1MRAogCiBI
VE1MRExpc3RFbGVtZW50ICZIVE1MRExpc3RFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2Rl
ICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0RMICk7CisgICAgYXNzaWdu
T3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OmRsKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAK
QEAgLTg4LDcgKzg4LDcgQEAgSFRNTERpcmVjdG9yeUVsZW1lbnQ6OkhUTUxEaXJlY3RvcnlFbGVt
ZQogCiBIVE1MRGlyZWN0b3J5RWxlbWVudCAmSFRNTERpcmVjdG9yeUVsZW1lbnQ6Om9wZXJhdG9y
ID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfRElS
ICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OmRpcigpICk7CiAgICAgcmV0
dXJuICp0aGlzOwogfQogCkBAIC0xMzUsNyArMTM1LDcgQEAgSFRNTExJRWxlbWVudDo6SFRNTExJ
RWxlbWVudChIVE1MTElFbGVtZQogCiBIVE1MTElFbGVtZW50ICZIVE1MTElFbGVtZW50OjpvcGVy
YXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElE
X0xJICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OmxpKCkgKTsKICAgICBy
ZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTE5MCw3ICsxOTAsNyBAQCBIVE1MTWVudUVsZW1lbnQ6OkhU
TUxNZW51RWxlbWVudChIVE1MTWVuCiAKIEhUTUxNZW51RWxlbWVudCAmSFRNTE1lbnVFbGVtZW50
OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3Ro
ZXIsIElEX01FTlUgKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6bWVudSgp
ICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC0yMzcsNyArMjM3LDcgQEAgSFRNTE9MaXN0
RWxlbWVudDo6SFRNTE9MaXN0RWxlbWVudChIVE1MTwogCiBIVE1MT0xpc3RFbGVtZW50ICZIVE1M
T0xpc3RFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3Np
Z25PdGhlciggb3RoZXIsIElEX09MICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFt
ZXM6Om9sKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTMxMCw3ICszMTAsNyBAQCBI
VE1MVUxpc3RFbGVtZW50OjpIVE1MVUxpc3RFbGVtZW50KEhUTUxVCiAKIEhUTUxVTGlzdEVsZW1l
bnQgJkhUTUxVTGlzdEVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewot
ICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfVUwgKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIs
IEhUTUxOYW1lczo6dWwoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApJbmRleDoga2h0bWwv
ZG9tL2h0bWxfbWlzYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUv
a2h0bWwvZG9tL2h0bWxfbWlzYy5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNwpkaWZmIC11
IC1wIC1yMS43IGtodG1sL2RvbS9odG1sX21pc2MuY3BwCi0tLSBraHRtbC9kb20vaHRtbF9taXNj
LmNwcAkxMSBNYXkgMjAwNSAwMDo1ODoyOCAtMDAwMAkxLjcKKysrIGtodG1sL2RvbS9odG1sX21p
c2MuY3BwCTggSnVsIDIwMDUgMDU6NTY6NTUgLTAwMDAKQEAgLTQxLDcgKzQxLDcgQEAgSFRNTEJh
c2VGb250RWxlbWVudDo6SFRNTEJhc2VGb250RWxlbWVudAogCiBIVE1MQmFzZUZvbnRFbGVtZW50
ICZIVE1MQmFzZUZvbnRFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsK
LSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0JBU0VGT05UICk7CisgICAgYXNzaWduT3RoZXIo
IG90aGVyLCBIVE1MTmFtZXM6OmJhc2Vmb250KCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAK
SW5kZXg6IGtodG1sL2RvbS9odG1sX29iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1dlYkNvcmUva2h0bWwvZG9tL2h0bWxfb2JqZWN0LmNwcCx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS41CmRpZmYgLXUgLXAgLXIxLjUga2h0bWwvZG9tL2h0bWxfb2JqZWN0LmNwcAotLS0g
a2h0bWwvZG9tL2h0bWxfb2JqZWN0LmNwcAkxIE1hciAyMDA0IDE3OjA0OjI0IC0wMDAwCTEuNQor
Kysga2h0bWwvZG9tL2h0bWxfb2JqZWN0LmNwcAk4IEp1bCAyMDA1IDA1OjU2OjU1IC0wMDAwCkBA
IC00Myw3ICs0Myw3IEBAIEhUTUxBcHBsZXRFbGVtZW50OjpIVE1MQXBwbGV0RWxlbWVudChIVE0K
IAogSFRNTEFwcGxldEVsZW1lbnQgJkhUTUxBcHBsZXRFbGVtZW50OjpvcGVyYXRvciA9IChjb25z
dCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0FQUExFVCApOwor
ICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjphcHBsZXQoKSApOwogICAgIHJldHVy
biAqdGhpczsKIH0KIApAQCAtMTk0LDcgKzE5NCw3IEBAIEhUTUxPYmplY3RFbGVtZW50OjpIVE1M
T2JqZWN0RWxlbWVudChIVE0KIAogSFRNTE9iamVjdEVsZW1lbnQgJkhUTUxPYmplY3RFbGVtZW50
OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3Ro
ZXIsIElEX09CSkVDVCApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpvYmpl
Y3QoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtNDMyLDcgKzQzMiw3IEBAIEhUTUxQ
YXJhbUVsZW1lbnQ6OkhUTUxQYXJhbUVsZW1lbnQoSFRNTFAKIAogSFRNTFBhcmFtRWxlbWVudCAm
SFRNTFBhcmFtRWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAg
YXNzaWduT3RoZXIoIG90aGVyLCBJRF9QQVJBTSApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwg
SFRNTE5hbWVzOjpwYXJhbSgpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkluZGV4OiBraHRt
bC9kb20vaHRtbF90YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNv
cmUva2h0bWwvZG9tL2h0bWxfdGFibGUuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjYKZGlm
ZiAtdSAtcCAtcjEuNiBraHRtbC9kb20vaHRtbF90YWJsZS5jcHAKLS0tIGtodG1sL2RvbS9odG1s
X3RhYmxlLmNwcAkzMSBPY3QgMjAwMyAwMDo0NzoxNiAtMDAwMAkxLjYKKysrIGtodG1sL2RvbS9o
dG1sX3RhYmxlLmNwcAk4IEp1bCAyMDA1IDA1OjU2OjU1IC0wMDAwCkBAIC00NSw3ICs0NSw3IEBA
IEhUTUxUYWJsZUNhcHRpb25FbGVtZW50OjpIVE1MVGFibGVDYXB0aW8KIAogSFRNTFRhYmxlQ2Fw
dGlvbkVsZW1lbnQgJkhUTUxUYWJsZUNhcHRpb25FbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBO
b2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0NBUFRJT04gKTsKKyAg
ICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6Y2FwdGlvbigpICk7CiAgICAgcmV0dXJu
ICp0aGlzOwogfQogCkBAIC04Niw5ICs4Niw4IEBAIEhUTUxUYWJsZUNlbGxFbGVtZW50OjpIVE1M
VGFibGVDZWxsRWxlbWUKIAogSFRNTFRhYmxlQ2VsbEVsZW1lbnQgJkhUTUxUYWJsZUNlbGxFbGVt
ZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBpZiggb3RoZXIuZWxl
bWVudElkKCkgIT0gSURfVEQgJiYKLQlvdGhlci5lbGVtZW50SWQoKSAhPSBJRF9USCApCi0gICAg
eworICAgIGlmICghb3RoZXIuaGFuZGxlKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0ZCgpKSB8
fAorICAgICAgICAhb3RoZXIuaGFuZGxlKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0aCgpKSkg
ewogCWlmICggaW1wbCApIGltcGwtPmRlcmVmKCk7CiAJaW1wbCA9IDA7CiAgICAgfSBlbHNlIHsK
QEAgLTI5NSw5ICsyOTQsOCBAQCBIVE1MVGFibGVDb2xFbGVtZW50OjpIVE1MVGFibGVDb2xFbGVt
ZW50CiAKIEhUTUxUYWJsZUNvbEVsZW1lbnQgJkhUTUxUYWJsZUNvbEVsZW1lbnQ6Om9wZXJhdG9y
ID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGlmKCBvdGhlci5lbGVtZW50SWQoKSAhPSBJ
RF9DT0wgJiYKLQlvdGhlci5lbGVtZW50SWQoKSAhPSBJRF9DT0xHUk9VUCApCi0gICAgeworICAg
IGlmICghb3RoZXIuaGFuZGxlKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpjb2woKSkgJiYKKyAg
ICAgICAgIW90aGVyLmhhbmRsZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Y29sZ3JvdXAoKSkp
IHsKIAlpZiAoIGltcGwgKSBpbXBsLT5kZXJlZigpOwogCWltcGwgPSAwOwogICAgIH0gZWxzZSB7
CkBAIC00MDEsNyArMzk5LDcgQEAgSFRNTFRhYmxlRWxlbWVudDo6SFRNTFRhYmxlRWxlbWVudChI
VE1MVAogCiBIVE1MVGFibGVFbGVtZW50ICZIVE1MVGFibGVFbGVtZW50OjpvcGVyYXRvciA9IChj
b25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX1RBQkxFICk7
CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OnRhYmxlKCkgKTsKICAgICByZXR1
cm4gKnRoaXM7CiB9CiAKQEAgLTYzOCw3ICs2MzYsNyBAQCBIVE1MVGFibGVSb3dFbGVtZW50OjpI
VE1MVGFibGVSb3dFbGVtZW50CiAKIEhUTUxUYWJsZVJvd0VsZW1lbnQgJkhUTUxUYWJsZVJvd0Vs
ZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVy
KCBvdGhlciwgSURfVFIgKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6dHIo
KSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtNzc1LDEwICs3NzMsOSBAQCBIVE1MVGFi
bGVTZWN0aW9uRWxlbWVudDo6SFRNTFRhYmxlU2VjdGlvCiAKIEhUTUxUYWJsZVNlY3Rpb25FbGVt
ZW50ICZIVE1MVGFibGVTZWN0aW9uRWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3Ro
ZXIpCiB7Ci0gICAgaWYob3RoZXIuZWxlbWVudElkKCkgIT0gSURfVEJPRFkgJiYKLSAgICAgICBv
dGhlci5lbGVtZW50SWQoKSAhPSBJRF9USEVBRCAmJgotICAgICAgIG90aGVyLmVsZW1lbnRJZCgp
ICE9IElEX1RGT09UICkKLSAgICB7CisgICAgaWYgKCFvdGhlci5oYW5kbGUoKS0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OnRib2R5KCkpICYmCisgICAgICAgICFvdGhlci5oYW5kbGUoKS0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OnRoZWFkKCkpICYmCisgICAgICAgICFvdGhlci5oYW5kbGUoKS0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OnRmb290KCkpKSB7CiAJaWYgKCBpbXBsICkgaW1wbC0+ZGVyZWYo
KTsKIAlpbXBsID0gMDsKICAgICB9IGVsc2UgewpJbmRleDoga2h0bWwvZWNtYS9ranNfY3NzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lY21hL2tqc19j
c3MuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjI3CmRpZmYgLXUgLXAgLXIxLjI3IGtodG1s
L2VjbWEva2pzX2Nzcy5jcHAKLS0tIGtodG1sL2VjbWEva2pzX2Nzcy5jcHAJMyBKdWwgMjAwNSAx
MDo0Nzo1NSAtMDAwMAkxLjI3CisrKyBraHRtbC9lY21hL2tqc19jc3MuY3BwCTggSnVsIDIwMDUg
MDU6NTY6NTYgLTAwMDAKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlICJ4bWwvZG9tX2RvY2lt
cGwuaCIKICNpbmNsdWRlICJodG1sL2h0bWxfaGVhZGltcGwuaCIgLy8gZm9yIEhUTUxTdHlsZUVs
ZW1lbnQKICNpbmNsdWRlICJranNfZG9tLmgiCi0jaW5jbHVkZSAibWlzYy9odG1sdGFncy5oIgor
I2luY2x1ZGUgImh0bWxuYW1lcy5oIgogCiAjaW5jbHVkZSA8a2RlYnVnLmg+CiAKQEAgLTU1LDYg
KzU1LDcgQEAgdXNpbmcgRE9NOjpDb3VudGVySW1wbDsKIHVzaW5nIERPTTo6RG9jdW1lbnRJbXBs
OwogdXNpbmcgRE9NOjpET01TdHJpbmc7CiB1c2luZyBET006OkVsZW1lbnRJbXBsOwordXNpbmcg
RE9NOjpIVE1MTmFtZXM7CiB1c2luZyBET006OkhUTUxTdHlsZUVsZW1lbnRJbXBsOwogdXNpbmcg
RE9NOjpNZWRpYUxpc3RJbXBsOwogdXNpbmcgRE9NOjpSZWN0SW1wbDsKQEAgLTQwNCw3ICs0MDUs
NyBAQCBWYWx1ZSBET01TdHlsZVNoZWV0TGlzdDo6dHJ5R2V0KEV4ZWNTdGF0CiAgIC8vIGFuZCBk
b2Vzbid0IGxvb2sgZm9yIG5hbWUgYXR0cmlidXRlIChzZWUgaW1wbGVtZW50YXRpb24gYWJvdmUp
LgogICAvLyBCdXQgdW5pY2l0eSBvZiBzdHlsZXNoZWV0IGlkcyBpcyBnb29kIHByYWN0aWNlIGFu
eXdheSA7KQogICBFbGVtZW50SW1wbCAqZWxlbWVudCA9IG1fZG9jLT5nZXRFbGVtZW50QnlJZChw
LnN0cmluZygpKTsKLSAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC0+aWQoKSA9PSBJRF9TVFlMRSkK
KyAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnN0eWxlKCkp
KQogICAgIHJldHVybiBnZXRET01TdHlsZVNoZWV0KGV4ZWMsIHN0YXRpY19jYXN0PEhUTUxTdHls
ZUVsZW1lbnRJbXBsICo+KGVsZW1lbnQpLT5zaGVldCgpKTsKIAogICByZXR1cm4gRE9NT2JqZWN0
Ojp0cnlHZXQoZXhlYywgcCk7CkluZGV4OiBraHRtbC9lY21hL2tqc19kb20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VjbWEva2pzX2RvbS5jcHAsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuNzcKZGlmZiAtdSAtcCAtcjEuNzcga2h0bWwvZWNtYS9ranNf
ZG9tLmNwcAotLS0ga2h0bWwvZWNtYS9ranNfZG9tLmNwcAkzIEp1bCAyMDA1IDEwOjQ3OjU1IC0w
MDAwCTEuNzcKKysrIGtodG1sL2VjbWEva2pzX2RvbS5jcHAJOCBKdWwgMjAwNSAwNTo1Njo1OCAt
MDAwMApAQCAtNDcsOCArNDcsNiBAQAogCiAjaW5jbHVkZSAiaHRtbF9vYmplY3RpbXBsLmgiCiAK
LSNpbmNsdWRlICJtaXNjL2h0bWx0YWdzLmgiCi0KICNpZiBBUFBMRV9DSEFOR0VTCiAjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvcnVudGltZV9vYmplY3QuaD4KICNlbmRpZgpAQCAtNjcsNiArNjUs
NyBAQCB1c2luZyBET006OkhUTUxBcHBsZXRFbGVtZW50SW1wbDsKIHVzaW5nIERPTTo6SFRNTERv
Y3VtZW50SW1wbDsKIHVzaW5nIERPTTo6SFRNTEVsZW1lbnRJbXBsOwogdXNpbmcgRE9NOjpIVE1M
RW1iZWRFbGVtZW50SW1wbDsKK3VzaW5nIERPTTo6SFRNTE5hbWVzOwogdXNpbmcgRE9NOjpIVE1M
T2JqZWN0RWxlbWVudEltcGw7CiB1c2luZyBET006Ok5hbWVkTm9kZU1hcEltcGw7CiB1c2luZyBE
T006Ok5vZGU7CkBAIC00NjIsNyArNDYxLDcgQEAgdm9pZCBET01Ob2RlOjpwdXRWYWx1ZShFeGVj
U3RhdGUgKmV4ZWMsIAogICAgIG5vZGUuc2V0Tm9kZVZhbHVlKHZhbHVlLnRvU3RyaW5nKGV4ZWMp
LnN0cmluZygpLCBleGNlcHRpb24pOwogICAgIGJyZWFrOwogICBjYXNlIFByZWZpeDoKLSAgICBu
b2RlLnNldFByZWZpeCh2YWx1ZS50b1N0cmluZyhleGVjKS5zdHJpbmcoKSwgZXhjZXB0aW9uKTsK
KyAgICBub2RlLnNldFByZWZpeCh2YWx1ZS50b1N0cmluZyhleGVjKS5zdHJpbmcoKS5pbXBsZW1l
bnRhdGlvbigpLCBleGNlcHRpb24pOwogICAgIGJyZWFrOwogICBjYXNlIE9uQWJvcnQ6CiAgICAg
c2V0TGlzdGVuZXIoZXhlYyxET006OkV2ZW50SW1wbDo6QUJPUlRfRVZFTlQsdmFsdWUpOwpAQCAt
MTE4Nyw3ICsxMTg2LDcgQEAgVmFsdWUgRE9NRWxlbWVudDo6dHJ5R2V0KEV4ZWNTdGF0ZSAqZXhl
YwogICB7CiAgICAgc3dpdGNoKCBlbnRyeS0+dmFsdWUgKSB7CiAgICAgY2FzZSBUYWdOYW1lOgot
ICAgICAgcmV0dXJuIGdldFN0cmluZ09yTnVsbChlbGVtZW50LnRhZ05hbWUoKSk7CisgICAgICBy
ZXR1cm4gZ2V0U3RyaW5nT3JOdWxsKGVsZW1lbnQubm9kZU5hbWUoKSk7CiAgICAgY2FzZSBTdHls
ZToKICAgICAgIHJldHVybiBnZXRET01DU1NTdHlsZURlY2xhcmF0aW9uKGV4ZWMsZWxlbWVudC5z
dHlsZSgpKTsKICAgICBkZWZhdWx0OgpAQCAtMTcxMCwyNiArMTcwOSwyMSBAQCBWYWx1ZUltcCAq
Z2V0UnVudGltZU9iamVjdChFeGVjU3RhdGUgKmV4CiAgICAgaWYgKCFuKQogICAgICAgICByZXR1
cm4gMDsKIAotICAgIHN3aXRjaCAobi0+aWQoKSkgewotICAgICAgICBjYXNlIElEX0FQUExFVDog
ewotICAgICAgICAgICAgSFRNTEFwcGxldEVsZW1lbnRJbXBsICphcHBsZXRFbGVtZW50ID0gc3Rh
dGljX2Nhc3Q8SFRNTEFwcGxldEVsZW1lbnRJbXBsICo+KG4pOwotICAgICAgICAgICAgaWYgKGFw
cGxldEVsZW1lbnQtPmdldEFwcGxldEluc3RhbmNlKCkpCi0gICAgICAgICAgICAgICAgLy8gVGhl
IGluc3RhbmNlIGlzIG93bmVkIGJ5IHRoZSBhcHBsZXQgZWxlbWVudC4KLSAgICAgICAgICAgICAg
ICByZXR1cm4gbmV3IFJ1bnRpbWVPYmplY3RJbXAoYXBwbGV0RWxlbWVudC0+Z2V0QXBwbGV0SW5z
dGFuY2UoKSwgZmFsc2UpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
Y2FzZSBJRF9FTUJFRDogewotICAgICAgICAgICAgSFRNTEVtYmVkRWxlbWVudEltcGwgKmVtYmVk
RWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxFbWJlZEVsZW1lbnRJbXBsICo+KG4pOwotICAgICAg
ICAgICAgaWYgKGVtYmVkRWxlbWVudC0+Z2V0RW1iZWRJbnN0YW5jZSgpKQotICAgICAgICAgICAg
ICAgIHJldHVybiBuZXcgUnVudGltZU9iamVjdEltcChlbWJlZEVsZW1lbnQtPmdldEVtYmVkSW5z
dGFuY2UoKSwgZmFsc2UpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
Y2FzZSBJRF9PQkpFQ1Q6IHsKLSAgICAgICAgICAgIEhUTUxPYmplY3RFbGVtZW50SW1wbCAqb2Jq
ZWN0RWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxPYmplY3RFbGVtZW50SW1wbCAqPihuKTsKLSAg
ICAgICAgICAgIGlmIChvYmplY3RFbGVtZW50LT5nZXRPYmplY3RJbnN0YW5jZSgpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBuZXcgUnVudGltZU9iamVjdEltcChvYmplY3RFbGVtZW50LT5nZXRP
YmplY3RJbnN0YW5jZSgpLCBmYWxzZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQor
ICAgIGlmIChuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YXBwbGV0KCkpKSB7CisgICAgICAgIEhU
TUxBcHBsZXRFbGVtZW50SW1wbCAqYXBwbGV0RWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxBcHBs
ZXRFbGVtZW50SW1wbCAqPihuKTsKKyAgICAgICAgaWYgKGFwcGxldEVsZW1lbnQtPmdldEFwcGxl
dEluc3RhbmNlKCkpCisgICAgICAgICAgICAvLyBUaGUgaW5zdGFuY2UgaXMgb3duZWQgYnkgdGhl
IGFwcGxldCBlbGVtZW50LgorICAgICAgICAgICAgcmV0dXJuIG5ldyBSdW50aW1lT2JqZWN0SW1w
KGFwcGxldEVsZW1lbnQtPmdldEFwcGxldEluc3RhbmNlKCksIGZhbHNlKTsKKyAgICB9CisgICAg
ZWxzZSBpZiAobi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmVtYmVkKCkpKSB7CisgICAgICAgIEhU
TUxFbWJlZEVsZW1lbnRJbXBsICplbWJlZEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRW1iZWRF
bGVtZW50SW1wbCAqPihuKTsKKyAgICAgICAgaWYgKGVtYmVkRWxlbWVudC0+Z2V0RW1iZWRJbnN0
YW5jZSgpKQorICAgICAgICAgICAgcmV0dXJuIG5ldyBSdW50aW1lT2JqZWN0SW1wKGVtYmVkRWxl
bWVudC0+Z2V0RW1iZWRJbnN0YW5jZSgpLCBmYWxzZSk7CisgICAgfQorICAgIGVsc2UgaWYgKG4t
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvYmplY3QoKSkpIHsKKyAgICAgICAgSFRNTE9iamVjdEVs
ZW1lbnRJbXBsICpvYmplY3RFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTE9iamVjdEVsZW1lbnRJ
bXBsICo+KG4pOworICAgICAgICBpZiAob2JqZWN0RWxlbWVudC0+Z2V0T2JqZWN0SW5zdGFuY2Uo
KSkKKyAgICAgICAgICAgIHJldHVybiBuZXcgUnVudGltZU9iamVjdEltcChvYmplY3RFbGVtZW50
LT5nZXRPYmplY3RJbnN0YW5jZSgpLCBmYWxzZSk7CiAgICAgfQogICAgIAogICAgIC8vIElmIHdl
IGRvbid0IGhhdmUgYSBydW50aW1lIG9iamVjdCByZXR1cm4gMC4KSW5kZXg6IGtodG1sL2VjbWEv
a2pzX2h0bWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1s
L2VjbWEva2pzX2h0bWwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEyMQpkaWZmIC11IC1w
IC1yMS4xMjEga2h0bWwvZWNtYS9ranNfaHRtbC5jcHAKLS0tIGtodG1sL2VjbWEva2pzX2h0bWwu
Y3BwCTMgSnVsIDIwMDUgMTA6NDc6NTYgLTAwMDAJMS4xMjEKKysrIGtodG1sL2VjbWEva2pzX2h0
bWwuY3BwCTggSnVsIDIwMDUgMDU6NTc6MDMgLTAwMDAKQEAgLTQ2LDggKzQ2LDYgQEAKICNpbmNs
dWRlICJranNfZXZlbnRzLmgiCiAjaW5jbHVkZSAia2pzX3Byb3h5LmgiCiAKLSNpbmNsdWRlICJt
aXNjL2h0bWx0YWdzLmgiCi0KICNpbmNsdWRlICJyZW5kZXJpbmcvcmVuZGVyX2NhbnZhc2ltYWdl
LmgiCiAjaW5jbHVkZSAicmVuZGVyaW5nL3JlbmRlcl9vYmplY3QuaCIKICNpbmNsdWRlICJyZW5k
ZXJpbmcvcmVuZGVyX2xheWVyLmgiCkBAIC0xMDksNiArMTA3LDcgQEAgdXNpbmcgRE9NOjpIVE1M
TWFwRWxlbWVudEltcGw7CiB1c2luZyBET006OkhUTUxNZW51RWxlbWVudEltcGw7CiB1c2luZyBE
T006OkhUTUxNZXRhRWxlbWVudEltcGw7CiB1c2luZyBET006OkhUTUxNb2RFbGVtZW50SW1wbDsK
K3VzaW5nIERPTTo6SFRNTE5hbWVzOwogdXNpbmcgRE9NOjpIVE1MT0xpc3RFbGVtZW50SW1wbDsK
IHVzaW5nIERPTTo6SFRNTE9iamVjdEVsZW1lbnRJbXBsOwogdXNpbmcgRE9NOjpIVE1MT3B0R3Jv
dXBFbGVtZW50SW1wbDsKQEAgLTM1Myw3ICszNTIsNyBAQCBWYWx1ZSBIVE1MRG9jdW1lbnQ6OnRy
eUdldChFeGVjU3RhdGUgKmV4CiAgIGlmICh2YWwpCiAgICAgcmV0dXJuIFZhbHVlKHZhbCk7CiAK
LSAgSFRNTEJvZHlFbGVtZW50SW1wbCAqYm9keUVsZW1lbnQgPSAoYm9keSAmJiBib2R5LT5pZCgp
ID09IElEX0JPRFkpID8gc3RhdGljX2Nhc3Q8SFRNTEJvZHlFbGVtZW50SW1wbCAqPihib2R5KSA6
IDA7CisgIEhUTUxCb2R5RWxlbWVudEltcGwgKmJvZHlFbGVtZW50ID0gKGJvZHkgJiYgYm9keS0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJvZHkoKSkpID8gc3RhdGljX2Nhc3Q8SFRNTEJvZHlFbGVt
ZW50SW1wbCAqPihib2R5KSA6IDA7CiAKICAgaWYgKGVudHJ5KSB7CiAgICAgc3dpdGNoIChlbnRy
eS0+dmFsdWUpIHsKQEAgLTQyOSw3ICs0MjgsNyBAQCB2b2lkIEtKUzo6SFRNTERvY3VtZW50Ojpw
dXRWYWx1ZShFeGVjU3RhCiAgIERPTUV4Y2VwdGlvblRyYW5zbGF0b3IgZXhjZXB0aW9uKGV4ZWMp
OwogICBIVE1MRG9jdW1lbnRJbXBsICZkb2MgPSAqc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50SW1w
bCAqPihpbXBsKCkpOwogICBIVE1MRWxlbWVudEltcGwgKmJvZHkgPSBkb2MuYm9keSgpOwotICBI
VE1MQm9keUVsZW1lbnRJbXBsICpib2R5RWxlbWVudCA9IChib2R5ICYmIGJvZHktPmlkKCkgPT0g
SURfQk9EWSkgPyBzdGF0aWNfY2FzdDxIVE1MQm9keUVsZW1lbnRJbXBsICo+KGJvZHkpIDogMDsK
KyAgSFRNTEJvZHlFbGVtZW50SW1wbCAqYm9keUVsZW1lbnQgPSAoYm9keSAmJiBib2R5LT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6Ym9keSgpKSkgPyBzdGF0aWNfY2FzdDxIVE1MQm9keUVsZW1lbnRJ
bXBsICo+KGJvZHkpIDogMDsKIAogICBzd2l0Y2ggKHRva2VuKSB7CiAgIGNhc2UgVGl0bGU6CkBA
IC01ODMsMTMzICs1ODIsMjE4IEBAIGNvbnN0IENsYXNzSW5mbyBLSlM6OkhUTUxFbGVtZW50Ojpt
YXJxdWUKIAogY29uc3QgQ2xhc3NJbmZvKiBLSlM6OkhUTUxFbGVtZW50OjpjbGFzc0luZm8oKSBj
b25zdAogewotICBzd2l0Y2ggKGltcGwoKS0+aWQoKSkgewotICBjYXNlIElEX0hUTUw6Ci0gICAg
cmV0dXJuICZodG1sX2luZm87Ci0gIGNhc2UgSURfSEVBRDoKLSAgICByZXR1cm4gJmhlYWRfaW5m
bzsKLSAgY2FzZSBJRF9MSU5LOgotICAgIHJldHVybiAmbGlua19pbmZvOwotICBjYXNlIElEX1RJ
VExFOgotICAgIHJldHVybiAmdGl0bGVfaW5mbzsKLSAgY2FzZSBJRF9NRVRBOgotICAgIHJldHVy
biAmbWV0YV9pbmZvOwotICBjYXNlIElEX0JBU0U6Ci0gICAgcmV0dXJuICZiYXNlX2luZm87Ci0g
IGNhc2UgSURfSVNJTkRFWDoKLSAgICByZXR1cm4gJmlzSW5kZXhfaW5mbzsKLSAgY2FzZSBJRF9T
VFlMRToKLSAgICByZXR1cm4gJnN0eWxlX2luZm87Ci0gIGNhc2UgSURfQk9EWToKLSAgICByZXR1
cm4gJmJvZHlfaW5mbzsKLSAgY2FzZSBJRF9GT1JNOgotICAgIHJldHVybiAmZm9ybV9pbmZvOwot
ICBjYXNlIElEX1NFTEVDVDoKLSAgICByZXR1cm4gJnNlbGVjdF9pbmZvOwotICBjYXNlIElEX09Q
VEdST1VQOgotICAgIHJldHVybiAmb3B0R3JvdXBfaW5mbzsKLSAgY2FzZSBJRF9PUFRJT046Ci0g
ICAgcmV0dXJuICZvcHRpb25faW5mbzsKLSAgY2FzZSBJRF9JTlBVVDoKLSAgICByZXR1cm4gJmlu
cHV0X2luZm87Ci0gIGNhc2UgSURfVEVYVEFSRUE6Ci0gICAgcmV0dXJuICZ0ZXh0QXJlYV9pbmZv
OwotICBjYXNlIElEX0JVVFRPTjoKLSAgICByZXR1cm4gJmJ1dHRvbl9pbmZvOwotICBjYXNlIElE
X0xBQkVMOgotICAgIHJldHVybiAmbGFiZWxfaW5mbzsKLSAgY2FzZSBJRF9GSUVMRFNFVDoKLSAg
ICByZXR1cm4gJmZpZWxkU2V0X2luZm87Ci0gIGNhc2UgSURfTEVHRU5EOgotICAgIHJldHVybiAm
bGVnZW5kX2luZm87Ci0gIGNhc2UgSURfVUw6Ci0gICAgcmV0dXJuICZ1bF9pbmZvOwotICBjYXNl
IElEX09MOgotICAgIHJldHVybiAmb2xfaW5mbzsKLSAgY2FzZSBJRF9ETDoKLSAgICByZXR1cm4g
JmRsX2luZm87Ci0gIGNhc2UgSURfRElSOgotICAgIHJldHVybiAmZGlyX2luZm87Ci0gIGNhc2Ug
SURfTUVOVToKLSAgICByZXR1cm4gJm1lbnVfaW5mbzsKLSAgY2FzZSBJRF9MSToKLSAgICByZXR1
cm4gJmxpX2luZm87Ci0gIGNhc2UgSURfRElWOgotICAgIHJldHVybiAmZGl2X2luZm87Ci0gIGNh
c2UgSURfUDoKLSAgICByZXR1cm4gJnBfaW5mbzsKLSAgY2FzZSBJRF9IMToKLSAgY2FzZSBJRF9I
MjoKLSAgY2FzZSBJRF9IMzoKLSAgY2FzZSBJRF9INDoKLSAgY2FzZSBJRF9INToKLSAgY2FzZSBJ
RF9INjoKLSAgICByZXR1cm4gJmhlYWRpbmdfaW5mbzsKLSAgY2FzZSBJRF9CTE9DS1FVT1RFOgot
ICAgIHJldHVybiAmYmxvY2tRdW90ZV9pbmZvOwotICBjYXNlIElEX1E6Ci0gICAgcmV0dXJuICZx
X2luZm87Ci0gIGNhc2UgSURfUFJFOgotICAgIHJldHVybiAmcHJlX2luZm87Ci0gIGNhc2UgSURf
QlI6Ci0gICAgcmV0dXJuICZicl9pbmZvOwotICBjYXNlIElEX0JBU0VGT05UOgotICAgIHJldHVy
biAmYmFzZUZvbnRfaW5mbzsKLSAgY2FzZSBJRF9GT05UOgotICAgIHJldHVybiAmZm9udF9pbmZv
OwotICBjYXNlIElEX0hSOgotICAgIHJldHVybiAmaHJfaW5mbzsKLSAgY2FzZSBJRF9JTlM6Ci0g
IGNhc2UgSURfREVMOgotICAgIHJldHVybiAmbW9kX2luZm87Ci0gIGNhc2UgSURfQToKLSAgICBy
ZXR1cm4gJmFfaW5mbzsKLSAgY2FzZSBJRF9DQU5WQVM6Ci0gICAgcmV0dXJuICZjYW52YXNfaW5m
bzsKLSAgY2FzZSBJRF9JTUc6Ci0gICAgcmV0dXJuICZpbWdfaW5mbzsKLSAgY2FzZSBJRF9PQkpF
Q1Q6Ci0gICAgcmV0dXJuICZvYmplY3RfaW5mbzsKLSAgY2FzZSBJRF9QQVJBTToKLSAgICByZXR1
cm4gJnBhcmFtX2luZm87Ci0gIGNhc2UgSURfQVBQTEVUOgotICAgIHJldHVybiAmYXBwbGV0X2lu
Zm87Ci0gIGNhc2UgSURfTUFQOgotICAgIHJldHVybiAmbWFwX2luZm87Ci0gIGNhc2UgSURfQVJF
QToKLSAgICByZXR1cm4gJmFyZWFfaW5mbzsKLSAgY2FzZSBJRF9TQ1JJUFQ6Ci0gICAgcmV0dXJu
ICZzY3JpcHRfaW5mbzsKLSAgY2FzZSBJRF9UQUJMRToKLSAgICByZXR1cm4gJnRhYmxlX2luZm87
Ci0gIGNhc2UgSURfQ0FQVElPTjoKLSAgICByZXR1cm4gJmNhcHRpb25faW5mbzsKLSAgY2FzZSBJ
RF9DT0w6Ci0gICAgcmV0dXJuICZjb2xfaW5mbzsKLSAgY2FzZSBJRF9USEVBRDoKLSAgICByZXR1
cm4gJnRhYmxlc2VjdGlvbl9pbmZvOwotICBjYXNlIElEX1RCT0RZOgotICAgIHJldHVybiAmdGFi
bGVzZWN0aW9uX2luZm87Ci0gIGNhc2UgSURfVEZPT1Q6Ci0gICAgcmV0dXJuICZ0YWJsZXNlY3Rp
b25faW5mbzsKLSAgY2FzZSBJRF9UUjoKLSAgICByZXR1cm4gJnRyX2luZm87Ci0gIGNhc2UgSURf
VEg6Ci0gICAgcmV0dXJuICZ0YWJsZWNlbGxfaW5mbzsKLSAgY2FzZSBJRF9URDoKLSAgICByZXR1
cm4gJnRhYmxlY2VsbF9pbmZvOwotICBjYXNlIElEX0ZSQU1FU0VUOgotICAgIHJldHVybiAmZnJh
bWVTZXRfaW5mbzsKLSAgY2FzZSBJRF9GUkFNRToKLSAgICByZXR1cm4gJmZyYW1lX2luZm87Ci0g
IGNhc2UgSURfSUZSQU1FOgotICAgIHJldHVybiAmaUZyYW1lX2luZm87Ci0gIGNhc2UgSURfTUFS
UVVFRToKLSAgICByZXR1cm4gJm1hcnF1ZWVfaW5mbzsKLSAgZGVmYXVsdDoKKyAgICAvLyBXZSBh
bHJlYWR5IGtub3cgd2UgaGF2ZSBhbiBIVE1MIGVsZW1lbnQsIHNvIHdlIG9ubHkgbmVlZCB0byBj
b21wYXJlIHRoZSBsb2NhbE5hbWUgY29tcG9uZW50IG9mIHRoZSBxdWFsaWZpZWQgbmFtZS4KKyAg
ICBzdGF0aWMgUVB0ckRpY3Q8Y29uc3QgQ2xhc3NJbmZvPiBjbGFzc0luZm9EaWN0OworICAgIGlm
IChjbGFzc0luZm9EaWN0LmlzRW1wdHkoKSkgeworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2Vy
dChIVE1MTmFtZXM6OmEoKS5sb2NhbE5hbWVQdHIoKSwgJmFfaW5mbyk7CisgICAgICAgIGNsYXNz
SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6YXBwbGV0KCkubG9jYWxOYW1lUHRyKCksICZhcHBs
ZXRfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6YXJlYSgp
LmxvY2FsTmFtZVB0cigpLCAmYXJlYV9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNl
cnQoSFRNTE5hbWVzOjpiYXNlKCkubG9jYWxOYW1lUHRyKCksICZiYXNlX2luZm8pOworICAgICAg
ICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmJhc2Vmb250KCkubG9jYWxOYW1lUHRy
KCksICZiYXNlRm9udF9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5h
bWVzOjpibG9ja3F1b3RlKCkubG9jYWxOYW1lUHRyKCksICZibG9ja1F1b3RlX2luZm8pOworICAg
ICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmJvZHkoKS5sb2NhbE5hbWVQdHIo
KSwgJmJvZHlfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6
YnIoKS5sb2NhbE5hbWVQdHIoKSwgJmJyX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmlu
c2VydChIVE1MTmFtZXM6OmJ1dHRvbigpLmxvY2FsTmFtZVB0cigpLCAmYnV0dG9uX2luZm8pOwor
ICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmNhbnZhcygpLmxvY2FsTmFt
ZVB0cigpLCAmY2FudmFzX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1M
TmFtZXM6OmNhcHRpb24oKS5sb2NhbE5hbWVQdHIoKSwgJmNhcHRpb25faW5mbyk7CisgICAgICAg
IGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6Y29sKCkubG9jYWxOYW1lUHRyKCksICZj
b2xfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6Y29sZ3Jv
dXAoKS5sb2NhbE5hbWVQdHIoKSwgJmNvbF9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5p
bnNlcnQoSFRNTE5hbWVzOjpkZWwoKS5sb2NhbE5hbWVQdHIoKSwgJm1vZF9pbmZvKTsKKyAgICAg
ICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpkaXIoKS5sb2NhbE5hbWVQdHIoKSwg
JmRpcl9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpkaXYo
KS5sb2NhbE5hbWVQdHIoKSwgJmRpdl9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNl
cnQoSFRNTE5hbWVzOjpkbCgpLmxvY2FsTmFtZVB0cigpLCAmZGxfaW5mbyk7CisgICAgICAgIGNs
YXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6ZmllbGRzZXQoKS5sb2NhbE5hbWVQdHIoKSwg
JmZpZWxkU2V0X2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6
OmZvbnQoKS5sb2NhbE5hbWVQdHIoKSwgJmZvbnRfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0Rp
Y3QuaW5zZXJ0KEhUTUxOYW1lczo6Zm9ybSgpLmxvY2FsTmFtZVB0cigpLCAmZm9ybV9pbmZvKTsK
KyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpmcmFtZSgpLmxvY2FsTmFt
ZVB0cigpLCAmZnJhbWVfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxO
YW1lczo6ZnJhbWVzZXQoKS5sb2NhbE5hbWVQdHIoKSwgJmZyYW1lU2V0X2luZm8pOworICAgICAg
ICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmgxKCkubG9jYWxOYW1lUHRyKCksICZo
ZWFkaW5nX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Omgy
KCkubG9jYWxOYW1lUHRyKCksICZoZWFkaW5nX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0
Lmluc2VydChIVE1MTmFtZXM6OmgzKCkubG9jYWxOYW1lUHRyKCksICZoZWFkaW5nX2luZm8pOwor
ICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Omg0KCkubG9jYWxOYW1lUHRy
KCksICZoZWFkaW5nX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFt
ZXM6Omg1KCkubG9jYWxOYW1lUHRyKCksICZoZWFkaW5nX2luZm8pOworICAgICAgICBjbGFzc0lu
Zm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Omg2KCkubG9jYWxOYW1lUHRyKCksICZoZWFkaW5nX2lu
Zm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmhlYWQoKS5sb2Nh
bE5hbWVQdHIoKSwgJmhlYWRfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhU
TUxOYW1lczo6aHIoKS5sb2NhbE5hbWVQdHIoKSwgJmhyX2luZm8pOworICAgICAgICBjbGFzc0lu
Zm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Omh0bWwoKS5sb2NhbE5hbWVQdHIoKSwgJmh0bWxfaW5m
byk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6aWZyYW1lKCkubG9j
YWxOYW1lUHRyKCksICZpRnJhbWVfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0
KEhUTUxOYW1lczo6aW1nKCkubG9jYWxOYW1lUHRyKCksICZpbWdfaW5mbyk7CisgICAgICAgIGNs
YXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6aW5wdXQoKS5sb2NhbE5hbWVQdHIoKSwgJmlu
cHV0X2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Omlucygp
LmxvY2FsTmFtZVB0cigpLCAmbW9kX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2Vy
dChIVE1MTmFtZXM6OmlzaW5kZXgoKS5sb2NhbE5hbWVQdHIoKSwgJmlzSW5kZXhfaW5mbyk7Cisg
ICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6bGFiZWwoKS5sb2NhbE5hbWVQ
dHIoKSwgJmxhYmVsX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFt
ZXM6OmxlZ2VuZCgpLmxvY2FsTmFtZVB0cigpLCAmbGVnZW5kX2luZm8pOworICAgICAgICBjbGFz
c0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmxpKCkubG9jYWxOYW1lUHRyKCksICZsaV9pbmZv
KTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpsaW5rKCkubG9jYWxO
YW1lUHRyKCksICZsaW5rX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1M
TmFtZXM6Om1hcCgpLmxvY2FsTmFtZVB0cigpLCAmbWFwX2luZm8pOworICAgICAgICBjbGFzc0lu
Zm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Om1hcnF1ZWUoKS5sb2NhbE5hbWVQdHIoKSwgJm1hcnF1
ZWVfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6bWVudSgp
LmxvY2FsTmFtZVB0cigpLCAmbWVudV9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNl
cnQoSFRNTE5hbWVzOjptZXRhKCkubG9jYWxOYW1lUHRyKCksICZtZXRhX2luZm8pOworICAgICAg
ICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Om9iamVjdCgpLmxvY2FsTmFtZVB0cigp
LCAmb2JqZWN0X2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6
Om9sKCkubG9jYWxOYW1lUHRyKCksICZvbF9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5p
bnNlcnQoSFRNTE5hbWVzOjpvcHRpb24oKS5sb2NhbE5hbWVQdHIoKSwgJm9wdGlvbl9pbmZvKTsK
KyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpvcHRncm91cCgpLmxvY2Fs
TmFtZVB0cigpLCAmb3B0R3JvdXBfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0
KEhUTUxOYW1lczo6cCgpLmxvY2FsTmFtZVB0cigpLCAmcF9pbmZvKTsKKyAgICAgICAgY2xhc3NJ
bmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpwYXJhbSgpLmxvY2FsTmFtZVB0cigpLCAmcGFyYW1f
aW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6cHJlKCkubG9j
YWxOYW1lUHRyKCksICZwcmVfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhU
TUxOYW1lczo6cSgpLmxvY2FsTmFtZVB0cigpLCAmcV9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZv
RGljdC5pbnNlcnQoSFRNTE5hbWVzOjpzY3JpcHQoKS5sb2NhbE5hbWVQdHIoKSwgJnNjcmlwdF9p
bmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpzZWxlY3QoKS5s
b2NhbE5hbWVQdHIoKSwgJnNlbGVjdF9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNl
cnQoSFRNTE5hbWVzOjpzdHlsZSgpLmxvY2FsTmFtZVB0cigpLCAmc3R5bGVfaW5mbyk7CisgICAg
ICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6dGFibGUoKS5sb2NhbE5hbWVQdHIo
KSwgJnRhYmxlX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6
OnRib2R5KCkubG9jYWxOYW1lUHRyKCksICZ0YWJsZXNlY3Rpb25faW5mbyk7CisgICAgICAgIGNs
YXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6dGQoKS5sb2NhbE5hbWVQdHIoKSwgJnRhYmxl
Y2VsbF9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjp0ZXh0
YXJlYSgpLmxvY2FsTmFtZVB0cigpLCAmdGV4dEFyZWFfaW5mbyk7CisgICAgICAgIGNsYXNzSW5m
b0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6dGgoKS5sb2NhbE5hbWVQdHIoKSwgJnRhYmxlY2VsbF9p
bmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjp0aGVhZCgpLmxv
Y2FsTmFtZVB0cigpLCAmdGFibGVzZWN0aW9uX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0
Lmluc2VydChIVE1MTmFtZXM6OnRmb290KCkubG9jYWxOYW1lUHRyKCksICZ0YWJsZXNlY3Rpb25f
aW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6dGl0bGUoKS5s
b2NhbE5hbWVQdHIoKSwgJnRpdGxlX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2Vy
dChIVE1MTmFtZXM6OnRyKCkubG9jYWxOYW1lUHRyKCksICZ0cl9pbmZvKTsKKyAgICAgICAgY2xh
c3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjp1bCgpLmxvY2FsTmFtZVB0cigpLCAmdWxfaW5m
byk7CisgICAgfQorICAgIAorICAgIEhUTUxFbGVtZW50SW1wbCogZWxlbWVudCA9IHN0YXRpY19j
YXN0PEhUTUxFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgY29uc3QgQ2xhc3NJbmZvKiByZXN1
bHQgPSBjbGFzc0luZm9EaWN0LmZpbmQoZWxlbWVudC0+bG9jYWxOYW1lKCkuaW1wbGVtZW50YXRp
b24oKSk7CisgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICByZXR1
cm4gJmluZm87Ci0gIH0KIH0KKworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVs
ZW1lbnQ6Omh0bWxfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6Omh0bWxHZXR0ZXIsICZIVE1MRWxl
bWVudDo6aHRtbFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVs
ZW1lbnQ6OmhlYWRfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmhlYWRHZXR0ZXIsICZIVE1MRWxl
bWVudDo6aGVhZFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVs
ZW1lbnQ6OmxpbmtfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmxpbmtHZXR0ZXIsICZIVE1MRWxl
bWVudDo6bGlua1NldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVs
ZW1lbnQ6OnRpdGxlX2dldHNldCA9IHsgJkhUTUxFbGVtZW50Ojp0aXRsZUdldHRlciwgJkhUTUxF
bGVtZW50Ojp0aXRsZVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRN
TEVsZW1lbnQ6Om1ldGFfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6Om1ldGFHZXR0ZXIsICZIVE1M
RWxlbWVudDo6bWV0YVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRN
TEVsZW1lbnQ6OmJhc2VfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmJhc2VHZXR0ZXIsICZIVE1M
RWxlbWVudDo6YmFzZVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRN
TEVsZW1lbnQ6OmlzSW5kZXhfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmlzSW5kZXhHZXR0ZXIs
ICZIVE1MRWxlbWVudDo6aXNJbmRleFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNl
dEluZm8gSFRNTEVsZW1lbnQ6OnN0eWxlX2dldHNldCA9IHsgJkhUTUxFbGVtZW50OjpzdHlsZUdl
dHRlciwgJkhUTUxFbGVtZW50OjpzdHlsZVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6Okdl
dFNldEluZm8gSFRNTEVsZW1lbnQ6OmJvZHlfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmJvZHlH
ZXR0ZXIsICZIVE1MRWxlbWVudDo6Ym9keVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6Okdl
dFNldEluZm8gSFRNTEVsZW1lbnQ6OmZvcm1fZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmZvcm1H
ZXR0ZXIsICZIVE1MRWxlbWVudDo6Zm9ybVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6Okdl
dFNldEluZm8gSFRNTEVsZW1lbnQ6OnNlbGVjdF9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6c2Vs
ZWN0R2V0dGVyLCAmSFRNTEVsZW1lbnQ6OnNlbGVjdFNldHRlciB9OworY29uc3QgSFRNTEVsZW1l
bnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6Om9wdEdyb3VwX2dldHNldCA9IHsgJkhUTUxFbGVt
ZW50OjpvcHRHcm91cEdldHRlciwgJkhUTUxFbGVtZW50OjpvcHRHcm91cFNldHRlciB9OworY29u
c3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6Om9wdGlvbl9nZXRzZXQgPSB7
ICZIVE1MRWxlbWVudDo6b3B0aW9uR2V0dGVyLCAmSFRNTEVsZW1lbnQ6Om9wdGlvblNldHRlciB9
OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmlucHV0X2dldHNl
dCA9IHsgJkhUTUxFbGVtZW50OjppbnB1dEdldHRlciwgJkhUTUxFbGVtZW50OjppbnB1dFNldHRl
ciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OnRleHRBcmVh
X2dldHNldCA9IHsgJkhUTUxFbGVtZW50Ojp0ZXh0QXJlYUdldHRlciwgJkhUTUxFbGVtZW50Ojp0
ZXh0QXJlYVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1l
bnQ6OmJ1dHRvbl9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6YnV0dG9uR2V0dGVyLCAmSFRNTEVs
ZW1lbnQ6OmJ1dHRvblNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRN
TEVsZW1lbnQ6OmxhYmVsX2dldHNldCA9IHsgJkhUTUxFbGVtZW50OjpsYWJlbEdldHRlciwgJkhU
TUxFbGVtZW50OjpsYWJlbFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8g
SFRNTEVsZW1lbnQ6OmZpZWxkU2V0X2dldHNldCA9IHsgJkhUTUxFbGVtZW50OjpmaWVsZFNldEdl
dHRlciwgJkhUTUxFbGVtZW50OjpmaWVsZFNldFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6
OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmxlZ2VuZF9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6
bGVnZW5kR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmxlZ2VuZFNldHRlciB9OworY29uc3QgSFRNTEVs
ZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OnVsX2dldHNldCA9IHsgJkhUTUxFbGVtZW50
Ojp1TGlzdEdldHRlciwgJkhUTUxFbGVtZW50Ojp1TGlzdFNldHRlciB9OworY29uc3QgSFRNTEVs
ZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6Om9sX2dldHNldCA9IHsgJkhUTUxFbGVtZW50
OjpvTGlzdEdldHRlciwgJkhUTUxFbGVtZW50OjpvTGlzdFNldHRlciB9OworY29uc3QgSFRNTEVs
ZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmRsX2dldHNldCA9IHsgJkhUTUxFbGVtZW50
OjpkTGlzdEdldHRlciwgJkhUTUxFbGVtZW50OjpkTGlzdFNldHRlciB9OworY29uc3QgSFRNTEVs
ZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmRpcl9nZXRzZXQgPSB7ICZIVE1MRWxlbWVu
dDo6ZGlyR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmRpclNldHRlciB9OworY29uc3QgSFRNTEVsZW1l
bnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6Om1lbnVfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6
Om1lbnVHZXR0ZXIsICZIVE1MRWxlbWVudDo6bWVudVNldHRlciB9OworY29uc3QgSFRNTEVsZW1l
bnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmxpX2dldHNldCA9IHsgJkhUTUxFbGVtZW50Ojps
aUdldHRlciwgJkhUTUxFbGVtZW50OjpsaVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6Okdl
dFNldEluZm8gSFRNTEVsZW1lbnQ6OmRpdl9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6ZGl2R2V0
dGVyLCAmSFRNTEVsZW1lbnQ6OmRpdlNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNl
dEluZm8gSFRNTEVsZW1lbnQ6OnBfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OnBhcmFncmFwaEdl
dHRlciwgJkhUTUxFbGVtZW50OjpwYXJhZ3JhcGhTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50
OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjpoZWFkaW5nX2dldHNldCA9IHsgJkhUTUxFbGVtZW50
OjpoZWFkaW5nR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmhlYWRpbmdTZXR0ZXIgfTsKK2NvbnN0IEhU
TUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjpibG9ja1F1b3RlX2dldHNldCA9IHsg
JkhUTUxFbGVtZW50OjpibG9ja1F1b3RlR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmJsb2NrUXVvdGVT
ZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjpxX2dl
dHNldCA9IHsgJkhUTUxFbGVtZW50OjpxdW90ZUdldHRlciwgJkhUTUxFbGVtZW50OjpxdW90ZVNl
dHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OnByZV9n
ZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6cHJlR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OnByZVNldHRl
ciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmJyX2dldHNl
dCA9IHsgJkhUTUxFbGVtZW50OjpickdldHRlciwgJkhUTUxFbGVtZW50OjpiclNldHRlciB9Owor
Y29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmJhc2VGb250X2dldHNl
dCA9IHsgJkhUTUxFbGVtZW50OjpiYXNlRm9udEdldHRlciwgJkhUTUxFbGVtZW50OjpiYXNlRm9u
dFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmZv
bnRfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmZvbnRHZXR0ZXIsICZIVE1MRWxlbWVudDo6Zm9u
dFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6Omhy
X2dldHNldCA9IHsgJkhUTUxFbGVtZW50OjpockdldHRlciwgJkhUTUxFbGVtZW50OjpoclNldHRl
ciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6Om1vZF9nZXRz
ZXQgPSB7ICZIVE1MRWxlbWVudDo6bW9kR2V0dGVyLCAmSFRNTEVsZW1lbnQ6Om1vZFNldHRlciB9
OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6OmFfZ2V0c2V0ID0g
eyAmSFRNTEVsZW1lbnQ6OmFuY2hvckdldHRlciwgJkhUTUxFbGVtZW50OjphbmNob3JTZXR0ZXIg
fTsKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50OjpjYW52YXNfZ2V0
c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmltYWdlR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmltYWdlU2V0
dGVyIH07Citjb25zdCBIVE1MRWxlbWVudDo6R2V0U2V0SW5mbyBIVE1MRWxlbWVudDo6aW1nX2dl
dHNldCA9IHsgJkhUTUxFbGVtZW50OjppbWFnZUdldHRlciwgJkhUTUxFbGVtZW50OjppbWFnZVNl
dHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6Om9iamVj
dF9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6b2JqZWN0R2V0dGVyLCAmSFRNTEVsZW1lbnQ6Om9i
amVjdFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1lbnQ6
OnBhcmFtX2dldHNldCA9IHsgJkhUTUxFbGVtZW50OjpwYXJhbUdldHRlciwgJkhUTUxFbGVtZW50
OjpwYXJhbVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVsZW1l
bnQ6OmFwcGxldF9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6YXBwbGV0R2V0dGVyLCAmSFRNTEVs
ZW1lbnQ6OmFwcGxldFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRN
TEVsZW1lbnQ6Om1hcF9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6bWFwR2V0dGVyLCAmSFRNTEVs
ZW1lbnQ6Om1hcFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVs
ZW1lbnQ6OmFyZWFfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OmFyZWFHZXR0ZXIsICZIVE1MRWxl
bWVudDo6YXJlYVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8gSFRNTEVs
ZW1lbnQ6OnNjcmlwdF9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6c2NyaXB0R2V0dGVyLCAmSFRN
TEVsZW1lbnQ6OnNjcmlwdFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldEluZm8g
SFRNTEVsZW1lbnQ6OnRhYmxlX2dldHNldCA9IHsgJkhUTUxFbGVtZW50Ojp0YWJsZUdldHRlciwg
JkhUTUxFbGVtZW50Ojp0YWJsZVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkdldFNldElu
Zm8gSFRNTEVsZW1lbnQ6OmNhcHRpb25fZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OnRhYmxlQ2Fw
dGlvbkdldHRlciwgJkhUTUxFbGVtZW50Ojp0YWJsZUNhcHRpb25TZXR0ZXIgfTsKK2NvbnN0IEhU
TUxFbGVtZW50OjpHZXRTZXRJbmZvIEhUTUxFbGVtZW50Ojpjb2xfZ2V0c2V0ID0geyAmSFRNTEVs
ZW1lbnQ6OnRhYmxlQ29sR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OnRhYmxlQ29sU2V0dGVyIH07Citj
b25zdCBIVE1MRWxlbWVudDo6R2V0U2V0SW5mbyBIVE1MRWxlbWVudDo6dGFibGVzZWN0aW9uX2dl
dHNldCA9IHsgJkhUTUxFbGVtZW50Ojp0YWJsZVNlY3Rpb25HZXR0ZXIsICZIVE1MRWxlbWVudDo6
dGFibGVTZWN0aW9uU2V0dGVyIH07Citjb25zdCBIVE1MRWxlbWVudDo6R2V0U2V0SW5mbyBIVE1M
RWxlbWVudDo6dHJfZ2V0c2V0ID0geyAmSFRNTEVsZW1lbnQ6OnRhYmxlUm93R2V0dGVyLCAmSFRN
TEVsZW1lbnQ6OnRhYmxlUm93U2V0dGVyIH07Citjb25zdCBIVE1MRWxlbWVudDo6R2V0U2V0SW5m
byBIVE1MRWxlbWVudDo6dGFibGVjZWxsX2dldHNldCA9IHsgJkhUTUxFbGVtZW50Ojp0YWJsZUNl
bGxHZXR0ZXIsICZIVE1MRWxlbWVudDo6dGFibGVDZWxsU2V0dGVyIH07Citjb25zdCBIVE1MRWxl
bWVudDo6R2V0U2V0SW5mbyBIVE1MRWxlbWVudDo6ZnJhbWVTZXRfZ2V0c2V0ID0geyAmSFRNTEVs
ZW1lbnQ6OmZyYW1lU2V0R2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmZyYW1lU2V0U2V0dGVyIH07Citj
b25zdCBIVE1MRWxlbWVudDo6R2V0U2V0SW5mbyBIVE1MRWxlbWVudDo6ZnJhbWVfZ2V0c2V0ID0g
eyAmSFRNTEVsZW1lbnQ6OmZyYW1lR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmZyYW1lU2V0dGVyIH07
Citjb25zdCBIVE1MRWxlbWVudDo6R2V0U2V0SW5mbyBIVE1MRWxlbWVudDo6aUZyYW1lX2dldHNl
dCA9IHsgJkhUTUxFbGVtZW50OjppRnJhbWVHZXR0ZXIsICZIVE1MRWxlbWVudDo6aUZyYW1lU2V0
dGVyIH07Citjb25zdCBIVE1MRWxlbWVudDo6R2V0U2V0SW5mbyBIVE1MRWxlbWVudDo6bWFycXVl
ZV9nZXRzZXQgPSB7ICZIVE1MRWxlbWVudDo6bWFycXVlZUdldHRlciwgJkhUTUxFbGVtZW50Ojpt
YXJxdWVlU2V0dGVyIH07CisKK2NvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvKiBIVE1MRWxl
bWVudDo6Z2V0U2V0SW5mbygpIGNvbnN0Cit7CisgICAgLy8gV2UgYWxyZWFkeSBrbm93IHdlIGhh
dmUgYW4gSFRNTCBlbGVtZW50LCBzbyB3ZSBvbmx5IG5lZWQgdG8gY29tcGFyZSB0aGUgbG9jYWxO
YW1lIGNvbXBvbmVudCBvZiB0aGUgcXVhbGlmaWVkIG5hbWUuCisgICAgc3RhdGljIFFQdHJEaWN0
PGNvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvPiBnZXRTZXRJbmZvRGljdDsKKyAgICBpZiAo
Z2V0U2V0SW5mb0RpY3QuaXNFbXB0eSgpKSB7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2Vy
dChIVE1MTmFtZXM6OmEoKS5sb2NhbE5hbWVQdHIoKSwgJmFfZ2V0c2V0KTsKKyAgICAgICAgZ2V0
U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6YXBwbGV0KCkubG9jYWxOYW1lUHRyKCksICZh
cHBsZXRfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6
YXJlYSgpLmxvY2FsTmFtZVB0cigpLCAmYXJlYV9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZv
RGljdC5pbnNlcnQoSFRNTE5hbWVzOjpiYXNlKCkubG9jYWxOYW1lUHRyKCksICZiYXNlX2dldHNl
dCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmJhc2Vmb250KCku
bG9jYWxOYW1lUHRyKCksICZiYXNlRm9udF9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGlj
dC5pbnNlcnQoSFRNTE5hbWVzOjpibG9ja3F1b3RlKCkubG9jYWxOYW1lUHRyKCksICZibG9ja1F1
b3RlX2dldHNldCk7IAorICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpi
b2R5KCkubG9jYWxOYW1lUHRyKCksICZib2R5X2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9E
aWN0Lmluc2VydChIVE1MTmFtZXM6OmJyKCkubG9jYWxOYW1lUHRyKCksICZicl9nZXRzZXQpOwor
ICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpidXR0b24oKS5sb2NhbE5h
bWVQdHIoKSwgJmJ1dHRvbl9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQo
SFRNTE5hbWVzOjpjYW52YXMoKS5sb2NhbE5hbWVQdHIoKSwgJmNhbnZhc19nZXRzZXQpOworICAg
ICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpjYXB0aW9uKCkubG9jYWxOYW1l
UHRyKCksICZjYXB0aW9uX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChI
VE1MTmFtZXM6OmNvbCgpLmxvY2FsTmFtZVB0cigpLCAmY29sX2dldHNldCk7CisgICAgICAgIGdl
dFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmNvbGdyb3VwKCkubG9jYWxOYW1lUHRyKCks
ICZjb2xfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6
ZGVsKCkubG9jYWxOYW1lUHRyKCksICZtb2RfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0Rp
Y3QuaW5zZXJ0KEhUTUxOYW1lczo6ZGlyKCkubG9jYWxOYW1lUHRyKCksICZkaXJfZ2V0c2V0KTsK
KyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6ZGl2KCkubG9jYWxOYW1l
UHRyKCksICZkaXZfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxO
YW1lczo6ZGwoKS5sb2NhbE5hbWVQdHIoKSwgJmRsX2dldHNldCk7CisgICAgICAgIGdldFNldElu
Zm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmZpZWxkc2V0KCkubG9jYWxOYW1lUHRyKCksICZmaWVs
ZFNldF9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpm
b250KCkubG9jYWxOYW1lUHRyKCksICZmb250X2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9E
aWN0Lmluc2VydChIVE1MTmFtZXM6OmZvcm0oKS5sb2NhbE5hbWVQdHIoKSwgJmZvcm1fZ2V0c2V0
KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6ZnJhbWUoKS5sb2Nh
bE5hbWVQdHIoKSwgJmZyYW1lX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2Vy
dChIVE1MTmFtZXM6OmZyYW1lc2V0KCkubG9jYWxOYW1lUHRyKCksICZmcmFtZVNldF9nZXRzZXQp
OworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpoMSgpLmxvY2FsTmFt
ZVB0cigpLCAmaGVhZGluZ19nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQo
SFRNTE5hbWVzOjpoMigpLmxvY2FsTmFtZVB0cigpLCAmaGVhZGluZ19nZXRzZXQpOworICAgICAg
ICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpoMygpLmxvY2FsTmFtZVB0cigpLCAm
aGVhZGluZ19nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVz
OjpoNCgpLmxvY2FsTmFtZVB0cigpLCAmaGVhZGluZ19nZXRzZXQpOworICAgICAgICBnZXRTZXRJ
bmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpoNSgpLmxvY2FsTmFtZVB0cigpLCAmaGVhZGluZ19n
ZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpoNigpLmxv
Y2FsTmFtZVB0cigpLCAmaGVhZGluZ19nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5p
bnNlcnQoSFRNTE5hbWVzOjpoZWFkKCkubG9jYWxOYW1lUHRyKCksICZoZWFkX2dldHNldCk7Cisg
ICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmhyKCkubG9jYWxOYW1lUHRy
KCksICZocl9nZXRzZXQpOyAKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1l
czo6aHRtbCgpLmxvY2FsTmFtZVB0cigpLCAmaHRtbF9nZXRzZXQpOworICAgICAgICBnZXRTZXRJ
bmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjppZnJhbWUoKS5sb2NhbE5hbWVQdHIoKSwgJmlGcmFt
ZV9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjppbWco
KS5sb2NhbE5hbWVQdHIoKSwgJmltZ19nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5p
bnNlcnQoSFRNTE5hbWVzOjppbnB1dCgpLmxvY2FsTmFtZVB0cigpLCAmaW5wdXRfZ2V0c2V0KTsK
KyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6aW5zKCkubG9jYWxOYW1l
UHRyKCksICZtb2RfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxO
YW1lczo6aXNpbmRleCgpLmxvY2FsTmFtZVB0cigpLCAmaXNJbmRleF9nZXRzZXQpOworICAgICAg
ICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpsYWJlbCgpLmxvY2FsTmFtZVB0cigp
LCAmbGFiZWxfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1l
czo6bGVnZW5kKCkubG9jYWxOYW1lUHRyKCksICZsZWdlbmRfZ2V0c2V0KTsKKyAgICAgICAgZ2V0
U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6bGkoKS5sb2NhbE5hbWVQdHIoKSwgJmxpX2dl
dHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmxpbmsoKS5s
b2NhbE5hbWVQdHIoKSwgJmxpbmtfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5z
ZXJ0KEhUTUxOYW1lczo6bWFwKCkubG9jYWxOYW1lUHRyKCksICZtYXBfZ2V0c2V0KTsKKyAgICAg
ICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6bWFycXVlZSgpLmxvY2FsTmFtZVB0
cigpLCAmbWFycXVlZV9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRN
TE5hbWVzOjptZW51KCkubG9jYWxOYW1lUHRyKCksICZtZW51X2dldHNldCk7CisgICAgICAgIGdl
dFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Om1ldGEoKS5sb2NhbE5hbWVQdHIoKSwgJm1l
dGFfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6b2Jq
ZWN0KCkubG9jYWxOYW1lUHRyKCksICZvYmplY3RfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5m
b0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6b2woKS5sb2NhbE5hbWVQdHIoKSwgJm9sX2dldHNldCk7
CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Om9wdGlvbigpLmxvY2Fs
TmFtZVB0cigpLCAmb3B0aW9uX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2Vy
dChIVE1MTmFtZXM6Om9wdGdyb3VwKCkubG9jYWxOYW1lUHRyKCksICZvcHRHcm91cF9nZXRzZXQp
OworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpwKCkubG9jYWxOYW1l
UHRyKCksICZwX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFt
ZXM6OnBhcmFtKCkubG9jYWxOYW1lUHRyKCksICZwYXJhbV9nZXRzZXQpOworICAgICAgICBnZXRT
ZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpwcmUoKS5sb2NhbE5hbWVQdHIoKSwgJnByZV9n
ZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpxKCkubG9j
YWxOYW1lUHRyKCksICZxX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChI
VE1MTmFtZXM6OnNjcmlwdCgpLmxvY2FsTmFtZVB0cigpLCAmc2NyaXB0X2dldHNldCk7CisgICAg
ICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OnNlbGVjdCgpLmxvY2FsTmFtZVB0
cigpLCAmc2VsZWN0X2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1M
TmFtZXM6OnN0eWxlKCkubG9jYWxOYW1lUHRyKCksICZzdHlsZV9nZXRzZXQpOworICAgICAgICBn
ZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjp0YWJsZSgpLmxvY2FsTmFtZVB0cigpLCAm
dGFibGVfZ2V0c2V0KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6
dGJvZHkoKS5sb2NhbE5hbWVQdHIoKSwgJnRhYmxlc2VjdGlvbl9nZXRzZXQpOworICAgICAgICBn
ZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjp0ZCgpLmxvY2FsTmFtZVB0cigpLCAmdGFi
bGVjZWxsX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6
OnRleHRhcmVhKCkubG9jYWxOYW1lUHRyKCksICZ0ZXh0QXJlYV9nZXRzZXQpOworICAgICAgICBn
ZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjp0aCgpLmxvY2FsTmFtZVB0cigpLCAmdGFi
bGVjZWxsX2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6
OnRoZWFkKCkubG9jYWxOYW1lUHRyKCksICZ0YWJsZXNlY3Rpb25fZ2V0c2V0KTsKKyAgICAgICAg
Z2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6dGZvb3QoKS5sb2NhbE5hbWVQdHIoKSwg
JnRhYmxlc2VjdGlvbl9nZXRzZXQpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRN
TE5hbWVzOjp0aXRsZSgpLmxvY2FsTmFtZVB0cigpLCAmdGl0bGVfZ2V0c2V0KTsKKyAgICAgICAg
Z2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6dHIoKS5sb2NhbE5hbWVQdHIoKSwgJnRy
X2dldHNldCk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OnVsKCku
bG9jYWxOYW1lUHRyKCksICZ1bF9nZXRzZXQpOworICAgIH0KKyAgICAKKyAgICBIVE1MRWxlbWVu
dEltcGwqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwqPihpbXBsKCkpOwor
ICAgIGNvbnN0IEhUTUxFbGVtZW50OjpHZXRTZXRJbmZvKiByZXN1bHQgPSBnZXRTZXRJbmZvRGlj
dC5maW5kKGVsZW1lbnQtPmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCkpOworICAgIGlmIChy
ZXN1bHQpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIDA7Cit9CisKIC8qCiBA
YmVnaW4gSFRNTEVsZW1lbnRUYWJsZSAxNAogICBpZAkJS0pTOjpIVE1MRWxlbWVudDo6RWxlbWVu
dElkCURvbnREZWxldGUKQEAgLTExODQsNyArMTI2OCw3IEBAIGNvbnN0IENsYXNzSW5mbyogS0pT
OjpIVE1MRWxlbWVudDo6Y2xhc3MKIEBlbmQKIAogQGJlZ2luIEhUTUxDYW52YXNFbGVtZW50VGFi
bGUgMQotICBnZXRDb250ZXh0ICAgICAgS0pTOjpIVE1MRWxlbWVudDo6R2V0Q29udGV4dCAgICAg
ICAgICAgICAgICAgIERvbnREZWxldGV8RnVuY3Rpb24gMAorICBnZXRDb250ZXh0ICAgICAgS0pT
OjpIVE1MRWxlbWVudDo6R2V0Q29udGV4dCAgICAgICAgICAgICAgICAgIERvbnREZWxldGV8RnVu
Y3Rpb24gMQogQGVuZAogKi8KIApAQCAtMTE5NSwzNSArMTI3OSwzMiBAQCBIVE1MRWxlbWVudDo6
SFRNTEVsZW1lbnQoRXhlY1N0YXRlICpleGVjCiAKIFZhbHVlIEtKUzo6SFRNTEVsZW1lbnQ6OnRy
eUdldChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3BlcnR5TmFtZSkgY29u
c3QKIHsKLSAgSFRNTEVsZW1lbnRJbXBsICZlbGVtZW50ID0gKnN0YXRpY19jYXN0PEhUTUxFbGVt
ZW50SW1wbCAqPihpbXBsKCkpOworICAgIEhUTUxFbGVtZW50SW1wbCAmZWxlbWVudCA9ICpzdGF0
aWNfY2FzdDxIVE1MRWxlbWVudEltcGwgKj4oaW1wbCgpKTsKICNpZmRlZiBLSlNfVkVSQk9TRQot
ICBrZERlYnVnKDYwNzApIDw8ICJLSlM6OkhUTUxFbGVtZW50Ojp0cnlHZXQgIiA8PCBwcm9wZXJ0
eU5hbWUucXN0cmluZygpIDw8ICIgdGhpc1RhZz0iIDw8IGVsZW1lbnQudGFnTmFtZSgpLnN0cmlu
ZygpIDw8IGVuZGw7CisgICAga2REZWJ1Zyg2MDcwKSA8PCAiS0pTOjpIVE1MRWxlbWVudDo6dHJ5
R2V0ICIgPDwgcHJvcGVydHlOYW1lLnFzdHJpbmcoKSA8PCAiIHRoaXNUYWc9IiA8PCBlbGVtZW50
LnRhZ05hbWUoKS5zdHJpbmcoKSA8PCBlbmRsOwogI2VuZGlmCi0gIC8vIEZpcnN0IGxvb2sgYXQg
ZHluYW1pYyBwcm9wZXJ0aWVzCi0gIHN3aXRjaCAoZWxlbWVudC5pZCgpKSB7Ci0gICAgY2FzZSBJ
RF9GT1JNOiB7Ci0gICAgICBIVE1MRm9ybUVsZW1lbnRJbXBsICZmb3JtID0gc3RhdGljX2Nhc3Q8
SFRNTEZvcm1FbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIC8vIENoZWNrIGlmIHdlJ3Jl
IHJldHJpZXZpbmcgYW4gZWxlbWVudCAoYnkgaW5kZXggb3IgYnkgbmFtZSkKLSAgICAgIGJvb2wg
b2s7Ci0gICAgICB1aW50IHUgPSBwcm9wZXJ0eU5hbWUudG9VTG9uZygmb2spOwotICAgICAgaWYg
KG9rKQotICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLCBmb3JtLmVsZW1lbnRzKCktPml0
ZW0odSkpOwotICAgICAgVmFsdWVJbXAgKm5hbWVkSXRlbXMgPSBIVE1MQ29sbGVjdGlvbihleGVj
LCBmb3JtLmVsZW1lbnRzKCkuZ2V0KCkpLmdldE5hbWVkSXRlbXMoZXhlYywgcHJvcGVydHlOYW1l
KTsKLSAgICAgIGlmICghbmFtZWRJdGVtcy0+aXNVbmRlZmluZWQoKSkKLSAgICAgICAgcmV0dXJu
IG5hbWVkSXRlbXM7Ci0gICAgfQotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9TRUxFQ1Q6IHsK
LSAgICAgIEhUTUxTZWxlY3RFbGVtZW50SW1wbCAmc2VsZWN0ID0gc3RhdGljX2Nhc3Q8SFRNTFNl
bGVjdEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgYm9vbCBvazsKLSAgICAgIHVpbnQg
dSA9IHByb3BlcnR5TmFtZS50b1VMb25nKCZvayk7Ci0gICAgICBpZiAob2spCi0gICAgICAgIHJl
dHVybiBnZXRET01Ob2RlKGV4ZWMsIHNlbGVjdC5vcHRpb25zSFRNTENvbGxlY3Rpb24oKS0+aXRl
bSh1KSk7IC8vIG5vdCBzcGVjaWZpZWQgYnkgRE9NKD8pIGJ1dCBzdXBwb3J0ZWQgaW4gbmV0c2Nh
cGUvSUUKKyAgICAvLyBGaXJzdCBsb29rIGF0IGR5bmFtaWMgcHJvcGVydGllcworICAgIGlmIChl
bGVtZW50Lmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmZvcm0oKSkpIHsKKyAgICAgICAgSFRNTEZv
cm1FbGVtZW50SW1wbCAmZm9ybSA9IHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudEltcGwgJj4o
ZWxlbWVudCk7CisgICAgICAgIC8vIENoZWNrIGlmIHdlJ3JlIHJldHJpZXZpbmcgYW4gZWxlbWVu
dCAoYnkgaW5kZXggb3IgYnkgbmFtZSkKKyAgICAgICAgYm9vbCBvazsKKyAgICAgICAgdWludCB1
ID0gcHJvcGVydHlOYW1lLnRvVUxvbmcoJm9rKTsKKyAgICAgICAgaWYgKG9rKQorICAgICAgICAg
ICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYywgZm9ybS5lbGVtZW50cygpLT5pdGVtKHUpKTsKKyAg
ICAgICAgVmFsdWVJbXAgKm5hbWVkSXRlbXMgPSBIVE1MQ29sbGVjdGlvbihleGVjLCBmb3JtLmVs
ZW1lbnRzKCkuZ2V0KCkpLmdldE5hbWVkSXRlbXMoZXhlYywgcHJvcGVydHlOYW1lKTsKKyAgICAg
ICAgaWYgKCFuYW1lZEl0ZW1zLT5pc1VuZGVmaW5lZCgpKQorICAgICAgICAgICAgcmV0dXJuIG5h
bWVkSXRlbXM7CisgICAgfQorICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFzTG9jYWxOYW1lKEhUTUxO
YW1lczo6c2VsZWN0KCkpKSB7CisgICAgICAgIEhUTUxTZWxlY3RFbGVtZW50SW1wbCAmc2VsZWN0
ID0gc3RhdGljX2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgICAg
ICBib29sIG9rOworICAgICAgICB1aW50IHUgPSBwcm9wZXJ0eU5hbWUudG9VTG9uZygmb2spOwor
ICAgICAgICBpZiAob2spCisgICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLCBzZWxl
Y3Qub3B0aW9uc0hUTUxDb2xsZWN0aW9uKCktPml0ZW0odSkpOyAvLyBub3Qgc3BlY2lmaWVkIGJ5
IERPTSg/KSBidXQgc3VwcG9ydGVkIGluIG5ldHNjYXBlL0lFCiAgICAgfQotICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBJRF9GUkFNRVNFVDogeworICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6ZnJhbWVzZXQoKSkpIHsKICAgICAgICAgTm9kZUltcGwgKmZyYW1lID0g
ZWxlbWVudC5jaGlsZHJlbigpLT5uYW1lZEl0ZW0ocHJvcGVydHlOYW1lLnN0cmluZygpKTsKLSAg
ICAgICAgaWYgKGZyYW1lICYmIGZyYW1lLT5pZCgpID09IElEX0ZSQU1FKSB7CisgICAgICAgIGlm
IChmcmFtZSAmJiBmcmFtZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZyYW1lKCkpKSB7CiAgICAg
ICAgICAgICBEb2N1bWVudEltcGwqIGRvYyA9IHN0YXRpY19jYXN0PEhUTUxGcmFtZUVsZW1lbnRJ
bXBsICo+KGZyYW1lKS0+Y29udGVudERvY3VtZW50KCk7CiAgICAgICAgICAgICBpZiAoZG9jKSB7
CiAgICAgICAgICAgICAgICAgS0hUTUxQYXJ0KiBwYXJ0ID0gZG9jLT5wYXJ0KCk7CkBAIC0xMjM2
LDczICsxMzE3LDU3IEBAIFZhbHVlIEtKUzo6SFRNTEVsZW1lbnQ6OnRyeUdldChFeGVjU3RhdGUK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBJRF9GUkFNRToKLSAgICBjYXNlIElEX0lGUkFNRTogeworICAgIGVsc2UgaWYgKGVsZW1lbnQu
aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6ZnJhbWUoKSkgfHwgZWxlbWVudC5oYXNMb2NhbE5hbWUo
SFRNTE5hbWVzOjppZnJhbWUoKSkpIHsKICAgICAgICAgRG9jdW1lbnRJbXBsKiBkb2MgPSBzdGF0
aWNfY2FzdDxIVE1MRnJhbWVFbGVtZW50SW1wbCAmPihlbGVtZW50KS5jb250ZW50RG9jdW1lbnQo
KTsKLSAgICAgICAgaWYgKCBkb2MgKSB7CisgICAgICAgIGlmIChkb2MpIHsKICAgICAgICAgICAg
IEtIVE1MUGFydCogcGFydCA9IGRvYy0+cGFydCgpOwotICAgICAgICAgICAgaWYgKCBwYXJ0ICkg
eworICAgICAgICAgICAgaWYgKHBhcnQpIHsKICAgICAgICAgICAgICAgV2luZG93ICp3aW5kb3cg
PSBXaW5kb3c6OnJldHJpZXZlV2luZG93KHBhcnQpOwogCSAgICAgIGlmICh3aW5kb3cgJiYgd2lu
ZG93LT5oYXNQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUpKQogICAgICAgICAgICAgICAgIHJl
dHVybiB3aW5kb3ctPmdldChleGVjLCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAgICAgfQotICAgICAgYnJlYWs7CiAjaWYgQVBQTEVfQ0hBTkdFUwotICAgIGNhc2Ug
SURfRU1CRUQ6Ci0gICAgY2FzZSBJRF9PQkpFQ1Q6Ci0gICAgY2FzZSBJRF9BUFBMRVQ6IHsKLQlp
ZiAocHJvcGVydHlOYW1lID09ICJfX2FwcGxlX3J1bnRpbWVfb2JqZWN0IikgeworICAgIGVsc2Ug
aWYgKGVsZW1lbnQuaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6ZW1iZWQoKSkgfHwgZWxlbWVudC5o
YXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvYmplY3QoKSkgfHwKKyAgICAgICAgICAgICBlbGVtZW50
Lmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmFwcGxldCgpKSkgeworCWlmIChwcm9wZXJ0eU5hbWUg
PT0gIl9fYXBwbGVfcnVudGltZV9vYmplY3QiKQogCSAgICByZXR1cm4gZ2V0UnVudGltZU9iamVj
dChleGVjLCZlbGVtZW50KTsKLQl9Ci0KIAlWYWx1ZSBydW50aW1lT2JqZWN0ID0gZ2V0UnVudGlt
ZU9iamVjdChleGVjLCZlbGVtZW50KTsKIAlpZiAoIXJ1bnRpbWVPYmplY3QuaXNOdWxsKCkpIHsK
IAkgICAgT2JqZWN0SW1wICppbXAgPSBzdGF0aWNfY2FzdDxPYmplY3RJbXAgKj4ocnVudGltZU9i
amVjdC5pbXAoKSk7Ci0JICAgIGlmIChpbXAtPmhhc1Byb3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFt
ZSkpIHsKKwkgICAgaWYgKGltcC0+aGFzUHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lKSkKIAkJ
cmV0dXJuIGltcC0+Z2V0IChleGVjLCBwcm9wZXJ0eU5hbWUpOwotCSAgICB9CiAJfQogICAgIH0K
LSAgICAgIGJyZWFrOwogI2VuZGlmCi0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQogCi0gIGNvbnN0IEhhc2hUYWJsZSogdGFibGUgPSBjbGFzc0luZm8oKS0+cHJvcEhhc2hUYWJs
ZTsgLy8gZ2V0IHRoZSByaWdodCBoYXNodGFibGUKLSAgY29uc3QgSGFzaEVudHJ5KiBlbnRyeSA9
IExvb2t1cDo6ZmluZEVudHJ5KHRhYmxlLCBwcm9wZXJ0eU5hbWUpOwotICBpZiAoZW50cnkpIHsK
LSAgICBpZiAoZW50cnktPmF0dHIgJiBGdW5jdGlvbikKLSAgICAgIHJldHVybiBsb29rdXBPckNy
ZWF0ZUZ1bmN0aW9uPEtKUzo6SFRNTEVsZW1lbnRGdW5jdGlvbj4oZXhlYywgcHJvcGVydHlOYW1l
LCB0aGlzLCBlbnRyeS0+dmFsdWUsIGVudHJ5LT5wYXJhbXMsIGVudHJ5LT5hdHRyKTsKLSAgICBy
ZXR1cm4gZ2V0VmFsdWVQcm9wZXJ0eShleGVjLCBlbnRyeS0+dmFsdWUpOwotICB9CisgICAgY29u
c3QgSGFzaFRhYmxlKiB0YWJsZSA9IGNsYXNzSW5mbygpLT5wcm9wSGFzaFRhYmxlOyAvLyBnZXQg
dGhlIHJpZ2h0IGhhc2h0YWJsZQorICAgIGNvbnN0IEhhc2hFbnRyeSogZW50cnkgPSBMb29rdXA6
OmZpbmRFbnRyeSh0YWJsZSwgcHJvcGVydHlOYW1lKTsKKyAgICBpZiAoZW50cnkpIHsKKyAgICAg
ICAgaWYgKGVudHJ5LT5hdHRyICYgRnVuY3Rpb24pCisgICAgICAgICAgICByZXR1cm4gbG9va3Vw
T3JDcmVhdGVGdW5jdGlvbjxLSlM6OkhUTUxFbGVtZW50RnVuY3Rpb24+KGV4ZWMsIHByb3BlcnR5
TmFtZSwgdGhpcywgZW50cnktPnZhbHVlLCBlbnRyeS0+cGFyYW1zLCBlbnRyeS0+YXR0cik7Cisg
ICAgICAgIHJldHVybiBnZXRWYWx1ZVByb3BlcnR5KGV4ZWMsIGVudHJ5LT52YWx1ZSk7CisgICAg
fQogCi0gIC8vIEJhc2UgSFRNTEVsZW1lbnQgc3R1ZmYgb3IgcGFyZW50IGNsYXNzIGZvcndhcmQs
IGFzIHVzdWFsCi0gIHJldHVybiBET01PYmplY3RMb29rdXBHZXQ8S0pTOjpIVE1MRWxlbWVudEZ1
bmN0aW9uLCBLSlM6OkhUTUxFbGVtZW50LCBET01FbGVtZW50PihleGVjLCBwcm9wZXJ0eU5hbWUs
ICZIVE1MRWxlbWVudFRhYmxlLCB0aGlzKTsKKyAgICAvLyBCYXNlIEhUTUxFbGVtZW50IHN0dWZm
IG9yIHBhcmVudCBjbGFzcyBmb3J3YXJkLCBhcyB1c3VhbAorICAgIHJldHVybiBET01PYmplY3RM
b29rdXBHZXQ8S0pTOjpIVE1MRWxlbWVudEZ1bmN0aW9uLCBLSlM6OkhUTUxFbGVtZW50LCBET01F
bGVtZW50PihleGVjLCBwcm9wZXJ0eU5hbWUsICZIVE1MRWxlbWVudFRhYmxlLCB0aGlzKTsKIH0K
IAogYm9vbCBLSlM6OkhUTUxFbGVtZW50OjppbXBsZW1lbnRzQ2FsbCgpIGNvbnN0CiB7CiAgICAg
SFRNTEVsZW1lbnRJbXBsICplbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+
KGltcGwoKSk7Ci0gICAgc3dpdGNoIChlbGVtZW50LT5pZCgpKSB7Ci0JY2FzZSBJRF9FTUJFRDoK
LQljYXNlIElEX09CSkVDVDoKLQljYXNlIElEX0FQUExFVDogewotCQlEb2N1bWVudEltcGwqIGRv
YyA9IGVsZW1lbnQtPmdldERvY3VtZW50KCk7Ci0JCUtKU1Byb3h5ICpwcm94eSA9IEtKU1Byb3h5
Ojpwcm94eShkb2MtPnBhcnQoKSk7Ci0JCUV4ZWNTdGF0ZSAqZXhlYyA9IHByb3h5LT5pbnRlcnBy
ZXRlcigpLT5nbG9iYWxFeGVjKCk7Ci0JCVZhbHVlIHJ1bnRpbWVPYmplY3QgPSBnZXRSdW50aW1l
T2JqZWN0KGV4ZWMsZWxlbWVudCk7Ci0JCWlmICghcnVudGltZU9iamVjdC5pc051bGwoKSkgewot
CQkgICAgT2JqZWN0SW1wICppbXAgPSBzdGF0aWNfY2FzdDxPYmplY3RJbXAgKj4ocnVudGltZU9i
amVjdC5pbXAoKSk7Ci0JCSAgICByZXR1cm4gaW1wLT5pbXBsZW1lbnRzQ2FsbCAoKTsKLQkJfQot
CSAgICB9Ci0JICAgIGJyZWFrOwotCWRlZmF1bHQ6Ci0JICAgIGJyZWFrOworICAgIGlmIChlbGVt
ZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZW1iZWQoKSkgfHwKKyAgICAgICAgZWxlbWVudC0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9iamVjdCgpKSB8fAorICAgICAgICBlbGVtZW50LT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6YXBwbGV0KCkpKSB7CisgICAJRG9jdW1lbnRJbXBsKiBkb2MgPSBl
bGVtZW50LT5nZXREb2N1bWVudCgpOworICAgICAgICBLSlNQcm94eSAqcHJveHkgPSBLSlNQcm94
eTo6cHJveHkoZG9jLT5wYXJ0KCkpOworICAgICAgICBFeGVjU3RhdGUgKmV4ZWMgPSBwcm94eS0+
aW50ZXJwcmV0ZXIoKS0+Z2xvYmFsRXhlYygpOworICAgICAgICBWYWx1ZSBydW50aW1lT2JqZWN0
ID0gZ2V0UnVudGltZU9iamVjdChleGVjLGVsZW1lbnQpOworICAgICAgICBpZiAoIXJ1bnRpbWVP
YmplY3QuaXNOdWxsKCkpIHsKKyAgICAgICAgICAgIE9iamVjdEltcCAqaW1wID0gc3RhdGljX2Nh
c3Q8T2JqZWN0SW1wICo+KHJ1bnRpbWVPYmplY3QuaW1wKCkpOworICAgICAgICAgICAgcmV0dXJu
IGltcC0+aW1wbGVtZW50c0NhbGwgKCk7CisgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIGZh
bHNlOwogfQpAQCAtMTMxMCw4MTkgKzEzNzUsOTA4IEBAIGJvb2wgS0pTOjpIVE1MRWxlbWVudDo6
aW1wbGVtZW50c0NhbGwoKSAKIFZhbHVlIEtKUzo6SFRNTEVsZW1lbnQ6OmNhbGwoRXhlY1N0YXRl
ICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QmYXJncykKIHsKICAgICBIVE1MRWxl
bWVudEltcGwgKmVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwgKj4oaW1wbCgp
KTsKLSAgICBzd2l0Y2ggKGVsZW1lbnQtPmlkKCkpIHsKLQljYXNlIElEX0VNQkVEOgotCWNhc2Ug
SURfT0JKRUNUOgotCWNhc2UgSURfQVBQTEVUOiB7Ci0JCVZhbHVlIHJ1bnRpbWVPYmplY3QgPSBn
ZXRSdW50aW1lT2JqZWN0KGV4ZWMsZWxlbWVudCk7Ci0JCWlmICghcnVudGltZU9iamVjdC5pc051
bGwoKSkgewotCQkgICAgT2JqZWN0SW1wICppbXAgPSBzdGF0aWNfY2FzdDxPYmplY3RJbXAgKj4o
cnVudGltZU9iamVjdC5pbXAoKSk7Ci0JCSAgICByZXR1cm4gaW1wLT5jYWxsIChleGVjLCB0aGlz
T2JqLCBhcmdzKTsKLQkJfQotCSAgICB9Ci0JICAgIGJyZWFrOwotCWRlZmF1bHQ6Ci0JICAgIGJy
ZWFrOworICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZW1iZWQoKSkgfHwK
KyAgICAgICAgZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9iamVjdCgpKSB8fAorICAg
ICAgICBlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YXBwbGV0KCkpKSB7CisgICAgICAg
IFZhbHVlIHJ1bnRpbWVPYmplY3QgPSBnZXRSdW50aW1lT2JqZWN0KGV4ZWMsZWxlbWVudCk7Cisg
ICAgICAgIGlmICghcnVudGltZU9iamVjdC5pc051bGwoKSkgeworICAgICAgICAgICAgT2JqZWN0
SW1wICppbXAgPSBzdGF0aWNfY2FzdDxPYmplY3RJbXAgKj4ocnVudGltZU9iamVjdC5pbXAoKSk7
CisgICAgICAgICAgICByZXR1cm4gaW1wLT5jYWxsIChleGVjLCB0aGlzT2JqLCBhcmdzKTsKKyAg
ICAgICAgfQogICAgIH0KICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBWYWx1
ZSBnZXRJbnB1dFNlbGVjdGlvblN0YXJ0KEhUTUxJbnB1dEVsZW1lbnRJbXBsICZpbnB1dCkKK1Zh
bHVlIEhUTUxFbGVtZW50OjpodG1sR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBj
b25zdAogewotICBpZiAoaW5wdXQuY2FuSGF2ZVNlbGVjdGlvbigpKSB7Ci0gICAgcmV0dXJuIE51
bWJlcihpbnB1dC5zZWxlY3Rpb25TdGFydCgpKTsKLSAgfQotICByZXR1cm4gVW5kZWZpbmVkKCk7
CisgICAgSFRNTEh0bWxFbGVtZW50SW1wbCYgaHRtbCA9ICpzdGF0aWNfY2FzdDxIVE1MSHRtbEVs
ZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBpZiAodG9rZW4gPT0gSHRtbFZlcnNpb24pCisgICAg
ICAgIHJldHVybiBTdHJpbmcoaHRtbC52ZXJzaW9uKCkpOworICAgIHJldHVybiBVbmRlZmluZWQo
KTsKIH0KIAotc3RhdGljIFZhbHVlIGdldElucHV0U2VsZWN0aW9uRW5kKEhUTUxJbnB1dEVsZW1l
bnRJbXBsICZpbnB1dCkKK1ZhbHVlIEhUTUxFbGVtZW50OjpoZWFkR2V0dGVyKEV4ZWNTdGF0ZSog
ZXhlYywgaW50IHRva2VuKSBjb25zdAogewotICBpZiAoaW5wdXQuY2FuSGF2ZVNlbGVjdGlvbigp
KSB7Ci0gICAgcmV0dXJuIE51bWJlcihpbnB1dC5zZWxlY3Rpb25FbmQoKSk7Ci0gIH0KLSAgcmV0
dXJuIFVuZGVmaW5lZCgpOworICAgIEhUTUxIZWFkRWxlbWVudEltcGwgJmhlYWQgPSAqc3RhdGlj
X2Nhc3Q8SFRNTEhlYWRFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IEhl
YWRQcm9maWxlKQorICAgICAgICByZXR1cm4gU3RyaW5nKGhlYWQucHJvZmlsZSgpKTsKKyAgICBy
ZXR1cm4gVW5kZWZpbmVkKCk7CiB9CiAKLVZhbHVlIEtKUzo6SFRNTEVsZW1lbnQ6OmdldFZhbHVl
UHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0CitWYWx1ZSBIVE1MRWxl
bWVudDo6bGlua0dldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKLSAg
SFRNTEVsZW1lbnRJbXBsICZlbGVtZW50ID0gKnN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCAq
PihpbXBsKCkpOwotICBzd2l0Y2ggKGVsZW1lbnQuaWQoKSkgewotICBjYXNlIElEX0hUTUw6IHsK
LSAgICBIVE1MSHRtbEVsZW1lbnRJbXBsICZodG1sID0gc3RhdGljX2Nhc3Q8SFRNTEh0bWxFbGVt
ZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICBpZiAgICAgICh0b2tlbiA9PSBIdG1sVmVyc2lvbikg
ICAgICAgICByZXR1cm4gU3RyaW5nKGh0bWwudmVyc2lvbigpKTsKLSAgfQotICBicmVhazsKLSAg
Y2FzZSBJRF9IRUFEOiB7Ci0gICAgSFRNTEhlYWRFbGVtZW50SW1wbCAmaGVhZCA9IHN0YXRpY19j
YXN0PEhUTUxIZWFkRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgaWYgICAgICAodG9rZW4g
PT0gSGVhZFByb2ZpbGUpICAgICAgICAgcmV0dXJuIFN0cmluZyhoZWFkLnByb2ZpbGUoKSk7Ci0g
IH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfTElOSzogewotICAgIEhUTUxMaW5rRWxlbWVudEltcGwg
JmxpbmsgPSBzdGF0aWNfY2FzdDxIVE1MTGlua0VsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAg
IHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIExpbmtEaXNhYmxlZDogICAgICAgIHJldHVybiBC
b29sZWFuKGxpbmsuZGlzYWJsZWQoKSk7Ci0gICAgY2FzZSBMaW5rQ2hhcnNldDogICAgICAgICBy
ZXR1cm4gU3RyaW5nKGxpbmsuY2hhcnNldCgpKTsKLSAgICBjYXNlIExpbmtIcmVmOiAgICAgICAg
ICAgIHJldHVybiBTdHJpbmcobGluay5ocmVmKCkpOwotICAgIGNhc2UgTGlua0hyZWZMYW5nOiAg
ICAgICAgcmV0dXJuIFN0cmluZyhsaW5rLmhyZWZsYW5nKCkpOwotICAgIGNhc2UgTGlua01lZGlh
OiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhsaW5rLm1lZGlhKCkpOwotICAgIGNhc2UgTGlua1Jl
bDogICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhsaW5rLnJlbCgpKTsKLSAgICBjYXNlIExpbmtS
ZXY6ICAgICAgICAgICAgIHJldHVybiBTdHJpbmcobGluay5yZXYoKSk7Ci0gICAgY2FzZSBMaW5r
VGFyZ2V0OiAgICAgICAgICByZXR1cm4gU3RyaW5nKGxpbmsudGFyZ2V0KCkpOwotICAgIGNhc2Ug
TGlua1R5cGU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhsaW5rLnR5cGUoKSk7Ci0gICAgY2Fz
ZSBMaW5rU2hlZXQ6ICAgICAgICAgICByZXR1cm4gZ2V0RE9NU3R5bGVTaGVldChleGVjLCBsaW5r
LnNoZWV0KCkpOwotICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9USVRMRTogewotICAg
IEhUTUxUaXRsZUVsZW1lbnRJbXBsICZ0aXRsZSA9IHN0YXRpY19jYXN0PEhUTUxUaXRsZUVsZW1l
bnRJbXBsICY+KGVsZW1lbnQpOworICAgIEhUTUxMaW5rRWxlbWVudEltcGwgJmxpbmsgPSAqc3Rh
dGljX2Nhc3Q8SFRNTExpbmtFbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tl
bikgewotICAgIGNhc2UgVGl0bGVUZXh0OiAgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0
aXRsZS50ZXh0KCkpOwotICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9NRVRBOiB7Ci0g
ICAgSFRNTE1ldGFFbGVtZW50SW1wbCAmbWV0YSA9IHN0YXRpY19jYXN0PEhUTUxNZXRhRWxlbWVu
dEltcGwgJj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgTWV0YUNv
bnRlbnQ6ICAgICAgICAgcmV0dXJuIFN0cmluZyhtZXRhLmNvbnRlbnQoKSk7Ci0gICAgY2FzZSBN
ZXRhSHR0cEVxdWl2OiAgICAgICByZXR1cm4gU3RyaW5nKG1ldGEuaHR0cEVxdWl2KCkpOwotICAg
IGNhc2UgTWV0YU5hbWU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhtZXRhLm5hbWUoKSk7Ci0g
ICAgY2FzZSBNZXRhU2NoZW1lOiAgICAgICAgICByZXR1cm4gU3RyaW5nKG1ldGEuc2NoZW1lKCkp
OworICAgICAgICBjYXNlIExpbmtEaXNhYmxlZDoKKyAgICAgICAgICAgIHJldHVybiBCb29sZWFu
KGxpbmsuZGlzYWJsZWQoKSk7CisgICAgICAgIGNhc2UgTGlua0NoYXJzZXQ6CisgICAgICAgICAg
ICByZXR1cm4gU3RyaW5nKGxpbmsuY2hhcnNldCgpKTsKKyAgICAgICAgY2FzZSBMaW5rSHJlZjoK
KyAgICAgICAgICAgIHJldHVybiBTdHJpbmcobGluay5ocmVmKCkpOworICAgICAgICBjYXNlIExp
bmtIcmVmTGFuZzoKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcobGluay5ocmVmbGFuZygpKTsK
KyAgICAgICAgY2FzZSBMaW5rTWVkaWE6ICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiBT
dHJpbmcobGluay5tZWRpYSgpKTsKKyAgICAgICAgY2FzZSBMaW5rUmVsOiAgICAgICAgICAgICAK
KyAgICAgICAgICAgIHJldHVybiBTdHJpbmcobGluay5yZWwoKSk7CisgICAgICAgIGNhc2UgTGlu
a1JldjogICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcobGluay5yZXYoKSk7
CisgICAgICAgIGNhc2UgTGlua1RhcmdldDogICAgICAgICAgCisgICAgICAgICAgICByZXR1cm4g
U3RyaW5nKGxpbmsudGFyZ2V0KCkpOworICAgICAgICBjYXNlIExpbmtUeXBlOiAgICAgICAgICAg
IAorICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhsaW5rLnR5cGUoKSk7CisgICAgICAgIGNhc2Ug
TGlua1NoZWV0OiAgICAgICAgICAgCisgICAgICAgICAgICByZXR1cm4gZ2V0RE9NU3R5bGVTaGVl
dChleGVjLCBsaW5rLnNoZWV0KCkpOwogICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9C
QVNFOiB7Ci0gICAgSFRNTEJhc2VFbGVtZW50SW1wbCAmYmFzZSA9IHN0YXRpY19jYXN0PEhUTUxC
YXNlRWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQor
CitWYWx1ZSBIVE1MRWxlbWVudDo6dGl0bGVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0Cit7CisgICAgSFRNTFRpdGxlRWxlbWVudEltcGwmIHRpdGxlID0gKnN0YXRpY19j
YXN0PEhUTUxUaXRsZUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBpZiAodG9rZW4gPT0gVGl0
bGVUZXh0KQorICAgICAgICByZXR1cm4gU3RyaW5nKHRpdGxlLnRleHQoKSk7CisgICAgcmV0dXJu
IFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6bWV0YUdldHRlcihFeGVjU3Rh
dGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MTWV0YUVsZW1lbnRJbXBsJiBt
ZXRhID0gKnN0YXRpY19jYXN0PEhUTUxNZXRhRWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIHN3
aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIEJhc2VIcmVmOiAgICAgICAgICAgIHJldHVybiBTdHJp
bmcoYmFzZS5ocmVmKCkpOwotICAgIGNhc2UgQmFzZVRhcmdldDogICAgICAgICAgcmV0dXJuIFN0
cmluZyhiYXNlLnRhcmdldCgpKTsKKyAgICAgICAgY2FzZSBNZXRhQ29udGVudDogICAgICAgICBy
ZXR1cm4gU3RyaW5nKG1ldGEuY29udGVudCgpKTsKKyAgICAgICAgY2FzZSBNZXRhSHR0cEVxdWl2
OiAgICAgICByZXR1cm4gU3RyaW5nKG1ldGEuaHR0cEVxdWl2KCkpOworICAgICAgICBjYXNlIE1l
dGFOYW1lOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcobWV0YS5uYW1lKCkpOworICAgICAgICBj
YXNlIE1ldGFTY2hlbWU6ICAgICAgICAgIHJldHVybiBTdHJpbmcobWV0YS5zY2hlbWUoKSk7CiAg
ICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX0lTSU5ERVg6IHsKLSAgICBIVE1MSXNJbmRl
eEVsZW1lbnRJbXBsICZpc2luZGV4ID0gc3RhdGljX2Nhc3Q8SFRNTElzSW5kZXhFbGVtZW50SW1w
bCAmPihlbGVtZW50KTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxF
bGVtZW50OjpiYXNlR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAorewor
ICAgIEhUTUxCYXNlRWxlbWVudEltcGwmIGJhc2UgPSAqc3RhdGljX2Nhc3Q8SFRNTEJhc2VFbGVt
ZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgSXNJbmRl
eEZvcm06ICAgICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYywgaXNpbmRleC5mb3JtKCkp
OyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVudAotICAgIGNhc2UgSXNJbmRleFByb21wdDogICAgICAg
ICAgcmV0dXJuIFN0cmluZyhpc2luZGV4LnByb21wdCgpKTsKLSAgICB9Ci0gIH0KLSAgYnJlYWs7
Ci0gIGNhc2UgSURfU1RZTEU6IHsKLSAgICBIVE1MU3R5bGVFbGVtZW50SW1wbCAmc3R5bGUgPSBz
dGF0aWNfY2FzdDxIVE1MU3R5bGVFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICBzd2l0Y2gg
KHRva2VuKSB7Ci0gICAgY2FzZSBTdHlsZURpc2FibGVkOiAgICAgICAgcmV0dXJuIEJvb2xlYW4o
c3R5bGUuZGlzYWJsZWQoKSk7Ci0gICAgY2FzZSBTdHlsZU1lZGlhOiAgICAgICAgICAgcmV0dXJu
IFN0cmluZyhzdHlsZS5tZWRpYSgpKTsKLSAgICBjYXNlIFN0eWxlVHlwZTogICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKHN0eWxlLnR5cGUoKSk7Ci0gICAgY2FzZSBTdHlsZVNoZWV0OiAgICAgICAg
ICAgcmV0dXJuIGdldERPTVN0eWxlU2hlZXQoZXhlYywgc3R5bGUuc2hlZXQoKSk7Ci0gICAgfQot
ICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX0JPRFk6IHsKLSAgICBIVE1MQm9keUVsZW1lbnRJbXBs
ICZib2R5ID0gc3RhdGljX2Nhc3Q8SFRNTEJvZHlFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAg
ICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBCb2R5QUxpbms6ICAgICAgICAgICByZXR1cm4g
U3RyaW5nKGJvZHkuYUxpbmsoKSk7Ci0gICAgY2FzZSBCb2R5QmFja2dyb3VuZDogICAgICByZXR1
cm4gU3RyaW5nKGJvZHkuYmFja2dyb3VuZCgpKTsKLSAgICBjYXNlIEJvZHlCZ0NvbG9yOiAgICAg
ICAgIHJldHVybiBTdHJpbmcoYm9keS5iZ0NvbG9yKCkpOwotICAgIGNhc2UgQm9keUxpbms6ICAg
ICAgICAgICAgcmV0dXJuIFN0cmluZyhib2R5LmxpbmsoKSk7Ci0gICAgY2FzZSBCb2R5VGV4dDog
ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGJvZHkudGV4dCgpKTsKLSAgICBjYXNlIEJvZHlWTGlu
azogICAgICAgICAgIHJldHVybiBTdHJpbmcoYm9keS52TGluaygpKTsKLSAgICBkZWZhdWx0Ogot
ICAgICAgLy8gVXBkYXRlIHRoZSBkb2N1bWVudCdzIGxheW91dCBiZWZvcmUgd2UgY29tcHV0ZSB0
aGVzZSBhdHRyaWJ1dGVzLgotICAgICAgRG9jdW1lbnRJbXBsICpkb2MgPSBib2R5LmdldERvY3Vt
ZW50KCk7Ci0gICAgICBpZiAoZG9jKQotICAgICAgICBkb2MtPnVwZGF0ZUxheW91dElnbm9yZVBl
bmRpbmdTdHlsZXNoZWV0cygpOwotICAgICAgS0hUTUxWaWV3ICp2aWV3ID0gZG9jID8gZG9jLT52
aWV3KCkgOiAwOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgICBjYXNlIEJvZHlTY3Jv
bGxMZWZ0OgotICAgICAgICAgICAgcmV0dXJuIE51bWJlcih2aWV3ID8gdmlldy0+Y29udGVudHNY
KCkgOiAwKTsKLSAgICAgICAgY2FzZSBCb2R5U2Nyb2xsVG9wOgotICAgICAgICAgICAgcmV0dXJu
IE51bWJlcih2aWV3ID8gdmlldy0+Y29udGVudHNZKCkgOiAwKTsKLSAgICAgICAgY2FzZSBCb2R5
U2Nyb2xsSGVpZ2h0OiAgIHJldHVybiBOdW1iZXIodmlldyA/IHZpZXctPmNvbnRlbnRzSGVpZ2h0
KCkgOiAwKTsKLSAgICAgICAgY2FzZSBCb2R5U2Nyb2xsV2lkdGg6ICAgIHJldHVybiBOdW1iZXIo
dmlldyA/IHZpZXctPmNvbnRlbnRzV2lkdGgoKSA6IDApOwotICAgICAgfQorICAgICAgICBjYXNl
IEJhc2VIcmVmOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYmFzZS5ocmVmKCkpOworICAgICAg
ICBjYXNlIEJhc2VUYXJnZXQ6ICAgICAgICAgIHJldHVybiBTdHJpbmcoYmFzZS50YXJnZXQoKSk7
CiAgICAgfQotICB9Ci0gIGJyZWFrOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KIAotICBj
YXNlIElEX0ZPUk06IHsKLSAgICBIVE1MRm9ybUVsZW1lbnRJbXBsICZmb3JtID0gc3RhdGljX2Nh
c3Q8SFRNTEZvcm1FbGVtZW50SW1wbCAmPihlbGVtZW50KTsKK1ZhbHVlIEhUTUxFbGVtZW50Ojpp
c0luZGV4R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAgIEhU
TUxJc0luZGV4RWxlbWVudEltcGwmIGlzaW5kZXggPSAqc3RhdGljX2Nhc3Q8SFRNTElzSW5kZXhF
bGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgRm9y
bUVsZW1lbnRzOiAgICAgICAgcmV0dXJuIGdldEhUTUxDb2xsZWN0aW9uKGV4ZWMsIGZvcm0uZWxl
bWVudHMoKS5nZXQoKSk7Ci0gICAgY2FzZSBGb3JtTGVuZ3RoOiAgICAgICAgICByZXR1cm4gTnVt
YmVyKGZvcm0ubGVuZ3RoKCkpOwotICAgIGNhc2UgRm9ybU5hbWU6ICAgICAgICAgICAgcmV0dXJu
IFN0cmluZyhmb3JtLm5hbWUoKSk7Ci0gICAgY2FzZSBGb3JtQWNjZXB0Q2hhcnNldDogICByZXR1
cm4gU3RyaW5nKGZvcm0uYWNjZXB0Q2hhcnNldCgpKTsKLSAgICBjYXNlIEZvcm1BY3Rpb246ICAg
ICAgICAgIHJldHVybiBTdHJpbmcoZm9ybS5hY3Rpb24oKSk7Ci0gICAgY2FzZSBGb3JtRW5jVHlw
ZTogICAgICAgICByZXR1cm4gU3RyaW5nKGZvcm0uZW5jdHlwZSgpKTsKLSAgICBjYXNlIEZvcm1N
ZXRob2Q6ICAgICAgICAgIHJldHVybiBTdHJpbmcoZm9ybS5tZXRob2QoKSk7Ci0gICAgY2FzZSBG
b3JtVGFyZ2V0OiAgICAgICAgICByZXR1cm4gU3RyaW5nKGZvcm0udGFyZ2V0KCkpOwotICAgIH0K
LSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9TRUxFQ1Q6IHsKLSAgICBIVE1MU2VsZWN0RWxlbWVu
dEltcGwgJnNlbGVjdCA9IHN0YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50SW1wbCAmPihlbGVt
ZW50KTsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBTZWxlY3RUeXBlOiAgICAgICAg
ICAgIHJldHVybiBTdHJpbmcoc2VsZWN0LnR5cGUoKSk7Ci0gICAgY2FzZSBTZWxlY3RTZWxlY3Rl
ZEluZGV4OiAgIHJldHVybiBOdW1iZXIoc2VsZWN0LnNlbGVjdGVkSW5kZXgoKSk7Ci0gICAgY2Fz
ZSBTZWxlY3RWYWx1ZTogICAgICAgICAgIHJldHVybiBTdHJpbmcoc2VsZWN0LnZhbHVlKCkpOwot
ICAgIGNhc2UgU2VsZWN0TGVuZ3RoOiAgICAgICAgICByZXR1cm4gTnVtYmVyKHNlbGVjdC5sZW5n
dGgoKSk7Ci0gICAgY2FzZSBTZWxlY3RGb3JtOiAgICAgICAgICAgIHJldHVybiBnZXRET01Ob2Rl
KGV4ZWMsIHNlbGVjdC5mb3JtKCkpOyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVudAotICAgIGNhc2Ug
U2VsZWN0T3B0aW9uczogICAgICAgICByZXR1cm4gZ2V0U2VsZWN0SFRNTENvbGxlY3Rpb24oZXhl
Yywgc2VsZWN0Lm9wdGlvbnNIVE1MQ29sbGVjdGlvbigpLmdldCgpLCAmc2VsZWN0KTsgLy8gdHlw
ZSBIVE1MQ29sbGVjdGlvbgotICAgIGNhc2UgU2VsZWN0RGlzYWJsZWQ6ICAgICAgICByZXR1cm4g
Qm9vbGVhbihzZWxlY3QuZGlzYWJsZWQoKSk7Ci0gICAgY2FzZSBTZWxlY3RNdWx0aXBsZTogICAg
ICAgIHJldHVybiBCb29sZWFuKHNlbGVjdC5tdWx0aXBsZSgpKTsKLSAgICBjYXNlIFNlbGVjdE5h
bWU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhzZWxlY3QubmFtZSgpKTsKLSAgICBjYXNlIFNl
bGVjdFNpemU6ICAgICAgICAgICAgcmV0dXJuIE51bWJlcihzZWxlY3Quc2l6ZSgpKTsKLSAgICBj
YXNlIFNlbGVjdFRhYkluZGV4OiAgICAgICAgcmV0dXJuIE51bWJlcihzZWxlY3QudGFiSW5kZXgo
KSk7CisgICAgICAgIGNhc2UgSXNJbmRleEZvcm06ICAgICAgICAgICAgcmV0dXJuIGdldERPTU5v
ZGUoZXhlYywgaXNpbmRleC5mb3JtKCkpOyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVudAorICAgICAg
ICBjYXNlIElzSW5kZXhQcm9tcHQ6ICAgICAgICAgIHJldHVybiBTdHJpbmcoaXNpbmRleC5wcm9t
cHQoKSk7CiAgICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX09QVEdST1VQOiB7Ci0gICAg
SFRNTE9wdEdyb3VwRWxlbWVudEltcGwgJm9wdGdyb3VwID0gc3RhdGljX2Nhc3Q8SFRNTE9wdEdy
b3VwRWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQor
CitWYWx1ZSBIVE1MRWxlbWVudDo6c3R5bGVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0Cit7CisgICAgSFRNTFN0eWxlRWxlbWVudEltcGwmIHN0eWxlID0gKnN0YXRpY19j
YXN0PEhUTUxTdHlsZUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7
Ci0gICAgY2FzZSBPcHRHcm91cERpc2FibGVkOiAgICAgICAgcmV0dXJuIEJvb2xlYW4ob3B0Z3Jv
dXAuZGlzYWJsZWQoKSk7Ci0gICAgY2FzZSBPcHRHcm91cExhYmVsOiAgICAgICAgICAgcmV0dXJu
IFN0cmluZyhvcHRncm91cC5sYWJlbCgpKTsKLSAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2Ug
SURfT1BUSU9OOiB7Ci0gICAgSFRNTE9wdGlvbkVsZW1lbnRJbXBsICZvcHRpb24gPSBzdGF0aWNf
Y2FzdDxIVE1MT3B0aW9uRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tl
bikgewotICAgIGNhc2UgT3B0aW9uRm9ybTogICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShl
eGVjLG9wdGlvbi5mb3JtKCkpOyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVudAotICAgIGNhc2UgT3B0
aW9uRGVmYXVsdFNlbGVjdGVkOiByZXR1cm4gQm9vbGVhbihvcHRpb24uZGVmYXVsdFNlbGVjdGVk
KCkpOwotICAgIGNhc2UgT3B0aW9uVGV4dDogICAgICAgICAgICByZXR1cm4gU3RyaW5nKG9wdGlv
bi50ZXh0KCkpOwotICAgIGNhc2UgT3B0aW9uSW5kZXg6ICAgICAgICAgICByZXR1cm4gTnVtYmVy
KG9wdGlvbi5pbmRleCgpKTsKLSAgICBjYXNlIE9wdGlvbkRpc2FibGVkOiAgICAgICAgcmV0dXJu
IEJvb2xlYW4ob3B0aW9uLmRpc2FibGVkKCkpOwotICAgIGNhc2UgT3B0aW9uTGFiZWw6ICAgICAg
ICAgICByZXR1cm4gU3RyaW5nKG9wdGlvbi5sYWJlbCgpKTsKLSAgICBjYXNlIE9wdGlvblNlbGVj
dGVkOiAgICAgICAgcmV0dXJuIEJvb2xlYW4ob3B0aW9uLnNlbGVjdGVkKCkpOwotICAgIGNhc2Ug
T3B0aW9uVmFsdWU6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKG9wdGlvbi52YWx1ZSgpKTsKLSAg
ICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfSU5QVVQ6IHsKLSAgICBIVE1MSW5wdXRFbGVt
ZW50SW1wbCAmaW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50SW1wbCAmPihlbGVt
ZW50KTsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBJbnB1dERlZmF1bHRWYWx1ZTog
ICAgcmV0dXJuIFN0cmluZyhpbnB1dC5kZWZhdWx0VmFsdWUoKSk7Ci0gICAgY2FzZSBJbnB1dERl
ZmF1bHRDaGVja2VkOiAgcmV0dXJuIEJvb2xlYW4oaW5wdXQuZGVmYXVsdENoZWNrZWQoKSk7Ci0g
ICAgY2FzZSBJbnB1dEZvcm06ICAgICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyxpbnB1
dC5mb3JtKCkpOyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVudAotICAgIGNhc2UgSW5wdXRBY2NlcHQ6
ICAgICAgICAgIHJldHVybiBTdHJpbmcoaW5wdXQuYWNjZXB0KCkpOwotICAgIGNhc2UgSW5wdXRB
Y2Nlc3NLZXk6ICAgICAgIHJldHVybiBTdHJpbmcoaW5wdXQuYWNjZXNzS2V5KCkpOwotICAgIGNh
c2UgSW5wdXRBbGlnbjogICAgICAgICAgIHJldHVybiBTdHJpbmcoaW5wdXQuYWxpZ24oKSk7Ci0g
ICAgY2FzZSBJbnB1dEFsdDogICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpbnB1dC5hbHQoKSk7
Ci0gICAgY2FzZSBJbnB1dENoZWNrZWQ6ICAgICAgICAgcmV0dXJuIEJvb2xlYW4oaW5wdXQuY2hl
Y2tlZCgpKTsKLSAgICBjYXNlIElucHV0RGlzYWJsZWQ6ICAgICAgICByZXR1cm4gQm9vbGVhbihp
bnB1dC5kaXNhYmxlZCgpKTsKLSAgICBjYXNlIElucHV0TWF4TGVuZ3RoOiAgICAgICByZXR1cm4g
TnVtYmVyKGlucHV0Lm1heExlbmd0aCgpKTsKLSAgICBjYXNlIElucHV0TmFtZTogICAgICAgICAg
ICByZXR1cm4gU3RyaW5nKGlucHV0Lm5hbWUoKSk7Ci0gICAgY2FzZSBJbnB1dFJlYWRPbmx5OiAg
ICAgICAgcmV0dXJuIEJvb2xlYW4oaW5wdXQucmVhZE9ubHkoKSk7Ci0gICAgY2FzZSBJbnB1dFNl
bGVjdGlvblN0YXJ0OiAgcmV0dXJuIGdldElucHV0U2VsZWN0aW9uU3RhcnQoaW5wdXQpOwotICAg
IGNhc2UgSW5wdXRTZWxlY3Rpb25FbmQ6ICAgIHJldHVybiBnZXRJbnB1dFNlbGVjdGlvbkVuZChp
bnB1dCk7Ci0gICAgY2FzZSBJbnB1dFNpemU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpbnB1
dC5zaXplRE9NKCkpOwotICAgIGNhc2UgSW5wdXRTcmM6ICAgICAgICAgICAgIHJldHVybiBTdHJp
bmcoaW5wdXQuc3JjKCkpOwotICAgIGNhc2UgSW5wdXRUYWJJbmRleDogICAgICAgIHJldHVybiBO
dW1iZXIoaW5wdXQudGFiSW5kZXgoKSk7Ci0gICAgY2FzZSBJbnB1dFR5cGU6ICAgICAgICAgICAg
cmV0dXJuIFN0cmluZyhpbnB1dC50eXBlKCkpOwotICAgIGNhc2UgSW5wdXRVc2VNYXA6ICAgICAg
ICAgIHJldHVybiBTdHJpbmcoaW5wdXQudXNlTWFwKCkpOwotICAgIGNhc2UgSW5wdXRWYWx1ZTog
ICAgICAgICAgIHJldHVybiBTdHJpbmcoaW5wdXQudmFsdWUoKSk7CisgICAgICAgIGNhc2UgU3R5
bGVEaXNhYmxlZDogICAgICAgIHJldHVybiBCb29sZWFuKHN0eWxlLmRpc2FibGVkKCkpOworICAg
ICAgICBjYXNlIFN0eWxlTWVkaWE6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHN0eWxlLm1lZGlh
KCkpOworICAgICAgICBjYXNlIFN0eWxlVHlwZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKHN0
eWxlLnR5cGUoKSk7CisgICAgICAgIGNhc2UgU3R5bGVTaGVldDogICAgICAgICAgIHJldHVybiBn
ZXRET01TdHlsZVNoZWV0KGV4ZWMsIHN0eWxlLnNoZWV0KCkpOwogICAgIH0KLSAgfQotICBicmVh
azsKLSAgY2FzZSBJRF9URVhUQVJFQTogewotICAgIEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBsICZ0
ZXh0YXJlYSA9IHN0YXRpY19jYXN0PEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBsICY+KGVsZW1lbnQp
OwotICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIFRleHRBcmVhRGVmYXVsdFZhbHVlOiAg
ICByZXR1cm4gU3RyaW5nKHRleHRhcmVhLmRlZmF1bHRWYWx1ZSgpKTsKLSAgICBjYXNlIFRleHRB
cmVhRm9ybTogICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLHRleHRhcmVhLmZvcm0o
KSk7IC8vIHR5cGUgSFRNTEZvcm1FbGVtZW50Ci0gICAgY2FzZSBUZXh0QXJlYUFjY2Vzc0tleTog
ICAgICAgcmV0dXJuIFN0cmluZyh0ZXh0YXJlYS5hY2Nlc3NLZXkoKSk7Ci0gICAgY2FzZSBUZXh0
QXJlYUNvbHM6ICAgICAgICAgICAgcmV0dXJuIE51bWJlcih0ZXh0YXJlYS5jb2xzKCkpOwotICAg
IGNhc2UgVGV4dEFyZWFEaXNhYmxlZDogICAgICAgIHJldHVybiBCb29sZWFuKHRleHRhcmVhLmRp
c2FibGVkKCkpOwotICAgIGNhc2UgVGV4dEFyZWFOYW1lOiAgICAgICAgICAgIHJldHVybiBTdHJp
bmcodGV4dGFyZWEubmFtZSgpKTsKLSAgICBjYXNlIFRleHRBcmVhUmVhZE9ubHk6ICAgICAgICBy
ZXR1cm4gQm9vbGVhbih0ZXh0YXJlYS5yZWFkT25seSgpKTsKLSAgICBjYXNlIFRleHRBcmVhUm93
czogICAgICAgICAgICByZXR1cm4gTnVtYmVyKHRleHRhcmVhLnJvd3MoKSk7Ci0gICAgY2FzZSBU
ZXh0QXJlYVNlbGVjdGlvblN0YXJ0OiAgcmV0dXJuIE51bWJlcih0ZXh0YXJlYS5zZWxlY3Rpb25T
dGFydCgpKTsKLSAgICBjYXNlIFRleHRBcmVhU2VsZWN0aW9uRW5kOiAgICByZXR1cm4gTnVtYmVy
KHRleHRhcmVhLnNlbGVjdGlvbkVuZCgpKTsKLSAgICBjYXNlIFRleHRBcmVhVGFiSW5kZXg6ICAg
ICAgICByZXR1cm4gTnVtYmVyKHRleHRhcmVhLnRhYkluZGV4KCkpOwotICAgIGNhc2UgVGV4dEFy
ZWFUeXBlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcodGV4dGFyZWEudHlwZSgpKTsKLSAgICBj
YXNlIFRleHRBcmVhVmFsdWU6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRleHRhcmVhLnZhbHVl
KCkpOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OmJv
ZHlHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTEJv
ZHlFbGVtZW50SW1wbCYgYm9keSA9ICpzdGF0aWNfY2FzdDxIVE1MQm9keUVsZW1lbnRJbXBsKj4o
aW1wbCgpKTsKKwlzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgQm9keUFMaW5rOiAgICAg
ICAgICAgcmV0dXJuIFN0cmluZyhib2R5LmFMaW5rKCkpOworICAgICAgICBjYXNlIEJvZHlCYWNr
Z3JvdW5kOiAgICAgIHJldHVybiBTdHJpbmcoYm9keS5iYWNrZ3JvdW5kKCkpOworICAgICAgICBj
YXNlIEJvZHlCZ0NvbG9yOiAgICAgICAgIHJldHVybiBTdHJpbmcoYm9keS5iZ0NvbG9yKCkpOwor
ICAgICAgICBjYXNlIEJvZHlMaW5rOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYm9keS5saW5r
KCkpOworICAgICAgICBjYXNlIEJvZHlUZXh0OiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYm9k
eS50ZXh0KCkpOworICAgICAgICBjYXNlIEJvZHlWTGluazogICAgICAgICAgIHJldHVybiBTdHJp
bmcoYm9keS52TGluaygpKTsKKyAgICAgICAgZGVmYXVsdDogeworICAgICAgICAgICAgLy8gVXBk
YXRlIHRoZSBkb2N1bWVudCdzIGxheW91dCBiZWZvcmUgd2UgY29tcHV0ZSB0aGVzZSBhdHRyaWJ1
dGVzLgorICAgICAgICAgICAgRG9jdW1lbnRJbXBsICpkb2MgPSBib2R5LmdldERvY3VtZW50KCk7
CisgICAgICAgICAgICBpZiAoZG9jKQorICAgICAgICAgICAgICAgIGRvYy0+dXBkYXRlTGF5b3V0
SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CisgICAgICAgICAgICBLSFRNTFZpZXcgKnZpZXcg
PSBkb2MgPyBkb2MtPnZpZXcoKSA6IDA7CisgICAgICAgICAgICBzd2l0Y2ggKHRva2VuKSB7Cisg
ICAgICAgICAgICAgICAgY2FzZSBCb2R5U2Nyb2xsTGVmdDoKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIE51bWJlcih2aWV3ID8gdmlldy0+Y29udGVudHNYKCkgOiAwKTsKKyAgICAgICAgICAg
ICAgICBjYXNlIEJvZHlTY3JvbGxUb3A6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOdW1i
ZXIodmlldyA/IHZpZXctPmNvbnRlbnRzWSgpIDogMCk7CisgICAgICAgICAgICAgICAgY2FzZSBC
b2R5U2Nyb2xsSGVpZ2h0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTnVtYmVyKHZpZXcg
PyB2aWV3LT5jb250ZW50c0hlaWdodCgpIDogMCk7CisgICAgICAgICAgICAgICAgY2FzZSBCb2R5
U2Nyb2xsV2lkdGg6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOdW1iZXIodmlldyA/IHZp
ZXctPmNvbnRlbnRzV2lkdGgoKSA6IDApOworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAg
fQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX0JVVFRPTjogewotICAgIEhUTUxCdXR0b25FbGVt
ZW50SW1wbCAmYnV0dG9uID0gc3RhdGljX2Nhc3Q8SFRNTEJ1dHRvbkVsZW1lbnRJbXBsICY+KGVs
ZW1lbnQpOwotICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIEJ1dHRvbkZvcm06ICAgICAg
ICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyxidXR0b24uZm9ybSgpKTsgLy8gdHlwZSBIVE1M
Rm9ybUVsZW1lbnQKLSAgICBjYXNlIEJ1dHRvbkFjY2Vzc0tleTogICAgICAgcmV0dXJuIFN0cmlu
ZyhidXR0b24uYWNjZXNzS2V5KCkpOwotICAgIGNhc2UgQnV0dG9uRGlzYWJsZWQ6ICAgICAgICBy
ZXR1cm4gQm9vbGVhbihidXR0b24uZGlzYWJsZWQoKSk7Ci0gICAgY2FzZSBCdXR0b25OYW1lOiAg
ICAgICAgICAgIHJldHVybiBTdHJpbmcoYnV0dG9uLm5hbWUoKSk7Ci0gICAgY2FzZSBCdXR0b25U
YWJJbmRleDogICAgICAgIHJldHVybiBOdW1iZXIoYnV0dG9uLnRhYkluZGV4KCkpOwotICAgIGNh
c2UgQnV0dG9uVHlwZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGJ1dHRvbi50eXBlKCkpOwot
ICAgIGNhc2UgQnV0dG9uVmFsdWU6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGJ1dHRvbi52YWx1
ZSgpKTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50Ojpm
b3JtR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxG
b3JtRWxlbWVudEltcGwmIGZvcm0gPSAqc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50SW1wbCo+
KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNlIEZvcm1FbGVtZW50
czogICAgICAgIHJldHVybiBnZXRIVE1MQ29sbGVjdGlvbihleGVjLCBmb3JtLmVsZW1lbnRzKCku
Z2V0KCkpOworICAgICAgICBjYXNlIEZvcm1MZW5ndGg6ICAgICAgICAgIHJldHVybiBOdW1iZXIo
Zm9ybS5sZW5ndGgoKSk7CisgICAgICAgIGNhc2UgRm9ybU5hbWU6ICAgICAgICAgICAgcmV0dXJu
IFN0cmluZyhmb3JtLm5hbWUoKSk7CisgICAgICAgIGNhc2UgRm9ybUFjY2VwdENoYXJzZXQ6ICAg
cmV0dXJuIFN0cmluZyhmb3JtLmFjY2VwdENoYXJzZXQoKSk7CisgICAgICAgIGNhc2UgRm9ybUFj
dGlvbjogICAgICAgICAgcmV0dXJuIFN0cmluZyhmb3JtLmFjdGlvbigpKTsKKyAgICAgICAgY2Fz
ZSBGb3JtRW5jVHlwZTogICAgICAgICByZXR1cm4gU3RyaW5nKGZvcm0uZW5jdHlwZSgpKTsKKyAg
ICAgICAgY2FzZSBGb3JtTWV0aG9kOiAgICAgICAgICByZXR1cm4gU3RyaW5nKGZvcm0ubWV0aG9k
KCkpOworICAgICAgICBjYXNlIEZvcm1UYXJnZXQ6ICAgICAgICAgIHJldHVybiBTdHJpbmcoZm9y
bS50YXJnZXQoKSk7CiAgICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX0xBQkVMOiB7Ci0g
ICAgSFRNTExhYmVsRWxlbWVudEltcGwgJmxhYmVsID0gc3RhdGljX2Nhc3Q8SFRNTExhYmVsRWxl
bWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgTGFi
ZWxGb3JtOiAgICAgICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsbGFiZWwuZm9ybSgpKTsg
Ly8gdHlwZSBIVE1MRm9ybUVsZW1lbnQKLSAgICBjYXNlIExhYmVsQWNjZXNzS2V5OiAgICAgICBy
ZXR1cm4gU3RyaW5nKGxhYmVsLmFjY2Vzc0tleSgpKTsKLSAgICBjYXNlIExhYmVsSHRtbEZvcjog
ICAgICAgICByZXR1cm4gU3RyaW5nKGxhYmVsLmh0bWxGb3IoKSk7CisgICAgcmV0dXJuIFVuZGVm
aW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6c2VsZWN0R2V0dGVyKEV4ZWNTdGF0ZSog
ZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxTZWxlY3RFbGVtZW50SW1wbCYgc2Vs
ZWN0ID0gKnN0YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAg
c3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNlIFNlbGVjdFR5cGU6ICAgICAgICAgICAgcmV0
dXJuIFN0cmluZyhzZWxlY3QudHlwZSgpKTsKKyAgICAgICAgY2FzZSBTZWxlY3RTZWxlY3RlZElu
ZGV4OiAgIHJldHVybiBOdW1iZXIoc2VsZWN0LnNlbGVjdGVkSW5kZXgoKSk7CisgICAgICAgIGNh
c2UgU2VsZWN0VmFsdWU6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHNlbGVjdC52YWx1ZSgpKTsK
KyAgICAgICAgY2FzZSBTZWxlY3RMZW5ndGg6ICAgICAgICAgIHJldHVybiBOdW1iZXIoc2VsZWN0
Lmxlbmd0aCgpKTsKKyAgICAgICAgY2FzZSBTZWxlY3RGb3JtOiAgICAgICAgICAgIHJldHVybiBn
ZXRET01Ob2RlKGV4ZWMsIHNlbGVjdC5mb3JtKCkpOyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVudAor
ICAgICAgICBjYXNlIFNlbGVjdE9wdGlvbnM6ICAgICAgICAgcmV0dXJuIGdldFNlbGVjdEhUTUxD
b2xsZWN0aW9uKGV4ZWMsIHNlbGVjdC5vcHRpb25zSFRNTENvbGxlY3Rpb24oKS5nZXQoKSwgJnNl
bGVjdCk7IC8vIHR5cGUgSFRNTENvbGxlY3Rpb24KKyAgICAgICAgY2FzZSBTZWxlY3REaXNhYmxl
ZDogICAgICAgIHJldHVybiBCb29sZWFuKHNlbGVjdC5kaXNhYmxlZCgpKTsKKyAgICAgICAgY2Fz
ZSBTZWxlY3RNdWx0aXBsZTogICAgICAgIHJldHVybiBCb29sZWFuKHNlbGVjdC5tdWx0aXBsZSgp
KTsKKyAgICAgICAgY2FzZSBTZWxlY3ROYW1lOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoc2Vs
ZWN0Lm5hbWUoKSk7CisgICAgICAgIGNhc2UgU2VsZWN0U2l6ZTogICAgICAgICAgICByZXR1cm4g
TnVtYmVyKHNlbGVjdC5zaXplKCkpOworICAgICAgICBjYXNlIFNlbGVjdFRhYkluZGV4OiAgICAg
ICAgcmV0dXJuIE51bWJlcihzZWxlY3QudGFiSW5kZXgoKSk7CiAgICAgfQotICB9Ci0gIGJyZWFr
OwotICBjYXNlIElEX0ZJRUxEU0VUOiB7Ci0gICAgSFRNTEZpZWxkU2V0RWxlbWVudEltcGwgJmZp
ZWxkU2V0ID0gc3RhdGljX2Nhc3Q8SFRNTEZpZWxkU2V0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7
CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6b3B0R3Jv
dXBHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTE9w
dEdyb3VwRWxlbWVudEltcGwmIG9wdGdyb3VwID0gKnN0YXRpY19jYXN0PEhUTUxPcHRHcm91cEVs
ZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBGaWVs
ZFNldEZvcm06ICAgICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyxmaWVsZFNldC5mb3Jt
KCkpOyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVudAorICAgICAgICBjYXNlIE9wdEdyb3VwRGlzYWJs
ZWQ6ICAgICAgICByZXR1cm4gQm9vbGVhbihvcHRncm91cC5kaXNhYmxlZCgpKTsKKyAgICAgICAg
Y2FzZSBPcHRHcm91cExhYmVsOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhvcHRncm91cC5sYWJl
bCgpKTsKICAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfTEVHRU5EOiB7Ci0gICAgSFRN
TExlZ2VuZEVsZW1lbnRJbXBsICZsZWdlbmQgPSBzdGF0aWNfY2FzdDxIVE1MTGVnZW5kRWxlbWVu
dEltcGwgJj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgTGVnZW5k
Rm9ybTogICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLGxlZ2VuZC5mb3JtKCkpOyAv
LyB0eXBlIEhUTUxGb3JtRWxlbWVudAotICAgIGNhc2UgTGVnZW5kQWNjZXNzS2V5OiAgICAgICBy
ZXR1cm4gU3RyaW5nKGxlZ2VuZC5hY2Nlc3NLZXkoKSk7Ci0gICAgY2FzZSBMZWdlbmRBbGlnbjog
ICAgICAgICAgIHJldHVybiBTdHJpbmcobGVnZW5kLmFsaWduKCkpOworICAgIHJldHVybiBVbmRl
ZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6Om9wdGlvbkdldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MT3B0aW9uRWxlbWVudEltcGwmIG9w
dGlvbiA9ICpzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudEltcGwqPihpbXBsKCkpOworICAg
IHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBPcHRpb25Gb3JtOiAgICAgICAgICAgIHJl
dHVybiBnZXRET01Ob2RlKGV4ZWMsb3B0aW9uLmZvcm0oKSk7IC8vIHR5cGUgSFRNTEZvcm1FbGVt
ZW50CisgICAgICAgIGNhc2UgT3B0aW9uRGVmYXVsdFNlbGVjdGVkOiByZXR1cm4gQm9vbGVhbihv
cHRpb24uZGVmYXVsdFNlbGVjdGVkKCkpOworICAgICAgICBjYXNlIE9wdGlvblRleHQ6ICAgICAg
ICAgICAgcmV0dXJuIFN0cmluZyhvcHRpb24udGV4dCgpKTsKKyAgICAgICAgY2FzZSBPcHRpb25J
bmRleDogICAgICAgICAgIHJldHVybiBOdW1iZXIob3B0aW9uLmluZGV4KCkpOworICAgICAgICBj
YXNlIE9wdGlvbkRpc2FibGVkOiAgICAgICAgcmV0dXJuIEJvb2xlYW4ob3B0aW9uLmRpc2FibGVk
KCkpOworICAgICAgICBjYXNlIE9wdGlvbkxhYmVsOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhv
cHRpb24ubGFiZWwoKSk7CisgICAgICAgIGNhc2UgT3B0aW9uU2VsZWN0ZWQ6ICAgICAgICByZXR1
cm4gQm9vbGVhbihvcHRpb24uc2VsZWN0ZWQoKSk7CisgICAgICAgIGNhc2UgT3B0aW9uVmFsdWU6
ICAgICAgICAgICByZXR1cm4gU3RyaW5nKG9wdGlvbi52YWx1ZSgpKTsKICAgICB9Ci0gIH0KLSAg
YnJlYWs7Ci0gIGNhc2UgSURfVUw6IHsKLSAgICBIVE1MVUxpc3RFbGVtZW50SW1wbCAmdUxpc3Qg
PSBzdGF0aWNfY2FzdDxIVE1MVUxpc3RFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICByZXR1
cm4gVW5kZWZpbmVkKCk7Cit9CisKK3N0YXRpYyBWYWx1ZSBnZXRJbnB1dFNlbGVjdGlvblN0YXJ0
KEhUTUxJbnB1dEVsZW1lbnRJbXBsICZpbnB1dCkKK3sKKyAgICBpZiAoaW5wdXQuY2FuSGF2ZVNl
bGVjdGlvbigpKQorICAgICAgICByZXR1cm4gTnVtYmVyKGlucHV0LnNlbGVjdGlvblN0YXJ0KCkp
OworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworc3RhdGljIFZhbHVlIGdldElucHV0U2Vs
ZWN0aW9uRW5kKEhUTUxJbnB1dEVsZW1lbnRJbXBsICZpbnB1dCkKK3sKKyAgICBpZiAoaW5wdXQu
Y2FuSGF2ZVNlbGVjdGlvbigpKQorICAgICAgICByZXR1cm4gTnVtYmVyKGlucHV0LnNlbGVjdGlv
bkVuZCgpKTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50
OjppbnB1dEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBI
VE1MSW5wdXRFbGVtZW50SW1wbCYgaW5wdXQgPSAqc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVu
dEltcGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIFVMaXN0Q29t
cGFjdDogICAgICAgICByZXR1cm4gQm9vbGVhbih1TGlzdC5jb21wYWN0KCkpOwotICAgIGNhc2Ug
VUxpc3RUeXBlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcodUxpc3QudHlwZSgpKTsKKyAgICAg
ICAgY2FzZSBJbnB1dERlZmF1bHRWYWx1ZTogICAgcmV0dXJuIFN0cmluZyhpbnB1dC5kZWZhdWx0
VmFsdWUoKSk7CisgICAgICAgIGNhc2UgSW5wdXREZWZhdWx0Q2hlY2tlZDogIHJldHVybiBCb29s
ZWFuKGlucHV0LmRlZmF1bHRDaGVja2VkKCkpOworICAgICAgICBjYXNlIElucHV0Rm9ybTogICAg
ICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLGlucHV0LmZvcm0oKSk7IC8vIHR5cGUgSFRN
TEZvcm1FbGVtZW50CisgICAgICAgIGNhc2UgSW5wdXRBY2NlcHQ6ICAgICAgICAgIHJldHVybiBT
dHJpbmcoaW5wdXQuYWNjZXB0KCkpOworICAgICAgICBjYXNlIElucHV0QWNjZXNzS2V5OiAgICAg
ICByZXR1cm4gU3RyaW5nKGlucHV0LmFjY2Vzc0tleSgpKTsKKyAgICAgICAgY2FzZSBJbnB1dEFs
aWduOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpbnB1dC5hbGlnbigpKTsKKyAgICAgICAgY2Fz
ZSBJbnB1dEFsdDogICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpbnB1dC5hbHQoKSk7CisgICAg
ICAgIGNhc2UgSW5wdXRDaGVja2VkOiAgICAgICAgIHJldHVybiBCb29sZWFuKGlucHV0LmNoZWNr
ZWQoKSk7CisgICAgICAgIGNhc2UgSW5wdXREaXNhYmxlZDogICAgICAgIHJldHVybiBCb29sZWFu
KGlucHV0LmRpc2FibGVkKCkpOworICAgICAgICBjYXNlIElucHV0TWF4TGVuZ3RoOiAgICAgICBy
ZXR1cm4gTnVtYmVyKGlucHV0Lm1heExlbmd0aCgpKTsKKyAgICAgICAgY2FzZSBJbnB1dE5hbWU6
ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpbnB1dC5uYW1lKCkpOworICAgICAgICBjYXNlIElu
cHV0UmVhZE9ubHk6ICAgICAgICByZXR1cm4gQm9vbGVhbihpbnB1dC5yZWFkT25seSgpKTsKKyAg
ICAgICAgY2FzZSBJbnB1dFNlbGVjdGlvblN0YXJ0OiAgcmV0dXJuIGdldElucHV0U2VsZWN0aW9u
U3RhcnQoaW5wdXQpOworICAgICAgICBjYXNlIElucHV0U2VsZWN0aW9uRW5kOiAgICByZXR1cm4g
Z2V0SW5wdXRTZWxlY3Rpb25FbmQoaW5wdXQpOworICAgICAgICBjYXNlIElucHV0U2l6ZTogICAg
ICAgICAgICByZXR1cm4gU3RyaW5nKGlucHV0LnNpemVET00oKSk7CisgICAgICAgIGNhc2UgSW5w
dXRTcmM6ICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoaW5wdXQuc3JjKCkpOworICAgICAgICBj
YXNlIElucHV0VGFiSW5kZXg6ICAgICAgICByZXR1cm4gTnVtYmVyKGlucHV0LnRhYkluZGV4KCkp
OworICAgICAgICBjYXNlIElucHV0VHlwZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGlucHV0
LnR5cGUoKSk7CisgICAgICAgIGNhc2UgSW5wdXRVc2VNYXA6ICAgICAgICAgIHJldHVybiBTdHJp
bmcoaW5wdXQudXNlTWFwKCkpOworICAgICAgICBjYXNlIElucHV0VmFsdWU6ICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKGlucHV0LnZhbHVlKCkpOwogICAgIH0KLSAgfQotICBicmVhazsKLSAgY2Fz
ZSBJRF9PTDogewotICAgIEhUTUxPTGlzdEVsZW1lbnRJbXBsICZvTGlzdCA9IHN0YXRpY19jYXN0
PEhUTUxPTGlzdEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgIHN3aXRjaCAodG9rZW4pIHsK
LSAgICBjYXNlIE9MaXN0Q29tcGFjdDogICAgICAgICByZXR1cm4gQm9vbGVhbihvTGlzdC5jb21w
YWN0KCkpOwotICAgIGNhc2UgT0xpc3RTdGFydDogICAgICAgICAgIHJldHVybiBOdW1iZXIob0xp
c3Quc3RhcnQoKSk7Ci0gICAgY2FzZSBPTGlzdFR5cGU6ICAgICAgICAgICAgcmV0dXJuIFN0cmlu
ZyhvTGlzdC50eXBlKCkpOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRN
TEVsZW1lbnQ6OnRleHRBcmVhR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25z
dAoreworICAgIEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBsJiB0ZXh0YXJlYSA9ICpzdGF0aWNfY2Fz
dDxIVE1MVGV4dEFyZWFFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikg
eworICAgICAgICBjYXNlIFRleHRBcmVhRGVmYXVsdFZhbHVlOiAgICByZXR1cm4gU3RyaW5nKHRl
eHRhcmVhLmRlZmF1bHRWYWx1ZSgpKTsKKyAgICAgICAgY2FzZSBUZXh0QXJlYUZvcm06ICAgICAg
ICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyx0ZXh0YXJlYS5mb3JtKCkpOyAvLyB0eXBlIEhU
TUxGb3JtRWxlbWVudAorICAgICAgICBjYXNlIFRleHRBcmVhQWNjZXNzS2V5OiAgICAgICByZXR1
cm4gU3RyaW5nKHRleHRhcmVhLmFjY2Vzc0tleSgpKTsKKyAgICAgICAgY2FzZSBUZXh0QXJlYUNv
bHM6ICAgICAgICAgICAgcmV0dXJuIE51bWJlcih0ZXh0YXJlYS5jb2xzKCkpOworICAgICAgICBj
YXNlIFRleHRBcmVhRGlzYWJsZWQ6ICAgICAgICByZXR1cm4gQm9vbGVhbih0ZXh0YXJlYS5kaXNh
YmxlZCgpKTsKKyAgICAgICAgY2FzZSBUZXh0QXJlYU5hbWU6ICAgICAgICAgICAgcmV0dXJuIFN0
cmluZyh0ZXh0YXJlYS5uYW1lKCkpOworICAgICAgICBjYXNlIFRleHRBcmVhUmVhZE9ubHk6ICAg
ICAgICByZXR1cm4gQm9vbGVhbih0ZXh0YXJlYS5yZWFkT25seSgpKTsKKyAgICAgICAgY2FzZSBU
ZXh0QXJlYVJvd3M6ICAgICAgICAgICAgcmV0dXJuIE51bWJlcih0ZXh0YXJlYS5yb3dzKCkpOwor
ICAgICAgICBjYXNlIFRleHRBcmVhU2VsZWN0aW9uU3RhcnQ6ICByZXR1cm4gTnVtYmVyKHRleHRh
cmVhLnNlbGVjdGlvblN0YXJ0KCkpOworICAgICAgICBjYXNlIFRleHRBcmVhU2VsZWN0aW9uRW5k
OiAgICByZXR1cm4gTnVtYmVyKHRleHRhcmVhLnNlbGVjdGlvbkVuZCgpKTsKKyAgICAgICAgY2Fz
ZSBUZXh0QXJlYVRhYkluZGV4OiAgICAgICAgcmV0dXJuIE51bWJlcih0ZXh0YXJlYS50YWJJbmRl
eCgpKTsKKyAgICAgICAgY2FzZSBUZXh0QXJlYVR5cGU6ICAgICAgICAgICAgcmV0dXJuIFN0cmlu
Zyh0ZXh0YXJlYS50eXBlKCkpOworICAgICAgICBjYXNlIFRleHRBcmVhVmFsdWU6ICAgICAgICAg
ICByZXR1cm4gU3RyaW5nKHRleHRhcmVhLnZhbHVlKCkpOwogICAgIH0KLSAgfQotICBicmVhazsK
LSAgY2FzZSBJRF9ETDogewotICAgIEhUTUxETGlzdEVsZW1lbnRJbXBsICZkTGlzdCA9IHN0YXRp
Y19jYXN0PEhUTUxETGlzdEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgIHJldHVybiBVbmRl
ZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OmJ1dHRvbkdldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MQnV0dG9uRWxlbWVudEltcGwmIGJ1
dHRvbiA9ICpzdGF0aWNfY2FzdDxIVE1MQnV0dG9uRWxlbWVudEltcGwqPihpbXBsKCkpOwogICAg
IHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIERMaXN0Q29tcGFjdDogICAgICAgICByZXR1cm4g
Qm9vbGVhbihkTGlzdC5jb21wYWN0KCkpOworICAgICAgICBjYXNlIEJ1dHRvbkZvcm06ICAgICAg
ICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyxidXR0b24uZm9ybSgpKTsgLy8gdHlwZSBIVE1M
Rm9ybUVsZW1lbnQKKyAgICAgICAgY2FzZSBCdXR0b25BY2Nlc3NLZXk6ICAgICAgIHJldHVybiBT
dHJpbmcoYnV0dG9uLmFjY2Vzc0tleSgpKTsKKyAgICAgICAgY2FzZSBCdXR0b25EaXNhYmxlZDog
ICAgICAgIHJldHVybiBCb29sZWFuKGJ1dHRvbi5kaXNhYmxlZCgpKTsKKyAgICAgICAgY2FzZSBC
dXR0b25OYW1lOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYnV0dG9uLm5hbWUoKSk7CisgICAg
ICAgIGNhc2UgQnV0dG9uVGFiSW5kZXg6ICAgICAgICByZXR1cm4gTnVtYmVyKGJ1dHRvbi50YWJJ
bmRleCgpKTsKKyAgICAgICAgY2FzZSBCdXR0b25UeXBlOiAgICAgICAgICAgIHJldHVybiBTdHJp
bmcoYnV0dG9uLnR5cGUoKSk7CisgICAgICAgIGNhc2UgQnV0dG9uVmFsdWU6ICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKGJ1dHRvbi52YWx1ZSgpKTsKICAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNh
c2UgSURfRElSOiB7Ci0gICAgSFRNTERpcmVjdG9yeUVsZW1lbnRJbXBsICZkaXJlY3RvcnkgPSBz
dGF0aWNfY2FzdDxIVE1MRGlyZWN0b3J5RWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgcmV0
dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6bGFiZWxHZXR0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTExhYmVsRWxlbWVudElt
cGwmIGxhYmVsID0gKnN0YXRpY19jYXN0PEhUTUxMYWJlbEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsK
ICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBEaXJlY3RvcnlDb21wYWN0OiAgICAgICAg
IHJldHVybiBCb29sZWFuKGRpcmVjdG9yeS5jb21wYWN0KCkpOworICAgICAgICBjYXNlIExhYmVs
Rm9ybTogICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLGxhYmVsLmZvcm0oKSk7IC8v
IHR5cGUgSFRNTEZvcm1FbGVtZW50CisgICAgICAgIGNhc2UgTGFiZWxBY2Nlc3NLZXk6ICAgICAg
IHJldHVybiBTdHJpbmcobGFiZWwuYWNjZXNzS2V5KCkpOworICAgICAgICBjYXNlIExhYmVsSHRt
bEZvcjogICAgICAgICByZXR1cm4gU3RyaW5nKGxhYmVsLmh0bWxGb3IoKSk7CiAgICAgfQotICB9
Ci0gIGJyZWFrOwotICBjYXNlIElEX01FTlU6IHsKLSAgICBIVE1MTWVudUVsZW1lbnRJbXBsICZt
ZW51ID0gc3RhdGljX2Nhc3Q8SFRNTE1lbnVFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICBy
ZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50OjpmaWVsZFNldEdldHRl
cihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MRmllbGRTZXRF
bGVtZW50SW1wbCYgZmllbGRTZXQgPSAqc3RhdGljX2Nhc3Q8SFRNTEZpZWxkU2V0RWxlbWVudElt
cGwqPihpbXBsKCkpOworICAgIGlmICh0b2tlbiA9PSBGaWVsZFNldEZvcm0pCisgICAgICAgIHJl
dHVybiBnZXRET01Ob2RlKGV4ZWMsZmllbGRTZXQuZm9ybSgpKTsgLy8gdHlwZSBIVE1MRm9ybUVs
ZW1lbnQKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50Ojps
ZWdlbmRHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRN
TExlZ2VuZEVsZW1lbnRJbXBsJiBsZWdlbmQgPSAqc3RhdGljX2Nhc3Q8SFRNTExlZ2VuZEVsZW1l
bnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBNZW51Q29t
cGFjdDogICAgICAgICByZXR1cm4gQm9vbGVhbihtZW51LmNvbXBhY3QoKSk7CisgICAgICAgIGNh
c2UgTGVnZW5kRm9ybTogICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLGxlZ2VuZC5m
b3JtKCkpOyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVudAorICAgICAgICBjYXNlIExlZ2VuZEFjY2Vz
c0tleTogICAgICAgcmV0dXJuIFN0cmluZyhsZWdlbmQuYWNjZXNzS2V5KCkpOworICAgICAgICBj
YXNlIExlZ2VuZEFsaWduOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhsZWdlbmQuYWxpZ24oKSk7
CiAgICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX0xJOiB7Ci0gICAgSFRNTExJRWxlbWVu
dEltcGwgJmxpID0gc3RhdGljX2Nhc3Q8SFRNTExJRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Cisg
ICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6dUxpc3RHZXR0
ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTFVMaXN0RWxl
bWVudEltcGwmIHVMaXN0ID0gKnN0YXRpY19jYXN0PEhUTUxVTGlzdEVsZW1lbnRJbXBsKj4oaW1w
bCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBMSVR5cGU6ICAgICAgICAgICAg
cmV0dXJuIFN0cmluZyhsaS50eXBlKCkpOwotICAgIGNhc2UgTElWYWx1ZTogICAgICAgICAgIHJl
dHVybiBOdW1iZXIobGkudmFsdWUoKSk7CisgICAgICAgIGNhc2UgVUxpc3RDb21wYWN0OiAgICAg
ICAgIHJldHVybiBCb29sZWFuKHVMaXN0LmNvbXBhY3QoKSk7CisgICAgICAgIGNhc2UgVUxpc3RU
eXBlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcodUxpc3QudHlwZSgpKTsKICAgICB9Ci0gIH0K
LSAgYnJlYWs7Ci0gIGNhc2UgSURfRElWOiB7Ci0gICAgSFRNTERpdkVsZW1lbnRJbXBsICZkaXYg
PSBzdGF0aWNfY2FzdDxIVE1MRGl2RWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgcmV0dXJu
IFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6b0xpc3RHZXR0ZXIoRXhlY1N0
YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTE9MaXN0RWxlbWVudEltcGwm
IG9MaXN0ID0gKnN0YXRpY19jYXN0PEhUTUxPTGlzdEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAg
ICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBEaXZBbGlnbjogICAgICAgICAgIHJldHVybiBT
dHJpbmcoZGl2LmFsaWduKCkpOworICAgICAgICBjYXNlIE9MaXN0Q29tcGFjdDogICAgICAgICBy
ZXR1cm4gQm9vbGVhbihvTGlzdC5jb21wYWN0KCkpOworICAgICAgICBjYXNlIE9MaXN0U3RhcnQ6
ICAgICAgICAgICByZXR1cm4gTnVtYmVyKG9MaXN0LnN0YXJ0KCkpOworICAgICAgICBjYXNlIE9M
aXN0VHlwZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKG9MaXN0LnR5cGUoKSk7CiAgICAgfQot
ICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX1A6IHsKLSAgICBIVE1MUGFyYWdyYXBoRWxlbWVudElt
cGwgJnBhcmFncmFwaCA9IHN0YXRpY19jYXN0PEhUTUxQYXJhZ3JhcGhFbGVtZW50SW1wbCAmPihl
bGVtZW50KTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50
OjpkTGlzdEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBI
VE1MRExpc3RFbGVtZW50SW1wbCYgZExpc3QgPSAqc3RhdGljX2Nhc3Q8SFRNTERMaXN0RWxlbWVu
dEltcGwqPihpbXBsKCkpOworICAgIGlmICh0b2tlbiA9PSBETGlzdENvbXBhY3QpCisgICAgICAg
IHJldHVybiBCb29sZWFuKGRMaXN0LmNvbXBhY3QoKSk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgp
OworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6ZGlyR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50
IHRva2VuKSBjb25zdAoreworICAgIEhUTUxEaXJlY3RvcnlFbGVtZW50SW1wbCYgZGlyID0gKnN0
YXRpY19jYXN0PEhUTUxEaXJlY3RvcnlFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRv
a2VuID09IERpcmVjdG9yeUNvbXBhY3QpCisgICAgICAgIHJldHVybiBCb29sZWFuKGRpci5jb21w
YWN0KCkpOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6
Om1lbnVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRN
TE1lbnVFbGVtZW50SW1wbCYgbWVudSA9ICpzdGF0aWNfY2FzdDxIVE1MTWVudUVsZW1lbnRJbXBs
Kj4oaW1wbCgpKTsKKyAgICBpZiAodG9rZW4gPT0gTWVudUNvbXBhY3QpCisgICAgICAgIHJldHVy
biBCb29sZWFuKG1lbnUuY29tcGFjdCgpKTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisK
K1ZhbHVlIEhUTUxFbGVtZW50OjpsaUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikg
Y29uc3QKK3sKKyAgICBIVE1MTElFbGVtZW50SW1wbCYgbGkgPSAqc3RhdGljX2Nhc3Q8SFRNTExJ
RWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIFBh
cmFncmFwaEFsaWduOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhwYXJhZ3JhcGguYWxpZ24oKSk7
CisgICAgICAgIGNhc2UgTElUeXBlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcobGkudHlwZSgp
KTsKKyAgICAgICAgY2FzZSBMSVZhbHVlOiAgICAgICAgICAgcmV0dXJuIE51bWJlcihsaS52YWx1
ZSgpKTsKICAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfSDE6Ci0gIGNhc2UgSURfSDI6
Ci0gIGNhc2UgSURfSDM6Ci0gIGNhc2UgSURfSDQ6Ci0gIGNhc2UgSURfSDU6Ci0gIGNhc2UgSURf
SDY6IHsKLSAgICBIVE1MSGVhZGluZ0VsZW1lbnRJbXBsICZoZWFkaW5nID0gc3RhdGljX2Nhc3Q8
SFRNTEhlYWRpbmdFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICByZXR1cm4gVW5kZWZpbmVk
KCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50OjpkaXZHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBp
bnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTERpdkVsZW1lbnRJbXBsJiBkaXYgPSAqc3RhdGlj
X2Nhc3Q8SFRNTERpdkVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBpZiAodG9rZW4gPT0gRGl2
QWxpZ24pCisgICAgICAgIHJldHVybiBTdHJpbmcoZGl2LmFsaWduKCkpOworICAgIHJldHVybiBV
bmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OnBhcmFncmFwaEdldHRlcihFeGVj
U3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MUGFyYWdyYXBoRWxlbWVu
dEltcGwmIHAgPSAqc3RhdGljX2Nhc3Q8SFRNTFBhcmFncmFwaEVsZW1lbnRJbXBsKj4oaW1wbCgp
KTsKKyAgICBpZiAodG9rZW4gPT0gUGFyYWdyYXBoQWxpZ24pCisgICAgICAgIHJldHVybiBTdHJp
bmcocC5hbGlnbigpKTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxF
bGVtZW50OjpoZWFkaW5nR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAor
eworICAgIEhUTUxIZWFkaW5nRWxlbWVudEltcGwmIGggPSAqc3RhdGljX2Nhc3Q8SFRNTEhlYWRp
bmdFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IEhlYWRpbmdBbGlnbikK
KyAgICAgICAgcmV0dXJuIFN0cmluZyhoLmFsaWduKCkpOworICAgIHJldHVybiBVbmRlZmluZWQo
KTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OmJsb2NrUXVvdGVHZXR0ZXIoRXhlY1N0YXRlKiBl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTEJsb2NrcXVvdGVFbGVtZW50SW1wbCYg
YmxvY2tRdW90ZSA9ICpzdGF0aWNfY2FzdDxIVE1MQmxvY2txdW90ZUVsZW1lbnRJbXBsKj4oaW1w
bCgpKTsKKyAgICBpZiAodG9rZW4gPT0gQmxvY2tRdW90ZUNpdGUpCisgICAgICAgIHJldHVybiBT
dHJpbmcoYmxvY2tRdW90ZS5jaXRlKCkpOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKwor
VmFsdWUgSFRNTEVsZW1lbnQ6OnF1b3RlR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2Vu
KSBjb25zdAoreworICAgIEhUTUxRdW90ZUVsZW1lbnRJbXBsJiBxdW90ZSA9ICpzdGF0aWNfY2Fz
dDxIVE1MUXVvdGVFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IFF1b3Rl
Q2l0ZSkKKyAgICAgICAgcmV0dXJuIFN0cmluZyhxdW90ZS5jaXRlKCkpOworICAgIHJldHVybiBV
bmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OnByZUdldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9y
ICd3cmFwJyB3aGVuIHdoaXRlLXNwYWNlOiBwcmUtd3JhcCBpcyBpbXBsZW1lbnRlZC4KKyAgICBI
VE1MUHJlRWxlbWVudEltcGwmIHByZSA9ICpzdGF0aWNfY2FzdDxIVE1MUHJlRWxlbWVudEltcGwq
PihpbXBsKCkpOworICAgIGlmICh0b2tlbiA9PSBQcmVXaWR0aCkKKyAgICAgICAgcmV0dXJuIE51
bWJlcihwcmUud2lkdGgoKSk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBI
VE1MRWxlbWVudDo6YnJHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7
CisgICAgSFRNTEJSRWxlbWVudEltcGwmIGJyID0gKnN0YXRpY19jYXN0PEhUTUxCUkVsZW1lbnRJ
bXBsKj4oaW1wbCgpKTsKKyAgICBpZiAodG9rZW4gPT0gQlJDbGVhcikKKyAgICAgICAgcmV0dXJu
IFN0cmluZyhici5jbGVhcigpKTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVl
IEhUTUxFbGVtZW50OjpiYXNlRm9udEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikg
Y29uc3QKK3sKKyAgICBIVE1MQmFzZUZvbnRFbGVtZW50SW1wbCYgYmFzZUZvbnQgPSAqc3RhdGlj
X2Nhc3Q8SFRNTEJhc2VGb250RWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAodG9r
ZW4pIHsKLSAgICBjYXNlIEhlYWRpbmdBbGlnbjogICAgICAgICAgIHJldHVybiBTdHJpbmcoaGVh
ZGluZy5hbGlnbigpKTsKKyAgICAgICAgY2FzZSBCYXNlRm9udENvbG9yOiAgICAgICAgICAgcmV0
dXJuIFN0cmluZyhiYXNlRm9udC5jb2xvcigpKTsKKyAgICAgICAgY2FzZSBCYXNlRm9udEZhY2U6
ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhiYXNlRm9udC5mYWNlKCkpOworICAgICAgICBjYXNl
IEJhc2VGb250U2l6ZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGJhc2VGb250LnNpemUoKSk7
CiAgICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX0JMT0NLUVVPVEU6IHsKLSAgICBIVE1M
QmxvY2txdW90ZUVsZW1lbnRJbXBsICZibG9ja3F1b3RlID0gc3RhdGljX2Nhc3Q8SFRNTEJsb2Nr
cXVvdGVFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9
CisKK1ZhbHVlIEhUTUxFbGVtZW50Ojpmb250R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRv
a2VuKSBjb25zdAoreworICAgIEhUTUxGb250RWxlbWVudEltcGwmIGZvbnQgPSAqc3RhdGljX2Nh
c3Q8SFRNTEZvbnRFbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tlbikgewot
ICAgIGNhc2UgQmxvY2tRdW90ZUNpdGU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhibG9ja3F1
b3RlLmNpdGUoKSk7CisgICAgICAgIGNhc2UgRm9udENvbG9yOiAgICAgICAgICAgcmV0dXJuIFN0
cmluZyhmb250LmNvbG9yKCkpOworICAgICAgICBjYXNlIEZvbnRGYWNlOiAgICAgICAgICAgIHJl
dHVybiBTdHJpbmcoZm9udC5mYWNlKCkpOworICAgICAgICBjYXNlIEZvbnRTaXplOiAgICAgICAg
ICAgIHJldHVybiBTdHJpbmcoZm9udC5zaXplKCkpOwogICAgIH0KLSAgfQotICBjYXNlIElEX1E6
IHsKLSAgICBIVE1MUXVvdGVFbGVtZW50SW1wbCAmcXVvdGUgPSBzdGF0aWNfY2FzdDxIVE1MUXVv
dGVFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisK
K1ZhbHVlIEhUTUxFbGVtZW50OjpockdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikg
Y29uc3QKK3sKKyAgICBIVE1MSFJFbGVtZW50SW1wbCYgaHIgPSAqc3RhdGljX2Nhc3Q8SFRNTEhS
RWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIFF1
b3RlQ2l0ZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKHF1b3RlLmNpdGUoKSk7CisgICAgICAg
IGNhc2UgSFJBbGlnbjogICAgICAgICAgIHJldHVybiBTdHJpbmcoaHIuYWxpZ24oKSk7CisgICAg
ICAgIGNhc2UgSFJOb1NoYWRlOiAgICAgICAgIHJldHVybiBCb29sZWFuKGhyLm5vU2hhZGUoKSk7
CisgICAgICAgIGNhc2UgSFJTaXplOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoaHIuc2l6ZSgp
KTsKKyAgICAgICAgY2FzZSBIUldpZHRoOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhoci53aWR0
aCgpKTsKICAgICB9Ci0gIH0KLSAgY2FzZSBJRF9QUkU6IHsKLSAgICBIVE1MUHJlRWxlbWVudElt
cGwgJnByZSA9IHN0YXRpY19jYXN0PEhUTUxQcmVFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAg
ICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50Ojptb2RHZXR0ZXIo
RXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTE1vZEVsZW1lbnRJ
bXBsJiBtb2QgPSAqc3RhdGljX2Nhc3Q8SFRNTE1vZEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAg
ICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBQcmVXaWR0aDogICAgICAgICAgIHJldHVybiBO
dW1iZXIocHJlLndpZHRoKCkpOworICAgICAgICBjYXNlIE1vZENpdGU6ICAgICAgICAgICAgcmV0
dXJuIFN0cmluZyhtb2QuY2l0ZSgpKTsKKyAgICAgICAgY2FzZSBNb2REYXRlVGltZTogICAgICAg
IHJldHVybiBTdHJpbmcobW9kLmRhdGVUaW1lKCkpOwogICAgIH0KLSAgfQotICBicmVhazsKLSAg
Y2FzZSBJRF9CUjogewotICAgIEhUTUxCUkVsZW1lbnRJbXBsICZiciA9IHN0YXRpY19jYXN0PEhU
TUxCUkVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30K
KworVmFsdWUgSFRNTEVsZW1lbnQ6OmFuY2hvckdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0
b2tlbikgY29uc3QKK3sKKyAgICBIVE1MQW5jaG9yRWxlbWVudEltcGwmIGFuY2hvciA9ICpzdGF0
aWNfY2FzdDxIVE1MQW5jaG9yRWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAodG9r
ZW4pIHsKLSAgICBjYXNlIEJSQ2xlYXI6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGJyLmNsZWFy
KCkpOworICAgICAgICBjYXNlIEFuY2hvckFjY2Vzc0tleTogICAgICAgcmV0dXJuIFN0cmluZyhh
bmNob3IuYWNjZXNzS2V5KCkpOworICAgICAgICBjYXNlIEFuY2hvckNoYXJzZXQ6ICAgICAgICAg
cmV0dXJuIFN0cmluZyhhbmNob3IuY2hhcnNldCgpKTsKKyAgICAgICAgY2FzZSBBbmNob3JDb29y
ZHM6ICAgICAgICAgIHJldHVybiBTdHJpbmcoYW5jaG9yLmNvb3JkcygpKTsKKyAgICAgICAgY2Fz
ZSBBbmNob3JIcmVmOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYW5jaG9yLmhyZWYoKSk7Cisg
ICAgICAgIGNhc2UgQW5jaG9ySHJlZkxhbmc6ICAgICAgICByZXR1cm4gU3RyaW5nKGFuY2hvci5o
cmVmbGFuZygpKTsKKyAgICAgICAgY2FzZSBBbmNob3JIYXNoOiAgICAgICAgICAgIHJldHVybiBT
dHJpbmcoJyMnK0tVUkwoYW5jaG9yLmhyZWYoKS5zdHJpbmcoKSkucmVmKCkpOworICAgICAgICBj
YXNlIEFuY2hvckhvc3Q6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhLVVJMKGFuY2hvci5ocmVm
KCkuc3RyaW5nKCkpLmhvc3QoKSk7CisgICAgICAgIGNhc2UgQW5jaG9ySG9zdG5hbWU6IHsKKyAg
ICAgICAgICAgIEtVUkwgdXJsKGFuY2hvci5ocmVmKCkuc3RyaW5nKCkpOworICAgICAgICAgICAg
a2REZWJ1Zyg2MDcwKSA8PCAiYW5jaG9yOjpob3N0bmFtZSB1c2VzOiIgPDx1cmwudXJsKCk8PGVu
ZGw7CisgICAgICAgICAgICBpZiAodXJsLnBvcnQoKT09MCkKKyAgICAgICAgICAgICAgICByZXR1
cm4gU3RyaW5nKHVybC5ob3N0KCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IHJldHVybiBTdHJpbmcodXJsLmhvc3QoKSArICI6IiArIFFTdHJpbmc6Om51bWJlcih1cmwucG9y
dCgpKSk7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBBbmNob3JQYXRoTmFtZTogICAgICAgIHJl
dHVybiBTdHJpbmcoS1VSTChhbmNob3IuaHJlZigpLnN0cmluZygpKS5wYXRoKCkpOworICAgICAg
ICBjYXNlIEFuY2hvclBvcnQ6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhRU3RyaW5nOjpudW1i
ZXIoS1VSTChhbmNob3IuaHJlZigpLnN0cmluZygpKS5wb3J0KCkpKTsKKyAgICAgICAgY2FzZSBB
bmNob3JQcm90b2NvbDogICAgICAgIHJldHVybiBTdHJpbmcoS1VSTChhbmNob3IuaHJlZigpLnN0
cmluZygpKS5wcm90b2NvbCgpKyI6Iik7CisgICAgICAgIGNhc2UgQW5jaG9yU2VhcmNoOiAgICAg
ICAgICByZXR1cm4gU3RyaW5nKEtVUkwoYW5jaG9yLmhyZWYoKS5zdHJpbmcoKSkucXVlcnkoKSk7
CisgICAgICAgIGNhc2UgQW5jaG9yTmFtZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGFuY2hv
ci5uYW1lKCkpOworICAgICAgICBjYXNlIEFuY2hvclJlbDogICAgICAgICAgICAgcmV0dXJuIFN0
cmluZyhhbmNob3IucmVsKCkpOworICAgICAgICBjYXNlIEFuY2hvclJldjogICAgICAgICAgICAg
cmV0dXJuIFN0cmluZyhhbmNob3IucmV2KCkpOworICAgICAgICBjYXNlIEFuY2hvclNoYXBlOiAg
ICAgICAgICAgcmV0dXJuIFN0cmluZyhhbmNob3Iuc2hhcGUoKSk7CisgICAgICAgIGNhc2UgQW5j
aG9yVGFiSW5kZXg6ICAgICAgICByZXR1cm4gTnVtYmVyKGFuY2hvci50YWJJbmRleCgpKTsKKyAg
ICAgICAgY2FzZSBBbmNob3JUYXJnZXQ6ICAgICAgICAgIHJldHVybiBTdHJpbmcoYW5jaG9yLnRh
cmdldCgpKTsKKyAgICAgICAgY2FzZSBBbmNob3JUeXBlOiAgICAgICAgICAgIHJldHVybiBTdHJp
bmcoYW5jaG9yLnR5cGUoKSk7CisgICAgICAgIGNhc2UgQW5jaG9yVGV4dDoKKyAgICAgICAgICAg
IGlmIChEb2N1bWVudEltcGwqIGRvYyA9IGFuY2hvci5nZXREb2N1bWVudCgpKQorICAgICAgICAg
ICAgICAgIGRvYy0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CisgICAg
ICAgICAgICByZXR1cm4gU3RyaW5nKGFuY2hvci5pbm5lclRleHQoKSk7CiAgICAgfQotICB9Ci0g
IGJyZWFrOwotICBjYXNlIElEX0JBU0VGT05UOiB7Ci0gICAgSFRNTEJhc2VGb250RWxlbWVudElt
cGwgJmJhc2VGb250ID0gc3RhdGljX2Nhc3Q8SFRNTEJhc2VGb250RWxlbWVudEltcGwgJj4oZWxl
bWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgQmFzZUZvbnRDb2xvcjogICAg
ICAgICAgIHJldHVybiBTdHJpbmcoYmFzZUZvbnQuY29sb3IoKSk7Ci0gICAgY2FzZSBCYXNlRm9u
dEZhY2U6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhiYXNlRm9udC5mYWNlKCkpOwotICAgIGNh
c2UgQmFzZUZvbnRTaXplOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYmFzZUZvbnQuc2l6ZSgp
KTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50OjppbWFn
ZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MSW1h
Z2VFbGVtZW50SW1wbCYgaW1hZ2UgPSAqc3RhdGljX2Nhc3Q8SFRNTEltYWdlRWxlbWVudEltcGwq
PihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBJbWFnZU5hbWU6
ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpbWFnZS5uYW1lKCkpOworICAgICAgICBjYXNlIElt
YWdlQWxpZ246ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGltYWdlLmFsaWduKCkpOworICAgICAg
ICBjYXNlIEltYWdlQWx0OiAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGltYWdlLmFsdCgpKTsK
KyAgICAgICAgY2FzZSBJbWFnZUJvcmRlcjogICAgICAgICAgcmV0dXJuIE51bWJlcihpbWFnZS5i
b3JkZXIoKSk7CisgICAgICAgIGNhc2UgSW1hZ2VIZWlnaHQ6ICAgICAgICAgIHJldHVybiBOdW1i
ZXIoaW1hZ2UuaGVpZ2h0KHRydWUpKTsKKyAgICAgICAgY2FzZSBJbWFnZUhzcGFjZTogICAgICAg
ICAgcmV0dXJuIE51bWJlcihpbWFnZS5oc3BhY2UoKSk7CisgICAgICAgIGNhc2UgSW1hZ2VJc01h
cDogICAgICAgICAgIHJldHVybiBCb29sZWFuKGltYWdlLmlzTWFwKCkpOworICAgICAgICBjYXNl
IEltYWdlTG9uZ0Rlc2M6ICAgICAgICByZXR1cm4gU3RyaW5nKGltYWdlLmxvbmdEZXNjKCkpOwor
ICAgICAgICBjYXNlIEltYWdlU3JjOiAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGltYWdlLnNy
YygpKTsKKyAgICAgICAgY2FzZSBJbWFnZVVzZU1hcDogICAgICAgICAgcmV0dXJuIFN0cmluZyhp
bWFnZS51c2VNYXAoKSk7CisgICAgICAgIGNhc2UgSW1hZ2VWc3BhY2U6ICAgICAgICAgIHJldHVy
biBOdW1iZXIoaW1hZ2UudnNwYWNlKCkpOworICAgICAgICBjYXNlIEltYWdlV2lkdGg6ICAgICAg
ICAgICByZXR1cm4gTnVtYmVyKGltYWdlLndpZHRoKHRydWUpKTsKKyAgICAgICAgY2FzZSBJbWFn
ZVg6ICAgICAgICAgICAgICAgcmV0dXJuIE51bWJlcihpbWFnZS54KCkpOworICAgICAgICBjYXNl
IEltYWdlWTogICAgICAgICAgICAgICByZXR1cm4gTnVtYmVyKGltYWdlLnkoKSk7CiAgICAgfQot
ICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX0ZPTlQ6IHsKLSAgICBIVE1MRm9udEVsZW1lbnRJbXBs
ICZmb250ID0gc3RhdGljX2Nhc3Q8SFRNTEZvbnRFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAg
ICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBGb250Q29sb3I6ICAgICAgICAgICByZXR1cm4g
U3RyaW5nKGZvbnQuY29sb3IoKSk7Ci0gICAgY2FzZSBGb250RmFjZTogICAgICAgICAgICByZXR1
cm4gU3RyaW5nKGZvbnQuZmFjZSgpKTsKLSAgICBjYXNlIEZvbnRTaXplOiAgICAgICAgICAgIHJl
dHVybiBTdHJpbmcoZm9udC5zaXplKCkpOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKwor
VmFsdWUgSFRNTEVsZW1lbnQ6Om9iamVjdEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tl
bikgY29uc3QKK3sKKyAgICBIVE1MT2JqZWN0RWxlbWVudEltcGwmIG9iamVjdCA9ICpzdGF0aWNf
Y2FzdDxIVE1MT2JqZWN0RWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4p
IHsKKyAgICAgICAgY2FzZSBPYmplY3RGb3JtOiAgICAgICAgICAgIHJldHVybiBnZXRET01Ob2Rl
KGV4ZWMsb2JqZWN0LmZvcm0oKSk7IC8vIHR5cGUgSFRNTEZvcm1FbGVtZW50CisgICAgICAgIGNh
c2UgT2JqZWN0Q29kZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKG9iamVjdC5jb2RlKCkpOwor
ICAgICAgICBjYXNlIE9iamVjdEFsaWduOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3Qu
YWxpZ24oKSk7CisgICAgICAgIGNhc2UgT2JqZWN0QXJjaGl2ZTogICAgICAgICByZXR1cm4gU3Ry
aW5nKG9iamVjdC5hcmNoaXZlKCkpOworICAgICAgICBjYXNlIE9iamVjdEJvcmRlcjogICAgICAg
ICAgcmV0dXJuIFN0cmluZyhvYmplY3QuYm9yZGVyKCkpOworICAgICAgICBjYXNlIE9iamVjdENv
ZGVCYXNlOiAgICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3QuY29kZUJhc2UoKSk7CisgICAgICAg
IGNhc2UgT2JqZWN0Q29kZVR5cGU6ICAgICAgICByZXR1cm4gU3RyaW5nKG9iamVjdC5jb2RlVHlw
ZSgpKTsKKyAgICAgICAgY2FzZSBPYmplY3RDb250ZW50RG9jdW1lbnQ6IHJldHVybiBjaGVja05v
ZGVTZWN1cml0eShleGVjLG9iamVjdC5jb250ZW50RG9jdW1lbnQoKSkgPyAKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRET01Ob2RlKGV4ZWMsIG9iamVjdC5j
b250ZW50RG9jdW1lbnQoKSkgOiBVbmRlZmluZWQoKTsKKyAgICAgICAgY2FzZSBPYmplY3REYXRh
OiAgICAgICAgICAgIHJldHVybiBTdHJpbmcob2JqZWN0LmRhdGEoKSk7CisgICAgICAgIGNhc2Ug
T2JqZWN0RGVjbGFyZTogICAgICAgICByZXR1cm4gQm9vbGVhbihvYmplY3QuZGVjbGFyZSgpKTsK
KyAgICAgICAgY2FzZSBPYmplY3RIZWlnaHQ6ICAgICAgICAgIHJldHVybiBTdHJpbmcob2JqZWN0
LmhlaWdodCgpKTsKKyAgICAgICAgY2FzZSBPYmplY3RIc3BhY2U6ICAgICAgICAgIHJldHVybiBT
dHJpbmcob2JqZWN0LmhzcGFjZSgpKTsKKyAgICAgICAgY2FzZSBPYmplY3ROYW1lOiAgICAgICAg
ICAgIHJldHVybiBTdHJpbmcob2JqZWN0Lm5hbWUoKSk7CisgICAgICAgIGNhc2UgT2JqZWN0U3Rh
bmRieTogICAgICAgICByZXR1cm4gU3RyaW5nKG9iamVjdC5zdGFuZGJ5KCkpOworICAgICAgICBj
YXNlIE9iamVjdFRhYkluZGV4OiAgICAgICAgcmV0dXJuIE51bWJlcihvYmplY3QudGFiSW5kZXgo
KSk7CisgICAgICAgIGNhc2UgT2JqZWN0VHlwZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKG9i
amVjdC50eXBlKCkpOworICAgICAgICBjYXNlIE9iamVjdFVzZU1hcDogICAgICAgICAgcmV0dXJu
IFN0cmluZyhvYmplY3QudXNlTWFwKCkpOworICAgICAgICBjYXNlIE9iamVjdFZzcGFjZTogICAg
ICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3QudnNwYWNlKCkpOworICAgICAgICBjYXNlIE9iamVj
dFdpZHRoOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3Qud2lkdGgoKSk7CiAgICAgfQot
ICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX0hSOiB7Ci0gICAgSFRNTEhSRWxlbWVudEltcGwgJmhy
ID0gc3RhdGljX2Nhc3Q8SFRNTEhSRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgc3dpdGNo
ICh0b2tlbikgewotICAgIGNhc2UgSFJBbGlnbjogICAgICAgICAgIHJldHVybiBTdHJpbmcoaHIu
YWxpZ24oKSk7Ci0gICAgY2FzZSBIUk5vU2hhZGU6ICAgICAgICAgcmV0dXJuIEJvb2xlYW4oaHIu
bm9TaGFkZSgpKTsKLSAgICBjYXNlIEhSU2l6ZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGhy
LnNpemUoKSk7Ci0gICAgY2FzZSBIUldpZHRoOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhoci53
aWR0aCgpKTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50
OjpwYXJhbUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBI
VE1MUGFyYW1FbGVtZW50SW1wbCYgcGFyYW0gPSAqc3RhdGljX2Nhc3Q8SFRNTFBhcmFtRWxlbWVu
dEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBQYXJh
bU5hbWU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhwYXJhbS5uYW1lKCkpOworICAgICAgICBj
YXNlIFBhcmFtVHlwZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKHBhcmFtLnR5cGUoKSk7Cisg
ICAgICAgIGNhc2UgUGFyYW1WYWx1ZTogICAgICAgICAgIHJldHVybiBTdHJpbmcocGFyYW0udmFs
dWUoKSk7CisgICAgICAgIGNhc2UgUGFyYW1WYWx1ZVR5cGU6ICAgICAgIHJldHVybiBTdHJpbmco
cGFyYW0udmFsdWVUeXBlKCkpOwogICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9JTlM6
Ci0gIGNhc2UgSURfREVMOiB7Ci0gICAgSFRNTE1vZEVsZW1lbnRJbXBsICZtb2QgPSBzdGF0aWNf
Y2FzdDxIVE1MTW9kRWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgcmV0dXJuIFVuZGVmaW5l
ZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6YXBwbGV0R2V0dGVyKEV4ZWNTdGF0ZSogZXhl
YywgaW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxBcHBsZXRFbGVtZW50SW1wbCYgYXBwbGV0
ID0gKnN0YXRpY19jYXN0PEhUTUxBcHBsZXRFbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dp
dGNoICh0b2tlbikgewotICAgIGNhc2UgTW9kQ2l0ZTogICAgICAgICAgICByZXR1cm4gU3RyaW5n
KG1vZC5jaXRlKCkpOwotICAgIGNhc2UgTW9kRGF0ZVRpbWU6ICAgICAgICByZXR1cm4gU3RyaW5n
KG1vZC5kYXRlVGltZSgpKTsKKyAgICAgICAgY2FzZSBBcHBsZXRBbGlnbjogICAgICAgICAgIHJl
dHVybiBTdHJpbmcoYXBwbGV0LmFsaWduKCkpOworICAgICAgICBjYXNlIEFwcGxldEFsdDogICAg
ICAgICAgICAgcmV0dXJuIFN0cmluZyhhcHBsZXQuYWx0KCkpOworICAgICAgICBjYXNlIEFwcGxl
dEFyY2hpdmU6ICAgICAgICAgcmV0dXJuIFN0cmluZyhhcHBsZXQuYXJjaGl2ZSgpKTsKKyAgICAg
ICAgY2FzZSBBcHBsZXRDb2RlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYXBwbGV0LmNvZGUo
KSk7CisgICAgICAgIGNhc2UgQXBwbGV0Q29kZUJhc2U6ICAgICAgICByZXR1cm4gU3RyaW5nKGFw
cGxldC5jb2RlQmFzZSgpKTsKKyAgICAgICAgY2FzZSBBcHBsZXRIZWlnaHQ6ICAgICAgICAgIHJl
dHVybiBTdHJpbmcoYXBwbGV0LmhlaWdodCgpKTsKKyAgICAgICAgY2FzZSBBcHBsZXRIc3BhY2U6
ICAgICAgICAgIHJldHVybiBTdHJpbmcoYXBwbGV0LmhzcGFjZSgpKTsKKyAgICAgICAgY2FzZSBB
cHBsZXROYW1lOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYXBwbGV0Lm5hbWUoKSk7CisgICAg
ICAgIGNhc2UgQXBwbGV0T2JqZWN0OiAgICAgICAgICByZXR1cm4gU3RyaW5nKGFwcGxldC5vYmpl
Y3QoKSk7CisgICAgICAgIGNhc2UgQXBwbGV0VnNwYWNlOiAgICAgICAgICByZXR1cm4gU3RyaW5n
KGFwcGxldC52c3BhY2UoKSk7CisgICAgICAgIGNhc2UgQXBwbGV0V2lkdGg6ICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKGFwcGxldC53aWR0aCgpKTsKICAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNh
c2UgSURfQTogewotICAgIEhUTUxBbmNob3JFbGVtZW50SW1wbCAmYW5jaG9yID0gc3RhdGljX2Nh
c3Q8SFRNTEFuY2hvckVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgIHN3aXRjaCAodG9rZW4p
IHsKLSAgICBjYXNlIEFuY2hvckFjY2Vzc0tleTogICAgICAgcmV0dXJuIFN0cmluZyhhbmNob3Iu
YWNjZXNzS2V5KCkpOwotICAgIGNhc2UgQW5jaG9yQ2hhcnNldDogICAgICAgICByZXR1cm4gU3Ry
aW5nKGFuY2hvci5jaGFyc2V0KCkpOwotICAgIGNhc2UgQW5jaG9yQ29vcmRzOiAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKGFuY2hvci5jb29yZHMoKSk7Ci0gICAgY2FzZSBBbmNob3JIcmVmOiAgICAg
ICAgICAgIHJldHVybiBTdHJpbmcoYW5jaG9yLmhyZWYoKSk7Ci0gICAgY2FzZSBBbmNob3JIcmVm
TGFuZzogICAgICAgIHJldHVybiBTdHJpbmcoYW5jaG9yLmhyZWZsYW5nKCkpOwotICAgIGNhc2Ug
QW5jaG9ySGFzaDogICAgICAgICAgICByZXR1cm4gU3RyaW5nKCcjJytLVVJMKGFuY2hvci5ocmVm
KCkuc3RyaW5nKCkpLnJlZigpKTsKLSAgICBjYXNlIEFuY2hvckhvc3Q6ICAgICAgICAgICAgcmV0
dXJuIFN0cmluZyhLVVJMKGFuY2hvci5ocmVmKCkuc3RyaW5nKCkpLmhvc3QoKSk7Ci0gICAgY2Fz
ZSBBbmNob3JIb3N0bmFtZTogewotICAgICAgS1VSTCB1cmwoYW5jaG9yLmhyZWYoKS5zdHJpbmco
KSk7Ci0gICAgICBrZERlYnVnKDYwNzApIDw8ICJhbmNob3I6Omhvc3RuYW1lIHVzZXM6IiA8PHVy
bC51cmwoKTw8ZW5kbDsKLSAgICAgIGlmICh1cmwucG9ydCgpPT0wKQotICAgICAgICByZXR1cm4g
U3RyaW5nKHVybC5ob3N0KCkpOwotICAgICAgZWxzZQotICAgICAgICByZXR1cm4gU3RyaW5nKHVy
bC5ob3N0KCkgKyAiOiIgKyBRU3RyaW5nOjpudW1iZXIodXJsLnBvcnQoKSkpOwotICAgIH0KLSAg
ICBjYXNlIEFuY2hvclBhdGhOYW1lOiAgICAgICAgcmV0dXJuIFN0cmluZyhLVVJMKGFuY2hvci5o
cmVmKCkuc3RyaW5nKCkpLnBhdGgoKSk7Ci0gICAgY2FzZSBBbmNob3JQb3J0OiAgICAgICAgICAg
IHJldHVybiBTdHJpbmcoUVN0cmluZzo6bnVtYmVyKEtVUkwoYW5jaG9yLmhyZWYoKS5zdHJpbmco
KSkucG9ydCgpKSk7Ci0gICAgY2FzZSBBbmNob3JQcm90b2NvbDogICAgICAgIHJldHVybiBTdHJp
bmcoS1VSTChhbmNob3IuaHJlZigpLnN0cmluZygpKS5wcm90b2NvbCgpKyI6Iik7Ci0gICAgY2Fz
ZSBBbmNob3JTZWFyY2g6ICAgICAgICAgIHJldHVybiBTdHJpbmcoS1VSTChhbmNob3IuaHJlZigp
LnN0cmluZygpKS5xdWVyeSgpKTsKLSAgICBjYXNlIEFuY2hvck5hbWU6ICAgICAgICAgICAgcmV0
dXJuIFN0cmluZyhhbmNob3IubmFtZSgpKTsKLSAgICBjYXNlIEFuY2hvclJlbDogICAgICAgICAg
ICAgcmV0dXJuIFN0cmluZyhhbmNob3IucmVsKCkpOwotICAgIGNhc2UgQW5jaG9yUmV2OiAgICAg
ICAgICAgICByZXR1cm4gU3RyaW5nKGFuY2hvci5yZXYoKSk7Ci0gICAgY2FzZSBBbmNob3JTaGFw
ZTogICAgICAgICAgIHJldHVybiBTdHJpbmcoYW5jaG9yLnNoYXBlKCkpOwotICAgIGNhc2UgQW5j
aG9yVGFiSW5kZXg6ICAgICAgICByZXR1cm4gTnVtYmVyKGFuY2hvci50YWJJbmRleCgpKTsKLSAg
ICBjYXNlIEFuY2hvclRhcmdldDogICAgICAgICAgcmV0dXJuIFN0cmluZyhhbmNob3IudGFyZ2V0
KCkpOwotICAgIGNhc2UgQW5jaG9yVHlwZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGFuY2hv
ci50eXBlKCkpOwotICAgIGNhc2UgQW5jaG9yVGV4dDoKLSAgICAgIGlmIChEb2N1bWVudEltcGwq
IGRvYyA9IGFuY2hvci5nZXREb2N1bWVudCgpKQotICAgICAgICBkb2MtPnVwZGF0ZUxheW91dEln
bm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwotICAgICAgcmV0dXJuIFN0cmluZyhhbmNob3IuaW5u
ZXJUZXh0KCkpOwotICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9JTUc6IHsKLSAgICBI
VE1MSW1hZ2VFbGVtZW50SW1wbCAmaW1hZ2UgPSBzdGF0aWNfY2FzdDxIVE1MSW1hZ2VFbGVtZW50
SW1wbCAmPihlbGVtZW50KTsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBJbWFnZU5h
bWU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpbWFnZS5uYW1lKCkpOwotICAgIGNhc2UgSW1h
Z2VBbGlnbjogICAgICAgICAgIHJldHVybiBTdHJpbmcoaW1hZ2UuYWxpZ24oKSk7Ci0gICAgY2Fz
ZSBJbWFnZUFsdDogICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpbWFnZS5hbHQoKSk7Ci0gICAg
Y2FzZSBJbWFnZUJvcmRlcjogICAgICAgICAgcmV0dXJuIE51bWJlcihpbWFnZS5ib3JkZXIoKSk7
Ci0gICAgY2FzZSBJbWFnZUhlaWdodDogICAgICAgICAgcmV0dXJuIE51bWJlcihpbWFnZS5oZWln
aHQodHJ1ZSkpOwotICAgIGNhc2UgSW1hZ2VIc3BhY2U6ICAgICAgICAgIHJldHVybiBOdW1iZXIo
aW1hZ2UuaHNwYWNlKCkpOwotICAgIGNhc2UgSW1hZ2VJc01hcDogICAgICAgICAgIHJldHVybiBC
b29sZWFuKGltYWdlLmlzTWFwKCkpOwotICAgIGNhc2UgSW1hZ2VMb25nRGVzYzogICAgICAgIHJl
dHVybiBTdHJpbmcoaW1hZ2UubG9uZ0Rlc2MoKSk7Ci0gICAgY2FzZSBJbWFnZVNyYzogICAgICAg
ICAgICAgcmV0dXJuIFN0cmluZyhpbWFnZS5zcmMoKSk7Ci0gICAgY2FzZSBJbWFnZVVzZU1hcDog
ICAgICAgICAgcmV0dXJuIFN0cmluZyhpbWFnZS51c2VNYXAoKSk7Ci0gICAgY2FzZSBJbWFnZVZz
cGFjZTogICAgICAgICAgcmV0dXJuIE51bWJlcihpbWFnZS52c3BhY2UoKSk7Ci0gICAgY2FzZSBJ
bWFnZVdpZHRoOiAgICAgICAgICAgcmV0dXJuIE51bWJlcihpbWFnZS53aWR0aCh0cnVlKSk7Ci0g
ICAgY2FzZSBJbWFnZVg6ICAgICAgICAgICAgICAgcmV0dXJuIE51bWJlcihpbWFnZS54KCkpOwot
ICAgIGNhc2UgSW1hZ2VZOiAgICAgICAgICAgICAgIHJldHVybiBOdW1iZXIoaW1hZ2UueSgpKTsK
LSAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfT0JKRUNUOiB7Ci0gICAgSFRNTE9iamVj
dEVsZW1lbnRJbXBsICZvYmplY3QgPSBzdGF0aWNfY2FzdDxIVE1MT2JqZWN0RWxlbWVudEltcGwg
Jj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgT2JqZWN0Rm9ybTog
ICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLG9iamVjdC5mb3JtKCkpOyAvLyB0eXBl
IEhUTUxGb3JtRWxlbWVudAotICAgIGNhc2UgT2JqZWN0Q29kZTogICAgICAgICAgICByZXR1cm4g
U3RyaW5nKG9iamVjdC5jb2RlKCkpOwotICAgIGNhc2UgT2JqZWN0QWxpZ246ICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKG9iamVjdC5hbGlnbigpKTsKLSAgICBjYXNlIE9iamVjdEFyY2hpdmU6ICAg
ICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3QuYXJjaGl2ZSgpKTsKLSAgICBjYXNlIE9iamVjdEJv
cmRlcjogICAgICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3QuYm9yZGVyKCkpOwotICAgIGNhc2Ug
T2JqZWN0Q29kZUJhc2U6ICAgICAgICByZXR1cm4gU3RyaW5nKG9iamVjdC5jb2RlQmFzZSgpKTsK
LSAgICBjYXNlIE9iamVjdENvZGVUeXBlOiAgICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3QuY29k
ZVR5cGUoKSk7Ci0gICAgY2FzZSBPYmplY3RDb250ZW50RG9jdW1lbnQ6IHJldHVybiBjaGVja05v
ZGVTZWN1cml0eShleGVjLG9iamVjdC5jb250ZW50RG9jdW1lbnQoKSkgPyAKLQkJCQkgICAgICAg
Z2V0RE9NTm9kZShleGVjLCBvYmplY3QuY29udGVudERvY3VtZW50KCkpIDogVW5kZWZpbmVkKCk7
Ci0gICAgY2FzZSBPYmplY3REYXRhOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcob2JqZWN0LmRh
dGEoKSk7Ci0gICAgY2FzZSBPYmplY3REZWNsYXJlOiAgICAgICAgIHJldHVybiBCb29sZWFuKG9i
amVjdC5kZWNsYXJlKCkpOwotICAgIGNhc2UgT2JqZWN0SGVpZ2h0OiAgICAgICAgICByZXR1cm4g
U3RyaW5nKG9iamVjdC5oZWlnaHQoKSk7Ci0gICAgY2FzZSBPYmplY3RIc3BhY2U6ICAgICAgICAg
IHJldHVybiBTdHJpbmcob2JqZWN0LmhzcGFjZSgpKTsKLSAgICBjYXNlIE9iamVjdE5hbWU6ICAg
ICAgICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3QubmFtZSgpKTsKLSAgICBjYXNlIE9iamVjdFN0
YW5kYnk6ICAgICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3Quc3RhbmRieSgpKTsKLSAgICBjYXNl
IE9iamVjdFRhYkluZGV4OiAgICAgICAgcmV0dXJuIE51bWJlcihvYmplY3QudGFiSW5kZXgoKSk7
Ci0gICAgY2FzZSBPYmplY3RUeXBlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcob2JqZWN0LnR5
cGUoKSk7Ci0gICAgY2FzZSBPYmplY3RVc2VNYXA6ICAgICAgICAgIHJldHVybiBTdHJpbmcob2Jq
ZWN0LnVzZU1hcCgpKTsKLSAgICBjYXNlIE9iamVjdFZzcGFjZTogICAgICAgICAgcmV0dXJuIFN0
cmluZyhvYmplY3QudnNwYWNlKCkpOwotICAgIGNhc2UgT2JqZWN0V2lkdGg6ICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKG9iamVjdC53aWR0aCgpKTsKLSAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNh
c2UgSURfUEFSQU06IHsKLSAgICBIVE1MUGFyYW1FbGVtZW50SW1wbCAmcGFyYW0gPSBzdGF0aWNf
Y2FzdDxIVE1MUGFyYW1FbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICBzd2l0Y2ggKHRva2Vu
KSB7Ci0gICAgY2FzZSBQYXJhbU5hbWU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhwYXJhbS5u
YW1lKCkpOwotICAgIGNhc2UgUGFyYW1UeXBlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcocGFy
YW0udHlwZSgpKTsKLSAgICBjYXNlIFBhcmFtVmFsdWU6ICAgICAgICAgICByZXR1cm4gU3RyaW5n
KHBhcmFtLnZhbHVlKCkpOwotICAgIGNhc2UgUGFyYW1WYWx1ZVR5cGU6ICAgICAgIHJldHVybiBT
dHJpbmcocGFyYW0udmFsdWVUeXBlKCkpOwotICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJ
RF9BUFBMRVQ6IHsKLSAgICBIVE1MQXBwbGV0RWxlbWVudEltcGwgJmFwcGxldCA9IHN0YXRpY19j
YXN0PEhUTUxBcHBsZXRFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICBzd2l0Y2ggKHRva2Vu
KSB7Ci0gICAgY2FzZSBBcHBsZXRBbGlnbjogICAgICAgICAgIHJldHVybiBTdHJpbmcoYXBwbGV0
LmFsaWduKCkpOwotICAgIGNhc2UgQXBwbGV0QWx0OiAgICAgICAgICAgICByZXR1cm4gU3RyaW5n
KGFwcGxldC5hbHQoKSk7Ci0gICAgY2FzZSBBcHBsZXRBcmNoaXZlOiAgICAgICAgIHJldHVybiBT
dHJpbmcoYXBwbGV0LmFyY2hpdmUoKSk7Ci0gICAgY2FzZSBBcHBsZXRDb2RlOiAgICAgICAgICAg
IHJldHVybiBTdHJpbmcoYXBwbGV0LmNvZGUoKSk7Ci0gICAgY2FzZSBBcHBsZXRDb2RlQmFzZTog
ICAgICAgIHJldHVybiBTdHJpbmcoYXBwbGV0LmNvZGVCYXNlKCkpOwotICAgIGNhc2UgQXBwbGV0
SGVpZ2h0OiAgICAgICAgICByZXR1cm4gU3RyaW5nKGFwcGxldC5oZWlnaHQoKSk7Ci0gICAgY2Fz
ZSBBcHBsZXRIc3BhY2U6ICAgICAgICAgIHJldHVybiBTdHJpbmcoYXBwbGV0LmhzcGFjZSgpKTsK
LSAgICBjYXNlIEFwcGxldE5hbWU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhhcHBsZXQubmFt
ZSgpKTsKLSAgICBjYXNlIEFwcGxldE9iamVjdDogICAgICAgICAgcmV0dXJuIFN0cmluZyhhcHBs
ZXQub2JqZWN0KCkpOwotICAgIGNhc2UgQXBwbGV0VnNwYWNlOiAgICAgICAgICByZXR1cm4gU3Ry
aW5nKGFwcGxldC52c3BhY2UoKSk7Ci0gICAgY2FzZSBBcHBsZXRXaWR0aDogICAgICAgICAgIHJl
dHVybiBTdHJpbmcoYXBwbGV0LndpZHRoKCkpOwotICAgIH0KLSAgfQotICBicmVhazsKLSAgY2Fz
ZSBJRF9NQVA6IHsKLSAgICBIVE1MTWFwRWxlbWVudEltcGwgJm1hcCA9IHN0YXRpY19jYXN0PEhU
TUxNYXBFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9
CisKK1ZhbHVlIEhUTUxFbGVtZW50OjptYXBHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0Cit7CisgICAgSFRNTE1hcEVsZW1lbnRJbXBsJiBtYXAgPSAqc3RhdGljX2Nhc3Q8
SFRNTE1hcEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAg
Y2FzZSBNYXBBcmVhczogICAgICAgICAgIHJldHVybiBnZXRIVE1MQ29sbGVjdGlvbihleGVjLCBt
YXAuYXJlYXMoKS5nZXQoKSk7IC8vIHR5cGUgSFRNTENvbGxlY3Rpb24KLSAgICBjYXNlIE1hcE5h
bWU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhtYXAubmFtZSgpKTsKLSAgICB9Ci0gIH0KLSAg
YnJlYWs7Ci0gIGNhc2UgSURfQVJFQTogewotICAgIEhUTUxBcmVhRWxlbWVudEltcGwgJmFyZWEg
PSBzdGF0aWNfY2FzdDxIVE1MQXJlYUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgIHN3aXRj
aCAodG9rZW4pIHsKLSAgICBjYXNlIEFyZWFBY2Nlc3NLZXk6ICAgICAgIHJldHVybiBTdHJpbmco
YXJlYS5hY2Nlc3NLZXkoKSk7Ci0gICAgY2FzZSBBcmVhQWx0OiAgICAgICAgICAgICByZXR1cm4g
U3RyaW5nKGFyZWEuYWx0KCkpOwotICAgIGNhc2UgQXJlYUNvb3JkczogICAgICAgICAgcmV0dXJu
IFN0cmluZyhhcmVhLmNvb3JkcygpKTsKLSAgICBjYXNlIEFyZWFIcmVmOiAgICAgICAgICAgIHJl
dHVybiBTdHJpbmcoYXJlYS5ocmVmKCkpOwotICAgIGNhc2UgQXJlYUhhc2g6ICAgICAgICAgICAg
cmV0dXJuIFN0cmluZygnIycrS1VSTChhcmVhLmhyZWYoKS5zdHJpbmcoKSkucmVmKCkpOwotICAg
IGNhc2UgQXJlYUhvc3Q6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhLVVJMKGFyZWEuaHJlZigp
LnN0cmluZygpKS5ob3N0KCkpOwotICAgIGNhc2UgQXJlYUhvc3ROYW1lOiB7Ci0gICAgICBLVVJM
IHVybChhcmVhLmhyZWYoKS5zdHJpbmcoKSk7Ci0gICAgICBrZERlYnVnKDYwNzApIDw8ICJsaW5r
Ojpob3N0bmFtZSB1c2VzOiIgPDx1cmwudXJsKCk8PGVuZGw7Ci0gICAgICBpZiAodXJsLnBvcnQo
KT09MCkKLSAgICAgICAgcmV0dXJuIFN0cmluZyh1cmwuaG9zdCgpKTsKLSAgICAgIGVsc2UKLSAg
ICAgICAgcmV0dXJuIFN0cmluZyh1cmwuaG9zdCgpICsgIjoiICsgUVN0cmluZzo6bnVtYmVyKHVy
bC5wb3J0KCkpKTsKKyAgICAgICAgY2FzZSBNYXBBcmVhczogICAgICAgICAgIHJldHVybiBnZXRI
VE1MQ29sbGVjdGlvbihleGVjLCBtYXAuYXJlYXMoKS5nZXQoKSk7IC8vIHR5cGUgSFRNTENvbGxl
Y3Rpb24KKyAgICAgICAgY2FzZSBNYXBOYW1lOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcobWFw
Lm5hbWUoKSk7CiAgICAgfQotICAgIGNhc2UgQXJlYVBhdGhOYW1lOiAgICAgICAgcmV0dXJuIFN0
cmluZyhLVVJMKGFyZWEuaHJlZigpLnN0cmluZygpKS5wYXRoKCkpOwotICAgIGNhc2UgQXJlYVBv
cnQ6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhRU3RyaW5nOjpudW1iZXIoS1VSTChhcmVhLmhy
ZWYoKS5zdHJpbmcoKSkucG9ydCgpKSk7Ci0gICAgY2FzZSBBcmVhUHJvdG9jb2w6ICAgICAgICBy
ZXR1cm4gU3RyaW5nKEtVUkwoYXJlYS5ocmVmKCkuc3RyaW5nKCkpLnByb3RvY29sKCkrIjoiKTsK
LSAgICBjYXNlIEFyZWFTZWFyY2g6ICAgICAgICAgIHJldHVybiBTdHJpbmcoS1VSTChhcmVhLmhy
ZWYoKS5zdHJpbmcoKSkucXVlcnkoKSk7Ci0gICAgY2FzZSBBcmVhTm9IcmVmOiAgICAgICAgICBy
ZXR1cm4gQm9vbGVhbihhcmVhLm5vSHJlZigpKTsKLSAgICBjYXNlIEFyZWFTaGFwZTogICAgICAg
ICAgIHJldHVybiBTdHJpbmcoYXJlYS5zaGFwZSgpKTsKLSAgICBjYXNlIEFyZWFUYWJJbmRleDog
ICAgICAgIHJldHVybiBOdW1iZXIoYXJlYS50YWJJbmRleCgpKTsKLSAgICBjYXNlIEFyZWFUYXJn
ZXQ6ICAgICAgICAgIHJldHVybiBTdHJpbmcoYXJlYS50YXJnZXQoKSk7CisgICAgcmV0dXJuIFVu
ZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6YXJlYUdldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MQXJlYUVsZW1lbnRJbXBsJiBhcmVh
ID0gKnN0YXRpY19jYXN0PEhUTUxBcmVhRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRj
aCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBBcmVhQWNjZXNzS2V5OiAgICAgICByZXR1cm4gU3Ry
aW5nKGFyZWEuYWNjZXNzS2V5KCkpOworICAgICAgICBjYXNlIEFyZWFBbHQ6ICAgICAgICAgICAg
IHJldHVybiBTdHJpbmcoYXJlYS5hbHQoKSk7CisgICAgICAgIGNhc2UgQXJlYUNvb3JkczogICAg
ICAgICAgcmV0dXJuIFN0cmluZyhhcmVhLmNvb3JkcygpKTsKKyAgICAgICAgY2FzZSBBcmVhSHJl
ZjogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGFyZWEuaHJlZigpKTsKKyAgICAgICAgY2FzZSBB
cmVhSGFzaDogICAgICAgICAgICByZXR1cm4gU3RyaW5nKCcjJytLVVJMKGFyZWEuaHJlZigpLnN0
cmluZygpKS5yZWYoKSk7CisgICAgICAgIGNhc2UgQXJlYUhvc3Q6ICAgICAgICAgICAgcmV0dXJu
IFN0cmluZyhLVVJMKGFyZWEuaHJlZigpLnN0cmluZygpKS5ob3N0KCkpOworICAgICAgICBjYXNl
IEFyZWFIb3N0TmFtZTogeworICAgICAgICAgICAgS1VSTCB1cmwoYXJlYS5ocmVmKCkuc3RyaW5n
KCkpOworICAgICAgICAgICAga2REZWJ1Zyg2MDcwKSA8PCAibGluazo6aG9zdG5hbWUgdXNlczoi
IDw8dXJsLnVybCgpPDxlbmRsOworICAgICAgICAgICAgaWYgKHVybC5wb3J0KCk9PTApCisgICAg
ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh1cmwuaG9zdCgpKTsKKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKHVybC5ob3N0KCkgKyAiOiIgKyBRU3RyaW5n
OjpudW1iZXIodXJsLnBvcnQoKSkpOworICAgICAgICB9CisgICAgICAgIGNhc2UgQXJlYVBhdGhO
YW1lOiAgICAgICAgcmV0dXJuIFN0cmluZyhLVVJMKGFyZWEuaHJlZigpLnN0cmluZygpKS5wYXRo
KCkpOworICAgICAgICBjYXNlIEFyZWFQb3J0OiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoUVN0
cmluZzo6bnVtYmVyKEtVUkwoYXJlYS5ocmVmKCkuc3RyaW5nKCkpLnBvcnQoKSkpOworICAgICAg
ICBjYXNlIEFyZWFQcm90b2NvbDogICAgICAgIHJldHVybiBTdHJpbmcoS1VSTChhcmVhLmhyZWYo
KS5zdHJpbmcoKSkucHJvdG9jb2woKSsiOiIpOworICAgICAgICBjYXNlIEFyZWFTZWFyY2g6ICAg
ICAgICAgIHJldHVybiBTdHJpbmcoS1VSTChhcmVhLmhyZWYoKS5zdHJpbmcoKSkucXVlcnkoKSk7
CisgICAgICAgIGNhc2UgQXJlYU5vSHJlZjogICAgICAgICAgcmV0dXJuIEJvb2xlYW4oYXJlYS5u
b0hyZWYoKSk7CisgICAgICAgIGNhc2UgQXJlYVNoYXBlOiAgICAgICAgICAgcmV0dXJuIFN0cmlu
ZyhhcmVhLnNoYXBlKCkpOworICAgICAgICBjYXNlIEFyZWFUYWJJbmRleDogICAgICAgIHJldHVy
biBOdW1iZXIoYXJlYS50YWJJbmRleCgpKTsKKyAgICAgICAgY2FzZSBBcmVhVGFyZ2V0OiAgICAg
ICAgICByZXR1cm4gU3RyaW5nKGFyZWEudGFyZ2V0KCkpOwogICAgIH0KLSAgfQotICBicmVhazsK
LSAgY2FzZSBJRF9TQ1JJUFQ6IHsKLSAgICBIVE1MU2NyaXB0RWxlbWVudEltcGwgJnNjcmlwdCA9
IHN0YXRpY19jYXN0PEhUTUxTY3JpcHRFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICBzd2l0
Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBTY3JpcHRUZXh0OiAgICAgICAgICAgIHJldHVybiBTdHJp
bmcoc2NyaXB0LnRleHQoKSk7Ci0gICAgY2FzZSBTY3JpcHRIdG1sRm9yOiAgICAgICAgIHJldHVy
biBTdHJpbmcoc2NyaXB0Lmh0bWxGb3IoKSk7Ci0gICAgY2FzZSBTY3JpcHRFdmVudDogICAgICAg
ICAgIHJldHVybiBTdHJpbmcoc2NyaXB0LmV2ZW50KCkpOwotICAgIGNhc2UgU2NyaXB0Q2hhcnNl
dDogICAgICAgICByZXR1cm4gU3RyaW5nKHNjcmlwdC5jaGFyc2V0KCkpOwotICAgIGNhc2UgU2Ny
aXB0RGVmZXI6ICAgICAgICAgICByZXR1cm4gQm9vbGVhbihzY3JpcHQuZGVmZXIoKSk7Ci0gICAg
Y2FzZSBTY3JpcHRTcmM6ICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoc2NyaXB0LnNyYygpKTsK
LSAgICBjYXNlIFNjcmlwdFR5cGU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhzY3JpcHQudHlw
ZSgpKTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50Ojpz
Y3JpcHRHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRN
TFNjcmlwdEVsZW1lbnRJbXBsJiBzY3JpcHQgPSAqc3RhdGljX2Nhc3Q8SFRNTFNjcmlwdEVsZW1l
bnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgU2Ny
aXB0VGV4dDogICAgICAgICAgICByZXR1cm4gU3RyaW5nKHNjcmlwdC50ZXh0KCkpOworICAgICAg
ICBjYXNlIFNjcmlwdEh0bWxGb3I6ICAgICAgICAgcmV0dXJuIFN0cmluZyhzY3JpcHQuaHRtbEZv
cigpKTsKKyAgICAgICAgY2FzZSBTY3JpcHRFdmVudDogICAgICAgICAgIHJldHVybiBTdHJpbmco
c2NyaXB0LmV2ZW50KCkpOworICAgICAgICBjYXNlIFNjcmlwdENoYXJzZXQ6ICAgICAgICAgcmV0
dXJuIFN0cmluZyhzY3JpcHQuY2hhcnNldCgpKTsKKyAgICAgICAgY2FzZSBTY3JpcHREZWZlcjog
ICAgICAgICAgIHJldHVybiBCb29sZWFuKHNjcmlwdC5kZWZlcigpKTsKKyAgICAgICAgY2FzZSBT
Y3JpcHRTcmM6ICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoc2NyaXB0LnNyYygpKTsKKyAgICAg
ICAgY2FzZSBTY3JpcHRUeXBlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoc2NyaXB0LnR5cGUo
KSk7CiAgICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX1RBQkxFOiB7Ci0gICAgSFRNTFRh
YmxlRWxlbWVudEltcGwgJnRhYmxlID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlRWxlbWVudEltcGwg
Jj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgVGFibGVDYXB0aW9u
OiAgICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsdGFibGUuY2FwdGlvbigpKTsgLy8gdHlw
ZSBIVE1MVGFibGVDYXB0aW9uRWxlbWVudAotICAgIGNhc2UgVGFibGVUSGVhZDogICAgICAgICAg
IHJldHVybiBnZXRET01Ob2RlKGV4ZWMsdGFibGUudEhlYWQoKSk7IC8vIHR5cGUgSFRNTFRhYmxl
U2VjdGlvbkVsZW1lbnQKLSAgICBjYXNlIFRhYmxlVEZvb3Q6ICAgICAgICAgICByZXR1cm4gZ2V0
RE9NTm9kZShleGVjLHRhYmxlLnRGb290KCkpOyAvLyB0eXBlIEhUTUxUYWJsZVNlY3Rpb25FbGVt
ZW50Ci0gICAgY2FzZSBUYWJsZVJvd3M6ICAgICAgICAgICAgcmV0dXJuIGdldEhUTUxDb2xsZWN0
aW9uKGV4ZWMsIHRhYmxlLnJvd3MoKS5nZXQoKSk7IC8vIHR5cGUgSFRNTENvbGxlY3Rpb24KLSAg
ICBjYXNlIFRhYmxlVEJvZGllczogICAgICAgICByZXR1cm4gZ2V0SFRNTENvbGxlY3Rpb24oZXhl
YywgdGFibGUudEJvZGllcygpLmdldCgpKTsgLy8gdHlwZSBIVE1MQ29sbGVjdGlvbgotICAgIGNh
c2UgVGFibGVBbGlnbjogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGUuYWxpZ24oKSk7Ci0g
ICAgY2FzZSBUYWJsZUJnQ29sb3I6ICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZS5iZ0NvbG9y
KCkpOwotICAgIGNhc2UgVGFibGVCb3JkZXI6ICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGUu
Ym9yZGVyKCkpOwotICAgIGNhc2UgVGFibGVDZWxsUGFkZGluZzogICAgIHJldHVybiBTdHJpbmco
dGFibGUuY2VsbFBhZGRpbmcoKSk7Ci0gICAgY2FzZSBUYWJsZUNlbGxTcGFjaW5nOiAgICAgcmV0
dXJuIFN0cmluZyh0YWJsZS5jZWxsU3BhY2luZygpKTsKLSAgICBjYXNlIFRhYmxlRnJhbWU6ICAg
ICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlLmZyYW1lKCkpOwotICAgIGNhc2UgVGFibGVSdWxl
czogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGUucnVsZXMoKSk7Ci0gICAgY2FzZSBUYWJs
ZVN1bW1hcnk6ICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZS5zdW1tYXJ5KCkpOwotICAgIGNh
c2UgVGFibGVXaWR0aDogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGUud2lkdGgoKSk7Cisg
ICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6dGFibGVHZXR0
ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTFRhYmxlRWxl
bWVudEltcGwmIHRhYmxlID0gKnN0YXRpY19jYXN0PEhUTUxUYWJsZUVsZW1lbnRJbXBsKj4oaW1w
bCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgVGFibGVDYXB0aW9uOiAg
ICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsdGFibGUuY2FwdGlvbigpKTsgLy8gdHlwZSBI
VE1MVGFibGVDYXB0aW9uRWxlbWVudAorICAgICAgICBjYXNlIFRhYmxlVEhlYWQ6ICAgICAgICAg
ICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLHRhYmxlLnRIZWFkKCkpOyAvLyB0eXBlIEhUTUxUYWJs
ZVNlY3Rpb25FbGVtZW50CisgICAgICAgIGNhc2UgVGFibGVURm9vdDogICAgICAgICAgIHJldHVy
biBnZXRET01Ob2RlKGV4ZWMsdGFibGUudEZvb3QoKSk7IC8vIHR5cGUgSFRNTFRhYmxlU2VjdGlv
bkVsZW1lbnQKKyAgICAgICAgY2FzZSBUYWJsZVJvd3M6ICAgICAgICAgICAgcmV0dXJuIGdldEhU
TUxDb2xsZWN0aW9uKGV4ZWMsIHRhYmxlLnJvd3MoKS5nZXQoKSk7IC8vIHR5cGUgSFRNTENvbGxl
Y3Rpb24KKyAgICAgICAgY2FzZSBUYWJsZVRCb2RpZXM6ICAgICAgICAgcmV0dXJuIGdldEhUTUxD
b2xsZWN0aW9uKGV4ZWMsIHRhYmxlLnRCb2RpZXMoKS5nZXQoKSk7IC8vIHR5cGUgSFRNTENvbGxl
Y3Rpb24KKyAgICAgICAgY2FzZSBUYWJsZUFsaWduOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0
YWJsZS5hbGlnbigpKTsKKyAgICAgICAgY2FzZSBUYWJsZUJnQ29sb3I6ICAgICAgICAgcmV0dXJu
IFN0cmluZyh0YWJsZS5iZ0NvbG9yKCkpOworICAgICAgICBjYXNlIFRhYmxlQm9yZGVyOiAgICAg
ICAgICByZXR1cm4gU3RyaW5nKHRhYmxlLmJvcmRlcigpKTsKKyAgICAgICAgY2FzZSBUYWJsZUNl
bGxQYWRkaW5nOiAgICAgcmV0dXJuIFN0cmluZyh0YWJsZS5jZWxsUGFkZGluZygpKTsKKyAgICAg
ICAgY2FzZSBUYWJsZUNlbGxTcGFjaW5nOiAgICAgcmV0dXJuIFN0cmluZyh0YWJsZS5jZWxsU3Bh
Y2luZygpKTsKKyAgICAgICAgY2FzZSBUYWJsZUZyYW1lOiAgICAgICAgICAgcmV0dXJuIFN0cmlu
Zyh0YWJsZS5mcmFtZSgpKTsKKyAgICAgICAgY2FzZSBUYWJsZVJ1bGVzOiAgICAgICAgICAgcmV0
dXJuIFN0cmluZyh0YWJsZS5ydWxlcygpKTsKKyAgICAgICAgY2FzZSBUYWJsZVN1bW1hcnk6ICAg
ICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZS5zdW1tYXJ5KCkpOworICAgICAgICBjYXNlIFRhYmxl
V2lkdGg6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlLndpZHRoKCkpOwogICAgIH0KLSAg
fQotICBicmVhazsKLSAgY2FzZSBJRF9DQVBUSU9OOiB7Ci0gICAgSFRNTFRhYmxlQ2FwdGlvbkVs
ZW1lbnRJbXBsICZ0YWJsZUNhcHRpb24gPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVDYXB0aW9uRWxl
bWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1
ZSBIVE1MRWxlbWVudDo6dGFibGVDYXB0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRv
a2VuKSBjb25zdAoreworICAgIEhUTUxUYWJsZUNhcHRpb25FbGVtZW50SW1wbCYgdGFibGVDYXB0
aW9uID0gKnN0YXRpY19jYXN0PEhUTUxUYWJsZUNhcHRpb25FbGVtZW50SW1wbCo+KGltcGwoKSk7
CisgICAgaWYgKHRva2VuID09IFRhYmxlQ2FwdGlvbkFsaWduKQorICAgICAgICByZXR1cm4gU3Ry
aW5nKHRhYmxlQ2FwdGlvbi5hbGlnbigpKTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisK
K1ZhbHVlIEhUTUxFbGVtZW50Ojp0YWJsZUNvbEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0
b2tlbikgY29uc3QKK3sKKyAgICBIVE1MVGFibGVDb2xFbGVtZW50SW1wbCYgdGFibGVDb2wgPSAq
c3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ29sRWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIHN3aXRj
aCAodG9rZW4pIHsKLSAgICBjYXNlIFRhYmxlQ2FwdGlvbkFsaWduOiAgICAgICByZXR1cm4gU3Ry
aW5nKHRhYmxlQ2FwdGlvbi5hbGlnbigpKTsKKyAgICAgICAgY2FzZSBUYWJsZUNvbEFsaWduOiAg
ICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNvbC5hbGlnbigpKTsKKyAgICAgICAgY2FzZSBU
YWJsZUNvbENoOiAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNvbC5jaCgpKTsKKyAg
ICAgICAgY2FzZSBUYWJsZUNvbENoT2ZmOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNv
bC5jaE9mZigpKTsKKyAgICAgICAgY2FzZSBUYWJsZUNvbFNwYW46ICAgICAgICAgICAgcmV0dXJu
IE51bWJlcih0YWJsZUNvbC5zcGFuKCkpOworICAgICAgICBjYXNlIFRhYmxlQ29sVkFsaWduOiAg
ICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ29sLnZBbGlnbigpKTsKKyAgICAgICAgY2FzZSBU
YWJsZUNvbFdpZHRoOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNvbC53aWR0aCgpKTsK
ICAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfQ09MOiB7Ci0gICAgSFRNTFRhYmxlQ29s
RWxlbWVudEltcGwgJnRhYmxlQ29sID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ29sRWxlbWVudElt
cGwgJj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgVGFibGVDb2xB
bGlnbjogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVDb2wuYWxpZ24oKSk7Ci0gICAgY2Fz
ZSBUYWJsZUNvbENoOiAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNvbC5jaCgpKTsK
LSAgICBjYXNlIFRhYmxlQ29sQ2hPZmY6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ29s
LmNoT2ZmKCkpOwotICAgIGNhc2UgVGFibGVDb2xTcGFuOiAgICAgICAgICAgIHJldHVybiBOdW1i
ZXIodGFibGVDb2wuc3BhbigpKTsKLSAgICBjYXNlIFRhYmxlQ29sVkFsaWduOiAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKHRhYmxlQ29sLnZBbGlnbigpKTsKLSAgICBjYXNlIFRhYmxlQ29sV2lkdGg6
ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ29sLndpZHRoKCkpOworICAgIHJldHVybiBV
bmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OnRhYmxlU2VjdGlvbkdldHRlcihF
eGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MVGFibGVTZWN0aW9u
RWxlbWVudEltcGwmIHRhYmxlU2VjdGlvbiA9ICpzdGF0aWNfY2FzdDxIVE1MVGFibGVTZWN0aW9u
RWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2Fz
ZSBUYWJsZVNlY3Rpb25BbGlnbjogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVTZWN0aW9u
LmFsaWduKCkpOworICAgICAgICBjYXNlIFRhYmxlU2VjdGlvbkNoOiAgICAgICAgICAgICAgcmV0
dXJuIFN0cmluZyh0YWJsZVNlY3Rpb24uY2goKSk7CisgICAgICAgIGNhc2UgVGFibGVTZWN0aW9u
Q2hPZmY6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlU2VjdGlvbi5jaE9mZigpKTsKKyAg
ICAgICAgY2FzZSBUYWJsZVNlY3Rpb25WQWxpZ246ICAgICAgICAgIHJldHVybiBTdHJpbmcodGFi
bGVTZWN0aW9uLnZBbGlnbigpKTsKKyAgICAgICAgY2FzZSBUYWJsZVNlY3Rpb25Sb3dzOiAgICAg
ICAgICAgIHJldHVybiBnZXRIVE1MQ29sbGVjdGlvbihleGVjLCB0YWJsZVNlY3Rpb24ucm93cygp
LmdldCgpKTsgLy8gdHlwZSBIVE1MQ29sbGVjdGlvbgogICAgIH0KLSAgfQotICBicmVhazsKLSAg
Y2FzZSBJRF9USEVBRDoKLSAgY2FzZSBJRF9UQk9EWToKLSAgY2FzZSBJRF9URk9PVDogewotICAg
IEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbCAmdGFibGVTZWN0aW9uID0gc3RhdGljX2Nhc3Q8
SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgIHN3aXRjaCAodG9r
ZW4pIHsKLSAgICBjYXNlIFRhYmxlU2VjdGlvbkFsaWduOiAgICAgICAgICAgcmV0dXJuIFN0cmlu
Zyh0YWJsZVNlY3Rpb24uYWxpZ24oKSk7Ci0gICAgY2FzZSBUYWJsZVNlY3Rpb25DaDogICAgICAg
ICAgICAgIHJldHVybiBTdHJpbmcodGFibGVTZWN0aW9uLmNoKCkpOwotICAgIGNhc2UgVGFibGVT
ZWN0aW9uQ2hPZmY6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlU2VjdGlvbi5jaE9mZigp
KTsKLSAgICBjYXNlIFRhYmxlU2VjdGlvblZBbGlnbjogICAgICAgICAgcmV0dXJuIFN0cmluZyh0
YWJsZVNlY3Rpb24udkFsaWduKCkpOwotICAgIGNhc2UgVGFibGVTZWN0aW9uUm93czogICAgICAg
ICAgICByZXR1cm4gZ2V0SFRNTENvbGxlY3Rpb24oZXhlYywgdGFibGVTZWN0aW9uLnJvd3MoKS5n
ZXQoKSk7IC8vIHR5cGUgSFRNTENvbGxlY3Rpb24KKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9
CisKK1ZhbHVlIEhUTUxFbGVtZW50Ojp0YWJsZVJvd0dldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGlu
dCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MVGFibGVSb3dFbGVtZW50SW1wbCYgdGFibGVSb3cg
PSAqc3RhdGljX2Nhc3Q8SFRNTFRhYmxlUm93RWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3
aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBUYWJsZVJvd1Jvd0luZGV4OiAgICAgICAgcmV0
dXJuIE51bWJlcih0YWJsZVJvdy5yb3dJbmRleCgpKTsKKyAgICAgICAgY2FzZSBUYWJsZVJvd1Nl
Y3Rpb25Sb3dJbmRleDogcmV0dXJuIE51bWJlcih0YWJsZVJvdy5zZWN0aW9uUm93SW5kZXgoKSk7
CisgICAgICAgIGNhc2UgVGFibGVSb3dDZWxsczogICAgICAgICAgIHJldHVybiBnZXRIVE1MQ29s
bGVjdGlvbihleGVjLCB0YWJsZVJvdy5jZWxscygpLmdldCgpKTsgLy8gdHlwZSBIVE1MQ29sbGVj
dGlvbgorICAgICAgICBjYXNlIFRhYmxlUm93QWxpZ246ICAgICAgICAgICByZXR1cm4gU3RyaW5n
KHRhYmxlUm93LmFsaWduKCkpOworICAgICAgICBjYXNlIFRhYmxlUm93QmdDb2xvcjogICAgICAg
ICByZXR1cm4gU3RyaW5nKHRhYmxlUm93LmJnQ29sb3IoKSk7CisgICAgICAgIGNhc2UgVGFibGVS
b3dDaDogICAgICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVSb3cuY2goKSk7CisgICAgICAg
IGNhc2UgVGFibGVSb3dDaE9mZjogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVSb3cuY2hP
ZmYoKSk7CisgICAgICAgIGNhc2UgVGFibGVSb3dWQWxpZ246ICAgICAgICAgIHJldHVybiBTdHJp
bmcodGFibGVSb3cudkFsaWduKCkpOwogICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9U
UjogewotICAgSFRNTFRhYmxlUm93RWxlbWVudEltcGwgJnRhYmxlUm93ID0gc3RhdGljX2Nhc3Q8
SFRNTFRhYmxlUm93RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICBzd2l0Y2ggKHRva2VuKSB7
Ci0gICBjYXNlIFRhYmxlUm93Um93SW5kZXg6ICAgICAgICByZXR1cm4gTnVtYmVyKHRhYmxlUm93
LnJvd0luZGV4KCkpOwotICAgY2FzZSBUYWJsZVJvd1NlY3Rpb25Sb3dJbmRleDogcmV0dXJuIE51
bWJlcih0YWJsZVJvdy5zZWN0aW9uUm93SW5kZXgoKSk7Ci0gICBjYXNlIFRhYmxlUm93Q2VsbHM6
ICAgICAgICAgICByZXR1cm4gZ2V0SFRNTENvbGxlY3Rpb24oZXhlYywgdGFibGVSb3cuY2VsbHMo
KS5nZXQoKSk7IC8vIHR5cGUgSFRNTENvbGxlY3Rpb24KLSAgIGNhc2UgVGFibGVSb3dBbGlnbjog
ICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVSb3cuYWxpZ24oKSk7Ci0gICBjYXNlIFRhYmxl
Um93QmdDb2xvcjogICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlUm93LmJnQ29sb3IoKSk7Ci0g
ICBjYXNlIFRhYmxlUm93Q2g6ICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlUm93LmNo
KCkpOwotICAgY2FzZSBUYWJsZVJvd0NoT2ZmOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJs
ZVJvdy5jaE9mZigpKTsKLSAgIGNhc2UgVGFibGVSb3dWQWxpZ246ICAgICAgICAgIHJldHVybiBT
dHJpbmcodGFibGVSb3cudkFsaWduKCkpOwotICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElE
X1RIOgotICBjYXNlIElEX1REOiB7Ci0gICAgSFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsICZ0YWJs
ZUNlbGwgPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVDZWxsRWxlbWVudEltcGwgJj4oZWxlbWVudCk7
Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgVGFibGVDZWxsQ2VsbEluZGV4OiAgICAg
ICByZXR1cm4gTnVtYmVyKHRhYmxlQ2VsbC5jZWxsSW5kZXgoKSk7Ci0gICAgY2FzZSBUYWJsZUNl
bGxBYmJyOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVDZWxsLmFiYnIoKSk7Ci0gICAg
Y2FzZSBUYWJsZUNlbGxBbGlnbjogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVDZWxsLmFs
aWduKCkpOwotICAgIGNhc2UgVGFibGVDZWxsQXhpczogICAgICAgICAgICByZXR1cm4gU3RyaW5n
KHRhYmxlQ2VsbC5heGlzKCkpOwotICAgIGNhc2UgVGFibGVDZWxsQmdDb2xvcjogICAgICAgICBy
ZXR1cm4gU3RyaW5nKHRhYmxlQ2VsbC5iZ0NvbG9yKCkpOwotICAgIGNhc2UgVGFibGVDZWxsQ2g6
ICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ2VsbC5jaCgpKTsKLSAgICBjYXNlIFRh
YmxlQ2VsbENoT2ZmOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNlbGwuY2hPZmYoKSk7
Ci0gICAgY2FzZSBUYWJsZUNlbGxDb2xTcGFuOiAgICAgICAgIHJldHVybiBOdW1iZXIodGFibGVD
ZWxsLmNvbFNwYW4oKSk7Ci0gICAgY2FzZSBUYWJsZUNlbGxIZWFkZXJzOiAgICAgICAgIHJldHVy
biBTdHJpbmcodGFibGVDZWxsLmhlYWRlcnMoKSk7Ci0gICAgY2FzZSBUYWJsZUNlbGxIZWlnaHQ6
ICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVDZWxsLmhlaWdodCgpKTsKLSAgICBjYXNlIFRh
YmxlQ2VsbE5vV3JhcDogICAgICAgICAgcmV0dXJuIEJvb2xlYW4odGFibGVDZWxsLm5vV3JhcCgp
KTsKLSAgICBjYXNlIFRhYmxlQ2VsbFJvd1NwYW46ICAgICAgICAgcmV0dXJuIE51bWJlcih0YWJs
ZUNlbGwucm93U3BhbigpKTsKLSAgICBjYXNlIFRhYmxlQ2VsbFNjb3BlOiAgICAgICAgICAgcmV0
dXJuIFN0cmluZyh0YWJsZUNlbGwuc2NvcGUoKSk7Ci0gICAgY2FzZSBUYWJsZUNlbGxWQWxpZ246
ICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVDZWxsLnZBbGlnbigpKTsKLSAgICBjYXNlIFRh
YmxlQ2VsbFdpZHRoOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNlbGwud2lkdGgoKSk7
CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6dGFibGVD
ZWxsR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxU
YWJsZUNlbGxFbGVtZW50SW1wbCYgdGFibGVDZWxsID0gKnN0YXRpY19jYXN0PEhUTUxUYWJsZUNl
bGxFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICBj
YXNlIFRhYmxlQ2VsbENlbGxJbmRleDogICAgICAgcmV0dXJuIE51bWJlcih0YWJsZUNlbGwuY2Vs
bEluZGV4KCkpOworICAgICAgICBjYXNlIFRhYmxlQ2VsbEFiYnI6ICAgICAgICAgICAgcmV0dXJu
IFN0cmluZyh0YWJsZUNlbGwuYWJicigpKTsKKyAgICAgICAgY2FzZSBUYWJsZUNlbGxBbGlnbjog
ICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVDZWxsLmFsaWduKCkpOworICAgICAgICBjYXNl
IFRhYmxlQ2VsbEF4aXM6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNlbGwuYXhpcygp
KTsKKyAgICAgICAgY2FzZSBUYWJsZUNlbGxCZ0NvbG9yOiAgICAgICAgIHJldHVybiBTdHJpbmco
dGFibGVDZWxsLmJnQ29sb3IoKSk7CisgICAgICAgIGNhc2UgVGFibGVDZWxsQ2g6ICAgICAgICAg
ICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ2VsbC5jaCgpKTsKKyAgICAgICAgY2FzZSBUYWJsZUNl
bGxDaE9mZjogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVDZWxsLmNoT2ZmKCkpOworICAg
ICAgICBjYXNlIFRhYmxlQ2VsbENvbFNwYW46ICAgICAgICAgcmV0dXJuIE51bWJlcih0YWJsZUNl
bGwuY29sU3BhbigpKTsKKyAgICAgICAgY2FzZSBUYWJsZUNlbGxIZWFkZXJzOiAgICAgICAgIHJl
dHVybiBTdHJpbmcodGFibGVDZWxsLmhlYWRlcnMoKSk7CisgICAgICAgIGNhc2UgVGFibGVDZWxs
SGVpZ2h0OiAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ2VsbC5oZWlnaHQoKSk7CisgICAg
ICAgIGNhc2UgVGFibGVDZWxsTm9XcmFwOiAgICAgICAgICByZXR1cm4gQm9vbGVhbih0YWJsZUNl
bGwubm9XcmFwKCkpOworICAgICAgICBjYXNlIFRhYmxlQ2VsbFJvd1NwYW46ICAgICAgICAgcmV0
dXJuIE51bWJlcih0YWJsZUNlbGwucm93U3BhbigpKTsKKyAgICAgICAgY2FzZSBUYWJsZUNlbGxT
Y29wZTogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVDZWxsLnNjb3BlKCkpOworICAgICAg
ICBjYXNlIFRhYmxlQ2VsbFZBbGlnbjogICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNlbGwu
dkFsaWduKCkpOworICAgICAgICBjYXNlIFRhYmxlQ2VsbFdpZHRoOiAgICAgICAgICAgcmV0dXJu
IFN0cmluZyh0YWJsZUNlbGwud2lkdGgoKSk7CiAgICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNl
IElEX0ZSQU1FU0VUOiB7Ci0gICAgSFRNTEZyYW1lU2V0RWxlbWVudEltcGwgJmZyYW1lU2V0ID0g
c3RhdGljX2Nhc3Q8SFRNTEZyYW1lU2V0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgcmV0
dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6ZnJhbWVTZXRHZXR0ZXIo
RXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTEZyYW1lU2V0RWxl
bWVudEltcGwmIGZyYW1lU2V0ID0gKnN0YXRpY19jYXN0PEhUTUxGcmFtZVNldEVsZW1lbnRJbXBs
Kj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBGcmFtZVNldENvbHM6
ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhmcmFtZVNldC5jb2xzKCkpOwotICAgIGNhc2UgRnJh
bWVTZXRSb3dzOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoZnJhbWVTZXQucm93cygpKTsKKyAg
ICAgICAgY2FzZSBGcmFtZVNldENvbHM6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhmcmFtZVNl
dC5jb2xzKCkpOworICAgICAgICBjYXNlIEZyYW1lU2V0Um93czogICAgICAgICAgICByZXR1cm4g
U3RyaW5nKGZyYW1lU2V0LnJvd3MoKSk7CiAgICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElE
X0ZSQU1FOiB7Ci0gICAgSFRNTEZyYW1lRWxlbWVudEltcGwgJmZyYW1lRWxlbWVudCA9IHN0YXRp
Y19jYXN0PEhUTUxGcmFtZUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgIHN3aXRjaCAodG9r
ZW4pIHsKLSAgICBjYXNlIEZyYW1lQ29udGVudERvY3VtZW50OiByZXR1cm4gY2hlY2tOb2RlU2Vj
dXJpdHkoZXhlYyxmcmFtZUVsZW1lbnQuY29udGVudERvY3VtZW50KCkpID8gCi0JCQkJICAgICAg
Z2V0RE9NTm9kZShleGVjLCBmcmFtZUVsZW1lbnQuY29udGVudERvY3VtZW50KCkpIDogVW5kZWZp
bmVkKCk7Ci0gICAgY2FzZSBGcmFtZUNvbnRlbnRXaW5kb3c6ICAgcmV0dXJuIGNoZWNrTm9kZVNl
Y3VyaXR5KGV4ZWMsZnJhbWVFbGVtZW50LmNvbnRlbnREb2N1bWVudCgpKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgPyBXaW5kb3c6OnJldHJpZXZlKGZyYW1lRWxlbWVudC5j
b250ZW50UGFydCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBVbmRl
ZmluZWQoKTsKLSAgICBjYXNlIEZyYW1lRnJhbWVCb3JkZXI6ICAgICByZXR1cm4gU3RyaW5nKGZy
YW1lRWxlbWVudC5mcmFtZUJvcmRlcigpKTsKLSAgICBjYXNlIEZyYW1lTG9uZ0Rlc2M6ICAgICAg
ICByZXR1cm4gU3RyaW5nKGZyYW1lRWxlbWVudC5sb25nRGVzYygpKTsKLSAgICBjYXNlIEZyYW1l
TWFyZ2luSGVpZ2h0OiAgICByZXR1cm4gU3RyaW5nKGZyYW1lRWxlbWVudC5tYXJnaW5IZWlnaHQo
KSk7Ci0gICAgY2FzZSBGcmFtZU1hcmdpbldpZHRoOiAgICAgcmV0dXJuIFN0cmluZyhmcmFtZUVs
ZW1lbnQubWFyZ2luV2lkdGgoKSk7Ci0gICAgY2FzZSBGcmFtZU5hbWU6ICAgICAgICAgICAgcmV0
dXJuIFN0cmluZyhmcmFtZUVsZW1lbnQubmFtZSgpKTsKLSAgICBjYXNlIEZyYW1lTm9SZXNpemU6
ICAgICAgICByZXR1cm4gQm9vbGVhbihmcmFtZUVsZW1lbnQubm9SZXNpemUoKSk7Ci0gICAgY2Fz
ZSBGcmFtZVNjcm9sbGluZzogICAgICAgcmV0dXJuIFN0cmluZyhmcmFtZUVsZW1lbnQuc2Nyb2xs
aW5nKCkpOwotICAgIGNhc2UgRnJhbWVTcmM6Ci0gICAgY2FzZSBGcmFtZUxvY2F0aW9uOiAgICAg
ICAgcmV0dXJuIFN0cmluZyhmcmFtZUVsZW1lbnQuc3JjKCkpOworICAgIHJldHVybiBVbmRlZmlu
ZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OmZyYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhl
YywgaW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxGcmFtZUVsZW1lbnRJbXBsJiBmcmFtZUVs
ZW1lbnQgPSAqc3RhdGljX2Nhc3Q8SFRNTEZyYW1lRWxlbWVudEltcGwqPihpbXBsKCkpOworICAg
IHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBGcmFtZUNvbnRlbnREb2N1bWVudDogcmV0
dXJuIGNoZWNrTm9kZVNlY3VyaXR5KGV4ZWMsZnJhbWVFbGVtZW50LmNvbnRlbnREb2N1bWVudCgp
KSA/IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0RE9NTm9k
ZShleGVjLCBmcmFtZUVsZW1lbnQuY29udGVudERvY3VtZW50KCkpIDogVW5kZWZpbmVkKCk7Cisg
ICAgICAgIGNhc2UgRnJhbWVDb250ZW50V2luZG93OiAgIHJldHVybiBjaGVja05vZGVTZWN1cml0
eShleGVjLGZyYW1lRWxlbWVudC5jb250ZW50RG9jdW1lbnQoKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA/IFdpbmRvdzo6cmV0cmlldmUoZnJhbWVFbGVtZW50LmNv
bnRlbnRQYXJ0KCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBV
bmRlZmluZWQoKTsKKyAgICAgICAgY2FzZSBGcmFtZUZyYW1lQm9yZGVyOiAgICAgcmV0dXJuIFN0
cmluZyhmcmFtZUVsZW1lbnQuZnJhbWVCb3JkZXIoKSk7CisgICAgICAgIGNhc2UgRnJhbWVMb25n
RGVzYzogICAgICAgIHJldHVybiBTdHJpbmcoZnJhbWVFbGVtZW50LmxvbmdEZXNjKCkpOworICAg
ICAgICBjYXNlIEZyYW1lTWFyZ2luSGVpZ2h0OiAgICByZXR1cm4gU3RyaW5nKGZyYW1lRWxlbWVu
dC5tYXJnaW5IZWlnaHQoKSk7CisgICAgICAgIGNhc2UgRnJhbWVNYXJnaW5XaWR0aDogICAgIHJl
dHVybiBTdHJpbmcoZnJhbWVFbGVtZW50Lm1hcmdpbldpZHRoKCkpOworICAgICAgICBjYXNlIEZy
YW1lTmFtZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGZyYW1lRWxlbWVudC5uYW1lKCkpOwor
ICAgICAgICBjYXNlIEZyYW1lTm9SZXNpemU6ICAgICAgICByZXR1cm4gQm9vbGVhbihmcmFtZUVs
ZW1lbnQubm9SZXNpemUoKSk7CisgICAgICAgIGNhc2UgRnJhbWVTY3JvbGxpbmc6ICAgICAgIHJl
dHVybiBTdHJpbmcoZnJhbWVFbGVtZW50LnNjcm9sbGluZygpKTsKKyAgICAgICAgY2FzZSBGcmFt
ZVNyYzoKKyAgICAgICAgY2FzZSBGcmFtZUxvY2F0aW9uOiAgICAgICAgcmV0dXJuIFN0cmluZyhm
cmFtZUVsZW1lbnQuc3JjKCkpOwogICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9JRlJB
TUU6IHsKLSAgICBIVE1MSUZyYW1lRWxlbWVudEltcGwgJmlGcmFtZSA9IHN0YXRpY19jYXN0PEhU
TUxJRnJhbWVFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0g
ICAgY2FzZSBJRnJhbWVBbGlnbjogICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpRnJhbWUu
YWxpZ24oKSk7Ci0gICAgICAvLyAjIyMgc2VjdXJpdHkgY2hlY2sgPwotICAgIGNhc2UgSUZyYW1l
RG9jdW1lbnQ6IC8vIG5vbi1zdGFuZGFyZCwgbWFwcGVkIHRvIGNvbnRlbnREb2N1bWVudAotICAg
IGNhc2UgSUZyYW1lQ29udGVudERvY3VtZW50OiByZXR1cm4gY2hlY2tOb2RlU2VjdXJpdHkoZXhl
YyxpRnJhbWUuY29udGVudERvY3VtZW50KCkpID8gCi0JCQkJICBnZXRET01Ob2RlKGV4ZWMsIGlG
cmFtZS5jb250ZW50RG9jdW1lbnQoKSkgOiBVbmRlZmluZWQoKTsKLSAgICBjYXNlIElGcmFtZUNv
bnRlbnRXaW5kb3c6CXJldHVybiBjaGVja05vZGVTZWN1cml0eShleGVjLGlGcmFtZS5jb250ZW50
RG9jdW1lbnQoKSkgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFdpbmRv
dzo6cmV0cmlldmUoaUZyYW1lLmNvbnRlbnRQYXJ0KCkpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA6IFVuZGVmaW5lZCgpOwotICAgIGNhc2UgSUZyYW1lRnJhbWVCb3JkZXI6
ICAgICByZXR1cm4gU3RyaW5nKGlGcmFtZS5mcmFtZUJvcmRlcigpKTsKLSAgICBjYXNlIElGcmFt
ZUhlaWdodDogICAgICAgICAgcmV0dXJuIFN0cmluZyhpRnJhbWUuaGVpZ2h0KCkpOwotICAgIGNh
c2UgSUZyYW1lTG9uZ0Rlc2M6ICAgICAgICByZXR1cm4gU3RyaW5nKGlGcmFtZS5sb25nRGVzYygp
KTsKLSAgICBjYXNlIElGcmFtZU1hcmdpbkhlaWdodDogICAgcmV0dXJuIFN0cmluZyhpRnJhbWUu
bWFyZ2luSGVpZ2h0KCkpOwotICAgIGNhc2UgSUZyYW1lTWFyZ2luV2lkdGg6ICAgICByZXR1cm4g
U3RyaW5nKGlGcmFtZS5tYXJnaW5XaWR0aCgpKTsKLSAgICBjYXNlIElGcmFtZU5hbWU6ICAgICAg
ICAgICAgcmV0dXJuIFN0cmluZyhpRnJhbWUubmFtZSgpKTsKLSAgICBjYXNlIElGcmFtZVNjcm9s
bGluZzogICAgICAgcmV0dXJuIFN0cmluZyhpRnJhbWUuc2Nyb2xsaW5nKCkpOwotICAgIGNhc2Ug
SUZyYW1lU3JjOiAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGlGcmFtZS5zcmMoKSk7Ci0gICAg
Y2FzZSBJRnJhbWVXaWR0aDogICAgICAgICAgIHJldHVybiBTdHJpbmcoaUZyYW1lLndpZHRoKCkp
OworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OmlGcmFt
ZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MSUZy
YW1lRWxlbWVudEltcGwmIGlGcmFtZSA9ICpzdGF0aWNfY2FzdDxIVE1MSUZyYW1lRWxlbWVudElt
cGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBJRnJhbWVB
bGlnbjogICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpRnJhbWUuYWxpZ24oKSk7CisgICAg
ICAgICAgLy8gIyMjIHNlY3VyaXR5IGNoZWNrID8KKyAgICAgICAgY2FzZSBJRnJhbWVEb2N1bWVu
dDogLy8gbm9uLXN0YW5kYXJkLCBtYXBwZWQgdG8gY29udGVudERvY3VtZW50CisgICAgICAgIGNh
c2UgSUZyYW1lQ29udGVudERvY3VtZW50OiByZXR1cm4gY2hlY2tOb2RlU2VjdXJpdHkoZXhlYyxp
RnJhbWUuY29udGVudERvY3VtZW50KCkpID8gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdldERPTU5vZGUoZXhlYywgaUZyYW1lLmNvbnRlbnREb2N1bWVudCgpKSA6IFVu
ZGVmaW5lZCgpOworICAgICAgICBjYXNlIElGcmFtZUNvbnRlbnRXaW5kb3c6CXJldHVybiBjaGVj
a05vZGVTZWN1cml0eShleGVjLGlGcmFtZS5jb250ZW50RG9jdW1lbnQoKSkgCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBXaW5kb3c6OnJldHJpZXZlKGlGcmFtZS5j
b250ZW50UGFydCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDog
VW5kZWZpbmVkKCk7CisgICAgICAgIGNhc2UgSUZyYW1lRnJhbWVCb3JkZXI6ICAgICByZXR1cm4g
U3RyaW5nKGlGcmFtZS5mcmFtZUJvcmRlcigpKTsKKyAgICAgICAgY2FzZSBJRnJhbWVIZWlnaHQ6
ICAgICAgICAgIHJldHVybiBTdHJpbmcoaUZyYW1lLmhlaWdodCgpKTsKKyAgICAgICAgY2FzZSBJ
RnJhbWVMb25nRGVzYzogICAgICAgIHJldHVybiBTdHJpbmcoaUZyYW1lLmxvbmdEZXNjKCkpOwor
ICAgICAgICBjYXNlIElGcmFtZU1hcmdpbkhlaWdodDogICAgcmV0dXJuIFN0cmluZyhpRnJhbWUu
bWFyZ2luSGVpZ2h0KCkpOworICAgICAgICBjYXNlIElGcmFtZU1hcmdpbldpZHRoOiAgICAgcmV0
dXJuIFN0cmluZyhpRnJhbWUubWFyZ2luV2lkdGgoKSk7CisgICAgICAgIGNhc2UgSUZyYW1lTmFt
ZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGlGcmFtZS5uYW1lKCkpOworICAgICAgICBjYXNl
IElGcmFtZVNjcm9sbGluZzogICAgICAgcmV0dXJuIFN0cmluZyhpRnJhbWUuc2Nyb2xsaW5nKCkp
OworICAgICAgICBjYXNlIElGcmFtZVNyYzogICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpRnJh
bWUuc3JjKCkpOworICAgICAgICBjYXNlIElGcmFtZVdpZHRoOiAgICAgICAgICAgcmV0dXJuIFN0
cmluZyhpRnJhbWUud2lkdGgoKSk7CiAgICAgfQotICAgIGJyZWFrOwotICB9Ci0gIH0gLy8geGVt
YWNzIChvciBhcm50KSBjb3VsZCBiZSBhIGJpdCBzbWFydGVyIHdoZW4gaXQgY29tZXMgdG8gaW5k
ZW50aW5nIHN3aXRjaCgpZXMgOykKLSAgLy8gaXRzIG5vdCBhcm50IHRvIGJsYW1lIC0gaXRzIHRo
ZSBvcmlnaW5hbCBTdHJvdXN0cnVwIHN0eWxlIHdlIGxpa2UgOikgKERpcmspCisgICAgcmV0dXJu
IFVuZGVmaW5lZCgpOworfQogCi0gIC8vIGdlbmVyaWMgcHJvcGVydGllcwotICBzd2l0Y2ggKHRv
a2VuKSB7Ci0gIGNhc2UgRWxlbWVudElkOgotICAgICAgLy8gaWh0LmNvbSByZWxpZXMgb24gdGhp
cyB2YWx1ZSBiZWluZyAiIiB3aGVuIG5vIGlkIGlzIHByZXNlbnQuICBPdGhlciBicm93c2VycyBk
byB0aGlzIGFzIHdlbGwuCi0gICAgICAvLyBTbyB3ZSB1c2UgU3RyaW5nKCkgaW5zdGVhZCBvZiBT
dHJpbmcoKSBoZXJlLgotICAgIHJldHVybiBTdHJpbmcoZWxlbWVudC5pZERPTSgpKTsKLSAgY2Fz
ZSBFbGVtZW50VGl0bGU6Ci0gICAgcmV0dXJuIFN0cmluZyhlbGVtZW50LnRpdGxlKCkpOwotICBj
YXNlIEVsZW1lbnRMYW5nOgotICAgIHJldHVybiBTdHJpbmcoZWxlbWVudC5sYW5nKCkpOwotICBj
YXNlIEVsZW1lbnREaXI6Ci0gICAgcmV0dXJuIFN0cmluZyhlbGVtZW50LmRpcigpKTsKLSAgY2Fz
ZSBFbGVtZW50Q2xhc3NOYW1lOgotICAgIHJldHVybiBTdHJpbmcoZWxlbWVudC5jbGFzc05hbWUo
KSk7Ci0gIGNhc2UgRWxlbWVudElubmVySFRNTDoKLSAgICByZXR1cm4gU3RyaW5nKGVsZW1lbnQu
aW5uZXJIVE1MKCkpOwotICBjYXNlIEVsZW1lbnRJbm5lclRleHQ6Ci0gICAgaWYgKERvY3VtZW50
SW1wbCogZG9jID0gaW1wbCgpLT5nZXREb2N1bWVudCgpKQotICAgICAgZG9jLT51cGRhdGVMYXlv
dXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKLSAgICByZXR1cm4gU3RyaW5nKGVsZW1lbnQu
aW5uZXJUZXh0KCkpOwotICBjYXNlIEVsZW1lbnRPdXRlckhUTUw6Ci0gICAgcmV0dXJuIFN0cmlu
ZyhlbGVtZW50Lm91dGVySFRNTCgpKTsKLSAgY2FzZSBFbGVtZW50T3V0ZXJUZXh0OgotICAgIHJl
dHVybiBTdHJpbmcoZWxlbWVudC5vdXRlclRleHQoKSk7Ci0gIGNhc2UgRWxlbWVudERvY3VtZW50
OgotICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsZWxlbWVudC5vd25lckRvY3VtZW50KCkpOwot
ICBjYXNlIEVsZW1lbnRDaGlsZHJlbjoKLSAgICByZXR1cm4gZ2V0SFRNTENvbGxlY3Rpb24oZXhl
YywgZWxlbWVudC5jaGlsZHJlbigpLmdldCgpKTsKLSAgY2FzZSBFbGVtZW50Q29udGVudEVkaXRh
YmxlOgotICAgIHJldHVybiBTdHJpbmcoZWxlbWVudC5jb250ZW50RWRpdGFibGUoKSk7Ci0gIGNh
c2UgRWxlbWVudElzQ29udGVudEVkaXRhYmxlOgotICAgIHJldHVybiBCb29sZWFuKGVsZW1lbnQu
aXNDb250ZW50RWRpdGFibGUoKSk7Ci0gIC8vICMjIyB3aGF0IGFib3V0IHN0eWxlPyBvciBpcyB0
aGlzIHVzZWQgaW5zdGVhZCBmb3IgRE9NMiBzdHlsZXNoZWV0cz8KLSAgfQotICBrZFdhcm5pbmco
KSA8PCAiSFRNTEVsZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkgdW5oYW5kbGVkIHRva2VuICIgPDwg
dG9rZW4gPDwgZW5kbDsKLSAgcmV0dXJuIFVuZGVmaW5lZCgpOworVmFsdWUgSFRNTEVsZW1lbnQ6
Om1hcnF1ZWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAg
Ly8gRklYTUU6IEZpbmQgb3V0IHdoYXQgV2luSUUgZXhwb3NlcyBhcyBwcm9wZXJ0aWVzIGFuZCBp
bXBsZW1lbnQgdGhpcy4KKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxF
bGVtZW50OjpnZXRWYWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBjb25z
dAoreworICAgIC8vIENoZWNrIG91ciBzZXQgb2YgZ2VuZXJpYyBwcm9wZXJ0aWVzIGZpcnN0Lgor
ICAgIEhUTUxFbGVtZW50SW1wbCAmZWxlbWVudCA9ICpzdGF0aWNfY2FzdDxIVE1MRWxlbWVudElt
cGwgKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgRWxlbWVu
dElkOgorICAgICAgICAvLyBpaHQuY29tIHJlbGllcyBvbiB0aGlzIHZhbHVlIGJlaW5nICIiIHdo
ZW4gbm8gaWQgaXMgcHJlc2VudC4gIE90aGVyIGJyb3dzZXJzIGRvIHRoaXMgYXMgd2VsbC4KKyAg
ICAgICAgLy8gU28gd2UgdXNlIFN0cmluZygpIGluc3RlYWQgb2YgU3RyaW5nKCkgaGVyZS4KKyAg
ICAgICAgcmV0dXJuIFN0cmluZyhlbGVtZW50LmlkKCkpOworICAgICAgICBjYXNlIEVsZW1lbnRU
aXRsZToKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcoZWxlbWVudC50aXRsZSgpKTsKKyAgICAg
ICAgY2FzZSBFbGVtZW50TGFuZzoKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcoZWxlbWVudC5s
YW5nKCkpOworICAgICAgICBjYXNlIEVsZW1lbnREaXI6CisgICAgICAgICAgICByZXR1cm4gU3Ry
aW5nKGVsZW1lbnQuZGlyKCkpOworICAgICAgICBjYXNlIEVsZW1lbnRDbGFzc05hbWU6CisgICAg
ICAgICAgICByZXR1cm4gU3RyaW5nKGVsZW1lbnQuY2xhc3NOYW1lKCkpOworICAgICAgICBjYXNl
IEVsZW1lbnRJbm5lckhUTUw6CisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGVsZW1lbnQuaW5u
ZXJIVE1MKCkpOworICAgICAgICBjYXNlIEVsZW1lbnRJbm5lclRleHQ6CisgICAgICAgICAgICBp
ZiAoRG9jdW1lbnRJbXBsKiBkb2MgPSBpbXBsKCktPmdldERvY3VtZW50KCkpCisgICAgICAgICAg
ICAgICAgZG9jLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKKyAgICAg
ICAgICAgIHJldHVybiBTdHJpbmcoZWxlbWVudC5pbm5lclRleHQoKSk7CisgICAgICAgIGNhc2Ug
RWxlbWVudE91dGVySFRNTDoKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcoZWxlbWVudC5vdXRl
ckhUTUwoKSk7CisgICAgICAgIGNhc2UgRWxlbWVudE91dGVyVGV4dDoKKyAgICAgICAgICAgIHJl
dHVybiBTdHJpbmcoZWxlbWVudC5vdXRlclRleHQoKSk7CisgICAgICAgIGNhc2UgRWxlbWVudERv
Y3VtZW50OgorICAgICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyxlbGVtZW50Lm93bmVy
RG9jdW1lbnQoKSk7CisgICAgICAgIGNhc2UgRWxlbWVudENoaWxkcmVuOgorICAgICAgICAgICAg
cmV0dXJuIGdldEhUTUxDb2xsZWN0aW9uKGV4ZWMsIGVsZW1lbnQuY2hpbGRyZW4oKS5nZXQoKSk7
CisgICAgICAgIGNhc2UgRWxlbWVudENvbnRlbnRFZGl0YWJsZToKKyAgICAgICAgICAgIHJldHVy
biBTdHJpbmcoZWxlbWVudC5jb250ZW50RWRpdGFibGUoKSk7CisgICAgICAgIGNhc2UgRWxlbWVu
dElzQ29udGVudEVkaXRhYmxlOgorICAgICAgICAgICAgcmV0dXJuIEJvb2xlYW4oZWxlbWVudC5p
c0NvbnRlbnRFZGl0YWJsZSgpKTsKKyAgICB9CisKKyAgICAvLyBOb3cgY2hlY2sgdGhlIHByb3Bl
cnRpZXMgc3BlY2lmaWMgdG8gb3VyIGVsZW1lbnQgdHlwZS4KKyAgICBjb25zdCBHZXRTZXRJbmZv
KiBpbmZvID0gZ2V0U2V0SW5mbygpOworICAgIGlmIChpbmZvICYmIGluZm8tPm1fZ2V0dGVyKQor
ICAgICAgICByZXR1cm4gKHRoaXMtPiooaW5mby0+bV9nZXR0ZXIpKShleGVjLCB0b2tlbik7Cisg
ICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCiBib29sIEtKUzo6SFRNTEVsZW1lbnQ6Omhhc093
blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1l
KSBjb25zdAogewogI2lmZGVmIEtKU19WRVJCT1NFCi0gIC8va2REZWJ1Zyg2MDcwKSA8PCAiSFRN
TEVsZW1lbnQ6Omhhc1Byb3BlcnR5ICIgPDwgcHJvcGVydHlOYW1lLnFzdHJpbmcoKSA8PCBlbmRs
OworICAgIC8va2REZWJ1Zyg2MDcwKSA8PCAiSFRNTEVsZW1lbnQ6Omhhc1Byb3BlcnR5ICIgPDwg
cHJvcGVydHlOYW1lLnFzdHJpbmcoKSA8PCBlbmRsOwogI2VuZGlmCi0gIEhUTUxFbGVtZW50SW1w
bCAmZWxlbWVudCA9ICpzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwgKj4oaW1wbCgpKTsKLSAg
Ly8gRmlyc3QgbG9vayBhdCBkeW5hbWljIHByb3BlcnRpZXMgLSBrZWVwIHRoaXMgaW4gc3luYyB3
aXRoIHRyeUdldAotICBzd2l0Y2ggKGVsZW1lbnQuaWQoKSkgewotICAgIGNhc2UgSURfRk9STTog
ewotICAgICAgSFRNTEZvcm1FbGVtZW50SW1wbCAmZm9ybSA9IHN0YXRpY19jYXN0PEhUTUxGb3Jt
RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICAvLyBDaGVjayBpZiB3ZSdyZSByZXRyaWV2
aW5nIGFuIGVsZW1lbnQgKGJ5IGluZGV4IG9yIGJ5IG5hbWUpCi0gICAgICBib29sIG9rOwotICAg
ICAgdWludCB1ID0gcHJvcGVydHlOYW1lLnRvVUxvbmcoJm9rKTsKLSAgICAgIGlmIChvayAmJiBm
b3JtLmVsZW1lbnRzKCktPml0ZW0odSkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgaWYg
KGZvcm0uZWxlbWVudHMoKS0+bmFtZWRJdGVtKHByb3BlcnR5TmFtZS5zdHJpbmcoKSkpCi0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgSURfU0VMRUNU
OiB7Ci0gICAgICBIVE1MU2VsZWN0RWxlbWVudEltcGwgJnNlbGVjdCA9IHN0YXRpY19jYXN0PEhU
TUxTZWxlY3RFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIGJvb2wgb2s7Ci0gICAgICB1
aW50IHUgPSBwcm9wZXJ0eU5hbWUudG9VTG9uZygmb2spOwotICAgICAgaWYgKG9rICYmIHNlbGVj
dC5vcHRpb25zSFRNTENvbGxlY3Rpb24oKS0+aXRlbSh1KSkKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBJRF9JTlBVVDogewotICAgICAgSFRNTElu
cHV0RWxlbWVudEltcGwgJmlucHV0ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudEltcGwg
Jj4oZWxlbWVudCk7Ci0gICAgICBjb25zdCBIYXNoVGFibGUqIHRhYmxlID0gY2xhc3NJbmZvKCkt
PnByb3BIYXNoVGFibGU7Ci0gICAgICBjb25zdCBIYXNoRW50cnkqIGVudHJ5ID0gTG9va3VwOjpm
aW5kRW50cnkodGFibGUsIHByb3BlcnR5TmFtZSk7Ci0gICAgICBpZiAoZW50cnkpIHsKLSAgICAg
ICAgc3dpdGNoKGVudHJ5LT52YWx1ZSkgewotICAgICAgICAgIGNhc2UgSW5wdXRTZWxlY3Rpb25T
dGFydDoKLSAgICAgICAgICBjYXNlIElucHV0U2VsZWN0aW9uRW5kOgotICAgICAgICAgIGNhc2Ug
SW5wdXRTZXRTZWxlY3Rpb25SYW5nZToKLSAgICAgICAgICAgIHJldHVybiBpbnB1dC5jYW5IYXZl
U2VsZWN0aW9uKCk7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOworICAg
IEhUTUxFbGVtZW50SW1wbCAmZWxlbWVudCA9ICpzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwg
Kj4oaW1wbCgpKTsKKyAgICAvLyBGaXJzdCBsb29rIGF0IGR5bmFtaWMgcHJvcGVydGllcyAtIGtl
ZXAgdGhpcyBpbiBzeW5jIHdpdGggdHJ5R2V0CisgICAgaWYgKGVsZW1lbnQuaGFzTG9jYWxOYW1l
KEhUTUxOYW1lczo6Zm9ybSgpKSkgeworICAgICAgICBIVE1MRm9ybUVsZW1lbnRJbXBsICZmb3Jt
ID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICAgICAg
Ly8gQ2hlY2sgaWYgd2UncmUgcmV0cmlldmluZyBhbiBlbGVtZW50IChieSBpbmRleCBvciBieSBu
YW1lKQorICAgICAgICBib29sIG9rOworICAgICAgICB1aW50IHUgPSBwcm9wZXJ0eU5hbWUudG9V
TG9uZygmb2spOworICAgICAgICBpZiAob2sgJiYgZm9ybS5lbGVtZW50cygpLT5pdGVtKHUpKQor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChmb3JtLmVsZW1lbnRzKCktPm5h
bWVkSXRlbShwcm9wZXJ0eU5hbWUuc3RyaW5nKCkpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6c2Vs
ZWN0KCkpKSB7CisgICAgICAgIEhUTUxTZWxlY3RFbGVtZW50SW1wbCAmc2VsZWN0ID0gc3RhdGlj
X2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgICAgICBib29sIG9r
OworICAgICAgICB1aW50IHUgPSBwcm9wZXJ0eU5hbWUudG9VTG9uZygmb2spOworICAgICAgICBp
ZiAob2sgJiYgc2VsZWN0Lm9wdGlvbnNIVE1MQ29sbGVjdGlvbigpLT5pdGVtKHUpKQorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6aW5wdXQoKSkpIHsKKyAgICAgICAgSFRNTElucHV0RWxlbWVudEltcGwg
JmlucHV0ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Cisg
ICAgICAgIGNvbnN0IEhhc2hUYWJsZSogdGFibGUgPSBjbGFzc0luZm8oKS0+cHJvcEhhc2hUYWJs
ZTsKKyAgICAgICAgY29uc3QgSGFzaEVudHJ5KiBlbnRyeSA9IExvb2t1cDo6ZmluZEVudHJ5KHRh
YmxlLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICBpZiAoZW50cnkpIHsKKyAgICAgICAgICAgIHN3
aXRjaChlbnRyeS0+dmFsdWUpIHsKKyAgICAgICAgICAgIGNhc2UgSW5wdXRTZWxlY3Rpb25TdGFy
dDoKKyAgICAgICAgICAgIGNhc2UgSW5wdXRTZWxlY3Rpb25FbmQ6CisgICAgICAgICAgICBjYXNl
IElucHV0U2V0U2VsZWN0aW9uUmFuZ2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIGlucHV0LmNh
bkhhdmVTZWxlY3Rpb24oKTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGJyZWFrOwog
ICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KIAotICByZXR1cm4gRE9NRWxl
bWVudDo6aGFzT3duUHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lKTsKKyAgICByZXR1cm4gRE9N
RWxlbWVudDo6aGFzT3duUHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lKTsKIH0KIAogVVN0cmlu
ZyBLSlM6OkhUTUxFbGVtZW50Ojp0b1N0cmluZyhFeGVjU3RhdGUgKmV4ZWMpIGNvbnN0CiB7Ci0g
IGlmIChpbXBsKCktPmlkKCkgPT0gSURfQSkKLSAgICByZXR1cm4gVVN0cmluZyhzdGF0aWNfY2Fz
dDxjb25zdCBIVE1MQW5jaG9yRWxlbWVudEltcGwgKj4oaW1wbCgpKS0+aHJlZigpKTsKLSAgZWxz
ZQotICAgIHJldHVybiBET01FbGVtZW50Ojp0b1N0cmluZyhleGVjKTsKKyAgICBpZiAoaW1wbCgp
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YSgpKSkKKyAgICAgICAgcmV0dXJuIFVTdHJpbmcoc3Rh
dGljX2Nhc3Q8Y29uc3QgSFRNTEFuY2hvckVsZW1lbnRJbXBsICo+KGltcGwoKSktPmhyZWYoKSk7
CisgICAgZWxzZQorICAgICAgICByZXR1cm4gRE9NRWxlbWVudDo6dG9TdHJpbmcoZXhlYyk7CiB9
CiAKIHN0YXRpYyBIVE1MRm9ybUVsZW1lbnRJbXBsICpnZXRGb3JtKEhUTUxFbGVtZW50SW1wbCAq
ZWxlbWVudCkKIHsKLSAgaWYgKGVsZW1lbnQtPmlzR2VuZXJpY0Zvcm1FbGVtZW50KCkpCi0gICAg
cmV0dXJuIHN0YXRpY19jYXN0PEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsICo+KGVsZW1lbnQp
LT5mb3JtKCk7Ci0KLSAgc3dpdGNoIChlbGVtZW50LT5pZCgpKSB7Ci0gICAgY2FzZSBJRF9MQUJF
TDoKLSAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MTGFiZWxFbGVtZW50SW1wbCAqPihlbGVt
ZW50KS0+Zm9ybSgpOwotICAgIGNhc2UgSURfT0JKRUNUOgotICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PEhUTUxPYmplY3RFbGVtZW50SW1wbCAqPihlbGVtZW50KS0+Zm9ybSgpOwotICB9CisgICAg
aWYgKGVsZW1lbnQtPmlzR2VuZXJpY0Zvcm1FbGVtZW50KCkpCisgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbCAqPihlbGVtZW50KS0+Zm9ybSgpOwor
ICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6bGFiZWwoKSkpCisgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxIVE1MTGFiZWxFbGVtZW50SW1wbCAqPihlbGVtZW50KS0+Zm9y
bSgpOworICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b2JqZWN0KCkpKQor
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTE9iamVjdEVsZW1lbnRJbXBsICo+KGVsZW1l
bnQpLT5mb3JtKCk7CiAKLSAgcmV0dXJuIDA7CisgICAgcmV0dXJuIDA7CiB9CiAKIHZvaWQgS0pT
OjpIVE1MRWxlbWVudDo6cHVzaEV2ZW50SGFuZGxlclNjb3BlKEV4ZWNTdGF0ZSAqZXhlYywgU2Nv
cGVDaGFpbiAmc2NvcGUpIGNvbnN0CkBAIC0yMTQyLDcgKzIyOTYsNyBAQCB2b2lkIEtKUzo6SFRN
TEVsZW1lbnQ6OnB1c2hFdmVudEhhbmRsZXJTCiAgICAgc2NvcGUucHVzaChzdGF0aWNfY2FzdDxP
YmplY3RJbXAgKj4oZ2V0RE9NTm9kZShleGVjLCBmb3JtKSkpOwogICBlbHNlIHsKICAgICBOb2Rl
SW1wbCAqZm9ybSA9IGVsZW1lbnQtPnBhcmVudE5vZGUoKTsKLSAgICB3aGlsZSAoZm9ybSAmJiBm
b3JtLT5pZCgpICE9IElEX0ZPUk0pCisgICAgd2hpbGUgKGZvcm0gJiYgIWZvcm0tPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjpmb3JtKCkpKQogICAgICAgZm9ybSA9IGZvcm0tPnBhcmVudE5vZGUoKTsK
ICAgICAKICAgICBpZiAoZm9ybSkKQEAgLTIxNjIsMTg4ICsyMzE2LDE3MyBAQCBIVE1MRWxlbWVu
dEZ1bmN0aW9uOjpIVE1MRWxlbWVudEZ1bmN0aW9uCiAKIFZhbHVlIEtKUzo6SFRNTEVsZW1lbnRG
dW5jdGlvbjo6dHJ5Q2FsbChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3Qg
TGlzdCAmYXJncykKIHsKLSAgaWYgKCF0aGlzT2JqLmluaGVyaXRzKCZLSlM6OkhUTUxFbGVtZW50
OjppbmZvKSkgewotICAgIE9iamVjdCBlcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9y
KTsKLSAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKLSAgICByZXR1cm4gZXJyOwotICB9Ci0g
IGtkRGVidWcoKSA8PCAiS0pTOjpIVE1MRWxlbWVudEZ1bmN0aW9uOjp0cnlDYWxsICIgPDwgZW5k
bDsKLSAgRE9NRXhjZXB0aW9uVHJhbnNsYXRvciBleGNlcHRpb24oZXhlYyk7Ci0gIEhUTUxFbGVt
ZW50SW1wbCAmZWxlbWVudCA9ICpzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwgKj4oc3RhdGlj
X2Nhc3Q8SFRNTEVsZW1lbnQgKj4odGhpc09iai5pbXAoKSktPmltcGwoKSk7Ci0KLSAgc3dpdGNo
IChlbGVtZW50LmlkKCkpIHsKLSAgICBjYXNlIElEX0ZPUk06IHsKLSAgICAgIEhUTUxGb3JtRWxl
bWVudEltcGwgJmZvcm0gPSBzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnRJbXBsICY+KGVsZW1l
bnQpOwotICAgICAgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OkZvcm1TdWJtaXQpIHsKLSAg
ICAgICAgZm9ybS5zdWJtaXQoKTsKLSAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwotICAgICAg
fQotICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6Rm9ybVJlc2V0KSB7Ci0g
ICAgICAgIGZvcm0ucmVzZXQoKTsKLSAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwotICAgICAg
fQorICAgIGlmICghdGhpc09iai5pbmhlcml0cygmS0pTOjpIVE1MRWxlbWVudDo6aW5mbykpIHsK
KyAgICAgICAgT2JqZWN0IGVyciA9IEVycm9yOjpjcmVhdGUoZXhlYyxUeXBlRXJyb3IpOworICAg
ICAgICBleGVjLT5zZXRFeGNlcHRpb24oZXJyKTsKKyAgICAgICAgcmV0dXJuIGVycjsKICAgICB9
Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9TRUxFQ1Q6IHsKLSAgICAgIEhUTUxTZWxlY3RFbGVt
ZW50SW1wbCAmc2VsZWN0ID0gc3RhdGljX2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnRJbXBsICY+KGVs
ZW1lbnQpOwotICAgICAgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlNlbGVjdEFkZCkgewot
ICAgICAgICBzZWxlY3QuYWRkKHRvSFRNTEVsZW1lbnQoYXJnc1swXSksIHRvSFRNTEVsZW1lbnQo
YXJnc1sxXSkpOwotICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9Ci0gICAgICBl
bHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpTZWxlY3RSZW1vdmUpIHsKLSAgICAgICAg
c2VsZWN0LnJlbW92ZShpbnQoYXJnc1swXS50b051bWJlcihleGVjKSkpOwotICAgICAgICByZXR1
cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxF
bGVtZW50OjpTZWxlY3RCbHVyKSB7Ci0gICAgICAgIHNlbGVjdC5ibHVyKCk7Ci0gICAgICAgIHJl
dHVybiBVbmRlZmluZWQoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRN
TEVsZW1lbnQ6OlNlbGVjdEZvY3VzKSB7Ci0gICAgICAgIHNlbGVjdC5mb2N1cygpOwotICAgICAg
ICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9CisgICAga2REZWJ1ZygpIDw8ICJLSlM6OkhU
TUxFbGVtZW50RnVuY3Rpb246OnRyeUNhbGwgIiA8PCBlbmRsOworICAgIERPTUV4Y2VwdGlvblRy
YW5zbGF0b3IgZXhjZXB0aW9uKGV4ZWMpOworICAgIEhUTUxFbGVtZW50SW1wbCAmZWxlbWVudCA9
ICpzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwgKj4oc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQg
Kj4odGhpc09iai5pbXAoKSktPmltcGwoKSk7CisKKyAgICBpZiAoZWxlbWVudC5oYXNMb2NhbE5h
bWUoSFRNTE5hbWVzOjpmb3JtKCkpKSB7CisgICAgICAgIEhUTUxGb3JtRWxlbWVudEltcGwgJmZv
cm0gPSBzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgICAg
ICBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6Rm9ybVN1Ym1pdCkgeworICAgICAgICAgICAg
Zm9ybS5zdWJtaXQoKTsKKyAgICAgICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKKyAgICAgICAg
fQorICAgICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpGb3JtUmVzZXQpIHsK
KyAgICAgICAgICAgIGZvcm0ucmVzZXQoKTsKKyAgICAgICAgICAgIHJldHVybiBVbmRlZmluZWQo
KTsKKyAgICAgICAgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0lOUFVUOiB7Ci0g
ICAgICBIVE1MSW5wdXRFbGVtZW50SW1wbCAmaW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRF
bGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50
OjpJbnB1dEJsdXIpIHsKLSAgICAgICAgaW5wdXQuYmx1cigpOwotICAgICAgICByZXR1cm4gVW5k
ZWZpbmVkKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50
OjpJbnB1dEZvY3VzKSB7Ci0gICAgICAgIGlucHV0LmZvY3VzKCk7Ci0gICAgICAgIHJldHVybiBV
bmRlZmluZWQoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1l
bnQ6OklucHV0U2VsZWN0KSB7Ci0gICAgICAgIGlucHV0LnNlbGVjdCgpOwotICAgICAgICByZXR1
cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxF
bGVtZW50OjpJbnB1dENsaWNrKSB7Ci0gICAgICAgIGlucHV0LmNsaWNrKCk7Ci0gICAgICAgIHJl
dHVybiBVbmRlZmluZWQoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRN
TEVsZW1lbnQ6OklucHV0U2V0U2VsZWN0aW9uUmFuZ2UpIHsKLSAgICAgICAgaW5wdXQuc2V0U2Vs
ZWN0aW9uUmFuZ2UoYXJnc1swXS50b0ludDMyKGV4ZWMpLCBhcmdzWzFdLnRvSW50MzIoZXhlYykp
OwotICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9CisgICAgZWxzZSBpZiAoZWxl
bWVudC5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpzZWxlY3QoKSkpIHsKKyAgICAgICAgSFRNTFNl
bGVjdEVsZW1lbnRJbXBsICZzZWxlY3QgPSBzdGF0aWNfY2FzdDxIVE1MU2VsZWN0RWxlbWVudElt
cGwgJj4oZWxlbWVudCk7CisgICAgICAgIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpTZWxl
Y3RBZGQpIHsKKyAgICAgICAgICAgIHNlbGVjdC5hZGQodG9IVE1MRWxlbWVudChhcmdzWzBdKSwg
dG9IVE1MRWxlbWVudChhcmdzWzFdKSk7CisgICAgICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7
CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6U2Vs
ZWN0UmVtb3ZlKSB7CisgICAgICAgICAgICBzZWxlY3QucmVtb3ZlKGludChhcmdzWzBdLnRvTnVt
YmVyKGV4ZWMpKSk7CisgICAgICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CisgICAgICAgIH0K
KyAgICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6U2VsZWN0Qmx1cikgewor
ICAgICAgICAgICAgc2VsZWN0LmJsdXIoKTsKKyAgICAgICAgICAgIHJldHVybiBVbmRlZmluZWQo
KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpT
ZWxlY3RGb2N1cykgeworICAgICAgICAgICAgc2VsZWN0LmZvY3VzKCk7CisgICAgICAgICAgICBy
ZXR1cm4gVW5kZWZpbmVkKCk7CisgICAgICAgIH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2Fz
ZSBJRF9MQUJFTDogewotICAgICAgSFRNTExhYmVsRWxlbWVudEltcGwgJmxhYmVsID0gc3RhdGlj
X2Nhc3Q8SFRNTExhYmVsRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICAKLSAgICAgIGlm
IChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpMYWJlbEZvY3VzKSB7Ci0gICAgICAgICAgbGFiZWwu
Zm9jdXMoKTsKLSAgICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9CisgICAgZWxz
ZSBpZiAoZWxlbWVudC5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjppbnB1dCgpKSkgeworICAgICAg
ICBIVE1MSW5wdXRFbGVtZW50SW1wbCAmaW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVt
ZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICAgICAgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6
OklucHV0Qmx1cikgeworICAgICAgICAgICAgaW5wdXQuYmx1cigpOworICAgICAgICAgICAgcmV0
dXJuIFVuZGVmaW5lZCgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6
SFRNTEVsZW1lbnQ6OklucHV0Rm9jdXMpIHsKKyAgICAgICAgICAgIGlucHV0LmZvY3VzKCk7Cisg
ICAgICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBp
ZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6SW5wdXRTZWxlY3QpIHsKKyAgICAgICAgICAgIGlu
cHV0LnNlbGVjdCgpOworICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAgICAgICB9
CisgICAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OklucHV0Q2xpY2spIHsK
KyAgICAgICAgICAgIGlucHV0LmNsaWNrKCk7CisgICAgICAgICAgICByZXR1cm4gVW5kZWZpbmVk
KCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6
SW5wdXRTZXRTZWxlY3Rpb25SYW5nZSkgeworICAgICAgICAgICAgaW5wdXQuc2V0U2VsZWN0aW9u
UmFuZ2UoYXJnc1swXS50b0ludDMyKGV4ZWMpLCBhcmdzWzFdLnRvSW50MzIoZXhlYykpOworICAg
ICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAgICAgICB9CiAgICAgfQotICAgIGJyZWFr
OwotICAgIGNhc2UgSURfTEVHRU5EOiB7Ci0gICAgICBIVE1MTGVnZW5kRWxlbWVudEltcGwgJmxl
Z2VuZCA9IHN0YXRpY19jYXN0PEhUTUxMZWdlbmRFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAg
ICAgICAgCi0gICAgICBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6TGVnZW5kRm9jdXMpIHsK
LSAgICAgICAgICBsZWdlbmQuZm9jdXMoKTsKLSAgICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7
Ci0gICAgICB9CisgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpi
dXR0b24oKSkpIHsKKyAgICAgICAgSFRNTEJ1dHRvbkVsZW1lbnRJbXBsICZidXR0b24gPSBzdGF0
aWNfY2FzdDxIVE1MQnV0dG9uRWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgICAgIGlmIChp
ZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpCdXR0b25CbHVyKSB7CisgICAgICAgICAgICBidXR0b24u
Ymx1cigpOworICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAgICAgICB9CisgICAg
ICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OkJ1dHRvbkZvY3VzKSB7CisgICAg
ICAgICAgICBidXR0b24uZm9jdXMoKTsKKyAgICAgICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsK
KyAgICAgICAgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0JVVFRPTjogewotICAg
ICAgSFRNTEJ1dHRvbkVsZW1lbnRJbXBsICZidXR0b24gPSBzdGF0aWNfY2FzdDxIVE1MQnV0dG9u
RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICAKLSAgICAgIGlmIChpZCA9PSBLSlM6OkhU
TUxFbGVtZW50OjpCdXR0b25CbHVyKSB7Ci0gICAgICAgIGJ1dHRvbi5ibHVyKCk7Ci0gICAgICAg
IHJldHVybiBVbmRlZmluZWQoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6
SFRNTEVsZW1lbnQ6OkJ1dHRvbkZvY3VzKSB7Ci0gICAgICAgIGJ1dHRvbi5mb2N1cygpOwotICAg
ICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9CisgICAgZWxzZSBpZiAoZWxlbWVudC5o
YXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpsYWJlbCgpKSkgeworICAgICAgICBIVE1MTGFiZWxFbGVt
ZW50SW1wbCAmbGFiZWwgPSBzdGF0aWNfY2FzdDxIVE1MTGFiZWxFbGVtZW50SW1wbCAmPihlbGVt
ZW50KTsKKyAgICAgICAgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OkxhYmVsRm9jdXMpIHsK
KyAgICAgICAgICAgIGxhYmVsLmZvY3VzKCk7CisgICAgICAgICAgICByZXR1cm4gVW5kZWZpbmVk
KCk7CisgICAgICAgIH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9URVhUQVJFQTog
ewotICAgICAgSFRNTFRleHRBcmVhRWxlbWVudEltcGwgJnRleHRhcmVhID0gc3RhdGljX2Nhc3Q8
SFRNTFRleHRBcmVhRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBpZiAoaWQgPT0gS0pT
OjpIVE1MRWxlbWVudDo6VGV4dEFyZWFCbHVyKSB7Ci0gICAgICAgIHRleHRhcmVhLmJsdXIoKTsK
LSAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoaWQg
PT0gS0pTOjpIVE1MRWxlbWVudDo6VGV4dEFyZWFGb2N1cykgewotICAgICAgICB0ZXh0YXJlYS5m
b2N1cygpOwotICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9Ci0gICAgICBlbHNl
IGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUZXh0QXJlYVNlbGVjdCkgewotICAgICAgICB0
ZXh0YXJlYS5zZWxlY3QoKTsKLSAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwotICAgICAgfQot
ICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6VGV4dEFyZWFTZXRTZWxlY3Rp
b25SYW5nZSkgewotICAgICAgICB0ZXh0YXJlYS5zZXRTZWxlY3Rpb25SYW5nZShhcmdzWzBdLnRv
SW50MzIoZXhlYyksIGFyZ3NbMV0udG9JbnQzMihleGVjKSk7Ci0gICAgICAgIHJldHVybiBVbmRl
ZmluZWQoKTsKLSAgICAgIH0KKyAgICBlbHNlIGlmIChlbGVtZW50Lmhhc0xvY2FsTmFtZShIVE1M
TmFtZXM6OmxlZ2VuZCgpKSkgeworICAgICAgICBIVE1MTGVnZW5kRWxlbWVudEltcGwgJmxlZ2Vu
ZCA9IHN0YXRpY19jYXN0PEhUTUxMZWdlbmRFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICAg
ICAgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OkxlZ2VuZEZvY3VzKSB7CisgICAgICAgICAg
ICBsZWdlbmQuZm9jdXMoKTsKKyAgICAgICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKKyAgICAg
ICAgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0E6IHsKLSAgICAgIEhUTUxBbmNo
b3JFbGVtZW50SW1wbCAmYW5jaG9yID0gc3RhdGljX2Nhc3Q8SFRNTEFuY2hvckVsZW1lbnRJbXBs
ICY+KGVsZW1lbnQpOwotICAgICAgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OkFuY2hvckJs
dXIpIHsKLSAgICAgICAgYW5jaG9yLmJsdXIoKTsKLSAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgp
OwotICAgICAgfQotICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6QW5jaG9y
Rm9jdXMpIHsKLSAgICAgICAgYW5jaG9yLmZvY3VzKCk7Ci0gICAgICAgIHJldHVybiBVbmRlZmlu
ZWQoKTsKLSAgICAgIH0gCi0gICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpB
bmNob3JUb1N0cmluZykgewotCXJldHVybiBTdHJpbmcodGhpc09iai50b1N0cmluZyhleGVjKSk7
Ci0gICAgICB9CisgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0
ZXh0YXJlYSgpKSkgeworICAgICAgICBIVE1MVGV4dEFyZWFFbGVtZW50SW1wbCAmdGV4dGFyZWEg
PSBzdGF0aWNfY2FzdDxIVE1MVGV4dEFyZWFFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICAg
ICAgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRleHRBcmVhQmx1cikgeworICAgICAgICAg
ICAgdGV4dGFyZWEuYmx1cigpOworICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAg
ICAgICB9CisgICAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRleHRBcmVh
Rm9jdXMpIHsKKyAgICAgICAgICAgIHRleHRhcmVhLmZvY3VzKCk7CisgICAgICAgICAgICByZXR1
cm4gVW5kZWZpbmVkKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpI
VE1MRWxlbWVudDo6VGV4dEFyZWFTZWxlY3QpIHsKKyAgICAgICAgICAgIHRleHRhcmVhLnNlbGVj
dCgpOworICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAgICAgICB9CisgICAgICAg
IGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRleHRBcmVhU2V0U2VsZWN0aW9uUmFu
Z2UpIHsKKyAgICAgICAgICAgIHRleHRhcmVhLnNldFNlbGVjdGlvblJhbmdlKGFyZ3NbMF0udG9J
bnQzMihleGVjKSwgYXJnc1sxXS50b0ludDMyKGV4ZWMpKTsKKyAgICAgICAgICAgIHJldHVybiBV
bmRlZmluZWQoKTsKKyAgICAgICAgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX1RB
QkxFOiB7Ci0gICAgICBIVE1MVGFibGVFbGVtZW50SW1wbCAmdGFibGUgPSBzdGF0aWNfY2FzdDxI
VE1MVGFibGVFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIGlmIChpZCA9PSBLSlM6OkhU
TUxFbGVtZW50OjpUYWJsZUNyZWF0ZVRIZWFkKQotICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShl
eGVjLHRhYmxlLmNyZWF0ZVRIZWFkKCkpOwotICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1M
RWxlbWVudDo6VGFibGVEZWxldGVUSGVhZCkgewotICAgICAgICB0YWJsZS5kZWxldGVUSGVhZCgp
OwotICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChp
ZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUYWJsZUNyZWF0ZVRGb290KQotICAgICAgICByZXR1cm4g
Z2V0RE9NTm9kZShleGVjLHRhYmxlLmNyZWF0ZVRGb290KCkpOwotICAgICAgZWxzZSBpZiAoaWQg
PT0gS0pTOjpIVE1MRWxlbWVudDo6VGFibGVEZWxldGVURm9vdCkgewotICAgICAgICB0YWJsZS5k
ZWxldGVURm9vdCgpOwotICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9Ci0gICAg
ICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUYWJsZUNyZWF0ZUNhcHRpb24pCi0g
ICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsdGFibGUuY3JlYXRlQ2FwdGlvbigpKTsKLSAg
ICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRhYmxlRGVsZXRlQ2FwdGlvbikg
ewotICAgICAgICB0YWJsZS5kZWxldGVDYXB0aW9uKCk7Ci0gICAgICAgIHJldHVybiBVbmRlZmlu
ZWQoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRh
YmxlSW5zZXJ0Um93KQotICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLHRhYmxlLmluc2Vy
dFJvdyhhcmdzWzBdLnRvSW50MzIoZXhlYyksIGV4Y2VwdGlvbikpOwotICAgICAgZWxzZSBpZiAo
aWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6VGFibGVEZWxldGVSb3cpIHsKLSAgICAgICAgdGFibGUu
ZGVsZXRlUm93KGFyZ3NbMF0udG9JbnQzMihleGVjKSwgZXhjZXB0aW9uKTsKLSAgICAgICAgcmV0
dXJuIFVuZGVmaW5lZCgpOwotICAgICAgfQorICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6YSgpKSkgeworICAgICAgICBIVE1MQW5jaG9yRWxlbWVudEltcGwgJmFu
Y2hvciA9IHN0YXRpY19jYXN0PEhUTUxBbmNob3JFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAg
ICAgICAgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OkFuY2hvckJsdXIpIHsKKyAgICAgICAg
ICAgIGFuY2hvci5ibHVyKCk7CisgICAgICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6QW5jaG9yRm9j
dXMpIHsKKyAgICAgICAgICAgIGFuY2hvci5mb2N1cygpOworICAgICAgICAgICAgcmV0dXJuIFVu
ZGVmaW5lZCgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVs
ZW1lbnQ6OkFuY2hvclRvU3RyaW5nKQorICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0aGlzT2Jq
LnRvU3RyaW5nKGV4ZWMpKTsKICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9USEVBRDoK
LSAgICBjYXNlIElEX1RCT0RZOgotICAgIGNhc2UgSURfVEZPT1Q6IHsKLSAgICAgIEhUTUxUYWJs
ZVNlY3Rpb25FbGVtZW50SW1wbCAmdGFibGVTZWN0aW9uID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxl
U2VjdGlvbkVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgaWYgKGlkID09IEtKUzo6SFRN
TEVsZW1lbnQ6OlRhYmxlU2VjdGlvbkluc2VydFJvdykKLSAgICAgICAgcmV0dXJuIGdldERPTU5v
ZGUoZXhlYywgdGFibGVTZWN0aW9uLmluc2VydFJvdyhhcmdzWzBdLnRvSW50MzIoZXhlYyksIGV4
Y2VwdGlvbikpOwotICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6VGFibGVT
ZWN0aW9uRGVsZXRlUm93KSB7Ci0gICAgICAgIHRhYmxlU2VjdGlvbi5kZWxldGVSb3coYXJnc1sw
XS50b0ludDMyKGV4ZWMpLCBleGNlcHRpb24pOwotICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7
Ci0gICAgICB9CisgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0
YWJsZSgpKSkgeworICAgICAgICBIVE1MVGFibGVFbGVtZW50SW1wbCAmdGFibGUgPSBzdGF0aWNf
Y2FzdDxIVE1MVGFibGVFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICAgICAgaWYgKGlkID09
IEtKUzo6SFRNTEVsZW1lbnQ6OlRhYmxlQ3JlYXRlVEhlYWQpCisgICAgICAgICAgICByZXR1cm4g
Z2V0RE9NTm9kZShleGVjLHRhYmxlLmNyZWF0ZVRIZWFkKCkpOworICAgICAgICBlbHNlIGlmIChp
ZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUYWJsZURlbGV0ZVRIZWFkKSB7CisgICAgICAgICAgICB0
YWJsZS5kZWxldGVUSGVhZCgpOworICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAg
ICAgICB9CisgICAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRhYmxlQ3Jl
YXRlVEZvb3QpCisgICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLHRhYmxlLmNyZWF0
ZVRGb290KCkpOworICAgICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUYWJs
ZURlbGV0ZVRGb290KSB7CisgICAgICAgICAgICB0YWJsZS5kZWxldGVURm9vdCgpOworICAgICAg
ICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGlk
ID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRhYmxlQ3JlYXRlQ2FwdGlvbikKKyAgICAgICAgICAgIHJl
dHVybiBnZXRET01Ob2RlKGV4ZWMsdGFibGUuY3JlYXRlQ2FwdGlvbigpKTsKKyAgICAgICAgZWxz
ZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6VGFibGVEZWxldGVDYXB0aW9uKSB7CisgICAg
ICAgICAgICB0YWJsZS5kZWxldGVDYXB0aW9uKCk7CisgICAgICAgICAgICByZXR1cm4gVW5kZWZp
bmVkKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVu
dDo6VGFibGVJbnNlcnRSb3cpCisgICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLHRh
YmxlLmluc2VydFJvdyhhcmdzWzBdLnRvSW50MzIoZXhlYyksIGV4Y2VwdGlvbikpOworICAgICAg
ICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUYWJsZURlbGV0ZVJvdykgeworICAg
ICAgICAgICAgdGFibGUuZGVsZXRlUm93KGFyZ3NbMF0udG9JbnQzMihleGVjKSwgZXhjZXB0aW9u
KTsKKyAgICAgICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKKyAgICAgICAgfQogICAgIH0KLSAg
ICBicmVhazsKLSAgICBjYXNlIElEX1RSOiB7Ci0gICAgICBIVE1MVGFibGVSb3dFbGVtZW50SW1w
bCAmdGFibGVSb3cgPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVSb3dFbGVtZW50SW1wbCAmPihlbGVt
ZW50KTsKLSAgICAgIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUYWJsZVJvd0luc2VydENl
bGwpCi0gICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsdGFibGVSb3cuaW5zZXJ0Q2VsbChh
cmdzWzBdLnRvSW50MzIoZXhlYyksIGV4Y2VwdGlvbikpOwotICAgICAgZWxzZSBpZiAoaWQgPT0g
S0pTOjpIVE1MRWxlbWVudDo6VGFibGVSb3dEZWxldGVDZWxsKSB7Ci0gICAgICAgIHRhYmxlUm93
LmRlbGV0ZUNlbGwoYXJnc1swXS50b0ludDMyKGV4ZWMpLCBleGNlcHRpb24pOwotICAgICAgICBy
ZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAgICB9CisgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNMb2Nh
bE5hbWUoSFRNTE5hbWVzOjp0aGVhZCgpKSB8fAorICAgICAgICAgICAgIGVsZW1lbnQuaGFzTG9j
YWxOYW1lKEhUTUxOYW1lczo6dGJvZHkoKSkgfHwKKyAgICAgICAgICAgICBlbGVtZW50Lmhhc0xv
Y2FsTmFtZShIVE1MTmFtZXM6OnRmb290KCkpKSB7CisgICAgICAgIEhUTUxUYWJsZVNlY3Rpb25F
bGVtZW50SW1wbCAmdGFibGVTZWN0aW9uID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlU2VjdGlvbkVs
ZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgICAgICBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVu
dDo6VGFibGVTZWN0aW9uSW5zZXJ0Um93KQorICAgICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUo
ZXhlYywgdGFibGVTZWN0aW9uLmluc2VydFJvdyhhcmdzWzBdLnRvSW50MzIoZXhlYyksIGV4Y2Vw
dGlvbikpOworICAgICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUYWJsZVNl
Y3Rpb25EZWxldGVSb3cpIHsKKyAgICAgICAgICAgIHRhYmxlU2VjdGlvbi5kZWxldGVSb3coYXJn
c1swXS50b0ludDMyKGV4ZWMpLCBleGNlcHRpb24pOworICAgICAgICAgICAgcmV0dXJuIFVuZGVm
aW5lZCgpOworICAgICAgICB9CiAgICAgfQotICAgIGNhc2UgSURfTUFSUVVFRTogeworICAgIGVs
c2UgaWYgKGVsZW1lbnQuaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dHIoKSkpIHsKKyAgICAgICAg
SFRNTFRhYmxlUm93RWxlbWVudEltcGwgJnRhYmxlUm93ID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxl
Um93RWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgICAgIGlmIChpZCA9PSBLSlM6OkhUTUxF
bGVtZW50OjpUYWJsZVJvd0luc2VydENlbGwpCisgICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9k
ZShleGVjLHRhYmxlUm93Lmluc2VydENlbGwoYXJnc1swXS50b0ludDMyKGV4ZWMpLCBleGNlcHRp
b24pKTsKKyAgICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6VGFibGVSb3dE
ZWxldGVDZWxsKSB7CisgICAgICAgICAgICB0YWJsZVJvdy5kZWxldGVDZWxsKGFyZ3NbMF0udG9J
bnQzMihleGVjKSwgZXhjZXB0aW9uKTsKKyAgICAgICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsK
KyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmIChlbGVtZW50Lmhhc0xvY2FsTmFtZShIVE1M
TmFtZXM6Om1hcnF1ZWUoKSkpIHsKICAgICAgICAgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6
Ok1hcnF1ZWVTdGFydCAmJiBlbGVtZW50LnJlbmRlcmVyKCkgJiYgCiAgICAgICAgICAgICBlbGVt
ZW50LnJlbmRlcmVyKCktPmxheWVyKCkgJiYKICAgICAgICAgICAgIGVsZW1lbnQucmVuZGVyZXIo
KS0+bGF5ZXIoKS0+bWFycXVlZSgpKSB7CkBAIC0yMzUxLDE0ICsyNDkwLDE0IEBAIFZhbHVlIEtK
Uzo6SFRNTEVsZW1lbnRGdW5jdGlvbjo6dHJ5Q2FsbCgKICAgICAgICAgICAgIHJldHVybiBVbmRl
ZmluZWQoKTsKICAgICAgICAgfQogICAgICAgICBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6
TWFycXVlZVN0b3AgJiYgZWxlbWVudC5yZW5kZXJlcigpICYmIAotICAgICAgICAgICAgICAgICBl
bGVtZW50LnJlbmRlcmVyKCktPmxheWVyKCkgJiYKLSAgICAgICAgICAgICAgICAgZWxlbWVudC5y
ZW5kZXJlcigpLT5sYXllcigpLT5tYXJxdWVlKCkpIHsKKyAgICAgICAgICAgIGVsZW1lbnQucmVu
ZGVyZXIoKS0+bGF5ZXIoKSAmJgorICAgICAgICAgICAgZWxlbWVudC5yZW5kZXJlcigpLT5sYXll
cigpLT5tYXJxdWVlKCkpIHsKICAgICAgICAgICAgIGVsZW1lbnQucmVuZGVyZXIoKS0+bGF5ZXIo
KS0+bWFycXVlZSgpLT5zdG9wKCk7CiAgICAgICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiAg
ICAgICAgIH0KLSAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGNhc2UgSURfQ0FOVkFTOiB7Cisj
aWYgQVBQTEVfQ0hBTkdFUworICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFzTG9jYWxOYW1lKEhUTUxO
YW1lczo6Y2FudmFzKCkpKSB7CiAgICAgICAgIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpH
ZXRDb250ZXh0KSB7CiAgICAgICAgICAgICBpZiAoYXJncy5zaXplKCkgPT0gMCB8fCAoYXJncy5z
aXplKCkgPT0gMSAmJiBhcmdzWzBdLnRvU3RyaW5nKGV4ZWMpLnFzdHJpbmcoKS5sb3dlcigpID09
ICIyZCIpKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdChuZXcgQ29udGV4dDJEKCZl
bGVtZW50KSk7CkBAIC0yMzY2LDc0MiArMjUwNSw3NjQgQEAgVmFsdWUgS0pTOjpIVE1MRWxlbWVu
dEZ1bmN0aW9uOjp0cnlDYWxsKAogICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogICAg
ICAgICB9CiAgICAgfQotICAgIAotICAgIGJyZWFrOwotICB9CisjZW5kaWYKIAotICByZXR1cm4g
VW5kZWZpbmVkKCk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogfQogCiB2b2lkIEtKUzo6SFRN
TEVsZW1lbnQ6OnRyeVB1dChFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnByb3Bl
cnR5TmFtZSwgY29uc3QgVmFsdWUmIHZhbHVlLCBpbnQgYXR0cikKIHsKICNpZmRlZiBLSlNfVkVS
Qk9TRQotICBET006OkRPTVN0cmluZyBzdHIgPSB2YWx1ZS5pc0EoTnVsbFR5cGUpID8gRE9NOjpE
T01TdHJpbmcoKSA6IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpOworICAgIERPTTo6RE9N
U3RyaW5nIHN0ciA9IHZhbHVlLmlzQShOdWxsVHlwZSkgPyBET006OkRPTVN0cmluZygpIDogdmFs
dWUudG9TdHJpbmcoZXhlYykuc3RyaW5nKCk7CiAjZW5kaWYKLSAgSFRNTEVsZW1lbnRJbXBsICZl
bGVtZW50ID0gKnN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCAqPihpbXBsKCkpOworICAgIEhU
TUxFbGVtZW50SW1wbCAmZWxlbWVudCA9ICpzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwgKj4o
aW1wbCgpKTsKICNpZmRlZiBLSlNfVkVSQk9TRQotICBrZERlYnVnKDYwNzApIDw8ICJLSlM6OkhU
TUxFbGVtZW50Ojp0cnlQdXQgIiA8PCBwcm9wZXJ0eU5hbWUucXN0cmluZygpCi0gICAgICAgICAg
ICAgICAgPDwgIiB0aGlzVGFnPSIgPDwgZWxlbWVudC50YWdOYW1lKCkuc3RyaW5nKCkKLSAgICAg
ICAgICAgICAgICA8PCAiIHN0cj0iIDw8IHN0ci5zdHJpbmcoKSA8PCBlbmRsOworICAgIGtkRGVi
dWcoNjA3MCkgPDwgIktKUzo6SFRNTEVsZW1lbnQ6OnRyeVB1dCAiIDw8IHByb3BlcnR5TmFtZS5x
c3RyaW5nKCkKKyAgICAgICAgICAgICAgICAgIDw8ICIgdGhpc1RhZz0iIDw8IGVsZW1lbnQudGFn
TmFtZSgpLnN0cmluZygpCisgICAgICAgICAgICAgICAgICA8PCAiIHN0cj0iIDw8IHN0ci5zdHJp
bmcoKSA8PCBlbmRsOwogI2VuZGlmCi0gIC8vIEZpcnN0IGxvb2sgYXQgZHluYW1pYyBwcm9wZXJ0
aWVzCi0gIHN3aXRjaCAoZWxlbWVudC5pZCgpKSB7Ci0gICAgY2FzZSBJRF9TRUxFQ1Q6IHsKLSAg
ICAgIEhUTUxTZWxlY3RFbGVtZW50SW1wbCAmc2VsZWN0ID0gc3RhdGljX2Nhc3Q8SFRNTFNlbGVj
dEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgYm9vbCBvazsKLSAgICAgIC8qdWludCB1
ID0qLyBwcm9wZXJ0eU5hbWUudG9VTG9uZygmb2spOwotICAgICAgaWYgKG9rKSB7Ci0gICAgICAg
IE9iamVjdCBjb2xsID0gT2JqZWN0OjpkeW5hbWljQ2FzdCggZ2V0U2VsZWN0SFRNTENvbGxlY3Rp
b24oZXhlYywgc2VsZWN0Lm9wdGlvbnNIVE1MQ29sbGVjdGlvbigpLmdldCgpLCAmc2VsZWN0KSAp
OwotICAgICAgICBpZiAoICFjb2xsLmlzTnVsbCgpICkKLSAgICAgICAgICBjb2xsLnB1dChleGVj
LHByb3BlcnR5TmFtZSx2YWx1ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KKyAgICAvLyBG
aXJzdCBsb29rIGF0IGR5bmFtaWMgcHJvcGVydGllcworICAgIGlmIChlbGVtZW50Lmhhc0xvY2Fs
TmFtZShIVE1MTmFtZXM6OnNlbGVjdCgpKSkgeworICAgICAgICBIVE1MU2VsZWN0RWxlbWVudElt
cGwgJnNlbGVjdCA9IHN0YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50SW1wbCAmPihlbGVtZW50
KTsKKyAgICAgICAgYm9vbCBvazsKKyAgICAgICAgLyp1aW50IHUgPSovIHByb3BlcnR5TmFtZS50
b1VMb25nKCZvayk7CisgICAgICAgIGlmIChvaykgeworICAgICAgICAgICAgT2JqZWN0IGNvbGwg
PSBPYmplY3Q6OmR5bmFtaWNDYXN0KCBnZXRTZWxlY3RIVE1MQ29sbGVjdGlvbihleGVjLCBzZWxl
Y3Qub3B0aW9uc0hUTUxDb2xsZWN0aW9uKCkuZ2V0KCksICZzZWxlY3QpICk7CisgICAgICAgICAg
ICBpZiAoIWNvbGwuaXNOdWxsKCkpCisgICAgICAgICAgICAgICAgY29sbC5wdXQoZXhlYyxwcm9w
ZXJ0eU5hbWUsdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgfQog
I2lmIEFQUExFX0NIQU5HRVMKLSAgICBjYXNlIElEX0VNQkVEOgotICAgIGNhc2UgSURfT0JKRUNU
OgotICAgIGNhc2UgSURfQVBQTEVUOiB7CisgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNMb2NhbE5h
bWUoSFRNTE5hbWVzOjplbWJlZCgpKSB8fAorICAgICAgICAgICAgIGVsZW1lbnQuaGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6b2JqZWN0KCkpIHx8CisgICAgICAgICAgICAgZWxlbWVudC5oYXNMb2Nh
bE5hbWUoSFRNTE5hbWVzOjphcHBsZXQoKSkpIHsKIAlWYWx1ZSBydW50aW1lT2JqZWN0ID0gZ2V0
UnVudGltZU9iamVjdChleGVjLCZlbGVtZW50KTsKIAlpZiAoIXJ1bnRpbWVPYmplY3QuaXNOdWxs
KCkpIHsKIAkgICAgT2JqZWN0SW1wICppbXAgPSBzdGF0aWNfY2FzdDxPYmplY3RJbXAgKj4ocnVu
dGltZU9iamVjdC5pbXAoKSk7Ci0JICAgIGlmIChpbXAtPmNhblB1dChleGVjLCBwcm9wZXJ0eU5h
bWUpKSB7CisJICAgIGlmIChpbXAtPmNhblB1dChleGVjLCBwcm9wZXJ0eU5hbWUpKQogCQlyZXR1
cm4gaW1wLT5wdXQgKGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUpOwotCSAgICB9CiAJfQogICAg
IH0KLSAgICAgIGJyZWFrOwogI2VuZGlmCi0gICAgYnJlYWs7Ci0gIGRlZmF1bHQ6Ci0gICAgICBi
cmVhazsKLSAgfQogCi0gIGNvbnN0IEhhc2hUYWJsZSogdGFibGUgPSBjbGFzc0luZm8oKS0+cHJv
cEhhc2hUYWJsZTsgLy8gZ2V0IHRoZSByaWdodCBoYXNodGFibGUKLSAgY29uc3QgSGFzaEVudHJ5
KiBlbnRyeSA9IExvb2t1cDo6ZmluZEVudHJ5KHRhYmxlLCBwcm9wZXJ0eU5hbWUpOwotICBpZiAo
ZW50cnkpIHsKLSAgICBpZiAoZW50cnktPmF0dHIgJiBGdW5jdGlvbikgLy8gZnVuY3Rpb246IHB1
dCBhcyBvdmVycmlkZSBwcm9wZXJ0eQotICAgIHsKLSAgICAgIE9iamVjdEltcDo6cHV0KGV4ZWMs
IHByb3BlcnR5TmFtZSwgdmFsdWUsIGF0dHIpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBl
bHNlIGlmICgoZW50cnktPmF0dHIgJiBSZWFkT25seSkgPT0gMCkgLy8gbGV0IERPTU9iamVjdExv
b2t1cFB1dCBwcmludCB0aGUgd2FybmluZyBpZiBub3QKLSAgICB7Ci0gICAgICBwdXRWYWx1ZShl
eGVjLCBlbnRyeS0+dmFsdWUsIHZhbHVlLCBhdHRyKTsKLSAgICAgIHJldHVybjsKKyAgICBjb25z
dCBIYXNoVGFibGUqIHRhYmxlID0gY2xhc3NJbmZvKCktPnByb3BIYXNoVGFibGU7IC8vIGdldCB0
aGUgcmlnaHQgaGFzaHRhYmxlCisgICAgY29uc3QgSGFzaEVudHJ5KiBlbnRyeSA9IExvb2t1cDo6
ZmluZEVudHJ5KHRhYmxlLCBwcm9wZXJ0eU5hbWUpOworICAgIGlmIChlbnRyeSkgeworICAgICAg
ICBpZiAoZW50cnktPmF0dHIgJiBGdW5jdGlvbikgeyAvLyBmdW5jdGlvbjogcHV0IGFzIG92ZXJy
aWRlIHByb3BlcnR5CisgICAgICAgICAgICBPYmplY3RJbXA6OnB1dChleGVjLCBwcm9wZXJ0eU5h
bWUsIHZhbHVlLCBhdHRyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICBlbHNlIGlmICgoZW50cnktPmF0dHIgJiBSZWFkT25seSkgPT0gMCkgeyAvLyBsZXQgRE9NT2Jq
ZWN0TG9va3VwUHV0IHByaW50IHRoZSB3YXJuaW5nIGlmIG5vdAorICAgICAgICAgICAgcHV0VmFs
dWUoZXhlYywgZW50cnktPnZhbHVlLCB2YWx1ZSwgYXR0cik7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KICAgICB9Ci0gIH0KLSAgRE9NT2JqZWN0TG9va3VwUHV0PEtKUzo6SFRNTEVs
ZW1lbnQsIERPTUVsZW1lbnQ+KGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIGF0dHIsICZIVE1M
RWxlbWVudFRhYmxlLCB0aGlzKTsKKworICAgIERPTU9iamVjdExvb2t1cFB1dDxLSlM6OkhUTUxF
bGVtZW50LCBET01FbGVtZW50PihleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBhdHRyLCAmSFRN
TEVsZW1lbnRUYWJsZSwgdGhpcyk7CiB9CiAKLXZvaWQgSFRNTEVsZW1lbnQ6OnB1dFZhbHVlKEV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGludCkKK3ZvaWQg
SFRNTEVsZW1lbnQ6Omh0bWxTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0
IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKIHsKLSAgRE9NRXhjZXB0
aW9uVHJhbnNsYXRvciBleGNlcHRpb24oZXhlYyk7Ci0gIERPTTo6RE9NU3RyaW5nIHN0ciA9IHZh
bHVlLmlzQShOdWxsVHlwZSkgPyBET006OkRPTVN0cmluZygpIDogdmFsdWUudG9TdHJpbmcoZXhl
Yykuc3RyaW5nKCk7Ci0gIEhUTUxFbGVtZW50SW1wbCAmZWxlbWVudCA9ICpzdGF0aWNfY2FzdDxI
VE1MRWxlbWVudEltcGwgKj4oaW1wbCgpKTsKLSNpZmRlZiBLSlNfVkVSQk9TRQotICBrZERlYnVn
KDYwNzApIDw8ICJLSlM6OkhUTUxFbGVtZW50OjpwdXRWYWx1ZSAiCi0gICAgICAgICAgICAgICAg
PDwgIiB0aGlzVGFnPSIgPDwgZWxlbWVudC50YWdOYW1lKCkuc3RyaW5nKCkKLSAgICAgICAgICAg
ICAgICA8PCAiIHRva2VuPSIgPDwgdG9rZW4gPDwgZW5kbDsKLSNlbmRpZgorICAgIEhUTUxIZWFk
RWxlbWVudEltcGwgJmhlYWQgPSAqc3RhdGljX2Nhc3Q8SFRNTEhlYWRFbGVtZW50SW1wbCo+KGlt
cGwoKSk7CisgICAgaWYgKHRva2VuID09IEhlYWRQcm9maWxlKSAKKyAgICAgICAgaGVhZC5zZXRQ
cm9maWxlKHN0cik7Cit9CiAKLSAgc3dpdGNoIChlbGVtZW50LmlkKCkpIHsKLSAgY2FzZSBJRF9I
VE1MOiB7Ci0gICAgICBIVE1MSHRtbEVsZW1lbnRJbXBsICZodG1sID0gc3RhdGljX2Nhc3Q8SFRN
TEh0bWxFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAg
ICAgIGNhc2UgSHRtbFZlcnNpb246ICAgICAgICAgeyBodG1sLnNldFZlcnNpb24oc3RyKTsgcmV0
dXJuOyB9Ci0gICAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfSEVBRDogewotICAgIEhU
TUxIZWFkRWxlbWVudEltcGwgJmhlYWQgPSBzdGF0aWNfY2FzdDxIVE1MSGVhZEVsZW1lbnRJbXBs
ICY+KGVsZW1lbnQpOwordm9pZCBIVE1MRWxlbWVudDo6aGVhZFNldHRlcihFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYg
c3RyKQoreworICAgIEhUTUxIZWFkRWxlbWVudEltcGwgJmhlYWQgPSAqc3RhdGljX2Nhc3Q8SFRN
TEhlYWRFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IEhlYWRQcm9maWxl
KSAKKyAgICAgICAgaGVhZC5zZXRQcm9maWxlKHN0cik7Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6
OmxpbmtTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1
ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MTGlua0VsZW1lbnRJbXBs
ICZsaW5rID0gKnN0YXRpY19jYXN0PEhUTUxMaW5rRWxlbWVudEltcGwqPihpbXBsKCkpOwogICAg
IHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIEhlYWRQcm9maWxlOiAgICAgICAgIHsgaGVhZC5z
ZXRQcm9maWxlKHN0cik7IHJldHVybjsgfQotICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJ
RF9MSU5LOiB7Ci0gICAgSFRNTExpbmtFbGVtZW50SW1wbCAmbGluayA9IHN0YXRpY19jYXN0PEhU
TUxMaW5rRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAg
ICAgY2FzZSBMaW5rRGlzYWJsZWQ6ICAgICAgICB7IGxpbmsuc2V0RGlzYWJsZWQodmFsdWUudG9C
b29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIExpbmtDaGFyc2V0OiAgICAgICAg
IHsgbGluay5zZXRDaGFyc2V0KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBMaW5rSHJlZjog
ICAgICAgICAgICB7IGxpbmsuc2V0SHJlZihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgTGlu
a0hyZWZMYW5nOiAgICAgICAgeyBsaW5rLnNldEhyZWZsYW5nKHN0cik7IHJldHVybjsgfQotICAg
ICAgY2FzZSBMaW5rTWVkaWE6ICAgICAgICAgICB7IGxpbmsuc2V0TWVkaWEoc3RyKTsgcmV0dXJu
OyB9Ci0gICAgICBjYXNlIExpbmtSZWw6ICAgICAgICAgICAgIHsgbGluay5zZXRSZWwoc3RyKTsg
cmV0dXJuOyB9Ci0gICAgICBjYXNlIExpbmtSZXY6ICAgICAgICAgICAgIHsgbGluay5zZXRSZXYo
c3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIExpbmtUYXJnZXQ6ICAgICAgICAgIHsgbGluay5z
ZXRUYXJnZXQoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIExpbmtUeXBlOiAgICAgICAgICAg
IHsgbGluay5zZXRUeXBlKHN0cik7IHJldHVybjsgfQotICAgICAgfQotICAgIH0KLSAgICBicmVh
azsKLSAgICBjYXNlIElEX1RJVExFOiB7Ci0gICAgICBIVE1MVGl0bGVFbGVtZW50SW1wbCAmdGl0
bGUgPSBzdGF0aWNfY2FzdDxIVE1MVGl0bGVFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAg
IHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgVGl0bGVUZXh0OiAgICAgICAgICAgICAgICAg
eyB0aXRsZS5zZXRUZXh0KHN0cik7IHJldHVybjsgfQotICAgICAgfQotICAgIH0KLSAgICBicmVh
azsKLSAgICBjYXNlIElEX01FVEE6IHsKLSAgICAgIEhUTUxNZXRhRWxlbWVudEltcGwgJm1ldGEg
PSBzdGF0aWNfY2FzdDxIVE1MTWV0YUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dp
dGNoICh0b2tlbikgewotICAgICAgY2FzZSBNZXRhQ29udGVudDogICAgICAgICB7IG1ldGEuc2V0
Q29udGVudChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgTWV0YUh0dHBFcXVpdjogICAgICAg
eyBtZXRhLnNldEh0dHBFcXVpdihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgTWV0YU5hbWU6
ICAgICAgICAgICAgeyBtZXRhLnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIE1l
dGFTY2hlbWU6ICAgICAgICAgIHsgbWV0YS5zZXRTY2hlbWUoc3RyKTsgcmV0dXJuOyB9Ci0gICAg
ICB9CisgICAgICAgIGNhc2UgTGlua0Rpc2FibGVkOiAgICAgICAgeyBsaW5rLnNldERpc2FibGVk
KHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIExpbmtDaGFy
c2V0OiAgICAgICAgIHsgbGluay5zZXRDaGFyc2V0KHN0cik7IHJldHVybjsgfQorICAgICAgICBj
YXNlIExpbmtIcmVmOiAgICAgICAgICAgIHsgbGluay5zZXRIcmVmKHN0cik7IHJldHVybjsgfQor
ICAgICAgICBjYXNlIExpbmtIcmVmTGFuZzogICAgICAgIHsgbGluay5zZXRIcmVmbGFuZyhzdHIp
OyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBMaW5rTWVkaWE6ICAgICAgICAgICB7IGxpbmsuc2V0
TWVkaWEoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgTGlua1JlbDogICAgICAgICAgICAg
eyBsaW5rLnNldFJlbChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBMaW5rUmV2OiAgICAg
ICAgICAgICB7IGxpbmsuc2V0UmV2KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIExpbmtU
YXJnZXQ6ICAgICAgICAgIHsgbGluay5zZXRUYXJnZXQoc3RyKTsgcmV0dXJuOyB9CisgICAgICAg
IGNhc2UgTGlua1R5cGU6ICAgICAgICAgICAgeyBsaW5rLnNldFR5cGUoc3RyKTsgcmV0dXJuOyB9
CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfQkFTRTogewotICAgICAgSFRNTEJhc2VF
bGVtZW50SW1wbCAmYmFzZSA9IHN0YXRpY19jYXN0PEhUTUxCYXNlRWxlbWVudEltcGwgJj4oZWxl
bWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIEJhc2VIcmVmOiAgICAg
ICAgICAgIHsgYmFzZS5zZXRIcmVmKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBCYXNlVGFy
Z2V0OiAgICAgICAgICB7IGJhc2Uuc2V0VGFyZ2V0KHN0cik7IHJldHVybjsgfQotICAgICAgfQor
fQorCit2b2lkIEhUTUxFbGVtZW50Ojp0aXRsZVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQorewor
ICAgICBIVE1MVGl0bGVFbGVtZW50SW1wbCYgdGl0bGUgPSAqc3RhdGljX2Nhc3Q8SFRNTFRpdGxl
RWxlbWVudEltcGwqPihpbXBsKCkpOworICAgICBpZiAodG9rZW4gPT0gVGl0bGVUZXh0KQorICAg
ICAgICB0aXRsZS5zZXRUZXh0KHN0cik7Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6Om1ldGFTZXR0
ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3Qg
RE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MTWV0YUVsZW1lbnRJbXBsJiBtZXRhID0g
KnN0YXRpY19jYXN0PEhUTUxNZXRhRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAo
dG9rZW4pIHsKKyAgICAgICAgY2FzZSBNZXRhQ29udGVudDogICAgICAgICB7IG1ldGEuc2V0Q29u
dGVudChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBNZXRhSHR0cEVxdWl2OiAgICAgICB7
IG1ldGEuc2V0SHR0cEVxdWl2KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIE1ldGFOYW1l
OiAgICAgICAgICAgIHsgbWV0YS5zZXROYW1lKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNl
IE1ldGFTY2hlbWU6ICAgICAgICAgIHsgbWV0YS5zZXRTY2hlbWUoc3RyKTsgcmV0dXJuOyB9CiAg
ICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfSVNJTkRFWDogewotICAgICAgSFRNTElzSW5k
ZXhFbGVtZW50SW1wbCAmaXNpbmRleCA9IHN0YXRpY19jYXN0PEhUTUxJc0luZGV4RWxlbWVudElt
cGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICAvLyByZWFkLW9u
bHk6IGZvcm0KLSAgICAgIGNhc2UgSXNJbmRleFByb21wdDogICAgICAgICAgICAgICB7IGlzaW5k
ZXguc2V0UHJvbXB0KHN0cik7IHJldHVybjsgfQotICAgICAgfQorfQorCit2b2lkIEhUTUxFbGVt
ZW50OjpiYXNlU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYg
dmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTEJhc2VFbGVtZW50
SW1wbCYgYmFzZSA9ICpzdGF0aWNfY2FzdDxIVE1MQmFzZUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsK
KyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgQmFzZUhyZWY6ICAgICAgICAgICAg
eyBiYXNlLnNldEhyZWYoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQmFzZVRhcmdldDog
ICAgICAgICAgeyBiYXNlLnNldFRhcmdldChzdHIpOyByZXR1cm47IH0KICAgICB9Ci0gICAgYnJl
YWs7Ci0gICAgY2FzZSBJRF9TVFlMRTogewotICAgICAgSFRNTFN0eWxlRWxlbWVudEltcGwgJnN0
eWxlID0gc3RhdGljX2Nhc3Q8SFRNTFN0eWxlRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAg
ICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIFN0eWxlRGlzYWJsZWQ6ICAgICAgICB7IHN0
eWxlLnNldERpc2FibGVkKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQotICAgICAg
Y2FzZSBTdHlsZU1lZGlhOiAgICAgICAgICAgeyBzdHlsZS5zZXRNZWRpYShzdHIpOyByZXR1cm47
IH0KLSAgICAgIGNhc2UgU3R5bGVUeXBlOiAgICAgICAgICAgIHsgc3R5bGUuc2V0VHlwZShzdHIp
OyByZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6aXNJbmRleFNldHRl
cihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBE
T006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxJc0luZGV4RWxlbWVudEltcGwmIGlzaW5k
ZXggPSAqc3RhdGljX2Nhc3Q8SFRNTElzSW5kZXhFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAg
aWYgKHRva2VuID09IElzSW5kZXhQcm9tcHQpCisgICAgICAgIGlzaW5kZXguc2V0UHJvbXB0KHN0
cik7Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OnN0eWxlU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIp
Cit7CisgICAgSFRNTFN0eWxlRWxlbWVudEltcGwmIHN0eWxlID0gKnN0YXRpY19jYXN0PEhUTUxT
dHlsZUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAg
IGNhc2UgU3R5bGVEaXNhYmxlZDogICAgICAgIHsgc3R5bGUuc2V0RGlzYWJsZWQodmFsdWUudG9C
b29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgU3R5bGVNZWRpYTogICAgICAg
ICAgIHsgc3R5bGUuc2V0TWVkaWEoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgU3R5bGVU
eXBlOiAgICAgICAgICAgIHsgc3R5bGUuc2V0VHlwZShzdHIpOyByZXR1cm47IH0KICAgICB9Ci0g
ICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9CT0RZOiB7Ci0gICAgICBIVE1MQm9keUVsZW1lbnRJbXBs
ICZib2R5ID0gc3RhdGljX2Nhc3Q8SFRNTEJvZHlFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAg
ICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgQm9keUFMaW5rOiAgICAgICAgICAgeyBi
b2R5LnNldEFMaW5rKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBCb2R5QmFja2dyb3VuZDog
ICAgICB7IGJvZHkuc2V0QmFja2dyb3VuZChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQm9k
eUJnQ29sb3I6ICAgICAgICAgeyBib2R5LnNldEJnQ29sb3Ioc3RyKTsgcmV0dXJuOyB9Ci0gICAg
ICBjYXNlIEJvZHlMaW5rOiAgICAgICAgICAgIHsgYm9keS5zZXRMaW5rKHN0cik7IHJldHVybjsg
fQotICAgICAgY2FzZSBCb2R5VGV4dDogICAgICAgICAgICB7IGJvZHkuc2V0VGV4dChzdHIpOyBy
ZXR1cm47IH0KLSAgICAgIGNhc2UgQm9keVZMaW5rOiAgICAgICAgICAgeyBib2R5LnNldFZMaW5r
KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBCb2R5U2Nyb2xsTGVmdDoKLSAgICAgIGNhc2Ug
Qm9keVNjcm9sbFRvcDogewotICAgICAgICAgIFFTY3JvbGxWaWV3KiBzdmlldyA9IGJvZHkub3du
ZXJEb2N1bWVudCgpLT52aWV3KCk7Ci0gICAgICAgICAgaWYgKHN2aWV3KSB7Ci0gICAgICAgICAg
ICAgIC8vIFVwZGF0ZSB0aGUgZG9jdW1lbnQncyBsYXlvdXQgYmVmb3JlIHdlIGNvbXB1dGUgdGhl
c2UgYXR0cmlidXRlcy4KLSAgICAgICAgICAgICAgaWYgKERvY3VtZW50SW1wbCogZG9jID0gYm9k
eS5nZXREb2N1bWVudCgpKQotICAgICAgICAgICAgICAgICAgZG9jLT51cGRhdGVMYXlvdXRJZ25v
cmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKLSAgICAgICAgICAgICAgaWYgKHRva2VuID09IEJvZHlT
Y3JvbGxMZWZ0KQotICAgICAgICAgICAgICAgICAgc3ZpZXctPnNldENvbnRlbnRzUG9zKHZhbHVl
LnRvSW50MzIoZXhlYyksIHN2aWV3LT5jb250ZW50c1koKSk7Ci0gICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICAgIHN2aWV3LT5zZXRDb250ZW50c1Bvcyhzdmlldy0+Y29udGVudHNY
KCksIHZhbHVlLnRvSW50MzIoZXhlYykpOwotICAgICAgICAgIH0KLSAgICAgICAgICByZXR1cm47
Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OmJvZHlTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sK
KyAgICBIVE1MQm9keUVsZW1lbnRJbXBsJiBib2R5ID0gKnN0YXRpY19jYXN0PEhUTUxCb2R5RWxl
bWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBC
b2R5QUxpbms6ICAgICAgICAgICB7IGJvZHkuc2V0QUxpbmsoc3RyKTsgcmV0dXJuOyB9CisgICAg
ICAgIGNhc2UgQm9keUJhY2tncm91bmQ6ICAgICAgeyBib2R5LnNldEJhY2tncm91bmQoc3RyKTsg
cmV0dXJuOyB9CisgICAgICAgIGNhc2UgQm9keUJnQ29sb3I6ICAgICAgICAgeyBib2R5LnNldEJn
Q29sb3Ioc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQm9keUxpbms6ICAgICAgICAgICAg
eyBib2R5LnNldExpbmsoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQm9keVRleHQ6ICAg
ICAgICAgICAgeyBib2R5LnNldFRleHQoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQm9k
eVZMaW5rOiAgICAgICAgICAgeyBib2R5LnNldFZMaW5rKHN0cik7IHJldHVybjsgfQorICAgICAg
ICBjYXNlIEJvZHlTY3JvbGxMZWZ0OgorICAgICAgICBjYXNlIEJvZHlTY3JvbGxUb3A6IHsKKyAg
ICAgICAgICAgIFFTY3JvbGxWaWV3KiBzdmlldyA9IGJvZHkub3duZXJEb2N1bWVudCgpLT52aWV3
KCk7CisgICAgICAgICAgICBpZiAoc3ZpZXcpIHsKKyAgICAgICAgICAgICAgICAvLyBVcGRhdGUg
dGhlIGRvY3VtZW50J3MgbGF5b3V0IGJlZm9yZSB3ZSBjb21wdXRlIHRoZXNlIGF0dHJpYnV0ZXMu
CisgICAgICAgICAgICAgICAgaWYgKERvY3VtZW50SW1wbCogZG9jID0gYm9keS5nZXREb2N1bWVu
dCgpKQorICAgICAgICAgICAgICAgICAgICBkb2MtPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdT
dHlsZXNoZWV0cygpOworICAgICAgICAgICAgICAgIGlmICh0b2tlbiA9PSBCb2R5U2Nyb2xsTGVm
dCkKKyAgICAgICAgICAgICAgICAgICAgc3ZpZXctPnNldENvbnRlbnRzUG9zKHZhbHVlLnRvSW50
MzIoZXhlYyksIHN2aWV3LT5jb250ZW50c1koKSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgICAgICBzdmlldy0+c2V0Q29udGVudHNQb3Moc3ZpZXctPmNvbnRlbnRzWCgp
LCB2YWx1ZS50b0ludDMyKGV4ZWMpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQotICAgICAgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0ZP
Uk06IHsKLSAgICAgIEhUTUxGb3JtRWxlbWVudEltcGwgJmZvcm0gPSBzdGF0aWNfY2FzdDxIVE1M
Rm9ybUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAg
ICAgLy8gcmVhZC1vbmx5OiBlbGVtZW50cwotICAgICAgLy8gcmVhZC1vbmx5OiBsZW5ndGgKLSAg
ICAgIGNhc2UgRm9ybU5hbWU6ICAgICAgICAgICAgeyBmb3JtLnNldE5hbWUoc3RyKTsgcmV0dXJu
OyB9Ci0gICAgICBjYXNlIEZvcm1BY2NlcHRDaGFyc2V0OiAgIHsgZm9ybS5zZXRBY2NlcHRDaGFy
c2V0KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBGb3JtQWN0aW9uOiAgICAgICAgICB7IGZv
cm0uc2V0QWN0aW9uKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBGb3JtRW5jVHlwZTogICAg
ICAgICB7IGZvcm0uc2V0RW5jdHlwZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgRm9ybU1l
dGhvZDogICAgICAgICAgeyBmb3JtLnNldE1ldGhvZChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNh
c2UgRm9ybVRhcmdldDogICAgICAgICAgeyBmb3JtLnNldFRhcmdldChzdHIpOyByZXR1cm47IH0K
LSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6Zm9ybVNldHRlcihFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYg
c3RyKQoreworICAgIEhUTUxGb3JtRWxlbWVudEltcGwmIGZvcm0gPSAqc3RhdGljX2Nhc3Q8SFRN
TEZvcm1FbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAg
ICAvLyByZWFkLW9ubHk6IGVsZW1lbnRzCisgICAgICAgIC8vIHJlYWQtb25seTogbGVuZ3RoCisg
ICAgICAgIGNhc2UgRm9ybU5hbWU6ICAgICAgICAgICAgeyBmb3JtLnNldE5hbWUoc3RyKTsgcmV0
dXJuOyB9CisgICAgICAgIGNhc2UgRm9ybUFjY2VwdENoYXJzZXQ6ICAgeyBmb3JtLnNldEFjY2Vw
dENoYXJzZXQoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgRm9ybUFjdGlvbjogICAgICAg
ICAgeyBmb3JtLnNldEFjdGlvbihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBGb3JtRW5j
VHlwZTogICAgICAgICB7IGZvcm0uc2V0RW5jdHlwZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAg
Y2FzZSBGb3JtTWV0aG9kOiAgICAgICAgICB7IGZvcm0uc2V0TWV0aG9kKHN0cik7IHJldHVybjsg
fQorICAgICAgICBjYXNlIEZvcm1UYXJnZXQ6ICAgICAgICAgIHsgZm9ybS5zZXRUYXJnZXQoc3Ry
KTsgcmV0dXJuOyB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfU0VMRUNUOiB7Ci0g
ICAgICBIVE1MU2VsZWN0RWxlbWVudEltcGwgJnNlbGVjdCA9IHN0YXRpY19jYXN0PEhUTUxTZWxl
Y3RFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAg
IC8vIHJlYWQtb25seTogdHlwZQotICAgICAgY2FzZSBTZWxlY3RTZWxlY3RlZEluZGV4OiAgIHsg
c2VsZWN0LnNldFNlbGVjdGVkSW5kZXgodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQot
ICAgICAgY2FzZSBTZWxlY3RWYWx1ZTogICAgICAgICAgIHsgc2VsZWN0LnNldFZhbHVlKHN0cik7
IHJldHVybjsgfQotICAgICAgY2FzZSBTZWxlY3RMZW5ndGg6ICAgICAgICAgIHsgLy8gcmVhZC1v
bmx5IGFjY29yZGluZyB0byB0aGUgTlMgc3BlYywgYnV0IHdlYnBhZ2VzIG5lZWQgaXQgd3JpdGVh
YmxlCit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OnNlbGVjdFNldHRlcihFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3Ry
KQoreworICAgIEhUTUxTZWxlY3RFbGVtZW50SW1wbCYgc2VsZWN0ID0gKnN0YXRpY19jYXN0PEhU
TUxTZWxlY3RFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAg
ICAgICAvLyByZWFkLW9ubHk6IHR5cGUKKyAgICAgICAgY2FzZSBTZWxlY3RTZWxlY3RlZEluZGV4
OiAgIHsgc2VsZWN0LnNldFNlbGVjdGVkSW5kZXgodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVy
bjsgfQorICAgICAgICBjYXNlIFNlbGVjdFZhbHVlOiAgICAgICAgICAgeyBzZWxlY3Quc2V0VmFs
dWUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgU2VsZWN0TGVuZ3RoOiAgICAgICAgICB7
IC8vIHJlYWQtb25seSBhY2NvcmRpbmcgdG8gdGhlIE5TIHNwZWMsIGJ1dCB3ZWJwYWdlcyBuZWVk
IGl0IHdyaXRlYWJsZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBP
YmplY3QgY29sbCA9IE9iamVjdDo6ZHluYW1pY0Nhc3QoIGdldFNlbGVjdEhUTUxDb2xsZWN0aW9u
KGV4ZWMsIHNlbGVjdC5vcHRpb25zSFRNTENvbGxlY3Rpb24oKS5nZXQoKSwgJnNlbGVjdCkgKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhY29sbC5pc051
bGwoKSApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbC5w
dXQoZXhlYyxsZW5ndGhQcm9wZXJ0eU5hbWUsdmFsdWUpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAvLyByZWFkLW9ubHk6IGZvcm0KLSAgICAgIC8vIHJlYWQtb25s
eTogb3B0aW9ucwotICAgICAgY2FzZSBTZWxlY3REaXNhYmxlZDogICAgICAgIHsgc2VsZWN0LnNl
dERpc2FibGVkKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBT
ZWxlY3RNdWx0aXBsZTogICAgICAgIHsgc2VsZWN0LnNldE11bHRpcGxlKHZhbHVlLnRvQm9vbGVh
bihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBTZWxlY3ROYW1lOiAgICAgICAgICAgIHsg
c2VsZWN0LnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFNlbGVjdFNpemU6ICAg
ICAgICAgICAgeyBzZWxlY3Quc2V0U2l6ZSh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9
Ci0gICAgICBjYXNlIFNlbGVjdFRhYkluZGV4OiAgICAgICAgeyBzZWxlY3Quc2V0VGFiSW5kZXgo
dmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQotICAgICAgfQotICAgIH0KLSAgICBicmVh
azsKLSAgICBjYXNlIElEX09QVEdST1VQOiB7Ci0gICAgICBIVE1MT3B0R3JvdXBFbGVtZW50SW1w
bCAmb3B0Z3JvdXAgPSBzdGF0aWNfY2FzdDxIVE1MT3B0R3JvdXBFbGVtZW50SW1wbCAmPihlbGVt
ZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgT3B0R3JvdXBEaXNhYmxl
ZDogICAgICAgIHsgb3B0Z3JvdXAuc2V0RGlzYWJsZWQodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsg
cmV0dXJuOyB9Ci0gICAgICBjYXNlIE9wdEdyb3VwTGFiZWw6ICAgICAgICAgICB7IG9wdGdyb3Vw
LnNldExhYmVsKHN0cik7IHJldHVybjsgfQotICAgICAgfQotICAgIH0KLSAgICBicmVhazsKLSAg
ICBjYXNlIElEX09QVElPTjogewotICAgICAgSFRNTE9wdGlvbkVsZW1lbnRJbXBsICZvcHRpb24g
PSBzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBz
d2l0Y2ggKHRva2VuKSB7Ci0gICAgICAvLyByZWFkLW9ubHk6IGZvcm0KLSAgICAgIGNhc2UgT3B0
aW9uRGVmYXVsdFNlbGVjdGVkOiB7IG9wdGlvbi5zZXREZWZhdWx0U2VsZWN0ZWQodmFsdWUudG9C
b29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIE9wdGlvblRleHQ6ICAgICAgICAg
ICAgeyBvcHRpb24uc2V0VGV4dChzdHIsIGV4Y2VwdGlvbik7IHJldHVybjsgfQotICAgICAgLy8g
cmVhZC1vbmx5OiBpbmRleAotICAgICAgY2FzZSBPcHRpb25EaXNhYmxlZDogICAgICAgIHsgb3B0
aW9uLnNldERpc2FibGVkKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQotICAgICAg
Y2FzZSBPcHRpb25MYWJlbDogICAgICAgICAgIHsgb3B0aW9uLnNldExhYmVsKHN0cik7IHJldHVy
bjsgfQotICAgICAgY2FzZSBPcHRpb25TZWxlY3RlZDogICAgICAgIHsgb3B0aW9uLnNldFNlbGVj
dGVkKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBPcHRpb25W
YWx1ZTogICAgICAgICAgIHsgb3B0aW9uLnNldFZhbHVlKHN0cik7IHJldHVybjsgfQotICAgICAg
fQotICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0lOUFVUOiB7Ci0gICAgICBIVE1MSW5w
dXRFbGVtZW50SW1wbCAmaW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50SW1wbCAm
PihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgSW5wdXREZWZh
dWx0VmFsdWU6ICAgIHsgaW5wdXQuc2V0RGVmYXVsdFZhbHVlKHN0cik7IHJldHVybjsgfQotICAg
ICAgY2FzZSBJbnB1dERlZmF1bHRDaGVja2VkOiAgeyBpbnB1dC5zZXREZWZhdWx0Q2hlY2tlZCh2
YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KLSAgICAgIC8vIHJlYWQtb25seTogZm9y
bQotICAgICAgY2FzZSBJbnB1dEFjY2VwdDogICAgICAgICAgeyBpbnB1dC5zZXRBY2NlcHQoc3Ry
KTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElucHV0QWNjZXNzS2V5OiAgICAgICB7IGlucHV0LnNl
dEFjY2Vzc0tleShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSW5wdXRBbGlnbjogICAgICAg
ICAgIHsgaW5wdXQuc2V0QWxpZ24oc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElucHV0QWx0
OiAgICAgICAgICAgICB7IGlucHV0LnNldEFsdChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2Ug
SW5wdXRDaGVja2VkOiAgICAgICAgIHsgaW5wdXQuc2V0Q2hlY2tlZCh2YWx1ZS50b0Jvb2xlYW4o
ZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSW5wdXREaXNhYmxlZDogICAgICAgIHsgaW5w
dXQuc2V0RGlzYWJsZWQodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBj
YXNlIElucHV0TWF4TGVuZ3RoOiAgICAgICB7IGlucHV0LnNldE1heExlbmd0aCh2YWx1ZS50b0lu
dDMyKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElucHV0TmFtZTogICAgICAgICAgICB7
IGlucHV0LnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElucHV0UmVhZE9ubHk6
ICAgICAgICB7IGlucHV0LnNldFJlYWRPbmx5KHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVy
bjsgfQotICAgICAgY2FzZSBJbnB1dFNlbGVjdGlvblN0YXJ0OiAgeyBpbnB1dC5zZXRTZWxlY3Rp
b25TdGFydCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElucHV0
U2VsZWN0aW9uRW5kOiAgICB7IGlucHV0LnNldFNlbGVjdGlvbkVuZCh2YWx1ZS50b0ludDMyKGV4
ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElucHV0U2l6ZTogICAgICAgICAgICB7IGlucHV0
LnNldFNpemUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElucHV0U3JjOiAgICAgICAgICAg
ICB7IGlucHV0LnNldFNyYyhzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSW5wdXRUYWJJbmRl
eDogICAgICAgIHsgaW5wdXQuc2V0VGFiSW5kZXgodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVy
bjsgfQotICAgICAgY2FzZSBJbnB1dFR5cGU6ICAgICAgICAgICAgeyBpbnB1dC5zZXRUeXBlKHN0
cik7IHJldHVybjsgfQotICAgICAgY2FzZSBJbnB1dFVzZU1hcDogICAgICAgICAgeyBpbnB1dC5z
ZXRVc2VNYXAoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElucHV0VmFsdWU6ICAgICAgICAg
ICB7IGlucHV0LnNldFZhbHVlKHN0cik7IHJldHVybjsgfQotICAgICAgfQotICAgIH0KLSAgICBi
cmVhazsKLSAgICBjYXNlIElEX1RFWFRBUkVBOiB7Ci0gICAgICBIVE1MVGV4dEFyZWFFbGVtZW50
SW1wbCAmdGV4dGFyZWEgPSBzdGF0aWNfY2FzdDxIVE1MVGV4dEFyZWFFbGVtZW50SW1wbCAmPihl
bGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgVGV4dEFyZWFEZWZh
dWx0VmFsdWU6ICAgIHsgdGV4dGFyZWEuc2V0RGVmYXVsdFZhbHVlKHN0cik7IHJldHVybjsgfQot
ICAgICAgLy8gcmVhZC1vbmx5OiBmb3JtCi0gICAgICBjYXNlIFRleHRBcmVhQWNjZXNzS2V5OiAg
ICAgICB7IHRleHRhcmVhLnNldEFjY2Vzc0tleShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2Ug
VGV4dEFyZWFDb2xzOiAgICAgICAgICAgIHsgdGV4dGFyZWEuc2V0Q29scyh2YWx1ZS50b0ludDMy
KGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRleHRBcmVhRGlzYWJsZWQ6ICAgICAgICB7
IHRleHRhcmVhLnNldERpc2FibGVkKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQot
ICAgICAgY2FzZSBUZXh0QXJlYU5hbWU6ICAgICAgICAgICAgeyB0ZXh0YXJlYS5zZXROYW1lKHN0
cik7IHJldHVybjsgfQotICAgICAgY2FzZSBUZXh0QXJlYVJlYWRPbmx5OiAgICAgICAgeyB0ZXh0
YXJlYS5zZXRSZWFkT25seSh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KLSAgICAg
IGNhc2UgVGV4dEFyZWFSb3dzOiAgICAgICAgICAgIHsgdGV4dGFyZWEuc2V0Um93cyh2YWx1ZS50
b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRleHRBcmVhU2VsZWN0aW9uU3Rh
cnQ6ICB7IHRleHRhcmVhLnNldFNlbGVjdGlvblN0YXJ0KHZhbHVlLnRvSW50MzIoZXhlYykpOyBy
ZXR1cm47IH0KLSAgICAgIGNhc2UgVGV4dEFyZWFTZWxlY3Rpb25FbmQ6ICAgIHsgdGV4dGFyZWEu
c2V0U2VsZWN0aW9uRW5kKHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNh
c2UgVGV4dEFyZWFUYWJJbmRleDogICAgICAgIHsgdGV4dGFyZWEuc2V0VGFiSW5kZXgodmFsdWUu
dG9JbnQzMihleGVjKSk7IHJldHVybjsgfQotICAgICAgLy8gcmVhZC1vbmx5OiB0eXBlCi0gICAg
ICBjYXNlIFRleHRBcmVhVmFsdWU6ICAgICAgICAgICB7IHRleHRhcmVhLnNldFZhbHVlKHN0cik7
IHJldHVybjsgfQotICAgICAgfQotICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0JVVFRP
TjogewotICAgICAgSFRNTEJ1dHRvbkVsZW1lbnRJbXBsICZidXR0b24gPSBzdGF0aWNfY2FzdDxI
VE1MQnV0dG9uRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7
Ci0gICAgICAvLyByZWFkLW9ubHk6IGZvcm0KLSAgICAgIGNhc2UgQnV0dG9uQWNjZXNzS2V5OiAg
ICAgICB7IGJ1dHRvbi5zZXRBY2Nlc3NLZXkoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEJ1
dHRvbkRpc2FibGVkOiAgICAgICAgeyBidXR0b24uc2V0RGlzYWJsZWQodmFsdWUudG9Cb29sZWFu
KGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEJ1dHRvbk5hbWU6ICAgICAgICAgICAgeyBi
dXR0b24uc2V0TmFtZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQnV0dG9uVGFiSW5kZXg6
ICAgICAgICB7IGJ1dHRvbi5zZXRUYWJJbmRleCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJu
OyB9Ci0gICAgICAvLyByZWFkLW9ubHk6IHR5cGUKLSAgICAgIGNhc2UgQnV0dG9uVmFsdWU6ICAg
ICAgICAgICB7IGJ1dHRvbi5zZXRWYWx1ZShzdHIpOyByZXR1cm47IH0KLSAgICAgIH0KLSAgICB9
Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9MQUJFTDogewotICAgICAgSFRNTExhYmVsRWxlbWVu
dEltcGwgJmxhYmVsID0gc3RhdGljX2Nhc3Q8SFRNTExhYmVsRWxlbWVudEltcGwgJj4oZWxlbWVu
dCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICAvLyByZWFkLW9ubHk6IGZvcm0KLSAg
ICAgIGNhc2UgTGFiZWxBY2Nlc3NLZXk6ICAgICAgIHsgbGFiZWwuc2V0QWNjZXNzS2V5KHN0cik7
IHJldHVybjsgfQotICAgICAgY2FzZSBMYWJlbEh0bWxGb3I6ICAgICAgICAgeyBsYWJlbC5zZXRI
dG1sRm9yKHN0cik7IHJldHVybjsgfQotICAgICAgfQotICAgIH0KLSAgICBicmVhazsKLSAgICBj
YXNlIElEX0xFR0VORDogewotICAgICAgSFRNTExlZ2VuZEVsZW1lbnRJbXBsICZsZWdlbmQgPSBz
dGF0aWNfY2FzdDxIVE1MTGVnZW5kRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0
Y2ggKHRva2VuKSB7Ci0gICAgICAvLyByZWFkLW9ubHk6IGZvcm0KLSAgICAgIGNhc2UgTGVnZW5k
QWNjZXNzS2V5OiAgICAgICB7IGxlZ2VuZC5zZXRBY2Nlc3NLZXkoc3RyKTsgcmV0dXJuOyB9Ci0g
ICAgICBjYXNlIExlZ2VuZEFsaWduOiAgICAgICAgICAgeyBsZWdlbmQuc2V0QWxpZ24oc3RyKTsg
cmV0dXJuOyB9Ci0gICAgICB9Ci0gICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfVUw6IHsK
LSAgICAgIEhUTUxVTGlzdEVsZW1lbnRJbXBsICZ1TGlzdCA9IHN0YXRpY19jYXN0PEhUTUxVTGlz
dEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAg
Y2FzZSBVTGlzdENvbXBhY3Q6ICAgICAgICAgeyB1TGlzdC5zZXRDb21wYWN0KHZhbHVlLnRvQm9v
bGVhbihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBVTGlzdFR5cGU6ICAgICAgICAgICAg
eyB1TGlzdC5zZXRUeXBlKHN0cik7IHJldHVybjsgfQotICAgICAgfQotICAgIH0KLSAgICBicmVh
azsKLSAgICBjYXNlIElEX09MOiB7Ci0gICAgICBIVE1MT0xpc3RFbGVtZW50SW1wbCAmb0xpc3Qg
PSBzdGF0aWNfY2FzdDxIVE1MT0xpc3RFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3
aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgT0xpc3RDb21wYWN0OiAgICAgICAgIHsgb0xpc3Qu
c2V0Q29tcGFjdCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2Ug
T0xpc3RTdGFydDogICAgICAgICAgIHsgb0xpc3Quc2V0U3RhcnQodmFsdWUudG9JbnQzMihleGVj
KSk7IHJldHVybjsgfQotICAgICAgY2FzZSBPTGlzdFR5cGU6ICAgICAgICAgICAgeyBvTGlzdC5z
ZXRUeXBlKHN0cik7IHJldHVybjsgfQotICAgICAgfQotICAgIH0KLSAgICBicmVhazsKLSAgICBj
YXNlIElEX0RMOiB7Ci0gICAgICBIVE1MRExpc3RFbGVtZW50SW1wbCAmZExpc3QgPSBzdGF0aWNf
Y2FzdDxIVE1MRExpc3RFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9r
ZW4pIHsKLSAgICAgIGNhc2UgRExpc3RDb21wYWN0OiAgICAgICAgIHsgZExpc3Quc2V0Q29tcGFj
dCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KLSAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgLy8gcmVhZC1vbmx5OiBmb3JtCisg
ICAgICAgIC8vIHJlYWQtb25seTogb3B0aW9ucworICAgICAgICBjYXNlIFNlbGVjdERpc2FibGVk
OiAgICAgICAgeyBzZWxlY3Quc2V0RGlzYWJsZWQodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0
dXJuOyB9CisgICAgICAgIGNhc2UgU2VsZWN0TXVsdGlwbGU6ICAgICAgICB7IHNlbGVjdC5zZXRN
dWx0aXBsZSh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBT
ZWxlY3ROYW1lOiAgICAgICAgICAgIHsgc2VsZWN0LnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9Cisg
ICAgICAgIGNhc2UgU2VsZWN0U2l6ZTogICAgICAgICAgICB7IHNlbGVjdC5zZXRTaXplKHZhbHVl
LnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBTZWxlY3RUYWJJbmRleDog
ICAgICAgIHsgc2VsZWN0LnNldFRhYkluZGV4KHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47
IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9ESVI6IHsKLSAgICAgIEhUTUxEaXJl
Y3RvcnlFbGVtZW50SW1wbCAmZGlyZWN0b3J5ID0gc3RhdGljX2Nhc3Q8SFRNTERpcmVjdG9yeUVs
ZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgY2Fz
ZSBEaXJlY3RvcnlDb21wYWN0OiAgICAgeyBkaXJlY3Rvcnkuc2V0Q29tcGFjdCh2YWx1ZS50b0Jv
b2xlYW4oZXhlYykpOyByZXR1cm47IH0KLSAgICAgIH0KLSAgICB9Ci0gICAgYnJlYWs7Ci0gICAg
Y2FzZSBJRF9NRU5VOiB7Ci0gICAgICBIVE1MTWVudUVsZW1lbnRJbXBsICZtZW51ID0gc3RhdGlj
X2Nhc3Q8SFRNTE1lbnVFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9r
ZW4pIHsKLSAgICAgIGNhc2UgTWVudUNvbXBhY3Q6ICAgICAgICAgeyBtZW51LnNldENvbXBhY3Qo
dmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICB9Ci0gICAgfQotICAgIGJy
ZWFrOwotICAgIGNhc2UgSURfTEk6IHsKLSAgICAgIEhUTUxMSUVsZW1lbnRJbXBsICZsaSA9IHN0
YXRpY19jYXN0PEhUTUxMSUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0
b2tlbikgewotICAgICAgY2FzZSBMSVR5cGU6ICAgICAgICAgICAgeyBsaS5zZXRUeXBlKHN0cik7
IHJldHVybjsgfQotICAgICAgY2FzZSBMSVZhbHVlOiAgICAgICAgICAgeyBsaS5zZXRWYWx1ZSh2
YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICB9Cit9CisKK3ZvaWQgSFRNTEVs
ZW1lbnQ6Om9wdEdyb3VwU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBW
YWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTE9wdEdy
b3VwRWxlbWVudEltcGwmIG9wdGdyb3VwID0gKnN0YXRpY19jYXN0PEhUTUxPcHRHcm91cEVsZW1l
bnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgT3B0
R3JvdXBEaXNhYmxlZDogICAgICAgIHsgb3B0Z3JvdXAuc2V0RGlzYWJsZWQodmFsdWUudG9Cb29s
ZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgT3B0R3JvdXBMYWJlbDogICAgICAg
ICAgIHsgb3B0Z3JvdXAuc2V0TGFiZWwoc3RyKTsgcmV0dXJuOyB9CiAgICAgfQotICAgIGJyZWFr
OwotICAgIGNhc2UgSURfRElWOiB7Ci0gICAgICBIVE1MRGl2RWxlbWVudEltcGwgJmRpdiA9IHN0
YXRpY19jYXN0PEhUTUxEaXZFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAo
dG9rZW4pIHsKLSAgICAgIGNhc2UgRGl2QWxpZ246ICAgICAgICAgICB7IGRpdi5zZXRBbGlnbihz
dHIpOyByZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6b3B0aW9uU2V0
dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0
IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgRE9NRXhjZXB0aW9uVHJhbnNsYXRvciBleGNl
cHRpb24oZXhlYyk7CisgICAgSFRNTE9wdGlvbkVsZW1lbnRJbXBsJiBvcHRpb24gPSAqc3RhdGlj
X2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2Vu
KSB7CisgICAgICAgIC8vIHJlYWQtb25seTogZm9ybQorICAgICAgICBjYXNlIE9wdGlvbkRlZmF1
bHRTZWxlY3RlZDogeyBvcHRpb24uc2V0RGVmYXVsdFNlbGVjdGVkKHZhbHVlLnRvQm9vbGVhbihl
eGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIE9wdGlvblRleHQ6ICAgICAgICAgICAgeyBv
cHRpb24uc2V0VGV4dChzdHIsIGV4Y2VwdGlvbik7IHJldHVybjsgfQorICAgICAgICAvLyByZWFk
LW9ubHk6IGluZGV4CisgICAgICAgIGNhc2UgT3B0aW9uRGlzYWJsZWQ6ICAgICAgICB7IG9wdGlv
bi5zZXREaXNhYmxlZCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAg
Y2FzZSBPcHRpb25MYWJlbDogICAgICAgICAgIHsgb3B0aW9uLnNldExhYmVsKHN0cik7IHJldHVy
bjsgfQorICAgICAgICBjYXNlIE9wdGlvblNlbGVjdGVkOiAgICAgICAgeyBvcHRpb24uc2V0U2Vs
ZWN0ZWQodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgT3B0
aW9uVmFsdWU6ICAgICAgICAgICB7IG9wdGlvbi5zZXRWYWx1ZShzdHIpOyByZXR1cm47IH0KICAg
ICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9QOiB7Ci0gICAgICBIVE1MUGFyYWdyYXBoRWxl
bWVudEltcGwgJnBhcmFncmFwaCA9IHN0YXRpY19jYXN0PEhUTUxQYXJhZ3JhcGhFbGVtZW50SW1w
bCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgUGFyYWdy
YXBoQWxpZ246ICAgICB7IHBhcmFncmFwaC5zZXRBbGlnbihzdHIpOyByZXR1cm47IH0KLSAgICAg
IH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6aW5wdXRTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikK
K3sKKyAgICBIVE1MSW5wdXRFbGVtZW50SW1wbCYgaW5wdXQgPSAqc3RhdGljX2Nhc3Q8SFRNTElu
cHV0RWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAg
Y2FzZSBJbnB1dERlZmF1bHRWYWx1ZTogICAgeyBpbnB1dC5zZXREZWZhdWx0VmFsdWUoc3RyKTsg
cmV0dXJuOyB9CisgICAgICAgIGNhc2UgSW5wdXREZWZhdWx0Q2hlY2tlZDogIHsgaW5wdXQuc2V0
RGVmYXVsdENoZWNrZWQodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAg
IC8vIHJlYWQtb25seTogZm9ybQorICAgICAgICBjYXNlIElucHV0QWNjZXB0OiAgICAgICAgICB7
IGlucHV0LnNldEFjY2VwdChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJbnB1dEFjY2Vz
c0tleTogICAgICAgeyBpbnB1dC5zZXRBY2Nlc3NLZXkoc3RyKTsgcmV0dXJuOyB9CisgICAgICAg
IGNhc2UgSW5wdXRBbGlnbjogICAgICAgICAgIHsgaW5wdXQuc2V0QWxpZ24oc3RyKTsgcmV0dXJu
OyB9CisgICAgICAgIGNhc2UgSW5wdXRBbHQ6ICAgICAgICAgICAgIHsgaW5wdXQuc2V0QWx0KHN0
cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIElucHV0Q2hlY2tlZDogICAgICAgICB7IGlucHV0
LnNldENoZWNrZWQodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNh
c2UgSW5wdXREaXNhYmxlZDogICAgICAgIHsgaW5wdXQuc2V0RGlzYWJsZWQodmFsdWUudG9Cb29s
ZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgSW5wdXRNYXhMZW5ndGg6ICAgICAg
IHsgaW5wdXQuc2V0TWF4TGVuZ3RoKHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KKyAg
ICAgICAgY2FzZSBJbnB1dE5hbWU6ICAgICAgICAgICAgeyBpbnB1dC5zZXROYW1lKHN0cik7IHJl
dHVybjsgfQorICAgICAgICBjYXNlIElucHV0UmVhZE9ubHk6ICAgICAgICB7IGlucHV0LnNldFJl
YWRPbmx5KHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIElu
cHV0U2l6ZTogICAgICAgICAgICB7IGlucHV0LnNldFNpemUoc3RyKTsgcmV0dXJuOyB9CisgICAg
ICAgIGNhc2UgSW5wdXRTZWxlY3Rpb25TdGFydDogIHsgaW5wdXQuc2V0U2VsZWN0aW9uU3RhcnQo
dmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIElucHV0U2VsZWN0
aW9uRW5kOiAgICB7IGlucHV0LnNldFNlbGVjdGlvbkVuZCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsg
cmV0dXJuOyB9CisgICAgICAgIGNhc2UgSW5wdXRTcmM6ICAgICAgICAgICAgIHsgaW5wdXQuc2V0
U3JjKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIElucHV0VGFiSW5kZXg6ICAgICAgICB7
IGlucHV0LnNldFRhYkluZGV4KHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KKyAgICAg
ICAgY2FzZSBJbnB1dFR5cGU6ICAgICAgICAgICAgeyBpbnB1dC5zZXRUeXBlKHN0cik7IHJldHVy
bjsgfQorICAgICAgICBjYXNlIElucHV0VXNlTWFwOiAgICAgICAgICB7IGlucHV0LnNldFVzZU1h
cChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJbnB1dFZhbHVlOiAgICAgICAgICAgeyBp
bnB1dC5zZXRWYWx1ZShzdHIpOyByZXR1cm47IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2Fz
ZSBJRF9IMToKLSAgICBjYXNlIElEX0gyOgotICAgIGNhc2UgSURfSDM6Ci0gICAgY2FzZSBJRF9I
NDoKLSAgICBjYXNlIElEX0g1OgotICAgIGNhc2UgSURfSDY6IHsKLSAgICAgIEhUTUxIZWFkaW5n
RWxlbWVudEltcGwgJmhlYWRpbmcgPSBzdGF0aWNfY2FzdDxIVE1MSGVhZGluZ0VsZW1lbnRJbXBs
ICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgY2FzZSBIZWFkaW5n
QWxpZ246ICAgICAgICAgeyBoZWFkaW5nLnNldEFsaWduKHN0cik7IHJldHVybjsgfQotICAgICAg
fQorfQorCit2b2lkIEhUTUxFbGVtZW50Ojp0ZXh0QXJlYVNldHRlcihFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3Ry
KQoreworICAgIEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBsJiB0ZXh0YXJlYSA9ICpzdGF0aWNfY2Fz
dDxIVE1MVGV4dEFyZWFFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikg
eworICAgICAgICBjYXNlIFRleHRBcmVhRGVmYXVsdFZhbHVlOiAgICB7IHRleHRhcmVhLnNldERl
ZmF1bHRWYWx1ZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgLy8gcmVhZC1vbmx5OiBmb3JtCisg
ICAgICAgIGNhc2UgVGV4dEFyZWFBY2Nlc3NLZXk6ICAgICAgIHsgdGV4dGFyZWEuc2V0QWNjZXNz
S2V5KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRleHRBcmVhQ29sczogICAgICAgICAg
ICB7IHRleHRhcmVhLnNldENvbHModmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQorICAg
ICAgICBjYXNlIFRleHRBcmVhRGlzYWJsZWQ6ICAgICAgICB7IHRleHRhcmVhLnNldERpc2FibGVk
KHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRleHRBcmVh
TmFtZTogICAgICAgICAgICB7IHRleHRhcmVhLnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9CisgICAg
ICAgIGNhc2UgVGV4dEFyZWFSZWFkT25seTogICAgICAgIHsgdGV4dGFyZWEuc2V0UmVhZE9ubHko
dmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGV4dEFyZWFS
b3dzOiAgICAgICAgICAgIHsgdGV4dGFyZWEuc2V0Um93cyh2YWx1ZS50b0ludDMyKGV4ZWMpKTsg
cmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGV4dEFyZWFTZWxlY3Rpb25TdGFydDogIHsgdGV4dGFy
ZWEuc2V0U2VsZWN0aW9uU3RhcnQodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQorICAg
ICAgICBjYXNlIFRleHRBcmVhU2VsZWN0aW9uRW5kOiAgICB7IHRleHRhcmVhLnNldFNlbGVjdGlv
bkVuZCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGV4dEFy
ZWFUYWJJbmRleDogICAgICAgIHsgdGV4dGFyZWEuc2V0VGFiSW5kZXgodmFsdWUudG9JbnQzMihl
eGVjKSk7IHJldHVybjsgfQorICAgICAgICAvLyByZWFkLW9ubHk6IHR5cGUKKyAgICAgICAgY2Fz
ZSBUZXh0QXJlYVZhbHVlOiAgICAgICAgICAgeyB0ZXh0YXJlYS5zZXRWYWx1ZShzdHIpOyByZXR1
cm47IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9CTE9DS1FVT1RFOiB7Ci0gICAg
ICBIVE1MQmxvY2txdW90ZUVsZW1lbnRJbXBsICZibG9ja3F1b3RlID0gc3RhdGljX2Nhc3Q8SFRN
TEJsb2NrcXVvdGVFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4p
IHsKLSAgICAgIGNhc2UgQmxvY2tRdW90ZUNpdGU6ICAgICAgIHsgYmxvY2txdW90ZS5zZXRDaXRl
KHN0cik7IHJldHVybjsgfQotICAgICAgfQorfQorCit2b2lkIEhUTUxFbGVtZW50OjpidXR0b25T
ZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29u
c3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MQnV0dG9uRWxlbWVudEltcGwmIGJ1
dHRvbiA9ICpzdGF0aWNfY2FzdDxIVE1MQnV0dG9uRWxlbWVudEltcGwqPihpbXBsKCkpOworICAg
IHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgLy8gcmVhZC1vbmx5OiBmb3JtCisgICAgICAgIGNh
c2UgQnV0dG9uQWNjZXNzS2V5OiAgICAgICB7IGJ1dHRvbi5zZXRBY2Nlc3NLZXkoc3RyKTsgcmV0
dXJuOyB9CisgICAgICAgIGNhc2UgQnV0dG9uRGlzYWJsZWQ6ICAgICAgICB7IGJ1dHRvbi5zZXRE
aXNhYmxlZCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBC
dXR0b25OYW1lOiAgICAgICAgICAgIHsgYnV0dG9uLnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9Cisg
ICAgICAgIGNhc2UgQnV0dG9uVGFiSW5kZXg6ICAgICAgICB7IGJ1dHRvbi5zZXRUYWJJbmRleCh2
YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIC8vIHJlYWQtb25seTogdHlw
ZQorICAgICAgICBjYXNlIEJ1dHRvblZhbHVlOiAgICAgICAgICAgeyBidXR0b24uc2V0VmFsdWUo
c3RyKTsgcmV0dXJuOyB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfUTogewotICAg
ICAgSFRNTFF1b3RlRWxlbWVudEltcGwgJnF1b3RlID0gc3RhdGljX2Nhc3Q8SFRNTFF1b3RlRWxl
bWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNl
IFF1b3RlQ2l0ZTogICAgICAgICAgICB7IHF1b3RlLnNldENpdGUoc3RyKTsgcmV0dXJuOyB9Ci0g
ICAgICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OmxhYmVsU2V0dGVyKEV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBz
dHIpCit7CisgICAgSFRNTExhYmVsRWxlbWVudEltcGwmIGxhYmVsID0gKnN0YXRpY19jYXN0PEhU
TUxMYWJlbEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAg
ICAgIC8vIHJlYWQtb25seTogZm9ybQorICAgICAgICBjYXNlIExhYmVsQWNjZXNzS2V5OiAgICAg
ICB7IGxhYmVsLnNldEFjY2Vzc0tleShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBMYWJl
bEh0bWxGb3I6ICAgICAgICAgeyBsYWJlbC5zZXRIdG1sRm9yKHN0cik7IHJldHVybjsgfQogICAg
IH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX1BSRTogewotICAgICAgSFRNTFByZUVsZW1lbnRJ
bXBsICZwcmUgPSBzdGF0aWNfY2FzdDxIVE1MUHJlRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0g
ICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIFByZVdpZHRoOiAgICAgICAgICAgeyBw
cmUuc2V0V2lkdGgodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQotICAgICAgfQorfQor
Cit2b2lkIEhUTUxFbGVtZW50OjpmaWVsZFNldFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQorewor
fQorCit2b2lkIEhUTUxFbGVtZW50OjpsZWdlbmRTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sK
KyAgICBIVE1MTGVnZW5kRWxlbWVudEltcGwmIGxlZ2VuZCA9ICpzdGF0aWNfY2FzdDxIVE1MTGVn
ZW5kRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAg
Ly8gcmVhZC1vbmx5OiBmb3JtCisgICAgICAgIGNhc2UgTGVnZW5kQWNjZXNzS2V5OiAgICAgICB7
IGxlZ2VuZC5zZXRBY2Nlc3NLZXkoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgTGVnZW5k
QWxpZ246ICAgICAgICAgICB7IGxlZ2VuZC5zZXRBbGlnbihzdHIpOyByZXR1cm47IH0KICAgICB9
Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9CUjogewotICAgICAgSFRNTEJSRWxlbWVudEltcGwg
JmJyID0gc3RhdGljX2Nhc3Q8SFRNTEJSRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBz
d2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIEJSQ2xlYXI6ICAgICAgICAgICB7IGJyLnNldENs
ZWFyKHN0cik7IHJldHVybjsgfQotICAgICAgfQorfQorCit2b2lkIEhUTUxFbGVtZW50Ojp1TGlz
dFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBj
b25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxVTGlzdEVsZW1lbnRJbXBsJiB1
TGlzdCA9ICpzdGF0aWNfY2FzdDxIVE1MVUxpc3RFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAg
c3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNlIFVMaXN0Q29tcGFjdDogICAgICAgICB7IHVM
aXN0LnNldENvbXBhY3QodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAg
IGNhc2UgVUxpc3RUeXBlOiAgICAgICAgICAgIHsgdUxpc3Quc2V0VHlwZShzdHIpOyByZXR1cm47
IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9CQVNFRk9OVDogewotICAgICAgSFRN
TEJhc2VGb250RWxlbWVudEltcGwgJmJhc2VGb250ID0gc3RhdGljX2Nhc3Q8SFRNTEJhc2VGb250
RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBj
YXNlIEJhc2VGb250Q29sb3I6ICAgICAgICAgICB7IGJhc2VGb250LnNldENvbG9yKHN0cik7IHJl
dHVybjsgfQotICAgICAgY2FzZSBCYXNlRm9udEZhY2U6ICAgICAgICAgICAgeyBiYXNlRm9udC5z
ZXRGYWNlKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBCYXNlRm9udFNpemU6ICAgICAgICAg
ICAgeyBiYXNlRm9udC5zZXRTaXplKHN0cik7IHJldHVybjsgfQotICAgICAgfQorfQorCit2b2lk
IEhUTUxFbGVtZW50OjpvTGlzdFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29u
c3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxP
TGlzdEVsZW1lbnRJbXBsJiBvTGlzdCA9ICpzdGF0aWNfY2FzdDxIVE1MT0xpc3RFbGVtZW50SW1w
bCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNlIE9MaXN0Q29t
cGFjdDogICAgICAgICB7IG9MaXN0LnNldENvbXBhY3QodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsg
cmV0dXJuOyB9CisgICAgICAgIGNhc2UgT0xpc3RTdGFydDogICAgICAgICAgIHsgb0xpc3Quc2V0
U3RhcnQodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIE9MaXN0
VHlwZTogICAgICAgICAgICB7IG9MaXN0LnNldFR5cGUoc3RyKTsgcmV0dXJuOyB9CiAgICAgfQot
ICAgIGJyZWFrOwotICAgIGNhc2UgSURfRk9OVDogewotICAgICAgSFRNTEZvbnRFbGVtZW50SW1w
bCAmZm9udCA9IHN0YXRpY19jYXN0PEhUTUxGb250RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0g
ICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIEZvbnRDb2xvcjogICAgICAgICAgIHsg
Zm9udC5zZXRDb2xvcihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgRm9udEZhY2U6ICAgICAg
ICAgICAgeyBmb250LnNldEZhY2Uoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEZvbnRTaXpl
OiAgICAgICAgICAgIHsgZm9udC5zZXRTaXplKHN0cik7IHJldHVybjsgfQotICAgICAgfQorfQor
Cit2b2lkIEhUTUxFbGVtZW50OjpkTGlzdFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
biwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAg
IEhUTUxETGlzdEVsZW1lbnRJbXBsJiBkTGlzdCA9ICpzdGF0aWNfY2FzdDxIVE1MRExpc3RFbGVt
ZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IERMaXN0Q29tcGFjdCkKKyAgICAg
ICAgZExpc3Quc2V0Q29tcGFjdCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOworfQorCit2b2lkIEhU
TUxFbGVtZW50OjpkaXJTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZh
bHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MRGlyZWN0
b3J5RWxlbWVudEltcGwmIGRpcmVjdG9yeSA9ICpzdGF0aWNfY2FzdDxIVE1MRGlyZWN0b3J5RWxl
bWVudEltcGwqPihpbXBsKCkpOworICAgIGlmICh0b2tlbiA9PSBEaXJlY3RvcnlDb21wYWN0KQor
ICAgICAgICBkaXJlY3Rvcnkuc2V0Q29tcGFjdCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOworfQor
Cit2b2lkIEhUTUxFbGVtZW50OjptZW51U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
LCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAg
SFRNTE1lbnVFbGVtZW50SW1wbCYgbWVudSA9ICpzdGF0aWNfY2FzdDxIVE1MTWVudUVsZW1lbnRJ
bXBsKj4oaW1wbCgpKTsKKyAgICBpZiAodG9rZW4gPT0gTWVudUNvbXBhY3QpCisgICAgICAgIG1l
bnUuc2V0Q29tcGFjdCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOworfQorCit2b2lkIEhUTUxFbGVt
ZW50OjpsaVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZh
bHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxMSUVsZW1lbnRJbXBs
JiBsaSA9ICpzdGF0aWNfY2FzdDxIVE1MTElFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dp
dGNoICh0b2tlbikgeworICAgICAgICBjYXNlIExJVHlwZTogICAgICAgICAgICB7IGxpLnNldFR5
cGUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgTElWYWx1ZTogICAgICAgICAgIHsgbGku
c2V0VmFsdWUodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQogICAgIH0KLSAgICBicmVh
azsKLSAgICBjYXNlIElEX0hSOiB7Ci0gICAgICBIVE1MSFJFbGVtZW50SW1wbCAmaHIgPSBzdGF0
aWNfY2FzdDxIVE1MSFJFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9r
ZW4pIHsKLSAgICAgIGNhc2UgSFJBbGlnbjogICAgICAgICAgIHsgaHIuc2V0QWxpZ24oc3RyKTsg
cmV0dXJuOyB9Ci0gICAgICBjYXNlIEhSTm9TaGFkZTogICAgICAgICB7IGhyLnNldE5vU2hhZGUo
dmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEhSU2l6ZTogICAg
ICAgICAgICB7IGhyLnNldFNpemUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEhSV2lkdGg6
ICAgICAgICAgICB7IGhyLnNldFdpZHRoKHN0cik7IHJldHVybjsgfQotICAgICAgfQorfQorCit2
b2lkIEhUTUxFbGVtZW50OjpkaXZTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNv
bnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1M
RGl2RWxlbWVudEltcGwmIGRpdiA9ICpzdGF0aWNfY2FzdDxIVE1MRGl2RWxlbWVudEltcGwqPihp
bXBsKCkpOworICAgIGlmICh0b2tlbiA9PSBEaXZBbGlnbikKKyAgICAgICAgZGl2LnNldEFsaWdu
KHN0cik7Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OnBhcmFncmFwaFNldHRlcihFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmlu
ZyYgc3RyKQoreworICAgIEhUTUxQYXJhZ3JhcGhFbGVtZW50SW1wbCYgcGFyYWdyYXBoID0gKnN0
YXRpY19jYXN0PEhUTUxQYXJhZ3JhcGhFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRv
a2VuID09IFBhcmFncmFwaEFsaWduKQorICAgICAgICBwYXJhZ3JhcGguc2V0QWxpZ24oc3RyKTsK
K30KKwordm9pZCBIVE1MRWxlbWVudDo6aGVhZGluZ1NldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQor
eworICAgIEhUTUxIZWFkaW5nRWxlbWVudEltcGwmIGhlYWRpbmcgPSAqc3RhdGljX2Nhc3Q8SFRN
TEhlYWRpbmdFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IEhlYWRpbmdB
bGlnbikKKyAgICAgICAgaGVhZGluZy5zZXRBbGlnbihzdHIpOworfQorCit2b2lkIEhUTUxFbGVt
ZW50OjpibG9ja1F1b3RlU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBW
YWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTEJsb2Nr
cXVvdGVFbGVtZW50SW1wbCYgYmxvY2tRdW90ZSA9ICpzdGF0aWNfY2FzdDxIVE1MQmxvY2txdW90
ZUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBpZiAodG9rZW4gPT0gQmxvY2tRdW90ZUNpdGUp
CisgICAgICAgIGJsb2NrUXVvdGUuc2V0Q2l0ZShzdHIpOworfQorCit2b2lkIEhUTUxFbGVtZW50
OjpxdW90ZVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZh
bHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxRdW90ZUVsZW1lbnRJ
bXBsJiBxdW90ZSA9ICpzdGF0aWNfY2FzdDxIVE1MUXVvdGVFbGVtZW50SW1wbCo+KGltcGwoKSk7
CisgICAgaWYgKHRva2VuID09IFF1b3RlQ2l0ZSkKKyAgICAgICAgcXVvdGUuc2V0Q2l0ZShzdHIp
OworfQorCit2b2lkIEhUTUxFbGVtZW50OjpwcmVTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sK
KyAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yICd3cmFwJyB3aGVuIHdoaXRlLXNwYWNlOiBw
cmUtd3JhcCBpcyBpbXBsZW1lbnRlZC4KKyAgICBIVE1MUHJlRWxlbWVudEltcGwmIHByZSA9ICpz
dGF0aWNfY2FzdDxIVE1MUHJlRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIGlmICh0b2tlbiA9
PSBQcmVXaWR0aCkKKyAgICAgICAgcHJlLnNldFdpZHRoKHZhbHVlLnRvSW50MzIoZXhlYykpOwor
fQorCit2b2lkIEhUTUxFbGVtZW50OjpiclNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
biwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAg
IEhUTUxCUkVsZW1lbnRJbXBsJiBiciA9ICpzdGF0aWNfY2FzdDxIVE1MQlJFbGVtZW50SW1wbCo+
KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IEJSQ2xlYXIpCisgICAgICAgIGJyLnNldENsZWFy
KHN0cik7Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OmJhc2VGb250U2V0dGVyKEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5n
JiBzdHIpCit7CisgICAgSFRNTEJhc2VGb250RWxlbWVudEltcGwmIGJhc2VGb250ID0gKnN0YXRp
Y19jYXN0PEhUTUxCYXNlRm9udEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRv
a2VuKSB7CisgICAgICAgIGNhc2UgQmFzZUZvbnRDb2xvcjogICAgICAgICAgIHsgYmFzZUZvbnQu
c2V0Q29sb3Ioc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQmFzZUZvbnRGYWNlOiAgICAg
ICAgICAgIHsgYmFzZUZvbnQuc2V0RmFjZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBC
YXNlRm9udFNpemU6ICAgICAgICAgICAgeyBiYXNlRm9udC5zZXRTaXplKHN0cik7IHJldHVybjsg
fQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0lOUzoKLSAgICBjYXNlIElEX0RFTDog
ewotICAgICAgSFRNTE1vZEVsZW1lbnRJbXBsICZtb2QgPSBzdGF0aWNfY2FzdDxIVE1MTW9kRWxl
bWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNl
IE1vZENpdGU6ICAgICAgICAgICAgeyBtb2Quc2V0Q2l0ZShzdHIpOyByZXR1cm47IH0KLSAgICAg
IGNhc2UgTW9kRGF0ZVRpbWU6ICAgICAgICB7IG1vZC5zZXREYXRlVGltZShzdHIpOyByZXR1cm47
IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6Zm9udFNldHRlcihFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmlu
ZyYgc3RyKQoreworICAgIEhUTUxGb250RWxlbWVudEltcGwmIGZvbnQgPSAqc3RhdGljX2Nhc3Q8
SFRNTEZvbnRFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAg
ICAgICBjYXNlIEZvbnRDb2xvcjogICAgICAgICAgIHsgZm9udC5zZXRDb2xvcihzdHIpOyByZXR1
cm47IH0KKyAgICAgICAgY2FzZSBGb250RmFjZTogICAgICAgICAgICB7IGZvbnQuc2V0RmFjZShz
dHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBGb250U2l6ZTogICAgICAgICAgICB7IGZvbnQu
c2V0U2l6ZShzdHIpOyByZXR1cm47IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9B
OiB7Ci0gICAgICBIVE1MQW5jaG9yRWxlbWVudEltcGwgJmFuY2hvciA9IHN0YXRpY19jYXN0PEhU
TUxBbmNob3JFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsK
LSAgICAgIGNhc2UgQW5jaG9yQWNjZXNzS2V5OiAgICAgICB7IGFuY2hvci5zZXRBY2Nlc3NLZXko
c3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEFuY2hvckNoYXJzZXQ6ICAgICAgICAgeyBhbmNo
b3Iuc2V0Q2hhcnNldChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQW5jaG9yQ29vcmRzOiAg
ICAgICAgICB7IGFuY2hvci5zZXRDb29yZHMoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEFu
Y2hvckhyZWY6ICAgICAgICAgICAgeyBhbmNob3Iuc2V0SHJlZihzdHIpOyByZXR1cm47IH0KLSAg
ICAgIGNhc2UgQW5jaG9ySHJlZkxhbmc6ICAgICAgICB7IGFuY2hvci5zZXRIcmVmbGFuZyhzdHIp
OyByZXR1cm47IH0KLSAgICAgIGNhc2UgQW5jaG9yTmFtZTogICAgICAgICAgICB7IGFuY2hvci5z
ZXROYW1lKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBBbmNob3JSZWw6ICAgICAgICAgICAg
IHsgYW5jaG9yLnNldFJlbChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQW5jaG9yUmV2OiAg
ICAgICAgICAgICB7IGFuY2hvci5zZXRSZXYoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEFu
Y2hvclNoYXBlOiAgICAgICAgICAgeyBhbmNob3Iuc2V0U2hhcGUoc3RyKTsgcmV0dXJuOyB9Ci0g
ICAgICBjYXNlIEFuY2hvclRhYkluZGV4OiAgICAgICAgeyBhbmNob3Iuc2V0VGFiSW5kZXgodmFs
dWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBBbmNob3JUYXJnZXQ6ICAg
ICAgICAgIHsgYW5jaG9yLnNldFRhcmdldChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQW5j
aG9yVHlwZTogICAgICAgICAgICB7IGFuY2hvci5zZXRUeXBlKHN0cik7IHJldHVybjsgfQotICAg
ICAgfQorfQorCit2b2lkIEhUTUxFbGVtZW50OjpoclNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQor
eworICAgIEhUTUxIUkVsZW1lbnRJbXBsJiBociA9ICpzdGF0aWNfY2FzdDxIVE1MSFJFbGVtZW50
SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNlIEhSQWxp
Z246ICAgICAgICAgICB7IGhyLnNldEFsaWduKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNl
IEhSTm9TaGFkZTogICAgICAgICB7IGhyLnNldE5vU2hhZGUodmFsdWUudG9Cb29sZWFuKGV4ZWMp
KTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgSFJTaXplOiAgICAgICAgICAgIHsgaHIuc2V0U2l6
ZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBIUldpZHRoOiAgICAgICAgICAgeyBoci5z
ZXRXaWR0aChzdHIpOyByZXR1cm47IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9J
TUc6IHsKLSAgICAgIEhUTUxJbWFnZUVsZW1lbnRJbXBsICZpbWFnZSA9IHN0YXRpY19jYXN0PEhU
TUxJbWFnZUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewot
ICAgICAgY2FzZSBJbWFnZU5hbWU6ICAgICAgICAgICAgeyBpbWFnZS5zZXROYW1lKHN0cik7IHJl
dHVybjsgfQotICAgICAgY2FzZSBJbWFnZUFsaWduOiAgICAgICAgICAgeyBpbWFnZS5zZXRBbGln
bihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSW1hZ2VBbHQ6ICAgICAgICAgICAgIHsgaW1h
Z2Uuc2V0QWx0KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBJbWFnZUJvcmRlcjogICAgICAg
ICAgeyBpbWFnZS5zZXRCb3JkZXIodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQotICAg
ICAgY2FzZSBJbWFnZUhlaWdodDogICAgICAgICAgeyBpbWFnZS5zZXRIZWlnaHQodmFsdWUudG9J
bnQzMihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBJbWFnZUhzcGFjZTogICAgICAgICAg
eyBpbWFnZS5zZXRIc3BhY2UodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQotICAgICAg
Y2FzZSBJbWFnZUlzTWFwOiAgICAgICAgICAgeyBpbWFnZS5zZXRJc01hcCh2YWx1ZS50b0Jvb2xl
YW4oZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSW1hZ2VMb25nRGVzYzogICAgICAgIHsg
aW1hZ2Uuc2V0TG9uZ0Rlc2Moc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEltYWdlU3JjOiAg
ICAgICAgICAgICB7IGltYWdlLnNldFNyYyhzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSW1h
Z2VVc2VNYXA6ICAgICAgICAgIHsgaW1hZ2Uuc2V0VXNlTWFwKHN0cik7IHJldHVybjsgfQotICAg
ICAgY2FzZSBJbWFnZVZzcGFjZTogICAgICAgICAgeyBpbWFnZS5zZXRWc3BhY2UodmFsdWUudG9J
bnQzMihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBJbWFnZVdpZHRoOiAgICAgICAgICAg
eyBpbWFnZS5zZXRXaWR0aCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICB9
Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6Om1vZFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQorewor
ICAgIEhUTUxNb2RFbGVtZW50SW1wbCYgbW9kID0gKnN0YXRpY19jYXN0PEhUTUxNb2RFbGVtZW50
SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNlIE1vZENp
dGU6ICAgICAgICAgICAgeyBtb2Quc2V0Q2l0ZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2Fz
ZSBNb2REYXRlVGltZTogICAgICAgIHsgbW9kLnNldERhdGVUaW1lKHN0cik7IHJldHVybjsgfQog
ICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX09CSkVDVDogewotICAgICAgSFRNTE9iamVj
dEVsZW1lbnRJbXBsICZvYmplY3QgPSBzdGF0aWNfY2FzdDxIVE1MT2JqZWN0RWxlbWVudEltcGwg
Jj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICAvLyByZWFkLW9ubHk6
IGZvcm0KLSAgICAgIGNhc2UgT2JqZWN0Q29kZTogICAgICAgICAgICAgICAgIHsgb2JqZWN0LnNl
dENvZGUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIE9iamVjdEFsaWduOiAgICAgICAgICAg
eyBvYmplY3Quc2V0QWxpZ24oc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIE9iamVjdEFyY2hp
dmU6ICAgICAgICAgeyBvYmplY3Quc2V0QXJjaGl2ZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNh
c2UgT2JqZWN0Qm9yZGVyOiAgICAgICAgICB7IG9iamVjdC5zZXRCb3JkZXIoc3RyKTsgcmV0dXJu
OyB9Ci0gICAgICBjYXNlIE9iamVjdENvZGVCYXNlOiAgICAgICAgeyBvYmplY3Quc2V0Q29kZUJh
c2Uoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIE9iamVjdENvZGVUeXBlOiAgICAgICAgeyBv
YmplY3Quc2V0Q29kZVR5cGUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICAvLyByZWFkLW9ubHk6IE9i
amVjdENvbnRlbnREb2N1bWVudAotICAgICAgY2FzZSBPYmplY3REYXRhOiAgICAgICAgICAgIHsg
b2JqZWN0LnNldERhdGEoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIE9iamVjdERlY2xhcmU6
ICAgICAgICAgeyBvYmplY3Quc2V0RGVjbGFyZSh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1
cm47IH0KLSAgICAgIGNhc2UgT2JqZWN0SGVpZ2h0OiAgICAgICAgICB7IG9iamVjdC5zZXRIZWln
aHQoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIE9iamVjdEhzcGFjZTogICAgICAgICAgeyBv
YmplY3Quc2V0SHNwYWNlKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBPYmplY3ROYW1lOiAg
ICAgICAgICAgIHsgb2JqZWN0LnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIE9i
amVjdFN0YW5kYnk6ICAgICAgICAgeyBvYmplY3Quc2V0U3RhbmRieShzdHIpOyByZXR1cm47IH0K
LSAgICAgIGNhc2UgT2JqZWN0VGFiSW5kZXg6ICAgICAgICB7IG9iamVjdC5zZXRUYWJJbmRleCh2
YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIE9iamVjdFR5cGU6ICAg
ICAgICAgICAgeyBvYmplY3Quc2V0VHlwZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgT2Jq
ZWN0VXNlTWFwOiAgICAgICAgICB7IG9iamVjdC5zZXRVc2VNYXAoc3RyKTsgcmV0dXJuOyB9Ci0g
ICAgICBjYXNlIE9iamVjdFZzcGFjZTogICAgICAgICAgeyBvYmplY3Quc2V0VnNwYWNlKHN0cik7
IHJldHVybjsgfQotICAgICAgY2FzZSBPYmplY3RXaWR0aDogICAgICAgICAgIHsgb2JqZWN0LnNl
dFdpZHRoKHN0cik7IHJldHVybjsgfQotICAgICAgfQorfQorCit2b2lkIEhUTUxFbGVtZW50Ojph
bmNob3JTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1
ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MQW5jaG9yRWxlbWVudElt
cGwmIGFuY2hvciA9ICpzdGF0aWNfY2FzdDxIVE1MQW5jaG9yRWxlbWVudEltcGwqPihpbXBsKCkp
OworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBBbmNob3JBY2Nlc3NLZXk6ICAg
ICAgIHsgYW5jaG9yLnNldEFjY2Vzc0tleShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBB
bmNob3JDaGFyc2V0OiAgICAgICAgIHsgYW5jaG9yLnNldENoYXJzZXQoc3RyKTsgcmV0dXJuOyB9
CisgICAgICAgIGNhc2UgQW5jaG9yQ29vcmRzOiAgICAgICAgICB7IGFuY2hvci5zZXRDb29yZHMo
c3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQW5jaG9ySHJlZjogICAgICAgICAgICB7IGFu
Y2hvci5zZXRIcmVmKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEFuY2hvckhyZWZMYW5n
OiAgICAgICAgeyBhbmNob3Iuc2V0SHJlZmxhbmcoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNh
c2UgQW5jaG9yTmFtZTogICAgICAgICAgICB7IGFuY2hvci5zZXROYW1lKHN0cik7IHJldHVybjsg
fQorICAgICAgICBjYXNlIEFuY2hvclJlbDogICAgICAgICAgICAgeyBhbmNob3Iuc2V0UmVsKHN0
cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEFuY2hvclJldjogICAgICAgICAgICAgeyBhbmNo
b3Iuc2V0UmV2KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEFuY2hvclNoYXBlOiAgICAg
ICAgICAgeyBhbmNob3Iuc2V0U2hhcGUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQW5j
aG9yVGFiSW5kZXg6ICAgICAgICB7IGFuY2hvci5zZXRUYWJJbmRleCh2YWx1ZS50b0ludDMyKGV4
ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQW5jaG9yVGFyZ2V0OiAgICAgICAgICB7IGFu
Y2hvci5zZXRUYXJnZXQoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQW5jaG9yVHlwZTog
ICAgICAgICAgICB7IGFuY2hvci5zZXRUeXBlKHN0cik7IHJldHVybjsgfQogICAgIH0KLSAgICBi
cmVhazsKLSAgICBjYXNlIElEX1BBUkFNOiB7Ci0gICAgICBIVE1MUGFyYW1FbGVtZW50SW1wbCAm
cGFyYW0gPSBzdGF0aWNfY2FzdDxIVE1MUGFyYW1FbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAg
ICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgUGFyYW1OYW1lOiAgICAgICAgICAgIHsg
cGFyYW0uc2V0TmFtZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgUGFyYW1UeXBlOiAgICAg
ICAgICAgIHsgcGFyYW0uc2V0VHlwZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgUGFyYW1W
YWx1ZTogICAgICAgICAgIHsgcGFyYW0uc2V0VmFsdWUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBj
YXNlIFBhcmFtVmFsdWVUeXBlOiAgICAgICB7IHBhcmFtLnNldFZhbHVlVHlwZShzdHIpOyByZXR1
cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6aW1hZ2VTZXR0ZXIoRXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01T
dHJpbmcmIHN0cikKK3sKKyAgICBIVE1MSW1hZ2VFbGVtZW50SW1wbCYgaW1hZ2UgPSAqc3RhdGlj
X2Nhc3Q8SFRNTEltYWdlRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4p
IHsKKyAgICAgICAgY2FzZSBJbWFnZU5hbWU6ICAgICAgICAgICAgeyBpbWFnZS5zZXROYW1lKHN0
cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEltYWdlQWxpZ246ICAgICAgICAgICB7IGltYWdl
LnNldEFsaWduKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEltYWdlQWx0OiAgICAgICAg
ICAgICB7IGltYWdlLnNldEFsdChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJbWFnZUJv
cmRlcjogICAgICAgICAgeyBpbWFnZS5zZXRCb3JkZXIodmFsdWUudG9JbnQzMihleGVjKSk7IHJl
dHVybjsgfQorICAgICAgICBjYXNlIEltYWdlSGVpZ2h0OiAgICAgICAgICB7IGltYWdlLnNldEhl
aWdodCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgSW1hZ2VI
c3BhY2U6ICAgICAgICAgIHsgaW1hZ2Uuc2V0SHNwYWNlKHZhbHVlLnRvSW50MzIoZXhlYykpOyBy
ZXR1cm47IH0KKyAgICAgICAgY2FzZSBJbWFnZUlzTWFwOiAgICAgICAgICAgeyBpbWFnZS5zZXRJ
c01hcCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJbWFn
ZUxvbmdEZXNjOiAgICAgICAgeyBpbWFnZS5zZXRMb25nRGVzYyhzdHIpOyByZXR1cm47IH0KKyAg
ICAgICAgY2FzZSBJbWFnZVNyYzogICAgICAgICAgICAgeyBpbWFnZS5zZXRTcmMoc3RyKTsgcmV0
dXJuOyB9CisgICAgICAgIGNhc2UgSW1hZ2VVc2VNYXA6ICAgICAgICAgIHsgaW1hZ2Uuc2V0VXNl
TWFwKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEltYWdlVnNwYWNlOiAgICAgICAgICB7
IGltYWdlLnNldFZzcGFjZSh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAg
IGNhc2UgSW1hZ2VXaWR0aDogICAgICAgICAgIHsgaW1hZ2Uuc2V0V2lkdGgodmFsdWUudG9JbnQz
MihleGVjKSk7IHJldHVybjsgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0FQUExF
VDogewotICAgICAgSFRNTEFwcGxldEVsZW1lbnRJbXBsICZhcHBsZXQgPSBzdGF0aWNfY2FzdDxI
VE1MQXBwbGV0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7
Ci0gICAgICBjYXNlIEFwcGxldEFsaWduOiAgICAgICAgICAgeyBhcHBsZXQuc2V0QWxpZ24oc3Ry
KTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEFwcGxldEFsdDogICAgICAgICAgICAgeyBhcHBsZXQu
c2V0QWx0KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBBcHBsZXRBcmNoaXZlOiAgICAgICAg
IHsgYXBwbGV0LnNldEFyY2hpdmUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEFwcGxldENv
ZGU6ICAgICAgICAgICAgeyBhcHBsZXQuc2V0Q29kZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNh
c2UgQXBwbGV0Q29kZUJhc2U6ICAgICAgICB7IGFwcGxldC5zZXRDb2RlQmFzZShzdHIpOyByZXR1
cm47IH0KLSAgICAgIGNhc2UgQXBwbGV0SGVpZ2h0OiAgICAgICAgICB7IGFwcGxldC5zZXRIZWln
aHQoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEFwcGxldEhzcGFjZTogICAgICAgICAgeyBh
cHBsZXQuc2V0SHNwYWNlKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBBcHBsZXROYW1lOiAg
ICAgICAgICAgIHsgYXBwbGV0LnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEFw
cGxldE9iamVjdDogICAgICAgICAgeyBhcHBsZXQuc2V0T2JqZWN0KHN0cik7IHJldHVybjsgfQot
ICAgICAgY2FzZSBBcHBsZXRWc3BhY2U6ICAgICAgICAgIHsgYXBwbGV0LnNldFZzcGFjZShzdHIp
OyByZXR1cm47IH0KLSAgICAgIGNhc2UgQXBwbGV0V2lkdGg6ICAgICAgICAgICB7IGFwcGxldC5z
ZXRXaWR0aChzdHIpOyByZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6
b2JqZWN0U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFs
dWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTE9iamVjdEVsZW1lbnRJ
bXBsJiBvYmplY3QgPSAqc3RhdGljX2Nhc3Q8SFRNTE9iamVjdEVsZW1lbnRJbXBsKj4oaW1wbCgp
KTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIC8vIHJlYWQtb25seTogZm9ybQorICAg
ICAgICBjYXNlIE9iamVjdENvZGU6ICAgICAgICAgICAgeyBvYmplY3Quc2V0Q29kZShzdHIpOyBy
ZXR1cm47IH0KKyAgICAgICAgY2FzZSBPYmplY3RBbGlnbjogICAgICAgICAgIHsgb2JqZWN0LnNl
dEFsaWduKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIE9iamVjdEFyY2hpdmU6ICAgICAg
ICAgeyBvYmplY3Quc2V0QXJjaGl2ZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBPYmpl
Y3RCb3JkZXI6ICAgICAgICAgIHsgb2JqZWN0LnNldEJvcmRlcihzdHIpOyByZXR1cm47IH0KKyAg
ICAgICAgY2FzZSBPYmplY3RDb2RlQmFzZTogICAgICAgIHsgb2JqZWN0LnNldENvZGVCYXNlKHN0
cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIE9iamVjdENvZGVUeXBlOiAgICAgICAgeyBvYmpl
Y3Quc2V0Q29kZVR5cGUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIC8vIHJlYWQtb25seTogT2Jq
ZWN0Q29udGVudERvY3VtZW50CisgICAgICAgIGNhc2UgT2JqZWN0RGF0YTogICAgICAgICAgICB7
IG9iamVjdC5zZXREYXRhKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIE9iamVjdERlY2xh
cmU6ICAgICAgICAgeyBvYmplY3Quc2V0RGVjbGFyZSh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyBy
ZXR1cm47IH0KKyAgICAgICAgY2FzZSBPYmplY3RIZWlnaHQ6ICAgICAgICAgIHsgb2JqZWN0LnNl
dEhlaWdodChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBPYmplY3RIc3BhY2U6ICAgICAg
ICAgIHsgb2JqZWN0LnNldEhzcGFjZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBPYmpl
Y3ROYW1lOiAgICAgICAgICAgIHsgb2JqZWN0LnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9CisgICAg
ICAgIGNhc2UgT2JqZWN0U3RhbmRieTogICAgICAgICB7IG9iamVjdC5zZXRTdGFuZGJ5KHN0cik7
IHJldHVybjsgfQorICAgICAgICBjYXNlIE9iamVjdFRhYkluZGV4OiAgICAgICAgeyBvYmplY3Qu
c2V0VGFiSW5kZXgodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNl
IE9iamVjdFR5cGU6ICAgICAgICAgICAgeyBvYmplY3Quc2V0VHlwZShzdHIpOyByZXR1cm47IH0K
KyAgICAgICAgY2FzZSBPYmplY3RVc2VNYXA6ICAgICAgICAgIHsgb2JqZWN0LnNldFVzZU1hcChz
dHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBPYmplY3RWc3BhY2U6ICAgICAgICAgIHsgb2Jq
ZWN0LnNldFZzcGFjZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBPYmplY3RXaWR0aDog
ICAgICAgICAgIHsgb2JqZWN0LnNldFdpZHRoKHN0cik7IHJldHVybjsgfQogICAgIH0KLSAgICBi
cmVhazsKLSAgICBjYXNlIElEX01BUDogewotICAgICAgSFRNTE1hcEVsZW1lbnRJbXBsICZtYXAg
PSBzdGF0aWNfY2FzdDxIVE1MTWFwRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0
Y2ggKHRva2VuKSB7Ci0gICAgICAvLyByZWFkLW9ubHk6IGFyZWFzCi0gICAgICBjYXNlIE1hcE5h
bWU6ICAgICAgICAgICAgICAgICB7IG1hcC5zZXROYW1lKHN0cik7IHJldHVybjsgfQotICAgICB9
Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OnBhcmFtU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7
CisgICAgSFRNTFBhcmFtRWxlbWVudEltcGwmIHBhcmFtID0gKnN0YXRpY19jYXN0PEhUTUxQYXJh
bUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNh
c2UgUGFyYW1OYW1lOiAgICAgICAgICAgIHsgcGFyYW0uc2V0TmFtZShzdHIpOyByZXR1cm47IH0K
KyAgICAgICAgY2FzZSBQYXJhbVR5cGU6ICAgICAgICAgICAgeyBwYXJhbS5zZXRUeXBlKHN0cik7
IHJldHVybjsgfQorICAgICAgICBjYXNlIFBhcmFtVmFsdWU6ICAgICAgICAgICB7IHBhcmFtLnNl
dFZhbHVlKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFBhcmFtVmFsdWVUeXBlOiAgICAg
ICB7IHBhcmFtLnNldFZhbHVlVHlwZShzdHIpOyByZXR1cm47IH0KICAgICB9Ci0gICAgYnJlYWs7
Ci0gICAgY2FzZSBJRF9BUkVBOiB7Ci0gICAgICBIVE1MQXJlYUVsZW1lbnRJbXBsICZhcmVhID0g
c3RhdGljX2Nhc3Q8SFRNTEFyZWFFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRj
aCAodG9rZW4pIHsKLSAgICAgIGNhc2UgQXJlYUFjY2Vzc0tleTogICAgICAgeyBhcmVhLnNldEFj
Y2Vzc0tleShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQXJlYUFsdDogICAgICAgICAgICAg
eyBhcmVhLnNldEFsdChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQXJlYUNvb3JkczogICAg
ICAgICAgeyBhcmVhLnNldENvb3JkcyhzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQXJlYUhy
ZWY6ICAgICAgICAgICAgeyBhcmVhLnNldEhyZWYoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNl
IEFyZWFOb0hyZWY6ICAgICAgICAgIHsgYXJlYS5zZXROb0hyZWYodmFsdWUudG9Cb29sZWFuKGV4
ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEFyZWFTaGFwZTogICAgICAgICAgIHsgYXJlYS5z
ZXRTaGFwZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQXJlYVRhYkluZGV4OiAgICAgICAg
eyBhcmVhLnNldFRhYkluZGV4KHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KLSAgICAg
IGNhc2UgQXJlYVRhcmdldDogICAgICAgICAgeyBhcmVhLnNldFRhcmdldChzdHIpOyByZXR1cm47
IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6YXBwbGV0U2V0dGVyKEV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3Ry
aW5nJiBzdHIpCit7CisgICAgSFRNTEFwcGxldEVsZW1lbnRJbXBsJiBhcHBsZXQgPSAqc3RhdGlj
X2Nhc3Q8SFRNTEFwcGxldEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2Vu
KSB7CisgICAgICAgIGNhc2UgQXBwbGV0QWxpZ246ICAgICAgICAgICB7IGFwcGxldC5zZXRBbGln
bihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBBcHBsZXRBbHQ6ICAgICAgICAgICAgIHsg
YXBwbGV0LnNldEFsdChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBBcHBsZXRBcmNoaXZl
OiAgICAgICAgIHsgYXBwbGV0LnNldEFyY2hpdmUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNh
c2UgQXBwbGV0Q29kZTogICAgICAgICAgICB7IGFwcGxldC5zZXRDb2RlKHN0cik7IHJldHVybjsg
fQorICAgICAgICBjYXNlIEFwcGxldENvZGVCYXNlOiAgICAgICAgeyBhcHBsZXQuc2V0Q29kZUJh
c2Uoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQXBwbGV0SGVpZ2h0OiAgICAgICAgICB7
IGFwcGxldC5zZXRIZWlnaHQoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQXBwbGV0SHNw
YWNlOiAgICAgICAgICB7IGFwcGxldC5zZXRIc3BhY2Uoc3RyKTsgcmV0dXJuOyB9CisgICAgICAg
IGNhc2UgQXBwbGV0TmFtZTogICAgICAgICAgICB7IGFwcGxldC5zZXROYW1lKHN0cik7IHJldHVy
bjsgfQorICAgICAgICBjYXNlIEFwcGxldE9iamVjdDogICAgICAgICAgeyBhcHBsZXQuc2V0T2Jq
ZWN0KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEFwcGxldFZzcGFjZTogICAgICAgICAg
eyBhcHBsZXQuc2V0VnNwYWNlKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEFwcGxldFdp
ZHRoOiAgICAgICAgICAgeyBhcHBsZXQuc2V0V2lkdGgoc3RyKTsgcmV0dXJuOyB9CiAgICAgfQot
ICAgIGJyZWFrOwotICAgIGNhc2UgSURfU0NSSVBUOiB7Ci0gICAgICBIVE1MU2NyaXB0RWxlbWVu
dEltcGwgJnNjcmlwdCA9IHN0YXRpY19jYXN0PEhUTUxTY3JpcHRFbGVtZW50SW1wbCAmPihlbGVt
ZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgU2NyaXB0VGV4dDogICAg
ICAgICAgICB7IHNjcmlwdC5zZXRUZXh0KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBTY3Jp
cHRIdG1sRm9yOiAgICAgICAgIHsgc2NyaXB0LnNldEh0bWxGb3Ioc3RyKTsgcmV0dXJuOyB9Ci0g
ICAgICBjYXNlIFNjcmlwdEV2ZW50OiAgICAgICAgICAgeyBzY3JpcHQuc2V0RXZlbnQoc3RyKTsg
cmV0dXJuOyB9Ci0gICAgICBjYXNlIFNjcmlwdENoYXJzZXQ6ICAgICAgICAgeyBzY3JpcHQuc2V0
Q2hhcnNldChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgU2NyaXB0RGVmZXI6ICAgICAgICAg
ICB7IHNjcmlwdC5zZXREZWZlcih2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KLSAg
ICAgIGNhc2UgU2NyaXB0U3JjOiAgICAgICAgICAgICB7IHNjcmlwdC5zZXRTcmMoc3RyKTsgcmV0
dXJuOyB9Ci0gICAgICBjYXNlIFNjcmlwdFR5cGU6ICAgICAgICAgICAgeyBzY3JpcHQuc2V0VHlw
ZShzdHIpOyByZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6bWFwU2V0
dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0
IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTE1hcEVsZW1lbnRJbXBsJiBtYXAgPSAq
c3RhdGljX2Nhc3Q8SFRNTE1hcEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBpZiAodG9rZW4g
PT0gTWFwTmFtZSkKKyAgICAgICAgLy8gcmVhZC1vbmx5OiBhcmVhcworICAgICAgICBtYXAuc2V0
TmFtZShzdHIpOworfQorCit2b2lkIEhUTUxFbGVtZW50OjphcmVhU2V0dGVyKEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5n
JiBzdHIpCit7CisgICAgSFRNTEFyZWFFbGVtZW50SW1wbCYgYXJlYSA9ICpzdGF0aWNfY2FzdDxI
VE1MQXJlYUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAg
ICAgIGNhc2UgQXJlYUFjY2Vzc0tleTogICAgICAgeyBhcmVhLnNldEFjY2Vzc0tleShzdHIpOyBy
ZXR1cm47IH0KKyAgICAgICAgY2FzZSBBcmVhQWx0OiAgICAgICAgICAgICB7IGFyZWEuc2V0QWx0
KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEFyZWFDb29yZHM6ICAgICAgICAgIHsgYXJl
YS5zZXRDb29yZHMoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQXJlYUhyZWY6ICAgICAg
ICAgICAgeyBhcmVhLnNldEhyZWYoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQXJlYU5v
SHJlZjogICAgICAgICAgeyBhcmVhLnNldE5vSHJlZih2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyBy
ZXR1cm47IH0KKyAgICAgICAgY2FzZSBBcmVhU2hhcGU6ICAgICAgICAgICB7IGFyZWEuc2V0U2hh
cGUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQXJlYVRhYkluZGV4OiAgICAgICAgeyBh
cmVhLnNldFRhYkluZGV4KHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAg
Y2FzZSBBcmVhVGFyZ2V0OiAgICAgICAgICB7IGFyZWEuc2V0VGFyZ2V0KHN0cik7IHJldHVybjsg
fQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX1RBQkxFOiB7Ci0gICAgICBIVE1MVGFi
bGVFbGVtZW50SW1wbCAmdGFibGUgPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVFbGVtZW50SW1wbCAm
PihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgVGFibGVDYXB0
aW9uOiAgICAgICAgIHsgdGFibGUuc2V0Q2FwdGlvbih0b0hUTUxUYWJsZUNhcHRpb25FbGVtZW50
KHZhbHVlKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJsZVRIZWFkOiAgICAgICAgICAgeyB0
YWJsZS5zZXRUSGVhZCh0b0hUTUxUYWJsZVNlY3Rpb25FbGVtZW50KHZhbHVlKSk7IHJldHVybjsg
fQotICAgICAgY2FzZSBUYWJsZVRGb290OiAgICAgICAgICAgeyB0YWJsZS5zZXRURm9vdCh0b0hU
TUxUYWJsZVNlY3Rpb25FbGVtZW50KHZhbHVlKSk7IHJldHVybjsgfQotICAgICAgLy8gcmVhZC1v
bmx5OiByb3dzCi0gICAgICAvLyByZWFkLW9ubHk6IHRib2RpZXMKLSAgICAgIGNhc2UgVGFibGVB
bGlnbjogICAgICAgICAgIHsgdGFibGUuc2V0QWxpZ24oc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBj
YXNlIFRhYmxlQmdDb2xvcjogICAgICAgICB7IHRhYmxlLnNldEJnQ29sb3Ioc3RyKTsgcmV0dXJu
OyB9Ci0gICAgICBjYXNlIFRhYmxlQm9yZGVyOiAgICAgICAgICB7IHRhYmxlLnNldEJvcmRlcihz
dHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVDZWxsUGFkZGluZzogICAgIHsgdGFibGUu
c2V0Q2VsbFBhZGRpbmcoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlQ2VsbFNwYWNp
bmc6ICAgICB7IHRhYmxlLnNldENlbGxTcGFjaW5nKHN0cik7IHJldHVybjsgfQotICAgICAgY2Fz
ZSBUYWJsZUZyYW1lOiAgICAgICAgICAgeyB0YWJsZS5zZXRGcmFtZShzdHIpOyByZXR1cm47IH0K
LSAgICAgIGNhc2UgVGFibGVSdWxlczogICAgICAgICAgIHsgdGFibGUuc2V0UnVsZXMoc3RyKTsg
cmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlU3VtbWFyeTogICAgICAgICB7IHRhYmxlLnNldFN1
bW1hcnkoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlV2lkdGg6ICAgICAgICAgICB7
IHRhYmxlLnNldFdpZHRoKHN0cik7IHJldHVybjsgfQotICAgICAgfQorfQorCit2b2lkIEhUTUxF
bGVtZW50OjpzY3JpcHRTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZh
bHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MU2NyaXB0
RWxlbWVudEltcGwmIHNjcmlwdCA9ICpzdGF0aWNfY2FzdDxIVE1MU2NyaXB0RWxlbWVudEltcGwq
PihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBTY3JpcHRUZXh0
OiAgICAgICAgICAgIHsgc2NyaXB0LnNldFRleHQoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNh
c2UgU2NyaXB0SHRtbEZvcjogICAgICAgICB7IHNjcmlwdC5zZXRIdG1sRm9yKHN0cik7IHJldHVy
bjsgfQorICAgICAgICBjYXNlIFNjcmlwdEV2ZW50OiAgICAgICAgICAgeyBzY3JpcHQuc2V0RXZl
bnQoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgU2NyaXB0Q2hhcnNldDogICAgICAgICB7
IHNjcmlwdC5zZXRDaGFyc2V0KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFNjcmlwdERl
ZmVyOiAgICAgICAgICAgeyBzY3JpcHQuc2V0RGVmZXIodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsg
cmV0dXJuOyB9CisgICAgICAgIGNhc2UgU2NyaXB0U3JjOiAgICAgICAgICAgICB7IHNjcmlwdC5z
ZXRTcmMoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgU2NyaXB0VHlwZTogICAgICAgICAg
ICB7IHNjcmlwdC5zZXRUeXBlKHN0cik7IHJldHVybjsgfQogICAgIH0KLSAgICBicmVhazsKLSAg
ICBjYXNlIElEX0NBUFRJT046IHsKLSAgICAgIEhUTUxUYWJsZUNhcHRpb25FbGVtZW50SW1wbCAm
dGFibGVDYXB0aW9uID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnRJbXBsICY+
KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgY2FzZSBUYWJsZUFsaWdu
OiAgICAgICAgICAgeyB0YWJsZUNhcHRpb24uc2V0QWxpZ24oc3RyKTsgcmV0dXJuOyB9Ci0gICAg
ICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OnRhYmxlU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIp
Cit7CisgICAgSFRNTFRhYmxlRWxlbWVudEltcGwmIHRhYmxlID0gKnN0YXRpY19jYXN0PEhUTUxU
YWJsZUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAg
IGNhc2UgVGFibGVDYXB0aW9uOiAgICAgICAgIHsgdGFibGUuc2V0Q2FwdGlvbih0b0hUTUxUYWJs
ZUNhcHRpb25FbGVtZW50KHZhbHVlKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxlVEhl
YWQ6ICAgICAgICAgICB7IHRhYmxlLnNldFRIZWFkKHRvSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQo
dmFsdWUpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGFibGVURm9vdDogICAgICAgICAgIHsg
dGFibGUuc2V0VEZvb3QodG9IVE1MVGFibGVTZWN0aW9uRWxlbWVudCh2YWx1ZSkpOyByZXR1cm47
IH0KKyAgICAgICAgLy8gcmVhZC1vbmx5OiByb3dzCisgICAgICAgIC8vIHJlYWQtb25seTogdGJv
ZGllcworICAgICAgICBjYXNlIFRhYmxlQWxpZ246ICAgICAgICAgICB7IHRhYmxlLnNldEFsaWdu
KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxlQmdDb2xvcjogICAgICAgICB7IHRh
YmxlLnNldEJnQ29sb3Ioc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGFibGVCb3JkZXI6
ICAgICAgICAgIHsgdGFibGUuc2V0Qm9yZGVyKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNl
IFRhYmxlQ2VsbFBhZGRpbmc6ICAgICB7IHRhYmxlLnNldENlbGxQYWRkaW5nKHN0cik7IHJldHVy
bjsgfQorICAgICAgICBjYXNlIFRhYmxlQ2VsbFNwYWNpbmc6ICAgICB7IHRhYmxlLnNldENlbGxT
cGFjaW5nKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxlRnJhbWU6ICAgICAgICAg
ICB7IHRhYmxlLnNldEZyYW1lKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxlUnVs
ZXM6ICAgICAgICAgICB7IHRhYmxlLnNldFJ1bGVzKHN0cik7IHJldHVybjsgfQorICAgICAgICBj
YXNlIFRhYmxlU3VtbWFyeTogICAgICAgICB7IHRhYmxlLnNldFN1bW1hcnkoc3RyKTsgcmV0dXJu
OyB9CisgICAgICAgIGNhc2UgVGFibGVXaWR0aDogICAgICAgICAgIHsgdGFibGUuc2V0V2lkdGgo
c3RyKTsgcmV0dXJuOyB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfQ09MOiB7Ci0g
ICAgICBIVE1MVGFibGVDb2xFbGVtZW50SW1wbCAmdGFibGVDb2wgPSBzdGF0aWNfY2FzdDxIVE1M
VGFibGVDb2xFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsK
LSAgICAgIGNhc2UgVGFibGVDb2xBbGlnbjogICAgICAgICAgIHsgdGFibGVDb2wuc2V0QWxpZ24o
c3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlQ29sQ2g6ICAgICAgICAgICAgICB7IHRh
YmxlQ29sLnNldENoKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJsZUNvbENoT2ZmOiAg
ICAgICAgICAgeyB0YWJsZUNvbC5zZXRDaE9mZihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2Ug
VGFibGVDb2xTcGFuOiAgICAgICAgICAgIHsgdGFibGVDb2wuc2V0U3Bhbih2YWx1ZS50b0ludDMy
KGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlQ29sVkFsaWduOiAgICAgICAgICB7
IHRhYmxlQ29sLnNldFZBbGlnbihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVDb2xX
aWR0aDogICAgICAgICAgIHsgdGFibGVDb2wuc2V0V2lkdGgoc3RyKTsgcmV0dXJuOyB9Ci0gICAg
ICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OnRhYmxlQ2FwdGlvblNldHRlcihFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmlu
ZyYgc3RyKQoreworICAgIEhUTUxUYWJsZUNhcHRpb25FbGVtZW50SW1wbCYgdGFibGVDYXB0aW9u
ID0gKnN0YXRpY19jYXN0PEhUTUxUYWJsZUNhcHRpb25FbGVtZW50SW1wbCo+KGltcGwoKSk7Cisg
ICAgaWYgKHRva2VuID09IFRhYmxlQ2FwdGlvbkFsaWduKQorICAgICAgICB0YWJsZUNhcHRpb24u
c2V0QWxpZ24oc3RyKTsKK30KKwordm9pZCBIVE1MRWxlbWVudDo6dGFibGVDb2xTZXR0ZXIoRXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpE
T01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MVGFibGVDb2xFbGVtZW50SW1wbCYgdGFibGVDb2wg
PSAqc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ29sRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3
aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBUYWJsZUNvbEFsaWduOiAgICAgICAgICAgeyB0
YWJsZUNvbC5zZXRBbGlnbihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZUNvbENo
OiAgICAgICAgICAgICAgeyB0YWJsZUNvbC5zZXRDaChzdHIpOyByZXR1cm47IH0KKyAgICAgICAg
Y2FzZSBUYWJsZUNvbENoT2ZmOiAgICAgICAgICAgeyB0YWJsZUNvbC5zZXRDaE9mZihzdHIpOyBy
ZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZUNvbFNwYW46ICAgICAgICAgICAgeyB0YWJsZUNv
bC5zZXRTcGFuKHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBU
YWJsZUNvbFZBbGlnbjogICAgICAgICAgeyB0YWJsZUNvbC5zZXRWQWxpZ24oc3RyKTsgcmV0dXJu
OyB9CisgICAgICAgIGNhc2UgVGFibGVDb2xXaWR0aDogICAgICAgICAgIHsgdGFibGVDb2wuc2V0
V2lkdGgoc3RyKTsgcmV0dXJuOyB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfVEhF
QUQ6Ci0gICAgY2FzZSBJRF9UQk9EWToKLSAgICBjYXNlIElEX1RGT09UOiB7Ci0gICAgICBIVE1M
VGFibGVTZWN0aW9uRWxlbWVudEltcGwgJnRhYmxlU2VjdGlvbiA9IHN0YXRpY19jYXN0PEhUTUxU
YWJsZVNlY3Rpb25FbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4p
IHsKLSAgICAgIGNhc2UgVGFibGVTZWN0aW9uQWxpZ246ICAgICAgICAgICB7IHRhYmxlU2VjdGlv
bi5zZXRBbGlnbihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVTZWN0aW9uQ2g6ICAg
ICAgICAgICAgICB7IHRhYmxlU2VjdGlvbi5zZXRDaChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNh
c2UgVGFibGVTZWN0aW9uQ2hPZmY6ICAgICAgICAgICB7IHRhYmxlU2VjdGlvbi5zZXRDaE9mZihz
dHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVTZWN0aW9uVkFsaWduOiAgICAgICAgICB7
IHRhYmxlU2VjdGlvbi5zZXRWQWxpZ24oc3RyKTsgcmV0dXJuOyB9Ci0gICAgICAvLyByZWFkLW9u
bHk6IHJvd3MKLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6dGFibGVTZWN0aW9uU2V0
dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0
IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBs
JiB0YWJsZVNlY3Rpb24gPSAqc3RhdGljX2Nhc3Q8SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBs
Kj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgVGFibGVTZWN0
aW9uQWxpZ246ICAgICAgICAgICB7IHRhYmxlU2VjdGlvbi5zZXRBbGlnbihzdHIpOyByZXR1cm47
IH0KKyAgICAgICAgY2FzZSBUYWJsZVNlY3Rpb25DaDogICAgICAgICAgICAgIHsgdGFibGVTZWN0
aW9uLnNldENoKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxlU2VjdGlvbkNoT2Zm
OiAgICAgICAgICAgeyB0YWJsZVNlY3Rpb24uc2V0Q2hPZmYoc3RyKTsgcmV0dXJuOyB9CisgICAg
ICAgIGNhc2UgVGFibGVTZWN0aW9uVkFsaWduOiAgICAgICAgICB7IHRhYmxlU2VjdGlvbi5zZXRW
QWxpZ24oc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIC8vIHJlYWQtb25seTogcm93cwogICAgIH0K
LSAgICBicmVhazsKLSAgICBjYXNlIElEX1RSOiB7Ci0gICAgICBIVE1MVGFibGVSb3dFbGVtZW50
SW1wbCAmdGFibGVSb3cgPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVSb3dFbGVtZW50SW1wbCAmPihl
bGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIC8vIHJlYWQtb25seTogcm93
SW5kZXgKLSAgICAgIC8vIHJlYWQtb25seTogc2VjdGlvblJvd0luZGV4Ci0gICAgICAvLyByZWFk
LW9ubHk6IGNlbGxzCi0gICAgICBjYXNlIFRhYmxlUm93QWxpZ246ICAgICAgICAgICB7IHRhYmxl
Um93LnNldEFsaWduKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJsZVJvd0JnQ29sb3I6
ICAgICAgICAgeyB0YWJsZVJvdy5zZXRCZ0NvbG9yKHN0cik7IHJldHVybjsgfQotICAgICAgY2Fz
ZSBUYWJsZVJvd0NoOiAgICAgICAgICAgICAgeyB0YWJsZVJvdy5zZXRDaChzdHIpOyByZXR1cm47
IH0KLSAgICAgIGNhc2UgVGFibGVSb3dDaE9mZjogICAgICAgICAgIHsgdGFibGVSb3cuc2V0Q2hP
ZmYoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlUm93VkFsaWduOiAgICAgICAgICB7
IHRhYmxlUm93LnNldFZBbGlnbihzdHIpOyByZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBI
VE1MRWxlbWVudDo6dGFibGVSb3dTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNv
bnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1M
VGFibGVSb3dFbGVtZW50SW1wbCYgdGFibGVSb3cgPSAqc3RhdGljX2Nhc3Q8SFRNTFRhYmxlUm93
RWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgLy8g
cmVhZC1vbmx5OiByb3dJbmRleAorICAgICAgICAvLyByZWFkLW9ubHk6IHNlY3Rpb25Sb3dJbmRl
eAorICAgICAgICAvLyByZWFkLW9ubHk6IGNlbGxzCisgICAgICAgIGNhc2UgVGFibGVSb3dBbGln
bjogICAgICAgICAgIHsgdGFibGVSb3cuc2V0QWxpZ24oc3RyKTsgcmV0dXJuOyB9CisgICAgICAg
IGNhc2UgVGFibGVSb3dCZ0NvbG9yOiAgICAgICAgIHsgdGFibGVSb3cuc2V0QmdDb2xvcihzdHIp
OyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZVJvd0NoOiAgICAgICAgICAgICAgeyB0YWJs
ZVJvdy5zZXRDaChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZVJvd0NoT2ZmOiAg
ICAgICAgICAgeyB0YWJsZVJvdy5zZXRDaE9mZihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2Fz
ZSBUYWJsZVJvd1ZBbGlnbjogICAgICAgICAgeyB0YWJsZVJvdy5zZXRWQWxpZ24oc3RyKTsgcmV0
dXJuOyB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfVEg6Ci0gICAgY2FzZSBJRF9U
RDogewotICAgICAgSFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsICZ0YWJsZUNlbGwgPSBzdGF0aWNf
Y2FzdDxIVE1MVGFibGVDZWxsRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2gg
KHRva2VuKSB7Ci0gICAgICAvLyByZWFkLW9ubHk6IGNlbGxJbmRleAotICAgICAgY2FzZSBUYWJs
ZUNlbGxBYmJyOiAgICAgICAgICAgIHsgdGFibGVDZWxsLnNldEFiYnIoc3RyKTsgcmV0dXJuOyB9
Ci0gICAgICBjYXNlIFRhYmxlQ2VsbEFsaWduOiAgICAgICAgICAgeyB0YWJsZUNlbGwuc2V0QWxp
Z24oc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlQ2VsbEF4aXM6ICAgICAgICAgICAg
eyB0YWJsZUNlbGwuc2V0QXhpcyhzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVDZWxs
QmdDb2xvcjogICAgICAgICB7IHRhYmxlQ2VsbC5zZXRCZ0NvbG9yKHN0cik7IHJldHVybjsgfQot
ICAgICAgY2FzZSBUYWJsZUNlbGxDaDogICAgICAgICAgICAgIHsgdGFibGVDZWxsLnNldENoKHN0
cik7IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJsZUNlbGxDaE9mZjogICAgICAgICAgIHsgdGFi
bGVDZWxsLnNldENoT2ZmKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJsZUNlbGxDb2xT
cGFuOiAgICAgICAgIHsgdGFibGVDZWxsLnNldENvbFNwYW4odmFsdWUudG9JbnQzMihleGVjKSk7
IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJsZUNlbGxIZWFkZXJzOiAgICAgICAgIHsgdGFibGVD
ZWxsLnNldEhlYWRlcnMoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlQ2VsbEhlaWdo
dDogICAgICAgICAgeyB0YWJsZUNlbGwuc2V0SGVpZ2h0KHN0cik7IHJldHVybjsgfQotICAgICAg
Y2FzZSBUYWJsZUNlbGxOb1dyYXA6ICAgICAgICAgIHsgdGFibGVDZWxsLnNldE5vV3JhcCh2YWx1
ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVDZWxsUm93U3Bh
bjogICAgICAgICB7IHRhYmxlQ2VsbC5zZXRSb3dTcGFuKHZhbHVlLnRvSW50MzIoZXhlYykpOyBy
ZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVDZWxsU2NvcGU6ICAgICAgICAgICB7IHRhYmxlQ2Vs
bC5zZXRTY29wZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVDZWxsVkFsaWduOiAg
ICAgICAgICB7IHRhYmxlQ2VsbC5zZXRWQWxpZ24oc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNl
IFRhYmxlQ2VsbFdpZHRoOiAgICAgICAgICAgeyB0YWJsZUNlbGwuc2V0V2lkdGgoc3RyKTsgcmV0
dXJuOyB9Ci0gICAgICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OnRhYmxlQ2VsbFNldHRlcihF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006
OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbCYgdGFibGVD
ZWxsID0gKnN0YXRpY19jYXN0PEhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbCo+KGltcGwoKSk7Cisg
ICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICAvLyByZWFkLW9ubHk6IGNlbGxJbmRleAorICAg
ICAgICBjYXNlIFRhYmxlQ2VsbEFiYnI6ICAgICAgICAgICAgeyB0YWJsZUNlbGwuc2V0QWJicihz
dHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZUNlbGxBbGlnbjogICAgICAgICAgIHsg
dGFibGVDZWxsLnNldEFsaWduKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxlQ2Vs
bEF4aXM6ICAgICAgICAgICAgeyB0YWJsZUNlbGwuc2V0QXhpcyhzdHIpOyByZXR1cm47IH0KKyAg
ICAgICAgY2FzZSBUYWJsZUNlbGxCZ0NvbG9yOiAgICAgICAgIHsgdGFibGVDZWxsLnNldEJnQ29s
b3Ioc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGFibGVDZWxsQ2g6ICAgICAgICAgICAg
ICB7IHRhYmxlQ2VsbC5zZXRDaChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZUNl
bGxDaE9mZjogICAgICAgICAgIHsgdGFibGVDZWxsLnNldENoT2ZmKHN0cik7IHJldHVybjsgfQor
ICAgICAgICBjYXNlIFRhYmxlQ2VsbENvbFNwYW46ICAgICAgICAgeyB0YWJsZUNlbGwuc2V0Q29s
U3Bhbih2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGFibGVD
ZWxsSGVhZGVyczogICAgICAgICB7IHRhYmxlQ2VsbC5zZXRIZWFkZXJzKHN0cik7IHJldHVybjsg
fQorICAgICAgICBjYXNlIFRhYmxlQ2VsbEhlaWdodDogICAgICAgICAgeyB0YWJsZUNlbGwuc2V0
SGVpZ2h0KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxlQ2VsbE5vV3JhcDogICAg
ICAgICAgeyB0YWJsZUNlbGwuc2V0Tm9XcmFwKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVy
bjsgfQorICAgICAgICBjYXNlIFRhYmxlQ2VsbFJvd1NwYW46ICAgICAgICAgeyB0YWJsZUNlbGwu
c2V0Um93U3Bhbih2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2Ug
VGFibGVDZWxsU2NvcGU6ICAgICAgICAgICB7IHRhYmxlQ2VsbC5zZXRTY29wZShzdHIpOyByZXR1
cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZUNlbGxWQWxpZ246ICAgICAgICAgIHsgdGFibGVDZWxs
LnNldFZBbGlnbihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZUNlbGxXaWR0aDog
ICAgICAgICAgIHsgdGFibGVDZWxsLnNldFdpZHRoKHN0cik7IHJldHVybjsgfQogICAgIH0KLSAg
ICBicmVhazsKLSAgICBjYXNlIElEX0ZSQU1FU0VUOiB7Ci0gICAgICBIVE1MRnJhbWVTZXRFbGVt
ZW50SW1wbCAmZnJhbWVTZXQgPSBzdGF0aWNfY2FzdDxIVE1MRnJhbWVTZXRFbGVtZW50SW1wbCAm
PihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgRnJhbWVTZXRD
b2xzOiAgICAgICAgICAgIHsgZnJhbWVTZXQuc2V0Q29scyhzdHIpOyByZXR1cm47IH0KLSAgICAg
IGNhc2UgRnJhbWVTZXRSb3dzOiAgICAgICAgICAgIHsgZnJhbWVTZXQuc2V0Um93cyhzdHIpOyBy
ZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6ZnJhbWVTZXRTZXR0ZXIo
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9N
OjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MRnJhbWVTZXRFbGVtZW50SW1wbCYgZnJhbWVT
ZXQgPSAqc3RhdGljX2Nhc3Q8SFRNTEZyYW1lU2V0RWxlbWVudEltcGwqPihpbXBsKCkpOworICAg
IHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBGcmFtZVNldENvbHM6ICAgICAgICAgICAg
eyBmcmFtZVNldC5zZXRDb2xzKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEZyYW1lU2V0
Um93czogICAgICAgICAgICB7IGZyYW1lU2V0LnNldFJvd3Moc3RyKTsgcmV0dXJuOyB9CiAgICAg
fQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfRlJBTUU6IHsKLSAgICAgIEhUTUxGcmFtZUVsZW1l
bnRJbXBsICZmcmFtZUVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRnJhbWVFbGVtZW50SW1wbCAm
PihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgICAvLyByZWFkLW9ubHk6
IEZyYW1lQ29udGVudERvY3VtZW50OgotICAgICAgY2FzZSBGcmFtZUZyYW1lQm9yZGVyOiAgICAg
eyBmcmFtZUVsZW1lbnQuc2V0RnJhbWVCb3JkZXIoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNl
IEZyYW1lTG9uZ0Rlc2M6ICAgICAgICB7IGZyYW1lRWxlbWVudC5zZXRMb25nRGVzYyhzdHIpOyBy
ZXR1cm47IH0KLSAgICAgIGNhc2UgRnJhbWVNYXJnaW5IZWlnaHQ6ICAgIHsgZnJhbWVFbGVtZW50
LnNldE1hcmdpbkhlaWdodChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgRnJhbWVNYXJnaW5X
aWR0aDogICAgIHsgZnJhbWVFbGVtZW50LnNldE1hcmdpbldpZHRoKHN0cik7IHJldHVybjsgfQot
ICAgICAgY2FzZSBGcmFtZU5hbWU6ICAgICAgICAgICAgeyBmcmFtZUVsZW1lbnQuc2V0TmFtZShz
dHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgRnJhbWVOb1Jlc2l6ZTogICAgICAgIHsgZnJhbWVF
bGVtZW50LnNldE5vUmVzaXplKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQotICAg
ICAgY2FzZSBGcmFtZVNjcm9sbGluZzogICAgICAgeyBmcmFtZUVsZW1lbnQuc2V0U2Nyb2xsaW5n
KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBGcmFtZVNyYzogICAgICAgICAgICAgeyBmcmFt
ZUVsZW1lbnQuc2V0U3JjKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBGcmFtZUxvY2F0aW9u
OiAgICAgICAgeyBmcmFtZUVsZW1lbnQuc2V0TG9jYXRpb24oc3RyKTsgcmV0dXJuOyB9Ci0gICAg
ICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OmZyYW1lU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIp
Cit7CisgICAgSFRNTEZyYW1lRWxlbWVudEltcGwmIGZyYW1lRWxlbWVudCA9ICpzdGF0aWNfY2Fz
dDxIVE1MRnJhbWVFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgewor
ICAgICAgICAvLyByZWFkLW9ubHk6IEZyYW1lQ29udGVudERvY3VtZW50OgorICAgICAgICBjYXNl
IEZyYW1lRnJhbWVCb3JkZXI6ICAgICB7IGZyYW1lRWxlbWVudC5zZXRGcmFtZUJvcmRlcihzdHIp
OyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBGcmFtZUxvbmdEZXNjOiAgICAgICAgeyBmcmFtZUVs
ZW1lbnQuc2V0TG9uZ0Rlc2Moc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgRnJhbWVNYXJn
aW5IZWlnaHQ6ICAgIHsgZnJhbWVFbGVtZW50LnNldE1hcmdpbkhlaWdodChzdHIpOyByZXR1cm47
IH0KKyAgICAgICAgY2FzZSBGcmFtZU1hcmdpbldpZHRoOiAgICAgeyBmcmFtZUVsZW1lbnQuc2V0
TWFyZ2luV2lkdGgoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgRnJhbWVOYW1lOiAgICAg
ICAgICAgIHsgZnJhbWVFbGVtZW50LnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNh
c2UgRnJhbWVOb1Jlc2l6ZTogICAgICAgIHsgZnJhbWVFbGVtZW50LnNldE5vUmVzaXplKHZhbHVl
LnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIEZyYW1lU2Nyb2xsaW5n
OiAgICAgICB7IGZyYW1lRWxlbWVudC5zZXRTY3JvbGxpbmcoc3RyKTsgcmV0dXJuOyB9CisgICAg
ICAgIGNhc2UgRnJhbWVTcmM6ICAgICAgICAgICAgIHsgZnJhbWVFbGVtZW50LnNldFNyYyhzdHIp
OyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBGcmFtZUxvY2F0aW9uOiAgICAgICAgeyBmcmFtZUVs
ZW1lbnQuc2V0TG9jYXRpb24oc3RyKTsgcmV0dXJuOyB9CiAgICAgfQotICAgIGJyZWFrOwotICAg
IGNhc2UgSURfSUZSQU1FOiB7Ci0gICAgICBIVE1MSUZyYW1lRWxlbWVudEltcGwgJmlGcmFtZSA9
IHN0YXRpY19jYXN0PEhUTUxJRnJhbWVFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3
aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgSUZyYW1lQWxpZ246ICAgICAgICAgICB7IGlGcmFt
ZS5zZXRBbGlnbihzdHIpOyByZXR1cm47IH0KLSAgICAgIC8vIHJlYWQtb25seTogSUZyYW1lQ29u
dGVudERvY3VtZW50Ci0gICAgICBjYXNlIElGcmFtZUZyYW1lQm9yZGVyOiAgICAgeyBpRnJhbWUu
c2V0RnJhbWVCb3JkZXIoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElGcmFtZUhlaWdodDog
ICAgICAgICAgeyBpRnJhbWUuc2V0SGVpZ2h0KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBJ
RnJhbWVMb25nRGVzYzogICAgICAgIHsgaUZyYW1lLnNldExvbmdEZXNjKHN0cik7IHJldHVybjsg
fQotICAgICAgY2FzZSBJRnJhbWVNYXJnaW5IZWlnaHQ6ICAgIHsgaUZyYW1lLnNldE1hcmdpbkhl
aWdodChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSUZyYW1lTWFyZ2luV2lkdGg6ICAgICB7
IGlGcmFtZS5zZXRNYXJnaW5XaWR0aChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSUZyYW1l
TmFtZTogICAgICAgICAgICB7IGlGcmFtZS5zZXROYW1lKHN0cik7IHJldHVybjsgfQotICAgICAg
Y2FzZSBJRnJhbWVTY3JvbGxpbmc6ICAgICAgIHsgaUZyYW1lLnNldFNjcm9sbGluZyhzdHIpOyBy
ZXR1cm47IH0KLSAgICAgIGNhc2UgSUZyYW1lU3JjOiAgICAgICAgICAgICB7IGlGcmFtZS5zZXRT
cmMoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElGcmFtZVdpZHRoOiAgICAgICAgICAgeyBp
RnJhbWUuc2V0V2lkdGgoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICB9Ci0gICAgICBicmVhazsKK30K
Kwordm9pZCBIVE1MRWxlbWVudDo6aUZyYW1lU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRv
a2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7Cisg
ICAgSFRNTElGcmFtZUVsZW1lbnRJbXBsJiBpRnJhbWUgPSAqc3RhdGljX2Nhc3Q8SFRNTElGcmFt
ZUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNh
c2UgSUZyYW1lQWxpZ246ICAgICAgICAgICB7IGlGcmFtZS5zZXRBbGlnbihzdHIpOyByZXR1cm47
IH0KKyAgICAgICAgLy8gcmVhZC1vbmx5OiBJRnJhbWVDb250ZW50RG9jdW1lbnQKKyAgICAgICAg
Y2FzZSBJRnJhbWVGcmFtZUJvcmRlcjogICAgIHsgaUZyYW1lLnNldEZyYW1lQm9yZGVyKHN0cik7
IHJldHVybjsgfQorICAgICAgICBjYXNlIElGcmFtZUhlaWdodDogICAgICAgICAgeyBpRnJhbWUu
c2V0SGVpZ2h0KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIElGcmFtZUxvbmdEZXNjOiAg
ICAgICAgeyBpRnJhbWUuc2V0TG9uZ0Rlc2Moc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2Ug
SUZyYW1lTWFyZ2luSGVpZ2h0OiAgICB7IGlGcmFtZS5zZXRNYXJnaW5IZWlnaHQoc3RyKTsgcmV0
dXJuOyB9CisgICAgICAgIGNhc2UgSUZyYW1lTWFyZ2luV2lkdGg6ICAgICB7IGlGcmFtZS5zZXRN
YXJnaW5XaWR0aChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJRnJhbWVOYW1lOiAgICAg
ICAgICAgIHsgaUZyYW1lLnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgSUZy
YW1lU2Nyb2xsaW5nOiAgICAgICB7IGlGcmFtZS5zZXRTY3JvbGxpbmcoc3RyKTsgcmV0dXJuOyB9
CisgICAgICAgIGNhc2UgSUZyYW1lU3JjOiAgICAgICAgICAgICB7IGlGcmFtZS5zZXRTcmMoc3Ry
KTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgSUZyYW1lV2lkdGg6ICAgICAgICAgICB7IGlGcmFt
ZS5zZXRXaWR0aChzdHIpOyByZXR1cm47IH0KICAgICB9Ci0gIH0KK30KIAotICAvLyBnZW5lcmlj
IHByb3BlcnRpZXMKLSAgc3dpdGNoICh0b2tlbikgewotICBjYXNlIEVsZW1lbnRJZDoKLSAgICBl
bGVtZW50LnNldElkKHN0cik7Ci0gICAgcmV0dXJuOwotICBjYXNlIEVsZW1lbnRUaXRsZToKLSAg
ICBlbGVtZW50LnNldFRpdGxlKHN0cik7Ci0gICAgcmV0dXJuOwotICBjYXNlIEVsZW1lbnRMYW5n
OgotICAgIGVsZW1lbnQuc2V0TGFuZyhzdHIpOwotICAgIHJldHVybjsKLSAgY2FzZSBFbGVtZW50
RGlyOgotICAgIGVsZW1lbnQuc2V0RGlyKHN0cik7Ci0gICAgcmV0dXJuOwotICBjYXNlIEVsZW1l
bnRDbGFzc05hbWU6Ci0gICAgZWxlbWVudC5zZXRDbGFzc05hbWUoc3RyKTsKLSAgICByZXR1cm47
Ci0gIGNhc2UgRWxlbWVudElubmVySFRNTDoKLSAgICBlbGVtZW50LnNldElubmVySFRNTChzdHIs
IGV4Y2VwdGlvbik7Ci0gICAgcmV0dXJuOwotICBjYXNlIEVsZW1lbnRJbm5lclRleHQ6Ci0gICAg
ZWxlbWVudC5zZXRJbm5lclRleHQoc3RyLCBleGNlcHRpb24pOwotICAgIHJldHVybjsKLSAgY2Fz
ZSBFbGVtZW50T3V0ZXJIVE1MOgotICAgIGVsZW1lbnQuc2V0T3V0ZXJIVE1MKHN0ciwgZXhjZXB0
aW9uKTsKLSAgICByZXR1cm47Ci0gIGNhc2UgRWxlbWVudE91dGVyVGV4dDoKLSAgICBlbGVtZW50
LnNldE91dGVyVGV4dChzdHIsIGV4Y2VwdGlvbik7Ci0gICAgcmV0dXJuOwotICBjYXNlIEVsZW1l
bnRDb250ZW50RWRpdGFibGU6Ci0gICAgZWxlbWVudC5zZXRDb250ZW50RWRpdGFibGUoc3RyKTsK
LSAgICByZXR1cm47Ci0gIGRlZmF1bHQ6Ci0gICAga2RXYXJuaW5nKCkgPDwgIktKUzo6SFRNTEVs
ZW1lbnQ6OnB1dFZhbHVlIHVuaGFuZGxlZCB0b2tlbiAiIDw8IHRva2VuIDw8ICIgdGhpc1RhZz0i
IDw8IGVsZW1lbnQudGFnTmFtZSgpLnN0cmluZygpIDw8ICIgc3RyPSIgPDwgc3RyLnN0cmluZygp
IDw8IGVuZGw7Ci0gIH0KK3ZvaWQgSFRNTEVsZW1lbnQ6Om1hcnF1ZWVTZXR0ZXIoRXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJp
bmcmIHN0cikKK3sKKyAgICAvLyBGSVhNRTogRmluZCBvdXQgd2hhdCBXaW5JRSBzdXBwb3J0cyBh
bmQgaW1wbGVtZW50IGl0LgorfQorCit2b2lkIEhUTUxFbGVtZW50OjpwdXRWYWx1ZShFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBpbnQpCit7CisgICAgRE9N
RXhjZXB0aW9uVHJhbnNsYXRvciBleGNlcHRpb24oZXhlYyk7CisgICAgRE9NOjpET01TdHJpbmcg
c3RyID0gdmFsdWUuaXNBKE51bGxUeXBlKSA/IERPTTo6RE9NU3RyaW5nKCkgOiB2YWx1ZS50b1N0
cmluZyhleGVjKS5zdHJpbmcoKTsKKyAKKyAgICAvLyBDaGVjayBvdXIgc2V0IG9mIGdlbmVyaWMg
cHJvcGVydGllcyBmaXJzdC4KKyAgICBIVE1MRWxlbWVudEltcGwgJmVsZW1lbnQgPSAqc3RhdGlj
X2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgewor
ICAgICAgICBjYXNlIEVsZW1lbnRJZDoKKyAgICAgICAgICAgIGVsZW1lbnQuc2V0SWQoc3RyKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBFbGVtZW50VGl0bGU6CisgICAgICAg
ICAgICBlbGVtZW50LnNldFRpdGxlKHN0cik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IGNhc2UgRWxlbWVudExhbmc6CisgICAgICAgICAgICBlbGVtZW50LnNldExhbmcoc3RyKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBFbGVtZW50RGlyOgorICAgICAgICAgICAg
ZWxlbWVudC5zZXREaXIoc3RyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBF
bGVtZW50Q2xhc3NOYW1lOgorICAgICAgICAgICAgZWxlbWVudC5zZXRDbGFzc05hbWUoc3RyKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBFbGVtZW50SW5uZXJIVE1MOgorICAg
ICAgICAgICAgZWxlbWVudC5zZXRJbm5lckhUTUwoc3RyLCBleGNlcHRpb24pOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICBjYXNlIEVsZW1lbnRJbm5lclRleHQ6CisgICAgICAgICAgICBl
bGVtZW50LnNldElubmVyVGV4dChzdHIsIGV4Y2VwdGlvbik7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIGNhc2UgRWxlbWVudE91dGVySFRNTDoKKyAgICAgICAgICAgIGVsZW1lbnQuc2V0
T3V0ZXJIVE1MKHN0ciwgZXhjZXB0aW9uKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
Y2FzZSBFbGVtZW50T3V0ZXJUZXh0OgorICAgICAgICAgICAgZWxlbWVudC5zZXRPdXRlclRleHQo
c3RyLCBleGNlcHRpb24pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIEVsZW1l
bnRDb250ZW50RWRpdGFibGU6CisgICAgICAgICAgICBlbGVtZW50LnNldENvbnRlbnRFZGl0YWJs
ZShzdHIpOworICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIE5vdyBjaGVjayBm
b3IgcHJvcGVydGllcyB0aGF0IGFwcGx5IHRvIGEgc3BlY2lmaWMgZWxlbWVudCB0eXBlLgorICAg
IGNvbnN0IEdldFNldEluZm8qIGluZm8gPSBnZXRTZXRJbmZvKCk7CisgICAgaWYgKGluZm8gJiYg
aW5mby0+bV9zZXR0ZXIpCisgICAgICAgIHJldHVybiAodGhpcy0+KihpbmZvLT5tX3NldHRlcikp
KGV4ZWMsIHRva2VuLCB2YWx1ZSwgc3RyKTsgIAogfQogCiBIVE1MRWxlbWVudEltcGwgKnRvSFRN
TEVsZW1lbnQoVmFsdWVJbXAgKnZhbCkKQEAgLTMxMTMsMjMgKzMyNzQsMTcgQEAgSFRNTEVsZW1l
bnRJbXBsICp0b0hUTUxFbGVtZW50KFZhbHVlSW1wIAogCiBIVE1MVGFibGVDYXB0aW9uRWxlbWVu
dEltcGwgKnRvSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQoVmFsdWVJbXAgKnZhbCkKIHsKLSAgICBp
ZiAoSFRNTEVsZW1lbnRJbXBsICplID0gdG9IVE1MRWxlbWVudCh2YWwpKQotICAgICAgICBzd2l0
Y2ggKGUtPmlkKCkpIHsKLSAgICAgICAgICAgIGNhc2UgSURfQ0FQVElPTjoKLSAgICAgICAgICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnRJbXBsICo+KGUp
OwotICAgICAgICB9CisgICAgSFRNTEVsZW1lbnRJbXBsICplID0gdG9IVE1MRWxlbWVudCh2YWwp
OworICAgIGlmIChlICYmIGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpjYXB0aW9uKCkpKQorICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnRJbXBsICo+KGUp
OwogICAgIHJldHVybiAwOwogfQogCiBIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGwgKnRvSFRN
TFRhYmxlU2VjdGlvbkVsZW1lbnQoVmFsdWVJbXAgKnZhbCkKIHsKLSAgICBpZiAoSFRNTEVsZW1l
bnRJbXBsICplID0gdG9IVE1MRWxlbWVudCh2YWwpKQotICAgICAgICBzd2l0Y2ggKGUtPmlkKCkp
IHsKLSAgICAgICAgICAgIGNhc2UgSURfVEhFQUQ6Ci0gICAgICAgICAgICBjYXNlIElEX1RCT0RZ
OgotICAgICAgICAgICAgY2FzZSBJRF9URk9PVDoKLSAgICAgICAgICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsICo+KGUpOwotICAgICAgICB9Cisg
ICAgSFRNTEVsZW1lbnRJbXBsICplID0gdG9IVE1MRWxlbWVudCh2YWwpOworICAgIGlmIChlICYm
IChlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGhlYWQoKSkgfHwgZS0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OnRib2R5KCkpIHx8IGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0Zm9vdCgpKSkpCisg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGwgKj4o
ZSk7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTMxNzgsMTAgKzMzMzMsMTAgQEAgVmFsdWUgS0pT
OjpIVE1MQ29sbGVjdGlvbjo6dHJ5R2V0KEV4ZWNTdAogICBlbHNlIGlmIChwcm9wZXJ0eU5hbWUg
PT0gInNlbGVjdGVkSW5kZXgiKSB7CiAgICAgLy8gTk9OLVNUQU5EQVJEIG9wdGlvbnMuc2VsZWN0
ZWRJbmRleAogICAgIE5vZGVJbXBsICpvcHRpb24gPSBjb2xsZWN0aW9uLml0ZW0oMCk7Ci0gICAg
aWYgKG9wdGlvbi0+aWQoKSA9PSBJRF9PUFRJT04pIHsKKyAgICBpZiAob3B0aW9uLT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpKSB7CiAgICAgICBOb2RlSW1wbCAqc2VsZWN0ID0gb3B0
aW9uOwogICAgICAgd2hpbGUgKChzZWxlY3QgPSBzZWxlY3QtPnBhcmVudE5vZGUoKSkpCi0gICAg
ICAgIGlmIChzZWxlY3QtPmlkKCkgPT0gSURfU0VMRUNUKQorICAgICAgICBpZiAoc2VsZWN0LT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6c2VsZWN0KCkpKQogCSAgcmV0dXJuIE51bWJlcihzdGF0aWNf
Y2FzdDxIVE1MU2VsZWN0RWxlbWVudEltcGwgKj4oc2VsZWN0KS0+c2VsZWN0ZWRJbmRleCgpKTsK
ICAgICB9CiAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwpAQCAtMzM2OSw3ICszNTI0LDcgQEAgdm9p
ZCBLSlM6OkhUTUxTZWxlY3RDb2xsZWN0aW9uOjp0cnlQdXQoRQogCiAgIC8vIGlzIHYgYW4gb3B0
aW9uIGVsZW1lbnQgPwogICBOb2RlSW1wbCAqb3B0aW9uID0gdG9Ob2RlKHZhbHVlKTsKLSAgaWYg
KCFvcHRpb24gfHwgb3B0aW9uLT5pZCgpICE9IElEX09QVElPTikKKyAgaWYgKCFvcHRpb24gfHwg
IW9wdGlvbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9wdGlvbigpKSkKICAgICByZXR1cm47CiAK
ICAgaW50IGV4Y2VwdGlvbiA9IDA7CkluZGV4OiBraHRtbC9lY21hL2tqc19odG1sLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWNtYS9ranNfaHRtbC5oLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjQ5CmRpZmYgLXUgLXAgLXIxLjQ5IGtodG1sL2VjbWEva2pz
X2h0bWwuaAotLS0ga2h0bWwvZWNtYS9ranNfaHRtbC5oCTMgSnVsIDIwMDUgMTA6NDc6NTYgLTAw
MDAJMS40OQorKysga2h0bWwvZWNtYS9ranNfaHRtbC5oCTggSnVsIDIwMDUgMDU6NTc6MDQgLTAw
MDAKQEAgLTg1LDYgKzg1LDEzMSBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgIGNhcHRpb25faW5m
bywgY29sX2luZm8sIHRhYmxlc2VjdGlvbl9pbmZvLCB0cl9pbmZvLAogICAgICAgdGFibGVjZWxs
X2luZm8sIGZyYW1lU2V0X2luZm8sIGZyYW1lX2luZm8sIGlGcmFtZV9pbmZvLCBtYXJxdWVlX2lu
Zm87CiAKKyAgICAvLyBGSVhNRTogTWlnaHQgbWFrZSBzZW5zZSB0byBjb21iaW5lIHRoaXMgd2l0
aCBDbGFzc0luZm8gc29tZSBkYXkuCisgICAgdHlwZWRlZiBWYWx1ZSAoSFRNTEVsZW1lbnQ6OipH
ZXR0ZXJGdW5jdGlvbikoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHR5
cGVkZWYgdm9pZCAoSFRNTEVsZW1lbnQ6OipTZXR0ZXJGdW5jdGlvbikoRXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0
cik7CisgICAgc3RydWN0IEdldFNldEluZm8geyBHZXR0ZXJGdW5jdGlvbiBtX2dldHRlcjsgU2V0
dGVyRnVuY3Rpb24gbV9zZXR0ZXI7IH07CisgICAgY29uc3QgR2V0U2V0SW5mbyogZ2V0U2V0SW5m
bygpIGNvbnN0OworICAgIHN0YXRpYyBjb25zdCBHZXRTZXRJbmZvIGh0bWxfZ2V0c2V0LCBoZWFk
X2dldHNldCwgbGlua19nZXRzZXQsIHRpdGxlX2dldHNldCwKKyAgICAgIG1ldGFfZ2V0c2V0LCBi
YXNlX2dldHNldCwgaXNJbmRleF9nZXRzZXQsIHN0eWxlX2dldHNldCwgYm9keV9nZXRzZXQsIGZv
cm1fZ2V0c2V0LAorICAgICAgc2VsZWN0X2dldHNldCwgb3B0R3JvdXBfZ2V0c2V0LCBvcHRpb25f
Z2V0c2V0LCBpbnB1dF9nZXRzZXQsIHRleHRBcmVhX2dldHNldCwKKyAgICAgIGJ1dHRvbl9nZXRz
ZXQsIGxhYmVsX2dldHNldCwgZmllbGRTZXRfZ2V0c2V0LCBsZWdlbmRfZ2V0c2V0LCB1bF9nZXRz
ZXQsIG9sX2dldHNldCwKKyAgICAgIGRsX2dldHNldCwgZGlyX2dldHNldCwgbWVudV9nZXRzZXQs
IGxpX2dldHNldCwgZGl2X2dldHNldCwgcF9nZXRzZXQsIGhlYWRpbmdfZ2V0c2V0LAorICAgICAg
YmxvY2tRdW90ZV9nZXRzZXQsIHFfZ2V0c2V0LCBwcmVfZ2V0c2V0LCBicl9nZXRzZXQsIGJhc2VG
b250X2dldHNldCwgZm9udF9nZXRzZXQsCisgICAgICBocl9nZXRzZXQsIG1vZF9nZXRzZXQsIGFf
Z2V0c2V0LCBjYW52YXNfZ2V0c2V0LCBpbWdfZ2V0c2V0LCBvYmplY3RfZ2V0c2V0LCBwYXJhbV9n
ZXRzZXQsCisgICAgICBhcHBsZXRfZ2V0c2V0LCBtYXBfZ2V0c2V0LCBhcmVhX2dldHNldCwgc2Ny
aXB0X2dldHNldCwgdGFibGVfZ2V0c2V0LAorICAgICAgY2FwdGlvbl9nZXRzZXQsIGNvbF9nZXRz
ZXQsIHRhYmxlc2VjdGlvbl9nZXRzZXQsIHRyX2dldHNldCwKKyAgICAgIHRhYmxlY2VsbF9nZXRz
ZXQsIGZyYW1lU2V0X2dldHNldCwgZnJhbWVfZ2V0c2V0LCBpRnJhbWVfZ2V0c2V0LCBtYXJxdWVl
X2dldHNldDsKKworICAgIFZhbHVlIGh0bWxHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0OworICAgIHZvaWQgIGh0bWxTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAg
VmFsdWUgaGVhZEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAg
dm9pZCAgaGVhZFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUm
IHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBsaW5rR2V0dGVy
KEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBsaW5rU2V0dGVy
KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERP
TTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIHRpdGxlR2V0dGVyKEV4ZWNTdGF0ZSogZXhl
YywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICB0aXRsZVNldHRlcihFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYg
c3RyKTsKKyAgICBWYWx1ZSBtZXRhR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBj
b25zdDsKKyAgICB2b2lkICBtZXRhU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBj
b25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVl
IGJhc2VHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQg
IGJhc2VTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1
ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgaXNJbmRleEdldHRlcihF
eGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgaXNJbmRleFNldHRl
cihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBE
T006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBzdHlsZUdldHRlcihFeGVjU3RhdGUqIGV4
ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgc3R5bGVTZXR0ZXIoRXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcm
IHN0cik7CisgICAgVmFsdWUgYm9keUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikg
Y29uc3Q7CisgICAgdm9pZCAgYm9keVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwg
Y29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1
ZSBmb3JtR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lk
ICBmb3JtU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFs
dWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIHNlbGVjdEdldHRlcihF
eGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgc2VsZWN0U2V0dGVy
KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERP
TTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIG9wdEdyb3VwR2V0dGVyKEV4ZWNTdGF0ZSog
ZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBvcHRHcm91cFNldHRlcihFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0
cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBvcHRpb25HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQg
dG9rZW4pIGNvbnN0OworICAgIHZvaWQgIG9wdGlvblNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsK
KyAgICBWYWx1ZSBpbnB1dEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7
CisgICAgdm9pZCAgaW5wdXRTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0
IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgdGV4
dEFyZWFHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQg
IHRleHRBcmVhU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYg
dmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIGJ1dHRvbkdldHRl
cihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgYnV0dG9uU2V0
dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0
IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIGxhYmVsR2V0dGVyKEV4ZWNTdGF0ZSog
ZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBsYWJlbFNldHRlcihFeGVjU3RhdGUg
KmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmlu
ZyYgc3RyKTsKKyAgICBWYWx1ZSBmaWVsZFNldEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0
b2tlbikgY29uc3Q7CisgICAgdm9pZCAgZmllbGRTZXRTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7
CisgICAgVmFsdWUgbGVnZW5kR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25z
dDsKKyAgICB2b2lkICBsZWdlbmRTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNv
bnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUg
dUxpc3RHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQg
IHVMaXN0U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFs
dWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIG9MaXN0R2V0dGVyKEV4
ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBvTGlzdFNldHRlcihF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006
OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBkTGlzdEdldHRlcihFeGVjU3RhdGUqIGV4ZWMs
IGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgZExpc3RTZXR0ZXIoRXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0
cik7CisgICAgVmFsdWUgZGlyR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25z
dDsKKyAgICB2b2lkICBkaXJTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0
IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgbWVu
dUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgbWVu
dVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBj
b25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBsaUdldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgbGlTZXR0ZXIoRXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcm
IHN0cik7CisgICAgVmFsdWUgZGl2R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBj
b25zdDsKKyAgICB2b2lkICBkaXZTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNv
bnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUg
cGFyYWdyYXBoR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2
b2lkICBwYXJhZ3JhcGhTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZh
bHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgaGVhZGlu
Z0dldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgaGVh
ZGluZ1NldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVl
LCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBibG9ja1F1b3RlR2V0dGVy
KEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBibG9ja1F1b3Rl
U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNv
bnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIHF1b3RlR2V0dGVyKEV4ZWNTdGF0
ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBxdW90ZVNldHRlcihFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0
cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBwcmVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0OworICAgIHZvaWQgIHByZVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
biwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBW
YWx1ZSBickdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9p
ZCAgYnJTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1
ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgYmFzZUZvbnRHZXR0ZXIo
RXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGJhc2VGb250U2V0
dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0
IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIGZvbnRHZXR0ZXIoRXhlY1N0YXRlKiBl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGZvbnRTZXR0ZXIoRXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcm
IHN0cik7CisgICAgVmFsdWUgaHJHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNv
bnN0OworICAgIHZvaWQgIGhyU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25z
dCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIG1v
ZEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgbW9k
U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNv
bnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIGFuY2hvckdldHRlcihFeGVjU3Rh
dGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgYW5jaG9yU2V0dGVyKEV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9N
U3RyaW5nJiBzdHIpOworICAgIFZhbHVlIGltYWdlR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50
IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBpbWFnZVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsK
KyAgICBWYWx1ZSBvYmplY3RHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0
OworICAgIHZvaWQgIG9iamVjdFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29u
c3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBw
YXJhbUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAg
cGFyYW1TZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1
ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgYXBwbGV0R2V0dGVyKEV4
ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBhcHBsZXRTZXR0ZXIo
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9N
OjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgbWFwR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywg
aW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBtYXBTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7
CisgICAgVmFsdWUgYXJlYUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7
CisgICAgdm9pZCAgYXJlYVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3Qg
VmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBzY3Jp
cHRHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIHNj
cmlwdFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVl
LCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSB0YWJsZUdldHRlcihFeGVj
U3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgdGFibGVTZXR0ZXIoRXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpE
T01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgdGFibGVDYXB0aW9uR2V0dGVyKEV4ZWNTdGF0ZSog
ZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICB0YWJsZUNhcHRpb25TZXR0ZXIoRXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpE
T01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgdGFibGVDb2xHZXR0ZXIoRXhlY1N0YXRlKiBleGVj
LCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIHRhYmxlQ29sU2V0dGVyKEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5n
JiBzdHIpOworICAgIFZhbHVlIHRhYmxlU2VjdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGlu
dCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgdGFibGVTZWN0aW9uU2V0dGVyKEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5n
JiBzdHIpOworICAgIFZhbHVlIHRhYmxlUm93R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRv
a2VuKSBjb25zdDsKKyAgICB2b2lkICB0YWJsZVJvd1NldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGlu
dCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsK
KyAgICBWYWx1ZSB0YWJsZUNlbGxHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNv
bnN0OworICAgIHZvaWQgIHRhYmxlQ2VsbFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
biwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBW
YWx1ZSBmcmFtZVNldEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7Cisg
ICAgdm9pZCAgZnJhbWVTZXRTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0
IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgZnJh
bWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGZy
YW1lU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUs
IGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIGlGcmFtZUdldHRlcihFeGVj
U3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgaUZyYW1lU2V0dGVyKEV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6
RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIG1hcnF1ZWVHZXR0ZXIoRXhlY1N0YXRlKiBleGVj
LCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIG1hcnF1ZWVTZXR0ZXIoRXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcm
IHN0cik7CisKICAgICBlbnVtIHsgSHRtbFZlcnNpb24sIEhlYWRQcm9maWxlLCBMaW5rSHJlZiwg
TGlua1JlbCwgTGlua01lZGlhLAogICAgICAgICAgICBMaW5rQ2hhcnNldCwgTGlua0Rpc2FibGVk
LCBMaW5rSHJlZkxhbmcsIExpbmtSZXYsIExpbmtUYXJnZXQsIExpbmtUeXBlLAogICAgICAgICAg
ICBMaW5rU2hlZXQsIFRpdGxlVGV4dCwgTWV0YU5hbWUsIE1ldGFIdHRwRXF1aXYsIE1ldGFDb250
ZW50LCBNZXRhU2NoZW1lLApJbmRleDoga2h0bWwvZWNtYS9ranNfd2luZG93LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lY21hL2tqc193aW5kb3cuY3Bw
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE2MgpkaWZmIC11IC1wIC1yMS4xNjIga2h0bWwvZWNt
YS9ranNfd2luZG93LmNwcAotLS0ga2h0bWwvZWNtYS9ranNfd2luZG93LmNwcAkzIEp1bCAyMDA1
IDEwOjQ3OjU2IC0wMDAwCTEuMTYyCisrKyBraHRtbC9lY21hL2tqc193aW5kb3cuY3BwCTggSnVs
IDIwMDUgMDU6NTc6MDYgLTAwMDAKQEAgLTY4LDcgKzY4LDYgQEAKICNpbmNsdWRlICJodG1sL2h0
bWxfZG9jdW1lbnRpbXBsLmgiCiAjaW5jbHVkZSAiY3NzL2Nzc19ydWxlaW1wbC5oIgogI2luY2x1
ZGUgImNzcy9jc3Nfc3R5bGVzaGVldGltcGwuaCIKLSNpbmNsdWRlICJtaXNjL2h0bWx0YWdzLmgi
CiAKIC8vIE11c3QgaW5jbHVkZSA8Y21hdGg+IGluc3RlYWQgb2YgPG1hdGguaD4gYmVjYXVzZSBv
ZiBhIGJ1ZyBpbiB0aGUKIC8vIGdjYyAzLjMgbGlicmFyeSB2ZXJzaW9uIG9mIDxtYXRoLmg+IHdo
ZXJlIGlmIHlvdSBpbmNsdWRlIGJvdGgKSW5kZXg6IGtodG1sL2VkaXRpbmcvYXBwbHlfc3R5bGVf
Y29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwv
ZWRpdGluZy9hcHBseV9zdHlsZV9jb21tYW5kLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40
CmRpZmYgLXUgLXAgLXIxLjQga2h0bWwvZWRpdGluZy9hcHBseV9zdHlsZV9jb21tYW5kLmNwcAot
LS0ga2h0bWwvZWRpdGluZy9hcHBseV9zdHlsZV9jb21tYW5kLmNwcAk1IEp1bCAyMDA1IDIzOjIx
OjA3IC0wMDAwCTEuNAorKysga2h0bWwvZWRpdGluZy9hcHBseV9zdHlsZV9jb21tYW5kLmNwcAk4
IEp1bCAyMDA1IDA1OjU3OjA3IC0wMDAwCkBAIC0zMyw3ICszMyw3IEBACiAjaW5jbHVkZSAiY3Nz
L2Nzc3Byb3BlcnRpZXMuaCIKICNpbmNsdWRlICJkb20vZG9tX3N0cmluZy5oIgogI2luY2x1ZGUg
Imh0bWwvaHRtbF9lbGVtZW50aW1wbC5oIgotI2luY2x1ZGUgIm1pc2MvaHRtbHRhZ3MuaCIKKyNp
bmNsdWRlICJodG1sbmFtZXMuaCIKICNpbmNsdWRlICJtaXNjL2h0bWxhdHRycy5oIgogI2luY2x1
ZGUgInJlbmRlcmluZy9yZW5kZXJfb2JqZWN0LmgiCiAjaW5jbHVkZSAieG1sL2RvbV9kb2NpbXBs
LmgiCkBAIC02NSw2ICs2NSw3IEBAIHVzaW5nIERPTTo6Tm9kZUltcGw7CiB1c2luZyBET006OlBv
c2l0aW9uOwogdXNpbmcgRE9NOjpSYW5nZUltcGw7CiB1c2luZyBET006OlRleHRJbXBsOwordXNp
bmcgRE9NOjpIVE1MTmFtZXM7CiAKIG5hbWVzcGFjZSBraHRtbCB7CiAKQEAgLTI0OSwxMiArMjUw
LDEyIEBAIGJvb2wgaXNTdHlsZVNwYW4oY29uc3QgTm9kZUltcGwgKm5vZGUpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAogICAgIGNvbnN0IEhUTUxFbGVtZW50SW1wbCAqZWxlbSA9IHN0YXRpY19j
YXN0PGNvbnN0IEhUTUxFbGVtZW50SW1wbCAqPihub2RlKTsKLSAgICByZXR1cm4gZWxlbS0+aWQo
KSA9PSBJRF9TUEFOICYmIGVsZW0tPmdldEF0dHJpYnV0ZShBVFRSX0NMQVNTKSA9PSBzdHlsZVNw
YW5DbGFzc1N0cmluZygpOworICAgIHJldHVybiBlbGVtLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVz
OjpzcGFuKCkpICYmIGVsZW0tPmdldEF0dHJpYnV0ZShBVFRSX0NMQVNTKSA9PSBzdHlsZVNwYW5D
bGFzc1N0cmluZygpOwogfQogCiBzdGF0aWMgYm9vbCBpc0VtcHR5U3R5bGVTcGFuKGNvbnN0IE5v
ZGVJbXBsICpub2RlKQogewotICAgIGlmICghbm9kZSB8fCAhbm9kZS0+aXNIVE1MRWxlbWVudCgp
IHx8IG5vZGUtPmlkKCkgIT0gSURfU1BBTikKKyAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPmlzSFRN
TEVsZW1lbnQoKSB8fCAhbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnNwYW4oKSkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIGNvbnN0IEhUTUxFbGVtZW50SW1wbCAqZWxlbSA9IHN0
YXRpY19jYXN0PGNvbnN0IEhUTUxFbGVtZW50SW1wbCAqPihub2RlKTsKQEAgLTI2NCw3ICsyNjUs
NyBAQCBzdGF0aWMgYm9vbCBpc0VtcHR5U3R5bGVTcGFuKGNvbnN0IE5vZGVJCiAKIHN0YXRpYyBi
b29sIGlzRW1wdHlGb250VGFnKGNvbnN0IE5vZGVJbXBsICpub2RlKQogewotICAgIGlmICghbm9k
ZSB8fCBub2RlLT5pZCgpICE9IElEX0ZPTlQpCisgICAgaWYgKCFub2RlIHx8ICFub2RlLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6Zm9udCgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
Y29uc3QgRWxlbWVudEltcGwgKmVsZW0gPSBzdGF0aWNfY2FzdDxjb25zdCBFbGVtZW50SW1wbCAq
Pihub2RlKTsKQEAgLTI3NSw3ICsyNzYsNyBAQCBzdGF0aWMgYm9vbCBpc0VtcHR5Rm9udFRhZyhj
b25zdCBOb2RlSW1wCiBzdGF0aWMgRWxlbWVudEltcGwgKmNyZWF0ZUZvbnRFbGVtZW50KERvY3Vt
ZW50SW1wbCAqZG9jdW1lbnQpCiB7CiAgICAgaW50IGV4Y2VwdGlvbkNvZGUgPSAwOwotICAgIEVs
ZW1lbnRJbXBsICpmb250Tm9kZSA9IGRvY3VtZW50LT5jcmVhdGVIVE1MRWxlbWVudCgiZm9udCIs
IGV4Y2VwdGlvbkNvZGUpOworICAgIEVsZW1lbnRJbXBsICpmb250Tm9kZSA9IGRvY3VtZW50LT5j
cmVhdGVFbGVtZW50TlMoWEhUTUxfTkFNRVNQQUNFLCAiZm9udCIsIGV4Y2VwdGlvbkNvZGUpOwog
ICAgIEFTU0VSVChleGNlcHRpb25Db2RlID09IDApOwogICAgIGZvbnROb2RlLT5zZXRBdHRyaWJ1
dGUoQVRUUl9DTEFTUywgc3R5bGVTcGFuQ2xhc3NTdHJpbmcoKSk7CiAgICAgcmV0dXJuIGZvbnRO
b2RlOwpAQCAtMjg0LDcgKzI4NSw3IEBAIHN0YXRpYyBFbGVtZW50SW1wbCAqY3JlYXRlRm9udEVs
ZW1lbnQoRG8KIEVsZW1lbnRJbXBsICpjcmVhdGVTdHlsZVNwYW5FbGVtZW50KERvY3VtZW50SW1w
bCAqZG9jdW1lbnQpCiB7CiAgICAgaW50IGV4Y2VwdGlvbkNvZGUgPSAwOwotICAgIEVsZW1lbnRJ
bXBsICpzdHlsZUVsZW1lbnQgPSBkb2N1bWVudC0+Y3JlYXRlSFRNTEVsZW1lbnQoIlNQQU4iLCBl
eGNlcHRpb25Db2RlKTsKKyAgICBFbGVtZW50SW1wbCAqc3R5bGVFbGVtZW50ID0gZG9jdW1lbnQt
PmNyZWF0ZUVsZW1lbnROUyhYSFRNTF9OQU1FU1BBQ0UsICJzcGFuIiwgZXhjZXB0aW9uQ29kZSk7
CiAgICAgQVNTRVJUKGV4Y2VwdGlvbkNvZGUgPT0gMCk7CiAgICAgc3R5bGVFbGVtZW50LT5zZXRB
dHRyaWJ1dGUoQVRUUl9DTEFTUywgc3R5bGVTcGFuQ2xhc3NTdHJpbmcoKSk7CiAgICAgcmV0dXJu
IHN0eWxlRWxlbWVudDsKQEAgLTU4Niw3ICs1ODcsNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5k
OjphcHBseUlubGluZVN0eWxlCiAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBjdXJyZW50IGdy
b3VwLgogICAgICAgICAgICAgICAgICAgICBpZiAobm9kZSA9PSBlbmQubm9kZSgpIHx8IAogICAg
ICAgICAgICAgICAgICAgICAgICAgcnVuU3RhcnQtPnBhcmVudE5vZGUoKSAhPSBuZXh0LT5wYXJl
bnROb2RlKCkgfHwgCi0gICAgICAgICAgICAgICAgICAgICAgICAobmV4dC0+aXNIVE1MRWxlbWVu
dCgpICYmIG5leHQtPmlkKCkgIT0gSURfQlIpIHx8IAorICAgICAgICAgICAgICAgICAgICAgICAg
KG5leHQtPmlzRWxlbWVudE5vZGUoKSAmJiAhbmV4dC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJy
KCkpKSB8fCAKICAgICAgICAgICAgICAgICAgICAgICAgIChuZXh0LT5yZW5kZXJlcigpICYmICFu
ZXh0LT5yZW5kZXJlcigpLT5pc0lubGluZSgpKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgICAgICBub2RlID0gbmV4dDsKQEAgLTYxMSwxMSArNjEyLDEx
IEBAIGJvb2wgQXBwbHlTdHlsZUNvbW1hbmQ6OmlzSFRNTFN0eWxlTm9kZSgKICAgICBmb3IgKFFW
YWx1ZUxpc3RDb25zdEl0ZXJhdG9yPENTU1Byb3BlcnR5PiBpdCA9IHN0eWxlLT52YWx1ZXNJdGVy
YXRvcigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgc3dpdGNoICgoKml0KS5pZCgpKSB7
CiAgICAgICAgICAgICBjYXNlIENTU19QUk9QX0ZPTlRfV0VJR0hUOgotICAgICAgICAgICAgICAg
IGlmIChlbGVtLT5pZCgpID09IElEX0IpCisgICAgICAgICAgICAgICAgaWYgKGVsZW0tPmhhc0xv
Y2FsTmFtZShIVE1MTmFtZXM6OmIoKSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDU1NfUFJPUF9GT05U
X1NUWUxFOgotICAgICAgICAgICAgICAgIGlmIChlbGVtLT5pZCgpID09IElEX0kpCisgICAgICAg
ICAgICAgICAgaWYgKGVsZW0tPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmkoKSkpCiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQpAQCAtNjM4LDcgKzYz
OSw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUhUTUxGb250U3QKICAgICBBU1NF
UlQoc3R5bGUpOwogICAgIEFTU0VSVChlbGVtKTsKIAotICAgIGlmIChlbGVtLT5pZCgpICE9IElE
X0ZPTlQpCisgICAgaWYgKCFlbGVtLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpmb250KCkpKQog
ICAgICAgICByZXR1cm47CiAKICAgICBpbnQgZXhjZXB0aW9uQ29kZSA9IDA7CkBAIC0xMDQ3LDcg
KzEwNDgsNyBAQCBzdGF0aWMgYm9vbCBhcmVJZGVudGljYWxFbGVtZW50cyhOb2RlSW1wCiAgICAg
RWxlbWVudEltcGwgKmZpcnN0RWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsICo+KGZp
cnN0KTsKICAgICBFbGVtZW50SW1wbCAqc2Vjb25kRWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1l
bnRJbXBsICo+KHNlY29uZCk7CiAgICAgCi0gICAgaWYgKGZpcnN0RWxlbWVudC0+aWQoKSAhPSBz
ZWNvbmRFbGVtZW50LT5pZCgpKQorICAgIGlmICghZmlyc3RFbGVtZW50LT50YWdOYW1lKCkubWF0
Y2hlcyhzZWNvbmRFbGVtZW50LT50YWdOYW1lKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICBOYW1lZEF0dHJNYXBJbXBsICpmaXJzdE1hcCA9IGZpcnN0RWxlbWVudC0+YXR0cmlidXRl
cygpOwpAQCAtMTEyOSw3ICsxMTMwLDcgQEAgYm9vbCBBcHBseVN0eWxlQ29tbWFuZDo6bWVyZ2VF
bmRXaXRoTmV4dAogICAgICAgICBlbmRPZmZzZXQgPSBwYXJlbnRMYXN0T2Zmc2V0OwogICAgIH0K
IAotICAgIGlmICghZW5kTm9kZS0+aXNFbGVtZW50Tm9kZSgpIHx8IGVuZE5vZGUtPmlkKCkgPT0g
SURfQlIpCisgICAgaWYgKCFlbmROb2RlLT5pc0VsZW1lbnROb2RlKCkgfHwgZW5kTm9kZS0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OmJyKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBO
b2RlSW1wbCAqbmV4dFNpYmxpbmcgPSBlbmROb2RlLT5uZXh0U2libGluZygpOwpAQCAtMTI3NCwx
NCArMTI3NSwxNCBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphZGRJbmxpbmVTdHlsZUlmCiAg
ICAgfQogCiAgICAgaWYgKHN0eWxlQ2hhbmdlLmFwcGx5Qm9sZCgpKSB7Ci0gICAgICAgIEVsZW1l
bnRJbXBsICpib2xkRWxlbWVudCA9IGRvY3VtZW50KCktPmNyZWF0ZUhUTUxFbGVtZW50KCJCIiwg
ZXhjZXB0aW9uQ29kZSk7CisgICAgICAgIEVsZW1lbnRJbXBsICpib2xkRWxlbWVudCA9IGRvY3Vt
ZW50KCktPmNyZWF0ZUVsZW1lbnROUyhYSFRNTF9OQU1FU1BBQ0UsICJiIiwgZXhjZXB0aW9uQ29k
ZSk7CiAgICAgICAgIEFTU0VSVChleGNlcHRpb25Db2RlID09IDApOwogICAgICAgICBpbnNlcnRO
b2RlQmVmb3JlKGJvbGRFbGVtZW50LCBzdGFydE5vZGUpOwogICAgICAgICBzdXJyb3VuZE5vZGVS
YW5nZVdpdGhFbGVtZW50KHN0YXJ0Tm9kZSwgZW5kTm9kZSwgYm9sZEVsZW1lbnQpOwogICAgIH0K
IAogICAgIGlmIChzdHlsZUNoYW5nZS5hcHBseUl0YWxpYygpKSB7Ci0gICAgICAgIEVsZW1lbnRJ
bXBsICppdGFsaWNFbGVtZW50ID0gZG9jdW1lbnQoKS0+Y3JlYXRlSFRNTEVsZW1lbnQoIkkiLCBl
eGNlcHRpb25Db2RlKTsKKyAgICAgICAgRWxlbWVudEltcGwgKml0YWxpY0VsZW1lbnQgPSBkb2N1
bWVudCgpLT5jcmVhdGVFbGVtZW50TlMoWEhUTUxfTkFNRVNQQUNFLCAiaSIsIGV4Y2VwdGlvbkNv
ZGUpOwogICAgICAgICBBU1NFUlQoZXhjZXB0aW9uQ29kZSA9PSAwKTsKICAgICAgICAgaW5zZXJ0
Tm9kZUJlZm9yZShpdGFsaWNFbGVtZW50LCBzdGFydE5vZGUpOwogICAgICAgICBzdXJyb3VuZE5v
ZGVSYW5nZVdpdGhFbGVtZW50KHN0YXJ0Tm9kZSwgZW5kTm9kZSwgaXRhbGljRWxlbWVudCk7Cklu
ZGV4OiBraHRtbC9lZGl0aW5nL2JyZWFrX2Jsb2NrcXVvdGVfY29tbWFuZC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWRpdGluZy9icmVha19ibG9ja3F1
b3RlX2NvbW1hbmQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtdSAtcCAtcjEu
MSBraHRtbC9lZGl0aW5nL2JyZWFrX2Jsb2NrcXVvdGVfY29tbWFuZC5jcHAKLS0tIGtodG1sL2Vk
aXRpbmcvYnJlYWtfYmxvY2txdW90ZV9jb21tYW5kLmNwcAkyNCBNYXkgMjAwNSAwNzoyMTo0NyAt
MDAwMAkxLjEKKysrIGtodG1sL2VkaXRpbmcvYnJlYWtfYmxvY2txdW90ZV9jb21tYW5kLmNwcAk4
IEp1bCAyMDA1IDA1OjU3OjA4IC0wMDAwCkBAIC0yOCw3ICsyOCw3IEBACiAjaW5jbHVkZSAiaHRt
bGVkaXRpbmcuaCIKICNpbmNsdWRlICJ2aXNpYmxlX3Bvc2l0aW9uLmgiCiAKLSNpbmNsdWRlICJt
aXNjL2h0bWx0YWdzLmgiCisjaW5jbHVkZSAiaHRtbG5hbWVzLmgiCiAjaW5jbHVkZSAieG1sL2Rv
bV9lbGVtZW50aW1wbC5oIgogI2luY2x1ZGUgInhtbC9kb21fdGV4dGltcGwuaCIKIApAQCAtNDMs
NiArNDMsNyBAQCB1c2luZyBET006OkVsZW1lbnRJbXBsOwogdXNpbmcgRE9NOjpOb2RlSW1wbDsK
IHVzaW5nIERPTTo6UG9zaXRpb247CiB1c2luZyBET006OlRleHRJbXBsOwordXNpbmcgRE9NOjpI
VE1MTmFtZXM7CiAKIG5hbWVzcGFjZSBraHRtbCB7CiAKQEAgLTE0Niw3ICsxNDcsNyBAQCB2b2lk
IEJyZWFrQmxvY2txdW90ZUNvbW1hbmQ6OmRvQXBwbHkoKQogICAgICAgICBib29sIHN0YXJ0SXNC
UiA9IGZhbHNlOwogICAgICAgICBpZiAoc3RhcnROb2RlICE9IHRvcEJsb2NrcXVvdGUpIHsKICAg
ICAgICAgICAgIE5vZGVJbXBsICpuID0gc3RhcnROb2RlOwotICAgICAgICAgICAgc3RhcnRJc0JS
ID0gbi0+aWQoKSA9PSBJRF9CUjsKKyAgICAgICAgICAgIHN0YXJ0SXNCUiA9IG4tPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjpicigpKTsKICAgICAgICAgICAgIGlmIChzdGFydElzQlIpCiAgICAgICAg
ICAgICAgICAgbiA9IG4tPm5leHRTaWJsaW5nKCk7CiAgICAgICAgICAgICB3aGlsZSAobikgewpJ
bmRleDoga2h0bWwvZWRpdGluZy9jb21wb3NpdGVfZWRpdF9jb21tYW5kLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL2NvbXBvc2l0ZV9lZGl0
X2NvbW1hbmQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjMKZGlmZiAtdSAtcCAtcjEuMyBr
aHRtbC9lZGl0aW5nL2NvbXBvc2l0ZV9lZGl0X2NvbW1hbmQuY3BwCi0tLSBraHRtbC9lZGl0aW5n
L2NvbXBvc2l0ZV9lZGl0X2NvbW1hbmQuY3BwCTI0IE1heSAyMDA1IDA3OjIxOjQ3IC0wMDAwCTEu
MworKysga2h0bWwvZWRpdGluZy9jb21wb3NpdGVfZWRpdF9jb21tYW5kLmNwcAk4IEp1bCAyMDA1
IDA1OjU3OjA5IC0wMDAwCkBAIC00Nyw3ICs0Nyw3IEBACiAjaW5jbHVkZSAid3JhcF9jb250ZW50
c19pbl9kdW1teV9zcGFuX2NvbW1hbmQuaCIKIAogI2luY2x1ZGUgIm1pc2MvaHRtbGF0dHJzLmgi
Ci0jaW5jbHVkZSAibWlzYy9odG1sdGFncy5oIgorI2luY2x1ZGUgImh0bWxuYW1lcy5oIgogI2lu
Y2x1ZGUgInJlbmRlcmluZy9yZW5kZXJfdGV4dC5oIgogI2luY2x1ZGUgInhtbC9kb20yX3Jhbmdl
aW1wbC5oIgogI2luY2x1ZGUgInhtbC9kb21fdGV4dGltcGwuaCIKQEAgLTY3LDYgKzY3LDcgQEAg
dXNpbmcgRE9NOjpOb2RlSW1wbDsKIHVzaW5nIERPTTo6UG9zaXRpb247CiB1c2luZyBET006OlJh
bmdlSW1wbDsKIHVzaW5nIERPTTo6VGV4dEltcGw7Cit1c2luZyBET006OkhUTUxOYW1lczsKIAog
bmFtZXNwYWNlIGtodG1sIHsKIApAQCAtMTI3LDE0ICsxMjgsMTQgQEAgdm9pZCBDb21wb3NpdGVF
ZGl0Q29tbWFuZDo6aW5zZXJ0UGFyYWdyYQogCiB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpp
bnNlcnROb2RlQmVmb3JlKE5vZGVJbXBsICppbnNlcnRDaGlsZCwgTm9kZUltcGwgKnJlZkNoaWxk
KQogewotICAgIEFTU0VSVChyZWZDaGlsZC0+aWQoKSAhPSBJRF9CT0RZKTsKKyAgICBBU1NFUlQo
IXJlZkNoaWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Ym9keSgpKSk7CiAgICAgRWRpdENvbW1h
bmRQdHIgY21kKG5ldyBJbnNlcnROb2RlQmVmb3JlQ29tbWFuZChkb2N1bWVudCgpLCBpbnNlcnRD
aGlsZCwgcmVmQ2hpbGQpKTsKICAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShjbWQpOwogfQog
CiB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjppbnNlcnROb2RlQWZ0ZXIoTm9kZUltcGwgKmlu
c2VydENoaWxkLCBOb2RlSW1wbCAqcmVmQ2hpbGQpCiB7Ci0gICAgQVNTRVJUKHJlZkNoaWxkLT5p
ZCgpICE9IElEX0JPRFkpOworICAgIEFTU0VSVCghcmVmQ2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjpib2R5KCkpKTsKICAgICBpZiAocmVmQ2hpbGQtPnBhcmVudE5vZGUoKS0+bGFzdENoaWxk
KCkgPT0gcmVmQ2hpbGQpIHsKICAgICAgICAgYXBwZW5kTm9kZShpbnNlcnRDaGlsZCwgcmVmQ2hp
bGQtPnBhcmVudE5vZGUoKSk7CiAgICAgfQpAQCAtNTQ1LDcgKzU0Niw3IEBAIHZvaWQgQ29tcG9z
aXRlRWRpdENvbW1hbmQ6Om1vdmVQYXJhZ3JhcGgKICAgICAvLyAgICAgICBhZGRpdGlvbmFsIGxl
dmVsIG9mIHF1b3RpbmcuCiAgICAgTm9kZUltcGwgKnN0YXJ0QmxvY2sgPSBwYXJhZ3JhcGhTdGFy
dC5ub2RlKCktPmVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQoKTsKICAgICBOb2RlSW1wbCAqbmV3
QmxvY2sgPSAwOwotICAgIGlmIChzdGFydEJsb2NrLT5pZCgpID09IElEX0JPRFkgfHwgKGlzTWFp
bEJsb2NrcXVvdGUoc3RhcnRCbG9jaykgJiYgcGFyYWdyYXBoU3RhcnQubm9kZSgpICE9IHN0YXJ0
QmxvY2spKQorICAgIGlmIChzdGFydEJsb2NrLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Ym9keSgp
KSB8fCAoaXNNYWlsQmxvY2txdW90ZShzdGFydEJsb2NrKSAmJiBwYXJhZ3JhcGhTdGFydC5ub2Rl
KCkgIT0gc3RhcnRCbG9jaykpCiAgICAgICAgIG5ld0Jsb2NrID0gY3JlYXRlRGVmYXVsdFBhcmFn
cmFwaEVsZW1lbnQoZG9jdW1lbnQoKSk7CiAgICAgZWxzZQogICAgICAgICBuZXdCbG9jayA9IHN0
YXJ0QmxvY2stPmNsb25lTm9kZShmYWxzZSk7CkBAIC01NTUsMTAgKzU1NiwxMCBAQCB2b2lkIENv
bXBvc2l0ZUVkaXRDb21tYW5kOjptb3ZlUGFyYWdyYXBoCiAgICAgICAgIG1vdmVOb2RlID0gbW92
ZU5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKTsKICAgICBOb2RlSW1wbCAqZW5kTm9kZSA9IHBhcmFn
cmFwaEVuZC5ub2RlKCk7CiAKLSAgICBpZiAocGFyYWdyYXBoU3RhcnQubm9kZSgpLT5pZCgpID09
IElEX0JPRFkpIHsKKyAgICBpZiAocGFyYWdyYXBoU3RhcnQubm9kZSgpLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6Ym9keSgpKSkgewogICAgICAgICBpbnNlcnROb2RlQXQobmV3QmxvY2ssIHBhcmFn
cmFwaFN0YXJ0Lm5vZGUoKSwgMCk7CiAgICAgfQotICAgIGVsc2UgaWYgKHBhcmFncmFwaFN0YXJ0
Lm5vZGUoKS0+aWQoKSA9PSBJRF9CUikgeworICAgIGVsc2UgaWYgKHBhcmFncmFwaFN0YXJ0Lm5v
ZGUoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJyKCkpKSB7CiAgICAgICAgIGluc2VydE5vZGVB
ZnRlcihuZXdCbG9jaywgcGFyYWdyYXBoU3RhcnQubm9kZSgpKTsKICAgICB9CiAgICAgZWxzZSB7
CkBAIC01NzgsNyArNTc5LDcgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6bW92ZVBhcmFn
cmFwaAogRWxlbWVudEltcGwgKmNyZWF0ZUJsb2NrUGxhY2Vob2xkZXJFbGVtZW50KERvY3VtZW50
SW1wbCAqZG9jdW1lbnQpCiB7CiAgICAgaW50IGV4Y2VwdGlvbkNvZGUgPSAwOwotICAgIEVsZW1l
bnRJbXBsICpicmVha05vZGUgPSBkb2N1bWVudC0+Y3JlYXRlSFRNTEVsZW1lbnQoImJyIiwgZXhj
ZXB0aW9uQ29kZSk7CisgICAgRWxlbWVudEltcGwgKmJyZWFrTm9kZSA9IGRvY3VtZW50LT5jcmVh
dGVFbGVtZW50TlMoWEhUTUxfTkFNRVNQQUNFLCAiYnIiLCBleGNlcHRpb25Db2RlKTsKICAgICBB
U1NFUlQoZXhjZXB0aW9uQ29kZSA9PSAwKTsKICAgICBicmVha05vZGUtPnNldEF0dHJpYnV0ZShB
VFRSX0NMQVNTLCBibG9ja1BsYWNlaG9sZGVyQ2xhc3NTdHJpbmcoKSk7CiAgICAgcmV0dXJuIGJy
ZWFrTm9kZTsKSW5kZXg6IGtodG1sL2VkaXRpbmcvZGVsZXRlX3NlbGVjdGlvbl9jb21tYW5kLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL2Rl
bGV0ZV9zZWxlY3Rpb25fY29tbWFuZC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNApkaWZm
IC11IC1wIC1yMS40IGtodG1sL2VkaXRpbmcvZGVsZXRlX3NlbGVjdGlvbl9jb21tYW5kLmNwcAot
LS0ga2h0bWwvZWRpdGluZy9kZWxldGVfc2VsZWN0aW9uX2NvbW1hbmQuY3BwCTUgSnVsIDIwMDUg
MjM6MjE6MDcgLTAwMDAJMS40CisrKyBraHRtbC9lZGl0aW5nL2RlbGV0ZV9zZWxlY3Rpb25fY29t
bWFuZC5jcHAJOCBKdWwgMjAwNSAwNTo1NzowOSAtMDAwMApAQCAtMjgsNyArMjgsNyBAQAogI2lu
Y2x1ZGUgImNzcy9jc3NfY29tcHV0ZWRzdHlsZS5oIgogI2luY2x1ZGUgImh0bWxlZGl0aW5nLmgi
CiAjaW5jbHVkZSAia2h0bWxfcGFydC5oIgotI2luY2x1ZGUgIm1pc2MvaHRtbHRhZ3MuaCIKKyNp
bmNsdWRlICJodG1sbmFtZXMuaCIKICNpbmNsdWRlICJyZW5kZXJpbmcvcmVuZGVyX2xpbmUuaCIK
ICNpbmNsdWRlICJyZW5kZXJpbmcvcmVuZGVyX29iamVjdC5oIgogI2luY2x1ZGUgInZpc2libGVf
dGV4dC5oIgpAQCAtNTMsNiArNTMsNyBAQCB1c2luZyBET006Ok5vZGVJbXBsOwogdXNpbmcgRE9N
OjpQb3NpdGlvbjsKIHVzaW5nIERPTTo6UmFuZ2VJbXBsOwogdXNpbmcgRE9NOjpUZXh0SW1wbDsK
K3VzaW5nIERPTTo6SFRNTE5hbWVzOwogCiBuYW1lc3BhY2Uga2h0bWwgewogCkBAIC02MSw5ICs2
MiwxMyBAQCBzdGF0aWMgYm9vbCBpc0xpc3RTdHJ1Y3R1cmVOb2RlKGNvbnN0IE5vCiAgICAgLy8g
RklYTUU6IElycml0YXRpbmcgdGhhdCB3ZSBjYW4gZ2V0IGF3YXkgd2l0aCBqdXN0IGdvaW5nIGF0
IHRoZSByZW5kZXIgdHJlZSBmb3IgaXNUYWJsZVN0cnVjdHVyZU5vZGUsCiAgICAgLy8gYnV0IGhl
cmUgd2UgYWxzbyBoYXZlIHRvIHBlZWsgYXQgdGhlIHR5cGUgb2YgRE9NIG5vZGU/CiAgICAgUmVu
ZGVyT2JqZWN0ICpyID0gbm9kZS0+cmVuZGVyZXIoKTsKLSAgICBOb2RlSW1wbDo6SWQgbm9kZUlE
ID0gbm9kZS0+aWQoKTsKICAgICByZXR1cm4gKHIgJiYgci0+aXNMaXN0SXRlbSgpKQotICAgICAg
ICB8fCAobm9kZUlEID09IElEX09MIHx8IG5vZGVJRCA9PSBJRF9VTCB8fCBub2RlSUQgPT0gSURf
REQgfHwgbm9kZUlEID09IElEX0RUIHx8IG5vZGVJRCA9PSBJRF9ESVIgfHwgbm9kZUlEID09IElE
X01FTlUpOworICAgICAgICB8fCBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b2woKSkKKyAg
ICAgICAgfHwgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnVsKCkpCisgICAgICAgIHx8IG5v
ZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpkZCgpKQorICAgICAgICB8fCBub2RlLT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6ZHQoKSkKKyAgICAgICAgfHwgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OmRpcigpKQorICAgICAgICB8fCBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6bWVudSgp
KTsKIH0KIAogc3RhdGljIGludCBtYXhEZWVwT2Zmc2V0KE5vZGVJbXBsICpuKQpAQCAtMjc3LDgg
KzI4Miw4IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6c2F2ZVR5cGluZ1MKIGJvb2wg
RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6aGFuZGxlU3BlY2lhbENhc2VCUkRlbGV0ZSgpCiB7CiAg
ICAgLy8gQ2hlY2sgZm9yIHNwZWNpYWwtY2FzZSB3aGVyZSB0aGUgc2VsZWN0aW9uIGNvbnRhaW5z
IG9ubHkgYSBCUiBvbiBhIGxpbmUgYnkgaXRzZWxmIGFmdGVyIGFub3RoZXIgQlIuCi0gICAgYm9v
bCB1cHN0cmVhbVN0YXJ0SXNCUiA9IG1fc3RhcnROb2RlLT5pZCgpID09IElEX0JSOwotICAgIGJv
b2wgZG93bnN0cmVhbVN0YXJ0SXNCUiA9IG1fZG93bnN0cmVhbVN0YXJ0Lm5vZGUoKS0+aWQoKSA9
PSBJRF9CUjsKKyAgICBib29sIHVwc3RyZWFtU3RhcnRJc0JSID0gbV9zdGFydE5vZGUtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjpicigpKTsKKyAgICBib29sIGRvd25zdHJlYW1TdGFydElzQlIgPSBt
X2Rvd25zdHJlYW1TdGFydC5ub2RlKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpicigpKTsKICAg
ICBib29sIGlzQlJPbkxpbmVCeUl0c2VsZiA9IHVwc3RyZWFtU3RhcnRJc0JSICYmIGRvd25zdHJl
YW1TdGFydElzQlIgJiYgbV9kb3duc3RyZWFtU3RhcnQubm9kZSgpID09IG1fdXBzdHJlYW1FbmQu
bm9kZSgpOwogICAgIGlmIChpc0JST25MaW5lQnlJdHNlbGYpIHsKICAgICAgICAgcmVtb3ZlTm9k
ZShtX2Rvd25zdHJlYW1TdGFydC5ub2RlKCkpOwpAQCAtMzI2LDExICszMzEsMTEgQEAgdm9pZCBE
ZWxldGVTZWxlY3Rpb25Db21tYW5kOjpoYW5kbGVHZW5lcgogICAgIC8vIGVuZCBvZiBhIGJsb2Nr
IG90aGVyIHRoYW4gdGhlIGJsb2NrIGNvbnRhaW5pbmcgdGhlIHNlbGVjdGlvbiBzdGFydCwgdGhl
biBkbyBub3QgZGVsZXRlIHRoZSAKICAgICAvLyBzdGFydCBibG9jaywgb3RoZXJ3aXNlIGRlbGV0
ZSB0aGUgc3RhcnQgYmxvY2suCiAgICAgLy8gQSBzaW1pbGFyIGNhc2UgaXMgcHJvdmlkZWQgdG8g
Y292ZXIgc2VsZWN0aW9ucyBzdGFydGluZyBpbiBCUiBlbGVtZW50cy4KLSAgICBpZiAoc3RhcnRP
ZmZzZXQgPT0gMSAmJiBtX3N0YXJ0Tm9kZSAmJiBtX3N0YXJ0Tm9kZS0+aWQoKSA9PSBJRF9CUikg
eworICAgIGlmIChzdGFydE9mZnNldCA9PSAxICYmIG1fc3RhcnROb2RlICYmIG1fc3RhcnROb2Rl
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YnIoKSkpIHsKICAgICAgICAgc2V0U3RhcnROb2RlKG1f
c3RhcnROb2RlLT50cmF2ZXJzZU5leHROb2RlKCkpOwogICAgICAgICBzdGFydE9mZnNldCA9IDA7
CiAgICAgfQotICAgIGlmIChtX3N0YXJ0QmxvY2sgIT0gbV9lbmRCbG9jayAmJiBzdGFydE9mZnNl
dCA9PSAwICYmIG1fc3RhcnROb2RlICYmIG1fc3RhcnROb2RlLT5pZCgpID09IElEX0JSICYmIGVu
ZEF0RW5kT2ZCbG9jaykgeworICAgIGlmIChtX3N0YXJ0QmxvY2sgIT0gbV9lbmRCbG9jayAmJiBz
dGFydE9mZnNldCA9PSAwICYmIG1fc3RhcnROb2RlICYmIG1fc3RhcnROb2RlLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6YnIoKSkgJiYgZW5kQXRFbmRPZkJsb2NrKSB7CiAgICAgICAgIC8vIERvbid0
IGRlbGV0ZSB0aGUgQlIgZWxlbWVudAogICAgICAgICBzZXRTdGFydE5vZGUobV9zdGFydE5vZGUt
PnRyYXZlcnNlTmV4dE5vZGUoKSk7CiAgICAgfQpAQCAtNTUyLDcgKzU1Nyw3IEBAIHZvaWQgRGVs
ZXRlU2VsZWN0aW9uQ29tbWFuZDo6bW92ZU5vZGVzQWYKICAgICAgICAgTm9kZUltcGwgKm1vdmVO
b2RlID0gbm9kZTsKICAgICAgICAgbm9kZSA9IG5vZGUtPm5leHRTaWJsaW5nKCk7CiAgICAgICAg
IHJlbW92ZU5vZGUobW92ZU5vZGUpOwotICAgICAgICBpZiAobW92ZU5vZGUtPmlkKCkgPT0gSURf
QlIgJiYgIW1vdmVOb2RlLT5yZW5kZXJlcigpKSB7CisgICAgICAgIGlmIChtb3ZlTm9kZS0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OmJyKCkpICYmICFtb3ZlTm9kZS0+cmVuZGVyZXIoKSkgewogICAg
ICAgICAgICAgLy8gSnVzdCByZW1vdmUgdGhpcyBub2RlLCBhbmQgZG9uJ3QgcHV0IGl0IGJhY2su
CiAgICAgICAgICAgICAvLyBJZiB0aGUgQlIgd2FzIG5vdCByZW5kZXJlZCAoc2luY2UgaXQgd2Fz
IGF0IHRoZSBlbmQgb2YgYSBibG9jaywgZm9yIGluc3RhbmNlKSwgCiAgICAgICAgICAgICAvLyBw
dXR0aW5nIGl0IGJhY2sgaW4gdGhlIGRvY3VtZW50IG1pZ2h0IG1ha2UgaXQgYXBwZWFyLCBhbmQg
dGhhdCBpcyBub3QgZGVzaXJhYmxlLgpAQCAtNTYzLDcgKzU2OCw3IEBAIHZvaWQgRGVsZXRlU2Vs
ZWN0aW9uQ29tbWFuZDo6bW92ZU5vZGVzQWYKICAgICAgICAgZWxzZQogICAgICAgICAgICAgaW5z
ZXJ0Tm9kZUFmdGVyKG1vdmVOb2RlLCByZWZOb2RlKTsKICAgICAgICAgcmVmTm9kZSA9IG1vdmVO
b2RlOwotICAgICAgICBpZiAobW92ZU5vZGUtPmlkKCkgPT0gSURfQlIpCisgICAgICAgIGlmICht
b3ZlTm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJyKCkpKQogICAgICAgICAgICAgYnJlYWs7
CiAgICAgfQogCkluZGV4OiBraHRtbC9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL2h0bWxlZGl0aW5nLmNw
cCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yNDkKZGlmZiAtdSAtcCAtcjEuMjQ5IGtodG1sL2Vk
aXRpbmcvaHRtbGVkaXRpbmcuY3BwCi0tLSBraHRtbC9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAk1
IEp1bCAyMDA1IDIzOjIxOjA4IC0wMDAwCTEuMjQ5CisrKyBraHRtbC9lZGl0aW5nL2h0bWxlZGl0
aW5nLmNwcAk4IEp1bCAyMDA1IDA1OjU3OjA5IC0wMDAwCkBAIC00Miw3ICs0Miw3IEBACiAjaW5j
bHVkZSAiaHRtbF9pbWFnZWltcGwuaCIKICNpbmNsdWRlICJodG1sX2ludGVyY2hhbmdlLmgiCiAj
aW5jbHVkZSAiaHRtbGF0dHJzLmgiCi0jaW5jbHVkZSAiaHRtbHRhZ3MuaCIKKyNpbmNsdWRlICJo
dG1sbmFtZXMuaCIKICNpbmNsdWRlICJraHRtbF9wYXJ0LmgiCiAjaW5jbHVkZSAia2h0bWxfcGFy
dC5oIgogI2luY2x1ZGUgImtodG1sdmlldy5oIgpAQCAtODEsNiArODEsNyBAQCB1c2luZyBET006
OlBvc2l0aW9uOwogdXNpbmcgRE9NOjpSYW5nZUltcGw7CiB1c2luZyBET006OlRleHRJbXBsOwog
dXNpbmcgRE9NOjpUcmVlV2Fsa2VySW1wbDsKK3VzaW5nIERPTTo6SFRNTE5hbWVzOwogCiAjaWYg
QVBQTEVfQ0hBTkdFUwogI2luY2x1ZGUgIktXUUFzc2VydGlvbnMuaCIKQEAgLTEzMSwxMCArMTMy
LDEwIEBAIGJvb2wgaXNTcGVjaWFsRWxlbWVudChOb2RlSW1wbCAqbikKICAgICBpZiAoIW4tPmlz
SFRNTEVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKG4tPmlkKCkg
PT0gSURfQSAmJiBuLT5pc0xpbmsoKSkKKyAgICBpZiAobi0+aXNMaW5rKCkpCiAgICAgICAgIHJl
dHVybiB0cnVlOwogCi0gICAgaWYgKG4tPmlkKCkgPT0gSURfVUwgfHwgbi0+aWQoKSA9PSBJRF9P
TCB8fCBuLT5pZCgpID09IElEX0RMKQorICAgIGlmIChuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
dWwoKSkgfHwgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9sKCkpIHx8IG4tPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjpkbCgpKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBSZW5kZXJPYmpl
Y3QgKnJlbmRlcmVyID0gbi0+cmVuZGVyZXIoKTsKQEAgLTI2Nyw3ICsyNjgsNyBAQCBFbGVtZW50
SW1wbCAqY3JlYXRlRGVmYXVsdFBhcmFncmFwaEVsZW1lCiAgICAgLy8gV2Ugd291bGQgbmVlZCB0
aGlzIG1hcmdpbi16ZXJvaW5nIGNvZGUgYmFjayBpZiB3ZSBldmVyIHJldHVybiB0byB1c2luZyA8
cD4gZWxlbWVudHMgZm9yIGRlZmF1bHQgcGFyYWdyYXBocy4KICAgICAvLyBzdGF0aWMgY29uc3Qg
RE9NU3RyaW5nIGRlZmF1bHRQYXJhZ3JhcGhTdHlsZSgibWFyZ2luLXRvcDogMDsgbWFyZ2luLWJv
dHRvbTogMCIpOyAgICAKICAgICBpbnQgZXhjZXB0aW9uQ29kZSA9IDA7Ci0gICAgRWxlbWVudElt
cGwgKmVsZW1lbnQgPSBkb2N1bWVudC0+Y3JlYXRlSFRNTEVsZW1lbnQoImRpdiIsIGV4Y2VwdGlv
bkNvZGUpOworICAgIEVsZW1lbnRJbXBsICplbGVtZW50ID0gZG9jdW1lbnQtPmNyZWF0ZUVsZW1l
bnROUyhYSFRNTF9OQU1FU1BBQ0UsICJkaXYiLCBleGNlcHRpb25Db2RlKTsKICAgICBBU1NFUlQo
ZXhjZXB0aW9uQ29kZSA9PSAwKTsKICAgICByZXR1cm4gZWxlbWVudDsKIH0KQEAgLTI3NSw3ICsy
NzYsNyBAQCBFbGVtZW50SW1wbCAqY3JlYXRlRGVmYXVsdFBhcmFncmFwaEVsZW1lCiBFbGVtZW50
SW1wbCAqY3JlYXRlQnJlYWtFbGVtZW50KERvY3VtZW50SW1wbCAqZG9jdW1lbnQpCiB7CiAgICAg
aW50IGV4Y2VwdGlvbkNvZGUgPSAwOwotICAgIEVsZW1lbnRJbXBsICpicmVha05vZGUgPSBkb2N1
bWVudC0+Y3JlYXRlSFRNTEVsZW1lbnQoImJyIiwgZXhjZXB0aW9uQ29kZSk7CisgICAgRWxlbWVu
dEltcGwgKmJyZWFrTm9kZSA9IGRvY3VtZW50LT5jcmVhdGVFbGVtZW50TlMoWEhUTUxfTkFNRVNQ
QUNFLCAiYnIiLCBleGNlcHRpb25Db2RlKTsKICAgICBBU1NFUlQoZXhjZXB0aW9uQ29kZSA9PSAw
KTsKICAgICByZXR1cm4gYnJlYWtOb2RlOwogfQpAQCAtMzAzLDcgKzMwNCw3IEBAIE5vZGVJbXBs
ICpuZWFyZXN0TWFpbEJsb2NrcXVvdGUoY29uc3QgTm8KIAogYm9vbCBpc01haWxCbG9ja3F1b3Rl
KGNvbnN0IE5vZGVJbXBsICpub2RlKQogewotICAgIGlmICghbm9kZSB8fCAhbm9kZS0+cmVuZGVy
ZXIoKSB8fCAhbm9kZS0+aXNFbGVtZW50Tm9kZSgpICYmIG5vZGUtPmlkKCkgIT0gSURfQkxPQ0tR
VU9URSkKKyAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPnJlbmRlcmVyKCkgfHwgIW5vZGUtPmlzRWxl
bWVudE5vZGUoKSAmJiAhbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJsb2NrcXVvdGUoKSkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PGNvbnN0IEVsZW1lbnRJbXBsICo+KG5vZGUpLT5nZXRBdHRyaWJ1dGUoInR5cGUiKSA9PSAiY2l0
ZSI7CkluZGV4OiBraHRtbC9lZGl0aW5nL2luc2VydF9saW5lX2JyZWFrX2NvbW1hbmQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VkaXRpbmcvaW5zZXJ0
X2xpbmVfYnJlYWtfY29tbWFuZC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC11
IC1wIC1yMS4xIGtodG1sL2VkaXRpbmcvaW5zZXJ0X2xpbmVfYnJlYWtfY29tbWFuZC5jcHAKLS0t
IGtodG1sL2VkaXRpbmcvaW5zZXJ0X2xpbmVfYnJlYWtfY29tbWFuZC5jcHAJMjQgTWF5IDIwMDUg
MDc6MjE6NDcgLTAwMDAJMS4xCisrKyBraHRtbC9lZGl0aW5nL2luc2VydF9saW5lX2JyZWFrX2Nv
bW1hbmQuY3BwCTggSnVsIDIwMDUgMDU6NTc6MDkgLTAwMDAKQEAgLTI5LDcgKzI5LDcgQEAKICNp
bmNsdWRlICJ2aXNpYmxlX3Bvc2l0aW9uLmgiCiAjaW5jbHVkZSAidmlzaWJsZV91bml0cy5oIgog
Ci0jaW5jbHVkZSAibWlzYy9odG1sdGFncy5oIgorI2luY2x1ZGUgImh0bWxuYW1lcy5oIgogI2lu
Y2x1ZGUgInhtbC9kb21fZG9jaW1wbC5oIgogI2luY2x1ZGUgInhtbC9kb21fZWxlbWVudGltcGwu
aCIKICNpbmNsdWRlICJ4bWwvZG9tMl9yYW5nZWltcGwuaCIKQEAgLTUwLDYgKzUwLDcgQEAgdXNp
bmcgRE9NOjpOb2RlSW1wbDsKIHVzaW5nIERPTTo6UG9zaXRpb247CiB1c2luZyBET006OlRleHRJ
bXBsOwogdXNpbmcgRE9NOjpDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbkltcGw7Cit1c2luZyBE
T006OkhUTUxOYW1lczsKIAogbmFtZXNwYWNlIGtodG1sIHsKIApAQCAtMTExLDEzICsxMTIsMTMg
QEAgdm9pZCBJbnNlcnRMaW5lQnJlYWtDb21tYW5kOjpkb0FwcGx5KCkKICAgICAgICAgLy8gVGhp
cyBtYWtlcyB0aGUgInJlYWwiIEJSIHdlIHdhbnQgdG8gaW5zZXJ0IGFwcGVhciBpbiB0aGUgcmVu
ZGVyaW5nIHdpdGhvdXQgYW55IAogICAgICAgICAvLyBzaWduaWZpY2FudCBzaWRlIGVmZmVjdHMg
KGFuZCBubyByZWFsIHdvcnJpZXMgZWl0aGVyIHNpbmNlIHlvdSBjYW4ndCBhcnJvdyBwYXN0IAog
ICAgICAgICAvLyB0aGlzIGV4dHJhIG9uZS4KLSAgICAgICAgaWYgKHBvcy5ub2RlKCktPmlkKCkg
PT0gSURfQlIgJiYgcG9zLm9mZnNldCgpID09IDApIHsKKyAgICAgICAgaWYgKHBvcy5ub2RlKCkt
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpicigpKSAmJiBwb3Mub2Zmc2V0KCkgPT0gMCkgewogICAg
ICAgICAgICAgLy8gQWxyZWFkeSBwbGFjZWQgaW4gYSB0cmFpbGluZyBCUi4gSW5zZXJ0ICJyZWFs
IiBCUiBiZWZvcmUgaXQgYW5kIGxlYXZlIHRoZSBzZWxlY3Rpb24gYWxvbmUuCiAgICAgICAgICAg
ICBpbnNlcnROb2RlQmVmb3JlKG5vZGVUb0luc2VydCwgcG9zLm5vZGUoKSk7CiAgICAgICAgIH0K
ICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBOb2RlSW1wbCAqbmV4dCA9IHBvcy5ub2RlKCkt
PnRyYXZlcnNlTmV4dE5vZGUoKTsKLSAgICAgICAgICAgIGJvb2wgaGFzVHJhaWxpbmdCUiA9IG5l
eHQgJiYgbmV4dC0+aWQoKSA9PSBJRF9CUiAmJiBwb3Mubm9kZSgpLT5lbmNsb3NpbmdCbG9ja0Zs
b3dFbGVtZW50KCkgPT0gbmV4dC0+ZW5jbG9zaW5nQmxvY2tGbG93RWxlbWVudCgpOworICAgICAg
ICAgICAgYm9vbCBoYXNUcmFpbGluZ0JSID0gbmV4dCAmJiBuZXh0LT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6YnIoKSkgJiYgcG9zLm5vZGUoKS0+ZW5jbG9zaW5nQmxvY2tGbG93RWxlbWVudCgpID09
IG5leHQtPmVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQoKTsKICAgICAgICAgICAgIGluc2VydE5v
ZGVBZnRlclBvc2l0aW9uKG5vZGVUb0luc2VydCwgcG9zKTsKICAgICAgICAgICAgIGlmIChoYXNU
cmFpbGluZ0JSKSB7CiAgICAgICAgICAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFNlbGVjdGlv
bihQb3NpdGlvbihuZXh0LCAwKSwgRE9XTlNUUkVBTSkpOwpJbmRleDoga2h0bWwvZWRpdGluZy9p
bnNlcnRfcGFyYWdyYXBoX3NlcGFyYXRvcl9jb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL2luc2VydF9wYXJhZ3JhcGhfc2VwYXJh
dG9yX2NvbW1hbmQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtdSAtcCAtcjEu
MSBraHRtbC9lZGl0aW5nL2luc2VydF9wYXJhZ3JhcGhfc2VwYXJhdG9yX2NvbW1hbmQuY3BwCi0t
LSBraHRtbC9lZGl0aW5nL2luc2VydF9wYXJhZ3JhcGhfc2VwYXJhdG9yX2NvbW1hbmQuY3BwCTI0
IE1heSAyMDA1IDA3OjIxOjQ3IC0wMDAwCTEuMQorKysga2h0bWwvZWRpdGluZy9pbnNlcnRfcGFy
YWdyYXBoX3NlcGFyYXRvcl9jb21tYW5kLmNwcAk4IEp1bCAyMDA1IDA1OjU3OjA5IC0wMDAwCkBA
IC0zMSw3ICszMSw3IEBACiAKICNpbmNsdWRlICJjc3MvY3NzX2NvbXB1dGVkc3R5bGUuaCIKICNp
bmNsdWRlICJjc3MvY3NzX3ZhbHVlaW1wbC5oIgotI2luY2x1ZGUgIm1pc2MvaHRtbHRhZ3MuaCIK
KyNpbmNsdWRlICJodG1sbmFtZXMuaCIKICNpbmNsdWRlICJ4bWwvZG9tX2RvY2ltcGwuaCIKICNp
bmNsdWRlICJ4bWwvZG9tX2VsZW1lbnRpbXBsLmgiCiAjaW5jbHVkZSAieG1sL2RvbV90ZXh0aW1w
bC5oIgpAQCAtNTAsNiArNTAsNyBAQCB1c2luZyBET006OkVsZW1lbnRJbXBsOwogdXNpbmcgRE9N
OjpOb2RlSW1wbDsKIHVzaW5nIERPTTo6UG9zaXRpb247CiB1c2luZyBET006OlRleHRJbXBsOwor
dXNpbmcgRE9NOjpIVE1MTmFtZXM7CiAKIG5hbWVzcGFjZSBraHRtbCB7CiAKQEAgLTIxMyw3ICsy
MTQsNyBAQCB2b2lkIEluc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQ6OmRvCiAgICAgLy8g
dGhlbiB0aGlzIDxicj4gd2lsbCBjb2xsYXBzZSBhd2F5IHdoZW4gd2UgYWRkIGEgYmxvY2sgYWZ0
ZXIgaXQuIEFkZCBhbiBleHRyYSA8YnI+LgogICAgIGlmICghZG9jdW1lbnQoKS0+aW5TdHJpY3RN
b2RlKCkpIHsKICAgICAgICAgUG9zaXRpb24gdXBzdHJlYW1Qb3MgPSBwb3MudXBzdHJlYW0oKTsK
LSAgICAgICAgaWYgKHVwc3RyZWFtUG9zLm5vZGUoKS0+aWQoKSA9PSBJRF9CUikKKyAgICAgICAg
aWYgKHVwc3RyZWFtUG9zLm5vZGUoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJyKCkpKQogICAg
ICAgICAgICAgaW5zZXJ0Tm9kZUFmdGVyKGNyZWF0ZUJyZWFrRWxlbWVudChkb2N1bWVudCgpKSwg
dXBzdHJlYW1Qb3Mubm9kZSgpKTsKICAgICB9CiAgICAgCkluZGV4OiBraHRtbC9lZGl0aW5nL21h
cmt1cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWRp
dGluZy9tYXJrdXAuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIzCmRpZmYgLXUgLXAgLXIx
LjIzIGtodG1sL2VkaXRpbmcvbWFya3VwLmNwcAotLS0ga2h0bWwvZWRpdGluZy9tYXJrdXAuY3Bw
CTUgSnVsIDIwMDUgMjM6MjE6MDggLTAwMDAJMS4yMworKysga2h0bWwvZWRpdGluZy9tYXJrdXAu
Y3BwCTggSnVsIDIwMDUgMDU6NTc6MTAgLTAwMDAKQEAgLTM2LDggKzM2LDcgQEAKICNpbmNsdWRl
ICJ4bWwvZG9tMl9yYW5nZWltcGwuaCIKICNpbmNsdWRlICJyZW5kZXJpbmcvcmVuZGVyX3RleHQu
aCIKICNpbmNsdWRlICJtaXNjL2h0bWxhdHRycy5oIgotI2luY2x1ZGUgIm1pc2MvaHRtbHRhZ3Mu
aCIKLSNpbmNsdWRlICJodG1sL2R0ZC5oIgorI2luY2x1ZGUgImh0bWxuYW1lcy5oIgogCiB1c2lu
ZyBET006OkF0dHJpYnV0ZUltcGw7CiB1c2luZyBET006OkNvbW1lbnRJbXBsOwpAQCAtNDcsOSAr
NDYsOSBAQCB1c2luZyBET006OkRvY3VtZW50RnJhZ21lbnRJbXBsOwogdXNpbmcgRE9NOjpEb2N1
bWVudEltcGw7CiB1c2luZyBET006OkRPTVN0cmluZzsKIHVzaW5nIERPTTo6RWxlbWVudEltcGw7
Ci11c2luZyBET006OkZPUkJJRERFTjsKLXVzaW5nIERPTTo6ZW5kVGFnUmVxdWlyZW1lbnQ7Cit1
c2luZyBET006OlRhZ1N0YXR1c0ZvcmJpZGRlbjsKIHVzaW5nIERPTTo6SFRNTEVsZW1lbnRJbXBs
OwordXNpbmcgRE9NOjpIVE1MTmFtZXM7CiB1c2luZyBET006Ok5hbWVkQXR0ck1hcEltcGw7CiB1
c2luZyBET006Ok5vZGU7CiB1c2luZyBET006Ok5vZGVJbXBsOwpAQCAtMTc3LDEzICsxNzYsMTEg
QEAgc3RhdGljIFFTdHJpbmcgc3RhcnRNYXJrdXAoY29uc3QgTm9kZUltcAogICAgIHN3aXRjaCAo
dHlwZSkgewogICAgICAgICBjYXNlIE5vZGU6OlRFWFRfTk9ERTogewogICAgICAgICAgICAgaWYg
KG5vZGUtPnBhcmVudE5vZGUoKSkgewotICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+cGFy
ZW50Tm9kZSgpLT5pZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfUFJFOgotICAg
ICAgICAgICAgICAgICAgICBjYXNlIElEX1NDUklQVDoKLSAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBJRF9TVFlMRToKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9URVhUQVJFQToKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBzdHJpbmdWYWx1ZUZvclJhbmdlKG5vZGUsIHJhbmdl
KTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPnBhcmVudE5v
ZGUoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnByZSgpKSB8fAorICAgICAgICAgICAgICAgICAg
ICBub2RlLT5wYXJlbnROb2RlKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzY3JpcHQoKSkgfHwK
KyAgICAgICAgICAgICAgICAgICAgbm9kZS0+cGFyZW50Tm9kZSgpLT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6c3R5bGUoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+cGFyZW50Tm9kZSgp
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGV4dGFyZWEoKSkpCisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBzdHJpbmdWYWx1ZUZvclJhbmdlKG5vZGUsIHJhbmdlKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIFFTdHJpbmcgbWFya3VwID0gYW5ub3RhdGUgPyBlc2NhcGVIVE1MKHJlbmRl
cmVkVGV4dChub2RlLCByYW5nZSkpIDogZXNjYXBlSFRNTChzdHJpbmdWYWx1ZUZvclJhbmdlKG5v
ZGUsIHJhbmdlKSk7ICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoZGVmYXVsdFN0eWxlKSB7
CkBAIC0yNDgsOSArMjQ1LDEzIEBAIHN0YXRpYyBRU3RyaW5nIHN0YXJ0TWFya3VwKGNvbnN0IE5v
ZGVJbXAKIAogc3RhdGljIFFTdHJpbmcgZW5kTWFya3VwKGNvbnN0IE5vZGVJbXBsICpub2RlKQog
ewotICAgIGlmICgoIW5vZGUtPmlzSFRNTEVsZW1lbnQoKSB8fCBlbmRUYWdSZXF1aXJlbWVudChu
b2RlLT5pZCgpKSAhPSBGT1JCSURERU4pICYmIG5vZGUtPm5vZGVUeXBlKCkgIT0gTm9kZTo6VEVY
VF9OT0RFICYmIG5vZGUtPm5vZGVUeXBlKCkgIT0gTm9kZTo6RE9DVU1FTlRfTk9ERSkgewotICAg
ICAgICByZXR1cm4gIjwvIiArIG5vZGUtPm5vZGVOYW1lKCkuc3RyaW5nKCkgKyAiPiI7CisgICAg
Ym9vbCBoYXNFbmRUYWcgPSBub2RlLT5pc0VsZW1lbnROb2RlKCk7CisgICAgaWYgKG5vZGUtPmlz
SFRNTEVsZW1lbnQoKSkgeworICAgICAgICBjb25zdCBIVE1MRWxlbWVudEltcGwqIGh0bWxFbHQg
PSBzdGF0aWNfY2FzdDxjb25zdCBIVE1MRWxlbWVudEltcGwqPihub2RlKTsKKyAgICAgICAgaGFz
RW5kVGFnID0gKGh0bWxFbHQtPmVuZFRhZ1JlcXVpcmVtZW50KCkgIT0gVGFnU3RhdHVzRm9yYmlk
ZGVuKTsKICAgICB9CisgICAgaWYgKGhhc0VuZFRhZykKKyAgICAgICAgcmV0dXJuICI8LyIgKyBu
b2RlLT5ub2RlTmFtZSgpLnN0cmluZygpICsgIj4iOwogICAgIHJldHVybiAiIjsKIH0KIApAQCAt
MjY1LDggKzI2NiwxNCBAQCBzdGF0aWMgUVN0cmluZyBtYXJrdXAoY29uc3QgTm9kZUltcGwgKnN0
CiAgICAgICAgICAgICAgICAgbm9kZXMtPmFwcGVuZChjdXJyZW50KTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIG1lICs9IHN0YXJ0TWFya3VwKGN1cnJlbnQsIDAsIERvTm90QW5ub3RhdGVG
b3JJbnRlcmNoYW5nZSwgMCk7Ci0gICAgICAgIH0gICAgICAgIAotICAgICAgICBpZiAoIWN1cnJl
bnQtPmlzSFRNTEVsZW1lbnQoKSB8fCBlbmRUYWdSZXF1aXJlbWVudChjdXJyZW50LT5pZCgpKSAh
PSBGT1JCSURERU4pIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBjb250YWlu
ZXIgPSB0cnVlOworICAgICAgICBpZiAoY3VycmVudC0+aXNIVE1MRWxlbWVudCgpKSB7CisgICAg
ICAgICAgICBjb25zdCBIVE1MRWxlbWVudEltcGwqIGggPSBzdGF0aWNfY2FzdDxjb25zdCBIVE1M
RWxlbWVudEltcGwqPihjdXJyZW50KTsKKyAgICAgICAgICAgIGNvbnRhaW5lciA9IGgtPmVuZFRh
Z1JlcXVpcmVtZW50KCkgIT0gVGFnU3RhdHVzRm9yYmlkZGVuOworICAgICAgICB9CisgICAgICAg
IGlmIChjb250YWluZXIpIHsKICAgICAgICAgICAgIC8vIHByaW50IGNoaWxkcmVuCiAgICAgICAg
ICAgICBpZiAoTm9kZUltcGwgKm4gPSBjdXJyZW50LT5maXJzdENoaWxkKCkpIHsKICAgICAgICAg
ICAgICAgICBtZSArPSBtYXJrdXAobiwgZmFsc2UsIHRydWUsIG5vZGVzKTsKQEAgLTQxNCw5ICs0
MjEsOSBAQCBRU3RyaW5nIGNyZWF0ZU1hcmt1cChjb25zdCBSYW5nZUltcGwgKnJhCiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBib29sIGJyZWFrQXRFbmQgPSBmYWxzZTsKICAgICAgICAgICAg
IGlmIChjb21tb25BbmNlc3RvckJsb2NrID09IGFuY2VzdG9yKSB7Ci0gICAgICAgICAgICAgICAg
Tm9kZUltcGw6OklkIGlkID0gYW5jZXN0b3ItPmlkKCk7CiAgICAgICAgICAgICAgICAgLy8gSW5j
bHVkZSBhbmNlc3RvcnMgdGhhdCBhcmUgcmVxdWlyZWQgdG8gcmV0YWluIHRoZSBhcHBlYXJhbmNl
IG9mIHRoZSBjb3BpZWQgbWFya3VwLgotICAgICAgICAgICAgICAgIGlmIChpZCA9PSBJRF9QUkUg
fHwgaWQgPT0gSURfVEFCTEUgfHwgaWQgPT0gSURfT0wgfHwgaWQgPT0gSURfVUwpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoYW5jZXN0b3ItPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpwcmUoKSkgfHwg
YW5jZXN0b3ItPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0YWJsZSgpKSB8fAorICAgICAgICAgICAg
ICAgICAgICBhbmNlc3Rvci0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9sKCkpIHx8IGFuY2VzdG9y
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dWwoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgYnJl
YWtBdEVuZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CkBAIC01MzksNyArNTQ2LDcgQEAgRE9NOjpEb2N1bWVudEZyYWdtZW50SW1w
bCAqY3JlYXRlRnJhZ21lbgogICAgICAgICAgICAgRWxlbWVudEltcGwgKmVsZW1lbnQ7CiAgICAg
ICAgICAgICBpZiAocy5pc0VtcHR5KCkgJiYgbGlzdC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAg
ICAgICAvLyBGb3IgbGFzdCBsaW5lLCB1c2UgdGhlICJtYWdpYyBCUiIgcmF0aGVyIHRoYW4gYSBQ
LgotICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBkb2N1bWVudC0+Y3JlYXRlSFRNTEVsZW1lbnQo
ImJyIiwgZXhjZXB0aW9uQ29kZSk7CisgICAgICAgICAgICAgICAgZWxlbWVudCA9IGRvY3VtZW50
LT5jcmVhdGVFbGVtZW50TlMoWEhUTUxfTkFNRVNQQUNFLCAiYnIiLCBleGNlcHRpb25Db2RlKTsK
ICAgICAgICAgICAgICAgICBBU1NFUlQoZXhjZXB0aW9uQ29kZSA9PSAwKTsKICAgICAgICAgICAg
ICAgICBlbGVtZW50LT5yZWYoKTsKICAgICAgICAgICAgICAgICBlbGVtZW50LT5zZXRBdHRyaWJ1
dGUoQVRUUl9DTEFTUywgQXBwbGVJbnRlcmNoYW5nZU5ld2xpbmUpOyAgICAgICAgICAgIApJbmRl
eDoga2h0bWwvZWRpdGluZy9yZXBsYWNlX3NlbGVjdGlvbl9jb21tYW5kLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL3JlcGxhY2Vfc2VsZWN0
aW9uX2NvbW1hbmQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjQKZGlmZiAtdSAtcCAtcjEu
NCBraHRtbC9lZGl0aW5nL3JlcGxhY2Vfc2VsZWN0aW9uX2NvbW1hbmQuY3BwCi0tLSBraHRtbC9l
ZGl0aW5nL3JlcGxhY2Vfc2VsZWN0aW9uX2NvbW1hbmQuY3BwCTUgSnVsIDIwMDUgMjM6MjE6MDgg
LTAwMDAJMS40CisrKyBraHRtbC9lZGl0aW5nL3JlcGxhY2Vfc2VsZWN0aW9uX2NvbW1hbmQuY3Bw
CTggSnVsIDIwMDUgMDU6NTc6MTMgLTAwMDAKQEAgLTI3LDcgKzI3LDcgQEAKIAogI2luY2x1ZGUg
InZpc2libGVfcG9zaXRpb24uaCIKICNpbmNsdWRlICJtaXNjL2h0bWxhdHRycy5oIgotI2luY2x1
ZGUgIm1pc2MvaHRtbHRhZ3MuaCIKKyNpbmNsdWRlICJodG1sbmFtZXMuaCIKICNpbmNsdWRlICJ4
bWwvZG9tX2RvY2ltcGwuaCIKICNpbmNsdWRlICJodG1sX2ludGVyY2hhbmdlLmgiCiAjaW5jbHVk
ZSAieG1sL2RvbV90ZXh0aW1wbC5oIgpAQCAtNTgsNiArNTgsNyBAQCB1c2luZyBET006OkRPTVN0
cmluZzsKIHVzaW5nIERPTTo6SFRNTEVsZW1lbnRJbXBsOwogdXNpbmcgRE9NOjpDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbkltcGw7CiB1c2luZyBET006OlBvc2l0aW9uOwordXNpbmcgRE9NOjpI
VE1MTmFtZXM7CiAKIG5hbWVzcGFjZSBraHRtbCB7CiAKQEAgLTE2NywzMCArMTY4LDE0IEBAIHN0
YXRpYyBib29sIGlzUHJvYmFibHlCbG9jayhjb25zdCBOb2RlSW0KICAgICBpZiAoIW5vZGUpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBzd2l0Y2ggKG5vZGUtPmlkKCkpIHsKLSAg
ICAgICAgY2FzZSBJRF9CTE9DS1FVT1RFOgotICAgICAgICBjYXNlIElEX0REOgotICAgICAgICBj
YXNlIElEX0RJVjoKLSAgICAgICAgY2FzZSBJRF9ETDoKLSAgICAgICAgY2FzZSBJRF9EVDoKLSAg
ICAgICAgY2FzZSBJRF9IMToKLSAgICAgICAgY2FzZSBJRF9IMjoKLSAgICAgICAgY2FzZSBJRF9I
MzoKLSAgICAgICAgY2FzZSBJRF9INDoKLSAgICAgICAgY2FzZSBJRF9INToKLSAgICAgICAgY2Fz
ZSBJRF9INjoKLSAgICAgICAgY2FzZSBJRF9IUjoKLSAgICAgICAgY2FzZSBJRF9MSToKLSAgICAg
ICAgY2FzZSBJRF9PTDoKLSAgICAgICAgY2FzZSBJRF9QOgotICAgICAgICBjYXNlIElEX1BSRToK
LSAgICAgICAgY2FzZSBJRF9URDoKLSAgICAgICAgY2FzZSBJRF9USDoKLSAgICAgICAgY2FzZSBJ
RF9VTDoKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4g
ZmFsc2U7CisgICAgLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24gc2VlbXMgcmVhbGx5IGJyb2tlbiB0
byBtZS4gIEl0IGlzbid0IGV2ZW4gaW5jbHVkaW5nIGFsbCB0aGUgYmxvY2stbGV2ZWwgZWxlbWVu
dHMuCisgICAgcmV0dXJuIChub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YmxvY2txdW90ZSgp
KSB8fCBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZGQoKSkgfHwgbm9kZS0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OmRpdigpKSB8fAorICAgICAgICAgICAgbm9kZS0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OmRsKCkpIHx8IG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpkdCgpKSB8fCBub2Rl
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDEoKSkgfHwKKyAgICAgICAgICAgIG5vZGUtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjpoMigpKSB8fCBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDMo
KSkgfHwgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omg0KCkpIHx8CisgICAgICAgICAgICBu
b2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDUoKSkgfHwgbm9kZS0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6Omg2KCkpIHx8IG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpocigpKSB8fAorICAg
ICAgICAgICAgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmxpKCkpIHx8IG5vZGUtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjpvbCgpKSB8fCBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6cCgp
KSB8fAorICAgICAgICAgICAgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnByZSgpKSB8fCBu
b2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGQoKSkgfHwgbm9kZS0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OnRoKCkpIHx8CisgICAgICAgICAgICBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
dWwoKSkpOwogfQogCiBzdGF0aWMgYm9vbCBpc01haWxQYXN0ZUFzUXVvdGF0aW9uTm9kZShjb25z
dCBOb2RlSW1wbCAqbm9kZSkKQEAgLTIxNCwxNiArMTk5LDggQEAgc3RhdGljIGJvb2wgaXNQcm9i
YWJseVRhYmxlU3RydWN0dXJlTm9kZQogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIAotICAgIHN3aXRjaCAobm9kZS0+aWQoKSkgewotICAgICAgICBjYXNlIElEX1RB
QkxFOgotICAgICAgICBjYXNlIElEX1RCT0RZOgotICAgICAgICBjYXNlIElEX1REOgotICAgICAg
ICBjYXNlIElEX1RGT09UOgotICAgICAgICBjYXNlIElEX1RIRUFEOgotICAgICAgICBjYXNlIElE
X1RSOgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsK
KyAgICByZXR1cm4gKG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0YWJsZSgpKSB8fCBub2Rl
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGJvZHkoKSkgfHwgbm9kZS0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OnRkKCkpIHx8CisgICAgICAgICAgICBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
dGZvb3QoKSkgfHwgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRoZWFkKCkpIHx8IG5vZGUt
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0cigpKSk7CiB9CiAKIHZvaWQgUmVwbGFjZW1lbnRGcmFn
bWVudDo6cHJ1bmVFbXB0eU5vZGVzKCkKQEAgLTI1MCw3ICsyMjcsNyBAQCB2b2lkIFJlcGxhY2Vt
ZW50RnJhZ21lbnQ6OnBydW5lRW1wdHlOb2RlCiBib29sIFJlcGxhY2VtZW50RnJhZ21lbnQ6Omlz
SW50ZXJjaGFuZ2VOZXdsaW5lTm9kZShjb25zdCBOb2RlSW1wbCAqbm9kZSkKIHsKICAgICBzdGF0
aWMgRE9NU3RyaW5nIGludGVyY2hhbmdlTmV3bGluZUNsYXNzU3RyaW5nKEFwcGxlSW50ZXJjaGFu
Z2VOZXdsaW5lKTsKLSAgICByZXR1cm4gbm9kZSAmJiBub2RlLT5pZCgpID09IElEX0JSICYmIHN0
YXRpY19jYXN0PGNvbnN0IEVsZW1lbnRJbXBsICo+KG5vZGUpLT5nZXRBdHRyaWJ1dGUoQVRUUl9D
TEFTUykgPT0gaW50ZXJjaGFuZ2VOZXdsaW5lQ2xhc3NTdHJpbmc7CisgICAgcmV0dXJuIG5vZGUg
JiYgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJyKCkpICYmIHN0YXRpY19jYXN0PGNvbnN0
IEVsZW1lbnRJbXBsICo+KG5vZGUpLT5nZXRBdHRyaWJ1dGUoQVRUUl9DTEFTUykgPT0gaW50ZXJj
aGFuZ2VOZXdsaW5lQ2xhc3NTdHJpbmc7CiB9CiAKIGJvb2wgUmVwbGFjZW1lbnRGcmFnbWVudDo6
aXNJbnRlcmNoYW5nZUNvbnZlcnRlZFNwYWNlU3Bhbihjb25zdCBOb2RlSW1wbCAqbm9kZSkKQEAg
LTUwNywxOCArNDg0LDE5IEBAIHZvaWQgUmVwbGFjZW1lbnRGcmFnbWVudDo6cmVtb3ZlU3R5bGVO
b2QKICAgICAgICAgTm9kZUltcGwgKm5leHQgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCk7CiAg
ICAgICAgIC8vIFRoaXMgbGlzdCBvZiB0YWdzIGNoYW5nZSB0aGUgYXBwZWFyYW5jZSBvZiBjb250
ZW50CiAgICAgICAgIC8vIGluIHdheXMgd2UgY2FuIGFkZCBiYWNrIG9uIGxhdGVyIHdpdGggQ1NT
LCBpZiBuZWNlc3NhcnkuCi0gICAgICAgIGlmIChub2RlLT5pZCgpID09IElEX0IgfHwgCi0gICAg
ICAgICAgICBub2RlLT5pZCgpID09IElEX0JJRyB8fCAKLSAgICAgICAgICAgIG5vZGUtPmlkKCkg
PT0gSURfQ0VOVEVSIHx8IAotICAgICAgICAgICAgbm9kZS0+aWQoKSA9PSBJRF9GT05UIHx8IAot
ICAgICAgICAgICAgbm9kZS0+aWQoKSA9PSBJRF9JIHx8IAotICAgICAgICAgICAgbm9kZS0+aWQo
KSA9PSBJRF9TIHx8IAotICAgICAgICAgICAgbm9kZS0+aWQoKSA9PSBJRF9TTUFMTCB8fCAKLSAg
ICAgICAgICAgIG5vZGUtPmlkKCkgPT0gSURfU1RSSUtFIHx8IAotICAgICAgICAgICAgbm9kZS0+
aWQoKSA9PSBJRF9TVUIgfHwgCi0gICAgICAgICAgICBub2RlLT5pZCgpID09IElEX1NVUCB8fCAK
LSAgICAgICAgICAgIG5vZGUtPmlkKCkgPT0gSURfVFQgfHwgCi0gICAgICAgICAgICBub2RlLT5p
ZCgpID09IElEX1UgfHwgCisgICAgICAgIC8vICBGSVhNRTogVGhpcyBsaXN0IGlzIGluY29tcGxl
dGUKKyAgICAgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpiKCkpIHx8IAorICAg
ICAgICAgICAgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJpZygpKSB8fCAKKyAgICAgICAg
ICAgIG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpjZW50ZXIoKSkgfHwgCisgICAgICAgICAg
ICBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Zm9udCgpKSB8fCAKKyAgICAgICAgICAgIG5v
ZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppKCkpIHx8IAorICAgICAgICAgICAgbm9kZS0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OnMoKSkgfHwgCisgICAgICAgICAgICBub2RlLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6c21hbGwoKSkgfHwgCisgICAgICAgICAgICBub2RlLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6c3RyaWtlKCkpIHx8IAorICAgICAgICAgICAgbm9kZS0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OnN1YigpKSB8fCAKKyAgICAgICAgICAgIG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjpzdXAoKSkgfHwgCisgICAgICAgICAgICBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dHQo
KSkgfHwgCisgICAgICAgICAgICBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dSgpKSB8fCAK
ICAgICAgICAgICAgIGlzU3R5bGVTcGFuKG5vZGUpKSB7CiAgICAgICAgICAgICByZW1vdmVOb2Rl
UHJlc2VydmluZ0NoaWxkcmVuKG5vZGUpOwogICAgICAgICB9CkBAIC03NDQsNyArNzIyLDcgQEAg
dm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgaWYgKCFsaW5lUGxh
Y2Vob2xkZXIpIHsKICAgICAgICAgUG9zaXRpb24gZG93bnN0cmVhbSA9IHN0YXJ0UG9zLmRvd25z
dHJlYW0oKTsKICAgICAgICAgZG93bnN0cmVhbSA9IHBvc2l0aW9uT3V0c2lkZUNvbnRhaW5pbmdT
cGVjaWFsRWxlbWVudChkb3duc3RyZWFtKTsKLSAgICAgICAgaWYgKGRvd25zdHJlYW0ubm9kZSgp
LT5pZCgpID09IElEX0JSICYmIGRvd25zdHJlYW0ub2Zmc2V0KCkgPT0gMCAmJiAKKyAgICAgICAg
aWYgKGRvd25zdHJlYW0ubm9kZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YnIoKSkgJiYgZG93
bnN0cmVhbS5vZmZzZXQoKSA9PSAwICYmIAogICAgICAgICAgICAgbV9mcmFnbWVudC5oYXNJbnRl
cmNoYW5nZU5ld2xpbmVBdEVuZCgpICYmCiAgICAgICAgICAgICBpc1N0YXJ0T2ZMaW5lKFZpc2li
bGVQb3NpdGlvbihkb3duc3RyZWFtLCBWUF9ERUZBVUxUX0FGRklOSVRZKSkpCiAgICAgICAgICAg
ICBsaW5lUGxhY2Vob2xkZXIgPSBkb3duc3RyZWFtLm5vZGUoKTsKQEAgLTkwNiwxMiArODg0LDEy
IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkoKQogICAgICAgICB9CiAg
ICAgfSAKICAgICBlbHNlIHsKLSAgICAgICAgaWYgKG1fbGFzdE5vZGVJbnNlcnRlZCAmJiBtX2xh
c3ROb2RlSW5zZXJ0ZWQtPmlkKCkgPT0gSURfQlIgJiYgIWRvY3VtZW50KCktPmluU3RyaWN0TW9k
ZSgpKSB7CisgICAgICAgIGlmIChtX2xhc3ROb2RlSW5zZXJ0ZWQgJiYgbV9sYXN0Tm9kZUluc2Vy
dGVkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YnIoKSkgJiYgIWRvY3VtZW50KCktPmluU3RyaWN0
TW9kZSgpKSB7CiAgICAgICAgICAgICBkb2N1bWVudCgpLT51cGRhdGVMYXlvdXQoKTsKICAgICAg
ICAgICAgIFZpc2libGVQb3NpdGlvbiBwb3MoUG9zaXRpb24obV9sYXN0Tm9kZUluc2VydGVkLCAx
KSwgRE9XTlNUUkVBTSk7CiAgICAgICAgICAgICBpZiAoaXNFbmRPZkJsb2NrKHBvcykpIHsKICAg
ICAgICAgICAgICAgICBOb2RlSW1wbCAqbmV4dCA9IG1fbGFzdE5vZGVJbnNlcnRlZC0+dHJhdmVy
c2VOZXh0Tm9kZSgpOwotICAgICAgICAgICAgICAgIGJvb2wgaGFzVHJhaWxpbmdCUiA9IG5leHQg
JiYgbmV4dC0+aWQoKSA9PSBJRF9CUiAmJiBtX2xhc3ROb2RlSW5zZXJ0ZWQtPmVuY2xvc2luZ0Js
b2NrRmxvd0VsZW1lbnQoKSA9PSBuZXh0LT5lbmNsb3NpbmdCbG9ja0Zsb3dFbGVtZW50KCk7Cisg
ICAgICAgICAgICAgICAgYm9vbCBoYXNUcmFpbGluZ0JSID0gbmV4dCAmJiBuZXh0LT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6YnIoKSkgJiYgbV9sYXN0Tm9kZUluc2VydGVkLT5lbmNsb3NpbmdCbG9j
a0Zsb3dFbGVtZW50KCkgPT0gbmV4dC0+ZW5jbG9zaW5nQmxvY2tGbG93RWxlbWVudCgpOwogICAg
ICAgICAgICAgICAgIGlmICghaGFzVHJhaWxpbmdCUikgewogICAgICAgICAgICAgICAgICAgICAv
LyBJbnNlcnQgYW4gImV4dHJhIiBCUiBhdCB0aGUgZW5kIG9mIHRoZSBibG9jay4gCiAgICAgICAg
ICAgICAgICAgICAgIGluc2VydE5vZGVCZWZvcmUoY3JlYXRlQnJlYWtFbGVtZW50KGRvY3VtZW50
KCkpLCBtX2xhc3ROb2RlSW5zZXJ0ZWQpOwpAQCAtOTM4LDcgKzkxNiw3IEBAIHZvaWQgUmVwbGFj
ZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkoKQogICAgICAgICAgICAgICAgIGluc2VydE5vZGVB
ZnRlcihub2RlLCByZWZOb2RlKTsKICAgICAgICAgICAgICAgICByZWZOb2RlID0gbm9kZTsKICAg
ICAgICAgICAgICAgICAvLyBXZSB3YW50IHRvIG1vdmUgdGhlIGZpcnN0IEJSIHdlIHNlZSwgc28g
Y2hlY2sgZm9yIHRoYXQgaGVyZS4KLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+aWQoKSA9PSBJ
RF9CUikKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJy
KCkpKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBub2RlID0g
bmV4dDsKICAgICAgICAgICAgIH0KQEAgLTEwODYsNyArMTA2NCw3IEBAIHZvaWQgUmVwbGFjZVNl
bGVjdGlvbkNvbW1hbmQ6OnVwZGF0ZU5vZGUKICAgICAKICAgICAvLyB1cGRhdGUgbV9sYXN0Tm9k
ZUluc2VydGVkCiAgICAgTm9kZUltcGwgKm9sZCA9IG1fbGFzdE5vZGVJbnNlcnRlZDsKLSAgICBt
X2xhc3ROb2RlSW5zZXJ0ZWQgPSBub2RlLT5sYXN0RGVzY2VuZGVudCgpOworICAgIG1fbGFzdE5v
ZGVJbnNlcnRlZCA9IG5vZGUtPmxhc3REZXNjZW5kYW50KCk7CiAgICAgbV9sYXN0Tm9kZUluc2Vy
dGVkLT5yZWYoKTsKICAgICBpZiAob2xkKQogICAgICAgICBvbGQtPmRlcmVmKCk7CkluZGV4OiBr
aHRtbC9lZGl0aW5nL3NlbGVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L1dlYkNvcmUva2h0bWwvZWRpdGluZy9zZWxlY3Rpb24uY3BwLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjg5CmRpZmYgLXUgLXAgLXIxLjg5IGtodG1sL2VkaXRpbmcvc2VsZWN0aW9uLmNwcAotLS0g
a2h0bWwvZWRpdGluZy9zZWxlY3Rpb24uY3BwCTIzIEp1biAyMDA1IDE5OjQ3OjQ4IC0wMDAwCTEu
ODkKKysrIGtodG1sL2VkaXRpbmcvc2VsZWN0aW9uLmNwcAk4IEp1bCAyMDA1IDA1OjU3OjEzIC0w
MDAwCkBAIC0zMyw3ICszMyw2IEBACiAjaW5jbHVkZSAiZG9tL2RvbV9zdHJpbmcuaCIKICNpbmNs
dWRlICJraHRtbF9wYXJ0LmgiCiAjaW5jbHVkZSAia2h0bWx2aWV3LmgiCi0jaW5jbHVkZSAibWlz
Yy9odG1sdGFncy5oIgogI2luY2x1ZGUgInJlbmRlcmluZy9yZW5kZXJfb2JqZWN0LmgiCiAjaW5j
bHVkZSAicmVuZGVyaW5nL3JlbmRlcl9zdHlsZS5oIgogI2luY2x1ZGUgInJlbmRlcmluZy9yZW5k
ZXJfdGV4dC5oIgpAQCAtOTM4LDcgKzkzNyw3IEBAIHZvaWQgU2VsZWN0aW9uOjpkZWJ1Z1JlbmRl
cmVyKFJlbmRlck9iamUKIHsKICAgICBpZiAoci0+bm9kZSgpLT5pc0VsZW1lbnROb2RlKCkpIHsK
ICAgICAgICAgRWxlbWVudEltcGwgKmVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50SW1wbCAq
PihyLT5ub2RlKCkpOwotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzJXNcbiIsIHNlbGVjdGVk
ID8gIj09PiAiIDogIiAgICAiLCBlbGVtZW50LT50YWdOYW1lKCkuc3RyaW5nKCkubGF0aW4xKCkp
OworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzJXNcbiIsIHNlbGVjdGVkID8gIj09PiAiIDog
IiAgICAiLCBlbGVtZW50LT5sb2NhbE5hbWUoKS5zdHJpbmcoKS5sYXRpbjEoKSk7CiAgICAgfQog
ICAgIGVsc2UgaWYgKHItPmlzVGV4dCgpKSB7CiAgICAgICAgIFJlbmRlclRleHQgKnRleHRSZW5k
ZXJlciA9IHN0YXRpY19jYXN0PFJlbmRlclRleHQgKj4ocik7CkluZGV4OiBraHRtbC9lZGl0aW5n
L3Zpc2libGVfcG9zaXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJD
b3JlL2todG1sL2VkaXRpbmcvdmlzaWJsZV9wb3NpdGlvbi5jcHAsdgpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuNTEKZGlmZiAtdSAtcCAtcjEuNTEga2h0bWwvZWRpdGluZy92aXNpYmxlX3Bvc2l0aW9u
LmNwcAotLS0ga2h0bWwvZWRpdGluZy92aXNpYmxlX3Bvc2l0aW9uLmNwcAkyMyBKdW4gMjAwNSAx
OTo0Nzo0OSAtMDAwMAkxLjUxCisrKyBraHRtbC9lZGl0aW5nL3Zpc2libGVfcG9zaXRpb24uY3Bw
CTggSnVsIDIwMDUgMDU6NTc6MTQgLTAwMDAKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlICJ2
aXNpYmxlX3Bvc2l0aW9uLmgiCiAjaW5jbHVkZSAidmlzaWJsZV91bml0cy5oIgogCi0jaW5jbHVk
ZSAibWlzYy9odG1sdGFncy5oIgorI2luY2x1ZGUgImh0bWxuYW1lcy5oIgogI2luY2x1ZGUgInJl
bmRlcmluZy9yZW5kZXJfbGluZS5oIgogI2luY2x1ZGUgInJlbmRlcmluZy9yZW5kZXJfb2JqZWN0
LmgiCiAjaW5jbHVkZSAicmVuZGVyaW5nL3JlbmRlcl90ZXh0LmgiCkBAIC01MCw2ICs1MCw3IEBA
IHVzaW5nIERPTTo6UG9zaXRpb247CiB1c2luZyBET006OlJhbmdlOwogdXNpbmcgRE9NOjpSYW5n
ZUltcGw7CiB1c2luZyBET006OlRleHRJbXBsOwordXNpbmcgRE9NOjpIVE1MTmFtZXM7CiAKIG5h
bWVzcGFjZSBraHRtbCB7CiAKQEAgLTc0LDcgKzc1LDcgQEAgdm9pZCBWaXNpYmxlUG9zaXRpb246
OmluaXQoY29uc3QgUG9zaXRpbwogICAgIG1fYWZmaW5pdHkgPSBhZmZpbml0eTsKIAogICAgIC8v
IEZvciA8YnI+IDAsIGl0J3MgaW1wb3J0YW50IG5vdCB0byBtb3ZlIHBhc3QgdGhlIDxicj4uCi0g
ICAgaWYgKHBvcy5ub2RlKCkgJiYgcG9zLm5vZGUoKS0+aWQoKSA9PSBJRF9CUiAmJiBwb3Mub2Zm
c2V0KCkgPT0gMCkKKyAgICBpZiAocG9zLm5vZGUoKSAmJiBwb3Mubm9kZSgpLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6YnIoKSkgJiYgcG9zLm9mZnNldCgpID09IDApCiAgICAgICAgIGluaXRVcHN0
cmVhbShwb3MpOwogICAgIGVsc2UKICAgICAgICAgaW5pdERvd25zdHJlYW0ocG9zKTsKQEAgLTI3
NCw3ICsyNzUsNyBAQCBib29sIFZpc2libGVQb3NpdGlvbjo6aXNDYW5kaWRhdGUoY29uc3QgCiAg
ICAgfQogICAgIAogICAgIGlmIChyZW5kZXJlci0+aXNCbG9ja0Zsb3coKSAmJiAoIXJlbmRlcmVy
LT5maXJzdENoaWxkKCkgfHwgIXBvcy5ub2RlKCktPmZpcnN0Q2hpbGQoKSkgJiYgCi0gICAgICAg
KHJlbmRlcmVyLT5oZWlnaHQoKSB8fCBwb3Mubm9kZSgpLT5pZCgpID09IElEX0JPRFkpKSB7Cisg
ICAgICAgKHJlbmRlcmVyLT5oZWlnaHQoKSB8fCBwb3Mubm9kZSgpLT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6Ym9keSgpKSkpIHsKICAgICAgICAgLy8gcmV0dXJuIHRydWUgZm9yIG9mZnNldCAwIGlu
dG8gcmVuZGVyZWQgYmxvY2tzIHRoYXQgYXJlIGVtcHR5IG9mIHJlbmRlcmVkIGtpZHMsIGJ1dCBo
YXZlIGEgaGVpZ2h0CiAgICAgICAgIHJldHVybiBwb3Mub2Zmc2V0KCkgPT0gMDsKICAgICB9CkBA
IC0zNTksNyArMzYwLDcgQEAgbG9uZyBWaXNpYmxlUG9zaXRpb246Om1heE9mZnNldChjb25zdCBO
bwogCiBib29sIFZpc2libGVQb3NpdGlvbjo6aXNBdG9taWNOb2RlKGNvbnN0IE5vZGVJbXBsICpu
b2RlKQogewotICAgIHJldHVybiBub2RlICYmICghbm9kZS0+aGFzQ2hpbGROb2RlcygpIHx8IChu
b2RlLT5pZCgpID09IElEX09CSkVDVCAmJiBub2RlLT5yZW5kZXJlcigpICYmIG5vZGUtPnJlbmRl
cmVyKCktPmlzUmVwbGFjZWQoKSkpOworICAgIHJldHVybiBub2RlICYmICghbm9kZS0+aGFzQ2hp
bGROb2RlcygpIHx8IChub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b2JqZWN0KCkpICYmIG5v
ZGUtPnJlbmRlcmVyKCkgJiYgbm9kZS0+cmVuZGVyZXIoKS0+aXNSZXBsYWNlZCgpKSk7CiB9CiAK
IFFDaGFyIFZpc2libGVQb3NpdGlvbjo6Y2hhcmFjdGVyKCkgY29uc3QKSW5kZXg6IGtodG1sL2Vk
aXRpbmcvdmlzaWJsZV90ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2Vi
Q29yZS9raHRtbC9lZGl0aW5nL3Zpc2libGVfdGV4dC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuMjcKZGlmZiAtdSAtcCAtcjEuMjcga2h0bWwvZWRpdGluZy92aXNpYmxlX3RleHQuY3BwCi0t
LSBraHRtbC9lZGl0aW5nL3Zpc2libGVfdGV4dC5jcHAJMTMgTWF5IDIwMDUgMTY6NDg6NTEgLTAw
MDAJMS4yNworKysga2h0bWwvZWRpdGluZy92aXNpYmxlX3RleHQuY3BwCTggSnVsIDIwMDUgMDU6
NTc6MTUgLTAwMDAKQEAgLTI1LDcgKzI1LDcgQEAKIAogI2luY2x1ZGUgInZpc2libGVfdGV4dC5o
IgogCi0jaW5jbHVkZSAibWlzYy9odG1sdGFncy5oIgorI2luY2x1ZGUgImh0bWxuYW1lcy5oIgog
I2luY2x1ZGUgInJlbmRlcmluZy9yZW5kZXJfdGV4dC5oIgogI2luY2x1ZGUgInhtbC9kb21fbm9k
ZWltcGwuaCIKICNpbmNsdWRlICJ4bWwvZG9tX3Bvc2l0aW9uLmgiCkBAIC0zNyw2ICszNyw3IEBA
IHVzaW5nIERPTTo6Tm9kZTsKIHVzaW5nIERPTTo6Tm9kZUltcGw7CiB1c2luZyBET006Om9mZnNl
dEluQ2hhcmFjdGVyczsKIHVzaW5nIERPTTo6UmFuZ2VJbXBsOwordXNpbmcgRE9NOjpIVE1MTmFt
ZXM7CiAKIC8vIEZJWE1FOiBUaGVzZSBjbGFzc2VzIHNob3VsZCBwcm9iYWJseSB1c2UgdGhlIHJl
bmRlciB0cmVlIGFuZCBub3QgdGhlIERPTSB0cmVlLCBzaW5jZSBlbGVtZW50cyBjb3VsZAogLy8g
YmUgaGlkZGVuIHVzaW5nIENTUywgb3IgYWRkaXRpb25hbCBnZW5lcmF0ZWQgY29udGVudCBjb3Vs
ZCBiZSBhZGRlZC4gIEZvciBub3csIHdlIGp1c3QgbWFrZSBzdXJlCkBAIC0zMzYsNDEgKzMzNywy
NSBAQCBib29sIFRleHRJdGVyYXRvcjo6aGFuZGxlUmVwbGFjZWRFbGVtZW50CiAKIGJvb2wgVGV4
dEl0ZXJhdG9yOjpoYW5kbGVOb25UZXh0Tm9kZSgpCiB7Ci0gICAgc3dpdGNoIChtX25vZGUtPmlk
KCkpIHsKLSAgICAgICAgY2FzZSBJRF9CUjogewotICAgICAgICAgICAgZW1pdENoYXJhY3Rlcign
XG4nLCBtX25vZGUtPnBhcmVudE5vZGUoKSwgbV9ub2RlLCAwLCAxKTsKLSAgICAgICAgICAgIGJy
ZWFrOworICAgIGlmIChtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpicigpKSkgeworICAg
ICAgICBlbWl0Q2hhcmFjdGVyKCdcbicsIG1fbm9kZS0+cGFyZW50Tm9kZSgpLCBtX25vZGUsIDAs
IDEpOworICAgIH0gZWxzZSBpZiAobV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGQoKSkg
fHwgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGgoKSkpIHsKKyAgICAgICAgaWYgKG1f
bGFzdENoYXJhY3RlciAhPSAnXG4nICYmIG1fbGFzdFRleHROb2RlKSB7CisgICAgICAgICAgICBl
bWl0Q2hhcmFjdGVyKCdcdCcsIG1fbGFzdFRleHROb2RlLT5wYXJlbnROb2RlKCksIG1fbGFzdFRl
eHROb2RlLCAwLCAxKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAobV9ub2RlLT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6YmxvY2txdW90ZSgpKSB8fCBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjpkZCgpKSB8fAorICAgICAgICAgICAgICAgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6ZGl2KCkpIHx8CisgICAgICAgICAgICAgICBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjpkbCgpKSB8fCBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpkdCgpKSB8fCAKKyAgICAg
ICAgICAgICAgIG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmgxKCkpIHx8IG1fbm9kZS0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OmgyKCkpIHx8CisgICAgICAgICAgICAgICBtX25vZGUtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjpoMygpKSB8fCBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjpoNCgpKSB8fAorICAgICAgICAgICAgICAgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
aDUoKSkgfHwgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDYoKSkgfHwKKyAgICAgICAg
ICAgICAgIG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmhyKCkpIHx8IG1fbm9kZS0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OmxpKCkpIHx8CisgICAgICAgICAgICAgICBtX25vZGUtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjpvbCgpKSB8fCBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpw
KCkpIHx8CisgICAgICAgICAgICAgICBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpwcmUo
KSkgfHwgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dHIoKSkgfHwKKyAgICAgICAgICAg
ICAgIG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnVsKCkpKSB7CisgICAgICAgIGlmICht
X2xhc3RDaGFyYWN0ZXIgIT0gJ1xuJyAmJiBtX2xhc3RUZXh0Tm9kZSkgeworICAgICAgICAgICAg
ZW1pdENoYXJhY3RlcignXG4nLCBtX2xhc3RUZXh0Tm9kZS0+cGFyZW50Tm9kZSgpLCBtX2xhc3RU
ZXh0Tm9kZSwgMCwgMSk7CiAgICAgICAgIH0KLQotICAgICAgICBjYXNlIElEX1REOgotICAgICAg
ICBjYXNlIElEX1RIOgotICAgICAgICAgICAgaWYgKG1fbGFzdENoYXJhY3RlciAhPSAnXG4nICYm
IG1fbGFzdFRleHROb2RlKSB7Ci0gICAgICAgICAgICAgICAgZW1pdENoYXJhY3RlcignXHQnLCBt
X2xhc3RUZXh0Tm9kZS0+cGFyZW50Tm9kZSgpLCBtX2xhc3RUZXh0Tm9kZSwgMCwgMSk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIElEX0JMT0NLUVVP
VEU6Ci0gICAgICAgIGNhc2UgSURfREQ6Ci0gICAgICAgIGNhc2UgSURfRElWOgotICAgICAgICBj
YXNlIElEX0RMOgotICAgICAgICBjYXNlIElEX0RUOgotICAgICAgICBjYXNlIElEX0gxOgotICAg
ICAgICBjYXNlIElEX0gyOgotICAgICAgICBjYXNlIElEX0gzOgotICAgICAgICBjYXNlIElEX0g0
OgotICAgICAgICBjYXNlIElEX0g1OgotICAgICAgICBjYXNlIElEX0g2OgotICAgICAgICBjYXNl
IElEX0hSOgotICAgICAgICBjYXNlIElEX0xJOgotICAgICAgICBjYXNlIElEX09MOgotICAgICAg
ICBjYXNlIElEX1A6Ci0gICAgICAgIGNhc2UgSURfUFJFOgotICAgICAgICBjYXNlIElEX1RSOgot
ICAgICAgICBjYXNlIElEX1VMOgotICAgICAgICAgICAgaWYgKG1fbGFzdENoYXJhY3RlciAhPSAn
XG4nICYmIG1fbGFzdFRleHROb2RlKSB7Ci0gICAgICAgICAgICAgICAgZW1pdENoYXJhY3Rlcign
XG4nLCBtX2xhc3RUZXh0Tm9kZS0+cGFyZW50Tm9kZSgpLCBtX2xhc3RUZXh0Tm9kZSwgMCwgMSk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKICAgICB9CiAKICAgICByZXR1cm4g
dHJ1ZTsKQEAgLTM4MSw0OSArMzY2LDM3IEBAIHZvaWQgVGV4dEl0ZXJhdG9yOjpleGl0Tm9kZSgp
CiAgICAgYm9vbCBlbmRMaW5lID0gZmFsc2U7CiAgICAgYm9vbCBhZGROZXdsaW5lID0gZmFsc2U7
CiAKLSAgICBzd2l0Y2ggKG1fbm9kZS0+aWQoKSkgewotICAgICAgICBjYXNlIElEX0JMT0NLUVVP
VEU6Ci0gICAgICAgIGNhc2UgSURfREQ6Ci0gICAgICAgIGNhc2UgSURfRElWOgotICAgICAgICBj
YXNlIElEX0RMOgotICAgICAgICBjYXNlIElEX0RUOgotICAgICAgICBjYXNlIElEX0hSOgotICAg
ICAgICBjYXNlIElEX0xJOgotICAgICAgICBjYXNlIElEX09MOgotICAgICAgICBjYXNlIElEX1BS
RToKLSAgICAgICAgY2FzZSBJRF9UUjoKLSAgICAgICAgY2FzZSBJRF9VTDoKLSAgICAgICAgICAg
IGVuZExpbmUgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBJRF9I
MToKLSAgICAgICAgY2FzZSBJRF9IMjoKLSAgICAgICAgY2FzZSBJRF9IMzoKLSAgICAgICAgY2Fz
ZSBJRF9INDoKLSAgICAgICAgY2FzZSBJRF9INToKLSAgICAgICAgY2FzZSBJRF9INjoKLSAgICAg
ICAgY2FzZSBJRF9QOiB7Ci0gICAgICAgICAgICBlbmRMaW5lID0gdHJ1ZTsKLQotICAgICAgICAg
ICAgLy8gSW4gY2VydGFpbiBjYXNlcywgZW1pdCBhIG5ldyBuZXdsaW5lIGNoYXJhY3RlciBmb3Ig
dGhpcyBub2RlCi0gICAgICAgICAgICAvLyByZWdhcmRsZXNzIG9mIHdoZXRoZXIgd2UgZW1pdCBh
bm90aGVyIG9uZS4KLSAgICAgICAgICAgIC8vIEZJWE1FOiBTb21lIGRheSB3ZSBjb3VsZCBkbyB0
aGlzIGZvciBvdGhlciB0YWdzLgotICAgICAgICAgICAgLy8gSG93ZXZlciwgZG9pbmcgaXQganVz
dCBmb3IgdGhlIHRhZ3MgYWJvdmUgbWFrZXMgaXQgbW9yZSBsaWtlbHkKLSAgICAgICAgICAgIC8v
IHdlJ2xsIGVuZCB1cCBnZXR0aW5nIHRoZSByaWdodCByZXN1bHQgd2l0aG91dCBtYXJnaW4gY29s
bGFwc2luZy4KLSAgICAgICAgICAgIC8vIEZvciBleGFtcGxlOiA8ZGl2PjxwPnRleHQ8L3A+PC9k
aXY+IHdpbGwgd29yayByaWdodCBldmVuIGlmIGJvdGgKLSAgICAgICAgICAgIC8vIHRoZSA8ZGl2
PiBhbmQgdGhlIDxwPiBoYXZlIGJvdHRvbSBtYXJnaW5zLgotICAgICAgICAgICAgUmVuZGVyT2Jq
ZWN0ICpyZW5kZXJlciA9IG1fbm9kZS0+cmVuZGVyZXIoKTsKLSAgICAgICAgICAgIGlmIChyZW5k
ZXJlcikgewotICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlICpzdHlsZSA9IHJlbmRlcmVyLT5z
dHlsZSgpOwotICAgICAgICAgICAgICAgIGlmIChzdHlsZSkgewotICAgICAgICAgICAgICAgICAg
ICBpbnQgYm90dG9tTWFyZ2luID0gcmVuZGVyZXItPmNvbGxhcHNlZE1hcmdpbkJvdHRvbSgpOwot
ICAgICAgICAgICAgICAgICAgICBpbnQgZm9udFNpemUgPSBzdHlsZS0+aHRtbEZvbnQoKS5nZXRG
b250RGVmKCkuY29tcHV0ZWRQaXhlbFNpemUoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGJv
dHRvbU1hcmdpbiAqIDIgPj0gZm9udFNpemUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFk
ZE5ld2xpbmUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICB9CisgICAgaWYgKG1fbm9kZS0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJsb2NrcXVvdGUoKSkgfHwgbV9ub2RlLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6ZGQoKSkgfHwKKyAgICAgICAgICAgICAgIG1fbm9kZS0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OmRpdigpKSB8fAorICAgICAgICAgICAgICAgbV9ub2RlLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6ZGwoKSkgfHwgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZHQoKSkgfHwg
CisgICAgICAgICAgICAgICBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpocigpKSB8fCBt
X25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpsaSgpKSB8fAorICAgICAgICAgICAgICAgbV9u
b2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b2woKSkgfHwKKyAgICAgICAgICAgICAgIG1fbm9k
ZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnByZSgpKSB8fCBtX25vZGUtPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjp0cigpKSB8fAorICAgICAgICAgICAgICAgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6dWwoKSkpCisgICAgICAgIGVuZExpbmUgPSB0cnVlOworICAgIGVsc2UgaWYgKG1fbm9k
ZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmgxKCkpIHx8IG1fbm9kZS0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OmgyKCkpIHx8CisgICAgICAgICAgICAgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6aDMoKSkgfHwgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDQoKSkgfHwKKyAgICAg
ICAgICAgICBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoNSgpKSB8fCBtX25vZGUtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjpoNigpKSB8fAorICAgICAgICAgICAgIG1fbm9kZS0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OnAoKSkpIHsKKyAgICAgICAgZW5kTGluZSA9IHRydWU7CisKKyAgICAg
ICAgLy8gSW4gY2VydGFpbiBjYXNlcywgZW1pdCBhIG5ldyBuZXdsaW5lIGNoYXJhY3RlciBmb3Ig
dGhpcyBub2RlCisgICAgICAgIC8vIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB3ZSBlbWl0IGFub3Ro
ZXIgb25lLgorICAgICAgICAvLyBGSVhNRTogU29tZSBkYXkgd2UgY291bGQgZG8gdGhpcyBmb3Ig
b3RoZXIgdGFncy4KKyAgICAgICAgLy8gSG93ZXZlciwgZG9pbmcgaXQganVzdCBmb3IgdGhlIHRh
Z3MgYWJvdmUgbWFrZXMgaXQgbW9yZSBsaWtlbHkKKyAgICAgICAgLy8gd2UnbGwgZW5kIHVwIGdl
dHRpbmcgdGhlIHJpZ2h0IHJlc3VsdCB3aXRob3V0IG1hcmdpbiBjb2xsYXBzaW5nLgorICAgICAg
ICAvLyBGb3IgZXhhbXBsZTogPGRpdj48cD50ZXh0PC9wPjwvZGl2PiB3aWxsIHdvcmsgcmlnaHQg
ZXZlbiBpZiBib3RoCisgICAgICAgIC8vIHRoZSA8ZGl2PiBhbmQgdGhlIDxwPiBoYXZlIGJvdHRv
bSBtYXJnaW5zLgorICAgICAgICBSZW5kZXJPYmplY3QgKnJlbmRlcmVyID0gbV9ub2RlLT5yZW5k
ZXJlcigpOworICAgICAgICBpZiAocmVuZGVyZXIpIHsKKyAgICAgICAgICAgIFJlbmRlclN0eWxl
ICpzdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpOworICAgICAgICAgICAgaWYgKHN0eWxlKSB7Cisg
ICAgICAgICAgICAgICAgaW50IGJvdHRvbU1hcmdpbiA9IHJlbmRlcmVyLT5jb2xsYXBzZWRNYXJn
aW5Cb3R0b20oKTsKKyAgICAgICAgICAgICAgICBpbnQgZm9udFNpemUgPSBzdHlsZS0+aHRtbEZv
bnQoKS5nZXRGb250RGVmKCkuY29tcHV0ZWRQaXhlbFNpemUoKTsKKyAgICAgICAgICAgICAgICBp
ZiAoYm90dG9tTWFyZ2luICogMiA+PSBmb250U2l6ZSkgeworICAgICAgICAgICAgICAgICAgICBh
ZGROZXdsaW5lID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KIApAQCAtNjYwLDM0ICs2MzMsMjIgQEAg
Ym9vbCBTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yOjpoYQogCiBib29sIFNpbXBsaWZp
ZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3I6OmhhbmRsZU5vblRleHROb2RlKCkKIHsKLSAgICBzd2l0
Y2ggKG1fbm9kZS0+aWQoKSkgewotICAgICAgICBjYXNlIElEX0JSOgotICAgICAgICAgICAgZW1p
dE5ld2xpbmVGb3JCUk9yVGV4dCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
SURfVEQ6Ci0gICAgICAgIGNhc2UgSURfVEg6Ci0gICAgICAgIGNhc2UgSURfQkxPQ0tRVU9URToK
LSAgICAgICAgY2FzZSBJRF9ERDoKLSAgICAgICAgY2FzZSBJRF9ESVY6Ci0gICAgICAgIGNhc2Ug
SURfREw6Ci0gICAgICAgIGNhc2UgSURfRFQ6Ci0gICAgICAgIGNhc2UgSURfSDE6Ci0gICAgICAg
IGNhc2UgSURfSDI6Ci0gICAgICAgIGNhc2UgSURfSDM6Ci0gICAgICAgIGNhc2UgSURfSDQ6Ci0g
ICAgICAgIGNhc2UgSURfSDU6Ci0gICAgICAgIGNhc2UgSURfSDY6Ci0gICAgICAgIGNhc2UgSURf
SFI6Ci0gICAgICAgIGNhc2UgSURfUDoKLSAgICAgICAgY2FzZSBJRF9QUkU6Ci0gICAgICAgIGNh
c2UgSURfVFI6Ci0gICAgICAgIGNhc2UgSURfT0w6Ci0gICAgICAgIGNhc2UgSURfVUw6Ci0gICAg
ICAgIGNhc2UgSURfTEk6Ci0gICAgICAgICAgICAvLyBFbWl0IGEgc3BhY2UgdG8gImJyZWFrIHVw
IiBjb250ZW50LiBBbnkgd29yZCBicmVhawotICAgICAgICAgICAgLy8gY2hhcmFjdGVyIHdpbGwg
ZG8uCi0gICAgICAgICAgICBlbWl0Q2hhcmFjdGVyKCcgJywgbV9ub2RlLCAwLCAwKTsKLSAgICAg
ICAgICAgIGJyZWFrOworICAgIGlmIChtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpicigp
KSkKKyAgICAgICAgZW1pdE5ld2xpbmVGb3JCUk9yVGV4dCgpOworICAgIGVsc2UgaWYgKG1fbm9k
ZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRkICgpKSB8fCBtX25vZGUtPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjp0aCgpKSB8fAorICAgICAgICAgICAgIG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OmJsb2NrcXVvdGUoKSkgfHwgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZGQoKSkg
fHwKKyAgICAgICAgICAgICBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpkaXYoKSkgfHwK
KyAgICAgICAgICAgICBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpkbCgpKSB8fCBtX25v
ZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpkdCgpKSB8fCAKKyAgICAgICAgICAgICBtX25vZGUt
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoMSgpKSB8fCBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjpoMigpKSB8fAorICAgICAgICAgICAgIG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
OmgzKCkpIHx8IG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omg0KCkpIHx8CisgICAgICAg
ICAgICAgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDUoKSkgfHwgbV9ub2RlLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6aDYoKSkgfHwKKyAgICAgICAgICAgICBtX25vZGUtPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjpocigpKSB8fCBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpsaSgp
KSB8fAorICAgICAgICAgICAgIG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9sKCkpIHx8
IG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnAoKSkgfHwKKyAgICAgICAgICAgICBtX25v
ZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpwcmUoKSkgfHwgbV9ub2RlLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6dHIoKSkgfHwKKyAgICAgICAgICAgICBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjp1bCgpKSkgeworICAgICAgICAvLyBFbWl0IGEgc3BhY2UgdG8gImJyZWFrIHVwIiBjb250
ZW50LiBBbnkgd29yZCBicmVhaworICAgICAgICAvLyBjaGFyYWN0ZXIgd2lsbCBkby4KKyAgICAg
ICAgZW1pdENoYXJhY3RlcignICcsIG1fbm9kZSwgMCwgMCk7CiAgICAgfQogCiAgICAgcmV0dXJu
IHRydWU7CkluZGV4OiBraHRtbC9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VkaXRpbmcvdmlzaWJsZV91bml0cy5j
cHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzQKZGlmZiAtdSAtcCAtcjEuMzQga2h0bWwvZWRp
dGluZy92aXNpYmxlX3VuaXRzLmNwcAotLS0ga2h0bWwvZWRpdGluZy92aXNpYmxlX3VuaXRzLmNw
cAkyNiBNYXkgMjAwNSAyMDozMDoxMiAtMDAwMAkxLjM0CisrKyBraHRtbC9lZGl0aW5nL3Zpc2li
bGVfdW5pdHMuY3BwCTggSnVsIDIwMDUgMDU6NTc6MTUgLTAwMDAKQEAgLTI3LDcgKzI3LDcgQEAK
IAogI2luY2x1ZGUgPHFzdHJpbmcuaD4KIAotI2luY2x1ZGUgImh0bWx0YWdzLmgiCisjaW5jbHVk
ZSAiaHRtbG5hbWVzLmgiCiAjaW5jbHVkZSAibWlzYy9oZWxwZXIuaCIKICNpbmNsdWRlICJyZW5k
ZXJpbmcvcmVuZGVyX3RleHQuaCIKICNpbmNsdWRlICJyZW5kZXJpbmcvcmVuZGVyX2Jsb2NrLmgi
CkBAIC00MSw2ICs0MSw3IEBAIHVzaW5nIERPTTo6RWxlbWVudEltcGw7CiB1c2luZyBET006Ok5v
ZGVJbXBsOwogdXNpbmcgRE9NOjpQb3NpdGlvbjsKIHVzaW5nIERPTTo6UmFuZ2VJbXBsOwordXNp
bmcgRE9NOjpIVE1MTmFtZXM7CiAKIG5hbWVzcGFjZSBraHRtbCB7CiAKQEAgLTMzMiw3ICszMzMs
NyBAQCBWaXNpYmxlUG9zaXRpb24gZW5kT2ZMaW5lKGNvbnN0IFZpc2libGVQCiAgICAgICAgIHJl
dHVybiBWaXNpYmxlUG9zaXRpb24oKTsKIAogICAgIGxvbmcgZW5kT2Zmc2V0ID0gMTsKLSAgICBp
ZiAoZW5kTm9kZS0+aWQoKSA9PSBJRF9CUikgeworICAgIGlmIChlbmROb2RlLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6YnIoKSkpIHsKICAgICAgICAgZW5kT2Zmc2V0ID0gMDsKICAgICB9IGVsc2Ug
aWYgKGVuZEJveC0+aXNJbmxpbmVUZXh0Qm94KCkpIHsKICAgICAgICAgSW5saW5lVGV4dEJveCAq
ZW5kVGV4dEJveCA9IHN0YXRpY19jYXN0PElubGluZVRleHRCb3ggKj4oZW5kQm94KTsKSW5kZXg6
IGtodG1sL2h0bWwvZHRkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiBraHRtbC9odG1sL2R0ZC5j
cHAKZGlmZiAtTiBraHRtbC9odG1sL2R0ZC5jcHAKLS0tIGtodG1sL2h0bWwvZHRkLmNwcAkxMiBB
cHIgMjAwNSAyMjo0OTo0MSAtMDAwMAkxLjM4CisrKyAvZGV2L251bGwJMSBKYW4gMTk3MCAwMDow
MDowMCAtMDAwMApAQCAtMSw5ODkgKzAsMCBAQAotLyoqCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBv
ZiB0aGUgRE9NIGltcGxlbWVudGF0aW9uIGZvciBLREUuCi0gKgotICogKEMpIDE5OTkgTGFycyBL
bm9sbCAoa25vbGxAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwMyBBcHBsZSBDb21wdXRl
ciwgSW5jLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBs
ZSBQbGFjZSAtIFN1aXRlIDMzMCwKLSAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgotICoK
LSAqLwotCi0jaW5jbHVkZSAiaHRtbC9kdGQuaCIKLSNpbmNsdWRlICJtaXNjL2h0bWxoYXNoZXMu
aCIKLQotdXNpbmcgbmFtZXNwYWNlIERPTTsKLQotI2luY2x1ZGUgPGtkZWJ1Zy5oPgotCi0vLyBw
cmlvcml0eSBvZiB0YWdzLiBDbG9zaW5nIHRhZ3Mgb2YgaGlnaGVyIHByaW9yaXR5IGNsb3NlIHRh
Z3Mgb2YgbG93ZXIKLS8vIHByaW9yaXR5LgotLy8gVXBkYXRlIHRoaXMgbGlzdCwgd2hlbmV2ZXIg
eW91IGNoYW5nZSBodG1sdGFncy4qCi0vLwotLy8gMCBlbGVtZW50cyB3aXRoIGZvcmJpZGRlbiBj
bG9zZSB0YWcgYW5kIHRleHQuIFRoZXkgZG9uJ3QgZ2V0IHB1c2hlZAotLy8gICB0byB0aGUgc3Rh
Y2suCi0vLyAxIGlubGluZSBlbGVtZW50cwotLy8gMiBmb3JtIGVsZW1lbnRzCi0vLyAzIHJlZ3Vs
YXIgYmxvY2sgbGV2ZWwgZWxlbWVudHMKLS8vIDQgbGlzdHMgKE9MIFVMIERJUiBNRU5VKQotLy8g
NSBURCBUSCBTRUxFQ1QKLS8vIDYgVFIKLS8vIDcgdGJvZHkgdGhlYWQgdGZvb3QgY2FwdGlvbiAg
b2JqZWN0Ci0vLyA4IHRhYmxlCi0vLyA5IGJvZHkgZnJhbWVzZXQKLS8vIDEwIGh0bWwKLWNvbnN0
IHVuc2lnbmVkIHNob3J0IERPTTo6dGFnUHJpb3JpdHlBcnJheVtdID0gewotICAgIDAsIC8vIDAK
LSAgICAxLCAvLyBJRF9BID09IDEKLSAgICAxLCAvLyBJRF9BQkJSCi0gICAgMSwgLy8gSURfQUNS
T05ZTQotICAgIDMsIC8vIElEX0FERFJFU1MKLSAgICAxLCAvLyBJRF9BUFBMRVQKLSAgICAwLCAv
LyBJRF9BUkVBCi0gICAgMSwgLy8gSURfQgotICAgIDAsIC8vIElEX0JBU0UKLSAgICAwLCAvLyBJ
RF9CQVNFRk9OVAotICAgIDEsIC8vIElEX0JETwotICAgIDEsIC8vIElEX0JJRwotICAgIDUsIC8v
IElEX0JMT0NLUVVPVEUKLSAgIDEwLCAvLyBJRF9CT0RZCi0gICAgMCwgLy8gSURfQlIKLSAgICAx
LCAvLyBJRF9CVVRUT04KLSAgICAwLCAvLyBJRF9DQU5WQVMKLSAgICA1LCAvLyBJRF9DQVBUSU9O
Ci0gICAgNSwgLy8gSURfQ0VOVEVSCi0gICAgMSwgLy8gSURfQ0lURQotICAgIDEsIC8vIElEX0NP
REUKLSAgICAwLCAvLyBJRF9DT0wKLSAgICAxLCAvLyBJRF9DT0xHUk9VUAotICAgIDMsIC8vIElE
X0RECi0gICAgMSwgLy8gSURfREVMCi0gICAgMSwgLy8gSURfREZOCi0gICAgNSwgLy8gSURfRElS
Ci0gICAgNSwgLy8gSURfRElWCi0gICAgNSwgLy8gSURfREwKLSAgICAzLCAvLyBJRF9EVAotICAg
IDEsIC8vIElEX0VNCi0gICAgMCwgLy8gSURfRU1CRUQKLSAgICAzLCAvLyBJRF9GSUVMRFNFVAot
ICAgIDEsIC8vIElEX0ZPTlQKLSAgICAzLCAvLyBJRF9GT1JNCi0gICAgMCwgLy8gSURfRlJBTUUK
LSAgIDEwLC8vIElEX0ZSQU1FU0VUCi0gICAgNSwgLy8gSURfSDEKLSAgICA1LCAvLyBJRF9IMgot
ICAgIDUsIC8vIElEX0gzCi0gICAgNSwgLy8gSURfSDQKLSAgICA1LCAvLyBJRF9INQotICAgIDUs
IC8vIElEX0g2Ci0gICAxMCwvLyBJRF9IRUFECi0gICAgMCwgLy8gSURfSFIKLSAgIDExLC8vIElE
X0hUTUwKLSAgICAxLCAvLyBJRF9JCi0gICAgMSwgLy8gSURfSUZSQU1FCi0gICAgMCwgLy8gSURf
SU1HCi0gICAgMCwgLy8gSURfSU5QVVQKLSAgICAxLCAvLyBJRF9JTlMKLSAgICAwLCAvLyBJRF9J
U0lOREVYCi0gICAgMSwgLy8gSURfS0JECi0gICAgMCwgLy8gSURfS0VZR0VOCi0gICAgNSwgLy8g
SURfTEFCRUwKLSAgICAxLCAvLyBJRF9MQVlFUgotICAgIDEsIC8vIElEX0xFR0VORAotICAgIDMs
IC8vIElEX0xJCi0gICAgMCwgLy8gSURfTElOSwotICAgIDEsIC8vIElEX01BUAotICAgIDMsIC8v
IElEX01BUlFVRUUKLSAgICA1LCAvLyBJRF9NRU5VCi0gICAgMCwgLy8gSURfTUVUQQotICAgIDUs
IC8vIElEX05PQlIKLSAgIDEwLC8vIElEX05PRU1CRUQKLSAgIDEwLC8vIElEX05PRlJBTUVTCi0g
ICAgMywgLy8gSURfTk9TQ1JJUFQKLSAgICAxLCAvLyBJRF9OT0xBWUVSCi0gICAgNywgLy8gSURf
T0JKRUNUCi0gICAgNSwgLy8gSURfT0wKLSAgICAxLCAvLyBJRF9PUFRHUk9VUAotICAgIDIsIC8v
IElEX09QVElPTgotICAgIDMsIC8vIElEX1AKLSAgICAwLCAvLyBJRF9QQVJBTQotICAgIDUsIC8v
IElEX1BMQUlOVEVYVAotICAgIDUsIC8vIElEX1BSRQotICAgIDEsIC8vIElEX1EKLSAgICAxLCAv
LyBJRF9TCi0gICAgMSwgLy8gSURfU0FNUAotICAgIDEsIC8vIElEX1NDUklQVAotICAgIDYsIC8v
IElEX1NFTEVDVAotICAgIDEsIC8vIElEX1NNQUxMCi0gICAgMSwgLy8gSURfU1BBTgotICAgIDEs
IC8vIElEX1NUUklLRQotICAgIDEsIC8vIElEX1NUUk9ORwotICAgIDEsIC8vIElEX1NUWUxFCi0g
ICAgMSwgLy8gSURfU1VCCi0gICAgMSwgLy8gSURfU1VQCi0gICAgOSwvLyBJRF9UQUJMRQotICAg
IDgsIC8vIElEX1RCT0RZCi0gICAgNiwgLy8gSURfVEQKLSAgICAxLCAvLyBJRF9URVhUQVJFQQot
ICAgIDgsIC8vIElEX1RGT09UCi0gICAgNiwgLy8gSURfVEgKLSAgICA4LCAvLyBJRF9USEVBRAot
ICAgIDEsIC8vIElEX1RJVExFCi0gICAgNywgLy8gSURfVFIKLSAgICAxLCAvLyBJRF9UVAotICAg
IDEsIC8vIElEX1UKLSAgICA1LCAvLyBJRF9VTAotICAgIDEsIC8vIElEX1ZBUgotICAgIDEsIC8v
IElEX1dCUgotICAgIDUsIC8vIElEX1hNUAotICAgIDAsIC8vIElEX1RFWFQKLX07Ci0KLWNvbnN0
IHRhZ1N0YXR1cyBET006OmVuZFRhZ0FycmF5W10gPSB7Ci0gICAgUkVRVUlSRUQsICAvLyAwCi0g
ICAgUkVRVUlSRUQsICAvLyBJRF9BID09IDEKLSAgICBSRVFVSVJFRCwgIC8vIElEX0FCQlIKLSAg
ICBSRVFVSVJFRCwgIC8vIElEX0FDUk9OWU0KLSAgICBSRVFVSVJFRCwgIC8vIElEX0FERFJFU1MK
LSAgICBSRVFVSVJFRCwgIC8vIElEX0FQUExFVAotICAgIEZPUkJJRERFTiwgLy8gSURfQVJFQQot
ICAgIFJFUVVJUkVELCAgLy8gSURfQgotICAgIEZPUkJJRERFTiwgLy8gSURfQkFTRQotICAgIEZP
UkJJRERFTiwgLy8gSURfQkFTRUZPTlQKLSAgICBSRVFVSVJFRCwgIC8vIElEX0JETwotICAgIFJF
UVVJUkVELCAgLy8gSURfQklHCi0gICAgUkVRVUlSRUQsICAvLyBJRF9CTE9DS1FVT1RFCi0gICAg
UkVRVUlSRUQsICAvLyBJRF9CT0RZCi0gICAgRk9SQklEREVOLCAvLyBJRF9CUgotICAgIFJFUVVJ
UkVELCAgLy8gSURfQlVUVE9OCi0gICAgRk9SQklEREVOLCAvLyBJRF9DQU5WQVMKLSAgICBSRVFV
SVJFRCwgIC8vIElEX0NBUFRJT04KLSAgICBSRVFVSVJFRCwgIC8vIElEX0NFTlRFUgotICAgIFJF
UVVJUkVELCAgLy8gSURfQ0lURQotICAgIFJFUVVJUkVELCAgLy8gSURfQ09ERQotICAgIEZPUkJJ
RERFTiwgLy8gSURfQ09MCi0gICAgT1BUSU9OQUwsICAvLyBJRF9DT0xHUk9VUAotICAgIE9QVElP
TkFMLCAgLy8gSURfREQKLSAgICBSRVFVSVJFRCwgIC8vIElEX0RFTAotICAgIFJFUVVJUkVELCAg
Ly8gSURfREZOCi0gICAgUkVRVUlSRUQsICAvLyBJRF9ESVIKLSAgICBSRVFVSVJFRCwgIC8vIElE
X0RJVgotICAgIFJFUVVJUkVELCAgLy8gSURfREwKLSAgICBPUFRJT05BTCwgIC8vIElEX0RUCi0g
ICAgUkVRVUlSRUQsICAvLyBJRF9FTQotICAgIFJFUVVJUkVELCAgLy8gSURfRU1CRUQKLSAgICBS
RVFVSVJFRCwgIC8vIElEX0ZJRUxEU0VUCi0gICAgUkVRVUlSRUQsICAvLyBJRF9GT05UCi0gICAg
UkVRVUlSRUQsICAvLyBJRF9GT1JNCi0gICAgRk9SQklEREVOLCAvLyBJRF9GUkFNRQotICAgIFJF
UVVJUkVELCAgLy8gSURfRlJBTUVTRVQKLSAgICBSRVFVSVJFRCwgIC8vIElEX0gxCi0gICAgUkVR
VUlSRUQsICAvLyBJRF9IMgotICAgIFJFUVVJUkVELCAgLy8gSURfSDMKLSAgICBSRVFVSVJFRCwg
IC8vIElEX0g0Ci0gICAgUkVRVUlSRUQsICAvLyBJRF9INQotICAgIFJFUVVJUkVELCAgLy8gSURf
SDYKLSAgICBPUFRJT05BTCwgIC8vIElEX0hFQUQKLSAgICBGT1JCSURERU4sIC8vIElEX0hSCi0g
ICAgUkVRVUlSRUQsICAvLyBJRF9IVE1MCi0gICAgUkVRVUlSRUQsICAvLyBJRF9JCi0gICAgUkVR
VUlSRUQsICAvLyBJRF9JRlJBTUUKLSAgICBGT1JCSURERU4sIC8vIElEX0lNRwotICAgIEZPUkJJ
RERFTiwgLy8gSURfSU5QVVQKLSAgICBSRVFVSVJFRCwgIC8vIElEX0lOUwotICAgIEZPUkJJRERF
TiwgLy8gSURfSVNJTkRFWAotICAgIFJFUVVJUkVELCAgLy8gSURfS0JECi0gICAgUkVRVUlSRUQs
ICAvLyBJRF9LRVlHRU4KLSAgICBSRVFVSVJFRCwgIC8vIElEX0xBQkVMCi0gICAgUkVRVUlSRUQs
ICAvLyBJRF9MQVlFUgotICAgIFJFUVVJUkVELCAgLy8gSURfTEVHRU5ECi0gICAgT1BUSU9OQUws
ICAvLyBJRF9MSQotICAgIEZPUkJJRERFTiwgLy8gSURfTElOSwotICAgIFJFUVVJUkVELCAgLy8g
SURfTUFQCi0gICAgUkVRVUlSRUQsICAvLyBJRF9NQVJRVUVFCi0gICAgUkVRVUlSRUQsICAvLyBJ
RF9NRU5VCi0gICAgRk9SQklEREVOLCAvLyBJRF9NRVRBCi0gICAgUkVRVUlSRUQsICAvLyBJRF9O
T0JSCi0gICAgUkVRVUlSRUQsICAvLyBJRF9OT0VNQkVECi0gICAgUkVRVUlSRUQsICAvLyBJRF9O
T0ZSQU1FUwotICAgIFJFUVVJUkVELCAgLy8gSURfTk9TQ1JJUFQKLSAgICBSRVFVSVJFRCwgIC8v
IElEX05PTEFZRVIKLSAgICBSRVFVSVJFRCwgIC8vIElEX09CSkVDVAotICAgIFJFUVVJUkVELCAg
Ly8gSURfT0wKLSAgICBSRVFVSVJFRCwgIC8vIElEX09QVEdST1VQCi0gICAgT1BUSU9OQUwsICAv
LyBJRF9PUFRJT04KLSAgICBPUFRJT05BTCwgIC8vIElEX1AKLSAgICBGT1JCSURERU4sIC8vIElE
X1BBUkFNCi0gICAgUkVRVUlSRUQsICAvLyBJRF9QTEFJTlRFWFQKLSAgICBSRVFVSVJFRCwgIC8v
IElEX1BSRQotICAgIFJFUVVJUkVELCAgLy8gSURfUQotICAgIFJFUVVJUkVELCAgLy8gSURfUwot
ICAgIFJFUVVJUkVELCAgLy8gSURfU0FNUAotICAgIFJFUVVJUkVELCAgLy8gSURfU0NSSVBUCi0g
ICAgUkVRVUlSRUQsICAvLyBJRF9TRUxFQ1QKLSAgICBSRVFVSVJFRCwgIC8vIElEX1NNQUxMCi0g
ICAgUkVRVUlSRUQsICAvLyBJRF9TUEFOCi0gICAgUkVRVUlSRUQsICAvLyBJRF9TVFJJS0UKLSAg
ICBSRVFVSVJFRCwgIC8vIElEX1NUUk9ORwotICAgIFJFUVVJUkVELCAgLy8gSURfU1RZTEUKLSAg
ICBSRVFVSVJFRCwgIC8vIElEX1NVQgotICAgIFJFUVVJUkVELCAgLy8gSURfU1VQCi0gICAgUkVR
VUlSRUQsICAvLyBJRF9UQUJMRQotICAgIE9QVElPTkFMLCAgLy8gSURfVEJPRFkKLSAgICBPUFRJ
T05BTCwgIC8vIElEX1RECi0gICAgUkVRVUlSRUQsICAvLyBJRF9URVhUQVJFQQotICAgIE9QVElP
TkFMLCAgLy8gSURfVEZPT1QKLSAgICBPUFRJT05BTCwgIC8vIElEX1RICi0gICAgT1BUSU9OQUws
ICAvLyBJRF9USEVBRAotICAgIFJFUVVJUkVELCAgLy8gSURfVElUTEUKLSAgICBPUFRJT05BTCwg
IC8vIElEX1RSCi0gICAgUkVRVUlSRUQsICAvLyBJRF9UVAotICAgIFJFUVVJUkVELCAgLy8gSURf
VQotICAgIFJFUVVJUkVELCAgLy8gSURfVUwKLSAgICBSRVFVSVJFRCwgIC8vIElEX1ZBUgotICAg
IFJFUVVJUkVELCAgLy8gSURfV0JSCi0gICAgUkVRVUlSRUQsICAvLyBJRF9YTVAKLSAgICBSRVFV
SVJFRCAgIC8vIElEX1RFWFQKLX07Ci0KLQotc3RhdGljIGNvbnN0IHVzaG9ydCB0YWdfbGlzdF8w
W10gPSB7Ci0gICAgSURfVEVYVCwKLSAgICBJRF9UVCwKLSAgICBJRF9JLAotICAgIElEX0IsCi0g
ICAgSURfVSwKLSAgICBJRF9TLAotICAgIElEX1NUUklLRSwKLSAgICBJRF9CSUcsCi0gICAgSURf
U01BTEwsCi0gICAgSURfRU0sCi0gICAgSURfU1RST05HLAotICAgIElEX0RGTiwKLSAgICBJRF9D
T0RFLAotICAgIElEX1NBTVAsCi0gICAgSURfS0JELAotICAgIElEX1ZBUiwKLSAgICBJRF9DSVRF
LAotICAgIElEX0FCQlIsCi0gICAgSURfQUNST05ZTSwKLSAgICBJRF9BLAotICAgIElEX0NBTlZB
UywKLSAgICBJRF9JTUcsCi0gICAgSURfQVBQTEVULAotICAgIElEX09CSkVDVCwKLSAgICBJRF9F
TUJFRCwKLSAgICBJRF9GT05ULAotICAgIElEX0JBU0VGT05ULAotICAgIElEX0JSLAotICAgIElE
X1NDUklQVCwKLSAgICBJRF9NQVAsCi0gICAgSURfUSwKLSAgICBJRF9TVUIsCi0gICAgSURfU1VQ
LAotICAgIElEX1NQQU4sCi0gICAgSURfQkRPLAotICAgIElEX0lGUkFNRSwKLSAgICBJRF9JTlBV
VCwKLSAgICBJRF9TRUxFQ1QsCi0gICAgSURfVEVYVEFSRUEsCi0gICAgSURfTEFCRUwsCi0gICAg
SURfQlVUVE9OLAotICAgIElEX0lOUywKLSAgICBJRF9ERUwsCi0gICAgSURfQ09NTUVOVCwKLSAg
ICBJRF9OT0JSLAotICAgIElEX1dCUiwKLSAgICAwCi19OwotCi1zdGF0aWMgY29uc3QgdXNob3J0
IHRhZ19saXN0XzFbXSA9IHsKLSAgICBJRF9URVhULAotICAgIElEX1AsCi0gICAgSURfSDEsCi0g
ICAgSURfSDIsCi0gICAgSURfSDMsCi0gICAgSURfSDQsCi0gICAgSURfSDUsCi0gICAgSURfSDYs
Ci0gICAgSURfVUwsCi0gICAgSURfT0wsCi0gICAgSURfRElSLAotICAgIElEX01FTlUsCi0gICAg
SURfUFJFLAotICAgIElEX1BMQUlOVEVYVCwKLSAgICBJRF9ETCwKLSAgICBJRF9ESVYsCi0gICAg
SURfTEFZRVIsCi0gICAgSURfQ0VOVEVSLAotICAgIElEX05PU0NSSVBULAotICAgIElEX05PRlJB
TUVTLAotICAgIElEX0JMT0NLUVVPVEUsCi0gICAgSURfRk9STSwKLSAgICBJRF9JU0lOREVYLAot
ICAgIElEX0hSLAotICAgIElEX1RBQkxFLAotICAgIElEX0ZJRUxEU0VULAotICAgIElEX0FERFJF
U1MsCi0gICAgSURfVFQsCi0gICAgSURfSSwKLSAgICBJRF9CLAotICAgIElEX1UsCi0gICAgSURf
UywKLSAgICBJRF9TVFJJS0UsCi0gICAgSURfQklHLAotICAgIElEX1NNQUxMLAotICAgIElEX0VN
LAotICAgIElEX1NUUk9ORywKLSAgICBJRF9ERk4sCi0gICAgSURfQ09ERSwKLSAgICBJRF9TQU1Q
LAotICAgIElEX0tCRCwKLSAgICBJRF9WQVIsCi0gICAgSURfQ0lURSwKLSAgICBJRF9BQkJSLAot
ICAgIElEX0FDUk9OWU0sCi0gICAgSURfQSwKLSAgICBJRF9DQU5WQVMsCi0gICAgSURfSU1HLAot
ICAgIElEX0FQUExFVCwKLSAgICBJRF9PQkpFQ1QsCi0gICAgSURfRU1CRUQsCi0gICAgSURfRk9O
VCwKLSAgICBJRF9CQVNFRk9OVCwKLSAgICBJRF9CUiwKLSAgICBJRF9TQ1JJUFQsCi0gICAgSURf
TUFQLAotICAgIElEX1EsCi0gICAgSURfU1VCLAotICAgIElEX1NVUCwKLSAgICBJRF9TUEFOLAot
ICAgIElEX0JETywKLSAgICBJRF9JRlJBTUUsCi0gICAgSURfSU5QVVQsCi0gICAgSURfS0VZR0VO
LAotICAgIElEX1NFTEVDVCwKLSAgICBJRF9URVhUQVJFQSwKLSAgICBJRF9MQUJFTCwKLSAgICBJ
RF9CVVRUT04sCi0gICAgSURfQ09NTUVOVCwKLSAgICBJRF9MSSwKLSAgICBJRF9EVCwKLSAgICBJ
RF9ERCwKLSAgICBJRF9YTVAsCi0gICAgSURfSU5TLAotICAgIElEX0RFTCwKLSAgICBJRF9OT0JS
LAotICAgIElEX1dCUiwKLSAgICBJRF9NQVJRVUVFLAotICAgIDAKLX07Ci0KLXN0YXRpYyBjb25z
dCB1c2hvcnQgdGFnX2xpc3RfMltdID0gewotICAgIElEX0NPTU1FTlQsCi0gICAgMAotfTsKLQot
c3RhdGljIGNvbnN0IHVzaG9ydCB0YWdfbGlzdF8zW10gPSB7Ci0gICAgSURfVEVYVCwKLSAgICBJ
RF9QLAotICAgIElEX0gxLAotICAgIElEX0gyLAotICAgIElEX0gzLAotICAgIElEX0g0LAotICAg
IElEX0g1LAotICAgIElEX0g2LAotICAgIElEX1VMLAotICAgIElEX09MLAotICAgIElEX0RJUiwK
LSAgICBJRF9NRU5VLAotICAgIElEX1BSRSwKLSAgICBJRF9QTEFJTlRFWFQsCi0gICAgSURfREws
Ci0gICAgSURfRElWLAotICAgIElEX0xBWUVSLAotICAgIElEX0NFTlRFUiwKLSAgICBJRF9OT1ND
UklQVCwKLSAgICBJRF9OT0ZSQU1FUywKLSAgICBJRF9CTE9DS1FVT1RFLAotICAgIElEX0ZPUk0s
Ci0gICAgSURfSVNJTkRFWCwKLSAgICBJRF9IUiwKLSAgICBJRF9UQUJMRSwKLSAgICBJRF9GSUVM
RFNFVCwKLSAgICBJRF9BRERSRVNTLAotICAgIElEX0NPTU1FTlQsCi0gICAgSURfTEksCi0gICAg
SURfWE1QLAotICAgIElEX01BUlFVRUUsCi0gICAgMAotfTsKLQotc3RhdGljIGNvbnN0IHVzaG9y
dCB0YWdfbGlzdF80W10gPSB7Ci0gICAgSURfVEVYVCwKLSAgICBJRF9QQVJBTSwKLSAgICBJRF9Q
LAotICAgIElEX0gxLAotICAgIElEX0gyLAotICAgIElEX0gzLAotICAgIElEX0g0LAotICAgIElE
X0g1LAotICAgIElEX0g2LAotICAgIElEX1VMLAotICAgIElEX09MLAotICAgIElEX0RJUiwKLSAg
ICBJRF9NRU5VLAotICAgIElEX1BSRSwKLSAgICBJRF9QTEFJTlRFWFQsCi0gICAgSURfREwsCi0g
ICAgSURfRElWLAotICAgIElEX0xBWUVSLAotICAgIElEX0NFTlRFUiwKLSAgICBJRF9OT1NDUklQ
VCwKLSAgICBJRF9OT0ZSQU1FUywKLSAgICBJRF9CTE9DS1FVT1RFLAotICAgIElEX0ZPUk0sCi0g
ICAgSURfSVNJTkRFWCwKLSAgICBJRF9IUiwKLSAgICBJRF9UQUJMRSwKLSAgICBJRF9GSUVMRFNF
VCwKLSAgICBJRF9BRERSRVNTLAotICAgIElEX1RFWFQsCi0gICAgSURfVFQsCi0gICAgSURfSSwK
LSAgICBJRF9CLAotICAgIElEX1UsCi0gICAgSURfUywKLSAgICBJRF9TVFJJS0UsCi0gICAgSURf
QklHLAotICAgIElEX1NNQUxMLAotICAgIElEX0VNLAotICAgIElEX1NUUk9ORywKLSAgICBJRF9E
Rk4sCi0gICAgSURfQ09ERSwKLSAgICBJRF9TQU1QLAotICAgIElEX0tCRCwKLSAgICBJRF9WQVIs
Ci0gICAgSURfQ0lURSwKLSAgICBJRF9BQkJSLAotICAgIElEX0FDUk9OWU0sCi0gICAgSURfQSwK
LSAgICBJRF9DQU5WQVMsCi0gICAgSURfSU1HLAotICAgIElEX0FQUExFVCwKLSAgICBJRF9PQkpF
Q1QsCi0gICAgSURfRU1CRUQsCi0gICAgSURfRk9OVCwKLSAgICBJRF9CQVNFRk9OVCwKLSAgICBJ
RF9CUiwKLSAgICBJRF9TQ1JJUFQsCi0gICAgSURfTUFQLAotICAgIElEX1EsCi0gICAgSURfU1VC
LAotICAgIElEX1NVUCwKLSAgICBJRF9TUEFOLAotICAgIElEX0JETywKLSAgICBJRF9JRlJBTUUs
Ci0gICAgSURfSU5QVVQsCi0gICAgSURfU0VMRUNULAotICAgIElEX1RFWFRBUkVBLAotICAgIElE
X0xBQkVMLAotICAgIElEX0JVVFRPTiwKLSAgICBJRF9DT01NRU5ULAotICAgIElEX0xJLAotICAg
IElEX1hNUCwKLSAgICBJRF9NQVJRVUVFLAotICAgIDAKLX07Ci0KLXN0YXRpYyBjb25zdCB1c2hv
cnQgdGFnX2xpc3RfN1tdID0gewotICAgIElEX1RFWFQsCi0gICAgSURfT1BUR1JPVVAsCi0gICAg
SURfT1BUSU9OLAotICAgIElEX0NPTU1FTlQsCi0gICAgSURfU0NSSVBULAotICAgIDAKLX07Ci0K
LXN0YXRpYyBjb25zdCB1c2hvcnQgdGFnX2xpc3RfOVtdID0gewotICAgIElEX1RILAotICAgIElE
X1RELAotICAgIElEX0NPTU1FTlQsCi0gICAgMAotfTsKLQotc3RhdGljIGNvbnN0IHVzaG9ydCB0
YWdfbGlzdF8xMFtdID0gewotICAgIElEX0ZSQU1FU0VULAotICAgIElEX0ZSQU1FLAotICAgIElE
X0NPTU1FTlQsCi0gICAgMAotfTsKLQotc3RhdGljIGNvbnN0IHVzaG9ydCB0YWdfbGlzdF8xMVtd
ID0gewotICAgIElEX1RFWFQsCi0gICAgSURfU0NSSVBULAotICAgIElEX1NUWUxFLAotICAgIElE
X01FVEEsCi0gICAgSURfTElOSywKLSAgICBJRF9DT01NRU5ULAotICAgIDAKLX07Ci0KLWJvb2wg
Y2hlY2tfYXJyYXkodXNob3J0IGNoaWxkLCBjb25zdCB1c2hvcnQgKnRhZ0xpc3QpCi17Ci0gICAg
aW50IGkgPSAwOwotICAgIHdoaWxlKHRhZ0xpc3RbaV0gIT0gMCkKLSAgICB7Ci0gICAgICAgIGlm
KHRhZ0xpc3RbaV0gPT0gY2hpbGQpIHJldHVybiB0cnVlOwotICAgIGkrKzsKLSAgICB9Ci0gICAg
cmV0dXJuIGZhbHNlOwotfQotCi0KLWJvb2wgRE9NOjpjaGVja0NoaWxkKHVzaG9ydCB0YWdJRCwg
dXNob3J0IGNoaWxkSUQsIGJvb2wgc3RyaWN0KQotewotICAgIC8va2REZWJ1ZyggNjAzMCApIDw8
ICJjaGVja0NoaWxkOiAiIDw8IHRhZ0lEIDw8ICIvIiA8PCBjaGlsZElEIDw8IGVuZGw7Ci0KLSAg
ICAvLyAjIyMgYWxsb3cgY29tbWVudHMgaW5zaWRlIEFOWSBub2RlIHRoYXQgY2FuIGNvbnRhaW4g
Y2hpbGRyZW4KLQotICAgIC8vIFRyZWF0IGN1c3RvbSBlbGVtZW50cyB0aGUgc2FtZSBhcyA8c3Bh
bj4uCi0gICAgaWYgKHRhZ0lEID4gSURfTEFTVF9UQUcpCi0gICAgICAgIHRhZ0lEID0gSURfU1BB
TjsKLSAgICBpZiAoY2hpbGRJRCA+IElEX0xBU1RfVEFHKQotICAgICAgICBjaGlsZElEID0gSURf
U1BBTjsKLQotICAgIHN3aXRjaCh0YWdJRCkKLSAgICB7Ci0gICAgY2FzZSBJRF9UVDoKLSAgICBj
YXNlIElEX0k6Ci0gICAgY2FzZSBJRF9COgotICAgIGNhc2UgSURfVToKLSAgICBjYXNlIElEX1M6
Ci0gICAgY2FzZSBJRF9TVFJJS0U6Ci0gICAgY2FzZSBJRF9CSUc6Ci0gICAgY2FzZSBJRF9TTUFM
TDoKLSAgICBjYXNlIElEX0VNOgotICAgIGNhc2UgSURfU1RST05HOgotICAgIGNhc2UgSURfREZO
OgotICAgIGNhc2UgSURfQ09ERToKLSAgICBjYXNlIElEX1NBTVA6Ci0gICAgY2FzZSBJRF9LQkQ6
Ci0gICAgY2FzZSBJRF9WQVI6Ci0gICAgY2FzZSBJRF9DSVRFOgotICAgIGNhc2UgSURfQUJCUjoK
LSAgICBjYXNlIElEX0FDUk9OWU06Ci0gICAgY2FzZSBJRF9TVUI6Ci0gICAgY2FzZSBJRF9TVVA6
Ci0gICAgY2FzZSBJRF9CRE86Ci0gICAgY2FzZSBJRF9ROgotICAgIGNhc2UgSURfTEVHRU5EOgot
ICAgIGNhc2UgSURfRk9OVDoKLSAgICBjYXNlIElEX0E6Ci0gICAgY2FzZSBJRF9OT0JSOgotICAg
IGNhc2UgSURfV0JSOgotICAgICAgICByZXR1cm4gY2hlY2tfYXJyYXkoY2hpbGRJRCwgdGFnX2xp
c3RfMSk7Ci0gICAgY2FzZSBJRF9QOgotICAgICAgICAvLyBQOiAoIF8wIHwgVEFCTEUgKSAqCi0g
ICAgICAgIHJldHVybiBjaGVja19hcnJheShjaGlsZElELCB0YWdfbGlzdF8wKSB8fCAoIXN0cmlj
dCAmJiBjaGlsZElEID09IElEX1RBQkxFKTsKLSAgICBjYXNlIElEX0gxOgotICAgIGNhc2UgSURf
SDI6Ci0gICAgY2FzZSBJRF9IMzoKLSAgICBjYXNlIElEX0g0OgotICAgIGNhc2UgSURfSDU6Ci0g
ICAgY2FzZSBJRF9INjoKLSAgICAgICAgcmV0dXJuIGNoZWNrX2FycmF5KGNoaWxkSUQsIHRhZ19s
aXN0XzEpICYmIChjaGlsZElEIDwgSURfSDEgfHwgY2hpbGRJRCA+IElEX0g2KTsKLSAgICBjYXNl
IElEX0JBU0VGT05UOgotICAgIGNhc2UgSURfQlI6Ci0gICAgY2FzZSBJRF9BUkVBOgotICAgIGNh
c2UgSURfTElOSzoKLSAgICBjYXNlIElEX0NBTlZBUzoKLSAgICBjYXNlIElEX0lNRzoKLSAgICBj
YXNlIElEX1BBUkFNOgotICAgIGNhc2UgSURfSFI6Ci0gICAgY2FzZSBJRF9JTlBVVDoKLSAgICBj
YXNlIElEX0NPTDoKLSAgICBjYXNlIElEX0ZSQU1FOgotICAgIGNhc2UgSURfSVNJTkRFWDoKLSAg
ICBjYXNlIElEX0JBU0U6Ci0gICAgY2FzZSBJRF9NRVRBOgotICAgIGNhc2UgSURfQ09NTUVOVDoK
LSAgICAgICAgLy8gQkFTRUZPTlQ6IEVNUFRZCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBj
YXNlIElEX0JPRFk6Ci0gICAgICAgIC8vIEJPRFk6IF8xICogKyBfMgotICAgICAgICByZXR1cm4g
Y2hlY2tfYXJyYXkoY2hpbGRJRCwgdGFnX2xpc3RfMSkgfHwgY2hlY2tfYXJyYXkoY2hpbGRJRCwg
dGFnX2xpc3RfMik7Ci0gICAgY2FzZSBJRF9BRERSRVNTOgotICAgICAgICAvLyBBRERSRVNTOiAo
IF8wIHwgUCApICoKLSAgICAgICAgcmV0dXJuIGNoZWNrX2FycmF5KGNoaWxkSUQsIHRhZ19saXN0
XzApIHx8IGNoaWxkSUQgPT0gSURfUDsKLSAgICBjYXNlIElEX0xJOgotICAgIGNhc2UgSURfRFQ6
Ci0gICAgY2FzZSBJRF9ESVY6Ci0gICAgY2FzZSBJRF9TUEFOOgotICAgIGNhc2UgSURfTEFZRVI6
Ci0gICAgY2FzZSBJRF9DRU5URVI6Ci0gICAgY2FzZSBJRF9CTE9DS1FVT1RFOgotICAgIGNhc2Ug
SURfSU5TOgotICAgIGNhc2UgSURfREVMOgotICAgIGNhc2UgSURfREQ6Ci0gICAgY2FzZSBJRF9U
SDoKLSAgICBjYXNlIElEX1REOgotICAgIGNhc2UgSURfSUZSQU1FOgotICAgIGNhc2UgSURfTk9G
UkFNRVM6Ci0gICAgY2FzZSBJRF9OT1NDUklQVDoKLSAgICBjYXNlIElEX0NBUFRJT046Ci0gICAg
Y2FzZSBJRF9NQVJRVUVFOgotICAgIGNhc2UgSURfVUw6Ci0gICAgY2FzZSBJRF9PTDoKLSAgICBj
YXNlIElEX0RJUjoKLSAgICBjYXNlIElEX01FTlU6Ci0gICAgICAgIC8vIERJVjogXzEgKgotICAg
ICAgICByZXR1cm4gY2hlY2tfYXJyYXkoY2hpbGRJRCwgdGFnX2xpc3RfMSk7Ci0gICAgY2FzZSBJ
RF9NQVA6Ci0JLy8gV2UgYWNjZXB0IFNDUklQVCBpbiBjbGllbnQtc2lkZSBpbWFnZSBtYXBzIGFz
IGFuIGV4dGVuc2lvbiB0byB0aGUgRFRELgotICAgICAgICAvLyBNQVA6ICggXzMgKyB8IEFSRUEg
KyB8IFNDUklQVCArICkKLSAgICAgICAgcmV0dXJuIGNoZWNrX2FycmF5KGNoaWxkSUQsIHRhZ19s
aXN0XzMpIHx8Ci0JICAgIGNoaWxkSUQgPT0gSURfQVJFQSB8fAotCSAgICBjaGlsZElEID09IElE
X1NDUklQVDsKLSAgICBjYXNlIElEX09CSkVDVDoKLSAgICBjYXNlIElEX0VNQkVEOgotICAgIGNh
c2UgSURfQVBQTEVUOgotICAgICAgICAvLyBPQkpFQ1Q6IF80ICoKLSAgICAgICAgcmV0dXJuIGNo
ZWNrX2FycmF5KGNoaWxkSUQsIHRhZ19saXN0XzQpOwotICAgIGNhc2UgSURfUFJFOgotICAgIGNh
c2UgSURfWE1QOgotICAgIGNhc2UgSURfUExBSU5URVhUOgotICAgICAgICAvLyBQUkU6IF8wICog
LSBfNQotICAgICAgICByZXR1cm4gY2hlY2tfYXJyYXkoY2hpbGRJRCwgdGFnX2xpc3RfMSk7Ci0g
ICAgY2FzZSBJRF9ETDoKLSAgICAgICAgLy8gREw6IF82ICsKLSAgICAgICAgcmV0dXJuIGNoZWNr
X2FycmF5KGNoaWxkSUQsIHRhZ19saXN0XzEpOwotICAgIGNhc2UgSURfRk9STToKLSAgICAgICAg
Ly8gRk9STTogXzEgKiAtIEZPUk0KLSAgICAgICAgcmV0dXJuIGNoZWNrX2FycmF5KGNoaWxkSUQs
IHRhZ19saXN0XzEpOwotICAgIGNhc2UgSURfTEFCRUw6Ci0gICAgICAgIC8vIExBQkVMOiBfMSAq
IC0gTEFCRUwKLSAgICAgICAgcmV0dXJuIGNoZWNrX2FycmF5KGNoaWxkSUQsIHRhZ19saXN0XzEp
OwotICAgICAgICAvLyBLRVlHRU4gZG9lcyBub3QgcmVhbGx5IGFsbG93IGFueSBjaGlsZHMKLSAg
ICAgICAgLy8gZnJvbSBvdXRzaWRlLCBqdXN0IG5lZWQgdGhpcyB0byBiZSBhYmxlCi0gICAgICAg
IC8vIHRvIGFkZCB0aGUga2V5bGVuZ3RocyBvdXJzZWxmCi0gICAgICAgIC8vIFllcywgY29uc2lk
ZXIgaXQgYSBoYWNrIChEaXJrKQotICAgIGNhc2UgSURfS0VZR0VOOgotICAgIGNhc2UgSURfU0VM
RUNUOgotICAgICAgICAvLyBTRUxFQ1Q6IF83ICsKLSAgICAgICAgcmV0dXJuIGNoZWNrX2FycmF5
KGNoaWxkSUQsIHRhZ19saXN0XzcpOwotICAgIGNhc2UgSURfT1BUR1JPVVA6Ci0gICAgICAgIC8v
IE9QVEdST1VQOiBPUFRJT04gKwotICAgICAgICBpZihjaGlsZElEID09IElEX09QVElPTikgcmV0
dXJuIHRydWU7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBjYXNlIElEX09QVElPTjoKLSAg
ICBjYXNlIElEX1RFWFRBUkVBOgotICAgIGNhc2UgSURfVElUTEU6Ci0gICAgY2FzZSBJRF9TVFlM
RToKLSAgICBjYXNlIElEX1NDUklQVDoKLSAgICAgICAgLy8gT1BUSU9OOiBURVhUCi0gICAgICAg
IGlmKGNoaWxkSUQgPT0gSURfVEVYVCkgcmV0dXJuIHRydWU7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBjYXNlIElEX0ZJRUxEU0VUOgotICAgICAgICAvLyBGSUVMRFNFVDogKCBURVhUICwg
TEVHRU5EICwgXzEgKiApCi0gICAgICAgIGlmKGNoaWxkSUQgPT0gSURfVEVYVCkgcmV0dXJuIHRy
dWU7Ci0gICAgICAgIGlmKGNoaWxkSUQgPT0gSURfTEVHRU5EKSByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgcmV0dXJuIGNoZWNrX2FycmF5KGNoaWxkSUQsIHRhZ19saXN0XzEpOwotICAgIGNhc2UgSURf
QlVUVE9OOgotICAgICAgICAvLyBCVVRUT046IF8xICogLSBfOAotICAgICAgICByZXR1cm4gY2hl
Y2tfYXJyYXkoY2hpbGRJRCwgdGFnX2xpc3RfMSk7Ci0gICAgY2FzZSBJRF9UQUJMRToKLSAgICAg
ICAgLy8gVEFCTEU6ICggQ0FQVElPTiA/ICwgKCBDT0wgKiB8IENPTEdST1VQICogKSAsIFRIRUFE
ID8gLCBURk9PVCA/ICwgVEJPRFkgKyApCi0gICAgICAgIHN3aXRjaChjaGlsZElEKQotICAgICAg
ICB7Ci0gICAgICAgIGNhc2UgSURfQ0FQVElPTjoKLSAgICAgICAgY2FzZSBJRF9DT0w6Ci0gICAg
ICAgIGNhc2UgSURfQ09MR1JPVVA6Ci0gICAgICAgIGNhc2UgSURfVEhFQUQ6Ci0gICAgICAgIGNh
c2UgSURfVEZPT1Q6Ci0gICAgICAgIGNhc2UgSURfVEJPRFk6Ci0gICAgICAgIGNhc2UgSURfVEVY
VDoKLSAgICAgICAgY2FzZSBJRF9GT1JNOgotICAgICAgICBjYXNlIElEX0NPTU1FTlQ6Ci0gICAg
ICAgIGNhc2UgSURfU0NSSVBUOgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICBjYXNlIElE
X1RIRUFEOgotICAgIGNhc2UgSURfVEZPT1Q6Ci0gICAgY2FzZSBJRF9UQk9EWToKLSAgICAgICAg
Ly8gVEhFQUQ6IFRSICsKLSAgICAgICAgaWYoY2hpbGRJRCA9PSBJRF9GT1JNIHx8IGNoaWxkSUQg
PT0gSURfVFIgfHwgY2hpbGRJRCA9PSBJRF9DT01NRU5UIHx8Ci0gICAgICAgICAgIGNoaWxkSUQg
PT0gSURfU0NSSVBUKSAKLSAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBjYXNlIElEX0NPTEdST1VQOgotICAgICAgICAvLyBDT0xHUk9VUDogQ09MICoK
LSAgICAgICAgaWYoY2hpbGRJRCA9PSBJRF9DT0wgfHwgY2hpbGRJRCA9PSBJRF9DT01NRU5UKSBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGNhc2UgSURfVFI6Ci0gICAg
ICAgIC8vIFRSOiBfOSArCi0gICAgICAgIGlmIChjaGlsZElEID09IElEX1NDUklQVCB8fCBjaGls
ZElEID09IElEX0ZPUk0pCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgcmV0dXJu
IGNoZWNrX2FycmF5KGNoaWxkSUQsIHRhZ19saXN0XzkpOwotICAgIGNhc2UgSURfRlJBTUVTRVQ6
Ci0gICAgICAgIC8vIEZSQU1FU0VUOiAoIF8xMCArICYgTk9GUkFNRVMgPyApCi0gICAgICAgIHJl
dHVybiBjaGVja19hcnJheShjaGlsZElELCB0YWdfbGlzdF8xMCk7Ci0gICAgICAgIHJldHVybiAo
Y2hpbGRJRCA9PSBJRF9OT0ZSQU1FUyk7Ci0gICAgY2FzZSBJRF9IRUFEOgotICAgICAgICAvLyBI
RUFEOiAoIFRJVExFICYgSVNJTkRFWCA/ICYgQkFTRSA/ICkgKyBfMTEKLSAgICAgICAgaWYoY2hp
bGRJRCA9PSBJRF9USVRMRSB8fCBjaGlsZElEID09IElEX0lTSU5ERVggfHwgY2hpbGRJRCA9PSBJ
RF9CQVNFKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIHJldHVybiBjaGVja19h
cnJheShjaGlsZElELCB0YWdfbGlzdF8xMSk7Ci0gICAgY2FzZSBJRF9IVE1MOgotICAgICAgICAv
LyBIVE1MOiAoIEhFQUQgLCBDT01NRU5ULCAoIEJPRFkgfCAoIEZSQU1FU0VUICYgTk9GUkFNRVMg
PyApICkgKQotICAgICAgICBzd2l0Y2goY2hpbGRJRCkKLSAgICAgICAgewotICAgICAgICBjYXNl
IElEX0hFQUQ6Ci0gICAgICAgIGNhc2UgSURfQ09NTUVOVDoKLSAgICAgICAgY2FzZSBJRF9CT0RZ
OgotICAgICAgICBjYXNlIElEX0ZSQU1FU0VUOgotICAgICAgICBjYXNlIElEX05PRlJBTUVTOgot
ICAgICAgICBjYXNlIElEX1NDUklQVDoKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgZGVm
YXVsdDoKLSAgICAgICAga2REZWJ1ZyggNjAzMCApIDw8ICJ1bmhhbmRsZWQgdGFnIGluIGR0ZC5j
cHA6Y2hlY2tDaGlsZCgpOiB0YWdJRD0iIDw8IHRhZ0lEIDw8ICIhIiA8PCBlbmRsOwotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi12b2lkIERPTTo6YWRkRm9yYmlkZGVuKGludCB0
YWdJZCwgdXNob3J0ICpmb3JiaWRkZW5UYWdzKQotewotICAgIHN3aXRjaCh0YWdJZCkKLSAgICB7
Ci0gICAgY2FzZSBJRF9MQUJFTDoKLSAgICAgICAgZm9yYmlkZGVuVGFnc1tJRF9MQUJFTF0rKzsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9CVVRUT046Ci0gICAgICAgIGZvcmJpZGRlblRh
Z3NbSURfQV0rKzsKLSAgICAgICAgZm9yYmlkZGVuVGFnc1tJRF9JTlBVVF0rKzsKLSAgICAgICAg
Zm9yYmlkZGVuVGFnc1tJRF9TRUxFQ1RdKys7Ci0gICAgICAgIGZvcmJpZGRlblRhZ3NbSURfVEVY
VEFSRUFdKys7Ci0gICAgICAgIGZvcmJpZGRlblRhZ3NbSURfTEFCRUxdKys7Ci0gICAgICAgIGZv
cmJpZGRlblRhZ3NbSURfQlVUVE9OXSsrOwotICAgICAgICBmb3JiaWRkZW5UYWdzW0lEX0ZPUk1d
Kys7Ci0gICAgICAgIGZvcmJpZGRlblRhZ3NbSURfSVNJTkRFWF0rKzsKLSAgICAgICAgZm9yYmlk
ZGVuVGFnc1tJRF9GSUVMRFNFVF0rKzsKLSAgICAgICAgZm9yYmlkZGVuVGFnc1tJRF9JRlJBTUVd
Kys7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LX0KLQotdm9pZCBET006OnJlbW92ZUZvcmJpZGRlbihpbnQgdGFnSWQsIHVzaG9ydCAqZm9yYmlk
ZGVuVGFncykKLXsKLSAgICBzd2l0Y2godGFnSWQpCi0gICAgewotICAgIGNhc2UgSURfTEFCRUw6
Ci0gICAgICAgIGZvcmJpZGRlblRhZ3NbSURfTEFCRUxdLS07Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgSURfQlVUVE9OOgotICAgICAgICBmb3JiaWRkZW5UYWdzW0lEX0FdLS07Ci0gICAgICAg
IGZvcmJpZGRlblRhZ3NbSURfSU5QVVRdLS07Ci0gICAgICAgIGZvcmJpZGRlblRhZ3NbSURfU0VM
RUNUXS0tOwotICAgICAgICBmb3JiaWRkZW5UYWdzW0lEX1RFWFRBUkVBXS0tOwotICAgICAgICBm
b3JiaWRkZW5UYWdzW0lEX0xBQkVMXS0tOwotICAgICAgICBmb3JiaWRkZW5UYWdzW0lEX0JVVFRP
Tl0tLTsKLSAgICAgICAgZm9yYmlkZGVuVGFnc1tJRF9GT1JNXS0tOwotICAgICAgICBmb3JiaWRk
ZW5UYWdzW0lEX0lTSU5ERVhdLS07Ci0gICAgICAgIGZvcmJpZGRlblRhZ3NbSURfRklFTERTRVRd
LS07Ci0gICAgICAgIGZvcmJpZGRlblRhZ3NbSURfSUZSQU1FXS0tOwotICAgICAgICBicmVhazsK
LSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLQotI2lmIDAKLQotCi1z
dHJ1Y3QgYXR0cl9wcml2IHsKLSAgICBhdHRyX3ByaXYoKSB7IGlkID0gbGVuID0gMCwgdmFsID0g
MDsgfQotICAgIGF0dHJfcHJpdih1c2hvcnQgaSwgY29uc3QgUUNoYXIgKnYsIHVzaG9ydCBsKQot
ICAgIHsgaWQgPWk7IGxlbiA9IGwsIHZhbCA9IHY7IH0KLSAgICB1c2hvcnQgaWQ7Ci0gICAgY29u
c3QgUUNoYXIgKnZhbDsKLSAgICB1c2hvcnQgbGVuOwotfTsKLQotRE9NU3RyaW5nIGZpbmRfYXR0
cih1c2hvcnQgaWQsIGNvbnN0IGF0dHJfcHJpdiAqYXR0cnMpCi17Ci0gICAgaW50IGkgPSAwOwot
ICAgIHdoaWxlKGF0dHJzW2ldLmlkICE9IDApCi0gICAgewotICAgICAgICBpZihhdHRyc1tpXS5p
ZCA9PSBpZCkKLSAgICAgICAgICAgIHJldHVybiBET01TdHJpbmcoYXR0cnNbaV0udmFsLCBhdHRy
c1tpXS5sZW4pOwotICAgICAgICBpKys7Ci0gICAgfQotICAgIHJldHVybiBET01TdHJpbmcoKTsK
LX0KLQotc3RhdGljIGNvbnN0IFFDaGFyIHZhbHVlXzFfMCBbXSA9IHsgJ04nLCdPJywnTicsJ0Un
IH07Ci0KLWF0dHJfcHJpdiBhdHRyX2xpc3RfMVtdID0gewotICAgIGF0dHJfcHJpdihBVFRSX0NM
RUFSLCB2YWx1ZV8xXzAsIDQpCi19OwotCi1zdGF0aWMgY29uc3QgUUNoYXIgdmFsdWVfMl8wIFtd
ID0geyAnUicsJ0UnLCdDJywnVCcgfTsKLQotYXR0cl9wcml2IGF0dHJfbGlzdF8yW10gPSB7Ci0g
ICAgYXR0cl9wcml2KEFUVFJfU0hBUEUsIHZhbHVlXzJfMCwgNCkKLX07Ci0KLXN0YXRpYyBjb25z
dCBRQ2hhciB2YWx1ZV8zXzAgW10gPSB7ICdSJywnRScsJ0MnLCdUJyB9OwotCi1hdHRyX3ByaXYg
YXR0cl9saXN0XzNbXSA9IHsKLSAgICBhdHRyX3ByaXYoQVRUUl9TSEFQRSwgdmFsdWVfM18wLCA0
KQotfTsKLQotc3RhdGljIGNvbnN0IFFDaGFyIHZhbHVlXzRfMCBbXSA9IHsgJ0QnLCdBJywnVCcs
J0EnIH07Ci0KLWF0dHJfcHJpdiBhdHRyX2xpc3RfNFtdID0gewotICAgIGF0dHJfcHJpdihBVFRS
X1ZBTFVFVFlQRSwgdmFsdWVfNF8wLCA0KQotfTsKLQotc3RhdGljIGNvbnN0IFFDaGFyIHZhbHVl
XzVfMCBbXSA9IHsgJ0cnLCdFJywnVCcgfTsKLXN0YXRpYyBjb25zdCBRQ2hhciB2YWx1ZV81XzEg
W10gPSB7ICdBJywnUCcsJ1AnLCdMJywnSScsJ0MnLCdBJywnVCcsJ0knLCdPJywnTicsJy8nLCdY
JywnLScsJ1cnLCdXJywnVycsJy0nLCdGJywnTycsJ1InLCdNJywnLScsJ1UnLCdSJywnTCcsJ0Un
LCdOJywnQycsJ08nLCdEJywnRScsJ0QnIH07Ci0KLWF0dHJfcHJpdiBhdHRyX2xpc3RfNVtdID0g
ewotICAgIGF0dHJfcHJpdihBVFRSX01FVEhPRCwgdmFsdWVfNV8wLCAzKSwKLSAgICBhdHRyX3By
aXYoQVRUUl9FTkNUWVBFLCB2YWx1ZV81XzEsIDMzKQotfTsKLQotc3RhdGljIGNvbnN0IFFDaGFy
IHZhbHVlXzZfMCBbXSA9IHsgJ1QnLCdFJywnWCcsJ1QnIH07Ci0KLWF0dHJfcHJpdiBhdHRyX2xp
c3RfNltdID0gewotICAgIGF0dHJfcHJpdihBVFRSX1RZUEUsIHZhbHVlXzZfMCwgNCkKLX07Ci0K
LXN0YXRpYyBjb25zdCBRQ2hhciB2YWx1ZV83XzAgW10gPSB7ICdTJywnVScsJ0InLCdNJywnSScs
J1QnIH07Ci0KLWF0dHJfcHJpdiBhdHRyX2xpc3RfN1tdID0gewotICAgIGF0dHJfcHJpdihBVFRS
X1RZUEUsIHZhbHVlXzdfMCwgNikKLX07Ci0KLXN0YXRpYyBjb25zdCBRQ2hhciB2YWx1ZV84XzAg
W10gPSB7ICcxJyB9OwotCi1hdHRyX3ByaXYgYXR0cl9saXN0XzhbXSA9IHsKLSAgICBhdHRyX3By
aXYoQVRUUl9TUEFOLCB2YWx1ZV84XzAsIDEpCi19OwotCi1zdGF0aWMgY29uc3QgUUNoYXIgdmFs
dWVfOV8wIFtdID0geyAnMScgfTsKLQotYXR0cl9wcml2IGF0dHJfbGlzdF85W10gPSB7Ci0gICAg
YXR0cl9wcml2KEFUVFJfU1BBTiwgdmFsdWVfOV8wLCAxKQotfTsKLQotc3RhdGljIGNvbnN0IFFD
aGFyIHZhbHVlXzEwXzAgW10gPSB7ICcxJyB9Owotc3RhdGljIGNvbnN0IFFDaGFyIHZhbHVlXzEw
XzEgW10gPSB7ICcxJyB9OwotCi1hdHRyX3ByaXYgYXR0cl9saXN0XzEwW10gPSB7Ci0gICAgYXR0
cl9wcml2KEFUVFJfUk9XU1BBTiwgdmFsdWVfMTBfMCwgMSksCi0gICAgYXR0cl9wcml2KEFUVFJf
Q09MU1BBTiwgdmFsdWVfMTBfMSwgMSkKLX07Ci0KLXN0YXRpYyBjb25zdCBRQ2hhciB2YWx1ZV8x
MV8wIFtdID0geyAnMScgfTsKLXN0YXRpYyBjb25zdCBRQ2hhciB2YWx1ZV8xMV8xIFtdID0geyAn
QScsJ1UnLCdUJywnTycgfTsKLQotYXR0cl9wcml2IGF0dHJfbGlzdF8xMVtdID0gewotICAgIGF0
dHJfcHJpdihBVFRSX0ZSQU1FQk9SREVSLCB2YWx1ZV8xMV8wLCAxKSwKLSAgICBhdHRyX3ByaXYo
QVRUUl9TQ1JPTExJTkcsIHZhbHVlXzExXzEsIDQpCi19OwotCi1zdGF0aWMgY29uc3QgUUNoYXIg
dmFsdWVfMTJfMCBbXSA9IHsgJzEnIH07Ci1zdGF0aWMgY29uc3QgUUNoYXIgdmFsdWVfMTJfMSBb
XSA9IHsgJ0EnLCdVJywnVCcsJ08nIH07Ci0KLWF0dHJfcHJpdiBhdHRyX2xpc3RfMTJbXSA9IHsK
LSAgICBhdHRyX3ByaXYoQVRUUl9GUkFNRUJPUkRFUiwgdmFsdWVfMTJfMCwgMSksCi0gICAgYXR0
cl9wcml2KEFUVFJfU0NST0xMSU5HLCB2YWx1ZV8xMl8xLCA0KQotfTsKLQotc3RhdGljIGNvbnN0
IFFDaGFyIHZhbHVlXzEzXzAgW10gPSB7ICctJywnLycsJy8nLCdXJywnMycsJ0MnLCcvJywnLycs
J0QnLCdUJywnRCcgfTsKLXN0YXRpYyBjb25zdCBRQ2hhciB2YWx1ZV8xM18xIFtdID0geyAnVCcs
J1InLCdBJywnTicsJ1MnLCdJJywnVCcsJ0knLCdPJywnTicsJ0EnLCdMJywnLycsJy8nLCdFJywn
TicgfTsKLQotYXR0cl9wcml2IGF0dHJfbGlzdF8xM1tdID0gewotICAgIGF0dHJfcHJpdihBVFRS
X1ZFUlNJT04sIHZhbHVlXzEzXzAsIDExKSwKLSAgICBhdHRyX3ByaXYoQVRUUl9IVE1MLCB2YWx1
ZV8xM18xLCAxNikKLX07Ci0KLURPTVN0cmluZyBET006OmZpbmREZWZBdHRyTm9uZSh1c2hvcnQp
Ci17Ci0gICAgcmV0dXJuIERPTVN0cmluZygpOwotfTsKLURPTVN0cmluZyBET006OmZpbmREZWZB
dHRyQlIodXNob3J0IGlkKQotewotICAgIHJldHVybiBmaW5kX2F0dHIoaWQsIGF0dHJfbGlzdF8x
KTsKLX0KLURPTVN0cmluZyBET006OmZpbmREZWZBdHRyQSh1c2hvcnQgaWQpCi17Ci0gICAgcmV0
dXJuIGZpbmRfYXR0cihpZCwgYXR0cl9saXN0XzIpOwotfQotRE9NU3RyaW5nIERPTTo6ZmluZERl
ZkF0dHJBUkVBKHVzaG9ydCBpZCkKLXsKLSAgICByZXR1cm4gZmluZF9hdHRyKGlkLCBhdHRyX2xp
c3RfMyk7Ci19Ci1ET01TdHJpbmcgRE9NOjpmaW5kRGVmQXR0clBBUkFNKHVzaG9ydCBpZCkKLXsK
LSAgICByZXR1cm4gZmluZF9hdHRyKGlkLCBhdHRyX2xpc3RfNCk7Ci19Ci1ET01TdHJpbmcgRE9N
OjpmaW5kRGVmQXR0ckZPUk0odXNob3J0IGlkKQotewotICAgIHJldHVybiBmaW5kX2F0dHIoaWQs
IGF0dHJfbGlzdF81KTsKLX0KLURPTVN0cmluZyBET006OmZpbmREZWZBdHRySU5QVVQodXNob3J0
IGlkKQotewotICAgIHJldHVybiBmaW5kX2F0dHIoaWQsIGF0dHJfbGlzdF82KTsKLX0KLURPTVN0
cmluZyBET006OmZpbmREZWZBdHRyQlVUVE9OKHVzaG9ydCBpZCkKLXsKLSAgICByZXR1cm4gZmlu
ZF9hdHRyKGlkLCBhdHRyX2xpc3RfNyk7Ci19Ci1ET01TdHJpbmcgRE9NOjpmaW5kRGVmQXR0ckNP
TEdST1VQKHVzaG9ydCBpZCkKLXsKLSAgICByZXR1cm4gZmluZF9hdHRyKGlkLCBhdHRyX2xpc3Rf
OCk7Ci19Ci1ET01TdHJpbmcgRE9NOjpmaW5kRGVmQXR0ckNPTCh1c2hvcnQgaWQpCi17Ci0gICAg
cmV0dXJuIGZpbmRfYXR0cihpZCwgYXR0cl9saXN0XzkpOwotfQotRE9NU3RyaW5nIERPTTo6Zmlu
ZERlZkF0dHJUSCh1c2hvcnQgaWQpCi17Ci0gICAgcmV0dXJuIGZpbmRfYXR0cihpZCwgYXR0cl9s
aXN0XzEwKTsKLX0KLURPTVN0cmluZyBET006OmZpbmREZWZBdHRyRlJBTUUodXNob3J0IGlkKQot
ewotICAgIHJldHVybiBmaW5kX2F0dHIoaWQsIGF0dHJfbGlzdF8xMSk7Ci19Ci1ET01TdHJpbmcg
RE9NOjpmaW5kRGVmQXR0cklGUkFNRSh1c2hvcnQgaWQpCi17Ci0gICAgcmV0dXJuIGZpbmRfYXR0
cihpZCwgYXR0cl9saXN0XzEyKTsKLX0KLURPTVN0cmluZyBET006OmZpbmREZWZBdHRySFRNTCh1
c2hvcnQgaWQpCi17Ci0gICAgcmV0dXJuIGZpbmRfYXR0cihpZCwgYXR0cl9saXN0XzEzKTsKLX0K
LQotI2VuZGlmCkluZGV4OiBraHRtbC9odG1sL2R0ZC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IGto
dG1sL2h0bWwvZHRkLmgKZGlmZiAtTiBraHRtbC9odG1sL2R0ZC5oCi0tLSBraHRtbC9odG1sL2R0
ZC5oCTEyIEFwciAyMDA1IDIyOjQ5OjQxIC0wMDAwCTEuNQorKysgL2Rldi9udWxsCTEgSmFuIDE5
NzAgMDA6MDA6MDAgLTAwMDAKQEAgLTEsNTggKzAsMCBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBw
YXJ0IG9mIHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4KLSAqCi0gKiAoQykgMTk5OSBM
YXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKLSAqIEJvc3RvbiwgTUEgMDIx
MTEtMTMwNywgVVNBLgotICoKLSAqLwotI2lmbmRlZiBfRE9NX2R0ZF9oXwotI2RlZmluZSBfRE9N
X2R0ZF9oXwotCi0jaW5jbHVkZSAiZG9tL2RvbV9zdHJpbmcuaCIKLSNpbmNsdWRlICJtaXNjL2h0
bWx0YWdzLmgiCi0KLW5hbWVzcGFjZSBET00KLXsKLQotdm9pZCBhZGRGb3JiaWRkZW4oaW50IHRh
Z0lkLCB1c2hvcnQgKmZvcmJpZGRlblRhZ3MpOwotdm9pZCByZW1vdmVGb3JiaWRkZW4oaW50IHRh
Z0lkLCB1c2hvcnQgKmZvcmJpZGRlblRhZ3MpOwotCi1lbnVtIHRhZ1N0YXR1cyB7IE9QVElPTkFM
LCBSRVFVSVJFRCwgRk9SQklEREVOIH07Ci0KLWJvb2wgY2hlY2tDaGlsZCh1c2hvcnQgdGFnSUQs
IHVzaG9ydCBjaGlsZElELCBib29sIHN0cmljdCk7Ci0KLWV4dGVybiBjb25zdCB1bnNpZ25lZCBz
aG9ydCB0YWdQcmlvcml0eUFycmF5W107Ci1leHRlcm4gY29uc3QgdGFnU3RhdHVzIGVuZFRhZ0Fy
cmF5W107Ci0KLWlubGluZSB1bnNpZ25lZCBzaG9ydCB0YWdQcmlvcml0eShRX1VJTlQzMiB0YWdJ
ZCkKLXsKLSAgICAvLyBUcmVhdCBjdXN0b20gZWxlbWVudHMgdGhlIHNhbWUgYXMgPHNwYW4+OyBh
bHNvIGRvbid0IHJlYWQgcGFzdCB0aGUgZW5kIG9mIHRoZSBhcnJheS4KLSAgICBpZiAodGFnSWQg
PiBJRF9MQVNUX1RBRykKLSAgICAgICAgcmV0dXJuIHRhZ1ByaW9yaXR5QXJyYXlbSURfU1BBTl07
Ci0gICAgcmV0dXJuIHRhZ1ByaW9yaXR5QXJyYXlbdGFnSWRdOwotfQotCi1pbmxpbmUgdGFnU3Rh
dHVzIGVuZFRhZ1JlcXVpcmVtZW50KFFfVUlOVDMyIHRhZ0lkKQotewotICAgIC8vIFRyZWF0IGN1
c3RvbSBlbGVtZW50cyB0aGUgc2FtZSBhcyA8c3Bhbj47IGFsc28gZG9uJ3QgcmVhZCBwYXN0IHRo
ZSBlbmQgb2YgdGhlIGFycmF5LgotICAgIGlmICh0YWdJZCA+IElEX0xBU1RfVEFHKQotICAgICAg
ICByZXR1cm4gZW5kVGFnQXJyYXlbSURfU1BBTl07Ci0gICAgcmV0dXJuIGVuZFRhZ0FycmF5W3Rh
Z0lkXTsKLX0KLQotfSAvL25hbWVzcGFjZSBET00KLSNlbmRpZgpJbmRleDoga2h0bWwvaHRtbC9o
dG1sX2Jhc2VpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9r
aHRtbC9odG1sL2h0bWxfYmFzZWltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjcyCmRp
ZmYgLXUgLXAgLXIxLjcyIGtodG1sL2h0bWwvaHRtbF9iYXNlaW1wbC5jcHAKLS0tIGtodG1sL2h0
bWwvaHRtbF9iYXNlaW1wbC5jcHAJMTIgTWF5IDIwMDUgMTc6MTE6MjEgLTAwMDAJMS43MgorKysg
a2h0bWwvaHRtbC9odG1sX2Jhc2VpbXBsLmNwcAk4IEp1bCAyMDA1IDA1OjU3OjE2IC0wMDAwCkBA
IC00OCw3ICs0OCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBET007CiB1c2luZyBuYW1lc3BhY2Uga2h0
bWw7CiAKIEhUTUxCb2R5RWxlbWVudEltcGw6OkhUTUxCb2R5RWxlbWVudEltcGwoRG9jdW1lbnRQ
dHIgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50SW1wbChkb2MpLCBtX2xpbmtEZWNsKDApCisgICAg
OiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjpib2R5KCksIGRvYyksIG1fbGlua0RlY2woMCkK
IHsKIH0KIApAQCAtNjEsMTEgKzYxLDYgQEAgSFRNTEJvZHlFbGVtZW50SW1wbDo6fkhUTUxCb2R5
RWxlbWVudEltcAogICAgIH0KIH0KIAotTm9kZUltcGw6OklkIEhUTUxCb2R5RWxlbWVudEltcGw6
OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfQk9EWTsKLX0KLQogdm9pZCBIVE1MQm9keUVs
ZW1lbnRJbXBsOjpjcmVhdGVMaW5rRGVjbCgpCiB7CiAgICAgbV9saW5rRGVjbCA9IG5ldyBDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbkltcGw7CkBAIC0yODksNyArMjg0LDE4IEBAIHZvaWQgSFRN
TEJvZHlFbGVtZW50SW1wbDo6c2V0VkxpbmsoY29uc3QKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAog
SFRNTEZyYW1lRWxlbWVudEltcGw6OkhUTUxGcmFtZUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpk
b2MpCi0gICAgOiBIVE1MRWxlbWVudEltcGwoZG9jKQorICAgIDogSFRNTEVsZW1lbnRJbXBsKEhU
TUxOYW1lczo6ZnJhbWUoKSwgZG9jKQoreworICAgIGluaXQoKTsKK30KKworSFRNTEZyYW1lRWxl
bWVudEltcGw6OkhUTUxGcmFtZUVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05h
bWUsIERvY3VtZW50UHRyICpkb2MpCisgICAgOiBIVE1MRWxlbWVudEltcGwodGFnTmFtZSwgZG9j
KQoreworICAgIGluaXQoKTsKK30KKwordm9pZCBIVE1MRnJhbWVFbGVtZW50SW1wbDo6aW5pdCgp
CiB7CiAgICAgbV9mcmFtZUJvcmRlciA9IHRydWU7CiAgICAgbV9mcmFtZUJvcmRlclNldCA9IGZh
bHNlOwpAQCAtMzAzLDExICszMDksNiBAQCBIVE1MRnJhbWVFbGVtZW50SW1wbDo6fkhUTUxGcmFt
ZUVsZW1lbnRJCiB7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MRnJhbWVFbGVtZW50SW1wbDo6aWQo
KSBjb25zdAotewotICAgIHJldHVybiBJRF9GUkFNRTsKLX0KLQogYm9vbCBIVE1MRnJhbWVFbGVt
ZW50SW1wbDo6aXNVUkxBbGxvd2VkKGNvbnN0IEF0b21pY1N0cmluZyAmVVJMU3RyaW5nKSBjb25z
dAogewogICAgIGlmIChVUkxTdHJpbmcuaXNFbXB0eSgpKSB7CkBAIC00ODIsNyArNDgzLDcgQEAg
dm9pZCBIVE1MRnJhbWVFbGVtZW50SW1wbDo6YXR0YWNoKCkKIAogICAgIC8vIGluaGVyaXQgZGVm
YXVsdCBzZXR0aW5ncyBmcm9tIHBhcmVudCBmcmFtZXNldAogICAgIGZvciAoTm9kZUltcGwgKm5v
ZGUgPSBwYXJlbnROb2RlKCk7IG5vZGU7IG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCkpCi0gICAg
ICAgIGlmIChub2RlLT5pZCgpID09IElEX0ZSQU1FU0VUKSB7CisgICAgICAgIGlmIChub2RlLT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6ZnJhbWVzZXQoKSkpIHsKICAgICAgICAgICAgIEhUTUxGcmFt
ZVNldEVsZW1lbnRJbXBsKiBmcmFtZXNldCA9IHN0YXRpY19jYXN0PEhUTUxGcmFtZVNldEVsZW1l
bnRJbXBsKj4obm9kZSk7CiAgICAgICAgICAgICBpZiAoIW1fZnJhbWVCb3JkZXJTZXQpCiAgICAg
ICAgICAgICAgICAgbV9mcmFtZUJvcmRlciA9IGZyYW1lc2V0LT5mcmFtZUJvcmRlcigpOwpAQCAt
NjYxLDcgKzY2Miw3IEBAIHZvaWQgSFRNTEZyYW1lRWxlbWVudEltcGw6OnNldFNyYyhjb25zdCAK
IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogSFRNTEZyYW1lU2V0RWxlbWVudEltcGw6OkhUTUxGcmFt
ZVNldEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0gICAgOiBIVE1MRWxlbWVudEltcGwo
ZG9jKQorICAgIDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6ZnJhbWVzZXQoKSwgZG9jKQog
ewogICAgIC8vIGRlZmF1bHQgdmFsdWUgZm9yIHJvd3MgYW5kIGNvbHMuLi4KICAgICBtX3RvdGFs
Um93cyA9IDE7CkBAIC02ODUsOSArNjg2LDExIEBAIEhUTUxGcmFtZVNldEVsZW1lbnRJbXBsOjp+
SFRNTEZyYW1lU2V0RWwKICAgICAgICAgZGVsZXRlIFtdIG1fY29sczsKIH0KIAotTm9kZUltcGw6
OklkIEhUTUxGcmFtZVNldEVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Citib29sIEhUTUxGcmFtZVNl
dEVsZW1lbnRJbXBsOjpjaGVja0RURChjb25zdCBOb2RlSW1wbCogbmV3Q2hpbGQpCiB7Ci0gICAg
cmV0dXJuIElEX0ZSQU1FU0VUOworCS8vIEZJWE1FOiBPbGQgY29kZSBoYWQgYWRqYWNlbnQgZG91
YmxlIHJldHVybnMgYW5kIHNlZW1lZCB0byB3YW50IHRvIGRvIHNvbWV0aGluZyB3aXRoIE5PRlJB
TUVTIChidXQgZGlkbid0KS4KKwkvLyBXaGF0IGlzIHRoZSBjb3JyZWN0IGJlaGF2aW9yPworCXJl
dHVybiBuZXdDaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZyYW1lc2V0KCkpIHx8IG5ld0No
aWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZnJhbWUoKSk7CiB9CiAKIHZvaWQgSFRNTEZyYW1l
U2V0RWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwg
KmF0dHIpCkBAIC03NTIsOCArNzU1LDcgQEAgdm9pZCBIVE1MRnJhbWVTZXRFbGVtZW50SW1wbDo6
YXR0YWNoKCkKICAgICBIVE1MRWxlbWVudEltcGwqIG5vZGUgPSBzdGF0aWNfY2FzdDxIVE1MRWxl
bWVudEltcGwqPihwYXJlbnROb2RlKCkpOwogICAgIHdoaWxlKG5vZGUpCiAgICAgewotICAgICAg
ICBpZihub2RlLT5pZCgpID09IElEX0ZSQU1FU0VUKQotICAgICAgICB7CisgICAgICAgIGlmIChu
b2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZnJhbWVzZXQoKSkpIHsKICAgICAgICAgICAgIEhU
TUxGcmFtZVNldEVsZW1lbnRJbXBsKiBmcmFtZXNldCA9IHN0YXRpY19jYXN0PEhUTUxGcmFtZVNl
dEVsZW1lbnRJbXBsKj4obm9kZSk7CiAgICAgICAgICAgICBpZighZnJhbWVCb3JkZXJTZXQpICBm
cmFtZWJvcmRlciA9IGZyYW1lc2V0LT5mcmFtZUJvcmRlcigpOwogICAgICAgICAgICAgaWYoIW5v
cmVzaXplKSAgbm9yZXNpemUgPSBmcmFtZXNldC0+bm9SZXNpemUoKTsKQEAgLTgxNyw3ICs4MTks
NyBAQCB2b2lkIEhUTUxGcmFtZVNldEVsZW1lbnRJbXBsOjpzZXRSb3dzKGNvCiAvLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCiAKIEhUTUxIZWFkRWxlbWVudEltcGw6OkhUTUxIZWFkRWxlbWVudEltcGwoRG9j
dW1lbnRQdHIgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50SW1wbChkb2MpCisgICAgOiBIVE1MRWxl
bWVudEltcGwoSFRNTE5hbWVzOjpoZWFkKCksIGRvYykKIHsKIH0KIApAQCAtODI1LDExICs4Mjcs
NiBAQCBIVE1MSGVhZEVsZW1lbnRJbXBsOjp+SFRNTEhlYWRFbGVtZW50SW1wCiB7CiB9CiAKLU5v
ZGVJbXBsOjpJZCBIVE1MSGVhZEVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IElEX0hFQUQ7Ci19Ci0KIERPTVN0cmluZyBIVE1MSGVhZEVsZW1lbnRJbXBsOjpwcm9maWxlKCkg
Y29uc3QKIHsKICAgICByZXR1cm4gZ2V0QXR0cmlidXRlKEFUVFJfUFJPRklMRSk7CkBAIC04NDAs
MTAgKzgzNywxOCBAQCB2b2lkIEhUTUxIZWFkRWxlbWVudEltcGw6OnNldFByb2ZpbGUoY29uCiAg
ICAgc2V0QXR0cmlidXRlKEFUVFJfUFJPRklMRSwgdmFsdWUpOwogfQogCitib29sIEhUTUxIZWFk
RWxlbWVudEltcGw6OmNoZWNrRFREKGNvbnN0IE5vZGVJbXBsKiBuZXdDaGlsZCkKK3sKKwlyZXR1
cm4gbmV3Q2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0aXRsZSgpKSB8fCBuZXdDaGlsZC0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OmlzaW5kZXgoKSkgfHwKKwkJICAgbmV3Q2hpbGQtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjpiYXNlKCkpIHx8IG5ld0NoaWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6c2NyaXB0KCkpIHx8CisJCSAgIG5ld0NoaWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c3R5
bGUoKSkgfHwgbmV3Q2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjptZXRhKCkpIHx8CisJCSAg
IG5ld0NoaWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6bGluaygpKSB8fCBuZXdDaGlsZC0+aXNU
ZXh0Tm9kZSgpOworfQorCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxIdG1sRWxlbWVudElt
cGw6OkhUTUxIdG1sRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgICA6IEhUTUxFbGVt
ZW50SW1wbChkb2MpCisgICAgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjpodG1sKCksIGRv
YykKIHsKIH0KIApAQCAtODUxLDExICs4NTYsNiBAQCBIVE1MSHRtbEVsZW1lbnRJbXBsOjp+SFRN
TEh0bWxFbGVtZW50SW1wCiB7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MSHRtbEVsZW1lbnRJbXBs
OjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0hUTUw7Ci19Ci0KIERPTVN0cmluZyBIVE1M
SHRtbEVsZW1lbnRJbXBsOjp2ZXJzaW9uKCkgY29uc3QKIHsKICAgICByZXR1cm4gZ2V0QXR0cmli
dXRlKEFUVFJfVkVSU0lPTik7CkBAIC04NjYsOSArODY2LDE3IEBAIHZvaWQgSFRNTEh0bWxFbGVt
ZW50SW1wbDo6c2V0VmVyc2lvbihjb24KICAgICBzZXRBdHRyaWJ1dGUoQVRUUl9WRVJTSU9OLCB2
YWx1ZSk7CiB9CiAKK2Jvb2wgSFRNTEh0bWxFbGVtZW50SW1wbDo6Y2hlY2tEVEQoY29uc3QgTm9k
ZUltcGwqIG5ld0NoaWxkKQoreworCS8vIEZJWE1FOiBXaHkgaXMgPHNjcmlwdD4gYWxsb3dlZCBo
ZXJlPworCXJldHVybiBuZXdDaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmhlYWQoKSkgfHwg
bmV3Q2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpib2R5KCkpIHx8CisJCSAgIG5ld0NoaWxk
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZnJhbWVzZXQoKSkgfHwgbmV3Q2hpbGQtPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjpub2ZyYW1lcygpKSB8fAorCQkgICBuZXdDaGlsZC0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OnNjcmlwdCgpKTsKK30KKwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1IVE1MSUZy
YW1lRWxlbWVudEltcGw6OkhUTUxJRnJhbWVFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKSA6
IEhUTUxGcmFtZUVsZW1lbnRJbXBsKGRvYykKK0hUTUxJRnJhbWVFbGVtZW50SW1wbDo6SFRNTElG
cmFtZUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpIDogSFRNTEZyYW1lRWxlbWVudEltcGwo
SFRNTE5hbWVzOjppZnJhbWUoKSwgZG9jKQogewogICAgIG1fZnJhbWVCb3JkZXIgPSBmYWxzZTsK
ICAgICBtX21hcmdpbldpZHRoID0gLTE7CkBAIC04ODAsMTEgKzg4OCw2IEBAIEhUTUxJRnJhbWVF
bGVtZW50SW1wbDo6fkhUTUxJRnJhbWVFbGVtZW4KIHsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxJ
RnJhbWVFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9JRlJBTUU7Ci19
Ci0KIGJvb2wgSFRNTElGcmFtZUVsZW1lbnRJbXBsOjptYXBUb0VudHJ5KE5vZGVJbXBsOjpJZCBh
dHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdAogewogICAgIHN3aXRjaCAo
YXR0cikgewpJbmRleDoga2h0bWwvaHRtbC9odG1sX2Jhc2VpbXBsLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sX2Jhc2VpbXBsLmgsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuMjcKZGlmZiAtdSAtcCAtcjEuMjcga2h0bWwvaHRtbC9odG1sX2Jh
c2VpbXBsLmgKLS0tIGtodG1sL2h0bWwvaHRtbF9iYXNlaW1wbC5oCTExIE1heSAyMDA1IDA1OjQ5
OjM0IC0wMDAwCTEuMjcKKysrIGtodG1sL2h0bWwvaHRtbF9iYXNlaW1wbC5oCTggSnVsIDIwMDUg
MDU6NTc6MTYgLTAwMDAKQEAgLTI2LDcgKzI2LDYgQEAKICNpZm5kZWYgSFRNTF9CQVNFSU1QTF9I
CiAjZGVmaW5lIEhUTUxfQkFTRUlNUExfSAogCi0jaW5jbHVkZSAiaHRtbC9kdGQuaCIKICNpbmNs
dWRlICJodG1sL2h0bWxfZWxlbWVudGltcGwuaCIKICNpbmNsdWRlICJtaXNjL2todG1sbGF5b3V0
LmgiCiAKQEAgLTU1LDggKzU0LDkgQEAgcHVibGljOgogICAgIEhUTUxCb2R5RWxlbWVudEltcGwo
RG9jdW1lbnRQdHIgKmRvYyk7CiAgICAgfkhUTUxCb2R5RWxlbWVudEltcGwoKTsKIAotICAgIHZp
cnR1YWwgSWQgaWQoKSBjb25zdDsKLQorICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdS
ZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9CisgICAgdmly
dHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAxMDsgfQorICAgIAogICAgIHZp
cnR1YWwgYm9vbCBtYXBUb0VudHJ5KE5vZGVJbXBsOjpJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVF
bnRyeSYgcmVzdWx0KSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1
dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqKTsKIApAQCAtOTIsMTEgKzkyLDE0IEBAIGNsYXNzIEhU
TUxGcmFtZUVsZW1lbnRJbXBsIDogcHVibGljIEhUTUwKIAogcHVibGljOgogICAgIEhUTUxGcmFt
ZUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpOwotCisgICAgSFRNTEZyYW1lRWxlbWVudElt
cGwoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnRQdHIqIGRvYyk7CiAgICAg
fkhUTUxGcmFtZUVsZW1lbnRJbXBsKCk7CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7Cisg
ICAgdm9pZCBpbml0KCk7CiAKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWly
ZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNGb3JiaWRkZW47IH0KKyAgICB2aXJ0dWFs
IGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgCiAgICAgdmlydHVhbCB2
b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKik7CiAgICAgdmly
dHVhbCB2b2lkIGF0dGFjaCgpOwogICAgIHZpcnR1YWwgdm9pZCBkZXRhY2goKTsKQEAgLTE2OCwx
MCArMTcxLDExIEBAIGNsYXNzIEhUTUxGcmFtZVNldEVsZW1lbnRJbXBsIDogcHVibGljIEgKICAg
ICBmcmllbmQgY2xhc3Mga2h0bWw6OlJlbmRlckZyYW1lU2V0OwogcHVibGljOgogICAgIEhUTUxG
cmFtZVNldEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpOwotCiAgICAgfkhUTUxGcmFtZVNl
dEVsZW1lbnRJbXBsKCk7CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CisgICAgdmlydHVh
bCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3Rh
dHVzUmVxdWlyZWQ7IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0
dXJuIDEwOyB9CisJdmlydHVhbCBib29sIGNoZWNrRFREKGNvbnN0IE5vZGVJbXBsKiBuZXdDaGls
ZCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmli
dXRlSW1wbCAqKTsKICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoKCk7CkBAIC0yMTYsMTAgKzIyMCwx
MSBAQCBjbGFzcyBIVE1MSGVhZEVsZW1lbnRJbXBsIDogcHVibGljIEhUTUxFCiB7CiBwdWJsaWM6
CiAgICAgSFRNTEhlYWRFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKTsKLQogICAgIH5IVE1M
SGVhZEVsZW1lbnRJbXBsKCk7CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CisgICAgdmly
dHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFn
U3RhdHVzT3B0aW9uYWw7IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsg
cmV0dXJuIDEwOyB9CisJdmlydHVhbCBib29sIGNoZWNrRFREKGNvbnN0IE5vZGVJbXBsKiBuZXdD
aGlsZCk7CiAKICAgICBET01TdHJpbmcgcHJvZmlsZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0UHJv
ZmlsZShjb25zdCBET01TdHJpbmcgJik7CkBAIC0yMzMsNyArMjM4LDkgQEAgcHVibGljOgogICAg
IEhUTUxIdG1sRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYyk7CiAgICAgfkhUTUxIdG1sRWxl
bWVudEltcGwoKTsKIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEhU
TUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNS
ZXF1aXJlZDsgfQorICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4g
MTE7IH0KKwl2aXJ0dWFsIGJvb2wgY2hlY2tEVEQoY29uc3QgTm9kZUltcGwqIG5ld0NoaWxkKTsK
IAogICAgIERPTVN0cmluZyB2ZXJzaW9uKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRWZXJzaW9uKGNv
bnN0IERPTVN0cmluZyAmKTsKQEAgLTI0NiwxMCArMjUzLDEwIEBAIGNsYXNzIEhUTUxJRnJhbWVF
bGVtZW50SW1wbCA6IHB1YmxpYyBIVE0KIHsKIHB1YmxpYzoKICAgICBIVE1MSUZyYW1lRWxlbWVu
dEltcGwoRG9jdW1lbnRQdHIgKmRvYyk7Ci0KICAgICB+SFRNTElGcmFtZUVsZW1lbnRJbXBsKCk7
CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CisgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVz
IGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzUmVxdWlyZWQ7IH0K
KyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDE7IH0KIAogICAg
IHZpcnR1YWwgYm9vbCBtYXBUb0VudHJ5KE5vZGVJbXBsOjpJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1
dGVFbnRyeSYgcmVzdWx0KSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRy
aWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqYXR0cik7CkluZGV4OiBraHRtbC9odG1sL2h0bWxf
YmxvY2tpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRt
bC9odG1sL2h0bWxfYmxvY2tpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNwpkaWZm
IC11IC1wIC1yMS4xNyBraHRtbC9odG1sL2h0bWxfYmxvY2tpbXBsLmNwcAotLS0ga2h0bWwvaHRt
bC9odG1sX2Jsb2NraW1wbC5jcHAJMTEgTWF5IDIwMDUgMDU6NDk6MzQgLTAwMDAJMS4xNworKysg
a2h0bWwvaHRtbC9odG1sX2Jsb2NraW1wbC5jcHAJOCBKdWwgMjAwNSAwNTo1NzoxNiAtMDAwMApA
QCAtMzcsNyArMzcsNyBAQCB1c2luZyBuYW1lc3BhY2Uga2h0bWw7CiB1c2luZyBuYW1lc3BhY2Ug
RE9NOwogCiBIVE1MQmxvY2txdW90ZUVsZW1lbnRJbXBsOjpIVE1MQmxvY2txdW90ZUVsZW1lbnRJ
bXBsKERvY3VtZW50UHRyICpkb2MpCi0gICAgOiBIVE1MRWxlbWVudEltcGwoZG9jKQorICAgIDog
SFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6YmxvY2txdW90ZSgpLCBkb2MpCiB7CiB9CiAKQEAg
LTQ1LDExICs0NSw2IEBAIEhUTUxCbG9ja3F1b3RlRWxlbWVudEltcGw6On5IVE1MQmxvY2txdW8K
IHsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxCbG9ja3F1b3RlRWxlbWVudEltcGw6OmlkKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gSURfQkxPQ0tRVU9URTsKLX0KLQogRE9NU3RyaW5nIEhUTUxCbG9j
a3F1b3RlRWxlbWVudEltcGw6OmNpdGUoKSBjb25zdAogewogICAgIHJldHVybiBnZXRBdHRyaWJ1
dGUoQVRUUl9DSVRFKTsKQEAgLTYzLDcgKzU4LDcgQEAgdm9pZCBIVE1MQmxvY2txdW90ZUVsZW1l
bnRJbXBsOjpzZXRDaXRlKAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MRGl2RWxlbWVudElt
cGw6OkhUTUxEaXZFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAgIDogSFRNTEVsZW1l
bnRJbXBsKGRvYykKKyAgICA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6OmRpdigpLCBkb2Mp
CiB7CiB9CiAKQEAgLTcxLDExICs2Niw2IEBAIEhUTUxEaXZFbGVtZW50SW1wbDo6fkhUTUxEaXZF
bGVtZW50SW1wbCgKIHsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxEaXZFbGVtZW50SW1wbDo6aWQo
KSBjb25zdAotewotICAgIHJldHVybiBJRF9ESVY7Ci19Ci0KIGJvb2wgSFRNTERpdkVsZW1lbnRJ
bXBsOjptYXBUb0VudHJ5KE5vZGVJbXBsOjpJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYg
cmVzdWx0KSBjb25zdAogewogICAgIGlmIChhdHRyID09IEFUVFJfQUxJR04pIHsKQEAgLTEyMCw3
ICsxMTAsNyBAQCB2b2lkIEhUTUxEaXZFbGVtZW50SW1wbDo6c2V0QWxpZ24oY29uc3QgCiAvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxIUkVsZW1lbnRJbXBsOjpIVE1MSFJFbGVtZW50SW1wbChE
b2N1bWVudFB0ciAqZG9jKQotICAgIDogSFRNTEVsZW1lbnRJbXBsKGRvYykKKyAgICA6IEhUTUxF
bGVtZW50SW1wbChIVE1MTmFtZXM6OmhyKCksIGRvYykKIHsKIH0KIApAQCAtMTI4LDExICsxMTgs
NiBAQCBIVE1MSFJFbGVtZW50SW1wbDo6fkhUTUxIUkVsZW1lbnRJbXBsKCkKIHsKIH0KIAotTm9k
ZUltcGw6OklkIEhUTUxIUkVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElE
X0hSOwotfQotCiBib29sIEhUTUxIUkVsZW1lbnRJbXBsOjptYXBUb0VudHJ5KE5vZGVJbXBsOjpJ
ZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdAogewogICAgIHN3aXRj
aCAoYXR0cikgewpAQCAtMjUyLDExICsyMzcsMjEgQEAgdm9pZCBIVE1MSFJFbGVtZW50SW1wbDo6
c2V0V2lkdGgoY29uc3QgRAogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUhUTUxIZWFkaW5nRWxl
bWVudEltcGw6OkhUTUxIZWFkaW5nRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgdXNob3J0
IF90YWdpZCkKLSAgICA6IEhUTUxHZW5lcmljRWxlbWVudEltcGwoZG9jLCBfdGFnaWQpCitIVE1M
SGVhZGluZ0VsZW1lbnRJbXBsOjpIVE1MSGVhZGluZ0VsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmll
ZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50UHRyICpkb2MpCisgICAgOiBIVE1MRWxlbWVudEltcGwo
dGFnTmFtZSwgZG9jKQogewogfQogCitib29sIEhUTUxIZWFkaW5nRWxlbWVudEltcGw6OmNoZWNr
RFREKGNvbnN0IE5vZGVJbXBsKiBuZXdDaGlsZCkKK3sKKyAgICBpZiAobmV3Q2hpbGQtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjpoMSgpKSB8fCBuZXdDaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
OmgyKCkpIHx8CisgICAgICAgIG5ld0NoaWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDMoKSkg
fHwgbmV3Q2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoNCgpKSB8fAorICAgICAgICBuZXdD
aGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omg1KCkpIHx8IG5ld0NoaWxkLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6aDYoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBp
bkVpdGhlclRhZ0xpc3QobmV3Q2hpbGQpOworfQorCiBET01TdHJpbmcgSFRNTEhlYWRpbmdFbGVt
ZW50SW1wbDo6YWxpZ24oKSBjb25zdAogewogICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoQVRUUl9B
TElHTik7CkBAIC0yNzAsMTMgKzI2NSwxMyBAQCB2b2lkIEhUTUxIZWFkaW5nRWxlbWVudEltcGw6
OnNldEFsaWduKGNvCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxQYXJhZ3JhcGhFbGVtZW50
SW1wbDo6SFRNTFBhcmFncmFwaEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0gICAgOiBI
VE1MRWxlbWVudEltcGwoZG9jKQorICAgIDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6cCgp
LCBkb2MpCiB7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MUGFyYWdyYXBoRWxlbWVudEltcGw6Omlk
KCkgY29uc3QKK2Jvb2wgSFRNTFBhcmFncmFwaEVsZW1lbnRJbXBsOjpjaGVja0RURChjb25zdCBO
b2RlSW1wbCogbmV3Q2hpbGQpCiB7Ci0gICAgcmV0dXJuIElEX1A7CisgICAgcmV0dXJuIGluSW5s
aW5lVGFnTGlzdChuZXdDaGlsZCkgfHwgKGdldERvY3VtZW50KCktPmluQ29tcGF0TW9kZSgpICYm
IG5ld0NoaWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGFibGUoKSkpOwogfQogCiBib29sIEhU
TUxQYXJhZ3JhcGhFbGVtZW50SW1wbDo6bWFwVG9FbnRyeShOb2RlSW1wbDo6SWQgYXR0ciwgTWFw
cGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3QKQEAgLTMyMiw4ICszMTcsOCBAQCB2b2lk
IEhUTUxQYXJhZ3JhcGhFbGVtZW50SW1wbDo6c2V0QWxpZ24oCiAKIC8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KIAotSFRNTFByZUVsZW1lbnRJbXBsOjpIVE1MUHJlRWxlbWVudEltcGwoRG9jdW1lbnRQdHIg
KmRvYywgdW5zaWduZWQgc2hvcnQgX3RhZ2lkKQotICAgIDogSFRNTEdlbmVyaWNFbGVtZW50SW1w
bChkb2MsIF90YWdpZCkKK0hUTUxQcmVFbGVtZW50SW1wbDo6SFRNTFByZUVsZW1lbnRJbXBsKGNv
bnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50UHRyICpkb2MpCisgICAgOiBIVE1M
RWxlbWVudEltcGwodGFnTmFtZSwgZG9jKQogewogfQogCkBAIC0zNDMsMTYgKzMzOCwxMSBAQCB2
b2lkIEhUTUxQcmVFbGVtZW50SW1wbDo6c2V0V2lkdGgobG9uZyB3CiBjb25zdCBpbnQgZGVmYXVs
dE1pbmltdW1EZWxheSA9IDYwOwogCiBIVE1MTWFycXVlZUVsZW1lbnRJbXBsOjpIVE1MTWFycXVl
ZUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi06IEhUTUxFbGVtZW50SW1wbChkb2MpLAor
OiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjptYXJxdWVlKCksIGRvYyksCiAgIG1fbWluaW11
bURlbGF5KGRlZmF1bHRNaW5pbXVtRGVsYXkpCiB7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MTWFy
cXVlZUVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX01BUlFVRUU7Ci19
Ci0KIGJvb2wgSFRNTE1hcnF1ZWVFbGVtZW50SW1wbDo6bWFwVG9FbnRyeShOb2RlSW1wbDo6SWQg
YXR0ciwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3QKIHsKICAgICBzd2l0Y2gg
KGF0dHIpIHsKQEAgLTQzNCwxOSArNDI0LDMgQEAgdm9pZCBIVE1MTWFycXVlZUVsZW1lbnRJbXBs
OjpwYXJzZU1hcHBlZAogICAgICAgICAgICAgSFRNTEVsZW1lbnRJbXBsOjpwYXJzZU1hcHBlZEF0
dHJpYnV0ZShhdHRyKTsKICAgICB9CiB9Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1IVE1MTGF5
ZXJFbGVtZW50SW1wbDo6SFRNTExheWVyRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAg
ICA6IEhUTUxEaXZFbGVtZW50SW1wbCggZG9jICkKLXsKLX0KLQotSFRNTExheWVyRWxlbWVudElt
cGw6On5IVE1MTGF5ZXJFbGVtZW50SW1wbCgpCi17Ci19Ci0KLU5vZGVJbXBsOjpJZCBIVE1MTGF5
ZXJFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9MQVlFUjsKLX0KSW5k
ZXg6IGtodG1sL2h0bWwvaHRtbF9ibG9ja2ltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfYmxvY2tpbXBsLmgsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuOQpkaWZmIC11IC1wIC1yMS45IGtodG1sL2h0bWwvaHRtbF9ibG9ja2ltcGwuaAot
LS0ga2h0bWwvaHRtbC9odG1sX2Jsb2NraW1wbC5oCTExIE1heSAyMDA1IDA1OjQ5OjM0IC0wMDAw
CTEuOQorKysga2h0bWwvaHRtbC9odG1sX2Jsb2NraW1wbC5oCTggSnVsIDIwMDUgMDU6NTc6MTYg
LTAwMDAKQEAgLTI2LDcgKzI2LDYgQEAKICNkZWZpbmUgSFRNTF9CTE9DS0lNUExfSAogCiAjaW5j
bHVkZSAiaHRtbF9lbGVtZW50aW1wbC5oIgotI2luY2x1ZGUgImR0ZC5oIgogCiBuYW1lc3BhY2Ug
RE9NIHsKIApAQCAtNDAsOCArMzksOSBAQCBwdWJsaWM6CiAgICAgSFRNTEJsb2NrcXVvdGVFbGVt
ZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKTsKICAgICB+SFRNTEJsb2NrcXVvdGVFbGVtZW50SW1w
bCgpOwogCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwotCisgICAgdmlydHVhbCBIVE1MVGFn
U3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzUmVxdWly
ZWQ7IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDU7IH0K
KyAgICAKICAgICBET01TdHJpbmcgY2l0ZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0Q2l0ZShjb25z
dCBET01TdHJpbmcgJik7CiB9OwpAQCAtNTUsOCArNTUsOSBAQCBjbGFzcyBIVE1MRGl2RWxlbWVu
dEltcGwgOiBwdWJsaWMgSFRNTEVsCiBwdWJsaWM6CiAgICAgSFRNTERpdkVsZW1lbnRJbXBsKERv
Y3VtZW50UHRyICpkb2MpOwogICAgIH5IVE1MRGl2RWxlbWVudEltcGwoKTsKLQotICAgIHZpcnR1
YWwgSWQgaWQoKSBjb25zdDsKKyAgICAKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFn
UmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQorICAgIHZp
cnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gNTsgfQogICAgIAogICAgIHZp
cnR1YWwgYm9vbCBtYXBUb0VudHJ5KElkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1
bHQpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRB
dHRyaWJ1dGVJbXBsICp0b2tlbik7CkBAIC03Miw4ICs3Myw5IEBAIGNsYXNzIEhUTUxIUkVsZW1l
bnRJbXBsIDogcHVibGljIEhUTUxFbGUKIHB1YmxpYzoKICAgICBIVE1MSFJFbGVtZW50SW1wbChE
b2N1bWVudFB0ciAqZG9jKTsKICAgICB+SFRNTEhSRWxlbWVudEltcGwoKTsKLQotICAgIHZpcnR1
YWwgSWQgaWQoKSBjb25zdDsKKyAgICAKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFn
UmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNGb3JiaWRkZW47IH0KKyAgICB2
aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KICAgICAKICAgICB2
aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVz
dWx0KSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVk
QXR0cmlidXRlSW1wbCAqKTsKQEAgLTkzLDEwICs5NSwxNCBAQCBwdWJsaWM6CiAKIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KIAotY2xhc3MgSFRNTEhlYWRpbmdFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1M
R2VuZXJpY0VsZW1lbnRJbXBsCitjbGFzcyBIVE1MSGVhZGluZ0VsZW1lbnRJbXBsIDogcHVibGlj
IEhUTUxFbGVtZW50SW1wbAogewogcHVibGljOgotICAgIEhUTUxIZWFkaW5nRWxlbWVudEltcGwo
RG9jdW1lbnRQdHIgKmRvYywgdXNob3J0IF90YWdpZCk7CisgICAgSFRNTEhlYWRpbmdFbGVtZW50
SW1wbChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudFB0ciAqZG9jKTsKKwor
ICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0
dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBj
b25zdCB7IHJldHVybiA1OyB9CisJdmlydHVhbCBib29sIGNoZWNrRFREKGNvbnN0IE5vZGVJbXBs
KiBuZXdDaGlsZCk7CiAKICAgICBET01TdHJpbmcgYWxpZ24oKSBjb25zdDsKICAgICB2b2lkIHNl
dEFsaWduKGNvbnN0IERPTVN0cmluZyAmKTsKQEAgLTEwNCwyMSArMTEwLDE3IEBAIHB1YmxpYzoK
IAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0vKgotICogd2VyZSBub3QgdXNpbmcgSFRNTEVsZW1l
bnRJbXBsIGFzIHBhcmVudCBjbGFzcywgc2luY2UgYQotICogcGFyYWdyYXBoIHNob3VsZCBiZSBh
YmxlIHRvIGZsb3cgYXJvdW5kIGFsaWduZWQgb2JqZWN0cy4gVGh1cwotICogYSA8cD4gZWxlbWVu
dCBoYXMgdG8gYmUgaW5saW5lLCBhbmQgaXMgcmVuZGVyZWQgYnkKLSAqIEhUTUxCbG9ja0ltcGw6
OmNhbGNQYXJhZ3JhcGgKLSAqLwogY2xhc3MgSFRNTFBhcmFncmFwaEVsZW1lbnRJbXBsIDogcHVi
bGljIEhUTUxFbGVtZW50SW1wbAogewogcHVibGljOgogICAgIEhUTUxQYXJhZ3JhcGhFbGVtZW50
SW1wbChEb2N1bWVudFB0ciAqZG9jKTsKIAorICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRU
YWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c09wdGlvbmFsOyB9CisgICAg
dmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAzOyB9CisgICAgdmlydHVh
bCBib29sIGNoZWNrRFREKGNvbnN0IE5vZGVJbXBsKiBuZXdDaGlsZCk7CisKICAgICB2aXJ0dWFs
IGJvb2wgbWFwVG9FbnRyeShJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBj
b25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmli
dXRlSW1wbCAqYXR0cik7Ci0gICAgCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwogCiAgICAg
RE9NU3RyaW5nIGFsaWduKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRBbGlnbihjb25zdCBET01TdHJp
bmcgJik7CkBAIC0xMjYsMTMgKzEyOCwxNiBAQCBwdWJsaWM6CiAKIC8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KIAotY2xhc3MgSFRNTFByZUVsZW1lbnRJbXBsIDogcHVibGljIEhUTUxHZW5lcmljRWxlbWVu
dEltcGwKK2NsYXNzIEhUTUxQcmVFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MRWxlbWVudEltcGwK
IHsKIHB1YmxpYzoKLSAgICBIVE1MUHJlRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgdXNo
b3J0IF90YWdpZCk7CisgICAgSFRNTFByZUVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUm
IHRhZ05hbWUsIERvY3VtZW50UHRyICpkb2MpOworCisgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVz
IGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzUmVxdWlyZWQ7IH0K
KyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDU7IH0KIAogICAg
IGxvbmcgd2lkdGgoKSBjb25zdDsKLSAgICB2b2lkIHNldFdpZHRoKCBsb25nIHcgKTsKKyAgICB2
b2lkIHNldFdpZHRoKGxvbmcgdyk7CiB9OwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xNDEs
OSArMTQ2LDEwIEBAIGNsYXNzIEhUTUxNYXJxdWVlRWxlbWVudEltcGwgOiBwdWJsaWMgSFQKIHsK
IHB1YmxpYzoKICAgICBIVE1MTWFycXVlZUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpOwot
Ci0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwogICAgIAorICAgIHZpcnR1YWwgSFRNTFRhZ1N0
YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVk
OyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAzOyB9CisK
ICAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRy
eSYgcmVzdWx0KSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUo
TWFwcGVkQXR0cmlidXRlSW1wbCAqdG9rZW4pOwogCkBAIC0xNTMsMTggKzE1OSw1IEBAIHByaXZh
dGU6CiAgICAgaW50IG1fbWluaW11bURlbGF5OwogfTsKIAotLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ci1jbGFzcyBIVE1MTGF5ZXJFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MRGl2RWxlbWVudEltcGwK
LXsKLXB1YmxpYzoKLSAgICBIVE1MTGF5ZXJFbGVtZW50SW1wbCggRG9jdW1lbnRQdHIgKmRvYyAp
OwotICAgIH5IVE1MTGF5ZXJFbGVtZW50SW1wbCgpOwotCi0gICAgdmlydHVhbCBJZCBpZCgpIGNv
bnN0OwotCi0gICAgYm9vbCBmaXhlZDsKLX07Ci0KIH07IC8vbmFtZXNwYWNlCiAjZW5kaWYKSW5k
ZXg6IGtodG1sL2h0bWwvaHRtbF9jYW52YXNpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfY2FudmFzaW1wbC5jcHAsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuMwpkaWZmIC11IC1wIC1yMS4zIGtodG1sL2h0bWwvaHRtbF9jYW52YXNp
bXBsLmNwcAotLS0ga2h0bWwvaHRtbC9odG1sX2NhbnZhc2ltcGwuY3BwCTExIE1heSAyMDA1IDA1
OjQ5OjM0IC0wMDAwCTEuMworKysga2h0bWwvaHRtbC9odG1sX2NhbnZhc2ltcGwuY3BwCTggSnVs
IDIwMDUgMDU6NTc6MTcgLTAwMDAKQEAgLTU1LDcgKzU1LDcgQEAgdXNpbmcgbmFtZXNwYWNlIGto
dG1sOwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MQ2FudmFzRWxlbWVudEltcGw6OkhUTUxD
YW52YXNFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAgIDogSFRNTEltYWdlRWxlbWVu
dEltcGwoZG9jKQorICAgIDogSFRNTEltYWdlRWxlbWVudEltcGwoSFRNTE5hbWVzOjpjYW52YXMo
KSwgZG9jKQogewogfQogCkBAIC02MywxMSArNjMsNiBAQCBIVE1MQ2FudmFzRWxlbWVudEltcGw6
On5IVE1MQ2FudmFzRWxlbWVuCiB7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MQ2FudmFzRWxlbWVu
dEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfQ0FOVkFTOwotfQotCiBib29sIEhU
TUxDYW52YXNFbGVtZW50SW1wbDo6bWFwVG9FbnRyeShOb2RlSW1wbDo6SWQgYXR0ciwgTWFwcGVk
QXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3QKIHsKICAgICByZXR1cm4gSFRNTEltYWdlRWxl
bWVudEltcGw6Om1hcFRvRW50cnkoYXR0ciwgcmVzdWx0KTsKSW5kZXg6IGtodG1sL2h0bWwvaHRt
bF9jYW52YXNpbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0
bWwvaHRtbC9odG1sX2NhbnZhc2ltcGwuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yCmRpZmYg
LXUgLXAgLXIxLjIga2h0bWwvaHRtbC9odG1sX2NhbnZhc2ltcGwuaAotLS0ga2h0bWwvaHRtbC9o
dG1sX2NhbnZhc2ltcGwuaAkxMSBNYXkgMjAwNSAwNTo0OTozNCAtMDAwMAkxLjIKKysrIGtodG1s
L2h0bWwvaHRtbF9jYW52YXNpbXBsLmgJOCBKdWwgMjAwNSAwNTo1NzoxNyAtMDAwMApAQCAtNDMs
MTEgKzQzLDggQEAgY2xhc3MgSFRNTENhbnZhc0VsZW1lbnRJbXBsCiB7CiBwdWJsaWM6CiAgICAg
SFRNTENhbnZhc0VsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpOwotCiAgICAgfkhUTUxDYW52
YXNFbGVtZW50SW1wbCgpOwogCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwotCiAgICAgdmly
dHVhbCBib29sIG1hcFRvRW50cnkoTm9kZUltcGw6OklkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVu
dHJ5JiByZXN1bHQpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0
ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICopOwogCkluZGV4OiBraHRtbC9odG1sL2h0bWxfZG9jdW1l
bnRpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9o
dG1sL2h0bWxfZG9jdW1lbnRpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS42MApkaWZm
IC11IC1wIC1yMS42MCBraHRtbC9odG1sL2h0bWxfZG9jdW1lbnRpbXBsLmNwcAotLS0ga2h0bWwv
aHRtbC9odG1sX2RvY3VtZW50aW1wbC5jcHAJMTEgTWF5IDIwMDUgMDA6NTg6MjggLTAwMDAJMS42
MAorKysga2h0bWwvaHRtbC9odG1sX2RvY3VtZW50aW1wbC5jcHAJOCBKdWwgMjAwNSAwNTo1Nzox
NyAtMDAwMApAQCAtNjAsNiArNjAsNyBAQAogI2luY2x1ZGUgImh0bWwvaHRtbF9taXNjaW1wbC5o
IgogI2luY2x1ZGUgImh0bWwvaHRtbF9pbWFnZWltcGwuaCIKICNpbmNsdWRlICJodG1sL2h0bWxf
Zm9ybWltcGwuaCIKKyNpbmNsdWRlICJodG1sZmFjdG9yeS5oIgogCiAjaW5jbHVkZSAia2h0bWx2
aWV3LmgiCiAjaW5jbHVkZSAia2h0bWxfcGFydC5oIgpAQCAtMjQ2LDEyICsyNDcsMTQgQEAgVG9r
ZW5pemVyICpIVE1MRG9jdW1lbnRJbXBsOjpjcmVhdGVUb2tlbgogYm9vbCBIVE1MRG9jdW1lbnRJ
bXBsOjpjaGlsZEFsbG93ZWQoIE5vZGVJbXBsICpuZXdDaGlsZCApCiB7CiAgICAgLy8gIyMjIHN1
cHBvcnQgY29tbWVudHMuIGV0YyBhcyBhIGNoaWxkCi0gICAgcmV0dXJuIChuZXdDaGlsZC0+aWQo
KSA9PSBJRF9IVE1MIHx8IG5ld0NoaWxkLT5pZCgpID09IElEX0NPTU1FTlQpOworICAgIHJldHVy
biAobmV3Q2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpodG1sKCkpIHx8IG5ld0NoaWxkLT5p
c0NvbW1lbnROb2RlKCkpOwogfQogCi1FbGVtZW50SW1wbCAqSFRNTERvY3VtZW50SW1wbDo6Y3Jl
YXRlRWxlbWVudCggY29uc3QgRE9NU3RyaW5nICZuYW1lLCBpbnQgJmV4Y2VwdGlvbmNvZGUgKQor
RWxlbWVudEltcGwgKkhUTUxEb2N1bWVudEltcGw6OmNyZWF0ZUVsZW1lbnQoY29uc3QgRE9NU3Ry
aW5nICZuYW1lLCBpbnQgJmV4Y2VwdGlvbmNvZGUpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUhUTUxF
bGVtZW50KG5hbWUsIGV4Y2VwdGlvbmNvZGUpOworICAgIC8vIERvIG5vdCBjaGVjayBuYW1lIHZh
bGlkaXR5LiAgT3RoZXIgYnJvd3NlcnMgZG9uJ3QsIGFuZCBpdCB0YWtlcyB0aW1lLgorICAgIERP
TVN0cmluZyBsb3dlck5hbWUobmFtZS5sb3dlcigpKTsKKyAgICByZXR1cm4gSFRNTEVsZW1lbnRG
YWN0b3J5OjpjcmVhdGVIVE1MRWxlbWVudChBdG9taWNTdHJpbmcobG93ZXJOYW1lKSwgdGhpcywg
MCwgZmFsc2UpOwogfQogCiB2b2lkIEhUTUxEb2N1bWVudEltcGw6OnNsb3RIaXN0b3J5Q2hhbmdl
ZCgpCkluZGV4OiBraHRtbC9odG1sL2h0bWxfZG9jdW1lbnRpbXBsLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sX2RvY3VtZW50aW1wbC5oLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjI5CmRpZmYgLXUgLXAgLXIxLjI5IGtodG1sL2h0bWwvaHRt
bF9kb2N1bWVudGltcGwuaAotLS0ga2h0bWwvaHRtbC9odG1sX2RvY3VtZW50aW1wbC5oCTExIE1h
eSAyMDA1IDAwOjU4OjI4IC0wMDAwCTEuMjkKKysrIGtodG1sL2h0bWwvaHRtbF9kb2N1bWVudGlt
cGwuaAk4IEp1bCAyMDA1IDA1OjU3OjE3IC0wMDAwCkBAIC0zNCw3ICszNCw3IEBAIGNsYXNzIFFT
dHJpbmc7CiAKIG5hbWVzcGFjZSBET00gewogCi0gICAgY2xhc3MgSFRNTEVsZW1lbnRJbXBsOwor
Y2xhc3MgSFRNTEVsZW1lbnRJbXBsOwogCiBjbGFzcyBIVE1MRG9jdW1lbnRJbXBsIDogcHVibGlj
IERPTTo6RG9jdW1lbnRJbXBsLCBwdWJsaWMga2h0bWw6OkNhY2hlZE9iamVjdENsaWVudAogewpJ
bmRleDoga2h0bWwvaHRtbC9odG1sX2VsZW1lbnRpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfZWxlbWVudGltcGwuY3BwLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjg3CmRpZmYgLXUgLXAgLXIxLjg3IGtodG1sL2h0bWwvaHRtbF9l
bGVtZW50aW1wbC5jcHAKLS0tIGtodG1sL2h0bWwvaHRtbF9lbGVtZW50aW1wbC5jcHAJMTMgTWF5
IDIwMDUgMTY6NDg6NTEgLTAwMDAJMS44NworKysga2h0bWwvaHRtbC9odG1sX2VsZW1lbnRpbXBs
LmNwcAk4IEp1bCAyMDA1IDA1OjU3OjE4IC0wMDAwCkBAIC0yOCwxMiArMjgsMTMgQEAKIC8vI2Rl
ZmluZSBFVkVOVF9ERUJVRwogLy8jZGVmaW5lIFVOU1VQUE9SVEVEX0FUVFIKIAotI2luY2x1ZGUg
Imh0bWwvZHRkLmgiCiAjaW5jbHVkZSAiaHRtbC9odG1sX2VsZW1lbnRpbXBsLmgiCiAjaW5jbHVk
ZSAiaHRtbC9odG1sX2RvY3VtZW50aW1wbC5oIgogI2luY2x1ZGUgImh0bWwvaHRtbHRva2VuaXpl
ci5oIgorI2luY2x1ZGUgImh0bWxmYWN0b3J5LmgiCiAKICNpbmNsdWRlICJtaXNjL2h0bWxoYXNo
ZXMuaCIKKyNpbmNsdWRlICJtaXNjL2hhc2hzZXQuaCIKICNpbmNsdWRlICJlZGl0aW5nL3Zpc2li
bGVfdGV4dC5oIgogCiAjaW5jbHVkZSAia2h0bWx2aWV3LmgiCkBAIC01OCw4ICs1OSw4IEBAIHVz
aW5nIG5hbWVzcGFjZSBraHRtbDsKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUhUTUxFbGVtZW50SW1wbDo6
SFRNTEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0gICAgOiBTdHlsZWRFbGVtZW50SW1w
bChkb2MpCitIVE1MRWxlbWVudEltcGw6OkhUTUxFbGVtZW50SW1wbChjb25zdCBRdWFsaWZpZWRO
YW1lJiB0YWdOYW1lLCBEb2N1bWVudFB0ciAqZG9jKQorICAgIDogU3R5bGVkRWxlbWVudEltcGwo
dGFnTmFtZSwgZG9jKQogewogfQogCkBAIC02Nyw1MSArNjgsNDAgQEAgSFRNTEVsZW1lbnRJbXBs
Ojp+SFRNTEVsZW1lbnRJbXBsKCkKIHsKIH0KIAotYm9vbCBIVE1MRWxlbWVudEltcGw6OmlzSW5s
aW5lKCkgY29uc3QKK0RPTVN0cmluZyBIVE1MRWxlbWVudEltcGw6Om5vZGVOYW1lKCkgY29uc3QK
IHsKLSAgICBpZiAocmVuZGVyZXIoKSkKLSAgICAgICAgcmV0dXJuIEVsZW1lbnRJbXBsOjppc0lu
bGluZSgpOwotICAgIAotICAgIHN3aXRjaChpZCgpKSB7Ci0gICAgICAgIGNhc2UgSURfQToKLSAg
ICAgICAgY2FzZSBJRF9GT05UOgotICAgICAgICBjYXNlIElEX1RUOgotICAgICAgICBjYXNlIElE
X1U6Ci0gICAgICAgIGNhc2UgSURfQjoKLSAgICAgICAgY2FzZSBJRF9JOgotICAgICAgICBjYXNl
IElEX1M6Ci0gICAgICAgIGNhc2UgSURfU1RSSUtFOgotICAgICAgICBjYXNlIElEX0JJRzoKLSAg
ICAgICAgY2FzZSBJRF9TTUFMTDoKLSAgICAKLSAgICAgICAgICAgIC8vICVwaHJhc2UKLSAgICAg
ICAgY2FzZSBJRF9FTToKLSAgICAgICAgY2FzZSBJRF9TVFJPTkc6Ci0gICAgICAgIGNhc2UgSURf
REZOOgotICAgICAgICBjYXNlIElEX0NPREU6Ci0gICAgICAgIGNhc2UgSURfU0FNUDoKLSAgICAg
ICAgY2FzZSBJRF9LQkQ6Ci0gICAgICAgIGNhc2UgSURfVkFSOgotICAgICAgICBjYXNlIElEX0NJ
VEU6Ci0gICAgICAgIGNhc2UgSURfQUJCUjoKLSAgICAgICAgY2FzZSBJRF9BQ1JPTllNOgorICAg
IC8vIEZJWE1FOiBXb3VsZCBiZSBuaWNlIHRvIGhhdmUgYW4gYXRvbWljc3RyaW5nIGxvb2t1cCBi
YXNlZCBvZmYgdXBwZXJjYXNlIGNoYXJzIHRoYXQgZG9lcyBub3QgaGF2ZSB0byBjb3B5CisgICAg
Ly8gdGhlIHN0cmluZyBvbiBhIGhpdCBpbiB0aGUgaGFzaC4KKyAgICBpZiAoZ2V0RG9jdW1lbnQo
KS0+aXNIVE1MRG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIG1fdGFnTmFtZS5sb2NhbE5hbWUo
KS5pbXBsZW1lbnRhdGlvbigpLT51cHBlcigpOworICAgIHJldHVybiBFbGVtZW50SW1wbDo6bm9k
ZU5hbWUoKTsKK30KICAgICAKLSAgICAgICAgICAgIC8vICVzcGVjaWFsCi0gICAgICAgIGNhc2Ug
SURfU1VCOgotICAgICAgICBjYXNlIElEX1NVUDoKLSAgICAgICAgY2FzZSBJRF9TUEFOOgotICAg
ICAgICBjYXNlIElEX05PQlI6Ci0gICAgICAgIGNhc2UgSURfV0JSOgotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJl
dHVybiBFbGVtZW50SW1wbDo6aXNJbmxpbmUoKTsKLSAgICB9CitIVE1MVGFnU3RhdHVzIEhUTUxF
bGVtZW50SW1wbDo6ZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdAoreworICAgIGlmIChoYXNMb2Nh
bE5hbWUoSFRNTE5hbWVzOjpkdCgpKSB8fCBoYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpkZCgpKSkK
KyAgICAgICAgcmV0dXJuIFRhZ1N0YXR1c09wdGlvbmFsOworCisgICAgLy8gU2FtZSB2YWx1ZXMg
YXMgPHNwYW4+LiAgVGhpcyB3YXkgY3VzdG9tIHRhZyBuYW1lIGVsZW1lbnRzIHdpbGwgYmVoYXZl
IGxpa2UgaW5saW5lIHNwYW5zLgorICAgIHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsKK30KKwor
aW50IEhUTUxFbGVtZW50SW1wbDo6dGFnUHJpb3JpdHkoKSBjb25zdAoreworICAgIGlmIChoYXNM
b2NhbE5hbWUoSFRNTE5hbWVzOjphZGRyZXNzKCkpIHx8IGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6
OmRkKCkpIHx8IGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmR0KCkpIHx8IGhhc0xvY2FsTmFtZShI
VE1MTmFtZXM6Om5vc2NyaXB0KCkpKQorICAgICAgICByZXR1cm4gMzsKKyAgICBpZiAoaGFzTG9j
YWxOYW1lKEhUTUxOYW1lczo6Y2VudGVyKCkpIHx8IGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om5v
YnIoKSkpCisgICAgICAgIHJldHVybiA1OworICAgIGlmIChoYXNMb2NhbE5hbWUoSFRNTE5hbWVz
Ojpub2VtYmVkKCkpIHx8IGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om5vZnJhbWVzKCkpKQorICAg
ICAgICByZXR1cm4gMTA7CisKKyAgICAvLyBTYW1lIHZhbHVlcyBhcyA8c3Bhbj4uICBUaGlzIHdh
eSBjdXN0b20gdGFnIG5hbWUgZWxlbWVudHMgd2lsbCBiZWhhdmUgbGlrZSBpbmxpbmUgc3BhbnMu
CisgICAgcmV0dXJuIDE7CiB9CiAKIE5vZGVJbXBsICpIVE1MRWxlbWVudEltcGw6OmNsb25lTm9k
ZShib29sIGRlZXApCiB7Ci0gICAgSFRNTEVsZW1lbnRJbXBsICpjbG9uZSA9IHN0YXRpY19jYXN0
PEhUTUxFbGVtZW50SW1wbCAqPihnZXREb2N1bWVudCgpLT5jcmVhdGVIVE1MRWxlbWVudChsb2Nh
bE5hbWVQYXJ0KGlkKCkpKSk7CisgICAgSFRNTEVsZW1lbnRJbXBsICpjbG9uZSA9IEhUTUxFbGVt
ZW50RmFjdG9yeTo6Y3JlYXRlSFRNTEVsZW1lbnQobG9jYWxOYW1lKCksIGdldERvY3VtZW50KCks
IDAsIGZhbHNlKTsKICAgICBpZiAoIWNsb25lKQogICAgICAgICByZXR1cm4gMDsKIApAQCAtMzI1
LDI2ICszMTUsMTcgQEAgRE9NU3RyaW5nIEhUTUxFbGVtZW50SW1wbDo6b3V0ZXJUZXh0KCkgYwog
RG9jdW1lbnRGcmFnbWVudEltcGwgKkhUTUxFbGVtZW50SW1wbDo6Y3JlYXRlQ29udGV4dHVhbEZy
YWdtZW50KGNvbnN0IERPTVN0cmluZyAmaHRtbCkKIHsKICAgICAvLyB0aGUgZm9sbG93aW5nIGlz
IGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgZGVmaW5pdGlvbiBhcyB1c2VkIGJ5IElFCi0gICAgaWYo
IGVuZFRhZ1JlcXVpcmVtZW50KGlkKCkpID09IEZPUkJJRERFTiApCi0gICAgICAgIHJldHVybiBO
VUxMOwotICAgIC8vIElFIGRpc2FsbG93cyBpbm5lckhUTUwgb24gaW5saW5lIGVsZW1lbnRzLiBJ
IGRvbid0IHNlZSB3aHkgd2Ugc2hvdWxkIGhhdmUgdGhpcyByZXN0cmljdGlvbiwgYXMgb3VyCi0g
ICAgLy8gZGh0bWwgZW5naW5lIGNhbiBjb3BlIHdpdGggaXQuIExhcnMKLSAgICAvL2lmICggaXNJ
bmxpbmUoKSApIHJldHVybiBmYWxzZTsKLSAgICBzd2l0Y2goIGlkKCkgKSB7Ci0gICAgICAgIGNh
c2UgSURfQ09MOgotICAgICAgICBjYXNlIElEX0NPTEdST1VQOgotICAgICAgICBjYXNlIElEX0ZS
QU1FU0VUOgotICAgICAgICBjYXNlIElEX0hFQUQ6Ci0gICAgICAgIGNhc2UgSURfU1RZTEU6Ci0g
ICAgICAgIGNhc2UgSURfVElUTEU6Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBpZiAoICFnZXREb2N1bWVu
dCgpLT5pc0hUTUxEb2N1bWVudCgpICkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKGVu
ZFRhZ1JlcXVpcmVtZW50KCkgPT0gVGFnU3RhdHVzRm9yYmlkZGVuKQorICAgICAgICByZXR1cm4g
MDsKKworICAgIGlmIChoYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpjb2woKSkgfHwgaGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6Y29sZ3JvdXAoKSkgfHwgaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6ZnJh
bWVzZXQoKSkgfHwKKyAgICAgICAgaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6aGVhZCgpKSB8fCBo
YXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpzdHlsZSgpKSB8fCBoYXNMb2NhbE5hbWUoSFRNTE5hbWVz
Ojp0aXRsZSgpKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoIWdldERvY3VtZW50KCkt
PmlzSFRNTERvY3VtZW50KCkpCisgICAgICAgIHJldHVybiAwOwogCi0gICAgRG9jdW1lbnRGcmFn
bWVudEltcGwgKmZyYWdtZW50ID0gbmV3IERvY3VtZW50RnJhZ21lbnRJbXBsKCBkb2NQdHIoKSAp
OworICAgIERvY3VtZW50RnJhZ21lbnRJbXBsICpmcmFnbWVudCA9IG5ldyBEb2N1bWVudEZyYWdt
ZW50SW1wbChkb2NQdHIoKSk7CiAgICAgZnJhZ21lbnQtPnJlZigpOwogICAgIHsKICAgICAgICAg
SFRNTFRva2VuaXplciB0b2soZG9jUHRyKCksIGZyYWdtZW50KTsKQEAgLTM1OCwxNCArMzM5LDE0
IEBAIERvY3VtZW50RnJhZ21lbnRJbXBsICpIVE1MRWxlbWVudEltcGw6OmMKICAgICBpbnQgaWdu
b3JlZEV4Y2VwdGlvbkNvZGU7CiAKICAgICAvLyB3ZSBuZWVkIHRvIHBvcCA8aHRtbD4gYW5kIDxi
b2R5PiBlbGVtZW50cyBhbmQgcmVtb3ZlIDxoZWFkPiB0bwotICAgIC8vIGFjY29tYWRhdGUgZm9s
a3MgcGFzc2luZyBjb21wbGV0ZSBIVE1MIGRvY3VtZW50cyB0byBtYWtlIHRoZQorICAgIC8vIGFj
Y29tbW9kYXRlIGZvbGtzIHBhc3NpbmcgY29tcGxldGUgSFRNTCBkb2N1bWVudHMgdG8gbWFrZSB0
aGUKICAgICAvLyBjaGlsZCBvZiBhbiBlbGVtZW50LgogCiAgICAgTm9kZUltcGwgKm5leHROb2Rl
OwogICAgIGZvciAoTm9kZUltcGwgKm5vZGUgPSBmcmFnbWVudC0+Zmlyc3RDaGlsZCgpOyBub2Rl
ICE9IE5VTEw7IG5vZGUgPSBuZXh0Tm9kZSkgewogICAgICAgICBuZXh0Tm9kZSA9IG5vZGUtPm5l
eHRTaWJsaW5nKCk7CiAJbm9kZS0+cmVmKCk7Ci0gICAgICAgIGlmIChub2RlLT5pZCgpID09IElE
X0hUTUwgfHwgbm9kZS0+aWQoKSA9PSBJRF9CT0RZKSB7CisgICAgICAgIGlmIChub2RlLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6aHRtbCgpKSB8fCBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
Ym9keSgpKSkgewogCSAgICBOb2RlSW1wbCAqZmlyc3RDaGlsZCA9IG5vZGUtPmZpcnN0Q2hpbGQo
KTsKICAgICAgICAgICAgIGlmIChmaXJzdENoaWxkICE9IE5VTEwpIHsKICAgICAgICAgICAgICAg
ICBuZXh0Tm9kZSA9IGZpcnN0Q2hpbGQ7CkBAIC0zNzksOSArMzYwLDkgQEAgRG9jdW1lbnRGcmFn
bWVudEltcGwgKkhUTUxFbGVtZW50SW1wbDo6YwogICAgICAgICAgICAgICAgIGNoaWxkLT5kZXJl
ZigpOwogCSAgICB9CiAgICAgICAgICAgICBmcmFnbWVudC0+cmVtb3ZlQ2hpbGQobm9kZSwgaWdu
b3JlZEV4Y2VwdGlvbkNvZGUpOwotCX0gZWxzZSBpZiAobm9kZS0+aWQoKSA9PSBJRF9IRUFEKSB7
CisJfSBlbHNlIGlmIChub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aGVhZCgpKSkKIAkgICAg
ZnJhZ21lbnQtPnJlbW92ZUNoaWxkKG5vZGUsIGlnbm9yZWRFeGNlcHRpb25Db2RlKTsKLQl9CisK
ICAgICAgICAgLy8gSW1wb3J0YW50IHRvIGRvIHRoaXMgZGVyZWYgYWZ0ZXIgcmVtb3ZlQ2hpbGQs
IGJlY2F1c2UgaWYgdGhlIG9ubHkgdGhpbmcKICAgICAgICAgLy8ga2VlcGluZyBhIG5vZGUgYXJv
dW5kIGlzIGEgcGFyZW50IHRoYXQgaXMgbm9uLTAsIHJlbW92ZUNoaWxkIHdpbGwgbm90CiAgICAg
ICAgIC8vIGRlbGV0ZSB0aGUgbm9kZS4gVGhpcyB3b3JrcyBmaW5lIGluIEphdmFTY3JpcHQgYmVj
YXVzZSB0aGVyZSdzIGFsd2F5cwpAQCAtNDAwLDcgKzM4MSw3IEBAIERvY3VtZW50RnJhZ21lbnRJ
bXBsICpIVE1MRWxlbWVudEltcGw6OmMKIAogdm9pZCBIVE1MRWxlbWVudEltcGw6OnNldElubmVy
SFRNTChjb25zdCBET01TdHJpbmcgJmh0bWwsIGludCAmZXhjZXB0aW9uKQogewotICAgIERvY3Vt
ZW50RnJhZ21lbnRJbXBsICpmcmFnbWVudCA9IGNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCggaHRt
bCApOworICAgIERvY3VtZW50RnJhZ21lbnRJbXBsICpmcmFnbWVudCA9IGNyZWF0ZUNvbnRleHR1
YWxGcmFnbWVudChodG1sKTsKICAgICBpZiAoZnJhZ21lbnQgPT0gTlVMTCkgewogCWV4Y2VwdGlv
biA9IERPTUV4Y2VwdGlvbjo6Tk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOwogICAgICAgICBy
ZXR1cm47CkBAIC00MTgsNyArMzk5LDcgQEAgdm9pZCBIVE1MRWxlbWVudEltcGw6OnNldE91dGVy
SFRNTChjb25zdAogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIEhUTUxFbGVtZW50SW1wbCAq
cGFyZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KHApOwotICAgIERvY3VtZW50
RnJhZ21lbnRJbXBsICpmcmFnbWVudCA9IHBhcmVudC0+Y3JlYXRlQ29udGV4dHVhbEZyYWdtZW50
KCBodG1sICk7CisgICAgRG9jdW1lbnRGcmFnbWVudEltcGwgKmZyYWdtZW50ID0gcGFyZW50LT5j
cmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoaHRtbCk7CiAKICAgICBpZiAoIWZyYWdtZW50KSB7CiAJ
ZXhjZXB0aW9uID0gRE9NRXhjZXB0aW9uOjpOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI7CkBA
IC00MzQsMjkgKzQxNSwxNyBAQCB2b2lkIEhUTUxFbGVtZW50SW1wbDo6c2V0T3V0ZXJIVE1MKGNv
bnN0CiB2b2lkIEhUTUxFbGVtZW50SW1wbDo6c2V0SW5uZXJUZXh0KGNvbnN0IERPTVN0cmluZyAm
dGV4dCwgaW50ICZleGNlcHRpb24pCiB7CiAgICAgLy8gZm9sbG93aW5nIHRoZSBJRSBzcGVjcy4K
LSAgICBpZiAoZW5kVGFnUmVxdWlyZW1lbnQoaWQoKSkgPT0gRk9SQklEREVOKSB7CisgICAgaWYg
KGVuZFRhZ1JlcXVpcmVtZW50KCkgPT0gVGFnU3RhdHVzRm9yYmlkZGVuKSB7CiAJZXhjZXB0aW9u
ID0gRE9NRXhjZXB0aW9uOjpOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICAvLyBJRSBkaXNhbGxvd3MgaW5uZXJUZXh0IG9uIGlubGluZSBl
bGVtZW50cy4gSSBkb24ndCBzZWUgd2h5IHdlIHNob3VsZCBoYXZlIHRoaXMgcmVzdHJpY3Rpb24s
IGFzIG91cgotICAgIC8vIGRodG1sIGVuZ2luZSBjYW4gY29wZSB3aXRoIGl0LiBMYXJzCi0gICAg
Ly9pZiAoIGlzSW5saW5lKCkgKSByZXR1cm4gZmFsc2U7Ci0gICAgc3dpdGNoKCBpZCgpICkgewot
ICAgICAgICBjYXNlIElEX0NPTDoKLSAgICAgICAgY2FzZSBJRF9DT0xHUk9VUDoKLSAgICAgICAg
Y2FzZSBJRF9GUkFNRVNFVDoKLSAgICAgICAgY2FzZSBJRF9IRUFEOgotICAgICAgICBjYXNlIElE
X0hUTUw6Ci0gICAgICAgIGNhc2UgSURfVEFCTEU6Ci0gICAgICAgIGNhc2UgSURfVEJPRFk6Ci0g
ICAgICAgIGNhc2UgSURfVEZPT1Q6Ci0gICAgICAgIGNhc2UgSURfVEhFQUQ6Ci0gICAgICAgIGNh
c2UgSURfVFI6Ci0gICAgICAgICAgICBleGNlcHRpb24gPSBET01FeGNlcHRpb246Ok5PX01PRElG
SUNBVElPTl9BTExPV0VEX0VSUjsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgIGJyZWFrOworICAgIGlmIChoYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpj
b2woKSkgfHwgaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6Y29sZ3JvdXAoKSkgfHwgaGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6ZnJhbWVzZXQoKSkgfHwKKyAgICAgICAgaGFzTG9jYWxOYW1lKEhUTUxO
YW1lczo6aGVhZCgpKSB8fCBoYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpodG1sKCkpIHx8IGhhc0xv
Y2FsTmFtZShIVE1MTmFtZXM6OnRhYmxlKCkpIHx8IAorICAgICAgICBoYXNMb2NhbE5hbWUoSFRN
TE5hbWVzOjp0Ym9keSgpKSB8fCBoYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0Zm9vdCgpKSB8fCBo
YXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0aGVhZCgpKSB8fAorICAgICAgICBoYXNMb2NhbE5hbWUo
SFRNTE5hbWVzOjp0cigpKSkgeworICAgICAgICBleGNlcHRpb24gPSBET01FeGNlcHRpb246Ok5P
X01PRElGSUNBVElPTl9BTExPV0VEX0VSUjsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAg
IHJlbW92ZUNoaWxkcmVuKCk7CkBAIC00NjYsMjUgKzQzNSwxNyBAQCB2b2lkIEhUTUxFbGVtZW50
SW1wbDo6c2V0SW5uZXJUZXh0KGNvbnN0CiB2b2lkIEhUTUxFbGVtZW50SW1wbDo6c2V0T3V0ZXJU
ZXh0KGNvbnN0IERPTVN0cmluZyAmdGV4dCwgaW50ICZleGNlcHRpb24pCiB7CiAgICAgLy8gZm9s
bG93aW5nIHRoZSBJRSBzcGVjcy4KLSAgICBpZiggZW5kVGFnUmVxdWlyZW1lbnQoaWQoKSkgPT0g
Rk9SQklEREVOICkgeworICAgIGlmIChlbmRUYWdSZXF1aXJlbWVudCgpID09IFRhZ1N0YXR1c0Zv
cmJpZGRlbikgewogCWV4Y2VwdGlvbiA9IERPTUV4Y2VwdGlvbjo6Tk9fTU9ESUZJQ0FUSU9OX0FM
TE9XRURfRVJSOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIHN3aXRjaCggaWQoKSApIHsK
LSAgICAgICAgY2FzZSBJRF9DT0w6Ci0gICAgICAgIGNhc2UgSURfQ09MR1JPVVA6Ci0gICAgICAg
IGNhc2UgSURfRlJBTUVTRVQ6Ci0gICAgICAgIGNhc2UgSURfSEVBRDoKLSAgICAgICAgY2FzZSBJ
RF9IVE1MOgotICAgICAgICBjYXNlIElEX1RBQkxFOgotICAgICAgICBjYXNlIElEX1RCT0RZOgot
ICAgICAgICBjYXNlIElEX1RGT09UOgotICAgICAgICBjYXNlIElEX1RIRUFEOgotICAgICAgICBj
YXNlIElEX1RSOgotICAgICAgICAgICAgZXhjZXB0aW9uID0gRE9NRXhjZXB0aW9uOjpOT19NT0RJ
RklDQVRJT05fQUxMT1dFRF9FUlI7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICBicmVhazsKKworICAgIGlmIChoYXNMb2NhbE5hbWUoSFRNTE5hbWVz
Ojpjb2woKSkgfHwgaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6Y29sZ3JvdXAoKSkgfHwgaGFzTG9j
YWxOYW1lKEhUTUxOYW1lczo6ZnJhbWVzZXQoKSkgfHwKKyAgICAgICAgaGFzTG9jYWxOYW1lKEhU
TUxOYW1lczo6aGVhZCgpKSB8fCBoYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpodG1sKCkpIHx8IGhh
c0xvY2FsTmFtZShIVE1MTmFtZXM6OnRhYmxlKCkpIHx8IAorICAgICAgICBoYXNMb2NhbE5hbWUo
SFRNTE5hbWVzOjp0Ym9keSgpKSB8fCBoYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0Zm9vdCgpKSB8
fCBoYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0aGVhZCgpKSB8fAorICAgICAgICBoYXNMb2NhbE5h
bWUoSFRNTE5hbWVzOjp0cigpKSkgeworICAgICAgICBleGNlcHRpb24gPSBET01FeGNlcHRpb246
Ok5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUjsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAog
ICAgIE5vZGVJbXBsICpwYXJlbnQgPSBwYXJlbnROb2RlKCk7CkBAIC01MjUsMTcgKzQ4Niw2IEBA
IHZvaWQgSFRNTEVsZW1lbnRJbXBsOjpzZXRPdXRlclRleHQoY29uc3QKICAgICB9CiB9CiAKLQot
RE9NU3RyaW5nIEhUTUxFbGVtZW50SW1wbDo6bmFtZXNwYWNlVVJJKCkgY29uc3QKLXsKLSAgICAv
LyBGb3IgSFRNTCBkb2N1bWVudHMsIHdlIHRyZWF0IEhUTUwgZWxlbWVudHMgYXMgaGF2aW5nIG5v
IG5hbWVzcGFjZS4gQnV0IGZvciBYTUwgZG9jdW1lbnRzCi0gICAgLy8gdGhlIGVsZW1lbnRzIGhh
dmUgdGhlIG5hbWVzcGFjZSBkZWZpbmVkIGluIHRoZSBYSFRNTCBzcGVjCi0gICAgaWYgKGdldERv
Y3VtZW50KCktPmlzSFRNTERvY3VtZW50KCkpCi0gICAgICAgIHJldHVybiBET01TdHJpbmcoKTsK
LSAgICBlbHNlCi0gICAgICAgIHJldHVybiBYSFRNTF9OQU1FU1BBQ0U7Ci19Ci0KIHZvaWQgSFRN
TEVsZW1lbnRJbXBsOjphZGRIVE1MQWxpZ25tZW50KE1hcHBlZEF0dHJpYnV0ZUltcGwqIGF0dHIp
CiB7CiAgICAgLy9xRGVidWcoImFsaWdubWVudCBpcyAlcyIsIGFsaWdubWVudC5zdHJpbmcoKS5s
YXRpbjEoKSApOwpAQCAtNjgyLDkgKzYzMiw5IEBAIERPTVN0cmluZyBIVE1MRWxlbWVudEltcGw6
OnRvU3RyaW5nKCkgY28KIAlET01TdHJpbmcgcmVzdWx0ID0gb3BlblRhZ1N0YXJ0VG9TdHJpbmco
KTsKIAlyZXN1bHQgKz0gIj4iOwogCi0JaWYgKGVuZFRhZ1JlcXVpcmVtZW50KGlkKCkpID09IFJF
UVVJUkVEKSB7CisJaWYgKGVuZFRhZ1JlcXVpcmVtZW50KCkgPT0gVGFnU3RhdHVzUmVxdWlyZWQp
IHsKIAkgICAgcmVzdWx0ICs9ICI8LyI7Ci0JICAgIHJlc3VsdCArPSB0YWdOYW1lKCk7CisJICAg
IHJlc3VsdCArPSBub2RlTmFtZSgpOwogCSAgICByZXN1bHQgKz0gIj4iOwogCX0KIApAQCAtNjk0
LDcgKzY0NCw3IEBAIERPTVN0cmluZyBIVE1MRWxlbWVudEltcGw6OnRvU3RyaW5nKCkgY28KICAg
ICByZXR1cm4gRWxlbWVudEltcGw6OnRvU3RyaW5nKCk7CiB9CiAKLURPTVN0cmluZyBIVE1MRWxl
bWVudEltcGw6OmlkRE9NKCkgY29uc3QKK0RPTVN0cmluZyBIVE1MRWxlbWVudEltcGw6OmlkKCkg
Y29uc3QKIHsKICAgICByZXR1cm4gZ2V0QXR0cmlidXRlKEFUVFJfSUQpOwogfQpAQCAtNzQ5LDE1
ICs2OTksMjg3IEBAIFNoYXJlZFB0cjxIVE1MQ29sbGVjdGlvbkltcGw+IEhUTUxFbGVtZW4KICAg
ICByZXR1cm4gU2hhcmVkUHRyPEhUTUxDb2xsZWN0aW9uSW1wbD4obmV3IEhUTUxDb2xsZWN0aW9u
SW1wbCh0aGlzLCBIVE1MQ29sbGVjdGlvbkltcGw6Ok5PREVfQ0hJTERSRU4pKTsKIH0KIAotLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorLy8gRE9NIFNlY3Rpb24gMS4xLjEKK2Jvb2wgSFRNTEVsZW1lbnRJ
bXBsOjpjaGlsZEFsbG93ZWQoTm9kZUltcGwgKm5ld0NoaWxkKQoreworICAgIGlmICghRWxlbWVu
dEltcGw6OmNoaWxkQWxsb3dlZChuZXdDaGlsZCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAot
SFRNTEdlbmVyaWNFbGVtZW50SW1wbDo6SFRNTEdlbmVyaWNFbGVtZW50SW1wbChEb2N1bWVudFB0
ciAqZG9jLCB1c2hvcnQgaSkKLSAgICA6IEhUTUxFbGVtZW50SW1wbChkb2MpCisgICAgLy8gRm9y
IFhNTCBkb2N1bWVudHMsIHdlIGFyZSBub24tdmFsaWRhdGluZyBhbmQgZG8gbm90IGNoZWNrIGFn
YWluc3QgYSBEVEQsIGV2ZW4gZm9yIEhUTUwgZWxlbWVudHMuCisJaWYgKCFnZXREb2N1bWVudCgp
LT5pc0hUTUxEb2N1bWVudCgpKQorCQlyZXR1cm4gdHJ1ZTsKKwkKKwkvLyBGdXR1cmUtcHJvb2Yg
Zm9yIFhNTCBjb250ZW50IGluc2lkZSBIVE1MIGRvY3VtZW50cyAod2UgbWF5IGFsbG93IHRoaXMg
c29tZSBkYXkpLgorCWlmIChuZXdDaGlsZC0+aXNFbGVtZW50Tm9kZSgpICYmICFuZXdDaGlsZC0+
aXNIVE1MRWxlbWVudCgpKQorCQlyZXR1cm4gdHJ1ZTsKKworCS8vIEVsZW1lbnRzIHdpdGggZm9y
YmlkZGVuIHRhZyBzdGF0dXMgY2FuIG5ldmVyIGhhdmUgY2hpbGRyZW4KKwlpZiAoZW5kVGFnUmVx
dWlyZW1lbnQoKSA9PSBUYWdTdGF0dXNGb3JiaWRkZW4pCisJCXJldHVybiBmYWxzZTsKKworCS8v
IENvbW1lbnQgbm9kZXMgYXJlIGFsd2F5cyBhbGxvd2VkLgorCWlmIChuZXdDaGlsZC0+aXNDb21t
ZW50Tm9kZSgpKQorCQlyZXR1cm4gdHJ1ZTsKKworICAgIC8vIE5vdyBjYWxsIGNoZWNrRFRELgor
CXJldHVybiBjaGVja0RURChuZXdDaGlsZCk7Cit9CisKKy8vIERURCBTdHVmZgorLy8gVGhpcyB1
bmZvcnR1bmF0ZSBmdW5jdGlvbiBpcyBvbmx5IG5lZWRlZCB3aGVuIGNoZWNraW5nIGFnYWluc3Qg
dGhlIERURC4gIE90aGVyIGxhbmd1YWdlcyAobGlrZSBTVkcpIHdvbid0IG5lZWQgdGhpcy4KK2Jv
b2wgSFRNTEVsZW1lbnRJbXBsOjppc1JlY29nbml6ZWRUYWdOYW1lKGNvbnN0IFF1YWxpZmllZE5h
bWUmIHRhZ05hbWUpCit7CisgICAgc3RhdGljIEhhc2hTZXQ8RE9NU3RyaW5nSW1wbCosIFBvaW50
ZXJIYXNoPERPTVN0cmluZ0ltcGwqPiA+IHRhZ0xpc3Q7CisgICAgaWYgKHRhZ0xpc3QuaXNFbXB0
eSgpKSB7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6YSgpLmxvY2FsTmFtZVB0
cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjphYmJyKCkubG9jYWxOYW1l
UHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmFjcm9ueW0oKS5sb2Nh
bE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6YWRkcmVzcygp
LmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjphcHBs
ZXQoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6
YXJlYSgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVz
OjpiKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6
OmJhc2UoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1l
czo6YmFzZWZvbnQoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhU
TUxOYW1lczo6YmRvKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChI
VE1MTmFtZXM6OmJpZygpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQo
SFRNTE5hbWVzOjpibG9ja3F1b3RlKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0
Lmluc2VydChIVE1MTmFtZXM6OmJvZHkoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xp
c3QuaW5zZXJ0KEhUTUxOYW1lczo6YnIoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xp
c3QuaW5zZXJ0KEhUTUxOYW1lczo6YnV0dG9uKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0
YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmNhbnZhcygpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAg
ICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpjYXB0aW9uKCkubG9jYWxOYW1lUHRyKCkpOwor
ICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmNlbnRlcigpLmxvY2FsTmFtZVB0cigp
KTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpjaXRlKCkubG9jYWxOYW1lUHRy
KCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmNvZGUoKS5sb2NhbE5hbWVQ
dHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6Y29sKCkubG9jYWxOYW1l
UHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmNvbGdyb3VwKCkubG9j
YWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmRkKCkubG9j
YWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmRlbCgpLmxv
Y2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpkZm4oKS5s
b2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6ZGlyKCku
bG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmRpdigp
LmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpkbCgp
LmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpkdCgp
LmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjplbSgp
LmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjplbWJl
ZCgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpm
aWVsZHNldCgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5h
bWVzOjpmb250KCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1M
TmFtZXM6OmZvcm0oKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhU
TUxOYW1lczo6ZnJhbWUoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0
KEhUTUxOYW1lczo6ZnJhbWVzZXQoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3Qu
aW5zZXJ0KEhUTUxOYW1lczo6aGVhZCgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlz
dC5pbnNlcnQoSFRNTE5hbWVzOjpoMSgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlz
dC5pbnNlcnQoSFRNTE5hbWVzOjpoMigpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlz
dC5pbnNlcnQoSFRNTE5hbWVzOjpoMygpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlz
dC5pbnNlcnQoSFRNTE5hbWVzOjpoNCgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlz
dC5pbnNlcnQoSFRNTE5hbWVzOjpoNSgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlz
dC5pbnNlcnQoSFRNTE5hbWVzOjpoNigpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlz
dC5pbnNlcnQoSFRNTE5hbWVzOjpocigpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlz
dC5pbnNlcnQoSFRNTE5hbWVzOjpodG1sKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdM
aXN0Lmluc2VydChIVE1MTmFtZXM6OmkoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xp
c3QuaW5zZXJ0KEhUTUxOYW1lczo6aWZyYW1lKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0
YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmltZygpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAg
dGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjppbnB1dCgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAg
ICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjppbnMoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAg
ICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6aXNpbmRleCgpLmxvY2FsTmFtZVB0cigpKTsK
KyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjprYmQoKS5sb2NhbE5hbWVQdHIoKSk7
CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6a2V5Z2VuKCkubG9jYWxOYW1lUHRy
KCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmxhYmVsKCkubG9jYWxOYW1l
UHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmxheWVyKCkubG9jYWxO
YW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmxlZ2VuZCgpLmxv
Y2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpsaSgpLmxv
Y2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpsaW5rKCku
bG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6Om1hcCgp
LmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjptYXJx
dWVlKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6
Om1lbnUoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1l
czo6bWV0YSgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5h
bWVzOjpub2JyKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1M
TmFtZXM6Om5vZW1iZWQoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0
KEhUTUxOYW1lczo6bm9mcmFtZXMoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3Qu
aW5zZXJ0KEhUTUxOYW1lczo6bm9sYXllcigpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFn
TGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpub3NjcmlwdCgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAg
ICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpvYmplY3QoKS5sb2NhbE5hbWVQdHIoKSk7Cisg
ICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6b2woKS5sb2NhbE5hbWVQdHIoKSk7Cisg
ICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6b3B0Z3JvdXAoKS5sb2NhbE5hbWVQdHIo
KSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6b3B0aW9uKCkubG9jYWxOYW1l
UHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnAoKS5sb2NhbE5hbWVQ
dHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6cGFyYW0oKS5sb2NhbE5h
bWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6cGxhaW50ZXh0KCku
bG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnByZSgp
LmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpxKCku
bG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnMoKS5s
b2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6c2FtcCgp
LmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpzY3Jp
cHQoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6
c2VsZWN0KCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFt
ZXM6OnNtYWxsKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1M
TmFtZXM6OnNwYW4oKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhU
TUxOYW1lczo6c3RyaWtlKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2Vy
dChIVE1MTmFtZXM6OnN0cm9uZygpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5p
bnNlcnQoSFRNTE5hbWVzOjpzdHlsZSgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlz
dC5pbnNlcnQoSFRNTE5hbWVzOjpzdWIoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xp
c3QuaW5zZXJ0KEhUTUxOYW1lczo6c3VwKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdM
aXN0Lmluc2VydChIVE1MTmFtZXM6OnRhYmxlKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0
YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnRib2R5KCkubG9jYWxOYW1lUHRyKCkpOworICAgICAg
ICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnRkKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAg
ICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnRleHRhcmVhKCkubG9jYWxOYW1lUHRyKCkpOwor
ICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnRmb290KCkubG9jYWxOYW1lUHRyKCkp
OworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnRoKCkubG9jYWxOYW1lUHRyKCkp
OworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnRoZWFkKCkubG9jYWxOYW1lUHRy
KCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnRpdGxlKCkubG9jYWxOYW1l
UHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnRyKCkubG9jYWxOYW1l
UHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnR0KCkubG9jYWxOYW1l
UHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnUoKS5sb2NhbE5hbWVQ
dHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6dWwoKS5sb2NhbE5hbWVQ
dHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6dmFyKCkubG9jYWxOYW1l
UHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OndicigpLmxvY2FsTmFt
ZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjp4bXAoKS5sb2NhbE5h
bWVQdHIoKSk7CisgICAgfQorCisgICAgcmV0dXJuIHRhZ0xpc3QuY29udGFpbnModGFnTmFtZS5s
b2NhbE5hbWVQdHIoKSk7Cit9CisKKy8vIFRoZSB0ZXJtcyBpbmxpbmUgYW5kIGJsb2NrIGFyZSB1
c2VkIGhlcmUgbG9vc2VseS4gIERvbid0IG1ha2UgdGhlIG1pc3Rha2Ugb2YgYXNzdW1pbmcgYWxs
IGlubGluZXMgb3IgYWxsIGJsb2NrcworLy8gbmVlZCB0byBiZSBpbiB0aGVzZSB0d28gbGlzdHMu
CitIYXNoU2V0PERPTVN0cmluZ0ltcGwqLCBQb2ludGVySGFzaDxET01TdHJpbmdJbXBsKj4gPiog
aW5saW5lVGFnTGlzdCgpIHsKKyAgICBzdGF0aWMgSGFzaFNldDxET01TdHJpbmdJbXBsKiwgUG9p
bnRlckhhc2g8RE9NU3RyaW5nSW1wbCo+ID4gdGFnTGlzdDsKKyAgICBpZiAodGFnTGlzdC5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjp0dCgpLmxvY2FsTmFt
ZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjppKCkubG9jYWxOYW1l
UHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmIoKS5sb2NhbE5hbWVQ
dHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6dSgpLmxvY2FsTmFtZVB0
cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpzKCkubG9jYWxOYW1lUHRy
KCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnN0cmlrZSgpLmxvY2FsTmFt
ZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpiaWcoKS5sb2NhbE5h
bWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6c21hbGwoKS5sb2Nh
bE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6ZW0oKS5sb2Nh
bE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6c3Ryb25nKCku
bG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmRmbigp
LmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpjb2Rl
KCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnNh
bXAoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6
a2JkKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6
OnZhcigpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVz
OjpjaXRlKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFt
ZXM6OmFiYnIoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxO
YW1lczo6YWNyb255bSgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQo
SFRNTE5hbWVzOjphKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChI
VE1MTmFtZXM6OmNhbnZhcygpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNl
cnQoSFRNTE5hbWVzOjppbWcoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5z
ZXJ0KEhUTUxOYW1lczo6YXBwbGV0KCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0
Lmluc2VydChIVE1MTmFtZXM6Om9iamVjdCgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFn
TGlzdC5pbnNlcnQoSFRNTE5hbWVzOjplbWJlZCgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAg
dGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpmb250KCkubG9jYWxOYW1lUHRyKCkpOworICAgICAg
ICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmJhc2Vmb250KCkubG9jYWxOYW1lUHRyKCkpOwor
ICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmJyKCkubG9jYWxOYW1lUHRyKCkpOwor
ICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnNjcmlwdCgpLmxvY2FsTmFtZVB0cigp
KTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjptYXAoKS5sb2NhbE5hbWVQdHIo
KSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6cSgpLmxvY2FsTmFtZVB0cigp
KTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpzdWIoKS5sb2NhbE5hbWVQdHIo
KSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6c3VwKCkubG9jYWxOYW1lUHRy
KCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnNwYW4oKS5sb2NhbE5hbWVQ
dHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6YmRvKCkubG9jYWxOYW1l
UHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmlmcmFtZSgpLmxvY2Fs
TmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjppbnB1dCgpLmxv
Y2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjprZXlnZW4o
KS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6c2Vs
ZWN0KCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6
OnRleHRhcmVhKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1M
TmFtZXM6OmxhYmVsKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChI
VE1MTmFtZXM6OmJ1dHRvbigpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNl
cnQoSFRNTE5hbWVzOjppbnMoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5z
ZXJ0KEhUTUxOYW1lczo6ZGVsKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmlu
c2VydChIVE1MTmFtZXM6Om5vYnIoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3Qu
aW5zZXJ0KEhUTUxOYW1lczo6d2JyKCkubG9jYWxOYW1lUHRyKCkpOworICAgIH0KKyAgICByZXR1
cm4gJnRhZ0xpc3Q7Cit9CisKK0hhc2hTZXQ8RE9NU3RyaW5nSW1wbCosIFBvaW50ZXJIYXNoPERP
TVN0cmluZ0ltcGwqPiA+KiBibG9ja1RhZ0xpc3QoKSB7CisgICAgc3RhdGljIEhhc2hTZXQ8RE9N
U3RyaW5nSW1wbCosIFBvaW50ZXJIYXNoPERPTVN0cmluZ0ltcGwqPiA+IHRhZ0xpc3Q7CisgICAg
aWYgKHRhZ0xpc3QuaXNFbXB0eSgpKSB7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1l
czo6cCgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVz
OjpoMSgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVz
OjpoMigpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVz
OjpoMygpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVz
OjpoNCgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVz
OjpoNSgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVz
OjpoNigpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVz
Ojp1bCgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVz
OjpvbCgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVz
OjpkaXIoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1l
czo6bWVudSgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5h
bWVzOjpwcmUoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxO
YW1lczo6cGxhaW50ZXh0KCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2Vy
dChIVE1MTmFtZXM6OnhtcCgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNl
cnQoSFRNTE5hbWVzOjpkbCgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNl
cnQoSFRNTE5hbWVzOjpkaXYoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5z
ZXJ0KEhUTUxOYW1lczo6bGF5ZXIoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3Qu
aW5zZXJ0KEhUTUxOYW1lczo6Y2VudGVyKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdM
aXN0Lmluc2VydChIVE1MTmFtZXM6Om5vc2NyaXB0KCkubG9jYWxOYW1lUHRyKCkpOworICAgICAg
ICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6Om5vZnJhbWVzKCkubG9jYWxOYW1lUHRyKCkpOwor
ICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmJsb2NrcXVvdGUoKS5sb2NhbE5hbWVQ
dHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6Zm9ybSgpLmxvY2FsTmFt
ZVB0cigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjppc2luZGV4KCkubG9j
YWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmhyKCkubG9j
YWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnRhYmxlKCku
bG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmZpZWxk
c2V0KCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6
OmFkZHJlc3MoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxO
YW1lczo6bGkoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxO
YW1lczo6ZGQoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxO
YW1lczo6ZHQoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxO
YW1lczo6bWFycXVlZSgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICB9CisgICAgcmV0dXJuICZ0YWdM
aXN0OworfQorCitib29sIEhUTUxFbGVtZW50SW1wbDo6aW5FaXRoZXJUYWdMaXN0KGNvbnN0IE5v
ZGVJbXBsKiBuZXdDaGlsZCkKIHsKLSAgICBtX2VsZW1lbnRJZCA9IGk7CisgICAgaWYgKG5ld0No
aWxkLT5pc1RleHROb2RlKCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAKKyAgICBp
ZiAobmV3Q2hpbGQtPmlzSFRNTEVsZW1lbnQoKSkgeworICAgICAgICBjb25zdCBIVE1MRWxlbWVu
dEltcGwqIGNoaWxkID0gc3RhdGljX2Nhc3Q8Y29uc3QgSFRNTEVsZW1lbnRJbXBsKj4obmV3Q2hp
bGQpOworICAgICAgICBpZiAoaW5saW5lVGFnTGlzdCgpLT5jb250YWlucyhjaGlsZC0+dGFnTmFt
ZSgpLmxvY2FsTmFtZVB0cigpKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBp
ZiAoYmxvY2tUYWdMaXN0KCktPmNvbnRhaW5zKGNoaWxkLT50YWdOYW1lKCkubG9jYWxOYW1lUHRy
KCkpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiAhaXNSZWNvZ25p
emVkVGFnTmFtZShjaGlsZC0+dGFnTmFtZSgpKTsgLy8gQWNjZXB0IGN1c3RvbSBodG1sIHRhZ3MK
KyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MR2VuZXJp
Y0VsZW1lbnRJbXBsOjppZCgpIGNvbnN0Citib29sIEhUTUxFbGVtZW50SW1wbDo6aW5JbmxpbmVU
YWdMaXN0KGNvbnN0IE5vZGVJbXBsKiBuZXdDaGlsZCkKIHsKLSAgICByZXR1cm4gbV9lbGVtZW50
SWQ7CisgICAgaWYgKG5ld0NoaWxkLT5pc1RleHROb2RlKCkpCisgICAgICAgIHJldHVybiB0cnVl
OworCisgICAgaWYgKG5ld0NoaWxkLT5pc0hUTUxFbGVtZW50KCkpIHsKKyAgICAgICAgY29uc3Qg
SFRNTEVsZW1lbnRJbXBsKiBjaGlsZCA9IHN0YXRpY19jYXN0PGNvbnN0IEhUTUxFbGVtZW50SW1w
bCo+KG5ld0NoaWxkKTsKKyAgICAgICAgaWYgKGlubGluZVRhZ0xpc3QoKS0+Y29udGFpbnMoY2hp
bGQtPnRhZ05hbWUoKS5sb2NhbE5hbWVQdHIoKSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgcmV0dXJuICFpc1JlY29nbml6ZWRUYWdOYW1lKGNoaWxkLT50YWdOYW1lKCkpOyAv
LyBBY2NlcHQgY3VzdG9tIGh0bWwgdGFncworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30K
KworYm9vbCBIVE1MRWxlbWVudEltcGw6OmluQmxvY2tUYWdMaXN0KGNvbnN0IE5vZGVJbXBsKiBu
ZXdDaGlsZCkKK3sKKyAgICBpZiAobmV3Q2hpbGQtPmlzVGV4dE5vZGUoKSkKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgICAgICAKKyAgICBpZiAobmV3Q2hpbGQtPmlzSFRNTEVsZW1lbnQo
KSkgeworICAgICAgICBjb25zdCBIVE1MRWxlbWVudEltcGwqIGNoaWxkID0gc3RhdGljX2Nhc3Q8
Y29uc3QgSFRNTEVsZW1lbnRJbXBsKj4obmV3Q2hpbGQpOworICAgICAgICBpZiAoYmxvY2tUYWdM
aXN0KCktPmNvbnRhaW5zKGNoaWxkLT50YWdOYW1lKCkubG9jYWxOYW1lUHRyKCkpKQorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiAhaXNSZWNvZ25pemVkVGFnTmFtZShj
aGlsZC0+dGFnTmFtZSgpKTsgLy8gQWNjZXB0IGN1c3RvbSBodG1sIHRhZ3MKKyAgICB9CisKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgSFRNTEVsZW1lbnRJbXBsOjpjaGVja0RURChjb25z
dCBOb2RlSW1wbCogbmV3Q2hpbGQpCit7CisgICAgaWYgKGhhc1RhZ05hbWUoSFRNTE5hbWVzOjph
ZGRyZXNzKCkpICYmIG5ld0NoaWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6cCgpKSkKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGluRWl0aGVyVGFnTGlzdChuZXdDaGlsZCk7CiB9
CkluZGV4OiBraHRtbC9odG1sL2h0bWxfZWxlbWVudGltcGwuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfZWxlbWVudGltcGwuaCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS4zNQpkaWZmIC11IC1wIC1yMS4zNSBraHRtbC9odG1sL2h0bWxfZWxl
bWVudGltcGwuaAotLS0ga2h0bWwvaHRtbC9odG1sX2VsZW1lbnRpbXBsLmgJMTEgTWF5IDIwMDUg
MDU6NDk6MzQgLTAwMDAJMS4zNQorKysga2h0bWwvaHRtbC9odG1sX2VsZW1lbnRpbXBsLmgJOCBK
dWwgMjAwNSAwNTo1NzoxOCAtMDAwMApAQCAtMjUsMjcgKzI1LDI2IEBACiAjZGVmaW5lIEhUTUxf
RUxFTUVOVElNUExfSAogCiAjaW5jbHVkZSAieG1sL2RvbV9lbGVtZW50aW1wbC5oIgotI2luY2x1
ZGUgPHFwdHJkaWN0Lmg+CisjaW5jbHVkZSAiaHRtbG5hbWVzLmgiCiAKIG5hbWVzcGFjZSBET00g
ewogCiBjbGFzcyBEb2N1bWVudEZyYWdtZW50SW1wbDsKIGNsYXNzIERPTVN0cmluZzsKIGNsYXNz
IEhUTUxDb2xsZWN0aW9uSW1wbDsKLSAgICAKKworZW51bSBIVE1MVGFnU3RhdHVzIHsgVGFnU3Rh
dHVzT3B0aW9uYWwsIFRhZ1N0YXR1c1JlcXVpcmVkLCBUYWdTdGF0dXNGb3JiaWRkZW4gfTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgCiBjbGFzcyBIVE1MRWxlbWVudEltcGwgOiBwdWJsaWMgU3R5
bGVkRWxlbWVudEltcGwKIHsKIHB1YmxpYzoKLSAgICBIVE1MRWxlbWVudEltcGwoRG9jdW1lbnRQ
dHIgKmRvYyk7Ci0KKyAgICBIVE1MRWxlbWVudEltcGwoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFn
TmFtZSwgRG9jdW1lbnRQdHIgKmRvYyk7CiAgICAgdmlydHVhbCB+SFRNTEVsZW1lbnRJbXBsKCk7
CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNIVE1MRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7
IH0KIAotICAgIHZpcnR1YWwgYm9vbCBpc0lubGluZSgpIGNvbnN0OwotICAgICAKLSAgICB2aXJ0
dWFsIElkIGlkKCkgY29uc3QgPSAwOwotICAgIAorCXZpcnR1YWwgRE9NU3RyaW5nIG5vZGVOYW1l
KCkgY29uc3Q7CisKICAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShJZCBhdHRyLCBNYXBwZWRB
dHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCogYXR0cik7CiAKQEAgLTUzLDcgKzUyLDcg
QEAgcHVibGljOgogCiAgICAgU2hhcmVkUHRyPEhUTUxDb2xsZWN0aW9uSW1wbD4gY2hpbGRyZW4o
KTsKICAgICAKLSAgICBET01TdHJpbmcgaWRET00oKSBjb25zdDsgLy8gcmVuYW1lIHRvIGlkIGFm
dGVyIGVsaW1pbmF0aW5nIE5vZGVJbXBsOjppZCBzb21lIGRheQorICAgIERPTVN0cmluZyBpZCgp
IGNvbnN0OwogICAgIHZvaWQgc2V0SWQoY29uc3QgRE9NU3RyaW5nICZ2YWx1ZSk7CiAgICAgRE9N
U3RyaW5nIHRpdGxlKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRUaXRsZShjb25zdCBET01TdHJpbmcg
JnZhbHVlKTsKQEAgLTczLDggKzcyLDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0T3V0ZXJIVE1M
KGNvbnN0IERPTVN0cmluZyAmaHRtbCwgaW50ICZleGNlcHRpb24pOwogICAgIHZvaWQgc2V0SW5u
ZXJUZXh0KGNvbnN0IERPTVN0cmluZyAmdGV4dCwgaW50ICZleGNlcHRpb24pOwogICAgIHZvaWQg
c2V0T3V0ZXJUZXh0KGNvbnN0IERPTVN0cmluZyAmdGV4dCwgaW50ICZleGNlcHRpb24pOwotCi0g
ICAgdmlydHVhbCBET01TdHJpbmcgbmFtZXNwYWNlVVJJKCkgY29uc3Q7CiAgICAgCiAgICAgdmly
dHVhbCBib29sIGlzRm9jdXNhYmxlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlzQ29udGVu
dEVkaXRhYmxlKCkgY29uc3Q7CkBAIC04OSwyMiArODYsMjMgQEAgcHVibGljOgogCiAgICAgdmly
dHVhbCBET01TdHJpbmcgdG9TdHJpbmcoKSBjb25zdDsKIAorICAgIHZpcnR1YWwgSFRNTFRhZ1N0
YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9y
aXR5KCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGNoaWxkQWxsb3dlZChOb2RlSW1wbCogbmV3
Q2hpbGQpOyAvLyBFcnJvci1jaGVja2luZyBkdXJpbmcgcGFyc2luZyB0aGF0IGNoZWNrcyB0aGUg
RFRECisKKyAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY2hlY2sgdGhlIERURCBmb3IgYSBnaXZl
biBjaGlsZCBub2RlLgorICAgIHZpcnR1YWwgYm9vbCBjaGVja0RURChjb25zdCBOb2RlSW1wbCog
bmV3Q2hpbGQpOworICAgIHN0YXRpYyBib29sIGluRWl0aGVyVGFnTGlzdChjb25zdCBOb2RlSW1w
bCogbmV3Q2hpbGQpOworICAgIHN0YXRpYyBib29sIGluSW5saW5lVGFnTGlzdChjb25zdCBOb2Rl
SW1wbCogbmV3Q2hpbGQpOworICAgIHN0YXRpYyBib29sIGluQmxvY2tUYWdMaXN0KGNvbnN0IE5v
ZGVJbXBsKiBuZXdDaGlsZCk7CisgICAgc3RhdGljIGJvb2wgaXNSZWNvZ25pemVkVGFnTmFtZShj
b25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lKTsKKwogcHJvdGVjdGVkOgogCiAgICAgLy8gZm9y
IElNRywgT0JKRUNUIGFuZCBBUFBMRVQKICAgICB2b2lkIGFkZEhUTUxBbGlnbm1lbnQoTWFwcGVk
QXR0cmlidXRlSW1wbCogaHRtbEF0dHIpOwogfTsKIAotY2xhc3MgSFRNTEdlbmVyaWNFbGVtZW50
SW1wbCA6IHB1YmxpYyBIVE1MRWxlbWVudEltcGwKLXsKLXB1YmxpYzoKLSAgICBIVE1MR2VuZXJp
Y0VsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIHVzaG9ydCBlbGVtZW50SWQpOwotICAgIHZp
cnR1YWwgSWQgaWQoKSBjb25zdDsKLQotcHJvdGVjdGVkOgotICAgIHVzaG9ydCBtX2VsZW1lbnRJ
ZDsKLX07Ci0KIH0gLy9uYW1lc3BhY2UKIAogI2VuZGlmCkluZGV4OiBraHRtbC9odG1sL2h0bWxf
Zm9ybWltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1s
L2h0bWwvaHRtbF9mb3JtaW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTcwCmRpZmYg
LXUgLXAgLXIxLjE3MCBraHRtbC9odG1sL2h0bWxfZm9ybWltcGwuY3BwCi0tLSBraHRtbC9odG1s
L2h0bWxfZm9ybWltcGwuY3BwCTI5IEp1biAyMDA1IDIwOjE0OjU3IC0wMDAwCTEuMTcwCisrKyBr
aHRtbC9odG1sL2h0bWxfZm9ybWltcGwuY3BwCTggSnVsIDIwMDUgMDU6NTc6MjAgLTAwMDAKQEAg
LTEwMyw3ICsxMDMsNyBAQCBwcml2YXRlOgogfTsKIAogSFRNTEZvcm1FbGVtZW50SW1wbDo6SFRN
TEZvcm1FbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAgIDogSFRNTEVsZW1lbnRJbXBs
KGRvYykKKyAgICA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6OmZvcm0oKSwgZG9jKQogewog
ICAgIGNvbGxlY3Rpb25JbmZvID0gMDsKICAgICBtX3Bvc3QgPSBmYWxzZTsKQEAgLTEzMCwxMSAr
MTMwLDYgQEAgSFRNTEZvcm1FbGVtZW50SW1wbDo6fkhUTUxGb3JtRWxlbWVudEltcAogICAgICAg
ICBpbWdFbGVtZW50c1tpXS0+bV9mb3JtID0gMDsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxGb3Jt
RWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfRk9STTsKLX0KLQogI2lm
IEFQUExFX0NIQU5HRVMKIAogYm9vbCBIVE1MRm9ybUVsZW1lbnRJbXBsOjpmb3JtV291bGRIYXZl
U2VjdXJlU3VibWlzc2lvbihjb25zdCBET01TdHJpbmcgJnVybCkKQEAgLTE5Miw3ICsxODcsNyBA
QCB2b2lkIEhUTUxGb3JtRWxlbWVudEltcGw6OnN1Ym1pdENsaWNrKCkKIHsKICAgICBib29sIHN1
Ym1pdEZvdW5kID0gZmFsc2U7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZvcm1FbGVt
ZW50cy5jb3VudCgpOyArK2kpIHsKLSAgICAgICAgaWYgKGZvcm1FbGVtZW50c1tpXS0+aWQoKSA9
PSBJRF9JTlBVVCkgeworICAgICAgICBpZiAoZm9ybUVsZW1lbnRzW2ldLT5oYXNMb2NhbE5hbWUo
SFRNTE5hbWVzOjppbnB1dCgpKSkgewogICAgICAgICAgICAgSFRNTElucHV0RWxlbWVudEltcGwg
KmVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50SW1wbCAqPihmb3JtRWxlbWVu
dHNbaV0pOwogICAgICAgICAgICAgaWYgKGVsZW1lbnQtPmlzU3VjY2Vzc2Z1bFN1Ym1pdEJ1dHRv
bigpICYmIGVsZW1lbnQtPnJlbmRlcmVyKCkpIHsKICAgICAgICAgICAgICAgICBzdWJtaXRGb3Vu
ZCA9IHRydWU7CkBAIC0zOTksNyArMzk0LDcgQEAgYm9vbCBIVE1MRm9ybUVsZW1lbnRJbXBsOjpm
b3JtRGF0YShGb3JtRAogCiAgICAgICAgICAgICAgICAgICAgIC8vIGlmIHRoZSBjdXJyZW50IHR5
cGUgaXMgRklMRSwgdGhlbiB3ZSBhbHNvIG5lZWQgdG8KICAgICAgICAgICAgICAgICAgICAgLy8g
aW5jbHVkZSB0aGUgZmlsZW5hbWUKLSAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQtPm5v
ZGVUeXBlKCkgPT0gTm9kZTo6RUxFTUVOVF9OT0RFICYmIGN1cnJlbnQtPmlkKCkgPT0gSURfSU5Q
VVQgJiYKKyAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQtPmhhc0xvY2FsTmFtZShIVE1M
TmFtZXM6OmlucHV0KCkpICYmCiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxI
VE1MSW5wdXRFbGVtZW50SW1wbCo+KGN1cnJlbnQpLT5pbnB1dFR5cGUoKSA9PSBIVE1MSW5wdXRF
bGVtZW50SW1wbDo6RklMRSkKICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
ICAgICAgICAgUVN0cmluZyBwYXRoID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudEltcGwq
PihjdXJyZW50KS0+dmFsdWUoKS5zdHJpbmcoKTsKQEAgLTU0Nyw3ICs1NDIsNyBAQCB2b2lkIEhU
TUxGb3JtRWxlbWVudEltcGw6OnN1Ym1pdCggYm9vbCBhCiAjaWYgQVBQTEVfQ0hBTkdFUwogICAg
ICAgICAvLyBPdXIgYXBwIG5lZWRzIHRvIGdldCBmb3JtIHZhbHVlcyBmb3IgcGFzc3dvcmQgZmll
bGRzIGZvciBkb2luZyBwYXNzd29yZCBhdXRvY29tcGxldGUsCiAgICAgICAgIC8vIHNvIHdlIGFy
ZSBtb3JlIGxlbmllbnQgaW4gcHVzaGluZyB2YWx1ZXMsIGFuZCBsZXQgdGhlIGFwcCBkZWNpZGUg
d2hhdCB0byBzYXZlIHdoZW4uCi0gICAgICAgIGlmIChjdXJyZW50LT5pZCgpID09IElEX0lOUFVU
KSB7CisgICAgICAgIGlmIChjdXJyZW50LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjppbnB1dCgp
KSkgewogICAgICAgICAgICAgSFRNTElucHV0RWxlbWVudEltcGwgKmlucHV0ID0gc3RhdGljX2Nh
c3Q8SFRNTElucHV0RWxlbWVudEltcGwqPihjdXJyZW50KTsKICAgICAgICAgICAgIGlmIChpbnB1
dC0+aW5wdXRUeXBlKCkgPT0gSFRNTElucHV0RWxlbWVudEltcGw6OlRFWFQKICAgICAgICAgICAg
ICAgICB8fCBpbnB1dC0+aW5wdXRUeXBlKCkgPT0gIEhUTUxJbnB1dEVsZW1lbnRJbXBsOjpQQVNT
V09SRApAQCAtNzA5LDcgKzcwNCw3IEBAIHZvaWQgSFRNTEZvcm1FbGVtZW50SW1wbDo6cmFkaW9D
bGlja2VkKCAKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZm9ybUVsZW1lbnRzLmNv
dW50KCk7ICsraSkgewogICAgICAgICBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbCAqY3VycmVu
dCA9IGZvcm1FbGVtZW50c1tpXTsKLSAgICAgICAgaWYgKGN1cnJlbnQtPmlkKCkgPT0gSURfSU5Q
VVQgJiYKKyAgICAgICAgaWYgKGN1cnJlbnQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmlucHV0
KCkpICYmCiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50SW1wbCo+KGN1
cnJlbnQpLT5pbnB1dFR5cGUoKSA9PSBIVE1MSW5wdXRFbGVtZW50SW1wbDo6UkFESU8gJiYKICAg
ICAgICAgICAgIGN1cnJlbnQgIT0gY2FsbGVyICYmIGN1cnJlbnQtPmZvcm0oKSA9PSBjYWxsZXIt
PmZvcm0oKSAmJiBjdXJyZW50LT5uYW1lKCkgPT0gY2FsbGVyLT5uYW1lKCkpIHsKICAgICAgICAg
ICAgIHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnRJbXBsKj4oY3VycmVudCktPnNldENoZWNr
ZWQoZmFsc2UpOwpAQCAtODY0LDggKzg1OSw4IEBAIHZvaWQgSFRNTEZvcm1FbGVtZW50SW1wbDo6
c2V0VGFyZ2V0KGNvbnMKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1IVE1MR2VuZXJpY0Zvcm1F
bGVtZW50SW1wbDo6SFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywg
SFRNTEZvcm1FbGVtZW50SW1wbCAqZikKLSAgICA6IEhUTUxFbGVtZW50SW1wbChkb2MpCitIVE1M
R2VuZXJpY0Zvcm1FbGVtZW50SW1wbDo6SFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnRQdHIgKmRvYywgSFRNTEZvcm1FbGVtZW50
SW1wbCAqZikKKyAgICA6IEhUTUxFbGVtZW50SW1wbCh0YWdOYW1lLCBkb2MpCiB7CiAgICAgbV9k
aXNhYmxlZCA9IG1fcmVhZE9ubHkgPSBmYWxzZTsKICAgICBtX2Rvcm1hbnQgPSBmYWxzZTsKQEAg
LTk2Nyw5ICs5NjIsOCBAQCB2b2lkIEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsOjpyZW1vdmVk
CiBIVE1MRm9ybUVsZW1lbnRJbXBsICpIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbDo6Z2V0Rm9y
bSgpIGNvbnN0CiB7CiAgICAgTm9kZUltcGwgKnAgPSBwYXJlbnROb2RlKCk7Ci0gICAgd2hpbGUo
cCkKLSAgICB7Ci0gICAgICAgIGlmKCBwLT5pZCgpID09IElEX0ZPUk0gKQorICAgIHdoaWxlKHAp
IHsKKyAgICAgICAgaWYgKHAtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpmb3JtKCkpKQogICAgICAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudEltcGwgKj4ocCk7CiAgICAg
ICAgIHAgPSBwLT5wYXJlbnROb2RlKCk7CiAgICAgfQpAQCAtMTE4OSw3ICsxMTgzLDcgQEAgdm9p
ZCBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbDo6c2V0VGFiSQogLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQogCiBIVE1MQnV0dG9uRWxlbWVudEltcGw6OkhUTUxCdXR0b25FbGVtZW50SW1wbChEb2N1bWVu
dFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmKQotICAgIDogSFRNTEdlbmVyaWNGb3Jt
RWxlbWVudEltcGwoZG9jLCBmKQorICAgIDogSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwoSFRN
TE5hbWVzOjpidXR0b24oKSwgZG9jLCBmKQogewogICAgIG1fdHlwZSA9IFNVQk1JVDsKICAgICBt
X2RpcnR5ID0gdHJ1ZTsKQEAgLTEyMDAsMTEgKzExOTQsNiBAQCBIVE1MQnV0dG9uRWxlbWVudElt
cGw6On5IVE1MQnV0dG9uRWxlbWVuCiB7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MQnV0dG9uRWxl
bWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfQlVUVE9OOwotfQotCiBET01T
dHJpbmcgSFRNTEJ1dHRvbkVsZW1lbnRJbXBsOjp0eXBlKCkgY29uc3QKIHsKICAgICByZXR1cm4g
Z2V0QXR0cmlidXRlKEFUVFJfVFlQRSk7CkBAIC0xMzI2LDcgKzEzMTUsNyBAQCB2b2lkIEhUTUxC
dXR0b25FbGVtZW50SW1wbDo6c2V0VmFsdWUoY29uCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhU
TUxGaWVsZFNldEVsZW1lbnRJbXBsOjpIVE1MRmllbGRTZXRFbGVtZW50SW1wbChEb2N1bWVudFB0
ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmKQotICAgOiBIVE1MR2VuZXJpY0Zvcm1FbGVt
ZW50SW1wbChkb2MsIGYpCisgICA6IEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKEhUTUxOYW1l
czo6ZmllbGRzZXQoKSwgZG9jLCBmKQogewogfQogCkBAIC0xMzM0LDE0ICsxMzIzLDE0IEBAIEhU
TUxGaWVsZFNldEVsZW1lbnRJbXBsOjp+SFRNTEZpZWxkU2V0RWwKIHsKIH0KIAotYm9vbCBIVE1M
RmllbGRTZXRFbGVtZW50SW1wbDo6aXNGb2N1c2FibGUoKSBjb25zdAorYm9vbCBIVE1MRmllbGRT
ZXRFbGVtZW50SW1wbDo6Y2hlY2tEVEQoY29uc3QgTm9kZUltcGwqIG5ld0NoaWxkKQogewotICAg
IHJldHVybiBmYWxzZTsKKwlyZXR1cm4gbmV3Q2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjps
ZWdlbmQoKSkgfHwgSFRNTEVsZW1lbnRJbXBsOjpjaGVja0RURChuZXdDaGlsZCk7CiB9CiAKLU5v
ZGVJbXBsOjpJZCBIVE1MRmllbGRTZXRFbGVtZW50SW1wbDo6aWQoKSBjb25zdAorYm9vbCBIVE1M
RmllbGRTZXRFbGVtZW50SW1wbDo6aXNGb2N1c2FibGUoKSBjb25zdAogewotICAgIHJldHVybiBJ
RF9GSUVMRFNFVDsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIERPTVN0cmluZyBIVE1MRmllbGRT
ZXRFbGVtZW50SW1wbDo6dHlwZSgpIGNvbnN0CkBAIC0xMzU3LDggKzEzNDYsMjEgQEAgUmVuZGVy
T2JqZWN0KiBIVE1MRmllbGRTZXRFbGVtZW50SW1wbDo6YwogLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQog
CiBIVE1MSW5wdXRFbGVtZW50SW1wbDo6SFRNTElucHV0RWxlbWVudEltcGwoRG9jdW1lbnRQdHIg
KmRvYywgSFRNTEZvcm1FbGVtZW50SW1wbCAqZikKLSAgICA6IEhUTUxHZW5lcmljRm9ybUVsZW1l
bnRJbXBsKGRvYywgZiksIG1faW1hZ2VMb2FkZXIoMCksIG1fdmFsdWVNYXRjaGVzUmVuZGVyZXIo
ZmFsc2UpCisgICAgOiBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbChIVE1MTmFtZXM6OmlucHV0
KCksIGRvYywgZikKK3sKKyAgICBpbml0KCk7Cit9CisKK0hUTUxJbnB1dEVsZW1lbnRJbXBsOjpI
VE1MSW5wdXRFbGVtZW50SW1wbChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVu
dFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmKQorICAgIDogSFRNTEdlbmVyaWNGb3Jt
RWxlbWVudEltcGwodGFnTmFtZSwgZG9jLCBmKQogeworICAgIGluaXQoKTsKK30KKwordm9pZCBI
VE1MSW5wdXRFbGVtZW50SW1wbDo6aW5pdCgpCit7CisgICAgbV9pbWFnZUxvYWRlciA9IDA7Cisg
ICAgbV92YWx1ZU1hdGNoZXNSZW5kZXJlciA9IGZhbHNlOwogICAgIG1fdHlwZSA9IFRFWFQ7CiAg
ICAgbV9tYXhMZW4gPSAtMTsKICAgICBtX3NpemUgPSAyMDsKQEAgLTEzNzYsOCArMTM3OCw4IEBA
IEhUTUxJbnB1dEVsZW1lbnRJbXBsOjpIVE1MSW5wdXRFbGVtZW50SW0KIAogICAgIG1fbWF4UmVz
dWx0cyA9IC0xOwogCi0gICAgaWYgKCBtX2Zvcm0gKQotICAgICAgICBtX2F1dG9jb21wbGV0ZSA9
IGYtPmF1dG9Db21wbGV0ZSgpOworICAgIGlmIChtX2Zvcm0pCisgICAgICAgIG1fYXV0b2NvbXBs
ZXRlID0gbV9mb3JtLT5hdXRvQ29tcGxldGUoKTsKIH0KIAogSFRNTElucHV0RWxlbWVudEltcGw6
On5IVE1MSW5wdXRFbGVtZW50SW1wbCgpCkBAIC0xMzg2LDExICsxMzg4LDYgQEAgSFRNTElucHV0
RWxlbWVudEltcGw6On5IVE1MSW5wdXRFbGVtZW50SQogICAgIGRlbGV0ZSBtX2ltYWdlTG9hZGVy
OwogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTElucHV0RWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gSURfSU5QVVQ7Ci19Ci0KIHZvaWQgSFRNTElucHV0RWxlbWVudEltcGw6OnNl
dFR5cGUoY29uc3QgRE9NU3RyaW5nJiB0KQogewogICAgIHR5cGVFbnVtIG5ld1R5cGU7CkBAIC0y
NDY4LDcgKzI0NjUsNyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnRJbXBsOjpzZXRVc2VNYXAoY29u
CiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxMYWJlbEVsZW1lbnRJbXBsOjpIVE1MTGFiZWxF
bGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAgIDogSFRNTEVsZW1lbnRJbXBsKGRvYykK
KyAgICA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6OmxhYmVsKCksIGRvYykKIHsKIH0KIApA
QCAtMjQ4MSwxMSArMjQ3OCw2IEBAIGJvb2wgSFRNTExhYmVsRWxlbWVudEltcGw6OmlzRm9jdXNh
YmxlKCkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MTGFiZWxFbGVt
ZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9MQUJFTDsKLX0KLQogdm9pZCBI
VE1MTGFiZWxFbGVtZW50SW1wbDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRl
SW1wbCAqYXR0cikKIHsKICAgICBzd2l0Y2goYXR0ci0+aWQoKSkKQEAgLTI1MzksNyArMjUzMSw3
IEBAIHZvaWQgSFRNTExhYmVsRWxlbWVudEltcGw6OmFjY2Vzc0tleUFjdGkKIEhUTUxGb3JtRWxl
bWVudEltcGwgKkhUTUxMYWJlbEVsZW1lbnRJbXBsOjpmb3JtKCkKIHsKICAgICBmb3IgKE5vZGVJ
bXBsICpwID0gcGFyZW50Tm9kZSgpOyBwICE9IDA7IHAgPSBwLT5wYXJlbnROb2RlKCkpIHsKLSAg
ICAgICAgaWYgKHAtPmlkKCkgPT0gSURfRk9STSkKKyAgICAgICAgaWYgKHAtPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjpmb3JtKCkpKQogICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxG
b3JtRWxlbWVudEltcGwgKj4ocCk7CiAgICAgfQogICAgIApAQCAtMjU2OSw3ICsyNTYxLDcgQEAg
dm9pZCBIVE1MTGFiZWxFbGVtZW50SW1wbDo6c2V0SHRtbEZvcihjbwogLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQogCiBIVE1MTGVnZW5kRWxlbWVudEltcGw6OkhUTUxMZWdlbmRFbGVtZW50SW1wbChEb2N1
bWVudFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmKQotOiBIVE1MR2VuZXJpY0Zvcm1F
bGVtZW50SW1wbChkb2MsIGYpCis6IEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKEhUTUxOYW1l
czo6bGVnZW5kKCksIGRvYywgZikKIHsKIH0KIApAQCAtMjU4MiwxMSArMjU3NCw2IEBAIGJvb2wg
SFRNTExlZ2VuZEVsZW1lbnRJbXBsOjppc0ZvY3VzYWJsZSgKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLU5vZGVJbXBsOjpJZCBIVE1MTGVnZW5kRWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gSURfTEVHRU5EOwotfQotCiBSZW5kZXJPYmplY3QqIEhUTUxMZWdlbmRFbGVtZW50
SW1wbDo6Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqIGFyZW5hLCBSZW5kZXJTdHlsZSogc3R5
bGUpCiB7CiAgICAgcmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRlckxlZ2VuZCh0aGlzKTsKQEAgLTI2
MjEsNyArMjYwOCw3IEBAIEVsZW1lbnRJbXBsICpIVE1MTGVnZW5kRWxlbWVudEltcGw6OmZvcm0K
IHsKICAgICAvLyBDaGVjayBpZiB0aGVyZSdzIGEgZmllbGRzZXQgYmVsb25naW5nIHRvIHRoaXMg
bGVnZW5kLgogICAgIE5vZGVJbXBsICpmaWVsZHNldCA9IHBhcmVudE5vZGUoKTsKLSAgICB3aGls
ZSAoZmllbGRzZXQgJiYgZmllbGRzZXQtPmlkKCkgIT0gSURfRklFTERTRVQpCisgICAgd2hpbGUg
KGZpZWxkc2V0ICYmICFmaWVsZHNldC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZpZWxkc2V0KCkp
KQogICAgICAgICBmaWVsZHNldCA9IGZpZWxkc2V0LT5wYXJlbnROb2RlKCk7CiAgICAgaWYgKCFm
aWVsZHNldCkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0yNjMyLDcgKzI2MTksNyBAQCBFbGVtZW50
SW1wbCAqSFRNTExlZ2VuZEVsZW1lbnRJbXBsOjpmb3JtCiAgICAgd2hpbGUgKChub2RlID0gbm9k
ZS0+dHJhdmVyc2VOZXh0Tm9kZShmaWVsZHNldCkpKSB7CiAgICAgICAgIGlmIChub2RlLT5pc0hU
TUxFbGVtZW50KCkpIHsKICAgICAgICAgICAgIEhUTUxFbGVtZW50SW1wbCAqZWxlbWVudCA9IHN0
YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCAqPihub2RlKTsKLSAgICAgICAgICAgIGlmIChlbGVt
ZW50LT5pZCgpICE9IElEX0xFR0VORCAmJiBlbGVtZW50LT5pc0dlbmVyaWNGb3JtRWxlbWVudCgp
KQorICAgICAgICAgICAgaWYgKCFlbGVtZW50LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpsZWdl
bmQoKSkgJiYgZWxlbWVudC0+aXNHZW5lcmljRm9ybUVsZW1lbnQoKSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gZWxlbWVudDsKICAgICAgICAgfQogICAgIH0KQEAgLTI2NTUsOCArMjY0MiwyMCBA
QCB2b2lkIEhUTUxMZWdlbmRFbGVtZW50SW1wbDo6YWNjZXNzS2V5QWN0CiAvLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCiAKIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6SFRNTFNlbGVjdEVsZW1lbnRJbXBsKERv
Y3VtZW50UHRyICpkb2MsIEhUTUxGb3JtRWxlbWVudEltcGwgKmYpCi0gICAgOiBIVE1MR2VuZXJp
Y0Zvcm1FbGVtZW50SW1wbChkb2MsIGYpLCBtX29wdGlvbnMoMCkKKyAgICA6IEhUTUxHZW5lcmlj
Rm9ybUVsZW1lbnRJbXBsKEhUTUxOYW1lczo6c2VsZWN0KCksIGRvYywgZiksIG1fb3B0aW9ucygw
KQogeworICAgIGluaXQoKTsKK30KKworSFRNTFNlbGVjdEVsZW1lbnRJbXBsOjpIVE1MU2VsZWN0
RWxlbWVudEltcGwoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnRQdHIgKmRv
YywgSFRNTEZvcm1FbGVtZW50SW1wbCAqZikKKyAgICA6IEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJ
bXBsKHRhZ05hbWUsIGRvYywgZiksIG1fb3B0aW9ucygwKQoreworICAgIGluaXQoKTsKK30KKwor
dm9pZCBIVE1MU2VsZWN0RWxlbWVudEltcGw6OmluaXQoKQoreworICAgIG1fb3B0aW9ucyA9IDA7
CiAgICAgbV9tdWx0aXBsZSA9IGZhbHNlOwogICAgIG1fcmVjYWxjTGlzdEl0ZW1zID0gZmFsc2U7
CiAgICAgLy8gMCBtZWFucyBpbnZhbGlkIChpLmUuIG5vdCBzZXQpCkBAIC0yNjczLDkgKzI2NzIs
MTAgQEAgSFRNTFNlbGVjdEVsZW1lbnRJbXBsOjp+SFRNTFNlbGVjdEVsZW1lbgogICAgIH0KIH0K
IAotTm9kZUltcGw6OklkIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6aWQoKSBjb25zdAorYm9vbCBI
VE1MU2VsZWN0RWxlbWVudEltcGw6OmNoZWNrRFREKGNvbnN0IE5vZGVJbXBsKiBuZXdDaGlsZCkK
IHsKLSAgICByZXR1cm4gSURfU0VMRUNUOworCXJldHVybiBuZXdDaGlsZC0+aXNUZXh0Tm9kZSgp
IHx8IG5ld0NoaWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpIHx8IG5ld0NoaWxk
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b3B0Z3JvdXAoKSkgfHwKKwkJICAgbmV3Q2hpbGQtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjpzY3JpcHQoKSk7CiB9CiAKIHZvaWQgSFRNTFNlbGVjdEVsZW1l
bnRJbXBsOjpyZWNhbGNTdHlsZSggU3R5bGVDaGFuZ2UgY2ggKQpAQCAtMjY5OSw3ICsyNjk5LDcg
QEAgbG9uZyBIVE1MU2VsZWN0RWxlbWVudEltcGw6OnNlbGVjdGVkSW5kZQogICAgIHVpbnQgbyA9
IDA7CiAgICAgUU1lbUFycmF5PEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKj4gaXRlbXMgPSBs
aXN0SXRlbXMoKTsKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGl0ZW1zLnNpemUo
KTsgaSsrKSB7Ci0gICAgICAgIGlmIChpdGVtc1tpXS0+aWQoKSA9PSBJRF9PUFRJT04pIHsKKyAg
ICAgICAgaWYgKGl0ZW1zW2ldLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvcHRpb24oKSkpIHsK
ICAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudEltcGwqPihpdGVt
c1tpXSktPnNlbGVjdGVkKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG87CiAgICAgICAgICAg
ICBvKys7CkBAIC0yNzE1LDcgKzI3MTUsNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6
c2V0U2VsZWN0ZWRJCiAgICAgUU1lbUFycmF5PEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKj4g
aXRlbXMgPSBsaXN0SXRlbXMoKTsKICAgICBpbnQgbGlzdEluZGV4OwogICAgIGZvciAobGlzdElu
ZGV4ID0gMDsgbGlzdEluZGV4IDwgaW50KGl0ZW1zLnNpemUoKSk7IGxpc3RJbmRleCsrKSB7Ci0g
ICAgICAgIGlmIChpdGVtc1tsaXN0SW5kZXhdLT5pZCgpID09IElEX09QVElPTikKKyAgICAgICAg
aWYgKGl0ZW1zW2xpc3RJbmRleF0tPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9wdGlvbigpKSkK
ICAgICAgICAgICAgIHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50SW1wbCo+KGl0ZW1zW2xp
c3RJbmRleF0pLT5zZXRTZWxlY3RlZChmYWxzZSk7CiAgICAgfQogICAgIGxpc3RJbmRleCA9IG9w
dGlvblRvTGlzdEluZGV4KGluZGV4KTsKQEAgLTI3MzEsNyArMjczMSw3IEBAIGxvbmcgSFRNTFNl
bGVjdEVsZW1lbnRJbXBsOjpsZW5ndGgoKSBjb24KICAgICB1aW50IGk7CiAgICAgUU1lbUFycmF5
PEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKj4gaXRlbXMgPSBsaXN0SXRlbXMoKTsKICAgICBm
b3IgKGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgaWYgKGl0ZW1zW2ld
LT5pZCgpID09IElEX09QVElPTikKKyAgICAgICAgaWYgKGl0ZW1zW2ldLT5oYXNMb2NhbE5hbWUo
SFRNTE5hbWVzOjpvcHRpb24oKSkpCiAgICAgICAgICAgICBsZW4rKzsKICAgICB9CiAgICAgcmV0
dXJuIGxlbjsKQEAgLTI3MzksNyArMjczOSw3IEBAIGxvbmcgSFRNTFNlbGVjdEVsZW1lbnRJbXBs
OjpsZW5ndGgoKSBjb24KIAogdm9pZCBIVE1MU2VsZWN0RWxlbWVudEltcGw6OmFkZCggSFRNTEVs
ZW1lbnRJbXBsICplbGVtZW50LCBIVE1MRWxlbWVudEltcGwgKmJlZm9yZSApCiB7Ci0gICAgaWYg
KCFlbGVtZW50IHx8IGVsZW1lbnQtPmlkKCkgIT0gSURfT1BUSU9OKQorICAgIGlmICghZWxlbWVu
dCB8fCAhZWxlbWVudC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpKQogICAgICAg
ICByZXR1cm47CiAKICAgICBpbnQgZXhjZXB0aW9uY29kZSA9IDA7CkBAIC0yNzczLDEzICsyNzcz
LDEyIEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnRJbXBsOjpmb2N1cygpCiAgICAgZ2V0RG9jdW1l
bnQoKS0+c2V0Rm9jdXNOb2RlKHRoaXMpOwogfQogCi1ET01TdHJpbmcgSFRNTFNlbGVjdEVsZW1l
bnRJbXBsOjp2YWx1ZSggKQorRE9NU3RyaW5nIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6dmFsdWUo
KQogewogICAgIHVpbnQgaTsKICAgICBRTWVtQXJyYXk8SFRNTEdlbmVyaWNGb3JtRWxlbWVudElt
cGwqPiBpdGVtcyA9IGxpc3RJdGVtcygpOwogICAgIGZvciAoaSA9IDA7IGkgPCBpdGVtcy5zaXpl
KCk7IGkrKykgewotICAgICAgICBpZiAoIGl0ZW1zW2ldLT5pZCgpID09IElEX09QVElPTgotICAg
ICAgICAgICAgJiYgc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnRJbXBsKj4oaXRlbXNbaV0p
LT5zZWxlY3RlZCgpKQorICAgICAgICBpZiAoaXRlbXNbaV0tPmhhc0xvY2FsTmFtZShIVE1MTmFt
ZXM6Om9wdGlvbigpKSAmJiBzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudEltcGwqPihpdGVt
c1tpXSktPnNlbGVjdGVkKCkpCiAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTE9w
dGlvbkVsZW1lbnRJbXBsKj4oaXRlbXNbaV0pLT52YWx1ZSgpOwogICAgIH0KICAgICByZXR1cm4g
RE9NU3RyaW5nKCIiKTsKQEAgLTI3OTMsMTMgKzI3OTIsMTMgQEAgdm9pZCBIVE1MU2VsZWN0RWxl
bWVudEltcGw6OnNldFZhbHVlKGNvbgogICAgIC8vIGFuZCBtYWtlIGl0IHRoZSBjdXJyZW50IHNl
bGVjdGlvbi4KICAgICBRTWVtQXJyYXk8SFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwqPiBpdGVt
cyA9IGxpc3RJdGVtcygpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpdGVtcy5zaXpl
KCk7IGkrKykKLSAgICAgICAgaWYgKGl0ZW1zW2ldLT5pZCgpID09IElEX09QVElPTiAmJiBzdGF0
aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudEltcGwqPihpdGVtc1tpXSktPnZhbHVlKCkgPT0gdmFs
dWUpIHsKKyAgICAgICAgaWYgKGl0ZW1zW2ldLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvcHRp
b24oKSkgJiYgc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnRJbXBsKj4oaXRlbXNbaV0pLT52
YWx1ZSgpID09IHZhbHVlKSB7CiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxl
bWVudEltcGwqPihpdGVtc1tpXSktPnNldFNlbGVjdGVkKHRydWUpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiB9CiAKLVFTdHJpbmcgSFRNTFNlbGVjdEVsZW1lbnRJbXBsOjpzdGF0
ZSggKQorUVN0cmluZyBIVE1MU2VsZWN0RWxlbWVudEltcGw6OnN0YXRlKCkKIHsKICNpZiAhQVBQ
TEVfQ0hBTkdFUwogICAgIFFTdHJpbmcgc3RhdGU7CkBAIC0yODEyLDcgKzI4MTEsNyBAQCBRU3Ry
aW5nIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6c3RhdGUoICkKICAgICBRQ2hhciBzdGF0ZUNoYXJz
W2xdOwogICAgIAogICAgIGZvcihpbnQgaSA9IDA7IGkgPCBsOyBpKyspCi0gICAgICAgIGlmKGl0
ZW1zW2ldLT5pZCgpID09IElEX09QVElPTiAmJiBzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVu
dEltcGwqPihpdGVtc1tpXSktPnNlbGVjdGVkKCkpCisgICAgICAgIGlmKGl0ZW1zW2ldLT5oYXNM
b2NhbE5hbWUoSFRNTE5hbWVzOjpvcHRpb24oKSkgJiYgc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVs
ZW1lbnRJbXBsKj4oaXRlbXNbaV0pLT5zZWxlY3RlZCgpKQogICAgICAgICAgICAgc3RhdGVDaGFy
c1tpXSA9ICdYJzsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgc3RhdGVDaGFyc1tpXSA9ICcu
JzsKQEAgLTI4NDksNyArMjg0OCw3IEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnRJbXBsOjpyZXN0
b3JlU3RhdGUKIAogICAgIGludCBsID0gaXRlbXMuY291bnQoKTsKICAgICBmb3IoaW50IGkgPSAw
OyBpIDwgbDsgaSsrKSB7Ci0gICAgICAgIGlmKGl0ZW1zW2ldLT5pZCgpID09IElEX09QVElPTikg
eworICAgICAgICBpZihpdGVtc1tpXS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkp
KSB7CiAgICAgICAgICAgICBIVE1MT3B0aW9uRWxlbWVudEltcGwqIG9lID0gc3RhdGljX2Nhc3Q8
SFRNTE9wdGlvbkVsZW1lbnRJbXBsKj4oaXRlbXNbaV0pOwogICAgICAgICAgICAgb2UtPnNldFNl
bGVjdGVkKHN0YXRlW2ldID09ICdYJyk7CiAgICAgICAgIH0KQEAgLTI5NDEsNyArMjk0MCw3IEBA
IGJvb2wgSFRNTFNlbGVjdEVsZW1lbnRJbXBsOjphcHBlbmRGb3JtRGEKIAogICAgIHVpbnQgaTsK
ICAgICBmb3IgKGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgaWYgKGl0
ZW1zW2ldLT5pZCgpID09IElEX09QVElPTikgeworICAgICAgICBpZiAoaXRlbXNbaV0tPmhhc0xv
Y2FsTmFtZShIVE1MTmFtZXM6Om9wdGlvbigpKSkgewogICAgICAgICAgICAgSFRNTE9wdGlvbkVs
ZW1lbnRJbXBsICpvcHRpb24gPSBzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudEltcGwqPihp
dGVtc1tpXSk7CiAgICAgICAgICAgICBpZiAob3B0aW9uLT5zZWxlY3RlZCgpKSB7CiAgICAgICAg
ICAgICAgICAgZW5jb2RlZF92YWx1ZXMuYXBwZW5kRGF0YShuYW1lKCksIG9wdGlvbi0+dmFsdWUo
KSk7CkBAIC0yOTU0LDcgKzI5NTMsNyBAQCBib29sIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6YXBw
ZW5kRm9ybURhCiAgICAgLy8gaW4gYW55IGNhc2UuIG90aGVyd2lzZSB3ZSBoYXZlIG5vIGNvbnNp
c3RlbmN5IHdpdGggdGhlIERPTSBpbnRlcmZhY2UuIEZJWE1FIQogICAgIC8vIHdlIHJldHVybiB0
aGUgZmlyc3Qgb25lIGlmIGl0IHdhcyBhIGNvbWJvYm94IHNlbGVjdAogICAgIGlmICghc3VjY2Vz
c2Z1bCAmJiAhbV9tdWx0aXBsZSAmJiBtX3NpemUgPD0gMSAmJiBpdGVtcy5zaXplKCkgJiYKLSAg
ICAgICAgKGl0ZW1zWzBdLT5pZCgpID09IElEX09QVElPTikgKSB7CisgICAgICAgIChpdGVtc1sw
XS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpKSkgewogICAgICAgICBIVE1MT3B0
aW9uRWxlbWVudEltcGwgKm9wdGlvbiA9IHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50SW1w
bCo+KGl0ZW1zWzBdKTsKICAgICAgICAgaWYgKG9wdGlvbi0+dmFsdWUoKS5pc051bGwoKSkKICAg
ICAgICAgICAgIGVuY29kZWRfdmFsdWVzLmFwcGVuZERhdGEobmFtZSgpLCBvcHRpb24tPnRleHQo
KS5zdHJpbmcoKS5zdHJpcFdoaXRlU3BhY2UoKSk7CkBAIC0yOTc3LDcgKzI5NzYsNyBAQCBpbnQg
SFRNTFNlbGVjdEVsZW1lbnRJbXBsOjpvcHRpb25Ub0xpc3RJCiAgICAgZm9yICg7CiAgICAgICAg
ICBvcHRpb25JbmRleDIgPCBpbnQoaXRlbXMuc2l6ZSgpKSAmJiBvcHRpb25JbmRleDIgPD0gb3B0
aW9uSW5kZXg7CiAgICAgICAgICBsaXN0SW5kZXgrKykgeyAvLyBub3QgYSB0eXBvIQotICAgICAg
ICBpZiAoaXRlbXNbbGlzdEluZGV4XS0+aWQoKSA9PSBJRF9PUFRJT04pCisgICAgICAgIGlmIChp
dGVtc1tsaXN0SW5kZXhdLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvcHRpb24oKSkpCiAgICAg
ICAgICAgICBvcHRpb25JbmRleDIrKzsKICAgICB9CiAgICAgbGlzdEluZGV4LS07CkBAIC0yOTg4
LDEzICsyOTg3LDEzIEBAIGludCBIVE1MU2VsZWN0RWxlbWVudEltcGw6Omxpc3RUb09wdGlvbkkK
IHsKICAgICBRTWVtQXJyYXk8SFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwqPiBpdGVtcyA9IGxp
c3RJdGVtcygpOwogICAgIGlmIChsaXN0SW5kZXggPCAwIHx8IGxpc3RJbmRleCA+PSBpbnQoaXRl
bXMuc2l6ZSgpKSB8fAotICAgICAgICBpdGVtc1tsaXN0SW5kZXhdLT5pZCgpICE9IElEX09QVElP
TikKKyAgICAgICAgIWl0ZW1zW2xpc3RJbmRleF0tPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9w
dGlvbigpKSkKICAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgaW50IG9wdGlvbkluZGV4ID0gMDsg
Ly8gYWN0dWFsIGluZGV4IG9mIG9wdGlvbiBub3QgY291bnRpbmcgT1BUR1JPVVAgZW50cmllcyB0
aGF0IG1heSBiZSBpbiBsaXN0CiAgICAgaW50IGk7CiAgICAgZm9yIChpID0gMDsgaSA8IGxpc3RJ
bmRleDsgaSsrKQotICAgICAgICBpZiAoaXRlbXNbaV0tPmlkKCkgPT0gSURfT1BUSU9OKQorICAg
ICAgICBpZiAoaXRlbXNbaV0tPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9wdGlvbigpKSkKICAg
ICAgICAgICAgIG9wdGlvbkluZGV4Kys7CiAgICAgcmV0dXJuIG9wdGlvbkluZGV4OwogfQpAQCAt
MzAyMCwxMyArMzAxOSwxMyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6cmVjYWxjTGlz
dEl0CiAgICAgbV9saXN0SXRlbXMucmVzaXplKDApOwogICAgIEhUTUxPcHRpb25FbGVtZW50SW1w
bCogZm91bmRTZWxlY3RlZCA9IDA7CiAgICAgd2hpbGUoY3VycmVudCkgewotICAgICAgICBpZiAo
Y3VycmVudC0+aWQoKSA9PSBJRF9PUFRHUk9VUCAmJiBjdXJyZW50LT5maXJzdENoaWxkKCkpIHsK
KyAgICAgICAgaWYgKGN1cnJlbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvcHRncm91cCgpKSAm
JiBjdXJyZW50LT5maXJzdENoaWxkKCkpIHsKICAgICAgICAgICAgIC8vICMjIyB3aGF0IGlmIG9w
dGdyb3VwIGNvbnRhaW5zIGp1c3QgY29tbWVudHM/IGRvbid0IHdhbnQgb25lIG9mIG5vIG9wdGlv
bnMgaW4gaXQuLi4KICAgICAgICAgICAgIG1fbGlzdEl0ZW1zLnJlc2l6ZShtX2xpc3RJdGVtcy5z
aXplKCkrMSk7CiAgICAgICAgICAgICBtX2xpc3RJdGVtc1ttX2xpc3RJdGVtcy5zaXplKCktMV0g
PSBzdGF0aWNfY2FzdDxIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbCo+KGN1cnJlbnQpOwogICAg
ICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQtPmZpcnN0Q2hpbGQoKTsKICAgICAgICAgfQotICAg
ICAgICBpZiAoY3VycmVudC0+aWQoKSA9PSBJRF9PUFRJT04pIHsKKyAgICAgICAgaWYgKGN1cnJl
bnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvcHRpb24oKSkpIHsKICAgICAgICAgICAgIG1fbGlz
dEl0ZW1zLnJlc2l6ZShtX2xpc3RJdGVtcy5zaXplKCkrMSk7CiAgICAgICAgICAgICBtX2xpc3RJ
dGVtc1ttX2xpc3RJdGVtcy5zaXplKCktMV0gPSBzdGF0aWNfY2FzdDxIVE1MR2VuZXJpY0Zvcm1F
bGVtZW50SW1wbCo+KGN1cnJlbnQpOwogICAgICAgICAgICAgaWYgKCFmb3VuZFNlbGVjdGVkICYm
ICFtX211bHRpcGxlICYmIG1fc2l6ZSA8PSAxKSB7CkBAIC0zMDY4LDcgKzMwNjcsNyBAQCB2b2lk
IEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6cmVzZXQoKQogICAgIFFNZW1BcnJheTxIVE1MR2VuZXJp
Y0Zvcm1FbGVtZW50SW1wbCo+IGl0ZW1zID0gbGlzdEl0ZW1zKCk7CiAgICAgdWludCBpOwogICAg
IGZvciAoaSA9IDA7IGkgPCBpdGVtcy5zaXplKCk7IGkrKykgewotICAgICAgICBpZiAoaXRlbXNb
aV0tPmlkKCkgPT0gSURfT1BUSU9OKSB7CisgICAgICAgIGlmIChpdGVtc1tpXS0+aGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpKSB7CiAgICAgICAgICAgICBIVE1MT3B0aW9uRWxlbWVu
dEltcGwgKm9wdGlvbiA9IHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50SW1wbCo+KGl0ZW1z
W2ldKTsKICAgICAgICAgICAgIGJvb2wgc2VsZWN0ZWQgPSAoIW9wdGlvbi0+Z2V0QXR0cmlidXRl
KEFUVFJfU0VMRUNURUQpLmlzTnVsbCgpKTsKICAgICAgICAgICAgIG9wdGlvbi0+c2V0U2VsZWN0
ZWQoc2VsZWN0ZWQpOwpAQCAtMzA4Niw3ICszMDg1LDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVu
dEltcGw6Om5vdGlmeU9wdGlvbgogICAgICAgICBRTWVtQXJyYXk8SFRNTEdlbmVyaWNGb3JtRWxl
bWVudEltcGwqPiBpdGVtcyA9IGxpc3RJdGVtcygpOwogICAgICAgICB1aW50IGk7CiAgICAgICAg
IGZvciAoaSA9IDA7IGkgPCBpdGVtcy5zaXplKCk7IGkrKykgewotICAgICAgICAgICAgaWYgKGl0
ZW1zW2ldLT5pZCgpID09IElEX09QVElPTikKKyAgICAgICAgICAgIGlmIChpdGVtc1tpXS0+aGFz
TG9jYWxOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpKQogICAgICAgICAgICAgICAgIHN0YXRpY19j
YXN0PEhUTUxPcHRpb25FbGVtZW50SW1wbCo+KGl0ZW1zW2ldKS0+bV9zZWxlY3RlZCA9IChpdGVt
c1tpXSA9PSBzZWxlY3RlZE9wdGlvbik7CiAgICAgICAgIH0KICAgICB9CkBAIC0zMTMzLDcgKzMx
MzIsNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6c2V0U2l6ZShsb25nCiAvLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCiAKIEhUTUxLZXlnZW5FbGVtZW50SW1wbDo6SFRNTEtleWdlbkVsZW1lbnRJ
bXBsKERvY3VtZW50UHRyKiBkb2MsIEhUTUxGb3JtRWxlbWVudEltcGwqIGYpCi0gICAgOiBIVE1M
U2VsZWN0RWxlbWVudEltcGwoZG9jLCBmKQorICAgIDogSFRNTFNlbGVjdEVsZW1lbnRJbXBsKEhU
TUxOYW1lczo6a2V5Z2VuKCksIGRvYywgZikKIHsKICAgICBRU3RyaW5nTGlzdCBrZXlzID0gS1NT
TEtleUdlbjo6c3VwcG9ydGVkS2V5U2l6ZXMoKTsKICAgICBmb3IgKFFTdHJpbmdMaXN0OjpJdGVy
YXRvciBpID0ga2V5cy5iZWdpbigpOyBpICE9IGtleXMuZW5kKCk7ICsraSkgewpAQCAtMzE0Mywx
MSArMzE0Miw2IEBAIEhUTUxLZXlnZW5FbGVtZW50SW1wbDo6SFRNTEtleWdlbkVsZW1lbnQKICAg
ICB9CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MS2V5Z2VuRWxlbWVudEltcGw6OmlkKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gSURfS0VZR0VOOwotfQotCiBET01TdHJpbmcgSFRNTEtleWdlbkVsZW1l
bnRJbXBsOjp0eXBlKCkgY29uc3QKIHsKICAgICByZXR1cm4gImtleWdlbiI7CkBAIC0zMjAyLDcg
KzMxOTYsNyBAQCBib29sIEhUTUxLZXlnZW5FbGVtZW50SW1wbDo6YXBwZW5kRm9ybURhCiAvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxPcHRHcm91cEVsZW1lbnRJbXBsOjpIVE1MT3B0R3JvdXBF
bGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmKQotICAg
IDogSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwoZG9jLCBmKQorICAgIDogSFRNTEdlbmVyaWNG
b3JtRWxlbWVudEltcGwoSFRNTE5hbWVzOjpvcHRncm91cCgpLCBkb2MsIGYpCiB7CiB9CiAKQEAg
LTMyMTUsMTEgKzMyMDksNiBAQCBib29sIEhUTUxPcHRHcm91cEVsZW1lbnRJbXBsOjppc0ZvY3Vz
YWJsCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTE9wdEdyb3VwRWxl
bWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfT1BUR1JPVVA7Ci19Ci0KIERP
TVN0cmluZyBIVE1MT3B0R3JvdXBFbGVtZW50SW1wbDo6dHlwZSgpIGNvbnN0CiB7CiAgICAgcmV0
dXJuICJvcHRncm91cCI7CkBAIC0zMjczLDcgKzMyNjIsNyBAQCB2b2lkIEhUTUxPcHRHcm91cEVs
ZW1lbnRJbXBsOjpwYXJzZU1hcHBlCiB2b2lkIEhUTUxPcHRHcm91cEVsZW1lbnRJbXBsOjpyZWNh
bGNTZWxlY3RPcHRpb25zKCkKIHsKICAgICBOb2RlSW1wbCAqc2VsZWN0ID0gcGFyZW50Tm9kZSgp
OwotICAgIHdoaWxlIChzZWxlY3QgJiYgc2VsZWN0LT5pZCgpICE9IElEX1NFTEVDVCkKKyAgICB3
aGlsZSAoc2VsZWN0ICYmICFzZWxlY3QtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzZWxlY3QoKSkp
CiAgICAgICAgIHNlbGVjdCA9IHNlbGVjdC0+cGFyZW50Tm9kZSgpOwogICAgIGlmIChzZWxlY3Qp
CiAgICAgICAgIHN0YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50SW1wbCo+KHNlbGVjdCktPnNl
dFJlY2FsY0xpc3RJdGVtcygpOwpAQCAtMzI5Miw3ICszMjgxLDcgQEAgdm9pZCBIVE1MT3B0R3Jv
dXBFbGVtZW50SW1wbDo6c2V0TGFiZWwoYwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MT3B0
aW9uRWxlbWVudEltcGw6OkhUTUxPcHRpb25FbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCBI
VE1MRm9ybUVsZW1lbnRJbXBsICpmKQotICAgIDogSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwo
ZG9jLCBmKQorICAgIDogSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwoSFRNTE5hbWVzOjpvcHRp
b24oKSwgZG9jLCBmKQogewogICAgIG1fc2VsZWN0ZWQgPSBmYWxzZTsKIH0KQEAgLTMzMDIsMTEg
KzMyOTEsNiBAQCBib29sIEhUTUxPcHRpb25FbGVtZW50SW1wbDo6aXNGb2N1c2FibGUoCiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTE9wdGlvbkVsZW1lbnRJbXBsOjpp
ZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX09QVElPTjsKLX0KLQogRE9NU3RyaW5nIEhUTUxP
cHRpb25FbGVtZW50SW1wbDo6dHlwZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuICJvcHRpb24iOwpA
QCAtMzM1Myw4ICszMzM3LDcgQEAgbG9uZyBIVE1MT3B0aW9uRWxlbWVudEltcGw6OmluZGV4KCkg
Y29ucwogICAgIGludCBsID0gaXRlbXMuY291bnQoKTsKICAgICBpbnQgb3B0aW9uSW5kZXggPSAw
OwogICAgIGZvcihpbnQgaSA9IDA7IGkgPCBsOyBpKyspIHsKLSAgICAgICAgaWYoaXRlbXNbaV0t
PmlkKCkgPT0gSURfT1BUSU9OKQotICAgICAgICB7CisgICAgICAgIGlmIChpdGVtc1tpXS0+aGFz
TG9jYWxOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpKSB7CiAgICAgICAgICAgICBpZiAoc3RhdGlj
X2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnRJbXBsKj4oaXRlbXNbaV0pID09IHRoaXMpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIG9wdGlvbkluZGV4OwogICAgICAgICAgICAgb3B0aW9uSW5kZXgrKzsK
QEAgLTM0MTksNyArMzQwMiw3IEBAIHZvaWQgSFRNTE9wdGlvbkVsZW1lbnRJbXBsOjpjaGlsZHJl
bkNoYW4KIEhUTUxTZWxlY3RFbGVtZW50SW1wbCAqSFRNTE9wdGlvbkVsZW1lbnRJbXBsOjpnZXRT
ZWxlY3QoKSBjb25zdAogewogICAgIE5vZGVJbXBsICpzZWxlY3QgPSBwYXJlbnROb2RlKCk7Ci0g
ICAgd2hpbGUgKHNlbGVjdCAmJiBzZWxlY3QtPmlkKCkgIT0gSURfU0VMRUNUKQorICAgIHdoaWxl
IChzZWxlY3QgJiYgIXNlbGVjdC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnNlbGVjdCgpKSkKICAg
ICAgICAgc2VsZWN0ID0gc2VsZWN0LT5wYXJlbnROb2RlKCk7CiAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PEhUTUxTZWxlY3RFbGVtZW50SW1wbCo+KHNlbGVjdCk7CiB9CkBAIC0zNDQ3LDcgKzM0MzAs
NyBAQCB2b2lkIEhUTUxPcHRpb25FbGVtZW50SW1wbDo6c2V0TGFiZWwoY29uCiAvLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCiAKIEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBsOjpIVE1MVGV4dEFyZWFFbGVtZW50
SW1wbChEb2N1bWVudFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmKQotICAgIDogSFRN
TEdlbmVyaWNGb3JtRWxlbWVudEltcGwoZG9jLCBmKSwgbV92YWx1ZUlzVmFsaWQoZmFsc2UpLCBt
X3ZhbHVlTWF0Y2hlc1JlbmRlcmVyKGZhbHNlKQorICAgIDogSFRNTEdlbmVyaWNGb3JtRWxlbWVu
dEltcGwoSFRNTE5hbWVzOjp0ZXh0YXJlYSgpLCBkb2MsIGYpLCBtX3ZhbHVlSXNWYWxpZChmYWxz
ZSksIG1fdmFsdWVNYXRjaGVzUmVuZGVyZXIoZmFsc2UpCiB7CiAgICAgLy8gRFREIHJlcXVpcmVz
IHJvd3MgJiBjb2xzIGJlIHNwZWNpZmllZCwgYnV0IHdlIHdpbGwgcHJvdmlkZSByZWFzb25hYmxl
IGRlZmF1bHRzCiAgICAgbV9yb3dzID0gMjsKQEAgLTM0NjAsMTEgKzM0NDMsNiBAQCBIVE1MVGV4
dEFyZWFFbGVtZW50SW1wbDo6fkhUTUxUZXh0QXJlYUVsCiAgICAgaWYgKGdldERvY3VtZW50KCkp
IGdldERvY3VtZW50KCktPmRlcmVnaXN0ZXJNYWludGFpbnNTdGF0ZSh0aGlzKTsKIH0KIAotTm9k
ZUltcGw6OklkIEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIElEX1RFWFRBUkVBOwotfQotCiBET01TdHJpbmcgSFRNTFRleHRBcmVhRWxlbWVudEltcGw6
OnR5cGUoKSBjb25zdAogewogICAgIHJldHVybiAidGV4dGFyZWEiOwpAQCAtMzcxNCwxNyArMzY5
MiwxMiBAQCB2b2lkIEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBsOjpzZXRSb3dzKGxvCiAvLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCiAKIEhUTUxJc0luZGV4RWxlbWVudEltcGw6OkhUTUxJc0luZGV4RWxlbWVu
dEltcGwoRG9jdW1lbnRQdHIgKmRvYywgSFRNTEZvcm1FbGVtZW50SW1wbCAqZikKLSAgICA6IEhU
TUxJbnB1dEVsZW1lbnRJbXBsKGRvYywgZikKKyAgICA6IEhUTUxJbnB1dEVsZW1lbnRJbXBsKEhU
TUxOYW1lczo6aXNpbmRleCgpLCBkb2MsIGYpCiB7CiAgICAgbV90eXBlID0gVEVYVDsKICAgICBz
ZXRPdmVycmlkZU5hbWUoImlzaW5kZXgiKTsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxJc0luZGV4
RWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfSVNJTkRFWDsKLX0KLQog
dm9pZCBIVE1MSXNJbmRleEVsZW1lbnRJbXBsOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRB
dHRyaWJ1dGVJbXBsKiBhdHRyKQogewogICAgIHN3aXRjaChhdHRyLT5pZCgpKQpJbmRleDoga2h0
bWwvaHRtbC9odG1sX2Zvcm1pbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dl
YkNvcmUva2h0bWwvaHRtbC9odG1sX2Zvcm1pbXBsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEu
NzUKZGlmZiAtdSAtcCAtcjEuNzUga2h0bWwvaHRtbC9odG1sX2Zvcm1pbXBsLmgKLS0tIGtodG1s
L2h0bWwvaHRtbF9mb3JtaW1wbC5oCTI0IEp1biAyMDA1IDA1OjUzOjI3IC0wMDAwCTEuNzUKKysr
IGtodG1sL2h0bWwvaHRtbF9mb3JtaW1wbC5oCTggSnVsIDIwMDUgMDU6NTc6MjEgLTAwMDAKQEAg
LTY3LDcgKzY3LDggQEAgcHVibGljOgogICAgIEhUTUxGb3JtRWxlbWVudEltcGwoRG9jdW1lbnRQ
dHIgKmRvYyk7CiAgICAgdmlydHVhbCB+SFRNTEZvcm1FbGVtZW50SW1wbCgpOwogCi0gICAgdmly
dHVhbCBJZCBpZCgpIGNvbnN0OworICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1
aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9CisgICAgdmlydHVh
bCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAzOyB9CiAKICAgICB2aXJ0dWFsIHZv
aWQgYXR0YWNoKCk7CiAgICAgdmlydHVhbCB2b2lkIGRldGFjaCgpOwpAQCAtMTYxLDkgKzE2Miwx
MiBAQCBjbGFzcyBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbCA6IHB1YmxpCiAgICAgZnJpZW5k
IGNsYXNzIGtodG1sOjpSZW5kZXJGb3JtRWxlbWVudDsKIAogcHVibGljOgotICAgIEhUTUxHZW5l
cmljRm9ybUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIEhUTUxGb3JtRWxlbWVudEltcGwg
KmYgPSAwKTsKKyAgICBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbChjb25zdCBRdWFsaWZpZWRO
YW1lJiB0YWdOYW1lLCBEb2N1bWVudFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmID0g
MCk7CiAgICAgdmlydHVhbCB+SFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwoKTsKIAorICAgIHZp
cnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRh
Z1N0YXR1c1JlcXVpcmVkOyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7
IHJldHVybiAxOyB9CisKICAgICBIVE1MRm9ybUVsZW1lbnRJbXBsICpmb3JtKCkgeyByZXR1cm4g
bV9mb3JtOyB9CiAKICAgICB2aXJ0dWFsIERPTVN0cmluZyB0eXBlKCkgY29uc3QgPSAwOwpAQCAt
MjM1LDcgKzIzOSw2IEBAIGNsYXNzIEhUTUxCdXR0b25FbGVtZW50SW1wbCA6IHB1YmxpYyBIVE0K
IHsKIHB1YmxpYzoKICAgICBIVE1MQnV0dG9uRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywg
SFRNTEZvcm1FbGVtZW50SW1wbCAqZiA9IDApOwotCiAgICAgdmlydHVhbCB+SFRNTEJ1dHRvbkVs
ZW1lbnRJbXBsKCk7CiAKICAgICBlbnVtIHR5cGVFbnVtIHsKQEAgLTI0NCw3ICsyNDcsNiBAQCBw
dWJsaWM6CiAgICAgICAgIEJVVFRPTgogICAgIH07CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29u
c3Q7CiAgICAgRE9NU3RyaW5nIHR5cGUoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9pZCBwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICphdHRyKTsKQEAgLTI4MCwxMSAr
MjgyLDExIEBAIGNsYXNzIEhUTUxGaWVsZFNldEVsZW1lbnRJbXBsIDogcHVibGljIEgKIHsKIHB1
YmxpYzoKICAgICBIVE1MRmllbGRTZXRFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCBIVE1M
Rm9ybUVsZW1lbnRJbXBsICpmID0gMCk7Ci0KICAgICB2aXJ0dWFsIH5IVE1MRmllbGRTZXRFbGVt
ZW50SW1wbCgpOwotCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwogICAgIAorICAgIHZpcnR1
YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMzsgfQorCXZpcnR1YWwgYm9vbCBj
aGVja0RURChjb25zdCBOb2RlSW1wbCogbmV3Q2hpbGQpOworCiAgICAgdmlydHVhbCBib29sIGlz
Rm9jdXNhYmxlKCkgY29uc3Q7CiAgICAgCiAgICAgdmlydHVhbCBraHRtbDo6UmVuZGVyT2JqZWN0
ICpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSAqLCBraHRtbDo6UmVuZGVyU3R5bGUgKik7CkBA
IC0zMjYsOSArMzI4LDEyIEBAIHB1YmxpYzoKICAgICB9OwogCiAgICAgSFRNTElucHV0RWxlbWVu
dEltcGwoRG9jdW1lbnRQdHIgKmRvYywgSFRNTEZvcm1FbGVtZW50SW1wbCAqZiA9IDApOworICAg
IEhUTUxJbnB1dEVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3Vt
ZW50UHRyICpkb2MsIEhUTUxGb3JtRWxlbWVudEltcGwgKmYgPSAwKTsKICAgICB2aXJ0dWFsIH5I
VE1MSW5wdXRFbGVtZW50SW1wbCgpOworICAgIHZvaWQgaW5pdCgpOwogCi0gICAgdmlydHVhbCBJ
ZCBpZCgpIGNvbnN0OworICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVu
dCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c0ZvcmJpZGRlbjsgfQorICAgIHZpcnR1YWwgaW50
IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMDsgfQogCiAgICAgdmlydHVhbCBib29sIGlz
RW51bWVyYXRhYmxlKCkgY29uc3QgeyByZXR1cm4gaW5wdXRUeXBlKCkgIT0gSU1BR0U7IH0KIApA
QCAtNDU5LDkgKzQ2NCw5IEBAIHB1YmxpYzoKICAgICBIVE1MTGFiZWxFbGVtZW50SW1wbChEb2N1
bWVudFB0ciAqZG9jKTsKICAgICB2aXJ0dWFsIH5IVE1MTGFiZWxFbGVtZW50SW1wbCgpOwogCisg
ICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiA1OyB9CisKICAgICB2
aXJ0dWFsIGJvb2wgaXNGb2N1c2FibGUoKSBjb25zdDsKLSAgICAKLSAgICB2aXJ0dWFsIElkIGlk
KCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVk
QXR0cmlidXRlSW1wbCAqYXR0cik7CiAKQEAgLTQ5Niw3ICs1MDEsNiBAQCBwdWJsaWM6CiAKICAg
ICB2aXJ0dWFsIGJvb2wgaXNGb2N1c2FibGUoKSBjb25zdDsKICAgICAKLSAgICB2aXJ0dWFsIElk
IGlkKCkgY29uc3Q7CiAgICAgdmlydHVhbCBraHRtbDo6UmVuZGVyT2JqZWN0ICpjcmVhdGVSZW5k
ZXJlcihSZW5kZXJBcmVuYSAqLCBraHRtbDo6UmVuZGVyU3R5bGUgKik7CiAKICAgICB2aXJ0dWFs
IERPTVN0cmluZyB0eXBlKCkgY29uc3Q7CkBAIC01MjUsOSArNTI5LDEzIEBAIGNsYXNzIEhUTUxT
ZWxlY3RFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE0KIAogcHVibGljOgogICAgIEhUTUxTZWxlY3RF
bGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmID0gMCk7
CisgICAgSFRNTFNlbGVjdEVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUs
IERvY3VtZW50UHRyICpkb2MsIEhUTUxGb3JtRWxlbWVudEltcGwgKmYgPSAwKTsKICAgICB+SFRN
TFNlbGVjdEVsZW1lbnRJbXBsKCk7CisgICAgdm9pZCBpbml0KCk7CisKKyAgICB2aXJ0dWFsIGlu
dCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDY7IH0KKwl2aXJ0dWFsIGJvb2wgY2hlY2tE
VEQoY29uc3QgTm9kZUltcGwqIG5ld0NoaWxkKTsKIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25z
dDsKICAgICBET01TdHJpbmcgdHlwZSgpIGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lkIHJlY2Fs
Y1N0eWxlKCBTdHlsZUNoYW5nZSApOwpAQCAtNjE0LDcgKzYyMiw3IEBAIGNsYXNzIEhUTUxLZXln
ZW5FbGVtZW50SW1wbCA6IHB1YmxpYyBIVE0KIHB1YmxpYzoKICAgICBIVE1MS2V5Z2VuRWxlbWVu
dEltcGwoRG9jdW1lbnRQdHIgKmRvYywgSFRNTEZvcm1FbGVtZW50SW1wbCAqZiA9IDApOwogCi0g
ICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkg
Y29uc3QgeyByZXR1cm4gMDsgfQogCiAgICAgRE9NU3RyaW5nIHR5cGUoKSBjb25zdDsKIApAQCAt
NjM2LDcgKzY0NCw4IEBAIHB1YmxpYzoKICAgICBIVE1MT3B0R3JvdXBFbGVtZW50SW1wbChEb2N1
bWVudFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmID0gMCk7CiAgICAgdmlydHVhbCB+
SFRNTE9wdEdyb3VwRWxlbWVudEltcGwoKTsKIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsK
Kwl2aXJ0dWFsIGJvb2wgY2hlY2tEVEQoY29uc3QgTm9kZUltcGwqIG5ld0NoaWxkKSB7IHJldHVy
biBuZXdDaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9wdGlvbigpKTsgfQorCiAgICAgRE9N
U3RyaW5nIHR5cGUoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgYm9vbCBpc0ZvY3VzYWJsZSgpIGNv
bnN0OwpAQCAtNjY0LDkgKzY3MywxMiBAQCBjbGFzcyBIVE1MT3B0aW9uRWxlbWVudEltcGwgOiBw
dWJsaWMgSFRNCiBwdWJsaWM6CiAgICAgSFRNTE9wdGlvbkVsZW1lbnRJbXBsKERvY3VtZW50UHRy
ICpkb2MsIEhUTUxGb3JtRWxlbWVudEltcGwgKmYgPSAwKTsKIAorICAgIHZpcnR1YWwgSFRNTFRh
Z1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c09wdGlv
bmFsOyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAyOyB9
CisJdmlydHVhbCBib29sIGNoZWNrRFREKGNvbnN0IE5vZGVJbXBsKiBuZXdDaGlsZCkgeyByZXR1
cm4gbmV3Q2hpbGQtPmlzVGV4dE5vZGUoKTsgfQorCiAgICAgdmlydHVhbCBib29sIGlzRm9jdXNh
YmxlKCkgY29uc3Q7Ci0gICAgCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OworCiAgICAgRE9N
U3RyaW5nIHR5cGUoKSBjb25zdDsKIAogICAgIERPTVN0cmluZyB0ZXh0KCkgY29uc3Q7CkBAIC03
MTQsMTAgKzcyNiw5IEBAIHB1YmxpYzoKICAgICBIVE1MVGV4dEFyZWFFbGVtZW50SW1wbChEb2N1
bWVudFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmID0gMCk7CiAgICAgfkhUTUxUZXh0
QXJlYUVsZW1lbnRJbXBsKCk7CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CisJdmlydHVh
bCBib29sIGNoZWNrRFREKGNvbnN0IE5vZGVJbXBsKiBuZXdDaGlsZCkgeyByZXR1cm4gbmV3Q2hp
bGQtPmlzVGV4dE5vZGUoKTsgfQogCiAgICAgbG9uZyBjb2xzKCkgY29uc3QgeyByZXR1cm4gbV9j
b2xzOyB9Ci0KICAgICBsb25nIHJvd3MoKSBjb25zdCB7IHJldHVybiBtX3Jvd3M7IH0KIAogICAg
IFdyYXBNZXRob2Qgd3JhcCgpIGNvbnN0IHsgcmV0dXJuIG1fd3JhcDsgfQpAQCAtNzg1LDcgKzc5
Niw4IEBAIGNsYXNzIEhUTUxJc0luZGV4RWxlbWVudEltcGwgOiBwdWJsaWMgSFQKIHB1YmxpYzoK
ICAgICBIVE1MSXNJbmRleEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIEhUTUxGb3JtRWxl
bWVudEltcGwgKmYgPSAwKTsKIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdT
dGF0dXNGb3JiaWRkZW47IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsg
cmV0dXJuIDA7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBw
ZWRBdHRyaWJ1dGVJbXBsICphdHRyKTsKIApJbmRleDoga2h0bWwvaHRtbC9odG1sX2hlYWRpbXBs
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9odG1sL2h0
bWxfaGVhZGltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjUwCmRpZmYgLXUgLXAgLXIx
LjUwIGtodG1sL2h0bWwvaHRtbF9oZWFkaW1wbC5jcHAKLS0tIGtodG1sL2h0bWwvaHRtbF9oZWFk
aW1wbC5jcHAJMjIgSnVuIDIwMDUgMTg6MjI6MDEgLTAwMDAJMS41MAorKysga2h0bWwvaHRtbC9o
dG1sX2hlYWRpbXBsLmNwcAk4IEp1bCAyMDA1IDA1OjU3OjIxIC0wMDAwCkBAIC00Niw3ICs0Niw3
IEBAIHVzaW5nIG5hbWVzcGFjZSBET007CiB1c2luZyBuYW1lc3BhY2Uga2h0bWw7CiAKIEhUTUxC
YXNlRWxlbWVudEltcGw6OkhUTUxCYXNlRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAg
ICA6IEhUTUxFbGVtZW50SW1wbChkb2MpCisgICAgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVz
OjpiYXNlKCksIGRvYykKIHsKIH0KIApAQCAtNTQsMTEgKzU0LDYgQEAgSFRNTEJhc2VFbGVtZW50
SW1wbDo6fkhUTUxCYXNlRWxlbWVudEltcAogewogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTEJhc2VF
bGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9CQVNFOwotfQotCiB2b2lk
IEhUTUxCYXNlRWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0
ZUltcGwgKmF0dHIpCiB7CiAgICAgc3dpdGNoKGF0dHItPmlkKCkpCkBAIC0xMTksNyArMTE0LDcg
QEAgdm9pZCBIVE1MQmFzZUVsZW1lbnRJbXBsOjpzZXRUYXJnZXQoY29ucwogLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQogCiBIVE1MTGlua0VsZW1lbnRJbXBsOjpIVE1MTGlua0VsZW1lbnRJbXBsKERvY3Vt
ZW50UHRyICpkb2MpCi0gICAgOiBIVE1MRWxlbWVudEltcGwoZG9jKQorICAgIDogSFRNTEVsZW1l
bnRJbXBsKEhUTUxOYW1lczo6bGluaygpLCBkb2MpCiB7CiAgICAgbV9zaGVldCA9IDA7CiAgICAg
bV9sb2FkaW5nID0gZmFsc2U7CkBAIC0xMzQsMTEgKzEyOSw2IEBAIEhUTUxMaW5rRWxlbWVudElt
cGw6On5IVE1MTGlua0VsZW1lbnRJbXAKICAgICBpZihtX2NhY2hlZFNoZWV0KSBtX2NhY2hlZFNo
ZWV0LT5kZXJlZih0aGlzKTsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxMaW5rRWxlbWVudEltcGw6
OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfTElOSzsKLX0KLQogdm9pZCBIVE1MTGlua0Vs
ZW1lbnRJbXBsOjpzZXREaXNhYmxlZFN0YXRlKGJvb2wgX2Rpc2FibGVkKQogewogICAgIGludCBv
bGREaXNhYmxlZFN0YXRlID0gbV9kaXNhYmxlZFN0YXRlOwpAQCAtNDIzLDcgKzQxMyw3IEBAIHZv
aWQgSFRNTExpbmtFbGVtZW50SW1wbDo6c2V0VHlwZShjb25zdCAKIAogLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQogCi1IVE1MTWV0YUVsZW1lbnRJbXBsOjpIVE1MTWV0YUVsZW1lbnRJbXBsKERvY3VtZW50
UHRyICpkb2MpIDogSFRNTEVsZW1lbnRJbXBsKGRvYykKK0hUTUxNZXRhRWxlbWVudEltcGw6OkhU
TUxNZXRhRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykgOiBIVE1MRWxlbWVudEltcGwoSFRN
TE5hbWVzOjptZXRhKCksIGRvYykKIHsKIH0KIApAQCAtNDMxLDExICs0MjEsNiBAQCBIVE1MTWV0
YUVsZW1lbnRJbXBsOjp+SFRNTE1ldGFFbGVtZW50SW1wCiB7CiB9CiAKLU5vZGVJbXBsOjpJZCBI
VE1MTWV0YUVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX01FVEE7Ci19
Ci0KIHZvaWQgSFRNTE1ldGFFbGVtZW50SW1wbDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVk
QXR0cmlidXRlSW1wbCAqYXR0cikKIHsKICAgICBzd2l0Y2goYXR0ci0+aWQoKSkKQEAgLTUxMiw3
ICs0OTcsNyBAQCB2b2lkIEhUTUxNZXRhRWxlbWVudEltcGw6OnNldFNjaGVtZShjb25zCiAvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxTY3JpcHRFbGVtZW50SW1wbDo6SFRNTFNjcmlwdEVsZW1l
bnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0gICAgOiBIVE1MRWxlbWVudEltcGwoZG9jKSwgbV9j
YWNoZWRTY3JpcHQoMCksIG1fY3JlYXRlZEJ5UGFyc2VyKGZhbHNlKSwgbV9ldmFsdWF0ZWQoZmFs
c2UpCisgICAgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjpzY3JpcHQoKSwgZG9jKSwgbV9j
YWNoZWRTY3JpcHQoMCksIG1fY3JlYXRlZEJ5UGFyc2VyKGZhbHNlKSwgbV9ldmFsdWF0ZWQoZmFs
c2UpCiB7CiB9CiAKQEAgLTUyMiwxMSArNTA3LDYgQEAgSFRNTFNjcmlwdEVsZW1lbnRJbXBsOjp+
SFRNTFNjcmlwdEVsZW1lbgogICAgICAgICBtX2NhY2hlZFNjcmlwdC0+ZGVyZWYodGhpcyk7CiB9
CiAKLU5vZGVJbXBsOjpJZCBIVE1MU2NyaXB0RWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gSURfU0NSSVBUOwotfQotCiBib29sIEhUTUxTY3JpcHRFbGVtZW50SW1wbDo6aXNV
UkxBdHRyaWJ1dGUoQXR0cmlidXRlSW1wbCAqYXR0cikgY29uc3QKIHsKICAgICByZXR1cm4gYXR0
ci0+aWQoKSA9PSBBVFRSX1NSQzsKQEAgLTY5Nyw3ICs2NzcsNyBAQCB2b2lkIEhUTUxTY3JpcHRF
bGVtZW50SW1wbDo6c2V0VHlwZShjb25zCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSFRNTFN0
eWxlRWxlbWVudEltcGw6OkhUTUxTdHlsZUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpIDog
SFRNTEVsZW1lbnRJbXBsKGRvYykKK0hUTUxTdHlsZUVsZW1lbnRJbXBsOjpIVE1MU3R5bGVFbGVt
ZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKSA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6OnN0
eWxlKCksIGRvYykKIHsKICAgICBtX3NoZWV0ID0gMDsKICAgICBtX2xvYWRpbmcgPSBmYWxzZTsK
QEAgLTcwOCwxMSArNjg4LDYgQEAgSFRNTFN0eWxlRWxlbWVudEltcGw6On5IVE1MU3R5bGVFbGVt
ZW50SQogICAgIGlmKG1fc2hlZXQpIG1fc2hlZXQtPmRlcmVmKCk7CiB9CiAKLU5vZGVJbXBsOjpJ
ZCBIVE1MU3R5bGVFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9TVFlM
RTsKLX0KLQogLy8gb3RoZXIgc3R1ZmYuLi4KIHZvaWQgSFRNTFN0eWxlRWxlbWVudEltcGw6OnBh
cnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIpCiB7CkBAIC04MjQs
NyArNzk5LDcgQEAgdm9pZCBIVE1MU3R5bGVFbGVtZW50SW1wbDo6c2V0VHlwZShjb25zdAogLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MVGl0bGVFbGVtZW50SW1wbDo6SFRNTFRpdGxlRWxlbWVu
dEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50SW1wbChkb2MpLCBtX3Rp
dGxlKCIiKQorICAgIDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6dGl0bGUoKSwgZG9jKSwg
bV90aXRsZSgiIikKIHsKIH0KIApAQCAtODMyLDExICs4MDcsNiBAQCBIVE1MVGl0bGVFbGVtZW50
SW1wbDo6fkhUTUxUaXRsZUVsZW1lbnRJCiB7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MVGl0bGVF
bGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9USVRMRTsKLX0KLQogdm9p
ZCBIVE1MVGl0bGVFbGVtZW50SW1wbDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKQogewogICAgIEhU
TUxFbGVtZW50SW1wbDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKSW5kZXg6IGtodG1sL2h0bWwv
aHRtbF9oZWFkaW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2to
dG1sL2h0bWwvaHRtbF9oZWFkaW1wbC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIwCmRpZmYg
LXUgLXAgLXIxLjIwIGtodG1sL2h0bWwvaHRtbF9oZWFkaW1wbC5oCi0tLSBraHRtbC9odG1sL2h0
bWxfaGVhZGltcGwuaAkxOSBKdW4gMjAwNSAwNTo0NDoyOCAtMDAwMAkxLjIwCisrKyBraHRtbC9o
dG1sL2h0bWxfaGVhZGltcGwuaAk4IEp1bCAyMDA1IDA1OjU3OjIyIC0wMDAwCkBAIC00OSwxMCAr
NDksMTIgQEAgcHVibGljOgogICAgIEhUTUxCYXNlRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRv
Yyk7CiAgICAgfkhUTUxCYXNlRWxlbWVudEltcGwoKTsKIAorICAgIHZpcnR1YWwgSFRNTFRhZ1N0
YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c0ZvcmJpZGRl
bjsgfQorICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMDsgfQor
CiAgICAgRE9NU3RyaW5nIGhyZWYoKSBjb25zdCB7IHJldHVybiBtX2hyZWY7IH0KICAgICBET01T
dHJpbmcgdGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXQ7IH0KIAotICAgIHZpcnR1YWwg
SWQgaWQoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFw
cGVkQXR0cmlidXRlSW1wbCAqYXR0cik7CiAgICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b0Rv
Y3VtZW50KCk7CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZWRGcm9tRG9jdW1lbnQoKTsKQEAgLTc3
LDcgKzc5LDggQEAgcHVibGljOgogICAgIEhUTUxMaW5rRWxlbWVudEltcGwoRG9jdW1lbnRQdHIg
KmRvYyk7CiAgICAgfkhUTUxMaW5rRWxlbWVudEltcGwoKTsKIAotICAgIHZpcnR1YWwgSWQgaWQo
KSBjb25zdDsKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBj
b25zdCB7IHJldHVybiBUYWdTdGF0dXNGb3JiaWRkZW47IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQ
cmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KIAogICAgIGJvb2wgZGlzYWJsZWQoKSBjb25z
dDsKICAgICB2b2lkIHNldERpc2FibGVkKGJvb2wpOwpAQCAtMTUyLDEwICsxNTUsMTEgQEAgY2xh
c3MgSFRNTE1ldGFFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MRQogewogcHVibGljOgogICAgIEhU
TUxNZXRhRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYyk7Ci0KICAgICB+SFRNTE1ldGFFbGVt
ZW50SW1wbCgpOwogCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OworICAgIHZpcnR1YWwgSFRN
TFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c0Zv
cmJpZGRlbjsgfQorICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4g
MDsgfQorCiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJp
YnV0ZUltcGwgKmF0dHIpOwogICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9Eb2N1bWVudCgp
OwogCkBAIC0xODUsMTMgKzE4OSwxNyBAQCBjbGFzcyBIVE1MU2NyaXB0RWxlbWVudEltcGwgOiBw
dWJsaWMgSFRNCiBwdWJsaWM6CiAgICAgSFRNTFNjcmlwdEVsZW1lbnRJbXBsKERvY3VtZW50UHRy
ICpkb2MpOwogICAgIH5IVE1MU2NyaXB0RWxlbWVudEltcGwoKTsKLSAgICAKKworICAgIHZpcnR1
YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0
YXR1c1JlcXVpcmVkOyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJl
dHVybiAxOyB9CisJdmlydHVhbCBib29sIGNoZWNrRFREKGNvbnN0IE5vZGVJbXBsKiBuZXdDaGls
ZCkgeyByZXR1cm4gbmV3Q2hpbGQtPmlzVGV4dE5vZGUoKTsgfQorCiAgICAgdmlydHVhbCB2b2lk
IGluc2VydGVkSW50b0RvY3VtZW50KCk7CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZWRGcm9tRG9j
dW1lbnQoKTsKICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5RmluaXNoZWQoa2h0bWw6OkNhY2hlZE9i
amVjdCAqZmluaXNoZWRPYmopOworCiAgICAgdmlydHVhbCB2b2lkIGNoaWxkcmVuQ2hhbmdlZCgp
OwotICAgIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKKwogICAgIHZpcnR1YWwgYm9vbCBp
c1VSTEF0dHJpYnV0ZShBdHRyaWJ1dGVJbXBsICphdHRyKSBjb25zdDsKIAogICAgIHZvaWQgc2V0
Q3JlYXRlZEJ5UGFyc2VyKGJvb2wgY3JlYXRlZEJ5UGFyc2VyKSB7IG1fY3JlYXRlZEJ5UGFyc2Vy
ID0gY3JlYXRlZEJ5UGFyc2VyOyB9CkBAIC0yMzMsNyArMjQxLDkgQEAgcHVibGljOgogICAgIEhU
TUxTdHlsZUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpOwogICAgIH5IVE1MU3R5bGVFbGVt
ZW50SW1wbCgpOwogCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OworICAgIHZpcnR1YWwgSFRN
TFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1Jl
cXVpcmVkOyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAx
OyB9CisJdmlydHVhbCBib29sIGNoZWNrRFREKGNvbnN0IE5vZGVJbXBsKiBuZXdDaGlsZCkgeyBy
ZXR1cm4gbmV3Q2hpbGQtPmlzVGV4dE5vZGUoKTsgfQogCiAgICAgU3R5bGVTaGVldEltcGwgKnNo
ZWV0KCkgY29uc3QgeyByZXR1cm4gbV9zaGVldDsgfQogCkBAIC0yNjgsMTAgKzI3OCw5IEBAIGNs
YXNzIEhUTUxUaXRsZUVsZW1lbnRJbXBsIDogcHVibGljIEhUTUwKIHsKIHB1YmxpYzoKICAgICBI
VE1MVGl0bGVFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKTsKLQogICAgIH5IVE1MVGl0bGVF
bGVtZW50SW1wbCgpOwogCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OworCXZpcnR1YWwgYm9v
bCBjaGVja0RURChjb25zdCBOb2RlSW1wbCogbmV3Q2hpbGQpIHsgcmV0dXJuIG5ld0NoaWxkLT5p
c1RleHROb2RlKCk7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9Eb2N1bWVudCgp
OwogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVkRnJvbURvY3VtZW50KCk7CkluZGV4OiBraHRtbC9o
dG1sL2h0bWxfaW1hZ2VpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2Vi
Q29yZS9raHRtbC9odG1sL2h0bWxfaW1hZ2VpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS40MwpkaWZmIC11IC1wIC1yMS40MyBraHRtbC9odG1sL2h0bWxfaW1hZ2VpbXBsLmNwcAotLS0g
a2h0bWwvaHRtbC9odG1sX2ltYWdlaW1wbC5jcHAJMjEgSnVuIDIwMDUgMjI6Mjc6NTUgLTAwMDAJ
MS40MworKysga2h0bWwvaHRtbC9odG1sX2ltYWdlaW1wbC5jcHAJOCBKdWwgMjAwNSAwNTo1Nzoy
MiAtMDAwMApAQCAtNTEsNyArNTEsNyBAQAogdXNpbmcgbmFtZXNwYWNlIERPTTsKIHVzaW5nIG5h
bWVzcGFjZSBraHRtbDsKIAotLy8jZGVmaW5lIElOU1RSVU1FTlRfTEFZT1VUX1NDSEVEVUxJTkcg
MQorLy8gI2RlZmluZSBJTlNUUlVNRU5UX0xBWU9VVF9TQ0hFRFVMSU5HIDEKIAogSFRNTEltYWdl
TG9hZGVyOjpIVE1MSW1hZ2VMb2FkZXIoRWxlbWVudEltcGwqIGVsdCkKIDptX2VsZW1lbnQoZWx0
KSwgbV9pbWFnZSgwKSwgbV9maXJlZExvYWQodHJ1ZSksIG1faW1hZ2VDb21wbGV0ZSh0cnVlKQpA
QCAtNzUsNyArNzUsNyBAQCB2b2lkIEhUTUxJbWFnZUxvYWRlcjo6dXBkYXRlRnJvbUVsZW1lbnQo
CiAgICAgICAgIHJldHVybjsKIAogICAgIEF0b21pY1N0cmluZyBhdHRyOwotICAgIGlmIChlbGVt
ZW50KCktPmlkKCkgPT0gSURfT0JKRUNUKQorICAgIGlmIChlbGVtZW50KCktPmhhc0xvY2FsTmFt
ZShIVE1MTmFtZXM6Om9iamVjdCgpKSkKICAgICAgICAgYXR0ciA9IGVsZW1lbnQoKS0+Z2V0QXR0
cmlidXRlKEFUVFJfREFUQSk7CiAgICAgZWxzZQogICAgICAgICBhdHRyID0gZWxlbWVudCgpLT5n
ZXRBdHRyaWJ1dGUoQVRUUl9TUkMpOwpAQCAtODYsNiArODYsMTAgQEAgdm9pZCBIVE1MSW1hZ2VM
b2FkZXI6OnVwZGF0ZUZyb21FbGVtZW50KAogICAgICAgICBuZXdJbWFnZSA9IGVsZW1lbnQoKS0+
Z2V0RG9jdW1lbnQoKS0+ZG9jTG9hZGVyKCktPnJlcXVlc3RJbWFnZShraHRtbDo6cGFyc2VVUkwo
YXR0cikpOwogCiAgICAgaWYgKG5ld0ltYWdlICE9IG1faW1hZ2UpIHsKKyNpZmRlZiBJTlNUUlVN
RU5UX0xBWU9VVF9TQ0hFRFVMSU5HCisgICAgICAgIGlmICghZG9jdW1lbnQtPm93bmVyRWxlbWVu
dCgpICYmIG5ld0ltYWdlKQorICAgICAgICAgICAgcHJpbnRmKCJJbWFnZSByZXF1ZXN0ZWQgYXQg
JWRcbiIsIGVsZW1lbnQoKS0+Z2V0RG9jdW1lbnQoKS0+ZWxhcHNlZFRpbWUoKSk7CisjZW5kaWYK
ICAgICAgICAgbV9maXJlZExvYWQgPSBmYWxzZTsKICAgICAgICAgbV9pbWFnZUNvbXBsZXRlID0g
ZmFsc2U7CiAgICAgICAgIENhY2hlZEltYWdlKiBvbGRJbWFnZSA9IG1faW1hZ2U7CkBAIC0xMzMs
MjEgKzEzNywyMSBAQCB2b2lkIEhUTUxJbWFnZUxvYWRlcjo6bm90aWZ5RmluaXNoZWQoQ2FjCiAv
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxJbWFnZUVsZW1lbnRJbXBsOjpIVE1MSW1hZ2VFbGVt
ZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmKQotICAgIDog
SFRNTEVsZW1lbnRJbXBsKGRvYyksIG1faW1hZ2VMb2FkZXIodGhpcyksIGlzbWFwKGZhbHNlKSwg
bV9mb3JtKGYpCisgICAgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjppbWcoKSwgZG9jKSwg
bV9pbWFnZUxvYWRlcih0aGlzKSwgaXNtYXAoZmFsc2UpLCBtX2Zvcm0oZikKIHsKICAgICBpZiAo
bV9mb3JtKQogICAgICAgICBtX2Zvcm0tPnJlZ2lzdGVySW1nRWxlbWVudCh0aGlzKTsKIH0KIAot
SFRNTEltYWdlRWxlbWVudEltcGw6On5IVE1MSW1hZ2VFbGVtZW50SW1wbCgpCitIVE1MSW1hZ2VF
bGVtZW50SW1wbDo6SFRNTEltYWdlRWxlbWVudEltcGwoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFn
TmFtZSwgRG9jdW1lbnRQdHIgKmRvYykKKyAgICA6IEhUTUxFbGVtZW50SW1wbCh0YWdOYW1lLCBk
b2MpLCBtX2ltYWdlTG9hZGVyKHRoaXMpLCBpc21hcChmYWxzZSksIG1fZm9ybSgwKQogewotICAg
IGlmIChtX2Zvcm0pCi0gICAgICAgIG1fZm9ybS0+cmVtb3ZlSW1nRWxlbWVudCh0aGlzKTsKIH0K
IAotTm9kZUltcGw6OklkIEhUTUxJbWFnZUVsZW1lbnRJbXBsOjppZCgpIGNvbnN0CitIVE1MSW1h
Z2VFbGVtZW50SW1wbDo6fkhUTUxJbWFnZUVsZW1lbnRJbXBsKCkKIHsKLSAgICByZXR1cm4gSURf
SU1HOworICAgIGlmIChtX2Zvcm0pCisgICAgICAgIG1fZm9ybS0+cmVtb3ZlSW1nRWxlbWVudCh0
aGlzKTsKIH0KIAogYm9vbCBIVE1MSW1hZ2VFbGVtZW50SW1wbDo6bWFwVG9FbnRyeShOb2RlSW1w
bDo6SWQgYXR0ciwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3QKQEAgLTUyOCw3
ICs1MzIsNyBAQCBsb25nIEhUTUxJbWFnZUVsZW1lbnRJbXBsOjp5KCkgY29uc3QKIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KIAogSFRNTE1hcEVsZW1lbnRJbXBsOjpIVE1MTWFwRWxlbWVudEltcGwoRG9j
dW1lbnRQdHIgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50SW1wbChkb2MpCisgICAgOiBIVE1MRWxl
bWVudEltcGwoSFRNTE5hbWVzOjptYXAoKSwgZG9jKQogewogfQogCkBAIC01MzgsOSArNTQyLDEx
IEBAIEhUTUxNYXBFbGVtZW50SW1wbDo6fkhUTUxNYXBFbGVtZW50SW1wbCgKICAgICAgICAgZ2V0
RG9jdW1lbnQoKS0+cmVtb3ZlSW1hZ2VNYXAodGhpcyk7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1M
TWFwRWxlbWVudEltcGw6OmlkKCkgY29uc3QKK2Jvb2wgSFRNTE1hcEVsZW1lbnRJbXBsOjpjaGVj
a0RURChjb25zdCBOb2RlSW1wbCogbmV3Q2hpbGQpCiB7Ci0gICAgcmV0dXJuIElEX01BUDsKKwkv
LyBGSVhNRTogVGhpcyBzZWVtcyByZWFsbHkgb2RkLCBhbGxvd2luZyBvbmx5IGJsb2NrcyBpbnNp
ZGUgbWFwLgorCXJldHVybiBuZXdDaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmFyZWEoKSkg
fHwgbmV3Q2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzY3JpcHQoKSkgfHwKKwkJICAgaW5C
bG9ja1RhZ0xpc3QobmV3Q2hpbGQpOwogfQogCiBib29sCkBAIC01NTIsMzIgKzU1OCwyOCBAQCBI
VE1MTWFwRWxlbWVudEltcGw6Om1hcE1vdXNlRXZlbnQoaW50IHhfCiAgICAgUVB0clN0YWNrPE5v
ZGVJbXBsPiBub2RlU3RhY2s7CiAKICAgICBOb2RlSW1wbCAqY3VycmVudCA9IGZpcnN0Q2hpbGQo
KTsKLSAgICB3aGlsZSgxKQotICAgIHsKLSAgICAgICAgaWYoIWN1cnJlbnQpCi0gICAgICAgIHsK
KyAgICB3aGlsZSAoMSkgeworICAgICAgICBpZiAoIWN1cnJlbnQpIHsKICAgICAgICAgICAgIGlm
KG5vZGVTdGFjay5pc0VtcHR5KCkpIGJyZWFrOwogICAgICAgICAgICAgY3VycmVudCA9IG5vZGVT
dGFjay5wb3AoKTsKICAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0U2libGluZygp
OwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgaWYoY3VycmVudC0+
aWQoKT09SURfQVJFQSkKLSAgICAgICAgeworICAgICAgICAKKyAgICAgICAgaWYgKGN1cnJlbnQt
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjphcmVhKCkpKSB7CiAgICAgICAgICAgICAvL2NvdXQgPDwg
ImFyZWEgZm91bmQgIiA8PCBlbmRsOwotICAgICAgICAgICAgSFRNTEFyZWFFbGVtZW50SW1wbCog
YXJlYT1zdGF0aWNfY2FzdDxIVE1MQXJlYUVsZW1lbnRJbXBsKj4oY3VycmVudCk7CisgICAgICAg
ICAgICBIVE1MQXJlYUVsZW1lbnRJbXBsKiBhcmVhID0gc3RhdGljX2Nhc3Q8SFRNTEFyZWFFbGVt
ZW50SW1wbCo+KGN1cnJlbnQpOwogICAgICAgICAgICAgaWYgKGFyZWEtPm1hcE1vdXNlRXZlbnQo
eF8seV8sd2lkdGhfLGhlaWdodF8sIGluZm8pKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICB9CisgICAgICAgIAogICAgICAgICBOb2RlSW1wbCAqY2hpbGQgPSBjdXJyZW50
LT5maXJzdENoaWxkKCk7Ci0gICAgICAgIGlmKGNoaWxkKQotICAgICAgICB7CisgICAgICAgIGlm
IChjaGlsZCkgewogICAgICAgICAgICAgbm9kZVN0YWNrLnB1c2goY3VycmVudCk7CiAgICAgICAg
ICAgICBjdXJyZW50ID0gY2hpbGQ7CiAgICAgICAgIH0KICAgICAgICAgZWxzZQotICAgICAgICB7
CiAgICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAg
fQogICAgIH0KIAogICAgIHJldHVybiBmYWxzZTsKQEAgLTYyMiw3ICs2MjQsNyBAQCB2b2lkIEhU
TUxNYXBFbGVtZW50SW1wbDo6c2V0TmFtZShjb25zdCBECiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAK
IEhUTUxBcmVhRWxlbWVudEltcGw6OkhUTUxBcmVhRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRv
YykKLSAgICA6IEhUTUxBbmNob3JFbGVtZW50SW1wbChkb2MpCisgICAgOiBIVE1MQW5jaG9yRWxl
bWVudEltcGwoSFRNTE5hbWVzOjphcmVhKCksIGRvYykKIHsKICAgICBtX2Nvb3Jkcz0wOwogICAg
IG1fY29vcmRzTGVuID0gMDsKQEAgLTYzNSwxMSArNjM3LDYgQEAgSFRNTEFyZWFFbGVtZW50SW1w
bDo6fkhUTUxBcmVhRWxlbWVudEltcAogICAgIGlmIChtX2Nvb3JkcykgZGVsZXRlIFtdIG1fY29v
cmRzOwogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTEFyZWFFbGVtZW50SW1wbDo6aWQoKSBjb25zdAot
ewotICAgIHJldHVybiBJRF9BUkVBOwotfQotCiB2b2lkIEhUTUxBcmVhRWxlbWVudEltcGw6OnBh
cnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIpCiB7CiAgICAgc3dp
dGNoIChhdHRyLT5pZCgpKQpJbmRleDoga2h0bWwvaHRtbC9odG1sX2ltYWdlaW1wbC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbF9pbWFnZWlt
cGwuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yMQpkaWZmIC11IC1wIC1yMS4yMSBraHRtbC9o
dG1sL2h0bWxfaW1hZ2VpbXBsLmgKLS0tIGtodG1sL2h0bWwvaHRtbF9pbWFnZWltcGwuaAkxMSBN
YXkgMjAwNSAwNTo0OTozNCAtMDAwMAkxLjIxCisrKyBraHRtbC9odG1sL2h0bWxfaW1hZ2VpbXBs
LmgJOCBKdWwgMjAwNSAwNTo1NzoyMiAtMDAwMApAQCAtNzUsOSArNzUsMTEgQEAgY2xhc3MgSFRN
TEltYWdlRWxlbWVudEltcGwKICAgICBmcmllbmQgY2xhc3MgSFRNTEZvcm1FbGVtZW50SW1wbDsK
IHB1YmxpYzoKICAgICBIVE1MSW1hZ2VFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCBIVE1M
Rm9ybUVsZW1lbnRJbXBsICpmID0gMCk7CisgICAgSFRNTEltYWdlRWxlbWVudEltcGwoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnRQdHIqIGRvYyk7CiAgICAgfkhUTUxJbWFn
ZUVsZW1lbnRJbXBsKCk7CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CisgICAgdmlydHVh
bCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3Rh
dHVzRm9yYmlkZGVuOyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJl
dHVybiAwOyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShOb2RlSW1wbDo6SWQgYXR0
ciwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lk
IHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKik7CkBAIC0xNjEsNyAr
MTYzLDggQEAgcHVibGljOgogICAgIEhUTUxBcmVhRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRv
Yyk7CiAgICAgfkhUTUxBcmVhRWxlbWVudEltcGwoKTsKIAotICAgIHZpcnR1YWwgSWQgaWQoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25z
dCB7IHJldHVybiBUYWdTdGF0dXNGb3JiaWRkZW47IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQcmlv
cml0eSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICphdHRyKTsKIApAQCAtMjEyLDEwICsyMTUs
MTEgQEAgY2xhc3MgSFRNTE1hcEVsZW1lbnRJbXBsIDogcHVibGljIEhUTUxFbAogewogcHVibGlj
OgogICAgIEhUTUxNYXBFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKTsKLQogICAgIH5IVE1M
TWFwRWxlbWVudEltcGwoKTsKIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdT
dGF0dXNSZXF1aXJlZDsgfQorICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyBy
ZXR1cm4gMTsgfQorCXZpcnR1YWwgYm9vbCBjaGVja0RURChjb25zdCBOb2RlSW1wbCogbmV3Q2hp
bGQpOwogCiAgICAgdmlydHVhbCBET01TdHJpbmcgZ2V0TmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1f
bmFtZTsgfQogCkluZGV4OiBraHRtbC9odG1sL2h0bWxfaW5saW5laW1wbC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sX2lubGluZWltcGwu
Y3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjQyCmRpZmYgLXUgLXAgLXIxLjQyIGtodG1sL2h0
bWwvaHRtbF9pbmxpbmVpbXBsLmNwcAotLS0ga2h0bWwvaHRtbC9odG1sX2lubGluZWltcGwuY3Bw
CTExIE1heSAyMDA1IDA1OjQ5OjM0IC0wMDAwCTEuNDIKKysrIGtodG1sL2h0bWwvaHRtbF9pbmxp
bmVpbXBsLmNwcAk4IEp1bCAyMDA1IDA1OjU3OjIzIC0wMDAwCkBAIC00NSw3ICs0NSwxMyBAQCB1
c2luZyBuYW1lc3BhY2Uga2h0bWw7CiBuYW1lc3BhY2UgRE9NIHsKIAogSFRNTEFuY2hvckVsZW1l
bnRJbXBsOjpIVE1MQW5jaG9yRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgICA6IEhU
TUxFbGVtZW50SW1wbChkb2MpCisgICAgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjphKCks
IGRvYykKK3sKKyAgICBtX2hhc1RhcmdldCA9IGZhbHNlOworfQorCitIVE1MQW5jaG9yRWxlbWVu
dEltcGw6OkhUTUxBbmNob3JFbGVtZW50SW1wbChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1l
LCBEb2N1bWVudFB0ciAqZG9jKQorICAgIDogSFRNTEVsZW1lbnRJbXBsKHRhZ05hbWUsIGRvYykK
IHsKICAgICBtX2hhc1RhcmdldCA9IGZhbHNlOwogfQpAQCAtMTA0LDExICsxMTAsNiBAQCBib29s
IEhUTUxBbmNob3JFbGVtZW50SW1wbDo6aXNLZXlib2FyZEZvCiAgICAgcmV0dXJuIGdldERvY3Vt
ZW50KCktPnBhcnQoKS0+dGFic1RvTGlua3MoKTsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxBbmNo
b3JFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9BOwotfQotCiB2b2lk
IEhUTUxBbmNob3JFbGVtZW50SW1wbDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudEltcGwgKmV2
dCkKIHsKICAgICAvLyBSZWFjdCBvbiBjbGlja3MgYW5kIG9uIGtleXByZXNzZXMuCkBAIC0xNTIs
NyArMTUzLDcgQEAgdm9pZCBIVE1MQW5jaG9yRWxlbWVudEltcGw6OmRlZmF1bHRFdmVudAogICAg
ICAgICBpZiAoIGUgJiYgZS0+YnV0dG9uKCkgPT0gMSApCiAgICAgICAgICAgICB1dGFyZ2V0ID0g
Il9ibGFuayI7CiAKLSAgICAgICAgaWYgKCBldnQtPnRhcmdldCgpLT5pZCgpID09IElEX0lNRyAp
IHsKKyAgICAgICAgaWYgKGV2dC0+dGFyZ2V0KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppbWco
KSkpIHsKICAgICAgICAgICAgIEhUTUxJbWFnZUVsZW1lbnRJbXBsKiBpbWcgPSBzdGF0aWNfY2Fz
dDxIVE1MSW1hZ2VFbGVtZW50SW1wbCo+KCBldnQtPnRhcmdldCgpICk7CiAgICAgICAgICAgICBp
ZiAoIGltZyAmJiBpbWctPmlzU2VydmVyTWFwKCkgKQogICAgICAgICAgICAgewpAQCAtMzgyLDcg
KzM4Myw3IEBAIHZvaWQgSFRNTEFuY2hvckVsZW1lbnRJbXBsOjpmb2N1cygpCiAKIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KIAotSFRNTEJSRWxlbWVudEltcGw6OkhUTUxCUkVsZW1lbnRJbXBsKERvY3Vt
ZW50UHRyICpkb2MpIDogSFRNTEVsZW1lbnRJbXBsKGRvYykKK0hUTUxCUkVsZW1lbnRJbXBsOjpI
VE1MQlJFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKSA6IEhUTUxFbGVtZW50SW1wbChIVE1M
TmFtZXM6OmJyKCksIGRvYykKIHsKIH0KIApAQCAtMzkwLDExICszOTEsNiBAQCBIVE1MQlJFbGVt
ZW50SW1wbDo6fkhUTUxCUkVsZW1lbnRJbXBsKCkKIHsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxC
UkVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0JSOwotfQotCiBib29s
IEhUTUxCUkVsZW1lbnRJbXBsOjptYXBUb0VudHJ5KE5vZGVJbXBsOjpJZCBhdHRyLCBNYXBwZWRB
dHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdAogewogICAgIGlmIChhdHRyID09IEFUVFJfQ0xF
QVIpIHsKQEAgLTQ0NSw3ICs0NDEsNyBAQCB2b2lkIEhUTUxCUkVsZW1lbnRJbXBsOjpzZXRDbGVh
cihjb25zdCBECiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxGb250RWxlbWVudEltcGw6OkhU
TUxGb250RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50SW1w
bChkb2MpCisgICAgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjpmb250KCksIGRvYykKIHsK
IH0KIApAQCAtNDUzLDExICs0NDksNiBAQCBIVE1MRm9udEVsZW1lbnRJbXBsOjp+SFRNTEZvbnRF
bGVtZW50SW1wCiB7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MRm9udEVsZW1lbnRJbXBsOjppZCgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0ZPTlQ7Ci19Ci0KIC8vIEFsbG93cyBsZWFkaW5nIHNw
YWNlcy4KIC8vIEFsbG93cyB0cmFpbGluZyBub25udW1lcmljIGNoYXJhY3RlcnMuCiAvLyBSZXR1
cm5zIDEwIGZvciBhbnkgc2l6ZSBncmVhdGVyIHRoYW4gOS4KQEAgLTU5MCw4ICs1ODEsOCBAQCB2
b2lkIEhUTUxGb250RWxlbWVudEltcGw6OnNldFNpemUoY29uc3QgCiAKIC8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KIAotSFRNTE1vZEVsZW1lbnRJbXBsOjpIVE1MTW9kRWxlbWVudEltcGwoRG9jdW1lbnRQ
dHIgKmRvYywgdXNob3J0IGVsZW1lbnRJZCkKLSAgICA6IEhUTUxHZW5lcmljRWxlbWVudEltcGwo
ZG9jLCBlbGVtZW50SWQpCitIVE1MTW9kRWxlbWVudEltcGw6OkhUTUxNb2RFbGVtZW50SW1wbChj
b25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudFB0ciAqZG9jKQorICAgIDogSFRN
TEVsZW1lbnRJbXBsKHRhZ05hbWUsIGRvYykKIHsKIH0KIApAQCAtNjE4LDE1ICs2MDksMTAgQEAg
dm9pZCBIVE1MTW9kRWxlbWVudEltcGw6OnNldERhdGVUaW1lKGNvbgogLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQogCiBIVE1MUXVvdGVFbGVtZW50SW1wbDo6SFRNTFF1b3RlRWxlbWVudEltcGwoRG9jdW1l
bnRQdHIgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50SW1wbChkb2MpCisgICAgOiBIVE1MRWxlbWVu
dEltcGwoSFRNTE5hbWVzOjpxKCksIGRvYykKIHsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxRdW90
ZUVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX1E7Ci19Ci0gICAgCiBE
T01TdHJpbmcgSFRNTFF1b3RlRWxlbWVudEltcGw6OmNpdGUoKSBjb25zdAogewogICAgIHJldHVy
biBnZXRBdHRyaWJ1dGUoQVRUUl9DSVRFKTsKSW5kZXg6IGtodG1sL2h0bWwvaHRtbF9pbmxpbmVp
bXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9o
dG1sX2lubGluZWltcGwuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xOQpkaWZmIC11IC1wIC1y
MS4xOSBraHRtbC9odG1sL2h0bWxfaW5saW5laW1wbC5oCi0tLSBraHRtbC9odG1sL2h0bWxfaW5s
aW5laW1wbC5oCTExIE1heSAyMDA1IDA1OjQ5OjM0IC0wMDAwCTEuMTkKKysrIGtodG1sL2h0bWwv
aHRtbF9pbmxpbmVpbXBsLmgJOCBKdWwgMjAwNSAwNTo1NzoyMyAtMDAwMApAQCAtMzQsMTIgKzM0
LDE1IEBAIGNsYXNzIEhUTUxBbmNob3JFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE0KIHsKIHB1Ymxp
YzoKICAgICBIVE1MQW5jaG9yRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYyk7CisgICAgSFRN
TEFuY2hvckVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50
UHRyKiBkb2MpOwogICAgIH5IVE1MQW5jaG9yRWxlbWVudEltcGwoKTsKIAorICAgIHZpcnR1YWwg
SFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1
c1JlcXVpcmVkOyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVy
biAxOyB9CisKICAgICB2aXJ0dWFsIGJvb2wgaXNNb3VzZUZvY3VzYWJsZSgpIGNvbnN0OwogICAg
IHZpcnR1YWwgYm9vbCBpc0tleWJvYXJkRm9jdXNhYmxlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBi
b29sIGlzRm9jdXNhYmxlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwogICAg
IHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICph
dHRyKTsKICAgICB2aXJ0dWFsIHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudEltcGwgKmV2
dCk7CiAgICAgdmlydHVhbCB2b2lkIGFjY2Vzc0tleUFjdGlvbihib29sIGZ1bGxBY3Rpb24pOwpA
QCAtOTcsOSArMTAwLDEwIEBAIGNsYXNzIEhUTUxCUkVsZW1lbnRJbXBsIDogcHVibGljIEhUTUxF
bGUKIHB1YmxpYzoKICAgICBIVE1MQlJFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKTsKICAg
ICB+SFRNTEJSRWxlbWVudEltcGwoKTsKLQotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKICAg
ICAKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7
IHJldHVybiBUYWdTdGF0dXNGb3JiaWRkZW47IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0
eSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKwogICAgIHZpcnR1YWwgYm9vbCBtYXBUb0VudHJ5KElk
IGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0OwogICAgIHZpcnR1YWwg
dm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICphdHRyKTsKICAg
ICAKQEAgLTExNiw5ICsxMjAsMTAgQEAgY2xhc3MgSFRNTEZvbnRFbGVtZW50SW1wbCA6IHB1Ymxp
YyBIVE1MRQogcHVibGljOgogICAgIEhUTUxGb250RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRv
Yyk7CiAgICAgfkhUTUxGb250RWxlbWVudEltcGwoKTsKLQotICAgIHZpcnR1YWwgSWQgaWQoKSBj
b25zdDsKICAgICAKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQo
KSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQorICAgIHZpcnR1YWwgaW50IHRh
Z1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMTsgfQorCiAgICAgdmlydHVhbCBib29sIG1hcFRv
RW50cnkoSWQgYXR0ciwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3Q7CiAgICAg
dmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0
dHIpOwogCkBAIC0xMzQsMTAgKzEzOSwxMyBAQCBwdWJsaWM6CiAKIC8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KIAotY2xhc3MgSFRNTE1vZEVsZW1lbnRJbXBsIDogcHVibGljIEhUTUxHZW5lcmljRWxlbWVu
dEltcGwKK2NsYXNzIEhUTUxNb2RFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MRWxlbWVudEltcGwK
IHsKIHB1YmxpYzoKLSAgICBIVE1MTW9kRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgdXNo
b3J0IGVsZW1lbnRJZCk7CisgICAgSFRNTE1vZEVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5h
bWUmIHRhZ05hbWUsIERvY3VtZW50UHRyICpkb2MpOworCisgICAgdmlydHVhbCBIVE1MVGFnU3Rh
dHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzUmVxdWlyZWQ7
IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDE7IH0KIAog
ICAgIERPTVN0cmluZyBjaXRlKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRDaXRlKGNvbnN0IERPTVN0
cmluZyAmKTsKQEAgLTE1Miw5ICsxNjAsMTAgQEAgY2xhc3MgSFRNTFF1b3RlRWxlbWVudEltcGwg
OiBwdWJsaWMgSFRNTAogewogcHVibGljOgogICAgIEhUTUxRdW90ZUVsZW1lbnRJbXBsKERvY3Vt
ZW50UHRyICpkb2MpOwotCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OwogICAgIAorICAgIHZp
cnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRh
Z1N0YXR1c1JlcXVpcmVkOyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7
IHJldHVybiAxOyB9CisKICAgICBET01TdHJpbmcgY2l0ZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0
Q2l0ZShjb25zdCBET01TdHJpbmcgJik7CiB9OwpJbmRleDoga2h0bWwvaHRtbC9odG1sX2xpc3Rp
bXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9odG1s
L2h0bWxfbGlzdGltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjkKZGlmZiAtdSAtcCAt
cjEuOSBraHRtbC9odG1sL2h0bWxfbGlzdGltcGwuY3BwCi0tLSBraHRtbC9odG1sL2h0bWxfbGlz
dGltcGwuY3BwCTExIE1heSAyMDA1IDA1OjQ5OjM0IC0wMDAwCTEuOQorKysga2h0bWwvaHRtbC9o
dG1sX2xpc3RpbXBsLmNwcAk4IEp1bCAyMDA1IDA1OjU3OjIzIC0wMDAwCkBAIC0zMiwxMSArMzIs
NiBAQCB1c2luZyBuYW1lc3BhY2Uga2h0bWw7CiAKIG5hbWVzcGFjZSBET00gewogCi1Ob2RlSW1w
bDo6SWQgSFRNTFVMaXN0RWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURf
VUw7Ci19Ci0KIGJvb2wgSFRNTFVMaXN0RWxlbWVudEltcGw6Om1hcFRvRW50cnkoTm9kZUltcGw6
OklkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0CiB7CiAgICAgc3dp
dGNoIChhdHRyKSB7CkBAIC04NCwxMSArNzksNiBAQCB2b2lkIEhUTUxVTGlzdEVsZW1lbnRJbXBs
OjpzZXRUeXBlKGNvbnN0CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotTm9kZUltcGw6OklkIEhU
TUxEaXJlY3RvcnlFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9ESVI7
Ci19Ci0KIGJvb2wgSFRNTERpcmVjdG9yeUVsZW1lbnRJbXBsOjpjb21wYWN0KCkgY29uc3QKIHsK
ICAgICByZXR1cm4gIWdldEF0dHJpYnV0ZShBVFRSX0NPTVBBQ1QpLmlzTnVsbCgpOwpAQCAtMTAx
LDExICs5MSw2IEBAIHZvaWQgSFRNTERpcmVjdG9yeUVsZW1lbnRJbXBsOjpzZXRDb21wYWMKIAog
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Ob2RlSW1wbDo6SWQgSFRNTE1lbnVFbGVtZW50SW1wbDo6
aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9NRU5VOwotfQotCiBib29sIEhUTUxNZW51RWxl
bWVudEltcGw6OmNvbXBhY3QoKSBjb25zdAogewogICAgIHJldHVybiAhZ2V0QXR0cmlidXRlKEFU
VFJfQ09NUEFDVCkuaXNOdWxsKCk7CkBAIC0xMTgsMTEgKzEwMyw2IEBAIHZvaWQgSFRNTE1lbnVF
bGVtZW50SW1wbDo6c2V0Q29tcGFjdChib28KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Ob2Rl
SW1wbDo6SWQgSFRNTE9MaXN0RWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
SURfT0w7Ci19Ci0KIGJvb2wgSFRNTE9MaXN0RWxlbWVudEltcGw6Om1hcFRvRW50cnkoTm9kZUlt
cGw6OklkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0CiB7CiAgICAg
c3dpdGNoIChhdHRyKSB7CkBAIC0xNTUsNyArMTM1LDcgQEAgdm9pZCBIVE1MT0xpc3RFbGVtZW50
SW1wbDo6cGFyc2VNYXBwZWRBdAogICAgIGNhc2UgQVRUUl9TVEFSVDoKICAgICAgICAgICAgIF9z
dGFydCA9ICFhdHRyLT5pc051bGwoKSA/IGF0dHItPnZhbHVlKCkudG9JbnQoKSA6IDE7CiAgICAg
ZGVmYXVsdDoKLSAgICAgICAgSFRNTFVMaXN0RWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKGF0dHIpOworICAgICAgICBIVE1MRWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KGF0dHIpOwogICAgIH0KIH0KIApAQCAtMTg2LDExICsxNjYsNiBAQCB2b2lkIEhUTUxPTGlzdEVs
ZW1lbnRJbXBsOjpzZXRUeXBlKGNvbnN0CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotTm9kZUlt
cGw6OklkIEhUTUxMSUVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0xJ
OwotfQotCiBib29sIEhUTUxMSUVsZW1lbnRJbXBsOjptYXBUb0VudHJ5KE5vZGVJbXBsOjpJZCBh
dHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdAogewogICAgIHN3aXRjaCAo
YXR0cikgewpAQCAtMjUyLDExICsyMjcsOCBAQCB2b2lkIEhUTUxMSUVsZW1lbnRJbXBsOjphdHRh
Y2goKQogICAgICAgICBOb2RlSW1wbCAqbGlzdE5vZGUgPSAwOwogICAgICAgICBOb2RlSW1wbCAq
biA9IHRoaXM7CiAgICAgICAgIHdoaWxlICghbGlzdE5vZGUgJiYgKG4gPSBuLT5wYXJlbnROb2Rl
KCkpKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKG4tPmlkKCkpIHsKLSAgICAgICAgICAgICAgICBj
YXNlIElEX1VMOgotICAgICAgICAgICAgICAgIGNhc2UgSURfT0w6Ci0gICAgICAgICAgICAgICAg
ICAgIGxpc3ROb2RlID0gbjsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChuLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6dWwoKSkgfHwgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9sKCkp
KQorICAgICAgICAgICAgICAgIGxpc3ROb2RlID0gbjsKICAgICAgICAgfQogICAgICAgICAKICAg
ICAgICAgLy8gSWYgd2UgYXJlIG5vdCBpbiBhIGxpc3QsIHRlbGwgdGhlIHJlbmRlcmVyIHNvIGl0
IGNhbiBwb3NpdGlvbiB1cyBpbnNpZGUuCkBAIC0yNjUsNyArMjM3LDcgQEAgdm9pZCBIVE1MTElF
bGVtZW50SW1wbDo6YXR0YWNoKCkKICAgICAgICAgICAgIHJlbmRlci0+c2V0Tm90SW5MaXN0KHRy
dWUpOwogCiAJLy8gSWYgd2UgYXJlIGZpcnN0LCBhbmQgdGhlIE9MIGhhcyBhIHN0YXJ0IGF0dHIs
IHNldCB0aGUgdmFsdWUuCi0JaWYgKGxpc3ROb2RlICYmIGxpc3ROb2RlLT5pZCgpID09IElEX09M
ICYmICFtX3JlbmRlci0+cHJldmlvdXNTaWJsaW5nKCkpIHsKKwlpZiAobGlzdE5vZGUgJiYgbGlz
dE5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvbCgpKSAmJiAhbV9yZW5kZXItPnByZXZpb3Vz
U2libGluZygpKSB7CiAJICAgIEhUTUxPTGlzdEVsZW1lbnRJbXBsICpvbCA9IHN0YXRpY19jYXN0
PEhUTUxPTGlzdEVsZW1lbnRJbXBsICo+KGxpc3ROb2RlKTsKICAgICAgICAgICAgIHJlbmRlci0+
c2V0VmFsdWUob2wtPnN0YXJ0KCkpOwogCX0KQEAgLTI5NSwxMiArMjY3LDggQEAgdm9pZCBIVE1M
TElFbGVtZW50SW1wbDo6c2V0VmFsdWUobG9uZyB2YQogewogICAgIHNldEF0dHJpYnV0ZShBVFRS
X1ZBTFVFLCBRU3RyaW5nOjpudW1iZXIodmFsdWUpKTsKIH0KLS8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
IAotTm9kZUltcGw6OklkIEhUTUxETGlzdEVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIElEX0RMOwotfQorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBib29sIEhUTUxETGlzdEVs
ZW1lbnRJbXBsOjpjb21wYWN0KCkgY29uc3QKIHsKSW5kZXg6IGtodG1sL2h0bWwvaHRtbF9saXN0
aW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwv
aHRtbF9saXN0aW1wbC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjcKZGlmZiAtdSAtcCAtcjEu
NyBraHRtbC9odG1sL2h0bWxfbGlzdGltcGwuaAotLS0ga2h0bWwvaHRtbC9odG1sX2xpc3RpbXBs
LmgJMTEgTWF5IDIwMDUgMDU6NDk6MzQgLTAwMDAJMS43CisrKyBraHRtbC9odG1sL2h0bWxfbGlz
dGltcGwuaAk4IEp1bCAyMDA1IDA1OjU3OjIzIC0wMDAwCkBAIC0zNSwxMCArMzUsMTEgQEAgbmFt
ZXNwYWNlIERPTQogY2xhc3MgSFRNTFVMaXN0RWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTEVsZW1l
bnRJbXBsCiB7CiBwdWJsaWM6Ci0gICAgSFRNTFVMaXN0RWxlbWVudEltcGwoRG9jdW1lbnRQdHIg
KmRvYykgOiBIVE1MRWxlbWVudEltcGwoZG9jKSB7fQorICAgIEhUTUxVTGlzdEVsZW1lbnRJbXBs
KERvY3VtZW50UHRyICpkb2MpIDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6dWwoKSwgZG9j
KSB7fQogICAgIHZpcnR1YWwgfkhUTUxVTGlzdEVsZW1lbnRJbXBsKCkge30KIAotICAgIHZpcnR1
YWwgSWQgaWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWly
ZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQorICAgIHZpcnR1YWwg
aW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gNTsgfQogCiAgICAgdmlydHVhbCBib29s
IG1hcFRvRW50cnkoSWQgYXR0ciwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3Q7
CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUlt
cGwgKik7CkBAIC01Nyw5ICs1OCwxMCBAQCBwdWJsaWM6CiBjbGFzcyBIVE1MRGlyZWN0b3J5RWxl
bWVudEltcGwgOiBwdWJsaWMgSFRNTEVsZW1lbnRJbXBsCiB7CiBwdWJsaWM6Ci0gICAgSFRNTERp
cmVjdG9yeUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpIDogSFRNTEVsZW1lbnRJbXBsKGRv
Yykge30KKyAgICBIVE1MRGlyZWN0b3J5RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykgOiBI
VE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjpkaXIoKSwgZG9jKSB7fQogCi0gICAgdmlydHVhbCBJ
ZCBpZCgpIGNvbnN0OworICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVu
dCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9CisgICAgdmlydHVhbCBpbnQg
dGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiA1OyB9CiAKICAgICBib29sIGNvbXBhY3QoKSBj
b25zdDsKICAgICB2b2lkIHNldENvbXBhY3QoYm9vbCk7CkBAIC03MCw5ICs3MiwxMCBAQCBwdWJs
aWM6CiBjbGFzcyBIVE1MTWVudUVsZW1lbnRJbXBsIDogcHVibGljIEhUTUxFbGVtZW50SW1wbAog
ewogcHVibGljOgotICAgIEhUTUxNZW51RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykgOiBI
VE1MRWxlbWVudEltcGwoZG9jKSB7fQorICAgIEhUTUxNZW51RWxlbWVudEltcGwoRG9jdW1lbnRQ
dHIgKmRvYykgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjptZW51KCksIGRvYykge30KIAot
ICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5k
VGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQorICAg
IHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gNTsgfQogCiAgICAgYm9v
bCBjb21wYWN0KCkgY29uc3Q7CiAgICAgdm9pZCBzZXRDb21wYWN0KGJvb2wpOwpAQCAtODAsMTQg
KzgzLDE1IEBAIHB1YmxpYzoKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1jbGFzcyBIVE1MT0xp
c3RFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MVUxpc3RFbGVtZW50SW1wbAorY2xhc3MgSFRNTE9M
aXN0RWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTEVsZW1lbnRJbXBsCiB7CiBwdWJsaWM6CiAgICAg
SFRNTE9MaXN0RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgICAgICAgOiBIVE1MVUxp
c3RFbGVtZW50SW1wbChkb2MpIHsgX3N0YXJ0ID0gMTsgfQotCi0gICAgdmlydHVhbCBJZCBpZCgp
IGNvbnN0OworICAgICAgICA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6Om9sKCksIGRvYykg
eyBfc3RhcnQgPSAxOyB9CiAgICAgCisgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1Jl
cXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzUmVxdWlyZWQ7IH0KKyAgICB2aXJ0
dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDU7IH0KKwogICAgIHZpcnR1YWwg
Ym9vbCBtYXBUb0VudHJ5KElkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNv
bnN0OwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1
dGVJbXBsICopOwogCkBAIC0xMTAsMTAgKzExNCwxMSBAQCBjbGFzcyBIVE1MTElFbGVtZW50SW1w
bCA6IHB1YmxpYyBIVE1MRWxlCiB7CiBwdWJsaWM6CiAgICAgSFRNTExJRWxlbWVudEltcGwoRG9j
dW1lbnRQdHIgKmRvYykKLSAgICAgICAgOiBIVE1MRWxlbWVudEltcGwoZG9jKSB7IGlzVmFsdWVk
ID0gZmFsc2U7IH0KKyAgICAgICAgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjpsaSgpLCBk
b2MpIHsgaXNWYWx1ZWQgPSBmYWxzZTsgfQogICAgIHZpcnR1YWwgfkhUTUxMSUVsZW1lbnRJbXBs
KCkge30KIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEhUTUxUYWdT
dGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNPcHRpb25h
bDsgfQorICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMzsgfQog
CiAgICAgdmlydHVhbCBib29sIG1hcFRvRW50cnkoTm9kZUltcGw6OklkIGF0dHIsIE1hcHBlZEF0
dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICphdHRyKTsKQEAgLTEzNiwxMCArMTQxLDEx
IEBAIHByaXZhdGU6CiBjbGFzcyBIVE1MRExpc3RFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MRWxl
bWVudEltcGwKIHsKIHB1YmxpYzoKLSAgICBIVE1MRExpc3RFbGVtZW50SW1wbChEb2N1bWVudFB0
ciAqZG9jKSA6IEhUTUxFbGVtZW50SW1wbChkb2MpIHt9CisgICAgSFRNTERMaXN0RWxlbWVudElt
cGwoRG9jdW1lbnRQdHIgKmRvYykgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjpkbCgpLCBk
b2MpIHt9CiAgICAgdmlydHVhbCB+SFRNTERMaXN0RWxlbWVudEltcGwoKSB7fQogCi0gICAgdmly
dHVhbCBJZCBpZCgpIGNvbnN0OworICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1
aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9CisgICAgdmlydHVh
bCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiA1OyB9CiAKICAgICBib29sIGNvbXBh
Y3QoKSBjb25zdDsKICAgICB2b2lkIHNldENvbXBhY3QoYm9vbCk7CkluZGV4OiBraHRtbC9odG1s
L2h0bWxfbWlzY2ltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3Jl
L2todG1sL2h0bWwvaHRtbF9taXNjaW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjYK
ZGlmZiAtdSAtcCAtcjEuMjYga2h0bWwvaHRtbC9odG1sX21pc2NpbXBsLmNwcAotLS0ga2h0bWwv
aHRtbC9odG1sX21pc2NpbXBsLmNwcAkxMSBKdW4gMjAwNSAwOTo1MTowMSAtMDAwMAkxLjI2Cisr
KyBraHRtbC9odG1sL2h0bWxfbWlzY2ltcGwuY3BwCTggSnVsIDIwMDUgMDU6NTc6MjQgLTAwMDAK
QEAgLTM1LDE1ICszNSwxMCBAQAogbmFtZXNwYWNlIERPTSB7CiAKIEhUTUxCYXNlRm9udEVsZW1l
bnRJbXBsOjpIVE1MQmFzZUZvbnRFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAgIDog
SFRNTEVsZW1lbnRJbXBsKGRvYykKKyAgICA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6OmJh
c2Vmb250KCksIGRvYykKIHsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxCYXNlRm9udEVsZW1lbnRJ
bXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0JBU0VGT05UOwotfQotCiBET01TdHJp
bmcgSFRNTEJhc2VGb250RWxlbWVudEltcGw6OmNvbG9yKCkgY29uc3QKIHsKICAgICByZXR1cm4g
Z2V0QXR0cmlidXRlKEFUVFJfQ09MT1IpOwpAQCAtMTQxLDcyICsxMzYsNzIgQEAgTm9kZUltcGwg
KkhUTUxDb2xsZWN0aW9uSW1wbDo6dHJhdmVyc2VOZQogICAgICAgICAgICAgSFRNTEVsZW1lbnRJ
bXBsICplID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KGN1cnJlbnQpOwogICAgICAg
ICAgICAgc3dpdGNoKHR5cGUpIHsKICAgICAgICAgICAgIGNhc2UgRE9DX0lNQUdFUzoKLSAgICAg
ICAgICAgICAgICBpZihlLT5pZCgpID09IElEX0lNRykKKyAgICAgICAgICAgICAgICBpZiAoZS0+
aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6aW1nKCkpKQogICAgICAgICAgICAgICAgICAgICBmb3Vu
ZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIERPQ19G
T1JNUzoKLSAgICAgICAgICAgICAgICBpZihlLT5pZCgpID09IElEX0ZPUk0pCisgICAgICAgICAg
ICAgICAgaWYoZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6Zm9ybSgpKSkKICAgICAgICAgICAg
ICAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgY2FzZSBET0NfTkFNRUFCTEVfSVRFTVM6Ci0gICAgICAgICAgICAgICAgaWYoZS0+aWQoKSA9
PSBJRF9JTUcpCisgICAgICAgICAgICAgICAgaWYgKGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6
OmltZygpKSkKICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwotICAgICAgICAgICAg
ICAgIGlmKGUtPmlkKCkgPT0gSURfRk9STSkKKyAgICAgICAgICAgICAgICBpZiAoZS0+aGFzTG9j
YWxOYW1lKEhUTUxOYW1lczo6Zm9ybSgpKSkKICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0
cnVlOwotICAgICAgICAgICAgICAgIGlmKGUtPmlkKCkgPT0gSURfQVBQTEVUKQorICAgICAgICAg
ICAgICAgIGlmIChlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjphcHBsZXQoKSkpCiAgICAgICAg
ICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBpZihlLT5pZCgpID09
IElEX0VNQkVEKQorICAgICAgICAgICAgICAgIGlmIChlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVz
OjplbWJlZCgpKSkKICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwotICAgICAgICAg
ICAgICAgIGlmKGUtPmlkKCkgPT0gSURfT0JKRUNUKQorICAgICAgICAgICAgICAgIGlmIChlLT5o
YXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvYmplY3QoKSkpCiAgICAgICAgICAgICAgICAgICAgIGZv
dW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgVEFC
TEVfVEJPRElFUzoKLSAgICAgICAgICAgICAgICBpZihlLT5pZCgpID09IElEX1RCT0RZKQorICAg
ICAgICAgICAgICAgIGlmIChlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0Ym9keSgpKSkKICAg
ICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGVsc2UgaWYo
ZS0+aWQoKSA9PSBJRF9UQUJMRSkKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChlLT5oYXNMb2Nh
bE5hbWUoSFRNTE5hbWVzOjp0YWJsZSgpKSkKICAgICAgICAgICAgICAgICAgICAgZGVlcCA9IGZh
bHNlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBUUl9DRUxMUzoK
LSAgICAgICAgICAgICAgICBpZihlLT5pZCgpID09IElEX1REIHx8IGUtPmlkKCkgPT0gSURfVEgp
CisgICAgICAgICAgICAgICAgaWYgKGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnRkKCkpIHx8
IGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnRoKCkpKQogICAgICAgICAgICAgICAgICAgICBm
b3VuZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZihlLT5pZCgpID09IElEX1RBQkxF
KQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnRh
YmxlKCkpKQogICAgICAgICAgICAgICAgICAgICBkZWVwID0gZmFsc2U7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFRBQkxFX1JPV1M6CiAgICAgICAgICAgICBjYXNl
IFRTRUNUSU9OX1JPV1M6Ci0gICAgICAgICAgICAgICAgaWYoZS0+aWQoKSA9PSBJRF9UUikKKyAg
ICAgICAgICAgICAgICBpZiAoZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dHIoKSkpCiAgICAg
ICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBlbHNlIGlmKGUt
PmlkKCkgPT0gSURfVEFCTEUpCisgICAgICAgICAgICAgICAgZWxzZSBpZiAoZS0+aGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6dGFibGUoKSkpCiAgICAgICAgICAgICAgICAgICAgIGRlZXAgPSBmYWxz
ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgU0VMRUNUX09QVElP
TlM6Ci0gICAgICAgICAgICAgICAgaWYoZS0+aWQoKSA9PSBJRF9PUFRJT04pCisgICAgICAgICAg
ICAgICAgaWYgKGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9wdGlvbigpKSkKICAgICAgICAg
ICAgICAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgY2FzZSBNQVBfQVJFQVM6Ci0gICAgICAgICAgICAgICAgaWYoZS0+aWQoKSA9PSBJRF9B
UkVBKQorICAgICAgICAgICAgICAgIGlmIChlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjphcmVh
KCkpKQogICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICBjYXNlIERPQ19BUFBMRVRTOiAgIC8vIGFsbCBPQkpFQ1QgYW5k
IEFQUExFVCBlbGVtZW50cwotICAgICAgICAgICAgICAgIGlmKGUtPmlkKCkgPT0gSURfT0JKRUNU
IHx8IGUtPmlkKCkgPT0gSURfQVBQTEVUKQorICAgICAgICAgICAgICAgIGlmIChlLT5oYXNMb2Nh
bE5hbWUoSFRNTE5hbWVzOjpvYmplY3QoKSkgfHwgZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6
YXBwbGV0KCkpKQogICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIERPQ19FTUJFRFM6ICAgLy8gYWxsIEVNQkVE
IGVsZW1lbnRzCi0gICAgICAgICAgICAgICAgaWYoZS0+aWQoKSA9PSBJRF9FTUJFRCkKKyAgICAg
ICAgICAgICAgICBpZiAoZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6ZW1iZWQoKSkpCiAgICAg
ICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIGNhc2UgRE9DX09CSkVDVFM6ICAgLy8gYWxsIE9CSkVDVCBlbGVtZW50cwotICAg
ICAgICAgICAgICAgIGlmKGUtPmlkKCkgPT0gSURfT0JKRUNUKQorICAgICAgICAgICAgICAgIGlm
IChlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvYmplY3QoKSkpCiAgICAgICAgICAgICAgICAg
ICAgIGZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNh
c2UgRE9DX0xJTktTOiAgICAgLy8gYWxsIEEgX2FuZF8gQVJFQSBlbGVtZW50cyB3aXRoIGEgdmFs
dWUgZm9yIGhyZWYKLSAgICAgICAgICAgICAgICBpZihlLT5pZCgpID09IElEX0EgfHwgZS0+aWQo
KSA9PSBJRF9BUkVBKQotICAgICAgICAgICAgICAgICAgICBpZighZS0+Z2V0QXR0cmlidXRlKEFU
VFJfSFJFRikuaXNOdWxsKCkpCisgICAgICAgICAgICAgICAgaWYgKGUtPmhhc0xvY2FsTmFtZShI
VE1MTmFtZXM6OmEoKSkgfHwgZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6YXJlYSgpKSkKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKCFlLT5nZXRBdHRyaWJ1dGUoQVRUUl9IUkVGKS5pc051bGwo
KSkKICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIGNhc2UgRE9DX0FOQ0hPUlM6ICAgICAgLy8gYWxsIEEgZWxl
bWVudHMgd2l0aCBhIHZhbHVlIGZvciBuYW1lIG9yIGFuIGlkIGF0dHJpYnV0ZQotICAgICAgICAg
ICAgICAgIGlmKGUtPmlkKCkgPT0gSURfQSkKLSAgICAgICAgICAgICAgICAgICAgaWYoIWUtPmdl
dEF0dHJpYnV0ZShBVFRSX05BTUUpLmlzTnVsbCgpKQorICAgICAgICAgICAgICAgIGlmIChlLT5o
YXNMb2NhbE5hbWUoSFRNTE5hbWVzOjphKCkpKQorICAgICAgICAgICAgICAgICAgICBpZiAoIWUt
PmdldEF0dHJpYnV0ZShBVFRSX05BTUUpLmlzTnVsbCgpKQogICAgICAgICAgICAgICAgICAgICAg
ICAgZm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2Fz
ZSBET0NfQUxMOgpAQCAtMjE5LDkgKzIxNCw5IEBAIE5vZGVJbXBsICpIVE1MQ29sbGVjdGlvbklt
cGw6OnRyYXZlcnNlTmUKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAga2RE
ZWJ1ZyggNjAzMCApIDw8ICJFcnJvciBpbiBIVE1MQ29sbGVjdGlvbiwgd3JvbmcgdGFnSWQhIiA8
PCBlbmRsOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGZvdW5kKSB7CisKKyAgICAg
ICAgICAgIGlmIChmb3VuZCkKICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudDsKLSAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIGlmIChkZWVwKSB7CiAgICAgICAgICAgICAgICAgY3VycmVu
dCA9IGN1cnJlbnQtPnRyYXZlcnNlTmV4dE5vZGUobV9iYXNlLmdldCgpKTsKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKQEAgLTI5OCwyOSArMjkzLDMxIEBAIE5vZGVJbXBsICpIVE1MQ29sbGVj
dGlvbkltcGw6Om5leHRJdGVtKCkKIAogYm9vbCBIVE1MQ29sbGVjdGlvbkltcGw6OmNoZWNrRm9y
TmFtZU1hdGNoKE5vZGVJbXBsICpub2RlLCBib29sIGNoZWNrTmFtZSwgY29uc3QgRE9NU3RyaW5n
ICZuYW1lLCBib29sIGNhc2VTZW5zaXRpdmUpIGNvbnN0CiB7Ci0gICAgRWxlbWVudEltcGwgKmUg
PSBzdGF0aWNfY2FzdDxFbGVtZW50SW1wbCAqPihub2RlKTsKKyAgICBpZiAoIW5vZGUtPmlzSFRN
TEVsZW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIEhUTUxFbGVtZW50
SW1wbCAqZSA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCo+KG5vZGUpOwogICAgIGlmIChj
YXNlU2Vuc2l0aXZlKSB7CiAgICAgICAgIGlmIChjaGVja05hbWUpIHsKICAgICAgICAgICAgIC8v
IGRvY3VtZW50LmFsbCByZXR1cm5zIG9ubHkgaW1hZ2VzLCBmb3JtcywgYXBwbGV0cywgb2JqZWN0
cyBhbmQgZW1iZWRzCiAgICAgICAgICAgICAvLyBieSBuYW1lICh0aG91Z2ggZXZlcnl0aGluZyBi
eSBpZCkKICAgICAgICAgICAgIGlmICh0eXBlID09IERPQ19BTEwgJiYgCi0gICAgICAgICAgICAg
ICAgIShlLT5pZCgpID09IElEX0lNRyB8fCBlLT5pZCgpID09IElEX0ZPUk0gfHwKLSAgICAgICAg
ICAgICAgICAgIGUtPmlkKCkgPT0gSURfQVBQTEVUIHx8IGUtPmlkKCkgPT0gSURfT0JKRUNUIHx8
Ci0gICAgICAgICAgICAgICAgICBlLT5pZCgpID09IElEX0VNQkVEKSkKKyAgICAgICAgICAgICAg
ICAhKGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmltZygpKSB8fCBlLT5oYXNMb2NhbE5hbWUo
SFRNTE5hbWVzOjpmb3JtKCkpIHx8CisgICAgICAgICAgICAgICAgICBlLT5oYXNMb2NhbE5hbWUo
SFRNTE5hbWVzOjphcHBsZXQoKSkgfHwgZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b2JqZWN0
KCkpIHx8CisgICAgICAgICAgICAgICAgICBlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjplbWJl
ZCgpKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAgICByZXR1
cm4gZS0+Z2V0QXR0cmlidXRlKEFUVFJfTkFNRSkgPT0gbmFtZSAmJiBlLT5nZXRBdHRyaWJ1dGUo
QVRUUl9JRCkgIT0gbmFtZTsKLSAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgfSBlbHNlCiAgICAg
ICAgICAgICByZXR1cm4gZS0+Z2V0QXR0cmlidXRlKEFUVFJfSUQpID09IG5hbWU7Ci0gICAgICAg
IH0KICAgICB9IGVsc2UgewogICAgICAgICBpZiAoY2hlY2tOYW1lKSB7CiAgICAgICAgICAgICAv
LyBkb2N1bWVudC5hbGwgcmV0dXJucyBvbmx5IGltYWdlcywgZm9ybXMsIGFwcGxldHMsIG9iamVj
dHMgYW5kIGVtYmVkcwogICAgICAgICAgICAgLy8gYnkgbmFtZSAodGhvdWdoIGV2ZXJ5dGhpbmcg
YnkgaWQpCiAgICAgICAgICAgICBpZiAodHlwZSA9PSBET0NfQUxMICYmIAotICAgICAgICAgICAg
ICAgICEoZS0+aWQoKSA9PSBJRF9JTUcgfHwgZS0+aWQoKSA9PSBJRF9GT1JNIHx8Ci0gICAgICAg
ICAgICAgICAgICBlLT5pZCgpID09IElEX0FQUExFVCB8fCBlLT5pZCgpID09IElEX09CSkVDVCB8
fAotICAgICAgICAgICAgICAgICAgZS0+aWQoKSA9PSBJRF9FTUJFRCkpCisgICAgICAgICAgICAg
ICAgIShlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjppbWcoKSkgfHwgZS0+aGFzTG9jYWxOYW1l
KEhUTUxOYW1lczo6Zm9ybSgpKSB8fAorICAgICAgICAgICAgICAgICAgZS0+aGFzTG9jYWxOYW1l
KEhUTUxOYW1lczo6YXBwbGV0KCkpIHx8IGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9iamVj
dCgpKSB8fAorICAgICAgICAgICAgICAgICAgZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6ZW1i
ZWQoKSkpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAgICAgcmV0
dXJuIGUtPmdldEF0dHJpYnV0ZShBVFRSX05BTUUpLmRvbVN0cmluZygpLmxvd2VyKCkgPT0gbmFt
ZS5sb3dlcigpICYmCkBAIC0zNzksNyArMzc2LDkgQEAgdm9pZCBIVE1MQ29sbGVjdGlvbkltcGw6
OnVwZGF0ZU5hbWVDYWNoZQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgZm9yIChOb2RlSW1w
bCAqbiA9IHRyYXZlcnNlTmV4dEl0ZW0obV9iYXNlLmdldCgpKTsgbjsgbiA9IHRyYXZlcnNlTmV4
dEl0ZW0obikpIHsKLSAgICAgICAgRWxlbWVudEltcGwgKmUgPSBzdGF0aWNfY2FzdDxFbGVtZW50
SW1wbCAqPihuKTsKKyAgICAgICAgaWYgKCFuLT5pc0hUTUxFbGVtZW50KCkpCisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgSFRNTEVsZW1lbnRJbXBsKiBlID0gc3RhdGljX2Nhc3Q8SFRN
TEVsZW1lbnRJbXBsKj4obik7CiAgICAgICAgIFFTdHJpbmcgaWRBdHRyID0gZS0+Z2V0QXR0cmli
dXRlKEFUVFJfSUQpLnN0cmluZygpOwogICAgICAgICBRU3RyaW5nIG5hbWVBdHRyID0gZS0+Z2V0
QXR0cmlidXRlKEFUVFJfTkFNRSkuc3RyaW5nKCk7CiAgICAgICAgIGlmICghaWRBdHRyLmlzRW1w
dHkoKSkgewpAQCAtMzkzLDkgKzM5Miw5IEBAIHZvaWQgSFRNTENvbGxlY3Rpb25JbXBsOjp1cGRh
dGVOYW1lQ2FjaGUKICAgICAgICAgfQogICAgICAgICBpZiAoIW5hbWVBdHRyLmlzRW1wdHkoKSAm
JiBpZEF0dHIgIT0gbmFtZUF0dHIKICAgICAgICAgICAgICYmICh0eXBlICE9IERPQ19BTEwgfHwg
Ci0gICAgICAgICAgICAgICAgKGUtPmlkKCkgPT0gSURfSU1HIHx8IGUtPmlkKCkgPT0gSURfRk9S
TSB8fAotICAgICAgICAgICAgICAgICBlLT5pZCgpID09IElEX0FQUExFVCB8fCBlLT5pZCgpID09
IElEX09CSkVDVCB8fAotICAgICAgICAgICAgICAgICBlLT5pZCgpID09IElEX0VNQkVEKSkpIHsK
KyAgICAgICAgICAgICAgICAoZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6aW1nKCkpIHx8IGUt
Pmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmZvcm0oKSkgfHwKKyAgICAgICAgICAgICAgICAgZS0+
aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6YXBwbGV0KCkpIHx8IGUtPmhhc0xvY2FsTmFtZShIVE1M
TmFtZXM6Om9iamVjdCgpKSB8fAorICAgICAgICAgICAgICAgICBlLT5oYXNMb2NhbE5hbWUoSFRN
TE5hbWVzOjplbWJlZCgpKSkpKSB7CiAgICAgICAgICAgICAvLyBhZGQgdG8gbmFtZSBjYWNoZQog
ICAgICAgICAgICAgUVB0clZlY3RvcjxOb2RlSW1wbD4gKm5hbWVWZWN0b3IgPSBpbmZvLT5uYW1l
Q2FjaGUuZmluZChuYW1lQXR0cik7CiAgICAgICAgICAgICBpZiAoIW5hbWVWZWN0b3IpIHsKQEAg
LTUzMiwxMiArNTMxLDEwIEBAIE5vZGVJbXBsKiBIVE1MRm9ybUNvbGxlY3Rpb25JbXBsOjpnZXRO
YW0KIAogTm9kZUltcGwqIEhUTUxGb3JtQ29sbGVjdGlvbkltcGw6OmdldE5hbWVkRm9ybUl0ZW0o
aW50IGF0dHJfaWQsIGNvbnN0IERPTVN0cmluZyYgbmFtZSwgaW50IGR1cGxpY2F0ZU51bWJlciwg
Ym9vbCBjYXNlU2Vuc2l0aXZlKSBjb25zdAogewotICAgIGlmKG1fYmFzZS0+bm9kZVR5cGUoKSA9
PSBOb2RlOjpFTEVNRU5UX05PREUpCi0gICAgeworICAgIGlmIChtX2Jhc2UtPm5vZGVUeXBlKCkg
PT0gTm9kZTo6RUxFTUVOVF9OT0RFKSB7CiAgICAgICAgIEhUTUxFbGVtZW50SW1wbCogYmFzZUVs
ZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwqPihtX2Jhc2UuZ2V0KCkpOwogICAg
ICAgICBib29sIGZvdW5kSW5wdXRFbGVtZW50cyA9IGZhbHNlOwotICAgICAgICBpZihiYXNlRWxl
bWVudC0+aWQoKSA9PSBJRF9GT1JNKQotICAgICAgICB7CisgICAgICAgIGlmIChiYXNlRWxlbWVu
dC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6Zm9ybSgpKSkgewogICAgICAgICAgICAgSFRNTEZv
cm1FbGVtZW50SW1wbCogZiA9IHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudEltcGwqPihiYXNl
RWxlbWVudCk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZi0+Zm9ybUVs
ZW1lbnRzLmNvdW50KCk7ICsraSkgewogICAgICAgICAgICAgICAgIEhUTUxHZW5lcmljRm9ybUVs
ZW1lbnRJbXBsKiBlID0gZi0+Zm9ybUVsZW1lbnRzW2ldOwpAQCAtNTU3LDggKzU1NCw3IEBAIE5v
ZGVJbXBsKiBIVE1MRm9ybUNvbGxlY3Rpb25JbXBsOjpnZXROYW0KICAgICAgICAgICAgIH0KICAg
ICAgICAgfQogCi0gICAgICAgIGlmICggIWZvdW5kSW5wdXRFbGVtZW50cyApCi0gICAgICAgIHsK
KyAgICAgICAgaWYgKCFmb3VuZElucHV0RWxlbWVudHMpIHsKICAgICAgICAgICAgIEhUTUxGb3Jt
RWxlbWVudEltcGwqIGYgPSBzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnRJbXBsKj4oYmFzZUVs
ZW1lbnQpOwogCiAgICAgICAgICAgICBmb3IodW5zaWduZWQgaSA9IDA7IGkgPCBmLT5pbWdFbGVt
ZW50cy5jb3VudCgpOyArK2kpCkBAIC02NTAsNyArNjQ2LDcgQEAgdm9pZCBIVE1MRm9ybUNvbGxl
Y3Rpb25JbXBsOjp1cGRhdGVOYW1lQwogCiAgICAgUURpY3Q8Y2hhcj4gZm91bmRJbnB1dEVsZW1l
bnRzOwogCi0gICAgaWYgKG1fYmFzZS0+aWQoKSAhPSBJRF9GT1JNKSB7CisgICAgaWYgKCFtX2Jh
c2UtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpmb3JtKCkpKSB7CiAgICAgICAgIGluZm8tPmhhc05h
bWVDYWNoZSA9IHRydWU7CiAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4OiBraHRtbC9odG1s
L2h0bWxfbWlzY2ltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9r
aHRtbC9odG1sL2h0bWxfbWlzY2ltcGwuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNgpkaWZm
IC11IC1wIC1yMS4xNiBraHRtbC9odG1sL2h0bWxfbWlzY2ltcGwuaAotLS0ga2h0bWwvaHRtbC9o
dG1sX21pc2NpbXBsLmgJMTEgTWF5IDIwMDUgMDA6NTg6MjggLTAwMDAJMS4xNgorKysga2h0bWwv
aHRtbC9odG1sX21pc2NpbXBsLmgJOCBKdWwgMjAwNSAwNTo1NzoyNCAtMDAwMApAQCAtMzksNyAr
MzksOCBAQCBjbGFzcyBIVE1MQmFzZUZvbnRFbGVtZW50SW1wbCA6IHB1YmxpYyBICiBwdWJsaWM6
CiAgICAgSFRNTEJhc2VGb250RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYyk7CiAKLSAgICB2
aXJ0dWFsIElkIGlkKCkgY29uc3Q7CisgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1Jl
cXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzRm9yYmlkZGVuOyB9CisgICAgdmly
dHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAwOyB9CiAKICAgICBET01TdHJp
bmcgY29sb3IoKSBjb25zdDsKICAgICB2b2lkIHNldENvbG9yKGNvbnN0IERPTVN0cmluZyAmKTsK
SW5kZXg6IGtodG1sL2h0bWwvaHRtbF9vYmplY3RpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfb2JqZWN0aW1wbC5jcHAsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuNjcKZGlmZiAtdSAtcCAtcjEuNjcga2h0bWwvaHRtbC9odG1sX29i
amVjdGltcGwuY3BwCi0tLSBraHRtbC9odG1sL2h0bWxfb2JqZWN0aW1wbC5jcHAJMjkgSnVuIDIw
MDUgMTc6NTA6MjQgLTAwMDAJMS42NworKysga2h0bWwvaHRtbC9odG1sX29iamVjdGltcGwuY3Bw
CTggSnVsIDIwMDUgMDU6NTc6MjQgLTAwMDAKQEAgLTU4LDcgKzU4LDcgQEAgbmFtZXNwYWNlIERP
TSB7CiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxBcHBsZXRFbGVtZW50SW1wbDo6SFRNTEFw
cGxldEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0gIDogSFRNTEVsZW1lbnRJbXBsKGRv
YykKKyAgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjphcHBsZXQoKSwgZG9jKQogewogICAg
IGFwcGxldEluc3RhbmNlID0gMDsKICAgICBtX2FsbFBhcmFtc0F2YWlsYWJsZSA9IGZhbHNlOwpA
QCAtNjksOSArNjksOSBAQCBIVE1MQXBwbGV0RWxlbWVudEltcGw6On5IVE1MQXBwbGV0RWxlbWVu
CiAgICAgZGVsZXRlIGFwcGxldEluc3RhbmNlOwogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTEFwcGxl
dEVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Citib29sIEhUTUxBcHBsZXRFbGVtZW50SW1wbDo6Y2hl
Y2tEVEQoY29uc3QgTm9kZUltcGwqIG5ld0NoaWxkKQogewotICAgIHJldHVybiBJRF9BUFBMRVQ7
CisJcmV0dXJuIG5ld0NoaWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6cGFyYW0oKSkgfHwgSFRN
TEVsZW1lbnRJbXBsOjpjaGVja0RURChuZXdDaGlsZCk7CiB9CiAKIGJvb2wgSFRNTEFwcGxldEVs
ZW1lbnRJbXBsOjptYXBUb0VudHJ5KE5vZGVJbXBsOjpJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVF
bnRyeSYgcmVzdWx0KSBjb25zdApAQCAtMzUzLDE2ICszNTMsMTYgQEAgdm9pZCBIVE1MQXBwbGV0
RWxlbWVudEltcGw6OnNldFdpZHRoKGNvbgogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MRW1i
ZWRFbGVtZW50SW1wbDo6SFRNTEVtYmVkRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAg
ICA6IEhUTUxFbGVtZW50SW1wbChkb2MpLCBlbWJlZEluc3RhbmNlKDApCisgICAgOiBIVE1MRWxl
bWVudEltcGwoSFRNTE5hbWVzOjplbWJlZCgpLCBkb2MpLCBlbWJlZEluc3RhbmNlKDApCiB7fQog
CiBIVE1MRW1iZWRFbGVtZW50SW1wbDo6fkhUTUxFbWJlZEVsZW1lbnRJbXBsKCkKIHsKIH0KIAot
Tm9kZUltcGw6OklkIEhUTUxFbWJlZEVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Citib29sIEhUTUxF
bWJlZEVsZW1lbnRJbXBsOjpjaGVja0RURChjb25zdCBOb2RlSW1wbCogbmV3Q2hpbGQpCiB7Ci0g
ICAgcmV0dXJuIElEX0VNQkVEOworCXJldHVybiBuZXdDaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OnBhcmFtKCkpIHx8IEhUTUxFbGVtZW50SW1wbDo6Y2hlY2tEVEQobmV3Q2hpbGQpOwogfQog
CiAjaWYgQVBQTEVfQ0hBTkdFUwpAQCAtNDc5LDcgKzQ3OSw3IEBAIGJvb2wgSFRNTEVtYmVkRWxl
bWVudEltcGw6OnJlbmRlcmVySXNOZWUKICAgICBLSFRNTFBhcnQgKnBhcnQgPSBnZXREb2N1bWVu
dCgpLT5wYXJ0KCk7CiAgICAgaWYgKCFwYXJ0KQogCXJldHVybiBmYWxzZTsKLSAgICByZXR1cm4g
cGFydC0+cGx1Z2luc0VuYWJsZWQoKSAmJiBwYXJlbnROb2RlKCktPmlkKCkgIT0gSURfT0JKRUNU
OworICAgIHJldHVybiBwYXJ0LT5wbHVnaW5zRW5hYmxlZCgpICYmICFwYXJlbnROb2RlKCktPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjpvYmplY3QoKSk7CiB9CiAKIFJlbmRlck9iamVjdCAqSFRNTEVt
YmVkRWxlbWVudEltcGw6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hICphcmVuYSwgUmVuZGVy
U3R5bGUgKnN0eWxlKQpAQCAtNTA0LDkgKzUwNCw5IEBAIGJvb2wgSFRNTEVtYmVkRWxlbWVudElt
cGw6OmlzVVJMQXR0cmlidXQKIAogSFRNTE9iamVjdEVsZW1lbnRJbXBsOjpIVE1MT2JqZWN0RWxl
bWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykgCiAjaWYgQVBQTEVfQ0hBTkdFUwotOiBIVE1MRWxl
bWVudEltcGwoZG9jKSwgbV9pbWFnZUxvYWRlcigwKSwgb2JqZWN0SW5zdGFuY2UoMCkKKzogSFRN
TEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6b2JqZWN0KCksIGRvYyksIG1faW1hZ2VMb2FkZXIoMCks
IG9iamVjdEluc3RhbmNlKDApCiAjZWxzZQotOiBIVE1MRWxlbWVudEltcGwoZG9jKSwgbV9pbWFn
ZUxvYWRlcigwKQorOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjpvYmplY3QoKSwgZG9jKSwg
bV9pbWFnZUxvYWRlcigwKQogI2VuZGlmCiB7CiAgICAgbmVlZFdpZGdldFVwZGF0ZSA9IGZhbHNl
OwpAQCAtNTE4LDkgKzUxOCw5IEBAIEhUTUxPYmplY3RFbGVtZW50SW1wbDo6fkhUTUxPYmplY3RF
bGVtZW4KICAgICBkZWxldGUgbV9pbWFnZUxvYWRlcjsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxP
YmplY3RFbGVtZW50SW1wbDo6aWQoKSBjb25zdAorYm9vbCBIVE1MT2JqZWN0RWxlbWVudEltcGw6
OmNoZWNrRFREKGNvbnN0IE5vZGVJbXBsKiBuZXdDaGlsZCkKIHsKLSAgICByZXR1cm4gSURfT0JK
RUNUOworCXJldHVybiBuZXdDaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnBhcmFtKCkpIHx8
IEhUTUxFbGVtZW50SW1wbDo6Y2hlY2tEVEQobmV3Q2hpbGQpOwogfQogCiAjaWYgQVBQTEVfQ0hB
TkdFUwpAQCAtNTU1LDcgKzU1NSw3IEBAIEtKUzo6QmluZGluZ3M6Okluc3RhbmNlICpIVE1MT2Jq
ZWN0RWxlbWUKIEhUTUxGb3JtRWxlbWVudEltcGwgKkhUTUxPYmplY3RFbGVtZW50SW1wbDo6Zm9y
bSgpIGNvbnN0CiB7CiAgICAgZm9yIChOb2RlSW1wbCAqcCA9IHBhcmVudE5vZGUoKTsgcCAhPSAw
OyBwID0gcC0+cGFyZW50Tm9kZSgpKSB7Ci0gICAgICAgIGlmIChwLT5pZCgpID09IElEX0ZPUk0p
CisgICAgICAgIGlmIChwLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Zm9ybSgpKSkKICAgICAgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnRJbXBsICo+KHApOwogICAgIH0K
ICAgICAKQEAgLTk1MCw3ICs5NTAsNyBAQCB2b2lkIEhUTUxPYmplY3RFbGVtZW50SW1wbDo6c2V0
V2lkdGgoY29uCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxQYXJhbUVsZW1lbnRJbXBsOjpI
VE1MUGFyYW1FbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAgIDogSFRNTEVsZW1lbnRJ
bXBsKGRvYykKKyAgICA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6OnBhcmFtKCksIGRvYykK
IHsKIH0KIApAQCAtOTU4LDExICs5NTgsNiBAQCBIVE1MUGFyYW1FbGVtZW50SW1wbDo6fkhUTUxQ
YXJhbUVsZW1lbnRJCiB7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MUGFyYW1FbGVtZW50SW1wbDo6
aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9QQVJBTTsKLX0KLQogdm9pZCBIVE1MUGFyYW1F
bGVtZW50SW1wbDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqYXR0
cikKIHsKICAgICBzd2l0Y2goIGF0dHItPmlkKCkgKQpJbmRleDoga2h0bWwvaHRtbC9odG1sX29i
amVjdGltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9o
dG1sL2h0bWxfb2JqZWN0aW1wbC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjMxCmRpZmYgLXUg
LXAgLXIxLjMxIGtodG1sL2h0bWwvaHRtbF9vYmplY3RpbXBsLmgKLS0tIGtodG1sL2h0bWwvaHRt
bF9vYmplY3RpbXBsLmgJMTEgTWF5IDIwMDUgMDU6NDk6MzQgLTAwMDAJMS4zMQorKysga2h0bWwv
aHRtbC9odG1sX29iamVjdGltcGwuaAk4IEp1bCAyMDA1IDA1OjU3OjI1IC0wMDAwCkBAIC00Miwx
MSArNDIsMTIgQEAgY2xhc3MgSFRNTEFwcGxldEVsZW1lbnRJbXBsIDogcHVibGljIEhUTQogewog
cHVibGljOgogICAgIEhUTUxBcHBsZXRFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKTsKLQog
ICAgIH5IVE1MQXBwbGV0RWxlbWVudEltcGwoKTsKIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25z
dDsKLQorICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0
IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3Jp
dHkoKSBjb25zdCB7IHJldHVybiAxOyB9CisJdmlydHVhbCBib29sIGNoZWNrRFREKGNvbnN0IE5v
ZGVJbXBsKiBuZXdDaGlsZCk7CisJCiAgICAgdmlydHVhbCBib29sIG1hcFRvRW50cnkoSWQgYXR0
ciwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lk
IHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKnRva2VuKTsKICAgICAK
QEAgLTExMiwxMCArMTEzLDExIEBAIGNsYXNzIEhUTUxFbWJlZEVsZW1lbnRJbXBsIDogcHVibGlj
IEhUTUwKIHsKIHB1YmxpYzoKICAgICBIVE1MRW1iZWRFbGVtZW50SW1wbChEb2N1bWVudFB0ciAq
ZG9jKTsKLQogICAgIH5IVE1MRW1iZWRFbGVtZW50SW1wbCgpOwogCi0gICAgdmlydHVhbCBJZCBp
ZCgpIGNvbnN0OworICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgp
IGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9CisgICAgdmlydHVhbCBpbnQgdGFn
UHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBib29sIGNoZWNrRFRE
KGNvbnN0IE5vZGVJbXBsKiBuZXdDaGlsZCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRy
eShJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdDsKICAgICB2aXJ0
dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqYXR0cik7
CkBAIC0xNDYsMTAgKzE0OCwxMSBAQCBjbGFzcyBIVE1MT2JqZWN0RWxlbWVudEltcGwgOiBwdWJs
aWMgSFRNCiB7CiBwdWJsaWM6CiAgICAgSFRNTE9iamVjdEVsZW1lbnRJbXBsKERvY3VtZW50UHRy
ICpkb2MpOwotCiAgICAgfkhUTUxPYmplY3RFbGVtZW50SW1wbCgpOwogCi0gICAgdmlydHVhbCBJ
ZCBpZCgpIGNvbnN0OworICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVu
dCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9CisgICAgdmlydHVhbCBpbnQg
dGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiA3OyB9CisJdmlydHVhbCBib29sIGNoZWNrRFRE
KGNvbnN0IE5vZGVJbXBsKiBuZXdDaGlsZCk7CiAKICAgICBIVE1MRm9ybUVsZW1lbnRJbXBsICpm
b3JtKCkgY29uc3Q7CiAKQEAgLTI0NywxMCArMjUwLDEwIEBAIGNsYXNzIEhUTUxQYXJhbUVsZW1l
bnRJbXBsIDogcHVibGljIEhUTUwKICAgICBmcmllbmQgY2xhc3MgSFRNTEFwcGxldEVsZW1lbnRJ
bXBsOwogcHVibGljOgogICAgIEhUTUxQYXJhbUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2Mp
OwotCiAgICAgfkhUTUxQYXJhbUVsZW1lbnRJbXBsKCk7CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkg
Y29uc3Q7CisgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29u
c3QgeyByZXR1cm4gVGFnU3RhdHVzRm9yYmlkZGVuOyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJp
b3JpdHkoKSBjb25zdCB7IHJldHVybiAwOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqdG9rZW4pOwogCkluZGV4OiBraHRtbC9o
dG1sL2h0bWxfdGFibGVpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2Vi
Q29yZS9raHRtbC9odG1sL2h0bWxfdGFibGVpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS41MwpkaWZmIC11IC1wIC1yMS41MyBraHRtbC9odG1sL2h0bWxfdGFibGVpbXBsLmNwcAotLS0g
a2h0bWwvaHRtbC9odG1sX3RhYmxlaW1wbC5jcHAJMTcgSnVuIDIwMDUgMjE6NTU6MzkgLTAwMDAJ
MS41MworKysga2h0bWwvaHRtbC9odG1sX3RhYmxlaW1wbC5jcHAJOCBKdWwgMjAwNSAwNTo1Nzoy
NSAtMDAwMApAQCAtNTEsNyArNTEsNyBAQCB1c2luZyBuYW1lc3BhY2Uga2h0bWw7CiBuYW1lc3Bh
Y2UgRE9NIHsKIAogSFRNTFRhYmxlRWxlbWVudEltcGw6OkhUTUxUYWJsZUVsZW1lbnRJbXBsKERv
Y3VtZW50UHRyICpkb2MpCi0gIDogSFRNTEVsZW1lbnRJbXBsKGRvYykKKyAgOiBIVE1MRWxlbWVu
dEltcGwoSFRNTE5hbWVzOjp0YWJsZSgpLCBkb2MpCiB7CiAgICAgdENhcHRpb24gPSAwOwogICAg
IGhlYWQgPSAwOwpAQCAtNzMsOSArNzMsMTMgQEAgSFRNTFRhYmxlRWxlbWVudEltcGw6On5IVE1M
VGFibGVFbGVtZW50SQogewogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTFRhYmxlRWxlbWVudEltcGw6
OmlkKCkgY29uc3QKK2Jvb2wgSFRNTFRhYmxlRWxlbWVudEltcGw6OmNoZWNrRFREKGNvbnN0IE5v
ZGVJbXBsKiBuZXdDaGlsZCkKIHsKLSAgICByZXR1cm4gSURfVEFCTEU7CisgICAgcmV0dXJuIG5l
d0NoaWxkLT5pc1RleHROb2RlKCkgfHwgbmV3Q2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpj
YXB0aW9uKCkpIHx8CisgICAgICAgICAgIG5ld0NoaWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
Y29sKCkpIHx8IG5ld0NoaWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Y29sZ3JvdXAoKSkgfHwK
KyAgICAgICAgICAgbmV3Q2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0aGVhZCgpKSB8fCBu
ZXdDaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRmb290KCkpIHx8CisgICAgICAgICAgIG5l
d0NoaWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGJvZHkoKSkgfHwgbmV3Q2hpbGQtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjpmb3JtKCkpIHx8CisgICAgICAgICAgIG5ld0NoaWxkLT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6c2NyaXB0KCkpOwogfQogCiBOb2RlSW1wbCogSFRNTFRhYmxlRWxlbWVu
dEltcGw6OnNldENhcHRpb24oIEhUTUxUYWJsZUNhcHRpb25FbGVtZW50SW1wbCAqYyApCkBAIC0x
NDYsNyArMTUwLDcgQEAgSFRNTEVsZW1lbnRJbXBsICpIVE1MVGFibGVFbGVtZW50SW1wbDo6Ywog
ICAgIGlmKCFoZWFkKQogICAgIHsKICAgICAgICAgaW50IGV4Y2VwdGlvbmNvZGUgPSAwOwotICAg
ICAgICBoZWFkID0gbmV3IEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbChkb2NQdHIoKSwgSURf
VEhFQUQsIHRydWUgLyogaW1wbGljaXQgKi8pOworICAgICAgICBoZWFkID0gbmV3IEhUTUxUYWJs
ZVNlY3Rpb25FbGVtZW50SW1wbChIVE1MTmFtZXM6OnRoZWFkKCksIGRvY1B0cigpLCB0cnVlIC8q
IGltcGxpY2l0ICovKTsKICAgICAgICAgaWYoZm9vdCkKICAgICAgICAgICAgIGluc2VydEJlZm9y
ZSggaGVhZCwgZm9vdCwgZXhjZXB0aW9uY29kZSApOwogICAgICAgICBlbHNlIGlmKGZpcnN0Qm9k
eSkKQEAgLTE3MSw3ICsxNzUsNyBAQCBIVE1MRWxlbWVudEltcGwgKkhUTUxUYWJsZUVsZW1lbnRJ
bXBsOjpjCiAgICAgaWYoIWZvb3QpCiAgICAgewogICAgICAgICBpbnQgZXhjZXB0aW9uY29kZSA9
IDA7Ci0gICAgICAgIGZvb3QgPSBuZXcgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsKGRvY1B0
cigpLCBJRF9URk9PVCwgdHJ1ZSAvKmltcGxpY2l0ICovKTsKKyAgICAgICAgZm9vdCA9IG5ldyBI
VE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGwoSFRNTE5hbWVzOjp0Zm9vdCgpLCBkb2NQdHIoKSwg
dHJ1ZSAvKmltcGxpY2l0ICovKTsKICAgICAgICAgaWYoZmlyc3RCb2R5KQogICAgICAgICAgICAg
aW5zZXJ0QmVmb3JlKCBmb290LCBmaXJzdEJvZHksIGV4Y2VwdGlvbmNvZGUgKTsKICAgICAgICAg
ZWxzZQpAQCAtMjE2LDcgKzIyMCw3IEBAIEhUTUxFbGVtZW50SW1wbCAqSFRNTFRhYmxlRWxlbWVu
dEltcGw6OmkKICAgICAvLyAobm90ZTogdGhpcyBpcyBkaWZmZXJlbnQgZnJvbSAiaWYgdGhlIHRh
YmxlIGhhcyBubyBzZWN0aW9ucyIsIHNpbmNlIHdlIGNhbiBoYXZlCiAgICAgLy8gPFRBQkxFPjxU
Uj4pCiAgICAgaWYoIWZpcnN0Qm9keSAmJiAhaGVhZCAmJiAhZm9vdCAmJiAhaGFzQ2hpbGROb2Rl
cygpKQotICAgICAgICBzZXRUQm9keSggbmV3IEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbChk
b2NQdHIoKSwgSURfVEJPRFksIHRydWUgLyogaW1wbGljaXQgKi8pICk7CisgICAgICAgIHNldFRC
b2R5KCBuZXcgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsKEhUTUxOYW1lczo6dGJvZHkoKSwg
ZG9jUHRyKCksIHRydWUgLyogaW1wbGljaXQgKi8pICk7CiAKICAgICAvL2tkRGVidWcoNjAzMCkg
PDwga19mdW5jaW5mbyA8PCBpbmRleCA8PCBlbmRsOwogICAgIC8vIElFIHRyZWF0cyBpbmRleD0t
MSBhcyBkZWZhdWx0IHZhbHVlIG1lYW5pbmcgJ2FwcGVuZCBhZnRlciBsYXN0JwpAQCAtMjMwLDcg
KzIzNCw4IEBAIEhUTUxFbGVtZW50SW1wbCAqSFRNTFRhYmxlRWxlbWVudEltcGw6OmkKICAgICB7
CiAJLy8gdGhlcmUgY291bGQgYmUgMiB0Zm9vdCBlbGVtZW50cyBpbiB0aGUgdGFibGUuIE9ubHkg
dGhlIGZpcnN0IG9uZSBpcyB0aGUgImZvb3QiLCB0aGF0J3Mgd2h5IHdlIGhhdmUgdGhlIG1vcmUK
IAkvLyBjb21wbGljYXRlZCBpZiBzdGF0ZW1lbnQgYmVsb3cuCi0gICAgICAgIGlmICggbm9kZSAh
PSBmb290ICYmIChub2RlLT5pZCgpID09IElEX1RIRUFEIHx8IG5vZGUtPmlkKCkgPT0gSURfVEZP
T1QgfHwgbm9kZS0+aWQoKSA9PSBJRF9UQk9EWSkgKQorICAgICAgICBpZiAobm9kZSAhPSBmb290
ICYmIChub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGhlYWQoKSkgfHwgbm9kZS0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OnRmb290KCkpIHx8IAorICAgICAgICAgICAgbm9kZS0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OnRib2R5KCkpKSkKICAgICAgICAgewogICAgICAgICAgICAgc2VjdGlvbiA9
IHN0YXRpY19jYXN0PEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbCAqPihub2RlKTsKICAgICAg
ICAgICAgIGxhc3RTZWN0aW9uID0gc2VjdGlvbjsKQEAgLTI3Niw4ICsyODEsOCBAQCB2b2lkIEhU
TUxUYWJsZUVsZW1lbnRJbXBsOjpkZWxldGVSb3coIGxvCiAgICAgYm9vbCBmb3VuZCA9IGZhbHNl
OwogICAgIGZvciAoIDsgbm9kZSA7IG5vZGUgPSBub2RlLT5uZXh0U2libGluZygpICkKICAgICB7
Ci0gICAgICAgIGlmICggbm9kZSAhPSBmb290ICYmIChub2RlLT5pZCgpID09IElEX1RIRUFEIHx8
IG5vZGUtPmlkKCkgPT0gSURfVEZPT1QgfHwgbm9kZS0+aWQoKSA9PSBJRF9UQk9EWSkgKQotICAg
ICAgICB7CisgICAgICAgIGlmIChub2RlICE9IGZvb3QgJiYgKG5vZGUtPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjp0aGVhZCgpKSB8fCBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGZvb3QoKSkg
fHwgCisgICAgICAgICAgICBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGJvZHkoKSkpKSB7
CiAgICAgICAgICAgICBzZWN0aW9uID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlU2VjdGlvbkVsZW1l
bnRJbXBsICo+KG5vZGUpOwogICAgICAgICAgICAgbGFzdFNlY3Rpb24gPSBzZWN0aW9uOwogICAg
ICAgICAgICAgaW50IHJvd3MgPSBzZWN0aW9uLT5udW1Sb3dzKCk7CkBAIC0zMDksNyArMzE0LDcg
QEAgTm9kZUltcGwgKkhUTUxUYWJsZUVsZW1lbnRJbXBsOjphZGRDaGlsZAogICAgIGtkRGVidWco
IDYwMzAgKSA8PCBub2RlTmFtZSgpLnN0cmluZygpIDw8ICIoVGFibGUpOjphZGRDaGlsZCggIiA8
PCBjaGlsZC0+bm9kZU5hbWUoKS5zdHJpbmcoKSA8PCAiICkiIDw8IGVuZGw7CiAjZW5kaWYKIAot
ICAgIGlmIChjaGlsZC0+aWQoKSA9PSBJRF9GT1JNKSB7CisgICAgaWYgKGNoaWxkLT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6Zm9ybSgpKSkgewogICAgICAgICAvLyBGaXJzdCBhZGQgdGhlIGNoaWxk
LgogICAgICAgICBIVE1MRWxlbWVudEltcGw6OmFkZENoaWxkKGNoaWxkKTsKICAgICAgICAgLy8g
Tm93IHNpbXBseSByZXR1cm4gb3Vyc2VsdmVzIGFzIHRoZSBuZXdub2RlLiAgVGhpcyBoYXMgdGhl
IGVmZmVjdCBvZgpAQCAtMzM3LDI4ICszNDIsMTUgQEAgTm9kZUltcGwgKkhUTUxUYWJsZUVsZW1l
bnRJbXBsOjphZGRDaGlsZAogCiAgICAgaW50IGV4Y2VwdGlvbmNvZGUgPSAwOwogICAgIE5vZGVJ
bXBsICpyZXR2YWwgPSBhcHBlbmRDaGlsZCggY2hpbGQsIGV4Y2VwdGlvbmNvZGUgKTsKLSAgICBp
ZiAoIHJldHZhbCApIHsKLQlzd2l0Y2goY2hpbGQtPmlkKCkpIHsKLQljYXNlIElEX0NBUFRJT046
Ci0JICAgIGlmICggIXRDYXB0aW9uICkKLQkJdENhcHRpb24gPSBzdGF0aWNfY2FzdDxIVE1MVGFi
bGVDYXB0aW9uRWxlbWVudEltcGwgKj4oY2hpbGQpOwotCSAgICBicmVhazsKLQljYXNlIElEX0NP
TDoKLQljYXNlIElEX0NPTEdST1VQOgotCSAgICBicmVhazsKLQljYXNlIElEX1RIRUFEOgotCSAg
ICBpZiAoICFoZWFkICkKLQkJaGVhZCA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZVNlY3Rpb25FbGVt
ZW50SW1wbCAqPihjaGlsZCk7Ci0JICAgIGJyZWFrOwotCWNhc2UgSURfVEZPT1Q6Ci0JICAgIGlm
ICggIWZvb3QgKQotCQlmb290ID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJ
bXBsICo+KGNoaWxkKTsKLQkgICAgYnJlYWs7Ci0JY2FzZSBJRF9UQk9EWToKLQkgICAgaWYgKCAh
Zmlyc3RCb2R5ICkKLQkJZmlyc3RCb2R5ID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlU2VjdGlvbkVs
ZW1lbnRJbXBsICo+KGNoaWxkKTsKLQkgICAgYnJlYWs7Ci0JfQorICAgIGlmIChyZXR2YWwpIHsK
KyAgICAgICAgaWYgKCF0Q2FwdGlvbiAmJiBjaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmNh
cHRpb24oKSkpCisgICAgICAgICAgICB0Q2FwdGlvbiA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZUNh
cHRpb25FbGVtZW50SW1wbCAqPihjaGlsZCk7CisgICAgICAgIGVsc2UgaWYgKCFoZWFkICYmIGNo
aWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGhlYWQoKSkpCisgICAgICAgICAgICBoZWFkID0g
c3RhdGljX2Nhc3Q8SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsICo+KGNoaWxkKTsKKyAgICAg
ICAgZWxzZSBpZiAoIWZvb3QgJiYgY2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0Zm9vdCgp
KSkKKyAgICAgICAgICAgIGZvb3QgPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVTZWN0aW9uRWxlbWVu
dEltcGwgKj4oY2hpbGQpOworCWVsc2UgaWYgKCFmaXJzdEJvZHkgJiYgY2hpbGQtPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjp0Ym9keSgpKSkKKwkgICAgZmlyc3RCb2R5ID0gc3RhdGljX2Nhc3Q8SFRN
TFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsICo+KGNoaWxkKTsKICAgICB9CiAgICAgcmV0dXJuIHJl
dHZhbDsKIH0KQEAgLTgwMiwxNyArNzk0LDE2IEBAIHZvaWQgSFRNTFRhYmxlUGFydEVsZW1lbnRJ
bXBsOjpwYXJzZU1hcHAKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1IVE1MVGFibGVTZWN0aW9u
RWxlbWVudEltcGw6OkhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9j
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdXNob3J0IHRhZ2lkLCBib29sIGltcGxpY2l0KQotICAgIDogSFRNTFRhYmxlUGFydEVsZW1l
bnRJbXBsKGRvYykKK0hUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbDo6SFRNTFRhYmxlU2VjdGlv
bkVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50UHRyICpk
b2MsIGJvb2wgaW1wbGljaXQpCisgICAgOiBIVE1MVGFibGVQYXJ0RWxlbWVudEltcGwodGFnTmFt
ZSwgZG9jKQogewotICAgIF9pZCA9IHRhZ2lkOwogICAgIG1faW1wbGljaXQgPSBpbXBsaWNpdDsK
IH0KIAotTm9kZUltcGw6OklkIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbDo6aWQoKSBjb25z
dAorYm9vbCBIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGw6OmNoZWNrRFREKGNvbnN0IE5vZGVJ
bXBsKiBuZXdDaGlsZCkKIHsKLSAgICByZXR1cm4gX2lkOworICAgIHJldHVybiBuZXdDaGlsZC0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRyKCkpIHx8IG5ld0NoaWxkLT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6Zm9ybSgpKSB8fAorICAgICAgICAgICBuZXdDaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OnNjcmlwdCgpKTsKIH0KIAogTm9kZUltcGwgKkhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1w
bDo6YWRkQ2hpbGQoTm9kZUltcGwgKmNoaWxkKQpAQCAtODIxLDcgKzgxMiw3IEBAIE5vZGVJbXBs
ICpIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGw6OmEKICAgICBrZERlYnVnKCA2MDMwICkgPDwg
bm9kZU5hbWUoKS5zdHJpbmcoKSA8PCAiKFRib2R5KTo6YWRkQ2hpbGQoICIgPDwgY2hpbGQtPm5v
ZGVOYW1lKCkuc3RyaW5nKCkgPDwgIiApIiA8PCBlbmRsOwogI2VuZGlmCiAKLSAgICBpZiAoY2hp
bGQtPmlkKCkgPT0gSURfRk9STSkgeworICAgIGlmIChjaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OmZvcm0oKSkpIHsKICAgICAgICAgLy8gRmlyc3QgYWRkIHRoZSBjaGlsZC4KICAgICAgICAg
SFRNTEVsZW1lbnRJbXBsOjphZGRDaGlsZChjaGlsZCk7CiAgICAgICAgIC8vIE5vdyBzaW1wbHkg
cmV0dXJuIG91cnNlbHZlcyBhcyB0aGUgbmV3bm9kZS4gIFRoaXMgaGFzIHRoZSBlZmZlY3Qgb2YK
QEAgLTg3Nyw3ICs4NjgsNyBAQCBpbnQgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsOjpudW1S
b3dzCiAgICAgaW50IHJvd3MgPSAwOwogICAgIGNvbnN0IE5vZGVJbXBsICpuID0gZmlyc3RDaGls
ZCgpOwogICAgIHdoaWxlIChuKSB7Ci0gICAgICAgIGlmIChuLT5pZCgpID09IElEX1RSKQorICAg
ICAgICBpZiAobi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRyKCkpKQogICAgICAgICAgICAgcm93
cysrOwogICAgICAgICBuID0gbi0+bmV4dFNpYmxpbmcoKTsKICAgICB9CkBAIC05MzIsOSArOTIz
LDEwIEBAIFNoYXJlZFB0cjxIVE1MQ29sbGVjdGlvbkltcGw+IEhUTUxUYWJsZVMKIAogLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQogCi1Ob2RlSW1wbDo6SWQgSFRNTFRhYmxlUm93RWxlbWVudEltcGw6Omlk
KCkgY29uc3QKK2Jvb2wgSFRNTFRhYmxlUm93RWxlbWVudEltcGw6OmNoZWNrRFREKGNvbnN0IE5v
ZGVJbXBsKiBuZXdDaGlsZCkKIHsKLSAgICByZXR1cm4gSURfVFI7CisgICAgcmV0dXJuIG5ld0No
aWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGQoKSkgfHwgbmV3Q2hpbGQtPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjp0aCgpKSB8fAorICAgICAgICAgICBuZXdDaGlsZC0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OmZvcm0oKSkgfHwgbmV3Q2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzY3JpcHQo
KSk7CiB9CiAKIE5vZGVJbXBsICpIVE1MVGFibGVSb3dFbGVtZW50SW1wbDo6YWRkQ2hpbGQoTm9k
ZUltcGwgKmNoaWxkKQpAQCAtOTQzLDcgKzkzNSw3IEBAIE5vZGVJbXBsICpIVE1MVGFibGVSb3dF
bGVtZW50SW1wbDo6YWRkQ2gKICAgICBrZERlYnVnKCA2MDMwICkgPDwgbm9kZU5hbWUoKS5zdHJp
bmcoKSA8PCAiKFRyb3cpOjphZGRDaGlsZCggIiA8PCBjaGlsZC0+bm9kZU5hbWUoKS5zdHJpbmco
KSA8PCAiICkiIDw8IGVuZGw7CiAjZW5kaWYKIAotICAgIGlmIChjaGlsZC0+aWQoKSA9PSBJRF9G
T1JNKSB7CisgICAgaWYgKGNoaWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Zm9ybSgpKSkgewog
ICAgICAgICAvLyBGaXJzdCBhZGQgdGhlIGNoaWxkLgogICAgICAgICBIVE1MRWxlbWVudEltcGw6
OmFkZENoaWxkKGNoaWxkKTsKICAgICAgICAgLy8gTm93IHNpbXBseSByZXR1cm4gb3Vyc2VsdmVz
IGFzIHRoZSBuZXdub2RlLiAgVGhpcyBoYXMgdGhlIGVmZmVjdCBvZgpAQCAtOTU4LDE2ICs5NTAs
MTYgQEAgbG9uZyBIVE1MVGFibGVSb3dFbGVtZW50SW1wbDo6cm93SW5kZXgoKQogICAgIGludCBy
SW5kZXggPSAwOwogCiAgICAgTm9kZUltcGwgKnRhYmxlID0gcGFyZW50Tm9kZSgpOwotICAgIGlm
ICggIXRhYmxlICkKKyAgICBpZiAoIXRhYmxlKQogCXJldHVybiAtMTsKICAgICB0YWJsZSA9IHRh
YmxlLT5wYXJlbnROb2RlKCk7Ci0gICAgaWYgKCAhdGFibGUgfHwgdGFibGUtPmlkKCkgIT0gSURf
VEFCTEUgKQorICAgIGlmICghdGFibGUgfHwgIXRhYmxlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
dGFibGUoKSkpCiAJcmV0dXJuIC0xOwogCiAgICAgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBs
ICpmb290ID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlRWxlbWVudEltcGwgKj4odGFibGUpLT50Rm9v
dCgpOwogICAgIE5vZGVJbXBsICpub2RlID0gdGFibGUtPmZpcnN0Q2hpbGQoKTsKLSAgICB3aGls
ZSAoIG5vZGUgKSB7Ci0gICAgICAgIGlmICggbm9kZSAhPSBmb290ICYmIChub2RlLT5pZCgpID09
IElEX1RIRUFEIHx8IG5vZGUtPmlkKCkgPT0gSURfVEZPT1QgfHwgbm9kZS0+aWQoKSA9PSBJRF9U
Qk9EWSkgKSB7CisgICAgd2hpbGUgKG5vZGUpIHsKKyAgICAgICAgaWYgKG5vZGUgIT0gZm9vdCAm
JiAobm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRoZWFkKCkpIHx8IG5vZGUtPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjp0Zm9vdCgpKSB8fCBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGJv
ZHkoKSkpKSB7CiAJICAgIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbCogc2VjdGlvbiA9IHN0
YXRpY19jYXN0PEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbCAqPihub2RlKTsKIAkgICAgY29u
c3QgTm9kZUltcGwgKnJvdyA9IHNlY3Rpb24tPmZpcnN0Q2hpbGQoKTsKIAkgICAgd2hpbGUgKCBy
b3cgKSB7CkBAIC05OTYsNyArOTg4LDcgQEAgbG9uZyBIVE1MVGFibGVSb3dFbGVtZW50SW1wbDo6
c2VjdGlvblJvdwogICAgIGNvbnN0IE5vZGVJbXBsICpuID0gdGhpczsKICAgICBkbyB7CiAgICAg
ICAgIG4gPSBuLT5wcmV2aW91c1NpYmxpbmcoKTsKLSAgICAgICAgaWYgKG4gJiYgbi0+aXNFbGVt
ZW50Tm9kZSgpICYmIG4tPmlkKCkgPT0gSURfVFIpCisgICAgICAgIGlmIChuICYmIG4tPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjp0cigpKSkKICAgICAgICAgICAgIHJJbmRleCsrOwogICAgIH0KICAg
ICB3aGlsZSAobik7CkBAIC0xMDEzLDcgKzEwMDUsNyBAQCBIVE1MRWxlbWVudEltcGwgKkhUTUxU
YWJsZVJvd0VsZW1lbnRJbXBsCiAgICAgICAgIGV4Y2VwdGlvbmNvZGUgPSBET01FeGNlcHRpb246
OklOREVYX1NJWkVfRVJSOyAvLyBwZXIgdGhlIERPTQogICAgIGVsc2UKICAgICB7Ci0gICAgICAg
IGMgPSBuZXcgSFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsKGRvY1B0cigpLCBJRF9URCk7CisgICAg
ICAgIGMgPSBuZXcgSFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6dGQoKSwgZG9j
UHRyKCkpOwogICAgICAgICBpZihudW1DZWxscyA9PSBpbmRleCB8fCBpbmRleCA9PSAtMSkKICAg
ICAgICAgICAgIGFwcGVuZENoaWxkKGMsIGV4Y2VwdGlvbmNvZGUpOwogICAgICAgICBlbHNlIHsK
QEAgLTExMDMsMTUgKzEwOTUsMTQgQEAgdm9pZCBIVE1MVGFibGVSb3dFbGVtZW50SW1wbDo6c2V0
VkFsaWduKAogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUhUTUxUYWJsZUNlbGxFbGVtZW50SW1w
bDo6SFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIGludCB0YWcpCi0g
IDogSFRNTFRhYmxlUGFydEVsZW1lbnRJbXBsKGRvYykKK0hUTUxUYWJsZUNlbGxFbGVtZW50SW1w
bDo6SFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUs
IERvY3VtZW50UHRyICpkb2MpCisgIDogSFRNTFRhYmxlUGFydEVsZW1lbnRJbXBsKHRhZ05hbWUs
IGRvYykKIHsKLSAgX2NvbCA9IC0xOwotICBfcm93ID0gLTE7Ci0gIGNTcGFuID0gclNwYW4gPSAx
OwotICBfaWQgPSB0YWc7Ci0gIHJvd0hlaWdodCA9IDA7Ci0gIG1fc29saWQgPSBmYWxzZTsKKyAg
ICBfY29sID0gLTE7CisgICAgX3JvdyA9IC0xOworICAgIGNTcGFuID0gclNwYW4gPSAxOworICAg
IHJvd0hlaWdodCA9IDA7CisgICAgbV9zb2xpZCA9IGZhbHNlOwogfQogCiBIVE1MVGFibGVDZWxs
RWxlbWVudEltcGw6On5IVE1MVGFibGVDZWxsRWxlbWVudEltcGwoKQpAQCAtMTEyMiw3ICsxMTEz
LDcgQEAgbG9uZyBIVE1MVGFibGVDZWxsRWxlbWVudEltcGw6OmNlbGxJbmRleAogewogICAgIGlu
dCBpbmRleCA9IDA7CiAgICAgZm9yIChjb25zdCBOb2RlSW1wbCAqIG5vZGUgPSBwcmV2aW91c1Np
YmxpbmcoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPnByZXZpb3VzU2libGluZygpKSB7Ci0gICAgICAg
IGlmIChub2RlLT5pZCgpID09IElEX1REIHx8IG5vZGUtPmlkKCkgPT0gSURfVEgpCisgICAgICAg
IGlmIChub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGQoKSkgfHwgbm9kZS0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OnRoKCkpKQogICAgICAgICAgICAgaW5kZXgrKzsKICAgICB9CiAgICAgCkBA
IC0xMTg5LDkgKzExODAsOSBAQCB2b2lkIEhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbDo6cGFyc2VN
YXBwCiAvLyB1c2VkIGJ5IHRhYmxlIGNlbGxzIHRvIHNoYXJlIHN0eWxlIGRlY2xzIGNyZWF0ZWQg
YnkgdGhlIGVuY2xvc2luZyB0YWJsZS4KIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uSW1wbCog
SFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsOjphZGRpdGlvbmFsQXR0cmlidXRlU3R5bGVEZWNsKCkK
IHsKLSAgICBIVE1MRWxlbWVudEltcGwqIHAgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwq
PihwYXJlbnROb2RlKCkpOwotICAgIHdoaWxlKHAgJiYgcC0+aWQoKSAhPSBJRF9UQUJMRSkKLSAg
ICAgICAgcCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCo+KHAtPnBhcmVudE5vZGUoKSk7
CisgICAgTm9kZUltcGwqIHAgPSBwYXJlbnROb2RlKCk7CisgICAgd2hpbGUgKHAgJiYgIXAtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjp0YWJsZSgpKSkKKyAgICAgICAgcCA9IHAtPnBhcmVudE5vZGUo
KTsKIAogICAgIGlmIChwKSB7CiAgICAgICAgIEhUTUxUYWJsZUVsZW1lbnRJbXBsKiB0YWJsZSA9
IHN0YXRpY19jYXN0PEhUTUxUYWJsZUVsZW1lbnRJbXBsKj4ocCk7CkBAIC0xMjAxLDE1ICsxMTky
LDYgQEAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25JbXBsKiBIVE1MVGFibAogICAgIHJldHVy
biAwOwogfQogCi12b2lkIEhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbDo6YXR0YWNoKCkKLXsKLSAg
ICBIVE1MRWxlbWVudEltcGwqIHAgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwqPihwYXJl
bnROb2RlKCkpOwotICAgIHdoaWxlKHAgJiYgcC0+aWQoKSAhPSBJRF9UQUJMRSkKLSAgICAgICAg
cCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCo+KHAtPnBhcmVudE5vZGUoKSk7Ci0KLSAg
ICBIVE1MVGFibGVQYXJ0RWxlbWVudEltcGw6OmF0dGFjaCgpOwotfQotCiBib29sIEhUTUxUYWJs
ZUNlbGxFbGVtZW50SW1wbDo6aXNVUkxBdHRyaWJ1dGUoQXR0cmlidXRlSW1wbCAqYXR0cikgY29u
c3QKIHsKICAgICByZXR1cm4gYXR0ci0+aWQoKSA9PSBBVFRSX0JBQ0tHUk9VTkQ7CkBAIC0xMzQ3
LDE2ICsxMzI5LDEwIEBAIHZvaWQgSFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsOjpzZXRXaWR0aCgK
IAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1IVE1MVGFibGVDb2xFbGVtZW50SW1wbDo6SFRNTFRh
YmxlQ29sRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgdXNob3J0IGkpCi0gICAgOiBIVE1M
VGFibGVQYXJ0RWxlbWVudEltcGwoZG9jKQorSFRNTFRhYmxlQ29sRWxlbWVudEltcGw6OkhUTUxU
YWJsZUNvbEVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50
UHRyICpkb2MpCisgICAgOiBIVE1MVGFibGVQYXJ0RWxlbWVudEltcGwodGFnTmFtZSwgZG9jKQog
ewotICAgIF9pZCA9IGk7Ci0gICAgX3NwYW4gPSAoX2lkID09IElEX0NPTEdST1VQID8gMCA6IDEp
OwotfQotCi1Ob2RlSW1wbDo6SWQgSFRNTFRhYmxlQ29sRWxlbWVudEltcGw6OmlkKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gX2lkOworICAgIF9zcGFuID0gKHRhZ05hbWUubWF0Y2hlcyhIVE1MTmFt
ZXM6OmNvbGdyb3VwKCkpID8gMCA6IDEpOwogfQogCiBib29sIEhUTUxUYWJsZUNvbEVsZW1lbnRJ
bXBsOjptYXBUb0VudHJ5KE5vZGVJbXBsOjpJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYg
cmVzdWx0KSBjb25zdApAQCAtMTQ0NywxMSArMTQyMyw2IEBAIHZvaWQgSFRNTFRhYmxlQ29sRWxl
bWVudEltcGw6OnNldFdpZHRoKGMKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Ob2RlSW1wbDo6
SWQgSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IElEX0NBUFRJT047Ci19Ci0KIGJvb2wgSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnRJbXBsOjptYXBU
b0VudHJ5KE5vZGVJbXBsOjpJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBj
b25zdAogewogICAgIGlmIChhdHRyID09IEFUVFJfQUxJR04pIHsKSW5kZXg6IGtodG1sL2h0bWwv
aHRtbF90YWJsZWltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9r
aHRtbC9odG1sL2h0bWxfdGFibGVpbXBsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjEKZGlm
ZiAtdSAtcCAtcjEuMjEga2h0bWwvaHRtbC9odG1sX3RhYmxlaW1wbC5oCi0tLSBraHRtbC9odG1s
L2h0bWxfdGFibGVpbXBsLmgJMTcgSnVuIDIwMDUgMjE6NTU6MzkgLTAwMDAJMS4yMQorKysga2h0
bWwvaHRtbC9odG1sX3RhYmxlaW1wbC5oCTggSnVsIDIwMDUgMDU6NTc6MjYgLTAwMDAKQEAgLTYy
LDcgKzYyLDkgQEAgcHVibGljOgogICAgIEhUTUxUYWJsZUVsZW1lbnRJbXBsKERvY3VtZW50UHRy
ICpkb2MpOwogICAgIH5IVE1MVGFibGVFbGVtZW50SW1wbCgpOwogCi0gICAgdmlydHVhbCBJZCBp
ZCgpIGNvbnN0OworICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgp
IGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9CisgICAgdmlydHVhbCBpbnQgdGFn
UHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiA5OyB9CisgICAgdmlydHVhbCBib29sIGNoZWNrRFRE
KGNvbnN0IE5vZGVJbXBsKiBuZXdDaGlsZCk7CiAKICAgICBIVE1MVGFibGVDYXB0aW9uRWxlbWVu
dEltcGwgKmNhcHRpb24oKSBjb25zdCB7IHJldHVybiB0Q2FwdGlvbjsgfQogICAgIE5vZGVJbXBs
ICpzZXRDYXB0aW9uKCBIVE1MVGFibGVDYXB0aW9uRWxlbWVudEltcGwgKiApOwpAQCAtMTQ3LDgg
KzE0OSw4IEBAIGNsYXNzIEhUTUxUYWJsZVBhcnRFbGVtZW50SW1wbCA6IHB1YmxpYyAKIAogewog
cHVibGljOgotICAgIEhUTUxUYWJsZVBhcnRFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQot
ICAgICAgICA6IEhUTUxFbGVtZW50SW1wbChkb2MpCisgICAgSFRNTFRhYmxlUGFydEVsZW1lbnRJ
bXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50UHRyICpkb2MpCisgICAg
ICAgIDogSFRNTEVsZW1lbnRJbXBsKHRhZ05hbWUsIGRvYykKICAgICAgICAgeyB9CiAKICAgICB2
aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShOb2RlSW1wbDo6SWQgYXR0ciwgTWFwcGVkQXR0cmlidXRl
RW50cnkmIHJlc3VsdCkgY29uc3Q7CkBAIC0xNjAsOSArMTYyLDExIEBAIHB1YmxpYzoKIGNsYXNz
IEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MVGFibGVQYXJ0RWxlbWVu
dEltcGwKIHsKIHB1YmxpYzoKLSAgICBIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGwoRG9jdW1l
bnRQdHIgKmRvYywgdXNob3J0IHRhZ2lkLCBib29sIGltcGxpY2l0KTsKKyAgICBIVE1MVGFibGVT
ZWN0aW9uRWxlbWVudEltcGwoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnRQ
dHIgKmRvYywgYm9vbCBpbXBsaWNpdCk7CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7Cisg
ICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1
cm4gVGFnU3RhdHVzT3B0aW9uYWw7IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNv
bnN0IHsgcmV0dXJuIDg7IH0KKyAgICB2aXJ0dWFsIGJvb2wgY2hlY2tEVEQoY29uc3QgTm9kZUlt
cGwqIG5ld0NoaWxkKTsKIAogICAgIHZpcnR1YWwgTm9kZUltcGwgKmFkZENoaWxkKE5vZGVJbXBs
ICpjaGlsZCk7CiAgICAgCkBAIC0xODQsOSArMTg4LDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0
VkFsaWduKCBjb25zdCBET01TdHJpbmcgJiApOwogCiAgICAga2h0bWw6OlNoYXJlZFB0cjxIVE1M
Q29sbGVjdGlvbkltcGw+IHJvd3MoKTsKLQotcHJvdGVjdGVkOgotICAgIHVzaG9ydCBfaWQ7CiB9
OwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xOTUsMTAgKzE5NiwxMiBAQCBjbGFzcyBIVE1M
VGFibGVSb3dFbGVtZW50SW1wbCA6IHB1YmxpYyBICiB7CiBwdWJsaWM6CiAgICAgSFRNTFRhYmxl
Um93RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgICAgICAgOiBIVE1MVGFibGVQYXJ0
RWxlbWVudEltcGwoZG9jKSB7fQotCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OworICAgICAg
ICA6IEhUTUxUYWJsZVBhcnRFbGVtZW50SW1wbChIVE1MTmFtZXM6OnRyKCksIGRvYykge30KIAor
ICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0
dXJuIFRhZ1N0YXR1c09wdGlvbmFsOyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBj
b25zdCB7IHJldHVybiA3OyB9CisgICAgdmlydHVhbCBib29sIGNoZWNrRFREKGNvbnN0IE5vZGVJ
bXBsKiBuZXdDaGlsZCk7CisJCiAgICAgdmlydHVhbCBOb2RlSW1wbCAqYWRkQ2hpbGQoTm9kZUlt
cGwgKmNoaWxkKTsKICAgICAKICAgICBsb25nIHJvd0luZGV4KCkgY29uc3Q7CkBAIC0yMzgsMTAg
KzI0MSwxMiBAQCBwcm90ZWN0ZWQ6CiBjbGFzcyBIVE1MVGFibGVDZWxsRWxlbWVudEltcGwgOiBw
dWJsaWMgSFRNTFRhYmxlUGFydEVsZW1lbnRJbXBsCiB7CiBwdWJsaWM6Ci0gICAgSFRNTFRhYmxl
Q2VsbEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIGludCB0YWdJZCk7CisgICAgSFRNTFRh
YmxlQ2VsbEVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50
UHRyICpkb2MpOwogICAgIH5IVE1MVGFibGVDZWxsRWxlbWVudEltcGwoKTsKIAotICAgIC8vICMj
IyBGSVggdGhlc2UgdHdvLi4uCisgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVp
cmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzT3B0aW9uYWw7IH0KKyAgICB2aXJ0dWFs
IGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDY7IH0KKwogICAgIGxvbmcgY2VsbElu
ZGV4KCkgY29uc3Q7CiAKICAgICBpbnQgY29sKCkgY29uc3QgeyByZXR1cm4gX2NvbDsgfQpAQCAt
MjUxLDE0ICsyNTYsMTAgQEAgcHVibGljOgogCiAgICAgaW50IGNvbFNwYW4oKSBjb25zdCB7IHJl
dHVybiBjU3BhbjsgfQogICAgIGludCByb3dTcGFuKCkgY29uc3QgeyByZXR1cm4gclNwYW47IH0K
LSAgICAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3QgeyByZXR1cm4gX2lkOyB9Ci0gICAgCisK
ICAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShOb2RlSW1wbDo6SWQgYXR0ciwgTWFwcGVkQXR0
cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVk
QXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIpOwogCi0gICAgdmlydHVhbCB2b2lk
IGF0dGFjaCgpOwotCiAgICAgLy8gdXNlZCBieSB0YWJsZSBjZWxscyB0byBzaGFyZSBzdHlsZSBk
ZWNscyBjcmVhdGVkIGJ5IHRoZSBlbmNsb3NpbmcgdGFibGUuCiAgICAgdmlydHVhbCBDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbkltcGwqIGFkZGl0aW9uYWxBdHRyaWJ1dGVTdHlsZURlY2woKTsK
ICAgICAKQEAgLTMxMSw3ICszMTIsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgaW50IF9jb2w7CiAgICAg
aW50IHJTcGFuOwogICAgIGludCBjU3BhbjsKLSAgICBpbnQgX2lkOwogICAgIGludCByb3dIZWln
aHQ7CiAgICAgYm9vbCBtX3NvbGlkICAgICAgICA6IDE7CiB9OwpAQCAtMzIxLDEwICszMjEsMTEg
QEAgcHJvdGVjdGVkOgogY2xhc3MgSFRNTFRhYmxlQ29sRWxlbWVudEltcGwgOiBwdWJsaWMgSFRN
TFRhYmxlUGFydEVsZW1lbnRJbXBsCiB7CiBwdWJsaWM6Ci0gICAgSFRNTFRhYmxlQ29sRWxlbWVu
dEltcGwoRG9jdW1lbnRQdHIgKmRvYywgdXNob3J0IGkpOwotCi0gICAgdmlydHVhbCBJZCBpZCgp
IGNvbnN0OworICAgIEhUTUxUYWJsZUNvbEVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUm
IHRhZ05hbWUsIERvY3VtZW50UHRyICpkb2MpOwogCisgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVz
IGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gaGFzTG9jYWxOYW1lKEhUTUxOYW1l
czo6Y29sKCkpID8gVGFnU3RhdHVzRm9yYmlkZGVuIDogVGFnU3RhdHVzT3B0aW9uYWw7IH0KKyAg
ICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIGhhc0xvY2FsTmFtZShI
VE1MTmFtZXM6OmNvbCgpKSA/IDAgOiAxOyB9CisgICAgdmlydHVhbCBib29sIGNoZWNrRFREKGNv
bnN0IE5vZGVJbXBsKiBuZXdDaGlsZCkgeyByZXR1cm4gaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6
Y29sZ3JvdXAoKSkgJiYgbmV3Q2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpjb2woKSk7IH0K
ICAgICB2b2lkIHNldFRhYmxlKEhUTUxUYWJsZUVsZW1lbnRJbXBsICp0KSB7IHRhYmxlID0gdDsg
fQogCiAgICAgLy8gb3ZlcnJpZGVzCkBAIC0zNTEsMTAgKzM1Miw2IEBAIHB1YmxpYzoKICAgICB2
b2lkIHNldFdpZHRoKCBjb25zdCBET01TdHJpbmcgJiApOwogCiBwcm90ZWN0ZWQ6Ci0gICAgLy8g
Y291bGQgYmUgSURfQ09MIG9yIElEX0NPTEdST1VQIC4uLiBUaGUgRE9NIGlzIG5vdCBxdWl0ZSBj
bGVhciBvbgotICAgIC8vIHRoaXMsIGJ1dCBzaW5jZSBib3RoIGVsZW1lbnRzIHdvcmsgcXVpdGUg
c2ltaWxhciwgd2UgdXNlIG9uZQotICAgIC8vIERPTUVsZW1lbnQgZm9yIHRoZW0uLi4KLSAgICB1
c2hvcnQgX2lkOwogICAgIGludCBfc3BhbjsKICAgICBIVE1MVGFibGVFbGVtZW50SW1wbCAqdGFi
bGU7CiB9OwpAQCAtMzY1LDkgKzM2MiwxMCBAQCBjbGFzcyBIVE1MVGFibGVDYXB0aW9uRWxlbWVu
dEltcGwgOiBwdWJsCiB7CiBwdWJsaWM6CiAgICAgSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnRJbXBs
KERvY3VtZW50UHRyICpkb2MpCi0gICAgICAgIDogSFRNTFRhYmxlUGFydEVsZW1lbnRJbXBsKGRv
Yykge30KKyAgICAgICAgOiBIVE1MVGFibGVQYXJ0RWxlbWVudEltcGwoSFRNTE5hbWVzOjpjYXB0
aW9uKCksIGRvYykge30KIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0
dXNSZXF1aXJlZDsgfQorICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1
cm4gNTsgfQogICAgIAogICAgIHZpcnR1YWwgYm9vbCBtYXBUb0VudHJ5KE5vZGVJbXBsOjpJZCBh
dHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdDsKICAgICB2aXJ0dWFsIHZv
aWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqYXR0cik7CkluZGV4
OiBraHRtbC9odG1sL2h0bWxmYWN0b3J5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiBraHRtbC9o
dG1sL2h0bWxmYWN0b3J5LmNwcApkaWZmIC1OIGtodG1sL2h0bWwvaHRtbGZhY3RvcnkuY3BwCi0t
LSAvZGV2L251bGwJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysga2h0bWwvaHRtbC9odG1s
ZmFjdG9yeS5jcHAJOCBKdWwgMjAwNSAwNTo1NzoyNiAtMDAwMApAQCAtMCwwICsxLDQyNCBAQAor
LyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBIVE1MIERPTSBpbXBsZW1lbnRhdGlvbiBm
b3IgS0RFLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBBcHBsZSBDb21wdXRlciwgSW5jLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAt
IFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqLworCisj
aW5jbHVkZSAiaHRtbGZhY3RvcnkuaCIKKyNpbmNsdWRlICJkb21fZG9jaW1wbC5oIgorCisjaW5j
bHVkZSAiaHRtbC9odG1sX2Jhc2VpbXBsLmgiCisjaW5jbHVkZSAiaHRtbC9odG1sX2Jsb2NraW1w
bC5oIgorI2luY2x1ZGUgImh0bWwvaHRtbF9jYW52YXNpbXBsLmgiCisjaW5jbHVkZSAiaHRtbC9o
dG1sX2RvY3VtZW50aW1wbC5oIgorI2luY2x1ZGUgImh0bWwvaHRtbF9mb3JtaW1wbC5oIgorI2lu
Y2x1ZGUgImh0bWwvaHRtbF9oZWFkaW1wbC5oIgorI2luY2x1ZGUgImh0bWwvaHRtbF9pbWFnZWlt
cGwuaCIKKyNpbmNsdWRlICJodG1sL2h0bWxfbGlzdGltcGwuaCIKKyNpbmNsdWRlICJodG1sL2h0
bWxfbWlzY2ltcGwuaCIKKyNpbmNsdWRlICJodG1sL2h0bWxfdGFibGVpbXBsLmgiCisjaW5jbHVk
ZSAiaHRtbC9odG1sX29iamVjdGltcGwuaCIKKworI2luY2x1ZGUgIm1pc2MvcG9pbnRlcmhhc2gu
aCIKKwordXNpbmcga2h0bWw6OlBvaW50ZXJIYXNoOwordXNpbmcga2h0bWw6Okhhc2hNYXA7CisK
K25hbWVzcGFjZSBET00KK3sKKwordHlwZWRlZiBIVE1MRWxlbWVudEltcGwqICgqQ29uc3RydWN0
b3JGdW5jKShjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUsIERvY3VtZW50UHRyKiBkb2NQdHIs
IEhUTUxGb3JtRWxlbWVudEltcGwqIGZvcm0sIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKTsKK3R5cGVk
ZWYgSGFzaE1hcDxET01TdHJpbmdJbXBsICosIHZvaWQqLCBQb2ludGVySGFzaDxET01TdHJpbmdJ
bXBsICo+ID4gRnVuY3Rpb25NYXA7CitzdGF0aWMgRnVuY3Rpb25NYXAqIGdGdW5jdGlvbk1hcDsK
KworSFRNTEVsZW1lbnRJbXBsKiBodG1sQ29uc3RydWN0b3IoY29uc3QgQXRvbWljU3RyaW5nJiB0
YWdOYW1lLCBEb2N1bWVudFB0ciogZG9jUHRyLCBIVE1MRm9ybUVsZW1lbnRJbXBsKiBmb3JtLCBi
b29sIGNyZWF0ZWRCeVBhcnNlcikKK3sKKyAgICByZXR1cm4gbmV3IEhUTUxIdG1sRWxlbWVudElt
cGwoZG9jUHRyKTsKK30KKworSFRNTEVsZW1lbnRJbXBsKiBoZWFkQ29uc3RydWN0b3IoY29uc3Qg
QXRvbWljU3RyaW5nJiB0YWdOYW1lLCBEb2N1bWVudFB0ciogZG9jUHRyLCBIVE1MRm9ybUVsZW1l
bnRJbXBsKiBmb3JtLCBib29sIGNyZWF0ZWRCeVBhcnNlcikKK3sKKyAgICByZXR1cm4gbmV3IEhU
TUxIZWFkRWxlbWVudEltcGwoZG9jUHRyKTsKK30KKworSFRNTEVsZW1lbnRJbXBsKiBib2R5Q29u
c3RydWN0b3IoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lLCBEb2N1bWVudFB0ciogZG9jUHRy
LCBIVE1MRm9ybUVsZW1lbnRJbXBsKiBmb3JtLCBib29sIGNyZWF0ZWRCeVBhcnNlcikKK3sKKyAg
ICByZXR1cm4gbmV3IEhUTUxCb2R5RWxlbWVudEltcGwoZG9jUHRyKTsKK30KKworSFRNTEVsZW1l
bnRJbXBsKiBiYXNlQ29uc3RydWN0b3IoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lLCBEb2N1
bWVudFB0ciogZG9jUHRyLCBIVE1MRm9ybUVsZW1lbnRJbXBsKiBmb3JtLCBib29sIGNyZWF0ZWRC
eVBhcnNlcikKK3sKKyAgICByZXR1cm4gbmV3IEhUTUxCYXNlRWxlbWVudEltcGwoZG9jUHRyKTsK
K30KKworSFRNTEVsZW1lbnRJbXBsKiBsaW5rQ29uc3RydWN0b3IoY29uc3QgQXRvbWljU3RyaW5n
JiB0YWdOYW1lLCBEb2N1bWVudFB0ciogZG9jUHRyLCBIVE1MRm9ybUVsZW1lbnRJbXBsKiBmb3Jt
LCBib29sIGNyZWF0ZWRCeVBhcnNlcikKK3sKKyAgICByZXR1cm4gbmV3IEhUTUxMaW5rRWxlbWVu
dEltcGwoZG9jUHRyKTsKK30KKworSFRNTEVsZW1lbnRJbXBsKiBtZXRhQ29uc3RydWN0b3IoY29u
c3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lLCBEb2N1bWVudFB0ciogZG9jUHRyLCBIVE1MRm9ybUVs
ZW1lbnRJbXBsKiBmb3JtLCBib29sIGNyZWF0ZWRCeVBhcnNlcikKK3sKKyAgICByZXR1cm4gbmV3
IEhUTUxNZXRhRWxlbWVudEltcGwoZG9jUHRyKTsKK30KKworSFRNTEVsZW1lbnRJbXBsKiBzdHls
ZUNvbnN0cnVjdG9yKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSwgRG9jdW1lbnRQdHIqIGRv
Y1B0ciwgSFRNTEZvcm1FbGVtZW50SW1wbCogZm9ybSwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCit7
CisgICAgcmV0dXJuIG5ldyBIVE1MU3R5bGVFbGVtZW50SW1wbChkb2NQdHIpOworfQorCitIVE1M
RWxlbWVudEltcGwqIHRpdGxlQ29uc3RydWN0b3IoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1l
LCBEb2N1bWVudFB0ciogZG9jUHRyLCBIVE1MRm9ybUVsZW1lbnRJbXBsKiBmb3JtLCBib29sIGNy
ZWF0ZWRCeVBhcnNlcikKK3sKKyAgICByZXR1cm4gbmV3IEhUTUxUaXRsZUVsZW1lbnRJbXBsKGRv
Y1B0cik7Cit9CisKK0hUTUxFbGVtZW50SW1wbCogZnJhbWVDb25zdHJ1Y3Rvcihjb25zdCBBdG9t
aWNTdHJpbmcmIHRhZ05hbWUsIERvY3VtZW50UHRyKiBkb2NQdHIsIEhUTUxGb3JtRWxlbWVudElt
cGwqIGZvcm0sIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQoreworICAgIHJldHVybiBuZXcgSFRNTEZy
YW1lRWxlbWVudEltcGwoZG9jUHRyKTsKK30KKworSFRNTEVsZW1lbnRJbXBsKiBmcmFtZXNldENv
bnN0cnVjdG9yKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSwgRG9jdW1lbnRQdHIqIGRvY1B0
ciwgSFRNTEZvcm1FbGVtZW50SW1wbCogZm9ybSwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCit7Cisg
ICAgcmV0dXJuIG5ldyBIVE1MRnJhbWVTZXRFbGVtZW50SW1wbChkb2NQdHIpOworfQorCitIVE1M
RWxlbWVudEltcGwqIGlmcmFtZUNvbnN0cnVjdG9yKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFt
ZSwgRG9jdW1lbnRQdHIqIGRvY1B0ciwgSFRNTEZvcm1FbGVtZW50SW1wbCogZm9ybSwgYm9vbCBj
cmVhdGVkQnlQYXJzZXIpCit7CisgICAgcmV0dXJuIG5ldyBIVE1MSUZyYW1lRWxlbWVudEltcGwo
ZG9jUHRyKTsKK30KKworSFRNTEVsZW1lbnRJbXBsKiBmb3JtQ29uc3RydWN0b3IoY29uc3QgQXRv
bWljU3RyaW5nJiB0YWdOYW1lLCBEb2N1bWVudFB0ciogZG9jUHRyLCBIVE1MRm9ybUVsZW1lbnRJ
bXBsKiBmb3JtLCBib29sIGNyZWF0ZWRCeVBhcnNlcikKK3sKKyAgICByZXR1cm4gbmV3IEhUTUxG
b3JtRWxlbWVudEltcGwoZG9jUHRyKTsKK30KKworSFRNTEVsZW1lbnRJbXBsKiBidXR0b25Db25z
dHJ1Y3Rvcihjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUsIERvY3VtZW50UHRyKiBkb2NQdHIs
IEhUTUxGb3JtRWxlbWVudEltcGwqIGZvcm0sIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQoreworICAg
IHJldHVybiBuZXcgSFRNTEJ1dHRvbkVsZW1lbnRJbXBsKGRvY1B0ciwgZm9ybSk7Cit9CisKK0hU
TUxFbGVtZW50SW1wbCogaW5wdXRDb25zdHJ1Y3Rvcihjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05h
bWUsIERvY3VtZW50UHRyKiBkb2NQdHIsIEhUTUxGb3JtRWxlbWVudEltcGwqIGZvcm0sIGJvb2wg
Y3JlYXRlZEJ5UGFyc2VyKQoreworICAgIHJldHVybiBuZXcgSFRNTElucHV0RWxlbWVudEltcGwo
ZG9jUHRyLCBmb3JtKTsKK30KKworSFRNTEVsZW1lbnRJbXBsKiBpc2luZGV4Q29uc3RydWN0b3Io
Y29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lLCBEb2N1bWVudFB0ciogZG9jUHRyLCBIVE1MRm9y
bUVsZW1lbnRJbXBsKiBmb3JtLCBib29sIGNyZWF0ZWRCeVBhcnNlcikKK3sKKyAgICByZXR1cm4g
bmV3IEhUTUxJc0luZGV4RWxlbWVudEltcGwoZG9jUHRyLCBmb3JtKTsKK30KKworSFRNTEVsZW1l
bnRJbXBsKiBmaWVsZHNldENvbnN0cnVjdG9yKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSwg
RG9jdW1lbnRQdHIqIGRvY1B0ciwgSFRNTEZvcm1FbGVtZW50SW1wbCogZm9ybSwgYm9vbCBjcmVh
dGVkQnlQYXJzZXIpCit7CisgICAgcmV0dXJuIG5ldyBIVE1MRmllbGRTZXRFbGVtZW50SW1wbChk
b2NQdHIsIGZvcm0pOworfQorCitIVE1MRWxlbWVudEltcGwqIGxhYmVsQ29uc3RydWN0b3IoY29u
c3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lLCBEb2N1bWVudFB0ciogZG9jUHRyLCBIVE1MRm9ybUVs
ZW1lbnRJbXBsKiBmb3JtLCBib29sIGNyZWF0ZWRCeVBhcnNlcikKK3sKKyAgICByZXR1cm4gbmV3
IEhUTUxMYWJlbEVsZW1lbnRJbXBsKGRvY1B0cik7Cit9CisKK0hUTUxFbGVtZW50SW1wbCogbGVn
ZW5kQ29uc3RydWN0b3IoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lLCBEb2N1bWVudFB0ciog
ZG9jUHRyLCBIVE1MRm9ybUVsZW1lbnRJbXBsKiBmb3JtLCBib29sIGNyZWF0ZWRCeVBhcnNlcikK
K3sKKyAgICByZXR1cm4gbmV3IEhUTUxMZWdlbmRFbGVtZW50SW1wbChkb2NQdHIsIGZvcm0pOwor
fQorCitIVE1MRWxlbWVudEltcGwqIG9wdGdyb3VwQ29uc3RydWN0b3IoY29uc3QgQXRvbWljU3Ry
aW5nJiB0YWdOYW1lLCBEb2N1bWVudFB0ciogZG9jUHRyLCBIVE1MRm9ybUVsZW1lbnRJbXBsKiBm
b3JtLCBib29sIGNyZWF0ZWRCeVBhcnNlcikKK3sKKyAgICByZXR1cm4gbmV3IEhUTUxPcHRHcm91
cEVsZW1lbnRJbXBsKGRvY1B0ciwgZm9ybSk7Cit9CisKK0hUTUxFbGVtZW50SW1wbCogb3B0aW9u
Q29uc3RydWN0b3IoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lLCBEb2N1bWVudFB0ciogZG9j
UHRyLCBIVE1MRm9ybUVsZW1lbnRJbXBsKiBmb3JtLCBib29sIGNyZWF0ZWRCeVBhcnNlcikKK3sK
KyAgICByZXR1cm4gbmV3IEhUTUxPcHRpb25FbGVtZW50SW1wbChkb2NQdHIsIGZvcm0pOworfQor
CitIVE1MRWxlbWVudEltcGwqIHNlbGVjdENvbnN0cnVjdG9yKGNvbnN0IEF0b21pY1N0cmluZyYg
dGFnTmFtZSwgRG9jdW1lbnRQdHIqIGRvY1B0ciwgSFRNTEZvcm1FbGVtZW50SW1wbCogZm9ybSwg
Ym9vbCBjcmVhdGVkQnlQYXJzZXIpCit7CisgICAgcmV0dXJuIG5ldyBIVE1MU2VsZWN0RWxlbWVu
dEltcGwoZG9jUHRyLCBmb3JtKTsKK30KKworSFRNTEVsZW1lbnRJbXBsKiB0ZXh0YXJlYUNvbnN0
cnVjdG9yKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSwgRG9jdW1lbnRQdHIqIGRvY1B0ciwg
SFRNTEZvcm1FbGVtZW50SW1wbCogZm9ybSwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCit7CisgICAg
cmV0dXJuIG5ldyBIVE1MVGV4dEFyZWFFbGVtZW50SW1wbChkb2NQdHIsIGZvcm0pOworfQorCitI
VE1MRWxlbWVudEltcGwqIGRsQ29uc3RydWN0b3IoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1l
LCBEb2N1bWVudFB0ciogZG9jUHRyLCBIVE1MRm9ybUVsZW1lbnRJbXBsKiBmb3JtLCBib29sIGNy
ZWF0ZWRCeVBhcnNlcikKK3sKKyAgICByZXR1cm4gbmV3IEhUTUxETGlzdEVsZW1lbnRJbXBsKGRv
Y1B0cik7Cit9CisKK0hUTUxFbGVtZW50SW1wbCogdWxDb25zdHJ1Y3Rvcihjb25zdCBBdG9taWNT
dHJpbmcmIHRhZ05hbWUsIERvY3VtZW50UHRyKiBkb2NQdHIsIEhUTUxGb3JtRWxlbWVudEltcGwq
IGZvcm0sIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQoreworICAgIHJldHVybiBuZXcgSFRNTFVMaXN0
RWxlbWVudEltcGwoZG9jUHRyKTsKK30KKworSFRNTEVsZW1lbnRJbXBsKiBvbENvbnN0cnVjdG9y
KGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSwgRG9jdW1lbnRQdHIqIGRvY1B0ciwgSFRNTEZv
cm1FbGVtZW50SW1wbCogZm9ybSwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCit7CisgICAgcmV0dXJu
IG5ldyBIVE1MT0xpc3RFbGVtZW50SW1wbChkb2NQdHIpOworfQorCitIVE1MRWxlbWVudEltcGwq
IGRpckNvbnN0cnVjdG9yKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSwgRG9jdW1lbnRQdHIq
IGRvY1B0ciwgSFRNTEZvcm1FbGVtZW50SW1wbCogZm9ybSwgYm9vbCBjcmVhdGVkQnlQYXJzZXIp
Cit7CisgICAgcmV0dXJuIG5ldyBIVE1MRGlyZWN0b3J5RWxlbWVudEltcGwoZG9jUHRyKTsKK30K
KworSFRNTEVsZW1lbnRJbXBsKiBtZW51Q29uc3RydWN0b3IoY29uc3QgQXRvbWljU3RyaW5nJiB0
YWdOYW1lLCBEb2N1bWVudFB0ciogZG9jUHRyLCBIVE1MRm9ybUVsZW1lbnRJbXBsKiBmb3JtLCBi
b29sIGNyZWF0ZWRCeVBhcnNlcikKK3sKKyAgICByZXR1cm4gbmV3IEhUTUxNZW51RWxlbWVudElt
cGwoZG9jUHRyKTsKK30KKworSFRNTEVsZW1lbnRJbXBsKiBsaUNvbnN0cnVjdG9yKGNvbnN0IEF0
b21pY1N0cmluZyYgdGFnTmFtZSwgRG9jdW1lbnRQdHIqIGRvY1B0ciwgSFRNTEZvcm1FbGVtZW50
SW1wbCogZm9ybSwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCit7CisgICAgcmV0dXJuIG5ldyBIVE1M
TElFbGVtZW50SW1wbChkb2NQdHIpOworfQorCitIVE1MRWxlbWVudEltcGwqIGJsb2NrcXVvdGVD
b25zdHJ1Y3Rvcihjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUsIERvY3VtZW50UHRyKiBkb2NQ
dHIsIEhUTUxGb3JtRWxlbWVudEltcGwqIGZvcm0sIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQorewor
ICAgIHJldHVybiBuZXcgSFRNTEJsb2NrcXVvdGVFbGVtZW50SW1wbChkb2NQdHIpOworfQorCitI
VE1MRWxlbWVudEltcGwqIGRpdkNvbnN0cnVjdG9yKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFt
ZSwgRG9jdW1lbnRQdHIqIGRvY1B0ciwgSFRNTEZvcm1FbGVtZW50SW1wbCogZm9ybSwgYm9vbCBj
cmVhdGVkQnlQYXJzZXIpCit7CisgICAgcmV0dXJuIG5ldyBIVE1MRGl2RWxlbWVudEltcGwoZG9j
UHRyKTsKK30KKworSFRNTEVsZW1lbnRJbXBsKiBoZWFkaW5nQ29uc3RydWN0b3IoY29uc3QgQXRv
bWljU3RyaW5nJiB0YWdOYW1lLCBEb2N1bWVudFB0ciogZG9jUHRyLCBIVE1MRm9ybUVsZW1lbnRJ
bXBsKiBmb3JtLCBib29sIGNyZWF0ZWRCeVBhcnNlcikKK3sKKyAgICByZXR1cm4gbmV3IEhUTUxI
ZWFkaW5nRWxlbWVudEltcGwoUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgdGFnTmFtZSwgSFRNTE5h
bWVzOjp4aHRtbE5hbWVzcGFjZVVSSSgpKSwgZG9jUHRyKTsKK30KKworSFRNTEVsZW1lbnRJbXBs
KiBockNvbnN0cnVjdG9yKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSwgRG9jdW1lbnRQdHIq
IGRvY1B0ciwgSFRNTEZvcm1FbGVtZW50SW1wbCogZm9ybSwgYm9vbCBjcmVhdGVkQnlQYXJzZXIp
Cit7CisgICAgcmV0dXJuIG5ldyBIVE1MSFJFbGVtZW50SW1wbChkb2NQdHIpOworfQorCitIVE1M
RWxlbWVudEltcGwqIHBhcmFncmFwaENvbnN0cnVjdG9yKGNvbnN0IEF0b21pY1N0cmluZyYgdGFn
TmFtZSwgRG9jdW1lbnRQdHIqIGRvY1B0ciwgSFRNTEZvcm1FbGVtZW50SW1wbCogZm9ybSwgYm9v
bCBjcmVhdGVkQnlQYXJzZXIpCit7CisgICAgcmV0dXJuIG5ldyBIVE1MUGFyYWdyYXBoRWxlbWVu
dEltcGwoZG9jUHRyKTsKK30KKworSFRNTEVsZW1lbnRJbXBsKiBwcmVDb25zdHJ1Y3Rvcihjb25z
dCBBdG9taWNTdHJpbmcmIHRhZ05hbWUsIERvY3VtZW50UHRyKiBkb2NQdHIsIEhUTUxGb3JtRWxl
bWVudEltcGwqIGZvcm0sIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQoreworICAgIHJldHVybiBuZXcg
SFRNTFByZUVsZW1lbnRJbXBsKFF1YWxpZmllZE5hbWUobnVsbEF0b20sIHRhZ05hbWUsIEhUTUxO
YW1lczo6eGh0bWxOYW1lc3BhY2VVUkkoKSksIGRvY1B0cik7Cit9CisKK0hUTUxFbGVtZW50SW1w
bCogYmFzZWZvbnRDb25zdHJ1Y3Rvcihjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUsIERvY3Vt
ZW50UHRyKiBkb2NQdHIsIEhUTUxGb3JtRWxlbWVudEltcGwqIGZvcm0sIGJvb2wgY3JlYXRlZEJ5
UGFyc2VyKQoreworICAgIHJldHVybiBuZXcgSFRNTEJhc2VGb250RWxlbWVudEltcGwoZG9jUHRy
KTsKK30KKworSFRNTEVsZW1lbnRJbXBsKiBmb250Q29uc3RydWN0b3IoY29uc3QgQXRvbWljU3Ry
aW5nJiB0YWdOYW1lLCBEb2N1bWVudFB0ciogZG9jUHRyLCBIVE1MRm9ybUVsZW1lbnRJbXBsKiBm
b3JtLCBib29sIGNyZWF0ZWRCeVBhcnNlcikKK3sKKyAgICByZXR1cm4gbmV3IEhUTUxGb250RWxl
bWVudEltcGwoZG9jUHRyKTsKK30KKworSFRNTEVsZW1lbnRJbXBsKiBtb2RDb25zdHJ1Y3Rvcihj
b25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUsIERvY3VtZW50UHRyKiBkb2NQdHIsIEhUTUxGb3Jt
RWxlbWVudEltcGwqIGZvcm0sIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQoreworICAgIHJldHVybiBu
ZXcgSFRNTE1vZEVsZW1lbnRJbXBsKFF1YWxpZmllZE5hbWUobnVsbEF0b20sIHRhZ05hbWUsIEhU
TUxOYW1lczo6eGh0bWxOYW1lc3BhY2VVUkkoKSksIGRvY1B0cik7Cit9CisKK0hUTUxFbGVtZW50
SW1wbCogYW5jaG9yQ29uc3RydWN0b3IoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lLCBEb2N1
bWVudFB0ciogZG9jUHRyLCBIVE1MRm9ybUVsZW1lbnRJbXBsKiBmb3JtLCBib29sIGNyZWF0ZWRC
eVBhcnNlcikKK3sKKyAgICByZXR1cm4gbmV3IEhUTUxBbmNob3JFbGVtZW50SW1wbChkb2NQdHIp
OworfQorCitIVE1MRWxlbWVudEltcGwqIGltYWdlQ29uc3RydWN0b3IoY29uc3QgQXRvbWljU3Ry
aW5nJiB0YWdOYW1lLCBEb2N1bWVudFB0ciogZG9jUHRyLCBIVE1MRm9ybUVsZW1lbnRJbXBsKiBm
b3JtLCBib29sIGNyZWF0ZWRCeVBhcnNlcikKK3sKKyAgICByZXR1cm4gbmV3IEhUTUxJbWFnZUVs
ZW1lbnRJbXBsKGRvY1B0ciwgZm9ybSk7Cit9CisKK0hUTUxFbGVtZW50SW1wbCogbWFwQ29uc3Ry
dWN0b3IoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lLCBEb2N1bWVudFB0ciogZG9jUHRyLCBI
VE1MRm9ybUVsZW1lbnRJbXBsKiBmb3JtLCBib29sIGNyZWF0ZWRCeVBhcnNlcikKK3sKKyAgICBy
ZXR1cm4gbmV3IEhUTUxNYXBFbGVtZW50SW1wbChkb2NQdHIpOworfQorCitIVE1MRWxlbWVudElt
cGwqIGFyZWFDb25zdHJ1Y3Rvcihjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUsIERvY3VtZW50
UHRyKiBkb2NQdHIsIEhUTUxGb3JtRWxlbWVudEltcGwqIGZvcm0sIGJvb2wgY3JlYXRlZEJ5UGFy
c2VyKQoreworICAgIHJldHVybiBuZXcgSFRNTEFyZWFFbGVtZW50SW1wbChkb2NQdHIpOworfQor
CitIVE1MRWxlbWVudEltcGwqIGNhbnZhc0NvbnN0cnVjdG9yKGNvbnN0IEF0b21pY1N0cmluZyYg
dGFnTmFtZSwgRG9jdW1lbnRQdHIqIGRvY1B0ciwgSFRNTEZvcm1FbGVtZW50SW1wbCogZm9ybSwg
Ym9vbCBjcmVhdGVkQnlQYXJzZXIpCit7CisgICAgcmV0dXJuIG5ldyBIVE1MQ2FudmFzRWxlbWVu
dEltcGwoZG9jUHRyKTsKK30KKworSFRNTEVsZW1lbnRJbXBsKiBhcHBsZXRDb25zdHJ1Y3Rvcihj
b25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUsIERvY3VtZW50UHRyKiBkb2NQdHIsIEhUTUxGb3Jt
RWxlbWVudEltcGwqIGZvcm0sIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQoreworICAgIHJldHVybiBu
ZXcgSFRNTEFwcGxldEVsZW1lbnRJbXBsKGRvY1B0cik7Cit9CisKK0hUTUxFbGVtZW50SW1wbCog
ZW1iZWRDb25zdHJ1Y3Rvcihjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUsIERvY3VtZW50UHRy
KiBkb2NQdHIsIEhUTUxGb3JtRWxlbWVudEltcGwqIGZvcm0sIGJvb2wgY3JlYXRlZEJ5UGFyc2Vy
KQoreworICAgIHJldHVybiBuZXcgSFRNTEVtYmVkRWxlbWVudEltcGwoZG9jUHRyKTsKK30KKwor
SFRNTEVsZW1lbnRJbXBsKiBvYmplY3RDb25zdHJ1Y3Rvcihjb25zdCBBdG9taWNTdHJpbmcmIHRh
Z05hbWUsIERvY3VtZW50UHRyKiBkb2NQdHIsIEhUTUxGb3JtRWxlbWVudEltcGwqIGZvcm0sIGJv
b2wgY3JlYXRlZEJ5UGFyc2VyKQoreworICAgIHJldHVybiBuZXcgSFRNTE9iamVjdEVsZW1lbnRJ
bXBsKGRvY1B0cik7Cit9CisKK0hUTUxFbGVtZW50SW1wbCogcGFyYW1Db25zdHJ1Y3Rvcihjb25z
dCBBdG9taWNTdHJpbmcmIHRhZ05hbWUsIERvY3VtZW50UHRyKiBkb2NQdHIsIEhUTUxGb3JtRWxl
bWVudEltcGwqIGZvcm0sIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQoreworICAgIHJldHVybiBuZXcg
SFRNTFBhcmFtRWxlbWVudEltcGwoZG9jUHRyKTsKK30KKworSFRNTEVsZW1lbnRJbXBsKiBzY3Jp
cHRDb25zdHJ1Y3Rvcihjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUsIERvY3VtZW50UHRyKiBk
b2NQdHIsIEhUTUxGb3JtRWxlbWVudEltcGwqIGZvcm0sIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQor
eworICAgIEhUTUxTY3JpcHRFbGVtZW50SW1wbCogc2NyaXB0ID0gbmV3IEhUTUxTY3JpcHRFbGVt
ZW50SW1wbChkb2NQdHIpOworICAgIHNjcmlwdC0+c2V0Q3JlYXRlZEJ5UGFyc2VyKGNyZWF0ZWRC
eVBhcnNlcik7CisgICAgcmV0dXJuIHNjcmlwdDsKK30KKworSFRNTEVsZW1lbnRJbXBsKiB0YWJs
ZUNvbnN0cnVjdG9yKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSwgRG9jdW1lbnRQdHIqIGRv
Y1B0ciwgSFRNTEZvcm1FbGVtZW50SW1wbCogZm9ybSwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCit7
CisgICAgcmV0dXJuIG5ldyBIVE1MVGFibGVFbGVtZW50SW1wbChkb2NQdHIpOworfQorCitIVE1M
RWxlbWVudEltcGwqIHRhYmxlQ2FwdGlvbkNvbnN0cnVjdG9yKGNvbnN0IEF0b21pY1N0cmluZyYg
dGFnTmFtZSwgRG9jdW1lbnRQdHIqIGRvY1B0ciwgSFRNTEZvcm1FbGVtZW50SW1wbCogZm9ybSwg
Ym9vbCBjcmVhdGVkQnlQYXJzZXIpCit7CisgICAgcmV0dXJuIG5ldyBIVE1MVGFibGVDYXB0aW9u
RWxlbWVudEltcGwoZG9jUHRyKTsKK30KKworSFRNTEVsZW1lbnRJbXBsKiB0YWJsZUNvbENvbnN0
cnVjdG9yKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSwgRG9jdW1lbnRQdHIqIGRvY1B0ciwg
SFRNTEZvcm1FbGVtZW50SW1wbCogZm9ybSwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCit7CisgICAg
cmV0dXJuIG5ldyBIVE1MVGFibGVDb2xFbGVtZW50SW1wbChRdWFsaWZpZWROYW1lKG51bGxBdG9t
LCB0YWdOYW1lLCBIVE1MTmFtZXM6OnhodG1sTmFtZXNwYWNlVVJJKCkpLCBkb2NQdHIpOworfQor
CitIVE1MRWxlbWVudEltcGwqIHRhYmxlUm93Q29uc3RydWN0b3IoY29uc3QgQXRvbWljU3RyaW5n
JiB0YWdOYW1lLCBEb2N1bWVudFB0ciogZG9jUHRyLCBIVE1MRm9ybUVsZW1lbnRJbXBsKiBmb3Jt
LCBib29sIGNyZWF0ZWRCeVBhcnNlcikKK3sKKyAgICByZXR1cm4gbmV3IEhUTUxUYWJsZVJvd0Vs
ZW1lbnRJbXBsKGRvY1B0cik7Cit9CisKK0hUTUxFbGVtZW50SW1wbCogdGFibGVDZWxsQ29uc3Ry
dWN0b3IoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lLCBEb2N1bWVudFB0ciogZG9jUHRyLCBI
VE1MRm9ybUVsZW1lbnRJbXBsKiBmb3JtLCBib29sIGNyZWF0ZWRCeVBhcnNlcikKK3sKKyAgICBy
ZXR1cm4gbmV3IEhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbChRdWFsaWZpZWROYW1lKG51bGxBdG9t
LCB0YWdOYW1lLCBIVE1MTmFtZXM6OnhodG1sTmFtZXNwYWNlVVJJKCkpLCBkb2NQdHIpOworfQor
CitIVE1MRWxlbWVudEltcGwqIHRhYmxlU2VjdGlvbkNvbnN0cnVjdG9yKGNvbnN0IEF0b21pY1N0
cmluZyYgdGFnTmFtZSwgRG9jdW1lbnRQdHIqIGRvY1B0ciwgSFRNTEZvcm1FbGVtZW50SW1wbCog
Zm9ybSwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCit7CisgICAgcmV0dXJuIG5ldyBIVE1MVGFibGVT
ZWN0aW9uRWxlbWVudEltcGwoUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgdGFnTmFtZSwgSFRNTE5h
bWVzOjp4aHRtbE5hbWVzcGFjZVVSSSgpKSwgZG9jUHRyLCBmYWxzZSk7Cit9CisKK0hUTUxFbGVt
ZW50SW1wbCogYnJDb25zdHJ1Y3Rvcihjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUsIERvY3Vt
ZW50UHRyKiBkb2NQdHIsIEhUTUxGb3JtRWxlbWVudEltcGwqIGZvcm0sIGJvb2wgY3JlYXRlZEJ5
UGFyc2VyKQoreworICAgIHJldHVybiBuZXcgSFRNTEJSRWxlbWVudEltcGwoZG9jUHRyKTsKK30K
KworSFRNTEVsZW1lbnRJbXBsKiBxdW90ZUNvbnN0cnVjdG9yKGNvbnN0IEF0b21pY1N0cmluZyYg
dGFnTmFtZSwgRG9jdW1lbnRQdHIqIGRvY1B0ciwgSFRNTEZvcm1FbGVtZW50SW1wbCogZm9ybSwg
Ym9vbCBjcmVhdGVkQnlQYXJzZXIpCit7CisgICAgcmV0dXJuIG5ldyBIVE1MUXVvdGVFbGVtZW50
SW1wbChkb2NQdHIpOworfQorCitIVE1MRWxlbWVudEltcGwqIG1hcnF1ZWVDb25zdHJ1Y3Rvcihj
b25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUsIERvY3VtZW50UHRyKiBkb2NQdHIsIEhUTUxGb3Jt
RWxlbWVudEltcGwqIGZvcm0sIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQoreworICAgIHJldHVybiBu
ZXcgSFRNTE1hcnF1ZWVFbGVtZW50SW1wbChkb2NQdHIpOworfQorCitIVE1MRWxlbWVudEltcGwq
IEhUTUxFbGVtZW50RmFjdG9yeTo6Y3JlYXRlSFRNTEVsZW1lbnQoY29uc3QgQXRvbWljU3RyaW5n
JiB0YWdOYW1lLCBEb2N1bWVudEltcGwqIGRvYywgSFRNTEZvcm1FbGVtZW50SW1wbCogZm9ybSwg
Ym9vbCBjcmVhdGVkQnlQYXJzZXIpCit7CisgICAgaWYgKCFkb2MpCisgICAgICAgIHJldHVybiAw
OyAvLyBEb24ndCBhbGxvdyBlbGVtZW50cyB0byBldmVyIGJlIG1hZGUgd2l0aG91dCBoYXZpbmcg
YSBkb2MuCisKKyAgICBEb2N1bWVudFB0ciogZG9jUHRyID0gZG9jLT5kb2NQdHIoKTsKKyAgICBp
ZiAoIWdGdW5jdGlvbk1hcCkgeworICAgICAgICAvLyBDcmVhdGUgdGhlIHRhYmxlLgorICAgICAg
ICBnRnVuY3Rpb25NYXAgPSBuZXcgRnVuY3Rpb25NYXA7CisgICAgICAgIAorICAgICAgICAvLyBQ
b3B1bGF0ZSBpdCB3aXRoIGNvbnN0cnVjdG9yIGZ1bmN0aW9ucy4KKyAgICAgICAgZ0Z1bmN0aW9u
TWFwLT5pbnNlcnQoSFRNTE5hbWVzOjpodG1sKCkubG9jYWxOYW1lUHRyKCksICh2b2lkKikmaHRt
bENvbnN0cnVjdG9yKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLT5pbnNlcnQoSFRNTE5hbWVzOjpo
ZWFkKCkubG9jYWxOYW1lUHRyKCksICh2b2lkKikmaGVhZENvbnN0cnVjdG9yKTsKKyAgICAgICAg
Z0Z1bmN0aW9uTWFwLT5pbnNlcnQoSFRNTE5hbWVzOjpib2R5KCkubG9jYWxOYW1lUHRyKCksICh2
b2lkKikmYm9keUNvbnN0cnVjdG9yKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLT5pbnNlcnQoSFRN
TE5hbWVzOjpiYXNlKCkubG9jYWxOYW1lUHRyKCksICh2b2lkKikmYmFzZUNvbnN0cnVjdG9yKTsK
KyAgICAgICAgZ0Z1bmN0aW9uTWFwLT5pbnNlcnQoSFRNTE5hbWVzOjpsaW5rKCkubG9jYWxOYW1l
UHRyKCksICh2b2lkKikmbGlua0NvbnN0cnVjdG9yKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLT5p
bnNlcnQoSFRNTE5hbWVzOjptZXRhKCkubG9jYWxOYW1lUHRyKCksICh2b2lkKikmbWV0YUNvbnN0
cnVjdG9yKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLT5pbnNlcnQoSFRNTE5hbWVzOjpzdHlsZSgp
LmxvY2FsTmFtZVB0cigpLCAodm9pZCopJnN0eWxlQ29uc3RydWN0b3IpOworICAgICAgICBnRnVu
Y3Rpb25NYXAtPmluc2VydChIVE1MTmFtZXM6OnRpdGxlKCkubG9jYWxOYW1lUHRyKCksICh2b2lk
KikmdGl0bGVDb25zdHJ1Y3Rvcik7CisgICAgICAgIGdGdW5jdGlvbk1hcC0+aW5zZXJ0KEhUTUxO
YW1lczo6ZnJhbWUoKS5sb2NhbE5hbWVQdHIoKSwgKHZvaWQqKSZmcmFtZUNvbnN0cnVjdG9yKTsK
KyAgICAgICAgZ0Z1bmN0aW9uTWFwLT5pbnNlcnQoSFRNTE5hbWVzOjpmcmFtZXNldCgpLmxvY2Fs
TmFtZVB0cigpLCAodm9pZCopJmZyYW1lc2V0Q29uc3RydWN0b3IpOworICAgICAgICBnRnVuY3Rp
b25NYXAtPmluc2VydChIVE1MTmFtZXM6OmlmcmFtZSgpLmxvY2FsTmFtZVB0cigpLCAodm9pZCop
JmlmcmFtZUNvbnN0cnVjdG9yKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLT5pbnNlcnQoSFRNTE5h
bWVzOjpmb3JtKCkubG9jYWxOYW1lUHRyKCksICh2b2lkKikmZm9ybUNvbnN0cnVjdG9yKTsKKyAg
ICAgICAgZ0Z1bmN0aW9uTWFwLT5pbnNlcnQoSFRNTE5hbWVzOjpidXR0b24oKS5sb2NhbE5hbWVQ
dHIoKSwgKHZvaWQqKSZidXR0b25Db25zdHJ1Y3Rvcik7CisgICAgICAgIGdGdW5jdGlvbk1hcC0+
aW5zZXJ0KEhUTUxOYW1lczo6aW5wdXQoKS5sb2NhbE5hbWVQdHIoKSwgKHZvaWQqKSZpbnB1dENv
bnN0cnVjdG9yKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLT5pbnNlcnQoSFRNTE5hbWVzOjppc2lu
ZGV4KCkubG9jYWxOYW1lUHRyKCksICh2b2lkKikmaXNpbmRleENvbnN0cnVjdG9yKTsKKyAgICAg
ICAgZ0Z1bmN0aW9uTWFwLT5pbnNlcnQoSFRNTE5hbWVzOjpmaWVsZHNldCgpLmxvY2FsTmFtZVB0
cigpLCAodm9pZCopJmZpZWxkc2V0Q29uc3RydWN0b3IpOworICAgICAgICBnRnVuY3Rpb25NYXAt
Pmluc2VydChIVE1MTmFtZXM6OmxhYmVsKCkubG9jYWxOYW1lUHRyKCksICh2b2lkKikmbGFiZWxD
b25zdHJ1Y3Rvcik7CisgICAgICAgIGdGdW5jdGlvbk1hcC0+aW5zZXJ0KEhUTUxOYW1lczo6bGVn
ZW5kKCkubG9jYWxOYW1lUHRyKCksICh2b2lkKikmbGVnZW5kQ29uc3RydWN0b3IpOworICAgICAg
ICBnRnVuY3Rpb25NYXAtPmluc2VydChIVE1MTmFtZXM6Om9wdGdyb3VwKCkubG9jYWxOYW1lUHRy
KCksICh2b2lkKikmb3B0Z3JvdXBDb25zdHJ1Y3Rvcik7CisgICAgICAgIGdGdW5jdGlvbk1hcC0+
aW5zZXJ0KEhUTUxOYW1lczo6b3B0aW9uKCkubG9jYWxOYW1lUHRyKCksICh2b2lkKikmb3B0aW9u
Q29uc3RydWN0b3IpOworICAgICAgICBnRnVuY3Rpb25NYXAtPmluc2VydChIVE1MTmFtZXM6OnNl
bGVjdCgpLmxvY2FsTmFtZVB0cigpLCAodm9pZCopJnNlbGVjdENvbnN0cnVjdG9yKTsKKyAgICAg
ICAgZ0Z1bmN0aW9uTWFwLT5pbnNlcnQoSFRNTE5hbWVzOjp0ZXh0YXJlYSgpLmxvY2FsTmFtZVB0
cigpLCAodm9pZCopJnRleHRhcmVhQ29uc3RydWN0b3IpOworICAgICAgICBnRnVuY3Rpb25NYXAt
Pmluc2VydChIVE1MTmFtZXM6OmRsKCkubG9jYWxOYW1lUHRyKCksICh2b2lkKikmZGxDb25zdHJ1
Y3Rvcik7CisgICAgICAgIGdGdW5jdGlvbk1hcC0+aW5zZXJ0KEhUTUxOYW1lczo6b2woKS5sb2Nh
bE5hbWVQdHIoKSwgKHZvaWQqKSZvbENvbnN0cnVjdG9yKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFw
LT5pbnNlcnQoSFRNTE5hbWVzOjp1bCgpLmxvY2FsTmFtZVB0cigpLCAodm9pZCopJnVsQ29uc3Ry
dWN0b3IpOworICAgICAgICBnRnVuY3Rpb25NYXAtPmluc2VydChIVE1MTmFtZXM6OmRpcigpLmxv
Y2FsTmFtZVB0cigpLCAodm9pZCopJmRpckNvbnN0cnVjdG9yKTsKKyAgICAgICAgZ0Z1bmN0aW9u
TWFwLT5pbnNlcnQoSFRNTE5hbWVzOjptZW51KCkubG9jYWxOYW1lUHRyKCksICh2b2lkKikmbWVu
dUNvbnN0cnVjdG9yKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLT5pbnNlcnQoSFRNTE5hbWVzOjps
aSgpLmxvY2FsTmFtZVB0cigpLCAodm9pZCopJmxpQ29uc3RydWN0b3IpOworICAgICAgICBnRnVu
Y3Rpb25NYXAtPmluc2VydChIVE1MTmFtZXM6OmJsb2NrcXVvdGUoKS5sb2NhbE5hbWVQdHIoKSwg
KHZvaWQqKSZibG9ja3F1b3RlQ29uc3RydWN0b3IpOworICAgICAgICBnRnVuY3Rpb25NYXAtPmlu
c2VydChIVE1MTmFtZXM6OmRpdigpLmxvY2FsTmFtZVB0cigpLCAodm9pZCopJmRpdkNvbnN0cnVj
dG9yKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLT5pbnNlcnQoSFRNTE5hbWVzOjpoMSgpLmxvY2Fs
TmFtZVB0cigpLCAodm9pZCopJmhlYWRpbmdDb25zdHJ1Y3Rvcik7CisgICAgICAgIGdGdW5jdGlv
bk1hcC0+aW5zZXJ0KEhUTUxOYW1lczo6aDIoKS5sb2NhbE5hbWVQdHIoKSwgKHZvaWQqKSZoZWFk
aW5nQ29uc3RydWN0b3IpOworICAgICAgICBnRnVuY3Rpb25NYXAtPmluc2VydChIVE1MTmFtZXM6
OmgzKCkubG9jYWxOYW1lUHRyKCksICh2b2lkKikmaGVhZGluZ0NvbnN0cnVjdG9yKTsKKyAgICAg
ICAgZ0Z1bmN0aW9uTWFwLT5pbnNlcnQoSFRNTE5hbWVzOjpoNCgpLmxvY2FsTmFtZVB0cigpLCAo
dm9pZCopJmhlYWRpbmdDb25zdHJ1Y3Rvcik7CisgICAgICAgIGdGdW5jdGlvbk1hcC0+aW5zZXJ0
KEhUTUxOYW1lczo6aDUoKS5sb2NhbE5hbWVQdHIoKSwgKHZvaWQqKSZoZWFkaW5nQ29uc3RydWN0
b3IpOworICAgICAgICBnRnVuY3Rpb25NYXAtPmluc2VydChIVE1MTmFtZXM6Omg2KCkubG9jYWxO
YW1lUHRyKCksICh2b2lkKikmaGVhZGluZ0NvbnN0cnVjdG9yKTsKKyAgICAgICAgZ0Z1bmN0aW9u
TWFwLT5pbnNlcnQoSFRNTE5hbWVzOjpocigpLmxvY2FsTmFtZVB0cigpLCAodm9pZCopJmhyQ29u
c3RydWN0b3IpOworICAgICAgICBnRnVuY3Rpb25NYXAtPmluc2VydChIVE1MTmFtZXM6OnAoKS5s
b2NhbE5hbWVQdHIoKSwgKHZvaWQqKSZwYXJhZ3JhcGhDb25zdHJ1Y3Rvcik7CisgICAgICAgIGdG
dW5jdGlvbk1hcC0+aW5zZXJ0KEhUTUxOYW1lczo6cHJlKCkubG9jYWxOYW1lUHRyKCksICh2b2lk
KikmcHJlQ29uc3RydWN0b3IpOworICAgICAgICBnRnVuY3Rpb25NYXAtPmluc2VydChIVE1MTmFt
ZXM6OnhtcCgpLmxvY2FsTmFtZVB0cigpLCAodm9pZCopJnByZUNvbnN0cnVjdG9yKTsKKyAgICAg
ICAgZ0Z1bmN0aW9uTWFwLT5pbnNlcnQoSFRNTE5hbWVzOjpiYXNlZm9udCgpLmxvY2FsTmFtZVB0
cigpLCAodm9pZCopJmJhc2Vmb250Q29uc3RydWN0b3IpOworICAgICAgICBnRnVuY3Rpb25NYXAt
Pmluc2VydChIVE1MTmFtZXM6OmZvbnQoKS5sb2NhbE5hbWVQdHIoKSwgKHZvaWQqKSZmb250Q29u
c3RydWN0b3IpOworICAgICAgICBnRnVuY3Rpb25NYXAtPmluc2VydChIVE1MTmFtZXM6OmRlbCgp
LmxvY2FsTmFtZVB0cigpLCAodm9pZCopJm1vZENvbnN0cnVjdG9yKTsKKyAgICAgICAgZ0Z1bmN0
aW9uTWFwLT5pbnNlcnQoSFRNTE5hbWVzOjppbnMoKS5sb2NhbE5hbWVQdHIoKSwgKHZvaWQqKSZt
b2RDb25zdHJ1Y3Rvcik7CisgICAgICAgIGdGdW5jdGlvbk1hcC0+aW5zZXJ0KEhUTUxOYW1lczo6
YSgpLmxvY2FsTmFtZVB0cigpLCAodm9pZCopJmFuY2hvckNvbnN0cnVjdG9yKTsKKyAgICAgICAg
Z0Z1bmN0aW9uTWFwLT5pbnNlcnQoSFRNTE5hbWVzOjppbWcoKS5sb2NhbE5hbWVQdHIoKSwgKHZv
aWQqKSZpbWFnZUNvbnN0cnVjdG9yKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLT5pbnNlcnQoSFRN
TE5hbWVzOjptYXAoKS5sb2NhbE5hbWVQdHIoKSwgKHZvaWQqKSZtYXBDb25zdHJ1Y3Rvcik7Cisg
ICAgICAgIGdGdW5jdGlvbk1hcC0+aW5zZXJ0KEhUTUxOYW1lczo6YXJlYSgpLmxvY2FsTmFtZVB0
cigpLCAodm9pZCopJmFyZWFDb25zdHJ1Y3Rvcik7CisgICAgICAgIGdGdW5jdGlvbk1hcC0+aW5z
ZXJ0KEhUTUxOYW1lczo6Y2FudmFzKCkubG9jYWxOYW1lUHRyKCksICh2b2lkKikmY2FudmFzQ29u
c3RydWN0b3IpOworICAgICAgICBnRnVuY3Rpb25NYXAtPmluc2VydChIVE1MTmFtZXM6OmFwcGxl
dCgpLmxvY2FsTmFtZVB0cigpLCAodm9pZCopJmFwcGxldENvbnN0cnVjdG9yKTsKKyAgICAgICAg
Z0Z1bmN0aW9uTWFwLT5pbnNlcnQoSFRNTE5hbWVzOjplbWJlZCgpLmxvY2FsTmFtZVB0cigpLCAo
dm9pZCopJmVtYmVkQ29uc3RydWN0b3IpOworICAgICAgICBnRnVuY3Rpb25NYXAtPmluc2VydChI
VE1MTmFtZXM6Om9iamVjdCgpLmxvY2FsTmFtZVB0cigpLCAodm9pZCopJm9iamVjdENvbnN0cnVj
dG9yKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLT5pbnNlcnQoSFRNTE5hbWVzOjpwYXJhbSgpLmxv
Y2FsTmFtZVB0cigpLCAodm9pZCopJnBhcmFtQ29uc3RydWN0b3IpOworICAgICAgICBnRnVuY3Rp
b25NYXAtPmluc2VydChIVE1MTmFtZXM6OnNjcmlwdCgpLmxvY2FsTmFtZVB0cigpLCAodm9pZCop
JnNjcmlwdENvbnN0cnVjdG9yKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLT5pbnNlcnQoSFRNTE5h
bWVzOjp0YWJsZSgpLmxvY2FsTmFtZVB0cigpLCAodm9pZCopJnRhYmxlQ29uc3RydWN0b3IpOwor
ICAgICAgICBnRnVuY3Rpb25NYXAtPmluc2VydChIVE1MTmFtZXM6OmNhcHRpb24oKS5sb2NhbE5h
bWVQdHIoKSwgKHZvaWQqKSZ0YWJsZUNhcHRpb25Db25zdHJ1Y3Rvcik7CisgICAgICAgIGdGdW5j
dGlvbk1hcC0+aW5zZXJ0KEhUTUxOYW1lczo6Y29sZ3JvdXAoKS5sb2NhbE5hbWVQdHIoKSwgKHZv
aWQqKSZ0YWJsZUNvbENvbnN0cnVjdG9yKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLT5pbnNlcnQo
SFRNTE5hbWVzOjpjb2woKS5sb2NhbE5hbWVQdHIoKSwgKHZvaWQqKSZ0YWJsZUNvbENvbnN0cnVj
dG9yKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLT5pbnNlcnQoSFRNTE5hbWVzOjp0cigpLmxvY2Fs
TmFtZVB0cigpLCAodm9pZCopJnRhYmxlUm93Q29uc3RydWN0b3IpOworICAgICAgICBnRnVuY3Rp
b25NYXAtPmluc2VydChIVE1MTmFtZXM6OnRkKCkubG9jYWxOYW1lUHRyKCksICh2b2lkKikmdGFi
bGVDZWxsQ29uc3RydWN0b3IpOworICAgICAgICBnRnVuY3Rpb25NYXAtPmluc2VydChIVE1MTmFt
ZXM6OnRoKCkubG9jYWxOYW1lUHRyKCksICh2b2lkKikmdGFibGVDZWxsQ29uc3RydWN0b3IpOwor
ICAgICAgICBnRnVuY3Rpb25NYXAtPmluc2VydChIVE1MTmFtZXM6OnRoZWFkKCkubG9jYWxOYW1l
UHRyKCksICh2b2lkKikmdGFibGVTZWN0aW9uQ29uc3RydWN0b3IpOworICAgICAgICBnRnVuY3Rp
b25NYXAtPmluc2VydChIVE1MTmFtZXM6OnRib2R5KCkubG9jYWxOYW1lUHRyKCksICh2b2lkKikm
dGFibGVTZWN0aW9uQ29uc3RydWN0b3IpOworICAgICAgICBnRnVuY3Rpb25NYXAtPmluc2VydChI
VE1MTmFtZXM6OnRmb290KCkubG9jYWxOYW1lUHRyKCksICh2b2lkKikmdGFibGVTZWN0aW9uQ29u
c3RydWN0b3IpOworICAgICAgICBnRnVuY3Rpb25NYXAtPmluc2VydChIVE1MTmFtZXM6OmJyKCku
bG9jYWxOYW1lUHRyKCksICh2b2lkKikmYnJDb25zdHJ1Y3Rvcik7CisgICAgICAgIGdGdW5jdGlv
bk1hcC0+aW5zZXJ0KEhUTUxOYW1lczo6cSgpLmxvY2FsTmFtZVB0cigpLCAodm9pZCopJnF1b3Rl
Q29uc3RydWN0b3IpOworICAgICAgICBnRnVuY3Rpb25NYXAtPmluc2VydChIVE1MTmFtZXM6Om1h
cnF1ZWUoKS5sb2NhbE5hbWVQdHIoKSwgKHZvaWQqKSZtYXJxdWVlQ29uc3RydWN0b3IpOworICAg
IH0KKyAgICAKKyAgICB2b2lkKiByZXN1bHQgPSBnRnVuY3Rpb25NYXAtPmdldCh0YWdOYW1lLmlt
cGxlbWVudGF0aW9uKCkpOworICAgIGlmIChyZXN1bHQpIHsKKyAgICAgICAgQ29uc3RydWN0b3JG
dW5jIGZ1bmMgPSAoQ29uc3RydWN0b3JGdW5jKXJlc3VsdDsKKyAgICAgICAgcmV0dXJuIChmdW5j
KSh0YWdOYW1lLCBkb2NQdHIsIGZvcm0sIGNyZWF0ZWRCeVBhcnNlcik7CisgICAgfQorIAorICAg
IC8vIGVsZW1lbnRzIHdpdGggbm8gc3BlY2lhbCByZXByZXNlbnRhdGlvbiBpbiB0aGUgRE9NCisg
ICAgcmV0dXJuIG5ldyBIVE1MRWxlbWVudEltcGwoUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgdGFn
TmFtZSwgSFRNTE5hbWVzOjp4aHRtbE5hbWVzcGFjZVVSSSgpKSwgZG9jUHRyKTsKKworfQorCit9
CisKSW5kZXg6IGtodG1sL2h0bWwvaHRtbGZhY3RvcnkuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiBr
aHRtbC9odG1sL2h0bWxmYWN0b3J5LmgKZGlmZiAtTiBraHRtbC9odG1sL2h0bWxmYWN0b3J5LmgK
LS0tIC9kZXYvbnVsbAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyBraHRtbC9odG1sL2h0
bWxmYWN0b3J5LmgJOCBKdWwgMjAwNSAwNTo1NzoyNiAtMDAwMApAQCAtMCwwICsxLDQ2IEBACisv
KgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEhUTUwgRE9NIGltcGxlbWVudGF0aW9uIGZv
ciBLREUuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0g
U3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICovCisjaWZu
ZGVmIEhUTUxFTEVNRU5URkFDVE9SWV9ICisjZGVmaW5lIEhUTUxFTEVNRU5URkFDVE9SWV9ICisK
K25hbWVzcGFjZSBET00KK3sKKworY2xhc3MgRWxlbWVudEltcGw7CitjbGFzcyBEb2N1bWVudElt
cGw7CitjbGFzcyBIVE1MRWxlbWVudEltcGw7CitjbGFzcyBIVE1MRm9ybUVsZW1lbnRJbXBsOwor
Y2xhc3MgUXVhbGlmaWVkTmFtZTsKK2NsYXNzIEF0b21pY1N0cmluZzsKKworLy8gVGhlIGlkZWEg
YmVoaW5kIHRoaXMgY2xhc3MgaXMgdGhhdCB0aGVyZSB3aWxsIGV2ZW50dWFsbHkgYmUgYSBtYXBw
aW5nIGZyb20gbmFtZXNwYWNlIFVSSXMgdG8gRWxlbWVudEZhY3RvcmllcyB0aGF0IGNhbiBkaXNw
ZW5zZQorLy8gZWxlbWVudHMuICBJbiBhIGNvbXBvdW5kIGRvY3VtZW50IHdvcmxkLCB0aGUgZ2Vu
ZXJpYyBjcmVhdGVFbGVtZW50IGZ1bmN0aW9uICh3aWxsIGVuZCB1cCBiZWluZyB2aXJ0dWFsKSB3
aWxsIGJlIGNhbGxlZC4KK2NsYXNzIEhUTUxFbGVtZW50RmFjdG9yeQoreworcHVibGljOgorICAg
IEVsZW1lbnRJbXBsKiBjcmVhdGVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHFOYW1lLCBE
b2N1bWVudEltcGwqIGRvYywgYm9vbCBjcmVhdGVkQnlQYXJzZXIgPSB0cnVlKTsKKyAgICBzdGF0
aWMgSFRNTEVsZW1lbnRJbXBsKiBjcmVhdGVIVE1MRWxlbWVudChjb25zdCBBdG9taWNTdHJpbmcm
IHRhZ05hbWUsIERvY3VtZW50SW1wbCogZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsKiBmb3JtID0g
MCwgYm9vbCBjcmVhdGVkQnlQYXJzZXIgPSB0cnVlKTsKK307CisKK30KKworI2VuZGlmCkluZGV4
OiBraHRtbC9odG1sL2h0bWxuYW1lcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sbmFtZXMuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjIKZGlmZiAtdSAtcCAtcjEuMiBraHRtbC9odG1sL2h0bWxuYW1lcy5jcHAKLS0tIGtodG1sL2h0
bWwvaHRtbG5hbWVzLmNwcAkxNiBKdW4gMjAwNSAyMDozMzo1NyAtMDAwMAkxLjIKKysrIGtodG1s
L2h0bWwvaHRtbG5hbWVzLmNwcAk4IEp1bCAyMDA1IDA1OjU3OjI3IC0wMDAwCkBAIC0yMCw1NTEg
KzIwLDIzNSBAQAogICoKICAqLwogCisjZGVmaW5lIEtIVE1MX0hUTUxOQU1FU19ISURFX0dMT0JB
TFMgMQorCisjaW5jbHVkZSA8cXB0cmRpY3QuaD4KICNpbmNsdWRlICJodG1sbmFtZXMuaCIKICNp
bmNsdWRlICJkb21fcW5hbWUuaCIKIAogbmFtZXNwYWNlIERPTSB7CiAKLWNvbnN0IEF0b21pY1N0
cmluZyYgSFRNTE5hbWVzOjp4aHRtbE5hbWVzcGFjZVVSSSgpCi17Ci0gICAgc3RhdGljIEF0b21p
Y1N0cmluZyB4aHRtbE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIik7Ci0gICAgcmV0
dXJuIHhodG1sTlM7Ci19Ci0KLQotLy8gVGFnIG5hbWVzLgotY29uc3QgUXVhbGlmaWVkTmFtZSYg
SFRNTE5hbWVzOjphKCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBhKG51bGxBdG9tLCAi
YSIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiBhOwotfQotCi1jb25zdCBRdWFs
aWZpZWROYW1lJiBIVE1MTmFtZXM6OmFkZHJlc3MoKQotewotICAgIHN0YXRpYyBRdWFsaWZpZWRO
YW1lIGFkZHJlc3MobnVsbEF0b20sICJhZGRyZXNzIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0g
ICAgcmV0dXJuIGFkZHJlc3M7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6
YXBwbGV0KCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBhcHBsZXQobnVsbEF0b20sICJh
cHBsZXQiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4gYXBwbGV0OwotfQotCi1j
b25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OmFyZWEoKQotewotICAgIHN0YXRpYyBRdWFs
aWZpZWROYW1lIGFyZWEobnVsbEF0b20sICJhcmVhIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0g
ICAgcmV0dXJuIGFyZWE7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6Yigp
Ci17Ci0gICAgc3RhdGljIFF1YWxpZmllZE5hbWUgYihudWxsQXRvbSwgImIiLCB4aHRtbE5hbWVz
cGFjZVVSSSgpKTsKLSAgICByZXR1cm4gYjsKLX0KLQotY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRN
TE5hbWVzOjpiYXNlKCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBiYXNlKG51bGxBdG9t
LCAiYmFzZSIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiBiYXNlOwotfQotCi1j
b25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OmJhc2Vmb250KCkKLXsKLSAgICBzdGF0aWMg
UXVhbGlmaWVkTmFtZSBiYXNlZm9udChudWxsQXRvbSwgImJhc2Vmb250IiwgeGh0bWxOYW1lc3Bh
Y2VVUkkoKSk7Ci0gICAgcmV0dXJuIGJhc2Vmb250OwotfQotCi1jb25zdCBRdWFsaWZpZWROYW1l
JiBIVE1MTmFtZXM6OmJpZygpCi17Ci0gICAgc3RhdGljIFF1YWxpZmllZE5hbWUgYmlnKG51bGxB
dG9tLCAiYmlnIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJuIGJpZzsKLX0KLQot
Y29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpibG9ja3F1b3RlKCkKLXsKLSAgICBzdGF0
aWMgUXVhbGlmaWVkTmFtZSBibG9ja3F1b3RlKG51bGxBdG9tLCAiYmxvY2txdW90ZSIsIHhodG1s
TmFtZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiBibG9ja3F1b3RlOwotfQotCi1jb25zdCBRdWFs
aWZpZWROYW1lJiBIVE1MTmFtZXM6OmJvZHkoKQotewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1l
IGJvZHkobnVsbEF0b20sICJib2R5IiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJu
IGJvZHk7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6YnIoKQotewotICAg
IHN0YXRpYyBRdWFsaWZpZWROYW1lIGJyKG51bGxBdG9tLCAiYnIiLCB4aHRtbE5hbWVzcGFjZVVS
SSgpKTsKLSAgICByZXR1cm4gYnI7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1l
czo6YnV0dG9uKCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBidXR0b24obnVsbEF0b20s
ICJidXR0b24iLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4gYnV0dG9uOwotfQot
Ci1jb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OmNhbnZhcygpCi17Ci0gICAgc3RhdGlj
IFF1YWxpZmllZE5hbWUgY2FudmFzKG51bGxBdG9tLCAiY2FudmFzIiwgeGh0bWxOYW1lc3BhY2VV
UkkoKSk7Ci0gICAgcmV0dXJuIGNhbnZhczsKLX0KLQotY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRN
TE5hbWVzOjpjYXB0aW9uKCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBjYXB0aW9uKG51
bGxBdG9tLCAiY2FwdGlvbiIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiBjYXB0
aW9uOwotfQotCi1jb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OmNlbnRlcigpCi17Ci0g
ICAgc3RhdGljIFF1YWxpZmllZE5hbWUgY2VudGVyKG51bGxBdG9tLCAiY2VudGVyIiwgeGh0bWxO
YW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJuIGNlbnRlcjsKLX0KLQotY29uc3QgUXVhbGlmaWVk
TmFtZSYgSFRNTE5hbWVzOjpjb2RlKCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBjb2Rl
KG51bGxBdG9tLCAiY29kZSIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiBjb2Rl
OwotfQotCi1jb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OmNvbCgpCi17Ci0gICAgc3Rh
dGljIFF1YWxpZmllZE5hbWUgY29sKG51bGxBdG9tLCAiY29sIiwgeGh0bWxOYW1lc3BhY2VVUkko
KSk7Ci0gICAgcmV0dXJuIGNvbDsKLX0KK3ZvaWQqIHhodG1sTmFtZXNwYWNlVVJJQXRvbVsoc2l6
ZW9mKEF0b21pY1N0cmluZykgKyBzaXplb2Yodm9pZCopIC0gMSkgLyBzaXplb2Yodm9pZCopXTsK
IAotY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpjb2xncm91cCgpCi17Ci0gICAgc3Rh
dGljIFF1YWxpZmllZE5hbWUgY29sZ3JvdXAobnVsbEF0b20sICJjb2xncm91cCIsIHhodG1sTmFt
ZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiBjb2xncm91cDsKLX0KLQotY29uc3QgUXVhbGlmaWVk
TmFtZSYgSFRNTE5hbWVzOjpkZCgpCi17Ci0gICAgc3RhdGljIFF1YWxpZmllZE5hbWUgZGQobnVs
bEF0b20sICJkZCIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiBkZDsKLX0KLQot
Y29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpkZWwoKQotewotICAgIHN0YXRpYyBRdWFs
aWZpZWROYW1lIGRlbChudWxsQXRvbSwgImRlbCIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAg
IHJldHVybiBkZWw7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6ZGZuKCkK
LXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBkZm4obnVsbEF0b20sICJkZm4iLCB4aHRtbE5h
bWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4gZGZuOwotfQotCi1jb25zdCBRdWFsaWZpZWROYW1l
JiBIVE1MTmFtZXM6OmRpcigpCi17Ci0gICAgc3RhdGljIFF1YWxpZmllZE5hbWUgZGlyKG51bGxB
dG9tLCAiZGlyIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJuIGRpcjsKLX0KLQot
Y29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpkaXYoKQotewotICAgIHN0YXRpYyBRdWFs
aWZpZWROYW1lIGRpdihudWxsQXRvbSwgImRpdiIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAg
IHJldHVybiBkaXY7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6ZGwoKQot
ewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIGRsKG51bGxBdG9tLCAiZGwiLCB4aHRtbE5hbWVz
cGFjZVVSSSgpKTsKLSAgICByZXR1cm4gZGw7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhU
TUxOYW1lczo6ZHQoKQotewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIGR0KG51bGxBdG9tLCAi
ZHQiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4gZHQ7Ci19Ci0KLWNvbnN0IFF1
YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6ZW0oKQotewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1l
IGVtKG51bGxBdG9tLCAiZW0iLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4gZW07
Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6ZW1iZWQoKQotewotICAgIHN0
YXRpYyBRdWFsaWZpZWROYW1lIGVtYmVkKG51bGxBdG9tLCAiZW1iZWQiLCB4aHRtbE5hbWVzcGFj
ZVVSSSgpKTsKLSAgICByZXR1cm4gZW1iZWQ7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhU
TUxOYW1lczo6ZmllbGRzZXQoKQotewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIGZpZWxkc2V0
KG51bGxBdG9tLCAiZmllbGRzZXQiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4g
ZmllbGRzZXQ7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6Zm9udCgpCi17
Ci0gICAgc3RhdGljIFF1YWxpZmllZE5hbWUgZm9udChudWxsQXRvbSwgImZvbnQiLCB4aHRtbE5h
bWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4gZm9udDsKLX0KLQotY29uc3QgUXVhbGlmaWVkTmFt
ZSYgSFRNTE5hbWVzOjpmb3JtKCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBmb3JtKG51
bGxBdG9tLCAiZm9ybSIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiBmb3JtOwot
fQotCi1jb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OmZyYW1lKCkKLXsKLSAgICBzdGF0
aWMgUXVhbGlmaWVkTmFtZSBmcmFtZShudWxsQXRvbSwgImZyYW1lIiwgeGh0bWxOYW1lc3BhY2VV
UkkoKSk7Ci0gICAgcmV0dXJuIGZyYW1lOwotfQotCi1jb25zdCBRdWFsaWZpZWROYW1lJiBIVE1M
TmFtZXM6OmZyYW1lc2V0KCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBmcmFtZXNldChu
dWxsQXRvbSwgImZyYW1lc2V0IiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJuIGZy
YW1lc2V0OwotfQotCi1jb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OmhlYWQoKQotewot
ICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIGhlYWQobnVsbEF0b20sICJoZWFkIiwgeGh0bWxOYW1l
c3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJuIGhlYWQ7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUm
IEhUTUxOYW1lczo6aDEoKQotewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIGgxKG51bGxBdG9t
LCAiaDEiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4gaDE7Ci19Ci0KLWNvbnN0
IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6aDIoKQotewotICAgIHN0YXRpYyBRdWFsaWZpZWRO
YW1lIGgyKG51bGxBdG9tLCAiaDIiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4g
aDI7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6aDMoKQotewotICAgIHN0
YXRpYyBRdWFsaWZpZWROYW1lIGgzKG51bGxBdG9tLCAiaDMiLCB4aHRtbE5hbWVzcGFjZVVSSSgp
KTsKLSAgICByZXR1cm4gaDM7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6
aDQoKQotewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIGg0KG51bGxBdG9tLCAiaDQiLCB4aHRt
bE5hbWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4gaDQ7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5h
bWUmIEhUTUxOYW1lczo6aDUoKQotewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIGg1KG51bGxB
dG9tLCAiaDUiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4gaDU7Ci19Ci0KLWNv
bnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6aDYoKQotewotICAgIHN0YXRpYyBRdWFsaWZp
ZWROYW1lIGg2KG51bGxBdG9tLCAiaDYiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKLSAgICByZXR1
cm4gaDY7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6aHIoKQotewotICAg
IHN0YXRpYyBRdWFsaWZpZWROYW1lIGhyKG51bGxBdG9tLCAiaHIiLCB4aHRtbE5hbWVzcGFjZVVS
SSgpKTsKLSAgICByZXR1cm4gaHI7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1l
czo6aHRtbCgpCi17Ci0gICAgc3RhdGljIFF1YWxpZmllZE5hbWUgaHRtbChudWxsQXRvbSwgImh0
bWwiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4gaHRtbDsKLX0KLQotY29uc3Qg
UXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjppKCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFt
ZSBpKG51bGxBdG9tLCAiaSIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiBpOwot
fQotCi1jb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OmlmcmFtZSgpCi17Ci0gICAgc3Rh
dGljIFF1YWxpZmllZE5hbWUgaWZyYW1lKG51bGxBdG9tLCAiaWZyYW1lIiwgeGh0bWxOYW1lc3Bh
Y2VVUkkoKSk7Ci0gICAgcmV0dXJuIGlmcmFtZTsKLX0KLQotY29uc3QgUXVhbGlmaWVkTmFtZSYg
SFRNTE5hbWVzOjppbWcoKQotewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIGltZyhudWxsQXRv
bSwgImltZyIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiBpbWc7Ci19Ci0KLWNv
bnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6aW5wdXQoKQotewotICAgIHN0YXRpYyBRdWFs
aWZpZWROYW1lIGlucHV0KG51bGxBdG9tLCAiaW5wdXQiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsK
LSAgICByZXR1cm4gaW5wdXQ7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6
aW5zKCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBpbnMobnVsbEF0b20sICJpbnMiLCB4
aHRtbE5hbWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4gaW5zOwotfQotCi1jb25zdCBRdWFsaWZp
ZWROYW1lJiBIVE1MTmFtZXM6OmlzaW5kZXgoKQotewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1l
IGlzaW5kZXgobnVsbEF0b20sICJpc2luZGV4IiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAg
cmV0dXJuIGlzaW5kZXg7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6a2Jk
KCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBrYmQobnVsbEF0b20sICJrYmQiLCB4aHRt
bE5hbWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4ga2JkOwotfQotCi1jb25zdCBRdWFsaWZpZWRO
YW1lJiBIVE1MTmFtZXM6OmtleWdlbigpCi17Ci0gICAgc3RhdGljIFF1YWxpZmllZE5hbWUga2V5
Z2VuKG51bGxBdG9tLCAia2V5Z2VuIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJu
IGtleWdlbjsKLX0KLQotY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpsYWJlbCgpCi17
Ci0gICAgc3RhdGljIFF1YWxpZmllZE5hbWUgbGFiZWwobnVsbEF0b20sICJsYWJlbCIsIHhodG1s
TmFtZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiBsYWJlbDsKLX0KLQotY29uc3QgUXVhbGlmaWVk
TmFtZSYgSFRNTE5hbWVzOjpsZWdlbmQoKQotewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIGxl
Z2VuZChudWxsQXRvbSwgImxlZ2VuZCIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAgIHJldHVy
biBsZWdlbmQ7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6bGkoKQotewot
ICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIGxpKG51bGxBdG9tLCAibGkiLCB4aHRtbE5hbWVzcGFj
ZVVSSSgpKTsKLSAgICByZXR1cm4gbGk7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxO
YW1lczo6bGluaygpCi17Ci0gICAgc3RhdGljIFF1YWxpZmllZE5hbWUgbGluayhudWxsQXRvbSwg
ImxpbmsiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4gbGluazsKLX0KLQotY29u
c3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjptYXAoKQotewotICAgIHN0YXRpYyBRdWFsaWZp
ZWROYW1lIG1hcChudWxsQXRvbSwgIm1hcCIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAgIHJl
dHVybiBtYXA7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6bWFycXVlZSgp
Ci17Ci0gICAgc3RhdGljIFF1YWxpZmllZE5hbWUgbWFycXVlZShudWxsQXRvbSwgIm1hcnF1ZWUi
LCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4gbWFycXVlZTsKLX0KLQotY29uc3Qg
UXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjptZW51KCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVk
TmFtZSBtZW51KG51bGxBdG9tLCAibWVudSIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAgIHJl
dHVybiBtZW51OwotfQotCi1jb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6Om1ldGEoKQot
ewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIG1ldGEobnVsbEF0b20sICJtZXRhIiwgeGh0bWxO
YW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJuIG1ldGE7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5h
bWUmIEhUTUxOYW1lczo6bm9lbWJlZCgpCi17Ci0gICAgc3RhdGljIFF1YWxpZmllZE5hbWUgbm9l
bWJlZChudWxsQXRvbSwgIm5vZW1iZWQiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKLSAgICByZXR1
cm4gbm9lbWJlZDsKLX0KLQotY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpub2ZyYW1l
cygpCi17Ci0gICAgc3RhdGljIFF1YWxpZmllZE5hbWUgbm9mcmFtZXMobnVsbEF0b20sICJub2Zy
YW1lcyIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiBub2ZyYW1lczsKLX0KLQot
Y29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpub3NjcmlwdCgpCi17Ci0gICAgc3RhdGlj
IFF1YWxpZmllZE5hbWUgbm9zY3JpcHQobnVsbEF0b20sICJub3NjcmlwdCIsIHhodG1sTmFtZXNw
YWNlVVJJKCkpOwotICAgIHJldHVybiBub3NjcmlwdDsKLX0KLQotY29uc3QgUXVhbGlmaWVkTmFt
ZSYgSFRNTE5hbWVzOjpvYmplY3QoKQotewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIG9iamVj
dChudWxsQXRvbSwgIm9iamVjdCIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiBv
YmplY3Q7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6b2woKQotewotICAg
IHN0YXRpYyBRdWFsaWZpZWROYW1lIG9sKG51bGxBdG9tLCAib2wiLCB4aHRtbE5hbWVzcGFjZVVS
SSgpKTsKLSAgICByZXR1cm4gb2w7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1l
czo6b3B0Z3JvdXAoKQotewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIG9wdGdyb3VwKG51bGxB
dG9tLCAib3B0Z3JvdXAiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4gb3B0Z3Jv
dXA7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6cCgpCi17Ci0gICAgc3Rh
dGljIFF1YWxpZmllZE5hbWUgcChudWxsQXRvbSwgInAiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsK
LSAgICByZXR1cm4gcDsKLX0KLQotY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpwYXJh
bSgpCi17Ci0gICAgc3RhdGljIFF1YWxpZmllZE5hbWUgcGFyYW0obnVsbEF0b20sICJwYXJhbSIs
IHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiBwYXJhbTsKLX0KLQotY29uc3QgUXVh
bGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpwcmUoKQotewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1l
IHByZShudWxsQXRvbSwgInByZSIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiBw
cmU7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6cSgpCi17Ci0gICAgc3Rh
dGljIFF1YWxpZmllZE5hbWUgcShudWxsQXRvbSwgInEiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsK
LSAgICByZXR1cm4gcTsKLX0KLQotY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpzKCkK
LXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBzKG51bGxBdG9tLCAicyIsIHhodG1sTmFtZXNw
YWNlVVJJKCkpOwotICAgIHJldHVybiBzOwotfQotCi1jb25zdCBRdWFsaWZpZWROYW1lJiBIVE1M
TmFtZXM6OnNhbXAoKQotewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIHNhbXAobnVsbEF0b20s
ICJzYW1wIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJuIHNhbXA7Ci19Ci0KLWNv
bnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6c2NyaXB0KCkKLXsKLSAgICBzdGF0aWMgUXVh
bGlmaWVkTmFtZSBzY3JpcHQobnVsbEF0b20sICJzY3JpcHQiLCB4aHRtbE5hbWVzcGFjZVVSSSgp
KTsKLSAgICByZXR1cm4gc2NyaXB0OwotfQotCi1jb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFt
ZXM6OnNlbGVjdCgpCi17Ci0gICAgc3RhdGljIFF1YWxpZmllZE5hbWUgc2VsZWN0KG51bGxBdG9t
LCAic2VsZWN0IiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJuIHNlbGVjdDsKLX0K
LQotY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpzbWFsbCgpCi17Ci0gICAgc3RhdGlj
IFF1YWxpZmllZE5hbWUgc21hbGwobnVsbEF0b20sICJzbWFsbCIsIHhodG1sTmFtZXNwYWNlVVJJ
KCkpOwotICAgIHJldHVybiBzbWFsbDsKLX0KLQotY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5h
bWVzOjpzdHJpa2UoKQotewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIHN0cmlrZShudWxsQXRv
bSwgInN0cmlrZSIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiBzdHJpa2U7Ci19
Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6c3Ryb25nKCkKLXsKLSAgICBzdGF0
aWMgUXVhbGlmaWVkTmFtZSBzdHJvbmcobnVsbEF0b20sICJzdHJvbmciLCB4aHRtbE5hbWVzcGFj
ZVVSSSgpKTsKLSAgICByZXR1cm4gc3Ryb25nOwotfQotCi1jb25zdCBRdWFsaWZpZWROYW1lJiBI
VE1MTmFtZXM6OnN0eWxlKCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBzdHlsZShudWxs
QXRvbSwgInN0eWxlIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJuIHN0eWxlOwot
fQotCi1jb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OnRhYmxlKCkKLXsKLSAgICBzdGF0
aWMgUXVhbGlmaWVkTmFtZSB0YWJsZShudWxsQXRvbSwgInRhYmxlIiwgeGh0bWxOYW1lc3BhY2VV
UkkoKSk7Ci0gICAgcmV0dXJuIHRhYmxlOwotfQotCi1jb25zdCBRdWFsaWZpZWROYW1lJiBIVE1M
TmFtZXM6OnRib2R5KCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSB0Ym9keShudWxsQXRv
bSwgInRib2R5IiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJuIHRib2R5OwotfQot
Ci1jb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OnRkKCkKLXsKLSAgICBzdGF0aWMgUXVh
bGlmaWVkTmFtZSB0ZChudWxsQXRvbSwgInRkIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAg
cmV0dXJuIHRkOwotfQotCi1jb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OnRleHRhcmVh
KCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSB0ZXh0YXJlYShudWxsQXRvbSwgInRleHRh
cmVhIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJuIHRleHRhcmVhOwotfQotCi1j
b25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OnRmb290KCkKLXsKLSAgICBzdGF0aWMgUXVh
bGlmaWVkTmFtZSB0Zm9vdChudWxsQXRvbSwgInRmb290IiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7
Ci0gICAgcmV0dXJuIHRmb290OwotfQotCi1jb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6
OnRoKCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSB0aChudWxsQXRvbSwgInRoIiwgeGh0
bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJuIHRoOwotfQotCi1jb25zdCBRdWFsaWZpZWRO
YW1lJiBIVE1MTmFtZXM6OnRoZWFkKCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSB0aGVh
ZChudWxsQXRvbSwgInRoZWFkIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJuIHRo
ZWFkOwotfQotCi1jb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OnRpdGxlKCkKLXsKLSAg
ICBzdGF0aWMgUXVhbGlmaWVkTmFtZSB0aXRsZShudWxsQXRvbSwgInRpdGxlIiwgeGh0bWxOYW1l
c3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJuIHRpdGxlOwotfQotCi1jb25zdCBRdWFsaWZpZWROYW1l
JiBIVE1MTmFtZXM6OnRyKCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSB0cihudWxsQXRv
bSwgInRyIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJuIHRyOwotfQotCi1jb25z
dCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OnR0KCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVk
TmFtZSB0dChudWxsQXRvbSwgInR0IiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJu
IHR0OwotfQotCi1jb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OnUoKQotewotICAgIHN0
YXRpYyBRdWFsaWZpZWROYW1lIHUobnVsbEF0b20sICJ1IiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7
Ci0gICAgcmV0dXJuIHU7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6dWwo
KQotewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIHVsKG51bGxBdG9tLCAidWwiLCB4aHRtbE5h
bWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4gdWw7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUm
IEhUTUxOYW1lczo6dmFyKCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSB2YXIobnVsbEF0
b20sICJ2YXIiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4gdmFyOwotfQotCi1j
b25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OnhtcCgpCi17Ci0gICAgc3RhdGljIFF1YWxp
ZmllZE5hbWUgeG1wKG51bGxBdG9tLCAieG1wIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAg
cmV0dXJuIHhtcDsKKy8vIERlZmluZSBhIFF1YWxpZmllZE5hbWUtc2l6ZWQgYXJyYXkgb2YgcG9p
bnRlcnMgdG8gYXZvaWQgc3RhdGljIGluaXRpYWxpemF0aW9uLgorLy8gVXNlIGFuIGFycmF5IG9m
IHBvaW50ZXJzIGluc3RlYWQgb2YgYW4gYXJyYXkgb2YgY2hhciBpbiBjYXNlIHRoZXJlIGlzIHNv
bWUgYWxpZ25tZW50IGlzc3VlLgorI2RlZmluZSBERUZJTkVfR0xPQkFMKG5hbWUpIFwKKyAgICB2
b2lkKiBuYW1lICMjIFFOYW1lWyhzaXplb2YoUXVhbGlmaWVkTmFtZSkgKyBzaXplb2Yodm9pZCop
IC0gMSkgLyBzaXplb2Yodm9pZCopXTsKKworREVGSU5FX0dMT0JBTChhKQorREVGSU5FX0dMT0JB
TChhYmJyKQorREVGSU5FX0dMT0JBTChhY3JvbnltKQorREVGSU5FX0dMT0JBTChhZGRyZXNzKQor
REVGSU5FX0dMT0JBTChhcHBsZXQpCitERUZJTkVfR0xPQkFMKGFyZWEpCitERUZJTkVfR0xPQkFM
KGIpCitERUZJTkVfR0xPQkFMKGJhc2UpCitERUZJTkVfR0xPQkFMKGJhc2Vmb250KQorREVGSU5F
X0dMT0JBTChiZG8pCitERUZJTkVfR0xPQkFMKGJpZykKK0RFRklORV9HTE9CQUwoYmxvY2txdW90
ZSkKK0RFRklORV9HTE9CQUwoYm9keSkKK0RFRklORV9HTE9CQUwoYnIpCitERUZJTkVfR0xPQkFM
KGJ1dHRvbikKK0RFRklORV9HTE9CQUwoY2FudmFzKQorREVGSU5FX0dMT0JBTChjYXB0aW9uKQor
REVGSU5FX0dMT0JBTChjZW50ZXIpCitERUZJTkVfR0xPQkFMKGNpdGUpCitERUZJTkVfR0xPQkFM
KGNvZGUpCitERUZJTkVfR0xPQkFMKGNvbCkKK0RFRklORV9HTE9CQUwoY29sZ3JvdXApCitERUZJ
TkVfR0xPQkFMKGRkKQorREVGSU5FX0dMT0JBTChkZWwpCitERUZJTkVfR0xPQkFMKGRmbikKK0RF
RklORV9HTE9CQUwoZGlyKQorREVGSU5FX0dMT0JBTChkaXYpCitERUZJTkVfR0xPQkFMKGRsKQor
REVGSU5FX0dMT0JBTChkdCkKK0RFRklORV9HTE9CQUwoZW0pCitERUZJTkVfR0xPQkFMKGVtYmVk
KQorREVGSU5FX0dMT0JBTChmaWVsZHNldCkKK0RFRklORV9HTE9CQUwoZm9udCkKK0RFRklORV9H
TE9CQUwoZm9ybSkKK0RFRklORV9HTE9CQUwoZnJhbWUpCitERUZJTkVfR0xPQkFMKGZyYW1lc2V0
KQorREVGSU5FX0dMT0JBTChoZWFkKQorREVGSU5FX0dMT0JBTChoMSkKK0RFRklORV9HTE9CQUwo
aDIpCitERUZJTkVfR0xPQkFMKGgzKQorREVGSU5FX0dMT0JBTChoNCkKK0RFRklORV9HTE9CQUwo
aDUpCitERUZJTkVfR0xPQkFMKGg2KQorREVGSU5FX0dMT0JBTChocikKK0RFRklORV9HTE9CQUwo
aHRtbCkKK0RFRklORV9HTE9CQUwoaSkKK0RFRklORV9HTE9CQUwoaWZyYW1lKQorREVGSU5FX0dM
T0JBTChpbWcpCitERUZJTkVfR0xPQkFMKGlucHV0KQorREVGSU5FX0dMT0JBTChpbnMpCitERUZJ
TkVfR0xPQkFMKGlzaW5kZXgpCitERUZJTkVfR0xPQkFMKGtiZCkKK0RFRklORV9HTE9CQUwoa2V5
Z2VuKQorREVGSU5FX0dMT0JBTChsYWJlbCkKK0RFRklORV9HTE9CQUwobGF5ZXIpCitERUZJTkVf
R0xPQkFMKGxlZ2VuZCkKK0RFRklORV9HTE9CQUwobGkpCitERUZJTkVfR0xPQkFMKGxpbmspCitE
RUZJTkVfR0xPQkFMKG1hcCkKK0RFRklORV9HTE9CQUwobWFycXVlZSkKK0RFRklORV9HTE9CQUwo
bWVudSkKK0RFRklORV9HTE9CQUwobWV0YSkKK0RFRklORV9HTE9CQUwobm9icikKK0RFRklORV9H
TE9CQUwobm9lbWJlZCkKK0RFRklORV9HTE9CQUwobm9mcmFtZXMpCitERUZJTkVfR0xPQkFMKG5v
bGF5ZXIpCitERUZJTkVfR0xPQkFMKG5vc2NyaXB0KQorREVGSU5FX0dMT0JBTChvYmplY3QpCitE
RUZJTkVfR0xPQkFMKG9sKQorREVGSU5FX0dMT0JBTChvcHRncm91cCkKK0RFRklORV9HTE9CQUwo
b3B0aW9uKQorREVGSU5FX0dMT0JBTChwKQorREVGSU5FX0dMT0JBTChwYXJhbSkKK0RFRklORV9H
TE9CQUwocGxhaW50ZXh0KQorREVGSU5FX0dMT0JBTChwcmUpCitERUZJTkVfR0xPQkFMKHEpCitE
RUZJTkVfR0xPQkFMKHMpCitERUZJTkVfR0xPQkFMKHNhbXApCitERUZJTkVfR0xPQkFMKHNjcmlw
dCkKK0RFRklORV9HTE9CQUwoc2VsZWN0KQorREVGSU5FX0dMT0JBTChzbWFsbCkKK0RFRklORV9H
TE9CQUwoc3BhbikKK0RFRklORV9HTE9CQUwoc3RyaWtlKQorREVGSU5FX0dMT0JBTChzdHJvbmcp
CitERUZJTkVfR0xPQkFMKHN0eWxlKQorREVGSU5FX0dMT0JBTChzdWIpCitERUZJTkVfR0xPQkFM
KHN1cCkKK0RFRklORV9HTE9CQUwodGFibGUpCitERUZJTkVfR0xPQkFMKHRib2R5KQorREVGSU5F
X0dMT0JBTCh0ZCkKK0RFRklORV9HTE9CQUwodGV4dGFyZWEpCitERUZJTkVfR0xPQkFMKHRmb290
KQorREVGSU5FX0dMT0JBTCh0aCkKK0RFRklORV9HTE9CQUwodGhlYWQpCitERUZJTkVfR0xPQkFM
KHRpdGxlKQorREVGSU5FX0dMT0JBTCh0cikKK0RFRklORV9HTE9CQUwodHQpCitERUZJTkVfR0xP
QkFMKHUpCitERUZJTkVfR0xPQkFMKHVsKQorREVGSU5FX0dMT0JBTCh2YXIpCitERUZJTkVfR0xP
QkFMKHdicikKK0RFRklORV9HTE9CQUwoeG1wKQorCit2b2lkIEhUTUxOYW1lczo6aW5pdCgpCit7
CisgICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQ7CisgICAgaWYgKCFpbml0aWFsaXplZCkgewor
ICAgICAgICAvLyBVc2UgcGxhY2VtZW50IG5ldyB0byBpbml0aWFsaXplIHRoZSBnbG9iYWxzLgor
ICAgICAgICBzdGF0aWMgQXRvbWljU3RyaW5nIHhodG1sTlMoImh0dHA6Ly93d3cudzMub3JnLzE5
OTkveGh0bWwiKTsKKyAgICAgICAgbmV3ICgmeGh0bWxOYW1lc3BhY2VVUklBdG9tKSBBdG9taWNT
dHJpbmcoeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJmFRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxs
QXRvbSwgImEiLCB4aHRtbE5TKTsKKyAgICAgICAgbmV3ICgmYWJiclFOYW1lKSBRdWFsaWZpZWRO
YW1lKG51bGxBdG9tLCAiYWJiciIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZhY3JvbnltUU5h
bWUpIFF1YWxpZmllZE5hbWUobnVsbEF0b20sICJhY3JvbnltIiwgeGh0bWxOUyk7CisgICAgICAg
IG5ldyAoJmFkZHJlc3NRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgImFkZHJlc3MiLCB4
aHRtbE5TKTsKKyAgICAgICAgbmV3ICgmYXBwbGV0UU5hbWUpIFF1YWxpZmllZE5hbWUobnVsbEF0
b20sICJhcHBsZXQiLCB4aHRtbE5TKTsKKyAgICAgICAgbmV3ICgmYXJlYVFOYW1lKSBRdWFsaWZp
ZWROYW1lKG51bGxBdG9tLCAiYXJlYSIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZiUU5hbWUp
IFF1YWxpZmllZE5hbWUobnVsbEF0b20sICJiIiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJmJh
c2VRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgImJhc2UiLCB4aHRtbE5TKTsKKyAgICAg
ICAgbmV3ICgmYmFzZWZvbnRRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgImJhc2Vmb250
IiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJmJkb1FOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxB
dG9tLCAiYmRvIiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJmJpZ1FOYW1lKSBRdWFsaWZpZWRO
YW1lKG51bGxBdG9tLCAiYmlnIiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJmJsb2NrcXVvdGVR
TmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgImJsb2NrcXVvdGUiLCB4aHRtbE5TKTsKKyAg
ICAgICAgbmV3ICgmYm9keVFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAiYm9keSIsIHho
dG1sTlMpOworICAgICAgICBuZXcgKCZiclFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAi
YnIiLCB4aHRtbE5TKTsKKyAgICAgICAgbmV3ICgmYnV0dG9uUU5hbWUpIFF1YWxpZmllZE5hbWUo
bnVsbEF0b20sICJidXR0b24iLCB4aHRtbE5TKTsKKyAgICAgICAgbmV3ICgmY2FudmFzUU5hbWUp
IFF1YWxpZmllZE5hbWUobnVsbEF0b20sICJjYW52YXMiLCB4aHRtbE5TKTsKKyAgICAgICAgbmV3
ICgmY2FwdGlvblFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAiY2FwdGlvbiIsIHhodG1s
TlMpOworICAgICAgICBuZXcgKCZjZW50ZXJRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwg
ImNlbnRlciIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZjaXRlUU5hbWUpIFF1YWxpZmllZE5h
bWUobnVsbEF0b20sICJjaXRlIiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJmNvZGVRTmFtZSkg
UXVhbGlmaWVkTmFtZShudWxsQXRvbSwgImNvZGUiLCB4aHRtbE5TKTsKKyAgICAgICAgbmV3ICgm
Y29sUU5hbWUpIFF1YWxpZmllZE5hbWUobnVsbEF0b20sICJjb2wiLCB4aHRtbE5TKTsKKyAgICAg
ICAgbmV3ICgmY29sZ3JvdXBRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgImNvbGdyb3Vw
IiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJmRkUU5hbWUpIFF1YWxpZmllZE5hbWUobnVsbEF0
b20sICJkZCIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZkZWxRTmFtZSkgUXVhbGlmaWVkTmFt
ZShudWxsQXRvbSwgImRlbCIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZkZm5RTmFtZSkgUXVh
bGlmaWVkTmFtZShudWxsQXRvbSwgImRmbiIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZkaXJR
TmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgImRpciIsIHhodG1sTlMpOworICAgICAgICBu
ZXcgKCZkaXZRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgImRpdiIsIHhodG1sTlMpOwor
ICAgICAgICBuZXcgKCZkbFFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAiZGwiLCB4aHRt
bE5TKTsKKyAgICAgICAgbmV3ICgmZHRRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgImR0
IiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJmVtUU5hbWUpIFF1YWxpZmllZE5hbWUobnVsbEF0
b20sICJlbSIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZlbWJlZFFOYW1lKSBRdWFsaWZpZWRO
YW1lKG51bGxBdG9tLCAiZW1iZWQiLCB4aHRtbE5TKTsKKyAgICAgICAgbmV3ICgmZmllbGRzZXRR
TmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgImZpZWxkc2V0IiwgeGh0bWxOUyk7CisgICAg
ICAgIG5ldyAoJmZvbnRRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgImZvbnQiLCB4aHRt
bE5TKTsKKyAgICAgICAgbmV3ICgmZm9ybVFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAi
Zm9ybSIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZmcmFtZVFOYW1lKSBRdWFsaWZpZWROYW1l
KG51bGxBdG9tLCAiZnJhbWUiLCB4aHRtbE5TKTsKKyAgICAgICAgbmV3ICgmZnJhbWVzZXRRTmFt
ZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgImZyYW1lc2V0IiwgeGh0bWxOUyk7CisgICAgICAg
IG5ldyAoJmhlYWRRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgImhlYWQiLCB4aHRtbE5T
KTsKKyAgICAgICAgbmV3ICgmaDFRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgImgxIiwg
eGh0bWxOUyk7CisgICAgICAgIG5ldyAoJmgyUU5hbWUpIFF1YWxpZmllZE5hbWUobnVsbEF0b20s
ICJoMiIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZoM1FOYW1lKSBRdWFsaWZpZWROYW1lKG51
bGxBdG9tLCAiaDMiLCB4aHRtbE5TKTsKKyAgICAgICAgbmV3ICgmaDRRTmFtZSkgUXVhbGlmaWVk
TmFtZShudWxsQXRvbSwgImg0IiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJmg1UU5hbWUpIFF1
YWxpZmllZE5hbWUobnVsbEF0b20sICJoNSIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZoNlFO
YW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAiaDYiLCB4aHRtbE5TKTsKKyAgICAgICAgbmV3
ICgmaHJRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgImhyIiwgeGh0bWxOUyk7CisgICAg
ICAgIG5ldyAoJmh0bWxRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgImh0bWwiLCB4aHRt
bE5TKTsKKyAgICAgICAgbmV3ICgmaVFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAiaSIs
IHhodG1sTlMpOworICAgICAgICBuZXcgKCZpZnJhbWVRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxs
QXRvbSwgImlmcmFtZSIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZpbWdRTmFtZSkgUXVhbGlm
aWVkTmFtZShudWxsQXRvbSwgImltZyIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZpbnB1dFFO
YW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAiaW5wdXQiLCB4aHRtbE5TKTsKKyAgICAgICAg
bmV3ICgmaW5zUU5hbWUpIFF1YWxpZmllZE5hbWUobnVsbEF0b20sICJpbnMiLCB4aHRtbE5TKTsK
KyAgICAgICAgbmV3ICgmaXNpbmRleFFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAiaXNp
bmRleCIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZrYmRRTmFtZSkgUXVhbGlmaWVkTmFtZShu
dWxsQXRvbSwgImtiZCIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZrZXlnZW5RTmFtZSkgUXVh
bGlmaWVkTmFtZShudWxsQXRvbSwgImtleWdlbiIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZs
YWJlbFFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAibGFiZWwiLCB4aHRtbE5TKTsKKyAg
ICAgICAgbmV3ICgmbGF5ZXJRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgImxheWVyIiwg
eGh0bWxOUyk7CisgICAgICAgIG5ldyAoJmxlZ2VuZFFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxB
dG9tLCAibGVnZW5kIiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJmxpUU5hbWUpIFF1YWxpZmll
ZE5hbWUobnVsbEF0b20sICJsaSIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZsaW5rUU5hbWUp
IFF1YWxpZmllZE5hbWUobnVsbEF0b20sICJsaW5rIiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAo
Jm1hcFFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAibWFwIiwgeGh0bWxOUyk7CisgICAg
ICAgIG5ldyAoJm1hcnF1ZWVRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgIm1hcnF1ZWUi
LCB4aHRtbE5TKTsKKyAgICAgICAgbmV3ICgmbWVudVFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxB
dG9tLCAibWVudSIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZtZXRhUU5hbWUpIFF1YWxpZmll
ZE5hbWUobnVsbEF0b20sICJtZXRhIiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJm5vYnJRTmFt
ZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgIm5vYnIiLCB4aHRtbE5TKTsKKyAgICAgICAgbmV3
ICgmbm9lbWJlZFFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAibm9lbWJlZCIsIHhodG1s
TlMpOworICAgICAgICBuZXcgKCZub2ZyYW1lc1FOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9t
LCAibm9mcmFtZXMiLCB4aHRtbE5TKTsKKyAgICAgICAgbmV3ICgmbm9sYXllclFOYW1lKSBRdWFs
aWZpZWROYW1lKG51bGxBdG9tLCAibm9sYXllciIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZu
b3NjcmlwdFFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAibm9zY3JpcHQiLCB4aHRtbE5T
KTsKKyAgICAgICAgbmV3ICgmb2JqZWN0UU5hbWUpIFF1YWxpZmllZE5hbWUobnVsbEF0b20sICJv
YmplY3QiLCB4aHRtbE5TKTsKKyAgICAgICAgbmV3ICgmb2xRTmFtZSkgUXVhbGlmaWVkTmFtZShu
dWxsQXRvbSwgIm9sIiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJm9wdGdyb3VwUU5hbWUpIFF1
YWxpZmllZE5hbWUobnVsbEF0b20sICJvcHRncm91cCIsIHhodG1sTlMpOworICAgICAgICBuZXcg
KCZvcHRpb25RTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgIm9wdGlvbiIsIHhodG1sTlMp
OworICAgICAgICBuZXcgKCZwUU5hbWUpIFF1YWxpZmllZE5hbWUobnVsbEF0b20sICJwIiwgeGh0
bWxOUyk7CisgICAgICAgIG5ldyAoJnBhcmFtUU5hbWUpIFF1YWxpZmllZE5hbWUobnVsbEF0b20s
ICJwYXJhbSIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZwbGFpbnRleHRRTmFtZSkgUXVhbGlm
aWVkTmFtZShudWxsQXRvbSwgInBsYWludGV4dCIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZw
cmVRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgInByZSIsIHhodG1sTlMpOworICAgICAg
ICBuZXcgKCZxUU5hbWUpIFF1YWxpZmllZE5hbWUobnVsbEF0b20sICJxIiwgeGh0bWxOUyk7Cisg
ICAgICAgIG5ldyAoJnNRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgInMiLCB4aHRtbE5T
KTsKKyAgICAgICAgbmV3ICgmc2FtcFFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAic2Ft
cCIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZzY3JpcHRRTmFtZSkgUXVhbGlmaWVkTmFtZShu
dWxsQXRvbSwgInNjcmlwdCIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZzZWxlY3RRTmFtZSkg
UXVhbGlmaWVkTmFtZShudWxsQXRvbSwgInNlbGVjdCIsIHhodG1sTlMpOworICAgICAgICBuZXcg
KCZzbWFsbFFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAic21hbGwiLCB4aHRtbE5TKTsK
KyAgICAgICAgbmV3ICgmc3BhblFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAic3BhbiIs
IHhodG1sTlMpOworICAgICAgICBuZXcgKCZzdHJpa2VRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxs
QXRvbSwgInN0cmlrZSIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZzdHJvbmdRTmFtZSkgUXVh
bGlmaWVkTmFtZShudWxsQXRvbSwgInN0cm9uZyIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZz
dHlsZVFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAic3R5bGUiLCB4aHRtbE5TKTsKKyAg
ICAgICAgbmV3ICgmc3ViUU5hbWUpIFF1YWxpZmllZE5hbWUobnVsbEF0b20sICJzdWIiLCB4aHRt
bE5TKTsKKyAgICAgICAgbmV3ICgmc3VwUU5hbWUpIFF1YWxpZmllZE5hbWUobnVsbEF0b20sICJz
dXAiLCB4aHRtbE5TKTsKKyAgICAgICAgbmV3ICgmdGFibGVRTmFtZSkgUXVhbGlmaWVkTmFtZShu
dWxsQXRvbSwgInRhYmxlIiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJnRib2R5UU5hbWUpIFF1
YWxpZmllZE5hbWUobnVsbEF0b20sICJ0Ym9keSIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZ0
ZFFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAidGQiLCB4aHRtbE5TKTsKKyAgICAgICAg
bmV3ICgmdGV4dGFyZWFRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgInRleHRhcmVhIiwg
eGh0bWxOUyk7CisgICAgICAgIG5ldyAoJnRmb290UU5hbWUpIFF1YWxpZmllZE5hbWUobnVsbEF0
b20sICJ0Zm9vdCIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZ0aFFOYW1lKSBRdWFsaWZpZWRO
YW1lKG51bGxBdG9tLCAidGgiLCB4aHRtbE5TKTsKKyAgICAgICAgbmV3ICgmdGhlYWRRTmFtZSkg
UXVhbGlmaWVkTmFtZShudWxsQXRvbSwgInRoZWFkIiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAo
JnRpdGxlUU5hbWUpIFF1YWxpZmllZE5hbWUobnVsbEF0b20sICJ0aXRsZSIsIHhodG1sTlMpOwor
ICAgICAgICBuZXcgKCZ0clFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAidHIiLCB4aHRt
bE5TKTsKKyAgICAgICAgbmV3ICgmdHRRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgInR0
IiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJnVRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRv
bSwgInUiLCB4aHRtbE5TKTsKKyAgICAgICAgbmV3ICgmdWxRTmFtZSkgUXVhbGlmaWVkTmFtZShu
dWxsQXRvbSwgInVsIiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJnZhclFOYW1lKSBRdWFsaWZp
ZWROYW1lKG51bGxBdG9tLCAidmFyIiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJndiclFOYW1l
KSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAid2JyIiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAo
JnhtcFFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAieG1wIiwgeGh0bWxOUyk7CisgICAg
ICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKKyAgICB9CiB9CiAKIH0KSW5kZXg6IGtodG1sL2h0bWwv
aHRtbG5hbWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwv
aHRtbC9odG1sbmFtZXMuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yCmRpZmYgLXUgLXAgLXIx
LjIga2h0bWwvaHRtbC9odG1sbmFtZXMuaAotLS0ga2h0bWwvaHRtbC9odG1sbmFtZXMuaAkxNiBK
dW4gMjAwNSAyMDozMzo1NyAtMDAwMAkxLjIKKysrIGtodG1sL2h0bWwvaHRtbG5hbWVzLmgJOCBK
dWwgMjAwNSAwNTo1NzoyNyAtMDAwMApAQCAtMjIsMTEyICsyMiwyNDEgQEAKICNpZm5kZWYgSFRN
TE5BTUVTX0gKICNkZWZpbmUgSFRNTE5BTUVTX0gKIAotI2luY2x1ZGUgInhtbC9kb21fZWxlbWVu
dGltcGwuaCIKKyNpbmNsdWRlICJkb21fcW5hbWUuaCIKIAogbmFtZXNwYWNlIERPTQogewogCiBj
bGFzcyBRdWFsaWZpZWROYW1lOwogCisvLyBUaGUgZ2xvYmFscy4KKy8vIERlZmluZSBleHRlcm5h
bCBnbG9iYWwgdmFyaWFibGVzIGZvciBhbGwgSFRNTCBuYW1lcyBhYm92ZS4KKyNpZiAhS0hUTUxf
SFRNTE5BTUVTX0hJREVfR0xPQkFMUworICAgIGV4dGVybiBjb25zdCBBdG9taWNTdHJpbmcgIHho
dG1sTmFtZXNwYWNlVVJJQXRvbTsKKyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSBhUU5h
bWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgYWJiclFOYW1lOworICAgIGV4dGVy
biBjb25zdCBRdWFsaWZpZWROYW1lIGFjcm9ueW1RTmFtZTsKKyAgICBleHRlcm4gY29uc3QgUXVh
bGlmaWVkTmFtZSBhZGRyZXNzUU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUg
YXBwbGV0UU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgYXJlYVFOYW1lOwor
ICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIGJRTmFtZTsKKyAgICBleHRlcm4gY29uc3Qg
UXVhbGlmaWVkTmFtZSBiYXNlUU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUg
YmFzZWZvbnRRTmFtZTsKKyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSBiZG9RTmFtZTsK
KyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSBiaWdRTmFtZTsKKyAgICBleHRlcm4gY29u
c3QgUXVhbGlmaWVkTmFtZSBibG9ja3F1b3RlUU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxp
ZmllZE5hbWUgYm9keVFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIGJyUU5h
bWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgYnV0dG9uUU5hbWU7CisgICAgZXh0
ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgY2FudmFzUU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1
YWxpZmllZE5hbWUgY2FwdGlvblFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1l
IGNlbnRlclFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIGNpdGVRTmFtZTsK
KyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSBjb2RlUU5hbWU7CisgICAgZXh0ZXJuIGNv
bnN0IFF1YWxpZmllZE5hbWUgY29sUU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5h
bWUgY29sZ3JvdXBRTmFtZTsKKyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSBkZFFOYW1l
OworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIGRlbFFOYW1lOworICAgIGV4dGVybiBj
b25zdCBRdWFsaWZpZWROYW1lIGRmblFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWRO
YW1lIGRpclFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIGRpdlFOYW1lOwor
ICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIGRsUU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0
IFF1YWxpZmllZE5hbWUgZHRRTmFtZTsKKyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSBl
bVFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIGVtYmVkUU5hbWU7CisgICAg
ZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgZmllbGRzZXRRTmFtZTsKKyAgICBleHRlcm4gY29u
c3QgUXVhbGlmaWVkTmFtZSBmb250UU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5h
bWUgZm9ybVFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIGZyYW1lUU5hbWU7
CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgZnJhbWVzZXRRTmFtZTsKKyAgICBleHRl
cm4gY29uc3QgUXVhbGlmaWVkTmFtZSBoZWFkUU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxp
ZmllZE5hbWUgaDFRTmFtZTsKKyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSBoMlFOYW1l
OworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIGgzUU5hbWU7CisgICAgZXh0ZXJuIGNv
bnN0IFF1YWxpZmllZE5hbWUgaDRRTmFtZTsKKyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFt
ZSBoNVFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIGg2UU5hbWU7CisgICAg
ZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgaHJRTmFtZTsKKyAgICBleHRlcm4gY29uc3QgUXVh
bGlmaWVkTmFtZSBodG1sUU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgaVFO
YW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIGlmcmFtZVFOYW1lOworICAgIGV4
dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIGltZ1FOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFs
aWZpZWROYW1lIGlucHV0UU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgaW5z
UU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgaXNpbmRleFFOYW1lOworICAg
IGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIGtiZFFOYW1lOworICAgIGV4dGVybiBjb25zdCBR
dWFsaWZpZWROYW1lIGtleWdlblFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1l
IGxhYmVsUU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgbGF5ZXJRTmFtZTsK
KyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSBsZWdlbmRRTmFtZTsKKyAgICBleHRlcm4g
Y29uc3QgUXVhbGlmaWVkTmFtZSBsaVFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWRO
YW1lIGxpbmtRTmFtZTsKKyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSBtYXBRTmFtZTsK
KyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSBtYXJxdWVlUU5hbWU7CisgICAgZXh0ZXJu
IGNvbnN0IFF1YWxpZmllZE5hbWUgbWVudVFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZp
ZWROYW1lIG1ldGFRTmFtZTsKKyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSBub2JyUU5h
bWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgbm9lbWJlZFFOYW1lOworICAgIGV4
dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIG5vZnJhbWVzUU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0
IFF1YWxpZmllZE5hbWUgbm9sYXllclFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWRO
YW1lIG5vc2NyaXB0UU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgb2JqZWN0
UU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgb2xRTmFtZTsKKyAgICBleHRl
cm4gY29uc3QgUXVhbGlmaWVkTmFtZSBvcHRncm91cFFOYW1lOworICAgIGV4dGVybiBjb25zdCBR
dWFsaWZpZWROYW1lIG9wdGlvblFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1l
IHBRTmFtZTsKKyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSBwYXJhbVFOYW1lOworICAg
IGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIHBsYWludGV4dFFOYW1lOworICAgIGV4dGVybiBj
b25zdCBRdWFsaWZpZWROYW1lIHByZVFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWRO
YW1lIHFRTmFtZTsKKyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSBzUU5hbWU7CisgICAg
ZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgc2FtcFFOYW1lOworICAgIGV4dGVybiBjb25zdCBR
dWFsaWZpZWROYW1lIHNjcmlwdFFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1l
IHNlbGVjdFFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIHNtYWxsUU5hbWU7
CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgc3BhblFOYW1lOworICAgIGV4dGVybiBj
b25zdCBRdWFsaWZpZWROYW1lIHN0cmlrZVFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZp
ZWROYW1lIHN0cm9uZ1FOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIHN0eWxl
UU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgc3ViUU5hbWU7CisgICAgZXh0
ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgc3VwUU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxp
ZmllZE5hbWUgdGFibGVRTmFtZTsKKyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSB0Ym9k
eVFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIHRkUU5hbWU7CisgICAgZXh0
ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgdGV4dGFyZWFRTmFtZTsKKyAgICBleHRlcm4gY29uc3Qg
UXVhbGlmaWVkTmFtZSB0Zm9vdFFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1l
IHRoUU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgdGhlYWRRTmFtZTsKKyAg
ICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSB0aXRsZVFOYW1lOworICAgIGV4dGVybiBjb25z
dCBRdWFsaWZpZWROYW1lIHRyUU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUg
dHRRTmFtZTsKKyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSB1UU5hbWU7CisgICAgZXh0
ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgdWxRTmFtZTsKKyAgICBleHRlcm4gY29uc3QgUXVhbGlm
aWVkTmFtZSB2YXJRTmFtZTsKKyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSB3YnJRTmFt
ZTsKKyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSB4bXBRTmFtZTsKKworI2VuZGlmCisK
IGNsYXNzIEhUTUxOYW1lcwogewogcHVibGljOgorI2lmICFLSFRNTF9IVE1MTkFNRVNfSElERV9H
TE9CQUxTCiAgICAgLy8gVGhlIG5hbWVzcGFjZSBVUkkuCi0gICAgc3RhdGljIGNvbnN0IEF0b21p
Y1N0cmluZyYgeGh0bWxOYW1lc3BhY2VVUkkoKTsKKyAgICBzdGF0aWMgY29uc3QgQXRvbWljU3Ry
aW5nJiB4aHRtbE5hbWVzcGFjZVVSSSgpIHsgcmV0dXJuIHhodG1sTmFtZXNwYWNlVVJJQXRvbTsg
fQogICAgIAotICAgIC8vIEZ1bGwgdGFnIG5hbWVzLgotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZp
ZWROYW1lJiBhKCk7Ci0gICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGFkZHJlc3MoKTsK
LSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXBwbGV0KCk7Ci0gICAgc3RhdGljIGNv
bnN0IFF1YWxpZmllZE5hbWUmIGFyZWEoKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFt
ZSYgYigpOwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBiYXNlKCk7Ci0gICAgc3Rh
dGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGJhc2Vmb250KCk7Ci0gICAgc3RhdGljIGNvbnN0IFF1
YWxpZmllZE5hbWUmIGJpZygpOwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBibG9j
a3F1b3RlKCk7Ci0gICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGJvZHkoKTsKLSAgICBz
dGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgYnIoKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlm
aWVkTmFtZSYgYnV0dG9uKCk7Ci0gICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGNhbnZh
cygpOwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBjYXB0aW9uKCk7Ci0gICAgc3Rh
dGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGNlbnRlcigpOwotICAgIHN0YXRpYyBjb25zdCBRdWFs
aWZpZWROYW1lJiBjb2RlKCk7Ci0gICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGNvbCgp
OwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBjb2xncm91cCgpOwotICAgIHN0YXRp
YyBjb25zdCBRdWFsaWZpZWROYW1lJiBkZCgpOwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWRO
YW1lJiBkZWwoKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgZGZuKCk7Ci0gICAg
c3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGRpcigpOwotICAgIHN0YXRpYyBjb25zdCBRdWFs
aWZpZWROYW1lJiBkaXYoKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgZGwoKTsK
LSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgZHQoKTsKLSAgICBzdGF0aWMgY29uc3Qg
UXVhbGlmaWVkTmFtZSYgZW0oKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgZW1i
ZWQoKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgZmllbGRzZXQoKTsKLSAgICBz
dGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgZm9udCgpOwotICAgIHN0YXRpYyBjb25zdCBRdWFs
aWZpZWROYW1lJiBmb3JtKCk7Ci0gICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGZyYW1l
KCk7Ci0gICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGZyYW1lc2V0KCk7Ci0gICAgc3Rh
dGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGhlYWQoKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlm
aWVkTmFtZSYgaDEoKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgaDIoKTsKLSAg
ICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgaDMoKTsKLSAgICBzdGF0aWMgY29uc3QgUXVh
bGlmaWVkTmFtZSYgaDQoKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgaDUoKTsK
LSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgaDYoKTsKLSAgICBzdGF0aWMgY29uc3Qg
UXVhbGlmaWVkTmFtZSYgaHIoKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgaHRt
bCgpOwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBpKCk7Ci0gICAgc3RhdGljIGNv
bnN0IFF1YWxpZmllZE5hbWUmIGlmcmFtZSgpOwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWRO
YW1lJiBpbWcoKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgaW5wdXQoKTsKLSAg
ICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgaW5zKCk7Ci0gICAgc3RhdGljIGNvbnN0IFF1
YWxpZmllZE5hbWUmIGlzaW5kZXgoKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYg
a2JkKCk7Ci0gICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGtleWdlbigpOwotICAgIHN0
YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBsYWJlbCgpOwotICAgIHN0YXRpYyBjb25zdCBRdWFs
aWZpZWROYW1lJiBsZWdlbmQoKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgbGko
KTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgbGluaygpOwotICAgIHN0YXRpYyBj
b25zdCBRdWFsaWZpZWROYW1lJiBtYXAoKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFt
ZSYgbWFycXVlZSgpOwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBtZW51KCk7Ci0g
ICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIG1ldGEoKTsKLSAgICBzdGF0aWMgY29uc3Qg
UXVhbGlmaWVkTmFtZSYgbm9lbWJlZCgpOwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1l
JiBub2ZyYW1lcygpOwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBub3NjcmlwdCgp
OwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBvYmplY3QoKTsKLSAgICBzdGF0aWMg
Y29uc3QgUXVhbGlmaWVkTmFtZSYgb2woKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFt
ZSYgb3B0Z3JvdXAoKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgb3B0aW9uKCk7
Ci0gICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIHAoKTsKLSAgICBzdGF0aWMgY29uc3Qg
UXVhbGlmaWVkTmFtZSYgcGFyYW0oKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYg
cHJlKCk7Ci0gICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIHEoKTsKLSAgICBzdGF0aWMg
Y29uc3QgUXVhbGlmaWVkTmFtZSYgcygpOwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1l
JiBzYW1wKCk7Ci0gICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIHNjcmlwdCgpOwotICAg
IHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBzZWxlY3QoKTsKLSAgICBzdGF0aWMgY29uc3Qg
UXVhbGlmaWVkTmFtZSYgc21hbGwoKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYg
c3RyaWtlKCk7Ci0gICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIHN0cm9uZygpOwotICAg
IHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBzdHlsZSgpOwotICAgIHN0YXRpYyBjb25zdCBR
dWFsaWZpZWROYW1lJiB0YWJsZSgpOwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiB0
Ym9keSgpOwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiB0ZCgpOwotICAgIHN0YXRp
YyBjb25zdCBRdWFsaWZpZWROYW1lJiB0ZXh0YXJlYSgpOwotICAgIHN0YXRpYyBjb25zdCBRdWFs
aWZpZWROYW1lJiB0Zm9vdCgpOwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiB0aCgp
OwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiB0aGVhZCgpOwotICAgIHN0YXRpYyBj
b25zdCBRdWFsaWZpZWROYW1lJiB0aXRsZSgpOwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWRO
YW1lJiB0cigpOwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiB0dCgpOwotICAgIHN0
YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiB1KCk7Ci0gICAgc3RhdGljIGNvbnN0IFF1YWxpZmll
ZE5hbWUmIHVsKCk7Ci0gICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIHZhcigpOwotICAg
IHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiB4bXAoKTsKKy8vIEZ1bGwgdGFnIG5hbWVzLgor
I2RlZmluZSBERUZJTkVfR0VUVEVSKG5hbWUpIFwKKyAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVk
TmFtZSYgbmFtZSgpIHsgcmV0dXJuIG5hbWUgIyMgUU5hbWU7IH0KKworICAgIERFRklORV9HRVRU
RVIoYSkKKyAgICBERUZJTkVfR0VUVEVSKGFiYnIpCisgICAgREVGSU5FX0dFVFRFUihhY3Jvbnlt
KQorICAgIERFRklORV9HRVRURVIoYWRkcmVzcykKKyAgICBERUZJTkVfR0VUVEVSKGFwcGxldCkK
KyAgICBERUZJTkVfR0VUVEVSKGFyZWEpCisgICAgREVGSU5FX0dFVFRFUihiKQorICAgIERFRklO
RV9HRVRURVIoYmFzZSkKKyAgICBERUZJTkVfR0VUVEVSKGJhc2Vmb250KQorICAgIERFRklORV9H
RVRURVIoYmRvKQorICAgIERFRklORV9HRVRURVIoYmlnKQorICAgIERFRklORV9HRVRURVIoYmxv
Y2txdW90ZSkKKyAgICBERUZJTkVfR0VUVEVSKGJvZHkpCisgICAgREVGSU5FX0dFVFRFUihicikK
KyAgICBERUZJTkVfR0VUVEVSKGJ1dHRvbikKKyAgICBERUZJTkVfR0VUVEVSKGNhbnZhcykKKyAg
ICBERUZJTkVfR0VUVEVSKGNhcHRpb24pCisgICAgREVGSU5FX0dFVFRFUihjZW50ZXIpCisgICAg
REVGSU5FX0dFVFRFUihjaXRlKQorICAgIERFRklORV9HRVRURVIoY29kZSkKKyAgICBERUZJTkVf
R0VUVEVSKGNvbCkKKyAgICBERUZJTkVfR0VUVEVSKGNvbGdyb3VwKQorICAgIERFRklORV9HRVRU
RVIoZGQpCisgICAgREVGSU5FX0dFVFRFUihkZWwpCisgICAgREVGSU5FX0dFVFRFUihkZm4pCisg
ICAgREVGSU5FX0dFVFRFUihkaXIpCisgICAgREVGSU5FX0dFVFRFUihkaXYpCisgICAgREVGSU5F
X0dFVFRFUihkbCkKKyAgICBERUZJTkVfR0VUVEVSKGR0KQorICAgIERFRklORV9HRVRURVIoZW0p
CisgICAgREVGSU5FX0dFVFRFUihlbWJlZCkKKyAgICBERUZJTkVfR0VUVEVSKGZpZWxkc2V0KQor
ICAgIERFRklORV9HRVRURVIoZm9udCkKKyAgICBERUZJTkVfR0VUVEVSKGZvcm0pCisgICAgREVG
SU5FX0dFVFRFUihmcmFtZSkKKyAgICBERUZJTkVfR0VUVEVSKGZyYW1lc2V0KQorICAgIERFRklO
RV9HRVRURVIoaGVhZCkKKyAgICBERUZJTkVfR0VUVEVSKGgxKQorICAgIERFRklORV9HRVRURVIo
aDIpCisgICAgREVGSU5FX0dFVFRFUihoMykKKyAgICBERUZJTkVfR0VUVEVSKGg0KQorICAgIERF
RklORV9HRVRURVIoaDUpCisgICAgREVGSU5FX0dFVFRFUihoNikKKyAgICBERUZJTkVfR0VUVEVS
KGhyKQorICAgIERFRklORV9HRVRURVIoaHRtbCkKKyAgICBERUZJTkVfR0VUVEVSKGkpCisgICAg
REVGSU5FX0dFVFRFUihpZnJhbWUpCisgICAgREVGSU5FX0dFVFRFUihpbWcpCisgICAgREVGSU5F
X0dFVFRFUihpbnB1dCkKKyAgICBERUZJTkVfR0VUVEVSKGlucykKKyAgICBERUZJTkVfR0VUVEVS
KGlzaW5kZXgpCisgICAgREVGSU5FX0dFVFRFUihrYmQpCisgICAgREVGSU5FX0dFVFRFUihrZXln
ZW4pCisgICAgREVGSU5FX0dFVFRFUihsYWJlbCkKKyAgICBERUZJTkVfR0VUVEVSKGxheWVyKQor
ICAgIERFRklORV9HRVRURVIobGVnZW5kKQorICAgIERFRklORV9HRVRURVIobGkpCisgICAgREVG
SU5FX0dFVFRFUihsaW5rKQorICAgIERFRklORV9HRVRURVIobWFwKQorICAgIERFRklORV9HRVRU
RVIobWFycXVlZSkKKyAgICBERUZJTkVfR0VUVEVSKG1lbnUpCisgICAgREVGSU5FX0dFVFRFUiht
ZXRhKQorICAgIERFRklORV9HRVRURVIobm9icikKKyAgICBERUZJTkVfR0VUVEVSKG5vZW1iZWQp
CisgICAgREVGSU5FX0dFVFRFUihub2ZyYW1lcykKKyAgICBERUZJTkVfR0VUVEVSKG5vbGF5ZXIp
CisgICAgREVGSU5FX0dFVFRFUihub3NjcmlwdCkKKyAgICBERUZJTkVfR0VUVEVSKG9iamVjdCkK
KyAgICBERUZJTkVfR0VUVEVSKG9sKQorICAgIERFRklORV9HRVRURVIob3B0Z3JvdXApCisgICAg
REVGSU5FX0dFVFRFUihvcHRpb24pCisgICAgREVGSU5FX0dFVFRFUihwKQorICAgIERFRklORV9H
RVRURVIocGFyYW0pCisgICAgREVGSU5FX0dFVFRFUihwbGFpbnRleHQpCisgICAgREVGSU5FX0dF
VFRFUihwcmUpCisgICAgREVGSU5FX0dFVFRFUihxKQorICAgIERFRklORV9HRVRURVIocykKKyAg
ICBERUZJTkVfR0VUVEVSKHNhbXApCisgICAgREVGSU5FX0dFVFRFUihzY3JpcHQpCisgICAgREVG
SU5FX0dFVFRFUihzZWxlY3QpCisgICAgREVGSU5FX0dFVFRFUihzbWFsbCkKKyAgICBERUZJTkVf
R0VUVEVSKHNwYW4pCisgICAgREVGSU5FX0dFVFRFUihzdHJpa2UpCisgICAgREVGSU5FX0dFVFRF
UihzdHJvbmcpCisgICAgREVGSU5FX0dFVFRFUihzdHlsZSkKKyAgICBERUZJTkVfR0VUVEVSKHN1
YikKKyAgICBERUZJTkVfR0VUVEVSKHN1cCkKKyAgICBERUZJTkVfR0VUVEVSKHRhYmxlKQorICAg
IERFRklORV9HRVRURVIodGJvZHkpCisgICAgREVGSU5FX0dFVFRFUih0ZCkKKyAgICBERUZJTkVf
R0VUVEVSKHRleHRhcmVhKQorICAgIERFRklORV9HRVRURVIodGZvb3QpCisgICAgREVGSU5FX0dF
VFRFUih0aCkKKyAgICBERUZJTkVfR0VUVEVSKHRoZWFkKQorICAgIERFRklORV9HRVRURVIodGl0
bGUpCisgICAgREVGSU5FX0dFVFRFUih0cikKKyAgICBERUZJTkVfR0VUVEVSKHR0KQorICAgIERF
RklORV9HRVRURVIodSkKKyAgICBERUZJTkVfR0VUVEVSKHVsKQorICAgIERFRklORV9HRVRURVIo
dmFyKQorICAgIERFRklORV9HRVRURVIod2JyKQorICAgIERFRklORV9HRVRURVIoeG1wKQogCiAg
ICAgLy8gQXR0cmlidXRlIG5hbWVzLgorI2VuZGlmCisKKyAgICAvLyBJbml0IHJvdXRpbmUKKyAg
ICBzdGF0aWMgdm9pZCBpbml0KCk7CiB9OwogCiB9CkluZGV4OiBraHRtbC9odG1sL2h0bWxwYXJz
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwv
aHRtbHBhcnNlci5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuOTYKZGlmZiAtdSAtcCAtcjEu
OTYga2h0bWwvaHRtbC9odG1scGFyc2VyLmNwcAotLS0ga2h0bWwvaHRtbC9odG1scGFyc2VyLmNw
cAkxMSBNYXkgMjAwNSAwMDo1ODoyOCAtMDAwMAkxLjk2CisrKyBraHRtbC9odG1sL2h0bWxwYXJz
ZXIuY3BwCTggSnVsIDIwMDUgMDU6NTc6MjggLTAwMDAKQEAgLTQ0LDkgKzQ0LDEyIEBACiAjaW5j
bHVkZSAiaHRtbC9odG1sX21pc2NpbXBsLmgiCiAjaW5jbHVkZSAiaHRtbC9odG1sX3RhYmxlaW1w
bC5oIgogI2luY2x1ZGUgImh0bWwvaHRtbF9vYmplY3RpbXBsLmgiCisjaW5jbHVkZSAiaHRtbGZh
Y3RvcnkuaCIKICNpbmNsdWRlICJ4bWwvZG9tX3RleHRpbXBsLmgiCiAjaW5jbHVkZSAieG1sL2Rv
bV9ub2RlaW1wbC5oIgogI2luY2x1ZGUgIm1pc2MvaHRtbGhhc2hlcy5oIgorI2luY2x1ZGUgIm1p
c2MvbWFpbl90aHJlYWRfbWFsbG9jLmgiCisjaW5jbHVkZSAibWlzYy9oYXNoc2V0LmgiCiAjaW5j
bHVkZSAiaHRtbC9odG1sdG9rZW5pemVyLmgiCiAjaW5jbHVkZSAia2h0bWx2aWV3LmgiCiAjaW5j
bHVkZSAia2h0bWxfcGFydC5oIgpAQCAtNTUsNiArNTgsOCBAQAogCiAjaW5jbHVkZSAicmVuZGVy
aW5nL3JlbmRlcl9vYmplY3QuaCIKIAorI2luY2x1ZGUgIm1pc2MvcG9pbnRlcmhhc2guaCIKKwog
I2luY2x1ZGUgPGtkZWJ1Zy5oPgogI2luY2x1ZGUgPGtsb2NhbGUuaD4KIApAQCAtNjksMjQgKzc0
LDI2IEBAIHVzaW5nIG5hbWVzcGFjZSBraHRtbDsKIGNsYXNzIEhUTUxTdGFja0VsZW0KIHsKIHB1
YmxpYzoKLSAgICBIVE1MU3RhY2tFbGVtKCBpbnQgX2lkLAotICAgICAgICAgICAgICAgICAgIGlu
dCBfbGV2ZWwsCi0gICAgICAgICAgICAgICAgICAgRE9NOjpOb2RlSW1wbCAqX25vZGUsCi0gICAg
ICAgICAgICAgICAgICAgSFRNTFN0YWNrRWxlbSAqIF9uZXh0CisgICAgSFRNTFN0YWNrRWxlbShj
b25zdCBBdG9taWNTdHJpbmcmIF90YWdOYW1lLAorICAgICAgICAgICAgICAgICAgaW50IF9sZXZl
bCwKKyAgICAgICAgICAgICAgICAgIERPTTo6Tm9kZUltcGwgKl9ub2RlLAorICAgICAgICAgICAg
ICAgICAgSFRNTFN0YWNrRWxlbSAqIF9uZXh0CiAgICAgICAgICkKICAgICAgICAgOgotICAgICAg
ICBpZChfaWQpLAorICAgICAgICB0YWdOYW1lKF90YWdOYW1lKSwKICAgICAgICAgbGV2ZWwoX2xl
dmVsKSwKICAgICAgICAgc3RyYXlUYWJsZUNvbnRlbnQoZmFsc2UpLAogICAgICAgICBub2RlKF9u
b2RlKSwKICAgICAgICAgbmV4dChfbmV4dCkKICAgICAgICAgeyB9CiAKLSAgICBpbnQgICAgICAg
aWQ7Ci0gICAgaW50ICAgICAgIGxldmVsOwotICAgIGJvb2wgICAgICBzdHJheVRhYmxlQ29udGVu
dDsKLSAgICBOb2RlSW1wbCAqbm9kZTsKLSAgICBIVE1MU3RhY2tFbGVtICpuZXh0OworICAgIE1B
SU5fVEhSRUFEX0FMTE9DQVRFRDsKKworICAgIEF0b21pY1N0cmluZyB0YWdOYW1lOworICAgIGlu
dCBsZXZlbDsKKyAgICBib29sIHN0cmF5VGFibGVDb250ZW50OworICAgIE5vZGVJbXBsKiBub2Rl
OworICAgIEhUTUxTdGFja0VsZW0qIG5leHQ7CiB9OwogCiAvKioKQEAgLTExMiwxNCArMTE5LDkg
QEAgcHVibGljOgogICogICAgZWxlbWVudCBvciBpZ25vcmUgdGhlIHRhZy4KICAqCiAgKi8KLUtI
VE1MUGFyc2VyOjpLSFRNTFBhcnNlcihLSFRNTFZpZXcgKl9wYXJlbnQsIERvY3VtZW50UHRyICpk
b2MsIGJvb2wgaW5jbHVkZXNDb21tZW50cykgCitIVE1MUGFyc2VyOjpIVE1MUGFyc2VyKEtIVE1M
VmlldyAqX3BhcmVudCwgRG9jdW1lbnRQdHIgKmRvYywgYm9vbCBpbmNsdWRlc0NvbW1lbnRzKSAK
ICAgICA6IGN1cnJlbnQoMCksIGN1cnJlbnRJc1JlZmVyZW5jZWQoZmFsc2UpLCBpbmNsdWRlc0Nv
bW1lbnRzSW5ET00oaW5jbHVkZXNDb21tZW50cykKIHsKLSAgICAvL2tkRGVidWcoIDYwMzUgKSA8
PCAicGFyc2VyIGNvbnN0cnVjdG9yIiA8PCBlbmRsOwotI2lmIFNQRUVEX0RFQlVHID4gMAotICAg
IHF0LnN0YXJ0KCk7Ci0jZW5kaWYKLQogICAgIEhUTUxXaWRnZXQgICAgPSBfcGFyZW50OwogICAg
IGRvY3VtZW50ICAgICAgPSBkb2M7CiAgICAgZG9jdW1lbnQtPnJlZigpOwpAQCAtMTI5LDcgKzEz
MSw3IEBAIEtIVE1MUGFyc2VyOjpLSFRNTFBhcnNlcihLSFRNTFZpZXcgKl9wYXIKICAgICByZXNl
dCgpOwogfQogCi1LSFRNTFBhcnNlcjo6S0hUTUxQYXJzZXIoRE9NOjpEb2N1bWVudEZyYWdtZW50
SW1wbCAqaSwgRG9jdW1lbnRQdHIgKmRvYywgYm9vbCBpbmNsdWRlc0NvbW1lbnRzKQorSFRNTFBh
cnNlcjo6SFRNTFBhcnNlcihET006OkRvY3VtZW50RnJhZ21lbnRJbXBsICppLCBEb2N1bWVudFB0
ciAqZG9jLCBib29sIGluY2x1ZGVzQ29tbWVudHMpCiAgICAgOiBjdXJyZW50KDApLCBjdXJyZW50
SXNSZWZlcmVuY2VkKGZhbHNlKSwgaW5jbHVkZXNDb21tZW50c0luRE9NKGluY2x1ZGVzQ29tbWVu
dHMpCiB7CiAgICAgSFRNTFdpZGdldCA9IDA7CkBAIC0xNDMsMTIgKzE0NSw4IEBAIEtIVE1MUGFy
c2VyOjpLSFRNTFBhcnNlcihET006OkRvY3VtZW50RnIKICAgICBpbkJvZHkgPSB0cnVlOwogfQog
Ci1LSFRNTFBhcnNlcjo6fktIVE1MUGFyc2VyKCkKK0hUTUxQYXJzZXI6On5IVE1MUGFyc2VyKCkK
IHsKLSNpZiBTUEVFRF9ERUJVRyA+IDAKLSAgICBrZERlYnVnKCApIDw8ICJUSU1FOiBwYXJzaW5n
IHRpbWUgd2FzID0gIiA8PCBxdC5lbGFwc2VkKCkgPDwgZW5kbDsKLSNlbmRpZgotCiAgICAgZnJl
ZUJsb2NrKCk7CiAKICAgICBzZXRDdXJyZW50KDApOwpAQCAtMTU5LDE1ICsxNTcsMTIgQEAgS0hU
TUxQYXJzZXI6On5LSFRNTFBhcnNlcigpCiAgICAgICAgIGlzaW5kZXgtPmRlcmVmKCk7CiB9CiAK
LXZvaWQgS0hUTUxQYXJzZXI6OnJlc2V0KCkKK3ZvaWQgSFRNTFBhcnNlcjo6cmVzZXQoKQogewog
ICAgIHNldEN1cnJlbnQoZG9jKCkpOwogCiAgICAgZnJlZUJsb2NrKCk7CiAKLSAgICAvLyBiZWZv
cmUgcGFyc2luZywgbm8gdGFncyBhcmUgZm9yYmlkZGVuCi0gICAgbWVtc2V0KGZvcmJpZGRlblRh
ZywgMCwgc2l6ZW9mKGZvcmJpZGRlblRhZykpOwotCiAgICAgaW5Cb2R5ID0gZmFsc2U7CiAgICAg
aGF2ZUZyYW1lU2V0ID0gZmFsc2U7CiAgICAgaGF2ZUNvbnRlbnQgPSBmYWxzZTsKQEAgLTE4MCwx
MCArMTc1LDEwIEBAIHZvaWQgS0hUTUxQYXJzZXI6OnJlc2V0KCkKICAgICBlbmQgPSBmYWxzZTsK
ICAgICBpc2luZGV4ID0gMDsKICAgICAKLSAgICBkaXNjYXJkX3VudGlsID0gMDsKKyAgICBkaXNj
YXJkX3VudGlsID0gbnVsbEF0b207CiB9CiAKLXZvaWQgS0hUTUxQYXJzZXI6OnNldEN1cnJlbnQo
RE9NOjpOb2RlSW1wbCAqbmV3Q3VycmVudCkgCit2b2lkIEhUTUxQYXJzZXI6OnNldEN1cnJlbnQo
RE9NOjpOb2RlSW1wbCAqbmV3Q3VycmVudCkgCiB7CiAgICAgYm9vbCBuZXdDdXJyZW50SXNSZWZl
cmVuY2VkID0gbmV3Q3VycmVudCAmJiBuZXdDdXJyZW50ICE9IGRvYygpOwogICAgIGlmIChuZXdD
dXJyZW50SXNSZWZlcmVuY2VkKSAKQEAgLTE5NCwxNDQgKzE4OSwxMDggQEAgdm9pZCBLSFRNTFBh
cnNlcjo6c2V0Q3VycmVudChET006Ok5vZGVJbQogICAgIGN1cnJlbnRJc1JlZmVyZW5jZWQgPSBu
ZXdDdXJyZW50SXNSZWZlcmVuY2VkOwogfQogCi12b2lkIEtIVE1MUGFyc2VyOjpwYXJzZVRva2Vu
KFRva2VuICp0KQordm9pZCBIVE1MUGFyc2VyOjpwYXJzZVRva2VuKFRva2VuICp0KQogewotICAg
IGlmKGRpc2NhcmRfdW50aWwpIHsKLSAgICAgICAgaWYodC0+aWQgPT0gZGlzY2FyZF91bnRpbCkK
LSAgICAgICAgICAgIGRpc2NhcmRfdW50aWwgPSAwOworICAgIGlmICghZGlzY2FyZF91bnRpbC5p
c051bGwoKSkgeworICAgICAgICBpZiAodC0+dGFnTmFtZSA9PSBkaXNjYXJkX3VudGlsICYmICF0
LT5iZWdpblRhZykKKyAgICAgICAgICAgIGRpc2NhcmRfdW50aWwgPSBudWxsQXRvbTsKIAogICAg
ICAgICAvLyBkbyBub3Qgc2tpcCA8L2lmcmFtZT4KLSAgICAgICAgaWYgKCBkaXNjYXJkX3VudGls
IHx8IGN1cnJlbnQtPmlkKCkgKyBJRF9DTE9TRV9UQUcgIT0gdC0+aWQgKQorICAgICAgICBpZiAo
IWRpc2NhcmRfdW50aWwuaXNOdWxsKCkgfHwgKGN1cnJlbnQtPmxvY2FsTmFtZSgpICE9IHQtPnRh
Z05hbWUpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotI2lmZGVmIFBBUlNFUl9ERUJV
RwotICAgIGtkRGVidWcoIDYwMzUgKSA8PCAiXG5cbj09PiBwYXJzZXI6IHByb2Nlc3NpbmcgdG9r
ZW4gIiA8PCBnZXRUYWdOYW1lKHQtPmlkKS5zdHJpbmcoKSA8PCAiKCIgPDwgdC0+aWQgPDwgIiki
Ci0gICAgICAgICAgICAgICAgICAgIDw8ICIgY3VycmVudCA9ICIgPDwgZ2V0VGFnTmFtZShjdXJy
ZW50LT5pZCgpKS5zdHJpbmcoKSA8PCAiKCIgPDwgY3VycmVudC0+aWQoKSA8PCAiKSIgPDwgZW5k
bDsKLSAgICBrZERlYnVnKDYwMzUpIDw8ICIgaW5Cb2R5PSIgPDwgaW5Cb2R5IDw8ICIgaGF2ZUZy
YW1lU2V0PSIgPDwgaGF2ZUZyYW1lU2V0IDw8IGVuZGw7Ci0jZW5kaWYKKyAgICAvLyBBcHBhcmVu
dGx5IHNvbWUgc2l0ZXMgdXNlIDwvYnI+IGluc3RlYWQgb2YgPGJyPi4gIEJlIGNvbXBhdGlibGUg
d2l0aCBJRSBhbmQgRmlyZWZveCBhbmQgdHJlYXQgdGhpcyBsaWtlIDxicj4uCisgICAgaWYgKHQt
PmlzQ2xvc2VUYWcoSFRNTE5hbWVzOjpicigpKSAmJiBkb2MoKS0+aW5Db21wYXRNb2RlKCkpCisg
ICAgICAgIHQtPmJlZ2luVGFnID0gdHJ1ZTsKIAotICAgIC8vIGhvbHkgc2hpdC4gYXBwYXJlbnRs
eSBzb21lIHNpdGVzIHVzZSA8L2JyPiBpbnN0ZWFkIG9mIDxicj4KLSAgICAvLyBiZSBjb21wYXRp
YmxlIHdpdGggSUUgYW5kIE5TCi0gICAgaWYgKHQtPmlkID09IElEX0JSICsgSURfQ0xPU0VfVEFH
ICYmIGRvYygpLT5pbkNvbXBhdE1vZGUoKSkKLSAgICAgICAgdC0+aWQgPSBJRF9CUjsKLQotICAg
IGlmICh0LT5pZCA+IElEX0NMT1NFX1RBRykKLSAgICB7CisgICAgaWYgKCF0LT5iZWdpblRhZykg
ewogICAgICAgICBwcm9jZXNzQ2xvc2VUYWcodCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
ICAgICAvLyBpZ25vcmUgc3BhY2VzLCBpZiB3ZSdyZSBub3QgaW5zaWRlIGEgcGFyYWdyYXBoIG9y
IG90aGVyIGlubGluZSBjb2RlCi0gICAgaWYoIHQtPmlkID09IElEX1RFWFQgJiYgdC0+dGV4dCAp
IHsKLSAgICAgICAgaWYoaW5Cb2R5ICYmICFza2lwTW9kZSgpICYmIGN1cnJlbnQtPmlkKCkgIT0g
SURfU1RZTEUgCi0gICAgICAgICAgICAmJiBjdXJyZW50LT5pZCgpICE9IElEX1RJVExFICYmIGN1
cnJlbnQtPmlkKCkgIT0gSURfU0NSSVBUICYmCi0gICAgICAgICAgICAhdC0+dGV4dC0+Y29udGFp
bnNPbmx5V2hpdGVzcGFjZSgpKSAKKyAgICBpZiAodC0+dGFnTmFtZSA9PSB0ZXh0QXRvbSAmJiB0
LT50ZXh0KSB7CisgICAgICAgIGlmIChpbkJvZHkgJiYgIXNraXBNb2RlKCkgJiYgY3VycmVudC0+
bG9jYWxOYW1lKCkgIT0gSFRNTE5hbWVzOjpzdHlsZSgpICYmIGN1cnJlbnQtPmxvY2FsTmFtZSgp
ICE9IEhUTUxOYW1lczo6dGl0bGUoKSAmJiAKKyAgICAgICAgICAgIGN1cnJlbnQtPmxvY2FsTmFt
ZSgpICE9IEhUTUxOYW1lczo6c2NyaXB0KCkgJiYgIXQtPnRleHQtPmNvbnRhaW5zT25seVdoaXRl
c3BhY2UoKSkgCiAgICAgICAgICAgICBoYXZlQ29udGVudCA9IHRydWU7Ci0jaWZkZWYgUEFSU0VS
X0RFQlVHCi0gICAgICAgIGtkRGVidWcoNjAzNSkgPDwgImxlbmd0aD0iPDwgdC0+dGV4dC0+bCA8
PCAiIHRleHQ9JyIgPDwgUUNvbnN0U3RyaW5nKHQtPnRleHQtPnMsIHQtPnRleHQtPmwpLnN0cmlu
ZygpIDw8ICInIiA8PCBlbmRsOwotI2VuZGlmCiAgICAgfQogCi0gICAgTm9kZUltcGwgKm4gPSBn
ZXRFbGVtZW50KHQpOworICAgIE5vZGVJbXBsICpuID0gZ2V0Tm9kZSh0KTsKICAgICAvLyBqdXN0
IHRvIGJlIHN1cmUsIGFuZCB0byBjYXRjaCBjdXJyZW50bHkgdW5pbXBsZW1lbnRlZCBzdHVmZgot
ICAgIGlmKCFuKQorICAgIGlmICghbikKICAgICAgICAgcmV0dXJuOwogCiAgICAgU2hhcmVkUHRy
PE5vZGVJbXBsPiBwcm90ZWN0Tm9kZShuKTsKIAogICAgIC8vIHNldCBhdHRyaWJ1dGVzCi0gICAg
aWYobi0+aXNFbGVtZW50Tm9kZSgpKQotICAgIHsKLSAgICAgICAgRWxlbWVudEltcGwgKmUgPSBz
dGF0aWNfY2FzdDxFbGVtZW50SW1wbCAqPihuKTsKKyAgICBpZiAobi0+aXNIVE1MRWxlbWVudCgp
KSB7CisgICAgICAgIEhUTUxFbGVtZW50SW1wbCAqZSA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50
SW1wbCo+KG4pOwogICAgICAgICBlLT5zZXRBdHRyaWJ1dGVNYXAodC0+YXR0cnMpOwogCiAgICAg
ICAgIC8vIHRha2UgY2FyZSBvZiBvcHRpb25hbCBjbG9zZSB0YWdzCi0gICAgICAgIGlmKGVuZFRh
Z1JlcXVpcmVtZW50KGUtPmlkKCkpID09IERPTTo6T1BUSU9OQUwpCi0gICAgICAgICAgICBwb3BC
bG9jayh0LT5pZCk7CisgICAgICAgIGlmIChlLT5lbmRUYWdSZXF1aXJlbWVudCgpID09IFRhZ1N0
YXR1c09wdGlvbmFsKQorICAgICAgICAgICAgcG9wQmxvY2sodC0+dGFnTmFtZSk7CiAgICAgICAg
ICAgICAKLSAgICAgICAgaWYgKGlzSGVhZGVyVGFnKHQtPmlkKSkKKyAgICAgICAgaWYgKGlzSGVh
ZGVyVGFnKHQtPnRhZ05hbWUpKQogICAgICAgICAgICAgLy8gRG8gbm90IGFsbG93IHR3byBoZWFk
ZXIgdGFncyB0byBiZSBuZXN0ZWQgaWYgdGhlIGludGVydmVuaW5nIHRhZ3MgYXJlIGlubGluZXMu
CiAgICAgICAgICAgICBwb3BOZXN0ZWRIZWFkZXJUYWcoKTsKICAgICB9CiAKLSAgICAvLyBpZiB0
aGlzIHRhZyBpcyBmb3JiaWRkZW4gaW5zaWRlIHRoZSBjdXJyZW50IGNvbnRleHQsIHBvcAotICAg
IC8vIGJsb2NrcyB1bnRpbCB3ZSBhcmUgYWxsb3dlZCB0byBhZGQgaXQuLi4KLSAgICB3aGlsZSAo
YmxvY2tTdGFjayAmJiB0LT5pZCA8PSBJRF9MQVNUX1RBRyAmJiBmb3JiaWRkZW5UYWdbdC0+aWRd
KSB7Ci0jaWZkZWYgUEFSU0VSX0RFQlVHCi0gICAgICAgIGtkRGVidWcoIDYwMzUgKSA8PCAidC0+
aWQ6ICIgPDwgdC0+aWQgPDwgIiBpcyBmb3JiaWRkZW4gOi0oICIgPDwgZW5kbDsKLSNlbmRpZgot
ICAgICAgICBwb3BPbmVCbG9jaygpOwotICAgIH0KLQotICAgIGlmICghaW5zZXJ0Tm9kZShuLCB0
LT5mbGF0KSkgCi0gICAgeworICAgIGlmICghaW5zZXJ0Tm9kZShuLCB0LT5mbGF0KSkgewogICAg
ICAgICAvLyB3ZSBjb3VsZG4ndCBpbnNlcnQgdGhlIG5vZGUuLi4KLSAgICAgICAgCi0gICAgICAg
IGlmKG4tPmlzRWxlbWVudE5vZGUoKSkKLSAgICAgICAgewotICAgICAgICAgICAgRWxlbWVudElt
cGwgKmUgPSBzdGF0aWNfY2FzdDxFbGVtZW50SW1wbCAqPihuKTsKKyAgICAgICAgaWYgKG4tPmlz
RWxlbWVudE5vZGUoKSkgeworICAgICAgICAgICAgRWxlbWVudEltcGwqIGUgPSBzdGF0aWNfY2Fz
dDxFbGVtZW50SW1wbCo+KG4pOwogICAgICAgICAgICAgZS0+c2V0QXR0cmlidXRlTWFwKDApOwog
ICAgICAgICB9CiAgICAgICAgICAgICAKLSNpZmRlZiBQQVJTRVJfREVCVUcKLSAgICAgICAga2RE
ZWJ1ZyggNjAzNSApIDw8ICJpbnNlcnROb2RlIGZhaWxlZCBjdXJyZW50PSIgPDwgY3VycmVudC0+
aWQoKSA8PCAiLCBuZXc9IiA8PCBuLT5pZCgpIDw8ICIhIiA8PCBlbmRsOwotI2VuZGlmCiAgICAg
ICAgIGlmIChtYXAgPT0gbikKLSAgICAgICAgewotI2lmZGVmIFBBUlNFUl9ERUJVRwotICAgICAg
ICAgICAga2REZWJ1ZyggNjAzNSApIDw8ICIgIC0tPiByZXNldHRpbmcgbWFwISIgPDwgZW5kbDsK
LSNlbmRpZgogICAgICAgICAgICAgbWFwID0gMDsKLSAgICAgICAgfQorCiAgICAgICAgIGlmIChm
b3JtID09IG4pCi0gICAgICAgIHsKLSNpZmRlZiBQQVJTRVJfREVCVUcKLSAgICAgICAgICAgIGtk
RGVidWcoIDYwMzUgKSA8PCAiICAgLS0+IHJlc2V0dGluZyBmb3JtISIgPDwgZW5kbDsKLSNlbmRp
ZgogICAgICAgICAgICAgZm9ybSA9IDA7Ci0gICAgICAgIH0KICAgICB9CiB9CiAKLXN0YXRpYyBi
b29sIGlzVGFibGVSZWxhdGVkVGFnKGludCBpZCkKK3N0YXRpYyBib29sIGlzVGFibGVTZWN0aW9u
KE5vZGVJbXBsKiBuKQogewotICAgIHJldHVybiAoaWQgPT0gSURfVFIgfHwgaWQgPT0gSURfVEQg
fHwgaWQgPT0gSURfVEFCTEUgfHwgaWQgPT0gSURfVEJPRFkgfHwgaWQgPT0gSURfVEZPT1QgfHwg
aWQgPT0gSURfVEhFQUQgfHwKLSAgICAgICAgICAgIGlkID09IElEX1RIKTsKKyAgICByZXR1cm4g
bi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRib2R5KCkpIHx8IG4tPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjp0Zm9vdCgpKSB8fCBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGhlYWQoKSk7CiB9CiAK
LWJvb2wgS0hUTUxQYXJzZXI6Omluc2VydE5vZGUoTm9kZUltcGwgKm4sIGJvb2wgZmxhdCkKK3N0
YXRpYyBib29sIGlzVGFibGVQYXJ0KE5vZGVJbXBsKiBuKQogewotICAgIFNoYXJlZFB0cjxOb2Rl
SW1wbD4gcHJvdGVjdE5vZGUobik7CisgICAgcmV0dXJuIG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVz
Ojp0cigpKSB8fCBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGQoKSkgfHwgbi0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OnRoKCkpIHx8CisgICAgICAgICAgIGlzVGFibGVTZWN0aW9uKG4pOworfQog
Ci0gICAgaW50IGlkID0gbi0+aWQoKTsKK3N0YXRpYyBib29sIGlzVGFibGVSZWxhdGVkKE5vZGVJ
bXBsKiBuKQoreworICAgIHJldHVybiBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGFibGUoKSkg
fHwgaXNUYWJsZVBhcnQobik7Cit9CisKK2Jvb2wgSFRNTFBhcnNlcjo6aW5zZXJ0Tm9kZShOb2Rl
SW1wbCAqbiwgYm9vbCBmbGF0KQoreworICAgIFNoYXJlZFB0cjxOb2RlSW1wbD4gcHJvdGVjdE5v
ZGUobik7CiAKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSA9IG4tPmxvY2FsTmFt
ZSgpOworICAgIGludCB0YWdQcmlvcml0eSA9IG4tPmlzSFRNTEVsZW1lbnQoKSA/IHN0YXRpY19j
YXN0PEhUTUxFbGVtZW50SW1wbCo+KG4pLT50YWdQcmlvcml0eSgpIDogMDsKKyAgICAgICAgCiAg
ICAgLy8gbGV0J3MgYmUgc3R1cGlkIGFuZCBqdXN0IHRyeSB0byBpbnNlcnQgaXQuCi0gICAgLy8g
dGhpcyBzaG91bGQgd29yayBpZiB0aGUgZG9jdW1lbnQgaXMgd2VsbGZvcm1lZAotI2lmZGVmIFBB
UlNFUl9ERUJVRwotICAgIE5vZGVJbXBsICp0bXAgPSBjdXJyZW50OwotI2VuZGlmCisgICAgLy8g
dGhpcyBzaG91bGQgd29yayBpZiB0aGUgZG9jdW1lbnQgaXMgd2VsbC1mb3JtZWQKICAgICBOb2Rl
SW1wbCAqbmV3Tm9kZSA9IGN1cnJlbnQtPmFkZENoaWxkKG4pOwotICAgIGlmICggbmV3Tm9kZSAp
IHsKLSNpZmRlZiBQQVJTRVJfREVCVUcKLSAgICAgICAga2REZWJ1ZyggNjAzNSApIDw8ICJhZGRl
ZCAiIDw8IG4tPm5vZGVOYW1lKCkuc3RyaW5nKCkgPDwgIiB0byAiIDw8IHRtcC0+bm9kZU5hbWUo
KS5zdHJpbmcoKSA8PCAiLCBuZXcgY3VycmVudD0iIDw8IG5ld05vZGUtPm5vZGVOYW1lKCkuc3Ry
aW5nKCkgPDwgZW5kbDsKLSNlbmRpZgotICAgICAgICAvLyBkb24ndCBwdXNoIGVsZW1lbnRzIHdp
dGhvdXQgZW5kIHRhZyBvbiB0aGUgc3RhY2sKLSAgICAgICAgaWYodGFnUHJpb3JpdHkoaWQpICE9
IDAgJiYgIWZsYXQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHB1c2hCbG9jayhpZCwgdGFnUHJp
b3JpdHkoaWQpKTsKKyAgICBpZiAobmV3Tm9kZSkgeworICAgICAgICAvLyBkb24ndCBwdXNoIGVs
ZW1lbnRzIHdpdGhvdXQgZW5kIHRhZ3MgKGUuZy4sIDxpbWc+KSBvbiB0aGUgc3RhY2sKKyAgICAg
ICAgaWYgKHRhZ1ByaW9yaXR5ID4gMCAmJiAhZmxhdCkgeworICAgICAgICAgICAgcHVzaEJsb2Nr
KGxvY2FsTmFtZSwgdGFnUHJpb3JpdHkpOwogICAgICAgICAgICAgaWYgKG5ld05vZGUgPT0gY3Vy
cmVudCkKLSAgICAgICAgICAgICAgICBwb3BCbG9jayhpZCk7CisgICAgICAgICAgICAgICAgcG9w
QmxvY2sobG9jYWxOYW1lKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBzZXRD
dXJyZW50KG5ld05vZGUpOwotI2lmIFNQRUVEX0RFQlVHIDwgMgotICAgICAgICAgICAgaWYoIW4t
PmF0dGFjaGVkKCkgJiYgSFRNTFdpZGdldCkKKyAgICAgICAgICAgIGlmICghbi0+YXR0YWNoZWQo
KSAmJiBIVE1MV2lkZ2V0KQogICAgICAgICAgICAgICAgIG4tPmF0dGFjaCgpOwotI2VuZGlmCiAg
ICAgICAgIH0KICAgICAgICAgZWxzZSB7Ci0jaWYgU1BFRURfREVCVUcgPCAyCi0gICAgICAgICAg
ICBpZighbi0+YXR0YWNoZWQoKSAmJiBIVE1MV2lkZ2V0KQorICAgICAgICAgICAgaWYgKCFuLT5h
dHRhY2hlZCgpICYmIEhUTUxXaWRnZXQpCiAgICAgICAgICAgICAgICAgbi0+YXR0YWNoKCk7CiAg
ICAgICAgICAgICBpZiAobi0+bWFpbnRhaW5zU3RhdGUoKSkgewogICAgICAgICAgICAgICAgIGRv
YygpLT5yZWdpc3Rlck1haW50YWluc1N0YXRlKG4pOwpAQCAtMzQwLDEwNCArMjk5LDg2IEBAIGJv
b2wgS0hUTUxQYXJzZXI6Omluc2VydE5vZGUoTm9kZUltcGwgKm4KICAgICAgICAgICAgICAgICAg
ICAgbi0+cmVzdG9yZVN0YXRlKHN0YXRlcyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBu
LT5jbG9zZVJlbmRlcmVyKCk7Ci0jZW5kaWYKICAgICAgICAgfQogCiAgICAgICAgIHJldHVybiB0
cnVlOwotICAgIH0gZWxzZSB7Ci0jaWZkZWYgUEFSU0VSX0RFQlVHCi0gICAgICAgIGtkRGVidWco
IDYwMzUgKSA8PCAiQURESU5HIE5PREUgRkFJTEVEISEhISBjdXJyZW50ID0gIiA8PCBjdXJyZW50
LT5ub2RlTmFtZSgpLnN0cmluZygpIDw8ICIsIG5ldyA9ICIgPDwgbi0+bm9kZU5hbWUoKS5zdHJp
bmcoKSA8PCBlbmRsOwotI2VuZGlmCi0gICAgICAgIC8vIGVycm9yIGhhbmRsaW5nLi4uCi0gICAg
ICAgIEhUTUxFbGVtZW50SW1wbCAqZTsKLSAgICAgICAgYm9vbCBoYW5kbGVkID0gZmFsc2U7Ci0K
LSAgICAgICAgLy8gc3dpdGNoIGFjY29yZGluZyB0byB0aGUgZWxlbWVudCB0byBpbnNlcnQKLSAg
ICAgICAgc3dpdGNoKGlkKQotICAgICAgICB7Ci0gICAgICAgIGNhc2UgSURfVFI6Ci0gICAgICAg
IGNhc2UgSURfVEg6Ci0gICAgICAgIGNhc2UgSURfVEQ6Ci0gICAgICAgICAgICBpZiAoaW5TdHJh
eVRhYmxlQ29udGVudCAmJiAhaXNUYWJsZVJlbGF0ZWRUYWcoY3VycmVudC0+aWQoKSkpIHsKKyAg
ICB9IGVsc2UKKyAgICAgICAgcmV0dXJuIGhhbmRsZUVycm9yKG4sIGZsYXQsIGxvY2FsTmFtZSwg
dGFnUHJpb3JpdHkpOyAvLyBUcnkgdG8gaGFuZGxlIHRoZSBlcnJvci4KK30KKworYm9vbCBIVE1M
UGFyc2VyOjpoYW5kbGVFcnJvcihOb2RlSW1wbCogbiwgYm9vbCBmbGF0LCBjb25zdCBBdG9taWNT
dHJpbmcmIGxvY2FsTmFtZSwgaW50IHRhZ1ByaW9yaXR5KQoreworICAgIC8vIEVycm9yIGhhbmRs
aW5nIGNvZGUuICBUaGlzIGlzIGp1c3QgYWQgaG9jIGhhbmRsaW5nIG9mIHNwZWNpZmljIHBhcmVu
dC9jaGlsZCBjb21iaW5hdGlvbnMuCisgICAgSFRNTEVsZW1lbnRJbXBsICplOworICAgIGJvb2wg
aGFuZGxlZCA9IGZhbHNlOworCisgICAgLy8gMS4gQ2hlY2sgb3V0IHRoZSBlbGVtZW50J3MgdGFn
IG5hbWUgdG8gZGVjaWRlIGhvdyB0byBkZWFsIHdpdGggZXJyb3JzLgorICAgIGlmIChuLT5pc1Rl
eHROb2RlKCkpIHsKKyAgICAgICAgaWYgKGN1cnJlbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpz
ZWxlY3QoKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfSBlbHNlIGlmIChuLT5p
c0hUTUxFbGVtZW50KCkpIHsKKyAgICAgICAgSFRNTEVsZW1lbnRJbXBsKiBoID0gc3RhdGljX2Nh
c3Q8SFRNTEVsZW1lbnRJbXBsKj4obik7CisgICAgICAgIGlmIChoLT5oYXNMb2NhbE5hbWUoSFRN
TE5hbWVzOjp0cigpKSB8fCBoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0aCgpKSB8fAorICAg
ICAgICAgICAgaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dGQoKSkpIHsKKyAgICAgICAgICAg
IGlmIChpblN0cmF5VGFibGVDb250ZW50ICYmICFpc1RhYmxlUmVsYXRlZChjdXJyZW50KSkgewog
ICAgICAgICAgICAgICAgIC8vIHBvcCBvdXQgdG8gdGhlIG5lYXJlc3QgZW5jbG9zaW5nIHRhYmxl
LXJlbGF0ZWQgdGFnLgotICAgICAgICAgICAgICAgIHdoaWxlIChibG9ja1N0YWNrICYmICFpc1Rh
YmxlUmVsYXRlZFRhZyhjdXJyZW50LT5pZCgpKSkKKyAgICAgICAgICAgICAgICB3aGlsZSAoYmxv
Y2tTdGFjayAmJiAhaXNUYWJsZVJlbGF0ZWQoY3VycmVudCkpCiAgICAgICAgICAgICAgICAgICAg
IHBvcE9uZUJsb2NrKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGluc2VydE5vZGUobik7CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJRF9DT01NRU5U
OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSURfSEVBRDoKLSAgICAgICAgICAg
IC8vICMjIyBhbGxsb3cgbm90IGhhdmluZyA8SFRNTD4gaW4gYXQgYWxsLCBhcyBwZXIgSFRNTCBz
cGVjCi0gICAgICAgICAgICBpZiAoIWN1cnJlbnQtPmlzRG9jdW1lbnROb2RlKCkgJiYgY3VycmVu
dC0+aWQoKSAhPSBJRF9IVE1MICkKKyAgICAgICAgfSBlbHNlIGlmIChoLT5oYXNMb2NhbE5hbWUo
SFRNTE5hbWVzOjpoZWFkKCkpKSB7CisgICAgICAgICAgICBpZiAoIWN1cnJlbnQtPmlzRG9jdW1l
bnROb2RlKCkgJiYgIWN1cnJlbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpodG1sKCkpKQogICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgLy8gV2UgY2FuIGRlYWwgd2l0aCBhIGJhc2UsIG1ldGEgYW5kIGxpbmsgZWxlbWVudCBpbiB0
aGUgYm9keSwgYnkganVzdCBhZGRpbmcgdGhlIGVsZW1lbnQgdG8gaGVhZC4KLSAgICAgICAgY2Fz
ZSBJRF9NRVRBOgotICAgICAgICBjYXNlIElEX0xJTks6Ci0gICAgICAgIGNhc2UgSURfQkFTRToK
LSAgICAgICAgICAgIGlmKCAhaGVhZCApCisgICAgICAgIH0gZWxzZSBpZiAoaC0+aGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6bWV0YSgpKSB8fCBoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpsaW5r
KCkpIHx8IGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmJhc2UoKSkpIHsKKyAgICAgICAgICAg
IGlmICghaGVhZCkKICAgICAgICAgICAgICAgICBjcmVhdGVIZWFkKCk7Ci0gICAgICAgICAgICBp
ZiggaGVhZCApIHsKLSAgICAgICAgICAgICAgICBpZiAoIGhlYWQtPmFkZENoaWxkKG4pICkgewot
I2lmIFNQRUVEX0RFQlVHIDwgMgotICAgICAgICAgICAgICAgICAgICBpZighbi0+YXR0YWNoZWQo
KSAmJiBIVE1MV2lkZ2V0KQorICAgICAgICAgICAgaWYgKGhlYWQpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoaGVhZC0+YWRkQ2hpbGQobikpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFuLT5h
dHRhY2hlZCgpICYmIEhUTUxXaWRnZXQpCiAgICAgICAgICAgICAgICAgICAgICAgICBuLT5hdHRh
Y2goKTsKLSNlbmRpZgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQkJfSBlbHNl
IHsKLQkJICAgIHJldHVybiBmYWxzZTsKLQkJfQorICAgICAgICAgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBJRF9IVE1MOgorICAgICAgICB9IGVsc2UgaWYgKGgtPmhh
c0xvY2FsTmFtZShIVE1MTmFtZXM6Omh0bWwoKSkpIHsKICAgICAgICAgICAgIGlmICghY3VycmVu
dC0+aXNEb2N1bWVudE5vZGUoKSApIHsKLQkJaWYgKCBkb2MoKS0+Zmlyc3RDaGlsZCgpLT5pZCgp
ID09IElEX0hUTUwpIHsKLQkJICAgIC8vIHdlIGhhdmUgYW5vdGhlciA8SFRNTD4gZWxlbWVudC4u
Li4gYXBwbHkgYXR0cmlidXRlcyB0byBleGlzdGluZyBvbmUKLQkJICAgIC8vIG1ha2Ugc3VyZSB3
ZSBkb24ndCBvdmVyd3JpdGUgYWxyZWFkeSBleGlzdGluZyBhdHRyaWJ1dGVzCi0JCSAgICBOYW1l
ZEF0dHJNYXBJbXBsICptYXAgPSBzdGF0aWNfY2FzdDxFbGVtZW50SW1wbCo+KG4pLT5hdHRyaWJ1
dGVzKHRydWUpOwotCQkgICAgTmFtZWRBdHRyTWFwSW1wbCAqYm1hcCA9IHN0YXRpY19jYXN0PEVs
ZW1lbnRJbXBsKj4oZG9jKCktPmZpcnN0Q2hpbGQoKSktPmF0dHJpYnV0ZXMoZmFsc2UpOwotCQkg
ICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7Ci0JCSAgICBmb3IgKHVuc2lnbmVkIGxvbmcgbCA9IDA7
IG1hcCAmJiBsIDwgbWFwLT5sZW5ndGgoKTsgKytsKSB7Ci0JCQlBdHRyaWJ1dGVJbXBsKiBpdCA9
IG1hcC0+YXR0cmlidXRlSXRlbShsKTsKLQkJCWNoYW5nZWQgPSAhYm1hcC0+Z2V0QXR0cmlidXRl
SXRlbShpdC0+aWQoKSk7Ci0JCQlibWFwLT5pbnNlcnRBdHRyaWJ1dGUoaXQtPmNsb25lKGZhbHNl
KSk7Ci0JCSAgICB9Ci0JCSAgICBpZiAoIGNoYW5nZWQgKQotCQkJZG9jKCktPnJlY2FsY1N0eWxl
KCBOb2RlSW1wbDo6SW5oZXJpdCApOwotCQl9CisgICAgICAgICAgICAgICAgaWYgKGRvYygpLT5m
aXJzdENoaWxkKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpodG1sKCkpKSB7CisgICAgICAgICAg
ICAgICAgICAgIC8vIHdlIGhhdmUgYW5vdGhlciA8SFRNTD4gZWxlbWVudC4uLi4gYXBwbHkgYXR0
cmlidXRlcyB0byBleGlzdGluZyBvbmUKKyAgICAgICAgICAgICAgICAgICAgLy8gbWFrZSBzdXJl
IHdlIGRvbid0IG92ZXJ3cml0ZSBhbHJlYWR5IGV4aXN0aW5nIGF0dHJpYnV0ZXMKKyAgICAgICAg
ICAgICAgICAgICAgTmFtZWRBdHRyTWFwSW1wbCAqbWFwID0gc3RhdGljX2Nhc3Q8RWxlbWVudElt
cGwqPihuKS0+YXR0cmlidXRlcyh0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgTmFtZWRBdHRy
TWFwSW1wbCAqYm1hcCA9IHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsKj4oZG9jKCktPmZpcnN0Q2hp
bGQoKSktPmF0dHJpYnV0ZXMoZmFsc2UpOworICAgICAgICAgICAgICAgICAgICBib29sIGNoYW5n
ZWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBsb25nIGwgPSAw
OyBtYXAgJiYgbCA8IG1hcC0+bGVuZ3RoKCk7ICsrbCkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgQXR0cmlidXRlSW1wbCogaXQgPSBtYXAtPmF0dHJpYnV0ZUl0ZW0obCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBjaGFuZ2VkID0gIWJtYXAtPmdldEF0dHJpYnV0ZUl0ZW0oaXQtPmlkKCkp
OworICAgICAgICAgICAgICAgICAgICAgICAgYm1hcC0+aW5zZXJ0QXR0cmlidXRlKGl0LT5jbG9u
ZShmYWxzZSkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlm
IChjaGFuZ2VkKQorICAgICAgICAgICAgICAgICAgICAgICAgZG9jKCktPnJlY2FsY1N0eWxlKE5v
ZGVJbXBsOjpJbmhlcml0KTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotCSAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJRF9U
SVRMRToKLSAgICAgICAgY2FzZSBJRF9TVFlMRToKLSAgICAgICAgICAgIGlmICggIWhlYWQgKQor
ICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFtZShIVE1MTmFt
ZXM6OnRpdGxlKCkpIHx8IGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnN0eWxlKCkpKSB7Cisg
ICAgICAgICAgICBpZiAoIWhlYWQpCiAgICAgICAgICAgICAgICAgY3JlYXRlSGVhZCgpOwotICAg
ICAgICAgICAgaWYgKCBoZWFkICkgeworICAgICAgICAgICAgaWYgKGhlYWQpIHsKICAgICAgICAg
ICAgICAgICBET006Ok5vZGVJbXBsICpuZXdOb2RlID0gaGVhZC0+YWRkQ2hpbGQobik7Ci0gICAg
ICAgICAgICAgICAgaWYgKCBuZXdOb2RlICkgewotICAgICAgICAgICAgICAgICAgICBwdXNoQmxv
Y2soaWQsIHRhZ1ByaW9yaXR5KGlkKSk7CisgICAgICAgICAgICAgICAgaWYgKG5ld05vZGUpIHsK
KyAgICAgICAgICAgICAgICAgICAgcHVzaEJsb2NrKGxvY2FsTmFtZSwgdGFnUHJpb3JpdHkpOwog
ICAgICAgICAgICAgICAgICAgICBzZXRDdXJyZW50KG5ld05vZGUpOwotI2lmIFNQRUVEX0RFQlVH
IDwgMgotCQkgICAgaWYoIW4tPmF0dGFjaGVkKCkgJiYgSFRNTFdpZGdldCkKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKCFuLT5hdHRhY2hlZCgpICYmIEhUTUxXaWRnZXQpCiAgICAgICAgICAgICAg
ICAgICAgICAgICBuLT5hdHRhY2goKTsKLSNlbmRpZgogICAgICAgICAgICAgICAgIH0gZWxzZSB7
Ci0jaWZkZWYgUEFSU0VSX0RFQlVHCi0gICAgICAgICAgICAgICAgICAgIGtkRGVidWcoIDYwMzUg
KSA8PCAiYWRkaW5nIHN0eWxlIGJlZm9yZSB0byBib2R5IGZhaWxlZCEhISEiIDw8IGVuZGw7Ci0j
ZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgZGlzY2FyZF91bnRpbCA9IElEX1NUWUxFICsgSURf
Q0xPU0VfVEFHOworICAgICAgICAgICAgICAgICAgICBzZXRTa2lwTW9kZShIVE1MTmFtZXM6OnN0
eWxlKCkpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfSBlbHNlIGlm
KGluQm9keSkgewotICAgICAgICAgICAgICAgIGRpc2NhcmRfdW50aWwgPSBJRF9TVFlMRSArIElE
X0NMT1NFX1RBRzsKKyAgICAgICAgICAgICAgICBzZXRTa2lwTW9kZShIVE1MTmFtZXM6OnN0eWxl
KCkpOwogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgLy8gU0NSSVBUIGFuZCBPQkpFQ1QgYXJlIGFsbG93
ZWQgaW4gdGhlIGJvZHkuCi0gICAgICAgIGNhc2UgSURfQk9EWToKLSAgICAgICAgICAgIGlmKGlu
Qm9keSAmJiBkb2MoKS0+Ym9keSgpKSB7CisgICAgICAgIH0gZWxzZSBpZiAoaC0+aGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6Ym9keSgpKSkgeworICAgICAgICAgICAgaWYgKGluQm9keSAmJiBkb2Mo
KS0+Ym9keSgpKSB7CiAgICAgICAgICAgICAgICAgLy8gd2UgaGF2ZSBhbm90aGVyIDxCT0RZPiBl
bGVtZW50Li4uLiBhcHBseSBhdHRyaWJ1dGVzIHRvIGV4aXN0aW5nIG9uZQogICAgICAgICAgICAg
ICAgIC8vIG1ha2Ugc3VyZSB3ZSBkb24ndCBvdmVyd3JpdGUgYWxyZWFkeSBleGlzdGluZyBhdHRy
aWJ1dGVzCiAgICAgICAgICAgICAgICAgLy8gc29tZSBzaXRlcyB1c2UgPGJvZHkgYmdjb2xvcj1y
aWdodGNvbG9yPi4uLjxib2R5IGJnY29sb3I9d3Jvbmdjb2xvcj4KQEAgLTQ0OSw2NjEgKzM5MCw1
ODcgQEAgYm9vbCBLSFRNTFBhcnNlcjo6aW5zZXJ0Tm9kZShOb2RlSW1wbCAqbgogICAgICAgICAg
ICAgICAgICAgICBjaGFuZ2VkID0gIWJtYXAtPmdldEF0dHJpYnV0ZUl0ZW0oaXQtPmlkKCkpOwog
ICAgICAgICAgICAgICAgICAgICBibWFwLT5pbnNlcnRBdHRyaWJ1dGUoaXQtPmNsb25lKGZhbHNl
KSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICggY2hhbmdlZCApCi0g
ICAgICAgICAgICAgICAgICAgIGRvYygpLT5yZWNhbGNTdHlsZSggTm9kZUltcGw6OkluaGVyaXQg
KTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoIGN1cnJlbnQtPmlzRG9jdW1lbnROb2RlKCkgKQot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIC8vIHRoZSBmb2xsb3dpbmcgaXMgYSBoYWNrIHRv
IG1vdmUgbm9uIHJlbmRlcmVkIGVsZW1lbnRzCi0gICAgICAgICAgICAvLyBvdXRzaWRlIG9mIHRh
Ymxlcy4KLSAgICAgICAgICAgIC8vIG5lZWRlZCBmb3IgYnJva2VuIGNvbnN0cnVjdHMgbGlrZSA8
dGFibGU+PGZvcm0gLi4uPjx0cj4uLi4uCi0gICAgICAgIGNhc2UgSURfSU5QVVQ6Ci0gICAgICAg
IHsKLSAgICAgICAgICAgIEVsZW1lbnRJbXBsICplID0gc3RhdGljX2Nhc3Q8RWxlbWVudEltcGwg
Kj4obik7Ci0gICAgICAgICAgICBET01TdHJpbmcgdHlwZSA9IGUtPmdldEF0dHJpYnV0ZShBVFRS
X1RZUEUpOwotCi0gICAgICAgICAgICBpZiAoIHN0cmNhc2VjbXAoIHR5cGUsICJoaWRkZW4iICkg
PT0gMCAmJiBmb3JtKSB7CisgICAgICAgICAgICAgICAgaWYgKGNoYW5nZWQpCisgICAgICAgICAg
ICAgICAgICAgIGRvYygpLT5yZWNhbGNTdHlsZShOb2RlSW1wbDo6SW5oZXJpdCk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBp
ZiAoIWN1cnJlbnQtPmlzRG9jdW1lbnROb2RlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmlucHV0
KCkpKSB7CisgICAgICAgICAgICBET01TdHJpbmcgdHlwZSA9IGgtPmdldEF0dHJpYnV0ZShBVFRS
X1RZUEUpOworICAgICAgICAgICAgaWYgKHN0cmNhc2VjbXAodHlwZSwgImhpZGRlbiIpID09IDAg
JiYgZm9ybSkgewogICAgICAgICAgICAgICAgIGZvcm0tPmFkZENoaWxkKG4pOwotI2lmIFNQRUVE
X0RFQlVHIDwgMgotICAgICAgICAgICAgICAgIGlmKCFuLT5hdHRhY2hlZCgpICYmIEhUTUxXaWRn
ZXQpCisgICAgICAgICAgICAgICAgaWYgKCFuLT5hdHRhY2hlZCgpICYmIEhUTUxXaWRnZXQpCiAg
ICAgICAgICAgICAgICAgICAgIG4tPmF0dGFjaCgpOwotI2VuZGlmCiAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgICBjYXNlIElEX1RFWFQ6Ci0gICAgICAgICAgICAvLyBpZ25vcmUgdGV4dCBpbnNp
ZGUgdGhlIGZvbGxvd2luZyBlbGVtZW50cy4KLSAgICAgICAgICAgIHN3aXRjaChjdXJyZW50LT5p
ZCgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgY2FzZSBJRF9TRUxFQ1Q6Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
ICAgICA7Ci0gICAgICAgICAgICAgICAgLy8gZmFsbCB0aHJvdWdoISEKLSAgICAgICAgICAgIH07
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJRF9ERDoKLSAgICAgICAgY2FzZSBJ
RF9EVDoKKyAgICAgICAgfSBlbHNlIGlmIChoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpkZCgp
KSB8fCBoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpkdCgpKSkgewogICAgICAgICAgICAgZSA9
IG5ldyBIVE1MRExpc3RFbGVtZW50SW1wbChkb2N1bWVudCk7Ci0gICAgICAgICAgICBpZiAoIGlu
c2VydE5vZGUoZSkgKSB7CisgICAgICAgICAgICBpZiAoaW5zZXJ0Tm9kZShlKSkgewogICAgICAg
ICAgICAgICAgIGluc2VydE5vZGUobik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJRF9BUkVBOgot
ICAgICAgICB7Ci0gICAgICAgICAgICBpZihtYXApCi0gICAgICAgICAgICB7CisgICAgICAgIH0g
ZWxzZSBpZiAoaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6YXJlYSgpKSkgeworICAgICAgICAg
ICAgaWYgKG1hcCkgewogICAgICAgICAgICAgICAgIG1hcC0+YWRkQ2hpbGQobik7Ci0jaWYgU1BF
RURfREVCVUcgPCAyCi0gICAgICAgICAgICAgICAgaWYoIW4tPmF0dGFjaGVkKCkgJiYgSFRNTFdp
ZGdldCkKKyAgICAgICAgICAgICAgICBpZiAoIW4tPmF0dGFjaGVkKCkgJiYgSFRNTFdpZGdldCkK
ICAgICAgICAgICAgICAgICAgICAgbi0+YXR0YWNoKCk7Ci0jZW5kaWYKICAgICAgICAgICAgICAg
ICBoYW5kbGVkID0gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgfQotICAgICAgICBjYXNlIElEX0NBUFRJT046IHsKLSAgICAgICAgICAgIHN3aXRjaCAoY3Vy
cmVudC0+aWQoKSkgewotICAgICAgICAgICAgICAgIGNhc2UgSURfVEhFQUQ6Ci0gICAgICAgICAg
ICAgICAgY2FzZSBJRF9UQk9EWToKLSAgICAgICAgICAgICAgICBjYXNlIElEX1RGT09UOgotICAg
ICAgICAgICAgICAgIGNhc2UgSURfVFI6Ci0gICAgICAgICAgICAgICAgY2FzZSBJRF9USDoKLSAg
ICAgICAgICAgICAgICBjYXNlIElEX1REOiB7Ci0gICAgICAgICAgICAgICAgICAgIE5vZGVJbXBs
KiB0c2VjdGlvbiA9IGN1cnJlbnQ7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50LT5p
ZCgpID09IElEX1RSKQotICAgICAgICAgICAgICAgICAgICAgICAgdHNlY3Rpb24gPSBjdXJyZW50
LT5wYXJlbnQoKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY3VycmVudC0+aWQoKSA9
PSBJRF9URCB8fCBjdXJyZW50LT5pZCgpID09IElEX1RIKQotICAgICAgICAgICAgICAgICAgICAg
ICAgdHNlY3Rpb24gPSBjdXJyZW50LT5wYXJlbnQoKS0+cGFyZW50KCk7Ci0gICAgICAgICAgICAg
ICAgICAgIE5vZGVJbXBsKiB0YWJsZSA9IHRzZWN0aW9uLT5wYXJlbnQoKTsKLSAgICAgICAgICAg
ICAgICAgICAgaW50IGV4Y2VwdGlvbmNvZGUgPSAwOwotICAgICAgICAgICAgICAgICAgICB0YWJs
ZS0+aW5zZXJ0QmVmb3JlKG4sIHRzZWN0aW9uLCBleGNlcHRpb25jb2RlKTsKLSAgICAgICAgICAg
ICAgICAgICAgcHVzaEJsb2NrKGlkLCB0YWdQcmlvcml0eShpZCkpOwotICAgICAgICAgICAgICAg
ICAgICBzZXRDdXJyZW50KG4pOwotICAgICAgICAgICAgICAgICAgICBpblN0cmF5VGFibGVDb250
ZW50Kys7Ci0gICAgICAgICAgICAgICAgICAgIGJsb2NrU3RhY2stPnN0cmF5VGFibGVDb250ZW50
ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmNhcHRpb24o
KSkpIHsKKyAgICAgICAgICAgIGlmIChpc1RhYmxlUGFydChjdXJyZW50KSkgeworICAgICAgICAg
ICAgICAgIE5vZGVJbXBsKiB0c2VjdGlvbiA9IGN1cnJlbnQ7CisgICAgICAgICAgICAgICAgaWYg
KGN1cnJlbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0cigpKSkKKyAgICAgICAgICAgICAgICAg
ICAgdHNlY3Rpb24gPSBjdXJyZW50LT5wYXJlbnQoKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlm
IChjdXJyZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGQoKSkgfHwgY3VycmVudC0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OnRoKCkpKQorICAgICAgICAgICAgICAgICAgICB0c2VjdGlvbiA9IGN1
cnJlbnQtPnBhcmVudCgpLT5wYXJlbnQoKTsKKyAgICAgICAgICAgICAgICBOb2RlSW1wbCogdGFi
bGUgPSB0c2VjdGlvbi0+cGFyZW50KCk7CisgICAgICAgICAgICAgICAgaW50IGV4Y2VwdGlvbmNv
ZGUgPSAwOworICAgICAgICAgICAgICAgIHRhYmxlLT5pbnNlcnRCZWZvcmUobiwgdHNlY3Rpb24s
IGV4Y2VwdGlvbmNvZGUpOworICAgICAgICAgICAgICAgIHB1c2hCbG9jayhsb2NhbE5hbWUsIHRh
Z1ByaW9yaXR5KTsKKyAgICAgICAgICAgICAgICBzZXRDdXJyZW50KG4pOworICAgICAgICAgICAg
ICAgIGluU3RyYXlUYWJsZUNvbnRlbnQrKzsKKyAgICAgICAgICAgICAgICBibG9ja1N0YWNrLT5z
dHJheVRhYmxlQ29udGVudCA9IHRydWU7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNl
IElEX1RIRUFEOgotICAgICAgICBjYXNlIElEX1RCT0RZOgotICAgICAgICBjYXNlIElEX1RGT09U
OgotICAgICAgICBjYXNlIElEX0NPTEdST1VQOiB7Ci0gICAgICAgICAgICBpZiAoaXNUYWJsZVJl
bGF0ZWRUYWcoY3VycmVudC0+aWQoKSkpIHsKLSAgICAgICAgICAgICAgICB3aGlsZSAoYmxvY2tT
dGFjayAmJiBjdXJyZW50LT5pZCgpICE9IElEX1RBQkxFICYmIGlzVGFibGVSZWxhdGVkVGFnKGN1
cnJlbnQtPmlkKCkpKQorICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFtZShIVE1MTmFt
ZXM6OnRoZWFkKCkpIHx8IGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnRib2R5KCkpIHx8Cisg
ICAgICAgICAgICAgICAgICAgaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dGZvb3QoKSkgfHwg
aC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6Y29sZ3JvdXAoKSkpIHsKKyAgICAgICAgICAgIGlm
IChpc1RhYmxlUmVsYXRlZChjdXJyZW50KSkgeworICAgICAgICAgICAgICAgIHdoaWxlIChibG9j
a1N0YWNrICYmIGlzVGFibGVQYXJ0KGN1cnJlbnQpKQogICAgICAgICAgICAgICAgICAgICBwb3BP
bmVCbG9jaygpOwogICAgICAgICAgICAgICAgIHJldHVybiBpbnNlcnROb2RlKG4pOwogICAgICAg
ICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotCi0gICAgICAgIC8vIHN3aXRjaCBvbiB0aGUgY3VycmVudGx5IGFjdGl2ZSBl
bGVtZW50Ci0gICAgICAgIHN3aXRjaChjdXJyZW50LT5pZCgpKQotICAgICAgICB7Ci0gICAgICAg
IGNhc2UgSURfSFRNTDoKLSAgICAgICAgICAgIHN3aXRjaChpZCkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgIGNhc2UgSURfU0NSSVBUOgotICAgICAgICAgICAgY2FzZSBJRF9TVFlMRToKLSAg
ICAgICAgICAgIGNhc2UgSURfTUVUQToKLSAgICAgICAgICAgIGNhc2UgSURfTElOSzoKLSAgICAg
ICAgICAgIGNhc2UgSURfT0JKRUNUOgotICAgICAgICAgICAgY2FzZSBJRF9FTUJFRDoKLSAgICAg
ICAgICAgIGNhc2UgSURfVElUTEU6Ci0gICAgICAgICAgICBjYXNlIElEX0lTSU5ERVg6Ci0gICAg
ICAgICAgICBjYXNlIElEX0JBU0U6Ci0gICAgICAgICAgICAgICAgaWYoIWhlYWQpIHsKKyAgICB9
CisgICAgCisgICAgLy8gMi4gTmV4dCB3ZSBleGFtaW5lIG91ciBjdXJyZW50bHkgYWN0aXZlIGVs
ZW1lbnQgdG8gZG8gc29tZSBmdXJ0aGVyIGVycm9yIGhhbmRsaW5nLgorICAgIGlmIChjdXJyZW50
LT5pc0hUTUxFbGVtZW50KCkpIHsKKyAgICAgICAgSFRNTEVsZW1lbnRJbXBsKiBoID0gc3RhdGlj
X2Nhc3Q8SFRNTEVsZW1lbnRJbXBsKj4oY3VycmVudCk7CisgICAgICAgIGNvbnN0IEF0b21pY1N0
cmluZyYgY3VycmVudFRhZ05hbWUgPSBjdXJyZW50LT5sb2NhbE5hbWUoKTsKKyAgICAgICAgaWYg
KGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Omh0bWwoKSkpIHsKKyAgICAgICAgICAgIEhUTUxF
bGVtZW50SW1wbCogZWx0ID0gbi0+aXNIVE1MRWxlbWVudCgpID8gc3RhdGljX2Nhc3Q8SFRNTEVs
ZW1lbnRJbXBsKj4obikgOiAwOworICAgICAgICAgICAgaWYgKGVsdCAmJiAoZWx0LT5oYXNMb2Nh
bE5hbWUoSFRNTE5hbWVzOjpzY3JpcHQoKSkgfHwgZWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVz
OjpzdHlsZSgpKSB8fAorICAgICAgICAgICAgICAgIGVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1l
czo6bWV0YSgpKSB8fCBlbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmxpbmsoKSkgfHwKKyAg
ICAgICAgICAgICAgICBlbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9iamVjdCgpKSB8fCBl
bHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmVtYmVkKCkpIHx8CisgICAgICAgICAgICAgICAg
ZWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0aXRsZSgpKSB8fCBlbHQtPmhhc0xvY2FsTmFt
ZShIVE1MTmFtZXM6OmlzaW5kZXgoKSkgfHwKKyAgICAgICAgICAgICAgICBlbHQtPmhhc0xvY2Fs
TmFtZShIVE1MTmFtZXM6OmJhc2UoKSkpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFoZWFkKSB7
CiAgICAgICAgICAgICAgICAgICAgIGhlYWQgPSBuZXcgSFRNTEhlYWRFbGVtZW50SW1wbChkb2N1
bWVudCk7CiAgICAgICAgICAgICAgICAgICAgIGUgPSBoZWFkOwogICAgICAgICAgICAgICAgICAg
ICBpbnNlcnROb2RlKGUpOwogICAgICAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNl
IElEX1RFWFQ6IHsKLSAgICAgICAgICAgICAgICBUZXh0SW1wbCAqdCA9IHN0YXRpY19jYXN0PFRl
eHRJbXBsICo+KG4pOwotICAgICAgICAgICAgICAgIGlmICh0LT5jb250YWluc09ubHlXaGl0ZXNw
YWNlKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAg
ICAvKiBGYWxsIHRocm91Z2ggdG8gZGVmYXVsdCAqLworICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBpZiAobi0+aXNUZXh0Tm9kZSgpKSB7CisgICAgICAgICAgICAgICAgICAg
IFRleHRJbXBsICp0ID0gc3RhdGljX2Nhc3Q8VGV4dEltcGwgKj4obik7CisgICAgICAgICAgICAg
ICAgICAgIGlmICh0LT5jb250YWluc09ubHlXaGl0ZXNwYWNlKCkpCisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisJCQkJfQorCQkJCWlmICghaGF2ZUZyYW1lU2V0KSB7CisJ
CQkJCWUgPSBuZXcgSFRNTEJvZHlFbGVtZW50SW1wbChkb2N1bWVudCk7CisJCQkJCXN0YXJ0Qm9k
eSgpOworCQkJCQlpbnNlcnROb2RlKGUpOworCQkJCQloYW5kbGVkID0gdHJ1ZTsKKwkJCQl9CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGlmICgg
aGF2ZUZyYW1lU2V0ICkgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZSA9IG5ldyBIVE1MQm9keUVs
ZW1lbnRJbXBsKGRvY3VtZW50KTsKLSAgICAgICAgICAgICAgICBzdGFydEJvZHkoKTsKLSAgICAg
ICAgICAgICAgICBpbnNlcnROb2RlKGUpOwotICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVl
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgSURfSEVBRDoKLSAgICAgICAgICAgIC8vIHdlIGNhbiBnZXQgaGVy
ZSBvbmx5IGlmIHRoZSBlbGVtZW50IGlzIG5vdCBhbGxvd2VkIGluIGhlYWQuCi0gICAgICAgICAg
ICBpZiAoaWQgPT0gSURfSFRNTCkKKyAgICAgICAgfSBlbHNlIGlmIChoLT5oYXNMb2NhbE5hbWUo
SFRNTE5hbWVzOjpoZWFkKCkpKSB7CisgICAgICAgICAgICBpZiAobi0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6Omh0bWwoKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAg
ICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGUgYm9keSBzdGFydHMg
aGVyZS4uLgotICAgICAgICAgICAgICAgIGlmICggaGF2ZUZyYW1lU2V0ICkgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgcG9wQmxvY2soSURfSEVBRCk7Ci0gICAgICAgICAgICAgICAgZSA9IG5ldyBI
VE1MQm9keUVsZW1lbnRJbXBsKGRvY3VtZW50KTsKLSAgICAgICAgICAgICAgICBzdGFydEJvZHko
KTsKLSAgICAgICAgICAgICAgICBpbnNlcnROb2RlKGUpOwotICAgICAgICAgICAgICAgIGhhbmRs
ZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIGlmICghaGF2ZUZyYW1lU2V0KSB7CisgICAgICAg
ICAgICAgICAgICAgIHBvcEJsb2NrKGN1cnJlbnRUYWdOYW1lKTsKKyAgICAgICAgICAgICAgICAg
ICAgZSA9IG5ldyBIVE1MQm9keUVsZW1lbnRJbXBsKGRvY3VtZW50KTsKKyAgICAgICAgICAgICAg
ICAgICAgc3RhcnRCb2R5KCk7CisgICAgICAgICAgICAgICAgICAgIGluc2VydE5vZGUoZSk7Cisg
ICAgICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElEX0JPRFk6Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJRF9DQVBUSU9OOgorICAgICAgICB9IGVs
c2UgaWYgKGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmNhcHRpb24oKSkpIHsKICAgICAgICAg
ICAgIC8vIElsbGVnYWwgY29udGVudCBpbiBhIGNhcHRpb24uIENsb3NlIHRoZSBjYXB0aW9uIGFu
ZCB0cnkgYWdhaW4uCi0gICAgICAgICAgICBwb3BCbG9jayhJRF9DQVBUSU9OKTsKLSAgICAgICAg
ICAgIHN3aXRjaCggaWQgKSB7Ci0gICAgICAgICAgICBjYXNlIElEX1RIRUFEOgotICAgICAgICAg
ICAgY2FzZSBJRF9URk9PVDoKLSAgICAgICAgICAgIGNhc2UgSURfVEJPRFk6Ci0gICAgICAgICAg
ICBjYXNlIElEX1RSOgotICAgICAgICAgICAgY2FzZSBJRF9URDoKLSAgICAgICAgICAgIGNhc2Ug
SURfVEg6CisgICAgICAgICAgICBwb3BCbG9jayhjdXJyZW50VGFnTmFtZSk7CisgICAgICAgICAg
ICBpZiAoaXNUYWJsZVBhcnQobikpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGluc2VydE5vZGUo
biwgZmxhdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBJRF9UQUJMRToKLSAgICAgICAgY2FzZSBJRF9USEVBRDoKLSAgICAgICAgY2FzZSBJRF9URk9P
VDoKLSAgICAgICAgY2FzZSBJRF9UQk9EWToKLSAgICAgICAgY2FzZSBJRF9UUjoKLSAgICAgICAg
ICAgIHN3aXRjaChpZCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIGNhc2UgSURfVEFCTEU6
Ci0gICAgICAgICAgICAgICAgcG9wQmxvY2soSURfVEFCTEUpOyAvLyBlbmQgdGhlIHRhYmxlCisg
ICAgICAgIH0gZWxzZSBpZiAoaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dGFibGUoKSkgfHwg
aC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dHIoKSkgfHwgaXNUYWJsZVNlY3Rpb24oaCkpIHsK
KyAgICAgICAgICAgIGlmIChuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGFibGUoKSkpIHsKKyAg
ICAgICAgICAgICAgICBwb3BCbG9jayhsb2NhbE5hbWUpOyAvLyBlbmQgdGhlIHRhYmxlCiAgICAg
ICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7ICAgICAgLy8gLi4uYW5kIHN0YXJ0IGEgbmV3IG9u
ZQotICAgICAgICAgICAgICAgIGJyZWFrOwotCSAgICBjYXNlIElEX1RFWFQ6Ci0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgVGV4dEltcGwgKnQgPSBzdGF0aWNfY2FzdDxUZXh0SW1wbCAq
PihuKTsKLSAgICAgICAgICAgICAgICBpZiAodC0+Y29udGFpbnNPbmx5V2hpdGVzcGFjZSgpKQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgRE9NU3Ry
aW5nSW1wbCAqaSA9IHQtPnN0cmluZygpOwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBw
b3MgPSAwOwotICAgICAgICAgICAgICAgIHdoaWxlKHBvcyA8IGktPmwgJiYgKCAqKGktPnMrcG9z
KSA9PSBRQ2hhcignICcpIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICooaS0+cytwb3MpID09IFFDaGFyKDB4YTApKSkgcG9zKys7Ci0gICAgICAgICAgICAgICAgaWYo
cG9zID09IGktPmwpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBOb2Rl
SW1wbCAqbm9kZSA9IGN1cnJlbnQ7Ci0gICAgICAgICAgICAgICAgTm9kZUltcGwgKnBhcmVudCA9
IG5vZGUtPnBhcmVudE5vZGUoKTsKLQotICAgICAgICAgICAgICAgIE5vZGVJbXBsICpwYXJlbnRw
YXJlbnQgPSBwYXJlbnQtPnBhcmVudE5vZGUoKTsKLQotICAgICAgICAgICAgICAgIGlmIChuLT5p
c1RleHROb2RlKCkgfHwKLSAgICAgICAgICAgICAgICAgICAgKCBub2RlLT5pZCgpID09IElEX1RS
ICYmCi0gICAgICAgICAgICAgICAgICAgICAoIHBhcmVudC0+aWQoKSA9PSBJRF9USEVBRCB8fAot
ICAgICAgICAgICAgICAgICAgICAgIHBhcmVudC0+aWQoKSA9PSBJRF9UQk9EWSB8fAotICAgICAg
ICAgICAgICAgICAgICAgIHBhcmVudC0+aWQoKSA9PSBJRF9URk9PVCApICYmIHBhcmVudHBhcmVu
dC0+aWQoKSA9PSBJRF9UQUJMRSApIHx8Ci0gICAgICAgICAgICAgICAgICAgICggIWNoZWNrQ2hp
bGQoSURfVFIsIGlkLCAhZG9jKCktPmluQ29tcGF0TW9kZSgpKSAmJiAoIG5vZGUtPmlkKCkgPT0g
SURfVEhFQUQgfHwgbm9kZS0+aWQoKSA9PSBJRF9UQk9EWSB8fCBub2RlLT5pZCgpID09IElEX1RG
T09UICkgJiYKLSAgICAgICAgICAgICAgICAgICAgIHBhcmVudC0+aWQoKSA9PSBJRF9UQUJMRSAp
KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbm9kZSA9IChub2RlLT5p
ZCgpID09IElEX1RBQkxFKSA/IG5vZGUgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICgo
bm9kZS0+aWQoKSA9PSBJRF9UUikgPyBwYXJlbnRwYXJlbnQgOiBwYXJlbnQpOworICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBib29sIHBvc3NpYmx5TW92ZVN0cmF5Q29udGVu
dCA9IHRydWU7CisgICAgICAgICAgICAgICAgaW50IGV4Y2VwdGlvbkNvZGUgPSAwOworICAgICAg
ICAgICAgICAgIGlmIChuLT5pc1RleHROb2RlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgVGV4
dEltcGwgKnQgPSBzdGF0aWNfY2FzdDxUZXh0SW1wbCAqPihuKTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKHQtPmNvbnRhaW5zT25seVdoaXRlc3BhY2UoKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgRE9NU3RyaW5nSW1wbCAqaSA9
IHQtPnN0cmluZygpOworICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcG9zID0gMDsK
KyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHBvcyA8IGktPmwgJiYgKCooaS0+cytwb3MpID09
IFFDaGFyKCcgJykgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICooaS0+cytwb3MpID09IFFDaGFyKDB4YTApKSkgcG9zKys7CisgICAgICAgICAgICAgICAgICAg
IGlmIChwb3MgPT0gaS0+bCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHBvc3NpYmx5TW92ZVN0
cmF5Q29udGVudCA9IGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBp
ZiAocG9zc2libHlNb3ZlU3RyYXlDb250ZW50KSB7CisgICAgICAgICAgICAgICAgICAgIE5vZGVJ
bXBsICpub2RlID0gY3VycmVudDsKICAgICAgICAgICAgICAgICAgICAgTm9kZUltcGwgKnBhcmVu
dCA9IG5vZGUtPnBhcmVudE5vZGUoKTsKLSAgICAgICAgICAgICAgICAgICAgaW50IGV4Y2VwdGlv
bmNvZGUgPSAwOwotICAgICAgICAgICAgICAgICAgICBwYXJlbnQtPmluc2VydEJlZm9yZSggbiwg
bm9kZSwgZXhjZXB0aW9uY29kZSApOwotICAgICAgICAgICAgICAgICAgICBpZiAoIGV4Y2VwdGlv
bmNvZGUgKSB7Ci0jaWZkZWYgUEFSU0VSX0RFQlVHCi0gICAgICAgICAgICAgICAgICAgICAgICBr
ZERlYnVnKCA2MDM1ICkgPDwgImFkZGluZyBjb250ZW50IGJlZm9yZSB0YWJsZSBmYWlsZWQhIiA8
PCBlbmRsOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgTm9kZUltcGwgKmdyYW5kcGFyZW50ID0gcGFyZW50LT5wYXJlbnROb2RlKCk7
CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKG4tPmlzVGV4dE5vZGUoKSB8fAorICAgICAgICAg
ICAgICAgICAgICAgICAgKGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnRyKCkpICYmCisgICAg
ICAgICAgICAgICAgICAgICAgICAgaXNUYWJsZVNlY3Rpb24ocGFyZW50KSAmJiBncmFuZHBhcmVu
dC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRhYmxlKCkpKSB8fAorICAgICAgICAgICAgICAgICAg
ICAgICAgICgoIW4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0ZCgpKSAmJiAhbi0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OnRoKCkpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAhbi0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OmZvcm0oKSkgJiYgIW4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpz
Y3JpcHQoKSkpICYmIGlzVGFibGVTZWN0aW9uKG5vZGUpICYmCisgICAgICAgICAgICAgICAgICAg
ICAgICAgcGFyZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGFibGUoKSkpKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBub2RlID0gKG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0YWJs
ZSgpKSkgPyBub2RlIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChub2RlLT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6dHIoKSkpID8gZ3JhbmRwYXJlbnQgOiBwYXJlbnQpOworICAg
ICAgICAgICAgICAgICAgICAgICAgTm9kZUltcGwgKnBhcmVudCA9IG5vZGUtPnBhcmVudE5vZGUo
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudC0+aW5zZXJ0QmVmb3JlKG4sIG5vZGUs
IGV4Y2VwdGlvbkNvZGUpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFleGNlcHRpb25D
b2RlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4tPmlzSFRNTEVsZW1lbnQo
KSAmJiB0YWdQcmlvcml0eSA+IDAgJiYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICFmbGF0ICYmIHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCo+KG4pLT5lbmRUYWdSZXF1aXJl
bWVudCgpICE9IFRhZ1N0YXR1c0ZvcmJpZGRlbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2hCbG9jayhsb2NhbE5hbWUs
IHRhZ1ByaW9yaXR5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q3VycmVu
dChuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5TdHJheVRhYmxlQ29udGVu
dCsrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9ja1N0YWNrLT5zdHJheVRh
YmxlQ29udGVudCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmIChuLT5p
c0VsZW1lbnROb2RlKCkgJiYgdGFnUHJpb3JpdHkoaWQpICE9IDAgJiYgCi0gICAgICAgICAgICAg
ICAgICAgICAgICAhZmxhdCAmJiBlbmRUYWdSZXF1aXJlbWVudChpZCkgIT0gRE9NOjpGT1JCSURE
RU4pCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHB1c2hC
bG9jayhpZCwgdGFnUHJpb3JpdHkoaWQpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldEN1
cnJlbnQobik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpblN0cmF5VGFibGVDb250ZW50Kys7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBibG9ja1N0YWNrLT5zdHJheVRhYmxlQ29udGVudCA9
IHRydWU7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFleGNlcHRpb25Db2RlKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRy
KCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUgPSBuZXcgSFRNTFRhYmxlQ2VsbEVs
ZW1lbnRJbXBsKEhUTUxOYW1lczo6dGQoKSwgZG9jdW1lbnQpOworICAgICAgICAgICAgICAgICAg
ICAgICAgZWxzZSBpZiAoY3VycmVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRhYmxlKCkpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUgPSBuZXcgSFRNTFRhYmxlU2VjdGlvbkVsZW1l
bnRJbXBsKEhUTUxOYW1lczo6dGJvZHkoKSwgZG9jdW1lbnQsIHRydWUpOyAvLyBpbXBsaWNpdCAK
KyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlID0gbmV3IEhUTUxUYWJsZVJvd0VsZW1lbnRJbXBsKGRvY3VtZW50KTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0Tm9kZShlKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgIGlmICggY3VycmVudC0+aWQoKSA9PSBJRF9UUiApCi0gICAgICAg
ICAgICAgICAgICAgIGUgPSBuZXcgSFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsKGRvY3VtZW50LCBJ
RF9URCk7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoIGN1cnJlbnQtPmlkKCkgPT0gSURfVEFC
TEUgKQotICAgICAgICAgICAgICAgICAgICBlID0gbmV3IEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50
SW1wbCggZG9jdW1lbnQsIElEX1RCT0RZLCB0cnVlIC8qIGltcGxpY2l0ICovICk7Ci0gICAgICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBlID0gbmV3IEhUTUxUYWJsZVJvd0Vs
ZW1lbnRJbXBsKCBkb2N1bWVudCApOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IGluc2VydE5vZGUoZSk7Ci0gICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9IC8vIGVuZCBkZWZhdWx0Ci0gICAgICAgICAg
ICB9IC8vIGVuZCBzd2l0Y2gKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElEX09C
SkVDVDoKLSAgICAgICAgICAgIGRpc2NhcmRfdW50aWwgPSBJRF9PQkpFQ1QgKyBJRF9DTE9TRV9U
QUc7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoaC0+aGFzTG9j
YWxOYW1lKEhUTUxOYW1lczo6b2JqZWN0KCkpKSB7CisgICAgICAgICAgICBzZXRTa2lwTW9kZShI
VE1MTmFtZXM6Om9iamVjdCgpKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
Y2FzZSBJRF9VTDoKLSAgICAgICAgY2FzZSBJRF9PTDoKLSAgICAgICAgY2FzZSBJRF9ESVI6Ci0g
ICAgICAgIGNhc2UgSURfTUVOVToKKyAgICAgICAgfSBlbHNlIGlmIChoLT5oYXNMb2NhbE5hbWUo
SFRNTE5hbWVzOjp1bCgpKSB8fCBoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvbCgpKSB8fAor
ICAgICAgICAgICAgICAgICBoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpkaXIoKSkgfHwgaC0+
aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6bWVudSgpKSkgewogICAgICAgICAgICAgZSA9IG5ldyBI
VE1MRGl2RWxlbWVudEltcGwoZG9jdW1lbnQpOwogICAgICAgICAgICAgaW5zZXJ0Tm9kZShlKTsK
ICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICBjYXNlIElEX0RMOgotICAgICAgICAgICAgICAgIHBvcEJsb2NrKElEX0RMKTsKLSAgICAg
ICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIGNhc2UgSURfRFQ6Ci0gICAgICAgICAgICAgICAgcG9wQmxvY2soSURfRFQpOwotICAg
ICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIElEX1NFTEVDVDoKLSAgICAgICAgICAgIGlmKCBuLT5pc0lubGluZSgpICkKKyAg
ICAgICAgfSBlbHNlIGlmIChoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpkbCgpKSB8fCBoLT5o
YXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpkdCgpKSkgeworICAgICAgICAgICAgcG9wQmxvY2soY3Vy
cmVudFRhZ05hbWUpOworICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7CisgICAgICAgIH0gZWxz
ZSBpZiAoaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6c2VsZWN0KCkpKSB7CisgICAgICAgICAg
ICBpZiAoaXNJbmxpbmUobikpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSURfUDoKLSAgICAgICAgY2FzZSBJRF9IMToKLSAg
ICAgICAgY2FzZSBJRF9IMjoKLSAgICAgICAgY2FzZSBJRF9IMzoKLSAgICAgICAgY2FzZSBJRF9I
NDoKLSAgICAgICAgY2FzZSBJRF9INToKLSAgICAgICAgY2FzZSBJRF9INjoKLSAgICAgICAgICAg
IGlmKCFuLT5pc0lubGluZSgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHBvcEJs
b2NrKGN1cnJlbnQtPmlkKCkpOworICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFtZShI
VE1MTmFtZXM6OnAoKSkgfHwgaXNIZWFkZXJUYWcoY3VycmVudFRhZ05hbWUpKSB7CisgICAgICAg
ICAgICBpZiAoIWlzSW5saW5lKG4pKSB7CisgICAgICAgICAgICAgICAgcG9wQmxvY2soY3VycmVu
dFRhZ05hbWUpOwogICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwogICAgICAgICAgICAg
fQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSURfT1BUSU9OOgotICAgICAgICBj
YXNlIElEX09QVEdST1VQOgotICAgICAgICAgICAgaWYgKGlkID09IElEX09QVEdST1VQKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIHBvcEJsb2NrKGN1cnJlbnQtPmlkKCkpOworICAg
ICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9wdGlvbigpKSB8fCBo
LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvcHRncm91cCgpKSkgeworICAgICAgICAgICAgaWYg
KGxvY2FsTmFtZSA9PSBIVE1MTmFtZXM6Om9wdGdyb3VwKCkpIHsKKyAgICAgICAgICAgICAgICBw
b3BCbG9jayhjdXJyZW50VGFnTmFtZSk7CiAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7
CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmKGlkID09IElEX1NFTEVDVCkKLSAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgIGVsc2UgaWYgKGxvY2FsTmFtZSA9PSBIVE1MTmFtZXM6
OnNlbGVjdCgpKSB7CiAgICAgICAgICAgICAgICAgLy8gSUUgdHJlYXRzIGEgbmVzdGVkIHNlbGVj
dCBhcyA8L3NlbGVjdD4uIExldCdzIGRvIHRoZSBzYW1lCi0gICAgICAgICAgICAgICAgcG9wQmxv
Y2soIElEX1NFTEVDVCApOwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IHBvcEJsb2NrKGxvY2FsTmFtZSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIC8vIGhlYWQgZWxlbWVudHMgaW4gdGhlIGJvZHkgc2hvdWxkIGJlIGlnbm9y
ZWQuCi0gICAgICAgIGNhc2UgSURfQUREUkVTUzoKLSAgICAgICAgICAgIHBvcEJsb2NrKElEX0FE
RFJFU1MpOworICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmFk
ZHJlc3MoKSkpIHsKKyAgICAgICAgICAgIHBvcEJsb2NrKGN1cnJlbnRUYWdOYW1lKTsKICAgICAg
ICAgICAgIGhhbmRsZWQgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
SURfQ09MR1JPVVA6Ci0gICAgICAgICAgICBpZiAoaWQgIT0gSURfVEVYVCkgewotICAgICAgICAg
ICAgICAgIHBvcEJsb2NrKElEX0NPTEdST1VQKTsKKyAgICAgICAgfSBlbHNlIGlmIChoLT5oYXNM
b2NhbE5hbWUoSFRNTE5hbWVzOjpjb2xncm91cCgpKSkgeworICAgICAgICAgICAgaWYgKCFuLT5p
c1RleHROb2RlKCkpIHsKKyAgICAgICAgICAgICAgICBwb3BCbG9jayhjdXJyZW50VGFnTmFtZSk7
CiAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJRF9GT05UOgotICAgICAgICAgICAgcG9wQmxvY2so
SURfRk9OVCk7CisgICAgICAgIH0gZWxzZSBpZiAoaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6
Zm9udCgpKSkgeworICAgICAgICAgICAgcG9wQmxvY2soY3VycmVudFRhZ05hbWUpOwogICAgICAg
ICAgICAgaGFuZGxlZCA9IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgIGlmKGN1cnJlbnQtPmlzRG9jdW1lbnROb2RlKCkpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgaWYoY3VycmVudC0+Zmlyc3RDaGlsZCgpID09IDApIHsKLSAg
ICAgICAgICAgICAgICAgICAgZSA9IG5ldyBIVE1MSHRtbEVsZW1lbnRJbXBsKGRvY3VtZW50KTsK
LSAgICAgICAgICAgICAgICAgICAgaW5zZXJ0Tm9kZShlKTsKLSAgICAgICAgICAgICAgICAgICAg
aGFuZGxlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgZWxzZSBpZihjdXJyZW50LT5pc0lubGluZSgpKQotICAgICAgICAgICAgeworICAgICAg
ICB9IGVsc2UgaWYgKCFoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpib2R5KCkpKSB7CisgICAg
ICAgICAgICBpZiAoaXNJbmxpbmUoY3VycmVudCkpIHsKICAgICAgICAgICAgICAgICBwb3BJbmxp
bmVCbG9ja3MoKTsKICAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKICAgICAgICAgICAg
IH0KICAgICAgICAgfQotCi0gICAgICAgIC8vIGlmIHdlIGNvdWxkbid0IGhhbmRsZSB0aGUgZXJy
b3IsIGp1c3QgcmV0aHJvdyB0aGUgZXhjZXB0aW9uLi4uCi0gICAgICAgIGlmKCFoYW5kbGVkKQot
ICAgICAgICB7Ci0gICAgICAgICAgICAvL2tkRGVidWcoIDYwMzUgKSA8PCAiRXhjZXB0aW9uIGhh
bmRsZXIgZmFpbGVkIGluIEhUTUxQQXJzZXI6Omluc2VydE5vZGUoKSIgPDwgZW5kbDsKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgZWxzZSBpZiAoY3VycmVudC0+aXNEb2N1
bWVudE5vZGUoKSkgeworICAgICAgICBpZiAoY3VycmVudC0+Zmlyc3RDaGlsZCgpID09IDApIHsK
KyAgICAgICAgICAgIGUgPSBuZXcgSFRNTEh0bWxFbGVtZW50SW1wbChkb2N1bWVudCk7CisgICAg
ICAgICAgICBpbnNlcnROb2RlKGUpOworICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7CiAgICAg
ICAgIH0KLQotICAgICAgICByZXR1cm4gaW5zZXJ0Tm9kZShuKTsKICAgICB9CisKKyAgICAvLyAz
LiBJZiB3ZSBjb3VsZG4ndCBoYW5kbGUgdGhlIGVycm9yLCBqdXN0IHJldHVybiBmYWxzZSBhbmQg
YXR0ZW1wdCB0byBlcnJvci1jb3JyZWN0IGFnYWluLgorICAgIGlmICghaGFuZGxlZCkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBpbnNlcnROb2RlKG4pOwogfQogCi1Ob2RlSW1w
bCAqS0hUTUxQYXJzZXI6OmdldEVsZW1lbnQoVG9rZW4qIHQpCit0eXBlZGVmIGJvb2wgKEhUTUxQ
YXJzZXI6OipDcmVhdGVFcnJvckNoZWNrRnVuYykoVG9rZW4qIHQsIE5vZGVJbXBsKiYpOwordHlw
ZWRlZiBIYXNoTWFwPERPTVN0cmluZ0ltcGwgKiwgQ3JlYXRlRXJyb3JDaGVja0Z1bmMsIFBvaW50
ZXJIYXNoPERPTVN0cmluZ0ltcGwgKj4gPiBGdW5jdGlvbk1hcDsKKworYm9vbCBIVE1MUGFyc2Vy
Ojp0ZXh0Q3JlYXRlRXJyb3JDaGVjayhUb2tlbiogdCwgTm9kZUltcGwqJiByZXN1bHQpCiB7Ci0g
ICAgc3dpdGNoICh0LT5pZCkKLSAgICB7Ci0gICAgY2FzZSBJRF9IRUFEOgotICAgICAgICBpZiAo
IWhlYWQgJiYgY3VycmVudC0+aWQoKSA9PSBJRF9IVE1MKSB7Ci0gICAgICAgICAgICBoZWFkID0g
bmV3IEhUTUxIZWFkRWxlbWVudEltcGwoZG9jdW1lbnQpOwotICAgICAgICAgICAgcmV0dXJuIGhl
YWQ7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgY2FzZSBJRF9CT0RZOgotICAg
ICAgICAvLyBib2R5IG5vIGxvbmdlciBhbGxvd2VkIGlmIHdlIGhhdmUgYSBmcmFtZXNldAotICAg
ICAgICBpZiAoaGF2ZUZyYW1lU2V0KQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHBv
cEJsb2NrKElEX0hFQUQpOwotICAgICAgICBzdGFydEJvZHkoKTsKLSAgICAgICAgcmV0dXJuIG5l
dyBIVE1MQm9keUVsZW1lbnRJbXBsKGRvY3VtZW50KTsKLQotLy8gZnJhbWVzCi0gICAgY2FzZSBJ
RF9GUkFNRVNFVDoKLSAgICAgICAgcG9wQmxvY2soSURfSEVBRCk7Ci0gICAgICAgIGlmIChpbkJv
ZHkgJiYgIWhhdmVGcmFtZVNldCAmJiAhaGF2ZUNvbnRlbnQpIHsKLSAgICAgICAgICAgIHBvcEJs
b2NrKElEX0JPRFkpOwotICAgICAgICAgICAgLy8gIyMjIGFjdHVhbGx5IGZvciBJRSBkb2N1bWVu
dC5ib2R5IHJldHVybnMgdGhlIG5vdyBoaWRkZW4gImJvZHkiIGVsZW1lbnQKLSAgICAgICAgICAg
IC8vIHdlIGNhbid0IGltcGxlbWVudCB0aGF0IGJlaGF2aW91ciBub3cgYmVjYXVzZSBpdCBjb3Vs
ZCBjYXVzZSB0b28gbWFueQotICAgICAgICAgICAgLy8gcmVncmVzc2lvbnMgYW5kIHRoZSBoZWFk
YWNoZXMgYXJlIG5vdCB3b3J0aCB0aGUgd29yayBhcyBsb25nIGFzIHRoZXJlIGlzCi0gICAgICAg
ICAgICAvLyBubyBzaXRlIGFjdHVhbGx5IHJlbHlpbmcgb24gdGhhdCBkZXRhaWwgKERpcmspCi0g
ICAgICAgICAgICBpZiAoZG9jKCktPmJvZHkoKSkKLSAgICAgICAgICAgICAgICBkb2MoKS0+Ym9k
eSgpLT5zZXRBdHRyaWJ1dGUoQVRUUl9TVFlMRSwgImRpc3BsYXk6bm9uZSIpOwotICAgICAgICAg
ICAgaW5Cb2R5ID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKChoYXZlQ29udGVudCB8
fCBoYXZlRnJhbWVTZXQpICYmIGN1cnJlbnQtPmlkKCkgPT0gSURfSFRNTCkKLSAgICAgICAgICAg
IHJldHVybiAwOwotICAgICAgICBoYXZlRnJhbWVTZXQgPSB0cnVlOwotICAgICAgICBzdGFydEJv
ZHkoKTsKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MRnJhbWVTZXRFbGVtZW50SW1wbChkb2N1bWVu
dCk7CisgICAgcmVzdWx0ID0gbmV3IFRleHRJbXBsKGRvY3VtZW50LCB0LT50ZXh0KTsKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgSFRNTFBhcnNlcjo6Y29tbWVudENyZWF0ZUVycm9yQ2hl
Y2soVG9rZW4qIHQsIE5vZGVJbXBsKiYgcmVzdWx0KQoreworICAgIGlmIChpbmNsdWRlc0NvbW1l
bnRzSW5ET00pCisgICAgICAgIHJlc3VsdCA9IG5ldyBDb21tZW50SW1wbChkb2N1bWVudCwgdC0+
dGV4dCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEhUTUxQYXJzZXI6OmhlYWRDcmVh
dGVFcnJvckNoZWNrKFRva2VuKiB0LCBOb2RlSW1wbComIHJlc3VsdCkKK3sKKyAgICByZXR1cm4g
KCFoZWFkIHx8IGN1cnJlbnQtPmxvY2FsTmFtZSgpID09IEhUTUxOYW1lczo6aHRtbCgpKTsKK30K
IAorYm9vbCBIVE1MUGFyc2VyOjpib2R5Q3JlYXRlRXJyb3JDaGVjayhUb2tlbiogdCwgTm9kZUlt
cGwqJiByZXN1bHQpCit7CisgICAgLy8gYm9keSBubyBsb25nZXIgYWxsb3dlZCBpZiB3ZSBoYXZl
IGEgZnJhbWVzZXQKKyAgICBpZiAoaGF2ZUZyYW1lU2V0KQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgcG9wQmxvY2soSFRNTE5hbWVzOjpoZWFkKCkpOworICAgIHN0YXJ0Qm9keSgpOworICAg
IHJldHVybiB0cnVlOworfQorCitib29sIEhUTUxQYXJzZXI6OmZyYW1lc2V0Q3JlYXRlRXJyb3JD
aGVjayhUb2tlbiogdCwgTm9kZUltcGwqJiByZXN1bHQpCit7CisgICAgcG9wQmxvY2soSFRNTE5h
bWVzOjpoZWFkKCkpOworICAgIGlmIChpbkJvZHkgJiYgIWhhdmVGcmFtZVNldCAmJiAhaGF2ZUNv
bnRlbnQpIHsKKyAgICAgICAgcG9wQmxvY2soSFRNTE5hbWVzOjpib2R5KCkpOworICAgICAgICAv
LyAjIyMgYWN0dWFsbHkgZm9yIElFIGRvY3VtZW50LmJvZHkgcmV0dXJucyB0aGUgbm93IGhpZGRl
biAiYm9keSIgZWxlbWVudAorICAgICAgICAvLyB3ZSBjYW4ndCBpbXBsZW1lbnQgdGhhdCBiZWhh
dmlvdXIgbm93IGJlY2F1c2UgaXQgY291bGQgY2F1c2UgdG9vIG1hbnkKKyAgICAgICAgLy8gcmVn
cmVzc2lvbnMgYW5kIHRoZSBoZWFkYWNoZXMgYXJlIG5vdCB3b3J0aCB0aGUgd29yayBhcyBsb25n
IGFzIHRoZXJlIGlzCisgICAgICAgIC8vIG5vIHNpdGUgYWN0dWFsbHkgcmVseWluZyBvbiB0aGF0
IGRldGFpbCAoRGlyaykKKyAgICAgICAgaWYgKGRvYygpLT5ib2R5KCkpCisgICAgICAgICAgICBk
b2MoKS0+Ym9keSgpLT5zZXRBdHRyaWJ1dGUoQVRUUl9TVFlMRSwgImRpc3BsYXk6bm9uZSIpOwor
ICAgICAgICBpbkJvZHkgPSBmYWxzZTsKKyAgICB9CisgICAgaWYgKChoYXZlQ29udGVudCB8fCBo
YXZlRnJhbWVTZXQpICYmIGN1cnJlbnQtPmxvY2FsTmFtZSgpID09IEhUTUxOYW1lczo6aHRtbCgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaGF2ZUZyYW1lU2V0ID0gdHJ1ZTsKKyAgICBz
dGFydEJvZHkoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBIVE1MUGFyc2VyOjppZnJh
bWVDcmVhdGVFcnJvckNoZWNrKFRva2VuKiB0LCBOb2RlSW1wbComIHJlc3VsdCkKK3sKICAgICAv
LyBhIGJpdCBvZiBhIHNwZWNpYWwgY2FzZSwgc2luY2UgdGhlIGZyYW1lIGlzIGlubGluZWQKLSAg
ICBjYXNlIElEX0lGUkFNRToKLSAgICAgICAgZGlzY2FyZF91bnRpbCA9IElEX0lGUkFNRSArIElE
X0NMT1NFX1RBRzsKLSAgICAgICAgYnJlYWs7Ci0KLS8vIGZvcm0gZWxlbWVudHMKLSAgICBjYXNl
IElEX0ZPUk06Ci0gICAgICAgIC8vIE9ubHkgY3JlYXRlIGEgbmV3IGZvcm0gaWYgd2UncmUgbm90
IGFscmVhZHkgaW5zaWRlIG9uZS4KLSAgICAgICAgLy8gVGhpcyBpcyBjb25zaXN0ZW50IHdpdGgg
b3RoZXIgYnJvd3NlcnMnIGJlaGF2aW9yLgotICAgICAgICBpZiAoZm9ybSkKLSAgICAgICAgICAg
IHJldHVybiAwOwotICAgICAgICBmb3JtID0gbmV3IEhUTUxGb3JtRWxlbWVudEltcGwoZG9jdW1l
bnQpOwotICAgICAgICByZXR1cm4gZm9ybTsKLSAgICBjYXNlIElEX0JVVFRPTjoKLSAgICAgICAg
cmV0dXJuIG5ldyBIVE1MQnV0dG9uRWxlbWVudEltcGwoZG9jdW1lbnQsIGZvcm0pOwotICAgIGNh
c2UgSURfRklFTERTRVQ6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTEZpZWxkU2V0RWxlbWVudElt
cGwoZG9jdW1lbnQsIGZvcm0pOwotICAgIGNhc2UgSURfSU5QVVQ6Ci0gICAgICAgIHJldHVybiBu
ZXcgSFRNTElucHV0RWxlbWVudEltcGwoZG9jdW1lbnQsIGZvcm0pOwotICAgIGNhc2UgSURfSVNJ
TkRFWDogewotICAgICAgICBOb2RlSW1wbCAqbiA9IGhhbmRsZUlzaW5kZXgodCk7Ci0gICAgICAg
IGlmICghaW5Cb2R5KSB7Ci0gICAgICAgICAgICBpZiAoaXNpbmRleCkKLSAgICAgICAgICAgICAg
ICBpc2luZGV4LT5kZXJlZigpOwotICAgICAgICAgICAgaXNpbmRleCA9IG47Ci0gICAgICAgICAg
ICBpc2luZGV4LT5yZWYoKTsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9CisgICAg
c2V0U2tpcE1vZGUoSFRNTE5hbWVzOjppZnJhbWUoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2Jvb2wgSFRNTFBhcnNlcjo6Zm9ybUNyZWF0ZUVycm9yQ2hlY2soVG9rZW4qIHQsIE5vZGVJbXBs
KiYgcmVzdWx0KQoreworICAgIC8vIE9ubHkgY3JlYXRlIGEgbmV3IGZvcm0gaWYgd2UncmUgbm90
IGFscmVhZHkgaW5zaWRlIG9uZS4KKyAgICAvLyBUaGlzIGlzIGNvbnNpc3RlbnQgd2l0aCBvdGhl
ciBicm93c2VycycgYmVoYXZpb3IuCisgICAgcmV0dXJuICFmb3JtOworfQorCitib29sIEhUTUxQ
YXJzZXI6OmlzaW5kZXhDcmVhdGVFcnJvckNoZWNrKFRva2VuKiB0LCBOb2RlSW1wbComIHJlc3Vs
dCkKK3sKKyAgICBOb2RlSW1wbCAqbiA9IGhhbmRsZUlzaW5kZXgodCk7CisgICAgaWYgKCFpbkJv
ZHkpIHsKKyAgICAgICAgaWYgKGlzaW5kZXgpCisgICAgICAgICAgICBpc2luZGV4LT5kZXJlZigp
OworICAgICAgICBpc2luZGV4ID0gbjsKKyAgICAgICAgaXNpbmRleC0+cmVmKCk7CisgICAgfSBl
bHNlIHsKICAgICAgICAgdC0+ZmxhdCA9IHRydWU7Ci0gICAgICAgIHJldHVybiBuOworICAgICAg
ICByZXN1bHQgPSBuOwogICAgIH0KLSAgICBjYXNlIElEX0tFWUdFTjoKLSAgICAgICAgcmV0dXJu
IG5ldyBIVE1MS2V5Z2VuRWxlbWVudEltcGwoZG9jdW1lbnQsIGZvcm0pOwotICAgIGNhc2UgSURf
TEVHRU5EOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxMZWdlbmRFbGVtZW50SW1wbChkb2N1bWVu
dCwgZm9ybSk7Ci0gICAgY2FzZSBJRF9PUFRHUk9VUDoKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1M
T3B0R3JvdXBFbGVtZW50SW1wbChkb2N1bWVudCwgZm9ybSk7Ci0gICAgY2FzZSBJRF9PUFRJT046
Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTE9wdGlvbkVsZW1lbnRJbXBsKGRvY3VtZW50LCBmb3Jt
KTsKLSAgICBjYXNlIElEX1NFTEVDVDoKLSAgICAgICAgaW5TZWxlY3QgPSB0cnVlOwotICAgICAg
ICByZXR1cm4gbmV3IEhUTUxTZWxlY3RFbGVtZW50SW1wbChkb2N1bWVudCwgZm9ybSk7Ci0gICAg
Y2FzZSBJRF9URVhUQVJFQToKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MVGV4dEFyZWFFbGVtZW50
SW1wbChkb2N1bWVudCwgZm9ybSk7Ci0KLS8vIGxpc3RzCi0gICAgY2FzZSBJRF9ERDoKLSAgICAg
ICAgcG9wQmxvY2soSURfRFQpOwotICAgICAgICBwb3BCbG9jayhJRF9ERCk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgSURfRFQ6Ci0gICAgICAgIHBvcEJsb2NrKElEX0REKTsKLSAgICAgICAg
cG9wQmxvY2soSURfRFQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIElEX0xJOgotICAgICAg
ICBwb3BCbG9jayhJRF9MSSk7Ci0gICAgICAgIGJyZWFrOwotCi0vLyBhbmNob3IKLSAgICBjYXNl
IElEX0E6Ci0gICAgICAgIC8vIE5ldmVyIGFsbG93IG5lc3RlZCA8YT5zLgotICAgICAgICBwb3BC
bG9jayhJRF9BKTsKLSAgICAgICAgYnJlYWs7Ci0KLS8vIGltYWdlcwotICAgIGNhc2UgSURfSU1H
OgotICAgICAgICByZXR1cm4gbmV3IEhUTUxJbWFnZUVsZW1lbnRJbXBsKGRvY3VtZW50LCBmb3Jt
KTsKLSAgICBjYXNlIElEX01BUDoKLSAgICAgICAgbWFwID0gbmV3IEhUTUxNYXBFbGVtZW50SW1w
bChkb2N1bWVudCk7Ci0gICAgICAgIHJldHVybiBtYXA7Ci0KLS8vIHRhYmxlcwotICAgIGNhc2Ug
SURfVFI6Ci0gICAgICAgIHBvcEJsb2NrKElEX1RSKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBJRF9URDoKLSAgICBjYXNlIElEX1RIOgotICAgICAgICBwb3BCbG9jayhJRF9USCk7Ci0gICAg
ICAgIHBvcEJsb2NrKElEX1REKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9UQk9EWToK
LSAgICBjYXNlIElEX1RIRUFEOgotICAgIGNhc2UgSURfVEZPT1Q6Ci0gICAgICAgIHBvcEJsb2Nr
KElEX1RIRUFEKTsKLSAgICAgICAgcG9wQmxvY2soSURfVEJPRFkpOwotICAgICAgICBwb3BCbG9j
ayhJRF9URk9PVCk7Ci0gICAgICAgIGJyZWFrOwotCi0vLyBlbGVtZW50cyB3aXRoIG5vIHNwZWNp
YWwgcmVwcmVzZW50YXRpb24gaW4gdGhlIERPTQotICAgIGNhc2UgSURfVFQ6Ci0gICAgY2FzZSBJ
RF9VOgotICAgIGNhc2UgSURfQjoKLSAgICBjYXNlIElEX0k6Ci0gICAgY2FzZSBJRF9TOgotICAg
IGNhc2UgSURfU1RSSUtFOgotICAgIGNhc2UgSURfQklHOgotICAgIGNhc2UgSURfU01BTEw6Ci0g
ICAgICAgIGlmICghYWxsb3dOZXN0ZWRSZWR1bmRhbnRUYWcodC0+aWQpKQotICAgICAgICAgICAg
cmV0dXJuIDA7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBJRF9OT0JSOgotICAgIGNhc2Ug
SURfV0JSOgotICAgICAgICBwb3BCbG9jayh0LT5pZCk7IC8vIERvbid0IGFsbG93IG5lc3RlZCA8
bm9icj4gb3IgPHdicj4KLSAgICAgICAgYnJlYWs7Ci0KLS8vIHRoZXNlIGFyZSBzcGVjaWFsLCBh
bmQgbm9ybWFsbHkgbm90IHJlbmRlcmVkCi0gICAgY2FzZSBJRF9OT0VNQkVEOgotICAgICAgICBk
aXNjYXJkX3VudGlsID0gSURfTk9FTUJFRCArIElEX0NMT1NFX1RBRzsKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgY2FzZSBJRF9OT0ZSQU1FUzoKLSAgICAgICAgZGlzY2FyZF91bnRpbCA9IElEX05P
RlJBTUVTICsgSURfQ0xPU0VfVEFHOwotICAgICAgICByZXR1cm4gMDsKLSAgICBjYXNlIElEX05P
U0NSSVBUOgotICAgICAgICBpZiAoSFRNTFdpZGdldCAmJiBIVE1MV2lkZ2V0LT5wYXJ0KCktPmpT
Y3JpcHRFbmFibGVkKCkpCi0gICAgICAgICAgICBkaXNjYXJkX3VudGlsID0gSURfTk9TQ1JJUFQg
KyBJRF9DTE9TRV9UQUc7Ci0gICAgICAgIHJldHVybiAwOwotICAgIGNhc2UgSURfTk9MQVlFUjoK
LSAgICAgICAgLy9kaXNjYXJkX3VudGlsID0gSURfTk9MQVlFUiArIElEX0NMT1NFX1RBRzsKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgY2FzZSBJRF9URVhUOgotICAgICAgICByZXR1cm4gbmV3IFRl
eHRJbXBsKGRvY3VtZW50LCB0LT50ZXh0KTsKLSAgICBjYXNlIElEX0NPTU1FTlQ6Ci0gICAgICAg
IGlmICghaW5jbHVkZXNDb21tZW50c0luRE9NKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
ICAgIGJyZWFrOwotCi0gICAgY2FzZSBJRF9TQ1JJUFQ6Ci0gICAgICAgIHsKLSAgICAgICAgICAg
IEhUTUxTY3JpcHRFbGVtZW50SW1wbCAqc2NyaXB0RWxlbWVudCA9IG5ldyBIVE1MU2NyaXB0RWxl
bWVudEltcGwoZG9jdW1lbnQpOwotICAgICAgICAgICAgc2NyaXB0RWxlbWVudC0+c2V0Q3JlYXRl
ZEJ5UGFyc2VyKHRydWUpOwotICAgICAgICAgICAgcmV0dXJuIHNjcmlwdEVsZW1lbnQ7Ci0gICAg
ICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgSFRNTFBhcnNlcjo6c2VsZWN0Q3Jl
YXRlRXJyb3JDaGVjayhUb2tlbiogdCwgTm9kZUltcGwqJiByZXN1bHQpCit7CisgICAgaW5TZWxl
Y3QgPSB0cnVlOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEhUTUxQYXJzZXI6OmRkQ3Jl
YXRlRXJyb3JDaGVjayhUb2tlbiogdCwgTm9kZUltcGwqJiByZXN1bHQpCit7CisgICAgcG9wQmxv
Y2soSFRNTE5hbWVzOjpkdCgpKTsKKyAgICBwb3BCbG9jayhIVE1MTmFtZXM6OmRkKCkpOworICAg
IHJldHVybiB0cnVlOworfQorCitib29sIEhUTUxQYXJzZXI6OmR0Q3JlYXRlRXJyb3JDaGVjayhU
b2tlbiogdCwgTm9kZUltcGwqJiByZXN1bHQpCit7CisgICAgcG9wQmxvY2soSFRNTE5hbWVzOjpk
ZCgpKTsKKyAgICBwb3BCbG9jayhIVE1MTmFtZXM6OmR0KCkpOworICAgIHJldHVybiB0cnVlOwor
fQorCitib29sIEhUTUxQYXJzZXI6Om5lc3RlZENyZWF0ZUVycm9yQ2hlY2soVG9rZW4qIHQsIE5v
ZGVJbXBsKiYgcmVzdWx0KQoreworICAgIHBvcEJsb2NrKHQtPnRhZ05hbWUpOworICAgIHJldHVy
biB0cnVlOworfQorCitib29sIEhUTUxQYXJzZXI6Om5lc3RlZFN0eWxlQ3JlYXRlRXJyb3JDaGVj
ayhUb2tlbiogdCwgTm9kZUltcGwqJiByZXN1bHQpCit7CisgICAgcmV0dXJuIGFsbG93TmVzdGVk
UmVkdW5kYW50VGFnKHQtPnRhZ05hbWUpOworfQorCitib29sIEhUTUxQYXJzZXI6OnRhYmxlQ2Vs
bENyZWF0ZUVycm9yQ2hlY2soVG9rZW4qIHQsIE5vZGVJbXBsKiYgcmVzdWx0KQoreworICAgIHBv
cEJsb2NrKEhUTUxOYW1lczo6dGQoKSk7CisgICAgcG9wQmxvY2soSFRNTE5hbWVzOjp0aCgpKTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBIVE1MUGFyc2VyOjp0YWJsZVNlY3Rpb25DcmVh
dGVFcnJvckNoZWNrKFRva2VuKiB0LCBOb2RlSW1wbComIHJlc3VsdCkKK3sKKyAgICBwb3BCbG9j
ayhIVE1MTmFtZXM6OnRoZWFkKCkpOworICAgIHBvcEJsb2NrKEhUTUxOYW1lczo6dGJvZHkoKSk7
CisgICAgcG9wQmxvY2soSFRNTE5hbWVzOjp0Zm9vdCgpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBIVE1MUGFyc2VyOjpub2VtYmVkQ3JlYXRlRXJyb3JDaGVjayhUb2tlbiogdCwgTm9k
ZUltcGwqJiByZXN1bHQpCit7CisgICAgc2V0U2tpcE1vZGUoSFRNTE5hbWVzOjpub2VtYmVkKCkp
OworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBIVE1MUGFyc2VyOjpub2ZyYW1lc0NyZWF0
ZUVycm9yQ2hlY2soVG9rZW4qIHQsIE5vZGVJbXBsKiYgcmVzdWx0KQoreworICAgIHNldFNraXBN
b2RlKEhUTUxOYW1lczo6bm9mcmFtZXMoKSk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29s
IEhUTUxQYXJzZXI6Om5vc2NyaXB0Q3JlYXRlRXJyb3JDaGVjayhUb2tlbiogdCwgTm9kZUltcGwq
JiByZXN1bHQpCit7CisgICAgaWYgKEhUTUxXaWRnZXQgJiYgSFRNTFdpZGdldC0+cGFydCgpLT5q
U2NyaXB0RW5hYmxlZCgpKQorICAgICAgICBzZXRTa2lwTW9kZShIVE1MTmFtZXM6Om5vc2NyaXB0
KCkpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBIVE1MUGFyc2VyOjpub2xheWVyQ3Jl
YXRlRXJyb3JDaGVjayhUb2tlbiogdCwgTm9kZUltcGwqJiByZXN1bHQpCit7CisgICAgcmV0dXJu
IGZhbHNlOworfQorCitOb2RlSW1wbCAqSFRNTFBhcnNlcjo6Z2V0Tm9kZShUb2tlbiogdCkKK3sK
KyAgICAvLyBJbml0IG91ciBlcnJvciBoYW5kbGluZyB0YWJsZS4KKyAgICBzdGF0aWMgRnVuY3Rp
b25NYXAgZ0Z1bmN0aW9uTWFwOworICAgIGlmIChnRnVuY3Rpb25NYXAuaXNFbXB0eSgpKSB7Cisg
ICAgICAgIGdGdW5jdGlvbk1hcC5pbnNlcnQodGV4dEF0b20uaW1wbGVtZW50YXRpb24oKSwgJkhU
TUxQYXJzZXI6OnRleHRDcmVhdGVFcnJvckNoZWNrKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLmlu
c2VydChjb21tZW50QXRvbS5pbXBsZW1lbnRhdGlvbigpLCAmSFRNTFBhcnNlcjo6Y29tbWVudENy
ZWF0ZUVycm9yQ2hlY2spOworICAgICAgICBnRnVuY3Rpb25NYXAuaW5zZXJ0KEhUTUxOYW1lczo6
aGVhZCgpLmxvY2FsTmFtZVB0cigpLCAmSFRNTFBhcnNlcjo6aGVhZENyZWF0ZUVycm9yQ2hlY2sp
OworICAgICAgICBnRnVuY3Rpb25NYXAuaW5zZXJ0KEhUTUxOYW1lczo6Ym9keSgpLmxvY2FsTmFt
ZVB0cigpLCAmSFRNTFBhcnNlcjo6Ym9keUNyZWF0ZUVycm9yQ2hlY2spOworICAgICAgICBnRnVu
Y3Rpb25NYXAuaW5zZXJ0KEhUTUxOYW1lczo6ZnJhbWVzZXQoKS5sb2NhbE5hbWVQdHIoKSwgJkhU
TUxQYXJzZXI6OmZyYW1lc2V0Q3JlYXRlRXJyb3JDaGVjayk7CisgICAgICAgIGdGdW5jdGlvbk1h
cC5pbnNlcnQoSFRNTE5hbWVzOjppZnJhbWUoKS5sb2NhbE5hbWVQdHIoKSwgJkhUTUxQYXJzZXI6
OmlmcmFtZUNyZWF0ZUVycm9yQ2hlY2spOworICAgICAgICBnRnVuY3Rpb25NYXAuaW5zZXJ0KEhU
TUxOYW1lczo6Zm9ybSgpLmxvY2FsTmFtZVB0cigpLCAmSFRNTFBhcnNlcjo6Zm9ybUNyZWF0ZUVy
cm9yQ2hlY2spOworICAgICAgICBnRnVuY3Rpb25NYXAuaW5zZXJ0KEhUTUxOYW1lczo6aXNpbmRl
eCgpLmxvY2FsTmFtZVB0cigpLCAmSFRNTFBhcnNlcjo6aXNpbmRleENyZWF0ZUVycm9yQ2hlY2sp
OworICAgICAgICBnRnVuY3Rpb25NYXAuaW5zZXJ0KEhUTUxOYW1lczo6c2VsZWN0KCkubG9jYWxO
YW1lUHRyKCksICZIVE1MUGFyc2VyOjpzZWxlY3RDcmVhdGVFcnJvckNoZWNrKTsKKyAgICAgICAg
Z0Z1bmN0aW9uTWFwLmluc2VydChIVE1MTmFtZXM6OmRkKCkubG9jYWxOYW1lUHRyKCksICZIVE1M
UGFyc2VyOjpkZENyZWF0ZUVycm9yQ2hlY2spOworICAgICAgICBnRnVuY3Rpb25NYXAuaW5zZXJ0
KEhUTUxOYW1lczo6ZHQoKS5sb2NhbE5hbWVQdHIoKSwgJkhUTUxQYXJzZXI6OmR0Q3JlYXRlRXJy
b3JDaGVjayk7CisgICAgICAgIGdGdW5jdGlvbk1hcC5pbnNlcnQoSFRNTE5hbWVzOjpsaSgpLmxv
Y2FsTmFtZVB0cigpLCAmSFRNTFBhcnNlcjo6bmVzdGVkQ3JlYXRlRXJyb3JDaGVjayk7CisgICAg
ICAgIGdGdW5jdGlvbk1hcC5pbnNlcnQoSFRNTE5hbWVzOjphKCkubG9jYWxOYW1lUHRyKCksICZI
VE1MUGFyc2VyOjpuZXN0ZWRDcmVhdGVFcnJvckNoZWNrKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFw
Lmluc2VydChIVE1MTmFtZXM6Om5vYnIoKS5sb2NhbE5hbWVQdHIoKSwgJkhUTUxQYXJzZXI6Om5l
c3RlZENyZWF0ZUVycm9yQ2hlY2spOworICAgICAgICBnRnVuY3Rpb25NYXAuaW5zZXJ0KEhUTUxO
YW1lczo6d2JyKCkubG9jYWxOYW1lUHRyKCksICZIVE1MUGFyc2VyOjpuZXN0ZWRDcmVhdGVFcnJv
ckNoZWNrKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLmluc2VydChIVE1MTmFtZXM6OnRyKCkubG9j
YWxOYW1lUHRyKCksICZIVE1MUGFyc2VyOjpuZXN0ZWRDcmVhdGVFcnJvckNoZWNrKTsKKyAgICAg
ICAgZ0Z1bmN0aW9uTWFwLmluc2VydChIVE1MTmFtZXM6OnRkKCkubG9jYWxOYW1lUHRyKCksICZI
VE1MUGFyc2VyOjp0YWJsZUNlbGxDcmVhdGVFcnJvckNoZWNrKTsKKyAgICAgICAgZ0Z1bmN0aW9u
TWFwLmluc2VydChIVE1MTmFtZXM6OnRoKCkubG9jYWxOYW1lUHRyKCksICZIVE1MUGFyc2VyOjp0
YWJsZUNlbGxDcmVhdGVFcnJvckNoZWNrKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLmluc2VydChI
VE1MTmFtZXM6OnRib2R5KCkubG9jYWxOYW1lUHRyKCksICZIVE1MUGFyc2VyOjp0YWJsZVNlY3Rp
b25DcmVhdGVFcnJvckNoZWNrKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLmluc2VydChIVE1MTmFt
ZXM6OnRoZWFkKCkubG9jYWxOYW1lUHRyKCksICZIVE1MUGFyc2VyOjp0YWJsZVNlY3Rpb25DcmVh
dGVFcnJvckNoZWNrKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLmluc2VydChIVE1MTmFtZXM6OnRm
b290KCkubG9jYWxOYW1lUHRyKCksICZIVE1MUGFyc2VyOjp0YWJsZVNlY3Rpb25DcmVhdGVFcnJv
ckNoZWNrKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLmluc2VydChIVE1MTmFtZXM6OnR0KCkubG9j
YWxOYW1lUHRyKCksICZIVE1MUGFyc2VyOjpuZXN0ZWRTdHlsZUNyZWF0ZUVycm9yQ2hlY2spOwor
ICAgICAgICBnRnVuY3Rpb25NYXAuaW5zZXJ0KEhUTUxOYW1lczo6dSgpLmxvY2FsTmFtZVB0cigp
LCAmSFRNTFBhcnNlcjo6bmVzdGVkU3R5bGVDcmVhdGVFcnJvckNoZWNrKTsKKyAgICAgICAgZ0Z1
bmN0aW9uTWFwLmluc2VydChIVE1MTmFtZXM6OmIoKS5sb2NhbE5hbWVQdHIoKSwgJkhUTUxQYXJz
ZXI6Om5lc3RlZFN0eWxlQ3JlYXRlRXJyb3JDaGVjayk7CisgICAgICAgIGdGdW5jdGlvbk1hcC5p
bnNlcnQoSFRNTE5hbWVzOjppKCkubG9jYWxOYW1lUHRyKCksICZIVE1MUGFyc2VyOjpuZXN0ZWRT
dHlsZUNyZWF0ZUVycm9yQ2hlY2spOworICAgICAgICBnRnVuY3Rpb25NYXAuaW5zZXJ0KEhUTUxO
YW1lczo6cygpLmxvY2FsTmFtZVB0cigpLCAmSFRNTFBhcnNlcjo6bmVzdGVkU3R5bGVDcmVhdGVF
cnJvckNoZWNrKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLmluc2VydChIVE1MTmFtZXM6OnN0cmlr
ZSgpLmxvY2FsTmFtZVB0cigpLCAmSFRNTFBhcnNlcjo6bmVzdGVkU3R5bGVDcmVhdGVFcnJvckNo
ZWNrKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLmluc2VydChIVE1MTmFtZXM6OmJpZygpLmxvY2Fs
TmFtZVB0cigpLCAmSFRNTFBhcnNlcjo6bmVzdGVkU3R5bGVDcmVhdGVFcnJvckNoZWNrKTsKKyAg
ICAgICAgZ0Z1bmN0aW9uTWFwLmluc2VydChIVE1MTmFtZXM6OnNtYWxsKCkubG9jYWxOYW1lUHRy
KCksICZIVE1MUGFyc2VyOjpuZXN0ZWRTdHlsZUNyZWF0ZUVycm9yQ2hlY2spOworICAgICAgICBn
RnVuY3Rpb25NYXAuaW5zZXJ0KEhUTUxOYW1lczo6bm9lbWJlZCgpLmxvY2FsTmFtZVB0cigpLCAm
SFRNTFBhcnNlcjo6bm9lbWJlZENyZWF0ZUVycm9yQ2hlY2spOworICAgICAgICBnRnVuY3Rpb25N
YXAuaW5zZXJ0KEhUTUxOYW1lczo6bm9mcmFtZXMoKS5sb2NhbE5hbWVQdHIoKSwgJkhUTUxQYXJz
ZXI6Om5vZnJhbWVzQ3JlYXRlRXJyb3JDaGVjayk7CisgICAgICAgIGdGdW5jdGlvbk1hcC5pbnNl
cnQoSFRNTE5hbWVzOjpub3NjcmlwdCgpLmxvY2FsTmFtZVB0cigpLCAmSFRNTFBhcnNlcjo6bm9z
Y3JpcHRDcmVhdGVFcnJvckNoZWNrKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLmluc2VydChIVE1M
TmFtZXM6Om5vbGF5ZXIoKS5sb2NhbE5hbWVQdHIoKSwgJkhUTUxQYXJzZXI6Om5vbGF5ZXJDcmVh
dGVFcnJvckNoZWNrKTsKICAgICB9CiAKLSAgICByZXR1cm4gZG9jdW1lbnQtPmRvY3VtZW50KCkt
PmNyZWF0ZUhUTUxFbGVtZW50KHQtPmlkKTsKKyAgICBib29sIHByb2NlZWQgPSB0cnVlOworICAg
IE5vZGVJbXBsKiByZXN1bHQgPSAwOworICAgIENyZWF0ZUVycm9yQ2hlY2tGdW5jIGVycm9yQ2hl
Y2tGdW5jID0gZ0Z1bmN0aW9uTWFwLmdldCh0LT50YWdOYW1lLmltcGxlbWVudGF0aW9uKCkpOwor
ICAgIGlmIChlcnJvckNoZWNrRnVuYykKKyAgICAgICAgcHJvY2VlZCA9ICh0aGlzLT4qKGVycm9y
Q2hlY2tGdW5jKSkodCwgcmVzdWx0KTsKKworICAgIGlmIChwcm9jZWVkKSB7CisgICAgICAgIHJl
c3VsdCA9IEhUTUxFbGVtZW50RmFjdG9yeTo6Y3JlYXRlSFRNTEVsZW1lbnQodC0+dGFnTmFtZSwg
ZG9jKCksIGZvcm0pOworICAgICAgICBpZiAodC0+dGFnTmFtZSA9PSBIVE1MTmFtZXM6OmZvcm0o
KSkKKyAgICAgICAgICAgIGZvcm0gPSBzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnRJbXBsKj4o
cmVzdWx0KTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogI2RlZmluZSBNQVhfUkVE
VU5EQU5UIDIwCiAKLWJvb2wgS0hUTUxQYXJzZXI6OmFsbG93TmVzdGVkUmVkdW5kYW50VGFnKGlu
dCBfaWQpCitib29sIEhUTUxQYXJzZXI6OmFsbG93TmVzdGVkUmVkdW5kYW50VGFnKGNvbnN0IEF0
b21pY1N0cmluZyYgX3RhZ05hbWUpCiB7CiAgICAgLy8gd3d3LmxpY2VvLmVkdS5teCBpcyBhbiBl
eGFtcGxlIG9mIGEgc2l0ZSB0aGF0IGFjaGlldmVzIGEgbGV2ZWwgb2YgbmVzdGluZyBvZgogICAg
IC8vIGFib3V0IDE1MDAgdGFncywgYWxsIGZyb20gYSBidW5jaCBvZiA8Yj5zLiAgV2Ugd2lsbCBv
bmx5IGFsbG93IGF0IG1vc3QgMjAKICAgICAvLyBuZXN0ZWQgdGFncyBvZiB0aGUgc2FtZSB0eXBl
IGJlZm9yZSBqdXN0IGlnbm9yaW5nIHRoZW0gYWxsIHRvZ2V0aGVyLgogICAgIGludCBpID0gMDsK
ICAgICBmb3IgKEhUTUxTdGFja0VsZW0qIGN1cnIgPSBibG9ja1N0YWNrOwotICAgICAgICAgaSA8
IE1BWF9SRURVTkRBTlQgJiYgY3VyciAmJiBjdXJyLT5pZCA9PSBfaWQ7CisgICAgICAgICBpIDwg
TUFYX1JFRFVOREFOVCAmJiBjdXJyICYmIGN1cnItPnRhZ05hbWUgPT0gX3RhZ05hbWU7CiAgICAg
ICAgICBjdXJyID0gY3Vyci0+bmV4dCwgaSsrKTsKICAgICByZXR1cm4gaSAhPSBNQVhfUkVEVU5E
QU5UOwogfQogCi12b2lkIEtIVE1MUGFyc2VyOjpwcm9jZXNzQ2xvc2VUYWcoVG9rZW4gKnQpCit2
b2lkIEhUTUxQYXJzZXI6OnByb2Nlc3NDbG9zZVRhZyhUb2tlbiAqdCkKIHsKLSAgICAvLyBzdXBw
b3J0IGZvciByZWFsbHkgYnJva2VuIGh0bWwuIENhbid0IGJlbGlldmUgSSdtIHN1cHBvcnRpbmcg
c3VjaCBjcmFwIChsYXJzKQotICAgIHN3aXRjaCh0LT5pZCkKLSAgICB7Ci0gICAgY2FzZSBJRF9I
VE1MK0lEX0NMT1NFX1RBRzoKLSAgICBjYXNlIElEX0JPRFkrSURfQ0xPU0VfVEFHOgotICAgICAg
ICAvLyB3ZSBuZXZlciBjbG9zZSB0aGUgYm9keSB0YWcsIHNpbmNlIHNvbWUgc3R1cGlkIHdlYiBw
YWdlcyBjbG9zZSBpdCBiZWZvcmUgdGhlIGFjdHVhbCBlbmQgb2YgdGhlIGRvYy4KLSAgICAgICAg
Ly8gbGV0J3MgcmVseSBvbiB0aGUgZW5kKCkgY2FsbCB0byBjbG9zZSB0aGluZ3MuCisgICAgLy8g
U3VwcG9ydCBmb3IgcmVhbGx5IGJyb2tlbiBodG1sLgorICAgIC8vIHdlIG5ldmVyIGNsb3NlIHRo
ZSBib2R5IHRhZywgc2luY2Ugc29tZSBzdHVwaWQgd2ViIHBhZ2VzIGNsb3NlIGl0IGJlZm9yZSB0
aGUgYWN0dWFsIGVuZCBvZiB0aGUgZG9jLgorICAgIC8vIGxldCdzIHJlbHkgb24gdGhlIGVuZCgp
IGNhbGwgdG8gY2xvc2UgdGhpbmdzLgorICAgIGlmICh0LT50YWdOYW1lID09IEhUTUxOYW1lczo6
aHRtbCgpIHx8IHQtPnRhZ05hbWUgPT0gSFRNTE5hbWVzOjpib2R5KCkpCiAgICAgICAgIHJldHVy
bjsKLSAgICBjYXNlIElEX0ZPUk0rSURfQ0xPU0VfVEFHOgorICAgIAorICAgIGlmICh0LT50YWdO
YW1lID09IEhUTUxOYW1lczo6Zm9ybSgpKQogICAgICAgICBmb3JtID0gMDsKLSAgICAgICAgLy8g
dGhpcyBvbmUgaXMgdG8gZ2V0IHRoZSByaWdodCBzdHlsZSBvbiB0aGUgYm9keSBlbGVtZW50Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgSURfTUFQK0lEX0NMT1NFX1RBRzoKKyAgICBlbHNlIGlm
ICh0LT50YWdOYW1lID09IEhUTUxOYW1lczo6bWFwKCkpCiAgICAgICAgIG1hcCA9IDA7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgSURfU0VMRUNUK0lEX0NMT1NFX1RBRzoKKyAgICBlbHNlIGlm
ICh0LT50YWdOYW1lID09IEhUTUxOYW1lczo6c2VsZWN0KCkpCiAgICAgICAgIGluU2VsZWN0ID0g
ZmFsc2U7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAg
IH0KLQotI2lmZGVmIFBBUlNFUl9ERUJVRwotICAgIGtkRGVidWcoIDYwMzUgKSA8PCAiYWRkZWQg
dGhlIGZvbGxvd2luZyBjaGlsZHMgdG8gIiA8PCBjdXJyZW50LT5ub2RlTmFtZSgpLnN0cmluZygp
IDw8IGVuZGw7Ci0gICAgTm9kZUltcGwgKmNoaWxkID0gY3VycmVudC0+Zmlyc3RDaGlsZCgpOwot
ICAgIHdoaWxlKGNoaWxkICE9IDApCi0gICAgewotICAgICAgICBrZERlYnVnKCA2MDM1ICkgPDwg
IiAgICAiIDw8IGNoaWxkLT5ub2RlTmFtZSgpLnN0cmluZygpIDw8IGVuZGw7Ci0gICAgICAgIGNo
aWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCk7Ci0gICAgfQotI2VuZGlmCisgICAgICAgIAogICAg
IEhUTUxTdGFja0VsZW0qIG9sZEVsZW0gPSBibG9ja1N0YWNrOwotICAgIHBvcEJsb2NrKHQtPmlk
LUlEX0NMT1NFX1RBRyk7Ci0gICAgaWYgKG9sZEVsZW0gPT0gYmxvY2tTdGFjayAmJiB0LT5pZCA9
PSBJRF9QK0lEX0NMT1NFX1RBRykgeworICAgIHBvcEJsb2NrKHQtPnRhZ05hbWUpOworICAgIGlm
IChvbGRFbGVtID09IGJsb2NrU3RhY2sgJiYgdC0+dGFnTmFtZSA9PSBIVE1MTmFtZXM6OnAoKSkg
ewogICAgICAgICAvLyBXZSBlbmNvdW50ZXJlZCBhIHN0cmF5IDwvcD4uICBBbWF6aW5nbHkgR2Vj
a28sIFdpbklFLCBhbmQgTWFjSUUgYWxsIHRyZWF0CiAgICAgICAgIC8vIHRoaXMgYXMgYSB2YWxp
ZCBicmVhaywgaS5lLiwgPHA+PC9wPi4gIFNvIGdvIGFoZWFkIGFuZCBtYWtlIHRoZSBlbXB0eQog
ICAgICAgICAvLyBwYXJhZ3JhcGguCi0gICAgICAgIHQtPmlkLT1JRF9DTE9TRV9UQUc7CisgICAg
ICAgIHQtPmJlZ2luVGFnID0gdHJ1ZTsKICAgICAgICAgcGFyc2VUb2tlbih0KTsKLSAgICAgICAg
cG9wQmxvY2soSURfUCk7CisgICAgICAgIHBvcEJsb2NrKHQtPnRhZ05hbWUpOwogICAgIH0KICNp
ZmRlZiBQQVJTRVJfREVCVUcKICAgICBrZERlYnVnKCA2MDM1ICkgPDwgImNsb3NlVGFnIC0tPiBj
dXJyZW50ID0gIiA8PCBjdXJyZW50LT5ub2RlTmFtZSgpLnN0cmluZygpIDw8IGVuZGw7CiAjZW5k
aWYKIH0KIAotYm9vbCBLSFRNTFBhcnNlcjo6aXNIZWFkZXJUYWcoaW50IF9pZCkKK2Jvb2wgSFRN
TFBhcnNlcjo6aXNIZWFkZXJUYWcoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lKQogewotICAg
IHN3aXRjaCAoX2lkKSB7Ci0gICAgICAgIGNhc2UgSURfSDE6Ci0gICAgICAgIGNhc2UgSURfSDI6
Ci0gICAgICAgIGNhc2UgSURfSDM6Ci0gICAgICAgIGNhc2UgSURfSDQ6Ci0gICAgICAgIGNhc2Ug
SURfSDU6Ci0gICAgICAgIGNhc2UgSURfSDY6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBzdGF0aWMgSGFz
aFNldDxET01TdHJpbmdJbXBsKiwgUG9pbnRlckhhc2g8RE9NU3RyaW5nSW1wbCo+ID4gaGVhZGVy
VGFnczsKKyAgICBpZiAoaGVhZGVyVGFncy5pc0VtcHR5KCkpIHsKKyAgICAgICAgaGVhZGVyVGFn
cy5pbnNlcnQoSFRNTE5hbWVzOjpoMSgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgaGVhZGVy
VGFncy5pbnNlcnQoSFRNTE5hbWVzOjpoMigpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgaGVh
ZGVyVGFncy5pbnNlcnQoSFRNTE5hbWVzOjpoMygpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAg
aGVhZGVyVGFncy5pbnNlcnQoSFRNTE5hbWVzOjpoNCgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAg
ICAgaGVhZGVyVGFncy5pbnNlcnQoSFRNTE5hbWVzOjpoNSgpLmxvY2FsTmFtZVB0cigpKTsKKyAg
ICAgICAgaGVhZGVyVGFncy5pbnNlcnQoSFRNTE5hbWVzOjpoNigpLmxvY2FsTmFtZVB0cigpKTsK
ICAgICB9CisgICAgCisgICAgcmV0dXJuIGhlYWRlclRhZ3MuY29udGFpbnModGFnTmFtZS5pbXBs
ZW1lbnRhdGlvbigpKTsKIH0KIAotdm9pZCBLSFRNTFBhcnNlcjo6cG9wTmVzdGVkSGVhZGVyVGFn
KCkKK3ZvaWQgSFRNTFBhcnNlcjo6cG9wTmVzdGVkSGVhZGVyVGFnKCkKIHsKICAgICAvLyBUaGlz
IGZ1bmN0aW9uIG9ubHkgY2FyZXMgYWJvdXQgY2hlY2tpbmcgZm9yIG5lc3RlZCBoZWFkZXJzIHRo
YXQgaGF2ZSBvbmx5IGlubGluZXMgaW4gYmV0d2VlbiB0aGVtLgogICAgIE5vZGVJbXBsKiBjdXJy
Tm9kZSA9IGN1cnJlbnQ7CiAgICAgZm9yIChIVE1MU3RhY2tFbGVtKiBjdXJyID0gYmxvY2tTdGFj
azsgY3VycjsgY3VyciA9IGN1cnItPm5leHQpIHsKLSAgICAgICAgaWYgKGlzSGVhZGVyVGFnKGN1
cnItPmlkKSkgewotICAgICAgICAgICAgcG9wQmxvY2soY3Vyci0+aWQpOworICAgICAgICBpZiAo
aXNIZWFkZXJUYWcoY3Vyci0+dGFnTmFtZSkpIHsKKyAgICAgICAgICAgIHBvcEJsb2NrKGN1cnIt
PnRhZ05hbWUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGlmIChj
dXJyTm9kZSAmJiAhY3Vyck5vZGUtPmlzSW5saW5lKCkpCisgICAgICAgIGlmIChjdXJyTm9kZSAm
JiAhaXNJbmxpbmUoY3Vyck5vZGUpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBjdXJy
Tm9kZSA9IGN1cnItPm5vZGU7CiAgICAgfQogfQogCi1ib29sIEtIVE1MUGFyc2VyOjppc1Jlc2lk
dWFsU3R5bGVUYWcoaW50IF9pZCkKK2Jvb2wgSFRNTFBhcnNlcjo6aXNJbmxpbmUoRE9NOjpOb2Rl
SW1wbCogbm9kZSkgY29uc3QKIHsKLSAgICBzd2l0Y2ggKF9pZCkgewotICAgICAgICBjYXNlIElE
X0E6Ci0gICAgICAgIGNhc2UgSURfRk9OVDoKLSAgICAgICAgY2FzZSBJRF9UVDoKLSAgICAgICAg
Y2FzZSBJRF9VOgotICAgICAgICBjYXNlIElEX0I6Ci0gICAgICAgIGNhc2UgSURfSToKLSAgICAg
ICAgY2FzZSBJRF9TOgotICAgICAgICBjYXNlIElEX1NUUklLRToKLSAgICAgICAgY2FzZSBJRF9C
SUc6Ci0gICAgICAgIGNhc2UgSURfU01BTEw6Ci0gICAgICAgIGNhc2UgSURfRU06Ci0gICAgICAg
IGNhc2UgSURfU1RST05HOgotICAgICAgICBjYXNlIElEX0RGTjoKLSAgICAgICAgY2FzZSBJRF9D
T0RFOgotICAgICAgICBjYXNlIElEX1NBTVA6Ci0gICAgICAgIGNhc2UgSURfS0JEOgotICAgICAg
ICBjYXNlIElEX1ZBUjoKKyAgICBpZiAobm9kZS0+aXNUZXh0Tm9kZSgpKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKworICAgIGlmIChub2RlLT5pc0hUTUxFbGVtZW50KCkpIHsKKyAgICAgICAgSFRN
TEVsZW1lbnRJbXBsKiBlID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsKj4obm9kZSk7Cisg
ICAgICAgIGlmIChlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjphKCkpIHx8IGUtPmhhc0xvY2Fs
TmFtZShIVE1MTmFtZXM6OmZvbnQoKSkgfHwgZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dHQo
KSkgfHwKKyAgICAgICAgICAgIGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnUoKSkgfHwgZS0+
aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6YigpKSB8fCBlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVz
OjppKCkpIHx8CisgICAgICAgICAgICBlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpzKCkpIHx8
IGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnN0cmlrZSgpKSB8fCBlLT5oYXNMb2NhbE5hbWUo
SFRNTE5hbWVzOjpiaWcoKSkgfHwKKyAgICAgICAgICAgIGUtPmhhc0xvY2FsTmFtZShIVE1MTmFt
ZXM6OnNtYWxsKCkpIHx8IGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmVtKCkpIHx8IGUtPmhh
c0xvY2FsTmFtZShIVE1MTmFtZXM6OnN0cm9uZygpKSB8fAorICAgICAgICAgICAgZS0+aGFzTG9j
YWxOYW1lKEhUTUxOYW1lczo6ZGZuKCkpIHx8IGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmNv
ZGUoKSkgfHwgZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6c2FtcCgpKSB8fAorICAgICAgICAg
ICAgZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6a2JkKCkpIHx8IGUtPmhhc0xvY2FsTmFtZShI
VE1MTmFtZXM6OnZhcigpKSB8fCBlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpjaXRlKCkpIHx8
CisgICAgICAgICAgICBlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjphYmJyKCkpIHx8IGUtPmhh
c0xvY2FsTmFtZShIVE1MTmFtZXM6OmFjcm9ueW0oKSkgfHwgZS0+aGFzTG9jYWxOYW1lKEhUTUxO
YW1lczo6c3ViKCkpIHx8CisgICAgICAgICAgICBlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpz
dXAoKSkgfHwgZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6c3BhbigpKSB8fCBlLT5oYXNMb2Nh
bE5hbWUoSFRNTE5hbWVzOjpub2JyKCkpIHx8CisgICAgICAgICAgICBlLT5oYXNMb2NhbE5hbWUo
SFRNTE5hbWVzOjp3YnIoKSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CisgICAgCisgICAgcmV0dXJu
IGZhbHNlOworfQorCitib29sIEhUTUxQYXJzZXI6OmlzUmVzaWR1YWxTdHlsZVRhZyhjb25zdCBB
dG9taWNTdHJpbmcmIHRhZ05hbWUpCit7CisgICAgc3RhdGljIEhhc2hTZXQ8RE9NU3RyaW5nSW1w
bCosIFBvaW50ZXJIYXNoPERPTVN0cmluZ0ltcGwqPiA+IHJlc2lkdWFsU3R5bGVUYWdzOworICAg
IGlmIChyZXNpZHVhbFN0eWxlVGFncy5pc0VtcHR5KCkpIHsKKyAgICAgICAgcmVzaWR1YWxTdHls
ZVRhZ3MuaW5zZXJ0KEhUTUxOYW1lczo6YSgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgcmVz
aWR1YWxTdHlsZVRhZ3MuaW5zZXJ0KEhUTUxOYW1lczo6Zm9udCgpLmxvY2FsTmFtZVB0cigpKTsK
KyAgICAgICAgcmVzaWR1YWxTdHlsZVRhZ3MuaW5zZXJ0KEhUTUxOYW1lczo6dHQoKS5sb2NhbE5h
bWVQdHIoKSk7CisgICAgICAgIHJlc2lkdWFsU3R5bGVUYWdzLmluc2VydChIVE1MTmFtZXM6OnUo
KS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHJlc2lkdWFsU3R5bGVUYWdzLmluc2VydChIVE1M
TmFtZXM6OmIoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHJlc2lkdWFsU3R5bGVUYWdzLmlu
c2VydChIVE1MTmFtZXM6OmkoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHJlc2lkdWFsU3R5
bGVUYWdzLmluc2VydChIVE1MTmFtZXM6OnMoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHJl
c2lkdWFsU3R5bGVUYWdzLmluc2VydChIVE1MTmFtZXM6OnN0cmlrZSgpLmxvY2FsTmFtZVB0cigp
KTsKKyAgICAgICAgcmVzaWR1YWxTdHlsZVRhZ3MuaW5zZXJ0KEhUTUxOYW1lczo6YmlnKCkubG9j
YWxOYW1lUHRyKCkpOworICAgICAgICByZXNpZHVhbFN0eWxlVGFncy5pbnNlcnQoSFRNTE5hbWVz
OjpzbWFsbCgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgcmVzaWR1YWxTdHlsZVRhZ3MuaW5z
ZXJ0KEhUTUxOYW1lczo6ZW0oKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHJlc2lkdWFsU3R5
bGVUYWdzLmluc2VydChIVE1MTmFtZXM6OnN0cm9uZygpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAg
ICAgcmVzaWR1YWxTdHlsZVRhZ3MuaW5zZXJ0KEhUTUxOYW1lczo6ZGZuKCkubG9jYWxOYW1lUHRy
KCkpOworICAgICAgICByZXNpZHVhbFN0eWxlVGFncy5pbnNlcnQoSFRNTE5hbWVzOjpjb2RlKCku
bG9jYWxOYW1lUHRyKCkpOworICAgICAgICByZXNpZHVhbFN0eWxlVGFncy5pbnNlcnQoSFRNTE5h
bWVzOjpzYW1wKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICByZXNpZHVhbFN0eWxlVGFncy5p
bnNlcnQoSFRNTE5hbWVzOjprYmQoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIHJlc2lkdWFs
U3R5bGVUYWdzLmluc2VydChIVE1MTmFtZXM6OnZhcigpLmxvY2FsTmFtZVB0cigpKTsKKyAgICB9
CisgICAgCisgICAgcmV0dXJuIHJlc2lkdWFsU3R5bGVUYWdzLmNvbnRhaW5zKHRhZ05hbWUuaW1w
bGVtZW50YXRpb24oKSk7CiB9CiAKLWJvb2wgS0hUTUxQYXJzZXI6OmlzQWZmZWN0ZWRCeVJlc2lk
dWFsU3R5bGUoaW50IF9pZCkKK2Jvb2wgSFRNTFBhcnNlcjo6aXNBZmZlY3RlZEJ5UmVzaWR1YWxT
dHlsZShjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUpCiB7Ci0gICAgaWYgKGlzUmVzaWR1YWxT
dHlsZVRhZyhfaWQpKQorICAgIGlmIChpc1Jlc2lkdWFsU3R5bGVUYWcodGFnTmFtZSkpCiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIAotICAgIHN3aXRjaCAoX2lkKSB7Ci0gICAgICAgIGNhc2Ug
SURfUDoKLSAgICAgICAgY2FzZSBJRF9ESVY6Ci0gICAgICAgIGNhc2UgSURfQkxPQ0tRVU9URToK
LSAgICAgICAgY2FzZSBJRF9BRERSRVNTOgotICAgICAgICBjYXNlIElEX0gxOgotICAgICAgICBj
YXNlIElEX0gyOgotICAgICAgICBjYXNlIElEX0gzOgotICAgICAgICBjYXNlIElEX0g0OgotICAg
ICAgICBjYXNlIElEX0g1OgotICAgICAgICBjYXNlIElEX0g2OgotICAgICAgICBjYXNlIElEX0NF
TlRFUjoKLSAgICAgICAgY2FzZSBJRF9VTDoKLSAgICAgICAgY2FzZSBJRF9PTDoKLSAgICAgICAg
Y2FzZSBJRF9MSToKLSAgICAgICAgY2FzZSBJRF9ETDoKLSAgICAgICAgY2FzZSBJRF9EVDoKLSAg
ICAgICAgY2FzZSBJRF9ERDoKLSAgICAgICAgY2FzZSBJRF9QUkU6Ci0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBzdGF0aWMgSGFzaFNldDxET01TdHJpbmdJbXBsKiwgUG9pbnRlckhhc2g8RE9NU3RyaW5nSW1w
bCo+ID4gYWZmZWN0ZWRCbG9ja1RhZ3M7CisgICAgaWYgKGFmZmVjdGVkQmxvY2tUYWdzLmlzRW1w
dHkoKSkgeworICAgICAgICBhZmZlY3RlZEJsb2NrVGFncy5pbnNlcnQoSFRNTE5hbWVzOjpoMSgp
LmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgYWZmZWN0ZWRCbG9ja1RhZ3MuaW5zZXJ0KEhUTUxO
YW1lczo6aDIoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIGFmZmVjdGVkQmxvY2tUYWdzLmlu
c2VydChIVE1MTmFtZXM6OmgzKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICBhZmZlY3RlZEJs
b2NrVGFncy5pbnNlcnQoSFRNTE5hbWVzOjpoNCgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAg
YWZmZWN0ZWRCbG9ja1RhZ3MuaW5zZXJ0KEhUTUxOYW1lczo6aDUoKS5sb2NhbE5hbWVQdHIoKSk7
CisgICAgICAgIGFmZmVjdGVkQmxvY2tUYWdzLmluc2VydChIVE1MTmFtZXM6Omg2KCkubG9jYWxO
YW1lUHRyKCkpOworICAgICAgICBhZmZlY3RlZEJsb2NrVGFncy5pbnNlcnQoSFRNTE5hbWVzOjpw
KCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICBhZmZlY3RlZEJsb2NrVGFncy5pbnNlcnQoSFRN
TE5hbWVzOjpkaXYoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIGFmZmVjdGVkQmxvY2tUYWdz
Lmluc2VydChIVE1MTmFtZXM6OmJsb2NrcXVvdGUoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAg
IGFmZmVjdGVkQmxvY2tUYWdzLmluc2VydChIVE1MTmFtZXM6OmFkZHJlc3MoKS5sb2NhbE5hbWVQ
dHIoKSk7CisgICAgICAgIGFmZmVjdGVkQmxvY2tUYWdzLmluc2VydChIVE1MTmFtZXM6OmNlbnRl
cigpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgYWZmZWN0ZWRCbG9ja1RhZ3MuaW5zZXJ0KEhU
TUxOYW1lczo6dWwoKS5sb2NhbE5hbWVQdHIoKSk7CisgICAgICAgIGFmZmVjdGVkQmxvY2tUYWdz
Lmluc2VydChIVE1MTmFtZXM6Om9sKCkubG9jYWxOYW1lUHRyKCkpOworICAgICAgICBhZmZlY3Rl
ZEJsb2NrVGFncy5pbnNlcnQoSFRNTE5hbWVzOjpsaSgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAg
ICAgYWZmZWN0ZWRCbG9ja1RhZ3MuaW5zZXJ0KEhUTUxOYW1lczo6ZGwoKS5sb2NhbE5hbWVQdHIo
KSk7CisgICAgICAgIGFmZmVjdGVkQmxvY2tUYWdzLmluc2VydChIVE1MTmFtZXM6OmR0KCkubG9j
YWxOYW1lUHRyKCkpOworICAgICAgICBhZmZlY3RlZEJsb2NrVGFncy5pbnNlcnQoSFRNTE5hbWVz
OjpkZCgpLmxvY2FsTmFtZVB0cigpKTsKKyAgICAgICAgYWZmZWN0ZWRCbG9ja1RhZ3MuaW5zZXJ0
KEhUTUxOYW1lczo6cHJlKCkubG9jYWxOYW1lUHRyKCkpOwogICAgIH0KKyAgICAKKyAgICByZXR1
cm4gYWZmZWN0ZWRCbG9ja1RhZ3MuY29udGFpbnModGFnTmFtZS5pbXBsZW1lbnRhdGlvbigpKTsK
IH0KIAotdm9pZCBLSFRNTFBhcnNlcjo6aGFuZGxlUmVzaWR1YWxTdHlsZUNsb3NlVGFnQWNyb3Nz
QmxvY2tzKEhUTUxTdGFja0VsZW0qIGVsZW0pCit2b2lkIEhUTUxQYXJzZXI6OmhhbmRsZVJlc2lk
dWFsU3R5bGVDbG9zZVRhZ0Fjcm9zc0Jsb2NrcyhIVE1MU3RhY2tFbGVtKiBlbGVtKQogewogICAg
IC8vIEZpbmQgdGhlIGVsZW1lbnQgdGhhdCBjcm9zc2VzIG92ZXIgdG8gYSBoaWdoZXIgbGV2ZWwu
ICAgRm9yIG5vdywgaWYgdGhlcmUgaXMgbW9yZSB0aGFuCiAgICAgLy8gb25lLCB3ZSB3aWxsIGp1
c3QgZ2l2ZSB1cCBhbmQgbm90IGF0dGVtcHQgYW55IHNvcnQgb2YgY29ycmVjdGlvbi4gIEl0J3Mg
aGlnaGx5IHVubGlrZWx5IHRoYXQKQEAgLTExMjUsNyArOTkyLDcgQEAgdm9pZCBLSFRNTFBhcnNl
cjo6aGFuZGxlUmVzaWR1YWxTdHlsZUNsbwogICAgICAgICBjdXJyID0gY3Vyci0+bmV4dDsKICAg
ICB9CiAKLSAgICBpZiAoIWN1cnIgfHwgIW1heEVsZW0gfHwgIWlzQWZmZWN0ZWRCeVJlc2lkdWFs
U3R5bGUobWF4RWxlbS0+aWQpKSByZXR1cm47CisgICAgaWYgKCFjdXJyIHx8ICFtYXhFbGVtIHx8
ICFpc0FmZmVjdGVkQnlSZXNpZHVhbFN0eWxlKG1heEVsZW0tPnRhZ05hbWUpKSByZXR1cm47CiAK
ICAgICBOb2RlSW1wbCogcmVzaWR1YWxFbGVtID0gcHJldi0+bm9kZTsKICAgICBOb2RlSW1wbCog
YmxvY2tFbGVtID0gcHJldk1heEVsZW0gPyBwcmV2TWF4RWxlbS0+bm9kZSA6IGN1cnJlbnQ7CkBA
IC0xMTQ3LDcgKzEwMTQsNyBAQCB2b2lkIEtIVE1MUGFyc2VyOjpoYW5kbGVSZXNpZHVhbFN0eWxl
Q2xvCiAgICAgICAgIEhUTUxTdGFja0VsZW0qIHByZXZFbGVtID0gbWF4RWxlbTsKICAgICAgICAg
d2hpbGUgKGN1cnJFbGVtICE9IGVsZW0pIHsKICAgICAgICAgICAgIEhUTUxTdGFja0VsZW0qIG5l
eHRFbGVtID0gY3VyckVsZW0tPm5leHQ7Ci0gICAgICAgICAgICBpZiAoIWlzUmVzaWR1YWxTdHls
ZVRhZyhjdXJyRWxlbS0+aWQpKSB7CisgICAgICAgICAgICBpZiAoIWlzUmVzaWR1YWxTdHlsZVRh
ZyhjdXJyRWxlbS0+dGFnTmFtZSkpIHsKICAgICAgICAgICAgICAgICBwcmV2RWxlbS0+bmV4dCA9
IG5leHRFbGVtOwogICAgICAgICAgICAgICAgIHByZXZFbGVtLT5ub2RlID0gY3VyckVsZW0tPm5v
ZGU7CiAgICAgICAgICAgICAgICAgZGVsZXRlIGN1cnJFbGVtOwpAQCAtMTE2OSw3ICsxMDM2LDcg
QEAgdm9pZCBLSFRNTFBhcnNlcjo6aGFuZGxlUmVzaWR1YWxTdHlsZUNsbwogICAgICAgICBOb2Rl
SW1wbCogY3Vyck5vZGUgPSAwOwogICAgICAgICBjdXJyRWxlbSA9IG1heEVsZW07CiAgICAgICAg
IHdoaWxlIChjdXJyRWxlbS0+bm9kZSAhPSByZXNpZHVhbEVsZW0pIHsKLSAgICAgICAgICAgIGlm
IChpc1Jlc2lkdWFsU3R5bGVUYWcoY3VyckVsZW0tPm5vZGUtPmlkKCkpKSB7CisgICAgICAgICAg
ICBpZiAoaXNSZXNpZHVhbFN0eWxlVGFnKGN1cnJFbGVtLT5ub2RlLT5sb2NhbE5hbWUoKSkpIHsK
ICAgICAgICAgICAgICAgICAvLyBDcmVhdGUgYSBjbG9uZSBvZiB0aGlzIGVsZW1lbnQuCiAgICAg
ICAgICAgICAgICAgY3Vyck5vZGUgPSBjdXJyRWxlbS0+bm9kZS0+Y2xvbmVOb2RlKGZhbHNlKTsK
IApAQCAtMTI0NSw3ICsxMTEyLDcgQEAgdm9pZCBLSFRNTFBhcnNlcjo6aGFuZGxlUmVzaWR1YWxT
dHlsZUNsbwogICAgICAgICAvLyBXZSB3aWxsIGFjdHVhbGx5IHNjaGVkdWxlIHRoaXMgdGFnIGZv
ciByZW9wZW5pbmcKICAgICAgICAgLy8gYWZ0ZXIgd2UgY29tcGxldGUgdGhlIGNsb3NlIG9mIHRo
aXMgZW50aXJlIGJsb2NrLgogICAgICAgICBOb2RlSW1wbCogY3Vyck5vZGUgPSBjdXJyZW50Owot
ICAgICAgICBpZiAoaXNSZXNpZHVhbFN0eWxlVGFnKGN1cnItPmlkKSkgeworICAgICAgICBpZiAo
aXNSZXNpZHVhbFN0eWxlVGFnKGN1cnItPnRhZ05hbWUpKSB7CiAgICAgICAgICAgICAvLyBXZSd2
ZSBvdmVybG9hZGVkIHRoZSB1c2Ugb2Ygc3RhY2sgZWxlbWVudHMgYW5kIGFyZSBqdXN0IHJldXNp
bmcgdGhlCiAgICAgICAgICAgICAvLyBzdHJ1Y3Qgd2l0aCBhIHNsaWdodGx5IGRpZmZlcmVudCBt
ZWFuaW5nIHRvIHRoZSB2YXJpYWJsZXMuICBJbnN0ZWFkIG9mIGNoYWluaW5nCiAgICAgICAgICAg
ICAvLyBmcm9tIGlubmVybW9zdCB0byBvdXRlcm1vc3QsIHdlIGJ1aWxkIHVwIGEgbGlzdCBvZiBh
bGwgdGhlIHRhZ3Mgd2UgbmVlZCB0byByZW9wZW4KQEAgLTEyNjksNyArMTEzNiw3IEBAIHZvaWQg
S0hUTUxQYXJzZXI6OmhhbmRsZVJlc2lkdWFsU3R5bGVDbG8KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiBpdCBiZWNvbWVzIG5lY2Vzc2Fy
eSB0byBkbyBzby4KIH0KIAotdm9pZCBLSFRNTFBhcnNlcjo6cmVvcGVuUmVzaWR1YWxTdHlsZVRh
Z3MoSFRNTFN0YWNrRWxlbSogZWxlbSwgRE9NOjpOb2RlSW1wbCogbWFsZm9ybWVkVGFibGVQYXJl
bnQpCit2b2lkIEhUTUxQYXJzZXI6OnJlb3BlblJlc2lkdWFsU3R5bGVUYWdzKEhUTUxTdGFja0Vs
ZW0qIGVsZW0sIERPTTo6Tm9kZUltcGwqIG1hbGZvcm1lZFRhYmxlUGFyZW50KQogewogICAgIC8v
IExvb3AgZm9yIGVhY2ggdGFnIHRoYXQgbmVlZHMgdG8gYmUgcmVvcGVuZWQuCiAgICAgd2hpbGUg
KGVsZW0pIHsKQEAgLTEyODYsNyArMTE1Myw3IEBAIHZvaWQgS0hUTUxQYXJzZXI6OnJlb3BlblJl
c2lkdWFsU3R5bGVUYWcKICAgICAgICAgLy8gRklYTUU6IElzIGl0IHJlYWxseSBPSyB0byBpZ25v
cmUgdGhlIGV4Y2VwdGlvbnMgaGVyZT8KIAogICAgICAgICAvLyBOb3cgcHVzaCBhIG5ldyBzdGFj
ayBlbGVtZW50IGZvciB0aGlzIG5vZGUgd2UganVzdCBjcmVhdGVkLgotICAgICAgICBwdXNoQmxv
Y2soZWxlbS0+aWQsIGVsZW0tPmxldmVsKTsKKyAgICAgICAgcHVzaEJsb2NrKGVsZW0tPnRhZ05h
bWUsIGVsZW0tPmxldmVsKTsKIAogICAgICAgICAvLyBTZXQgb3VyIHN0cmF5VGFibGVDb250ZW50
IGJvb2xlYW4gaWYgbmVlZGVkLCBzbyB0aGF0IHRoZSByZW9wZW5lZCB0YWcgYWxzbyBrbm93cwog
ICAgICAgICAvLyB0aGF0IGl0IGlzIGluc2lkZSBhIG1hbGZvcm1lZCB0YWJsZS4KQEAgLTEzMDcs
MzUgKzExNzQsMjEgQEAgdm9pZCBLSFRNTFBhcnNlcjo6cmVvcGVuUmVzaWR1YWxTdHlsZVRhZwog
ICAgIH0KIH0KIAotdm9pZCBLSFRNTFBhcnNlcjo6cHVzaEJsb2NrKGludCBfaWQsIGludCBfbGV2
ZWwpCit2b2lkIEhUTUxQYXJzZXI6OnB1c2hCbG9jayhjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05h
bWUsIGludCBfbGV2ZWwpCiB7Ci0gICAgSFRNTFN0YWNrRWxlbSAqRWxlbSA9IG5ldyBIVE1MU3Rh
Y2tFbGVtKF9pZCwgX2xldmVsLCBjdXJyZW50LCBibG9ja1N0YWNrKTsKLQorICAgIEhUTUxTdGFj
a0VsZW0gKkVsZW0gPSBuZXcgSFRNTFN0YWNrRWxlbSh0YWdOYW1lLCBfbGV2ZWwsIGN1cnJlbnQs
IGJsb2NrU3RhY2spOwogICAgIGJsb2NrU3RhY2sgPSBFbGVtOwotICAgIGFkZEZvcmJpZGRlbihf
aWQsIGZvcmJpZGRlblRhZyk7CiB9CiAKLXZvaWQgS0hUTUxQYXJzZXI6OnBvcEJsb2NrKCBpbnQg
X2lkICkKK3ZvaWQgSFRNTFBhcnNlcjo6cG9wQmxvY2soY29uc3QgQXRvbWljU3RyaW5nJiBfdGFn
TmFtZSkKIHsKICAgICBIVE1MU3RhY2tFbGVtICpFbGVtID0gYmxvY2tTdGFjazsKICAgICAKICAg
ICBpbnQgbWF4TGV2ZWwgPSAwOwogCi0jaWZkZWYgUEFSU0VSX0RFQlVHCi0gICAga2REZWJ1Zygg
NjAzNSApIDw8ICJwb3BCbG9jaygiIDw8IGdldFRhZ05hbWUoX2lkKS5zdHJpbmcoKSA8PCAiKSIg
PDwgZW5kbDsKLSAgICB3aGlsZShFbGVtKSB7Ci0gICAgICAgIGtkRGVidWcoIDYwMzUpIDw8ICIg
ICA+ICIgPDwgZ2V0VGFnTmFtZShFbGVtLT5pZCkuc3RyaW5nKCkgPDwgZW5kbDsKLSAgICAgICAg
RWxlbSA9IEVsZW0tPm5leHQ7Ci0gICAgfQotICAgIEVsZW0gPSBibG9ja1N0YWNrOwotI2VuZGlm
Ci0KLSAgICB3aGlsZSggRWxlbSAmJiAoRWxlbS0+aWQgIT0gX2lkKSkKLSAgICB7CisgICAgd2hp
bGUgKEVsZW0gJiYgKEVsZW0tPnRhZ05hbWUgIT0gX3RhZ05hbWUpKSB7CiAgICAgICAgIGlmICht
YXhMZXZlbCA8IEVsZW0tPmxldmVsKQotICAgICAgICB7CiAgICAgICAgICAgICBtYXhMZXZlbCA9
IEVsZW0tPmxldmVsOwotICAgICAgICB9CiAgICAgICAgIEVsZW0gPSBFbGVtLT5uZXh0OwogICAg
IH0KIApAQCAtMTM0NSwyMCArMTE5OCwxOCBAQCB2b2lkIEtIVE1MUGFyc2VyOjpwb3BCbG9jaygg
aW50IF9pZCApCiAgICAgaWYgKG1heExldmVsID4gRWxlbS0+bGV2ZWwpIHsKICAgICAgICAgLy8g
V2UgZGlkbid0IG1hdGNoIGJlY2F1c2UgdGhlIHRhZyBpcyBpbiBhIGRpZmZlcmVudCBzY29wZSwg
ZS5nLiwKICAgICAgICAgLy8gPGI+PHA+Rm9vPC9iPi4gIFRyeSB0byBjb3JyZWN0IHRoZSBwcm9i
bGVtLgotICAgICAgICBpZiAoIWlzUmVzaWR1YWxTdHlsZVRhZyhfaWQpKQorICAgICAgICBpZiAo
IWlzUmVzaWR1YWxTdHlsZVRhZyhfdGFnTmFtZSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIHJldHVybiBoYW5kbGVSZXNpZHVhbFN0eWxlQ2xvc2VUYWdBY3Jvc3NCbG9ja3MoRWxlbSk7
CiAgICAgfQogCi0gICAgYm9vbCBpc0FmZmVjdGVkQnlTdHlsZSA9IGlzQWZmZWN0ZWRCeVJlc2lk
dWFsU3R5bGUoRWxlbS0+aWQpOworICAgIGJvb2wgaXNBZmZlY3RlZEJ5U3R5bGUgPSBpc0FmZmVj
dGVkQnlSZXNpZHVhbFN0eWxlKEVsZW0tPnRhZ05hbWUpOwogICAgIEhUTUxTdGFja0VsZW0qIHJl
c2lkdWFsU3R5bGVTdGFjayA9IDA7CiAgICAgTm9kZUltcGwqIG1hbGZvcm1lZFRhYmxlUGFyZW50
ID0gMDsKICAgICAKICAgICBFbGVtID0gYmxvY2tTdGFjazsKLSAgICB3aGlsZSAoRWxlbSkKLSAg
ICB7Ci0gICAgICAgIGlmIChFbGVtLT5pZCA9PSBfaWQpCi0gICAgICAgIHsKKyAgICB3aGlsZSAo
RWxlbSkgeworICAgICAgICBpZiAoRWxlbS0+dGFnTmFtZSA9PSBfdGFnTmFtZSkgewogICAgICAg
ICAgICAgaW50IHN0cmF5VGFibGUgPSBpblN0cmF5VGFibGVDb250ZW50OwogICAgICAgICAgICAg
cG9wT25lQmxvY2soKTsKICAgICAgICAgICAgIEVsZW0gPSAwOwpAQCAtMTM2OSwxNCArMTIyMCwx
MyBAQCB2b2lkIEtIVE1MUGFyc2VyOjpwb3BCbG9jayggaW50IF9pZCApCiAgICAgICAgICAgICAv
LyBtdXN0IGFsc28ga25vdyB0aGF0IGl0IGlzIHRoZSByb290IG9mIG1hbGZvcm1lZCBjb250ZW50
IGluc2lkZSBhIDx0Ym9keT4vPHRyPi4KICAgICAgICAgICAgIGlmIChzdHJheVRhYmxlICYmIChp
blN0cmF5VGFibGVDb250ZW50IDwgc3RyYXlUYWJsZSkgJiYgcmVzaWR1YWxTdHlsZVN0YWNrKSB7
CiAgICAgICAgICAgICAgICAgTm9kZUltcGwqIGN1cnIgPSBjdXJyZW50OwotICAgICAgICAgICAg
ICAgIHdoaWxlIChjdXJyICYmIGN1cnItPmlkKCkgIT0gSURfVEFCTEUpCisgICAgICAgICAgICAg
ICAgd2hpbGUgKGN1cnIgJiYgIWN1cnItPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0YWJsZSgpKSkK
ICAgICAgICAgICAgICAgICAgICAgY3VyciA9IGN1cnItPnBhcmVudE5vZGUoKTsKICAgICAgICAg
ICAgICAgICBtYWxmb3JtZWRUYWJsZVBhcmVudCA9IGN1cnIgPyBjdXJyLT5wYXJlbnROb2RlKCkg
OiAwOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewot
ICAgICAgICAgICAgaWYgKEVsZW0tPmlkID09IElEX0ZPUk0gJiYgZm9ybSkKKyAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICBpZiAoZm9ybSAmJiBFbGVtLT50YWdOYW1lID09IEhUTUxOYW1lczo6
Zm9ybSgpKQogICAgICAgICAgICAgICAgIC8vIEEgPGZvcm0+IGlzIGJlaW5nIGNsb3NlZCBwcmVt
YXR1cmVseSAoYW5kIHRoaXMgaXMKICAgICAgICAgICAgICAgICAvLyBtYWxmb3JtZWQgSFRNTCku
ICBTZXQgYW4gYXR0cmlidXRlIG9uIHRoZSBmb3JtIHRvIGNsZWFyIG91dCBpdHMKICAgICAgICAg
ICAgICAgICAvLyBib3R0b20gbWFyZ2luLgpAQCAtMTM4NSw3ICsxMjM1LDcgQEAgdm9pZCBLSFRN
TFBhcnNlcjo6cG9wQmxvY2soIGludCBfaWQgKQogICAgICAgICAgICAgLy8gU2NoZWR1bGUgdGhp
cyB0YWcgZm9yIHJlb3BlbmluZwogICAgICAgICAgICAgLy8gYWZ0ZXIgd2UgY29tcGxldGUgdGhl
IGNsb3NlIG9mIHRoaXMgZW50aXJlIGJsb2NrLgogICAgICAgICAgICAgTm9kZUltcGwqIGN1cnJO
b2RlID0gY3VycmVudDsKLSAgICAgICAgICAgIGlmIChpc0FmZmVjdGVkQnlTdHlsZSAmJiBpc1Jl
c2lkdWFsU3R5bGVUYWcoRWxlbS0+aWQpKSB7CisgICAgICAgICAgICBpZiAoaXNBZmZlY3RlZEJ5
U3R5bGUgJiYgaXNSZXNpZHVhbFN0eWxlVGFnKEVsZW0tPnRhZ05hbWUpKSB7CiAgICAgICAgICAg
ICAgICAgLy8gV2UndmUgb3ZlcmxvYWRlZCB0aGUgdXNlIG9mIHN0YWNrIGVsZW1lbnRzIGFuZCBh
cmUganVzdCByZXVzaW5nIHRoZQogICAgICAgICAgICAgICAgIC8vIHN0cnVjdCB3aXRoIGEgc2xp
Z2h0bHkgZGlmZmVyZW50IG1lYW5pbmcgdG8gdGhlIHZhcmlhYmxlcy4gIEluc3RlYWQgb2YgY2hh
aW5pbmcKICAgICAgICAgICAgICAgICAvLyBmcm9tIGlubmVybW9zdCB0byBvdXRlcm1vc3QsIHdl
IGJ1aWxkIHVwIGEgbGlzdCBvZiBhbGwgdGhlIHRhZ3Mgd2UgbmVlZCB0byByZW9wZW4KQEAgLTE0
MDgsMTkgKzEyNTgsMTQgQEAgdm9pZCBLSFRNTFBhcnNlcjo6cG9wQmxvY2soIGludCBfaWQgKQog
ICAgIHJlb3BlblJlc2lkdWFsU3R5bGVUYWdzKHJlc2lkdWFsU3R5bGVTdGFjaywgbWFsZm9ybWVk
VGFibGVQYXJlbnQpOwogfQogCi12b2lkIEtIVE1MUGFyc2VyOjpwb3BPbmVCbG9jayhib29sIGRl
bEJsb2NrKQordm9pZCBIVE1MUGFyc2VyOjpwb3BPbmVCbG9jayhib29sIGRlbEJsb2NrKQogewog
ICAgIEhUTUxTdGFja0VsZW0gKkVsZW0gPSBibG9ja1N0YWNrOwogCiAgICAgLy8gd2Ugc2hvdWxk
IG5ldmVyIGdldCBoZXJlLCBidXQgc29tZSBiYWQgaHRtbCBtaWdodCBjYXVzZSBpdC4KLSNpZm5k
ZWYgUEFSU0VSX0RFQlVHCi0gICAgaWYoIUVsZW0pIHJldHVybjsKLSNlbHNlCi0gICAga2REZWJ1
ZyggNjAzNSApIDw8ICJwb3BwaW5nIGJsb2NrOiAiIDw8IGdldFRhZ05hbWUoRWxlbS0+aWQpLnN0
cmluZygpIDw8ICIoIiA8PCBFbGVtLT5pZCA8PCAiKSIgPDwgZW5kbDsKLSNlbmRpZgotCi0jaWYg
U1BFRURfREVCVUcgPCAxCi0gICAgaWYoKEVsZW0tPm5vZGUgIT0gY3VycmVudCkpIHsKKyAgICBp
ZiAoIUVsZW0pIHJldHVybjsKKyAgICAKKyAgICBpZiAoKEVsZW0tPm5vZGUgIT0gY3VycmVudCkp
IHsKICAgICAgICAgaWYgKGN1cnJlbnQtPm1haW50YWluc1N0YXRlKCkgJiYgZG9jKCkpewogICAg
ICAgICAgICAgZG9jKCktPnJlZ2lzdGVyTWFpbnRhaW5zU3RhdGUoY3VycmVudCk7CiAgICAgICAg
ICAgICBRU3RyaW5nTGlzdCAmc3RhdGVzID0gZG9jKCktPnJlc3RvcmVTdGF0ZSgpOwpAQCAtMTQz
MSw5ICsxMjc2LDYgQEAgdm9pZCBLSFRNTFBhcnNlcjo6cG9wT25lQmxvY2soYm9vbCBkZWxCbAog
ICAgICAgICAvLyBBIGZldyBlbGVtZW50cyAoPGFwcGxldD4sIDxvYmplY3Q+KSBuZWVkIHRvIGtu
b3cgd2hlbiBhbGwgY2hpbGQgZWxlbWVudHMgKDxwYXJhbT5zKSBhcmUgYXZhaWxhYmxlOgogICAg
ICAgICBjdXJyZW50LT5jbG9zZVJlbmRlcmVyKCk7CiAgICAgfQotI2VuZGlmCi0KLSAgICByZW1v
dmVGb3JiaWRkZW4oRWxlbS0+aWQsIGZvcmJpZGRlblRhZyk7CiAKICAgICBibG9ja1N0YWNrID0g
RWxlbS0+bmV4dDsKICAgICBzZXRDdXJyZW50KEVsZW0tPm5vZGUpOwpAQCAtMTQ0NSwxOSArMTI4
NywxOSBAQCB2b2lkIEtIVE1MUGFyc2VyOjpwb3BPbmVCbG9jayhib29sIGRlbEJsCiAgICAgICAg
IGRlbGV0ZSBFbGVtOwogfQogCi12b2lkIEtIVE1MUGFyc2VyOjpwb3BJbmxpbmVCbG9ja3MoKQor
dm9pZCBIVE1MUGFyc2VyOjpwb3BJbmxpbmVCbG9ja3MoKQogewotICAgIHdoaWxlIChibG9ja1N0
YWNrICYmIGN1cnJlbnQtPmlzSW5saW5lKCkpCisgICAgd2hpbGUgKGJsb2NrU3RhY2sgJiYgaXNJ
bmxpbmUoY3VycmVudCkpCiAgICAgICAgIHBvcE9uZUJsb2NrKCk7CiB9CiAKLXZvaWQgS0hUTUxQ
YXJzZXI6OmZyZWVCbG9jaygpCit2b2lkIEhUTUxQYXJzZXI6OmZyZWVCbG9jaygpCiB7CiAgICAg
d2hpbGUgKGJsb2NrU3RhY2spCiAgICAgICAgIHBvcE9uZUJsb2NrKCk7CiB9CiAKLXZvaWQgS0hU
TUxQYXJzZXI6OmNyZWF0ZUhlYWQoKQordm9pZCBIVE1MUGFyc2VyOjpjcmVhdGVIZWFkKCkKIHsK
ICAgICBpZihoZWFkIHx8ICFkb2MoKS0+Zmlyc3RDaGlsZCgpKQogICAgICAgICByZXR1cm47CkBA
IC0xNDc0LDcgKzEzMTYsNyBAQCB2b2lkIEtIVE1MUGFyc2VyOjpjcmVhdGVIZWFkKCkKICAgICB9
CiB9CiAKLU5vZGVJbXBsICpLSFRNTFBhcnNlcjo6aGFuZGxlSXNpbmRleCggVG9rZW4gKnQgKQor
Tm9kZUltcGwgKkhUTUxQYXJzZXI6OmhhbmRsZUlzaW5kZXgoIFRva2VuICp0ICkKIHsKICAgICBO
b2RlSW1wbCAqbjsKICAgICBIVE1MRm9ybUVsZW1lbnRJbXBsICpteWZvcm0gPSBmb3JtOwpAQCAt
MTUwNCw3ICsxMzQ2LDcgQEAgTm9kZUltcGwgKktIVE1MUGFyc2VyOjpoYW5kbGVJc2luZGV4KCBU
bwogICAgIHJldHVybiBuOwogfQogCi12b2lkIEtIVE1MUGFyc2VyOjpzdGFydEJvZHkoKQordm9p
ZCBIVE1MUGFyc2VyOjpzdGFydEJvZHkoKQogewogICAgIGlmKGluQm9keSkgcmV0dXJuOwogCkBA
IC0xNTE2LDcgKzEzNTgsNyBAQCB2b2lkIEtIVE1MUGFyc2VyOjpzdGFydEJvZHkoKQogICAgIH0K
IH0KIAotdm9pZCBLSFRNTFBhcnNlcjo6ZmluaXNoZWQoKQordm9pZCBIVE1MUGFyc2VyOjpmaW5p
c2hlZCgpCiB7CiAgICAgLy8gSW4gdGhlIGNhc2Ugb2YgYSBjb21wbGV0ZWx5IGVtcHR5IGRvY3Vt
ZW50LCBoZXJlJ3MgdGhlIHBsYWNlIHRvIGNyZWF0ZSB0aGUgSFRNTCBlbGVtZW50LgogICAgIGlm
IChjdXJyZW50LT5pc0RvY3VtZW50Tm9kZSgpICYmIGN1cnJlbnQtPmZpcnN0Q2hpbGQoKSA9PSAw
KSB7CkluZGV4OiBraHRtbC9odG1sL2h0bWxwYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9odG1sL2h0bWxwYXJzZXIuaCx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS4yNwpkaWZmIC11IC1wIC1yMS4yNyBraHRtbC9odG1sL2h0bWxwYXJzZXIuaAotLS0g
a2h0bWwvaHRtbC9odG1scGFyc2VyLmgJNiBKYW4gMjAwNSAyMToxMzoxNiAtMDAwMAkxLjI3Cisr
KyBraHRtbC9odG1sL2h0bWxwYXJzZXIuaAk4IEp1bCAyMDA1IDA1OjU3OjI4IC0wMDAwCkBAIC0y
OSwxOSArMjksOSBAQAogI2lmbmRlZiBIVE1MUEFSU0VSX0gKICNkZWZpbmUgSFRNTFBBUlNFUl9I
CiAKLS8vIDAgYWxsCi0vLyAxIGRvbXRyZWUgKyByZW5kZXJ0cmVlICsgc3R5bGVGb3JFbGVtZW50
LCBubyBsYXlvdXRpbmcKLS8vIDIgZG9tdHJlZSBvbmx5Ci0jZGVmaW5lIFNQRUVEX0RFQlVHIDAK
LQotI2lmZGVmIFNQRUVEX0RFQlVHCi0jaW5jbHVkZSA8cWRhdGV0aW1lLmg+Ci0jZW5kaWYKLQog
I2luY2x1ZGUgImRvbS9kb21fc3RyaW5nLmgiCiAjaW5jbHVkZSAieG1sL2RvbV9ub2RlaW1wbC5o
IgogI2luY2x1ZGUgImh0bWwvaHRtbF9kb2N1bWVudGltcGwuaCIKLSNpbmNsdWRlICJtaXNjL2h0
bWx0YWdzLmgiCiAKIGNsYXNzIEtIVE1MVmlldzsKIGNsYXNzIEhUTUxTdGFja0VsZW07CkBAIC02
MSwxOCArNTEsMTYgQEAgbmFtZXNwYWNlIGtodG1sIHsKICAgICBjbGFzcyBUb2tlbjsKIH07CiAK
LWNsYXNzIEtIVE1MUGFyc2VyOwotCiAvKioKICAqIFRoZSBwYXJzZXIgZm9yIGh0bWwuIEl0IHJl
Y2VpdmVzIGEgc3RyZWFtIG9mIHRva2VucyBmcm9tIHRoZSBIVE1MVG9rZW5pemVyLCBhbmQKICAq
IGJ1aWxkcyB1cCB0aGUgRG9jdW1lbnQgc3RydWN0dXJlIGZvcm0gaXQuCiAgKi8KLWNsYXNzIEtI
VE1MUGFyc2VyCitjbGFzcyBIVE1MUGFyc2VyCiB7CiBwdWJsaWM6Ci0gICAgS0hUTUxQYXJzZXIo
S0hUTUxWaWV3ICp3LCBET006OkRvY3VtZW50UHRyICppLCBib29sIGluY2x1ZGVzQ29tbWVudHM9
ZmFsc2UpOwotICAgIEtIVE1MUGFyc2VyKERPTTo6RG9jdW1lbnRGcmFnbWVudEltcGwgKmZyYWcs
IERPTTo6RG9jdW1lbnRQdHIgKmRvYywgYm9vbCBpbmNsdWRlc0NvbW1lbnRzPWZhbHNlKTsKLSAg
ICB2aXJ0dWFsIH5LSFRNTFBhcnNlcigpOworICAgIEhUTUxQYXJzZXIoS0hUTUxWaWV3ICp3LCBE
T006OkRvY3VtZW50UHRyICppLCBib29sIGluY2x1ZGVzQ29tbWVudHM9ZmFsc2UpOworICAgIEhU
TUxQYXJzZXIoRE9NOjpEb2N1bWVudEZyYWdtZW50SW1wbCAqZnJhZywgRE9NOjpEb2N1bWVudFB0
ciAqZG9jLCBib29sIGluY2x1ZGVzQ29tbWVudHM9ZmFsc2UpOworICAgIHZpcnR1YWwgfkhUTUxQ
YXJzZXIoKTsKIAogICAgIC8qKgogICAgICAqIHBhcnNlcyBvbmUgdG9rZW4gZGVsaXZlcmVkIGJ5
IHRoZSB0b2tlbml6ZXIKQEAgLTg5LDcgKzc3LDcgQEAgcHVibGljOgogICAgICAqLwogICAgIHZv
aWQgcmVzZXQoKTsKIAotICAgIGJvb2wgc2tpcE1vZGUoKSBjb25zdCB7IHJldHVybiAoZGlzY2Fy
ZF91bnRpbCAhPSAwKTsgfQorICAgIGJvb2wgc2tpcE1vZGUoKSBjb25zdCB7IHJldHVybiAhZGlz
Y2FyZF91bnRpbC5pc051bGwoKTsgfQogICAgIGJvb2wgbm9TcGFjZXMoKSBjb25zdCB7IHJldHVy
biAhaW5Cb2R5OyB9CiAgICAgYm9vbCBzZWxlY3RNb2RlKCkgY29uc3QgeyByZXR1cm4gaW5TZWxl
Y3Q7IH0KIApAQCAtOTcsNDggKzg1LDcwIEBAIHB1YmxpYzoKICAgICBET006OkRvY3VtZW50UHRy
ICpkb2NQdHIoKSBjb25zdCB7IHJldHVybiBkb2N1bWVudDsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAg
dm9pZCBzZXRDdXJyZW50KERPTTo6Tm9kZUltcGwgKm5ld0N1cnJlbnQpOworICAgIHZvaWQgc2V0
Q3VycmVudChET006Ok5vZGVJbXBsKiBuZXdDdXJyZW50KTsKKyAgICB2b2lkIHNldFNraXBNb2Rl
KGNvbnN0IERPTTo6UXVhbGlmaWVkTmFtZSYgcU5hbWUpIHsgZGlzY2FyZF91bnRpbCA9IHFOYW1l
LmxvY2FsTmFtZSgpOyB9CiAKICAgICBLSFRNTFZpZXcgKkhUTUxXaWRnZXQ7CiAgICAgRE9NOjpE
b2N1bWVudFB0ciAqZG9jdW1lbnQ7CiAKICAgICAvKgotICAgICAqIGdlbmVyYXRlIGFuIGVsZW1l
bnQgZnJvbSB0aGUgdG9rZW4KKyAgICAgKiBnZW5lcmF0ZSBhIG5vZGUgZnJvbSB0aGUgdG9rZW4K
ICAgICAgKi8KLSAgICBET006Ok5vZGVJbXBsICpnZXRFbGVtZW50KGtodG1sOjpUb2tlbiAqKTsK
KyAgICBET006Ok5vZGVJbXBsICpnZXROb2RlKGtodG1sOjpUb2tlbiAqKTsKKyAgICBib29sIHRl
eHRDcmVhdGVFcnJvckNoZWNrKGtodG1sOjpUb2tlbiosIERPTTo6Tm9kZUltcGwqJik7CisgICAg
Ym9vbCBjb21tZW50Q3JlYXRlRXJyb3JDaGVjayhraHRtbDo6VG9rZW4qLCBET006Ok5vZGVJbXBs
KiYpOworICAgIGJvb2wgaGVhZENyZWF0ZUVycm9yQ2hlY2soa2h0bWw6OlRva2VuKiwgRE9NOjpO
b2RlSW1wbComKTsKKyAgICBib29sIGJvZHlDcmVhdGVFcnJvckNoZWNrKGtodG1sOjpUb2tlbios
IERPTTo6Tm9kZUltcGwqJik7CisgICAgYm9vbCBmcmFtZXNldENyZWF0ZUVycm9yQ2hlY2soa2h0
bWw6OlRva2VuKiwgRE9NOjpOb2RlSW1wbComKTsKKyAgICBib29sIGlmcmFtZUNyZWF0ZUVycm9y
Q2hlY2soa2h0bWw6OlRva2VuKiwgRE9NOjpOb2RlSW1wbComKTsKKyAgICBib29sIGZvcm1DcmVh
dGVFcnJvckNoZWNrKGtodG1sOjpUb2tlbiosIERPTTo6Tm9kZUltcGwqJik7CisgICAgYm9vbCBp
c2luZGV4Q3JlYXRlRXJyb3JDaGVjayhraHRtbDo6VG9rZW4qLCBET006Ok5vZGVJbXBsKiYpOwor
ICAgIGJvb2wgc2VsZWN0Q3JlYXRlRXJyb3JDaGVjayhraHRtbDo6VG9rZW4qLCBET006Ok5vZGVJ
bXBsKiYpOworICAgIGJvb2wgZGRDcmVhdGVFcnJvckNoZWNrKGtodG1sOjpUb2tlbiosIERPTTo6
Tm9kZUltcGwqJik7CisgICAgYm9vbCBkdENyZWF0ZUVycm9yQ2hlY2soa2h0bWw6OlRva2VuKiwg
RE9NOjpOb2RlSW1wbComKTsKKyAgICBib29sIG5lc3RlZENyZWF0ZUVycm9yQ2hlY2soa2h0bWw6
OlRva2VuKiwgRE9NOjpOb2RlSW1wbComKTsKKyAgICBib29sIG5lc3RlZFN0eWxlQ3JlYXRlRXJy
b3JDaGVjayhraHRtbDo6VG9rZW4qLCBET006Ok5vZGVJbXBsKiYpOworICAgIGJvb2wgdGFibGVD
ZWxsQ3JlYXRlRXJyb3JDaGVjayhraHRtbDo6VG9rZW4qLCBET006Ok5vZGVJbXBsKiYpOworICAg
IGJvb2wgdGFibGVTZWN0aW9uQ3JlYXRlRXJyb3JDaGVjayhraHRtbDo6VG9rZW4qLCBET006Ok5v
ZGVJbXBsKiYpOworICAgIGJvb2wgbm9lbWJlZENyZWF0ZUVycm9yQ2hlY2soa2h0bWw6OlRva2Vu
KiwgRE9NOjpOb2RlSW1wbComKTsKKyAgICBib29sIG5vc2NyaXB0Q3JlYXRlRXJyb3JDaGVjayhr
aHRtbDo6VG9rZW4qLCBET006Ok5vZGVJbXBsKiYpOworICAgIGJvb2wgbm9mcmFtZXNDcmVhdGVF
cnJvckNoZWNrKGtodG1sOjpUb2tlbiosIERPTTo6Tm9kZUltcGwqJik7CisgICAgYm9vbCBub2xh
eWVyQ3JlYXRlRXJyb3JDaGVjayhraHRtbDo6VG9rZW4qLCBET006Ok5vZGVJbXBsKiYpOwogCiAg
ICAgdm9pZCBwcm9jZXNzQ2xvc2VUYWcoa2h0bWw6OlRva2VuICopOwogCiAgICAgYm9vbCBpbnNl
cnROb2RlKERPTTo6Tm9kZUltcGwgKm4sIGJvb2wgZmxhdCA9IGZhbHNlKTsKKyAgICBib29sIGhh
bmRsZUVycm9yKERPTTo6Tm9kZUltcGwqIG4sIGJvb2wgZmxhdCwgY29uc3QgRE9NOjpBdG9taWNT
dHJpbmcmIGxvY2FsTmFtZSwgaW50IHRhZ1ByaW9yaXR5KTsKKyAgICAKKyAgICAvLyBUaGUgY3Vy
cmVudGx5IGFjdGl2ZSBlbGVtZW50ICh0aGUgb25lIG5ldyBlbGVtZW50cyB3aWxsIGJlIGFkZGVk
IHRvKS4gIENhbiBiZSBhIERvY3VtZW50RnJhZ21lbnQsIGEgRG9jdW1lbnQgb3IgYW4gRWxlbWVu
dC4KKyAgICBET006Ok5vZGVJbXBsKiBjdXJyZW50OwogCi0gICAgLyoKLSAgICAgKiBUaGUgY3Vy
cmVudGx5IGFjdGl2ZSBlbGVtZW50ICh0aGUgb25lIG5ldyBlbGVtZW50cyB3aWxsIGJlIGFkZGVk
IHRvKQotICAgICAqLwotICAgIERPTTo6Tm9kZUltcGwgKmN1cnJlbnQ7CiAgICAgYm9vbCBjdXJy
ZW50SXNSZWZlcmVuY2VkOwogCiAgICAgSFRNTFN0YWNrRWxlbSAqYmxvY2tTdGFjazsKIAotICAg
IHZvaWQgcHVzaEJsb2NrKCBpbnQgX2lkLCBpbnQgX2xldmVsKTsKLQotICAgIHZvaWQgcG9wQmxv
Y2soIGludCBfaWQgKTsKKyAgICB2b2lkIHB1c2hCbG9jayhjb25zdCBET006OkF0b21pY1N0cmlu
ZyYgdGFnTmFtZSwgaW50IF9sZXZlbCk7CisgICAgdm9pZCBwb3BCbG9jayhjb25zdCBET006OkF0
b21pY1N0cmluZyYgdGFnTmFtZSk7CisgICAgdm9pZCBwb3BCbG9jayhjb25zdCBET006OlF1YWxp
ZmllZE5hbWUmIHFOYW1lKSB7IHJldHVybiBwb3BCbG9jayhxTmFtZS5sb2NhbE5hbWUoKSk7IH0g
Ly8gQ29udmVuaWVuY2UgZnVuY3Rpb24gZm9yIHJlYWRhYmlsaXR5LgogICAgIHZvaWQgcG9wT25l
QmxvY2soYm9vbCBkZWxCbG9jayA9IHRydWUpOwogICAgIHZvaWQgcG9wSW5saW5lQmxvY2tzKCk7
CiAKLSAgICB2b2lkIGZyZWVCbG9jayggdm9pZCk7CisgICAgdm9pZCBmcmVlQmxvY2soKTsKIAog
ICAgIHZvaWQgY3JlYXRlSGVhZCgpOwogCi0gICAgYm9vbCBpc1Jlc2lkdWFsU3R5bGVUYWcoaW50
IF9pZCk7Ci0gICAgYm9vbCBpc0FmZmVjdGVkQnlSZXNpZHVhbFN0eWxlKGludCBfaWQpOworICAg
IGJvb2wgaXNSZXNpZHVhbFN0eWxlVGFnKGNvbnN0IERPTTo6QXRvbWljU3RyaW5nJiB0YWdOYW1l
KTsKKyAgICBib29sIGlzQWZmZWN0ZWRCeVJlc2lkdWFsU3R5bGUoY29uc3QgRE9NOjpBdG9taWNT
dHJpbmcmIHRhZ05hbWUpOwogICAgIHZvaWQgaGFuZGxlUmVzaWR1YWxTdHlsZUNsb3NlVGFnQWNy
b3NzQmxvY2tzKEhUTUxTdGFja0VsZW0qIGVsZW0pOwogICAgIHZvaWQgcmVvcGVuUmVzaWR1YWxT
dHlsZVRhZ3MoSFRNTFN0YWNrRWxlbSogZWxlbSwgRE9NOjpOb2RlSW1wbCogbWFsZm9ybWVkVGFi
bGVQYXJlbnQpOwogCi0gICAgYm9vbCBhbGxvd05lc3RlZFJlZHVuZGFudFRhZyhpbnQgX2lkKTsK
KyAgICBib29sIGFsbG93TmVzdGVkUmVkdW5kYW50VGFnKGNvbnN0IERPTTo6QXRvbWljU3RyaW5n
JiB0YWdOYW1lKTsKICAgICAKLSAgICBzdGF0aWMgYm9vbCBpc0hlYWRlclRhZyhpbnQgX2lkKTsK
KyAgICBzdGF0aWMgYm9vbCBpc0hlYWRlclRhZyhjb25zdCBET006OkF0b21pY1N0cmluZyYgdGFn
TmFtZSk7CiAgICAgdm9pZCBwb3BOZXN0ZWRIZWFkZXJUYWcoKTsKIAorICAgIGJvb2wgaXNJbmxp
bmUoRE9NOjpOb2RlSW1wbCogbm9kZSkgY29uc3Q7CisgICAgCiAgICAgLyoKICAgICAgKiBjdXJy
ZW50bHkgYWN0aXZlIGZvcm0KICAgICAgKi8KQEAgLTE3NSwxOCArMTg1LDEyIEBAIHByb3RlY3Rl
ZDoKICAgICAvKgogICAgICAqIHRlbGxzIHRoZSBwYXJzZXIgdG8gZGlzY2FyZCBhbGwgdGFncywg
dW50aWwgaXQgcmVhY2hlcyB0aGUgb25lIHNwZWNpZmllZAogICAgICAqLwotICAgIGludCBkaXNj
YXJkX3VudGlsOworICAgIERPTTo6QXRvbWljU3RyaW5nIGRpc2NhcmRfdW50aWw7CiAKICAgICBi
b29sIGhlYWRMb2FkZWQ7CiAgICAgaW50IGluU3RyYXlUYWJsZUNvbnRlbnQ7CiAKICAgICBib29s
IGluY2x1ZGVzQ29tbWVudHNJbkRPTTsKLSAgICAKLSAgICB1c2hvcnQgZm9yYmlkZGVuVGFnW0lE
X0xBU1RfVEFHICsgMV07Ci0gICAgCi0jaWYgU1BFRURfREVCVUcgPiAwCi0gICAgUVRpbWUgcXQ7
Ci0jZW5kaWYKIH07Ci0KKyAgICAKICNlbmRpZiAvLyBIVE1MUEFSU0VSX0gKSW5kZXg6IGtodG1s
L2h0bWwvaHRtbHRva2VuaXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dl
YkNvcmUva2h0bWwvaHRtbC9odG1sdG9rZW5pemVyLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS45NQpkaWZmIC11IC1wIC1yMS45NSBraHRtbC9odG1sL2h0bWx0b2tlbml6ZXIuY3BwCi0tLSBr
aHRtbC9odG1sL2h0bWx0b2tlbml6ZXIuY3BwCTUgSnVsIDIwMDUgMjM6MjE6MTAgLTAwMDAJMS45
NQorKysga2h0bWwvaHRtbC9odG1sdG9rZW5pemVyLmNwcAk4IEp1bCAyMDA1IDA1OjU3OjMwIC0w
MDAwCkBAIC0zOSw3ICszOSw2IEBACiAjaW5jbHVkZSAiaHRtbC9odG1sdG9rZW5pemVyLmgiCiAj
aW5jbHVkZSAiaHRtbC9odG1sX2RvY3VtZW50aW1wbC5oIgogI2luY2x1ZGUgImh0bWwvaHRtbHBh
cnNlci5oIgotI2luY2x1ZGUgImh0bWwvZHRkLmgiCiAKICNpbmNsdWRlICJtaXNjL2xvYWRlci5o
IgogI2luY2x1ZGUgIm1pc2MvaHRtbGhhc2hlcy5oIgpAQCAtNjMsNyArNjIsMTAgQEAgdXNpbmcg
RE9NOjpET01TdHJpbmc7CiB1c2luZyBET006OkRPTVN0cmluZ0ltcGw7CiB1c2luZyBET006OkRv
Y3VtZW50SW1wbDsKIHVzaW5nIERPTTo6ZW1wdHlBdG9tOwotdXNpbmcgRE9NOjplbmRUYWdSZXF1
aXJlbWVudDsKK3VzaW5nIERPTTo6Y29tbWVudEF0b207Cit1c2luZyBET006Om51bGxBdG9tOwor
dXNpbmcgRE9NOjp0ZXh0QXRvbTsKK3VzaW5nIERPTTo6SFRNTE5hbWVzOwogCiAvLyB0dXJuIG9m
ZiBpbmxpbmluZyB0byB2b2lkIHdhcm5pbmcgd2l0aCBuZXdlciBnY2MKICN1bmRlZiBfX2lubGlu
ZQpAQCAtMjM5LDcgKzI0MSw3IEBAIEhUTUxUb2tlbml6ZXI6OkhUTUxUb2tlbml6ZXIoRE9NOjpE
b2N1bWUKICAgICBzY3JpcHRDb2RlID0gMDsKICAgICBzY3JpcHRDb2RlU2l6ZSA9IHNjcmlwdENv
ZGVNYXhTaXplID0gc2NyaXB0Q29kZVJlc3luYyA9IDA7CiAgICAgY2hhcnNldHMgPSBLR2xvYmFs
OjpjaGFyc2V0cygpOwotICAgIHBhcnNlciA9IG5ldyBLSFRNTFBhcnNlcihfdmlldywgX2RvYywg
aW5jbHVkZXNDb21tZW50cyk7CisgICAgcGFyc2VyID0gbmV3IEhUTUxQYXJzZXIoX3ZpZXcsIF9k
b2MsIGluY2x1ZGVzQ29tbWVudHMpOwogICAgIG1fZXhlY3V0aW5nU2NyaXB0ID0gMDsKICAgICBs
b2FkaW5nRXh0U2NyaXB0ID0gZmFsc2U7CiAgICAgb25Ib2xkID0gZmFsc2U7CkBAIC0yNTksNyAr
MjYxLDcgQEAgSFRNTFRva2VuaXplcjo6SFRNTFRva2VuaXplcihET006OkRvY3VtZQogICAgIHNj
cmlwdENvZGUgPSAwOwogICAgIHNjcmlwdENvZGVTaXplID0gc2NyaXB0Q29kZU1heFNpemUgPSBz
Y3JpcHRDb2RlUmVzeW5jID0gMDsKICAgICBjaGFyc2V0cyA9IEtHbG9iYWw6OmNoYXJzZXRzKCk7
Ci0gICAgcGFyc2VyID0gbmV3IEtIVE1MUGFyc2VyKGksIF9kb2MsIGluY2x1ZGVzQ29tbWVudHMp
OworICAgIHBhcnNlciA9IG5ldyBIVE1MUGFyc2VyKGksIF9kb2MsIGluY2x1ZGVzQ29tbWVudHMp
OwogICAgIG1fZXhlY3V0aW5nU2NyaXB0ID0gMDsKICAgICBsb2FkaW5nRXh0U2NyaXB0ID0gZmFs
c2U7CiAgICAgb25Ib2xkID0gZmFsc2U7CkBAIC00NTEsMTAgKzQ1MywxMCBAQCB2b2lkIEhUTUxU
b2tlbml6ZXI6OnBhcnNlU3BlY2lhbChUb2tlbml6CiAgICAgICAgICAgICBlbHNlIHsKICAgICAg
ICAgICAgICAgICBwcm9jZXNzTGlzdGluZyhUb2tlbml6ZXJTdHJpbmcoc2NyaXB0Q29kZSwgc2Ny
aXB0Q29kZVNpemUpKTsKICAgICAgICAgICAgICAgICBwcm9jZXNzVG9rZW4oKTsKLSAgICAgICAg
ICAgICAgICBpZiAoIHN0eWxlICkgICAgICAgICB7IGN1cnJUb2tlbi5pZCA9IElEX1NUWUxFICsg
SURfQ0xPU0VfVEFHOyB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoIHRleHRhcmVhICkgeyBj
dXJyVG9rZW4uaWQgPSBJRF9URVhUQVJFQSArIElEX0NMT1NFX1RBRzsgfQotICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKCB0aXRsZSApIHsgY3VyclRva2VuLmlkID0gSURfVElUTEUgKyBJRF9DTE9T
RV9UQUc7IH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmICggeG1wICkgIHsgY3VyclRva2VuLmlk
ID0gSURfWE1QICsgSURfQ0xPU0VfVEFHOyB9CisgICAgICAgICAgICAgICAgaWYgKCBzdHlsZSAp
ICAgICAgICAgeyBjdXJyVG9rZW4udGFnTmFtZSA9IEhUTUxOYW1lczo6c3R5bGUoKS5sb2NhbE5h
bWUoKTsgY3VyclRva2VuLmJlZ2luVGFnID0gZmFsc2U7IH0KKyAgICAgICAgICAgICAgICBlbHNl
IGlmICggdGV4dGFyZWEgKSB7IGN1cnJUb2tlbi50YWdOYW1lID0gSFRNTE5hbWVzOjp0ZXh0YXJl
YSgpLmxvY2FsTmFtZSgpOyBjdXJyVG9rZW4uYmVnaW5UYWcgPSBmYWxzZTsgfQorICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKCB0aXRsZSApIHsgY3VyclRva2VuLnRhZ05hbWUgPSBIVE1MTmFtZXM6
OnRpdGxlKCkubG9jYWxOYW1lKCk7IGN1cnJUb2tlbi5iZWdpblRhZyA9IGZhbHNlOyB9CisgICAg
ICAgICAgICAgICAgZWxzZSBpZiAoIHhtcCApICB7IGN1cnJUb2tlbi50YWdOYW1lID0gSFRNTE5h
bWVzOjp4bXAoKS5sb2NhbE5hbWUoKTsgY3VyclRva2VuLmJlZ2luVGFnID0gZmFsc2U7IH0KICAg
ICAgICAgICAgICAgICBwcm9jZXNzVG9rZW4oKTsKICAgICAgICAgICAgICAgICBzdHlsZSA9IHNj
cmlwdCA9IHN0eWxlID0gdGV4dGFyZWEgPSB0aXRsZSA9IHhtcCA9IGZhbHNlOwogICAgICAgICAg
ICAgICAgIHRxdW90ZSA9IE5vUXVvdGU7CkBAIC01MjQsNyArNTI2LDggQEAgdm9pZCBIVE1MVG9r
ZW5pemVyOjpzY3JpcHRIYW5kbGVyKCkKICAgICBwcm9jZXNzTGlzdGluZyhUb2tlbml6ZXJTdHJp
bmcoc2NyaXB0Q29kZSwgc2NyaXB0Q29kZVNpemUpKTsKICAgICBRU3RyaW5nIGV4U2NyaXB0KCBi
dWZmZXIsIGRlc3QtYnVmZmVyICk7CiAgICAgcHJvY2Vzc1Rva2VuKCk7Ci0gICAgY3VyclRva2Vu
LmlkID0gSURfU0NSSVBUICsgSURfQ0xPU0VfVEFHOworICAgIGN1cnJUb2tlbi50YWdOYW1lID0g
SFRNTE5hbWVzOjpzY3JpcHQoKS5sb2NhbE5hbWUoKTsKKyAgICBjdXJyVG9rZW4uYmVnaW5UYWcg
PSBmYWxzZTsKICAgICBwcm9jZXNzVG9rZW4oKTsKIAogICAgIFRva2VuaXplclN0cmluZyAqc2F2
ZWRQcmVwZW5kaW5nU3JjID0gY3VycmVudFByZXBlbmRpbmdTcmM7CkBAIC03MDEsMTAgKzcwNCwx
MiBAQCB2b2lkIEhUTUxUb2tlbml6ZXI6OnBhcnNlQ29tbWVudChUb2tlbml6CiAgICAgICAgICAg
ICAgICAgICAgICAgICBjaGVja1NjcmlwdEJ1ZmZlcigpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgc2NyaXB0Q29kZVsgc2NyaXB0Q29kZVNpemUgXSA9IDA7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBzY3JpcHRDb2RlWyBzY3JpcHRDb2RlU2l6ZSArIDEgXSA9IDA7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBjdXJyVG9rZW4uaWQgPSBJRF9DT01NRU5UOworICAgICAgICAgICAgICAgICAg
ICAgICAgY3VyclRva2VuLnRhZ05hbWUgPSBjb21tZW50QXRvbTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGN1cnJUb2tlbi5iZWdpblRhZyA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBwcm9jZXNzTGlzdGluZyhUb2tlbml6ZXJTdHJpbmcoc2NyaXB0Q29kZSwgc2NyaXB0Q29kZVNp
emUgLSBlbmRDaGFyc0NvdW50KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzVG9r
ZW4oKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJUb2tlbi5pZCA9IElEX0NPTU1FTlQg
KyBJRF9DTE9TRV9UQUc7CisgICAgICAgICAgICAgICAgICAgICAgICBjdXJyVG9rZW4udGFnTmFt
ZSA9IGNvbW1lbnRBdG9tOworICAgICAgICAgICAgICAgICAgICAgICAgY3VyclRva2VuLmJlZ2lu
VGFnID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzVG9rZW4oKTsKICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBzY3JpcHRDb2RlU2l6ZSA9
IDA7CkBAIC0xMDIyLDEwICsxMDI3LDEyIEBAIHZvaWQgSFRNTFRva2VuaXplcjo6cGFyc2VUYWco
VG9rZW5pemVyU3QKICAgICAgICAgICAgICAgICAgICAgZmluaXNoID0gdHJ1ZTsKICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIC8v
IFVzZSB0b2xvd2VyKCkgaW5zdGVhZCBvZiB8IDB4MjAgdG8gbG93ZXJjYXNlIHRoZSBjaGFyIGJl
Y2F1c2UgdGhlcmUgaXMgbm8gCi0gICAgICAgICAgICAgICAgLy8gcGVyZm9ybWFuY2UgZ2FpbiBp
biB1c2luZyB8IDB4MjAgc2luY2UgdG9sb3dlcigpIGlzIG9wdGltaXplZCBhbmQgCi0gICAgICAg
ICAgICAgICAgLy8gfCAweDIwIHR1cm5zIGNoYXJhY3RlcnMgc3VjaCBhcyAnXycgaW50byBqdW5r
LgotICAgICAgICAgICAgICAgIGNCdWZmZXJbY0J1ZmZlclBvcysrXSA9IHRvbG93ZXIoY3VyY2hh
cik7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gdG9sb3dlcigpIHNob3dz
IHVwIG9uIHByb2ZpbGVzLiBUaGlzIGlzIGZhc3RlciEKKyAgICAgICAgICAgICAgICBpZiAoY3Vy
Y2hhciA+PSAnQScgJiYgY3VyY2hhciA8PSAnWicpCisgICAgICAgICAgICAgICAgICAgIGNCdWZm
ZXJbY0J1ZmZlclBvcysrXSA9IGN1cmNoYXIgKyAoJ2EnIC0gJ0EnKTsKKyAgICAgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGNCdWZmZXJbY0J1ZmZlclBvcysrXSA9IGN1cmNo
YXI7CiAgICAgICAgICAgICAgICAgKytzcmM7CiAgICAgICAgICAgICB9CiAKQEAgLTEwNDcsMjcg
KzEwNTQsMTMgQEAgdm9pZCBIVE1MVG9rZW5pemVyOjpwYXJzZVRhZyhUb2tlbml6ZXJTdAogICAg
ICAgICAgICAgICAgICAgICAvLyBTdGFydCBUYWcKICAgICAgICAgICAgICAgICAgICAgYmVnaW5U
YWcgPSB0cnVlOwogCi0gICAgICAgICAgICAgICAgLy8gQWNjZXB0IGVtcHR5IHhtbCB0YWdzIGxp
a2UgPGJyLz4uICBXZSB0cmltIG9mZiB0aGUgIi8iIHNvIHRoYXQgd2hlbiB3ZSBjYWxsCi0gICAg
ICAgICAgICAgICAgLy8gZ2V0VGFnSUQsIHdlJ2xsIGxvb2sgdXAgImJyIiBhcyB0aGUgdGFnIG5h
bWUgYW5kIG5vdCAiYnIvIi4KKyAgICAgICAgICAgICAgICAvLyBJZ25vcmUgdGhlIC8gaW4gZmFr
ZSB4bWwgdGFncyBsaWtlIDxici8+LiAgV2UgdHJpbSBvZmYgdGhlICIvIiBzbyB0aGF0IHdlJ2xs
IGdldCAiYnIiIGFzIHRoZSB0YWcgbmFtZSBhbmQgbm90ICJici8iLgogICAgICAgICAgICAgICAg
IGlmKGxlbiA+IDEgJiYgcHRyW2xlbi0xXSA9PSAnLycgKQogICAgICAgICAgICAgICAgICAgICBw
dHJbLS1sZW5dID0gJ1wwJzsKIAotICAgICAgICAgICAgICAgIC8vIExvb2sgdXAgdGhlIHRhZ0lE
IGZvciB0aGUgc3BlY2lmaWVkIHRhZyBuYW1lIChub3cgdGhhdCB3ZSd2ZSBzaGF2ZWQgb2ZmIGFu
eQotICAgICAgICAgICAgICAgIC8vIGludmFsaWQgLyB0aGF0IG1pZ2h0IGhhdmUgZm9sbG93ZWQg
dGhlIG5hbWUpLgotICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHRhZ0lEID0gZ2V0VGFn
SUQocHRyLCBsZW4pOwotICAgICAgICAgICAgICAgIGlmICghdGFnSUQpIHsKLSAgICAgICAgICAg
ICAgICAgICAgRE9NU3RyaW5nIHRhZ05hbWUocHRyKTsKLSAgICAgICAgICAgICAgICAgICAgRG9j
dW1lbnRJbXBsICpkb2MgPSBwYXJzZXItPmRvY1B0cigpLT5kb2N1bWVudCgpOwotICAgICAgICAg
ICAgICAgICAgICBpZiAoZG9jLT5pc1ZhbGlkTmFtZSh0YWdOYW1lKSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHRhZ0lEID0gcGFyc2VyLT5kb2NQdHIoKS0+ZG9jdW1lbnQoKS0+dGFnSWQoMCwg
dGFnTmFtZS5pbXBsZW1lbnRhdGlvbigpLCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGlmICh0YWdJRCkgewotI2lmZGVmIFRPS0VOX0RFQlVHCi0gICAgICAgICAg
ICAgICAgICAgIFFDU3RyaW5nIHRtcChwdHIsIGxlbisxKTsKLSAgICAgICAgICAgICAgICAgICAg
a2REZWJ1ZyggNjAzNiApIDw8ICJmb3VuZCB0YWcgaWQ9IiA8PCB0YWdJRCA8PCAiOiAiIDw8IHRt
cC5kYXRhKCkgPDwgZW5kbDsKLSNlbmRpZgotICAgICAgICAgICAgICAgICAgICBjdXJyVG9rZW4u
aWQgPSBiZWdpblRhZyA/IHRhZ0lEIDogdGFnSUQgKyBJRF9DTE9TRV9UQUc7Ci0gICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIC8vIE5vdyB0aGF0IHdlJ3ZlIHNoYXZlZCBvZmYgYW55
IGludmFsaWQgLyB0aGF0IG1pZ2h0IGhhdmUgZm9sbG93ZWQgdGhlIG5hbWUpLCBtYWtlIHRoZSB0
YWcuCisgICAgICAgICAgICAgICAgY3VyclRva2VuLnRhZ05hbWUgPSBBdG9taWNTdHJpbmcocHRy
KTsKKyAgICAgICAgICAgICAgICBjdXJyVG9rZW4uYmVnaW5UYWcgPSBiZWdpblRhZzsKICAgICAg
ICAgICAgICAgICBkZXN0ID0gYnVmZmVyOwogICAgICAgICAgICAgICAgIHRhZyA9IFNlYXJjaEF0
dHJpYnV0ZTsKICAgICAgICAgICAgICAgICBjQnVmZmVyUG9zID0gMDsKQEAgLTExMTgsMTUgKzEx
MTEsNiBAQCB2b2lkIEhUTUxUb2tlbml6ZXI6OnBhcnNlVGFnKFRva2VuaXplclN0CiAgICAgICAg
ICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRy
TmFtZSA9IFFTdHJpbmc6OmZyb21MYXRpbjEoUUNTdHJpbmcoY0J1ZmZlciwgY0J1ZmZlclBvcysx
KS5kYXRhKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJOYW1lUHJlc2VudCA9
ICFhdHRyTmFtZS5pc0VtcHR5KCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBU
aGlzIGlzIGEgZGVsaWJlcmF0ZSBxdWlyayB0byBtYXRjaCBNb3ppbGxhIGFuZCBPcGVyYS4gIFdl
IGhhdmUgdG8gZG8gdGhpcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNpbmNlIHNp
dGVzIHRoYXQgdXNlIHRoZSAic3RhbmRhcmRzLWNvbXBsaWFudCIgcGF0aCBzb21ldGltZXMgc2Vu
ZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDxzY3JpcHQgc3JjPSJmb28uanMiLz4u
ICBCb3RoIE1veiBhbmQgT3BlcmEgd2lsbCBob25vciB0aGlzLCBkZXNwaXRlIGl0Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gYmVpbmcgYm9ndXMgSFRNTC4gIFRoZXkgZG8gbm90IGhv
bm9yIHRoZSAiLyIgZm9yIG90aGVyIHRhZ3MuICBUaGlzIGJlaGF2aW9yCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gYWxzbyBkZXZpYXRlcyBmcm9tIFdpbklFLCBidXQgaW4gdGhpcyBj
YXNlIHdlJ2xsIGp1c3QgY29weSBNb3ogYW5kIE9wZXJhLgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChjdXJyVG9rZW4uaWQgPT0gSURfU0NSSVBUICYmIGN1cmNoYXIgPT0gJz4nICYm
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJOYW1lID09ICIvIikKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyclRva2VuLmZsYXQgPSB0cnVlOwogICAgICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgICAgICAgICBkZXN0ID0gYnVmZmVyOwpAQCAtMTE0MiwxMCArMTEyNiwxMiBAQCB2b2lk
IEhUTUxUb2tlbml6ZXI6OnBhcnNlVGFnKFRva2VuaXplclN0CiAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAvLyBVc2UgdG9sb3dlcigpIGluc3RlYWQgb2YgfCAweDIwIHRvIGxvd2Vy
Y2FzZSB0aGUgY2hhciBiZWNhdXNlIHRoZXJlIGlzIG5vIAotICAgICAgICAgICAgICAgIC8vIHBl
cmZvcm1hbmNlIGdhaW4gaW4gdXNpbmcgfCAweDIwIHNpbmNlIHRvbG93ZXIoKSBpcyBvcHRpbWl6
ZWQgYW5kIAotICAgICAgICAgICAgICAgIC8vIHwgMHgyMCB0dXJucyBjaGFyYWN0ZXJzIHN1Y2gg
YXMgJ18nIGludG8ganVuay4KLSAgICAgICAgICAgICAgICBjQnVmZmVyW2NCdWZmZXJQb3MrK10g
PSB0b2xvd2VyKGN1cmNoYXIpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8v
IHRvbG93ZXIoKSBzaG93cyB1cCBvbiBwcm9maWxlcy4gVGhpcyBpcyBmYXN0ZXIhCisgICAgICAg
ICAgICAgICAgaWYgKGN1cmNoYXIgPj0gJ0EnICYmIGN1cmNoYXIgPD0gJ1onKQorICAgICAgICAg
ICAgICAgICAgICBjQnVmZmVyW2NCdWZmZXJQb3MrK10gPSBjdXJjaGFyICsgKCdhJyAtICdBJyk7
CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBjQnVmZmVyW2NCdWZm
ZXJQb3MrK10gPSBjdXJjaGFyOwogICAgICAgICAgICAgICAgICsrc3JjOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgaWYgKCBjQnVmZmVyUG9zID09IENCVUZMRU4gKSB7CkBAIC0xMzI4LDE4
ICsxMzE0LDE1IEBAIHZvaWQgSFRNTFRva2VuaXplcjo6cGFyc2VUYWcoVG9rZW5pemVyU3QKICAg
ICAgICAgICAgIGlmICgqc3JjICE9ICc8JykKICAgICAgICAgICAgICAgICArK3NyYzsKIAotICAg
ICAgICAgICAgaWYgKCAhY3VyclRva2VuLmlkICkgLy9zdG9wIGlmIHRhZyBpcyB1bmtub3duCisg
ICAgICAgICAgICBpZiAoY3VyclRva2VuLnRhZ05hbWUgPT0gbnVsbEF0b20pIC8vc3RvcCBpZiB0
YWcgaXMgdW5rbm93bgogICAgICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICAgICAgdWlu
dCB0YWdJRCA9IGN1cnJUb2tlbi5pZDsKKyAgICAgICAgICAgIEF0b21pY1N0cmluZyB0YWdOYW1l
ID0gY3VyclRva2VuLnRhZ05hbWU7CiAjaWYgZGVmaW5lZChUT0tFTl9ERUJVRykgJiYgVE9LRU5f
REVCVUcgPiAwCiAgICAgICAgICAgICBrZERlYnVnKCA2MDM2ICkgPDwgImFwcGVuZGluZyBUYWc6
ICIgPDwgdGFnSUQgPDwgZW5kbDsKICNlbmRpZgotICAgICAgICAgICAgYm9vbCBiZWdpblRhZyA9
ICFjdXJyVG9rZW4uZmxhdCAmJiAodGFnSUQgPD0gSURfQ0xPU0VfVEFHKTsKLQotICAgICAgICAg
ICAgaWYgKHRhZ0lEID4gSURfQ0xPU0VfVEFHKQotICAgICAgICAgICAgICAgIHRhZ0lEIC09IElE
X0NMT1NFX1RBRzsKLSAgICAgICAgICAgIGVsc2UgaWYgKHRhZ0lEID09IElEX1NDUklQVCkgewor
ICAgICAgICAgICAgYm9vbCBiZWdpblRhZyA9ICFjdXJyVG9rZW4uZmxhdCAmJiBjdXJyVG9rZW4u
YmVnaW5UYWc7CisgICAgICAgICAgICBpZiAoYmVnaW5UYWcgJiYgY3VyclRva2VuLnRhZ05hbWUg
PT0gSFRNTE5hbWVzOjpzY3JpcHQoKSkgewogICAgICAgICAgICAgICAgIEF0dHJpYnV0ZUltcGwq
IGEgPSAwOwogICAgICAgICAgICAgICAgIGJvb2wgZm91bmRUeXBlQXR0cmlidXRlID0gZmFsc2U7
CiAgICAgICAgICAgICAgICAgc2NyaXB0U3JjID0gUVN0cmluZzo6bnVsbDsKQEAgLTE0MTQsNzEg
KzEzOTcsNDkgQEAgdm9pZCBIVE1MVG9rZW5pemVyOjpwYXJzZVRhZyhUb2tlbml6ZXJTdAogCiAg
ICAgICAgICAgICBwcm9jZXNzVG9rZW4oKTsKIAotICAgICAgICAgICAgLy8gd2UgaGF2ZSB0byB0
YWtlIGNhcmUgdG8gY2xvc2UgdGhlIHByZSBibG9jayBpbgotICAgICAgICAgICAgLy8gY2FzZSB3
ZSBlbmNvdW50ZXIgYW4gdW5hbGxvd2VkIGVsZW1lbnQuLi4uCi0gICAgICAgICAgICBpZihwcmUg
JiYgYmVnaW5UYWcgJiYgIURPTTo6Y2hlY2tDaGlsZChJRF9QUkUsIHRhZ0lELCAhcGFyc2VyLT5k
b2MoKS0+aW5Db21wYXRNb2RlKCkpKSB7Ci0gICAgICAgICAgICAgICAga2REZWJ1Zyg2MDM2KSA8
PCAiIG5vdCBhbGxvd2VkIGluIDxwcmU+ICIgPDwgKGludCl0YWdJRCA8PCBlbmRsOwotICAgICAg
ICAgICAgICAgIHByZSA9IGZhbHNlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBzd2l0
Y2goIHRhZ0lEICkgewotICAgICAgICAgICAgY2FzZSBJRF9QUkU6CisgICAgICAgICAgICBpZiAo
dGFnTmFtZSA9PSBIVE1MTmFtZXM6OnByZSgpKSB7CiAgICAgICAgICAgICAgICAgcHJlUG9zID0g
MDsKICAgICAgICAgICAgICAgICBwcmUgPSBiZWdpblRhZzsKICAgICAgICAgICAgICAgICBkaXNj
YXJkID0gTEZEaXNjYXJkOyAvLyBEaXNjYXJkIHRoZSBmaXJzdCBMRiBhZnRlciB3ZSBvcGVuIGEg
cHJlLgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBJRF9TQ1JJUFQ6
CisgICAgICAgICAgICB9IGVsc2UgaWYgKHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpzY3JpcHQoKSkg
ewogICAgICAgICAgICAgICAgIGlmIChiZWdpblRhZykgewogICAgICAgICAgICAgICAgICAgICBz
ZWFyY2hTdG9wcGVyID0gc2NyaXB0RW5kOwogICAgICAgICAgICAgICAgICAgICBzZWFyY2hTdG9w
cGVyTGVuID0gODsKICAgICAgICAgICAgICAgICAgICAgc2NyaXB0ID0gdHJ1ZTsKICAgICAgICAg
ICAgICAgICAgICAgcGFyc2VTcGVjaWFsKHNyYyk7CiAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKHRhZ0lEIDw9IElEX0NMT1NFX1RBRykgeyAvLyBIYW5kbGUgPHNj
cmlwdCBzcmM9ImZvbyIvPgotICAgICAgICAgICAgICAgICAgICBzY3JpcHQgPSB0cnVlOwotICAg
ICAgICAgICAgICAgICAgICBzY3JpcHRIYW5kbGVyKCk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBJRF9TVFlMRToKKyAgICAgICAg
ICAgIH0gZWxzZSBpZiAodGFnTmFtZSA9PSBIVE1MTmFtZXM6OnN0eWxlKCkpIHsKICAgICAgICAg
ICAgICAgICBpZiAoYmVnaW5UYWcpIHsKICAgICAgICAgICAgICAgICAgICAgc2VhcmNoU3RvcHBl
ciA9IHN0eWxlRW5kOwogICAgICAgICAgICAgICAgICAgICBzZWFyY2hTdG9wcGVyTGVuID0gNzsK
ICAgICAgICAgICAgICAgICAgICAgc3R5bGUgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBw
YXJzZVNwZWNpYWwoc3JjKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBjYXNlIElEX1RFWFRBUkVBOgorICAgICAgICAgICAgfSBlbHNlIGlm
ICh0YWdOYW1lID09IEhUTUxOYW1lczo6dGV4dGFyZWEoKSkgewogICAgICAgICAgICAgICAgIGlm
KGJlZ2luVGFnKSB7CiAgICAgICAgICAgICAgICAgICAgIHNlYXJjaFN0b3BwZXIgPSB0ZXh0YXJl
YUVuZDsKICAgICAgICAgICAgICAgICAgICAgc2VhcmNoU3RvcHBlckxlbiA9IDEwOwogICAgICAg
ICAgICAgICAgICAgICB0ZXh0YXJlYSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIHBhcnNl
U3BlY2lhbChzcmMpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIGNhc2UgSURfVElUTEU6Ci0gICAgICAgICAgICAgICAgaWYgKGJlZ2luVGFn
KSB7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHRhZ05hbWUgPT0gSFRNTE5hbWVzOjp0aXRsZSgp
KSB7CisgICAgICAgICAgICAgICAgIGlmIChiZWdpblRhZykgewogICAgICAgICAgICAgICAgICAg
ICBzZWFyY2hTdG9wcGVyID0gdGl0bGVFbmQ7CiAgICAgICAgICAgICAgICAgICAgIHNlYXJjaFN0
b3BwZXJMZW4gPSA3OwogICAgICAgICAgICAgICAgICAgICB0aXRsZSA9IHRydWU7CiAgICAgICAg
ICAgICAgICAgICAgIHBhcnNlU3BlY2lhbChzcmMpOwogICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgSURfWE1QOgorICAgICAgICAgICAg
fSBlbHNlIGlmICh0YWdOYW1lID09IEhUTUxOYW1lczo6eG1wKCkpIHsKICAgICAgICAgICAgICAg
ICBpZiAoYmVnaW5UYWcpIHsKICAgICAgICAgICAgICAgICAgICAgc2VhcmNoU3RvcHBlciA9IHht
cEVuZDsKICAgICAgICAgICAgICAgICAgICAgc2VhcmNoU3RvcHBlckxlbiA9IDU7CiAgICAgICAg
ICAgICAgICAgICAgIHhtcCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIHBhcnNlU3BlY2lh
bChzcmMpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIGNhc2UgSURfU0VMRUNUOgorICAgICAgICAgICAgfSBlbHNlIGlmICh0YWdOYW1lID09
IEhUTUxOYW1lczo6c2VsZWN0KCkpCiAgICAgICAgICAgICAgICAgc2VsZWN0ID0gYmVnaW5UYWc7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIElEX1BMQUlOVEVYVDoK
KyAgICAgICAgICAgIGVsc2UgaWYgKHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpwbGFpbnRleHQoKSkK
ICAgICAgICAgICAgICAgICBwbGFpbnRleHQgPSBiZWdpblRhZzsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIH0KLQogICAgICAgICAgICAgcmV0dXJuOyAvLyBGaW5pc2hlZCBw
YXJzaW5nIHRhZyEKICAgICAgICAgfQogICAgICAgICB9IC8vIGVuZCBzd2l0Y2gKQEAgLTE5ODks
MTAgKzE5NTAsMTAgQEAgdm9pZCBIVE1MVG9rZW5pemVyOjpwcm9jZXNzVG9rZW4oKQogI2VuZGlm
CiAgICAgICAgIGN1cnJUb2tlbi50ZXh0ID0gbmV3IERPTVN0cmluZ0ltcGwoIGJ1ZmZlciwgZGVz
dCAtIGJ1ZmZlciApOwogICAgICAgICBjdXJyVG9rZW4udGV4dC0+cmVmKCk7Ci0gICAgICAgIGlm
IChjdXJyVG9rZW4uaWQgIT0gSURfQ09NTUVOVCkKLSAgICAgICAgICAgIGN1cnJUb2tlbi5pZCA9
IElEX1RFWFQ7CisgICAgICAgIGlmIChjdXJyVG9rZW4udGFnTmFtZSAhPSBjb21tZW50QXRvbSkK
KyAgICAgICAgICAgIGN1cnJUb2tlbi50YWdOYW1lID0gdGV4dEF0b207CiAgICAgfQotICAgIGVs
c2UgaWYoIWN1cnJUb2tlbi5pZCkgeworICAgIGVsc2UgaWYgKGN1cnJUb2tlbi50YWdOYW1lID09
IG51bGxBdG9tKSB7CiAgICAgICAgIGN1cnJUb2tlbi5yZXNldCgpOwogICAgICAgICBpZiAoanNQ
cm94eSkKICAgICAgICAgICAgIGpzUHJveHktPnNldEV2ZW50SGFuZGxlckxpbmVubyhsaW5lbm8r
c3JjLmxpbmVDb3VudCgpKTsKSW5kZXg6IGtodG1sL2h0bWwvaHRtbHRva2VuaXplci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbHRva2VuaXpl
ci5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjM2CmRpZmYgLXUgLXAgLXIxLjM2IGtodG1sL2h0
bWwvaHRtbHRva2VuaXplci5oCi0tLSBraHRtbC9odG1sL2h0bWx0b2tlbml6ZXIuaAk1IEp1bCAy
MDA1IDIzOjIxOjEwIC0wMDAwCTEuMzYKKysrIGtodG1sL2h0bWwvaHRtbHRva2VuaXplci5oCTgg
SnVsIDIwMDUgMDU6NTc6MzAgLTAwMDAKQEAgLTM0LDggKzM0LDYgQEAKICNpbmNsdWRlIDxxcHRy
cXVldWUuaD4KIAogI2luY2x1ZGUgIm1pc2MvbG9hZGVyX2NsaWVudC5oIgotI2luY2x1ZGUgIm1p
c2MvaHRtbHRhZ3MuaCIKLSNpbmNsdWRlICJ4bWwvZG9tX3N0cmluZ2ltcGwuaCIKICNpbmNsdWRl
ICJ4bWwveG1sX3Rva2VuaXplci5oIgogI2luY2x1ZGUgImh0bWwvaHRtbF9lbGVtZW50aW1wbC5o
IgogI2luY2x1ZGUgInhtbC9kb21fZG9jaW1wbC5oIgpAQCAtNDcsNyArNDUsNyBAQAogI2VuZGlm
CiAKIGNsYXNzIEtDaGFyc2V0czsKLWNsYXNzIEtIVE1MUGFyc2VyOworY2xhc3MgSFRNTFBhcnNl
cjsKIGNsYXNzIEtIVE1MVmlldzsKIAogbmFtZXNwYWNlIERPTSB7CkBAIC03MCwyMiArNjgsMjQg
QEAgY2xhc3MgVG9rZW4KIHsKIHB1YmxpYzoKICAgICBUb2tlbigpIHsKLSAgICAgICAgaWQgPSAw
OwogICAgICAgICBhdHRycyA9IDA7CiAgICAgICAgIHRleHQgPSAwOworICAgICAgICBiZWdpblRh
ZyA9IHRydWU7CiAgICAgICAgIGZsYXQgPSBmYWxzZTsKICAgICAgICAgLy9xRGVidWcoIm5ldyB0
b2tlbiwgY3JlYXRpbmcgJTA4bHgiLCBhdHRycyk7CiAgICAgfQorCiAgICAgflRva2VuKCkgewot
ICAgICAgICBpZihhdHRycykgYXR0cnMtPmRlcmVmKCk7Ci0gICAgICAgIGlmKHRleHQpIHRleHQt
PmRlcmVmKCk7CisgICAgICAgIGlmIChhdHRycykgYXR0cnMtPmRlcmVmKCk7CisgICAgICAgIGlm
ICh0ZXh0KSB0ZXh0LT5kZXJlZigpOwogICAgIH0KKwogICAgIHZvaWQgYWRkQXR0cmlidXRlKERP
TTo6RG9jdW1lbnRJbXBsKiBkb2MsIFFDaGFyKiBidWZmZXIsIGNvbnN0IFFTdHJpbmcmIGF0dHJO
YW1lLCBjb25zdCBET006OkF0b21pY1N0cmluZyYgdikKICAgICB7CiAgICAgICAgIERPTTo6QXR0
cmlidXRlSW1wbCogYSA9IDA7Ci0gICAgICAgIGlmKGJ1ZmZlci0+dW5pY29kZSgpKQorICAgICAg
ICBpZiAoYnVmZmVyLT51bmljb2RlKCkpCiAgICAgICAgICAgICBhID0gbmV3IERPTTo6TWFwcGVk
QXR0cmlidXRlSW1wbChidWZmZXItPnVuaWNvZGUoKSwgdik7Ci0gICAgICAgIGVsc2UgaWYgKCAh
YXR0ck5hbWUuaXNFbXB0eSgpICYmIGF0dHJOYW1lICE9ICIvIiApCisgICAgICAgIGVsc2UgaWYg
KCFhdHRyTmFtZS5pc0VtcHR5KCkgJiYgYXR0ck5hbWUgIT0gIi8iKQogICAgICAgICAgICAgYSA9
IG5ldyBET006Ok1hcHBlZEF0dHJpYnV0ZUltcGwoZG9jLT5hdHRySWQoMCwgRE9NOjpET01TdHJp
bmcoYXR0ck5hbWUpLmltcGxlbWVudGF0aW9uKCksIGZhbHNlKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYpOwogCkBAIC05NywyMyArOTcsMzMgQEAgcHVi
bGljOgogICAgICAgICAgICAgYXR0cnMtPmluc2VydEF0dHJpYnV0ZShhKTsKICAgICAgICAgfQog
ICAgIH0KKworICAgIGJvb2wgaXNPcGVuVGFnKGNvbnN0IERPTTo6UXVhbGlmaWVkTmFtZSYgZnVs
bE5hbWUpIGNvbnN0IHsgcmV0dXJuIGJlZ2luVGFnICYmIGZ1bGxOYW1lLmxvY2FsTmFtZSgpID09
IHRhZ05hbWU7IH0KKyAgICBib29sIGlzQ2xvc2VUYWcoY29uc3QgRE9NOjpRdWFsaWZpZWROYW1l
JiBmdWxsTmFtZSkgY29uc3QgeyByZXR1cm4gIWJlZ2luVGFnICYmIGZ1bGxOYW1lLmxvY2FsTmFt
ZSgpID09IHRhZ05hbWU7IH0KKwogICAgIHZvaWQgcmVzZXQoKQogICAgIHsKLSAgICAgICAgaWYo
YXR0cnMpIHsKKyAgICAgICAgaWYgKGF0dHJzKSB7CiAgICAgICAgICAgICBhdHRycy0+ZGVyZWYo
KTsKICAgICAgICAgICAgIGF0dHJzID0gMDsKICAgICAgICAgfQotICAgICAgICBpZCA9IDA7Ci0g
ICAgICAgIGlmKHRleHQpIHsKKyAgICAgICAgCisgICAgICAgIHRhZ05hbWUgPSBET006Om51bGxB
dG9tOworICAgICAgICAKKyAgICAgICAgaWYgKHRleHQpIHsKICAgICAgICAgICAgIHRleHQtPmRl
cmVmKCk7CiAgICAgICAgICAgICB0ZXh0ID0gMDsKICAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgYmVnaW5UYWcgPSB0cnVlOwogICAgICAgICBmbGF0ID0gZmFsc2U7CiAgICAgfQorCiAgICAg
RE9NOjpOYW1lZE1hcHBlZEF0dHJNYXBJbXBsKiBhdHRyczsKICAgICBET006OkRPTVN0cmluZ0lt
cGwqIHRleHQ7Ci0gICAgdXNob3J0IGlkOwotICAgIGJvb2wgZmxhdDsKKyAgICBET006OkF0b21p
Y1N0cmluZyB0YWdOYW1lOworICAgIGJvb2wgYmVnaW5UYWcgOiAxOworICAgIGJvb2wgZmxhdCA6
IDE7CiB9OwogCiAvLyBUaGUgY291bnQgb2Ygc3BhY2VzIHVzZWQgZm9yIGVhY2ggdGFiLgpAQCAt
MzY4LDcgKzM3OCw3IEBAIHByb3RlY3RlZDoKICAgICBUb2tlbml6ZXJTdHJpbmcgc3JjOwogCiAg
ICAgS0NoYXJzZXRzICpjaGFyc2V0czsKLSAgICBLSFRNTFBhcnNlciAqcGFyc2VyOworICAgIEhU
TUxQYXJzZXIgKnBhcnNlcjsKIAogICAgIFFHdWFyZGVkUHRyPEtIVE1MVmlldz4gdmlldzsKICAg
ICAKSW5kZXg6IGtodG1sL21pc2MvZGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1dlYkNvcmUva2h0bWwvbWlzYy9kZWNvZGVyLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS4zNQpkaWZmIC11IC1wIC1yMS4zNSBraHRtbC9taXNjL2RlY29kZXIuY3BwCi0tLSBraHRt
bC9taXNjL2RlY29kZXIuY3BwCTI4IEp1biAyMDA1IDE4OjQ3OjEyIC0wMDAwCTEuMzUKKysrIGto
dG1sL21pc2MvZGVjb2Rlci5jcHAJOCBKdWwgMjAwNSAwNTo1NzozMCAtMDAwMApAQCAtNDEsNiAr
NDEsMTIgQEAgdXNpbmcgbmFtZXNwYWNlIGtodG1sOwogI2luY2x1ZGUgPGtkZWJ1Zy5oPgogI2lu
Y2x1ZGUgPGtsb2NhbGUuaD4KIAorI2luY2x1ZGUgImh0bWxuYW1lcy5oIgorCit1c2luZyBET006
OkF0b21pY1N0cmluZzsKK3VzaW5nIERPTTo6SFRNTE5hbWVzOwordXNpbmcgRE9NOjpudWxsQXRv
bTsKKwogY2xhc3MgS2FuamlDb2RlCiB7CiBwdWJsaWM6CkBAIC01MjYsMTIgKzUzMiw4IEBAIFFT
dHJpbmcgRGVjb2Rlcjo6ZGVjb2RlKGNvbnN0IGNoYXIgKmRhdGEKICAgICAgICAgICAgICAgICAg
ICAgICAgIGxlbisrOwogICAgICAgICAgICAgICAgICAgICB9CiAJCSAgICB0bXBbbGVuXSA9IDA7
Ci0gICAgICAgICAgICAgICAgICAgIGludCBpZCA9IGtodG1sOjpnZXRUYWdJRCh0bXAsIGxlbik7
Ci0gICAgICAgICAgICAgICAgICAgIGlmKGVuZCkgaWQgKz0gSURfQ0xPU0VfVEFHOwotCi0gICAg
ICAgICAgICAgICAgICAgIHN3aXRjaCggaWQgKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2Ug
SURfTUVUQToKLSAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBBdG9t
aWNTdHJpbmcgdGFnKHRtcCk7CisgICAgICAgICAgICAgICAgICAgIGlmICghZW5kICYmIHRhZyA9
PSBIVE1MTmFtZXM6Om1ldGEoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm91bmQg
YSBtZXRhIHRhZy4uLgogICAgICAgICAgICAgICAgICAgICAgICAgLy9wdHIgKz0gNTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiBlbmQgPSBwdHI7CkBAIC01NzAsMjggKzU3
MiwxMSBAQCBRU3RyaW5nIERlY29kZXI6OmRlY29kZShjb25zdCBjaGFyICpkYXRhCiAKIAkJCSAg
ICBwb3MgPSBlbmRwb3MgKyAxOwogCQkJfQotCQkgICAgfQotICAgICAgICAgICAgICAgICAgICBj
YXNlIChJRF9NRVRBK0lEX0NMT1NFX1RBRyk6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURf
U0NSSVBUOgotICAgICAgICAgICAgICAgICAgICBjYXNlIChJRF9TQ1JJUFQrSURfQ0xPU0VfVEFH
KToKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9OT1NDUklQVDoKLSAgICAgICAgICAgICAg
ICAgICAgY2FzZSAoSURfTk9TQ1JJUFQrSURfQ0xPU0VfVEFHKToKLSAgICAgICAgICAgICAgICAg
ICAgY2FzZSBJRF9TVFlMRToKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAoSURfU1RZTEUrSURf
Q0xPU0VfVEFHKToKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9MSU5LOgotICAgICAgICAg
ICAgICAgICAgICBjYXNlIChJRF9MSU5LK0lEX0NMT1NFX1RBRyk6Ci0gICAgICAgICAgICAgICAg
ICAgIGNhc2UgSURfT0JKRUNUOgotICAgICAgICAgICAgICAgICAgICBjYXNlIChJRF9PQkpFQ1Qr
SURfQ0xPU0VfVEFHKToKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9USVRMRToKLSAgICAg
ICAgICAgICAgICAgICAgY2FzZSAoSURfVElUTEUrSURfQ0xPU0VfVEFHKToKLSAgICAgICAgICAg
ICAgICAgICAgY2FzZSBJRF9CQVNFOgotICAgICAgICAgICAgICAgICAgICBjYXNlIChJRF9CQVNF
K0lEX0NMT1NFX1RBRyk6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfSFRNTDoKLSAgICAg
ICAgICAgICAgICAgICAgY2FzZSBJRF9IRUFEOgotICAgICAgICAgICAgICAgICAgICBjYXNlIDA6
Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgKDAgKyBJRF9DTE9TRV9UQUcgKToKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorCQkg
ICAgfSBlbHNlIGlmICh0YWcgIT0gSFRNTE5hbWVzOjpzY3JpcHQoKSAmJiB0YWcgIT0gSFRNTE5h
bWVzOjpub3NjcmlwdCgpICYmIHRhZyAhPSBIVE1MTmFtZXM6OnN0eWxlKCkgJiYKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0YWcgIT0gSFRNTE5hbWVzOjpsaW5rKCkgJiYgdGFnICE9
IEhUTUxOYW1lczo6bWV0YSgpICYmIHRhZyAhPSBIVE1MTmFtZXM6Om9iamVjdCgpICYmCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnICE9IEhUTUxOYW1lczo6dGl0bGUoKSAmJiB0
YWcgIT0gSFRNTE5hbWVzOjpiYXNlKCkgJiYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKGVuZCB8fCB0YWcgIT0gSFRNTE5hbWVzOjpodG1sKCkpICYmCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKGVuZCB8fCB0YWcgIT0gSFRNTE5hbWVzOjpoZWFkKCkpICYmIGlzYWxw
aGEodG1wWzBdKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgYm9keSA9IHRydWU7CiAjaWZk
ZWYgREVDT0RFX0RFQlVHCiAJCQlrZERlYnVnKCA2MDA1ICkgPDwgIkRlY29kZXI6IG5vIGNoYXJz
ZXQgZm91bmQuIElkPSIgPDwgaWQgPDwgZW5kbDsKSW5kZXg6IGtodG1sL21pc2MvaGFzaG1hcC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL21pc2MvaGFzaG1h
cC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtdSAtcCAtcjEuMSBraHRtbC9taXNj
L2hhc2htYXAuaAotLS0ga2h0bWwvbWlzYy9oYXNobWFwLmgJNiBKdWwgMjAwNSAwMToyODo0MiAt
MDAwMAkxLjEKKysrIGtodG1sL21pc2MvaGFzaG1hcC5oCTggSnVsIDIwMDUgMDU6NTc6MzAgLTAw
MDAKQEAgLTc3LDcgKzc3LDcgQEAgY2xhc3MgSGFzaE1hcCB7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBL
ZXksIHR5cGVuYW1lIE1hcHBlZCwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgS2V5
VHJhaXRzLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHM+CiBpbnQgSGFzaE1hcDxLZXksIE1hcHBlZCwg
SGFzaEZ1bmN0aW9ucywgS2V5VHJhaXRzLCBNYXBwZWRUcmFpdHM+OjpzaXplKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gbV9pbXBsLmNvdW50KCk7IAorICAgIHJldHVybiBtX2ltcGwuc2l6ZSgpOyAK
IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBNYXBwZWQsIHR5cGVuYW1lIEhh
c2hGdW5jdGlvbnMsIHR5cGVuYW1lIEtleVRyYWl0cywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzPgpJ
bmRleDoga2h0bWwvbWlzYy9odG1saGFzaGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvV2ViQ29yZS9raHRtbC9taXNjL2h0bWxoYXNoZXMuY3BwLHYKcmV0cmlldmluZyByZXZp
c2lvbiAxLjEwCmRpZmYgLXUgLXAgLXIxLjEwIGtodG1sL21pc2MvaHRtbGhhc2hlcy5jcHAKLS0t
IGtodG1sL21pc2MvaHRtbGhhc2hlcy5jcHAJNSBKYW4gMjAwNSAyMjo1Njo0NiAtMDAwMAkxLjEw
CisrKyBraHRtbC9taXNjL2h0bWxoYXNoZXMuY3BwCTggSnVsIDIwMDUgMDU6NTc6MzEgLTAwMDAK
QEAgLTI1LDIyICsyNSwxMyBAQAogLy8gdHVybiBvZmYgaW5saW5pbmcgdG8gdm9pZCB3YXJuaW5n
IHdpdGggbmV3ZXIgZ2NjCiAjdW5kZWYgX19pbmxpbmUKICNkZWZpbmUgX19pbmxpbmUKLSNpbmNs
dWRlICJodG1sdGFncy5jIgogI2luY2x1ZGUgImh0bWxhdHRycy5jIgogI3VuZGVmIF9faW5saW5l
CiAKLXVuc2lnbmVkIHNob3J0IGtodG1sOjpnZXRUYWdJRChjb25zdCBjaGFyICp0YWdTdHIsIGlu
dCBsZW4pCit1bnNpZ25lZCBzaG9ydCBraHRtbDo6Z2V0QXR0cklEKGNvbnN0IGNoYXIgKmF0dHJT
dHIsIGludCBsZW4pCiB7Ci0gICAgY29uc3Qgc3RydWN0IHRhZ3MgKnRhZ1B0ciA9IGZpbmRUYWco
dGFnU3RyLCBsZW4pOwotICAgIGlmICghdGFnUHRyKQorICAgIGNvbnN0IHN0cnVjdCBhdHRycyAq
YXR0clB0ciA9IGZpbmRBdHRyKGF0dHJTdHIsIGxlbik7CisgICAgaWYgKCFhdHRyUHRyKQogICAg
ICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gdGFnUHRyLT5pZDsKLX0KLQotdW5zaWduZWQgc2hv
cnQga2h0bWw6OmdldEF0dHJJRChjb25zdCBjaGFyICp0YWdTdHIsIGludCBsZW4pCi17Ci0gICAg
Y29uc3Qgc3RydWN0IGF0dHJzICp0YWdQdHIgPSBmaW5kQXR0cih0YWdTdHIsIGxlbik7Ci0gICAg
aWYgKCF0YWdQdHIpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiB0YWdQdHItPmlkOwor
ICAgIHJldHVybiBhdHRyUHRyLT5pZDsKIH0KSW5kZXg6IGtodG1sL21pc2MvaHRtbGhhc2hlcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL21pc2MvaHRtbGhh
c2hlcy5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjYKZGlmZiAtdSAtcCAtcjEuNiBraHRtbC9t
aXNjL2h0bWxoYXNoZXMuaAotLS0ga2h0bWwvbWlzYy9odG1saGFzaGVzLmgJNSBKYW4gMjAwNSAy
Mjo1Njo0NiAtMDAwMAkxLjYKKysrIGtodG1sL21pc2MvaHRtbGhhc2hlcy5oCTggSnVsIDIwMDUg
MDU6NTc6MzEgLTAwMDAKQEAgLTIzLDEyICsyMywxMCBAQAogI2lmbmRlZiBIVE1MSEFTSEVTX0gK
ICNkZWZpbmUgSFRNTEhBU0hFU19ICiAKLSNpbmNsdWRlICJodG1sdGFncy5oIgogI2luY2x1ZGUg
Imh0bWxhdHRycy5oIgogCiBuYW1lc3BhY2Uga2h0bWwKIHsKLSAgdW5zaWduZWQgc2hvcnQgZ2V0
VGFnSUQoY29uc3QgY2hhciAqdGFnU3RyLCBpbnQgbGVuKTsKICAgdW5zaWduZWQgc2hvcnQgZ2V0
QXR0cklEKGNvbnN0IGNoYXIgKnRhZ1N0ciwgaW50IGxlbik7CiB9CiAKSW5kZXg6IGtodG1sL3Jl
bmRlcmluZy9iaWRpLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9r
aHRtbC9yZW5kZXJpbmcvYmlkaS5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTMzCmRpZmYg
LXUgLXAgLXIxLjEzMyBraHRtbC9yZW5kZXJpbmcvYmlkaS5jcHAKLS0tIGtodG1sL3JlbmRlcmlu
Zy9iaWRpLmNwcAk2IEp1bCAyMDA1IDAwOjIxOjQ3IC0wMDAwCTEuMTMzCisrKyBraHRtbC9yZW5k
ZXJpbmcvYmlkaS5jcHAJOCBKdWwgMjAwNSAwNTo1NzozMyAtMDAwMApAQCAtMzYwLDEwICszNjAs
OSBAQCBpbmxpbmUgUUNoYXI6OkRpcmVjdGlvbiBCaWRpSXRlcmF0b3I6OmRpCiAgICAgaWYgKCFv
YmotPmlzVGV4dCgpKQogICAgICAgICByZXR1cm4gUUNoYXI6OkRpck9OOwogCi0gICAgUmVuZGVy
VGV4dCAqcmVuZGVyVHh0ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCAqPiggb2JqICk7Ci0gICAg
aWYgKCBwb3MgPj0gcmVuZGVyVHh0LT5zdHJpbmdMZW5ndGgoKSApCisgICAgUmVuZGVyVGV4dCAq
cmVuZGVyVHh0ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCAqPihvYmopOworICAgIGlmIChwb3Mg
Pj0gcmVuZGVyVHh0LT5zdHJpbmdMZW5ndGgoKSkKICAgICAgICAgcmV0dXJuIFFDaGFyOjpEaXJP
TjsKLSAgICAgICAgCiAgICAgcmV0dXJuIHJlbmRlclR4dC0+dGV4dCgpW3Bvc10uZGlyZWN0aW9u
KCk7CiB9CiAKSW5kZXg6IGtodG1sL3JlbmRlcmluZy9icmVha19saW5lcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvcmVuZGVyaW5nL2JyZWFrX2xpbmVz
LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xOQpkaWZmIC11IC1wIC1yMS4xOSBraHRtbC9y
ZW5kZXJpbmcvYnJlYWtfbGluZXMuY3BwCi0tLSBraHRtbC9yZW5kZXJpbmcvYnJlYWtfbGluZXMu
Y3BwCTUgSnVsIDIwMDUgMjM6MjE6MTEgLTAwMDAJMS4xOQorKysga2h0bWwvcmVuZGVyaW5nL2Jy
ZWFrX2xpbmVzLmNwcAk4IEp1bCAyMDA1IDA1OjU3OjMzIC0wMDAwCkBAIC0xMTIsNyArMTEyLDgg
QEAgYm9vbCBpc0JyZWFrYWJsZShjb25zdCBRQ2hhciAqcywgaW50IHBvcwogICAgIGlmIChsYXN0
Q2ggPT0gJy0nIHx8IGxhc3RDaCA9PSAnPycpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAg
cmV0dXJuIGMtPmRpcmVjdGlvbigpID09IFFDaGFyOjpEaXJXUzsKKyAgICAvLyBObyBvdGhlciBh
c2NpaSBjaGFycyBhcmUgYnJlYWthYmxlLgorICAgIHJldHVybiBmYWxzZTsKICNlbmRpZiAgICAK
IH0KIApJbmRleDoga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9hcHBsZXQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3JlbmRlcmluZy9yZW5kZXJfYXBwbGV0
LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zMApkaWZmIC11IC1wIC1yMS4zMCBraHRtbC9y
ZW5kZXJpbmcvcmVuZGVyX2FwcGxldC5jcHAKLS0tIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfYXBw
bGV0LmNwcAkxMCBNYXkgMjAwNSAxODo0MjowMyAtMDAwMAkxLjMwCisrKyBraHRtbC9yZW5kZXJp
bmcvcmVuZGVyX2FwcGxldC5jcHAJOCBKdWwgMjAwNSAwNTo1NzozMyAtMDAwMApAQCAtMzYsNyAr
MzYsNiBAQAogI2lmbmRlZiBRX1dTX1FXUyAvLyBXZSBkb24ndCBoYXZlIEphdmEgaW4gUXQgRW1i
ZWRkZWQKIAogI2luY2x1ZGUgImphdmEva2phdmFhcHBsZXR3aWRnZXQuaCIKLSNpbmNsdWRlICJt
aXNjL2h0bWx0YWdzLmgiCiAjaW5jbHVkZSAiaHRtbC9odG1sX29iamVjdGltcGwuaCIKIAogdXNp
bmcgbmFtZXNwYWNlIGtodG1sOwpAQCAtMTAzLDcgKzEwMiw3IEBAIHZvaWQgUmVuZGVyQXBwbGV0
OjpjcmVhdGVXaWRnZXRJZk5lY2Vzc2EKICAgICAgICAgICAgICAgICAgICAgICAgICBtX2hlaWdo
dCAtIGJvcmRlclRvcCgpIC0gYm9yZGVyQm90dG9tKCkgLSBwYWRkaW5nVG9wKCkgLSBwYWRkaW5n
Qm90dG9tKCk7CiAgICAgICAgICAgICBOb2RlSW1wbCAqY2hpbGQgPSBlbGVtZW50KCktPmZpcnN0
Q2hpbGQoKTsKICAgICAgICAgICAgIHdoaWxlIChjaGlsZCkgewotICAgICAgICAgICAgICAgIGlm
IChjaGlsZC0+aWQoKSA9PSBJRF9QQVJBTSkgeworICAgICAgICAgICAgICAgIGlmIChjaGlsZC0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OnBhcmFtKCkpKSB7CiAgICAgICAgICAgICAgICAgICAgIEhU
TUxQYXJhbUVsZW1lbnRJbXBsICpwID0gc3RhdGljX2Nhc3Q8SFRNTFBhcmFtRWxlbWVudEltcGwg
Kj4oY2hpbGQpOwogICAgICAgICAgICAgICAgICAgICBtX2FyZ3MuaW5zZXJ0KHAtPm5hbWUoKS5z
dHJpbmcoKSwgcC0+dmFsdWUoKS5zdHJpbmcoKSk7CiAgICAgICAgICAgICAgICAgfQpJbmRleDog
a2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9ibG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1dlYkNvcmUva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9ibG9jay5jcHAsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuMTg2CmRpZmYgLXUgLXAgLXIxLjE4NiBraHRtbC9yZW5kZXJpbmcvcmVu
ZGVyX2Jsb2NrLmNwcAotLS0ga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9ibG9jay5jcHAJNSBKdWwg
MjAwNSAyMzoyMToxMSAtMDAwMAkxLjE4NgorKysga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9ibG9j
ay5jcHAJOCBKdWwgMjAwNSAwNTo1NzozNiAtMDAwMApAQCAtNDAsNyArNDAsNiBAQAogCiAjaW5j
bHVkZSAia2h0bWx2aWV3LmgiCiAjaW5jbHVkZSAia2h0bWxfcGFydC5oIgotI2luY2x1ZGUgImh0
bWx0YWdzLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBET007CiAKQEAgLTQ3NSw3ICs0NzQsNyBAQCB2
b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9jayhib29sIHJlbGF5CiAgICAgICAgIG1fdG9wTWFy
Z2luUXVpcmsgPSBzdHlsZSgpLT5tYXJnaW5Ub3AoKS5xdWlyazsKICAgICAgICAgbV9ib3R0b21N
YXJnaW5RdWlyayA9IHN0eWxlKCktPm1hcmdpbkJvdHRvbSgpLnF1aXJrOwogCi0gICAgICAgIGlm
IChlbGVtZW50KCkgJiYgZWxlbWVudCgpLT5pZCgpID09IElEX0ZPUk0gJiYgZWxlbWVudCgpLT5p
c01hbGZvcm1lZCgpKQorICAgICAgICBpZiAoZWxlbWVudCgpICYmIGVsZW1lbnQoKS0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OmZvcm0oKSkgJiYgZWxlbWVudCgpLT5pc01hbGZvcm1lZCgpKQogICAg
ICAgICAgICAgLy8gU2VlIGlmIHRoaXMgZm9ybSBpcyBtYWxmb3JtZWQgKGkuZS4sIHVuY2xvc2Vk
KS4gSWYgc28sIGRvbid0IGdpdmUgdGhlIGZvcm0KICAgICAgICAgICAgIC8vIGEgYm90dG9tIG1h
cmdpbi4KICAgICAgICAgICAgIG1fbWF4Qm90dG9tUG9zTWFyZ2luID0gbV9tYXhCb3R0b21OZWdN
YXJnaW4gPSAwOwpJbmRleDoga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9ib3guY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3JlbmRlcmluZy9yZW5kZXJfYm94
LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNTQKZGlmZiAtdSAtcCAtcjEuMTU0IGtodG1s
L3JlbmRlcmluZy9yZW5kZXJfYm94LmNwcAotLS0ga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9ib3gu
Y3BwCTExIEp1biAyMDA1IDA1OjAxOjE3IC0wMDAwCTEuMTU0CisrKyBraHRtbC9yZW5kZXJpbmcv
cmVuZGVyX2JveC5jcHAJOCBKdWwgMjAwNSAwNTo1NzozOCAtMDAwMApAQCAtMjU2LDcgKzI1Niw3
IEBAIHZvaWQgUmVuZGVyQm94OjpwYWludFJvb3RCb3hEZWNvcmF0aW9ucygKICAgICAgICAgLy8g
YW5vbnltb3VzIGJsb2NrcyBjcmVhdGVkIGJ5IGlubGluZSA8Ym9keT4gdGFncyBldGMuICBXZSBj
YW4gbG9jYXRlIHRoZSA8Ym9keT4KICAgICAgICAgLy8gcmVuZGVyIG9iamVjdCB2ZXJ5IGVhc2ls
eSB2aWEgdGhlIERPTS4KICAgICAgICAgSFRNTEVsZW1lbnRJbXBsKiBib2R5ID0gZG9jdW1lbnQo
KS0+Ym9keSgpOwotICAgICAgICBSZW5kZXJPYmplY3QqIGJvZHlPYmplY3QgPSAoYm9keSAmJiBi
b2R5LT5pZCgpID09IElEX0JPRFkpID8gYm9keS0+cmVuZGVyZXIoKSA6IDA7CisgICAgICAgIFJl
bmRlck9iamVjdCogYm9keU9iamVjdCA9IChib2R5ICYmIGJvZHktPmhhc0xvY2FsTmFtZShIVE1M
TmFtZXM6OmJvZHkoKSkpID8gYm9keS0+cmVuZGVyZXIoKSA6IDA7CiAgICAgICAgIGlmIChib2R5
T2JqZWN0KSB7CiAgICAgICAgICAgICBiZ0xheWVyID0gYm9keU9iamVjdC0+c3R5bGUoKS0+YmFj
a2dyb3VuZExheWVycygpOwogICAgICAgICAgICAgYmdDb2xvciA9IGJvZHlPYmplY3QtPnN0eWxl
KCktPmJhY2tncm91bmRDb2xvcigpOwpAQCAtMzY5LDcgKzM2OSw3IEBAIHZvaWQgUmVuZGVyQm94
OjpwYWludEJhY2tncm91bmRFeHRlbmRlZCgKICAgICAgICAgYm9vbCBpc1RyYW5zcGFyZW50Owog
ICAgICAgICBET006Ok5vZGVJbXBsKiBlbHQgPSBkb2N1bWVudCgpLT5vd25lckVsZW1lbnQoKTsK
ICAgICAgICAgaWYgKGVsdCkgewotICAgICAgICAgICAgaWYgKGVsdC0+aWQoKSA9PSBJRF9GUkFN
RSkKKyAgICAgICAgICAgIGlmIChlbHQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpmcmFtZSgpKSkK
ICAgICAgICAgICAgICAgICBpc1RyYW5zcGFyZW50ID0gZmFsc2U7CiAgICAgICAgICAgICBlbHNl
IHsKICAgICAgICAgICAgICAgICAvLyBMb2NhdGUgdGhlIDxib2R5PiBlbGVtZW50IHVzaW5nIHRo
ZSBET00uICBUaGlzIGlzIGVhc2llciB0aGFuIHRyeWluZwpAQCAtMzc3LDcgKzM3Nyw3IEBAIHZv
aWQgUmVuZGVyQm94OjpwYWludEJhY2tncm91bmRFeHRlbmRlZCgKICAgICAgICAgICAgICAgICAv
LyBhbm9ueW1vdXMgYmxvY2tzIGNyZWF0ZWQgYnkgaW5saW5lIDxib2R5PiB0YWdzIGV0Yy4gIFdl
IGNhbiBsb2NhdGUgdGhlIDxib2R5PgogICAgICAgICAgICAgICAgIC8vIHJlbmRlciBvYmplY3Qg
dmVyeSBlYXNpbHkgdmlhIHRoZSBET00uCiAgICAgICAgICAgICAgICAgSFRNTEVsZW1lbnRJbXBs
KiBib2R5ID0gZG9jdW1lbnQoKS0+Ym9keSgpOwotICAgICAgICAgICAgICAgIGlzVHJhbnNwYXJl
bnQgPSAhYm9keSB8fCBib2R5LT5pZCgpICE9IElEX0ZSQU1FU0VUOyAvLyBDYW4ndCBzY3JvbGwg
YSBmcmFtZXNldCBkb2N1bWVudCBhbnl3YXkuCisgICAgICAgICAgICAgICAgaXNUcmFuc3BhcmVu
dCA9ICFib2R5IHx8ICFib2R5LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpmcmFtZXNldCgpKTsg
Ly8gQ2FuJ3Qgc2Nyb2xsIGEgZnJhbWVzZXQgZG9jdW1lbnQgYW55d2F5LgogICAgICAgICAgICAg
fQogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGlzVHJhbnNwYXJlbnQgPSBjYW52YXMoKS0+
dmlldygpLT5pc1RyYW5zcGFyZW50KCk7CkluZGV4OiBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2Nh
bnZhc2ltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRt
bC9yZW5kZXJpbmcvcmVuZGVyX2NhbnZhc2ltYWdlLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS4xMQpkaWZmIC11IC1wIC1yMS4xMSBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2NhbnZhc2ltYWdl
LmNwcAotLS0ga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9jYW52YXNpbWFnZS5jcHAJMjUgTWF5IDIw
MDUgMDE6MzM6MjIgLTAwMDAJMS4xMQorKysga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9jYW52YXNp
bWFnZS5jcHAJOCBKdWwgMjAwNSAwNTo1NzozOCAtMDAwMApAQCAtMzcsMTAgKzM3LDggQEAKICNp
bmNsdWRlICJjc3MvY3NzaGVscGVyLmgiCiAjaW5jbHVkZSAibWlzYy9oZWxwZXIuaCIKICNpbmNs
dWRlICJtaXNjL2h0bWxhdHRycy5oIgotI2luY2x1ZGUgIm1pc2MvaHRtbHRhZ3MuaCIKICNpbmNs
dWRlICJodG1sL2h0bWxfZm9ybWltcGwuaCIKICNpbmNsdWRlICJodG1sL2h0bWxfY2FudmFzaW1w
bC5oIgotI2luY2x1ZGUgImh0bWwvZHRkLmgiCiAjaW5jbHVkZSAieG1sL2RvbTJfZXZlbnRzaW1w
bC5oIgogI2luY2x1ZGUgImh0bWwvaHRtbF9kb2N1bWVudGltcGwuaCIKICNpbmNsdWRlIDxtYXRo
Lmg+CkBAIC0xODYsNyArMTg0LDcgQEAgdm9pZCBSZW5kZXJDYW52YXNJbWFnZTo6cGFpbnQoUGFp
bnRJbmZvJgogICAgIH0KICAgICAKICAgICBpZiAoZHJhd25JbWFnZSgpKSB7Ci0gICAgICAgIEhU
TUxDYW52YXNFbGVtZW50SW1wbCogaSA9IChlbGVtZW50KCkgJiYgZWxlbWVudCgpLT5pZCgpID09
IElEX0NBTlZBUykgPyBzdGF0aWNfY2FzdDxIVE1MQ2FudmFzRWxlbWVudEltcGwqPihlbGVtZW50
KCkpIDogMDsKKyAgICAgICAgSFRNTENhbnZhc0VsZW1lbnRJbXBsKiBpID0gKGVsZW1lbnQoKSAm
JiBlbGVtZW50KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpjYW52YXMoKSkpID8gc3RhdGljX2Nh
c3Q8SFRNTENhbnZhc0VsZW1lbnRJbXBsKj4oZWxlbWVudCgpKSA6IDA7CiAgICAgICAgIGludCBv
bGRPcGVyYXRpb24gPSAwOwogICAgICAgICBpZiAoaSAmJiAhaS0+Y29tcG9zaXRlT3BlcmF0b3Io
KS5pc051bGwoKSl7CiAgICAgICAgICAgICBvbGRPcGVyYXRpb24gPSBRUGFpbnRlcjo6Z2V0Q29t
cG9zaXRlT3BlcmF0aW9uKHAtPmN1cnJlbnRDb250ZXh0KCkpOwpJbmRleDoga2h0bWwvcmVuZGVy
aW5nL3JlbmRlcl9jYW52YXNpbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9X
ZWJDb3JlL2todG1sL3JlbmRlcmluZy9yZW5kZXJfY2FudmFzaW1hZ2UuaCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS4zCmRpZmYgLXUgLXAgLXIxLjMga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9jYW52
YXNpbWFnZS5oCi0tLSBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2NhbnZhc2ltYWdlLmgJNCBTZXAg
MjAwNCAxOTo1OTo1OCAtMDAwMAkxLjMKKysrIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfY2FudmFz
aW1hZ2UuaAk4IEp1bCAyMDA1IDA1OjU3OjM4IC0wMDAwCkBAIC0yNiw3ICsyNiw2IEBACiAjaWZu
ZGVmIFJFTkRFUl9DQU5WQVNJTUFHRV9ICiAjZGVmaW5lIFJFTkRFUl9DQU5WQVNJTUFHRV9ICiAK
LSNpbmNsdWRlICJodG1sL2R0ZC5oIgogI2luY2x1ZGUgImh0bWwvaHRtbF9lbGVtZW50aW1wbC5o
IgogI2luY2x1ZGUgInJlbmRlcmluZy9yZW5kZXJfaW1hZ2UuaCIKICNpbmNsdWRlICJkb20vZG9t
X3N0cmluZy5oIgpJbmRleDoga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9jb250YWluZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3JlbmRlcmluZy9yZW5k
ZXJfY29udGFpbmVyLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS42NgpkaWZmIC11IC1wIC1y
MS42NiBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2NvbnRhaW5lci5jcHAKLS0tIGtodG1sL3JlbmRl
cmluZy9yZW5kZXJfY29udGFpbmVyLmNwcAkxNCBGZWIgMjAwNSAxODoxOToxOCAtMDAwMAkxLjY2
CisrKyBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2NvbnRhaW5lci5jcHAJOCBKdWwgMjAwNSAwNTo1
NzozOCAtMDAwMApAQCAtMjI2LDEyICsyMjYsMTIgQEAgdm9pZCBSZW5kZXJDb250YWluZXI6OnVw
ZGF0ZVBzZXVkb0NoaWxkKAogCiAgICAgLy8gRm9yIDxxPjxwLz48L3E+LCBpZiB0aGlzIG9iamVj
dCBpcyB0aGUgaW5saW5lIGNvbnRpbnVhdGlvbiBvZiB0aGUgPHE+LCB3ZSBvbmx5IHdhbnQgdG8g
Z2VuZXJhdGUKICAgICAvLyA6YWZ0ZXIgY29udGVudCBhbmQgbm90IDpiZWZvcmUgY29udGVudC4K
LSAgICBpZiAodHlwZSA9PSBSZW5kZXJTdHlsZTo6QkVGT1JFICYmIGlzSW5saW5lQ29udGludWF0
aW9uKCkpCisgICAgaWYgKG5ld0NvbnRlbnRXYW50ZWQgJiYgdHlwZSA9PSBSZW5kZXJTdHlsZTo6
QkVGT1JFICYmIGlzSW5saW5lQ29udGludWF0aW9uKCkpCiAgICAgICAgIG5ld0NvbnRlbnRXYW50
ZWQgPSBmYWxzZTsKIAogICAgIC8vIFNpbWlsYXJseSwgaWYgd2UncmUgdGhlIGJlZ2lubmluZyBv
ZiBhIDxxPiwgYW5kIHRoZXJlJ3MgYW4gaW5saW5lIGNvbnRpbnVhdGlvbiBmb3Igb3VyIG9iamVj
dCwKICAgICAvLyB0aGVuIHdlIGRvbid0IGdlbmVyYXRlIHRoZSA6YWZ0ZXIgY29udGVudC4KLSAg
ICBpZiAodHlwZSA9PSBSZW5kZXJTdHlsZTo6QUZURVIgJiYgaXNSZW5kZXJJbmxpbmUoKSAmJiBj
b250aW51YXRpb24oKSkKKyAgICBpZiAobmV3Q29udGVudFdhbnRlZCAmJiB0eXBlID09IFJlbmRl
clN0eWxlOjpBRlRFUiAmJiBpc1JlbmRlcklubGluZSgpICYmIGNvbnRpbnVhdGlvbigpKQogICAg
ICAgICBuZXdDb250ZW50V2FudGVkID0gZmFsc2U7CiAgICAgCiAgICAgLy8gSWYgd2UgZG9uJ3Qg
d2FudCBnZW5lcmF0ZWQgY29udGVudCBhbnkgbG9uZ2VyLCBvciBpZiB3ZSBoYXZlIGdlbmVyYXRl
ZCBjb250ZW50LCBidXQgaXQncyBubyBsb25nZXIKSW5kZXg6IGtodG1sL3JlbmRlcmluZy9yZW5k
ZXJfZmxvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwv
cmVuZGVyaW5nL3JlbmRlcl9mbG93LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNjAKZGlm
ZiAtdSAtcCAtcjEuMTYwIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfZmxvdy5jcHAKLS0tIGtodG1s
L3JlbmRlcmluZy9yZW5kZXJfZmxvdy5jcHAJMTEgTWF5IDIwMDUgMDI6MTA6MTAgLTAwMDAJMS4x
NjAKKysrIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfZmxvdy5jcHAJOCBKdWwgMjAwNSAwNTo1Nzoz
OSAtMDAwMApAQCAtNDAsNyArNDAsNiBAQAogI2luY2x1ZGUgInJlbmRlcl9saW5lLmgiCiAKICNp
bmNsdWRlICJraHRtbHZpZXcuaCIKLSNpbmNsdWRlICJodG1sdGFncy5oIgogCiB1c2luZyBuYW1l
c3BhY2UgRE9NOwogdXNpbmcgbmFtZXNwYWNlIGtodG1sOwpAQCAtNjU0LDcgKzY1Myw3IEBAIHZv
aWQgUmVuZGVyRmxvdzo6YWRkRm9jdXNSaW5nUmVjdHMoUVBhaW4KICAgICAvLyBPbmx5IHBhaW50
IGZvY3VzIHJpbmcgYXJvdW5kIG91dGVybW9zdCBjb250ZW50ZWRpdGFibGUgZWxlbWVudC4KICAg
ICAvLyBCdXQgc2tpcCB0aGUgYm9keSBlbGVtZW50IGlmIGl0IGlzIG91dGVybW9zdC4KICAgICBp
ZiAoZWxlbWVudCgpICYmIGVsZW1lbnQoKS0+aXNDb250ZW50RWRpdGFibGUoKSkgewotICAgICAg
ICBpZiAoZWxlbWVudCgpLT5wYXJlbnROb2RlKCkgJiYgIWVsZW1lbnQoKS0+cGFyZW50Tm9kZSgp
LT5pc0NvbnRlbnRFZGl0YWJsZSgpICYmIGVsZW1lbnQoKS0+aWQoKSAhPSBJRF9CT0RZKQorICAg
ICAgICBpZiAoZWxlbWVudCgpLT5wYXJlbnROb2RlKCkgJiYgIWVsZW1lbnQoKS0+cGFyZW50Tm9k
ZSgpLT5pc0NvbnRlbnRFZGl0YWJsZSgpICYmICFlbGVtZW50KCktPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjpib2R5KCkpKQogICAgICAgICAgICAgcC0+YWRkRm9jdXNSaW5nUmVjdChfdHgsIF90eSwg
d2lkdGgoKSwgaGVpZ2h0KCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQpJbmRleDoga2h0bWwv
cmVuZGVyaW5nL3JlbmRlcl9mb3JtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3Qv
V2ViQ29yZS9raHRtbC9yZW5kZXJpbmcvcmVuZGVyX2Zvcm0uY3BwLHYKcmV0cmlldmluZyByZXZp
c2lvbiAxLjEwOApkaWZmIC11IC1wIC1yMS4xMDgga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9mb3Jt
LmNwcAotLS0ga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9mb3JtLmNwcAkyNCBKdW4gMjAwNSAwNTo1
MzoyOCAtMDAwMAkxLjEwOAorKysga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9mb3JtLmNwcAk4IEp1
bCAyMDA1IDA1OjU3OjQwIC0wMDAwCkBAIC03OTcsNyArNzk3LDcgQEAgUmVuZGVyT2JqZWN0KiBS
ZW5kZXJGaWVsZHNldDo6ZmluZExlZ2VuZAogewogICAgIGZvciAoUmVuZGVyT2JqZWN0KiBsZWdl
bmQgPSBmaXJzdENoaWxkKCk7IGxlZ2VuZDsgbGVnZW5kID0gbGVnZW5kLT5uZXh0U2libGluZygp
KSB7CiAgICAgICBpZiAoIWxlZ2VuZC0+aXNGbG9hdGluZ09yUG9zaXRpb25lZCgpICYmIGxlZ2Vu
ZC0+ZWxlbWVudCgpICYmCi0gICAgICAgICAgbGVnZW5kLT5lbGVtZW50KCktPmlkKCkgPT0gSURf
TEVHRU5EKQorICAgICAgICAgIGxlZ2VuZC0+ZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6bGVnZW5kKCkpKQogICAgICAgICByZXR1cm4gbGVnZW5kOwogICAgIH0KICAgICByZXR1cm4g
MDsKQEAgLTExOTEsNyArMTE5MSw3IEBAIHZvaWQgUmVuZGVyU2VsZWN0Ojp1cGRhdGVGcm9tRWxl
bWVudCgpCiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxLQ29tYm9Cb3gqPihtX3dpZGdldCktPmNs
ZWFyKCk7CiAKICAgICAgICAgZm9yIChsaXN0SW5kZXggPSAwOyBsaXN0SW5kZXggPCBpbnQobGlz
dEl0ZW1zLnNpemUoKSk7IGxpc3RJbmRleCsrKSB7Ci0gICAgICAgICAgICBpZiAobGlzdEl0ZW1z
W2xpc3RJbmRleF0tPmlkKCkgPT0gSURfT1BUR1JPVVApIHsKKyAgICAgICAgICAgIGlmIChsaXN0
SXRlbXNbbGlzdEluZGV4XS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9wdGdyb3VwKCkpKSB7CiAg
ICAgICAgICAgICAgICAgUVN0cmluZyBsYWJlbCA9IGxpc3RJdGVtc1tsaXN0SW5kZXhdLT5nZXRB
dHRyaWJ1dGUoQVRUUl9MQUJFTCkuc3RyaW5nKCk7CiAgICAgICAgICAgICAgICAgbGFiZWwucmVw
bGFjZShRQ2hhcignXFwnKSwgYmFja3NsYXNoQXNDdXJyZW5jeVN5bWJvbCgpKTsKIApAQCAtMTIx
NSwxNCArMTIxNSwxNCBAQCB2b2lkIFJlbmRlclNlbGVjdDo6dXBkYXRlRnJvbUVsZW1lbnQoKQog
ICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxLQ29tYm9Cb3gqPihtX3dpZGdldCktPmlu
c2VydEl0ZW0obGFiZWwsIGxpc3RJbmRleCk7CiAjZW5kaWYKICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGVsc2UgaWYgKGxpc3RJdGVtc1tsaXN0SW5kZXhdLT5pZCgpID09IElEX09QVElPTikg
eworICAgICAgICAgICAgZWxzZSBpZiAobGlzdEl0ZW1zW2xpc3RJbmRleF0tPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjpvcHRpb24oKSkpIHsKICAgICAgICAgICAgICAgICBRU3RyaW5nIGl0ZW1UZXh0
ID0gc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnRJbXBsKj4obGlzdEl0ZW1zW2xpc3RJbmRl
eF0pLT50ZXh0KCkuc3RyaW5nKCk7CiAgICAgICAgICAgICAgICAgaXRlbVRleHQucmVwbGFjZShR
Q2hhcignXFwnKSwgYmFja3NsYXNoQXNDdXJyZW5jeVN5bWJvbCgpKTsKIAogICAgICAgICAgICAg
ICAgIC8vIEluIFdpbklFLCBsZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlIGlzIGlnbm9y
ZWQgaW4gb3B0aW9ucy4gV2UgbWF0Y2ggdGhpcyBiZWhhdmlvci4KICAgICAgICAgICAgICAgICBp
dGVtVGV4dCA9IGl0ZW1UZXh0LnN0cmlwV2hpdGVTcGFjZSgpOwogICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIGlmIChsaXN0SXRlbXNbbGlzdEluZGV4XS0+cGFyZW50Tm9kZSgpLT5p
ZCgpID09IElEX09QVEdST1VQKQorICAgICAgICAgICAgICAgIGlmIChsaXN0SXRlbXNbbGlzdElu
ZGV4XS0+cGFyZW50Tm9kZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b3B0Z3JvdXAoKSkpCiAg
ICAgICAgICAgICAgICAgICAgIGl0ZW1UZXh0LnByZXBlbmQoIiAgICAiKTsKIAogI2lmIEFQUExF
X0NIQU5HRVMKQEAgLTEzNDgsNyArMTM0OCw3IEBAIHZvaWQgUmVuZGVyU2VsZWN0OjpsYXlvdXQo
ICkKIAogICAgIGJvb2wgZm91bmRPcHRpb24gPSBmYWxzZTsKICAgICBmb3IgKHVpbnQgaSA9IDA7
IGkgPCBsaXN0SXRlbXMuc2l6ZSgpICYmICFmb3VuZE9wdGlvbjsgaSsrKQotCWZvdW5kT3B0aW9u
ID0gKGxpc3RJdGVtc1tpXS0+aWQoKSA9PSBJRF9PUFRJT04pOworCWZvdW5kT3B0aW9uID0gKGxp
c3RJdGVtc1tpXS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9wdGlvbigpKSk7CiAKICAgICBtX3dp
ZGdldC0+c2V0RW5hYmxlZChmb3VuZE9wdGlvbiAmJiAhIGVsZW1lbnQoKS0+ZGlzYWJsZWQoKSk7
CiB9CkBAIC0xMzYyLDEyICsxMzYyLDEyIEBAIHZvaWQgUmVuZGVyU2VsZWN0OjpzbG90U2VsZWN0
ZWQoaW50IGluZGUKICAgICBRTWVtQXJyYXk8SFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwqPiBs
aXN0SXRlbXMgPSBlbGVtZW50KCktPmxpc3RJdGVtcygpOwogICAgIGlmKGluZGV4ID49IDAgJiYg
aW5kZXggPCBpbnQobGlzdEl0ZW1zLnNpemUoKSkpCiAgICAgewotICAgICAgICBib29sIGZvdW5k
ID0gKCBsaXN0SXRlbXNbaW5kZXhdLT5pZCgpID09IElEX09QVElPTiApOworICAgICAgICBib29s
IGZvdW5kID0gKGxpc3RJdGVtc1tpbmRleF0tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvcHRpb24o
KSkpOwogCiAgICAgICAgIGlmICggIWZvdW5kICkgewogICAgICAgICAgICAgLy8gdGhpcyBvbmUg
aXMgbm90IHNlbGVjdGFibGUsICB3ZSBuZWVkIHRvIGZpbmQgYW4gb3B0aW9uIGVsZW1lbnQKICAg
ICAgICAgICAgIHdoaWxlICggKCB1bnNpZ25lZCApIGluZGV4IDwgbGlzdEl0ZW1zLnNpemUoKSAp
IHsKLSAgICAgICAgICAgICAgICBpZiAoIGxpc3RJdGVtc1tpbmRleF0tPmlkKCkgPT0gSURfT1BU
SU9OICkgeworICAgICAgICAgICAgICAgIGlmIChsaXN0SXRlbXNbaW5kZXhdLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6b3B0aW9uKCkpKSB7CiAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1
ZTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQpAQCAtMTM3
Niw3ICsxMzc2LDcgQEAgdm9pZCBSZW5kZXJTZWxlY3Q6OnNsb3RTZWxlY3RlZChpbnQgaW5kZQog
CiAgICAgICAgICAgICBpZiAoICFmb3VuZCApIHsKICAgICAgICAgICAgICAgICB3aGlsZSAoIGlu
ZGV4ID49IDAgKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICggbGlzdEl0ZW1zW2luZGV4XS0+
aWQoKSA9PSBJRF9PUFRJT04gKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChsaXN0SXRlbXNb
aW5kZXhdLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMTM5MCw3ICsxMzkwLDcgQEAgdm9pZCBSZW5kZXJT
ZWxlY3Q6OnNsb3RTZWxlY3RlZChpbnQgaW5kZQogICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0
PENvbWJvQm94V2lkZ2V0Kj4oIG1fd2lkZ2V0ICktPnNldEN1cnJlbnRJdGVtKCBpbmRleCApOwog
CiAgICAgICAgICAgICBmb3IgKCB1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBsaXN0SXRlbXMuc2l6
ZSgpOyArK2kgKQotICAgICAgICAgICAgICAgIGlmICggbGlzdEl0ZW1zW2ldLT5pZCgpID09IElE
X09QVElPTiAmJiBpICE9ICh1bnNpZ25lZCBpbnQpIGluZGV4ICkKKyAgICAgICAgICAgICAgICBp
ZiAobGlzdEl0ZW1zW2ldLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpICYmIGkgIT0g
KHVuc2lnbmVkIGludCkgaW5kZXgpCiAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEhU
TUxPcHRpb25FbGVtZW50SW1wbCo+KCBsaXN0SXRlbXNbaV0gKS0+bV9zZWxlY3RlZCA9IGZhbHNl
OwogCiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudEltcGwqPihsaXN0
SXRlbXNbaW5kZXhdKS0+bV9zZWxlY3RlZCA9IHRydWU7CkBAIC0xNDExLDcgKzE0MTEsNyBAQCB2
b2lkIFJlbmRlclNlbGVjdDo6c2xvdFNlbGVjdGlvbkNoYW5nZWQoCiAgICAgZm9yICggdW5zaWdu
ZWQgaSA9IDA7IGkgPCBsaXN0SXRlbXMuY291bnQoKTsgaSsrICkKICAgICAgICAgLy8gZG9uJ3Qg
dXNlIHNldFNlbGVjdGVkKCkgaGVyZSBiZWNhdXNlIGl0IHdpbGwgY2F1c2UgdXMgdG8gYmUgY2Fs
bGVkCiAgICAgICAgIC8vIGFnYWluIHdpdGggdXBkYXRlU2VsZWN0aW9uLgotICAgICAgICBpZiAo
IGxpc3RJdGVtc1tpXS0+aWQoKSA9PSBJRF9PUFRJT04gKQorICAgICAgICBpZiAobGlzdEl0ZW1z
W2ldLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpKQogICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnRJbXBsKj4oIGxpc3RJdGVtc1tpXSApCiAgICAgICAgICAg
ICAgICAgLT5tX3NlbGVjdGVkID0gc3RhdGljX2Nhc3Q8S0xpc3RCb3gqPiggbV93aWRnZXQgKS0+
aXNTZWxlY3RlZCggaSApOwogCkBAIC0xNDUzLDcgKzE0NTMsNyBAQCB2b2lkIFJlbmRlclNlbGVj
dDo6dXBkYXRlU2VsZWN0aW9uKCkKICAgICAgICAgLy8gaWYgbXVsdGktc2VsZWN0LCB3ZSBzZWxl
Y3Qgb25seSB0aGUgbmV3IHNlbGVjdGVkIGluZGV4CiAgICAgICAgIEtMaXN0Qm94ICpsaXN0Qm94
ID0gc3RhdGljX2Nhc3Q8S0xpc3RCb3gqPihtX3dpZGdldCk7CiAgICAgICAgIGZvciAoaSA9IDA7
IGkgPCBpbnQobGlzdEl0ZW1zLnNpemUoKSk7IGkrKykKLSAgICAgICAgICAgIGxpc3RCb3gtPnNl
dFNlbGVjdGVkKGksbGlzdEl0ZW1zW2ldLT5pZCgpID09IElEX09QVElPTiAmJgorICAgICAgICAg
ICAgbGlzdEJveC0+c2V0U2VsZWN0ZWQoaSwgbGlzdEl0ZW1zW2ldLT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6b3B0aW9uKCkpICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRp
Y19jYXN0PEhUTUxPcHRpb25FbGVtZW50SW1wbCo+KGxpc3RJdGVtc1tpXSktPnNlbGVjdGVkKCkp
OwogICAgIH0KICAgICBlbHNlIHsKQEAgLTE0NjEsNyArMTQ2MSw3IEBAIHZvaWQgUmVuZGVyU2Vs
ZWN0Ojp1cGRhdGVTZWxlY3Rpb24oKQogICAgICAgICB1bnNpZ25lZCBmaXJzdE9wdGlvbiA9IGxp
c3RJdGVtcy5zaXplKCk7CiAgICAgICAgIGkgPSBsaXN0SXRlbXMuc2l6ZSgpOwogICAgICAgICB3
aGlsZSAoaS0tKQotICAgICAgICAgICAgaWYgKGxpc3RJdGVtc1tpXS0+aWQoKSA9PSBJRF9PUFRJ
T04pIHsKKyAgICAgICAgICAgIGlmIChsaXN0SXRlbXNbaV0tPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjpvcHRpb24oKSkpIHsKICAgICAgICAgICAgICAgICBpZiAoZm91bmQpCiAgICAgICAgICAgICAg
ICAgICAgIHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50SW1wbCo+KGxpc3RJdGVtc1tpXSkt
Pm1fc2VsZWN0ZWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBlbHNlIGlmIChzdGF0aWNfY2Fz
dDxIVE1MT3B0aW9uRWxlbWVudEltcGwqPihsaXN0SXRlbXNbaV0pLT5zZWxlY3RlZCgpKSB7Cklu
ZGV4OiBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2ZyYW1lcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9mcmFtZXMuY3BwLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjY5CmRpZmYgLXUgLXAgLXIxLjY5IGtodG1sL3JlbmRlcmlu
Zy9yZW5kZXJfZnJhbWVzLmNwcAotLS0ga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9mcmFtZXMuY3Bw
CTEwIE1heSAyMDA1IDE4OjQyOjA0IC0wMDAwCTEuNjkKKysrIGtodG1sL3JlbmRlcmluZy9yZW5k
ZXJfZnJhbWVzLmNwcAk4IEp1bCAyMDA1IDA1OjU3OjQxIC0wMDAwCkBAIC0zNCw3ICszNCw2IEBA
CiAjaW5jbHVkZSAibWlzYy9odG1sYXR0cnMuaCIKICNpbmNsdWRlICJ4bWwvZG9tMl9ldmVudHNp
bXBsLmgiCiAjaW5jbHVkZSAieG1sL2RvbV9kb2NpbXBsLmgiCi0jaW5jbHVkZSAibWlzYy9odG1s
dGFncy5oIgogI2luY2x1ZGUgImtodG1sdmlldy5oIgogI2luY2x1ZGUgImtodG1sX3BhcnQuaCIK
ICNpbmNsdWRlICJyZW5kZXJfYXJlbmEuaCIKQEAgLTY2OSwxNyArNjY4LDE3IEBAIHZvaWQgUmVu
ZGVyUGFydE9iamVjdDo6dXBkYXRlV2lkZ2V0KCkKIAogICBzZXROZWVkc0xheW91dEFuZE1pbk1h
eFJlY2FsYygpOwogCi0gIGlmIChlbGVtZW50KCktPmlkKCkgPT0gSURfT0JKRUNUKSB7CisgIGlm
IChlbGVtZW50KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvYmplY3QoKSkpIHsKIAogICAgICAg
SFRNTE9iamVjdEVsZW1lbnRJbXBsICpvID0gc3RhdGljX2Nhc3Q8SFRNTE9iamVjdEVsZW1lbnRJ
bXBsICo+KGVsZW1lbnQoKSk7CiAKICAgICAgIC8vIENoZWNrIGZvciBhIGNoaWxkIEVNQkVEIHRh
Zy4KICAgICAgIEhUTUxFbWJlZEVsZW1lbnRJbXBsICplbWJlZCA9IDA7CiAgICAgICBmb3IgKE5v
ZGVJbXBsICpjaGlsZCA9IG8tPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7ICkgewotICAgICAgICAgIGlm
IChjaGlsZC0+aWQoKSA9PSBJRF9FTUJFRCkgeworICAgICAgICAgIGlmIChjaGlsZC0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OmVtYmVkKCkpKSB7CiAgICAgICAgICAgICAgIGVtYmVkID0gc3RhdGlj
X2Nhc3Q8SFRNTEVtYmVkRWxlbWVudEltcGwgKj4oIGNoaWxkICk7CiAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgIH0gZWxzZSBpZiAoY2hpbGQtPmlkKCkgPT0gSURfT0JKRUNUKSB7Cisg
ICAgICAgICAgfSBlbHNlIGlmIChjaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9iamVjdCgp
KSkgewogICAgICAgICAgICAgICBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpOyAgICAgICAg
IC8vIERvbid0IGRlc2NlbmQgaW50byBuZXN0ZWQgT0JKRUNUIHRhZ3MKICAgICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgICBjaGlsZCA9IGNoaWxkLT50cmF2ZXJzZU5leHROb2RlKG8pOyAg
IC8vIE90aGVyd2lzZSBkZXNjZW5kIChFTUJFRHMgbWF5IGJlIGluc2lkZSBDT01NRU5UIHRhZ3Mp
CkBAIC03MTksNyArNzE4LDcgQEAgdm9pZCBSZW5kZXJQYXJ0T2JqZWN0Ojp1cGRhdGVXaWRnZXQo
KQogICAgICAgLy8gR2V0IHRoZSBhdHRyaWJ1dGVzIGZyb20gdGhlIHBhcmFtcyBpZiB0aGVyZSBp
cyBubyBFTUJFRCB0YWcuCiAgICAgICBOb2RlSW1wbCAqY2hpbGQgPSBvLT5maXJzdENoaWxkKCk7
CiAgICAgICB3aGlsZSAoY2hpbGQgJiYgKHVybC5pc0VtcHR5KCkgfHwgc2VydmljZVR5cGUuaXNF
bXB0eSgpIHx8ICFlbWJlZCkpIHsKLSAgICAgICAgICBpZiAoY2hpbGQtPmlkKCkgPT0gSURfUEFS
QU0pIHsKKyAgICAgICAgICBpZiAoY2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpwYXJhbSgp
KSkgewogICAgICAgICAgICAgICBIVE1MUGFyYW1FbGVtZW50SW1wbCAqcCA9IHN0YXRpY19jYXN0
PEhUTUxQYXJhbUVsZW1lbnRJbXBsICo+KCBjaGlsZCApOwogICAgICAgICAgICAgICBRU3RyaW5n
IG5hbWUgPSBwLT5uYW1lKCkuc3RyaW5nKCkubG93ZXIoKTsKICAgICAgICAgICAgICAgaWYgKHVy
bC5pc0VtcHR5KCkgJiYgKG5hbWUgPT0gInNyYyIgfHwgbmFtZSA9PSAibW92aWUiIHx8IG5hbWUg
PT0gImNvZGUiIHx8IG5hbWUgPT0gInVybCIpKSB7CkBAIC04MTAsMTQgKzgwOSwxNCBAQCB2b2lk
IFJlbmRlclBhcnRPYmplY3Q6OnVwZGF0ZVdpZGdldCgpCiAgICAgICAvLyBGaW5kIG91dCBpZiB3
ZSBzdXBwb3J0IGZhbGxiYWNrIGNvbnRlbnQuCiAgICAgICBtX2hhc0ZhbGxiYWNrQ29udGVudCA9
IGZhbHNlOwogICAgICAgZm9yIChOb2RlSW1wbCAqY2hpbGQgPSBvLT5maXJzdENoaWxkKCk7IGNo
aWxkICYmICFtX2hhc0ZhbGxiYWNrQ29udGVudDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmco
KSkgewotICAgICAgICAgIGlmICgoIWNoaWxkLT5pc1RleHROb2RlKCkgJiYgY2hpbGQtPmlkKCkg
IT0gSURfRU1CRUQgJiYgY2hpbGQtPmlkKCkgIT0gSURfUEFSQU0pIHx8IC8vIERpc2NvdW50IDxl
bWJlZD4gYW5kIDxwYXJhbT4KKyAgICAgICAgICBpZiAoKCFjaGlsZC0+aXNUZXh0Tm9kZSgpICYm
ICFjaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmVtYmVkKCkpICYmICFjaGlsZC0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OnBhcmFtKCkpKSB8fCAvLyBEaXNjb3VudCA8ZW1iZWQ+IGFuZCA8cGFy
YW0+CiAgICAgICAgICAgICAgIChjaGlsZC0+aXNUZXh0Tm9kZSgpICYmICFjaGlsZC0+Y29udGFp
bnNPbmx5V2hpdGVzcGFjZSgpKSkKICAgICAgICAgICAgICAgbV9oYXNGYWxsYmFja0NvbnRlbnQg
PSB0cnVlOwogICAgICAgfQogICAgICAgYm9vbCBzdWNjZXNzID0gcGFydC0+cmVxdWVzdE9iamVj
dCggdGhpcywgdXJsLCBzZXJ2aWNlVHlwZSwgcGFyYW1OYW1lcywgcGFyYW1WYWx1ZXMgKTsKICAg
ICAgIGlmICghc3VjY2VzcyAmJiBtX2hhc0ZhbGxiYWNrQ29udGVudCkKICAgICAgICAgICBvLT5y
ZW5kZXJGYWxsYmFja0NvbnRlbnQoKTsKLSAgfSBlbHNlIGlmICggZWxlbWVudCgpLT5pZCgpID09
IElEX0VNQkVEICkgeworICB9IGVsc2UgaWYgKGVsZW1lbnQoKS0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OmVtYmVkKCkpKSB7CiAKICAgICAgIEhUTUxFbWJlZEVsZW1lbnRJbXBsICpvID0gc3RhdGlj
X2Nhc3Q8SFRNTEVtYmVkRWxlbWVudEltcGwgKj4oZWxlbWVudCgpKTsKICAgICAgIHVybCA9IG8t
PnVybDsKQEAgLTg0NCw3ICs4NDMsNyBAQCB2b2lkIFJlbmRlclBhcnRPYmplY3Q6OnVwZGF0ZVdp
ZGdldCgpCiAgICAgICB9CiAgICAgICBwYXJ0LT5yZXF1ZXN0T2JqZWN0KCB0aGlzLCB1cmwsIHNl
cnZpY2VUeXBlLCBwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcyApOwogICB9IGVsc2UgewotICAgICAg
YXNzZXJ0KGVsZW1lbnQoKS0+aWQoKSA9PSBJRF9JRlJBTUUpOworICAgICAgYXNzZXJ0KGVsZW1l
bnQoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmlmcmFtZSgpKSk7CiAgICAgICBIVE1MSUZyYW1l
RWxlbWVudEltcGwgKm8gPSBzdGF0aWNfY2FzdDxIVE1MSUZyYW1lRWxlbWVudEltcGwgKj4oZWxl
bWVudCgpKTsKICAgICAgIHVybCA9IG8tPm1fVVJMLnN0cmluZygpOwogICAgICAgaWYgKHVybC5p
c0VtcHR5KCkpIHsKQEAgLTg5MCw3ICs4ODksNyBAQCB2b2lkIFJlbmRlclBhcnRPYmplY3Q6OnNs
b3RWaWV3Q2xlYXJlZCgpCiAgICAgICBRU2Nyb2xsVmlldzo6U2Nyb2xsQmFyTW9kZSBzY3JvbGwg
PSBRU2Nyb2xsVmlldzo6QXV0bzsKICAgICAgIGludCBtYXJnaW53ID0gLTE7CiAgICAgICBpbnQg
bWFyZ2luaCA9IC0xOwotICAgICAgaWYgKCBlbGVtZW50KCktPmlkKCkgPT0gSURfSUZSQU1FKSB7
CisgICAgICBpZiAoZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aWZyYW1lKCkpKSB7
CiAJICBIVE1MSUZyYW1lRWxlbWVudEltcGwgKmZyYW1lID0gc3RhdGljX2Nhc3Q8SFRNTElGcmFt
ZUVsZW1lbnRJbXBsICo+KGVsZW1lbnQoKSk7CiAJICBpZihmcmFtZS0+bV9mcmFtZUJvcmRlcikK
IAkgICAgICBmcmFtZVN0eWxlID0gUUZyYW1lOjpCb3g7CkBAIC05MTAsNyArOTA5LDcgQEAgdm9p
ZCBSZW5kZXJQYXJ0T2JqZWN0OjpzbG90Vmlld0NsZWFyZWQoKQogICAgICAgICAgIGtkRGVidWco
NjAzMSkgPDwgImZyYW1lIGlzIGEgS0hUTUx2aWV3ISIgPDwgZW5kbDsKICNlbmRpZgogICAgICAg
ICAgIEtIVE1MVmlldyAqaHRtbFZpZXcgPSBzdGF0aWNfY2FzdDxLSFRNTFZpZXcgKj4odmlldyk7
Ci0gICAgICAgICAgaHRtbFZpZXctPnNldElnbm9yZVdoZWVsRXZlbnRzKCBlbGVtZW50KCktPmlk
KCkgPT0gSURfSUZSQU1FICk7CisgICAgICAgICAgaHRtbFZpZXctPnNldElnbm9yZVdoZWVsRXZl
bnRzKGVsZW1lbnQoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmlmcmFtZSgpKSk7CiAgICAgICAg
ICAgaWYobWFyZ2ludyAhPSAtMSkgaHRtbFZpZXctPnNldE1hcmdpbldpZHRoKG1hcmdpbncpOwog
ICAgICAgICAgIGlmKG1hcmdpbmggIT0gLTEpIGh0bWxWaWV3LT5zZXRNYXJnaW5IZWlnaHQobWFy
Z2luaCk7CiAgICAgICAgIH0KSW5kZXg6IGtodG1sL3JlbmRlcmluZy9yZW5kZXJfaW1hZ2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3JlbmRlcmluZy9y
ZW5kZXJfaW1hZ2UuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjc3CmRpZmYgLXUgLXAgLXIx
Ljc3IGtodG1sL3JlbmRlcmluZy9yZW5kZXJfaW1hZ2UuY3BwCi0tLSBraHRtbC9yZW5kZXJpbmcv
cmVuZGVyX2ltYWdlLmNwcAk1IEp1bCAyMDA1IDIzOjIxOjExIC0wMDAwCTEuNzcKKysrIGtodG1s
L3JlbmRlcmluZy9yZW5kZXJfaW1hZ2UuY3BwCTggSnVsIDIwMDUgMDU6NTc6NDEgLTAwMDAKQEAg
LTM3LDEwICszNyw4IEBACiAjaW5jbHVkZSAiY3NzL2Nzc2hlbHBlci5oIgogI2luY2x1ZGUgIm1p
c2MvaGVscGVyLmgiCiAjaW5jbHVkZSAibWlzYy9odG1sYXR0cnMuaCIKLSNpbmNsdWRlICJtaXNj
L2h0bWx0YWdzLmgiCiAjaW5jbHVkZSAiaHRtbC9odG1sX2Zvcm1pbXBsLmgiCiAjaW5jbHVkZSAi
aHRtbC9odG1sX2ltYWdlaW1wbC5oIgotI2luY2x1ZGUgImh0bWwvZHRkLmgiCiAjaW5jbHVkZSAi
eG1sL2RvbTJfZXZlbnRzaW1wbC5oIgogI2luY2x1ZGUgImh0bWwvaHRtbF9kb2N1bWVudGltcGwu
aCIKICNpbmNsdWRlIDxtYXRoLmg+CkBAIC00MTksNyArNDE3LDcgQEAgdm9pZCBSZW5kZXJJbWFn
ZTo6cGFpbnQoUGFpbnRJbmZvJiBpLCBpbgogCiAKIC8vICAgICAgICAgICAgIHAtPmRyYXdQaXht
YXAoIG9mZnMueCgpLCB5LCBwaXgsIHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCBy
ZWN0LmhlaWdodCgpICk7Ci0gICAgICAgICAgICAgSFRNTEltYWdlRWxlbWVudEltcGwqIGkgPSAo
ZWxlbWVudCgpICYmIGVsZW1lbnQoKS0+aWQoKSA9PSBJRF9JTUcpID8gc3RhdGljX2Nhc3Q8SFRN
TEltYWdlRWxlbWVudEltcGwqPihlbGVtZW50KCkpIDogMDsKKyAgICAgICAgICAgICBIVE1MSW1h
Z2VFbGVtZW50SW1wbCogaSA9IChlbGVtZW50KCkgJiYgZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6aW1nKCkpKSA/IHN0YXRpY19jYXN0PEhUTUxJbWFnZUVsZW1lbnRJbXBsKj4oZWxl
bWVudCgpKSA6IDA7CiAgICAgICAgICAgICAgaWYgKGkgJiYgIWktPmNvbXBvc2l0ZU9wZXJhdG9y
KCkuaXNOdWxsKCkpewogICAgICAgICAgICAgICAgIHAtPmRyYXdQaXhtYXAgKG9mZnMsIHBpeCwg
cmVjdCwgaS0+Y29tcG9zaXRlT3BlcmF0b3IoKSk7CiAgICAgICAgICAgICAgfQpAQCAtNDg2LDcg
KzQ4NCw3IEBAIHZvaWQgUmVuZGVySW1hZ2U6OmxheW91dCgpCiAKIEhUTUxNYXBFbGVtZW50SW1w
bCogUmVuZGVySW1hZ2U6OmltYWdlTWFwKCkKIHsKLSAgICBIVE1MSW1hZ2VFbGVtZW50SW1wbCog
aSA9IGVsZW1lbnQoKS0+aWQoKSA9PSBJRF9JTUcgPyBzdGF0aWNfY2FzdDxIVE1MSW1hZ2VFbGVt
ZW50SW1wbCo+KGVsZW1lbnQoKSkgOiAwOworICAgIEhUTUxJbWFnZUVsZW1lbnRJbXBsKiBpID0g
ZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW1nKCkpID8gc3RhdGljX2Nhc3Q8SFRN
TEltYWdlRWxlbWVudEltcGwqPihlbGVtZW50KCkpIDogMDsKICAgICByZXR1cm4gaSA/IGktPmdl
dERvY3VtZW50KCktPmdldEltYWdlTWFwKGktPmltYWdlTWFwKCkpIDogMDsKIH0KIApAQCAtNTEy
LDkgKzUxMCw5IEBAIGJvb2wgUmVuZGVySW1hZ2U6Om5vZGVBdFBvaW50KE5vZGVJbmZvJiAKIAog
dm9pZCBSZW5kZXJJbWFnZTo6dXBkYXRlQWx0VGV4dCgpCiB7Ci0gICAgaWYgKGVsZW1lbnQoKS0+
aWQoKSA9PSBJRF9JTlBVVCkKKyAgICBpZiAoZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6aW5wdXQoKSkpCiAgICAgICAgIGFsdCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnRJ
bXBsKj4oZWxlbWVudCgpKS0+YWx0VGV4dCgpOwotICAgIGVsc2UgaWYgKGVsZW1lbnQoKS0+aWQo
KSA9PSBJRF9JTUcpCisgICAgZWxzZSBpZiAoZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6aW1nKCkpKQogICAgICAgICBhbHQgPSBzdGF0aWNfY2FzdDxIVE1MSW1hZ2VFbGVtZW50SW1w
bCo+KGVsZW1lbnQoKSktPmFsdFRleHQoKTsKIH0KIApJbmRleDoga2h0bWwvcmVuZGVyaW5nL3Jl
bmRlcl9pbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1s
L3JlbmRlcmluZy9yZW5kZXJfaW1hZ2UuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yNwpkaWZm
IC11IC1wIC1yMS4yNyBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2ltYWdlLmgKLS0tIGtodG1sL3Jl
bmRlcmluZy9yZW5kZXJfaW1hZ2UuaAkyNSBGZWIgMjAwNSAwMDoyNToxMiAtMDAwMAkxLjI3Cisr
KyBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2ltYWdlLmgJOCBKdWwgMjAwNSAwNTo1Nzo0MSAtMDAw
MApAQCAtMjMsNyArMjMsNiBAQAogI2lmbmRlZiBSRU5ERVJfSU1BR0VfSAogI2RlZmluZSBSRU5E
RVJfSU1BR0VfSAogCi0jaW5jbHVkZSAiaHRtbC9kdGQuaCIKICNpbmNsdWRlICJodG1sL2h0bWxf
ZWxlbWVudGltcGwuaCIKICNpbmNsdWRlICJyZW5kZXJpbmcvcmVuZGVyX3JlcGxhY2VkLmgiCiAj
aW5jbHVkZSAiZG9tL2RvbV9zdHJpbmcuaCIKSW5kZXg6IGtodG1sL3JlbmRlcmluZy9yZW5kZXJf
bGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3Jl
bmRlcmluZy9yZW5kZXJfbGF5ZXIuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjk2CmRpZmYg
LXUgLXAgLXIxLjk2IGtodG1sL3JlbmRlcmluZy9yZW5kZXJfbGF5ZXIuY3BwCi0tLSBraHRtbC9y
ZW5kZXJpbmcvcmVuZGVyX2xheWVyLmNwcAkxMCBNYXkgMjAwNSAyMjoyNTowNCAtMDAwMAkxLjk2
CisrKyBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2xheWVyLmNwcAk4IEp1bCAyMDA1IDA1OjU3OjQz
IC0wMDAwCkBAIC00OSw3ICs0OSw2IEBACiAjaW5jbHVkZSAicmVuZGVyX2FyZW5hLmgiCiAjaW5j
bHVkZSAieG1sL2RvbV9kb2NpbXBsLmgiCiAjaW5jbHVkZSAieG1sL2RvbTJfZXZlbnRzaW1wbC5o
IgotI2luY2x1ZGUgIm1pc2MvaHRtbHRhZ3MuaCIKICNpbmNsdWRlICJodG1sL2h0bWxfYmxvY2tp
bXBsLmgiCiAKICNpbmNsdWRlIDxxc2Nyb2xsYmFyLmg+CkBAIC0xNDY3LDcgKzE0NjYsNyBAQCBp
bnQgTWFycXVlZTo6bWFycXVlZVNwZWVkKCkgY29uc3QKIHsKICAgICBpbnQgcmVzdWx0ID0gbV9s
YXllci0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+bWFycXVlZVNwZWVkKCk7CiAgICAgRE9NOjpOb2Rl
SW1wbCogZWx0ID0gbV9sYXllci0+cmVuZGVyZXIoKS0+ZWxlbWVudCgpOwotICAgIGlmIChlbHQg
JiYgZWx0LT5pZCgpID09IElEX01BUlFVRUUpIHsKKyAgICBpZiAoZWx0ICYmIGVsdC0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6Om1hcnF1ZWUoKSkpIHsKICAgICAgICAgSFRNTE1hcnF1ZWVFbGVtZW50
SW1wbCogbWFycXVlZUVsdCA9IHN0YXRpY19jYXN0PEhUTUxNYXJxdWVlRWxlbWVudEltcGwqPihl
bHQpOwogICAgICAgICByZXN1bHQgPSBrTWF4KHJlc3VsdCwgbWFycXVlZUVsdC0+bWluaW11bURl
bGF5KCkpOwogICAgIH0KSW5kZXg6IGtodG1sL3JlbmRlcmluZy9yZW5kZXJfbGluZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvcmVuZGVyaW5nL3JlbmRl
cl9saW5lLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40MwpkaWZmIC11IC1wIC1yMS40MyBr
aHRtbC9yZW5kZXJpbmcvcmVuZGVyX2xpbmUuY3BwCi0tLSBraHRtbC9yZW5kZXJpbmcvcmVuZGVy
X2xpbmUuY3BwCTUgSnVsIDIwMDUgMjM6MjE6MTIgLTAwMDAJMS40MworKysga2h0bWwvcmVuZGVy
aW5nL3JlbmRlcl9saW5lLmNwcAk4IEp1bCAyMDA1IDA1OjU3OjQ0IC0wMDAwCkBAIC0zNyw3ICsz
Nyw2IEBACiAjaW5jbHVkZSAicmVuZGVyX2xpbmUuaCIKIAogI2luY2x1ZGUgImtodG1sdmlldy5o
IgotI2luY2x1ZGUgImh0bWx0YWdzLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBET007CiAKSW5kZXg6
IGtodG1sL3JlbmRlcmluZy9yZW5kZXJfbGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1dlYkNvcmUva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9saXN0LmNwcCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS42MgpkaWZmIC11IC1wIC1yMS42MiBraHRtbC9yZW5kZXJpbmcvcmVuZGVy
X2xpc3QuY3BwCi0tLSBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2xpc3QuY3BwCTUgSnVsIDIwMDUg
MjM6MjE6MTIgLTAwMDAJMS42MgorKysga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9saXN0LmNwcAk4
IEp1bCAyMDA1IDA1OjU3OjQ0IC0wMDAwCkBAIC0yNiw3ICsyNiw4IEBACiAjaW5jbHVkZSAicmVu
ZGVyaW5nL3JlbmRlcl9jYW52YXMuaCIKIAogI2luY2x1ZGUgInhtbC9kb21fZG9jaW1wbC5oIgot
I2luY2x1ZGUgIm1pc2MvaHRtbHRhZ3MuaCIKKworI2luY2x1ZGUgImh0bWxuYW1lcy5oIgogCiAj
aW5jbHVkZSA8cXBhaW50ZXIuaD4KIApAQCAtMzcsNiArMzgsNyBAQAogLy8jZGVmaW5lIEJPWF9E
RUJVRwogCiB1c2luZyBET006OkRvY3VtZW50SW1wbDsKK3VzaW5nIERPTTo6SFRNTE5hbWVzOwog
dXNpbmcgbmFtZXNwYWNlIGtodG1sOwogCiBjb25zdCBpbnQgY01hcmtlclBhZGRpbmcgPSA3OwpA
QCAtMjEzLDcgKzIxNSw3IEBAIHN0YXRpYyBSZW5kZXJPYmplY3QqIGdldFBhcmVudE9mRmlyc3RM
aW4KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICAgICAgaWYgKGN1cnJDaGlsZC0+
c3R5bGUoKS0+aHRtbEhhY2tzKCkgJiYgY3VyckNoaWxkLT5lbGVtZW50KCkgJiYKLSAgICAgICAg
ICAgIChjdXJyQ2hpbGQtPmVsZW1lbnQoKS0+aWQoKSA9PSBJRF9VTCB8fCBjdXJyQ2hpbGQtPmVs
ZW1lbnQoKS0+aWQoKSA9PSBJRF9PTCkpCisgICAgICAgICAgICAoY3VyckNoaWxkLT5lbGVtZW50
KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp1bCgpKXx8IGN1cnJDaGlsZC0+ZWxlbWVudCgpLT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6b2woKSkpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAKICAgICAgICAgUmVuZGVyT2JqZWN0KiBsaW5lQm94ID0gZ2V0UGFyZW50T2ZGaXJzdExp
bmVCb3goY3VyckNoaWxkLCBtYXJrZXIpOwpJbmRleDoga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9v
YmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3Jl
bmRlcmluZy9yZW5kZXJfb2JqZWN0LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xOTcKZGlm
ZiAtdSAtcCAtcjEuMTk3IGtodG1sL3JlbmRlcmluZy9yZW5kZXJfb2JqZWN0LmNwcAotLS0ga2h0
bWwvcmVuZGVyaW5nL3JlbmRlcl9vYmplY3QuY3BwCTUgSnVsIDIwMDUgMjM6MjE6MTIgLTAwMDAJ
MS4xOTcKKysrIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfb2JqZWN0LmNwcAk4IEp1bCAyMDA1IDA1
OjU3OjQ2IC0wMDAwCkBAIC00Myw2ICs0Myw3IEBACiAjaW5jbHVkZSAicmVuZGVyX2lubGluZS5o
IgogI2luY2x1ZGUgInJlbmRlcl9ibG9jay5oIgogI2luY2x1ZGUgInJlbmRlcl9mbGV4Ym94Lmgi
CisjaW5jbHVkZSAiaHRtbG5hbWVzLmgiCiAKICNpZiBBUFBMRV9DSEFOR0VTCiAvLyBGb3IgYWNj
ZXNzaWJpbGl0eQpAQCAtMTc1LDE3ICsxNzYsMTcgQEAgYm9vbCBSZW5kZXJPYmplY3Q6OmlzUm9v
dCgpIGNvbnN0CiAKIGJvb2wgUmVuZGVyT2JqZWN0Ojppc0JvZHkoKSBjb25zdAogewotICAgIHJl
dHVybiBlbGVtZW50KCkgJiYgZWxlbWVudCgpLT5yZW5kZXJlcigpID09IHRoaXMgJiYgZWxlbWVu
dCgpLT5pZCgpID09IElEX0JPRFk7CisgICAgcmV0dXJuIGVsZW1lbnQoKSAmJiBlbGVtZW50KCkt
PnJlbmRlcmVyKCkgPT0gdGhpcyAmJiBlbGVtZW50KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpi
b2R5KCkpOwogfQogCiBib29sIFJlbmRlck9iamVjdDo6aXNIUigpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIGVsZW1lbnQoKSAmJiBlbGVtZW50KCktPmlkKCkgPT0gSURfSFI7CisgICAgcmV0dXJuIGVs
ZW1lbnQoKSAmJiBlbGVtZW50KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpocigpKTsKIH0KIAog
Ym9vbCBSZW5kZXJPYmplY3Q6OmlzSFRNTE1hcnF1ZWUoKSBjb25zdAogewotICAgIHJldHVybiBl
bGVtZW50KCkgJiYgZWxlbWVudCgpLT5yZW5kZXJlcigpID09IHRoaXMgJiYgZWxlbWVudCgpLT5p
ZCgpID09IElEX01BUlFVRUU7CisgICAgcmV0dXJuIGVsZW1lbnQoKSAmJiBlbGVtZW50KCktPnJl
bmRlcmVyKCkgPT0gdGhpcyAmJiBlbGVtZW50KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjptYXJx
dWVlKCkpOwogfQogCiBib29sIFJlbmRlck9iamVjdDo6Y2FuSGF2ZUNoaWxkcmVuKCkgY29uc3QK
QEAgLTczNyw3ICs3MzgsNyBAQCBib29sIFJlbmRlck9iamVjdDo6c2l6ZXNUb01heFdpZHRoKCkg
Y29uCiAgICAgLy8gYnV0IHRoZXkgYWxsb3cgdGV4dCB0byBzaXQgb24gdGhlIHNhbWUgbGluZSBh
cyB0aGUgbWFycXVlZS4KICAgICBpZiAoaXNGbG9hdGluZygpIHx8IChpc0NvbXBhY3QoKSAmJiBp
c0lubGluZSgpKSB8fCAKICAgICAgICAgKGlzSW5saW5lQmxvY2tPcklubGluZVRhYmxlKCkgJiYg
IWlzSFRNTE1hcnF1ZWUoKSkgfHwKLSAgICAgICAgKGVsZW1lbnQoKSAmJiAoZWxlbWVudCgpLT5p
ZCgpID09IElEX0JVVFRPTiB8fCBlbGVtZW50KCktPmlkKCkgPT0gSURfTEVHRU5EKSkpCisgICAg
ICAgIChlbGVtZW50KCkgJiYgKGVsZW1lbnQoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJ1dHRv
bigpKSB8fCBlbGVtZW50KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpsZWdlbmQoKSkpKSkKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgCiAgICAgLy8gQ2hpbGRyZW4gb2YgYSBob3Jpem9udGFs
IG1hcnF1ZWUgZG8gbm90IGZpbGwgdGhlIGNvbnRhaW5lciBieSBkZWZhdWx0LgpAQCAtMTMyNiw3
ICsxMzI3LDcgQEAgUVN0cmluZyBSZW5kZXJPYmplY3Q6OmluZm9ybWF0aW9uKCkgY29ucwogICAg
IGlmIChlbGVtZW50KCkgJiYgZWxlbWVudCgpLT5hY3RpdmUoKSkgdHMgPDwgImFjdCAiOwogICAg
IGlmIChlbGVtZW50KCkgJiYgZWxlbWVudCgpLT5pc0xpbmsoKSkgdHMgPDwgImFuY2hvciAiOwog
ICAgIGlmIChlbGVtZW50KCkgJiYgZWxlbWVudCgpLT5mb2N1c2VkKCkpIHRzIDw8ICJmb2N1cyAi
OwotICAgIGlmIChlbGVtZW50KCkpIHRzIDw8ICIgPCIgPDwgIGdldFRhZ05hbWUoZWxlbWVudCgp
LT5pZCgpKS5zdHJpbmcoKSA8PCAiPiI7CisgICAgaWYgKGVsZW1lbnQoKSkgdHMgPDwgIiA8IiA8
PCAgZWxlbWVudCgpLT5sb2NhbE5hbWUoKS5zdHJpbmcoKSA8PCAiPiI7CiAgICAgdHMgPDwgIiAo
IiA8PCB4UG9zKCkgPDwgIiwiIDw8IHlQb3MoKSA8PCAiLCIgPDwgd2lkdGgoKSA8PCAiLCIgPDwg
aGVpZ2h0KCkgPDwgIikiCiAJPDwgKGlzVGFibGVDZWxsKCkgPwogCSAgICAoIFFTdHJpbmc6OmZy
b21MYXRpbjEoIiBbcj0iKSArCkBAIC0xNTU2LDcgKzE1NTcsNyBAQCB2b2lkIFJlbmRlck9iamVj
dDo6c2V0U3R5bGUoUmVuZGVyU3R5bGUgCiAgICAgICAgIC8vIFRoZSBiYWNrZ3JvdW5kIG9mIHRo
ZSByb290IGVsZW1lbnQgb3IgdGhlIGJvZHkgZWxlbWVudCBjb3VsZCBwcm9wYWdhdGUgdXAgdG8K
ICAgICAgICAgLy8gdGhlIGNhbnZhcy4gIEp1c3QgZGlydHkgdGhlIGVudGlyZSBjYW52YXMgd2hl
biBvdXIgc3R5bGUgY2hhbmdlcyBzdWJzdGFudGlhbGx5LgogICAgICAgICBpZiAoZCA+PSBSZW5k
ZXJTdHlsZTo6UmVwYWludCAmJiBlbGVtZW50KCkgJiYKLSAgICAgICAgICAgIChlbGVtZW50KCkt
PmlkKCkgPT0gSURfSFRNTCB8fCBlbGVtZW50KCktPmlkKCkgPT0gSURfQk9EWSkpCisgICAgICAg
ICAgICAoZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aHRtbCgpKSB8fCBlbGVtZW50
KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpib2R5KCkpKSkKICAgICAgICAgICAgIGNhbnZhcygp
LT5yZXBhaW50KCk7CiAgICAgICAgIGVsc2UgaWYgKG1fcGFyZW50ICYmICFpc1RleHQoKSkgewog
ICAgICAgICAgICAgLy8gRG8gYSByZXBhaW50IHdpdGggdGhlIG9sZCBzdHlsZSBmaXJzdCwgZS5n
LiwgZm9yIGV4YW1wbGUgaWYgd2UgZ28gZnJvbQpAQCAtMjE4OCw3ICsyMTg5LDcgQEAgdm9pZCBS
ZW5kZXJPYmplY3Q6OmdldFRleHREZWNvcmF0aW9uQ29sbwogICAgICAgICBpZiAoY3VyciAmJiBj
dXJyLT5pc1JlbmRlckJsb2NrKCkgJiYgY3Vyci0+Y29udGludWF0aW9uKCkpCiAgICAgICAgICAg
ICBjdXJyID0gY3Vyci0+Y29udGludWF0aW9uKCk7CiAgICAgfSB3aGlsZSAoY3VyciAmJiBkZWNv
cmF0aW9ucyAmJiAoIXF1aXJrc01vZGUgfHwgIWN1cnItPmVsZW1lbnQoKSB8fAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjdXJyLT5lbGVtZW50KCktPmlkKCkgIT0gSURf
QSAmJiBjdXJyLT5lbGVtZW50KCktPmlkKCkgIT0gSURfRk9OVCkpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoIWN1cnItPmVsZW1lbnQoKS0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OmEoKSkgJiYgIWN1cnItPmVsZW1lbnQoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZv
bnQoKSkpKSk7CiAKICAgICAvLyBJZiB3ZSBiYWlsZWQgb3V0LCB1c2UgdGhlIGVsZW1lbnQgd2Ug
YmFpbGVkIG91dCBhdCAodHlwaWNhbGx5IGEgPGZvbnQ+IG9yIDxhPiBlbGVtZW50KS4KICAgICBp
ZiAoZGVjb3JhdGlvbnMgJiYgY3VycikgewpAQCAtMjMyMiw3ICsyMzIzLDcgQEAgdm9pZCBSZW5k
ZXJPYmplY3Q6OnNldFBpeG1hcChjb25zdCBRUGl4bQogICAgIC8vIHdvdWxkIGF2b2lkIHB1dHRp
bmcgdGhpcyBmdW5jdGlvbiBhbmQgdGhlIENhY2hlZE9iamVjdENsaWVudCBiYXNlIGNsYXNzIGlu
dG8gUmVuZGVyT2JqZWN0LgogCiAgICAgaWYgKGltYWdlICYmIGltYWdlLT5waXhtYXBfc2l6ZSgp
ID09IGltYWdlLT52YWxpZF9yZWN0KCkuc2l6ZSgpICYmIHBhcmVudCgpKSB7Ci0gICAgICAgIGlm
IChjYW52YXMoKSAmJiBlbGVtZW50KCkgJiYgKGVsZW1lbnQoKS0+aWQoKSA9PSBJRF9IVE1MIHx8
IGVsZW1lbnQoKS0+aWQoKSA9PSBJRF9CT0RZKSkKKyAgICAgICAgaWYgKGNhbnZhcygpICYmIGVs
ZW1lbnQoKSAmJiAoZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aHRtbCgpKSB8fCBl
bGVtZW50KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpib2R5KCkpKSkKICAgICAgICAgICAgIGNh
bnZhcygpLT5yZXBhaW50KCk7ICAgIC8vIHJlcGFpbnQgdGhlIGVudGlyZSBjYW52YXMgc2luY2Ug
dGhlIGJhY2tncm91bmQgZ2V0cyBwcm9wYWdhdGVkIHVwCiAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgIHJlcGFpbnQoKTsgICAgICAgICAgICAgIC8vIHJlcGFpbnQgb2JqZWN0LCB3aGljaCBpcyBh
IGJveCBvciBhIGNvbnRhaW5lciB3aXRoIGJveGVzIGluc2lkZSBpdApJbmRleDoga2h0bWwvcmVu
ZGVyaW5nL3JlbmRlcl9zdHlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dl
YkNvcmUva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9zdHlsZS5jcHAsdgpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuNjYKZGlmZiAtdSAtcCAtcjEuNjYga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9zdHlsZS5j
cHAKLS0tIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfc3R5bGUuY3BwCTExIEp1biAyMDA1IDAxOjU4
OjAyIC0wMDAwCTEuNjYKKysrIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfc3R5bGUuY3BwCTggSnVs
IDIwMDUgMDU6NTc6NDcgLTAwMDAKQEAgLTYwNyw2ICs2MDcsOSBAQCB2b2lkIFJlbmRlclN0eWxl
OjpzZXRIYXNQc2V1ZG9TdHlsZShQc2V1CiAKIFJlbmRlclN0eWxlKiBSZW5kZXJTdHlsZTo6Z2V0
UHNldWRvU3R5bGUoUHNldWRvSWQgcGlkKQogeworICAgIGlmICghcHNldWRvU3R5bGUpCisgICAg
ICAgIHJldHVybiAwOworCiAgICAgUmVuZGVyU3R5bGUgKnBzID0gMDsKICAgICBpZiAobm9uaW5o
ZXJpdGVkX2ZsYWdzLl9zdHlsZVR5cGU9PU5PUFNFVURPKSB7CiAJcHMgPSBwc2V1ZG9TdHlsZTsK
SW5kZXg6IGtodG1sL3JlbmRlcmluZy9yZW5kZXJfc3R5bGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9yZW5kZXJpbmcvcmVuZGVyX3N0eWxlLmgsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuODIKZGlmZiAtdSAtcCAtcjEuODIga2h0bWwvcmVuZGVyaW5nL3Jl
bmRlcl9zdHlsZS5oCi0tLSBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX3N0eWxlLmgJMTIgTWF5IDIw
MDUgMTc6MTE6MjIgLTAwMDAJMS44MgorKysga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9zdHlsZS5o
CTggSnVsIDIwMDUgMDU6NTc6NDggLTAwMDAKQEAgLTI5OSw4ICsyOTksMTAgQEAgY2xhc3MgU3R5
bGVTdXJyb3VuZERhdGEgOiBwdWJsaWMgU2hhcmVkPAogewogcHVibGljOgogICAgIFN0eWxlU3Vy
cm91bmREYXRhKCk7CisgICAgU3R5bGVTdXJyb3VuZERhdGEoY29uc3QgU3R5bGVTdXJyb3VuZERh
dGEmIG8pOworICAgIAorICAgIE1BSU5fVEhSRUFEX0FMTE9DQVRFRDsKIAotICAgIFN0eWxlU3Vy
cm91bmREYXRhKGNvbnN0IFN0eWxlU3Vycm91bmREYXRhJiBvICk7CiAgICAgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IFN0eWxlU3Vycm91bmREYXRhJiBvKSBjb25zdDsKICAgICBib29sIG9wZXJhdG9y
IT0oY29uc3QgU3R5bGVTdXJyb3VuZERhdGEmIG8pIGNvbnN0IHsKICAgICAgICAgcmV0dXJuICEo
KnRoaXMgPT0gbyk7CkBAIC0zMjAsOSArMzIyLDkgQEAgY2xhc3MgU3R5bGVCb3hEYXRhIDogcHVi
bGljIFNoYXJlZDxTdHlsZQogewogcHVibGljOgogICAgIFN0eWxlQm94RGF0YSgpOworICAgIFN0
eWxlQm94RGF0YShjb25zdCBTdHlsZUJveERhdGEmIG8pOwogCi0gICAgU3R5bGVCb3hEYXRhKGNv
bnN0IFN0eWxlQm94RGF0YSYgbyApOwotCisgICAgTUFJTl9USFJFQURfQUxMT0NBVEVEOwogCiAg
ICAgLy8gY29weSBhbmQgYXNzaWdubWVudAogLy8gICAgU3R5bGVCb3hEYXRhKGNvbnN0IFN0eWxl
Qm94RGF0YSAmb3RoZXIpOwpAQCAtMzk5LDExICs0MDEsMTEgQEAgY2xhc3MgU3R5bGVWaXN1YWxE
YXRhIDogcHVibGljIFNoYXJlZDxTdAogewogcHVibGljOgogICAgIFN0eWxlVmlzdWFsRGF0YSgp
OwotCiAgICAgflN0eWxlVmlzdWFsRGF0YSgpOwotCiAgICAgU3R5bGVWaXN1YWxEYXRhKGNvbnN0
IFN0eWxlVmlzdWFsRGF0YSYgbyApOwogCisgICAgTUFJTl9USFJFQURfQUxMT0NBVEVEOworCiAg
ICAgYm9vbCBvcGVyYXRvcj09KCBjb25zdCBTdHlsZVZpc3VhbERhdGEgJm8gKSBjb25zdCB7CiAJ
cmV0dXJuICggY2xpcCA9PSBvLmNsaXAgJiYKICAgICAgICAgICAgICAgICAgaGFzQ2xpcCA9PSBv
Lmhhc0NsaXAgJiYKQEAgLTUyMSw2ICs1MjMsOCBAQCBwdWJsaWM6CiAgICAgflN0eWxlQmFja2dy
b3VuZERhdGEoKSB7fQogICAgIFN0eWxlQmFja2dyb3VuZERhdGEoY29uc3QgU3R5bGVCYWNrZ3Jv
dW5kRGF0YSYgbyApOwogCisgICAgTUFJTl9USFJFQURfQUxMT0NBVEVEOworCiAgICAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IFN0eWxlQmFja2dyb3VuZERhdGEmIG8pIGNvbnN0OwogICAgIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBTdHlsZUJhY2tncm91bmREYXRhICZvKSBjb25zdCB7CiAJcmV0dXJu
ICEoKnRoaXMgPT0gbyk7CkBAIC01NDMsNiArNTQ3LDggQEAgcHVibGljOgogICAgIFN0eWxlTWFy
cXVlZURhdGEoKTsKICAgICBTdHlsZU1hcnF1ZWVEYXRhKGNvbnN0IFN0eWxlTWFycXVlZURhdGEm
IG8pOwogICAgIAorICAgIE1BSU5fVEhSRUFEX0FMTE9DQVRFRDsKKwogICAgIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBTdHlsZU1hcnF1ZWVEYXRhJiBvKSBjb25zdDsKICAgICBib29sIG9wZXJhdG9y
IT0oY29uc3QgU3R5bGVNYXJxdWVlRGF0YSYgbykgY29uc3QgewogICAgICAgICByZXR1cm4gISgq
dGhpcyA9PSBvKTsKQEAgLTU3MSw2ICs1NzcsOCBAQCBwdWJsaWM6CiAgICAgU3R5bGVGbGV4aWJs
ZUJveERhdGEoKTsKICAgICBTdHlsZUZsZXhpYmxlQm94RGF0YShjb25zdCBTdHlsZUZsZXhpYmxl
Qm94RGF0YSYgbyk7CiAKKyAgICBNQUlOX1RIUkVBRF9BTExPQ0FURUQ7CisKICAgICBib29sIG9w
ZXJhdG9yPT0oY29uc3QgU3R5bGVGbGV4aWJsZUJveERhdGEmIG8pIGNvbnN0OwogICAgIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBTdHlsZUZsZXhpYmxlQm94RGF0YSAmbykgY29uc3QgewogICAgICAg
ICByZXR1cm4gISgqdGhpcyA9PSBvKTsKQEAgLTY3Nyw2ICs2ODUsOCBAQCBwdWJsaWM6CiAgICAg
flN0eWxlQ1NTM05vbkluaGVyaXRlZERhdGEoKTsKICAgICBTdHlsZUNTUzNOb25Jbmhlcml0ZWRE
YXRhKGNvbnN0IFN0eWxlQ1NTM05vbkluaGVyaXRlZERhdGEmIG8pOwogCisgICAgTUFJTl9USFJF
QURfQUxMT0NBVEVEOworCiAjaWZuZGVmIEtIVE1MX05PX1hCTAogICAgIGJvb2wgYmluZGluZ3NF
cXVpdmFsZW50KGNvbnN0IFN0eWxlQ1NTM05vbkluaGVyaXRlZERhdGEmIG8pIGNvbnN0OwogI2Vu
ZGlmCkBAIC03MTUsNiArNzI1LDggQEAgcHVibGljOgogICAgIH5TdHlsZUNTUzNJbmhlcml0ZWRE
YXRhKCk7CiAgICAgU3R5bGVDU1MzSW5oZXJpdGVkRGF0YShjb25zdCBTdHlsZUNTUzNJbmhlcml0
ZWREYXRhJiBvKTsKIAorICAgIE1BSU5fVEhSRUFEX0FMTE9DQVRFRDsKKwogICAgIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBTdHlsZUNTUzNJbmhlcml0ZWREYXRhJiBvKSBjb25zdDsKICAgICBib29s
IG9wZXJhdG9yIT0oY29uc3QgU3R5bGVDU1MzSW5oZXJpdGVkRGF0YSAmbykgY29uc3QgewogICAg
ICAgICByZXR1cm4gISgqdGhpcyA9PSBvKTsKQEAgLTc2OSw2ICs3ODEsOCBAQCBwdWJsaWM6CiAg
ICAgflN0eWxlSW5oZXJpdGVkRGF0YSgpOwogICAgIFN0eWxlSW5oZXJpdGVkRGF0YShjb25zdCBT
dHlsZUluaGVyaXRlZERhdGEmIG8gKTsKIAorICAgIE1BSU5fVEhSRUFEX0FMTE9DQVRFRDsKKyAg
ICAKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgU3R5bGVJbmhlcml0ZWREYXRhJiBvKSBjb25z
dDsKICAgICBib29sIG9wZXJhdG9yICE9ICggY29uc3QgU3R5bGVJbmhlcml0ZWREYXRhICZvICkg
Y29uc3QgewogCXJldHVybiAhKCp0aGlzID09IG8pOwpJbmRleDoga2h0bWwvcmVuZGVyaW5nL3Jl
bmRlcl90YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0
bWwvcmVuZGVyaW5nL3JlbmRlcl90YWJsZS5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTI2
CmRpZmYgLXUgLXAgLXIxLjEyNiBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX3RhYmxlLmNwcAotLS0g
a2h0bWwvcmVuZGVyaW5nL3JlbmRlcl90YWJsZS5jcHAJMTEgTWF5IDIwMDUgMDI6MTA6MTAgLTAw
MDAJMS4xMjYKKysrIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfdGFibGUuY3BwCTggSnVsIDIwMDUg
MDU6NTc6NTAgLTAwMDAKQEAgLTMxLDggKzMxLDggQEAKICNpbmNsdWRlICJyZW5kZXJpbmcvcmVu
ZGVyX3RhYmxlLmgiCiAjaW5jbHVkZSAicmVuZGVyaW5nL3RhYmxlX2xheW91dC5oIgogI2luY2x1
ZGUgImh0bWwvaHRtbF90YWJsZWltcGwuaCIKLSNpbmNsdWRlICJtaXNjL2h0bWx0YWdzLmgiCiAj
aW5jbHVkZSAibWlzYy9odG1sYXR0cnMuaCIKKyNpbmNsdWRlICJodG1sbmFtZXMuaCIKICNpbmNs
dWRlICJ4bWwvZG9tX2RvY2ltcGwuaCIKIAogI2luY2x1ZGUgPGtnbG9iYWwuaD4KQEAgLTExMiw3
ICsxMTIsNyBAQCB2b2lkIFJlbmRlclRhYmxlOjphZGRDaGlsZChSZW5kZXJPYmplY3QgCiAjZW5k
aWYKICAgICBSZW5kZXJPYmplY3QgKm8gPSBjaGlsZDsKIAotICAgIGlmIChjaGlsZC0+ZWxlbWVu
dCgpICYmIGNoaWxkLT5lbGVtZW50KCktPmlkKCkgPT0gSURfRk9STSkgeworICAgIGlmIChjaGls
ZC0+ZWxlbWVudCgpICYmIGNoaWxkLT5lbGVtZW50KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpm
b3JtKCkpKSB7CiAgICAgICAgIFJlbmRlckNvbnRhaW5lcjo6YWRkQ2hpbGQoY2hpbGQsYmVmb3Jl
Q2hpbGQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMjYyLDcgKzI2Miw3IEBAIHZvaWQg
UmVuZGVyVGFibGU6OmxheW91dCgpCiAKICAgICBSZW5kZXJPYmplY3QgKmNoaWxkID0gZmlyc3RD
aGlsZCgpOwogICAgIHdoaWxlKCBjaGlsZCApIHsKLQlpZiAoIGNoaWxkLT5uZWVkc0xheW91dCgp
ICYmICEoY2hpbGQtPmVsZW1lbnQoKSAmJiBjaGlsZC0+ZWxlbWVudCgpLT5pZCgpID09IElEX0ZP
Uk0pKQorCWlmICggY2hpbGQtPm5lZWRzTGF5b3V0KCkgJiYgIShjaGlsZC0+ZWxlbWVudCgpICYm
IGNoaWxkLT5lbGVtZW50KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpmb3JtKCkpKSkKIAkgICAg
Y2hpbGQtPmxheW91dCgpOwogCWlmICggY2hpbGQtPmlzVGFibGVTZWN0aW9uKCkgKSB7CiAJICAg
IHN0YXRpY19jYXN0PFJlbmRlclRhYmxlU2VjdGlvbiAqPihjaGlsZCktPmNhbGNSb3dIZWlnaHQo
KTsKQEAgLTg0OSw3ICs4NDksNyBAQCB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6YWRkQ2hpbGQo
UmVuZGVyCiAjZW5kaWYKICAgICBSZW5kZXJPYmplY3QgKnJvdyA9IGNoaWxkOwogCi0gICAgaWYg
KGNoaWxkLT5lbGVtZW50KCkgJiYgY2hpbGQtPmVsZW1lbnQoKS0+aWQoKSA9PSBJRF9GT1JNKSB7
CisgICAgaWYgKGNoaWxkLT5lbGVtZW50KCkgJiYgY2hpbGQtPmVsZW1lbnQoKS0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OmZvcm0oKSkpIHsKICAgICAgICAgUmVuZGVyQ29udGFpbmVyOjphZGRDaGls
ZChjaGlsZCxiZWZvcmVDaGlsZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xNDk1LDcg
KzE0OTUsNyBAQCB2b2lkIFJlbmRlclRhYmxlUm93OjphZGRDaGlsZChSZW5kZXJPYmplCiAgICAg
a2REZWJ1ZyggNjA0MCApIDw8IHJlbmRlck5hbWUoKSA8PCAiKFRhYmxlUm93KTo6YWRkQ2hpbGQo
ICIgPDwgY2hpbGQtPnJlbmRlck5hbWUoKSA8PCAiICkiICA8PCAiLCAiIDw8CiAgICAgICAgICAg
ICAgICAgICAgICAgIChiZWZvcmVDaGlsZCA/IGJlZm9yZUNoaWxkLT5yZW5kZXJOYW1lKCkgOiAi
MCIpIDw8ICIgKSIgPDwgZW5kbDsKICNlbmRpZgotICAgIGlmIChjaGlsZC0+ZWxlbWVudCgpICYm
IGNoaWxkLT5lbGVtZW50KCktPmlkKCkgPT0gSURfRk9STSkgeworICAgIGlmIChjaGlsZC0+ZWxl
bWVudCgpICYmIGNoaWxkLT5lbGVtZW50KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpmb3JtKCkp
KSB7CiAgICAgICAgIFJlbmRlckNvbnRhaW5lcjo6YWRkQ2hpbGQoY2hpbGQsYmVmb3JlQ2hpbGQp
OwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTYwNiw3ICsxNjA2LDcgQEAgdm9pZCBSZW5k
ZXJUYWJsZUNlbGw6OnVwZGF0ZUZyb21FbGVtZW50KAogICAgIGludCBvbGRSU3BhbiA9IHJTcGFu
OwogICAgIGludCBvbGRDU3BhbiA9IGNTcGFuOwogICAgIERPTTo6Tm9kZUltcGwqIG5vZGUgPSBl
bGVtZW50KCk7Ci0gICAgaWYgKG5vZGUgJiYgKG5vZGUtPmlkKCkgPT0gSURfVEQgfHwgbm9kZS0+
aWQoKSA9PSBJRF9USCkpIHsKKyAgICBpZiAobm9kZSAmJiAobm9kZS0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OnRkKCkpIHx8IG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0aCgpKSkpIHsKICAg
ICAgICAgRE9NOjpIVE1MVGFibGVDZWxsRWxlbWVudEltcGwgKnRjID0gc3RhdGljX2Nhc3Q8RE9N
OjpIVE1MVGFibGVDZWxsRWxlbWVudEltcGwgKj4obm9kZSk7CiAgICAgICAgIGNTcGFuID0gdGMt
PmNvbFNwYW4oKTsKICAgICAgICAgclNwYW4gPSB0Yy0+cm93U3BhbigpOwpAQCAtMjI5MCw3ICsy
MjkwLDcgQEAgdm9pZCBSZW5kZXJUYWJsZUNvbDo6dXBkYXRlRnJvbUVsZW1lbnQoKQogewogICAg
IGludCBvbGRTcGFuID0gX3NwYW47CiAgICAgRE9NOjpOb2RlSW1wbCAqbm9kZSA9IGVsZW1lbnQo
KTsKLSAgICBpZiAobm9kZSAmJiAobm9kZS0+aWQoKSA9PSBJRF9DT0wgfHwgbm9kZS0+aWQoKSA9
PSBJRF9DT0xHUk9VUCkpIHsKKyAgICBpZiAobm9kZSAmJiAobm9kZS0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OmNvbCgpKSB8fCBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Y29sZ3JvdXAoKSkp
KSB7CiAgICAgICAgIERPTTo6SFRNTFRhYmxlQ29sRWxlbWVudEltcGwgKnRjID0gc3RhdGljX2Nh
c3Q8RE9NOjpIVE1MVGFibGVDb2xFbGVtZW50SW1wbCAqPihub2RlKTsKICAgICAgICAgX3NwYW4g
PSB0Yy0+c3BhbigpOwogICAgIH0gCkluZGV4OiBraHRtbC94bWwvZG9tMl9yYW5nZWltcGwuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3htbC9kb20yX3Jh
bmdlaW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNDAKZGlmZiAtdSAtcCAtcjEuNDAg
a2h0bWwveG1sL2RvbTJfcmFuZ2VpbXBsLmNwcAotLS0ga2h0bWwveG1sL2RvbTJfcmFuZ2VpbXBs
LmNwcAkxMyBNYXkgMjAwNSAxNjo0ODo1MSAtMDAwMAkxLjQwCisrKyBraHRtbC94bWwvZG9tMl9y
YW5nZWltcGwuY3BwCTggSnVsIDIwMDUgMDU6NTc6NTEgLTAwMDAKQEAgLTI5LDcgKzI5LDYgQEAK
ICNpbmNsdWRlICJkb21fdGV4dGltcGwuaCIKICNpbmNsdWRlICJkb21feG1saW1wbC5oIgogI2lu
Y2x1ZGUgImh0bWwvaHRtbF9lbGVtZW50aW1wbC5oIgotI2luY2x1ZGUgIm1pc2MvaHRtbHRhZ3Mu
aCIKICNpbmNsdWRlICJlZGl0aW5nL21hcmt1cC5oIgogI2luY2x1ZGUgImVkaXRpbmcvdmlzaWJs
ZV9wb3NpdGlvbi5oIgogI2luY2x1ZGUgImVkaXRpbmcvdmlzaWJsZV91bml0cy5oIgpJbmRleDog
a2h0bWwveG1sL2RvbTJfdHJhdmVyc2FsaW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1dlYkNvcmUva2h0bWwveG1sL2RvbTJfdHJhdmVyc2FsaW1wbC5jcHAsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuMTAKZGlmZiAtdSAtcCAtcjEuMTAga2h0bWwveG1sL2RvbTJfdHJhdmVy
c2FsaW1wbC5jcHAKLS0tIGtodG1sL3htbC9kb20yX3RyYXZlcnNhbGltcGwuY3BwCTEwIE1heSAy
MDA1IDIxOjU5OjE0IC0wMDAwCTEuMTAKKysrIGtodG1sL3htbC9kb20yX3RyYXZlcnNhbGltcGwu
Y3BwCTggSnVsIDIwMDUgMDU6NTc6NTEgLTAwMDAKQEAgLTI2LDggKzI2LDYgQEAKICNpbmNsdWRl
ICJkb20vZG9tX2V4Y2VwdGlvbi5oIgogI2luY2x1ZGUgInhtbC9kb21fZG9jaW1wbC5oIgogCi0j
aW5jbHVkZSAiaHRtbHRhZ3MuaCIKLQogbmFtZXNwYWNlIERPTSB7CiAKIE5vZGVGaWx0ZXJJbXBs
OjpOb2RlRmlsdGVySW1wbChOb2RlRmlsdGVyQ29uZGl0aW9uICpjb25kaXRpb24pCkluZGV4OiBr
aHRtbC94bWwvZG9tX2F0b21pY3N0cmluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L1dlYkNvcmUva2h0bWwveG1sL2RvbV9hdG9taWNzdHJpbmcuY3BwLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjkKZGlmZiAtdSAtcCAtcjEuOSBraHRtbC94bWwvZG9tX2F0b21pY3N0cmluZy5j
cHAKLS0tIGtodG1sL3htbC9kb21fYXRvbWljc3RyaW5nLmNwcAk4IEp1bCAyMDA1IDA1OjE5OjIx
IC0wMDAwCTEuOQorKysga2h0bWwveG1sL2RvbV9hdG9taWNzdHJpbmcuY3BwCTggSnVsIDIwMDUg
MDU6NTc6NTEgLTAwMDAKQEAgLTI2LDEzICsyNiw3IEBACiAvLyBwb3J0YWJsZSwgYW5kIGl0IHdv
dWxkIGJlIGdvb2QgdG8gZmlndXJlIG91dCBhIDEwMCUgY2xlYW4gd2F5IHRoYXQgc3RpbGwgYXZv
aWRzIGNvZGUgdGhhdAogLy8gcnVucyBhdCBpbml0IHRpbWUuCiAKLSNpZiBBUFBMRV9DSEFOR0VT
Ci0jZGVmaW5lIEFWT0lEX1NUQVRJQ19DT05TVFJVQ1RPUlMgMQotI2VuZGlmCi0KLSNpZiBBVk9J
RF9TVEFUSUNfQ09OU1RSVUNUT1JTCiAjZGVmaW5lIEtIVE1MX0FUT01JQ1NUUklOR19ISURFX0dM
T0JBTFMgMQotI2VuZGlmCiAKICNpbmNsdWRlICJkb21fYXRvbWljc3RyaW5nLmgiCiAjaW5jbHVk
ZSAieG1sL2RvbV9zdHJpbmdpbXBsLmgiCkBAIC0xNjUsNDIgKzE1OSwzMCBAQCB2b2lkIEF0b21p
Y1N0cmluZzo6cmVtb3ZlKERPTVN0cmluZ0ltcGwgCiAgICAgc3RyaW5nVGFibGUucmVtb3ZlKHIp
OwogfQogCi0vLyBHbG9iYWwgY29uc3RhbnRzIGZvciBwcm9wZXJ0eSBuYW1lIHN0cmluZ3MuCi0K
LSNpZiAhQVZPSURfU1RBVElDX0NPTlNUUlVDVE9SUwotICAgIC8vIERlZmluZSBhbiBBdG9taWNT
dHJpbmcgaW4gdGhlIG5vcm1hbCB3YXkuCi0gICAgI2RlZmluZSBERUZJTkVfR0xPQkFMKG5hbWUs
IHN0cmluZykgZXh0ZXJuIGNvbnN0IEF0b21pY1N0cmluZyBuYW1lICMjIEF0b20oc3RyaW5nKTsK
LQotICAgIGV4dGVybiBjb25zdCBBdG9taWNTdHJpbmcgbnVsbEF0b207Ci0gICAgZXh0ZXJuIGNv
bnN0IEF0b21pY1N0cmluZyBlbXB0eUF0b207Ci0jZWxzZQotICAgIC8vIERlZmluZSBhbiBBdG9t
aWNTdHJpbmctc2l6ZWQgYXJyYXkgb2YgcG9pbnRlcnMgdG8gYXZvaWQgc3RhdGljIGluaXRpYWxp
emF0aW9uLgotICAgIC8vIFVzZSBhbiBhcnJheSBvZiBwb2ludGVycyBpbnN0ZWFkIG9mIGFuIGFy
cmF5IG9mIGNoYXIgaW4gY2FzZSB0aGVyZSBpcyBzb21lIGFsaWdubWVudCBpc3N1ZS4KLSAgICAj
ZGVmaW5lIERFRklORV9HTE9CQUwobmFtZSwgc3RyaW5nKSBcCi0gICAgICAgIHZvaWQgKiBuYW1l
ICMjIEF0b21bKHNpemVvZihBdG9taWNTdHJpbmcpICsgc2l6ZW9mKHZvaWQgKikgLSAxKSAvIHNp
emVvZih2b2lkICopXTsKLQotICAgIERFRklORV9HTE9CQUwobnVsbCwgaWdub3JlZCkKLSAgICBE
RUZJTkVfR0xPQkFMKGVtcHR5LCBpZ25vcmVkKQotI2VuZGlmCi0KLSNkZWZpbmUgQ0FMTF9ERUZJ
TkVfR0xPQkFMKG5hbWUpIERFRklORV9HTE9CQUwobmFtZSwgI25hbWUpCi1LSFRNTF9BVE9NSUNT
VFJJTkdfRUFDSF9HTE9CQUwoQ0FMTF9ERUZJTkVfR0xPQkFMKQorLy8gRGVmaW5lIGFuIEF0b21p
Y1N0cmluZy1zaXplZCBhcnJheSBvZiBwb2ludGVycyB0byBhdm9pZCBzdGF0aWMgaW5pdGlhbGl6
YXRpb24uCisvLyBVc2UgYW4gYXJyYXkgb2YgcG9pbnRlcnMgaW5zdGVhZCBvZiBhbiBhcnJheSBv
ZiBjaGFyIGluIGNhc2UgdGhlcmUgaXMgc29tZSBhbGlnbm1lbnQgaXNzdWUuCisjZGVmaW5lIERF
RklORV9HTE9CQUwobmFtZSkgXAorICAgIHZvaWQqIG5hbWUgIyMgQXRvbVsoc2l6ZW9mKEF0b21p
Y1N0cmluZykgKyBzaXplb2Yodm9pZCopIC0gMSkgLyBzaXplb2Yodm9pZCopXTsKKworREVGSU5F
X0dMT0JBTChudWxsKQorREVGSU5FX0dMT0JBTChlbXB0eSkKK0RFRklORV9HTE9CQUwodGV4dCkK
K0RFRklORV9HTE9CQUwoY29tbWVudCkKK0RFRklORV9HTE9CQUwoc3RhcikKIAogdm9pZCBBdG9t
aWNTdHJpbmc6OmluaXQoKQogewotI2lmIEFWT0lEX1NUQVRJQ19DT05TVFJVQ1RPUlMKICAgICBz
dGF0aWMgYm9vbCBpbml0aWFsaXplZDsKICAgICBpZiAoIWluaXRpYWxpemVkKSB7CiAgICAgICAg
IC8vIFVzZSBwbGFjZW1lbnQgbmV3IHRvIGluaXRpYWxpemUgdGhlIGdsb2JhbHMuCiAgICAgICAg
IG5ldyAoJm51bGxBdG9tKSBBdG9taWNTdHJpbmc7CiAgICAgICAgIG5ldyAoJmVtcHR5QXRvbSkg
QXRvbWljU3RyaW5nKCIiKTsKLSAgICAgICAgCi0gICAgICAgICNkZWZpbmUgUExBQ0VNRU5UX05F
V19HTE9CQUwobmFtZSwgc3RyaW5nKSBuZXcgKCZuYW1lICMjIFByb3BlcnR5TmFtZSkgQXRvbWlj
U3RyaW5nKHN0cmluZyk7Ci0gICAgICAgICNkZWZpbmUgQ0FMTF9QTEFDRU1FTlRfTkVXX0dMT0JB
TChuYW1lKSBQTEFDRU1FTlRfTkVXX0dMT0JBTChuYW1lLCAjbmFtZSkKLSAgICAgICAgS0hUTUxf
QVRPTUlDU1RSSU5HX0VBQ0hfR0xPQkFMKENBTExfUExBQ0VNRU5UX05FV19HTE9CQUwpCisgICAg
ICAgIG5ldyAoJnRleHRBdG9tKSBBdG9taWNTdHJpbmcoIiN0ZXh0Iik7CisgICAgICAgIG5ldyAo
JmNvbW1lbnRBdG9tKSBBdG9taWNTdHJpbmcoIiNjb21tZW50Iik7CisgICAgICAgIG5ldyAoJnN0
YXJBdG9tKSBBdG9taWNTdHJpbmcoIioiKTsKKwogICAgICAgICBpbml0aWFsaXplZCA9IHRydWU7
CiAgICAgfQotI2VuZGlmCiB9CiAKIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBdG9taWNTdHJpbmcg
JmEsIGNvbnN0IERPTVN0cmluZyAmYikKSW5kZXg6IGtodG1sL3htbC9kb21fYXRvbWljc3RyaW5n
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwveG1sL2RvbV9h
dG9taWNzdHJpbmcuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40CmRpZmYgLXUgLXAgLXIxLjQg
a2h0bWwveG1sL2RvbV9hdG9taWNzdHJpbmcuaAotLS0ga2h0bWwveG1sL2RvbV9hdG9taWNzdHJp
bmcuaAkyOCBKdW4gMjAwNSAwMTo1NDozNCAtMDAwMAkxLjQKKysrIGtodG1sL3htbC9kb21fYXRv
bWljc3RyaW5nLmgJOCBKdWwgMjAwNSAwNTo1Nzo1MSAtMDAwMApAQCAtNTUsNyArNTUsNyBAQCBw
dWJsaWM6CiAgICAgYm9vbCBwZXJjZW50YWdlKGludCAmX3BlcmNlbnRhZ2UpIGNvbnN0IHsgcmV0
dXJuIG1fc3RyaW5nLnBlcmNlbnRhZ2UoX3BlcmNlbnRhZ2UpOyB9CiAgICAga2h0bWw6Okxlbmd0
aCogdG9MZW5ndGhBcnJheShpbnQmIGxlbikgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcudG9MZW5n
dGhBcnJheShsZW4pOyB9CiAgICAga2h0bWw6Okxlbmd0aCogdG9Db29yZHNBcnJheShpbnQmIGxl
bikgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcudG9Db29yZHNBcnJheShsZW4pOyB9Ci0gICAgCisK
ICAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nLmlzTnVsbCgpOyB9CiAg
ICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcuaXNFbXB0eSgpOyB9CiAK
QEAgLTEwOSwxNiArMTA5LDE0IEBAIGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgQXRvbWlj
U3RyaW4KIAogLy8gTGlzdCBvZiBwcm9wZXJ0eSBuYW1lcywgcGFzc2VkIHRvIGEgbWFjcm8gc28g
d2UgY2FuIGRvIHNldCB0aGVtIHVwIHZhcmlvdXMKIC8vIHdheXMgd2l0aG91dCByZXBlYXRpbmcg
dGhlIGxpc3QuCi0jZGVmaW5lIEtIVE1MX0FUT01JQ1NUUklOR19FQUNIX0dMT0JBTChtYWNybykK
IAotICAgIC8vIERlZmluZSBleHRlcm5hbCBnbG9iYWwgdmFyaWFibGVzIGZvciBhbGwgcHJvcGVy
dHkgbmFtZXMgYWJvdmUgKGFuZCBvbmUgbW9yZSkuCisvLyBEZWZpbmUgZXh0ZXJuYWwgZ2xvYmFs
IHZhcmlhYmxlcyBmb3IgdGhlIGNvbW1vbmx5IHVzZWQgYXRvbWljIHN0cmluZ3MuCiAjaWYgIUtI
VE1MX0FUT01JQ1NUUklOR19ISURFX0dMT0JBTFMKICAgICBleHRlcm4gY29uc3QgQXRvbWljU3Ry
aW5nIG51bGxBdG9tOwogICAgIGV4dGVybiBjb25zdCBBdG9taWNTdHJpbmcgZW1wdHlBdG9tOwot
I2RlZmluZSBLSFRNTF9BVE9NSUNTVFJJTkdfREVDTEFSRV9HTE9CQUwobmFtZSkgZXh0ZXJuIGNv
bnN0IEF0b21pY1N0cmluZyBuYW1lICMjIFByb3BlcnR5TmFtZTsKLSAgICBLSFRNTF9BVE9NSUNT
VFJJTkdfRUFDSF9HTE9CQUwoS0hUTUxfQVRPTUlDU1RSSU5HX0RFQ0xBUkVfR0xPQkFMKQotICAg
IEtIVE1MX0FUT01JQ1NUUklOR19ERUNMQVJFX0dMT0JBTChzcGVjaWFsUHJvdG90eXBlKQotI3Vu
ZGVmIEtIVE1MX0FUT01JQ1NUUklOR19ERUNMQVJFX0dMT0JBTAorICAgIGV4dGVybiBjb25zdCBB
dG9taWNTdHJpbmcgdGV4dEF0b207CisgICAgZXh0ZXJuIGNvbnN0IEF0b21pY1N0cmluZyBjb21t
ZW50QXRvbTsKKyAgICBleHRlcm4gY29uc3QgQXRvbWljU3RyaW5nIHN0YXJBdG9tOwogI2VuZGlm
CiAgICAgICAgIAogYm9vbCBvcGVyYXRvcj09KGNvbnN0IEF0b21pY1N0cmluZyAmYSwgY29uc3Qg
RE9NU3RyaW5nICZiKTsKSW5kZXg6IGtodG1sL3htbC9kb21fZG9jaW1wbC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwveG1sL2RvbV9kb2NpbXBsLmNwcCx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yMzEKZGlmZiAtdSAtcCAtcjEuMjMxIGtodG1sL3htbC9k
b21fZG9jaW1wbC5jcHAKLS0tIGtodG1sL3htbC9kb21fZG9jaW1wbC5jcHAJMyBKdWwgMjAwNSAx
MDowNTowOCAtMDAwMAkxLjIzMQorKysga2h0bWwveG1sL2RvbV9kb2NpbXBsLmNwcAk4IEp1bCAy
MDA1IDA1OjU3OjU0IC0wMDAwCkBAIC0zNCw4ICszNCw2IEBACiAjaW5jbHVkZSAieG1sL2RvbTJf
dmlld3NpbXBsLmgiCiAjaW5jbHVkZSAieG1sL3htbF90b2tlbml6ZXIuaCIKIAotI2luY2x1ZGUg
InhtbF9uYW1lc3BhY2VfdGFibGUuaCIKLQogI2luY2x1ZGUgImNzcy9jc3NoZWxwZXIuaCIKICNp
bmNsdWRlICJjc3MvY3Nzc3R5bGVzZWxlY3Rvci5oIgogI2luY2x1ZGUgImNzcy9jc3Nfc3R5bGVz
aGVldGltcGwuaCIKQEAgLTY1LDE3ICs2MywxMSBAQAogI2luY2x1ZGUgImtodG1sX3NldHRpbmdz
LmgiCiAjaW5jbHVkZSAia2h0bWxwYXJ0X3AuaCIKIAotI2luY2x1ZGUgImh0bWwvaHRtbF9iYXNl
aW1wbC5oIgotI2luY2x1ZGUgImh0bWwvaHRtbF9ibG9ja2ltcGwuaCIKLSNpbmNsdWRlICJodG1s
L2h0bWxfY2FudmFzaW1wbC5oIgorLy8gRklYTUU6IFdlIHdhbnQgdG8gY3V0IHRoZSByZW1haW5p
bmcgSFRNTCBkZXBlbmRlbmNpZXMgc28gdGhhdCB3ZSBkb24ndCBuZWVkIHRvIGluY2x1ZGUgdGhl
c2UgZmlsZXMuCiAjaW5jbHVkZSAiaHRtbC9odG1sX2RvY3VtZW50aW1wbC5oIgotI2luY2x1ZGUg
Imh0bWwvaHRtbF9mb3JtaW1wbC5oIgogI2luY2x1ZGUgImh0bWwvaHRtbF9oZWFkaW1wbC5oIgog
I2luY2x1ZGUgImh0bWwvaHRtbF9pbWFnZWltcGwuaCIKLSNpbmNsdWRlICJodG1sL2h0bWxfbGlz
dGltcGwuaCIKLSNpbmNsdWRlICJodG1sL2h0bWxfbWlzY2ltcGwuaCIKLSNpbmNsdWRlICJodG1s
L2h0bWxfdGFibGVpbXBsLmgiCi0jaW5jbHVkZSAiaHRtbC9odG1sX29iamVjdGltcGwuaCIKKyNp
bmNsdWRlICJodG1sZmFjdG9yeS5oIgogCiAjaW5jbHVkZSAiY3NzdmFsdWVzLmgiCiAKQEAgLTUw
NCw5ICs0OTYsOSBAQCBFbGVtZW50SW1wbCAqRG9jdW1lbnRJbXBsOjpkb2N1bWVudEVsZW1lCiAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsKj4obik7CiB9CiAKLUVsZW1lbnRJbXBs
ICpEb2N1bWVudEltcGw6OmNyZWF0ZUVsZW1lbnQoIGNvbnN0IERPTVN0cmluZyAmbmFtZSwgaW50
ICZleGNlcHRpb25jb2RlICkKK0VsZW1lbnRJbXBsICpEb2N1bWVudEltcGw6OmNyZWF0ZUVsZW1l
bnQoY29uc3QgRE9NU3RyaW5nICZuYW1lLCBpbnQgJmV4Y2VwdGlvbkNvZGUpCiB7Ci0gICAgcmV0
dXJuIG5ldyBYTUxFbGVtZW50SW1wbCggZG9jdW1lbnQsIG5hbWUuaW1wbGVtZW50YXRpb24oKSAp
OworICAgIHJldHVybiBjcmVhdGVFbGVtZW50TlMoZW1wdHlBdG9tLCBuYW1lLCBleGNlcHRpb25D
b2RlKTsKIH0KIAogRG9jdW1lbnRGcmFnbWVudEltcGwgKkRvY3VtZW50SW1wbDo6Y3JlYXRlRG9j
dW1lbnRGcmFnbWVudCggICkKQEAgLTU3MywxMCArNTY1LDggQEAgTm9kZUltcGwgKkRvY3VtZW50
SW1wbDo6aW1wb3J0Tm9kZShOb2RlSQogICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUNvbW1lbnQo
aW1wb3J0ZWROb2RlLT5ub2RlVmFsdWUoKSk7CiAgICAgICAgIGNhc2UgTm9kZTo6RUxFTUVOVF9O
T0RFOiB7CiAgICAgICAgICAgICBFbGVtZW50SW1wbCAqb2xkRWxlbWVudCA9IHN0YXRpY19jYXN0
PEVsZW1lbnRJbXBsICo+KGltcG9ydGVkTm9kZSk7Ci0gICAgICAgICAgICBEb2N1bWVudEltcGwg
Km9sZERvYyA9IG9sZEVsZW1lbnQtPmdldERvY3VtZW50KCk7Ci0gICAgICAgICAgICBzdGF0aWMg
RE9NU3RyaW5nIEhUTUxOYW1lc3BhY2UoWEhUTUxfTkFNRVNQQUNFKTsKLSAgICAgICAgICAgIERP
TVN0cmluZyBlbGVtZW50TmFtZXNwYWNlID0gb2xkRWxlbWVudC0+aXNIVE1MRWxlbWVudCgpID8g
SFRNTE5hbWVzcGFjZSA6IG9sZEVsZW1lbnQtPm5hbWVzcGFjZVVSSSgpOwotICAgICAgICAgICAg
RWxlbWVudEltcGwgKm5ld0VsZW1lbnQgPSBjcmVhdGVFbGVtZW50TlMoZWxlbWVudE5hbWVzcGFj
ZS5pbXBsZW1lbnRhdGlvbigpLCBvbGRFbGVtZW50LT50YWdOYW1lKCksIGV4Y2VwdGlvbmNvZGUp
OworICAgICAgICAgICAgLy8gRklYTUU6IFByZWZpeCBpcyBsb3N0LiAgSXMgdGhhdCByaWdodD8K
KyAgICAgICAgICAgIEVsZW1lbnRJbXBsICpuZXdFbGVtZW50ID0gY3JlYXRlRWxlbWVudE5TKG9s
ZEVsZW1lbnQtPm5hbWVzcGFjZVVSSSgpLCBvbGRFbGVtZW50LT5sb2NhbE5hbWUoKSwgZXhjZXB0
aW9uY29kZSk7CiAgICAgICAgICAgICBpZiAoZXhjZXB0aW9uY29kZSAhPSAwKQogICAgICAgICAg
ICAgICAgIHJldHVybiAwOwogCkBAIC01OTcsNyArNTg3LDggQEAgTm9kZUltcGwgKkRvY3VtZW50
SW1wbDo6aW1wb3J0Tm9kZShOb2RlSQogICAgICAgICAgICAgICAgICAgICAgICAgLy8gIyMjIGV4
dHJhY3QgYW5kIHNldCBuZXcgcHJlZml4CiAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAg
ICAgICAgICAgICAgICBOb2RlSW1wbDo6SWQgbm9kZUlkID0gYXR0cklkKG9sZERvYy0+bmFtZXNw
YWNlVVJJKGF0dHItPmF0dHJJbXBsKCktPmlkKCkpLCBsb2NhbE5hbWUuaW1wbGVtZW50YXRpb24o
KSwgZmFsc2UgLyogYWxsb2NhdGUgKi8pOworICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTog
TG9zZSB0aGUgbmFtZXNwYWNlIGhlcmUgZm9yIG5vdy4gIFRoaXMgY29kZSB3aWxsIGNoYW5nZSBz
b29uIGFueXdheS4KKyAgICAgICAgICAgICAgICAgICAgTm9kZUltcGw6OklkIG5vZGVJZCA9IGF0
dHJJZCgwLCBsb2NhbE5hbWUuaW1wbGVtZW50YXRpb24oKSwgZmFsc2UgLyogYWxsb2NhdGUgKi8p
OwogICAgICAgICAgICAgICAgICAgICBuZXdFbGVtZW50LT5zZXRBdHRyaWJ1dGUobm9kZUlkLCB2
YWx1ZS5pbXBsZW1lbnRhdGlvbigpLCBleGNlcHRpb25jb2RlKTsKICAgICAgICAgICAgICAgICAg
ICAgaWYgKGV4Y2VwdGlvbmNvZGUgIT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgbmV3
RWxlbWVudC0+ZGVyZWYoKTsKQEAgLTYzNiwyOCArNjI3LDM2IEBAIE5vZGVJbXBsICpEb2N1bWVu
dEltcGw6OmltcG9ydE5vZGUoTm9kZUkKIAogRWxlbWVudEltcGwgKkRvY3VtZW50SW1wbDo6Y3Jl
YXRlRWxlbWVudE5TKCBjb25zdCBET01TdHJpbmcgJl9uYW1lc3BhY2VVUkksIGNvbnN0IERPTVN0
cmluZyAmX3F1YWxpZmllZE5hbWUsIGludCAmZXhjZXB0aW9uY29kZSkKIHsKLSAgICBFbGVtZW50
SW1wbCAqZSA9IDA7Ci0gICAgUVN0cmluZyBxTmFtZSA9IF9xdWFsaWZpZWROYW1lLnN0cmluZygp
OwotICAgIGludCBjb2xvblBvcyA9IHFOYW1lLmZpbmQoJzonLDApOwotCisgICAgLy8gU3BsaXQg
dGhlIG5hbWUuCisgICAgaW50IGV4Y2VwdGlvbkNvZGUgPSAwOworICAgIEVsZW1lbnRJbXBsKiBl
ID0gMDsKKyAgICBET01TdHJpbmcgcHJlZml4LCBsb2NhbE5hbWU7CisgICAgaW50IGNvbG9uUG9z
ID0gX3F1YWxpZmllZE5hbWUuZmluZCgnOicpOworICAgIGlmIChjb2xvblBvcyA+PSAwKSB7Cisg
ICAgICAgIHByZWZpeCA9IF9xdWFsaWZpZWROYW1lLnN1YnN0cmluZygwLCBjb2xvblBvcyk7Cisg
ICAgICAgIGxvY2FsTmFtZSA9IF9xdWFsaWZpZWROYW1lLnN1YnN0cmluZyhjb2xvblBvcysxLCBf
cXVhbGlmaWVkTmFtZS5sZW5ndGgoKSAtIGNvbG9uUG9zKTsKKyAgICB9CisgICAgZWxzZQorICAg
ICAgICBsb2NhbE5hbWUgPSBfcXVhbGlmaWVkTmFtZTsKKyAgICAKKyAgICAvLyBGSVhNRTogVXNl
IHJlZ2lzdGVyZWQgbmFtZXNwYWNlcyBhbmQgbG9vayB1cCBpbiBhIGhhc2ggdG8gZmluZCB0aGUg
cmlnaHQgZmFjdG9yeS4KICAgICBpZiAoX25hbWVzcGFjZVVSSSA9PSBYSFRNTF9OQU1FU1BBQ0Up
IHsKLSAgICAgICAgLy8gVXNlciByZXF1ZXN0ZWQgYW4gZWxlbWVudCBpbiB0aGUgWEhUTUwgbmFt
ZXNwYWNlIC0gdGhpcyBtZWFucyB3ZSBjcmVhdGUgYSBzcGVjaWZpYyBlbGVtZW50Ci0gICAgICAg
IC8vIChlbGVtZW50cyBub3QgaW4gdGhpcyBuYW1lc3BhY2UgYXJlIHRyZWF0ZWQgYXMgbm9ybWFs
IFhNTCBlbGVtZW50cykKLSAgICAgICAgZSA9IGNyZWF0ZUhUTUxFbGVtZW50KHFOYW1lLm1pZChj
b2xvblBvcysxKSwgZXhjZXB0aW9uY29kZSk7Ci0gICAgICAgIGlmIChleGNlcHRpb25jb2RlKQor
ICAgICAgICAvLyBGSVhNRTogUmVhbGx5IHNob3VsZCBvbmx5IGJlIGRvbmUgZnJvbSB0aGUgcHVi
bGljIERPTSBBUEkuICBJbnRlcm5hbCBjYWxsZXJzIGtub3cgdGhlIG5hbWUgaXMgdmFsaWQuCisg
ICAgICAgIGlmICghaXNWYWxpZE5hbWUobG9jYWxOYW1lKSkgeworICAgICAgICAgICAgZXhjZXB0
aW9uY29kZSA9IERPTUV4Y2VwdGlvbjo6SU5WQUxJRF9DSEFSQUNURVJfRVJSOwogICAgICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgICAgIGlmIChlICYmIGNvbG9uUG9zID49IDApIHsKLSAgICAgICAg
ICAgIGUtPnNldFByZWZpeChxTmFtZS5sZWZ0KGNvbG9uUG9zKSwgZXhjZXB0aW9uY29kZSk7Ci0g
ICAgICAgICAgICBpZiAoZXhjZXB0aW9uY29kZSkgewotICAgICAgICAgICAgICAgIGRlbGV0ZSBl
OworICAgICAgICB9CisgICAgICAgIGUgPSBIVE1MRWxlbWVudEZhY3Rvcnk6OmNyZWF0ZUhUTUxF
bGVtZW50KEF0b21pY1N0cmluZyhsb2NhbE5hbWUpLCB0aGlzLCAwLCBmYWxzZSk7CisgICAgICAg
IGlmIChlICYmICFwcmVmaXguaXNOdWxsKCkpIHsKKyAgICAgICAgICAgIGUtPnNldFByZWZpeChB
dG9taWNTdHJpbmcocHJlZml4KSwgZXhjZXB0aW9uQ29kZSk7CisgICAgICAgICAgICBpZiAoZXhj
ZXB0aW9uQ29kZSkKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIH0KICAg
ICAgICAgfQogICAgIH0KLQorICAgIAogICAgIGlmICghZSkKLSAgICAgICAgZSA9IG5ldyBYTUxF
bGVtZW50SW1wbCggZG9jdW1lbnQsIF9xdWFsaWZpZWROYW1lLmltcGxlbWVudGF0aW9uKCksIF9u
YW1lc3BhY2VVUkkuaW1wbGVtZW50YXRpb24oKSApOwotCisgICAgICAgIGUgPSBuZXcgRWxlbWVu
dEltcGwoUXVhbGlmaWVkTmFtZShBdG9taWNTdHJpbmcocHJlZml4KSwgQXRvbWljU3RyaW5nKGxv
Y2FsTmFtZSksIEF0b21pY1N0cmluZyhfbmFtZXNwYWNlVVJJKSksIGRvY3VtZW50KTsKKyAgICAK
ICAgICByZXR1cm4gZTsKIH0KIApAQCAtODExLDIyMCArODEwLDYgQEAgdW5zaWduZWQgc2hvcnQg
RG9jdW1lbnRJbXBsOjpub2RlVHlwZSgpIAogICAgIHJldHVybiBOb2RlOjpET0NVTUVOVF9OT0RF
OwogfQogCi1FbGVtZW50SW1wbCAqRG9jdW1lbnRJbXBsOjpjcmVhdGVIVE1MRWxlbWVudCggY29u
c3QgRE9NU3RyaW5nICZuYW1lLCBpbnQgJmV4Y2VwdGlvbmNvZGUgKQotewotICAgIGlmICghaXNW
YWxpZE5hbWUobmFtZSkpIHsKLSAgICAgICAgZXhjZXB0aW9uY29kZSA9IERPTUV4Y2VwdGlvbjo6
SU5WQUxJRF9DSEFSQUNURVJfRVJSOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgcmV0
dXJuIGNyZWF0ZUhUTUxFbGVtZW50KHRhZ0lkKDAsIG5hbWUuaW1wbGVtZW50YXRpb24oKSwgZmFs
c2UpKTsKLX0KLQotRWxlbWVudEltcGwgKkRvY3VtZW50SW1wbDo6Y3JlYXRlSFRNTEVsZW1lbnQo
dW5zaWduZWQgc2hvcnQgdGFnSUQpCi17Ci0gICAgc3dpdGNoICh0YWdJRCkKLSAgICB7Ci0gICAg
Y2FzZSBJRF9IVE1MOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxIdG1sRWxlbWVudEltcGwoZG9j
UHRyKCkpOwotICAgIGNhc2UgSURfSEVBRDoKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MSGVhZEVs
ZW1lbnRJbXBsKGRvY1B0cigpKTsKLSAgICBjYXNlIElEX0JPRFk6Ci0gICAgICAgIHJldHVybiBu
ZXcgSFRNTEJvZHlFbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0KLS8vIGhlYWQgZWxlbWVudHMKLSAg
ICBjYXNlIElEX0JBU0U6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTEJhc2VFbGVtZW50SW1wbChk
b2NQdHIoKSk7Ci0gICAgY2FzZSBJRF9MSU5LOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxMaW5r
RWxlbWVudEltcGwoZG9jUHRyKCkpOwotICAgIGNhc2UgSURfTUVUQToKLSAgICAgICAgcmV0dXJu
IG5ldyBIVE1MTWV0YUVsZW1lbnRJbXBsKGRvY1B0cigpKTsKLSAgICBjYXNlIElEX1NUWUxFOgot
ICAgICAgICByZXR1cm4gbmV3IEhUTUxTdHlsZUVsZW1lbnRJbXBsKGRvY1B0cigpKTsKLSAgICBj
YXNlIElEX1RJVExFOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxUaXRsZUVsZW1lbnRJbXBsKGRv
Y1B0cigpKTsKLQotLy8gZnJhbWVzCi0gICAgY2FzZSBJRF9GUkFNRToKLSAgICAgICAgcmV0dXJu
IG5ldyBIVE1MRnJhbWVFbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0gICAgY2FzZSBJRF9GUkFNRVNF
VDoKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MRnJhbWVTZXRFbGVtZW50SW1wbChkb2NQdHIoKSk7
Ci0gICAgY2FzZSBJRF9JRlJBTUU6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTElGcmFtZUVsZW1l
bnRJbXBsKGRvY1B0cigpKTsKLQotLy8gZm9ybSBlbGVtZW50cwotLy8gIyMjIEZJWE1FOiB3ZSBu
ZWVkIGEgd2F5IHRvIHNldCBmb3JtIGRlcGVuZGVuY3kgYWZ0ZXIgd2UgaGF2ZSBtYWRlIHRoZSBm
b3JtIGVsZW1lbnRzCi0gICAgY2FzZSBJRF9GT1JNOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxG
b3JtRWxlbWVudEltcGwoZG9jUHRyKCkpOwotICAgIGNhc2UgSURfQlVUVE9OOgotICAgICAgICBy
ZXR1cm4gbmV3IEhUTUxCdXR0b25FbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0gICAgY2FzZSBJRF9G
SUVMRFNFVDoKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MRmllbGRTZXRFbGVtZW50SW1wbChkb2NQ
dHIoKSk7Ci0gICAgY2FzZSBJRF9JTlBVVDoKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MSW5wdXRF
bGVtZW50SW1wbChkb2NQdHIoKSk7Ci0gICAgY2FzZSBJRF9JU0lOREVYOgotICAgICAgICByZXR1
cm4gbmV3IEhUTUxJc0luZGV4RWxlbWVudEltcGwoZG9jUHRyKCkpOwotICAgIGNhc2UgSURfTEFC
RUw6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTExhYmVsRWxlbWVudEltcGwoZG9jUHRyKCkpOwot
ICAgIGNhc2UgSURfTEVHRU5EOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxMZWdlbmRFbGVtZW50
SW1wbChkb2NQdHIoKSk7Ci0gICAgY2FzZSBJRF9PUFRHUk9VUDoKLSAgICAgICAgcmV0dXJuIG5l
dyBIVE1MT3B0R3JvdXBFbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0gICAgY2FzZSBJRF9PUFRJT046
Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTE9wdGlvbkVsZW1lbnRJbXBsKGRvY1B0cigpKTsKLSAg
ICBjYXNlIElEX1NFTEVDVDoKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MU2VsZWN0RWxlbWVudElt
cGwoZG9jUHRyKCkpOwotICAgIGNhc2UgSURfVEVYVEFSRUE6Ci0gICAgICAgIHJldHVybiBuZXcg
SFRNTFRleHRBcmVhRWxlbWVudEltcGwoZG9jUHRyKCkpOwotCi0vLyBsaXN0cwotICAgIGNhc2Ug
SURfREw6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTERMaXN0RWxlbWVudEltcGwoZG9jUHRyKCkp
OwotICAgIGNhc2UgSURfREQ6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTEdlbmVyaWNFbGVtZW50
SW1wbChkb2NQdHIoKSwgdGFnSUQpOwotICAgIGNhc2UgSURfRFQ6Ci0gICAgICAgIHJldHVybiBu
ZXcgSFRNTEdlbmVyaWNFbGVtZW50SW1wbChkb2NQdHIoKSwgdGFnSUQpOwotICAgIGNhc2UgSURf
VUw6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTFVMaXN0RWxlbWVudEltcGwoZG9jUHRyKCkpOwot
ICAgIGNhc2UgSURfT0w6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTE9MaXN0RWxlbWVudEltcGwo
ZG9jUHRyKCkpOwotICAgIGNhc2UgSURfRElSOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxEaXJl
Y3RvcnlFbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0gICAgY2FzZSBJRF9NRU5VOgotICAgICAgICBy
ZXR1cm4gbmV3IEhUTUxNZW51RWxlbWVudEltcGwoZG9jUHRyKCkpOwotICAgIGNhc2UgSURfTEk6
Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTExJRWxlbWVudEltcGwoZG9jUHRyKCkpOwotCi0vLyBm
b3JtYXR0aW5nIGVsZW1lbnRzIChibG9jaykKLSAgICBjYXNlIElEX0JMT0NLUVVPVEU6Ci0gICAg
ICAgIHJldHVybiBuZXcgSFRNTEJsb2NrcXVvdGVFbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0gICAg
Y2FzZSBJRF9ESVY6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTERpdkVsZW1lbnRJbXBsKGRvY1B0
cigpKTsKLSAgICBjYXNlIElEX0gxOgotICAgIGNhc2UgSURfSDI6Ci0gICAgY2FzZSBJRF9IMzoK
LSAgICBjYXNlIElEX0g0OgotICAgIGNhc2UgSURfSDU6Ci0gICAgY2FzZSBJRF9INjoKLSAgICAg
ICAgcmV0dXJuIG5ldyBIVE1MSGVhZGluZ0VsZW1lbnRJbXBsKGRvY1B0cigpLCB0YWdJRCk7Ci0g
ICAgY2FzZSBJRF9IUjoKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MSFJFbGVtZW50SW1wbChkb2NQ
dHIoKSk7Ci0gICAgY2FzZSBJRF9QOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxQYXJhZ3JhcGhF
bGVtZW50SW1wbChkb2NQdHIoKSk7Ci0gICAgY2FzZSBJRF9QUkU6Ci0gICAgY2FzZSBJRF9YTVA6
Ci0gICAgY2FzZSBJRF9QTEFJTlRFWFQ6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTFByZUVsZW1l
bnRJbXBsKGRvY1B0cigpLCB0YWdJRCk7Ci0gICAgY2FzZSBJRF9MQVlFUjoKLSAgICAgICAgcmV0
dXJuIG5ldyBIVE1MTGF5ZXJFbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0KLS8vIGZvbnQgc3R1ZmYK
LSAgICBjYXNlIElEX0JBU0VGT05UOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxCYXNlRm9udEVs
ZW1lbnRJbXBsKGRvY1B0cigpKTsKLSAgICBjYXNlIElEX0ZPTlQ6Ci0gICAgICAgIHJldHVybiBu
ZXcgSFRNTEZvbnRFbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0KLS8vIGlucy9kZWwKLSAgICBjYXNl
IElEX0RFTDoKLSAgICBjYXNlIElEX0lOUzoKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MTW9kRWxl
bWVudEltcGwoZG9jUHRyKCksIHRhZ0lEKTsKLQotLy8gYW5jaG9yCi0gICAgY2FzZSBJRF9BOgot
ICAgICAgICByZXR1cm4gbmV3IEhUTUxBbmNob3JFbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0KLS8v
IGltYWdlcwotICAgIGNhc2UgSURfSU1HOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxJbWFnZUVs
ZW1lbnRJbXBsKGRvY1B0cigpKTsKLSAgICBjYXNlIElEX01BUDoKLSAgICAgICAgcmV0dXJuIG5l
dyBIVE1MTWFwRWxlbWVudEltcGwoZG9jUHRyKCkpOwotICAgIGNhc2UgSURfQVJFQToKLSAgICAg
ICAgcmV0dXJuIG5ldyBIVE1MQXJlYUVsZW1lbnRJbXBsKGRvY1B0cigpKTsKLSAgICBjYXNlIElE
X0NBTlZBUzoKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MQ2FudmFzRWxlbWVudEltcGwoZG9jUHRy
KCkpOwotCi0vLyBvYmplY3RzLCBhcHBsZXRzIGFuZCBzY3JpcHRzCi0gICAgY2FzZSBJRF9BUFBM
RVQ6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTEFwcGxldEVsZW1lbnRJbXBsKGRvY1B0cigpKTsK
LSAgICBjYXNlIElEX0VNQkVEOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxFbWJlZEVsZW1lbnRJ
bXBsKGRvY1B0cigpKTsKLSAgICBjYXNlIElEX09CSkVDVDoKLSAgICAgICAgcmV0dXJuIG5ldyBI
VE1MT2JqZWN0RWxlbWVudEltcGwoZG9jUHRyKCkpOwotICAgIGNhc2UgSURfUEFSQU06Ci0gICAg
ICAgIHJldHVybiBuZXcgSFRNTFBhcmFtRWxlbWVudEltcGwoZG9jUHRyKCkpOwotICAgIGNhc2Ug
SURfU0NSSVBUOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxTY3JpcHRFbGVtZW50SW1wbChkb2NQ
dHIoKSk7Ci0KLS8vIHRhYmxlcwotICAgIGNhc2UgSURfVEFCTEU6Ci0gICAgICAgIHJldHVybiBu
ZXcgSFRNTFRhYmxlRWxlbWVudEltcGwoZG9jUHRyKCkpOwotICAgIGNhc2UgSURfQ0FQVElPTjoK
LSAgICAgICAgcmV0dXJuIG5ldyBIVE1MVGFibGVDYXB0aW9uRWxlbWVudEltcGwoZG9jUHRyKCkp
OwotICAgIGNhc2UgSURfQ09MR1JPVVA6Ci0gICAgY2FzZSBJRF9DT0w6Ci0gICAgICAgIHJldHVy
biBuZXcgSFRNTFRhYmxlQ29sRWxlbWVudEltcGwoZG9jUHRyKCksIHRhZ0lEKTsKLSAgICBjYXNl
IElEX1RSOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxUYWJsZVJvd0VsZW1lbnRJbXBsKGRvY1B0
cigpKTsKLSAgICBjYXNlIElEX1REOgotICAgIGNhc2UgSURfVEg6Ci0gICAgICAgIHJldHVybiBu
ZXcgSFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsKGRvY1B0cigpLCB0YWdJRCk7Ci0gICAgY2FzZSBJ
RF9USEVBRDoKLSAgICBjYXNlIElEX1RCT0RZOgotICAgIGNhc2UgSURfVEZPT1Q6Ci0gICAgICAg
IHJldHVybiBuZXcgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsKGRvY1B0cigpLCB0YWdJRCwg
ZmFsc2UpOwotCi0vLyBpbmxpbmUgZWxlbWVudHMKLSAgICBjYXNlIElEX0JSOgotICAgICAgICBy
ZXR1cm4gbmV3IEhUTUxCUkVsZW1lbnRJbXBsKGRvY1B0cigpKTsKLSAgICBjYXNlIElEX1E6Ci0g
ICAgICAgIHJldHVybiBuZXcgSFRNTFF1b3RlRWxlbWVudEltcGwoZG9jUHRyKCkpOwotCi0gICAg
Y2FzZSBJRF9NQVJRVUVFOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxNYXJxdWVlRWxlbWVudElt
cGwoZG9jUHRyKCkpOwotICAgCi0vLyBlbGVtZW50cyB3aXRoIG5vIHNwZWNpYWwgcmVwcmVzZW50
YXRpb24gaW4gdGhlIERPTQotCi0vLyBibG9jazoKLSAgICBjYXNlIElEX0FERFJFU1M6Ci0gICAg
Y2FzZSBJRF9DRU5URVI6Ci0KLS8vIGlubGluZQotICAgICAgICAvLyAlZm9udHN0eWxlCi0gICAg
Y2FzZSBJRF9UVDoKLSAgICBjYXNlIElEX1U6Ci0gICAgY2FzZSBJRF9COgotICAgIGNhc2UgSURf
SToKLSAgICBjYXNlIElEX1M6Ci0gICAgY2FzZSBJRF9TVFJJS0U6Ci0gICAgY2FzZSBJRF9CSUc6
Ci0gICAgY2FzZSBJRF9TTUFMTDoKLQotICAgICAgICAvLyAlcGhyYXNlCi0gICAgY2FzZSBJRF9F
TToKLSAgICBjYXNlIElEX1NUUk9ORzoKLSAgICBjYXNlIElEX0RGTjoKLSAgICBjYXNlIElEX0NP
REU6Ci0gICAgY2FzZSBJRF9TQU1QOgotICAgIGNhc2UgSURfS0JEOgotICAgIGNhc2UgSURfVkFS
OgotICAgIGNhc2UgSURfQ0lURToKLSAgICBjYXNlIElEX0FCQlI6Ci0gICAgY2FzZSBJRF9BQ1JP
TllNOgotCi0gICAgICAgIC8vICVzcGVjaWFsCi0gICAgY2FzZSBJRF9TVUI6Ci0gICAgY2FzZSBJ
RF9TVVA6Ci0gICAgY2FzZSBJRF9TUEFOOgotICAgIGNhc2UgSURfTk9CUjoKLSAgICBjYXNlIElE
X1dCUjoKLQotICAgIGNhc2UgSURfQkRPOgotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBu
ZXcgSFRNTEdlbmVyaWNFbGVtZW50SW1wbChkb2NQdHIoKSwgdGFnSUQpOwotICAgIH0KLQotICAg
IHJldHVybiAwOwotfQotCiBRU3RyaW5nIERvY3VtZW50SW1wbDo6bmV4dFN0YXRlKCkKIHsKICAg
IFFTdHJpbmcgc3RhdGU7CkBAIC0xNDY0LDEwICsxMjQ5LDEwIEBAIEhUTUxFbGVtZW50SW1wbCog
RG9jdW1lbnRJbXBsOjpib2R5KCkKICAgICAvLyB0cnkgdG8gcHJlZmVyIGEgRlJBTUVTRVQgZWxl
bWVudCBvdmVyIEJPRFkKICAgICBOb2RlSW1wbCogYm9keSA9IDA7CiAgICAgZm9yIChOb2RlSW1w
bCogaSA9IGRlLT5maXJzdENoaWxkKCk7IGk7IGkgPSBpLT5uZXh0U2libGluZygpKSB7Ci0gICAg
ICAgIGlmIChpLT5pZCgpID09IElEX0ZSQU1FU0VUKQorICAgICAgICBpZiAoaS0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OmZyYW1lc2V0KCkpKQogICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PEhUTUxFbGVtZW50SW1wbCo+KGkpOwogICAgICAgICAKLSAgICAgICAgaWYgKGktPmlkKCkgPT0g
SURfQk9EWSkKKyAgICAgICAgaWYgKGktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpib2R5KCkpKQog
ICAgICAgICAgICAgYm9keSA9IGk7CiAgICAgfQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1M
RWxlbWVudEltcGwgKj4oYm9keSk7CkBAIC0xNTk3LDcgKzEzODIsNyBAQCBib29sIERvY3VtZW50
SW1wbDo6c2hvdWxkU2NoZWR1bGVMYXlvdXQoCiAgICAgLy8gKGMpIHdlIGhhdmUgYSA8Ym9keT4K
ICAgICByZXR1cm4gKHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+bmVlZHNMYXlvdXQoKSAmJiBo
YXZlU3R5bGVzaGVldHNMb2FkZWQoKSAmJgogICAgICAgICAgICAgZG9jdW1lbnRFbGVtZW50KCkg
JiYgZG9jdW1lbnRFbGVtZW50KCktPnJlbmRlcmVyKCkgJiYKLSAgICAgICAgICAgIChkb2N1bWVu
dEVsZW1lbnQoKS0+aWQoKSAhPSBJRF9IVE1MIHx8IGJvZHkoKSkpOworICAgICAgICAgICAgKCFk
b2N1bWVudEVsZW1lbnQoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omh0bWwoKSkgfHwgYm9keSgp
KSk7CiB9CiAKIGludCBEb2N1bWVudEltcGw6Om1pbmltdW1MYXlvdXREZWxheSgpCkBAIC0xNzIx
LDQyICsxNTA2LDYgQEAgdm9pZCBEb2N1bWVudEltcGw6OmRldGVybWluZVBhcnNlTW9kZSggYwog
ICAgIGtkRGVidWcoNjAyMCkgPDwgIiB1c2luZyBzdHJpY3QgcGFyc2VNb2RlIiA8PCBlbmRsOwog
fQogCi0vLyBQbGVhc2Ugc2VlIGlmIHRoZXJlYHMgYSBwb3NzaWJpbGl0eSB0byBtZXJnZSB0aGF0
IGNvZGUKLS8vIHdpdGggdGhlIG5leHQgZnVuY3Rpb24gYW5kIGdldEVsZW1lbnRCeUlEKCkuCi1O
b2RlSW1wbCAqRG9jdW1lbnRJbXBsOjpmaW5kRWxlbWVudCggSWQgaWQgKQotewotICAgIFFQdHJT
dGFjazxOb2RlSW1wbD4gbm9kZVN0YWNrOwotICAgIE5vZGVJbXBsICpjdXJyZW50ID0gX2ZpcnN0
OwotCi0gICAgd2hpbGUoMSkKLSAgICB7Ci0gICAgICAgIGlmKCFjdXJyZW50KQotICAgICAgICB7
Ci0gICAgICAgICAgICBpZihub2RlU3RhY2suaXNFbXB0eSgpKSBicmVhazsKLSAgICAgICAgICAg
IGN1cnJlbnQgPSBub2RlU3RhY2sucG9wKCk7Ci0gICAgICAgICAgICBjdXJyZW50ID0gY3VycmVu
dC0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGlmKGN1cnJlbnQtPmlkKCkgPT0gaWQpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGN1cnJlbnQ7Ci0KLSAgICAgICAgICAgIE5vZGVJbXBsICpjaGlsZCA9IGN1cnJlbnQtPmZpcnN0
Q2hpbGQoKTsKLSAgICAgICAgICAgIGlmKGNoaWxkKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIG5vZGVTdGFjay5wdXNoKGN1cnJlbnQpOwotICAgICAgICAgICAgICAgIGN1cnJlbnQg
PSBjaGlsZDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC0+bmV4dFNpYmxpbmcoKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCiBOb2RlSW1w
bCAqRG9jdW1lbnRJbXBsOjpuZXh0Rm9jdXNOb2RlKE5vZGVJbXBsICpmcm9tTm9kZSkKIHsKICAg
ICB1bnNpZ25lZCBzaG9ydCBmcm9tVGFiSW5kZXg7CkBAIC0yMTUxLDEyICsxOTAwLDEzIEBAIE5v
ZGVJbXBsOjpJZCBEb2N1bWVudEltcGw6OmF0dHJJZChET01TdHIKIAogICAgIC8vIG5vdyBsZXRz
IGZpbmQgb3V0IHRoZSBuYW1lc3BhY2UKICAgICBRX1VJTlQxNiBucyA9IG5vTmFtZXNwYWNlOwor
ICAgIC8qIEZJWE1FOiBKdXN0IGJyZWFrIG5hbWVzcGFjZWQgYXR0cmlidXRlcyBmb3Igbm93LiAg
V2lsbCBmaXggaW4gbmV4dCBzdGFnZSBvZiBRdWFsaWZpZWROYW1lIGNvbnZlcnNpb24uCiAgICAg
aWYgKF9uYW1lc3BhY2VVUkkpIHsKICAgICAgICAgRE9NU3RyaW5nIG5zVShfbmFtZXNwYWNlVVJJ
KTsKICAgICAgICAgaW50IG5zSUQgPSBYbWxOYW1lc3BhY2VUYWJsZTo6Z2V0TmFtZXNwYWNlSUQo
bnNVLCByZWFkb25seSk7CiAgICAgICAgIGlmIChuc0lEICE9IC0xKQogICAgICAgICAgICAgbnMg
PSAoUV9VSU5UMTYpbnNJRDsKLSAgICB9CisgICAgfSovCiAgICAgCiAgICAgLy8gTG9vayBpbiB0
aGUgbV9hdHRyTmFtZXMgYXJyYXkgZm9yIHRoZSBuYW1lCiAgICAgLy8gIyMjIHllYWgsIHRoaXMg
aXMgbGFtZS4gdXNlIGEgZGljdGlvbmFyeSAvIG1hcCBpbnN0ZWFkCkBAIC0yMjA3LDk1ICsxOTU3
LDYgQEAgRE9NU3RyaW5nIERvY3VtZW50SW1wbDo6YXR0ck5hbWUoTm9kZUltcAogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKLU5vZGVJbXBsOjpJZCBEb2N1bWVudEltcGw6OnRhZ0lkKERPTVN0cmlu
Z0ltcGwqIF9uYW1lc3BhY2VVUkksIERPTVN0cmluZ0ltcGwgKl9uYW1lLCBib29sIHJlYWRvbmx5
KQotewotICAgIGlmICghX25hbWUpIHJldHVybiAwOwotICAgIC8vIEVhY2ggZG9jdW1lbnQgbWFp
bnRhaW5zIGEgbWFwcGluZyBvZiB0YWcgbmFtZSAtPiBpZCBmb3IgZXZlcnkgdGFnIG5hbWUgZW5j
b3VudGVyZWQKLSAgICAvLyBpbiB0aGUgZG9jdW1lbnQuCi0gICAgTm9kZUltcGw6OklkIGlkID0g
MDsKLQotICAgIC8vIEZpcnN0IHNlZSBpZiBpdCdzIGEgSFRNTCBlbGVtZW50IG5hbWUKLSAgICBR
Q29uc3RTdHJpbmcgbihfbmFtZS0+cywgX25hbWUtPmwpOwotICAgIGlmICghX25hbWVzcGFjZVVS
SSB8fCAhc3RyY2FzZWNtcChfbmFtZXNwYWNlVVJJLCBYSFRNTF9OQU1FU1BBQ0UpKSB7Ci0gICAg
ICAgIC8vIHdlJ3JlIGluIEhUTUwgbmFtZXNwYWNlIGlmIHdlIGtub3cgdGhlIHRhZy4KLSAgICAg
ICAgLy8geGh0bWwgaXMgbG93ZXIgY2FzZSAtIGNhc2Ugc2Vuc2l0aXZlLCBlYXN5IHRvIGltcGxl
bWVudAotICAgICAgICBpZiAoIGh0bWxNb2RlKCkgPT0gWEh0bWwgJiYgKGlkID0gZ2V0VGFnSUQo
bi5zdHJpbmcoKS5hc2NpaSgpLCBfbmFtZS0+bCkpICkKLSAgICAgICAgICAgIHJldHVybiBpZDsK
LSAgICAgICAgLy8gY29tcGF0aWJpbGl0eTogdXBwZXIgY2FzZSAtIGNhc2UgaW5zZW5zaXRpdmUK
LSAgICAgICAgaWYgKCBodG1sTW9kZSgpICE9IFhIdG1sICYmIChpZCA9IGdldFRhZ0lEKG4uc3Ry
aW5nKCkubG93ZXIoKS5hc2NpaSgpLCBfbmFtZS0+bCApKSApCi0gICAgICAgICAgICByZXR1cm4g
aWQ7Ci0KLSAgICAgICAgLy8gb2ssIHRoZSBmYXN0IHBhdGggZGlkbid0IHdvcmsgb3V0LCB3ZSBu
ZWVkIHRoZSBmdWxsIGNoZWNrCi0gICAgfQotCi0gICAgLy8gbm93IGxldHMgZmluZCBvdXQgdGhl
IG5hbWVzcGFjZQotICAgIFFfVUlOVDE2IG5zID0gbm9OYW1lc3BhY2U7Ci0gICAgaWYgKF9uYW1l
c3BhY2VVUkkpIHsKLSAgICAgICAgRE9NU3RyaW5nIG5zVShfbmFtZXNwYWNlVVJJKTsKLSAgICAg
ICAgaW50IG5zSUQgPSBYbWxOYW1lc3BhY2VUYWJsZTo6Z2V0TmFtZXNwYWNlSUQobnNVLCByZWFk
b25seSk7Ci0gICAgICAgIGlmIChuc0lEICE9IC0xKQotICAgICAgICAgICAgbnMgPSAoUV9VSU5U
MTYpbnNJRDsKLSAgICB9Ci0KLSAgICAvLyBMb29rIGluIHRoZSBtX2VsZW1lbnROYW1lcyBhcnJh
eSBmb3IgdGhlIG5hbWUKLSAgICAvLyAjIyMgeWVhaCwgdGhpcyBpcyBsYW1lLiB1c2UgYSBkaWN0
aW9uYXJ5IC8gbWFwIGluc3RlYWQKLSAgICBET01TdHJpbmcgbm1lKG4uc3RyaW5nKCkpOwotICAg
IC8vIGNvbXBhdGliaWxpdHkgbW9kZSBoYXMgdG8gc3RvcmUgdXBwZXIgY2FzZQotICAgIGlmICho
dG1sTW9kZSgpICE9IFhIdG1sKSBubWUgPSBubWUudXBwZXIoKTsKLSAgICBmb3IgKGlkID0gMDsg
aWQgPCBtX2VsZW1lbnROYW1lQ291bnQ7IGlkKyspCi0gICAgICAgIGlmIChET01TdHJpbmcobV9l
bGVtZW50TmFtZXNbaWRdKSA9PSBubWUpCi0gICAgICAgICAgICByZXR1cm4gbWFrZUlkKG5zLCBJ
RF9MQVNUX1RBRyArIDEgKyBpZCk7Ci0KLSAgICAvLyB1bmtub3duCi0gICAgaWYgKHJlYWRvbmx5
KSByZXR1cm4gMDsKLQotICAgIC8vIE5hbWUgbm90IGZvdW5kIGluIG1fZWxlbWVudE5hbWVzLCBz
byBsZXQncyBhZGQgaXQKLSAgICBpZiAobV9lbGVtZW50TmFtZUNvdW50KzEgPiBtX2VsZW1lbnRO
YW1lQWxsb2MpIHsKLSAgICAgICAgbV9lbGVtZW50TmFtZUFsbG9jICs9IDEwMDsKLSAgICAgICAg
RE9NU3RyaW5nSW1wbCAqKm5ld05hbWVzID0gbmV3IERPTVN0cmluZ0ltcGwqIFttX2VsZW1lbnRO
YW1lQWxsb2NdOwotICAgICAgICAvLyAjIyMgeWVhaCwgdGhpcyBpcyBsYW1lLiB1c2UgYSBkaWN0
aW9uYXJ5IC8gbWFwIGluc3RlYWQKLSAgICAgICAgaWYgKG1fZWxlbWVudE5hbWVzKSB7Ci0gICAg
ICAgICAgICB1bnNpZ25lZCBzaG9ydCBpOwotICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG1f
ZWxlbWVudE5hbWVDb3VudDsgaSsrKQotICAgICAgICAgICAgICAgIG5ld05hbWVzW2ldID0gbV9l
bGVtZW50TmFtZXNbaV07Ci0gICAgICAgICAgICBkZWxldGUgW10gbV9lbGVtZW50TmFtZXM7Ci0g
ICAgICAgIH0KLSAgICAgICAgbV9lbGVtZW50TmFtZXMgPSBuZXdOYW1lczsKLSAgICB9Ci0KLSAg
ICBpZCA9IG1fZWxlbWVudE5hbWVDb3VudCsrOwotICAgIG1fZWxlbWVudE5hbWVzW2lkXSA9IG5t
ZS5pbXBsZW1lbnRhdGlvbigpOwotICAgIG1fZWxlbWVudE5hbWVzW2lkXS0+cmVmKCk7Ci0KLSAg
ICByZXR1cm4gbWFrZUlkKG5zLCBJRF9MQVNUX1RBRyArIDEgKyBpZCk7Ci19Ci0KLURPTVN0cmlu
ZyBEb2N1bWVudEltcGw6OnRhZ05hbWUoTm9kZUltcGw6OklkIF9pZCkgY29uc3QKLXsKLSAgICBp
ZiAobG9jYWxOYW1lUGFydChfaWQpID4gSURfTEFTVF9UQUcpCi0gICAgICAgIHJldHVybiBtX2Vs
ZW1lbnROYW1lc1tsb2NhbE5hbWVQYXJ0KF9pZCkgLSAoSURfTEFTVF9UQUcgKyAxKV07Ci0gICAg
ZWxzZSB7Ci0gICAgICAgIC8vICMjIyBwdXQgdGhlbSBpbiBhIGNhY2hlCi0gICAgICAgIGlmICho
dG1sTW9kZSgpID09IFhIdG1sKQotICAgICAgICAgICAgcmV0dXJuIGdldFRhZ05hbWUoX2lkKS5s
b3dlcigpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gZ2V0VGFnTmFtZShfaWQp
OwotICAgIH0KLX0KLQotCi1ET01TdHJpbmdJbXBsKiBEb2N1bWVudEltcGw6Om5hbWVzcGFjZVVS
SShOb2RlSW1wbDo6SWQgX2lkKSBjb25zdAotewotICAgIGlmIChfaWQgPD0gSURfTEFTVF9UQUcp
Ci0gICAgICAgIHJldHVybiBodG1sTW9kZSgpID09IFhIdG1sID8gWG1sTmFtZXNwYWNlVGFibGU6
OmdldE5hbWVzcGFjZVVSSSh4aHRtbE5hbWVzcGFjZSkuaW1wbGVtZW50YXRpb24oKSA6IDA7Ci0K
LSAgICB1bnNpZ25lZCBzaG9ydCBucyA9IF9pZCA+PiAxNjsKLQotICAgIGlmICghbnMpIHJldHVy
biAwOwotCi0gICAgcmV0dXJuIFhtbE5hbWVzcGFjZVRhYmxlOjpnZXROYW1lc3BhY2VVUkkobnMp
LmltcGxlbWVudGF0aW9uKCk7Ci19Ci0KIFN0eWxlU2hlZXRMaXN0SW1wbCogRG9jdW1lbnRJbXBs
OjpzdHlsZVNoZWV0cygpCiB7CiAgICAgcmV0dXJuIG1fc3R5bGVTaGVldHM7CkBAIC0yNDE5LDEx
ICsyMDgwLDExIEBAIHZvaWQgRG9jdW1lbnRJbXBsOjpyZWNhbGNTdHlsZVNlbGVjdG9yKCkKICAg
ICAgICAgICAgIH0KIAogICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKG4tPmlzSFRNTEVsZW1l
bnQoKSAmJiAobi0+aWQoKSA9PSBJRF9MSU5LIHx8IG4tPmlkKCkgPT0gSURfU1RZTEUpKSB7Ci0g
ICAgICAgICAgICBFbGVtZW50SW1wbCAqZSA9IHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsICo+KG4p
OworICAgICAgICBlbHNlIGlmIChuLT5pc0hUTUxFbGVtZW50KCkgJiYgKG4tPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjpsaW5rKCkpIHx8IG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzdHlsZSgpKSkp
IHsKKyAgICAgICAgICAgIEhUTUxFbGVtZW50SW1wbCAqZSA9IHN0YXRpY19jYXN0PEhUTUxFbGVt
ZW50SW1wbCAqPihuKTsKICAgICAgICAgICAgIFFTdHJpbmcgdGl0bGUgPSBlLT5nZXRBdHRyaWJ1
dGUoIEFUVFJfVElUTEUgKS5zdHJpbmcoKTsKICAgICAgICAgICAgIGJvb2wgZW5hYmxlZFZpYVNj
cmlwdCA9IGZhbHNlOwotICAgICAgICAgICAgaWYgKG4tPmlkKCkgPT0gSURfTElOSykgeworICAg
ICAgICAgICAgaWYgKGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmxpbmsoKSkpIHsKICAgICAg
ICAgICAgICAgICAvLyA8TElOSz4gZWxlbWVudAogICAgICAgICAgICAgICAgIEhUTUxMaW5rRWxl
bWVudEltcGwqIGwgPSBzdGF0aWNfY2FzdDxIVE1MTGlua0VsZW1lbnRJbXBsKj4obik7CiAgICAg
ICAgICAgICAgICAgaWYgKGwtPmlzTG9hZGluZygpIHx8IGwtPmlzRGlzYWJsZWQoKSkKQEAgLTI0
MzUsNyArMjA5Niw3IEBAIHZvaWQgRG9jdW1lbnRJbXBsOjpyZWNhbGNTdHlsZVNlbGVjdG9yKCkK
IAogICAgICAgICAgICAgLy8gR2V0IHRoZSBjdXJyZW50IHByZWZlcnJlZCBzdHlsZXNldC4gIFRo
aXMgaXMgdGhlCiAgICAgICAgICAgICAvLyBzZXQgb2Ygc2hlZXRzIHRoYXQgd2lsbCBiZSBlbmFi
bGVkLgotICAgICAgICAgICAgaWYgKCBuLT5pZCgpID09IElEX0xJTksgKQorICAgICAgICAgICAg
aWYgKGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmxpbmsoKSkpCiAgICAgICAgICAgICAgICAg
c2hlZXQgPSBzdGF0aWNfY2FzdDxIVE1MTGlua0VsZW1lbnRJbXBsKj4obiktPnNoZWV0KCk7CiAg
ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgLy8gPFNUWUxFPiBlbGVtZW50CkBAIC0y
NDUyLDcgKzIxMTMsNyBAQCB2b2lkIERvY3VtZW50SW1wbDo6cmVjYWxjU3R5bGVTZWxlY3Rvcigp
CiAgICAgICAgICAgICAgICAgICAgIC8vIHVzIGFzIHRoZSBwcmVmZXJyZWQgc2V0LiAgT3RoZXJ3
aXNlLCBqdXN0IGlnbm9yZQogICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIHNoZWV0LgogICAg
ICAgICAgICAgICAgICAgICBRU3RyaW5nIHJlbCA9IGUtPmdldEF0dHJpYnV0ZSggQVRUUl9SRUwg
KS5zdHJpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG4tPmlkKCkgPT0gSURfU1RZTEUg
fHwgIXJlbC5jb250YWlucygiYWx0ZXJuYXRlIikpCisgICAgICAgICAgICAgICAgICAgIGlmIChl
LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpzdHlsZSgpKSB8fCAhcmVsLmNvbnRhaW5zKCJhbHRl
cm5hdGUiKSkKICAgICAgICAgICAgICAgICAgICAgICAgIG1fcHJlZmVycmVkU3R5bGVzaGVldFNl
dCA9IHZpZXcoKS0+cGFydCgpLT5kLT5tX3NoZWV0VXNlZCA9IHRpdGxlOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAKQEAgLTI0NzEsNyArMjEzMiw3IEBAIHZvaWQg
RG9jdW1lbnRJbXBsOjpyZWNhbGNTdHlsZVNlbGVjdG9yKCkKICAgICAKICAgICAgICAgLy8gRm9y
IEhUTUwgZG9jdW1lbnRzLCBzdHlsZXNoZWV0cyBhcmUgbm90IGFsbG93ZWQgd2l0aGluL2FmdGVy
IHRoZSA8Qk9EWT4gdGFnLiBTbyB3ZQogICAgICAgICAvLyBjYW4gc3RvcCBzZWFyY2hpbmcgaGVy
ZS4KLSAgICAgICAgaWYgKGlzSFRNTERvY3VtZW50KCkgJiYgbi0+aWQoKSA9PSBJRF9CT0RZKQor
ICAgICAgICBpZiAoaXNIVE1MRG9jdW1lbnQoKSAmJiBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
Ym9keSgpKSkKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KIApJbmRleDoga2h0bWwveG1sL2Rv
bV9kb2NpbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwv
eG1sL2RvbV9kb2NpbXBsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTE1CmRpZmYgLXUgLXAg
LXIxLjExNSBraHRtbC94bWwvZG9tX2RvY2ltcGwuaAotLS0ga2h0bWwveG1sL2RvbV9kb2NpbXBs
LmgJMjIgSnVuIDIwMDUgMTg6MjI6MDIgLTAwMDAJMS4xMTUKKysrIGtodG1sL3htbC9kb21fZG9j
aW1wbC5oCTggSnVsIDIwMDUgMDU6NTc6NTQgLTAwMDAKQEAgLTE3Nyw3ICsxNzcsNyBAQCBwdWJs
aWM6CiAKICAgICBET01JbXBsZW1lbnRhdGlvbkltcGwgKmltcGxlbWVudGF0aW9uKCkgY29uc3Q7
CiAgICAgdmlydHVhbCBFbGVtZW50SW1wbCAqZG9jdW1lbnRFbGVtZW50KCkgY29uc3Q7Ci0gICAg
dmlydHVhbCBFbGVtZW50SW1wbCAqY3JlYXRlRWxlbWVudCAoIGNvbnN0IERPTVN0cmluZyAmdGFn
TmFtZSwgaW50ICZleGNlcHRpb25jb2RlICk7CisgICAgdmlydHVhbCBFbGVtZW50SW1wbCAqY3Jl
YXRlRWxlbWVudChjb25zdCBET01TdHJpbmcgJnRhZ05hbWUsIGludCAmZXhjZXB0aW9uY29kZSk7
CiAgICAgRG9jdW1lbnRGcmFnbWVudEltcGwgKmNyZWF0ZURvY3VtZW50RnJhZ21lbnQgKCk7CiAg
ICAgVGV4dEltcGwgKmNyZWF0ZVRleHROb2RlICggY29uc3QgRE9NU3RyaW5nICZkYXRhICk7CiAg
ICAgQ29tbWVudEltcGwgKmNyZWF0ZUNvbW1lbnQgKCBjb25zdCBET01TdHJpbmcgJmRhdGEgKTsK
QEAgLTE4OCw3ICsxODgsNyBAQCBwdWJsaWM6CiAgICAgQXR0ckltcGwgKmNyZWF0ZUF0dHJpYnV0
ZU5TKGNvbnN0IERPTVN0cmluZyAmbmFtZXNwYWNlVVJJLCBjb25zdCBET01TdHJpbmcgJnF1YWxp
ZmllZE5hbWUsIGludCAmZXhjZXB0aW9uKTsKICAgICBFbnRpdHlSZWZlcmVuY2VJbXBsICpjcmVh
dGVFbnRpdHlSZWZlcmVuY2UgKCBjb25zdCBET01TdHJpbmcgJm5hbWUgKTsKICAgICBOb2RlSW1w
bCAqaW1wb3J0Tm9kZSggTm9kZUltcGwgKmltcG9ydGVkTm9kZSwgYm9vbCBkZWVwLCBpbnQgJmV4
Y2VwdGlvbmNvZGUgKTsKLSAgICB2aXJ0dWFsIEVsZW1lbnRJbXBsICpjcmVhdGVFbGVtZW50TlMg
KCBjb25zdCBET01TdHJpbmcgJl9uYW1lc3BhY2VVUkksIGNvbnN0IERPTVN0cmluZyAmX3F1YWxp
ZmllZE5hbWUsIGludCAmZXhjZXB0aW9uY29kZSApOworICAgIHZpcnR1YWwgRWxlbWVudEltcGwg
KmNyZWF0ZUVsZW1lbnROUyhjb25zdCBET01TdHJpbmcgJl9uYW1lc3BhY2VVUkksIGNvbnN0IERP
TVN0cmluZyAmX3F1YWxpZmllZE5hbWUsIGludCAmZXhjZXB0aW9uY29kZSk7CiAgICAgRWxlbWVu
dEltcGwgKmdldEVsZW1lbnRCeUlkICggY29uc3QgRE9NU3RyaW5nICZlbGVtZW50SWQgKSBjb25z
dDsKICAgICBFbGVtZW50SW1wbCAqZWxlbWVudEZyb21Qb2ludCAoIGNvbnN0IGludCBfeCwgY29u
c3QgaW50IF95ICkgY29uc3Q7CiAKQEAgLTIxOCw5ICsyMTgsNiBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCBib29sIGlzRG9jdW1lbnROb2RlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZp
cnR1YWwgYm9vbCBpc0hUTUxEb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAg
ICBFbGVtZW50SW1wbCAqY3JlYXRlSFRNTEVsZW1lbnQoY29uc3QgRE9NU3RyaW5nICZ0YWdOYW1l
LCBpbnQgJmV4Y2VwdGlvbmNvZGUpOwotICAgIEVsZW1lbnRJbXBsICpjcmVhdGVIVE1MRWxlbWVu
dCh1bnNpZ25lZCBzaG9ydCB0YWdJRCk7Ci0KICAgICBraHRtbDo6Q1NTU3R5bGVTZWxlY3RvciAq
c3R5bGVTZWxlY3RvcigpIHsgcmV0dXJuIG1fc3R5bGVTZWxlY3RvcjsgfQogCiAgICAgRWxlbWVu
dEltcGwgKkRvY3VtZW50SW1wbDo6Z2V0RWxlbWVudEJ5QWNjZXNzS2V5KCBjb25zdCBET01TdHJp
bmcgJmtleSApOwpAQCAtMzg3LDkgKzM4NCw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlc2V0Vmlz
aXRlZExpbmtDb2xvcigpOwogICAgIHZvaWQgcmVzZXRBY3RpdmVMaW5rQ29sb3IoKTsKICAgICAK
LSAgICAvLyBpbnRlcm5hbAotICAgIE5vZGVJbXBsICpmaW5kRWxlbWVudCggSWQgaWQgKTsKLQog
ICAgIGJvb2wgcHJlcGFyZU1vdXNlRXZlbnQoIGJvb2wgcmVhZG9ubHksIGludCB4LCBpbnQgeSwg
TW91c2VFdmVudCAqZXYgKTsKIAogICAgIHZpcnR1YWwgYm9vbCBjaGlsZEFsbG93ZWQoIE5vZGVJ
bXBsICpuZXdDaGlsZCApOwpAQCAtMzk5LDE2ICszOTMsOSBAQCBwdWJsaWM6CiAgICAgLy8gIyMj
IHRoaW5rIGFib3V0IGltcGxlbWVudGluZyByZWYnY291bnRpbmcgZm9yIHRoZSBpZCdzCiAgICAg
Ly8gaW4gb3JkZXIgdG8gYmUgYWJsZSB0byByZWFzc2lnbiB0aG9zZSB0aGF0IGFyZSBubyBsb25n
ZXIgaW4gdXNlCiAgICAgLy8gKGNvdWxkIG1ha2UgcHJvYmxlbXMgd2hlbiBpdCBpcyBzdGlsbCBr
ZXB0IHNvbWV3aGVyZSBhcm91bmQsIGkuZS4gc3R5bGVzZWxlY3RvcikKLSAgICBOb2RlSW1wbDo6
SWQgdGFnSWQoRE9NU3RyaW5nSW1wbCogX25hbWVzcGFjZVVSSSwgRE9NU3RyaW5nSW1wbCAqX25h
bWUsIGJvb2wgcmVhZG9ubHkpOwotICAgIERPTVN0cmluZyB0YWdOYW1lKE5vZGVJbXBsOjpJZCBf
aWQpIGNvbnN0OwotCiAgICAgTm9kZUltcGw6OklkIGF0dHJJZChET01TdHJpbmdJbXBsKiBfbmFt
ZXNwYWNlVVJJLCBET01TdHJpbmdJbXBsICpfbmFtZSwgYm9vbCByZWFkb25seSk7CiAgICAgRE9N
U3RyaW5nIGF0dHJOYW1lKE5vZGVJbXBsOjpJZCBfaWQpIGNvbnN0OwogCi0gICAgLy8gdGhlIG5h
bWVzcGFjZSB1cmkgaXMgbWFwcGVkIHRvIHRoZSBzYW1lIGlkIGZvciBib3RoCi0gICAgLy8gdGFn
bmFtZXMgYXMgd2VsbCBhcyBhdHRyaWJ1dGVzLgotICAgIERPTVN0cmluZ0ltcGwqIG5hbWVzcGFj
ZVVSSShOb2RlSW1wbDo6SWQgX2lkKSBjb25zdDsKLQogICAgIFN0eWxlU2hlZXRMaXN0SW1wbCog
c3R5bGVTaGVldHMoKTsKIAogICAgIC8qIE5ld2x5IHByb3Bvc2VkIENTUzMgbWVjaGFuaXNtIGZv
ciBzZWxlY3RpbmcgYWx0ZXJuYXRlCkluZGV4OiBraHRtbC94bWwvZG9tX2VsZW1lbnRpbXBsLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC94bWwvZG9tX2Vs
ZW1lbnRpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS42NwpkaWZmIC11IC1wIC1yMS42
NyBraHRtbC94bWwvZG9tX2VsZW1lbnRpbXBsLmNwcAotLS0ga2h0bWwveG1sL2RvbV9lbGVtZW50
aW1wbC5jcHAJMTEgTWF5IDIwMDUgMDU6NDk6MzUgLTAwMDAJMS42NworKysga2h0bWwveG1sL2Rv
bV9lbGVtZW50aW1wbC5jcHAJOCBKdWwgMjAwNSAwNTo1Nzo1NiAtMDAwMApAQCAtMzMsNyArMzMs
NiBAQAogCiAjaW5jbHVkZSAia2h0bWxfcGFydC5oIgogCi0jaW5jbHVkZSAiaHRtbC9kdGQuaCIK
ICNpbmNsdWRlICJodG1sL2h0bWxwYXJzZXIuaCIKIAogI2luY2x1ZGUgInJlbmRlcmluZy9yZW5k
ZXJfY2FudmFzLmgiCkBAIC05MCwxOCArODksMTggQEAgdW5zaWduZWQgc2hvcnQgQXR0ckltcGw6
Om5vZGVUeXBlKCkgY29ucwogICAgIHJldHVybiBOb2RlOjpBVFRSSUJVVEVfTk9ERTsKIH0KIAot
RE9NU3RyaW5nIEF0dHJJbXBsOjpwcmVmaXgoKSBjb25zdAorY29uc3QgQXRvbWljU3RyaW5nJiBB
dHRySW1wbDo6cHJlZml4KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9hdHRyaWJ1dGUtPnByZWZp
eCgpOwogfQogCi12b2lkIEF0dHJJbXBsOjpzZXRQcmVmaXgoY29uc3QgRE9NU3RyaW5nICZfcHJl
Zml4LCBpbnQgJmV4Y2VwdGlvbmNvZGUgKQordm9pZCBBdHRySW1wbDo6c2V0UHJlZml4KGNvbnN0
IEF0b21pY1N0cmluZyAmX3ByZWZpeCwgaW50ICZleGNlcHRpb25jb2RlICkKIHsKICAgICBjaGVj
a1NldFByZWZpeChfcHJlZml4LCBleGNlcHRpb25jb2RlKTsKICAgICBpZiAoZXhjZXB0aW9uY29k
ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9hdHRyaWJ1dGUtPnNldFByZWZpeChfcHJlZml4
LmltcGxlbWVudGF0aW9uKCkpOworICAgIG1fYXR0cmlidXRlLT5zZXRQcmVmaXgoX3ByZWZpeCk7
CiB9CiAKIERPTVN0cmluZyBBdHRySW1wbDo6bm9kZVZhbHVlKCkgY29uc3QKQEAgLTIwMiwxMSAr
MjAxLDEwIEBAIERPTVN0cmluZyBBdHRySW1wbDo6dmFsdWUoKSBjb25zdAogCiAvLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCiAKLUVsZW1lbnRJbXBsOjpFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQot
ICAgIDogQ29udGFpbmVyTm9kZUltcGwoZG9jKQorRWxlbWVudEltcGw6OkVsZW1lbnRJbXBsKGNv
bnN0IFF1YWxpZmllZE5hbWUmIHFOYW1lLCBEb2N1bWVudFB0ciAqZG9jKQorICAgIDogQ29udGFp
bmVyTm9kZUltcGwoZG9jKSwgbV90YWdOYW1lKHFOYW1lKQogewogICAgIG5hbWVkQXR0ck1hcCA9
IDA7Ci0gICAgbV9wcmVmaXggPSAwOwogfQogCiBFbGVtZW50SW1wbDo6fkVsZW1lbnRJbXBsKCkK
QEAgLTIxNSw5ICsyMTMsMjIgQEAgRWxlbWVudEltcGw6On5FbGVtZW50SW1wbCgpCiAgICAgICAg
IG5hbWVkQXR0ck1hcC0+ZGV0YWNoRnJvbUVsZW1lbnQoKTsKICAgICAgICAgbmFtZWRBdHRyTWFw
LT5kZXJlZigpOwogICAgIH0KK30KIAotICAgIGlmIChtX3ByZWZpeCkKLSAgICAgICAgbV9wcmVm
aXgtPmRlcmVmKCk7CitOb2RlSW1wbCAqRWxlbWVudEltcGw6OmNsb25lTm9kZShib29sIGRlZXAp
Cit7CisgICAgaW50IGV4Y2VwdGlvbkNvZGUgPSAwOworICAgIEVsZW1lbnRJbXBsICpjbG9uZSA9
IGdldERvY3VtZW50KCktPmNyZWF0ZUVsZW1lbnROUyhuYW1lc3BhY2VVUkkoKSwgbm9kZU5hbWUo
KSwgZXhjZXB0aW9uQ29kZSk7CisgICAgYXNzZXJ0KCFleGNlcHRpb25Db2RlKTsKKyAgICAKKyAg
ICAvLyBjbG9uZSBhdHRyaWJ1dGVzCisgICAgaWYgKG5hbWVkQXR0ck1hcCkKKyAgICAgICAgKmNs
b25lLT5hdHRyaWJ1dGVzKCkgPSAqbmFtZWRBdHRyTWFwOworCisgICAgaWYgKGRlZXApCisgICAg
ICAgIGNsb25lQ2hpbGROb2RlcyhjbG9uZSk7CisKKyAgICByZXR1cm4gY2xvbmU7CiB9CiAKIHZv
aWQgRWxlbWVudEltcGw6OnJlbW92ZUF0dHJpYnV0ZSggTm9kZUltcGw6OklkIGlkLCBpbnQgJmV4
Y2VwdGlvbmNvZGUgKQpAQCAtMzUxLDM2ICszNjIsMjQgQEAgdm9pZCBFbGVtZW50SW1wbDo6c2V0
QXR0cmlidXRlTWFwKCBOYW1lZAogYm9vbCBFbGVtZW50SW1wbDo6aGFzQXR0cmlidXRlcygpIGNv
bnN0CiB7CiAgICAgdXBkYXRlU3R5bGVBdHRyaWJ1dGVJZk5lZWRlZCgpOwotCiAgICAgcmV0dXJu
IG5hbWVkQXR0ck1hcCAmJiBuYW1lZEF0dHJNYXAtPmxlbmd0aCgpID4gMDsKIH0KIAogRE9NU3Ry
aW5nIEVsZW1lbnRJbXBsOjpub2RlTmFtZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHRhZ05hbWUo
KTsKLX0KLQotRE9NU3RyaW5nIEVsZW1lbnRJbXBsOjp0YWdOYW1lKCkgY29uc3QKLXsKLSAgICBE
T01TdHJpbmcgdG4gPSBnZXREb2N1bWVudCgpLT50YWdOYW1lKGlkKCkpOwotCi0gICAgaWYgKG1f
cHJlZml4KQotICAgICAgICByZXR1cm4gRE9NU3RyaW5nKG1fcHJlZml4KSArICI6IiArIHRuOwot
CisgICAgRE9NU3RyaW5nIHRuID0gbV90YWdOYW1lLmxvY2FsTmFtZSgpOworICAgIGlmIChtX3Rh
Z05hbWUuaGFzUHJlZml4KCkpCisgICAgICAgIHJldHVybiBET01TdHJpbmcobV90YWdOYW1lLnBy
ZWZpeCgpKSArICI6IiArIHRuOwogICAgIHJldHVybiB0bjsKIH0KIAotdm9pZCBFbGVtZW50SW1w
bDo6c2V0UHJlZml4KCBjb25zdCBET01TdHJpbmcgJl9wcmVmaXgsIGludCAmZXhjZXB0aW9uY29k
ZSApCit2b2lkIEVsZW1lbnRJbXBsOjpzZXRQcmVmaXgoY29uc3QgQXRvbWljU3RyaW5nICZfcHJl
Zml4LCBpbnQgJmV4Y2VwdGlvbmNvZGUpCiB7CiAgICAgY2hlY2tTZXRQcmVmaXgoX3ByZWZpeCwg
ZXhjZXB0aW9uY29kZSk7CiAgICAgaWYgKGV4Y2VwdGlvbmNvZGUpCiAgICAgICAgIHJldHVybjsK
IAotICAgIGlmIChtX3ByZWZpeCkKLSAgICAgICAgbV9wcmVmaXgtPmRlcmVmKCk7Ci0gICAgbV9w
cmVmaXggPSBfcHJlZml4LmltcGxlbWVudGF0aW9uKCk7Ci0gICAgaWYgKG1fcHJlZml4KQotICAg
ICAgICBtX3ByZWZpeC0+cmVmKCk7CisgICAgbV90YWdOYW1lLnNldFByZWZpeChfcHJlZml4KTsK
IH0KIAogdm9pZCBFbGVtZW50SW1wbDo6Y3JlYXRlQXR0cmlidXRlTWFwKCkgY29uc3QKQEAgLTUy
MSwxOCArNTIwLDYgQEAgdm9pZCBFbGVtZW50SW1wbDo6cmVjYWxjU3R5bGUoIFN0eWxlQ2hhbgog
ICAgIHNldEhhc0NoYW5nZWRDaGlsZCggZmFsc2UgKTsKIH0KIAotLy8gRE9NIFNlY3Rpb24gMS4x
LjEKLWJvb2wgRWxlbWVudEltcGw6OmNoaWxkQWxsb3dlZCggTm9kZUltcGwgKm5ld0NoaWxkICkK
LXsKLSAgICBpZiAoIWNoaWxkVHlwZUFsbG93ZWQobmV3Q2hpbGQtPm5vZGVUeXBlKCkpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBGb3IgWE1MIGRvY3VtZW50cywgd2UgYXJlIG5v
bi12YWxpZGF0aW5nIGFuZCBkbyBub3QgY2hlY2sgYWdhaW5zdCBhIERURCwgZXZlbiBmb3IgSFRN
TCBlbGVtZW50cy4KLSAgICBpZiAoZ2V0RG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSkKLSAg
ICAgICAgcmV0dXJuIGNoZWNrQ2hpbGQoaWQoKSwgbmV3Q2hpbGQtPmlkKCksICFnZXREb2N1bWVu
dCgpLT5pbkNvbXBhdE1vZGUoKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIGJvb2wgRWxlbWVu
dEltcGw6OmNoaWxkVHlwZUFsbG93ZWQoIHVuc2lnbmVkIHNob3J0IHR5cGUgKQogewogICAgIHN3
aXRjaCAodHlwZSkgewpAQCAtNTY5LDcgKzU1Niw3IEBAIHZvaWQgRWxlbWVudEltcGw6OmRpc3Bh
dGNoQXR0ckFkZGl0aW9uRXYKIAogRE9NU3RyaW5nIEVsZW1lbnRJbXBsOjpvcGVuVGFnU3RhcnRU
b1N0cmluZygpIGNvbnN0CiB7Ci0gICAgRE9NU3RyaW5nIHJlc3VsdCA9IERPTVN0cmluZygiPCIp
ICsgdGFnTmFtZSgpOworICAgIERPTVN0cmluZyByZXN1bHQgPSBET01TdHJpbmcoIjwiKSArIG5v
ZGVOYW1lKCk7CiAKICAgICBOYW1lZEF0dHJNYXBJbXBsICphdHRyTWFwID0gYXR0cmlidXRlcyh0
cnVlKTsKIApAQCAtNjEwLDcgKzU5Nyw3IEBAIERPTVN0cmluZyBFbGVtZW50SW1wbDo6dG9TdHJp
bmcoKSBjb25zdAogCX0KIAogCXJlc3VsdCArPSAiPC8iOwotCXJlc3VsdCArPSB0YWdOYW1lKCk7
CisJcmVzdWx0ICs9IG5vZGVOYW1lKCk7CiAJcmVzdWx0ICs9ICI+IjsKICAgICB9IGVsc2Ugewog
CXJlc3VsdCArPSAiIC8+IjsKQEAgLTc1OSwxMiArNzQ2LDcgQEAgQ1NTU3R5bGVEZWNsYXJhdGlv
bkltcGwgKkVsZW1lbnRJbXBsOjpzdAogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVhNTEVsZW1l
bnRJbXBsOjpYTUxFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCBET01TdHJpbmdJbXBsICpf
dGFnTmFtZSkKLSAgICA6IEVsZW1lbnRJbXBsKGRvYykKLXsKLSAgICBtX2lkID0gZG9jLT5kb2N1
bWVudCgpLT50YWdJZCgwIC8qIG5vIG5hbWVzcGFjZSAqLywgX3RhZ05hbWUsICBmYWxzZSAvKiBh
bGxvY2F0ZSAqLyk7Ci19Ci0KKy8qCiBYTUxFbGVtZW50SW1wbDo6WE1MRWxlbWVudEltcGwoRG9j
dW1lbnRQdHIgKmRvYywgRE9NU3RyaW5nSW1wbCAqX3F1YWxpZmllZE5hbWUsIERPTVN0cmluZ0lt
cGwgKl9uYW1lc3BhY2VVUkkpCiAgICAgOiBFbGVtZW50SW1wbChkb2MpCiB7CkBAIC03ODAsNDkg
Kzc2MiwyNCBAQCBYTUxFbGVtZW50SW1wbDo6WE1MRWxlbWVudEltcGwoRG9jdW1lbnRQCiAgICAg
ICAgIERPTVN0cmluZ0ltcGwqIGxvY2FsTmFtZSA9IF9xdWFsaWZpZWROYW1lLT5jb3B5KCk7CiAg
ICAgICAgIGxvY2FsTmFtZS0+cmVmKCk7CiAgICAgICAgIGxvY2FsTmFtZS0+cmVtb3ZlKDAsY29s
b25wb3MrMSk7Ci0gICAgICAgIG1faWQgPSBkb2MtPmRvY3VtZW50KCktPnRhZ0lkKF9uYW1lc3Bh
Y2VVUkksIGxvY2FsTmFtZSwgZmFsc2UgLyogYWxsb2NhdGUgKi8pOworICAgICAgICBtX2lkID0g
ZG9jLT5kb2N1bWVudCgpLT50YWdJZChfbmFtZXNwYWNlVVJJLCBsb2NhbE5hbWUsIGZhbHNlKTsK
ICAgICAgICAgbG9jYWxOYW1lLT5kZXJlZigpOwotICAgICAgICBtX3ByZWZpeCA9IF9xdWFsaWZp
ZWROYW1lLT5jb3B5KCk7Ci0gICAgICAgIG1fcHJlZml4LT5yZWYoKTsKLSAgICAgICAgbV9wcmVm
aXgtPnRydW5jYXRlKGNvbG9ucG9zKTsKKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBUaGlz
IGlzIGEgdGVtcG9yYXJ5IHNpdHVhdGlvbiBmb3Igc3RhZ2Ugb25lIG9mIHRoZSBRdWFsaWZpZWRO
YW1lIHBhdGNoLiAgVGhpcyBpcyBhbHNvIGEgcmVhbGx5IHN0dXBpZCB3YXkgdG8KKyAgICAgICAg
Ly8gaGF2ZSB0byBoYW5kbGUgdGhlIHByZWZpeC4gIFdheSB0b28gbXVjaCBjb3B5aW5nLiAgV2Ug
c2hvdWxkIG1ha2Ugc3VyZSB0aGUgWE1MIHRva2VuaXplciBoYXMgZG9uZSB0aGUgc3BsaXQKKyAg
ICAgICAgLy8gYWxyZWFkeSBpbnRvIHByZWZpeCBhbmQgbG9jYWxOYW1lLgorICAgICAgICBET01T
dHJpbmdJbXBsKiBwcmVmaXggPSBfcXVhbGlmaWVkTmFtZS0+Y29weSgpOworICAgICAgICBwcmVm
aXgtPnJlZigpOworICAgICAgICBwcmVmaXgtPnRydW5jYXRlKGNvbG9ucG9zKTsKKyAgICAgICAg
bV90YWdOYW1lID0gUXVhbGlmaWVkTmFtZShwcmVmaXgsIG51bGxBdG9tLCBudWxsQXRvbSk7Cisg
ICAgICAgIHByZWZpeC0+ZGVyZWYoKTsKICAgICB9Ci0gICAgZWxzZSB7CisgICAgZWxzZQogICAg
ICAgICAvLyBubyBwcmVmaXgKLSAgICAgICAgbV9pZCA9IGRvYy0+ZG9jdW1lbnQoKS0+dGFnSWQo
X25hbWVzcGFjZVVSSSwgX3F1YWxpZmllZE5hbWUsIGZhbHNlIC8qIGFsbG9jYXRlICovKTsKLSAg
ICAgICAgbV9wcmVmaXggPSAwOwotICAgIH0KKyAgICAgICAgbV9pZCA9IGRvYy0+ZG9jdW1lbnQo
KS0+dGFnSWQoX25hbWVzcGFjZVVSSSwgX3F1YWxpZmllZE5hbWUsIGZhbHNlKTsKIH0KIAotWE1M
RWxlbWVudEltcGw6On5YTUxFbGVtZW50SW1wbCgpCi17Ci19Ci0KLURPTVN0cmluZyBYTUxFbGVt
ZW50SW1wbDo6bG9jYWxOYW1lKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0RG9jdW1lbnQoKS0+
dGFnTmFtZShtX2lkKTsKLX0KLQotRE9NU3RyaW5nIFhNTEVsZW1lbnRJbXBsOjpuYW1lc3BhY2VV
UkkoKSBjb25zdAotewotICAgIHJldHVybiBnZXREb2N1bWVudCgpLT5uYW1lc3BhY2VVUkkobV9p
ZCk7Ci19Ci0KLU5vZGVJbXBsICpYTUxFbGVtZW50SW1wbDo6Y2xvbmVOb2RlICggYm9vbCBkZWVw
ICkKLXsKLSAgICAvLyAjIyMgd2UgbG9zZSBuYW1lc3BhY2UgaGVyZSBGSVhNRQotICAgIC8vIHNo
b3VsZCBwYXNzIGlkIGFyb3VuZAotICAgIFhNTEVsZW1lbnRJbXBsICpjbG9uZSA9IG5ldyBYTUxF
bGVtZW50SW1wbChkb2NQdHIoKSwgZ2V0RG9jdW1lbnQoKS0+dGFnTmFtZShtX2lkKS5pbXBsZW1l
bnRhdGlvbigpKTsKLSAgICBjbG9uZS0+bV9pZCA9IG1faWQ7Ci0KLSAgICAvLyBjbG9uZSBhdHRy
aWJ1dGVzCi0gICAgaWYgKG5hbWVkQXR0ck1hcCkKLSAgICAgICAgKmNsb25lLT5hdHRyaWJ1dGVz
KGZhbHNlKSA9ICpuYW1lZEF0dHJNYXA7Ci0KLSAgICBpZiAoZGVlcCkKLSAgICAgICAgY2xvbmVD
aGlsZE5vZGVzKGNsb25lKTsKLQotICAgIHJldHVybiBjbG9uZTsKLX0KKyovCiAKIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KIApAQCAtMTI3MCw4ICsxMjI3LDggQEAgdm9pZCBOYW1lZE1hcHBlZEF0dHJN
YXBJbXBsOjpwYXJzZUNsYXNzQQogICAgIH0KIH0KIAotU3R5bGVkRWxlbWVudEltcGw6OlN0eWxl
ZEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0gICAgOiBFbGVtZW50SW1wbChkb2MpCitT
dHlsZWRFbGVtZW50SW1wbDo6U3R5bGVkRWxlbWVudEltcGwoY29uc3QgUXVhbGlmaWVkTmFtZSYg
bmFtZSwgRG9jdW1lbnRQdHIgKmRvYykKKyAgICA6IEVsZW1lbnRJbXBsKG5hbWUsIGRvYykKIHsK
ICAgICBtX2lubGluZVN0eWxlRGVjbCA9IDA7CiAgICAgbV9pc1N0eWxlQXR0cmlidXRlVmFsaWQg
PSB0cnVlOwpJbmRleDoga2h0bWwveG1sL2RvbV9lbGVtZW50aW1wbC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3htbC9kb21fZWxlbWVudGltcGwuaCx2CnJl
dHJpZXZpbmcgcmV2aXNpb24gMS40MQpkaWZmIC11IC1wIC1yMS40MSBraHRtbC94bWwvZG9tX2Vs
ZW1lbnRpbXBsLmgKLS0tIGtodG1sL3htbC9kb21fZWxlbWVudGltcGwuaAkxMiBNYXkgMjAwNSAx
NzoxMToyMiAtMDAwMAkxLjQxCisrKyBraHRtbC94bWwvZG9tX2VsZW1lbnRpbXBsLmgJOCBKdWwg
MjAwNSAwNTo1Nzo1NiAtMDAwMApAQCAtMjMsMTMgKzIzLDE0IEBACiAgKiBCb3N0b24sIE1BIDAy
MTExLTEzMDcsIFVTQS4KICAqCiAgKi8KLSNpZm5kZWYgX0RPTV9FTEVNRU5USW1wbF9oXwotI2Rl
ZmluZSBfRE9NX0VMRU1FTlRJbXBsX2hfCisjaWZuZGVmIF9ET01fRUxFTUVOVElNUExfaF8KKyNk
ZWZpbmUgX0RPTV9FTEVNRU5USU1QTF9oXwogCiAjaW5jbHVkZSAiZG9tX25vZGVpbXBsLmgiCiAj
aW5jbHVkZSAieG1sL2RvbV9zdHJpbmdpbXBsLmgiCiAjaW5jbHVkZSAibWlzYy9zaGFyZWQuaCIK
ICNpbmNsdWRlICJjc3MvY3NzX3ZhbHVlaW1wbC5oIgorI2luY2x1ZGUgImRvbV9xbmFtZS5oIgog
CiAjaWYgQVBQTEVfQ0hBTkdFUwogI2lmZGVmIF9fT0JKQ19fCkBAIC0xMjgsOCArMTI5LDggQEAg
cHVibGljOgogICAgIC8vIERPTSBtZXRob2RzIG92ZXJyaWRkZW4gZnJvbSAgcGFyZW50IGNsYXNz
ZXMKICAgICB2aXJ0dWFsIERPTVN0cmluZyBub2RlTmFtZSgpIGNvbnN0OwogICAgIHZpcnR1YWwg
dW5zaWduZWQgc2hvcnQgbm9kZVR5cGUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIERPTVN0cmluZyBw
cmVmaXgoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0UHJlZml4KGNvbnN0IERPTVN0cmlu
ZyAmX3ByZWZpeCwgaW50ICZleGNlcHRpb25jb2RlICk7CisgICAgdmlydHVhbCBjb25zdCBBdG9t
aWNTdHJpbmcmIHByZWZpeCgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRQcmVmaXgoY29u
c3QgQXRvbWljU3RyaW5nICZfcHJlZml4LCBpbnQgJmV4Y2VwdGlvbmNvZGUgKTsKIAogICAgIHZp
cnR1YWwgRE9NU3RyaW5nIG5vZGVWYWx1ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBzZXRO
b2RlVmFsdWUoIGNvbnN0IERPTVN0cmluZyAmLCBpbnQgJmV4Y2VwdGlvbmNvZGUgKTsKQEAgLTE1
Niw3ICsxNTcsNyBAQCBjbGFzcyBFbGVtZW50SW1wbCA6IHB1YmxpYyBDb250YWluZXJOb2RlCiAg
ICAgZnJpZW5kIGNsYXNzIE5vZGVJbXBsOwogICAgIGZyaWVuZCBjbGFzcyBraHRtbDo6Q1NTU3R5
bGVTZWxlY3RvcjsKIHB1YmxpYzoKLSAgICBFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKTsK
KyAgICBFbGVtZW50SW1wbChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudFB0
ciAqZG9jKTsKICAgICB+RWxlbWVudEltcGwoKTsKIAogICAgIC8vIFVzZWQgdG8gcXVpY2tseSBk
ZXRlcm1pbmUgd2hldGhlciBvciBub3QgYW4gZWxlbWVudCBoYXMgYSBnaXZlbiBDU1MgY2xhc3Mu
CkBAIC0xODYsMTUgKzE4NywyNCBAQCBwdWJsaWM6CiAgICAgU2hhcmVkUHRyPEF0dHJJbXBsPiBz
ZXRBdHRyaWJ1dGVOb2RlTlMoQXR0ckltcGwgKm5ld0F0dHIsIGludCAmZXhjZXB0aW9uKSB7IHJl
dHVybiBzZXRBdHRyaWJ1dGVOb2RlKG5ld0F0dHIsIGV4Y2VwdGlvbik7IH0KICAgICBTaGFyZWRQ
dHI8QXR0ckltcGw+IHJlbW92ZUF0dHJpYnV0ZU5vZGUoQXR0ckltcGwgKm9sZEF0dHIsIGludCAm
ZXhjZXB0aW9uKTsKICAgICAKLSAgICBET01TdHJpbmcgcHJlZml4KCkgY29uc3QgeyByZXR1cm4g
bV9wcmVmaXg7IH0KLSAgICB2b2lkIHNldFByZWZpeChjb25zdCBET01TdHJpbmcgJl9wcmVmaXgs
IGludCAmZXhjZXB0aW9uY29kZSApOwotCiAgICAgdmlydHVhbCBDU1NTdHlsZURlY2xhcmF0aW9u
SW1wbCAqc3R5bGUoKTsKIAorICAgIHZpcnR1YWwgY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFt
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFnTmFtZTsgfQorICAgIHZpcnR1YWwgYm9vbCBoYXNUYWdO
YW1lKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUpIGNvbnN0IHsgcmV0dXJuIG1fdGFnTmFt
ZS5tYXRjaGVzKHRhZ05hbWUpOyB9CisgICAgCisgICAgLy8gQSBtb3JlIGxpZ2h0d2VpZ2h0IGNo
ZWNrIHRoYW4gaGFzVGFnTmFtZS4gIFVzZSB0aGlzIGNoZWNrIHdoZW4geW91IGtub3cgdGhlIG5h
bWVzcGFjZXMgb2YgdGhlIHR3byBRdWFsaWZpZWROYW1lcyBtYXRjaCwgZS5nLiwgdGhhdCB0aGV5
J3JlCisgICAgLy8gYm90aCBIVE1MIG5hbWVzLgorICAgIGJvb2wgaGFzTG9jYWxOYW1lKGNvbnN0
IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUpIGNvbnN0IHsgcmV0dXJuIG1fdGFnTmFtZS5sb2NhbE5h
bWUoKSA9PSB0YWdOYW1lLmxvY2FsTmFtZSgpOyB9CisgICAgYm9vbCBoYXNMb2NhbE5hbWUoY29u
c3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUpIGNvbnN0IHsgcmV0dXJuIG1fdGFnTmFtZS5sb2Nh
bE5hbWUoKSA9PSBsb2NhbE5hbWU7IH0KKworICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5n
JiBsb2NhbE5hbWUoKSBjb25zdCB7IHJldHVybiBtX3RhZ05hbWUubG9jYWxOYW1lKCk7IH0KKyAg
ICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4KCkgY29uc3QgeyByZXR1cm4gbV90
YWdOYW1lLnByZWZpeCgpOyB9CisgICAgdmlydHVhbCB2b2lkIHNldFByZWZpeChjb25zdCBBdG9t
aWNTdHJpbmcgJl9wcmVmaXgsIGludCAmZXhjZXB0aW9uY29kZSk7CisgICAgdmlydHVhbCBjb25z
dCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFnTmFtZS5u
YW1lc3BhY2VVUkkoKTsgfQorICAgIAogICAgIC8vIERPTSBtZXRob2RzIG92ZXJyaWRkZW4gZnJv
bSAgcGFyZW50IGNsYXNzZXMKLSAgICB2aXJ0dWFsIERPTVN0cmluZyB0YWdOYW1lKCkgY29uc3Q7
CiAgICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCBub2RlVHlwZSgpIGNvbnN0OwotICAgIHZpcnR1
YWwgTm9kZUltcGwgKmNsb25lTm9kZSAoIGJvb2wgZGVlcCApID0gMDsKKyAgICB2aXJ0dWFsIE5v
ZGVJbXBsICpjbG9uZU5vZGUoYm9vbCBkZWVwKTsKICAgICB2aXJ0dWFsIERPTVN0cmluZyBub2Rl
TmFtZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBpc0VsZW1lbnROb2RlKCkgY29uc3QgeyBy
ZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9Eb2N1bWVudCgpOwpA
QCAtMjIxLDcgKzIzMSw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcmVjYWxjU3R5bGUo
IFN0eWxlQ2hhbmdlID0gTm9DaGFuZ2UgKTsKIAogICAgIHZpcnR1YWwgdm9pZCBtb3VzZUV2ZW50
SGFuZGxlciggTW91c2VFdmVudCAqLypldiovLCBib29sIC8qaW5zaWRlKi8gKSB7fTsKLSAgICB2
aXJ0dWFsIGJvb2wgY2hpbGRBbGxvd2VkKCBOb2RlSW1wbCAqbmV3Q2hpbGQgKTsKICAgICB2aXJ0
dWFsIGJvb2wgY2hpbGRUeXBlQWxsb3dlZCggdW5zaWduZWQgc2hvcnQgdHlwZSApOwogIAogICAg
IHZpcnR1YWwgQXR0cmlidXRlSW1wbCogY3JlYXRlQXR0cmlidXRlKElkIGlkLCBET01TdHJpbmdJ
bXBsKiB2YWx1ZSk7CkBAIC0yNTQsMjkgKzI2Myw3IEBAIHByaXZhdGU6CiAKIHByb3RlY3RlZDog
Ly8gbWVtYmVyIHZhcmlhYmxlcwogICAgIG11dGFibGUgTmFtZWRBdHRyTWFwSW1wbCAqbmFtZWRB
dHRyTWFwOwotICAgIERPTVN0cmluZ0ltcGwgKm1fcHJlZml4OwotfTsKLQotCi1jbGFzcyBYTUxF
bGVtZW50SW1wbCA6IHB1YmxpYyBFbGVtZW50SW1wbAotewotCi1wdWJsaWM6Ci0gICAgWE1MRWxl
bWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgRE9NU3RyaW5nSW1wbCAqX3RhZ05hbWUpOwotICAg
IFhNTEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIERPTVN0cmluZ0ltcGwgKl9xdWFsaWZp
ZWROYW1lLCBET01TdHJpbmdJbXBsICpfbmFtZXNwYWNlVVJJKTsKLSAgICB+WE1MRWxlbWVudElt
cGwoKTsKLQotICAgIC8vIERPTSBtZXRob2RzIG92ZXJyaWRkZW4gZnJvbSAgcGFyZW50IGNsYXNz
ZXMKLSAgICB2aXJ0dWFsIERPTVN0cmluZyBuYW1lc3BhY2VVUkkoKSBjb25zdDsKLSAgICB2aXJ0
dWFsIERPTVN0cmluZyBsb2NhbE5hbWUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIE5vZGVJbXBsICpj
bG9uZU5vZGUgKCBib29sIGRlZXAgKTsKLQotICAgIC8vIE90aGVyIG1ldGhvZHMgKG5vdCBwYXJ0
IG9mIERPTSkKLSAgICB2aXJ0dWFsIGJvb2wgaXNYTUxFbGVtZW50Tm9kZSgpIGNvbnN0IHsgcmV0
dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3QgeyByZXR1cm4gbV9pZDsgfQot
Ci1wcm90ZWN0ZWQ6Ci0gICAgSWQgbV9pZDsKKyAgICBRdWFsaWZpZWROYW1lIG1fdGFnTmFtZTsK
IH07CiAKIC8vIHRoZSBtYXAgb2YgYXR0cmlidXRlcyBvZiBhbiBlbGVtZW50CkBAIC00MTQsNyAr
NDAxLDcgQEAgcHJpdmF0ZToKIGNsYXNzIFN0eWxlZEVsZW1lbnRJbXBsIDogcHVibGljIEVsZW1l
bnRJbXBsCiB7CiBwdWJsaWM6Ci0gICAgU3R5bGVkRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRv
Yyk7CisgICAgU3R5bGVkRWxlbWVudEltcGwoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwg
RG9jdW1lbnRQdHIgKmRvYyk7CiAgICAgdmlydHVhbCB+U3R5bGVkRWxlbWVudEltcGwoKTsKIAog
ICAgIHZpcnR1YWwgYm9vbCBpc1N0eWxlZEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9
CkluZGV4OiBraHRtbC94bWwvZG9tX25vZGVpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC94bWwvZG9tX25vZGVpbXBsLmNwcCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS4xNTYKZGlmZiAtdSAtcCAtcjEuMTU2IGtodG1sL3htbC9kb21fbm9kZWltcGwu
Y3BwCi0tLSBraHRtbC94bWwvZG9tX25vZGVpbXBsLmNwcAkyMyBKdW4gMjAwNSAxOTo0Nzo1MCAt
MDAwMAkxLjE1NgorKysga2h0bWwveG1sL2RvbV9ub2RlaW1wbC5jcHAJOCBKdWwgMjAwNSAwNTo1
Nzo1NyAtMDAwMApAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgImRvbS9kb21fZXhjZXB0aW9u
LmgiCiAjaW5jbHVkZSAiZG9tL2RvbTJfZXZlbnRzLmgiCiAjaW5jbHVkZSAibWlzYy9odG1sYXR0
cnMuaCIKLSNpbmNsdWRlICJtaXNjL2h0bWx0YWdzLmgiCiAjaW5jbHVkZSAieG1sL2RvbV9lbGVt
ZW50aW1wbC5oIgogI2luY2x1ZGUgInhtbC9kb21fdGV4dGltcGwuaCIKICNpbmNsdWRlICJ4bWwv
ZG9tMl9ldmVudHNpbXBsLmgiCkBAIC01MCw3ICs0OSw4IEBACiAjaW5jbHVkZSAia2h0bWx2aWV3
LmgiCiAjaW5jbHVkZSAia2h0bWxfcGFydC5oIgogCi0jaW5jbHVkZSAiaHRtbC9kdGQuaCIKKy8v
IEZJWE1FOiBTaG91bGQgbm90IGhhdmUgdG8gaW5jbHVkZSB0aGlzLiAgQ3V0IHRoZSBIVE1MIGRl
cGVuZGVuY3khCisjaW5jbHVkZSAiaHRtbG5hbWVzLmgiCiAKICNpZm5kZWYgS0hUTUxfTk9fWEJM
CiAjaW5jbHVkZSAieGJsL3hibF9iaW5kaW5nX21hbmFnZXIuaCIKQEAgLTY0LDkgKzY0LDMwIEBA
CiAjZGVmaW5lIExPRyhjaGFubmVsLCBmb3JtYXRBbmRBcmdzLi4uKSAoKHZvaWQpMCkKICNlbmRp
ZgogCi11c2luZyBuYW1lc3BhY2UgRE9NOwogdXNpbmcgbmFtZXNwYWNlIGtodG1sOwogCituYW1l
c3BhY2UgRE9NIHsKKy8qKgorICogTm9kZUxpc3Qgd2hpY2ggbGlzdHMgYWxsIE5vZGVzIGluIGEg
ZG9jdW1lbnQgd2l0aCBhIGdpdmVuIHRhZyBuYW1lCisgKi8KK2NsYXNzIFRhZ05vZGVMaXN0SW1w
bCA6IHB1YmxpYyBOb2RlTGlzdEltcGwKK3sKK3B1YmxpYzoKKyAgICBUYWdOb2RlTGlzdEltcGwo
Tm9kZUltcGwgKm4sIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBBdG9t
aWNTdHJpbmcmIGxvY2FsTmFtZSk7CisKKyAgICAvLyBET00gbWV0aG9kcyBvdmVycmlkZGVuIGZy
b20gIHBhcmVudCBjbGFzc2VzCisgICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGxlbmd0aCgpIGNv
bnN0OworICAgIHZpcnR1YWwgTm9kZUltcGwgKml0ZW0gKHVuc2lnbmVkIGxvbmcgaW5kZXgpIGNv
bnN0OworCisgICAgLy8gT3RoZXIgbWV0aG9kcyAobm90IHBhcnQgb2YgRE9NKQorCitwcm90ZWN0
ZWQ6CisgICAgdmlydHVhbCBib29sIG5vZGVNYXRjaGVzKE5vZGVJbXBsICp0ZXN0Tm9kZSkgY29u
c3Q7CisKKyAgICBBdG9taWNTdHJpbmcgbV9uYW1lc3BhY2VVUkk7CisgICAgQXRvbWljU3RyaW5n
IG1fbG9jYWxOYW1lOworfTsKKwogTm9kZUltcGw6Ok5vZGVJbXBsKERvY3VtZW50UHRyICpkb2Mp
CiAgICAgOiBkb2N1bWVudChkb2MpLAogICAgICAgbV9wcmV2aW91cygwKSwKQEAgLTE1NCw3ICsx
NzUsNyBAQCBOb2RlSW1wbCAqTm9kZUltcGw6Omxhc3RDaGlsZCgpIGNvbnN0CiAgIHJldHVybiAw
OwogfQogCi1Ob2RlSW1wbCAqTm9kZUltcGw6Omxhc3REZXNjZW5kZW50KCkgY29uc3QKK05vZGVJ
bXBsICpOb2RlSW1wbDo6bGFzdERlc2NlbmRhbnQoKSBjb25zdAogewogICAgIE5vZGVJbXBsICpu
ID0gY29uc3RfY2FzdDxOb2RlSW1wbCAqPih0aGlzKTsKICAgICB3aGlsZSAobiAmJiBuLT5sYXN0
Q2hpbGQoKSkKQEAgLTIzOSwxMyArMjYwLDEzIEBAIHZvaWQgTm9kZUltcGw6Om5vcm1hbGl6ZSAo
KQogICAgIH0KIH0KIAotRE9NU3RyaW5nIE5vZGVJbXBsOjpwcmVmaXgoKSBjb25zdAorY29uc3Qg
QXRvbWljU3RyaW5nJiBOb2RlSW1wbDo6cHJlZml4KCkgY29uc3QKIHsKICAgICAvLyBGb3Igbm9k
ZXMgb3RoZXIgdGhhbiBlbGVtZW50cyBhbmQgYXR0cmlidXRlcywgdGhlIHByZWZpeCBpcyBhbHdh
eXMgbnVsbAotICAgIHJldHVybiBET01TdHJpbmcoKTsKKyAgICByZXR1cm4gbnVsbEF0b207CiB9
CiAKLXZvaWQgTm9kZUltcGw6OnNldFByZWZpeChjb25zdCBET01TdHJpbmcgJi8qX3ByZWZpeCov
LCBpbnQgJmV4Y2VwdGlvbmNvZGUgKQordm9pZCBOb2RlSW1wbDo6c2V0UHJlZml4KGNvbnN0IEF0
b21pY1N0cmluZyAmLypfcHJlZml4Ki8sIGludCAmZXhjZXB0aW9uY29kZSApCiB7CiAgICAgLy8g
VGhlIHNwZWMgc2F5cyB0aGF0IGZvciBub2RlcyBvdGhlciB0aGFuIGVsZW1lbnRzIGFuZCBhdHRy
aWJ1dGVzLCBwcmVmaXggaXMgYWx3YXlzIG51bGwuCiAgICAgLy8gSXQgZG9lcyBub3Qgc2F5IHdo
YXQgdG8gZG8gd2hlbiB0aGUgdXNlciB0cmllcyB0byBzZXQgdGhlIHByZWZpeCBvbiBhbm90aGVy
IHR5cGUgb2YKQEAgLTI1MywxNCArMjc0LDE0IEBAIHZvaWQgTm9kZUltcGw6OnNldFByZWZpeChj
b25zdCBET01TdHJpbmcKICAgICBleGNlcHRpb25jb2RlID0gRE9NRXhjZXB0aW9uOjpOQU1FU1BB
Q0VfRVJSOwogfQogCi1ET01TdHJpbmcgTm9kZUltcGw6OmxvY2FsTmFtZSgpIGNvbnN0Citjb25z
dCBBdG9taWNTdHJpbmcmIE5vZGVJbXBsOjpsb2NhbE5hbWUoKSBjb25zdAogewotICAgIHJldHVy
biBET01TdHJpbmcoKTsKKyAgICByZXR1cm4gZW1wdHlBdG9tOwogfQogCi1ET01TdHJpbmcgTm9k
ZUltcGw6Om5hbWVzcGFjZVVSSSgpIGNvbnN0Citjb25zdCBBdG9taWNTdHJpbmcmIE5vZGVJbXBs
OjpuYW1lc3BhY2VVUkkoKSBjb25zdAogewotICAgIHJldHVybiBET01TdHJpbmcoKTsKKyAgICBy
ZXR1cm4gZW1wdHlBdG9tOwogfQogCiB2b2lkIE5vZGVJbXBsOjpzZXRGaXJzdENoaWxkKE5vZGVJ
bXBsICopCkBAIC0zMDYsMTIgKzMyNyw2IEBAIHZvaWQgTm9kZUltcGw6OnNldENoYW5nZWQoYm9v
bCBiKQogICAgIH0KIH0KIAotYm9vbCBOb2RlSW1wbDo6aXNJbmxpbmUoKSBjb25zdAotewotICAg
IGlmIChtX3JlbmRlcikgcmV0dXJuIG1fcmVuZGVyLT5zdHlsZSgpLT5kaXNwbGF5KCkgPT0ga2h0
bWw6OklOTElORTsKLSAgICByZXR1cm4gIWlzRWxlbWVudE5vZGUoKTsKLX0KLQogYm9vbCBOb2Rl
SW1wbDo6aXNGb2N1c2FibGUoKSBjb25zdAogewogICAgIHJldHVybiBmYWxzZTsKQEAgLTEwMDYs
NDMgKzEwMjEsMzQgQEAgTm9kZUltcGwgKk5vZGVJbXBsOjp0cmF2ZXJzZVByZXZpb3VzTm9kZQog
ICAgIHJldHVybiAwOwogfQogCi12b2lkIE5vZGVJbXBsOjpjaGVja1NldFByZWZpeChjb25zdCBE
T01TdHJpbmcgJl9wcmVmaXgsIGludCAmZXhjZXB0aW9uY29kZSkKK3ZvaWQgTm9kZUltcGw6OmNo
ZWNrU2V0UHJlZml4KGNvbnN0IEF0b21pY1N0cmluZyAmX3ByZWZpeCwgaW50ICZleGNlcHRpb25j
b2RlKQogewogICAgIC8vIFBlcmZvcm0gZXJyb3IgY2hlY2tpbmcgYXMgcmVxdWlyZWQgYnkgc3Bl
YyBmb3Igc2V0dGluZyBOb2RlLnByZWZpeC4gVXNlZCBieQogICAgIC8vIEVsZW1lbnRJbXBsOjpz
ZXRQcmVmaXgoKSBhbmQgQXR0ckltcGw6OnNldFByZWZpeCgpCiAKLSNpZiAwCi0gICAgLy8gRklY
TUU6IEFkZCB0aGlzIGNoZWNrIChidXQgbm90IGluIGEgd2F5IHRoYXQgZGVwZW5kcyBvbiB0aGUg
QysrIERPTSEpCi0gICAgLy8gSU5WQUxJRF9DSEFSQUNURVJfRVJSOiBSYWlzZWQgaWYgdGhlIHNw
ZWNpZmllZCBwcmVmaXggY29udGFpbnMgYW4gaWxsZWdhbCBjaGFyYWN0ZXIuCi0gICAgaWYgKCFF
bGVtZW50OjpraHRtbFZhbGlkUHJlZml4KF9wcmVmaXgpKSB7Ci0gICAgICAgIGV4Y2VwdGlvbmNv
ZGUgPSBET01FeGNlcHRpb246OklOVkFMSURfQ0hBUkFDVEVSX0VSUjsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSNlbmRpZgotCisgICAgLy8gRklYTUU6IEltcGxlbWVudCBzdXBwb3J0IGZvciBJ
TlZBTElEX0NIQVJBQ1RFUl9FUlI6IFJhaXNlZCBpZiB0aGUgc3BlY2lmaWVkIHByZWZpeCBjb250
YWlucyBhbiBpbGxlZ2FsIGNoYXJhY3Rlci4KKyAgICAKICAgICAvLyBOT19NT0RJRklDQVRJT05f
QUxMT1dFRF9FUlI6IFJhaXNlZCBpZiB0aGlzIG5vZGUgaXMgcmVhZG9ubHkuCiAgICAgaWYgKGlz
UmVhZE9ubHkoKSkgewogICAgICAgICBleGNlcHRpb25jb2RlID0gRE9NRXhjZXB0aW9uOjpOT19N
T0RJRklDQVRJT05fQUxMT1dFRF9FUlI7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICAv
LyBOQU1FU1BBQ0VfRVJSOiAtIFJhaXNlZCBpZiB0aGUgc3BlY2lmaWVkIHByZWZpeCBpcyBtYWxm
b3JtZWQKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IE5BTUVTUEFDRV9FUlI6IC0gUmFpc2VkIGlm
IHRoZSBzcGVjaWZpZWQgcHJlZml4IGlzIG1hbGZvcm1lZAorICAgIC8vIFdlIGhhdmUgdG8gY29t
bWVudCB0aGlzIG91dCwgc2luY2UgaXQncyB1c2VkIGZvciBhdHRyaWJ1dGVzIGFuZCB0YWcgbmFt
ZXMsIGFuZCB3ZSd2ZSBvbmx5CisgICAgLy8gc3dpdGNoZWQgb25lIG92ZXIuCisgICAgLyoKICAg
ICAvLyAtIGlmIHRoZSBuYW1lc3BhY2VVUkkgb2YgdGhpcyBub2RlIGlzIG51bGwsCiAgICAgLy8g
LSBpZiB0aGUgc3BlY2lmaWVkIHByZWZpeCBpcyAieG1sIiBhbmQgdGhlIG5hbWVzcGFjZVVSSSBv
ZiB0aGlzIG5vZGUgaXMgZGlmZmVyZW50IGZyb20KICAgICAvLyAgICJodHRwOi8vd3d3LnczLm9y
Zy9YTUwvMTk5OC9uYW1lc3BhY2UiLAogICAgIC8vIC0gaWYgdGhpcyBub2RlIGlzIGFuIGF0dHJp
YnV0ZSBhbmQgdGhlIHNwZWNpZmllZCBwcmVmaXggaXMgInhtbG5zIiBhbmQKICAgICAvLyAgIHRo
ZSBuYW1lc3BhY2VVUkkgb2YgdGhpcyBub2RlIGlzIGRpZmZlcmVudCBmcm9tICJodHRwOi8vd3d3
LnczLm9yZy8yMDAwL3htbG5zLyIsCiAgICAgLy8gLSBvciBpZiB0aGlzIG5vZGUgaXMgYW4gYXR0
cmlidXRlIGFuZCB0aGUgcXVhbGlmaWVkTmFtZSBvZiB0aGlzIG5vZGUgaXMgInhtbG5zIiBbTmFt
ZXNwYWNlc10uCi0gICAgaWYgKAotI2lmIDAKLSAgICAgICAgLy8gRklYTUU6IEFkZCB0aGlzIGNo
ZWNrIChidXQgbm90IGluIGEgd2F5IHRoYXQgZGVwZW5kcyBvbiB0aGUgQysrIERPTSEpCi0gICAg
ICAgIEVsZW1lbnQ6OmtodG1sTWFsZm9ybWVkUHJlZml4KF9wcmVmaXgpIHx8Ci0jZW5kaWYKLSAg
ICAgICAgKG5hbWVzcGFjZVBhcnQoaWQoKSkgPT0gbm9OYW1lc3BhY2UgJiYgaWQoKSA+IElEX0xB
U1RfVEFHKSB8fAorICAgIGlmICgobmFtZXNwYWNlUGFydChpZCgpKSA9PSBub05hbWVzcGFjZSAm
JiBpZCgpID4gSURfTEFTVF9UQUcpIHx8CiAgICAgICAgIChfcHJlZml4ID09ICJ4bWwiICYmIERP
TVN0cmluZyhnZXREb2N1bWVudCgpLT5uYW1lc3BhY2VVUkkoaWQoKSkpICE9ICJodHRwOi8vd3d3
LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiKSkgewogICAgICAgICBleGNlcHRpb25jb2RlID0g
RE9NRXhjZXB0aW9uOjpOQU1FU1BBQ0VfRVJSOwogICAgICAgICByZXR1cm47Ci0gICAgfQorICAg
IH0qLwogfQogCiB2b2lkIE5vZGVJbXBsOjpjaGVja0FkZENoaWxkKE5vZGVJbXBsICpuZXdDaGls
ZCwgaW50ICZleGNlcHRpb25jb2RlKQpAQCAtMTI4Myw5ICsxMjg5LDEwIEBAIFJlbmRlck9iamVj
dCAqIE5vZGVJbXBsOjpuZXh0UmVuZGVyZXIoKQogICAgIHJldHVybiAwOwogfQogCisvLyBGSVhN
RTogVGhpcyBjb2RlIGlzIHVzZWQgYnkgZWRpdGluZy4gIFNlZW1zIGxpa2UgaXQgY291bGQgbW92
ZSBvdmVyIHRoZXJlIGFuZCBub3QgcG9sbHV0ZSBOb2RlSW1wbC4KIGJvb2wgTm9kZUltcGw6Omlz
QXRvbWljTm9kZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuICFoYXNDaGlsZE5vZGVzKCkgfHwgKGlk
KCkgPT0gSURfT0JKRUNUICYmIHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+aXNSZXBsYWNlZCgp
KTsKKyAgICByZXR1cm4gIWhhc0NoaWxkTm9kZXMoKSB8fCAocmVuZGVyZXIoKSAmJiByZW5kZXJl
cigpLT5pc1dpZGdldCgpKTsKIH0KIAogTm9kZUltcGwgKk5vZGVJbXBsOjpwcmV2aW91c05vZGVD
b25zaWRlcmluZ0F0b21pY05vZGVzKCkgY29uc3QKQEAgLTE0MDIsMTMgKzE0MDksMTUgQEAgbG9u
ZyBOb2RlSW1wbDo6bWF4T2Zmc2V0KCkgY29uc3QKICAgICByZXR1cm4gMTsKIH0KIAorLy8gRklY
TUU6IFNob3VsZG4ndCB0aGVzZSBmdW5jdGlvbnMgYmUgaW4gdGhlIGVkaXRpbmcgY29kZT8gIENv
ZGUgdGhhdCBhc2tzIHF1ZXN0aW9ucyBhYm91dCBIVE1MIGluIHRoZSBjb3JlIERPTSBjbGFzcwor
Ly8gaXMgb2J2aW91c2x5IG1pc3BsYWNlZC4KIC8vIG1ldGhvZCBmb3IgZWRpdGluZyBtYWRuZXNz
LCB3aGljaCBhbGxvd3MgQlIsMSBhcyBhIHBvc2l0aW9uLCB0aG91Z2ggdGhhdCBpcyBpbmNvcnJl
Y3QKIGxvbmcgTm9kZUltcGw6Om1heERlZXBPZmZzZXQoKSBjb25zdAogewogICAgIGlmIChvZmZz
ZXRJbkNoYXJhY3RlcnMobm9kZVR5cGUoKSkpCiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxj
b25zdCBUZXh0SW1wbCo+KHRoaXMpLT5sZW5ndGgoKTsKICAgICAgICAgCi0gICAgaWYgKGlkKCkg
PT0gSURfQlIgfHwgKHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+aXNSZXBsYWNlZCgpKSkKKyAg
ICBpZiAoaGFzVGFnTmFtZShIVE1MTmFtZXM6OmJyKCkpIHx8IChyZW5kZXJlcigpICYmIHJlbmRl
cmVyKCktPmlzUmVwbGFjZWQoKSkpCiAgICAgICAgIHJldHVybiAxOwogCiAgICAgcmV0dXJuIGNo
aWxkTm9kZUNvdW50KCk7CkBAIC0xNDY0LDcgKzE0NzMsNyBAQCBFbGVtZW50SW1wbCAqTm9kZUlt
cGw6OmVuY2xvc2luZ0Jsb2NrRmxvCiAgICAgICAgIG4gPSBuLT5wYXJlbnROb2RlKCk7CiAgICAg
ICAgIGlmICghbikKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBpZiAobi0+aXNCbG9ja0Zs
b3dPclRhYmxlKCkgfHwgbi0+aWQoKSA9PSBJRF9CT0RZKQorICAgICAgICBpZiAobi0+aXNCbG9j
a0Zsb3dPclRhYmxlKCkgfHwgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJvZHkoKSkpCiAgICAg
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RWxlbWVudEltcGwgKj4obik7CiAgICAgfQogICAg
IHJldHVybiAwOwpAQCAtMTQ4MCw3ICsxNDg5LDcgQEAgRWxlbWVudEltcGwgKk5vZGVJbXBsOjpl
bmNsb3NpbmdCbG9ja0ZsbwogICAgICAgICBuID0gbi0+cGFyZW50Tm9kZSgpOwogICAgICAgICBp
ZiAoIW4pCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgaWYgKG4tPmlzQmxvY2tGbG93KCkg
fHwgbi0+aWQoKSA9PSBJRF9CT0RZKQorICAgICAgICBpZiAobi0+aXNCbG9ja0Zsb3coKSB8fCBu
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Ym9keSgpKSkKICAgICAgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxFbGVtZW50SW1wbCAqPihuKTsKICAgICB9CiAgICAgcmV0dXJuIDA7CkBAIC0xNDkz
LDcgKzE1MDIsNyBAQCBFbGVtZW50SW1wbCAqTm9kZUltcGw6OmVuY2xvc2luZ0lubGluZUVsCiAK
ICAgICB3aGlsZSAoMSkgewogICAgICAgICBwID0gbi0+cGFyZW50Tm9kZSgpOwotICAgICAgICBp
ZiAoIXAgfHwgcC0+aXNCbG9ja0Zsb3coKSB8fCBwLT5pZCgpID09IElEX0JPRFkpCisgICAgICAg
IGlmICghcCB8fCBwLT5pc0Jsb2NrRmxvdygpIHx8IHAtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpi
b2R5KCkpKQogICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsICo+KG4p
OwogICAgICAgICAvLyBBbHNvIHN0b3AgaWYgYW55IHByZXZpb3VzIHNpYmxpbmcgaXMgYSBibG9j
awogICAgICAgICBmb3IgKE5vZGVJbXBsICpzaWJsaW5nID0gbi0+cHJldmlvdXNTaWJsaW5nKCk7
IHNpYmxpbmc7IHNpYmxpbmcgPSBzaWJsaW5nLT5wcmV2aW91c1NpYmxpbmcoKSkgewpAQCAtMTUx
Miw3ICsxNTIxLDcgQEAgRWxlbWVudEltcGwgKk5vZGVJbXBsOjpyb290RWRpdGFibGVFbGVtZQog
ICAgICAgICByZXR1cm4gMDsKIAogICAgIE5vZGVJbXBsICpuID0gY29uc3RfY2FzdDxOb2RlSW1w
bCAqPih0aGlzKTsKLSAgICBpZiAobi0+aWQoKSA9PSBJRF9CT0RZKQorICAgIGlmIChuLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6Ym9keSgpKSkKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEVs
ZW1lbnRJbXBsICo+KG4pOwogCiAgICAgTm9kZUltcGwgKnJlc3VsdCA9IG4tPmlzRWRpdGFibGVC
bG9jaygpID8gbiA6IDA7CkBAIC0xNTIwLDcgKzE1MjksNyBAQCBFbGVtZW50SW1wbCAqTm9kZUlt
cGw6OnJvb3RFZGl0YWJsZUVsZW1lCiAgICAgICAgIG4gPSBuLT5wYXJlbnROb2RlKCk7CiAgICAg
ICAgIGlmICghbiB8fCAhbi0+aXNDb250ZW50RWRpdGFibGUoKSkKICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBpZiAobi0+aWQoKSA9PSBJRF9CT0RZKSB7CisgICAgICAgIGlmIChuLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6Ym9keSgpKSkgewogICAgICAgICAgICAgcmVzdWx0ID0gbjsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0xNTQwLDYgKzE1NDksOCBAQCBib29sIE5v
ZGVJbXBsOjppblNhbWVDb250YWluaW5nQmxvY2tGbG93CiAgICAgcmV0dXJuIG4gPyBlbmNsb3Np
bmdCbG9ja0Zsb3dFbGVtZW50KCkgPT0gbi0+ZW5jbG9zaW5nQmxvY2tGbG93RWxlbWVudCgpIDog
ZmFsc2U7CiB9CiAKKy8vIEZJWE1FOiBFbmQgb2Ygb2J2aW91c2x5IG1pc3BsYWNlZCBIVE1MIGVk
aXRpbmcgZnVuY3Rpb25zLiAgVHJ5IHRvIG1vdmUgdGhlc2Ugb3V0IG9mIE5vZGVJbXBsLgorCiB2
b2lkIE5vZGVJbXBsOjphZGRFdmVudExpc3RlbmVyKGNvbnN0IERPTVN0cmluZyAmdHlwZSwgRXZl
bnRMaXN0ZW5lciAqbGlzdGVuZXIsIGJvb2wgdXNlQ2FwdHVyZSkKIHsKICAgICBhZGRFdmVudExp
c3RlbmVyKEV2ZW50SW1wbDo6dHlwZVRvSWQodHlwZSksIGxpc3RlbmVyLCB1c2VDYXB0dXJlKTsK
QEAgLTE1NTAsMjUgKzE1NjEsMTUgQEAgdm9pZCBOb2RlSW1wbDo6cmVtb3ZlRXZlbnRMaXN0ZW5l
cihjb25zdAogICAgIHJlbW92ZUV2ZW50TGlzdGVuZXIoRXZlbnRJbXBsOjp0eXBlVG9JZCh0eXBl
KSwgbGlzdGVuZXIsIHVzZUNhcHR1cmUpOwogfQogCi1TaGFyZWRQdHI8Tm9kZUxpc3RJbXBsPiBO
b2RlSW1wbDo6Z2V0RWxlbWVudHNCeVRhZ05hbWVOUyAoIGNvbnN0IERPTVN0cmluZyAmbmFtZXNw
YWNlVVJJLCBjb25zdCBET01TdHJpbmcgJmxvY2FsTmFtZSApCitTaGFyZWRQdHI8Tm9kZUxpc3RJ
bXBsPiBOb2RlSW1wbDo6Z2V0RWxlbWVudHNCeVRhZ05hbWVOUyhjb25zdCBET01TdHJpbmcgJm5h
bWVzcGFjZVVSSSwgY29uc3QgRE9NU3RyaW5nICZsb2NhbE5hbWUpCiB7Ci0gICAgaWYgKGxvY2Fs
TmFtZS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIFNoYXJlZFB0cjxOb2RlTGlzdEltcGw+KCk7
Ci0KLSAgICBJZCBpZE1hc2sgPSBuYW1lc3BhY2VNYXNrIHwgbG9jYWxOYW1lTWFzazsKLSAgICBp
ZiAobG9jYWxOYW1lWzBdID09ICcqJykKLSAgICAgICAgaWRNYXNrICY9IH5sb2NhbE5hbWVNYXNr
OwotICAgIGlmIChuYW1lc3BhY2VVUkkuaXNOdWxsKCkgfHwgbmFtZXNwYWNlVVJJWzBdID09ICcq
JykKLSAgICAgICAgaWRNYXNrICY9IH5uYW1lc3BhY2VNYXNrOwotCi0gICAgSWQgaWQgPSAwOyAv
LyAwIG1lYW5zICJhbGwgaXRlbXMiCi0gICAgaWYgKChpZE1hc2sgJiBsb2NhbE5hbWVNYXNrKSB8
fCAhbmFtZXNwYWNlVVJJLmlzTnVsbCgpKSB7IC8vIG5vdCBnZXRFbGVtZW50c0J5VGFnTmFtZSgi
KiIpCi0gICAgICAgIGlkID0gZ2V0RG9jdW1lbnQoKS0+dGFnSWQobmFtZXNwYWNlVVJJLmltcGxl
bWVudGF0aW9uKCksIGxvY2FsTmFtZS5pbXBsZW1lbnRhdGlvbigpLCB0cnVlKTsKLSAgICAgICAg
aWYgKCAhaWQgKSAvLyBub3QgZm91bmQgLT4gd2Ugd2FudCB0byByZXR1cm4gYW4gZW1wdHkgbGlz
dCwgbm90ICJhbGwgaXRlbXMiCi0gICAgICAgICAgICBpZCA9IChJZCktMTsgLy8gSEFDSy4gSEVB
RCBoYXMgYSBjbGVhbmVyIGltcGxlbWVudGF0aW9uIG9mIFRhZ05vZGVMaXN0SW1wbCBpdCBzZWVt
cy4KLSAgICB9Ci0KLSAgICByZXR1cm4gU2hhcmVkUHRyPE5vZGVMaXN0SW1wbD4obmV3IFRhZ05v
ZGVMaXN0SW1wbCh0aGlzLCBpZCwgaWRNYXNrKSk7CisgICAgaWYgKG5hbWVzcGFjZVVSSS5pc051
bGwoKSB8fCBsb2NhbE5hbWUuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBTaGFyZWRQdHI8Tm9k
ZUxpc3RJbXBsPigpOyAvLyBGSVhNRTogV2hvIGNhcmVzIGFib3V0IHRoaXMgYWRkaXRpb25hbCBj
aGVjaz8KKyAgICAKKyAgICBET01TdHJpbmcgbmFtZSA9IGxvY2FsTmFtZTsKKyAgICBpZiAoZ2V0
RG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSkKKyAgICAgICAgbmFtZSA9IGxvY2FsTmFtZS5s
b3dlcigpOworICAgIHJldHVybiBTaGFyZWRQdHI8Tm9kZUxpc3RJbXBsPihuZXcgVGFnTm9kZUxp
c3RJbXBsKHRoaXMsIEF0b21pY1N0cmluZyhuYW1lc3BhY2VVUkkpLCBBdG9taWNTdHJpbmcobmFt
ZSkpKTsKIH0KIAogYm9vbCBOb2RlSW1wbDo6aXNTdXBwb3J0ZWQoY29uc3QgRE9NU3RyaW5nICZm
ZWF0dXJlLCBjb25zdCBET01TdHJpbmcgJnZlcnNpb24pCkBAIC0xNTkyLDEzICsxNTkzLDYgQEAg
TmFtZWRBdHRyTWFwSW1wbCAqTm9kZUltcGw6OmF0dHJpYnV0ZXMoKQogICAgIHJldHVybiAwOwog
fQogCi0jaWYgQVBQTEVfQ0hBTkdFUwotTm9kZUltcGw6OklkIE5vZGVJbXBsOjppZGVudGlmaWVy
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gaWQoKTsKLX0KLSNlbmRpZgotCiAjaWZuZGVmIE5ERUJV
RwogCiBzdGF0aWMgdm9pZCBhcHBlbmRBdHRyaWJ1dGVEZXNjKGNvbnN0IE5vZGVJbXBsICpub2Rl
LCBRU3RyaW5nICZzdHJpbmcsIE5vZGVJbXBsOjpJZCBhdHRySUQsIFFTdHJpbmcgYXR0ckRlc2Mp
CkBAIC0xNjM4LDcgKzE2MzIsNyBAQCB2b2lkIE5vZGVJbXBsOjpzaG93VHJlZUFuZE1hcmsoTm9k
ZUltcGwgCiB7CiAgICAgTm9kZUltcGwgKnJvb3ROb2RlOwogICAgIE5vZGVJbXBsICpub2RlID0g
KE5vZGVJbXBsICopdGhpczsKLSAgICB3aGlsZShub2RlLT5wYXJlbnROb2RlKCkgIT0gTlVMTCAm
JiBub2RlLT5pZCgpICE9IElEX0JPRFkpCisgICAgd2hpbGUgKG5vZGUtPnBhcmVudE5vZGUoKSAm
JiAhbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJvZHkoKSkpCiAgICAgICAgIG5vZGUgPSBu
b2RlLT5wYXJlbnROb2RlKCk7CiAgICAgcm9vdE5vZGUgPSBub2RlOwogCQpAQCAtMjA5NCwxMSAr
MjA4OCw4IEBAIE5vZGVJbXBsICpDb250YWluZXJOb2RlSW1wbDo6YWRkQ2hpbGQoTm8KICAgICBT
aGFyZWRQdHI8Tm9kZUltcGw+IHByb3RlY3ROZXdDaGlsZChuZXdDaGlsZCk7IC8vIG1ha2Ugc3Vy
ZSB0aGUgbmV3IGNoaWxkIGlzIHJlZidkIGFuZCBkZXJlZidkIHNvIHdlIGRvbid0IGxlYWsgaXQK
IAogICAgIC8vIHNob3J0IGNoZWNrIGZvciBjb25zaXN0ZW5jeSB3aXRoIERURAotICAgIGlmKCFp
c1hNTEVsZW1lbnROb2RlKCkgJiYgIW5ld0NoaWxkLT5pc1hNTEVsZW1lbnROb2RlKCkgJiYgIWNo
aWxkQWxsb3dlZChuZXdDaGlsZCkpCi0gICAgewotICAgICAgICAvL2tkRGVidWcoIDYwMjAgKSA8
PCAiQWRkQ2hpbGQgZmFpbGVkISBpZD0iIDw8IGlkKCkgPDwgIiwgY2hpbGQtPmlkPSIgPDwgbmV3
Q2hpbGQtPmlkKCkgPDwgZW5kbDsKKyAgICBpZiAoZ2V0RG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1l
bnQoKSAmJiAhY2hpbGRBbGxvd2VkKG5ld0NoaWxkKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
fQogCiAgICAgLy8ganVzdCBhZGQgaXQuLi4KICAgICBuZXdDaGlsZC0+c2V0UGFyZW50KHRoaXMp
OwpAQCAtMjUzNiwxMCArMjUyNywxMCBAQCBib29sIENoaWxkTm9kZUxpc3RJbXBsOjpub2RlTWF0
Y2hlcyhOb2RlCiAgICAgcmV0dXJuIHRlc3ROb2RlLT5wYXJlbnROb2RlKCkgPT0gcm9vdE5vZGU7
CiB9CiAKLVRhZ05vZGVMaXN0SW1wbDo6VGFnTm9kZUxpc3RJbXBsKE5vZGVJbXBsICpuLCBOb2Rl
SW1wbDo6SWQgX2lkLCBOb2RlSW1wbDo6SWQgX2lkTWFzayApCitUYWdOb2RlTGlzdEltcGw6OlRh
Z05vZGVMaXN0SW1wbChOb2RlSW1wbCAqbiwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VV
UkksIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lKQogICAgIDogTm9kZUxpc3RJbXBsKG4p
LCAKLSAgICAgIG1faWQoX2lkICYgX2lkTWFzayksIAotICAgICAgbV9pZE1hc2soX2lkTWFzaykK
KyAgICAgIG1fbmFtZXNwYWNlVVJJKG5hbWVzcGFjZVVSSSksIAorICAgICAgbV9sb2NhbE5hbWUo
bG9jYWxOYW1lKQogewogfQogCkBAIC0yNTQ4LDE1ICsyNTM5LDIwIEBAIHVuc2lnbmVkIGxvbmcg
VGFnTm9kZUxpc3RJbXBsOjpsZW5ndGgoKSAKICAgICByZXR1cm4gcmVjdXJzaXZlTGVuZ3RoKCk7
CiB9CiAKLU5vZGVJbXBsICpUYWdOb2RlTGlzdEltcGw6Oml0ZW0gKCB1bnNpZ25lZCBsb25nIGlu
ZGV4ICkgY29uc3QKK05vZGVJbXBsICpUYWdOb2RlTGlzdEltcGw6Oml0ZW0odW5zaWduZWQgbG9u
ZyBpbmRleCkgY29uc3QKIHsKLSAgICByZXR1cm4gcmVjdXJzaXZlSXRlbSggaW5kZXggKTsKKyAg
ICByZXR1cm4gcmVjdXJzaXZlSXRlbShpbmRleCk7CiB9CiAKLWJvb2wgVGFnTm9kZUxpc3RJbXBs
Ojpub2RlTWF0Y2hlcyggTm9kZUltcGwgKnRlc3ROb2RlICkgY29uc3QKK2Jvb2wgVGFnTm9kZUxp
c3RJbXBsOjpub2RlTWF0Y2hlcyhOb2RlSW1wbCAqdGVzdE5vZGUpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuICggdGVzdE5vZGUtPmlzRWxlbWVudE5vZGUoKSAmJgotICAgICAgICAgICAgICh0ZXN0Tm9k
ZS0+aWQoKSAmIG1faWRNYXNrKSA9PSBtX2lkKTsKKyAgICBpZiAoIXRlc3ROb2RlLT5pc0VsZW1l
bnROb2RlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChtX25hbWVzcGFjZVVS
SSAhPSBzdGFyQXRvbSAmJiBtX25hbWVzcGFjZVVSSSAhPSB0ZXN0Tm9kZS0+bmFtZXNwYWNlVVJJ
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gbV9sb2NhbE5hbWUg
PT0gc3RhckF0b20gfHwgbV9sb2NhbE5hbWUgPT0gdGVzdE5vZGUtPmxvY2FsTmFtZSgpOwogfQog
CiBOYW1lTm9kZUxpc3RJbXBsOjpOYW1lTm9kZUxpc3RJbXBsKE5vZGVJbXBsICpuLCBjb25zdCBE
T01TdHJpbmcgJnQgKQpAQCAtMjU5NSwxMDYgKzI1OTEsNCBAQCBTaGFyZWRQdHI8Tm9kZUltcGw+
IE5hbWVkTm9kZU1hcEltcGw6OnJlCiAgICAgcmV0dXJuIHJlbW92ZU5hbWVkSXRlbShtYXBJZChu
YW1lc3BhY2VVUkksIGxvY2FsTmFtZSwgdHJ1ZSksIGV4Y2VwdGlvbik7CiB9CiAKLS8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KLQotLy8gIyMjIHVudXNlZAotI2lmIDAKLUdlbmVyaWNST05hbWVkTm9k
ZU1hcEltcGw6OkdlbmVyaWNST05hbWVkTm9kZU1hcEltcGwoRG9jdW1lbnRQdHIqIGRvYykKLSAg
ICA6IE5hbWVkTm9kZU1hcEltcGwoKQotewotICAgIG1fZG9jID0gZG9jLT5kb2N1bWVudCgpOwot
ICAgIG1fY29udGVudHMgPSBuZXcgUVB0ckxpc3Q8Tm9kZUltcGw+OwotfQotCi1HZW5lcmljUk9O
YW1lZE5vZGVNYXBJbXBsOjp+R2VuZXJpY1JPTmFtZWROb2RlTWFwSW1wbCgpCi17Ci0gICAgd2hp
bGUgKG1fY29udGVudHMtPmNvdW50KCkgPiAwKQotICAgICAgICBtX2NvbnRlbnRzLT50YWtlKDAp
LT5kZXJlZigpOwotCi0gICAgZGVsZXRlIG1fY29udGVudHM7Ci19Ci0KLU5vZGVJbXBsICpHZW5l
cmljUk9OYW1lZE5vZGVNYXBJbXBsOjpnZXROYW1lZEl0ZW0gKCBjb25zdCBET01TdHJpbmcgJm5h
bWUsIGludCAmLypleGNlcHRpb25jb2RlKi8gKSBjb25zdAotewotICAgIFFQdHJMaXN0SXRlcmF0
b3I8Tm9kZUltcGw+IGl0KCptX2NvbnRlbnRzKTsKLSAgICBmb3IgKDsgaXQuY3VycmVudCgpOyAr
K2l0KQotICAgICAgICBpZiAoaXQuY3VycmVudCgpLT5ub2RlTmFtZSgpID09IG5hbWUpCi0gICAg
ICAgICAgICByZXR1cm4gaXQuY3VycmVudCgpOwotICAgIHJldHVybiAwOwogfQotCi1Ob2RlIEdl
bmVyaWNST05hbWVkTm9kZU1hcEltcGw6OnNldE5hbWVkSXRlbSAoIGNvbnN0IE5vZGUgJi8qYXJn
Ki8sIGludCAmZXhjZXB0aW9uY29kZSApCi17Ci0gICAgLy8gY2FuJ3QgbW9kaWZ5IHRoaXMgbGlz
dCB0aHJvdWdoIHN0YW5kYXJkIERPTSBmdW5jdGlvbnMKLSAgICAvLyBOT19NT0RJRklDQVRJT05f
QUxMT1dFRF9FUlI6IFJhaXNlZCBpZiB0aGlzIG1hcCBpcyByZWFkb25seQotICAgIGV4Y2VwdGlv
bmNvZGUgPSBET01FeGNlcHRpb246Ok5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUjsKLSAgICBy
ZXR1cm4gMDsKLX0KLQotTm9kZSBHZW5lcmljUk9OYW1lZE5vZGVNYXBJbXBsOjpyZW1vdmVOYW1l
ZEl0ZW0gKCBjb25zdCBET01TdHJpbmcgJi8qbmFtZSovLCBpbnQgJmV4Y2VwdGlvbmNvZGUgKQot
ewotICAgIC8vIGNhbid0IG1vZGlmeSB0aGlzIGxpc3QgdGhyb3VnaCBzdGFuZGFyZCBET00gZnVu
Y3Rpb25zCi0gICAgLy8gTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOiBSYWlzZWQgaWYgdGhp
cyBtYXAgaXMgcmVhZG9ubHkKLSAgICBleGNlcHRpb25jb2RlID0gRE9NRXhjZXB0aW9uOjpOT19N
T0RJRklDQVRJT05fQUxMT1dFRF9FUlI7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLU5vZGVJbXBsICpH
ZW5lcmljUk9OYW1lZE5vZGVNYXBJbXBsOjppdGVtICggdW5zaWduZWQgbG9uZyBpbmRleCApIGNv
bnN0Ci17Ci0gICAgLy8gIyMjIGNoZWNrIHRoaXMgd2hlbiBjYWxsaW5nIGZyb20gamF2YXNjcmlw
dCB1c2luZyAtMSA9IDJec2l6ZW9mKGludCktMQotICAgIC8vIChhbHNvIGZvciBvdGhlciBzaW1p
bGFyIG1ldGhvZHMpCi0gICAgaWYgKGluZGV4ID49IG1fY29udGVudHMtPmNvdW50KCkpCi0gICAg
ICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIG1fY29udGVudHMtPmF0KGluZGV4KTsKLX0KLQot
dW5zaWduZWQgbG9uZyBHZW5lcmljUk9OYW1lZE5vZGVNYXBJbXBsOjpsZW5ndGgoICApIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1fY29udGVudHMtPmNvdW50KCk7Ci19Ci0KLU5vZGVJbXBsICpHZW5l
cmljUk9OYW1lZE5vZGVNYXBJbXBsOjpnZXROYW1lZEl0ZW1OUyggY29uc3QgRE9NU3RyaW5nICZu
YW1lc3BhY2VVUkksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IERPTVN0cmluZyAmbG9jYWxOYW1lLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgJi8qZXhjZXB0aW9uY29kZSov
ICkgY29uc3QKLXsKLSAgICBOb2RlSW1wbDo6SWQgc2VhcmNoSWQgPSBtX2RvYy0+dGFnSWQobmFt
ZXNwYWNlVVJJLmltcGxlbWVudGF0aW9uKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsb2NhbE5hbWUuaW1wbGVtZW50YXRpb24oKSwgdHJ1ZSk7
Ci0KLSAgICBRUHRyTGlzdEl0ZXJhdG9yPE5vZGVJbXBsPiBpdCgqbV9jb250ZW50cyk7Ci0gICAg
Zm9yICg7IGl0LmN1cnJlbnQoKTsgKytpdCkKLSAgICAgICAgaWYgKGl0LmN1cnJlbnQoKS0+aWQo
KSA9PSBzZWFyY2hJZCkKLSAgICAgICAgICAgIHJldHVybiBpdC5jdXJyZW50KCk7Ci0KLSAgICBy
ZXR1cm4gMDsKLX0KLQotTm9kZUltcGwgKkdlbmVyaWNST05hbWVkTm9kZU1hcEltcGw6OnNldE5h
bWVkSXRlbU5TKCBOb2RlSW1wbCAqLyphcmcqLywgaW50ICZleGNlcHRpb25jb2RlICkKLXsKLSAg
ICAvLyBjYW4ndCBtb2RpZnkgdGhpcyBsaXN0IHRocm91Z2ggc3RhbmRhcmQgRE9NIGZ1bmN0aW9u
cwotICAgIC8vIE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUjogUmFpc2VkIGlmIHRoaXMgbWFw
IGlzIHJlYWRvbmx5Ci0gICAgZXhjZXB0aW9uY29kZSA9IERPTUV4Y2VwdGlvbjo6Tk9fTU9ESUZJ
Q0FUSU9OX0FMTE9XRURfRVJSOwotICAgIHJldHVybiAwOwotfQotCi1Ob2RlSW1wbCAqR2VuZXJp
Y1JPTmFtZWROb2RlTWFwSW1wbDo6cmVtb3ZlTmFtZWRJdGVtTlMoIGNvbnN0IERPTVN0cmluZyAm
LypuYW1lc3BhY2VVUkkqLywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgRE9NU3RyaW5nICYvKmxvY2FsTmFtZSovLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgJmV4
Y2VwdGlvbmNvZGUgKQotewotICAgIC8vIGNhbid0IG1vZGlmeSB0aGlzIGxpc3QgdGhyb3VnaCBz
dGFuZGFyZCBET00gZnVuY3Rpb25zCi0gICAgZXhjZXB0aW9uY29kZSA9IERPTUV4Y2VwdGlvbjo6
Tk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOwotICAgIHJldHVybiAwOwotfQotCi12b2lkIEdl
bmVyaWNST05hbWVkTm9kZU1hcEltcGw6OmFkZE5vZGUoTm9kZUltcGwgKm4pCi17Ci0gICAgLy8g
VGhlIHNwZWMgc2F5cyB0aGF0IGluIHRoZSBjYXNlIG9mIGR1cGxpY2F0ZXMgd2Ugb25seSBrZWVw
IHRoZSBmaXJzdCBvbmUKLSAgICBpbnQgZXhjZXB0aW9uY29kZSA9IDA7Ci0gICAgaWYgKGdldE5h
bWVkSXRlbShuLT5ub2RlTmFtZSgpLGV4Y2VwdGlvbmNvZGUpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBuLT5yZWYoKTsKLSAgICBtX2NvbnRlbnRzLT5hcHBlbmQobik7Ci19Ci0KLSNlbmRpZgpJ
bmRleDoga2h0bWwveG1sL2RvbV9ub2RlaW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9XZWJDb3JlL2todG1sL3htbC9kb21fbm9kZWltcGwuaCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS44NwpkaWZmIC11IC1wIC1yMS44NyBraHRtbC94bWwvZG9tX25vZGVpbXBsLmgKLS0tIGto
dG1sL3htbC9kb21fbm9kZWltcGwuaAkyMyBKdW4gMjAwNSAxOTo0Nzo1MCAtMDAwMAkxLjg3Cisr
KyBraHRtbC94bWwvZG9tX25vZGVpbXBsLmgJOCBKdWwgMjAwNSAwNTo1Nzo1OCAtMDAwMApAQCAt
NTksNiArNTksNyBAQCBjbGFzcyBFdmVudEltcGw7CiBjbGFzcyBFdmVudExpc3RlbmVyOwogY2xh
c3MgTm9kZUxpc3RJbXBsOwogY2xhc3MgTmFtZWRBdHRyTWFwSW1wbDsKK2NsYXNzIFF1YWxpZmll
ZE5hbWU7CiBjbGFzcyBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcjsKIAogLy8gVGhlIG5hbWVzcGFj
ZSB1c2VkIGZvciBYSFRNTCBlbGVtZW50cwpAQCAtMTAyLDYgKzEwMyw3IEBAIHB1YmxpYzoKICAg
ICBNQUlOX1RIUkVBRF9BTExPQ0FURUQ7CiAKICAgICAvLyBET00gbWV0aG9kcyAmIGF0dHJpYnV0
ZXMgZm9yIE5vZGUKKyAgICB2aXJ0dWFsIGJvb2wgaGFzVGFnTmFtZShjb25zdCBRdWFsaWZpZWRO
YW1lJiB0YWdOYW1lKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgRE9NU3Ry
aW5nIG5vZGVOYW1lKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgRE9NU3RyaW5nIG5vZGVWYWx1
ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBzZXROb2RlVmFsdWUoIGNvbnN0IERPTVN0cmlu
ZyAmX25vZGVWYWx1ZSwgaW50ICZleGNlcHRpb25jb2RlICk7CkBAIC0xMjIsMTQgKzEyNCwxNCBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZShpbnQgJmV4Y2VwdGlvbmNvZGUpOwog
ICAgIHZpcnR1YWwgYm9vbCBoYXNDaGlsZE5vZGVzICggICkgY29uc3Q7CiAgICAgdmlydHVhbCBO
b2RlSW1wbCAqY2xvbmVOb2RlICggYm9vbCBkZWVwICkgPSAwOwotICAgIHZpcnR1YWwgRE9NU3Ry
aW5nIGxvY2FsTmFtZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgRE9NU3RyaW5nIG5hbWVzcGFjZVVS
SSgpIGNvbnN0OwotICAgIHZpcnR1YWwgRE9NU3RyaW5nIHByZWZpeCgpIGNvbnN0OwotICAgIHZp
cnR1YWwgdm9pZCBzZXRQcmVmaXgoY29uc3QgRE9NU3RyaW5nICZfcHJlZml4LCBpbnQgJmV4Y2Vw
dGlvbmNvZGUgKTsKKyAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lKCkg
Y29uc3Q7CisgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSgpIGNv
bnN0OworICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgoKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIHZvaWQgc2V0UHJlZml4KGNvbnN0IEF0b21pY1N0cmluZyAmX3ByZWZpeCwgaW50
ICZleGNlcHRpb25jb2RlKTsKICAgICB2b2lkIG5vcm1hbGl6ZSAoKTsKICAgICBzdGF0aWMgYm9v
bCBpc1N1cHBvcnRlZChjb25zdCBET01TdHJpbmcgJmZlYXR1cmUsIGNvbnN0IERPTVN0cmluZyAm
dmVyc2lvbik7CiAKLSAgICBOb2RlSW1wbCAqbGFzdERlc2NlbmRlbnQoKSBjb25zdDsKKyAgICBO
b2RlSW1wbCAqbGFzdERlc2NlbmRhbnQoKSBjb25zdDsKIAogICAgIC8vIE90aGVyIG1ldGhvZHMg
KG5vdCBwYXJ0IG9mIERPTSkKICAgICB2aXJ0dWFsIGJvb2wgaXNFbGVtZW50Tm9kZSgpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CkBAIC0xMzcsOCArMTM5LDggQEAgcHVibGljOgogICAgIHZpcnR1
YWwgYm9vbCBpc1N0eWxlZEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZp
cnR1YWwgYm9vbCBpc0F0dHJpYnV0ZU5vZGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAg
IHZpcnR1YWwgYm9vbCBpc1RleHROb2RlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2
aXJ0dWFsIGJvb2wgaXNDb21tZW50Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAg
dmlydHVhbCBib29sIGlzRG9jdW1lbnROb2RlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAg
ICB2aXJ0dWFsIGJvb2wgaXNYTUxFbGVtZW50Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
CiAgICAgYm9vbCBpc0Jsb2NrRmxvdygpIGNvbnN0OwogICAgIGJvb2wgaXNCbG9ja0Zsb3dPclRh
YmxlKCkgY29uc3Q7CiAgICAgCkBAIC0xODgsMzUgKzE5MCwxOCBAQCBwdWJsaWM6CiAgICAgYm9v
bCBpblNhbWVSb290RWRpdGFibGVFbGVtZW50KE5vZGVJbXBsICopOwogICAgIGJvb2wgaW5TYW1l
Q29udGFpbmluZ0Jsb2NrRmxvd0VsZW1lbnQoTm9kZUltcGwgKik7CiAgICAgCi0gICAgLy8gdXNl
ZCBieSB0aGUgcGFyc2VyLiBEb2Vzbid0IGRvIGFzIG1hbnkgZXJyb3IgY2hlY2tpbmdzIGFzCi0g
ICAgLy8gYXBwZW5kQ2hpbGQoKSwgYW5kIHJldHVybnMgdGhlIG5vZGUgaW50byB3aGljaCB3aWxs
IGJlIHBhcnNlZCBuZXh0LgorICAgIC8vIHVzZWQgYnkgdGhlIHBhcnNlci4gQ2hlY2tzIGFnYWlu
c3QgdGhlIERURCwgdW5saWtlIERPTSBvcGVyYXRpb25zIGxpa2UKKyAgICAvLyBhcHBlbmRDaGls
ZCgpLCBhbmQgcmV0dXJucyB0aGUgbmV3IGNvbnRhaW5lciBub2RlIGZvciBmdXR1cmUgaW5zZXJ0
aW9ucyBhcyB5b3UgcGFyc2UuCiAgICAgdmlydHVhbCBOb2RlSW1wbCAqYWRkQ2hpbGQoTm9kZUlt
cGwgKm5ld0NoaWxkKTsKICAgICAKICAgICAvLyBjYWxsZWQgYnkgdGhlIHBhcnNlciB3aGVuIHRo
aXMgZWxlbWVudCdzIGNsb3NlIHRhZyBpcyByZWFjaGVkLAogICAgIC8vIHNpZ25hbGxpbmcgdGhh
dCBhbGwgY2hpbGQgdGFncyBoYXZlIGJlZW4gcGFyc2VkIGFuZCBhZGRlZC4KICAgICAvLyBUaGlz
IGlzIG9ubHkgbmVlZGVkIGZvciA8YXBwbGV0PiBhbmQgPG9iamVjdD4gZWxlbWVudHMsIHdoaWNo
IGNhbid0IGxheSB0aGVtc2VsdmVzIG91dAogICAgIC8vIHVudGlsIHRoZXkga25vdyBhbGwgb2Yg
dGhlaXIgbmVzdGVkIDxwYXJhbT5zLiBbMzYwMzE5MSwgNDA0MDg0OF0KLSAgICB2aXJ0dWFsIHZv
aWQgY2xvc2VSZW5kZXJlcigpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBjbG9zZVJlbmRlcmVyKCkg
e30KKworICAgIHR5cGVkZWYgUV9VSU5UMzIgSWQ7IC8vIEZJWE1FOiBZYW5rIHRoaXMgb25jZSBh
dHRyaWJ1dGVzIGFyZSBhbHNvIHN3aXRjaGVkIG92ZXIuCiAKLSAgICB0eXBlZGVmIFFfVUlOVDMy
IElkOwotICAgIC8vIGlkKCkgaXMgdXNlZCB0byBlYXNpbHkgYW5kIGV4YWN0bHkgaWRlbnRpZnkg
YSBub2RlLiBJdAotICAgIC8vIGlzIG9wdGltaXplZCBmb3IgcXVpY2sgY29tcGFyaXNvbiBhbmQg
bG93IG1lbW9yeSBjb25zdW1wdGlvbi4KLSAgICAvLyBpdHMgdmFsdWUgZGVwZW5kcyBvbiB0aGUg
b3duZXIgZG9jdW1lbnQgb2YgdGhlIG5vZGUgYW5kIGlzCi0gICAgLy8gY2F0ZWdvcml6ZWQgaW4g
dGhlIGZvbGxvd2luZyB3YXk6Ci0gICAgLy8gMS4uSURfTEFTVF9UQUc6IHRoZSBub2RlIGluaGVy
aXRzIEhUTUxFbGVtZW50SW1wbCBhbmQgaXMKLSAgICAvLyAgICAgICAgICAgICAgICAgcGFydCBv
ZiB0aGUgSFRNTCBuYW1lc3BhY2UuCi0gICAgLy8gICAgICAgICAgICAgICAgIFRoZSBIVE1MIG5h
bWVzcGFjZSBpcyBlaXRoZXIgdGhlIGdsb2JhbAotICAgIC8vICAgICAgICAgICAgICAgICBvbmUg
KG5vIG5hbWVzcGFjZSkgb3IgdGhlIFhIVE1MIG5hbWVzcGFjZQotICAgIC8vICAgICAgICAgICAg
ICAgICBkZXBlbmRpbmcgb24gdGhlIG93bmVyIGRvY3VtZW50J3MgZG9jdHlwZQotICAgIC8vIElE
X0xBU1RfVEFHKzEuLjB4ZmZmZjogbm9uLUhUTUwgZWxlbWVudHMgaW4gdGhlIGdsb2JhbCBuYW1l
c3BhY2UKLSAgICAvLyBvdGhlcnMgICAgICAgbm9uLUhUTUwgZWxlbWVudHMgaW4gYSBuYW1lc3Bh
Y2UuCi0gICAgLy8gICAgICAgICAgICAgICAgIHRoZSB1cHBlciAxNiBiaXQgaWRlbnRpZnkgdGhl
IG5hbWVzcGFjZQotICAgIC8vICAgICAgICAgICAgICAgICB0aGUgbG93ZXIgMTYgYml0IGlkZW50
aWZ5IHRoZSBsb2NhbCBwYXJ0IG9mIHRoZQotICAgIC8vICAgICAgICAgICAgICAgICBxdWFsaWZp
ZWQgZWxlbWVudCBuYW1lLgotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdCB7IHJldHVybiAwOyB9
OwotI2lmIEFQUExFX0NIQU5HRVMKLSAgICBJZCBpZGVudGlmaWVyKCkgY29uc3Q7Ci0jZW5kaWYK
ICAgICBlbnVtIE1vdXNlRXZlbnRUeXBlIHsKICAgICAgICAgTW91c2VQcmVzcywKICAgICAgICAg
TW91c2VSZWxlYXNlLApAQCAtMjc4LDggKzI2Myw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJv
b2wgaXNLZXlib2FyZEZvY3VzYWJsZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBpc01vdXNl
Rm9jdXNhYmxlKCkgY29uc3Q7CiAgICAgCi0gICAgdmlydHVhbCBib29sIGlzSW5saW5lKCkgY29u
c3Q7Ci0gICAgCiAgICAgdmlydHVhbCBib29sIGlzQ29udGVudEVkaXRhYmxlKCkgY29uc3Q7CiAg
ICAgdmlydHVhbCBRUmVjdCBnZXRSZWN0KCkgY29uc3Q7CiAKQEAgLTM2OSwxMSArMzUyLDE1IEBA
IHB1YmxpYzoKICAgICBraHRtbDo6UmVuZGVyT2JqZWN0ICpwcmV2aW91c1JlbmRlcmVyKCk7CiAg
ICAgdm9pZCBzZXRSZW5kZXJlcihraHRtbDo6UmVuZGVyT2JqZWN0KiByZW5kZXJlcikgeyBtX3Jl
bmRlciA9IHJlbmRlcmVyOyB9CiAgICAgCi0gICAgdm9pZCBjaGVja1NldFByZWZpeChjb25zdCBE
T01TdHJpbmcgJl9wcmVmaXgsIGludCAmZXhjZXB0aW9uY29kZSk7Ci0gICAgdm9pZCBjaGVja0Fk
ZENoaWxkKE5vZGVJbXBsICpuZXdDaGlsZCwgaW50ICZleGNlcHRpb25jb2RlKTsKKyAgICB2b2lk
IGNoZWNrU2V0UHJlZml4KGNvbnN0IEF0b21pY1N0cmluZyAmX3ByZWZpeCwgaW50ICZleGNlcHRp
b25jb2RlKTsKICAgICBib29sIGlzQW5jZXN0b3IoY29uc3QgTm9kZUltcGwgKikgY29uc3Q7Ci0g
ICAgdmlydHVhbCBib29sIGNoaWxkQWxsb3dlZCggTm9kZUltcGwgKm5ld0NoaWxkICk7CiAKKwkv
LyBUaGVzZSB0d28gbWV0aG9kcyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiAgVGhlIGZvcm1lciBp
cyB1c2VkIHRvIGRvIHN0cmljdCBlcnJvci1jaGVja2luZworCS8vIHdoZW4gYWRkaW5nIGNoaWxk
cmVuIHZpYSB0aGUgcHVibGljIERPTSBBUEkgKGUuZy4sIGFwcGVuZENoaWxkKCkpLiAgVGhlIGxh
dHRlciBpcyBjYWxsZWQgb25seSB3aGVuIHBhcnNpbmcsIAorCS8vIHRvIHNhbml0eS1jaGVjayBh
Z2FpbnN0IHRoZSBEVEQgZm9yIGVycm9yIHJlY292ZXJ5LgorCXZvaWQgY2hlY2tBZGRDaGlsZChO
b2RlSW1wbCAqbmV3Q2hpbGQsIGludCAmZXhjZXB0aW9uY29kZSk7ICAgIC8vIEVycm9yLWNoZWNr
aW5nIHdoZW4gYWRkaW5nIHZpYSB0aGUgRE9NIEFQSQorCXZpcnR1YWwgYm9vbCBjaGlsZEFsbG93
ZWQoTm9kZUltcGwgKm5ld0NoaWxkKTsJCQkJICAgLy8gRXJyb3ItY2hlY2tpbmcgZHVyaW5nIHBh
cnNpbmcgdGhhdCBjaGVja3MgdGhlIERURAorCQogICAgIHZpcnR1YWwgbG9uZyBtYXhPZmZzZXQo
KSBjb25zdDsKICAgICBsb25nIG1heERlZXBPZmZzZXQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGxv
bmcgY2FyZXRNaW5PZmZzZXQoKSBjb25zdDsKQEAgLTQ4MSw3ICs0NjgsNyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBub3RpZnlOb2RlTGlzdHNTdWJ0cmVlTW9kaWZpZWQoKTsKICAgICB2b2lkIG5vdGlm
eUxvY2FsTm9kZUxpc3RzU3VidHJlZU1vZGlmaWVkKCk7CiAKLSAgICBTaGFyZWRQdHI8Tm9kZUxp
c3RJbXBsPiBnZXRFbGVtZW50c0J5VGFnTmFtZShjb25zdCBET01TdHJpbmcgJm5hbWUpIHsgcmV0
dXJuIGdldEVsZW1lbnRzQnlUYWdOYW1lTlMoRE9NU3RyaW5nKCksIG5hbWUpOyB9CisgICAgU2hh
cmVkUHRyPE5vZGVMaXN0SW1wbD4gZ2V0RWxlbWVudHNCeVRhZ05hbWUoY29uc3QgRE9NU3RyaW5n
ICZuYW1lKSB7IHJldHVybiBnZXRFbGVtZW50c0J5VGFnTmFtZU5TKCIqIiwgbmFtZSk7IH0KICAg
ICBTaGFyZWRQdHI8Tm9kZUxpc3RJbXBsPiBnZXRFbGVtZW50c0J5VGFnTmFtZU5TKGNvbnN0IERP
TVN0cmluZyAmbmFtZXNwYWNlVVJJLCBjb25zdCBET01TdHJpbmcgJmxvY2FsTmFtZSk7CiAKIHBy
aXZhdGU6IC8vIG1lbWJlcnMKQEAgLTYxOCwzMCArNjA1LDYgQEAgcHJvdGVjdGVkOgogICAgIHZp
cnR1YWwgYm9vbCBub2RlTWF0Y2hlcyggTm9kZUltcGwgKnRlc3ROb2RlICkgY29uc3Q7CiB9Owog
Ci0KLS8qKgotICogTm9kZUxpc3Qgd2hpY2ggbGlzdHMgYWxsIE5vZGVzIGluIGEgZG9jdW1lbnQg
d2l0aCBhIGdpdmVuIHRhZyBuYW1lCi0gKi8KLWNsYXNzIFRhZ05vZGVMaXN0SW1wbCA6IHB1Ymxp
YyBOb2RlTGlzdEltcGwKLXsKLXB1YmxpYzoKLSAgICBUYWdOb2RlTGlzdEltcGwoIE5vZGVJbXBs
ICpuLCBOb2RlSW1wbDo6SWQgdGFnSWQsIE5vZGVJbXBsOjpJZCB0YWdJZE1hc2sgKTsKLQotICAg
IC8vIERPTSBtZXRob2RzIG92ZXJyaWRkZW4gZnJvbSAgcGFyZW50IGNsYXNzZXMKLQotICAgIHZp
cnR1YWwgdW5zaWduZWQgbG9uZyBsZW5ndGgoKSBjb25zdDsKLSAgICB2aXJ0dWFsIE5vZGVJbXBs
ICppdGVtICggdW5zaWduZWQgbG9uZyBpbmRleCApIGNvbnN0OwotCi0gICAgLy8gT3RoZXIgbWV0
aG9kcyAobm90IHBhcnQgb2YgRE9NKQotCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCBib29sIG5v
ZGVNYXRjaGVzKCBOb2RlSW1wbCAqdGVzdE5vZGUgKSBjb25zdDsKLQotICAgIE5vZGVJbXBsOjpJ
ZCBtX2lkOwotICAgIE5vZGVJbXBsOjpJZCBtX2lkTWFzazsKLX07Ci0KLQogLyoqCiAgKiBOb2Rl
TGlzdCB3aGljaCBsaXN0cyBhbGwgTm9kZXMgaW4gYSBFbGVtZW50IHdpdGggYSBnaXZlbiAibmFt
ZT0iIHRhZwogICovCkluZGV4OiBraHRtbC94bWwvZG9tX3Bvc2l0aW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC94bWwvZG9tX3Bvc2l0aW9uLmNwcCx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS43MQpkaWZmIC11IC1wIC1yMS43MSBraHRtbC94bWwvZG9t
X3Bvc2l0aW9uLmNwcAotLS0ga2h0bWwveG1sL2RvbV9wb3NpdGlvbi5jcHAJMjEgSnVuIDIwMDUg
MTg6MTE6MTAgLTAwMDAJMS43MQorKysga2h0bWwveG1sL2RvbV9wb3NpdGlvbi5jcHAJOCBKdWwg
MjAwNSAwNTo1Nzo1OSAtMDAwMApAQCAtMzUsNyArMzUsNiBAQAogI2luY2x1ZGUgImRvbTJfcmFu
Z2VpbXBsLmgiCiAjaW5jbHVkZSAiZG9tMl92aWV3c2ltcGwuaCIKICNpbmNsdWRlICJoZWxwZXIu
aCIKLSNpbmNsdWRlICJodG1sdGFncy5oIgogI2luY2x1ZGUgInRleHRfYWZmaW5pdHkuaCIKICNp
bmNsdWRlICJ2aXNpYmxlX3Bvc2l0aW9uLmgiCiAjaW5jbHVkZSAidmlzaWJsZV91bml0cy5oIgpA
QCAtNDUsNiArNDQsNyBAQAogI2luY2x1ZGUgInJlbmRlcmluZy9yZW5kZXJfc3R5bGUuaCIKICNp
bmNsdWRlICJyZW5kZXJpbmcvcmVuZGVyX3RleHQuaCIKICNpbmNsdWRlICJlZGl0aW5nL3Zpc2li
bGVfdGV4dC5oIgorI2luY2x1ZGUgImh0bWxuYW1lcy5oIgogCiAjaWYgQVBQTEVfQ0hBTkdFUwog
I2luY2x1ZGUgIktXUUFzc2VydGlvbnMuaCIKQEAgLTQ0MCw3ICs0NDAsNyBAQCBQb3NpdGlvbiBQ
b3NpdGlvbjo6ZG93bnN0cmVhbSgpIGNvbnN0CiAKICAgICAgICAgLy8gc3RvcCBiZWZvcmUgZ29p
bmcgYWJvdmUgdGhlIGJvZHksIHVwIGludG8gdGhlIGhlYWQKICAgICAgICAgLy8gcmV0dXJuIHRo
ZSBsYXN0IHZpc2libGUgc3RyZWFtZXIgcG9zaXRpb24KLSAgICAgICAgaWYgKGN1cnJlbnROb2Rl
LT5pZCgpID09IElEX0JPRFkgJiYgY3VycmVudE9mZnNldCA+PSAoaW50KSBjdXJyZW50Tm9kZS0+
Y2hpbGROb2RlQ291bnQoKSkKKyAgICAgICAgaWYgKGN1cnJlbnROb2RlLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6Ym9keSgpKSAmJiBjdXJyZW50T2Zmc2V0ID49IChpbnQpIGN1cnJlbnROb2RlLT5j
aGlsZE5vZGVDb3VudCgpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAg
ICAgLy8gbGltaXQgdHJhdmVyc2FsIHRvIGJsb2NrIG9yIHRhYmxlIGVuY2xvc2luZyB0aGUgb3Jp
Z2luYWwgZWxlbWVudApAQCAtNjk0LDcgKzY5NCw3IEBAIGJvb2wgUG9zaXRpb246OnJlbmRlcnNJ
bkRpZmZlcmVudFBvc2l0aW8KICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIGlmIChu
b2RlKCkgPT0gcG9zLm5vZGUoKSkgewotICAgICAgICBpZiAobm9kZSgpLT5pZCgpID09IElEX0JS
KQorICAgICAgICBpZiAobm9kZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YnIoKSkpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgaWYgKG9mZnNldCgpID09IHBvcy5vZmZz
ZXQoKSkKQEAgLTcwNiwxMCArNzA2LDEwIEBAIGJvb2wgUG9zaXRpb246OnJlbmRlcnNJbkRpZmZl
cmVudFBvc2l0aW8KICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBpZiAobm9kZSgpLT5pZCgp
ID09IElEX0JSICYmIHBvcy5pblJlbmRlcmVkQ29udGVudCgpKQorICAgIGlmIChub2RlKCktPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjpicigpKSAmJiBwb3MuaW5SZW5kZXJlZENvbnRlbnQoKSkKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgCi0gICAgaWYgKHBvcy5ub2RlKCkt
PmlkKCkgPT0gSURfQlIgJiYgaW5SZW5kZXJlZENvbnRlbnQoKSkKKyAgICBpZiAocG9zLm5vZGUo
KS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJyKCkpICYmIGluUmVuZGVyZWRDb250ZW50KCkpCiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgIAogICAgIGlmIChub2RlKCktPmVu
Y2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQoKSAhPSBwb3Mubm9kZSgpLT5lbmNsb3NpbmdCbG9ja0Zs
b3dFbGVtZW50KCkpCkBAIC03NjQsNyArNzY0LDcgQEAgUG9zaXRpb24gUG9zaXRpb246OmxlYWRp
bmdXaGl0ZXNwYWNlUG9zaQogICAgIGlmIChpc051bGwoKSkKICAgICAgICAgcmV0dXJuIFBvc2l0
aW9uKCk7CiAgICAgCi0gICAgaWYgKHVwc3RyZWFtKCkubm9kZSgpLT5pZCgpID09IElEX0JSKQor
ICAgIGlmICh1cHN0cmVhbSgpLm5vZGUoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJyKCkpKQog
ICAgICAgICByZXR1cm4gUG9zaXRpb24oKTsKIAogICAgIFBvc2l0aW9uIHByZXYgPSBwcmV2aW91
c0NoYXJhY3RlclBvc2l0aW9uKGFmZmluaXR5KTsKQEAgLTc5NCw3ICs3OTQsNyBAQCBQb3NpdGlv
biBQb3NpdGlvbjo6dHJhaWxpbmdXaGl0ZXNwYWNlUG9zCiAgICAgICAgIH0KICAgICB9CiAKLSAg
ICBpZiAoZG93bnN0cmVhbSgpLm5vZGUoKS0+aWQoKSA9PSBJRF9CUikKKyAgICBpZiAoZG93bnN0
cmVhbSgpLm5vZGUoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJyKCkpKQogICAgICAgICByZXR1
cm4gUG9zaXRpb24oKTsKIAogICAgIFBvc2l0aW9uIG5leHQgPSBuZXh0Q2hhcmFjdGVyUG9zaXRp
b24oYWZmaW5pdHkpOwpJbmRleDoga2h0bWwveG1sL2RvbV9xbmFtZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwveG1sL2RvbV9xbmFtZS5jcHAsdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuMgpkaWZmIC11IC1wIC1yMS4yIGtodG1sL3htbC9kb21fcW5hbWUu
Y3BwCi0tLSBraHRtbC94bWwvZG9tX3FuYW1lLmNwcAkxNiBKdW4gMjAwNSAyMTowNjo0NiAtMDAw
MAkxLjIKKysrIGtodG1sL3htbC9kb21fcW5hbWUuY3BwCTggSnVsIDIwMDUgMDU6NTc6NTkgLTAw
MDAKQEAgLTE5LDQ4ICsxOSw5OCBAQAogICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCiAg
Ki8KIAotI2luY2x1ZGUgPHFwdHJkaWN0Lmg+CiAjaW5jbHVkZSAiZG9tX3FuYW1lLmgiCisjaW5j
bHVkZSAibWlzYy9oYXNoc2V0LmgiCisKK3VzaW5nIGtodG1sOjpIYXNoU2V0OwogCiBuYW1lc3Bh
Y2UgRE9NIHsKIAotc3RhdGljIFFQdHJEaWN0PFFQdHJEaWN0PFFQdHJEaWN0PFF1YWxpZmllZE5h
bWU6OlF1YWxpZmllZE5hbWVJbXBsPiA+ID4qIGdOYW1lQ2FjaGUgPSAwOworc3RydWN0IFF1YWxp
ZmllZE5hbWVDb21wb25lbnRzIHsKKyAgICBET01TdHJpbmdJbXBsICptX3ByZWZpeDsKKyAgICBE
T01TdHJpbmdJbXBsICptX2xvY2FsTmFtZTsKKyAgICBET01TdHJpbmdJbXBsICptX25hbWVzcGFj
ZTsKK307CiAKLVF1YWxpZmllZE5hbWU6OlF1YWxpZmllZE5hbWUoY29uc3QgQXRvbWljU3RyaW5n
JiBwLCBjb25zdCBBdG9taWNTdHJpbmcmIGwsIGNvbnN0IEF0b21pY1N0cmluZyYgbikKKy8vIEdv
bGRlbiByYXRpbyAtIGFyYml0cmFyeSBzdGFydCB2YWx1ZSB0byBhdm9pZCBtYXBwaW5nIGFsbCAw
J3MgdG8gYWxsIDAncworc3RhdGljIGNvbnN0IHVuc2lnbmVkIFBISSA9IDB4OWUzNzc5YjlVOwor
ICAgIAoraW5saW5lIHVuc2lnbmVkIGhhc2hDb21wb25lbnRzKGNvbnN0IFF1YWxpZmllZE5hbWVD
b21wb25lbnRzJiBidWYpCiB7Ci0gICAgLy8gT2J0YWluIGFuIGFwcHJvcHJpYXRlIGlubmVyIGZy
b20gb3VyIGRpY3Rpb25hcnkuCi0gICAgUVB0ckRpY3Q8UVB0ckRpY3Q8UXVhbGlmaWVkTmFtZUlt
cGw+ID4qIG5hbWVzcGFjZURpY3QgPSAwOwotICAgIFFQdHJEaWN0PFF1YWxpZmllZE5hbWVJbXBs
PiogcHJlZml4RGljdCA9IDA7Ci0gICAgaWYgKGdOYW1lQ2FjaGUpIHsKLSAgICAgICAgbmFtZXNw
YWNlRGljdCA9IGdOYW1lQ2FjaGUtPmZpbmQoKHZvaWQqKShuLmltcGxlbWVudGF0aW9uKCkpKTsK
LSAgICAgICAgaWYgKG5hbWVzcGFjZURpY3QpIHsKLSAgICAgICAgICAgIHByZWZpeERpY3QgPSBu
YW1lc3BhY2VEaWN0LT5maW5kKCh2b2lkKilwLmltcGxlbWVudGF0aW9uKCkpOwotICAgICAgICAg
ICAgaWYgKHByZWZpeERpY3QpCi0gICAgICAgICAgICAgICAgbV9pbXBsID0gcHJlZml4RGljdC0+
ZmluZCgodm9pZCopbC5pbXBsZW1lbnRhdGlvbigpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IGlmICghbV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbCA9IG5ldyBRdWFsaWZpZWROYW1lSW1wbChw
LCBsLCBuKTsKLQotICAgICAgICAvLyBQdXQgdGhlIG9iamVjdCBpbnRvIHRoZSBoYXNoLgotICAg
ICAgICBpZiAoIWdOYW1lQ2FjaGUpCi0gICAgICAgICAgICBnTmFtZUNhY2hlID0gbmV3IFFQdHJE
aWN0PFFQdHJEaWN0PFFQdHJEaWN0PFF1YWxpZmllZE5hbWVJbXBsPiA+ID47Ci0gICAgICAgIAot
ICAgICAgICBpZiAoIW5hbWVzcGFjZURpY3QpIHsKLSAgICAgICAgICAgIG5hbWVzcGFjZURpY3Qg
PSBuZXcgUVB0ckRpY3Q8UVB0ckRpY3Q8UXVhbGlmaWVkTmFtZUltcGw+ID47Ci0gICAgICAgICAg
ICBuYW1lc3BhY2VEaWN0LT5zZXRBdXRvRGVsZXRlKHRydWUpOwotICAgICAgICAgICAgZ05hbWVD
YWNoZS0+aW5zZXJ0KCh2b2lkKiluLmltcGxlbWVudGF0aW9uKCksIG5hbWVzcGFjZURpY3QpOwot
ICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoIXByZWZpeERpY3QpIHsKLSAgICAgICAg
ICAgIHByZWZpeERpY3QgPSBuZXcgUVB0ckRpY3Q8UXVhbGlmaWVkTmFtZUltcGw+OwotICAgICAg
ICAgICAgbmFtZXNwYWNlRGljdC0+aW5zZXJ0KCh2b2lkKilwLmltcGxlbWVudGF0aW9uKCksIHBy
ZWZpeERpY3QpOwotICAgICAgICB9CisgICAgdW5zaWduZWQgbCA9IHNpemVvZihRdWFsaWZpZWRO
YW1lQ29tcG9uZW50cykgLyBzaXplb2YodWludDE2X3QpOworICAgIGNvbnN0IHVpbnQxNl90ICpz
ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MTZfdCo+KCZidWYpOworICAgIHVpbnQzMl90
IGhhc2ggPSBQSEk7CisgICAgdWludDMyX3QgdG1wOwogICAgICAgICAKLSAgICAgICAgcHJlZml4
RGljdC0+aW5zZXJ0KCh2b2lkKilsLmltcGxlbWVudGF0aW9uKCksIG1faW1wbCk7CisgICAgaW50
IHJlbSA9IGwgJiAxOworICAgIGwgPj49IDE7CisgICAgICAgIAorICAgIC8vIE1haW4gbG9vcAor
ICAgIGZvciAoOyBsID4gMDsgbC0tKSB7CisgICAgICAgIGhhc2ggKz0gc1swXTsKKyAgICAgICAg
dG1wID0gKHNbMV0gPDwgMTEpIF4gaGFzaDsKKyAgICAgICAgaGFzaCA9IChoYXNoIDw8IDE2KSBe
IHRtcDsKKyAgICAgICAgcyArPSAyOworICAgICAgICBoYXNoICs9IGhhc2ggPj4gMTE7CiAgICAg
fQogICAgIAorICAgIC8vIEhhbmRsZSBlbmQgY2FzZQorICAgIGlmIChyZW0pIHsKKyAgICAgICAg
aGFzaCArPSBzWzBdOworICAgICAgICBoYXNoIF49IGhhc2ggPDwgMTE7CisgICAgICAgIGhhc2gg
Kz0gaGFzaCA+PiAxNzsKKyAgICB9CisgICAgICAgIAorICAgIC8vIEZvcmNlICJhdmFsYW5jaGlu
ZyIgb2YgZmluYWwgMTI3IGJpdHMKKyAgICBoYXNoIF49IGhhc2ggPDwgMzsKKyAgICBoYXNoICs9
IGhhc2ggPj4gNTsKKyAgICBoYXNoIF49IGhhc2ggPDwgMjsKKyAgICBoYXNoICs9IGhhc2ggPj4g
MTU7CisgICAgaGFzaCBePSBoYXNoIDw8IDEwOworICAgICAgICAKKyAgICAvLyB0aGlzIGF2b2lk
cyBldmVyIHJldHVybmluZyBhIGhhc2ggY29kZSBvZiAwLCBzaW5jZSB0aGF0IGlzIHVzZWQgdG8K
KyAgICAvLyBzaWduYWwgImhhc2ggbm90IGNvbXB1dGVkIHlldCIsIHVzaW5nIGEgdmFsdWUgdGhh
dCBpcyBsaWtlbHkgdG8gYmUKKyAgICAvLyBlZmZlY3RpdmVseSB0aGUgc2FtZSBhcyAwIHdoZW4g
dGhlIGxvdyBiaXRzIGFyZSBtYXNrZWQKKyAgICBpZiAoaGFzaCA9PSAwKQorICAgICAgICBoYXNo
ID0gMHg4MDAwMDAwMDsKKyAgICAgICAgCisgICAgcmV0dXJuIGhhc2g7Cit9CisKK3N0cnVjdCBR
TmFtZUhhc2ggeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFF1YWxpZmllZE5hbWU6
OlF1YWxpZmllZE5hbWVJbXBsICpuYW1lKSB7ICAgIAorICAgICAgICBRdWFsaWZpZWROYW1lQ29t
cG9uZW50cyBjb21wb25lbnRzID0geyBuYW1lLT5tX3ByZWZpeC5pbXBsZW1lbnRhdGlvbigpLCAK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZS0+bV9s
b2NhbE5hbWUuaW1wbGVtZW50YXRpb24oKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5hbWUtPm1fbmFtZXNwYWNlLmltcGxlbWVudGF0aW9uKCkgfTsK
KyAgICAgICAgcmV0dXJuIGhhc2hDb21wb25lbnRzKGNvbXBvbmVudHMpOworICAgIH0KKyAgICBz
dGF0aWMgYm9vbCBlcXVhbChjb25zdCBRdWFsaWZpZWROYW1lOjpRdWFsaWZpZWROYW1lSW1wbCAq
YSwgY29uc3QgUXVhbGlmaWVkTmFtZTo6UXVhbGlmaWVkTmFtZUltcGwgKmIpIHsgcmV0dXJuIGEg
PT0gYjsgfQorfTsKKwordHlwZWRlZiBIYXNoU2V0PFF1YWxpZmllZE5hbWU6OlF1YWxpZmllZE5h
bWVJbXBsKiwgUU5hbWVIYXNoPiBRTmFtZVNldDsKKworc3RhdGljIFFOYW1lU2V0ICpnTmFtZUNh
Y2hlOworCitpbmxpbmUgYm9vbCBlcXVhbENvbXBvbmVudHMoUXVhbGlmaWVkTmFtZTo6UXVhbGlm
aWVkTmFtZUltcGwqIGNvbnN0JiBuYW1lLCBjb25zdCBRdWFsaWZpZWROYW1lQ29tcG9uZW50cyAm
Y29tcG9uZW50cykKK3sKKyAgICByZXR1cm4gY29tcG9uZW50cy5tX2xvY2FsTmFtZSA9PSBuYW1l
LT5tX2xvY2FsTmFtZS5pbXBsZW1lbnRhdGlvbigpICYmCisgICAgICAgICAgIGNvbXBvbmVudHMu
bV9uYW1lc3BhY2UgPT0gbmFtZS0+bV9uYW1lc3BhY2UuaW1wbGVtZW50YXRpb24oKSAmJgorICAg
ICAgICAgICBjb21wb25lbnRzLm1fcHJlZml4ID09IG5hbWUtPm1fcHJlZml4LmltcGxlbWVudGF0
aW9uKCk7Cit9CisKK2lubGluZSBRdWFsaWZpZWROYW1lOjpRdWFsaWZpZWROYW1lSW1wbCAqY29u
dmVydENvbXBvbmVudHMoY29uc3QgUXVhbGlmaWVkTmFtZUNvbXBvbmVudHMmIGNvbXBvbmVudHMs
IHVuc2lnbmVkIGhhc2gpCit7CisgICAgcmV0dXJuIG5ldyBRdWFsaWZpZWROYW1lOjpRdWFsaWZp
ZWROYW1lSW1wbChjb21wb25lbnRzLm1fcHJlZml4LCBjb21wb25lbnRzLm1fbG9jYWxOYW1lLCBj
b21wb25lbnRzLm1fbmFtZXNwYWNlKTsKK30KKworCitRdWFsaWZpZWROYW1lOjpRdWFsaWZpZWRO
YW1lKGNvbnN0IEF0b21pY1N0cmluZyYgcCwgY29uc3QgQXRvbWljU3RyaW5nJiBsLCBjb25zdCBB
dG9taWNTdHJpbmcmIG4pCisgICAgOiBtX2ltcGwoMCkKK3sKKyAgICBpZiAoIWdOYW1lQ2FjaGUp
CisgICAgICAgIGdOYW1lQ2FjaGUgPSBuZXcgUU5hbWVTZXQ7CisgICAgUXVhbGlmaWVkTmFtZUNv
bXBvbmVudHMgY29tcG9uZW50cyA9IHsgcC5pbXBsZW1lbnRhdGlvbigpLCBsLmltcGxlbWVudGF0
aW9uKCksIG4uaW1wbGVtZW50YXRpb24oKSB9OworICAgIG1faW1wbCA9ICpnTmFtZUNhY2hlLT5p
bnNlcnQ8UXVhbGlmaWVkTmFtZUNvbXBvbmVudHMsIGhhc2hDb21wb25lbnRzLCBlcXVhbENvbXBv
bmVudHMsIGNvbnZlcnRDb21wb25lbnRzPihjb21wb25lbnRzKS5maXJzdDsgICAgCiAgICAgcmVm
KCk7CiB9CiAKQEAgLTg4LDMxICsxMzgsMTYgQEAgY29uc3QgUXVhbGlmaWVkTmFtZSYgUXVhbGlm
aWVkTmFtZTo6b3BlcgogCiB2b2lkIFF1YWxpZmllZE5hbWU6OmRlcmVmKCkKIHsKLSAgICBpZiAo
bV9pbXBsLT5yZWZDb3VudCgpID09IDEpIHsKLSAgICAgICAgLy8gQmVmb3JlIGRlY3JlbWVudGlu
ZyB0aGUgcmVmIHRvIDAsIHJlbW92ZSBvdXJzZWx2ZXMgZnJvbSB0aGUgaGFzaCB0YWJsZS4KLSAg
ICAgICAgUVB0ckRpY3Q8UVB0ckRpY3Q8UXVhbGlmaWVkTmFtZUltcGw+ID4qIG5hbWVzcGFjZURp
Y3QgPSAwOwotICAgICAgICBRUHRyRGljdDxRdWFsaWZpZWROYW1lSW1wbD4qIHByZWZpeERpY3Qg
PSAwOwotICAgICAgICBpZiAoZ05hbWVDYWNoZSkgewotICAgICAgICAgICAgbmFtZXNwYWNlRGlj
dCA9IGdOYW1lQ2FjaGUtPmZpbmQoKHZvaWQqKShuYW1lc3BhY2VVUkkoKS5pbXBsZW1lbnRhdGlv
bigpKSk7Ci0gICAgICAgICAgICBpZiAobmFtZXNwYWNlRGljdCkgewotICAgICAgICAgICAgICAg
IHByZWZpeERpY3QgPSBuYW1lc3BhY2VEaWN0LT5maW5kKCh2b2lkKilwcmVmaXgoKS5pbXBsZW1l
bnRhdGlvbigpKTsKLSAgICAgICAgICAgICAgICBpZiAocHJlZml4RGljdCkKLSAgICAgICAgICAg
ICAgICAgICAgcHJlZml4RGljdC0+cmVtb3ZlKCh2b2lkKilsb2NhbE5hbWUoKS5pbXBsZW1lbnRh
dGlvbigpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICAKKyAgICBpZiAo
bV9pbXBsLT5oYXNPbmVSZWYoKSkKKyAgICAgICAgZ05hbWVDYWNoZS0+cmVtb3ZlKG1faW1wbCk7
CisgICAgICAgIAogICAgIG1faW1wbC0+ZGVyZWYoKTsKIH0KIAotYm9vbCBvcGVyYXRvcj09KGNv
bnN0IEF0b21pY1N0cmluZyYgYSwgY29uc3QgUXVhbGlmaWVkTmFtZSYgcSkKLXsgCi0gICAgcmV0
dXJuIGEgPT0gcS5sb2NhbE5hbWUoKTsKLX0KLQotYm9vbCBvcGVyYXRvcj09KGNvbnN0IFF1YWxp
ZmllZE5hbWUmIHEsIGNvbnN0IEF0b21pY1N0cmluZyYgYSkKK3ZvaWQgUXVhbGlmaWVkTmFtZTo6
c2V0UHJlZml4KGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4KQogewotICAgIHJldHVybiBhID09
IHEubG9jYWxOYW1lKCk7CisgICAgUXVhbGlmaWVkTmFtZSBvdGhlcihwcmVmaXgsIGxvY2FsTmFt
ZSgpLCBuYW1lc3BhY2VVUkkoKSk7CisgICAgKnRoaXMgPSBvdGhlcjsKIH0KIAogfQpJbmRleDog
a2h0bWwveG1sL2RvbV9xbmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJD
b3JlL2todG1sL3htbC9kb21fcW5hbWUuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yCmRpZmYg
LXUgLXAgLXIxLjIga2h0bWwveG1sL2RvbV9xbmFtZS5oCi0tLSBraHRtbC94bWwvZG9tX3FuYW1l
LmgJMTYgSnVuIDIwMDUgMjE6MDY6NDYgLTAwMDAJMS4yCisrKyBraHRtbC94bWwvZG9tX3FuYW1l
LmgJOCBKdWwgMjAwNSAwNTo1Nzo1OSAtMDAwMApAQCAtMzIsOSArMzIsNiBAQCBwdWJsaWM6CiAg
ICAgcHVibGljOgogICAgICAgICBRdWFsaWZpZWROYW1lSW1wbChjb25zdCBBdG9taWNTdHJpbmcm
IHAsIGNvbnN0IEF0b21pY1N0cmluZyYgbCwgY29uc3QgQXRvbWljU3RyaW5nJiBuKSA6bV9wcmVm
aXgocCksIG1fbG9jYWxOYW1lKGwpLCBtX25hbWVzcGFjZShuKSB7fQogCi0gICAgICAgIGZyaWVu
ZCBjbGFzcyBRdWFsaWZpZWROYW1lOwotCi0gICAgcHJpdmF0ZToKICAgICAgICAgQXRvbWljU3Ry
aW5nIG1fcHJlZml4OwogICAgICAgICBBdG9taWNTdHJpbmcgbV9sb2NhbE5hbWU7CiAgICAgICAg
IEF0b21pY1N0cmluZyBtX25hbWVzcGFjZTsKQEAgLTU0LDYgKzUxLDkgQEAgcHVibGljOgogCiAg
ICAgYm9vbCBtYXRjaGVzKGNvbnN0IFF1YWxpZmllZE5hbWUmIG90aGVyKSBjb25zdCB7IHJldHVy
biBtX2ltcGwgPT0gb3RoZXIubV9pbXBsIHx8IChsb2NhbE5hbWUoKSA9PSBvdGhlci5sb2NhbE5h
bWUoKSAmJiBuYW1lc3BhY2VVUkkoKSA9PSBvdGhlci5uYW1lc3BhY2VVUkkoKSk7IH0KIAorICAg
IGJvb2wgaGFzUHJlZml4KCkgY29uc3QgeyByZXR1cm4gbV9pbXBsLT5tX3ByZWZpeCAhPSBudWxs
QXRvbTsgfQorICAgIHZvaWQgc2V0UHJlZml4KGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4KTsK
KwogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4KCkgY29uc3QgeyByZXR1cm4gbV9pbXBs
LT5tX3ByZWZpeDsgfQogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lKCkgY29uc3Qg
eyByZXR1cm4gbV9pbXBsLT5tX2xvY2FsTmFtZTsgfQogICAgIGNvbnN0IEF0b21pY1N0cmluZyYg
bmFtZXNwYWNlVVJJKCkgY29uc3QgeyByZXR1cm4gbV9pbXBsLT5tX25hbWVzcGFjZTsgfQpAQCAt
NjYsMTEgKzY2LDEwIEBAIHByaXZhdGU6CiAgICAgUXVhbGlmaWVkTmFtZUltcGwqIG1faW1wbDsK
IH07CiAKLWJvb2wgb3BlcmF0b3I9PShjb25zdCBBdG9taWNTdHJpbmcmIGEsIGNvbnN0IFF1YWxp
ZmllZE5hbWUmIHEpOworaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBdG9taWNTdHJpbmcm
IGEsIGNvbnN0IFF1YWxpZmllZE5hbWUmIHEpIHsgcmV0dXJuIGEgPT0gcS5sb2NhbE5hbWUoKTsg
fQogaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBBdG9taWNTdHJpbmcmIGEsIGNvbnN0IFF1
YWxpZmllZE5hbWUmIHEpIHsgcmV0dXJuIGEgIT0gcS5sb2NhbE5hbWUoKTsgfQotYm9vbCBvcGVy
YXRvcj09KGNvbnN0IFF1YWxpZmllZE5hbWUmIHEsIGNvbnN0IEF0b21pY1N0cmluZyYgYSk7Citp
bmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFF1YWxpZmllZE5hbWUmIHEsIGNvbnN0IEF0b21p
Y1N0cmluZyYgYSkgeyByZXR1cm4gYSA9PSBxLmxvY2FsTmFtZSgpOyB9CiBpbmxpbmUgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IFF1YWxpZmllZE5hbWUmIHEsIGNvbnN0IEF0b21pY1N0cmluZyYgYSkg
eyByZXR1cm4gYSAhPSBxLmxvY2FsTmFtZSgpOyB9CiAKLQogfQogI2VuZGlmCkluZGV4OiBraHRt
bC94bWwvZG9tX3RleHRpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2Vi
Q29yZS9raHRtbC94bWwvZG9tX3RleHRpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4y
MwpkaWZmIC11IC1wIC1yMS4yMyBraHRtbC94bWwvZG9tX3RleHRpbXBsLmNwcAotLS0ga2h0bWwv
eG1sL2RvbV90ZXh0aW1wbC5jcHAJMTkgT2N0IDIwMDQgMjM6MDQ6MjkgLTAwMDAJMS4yMworKysg
a2h0bWwveG1sL2RvbV90ZXh0aW1wbC5jcHAJOCBKdWwgMjAwNSAwNTo1Nzo1OSAtMDAwMApAQCAt
MzA0LDkgKzMwNCwxNCBAQCBDb21tZW50SW1wbDo6fkNvbW1lbnRJbXBsKCkKIHsKIH0KIAorY29u
c3QgQXRvbWljU3RyaW5nJiBDb21tZW50SW1wbDo6bG9jYWxOYW1lKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gY29tbWVudEF0b207Cit9CisKIERPTVN0cmluZyBDb21tZW50SW1wbDo6bm9kZU5hbWUo
KSBjb25zdAogewotICAgIHJldHVybiAiI2NvbW1lbnQiOworICAgIHJldHVybiBjb21tZW50QXRv
bS5zdHJpbmcoKTsKIH0KIAogdW5zaWduZWQgc2hvcnQgQ29tbWVudEltcGw6Om5vZGVUeXBlKCkg
Y29uc3QKQEAgLTMxOSwxMSArMzI0LDYgQEAgTm9kZUltcGwgKkNvbW1lbnRJbXBsOjpjbG9uZU5v
ZGUoYm9vbCAvKgogICAgIHJldHVybiBnZXREb2N1bWVudCgpLT5jcmVhdGVDb21tZW50KCBzdHIg
KTsKIH0KIAotTm9kZUltcGw6OklkIENvbW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIElEX0NPTU1FTlQ7Ci19Ci0KIC8vIERPTSBTZWN0aW9uIDEuMS4xCiBib29sIENvbW1lbnRJ
bXBsOjpjaGlsZFR5cGVBbGxvd2VkKCB1bnNpZ25lZCBzaG9ydCAvKnR5cGUqLyApCiB7CkBAIC0z
OTQsOSArMzk0LDE0IEBAIFRleHRJbXBsICpUZXh0SW1wbDo6c3BsaXRUZXh0KCBjb25zdCB1bnMK
ICAgICByZXR1cm4gbmV3VGV4dDsKIH0KIAorY29uc3QgQXRvbWljU3RyaW5nJiBUZXh0SW1wbDo6
bG9jYWxOYW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gdGV4dEF0b207Cit9CisKIERPTVN0cmlu
ZyBUZXh0SW1wbDo6bm9kZU5hbWUoKSBjb25zdAogewotICByZXR1cm4gIiN0ZXh0IjsKKyAgICBy
ZXR1cm4gdGV4dEF0b20uc3RyaW5nKCk7CiB9CiAKIHVuc2lnbmVkIHNob3J0IFRleHRJbXBsOjpu
b2RlVHlwZSgpIGNvbnN0CkBAIC00NjIsMTEgKzQ2Nyw2IEBAIHZvaWQgVGV4dEltcGw6OmF0dGFj
aCgpCiAgICAgQ2hhcmFjdGVyRGF0YUltcGw6OmF0dGFjaCgpOwogfQogCi1Ob2RlSW1wbDo6SWQg
VGV4dEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfVEVYVDsKLX0KLQogdm9pZCBU
ZXh0SW1wbDo6cmVjYWxjU3R5bGUoIFN0eWxlQ2hhbmdlIGNoYW5nZSApCiB7CiAvLyAgICAgIHFE
ZWJ1ZygidGV4dEltcGw6OnJlY2FsY1N0eWxlIik7CkluZGV4OiBraHRtbC94bWwvZG9tX3RleHRp
bXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwveG1sL2Rv
bV90ZXh0aW1wbC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE2CmRpZmYgLXUgLXAgLXIxLjE2
IGtodG1sL3htbC9kb21fdGV4dGltcGwuaAotLS0ga2h0bWwveG1sL2RvbV90ZXh0aW1wbC5oCTEw
IE1heSAyMDA1IDIxOjU5OjE1IC0wMDAwCTEuMTYKKysrIGtodG1sL3htbC9kb21fdGV4dGltcGwu
aAk4IEp1bCAyMDA1IDA1OjU3OjU5IC0wMDAwCkBAIC05NSwxMyArOTUsMTMgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgfkNvbW1lbnRJbXBsKCk7CiAKICAgICAvLyBET00gbWV0aG9kcyBvdmVycmlk
ZGVuIGZyb20gIHBhcmVudCBjbGFzc2VzCisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5h
bWUoKSBjb25zdDsKICAgICB2aXJ0dWFsIERPTVN0cmluZyBub2RlTmFtZSgpIGNvbnN0OwogICAg
IHZpcnR1YWwgdW5zaWduZWQgc2hvcnQgbm9kZVR5cGUoKSBjb25zdDsKICAgICB2aXJ0dWFsIE5v
ZGVJbXBsICpjbG9uZU5vZGUoYm9vbCBkZWVwKTsKIAogICAgIC8vIE90aGVyIG1ldGhvZHMgKG5v
dCBwYXJ0IG9mIERPTSkKLQotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IGJvb2wgaXNDb21tZW50Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFs
IGJvb2wgY2hpbGRUeXBlQWxsb3dlZCggdW5zaWduZWQgc2hvcnQgdHlwZSApOwogCiAgICAgdmly
dHVhbCBET01TdHJpbmcgdG9TdHJpbmcoKSBjb25zdDsKQEAgLTEyMSw2ICsxMjEsNyBAQCBwdWJs
aWM6CiAgICAgVGV4dEltcGwgKnNwbGl0VGV4dCAoIGNvbnN0IHVuc2lnbmVkIGxvbmcgb2Zmc2V0
LCBpbnQgJmV4Y2VwdGlvbmNvZGUgKTsKIAogICAgIC8vIERPTSBtZXRob2RzIG92ZXJyaWRkZW4g
ZnJvbSAgcGFyZW50IGNsYXNzZXMKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSgp
IGNvbnN0OwogICAgIHZpcnR1YWwgRE9NU3RyaW5nIG5vZGVOYW1lKCkgY29uc3Q7CiAgICAgdmly
dHVhbCB1bnNpZ25lZCBzaG9ydCBub2RlVHlwZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgTm9kZUlt
cGwgKmNsb25lTm9kZShib29sIGRlZXApOwpAQCAtMTI4LDcgKzEyOSw2IEBAIHB1YmxpYzoKICAg
ICAvLyBPdGhlciBtZXRob2RzIChub3QgcGFydCBvZiBET00pCiAKICAgICB2aXJ0dWFsIGJvb2wg
aXNUZXh0Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIElkIGlkKCkg
Y29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaCgpOwogICAgIHZpcnR1YWwgYm9vbCByZW5k
ZXJlcklzTmVlZGVkKGtodG1sOjpSZW5kZXJTdHlsZSAqKTsKICAgICB2aXJ0dWFsIGtodG1sOjpS
ZW5kZXJPYmplY3QgKmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hICosIGtodG1sOjpSZW5kZXJT
dHlsZSAqKTsKSW5kZXg6IGtodG1sL3htbC94bWxfdG9rZW5pemVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC94bWwveG1sX3Rva2VuaXplci5jcHAsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuMzEKZGlmZiAtdSAtcCAtcjEuMzEga2h0bWwveG1sL3htbF90
b2tlbml6ZXIuY3BwCi0tLSBraHRtbC94bWwveG1sX3Rva2VuaXplci5jcHAJNCBNYXkgMjAwNSAy
MToxMToyMyAtMDAwMAkxLjMxCisrKyBraHRtbC94bWwveG1sX3Rva2VuaXplci5jcHAJOCBKdWwg
MjAwNSAwNTo1ODowMCAtMDAwMApAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgInhtbC9kb21f
eG1saW1wbC5oIgogI2luY2x1ZGUgImh0bWwvaHRtbF9oZWFkaW1wbC5oIgogI2luY2x1ZGUgImh0
bWwvaHRtbF90YWJsZWltcGwuaCIKLSNpbmNsdWRlICJtaXNjL2h0bWx0YWdzLmgiCisjaW5jbHVk
ZSAiaHRtbG5hbWVzLmgiCiAjaW5jbHVkZSAibWlzYy9odG1sYXR0cnMuaCIKICNpbmNsdWRlICJt
aXNjL2xvYWRlci5oIgogCkBAIC00NCw2ICs0NCw3IEBAIHVzaW5nIERPTTo6RG9jdW1lbnRJbXBs
OwogdXNpbmcgRE9NOjpEb2N1bWVudFB0cjsKIHVzaW5nIERPTTo6RE9NU3RyaW5nOwogdXNpbmcg
RE9NOjpFbGVtZW50SW1wbDsKK3VzaW5nIERPTTo6SFRNTE5hbWVzOwogdXNpbmcgRE9NOjpIVE1M
U2NyaXB0RWxlbWVudEltcGw7CiB1c2luZyBET006OkhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1w
bDsKIHVzaW5nIERPTTo6Tm9kZTsKQEAgLTMyMiwxOCArMzIzLDE4IEBAIHZvaWQgWE1MVG9rZW5p
emVyOjpzdGFydEVsZW1lbnQoY29uc3QgeG0KICAgICAvLyBGSVhNRTogVGhpcyBoYWNrIGVuc3Vy
ZXMgaW1wbGljaXQgdGFibGUgYm9kaWVzIGdldCBjb25zdHJ1Y3RlZCBpbiBYSFRNTCBhbmQgWE1M
IGZpbGVzLgogICAgIC8vIFdlIHdhbnQgdG8gY29uc29saWRhdGUgdGhpcyB3aXRoIHRoZSBIVE1M
IHBhcnNlciBhbmQgSFRNTCBET00gY29kZSBhdCBzb21lIHBvaW50LgogICAgIC8vIEZvciBub3cs
IGl0J3MgdG9vIHJpc2t5IHRvIHJpcCB0aGF0IGNvZGUgdXAuCi0gICAgaWYgKG1fY3VycmVudE5v
ZGUtPmlkKCkgPT0gSURfVEFCTEUgJiYKLSAgICAgICAgbmV3RWxlbWVudC0+aWQoKSA9PSBJRF9U
UiAmJgorICAgIGlmIChtX2N1cnJlbnROb2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGFibGUo
KSkgJiYKKyAgICAgICAgbmV3RWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRyKCkpICYm
CiAgICAgICAgIG1fY3VycmVudE5vZGUtPmlzSFRNTEVsZW1lbnQoKSAmJiBuZXdFbGVtZW50LT5p
c0hUTUxFbGVtZW50KCkpIHsKICAgICAgICAgTm9kZUltcGwqIGltcGxpY2l0VEJvZHkgPQotICAg
ICAgICAgICBuZXcgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsKCBtX2RvYywgSURfVEJPRFks
IHRydWUgLyogaW1wbGljaXQgKi8gKTsKKyAgICAgICAgICAgbmV3IEhUTUxUYWJsZVNlY3Rpb25F
bGVtZW50SW1wbChIVE1MTmFtZXM6OnRib2R5KCksIG1fZG9jLCB0cnVlIC8qIGltcGxpY2l0ICov
KTsKICAgICAgICAgbV9jdXJyZW50Tm9kZS0+YWRkQ2hpbGQoaW1wbGljaXRUQm9keSk7CiAgICAg
ICAgIGlmIChtX3ZpZXcgJiYgIWltcGxpY2l0VEJvZHktPmF0dGFjaGVkKCkpCiAgICAgICAgICAg
ICBpbXBsaWNpdFRCb2R5LT5hdHRhY2goKTsKICAgICAgICAgbV9jdXJyZW50Tm9kZSA9IGltcGxp
Y2l0VEJvZHk7CiAgICAgfQogCi0gICAgaWYgKG5ld0VsZW1lbnQtPmlkKCkgPT0gSURfU0NSSVBU
KQorICAgIGlmIChuZXdFbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c2NyaXB0KCkpKQog
ICAgICAgICBzdGF0aWNfY2FzdDxIVE1MU2NyaXB0RWxlbWVudEltcGwgKj4obmV3RWxlbWVudCkt
PnNldENyZWF0ZWRCeVBhcnNlcih0cnVlKTsKIAogICAgIGlmIChtX2N1cnJlbnROb2RlLT5hZGRD
aGlsZChuZXdFbGVtZW50KSkgewpAQCAtNjUwLDcgKzY1MSw3IEBAIHZvaWQgWE1MVG9rZW5pemVy
OjphZGRTY3JpcHRzKE5vZGVJbXBsICoKICAgICAvLyBSZWN1cnNpdmVseSBnbyB0aHJvdWdoIHRo
ZSBlbnRpcmUgZG9jdW1lbnQgdHJlZSwgbG9va2luZyBmb3IgaHRtbCA8c2NyaXB0PiB0YWdzLiBG
b3IgZWFjaCBvZiB0aGVzZQogICAgIC8vIHRoYXQgaXMgZm91bmQsIGFkZCBpdCB0byB0aGUgbV9z
Y3JpcHRzIGxpc3QgZnJvbSB3aGljaCB0aGV5IHdpbGwgYmUgZXhlY3V0ZWQKIAotICAgIGlmIChu
LT5pZCgpID09IElEX1NDUklQVCkgeworICAgIGlmIChuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
c2NyaXB0KCkpKSB7CiAgICAgICAgIG1fc2NyaXB0cy5hcHBlbmQoc3RhdGljX2Nhc3Q8SFRNTFNj
cmlwdEVsZW1lbnRJbXBsKj4obikpOwogICAgIH0KIApJbmRleDoga3dxL0RPTS5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3EvRE9NLm1tLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjM2CmRpZmYgLXUgLXAgLXIxLjM2IGt3cS9ET00ubW0KLS0tIGt3cS9ET00ubW0J
MTkgTWF5IDIwMDUgMTg6MzI6MjcgLTAwMDAJMS4zNgorKysga3dxL0RPTS5tbQk4IEp1bCAyMDA1
IDA1OjU4OjAxIC0wMDAwCkBAIC00NCw3ICs0NCw2IEBACiAjaW1wb3J0ICJkb21fdGV4dGltcGwu
aCIKICNpbXBvcnQgImRvbV94bWxpbXBsLmgiCiAjaW1wb3J0ICJodG1sX2VsZW1lbnRpbXBsLmgi
Ci0jaW1wb3J0ICJodG1sdGFncy5oIgogCiAjaW1wb3J0ICJraHRtbF9wYXJ0LmgiCiAKQEAgLTcy
LDYgKzcxLDcgQEAgdXNpbmcgRE9NOjpFbGVtZW50SW1wbDsKIHVzaW5nIERPTTo6RW50aXR5SW1w
bDsKIHVzaW5nIERPTTo6RmlsdGVyTm9kZTsKIHVzaW5nIERPTTo6SFRNTEVsZW1lbnRJbXBsOwor
dXNpbmcgRE9NOjpIVE1MTmFtZXM7CiB1c2luZyBET006Ok5hbWVkTm9kZU1hcEltcGw7CiB1c2lu
ZyBET006Ok5vZGU7CiB1c2luZyBET006Ok5vZGVGaWx0ZXI7CkBAIC0zMzgsNyArMzM4LDggQEAg
dXNpbmcga2h0bWw6OlNoYXJlZFB0cjsKICAgICBBU1NFUlQocHJlZml4KTsKIAogICAgIGludCBl
eGNlcHRpb25Db2RlID0gMDsKLSAgICBbc2VsZiBfbm9kZUltcGxdLT5zZXRQcmVmaXgocHJlZml4
LCBleGNlcHRpb25Db2RlKTsKKyAgICBET01TdHJpbmcgcHJlZml4U3RyKHByZWZpeCk7CisgICAg
W3NlbGYgX25vZGVJbXBsXS0+c2V0UHJlZml4KHByZWZpeFN0ci5pbXBsZW1lbnRhdGlvbigpLCBl
eGNlcHRpb25Db2RlKTsKICAgICByYWlzZU9uRE9NRXJyb3IoZXhjZXB0aW9uQ29kZSk7CiB9CiAK
QEAgLTM5OSwxNTQgKzQwMCwxMjMgQEAgdXNpbmcga2h0bWw6OlNoYXJlZFB0cjsKICAgICBzd2l0
Y2ggKGltcGwtPm5vZGVUeXBlKCkpIHsKICAgICAgICAgY2FzZSBOb2RlOjpFTEVNRU5UX05PREU6
CiAgICAgICAgICAgICBpZiAoaW1wbC0+aXNIVE1MRWxlbWVudCgpKSB7Ci0gICAgICAgICAgICAg
ICAgLy8gRklYTUU6IFRoZXJlIGFyZSBubyBpZGVudGlmaWVycyBmb3IgSFRNTEhlYWRpbmdFbGVt
ZW50LCBIVE1MTW9kRWxlbWVudCwgCi0gICAgICAgICAgICAgICAgLy8gSFRNTFRhYmxlQ2FwdGlv
bkVsZW1lbnQsIEhUTUxUYWJsZUNvbEVsZW1lbnQsIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50Lgot
ICAgICAgICAgICAgICAgIC8vIEZpbmQgb3RoZXIgd2F5cyB0byBpZGVudGlmeSB0aGVtLgotICAg
ICAgICAgICAgICAgIHN3aXRjaCAoaW1wbC0+aWRlbnRpZmllcigpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGNhc2UgSURfSFRNTDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFz
cyA9IFtET01IVE1MSHRtbEVsZW1lbnQgY2xhc3NdOwotICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfSEVBRDoKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MSGVhZEVsZW1lbnQgY2xhc3NdOwotICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURf
TElOSzoKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MTGlu
a0VsZW1lbnQgY2xhc3NdOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgICAgIGNhc2UgSURfVElUTEU6Ci0gICAgICAgICAgICAgICAgICAgICAgICB3cmFw
cGVyQ2xhc3MgPSBbRE9NSFRNTFRpdGxlRWxlbWVudCBjbGFzc107Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9NRVRBOgotICAgICAg
ICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxNZXRhRWxlbWVudCBjbGFz
c107Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAg
Y2FzZSBJRF9CQVNFOgotICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RP
TUhUTUxCYXNlRWxlbWVudCBjbGFzc107Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9JU0lOREVYOgotICAgICAgICAgICAgICAgICAg
ICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxJc0luZGV4RWxlbWVudCBjbGFzc107Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9T
VFlMRToKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MU3R5
bGVFbGVtZW50IGNsYXNzXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgICAgICBjYXNlIElEX0JPRFk6Ci0gICAgICAgICAgICAgICAgICAgICAgICB3cmFw
cGVyQ2xhc3MgPSBbRE9NSFRNTEJvZHlFbGVtZW50IGNsYXNzXTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0ZPUk06Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTEZvcm1FbGVtZW50IGNsYXNz
XTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBj
YXNlIElEX1NFTEVDVDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtE
T01IVE1MU2VsZWN0RWxlbWVudCBjbGFzc107Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9PUFRHUk9VUDoKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MT3B0R3JvdXBFbGVtZW50IGNsYXNzXTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNl
IElEX09QVElPTjoKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01I
VE1MT3B0aW9uRWxlbWVudCBjbGFzc107Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9JTlBVVDoKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MSW5wdXRFbGVtZW50IGNsYXNzXTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX1RFWFRB
UkVBOgotICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxUZXh0
QXJlYUVsZW1lbnQgY2xhc3NdOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgICAgIGNhc2UgSURfQlVUVE9OOgotICAgICAgICAgICAgICAgICAgICAgICAg
d3JhcHBlckNsYXNzID0gW0RPTUhUTUxCdXR0b25FbGVtZW50IGNsYXNzXTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0xBQkVMOgot
ICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxMYWJlbEVsZW1l
bnQgY2xhc3NdOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7ICAKLSAgICAgICAgICAg
ICAgICAgICAgY2FzZSBJRF9GSUVMRFNFVDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBw
ZXJDbGFzcyA9IFtET01IVE1MRmllbGRTZXRFbGVtZW50IGNsYXNzXTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOyAgICAgIAotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0xFR0VO
RDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MTGVnZW5k
RWxlbWVudCBjbGFzc107Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICAgICAgY2FzZSBJRF9VTDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJD
bGFzcyA9IFtET01IVE1MVUxpc3RFbGVtZW50IGNsYXNzXTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX09MOgotICAgICAgICAgICAg
ICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxPTGlzdEVsZW1lbnQgY2xhc3NdOwot
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2Ug
SURfREw6Ci0gICAgICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTERM
aXN0RWxlbWVudCBjbGFzc107Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICAgICAgY2FzZSBJRF9ESVI6Ci0gICAgICAgICAgICAgICAgICAgICAgICB3cmFw
cGVyQ2xhc3MgPSBbRE9NSFRNTERpcmVjdG9yeUVsZW1lbnQgY2xhc3NdOwotICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfTUVOVToKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MTWVudUVsZW1lbnQg
Y2xhc3NdOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ICAgIGNhc2UgSURfTEk6Ci0gICAgICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBb
RE9NSFRNTExJRWxlbWVudCBjbGFzc107Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9ESVY6Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTERpdkVsZW1lbnQgY2xhc3NdOwotICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfUDoKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MUGFyYWdyYXBoRWxlbWVu
dCBjbGFzc107Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICAgICAgY2FzZSBJRF9ROgotICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0g
W0RPTUhUTUxRdW90ZUVsZW1lbnQgY2xhc3NdOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfUFJFOgotICAgICAgICAgICAgICAgICAg
ICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxQcmVFbGVtZW50IGNsYXNzXTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0JSOgot
ICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxCUkVsZW1lbnQg
Y2xhc3NdOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ICAgIGNhc2UgSURfQkFTRUZPTlQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xh
c3MgPSBbRE9NSFRNTEZvbnRFbGVtZW50IGNsYXNzXTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0ZPTlQ6Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTEZvbnRFbGVtZW50IGNsYXNzXTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIElE
X0hSOgotICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxIUkVs
ZW1lbnQgY2xhc3NdOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgICAgIGNhc2UgSURfQToKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFz
cyA9IFtET01IVE1MQW5jaG9yRWxlbWVudCBjbGFzc107Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9JTUc6Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTEltYWdlRWxlbWVudCBjbGFzc107Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJ
RF9PQkpFQ1Q6Ci0gICAgICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRN
TE9iamVjdEVsZW1lbnQgY2xhc3NdOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgICAgIGNhc2UgSURfUEFSQU06Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTFBhcmFtRWxlbWVudCBjbGFzc107Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9BUFBMRVQ6
Ci0gICAgICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTEFwcGxldEVs
ZW1lbnQgY2xhc3NdOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgICAgIGNhc2UgSURfTUFQOgotICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNs
YXNzID0gW0RPTUhUTUxNYXBFbGVtZW50IGNsYXNzXTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0FSRUE6Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTEFyZWFFbGVtZW50IGNsYXNzXTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIElE
X1NDUklQVDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1M
U2NyaXB0RWxlbWVudCBjbGFzc107Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICAgICAgY2FzZSBJRF9UQUJMRToKLSAgICAgICAgICAgICAgICAgICAgICAg
IHdyYXBwZXJDbGFzcyA9IFtET01IVE1MVGFibGVFbGVtZW50IGNsYXNzXTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX1REOgotICAg
ICAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxUYWJsZUNlbGxFbGVt
ZW50IGNsYXNzXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgICAgICBjYXNlIElEX1RSOgotICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNz
ID0gW0RPTUhUTUxUYWJsZVJvd0VsZW1lbnQgY2xhc3NdOwotICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfRlJBTUVTRVQ6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTEZyYW1lU2V0RWxlbWVudCBj
bGFzc107Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAg
ICAgY2FzZSBJRF9GUkFNRToKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9
IFtET01IVE1MRnJhbWVFbGVtZW50IGNsYXNzXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0lGUkFNRToKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MSUZyYW1lRWxlbWVudCBjbGFzc107Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MRWxlbWVu
dCBjbGFzc107Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBS
ZWZsZWN0IG1hcnF1ZWUgb25jZSB0aGUgQVBJIGhhcyBiZWVuIGRldGVybWluZWQuCisgICAgICAg
ICAgICAgICAgLy8gRklYTUU6IFdlIGNvdWxkIG1ha2UgdGhlIEhUTUwgY2xhc3NlcyBoYW5kIGJh
Y2sgdGhlaXIgY2xhc3MgbmFtZXMgYW5kIHRoZW4gdXNlIHRoYXQgdG8gbWFrZQorICAgICAgICAg
ICAgICAgIC8vIHRoZSBhcHByb3ByaWF0ZSBPYmotQyBjbGFzcyBmcm9tIHRoZSBzdHJpbmcuCisg
ICAgICAgICAgICAgICAgSFRNTEVsZW1lbnRJbXBsKiBodG1sRWx0ID0gc3RhdGljX2Nhc3Q8SFRN
TEVsZW1lbnRJbXBsKj4oaW1wbCk7CisgICAgICAgICAgICAgICAgaWYgKGh0bWxFbHQtPmhhc0xv
Y2FsTmFtZShIVE1MTmFtZXM6Omh0bWwoKSkpCisgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJD
bGFzcyA9IFtET01IVE1MSHRtbEVsZW1lbnQgY2xhc3NdOworICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKGh0bWxFbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmhlYWQoKSkpCisgICAgICAgICAg
ICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MSGVhZEVsZW1lbnQgY2xhc3NdOworICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKGh0bWxFbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Omxp
bmsoKSkpCisgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MTGlua0Vs
ZW1lbnQgY2xhc3NdOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGh0bWxFbHQtPmhhc0xvY2Fs
TmFtZShIVE1MTmFtZXM6OnRpdGxlKCkpKQorICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xh
c3MgPSBbRE9NSFRNTFRpdGxlRWxlbWVudCBjbGFzc107CisgICAgICAgICAgICAgICAgZWxzZSBp
ZiAoaHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6bWV0YSgpKSkKKyAgICAgICAgICAg
ICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxNZXRhRWxlbWVudCBjbGFzc107CisgICAg
ICAgICAgICAgICAgZWxzZSBpZiAoaHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6YmFz
ZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxCYXNlRWxl
bWVudCBjbGFzc107CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaHRtbEVsdC0+aGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6aXNpbmRleCgpKSkKKyAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNs
YXNzID0gW0RPTUhUTUxJc0luZGV4RWxlbWVudCBjbGFzc107CisgICAgICAgICAgICAgICAgZWxz
ZSBpZiAoaHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6c3R5bGUoKSkpCisgICAgICAg
ICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MU3R5bGVFbGVtZW50IGNsYXNzXTsK
KyAgICAgICAgICAgICAgICBlbHNlIGlmIChodG1sRWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVz
Ojpib2R5KCkpKQorICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTEJv
ZHlFbGVtZW50IGNsYXNzXTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChodG1sRWx0LT5oYXNM
b2NhbE5hbWUoSFRNTE5hbWVzOjpmb3JtKCkpKQorICAgICAgICAgICAgICAgICAgICB3cmFwcGVy
Q2xhc3MgPSBbRE9NSFRNTEZvcm1FbGVtZW50IGNsYXNzXTsKKyAgICAgICAgICAgICAgICBlbHNl
IGlmIChodG1sRWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpzZWxlY3QoKSkpCisgICAgICAg
ICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MU2VsZWN0RWxlbWVudCBjbGFzc107
CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1l
czo6b3B0Z3JvdXAoKSkpCisgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01I
VE1MT3B0R3JvdXBFbGVtZW50IGNsYXNzXTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChodG1s
RWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvcHRpb24oKSkpCisgICAgICAgICAgICAgICAg
ICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MT3B0aW9uRWxlbWVudCBjbGFzc107CisgICAgICAg
ICAgICAgICAgZWxzZSBpZiAoaHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6aW5wdXQo
KSkpCisgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MSW5wdXRFbGVt
ZW50IGNsYXNzXTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChodG1sRWx0LT5oYXNMb2NhbE5h
bWUoSFRNTE5hbWVzOjp0ZXh0YXJlYSgpKSkKKyAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNs
YXNzID0gW0RPTUhUTUxUZXh0QXJlYUVsZW1lbnQgY2xhc3NdOworICAgICAgICAgICAgICAgIGVs
c2UgaWYgKGh0bWxFbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmJ1dHRvbigpKSkKKyAgICAg
ICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxCdXR0b25FbGVtZW50IGNsYXNz
XTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChodG1sRWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5h
bWVzOjpsYWJlbCgpKSkKKyAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhU
TUxMYWJlbEVsZW1lbnQgY2xhc3NdOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGh0bWxFbHQt
Pmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmZpZWxkc2V0KCkpKQorICAgICAgICAgICAgICAgICAg
ICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTEZpZWxkU2V0RWxlbWVudCBjbGFzc107CisgICAgICAg
ICAgICAgICAgZWxzZSBpZiAoaHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6bGVnZW5k
KCkpKQorICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTExlZ2VuZEVs
ZW1lbnQgY2xhc3NdOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGh0bWxFbHQtPmhhc0xvY2Fs
TmFtZShIVE1MTmFtZXM6OnVsKCkpKQorICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3Mg
PSBbRE9NSFRNTFVMaXN0RWxlbWVudCBjbGFzc107CisgICAgICAgICAgICAgICAgZWxzZSBpZiAo
aHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b2woKSkpICAgICAgICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxPTGlzdEVs
ZW1lbnQgY2xhc3NdOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGh0bWxFbHQtPmhhc0xvY2Fs
TmFtZShIVE1MTmFtZXM6OmRsKCkpKQorICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3Mg
PSBbRE9NSFRNTERMaXN0RWxlbWVudCBjbGFzc107CisgICAgICAgICAgICAgICAgZWxzZSBpZiAo
aHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6ZGlyKCkpKQorICAgICAgICAgICAgICAg
ICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTERpcmVjdG9yeUVsZW1lbnQgY2xhc3NdOworICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKGh0bWxFbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om1l
bnUoKSkpCisgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MTWVudUVs
ZW1lbnQgY2xhc3NdOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGh0bWxFbHQtPmhhc0xvY2Fs
TmFtZShIVE1MTmFtZXM6OmxpKCkpKQorICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3Mg
PSBbRE9NSFRNTExJRWxlbWVudCBjbGFzc107CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaHRt
bEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6ZGl2KCkpKQorICAgICAgICAgICAgICAgICAg
ICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTERpdkVsZW1lbnQgY2xhc3NdOworICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKGh0bWxFbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnAoKSkpCisgICAg
ICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MUGFyYWdyYXBoRWxlbWVudCBj
bGFzc107CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhU
TUxOYW1lczo6aDEoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICBodG1sRWx0LT5oYXNM
b2NhbE5hbWUoSFRNTE5hbWVzOjpoMigpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgIGh0
bWxFbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmgzKCkpIHx8CisgICAgICAgICAgICAgICAg
ICAgICAgICAgaHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6aDQoKSkgfHwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICBodG1sRWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpoNSgp
KSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWxFbHQtPmhhc0xvY2FsTmFtZShIVE1M
TmFtZXM6Omg2KCkpKQorICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRN
TEhlYWRpbmdFbGVtZW50IGNsYXNzXTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChodG1sRWx0
LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpxKCkpKQorICAgICAgICAgICAgICAgICAgICB3cmFw
cGVyQ2xhc3MgPSBbRE9NSFRNTFF1b3RlRWxlbWVudCBjbGFzc107CisgICAgICAgICAgICAgICAg
ZWxzZSBpZiAoaHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6cHJlKCkpKQorICAgICAg
ICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTFByZUVsZW1lbnQgY2xhc3NdOwor
ICAgICAgICAgICAgICAgIGVsc2UgaWYgKGh0bWxFbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6
OmJyKCkpKQorICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTEJSRWxl
bWVudCBjbGFzc107CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaHRtbEVsdC0+aGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6YmFzZWZvbnQoKSkpCisgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJD
bGFzcyA9IFtET01IVE1MQmFzZUZvbnRFbGVtZW50IGNsYXNzXTsKKyAgICAgICAgICAgICAgICBl
bHNlIGlmIChodG1sRWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpmb250KCkpKQorICAgICAg
ICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTEZvbnRFbGVtZW50IGNsYXNzXTsK
KyAgICAgICAgICAgICAgICBlbHNlIGlmIChodG1sRWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVz
OjpocigpKSkKKyAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxIUkVs
ZW1lbnQgY2xhc3NdOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGh0bWxFbHQtPmhhc0xvY2Fs
TmFtZShIVE1MTmFtZXM6OmEoKSkpCisgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9
IFtET01IVE1MQW5jaG9yRWxlbWVudCBjbGFzc107CisgICAgICAgICAgICAgICAgZWxzZSBpZiAo
aHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6aW1nKCkpIHx8CisgICAgICAgICAgICAg
ICAgICAgICAgICAgaHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6Y2FudmFzKCkpKQor
ICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTEltYWdlRWxlbWVudCBj
bGFzc107CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhU
TUxOYW1lczo6b2JqZWN0KCkpKQorICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBb
RE9NSFRNTE9iamVjdEVsZW1lbnQgY2xhc3NdOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGh0
bWxFbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnBhcmFtKCkpKQorICAgICAgICAgICAgICAg
ICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTFBhcmFtRWxlbWVudCBjbGFzc107CisgICAgICAg
ICAgICAgICAgZWxzZSBpZiAoaHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6YXBwbGV0
KCkpKQorICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTEFwcGxldEVs
ZW1lbnQgY2xhc3NdOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGh0bWxFbHQtPmhhc0xvY2Fs
TmFtZShIVE1MTmFtZXM6Om1hcCgpKSkKKyAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNz
ID0gW0RPTUhUTUxNYXBFbGVtZW50IGNsYXNzXTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmICho
dG1sRWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjphcmVhKCkpKQorICAgICAgICAgICAgICAg
ICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTEFyZWFFbGVtZW50IGNsYXNzXTsKKyAgICAgICAg
ICAgICAgICBlbHNlIGlmIChodG1sRWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpzY3JpcHQo
KSkpCisgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MU2NyaXB0RWxl
bWVudCBjbGFzc107CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaHRtbEVsdC0+aGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6dGFibGUoKSkpCisgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFz
cyA9IFtET01IVE1MVGFibGVFbGVtZW50IGNsYXNzXTsKKyAgICAgICAgICAgICAgICBlbHNlIGlm
IChodG1sRWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0aGVhZCgpKSB8fAorICAgICAgICAg
ICAgICAgICAgICAgICAgIGh0bWxFbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnRib2R5KCkp
IHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxO
YW1lczo6dGZvb3QoKSkpCisgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01I
VE1MVGFibGVTZWN0aW9uRWxlbWVudCBjbGFzc107CisgICAgICAgICAgICAgICAgZWxzZSBpZiAo
aHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dGQoKSkpCisgICAgICAgICAgICAgICAg
ICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MVGFibGVDZWxsRWxlbWVudCBjbGFzc107CisgICAg
ICAgICAgICAgICAgZWxzZSBpZiAoaHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dHIo
KSkpCisgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MVGFibGVSb3dF
bGVtZW50IGNsYXNzXTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChodG1sRWx0LT5oYXNMb2Nh
bE5hbWUoSFRNTE5hbWVzOjpjb2woKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICBodG1s
RWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpjb2xncm91cCgpKSkKKyAgICAgICAgICAgICAg
ICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxUYWJsZUNvbEVsZW1lbnQgY2xhc3NdOworICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKGh0bWxFbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmNh
cHRpb24oKSkpCisgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MVGFi
bGVDYXB0aW9uRWxlbWVudCBjbGFzc107CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaHRtbEVs
dC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6ZnJhbWVzZXQoKSkpCisgICAgICAgICAgICAgICAg
ICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MRnJhbWVTZXRFbGVtZW50IGNsYXNzXTsKKyAgICAg
ICAgICAgICAgICBlbHNlIGlmIChodG1sRWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpmcmFt
ZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxGcmFtZUVs
ZW1lbnQgY2xhc3NdOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGh0bWxFbHQtPmhhc0xvY2Fs
TmFtZShIVE1MTmFtZXM6OmlmcmFtZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNs
YXNzID0gW0RPTUhUTUxJRnJhbWVFbGVtZW50IGNsYXNzXTsKKyAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MRWxlbWVudCBjbGFz
c107CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9
IFtET01FbGVtZW50IGNsYXNzXTsKICAgICAgICAgICAgIH0KQEAgLTEyNjgsNyArMTIzOCw3IEBA
IHVzaW5nIGtodG1sOjpTaGFyZWRQdHI7CiAKIC0gKE5TU3RyaW5nICopdGFnTmFtZQogewotICAg
IHJldHVybiBbc2VsZiBfZWxlbWVudEltcGxdLT50YWdOYW1lKCk7CisgICAgcmV0dXJuIFtzZWxm
IF9lbGVtZW50SW1wbF0tPm5vZGVOYW1lKCk7CiB9CiAKIC0gKERPTU5hbWVkTm9kZU1hcCAqKWF0
dHJpYnV0ZXMKSW5kZXg6IGt3cS9ET01IVE1MLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9XZWJDb3JlL2t3cS9ET01IVE1MLm1tLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE4CmRp
ZmYgLXUgLXAgLXIxLjE4IGt3cS9ET01IVE1MLm1tCi0tLSBrd3EvRE9NSFRNTC5tbQkxMyBNYXkg
MjAwNSAxNjo0ODo1MSAtMDAwMAkxLjE4CisrKyBrd3EvRE9NSFRNTC5tbQk4IEp1bCAyMDA1IDA1
OjU4OjAzIC0wMDAwCkBAIC03NCw3ICs3NCw2IEBAIHVzaW5nIERPTTo6SFRNTEZvcm1Db2xsZWN0
aW9uSW1wbDsKIHVzaW5nIERPTTo6SFRNTEZvcm1FbGVtZW50SW1wbDsKIHVzaW5nIERPTTo6SFRN
TEZyYW1lRWxlbWVudEltcGw7CiB1c2luZyBET006OkhUTUxGcmFtZVNldEVsZW1lbnRJbXBsOwot
dXNpbmcgRE9NOjpIVE1MR2VuZXJpY0VsZW1lbnRJbXBsOwogdXNpbmcgRE9NOjpIVE1MR2VuZXJp
Y0Zvcm1FbGVtZW50SW1wbDsKIHVzaW5nIERPTTo6SFRNTEhlYWRFbGVtZW50SW1wbDsKIHVzaW5n
IERPTTo6SFRNTEhlYWRpbmdFbGVtZW50SW1wbDsKQEAgLTE5MDUsOSArMTkwNCw5IEBAIHVzaW5n
IERPTTo6Tm9kZUltcGw7CiAKIEBpbXBsZW1lbnRhdGlvbiBET01IVE1MUXVvdGVFbGVtZW50CiAK
LS0gKEhUTUxHZW5lcmljRWxlbWVudEltcGwgKilfcXVvdGVFbGVtZW50SW1wbAorLSAoSFRNTEVs
ZW1lbnRJbXBsICopX3F1b3RlRWxlbWVudEltcGwKIHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
SFRNTEdlbmVyaWNFbGVtZW50SW1wbCAqPihET01fY2FzdDxOb2RlSW1wbCAqPihfaW50ZXJuYWwp
KTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KERPTV9jYXN0PE5v
ZGVJbXBsICo+KF9pbnRlcm5hbCkpOwogfQogCiAtIChOU1N0cmluZyAqKWNpdGUKSW5kZXg6IGt3
cS9LV1FBY2NPYmplY3QubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUv
a3dxL0tXUUFjY09iamVjdC5tbSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS42OApkaWZmIC11IC1w
IC1yMS42OCBrd3EvS1dRQWNjT2JqZWN0Lm1tCi0tLSBrd3EvS1dRQWNjT2JqZWN0Lm1tCTUgSnVu
IDIwMDUgMDc6MDY6NTIgLTAwMDAJMS42OAorKysga3dxL0tXUUFjY09iamVjdC5tbQk4IEp1bCAy
MDA1IDA1OjU4OjA1IC0wMDAwCkBAIC00OCw3ICs0OCw2IEBACiAjaW1wb3J0ICJkb20yX2V2ZW50
c2ltcGwuaCIKICNpbXBvcnQgImRvbTJfcmFuZ2UuaCIKICNpbXBvcnQgImh0bWxhdHRycy5oIgot
I2ltcG9ydCAiaHRtbHRhZ3MuaCIKICNpbXBvcnQgImtodG1sdmlldy5oIgogI2ltcG9ydCAia2h0
bWxfcGFydC5oIgogI2ltcG9ydCAicmVuZGVyX2NhbnZhcy5oIgpAQCAtNzcsNiArNzYsNyBAQCB1
c2luZyBET006OkhUTUxDb2xsZWN0aW9uSW1wbDsKIHVzaW5nIERPTTo6SFRNTEVsZW1lbnRJbXBs
OwogdXNpbmcgRE9NOjpIVE1MSW5wdXRFbGVtZW50SW1wbDsKIHVzaW5nIERPTTo6SFRNTE1hcEVs
ZW1lbnRJbXBsOwordXNpbmcgRE9NOjpIVE1MTmFtZXM7CiB1c2luZyBET006Ok5vZGU7CiB1c2lu
ZyBET006Ok5vZGVJbXBsOwogdXNpbmcgRE9NOjpQb3NpdGlvbjsKQEAgLTM2Niw3ICszNjYsNyBA
QCB1c2luZyBraHRtbDo6VmlzaWJsZVBvc2l0aW9uOwogICAgIH0KICAgICBpZiAobV9yZW5kZXJl
ci0+aXNMaXN0TWFya2VyKCkpCiAgICAgICAgIHJldHVybiBAIkFYTGlzdE1hcmtlciI7Ci0gICAg
aWYgKG1fcmVuZGVyZXItPmVsZW1lbnQoKSAmJiBtX3JlbmRlcmVyLT5lbGVtZW50KCktPmlkZW50
aWZpZXIoKSA9PSBJRF9CVVRUT04pCisgICAgaWYgKG1fcmVuZGVyZXItPmVsZW1lbnQoKSAmJiBt
X3JlbmRlcmVyLT5lbGVtZW50KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpidXR0b24oKSkpCiAg
ICAgICAgIHJldHVybiBOU0FjY2Vzc2liaWxpdHlCdXR0b25Sb2xlOwogICAgIGlmIChtX3JlbmRl
cmVyLT5pc1RleHQoKSkKICAgICAgICAgcmV0dXJuIE5TQWNjZXNzaWJpbGl0eVN0YXRpY1RleHRS
b2xlOwpAQCAtNTMyLDcgKzUzMiw3IEBAIHVzaW5nIGtodG1sOjpWaXNpYmxlUG9zaXRpb247CiAg
ICAgaWYgKCFtX3JlbmRlcmVyIHx8IG1fYXJlYUVsZW1lbnQgfHwgIW1fcmVuZGVyZXItPmVsZW1l
bnQoKSkKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAKLSAgICBpZiAobV9yZW5kZXJlci0+ZWxl
bWVudCgpLT5pc0hUTUxFbGVtZW50KCkgJiYgbV9yZW5kZXJlci0+ZWxlbWVudCgpLT5pZGVudGlm
aWVyKCkgPT0gSURfQlVUVE9OKQorICAgIGlmIChtX3JlbmRlcmVyLT5lbGVtZW50KCktPmlzSFRN
TEVsZW1lbnQoKSAmJiBtX3JlbmRlcmVyLT5lbGVtZW50KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjpidXR0b24oKSkpCiAgICAgICAgIHJldHVybiBbc2VsZiB0ZXh0VW5kZXJFbGVtZW50XTsKICAg
ICBpZiAobV9yZW5kZXJlci0+ZWxlbWVudCgpLT5pc0xpbmsoKSkKICAgICAgICAgcmV0dXJuIFtz
ZWxmIHRleHRVbmRlckVsZW1lbnRdOwpAQCAtNjIyLDcgKzYyMiw3IEBAIHN0YXRpYyBRUmVjdCBi
b3VuZGluZ0JveFJlY3QoUmVuZGVyT2JqZWMKICAgICByZXR1cm4gKCFtX3JlbmRlcmVyLT5pc0xp
c3RNYXJrZXIoKSAmJiAhbV9yZW5kZXJlci0+aXNDYW52YXMoKSAmJiAKICAgICAgICAgICAgICFt
X3JlbmRlcmVyLT5pc0ltYWdlKCkgJiYKICAgICAgICAgICAgICEobV9yZW5kZXJlci0+ZWxlbWVu
dCgpICYmIG1fcmVuZGVyZXItPmVsZW1lbnQoKS0+aXNIVE1MRWxlbWVudCgpICYmCi0gICAgICAg
ICAgICAgIG1fcmVuZGVyZXItPmVsZW1lbnQoKS0+aWRlbnRpZmllcigpID09IElEX0JVVFRPTikp
OworICAgICAgICAgICAgICBtX3JlbmRlcmVyLT5lbGVtZW50KCktPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjpidXR0b24oKSkpKTsKIH0KIAogLSAoTlNBcnJheSAqKWFjY2Vzc2liaWxpdHlBdHRyaWJ1
dGVOYW1lcwpJbmRleDoga3dxL0tXUURPTU5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IGt3
cS9LV1FET01Ob2RlLmNwcApkaWZmIC1OIGt3cS9LV1FET01Ob2RlLmNwcAotLS0ga3dxL0tXUURP
TU5vZGUuY3BwCTExIEp1bCAyMDAzIDE2OjI0OjM3IC0wMDAwCTEuOQorKysgL2Rldi9udWxsCTEg
SmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKQEAgLTEsMzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwMyBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW5jbHVkZSAiS1dRRE9NTm9kZS5oIgotCi11c2luZyBET006Ok5vZGVJbXBsOwotCi0v
LyBUaGlzIG5lZWRzIHRvIGJlIGluIGEgQysrIHNvdXJjZSBmaWxlIGJlY2F1c2UgaWQgaXMgYSBy
ZXNlcnZlZCB3b3JkIGluIE9iamVjdGl2ZS1DKysuCi1Ob2RlSW1wbDo6SWQgaWRGcm9tTm9kZShO
b2RlSW1wbCAqbm9kZSkKLXsKLSAgICByZXR1cm4gbm9kZS0+aWQoKTsKLX0KSW5kZXg6IGt3cS9L
V1FET01Ob2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZToga3dxL0tXUURPTU5vZGUuaApkaWZmIC1O
IGt3cS9LV1FET01Ob2RlLmgKLS0tIGt3cS9LV1FET01Ob2RlLmgJMTEgSnVsIDIwMDMgMTY6MjQ6
MzcgLTAwMDAJMS41CisrKyAvZGV2L251bGwJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMApAQCAt
MSwyOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDAzIEFwcGxlIENvbXB1dGVyLCBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJkb21fbm9kZWltcGwu
aCIKLQotRE9NOjpOb2RlSW1wbDo6SWQgaWRGcm9tTm9kZShET006Ok5vZGVJbXBsICopOwpJbmRl
eDoga3dxL0tXUUZvbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9r
d3EvS1dRRm9udC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjMxCmRpZmYgLXUgLXAgLXIxLjMx
IGt3cS9LV1FGb250LmgKLS0tIGt3cS9LV1FGb250LmgJNCBBcHIgMjAwMyAxNjo1NjowMiAtMDAw
MAkxLjMxCisrKyBrd3EvS1dRRm9udC5oCTggSnVsIDIwMDUgMDU6NTg6MDUgLTAwMDAKQEAgLTM3
LDYgKzM3LDcgQEAgY2xhc3MgTlNGb250OwogY2xhc3MgUUZvbnQgewogcHVibGljOgogICAgIGVu
dW0gV2VpZ2h0IHsgTm9ybWFsID0gNTAsIEJvbGQgPSA2MyB9OworICAgIGVudW0gUGl0Y2ggeyBV
bmtub3duLCBGaXhlZCwgVmFyaWFibGUgfTsKIAogICAgIFFGb250KCk7CiAgICAgflFGb250KCk7
CkBAIC02MSw3ICs2Miw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFBpeGVsU2l6ZShmbG9hdCBz
KTsKICAgICBpbnQgcGl4ZWxTaXplKCkgY29uc3QgeyByZXR1cm4gKGludClfc2l6ZTsgfQogCi0g
ICAgYm9vbCBpc0ZpeGVkUGl0Y2goKSBjb25zdDsKKyAgICBib29sIGlzRml4ZWRQaXRjaCgpIGNv
bnN0IHsgaWYgKF9waXRjaCA9PSBVbmtub3duKSBkZXRlcm1pbmVQaXRjaCgpOyByZXR1cm4gX3Bp
dGNoID09IEZpeGVkOyB9OworICAgIHZvaWQgZGV0ZXJtaW5lUGl0Y2goKSBjb25zdDsKICAgICAK
ICAgICB2b2lkIHNldFByaW50ZXJGb250KGJvb2wpOwogICAgIGJvb2wgaXNQcmludGVyRm9udCgp
IGNvbnN0IHsgcmV0dXJuIF9pc1ByaW50ZXJGb250OyB9CkBAIC03OSw3ICs4MSw4IEBAIHByaXZh
dGU6CiAgICAgS1dRRm9udEZhbWlseSBfZmFtaWx5OwogICAgIGludCBfdHJhaXQ7CiAgICAgZmxv
YXQgX3NpemU7Ci0gICAgYm9vbCBfaXNQcmludGVyRm9udDsKKyAgICBib29sIF9pc1ByaW50ZXJG
b250IDogMTsKKyAgICBtdXRhYmxlIFBpdGNoIF9waXRjaCA6IDI7CiAgICAgbXV0YWJsZSBOU0Zv
bnQgKl9OU0ZvbnQ7CiB9OwogCkluZGV4OiBrd3EvS1dRRm9udC5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3EvS1dRRm9udC5tbSx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS40NQpkaWZmIC11IC1wIC1yMS40NSBrd3EvS1dRRm9udC5tbQotLS0ga3dxL0tXUUZvbnQu
bW0JOSBNYXIgMjAwNSAyMjozMDoyNSAtMDAwMAkxLjQ1CisrKyBrd3EvS1dRRm9udC5tbQk4IEp1
bCAyMDA1IDA1OjU4OjA1IC0wMDAwCkBAIC0zNCw2ICszNCw3IEBAIFFGb250OjpRRm9udCgpCiAg
ICAgOiBfdHJhaXQoMCkKICAgICAsIF9zaXplKDEyLjApCiAgICAgLCBfaXNQcmludGVyRm9udChm
YWxzZSkKKyAgICAsIF9waXRjaChVbmtub3duKQogICAgICwgX05TRm9udCgwKQogewogfQpAQCAt
NDgsNiArNDksNyBAQCBRRm9udDo6UUZvbnQoY29uc3QgUUZvbnQgJm90aGVyKQogICAgICwgX3Ry
YWl0KG90aGVyLl90cmFpdCkKICAgICAsIF9zaXplKG90aGVyLl9zaXplKQogICAgICwgX2lzUHJp
bnRlckZvbnQob3RoZXIuX2lzUHJpbnRlckZvbnQpCisgICAgLCBfcGl0Y2gob3RoZXIuX3BpdGNo
KQogICAgICwgX05TRm9udChLV1FSZXRhaW4ob3RoZXIuX05TRm9udCkpCiB7CiB9CkBAIC01OCw2
ICs2MCw3IEBAIFFGb250ICZRRm9udDo6b3BlcmF0b3I9KGNvbnN0IFFGb250ICZvdGgKICAgICBf
dHJhaXQgPSBvdGhlci5fdHJhaXQ7CiAgICAgX3NpemUgPSBvdGhlci5fc2l6ZTsKICAgICBfaXNQ
cmludGVyRm9udCA9IG90aGVyLl9pc1ByaW50ZXJGb250OworICAgIF9waXRjaCA9IG90aGVyLl9w
aXRjaDsKICAgICBLV1FSZXRhaW4ob3RoZXIuX05TRm9udCk7CiAgICAgS1dRUmVsZWFzZShfTlNG
b250KTsKICAgICBfTlNGb250ID0gb3RoZXIuX05TRm9udDsKQEAgLTE0NiwyMSArMTQ5LDIzIEBA
IGJvb2wgUUZvbnQ6OmJvbGQoKSBjb25zdAogICAgIHJldHVybiBfdHJhaXQgJiBOU0JvbGRGb250
TWFzazsKIH0KIAotYm9vbCBRRm9udDo6aXNGaXhlZFBpdGNoKCkgY29uc3QKK3ZvaWQgUUZvbnQ6
OmRldGVybWluZVBpdGNoKCkgY29uc3QKIHsKICAgICBLV1FfQkxPQ0tfRVhDRVBUSU9OUzsKLSAg
ICByZXR1cm4gW1tXZWJDb3JlVGV4dFJlbmRlcmVyRmFjdG9yeSBzaGFyZWRGYWN0b3J5XSBpc0Zv
bnRGaXhlZFBpdGNoOiBnZXROU0ZvbnQoKV07CisgICAgaWYgKFtbV2ViQ29yZVRleHRSZW5kZXJl
ckZhY3Rvcnkgc2hhcmVkRmFjdG9yeV0gaXNGb250Rml4ZWRQaXRjaDogZ2V0TlNGb250KCldKQor
ICAgICAgICBfcGl0Y2ggPSBGaXhlZDsKKyAgICBlbHNlCisgICAgICAgIF9waXRjaCA9IFZhcmlh
YmxlOwogICAgIEtXUV9VTkJMT0NLX0VYQ0VQVElPTlM7Ci0gICAgcmV0dXJuIGZhbHNlOwogfQog
Ci0KIGJvb2wgUUZvbnQ6Om9wZXJhdG9yPT0oY29uc3QgUUZvbnQgJmNvbXBhcmVGb250KSBjb25z
dAogewogICAgIHJldHVybiBfZmFtaWx5ID09IGNvbXBhcmVGb250Ll9mYW1pbHkKICAgICAgICAg
JiYgX3RyYWl0ID09IGNvbXBhcmVGb250Ll90cmFpdAogICAgICAgICAmJiBfc2l6ZSA9PSBjb21w
YXJlRm9udC5fc2l6ZQotICAgICAgICAmJiBfaXNQcmludGVyRm9udCA9PSBjb21wYXJlRm9udC5f
aXNQcmludGVyRm9udDsKKyAgICAgICAgJiYgX2lzUHJpbnRlckZvbnQgPT0gY29tcGFyZUZvbnQu
X2lzUHJpbnRlckZvbnQKKyAgICAgICAgJiYgX3BpdGNoID09IGNvbXBhcmVGb250Ll9waXRjaDsK
IH0KIAogTlNGb250ICpRRm9udDo6Z2V0TlNGb250KCkgY29uc3QKSW5kZXg6IGt3cS9LV1FLSFRN
TFBhcnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9LV1FL
SFRNTFBhcnQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjkKZGlmZiAtdSAtcCAtcjEuOSBr
d3EvS1dRS0hUTUxQYXJ0LmNwcAotLS0ga3dxL0tXUUtIVE1MUGFydC5jcHAJMjcgTWFyIDIwMDMg
MDE6NTc6NDcgLTAwMDAJMS45CisrKyBrd3EvS1dRS0hUTUxQYXJ0LmNwcAk4IEp1bCAyMDA1IDA1
OjU4OjA1IC0wMDAwCkBAIC0zMiwxMyArMzIsMTUgQEAKIAogdXNpbmcgRE9NOjpEb2N1bWVudElt
cGw7CiB1c2luZyBET006OkhUTUxEb2N1bWVudEltcGw7Cit1c2luZyBET006OkhUTUxOYW1lczsK
IHVzaW5nIERPTTo6Tm9kZUltcGw7CiAKKy8vIEZJWE1FOiBXaGF0IG9uIGVhcnRoIGlzIHRoaXMg
c2luZ2xlIHRpbnkgZmlsZSB3aXRoIG9ubHkgdGhpcyBtZXRob2QgZG9pbmcgaGVyZT8KIGJvb2wg
S1dRS0hUTUxQYXJ0Ojppc0ZyYW1lU2V0KCkgY29uc3QKIHsKICAgICBEb2N1bWVudEltcGwgKmRv
Y3VtZW50ID0gZC0+bV9kb2M7CiAgICAgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQtPmlzSFRN
TERvY3VtZW50KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBOb2RlSW1wbCAqYm9keSA9
IHN0YXRpY19jYXN0PEhUTUxEb2N1bWVudEltcGwgKj4oZG9jdW1lbnQpLT5ib2R5KCk7Ci0gICAg
cmV0dXJuIGJvZHkgJiYgYm9keS0+cmVuZGVyZXIoKSAmJiBib2R5LT5pZCgpID09IElEX0ZSQU1F
U0VUOworICAgIHJldHVybiBib2R5ICYmIGJvZHktPnJlbmRlcmVyKCkgJiYgYm9keS0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OmZyYW1lc2V0KCkpOwogfQpJbmRleDoga3dxL0tXUUtIVE1MUGFydC5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3EvS1dRS0hUTUxQYXJ0
Lm1tLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjY0MwpkaWZmIC11IC1wIC1yMS42NDMga3dxL0tX
UUtIVE1MUGFydC5tbQotLS0ga3dxL0tXUUtIVE1MUGFydC5tbQkyNiBNYXkgMjAwNSAyMDozMDox
MiAtMDAwMAkxLjY0MworKysga3dxL0tXUUtIVE1MUGFydC5tbQk4IEp1bCAyMDA1IDA1OjU4OjA5
IC0wMDAwCkBAIC0yOCw3ICsyOCw2IEBACiAjaW1wb3J0ICJET01JbnRlcm5hbC5oIgogCiAjaW1w
b3J0ICJLV1FDbGlwYm9hcmQuaCIKLSNpbXBvcnQgIktXUURPTU5vZGUuaCIKICNpbXBvcnQgIktX
UUR1bW15Vmlldy5oIgogI2ltcG9ydCAiS1dRRWRpdENvbW1hbmQuaCIKICNpbXBvcnQgIktXUUV4
Y2VwdGlvbnMuaCIKQEAgLTEwMCw2ICs5OSw3IEBAIHVzaW5nIERPTTo6SFRNTEVsZW1lbnRJbXBs
OwogdXNpbmcgRE9NOjpIVE1MRm9ybUVsZW1lbnRJbXBsOwogdXNpbmcgRE9NOjpIVE1MRnJhbWVF
bGVtZW50SW1wbDsKIHVzaW5nIERPTTo6SFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGw7Cit1c2lu
ZyBET006OkhUTUxOYW1lczsKIHVzaW5nIERPTTo6SFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsOwog
dXNpbmcgRE9NOjpOb2RlOwogdXNpbmcgRE9NOjpOb2RlSW1wbDsKQEAgLTM2MSwxMyArMzYxLDEy
IEBAIHN0YXRpYyBIVE1MRm9ybUVsZW1lbnRJbXBsICpzY2FuRm9yRm9ybSgKIHsKICAgICBOb2Rl
SW1wbCAqbjsKICAgICBmb3IgKG4gPSBzdGFydDsgbjsgbiA9IG4tPnRyYXZlcnNlTmV4dE5vZGUo
KSkgewotICAgICAgICBOb2RlSW1wbDo6SWQgbm9kZUlEID0gaWRGcm9tTm9kZShuKTsKLSAgICAg
ICAgaWYgKG5vZGVJRCA9PSBJRF9GT1JNKSB7CisgICAgICAgIGlmIChuLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6Zm9ybSgpKSkgewogICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxG
b3JtRWxlbWVudEltcGwgKj4obik7CiAgICAgICAgIH0gZWxzZSBpZiAobi0+aXNIVE1MRWxlbWVu
dCgpCiAgICAgICAgICAgICAgICAgICAgJiYgc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+
KG4pLT5pc0dlbmVyaWNGb3JtRWxlbWVudCgpKSB7CiAgICAgICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8SFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwgKj4obiktPmZvcm0oKTsKLSAgICAgICAg
fSBlbHNlIGlmIChub2RlSUQgPT0gSURfRlJBTUUgfHwgbm9kZUlEID09IElEX0lGUkFNRSkgewor
ICAgICAgICB9IGVsc2UgaWYgKG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpmcmFtZSgpKSB8fCBu
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aWZyYW1lKCkpKSB7CiAgICAgICAgICAgICBOb2RlSW1w
bCAqY2hpbGREb2MgPSBzdGF0aWNfY2FzdDxIVE1MRnJhbWVFbGVtZW50SW1wbCAqPihuKS0+Y29u
dGVudERvY3VtZW50KCk7CiAgICAgICAgICAgICBIVE1MRm9ybUVsZW1lbnRJbXBsICpmcmFtZVJl
c3VsdCA9IHNjYW5Gb3JGb3JtKGNoaWxkRG9jKTsKICAgICAgICAgICAgIGlmIChmcmFtZVJlc3Vs
dCkgewpAQCAtMzkwLDcgKzM4OSw3IEBAIEhUTUxGb3JtRWxlbWVudEltcGwgKktXUUtIVE1MUGFy
dDo6Y3VycmUKICAgICAvLyB0cnkgd2Fsa2luZyB1cCB0aGUgbm9kZSB0cmVlIHRvIGZpbmQgYSBm
b3JtIGVsZW1lbnQKICAgICBOb2RlSW1wbCAqbjsKICAgICBmb3IgKG4gPSBzdGFydDsgbjsgbiA9
IG4tPnBhcmVudE5vZGUoKSkgewotICAgICAgICBpZiAoaWRGcm9tTm9kZShuKSA9PSBJRF9GT1JN
KSB7CisgICAgICAgIGlmIChuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Zm9ybSgpKSkgewogICAg
ICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudEltcGwgKj4obik7CiAg
ICAgICAgIH0gZWxzZSBpZiAobi0+aXNIVE1MRWxlbWVudCgpCiAgICAgICAgICAgICAgICAgICAg
JiYgc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KG4pLT5pc0dlbmVyaWNGb3JtRWxlbWVu
dCgpKSB7CkBAIC00ODksOCArNDg4LDcgQEAgTlNTdHJpbmcgKktXUUtIVE1MUGFydDo6c2VhcmNo
Rm9yTGFiZWxzQQogICAgICAgICBpZiAoYWJvdmVDZWxsKSB7CiAgICAgICAgICAgICAvLyBzZWFy
Y2ggd2l0aGluIHRoZSBhYm92ZSBjZWxsIHdlIGZvdW5kIGZvciBhIG1hdGNoCiAgICAgICAgICAg
ICBmb3IgKE5vZGVJbXBsICpuID0gYWJvdmVDZWxsLT5maXJzdENoaWxkKCk7IG47IG4gPSBuLT50
cmF2ZXJzZU5leHROb2RlKGFib3ZlQ2VsbCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoaWRGcm9t
Tm9kZShuKSA9PSBJRF9URVhUCi0gICAgICAgICAgICAgICAgICAgICYmIG4tPnJlbmRlcmVyKCkg
JiYgbi0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUpCisgICAg
ICAgICAgICAgICAgaWYgKG4tPmlzVGV4dE5vZGUoKSAmJiBuLT5yZW5kZXJlcigpICYmIG4tPnJl
bmRlcmVyKCktPnN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFKQogICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAgICAgLy8gRm9yIGVhY2ggdGV4dCBjaHVuaywgcnVuIHRo
ZSByZWdleHAKICAgICAgICAgICAgICAgICAgICAgUVN0cmluZyBub2RlU3RyaW5nID0gbi0+bm9k
ZVZhbHVlKCkuc3RyaW5nKCk7CkBAIC01MjUsMjMgKzUyMywyMSBAQCBOU1N0cmluZyAqS1dRS0hU
TUxQYXJ0OjpzZWFyY2hGb3JMYWJlbHNCCiAgICAgICAgICBuICYmIGxlbmd0aFNlYXJjaGVkIDwg
Y2hhcnNTZWFyY2hlZFRocmVzaG9sZDsKICAgICAgICAgIG4gPSBuLT50cmF2ZXJzZVByZXZpb3Vz
Tm9kZSgpKQogICAgIHsKLSAgICAgICAgTm9kZUltcGw6OklkIG5vZGVJRCA9IGlkRnJvbU5vZGUo
bik7Ci0gICAgICAgIGlmIChub2RlSUQgPT0gSURfRk9STQorICAgICAgICBpZiAobi0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OmZvcm0oKSkKICAgICAgICAgICAgIHx8IChuLT5pc0hUTUxFbGVtZW50
KCkKICAgICAgICAgICAgICAgICAmJiBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwgKj4obikt
PmlzR2VuZXJpY0Zvcm1FbGVtZW50KCkpKQogICAgICAgICB7CiAgICAgICAgICAgICAvLyBXZSBo
aXQgYW5vdGhlciBmb3JtIGVsZW1lbnQgb3IgdGhlIHN0YXJ0IG9mIHRoZSBmb3JtIC0gYmFpbCBv
dXQKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9IGVsc2UgaWYgKG5vZGVJRCA9PSBJRF9U
RCAmJiAhc3RhcnRpbmdUYWJsZUNlbGwpIHsKKyAgICAgICAgfSBlbHNlIGlmIChuLT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6dGQoKSkgJiYgIXN0YXJ0aW5nVGFibGVDZWxsKSB7CiAgICAgICAgICAg
ICBzdGFydGluZ1RhYmxlQ2VsbCA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZUNlbGxFbGVtZW50SW1w
bCAqPihuKTsKLSAgICAgICAgfSBlbHNlIGlmIChub2RlSUQgPT0gSURfVFIgJiYgc3RhcnRpbmdU
YWJsZUNlbGwpIHsKKyAgICAgICAgfSBlbHNlIGlmIChuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
dHIoKSkgJiYgc3RhcnRpbmdUYWJsZUNlbGwpIHsKICAgICAgICAgICAgIE5TU3RyaW5nICpyZXN1
bHQgPSBzZWFyY2hGb3JMYWJlbHNBYm92ZUNlbGwocmVnRXhwLCBzdGFydGluZ1RhYmxlQ2VsbCk7
CiAgICAgICAgICAgICBpZiAocmVzdWx0KSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHNlYXJjaGVkQ2VsbEFib3ZlID0gdHJ1ZTsK
LSAgICAgICAgfSBlbHNlIGlmIChub2RlSUQgPT0gSURfVEVYVAotICAgICAgICAgICAgICAgICAg
ICYmIG4tPnJlbmRlcmVyKCkgJiYgbi0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+dmlzaWJpbGl0eSgp
ID09IFZJU0lCTEUpCisgICAgICAgIH0gZWxzZSBpZiAobi0+aXNUZXh0Tm9kZSgpICYmIG4tPnJl
bmRlcmVyKCkgJiYgbi0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lC
TEUpCiAgICAgICAgIHsKICAgICAgICAgICAgIC8vIEZvciBlYWNoIHRleHQgY2h1bmssIHJ1biB0
aGUgcmVnZXhwCiAgICAgICAgICAgICBRU3RyaW5nIG5vZGVTdHJpbmcgPSBuLT5ub2RlVmFsdWUo
KS5zdHJpbmcoKTsKQEAgLTI4NDgsMTQgKzI4NDQsMTAgQEAgTlNGaWxlV3JhcHBlciAqS1dRS0hU
TUxQYXJ0OjpmaWxlV3JhcHBlcgogCiBzdGF0aWMgRWxlbWVudEltcGwgKmxpc3RQYXJlbnQoRWxl
bWVudEltcGwgKml0ZW0pCiB7Ci0gICAgLy8gSWNrISAgQXZvaWQgdXNlIG9mIGl0ZW0tPmlkKCkg
d2hpY2ggY29uZnVzZXMgT2JqQysrLgotICAgIHVuc2lnbmVkIHNob3J0IF9pZCA9IGl0ZW0tPmlk
ZW50aWZpZXIoKTsKLSAgICAKLSAgICB3aGlsZSAoX2lkICE9IElEX1VMICYmIF9pZCAhPSBJRF9P
TCkgeworICAgIHdoaWxlICghaXRlbS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnVsKCkpICYmICFp
dGVtLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b2woKSkpIHsKICAgICAgICAgaXRlbSA9IHN0YXRp
Y19jYXN0PEVsZW1lbnRJbXBsICo+KGl0ZW0tPnBhcmVudE5vZGUoKSk7CiAgICAgICAgIGlmICgh
aXRlbSkKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBfaWQgPSBpdGVtLT5pZGVudGlmaWVy
KCk7CiAgICAgfQogICAgIHJldHVybiBpdGVtOwogfQpAQCAtMjg2OCw3ICsyODYwLDcgQEAgc3Rh
dGljIE5vZGVJbXBsKiBpc1RleHRGaXJzdEluTGlzdEl0ZW0oTgogICAgIHdoaWxlIChwYXIpIHsK
ICAgICAgICAgaWYgKHBhci0+Zmlyc3RDaGlsZCgpICE9IGUpCiAgICAgICAgICAgICByZXR1cm4g
MDsKLSAgICAgICAgaWYgKHBhci0+aWRlbnRpZmllcigpID09IElEX0xJKQorICAgICAgICBpZiAo
cGFyLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6bGkoKSkpCiAgICAgICAgICAgICByZXR1cm4gcGFy
OwogICAgICAgICBlID0gcGFyOwogICAgICAgICBwYXIgPSBwYXItPnBhcmVudE5vZGUoKTsKQEAg
LTMwMjIsMTA5ICszMDE0LDk1IEBAIE5TQXR0cmlidXRlZFN0cmluZyAqS1dRS0hUTUxQYXJ0Ojph
dHRyaWIKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBv
dXIgc2ltcGxlIEhUTUwgLT4gQVNDSUkgdHJhbnNmb3JtYXRpb246CiAgICAgICAgICAgICAgICAg
UVN0cmluZyB0ZXh0OwotICAgICAgICAgICAgICAgIE5vZGVJbXBsOjpJZCBfaWQgPSBuLT5pZGVu
dGlmaWVyKCk7Ci0gICAgICAgICAgICAgICAgc3dpdGNoKF9pZCkgewotICAgICAgICAgICAgICAg
ICAgICBjYXNlIElEX0E6Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3RlIHRoZSBzdGFy
dCBvZiB0aGUgPGE+IGVsZW1lbnQuICBXZSB3aWxsIGFkZCB0aGUgTlNMaW5rQXR0cmlidXRlTmFt
ZQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXR0cmlidXRlIHRvIHRoZSBhdHRyaWJ1dGVk
IHN0cmluZyB3aGVuIG5hdmlnYXRpbmcgdG8gdGhlIG5leHQgc2libGluZyAKLSAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIG9mIHRoaXMgbm9kZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIGxp
bmtTdGFydExvY2F0aW9uID0gW3Jlc3VsdCBsZW5ndGhdOwotICAgICAgICAgICAgICAgICAgICAg
ICAgbGlua1N0YXJ0Tm9kZSA9IHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsKj4obik7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0JS
OgotICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCArPSAiXG4iOwotICAgICAgICAgICAgICAg
ICAgICAgICAgaGFzTmV3TGluZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9MSToKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBRU3RyaW5nIGxpc3RUZXh0
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVsZW1lbnRJbXBsICppdGVtUGFyZW50ID0g
bGlzdFBhcmVudChzdGF0aWNfY2FzdDxFbGVtZW50SW1wbCAqPihuKSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNOZXdM
aW5lKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0VGV4dCArPSAnXG4nOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc05ld0xpbmUgPSB0cnVlOwotICAgIAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RJdGVtcy5hcHBlbmQoc3RhdGljX2Nhc3Q8RWxl
bWVudEltcGwqPihuKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdEl0ZW1JbmZv
IGluZm87Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mby5zdGFydCA9IFtyZXN1bHQg
bGVuZ3RoXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLmVuZCA9IDA7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbGlzdEl0ZW1Mb2NhdGlvbnMuYXBwZW5kIChpbmZvKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsaXN0VGV4dCArPSAnXHQnOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVt
UGFyZW50ICYmIHJlbmRlcmVyLT5pc0xpc3RJdGVtKCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgUmVuZGVyTGlzdEl0ZW0gKmxpc3RSZW5kZXJlciA9IHN0YXRpY19jYXN0PFJl
bmRlckxpc3RJdGVtKj4ocmVuZGVyZXIpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1heE1hcmtlcldpZHRoID0gTUFYKFtmb250IHBvaW50U2l6ZV0sIG1heE1hcmtlcldpZHRo
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoKHN0eWxlLT5saXN0U3R5
bGVUeXBlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Uga2h0
bWw6OkRJU0M6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdFRl
eHQgKz0gKChRQ2hhcilCVUxMRVRfQ0hBUik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
YXNlIGtodG1sOjpDSVJDTEU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbGlzdFRleHQgKz0gKChRQ2hhcilDSVJDTEVfQ0hBUik7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjYXNlIGtodG1sOjpTUVVBUkU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbGlzdFRleHQgKz0gKChRQ2hhcilTUVVBUkVfQ0hBUik7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjYXNlIGtodG1sOjpMTk9ORToKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
UVN0cmluZyBtYXJrZXIgPSBsaXN0UmVuZGVyZXItPm1hcmtlclN0cmluZ1ZhbHVlKCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdFRleHQgKz0gbWFya2VyOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVzZSBBcHBLaXQgbWV0
cmljcy4gIFdpbGwgYmUgcmVuZGVyZWQgYnkgQXBwS2l0LgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZsb2F0IG1hcmtlcldpZHRoID0gW2ZvbnQgd2lkdGhPZlN0cmlu
ZzogbWFya2VyLmdldE5TU3RyaW5nKCldOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1heE1hcmtlcldpZHRoID0gTUFYKG1hcmtlcldpZHRoLCBtYXhNYXJrZXJXaWR0
aCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBp
ZiAobi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmEoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAg
Ly8gTm90ZSB0aGUgc3RhcnQgb2YgdGhlIDxhPiBlbGVtZW50LiAgV2Ugd2lsbCBhZGQgdGhlIE5T
TGlua0F0dHJpYnV0ZU5hbWUKKyAgICAgICAgICAgICAgICAgICAgLy8gYXR0cmlidXRlIHRvIHRo
ZSBhdHRyaWJ1dGVkIHN0cmluZyB3aGVuIG5hdmlnYXRpbmcgdG8gdGhlIG5leHQgc2libGluZyAK
KyAgICAgICAgICAgICAgICAgICAgLy8gb2YgdGhpcyBub2RlLgorICAgICAgICAgICAgICAgICAg
ICBsaW5rU3RhcnRMb2NhdGlvbiA9IFtyZXN1bHQgbGVuZ3RoXTsKKyAgICAgICAgICAgICAgICAg
ICAgbGlua1N0YXJ0Tm9kZSA9IHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsKj4obik7CisgICAgICAg
ICAgICAgICAgfSBlbHNlIGlmIChuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YnIoKSkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgdGV4dCArPSAiXG4iOworICAgICAgICAgICAgICAgICAgICBoYXNO
ZXdMaW5lID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG4tPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjpsaSgpKSkgeworICAgICAgICAgICAgICAgICAgICBRU3RyaW5nIGxpc3RUZXh0
OworICAgICAgICAgICAgICAgICAgICBFbGVtZW50SW1wbCAqaXRlbVBhcmVudCA9IGxpc3RQYXJl
bnQoc3RhdGljX2Nhc3Q8RWxlbWVudEltcGwgKj4obikpOworICAgICAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNOZXdMaW5lKQorICAgICAgICAgICAgICAgICAg
ICAgICAgbGlzdFRleHQgKz0gJ1xuJzsKKyAgICAgICAgICAgICAgICAgICAgaGFzTmV3TGluZSA9
IHRydWU7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdFRleHQgKz0gJyAn
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0VGV4dCArPSAnXHQnOwotICAg
IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOU011dGFibGVEaWN0aW9uYXJ5ICph
dHRyczsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRy
cyA9IFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF07Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFthdHRycyBzZXRPYmplY3Q6Zm9udCBmb3JLZXk6TlNGb250QXR0cmli
dXRlTmFtZV07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHlsZSAmJiBz
dHlsZS0+Y29sb3IoKS5pc1ZhbGlkKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBbYXR0cnMgc2V0T2JqZWN0OnN0eWxlLT5jb2xvcigpLmdldE5TQ29sb3IoKSBmb3JLZXk6
TlNGb3JlZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lXTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHN0eWxlICYmIHN0eWxlLT5iYWNrZ3JvdW5kQ29sb3IoKS5pc1ZhbGlkKCkp
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0cnMgc2V0T2JqZWN0OnN0
eWxlLT5iYWNrZ3JvdW5kQ29sb3IoKS5nZXROU0NvbG9yKCkgZm9yS2V5Ok5TQmFja2dyb3VuZENv
bG9yQXR0cmlidXRlTmFtZV07Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgTlNBdHRyaWJ1dGVkU3RyaW5nICpwYXJ0aWFsU3RyaW5nID0gW1tOU0F0dHJpYnV0
ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOmxpc3RUZXh0LmdldE5TU3RyaW5nKCkgYXR0
cmlidXRlczphdHRyc107Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRycyBy
ZWxlYXNlXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jlc3VsdCBhcHBlbmRB
dHRyaWJ1dGVkU3RyaW5nOiBwYXJ0aWFsU3RyaW5nXTsgICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFtwYXJ0aWFsU3RyaW5nIHJlbGVhc2VdOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbGlzdEl0ZW1zLmFw
cGVuZChzdGF0aWNfY2FzdDxFbGVtZW50SW1wbCo+KG4pKTsKKyAgICAgICAgICAgICAgICAgICAg
TGlzdEl0ZW1JbmZvIGluZm87CisgICAgICAgICAgICAgICAgICAgIGluZm8uc3RhcnQgPSBbcmVz
dWx0IGxlbmd0aF07CisgICAgICAgICAgICAgICAgICAgIGluZm8uZW5kID0gMDsKKyAgICAgICAg
ICAgICAgICAgICAgbGlzdEl0ZW1Mb2NhdGlvbnMuYXBwZW5kIChpbmZvKTsKKyAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGxpc3RUZXh0ICs9ICdcdCc7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChpdGVtUGFyZW50ICYmIHJlbmRlcmVyLT5pc0xpc3RJdGVtKCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRlckxpc3RJdGVtICpsaXN0UmVuZGVyZXIgPSBz
dGF0aWNfY2FzdDxSZW5kZXJMaXN0SXRlbSo+KHJlbmRlcmVyKTsKKworICAgICAgICAgICAgICAg
ICAgICAgICAgbWF4TWFya2VyV2lkdGggPSBNQVgoW2ZvbnQgcG9pbnRTaXplXSwgbWF4TWFya2Vy
V2lkdGgpOworICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoKHN0eWxlLT5saXN0U3R5bGVU
eXBlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIGtodG1sOjpESVNDOgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0VGV4dCArPSAoKFFDaGFyKUJVTExF
VF9DSEFSKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2FzZSBraHRtbDo6Q0lSQ0xFOgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBsaXN0VGV4dCArPSAoKFFDaGFyKUNJUkNMRV9DSEFSKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2FzZSBraHRtbDo6U1FVQVJFOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsaXN0VGV4dCArPSAoKFFDaGFyKVNRVUFSRV9DSEFSKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBraHRt
bDo6TE5PTkU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFFTdHJpbmcgbWFya2VyID0gbGlzdFJlbmRlcmVyLT5tYXJrZXJTdHJpbmdWYWx1ZSgp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0VGV4dCArPSBtYXJrZXI7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVzZSBBcHBLaXQgbWV0cmljcy4gIFdp
bGwgYmUgcmVuZGVyZWQgYnkgQXBwS2l0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmbG9hdCBtYXJrZXJXaWR0aCA9IFtmb250IHdpZHRoT2ZTdHJpbmc6IG1hcmtlci5nZXROU1N0
cmluZygpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4TWFya2VyV2lkdGgg
PSBNQVgobWFya2VyV2lkdGgsIG1heE1hcmtlcldpZHRoKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICAgICAg
ICAgIGNhc2UgSURfT0w6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfVUw6CisgICAgICAg
ICAgICAgICAgICAgICAgICBsaXN0VGV4dCArPSAnICc7CisgICAgICAgICAgICAgICAgICAgICAg
ICBsaXN0VGV4dCArPSAnXHQnOworCisgICAgICAgICAgICAgICAgICAgICAgICBOU011dGFibGVE
aWN0aW9uYXJ5ICphdHRyczsKKworICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnMgPSBbW05T
TXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdOworICAgICAgICAgICAgICAgICAgICAgICAg
W2F0dHJzIHNldE9iamVjdDpmb250IGZvcktleTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChzdHlsZSAmJiBzdHlsZS0+Y29sb3IoKS5pc1ZhbGlkKCkp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHJzIHNldE9iamVjdDpzdHlsZS0+Y29s
b3IoKS5nZXROU0NvbG9yKCkgZm9yS2V5Ok5TRm9yZWdyb3VuZENvbG9yQXR0cmlidXRlTmFtZV07
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3R5bGUgJiYgc3R5bGUtPmJhY2tncm91bmRD
b2xvcigpLmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0cnMgc2V0
T2JqZWN0OnN0eWxlLT5iYWNrZ3JvdW5kQ29sb3IoKS5nZXROU0NvbG9yKCkgZm9yS2V5Ok5TQmFj
a2dyb3VuZENvbG9yQXR0cmlidXRlTmFtZV07CisKKyAgICAgICAgICAgICAgICAgICAgICAgIE5T
QXR0cmlidXRlZFN0cmluZyAqcGFydGlhbFN0cmluZyA9IFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFs
bG9jXSBpbml0V2l0aFN0cmluZzpsaXN0VGV4dC5nZXROU1N0cmluZygpIGF0dHJpYnV0ZXM6YXR0
cnNdOworICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHJzIHJlbGVhc2VdOworICAgICAgICAg
ICAgICAgICAgICAgICAgW3Jlc3VsdCBhcHBlbmRBdHRyaWJ1dGVkU3RyaW5nOiBwYXJ0aWFsU3Ry
aW5nXTsgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBbcGFydGlhbFN0
cmluZyByZWxlYXNlXTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICBlbHNlIGlmIChuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b2woKSkgfHwgbi0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OnVsKCkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWhhc05l
d0xpbmUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCArPSAiXG4iOwogICAgICAg
ICAgICAgICAgICAgICAgICAgaGFzTmV3TGluZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX1REOgotICAgICAgICAg
ICAgICAgICAgICBjYXNlIElEX1RIOgotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0hSOgot
ICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0REOgotICAgICAgICAgICAgICAgICAgICBjYXNl
IElEX0RMOgotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0RUOgotICAgICAgICAgICAgICAg
ICAgICBjYXNlIElEX1BSRToKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9CTE9DS1FVT1RF
OgotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0RJVjoKKyAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIGlmIChuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGQoKSkgfHwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGgoKSkgfHwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aHIo
KSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6ZGQoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6ZGwoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZHQoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6cHJlKCkpIHx8CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJsb2NrcXVvdGUoKSkg
fHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6ZGl2KCkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWhhc05ld0xpbmUpCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCArPSAnXG4nOwogICAgICAgICAgICAgICAg
ICAgICAgICAgaGFzTmV3TGluZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9QOgotICAgICAgICAgICAgICAgICAgICBj
YXNlIElEX1RSOgotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0gxOgotICAgICAgICAgICAg
ICAgICAgICBjYXNlIElEX0gyOgotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0gzOgotICAg
ICAgICAgICAgICAgICAgICBjYXNlIElEX0g0OgotICAgICAgICAgICAgICAgICAgICBjYXNlIElE
X0g1OgotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0g2OiB7CisgICAgICAgICAgICAgICAg
ICAgIH0gZWxzZSBpZiAobi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnAoKSkgfHwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dHIoKSkgfHwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
aDEoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6aDIoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6aDMoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDQoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDUoKSkgfHwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDYoKSkpIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICghaGFzTmV3TGluZSkKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0ZXh0ICs9ICdcbic7CiAgICAgICAgICAgICAgICAgICAgICAgICAKQEAgLTMx
MzksMTAgKzMxMTcsOCBAQCBOU0F0dHJpYnV0ZWRTdHJpbmcgKktXUUtIVE1MUGFydDo6YXR0cmli
CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICAgICAgICAgIGhhc05ld0xpbmUgPSB0cnVlOwotICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0lNRzoKKyAgICAgICAgICAgICAg
ICAgICAgZWxzZSBpZiAobi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmltZygpKSkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHBlbmRpbmdTdHlsZWRTcGFjZSAhPSBuaWwpIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAobGlua1N0YXJ0TG9jYXRpb24gPT0gW3Jlc3VsdCBs
ZW5ndGhdKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrbGlua1N0YXJ0TG9j
YXRpb247CkBAIC0zMTU2LDggKzMxMzIsOSBAQCBOU0F0dHJpYnV0ZWRTdHJpbmcgKktXUUtIVE1M
UGFydDo6YXR0cmliCiAgICAgICAgICAgICAgICAgICAgICAgICBOU0F0dHJpYnV0ZWRTdHJpbmcg
KmlTdHJpbmcgPSBbTlNBdHRyaWJ1dGVkU3RyaW5nIGF0dHJpYnV0ZWRTdHJpbmdXaXRoQXR0YWNo
bWVudDphdHRhY2htZW50XTsKICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXN1bHQgYXBwZW5k
QXR0cmlidXRlZFN0cmluZzogaVN0cmluZ107CiAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0
YWNobWVudCByZWxlYXNlXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAgICAgTlNB
dHRyaWJ1dGVkU3RyaW5nICpwYXJ0aWFsU3RyaW5nID0gW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxs
b2NdIGluaXRXaXRoU3RyaW5nOnRleHQuZ2V0TlNTdHJpbmcoKV07CiAgICAgICAgICAgICAgICAg
W3Jlc3VsdCBhcHBlbmRBdHRyaWJ1dGVkU3RyaW5nOiBwYXJ0aWFsU3RyaW5nXTsKICAgICAgICAg
ICAgICAgICBbcGFydGlhbFN0cmluZyByZWxlYXNlXTsKQEAgLTMxNzksNzEgKzMxNTYsNjAgQEAg
TlNBdHRyaWJ1dGVkU3RyaW5nICpLV1FLSFRNTFBhcnQ6OmF0dHJpYgogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgbmV4dCA9IG4tPm5leHRTaWJsaW5nKCk7CiAKLSAgICAgICAg
ICAgIE5vZGVJbXBsOjpJZCBfaWQgPSBuLT5pZGVudGlmaWVyKCk7Ci0gICAgICAgICAgICBzd2l0
Y2goX2lkKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBJRF9BOgotICAgICAgICAgICAgICAgICAg
ICAvLyBFbmQgb2YgYSA8YT4gZWxlbWVudC4gIENyZWF0ZSBhbiBhdHRyaWJ1dGVkIHN0cmluZyBO
U0xpbmtBdHRyaWJ1dGVOYW1lIGF0dHJpYnV0ZQotICAgICAgICAgICAgICAgICAgICAvLyBmb3Ig
dGhlIHJhbmdlIG9mIHRoZSBsaW5rLiAgTm90ZSB0aGF0IHdlIGNyZWF0ZSB0aGUgYXR0cmlidXRl
ZCBzdHJpbmcgZnJvbSB0aGUgRE9NLCB3aGljaAotICAgICAgICAgICAgICAgICAgICAvLyB3aWxs
IGhhdmUgY29ycmVjdGVkIGFueSBpbGxlZ2FsbHkgbmVzdGVkIDxhPiBlbGVtZW50cy4KLSAgICAg
ICAgICAgICAgICAgICAgaWYgKGxpbmtTdGFydE5vZGUgJiYgbiA9PSBsaW5rU3RhcnROb2RlKXsK
LSAgICAgICAgICAgICAgICAgICAgICAgIERPTVN0cmluZyBocmVmID0gcGFyc2VVUkwobGlua1N0
YXJ0Tm9kZS0+Z2V0QXR0cmlidXRlKEFUVFJfSFJFRikpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgS1VSTCBrVVJMID0gS1dRKGxpbmtTdGFydE5vZGUtPmdldERvY3VtZW50KCktPnBhcnQoKSkt
PmNvbXBsZXRlVVJMKGhyZWYuc3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgICAgICAgICBOU1VSTCAqVVJMID0ga1VSTC5nZXROU1VSTCgpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgW3Jlc3VsdCBhZGRBdHRyaWJ1dGU6TlNMaW5rQXR0cmlidXRl
TmFtZSB2YWx1ZTpVUkwgcmFuZ2U6TlNNYWtlUmFuZ2UobGlua1N0YXJ0TG9jYXRpb24sIFtyZXN1
bHQgbGVuZ3RoXS1saW5rU3RhcnRMb2NhdGlvbildOwotICAgICAgICAgICAgICAgICAgICAgICAg
bGlua1N0YXJ0Tm9kZSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAobi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmEo
KSkpIHsKKyAgICAgICAgICAgICAgICAvLyBFbmQgb2YgYSA8YT4gZWxlbWVudC4gIENyZWF0ZSBh
biBhdHRyaWJ1dGVkIHN0cmluZyBOU0xpbmtBdHRyaWJ1dGVOYW1lIGF0dHJpYnV0ZQorICAgICAg
ICAgICAgICAgIC8vIGZvciB0aGUgcmFuZ2Ugb2YgdGhlIGxpbmsuICBOb3RlIHRoYXQgd2UgY3Jl
YXRlIHRoZSBhdHRyaWJ1dGVkIHN0cmluZyBmcm9tIHRoZSBET00sIHdoaWNoCisgICAgICAgICAg
ICAgICAgLy8gd2lsbCBoYXZlIGNvcnJlY3RlZCBhbnkgaWxsZWdhbGx5IG5lc3RlZCA8YT4gZWxl
bWVudHMuCisgICAgICAgICAgICAgICAgaWYgKGxpbmtTdGFydE5vZGUgJiYgbiA9PSBsaW5rU3Rh
cnROb2RlKSB7CisgICAgICAgICAgICAgICAgICAgIERPTVN0cmluZyBocmVmID0gcGFyc2VVUkwo
bGlua1N0YXJ0Tm9kZS0+Z2V0QXR0cmlidXRlKEFUVFJfSFJFRikpOworICAgICAgICAgICAgICAg
ICAgICBLVVJMIGtVUkwgPSBLV1EobGlua1N0YXJ0Tm9kZS0+Z2V0RG9jdW1lbnQoKS0+cGFydCgp
KS0+Y29tcGxldGVVUkwoaHJlZi5zdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgICAgICBOU1VSTCAqVVJMID0ga1VSTC5nZXROU1VSTCgpOworICAgICAgICAg
ICAgICAgICAgICBbcmVzdWx0IGFkZEF0dHJpYnV0ZTpOU0xpbmtBdHRyaWJ1dGVOYW1lIHZhbHVl
OlVSTCByYW5nZTpOU01ha2VSYW5nZShsaW5rU3RhcnRMb2NhdGlvbiwgW3Jlc3VsdCBsZW5ndGhd
LWxpbmtTdGFydExvY2F0aW9uKV07CisgICAgICAgICAgICAgICAgICAgIGxpbmtTdGFydE5vZGUg
PSAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2Ug
aWYgKG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvbCgpKSB8fCBuLT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6dWwoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWhhc05ld0xpbmUpCisgICAgICAg
ICAgICAgICAgICAgIHRleHQgKz0gJ1xuJzsKKyAgICAgICAgICAgICAgICBoYXNOZXdMaW5lID0g
dHJ1ZTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omxp
KCkpKSB7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgY2FzZSBJRF9PTDoKLSAg
ICAgICAgICAgICAgICBjYXNlIElEX1VMOgotICAgICAgICAgICAgICAgICAgICBpZiAoIWhhc05l
d0xpbmUpCi0gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0ICs9ICdcbic7Ci0gICAgICAgICAg
ICAgICAgICAgIGhhc05ld0xpbmUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LQotICAgICAgICAgICAgICAgIGNhc2UgSURfTEk6Ci0gICAgICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBpLCBjb3VudCA9IGxpc3RJdGVtcy5jb3VudCgpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsaXN0SXRlbXMuYXQoaSkgPT0gbil7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RJdGVtTG9jYXRpb25zW2ldLmVuZCA9IFty
ZXN1bHQgbGVuZ3RoXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGludCBpLCBjb3VudCA9IGxpc3RJdGVtcy5jb3VudCgpOworICAgICAg
ICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKXsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGxpc3RJdGVtcy5hdChpKSA9PSBuKXsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxp
c3RJdGVtTG9jYXRpb25zW2ldLmVuZCA9IFtyZXN1bHQgbGVuZ3RoXTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgIGlmICghaGFzTmV3TGluZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHRleHQgKz0gJ1xu
JzsKLSAgICAgICAgICAgICAgICAgICAgaGFzTmV3TGluZSA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgY2FzZSBJRF9URDoKLSAgICAgICAgICAg
ICAgICBjYXNlIElEX1RIOgotICAgICAgICAgICAgICAgIGNhc2UgSURfSFI6Ci0gICAgICAgICAg
ICAgICAgY2FzZSBJRF9ERDoKLSAgICAgICAgICAgICAgICBjYXNlIElEX0RMOgotICAgICAgICAg
ICAgICAgIGNhc2UgSURfRFQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBJRF9QUkU6Ci0gICAgICAg
ICAgICAgICAgY2FzZSBJRF9CTE9DS1FVT1RFOgotICAgICAgICAgICAgICAgIGNhc2UgSURfRElW
OgotICAgICAgICAgICAgICAgICAgICBpZiAoIWhhc05ld0xpbmUpCi0gICAgICAgICAgICAgICAg
ICAgICAgICB0ZXh0ICs9ICdcbic7Ci0gICAgICAgICAgICAgICAgICAgIGhhc05ld0xpbmUgPSB0
cnVlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIElE
X1A6Ci0gICAgICAgICAgICAgICAgY2FzZSBJRF9UUjoKLSAgICAgICAgICAgICAgICBjYXNlIElE
X0gxOgotICAgICAgICAgICAgICAgIGNhc2UgSURfSDI6Ci0gICAgICAgICAgICAgICAgY2FzZSBJ
RF9IMzoKLSAgICAgICAgICAgICAgICBjYXNlIElEX0g0OgotICAgICAgICAgICAgICAgIGNhc2Ug
SURfSDU6Ci0gICAgICAgICAgICAgICAgY2FzZSBJRF9INjoKLSAgICAgICAgICAgICAgICAgICAg
aWYgKCFoYXNOZXdMaW5lKQotICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCArPSAnXG4nOwot
ICAgICAgICAgICAgICAgICAgICAvLyBBbiBleHRyYSBuZXdsaW5lIGlzIG5lZWRlZCBhdCB0aGUg
c3RhcnQsIG5vdCB0aGUgZW5kLCBvZiB0aGVzZSB0eXBlcyBvZiB0YWdzLAotICAgICAgICAgICAg
ICAgICAgICAvLyBzbyBkb24ndCBhZGQgYW5vdGhlciBoZXJlLgotICAgICAgICAgICAgICAgICAg
ICBoYXNOZXdMaW5lID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICghaGFzTmV3TGluZSkKKyAgICAgICAgICAg
ICAgICAgICAgdGV4dCArPSAnXG4nOworICAgICAgICAgICAgICAgIGhhc05ld0xpbmUgPSB0cnVl
OworICAgICAgICAgICAgfSBlbHNlIGlmIChuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGQoKSkg
fHwKKyAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRoKCkp
IHx8CisgICAgICAgICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpocigp
KSB8fAorICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZGQo
KSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmRs
KCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpk
dCgpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
cHJlKCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjpibG9ja3F1b3RlKCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjpkaXYoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWhhc05ld0xpbmUpCisg
ICAgICAgICAgICAgICAgICAgIHRleHQgKz0gJ1xuJzsKKyAgICAgICAgICAgICAgICBoYXNOZXdM
aW5lID0gdHJ1ZTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobi0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OnAoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OnRyKCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjpoMSgpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6aDIoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OmgzKCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjpoNCgpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6aDUoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6Omg2KCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFoYXNOZXdMaW5lKQorICAg
ICAgICAgICAgICAgICAgICB0ZXh0ICs9ICdcbic7CisgICAgICAgICAgICAgICAgLy8gQW4gZXh0
cmEgbmV3bGluZSBpcyBuZWVkZWQgYXQgdGhlIHN0YXJ0LCBub3QgdGhlIGVuZCwgb2YgdGhlc2Ug
dHlwZXMgb2YgdGFncywKKyAgICAgICAgICAgICAgICAvLyBzbyBkb24ndCBhZGQgYW5vdGhlciBo
ZXJlLgorICAgICAgICAgICAgICAgIGhhc05ld0xpbmUgPSB0cnVlOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgCiAgICAgICAgICAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKnBhcnRpYWxTdHJp
bmcgPSBbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6dGV4dC5nZXRO
U1N0cmluZygpXTsKQEAgLTM0NzYsNyArMzQ0Miw3IEBAIFJlbmRlclN0eWxlICpLV1FLSFRNTFBh
cnQ6OnN0eWxlRm9yU2VsZWMKICAgICAgICAgcmV0dXJuIG5vZGUtPnJlbmRlcmVyKCktPnN0eWxl
KCk7CiAKICAgICBpbnQgZXhjZXB0aW9uQ29kZSA9IDA7Ci0gICAgRWxlbWVudEltcGwgKnN0eWxl
RWxlbWVudCA9IHhtbERvY0ltcGwoKS0+Y3JlYXRlSFRNTEVsZW1lbnQoInNwYW4iLCBleGNlcHRp
b25Db2RlKTsKKyAgICBFbGVtZW50SW1wbCAqc3R5bGVFbGVtZW50ID0geG1sRG9jSW1wbCgpLT5j
cmVhdGVFbGVtZW50TlMoWEhUTUxfTkFNRVNQQUNFLCAic3BhbiIsIGV4Y2VwdGlvbkNvZGUpOwog
ICAgIEFTU0VSVChleGNlcHRpb25Db2RlID09IDApOwogCiAgICAgc3R5bGVFbGVtZW50LT5yZWYo
KTsKQEAgLTM3MDMsNyArMzY2OSw3IEBAIHZvaWQgS1dRS0hUTUxQYXJ0OjpzZXRTZWxlY3Rpb25G
cm9tTm9uZSgKICAgICAgICAgd2hpbGUgKG5vZGUpIHsKICAgICAgICAgICAgIC8vIExvb2sgZm9y
IGEgYmxvY2sgZmxvdywgYnV0IHNraXAgb3ZlciB0aGUgSFRNTCBlbGVtZW50LCBzaW5jZSB3ZSBy
ZWFsbHkKICAgICAgICAgICAgIC8vIHdhbnQgdG8gZ2V0IGF0IGxlYXN0IGFzIGZhciBhcyB0aGUg
dGhlIEJPRFkgZWxlbWVudCBpbiBhIGRvY3VtZW50LgotICAgICAgICAgICAgaWYgKG5vZGUtPmlz
QmxvY2tGbG93KCkgJiYgbm9kZS0+aWRlbnRpZmllcigpICE9IElEX0hUTUwpCisgICAgICAgICAg
ICBpZiAobm9kZS0+aXNCbG9ja0Zsb3coKSAmJiBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
aHRtbCgpKSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIG5vZGUgPSBub2Rl
LT50cmF2ZXJzZU5leHROb2RlKCk7CiAgICAgICAgIH0KSW5kZXg6IGt3cS9LV1FSZW5kZXJUcmVl
RGVidWcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9LV1FS
ZW5kZXJUcmVlRGVidWcuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjQxCmRpZmYgLXUgLXAg
LXIxLjQxIGt3cS9LV1FSZW5kZXJUcmVlRGVidWcuY3BwCi0tLSBrd3EvS1dRUmVuZGVyVHJlZURl
YnVnLmNwcAkxNiBNYXkgMjAwNSAyMjowMzo0OCAtMDAwMAkxLjQxCisrKyBrd3EvS1dRUmVuZGVy
VHJlZURlYnVnLmNwcAk4IEp1bCAyMDA1IDA1OjU4OjA5IC0wMDAwCkBAIC0yNyw3ICsyNyw2IEBA
CiAKICNpbmNsdWRlICJkb21fZG9jaW1wbC5oIgogI2luY2x1ZGUgImRvbV9wb3NpdGlvbi5oIgot
I2luY2x1ZGUgImh0bWx0YWdzLmgiCiAjaW5jbHVkZSAianNlZGl0aW5nLmgiCiAjaW5jbHVkZSAi
a2h0bWx2aWV3LmgiCiAjaW5jbHVkZSAicmVuZGVyX2NhbnZhcy5oIgpAQCAtMTE2LDkgKzExNSwx
MyBAQCBzdGF0aWMgUVN0cmluZyBnZXRUYWdOYW1lKE5vZGVJbXBsICpuKQogewogICAgIGlmIChu
LT5pc0RvY3VtZW50Tm9kZSgpKQogICAgICAgICByZXR1cm4gIiI7Ci0gICAgaWYgKG4tPmlkKCkg
PD0gSURfTEFTVF9UQUcpCi0gICAgICAgIHJldHVybiBnZXRUYWdOYW1lKG4tPmlkKCkpLnN0cmlu
ZygpOwotICAgIHJldHVybiBuLT5ub2RlTmFtZSgpLnN0cmluZygpOworICAgIGlmIChuLT5pc1Rl
eHROb2RlKCkpCisgICAgICAgIHJldHVybiAiVEVYVCI7IC8vIEZJWE1FOiBSZW1vdmUgb25jZSB0
aGUgbGF5b3V0IHRlc3RzIGFyZSByZWFkeSB0byBjaGFuZ2UuCisgICAgaWYgKG4tPmlzQ29tbWVu
dE5vZGUoKSkKKyAgICAgICAgcmV0dXJuICJDT01NRU5UIjsKKyAgICBpZiAobi0+aXNIVE1MRWxl
bWVudCgpKQorICAgICAgICByZXR1cm4gbi0+bm9kZU5hbWUoKS51cHBlcigpLnN0cmluZygpOyAv
LyBGSVhNRTogV2Ugd2FudCB0byBkdW1wIHRoZSByZWFsIERPTSBuYW1lLCBub3QgYW4gdXBwZXJj
YXNlIG5hbWUuCisgICAgcmV0dXJuIG4tPm5vZGVOYW1lKCkuc3RyaW5nKCk7IAogfQogCiBzdGF0
aWMgUVRleHRTdHJlYW0gJm9wZXJhdG9yPDwoUVRleHRTdHJlYW0gJnRzLCBjb25zdCBSZW5kZXJP
YmplY3QgJm8pCkluZGV4OiBrd3EvV2ViQ29yZUJyaWRnZS5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3EvV2ViQ29yZUJyaWRnZS5tbSx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS4zOTYKZGlmZiAtdSAtcCAtcjEuMzk2IGt3cS9XZWJDb3JlQnJpZGdlLm1tCi0tLSBr
d3EvV2ViQ29yZUJyaWRnZS5tbQkxNCBKdW4gMjAwNSAwMDoyMzo0NSAtMDAwMAkxLjM5NgorKysg
a3dxL1dlYkNvcmVCcmlkZ2UubW0JOCBKdWwgMjAwNSAwNTo1ODoxMiAtMDAwMApAQCAtMzksNyAr
MzksNiBAQAogI2ltcG9ydCAiaHRtbF9pbWFnZWltcGwuaCIKICNpbXBvcnQgImh0bWxhdHRycy5o
IgogI2ltcG9ydCAiaHRtbGVkaXRpbmcuaCIKLSNpbXBvcnQgImh0bWx0YWdzLmgiCiAjaW1wb3J0
ICJraHRtbF9wYXJ0LmgiCiAjaW1wb3J0ICJraHRtbHZpZXcuaCIKICNpbXBvcnQgImtqc19wcm94
eS5oIgpAQCAtNjcsNyArNjYsNiBAQAogI2ltcG9ydCAiS1dRQXNzZXJ0aW9ucy5oIgogI2ltcG9y
dCAiS1dRQ2hhcnNldHMuaCIKICNpbXBvcnQgIktXUUNsaXBib2FyZC5oIgotI2ltcG9ydCAiS1dR
RE9NTm9kZS5oIgogI2ltcG9ydCAiS1dRRWRpdENvbW1hbmQuaCIKICNpbXBvcnQgIktXUUZvbnQu
aCIKICNpbXBvcnQgIktXUUZvdW5kYXRpb25FeHRyYXMuaCIKQEAgLTEwMCw2ICs5OCw3IEBAIHVz
aW5nIERPTTo6SFRNTEZvcm1FbGVtZW50SW1wbDsKIHVzaW5nIERPTTo6SFRNTEdlbmVyaWNGb3Jt
RWxlbWVudEltcGw7CiB1c2luZyBET006OkhUTUxJbWFnZUVsZW1lbnRJbXBsOwogdXNpbmcgRE9N
OjpIVE1MSW5wdXRFbGVtZW50SW1wbDsKK3VzaW5nIERPTTo6SFRNTE5hbWVzOwogdXNpbmcgRE9N
OjpOb2RlSW1wbDsKIHVzaW5nIERPTTo6UG9zaXRpb247CiB1c2luZyBET006OlJhbmdlSW1wbDsK
QEAgLTkxMyw3ICs5MTIsNyBAQCBzdGF0aWMgTlNWaWV3ICp2aWV3Rm9yRWxlbWVudChFbGVtZW50
SW1wCiBzdGF0aWMgSFRNTElucHV0RWxlbWVudEltcGwgKmlucHV0RWxlbWVudEZyb21ET01FbGVt
ZW50KERPTUVsZW1lbnQgKmVsZW1lbnQpCiB7CiAgICAgTm9kZUltcGwgKm5vZGUgPSBbZWxlbWVu
dCBfbm9kZUltcGxdOwotICAgIGlmIChub2RlICYmIGlkRnJvbU5vZGUobm9kZSkgPT0gSURfSU5Q
VVQpIHsKKyAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmlucHV0KCkpKSB7CiAg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50SW1wbCAqPihub2RlKTsK
ICAgICB9CiAgICAgcmV0dXJuIG5pbDsKQEAgLTkyNiw3ICs5MjUsNyBAQCBzdGF0aWMgSFRNTEZv
cm1FbGVtZW50SW1wbCAqZm9ybUVsZW1lbnRGCiAgICAgLy8gbWFwcy5nb29nbGUuY29tIGNyYXNo
ZXMgb3RoZXJ3aXNlIGJlY2F1c2UgaXQgaXMgYW4geHNsdCBmaWxlCiAgICAgLy8gdGhhdCBjb250
YWlucyA8Zm9ybT4gZWxlbWVudHMgdGhhdCBhcmVuJ3QgaW4gYW55IG5hbWVzcGFjZSwgc28KICAg
ICAvLyB0aGV5IGNvbWUgb3V0IGFzIGdlbmVyaWMgQ01MIGVsZW1lbnRzCi0gICAgaWYgKG5vZGUg
JiYgbm9kZS0+aXNIVE1MRWxlbWVudCgpICYmIGlkRnJvbU5vZGUobm9kZSkgPT0gSURfRk9STSkg
eworICAgIGlmIChub2RlICYmIG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpmb3JtKCkpKSB7
CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnRJbXBsICo+KG5vZGUp
OwogICAgIH0KICAgICByZXR1cm4gbmlsOwpAQCAtMTA5Niw3ICsxMDk1LDcgQEAgc3RhdGljIEhU
TUxGb3JtRWxlbWVudEltcGwgKmZvcm1FbGVtZW50RgogICAgIAogICAgICAgICAgICAgLy8gRklY
TUU6IENvZGUgY29waWVkIGZyb20gUmVuZGVySW1hZ2U6OnVwZGF0ZUZyb21FbGVtZW50OyBzaG91
bGQgc2hhcmUuCiAgICAgICAgICAgICBET01TdHJpbmcgYXR0cjsKLSAgICAgICAgICAgIGlmIChp
ZEZyb21Ob2RlKGkpID09IElEX09CSkVDVCkgeworICAgICAgICAgICAgaWYgKGktPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjpvYmplY3QoKSkpIHsKICAgICAgICAgICAgICAgICBhdHRyID0gaS0+Z2V0
QXR0cmlidXRlKEFUVFJfREFUQSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
ICAgIGF0dHIgPSBpLT5nZXRBdHRyaWJ1dGUoQVRUUl9TUkMpOwpAQCAtMTEwOCw5ICsxMTA3LDkg
QEAgc3RhdGljIEhUTUxGb3JtRWxlbWVudEltcGwgKmZvcm1FbGVtZW50RgogICAgICAgICAgICAg
CiAgICAgICAgICAgICAvLyBGSVhNRTogQ29kZSBjb3BpZWQgZnJvbSBSZW5kZXJJbWFnZTo6dXBk
YXRlRnJvbUVsZW1lbnQ7IHNob3VsZCBzaGFyZS4KICAgICAgICAgICAgIERPTVN0cmluZyBhbHQ7
Ci0gICAgICAgICAgICBpZiAoaWRGcm9tTm9kZShpKSA9PSBJRF9JTlBVVCkKKyAgICAgICAgICAg
IGlmIChpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW5wdXQoKSkpCiAgICAgICAgICAgICAgICAg
YWx0ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudEltcGwgKj4oaSktPmFsdFRleHQoKTsK
LSAgICAgICAgICAgIGVsc2UgaWYgKGlkRnJvbU5vZGUoaSkgPT0gSURfSU1HKQorICAgICAgICAg
ICAgZWxzZSBpZiAoaS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmltZygpKSkKICAgICAgICAgICAg
ICAgICBhbHQgPSBzdGF0aWNfY2FzdDxIVE1MSW1hZ2VFbGVtZW50SW1wbCAqPihpKS0+YWx0VGV4
dCgpOwogICAgICAgICAgICAgaWYgKCFhbHQuaXNOdWxsKCkpIHsKICAgICAgICAgICAgICAgICBR
U3RyaW5nIGFsdFRleHQgPSBhbHQuc3RyaW5nKCk7CkluZGV4OiBsYXlvdXQtdGVzdHMvZmFzdC9k
b20vY3NzLWRvbS1yZWFkLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvV2ViQ29yZS9sYXlvdXQtdGVzdHMvZmFzdC9kb20vY3NzLWRvbS1yZWFkLWV4cGVjdGVkLnR4
dCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXUgLXAgLXIxLjEgbGF5b3V0LXRlc3Rz
L2Zhc3QvZG9tL2Nzcy1kb20tcmVhZC1leHBlY3RlZC50eHQKLS0tIGxheW91dC10ZXN0cy9mYXN0
L2RvbS9jc3MtZG9tLXJlYWQtZXhwZWN0ZWQudHh0CTE5IEp1biAyMDA1IDA2OjM4OjA5IC0wMDAw
CTEuMQorKysgbGF5b3V0LXRlc3RzL2Zhc3QvZG9tL2Nzcy1kb20tcmVhZC1leHBlY3RlZC50eHQJ
OCBKdWwgMjAwNSAwNTo1ODoxMyAtMDAwMApAQCAtOSw1ICs5LDUgQEAgU2VyaWFsaXplZCBzdHls
ZSwgdXNpbmcgQ1NTIERPTToKIC50d28geyBkaXNwbGF5OiBpbmxpbmU7IH0KIC50aHJlZSB7IGRp
c3BsYXk6IGxpc3QtaXRlbTsgbGlzdC1zdHlsZS10eXBlOiBzcXVhcmU7IG1hcmdpbi1sZWZ0OiAz
ZW07IH0KIC5mb3VyIHsgZGlzcGxheTogbm9uZTsgY29sb3I6IHJlZDsgfQotSSB7IGRpc3BsYXk6
IGJsb2NrOyB9CitpIHsgZGlzcGxheTogYmxvY2s7IH0KIApJbmRleDogbGF5b3V0LXRlc3RzL2Zh
c3Qvb3ZlcmZsb3cvMDAzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvV2ViQ29yZS9sYXlvdXQtdGVzdHMvZmFzdC9vdmVyZmxvdy8wMDMtZXhwZWN0ZWQudHh0LHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjEwCmRpZmYgLXUgLXAgLXIxLjEwIGxheW91dC10ZXN0cy9m
YXN0L292ZXJmbG93LzAwMy1leHBlY3RlZC50eHQKLS0tIGxheW91dC10ZXN0cy9mYXN0L292ZXJm
bG93LzAwMy1leHBlY3RlZC50eHQJMTEgRmViIDIwMDUgMjI6NTk6MDcgLTAwMDAJMS4xMAorKysg
bGF5b3V0LXRlc3RzL2Zhc3Qvb3ZlcmZsb3cvMDAzLWV4cGVjdGVkLnR4dAk4IEp1bCAyMDA1IDA1
OjU4OjE0IC0wMDAwCkBAIC00LDE0ICs0LDE0IEBAIGxheWVyIGF0ICgxMCwxMCkgc2l6ZSA3ODB4
MzAyCiAgIFJlbmRlckJsb2NrIHtmYWtlfSBhdCAoMTAsMTApIHNpemUgNzgweDMwMiBbYmdjb2xv
cj0jRkZGRjAwXQogbGF5ZXIgYXQgKDEwLDEwKSBzaXplIDI4MngzMDIgY2xpcCBhdCAoMTEsMTEp
IHNpemUgMjY1eDMwMCBzY3JvbGxIZWlnaHQgMTI5MgogICBSZW5kZXJCbG9jayB7Y2hhbm5lbH0g
YXQgKDAsMCkgc2l6ZSAyODJ4MzAyIFtiZ2NvbG9yPSNFRUVFRUVdIFtib3JkZXI6ICgxcHggc29s
aWQgIzAwMDAwMCldCi0gICAgUmVuZGVyQmxvY2sge1RJVExFfSBhdCAoMTEsMTEpIHNpemUgMjU1
eDE5CisgICAgUmVuZGVyQmxvY2sge3RpdGxlfSBhdCAoMTEsMTEpIHNpemUgMjU1eDE5CiAgICAg
ICBSZW5kZXJUZXh0IHtURVhUfSBhdCAoMCwwKSBzaXplIDE1NHgxOQogICAgICAgICB0ZXh0IHJ1
biBhdCAoMCwwKSB3aWR0aCAxNTQ6ICJzY290dGFuZHJldy5jb20iCiAgICAgUmVuZGVyQmxvY2sg
e2Rlc2NyaXB0aW9ufSBhdCAoMTEsNDApIHNpemUgMjU1eDEyCiAgICAgICBSZW5kZXJUZXh0IHtU
RVhUfSBhdCAoMCwwKSBzaXplIDE5MXgxMgogICAgICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0
aCAxOTE6ICJESFRNTCwgRE9NIGFuZCBKYXZhU2NyaXB0IE5ld3MiCiAgICAgUmVuZGVyQmxvY2sg
e2l0ZW19IGF0ICgxLDYyKSBzaXplIDI2NXg5NyBbYmdjb2xvcj0jRkZGRkZGXSBbYm9yZGVyOiAo
MXB4IHNvbGlkICNDQ0NDQ0MpIG5vbmUgKDFweCBzb2xpZCAjQ0NDQ0NDKSBub25lXQotICAgICAg
UmVuZGVySW5saW5lIHtUSVRMRX0gYXQgKDAsMCkgc2l6ZSAyMzN4MTUKKyAgICAgIFJlbmRlcklu
bGluZSB7dGl0bGV9IGF0ICgwLDApIHNpemUgMjMzeDE1CiAgICAgICAgIFJlbmRlclRleHQge1RF
WFR9IGF0ICgxMCwxMSkgc2l6ZSAyMzN4MTUKICAgICAgICAgICB0ZXh0IHJ1biBhdCAoMTAsMTEp
IHdpZHRoIDIzMzogIkRIVE1MIEFuaW1hdGlvbiBBcnJheSBHZW5lcmF0b3IiCiAgICAgICBSZW5k
ZXJUZXh0IHtURVhUfSBhdCAoMCwwKSBzaXplIDB4MApAQCAtMjQsNyArMjQsNyBAQCBsYXllciBh
dCAoMTAsMTApIHNpemUgMjgyeDMwMiBjbGlwIGF0ICgxCiAgICAgICBSZW5kZXJUZXh0IHtURVhU
fSBhdCAoMCwwKSBzaXplIDB4MAogICAgICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQgKDAsMCkgc2l6
ZSAweDAKICAgICBSZW5kZXJCbG9jayB7aXRlbX0gYXQgKDEsMTY5KSBzaXplIDI2NXg4MiBbYmdj
b2xvcj0jRkZGRkZGXSBbYm9yZGVyOiAoMXB4IHNvbGlkICNDQ0NDQ0MpIG5vbmUgKDFweCBzb2xp
ZCAjQ0NDQ0NDKSBub25lXQotICAgICAgUmVuZGVySW5saW5lIHtUSVRMRX0gYXQgKDAsMCkgc2l6
ZSAxNzd4MTUKKyAgICAgIFJlbmRlcklubGluZSB7dGl0bGV9IGF0ICgwLDApIHNpemUgMTc3eDE1
CiAgICAgICAgIFJlbmRlclRleHQge1RFWFR9IGF0ICgxMCwxMSkgc2l6ZSAxNzd4MTUKICAgICAg
ICAgICB0ZXh0IHJ1biBhdCAoMTAsMTEpIHdpZHRoIDE3NzogIkRPTSBhbmQgRXh0ZW5kZWQgRW50
cmllcyIKICAgICAgIFJlbmRlclRleHQge1RFWFR9IGF0ICgxODcsMTEpIHNpemUgNHgxNQpAQCAt
MzgsNyArMzgsNyBAQCBsYXllciBhdCAoMTAsMTApIHNpemUgMjgyeDMwMiBjbGlwIGF0ICgxCiAg
ICAgICBSZW5kZXJUZXh0IHtURVhUfSBhdCAoMCwwKSBzaXplIDB4MAogICAgICAgUmVuZGVyVGV4
dCB7VEVYVH0gYXQgKDAsMCkgc2l6ZSAweDAKICAgICBSZW5kZXJCbG9jayB7aXRlbX0gYXQgKDEs
MjYxKSBzaXplIDI2NXg4MiBbYmdjb2xvcj0jRkZGRkZGXSBbYm9yZGVyOiAoMXB4IHNvbGlkICND
Q0NDQ0MpIG5vbmUgKDFweCBzb2xpZCAjQ0NDQ0NDKSBub25lXQotICAgICAgUmVuZGVySW5saW5l
IHtUSVRMRX0gYXQgKDAsMCkgc2l6ZSAxNjR4MTUKKyAgICAgIFJlbmRlcklubGluZSB7dGl0bGV9
IGF0ICgwLDApIHNpemUgMTY0eDE1CiAgICAgICAgIFJlbmRlclRleHQge1RFWFR9IGF0ICgxMCwx
MSkgc2l6ZSAxNjR4MTUKICAgICAgICAgICB0ZXh0IHJ1biBhdCAoMTAsMTEpIHdpZHRoIDE2NDog
ImNlbGxzcGFjaW5nIGFuZCB0aGUgRE9NIgogICAgICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQgKDE3
NCwxMSkgc2l6ZSA0eDE1CkBAIC01Miw3ICs1Miw3IEBAIGxheWVyIGF0ICgxMCwxMCkgc2l6ZSAy
ODJ4MzAyIGNsaXAgYXQgKDEKICAgICAgIFJlbmRlclRleHQge1RFWFR9IGF0ICgwLDApIHNpemUg
MHgwCiAgICAgICBSZW5kZXJUZXh0IHtURVhUfSBhdCAoMCwwKSBzaXplIDB4MAogICAgIFJlbmRl
ckJsb2NrIHtpdGVtfSBhdCAoMSwzNTMpIHNpemUgMjY1eDk3IFtiZ2NvbG9yPSNGRkZGRkZdIFti
b3JkZXI6ICgxcHggc29saWQgI0NDQ0NDQykgbm9uZSAoMXB4IHNvbGlkICNDQ0NDQ0MpIG5vbmVd
Ci0gICAgICBSZW5kZXJJbmxpbmUge1RJVExFfSBhdCAoMCwwKSBzaXplIDE3N3gxNQorICAgICAg
UmVuZGVySW5saW5lIHt0aXRsZX0gYXQgKDAsMCkgc2l6ZSAxNzd4MTUKICAgICAgICAgUmVuZGVy
VGV4dCB7VEVYVH0gYXQgKDEwLDExKSBzaXplIDE3N3gxNQogICAgICAgICAgIHRleHQgcnVuIGF0
ICgxMCwxMSkgd2lkdGggMTc3OiAiY29udGVudGVkaXRhYmxlIGZvciBNb3ppbGxhIgogICAgICAg
UmVuZGVyVGV4dCB7VEVYVH0gYXQgKDE4NywxMSkgc2l6ZSA0eDE1CkBAIC02Nyw3ICs2Nyw3IEBA
IGxheWVyIGF0ICgxMCwxMCkgc2l6ZSAyODJ4MzAyIGNsaXAgYXQgKDEKICAgICAgIFJlbmRlclRl
eHQge1RFWFR9IGF0ICgwLDApIHNpemUgMHgwCiAgICAgICBSZW5kZXJUZXh0IHtURVhUfSBhdCAo
MCwwKSBzaXplIDB4MAogICAgIFJlbmRlckJsb2NrIHtpdGVtfSBhdCAoMSw0NjApIHNpemUgMjY1
eDgyIFtiZ2NvbG9yPSNGRkZGRkZdIFtib3JkZXI6ICgxcHggc29saWQgI0NDQ0NDQykgbm9uZSAo
MXB4IHNvbGlkICNDQ0NDQ0MpIG5vbmVdCi0gICAgICBSZW5kZXJJbmxpbmUge1RJVExFfSBhdCAo
MCwwKSBzaXplIDE4MngzMAorICAgICAgUmVuZGVySW5saW5lIHt0aXRsZX0gYXQgKDAsMCkgc2l6
ZSAxODJ4MzAKICAgICAgICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQgKDEwLDExKSBzaXplIDE4Mngz
MAogICAgICAgICAgIHRleHQgcnVuIGF0ICgxMCwxMSkgd2lkdGggMTgyOiAiREhUTUwgVGltZWxp
bmUvS2V5ZnJhbWUiCiAgICAgICAgICAgdGV4dCBydW4gYXQgKDEwLDI2KSB3aWR0aCA2OTogIkFu
aW1hdGlvbiIKQEAgLTgxLDcgKzgxLDcgQEAgbGF5ZXIgYXQgKDEwLDEwKSBzaXplIDI4MngzMDIg
Y2xpcCBhdCAoMQogICAgICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQgKDAsMCkgc2l6ZSAweDAKICAg
ICAgIFJlbmRlclRleHQge1RFWFR9IGF0ICgwLDApIHNpemUgMHgwCiAgICAgUmVuZGVyQmxvY2sg
e2l0ZW19IGF0ICgxLDU1Mikgc2l6ZSAyNjV4OTcgW2JnY29sb3I9I0ZGRkZGRl0gW2JvcmRlcjog
KDFweCBzb2xpZCAjQ0NDQ0NDKSBub25lICgxcHggc29saWQgI0NDQ0NDQykgbm9uZV0KLSAgICAg
IFJlbmRlcklubGluZSB7VElUTEV9IGF0ICgwLDApIHNpemUgMTU3eDMwCisgICAgICBSZW5kZXJJ
bmxpbmUge3RpdGxlfSBhdCAoMCwwKSBzaXplIDE1N3gzMAogICAgICAgICBSZW5kZXJUZXh0IHtU
RVhUfSBhdCAoMTAsMTEpIHNpemUgMTU3eDMwCiAgICAgICAgICAgdGV4dCBydW4gYXQgKDEwLDEx
KSB3aWR0aCAxNTc6ICJEeW5BUEkgMi45IGFuZCBNb3ppbGxhIgogICAgICAgICAgIHRleHQgcnVu
IGF0ICgxMCwyNikgd2lkdGggMTI0OiAiY29tcGF0aWJpbGl0eSBwb3J0cyIKQEAgLTk2LDcgKzk2
LDcgQEAgbGF5ZXIgYXQgKDEwLDEwKSBzaXplIDI4MngzMDIgY2xpcCBhdCAoMQogICAgICAgUmVu
ZGVyVGV4dCB7VEVYVH0gYXQgKDAsMCkgc2l6ZSAweDAKICAgICAgIFJlbmRlclRleHQge1RFWFR9
IGF0ICgwLDApIHNpemUgMHgwCiAgICAgUmVuZGVyQmxvY2sge2l0ZW19IGF0ICgxLDY1OSkgc2l6
ZSAyNjV4NjcgW2JnY29sb3I9I0ZGRkZGRl0gW2JvcmRlcjogKDFweCBzb2xpZCAjQ0NDQ0NDKSBu
b25lICgxcHggc29saWQgI0NDQ0NDQykgbm9uZV0KLSAgICAgIFJlbmRlcklubGluZSB7VElUTEV9
IGF0ICgwLDApIHNpemUgMTU0eDE1CisgICAgICBSZW5kZXJJbmxpbmUge3RpdGxlfSBhdCAoMCww
KSBzaXplIDE1NHgxNQogICAgICAgICBSZW5kZXJUZXh0IHtURVhUfSBhdCAoMTAsMTEpIHNpemUg
MTU0eDE1CiAgICAgICAgICAgdGV4dCBydW4gYXQgKDEwLDExKSB3aWR0aCAxNTQ6ICIhbGluZURy
YXcgYm9va21hcmtsZXQiCiAgICAgICBSZW5kZXJUZXh0IHtURVhUfSBhdCAoMTY0LDExKSBzaXpl
IDR4MTUKQEAgLTEwOSw3ICsxMDksNyBAQCBsYXllciBhdCAoMTAsMTApIHNpemUgMjgyeDMwMiBj
bGlwIGF0ICgxCiAgICAgICBSZW5kZXJUZXh0IHtURVhUfSBhdCAoMCwwKSBzaXplIDB4MAogICAg
ICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQgKDAsMCkgc2l6ZSAweDAKICAgICBSZW5kZXJCbG9jayB7
aXRlbX0gYXQgKDEsNzM2KSBzaXplIDI2NXg5NyBbYmdjb2xvcj0jRkZGRkZGXSBbYm9yZGVyOiAo
MXB4IHNvbGlkICNDQ0NDQ0MpIG5vbmUgKDFweCBzb2xpZCAjQ0NDQ0NDKSBub25lXQotICAgICAg
UmVuZGVySW5saW5lIHtUSVRMRX0gYXQgKDAsMCkgc2l6ZSAyMDF4MTUKKyAgICAgIFJlbmRlcklu
bGluZSB7dGl0bGV9IGF0ICgwLDApIHNpemUgMjAxeDE1CiAgICAgICAgIFJlbmRlclRleHQge1RF
WFR9IGF0ICgxMCwxMSkgc2l6ZSAyMDF4MTUKICAgICAgICAgICB0ZXh0IHJ1biBhdCAoMTAsMTEp
IHdpZHRoIDIwMTogIk1vemlsbGEsIERIVE1MIGFuZCBET00gbGlua3MiCiAgICAgICBSZW5kZXJU
ZXh0IHtURVhUfSBhdCAoMjExLDExKSBzaXplIDR4MTUKQEAgLTEyNCw3ICsxMjQsNyBAQCBsYXll
ciBhdCAoMTAsMTApIHNpemUgMjgyeDMwMiBjbGlwIGF0ICgxCiAgICAgICBSZW5kZXJUZXh0IHtU
RVhUfSBhdCAoMCwwKSBzaXplIDB4MAogICAgICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQgKDAsMCkg
c2l6ZSAweDAKICAgICBSZW5kZXJCbG9jayB7aXRlbX0gYXQgKDEsODQzKSBzaXplIDI2NXg2NyBb
Ymdjb2xvcj0jRkZGRkZGXSBbYm9yZGVyOiAoMXB4IHNvbGlkICNDQ0NDQ0MpIG5vbmUgKDFweCBz
b2xpZCAjQ0NDQ0NDKSBub25lXQotICAgICAgUmVuZGVySW5saW5lIHtUSVRMRX0gYXQgKDAsMCkg
c2l6ZSAxMDN4MTUKKyAgICAgIFJlbmRlcklubGluZSB7dGl0bGV9IGF0ICgwLDApIHNpemUgMTAz
eDE1CiAgICAgICAgIFJlbmRlclRleHQge1RFWFR9IGF0ICgxMCwxMSkgc2l6ZSAxMDN4MTUKICAg
ICAgICAgICB0ZXh0IHJ1biBhdCAoMTAsMTEpIHdpZHRoIDEwMzogIk1vemlsbGEgMS4wIFJDMiIK
ICAgICAgIFJlbmRlclRleHQge1RFWFR9IGF0ICgxMTMsMTEpIHNpemUgNHgxNQpAQCAtMTM3LDcg
KzEzNyw3IEBAIGxheWVyIGF0ICgxMCwxMCkgc2l6ZSAyODJ4MzAyIGNsaXAgYXQgKDEKICAgICAg
IFJlbmRlclRleHQge1RFWFR9IGF0ICgwLDApIHNpemUgMHgwCiAgICAgICBSZW5kZXJUZXh0IHtU
RVhUfSBhdCAoMCwwKSBzaXplIDB4MAogICAgIFJlbmRlckJsb2NrIHtpdGVtfSBhdCAoMSw5MjAp
IHNpemUgMjY1eDk3IFtiZ2NvbG9yPSNGRkZGRkZdIFtib3JkZXI6ICgxcHggc29saWQgI0NDQ0ND
Qykgbm9uZSAoMXB4IHNvbGlkICNDQ0NDQ0MpIG5vbmVdCi0gICAgICBSZW5kZXJJbmxpbmUge1RJ
VExFfSBhdCAoMCwwKSBzaXplIDIzNngzMAorICAgICAgUmVuZGVySW5saW5lIHt0aXRsZX0gYXQg
KDAsMCkgc2l6ZSAyMzZ4MzAKICAgICAgICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQgKDEwLDExKSBz
aXplIDIzNngzMAogICAgICAgICAgIHRleHQgcnVuIGF0ICgxMCwxMSkgd2lkdGggMjM2OiAiamF2
YXNjcmlwdDogaXMgZGVwcmVjYXRlZC4gRG9uJ3QgdXNlIgogICAgICAgICAgIHRleHQgcnVuIGF0
ICgxMCwyNikgd2lkdGggMTM6ICJpdC4iCkBAIC0xNTIsNyArMTUyLDcgQEAgbGF5ZXIgYXQgKDEw
LDEwKSBzaXplIDI4MngzMDIgY2xpcCBhdCAoMQogICAgICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQg
KDAsMCkgc2l6ZSAweDAKICAgICAgIFJlbmRlclRleHQge1RFWFR9IGF0ICgwLDApIHNpemUgMHgw
CiAgICAgUmVuZGVyQmxvY2sge2l0ZW19IGF0ICgxLDEwMjcpIHNpemUgMjY1eDY3IFtiZ2NvbG9y
PSNGRkZGRkZdIFtib3JkZXI6ICgxcHggc29saWQgI0NDQ0NDQykgbm9uZSAoMXB4IHNvbGlkICND
Q0NDQ0MpIG5vbmVdCi0gICAgICBSZW5kZXJJbmxpbmUge1RJVExFfSBhdCAoMCwwKSBzaXplIDE3
NngxNQorICAgICAgUmVuZGVySW5saW5lIHt0aXRsZX0gYXQgKDAsMCkgc2l6ZSAxNzZ4MTUKICAg
ICAgICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQgKDEwLDExKSBzaXplIDE3NngxNQogICAgICAgICAg
IHRleHQgcnVuIGF0ICgxMCwxMSkgd2lkdGggMTc2OiAiQ29uZGl0aW9uYWwgU2NyaXB0IExvYWRp
bmciCiAgICAgICBSZW5kZXJUZXh0IHtURVhUfSBhdCAoMCwwKSBzaXplIDB4MApAQCAtMTYzLDcg
KzE2Myw3IEBAIGxheWVyIGF0ICgxMCwxMCkgc2l6ZSAyODJ4MzAyIGNsaXAgYXQgKDEKICAgICAg
IFJlbmRlclRleHQge1RFWFR9IGF0ICgwLDApIHNpemUgMHgwCiAgICAgICBSZW5kZXJUZXh0IHtU
RVhUfSBhdCAoMCwwKSBzaXplIDB4MAogICAgIFJlbmRlckJsb2NrIHtpdGVtfSBhdCAoMSwxMTA0
KSBzaXplIDI2NXg4MiBbYmdjb2xvcj0jRkZGRkZGXSBbYm9yZGVyOiAoMXB4IHNvbGlkICNDQ0ND
Q0MpIG5vbmUgKDFweCBzb2xpZCAjQ0NDQ0NDKSBub25lXQotICAgICAgUmVuZGVySW5saW5lIHtU
SVRMRX0gYXQgKDAsMCkgc2l6ZSAxMTV4MTUKKyAgICAgIFJlbmRlcklubGluZSB7dGl0bGV9IGF0
ICgwLDApIHNpemUgMTE1eDE1CiAgICAgICAgIFJlbmRlclRleHQge1RFWFR9IGF0ICgxMCwxMSkg
c2l6ZSAxMTV4MTUKICAgICAgICAgICB0ZXh0IHJ1biBhdCAoMTAsMTEpIHdpZHRoIDExNTogIlN0
b3JpZXMgYW5kIFRvb2xzIgogICAgICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQgKDEyNSwxMSkgc2l6
ZSA0eDE1CkBAIC0xNzcsNyArMTc3LDcgQEAgbGF5ZXIgYXQgKDEwLDEwKSBzaXplIDI4MngzMDIg
Y2xpcCBhdCAoMQogICAgICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQgKDAsMCkgc2l6ZSAweDAKICAg
ICAgIFJlbmRlclRleHQge1RFWFR9IGF0ICgwLDApIHNpemUgMHgwCiAgICAgUmVuZGVyQmxvY2sg
e2l0ZW19IGF0ICgxLDExOTYpIHNpemUgMjY1eDk3IFtiZ2NvbG9yPSNGRkZGRkZdIFtib3JkZXI6
ICgxcHggc29saWQgI0NDQ0NDQykgbm9uZSAoMXB4IHNvbGlkICNDQ0NDQ0MpIG5vbmVdCi0gICAg
ICBSZW5kZXJJbmxpbmUge1RJVExFfSBhdCAoMCwwKSBzaXplIDE2NngxNQorICAgICAgUmVuZGVy
SW5saW5lIHt0aXRsZX0gYXQgKDAsMCkgc2l6ZSAxNjZ4MTUKICAgICAgICAgUmVuZGVyVGV4dCB7
VEVYVH0gYXQgKDEwLDExKSBzaXplIDE2NngxNQogICAgICAgICAgIHRleHQgcnVuIGF0ICgxMCwx
MSkgd2lkdGggMTY2OiAiV2hvbGUgTG90dG8gR2Vja28gTGlua3MiCiAgICAgICBSZW5kZXJUZXh0
IHtURVhUfSBhdCAoMTc2LDExKSBzaXplIDR4MTUKSW5kZXg6IGxheW91dC10ZXN0cy9mYXN0L3Rv
a2VuaXplci8wMDItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9X
ZWJDb3JlL2xheW91dC10ZXN0cy9mYXN0L3Rva2VuaXplci8wMDItZXhwZWN0ZWQudHh0LHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtdSAtcCAtcjEuMSBsYXlvdXQtdGVzdHMvZmFzdC90
b2tlbml6ZXIvMDAyLWV4cGVjdGVkLnR4dAotLS0gbGF5b3V0LXRlc3RzL2Zhc3QvdG9rZW5pemVy
LzAwMi1leHBlY3RlZC50eHQJMjYgSnVsIDIwMDQgMjI6NDU6NTEgLTAwMDAJMS4xCisrKyBsYXlv
dXQtdGVzdHMvZmFzdC90b2tlbml6ZXIvMDAyLWV4cGVjdGVkLnR4dAk4IEp1bCAyMDA1IDA1OjU4
OjE1IC0wMDAwCkBAIC0xLDcgKzEsNyBAQAogbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCiAg
IFJlbmRlckNhbnZhcyBhdCAoMCwwKSBzaXplIDgwMHg2MDAKLWxheWVyIGF0ICgwLDApIHNpemUg
ODAweDM0Ci0gIFJlbmRlckJsb2NrIHtIVE1MfSBhdCAoMCwwKSBzaXplIDgwMHgzNAotICAgIFJl
bmRlckJvZHkge0JPRFl9IGF0ICg4LDgpIHNpemUgNzg0eDE4CitsYXllciBhdCAoMCwwKSBzaXpl
IDgwMHg2MDAKKyAgUmVuZGVyQmxvY2sge0hUTUx9IGF0ICgwLDApIHNpemUgODAweDYwMAorICAg
IFJlbmRlckJvZHkge0JPRFl9IGF0ICg4LDgpIHNpemUgNzg0eDU4NAogICAgICAgUmVuZGVyVGV4
dCB7VEVYVH0gYXQgKDAsMCkgc2l6ZSAzMTV4MTgKICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkg
d2lkdGggMzE1OiAieW91IHNob3VsZG4ndCBzZWUgYSByYW5kb20gY2hpbmVzZSBjaGFyYWN0ZXIg
aGVyZSIKSW5kZXg6IGxheW91dC10ZXN0cy9mYXN0L3Rva2VuaXplci9leHRlcm5hbC1zY3JpcHQt
ZG9jdW1lbnQtd3JpdGUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9XZWJDb3JlL2xheW91dC10ZXN0cy9mYXN0L3Rva2VuaXplci9leHRlcm5hbC1zY3JpcHQtZG9j
dW1lbnQtd3JpdGUtZXhwZWN0ZWQudHh0LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAt
dSAtcCAtcjEuMSBsYXlvdXQtdGVzdHMvZmFzdC90b2tlbml6ZXIvZXh0ZXJuYWwtc2NyaXB0LWRv
Y3VtZW50LXdyaXRlLWV4cGVjdGVkLnR4dAotLS0gbGF5b3V0LXRlc3RzL2Zhc3QvdG9rZW5pemVy
L2V4dGVybmFsLXNjcmlwdC1kb2N1bWVudC13cml0ZS1leHBlY3RlZC50eHQJMTkgT2N0IDIwMDQg
MTk6MDE6MTUgLTAwMDAJMS4xCisrKyBsYXlvdXQtdGVzdHMvZmFzdC90b2tlbml6ZXIvZXh0ZXJu
YWwtc2NyaXB0LWRvY3VtZW50LXdyaXRlLWV4cGVjdGVkLnR4dAk4IEp1bCAyMDA1IDA1OjU4OjE1
IC0wMDAwCkBAIC00LDUgKzQsNSBAQCBsYXllciBhdCAoMCwwKSBzaXplIDgwMHgzNAogICBSZW5k
ZXJCbG9jayB7SFRNTH0gYXQgKDAsMCkgc2l6ZSA4MDB4MzQKICAgICBSZW5kZXJCb2R5IHtCT0RZ
fSBhdCAoOCw4KSBzaXplIDc4NHgxOAogICAgICAgUmVuZGVySW5saW5lIHtTUEFOfSBhdCAoMCww
KSBzaXplIDB4MAotICAgICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQgKDAsMCkgc2l6ZSAyMjZ4MTgK
LSAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggMjI2OiAiVGhpcyBzaG91bGQgYmUgYSBz
cGFuOiBbb2JqZWN0IHNwYW5dIgorICAgICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQgKDAsMCkgc2l6
ZSAyMzl4MTgKKyAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggMjM5OiAiVGhpcyBzaG91
bGQgYmUgYSBzcGFuOiBbb2JqZWN0IFNQQU5dIgpJbmRleDogbGF5b3V0LXRlc3RzL2Zhc3QvdG9r
ZW5pemVyL3NjcmlwdF9leHRyYV9jbG9zZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2N2cy9yb290L1dlYkNvcmUvbGF5b3V0LXRlc3RzL2Zhc3QvdG9rZW5pemVyL3NjcmlwdF9l
eHRyYV9jbG9zZS1leHBlY3RlZC50eHQsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNQpkaWZmIC11
IC1wIC1yMS41IGxheW91dC10ZXN0cy9mYXN0L3Rva2VuaXplci9zY3JpcHRfZXh0cmFfY2xvc2Ut
ZXhwZWN0ZWQudHh0Ci0tLSBsYXlvdXQtdGVzdHMvZmFzdC90b2tlbml6ZXIvc2NyaXB0X2V4dHJh
X2Nsb3NlLWV4cGVjdGVkLnR4dAk2IEp1bCAyMDA1IDE4OjQ5OjA2IC0wMDAwCTEuNQorKysgbGF5
b3V0LXRlc3RzL2Zhc3QvdG9rZW5pemVyL3NjcmlwdF9leHRyYV9jbG9zZS1leHBlY3RlZC50eHQJ
OCBKdWwgMjAwNSAwNTo1ODoxNSAtMDAwMApAQCAtNiw3ICs2LDYgQEAgbGF5ZXIgYXQgKDAsMCkg
c2l6ZSA4MDB4NjAwCiAgICAgICBSZW5kZXJUZXh0IHtURVhUfSBhdCAoMCwwKSBzaXplIDU1eDE4
CiAgICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDU1OiAiVEVTVC4uLiAiCiAgICAgICBS
ZW5kZXJUZXh0IHtURVhUfSBhdCAoMCwwKSBzaXplIDB4MAotICAgICAgUmVuZGVyVGV4dCB7VEVY
VH0gYXQgKDAsMCkgc2l6ZSAweDAKICAgICAgIFJlbmRlclRleHQge1RFWFR9IGF0ICg1NSwwKSBz
aXplIDIzMngxOAogICAgICAgICB0ZXh0IHJ1biBhdCAoNTUsMCkgd2lkdGggNjk6ICJQQVNTRUQu
ICIKICAgICAgICAgdGV4dCBydW4gYXQgKDEyNCwwKSB3aWR0aCAxNjM6ICJUaGlzIHRleHQgc2hv
dWxkIHNob3cgdXAuIgpJbmRleDogbGF5b3V0LXRlc3RzL2Zhc3QvdG9rZW5pemVyL3NjcmlwdF9x
dWlyay1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogbGF5b3V0LXRlc3RzL2Zhc3Qv
dG9rZW5pemVyL3NjcmlwdF9xdWlyay1leHBlY3RlZC50eHQKZGlmZiAtTiBsYXlvdXQtdGVzdHMv
ZmFzdC90b2tlbml6ZXIvc2NyaXB0X3F1aXJrLWV4cGVjdGVkLnR4dAotLS0gbGF5b3V0LXRlc3Rz
L2Zhc3QvdG9rZW5pemVyL3NjcmlwdF9xdWlyay1leHBlY3RlZC50eHQJMTcgSnVuIDIwMDUgMjA6
MDA6MTEgLTAwMDAJMS4xCisrKyAvZGV2L251bGwJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMApA
QCAtMSw5ICswLDAgQEAKLWxheWVyIGF0ICgwLDApIHNpemUgODAweDYwMAotICBSZW5kZXJDYW52
YXMgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCi1sYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKLSAg
UmVuZGVyQmxvY2sge0hUTUx9IGF0ICgwLDApIHNpemUgODAweDYwMAotICAgIFJlbmRlckJvZHkg
e0JPRFl9IGF0ICg4LDgpIHNpemUgNzg0eDU4NAotICAgICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQg
KDAsMCkgc2l6ZSAyNzV4MTgKLSAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggMTEyOiAi
VEVTVCBQQVNTRUQuICIKLSAgICAgICAgdGV4dCBydW4gYXQgKDExMiwwKSB3aWR0aCAxNjM6ICJU
aGlzIHRleHQgc2hvdWxkIHNob3cgdXAuIgotICAgICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQgKDAs
MCkgc2l6ZSAweDAKSW5kZXg6IGxheW91dC10ZXN0cy9mYXN0L3Rva2VuaXplci9zY3JpcHRfcXVp
cmsuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiBsYXlvdXQtdGVzdHMvZmFzdC90b2tlbml6ZXIv
c2NyaXB0X3F1aXJrLmh0bWwKZGlmZiAtTiBsYXlvdXQtdGVzdHMvZmFzdC90b2tlbml6ZXIvc2Ny
aXB0X3F1aXJrLmh0bWwKLS0tIGxheW91dC10ZXN0cy9mYXN0L3Rva2VuaXplci9zY3JpcHRfcXVp
cmsuaHRtbAkxNyBKdW4gMjAwNSAyMDowMDoxMSAtMDAwMAkxLjEKKysrIC9kZXYvbnVsbAkxIEph
biAxOTcwIDAwOjAwOjAwIC0wMDAwCkBAIC0xLDYgKzAsMCBAQAotPGh0bWw+Ci08Ym9keT4KLTxz
Y3JpcHQgc3JjPSJyZXNvdXJjZXMvZW1wdHlfc2NyaXB0LmpzIiAvPgotVEVTVCBQQVNTRUQuICBU
aGlzIHRleHQgc2hvdWxkIHNob3cgdXAuCi08L2JvZHk+Ci08L2h0bWwKXCBObyBuZXdsaW5lIGF0
IGVuZCBvZiBmaWxlCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>2873</attachid>
            <date>2005-07-08 20:01:43 -0700</date>
            <delta_ts>2005-07-09 01:12:20 -0700</delta_ts>
            <desc>Patch that addresses some of maciej&apos;s comments and includes his hash fixes</desc>
            <filename>patch-28.txt</filename>
            <type>text/plain</type>
            <size>826571</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUucGJwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvV2ViQ29yZS9XZWJDb3JlLnBicHJvai9wcm9qZWN0LnBieHByb2osdgpyZXRy
aWV2aW5nIHJldmlzaW9uIDEuNTYxCmRpZmYgLXUgLXAgLXIxLjU2MSBXZWJDb3JlLnBicHJvai9w
cm9qZWN0LnBieHByb2oKLS0tIFdlYkNvcmUucGJwcm9qL3Byb2plY3QucGJ4cHJvagk2IEp1bCAy
MDA1IDAxOjI4OjQxIC0wMDAwCTEuNTYxCisrKyBXZWJDb3JlLnBicHJvai9wcm9qZWN0LnBieHBy
b2oJOSBKdWwgMjAwNSAwMjo0MjoyMCAtMDAwMApAQCAtMjE0LDMyICsyMTQsNiBAQAogLy8yRDIK
IC8vMkQzCiAvLzJENAotLy8zNTAKLS8vMzUxCi0vLzM1MgotLy8zNTMKLS8vMzU0Ci0JCTM1NEYy
NDg5MDJFRTI4NTkwQUNBMkFDQSA9IHsKLQkJCWZpbGVFbmNvZGluZyA9IDMwOwotCQkJaXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsKLQkJCWxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
Ci0JCQlwYXRoID0gS1dRRE9NTm9kZS5oOwotCQkJcmVmVHlwZSA9IDQ7Ci0JCQlzb3VyY2VUcmVl
ID0gIjxncm91cD4iOwotCQl9OwotCQkzNTRGMjQ4QTAyRUUyODU5MEFDQTJBQ0EgPSB7Ci0JCQlm
aWxlRW5jb2RpbmcgPSAzMDsKLQkJCWlzYSA9IFBCWEZpbGVSZWZlcmVuY2U7Ci0JCQlsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsKLQkJCXBhdGggPSBLV1FET01Ob2RlLmNw
cDsKLQkJCXJlZlR5cGUgPSA0OwotCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsKLS8v
MzUwCi0vLzM1MQotLy8zNTIKLS8vMzUzCi0vLzM1NAogLy81MTAKIC8vNTExCiAvLzUxMgpAQCAt
MjQ4NSw3ICsyNDU5LDYgQEAKIAkJCQk5M0YxOThEQzA4MjQ1RTU5MDAxRTlBQkMsCiAJCQkJOTNG
MTk4REUwODI0NUU1OTAwMUU5QUJDLAogCQkJCTkzRjE5OEUwMDgyNDVFNTkwMDFFOUFCQywKLQkJ
CQk5M0YxOThFMjA4MjQ1RTU5MDAxRTlBQkMsCiAJCQkJOTNGMTk4RTMwODI0NUU1OTAwMUU5QUJD
LAogCQkJCTkzRjE5OEU0MDgyNDVFNTkwMDFFOUFCQywKIAkJCQk5M0YxOThFNTA4MjQ1RTU5MDAx
RTlBQkMsCkBAIC0yNTYyLDcgKzI1MzUsNiBAQAogCQkJCTkzRjE5OTJFMDgyNDVFNTkwMDFFOUFC
QywKIAkJCQk5M0YxOTkyRjA4MjQ1RTU5MDAxRTlBQkMsCiAJCQkJOTNGMTk5MzAwODI0NUU1OTAw
MUU5QUJDLAotCQkJCTkzRjE5OTMxMDgyNDVFNTkwMDFFOUFCQywKIAkJCQk5M0YxOTkzMjA4MjQ1
RTU5MDAxRTlBQkMsCiAJCQkJOTNGMTk5MzMwODI0NUU1OTAwMUU5QUJDLAogCQkJCTkzRjE5OTM0
MDgyNDVFNTkwMDFFOUFCQywKQEAgLTI3MTcsNyArMjY4OSw2IEBACiAJCQkJOTNGMTk5QzkwODI0
NUU1OTAwMUU5QUJDLAogCQkJCTkzRjE5OUNBMDgyNDVFNTkwMDFFOUFCQywKIAkJCQk5M0YxOTlD
QjA4MjQ1RTU5MDAxRTlBQkMsCi0JCQkJOTNGMTk5Q0MwODI0NUU1OTAwMUU5QUJDLAogCQkJCTkz
RjE5OUNFMDgyNDVFNTkwMDFFOUFCQywKIAkJCQk5M0YxOTlDRjA4MjQ1RTU5MDAxRTlBQkMsCiAJ
CQkJOTNGMTk5RDAwODI0NUU1OTAwMUU5QUJDLApAQCAtMjc5OSw2ICsyNzcwLDcgQEAKIAkJCQk2
NURFODUyOTA4NzY1RkMzMDAxMTQyOEEsCiAJCQkJNjVERTg1MkEwODc2NUZDMzAwMTE0MjhBLAog
CQkJCUE4NUQ3QzE5MDg3QTZFRDkwMDZBOTE3MiwKKwkJCQlCQ0VGMzQzNTA4N0I1NjNFMDBCQkY4
MzMsCiAJCQkpOwogCQkJaXNhID0gUEJYSGVhZGVyc0J1aWxkUGhhc2U7CiAJCQlydW5Pbmx5Rm9y
RGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKQEAgLTMwNDMsMTIgKzMwMTUsNiBAQAogCQkJ
c2V0dGluZ3MgPSB7CiAJCQl9OwogCQl9OwotCQk5M0YxOThFMjA4MjQ1RTU5MDAxRTlBQkMgPSB7
Ci0JCQlmaWxlUmVmID0gRjUyM0QyMzYwMkRFNDM5NjAxODYzNUNBOwotCQkJaXNhID0gUEJYQnVp
bGRGaWxlOwotCQkJc2V0dGluZ3MgPSB7Ci0JCQl9OwotCQl9OwogCQk5M0YxOThFMzA4MjQ1RTU5
MDAxRTlBQkMgPSB7CiAJCQlmaWxlUmVmID0gRjUyM0QyMzgwMkRFNDM5NjAxODYzNUNBOwogCQkJ
aXNhID0gUEJYQnVpbGRGaWxlOwpAQCAtMzUwNSwxMiArMzQ3MSw2IEBACiAJCQlzZXR0aW5ncyA9
IHsKIAkJCX07CiAJCX07Ci0JCTkzRjE5OTMxMDgyNDVFNTkwMDFFOUFCQyA9IHsKLQkJCWZpbGVS
ZWYgPSAzNTRGMjQ4OTAyRUUyODU5MEFDQTJBQ0E7Ci0JCQlpc2EgPSBQQlhCdWlsZEZpbGU7Ci0J
CQlzZXR0aW5ncyA9IHsKLQkJCX07Ci0JCX07CiAJCTkzRjE5OTMyMDgyNDVFNTkwMDFFOUFCQyA9
IHsKIAkJCWZpbGVSZWYgPSBGNTg3ODY4NTAyREUzQjg2MDFFQTQxMjI7CiAJCQlpc2EgPSBQQlhC
dWlsZEZpbGU7CkBAIC00NDczLDEyICs0NDMzLDYgQEAKIAkJCXNldHRpbmdzID0gewogCQkJfTsK
IAkJfTsKLQkJOTNGMTk5Q0MwODI0NUU1OTAwMUU5QUJDID0gewotCQkJZmlsZVJlZiA9IEJDN0ZE
RTMyMDVDMUQ5QUIwMDcwQTkwMjsKLQkJCWlzYSA9IFBCWEJ1aWxkRmlsZTsKLQkJCXNldHRpbmdz
ID0gewotCQkJfTsKLQkJfTsKIAkJOTNGMTk5Q0UwODI0NUU1OTAwMUU5QUJDID0gewogCQkJZmls
ZVJlZiA9IEJDM0IzNjQ2MDVDOUQ1RTIwMEU0MjkwMjsKIAkJCWlzYSA9IFBCWEJ1aWxkRmlsZTsK
QEAgLTUwMTMsNyArNDk2Nyw2IEBACiAJCQkJOTNGMTlBOEIwODI0NUU1OTAwMUU5QUJDLAogCQkJ
CTkzRjE5QThDMDgyNDVFNTkwMDFFOUFCQywKIAkJCQk5M0YxOUE4RDA4MjQ1RTU5MDAxRTlBQkMs
Ci0JCQkJOTNGMTlBOEUwODI0NUU1OTAwMUU5QUJDLAogCQkJCTkzRjE5QThGMDgyNDVFNTkwMDFF
OUFCQywKIAkJCQk5M0YxOUE5MDA4MjQ1RTU5MDAxRTlBQkMsCiAJCQkJOTNGMTlBOTEwODI0NUU1
OTAwMUU5QUJDLApAQCAtNTA2Niw3ICs1MDE5LDYgQEAKIAkJCQk5M0YxOUFDMDA4MjQ1RTU5MDAx
RTlBQkMsCiAJCQkJOTNGMTlBQzEwODI0NUU1OTAwMUU5QUJDLAogCQkJCTkzRjE5QUMyMDgyNDVF
NTkwMDFFOUFCQywKLQkJCQk5M0YxOUFDMzA4MjQ1RTU5MDAxRTlBQkMsCiAJCQkJOTNGMTlBQzQw
ODI0NUU1OTAwMUU5QUJDLAogCQkJCTkzRjE5QUM1MDgyNDVFNTkwMDFFOUFCQywKIAkJCQk5M0Yx
OUFDNjA4MjQ1RTU5MDAxRTlBQkMsCkBAIC01MTA4LDcgKzUwNjAsNiBAQAogCQkJCTkzRjE5QUVD
MDgyNDVFNTkwMDFFOUFCQywKIAkJCQk5M0YxOUFFRDA4MjQ1RTU5MDAxRTlBQkMsCiAJCQkJOTNG
MTlBRUUwODI0NUU1OTAwMUU5QUJDLAotCQkJCTkzRjE5QUVGMDgyNDVFNTkwMDFFOUFCQywKIAkJ
CQk5M0YxOUFGMDA4MjQ1RTU5MDAxRTlBQkMsCiAJCQkJOTNGMTlBRjEwODI0NUU1OTAwMUU5QUJD
LAogCQkJCTkzRjE5QUYyMDgyNDVFNTkwMDFFOUFCQywKQEAgLTUxNzQsNiArNTEyNSw3IEBACiAJ
CQkJNTUwQTBCQ0QwODVGNjA0RDAwNzM1M0Q2LAogCQkJCTY1RjM3ODJBMDg3MEQ5NTgwMDBCMkY5
NCwKIAkJCQlBODVEN0MxODA4N0E2RUQ5MDA2QTkxNzIsCisJCQkJQkNFRjM0MzQwODdCNTYzRTAw
QkJGODMzLAogCQkJKTsKIAkJCWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNlOwogCQkJcnVuT25s
eUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CkBAIC01ODE0LDEyICs1NzY2LDYgQEAK
IAkJCXNldHRpbmdzID0gewogCQkJfTsKIAkJfTsKLQkJOTNGMTlBOEUwODI0NUU1OTAwMUU5QUJD
ID0gewotCQkJZmlsZVJlZiA9IEY1MjNEMjM1MDJERTQzOTYwMTg2MzVDQTsKLQkJCWlzYSA9IFBC
WEJ1aWxkRmlsZTsKLQkJCXNldHRpbmdzID0gewotCQkJfTsKLQkJfTsKIAkJOTNGMTlBOEYwODI0
NUU1OTAwMUU5QUJDID0gewogCQkJZmlsZVJlZiA9IEY1MjNEMjM3MDJERTQzOTYwMTg2MzVDQTsK
IAkJCWlzYSA9IFBCWEJ1aWxkRmlsZTsKQEAgLTYxMzIsMTIgKzYwNzgsNiBAQAogCQkJc2V0dGlu
Z3MgPSB7CiAJCQl9OwogCQl9OwotCQk5M0YxOUFDMzA4MjQ1RTU5MDAxRTlBQkMgPSB7Ci0JCQlm
aWxlUmVmID0gMzU0RjI0OEEwMkVFMjg1OTBBQ0EyQUNBOwotCQkJaXNhID0gUEJYQnVpbGRGaWxl
OwotCQkJc2V0dGluZ3MgPSB7Ci0JCQl9OwotCQl9OwogCQk5M0YxOUFDNDA4MjQ1RTU5MDAxRTlB
QkMgPSB7CiAJCQlmaWxlUmVmID0gRjUxMTdCQ0EwMkY5RkZFRjAxODYzNUNFOwogCQkJaXNhID0g
UEJYQnVpbGRGaWxlOwpAQCAtNjM4NCwxMiArNjMyNCw2IEBACiAJCQlzZXR0aW5ncyA9IHsKIAkJ
CX07CiAJCX07Ci0JCTkzRjE5QUVGMDgyNDVFNTkwMDFFOUFCQyA9IHsKLQkJCWZpbGVSZWYgPSBC
QzdGREUzMTA1QzFEOUFCMDA3MEE5MDI7Ci0JCQlpc2EgPSBQQlhCdWlsZEZpbGU7Ci0JCQlzZXR0
aW5ncyA9IHsKLQkJCX07Ci0JCX07CiAJCTkzRjE5QUYwMDgyNDVFNTkwMDFFOUFCQyA9IHsKIAkJ
CWZpbGVSZWYgPSBCQzNCMzY0NTA1QzlENUUyMDBFNDI5MDI7CiAJCQlpc2EgPSBQQlhCdWlsZEZp
bGU7CkBAIC02OTcxLDIyICs2OTA1LDYgQEAKIAkJCXJlZlR5cGUgPSA0OwogCQkJc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsKIAkJfTsKLQkJQkM3RkRFMzEwNUMxRDlBQjAwNzBBOTAyID0gewotCQkJ
ZmlsZUVuY29kaW5nID0gMzA7Ci0JCQlpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOwotCQkJbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7Ci0JCQlwYXRoID0geG1sX25hbWVzcGFj
ZV90YWJsZS5jcHA7Ci0JCQlyZWZUeXBlID0gNDsKLQkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
Ci0JCX07Ci0JCUJDN0ZERTMyMDVDMUQ5QUIwMDcwQTkwMiA9IHsKLQkJCWZpbGVFbmNvZGluZyA9
IDMwOwotCQkJaXNhID0gUEJYRmlsZVJlZmVyZW5jZTsKLQkJCWxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7Ci0JCQlwYXRoID0geG1sX25hbWVzcGFjZV90YWJsZS5oOwotCQkJcmVm
VHlwZSA9IDQ7Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwotCQl9OwogCQlCQzgwQTY5MzA0
NjhCNzgxMDBEQkNDOUMgPSB7CiAJCQlmaWxlRW5jb2RpbmcgPSAzMDsKIAkJCWlzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7CkBAIC03MTMyLDYgKzcwNTAsMzQgQEAKIAkJCXJlZlR5cGUgPSA0OwogCQkJ
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJQkNFRjM0MzIwODdCNTYzRTAwQkJGODMz
ID0geworCQkJZmlsZUVuY29kaW5nID0gMzA7CisJCQlpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOwor
CQkJbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7CisJCQlwYXRoID0gaHRt
bGZhY3RvcnkuY3BwOworCQkJcmVmVHlwZSA9IDQ7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4i
OworCQl9OworCQlCQ0VGMzQzMzA4N0I1NjNFMDBCQkY4MzMgPSB7CisJCQlmaWxlRW5jb2Rpbmcg
PSAzMDsKKwkJCWlzYSA9IFBCWEZpbGVSZWZlcmVuY2U7CisJCQlsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOworCQkJcGF0aCA9IGh0bWxmYWN0b3J5Lmg7CisJCQlyZWZUeXBlID0g
NDsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCUJDRUYzNDM0MDg3QjU2M0Uw
MEJCRjgzMyA9IHsKKwkJCWZpbGVSZWYgPSBCQ0VGMzQzMjA4N0I1NjNFMDBCQkY4MzM7CisJCQlp
c2EgPSBQQlhCdWlsZEZpbGU7CisJCQlzZXR0aW5ncyA9IHsKKwkJCX07CisJCX07CisJCUJDRUYz
NDM1MDg3QjU2M0UwMEJCRjgzMyA9IHsKKwkJCWZpbGVSZWYgPSBCQ0VGMzQzMzA4N0I1NjNFMDBC
QkY4MzM7CisJCQlpc2EgPSBQQlhCdWlsZEZpbGU7CisJCQlzZXR0aW5ncyA9IHsKKwkJCX07CisJ
CX07CiAJCUJDRjAxOTI0MDNEMzgwMjIwMEIyRDA0RCA9IHsKIAkJCWZpbGVFbmNvZGluZyA9IDMw
OwogCQkJaXNhID0gUEJYRmlsZVJlZmVyZW5jZTsKQEAgLTc1NDcsOCArNzQ5Myw2IEBACiAJCQkJ
MkQ5MDY2MEMwNjY1RDkzNzAwNkI2RjFBLAogCQkJCUY1ODc4NENEMDJERTM3NTkwMUVBNDEyMiwK
IAkJCQlGNTg3ODREQTAyREUzNzU5MDFFQTQxMjIsCi0JCQkJMzU0RjI0ODkwMkVFMjg1OTBBQ0Ey
QUNBLAotCQkJCTM1NEYyNDhBMDJFRTI4NTkwQUNBMkFDQSwKIAkJCQk5MzFDOEExNjAzODAyODhC
MDA4NjM1Q0UsCiAJCQkJOTMxQzhBMTcwMzgwMjg4QjAwODYzNUNFLAogCQkJCUJFRjdFRUEwMDVG
RjhGMEQwMDk3MTdFRSwKQEAgLTg1MTcsMjIgKzg0NjEsNiBAQAogCQkJcmVmVHlwZSA9IDQ7CiAJ
CQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OwotCQlGNTIzRDIzNTAyREU0Mzk2MDE4NjM1
Q0EgPSB7Ci0JCQlmaWxlRW5jb2RpbmcgPSAzMDsKLQkJCWlzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
Ci0JCQlsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsKLQkJCXBhdGggPSBk
dGQuY3BwOwotCQkJcmVmVHlwZSA9IDQ7Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwotCQl9
OwotCQlGNTIzRDIzNjAyREU0Mzk2MDE4NjM1Q0EgPSB7Ci0JCQlmaWxlRW5jb2RpbmcgPSAzMDsK
LQkJCWlzYSA9IFBCWEZpbGVSZWZlcmVuY2U7Ci0JCQlsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOwotCQkJcGF0aCA9IGR0ZC5oOwotCQkJcmVmVHlwZSA9IDQ7Ci0JCQlzb3VyY2VU
cmVlID0gIjxncm91cD4iOwotCQl9OwogCQlGNTIzRDIzNzAyREU0Mzk2MDE4NjM1Q0EgPSB7CiAJ
CQlmaWxlRW5jb2RpbmcgPSAzMDsKIAkJCWlzYSA9IFBCWEZpbGVSZWZlcmVuY2U7CkBAIC04NzU5
LDEwICs4Njg3LDEwIEBACiAJCX07CiAJCUY1MjNEMjc3MDJERTQzOTgwMTg2MzVDQSA9IHsKIAkJ
CWNoaWxkcmVuID0gKAorCQkJCUJDRUYzNDMyMDg3QjU2M0UwMEJCRjgzMywKKwkJCQlCQ0VGMzQz
MzA4N0I1NjNFMDBCQkY4MzMsCiAJCQkJNTUwQTBCQ0IwODVGNjA0RDAwNzM1M0Q2LAogCQkJCTU1
MEEwQkNDMDg1RjYwNEQwMDczNTNENiwKLQkJCQlGNTIzRDIzNTAyREU0Mzk2MDE4NjM1Q0EsCi0J
CQkJRjUyM0QyMzYwMkRFNDM5NjAxODYzNUNBLAogCQkJCUY1MjNEMjM3MDJERTQzOTYwMTg2MzVD
QSwKIAkJCQlGNTIzRDIzODAyREU0Mzk2MDE4NjM1Q0EsCiAJCQkJRjUyM0QyMzkwMkRFNDM5NjAx
ODYzNUNBLApAQCAtOTQ3NCw4ICs5NDAyLDYgQEAKIAkJCQlGNTIzRDMwNjAyREU0NDc2MDE4NjM1
Q0EsCiAJCQkJRjUyM0QzMDcwMkRFNDQ3NjAxODYzNUNBLAogCQkJCUY1MjNEMzA4MDJERTQ0NzYw
MTg2MzVDQSwKLQkJCQlCQzdGREUzMTA1QzFEOUFCMDA3MEE5MDIsCi0JCQkJQkM3RkRFMzIwNUMx
RDlBQjAwNzBBOTAyLAogCQkJCUY1MjNEMzA5MDJERTQ0NzYwMTg2MzVDQSwKIAkJCQlGNTIzRDMw
QTAyREU0NDc2MDE4NjM1Q0EsCiAJCQkpOwpJbmRleDoga2h0bWwva2h0bWxfcGFydC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwva2h0bWxfcGFydC5jcHAs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzI1CmRpZmYgLXUgLXAgLXIxLjMyNSBraHRtbC9raHRt
bF9wYXJ0LmNwcAotLS0ga2h0bWwva2h0bWxfcGFydC5jcHAJMjggSnVuIDIwMDUgMjM6MjI6MTYg
LTAwMDAJMS4zMjUKKysrIGtodG1sL2todG1sX3BhcnQuY3BwCTkgSnVsIDIwMDUgMDI6NDI6MjQg
LTAwMDAKQEAgLTIwOCw2ICsyMDgsNyBAQCBLSFRNTFBhcnQ6OktIVE1MUGFydCggS0hUTUxWaWV3
ICp2aWV3LCBRCiB2b2lkIEtIVE1MUGFydDo6aW5pdCggS0hUTUxWaWV3ICp2aWV3LCBHVUlQcm9m
aWxlIHByb2YgKQogewogICBBdG9taWNTdHJpbmc6OmluaXQoKTsKKyAgSFRNTE5hbWVzOjppbml0
KCk7IC8vIEZJWE1FOiBXZSBzaG91bGQgbWFrZSB0aGlzIGhhcHBlbiBvbmx5IHdoZW4gSFRNTCBp
cyB1c2VkLgogICBpZiAoIHByb2YgPT0gRGVmYXVsdEdVSSApCiAgICAgc2V0WE1MRmlsZSggImto
dG1sLnJjIiApOwogICBlbHNlIGlmICggcHJvZiA9PSBCcm93c2VyVmlld0dVSSApCkBAIC01NzI0
LDcgKzU3MjUsNyBAQCBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb25JbXBsICpLSFRNTFBhCiAg
ICAgaW50IGV4Y2VwdGlvbkNvZGUgPSAwOwogCiAgICAgaWYgKGQtPm1fdHlwaW5nU3R5bGUpIHsK
LSAgICAgICAgc3R5bGVFbGVtZW50ID0geG1sRG9jSW1wbCgpLT5jcmVhdGVIVE1MRWxlbWVudCgi
c3BhbiIsIGV4Y2VwdGlvbkNvZGUpOworICAgICAgICBzdHlsZUVsZW1lbnQgPSB4bWxEb2NJbXBs
KCktPmNyZWF0ZUVsZW1lbnROUyhIVE1MTmFtZXM6OnhodG1sTmFtZXNwYWNlVVJJKCksICJzcGFu
IiwgZXhjZXB0aW9uQ29kZSk7CiAgICAgICAgIGFzc2VydChleGNlcHRpb25Db2RlID09IDApOwog
CiAgICAgICAgIHN0eWxlRWxlbWVudC0+cmVmKCk7CkluZGV4OiBraHRtbC9raHRtbHZpZXcuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2todG1sdmlldy5j
cHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTMzCmRpZmYgLXUgLXAgLXIxLjEzMyBraHRtbC9r
aHRtbHZpZXcuY3BwCi0tLSBraHRtbC9raHRtbHZpZXcuY3BwCTExIE1heSAyMDA1IDAwOjU4OjI3
IC0wMDAwCTEuMTMzCisrKyBraHRtbC9raHRtbHZpZXcuY3BwCTkgSnVsIDIwMDUgMDI6NDI6MjYg
LTAwMDAKQEAgLTYwNywxMiArNjA3LDEyIEBAIHZvaWQgS0hUTUxWaWV3OjpsYXlvdXQoKQogICAg
IGlmIChkb2N1bWVudC0+aXNIVE1MRG9jdW1lbnQoKSkgewogICAgICAgICBOb2RlSW1wbCAqYm9k
eSA9IHN0YXRpY19jYXN0PEhUTUxEb2N1bWVudEltcGwqPihkb2N1bWVudCktPmJvZHkoKTsKICAg
ICAgICAgaWYgKGJvZHkgJiYgYm9keS0+cmVuZGVyZXIoKSkgewotICAgICAgICAgICAgaWYgKGJv
ZHktPmlkKCkgPT0gSURfRlJBTUVTRVQpIHsKKyAgICAgICAgICAgIGlmIChib2R5LT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6ZnJhbWVzZXQoKSkpIHsKICAgICAgICAgICAgICAgICBib2R5LT5yZW5k
ZXJlcigpLT5zZXROZWVkc0xheW91dCh0cnVlKTsKICAgICAgICAgICAgICAgICB2TW9kZSA9IEFs
d2F5c09mZjsKICAgICAgICAgICAgICAgICBoTW9kZSA9IEFsd2F5c09mZjsKICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGJvZHktPmlkKCkgPT0gSURfQk9EWSkgeworICAgICAg
ICAgICAgZWxzZSBpZiAoYm9keS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJvZHkoKSkpIHsKICAg
ICAgICAgICAgICAgICBSZW5kZXJPYmplY3QqIG8gPSAocm9vdFJlbmRlcmVyLT5zdHlsZSgpLT5v
dmVyZmxvdygpID09IE9WSVNJQkxFKSA/IGJvZHktPnJlbmRlcmVyKCkgOiByb290UmVuZGVyZXI7
CiAgICAgICAgICAgICAgICAgYXBwbHlPdmVyZmxvd1RvVmlld3BvcnQobywgaE1vZGUsIHZNb2Rl
KTsgLy8gT25seSBhcHBsaWVzIHRvIEhUTUwgVUFzLCBub3QgdG8gWE1ML1hIVE1MIFVBcwogICAg
ICAgICAgICAgfQpAQCAtODc3LDEwICs4NzcsNyBAQCB2b2lkIEtIVE1MVmlldzo6dmlld3BvcnRN
b3VzZURvdWJsZUNsaWNrCiAKIHN0YXRpYyBib29sIGlzU3VibWl0SW1hZ2UoRE9NOjpOb2RlSW1w
bCAqbm9kZSkKIHsKLSAgICByZXR1cm4gbm9kZQotICAgICAgICAmJiBub2RlLT5pc0hUTUxFbGVt
ZW50KCkKLSAgICAgICAgJiYgbm9kZS0+aWQoKSA9PSBJRF9JTlBVVAotICAgICAgICAmJiBzdGF0
aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50SW1wbCo+KG5vZGUpLT5pbnB1dFR5cGUoKSA9PSBIVE1M
SW5wdXRFbGVtZW50SW1wbDo6SU1BR0U7CisgICAgcmV0dXJuIG5vZGUgJiYgbm9kZS0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OmlucHV0KCkpICYmIHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnRJ
bXBsKj4obm9kZSktPmlucHV0VHlwZSgpID09IEhUTUxJbnB1dEVsZW1lbnRJbXBsOjpJTUFHRTsK
IH0KIAogdm9pZCBLSFRNTFZpZXc6OnZpZXdwb3J0TW91c2VNb3ZlRXZlbnQoIFFNb3VzZUV2ZW50
ICogX21vdXNlICkKSW5kZXg6IGtodG1sL2Nzcy9jc3NfYmFzZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvY3NzL2Nzc19iYXNlLmNwcCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS4xNQpkaWZmIC11IC1wIC1yMS4xNSBraHRtbC9jc3MvY3NzX2Jhc2UuY3Bw
Ci0tLSBraHRtbC9jc3MvY3NzX2Jhc2UuY3BwCTEyIEp1biAyMDA1IDA0OjA3OjMwIC0wMDAwCTEu
MTUKKysrIGtodG1sL2Nzcy9jc3NfYmFzZS5jcHAJOSBKdWwgMjAwNSAwMjo0MjoyNiAtMDAwMApA
QCAtOTMsOSArOTMsMTUgQEAgU3R5bGVMaXN0SW1wbDo6flN0eWxlTGlzdEltcGwoKQogCiAvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCitjb25zdCBRdWFsaWZpZWROYW1lJiBDU1NTZWxlY3Rv
cjo6YW55VGFnTmFtZSgpCit7CisgICAgc3RhdGljIFF1YWxpZmllZE5hbWUgYW55TmFtZShudWxs
QXRvbSwgc3RhckF0b20sIHN0YXJBdG9tKTsKKyAgICByZXR1cm4gYW55TmFtZTsKK30KKwogdm9p
ZCBDU1NTZWxlY3Rvcjo6cHJpbnQodm9pZCkKIHsKLSAgICBrZERlYnVnKCA2MDgwICkgPDwgIltT
ZWxlY3RvcjogdGFnID0gIiA8PCAgICAgICB0YWcgPDwgIiwgYXR0ciA9IFwiIiA8PCBhdHRyIDw8
ICJcIiwgbWF0Y2ggPSBcIiIgPDwgbWF0Y2gKKyAgICBrZERlYnVnKCA2MDgwICkgPDwgIltTZWxl
Y3RvcjogdGFnID0gIiA8PCAgICAgICB0YWcubG9jYWxOYW1lKCkuc3RyaW5nKCkgPDwgIiwgYXR0
ciA9IFwiIiA8PCBhdHRyIDw8ICJcIiwgbWF0Y2ggPSBcIiIgPDwgbWF0Y2gKIAkJICAgIDw8ICJc
IiB2YWx1ZSA9IFwiIiA8PCB2YWx1ZS5zdHJpbmcoKS5sYXRpbjEoKSA8PCAiXCIgcmVsYXRpb24g
PSAiIDw8IChpbnQpcmVsYXRpb24KIAkJICAgIDw8ICJdIiA8PCBlbmRsOwogICAgIGlmICggdGFn
SGlzdG9yeSApCkBAIC0xMDcsNyArMTEzLDcgQEAgdW5zaWduZWQgaW50IENTU1NlbGVjdG9yOjpz
cGVjaWZpY2l0eSgpCiB7CiAgICAgLy8gRklYTUU6IFBzZXVkby1lbGVtZW50cyBhbmQgcHNldWRv
LWNsYXNzZXMgZG8gbm90IGhhdmUgdGhlIHNhbWUgc3BlY2lmaWNpdHkuIFRoaXMgZnVuY3Rpb24K
ICAgICAvLyBpc24ndCBxdWl0ZSBjb3JyZWN0LgotICAgIGludCBzID0gKChsb2NhbE5hbWVQYXJ0
KHRhZykgPT0gYW55TG9jYWxOYW1lKSA/IDAgOiAxKTsKKyAgICBpbnQgcyA9ICh0YWcubG9jYWxO
YW1lKCkgPT0gc3RhckF0b20gPyAwIDogMSk7CiAgICAgc3dpdGNoKG1hdGNoKQogICAgIHsKICAg
ICBjYXNlIElkOgpAQCAtMjQwLDYwICsyNDYsNTkgQEAgYm9vbCBDU1NTZWxlY3Rvcjo6b3BlcmF0
b3IgPT0gKCBjb25zdCBDUwogCiBET01TdHJpbmcgQ1NTU2VsZWN0b3I6OnNlbGVjdG9yVGV4dCgp
IGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IFN1cHBvcnQgbmFtZXNwYWNlcyB3aGVuIGR1bXBpbmcg
dGhlIHNlbGVjdG9yIHRleHQuICBUaGlzIHJlcXVpcmVzIHByZXNlcnZpbmcKLSAgICAvLyB0aGUg
b3JpZ2luYWwgbmFtZXNwYWNlIHByZWZpeCB1c2VkLiBVZ2guIC1kd2gKKyAgICAvLyBGSVhNRTog
U3VwcG9ydCBuYW1lc3BhY2VzIHdoZW4gZHVtcGluZyB0aGUgc2VsZWN0b3IgdGV4dC4gLWR3aAog
ICAgIERPTVN0cmluZyBzdHI7CiAgICAgY29uc3QgQ1NTU2VsZWN0b3IqIGNzID0gdGhpczsKLSAg
ICBRX1VJTlQxNiB0YWcgPSBsb2NhbE5hbWVQYXJ0KGNzLT50YWcpOwotICAgIGlmICggdGFnID09
IGFueUxvY2FsTmFtZSAmJiBjcy0+YXR0ciA9PSBBVFRSX0lEICYmIGNzLT5tYXRjaCA9PSBDU1NT
ZWxlY3Rvcjo6RXhhY3QgKQorICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lID0gY3Mt
PnRhZy5sb2NhbE5hbWUoKTsKKyAgICBpZiAobG9jYWxOYW1lID09IHN0YXJBdG9tICYmIGNzLT5h
dHRyID09IEFUVFJfSUQgJiYgY3MtPm1hdGNoID09IENTU1NlbGVjdG9yOjpFeGFjdCkKICAgICB7
CiAgICAgICAgIHN0ciA9ICIjIjsKICAgICAgICAgc3RyICs9IGNzLT52YWx1ZS5zdHJpbmcoKTsK
ICAgICB9Ci0gICAgZWxzZSBpZiAoIHRhZyA9PSBhbnlMb2NhbE5hbWUgJiYgY3MtPmF0dHIgPT0g
QVRUUl9DTEFTUyAmJiBjcy0+bWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OkNsYXNzICkKKyAgICBlbHNl
IGlmIChsb2NhbE5hbWUgPT0gc3RhckF0b20gJiYgY3MtPmF0dHIgPT0gQVRUUl9DTEFTUyAmJiBj
cy0+bWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OkNsYXNzKQogICAgIHsKICAgICAgICAgc3RyID0gIi4i
OwogICAgICAgICBzdHIgKz0gY3MtPnZhbHVlLnN0cmluZygpOwogICAgIH0KLSAgICBlbHNlIGlm
ICggdGFnID09IGFueUxvY2FsTmFtZSAmJiBjcy0+bWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OlBzZXVk
b0NsYXNzICkKKyAgICBlbHNlIGlmIChsb2NhbE5hbWUgPT0gc3RhckF0b20gICYmIGNzLT5tYXRj
aCA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3MpCiAgICAgewogICAgICAgICBzdHIgPSAiOiI7
CiAgICAgICAgIHN0ciArPSBjcy0+dmFsdWUuc3RyaW5nKCk7CiAgICAgfQotICAgIGVsc2UgaWYg
KCB0YWcgPT0gYW55TG9jYWxOYW1lICYmIGNzLT5tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6UHNldWRv
RWxlbWVudCApCisgICAgZWxzZSBpZiAobG9jYWxOYW1lID09IHN0YXJBdG9tICYmIGNzLT5tYXRj
aCA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVudCkKICAgICB7CiAgICAgICAgIHN0ciA9ICI6
OiI7CiAgICAgICAgIHN0ciArPSBjcy0+dmFsdWUuc3RyaW5nKCk7CiAgICAgfQogICAgIGVsc2UK
ICAgICB7Ci0gICAgICAgIGlmICggdGFnID09IGFueUxvY2FsTmFtZSApCisgICAgICAgIGlmIChs
b2NhbE5hbWUgPT0gc3RhckF0b20pCiAgICAgICAgICAgICBzdHIgPSAiKiI7CiAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHN0ciA9IGdldFRhZ05hbWUoIGNzLT50YWcgKTsKLSAgICAgICAgaWYg
KCBjcy0+YXR0ciA9PSBBVFRSX0lEICYmIGNzLT5tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6RXhhY3Qg
KQorICAgICAgICAgICAgc3RyID0gbG9jYWxOYW1lOworICAgICAgICBpZiAoY3MtPmF0dHIgPT0g
QVRUUl9JRCAmJiBjcy0+bWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OkV4YWN0KQogICAgICAgICB7CiAg
ICAgICAgICAgICBzdHIgKz0gIiMiOwogICAgICAgICAgICAgc3RyICs9IGNzLT52YWx1ZS5zdHJp
bmcoKTsKICAgICAgICAgfQotICAgICAgICBlbHNlIGlmICggY3MtPmF0dHIgPT0gQVRUUl9DTEFT
UyAmJiBjcy0+bWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OkNsYXNzICkKKyAgICAgICAgZWxzZSBpZiAo
Y3MtPmF0dHIgPT0gQVRUUl9DTEFTUyAmJiBjcy0+bWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OkNsYXNz
KQogICAgICAgICB7CiAgICAgICAgICAgICBzdHIgKz0gIi4iOwogICAgICAgICAgICAgc3RyICs9
IGNzLT52YWx1ZS5zdHJpbmcoKTsKICAgICAgICAgfQotICAgICAgICBlbHNlIGlmICggY3MtPm1h
dGNoID09IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzcyApCisgICAgICAgIGVsc2UgaWYgKGNzLT5t
YXRjaCA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3MpCiAgICAgICAgIHsKICAgICAgICAgICAg
IHN0ciArPSAiOiI7CiAgICAgICAgICAgICBzdHIgKz0gY3MtPnZhbHVlLnN0cmluZygpOwogICAg
ICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKCBjcy0+bWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OlBzZXVk
b0VsZW1lbnQgKQorICAgICAgICBlbHNlIGlmIChjcy0+bWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OlBz
ZXVkb0VsZW1lbnQpCiAgICAgICAgIHsKICAgICAgICAgICAgIHN0ciArPSAiOjoiOwogICAgICAg
ICAgICAgc3RyICs9IGNzLT52YWx1ZS5zdHJpbmcoKTsKICAgICAgICAgfQogICAgICAgICAvLyBv
cHRpb25hbCBhdHRyaWJ1dGUKLSAgICAgICAgaWYgKCBjcy0+YXR0ciApIHsKLSAgICAgICAgICAg
IERPTVN0cmluZyBhdHRyTmFtZSA9IGdldEF0dHJOYW1lKCBjcy0+YXR0ciApOworICAgICAgICBp
ZiAoY3MtPmF0dHIpIHsKKyAgICAgICAgICAgIERPTVN0cmluZyBhdHRyTmFtZSA9IGdldEF0dHJO
YW1lKGNzLT5hdHRyKTsKICAgICAgICAgICAgIHN0ciArPSAiWyI7CiAgICAgICAgICAgICBzdHIg
Kz0gYXR0ck5hbWU7CiAgICAgICAgICAgICBzd2l0Y2ggKGNzLT5tYXRjaCkgewpJbmRleDoga2h0
bWwvY3NzL2Nzc19iYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUv
a2h0bWwvY3NzL2Nzc19iYXNlLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTIKZGlmZiAtdSAt
cCAtcjEuMTIga2h0bWwvY3NzL2Nzc19iYXNlLmgKLS0tIGtodG1sL2Nzcy9jc3NfYmFzZS5oCTEy
IEp1biAyMDA1IDA0OjA3OjMwIC0wMDAwCTEuMTIKKysrIGtodG1sL2Nzcy9jc3NfYmFzZS5oCTkg
SnVsIDIwMDUgMDI6NDI6MjYgLTAwMDAKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJkb20v
ZG9tX3N0cmluZy5oIgogI2luY2x1ZGUgImRvbS9kb21fbWlzYy5oIgogI2luY2x1ZGUgInhtbC9k
b21fbm9kZWltcGwuaCIKKyNpbmNsdWRlICJkb21fcW5hbWUuaCIKICNpbmNsdWRlICJtaXNjL3No
YXJlZC5oIgogI2luY2x1ZGUgPHFkYXRldGltZS5oPgogI2luY2x1ZGUgPHFwdHJsaXN0Lmg+CkBA
IC00NiwyMCArNDcsMjAgQEAgbmFtZXNwYWNlIERPTSB7CiAgICAgY2xhc3MgRG9jdW1lbnRJbXBs
OwogCiAgICAgc3RydWN0IENTU05hbWVzcGFjZSB7Ci0gICAgICAgIERPTVN0cmluZyBtX3ByZWZp
eDsKLSAgICAgICAgRE9NU3RyaW5nIG1fdXJpOworICAgICAgICBBdG9taWNTdHJpbmcgbV9wcmVm
aXg7CisgICAgICAgIEF0b21pY1N0cmluZyBtX3VyaTsKICAgICAgICAgQ1NTTmFtZXNwYWNlKiBt
X3BhcmVudDsKIAogICAgICAgICBNQUlOX1RIUkVBRF9BTExPQ0FURUQ7CiAKLSAgICAgICAgQ1NT
TmFtZXNwYWNlKGNvbnN0IERPTVN0cmluZyYgcCwgY29uc3QgRE9NU3RyaW5nJiB1LCBDU1NOYW1l
c3BhY2UqIHBhcmVudCkgCisgICAgICAgIENTU05hbWVzcGFjZShjb25zdCBBdG9taWNTdHJpbmcm
IHAsIGNvbnN0IEF0b21pY1N0cmluZyYgdSwgQ1NTTmFtZXNwYWNlKiBwYXJlbnQpIAogICAgICAg
ICAgICAgOm1fcHJlZml4KHApLCBtX3VyaSh1KSwgbV9wYXJlbnQocGFyZW50KSB7fQogICAgICAg
ICB+Q1NTTmFtZXNwYWNlKCkgeyBkZWxldGUgbV9wYXJlbnQ7IH0KICAgICAgICAgCi0gICAgICAg
IGNvbnN0IERPTVN0cmluZyYgdXJpKCkgeyByZXR1cm4gbV91cmk7IH0KLSAgICAgICAgY29uc3Qg
RE9NU3RyaW5nJiBwcmVmaXgoKSB7IHJldHVybiBtX3ByZWZpeDsgfQorICAgICAgICBjb25zdCBB
dG9taWNTdHJpbmcmIHVyaSgpIHsgcmV0dXJuIG1fdXJpOyB9CisgICAgICAgIGNvbnN0IEF0b21p
Y1N0cmluZyYgcHJlZml4KCkgeyByZXR1cm4gbV9wcmVmaXg7IH0KICAgICAgICAgCi0gICAgICAg
IENTU05hbWVzcGFjZSogbmFtZXNwYWNlRm9yUHJlZml4KGNvbnN0IERPTVN0cmluZyYgcHJlZml4
KSB7CisgICAgICAgIENTU05hbWVzcGFjZSogbmFtZXNwYWNlRm9yUHJlZml4KGNvbnN0IEF0b21p
Y1N0cmluZyYgcHJlZml4KSB7CiAgICAgICAgICAgICBpZiAocHJlZml4ID09IG1fcHJlZml4KQog
ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICAgICAgaWYgKG1fcGFyZW50KQpA
QCAtNzIsOCArNzMsMTQgQEAgbmFtZXNwYWNlIERPTSB7CiAgICAgY2xhc3MgQ1NTU2VsZWN0b3IK
ICAgICB7CiAgICAgcHVibGljOgotCUNTU1NlbGVjdG9yKCkKLQkgICAgOiB0YWdIaXN0b3J5KDAp
LCBzaW1wbGVTZWxlY3RvcigwKSwgbmV4dFNlbGVjdG9yKDApLCBhdHRyKDApLCB0YWcoYW55UU5h
bWUpLAorICAgICAgICBDU1NTZWxlY3RvcigpCisgICAgICAgICAgICA6IHRhZ0hpc3RvcnkoMCks
IHNpbXBsZVNlbGVjdG9yKDApLCBuZXh0U2VsZWN0b3IoMCksIGF0dHIoMCksIHRhZyhhbnlUYWdO
YW1lKCkpLAorICAgICAgICAgICAgICByZWxhdGlvbiggRGVzY2VuZGFudCApLCBtYXRjaCggTm9u
ZSApLAorICAgICAgICAgICAgICBwc2V1ZG9JZCggMCApLCBfcHNldWRvVHlwZShQc2V1ZG9Ob3RQ
YXJzZWQpCisgICAgICAgIHt9CisgICAgICAgIAorCUNTU1NlbGVjdG9yKGNvbnN0IFF1YWxpZmll
ZE5hbWUmIHFOYW1lKQorCSAgICA6IHRhZ0hpc3RvcnkoMCksIHNpbXBsZVNlbGVjdG9yKDApLCBu
ZXh0U2VsZWN0b3IoMCksIGF0dHIoMCksIHRhZyhxTmFtZSksCiAgICAgICAgICAgICAgIHJlbGF0
aW9uKCBEZXNjZW5kYW50ICksIG1hdGNoKCBOb25lICksCiAgICAgICAgICAgICAgIHBzZXVkb0lk
KCAwICksIF9wc2V1ZG9UeXBlKFBzZXVkb05vdFBhcnNlZCkKICAgICAgICAge30KQEAgLTE2Nywx
MiArMTc0LDE3IEBAIG5hbWVzcGFjZSBET00gewogICAgICAgICAgICAgcmV0dXJuIF9wc2V1ZG9U
eXBlOwogICAgICAgICB9CiAKKyAgICAgICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGFu
eVRhZ05hbWUoKTsKKworICAgICAgICBib29sIGhhc1RhZygpIGNvbnN0IHsgcmV0dXJuIHRhZyAh
PSBhbnlUYWdOYW1lKCk7IH0KKwogCW11dGFibGUgRE9NOjpBdG9taWNTdHJpbmcgdmFsdWU7CiAJ
Q1NTU2VsZWN0b3IqIHRhZ0hpc3Rvcnk7CiAgICAgICAgIENTU1NlbGVjdG9yKiBzaW1wbGVTZWxl
Y3RvcjsgLy8gVXNlZCBmb3IgOm5vdC4KICAgICAgICAgQ1NTU2VsZWN0b3IqIG5leHRTZWxlY3Rv
cjsgLy8gdXNlZCBmb3IgLC1jaGFpbmVkIHNlbGVjdG9ycwogCVFfVUlOVDMyICAgICBhdHRyOwot
CVFfVUlOVDMyICAgICB0YWc7CisJCisgICAgICAgIFF1YWxpZmllZE5hbWUgdGFnOwogCiAgICAg
ICAgIFJlbGF0aW9uIHJlbGF0aW9uICAgICAgICAgICAgICA6IDM7CiAJbXV0YWJsZSBNYXRjaCAg
bWF0Y2ggICAgICAgICAgIDogNDsKSW5kZXg6IGtodG1sL2Nzcy9jc3NfcnVsZWltcGwuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2Nzcy9jc3NfcnVsZWlt
cGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE4CmRpZmYgLXUgLXAgLXIxLjE4IGtodG1s
L2Nzcy9jc3NfcnVsZWltcGwuY3BwCi0tLSBraHRtbC9jc3MvY3NzX3J1bGVpbXBsLmNwcAkxMSBN
YXkgMjAwNSAwNTo0OTozNCAtMDAwMAkxLjE4CisrKyBraHRtbC9jc3MvY3NzX3J1bGVpbXBsLmNw
cAk5IEp1bCAyMDA1IDAyOjQyOjI2IC0wMDAwCkBAIC0zMSw3ICszMSw2IEBACiAjaW5jbHVkZSAi
Y3NzL2Nzc19ydWxlaW1wbC5oIgogCiAjaW5jbHVkZSAibWlzYy9sb2FkZXIuaCIKLSNpbmNsdWRl
ICJtaXNjL2h0bWx0YWdzLmgiCiAjaW5jbHVkZSAibWlzYy9odG1sYXR0cnMuaCIKICNpbmNsdWRl
ICJ4bWwvZG9tX2RvY2ltcGwuaCIKIApJbmRleDoga2h0bWwvY3NzL2Nzc19ydWxlaW1wbC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2Nzcy9jc3NfcnVsZWlt
cGwuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNApkaWZmIC11IC1wIC1yMS4xNCBraHRtbC9j
c3MvY3NzX3J1bGVpbXBsLmgKLS0tIGtodG1sL2Nzcy9jc3NfcnVsZWltcGwuaAkxMCBNYXkgMjAw
NSAxODo0MjowMiAtMDAwMAkxLjE0CisrKyBraHRtbC9jc3MvY3NzX3J1bGVpbXBsLmgJOSBKdWwg
MjAwNSAwMjo0MjoyNyAtMDAwMApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgImNzcy9jc3Nf
YmFzZS5oIgogI2luY2x1ZGUgIm1pc2MvbG9hZGVyX2NsaWVudC5oIgogI2luY2x1ZGUgIm1pc2Mv
c2hhcmVkLmgiCisjaW5jbHVkZSAibWlzYy9tYWluX3RocmVhZF9tYWxsb2MuaCIKICNpbmNsdWRl
ICJjc3NfdmFsdWVpbXBsLmgiCiAKIG5hbWVzcGFjZSBraHRtbCB7CkBAIC01MCw2ICs1MSw4IEBA
IHB1YmxpYzoKICAgICBDU1NSdWxlSW1wbChTdHlsZUJhc2VJbXBsICpwYXJlbnQpCiAgICAgICAg
IDogU3R5bGVCYXNlSW1wbChwYXJlbnQpLCBtX3R5cGUoQ1NTUnVsZTo6VU5LTk9XTl9SVUxFKSB7
fQogCisgICAgTUFJTl9USFJFQURfQUxMT0NBVEVEOworCiAgICAgdmlydHVhbCBib29sIGlzUnVs
ZSgpIHsgcmV0dXJuIHRydWU7IH0KICAgICB1bnNpZ25lZCBzaG9ydCB0eXBlKCkgY29uc3QgeyBy
ZXR1cm4gbV90eXBlOyB9CiAKQEAgLTcxLDYgKzc0LDggQEAgcHVibGljOgogICAgIENTU0NoYXJz
ZXRSdWxlSW1wbChTdHlsZUJhc2VJbXBsICpwYXJlbnQpCiAgICAgICAgIDogQ1NTUnVsZUltcGwo
cGFyZW50KSB7IG1fdHlwZSA9IENTU1J1bGU6OkNIQVJTRVRfUlVMRTsgfQogCisgICAgTUFJTl9U
SFJFQURfQUxMT0NBVEVEOworCiAgICAgdmlydHVhbCBib29sIGlzQ2hhcnNldFJ1bGUoKSB7IHJl
dHVybiB0cnVlOyB9CiAKICAgICBET01TdHJpbmcgZW5jb2RpbmcoKSBjb25zdCB7IHJldHVybiBt
X2VuY29kaW5nOyB9CkBAIC04NSw5ICs5MCwxMCBAQCBjbGFzcyBDU1NGb250RmFjZVJ1bGVJbXBs
IDogcHVibGljIENTU1J1CiB7CiBwdWJsaWM6CiAgICAgQ1NTRm9udEZhY2VSdWxlSW1wbChTdHls
ZUJhc2VJbXBsICpwYXJlbnQpOwotCiAgICAgdmlydHVhbCB+Q1NTRm9udEZhY2VSdWxlSW1wbCgp
OwogCisgICAgTUFJTl9USFJFQURfQUxMT0NBVEVEOworICAgIAogICAgIENTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uSW1wbCAqc3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlOyB9CiAKICAg
ICB2aXJ0dWFsIGJvb2wgaXNGb250RmFjZVJ1bGUoKSB7IHJldHVybiB0cnVlOyB9CkBAIC0xMDQs
OSArMTEwLDEwIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRE9NOjpE
T01TdHJpbmcgJm1lZGlhICk7CiAgICAgQ1NTSW1wb3J0UnVsZUltcGwoIFN0eWxlQmFzZUltcGwg
KnBhcmVudCwgY29uc3QgRE9NOjpET01TdHJpbmcgJmhyZWYsCiAgICAgICAgICAgICAgICAgICAg
ICAgIE1lZGlhTGlzdEltcGwgKm1lZGlhICk7Ci0KICAgICB2aXJ0dWFsIH5DU1NJbXBvcnRSdWxl
SW1wbCgpOwogCisgICAgTUFJTl9USFJFQURfQUxMT0NBVEVEOworCiAgICAgRE9NOjpET01TdHJp
bmcgaHJlZigpIGNvbnN0IHsgcmV0dXJuIG1fc3RySHJlZjsgfQogICAgIE1lZGlhTGlzdEltcGwg
Km1lZGlhKCkgY29uc3QgeyByZXR1cm4gbV9sc3RNZWRpYTsgfQogICAgIENTU1N0eWxlU2hlZXRJ
bXBsICpzdHlsZVNoZWV0KCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZVNoZWV0OyB9CkBAIC0xNTYs
OSArMTYzLDEwIEBAIHB1YmxpYzoKICAgICBDU1NNZWRpYVJ1bGVJbXBsKCBTdHlsZUJhc2VJbXBs
ICpwYXJlbnQgKTsKICAgICBDU1NNZWRpYVJ1bGVJbXBsKCBTdHlsZUJhc2VJbXBsICpwYXJlbnQs
IGNvbnN0IERPTTo6RE9NU3RyaW5nICZtZWRpYSApOwogICAgIENTU01lZGlhUnVsZUltcGwoIFN0
eWxlQmFzZUltcGwgKnBhcmVudCwgTWVkaWFMaXN0SW1wbCAqbWVkaWFMaXN0LCBDU1NSdWxlTGlz
dEltcGwgKnJ1bGVMaXN0ICk7Ci0KICAgICB2aXJ0dWFsIH5DU1NNZWRpYVJ1bGVJbXBsKCk7CiAK
KyAgICBNQUlOX1RIUkVBRF9BTExPQ0FURUQ7CisKICAgICBNZWRpYUxpc3RJbXBsICptZWRpYSgp
IGNvbnN0IHsgcmV0dXJuIG1fbHN0TWVkaWE7IH0KICAgICBDU1NSdWxlTGlzdEltcGwgKmNzc1J1
bGVzKCkgeyByZXR1cm4gbV9sc3RDU1NSdWxlczsgfQogCkBAIC0xNzksOSArMTg3LDEwIEBAIGNs
YXNzIENTU1BhZ2VSdWxlSW1wbCA6IHB1YmxpYyBDU1NSdWxlSW0KIHsKIHB1YmxpYzoKICAgICBD
U1NQYWdlUnVsZUltcGwoU3R5bGVCYXNlSW1wbCAqcGFyZW50KTsKLQogICAgIHZpcnR1YWwgfkNT
U1BhZ2VSdWxlSW1wbCgpOwogCisgICAgTUFJTl9USFJFQURfQUxMT0NBVEVEOworCiAgICAgQ1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb25JbXBsICpzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5
bGU7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBpc1BhZ2VSdWxlKCkgeyByZXR1cm4gdHJ1ZTsgfQpA
QCAtMTk5LDkgKzIwOCwxMCBAQCBjbGFzcyBDU1NTdHlsZVJ1bGVJbXBsIDogcHVibGljIENTU1J1
bGVJCiB7CiBwdWJsaWM6CiAgICAgQ1NTU3R5bGVSdWxlSW1wbChTdHlsZUJhc2VJbXBsICpwYXJl
bnQpOwotCiAgICAgdmlydHVhbCB+Q1NTU3R5bGVSdWxlSW1wbCgpOwogCisgICAgTUFJTl9USFJF
QURfQUxMT0NBVEVEOworCiAgICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25JbXBsICpzdHls
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGU7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBpc1N0eWxl
UnVsZSgpIHsgcmV0dXJuIHRydWU7IH0KQEAgLTIyNyw2ICsyMzcsOCBAQCBjbGFzcyBDU1NVbmtu
b3duUnVsZUltcGwgOiBwdWJsaWMgQ1NTUnVsCiBwdWJsaWM6CiAgICAgQ1NTVW5rbm93blJ1bGVJ
bXBsKFN0eWxlQmFzZUltcGwgKnBhcmVudCkgOiBDU1NSdWxlSW1wbChwYXJlbnQpIHt9CiAKKyAg
ICBNQUlOX1RIUkVBRF9BTExPQ0FURUQ7CisKICAgICB2aXJ0dWFsIGJvb2wgaXNVbmtub3duUnVs
ZSgpIHsgcmV0dXJuIHRydWU7IH0KIH07CiAKSW5kZXg6IGtodG1sL2Nzcy9jc3Nfc3R5bGVzaGVl
dGltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2Nz
cy9jc3Nfc3R5bGVzaGVldGltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEyCmRpZmYg
LXUgLXAgLXIxLjEyIGtodG1sL2Nzcy9jc3Nfc3R5bGVzaGVldGltcGwuY3BwCi0tLSBraHRtbC9j
c3MvY3NzX3N0eWxlc2hlZXRpbXBsLmNwcAkxMSBNYXkgMjAwNSAwMDo1ODoyNyAtMDAwMAkxLjEy
CisrKyBraHRtbC9jc3MvY3NzX3N0eWxlc2hlZXRpbXBsLmNwcAk5IEp1bCAyMDA1IDAyOjQyOjI3
IC0wMDAwCkBAIC0zOCw4ICszOCw2IEBACiAjaW5jbHVkZSAiaHRtbC9odG1sX2RvY3VtZW50aW1w
bC5oIgogI2luY2x1ZGUgIm1pc2MvbG9hZGVyLmgiCiAKLSNpbmNsdWRlICJ4bWxfbmFtZXNwYWNl
X3RhYmxlLmgiCi0KICNpbmNsdWRlIDxrZGVidWcuaD4KIAogdXNpbmcgbmFtZXNwYWNlIERPTTsK
QEAgLTIxMCw3ICsyMDgsNyBAQCB2b2lkIENTU1N0eWxlU2hlZXRJbXBsOjpkZWxldGVSdWxlKCB1
bnNpCiAgICAgYi0+ZGVyZWYoKTsKIH0KIAotdm9pZCBDU1NTdHlsZVNoZWV0SW1wbDo6YWRkTmFt
ZXNwYWNlKENTU1BhcnNlciogcCwgY29uc3QgRE9NOjpET01TdHJpbmcmIHByZWZpeCwgY29uc3Qg
RE9NOjpET01TdHJpbmcmIHVyaSkKK3ZvaWQgQ1NTU3R5bGVTaGVldEltcGw6OmFkZE5hbWVzcGFj
ZShDU1NQYXJzZXIqIHAsIGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4LCBjb25zdCBBdG9taWNT
dHJpbmcmIHVyaSkKIHsKICAgICBpZiAodXJpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwpA
QCAtMjIwLDI2ICsyMTgsMjEgQEAgdm9pZCBDU1NTdHlsZVNoZWV0SW1wbDo6YWRkTmFtZXNwYWNl
KENTUwogICAgIGlmIChwcmVmaXguaXNFbXB0eSgpKQogICAgICAgICAvLyBTZXQgdGhlIGRlZmF1
bHQgbmFtZXNwYWNlIG9uIHRoZSBwYXJzZXIgc28gdGhhdCBzZWxlY3RvcnMgdGhhdCBvbWl0IG5h
bWVzcGFjZSBpbmZvIHdpbGwKICAgICAgICAgLy8gYmUgYWJsZSB0byBwaWNrIGl0IHVwIGVhc2ls
eS4KLSAgICAgICAgcC0+ZGVmYXVsdE5hbWVzcGFjZSA9IFhtbE5hbWVzcGFjZVRhYmxlOjpnZXRO
YW1lc3BhY2VJRCh1cmksIGZhbHNlKTsKKyAgICAgICAgcC0+ZGVmYXVsdE5hbWVzcGFjZSA9IHVy
aTsKIH0KIAotdm9pZCBDU1NTdHlsZVNoZWV0SW1wbDo6ZGV0ZXJtaW5lTmFtZXNwYWNlKFFfVUlO
VDMyJiBpZCwgY29uc3QgRE9NOjpET01TdHJpbmcmIHByZWZpeCkKK2NvbnN0IEF0b21pY1N0cmlu
ZyYgQ1NTU3R5bGVTaGVldEltcGw6OmRldGVybWluZU5hbWVzcGFjZShjb25zdCBBdG9taWNTdHJp
bmcmIHByZWZpeCkKIHsKLSAgICAvLyBJZiB0aGUgc3R5bGVzaGVldCBoYXMgbm8gbmFtZXNwYWNl
cyB3ZSBjYW4ganVzdCByZXR1cm4uICBUaGVyZSB3b24ndCBiZSBhbnkgbmVlZCB0byBldmVyIGNo
ZWNrCi0gICAgLy8gbmFtZXNwYWNlIHZhbHVlcyBpbiBzZWxlY3RvcnMuCi0gICAgaWYgKCFtX25h
bWVzcGFjZXMpCi0gICAgICAgIHJldHVybjsKLSAgICAKICAgICBpZiAocHJlZml4LmlzRW1wdHko
KSkKLSAgICAgICAgaWQgPSBtYWtlSWQobm9OYW1lc3BhY2UsIGxvY2FsTmFtZVBhcnQoaWQpKTsg
Ly8gTm8gbmFtZXNwYWNlLiBJZiBhbiBlbGVtZW50L2F0dHJpYnV0ZSBoYXMgYSBuYW1lc3BhY2Us
IHdlIHdvbid0IG1hdGNoIGl0LgotICAgIGVsc2UgaWYgKHByZWZpeCA9PSAiKiIpCi0gICAgICAg
IGlkID0gbWFrZUlkKGFueU5hbWVzcGFjZSwgbG9jYWxOYW1lUGFydChpZCkpOyAvLyBXZSdsbCBt
YXRjaCBhbnkgbmFtZXNwYWNlLgotICAgIGVsc2UgeworICAgICAgICByZXR1cm4gZW1wdHlBdG9t
OyAvLyBObyBuYW1lc3BhY2UuIElmIGFuIGVsZW1lbnQvYXR0cmlidXRlIGhhcyBhIG5hbWVzcGFj
ZSwgd2Ugd29uJ3QgbWF0Y2ggaXQuCisgICAgZWxzZSBpZiAocHJlZml4ID09IHN0YXJBdG9tKQor
ICAgICAgICByZXR1cm4gc3RhckF0b207IC8vIFdlJ2xsIG1hdGNoIGFueSBuYW1lc3BhY2UuCisg
ICAgZWxzZSBpZiAobV9uYW1lc3BhY2VzKSB7CiAgICAgICAgIENTU05hbWVzcGFjZSogbnMgPSBt
X25hbWVzcGFjZXMtPm5hbWVzcGFjZUZvclByZWZpeChwcmVmaXgpOwogICAgICAgICBpZiAobnMp
Ci0gICAgICAgICAgICAvLyBMb29rIHVwIHRoZSBpZCBmb3IgdGhpcyBuYW1lc3BhY2UgVVJJLgot
ICAgICAgICAgICAgaWQgPSBtYWtlSWQoWG1sTmFtZXNwYWNlVGFibGU6OmdldE5hbWVzcGFjZUlE
KG5zLT51cmkoKSwgZmFsc2UpLCBsb2NhbE5hbWVQYXJ0KGlkKSk7CisgICAgICAgICAgICByZXR1
cm4gbnMtPnVyaSgpOwogICAgIH0KKyAgICByZXR1cm4gZW1wdHlBdG9tOyAvLyBBc3N1bWUgd2Ug
d29udCBtYXRjaCBhbnkgbmFtZXNwYWNlcy4KIH0KIAogYm9vbCBDU1NTdHlsZVNoZWV0SW1wbDo6
cGFyc2VTdHJpbmcoY29uc3QgRE9NU3RyaW5nICZzdHJpbmcsIGJvb2wgc3RyaWN0KQpJbmRleDog
a2h0bWwvY3NzL2Nzc19zdHlsZXNoZWV0aW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9XZWJDb3JlL2todG1sL2Nzcy9jc3Nfc3R5bGVzaGVldGltcGwuaCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS4xMQpkaWZmIC11IC1wIC1yMS4xMSBraHRtbC9jc3MvY3NzX3N0eWxlc2hlZXRp
bXBsLmgKLS0tIGtodG1sL2Nzcy9jc3Nfc3R5bGVzaGVldGltcGwuaAkxMSBNYXkgMjAwNSAwMDo1
ODoyNyAtMDAwMAkxLjExCisrKyBraHRtbC9jc3MvY3NzX3N0eWxlc2hlZXRpbXBsLmgJOSBKdWwg
MjAwNSAwMjo0MjoyNyAtMDAwMApAQCAtMTA0LDggKzEwNCw4IEBAIHB1YmxpYzoKICAgICB2b2lk
IGRlbGV0ZVJ1bGUgKCB1bnNpZ25lZCBsb25nIGluZGV4LCBpbnQgJmV4Y2VwdGlvbmNvZGUgKTsK
ICAgICB1bnNpZ25lZCBsb25nIGFkZFJ1bGUgKCBjb25zdCBET01TdHJpbmcgJnNlbGVjdG9yLCBj
b25zdCBET01TdHJpbmcgJnN0eWxlLCBsb25nIGluZGV4LCBpbnQgJmV4Y2VwdGlvbmNvZGUgKTsK
IAotICAgIHZvaWQgYWRkTmFtZXNwYWNlKENTU1BhcnNlciogcCwgY29uc3QgRE9NOjpET01TdHJp
bmcmIHByZWZpeCwgY29uc3QgRE9NOjpET01TdHJpbmcmIHVyaSk7Ci0gICAgdm9pZCBkZXRlcm1p
bmVOYW1lc3BhY2UoUV9VSU5UMzImIGlkLCBjb25zdCBET006OkRPTVN0cmluZyYgcHJlZml4KTsK
KyAgICB2b2lkIGFkZE5hbWVzcGFjZShDU1NQYXJzZXIqIHAsIGNvbnN0IEF0b21pY1N0cmluZyYg
cHJlZml4LCBjb25zdCBBdG9taWNTdHJpbmcmIHVyaSk7CisgICAgY29uc3QgQXRvbWljU3RyaW5n
JiBkZXRlcm1pbmVOYW1lc3BhY2UoY29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgpOwogICAgIAog
ICAgIHZpcnR1YWwgYm9vbCBwYXJzZVN0cmluZyggY29uc3QgRE9NU3RyaW5nICZzdHJpbmcsIGJv
b2wgc3RyaWN0ID0gdHJ1ZSApOwogCkluZGV4OiBraHRtbC9jc3MvY3NzcGFyc2VyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9jc3MvY3NzcGFyc2VyLmNw
cCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS45OApkaWZmIC11IC1wIC1yMS45OCBraHRtbC9jc3Mv
Y3NzcGFyc2VyLmNwcAotLS0ga2h0bWwvY3NzL2Nzc3BhcnNlci5jcHAJMTEgTWF5IDIwMDUgMDI6
MTA6MDkgLTAwMDAJMS45OAorKysga2h0bWwvY3NzL2Nzc3BhcnNlci5jcHAJOSBKdWwgMjAwNSAw
Mjo0MjoyOSAtMDAwMApAQCAtMTAyLDcgKzEwMiw3IEBAIENTU1BhcnNlcjo6Q1NTUGFyc2VyKCBi
b29sIHN0cmljdFBhcnNpbmcKICAgICBpbXBvcnRhbnQgPSBmYWxzZTsKICAgICBpblBhcnNlU2hv
cnRIYW5kID0gZmFsc2U7CiAgICAgCi0gICAgZGVmYXVsdE5hbWVzcGFjZSA9IGFueU5hbWVzcGFj
ZTsKKyAgICBkZWZhdWx0TmFtZXNwYWNlID0gc3RhckF0b207CiAgICAgCiAgICAgeXlfc3RhcnQg
PSAxOwogCkBAIC0xNjEsNyArMTYxLDcgQEAgdm9pZCBDU1NQYXJzZXI6OnNldHVwUGFyc2VyKGNv
bnN0IGNoYXIgKgogdm9pZCBDU1NQYXJzZXI6OnBhcnNlU2hlZXQoIENTU1N0eWxlU2hlZXRJbXBs
ICpzaGVldCwgY29uc3QgRE9NU3RyaW5nICZzdHJpbmcgKQogewogICAgIHN0eWxlRWxlbWVudCA9
IHNoZWV0OwotICAgIGRlZmF1bHROYW1lc3BhY2UgPSBhbnlOYW1lc3BhY2U7IC8vIFJlc2V0IHRo
ZSBkZWZhdWx0IG5hbWVzcGFjZS4KKyAgICBkZWZhdWx0TmFtZXNwYWNlID0gc3RhckF0b207IC8v
IFJlc2V0IHRoZSBkZWZhdWx0IG5hbWVzcGFjZS4KICAgICAKICAgICBzZXR1cFBhcnNlciAoIiIs
IHN0cmluZywgIiIpOwogCkluZGV4OiBraHRtbC9jc3MvY3NzcGFyc2VyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvY3NzL2Nzc3BhcnNlci5oLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjMwCmRpZmYgLXUgLXAgLXIxLjMwIGtodG1sL2Nzcy9jc3NwYXJzZXIu
aAotLS0ga2h0bWwvY3NzL2Nzc3BhcnNlci5oCTE5IE5vdiAyMDA0IDAwOjEyOjIwIC0wMDAwCTEu
MzAKKysrIGtodG1sL2Nzcy9jc3NwYXJzZXIuaAk5IEp1bCAyMDA1IDAyOjQyOjI5IC0wMDAwCkBA
IC0xNjQsNyArMTY0LDcgQEAgbmFtZXNwYWNlIERPTSB7CiAJaW50IG1heFBhcnNlZFByb3BlcnRp
ZXM7CiAJYm9vbCBpblBhcnNlU2hvcnRIYW5kOwogCi0gICAgICAgIFFfVUlOVDE2IGRlZmF1bHRO
YW1lc3BhY2U7CisgICAgICAgIEF0b21pY1N0cmluZyBkZWZhdWx0TmFtZXNwYWNlOwogICAgICAg
ICAKIAlzdGF0aWMgQ1NTUGFyc2VyICpjdXJyZW50UGFyc2VyOwogCkluZGV4OiBraHRtbC9jc3Mv
Y3Nzc3R5bGVzZWxlY3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNv
cmUva2h0bWwvY3NzL2Nzc3N0eWxlc2VsZWN0b3IuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjE4OApkaWZmIC11IC1wIC1yMS4xODgga2h0bWwvY3NzL2Nzc3N0eWxlc2VsZWN0b3IuY3BwCi0t
LSBraHRtbC9jc3MvY3Nzc3R5bGVzZWxlY3Rvci5jcHAJNiBKdWwgMjAwNSAwMToyODo0MSAtMDAw
MAkxLjE4OAorKysga2h0bWwvY3NzL2Nzc3N0eWxlc2VsZWN0b3IuY3BwCTkgSnVsIDIwMDUgMDI6
NDI6MzMgLTAwMDAKQEAgLTMzOSw3ICszMzksNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1h
dGNoUnVsZXMoQ1NTUnVsCiAgICAgICAgICAgICBtYXRjaFJ1bGVzRm9yTGlzdChydWxlcy0+Z2V0
Q2xhc3NSdWxlcyhzaW5nbGVDbGFzcy0+c3RyaW5nKCkuaW1wbGVtZW50YXRpb24oKSksCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdFJ1bGVJ
bmRleCwgbGFzdFJ1bGVJbmRleCk7CiAgICAgfQotICAgIG1hdGNoUnVsZXNGb3JMaXN0KHJ1bGVz
LT5nZXRUYWdSdWxlcyhsb2NhbE5hbWVQYXJ0KGVsZW1lbnQtPmlkKCkpKSwKKyAgICBtYXRjaFJ1
bGVzRm9yTGlzdChydWxlcy0+Z2V0VGFnUnVsZXMoZWxlbWVudC0+bG9jYWxOYW1lKCkuaW1wbGVt
ZW50YXRpb24oKSksCiAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RSdWxlSW5kZXgsIGxhc3RS
dWxlSW5kZXgpOwogICAgIG1hdGNoUnVsZXNGb3JMaXN0KHJ1bGVzLT5nZXRVbml2ZXJzYWxSdWxl
cygpLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCk7CiAgICAgCkBAIC0zNjAsOSArMzYw
LDkgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXRjaFJ1bGVzRm9yTGlzdAogICAgIGlmICgh
cnVsZXMpIHJldHVybjsKICAgICBmb3IgKENTU1J1bGVEYXRhKiBkID0gcnVsZXMtPmZpcnN0KCk7
IGQ7IGQgPSBkLT5uZXh0KCkpIHsKICAgICAgICAgQ1NTU3R5bGVSdWxlSW1wbCogcnVsZSA9IGQt
PnJ1bGUoKTsKLSAgICAgICAgUV9VSU5UMTYgY3NzVGFnSWQgPSBsb2NhbE5hbWVQYXJ0KGVsZW1l
bnQtPmlkKCkpOwotICAgICAgICBRX1VJTlQxNiB0YWcgPSBsb2NhbE5hbWVQYXJ0KGQtPnNlbGVj
dG9yKCktPnRhZyk7Ci0gICAgICAgIGlmICgoY3NzVGFnSWQgPT0gdGFnIHx8IHRhZyA9PSBhbnlM
b2NhbE5hbWUpICYmIGNoZWNrU2VsZWN0b3IoZC0+c2VsZWN0b3IoKSwgZWxlbWVudCkpIHsKKyAg
ICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUgPSBlbGVtZW50LT5sb2NhbE5hbWUo
KTsKKyAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBzZWxlY3RvckxvY2FsTmFtZSA9IGQtPnNl
bGVjdG9yKCktPnRhZy5sb2NhbE5hbWUoKTsKKyAgICAgICAgaWYgKChsb2NhbE5hbWUgPT0gc2Vs
ZWN0b3JMb2NhbE5hbWUgfHwgc2VsZWN0b3JMb2NhbE5hbWUgPT0gc3RhckF0b20pICYmIGNoZWNr
U2VsZWN0b3IoZC0+c2VsZWN0b3IoKSwgZWxlbWVudCkpIHsKICAgICAgICAgICAgIC8vIElmIHRo
ZSBydWxlIGhhcyBubyBwcm9wZXJ0aWVzIHRvIGFwcGx5LCB0aGVuIGlnbm9yZSBpdC4KICAgICAg
ICAgICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uSW1wbCogZGVjbCA9IHJ1bGUtPmRlY2xh
cmF0aW9uKCk7CiAgICAgICAgICAgICBpZiAoIWRlY2wgfHwgIWRlY2wtPmxlbmd0aCgpKSBjb250
aW51ZTsKQEAgLTYwOSw3ICs2MDksNyBAQCBib29sIENTU1N0eWxlU2VsZWN0b3I6OmNhblNoYXJl
U3R5bGVXaXRoCiAgICAgaWYgKG4tPmlzU3R5bGVkRWxlbWVudCgpKSB7CiAgICAgICAgIGJvb2wg
bW91c2VJbnNpZGUgPSBlbGVtZW50LT5yZW5kZXJlcigpID8gZWxlbWVudC0+cmVuZGVyZXIoKS0+
bW91c2VJbnNpZGUoKSA6IGZhbHNlOwogICAgICAgICBTdHlsZWRFbGVtZW50SW1wbCogcyA9IHN0
YXRpY19jYXN0PFN0eWxlZEVsZW1lbnRJbXBsKj4obik7Ci0gICAgICAgIGlmIChzLT5yZW5kZXJl
cigpICYmIChzLT5pZCgpID09IGVsZW1lbnQtPmlkKCkpICYmICFzLT5oYXNJRCgpICYmCisgICAg
ICAgIGlmIChzLT5yZW5kZXJlcigpICYmIChzLT50YWdOYW1lKCkgPT0gZWxlbWVudC0+dGFnTmFt
ZSgpKSAmJiAhcy0+aGFzSUQoKSAmJgogICAgICAgICAgICAgKHMtPmhhc0NsYXNzKCkgPT0gZWxl
bWVudC0+aGFzQ2xhc3MoKSkgJiYgIXMtPmlubGluZVN0eWxlRGVjbCgpICYmCiAgICAgICAgICAg
ICAocy0+aGFzTWFwcGVkQXR0cmlidXRlcygpID09IHN0eWxlZEVsZW1lbnQtPmhhc01hcHBlZEF0
dHJpYnV0ZXMoKSkgJiYKICAgICAgICAgICAgIChzLT5pc0xpbmsoKSA9PSBlbGVtZW50LT5pc0xp
bmsoKSkgJiYgCkBAIC04ODUsMjMgKzg4NSwyMyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFk
anVzdFJlbmRlclN0eWxlCiAgICAgICAgIC8vIFNpdGVzIGFsc28gY29tbW9ubHkgdXNlIGRpc3Bs
YXk6aW5saW5lL2Jsb2NrIG9uIDx0ZD5zIGFuZCA8dGFibGU+cy4gIEluIHF1aXJrcyBtb2RlIHdl
IGZvcmNlCiAgICAgICAgIC8vIHRoZXNlIHRhZ3MgdG8gcmV0YWluIHRoZWlyIGRpc3BsYXkgdHlw
ZXMuCiAgICAgICAgIGlmICghc3RyaWN0UGFyc2luZyAmJiBlKSB7Ci0gICAgICAgICAgICBpZiAo
ZS0+aWQoKSA9PSBJRF9URCkgeworICAgICAgICAgICAgaWYgKGUtPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjp0ZCgpKSkgewogICAgICAgICAgICAgICAgIHN0eWxlLT5zZXREaXNwbGF5KFRBQkxFX0NF
TEwpOwogICAgICAgICAgICAgICAgIHN0eWxlLT5zZXRGbG9hdGluZyhGTk9ORSk7CiAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChlLT5pZCgpID09IElEX1RBQkxFKQorICAgICAg
ICAgICAgZWxzZSBpZiAoZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRhYmxlKCkpKQogICAgICAg
ICAgICAgICAgIHN0eWxlLT5zZXREaXNwbGF5KHN0eWxlLT5pc0Rpc3BsYXlJbmxpbmVUeXBlKCkg
PyBJTkxJTkVfVEFCTEUgOiBUQUJMRSk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBGcmFtZXMg
YW5kIGZyYW1lc2V0cyBuZXZlciBob25vciBwb3NpdGlvbjpyZWxhdGl2ZSBvciBwb3NpdGlvbjph
YnNvbHV0ZS4gIFRoaXMgaXMgbmVjZXNzYXJ5IHRvCiAgICAgICAgIC8vIGZpeCBhIGNyYXNoIHdo
ZXJlIGEgc2l0ZSB0cmllcyB0byBwb3NpdGlvbiB0aGVzZSBvYmplY3RzLiAgVGhleSBhbHNvIG5l
dmVyIGhvbm9yIGRpc3BsYXkuCi0gICAgICAgIGlmIChlICYmIChlLT5pZCgpID09IElEX0ZSQU1F
IHx8IGUtPmlkKCkgPT0gSURfRlJBTUVTRVQpKSB7CisgICAgICAgIGlmIChlICYmIChlLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6ZnJhbWUoKSkgfHwgZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZy
YW1lc2V0KCkpKSkgewogICAgICAgICAgICAgc3R5bGUtPnNldFBvc2l0aW9uKFNUQVRJQyk7CiAg
ICAgICAgICAgICBzdHlsZS0+c2V0RGlzcGxheShCTE9DSyk7CiAgICAgICAgIH0KIAogICAgICAg
ICAvLyBUYWJsZSBoZWFkZXJzIHdpdGggYSB0ZXh0LWFsaWduIG9mIGF1dG8gd2lsbCBjaGFuZ2Ug
dGhlIHRleHQtYWxpZ24gdG8gY2VudGVyLgotICAgICAgICBpZiAoZSAmJiBlLT5pZCgpID09IElE
X1RIICYmIHN0eWxlLT50ZXh0QWxpZ24oKSA9PSBUQUFVVE8pCisgICAgICAgIGlmIChlICYmIGUt
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0aCgpKSAmJiBzdHlsZS0+dGV4dEFsaWduKCkgPT0gVEFB
VVRPKQogICAgICAgICAgICAgc3R5bGUtPnNldFRleHRBbGlnbihDRU5URVIpOwogICAgICAgICAK
ICAgICAgICAgLy8gTXV0YXRlIHRoZSBkaXNwbGF5IHRvIEJMT0NLIG9yIFRBQkxFIGZvciBjZXJ0
YWluIGNhc2VzLCBlLmcuLCBpZiBzb21lb25lIGF0dGVtcHRzIHRvCkBAIC05NzksNyArOTc5LDcg
QEAgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpjaGVja1NlbGVjdG9yKENTUwogICAgIC8vIFdlIHRy
YWNrIHdoZXRoZXIgb3Igbm90IHRoZSBydWxlIGNvbnRhaW5zIG9ubHkgOmhvdmVyIGFuZCA6YWN0
aXZlIGluIGEgc2ltcGxlIHNlbGVjdG9yLiBJZgogICAgIC8vIHNvLCB3ZSBjYW4ndCBhbGxvdyB0
aGF0IHRvIGFwcGx5IHRvIGV2ZXJ5IGVsZW1lbnQgb24gdGhlIHBhZ2UuICBXZSBhc3N1bWUgdGhl
IGF1dGhvciBpbnRlbmRlZAogICAgIC8vIHRvIGFwcGx5IHRoZSBydWxlcyBvbmx5IHRvIGxpbmtz
LgotICAgIGJvb2wgb25seUhvdmVyQWN0aXZlID0gKHNlbC0+dGFnID09IGFueVFOYW1lICYmCisg
ICAgYm9vbCBvbmx5SG92ZXJBY3RpdmUgPSAoIXNlbC0+aGFzVGFnKCkgJiYKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAoc2VsLT5tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3Mg
JiYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWwtPnBzZXVkb1R5cGUoKSA9PSBD
U1NTZWxlY3Rvcjo6UHNldWRvSG92ZXIgfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzZWwtPnBzZXVkb1R5cGUoKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQWN0aXZlKSkpOwpAQCAt
MTA5NiwxOSArMTA5NiwxNCBAQCBib29sIENTU1N0eWxlU2VsZWN0b3I6OmNoZWNrT25lU2VsZWN0
b3IoCiAgICAgaWYoIWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChzZWwtPnRh
ZyAhPSBhbnlRTmFtZSkgewotICAgICAgICBpbnQgZWx0SUQgPSBlLT5pZCgpOwotICAgICAgICBR
X1VJTlQxNiBsb2NhbE5hbWUgPSBsb2NhbE5hbWVQYXJ0KGVsdElEKTsKLSAgICAgICAgUV9VSU5U
MTYgbnMgPSBuYW1lc3BhY2VQYXJ0KGVsdElEKTsKLSAgICAgICAgUV9VSU5UMTYgc2VsTG9jYWxO
YW1lID0gbG9jYWxOYW1lUGFydChzZWwtPnRhZyk7Ci0gICAgICAgIFFfVUlOVDE2IHNlbE5TID0g
bmFtZXNwYWNlUGFydChzZWwtPnRhZyk7Ci0gICAgICAgIAotICAgICAgICBpZiAobG9jYWxOYW1l
IDw9IElEX0xBU1RfVEFHICYmIGUtPmlzSFRNTEVsZW1lbnQoKSkKLSAgICAgICAgICAgIG5zID0g
eGh0bWxOYW1lc3BhY2U7IC8vIEZJWE1FOiBSZWFsbHkgd2FudCB0byBtb3ZlIGF3YXkgZnJvbSB0
aGlzIGNvbXBsaWNhdGVkIGhhY2tlcnkgYW5kIGp1c3QKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIHN3aXRjaCB0YWdzIGFuZCBhdHRyIG5hbWVzIG92ZXIgdG8gQXRvbWljU3Ry
aW5ncy4KLSAgICAgICAgCi0gICAgICAgIGlmICgoc2VsTG9jYWxOYW1lICE9IGFueUxvY2FsTmFt
ZSAmJiBsb2NhbE5hbWUgIT0gc2VsTG9jYWxOYW1lKSB8fAotICAgICAgICAgICAgKHNlbE5TICE9
IGFueU5hbWVzcGFjZSAmJiBucyAhPSBzZWxOUykpCisgICAgaWYgKHNlbC0+aGFzVGFnKCkpIHsK
KyAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUgPSBlLT5sb2NhbE5hbWUoKTsK
KyAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBucyA9IGUtPm5hbWVzcGFjZVVSSSgpOworICAg
ICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHNlbExvY2FsTmFtZSA9IHNlbC0+dGFnLmxvY2FsTmFt
ZSgpOworICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHNlbE5TID0gc2VsLT50YWcubmFtZXNw
YWNlVVJJKCk7CisgICAgCisgICAgICAgIGlmICgoc2VsTG9jYWxOYW1lICE9IHN0YXJBdG9tICYm
IGxvY2FsTmFtZSAhPSBzZWxMb2NhbE5hbWUpIHx8CisgICAgICAgICAgICAoc2VsTlMgIT0gc3Rh
ckF0b20gJiYgbnMgIT0gc2VsTlMpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
IApAQCAtMTI5NSw3ICsxMjkwLDcgQEAgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpjaGVja09uZVNl
bGVjdG9yKAogICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvSG92ZXI6IHsKICAg
ICAgICAgICAgICAgICAvLyBJZiB3ZSdyZSBpbiBxdWlya3MgbW9kZSwgdGhlbiBob3ZlciBzaG91
bGQgbmV2ZXIgbWF0Y2ggYW5jaG9ycyB3aXRoIG5vCiAgICAgICAgICAgICAgICAgLy8gaHJlZi4g
IFRoaXMgaXMgaW1wb3J0YW50IGZvciBzaXRlcyBsaWtlIHdzai5jb20uCi0gICAgICAgICAgICAg
ICAgaWYgKHN0cmljdFBhcnNpbmcgfHwgZS0+aWQoKSAhPSBJRF9BIHx8IGUtPmlzTGluaygpKSB7
CisgICAgICAgICAgICAgICAgaWYgKHN0cmljdFBhcnNpbmcgfHwgIWUtPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjphKCkpIHx8IGUtPmlzTGluaygpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChl
bGVtZW50ID09IGUgJiYgc3R5bGUpCiAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZS0+c2V0
QWZmZWN0ZWRCeUhvdmVyUnVsZXModHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChlLT5y
ZW5kZXJlcigpKSB7CkBAIC0xMzI2LDcgKzEzMjEsNyBAQCBib29sIENTU1N0eWxlU2VsZWN0b3I6
OmNoZWNrT25lU2VsZWN0b3IoCiAgICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9B
Y3RpdmU6CiAgICAgICAgICAgICAgICAgLy8gSWYgd2UncmUgaW4gcXVpcmtzIG1vZGUsIHRoZW4g
OmFjdGl2ZSBzaG91bGQgbmV2ZXIgbWF0Y2ggYW5jaG9ycyB3aXRoIG5vCiAgICAgICAgICAgICAg
ICAgLy8gaHJlZi4gCi0gICAgICAgICAgICAgICAgaWYgKHN0cmljdFBhcnNpbmcgfHwgZS0+aWQo
KSAhPSBJRF9BIHx8IGUtPmlzTGluaygpKSB7CisgICAgICAgICAgICAgICAgaWYgKHN0cmljdFBh
cnNpbmcgfHwgIWUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjphKCkpIHx8IGUtPmlzTGluaygpKSB7
CiAgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50ID09IGUgJiYgc3R5bGUpCiAgICAgICAg
ICAgICAgICAgICAgICAgICBzdHlsZS0+c2V0QWZmZWN0ZWRCeUFjdGl2ZVJ1bGVzKHRydWUpOwog
ICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChlLT5yZW5kZXJlcigpKQpAQCAtMTQyMCwxOSAr
MTQxNSw2IEBAIHZvaWQgQ1NTUnVsZVNldDo6YWRkVG9SdWxlU2V0KERPTTo6RE9NU3QKICAgICAg
ICAgcnVsZXMtPmFwcGVuZChtX3J1bGVDb3VudCsrLCBydWxlLCBzZWwpOwogfQogCi12b2lkIENT
U1J1bGVTZXQ6OmFkZFRvUnVsZVNldChpbnQga2V5LCBJbnRSdWxlTWFwJiBtYXAsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBDU1NTdHlsZVJ1bGVJbXBsKiBydWxlLCBDU1NTZWxlY3Rv
ciogc2VsKQotewotICAgIGFzc2VydChrZXkpOwotICAgIGFzc2VydChrZXkgIT0gLTEpOwotICAg
IENTU1J1bGVEYXRhTGlzdCogcnVsZXMgPSBtYXAuZ2V0KGtleSk7Ci0gICAgaWYgKCFydWxlcykg
ewotICAgICAgICBydWxlcyA9IG5ldyBDU1NSdWxlRGF0YUxpc3QobV9ydWxlQ291bnQrKywgcnVs
ZSwgc2VsKTsKLSAgICAgICAgbWFwLmluc2VydChrZXksIHJ1bGVzKTsKLSAgICB9IGVsc2UKLSAg
ICAgICAgcnVsZXMtPmFwcGVuZChtX3J1bGVDb3VudCsrLCBydWxlLCBzZWwpOwotfQotCiB2b2lk
IENTU1J1bGVTZXQ6OmFkZFJ1bGUoQ1NTU3R5bGVSdWxlSW1wbCogcnVsZSwgQ1NTU2VsZWN0b3Iq
IHNlbCkKIHsKICAgICBpZiAoc2VsLT5tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6SWQpIHsKQEAgLTE0
NDQsMTAgKzE0MjYsOSBAQCB2b2lkIENTU1J1bGVTZXQ6OmFkZFJ1bGUoQ1NTU3R5bGVSdWxlSW1w
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgIAotICAgIFFfVUlOVDE2IGxvY2FsTmFtZSA9
IGxvY2FsTmFtZVBhcnQoc2VsLT50YWcpOwotICAgIGlmIChsb2NhbE5hbWUgIT0gYW55TG9jYWxO
YW1lKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBtYXliZSBpdCB3b3VsZCBiZSBiZXR0ZXIgdG8ganVz
dCB1c2UgYW4gaW50LWtleWVkIEhhc2hNYXAgaGVyZQotICAgICAgICBhZGRUb1J1bGVTZXQobG9j
YWxOYW1lLCBtX3RhZ1J1bGVzLCBydWxlLCBzZWwpOworICAgIGNvbnN0IEF0b21pY1N0cmluZyYg
bG9jYWxOYW1lID0gc2VsLT50YWcubG9jYWxOYW1lKCk7CisgICAgaWYgKGxvY2FsTmFtZSAhPSBz
dGFyQXRvbSkgeworICAgICAgICBhZGRUb1J1bGVTZXQobG9jYWxOYW1lLmltcGxlbWVudGF0aW9u
KCksIG1fdGFnUnVsZXMsIHJ1bGUsIHNlbCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAg
CkluZGV4OiBraHRtbC9jc3MvY3Nzc3R5bGVzZWxlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2Nzcy9jc3NzdHlsZXNlbGVjdG9yLmgsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuMzQKZGlmZiAtdSAtcCAtcjEuMzQga2h0bWwvY3NzL2Nzc3N0eWxlc2Vs
ZWN0b3IuaAotLS0ga2h0bWwvY3NzL2Nzc3N0eWxlc2VsZWN0b3IuaAk2IEp1bCAyMDA1IDAxOjI4
OjQyIC0wMDAwCTEuMzQKKysrIGtodG1sL2Nzcy9jc3NzdHlsZXNlbGVjdG9yLmgJOSBKdWwgMjAw
NSAwMjo0MjozMyAtMDAwMApAQCAtMjQsNyArMjQsNiBAQAogI2RlZmluZSBfQ1NTX2Nzc3N0eWxl
c2VsZWN0b3JfaF8KIAogI2luY2x1ZGUgPHFwdHJ2ZWN0b3IuaD4KLSNpbmNsdWRlIDxxcHRyZGlj
dC5oPgogI2luY2x1ZGUgIm1pc2MvcG9pbnRlcmhhc2guaCIKIAogI2luY2x1ZGUgInJlbmRlcmlu
Zy9yZW5kZXJfc3R5bGUuaCIKQEAgLTI3NCwyNSArMjczLDIyIEBAIHB1YmxpYzoKICAgICAgICAg
TUFJTl9USFJFQURfQUxMT0NBVEVEOwogCiAgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxET006OkRP
TVN0cmluZ0ltcGwgKiwgQ1NTUnVsZURhdGFMaXN0ICosIFBvaW50ZXJIYXNoPERPTTo6RE9NU3Ry
aW5nSW1wbCAqPiA+IEF0b21SdWxlTWFwOwotICAgICAgICB0eXBlZGVmIEhhc2hNYXA8aW50LCBD
U1NSdWxlRGF0YUxpc3QgKiwgUG9pbnRlckhhc2g8aW50PiA+IEludFJ1bGVNYXA7CiAKICAgICAg
ICAgdm9pZCBhZGRSdWxlc0Zyb21TaGVldChET006OkNTU1N0eWxlU2hlZXRJbXBsKiBzaGVldCwg
Y29uc3QgRE9NOjpET01TdHJpbmcgJm1lZGl1bSA9ICJzY3JlZW4iKTsKIAogICAgICAgICB2b2lk
IGFkZFJ1bGUoRE9NOjpDU1NTdHlsZVJ1bGVJbXBsKiBydWxlLCBET006OkNTU1NlbGVjdG9yKiBz
ZWwpOwogICAgICAgICB2b2lkIGFkZFRvUnVsZVNldChET006OkRPTVN0cmluZ0ltcGwqIGtleSwg
QXRvbVJ1bGVNYXAmIG1hcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgRE9NOjpDU1NTdHls
ZVJ1bGVJbXBsKiBydWxlLCBET006OkNTU1NlbGVjdG9yKiBzZWwpOwotICAgICAgICB2b2lkIGFk
ZFRvUnVsZVNldChpbnQga2V5LCBJbnRSdWxlTWFwJiBtYXAsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgIERPTTo6Q1NTU3R5bGVSdWxlSW1wbCogcnVsZSwgRE9NOjpDU1NTZWxlY3Rvciogc2Vs
KTsKIAogICAgICAgICBDU1NSdWxlRGF0YUxpc3QqIGdldElEUnVsZXMoRE9NOjpET01TdHJpbmdJ
bXBsKiBrZXkpIHsgcmV0dXJuIG1faWRSdWxlcy5nZXQoa2V5KTsgfQogICAgICAgICBDU1NSdWxl
RGF0YUxpc3QqIGdldENsYXNzUnVsZXMoRE9NOjpET01TdHJpbmdJbXBsKiBrZXkpIHsgcmV0dXJu
IG1fY2xhc3NSdWxlcy5nZXQoa2V5KTsgfQotICAgICAgICBDU1NSdWxlRGF0YUxpc3QqIGdldFRh
Z1J1bGVzKGludCBrZXkpIHsgcmV0dXJuIG1fdGFnUnVsZXMuZ2V0KGtleSk7IH0KKyAgICAgICAg
Q1NTUnVsZURhdGFMaXN0KiBnZXRUYWdSdWxlcyhET006OkRPTVN0cmluZ0ltcGwqIGtleSkgeyBy
ZXR1cm4gbV90YWdSdWxlcy5nZXQoa2V5KTsgfQogICAgICAgICBDU1NSdWxlRGF0YUxpc3QqIGdl
dFVuaXZlcnNhbFJ1bGVzKCkgeyByZXR1cm4gbV91bml2ZXJzYWxSdWxlczsgfQogCiAgICAgcHVi
bGljOgogICAgICAgICBBdG9tUnVsZU1hcCBtX2lkUnVsZXM7CiAgICAgICAgIEF0b21SdWxlTWFw
IG1fY2xhc3NSdWxlczsKLSAgICAgICAgSW50UnVsZU1hcCBtX3RhZ1J1bGVzOworICAgICAgICBB
dG9tUnVsZU1hcCBtX3RhZ1J1bGVzOwogICAgICAgICBDU1NSdWxlRGF0YUxpc3QqIG1fdW5pdmVy
c2FsUnVsZXM7CiAgICAgICAgIAogICAgICAgICB1aW50IG1fcnVsZUNvdW50OwpJbmRleDoga2h0
bWwvY3NzL3BhcnNlci55Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2to
dG1sL2Nzcy9wYXJzZXIueSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zOQpkaWZmIC11IC1wIC1y
MS4zOSBraHRtbC9jc3MvcGFyc2VyLnkKLS0tIGtodG1sL2Nzcy9wYXJzZXIueQkyMiBKdW4gMjAw
NSAyMTowNTo1OSAtMDAwMAkxLjM5CisrKyBraHRtbC9jc3MvcGFyc2VyLnkJOSBKdWwgMjAwNSAw
Mjo0MjozMyAtMDAwMApAQCAtMzQsOSArMzQsNyBAQAogI2luY2x1ZGUgPGNzcy9jc3NfdmFsdWVp
bXBsLmg+CiAjaW5jbHVkZSA8bWlzYy9odG1saGFzaGVzLmg+CiAjaW5jbHVkZSAiY3NzcGFyc2Vy
LmgiCi0KLSNpbmNsdWRlICJ4bWxfbmFtZXNwYWNlX3RhYmxlLmgiCi0gICAgCisgICAKICNpbmNs
dWRlIDxhc3NlcnQuaD4KICNpbmNsdWRlIDxrZGVidWcuaD4KIC8vICNkZWZpbmUgQ1NTX0RFQlVH
CkBAIC0xMzEsNyArMTI5LDYgQEAgc3RhdGljIGlubGluZSBpbnQgZ2V0VmFsdWVJRChjb25zdCBj
aGFyIAogICAgIGZsb2F0IHZhbDsKICAgICBpbnQgcHJvcF9pZDsKICAgICBpbnQgYXR0cmlidXRl
OwotICAgIGludCBlbGVtZW50OwogICAgIENTU1NlbGVjdG9yOjpSZWxhdGlvbiByZWxhdGlvbjsK
ICAgICBib29sIGI7CiAgICAgaW50IGk7CkBAIC0xNzcsNiArMTc0LDggQEAgc3RhdGljIGludCBj
c3N5eWxleCggWVlTVFlQRSAqeXlsdmFsICkgewogJXRva2VuICcuJwogJXRva2VuICdbJwogCisl
dG9rZW4gPHN0cmluZz4gJyonCisKICV0b2tlbiBJTVBPUlRfU1lNCiAldG9rZW4gUEFHRV9TWU0K
ICV0b2tlbiBNRURJQV9TWU0KQEAgLTI2Niw3ICsyNjUsNyBAQCBzdGF0aWMgaW50IGNzc3l5bGV4
KCBZWVNUWVBFICp5eWx2YWwgKSB7CiAldHlwZSA8dmFsdWU+IHVuYXJ5X3Rlcm0KICV0eXBlIDx2
YWx1ZT4gZnVuY3Rpb24KIAotJXR5cGUgPGVsZW1lbnQ+IGVsZW1lbnRfbmFtZQorJXR5cGUgPHN0
cmluZz4gZWxlbWVudF9uYW1lCiAKICV0eXBlIDxhdHRyaWJ1dGU+IGF0dHJpYl9pZAogCkBAIC00
MDYsNyArNDA1LDcgQEAgTkFNRVNQQUNFX1NZTSBtYXliZV9zcGFjZSBtYXliZV9uc19wcmVmaQog
I2VuZGlmCiAgICAgQ1NTUGFyc2VyICpwID0gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyICo+KHBhcnNl
cik7CiAgICAgaWYgKHAtPnN0eWxlRWxlbWVudCAmJiBwLT5zdHlsZUVsZW1lbnQtPmlzQ1NTU3R5
bGVTaGVldCgpKQotICAgICAgICBzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0SW1wbCo+KHAtPnN0
eWxlRWxlbWVudCktPmFkZE5hbWVzcGFjZShwLCBkb21TdHJpbmcoJDMpLCBkb21TdHJpbmcoJDQp
KTsKKyAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldEltcGwqPihwLT5zdHlsZUVsZW1l
bnQpLT5hZGROYW1lc3BhY2UocCwgYXRvbWljU3RyaW5nKCQzKSwgYXRvbWljU3RyaW5nKCQ0KSk7
CiB9CiB8IE5BTUVTUEFDRV9TWU0gZXJyb3IgaW52YWxpZF9ibG9jawogfCBOQU1FU1BBQ0VfU1lN
IGVycm9yICc7JwpAQCAtNjI1LDY1ICs2MjQsNzEgQEAgbmFtZXNwYWNlX3NlbGVjdG9yOgogCiBz
aW1wbGVfc2VsZWN0b3I6CiAgICAgZWxlbWVudF9uYW1lIG1heWJlX3NwYWNlIHsKLQkkJCA9IG5l
dyBDU1NTZWxlY3RvcigpOwotCSQkLT50YWcgPSAkMTsKKyAgICAgICAgQ1NTUGFyc2VyICpwID0g
c3RhdGljX2Nhc3Q8Q1NTUGFyc2VyICo+KHBhcnNlcik7CisJJCQgPSBuZXcgQ1NTU2VsZWN0b3Io
UXVhbGlmaWVkTmFtZShudWxsQXRvbSwgYXRvbWljU3RyaW5nKCQxKSwgcC0+ZGVmYXVsdE5hbWVz
cGFjZSkpOwogICAgIH0KICAgICB8IGVsZW1lbnRfbmFtZSBzcGVjaWZpZXJfbGlzdCBtYXliZV9z
cGFjZSB7Ci0JJCQgPSAkMjsKLQlpZiAoICQkICkKLSAgICAgICAgICAgICQkLT50YWcgPSAkMTsK
KyAgICAgICAgJCQgPSAkMjsKKwlpZiAoJCQpIHsKKyAgICAgICAgICAgIENTU1BhcnNlciAqcCA9
IHN0YXRpY19jYXN0PENTU1BhcnNlciAqPihwYXJzZXIpOworICAgICAgICAgICAgJCQtPnRhZyA9
IFF1YWxpZmllZE5hbWUobnVsbEF0b20sIGF0b21pY1N0cmluZygkMSksIHAtPmRlZmF1bHROYW1l
c3BhY2UpOworICAgICAgICB9CiAgICAgfQogICAgIHwgc3BlY2lmaWVyX2xpc3QgbWF5YmVfc3Bh
Y2UgewogCSQkID0gJDE7Ci0gICAgICAgIGlmICgkJCkKLSAgICAgICAgICAgICQkLT50YWcgPSBt
YWtlSWQoc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyKj4ocGFyc2VyKS0+ZGVmYXVsdE5hbWVzcGFjZSwg
YW55TG9jYWxOYW1lKTs7CisgICAgICAgIENTU1BhcnNlciAqcCA9IHN0YXRpY19jYXN0PENTU1Bh
cnNlciAqPihwYXJzZXIpOworICAgICAgICBpZiAoJCQgJiYgcC0+ZGVmYXVsdE5hbWVzcGFjZSAh
PSBzdGFyQXRvbSkKKyAgICAgICAgICAgICQkLT50YWcgPSBRdWFsaWZpZWROYW1lKG51bGxBdG9t
LCBzdGFyQXRvbSwgcC0+ZGVmYXVsdE5hbWVzcGFjZSk7CiAgICAgfQogICAgIHwgbmFtZXNwYWNl
X3NlbGVjdG9yICd8JyBlbGVtZW50X25hbWUgbWF5YmVfc3BhY2UgewotICAgICAgICAkJCA9IG5l
dyBDU1NTZWxlY3RvcigpOwotICAgICAgICAkJC0+dGFnID0gJDM7CisgICAgICAgIEF0b21pY1N0
cmluZyBuYW1lc3BhY2VQcmVmaXggPSBhdG9taWNTdHJpbmcoJDEpOwogICAgICAgICBDU1NQYXJz
ZXIgKnAgPSBzdGF0aWNfY2FzdDxDU1NQYXJzZXIgKj4ocGFyc2VyKTsKICAgICAgICAgaWYgKHAt
PnN0eWxlRWxlbWVudCAmJiBwLT5zdHlsZUVsZW1lbnQtPmlzQ1NTU3R5bGVTaGVldCgpKQotICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldEltcGwqPihwLT5zdHlsZUVsZW1lbnQp
LT5kZXRlcm1pbmVOYW1lc3BhY2UoJCQtPnRhZywgZG9tU3RyaW5nKCQxKSk7CisgICAgICAgICAg
ICAkJCA9IG5ldyBDU1NTZWxlY3RvcihRdWFsaWZpZWROYW1lKG5hbWVzcGFjZVByZWZpeCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXRvbWljU3RyaW5n
KCQzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8Q1NTU3R5bGVTaGVldEltcGwqPihwLT5zdHlsZUVsZW1lbnQpLT5kZXRlcm1pbmVO
YW1lc3BhY2UobmFtZXNwYWNlUHJlZml4KSkpOworICAgICAgICBlbHNlIC8vIEZJWE1FOiBTaG91
bGRuJ3QgdGhpcyBjYXNlIGJlIGFuIGVycm9yPworICAgICAgICAgICAgJCQgPSBuZXcgQ1NTU2Vs
ZWN0b3IoUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgYXRvbWljU3RyaW5nKCQzKSwgcC0+ZGVmYXVs
dE5hbWVzcGFjZSkpOwogICAgIH0KICAgICB8IG5hbWVzcGFjZV9zZWxlY3RvciAnfCcgZWxlbWVu
dF9uYW1lIHNwZWNpZmllcl9saXN0IG1heWJlX3NwYWNlIHsKICAgICAgICAgJCQgPSAkNDsKICAg
ICAgICAgaWYgKCQkKSB7Ci0gICAgICAgICAgICAkJC0+dGFnID0gJDM7CisgICAgICAgICAgICBB
dG9taWNTdHJpbmcgbmFtZXNwYWNlUHJlZml4ID0gYXRvbWljU3RyaW5nKCQxKTsKICAgICAgICAg
ICAgIENTU1BhcnNlciAqcCA9IHN0YXRpY19jYXN0PENTU1BhcnNlciAqPihwYXJzZXIpOwogICAg
ICAgICAgICAgaWYgKHAtPnN0eWxlRWxlbWVudCAmJiBwLT5zdHlsZUVsZW1lbnQtPmlzQ1NTU3R5
bGVTaGVldCgpKQotICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXRJbXBs
Kj4ocC0+c3R5bGVFbGVtZW50KS0+ZGV0ZXJtaW5lTmFtZXNwYWNlKCQkLT50YWcsIGRvbVN0cmlu
ZygkMSkpOworICAgICAgICAgICAgICAgICQkLT50YWcgPSBRdWFsaWZpZWROYW1lKG5hbWVzcGFj
ZVByZWZpeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdG9taWNT
dHJpbmcoJDMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRp
Y19jYXN0PENTU1N0eWxlU2hlZXRJbXBsKj4ocC0+c3R5bGVFbGVtZW50KS0+ZGV0ZXJtaW5lTmFt
ZXNwYWNlKG5hbWVzcGFjZVByZWZpeCkpOworICAgICAgICAgICAgZWxzZSAvLyBGSVhNRTogU2hv
dWxkbid0IHRoaXMgY2FzZSBiZSBhbiBlcnJvcj8KKyAgICAgICAgICAgICAgICAkJC0+dGFnID0g
UXVhbGlmaWVkTmFtZShudWxsQXRvbSwgYXRvbWljU3RyaW5nKCQzKSwgcC0+ZGVmYXVsdE5hbWVz
cGFjZSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgfCBuYW1lc3BhY2Vfc2VsZWN0b3IgJ3wnIHNw
ZWNpZmllcl9saXN0IG1heWJlX3NwYWNlIHsKICAgICAgICAgJCQgPSAkMzsKICAgICAgICAgaWYg
KCQkKSB7Ci0gICAgICAgICAgICAkJC0+dGFnID0gbWFrZUlkKGFueU5hbWVzcGFjZSwgYW55TG9j
YWxOYW1lKTsKKyAgICAgICAgICAgIEF0b21pY1N0cmluZyBuYW1lc3BhY2VQcmVmaXggPSBhdG9t
aWNTdHJpbmcoJDEpOwogICAgICAgICAgICAgQ1NTUGFyc2VyICpwID0gc3RhdGljX2Nhc3Q8Q1NT
UGFyc2VyICo+KHBhcnNlcik7CiAgICAgICAgICAgICBpZiAocC0+c3R5bGVFbGVtZW50ICYmIHAt
PnN0eWxlRWxlbWVudC0+aXNDU1NTdHlsZVNoZWV0KCkpCi0gICAgICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8Q1NTU3R5bGVTaGVldEltcGwqPihwLT5zdHlsZUVsZW1lbnQpLT5kZXRlcm1pbmVOYW1l
c3BhY2UoJCQtPnRhZywgZG9tU3RyaW5nKCQxKSk7CisgICAgICAgICAgICAgICAgJCQtPnRhZyA9
IFF1YWxpZmllZE5hbWUobmFtZXNwYWNlUHJlZml4LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0YXJBdG9tLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXRJbXBsKj4ocC0+c3R5bGVFbGVtZW50
KS0+ZGV0ZXJtaW5lTmFtZXNwYWNlKG5hbWVzcGFjZVByZWZpeCkpOwogICAgICAgICB9CiAgICAg
fQogICA7CiAKIGVsZW1lbnRfbmFtZToKICAgICBJREVOVCB7Ci0JQ1NTUGFyc2VyICpwID0gc3Rh
dGljX2Nhc3Q8Q1NTUGFyc2VyICo+KHBhcnNlcik7CisgICAgICAgIFBhcnNlU3RyaW5nJiBzdHIg
PSAkMTsKKyAgICAgICAgQ1NTUGFyc2VyICpwID0gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyICo+KHBh
cnNlcik7CiAJRE9NOjpEb2N1bWVudEltcGwgKmRvYyA9IHAtPmRvY3VtZW50KCk7Ci0JUVN0cmlu
ZyB0YWcgPSBxU3RyaW5nKCQxKTsKLQlpZiAoIGRvYyApIHsKLQkgICAgaWYgKGRvYy0+aXNIVE1M
RG9jdW1lbnQoKSkKLQkJdGFnID0gdGFnLmxvd2VyKCk7Ci0JICAgIGNvbnN0IERPTVN0cmluZyBk
dGFnKHRhZyk7Ci0gICAgICAgICAgICAkJCA9IG1ha2VJZChwLT5kZWZhdWx0TmFtZXNwYWNlLCBk
b2MtPnRhZ0lkKDAsIGR0YWcuaW1wbGVtZW50YXRpb24oKSwgZmFsc2UpKTsKLQl9IGVsc2Ugewot
CSAgICAkJCA9IG1ha2VJZChwLT5kZWZhdWx0TmFtZXNwYWNlLCBraHRtbDo6Z2V0VGFnSUQodGFn
Lmxvd2VyKCkuYXNjaWkoKSwgdGFnLmxlbmd0aCgpKSk7Ci0JICAgIC8vIHRoaXMgY2FzZSBzaG91
bGQgbmV2ZXIgaGFwcGVuIC0gb25seSB3aGVuIGxvYWRpbmcKLQkgICAgLy8gdGhlIGRlZmF1bHQg
c3R5bGVzaGVldCAtIHdoaWNoIG11c3Qgbm90IGNvbnRhaW4gdW5rbm93biB0YWdzCi0vLyAJICAg
IGFzc2VydCgkJCAhPSAwKTsKLQl9CisJaWYgKGRvYyAmJiBkb2MtPmlzSFRNTERvY3VtZW50KCkp
CisgICAgICAgICAgICBzdHIubG93ZXIoKTsKKyAgICAgICAgJCQgPSBzdHI7CiAgICAgfQogICAg
IHwgJyonIHsKLQkkJCA9IG1ha2VJZChzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJzZXIpLT5k
ZWZhdWx0TmFtZXNwYWNlLCBhbnlMb2NhbE5hbWUpOworCXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBz
dGFyID0gJyonOworICAgICAgICAkJC5zdHJpbmcgPSAmc3RhcjsKKyAgICAgICAgJCQubGVuZ3Ro
ID0gMTsKICAgICB9CiAgIDsKIApAQCAtNzcwLDE4ICs3NzUsMjIgQEAgYXR0cmliOgogICAgICAg
ICAkJCA9IG5ldyBDU1NTZWxlY3RvcigpOwogICAgICAgICAkJC0+YXR0ciA9ICQ1OwogICAgICAg
ICAkJC0+bWF0Y2ggPSBDU1NTZWxlY3Rvcjo6U2V0OwotICAgICAgICBDU1NQYXJzZXIgKnAgPSBz
dGF0aWNfY2FzdDxDU1NQYXJzZXIgKj4ocGFyc2VyKTsKLSAgICAgICAgaWYgKHAtPnN0eWxlRWxl
bWVudCAmJiBwLT5zdHlsZUVsZW1lbnQtPmlzQ1NTU3R5bGVTaGVldCgpKQotICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldEltcGwqPihwLT5zdHlsZUVsZW1lbnQpLT5kZXRlcm1p
bmVOYW1lc3BhY2UoJCQtPmF0dHIsIGRvbVN0cmluZygkMykpOworICAgICAgICAvLyBGSVhNRTog
Rm9yIG5vdyB3ZSdyZSBicmVha2luZyBuYW1lc3BhY2Ugc3VwcG9ydCBvbiBhdHRyaWJ1dGVzLiAg
V2hlbiB3ZSBzd2l0Y2ggdG8gYXRvbWljc3RyaW5nLCB0aGVuIHdlIGNhbiBtYWtlCisgICAgICAg
IC8vIGl0IHdvcmsgYWdhaW4uCisgICAgICAgIC8vQ1NTUGFyc2VyICpwID0gc3RhdGljX2Nhc3Q8
Q1NTUGFyc2VyICo+KHBhcnNlcik7CisgICAgICAgIC8vaWYgKHAtPnN0eWxlRWxlbWVudCAmJiBw
LT5zdHlsZUVsZW1lbnQtPmlzQ1NTU3R5bGVTaGVldCgpKQorICAgICAgICAvLyAgICBzdGF0aWNf
Y2FzdDxDU1NTdHlsZVNoZWV0SW1wbCo+KHAtPnN0eWxlRWxlbWVudCktPmRldGVybWluZU5hbWVz
cGFjZSgkJC0+YXR0ciwgZG9tU3RyaW5nKCQzKSk7CiAgICAgfQogICAgIHwgJ1snIG1heWJlX3Nw
YWNlIG5hbWVzcGFjZV9zZWxlY3RvciAnfCcgYXR0cmliX2lkIG1hdGNoIG1heWJlX3NwYWNlIGlk
ZW50X29yX3N0cmluZyBtYXliZV9zcGFjZSAnXScgewogICAgICAgICAkJCA9IG5ldyBDU1NTZWxl
Y3RvcigpOwogICAgICAgICAkJC0+YXR0ciA9ICQ1OwogICAgICAgICAkJC0+bWF0Y2ggPSAoQ1NT
U2VsZWN0b3I6Ok1hdGNoKSQ2OwogICAgICAgICAkJC0+dmFsdWUgPSBhdG9taWNTdHJpbmcoJDgp
OwotICAgICAgICBDU1NQYXJzZXIgKnAgPSBzdGF0aWNfY2FzdDxDU1NQYXJzZXIgKj4ocGFyc2Vy
KTsKLSAgICAgICAgaWYgKHAtPnN0eWxlRWxlbWVudCAmJiBwLT5zdHlsZUVsZW1lbnQtPmlzQ1NT
U3R5bGVTaGVldCgpKQotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldEltcGwq
PihwLT5zdHlsZUVsZW1lbnQpLT5kZXRlcm1pbmVOYW1lc3BhY2UoJCQtPmF0dHIsIGRvbVN0cmlu
ZygkMykpOworICAgICAgICAvLyBGSVhNRTogRm9yIG5vdyB3ZSdyZSBicmVha2luZyBuYW1lc3Bh
Y2Ugc3VwcG9ydCBvbiBhdHRyaWJ1dGVzLiAgV2hlbiB3ZSBzd2l0Y2ggdG8gYXRvbWljc3RyaW5n
LCB0aGVuIHdlIGNhbiBtYWtlCisgICAgICAgIC8vIGl0IHdvcmsgYWdhaW4uCisgICAgICAgIC8v
Q1NTUGFyc2VyICpwID0gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyICo+KHBhcnNlcik7CisgICAgICAg
IC8vaWYgKHAtPnN0eWxlRWxlbWVudCAmJiBwLT5zdHlsZUVsZW1lbnQtPmlzQ1NTU3R5bGVTaGVl
dCgpKQorICAgICAgICAvLyAgICBzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0SW1wbCo+KHAtPnN0
eWxlRWxlbWVudCktPmRldGVybWluZU5hbWVzcGFjZSgkJC0+YXR0ciwgZG9tU3RyaW5nKCQzKSk7
CiAgICAgfQogICA7CiAKSW5kZXg6IGtodG1sL2RvbS9jc3Nfc3R5bGVzaGVldC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZG9tL2Nzc19zdHlsZXNoZWV0
LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS44CmRpZmYgLXUgLXAgLXIxLjgga2h0bWwvZG9t
L2Nzc19zdHlsZXNoZWV0LmNwcAotLS0ga2h0bWwvZG9tL2Nzc19zdHlsZXNoZWV0LmNwcAkyMCBN
YXkgMjAwNCAxNTowOTozMiAtMDAwMAkxLjgKKysrIGtodG1sL2RvbS9jc3Nfc3R5bGVzaGVldC5j
cHAJOSBKdWwgMjAwNSAwMjo0MjozNCAtMDAwMApAQCAtMzg1LDcgKzM4NSw3IEBAIExpbmtTdHls
ZSAmIExpbmtTdHlsZTo6b3BlcmF0b3IgPSAoY29uc3QKIAogICAgIC8vICMjIyBjaGVjayBsaW5r
IGlzIHJlYWxseSBsaW5raW5nIGEgc3R5bGUgc2hlZXQKICAgICBpZiggbiAmJiBuLT5pc0VsZW1l
bnROb2RlKCkgJiYKLQkobi0+aWQoKSA9PSBJRF9TVFlMRSB8fCBuLT5pZCgpID09IElEX0xJTksp
ICkgeworCShuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c3R5bGUoKSkgfHwgbi0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OmxpbmsoKSkpKSB7CiAgICAgbm9kZSA9IG47CiAgICAgaWYobm9kZSkgbm9k
ZS0+cmVmKCk7CiAgICAgfQpAQCAtMzk5LDEyICszOTksMTQgQEAgTGlua1N0eWxlOjp+TGlua1N0
eWxlKCkKIAogU3R5bGVTaGVldCBMaW5rU3R5bGU6OnNoZWV0KCkKIHsKLSAgICBpbnQgaWQgPSBu
b2RlID8gbm9kZS0+aWQoKSA6IDA7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm4gU3R5
bGVTaGVldCgpOworCiAgICAgLy8gIyMjIGFkZCBQSQogICAgIHJldHVybiAKLQkoIGlkID09IElE
X1NUWUxFKSA/CisJKG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzdHlsZSgpKSkgPwogCXN0
YXRpY19jYXN0PEhUTUxTdHlsZUVsZW1lbnRJbXBsICo+KG5vZGUpLT5zaGVldCgpCi0JOiAoIChp
ZCA9PSBJRF9MSU5LKSA/CisJOiAoIG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpsaW5rKCkp
ID8KIAkgICAgc3RhdGljX2Nhc3Q8SFRNTExpbmtFbGVtZW50SW1wbCAqPihub2RlKS0+c2hlZXQo
KQogCSAgICA6IFN0eWxlU2hlZXQoKSApOwogfQpJbmRleDoga2h0bWwvZG9tL2RvbV9lbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9kb20vZG9t
X2VsZW1lbnQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEyCmRpZmYgLXUgLXAgLXIxLjEy
IGtodG1sL2RvbS9kb21fZWxlbWVudC5jcHAKLS0tIGtodG1sL2RvbS9kb21fZWxlbWVudC5jcHAJ
MTIgTWF5IDIwMDUgMTc6MTE6MjEgLTAwMDAJMS4xMgorKysga2h0bWwvZG9tL2RvbV9lbGVtZW50
LmNwcAk5IEp1bCAyMDA1IDAyOjQyOjM0IC0wMDAwCkBAIC0xNDEsNyArMTQxLDcgQEAgRWxlbWVu
dDo6fkVsZW1lbnQoKQogRE9NU3RyaW5nIEVsZW1lbnQ6OnRhZ05hbWUoKSBjb25zdAogewogICAg
IGlmICghaW1wbCkgdGhyb3cgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbjo6Tk9UX0ZPVU5EX0VS
Uik7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsKj4oaW1wbCktPnRhZ05hbWUo
KTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RWxlbWVudEltcGwqPihpbXBsKS0+bm9kZU5hbWUo
KTsKIH0KIAogRE9NU3RyaW5nIEVsZW1lbnQ6OmdldEF0dHJpYnV0ZSggY29uc3QgRE9NU3RyaW5n
ICZuYW1lICkKSW5kZXg6IGtodG1sL2RvbS9kb21fbm9kZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZG9tL2RvbV9ub2RlLmNwcCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS4xMgpkaWZmIC11IC1wIC1yMS4xMiBraHRtbC9kb20vZG9tX25vZGUuY3BwCi0t
LSBraHRtbC9kb20vZG9tX25vZGUuY3BwCTExIE1heSAyMDA1IDAwOjU4OjI4IC0wMDAwCTEuMTIK
KysrIGtodG1sL2RvbS9kb21fbm9kZS5jcHAJOSBKdWwgMjAwNSAwMjo0MjozNCAtMDAwMApAQCAt
MzI0LDcgKzMyNCw3IEBAIGJvb2wgTm9kZTo6aXNTdXBwb3J0ZWQoIGNvbnN0IERPTVN0cmluZyAK
IERPTVN0cmluZyBOb2RlOjpuYW1lc3BhY2VVUkkoICApIGNvbnN0CiB7CiAgICAgaWYgKCFpbXBs
KSByZXR1cm4gRE9NU3RyaW5nKCk7Ci0gICAgcmV0dXJuIGltcGwtPmdldERvY3VtZW50KCktPm5h
bWVzcGFjZVVSSShpbXBsLT5pZCgpKTsKKyAgICByZXR1cm4gaW1wbC0+bmFtZXNwYWNlVVJJKCk7
CiB9CiAKIERPTVN0cmluZyBOb2RlOjpwcmVmaXgoICApIGNvbnN0CkBAIC0zMzcsNyArMzM3LDcg
QEAgdm9pZCBOb2RlOjpzZXRQcmVmaXgoY29uc3QgRE9NU3RyaW5nICZwcgogewogICAgIGlmICgh
aW1wbCkgdGhyb3cgRE9NRXhjZXB0aW9uKERPTUV4Y2VwdGlvbjo6Tk9UX0ZPVU5EX0VSUik7CiAg
ICAgaW50IGV4Y2VwdGlvbmNvZGUgPSAwOwotICAgIGltcGwtPnNldFByZWZpeChwcmVmaXgsZXhj
ZXB0aW9uY29kZSk7CisgICAgaW1wbC0+c2V0UHJlZml4KHByZWZpeC5pbXBsZW1lbnRhdGlvbigp
LGV4Y2VwdGlvbmNvZGUpOwogICAgIGlmIChleGNlcHRpb25jb2RlKQogICAgICAgICB0aHJvdyBE
T01FeGNlcHRpb24oZXhjZXB0aW9uY29kZSk7CiB9CkBAIC0zNzYsMTMgKzM3Niw2IEBAIGJvb2wg
Tm9kZTo6ZGlzcGF0Y2hFdmVudChjb25zdCBFdmVudCAmZXYKICAgICByZXR1cm4gcjsKIH0KIAot
Ci11bnNpZ25lZCBpbnQgTm9kZTo6ZWxlbWVudElkKCkgY29uc3QKLXsKLSAgICBpZiAoIWltcGwp
IHJldHVybiAwOwotICAgIHJldHVybiBpbXBsLT5pZCgpOwotfQotCiB1bnNpZ25lZCBsb25nIE5v
ZGU6OmluZGV4KCkgY29uc3QKIHsKICAgICBpZiAoIWltcGwpIHJldHVybiAwOwpJbmRleDoga2h0
bWwvZG9tL2RvbV9ub2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUv
a2h0bWwvZG9tL2RvbV9ub2RlLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTIKZGlmZiAtdSAt
cCAtcjEuMTIga2h0bWwvZG9tL2RvbV9ub2RlLmgKLS0tIGtodG1sL2RvbS9kb21fbm9kZS5oCTE4
IE1heSAyMDA1IDIxOjEwOjI0IC0wMDAwCTEuMTIKKysrIGtodG1sL2RvbS9kb21fbm9kZS5oCTkg
SnVsIDIwMDUgMDI6NDI6MzUgLTAwMDAKQEAgLTg1NSwxMyArODU1LDYgQEAgcHVibGljOgogICAg
IGJvb2wgZGlzcGF0Y2hFdmVudChjb25zdCBFdmVudCAmZXZ0KTsKIAogICAgIC8qKgotICAgICAq
IEBpbnRlcm5hbAotICAgICAqIG5vdCBwYXJ0IG9mIHRoZSBET00uCi0gICAgICogQHJldHVybnMg
dGhlIGVsZW1lbnQgaWQsIGluIGNhc2UgdGhpcyBpcyBhbiBlbGVtZW50LCAwIG90aGVyd2lzZQot
ICAgICAqLwotICAgIFFfVUlOVDMyIGVsZW1lbnRJZCgpIGNvbnN0OwotCi0gICAgLyoqCiAgICAg
ICogdGVzdHMgaWYgdGhpcyBOb2RlIGlzIDAuIFVzZWZ1bCBlc3BlY2lhbGx5LCBpZiBjYXN0aW5n
IHRvIGEgZGVyaXZlZAogICAgICAqIGNsYXNzOgogICAgICAqCkluZGV4OiBraHRtbC9kb20vaHRt
bF9iYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9k
b20vaHRtbF9iYXNlLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS42CmRpZmYgLXUgLXAgLXIx
LjYga2h0bWwvZG9tL2h0bWxfYmFzZS5jcHAKLS0tIGtodG1sL2RvbS9odG1sX2Jhc2UuY3BwCTMg
Tm92IDIwMDMgMDY6MzI6MDQgLTAwMDAJMS42CisrKyBraHRtbC9kb20vaHRtbF9iYXNlLmNwcAk5
IEp1bCAyMDA1IDAyOjQyOjM1IC0wMDAwCkBAIC00MSw3ICs0MSw3IEBAIEhUTUxCb2R5RWxlbWVu
dDo6SFRNTEJvZHlFbGVtZW50KEhUTUxCb2QKIAogSFRNTEJvZHlFbGVtZW50ICZIVE1MQm9keUVs
ZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVy
KCBvdGhlciwgSURfQk9EWSApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpi
b2R5KCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTEzNSw3ICsxMzUsNyBAQCBIVE1M
RnJhbWVFbGVtZW50OjpIVE1MRnJhbWVFbGVtZW50KEhUTUxGCiAKIEhUTUxGcmFtZUVsZW1lbnQg
JkhUTUxGcmFtZUVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAg
IGFzc2lnbk90aGVyKCBvdGhlciwgSURfRlJBTUUgKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIs
IEhUTUxOYW1lczo6ZnJhbWUoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtMjY1LDcg
KzI2NSw3IEBAIEhUTUxJRnJhbWVFbGVtZW50OjpIVE1MSUZyYW1lRWxlbWVudChIVE0KIAogSFRN
TElGcmFtZUVsZW1lbnQgJkhUTUxJRnJhbWVFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2Rl
ICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0lGUkFNRSApOworICAgIGFz
c2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjppZnJhbWUoKSApOwogICAgIHJldHVybiAqdGhp
czsKIH0KIApAQCAtNDE0LDcgKzQxNCw3IEBAIEhUTUxGcmFtZVNldEVsZW1lbnQ6OkhUTUxGcmFt
ZVNldEVsZW1lbnQKIAogSFRNTEZyYW1lU2V0RWxlbWVudCAmSFRNTEZyYW1lU2V0RWxlbWVudDo6
b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVy
LCBJRF9GUkFNRVNFVCApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpmcmFt
ZXNldCgpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC00NjYsNyArNDY2LDcgQEAgSFRN
TEhlYWRFbGVtZW50OjpIVE1MSGVhZEVsZW1lbnQoSFRNTEhlYQogCiBIVE1MSGVhZEVsZW1lbnQg
JkhUTUxIZWFkRWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAg
YXNzaWduT3RoZXIoIG90aGVyLCBJRF9IRUFEICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBI
VE1MTmFtZXM6OmhlYWQoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtNTA3LDcgKzUw
Nyw3IEBAIEhUTUxIdG1sRWxlbWVudDo6SFRNTEh0bWxFbGVtZW50KEhUTUxIdG0KIAogSFRNTEh0
bWxFbGVtZW50ICZIVE1MSHRtbEVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVy
KQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfSFRNTCApOworICAgIGFzc2lnbk90aGVy
KCBvdGhlciwgSFRNTE5hbWVzOjpodG1sKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKSW5k
ZXg6IGtodG1sL2RvbS9odG1sX2Jsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvV2ViQ29yZS9raHRtbC9kb20vaHRtbF9ibG9jay5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuNApkaWZmIC11IC1wIC1yMS40IGtodG1sL2RvbS9odG1sX2Jsb2NrLmNwcAotLS0ga2h0bWwv
ZG9tL2h0bWxfYmxvY2suY3BwCTEwIEp1biAyMDAyIDIwOjA3OjM0IC0wMDAwCTEuNAorKysga2h0
bWwvZG9tL2h0bWxfYmxvY2suY3BwCTkgSnVsIDIwMDUgMDI6NDI6MzUgLTAwMDAKQEAgLTQzLDcg
KzQzLDcgQEAgSFRNTEJsb2NrcXVvdGVFbGVtZW50OjpIVE1MQmxvY2txdW90ZUVsZQogCiBIVE1M
QmxvY2txdW90ZUVsZW1lbnQgJkhUTUxCbG9ja3F1b3RlRWxlbWVudDo6b3BlcmF0b3IgPSAoY29u
c3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9CTE9DS1FVT1RF
ICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OmJsb2NrcXVvdGUoKSApOwog
ICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtODQsNyArODQsNyBAQCBIVE1MRGl2RWxlbWVudDo6
SFRNTERpdkVsZW1lbnQoSFRNTERpdkVsCiAKIEhUTUxEaXZFbGVtZW50ICZIVE1MRGl2RWxlbWVu
dDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90
aGVyLCBJRF9ESVYgKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6ZGl2KCkg
KTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTEyNSw3ICsxMjUsNyBAQCBIVE1MSFJFbGVt
ZW50OjpIVE1MSFJFbGVtZW50KEhUTUxIUkVsZW1lCiAKIEhUTUxIUkVsZW1lbnQgJkhUTUxIUkVs
ZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVy
KCBvdGhlciwgSURfSFIgKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6aHIo
KSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtMjA1LDE2ICsyMDUsMTcgQEAgSFRNTEhl
YWRpbmdFbGVtZW50OjpIVE1MSGVhZGluZ0VsZW1lbnQoSAogCiBIVE1MSGVhZGluZ0VsZW1lbnQg
JkhUTUxIZWFkaW5nRWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0g
ICAgaWYob3RoZXIuZWxlbWVudElkKCkgIT0gSURfSDEgfHwKLSAgICAgICBvdGhlci5lbGVtZW50
SWQoKSAhPSBJRF9IMiB8fAotICAgICAgIG90aGVyLmVsZW1lbnRJZCgpICE9IElEX0gzIHx8Ci0g
ICAgICAgb3RoZXIuZWxlbWVudElkKCkgIT0gSURfSDQgfHwKLSAgICAgICBvdGhlci5lbGVtZW50
SWQoKSAhPSBJRF9INSB8fAotICAgICAgIG90aGVyLmVsZW1lbnRJZCgpICE9IElEX0g2ICkKKyAg
ICBpZiAoIW90aGVyLmhhbmRsZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDEoKSkgJiYKKyAg
ICAgICAgIW90aGVyLmhhbmRsZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDIoKSkgJiYKKyAg
ICAgICAgIW90aGVyLmhhbmRsZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDMoKSkgJiYKKyAg
ICAgICAgIW90aGVyLmhhbmRsZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDQoKSkgJiYKKyAg
ICAgICAgIW90aGVyLmhhbmRsZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDUoKSkgJiYKKyAg
ICAgICAgIW90aGVyLmhhbmRsZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDYoKSkpCiAgICAg
ewogCWlmICggaW1wbCApIGltcGwtPmRlcmVmKCk7CiAJaW1wbCA9IDA7CiAgICAgfSBlbHNlIHsK
KwogICAgIE5vZGU6Om9wZXJhdG9yID0gKG90aGVyKTsKICAgICB9CiAgICAgcmV0dXJuICp0aGlz
OwpAQCAtMjU3LDcgKzI1OCw3IEBAIEhUTUxQYXJhZ3JhcGhFbGVtZW50OjpIVE1MUGFyYWdyYXBo
RWxlbWUKIAogSFRNTFBhcmFncmFwaEVsZW1lbnQgJkhUTUxQYXJhZ3JhcGhFbGVtZW50OjpvcGVy
YXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElE
X1AgKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6cCgpICk7CiAgICAgcmV0
dXJuICp0aGlzOwogfQogCkBAIC0yOTgsNyArMjk5LDcgQEAgSFRNTFByZUVsZW1lbnQ6OkhUTUxQ
cmVFbGVtZW50KEhUTUxQcmVFbAogCiBIVE1MUHJlRWxlbWVudCAmSFRNTFByZUVsZW1lbnQ6Om9w
ZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwg
SURfUFJFICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OnByZSgpICk7CiAg
ICAgcmV0dXJuICp0aGlzOwogfQogCkluZGV4OiBraHRtbC9kb20vaHRtbF9lbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9kb20vaHRtbF9lbGVt
ZW50LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNApkaWZmIC11IC1wIC1yMS4xNCBraHRt
bC9kb20vaHRtbF9lbGVtZW50LmNwcAotLS0ga2h0bWwvZG9tL2h0bWxfZWxlbWVudC5jcHAJMTEg
TWF5IDIwMDUgMDA6NTg6MjggLTAwMDAJMS4xNAorKysga2h0bWwvZG9tL2h0bWxfZWxlbWVudC5j
cHAJOSBKdWwgMjAwNSAwMjo0MjozNiAtMDAwMApAQCAtMTgyLDkgKzE4Miw5IEBAIEhUTUxDb2xs
ZWN0aW9uIEhUTUxFbGVtZW50OjpjaGlsZHJlbigpIGMKICAgICByZXR1cm4gSFRNTENvbGxlY3Rp
b24oaW1wbCwgSFRNTENvbGxlY3Rpb25JbXBsOjpOT0RFX0NISUxEUkVOKTsKIH0KIAotdm9pZCBI
VE1MRWxlbWVudDo6YXNzaWduT3RoZXIoIGNvbnN0IE5vZGUgJm90aGVyLCBpbnQgZWxlbWVudElk
ICkKK3ZvaWQgSFRNTEVsZW1lbnQ6OmFzc2lnbk90aGVyKCBjb25zdCBOb2RlICZvdGhlciwgY29u
c3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSApCiB7Ci0gICAgaWYoKGludClvdGhlci5lbGVtZW50
SWQoKSAhPSBlbGVtZW50SWQpIHsKKyAgICBpZiAoIW90aGVyLmhhbmRsZSgpLT5oYXNUYWdOYW1l
KHRhZ05hbWUpKSB7CiAJaWYgKCBpbXBsICkgaW1wbC0+ZGVyZWYoKTsKIAlpbXBsID0gMDsKICAg
ICB9IGVsc2UgewpJbmRleDoga2h0bWwvZG9tL2h0bWxfZWxlbWVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2RvbS9odG1sX2VsZW1lbnQuaCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS44CmRpZmYgLXUgLXAgLXIxLjgga2h0bWwvZG9tL2h0bWxfZWxlbWVu
dC5oCi0tLSBraHRtbC9kb20vaHRtbF9lbGVtZW50LmgJMjIgTWF5IDIwMDQgMDE6NTA6NDggLTAw
MDAJMS44CisrKyBraHRtbC9kb20vaHRtbF9lbGVtZW50LmgJOSBKdWwgMjAwNSAwMjo0MjozNiAt
MDAwMApAQCAtMzAsNiArMzAsOCBAQAogI2RlZmluZSBIVE1MX0VMRU1FTlRfSAogCiAjaW5jbHVk
ZSA8ZG9tL2RvbV9lbGVtZW50Lmg+CisjaW5jbHVkZSAiZG9tX3FuYW1lLmgiCisKIGNsYXNzIEtI
VE1MVmlldzsKIAogbmFtZXNwYWNlIERPTSB7CkBAIC0yMjUsNyArMjI3LDcgQEAgcHJvdGVjdGVk
OgogICAgIC8qCiAgICAgICogQGludGVybmFsCiAgICAgICovCi0gICAgdm9pZCBhc3NpZ25PdGhl
ciggY29uc3QgTm9kZSAmb3RoZXIsIGludCBlbGVtZW50SWQgKTsKKyAgICB2b2lkIGFzc2lnbk90
aGVyKCBjb25zdCBOb2RlICZvdGhlciwgY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSApOwog
fTsKIAogfTsgLy9uYW1lc3BhY2UKSW5kZXg6IGtodG1sL2RvbS9odG1sX2Zvcm0uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2RvbS9odG1sX2Zvcm0uY3Bw
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjExCmRpZmYgLXUgLXAgLXIxLjExIGtodG1sL2RvbS9o
dG1sX2Zvcm0uY3BwCi0tLSBraHRtbC9kb20vaHRtbF9mb3JtLmNwcAkxMSBNYXkgMjAwNSAwMDo1
ODoyOCAtMDAwMAkxLjExCisrKyBraHRtbC9kb20vaHRtbF9mb3JtLmNwcAk5IEp1bCAyMDA1IDAy
OjQyOjM2IC0wMDAwCkBAIC00Nyw3ICs0Nyw3IEBAIEhUTUxCdXR0b25FbGVtZW50OjpIVE1MQnV0
dG9uRWxlbWVudChIVE0KIAogSFRNTEJ1dHRvbkVsZW1lbnQgJkhUTUxCdXR0b25FbGVtZW50Ojpv
cGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIs
IElEX0JVVFRPTiApOwkKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6YnV0dG9u
KCkgKTsJCiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC0xNTcsNyArMTU3LDcgQEAgSFRNTEZp
ZWxkU2V0RWxlbWVudDo6SFRNTEZpZWxkU2V0RWxlbWVudAogCiBIVE1MRmllbGRTZXRFbGVtZW50
ICZIVE1MRmllbGRTZXRFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsK
LSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0ZJRUxEU0VUICk7CisgICAgYXNzaWduT3RoZXIo
IG90aGVyLCBIVE1MTmFtZXM6OmZpZWxkc2V0KCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAK
QEAgLTE5Myw3ICsxOTMsNyBAQCBIVE1MRm9ybUVsZW1lbnQ6OkhUTUxGb3JtRWxlbWVudChIVE1M
Rm9yCiAKIEhUTUxGb3JtRWxlbWVudCAmSFRNTEZvcm1FbGVtZW50OjpvcGVyYXRvciA9IChjb25z
dCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0ZPUk0gKTsKKyAg
ICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6Zm9ybSgpICk7CiAgICAgcmV0dXJuICp0
aGlzOwogfQogCkBAIC0zMTEsNyArMzExLDcgQEAgSFRNTElucHV0RWxlbWVudDo6SFRNTElucHV0
RWxlbWVudChIVE1MSQogCiBIVE1MSW5wdXRFbGVtZW50ICZIVE1MSW5wdXRFbGVtZW50OjpvcGVy
YXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElE
X0lOUFVUICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OmlucHV0KCkgKTsK
ICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTU3NCw3ICs1NzQsNyBAQCBIVE1MTGFiZWxFbGVt
ZW50OjpIVE1MTGFiZWxFbGVtZW50KEhUTUxMCiAKIEhUTUxMYWJlbEVsZW1lbnQgJkhUTUxMYWJl
bEVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90
aGVyKCBvdGhlciwgSURfTEFCRUwgKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1l
czo6bGFiZWwoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtNjMzLDcgKzYzMyw3IEBA
IEhUTUxMZWdlbmRFbGVtZW50OjpIVE1MTGVnZW5kRWxlbWVudChIVE0KIAogSFRNTExlZ2VuZEVs
ZW1lbnQgJkhUTUxMZWdlbmRFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikK
IHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0xFR0VORCApOworICAgIGFzc2lnbk90aGVy
KCBvdGhlciwgSFRNTE5hbWVzOjpsZWdlbmQoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApA
QCAtNjkxLDcgKzY5MSw3IEBAIEhUTUxPcHRHcm91cEVsZW1lbnQ6OkhUTUxPcHRHcm91cEVsZW1l
bnQKIAogSFRNTE9wdEdyb3VwRWxlbWVudCAmSFRNTE9wdEdyb3VwRWxlbWVudDo6b3BlcmF0b3Ig
PSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9PUFRH
Uk9VUCApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpvcHRncm91cCgpICk7
CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC03NDQsNyArNzQ0LDcgQEAgSFRNTFNlbGVjdEVs
ZW1lbnQ6OkhUTUxTZWxlY3RFbGVtZW50KEhUTQogCiBIVE1MU2VsZWN0RWxlbWVudCAmSFRNTFNl
bGVjdEVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2ln
bk90aGVyKCBvdGhlciwgSURfU0VMRUNUICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1M
TmFtZXM6OnNlbGVjdCgpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC05MDYsNyArOTA2
LDcgQEAgSFRNTFRleHRBcmVhRWxlbWVudDo6SFRNTFRleHRBcmVhRWxlbWVudAogCiBIVE1MVGV4
dEFyZWFFbGVtZW50ICZIVE1MVGV4dEFyZWFFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2Rl
ICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX1RFWFRBUkVBICk7CisgICAg
YXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OnRleHRhcmVhKCkgKTsKICAgICByZXR1cm4g
KnRoaXM7CiB9CiAKQEAgLTEwNzQsNyArMTA3NCw3IEBAIEhUTUxPcHRpb25FbGVtZW50OjpIVE1M
T3B0aW9uRWxlbWVudChIVE0KIAogSFRNTE9wdGlvbkVsZW1lbnQgJkhUTUxPcHRpb25FbGVtZW50
OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3Ro
ZXIsIElEX09QVElPTiApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpvcHRp
b24oKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtMTE4Miw3ICsxMTgyLDcgQEAgSFRN
TElzSW5kZXhFbGVtZW50OjpIVE1MSXNJbmRleEVsZW1lbnQoSAogCiBIVE1MSXNJbmRleEVsZW1l
bnQgJkhUTUxJc0luZGV4RWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7
Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9JU0lOREVYICk7CisgICAgYXNzaWduT3RoZXIo
IG90aGVyLCBIVE1MTmFtZXM6OmlzaW5kZXgoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApJ
bmRleDoga2h0bWwvZG9tL2h0bWxfaGVhZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L1dlYkNvcmUva2h0bWwvZG9tL2h0bWxfaGVhZC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuMTAKZGlmZiAtdSAtcCAtcjEuMTAga2h0bWwvZG9tL2h0bWxfaGVhZC5jcHAKLS0tIGtodG1s
L2RvbS9odG1sX2hlYWQuY3BwCTIyIEp1biAyMDA1IDE4OjIyOjAxIC0wMDAwCTEuMTAKKysrIGto
dG1sL2RvbS9odG1sX2hlYWQuY3BwCTkgSnVsIDIwMDUgMDI6NDI6MzcgLTAwMDAKQEAgLTQyLDcg
KzQyLDcgQEAgSFRNTEJhc2VFbGVtZW50OjpIVE1MQmFzZUVsZW1lbnQoSFRNTEJhcwogCiBIVE1M
QmFzZUVsZW1lbnQgJkhUTUxCYXNlRWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3Ro
ZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9CQVNFICk7CisgICAgYXNzaWduT3Ro
ZXIoIG90aGVyLCBIVE1MTmFtZXM6OmJhc2UoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApA
QCAtOTcsNyArOTcsNyBAQCBIVE1MTGlua0VsZW1lbnQ6OkhUTUxMaW5rRWxlbWVudChIVE1MTGlu
CiAKIEhUTUxMaW5rRWxlbWVudCAmSFRNTExpbmtFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBO
b2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0xJTksgKTsKKyAgICBh
c3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6bGluaygpICk7CiAgICAgcmV0dXJuICp0aGlz
OwogfQogCkBAIC0yMzgsNyArMjM4LDcgQEAgSFRNTE1ldGFFbGVtZW50OjpIVE1MTWV0YUVsZW1l
bnQoSFRNTE1ldAogCiBIVE1MTWV0YUVsZW1lbnQgJkhUTUxNZXRhRWxlbWVudDo6b3BlcmF0b3Ig
PSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9NRVRB
ICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6Om1ldGEoKSApOwogICAgIHJl
dHVybiAqdGhpczsKIH0KIApAQCAtMzEyLDcgKzMxMiw3IEBAIEhUTUxTY3JpcHRFbGVtZW50OjpI
VE1MU2NyaXB0RWxlbWVudChIVE0KIAogSFRNTFNjcmlwdEVsZW1lbnQgJkhUTUxTY3JpcHRFbGVt
ZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlcigg
b3RoZXIsIElEX1NDUklQVCApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpz
Y3JpcHQoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtNDI0LDcgKzQyNCw3IEBAIEhU
TUxTdHlsZUVsZW1lbnQ6OkhUTUxTdHlsZUVsZW1lbnQoSFRNTFMKIAogSFRNTFN0eWxlRWxlbWVu
dCAmSFRNTFN0eWxlRWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0g
ICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9TVFlMRSApOworICAgIGFzc2lnbk90aGVyKCBvdGhl
ciwgSFRNTE5hbWVzOjpzdHlsZSgpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC00OTYs
NyArNDk2LDcgQEAgSFRNTFRpdGxlRWxlbWVudDo6SFRNTFRpdGxlRWxlbWVudChIVE1MVAogCiBI
VE1MVGl0bGVFbGVtZW50ICZIVE1MVGl0bGVFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2Rl
ICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX1RJVExFICk7CisgICAgYXNz
aWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OnRpdGxlKCkgKTsKICAgICByZXR1cm4gKnRoaXM7
CiB9CiAKSW5kZXg6IGtodG1sL2RvbS9odG1sX2ltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9kb20vaHRtbF9pbWFnZS5jcHAsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuOQpkaWZmIC11IC1wIC1yMS45IGtodG1sL2RvbS9odG1sX2ltYWdlLmNwcAot
LS0ga2h0bWwvZG9tL2h0bWxfaW1hZ2UuY3BwCTMgTm92IDIwMDMgMDY6MzI6MDQgLTAwMDAJMS45
CisrKyBraHRtbC9kb20vaHRtbF9pbWFnZS5jcHAJOSBKdWwgMjAwNSAwMjo0MjozNyAtMDAwMApA
QCAtNDYsNyArNDYsNyBAQCBIVE1MQXJlYUVsZW1lbnQ6OkhUTUxBcmVhRWxlbWVudChIVE1MQXJl
CiAKIEhUTUxBcmVhRWxlbWVudCAmSFRNTEFyZWFFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBO
b2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0FSRUEgKTsKKyAgICBh
c3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6YXJlYSgpICk7CiAgICAgcmV0dXJuICp0aGlz
OwogfQogCkBAIC0xNzYsNyArMTc2LDcgQEAgSFRNTEltYWdlRWxlbWVudDo6SFRNTEltYWdlRWxl
bWVudChIVE1MSQogCiBIVE1MSW1hZ2VFbGVtZW50ICZIVE1MSW1hZ2VFbGVtZW50OjpvcGVyYXRv
ciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0lN
RyApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjppbWcoKSApOwogICAgIHJl
dHVybiAqdGhpczsKIH0KIApAQCAtMzcyLDcgKzM3Miw3IEBAIEhUTUxNYXBFbGVtZW50OjpIVE1M
TWFwRWxlbWVudChIVE1MTWFwRWwKIAogSFRNTE1hcEVsZW1lbnQgJkhUTUxNYXBFbGVtZW50Ojpv
cGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIs
IElEX01BUCApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjptYXAoKSApOwog
ICAgIHJldHVybiAqdGhpczsKIH0KIApJbmRleDoga2h0bWwvZG9tL2h0bWxfaW5saW5lLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9kb20vaHRtbF9pbmxp
bmUuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjcKZGlmZiAtdSAtcCAtcjEuNyBraHRtbC9k
b20vaHRtbF9pbmxpbmUuY3BwCi0tLSBraHRtbC9kb20vaHRtbF9pbmxpbmUuY3BwCTExIE1heSAy
MDA1IDAwOjU4OjI4IC0wMDAwCTEuNworKysga2h0bWwvZG9tL2h0bWxfaW5saW5lLmNwcAk5IEp1
bCAyMDA1IDAyOjQyOjM3IC0wMDAwCkBAIC00NSw3ICs0NSw3IEBAIEhUTUxBbmNob3JFbGVtZW50
OjpIVE1MQW5jaG9yRWxlbWVudChIVE0KIAogSFRNTEFuY2hvckVsZW1lbnQgJkhUTUxBbmNob3JF
bGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhl
ciggb3RoZXIsIElEX0EgKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6YSgp
ICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC0yMTcsNyArMjE3LDcgQEAgSFRNTEJSRWxl
bWVudDo6SFRNTEJSRWxlbWVudChIVE1MQlJFbGVtZQogCiBIVE1MQlJFbGVtZW50ICZIVE1MQlJF
bGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhl
ciggb3RoZXIsIElEX0JSICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OmJy
KCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTI1OCw3ICsyNTgsNyBAQCBIVE1MRm9u
dEVsZW1lbnQ6OkhUTUxGb250RWxlbWVudChIVE1MRm9uCiAKIEhUTUxGb250RWxlbWVudCAmSFRN
TEZvbnRFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3Np
Z25PdGhlciggb3RoZXIsIElEX0ZPTlQgKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxO
YW1lczo6Zm9udCgpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC0zMTksNyArMzE5LDcg
QEAgSFRNTE1vZEVsZW1lbnQ6OkhUTUxNb2RFbGVtZW50KGNvbnN0IEhUTQogSFRNTE1vZEVsZW1l
bnQ6OkhUTUxNb2RFbGVtZW50KEhUTUxFbGVtZW50SW1wbCAqX2ltcGwpCiAgICAgOiBIVE1MRWxl
bWVudCgpCiB7Ci0gICAgaWYgKF9pbXBsICYmIChfaW1wbC0+aWQoKSA9PSBJRF9JTlMgfHwgX2lt
cGwtPmlkKCkgPT0gSURfREVMKSkKKyAgICBpZiAoX2ltcGwgJiYgKF9pbXBsLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6aW5zKCkpIHx8IF9pbXBsLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZGVsKCkp
KSkKICAgICAgICAgaW1wbCA9IF9pbXBsOwogICAgIGVsc2UKICAgICAgICAgaW1wbCA9IDA7CkBA
IC0zMjgsOSArMzI4LDggQEAgSFRNTE1vZEVsZW1lbnQ6OkhUTUxNb2RFbGVtZW50KEhUTUxFbGVt
ZQogCiBIVE1MTW9kRWxlbWVudCAmSFRNTE1vZEVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5v
ZGUgJm90aGVyKQogewotICAgIGlmKCBvdGhlci5lbGVtZW50SWQoKSAhPSBJRF9JTlMgJiYKLQlv
dGhlci5lbGVtZW50SWQoKSAhPSBJRF9ERUwgKQotICAgIHsKKyAgICBpZiAoIW90aGVyLmhhbmRs
ZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW5zKCkpICYmCisgICAgICAgICFvdGhlci5oYW5k
bGUoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmRlbCgpKSkgewogCWlmICggaW1wbCApIGltcGwt
PmRlcmVmKCk7CiAJaW1wbCA9IDA7CiAgICAgfSBlbHNlIHsKQEAgLTM4MSwxOSArMzgwLDE2IEBA
IEhUTUxRdW90ZUVsZW1lbnQ6OkhUTUxRdW90ZUVsZW1lbnQoY29uc3QKIHsKIH0KIAotSFRNTFF1
b3RlRWxlbWVudDo6SFRNTFF1b3RlRWxlbWVudChIVE1MR2VuZXJpY0VsZW1lbnRJbXBsICpfaW1w
bCkKK0hUTUxRdW90ZUVsZW1lbnQ6OkhUTUxRdW90ZUVsZW1lbnQoSFRNTFF1b3RlRWxlbWVudElt
cGwgKl9pbXBsKQogICAgIDogSFRNTEVsZW1lbnQoKQogewotICAgIGlmIChfaW1wbCAmJiBfaW1w
bC0+aWQoKSA9PSBJRF9RKQotICAgICAgICBpbXBsID0gX2ltcGw7Ci0gICAgZWxzZQotICAgICAg
ICBpbXBsID0gMDsKKyAgICBpbXBsID0gX2ltcGw7CiAgICAgaWYgKCBpbXBsICkgaW1wbC0+cmVm
KCk7CiB9CiAKIEhUTUxRdW90ZUVsZW1lbnQgJkhUTUxRdW90ZUVsZW1lbnQ6Om9wZXJhdG9yID0g
KGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfUSApOwor
ICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpxKCkgKTsKICAgICByZXR1cm4gKnRo
aXM7CiB9CiAKSW5kZXg6IGtodG1sL2RvbS9odG1sX2lubGluZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2RvbS9odG1sX2lubGluZS5oLHYKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjMKZGlmZiAtdSAtcCAtcjEuMyBraHRtbC9kb20vaHRtbF9pbmxpbmUuaAot
LS0ga2h0bWwvZG9tL2h0bWxfaW5saW5lLmgJMTUgQXByIDIwMDIgMjM6NDI6MDEgLTAwMDAJMS4z
CisrKyBraHRtbC9kb20vaHRtbF9pbmxpbmUuaAk5IEp1bCAyMDA1IDAyOjQyOjM3IC0wMDAwCkBA
IC00MjUsNyArNDI1LDcgQEAgcHVibGljOgogICAgIEhUTUxRdW90ZUVsZW1lbnQoY29uc3QgTm9k
ZSAmb3RoZXIpIDogSFRNTEVsZW1lbnQoKQogICAgICAgICAgeygqdGhpcyk9b3RoZXI7fQogcHJv
dGVjdGVkOgotICAgIEhUTUxRdW90ZUVsZW1lbnQoSFRNTEdlbmVyaWNFbGVtZW50SW1wbCAqaW1w
bCk7CisgICAgSFRNTFF1b3RlRWxlbWVudChIVE1MUXVvdGVFbGVtZW50SW1wbCAqaW1wbCk7CiBw
dWJsaWM6CiAKICAgICBIVE1MUXVvdGVFbGVtZW50ICYgb3BlcmF0b3IgPSAoY29uc3QgSFRNTFF1
b3RlRWxlbWVudCAmb3RoZXIpOwpJbmRleDoga2h0bWwvZG9tL2h0bWxfbGlzdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZG9tL2h0bWxfbGlzdC5jcHAs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNApkaWZmIC11IC1wIC1yMS40IGtodG1sL2RvbS9odG1s
X2xpc3QuY3BwCi0tLSBraHRtbC9kb20vaHRtbF9saXN0LmNwcAkxMCBKdW4gMjAwMiAyMDowNzoz
NiAtMDAwMAkxLjQKKysrIGtodG1sL2RvbS9odG1sX2xpc3QuY3BwCTkgSnVsIDIwMDUgMDI6NDI6
MzcgLTAwMDAKQEAgLTQxLDcgKzQxLDcgQEAgSFRNTERMaXN0RWxlbWVudDo6SFRNTERMaXN0RWxl
bWVudChIVE1MRAogCiBIVE1MRExpc3RFbGVtZW50ICZIVE1MRExpc3RFbGVtZW50OjpvcGVyYXRv
ciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0RM
ICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OmRsKCkgKTsKICAgICByZXR1
cm4gKnRoaXM7CiB9CiAKQEAgLTg4LDcgKzg4LDcgQEAgSFRNTERpcmVjdG9yeUVsZW1lbnQ6OkhU
TUxEaXJlY3RvcnlFbGVtZQogCiBIVE1MRGlyZWN0b3J5RWxlbWVudCAmSFRNTERpcmVjdG9yeUVs
ZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVy
KCBvdGhlciwgSURfRElSICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OmRp
cigpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC0xMzUsNyArMTM1LDcgQEAgSFRNTExJ
RWxlbWVudDo6SFRNTExJRWxlbWVudChIVE1MTElFbGVtZQogCiBIVE1MTElFbGVtZW50ICZIVE1M
TElFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25P
dGhlciggb3RoZXIsIElEX0xJICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6
OmxpKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTE5MCw3ICsxOTAsNyBAQCBIVE1M
TWVudUVsZW1lbnQ6OkhUTUxNZW51RWxlbWVudChIVE1MTWVuCiAKIEhUTUxNZW51RWxlbWVudCAm
SFRNTE1lbnVFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBh
c3NpZ25PdGhlciggb3RoZXIsIElEX01FTlUgKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhU
TUxOYW1lczo6bWVudSgpICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC0yMzcsNyArMjM3
LDcgQEAgSFRNTE9MaXN0RWxlbWVudDo6SFRNTE9MaXN0RWxlbWVudChIVE1MTwogCiBIVE1MT0xp
c3RFbGVtZW50ICZIVE1MT0xpc3RFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhl
cikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX09MICk7CisgICAgYXNzaWduT3RoZXIo
IG90aGVyLCBIVE1MTmFtZXM6Om9sKCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTMx
MCw3ICszMTAsNyBAQCBIVE1MVUxpc3RFbGVtZW50OjpIVE1MVUxpc3RFbGVtZW50KEhUTUxVCiAK
IEhUTUxVTGlzdEVsZW1lbnQgJkhUTUxVTGlzdEVsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5v
ZGUgJm90aGVyKQogewotICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfVUwgKTsKKyAgICBhc3Np
Z25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6dWwoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0K
IApJbmRleDoga2h0bWwvZG9tL2h0bWxfbWlzYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1dlYkNvcmUva2h0bWwvZG9tL2h0bWxfbWlzYy5jcHAsdgpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuNwpkaWZmIC11IC1wIC1yMS43IGtodG1sL2RvbS9odG1sX21pc2MuY3BwCi0tLSBraHRt
bC9kb20vaHRtbF9taXNjLmNwcAkxMSBNYXkgMjAwNSAwMDo1ODoyOCAtMDAwMAkxLjcKKysrIGto
dG1sL2RvbS9odG1sX21pc2MuY3BwCTkgSnVsIDIwMDUgMDI6NDI6MzggLTAwMDAKQEAgLTQxLDcg
KzQxLDcgQEAgSFRNTEJhc2VGb250RWxlbWVudDo6SFRNTEJhc2VGb250RWxlbWVudAogCiBIVE1M
QmFzZUZvbnRFbGVtZW50ICZIVE1MQmFzZUZvbnRFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBO
b2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElEX0JBU0VGT05UICk7Cisg
ICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OmJhc2Vmb250KCkgKTsKICAgICByZXR1
cm4gKnRoaXM7CiB9CiAKSW5kZXg6IGtodG1sL2RvbS9odG1sX29iamVjdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZG9tL2h0bWxfb2JqZWN0LmNwcCx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS41CmRpZmYgLXUgLXAgLXIxLjUga2h0bWwvZG9tL2h0bWxf
b2JqZWN0LmNwcAotLS0ga2h0bWwvZG9tL2h0bWxfb2JqZWN0LmNwcAkxIE1hciAyMDA0IDE3OjA0
OjI0IC0wMDAwCTEuNQorKysga2h0bWwvZG9tL2h0bWxfb2JqZWN0LmNwcAk5IEp1bCAyMDA1IDAy
OjQyOjM4IC0wMDAwCkBAIC00Myw3ICs0Myw3IEBAIEhUTUxBcHBsZXRFbGVtZW50OjpIVE1MQXBw
bGV0RWxlbWVudChIVE0KIAogSFRNTEFwcGxldEVsZW1lbnQgJkhUTUxBcHBsZXRFbGVtZW50Ojpv
cGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIs
IElEX0FQUExFVCApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjphcHBsZXQo
KSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtMTk0LDcgKzE5NCw3IEBAIEhUTUxPYmpl
Y3RFbGVtZW50OjpIVE1MT2JqZWN0RWxlbWVudChIVE0KIAogSFRNTE9iamVjdEVsZW1lbnQgJkhU
TUxPYmplY3RFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBh
c3NpZ25PdGhlciggb3RoZXIsIElEX09CSkVDVCApOworICAgIGFzc2lnbk90aGVyKCBvdGhlciwg
SFRNTE5hbWVzOjpvYmplY3QoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtNDMyLDcg
KzQzMiw3IEBAIEhUTUxQYXJhbUVsZW1lbnQ6OkhUTUxQYXJhbUVsZW1lbnQoSFRNTFAKIAogSFRN
TFBhcmFtRWxlbWVudCAmSFRNTFBhcmFtRWxlbWVudDo6b3BlcmF0b3IgPSAoY29uc3QgTm9kZSAm
b3RoZXIpCiB7Ci0gICAgYXNzaWduT3RoZXIoIG90aGVyLCBJRF9QQVJBTSApOworICAgIGFzc2ln
bk90aGVyKCBvdGhlciwgSFRNTE5hbWVzOjpwYXJhbSgpICk7CiAgICAgcmV0dXJuICp0aGlzOwog
fQogCkluZGV4OiBraHRtbC9kb20vaHRtbF90YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
L2N2cy9yb290L1dlYkNvcmUva2h0bWwvZG9tL2h0bWxfdGFibGUuY3BwLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjYKZGlmZiAtdSAtcCAtcjEuNiBraHRtbC9kb20vaHRtbF90YWJsZS5jcHAKLS0t
IGtodG1sL2RvbS9odG1sX3RhYmxlLmNwcAkzMSBPY3QgMjAwMyAwMDo0NzoxNiAtMDAwMAkxLjYK
KysrIGtodG1sL2RvbS9odG1sX3RhYmxlLmNwcAk5IEp1bCAyMDA1IDAyOjQyOjM4IC0wMDAwCkBA
IC00NSw3ICs0NSw3IEBAIEhUTUxUYWJsZUNhcHRpb25FbGVtZW50OjpIVE1MVGFibGVDYXB0aW8K
IAogSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQgJkhUTUxUYWJsZUNhcHRpb25FbGVtZW50OjpvcGVy
YXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3RoZXIsIElE
X0NBUFRJT04gKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIsIEhUTUxOYW1lczo6Y2FwdGlvbigp
ICk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC04Niw5ICs4Niw4IEBAIEhUTUxUYWJsZUNl
bGxFbGVtZW50OjpIVE1MVGFibGVDZWxsRWxlbWUKIAogSFRNTFRhYmxlQ2VsbEVsZW1lbnQgJkhU
TUxUYWJsZUNlbGxFbGVtZW50OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAg
ICBpZiggb3RoZXIuZWxlbWVudElkKCkgIT0gSURfVEQgJiYKLQlvdGhlci5lbGVtZW50SWQoKSAh
PSBJRF9USCApCi0gICAgeworICAgIGlmICghb3RoZXIuaGFuZGxlKCktPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjp0ZCgpKSB8fAorICAgICAgICAhb3RoZXIuaGFuZGxlKCktPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjp0aCgpKSkgewogCWlmICggaW1wbCApIGltcGwtPmRlcmVmKCk7CiAJaW1wbCA9IDA7
CiAgICAgfSBlbHNlIHsKQEAgLTI5NSw5ICsyOTQsOCBAQCBIVE1MVGFibGVDb2xFbGVtZW50OjpI
VE1MVGFibGVDb2xFbGVtZW50CiAKIEhUTUxUYWJsZUNvbEVsZW1lbnQgJkhUTUxUYWJsZUNvbEVs
ZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewotICAgIGlmKCBvdGhlci5l
bGVtZW50SWQoKSAhPSBJRF9DT0wgJiYKLQlvdGhlci5lbGVtZW50SWQoKSAhPSBJRF9DT0xHUk9V
UCApCi0gICAgeworICAgIGlmICghb3RoZXIuaGFuZGxlKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVz
Ojpjb2woKSkgJiYKKyAgICAgICAgIW90aGVyLmhhbmRsZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6Y29sZ3JvdXAoKSkpIHsKIAlpZiAoIGltcGwgKSBpbXBsLT5kZXJlZigpOwogCWltcGwgPSAw
OwogICAgIH0gZWxzZSB7CkBAIC00MDEsNyArMzk5LDcgQEAgSFRNTFRhYmxlRWxlbWVudDo6SFRN
TFRhYmxlRWxlbWVudChIVE1MVAogCiBIVE1MVGFibGVFbGVtZW50ICZIVE1MVGFibGVFbGVtZW50
OjpvcGVyYXRvciA9IChjb25zdCBOb2RlICZvdGhlcikKIHsKLSAgICBhc3NpZ25PdGhlciggb3Ro
ZXIsIElEX1RBQkxFICk7CisgICAgYXNzaWduT3RoZXIoIG90aGVyLCBIVE1MTmFtZXM6OnRhYmxl
KCkgKTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKQEAgLTYzOCw3ICs2MzYsNyBAQCBIVE1MVGFi
bGVSb3dFbGVtZW50OjpIVE1MVGFibGVSb3dFbGVtZW50CiAKIEhUTUxUYWJsZVJvd0VsZW1lbnQg
JkhUTUxUYWJsZVJvd0VsZW1lbnQ6Om9wZXJhdG9yID0gKGNvbnN0IE5vZGUgJm90aGVyKQogewot
ICAgIGFzc2lnbk90aGVyKCBvdGhlciwgSURfVFIgKTsKKyAgICBhc3NpZ25PdGhlciggb3RoZXIs
IEhUTUxOYW1lczo6dHIoKSApOwogICAgIHJldHVybiAqdGhpczsKIH0KIApAQCAtNzc1LDEwICs3
NzMsOSBAQCBIVE1MVGFibGVTZWN0aW9uRWxlbWVudDo6SFRNTFRhYmxlU2VjdGlvCiAKIEhUTUxU
YWJsZVNlY3Rpb25FbGVtZW50ICZIVE1MVGFibGVTZWN0aW9uRWxlbWVudDo6b3BlcmF0b3IgPSAo
Y29uc3QgTm9kZSAmb3RoZXIpCiB7Ci0gICAgaWYob3RoZXIuZWxlbWVudElkKCkgIT0gSURfVEJP
RFkgJiYKLSAgICAgICBvdGhlci5lbGVtZW50SWQoKSAhPSBJRF9USEVBRCAmJgotICAgICAgIG90
aGVyLmVsZW1lbnRJZCgpICE9IElEX1RGT09UICkKLSAgICB7CisgICAgaWYgKCFvdGhlci5oYW5k
bGUoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRib2R5KCkpICYmCisgICAgICAgICFvdGhlci5o
YW5kbGUoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRoZWFkKCkpICYmCisgICAgICAgICFvdGhl
ci5oYW5kbGUoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRmb290KCkpKSB7CiAJaWYgKCBpbXBs
ICkgaW1wbC0+ZGVyZWYoKTsKIAlpbXBsID0gMDsKICAgICB9IGVsc2UgewpJbmRleDoga2h0bWwv
ZWNtYS9ranNfY3NzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9r
aHRtbC9lY21hL2tqc19jc3MuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjI3CmRpZmYgLXUg
LXAgLXIxLjI3IGtodG1sL2VjbWEva2pzX2Nzcy5jcHAKLS0tIGtodG1sL2VjbWEva2pzX2Nzcy5j
cHAJMyBKdWwgMjAwNSAxMDo0Nzo1NSAtMDAwMAkxLjI3CisrKyBraHRtbC9lY21hL2tqc19jc3Mu
Y3BwCTkgSnVsIDIwMDUgMDI6NDI6MzkgLTAwMDAKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRl
ICJ4bWwvZG9tX2RvY2ltcGwuaCIKICNpbmNsdWRlICJodG1sL2h0bWxfaGVhZGltcGwuaCIgLy8g
Zm9yIEhUTUxTdHlsZUVsZW1lbnQKICNpbmNsdWRlICJranNfZG9tLmgiCi0jaW5jbHVkZSAibWlz
Yy9odG1sdGFncy5oIgorI2luY2x1ZGUgImh0bWxuYW1lcy5oIgogCiAjaW5jbHVkZSA8a2RlYnVn
Lmg+CiAKQEAgLTU1LDYgKzU1LDcgQEAgdXNpbmcgRE9NOjpDb3VudGVySW1wbDsKIHVzaW5nIERP
TTo6RG9jdW1lbnRJbXBsOwogdXNpbmcgRE9NOjpET01TdHJpbmc7CiB1c2luZyBET006OkVsZW1l
bnRJbXBsOwordXNpbmcgRE9NOjpIVE1MTmFtZXM7CiB1c2luZyBET006OkhUTUxTdHlsZUVsZW1l
bnRJbXBsOwogdXNpbmcgRE9NOjpNZWRpYUxpc3RJbXBsOwogdXNpbmcgRE9NOjpSZWN0SW1wbDsK
QEAgLTQwNCw3ICs0MDUsNyBAQCBWYWx1ZSBET01TdHlsZVNoZWV0TGlzdDo6dHJ5R2V0KEV4ZWNT
dGF0CiAgIC8vIGFuZCBkb2Vzbid0IGxvb2sgZm9yIG5hbWUgYXR0cmlidXRlIChzZWUgaW1wbGVt
ZW50YXRpb24gYWJvdmUpLgogICAvLyBCdXQgdW5pY2l0eSBvZiBzdHlsZXNoZWV0IGlkcyBpcyBn
b29kIHByYWN0aWNlIGFueXdheSA7KQogICBFbGVtZW50SW1wbCAqZWxlbWVudCA9IG1fZG9jLT5n
ZXRFbGVtZW50QnlJZChwLnN0cmluZygpKTsKLSAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC0+aWQo
KSA9PSBJRF9TVFlMRSkKKyAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OnN0eWxlKCkpKQogICAgIHJldHVybiBnZXRET01TdHlsZVNoZWV0KGV4ZWMsIHN0YXRp
Y19jYXN0PEhUTUxTdHlsZUVsZW1lbnRJbXBsICo+KGVsZW1lbnQpLT5zaGVldCgpKTsKIAogICBy
ZXR1cm4gRE9NT2JqZWN0Ojp0cnlHZXQoZXhlYywgcCk7CkluZGV4OiBraHRtbC9lY21hL2tqc19k
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VjbWEv
a2pzX2RvbS5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNzcKZGlmZiAtdSAtcCAtcjEuNzcg
a2h0bWwvZWNtYS9ranNfZG9tLmNwcAotLS0ga2h0bWwvZWNtYS9ranNfZG9tLmNwcAkzIEp1bCAy
MDA1IDEwOjQ3OjU1IC0wMDAwCTEuNzcKKysrIGtodG1sL2VjbWEva2pzX2RvbS5jcHAJOSBKdWwg
MjAwNSAwMjo0Mjo0MSAtMDAwMApAQCAtNDcsOCArNDcsNiBAQAogCiAjaW5jbHVkZSAiaHRtbF9v
YmplY3RpbXBsLmgiCiAKLSNpbmNsdWRlICJtaXNjL2h0bWx0YWdzLmgiCi0KICNpZiBBUFBMRV9D
SEFOR0VTCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvcnVudGltZV9vYmplY3QuaD4KICNlbmRp
ZgpAQCAtNjcsNiArNjUsNyBAQCB1c2luZyBET006OkhUTUxBcHBsZXRFbGVtZW50SW1wbDsKIHVz
aW5nIERPTTo6SFRNTERvY3VtZW50SW1wbDsKIHVzaW5nIERPTTo6SFRNTEVsZW1lbnRJbXBsOwog
dXNpbmcgRE9NOjpIVE1MRW1iZWRFbGVtZW50SW1wbDsKK3VzaW5nIERPTTo6SFRNTE5hbWVzOwog
dXNpbmcgRE9NOjpIVE1MT2JqZWN0RWxlbWVudEltcGw7CiB1c2luZyBET006Ok5hbWVkTm9kZU1h
cEltcGw7CiB1c2luZyBET006Ok5vZGU7CkBAIC00NjIsNyArNDYxLDcgQEAgdm9pZCBET01Ob2Rl
OjpwdXRWYWx1ZShFeGVjU3RhdGUgKmV4ZWMsIAogICAgIG5vZGUuc2V0Tm9kZVZhbHVlKHZhbHVl
LnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpLCBleGNlcHRpb24pOwogICAgIGJyZWFrOwogICBjYXNl
IFByZWZpeDoKLSAgICBub2RlLnNldFByZWZpeCh2YWx1ZS50b1N0cmluZyhleGVjKS5zdHJpbmco
KSwgZXhjZXB0aW9uKTsKKyAgICBub2RlLnNldFByZWZpeCh2YWx1ZS50b1N0cmluZyhleGVjKS5z
dHJpbmcoKS5pbXBsZW1lbnRhdGlvbigpLCBleGNlcHRpb24pOwogICAgIGJyZWFrOwogICBjYXNl
IE9uQWJvcnQ6CiAgICAgc2V0TGlzdGVuZXIoZXhlYyxET006OkV2ZW50SW1wbDo6QUJPUlRfRVZF
TlQsdmFsdWUpOwpAQCAtMTE4Nyw3ICsxMTg2LDcgQEAgVmFsdWUgRE9NRWxlbWVudDo6dHJ5R2V0
KEV4ZWNTdGF0ZSAqZXhlYwogICB7CiAgICAgc3dpdGNoKCBlbnRyeS0+dmFsdWUgKSB7CiAgICAg
Y2FzZSBUYWdOYW1lOgotICAgICAgcmV0dXJuIGdldFN0cmluZ09yTnVsbChlbGVtZW50LnRhZ05h
bWUoKSk7CisgICAgICByZXR1cm4gZ2V0U3RyaW5nT3JOdWxsKGVsZW1lbnQubm9kZU5hbWUoKSk7
CiAgICAgY2FzZSBTdHlsZToKICAgICAgIHJldHVybiBnZXRET01DU1NTdHlsZURlY2xhcmF0aW9u
KGV4ZWMsZWxlbWVudC5zdHlsZSgpKTsKICAgICBkZWZhdWx0OgpAQCAtMTcxMCwyNiArMTcwOSwy
MSBAQCBWYWx1ZUltcCAqZ2V0UnVudGltZU9iamVjdChFeGVjU3RhdGUgKmV4CiAgICAgaWYgKCFu
KQogICAgICAgICByZXR1cm4gMDsKIAotICAgIHN3aXRjaCAobi0+aWQoKSkgewotICAgICAgICBj
YXNlIElEX0FQUExFVDogewotICAgICAgICAgICAgSFRNTEFwcGxldEVsZW1lbnRJbXBsICphcHBs
ZXRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEFwcGxldEVsZW1lbnRJbXBsICo+KG4pOwotICAg
ICAgICAgICAgaWYgKGFwcGxldEVsZW1lbnQtPmdldEFwcGxldEluc3RhbmNlKCkpCi0gICAgICAg
ICAgICAgICAgLy8gVGhlIGluc3RhbmNlIGlzIG93bmVkIGJ5IHRoZSBhcHBsZXQgZWxlbWVudC4K
LSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFJ1bnRpbWVPYmplY3RJbXAoYXBwbGV0RWxlbWVu
dC0+Z2V0QXBwbGV0SW5zdGFuY2UoKSwgZmFsc2UpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgY2FzZSBJRF9FTUJFRDogewotICAgICAgICAgICAgSFRNTEVtYmVkRWxl
bWVudEltcGwgKmVtYmVkRWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxFbWJlZEVsZW1lbnRJbXBs
ICo+KG4pOwotICAgICAgICAgICAgaWYgKGVtYmVkRWxlbWVudC0+Z2V0RW1iZWRJbnN0YW5jZSgp
KQotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUnVudGltZU9iamVjdEltcChlbWJlZEVsZW1l
bnQtPmdldEVtYmVkSW5zdGFuY2UoKSwgZmFsc2UpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgY2FzZSBJRF9PQkpFQ1Q6IHsKLSAgICAgICAgICAgIEhUTUxPYmplY3RF
bGVtZW50SW1wbCAqb2JqZWN0RWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxPYmplY3RFbGVtZW50
SW1wbCAqPihuKTsKLSAgICAgICAgICAgIGlmIChvYmplY3RFbGVtZW50LT5nZXRPYmplY3RJbnN0
YW5jZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUnVudGltZU9iamVjdEltcChvYmpl
Y3RFbGVtZW50LT5nZXRPYmplY3RJbnN0YW5jZSgpLCBmYWxzZSk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQorICAgIGlmIChuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YXBwbGV0KCkp
KSB7CisgICAgICAgIEhUTUxBcHBsZXRFbGVtZW50SW1wbCAqYXBwbGV0RWxlbWVudCA9IHN0YXRp
Y19jYXN0PEhUTUxBcHBsZXRFbGVtZW50SW1wbCAqPihuKTsKKyAgICAgICAgaWYgKGFwcGxldEVs
ZW1lbnQtPmdldEFwcGxldEluc3RhbmNlKCkpCisgICAgICAgICAgICAvLyBUaGUgaW5zdGFuY2Ug
aXMgb3duZWQgYnkgdGhlIGFwcGxldCBlbGVtZW50LgorICAgICAgICAgICAgcmV0dXJuIG5ldyBS
dW50aW1lT2JqZWN0SW1wKGFwcGxldEVsZW1lbnQtPmdldEFwcGxldEluc3RhbmNlKCksIGZhbHNl
KTsKKyAgICB9CisgICAgZWxzZSBpZiAobi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmVtYmVkKCkp
KSB7CisgICAgICAgIEhUTUxFbWJlZEVsZW1lbnRJbXBsICplbWJlZEVsZW1lbnQgPSBzdGF0aWNf
Y2FzdDxIVE1MRW1iZWRFbGVtZW50SW1wbCAqPihuKTsKKyAgICAgICAgaWYgKGVtYmVkRWxlbWVu
dC0+Z2V0RW1iZWRJbnN0YW5jZSgpKQorICAgICAgICAgICAgcmV0dXJuIG5ldyBSdW50aW1lT2Jq
ZWN0SW1wKGVtYmVkRWxlbWVudC0+Z2V0RW1iZWRJbnN0YW5jZSgpLCBmYWxzZSk7CisgICAgfQor
ICAgIGVsc2UgaWYgKG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvYmplY3QoKSkpIHsKKyAgICAg
ICAgSFRNTE9iamVjdEVsZW1lbnRJbXBsICpvYmplY3RFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRN
TE9iamVjdEVsZW1lbnRJbXBsICo+KG4pOworICAgICAgICBpZiAob2JqZWN0RWxlbWVudC0+Z2V0
T2JqZWN0SW5zdGFuY2UoKSkKKyAgICAgICAgICAgIHJldHVybiBuZXcgUnVudGltZU9iamVjdElt
cChvYmplY3RFbGVtZW50LT5nZXRPYmplY3RJbnN0YW5jZSgpLCBmYWxzZSk7CiAgICAgfQogICAg
IAogICAgIC8vIElmIHdlIGRvbid0IGhhdmUgYSBydW50aW1lIG9iamVjdCByZXR1cm4gMC4KSW5k
ZXg6IGtodG1sL2VjbWEva2pzX2h0bWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9XZWJDb3JlL2todG1sL2VjbWEva2pzX2h0bWwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjEyMQpkaWZmIC11IC1wIC1yMS4xMjEga2h0bWwvZWNtYS9ranNfaHRtbC5jcHAKLS0tIGtodG1s
L2VjbWEva2pzX2h0bWwuY3BwCTMgSnVsIDIwMDUgMTA6NDc6NTYgLTAwMDAJMS4xMjEKKysrIGto
dG1sL2VjbWEva2pzX2h0bWwuY3BwCTkgSnVsIDIwMDUgMDI6NDI6NDYgLTAwMDAKQEAgLTQ2LDgg
KzQ2LDYgQEAKICNpbmNsdWRlICJranNfZXZlbnRzLmgiCiAjaW5jbHVkZSAia2pzX3Byb3h5Lmgi
CiAKLSNpbmNsdWRlICJtaXNjL2h0bWx0YWdzLmgiCi0KICNpbmNsdWRlICJyZW5kZXJpbmcvcmVu
ZGVyX2NhbnZhc2ltYWdlLmgiCiAjaW5jbHVkZSAicmVuZGVyaW5nL3JlbmRlcl9vYmplY3QuaCIK
ICNpbmNsdWRlICJyZW5kZXJpbmcvcmVuZGVyX2xheWVyLmgiCkBAIC0xMDksNiArMTA3LDcgQEAg
dXNpbmcgRE9NOjpIVE1MTWFwRWxlbWVudEltcGw7CiB1c2luZyBET006OkhUTUxNZW51RWxlbWVu
dEltcGw7CiB1c2luZyBET006OkhUTUxNZXRhRWxlbWVudEltcGw7CiB1c2luZyBET006OkhUTUxN
b2RFbGVtZW50SW1wbDsKK3VzaW5nIERPTTo6SFRNTE5hbWVzOwogdXNpbmcgRE9NOjpIVE1MT0xp
c3RFbGVtZW50SW1wbDsKIHVzaW5nIERPTTo6SFRNTE9iamVjdEVsZW1lbnRJbXBsOwogdXNpbmcg
RE9NOjpIVE1MT3B0R3JvdXBFbGVtZW50SW1wbDsKQEAgLTM1Myw3ICszNTIsNyBAQCBWYWx1ZSBI
VE1MRG9jdW1lbnQ6OnRyeUdldChFeGVjU3RhdGUgKmV4CiAgIGlmICh2YWwpCiAgICAgcmV0dXJu
IFZhbHVlKHZhbCk7CiAKLSAgSFRNTEJvZHlFbGVtZW50SW1wbCAqYm9keUVsZW1lbnQgPSAoYm9k
eSAmJiBib2R5LT5pZCgpID09IElEX0JPRFkpID8gc3RhdGljX2Nhc3Q8SFRNTEJvZHlFbGVtZW50
SW1wbCAqPihib2R5KSA6IDA7CisgIEhUTUxCb2R5RWxlbWVudEltcGwgKmJvZHlFbGVtZW50ID0g
KGJvZHkgJiYgYm9keS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJvZHkoKSkpID8gc3RhdGljX2Nh
c3Q8SFRNTEJvZHlFbGVtZW50SW1wbCAqPihib2R5KSA6IDA7CiAKICAgaWYgKGVudHJ5KSB7CiAg
ICAgc3dpdGNoIChlbnRyeS0+dmFsdWUpIHsKQEAgLTQyOSw3ICs0MjgsNyBAQCB2b2lkIEtKUzo6
SFRNTERvY3VtZW50OjpwdXRWYWx1ZShFeGVjU3RhCiAgIERPTUV4Y2VwdGlvblRyYW5zbGF0b3Ig
ZXhjZXB0aW9uKGV4ZWMpOwogICBIVE1MRG9jdW1lbnRJbXBsICZkb2MgPSAqc3RhdGljX2Nhc3Q8
SFRNTERvY3VtZW50SW1wbCAqPihpbXBsKCkpOwogICBIVE1MRWxlbWVudEltcGwgKmJvZHkgPSBk
b2MuYm9keSgpOwotICBIVE1MQm9keUVsZW1lbnRJbXBsICpib2R5RWxlbWVudCA9IChib2R5ICYm
IGJvZHktPmlkKCkgPT0gSURfQk9EWSkgPyBzdGF0aWNfY2FzdDxIVE1MQm9keUVsZW1lbnRJbXBs
ICo+KGJvZHkpIDogMDsKKyAgSFRNTEJvZHlFbGVtZW50SW1wbCAqYm9keUVsZW1lbnQgPSAoYm9k
eSAmJiBib2R5LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Ym9keSgpKSkgPyBzdGF0aWNfY2FzdDxI
VE1MQm9keUVsZW1lbnRJbXBsICo+KGJvZHkpIDogMDsKIAogICBzd2l0Y2ggKHRva2VuKSB7CiAg
IGNhc2UgVGl0bGU6CkBAIC01ODMsMTMzICs1ODIsMjE4IEBAIGNvbnN0IENsYXNzSW5mbyBLSlM6
OkhUTUxFbGVtZW50OjptYXJxdWUKIAogY29uc3QgQ2xhc3NJbmZvKiBLSlM6OkhUTUxFbGVtZW50
OjpjbGFzc0luZm8oKSBjb25zdAogewotICBzd2l0Y2ggKGltcGwoKS0+aWQoKSkgewotICBjYXNl
IElEX0hUTUw6Ci0gICAgcmV0dXJuICZodG1sX2luZm87Ci0gIGNhc2UgSURfSEVBRDoKLSAgICBy
ZXR1cm4gJmhlYWRfaW5mbzsKLSAgY2FzZSBJRF9MSU5LOgotICAgIHJldHVybiAmbGlua19pbmZv
OwotICBjYXNlIElEX1RJVExFOgotICAgIHJldHVybiAmdGl0bGVfaW5mbzsKLSAgY2FzZSBJRF9N
RVRBOgotICAgIHJldHVybiAmbWV0YV9pbmZvOwotICBjYXNlIElEX0JBU0U6Ci0gICAgcmV0dXJu
ICZiYXNlX2luZm87Ci0gIGNhc2UgSURfSVNJTkRFWDoKLSAgICByZXR1cm4gJmlzSW5kZXhfaW5m
bzsKLSAgY2FzZSBJRF9TVFlMRToKLSAgICByZXR1cm4gJnN0eWxlX2luZm87Ci0gIGNhc2UgSURf
Qk9EWToKLSAgICByZXR1cm4gJmJvZHlfaW5mbzsKLSAgY2FzZSBJRF9GT1JNOgotICAgIHJldHVy
biAmZm9ybV9pbmZvOwotICBjYXNlIElEX1NFTEVDVDoKLSAgICByZXR1cm4gJnNlbGVjdF9pbmZv
OwotICBjYXNlIElEX09QVEdST1VQOgotICAgIHJldHVybiAmb3B0R3JvdXBfaW5mbzsKLSAgY2Fz
ZSBJRF9PUFRJT046Ci0gICAgcmV0dXJuICZvcHRpb25faW5mbzsKLSAgY2FzZSBJRF9JTlBVVDoK
LSAgICByZXR1cm4gJmlucHV0X2luZm87Ci0gIGNhc2UgSURfVEVYVEFSRUE6Ci0gICAgcmV0dXJu
ICZ0ZXh0QXJlYV9pbmZvOwotICBjYXNlIElEX0JVVFRPTjoKLSAgICByZXR1cm4gJmJ1dHRvbl9p
bmZvOwotICBjYXNlIElEX0xBQkVMOgotICAgIHJldHVybiAmbGFiZWxfaW5mbzsKLSAgY2FzZSBJ
RF9GSUVMRFNFVDoKLSAgICByZXR1cm4gJmZpZWxkU2V0X2luZm87Ci0gIGNhc2UgSURfTEVHRU5E
OgotICAgIHJldHVybiAmbGVnZW5kX2luZm87Ci0gIGNhc2UgSURfVUw6Ci0gICAgcmV0dXJuICZ1
bF9pbmZvOwotICBjYXNlIElEX09MOgotICAgIHJldHVybiAmb2xfaW5mbzsKLSAgY2FzZSBJRF9E
TDoKLSAgICByZXR1cm4gJmRsX2luZm87Ci0gIGNhc2UgSURfRElSOgotICAgIHJldHVybiAmZGly
X2luZm87Ci0gIGNhc2UgSURfTUVOVToKLSAgICByZXR1cm4gJm1lbnVfaW5mbzsKLSAgY2FzZSBJ
RF9MSToKLSAgICByZXR1cm4gJmxpX2luZm87Ci0gIGNhc2UgSURfRElWOgotICAgIHJldHVybiAm
ZGl2X2luZm87Ci0gIGNhc2UgSURfUDoKLSAgICByZXR1cm4gJnBfaW5mbzsKLSAgY2FzZSBJRF9I
MToKLSAgY2FzZSBJRF9IMjoKLSAgY2FzZSBJRF9IMzoKLSAgY2FzZSBJRF9INDoKLSAgY2FzZSBJ
RF9INToKLSAgY2FzZSBJRF9INjoKLSAgICByZXR1cm4gJmhlYWRpbmdfaW5mbzsKLSAgY2FzZSBJ
RF9CTE9DS1FVT1RFOgotICAgIHJldHVybiAmYmxvY2tRdW90ZV9pbmZvOwotICBjYXNlIElEX1E6
Ci0gICAgcmV0dXJuICZxX2luZm87Ci0gIGNhc2UgSURfUFJFOgotICAgIHJldHVybiAmcHJlX2lu
Zm87Ci0gIGNhc2UgSURfQlI6Ci0gICAgcmV0dXJuICZicl9pbmZvOwotICBjYXNlIElEX0JBU0VG
T05UOgotICAgIHJldHVybiAmYmFzZUZvbnRfaW5mbzsKLSAgY2FzZSBJRF9GT05UOgotICAgIHJl
dHVybiAmZm9udF9pbmZvOwotICBjYXNlIElEX0hSOgotICAgIHJldHVybiAmaHJfaW5mbzsKLSAg
Y2FzZSBJRF9JTlM6Ci0gIGNhc2UgSURfREVMOgotICAgIHJldHVybiAmbW9kX2luZm87Ci0gIGNh
c2UgSURfQToKLSAgICByZXR1cm4gJmFfaW5mbzsKLSAgY2FzZSBJRF9DQU5WQVM6Ci0gICAgcmV0
dXJuICZjYW52YXNfaW5mbzsKLSAgY2FzZSBJRF9JTUc6Ci0gICAgcmV0dXJuICZpbWdfaW5mbzsK
LSAgY2FzZSBJRF9PQkpFQ1Q6Ci0gICAgcmV0dXJuICZvYmplY3RfaW5mbzsKLSAgY2FzZSBJRF9Q
QVJBTToKLSAgICByZXR1cm4gJnBhcmFtX2luZm87Ci0gIGNhc2UgSURfQVBQTEVUOgotICAgIHJl
dHVybiAmYXBwbGV0X2luZm87Ci0gIGNhc2UgSURfTUFQOgotICAgIHJldHVybiAmbWFwX2luZm87
Ci0gIGNhc2UgSURfQVJFQToKLSAgICByZXR1cm4gJmFyZWFfaW5mbzsKLSAgY2FzZSBJRF9TQ1JJ
UFQ6Ci0gICAgcmV0dXJuICZzY3JpcHRfaW5mbzsKLSAgY2FzZSBJRF9UQUJMRToKLSAgICByZXR1
cm4gJnRhYmxlX2luZm87Ci0gIGNhc2UgSURfQ0FQVElPTjoKLSAgICByZXR1cm4gJmNhcHRpb25f
aW5mbzsKLSAgY2FzZSBJRF9DT0w6Ci0gICAgcmV0dXJuICZjb2xfaW5mbzsKLSAgY2FzZSBJRF9U
SEVBRDoKLSAgICByZXR1cm4gJnRhYmxlc2VjdGlvbl9pbmZvOwotICBjYXNlIElEX1RCT0RZOgot
ICAgIHJldHVybiAmdGFibGVzZWN0aW9uX2luZm87Ci0gIGNhc2UgSURfVEZPT1Q6Ci0gICAgcmV0
dXJuICZ0YWJsZXNlY3Rpb25faW5mbzsKLSAgY2FzZSBJRF9UUjoKLSAgICByZXR1cm4gJnRyX2lu
Zm87Ci0gIGNhc2UgSURfVEg6Ci0gICAgcmV0dXJuICZ0YWJsZWNlbGxfaW5mbzsKLSAgY2FzZSBJ
RF9URDoKLSAgICByZXR1cm4gJnRhYmxlY2VsbF9pbmZvOwotICBjYXNlIElEX0ZSQU1FU0VUOgot
ICAgIHJldHVybiAmZnJhbWVTZXRfaW5mbzsKLSAgY2FzZSBJRF9GUkFNRToKLSAgICByZXR1cm4g
JmZyYW1lX2luZm87Ci0gIGNhc2UgSURfSUZSQU1FOgotICAgIHJldHVybiAmaUZyYW1lX2luZm87
Ci0gIGNhc2UgSURfTUFSUVVFRToKLSAgICByZXR1cm4gJm1hcnF1ZWVfaW5mbzsKLSAgZGVmYXVs
dDoKKyAgICAvLyBGSVhNRTogV2Ugd2FudCB0byB1c2UgSGFzaE1hcCBoZXJlLCBidXQgdGhlcmUg
YXJlIGNvbXBpbGVyIGlzc3VlcyB0byBkZWFsIHdpdGguCisgICAgc3RhdGljIFFQdHJEaWN0PGNv
bnN0IENsYXNzSW5mbz4gY2xhc3NJbmZvRGljdDsKKyAgICBpZiAoY2xhc3NJbmZvRGljdC5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjphKCksICZh
X2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmFwcGxldCgp
LCAmYXBwbGV0X2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6
OmFyZWEoKSwgJmFyZWFfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxO
YW1lczo6YmFzZSgpLCAmYmFzZV9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQo
SFRNTE5hbWVzOjpiYXNlZm9udCgpLCAmYmFzZUZvbnRfaW5mbyk7CisgICAgICAgIGNsYXNzSW5m
b0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6YmxvY2txdW90ZSgpLCAmYmxvY2tRdW90ZV9pbmZvKTsK
KyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpib2R5KCksICZib2R5X2lu
Zm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmJyKCksICZicl9p
bmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpidXR0b24oKSwg
JmJ1dHRvbl9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpj
YW52YXMoKSwgJmNhbnZhc19pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRN
TE5hbWVzOjpjYXB0aW9uKCksICZjYXB0aW9uX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0
Lmluc2VydChIVE1MTmFtZXM6OmNvbCgpLCAmY29sX2luZm8pOworICAgICAgICBjbGFzc0luZm9E
aWN0Lmluc2VydChIVE1MTmFtZXM6OmNvbGdyb3VwKCksICZjb2xfaW5mbyk7CisgICAgICAgIGNs
YXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6ZGVsKCksICZtb2RfaW5mbyk7CisgICAgICAg
IGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6ZGlyKCksICZkaXJfaW5mbyk7CisgICAg
ICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6ZGl2KCksICZkaXZfaW5mbyk7Cisg
ICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6ZGwoKSwgJmRsX2luZm8pOwor
ICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmZpZWxkc2V0KCksICZmaWVs
ZFNldF9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpmb250
KCksICZmb250X2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6
OmZvcm0oKSwgJmZvcm1faW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxO
YW1lczo6ZnJhbWUoKSwgJmZyYW1lX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2Vy
dChIVE1MTmFtZXM6OmZyYW1lc2V0KCksICZmcmFtZVNldF9pbmZvKTsKKyAgICAgICAgY2xhc3NJ
bmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpoMSgpLCAmaGVhZGluZ19pbmZvKTsKKyAgICAgICAg
Y2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpoMigpLCAmaGVhZGluZ19pbmZvKTsKKyAg
ICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpoMygpLCAmaGVhZGluZ19pbmZv
KTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpoNCgpLCAmaGVhZGlu
Z19pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpoNSgpLCAm
aGVhZGluZ19pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpo
NigpLCAmaGVhZGluZ19pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5h
bWVzOjpoZWFkKCksICZoZWFkX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChI
VE1MTmFtZXM6OmhyKCksICZocl9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQo
SFRNTE5hbWVzOjpodG1sKCksICZodG1sX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmlu
c2VydChIVE1MTmFtZXM6OmlmcmFtZSgpLCAmaUZyYW1lX2luZm8pOworICAgICAgICBjbGFzc0lu
Zm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmltZygpLCAmaW1nX2luZm8pOworICAgICAgICBjbGFz
c0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmlucHV0KCksICZpbnB1dF9pbmZvKTsKKyAgICAg
ICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjppbnMoKSwgJm1vZF9pbmZvKTsKKyAg
ICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjppc2luZGV4KCksICZpc0luZGV4
X2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmxhYmVsKCks
ICZsYWJlbF9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjps
ZWdlbmQoKSwgJmxlZ2VuZF9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRN
TE5hbWVzOjpsaSgpLCAmbGlfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhU
TUxOYW1lczo6bGluaygpLCAmbGlua19pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNl
cnQoSFRNTE5hbWVzOjptYXAoKSwgJm1hcF9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5p
bnNlcnQoSFRNTE5hbWVzOjptYXJxdWVlKCksICZtYXJxdWVlX2luZm8pOworICAgICAgICBjbGFz
c0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Om1lbnUoKSwgJm1lbnVfaW5mbyk7CisgICAgICAg
IGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6bWV0YSgpLCAmbWV0YV9pbmZvKTsKKyAg
ICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpvYmplY3QoKSwgJm9iamVjdF9p
bmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpvbCgpLCAmb2xf
aW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6b3B0aW9uKCks
ICZvcHRpb25faW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6
b3B0Z3JvdXAoKSwgJm9wdEdyb3VwX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2Vy
dChIVE1MTmFtZXM6OnAoKSwgJnBfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0
KEhUTUxOYW1lczo6cGFyYW0oKSwgJnBhcmFtX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0
Lmluc2VydChIVE1MTmFtZXM6OnByZSgpLCAmcHJlX2luZm8pOworICAgICAgICBjbGFzc0luZm9E
aWN0Lmluc2VydChIVE1MTmFtZXM6OnEoKSwgJnFfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0Rp
Y3QuaW5zZXJ0KEhUTUxOYW1lczo6c2NyaXB0KCksICZzY3JpcHRfaW5mbyk7CisgICAgICAgIGNs
YXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6c2VsZWN0KCksICZzZWxlY3RfaW5mbyk7Cisg
ICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6c3R5bGUoKSwgJnN0eWxlX2lu
Zm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OnRhYmxlKCksICZ0
YWJsZV9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjp0Ym9k
eSgpLCAmdGFibGVzZWN0aW9uX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChI
VE1MTmFtZXM6OnRkKCksICZ0YWJsZWNlbGxfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3Qu
aW5zZXJ0KEhUTUxOYW1lczo6dGV4dGFyZWEoKSwgJnRleHRBcmVhX2luZm8pOworICAgICAgICBj
bGFzc0luZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OnRoKCksICZ0YWJsZWNlbGxfaW5mbyk7Cisg
ICAgICAgIGNsYXNzSW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6dGhlYWQoKSwgJnRhYmxlc2Vj
dGlvbl9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjp0Zm9v
dCgpLCAmdGFibGVzZWN0aW9uX2luZm8pOworICAgICAgICBjbGFzc0luZm9EaWN0Lmluc2VydChI
VE1MTmFtZXM6OnRpdGxlKCksICZ0aXRsZV9pbmZvKTsKKyAgICAgICAgY2xhc3NJbmZvRGljdC5p
bnNlcnQoSFRNTE5hbWVzOjp0cigpLCAmdHJfaW5mbyk7CisgICAgICAgIGNsYXNzSW5mb0RpY3Qu
aW5zZXJ0KEhUTUxOYW1lczo6dWwoKSwgJnVsX2luZm8pOworICAgIH0KKyAgICAKKyAgICBIVE1M
RWxlbWVudEltcGwqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwqPihpbXBs
KCkpOworICAgIGNvbnN0IENsYXNzSW5mbyogcmVzdWx0ID0gY2xhc3NJbmZvRGljdC5maW5kKGVs
ZW1lbnQtPmxvY2FsTmFtZSgpLmltcGxlbWVudGF0aW9uKCkpOworICAgIGlmIChyZXN1bHQpCisg
ICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgcmV0dXJuICZpbmZvOwotICB9CiB9CisKK2NvbnN0
IEhUTUxFbGVtZW50OjpBY2Nlc3NvcnMgSFRNTEVsZW1lbnQ6Omh0bWxfYWNjZXNzb3JzID0geyAm
SFRNTEVsZW1lbnQ6Omh0bWxHZXR0ZXIsICZIVE1MRWxlbWVudDo6aHRtbFNldHRlciB9OworY29u
c3QgSFRNTEVsZW1lbnQ6OkFjY2Vzc29ycyBIVE1MRWxlbWVudDo6aGVhZF9hY2Nlc3NvcnMgPSB7
ICZIVE1MRWxlbWVudDo6aGVhZEdldHRlciwgJkhUTUxFbGVtZW50OjpoZWFkU2V0dGVyIH07Citj
b25zdCBIVE1MRWxlbWVudDo6QWNjZXNzb3JzIEhUTUxFbGVtZW50OjpsaW5rX2FjY2Vzc29ycyA9
IHsgJkhUTUxFbGVtZW50OjpsaW5rR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmxpbmtTZXR0ZXIgfTsK
K2NvbnN0IEhUTUxFbGVtZW50OjpBY2Nlc3NvcnMgSFRNTEVsZW1lbnQ6OnRpdGxlX2FjY2Vzc29y
cyA9IHsgJkhUTUxFbGVtZW50Ojp0aXRsZUdldHRlciwgJkhUTUxFbGVtZW50Ojp0aXRsZVNldHRl
ciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkFjY2Vzc29ycyBIVE1MRWxlbWVudDo6bWV0YV9hY2Nl
c3NvcnMgPSB7ICZIVE1MRWxlbWVudDo6bWV0YUdldHRlciwgJkhUTUxFbGVtZW50OjptZXRhU2V0
dGVyIH07Citjb25zdCBIVE1MRWxlbWVudDo6QWNjZXNzb3JzIEhUTUxFbGVtZW50OjpiYXNlX2Fj
Y2Vzc29ycyA9IHsgJkhUTUxFbGVtZW50OjpiYXNlR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmJhc2VT
ZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpBY2Nlc3NvcnMgSFRNTEVsZW1lbnQ6OmlzSW5k
ZXhfYWNjZXNzb3JzID0geyAmSFRNTEVsZW1lbnQ6OmlzSW5kZXhHZXR0ZXIsICZIVE1MRWxlbWVu
dDo6aXNJbmRleFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkFjY2Vzc29ycyBIVE1MRWxl
bWVudDo6c3R5bGVfYWNjZXNzb3JzID0geyAmSFRNTEVsZW1lbnQ6OnN0eWxlR2V0dGVyLCAmSFRN
TEVsZW1lbnQ6OnN0eWxlU2V0dGVyIH07Citjb25zdCBIVE1MRWxlbWVudDo6QWNjZXNzb3JzIEhU
TUxFbGVtZW50Ojpib2R5X2FjY2Vzc29ycyA9IHsgJkhUTUxFbGVtZW50Ojpib2R5R2V0dGVyLCAm
SFRNTEVsZW1lbnQ6OmJvZHlTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpBY2Nlc3NvcnMg
SFRNTEVsZW1lbnQ6OmZvcm1fYWNjZXNzb3JzID0geyAmSFRNTEVsZW1lbnQ6OmZvcm1HZXR0ZXIs
ICZIVE1MRWxlbWVudDo6Zm9ybVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkFjY2Vzc29y
cyBIVE1MRWxlbWVudDo6c2VsZWN0X2FjY2Vzc29ycyA9IHsgJkhUTUxFbGVtZW50OjpzZWxlY3RH
ZXR0ZXIsICZIVE1MRWxlbWVudDo6c2VsZWN0U2V0dGVyIH07Citjb25zdCBIVE1MRWxlbWVudDo6
QWNjZXNzb3JzIEhUTUxFbGVtZW50OjpvcHRHcm91cF9hY2Nlc3NvcnMgPSB7ICZIVE1MRWxlbWVu
dDo6b3B0R3JvdXBHZXR0ZXIsICZIVE1MRWxlbWVudDo6b3B0R3JvdXBTZXR0ZXIgfTsKK2NvbnN0
IEhUTUxFbGVtZW50OjpBY2Nlc3NvcnMgSFRNTEVsZW1lbnQ6Om9wdGlvbl9hY2Nlc3NvcnMgPSB7
ICZIVE1MRWxlbWVudDo6b3B0aW9uR2V0dGVyLCAmSFRNTEVsZW1lbnQ6Om9wdGlvblNldHRlciB9
OworY29uc3QgSFRNTEVsZW1lbnQ6OkFjY2Vzc29ycyBIVE1MRWxlbWVudDo6aW5wdXRfYWNjZXNz
b3JzID0geyAmSFRNTEVsZW1lbnQ6OmlucHV0R2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmlucHV0U2V0
dGVyIH07Citjb25zdCBIVE1MRWxlbWVudDo6QWNjZXNzb3JzIEhUTUxFbGVtZW50Ojp0ZXh0QXJl
YV9hY2Nlc3NvcnMgPSB7ICZIVE1MRWxlbWVudDo6dGV4dEFyZWFHZXR0ZXIsICZIVE1MRWxlbWVu
dDo6dGV4dEFyZWFTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpBY2Nlc3NvcnMgSFRNTEVs
ZW1lbnQ6OmJ1dHRvbl9hY2Nlc3NvcnMgPSB7ICZIVE1MRWxlbWVudDo6YnV0dG9uR2V0dGVyLCAm
SFRNTEVsZW1lbnQ6OmJ1dHRvblNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkFjY2Vzc29y
cyBIVE1MRWxlbWVudDo6bGFiZWxfYWNjZXNzb3JzID0geyAmSFRNTEVsZW1lbnQ6OmxhYmVsR2V0
dGVyLCAmSFRNTEVsZW1lbnQ6OmxhYmVsU2V0dGVyIH07Citjb25zdCBIVE1MRWxlbWVudDo6QWNj
ZXNzb3JzIEhUTUxFbGVtZW50OjpmaWVsZFNldF9hY2Nlc3NvcnMgPSB7ICZIVE1MRWxlbWVudDo6
ZmllbGRTZXRHZXR0ZXIsICZIVE1MRWxlbWVudDo6ZmllbGRTZXRTZXR0ZXIgfTsKK2NvbnN0IEhU
TUxFbGVtZW50OjpBY2Nlc3NvcnMgSFRNTEVsZW1lbnQ6OmxlZ2VuZF9hY2Nlc3NvcnMgPSB7ICZI
VE1MRWxlbWVudDo6bGVnZW5kR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmxlZ2VuZFNldHRlciB9Owor
Y29uc3QgSFRNTEVsZW1lbnQ6OkFjY2Vzc29ycyBIVE1MRWxlbWVudDo6dWxfYWNjZXNzb3JzID0g
eyAmSFRNTEVsZW1lbnQ6OnVMaXN0R2V0dGVyLCAmSFRNTEVsZW1lbnQ6OnVMaXN0U2V0dGVyIH07
Citjb25zdCBIVE1MRWxlbWVudDo6QWNjZXNzb3JzIEhUTUxFbGVtZW50OjpvbF9hY2Nlc3NvcnMg
PSB7ICZIVE1MRWxlbWVudDo6b0xpc3RHZXR0ZXIsICZIVE1MRWxlbWVudDo6b0xpc3RTZXR0ZXIg
fTsKK2NvbnN0IEhUTUxFbGVtZW50OjpBY2Nlc3NvcnMgSFRNTEVsZW1lbnQ6OmRsX2FjY2Vzc29y
cyA9IHsgJkhUTUxFbGVtZW50OjpkTGlzdEdldHRlciwgJkhUTUxFbGVtZW50OjpkTGlzdFNldHRl
ciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkFjY2Vzc29ycyBIVE1MRWxlbWVudDo6ZGlyX2FjY2Vz
c29ycyA9IHsgJkhUTUxFbGVtZW50OjpkaXJHZXR0ZXIsICZIVE1MRWxlbWVudDo6ZGlyU2V0dGVy
IH07Citjb25zdCBIVE1MRWxlbWVudDo6QWNjZXNzb3JzIEhUTUxFbGVtZW50OjptZW51X2FjY2Vz
c29ycyA9IHsgJkhUTUxFbGVtZW50OjptZW51R2V0dGVyLCAmSFRNTEVsZW1lbnQ6Om1lbnVTZXR0
ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpBY2Nlc3NvcnMgSFRNTEVsZW1lbnQ6OmxpX2FjY2Vz
c29ycyA9IHsgJkhUTUxFbGVtZW50OjpsaUdldHRlciwgJkhUTUxFbGVtZW50OjpsaVNldHRlciB9
OworY29uc3QgSFRNTEVsZW1lbnQ6OkFjY2Vzc29ycyBIVE1MRWxlbWVudDo6ZGl2X2FjY2Vzc29y
cyA9IHsgJkhUTUxFbGVtZW50OjpkaXZHZXR0ZXIsICZIVE1MRWxlbWVudDo6ZGl2U2V0dGVyIH07
Citjb25zdCBIVE1MRWxlbWVudDo6QWNjZXNzb3JzIEhUTUxFbGVtZW50OjpwX2FjY2Vzc29ycyA9
IHsgJkhUTUxFbGVtZW50OjpwYXJhZ3JhcGhHZXR0ZXIsICZIVE1MRWxlbWVudDo6cGFyYWdyYXBo
U2V0dGVyIH07Citjb25zdCBIVE1MRWxlbWVudDo6QWNjZXNzb3JzIEhUTUxFbGVtZW50OjpoZWFk
aW5nX2FjY2Vzc29ycyA9IHsgJkhUTUxFbGVtZW50OjpoZWFkaW5nR2V0dGVyLCAmSFRNTEVsZW1l
bnQ6OmhlYWRpbmdTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpBY2Nlc3NvcnMgSFRNTEVs
ZW1lbnQ6OmJsb2NrUXVvdGVfYWNjZXNzb3JzID0geyAmSFRNTEVsZW1lbnQ6OmJsb2NrUXVvdGVH
ZXR0ZXIsICZIVE1MRWxlbWVudDo6YmxvY2tRdW90ZVNldHRlciB9OworY29uc3QgSFRNTEVsZW1l
bnQ6OkFjY2Vzc29ycyBIVE1MRWxlbWVudDo6cV9hY2Nlc3NvcnMgPSB7ICZIVE1MRWxlbWVudDo6
cXVvdGVHZXR0ZXIsICZIVE1MRWxlbWVudDo6cXVvdGVTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVt
ZW50OjpBY2Nlc3NvcnMgSFRNTEVsZW1lbnQ6OnByZV9hY2Nlc3NvcnMgPSB7ICZIVE1MRWxlbWVu
dDo6cHJlR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OnByZVNldHRlciB9OworY29uc3QgSFRNTEVsZW1l
bnQ6OkFjY2Vzc29ycyBIVE1MRWxlbWVudDo6YnJfYWNjZXNzb3JzID0geyAmSFRNTEVsZW1lbnQ6
OmJyR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmJyU2V0dGVyIH07Citjb25zdCBIVE1MRWxlbWVudDo6
QWNjZXNzb3JzIEhUTUxFbGVtZW50OjpiYXNlRm9udF9hY2Nlc3NvcnMgPSB7ICZIVE1MRWxlbWVu
dDo6YmFzZUZvbnRHZXR0ZXIsICZIVE1MRWxlbWVudDo6YmFzZUZvbnRTZXR0ZXIgfTsKK2NvbnN0
IEhUTUxFbGVtZW50OjpBY2Nlc3NvcnMgSFRNTEVsZW1lbnQ6OmZvbnRfYWNjZXNzb3JzID0geyAm
SFRNTEVsZW1lbnQ6OmZvbnRHZXR0ZXIsICZIVE1MRWxlbWVudDo6Zm9udFNldHRlciB9OworY29u
c3QgSFRNTEVsZW1lbnQ6OkFjY2Vzc29ycyBIVE1MRWxlbWVudDo6aHJfYWNjZXNzb3JzID0geyAm
SFRNTEVsZW1lbnQ6OmhyR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OmhyU2V0dGVyIH07Citjb25zdCBI
VE1MRWxlbWVudDo6QWNjZXNzb3JzIEhUTUxFbGVtZW50Ojptb2RfYWNjZXNzb3JzID0geyAmSFRN
TEVsZW1lbnQ6Om1vZEdldHRlciwgJkhUTUxFbGVtZW50Ojptb2RTZXR0ZXIgfTsKK2NvbnN0IEhU
TUxFbGVtZW50OjpBY2Nlc3NvcnMgSFRNTEVsZW1lbnQ6OmFfYWNjZXNzb3JzID0geyAmSFRNTEVs
ZW1lbnQ6OmFuY2hvckdldHRlciwgJkhUTUxFbGVtZW50OjphbmNob3JTZXR0ZXIgfTsKK2NvbnN0
IEhUTUxFbGVtZW50OjpBY2Nlc3NvcnMgSFRNTEVsZW1lbnQ6OmNhbnZhc19hY2Nlc3NvcnMgPSB7
ICZIVE1MRWxlbWVudDo6aW1hZ2VHZXR0ZXIsICZIVE1MRWxlbWVudDo6aW1hZ2VTZXR0ZXIgfTsK
K2NvbnN0IEhUTUxFbGVtZW50OjpBY2Nlc3NvcnMgSFRNTEVsZW1lbnQ6OmltZ19hY2Nlc3NvcnMg
PSB7ICZIVE1MRWxlbWVudDo6aW1hZ2VHZXR0ZXIsICZIVE1MRWxlbWVudDo6aW1hZ2VTZXR0ZXIg
fTsKK2NvbnN0IEhUTUxFbGVtZW50OjpBY2Nlc3NvcnMgSFRNTEVsZW1lbnQ6Om9iamVjdF9hY2Nl
c3NvcnMgPSB7ICZIVE1MRWxlbWVudDo6b2JqZWN0R2V0dGVyLCAmSFRNTEVsZW1lbnQ6Om9iamVj
dFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkFjY2Vzc29ycyBIVE1MRWxlbWVudDo6cGFy
YW1fYWNjZXNzb3JzID0geyAmSFRNTEVsZW1lbnQ6OnBhcmFtR2V0dGVyLCAmSFRNTEVsZW1lbnQ6
OnBhcmFtU2V0dGVyIH07Citjb25zdCBIVE1MRWxlbWVudDo6QWNjZXNzb3JzIEhUTUxFbGVtZW50
OjphcHBsZXRfYWNjZXNzb3JzID0geyAmSFRNTEVsZW1lbnQ6OmFwcGxldEdldHRlciwgJkhUTUxF
bGVtZW50OjphcHBsZXRTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpBY2Nlc3NvcnMgSFRN
TEVsZW1lbnQ6Om1hcF9hY2Nlc3NvcnMgPSB7ICZIVE1MRWxlbWVudDo6bWFwR2V0dGVyLCAmSFRN
TEVsZW1lbnQ6Om1hcFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkFjY2Vzc29ycyBIVE1M
RWxlbWVudDo6YXJlYV9hY2Nlc3NvcnMgPSB7ICZIVE1MRWxlbWVudDo6YXJlYUdldHRlciwgJkhU
TUxFbGVtZW50OjphcmVhU2V0dGVyIH07Citjb25zdCBIVE1MRWxlbWVudDo6QWNjZXNzb3JzIEhU
TUxFbGVtZW50OjpzY3JpcHRfYWNjZXNzb3JzID0geyAmSFRNTEVsZW1lbnQ6OnNjcmlwdEdldHRl
ciwgJkhUTUxFbGVtZW50OjpzY3JpcHRTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpBY2Nl
c3NvcnMgSFRNTEVsZW1lbnQ6OnRhYmxlX2FjY2Vzc29ycyA9IHsgJkhUTUxFbGVtZW50Ojp0YWJs
ZUdldHRlciwgJkhUTUxFbGVtZW50Ojp0YWJsZVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6
OkFjY2Vzc29ycyBIVE1MRWxlbWVudDo6Y2FwdGlvbl9hY2Nlc3NvcnMgPSB7ICZIVE1MRWxlbWVu
dDo6dGFibGVDYXB0aW9uR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OnRhYmxlQ2FwdGlvblNldHRlciB9
OworY29uc3QgSFRNTEVsZW1lbnQ6OkFjY2Vzc29ycyBIVE1MRWxlbWVudDo6Y29sX2FjY2Vzc29y
cyA9IHsgJkhUTUxFbGVtZW50Ojp0YWJsZUNvbEdldHRlciwgJkhUTUxFbGVtZW50Ojp0YWJsZUNv
bFNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkFjY2Vzc29ycyBIVE1MRWxlbWVudDo6dGFi
bGVzZWN0aW9uX2FjY2Vzc29ycyA9IHsgJkhUTUxFbGVtZW50Ojp0YWJsZVNlY3Rpb25HZXR0ZXIs
ICZIVE1MRWxlbWVudDo6dGFibGVTZWN0aW9uU2V0dGVyIH07Citjb25zdCBIVE1MRWxlbWVudDo6
QWNjZXNzb3JzIEhUTUxFbGVtZW50Ojp0cl9hY2Nlc3NvcnMgPSB7ICZIVE1MRWxlbWVudDo6dGFi
bGVSb3dHZXR0ZXIsICZIVE1MRWxlbWVudDo6dGFibGVSb3dTZXR0ZXIgfTsKK2NvbnN0IEhUTUxF
bGVtZW50OjpBY2Nlc3NvcnMgSFRNTEVsZW1lbnQ6OnRhYmxlY2VsbF9hY2Nlc3NvcnMgPSB7ICZI
VE1MRWxlbWVudDo6dGFibGVDZWxsR2V0dGVyLCAmSFRNTEVsZW1lbnQ6OnRhYmxlQ2VsbFNldHRl
ciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkFjY2Vzc29ycyBIVE1MRWxlbWVudDo6ZnJhbWVTZXRf
YWNjZXNzb3JzID0geyAmSFRNTEVsZW1lbnQ6OmZyYW1lU2V0R2V0dGVyLCAmSFRNTEVsZW1lbnQ6
OmZyYW1lU2V0U2V0dGVyIH07Citjb25zdCBIVE1MRWxlbWVudDo6QWNjZXNzb3JzIEhUTUxFbGVt
ZW50OjpmcmFtZV9hY2Nlc3NvcnMgPSB7ICZIVE1MRWxlbWVudDo6ZnJhbWVHZXR0ZXIsICZIVE1M
RWxlbWVudDo6ZnJhbWVTZXR0ZXIgfTsKK2NvbnN0IEhUTUxFbGVtZW50OjpBY2Nlc3NvcnMgSFRN
TEVsZW1lbnQ6OmlGcmFtZV9hY2Nlc3NvcnMgPSB7ICZIVE1MRWxlbWVudDo6aUZyYW1lR2V0dGVy
LCAmSFRNTEVsZW1lbnQ6OmlGcmFtZVNldHRlciB9OworY29uc3QgSFRNTEVsZW1lbnQ6OkFjY2Vz
c29ycyBIVE1MRWxlbWVudDo6bWFycXVlZV9hY2Nlc3NvcnMgPSB7ICZIVE1MRWxlbWVudDo6bWFy
cXVlZUdldHRlciwgJkhUTUxFbGVtZW50OjptYXJxdWVlU2V0dGVyIH07CisKK2NvbnN0IEhUTUxF
bGVtZW50OjpBY2Nlc3NvcnMqIEhUTUxFbGVtZW50OjpnZXRTZXRJbmZvKCkgY29uc3QKK3sKKyAg
ICAvLyBGSVhNRTogV2Ugd2FudCB0byB1c2UgSGFzaE1hcCBoZXJlLCBidXQgdGhlcmUgYXJlIGNv
bXBpbGVyIGlzc3VlcyB0byBkZWFsIHdpdGguCisgICAgc3RhdGljIFFQdHJEaWN0PGNvbnN0IEhU
TUxFbGVtZW50OjpBY2Nlc3NvcnM+IGdldFNldEluZm9EaWN0OworICAgIGlmIChnZXRTZXRJbmZv
RGljdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1l
czo6YSgpLCAmYV9hY2Nlc3NvcnMpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRN
TE5hbWVzOjphcHBsZXQoKSwgJmFwcGxldF9hY2Nlc3NvcnMpOworICAgICAgICBnZXRTZXRJbmZv
RGljdC5pbnNlcnQoSFRNTE5hbWVzOjphcmVhKCksICZhcmVhX2FjY2Vzc29ycyk7CisgICAgICAg
IGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmJhc2UoKSwgJmJhc2VfYWNjZXNzb3Jz
KTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6YmFzZWZvbnQoKSwg
JmJhc2VGb250X2FjY2Vzc29ycyk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1M
TmFtZXM6OmJsb2NrcXVvdGUoKSwgJmJsb2NrUXVvdGVfYWNjZXNzb3JzKTsgCisgICAgICAgIGdl
dFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmJvZHkoKSwgJmJvZHlfYWNjZXNzb3JzKTsK
KyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6YnIoKSwgJmJyX2FjY2Vz
c29ycyk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmJ1dHRvbigp
LCAmYnV0dG9uX2FjY2Vzc29ycyk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1M
TmFtZXM6OmNhbnZhcygpLCAmY2FudmFzX2FjY2Vzc29ycyk7CisgICAgICAgIGdldFNldEluZm9E
aWN0Lmluc2VydChIVE1MTmFtZXM6OmNhcHRpb24oKSwgJmNhcHRpb25fYWNjZXNzb3JzKTsKKyAg
ICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6Y29sKCksICZjb2xfYWNjZXNz
b3JzKTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6Y29sZ3JvdXAo
KSwgJmNvbF9hY2Nlc3NvcnMpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5h
bWVzOjpkZWwoKSwgJm1vZF9hY2Nlc3NvcnMpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNl
cnQoSFRNTE5hbWVzOjpkaXIoKSwgJmRpcl9hY2Nlc3NvcnMpOworICAgICAgICBnZXRTZXRJbmZv
RGljdC5pbnNlcnQoSFRNTE5hbWVzOjpkaXYoKSwgJmRpdl9hY2Nlc3NvcnMpOworICAgICAgICBn
ZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpkbCgpLCAmZGxfYWNjZXNzb3JzKTsKKyAg
ICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6ZmllbGRzZXQoKSwgJmZpZWxk
U2V0X2FjY2Vzc29ycyk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6
OmZvbnQoKSwgJmZvbnRfYWNjZXNzb3JzKTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0
KEhUTUxOYW1lczo6Zm9ybSgpLCAmZm9ybV9hY2Nlc3NvcnMpOworICAgICAgICBnZXRTZXRJbmZv
RGljdC5pbnNlcnQoSFRNTE5hbWVzOjpmcmFtZSgpLCAmZnJhbWVfYWNjZXNzb3JzKTsKKyAgICAg
ICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6ZnJhbWVzZXQoKSwgJmZyYW1lU2V0
X2FjY2Vzc29ycyk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Omgx
KCksICZoZWFkaW5nX2FjY2Vzc29ycyk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChI
VE1MTmFtZXM6OmgyKCksICZoZWFkaW5nX2FjY2Vzc29ycyk7CisgICAgICAgIGdldFNldEluZm9E
aWN0Lmluc2VydChIVE1MTmFtZXM6OmgzKCksICZoZWFkaW5nX2FjY2Vzc29ycyk7CisgICAgICAg
IGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Omg0KCksICZoZWFkaW5nX2FjY2Vzc29y
cyk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6Omg1KCksICZoZWFk
aW5nX2FjY2Vzc29ycyk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6
Omg2KCksICZoZWFkaW5nX2FjY2Vzc29ycyk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2Vy
dChIVE1MTmFtZXM6OmhlYWQoKSwgJmhlYWRfYWNjZXNzb3JzKTsKKyAgICAgICAgZ2V0U2V0SW5m
b0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6aHIoKSwgJmhyX2FjY2Vzc29ycyk7IAorICAgICAgICBn
ZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpodG1sKCksICZodG1sX2FjY2Vzc29ycyk7
CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmlmcmFtZSgpLCAmaUZy
YW1lX2FjY2Vzc29ycyk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6
OmltZygpLCAmaW1nX2FjY2Vzc29ycyk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChI
VE1MTmFtZXM6OmlucHV0KCksICZpbnB1dF9hY2Nlc3NvcnMpOworICAgICAgICBnZXRTZXRJbmZv
RGljdC5pbnNlcnQoSFRNTE5hbWVzOjppbnMoKSwgJm1vZF9hY2Nlc3NvcnMpOworICAgICAgICBn
ZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjppc2luZGV4KCksICZpc0luZGV4X2FjY2Vz
c29ycyk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OmxhYmVsKCks
ICZsYWJlbF9hY2Nlc3NvcnMpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5h
bWVzOjpsZWdlbmQoKSwgJmxlZ2VuZF9hY2Nlc3NvcnMpOworICAgICAgICBnZXRTZXRJbmZvRGlj
dC5pbnNlcnQoSFRNTE5hbWVzOjpsaSgpLCAmbGlfYWNjZXNzb3JzKTsKKyAgICAgICAgZ2V0U2V0
SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6bGluaygpLCAmbGlua19hY2Nlc3NvcnMpOworICAg
ICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjptYXAoKSwgJm1hcF9hY2Nlc3Nv
cnMpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjptYXJxdWVlKCks
ICZtYXJxdWVlX2FjY2Vzc29ycyk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1M
TmFtZXM6Om1lbnUoKSwgJm1lbnVfYWNjZXNzb3JzKTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3Qu
aW5zZXJ0KEhUTUxOYW1lczo6bWV0YSgpLCAmbWV0YV9hY2Nlc3NvcnMpOworICAgICAgICBnZXRT
ZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpvYmplY3QoKSwgJm9iamVjdF9hY2Nlc3NvcnMp
OworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjpvbCgpLCAmb2xfYWNj
ZXNzb3JzKTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6b3B0aW9u
KCksICZvcHRpb25fYWNjZXNzb3JzKTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhU
TUxOYW1lczo6b3B0Z3JvdXAoKSwgJm9wdEdyb3VwX2FjY2Vzc29ycyk7CisgICAgICAgIGdldFNl
dEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OnAoKSwgJnBfYWNjZXNzb3JzKTsKKyAgICAgICAg
Z2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6cGFyYW0oKSwgJnBhcmFtX2FjY2Vzc29y
cyk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OnByZSgpLCAmcHJl
X2FjY2Vzc29ycyk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OnEo
KSwgJnFfYWNjZXNzb3JzKTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1l
czo6c2NyaXB0KCksICZzY3JpcHRfYWNjZXNzb3JzKTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3Qu
aW5zZXJ0KEhUTUxOYW1lczo6c2VsZWN0KCksICZzZWxlY3RfYWNjZXNzb3JzKTsKKyAgICAgICAg
Z2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6c3R5bGUoKSwgJnN0eWxlX2FjY2Vzc29y
cyk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OnRhYmxlKCksICZ0
YWJsZV9hY2Nlc3NvcnMpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVz
Ojp0Ym9keSgpLCAmdGFibGVzZWN0aW9uX2FjY2Vzc29ycyk7CisgICAgICAgIGdldFNldEluZm9E
aWN0Lmluc2VydChIVE1MTmFtZXM6OnRkKCksICZ0YWJsZWNlbGxfYWNjZXNzb3JzKTsKKyAgICAg
ICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0KEhUTUxOYW1lczo6dGV4dGFyZWEoKSwgJnRleHRBcmVh
X2FjY2Vzc29ycyk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OnRo
KCksICZ0YWJsZWNlbGxfYWNjZXNzb3JzKTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5zZXJ0
KEhUTUxOYW1lczo6dGhlYWQoKSwgJnRhYmxlc2VjdGlvbl9hY2Nlc3NvcnMpOworICAgICAgICBn
ZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRNTE5hbWVzOjp0Zm9vdCgpLCAmdGFibGVzZWN0aW9uX2Fj
Y2Vzc29ycyk7CisgICAgICAgIGdldFNldEluZm9EaWN0Lmluc2VydChIVE1MTmFtZXM6OnRpdGxl
KCksICZ0aXRsZV9hY2Nlc3NvcnMpOworICAgICAgICBnZXRTZXRJbmZvRGljdC5pbnNlcnQoSFRN
TE5hbWVzOjp0cigpLCAmdHJfYWNjZXNzb3JzKTsKKyAgICAgICAgZ2V0U2V0SW5mb0RpY3QuaW5z
ZXJ0KEhUTUxOYW1lczo6dWwoKSwgJnVsX2FjY2Vzc29ycyk7CisgICAgfQorICAgIAorICAgIEhU
TUxFbGVtZW50SW1wbCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCo+KGlt
cGwoKSk7CisgICAgY29uc3QgSFRNTEVsZW1lbnQ6OkFjY2Vzc29ycyogcmVzdWx0ID0gZ2V0U2V0
SW5mb0RpY3QuZmluZChlbGVtZW50LT5sb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpKTsKKyAg
ICBpZiAocmVzdWx0KQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiAwOworfQor
CiAvKgogQGJlZ2luIEhUTUxFbGVtZW50VGFibGUgMTQKICAgaWQJCUtKUzo6SFRNTEVsZW1lbnQ6
OkVsZW1lbnRJZAlEb250RGVsZXRlCkBAIC0xMTg0LDcgKzEyNjgsNyBAQCBjb25zdCBDbGFzc0lu
Zm8qIEtKUzo6SFRNTEVsZW1lbnQ6OmNsYXNzCiBAZW5kCiAKIEBiZWdpbiBIVE1MQ2FudmFzRWxl
bWVudFRhYmxlIDEKLSAgZ2V0Q29udGV4dCAgICAgIEtKUzo6SFRNTEVsZW1lbnQ6OkdldENvbnRl
eHQgICAgICAgICAgICAgICAgICBEb250RGVsZXRlfEZ1bmN0aW9uIDAKKyAgZ2V0Q29udGV4dCAg
ICAgIEtKUzo6SFRNTEVsZW1lbnQ6OkdldENvbnRleHQgICAgICAgICAgICAgICAgICBEb250RGVs
ZXRlfEZ1bmN0aW9uIDEKIEBlbmQKICovCiAKQEAgLTExOTUsMzUgKzEyNzksMzIgQEAgSFRNTEVs
ZW1lbnQ6OkhUTUxFbGVtZW50KEV4ZWNTdGF0ZSAqZXhlYwogCiBWYWx1ZSBLSlM6OkhUTUxFbGVt
ZW50Ojp0cnlHZXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5h
bWUpIGNvbnN0CiB7Ci0gIEhUTUxFbGVtZW50SW1wbCAmZWxlbWVudCA9ICpzdGF0aWNfY2FzdDxI
VE1MRWxlbWVudEltcGwgKj4oaW1wbCgpKTsKKyAgICBIVE1MRWxlbWVudEltcGwgJmVsZW1lbnQg
PSAqc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KGltcGwoKSk7CiAjaWZkZWYgS0pTX1ZF
UkJPU0UKLSAga2REZWJ1Zyg2MDcwKSA8PCAiS0pTOjpIVE1MRWxlbWVudDo6dHJ5R2V0ICIgPDwg
cHJvcGVydHlOYW1lLnFzdHJpbmcoKSA8PCAiIHRoaXNUYWc9IiA8PCBlbGVtZW50LnRhZ05hbWUo
KS5zdHJpbmcoKSA8PCBlbmRsOworICAgIGtkRGVidWcoNjA3MCkgPDwgIktKUzo6SFRNTEVsZW1l
bnQ6OnRyeUdldCAiIDw8IHByb3BlcnR5TmFtZS5xc3RyaW5nKCkgPDwgIiB0aGlzVGFnPSIgPDwg
ZWxlbWVudC50YWdOYW1lKCkuc3RyaW5nKCkgPDwgZW5kbDsKICNlbmRpZgotICAvLyBGaXJzdCBs
b29rIGF0IGR5bmFtaWMgcHJvcGVydGllcwotICBzd2l0Y2ggKGVsZW1lbnQuaWQoKSkgewotICAg
IGNhc2UgSURfRk9STTogewotICAgICAgSFRNTEZvcm1FbGVtZW50SW1wbCAmZm9ybSA9IHN0YXRp
Y19jYXN0PEhUTUxGb3JtRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICAvLyBDaGVjayBp
ZiB3ZSdyZSByZXRyaWV2aW5nIGFuIGVsZW1lbnQgKGJ5IGluZGV4IG9yIGJ5IG5hbWUpCi0gICAg
ICBib29sIG9rOwotICAgICAgdWludCB1ID0gcHJvcGVydHlOYW1lLnRvVUxvbmcoJm9rKTsKLSAg
ICAgIGlmIChvaykKLSAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYywgZm9ybS5lbGVtZW50
cygpLT5pdGVtKHUpKTsKLSAgICAgIFZhbHVlSW1wICpuYW1lZEl0ZW1zID0gSFRNTENvbGxlY3Rp
b24oZXhlYywgZm9ybS5lbGVtZW50cygpLmdldCgpKS5nZXROYW1lZEl0ZW1zKGV4ZWMsIHByb3Bl
cnR5TmFtZSk7Ci0gICAgICBpZiAoIW5hbWVkSXRlbXMtPmlzVW5kZWZpbmVkKCkpCi0gICAgICAg
IHJldHVybiBuYW1lZEl0ZW1zOwotICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgSURfU0VM
RUNUOiB7Ci0gICAgICBIVE1MU2VsZWN0RWxlbWVudEltcGwgJnNlbGVjdCA9IHN0YXRpY19jYXN0
PEhUTUxTZWxlY3RFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIGJvb2wgb2s7Ci0gICAg
ICB1aW50IHUgPSBwcm9wZXJ0eU5hbWUudG9VTG9uZygmb2spOwotICAgICAgaWYgKG9rKQotICAg
ICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLCBzZWxlY3Qub3B0aW9uc0hUTUxDb2xsZWN0aW9u
KCktPml0ZW0odSkpOyAvLyBub3Qgc3BlY2lmaWVkIGJ5IERPTSg/KSBidXQgc3VwcG9ydGVkIGlu
IG5ldHNjYXBlL0lFCisgICAgLy8gRmlyc3QgbG9vayBhdCBkeW5hbWljIHByb3BlcnRpZXMKKyAg
ICBpZiAoZWxlbWVudC5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpmb3JtKCkpKSB7CisgICAgICAg
IEhUTUxGb3JtRWxlbWVudEltcGwgJmZvcm0gPSBzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnRJ
bXBsICY+KGVsZW1lbnQpOworICAgICAgICAvLyBDaGVjayBpZiB3ZSdyZSByZXRyaWV2aW5nIGFu
IGVsZW1lbnQgKGJ5IGluZGV4IG9yIGJ5IG5hbWUpCisgICAgICAgIGJvb2wgb2s7CisgICAgICAg
IHVpbnQgdSA9IHByb3BlcnR5TmFtZS50b1VMb25nKCZvayk7CisgICAgICAgIGlmIChvaykKKyAg
ICAgICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsIGZvcm0uZWxlbWVudHMoKS0+aXRlbSh1
KSk7CisgICAgICAgIFZhbHVlSW1wICpuYW1lZEl0ZW1zID0gSFRNTENvbGxlY3Rpb24oZXhlYywg
Zm9ybS5lbGVtZW50cygpLmdldCgpKS5nZXROYW1lZEl0ZW1zKGV4ZWMsIHByb3BlcnR5TmFtZSk7
CisgICAgICAgIGlmICghbmFtZWRJdGVtcy0+aXNVbmRlZmluZWQoKSkKKyAgICAgICAgICAgIHJl
dHVybiBuYW1lZEl0ZW1zOworICAgIH0KKyAgICBlbHNlIGlmIChlbGVtZW50Lmhhc0xvY2FsTmFt
ZShIVE1MTmFtZXM6OnNlbGVjdCgpKSkgeworICAgICAgICBIVE1MU2VsZWN0RWxlbWVudEltcGwg
JnNlbGVjdCA9IHN0YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50SW1wbCAmPihlbGVtZW50KTsK
KyAgICAgICAgYm9vbCBvazsKKyAgICAgICAgdWludCB1ID0gcHJvcGVydHlOYW1lLnRvVUxvbmco
Jm9rKTsKKyAgICAgICAgaWYgKG9rKQorICAgICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhl
Yywgc2VsZWN0Lm9wdGlvbnNIVE1MQ29sbGVjdGlvbigpLT5pdGVtKHUpKTsgLy8gbm90IHNwZWNp
ZmllZCBieSBET00oPykgYnV0IHN1cHBvcnRlZCBpbiBuZXRzY2FwZS9JRQogICAgIH0KLSAgICAg
IGJyZWFrOwotICAgIGNhc2UgSURfRlJBTUVTRVQ6IHsKKyAgICBlbHNlIGlmIChlbGVtZW50Lmhh
c0xvY2FsTmFtZShIVE1MTmFtZXM6OmZyYW1lc2V0KCkpKSB7CiAgICAgICAgIE5vZGVJbXBsICpm
cmFtZSA9IGVsZW1lbnQuY2hpbGRyZW4oKS0+bmFtZWRJdGVtKHByb3BlcnR5TmFtZS5zdHJpbmco
KSk7Ci0gICAgICAgIGlmIChmcmFtZSAmJiBmcmFtZS0+aWQoKSA9PSBJRF9GUkFNRSkgeworICAg
ICAgICBpZiAoZnJhbWUgJiYgZnJhbWUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpmcmFtZSgpKSkg
ewogICAgICAgICAgICAgRG9jdW1lbnRJbXBsKiBkb2MgPSBzdGF0aWNfY2FzdDxIVE1MRnJhbWVF
bGVtZW50SW1wbCAqPihmcmFtZSktPmNvbnRlbnREb2N1bWVudCgpOwogICAgICAgICAgICAgaWYg
KGRvYykgewogICAgICAgICAgICAgICAgIEtIVE1MUGFydCogcGFydCA9IGRvYy0+cGFydCgpOwpA
QCAtMTIzNiw3MyArMTMxNyw1NyBAQCBWYWx1ZSBLSlM6OkhUTUxFbGVtZW50Ojp0cnlHZXQoRXhl
Y1N0YXRlCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgSURfRlJBTUU6Ci0gICAgY2FzZSBJRF9JRlJBTUU6IHsKKyAgICBlbHNlIGlmIChl
bGVtZW50Lmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmZyYW1lKCkpIHx8IGVsZW1lbnQuaGFzTG9j
YWxOYW1lKEhUTUxOYW1lczo6aWZyYW1lKCkpKSB7CiAgICAgICAgIERvY3VtZW50SW1wbCogZG9j
ID0gc3RhdGljX2Nhc3Q8SFRNTEZyYW1lRWxlbWVudEltcGwgJj4oZWxlbWVudCkuY29udGVudERv
Y3VtZW50KCk7Ci0gICAgICAgIGlmICggZG9jICkgeworICAgICAgICBpZiAoZG9jKSB7CiAgICAg
ICAgICAgICBLSFRNTFBhcnQqIHBhcnQgPSBkb2MtPnBhcnQoKTsKLSAgICAgICAgICAgIGlmICgg
cGFydCApIHsKKyAgICAgICAgICAgIGlmIChwYXJ0KSB7CiAgICAgICAgICAgICAgIFdpbmRvdyAq
d2luZG93ID0gV2luZG93OjpyZXRyaWV2ZVdpbmRvdyhwYXJ0KTsKIAkgICAgICBpZiAod2luZG93
ICYmIHdpbmRvdy0+aGFzUHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lKSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gd2luZG93LT5nZXQoZXhlYywgcHJvcGVydHlOYW1lKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgfQogICAgIH0KLSAgICAgIGJyZWFrOwogI2lmIEFQUExFX0NIQU5HRVMKLSAg
ICBjYXNlIElEX0VNQkVEOgotICAgIGNhc2UgSURfT0JKRUNUOgotICAgIGNhc2UgSURfQVBQTEVU
OiB7Ci0JaWYgKHByb3BlcnR5TmFtZSA9PSAiX19hcHBsZV9ydW50aW1lX29iamVjdCIpIHsKKyAg
ICBlbHNlIGlmIChlbGVtZW50Lmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmVtYmVkKCkpIHx8IGVs
ZW1lbnQuaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b2JqZWN0KCkpIHx8CisgICAgICAgICAgICAg
ZWxlbWVudC5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjphcHBsZXQoKSkpIHsKKwlpZiAocHJvcGVy
dHlOYW1lID09ICJfX2FwcGxlX3J1bnRpbWVfb2JqZWN0IikKIAkgICAgcmV0dXJuIGdldFJ1bnRp
bWVPYmplY3QoZXhlYywmZWxlbWVudCk7Ci0JfQotCiAJVmFsdWUgcnVudGltZU9iamVjdCA9IGdl
dFJ1bnRpbWVPYmplY3QoZXhlYywmZWxlbWVudCk7CiAJaWYgKCFydW50aW1lT2JqZWN0LmlzTnVs
bCgpKSB7CiAJICAgIE9iamVjdEltcCAqaW1wID0gc3RhdGljX2Nhc3Q8T2JqZWN0SW1wICo+KHJ1
bnRpbWVPYmplY3QuaW1wKCkpOwotCSAgICBpZiAoaW1wLT5oYXNQcm9wZXJ0eShleGVjLCBwcm9w
ZXJ0eU5hbWUpKSB7CisJICAgIGlmIChpbXAtPmhhc1Byb3BlcnR5KGV4ZWMsIHByb3BlcnR5TmFt
ZSkpCiAJCXJldHVybiBpbXAtPmdldCAoZXhlYywgcHJvcGVydHlOYW1lKTsKLQkgICAgfQogCX0K
ICAgICB9Ci0gICAgICBicmVhazsKICNlbmRpZgotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KIAotICBjb25zdCBIYXNoVGFibGUqIHRhYmxlID0gY2xhc3NJbmZvKCktPnByb3BI
YXNoVGFibGU7IC8vIGdldCB0aGUgcmlnaHQgaGFzaHRhYmxlCi0gIGNvbnN0IEhhc2hFbnRyeSog
ZW50cnkgPSBMb29rdXA6OmZpbmRFbnRyeSh0YWJsZSwgcHJvcGVydHlOYW1lKTsKLSAgaWYgKGVu
dHJ5KSB7Ci0gICAgaWYgKGVudHJ5LT5hdHRyICYgRnVuY3Rpb24pCi0gICAgICByZXR1cm4gbG9v
a3VwT3JDcmVhdGVGdW5jdGlvbjxLSlM6OkhUTUxFbGVtZW50RnVuY3Rpb24+KGV4ZWMsIHByb3Bl
cnR5TmFtZSwgdGhpcywgZW50cnktPnZhbHVlLCBlbnRyeS0+cGFyYW1zLCBlbnRyeS0+YXR0cik7
Ci0gICAgcmV0dXJuIGdldFZhbHVlUHJvcGVydHkoZXhlYywgZW50cnktPnZhbHVlKTsKLSAgfQor
ICAgIGNvbnN0IEhhc2hUYWJsZSogdGFibGUgPSBjbGFzc0luZm8oKS0+cHJvcEhhc2hUYWJsZTsg
Ly8gZ2V0IHRoZSByaWdodCBoYXNodGFibGUKKyAgICBjb25zdCBIYXNoRW50cnkqIGVudHJ5ID0g
TG9va3VwOjpmaW5kRW50cnkodGFibGUsIHByb3BlcnR5TmFtZSk7CisgICAgaWYgKGVudHJ5KSB7
CisgICAgICAgIGlmIChlbnRyeS0+YXR0ciAmIEZ1bmN0aW9uKQorICAgICAgICAgICAgcmV0dXJu
IGxvb2t1cE9yQ3JlYXRlRnVuY3Rpb248S0pTOjpIVE1MRWxlbWVudEZ1bmN0aW9uPihleGVjLCBw
cm9wZXJ0eU5hbWUsIHRoaXMsIGVudHJ5LT52YWx1ZSwgZW50cnktPnBhcmFtcywgZW50cnktPmF0
dHIpOworICAgICAgICByZXR1cm4gZ2V0VmFsdWVQcm9wZXJ0eShleGVjLCBlbnRyeS0+dmFsdWUp
OworICAgIH0KIAotICAvLyBCYXNlIEhUTUxFbGVtZW50IHN0dWZmIG9yIHBhcmVudCBjbGFzcyBm
b3J3YXJkLCBhcyB1c3VhbAotICByZXR1cm4gRE9NT2JqZWN0TG9va3VwR2V0PEtKUzo6SFRNTEVs
ZW1lbnRGdW5jdGlvbiwgS0pTOjpIVE1MRWxlbWVudCwgRE9NRWxlbWVudD4oZXhlYywgcHJvcGVy
dHlOYW1lLCAmSFRNTEVsZW1lbnRUYWJsZSwgdGhpcyk7CisgICAgLy8gQmFzZSBIVE1MRWxlbWVu
dCBzdHVmZiBvciBwYXJlbnQgY2xhc3MgZm9yd2FyZCwgYXMgdXN1YWwKKyAgICByZXR1cm4gRE9N
T2JqZWN0TG9va3VwR2V0PEtKUzo6SFRNTEVsZW1lbnRGdW5jdGlvbiwgS0pTOjpIVE1MRWxlbWVu
dCwgRE9NRWxlbWVudD4oZXhlYywgcHJvcGVydHlOYW1lLCAmSFRNTEVsZW1lbnRUYWJsZSwgdGhp
cyk7CiB9CiAKIGJvb2wgS0pTOjpIVE1MRWxlbWVudDo6aW1wbGVtZW50c0NhbGwoKSBjb25zdAog
ewogICAgIEhUTUxFbGVtZW50SW1wbCAqZWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50
SW1wbCAqPihpbXBsKCkpOwotICAgIHN3aXRjaCAoZWxlbWVudC0+aWQoKSkgewotCWNhc2UgSURf
RU1CRUQ6Ci0JY2FzZSBJRF9PQkpFQ1Q6Ci0JY2FzZSBJRF9BUFBMRVQ6IHsKLQkJRG9jdW1lbnRJ
bXBsKiBkb2MgPSBlbGVtZW50LT5nZXREb2N1bWVudCgpOwotCQlLSlNQcm94eSAqcHJveHkgPSBL
SlNQcm94eTo6cHJveHkoZG9jLT5wYXJ0KCkpOwotCQlFeGVjU3RhdGUgKmV4ZWMgPSBwcm94eS0+
aW50ZXJwcmV0ZXIoKS0+Z2xvYmFsRXhlYygpOwotCQlWYWx1ZSBydW50aW1lT2JqZWN0ID0gZ2V0
UnVudGltZU9iamVjdChleGVjLGVsZW1lbnQpOwotCQlpZiAoIXJ1bnRpbWVPYmplY3QuaXNOdWxs
KCkpIHsKLQkJICAgIE9iamVjdEltcCAqaW1wID0gc3RhdGljX2Nhc3Q8T2JqZWN0SW1wICo+KHJ1
bnRpbWVPYmplY3QuaW1wKCkpOwotCQkgICAgcmV0dXJuIGltcC0+aW1wbGVtZW50c0NhbGwgKCk7
Ci0JCX0KLQkgICAgfQotCSAgICBicmVhazsKLQlkZWZhdWx0OgotCSAgICBicmVhazsKKyAgICBp
ZiAoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmVtYmVkKCkpIHx8CisgICAgICAgIGVs
ZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvYmplY3QoKSkgfHwKKyAgICAgICAgZWxlbWVu
dC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmFwcGxldCgpKSkgeworICAgICAgICBEb2N1bWVudElt
cGwqIGRvYyA9IGVsZW1lbnQtPmdldERvY3VtZW50KCk7CisgICAgICAgIEtKU1Byb3h5ICpwcm94
eSA9IEtKU1Byb3h5Ojpwcm94eShkb2MtPnBhcnQoKSk7CisgICAgICAgIEV4ZWNTdGF0ZSAqZXhl
YyA9IHByb3h5LT5pbnRlcnByZXRlcigpLT5nbG9iYWxFeGVjKCk7CisgICAgICAgIFZhbHVlIHJ1
bnRpbWVPYmplY3QgPSBnZXRSdW50aW1lT2JqZWN0KGV4ZWMsZWxlbWVudCk7CisgICAgICAgIGlm
ICghcnVudGltZU9iamVjdC5pc051bGwoKSkgeworICAgICAgICAgICAgT2JqZWN0SW1wICppbXAg
PSBzdGF0aWNfY2FzdDxPYmplY3RJbXAgKj4ocnVudGltZU9iamVjdC5pbXAoKSk7CisgICAgICAg
ICAgICByZXR1cm4gaW1wLT5pbXBsZW1lbnRzQ2FsbCAoKTsKKyAgICAgICAgfQogICAgIH0KICAg
ICByZXR1cm4gZmFsc2U7CiB9CkBAIC0xMzEwLDgyNyArMTM3NSw5MTYgQEAgYm9vbCBLSlM6OkhU
TUxFbGVtZW50OjppbXBsZW1lbnRzQ2FsbCgpIAogVmFsdWUgS0pTOjpIVE1MRWxlbWVudDo6Y2Fs
bChFeGVjU3RhdGUgKmV4ZWMsIE9iamVjdCAmdGhpc09iaiwgY29uc3QgTGlzdCZhcmdzKQogewog
ICAgIEhUTUxFbGVtZW50SW1wbCAqZWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1w
bCAqPihpbXBsKCkpOwotICAgIHN3aXRjaCAoZWxlbWVudC0+aWQoKSkgewotCWNhc2UgSURfRU1C
RUQ6Ci0JY2FzZSBJRF9PQkpFQ1Q6Ci0JY2FzZSBJRF9BUFBMRVQ6IHsKLQkJVmFsdWUgcnVudGlt
ZU9iamVjdCA9IGdldFJ1bnRpbWVPYmplY3QoZXhlYyxlbGVtZW50KTsKLQkJaWYgKCFydW50aW1l
T2JqZWN0LmlzTnVsbCgpKSB7Ci0JCSAgICBPYmplY3RJbXAgKmltcCA9IHN0YXRpY19jYXN0PE9i
amVjdEltcCAqPihydW50aW1lT2JqZWN0LmltcCgpKTsKLQkJICAgIHJldHVybiBpbXAtPmNhbGwg
KGV4ZWMsIHRoaXNPYmosIGFyZ3MpOwotCQl9Ci0JICAgIH0KLQkgICAgYnJlYWs7Ci0JZGVmYXVs
dDoKLQkgICAgYnJlYWs7CisgICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpl
bWJlZCgpKSB8fAorICAgICAgICBlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b2JqZWN0
KCkpIHx8CisgICAgICAgIGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjphcHBsZXQoKSkp
IHsKKyAgICAgICAgVmFsdWUgcnVudGltZU9iamVjdCA9IGdldFJ1bnRpbWVPYmplY3QoZXhlYyxl
bGVtZW50KTsKKyAgICAgICAgaWYgKCFydW50aW1lT2JqZWN0LmlzTnVsbCgpKSB7CisgICAgICAg
ICAgICBPYmplY3RJbXAgKmltcCA9IHN0YXRpY19jYXN0PE9iamVjdEltcCAqPihydW50aW1lT2Jq
ZWN0LmltcCgpKTsKKyAgICAgICAgICAgIHJldHVybiBpbXAtPmNhbGwgKGV4ZWMsIHRoaXNPYmos
IGFyZ3MpOworICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAot
c3RhdGljIFZhbHVlIGdldElucHV0U2VsZWN0aW9uU3RhcnQoSFRNTElucHV0RWxlbWVudEltcGwg
JmlucHV0KQorVmFsdWUgSFRNTEVsZW1lbnQ6Omh0bWxHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBp
bnQgdG9rZW4pIGNvbnN0CiB7Ci0gIGlmIChpbnB1dC5jYW5IYXZlU2VsZWN0aW9uKCkpIHsKLSAg
ICByZXR1cm4gTnVtYmVyKGlucHV0LnNlbGVjdGlvblN0YXJ0KCkpOwotICB9Ci0gIHJldHVybiBV
bmRlZmluZWQoKTsKKyAgICBIVE1MSHRtbEVsZW1lbnRJbXBsJiBodG1sID0gKnN0YXRpY19jYXN0
PEhUTUxIdG1sRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIGlmICh0b2tlbiA9PSBIdG1sVmVy
c2lvbikKKyAgICAgICAgcmV0dXJuIFN0cmluZyhodG1sLnZlcnNpb24oKSk7CisgICAgcmV0dXJu
IFVuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgVmFsdWUgZ2V0SW5wdXRTZWxlY3Rpb25FbmQoSFRN
TElucHV0RWxlbWVudEltcGwgJmlucHV0KQorVmFsdWUgSFRNTEVsZW1lbnQ6OmhlYWRHZXR0ZXIo
RXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7Ci0gIGlmIChpbnB1dC5jYW5IYXZl
U2VsZWN0aW9uKCkpIHsKLSAgICByZXR1cm4gTnVtYmVyKGlucHV0LnNlbGVjdGlvbkVuZCgpKTsK
LSAgfQotICByZXR1cm4gVW5kZWZpbmVkKCk7CisgICAgSFRNTEhlYWRFbGVtZW50SW1wbCAmaGVh
ZCA9ICpzdGF0aWNfY2FzdDxIVE1MSGVhZEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBpZiAo
dG9rZW4gPT0gSGVhZFByb2ZpbGUpCisgICAgICAgIHJldHVybiBTdHJpbmcoaGVhZC5wcm9maWxl
KCkpOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotVmFsdWUgS0pTOjpIVE1MRWxlbWVu
dDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKK1Zh
bHVlIEhUTUxFbGVtZW50OjpsaW5rR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBj
b25zdAogewotICBIVE1MRWxlbWVudEltcGwgJmVsZW1lbnQgPSAqc3RhdGljX2Nhc3Q8SFRNTEVs
ZW1lbnRJbXBsICo+KGltcGwoKSk7Ci0gIHN3aXRjaCAoZWxlbWVudC5pZCgpKSB7Ci0gIGNhc2Ug
SURfSFRNTDogewotICAgIEhUTUxIdG1sRWxlbWVudEltcGwgJmh0bWwgPSBzdGF0aWNfY2FzdDxI
VE1MSHRtbEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgIGlmICAgICAgKHRva2VuID09IEh0
bWxWZXJzaW9uKSAgICAgICAgIHJldHVybiBTdHJpbmcoaHRtbC52ZXJzaW9uKCkpOwotICB9Ci0g
IGJyZWFrOwotICBjYXNlIElEX0hFQUQ6IHsKLSAgICBIVE1MSGVhZEVsZW1lbnRJbXBsICZoZWFk
ID0gc3RhdGljX2Nhc3Q8SFRNTEhlYWRFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICBpZiAg
ICAgICh0b2tlbiA9PSBIZWFkUHJvZmlsZSkgICAgICAgICByZXR1cm4gU3RyaW5nKGhlYWQucHJv
ZmlsZSgpKTsKLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9MSU5LOiB7Ci0gICAgSFRNTExpbmtF
bGVtZW50SW1wbCAmbGluayA9IHN0YXRpY19jYXN0PEhUTUxMaW5rRWxlbWVudEltcGwgJj4oZWxl
bWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgTGlua0Rpc2FibGVkOiAgICAg
ICAgcmV0dXJuIEJvb2xlYW4obGluay5kaXNhYmxlZCgpKTsKLSAgICBjYXNlIExpbmtDaGFyc2V0
OiAgICAgICAgIHJldHVybiBTdHJpbmcobGluay5jaGFyc2V0KCkpOwotICAgIGNhc2UgTGlua0hy
ZWY6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhsaW5rLmhyZWYoKSk7Ci0gICAgY2FzZSBMaW5r
SHJlZkxhbmc6ICAgICAgICByZXR1cm4gU3RyaW5nKGxpbmsuaHJlZmxhbmcoKSk7Ci0gICAgY2Fz
ZSBMaW5rTWVkaWE6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGxpbmsubWVkaWEoKSk7Ci0gICAg
Y2FzZSBMaW5rUmVsOiAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGxpbmsucmVsKCkpOwotICAg
IGNhc2UgTGlua1JldjogICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhsaW5rLnJldigpKTsKLSAg
ICBjYXNlIExpbmtUYXJnZXQ6ICAgICAgICAgIHJldHVybiBTdHJpbmcobGluay50YXJnZXQoKSk7
Ci0gICAgY2FzZSBMaW5rVHlwZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGxpbmsudHlwZSgp
KTsKLSAgICBjYXNlIExpbmtTaGVldDogICAgICAgICAgIHJldHVybiBnZXRET01TdHlsZVNoZWV0
KGV4ZWMsIGxpbmsuc2hlZXQoKSk7Ci0gICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX1RJ
VExFOiB7Ci0gICAgSFRNTFRpdGxlRWxlbWVudEltcGwgJnRpdGxlID0gc3RhdGljX2Nhc3Q8SFRN
TFRpdGxlRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAg
IGNhc2UgVGl0bGVUZXh0OiAgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0aXRsZS50ZXh0
KCkpOwotICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9NRVRBOiB7Ci0gICAgSFRNTE1l
dGFFbGVtZW50SW1wbCAmbWV0YSA9IHN0YXRpY19jYXN0PEhUTUxNZXRhRWxlbWVudEltcGwgJj4o
ZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgTWV0YUNvbnRlbnQ6ICAg
ICAgICAgcmV0dXJuIFN0cmluZyhtZXRhLmNvbnRlbnQoKSk7Ci0gICAgY2FzZSBNZXRhSHR0cEVx
dWl2OiAgICAgICByZXR1cm4gU3RyaW5nKG1ldGEuaHR0cEVxdWl2KCkpOwotICAgIGNhc2UgTWV0
YU5hbWU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhtZXRhLm5hbWUoKSk7Ci0gICAgY2FzZSBN
ZXRhU2NoZW1lOiAgICAgICAgICByZXR1cm4gU3RyaW5nKG1ldGEuc2NoZW1lKCkpOwotICAgIH0K
LSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9CQVNFOiB7Ci0gICAgSFRNTEJhc2VFbGVtZW50SW1w
bCAmYmFzZSA9IHN0YXRpY19jYXN0PEhUTUxCYXNlRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Cisg
ICAgSFRNTExpbmtFbGVtZW50SW1wbCAmbGluayA9ICpzdGF0aWNfY2FzdDxIVE1MTGlua0VsZW1l
bnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBCYXNlSHJl
ZjogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGJhc2UuaHJlZigpKTsKLSAgICBjYXNlIEJhc2VU
YXJnZXQ6ICAgICAgICAgIHJldHVybiBTdHJpbmcoYmFzZS50YXJnZXQoKSk7CisgICAgICAgIGNh
c2UgTGlua0Rpc2FibGVkOgorICAgICAgICAgICAgcmV0dXJuIEJvb2xlYW4obGluay5kaXNhYmxl
ZCgpKTsKKyAgICAgICAgY2FzZSBMaW5rQ2hhcnNldDoKKyAgICAgICAgICAgIHJldHVybiBTdHJp
bmcobGluay5jaGFyc2V0KCkpOworICAgICAgICBjYXNlIExpbmtIcmVmOgorICAgICAgICAgICAg
cmV0dXJuIFN0cmluZyhsaW5rLmhyZWYoKSk7CisgICAgICAgIGNhc2UgTGlua0hyZWZMYW5nOgor
ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhsaW5rLmhyZWZsYW5nKCkpOworICAgICAgICBjYXNl
IExpbmtNZWRpYTogICAgICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhsaW5rLm1l
ZGlhKCkpOworICAgICAgICBjYXNlIExpbmtSZWw6ICAgICAgICAgICAgIAorICAgICAgICAgICAg
cmV0dXJuIFN0cmluZyhsaW5rLnJlbCgpKTsKKyAgICAgICAgY2FzZSBMaW5rUmV2OiAgICAgICAg
ICAgIAorICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhsaW5rLnJldigpKTsKKyAgICAgICAgY2Fz
ZSBMaW5rVGFyZ2V0OiAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcobGluay50
YXJnZXQoKSk7CisgICAgICAgIGNhc2UgTGlua1R5cGU6ICAgICAgICAgICAgCisgICAgICAgICAg
ICByZXR1cm4gU3RyaW5nKGxpbmsudHlwZSgpKTsKKyAgICAgICAgY2FzZSBMaW5rU2hlZXQ6ICAg
ICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiBnZXRET01TdHlsZVNoZWV0KGV4ZWMsIGxpbmsu
c2hlZXQoKSk7CiAgICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX0lTSU5ERVg6IHsKLSAg
ICBIVE1MSXNJbmRleEVsZW1lbnRJbXBsICZpc2luZGV4ID0gc3RhdGljX2Nhc3Q8SFRNTElzSW5k
ZXhFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2Fz
ZSBJc0luZGV4Rm9ybTogICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLCBpc2luZGV4
LmZvcm0oKSk7IC8vIHR5cGUgSFRNTEZvcm1FbGVtZW50Ci0gICAgY2FzZSBJc0luZGV4UHJvbXB0
OiAgICAgICAgICByZXR1cm4gU3RyaW5nKGlzaW5kZXgucHJvbXB0KCkpOwotICAgIH0KLSAgfQot
ICBicmVhazsKLSAgY2FzZSBJRF9TVFlMRTogewotICAgIEhUTUxTdHlsZUVsZW1lbnRJbXBsICZz
dHlsZSA9IHN0YXRpY19jYXN0PEhUTUxTdHlsZUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAg
IHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIFN0eWxlRGlzYWJsZWQ6ICAgICAgICByZXR1cm4g
Qm9vbGVhbihzdHlsZS5kaXNhYmxlZCgpKTsKLSAgICBjYXNlIFN0eWxlTWVkaWE6ICAgICAgICAg
ICByZXR1cm4gU3RyaW5nKHN0eWxlLm1lZGlhKCkpOwotICAgIGNhc2UgU3R5bGVUeXBlOiAgICAg
ICAgICAgIHJldHVybiBTdHJpbmcoc3R5bGUudHlwZSgpKTsKLSAgICBjYXNlIFN0eWxlU2hlZXQ6
ICAgICAgICAgICByZXR1cm4gZ2V0RE9NU3R5bGVTaGVldChleGVjLCBzdHlsZS5zaGVldCgpKTsK
LSAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfQk9EWTogewotICAgIEhUTUxCb2R5RWxl
bWVudEltcGwgJmJvZHkgPSBzdGF0aWNfY2FzdDxIVE1MQm9keUVsZW1lbnRJbXBsICY+KGVsZW1l
bnQpOwotICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIEJvZHlBTGluazogICAgICAgICAg
IHJldHVybiBTdHJpbmcoYm9keS5hTGluaygpKTsKLSAgICBjYXNlIEJvZHlCYWNrZ3JvdW5kOiAg
ICAgIHJldHVybiBTdHJpbmcoYm9keS5iYWNrZ3JvdW5kKCkpOwotICAgIGNhc2UgQm9keUJnQ29s
b3I6ICAgICAgICAgcmV0dXJuIFN0cmluZyhib2R5LmJnQ29sb3IoKSk7Ci0gICAgY2FzZSBCb2R5
TGluazogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGJvZHkubGluaygpKTsKLSAgICBjYXNlIEJv
ZHlUZXh0OiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYm9keS50ZXh0KCkpOwotICAgIGNhc2Ug
Qm9keVZMaW5rOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhib2R5LnZMaW5rKCkpOwotICAgIGRl
ZmF1bHQ6Ci0gICAgICAvLyBVcGRhdGUgdGhlIGRvY3VtZW50J3MgbGF5b3V0IGJlZm9yZSB3ZSBj
b21wdXRlIHRoZXNlIGF0dHJpYnV0ZXMuCi0gICAgICBEb2N1bWVudEltcGwgKmRvYyA9IGJvZHku
Z2V0RG9jdW1lbnQoKTsKLSAgICAgIGlmIChkb2MpCi0gICAgICAgIGRvYy0+dXBkYXRlTGF5b3V0
SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7Ci0gICAgICBLSFRNTFZpZXcgKnZpZXcgPSBkb2Mg
PyBkb2MtPnZpZXcoKSA6IDA7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICAgIGNhc2Ug
Qm9keVNjcm9sbExlZnQ6Ci0gICAgICAgICAgICByZXR1cm4gTnVtYmVyKHZpZXcgPyB2aWV3LT5j
b250ZW50c1goKSA6IDApOwotICAgICAgICBjYXNlIEJvZHlTY3JvbGxUb3A6Ci0gICAgICAgICAg
ICByZXR1cm4gTnVtYmVyKHZpZXcgPyB2aWV3LT5jb250ZW50c1koKSA6IDApOwotICAgICAgICBj
YXNlIEJvZHlTY3JvbGxIZWlnaHQ6ICAgcmV0dXJuIE51bWJlcih2aWV3ID8gdmlldy0+Y29udGVu
dHNIZWlnaHQoKSA6IDApOwotICAgICAgICBjYXNlIEJvZHlTY3JvbGxXaWR0aDogICAgcmV0dXJu
IE51bWJlcih2aWV3ID8gdmlldy0+Y29udGVudHNXaWR0aCgpIDogMCk7Ci0gICAgICB9Ci0gICAg
fQotICB9Ci0gIGJyZWFrOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KIAotICBjYXNlIElE
X0ZPUk06IHsKLSAgICBIVE1MRm9ybUVsZW1lbnRJbXBsICZmb3JtID0gc3RhdGljX2Nhc3Q8SFRN
TEZvcm1FbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAg
Y2FzZSBGb3JtRWxlbWVudHM6ICAgICAgICByZXR1cm4gZ2V0SFRNTENvbGxlY3Rpb24oZXhlYywg
Zm9ybS5lbGVtZW50cygpLmdldCgpKTsKLSAgICBjYXNlIEZvcm1MZW5ndGg6ICAgICAgICAgIHJl
dHVybiBOdW1iZXIoZm9ybS5sZW5ndGgoKSk7Ci0gICAgY2FzZSBGb3JtTmFtZTogICAgICAgICAg
ICByZXR1cm4gU3RyaW5nKGZvcm0ubmFtZSgpKTsKLSAgICBjYXNlIEZvcm1BY2NlcHRDaGFyc2V0
OiAgIHJldHVybiBTdHJpbmcoZm9ybS5hY2NlcHRDaGFyc2V0KCkpOwotICAgIGNhc2UgRm9ybUFj
dGlvbjogICAgICAgICAgcmV0dXJuIFN0cmluZyhmb3JtLmFjdGlvbigpKTsKLSAgICBjYXNlIEZv
cm1FbmNUeXBlOiAgICAgICAgIHJldHVybiBTdHJpbmcoZm9ybS5lbmN0eXBlKCkpOwotICAgIGNh
c2UgRm9ybU1ldGhvZDogICAgICAgICAgcmV0dXJuIFN0cmluZyhmb3JtLm1ldGhvZCgpKTsKLSAg
ICBjYXNlIEZvcm1UYXJnZXQ6ICAgICAgICAgIHJldHVybiBTdHJpbmcoZm9ybS50YXJnZXQoKSk7
Ci0gICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX1NFTEVDVDogewotICAgIEhUTUxTZWxl
Y3RFbGVtZW50SW1wbCAmc2VsZWN0ID0gc3RhdGljX2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnRJbXBs
ICY+KGVsZW1lbnQpOwotICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIFNlbGVjdFR5cGU6
ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhzZWxlY3QudHlwZSgpKTsKLSAgICBjYXNlIFNlbGVj
dFNlbGVjdGVkSW5kZXg6ICAgcmV0dXJuIE51bWJlcihzZWxlY3Quc2VsZWN0ZWRJbmRleCgpKTsK
LSAgICBjYXNlIFNlbGVjdFZhbHVlOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhzZWxlY3QudmFs
dWUoKSk7Ci0gICAgY2FzZSBTZWxlY3RMZW5ndGg6ICAgICAgICAgIHJldHVybiBOdW1iZXIoc2Vs
ZWN0Lmxlbmd0aCgpKTsKLSAgICBjYXNlIFNlbGVjdEZvcm06ICAgICAgICAgICAgcmV0dXJuIGdl
dERPTU5vZGUoZXhlYywgc2VsZWN0LmZvcm0oKSk7IC8vIHR5cGUgSFRNTEZvcm1FbGVtZW50Ci0g
ICAgY2FzZSBTZWxlY3RPcHRpb25zOiAgICAgICAgIHJldHVybiBnZXRTZWxlY3RIVE1MQ29sbGVj
dGlvbihleGVjLCBzZWxlY3Qub3B0aW9uc0hUTUxDb2xsZWN0aW9uKCkuZ2V0KCksICZzZWxlY3Qp
OyAvLyB0eXBlIEhUTUxDb2xsZWN0aW9uCi0gICAgY2FzZSBTZWxlY3REaXNhYmxlZDogICAgICAg
IHJldHVybiBCb29sZWFuKHNlbGVjdC5kaXNhYmxlZCgpKTsKLSAgICBjYXNlIFNlbGVjdE11bHRp
cGxlOiAgICAgICAgcmV0dXJuIEJvb2xlYW4oc2VsZWN0Lm11bHRpcGxlKCkpOwotICAgIGNhc2Ug
U2VsZWN0TmFtZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKHNlbGVjdC5uYW1lKCkpOwotICAg
IGNhc2UgU2VsZWN0U2l6ZTogICAgICAgICAgICByZXR1cm4gTnVtYmVyKHNlbGVjdC5zaXplKCkp
OwotICAgIGNhc2UgU2VsZWN0VGFiSW5kZXg6ICAgICAgICByZXR1cm4gTnVtYmVyKHNlbGVjdC50
YWJJbmRleCgpKTsKLSAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfT1BUR1JPVVA6IHsK
LSAgICBIVE1MT3B0R3JvdXBFbGVtZW50SW1wbCAmb3B0Z3JvdXAgPSBzdGF0aWNfY2FzdDxIVE1M
T3B0R3JvdXBFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0g
ICAgY2FzZSBPcHRHcm91cERpc2FibGVkOiAgICAgICAgcmV0dXJuIEJvb2xlYW4ob3B0Z3JvdXAu
ZGlzYWJsZWQoKSk7Ci0gICAgY2FzZSBPcHRHcm91cExhYmVsOiAgICAgICAgICAgcmV0dXJuIFN0
cmluZyhvcHRncm91cC5sYWJlbCgpKTsKLSAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURf
T1BUSU9OOiB7Ci0gICAgSFRNTE9wdGlvbkVsZW1lbnRJbXBsICZvcHRpb24gPSBzdGF0aWNfY2Fz
dDxIVE1MT3B0aW9uRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikg
ewotICAgIGNhc2UgT3B0aW9uRm9ybTogICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVj
LG9wdGlvbi5mb3JtKCkpOyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVudAotICAgIGNhc2UgT3B0aW9u
RGVmYXVsdFNlbGVjdGVkOiByZXR1cm4gQm9vbGVhbihvcHRpb24uZGVmYXVsdFNlbGVjdGVkKCkp
OwotICAgIGNhc2UgT3B0aW9uVGV4dDogICAgICAgICAgICByZXR1cm4gU3RyaW5nKG9wdGlvbi50
ZXh0KCkpOwotICAgIGNhc2UgT3B0aW9uSW5kZXg6ICAgICAgICAgICByZXR1cm4gTnVtYmVyKG9w
dGlvbi5pbmRleCgpKTsKLSAgICBjYXNlIE9wdGlvbkRpc2FibGVkOiAgICAgICAgcmV0dXJuIEJv
b2xlYW4ob3B0aW9uLmRpc2FibGVkKCkpOwotICAgIGNhc2UgT3B0aW9uTGFiZWw6ICAgICAgICAg
ICByZXR1cm4gU3RyaW5nKG9wdGlvbi5sYWJlbCgpKTsKLSAgICBjYXNlIE9wdGlvblNlbGVjdGVk
OiAgICAgICAgcmV0dXJuIEJvb2xlYW4ob3B0aW9uLnNlbGVjdGVkKCkpOwotICAgIGNhc2UgT3B0
aW9uVmFsdWU6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKG9wdGlvbi52YWx1ZSgpKTsKLSAgICB9
Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfSU5QVVQ6IHsKLSAgICBIVE1MSW5wdXRFbGVtZW50
SW1wbCAmaW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50SW1wbCAmPihlbGVtZW50
KTsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBJbnB1dERlZmF1bHRWYWx1ZTogICAg
cmV0dXJuIFN0cmluZyhpbnB1dC5kZWZhdWx0VmFsdWUoKSk7Ci0gICAgY2FzZSBJbnB1dERlZmF1
bHRDaGVja2VkOiAgcmV0dXJuIEJvb2xlYW4oaW5wdXQuZGVmYXVsdENoZWNrZWQoKSk7Ci0gICAg
Y2FzZSBJbnB1dEZvcm06ICAgICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyxpbnB1dC5m
b3JtKCkpOyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVudAotICAgIGNhc2UgSW5wdXRBY2NlcHQ6ICAg
ICAgICAgIHJldHVybiBTdHJpbmcoaW5wdXQuYWNjZXB0KCkpOwotICAgIGNhc2UgSW5wdXRBY2Nl
c3NLZXk6ICAgICAgIHJldHVybiBTdHJpbmcoaW5wdXQuYWNjZXNzS2V5KCkpOwotICAgIGNhc2Ug
SW5wdXRBbGlnbjogICAgICAgICAgIHJldHVybiBTdHJpbmcoaW5wdXQuYWxpZ24oKSk7Ci0gICAg
Y2FzZSBJbnB1dEFsdDogICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpbnB1dC5hbHQoKSk7Ci0g
ICAgY2FzZSBJbnB1dENoZWNrZWQ6ICAgICAgICAgcmV0dXJuIEJvb2xlYW4oaW5wdXQuY2hlY2tl
ZCgpKTsKLSAgICBjYXNlIElucHV0RGlzYWJsZWQ6ICAgICAgICByZXR1cm4gQm9vbGVhbihpbnB1
dC5kaXNhYmxlZCgpKTsKLSAgICBjYXNlIElucHV0TWF4TGVuZ3RoOiAgICAgICByZXR1cm4gTnVt
YmVyKGlucHV0Lm1heExlbmd0aCgpKTsKLSAgICBjYXNlIElucHV0TmFtZTogICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKGlucHV0Lm5hbWUoKSk7Ci0gICAgY2FzZSBJbnB1dFJlYWRPbmx5OiAgICAg
ICAgcmV0dXJuIEJvb2xlYW4oaW5wdXQucmVhZE9ubHkoKSk7Ci0gICAgY2FzZSBJbnB1dFNlbGVj
dGlvblN0YXJ0OiAgcmV0dXJuIGdldElucHV0U2VsZWN0aW9uU3RhcnQoaW5wdXQpOwotICAgIGNh
c2UgSW5wdXRTZWxlY3Rpb25FbmQ6ICAgIHJldHVybiBnZXRJbnB1dFNlbGVjdGlvbkVuZChpbnB1
dCk7Ci0gICAgY2FzZSBJbnB1dFNpemU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpbnB1dC5z
aXplRE9NKCkpOwotICAgIGNhc2UgSW5wdXRTcmM6ICAgICAgICAgICAgIHJldHVybiBTdHJpbmco
aW5wdXQuc3JjKCkpOwotICAgIGNhc2UgSW5wdXRUYWJJbmRleDogICAgICAgIHJldHVybiBOdW1i
ZXIoaW5wdXQudGFiSW5kZXgoKSk7Ci0gICAgY2FzZSBJbnB1dFR5cGU6ICAgICAgICAgICAgcmV0
dXJuIFN0cmluZyhpbnB1dC50eXBlKCkpOwotICAgIGNhc2UgSW5wdXRVc2VNYXA6ICAgICAgICAg
IHJldHVybiBTdHJpbmcoaW5wdXQudXNlTWFwKCkpOwotICAgIGNhc2UgSW5wdXRWYWx1ZTogICAg
ICAgICAgIHJldHVybiBTdHJpbmcoaW5wdXQudmFsdWUoKSk7Ci0gICAgfQotICB9Ci0gIGJyZWFr
OwotICBjYXNlIElEX1RFWFRBUkVBOiB7Ci0gICAgSFRNTFRleHRBcmVhRWxlbWVudEltcGwgJnRl
eHRhcmVhID0gc3RhdGljX2Nhc3Q8SFRNTFRleHRBcmVhRWxlbWVudEltcGwgJj4oZWxlbWVudCk7
Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgVGV4dEFyZWFEZWZhdWx0VmFsdWU6ICAg
IHJldHVybiBTdHJpbmcodGV4dGFyZWEuZGVmYXVsdFZhbHVlKCkpOwotICAgIGNhc2UgVGV4dEFy
ZWFGb3JtOiAgICAgICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsdGV4dGFyZWEuZm9ybSgp
KTsgLy8gdHlwZSBIVE1MRm9ybUVsZW1lbnQKLSAgICBjYXNlIFRleHRBcmVhQWNjZXNzS2V5OiAg
ICAgICByZXR1cm4gU3RyaW5nKHRleHRhcmVhLmFjY2Vzc0tleSgpKTsKLSAgICBjYXNlIFRleHRB
cmVhQ29sczogICAgICAgICAgICByZXR1cm4gTnVtYmVyKHRleHRhcmVhLmNvbHMoKSk7Ci0gICAg
Y2FzZSBUZXh0QXJlYURpc2FibGVkOiAgICAgICAgcmV0dXJuIEJvb2xlYW4odGV4dGFyZWEuZGlz
YWJsZWQoKSk7Ci0gICAgY2FzZSBUZXh0QXJlYU5hbWU6ICAgICAgICAgICAgcmV0dXJuIFN0cmlu
Zyh0ZXh0YXJlYS5uYW1lKCkpOwotICAgIGNhc2UgVGV4dEFyZWFSZWFkT25seTogICAgICAgIHJl
dHVybiBCb29sZWFuKHRleHRhcmVhLnJlYWRPbmx5KCkpOwotICAgIGNhc2UgVGV4dEFyZWFSb3dz
OiAgICAgICAgICAgIHJldHVybiBOdW1iZXIodGV4dGFyZWEucm93cygpKTsKLSAgICBjYXNlIFRl
eHRBcmVhU2VsZWN0aW9uU3RhcnQ6ICByZXR1cm4gTnVtYmVyKHRleHRhcmVhLnNlbGVjdGlvblN0
YXJ0KCkpOwotICAgIGNhc2UgVGV4dEFyZWFTZWxlY3Rpb25FbmQ6ICAgIHJldHVybiBOdW1iZXIo
dGV4dGFyZWEuc2VsZWN0aW9uRW5kKCkpOwotICAgIGNhc2UgVGV4dEFyZWFUYWJJbmRleDogICAg
ICAgIHJldHVybiBOdW1iZXIodGV4dGFyZWEudGFiSW5kZXgoKSk7Ci0gICAgY2FzZSBUZXh0QXJl
YVR5cGU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0ZXh0YXJlYS50eXBlKCkpOwotICAgIGNh
c2UgVGV4dEFyZWFWYWx1ZTogICAgICAgICAgIHJldHVybiBTdHJpbmcodGV4dGFyZWEudmFsdWUo
KSk7Ci0gICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX0JVVFRPTjogewotICAgIEhUTUxC
dXR0b25FbGVtZW50SW1wbCAmYnV0dG9uID0gc3RhdGljX2Nhc3Q8SFRNTEJ1dHRvbkVsZW1lbnRJ
bXBsICY+KGVsZW1lbnQpOwotICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIEJ1dHRvbkZv
cm06ICAgICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyxidXR0b24uZm9ybSgpKTsgLy8g
dHlwZSBIVE1MRm9ybUVsZW1lbnQKLSAgICBjYXNlIEJ1dHRvbkFjY2Vzc0tleTogICAgICAgcmV0
dXJuIFN0cmluZyhidXR0b24uYWNjZXNzS2V5KCkpOwotICAgIGNhc2UgQnV0dG9uRGlzYWJsZWQ6
ICAgICAgICByZXR1cm4gQm9vbGVhbihidXR0b24uZGlzYWJsZWQoKSk7Ci0gICAgY2FzZSBCdXR0
b25OYW1lOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYnV0dG9uLm5hbWUoKSk7Ci0gICAgY2Fz
ZSBCdXR0b25UYWJJbmRleDogICAgICAgIHJldHVybiBOdW1iZXIoYnV0dG9uLnRhYkluZGV4KCkp
OwotICAgIGNhc2UgQnV0dG9uVHlwZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGJ1dHRvbi50
eXBlKCkpOwotICAgIGNhc2UgQnV0dG9uVmFsdWU6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGJ1
dHRvbi52YWx1ZSgpKTsKLSAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfTEFCRUw6IHsK
LSAgICBIVE1MTGFiZWxFbGVtZW50SW1wbCAmbGFiZWwgPSBzdGF0aWNfY2FzdDxIVE1MTGFiZWxF
bGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBM
YWJlbEZvcm06ICAgICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyxsYWJlbC5mb3JtKCkp
OyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVudAotICAgIGNhc2UgTGFiZWxBY2Nlc3NLZXk6ICAgICAg
IHJldHVybiBTdHJpbmcobGFiZWwuYWNjZXNzS2V5KCkpOwotICAgIGNhc2UgTGFiZWxIdG1sRm9y
OiAgICAgICAgIHJldHVybiBTdHJpbmcobGFiZWwuaHRtbEZvcigpKTsKLSAgICB9Ci0gIH0KLSAg
YnJlYWs7Ci0gIGNhc2UgSURfRklFTERTRVQ6IHsKLSAgICBIVE1MRmllbGRTZXRFbGVtZW50SW1w
bCAmZmllbGRTZXQgPSBzdGF0aWNfY2FzdDxIVE1MRmllbGRTZXRFbGVtZW50SW1wbCAmPihlbGVt
ZW50KTsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBGaWVsZFNldEZvcm06ICAgICAg
ICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyxmaWVsZFNldC5mb3JtKCkpOyAvLyB0eXBlIEhU
TUxGb3JtRWxlbWVudAotICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9MRUdFTkQ6IHsK
LSAgICBIVE1MTGVnZW5kRWxlbWVudEltcGwgJmxlZ2VuZCA9IHN0YXRpY19jYXN0PEhUTUxMZWdl
bmRFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2Fz
ZSBMZWdlbmRGb3JtOiAgICAgICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsbGVnZW5kLmZv
cm0oKSk7IC8vIHR5cGUgSFRNTEZvcm1FbGVtZW50Ci0gICAgY2FzZSBMZWdlbmRBY2Nlc3NLZXk6
ICAgICAgIHJldHVybiBTdHJpbmcobGVnZW5kLmFjY2Vzc0tleSgpKTsKLSAgICBjYXNlIExlZ2Vu
ZEFsaWduOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhsZWdlbmQuYWxpZ24oKSk7Ci0gICAgfQot
ICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX1VMOiB7Ci0gICAgSFRNTFVMaXN0RWxlbWVudEltcGwg
JnVMaXN0ID0gc3RhdGljX2Nhc3Q8SFRNTFVMaXN0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0g
ICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgVUxpc3RDb21wYWN0OiAgICAgICAgIHJldHVy
biBCb29sZWFuKHVMaXN0LmNvbXBhY3QoKSk7Ci0gICAgY2FzZSBVTGlzdFR5cGU6ICAgICAgICAg
ICAgcmV0dXJuIFN0cmluZyh1TGlzdC50eXBlKCkpOwotICAgIH0KLSAgfQotICBicmVhazsKLSAg
Y2FzZSBJRF9PTDogewotICAgIEhUTUxPTGlzdEVsZW1lbnRJbXBsICZvTGlzdCA9IHN0YXRpY19j
YXN0PEhUTUxPTGlzdEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgIHN3aXRjaCAodG9rZW4p
IHsKLSAgICBjYXNlIE9MaXN0Q29tcGFjdDogICAgICAgICByZXR1cm4gQm9vbGVhbihvTGlzdC5j
b21wYWN0KCkpOwotICAgIGNhc2UgT0xpc3RTdGFydDogICAgICAgICAgIHJldHVybiBOdW1iZXIo
b0xpc3Quc3RhcnQoKSk7Ci0gICAgY2FzZSBPTGlzdFR5cGU6ICAgICAgICAgICAgcmV0dXJuIFN0
cmluZyhvTGlzdC50eXBlKCkpOwotICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9ETDog
ewotICAgIEhUTUxETGlzdEVsZW1lbnRJbXBsICZkTGlzdCA9IHN0YXRpY19jYXN0PEhUTUxETGlz
dEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworVmFsdWUgSFRNTEVsZW1lbnQ6OnRpdGxlR2V0dGVy
KEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxUaXRsZUVsZW1l
bnRJbXBsJiB0aXRsZSA9ICpzdGF0aWNfY2FzdDxIVE1MVGl0bGVFbGVtZW50SW1wbCo+KGltcGwo
KSk7CisgICAgaWYgKHRva2VuID09IFRpdGxlVGV4dCkKKyAgICAgICAgcmV0dXJuIFN0cmluZyh0
aXRsZS50ZXh0KCkpOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVs
ZW1lbnQ6Om1ldGFHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7Cisg
ICAgSFRNTE1ldGFFbGVtZW50SW1wbCYgbWV0YSA9ICpzdGF0aWNfY2FzdDxIVE1MTWV0YUVsZW1l
bnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBETGlzdENv
bXBhY3Q6ICAgICAgICAgcmV0dXJuIEJvb2xlYW4oZExpc3QuY29tcGFjdCgpKTsKKyAgICAgICAg
Y2FzZSBNZXRhQ29udGVudDogICAgICAgICByZXR1cm4gU3RyaW5nKG1ldGEuY29udGVudCgpKTsK
KyAgICAgICAgY2FzZSBNZXRhSHR0cEVxdWl2OiAgICAgICByZXR1cm4gU3RyaW5nKG1ldGEuaHR0
cEVxdWl2KCkpOworICAgICAgICBjYXNlIE1ldGFOYW1lOiAgICAgICAgICAgIHJldHVybiBTdHJp
bmcobWV0YS5uYW1lKCkpOworICAgICAgICBjYXNlIE1ldGFTY2hlbWU6ICAgICAgICAgIHJldHVy
biBTdHJpbmcobWV0YS5zY2hlbWUoKSk7CiAgICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElE
X0RJUjogewotICAgIEhUTUxEaXJlY3RvcnlFbGVtZW50SW1wbCAmZGlyZWN0b3J5ID0gc3RhdGlj
X2Nhc3Q8SFRNTERpcmVjdG9yeUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgIHJldHVybiBV
bmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OmJhc2VHZXR0ZXIoRXhlY1N0YXRl
KiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTEJhc2VFbGVtZW50SW1wbCYgYmFz
ZSA9ICpzdGF0aWNfY2FzdDxIVE1MQmFzZUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0
Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBEaXJlY3RvcnlDb21wYWN0OiAgICAgICAgIHJldHVybiBC
b29sZWFuKGRpcmVjdG9yeS5jb21wYWN0KCkpOworICAgICAgICBjYXNlIEJhc2VIcmVmOiAgICAg
ICAgICAgIHJldHVybiBTdHJpbmcoYmFzZS5ocmVmKCkpOworICAgICAgICBjYXNlIEJhc2VUYXJn
ZXQ6ICAgICAgICAgIHJldHVybiBTdHJpbmcoYmFzZS50YXJnZXQoKSk7CiAgICAgfQotICB9Ci0g
IGJyZWFrOwotICBjYXNlIElEX01FTlU6IHsKLSAgICBIVE1MTWVudUVsZW1lbnRJbXBsICZtZW51
ID0gc3RhdGljX2Nhc3Q8SFRNTE1lbnVFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICByZXR1
cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50Ojppc0luZGV4R2V0dGVyKEV4
ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxJc0luZGV4RWxlbWVu
dEltcGwmIGlzaW5kZXggPSAqc3RhdGljX2Nhc3Q8SFRNTElzSW5kZXhFbGVtZW50SW1wbCo+KGlt
cGwoKSk7CiAgICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgTWVudUNvbXBhY3Q6ICAgICAg
ICAgcmV0dXJuIEJvb2xlYW4obWVudS5jb21wYWN0KCkpOworICAgICAgICBjYXNlIElzSW5kZXhG
b3JtOiAgICAgICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsIGlzaW5kZXguZm9ybSgpKTsg
Ly8gdHlwZSBIVE1MRm9ybUVsZW1lbnQKKyAgICAgICAgY2FzZSBJc0luZGV4UHJvbXB0OiAgICAg
ICAgICByZXR1cm4gU3RyaW5nKGlzaW5kZXgucHJvbXB0KCkpOwogICAgIH0KLSAgfQotICBicmVh
azsKLSAgY2FzZSBJRF9MSTogewotICAgIEhUTUxMSUVsZW1lbnRJbXBsICZsaSA9IHN0YXRpY19j
YXN0PEhUTUxMSUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgIHJldHVybiBVbmRlZmluZWQo
KTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OnN0eWxlR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywg
aW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxTdHlsZUVsZW1lbnRJbXBsJiBzdHlsZSA9ICpz
dGF0aWNfY2FzdDxIVE1MU3R5bGVFbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0
b2tlbikgewotICAgIGNhc2UgTElUeXBlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcobGkudHlw
ZSgpKTsKLSAgICBjYXNlIExJVmFsdWU6ICAgICAgICAgICByZXR1cm4gTnVtYmVyKGxpLnZhbHVl
KCkpOworICAgICAgICBjYXNlIFN0eWxlRGlzYWJsZWQ6ICAgICAgICByZXR1cm4gQm9vbGVhbihz
dHlsZS5kaXNhYmxlZCgpKTsKKyAgICAgICAgY2FzZSBTdHlsZU1lZGlhOiAgICAgICAgICAgcmV0
dXJuIFN0cmluZyhzdHlsZS5tZWRpYSgpKTsKKyAgICAgICAgY2FzZSBTdHlsZVR5cGU6ICAgICAg
ICAgICAgcmV0dXJuIFN0cmluZyhzdHlsZS50eXBlKCkpOworICAgICAgICBjYXNlIFN0eWxlU2hl
ZXQ6ICAgICAgICAgICByZXR1cm4gZ2V0RE9NU3R5bGVTaGVldChleGVjLCBzdHlsZS5zaGVldCgp
KTsKICAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfRElWOiB7Ci0gICAgSFRNTERpdkVs
ZW1lbnRJbXBsICZkaXYgPSBzdGF0aWNfY2FzdDxIVE1MRGl2RWxlbWVudEltcGwgJj4oZWxlbWVu
dCk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6Ym9k
eUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MQm9k
eUVsZW1lbnRJbXBsJiBib2R5ID0gKnN0YXRpY19jYXN0PEhUTUxCb2R5RWxlbWVudEltcGwqPihp
bXBsKCkpOwogICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIERpdkFsaWduOiAgICAgICAg
ICAgcmV0dXJuIFN0cmluZyhkaXYuYWxpZ24oKSk7CisgICAgICAgIGNhc2UgQm9keUFMaW5rOiAg
ICAgICAgICAgcmV0dXJuIFN0cmluZyhib2R5LmFMaW5rKCkpOworICAgICAgICBjYXNlIEJvZHlC
YWNrZ3JvdW5kOiAgICAgIHJldHVybiBTdHJpbmcoYm9keS5iYWNrZ3JvdW5kKCkpOworICAgICAg
ICBjYXNlIEJvZHlCZ0NvbG9yOiAgICAgICAgIHJldHVybiBTdHJpbmcoYm9keS5iZ0NvbG9yKCkp
OworICAgICAgICBjYXNlIEJvZHlMaW5rOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYm9keS5s
aW5rKCkpOworICAgICAgICBjYXNlIEJvZHlUZXh0OiAgICAgICAgICAgIHJldHVybiBTdHJpbmco
Ym9keS50ZXh0KCkpOworICAgICAgICBjYXNlIEJvZHlWTGluazogICAgICAgICAgIHJldHVybiBT
dHJpbmcoYm9keS52TGluaygpKTsKKyAgICAgICAgZGVmYXVsdDogeworICAgICAgICAgICAgLy8g
VXBkYXRlIHRoZSBkb2N1bWVudCdzIGxheW91dCBiZWZvcmUgd2UgY29tcHV0ZSB0aGVzZSBhdHRy
aWJ1dGVzLgorICAgICAgICAgICAgRG9jdW1lbnRJbXBsICpkb2MgPSBib2R5LmdldERvY3VtZW50
KCk7CisgICAgICAgICAgICBpZiAoZG9jKQorICAgICAgICAgICAgICAgIGRvYy0+dXBkYXRlTGF5
b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CisgICAgICAgICAgICBLSFRNTFZpZXcgKnZp
ZXcgPSBkb2MgPyBkb2MtPnZpZXcoKSA6IDA7CisgICAgICAgICAgICBzd2l0Y2ggKHRva2VuKSB7
CisgICAgICAgICAgICAgICAgY2FzZSBCb2R5U2Nyb2xsTGVmdDoKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIE51bWJlcih2aWV3ID8gdmlldy0+Y29udGVudHNYKCkgOiAwKTsKKyAgICAgICAg
ICAgICAgICBjYXNlIEJvZHlTY3JvbGxUb3A6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBO
dW1iZXIodmlldyA/IHZpZXctPmNvbnRlbnRzWSgpIDogMCk7CisgICAgICAgICAgICAgICAgY2Fz
ZSBCb2R5U2Nyb2xsSGVpZ2h0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTnVtYmVyKHZp
ZXcgPyB2aWV3LT5jb250ZW50c0hlaWdodCgpIDogMCk7CisgICAgICAgICAgICAgICAgY2FzZSBC
b2R5U2Nyb2xsV2lkdGg6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOdW1iZXIodmlldyA/
IHZpZXctPmNvbnRlbnRzV2lkdGgoKSA6IDApOworICAgICAgICAgICAgfQorICAgICAgICB9CiAg
ICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX1A6IHsKLSAgICBIVE1MUGFyYWdyYXBoRWxl
bWVudEltcGwgJnBhcmFncmFwaCA9IHN0YXRpY19jYXN0PEhUTUxQYXJhZ3JhcGhFbGVtZW50SW1w
bCAmPihlbGVtZW50KTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxF
bGVtZW50Ojpmb3JtR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAorewor
ICAgIEhUTUxGb3JtRWxlbWVudEltcGwmIGZvcm0gPSAqc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVt
ZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgUGFyYWdy
YXBoQWxpZ246ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHBhcmFncmFwaC5hbGlnbigpKTsKKyAg
ICAgICAgY2FzZSBGb3JtRWxlbWVudHM6ICAgICAgICByZXR1cm4gZ2V0SFRNTENvbGxlY3Rpb24o
ZXhlYywgZm9ybS5lbGVtZW50cygpLmdldCgpKTsKKyAgICAgICAgY2FzZSBGb3JtTGVuZ3RoOiAg
ICAgICAgICByZXR1cm4gTnVtYmVyKGZvcm0ubGVuZ3RoKCkpOworICAgICAgICBjYXNlIEZvcm1O
YW1lOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoZm9ybS5uYW1lKCkpOworICAgICAgICBjYXNl
IEZvcm1BY2NlcHRDaGFyc2V0OiAgIHJldHVybiBTdHJpbmcoZm9ybS5hY2NlcHRDaGFyc2V0KCkp
OworICAgICAgICBjYXNlIEZvcm1BY3Rpb246ICAgICAgICAgIHJldHVybiBTdHJpbmcoZm9ybS5h
Y3Rpb24oKSk7CisgICAgICAgIGNhc2UgRm9ybUVuY1R5cGU6ICAgICAgICAgcmV0dXJuIFN0cmlu
Zyhmb3JtLmVuY3R5cGUoKSk7CisgICAgICAgIGNhc2UgRm9ybU1ldGhvZDogICAgICAgICAgcmV0
dXJuIFN0cmluZyhmb3JtLm1ldGhvZCgpKTsKKyAgICAgICAgY2FzZSBGb3JtVGFyZ2V0OiAgICAg
ICAgICByZXR1cm4gU3RyaW5nKGZvcm0udGFyZ2V0KCkpOwogICAgIH0KLSAgfQotICBicmVhazsK
LSAgY2FzZSBJRF9IMToKLSAgY2FzZSBJRF9IMjoKLSAgY2FzZSBJRF9IMzoKLSAgY2FzZSBJRF9I
NDoKLSAgY2FzZSBJRF9INToKLSAgY2FzZSBJRF9INjogewotICAgIEhUTUxIZWFkaW5nRWxlbWVu
dEltcGwgJmhlYWRpbmcgPSBzdGF0aWNfY2FzdDxIVE1MSGVhZGluZ0VsZW1lbnRJbXBsICY+KGVs
ZW1lbnQpOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6
OnNlbGVjdEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBI
VE1MU2VsZWN0RWxlbWVudEltcGwmIHNlbGVjdCA9ICpzdGF0aWNfY2FzdDxIVE1MU2VsZWN0RWxl
bWVudEltcGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIEhlYWRp
bmdBbGlnbjogICAgICAgICAgIHJldHVybiBTdHJpbmcoaGVhZGluZy5hbGlnbigpKTsKKyAgICAg
ICAgY2FzZSBTZWxlY3RUeXBlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoc2VsZWN0LnR5cGUo
KSk7CisgICAgICAgIGNhc2UgU2VsZWN0U2VsZWN0ZWRJbmRleDogICByZXR1cm4gTnVtYmVyKHNl
bGVjdC5zZWxlY3RlZEluZGV4KCkpOworICAgICAgICBjYXNlIFNlbGVjdFZhbHVlOiAgICAgICAg
ICAgcmV0dXJuIFN0cmluZyhzZWxlY3QudmFsdWUoKSk7CisgICAgICAgIGNhc2UgU2VsZWN0TGVu
Z3RoOiAgICAgICAgICByZXR1cm4gTnVtYmVyKHNlbGVjdC5sZW5ndGgoKSk7CisgICAgICAgIGNh
c2UgU2VsZWN0Rm9ybTogICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLCBzZWxlY3Qu
Zm9ybSgpKTsgLy8gdHlwZSBIVE1MRm9ybUVsZW1lbnQKKyAgICAgICAgY2FzZSBTZWxlY3RPcHRp
b25zOiAgICAgICAgIHJldHVybiBnZXRTZWxlY3RIVE1MQ29sbGVjdGlvbihleGVjLCBzZWxlY3Qu
b3B0aW9uc0hUTUxDb2xsZWN0aW9uKCkuZ2V0KCksICZzZWxlY3QpOyAvLyB0eXBlIEhUTUxDb2xs
ZWN0aW9uCisgICAgICAgIGNhc2UgU2VsZWN0RGlzYWJsZWQ6ICAgICAgICByZXR1cm4gQm9vbGVh
bihzZWxlY3QuZGlzYWJsZWQoKSk7CisgICAgICAgIGNhc2UgU2VsZWN0TXVsdGlwbGU6ICAgICAg
ICByZXR1cm4gQm9vbGVhbihzZWxlY3QubXVsdGlwbGUoKSk7CisgICAgICAgIGNhc2UgU2VsZWN0
TmFtZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKHNlbGVjdC5uYW1lKCkpOworICAgICAgICBj
YXNlIFNlbGVjdFNpemU6ICAgICAgICAgICAgcmV0dXJuIE51bWJlcihzZWxlY3Quc2l6ZSgpKTsK
KyAgICAgICAgY2FzZSBTZWxlY3RUYWJJbmRleDogICAgICAgIHJldHVybiBOdW1iZXIoc2VsZWN0
LnRhYkluZGV4KCkpOwogICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9CTE9DS1FVT1RF
OiB7Ci0gICAgSFRNTEJsb2NrcXVvdGVFbGVtZW50SW1wbCAmYmxvY2txdW90ZSA9IHN0YXRpY19j
YXN0PEhUTUxCbG9ja3F1b3RlRWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgcmV0dXJuIFVu
ZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6b3B0R3JvdXBHZXR0ZXIoRXhlY1N0
YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTE9wdEdyb3VwRWxlbWVudElt
cGwmIG9wdGdyb3VwID0gKnN0YXRpY19jYXN0PEhUTUxPcHRHcm91cEVsZW1lbnRJbXBsKj4oaW1w
bCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBCbG9ja1F1b3RlQ2l0ZTogICAg
ICAgICAgICByZXR1cm4gU3RyaW5nKGJsb2NrcXVvdGUuY2l0ZSgpKTsKKyAgICAgICAgY2FzZSBP
cHRHcm91cERpc2FibGVkOiAgICAgICAgcmV0dXJuIEJvb2xlYW4ob3B0Z3JvdXAuZGlzYWJsZWQo
KSk7CisgICAgICAgIGNhc2UgT3B0R3JvdXBMYWJlbDogICAgICAgICAgIHJldHVybiBTdHJpbmco
b3B0Z3JvdXAubGFiZWwoKSk7CiAgICAgfQotICB9Ci0gIGNhc2UgSURfUTogewotICAgIEhUTUxR
dW90ZUVsZW1lbnRJbXBsICZxdW90ZSA9IHN0YXRpY19jYXN0PEhUTUxRdW90ZUVsZW1lbnRJbXBs
ICY+KGVsZW1lbnQpOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVs
ZW1lbnQ6Om9wdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sK
KyAgICBIVE1MT3B0aW9uRWxlbWVudEltcGwmIG9wdGlvbiA9ICpzdGF0aWNfY2FzdDxIVE1MT3B0
aW9uRWxlbWVudEltcGwqPihpbXBsKCkpOwogICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNl
IFF1b3RlQ2l0ZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKHF1b3RlLmNpdGUoKSk7CisgICAg
ICAgIGNhc2UgT3B0aW9uRm9ybTogICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLG9w
dGlvbi5mb3JtKCkpOyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVudAorICAgICAgICBjYXNlIE9wdGlv
bkRlZmF1bHRTZWxlY3RlZDogcmV0dXJuIEJvb2xlYW4ob3B0aW9uLmRlZmF1bHRTZWxlY3RlZCgp
KTsKKyAgICAgICAgY2FzZSBPcHRpb25UZXh0OiAgICAgICAgICAgIHJldHVybiBTdHJpbmcob3B0
aW9uLnRleHQoKSk7CisgICAgICAgIGNhc2UgT3B0aW9uSW5kZXg6ICAgICAgICAgICByZXR1cm4g
TnVtYmVyKG9wdGlvbi5pbmRleCgpKTsKKyAgICAgICAgY2FzZSBPcHRpb25EaXNhYmxlZDogICAg
ICAgIHJldHVybiBCb29sZWFuKG9wdGlvbi5kaXNhYmxlZCgpKTsKKyAgICAgICAgY2FzZSBPcHRp
b25MYWJlbDogICAgICAgICAgIHJldHVybiBTdHJpbmcob3B0aW9uLmxhYmVsKCkpOworICAgICAg
ICBjYXNlIE9wdGlvblNlbGVjdGVkOiAgICAgICAgcmV0dXJuIEJvb2xlYW4ob3B0aW9uLnNlbGVj
dGVkKCkpOworICAgICAgICBjYXNlIE9wdGlvblZhbHVlOiAgICAgICAgICAgcmV0dXJuIFN0cmlu
ZyhvcHRpb24udmFsdWUoKSk7CiAgICAgfQotICB9Ci0gIGNhc2UgSURfUFJFOiB7Ci0gICAgSFRN
TFByZUVsZW1lbnRJbXBsICZwcmUgPSBzdGF0aWNfY2FzdDxIVE1MUHJlRWxlbWVudEltcGwgJj4o
ZWxlbWVudCk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitzdGF0aWMgVmFsdWUgZ2V0
SW5wdXRTZWxlY3Rpb25TdGFydChIVE1MSW5wdXRFbGVtZW50SW1wbCAmaW5wdXQpCit7CisgICAg
aWYgKGlucHV0LmNhbkhhdmVTZWxlY3Rpb24oKSkKKyAgICAgICAgcmV0dXJuIE51bWJlcihpbnB1
dC5zZWxlY3Rpb25TdGFydCgpKTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK3N0YXRp
YyBWYWx1ZSBnZXRJbnB1dFNlbGVjdGlvbkVuZChIVE1MSW5wdXRFbGVtZW50SW1wbCAmaW5wdXQp
Cit7CisgICAgaWYgKGlucHV0LmNhbkhhdmVTZWxlY3Rpb24oKSkKKyAgICAgICAgcmV0dXJuIE51
bWJlcihpbnB1dC5zZWxlY3Rpb25FbmQoKSk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQor
CitWYWx1ZSBIVE1MRWxlbWVudDo6aW5wdXRHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0Cit7CisgICAgSFRNTElucHV0RWxlbWVudEltcGwmIGlucHV0ID0gKnN0YXRpY19j
YXN0PEhUTUxJbnB1dEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7
Ci0gICAgY2FzZSBQcmVXaWR0aDogICAgICAgICAgIHJldHVybiBOdW1iZXIocHJlLndpZHRoKCkp
OworICAgICAgICBjYXNlIElucHV0RGVmYXVsdFZhbHVlOiAgICByZXR1cm4gU3RyaW5nKGlucHV0
LmRlZmF1bHRWYWx1ZSgpKTsKKyAgICAgICAgY2FzZSBJbnB1dERlZmF1bHRDaGVja2VkOiAgcmV0
dXJuIEJvb2xlYW4oaW5wdXQuZGVmYXVsdENoZWNrZWQoKSk7CisgICAgICAgIGNhc2UgSW5wdXRG
b3JtOiAgICAgICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsaW5wdXQuZm9ybSgpKTsgLy8g
dHlwZSBIVE1MRm9ybUVsZW1lbnQKKyAgICAgICAgY2FzZSBJbnB1dEFjY2VwdDogICAgICAgICAg
cmV0dXJuIFN0cmluZyhpbnB1dC5hY2NlcHQoKSk7CisgICAgICAgIGNhc2UgSW5wdXRBY2Nlc3NL
ZXk6ICAgICAgIHJldHVybiBTdHJpbmcoaW5wdXQuYWNjZXNzS2V5KCkpOworICAgICAgICBjYXNl
IElucHV0QWxpZ246ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGlucHV0LmFsaWduKCkpOworICAg
ICAgICBjYXNlIElucHV0QWx0OiAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGlucHV0LmFsdCgp
KTsKKyAgICAgICAgY2FzZSBJbnB1dENoZWNrZWQ6ICAgICAgICAgcmV0dXJuIEJvb2xlYW4oaW5w
dXQuY2hlY2tlZCgpKTsKKyAgICAgICAgY2FzZSBJbnB1dERpc2FibGVkOiAgICAgICAgcmV0dXJu
IEJvb2xlYW4oaW5wdXQuZGlzYWJsZWQoKSk7CisgICAgICAgIGNhc2UgSW5wdXRNYXhMZW5ndGg6
ICAgICAgIHJldHVybiBOdW1iZXIoaW5wdXQubWF4TGVuZ3RoKCkpOworICAgICAgICBjYXNlIElu
cHV0TmFtZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGlucHV0Lm5hbWUoKSk7CisgICAgICAg
IGNhc2UgSW5wdXRSZWFkT25seTogICAgICAgIHJldHVybiBCb29sZWFuKGlucHV0LnJlYWRPbmx5
KCkpOworICAgICAgICBjYXNlIElucHV0U2VsZWN0aW9uU3RhcnQ6ICByZXR1cm4gZ2V0SW5wdXRT
ZWxlY3Rpb25TdGFydChpbnB1dCk7CisgICAgICAgIGNhc2UgSW5wdXRTZWxlY3Rpb25FbmQ6ICAg
IHJldHVybiBnZXRJbnB1dFNlbGVjdGlvbkVuZChpbnB1dCk7CisgICAgICAgIGNhc2UgSW5wdXRT
aXplOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoaW5wdXQuc2l6ZURPTSgpKTsKKyAgICAgICAg
Y2FzZSBJbnB1dFNyYzogICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpbnB1dC5zcmMoKSk7Cisg
ICAgICAgIGNhc2UgSW5wdXRUYWJJbmRleDogICAgICAgIHJldHVybiBOdW1iZXIoaW5wdXQudGFi
SW5kZXgoKSk7CisgICAgICAgIGNhc2UgSW5wdXRUeXBlOiAgICAgICAgICAgIHJldHVybiBTdHJp
bmcoaW5wdXQudHlwZSgpKTsKKyAgICAgICAgY2FzZSBJbnB1dFVzZU1hcDogICAgICAgICAgcmV0
dXJuIFN0cmluZyhpbnB1dC51c2VNYXAoKSk7CisgICAgICAgIGNhc2UgSW5wdXRWYWx1ZTogICAg
ICAgICAgIHJldHVybiBTdHJpbmcoaW5wdXQudmFsdWUoKSk7CiAgICAgfQotICB9Ci0gIGJyZWFr
OwotICBjYXNlIElEX0JSOiB7Ci0gICAgSFRNTEJSRWxlbWVudEltcGwgJmJyID0gc3RhdGljX2Nh
c3Q8SFRNTEJSRWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgp
OworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6dGV4dEFyZWFHZXR0ZXIoRXhlY1N0YXRlKiBleGVj
LCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTFRleHRBcmVhRWxlbWVudEltcGwmIHRleHRh
cmVhID0gKnN0YXRpY19jYXN0PEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAg
ICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBCUkNsZWFyOiAgICAgICAgICAgcmV0dXJuIFN0
cmluZyhici5jbGVhcigpKTsKLSAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfQkFTRUZP
TlQ6IHsKLSAgICBIVE1MQmFzZUZvbnRFbGVtZW50SW1wbCAmYmFzZUZvbnQgPSBzdGF0aWNfY2Fz
dDxIVE1MQmFzZUZvbnRFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICBzd2l0Y2ggKHRva2Vu
KSB7Ci0gICAgY2FzZSBCYXNlRm9udENvbG9yOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhiYXNl
Rm9udC5jb2xvcigpKTsKLSAgICBjYXNlIEJhc2VGb250RmFjZTogICAgICAgICAgICByZXR1cm4g
U3RyaW5nKGJhc2VGb250LmZhY2UoKSk7Ci0gICAgY2FzZSBCYXNlRm9udFNpemU6ICAgICAgICAg
ICAgcmV0dXJuIFN0cmluZyhiYXNlRm9udC5zaXplKCkpOwotICAgIH0KLSAgfQotICBicmVhazsK
LSAgY2FzZSBJRF9GT05UOiB7Ci0gICAgSFRNTEZvbnRFbGVtZW50SW1wbCAmZm9udCA9IHN0YXRp
Y19jYXN0PEhUTUxGb250RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tl
bikgewotICAgIGNhc2UgRm9udENvbG9yOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhmb250LmNv
bG9yKCkpOwotICAgIGNhc2UgRm9udEZhY2U6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhmb250
LmZhY2UoKSk7Ci0gICAgY2FzZSBGb250U2l6ZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKGZv
bnQuc2l6ZSgpKTsKKyAgICAgICAgY2FzZSBUZXh0QXJlYURlZmF1bHRWYWx1ZTogICAgcmV0dXJu
IFN0cmluZyh0ZXh0YXJlYS5kZWZhdWx0VmFsdWUoKSk7CisgICAgICAgIGNhc2UgVGV4dEFyZWFG
b3JtOiAgICAgICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsdGV4dGFyZWEuZm9ybSgpKTsg
Ly8gdHlwZSBIVE1MRm9ybUVsZW1lbnQKKyAgICAgICAgY2FzZSBUZXh0QXJlYUFjY2Vzc0tleTog
ICAgICAgcmV0dXJuIFN0cmluZyh0ZXh0YXJlYS5hY2Nlc3NLZXkoKSk7CisgICAgICAgIGNhc2Ug
VGV4dEFyZWFDb2xzOiAgICAgICAgICAgIHJldHVybiBOdW1iZXIodGV4dGFyZWEuY29scygpKTsK
KyAgICAgICAgY2FzZSBUZXh0QXJlYURpc2FibGVkOiAgICAgICAgcmV0dXJuIEJvb2xlYW4odGV4
dGFyZWEuZGlzYWJsZWQoKSk7CisgICAgICAgIGNhc2UgVGV4dEFyZWFOYW1lOiAgICAgICAgICAg
IHJldHVybiBTdHJpbmcodGV4dGFyZWEubmFtZSgpKTsKKyAgICAgICAgY2FzZSBUZXh0QXJlYVJl
YWRPbmx5OiAgICAgICAgcmV0dXJuIEJvb2xlYW4odGV4dGFyZWEucmVhZE9ubHkoKSk7CisgICAg
ICAgIGNhc2UgVGV4dEFyZWFSb3dzOiAgICAgICAgICAgIHJldHVybiBOdW1iZXIodGV4dGFyZWEu
cm93cygpKTsKKyAgICAgICAgY2FzZSBUZXh0QXJlYVNlbGVjdGlvblN0YXJ0OiAgcmV0dXJuIE51
bWJlcih0ZXh0YXJlYS5zZWxlY3Rpb25TdGFydCgpKTsKKyAgICAgICAgY2FzZSBUZXh0QXJlYVNl
bGVjdGlvbkVuZDogICAgcmV0dXJuIE51bWJlcih0ZXh0YXJlYS5zZWxlY3Rpb25FbmQoKSk7Cisg
ICAgICAgIGNhc2UgVGV4dEFyZWFUYWJJbmRleDogICAgICAgIHJldHVybiBOdW1iZXIodGV4dGFy
ZWEudGFiSW5kZXgoKSk7CisgICAgICAgIGNhc2UgVGV4dEFyZWFUeXBlOiAgICAgICAgICAgIHJl
dHVybiBTdHJpbmcodGV4dGFyZWEudHlwZSgpKTsKKyAgICAgICAgY2FzZSBUZXh0QXJlYVZhbHVl
OiAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0ZXh0YXJlYS52YWx1ZSgpKTsKICAgICB9Ci0gIH0K
LSAgYnJlYWs7Ci0gIGNhc2UgSURfSFI6IHsKLSAgICBIVE1MSFJFbGVtZW50SW1wbCAmaHIgPSBz
dGF0aWNfY2FzdDxIVE1MSFJFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICBzd2l0Y2ggKHRv
a2VuKSB7Ci0gICAgY2FzZSBIUkFsaWduOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhoci5hbGln
bigpKTsKLSAgICBjYXNlIEhSTm9TaGFkZTogICAgICAgICByZXR1cm4gQm9vbGVhbihoci5ub1No
YWRlKCkpOwotICAgIGNhc2UgSFJTaXplOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoaHIuc2l6
ZSgpKTsKLSAgICBjYXNlIEhSV2lkdGg6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGhyLndpZHRo
KCkpOwotICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9JTlM6Ci0gIGNhc2UgSURfREVM
OiB7Ci0gICAgSFRNTE1vZEVsZW1lbnRJbXBsICZtb2QgPSBzdGF0aWNfY2FzdDxIVE1MTW9kRWxl
bWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1
ZSBIVE1MRWxlbWVudDo6YnV0dG9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBj
b25zdAoreworICAgIEhUTUxCdXR0b25FbGVtZW50SW1wbCYgYnV0dG9uID0gKnN0YXRpY19jYXN0
PEhUTUxCdXR0b25FbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0b2tlbikgewot
ICAgIGNhc2UgTW9kQ2l0ZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKG1vZC5jaXRlKCkpOwot
ICAgIGNhc2UgTW9kRGF0ZVRpbWU6ICAgICAgICByZXR1cm4gU3RyaW5nKG1vZC5kYXRlVGltZSgp
KTsKLSAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfQTogewotICAgIEhUTUxBbmNob3JF
bGVtZW50SW1wbCAmYW5jaG9yID0gc3RhdGljX2Nhc3Q8SFRNTEFuY2hvckVsZW1lbnRJbXBsICY+
KGVsZW1lbnQpOwotICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIEFuY2hvckFjY2Vzc0tl
eTogICAgICAgcmV0dXJuIFN0cmluZyhhbmNob3IuYWNjZXNzS2V5KCkpOwotICAgIGNhc2UgQW5j
aG9yQ2hhcnNldDogICAgICAgICByZXR1cm4gU3RyaW5nKGFuY2hvci5jaGFyc2V0KCkpOwotICAg
IGNhc2UgQW5jaG9yQ29vcmRzOiAgICAgICAgICByZXR1cm4gU3RyaW5nKGFuY2hvci5jb29yZHMo
KSk7Ci0gICAgY2FzZSBBbmNob3JIcmVmOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYW5jaG9y
LmhyZWYoKSk7Ci0gICAgY2FzZSBBbmNob3JIcmVmTGFuZzogICAgICAgIHJldHVybiBTdHJpbmco
YW5jaG9yLmhyZWZsYW5nKCkpOwotICAgIGNhc2UgQW5jaG9ySGFzaDogICAgICAgICAgICByZXR1
cm4gU3RyaW5nKCcjJytLVVJMKGFuY2hvci5ocmVmKCkuc3RyaW5nKCkpLnJlZigpKTsKLSAgICBj
YXNlIEFuY2hvckhvc3Q6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhLVVJMKGFuY2hvci5ocmVm
KCkuc3RyaW5nKCkpLmhvc3QoKSk7Ci0gICAgY2FzZSBBbmNob3JIb3N0bmFtZTogewotICAgICAg
S1VSTCB1cmwoYW5jaG9yLmhyZWYoKS5zdHJpbmcoKSk7Ci0gICAgICBrZERlYnVnKDYwNzApIDw8
ICJhbmNob3I6Omhvc3RuYW1lIHVzZXM6IiA8PHVybC51cmwoKTw8ZW5kbDsKLSAgICAgIGlmICh1
cmwucG9ydCgpPT0wKQotICAgICAgICByZXR1cm4gU3RyaW5nKHVybC5ob3N0KCkpOwotICAgICAg
ZWxzZQotICAgICAgICByZXR1cm4gU3RyaW5nKHVybC5ob3N0KCkgKyAiOiIgKyBRU3RyaW5nOjpu
dW1iZXIodXJsLnBvcnQoKSkpOwotICAgIH0KLSAgICBjYXNlIEFuY2hvclBhdGhOYW1lOiAgICAg
ICAgcmV0dXJuIFN0cmluZyhLVVJMKGFuY2hvci5ocmVmKCkuc3RyaW5nKCkpLnBhdGgoKSk7Ci0g
ICAgY2FzZSBBbmNob3JQb3J0OiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoUVN0cmluZzo6bnVt
YmVyKEtVUkwoYW5jaG9yLmhyZWYoKS5zdHJpbmcoKSkucG9ydCgpKSk7Ci0gICAgY2FzZSBBbmNo
b3JQcm90b2NvbDogICAgICAgIHJldHVybiBTdHJpbmcoS1VSTChhbmNob3IuaHJlZigpLnN0cmlu
ZygpKS5wcm90b2NvbCgpKyI6Iik7Ci0gICAgY2FzZSBBbmNob3JTZWFyY2g6ICAgICAgICAgIHJl
dHVybiBTdHJpbmcoS1VSTChhbmNob3IuaHJlZigpLnN0cmluZygpKS5xdWVyeSgpKTsKLSAgICBj
YXNlIEFuY2hvck5hbWU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhhbmNob3IubmFtZSgpKTsK
LSAgICBjYXNlIEFuY2hvclJlbDogICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhhbmNob3IucmVs
KCkpOwotICAgIGNhc2UgQW5jaG9yUmV2OiAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGFuY2hv
ci5yZXYoKSk7Ci0gICAgY2FzZSBBbmNob3JTaGFwZTogICAgICAgICAgIHJldHVybiBTdHJpbmco
YW5jaG9yLnNoYXBlKCkpOwotICAgIGNhc2UgQW5jaG9yVGFiSW5kZXg6ICAgICAgICByZXR1cm4g
TnVtYmVyKGFuY2hvci50YWJJbmRleCgpKTsKLSAgICBjYXNlIEFuY2hvclRhcmdldDogICAgICAg
ICAgcmV0dXJuIFN0cmluZyhhbmNob3IudGFyZ2V0KCkpOwotICAgIGNhc2UgQW5jaG9yVHlwZTog
ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGFuY2hvci50eXBlKCkpOwotICAgIGNhc2UgQW5jaG9y
VGV4dDoKLSAgICAgIGlmIChEb2N1bWVudEltcGwqIGRvYyA9IGFuY2hvci5nZXREb2N1bWVudCgp
KQotICAgICAgICBkb2MtPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwot
ICAgICAgcmV0dXJuIFN0cmluZyhhbmNob3IuaW5uZXJUZXh0KCkpOwotICAgIH0KLSAgfQotICBi
cmVhazsKLSAgY2FzZSBJRF9JTUc6IHsKLSAgICBIVE1MSW1hZ2VFbGVtZW50SW1wbCAmaW1hZ2Ug
PSBzdGF0aWNfY2FzdDxIVE1MSW1hZ2VFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICBzd2l0
Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBJbWFnZU5hbWU6ICAgICAgICAgICAgcmV0dXJuIFN0cmlu
ZyhpbWFnZS5uYW1lKCkpOwotICAgIGNhc2UgSW1hZ2VBbGlnbjogICAgICAgICAgIHJldHVybiBT
dHJpbmcoaW1hZ2UuYWxpZ24oKSk7Ci0gICAgY2FzZSBJbWFnZUFsdDogICAgICAgICAgICAgcmV0
dXJuIFN0cmluZyhpbWFnZS5hbHQoKSk7Ci0gICAgY2FzZSBJbWFnZUJvcmRlcjogICAgICAgICAg
cmV0dXJuIE51bWJlcihpbWFnZS5ib3JkZXIoKSk7Ci0gICAgY2FzZSBJbWFnZUhlaWdodDogICAg
ICAgICAgcmV0dXJuIE51bWJlcihpbWFnZS5oZWlnaHQodHJ1ZSkpOwotICAgIGNhc2UgSW1hZ2VI
c3BhY2U6ICAgICAgICAgIHJldHVybiBOdW1iZXIoaW1hZ2UuaHNwYWNlKCkpOwotICAgIGNhc2Ug
SW1hZ2VJc01hcDogICAgICAgICAgIHJldHVybiBCb29sZWFuKGltYWdlLmlzTWFwKCkpOwotICAg
IGNhc2UgSW1hZ2VMb25nRGVzYzogICAgICAgIHJldHVybiBTdHJpbmcoaW1hZ2UubG9uZ0Rlc2Mo
KSk7Ci0gICAgY2FzZSBJbWFnZVNyYzogICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpbWFnZS5z
cmMoKSk7Ci0gICAgY2FzZSBJbWFnZVVzZU1hcDogICAgICAgICAgcmV0dXJuIFN0cmluZyhpbWFn
ZS51c2VNYXAoKSk7Ci0gICAgY2FzZSBJbWFnZVZzcGFjZTogICAgICAgICAgcmV0dXJuIE51bWJl
cihpbWFnZS52c3BhY2UoKSk7Ci0gICAgY2FzZSBJbWFnZVdpZHRoOiAgICAgICAgICAgcmV0dXJu
IE51bWJlcihpbWFnZS53aWR0aCh0cnVlKSk7Ci0gICAgY2FzZSBJbWFnZVg6ICAgICAgICAgICAg
ICAgcmV0dXJuIE51bWJlcihpbWFnZS54KCkpOwotICAgIGNhc2UgSW1hZ2VZOiAgICAgICAgICAg
ICAgIHJldHVybiBOdW1iZXIoaW1hZ2UueSgpKTsKLSAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNh
c2UgSURfT0JKRUNUOiB7Ci0gICAgSFRNTE9iamVjdEVsZW1lbnRJbXBsICZvYmplY3QgPSBzdGF0
aWNfY2FzdDxIVE1MT2JqZWN0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0
b2tlbikgewotICAgIGNhc2UgT2JqZWN0Rm9ybTogICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9k
ZShleGVjLG9iamVjdC5mb3JtKCkpOyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVudAotICAgIGNhc2Ug
T2JqZWN0Q29kZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKG9iamVjdC5jb2RlKCkpOwotICAg
IGNhc2UgT2JqZWN0QWxpZ246ICAgICAgICAgICByZXR1cm4gU3RyaW5nKG9iamVjdC5hbGlnbigp
KTsKLSAgICBjYXNlIE9iamVjdEFyY2hpdmU6ICAgICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3Qu
YXJjaGl2ZSgpKTsKLSAgICBjYXNlIE9iamVjdEJvcmRlcjogICAgICAgICAgcmV0dXJuIFN0cmlu
ZyhvYmplY3QuYm9yZGVyKCkpOwotICAgIGNhc2UgT2JqZWN0Q29kZUJhc2U6ICAgICAgICByZXR1
cm4gU3RyaW5nKG9iamVjdC5jb2RlQmFzZSgpKTsKLSAgICBjYXNlIE9iamVjdENvZGVUeXBlOiAg
ICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3QuY29kZVR5cGUoKSk7Ci0gICAgY2FzZSBPYmplY3RD
b250ZW50RG9jdW1lbnQ6IHJldHVybiBjaGVja05vZGVTZWN1cml0eShleGVjLG9iamVjdC5jb250
ZW50RG9jdW1lbnQoKSkgPyAKLQkJCQkgICAgICAgZ2V0RE9NTm9kZShleGVjLCBvYmplY3QuY29u
dGVudERvY3VtZW50KCkpIDogVW5kZWZpbmVkKCk7Ci0gICAgY2FzZSBPYmplY3REYXRhOiAgICAg
ICAgICAgIHJldHVybiBTdHJpbmcob2JqZWN0LmRhdGEoKSk7Ci0gICAgY2FzZSBPYmplY3REZWNs
YXJlOiAgICAgICAgIHJldHVybiBCb29sZWFuKG9iamVjdC5kZWNsYXJlKCkpOwotICAgIGNhc2Ug
T2JqZWN0SGVpZ2h0OiAgICAgICAgICByZXR1cm4gU3RyaW5nKG9iamVjdC5oZWlnaHQoKSk7Ci0g
ICAgY2FzZSBPYmplY3RIc3BhY2U6ICAgICAgICAgIHJldHVybiBTdHJpbmcob2JqZWN0LmhzcGFj
ZSgpKTsKLSAgICBjYXNlIE9iamVjdE5hbWU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhvYmpl
Y3QubmFtZSgpKTsKLSAgICBjYXNlIE9iamVjdFN0YW5kYnk6ICAgICAgICAgcmV0dXJuIFN0cmlu
ZyhvYmplY3Quc3RhbmRieSgpKTsKLSAgICBjYXNlIE9iamVjdFRhYkluZGV4OiAgICAgICAgcmV0
dXJuIE51bWJlcihvYmplY3QudGFiSW5kZXgoKSk7Ci0gICAgY2FzZSBPYmplY3RUeXBlOiAgICAg
ICAgICAgIHJldHVybiBTdHJpbmcob2JqZWN0LnR5cGUoKSk7Ci0gICAgY2FzZSBPYmplY3RVc2VN
YXA6ICAgICAgICAgIHJldHVybiBTdHJpbmcob2JqZWN0LnVzZU1hcCgpKTsKLSAgICBjYXNlIE9i
amVjdFZzcGFjZTogICAgICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3QudnNwYWNlKCkpOwotICAg
IGNhc2UgT2JqZWN0V2lkdGg6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKG9iamVjdC53aWR0aCgp
KTsKLSAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfUEFSQU06IHsKLSAgICBIVE1MUGFy
YW1FbGVtZW50SW1wbCAmcGFyYW0gPSBzdGF0aWNfY2FzdDxIVE1MUGFyYW1FbGVtZW50SW1wbCAm
PihlbGVtZW50KTsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBQYXJhbU5hbWU6ICAg
ICAgICAgICAgcmV0dXJuIFN0cmluZyhwYXJhbS5uYW1lKCkpOwotICAgIGNhc2UgUGFyYW1UeXBl
OiAgICAgICAgICAgIHJldHVybiBTdHJpbmcocGFyYW0udHlwZSgpKTsKLSAgICBjYXNlIFBhcmFt
VmFsdWU6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHBhcmFtLnZhbHVlKCkpOwotICAgIGNhc2Ug
UGFyYW1WYWx1ZVR5cGU6ICAgICAgIHJldHVybiBTdHJpbmcocGFyYW0udmFsdWVUeXBlKCkpOwot
ICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9BUFBMRVQ6IHsKLSAgICBIVE1MQXBwbGV0
RWxlbWVudEltcGwgJmFwcGxldCA9IHN0YXRpY19jYXN0PEhUTUxBcHBsZXRFbGVtZW50SW1wbCAm
PihlbGVtZW50KTsKLSAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBBcHBsZXRBbGlnbjog
ICAgICAgICAgIHJldHVybiBTdHJpbmcoYXBwbGV0LmFsaWduKCkpOwotICAgIGNhc2UgQXBwbGV0
QWx0OiAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGFwcGxldC5hbHQoKSk7Ci0gICAgY2FzZSBB
cHBsZXRBcmNoaXZlOiAgICAgICAgIHJldHVybiBTdHJpbmcoYXBwbGV0LmFyY2hpdmUoKSk7Ci0g
ICAgY2FzZSBBcHBsZXRDb2RlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYXBwbGV0LmNvZGUo
KSk7Ci0gICAgY2FzZSBBcHBsZXRDb2RlQmFzZTogICAgICAgIHJldHVybiBTdHJpbmcoYXBwbGV0
LmNvZGVCYXNlKCkpOwotICAgIGNhc2UgQXBwbGV0SGVpZ2h0OiAgICAgICAgICByZXR1cm4gU3Ry
aW5nKGFwcGxldC5oZWlnaHQoKSk7Ci0gICAgY2FzZSBBcHBsZXRIc3BhY2U6ICAgICAgICAgIHJl
dHVybiBTdHJpbmcoYXBwbGV0LmhzcGFjZSgpKTsKLSAgICBjYXNlIEFwcGxldE5hbWU6ICAgICAg
ICAgICAgcmV0dXJuIFN0cmluZyhhcHBsZXQubmFtZSgpKTsKLSAgICBjYXNlIEFwcGxldE9iamVj
dDogICAgICAgICAgcmV0dXJuIFN0cmluZyhhcHBsZXQub2JqZWN0KCkpOwotICAgIGNhc2UgQXBw
bGV0VnNwYWNlOiAgICAgICAgICByZXR1cm4gU3RyaW5nKGFwcGxldC52c3BhY2UoKSk7Ci0gICAg
Y2FzZSBBcHBsZXRXaWR0aDogICAgICAgICAgIHJldHVybiBTdHJpbmcoYXBwbGV0LndpZHRoKCkp
OworICAgICAgICBjYXNlIEJ1dHRvbkZvcm06ICAgICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUo
ZXhlYyxidXR0b24uZm9ybSgpKTsgLy8gdHlwZSBIVE1MRm9ybUVsZW1lbnQKKyAgICAgICAgY2Fz
ZSBCdXR0b25BY2Nlc3NLZXk6ICAgICAgIHJldHVybiBTdHJpbmcoYnV0dG9uLmFjY2Vzc0tleSgp
KTsKKyAgICAgICAgY2FzZSBCdXR0b25EaXNhYmxlZDogICAgICAgIHJldHVybiBCb29sZWFuKGJ1
dHRvbi5kaXNhYmxlZCgpKTsKKyAgICAgICAgY2FzZSBCdXR0b25OYW1lOiAgICAgICAgICAgIHJl
dHVybiBTdHJpbmcoYnV0dG9uLm5hbWUoKSk7CisgICAgICAgIGNhc2UgQnV0dG9uVGFiSW5kZXg6
ICAgICAgICByZXR1cm4gTnVtYmVyKGJ1dHRvbi50YWJJbmRleCgpKTsKKyAgICAgICAgY2FzZSBC
dXR0b25UeXBlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYnV0dG9uLnR5cGUoKSk7CisgICAg
ICAgIGNhc2UgQnV0dG9uVmFsdWU6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGJ1dHRvbi52YWx1
ZSgpKTsKICAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfTUFQOiB7Ci0gICAgSFRNTE1h
cEVsZW1lbnRJbXBsICZtYXAgPSBzdGF0aWNfY2FzdDxIVE1MTWFwRWxlbWVudEltcGwgJj4oZWxl
bWVudCk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6
bGFiZWxHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRN
TExhYmVsRWxlbWVudEltcGwmIGxhYmVsID0gKnN0YXRpY19jYXN0PEhUTUxMYWJlbEVsZW1lbnRJ
bXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBNYXBBcmVhczog
ICAgICAgICAgIHJldHVybiBnZXRIVE1MQ29sbGVjdGlvbihleGVjLCBtYXAuYXJlYXMoKS5nZXQo
KSk7IC8vIHR5cGUgSFRNTENvbGxlY3Rpb24KLSAgICBjYXNlIE1hcE5hbWU6ICAgICAgICAgICAg
cmV0dXJuIFN0cmluZyhtYXAubmFtZSgpKTsKLSAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2Ug
SURfQVJFQTogewotICAgIEhUTUxBcmVhRWxlbWVudEltcGwgJmFyZWEgPSBzdGF0aWNfY2FzdDxI
VE1MQXJlYUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgIHN3aXRjaCAodG9rZW4pIHsKLSAg
ICBjYXNlIEFyZWFBY2Nlc3NLZXk6ICAgICAgIHJldHVybiBTdHJpbmcoYXJlYS5hY2Nlc3NLZXko
KSk7Ci0gICAgY2FzZSBBcmVhQWx0OiAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGFyZWEuYWx0
KCkpOwotICAgIGNhc2UgQXJlYUNvb3JkczogICAgICAgICAgcmV0dXJuIFN0cmluZyhhcmVhLmNv
b3JkcygpKTsKLSAgICBjYXNlIEFyZWFIcmVmOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYXJl
YS5ocmVmKCkpOwotICAgIGNhc2UgQXJlYUhhc2g6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZygn
IycrS1VSTChhcmVhLmhyZWYoKS5zdHJpbmcoKSkucmVmKCkpOwotICAgIGNhc2UgQXJlYUhvc3Q6
ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhLVVJMKGFyZWEuaHJlZigpLnN0cmluZygpKS5ob3N0
KCkpOwotICAgIGNhc2UgQXJlYUhvc3ROYW1lOiB7Ci0gICAgICBLVVJMIHVybChhcmVhLmhyZWYo
KS5zdHJpbmcoKSk7Ci0gICAgICBrZERlYnVnKDYwNzApIDw8ICJsaW5rOjpob3N0bmFtZSB1c2Vz
OiIgPDx1cmwudXJsKCk8PGVuZGw7Ci0gICAgICBpZiAodXJsLnBvcnQoKT09MCkKLSAgICAgICAg
cmV0dXJuIFN0cmluZyh1cmwuaG9zdCgpKTsKLSAgICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIFN0
cmluZyh1cmwuaG9zdCgpICsgIjoiICsgUVN0cmluZzo6bnVtYmVyKHVybC5wb3J0KCkpKTsKLSAg
ICB9Ci0gICAgY2FzZSBBcmVhUGF0aE5hbWU6ICAgICAgICByZXR1cm4gU3RyaW5nKEtVUkwoYXJl
YS5ocmVmKCkuc3RyaW5nKCkpLnBhdGgoKSk7Ci0gICAgY2FzZSBBcmVhUG9ydDogICAgICAgICAg
ICByZXR1cm4gU3RyaW5nKFFTdHJpbmc6Om51bWJlcihLVVJMKGFyZWEuaHJlZigpLnN0cmluZygp
KS5wb3J0KCkpKTsKLSAgICBjYXNlIEFyZWFQcm90b2NvbDogICAgICAgIHJldHVybiBTdHJpbmco
S1VSTChhcmVhLmhyZWYoKS5zdHJpbmcoKSkucHJvdG9jb2woKSsiOiIpOwotICAgIGNhc2UgQXJl
YVNlYXJjaDogICAgICAgICAgcmV0dXJuIFN0cmluZyhLVVJMKGFyZWEuaHJlZigpLnN0cmluZygp
KS5xdWVyeSgpKTsKLSAgICBjYXNlIEFyZWFOb0hyZWY6ICAgICAgICAgIHJldHVybiBCb29sZWFu
KGFyZWEubm9IcmVmKCkpOwotICAgIGNhc2UgQXJlYVNoYXBlOiAgICAgICAgICAgcmV0dXJuIFN0
cmluZyhhcmVhLnNoYXBlKCkpOwotICAgIGNhc2UgQXJlYVRhYkluZGV4OiAgICAgICAgcmV0dXJu
IE51bWJlcihhcmVhLnRhYkluZGV4KCkpOwotICAgIGNhc2UgQXJlYVRhcmdldDogICAgICAgICAg
cmV0dXJuIFN0cmluZyhhcmVhLnRhcmdldCgpKTsKLSAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNh
c2UgSURfU0NSSVBUOiB7Ci0gICAgSFRNTFNjcmlwdEVsZW1lbnRJbXBsICZzY3JpcHQgPSBzdGF0
aWNfY2FzdDxIVE1MU2NyaXB0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0
b2tlbikgewotICAgIGNhc2UgU2NyaXB0VGV4dDogICAgICAgICAgICByZXR1cm4gU3RyaW5nKHNj
cmlwdC50ZXh0KCkpOwotICAgIGNhc2UgU2NyaXB0SHRtbEZvcjogICAgICAgICByZXR1cm4gU3Ry
aW5nKHNjcmlwdC5odG1sRm9yKCkpOwotICAgIGNhc2UgU2NyaXB0RXZlbnQ6ICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKHNjcmlwdC5ldmVudCgpKTsKLSAgICBjYXNlIFNjcmlwdENoYXJzZXQ6ICAg
ICAgICAgcmV0dXJuIFN0cmluZyhzY3JpcHQuY2hhcnNldCgpKTsKLSAgICBjYXNlIFNjcmlwdERl
ZmVyOiAgICAgICAgICAgcmV0dXJuIEJvb2xlYW4oc2NyaXB0LmRlZmVyKCkpOwotICAgIGNhc2Ug
U2NyaXB0U3JjOiAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKHNjcmlwdC5zcmMoKSk7Ci0gICAg
Y2FzZSBTY3JpcHRUeXBlOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoc2NyaXB0LnR5cGUoKSk7
Ci0gICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX1RBQkxFOiB7Ci0gICAgSFRNTFRhYmxl
RWxlbWVudEltcGwgJnRhYmxlID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlRWxlbWVudEltcGwgJj4o
ZWxlbWVudCk7Ci0gICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgVGFibGVDYXB0aW9uOiAg
ICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsdGFibGUuY2FwdGlvbigpKTsgLy8gdHlwZSBI
VE1MVGFibGVDYXB0aW9uRWxlbWVudAotICAgIGNhc2UgVGFibGVUSGVhZDogICAgICAgICAgIHJl
dHVybiBnZXRET01Ob2RlKGV4ZWMsdGFibGUudEhlYWQoKSk7IC8vIHR5cGUgSFRNTFRhYmxlU2Vj
dGlvbkVsZW1lbnQKLSAgICBjYXNlIFRhYmxlVEZvb3Q6ICAgICAgICAgICByZXR1cm4gZ2V0RE9N
Tm9kZShleGVjLHRhYmxlLnRGb290KCkpOyAvLyB0eXBlIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50
Ci0gICAgY2FzZSBUYWJsZVJvd3M6ICAgICAgICAgICAgcmV0dXJuIGdldEhUTUxDb2xsZWN0aW9u
KGV4ZWMsIHRhYmxlLnJvd3MoKS5nZXQoKSk7IC8vIHR5cGUgSFRNTENvbGxlY3Rpb24KLSAgICBj
YXNlIFRhYmxlVEJvZGllczogICAgICAgICByZXR1cm4gZ2V0SFRNTENvbGxlY3Rpb24oZXhlYywg
dGFibGUudEJvZGllcygpLmdldCgpKTsgLy8gdHlwZSBIVE1MQ29sbGVjdGlvbgotICAgIGNhc2Ug
VGFibGVBbGlnbjogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGUuYWxpZ24oKSk7Ci0gICAg
Y2FzZSBUYWJsZUJnQ29sb3I6ICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZS5iZ0NvbG9yKCkp
OwotICAgIGNhc2UgVGFibGVCb3JkZXI6ICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGUuYm9y
ZGVyKCkpOwotICAgIGNhc2UgVGFibGVDZWxsUGFkZGluZzogICAgIHJldHVybiBTdHJpbmcodGFi
bGUuY2VsbFBhZGRpbmcoKSk7Ci0gICAgY2FzZSBUYWJsZUNlbGxTcGFjaW5nOiAgICAgcmV0dXJu
IFN0cmluZyh0YWJsZS5jZWxsU3BhY2luZygpKTsKLSAgICBjYXNlIFRhYmxlRnJhbWU6ICAgICAg
ICAgICByZXR1cm4gU3RyaW5nKHRhYmxlLmZyYW1lKCkpOwotICAgIGNhc2UgVGFibGVSdWxlczog
ICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGUucnVsZXMoKSk7Ci0gICAgY2FzZSBUYWJsZVN1
bW1hcnk6ICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZS5zdW1tYXJ5KCkpOwotICAgIGNhc2Ug
VGFibGVXaWR0aDogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGUud2lkdGgoKSk7CisgICAg
ICAgIGNhc2UgTGFiZWxGb3JtOiAgICAgICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsbGFi
ZWwuZm9ybSgpKTsgLy8gdHlwZSBIVE1MRm9ybUVsZW1lbnQKKyAgICAgICAgY2FzZSBMYWJlbEFj
Y2Vzc0tleTogICAgICAgcmV0dXJuIFN0cmluZyhsYWJlbC5hY2Nlc3NLZXkoKSk7CisgICAgICAg
IGNhc2UgTGFiZWxIdG1sRm9yOiAgICAgICAgIHJldHVybiBTdHJpbmcobGFiZWwuaHRtbEZvcigp
KTsKICAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfQ0FQVElPTjogewotICAgIEhUTUxU
YWJsZUNhcHRpb25FbGVtZW50SW1wbCAmdGFibGVDYXB0aW9uID0gc3RhdGljX2Nhc3Q8SFRNTFRh
YmxlQ2FwdGlvbkVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgIHJldHVybiBVbmRlZmluZWQo
KTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OmZpZWxkU2V0R2V0dGVyKEV4ZWNTdGF0ZSogZXhl
YywgaW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxGaWVsZFNldEVsZW1lbnRJbXBsJiBmaWVs
ZFNldCA9ICpzdGF0aWNfY2FzdDxIVE1MRmllbGRTZXRFbGVtZW50SW1wbCo+KGltcGwoKSk7Cisg
ICAgaWYgKHRva2VuID09IEZpZWxkU2V0Rm9ybSkKKyAgICAgICAgcmV0dXJuIGdldERPTU5vZGUo
ZXhlYyxmaWVsZFNldC5mb3JtKCkpOyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVudAorICAgIHJldHVy
biBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OmxlZ2VuZEdldHRlcihFeGVj
U3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MTGVnZW5kRWxlbWVudElt
cGwmIGxlZ2VuZCA9ICpzdGF0aWNfY2FzdDxIVE1MTGVnZW5kRWxlbWVudEltcGwqPihpbXBsKCkp
OwogICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIFRhYmxlQ2FwdGlvbkFsaWduOiAgICAg
ICByZXR1cm4gU3RyaW5nKHRhYmxlQ2FwdGlvbi5hbGlnbigpKTsKLSAgICB9Ci0gIH0KLSAgYnJl
YWs7Ci0gIGNhc2UgSURfQ09MOiB7Ci0gICAgSFRNTFRhYmxlQ29sRWxlbWVudEltcGwgJnRhYmxl
Q29sID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ29sRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0g
ICAgc3dpdGNoICh0b2tlbikgewotICAgIGNhc2UgVGFibGVDb2xBbGlnbjogICAgICAgICAgIHJl
dHVybiBTdHJpbmcodGFibGVDb2wuYWxpZ24oKSk7Ci0gICAgY2FzZSBUYWJsZUNvbENoOiAgICAg
ICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNvbC5jaCgpKTsKLSAgICBjYXNlIFRhYmxlQ29s
Q2hPZmY6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ29sLmNoT2ZmKCkpOwotICAgIGNh
c2UgVGFibGVDb2xTcGFuOiAgICAgICAgICAgIHJldHVybiBOdW1iZXIodGFibGVDb2wuc3Bhbigp
KTsKLSAgICBjYXNlIFRhYmxlQ29sVkFsaWduOiAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxl
Q29sLnZBbGlnbigpKTsKLSAgICBjYXNlIFRhYmxlQ29sV2lkdGg6ICAgICAgICAgICByZXR1cm4g
U3RyaW5nKHRhYmxlQ29sLndpZHRoKCkpOwotICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJ
RF9USEVBRDoKLSAgY2FzZSBJRF9UQk9EWToKLSAgY2FzZSBJRF9URk9PVDogewotICAgIEhUTUxU
YWJsZVNlY3Rpb25FbGVtZW50SW1wbCAmdGFibGVTZWN0aW9uID0gc3RhdGljX2Nhc3Q8SFRNTFRh
YmxlU2VjdGlvbkVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgIHN3aXRjaCAodG9rZW4pIHsK
LSAgICBjYXNlIFRhYmxlU2VjdGlvbkFsaWduOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJs
ZVNlY3Rpb24uYWxpZ24oKSk7Ci0gICAgY2FzZSBUYWJsZVNlY3Rpb25DaDogICAgICAgICAgICAg
IHJldHVybiBTdHJpbmcodGFibGVTZWN0aW9uLmNoKCkpOwotICAgIGNhc2UgVGFibGVTZWN0aW9u
Q2hPZmY6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlU2VjdGlvbi5jaE9mZigpKTsKLSAg
ICBjYXNlIFRhYmxlU2VjdGlvblZBbGlnbjogICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZVNl
Y3Rpb24udkFsaWduKCkpOwotICAgIGNhc2UgVGFibGVTZWN0aW9uUm93czogICAgICAgICAgICBy
ZXR1cm4gZ2V0SFRNTENvbGxlY3Rpb24oZXhlYywgdGFibGVTZWN0aW9uLnJvd3MoKS5nZXQoKSk7
IC8vIHR5cGUgSFRNTENvbGxlY3Rpb24KLSAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURf
VFI6IHsKLSAgIEhUTUxUYWJsZVJvd0VsZW1lbnRJbXBsICZ0YWJsZVJvdyA9IHN0YXRpY19jYXN0
PEhUTUxUYWJsZVJvd0VsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgc3dpdGNoICh0b2tlbikg
ewotICAgY2FzZSBUYWJsZVJvd1Jvd0luZGV4OiAgICAgICAgcmV0dXJuIE51bWJlcih0YWJsZVJv
dy5yb3dJbmRleCgpKTsKLSAgIGNhc2UgVGFibGVSb3dTZWN0aW9uUm93SW5kZXg6IHJldHVybiBO
dW1iZXIodGFibGVSb3cuc2VjdGlvblJvd0luZGV4KCkpOwotICAgY2FzZSBUYWJsZVJvd0NlbGxz
OiAgICAgICAgICAgcmV0dXJuIGdldEhUTUxDb2xsZWN0aW9uKGV4ZWMsIHRhYmxlUm93LmNlbGxz
KCkuZ2V0KCkpOyAvLyB0eXBlIEhUTUxDb2xsZWN0aW9uCi0gICBjYXNlIFRhYmxlUm93QWxpZ246
ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlUm93LmFsaWduKCkpOwotICAgY2FzZSBUYWJs
ZVJvd0JnQ29sb3I6ICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZVJvdy5iZ0NvbG9yKCkpOwot
ICAgY2FzZSBUYWJsZVJvd0NoOiAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZVJvdy5j
aCgpKTsKLSAgIGNhc2UgVGFibGVSb3dDaE9mZjogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFi
bGVSb3cuY2hPZmYoKSk7Ci0gICBjYXNlIFRhYmxlUm93VkFsaWduOiAgICAgICAgICByZXR1cm4g
U3RyaW5nKHRhYmxlUm93LnZBbGlnbigpKTsKLSAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJ
RF9USDoKLSAgY2FzZSBJRF9URDogewotICAgIEhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbCAmdGFi
bGVDZWxsID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsICY+KGVsZW1lbnQp
OwotICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICBjYXNlIFRhYmxlQ2VsbENlbGxJbmRleDogICAg
ICAgcmV0dXJuIE51bWJlcih0YWJsZUNlbGwuY2VsbEluZGV4KCkpOwotICAgIGNhc2UgVGFibGVD
ZWxsQWJicjogICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ2VsbC5hYmJyKCkpOwotICAg
IGNhc2UgVGFibGVDZWxsQWxpZ246ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ2VsbC5h
bGlnbigpKTsKLSAgICBjYXNlIFRhYmxlQ2VsbEF4aXM6ICAgICAgICAgICAgcmV0dXJuIFN0cmlu
Zyh0YWJsZUNlbGwuYXhpcygpKTsKLSAgICBjYXNlIFRhYmxlQ2VsbEJnQ29sb3I6ICAgICAgICAg
cmV0dXJuIFN0cmluZyh0YWJsZUNlbGwuYmdDb2xvcigpKTsKLSAgICBjYXNlIFRhYmxlQ2VsbENo
OiAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNlbGwuY2goKSk7Ci0gICAgY2FzZSBU
YWJsZUNlbGxDaE9mZjogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVDZWxsLmNoT2ZmKCkp
OwotICAgIGNhc2UgVGFibGVDZWxsQ29sU3BhbjogICAgICAgICByZXR1cm4gTnVtYmVyKHRhYmxl
Q2VsbC5jb2xTcGFuKCkpOwotICAgIGNhc2UgVGFibGVDZWxsSGVhZGVyczogICAgICAgICByZXR1
cm4gU3RyaW5nKHRhYmxlQ2VsbC5oZWFkZXJzKCkpOwotICAgIGNhc2UgVGFibGVDZWxsSGVpZ2h0
OiAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ2VsbC5oZWlnaHQoKSk7Ci0gICAgY2FzZSBU
YWJsZUNlbGxOb1dyYXA6ICAgICAgICAgIHJldHVybiBCb29sZWFuKHRhYmxlQ2VsbC5ub1dyYXAo
KSk7Ci0gICAgY2FzZSBUYWJsZUNlbGxSb3dTcGFuOiAgICAgICAgIHJldHVybiBOdW1iZXIodGFi
bGVDZWxsLnJvd1NwYW4oKSk7Ci0gICAgY2FzZSBUYWJsZUNlbGxTY29wZTogICAgICAgICAgIHJl
dHVybiBTdHJpbmcodGFibGVDZWxsLnNjb3BlKCkpOwotICAgIGNhc2UgVGFibGVDZWxsVkFsaWdu
OiAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ2VsbC52QWxpZ24oKSk7Ci0gICAgY2FzZSBU
YWJsZUNlbGxXaWR0aDogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVDZWxsLndpZHRoKCkp
OworICAgICAgICBjYXNlIExlZ2VuZEZvcm06ICAgICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUo
ZXhlYyxsZWdlbmQuZm9ybSgpKTsgLy8gdHlwZSBIVE1MRm9ybUVsZW1lbnQKKyAgICAgICAgY2Fz
ZSBMZWdlbmRBY2Nlc3NLZXk6ICAgICAgIHJldHVybiBTdHJpbmcobGVnZW5kLmFjY2Vzc0tleSgp
KTsKKyAgICAgICAgY2FzZSBMZWdlbmRBbGlnbjogICAgICAgICAgIHJldHVybiBTdHJpbmcobGVn
ZW5kLmFsaWduKCkpOwogICAgIH0KLSAgfQotICBicmVhazsKLSAgY2FzZSBJRF9GUkFNRVNFVDog
ewotICAgIEhUTUxGcmFtZVNldEVsZW1lbnRJbXBsICZmcmFtZVNldCA9IHN0YXRpY19jYXN0PEhU
TUxGcmFtZVNldEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgIHJldHVybiBVbmRlZmluZWQo
KTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OnVMaXN0R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywg
aW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxVTGlzdEVsZW1lbnRJbXBsJiB1TGlzdCA9ICpz
dGF0aWNfY2FzdDxIVE1MVUxpc3RFbGVtZW50SW1wbCo+KGltcGwoKSk7CiAgICAgc3dpdGNoICh0
b2tlbikgewotICAgIGNhc2UgRnJhbWVTZXRDb2xzOiAgICAgICAgICAgIHJldHVybiBTdHJpbmco
ZnJhbWVTZXQuY29scygpKTsKLSAgICBjYXNlIEZyYW1lU2V0Um93czogICAgICAgICAgICByZXR1
cm4gU3RyaW5nKGZyYW1lU2V0LnJvd3MoKSk7Ci0gICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNl
IElEX0ZSQU1FOiB7Ci0gICAgSFRNTEZyYW1lRWxlbWVudEltcGwgJmZyYW1lRWxlbWVudCA9IHN0
YXRpY19jYXN0PEhUTUxGcmFtZUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgIHN3aXRjaCAo
dG9rZW4pIHsKLSAgICBjYXNlIEZyYW1lQ29udGVudERvY3VtZW50OiByZXR1cm4gY2hlY2tOb2Rl
U2VjdXJpdHkoZXhlYyxmcmFtZUVsZW1lbnQuY29udGVudERvY3VtZW50KCkpID8gCi0JCQkJICAg
ICAgZ2V0RE9NTm9kZShleGVjLCBmcmFtZUVsZW1lbnQuY29udGVudERvY3VtZW50KCkpIDogVW5k
ZWZpbmVkKCk7Ci0gICAgY2FzZSBGcmFtZUNvbnRlbnRXaW5kb3c6ICAgcmV0dXJuIGNoZWNrTm9k
ZVNlY3VyaXR5KGV4ZWMsZnJhbWVFbGVtZW50LmNvbnRlbnREb2N1bWVudCgpKQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBXaW5kb3c6OnJldHJpZXZlKGZyYW1lRWxlbWVu
dC5jb250ZW50UGFydCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBV
bmRlZmluZWQoKTsKLSAgICBjYXNlIEZyYW1lRnJhbWVCb3JkZXI6ICAgICByZXR1cm4gU3RyaW5n
KGZyYW1lRWxlbWVudC5mcmFtZUJvcmRlcigpKTsKLSAgICBjYXNlIEZyYW1lTG9uZ0Rlc2M6ICAg
ICAgICByZXR1cm4gU3RyaW5nKGZyYW1lRWxlbWVudC5sb25nRGVzYygpKTsKLSAgICBjYXNlIEZy
YW1lTWFyZ2luSGVpZ2h0OiAgICByZXR1cm4gU3RyaW5nKGZyYW1lRWxlbWVudC5tYXJnaW5IZWln
aHQoKSk7Ci0gICAgY2FzZSBGcmFtZU1hcmdpbldpZHRoOiAgICAgcmV0dXJuIFN0cmluZyhmcmFt
ZUVsZW1lbnQubWFyZ2luV2lkdGgoKSk7Ci0gICAgY2FzZSBGcmFtZU5hbWU6ICAgICAgICAgICAg
cmV0dXJuIFN0cmluZyhmcmFtZUVsZW1lbnQubmFtZSgpKTsKLSAgICBjYXNlIEZyYW1lTm9SZXNp
emU6ICAgICAgICByZXR1cm4gQm9vbGVhbihmcmFtZUVsZW1lbnQubm9SZXNpemUoKSk7Ci0gICAg
Y2FzZSBGcmFtZVNjcm9sbGluZzogICAgICAgcmV0dXJuIFN0cmluZyhmcmFtZUVsZW1lbnQuc2Ny
b2xsaW5nKCkpOwotICAgIGNhc2UgRnJhbWVTcmM6Ci0gICAgY2FzZSBGcmFtZUxvY2F0aW9uOiAg
ICAgICAgcmV0dXJuIFN0cmluZyhmcmFtZUVsZW1lbnQuc3JjKCkpOwotICAgIH0KLSAgfQotICBi
cmVhazsKLSAgY2FzZSBJRF9JRlJBTUU6IHsKLSAgICBIVE1MSUZyYW1lRWxlbWVudEltcGwgJmlG
cmFtZSA9IHN0YXRpY19jYXN0PEhUTUxJRnJhbWVFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAg
ICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgY2FzZSBJRnJhbWVBbGlnbjogICAgICAgICAgICAgICAg
cmV0dXJuIFN0cmluZyhpRnJhbWUuYWxpZ24oKSk7Ci0gICAgICAvLyAjIyMgc2VjdXJpdHkgY2hl
Y2sgPwotICAgIGNhc2UgSUZyYW1lRG9jdW1lbnQ6IC8vIG5vbi1zdGFuZGFyZCwgbWFwcGVkIHRv
IGNvbnRlbnREb2N1bWVudAotICAgIGNhc2UgSUZyYW1lQ29udGVudERvY3VtZW50OiByZXR1cm4g
Y2hlY2tOb2RlU2VjdXJpdHkoZXhlYyxpRnJhbWUuY29udGVudERvY3VtZW50KCkpID8gCi0JCQkJ
ICBnZXRET01Ob2RlKGV4ZWMsIGlGcmFtZS5jb250ZW50RG9jdW1lbnQoKSkgOiBVbmRlZmluZWQo
KTsKLSAgICBjYXNlIElGcmFtZUNvbnRlbnRXaW5kb3c6CXJldHVybiBjaGVja05vZGVTZWN1cml0
eShleGVjLGlGcmFtZS5jb250ZW50RG9jdW1lbnQoKSkgCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA/IFdpbmRvdzo6cmV0cmlldmUoaUZyYW1lLmNvbnRlbnRQYXJ0KCkpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFVuZGVmaW5lZCgpOwotICAgIGNh
c2UgSUZyYW1lRnJhbWVCb3JkZXI6ICAgICByZXR1cm4gU3RyaW5nKGlGcmFtZS5mcmFtZUJvcmRl
cigpKTsKLSAgICBjYXNlIElGcmFtZUhlaWdodDogICAgICAgICAgcmV0dXJuIFN0cmluZyhpRnJh
bWUuaGVpZ2h0KCkpOwotICAgIGNhc2UgSUZyYW1lTG9uZ0Rlc2M6ICAgICAgICByZXR1cm4gU3Ry
aW5nKGlGcmFtZS5sb25nRGVzYygpKTsKLSAgICBjYXNlIElGcmFtZU1hcmdpbkhlaWdodDogICAg
cmV0dXJuIFN0cmluZyhpRnJhbWUubWFyZ2luSGVpZ2h0KCkpOwotICAgIGNhc2UgSUZyYW1lTWFy
Z2luV2lkdGg6ICAgICByZXR1cm4gU3RyaW5nKGlGcmFtZS5tYXJnaW5XaWR0aCgpKTsKLSAgICBj
YXNlIElGcmFtZU5hbWU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhpRnJhbWUubmFtZSgpKTsK
LSAgICBjYXNlIElGcmFtZVNjcm9sbGluZzogICAgICAgcmV0dXJuIFN0cmluZyhpRnJhbWUuc2Ny
b2xsaW5nKCkpOwotICAgIGNhc2UgSUZyYW1lU3JjOiAgICAgICAgICAgICByZXR1cm4gU3RyaW5n
KGlGcmFtZS5zcmMoKSk7Ci0gICAgY2FzZSBJRnJhbWVXaWR0aDogICAgICAgICAgIHJldHVybiBT
dHJpbmcoaUZyYW1lLndpZHRoKCkpOworICAgICAgICBjYXNlIFVMaXN0Q29tcGFjdDogICAgICAg
ICByZXR1cm4gQm9vbGVhbih1TGlzdC5jb21wYWN0KCkpOworICAgICAgICBjYXNlIFVMaXN0VHlw
ZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKHVMaXN0LnR5cGUoKSk7CiAgICAgfQotICAgIGJy
ZWFrOwotICB9Ci0gIH0gLy8geGVtYWNzIChvciBhcm50KSBjb3VsZCBiZSBhIGJpdCBzbWFydGVy
IHdoZW4gaXQgY29tZXMgdG8gaW5kZW50aW5nIHN3aXRjaCgpZXMgOykKLSAgLy8gaXRzIG5vdCBh
cm50IHRvIGJsYW1lIC0gaXRzIHRoZSBvcmlnaW5hbCBTdHJvdXN0cnVwIHN0eWxlIHdlIGxpa2Ug
OikgKERpcmspCi0KLSAgLy8gZ2VuZXJpYyBwcm9wZXJ0aWVzCi0gIHN3aXRjaCAodG9rZW4pIHsK
LSAgY2FzZSBFbGVtZW50SWQ6Ci0gICAgICAvLyBpaHQuY29tIHJlbGllcyBvbiB0aGlzIHZhbHVl
IGJlaW5nICIiIHdoZW4gbm8gaWQgaXMgcHJlc2VudC4gIE90aGVyIGJyb3dzZXJzIGRvIHRoaXMg
YXMgd2VsbC4KLSAgICAgIC8vIFNvIHdlIHVzZSBTdHJpbmcoKSBpbnN0ZWFkIG9mIFN0cmluZygp
IGhlcmUuCi0gICAgcmV0dXJuIFN0cmluZyhlbGVtZW50LmlkRE9NKCkpOwotICBjYXNlIEVsZW1l
bnRUaXRsZToKLSAgICByZXR1cm4gU3RyaW5nKGVsZW1lbnQudGl0bGUoKSk7Ci0gIGNhc2UgRWxl
bWVudExhbmc6Ci0gICAgcmV0dXJuIFN0cmluZyhlbGVtZW50LmxhbmcoKSk7Ci0gIGNhc2UgRWxl
bWVudERpcjoKLSAgICByZXR1cm4gU3RyaW5nKGVsZW1lbnQuZGlyKCkpOwotICBjYXNlIEVsZW1l
bnRDbGFzc05hbWU6Ci0gICAgcmV0dXJuIFN0cmluZyhlbGVtZW50LmNsYXNzTmFtZSgpKTsKLSAg
Y2FzZSBFbGVtZW50SW5uZXJIVE1MOgotICAgIHJldHVybiBTdHJpbmcoZWxlbWVudC5pbm5lckhU
TUwoKSk7Ci0gIGNhc2UgRWxlbWVudElubmVyVGV4dDoKLSAgICBpZiAoRG9jdW1lbnRJbXBsKiBk
b2MgPSBpbXBsKCktPmdldERvY3VtZW50KCkpCi0gICAgICBkb2MtPnVwZGF0ZUxheW91dElnbm9y
ZVBlbmRpbmdTdHlsZXNoZWV0cygpOwotICAgIHJldHVybiBTdHJpbmcoZWxlbWVudC5pbm5lclRl
eHQoKSk7Ci0gIGNhc2UgRWxlbWVudE91dGVySFRNTDoKLSAgICByZXR1cm4gU3RyaW5nKGVsZW1l
bnQub3V0ZXJIVE1MKCkpOwotICBjYXNlIEVsZW1lbnRPdXRlclRleHQ6Ci0gICAgcmV0dXJuIFN0
cmluZyhlbGVtZW50Lm91dGVyVGV4dCgpKTsKLSAgY2FzZSBFbGVtZW50RG9jdW1lbnQ6Ci0gICAg
cmV0dXJuIGdldERPTU5vZGUoZXhlYyxlbGVtZW50Lm93bmVyRG9jdW1lbnQoKSk7Ci0gIGNhc2Ug
RWxlbWVudENoaWxkcmVuOgotICAgIHJldHVybiBnZXRIVE1MQ29sbGVjdGlvbihleGVjLCBlbGVt
ZW50LmNoaWxkcmVuKCkuZ2V0KCkpOwotICBjYXNlIEVsZW1lbnRDb250ZW50RWRpdGFibGU6Ci0g
ICAgcmV0dXJuIFN0cmluZyhlbGVtZW50LmNvbnRlbnRFZGl0YWJsZSgpKTsKLSAgY2FzZSBFbGVt
ZW50SXNDb250ZW50RWRpdGFibGU6Ci0gICAgcmV0dXJuIEJvb2xlYW4oZWxlbWVudC5pc0NvbnRl
bnRFZGl0YWJsZSgpKTsKLSAgLy8gIyMjIHdoYXQgYWJvdXQgc3R5bGU/IG9yIGlzIHRoaXMgdXNl
ZCBpbnN0ZWFkIGZvciBET00yIHN0eWxlc2hlZXRzPwotICB9Ci0gIGtkV2FybmluZygpIDw8ICJI
VE1MRWxlbWVudDo6Z2V0VmFsdWVQcm9wZXJ0eSB1bmhhbmRsZWQgdG9rZW4gIiA8PCB0b2tlbiA8
PCBlbmRsOwotICByZXR1cm4gVW5kZWZpbmVkKCk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwog
fQogCi1ib29sIEtKUzo6SFRNTEVsZW1lbnQ6Omhhc093blByb3BlcnR5KEV4ZWNTdGF0ZSAqZXhl
YywgY29uc3QgSWRlbnRpZmllciAmcHJvcGVydHlOYW1lKSBjb25zdAorVmFsdWUgSFRNTEVsZW1l
bnQ6Om9MaXN0R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAogewotI2lm
ZGVmIEtKU19WRVJCT1NFCi0gIC8va2REZWJ1Zyg2MDcwKSA8PCAiSFRNTEVsZW1lbnQ6Omhhc1By
b3BlcnR5ICIgPDwgcHJvcGVydHlOYW1lLnFzdHJpbmcoKSA8PCBlbmRsOwotI2VuZGlmCi0gIEhU
TUxFbGVtZW50SW1wbCAmZWxlbWVudCA9ICpzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwgKj4o
aW1wbCgpKTsKLSAgLy8gRmlyc3QgbG9vayBhdCBkeW5hbWljIHByb3BlcnRpZXMgLSBrZWVwIHRo
aXMgaW4gc3luYyB3aXRoIHRyeUdldAotICBzd2l0Y2ggKGVsZW1lbnQuaWQoKSkgewotICAgIGNh
c2UgSURfRk9STTogewotICAgICAgSFRNTEZvcm1FbGVtZW50SW1wbCAmZm9ybSA9IHN0YXRpY19j
YXN0PEhUTUxGb3JtRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICAvLyBDaGVjayBpZiB3
ZSdyZSByZXRyaWV2aW5nIGFuIGVsZW1lbnQgKGJ5IGluZGV4IG9yIGJ5IG5hbWUpCi0gICAgICBi
b29sIG9rOwotICAgICAgdWludCB1ID0gcHJvcGVydHlOYW1lLnRvVUxvbmcoJm9rKTsKLSAgICAg
IGlmIChvayAmJiBmb3JtLmVsZW1lbnRzKCktPml0ZW0odSkpCi0gICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgaWYgKGZvcm0uZWxlbWVudHMoKS0+bmFtZWRJdGVtKHByb3BlcnR5TmFtZS5zdHJp
bmcoKSkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNh
c2UgSURfU0VMRUNUOiB7Ci0gICAgICBIVE1MU2VsZWN0RWxlbWVudEltcGwgJnNlbGVjdCA9IHN0
YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIGJvb2wg
b2s7Ci0gICAgICB1aW50IHUgPSBwcm9wZXJ0eU5hbWUudG9VTG9uZygmb2spOwotICAgICAgaWYg
KG9rICYmIHNlbGVjdC5vcHRpb25zSFRNTENvbGxlY3Rpb24oKS0+aXRlbSh1KSkKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBJRF9JTlBVVDogewot
ICAgICAgSFRNTElucHV0RWxlbWVudEltcGwgJmlucHV0ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0
RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBjb25zdCBIYXNoVGFibGUqIHRhYmxlID0g
Y2xhc3NJbmZvKCktPnByb3BIYXNoVGFibGU7Ci0gICAgICBjb25zdCBIYXNoRW50cnkqIGVudHJ5
ID0gTG9va3VwOjpmaW5kRW50cnkodGFibGUsIHByb3BlcnR5TmFtZSk7Ci0gICAgICBpZiAoZW50
cnkpIHsKLSAgICAgICAgc3dpdGNoKGVudHJ5LT52YWx1ZSkgewotICAgICAgICAgIGNhc2UgSW5w
dXRTZWxlY3Rpb25TdGFydDoKLSAgICAgICAgICBjYXNlIElucHV0U2VsZWN0aW9uRW5kOgotICAg
ICAgICAgIGNhc2UgSW5wdXRTZXRTZWxlY3Rpb25SYW5nZToKLSAgICAgICAgICAgIHJldHVybiBp
bnB1dC5jYW5IYXZlU2VsZWN0aW9uKCk7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBicmVhazsKKyAgICBIVE1MT0xpc3RF
bGVtZW50SW1wbCYgb0xpc3QgPSAqc3RhdGljX2Nhc3Q8SFRNTE9MaXN0RWxlbWVudEltcGwqPihp
bXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBPTGlzdENvbXBhY3Q6
ICAgICAgICAgcmV0dXJuIEJvb2xlYW4ob0xpc3QuY29tcGFjdCgpKTsKKyAgICAgICAgY2FzZSBP
TGlzdFN0YXJ0OiAgICAgICAgICAgcmV0dXJuIE51bWJlcihvTGlzdC5zdGFydCgpKTsKKyAgICAg
ICAgY2FzZSBPTGlzdFR5cGU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhvTGlzdC50eXBlKCkp
OwogICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0KLQotICByZXR1cm4gRE9N
RWxlbWVudDo6aGFzT3duUHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lKTsKKyAgICByZXR1cm4g
VW5kZWZpbmVkKCk7CiB9CiAKLVVTdHJpbmcgS0pTOjpIVE1MRWxlbWVudDo6dG9TdHJpbmcoRXhl
Y1N0YXRlICpleGVjKSBjb25zdAorVmFsdWUgSFRNTEVsZW1lbnQ6OmRMaXN0R2V0dGVyKEV4ZWNT
dGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAogewotICBpZiAoaW1wbCgpLT5pZCgpID09IElE
X0EpCi0gICAgcmV0dXJuIFVTdHJpbmcoc3RhdGljX2Nhc3Q8Y29uc3QgSFRNTEFuY2hvckVsZW1l
bnRJbXBsICo+KGltcGwoKSktPmhyZWYoKSk7Ci0gIGVsc2UKLSAgICByZXR1cm4gRE9NRWxlbWVu
dDo6dG9TdHJpbmcoZXhlYyk7CisgICAgSFRNTERMaXN0RWxlbWVudEltcGwmIGRMaXN0ID0gKnN0
YXRpY19jYXN0PEhUTUxETGlzdEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBpZiAodG9rZW4g
PT0gRExpc3RDb21wYWN0KQorICAgICAgICByZXR1cm4gQm9vbGVhbihkTGlzdC5jb21wYWN0KCkp
OworICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAotc3RhdGljIEhUTUxGb3JtRWxlbWVudElt
cGwgKmdldEZvcm0oSFRNTEVsZW1lbnRJbXBsICplbGVtZW50KQorVmFsdWUgSFRNTEVsZW1lbnQ6
OmRpckdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKLSAgaWYgKGVs
ZW1lbnQtPmlzR2VuZXJpY0Zvcm1FbGVtZW50KCkpCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEhU
TUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsICo+KGVsZW1lbnQpLT5mb3JtKCk7Ci0KLSAgc3dpdGNo
IChlbGVtZW50LT5pZCgpKSB7Ci0gICAgY2FzZSBJRF9MQUJFTDoKLSAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxIVE1MTGFiZWxFbGVtZW50SW1wbCAqPihlbGVtZW50KS0+Zm9ybSgpOwotICAgIGNh
c2UgSURfT0JKRUNUOgotICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxPYmplY3RFbGVtZW50
SW1wbCAqPihlbGVtZW50KS0+Zm9ybSgpOwotICB9Ci0KLSAgcmV0dXJuIDA7CisgICAgSFRNTERp
cmVjdG9yeUVsZW1lbnRJbXBsJiBkaXIgPSAqc3RhdGljX2Nhc3Q8SFRNTERpcmVjdG9yeUVsZW1l
bnRJbXBsKj4oaW1wbCgpKTsKKyAgICBpZiAodG9rZW4gPT0gRGlyZWN0b3J5Q29tcGFjdCkKKyAg
ICAgICAgcmV0dXJuIEJvb2xlYW4oZGlyLmNvbXBhY3QoKSk7CisgICAgcmV0dXJuIFVuZGVmaW5l
ZCgpOwogfQogCi12b2lkIEtKUzo6SFRNTEVsZW1lbnQ6OnB1c2hFdmVudEhhbmRsZXJTY29wZShF
eGVjU3RhdGUgKmV4ZWMsIFNjb3BlQ2hhaW4gJnNjb3BlKSBjb25zdAorVmFsdWUgSFRNTEVsZW1l
bnQ6Om1lbnVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0CiB7Ci0gIEhU
TUxFbGVtZW50SW1wbCAqZWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCAqPihp
bXBsKCkpOworICAgIEhUTUxNZW51RWxlbWVudEltcGwmIG1lbnUgPSAqc3RhdGljX2Nhc3Q8SFRN
TE1lbnVFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IE1lbnVDb21wYWN0
KQorICAgICAgICByZXR1cm4gQm9vbGVhbihtZW51LmNvbXBhY3QoKSk7CisgICAgcmV0dXJuIFVu
ZGVmaW5lZCgpOworfQogCi0gIC8vIFRoZSBkb2N1bWVudCBpcyBwdXQgb24gZmlyc3QsIGZhbGwg
YmFjayB0byBzZWFyY2hpbmcgaXQgb25seSBhZnRlciB0aGUgZWxlbWVudCBhbmQgZm9ybS4KLSAg
c2NvcGUucHVzaChzdGF0aWNfY2FzdDxPYmplY3RJbXAgKj4oZ2V0RE9NTm9kZShleGVjLCBlbGVt
ZW50LT5vd25lckRvY3VtZW50KCkpKSk7CitWYWx1ZSBIVE1MRWxlbWVudDo6bGlHZXR0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTExJRWxlbWVudEltcGwm
IGxpID0gKnN0YXRpY19jYXN0PEhUTUxMSUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0
Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgTElUeXBlOiAgICAgICAgICAgIHJldHVybiBTdHJp
bmcobGkudHlwZSgpKTsKKyAgICAgICAgY2FzZSBMSVZhbHVlOiAgICAgICAgICAgcmV0dXJuIE51
bWJlcihsaS52YWx1ZSgpKTsKKyAgICB9CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitW
YWx1ZSBIVE1MRWxlbWVudDo6ZGl2R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBj
b25zdAoreworICAgIEhUTUxEaXZFbGVtZW50SW1wbCYgZGl2ID0gKnN0YXRpY19jYXN0PEhUTUxE
aXZFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IERpdkFsaWduKQorICAg
ICAgICByZXR1cm4gU3RyaW5nKGRpdi5hbGlnbigpKTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7
Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50OjpwYXJhZ3JhcGhHZXR0ZXIoRXhlY1N0YXRlKiBleGVj
LCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTFBhcmFncmFwaEVsZW1lbnRJbXBsJiBwID0g
KnN0YXRpY19jYXN0PEhUTUxQYXJhZ3JhcGhFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYg
KHRva2VuID09IFBhcmFncmFwaEFsaWduKQorICAgICAgICByZXR1cm4gU3RyaW5nKHAuYWxpZ24o
KSk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6aGVh
ZGluZ0dldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1M
SGVhZGluZ0VsZW1lbnRJbXBsJiBoID0gKnN0YXRpY19jYXN0PEhUTUxIZWFkaW5nRWxlbWVudElt
cGwqPihpbXBsKCkpOworICAgIGlmICh0b2tlbiA9PSBIZWFkaW5nQWxpZ24pCisgICAgICAgIHJl
dHVybiBTdHJpbmcoaC5hbGlnbigpKTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1Zh
bHVlIEhUTUxFbGVtZW50OjpibG9ja1F1b3RlR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRv
a2VuKSBjb25zdAoreworICAgIEhUTUxCbG9ja3F1b3RlRWxlbWVudEltcGwmIGJsb2NrUXVvdGUg
PSAqc3RhdGljX2Nhc3Q8SFRNTEJsb2NrcXVvdGVFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAg
aWYgKHRva2VuID09IEJsb2NrUXVvdGVDaXRlKQorICAgICAgICByZXR1cm4gU3RyaW5nKGJsb2Nr
UXVvdGUuY2l0ZSgpKTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxF
bGVtZW50OjpxdW90ZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sK
KyAgICBIVE1MUXVvdGVFbGVtZW50SW1wbCYgcXVvdGUgPSAqc3RhdGljX2Nhc3Q8SFRNTFF1b3Rl
RWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIGlmICh0b2tlbiA9PSBRdW90ZUNpdGUpCisgICAg
ICAgIHJldHVybiBTdHJpbmcocXVvdGUuY2l0ZSgpKTsKKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7
Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50OjpwcmVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQg
dG9rZW4pIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciAnd3JhcCcgd2hl
biB3aGl0ZS1zcGFjZTogcHJlLXdyYXAgaXMgaW1wbGVtZW50ZWQuCisgICAgSFRNTFByZUVsZW1l
bnRJbXBsJiBwcmUgPSAqc3RhdGljX2Nhc3Q8SFRNTFByZUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsK
KyAgICBpZiAodG9rZW4gPT0gUHJlV2lkdGgpCisgICAgICAgIHJldHVybiBOdW1iZXIocHJlLndp
ZHRoKCkpOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6
OmJyR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxC
UkVsZW1lbnRJbXBsJiBiciA9ICpzdGF0aWNfY2FzdDxIVE1MQlJFbGVtZW50SW1wbCo+KGltcGwo
KSk7CisgICAgaWYgKHRva2VuID09IEJSQ2xlYXIpCisgICAgICAgIHJldHVybiBTdHJpbmcoYnIu
Y2xlYXIoKSk7CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVu
dDo6YmFzZUZvbnRHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7Cisg
ICAgSFRNTEJhc2VGb250RWxlbWVudEltcGwmIGJhc2VGb250ID0gKnN0YXRpY19jYXN0PEhUTUxC
YXNlRm9udEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAg
ICAgIGNhc2UgQmFzZUZvbnRDb2xvcjogICAgICAgICAgIHJldHVybiBTdHJpbmcoYmFzZUZvbnQu
Y29sb3IoKSk7CisgICAgICAgIGNhc2UgQmFzZUZvbnRGYWNlOiAgICAgICAgICAgIHJldHVybiBT
dHJpbmcoYmFzZUZvbnQuZmFjZSgpKTsKKyAgICAgICAgY2FzZSBCYXNlRm9udFNpemU6ICAgICAg
ICAgICAgcmV0dXJuIFN0cmluZyhiYXNlRm9udC5zaXplKCkpOworICAgIH0KKyAgICByZXR1cm4g
VW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50Ojpmb250R2V0dGVyKEV4ZWNTdGF0
ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxGb250RWxlbWVudEltcGwmIGZv
bnQgPSAqc3RhdGljX2Nhc3Q8SFRNTEZvbnRFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dp
dGNoICh0b2tlbikgeworICAgICAgICBjYXNlIEZvbnRDb2xvcjogICAgICAgICAgIHJldHVybiBT
dHJpbmcoZm9udC5jb2xvcigpKTsKKyAgICAgICAgY2FzZSBGb250RmFjZTogICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKGZvbnQuZmFjZSgpKTsKKyAgICAgICAgY2FzZSBGb250U2l6ZTogICAgICAg
ICAgICByZXR1cm4gU3RyaW5nKGZvbnQuc2l6ZSgpKTsKKyAgICB9CisgICAgcmV0dXJuIFVuZGVm
aW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6aHJHZXR0ZXIoRXhlY1N0YXRlKiBleGVj
LCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTEhSRWxlbWVudEltcGwmIGhyID0gKnN0YXRp
Y19jYXN0PEhUTUxIUkVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7
CisgICAgICAgIGNhc2UgSFJBbGlnbjogICAgICAgICAgIHJldHVybiBTdHJpbmcoaHIuYWxpZ24o
KSk7CisgICAgICAgIGNhc2UgSFJOb1NoYWRlOiAgICAgICAgIHJldHVybiBCb29sZWFuKGhyLm5v
U2hhZGUoKSk7CisgICAgICAgIGNhc2UgSFJTaXplOiAgICAgICAgICAgIHJldHVybiBTdHJpbmco
aHIuc2l6ZSgpKTsKKyAgICAgICAgY2FzZSBIUldpZHRoOiAgICAgICAgICAgcmV0dXJuIFN0cmlu
Zyhoci53aWR0aCgpKTsKKyAgICB9CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1
ZSBIVE1MRWxlbWVudDo6bW9kR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25z
dAoreworICAgIEhUTUxNb2RFbGVtZW50SW1wbCYgbW9kID0gKnN0YXRpY19jYXN0PEhUTUxNb2RF
bGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNl
IE1vZENpdGU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhtb2QuY2l0ZSgpKTsKKyAgICAgICAg
Y2FzZSBNb2REYXRlVGltZTogICAgICAgIHJldHVybiBTdHJpbmcobW9kLmRhdGVUaW1lKCkpOwor
ICAgIH0KKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50Ojph
bmNob3JHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRN
TEFuY2hvckVsZW1lbnRJbXBsJiBhbmNob3IgPSAqc3RhdGljX2Nhc3Q8SFRNTEFuY2hvckVsZW1l
bnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgQW5j
aG9yQWNjZXNzS2V5OiAgICAgICByZXR1cm4gU3RyaW5nKGFuY2hvci5hY2Nlc3NLZXkoKSk7Cisg
ICAgICAgIGNhc2UgQW5jaG9yQ2hhcnNldDogICAgICAgICByZXR1cm4gU3RyaW5nKGFuY2hvci5j
aGFyc2V0KCkpOworICAgICAgICBjYXNlIEFuY2hvckNvb3JkczogICAgICAgICAgcmV0dXJuIFN0
cmluZyhhbmNob3IuY29vcmRzKCkpOworICAgICAgICBjYXNlIEFuY2hvckhyZWY6ICAgICAgICAg
ICAgcmV0dXJuIFN0cmluZyhhbmNob3IuaHJlZigpKTsKKyAgICAgICAgY2FzZSBBbmNob3JIcmVm
TGFuZzogICAgICAgIHJldHVybiBTdHJpbmcoYW5jaG9yLmhyZWZsYW5nKCkpOworICAgICAgICBj
YXNlIEFuY2hvckhhc2g6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZygnIycrS1VSTChhbmNob3Iu
aHJlZigpLnN0cmluZygpKS5yZWYoKSk7CisgICAgICAgIGNhc2UgQW5jaG9ySG9zdDogICAgICAg
ICAgICByZXR1cm4gU3RyaW5nKEtVUkwoYW5jaG9yLmhyZWYoKS5zdHJpbmcoKSkuaG9zdCgpKTsK
KyAgICAgICAgY2FzZSBBbmNob3JIb3N0bmFtZTogeworICAgICAgICAgICAgS1VSTCB1cmwoYW5j
aG9yLmhyZWYoKS5zdHJpbmcoKSk7CisgICAgICAgICAgICBrZERlYnVnKDYwNzApIDw8ICJhbmNo
b3I6Omhvc3RuYW1lIHVzZXM6IiA8PHVybC51cmwoKTw8ZW5kbDsKKyAgICAgICAgICAgIGlmICh1
cmwucG9ydCgpPT0wKQorICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcodXJsLmhvc3QoKSk7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh1cmwuaG9z
dCgpICsgIjoiICsgUVN0cmluZzo6bnVtYmVyKHVybC5wb3J0KCkpKTsKKyAgICAgICAgfQorICAg
ICAgICBjYXNlIEFuY2hvclBhdGhOYW1lOiAgICAgICAgcmV0dXJuIFN0cmluZyhLVVJMKGFuY2hv
ci5ocmVmKCkuc3RyaW5nKCkpLnBhdGgoKSk7CisgICAgICAgIGNhc2UgQW5jaG9yUG9ydDogICAg
ICAgICAgICByZXR1cm4gU3RyaW5nKFFTdHJpbmc6Om51bWJlcihLVVJMKGFuY2hvci5ocmVmKCku
c3RyaW5nKCkpLnBvcnQoKSkpOworICAgICAgICBjYXNlIEFuY2hvclByb3RvY29sOiAgICAgICAg
cmV0dXJuIFN0cmluZyhLVVJMKGFuY2hvci5ocmVmKCkuc3RyaW5nKCkpLnByb3RvY29sKCkrIjoi
KTsKKyAgICAgICAgY2FzZSBBbmNob3JTZWFyY2g6ICAgICAgICAgIHJldHVybiBTdHJpbmcoS1VS
TChhbmNob3IuaHJlZigpLnN0cmluZygpKS5xdWVyeSgpKTsKKyAgICAgICAgY2FzZSBBbmNob3JO
YW1lOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYW5jaG9yLm5hbWUoKSk7CisgICAgICAgIGNh
c2UgQW5jaG9yUmVsOiAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGFuY2hvci5yZWwoKSk7Cisg
ICAgICAgIGNhc2UgQW5jaG9yUmV2OiAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGFuY2hvci5y
ZXYoKSk7CisgICAgICAgIGNhc2UgQW5jaG9yU2hhcGU6ICAgICAgICAgICByZXR1cm4gU3RyaW5n
KGFuY2hvci5zaGFwZSgpKTsKKyAgICAgICAgY2FzZSBBbmNob3JUYWJJbmRleDogICAgICAgIHJl
dHVybiBOdW1iZXIoYW5jaG9yLnRhYkluZGV4KCkpOworICAgICAgICBjYXNlIEFuY2hvclRhcmdl
dDogICAgICAgICAgcmV0dXJuIFN0cmluZyhhbmNob3IudGFyZ2V0KCkpOworICAgICAgICBjYXNl
IEFuY2hvclR5cGU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhhbmNob3IudHlwZSgpKTsKKyAg
ICAgICAgY2FzZSBBbmNob3JUZXh0OgorICAgICAgICAgICAgaWYgKERvY3VtZW50SW1wbCogZG9j
ID0gYW5jaG9yLmdldERvY3VtZW50KCkpCisgICAgICAgICAgICAgICAgZG9jLT51cGRhdGVMYXlv
dXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmco
YW5jaG9yLmlubmVyVGV4dCgpKTsKKyAgICB9CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQor
CitWYWx1ZSBIVE1MRWxlbWVudDo6aW1hZ2VHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0Cit7CisgICAgSFRNTEltYWdlRWxlbWVudEltcGwmIGltYWdlID0gKnN0YXRpY19j
YXN0PEhUTUxJbWFnZUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7
CisgICAgICAgIGNhc2UgSW1hZ2VOYW1lOiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoaW1hZ2Uu
bmFtZSgpKTsKKyAgICAgICAgY2FzZSBJbWFnZUFsaWduOiAgICAgICAgICAgcmV0dXJuIFN0cmlu
ZyhpbWFnZS5hbGlnbigpKTsKKyAgICAgICAgY2FzZSBJbWFnZUFsdDogICAgICAgICAgICAgcmV0
dXJuIFN0cmluZyhpbWFnZS5hbHQoKSk7CisgICAgICAgIGNhc2UgSW1hZ2VCb3JkZXI6ICAgICAg
ICAgIHJldHVybiBOdW1iZXIoaW1hZ2UuYm9yZGVyKCkpOworICAgICAgICBjYXNlIEltYWdlSGVp
Z2h0OiAgICAgICAgICByZXR1cm4gTnVtYmVyKGltYWdlLmhlaWdodCh0cnVlKSk7CisgICAgICAg
IGNhc2UgSW1hZ2VIc3BhY2U6ICAgICAgICAgIHJldHVybiBOdW1iZXIoaW1hZ2UuaHNwYWNlKCkp
OworICAgICAgICBjYXNlIEltYWdlSXNNYXA6ICAgICAgICAgICByZXR1cm4gQm9vbGVhbihpbWFn
ZS5pc01hcCgpKTsKKyAgICAgICAgY2FzZSBJbWFnZUxvbmdEZXNjOiAgICAgICAgcmV0dXJuIFN0
cmluZyhpbWFnZS5sb25nRGVzYygpKTsKKyAgICAgICAgY2FzZSBJbWFnZVNyYzogICAgICAgICAg
ICAgcmV0dXJuIFN0cmluZyhpbWFnZS5zcmMoKSk7CisgICAgICAgIGNhc2UgSW1hZ2VVc2VNYXA6
ICAgICAgICAgIHJldHVybiBTdHJpbmcoaW1hZ2UudXNlTWFwKCkpOworICAgICAgICBjYXNlIElt
YWdlVnNwYWNlOiAgICAgICAgICByZXR1cm4gTnVtYmVyKGltYWdlLnZzcGFjZSgpKTsKKyAgICAg
ICAgY2FzZSBJbWFnZVdpZHRoOiAgICAgICAgICAgcmV0dXJuIE51bWJlcihpbWFnZS53aWR0aCh0
cnVlKSk7CisgICAgICAgIGNhc2UgSW1hZ2VYOiAgICAgICAgICAgICAgIHJldHVybiBOdW1iZXIo
aW1hZ2UueCgpKTsKKyAgICAgICAgY2FzZSBJbWFnZVk6ICAgICAgICAgICAgICAgcmV0dXJuIE51
bWJlcihpbWFnZS55KCkpOworICAgIH0KKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1Zh
bHVlIEhUTUxFbGVtZW50OjpvYmplY3RHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4p
IGNvbnN0Cit7CisgICAgSFRNTE9iamVjdEVsZW1lbnRJbXBsJiBvYmplY3QgPSAqc3RhdGljX2Nh
c3Q8SFRNTE9iamVjdEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7
CisgICAgICAgIGNhc2UgT2JqZWN0Rm9ybTogICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShl
eGVjLG9iamVjdC5mb3JtKCkpOyAvLyB0eXBlIEhUTUxGb3JtRWxlbWVudAorICAgICAgICBjYXNl
IE9iamVjdENvZGU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3QuY29kZSgpKTsKKyAg
ICAgICAgY2FzZSBPYmplY3RBbGlnbjogICAgICAgICAgIHJldHVybiBTdHJpbmcob2JqZWN0LmFs
aWduKCkpOworICAgICAgICBjYXNlIE9iamVjdEFyY2hpdmU6ICAgICAgICAgcmV0dXJuIFN0cmlu
ZyhvYmplY3QuYXJjaGl2ZSgpKTsKKyAgICAgICAgY2FzZSBPYmplY3RCb3JkZXI6ICAgICAgICAg
IHJldHVybiBTdHJpbmcob2JqZWN0LmJvcmRlcigpKTsKKyAgICAgICAgY2FzZSBPYmplY3RDb2Rl
QmFzZTogICAgICAgIHJldHVybiBTdHJpbmcob2JqZWN0LmNvZGVCYXNlKCkpOworICAgICAgICBj
YXNlIE9iamVjdENvZGVUeXBlOiAgICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3QuY29kZVR5cGUo
KSk7CisgICAgICAgIGNhc2UgT2JqZWN0Q29udGVudERvY3VtZW50OiByZXR1cm4gY2hlY2tOb2Rl
U2VjdXJpdHkoZXhlYyxvYmplY3QuY29udGVudERvY3VtZW50KCkpID8gCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0RE9NTm9kZShleGVjLCBvYmplY3QuY29u
dGVudERvY3VtZW50KCkpIDogVW5kZWZpbmVkKCk7CisgICAgICAgIGNhc2UgT2JqZWN0RGF0YTog
ICAgICAgICAgICByZXR1cm4gU3RyaW5nKG9iamVjdC5kYXRhKCkpOworICAgICAgICBjYXNlIE9i
amVjdERlY2xhcmU6ICAgICAgICAgcmV0dXJuIEJvb2xlYW4ob2JqZWN0LmRlY2xhcmUoKSk7Cisg
ICAgICAgIGNhc2UgT2JqZWN0SGVpZ2h0OiAgICAgICAgICByZXR1cm4gU3RyaW5nKG9iamVjdC5o
ZWlnaHQoKSk7CisgICAgICAgIGNhc2UgT2JqZWN0SHNwYWNlOiAgICAgICAgICByZXR1cm4gU3Ry
aW5nKG9iamVjdC5oc3BhY2UoKSk7CisgICAgICAgIGNhc2UgT2JqZWN0TmFtZTogICAgICAgICAg
ICByZXR1cm4gU3RyaW5nKG9iamVjdC5uYW1lKCkpOworICAgICAgICBjYXNlIE9iamVjdFN0YW5k
Ynk6ICAgICAgICAgcmV0dXJuIFN0cmluZyhvYmplY3Quc3RhbmRieSgpKTsKKyAgICAgICAgY2Fz
ZSBPYmplY3RUYWJJbmRleDogICAgICAgIHJldHVybiBOdW1iZXIob2JqZWN0LnRhYkluZGV4KCkp
OworICAgICAgICBjYXNlIE9iamVjdFR5cGU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhvYmpl
Y3QudHlwZSgpKTsKKyAgICAgICAgY2FzZSBPYmplY3RVc2VNYXA6ICAgICAgICAgIHJldHVybiBT
dHJpbmcob2JqZWN0LnVzZU1hcCgpKTsKKyAgICAgICAgY2FzZSBPYmplY3RWc3BhY2U6ICAgICAg
ICAgIHJldHVybiBTdHJpbmcob2JqZWN0LnZzcGFjZSgpKTsKKyAgICAgICAgY2FzZSBPYmplY3RX
aWR0aDogICAgICAgICAgIHJldHVybiBTdHJpbmcob2JqZWN0LndpZHRoKCkpOworICAgIH0KKyAg
ICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50OjpwYXJhbUdldHRl
cihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MUGFyYW1FbGVt
ZW50SW1wbCYgcGFyYW0gPSAqc3RhdGljX2Nhc3Q8SFRNTFBhcmFtRWxlbWVudEltcGwqPihpbXBs
KCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBQYXJhbU5hbWU6ICAgICAg
ICAgICAgcmV0dXJuIFN0cmluZyhwYXJhbS5uYW1lKCkpOworICAgICAgICBjYXNlIFBhcmFtVHlw
ZTogICAgICAgICAgICByZXR1cm4gU3RyaW5nKHBhcmFtLnR5cGUoKSk7CisgICAgICAgIGNhc2Ug
UGFyYW1WYWx1ZTogICAgICAgICAgIHJldHVybiBTdHJpbmcocGFyYW0udmFsdWUoKSk7CisgICAg
ICAgIGNhc2UgUGFyYW1WYWx1ZVR5cGU6ICAgICAgIHJldHVybiBTdHJpbmcocGFyYW0udmFsdWVU
eXBlKCkpOworICAgIH0KKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxF
bGVtZW50OjphcHBsZXRHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7
CisgICAgSFRNTEFwcGxldEVsZW1lbnRJbXBsJiBhcHBsZXQgPSAqc3RhdGljX2Nhc3Q8SFRNTEFw
cGxldEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAg
IGNhc2UgQXBwbGV0QWxpZ246ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGFwcGxldC5hbGlnbigp
KTsKKyAgICAgICAgY2FzZSBBcHBsZXRBbHQ6ICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoYXBw
bGV0LmFsdCgpKTsKKyAgICAgICAgY2FzZSBBcHBsZXRBcmNoaXZlOiAgICAgICAgIHJldHVybiBT
dHJpbmcoYXBwbGV0LmFyY2hpdmUoKSk7CisgICAgICAgIGNhc2UgQXBwbGV0Q29kZTogICAgICAg
ICAgICByZXR1cm4gU3RyaW5nKGFwcGxldC5jb2RlKCkpOworICAgICAgICBjYXNlIEFwcGxldENv
ZGVCYXNlOiAgICAgICAgcmV0dXJuIFN0cmluZyhhcHBsZXQuY29kZUJhc2UoKSk7CisgICAgICAg
IGNhc2UgQXBwbGV0SGVpZ2h0OiAgICAgICAgICByZXR1cm4gU3RyaW5nKGFwcGxldC5oZWlnaHQo
KSk7CisgICAgICAgIGNhc2UgQXBwbGV0SHNwYWNlOiAgICAgICAgICByZXR1cm4gU3RyaW5nKGFw
cGxldC5oc3BhY2UoKSk7CisgICAgICAgIGNhc2UgQXBwbGV0TmFtZTogICAgICAgICAgICByZXR1
cm4gU3RyaW5nKGFwcGxldC5uYW1lKCkpOworICAgICAgICBjYXNlIEFwcGxldE9iamVjdDogICAg
ICAgICAgcmV0dXJuIFN0cmluZyhhcHBsZXQub2JqZWN0KCkpOworICAgICAgICBjYXNlIEFwcGxl
dFZzcGFjZTogICAgICAgICAgcmV0dXJuIFN0cmluZyhhcHBsZXQudnNwYWNlKCkpOworICAgICAg
ICBjYXNlIEFwcGxldFdpZHRoOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyhhcHBsZXQud2lkdGgo
KSk7CisgICAgfQorICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1l
bnQ6Om1hcEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBI
VE1MTWFwRWxlbWVudEltcGwmIG1hcCA9ICpzdGF0aWNfY2FzdDxIVE1MTWFwRWxlbWVudEltcGwq
PihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBNYXBBcmVhczog
ICAgICAgICAgIHJldHVybiBnZXRIVE1MQ29sbGVjdGlvbihleGVjLCBtYXAuYXJlYXMoKS5nZXQo
KSk7IC8vIHR5cGUgSFRNTENvbGxlY3Rpb24KKyAgICAgICAgY2FzZSBNYXBOYW1lOiAgICAgICAg
ICAgIHJldHVybiBTdHJpbmcobWFwLm5hbWUoKSk7CisgICAgfQorICAgIHJldHVybiBVbmRlZmlu
ZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OmFyZWFHZXR0ZXIoRXhlY1N0YXRlKiBleGVj
LCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTEFyZWFFbGVtZW50SW1wbCYgYXJlYSA9ICpz
dGF0aWNfY2FzdDxIVE1MQXJlYUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRv
a2VuKSB7CisgICAgICAgIGNhc2UgQXJlYUFjY2Vzc0tleTogICAgICAgcmV0dXJuIFN0cmluZyhh
cmVhLmFjY2Vzc0tleSgpKTsKKyAgICAgICAgY2FzZSBBcmVhQWx0OiAgICAgICAgICAgICByZXR1
cm4gU3RyaW5nKGFyZWEuYWx0KCkpOworICAgICAgICBjYXNlIEFyZWFDb29yZHM6ICAgICAgICAg
IHJldHVybiBTdHJpbmcoYXJlYS5jb29yZHMoKSk7CisgICAgICAgIGNhc2UgQXJlYUhyZWY6ICAg
ICAgICAgICAgcmV0dXJuIFN0cmluZyhhcmVhLmhyZWYoKSk7CisgICAgICAgIGNhc2UgQXJlYUhh
c2g6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZygnIycrS1VSTChhcmVhLmhyZWYoKS5zdHJpbmco
KSkucmVmKCkpOworICAgICAgICBjYXNlIEFyZWFIb3N0OiAgICAgICAgICAgIHJldHVybiBTdHJp
bmcoS1VSTChhcmVhLmhyZWYoKS5zdHJpbmcoKSkuaG9zdCgpKTsKKyAgICAgICAgY2FzZSBBcmVh
SG9zdE5hbWU6IHsKKyAgICAgICAgICAgIEtVUkwgdXJsKGFyZWEuaHJlZigpLnN0cmluZygpKTsK
KyAgICAgICAgICAgIGtkRGVidWcoNjA3MCkgPDwgImxpbms6Omhvc3RuYW1lIHVzZXM6IiA8PHVy
bC51cmwoKTw8ZW5kbDsKKyAgICAgICAgICAgIGlmICh1cmwucG9ydCgpPT0wKQorICAgICAgICAg
ICAgICAgIHJldHVybiBTdHJpbmcodXJsLmhvc3QoKSk7CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh1cmwuaG9zdCgpICsgIjoiICsgUVN0cmluZzo6bnVt
YmVyKHVybC5wb3J0KCkpKTsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEFyZWFQYXRoTmFtZTog
ICAgICAgIHJldHVybiBTdHJpbmcoS1VSTChhcmVhLmhyZWYoKS5zdHJpbmcoKSkucGF0aCgpKTsK
KyAgICAgICAgY2FzZSBBcmVhUG9ydDogICAgICAgICAgICByZXR1cm4gU3RyaW5nKFFTdHJpbmc6
Om51bWJlcihLVVJMKGFyZWEuaHJlZigpLnN0cmluZygpKS5wb3J0KCkpKTsKKyAgICAgICAgY2Fz
ZSBBcmVhUHJvdG9jb2w6ICAgICAgICByZXR1cm4gU3RyaW5nKEtVUkwoYXJlYS5ocmVmKCkuc3Ry
aW5nKCkpLnByb3RvY29sKCkrIjoiKTsKKyAgICAgICAgY2FzZSBBcmVhU2VhcmNoOiAgICAgICAg
ICByZXR1cm4gU3RyaW5nKEtVUkwoYXJlYS5ocmVmKCkuc3RyaW5nKCkpLnF1ZXJ5KCkpOworICAg
ICAgICBjYXNlIEFyZWFOb0hyZWY6ICAgICAgICAgIHJldHVybiBCb29sZWFuKGFyZWEubm9IcmVm
KCkpOworICAgICAgICBjYXNlIEFyZWFTaGFwZTogICAgICAgICAgIHJldHVybiBTdHJpbmcoYXJl
YS5zaGFwZSgpKTsKKyAgICAgICAgY2FzZSBBcmVhVGFiSW5kZXg6ICAgICAgICByZXR1cm4gTnVt
YmVyKGFyZWEudGFiSW5kZXgoKSk7CisgICAgICAgIGNhc2UgQXJlYVRhcmdldDogICAgICAgICAg
cmV0dXJuIFN0cmluZyhhcmVhLnRhcmdldCgpKTsKKyAgICB9CisgICAgcmV0dXJuIFVuZGVmaW5l
ZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6c2NyaXB0R2V0dGVyKEV4ZWNTdGF0ZSogZXhl
YywgaW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxTY3JpcHRFbGVtZW50SW1wbCYgc2NyaXB0
ID0gKnN0YXRpY19jYXN0PEhUTUxTY3JpcHRFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dp
dGNoICh0b2tlbikgeworICAgICAgICBjYXNlIFNjcmlwdFRleHQ6ICAgICAgICAgICAgcmV0dXJu
IFN0cmluZyhzY3JpcHQudGV4dCgpKTsKKyAgICAgICAgY2FzZSBTY3JpcHRIdG1sRm9yOiAgICAg
ICAgIHJldHVybiBTdHJpbmcoc2NyaXB0Lmh0bWxGb3IoKSk7CisgICAgICAgIGNhc2UgU2NyaXB0
RXZlbnQ6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHNjcmlwdC5ldmVudCgpKTsKKyAgICAgICAg
Y2FzZSBTY3JpcHRDaGFyc2V0OiAgICAgICAgIHJldHVybiBTdHJpbmcoc2NyaXB0LmNoYXJzZXQo
KSk7CisgICAgICAgIGNhc2UgU2NyaXB0RGVmZXI6ICAgICAgICAgICByZXR1cm4gQm9vbGVhbihz
Y3JpcHQuZGVmZXIoKSk7CisgICAgICAgIGNhc2UgU2NyaXB0U3JjOiAgICAgICAgICAgICByZXR1
cm4gU3RyaW5nKHNjcmlwdC5zcmMoKSk7CisgICAgICAgIGNhc2UgU2NyaXB0VHlwZTogICAgICAg
ICAgICByZXR1cm4gU3RyaW5nKHNjcmlwdC50eXBlKCkpOworICAgIH0KKyAgICByZXR1cm4gVW5k
ZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50Ojp0YWJsZUdldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MVGFibGVFbGVtZW50SW1wbCYgdGFi
bGUgPSAqc3RhdGljX2Nhc3Q8SFRNTFRhYmxlRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3
aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBUYWJsZUNhcHRpb246ICAgICAgICAgcmV0dXJu
IGdldERPTU5vZGUoZXhlYyx0YWJsZS5jYXB0aW9uKCkpOyAvLyB0eXBlIEhUTUxUYWJsZUNhcHRp
b25FbGVtZW50CisgICAgICAgIGNhc2UgVGFibGVUSGVhZDogICAgICAgICAgIHJldHVybiBnZXRE
T01Ob2RlKGV4ZWMsdGFibGUudEhlYWQoKSk7IC8vIHR5cGUgSFRNTFRhYmxlU2VjdGlvbkVsZW1l
bnQKKyAgICAgICAgY2FzZSBUYWJsZVRGb290OiAgICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUo
ZXhlYyx0YWJsZS50Rm9vdCgpKTsgLy8gdHlwZSBIVE1MVGFibGVTZWN0aW9uRWxlbWVudAorICAg
ICAgICBjYXNlIFRhYmxlUm93czogICAgICAgICAgICByZXR1cm4gZ2V0SFRNTENvbGxlY3Rpb24o
ZXhlYywgdGFibGUucm93cygpLmdldCgpKTsgLy8gdHlwZSBIVE1MQ29sbGVjdGlvbgorICAgICAg
ICBjYXNlIFRhYmxlVEJvZGllczogICAgICAgICByZXR1cm4gZ2V0SFRNTENvbGxlY3Rpb24oZXhl
YywgdGFibGUudEJvZGllcygpLmdldCgpKTsgLy8gdHlwZSBIVE1MQ29sbGVjdGlvbgorICAgICAg
ICBjYXNlIFRhYmxlQWxpZ246ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlLmFsaWduKCkp
OworICAgICAgICBjYXNlIFRhYmxlQmdDb2xvcjogICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxl
LmJnQ29sb3IoKSk7CisgICAgICAgIGNhc2UgVGFibGVCb3JkZXI6ICAgICAgICAgIHJldHVybiBT
dHJpbmcodGFibGUuYm9yZGVyKCkpOworICAgICAgICBjYXNlIFRhYmxlQ2VsbFBhZGRpbmc6ICAg
ICByZXR1cm4gU3RyaW5nKHRhYmxlLmNlbGxQYWRkaW5nKCkpOworICAgICAgICBjYXNlIFRhYmxl
Q2VsbFNwYWNpbmc6ICAgICByZXR1cm4gU3RyaW5nKHRhYmxlLmNlbGxTcGFjaW5nKCkpOworICAg
ICAgICBjYXNlIFRhYmxlRnJhbWU6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlLmZyYW1l
KCkpOworICAgICAgICBjYXNlIFRhYmxlUnVsZXM6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRh
YmxlLnJ1bGVzKCkpOworICAgICAgICBjYXNlIFRhYmxlU3VtbWFyeTogICAgICAgICByZXR1cm4g
U3RyaW5nKHRhYmxlLnN1bW1hcnkoKSk7CisgICAgICAgIGNhc2UgVGFibGVXaWR0aDogICAgICAg
ICAgIHJldHVybiBTdHJpbmcodGFibGUud2lkdGgoKSk7CisgICAgfQorICAgIHJldHVybiBVbmRl
ZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1lbnQ6OnRhYmxlQ2FwdGlvbkdldHRlcihFeGVj
U3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MVGFibGVDYXB0aW9uRWxl
bWVudEltcGwmIHRhYmxlQ2FwdGlvbiA9ICpzdGF0aWNfY2FzdDxIVE1MVGFibGVDYXB0aW9uRWxl
bWVudEltcGwqPihpbXBsKCkpOworICAgIGlmICh0b2tlbiA9PSBUYWJsZUNhcHRpb25BbGlnbikK
KyAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNhcHRpb24uYWxpZ24oKSk7CisgICAgcmV0dXJu
IFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6dGFibGVDb2xHZXR0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTFRhYmxlQ29sRWxlbWVu
dEltcGwmIHRhYmxlQ29sID0gKnN0YXRpY19jYXN0PEhUTUxUYWJsZUNvbEVsZW1lbnRJbXBsKj4o
aW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgVGFibGVDb2xBbGln
bjogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVDb2wuYWxpZ24oKSk7CisgICAgICAgIGNh
c2UgVGFibGVDb2xDaDogICAgICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVDb2wuY2goKSk7
CisgICAgICAgIGNhc2UgVGFibGVDb2xDaE9mZjogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFi
bGVDb2wuY2hPZmYoKSk7CisgICAgICAgIGNhc2UgVGFibGVDb2xTcGFuOiAgICAgICAgICAgIHJl
dHVybiBOdW1iZXIodGFibGVDb2wuc3BhbigpKTsKKyAgICAgICAgY2FzZSBUYWJsZUNvbFZBbGln
bjogICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNvbC52QWxpZ24oKSk7CisgICAgICAgIGNh
c2UgVGFibGVDb2xXaWR0aDogICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVDb2wud2lkdGgo
KSk7CisgICAgfQorICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworVmFsdWUgSFRNTEVsZW1l
bnQ6OnRhYmxlU2VjdGlvbkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QK
K3sKKyAgICBIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGwmIHRhYmxlU2VjdGlvbiA9ICpzdGF0
aWNfY2FzdDxIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRj
aCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBUYWJsZVNlY3Rpb25BbGlnbjogICAgICAgICAgIHJl
dHVybiBTdHJpbmcodGFibGVTZWN0aW9uLmFsaWduKCkpOworICAgICAgICBjYXNlIFRhYmxlU2Vj
dGlvbkNoOiAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZVNlY3Rpb24uY2goKSk7Cisg
ICAgICAgIGNhc2UgVGFibGVTZWN0aW9uQ2hPZmY6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRh
YmxlU2VjdGlvbi5jaE9mZigpKTsKKyAgICAgICAgY2FzZSBUYWJsZVNlY3Rpb25WQWxpZ246ICAg
ICAgICAgIHJldHVybiBTdHJpbmcodGFibGVTZWN0aW9uLnZBbGlnbigpKTsKKyAgICAgICAgY2Fz
ZSBUYWJsZVNlY3Rpb25Sb3dzOiAgICAgICAgICAgIHJldHVybiBnZXRIVE1MQ29sbGVjdGlvbihl
eGVjLCB0YWJsZVNlY3Rpb24ucm93cygpLmdldCgpKTsgLy8gdHlwZSBIVE1MQ29sbGVjdGlvbgor
ICAgIH0KKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50Ojp0
YWJsZVJvd0dldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBI
VE1MVGFibGVSb3dFbGVtZW50SW1wbCYgdGFibGVSb3cgPSAqc3RhdGljX2Nhc3Q8SFRNTFRhYmxl
Um93RWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAg
Y2FzZSBUYWJsZVJvd1Jvd0luZGV4OiAgICAgICAgcmV0dXJuIE51bWJlcih0YWJsZVJvdy5yb3dJ
bmRleCgpKTsKKyAgICAgICAgY2FzZSBUYWJsZVJvd1NlY3Rpb25Sb3dJbmRleDogcmV0dXJuIE51
bWJlcih0YWJsZVJvdy5zZWN0aW9uUm93SW5kZXgoKSk7CisgICAgICAgIGNhc2UgVGFibGVSb3dD
ZWxsczogICAgICAgICAgIHJldHVybiBnZXRIVE1MQ29sbGVjdGlvbihleGVjLCB0YWJsZVJvdy5j
ZWxscygpLmdldCgpKTsgLy8gdHlwZSBIVE1MQ29sbGVjdGlvbgorICAgICAgICBjYXNlIFRhYmxl
Um93QWxpZ246ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlUm93LmFsaWduKCkpOworICAg
ICAgICBjYXNlIFRhYmxlUm93QmdDb2xvcjogICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlUm93
LmJnQ29sb3IoKSk7CisgICAgICAgIGNhc2UgVGFibGVSb3dDaDogICAgICAgICAgICAgIHJldHVy
biBTdHJpbmcodGFibGVSb3cuY2goKSk7CisgICAgICAgIGNhc2UgVGFibGVSb3dDaE9mZjogICAg
ICAgICAgIHJldHVybiBTdHJpbmcodGFibGVSb3cuY2hPZmYoKSk7CisgICAgICAgIGNhc2UgVGFi
bGVSb3dWQWxpZ246ICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVSb3cudkFsaWduKCkpOwor
ICAgIH0KKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50Ojp0
YWJsZUNlbGxHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAg
SFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsJiB0YWJsZUNlbGwgPSAqc3RhdGljX2Nhc3Q8SFRNTFRh
YmxlQ2VsbEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAg
ICAgIGNhc2UgVGFibGVDZWxsQ2VsbEluZGV4OiAgICAgICByZXR1cm4gTnVtYmVyKHRhYmxlQ2Vs
bC5jZWxsSW5kZXgoKSk7CisgICAgICAgIGNhc2UgVGFibGVDZWxsQWJicjogICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKHRhYmxlQ2VsbC5hYmJyKCkpOworICAgICAgICBjYXNlIFRhYmxlQ2VsbEFs
aWduOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNlbGwuYWxpZ24oKSk7CisgICAgICAg
IGNhc2UgVGFibGVDZWxsQXhpczogICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxlQ2VsbC5h
eGlzKCkpOworICAgICAgICBjYXNlIFRhYmxlQ2VsbEJnQ29sb3I6ICAgICAgICAgcmV0dXJuIFN0
cmluZyh0YWJsZUNlbGwuYmdDb2xvcigpKTsKKyAgICAgICAgY2FzZSBUYWJsZUNlbGxDaDogICAg
ICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVDZWxsLmNoKCkpOworICAgICAgICBjYXNlIFRh
YmxlQ2VsbENoT2ZmOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNlbGwuY2hPZmYoKSk7
CisgICAgICAgIGNhc2UgVGFibGVDZWxsQ29sU3BhbjogICAgICAgICByZXR1cm4gTnVtYmVyKHRh
YmxlQ2VsbC5jb2xTcGFuKCkpOworICAgICAgICBjYXNlIFRhYmxlQ2VsbEhlYWRlcnM6ICAgICAg
ICAgcmV0dXJuIFN0cmluZyh0YWJsZUNlbGwuaGVhZGVycygpKTsKKyAgICAgICAgY2FzZSBUYWJs
ZUNlbGxIZWlnaHQ6ICAgICAgICAgIHJldHVybiBTdHJpbmcodGFibGVDZWxsLmhlaWdodCgpKTsK
KyAgICAgICAgY2FzZSBUYWJsZUNlbGxOb1dyYXA6ICAgICAgICAgIHJldHVybiBCb29sZWFuKHRh
YmxlQ2VsbC5ub1dyYXAoKSk7CisgICAgICAgIGNhc2UgVGFibGVDZWxsUm93U3BhbjogICAgICAg
ICByZXR1cm4gTnVtYmVyKHRhYmxlQ2VsbC5yb3dTcGFuKCkpOworICAgICAgICBjYXNlIFRhYmxl
Q2VsbFNjb3BlOiAgICAgICAgICAgcmV0dXJuIFN0cmluZyh0YWJsZUNlbGwuc2NvcGUoKSk7Cisg
ICAgICAgIGNhc2UgVGFibGVDZWxsVkFsaWduOiAgICAgICAgICByZXR1cm4gU3RyaW5nKHRhYmxl
Q2VsbC52QWxpZ24oKSk7CisgICAgICAgIGNhc2UgVGFibGVDZWxsV2lkdGg6ICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKHRhYmxlQ2VsbC53aWR0aCgpKTsKKyAgICB9CisgICAgcmV0dXJuIFVuZGVm
aW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6ZnJhbWVTZXRHZXR0ZXIoRXhlY1N0YXRl
KiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Cit7CisgICAgSFRNTEZyYW1lU2V0RWxlbWVudEltcGwm
IGZyYW1lU2V0ID0gKnN0YXRpY19jYXN0PEhUTUxGcmFtZVNldEVsZW1lbnRJbXBsKj4oaW1wbCgp
KTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgRnJhbWVTZXRDb2xzOiAgICAg
ICAgICAgIHJldHVybiBTdHJpbmcoZnJhbWVTZXQuY29scygpKTsKKyAgICAgICAgY2FzZSBGcmFt
ZVNldFJvd3M6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhmcmFtZVNldC5yb3dzKCkpOworICAg
IH0KKyAgICByZXR1cm4gVW5kZWZpbmVkKCk7Cit9CisKK1ZhbHVlIEhUTUxFbGVtZW50OjpmcmFt
ZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3QKK3sKKyAgICBIVE1MRnJh
bWVFbGVtZW50SW1wbCYgZnJhbWVFbGVtZW50ID0gKnN0YXRpY19jYXN0PEhUTUxGcmFtZUVsZW1l
bnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgRnJh
bWVDb250ZW50RG9jdW1lbnQ6IHJldHVybiBjaGVja05vZGVTZWN1cml0eShleGVjLGZyYW1lRWxl
bWVudC5jb250ZW50RG9jdW1lbnQoKSkgPyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdldERPTU5vZGUoZXhlYywgZnJhbWVFbGVtZW50LmNvbnRlbnREb2N1bWVu
dCgpKSA6IFVuZGVmaW5lZCgpOworICAgICAgICBjYXNlIEZyYW1lQ29udGVudFdpbmRvdzogICBy
ZXR1cm4gY2hlY2tOb2RlU2VjdXJpdHkoZXhlYyxmcmFtZUVsZW1lbnQuY29udGVudERvY3VtZW50
KCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBXaW5kb3c6OnJl
dHJpZXZlKGZyYW1lRWxlbWVudC5jb250ZW50UGFydCgpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDogVW5kZWZpbmVkKCk7CisgICAgICAgIGNhc2UgRnJhbWVGcmFt
ZUJvcmRlcjogICAgIHJldHVybiBTdHJpbmcoZnJhbWVFbGVtZW50LmZyYW1lQm9yZGVyKCkpOwor
ICAgICAgICBjYXNlIEZyYW1lTG9uZ0Rlc2M6ICAgICAgICByZXR1cm4gU3RyaW5nKGZyYW1lRWxl
bWVudC5sb25nRGVzYygpKTsKKyAgICAgICAgY2FzZSBGcmFtZU1hcmdpbkhlaWdodDogICAgcmV0
dXJuIFN0cmluZyhmcmFtZUVsZW1lbnQubWFyZ2luSGVpZ2h0KCkpOworICAgICAgICBjYXNlIEZy
YW1lTWFyZ2luV2lkdGg6ICAgICByZXR1cm4gU3RyaW5nKGZyYW1lRWxlbWVudC5tYXJnaW5XaWR0
aCgpKTsKKyAgICAgICAgY2FzZSBGcmFtZU5hbWU6ICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhm
cmFtZUVsZW1lbnQubmFtZSgpKTsKKyAgICAgICAgY2FzZSBGcmFtZU5vUmVzaXplOiAgICAgICAg
cmV0dXJuIEJvb2xlYW4oZnJhbWVFbGVtZW50Lm5vUmVzaXplKCkpOworICAgICAgICBjYXNlIEZy
YW1lU2Nyb2xsaW5nOiAgICAgICByZXR1cm4gU3RyaW5nKGZyYW1lRWxlbWVudC5zY3JvbGxpbmco
KSk7CisgICAgICAgIGNhc2UgRnJhbWVTcmM6CisgICAgICAgIGNhc2UgRnJhbWVMb2NhdGlvbjog
ICAgICAgIHJldHVybiBTdHJpbmcoZnJhbWVFbGVtZW50LnNyYygpKTsKKyAgICB9CisgICAgcmV0
dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBIVE1MRWxlbWVudDo6aUZyYW1lR2V0dGVyKEV4
ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdAoreworICAgIEhUTUxJRnJhbWVFbGVtZW50
SW1wbCYgaUZyYW1lID0gKnN0YXRpY19jYXN0PEhUTUxJRnJhbWVFbGVtZW50SW1wbCo+KGltcGwo
KSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNlIElGcmFtZUFsaWduOiAgICAg
ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGlGcmFtZS5hbGlnbigpKTsKKyAgICAgICAgICAvLyAj
IyMgc2VjdXJpdHkgY2hlY2sgPworICAgICAgICBjYXNlIElGcmFtZURvY3VtZW50OiAvLyBub24t
c3RhbmRhcmQsIG1hcHBlZCB0byBjb250ZW50RG9jdW1lbnQKKyAgICAgICAgY2FzZSBJRnJhbWVD
b250ZW50RG9jdW1lbnQ6IHJldHVybiBjaGVja05vZGVTZWN1cml0eShleGVjLGlGcmFtZS5jb250
ZW50RG9jdW1lbnQoKSkgPyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z2V0RE9NTm9kZShleGVjLCBpRnJhbWUuY29udGVudERvY3VtZW50KCkpIDogVW5kZWZpbmVkKCk7
CisgICAgICAgIGNhc2UgSUZyYW1lQ29udGVudFdpbmRvdzoJcmV0dXJuIGNoZWNrTm9kZVNlY3Vy
aXR5KGV4ZWMsaUZyYW1lLmNvbnRlbnREb2N1bWVudCgpKSAKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA/IFdpbmRvdzo6cmV0cmlldmUoaUZyYW1lLmNvbnRlbnRQYXJ0
KCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBVbmRlZmluZWQo
KTsKKyAgICAgICAgY2FzZSBJRnJhbWVGcmFtZUJvcmRlcjogICAgIHJldHVybiBTdHJpbmcoaUZy
YW1lLmZyYW1lQm9yZGVyKCkpOworICAgICAgICBjYXNlIElGcmFtZUhlaWdodDogICAgICAgICAg
cmV0dXJuIFN0cmluZyhpRnJhbWUuaGVpZ2h0KCkpOworICAgICAgICBjYXNlIElGcmFtZUxvbmdE
ZXNjOiAgICAgICAgcmV0dXJuIFN0cmluZyhpRnJhbWUubG9uZ0Rlc2MoKSk7CisgICAgICAgIGNh
c2UgSUZyYW1lTWFyZ2luSGVpZ2h0OiAgICByZXR1cm4gU3RyaW5nKGlGcmFtZS5tYXJnaW5IZWln
aHQoKSk7CisgICAgICAgIGNhc2UgSUZyYW1lTWFyZ2luV2lkdGg6ICAgICByZXR1cm4gU3RyaW5n
KGlGcmFtZS5tYXJnaW5XaWR0aCgpKTsKKyAgICAgICAgY2FzZSBJRnJhbWVOYW1lOiAgICAgICAg
ICAgIHJldHVybiBTdHJpbmcoaUZyYW1lLm5hbWUoKSk7CisgICAgICAgIGNhc2UgSUZyYW1lU2Ny
b2xsaW5nOiAgICAgICByZXR1cm4gU3RyaW5nKGlGcmFtZS5zY3JvbGxpbmcoKSk7CisgICAgICAg
IGNhc2UgSUZyYW1lU3JjOiAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGlGcmFtZS5zcmMoKSk7
CisgICAgICAgIGNhc2UgSUZyYW1lV2lkdGg6ICAgICAgICAgICByZXR1cm4gU3RyaW5nKGlGcmFt
ZS53aWR0aCgpKTsKKyAgICB9CisgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworfQorCitWYWx1ZSBI
VE1MRWxlbWVudDo6bWFycXVlZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29u
c3QKK3sKKyAgICAvLyBGSVhNRTogRmluZCBvdXQgd2hhdCBXaW5JRSBleHBvc2VzIGFzIHByb3Bl
cnRpZXMgYW5kIGltcGxlbWVudCB0aGlzLgorICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKwor
VmFsdWUgSFRNTEVsZW1lbnQ6OmdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4pIGNvbnN0Cit7CisgICAgLy8gQ2hlY2sgb3VyIHNldCBvZiBnZW5lcmljIHByb3BlcnRp
ZXMgZmlyc3QuCisgICAgSFRNTEVsZW1lbnRJbXBsICZlbGVtZW50ID0gKnN0YXRpY19jYXN0PEhU
TUxFbGVtZW50SW1wbCAqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAg
Y2FzZSBFbGVtZW50SWQ6CisgICAgICAgIC8vIGlodC5jb20gcmVsaWVzIG9uIHRoaXMgdmFsdWUg
YmVpbmcgIiIgd2hlbiBubyBpZCBpcyBwcmVzZW50LiAgT3RoZXIgYnJvd3NlcnMgZG8gdGhpcyBh
cyB3ZWxsLgorICAgICAgICAvLyBTbyB3ZSB1c2UgU3RyaW5nKCkgaW5zdGVhZCBvZiBTdHJpbmco
KSBoZXJlLgorICAgICAgICByZXR1cm4gU3RyaW5nKGVsZW1lbnQuaWQoKSk7CisgICAgICAgIGNh
c2UgRWxlbWVudFRpdGxlOgorICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhlbGVtZW50LnRpdGxl
KCkpOworICAgICAgICBjYXNlIEVsZW1lbnRMYW5nOgorICAgICAgICAgICAgcmV0dXJuIFN0cmlu
ZyhlbGVtZW50LmxhbmcoKSk7CisgICAgICAgIGNhc2UgRWxlbWVudERpcjoKKyAgICAgICAgICAg
IHJldHVybiBTdHJpbmcoZWxlbWVudC5kaXIoKSk7CisgICAgICAgIGNhc2UgRWxlbWVudENsYXNz
TmFtZToKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcoZWxlbWVudC5jbGFzc05hbWUoKSk7Cisg
ICAgICAgIGNhc2UgRWxlbWVudElubmVySFRNTDoKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmco
ZWxlbWVudC5pbm5lckhUTUwoKSk7CisgICAgICAgIGNhc2UgRWxlbWVudElubmVyVGV4dDoKKyAg
ICAgICAgICAgIGlmIChEb2N1bWVudEltcGwqIGRvYyA9IGltcGwoKS0+Z2V0RG9jdW1lbnQoKSkK
KyAgICAgICAgICAgICAgICBkb2MtPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0
cygpOworICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhlbGVtZW50LmlubmVyVGV4dCgpKTsKKyAg
ICAgICAgY2FzZSBFbGVtZW50T3V0ZXJIVE1MOgorICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhl
bGVtZW50Lm91dGVySFRNTCgpKTsKKyAgICAgICAgY2FzZSBFbGVtZW50T3V0ZXJUZXh0OgorICAg
ICAgICAgICAgcmV0dXJuIFN0cmluZyhlbGVtZW50Lm91dGVyVGV4dCgpKTsKKyAgICAgICAgY2Fz
ZSBFbGVtZW50RG9jdW1lbnQ6CisgICAgICAgICAgICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLGVs
ZW1lbnQub3duZXJEb2N1bWVudCgpKTsKKyAgICAgICAgY2FzZSBFbGVtZW50Q2hpbGRyZW46Cisg
ICAgICAgICAgICByZXR1cm4gZ2V0SFRNTENvbGxlY3Rpb24oZXhlYywgZWxlbWVudC5jaGlsZHJl
bigpLmdldCgpKTsKKyAgICAgICAgY2FzZSBFbGVtZW50Q29udGVudEVkaXRhYmxlOgorICAgICAg
ICAgICAgcmV0dXJuIFN0cmluZyhlbGVtZW50LmNvbnRlbnRFZGl0YWJsZSgpKTsKKyAgICAgICAg
Y2FzZSBFbGVtZW50SXNDb250ZW50RWRpdGFibGU6CisgICAgICAgICAgICByZXR1cm4gQm9vbGVh
bihlbGVtZW50LmlzQ29udGVudEVkaXRhYmxlKCkpOworICAgIH0KKworICAgIC8vIE5vdyBjaGVj
ayB0aGUgcHJvcGVydGllcyBzcGVjaWZpYyB0byBvdXIgZWxlbWVudCB0eXBlLgorICAgIGNvbnN0
IEFjY2Vzc29ycyogaW5mbyA9IGdldFNldEluZm8oKTsKKyAgICBpZiAoaW5mbyAmJiBpbmZvLT5t
X2dldHRlcikKKyAgICAgICAgcmV0dXJuICh0aGlzLT4qKGluZm8tPm1fZ2V0dGVyKSkoZXhlYywg
dG9rZW4pOworICAgIHJldHVybiBVbmRlZmluZWQoKTsKK30KKworYm9vbCBLSlM6OkhUTUxFbGVt
ZW50OjpoYXNPd25Qcm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IElkZW50aWZpZXIgJnBy
b3BlcnR5TmFtZSkgY29uc3QKK3sKKyNpZmRlZiBLSlNfVkVSQk9TRQorICAgIC8va2REZWJ1Zyg2
MDcwKSA8PCAiSFRNTEVsZW1lbnQ6Omhhc1Byb3BlcnR5ICIgPDwgcHJvcGVydHlOYW1lLnFzdHJp
bmcoKSA8PCBlbmRsOworI2VuZGlmCisgICAgSFRNTEVsZW1lbnRJbXBsICZlbGVtZW50ID0gKnN0
YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCAqPihpbXBsKCkpOworICAgIC8vIEZpcnN0IGxvb2sg
YXQgZHluYW1pYyBwcm9wZXJ0aWVzIC0ga2VlcCB0aGlzIGluIHN5bmMgd2l0aCB0cnlHZXQKKyAg
ICBpZiAoZWxlbWVudC5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpmb3JtKCkpKSB7CisgICAgICAg
IEhUTUxGb3JtRWxlbWVudEltcGwgJmZvcm0gPSBzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnRJ
bXBsICY+KGVsZW1lbnQpOworICAgICAgICAvLyBDaGVjayBpZiB3ZSdyZSByZXRyaWV2aW5nIGFu
IGVsZW1lbnQgKGJ5IGluZGV4IG9yIGJ5IG5hbWUpCisgICAgICAgIGJvb2wgb2s7CisgICAgICAg
IHVpbnQgdSA9IHByb3BlcnR5TmFtZS50b1VMb25nKCZvayk7CisgICAgICAgIGlmIChvayAmJiBm
b3JtLmVsZW1lbnRzKCktPml0ZW0odSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgaWYgKGZvcm0uZWxlbWVudHMoKS0+bmFtZWRJdGVtKHByb3BlcnR5TmFtZS5zdHJpbmcoKSkp
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgZWxzZSBpZiAoZWxlbWVudC5o
YXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpzZWxlY3QoKSkpIHsKKyAgICAgICAgSFRNTFNlbGVjdEVs
ZW1lbnRJbXBsICZzZWxlY3QgPSBzdGF0aWNfY2FzdDxIVE1MU2VsZWN0RWxlbWVudEltcGwgJj4o
ZWxlbWVudCk7CisgICAgICAgIGJvb2wgb2s7CisgICAgICAgIHVpbnQgdSA9IHByb3BlcnR5TmFt
ZS50b1VMb25nKCZvayk7CisgICAgICAgIGlmIChvayAmJiBzZWxlY3Qub3B0aW9uc0hUTUxDb2xs
ZWN0aW9uKCktPml0ZW0odSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
ZWxzZSBpZiAoZWxlbWVudC5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjppbnB1dCgpKSkgeworICAg
ICAgICBIVE1MSW5wdXRFbGVtZW50SW1wbCAmaW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRF
bGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICAgICAgY29uc3QgSGFzaFRhYmxlKiB0YWJsZSA9
IGNsYXNzSW5mbygpLT5wcm9wSGFzaFRhYmxlOworICAgICAgICBjb25zdCBIYXNoRW50cnkqIGVu
dHJ5ID0gTG9va3VwOjpmaW5kRW50cnkodGFibGUsIHByb3BlcnR5TmFtZSk7CisgICAgICAgIGlm
IChlbnRyeSkgeworICAgICAgICAgICAgc3dpdGNoKGVudHJ5LT52YWx1ZSkgeworICAgICAgICAg
ICAgY2FzZSBJbnB1dFNlbGVjdGlvblN0YXJ0OgorICAgICAgICAgICAgY2FzZSBJbnB1dFNlbGVj
dGlvbkVuZDoKKyAgICAgICAgICAgIGNhc2UgSW5wdXRTZXRTZWxlY3Rpb25SYW5nZToKKyAgICAg
ICAgICAgICAgICByZXR1cm4gaW5wdXQuY2FuSGF2ZVNlbGVjdGlvbigpOworICAgICAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKworICAgIHJldHVybiBET01FbGVtZW50OjpoYXNPd25Qcm9wZXJ0eShleGVjLCBw
cm9wZXJ0eU5hbWUpOworfQorCitVU3RyaW5nIEtKUzo6SFRNTEVsZW1lbnQ6OnRvU3RyaW5nKEV4
ZWNTdGF0ZSAqZXhlYykgY29uc3QKK3sKKyAgICBpZiAoaW1wbCgpLT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6YSgpKSkKKyAgICAgICAgcmV0dXJuIFVTdHJpbmcoc3RhdGljX2Nhc3Q8Y29uc3QgSFRN
TEFuY2hvckVsZW1lbnRJbXBsICo+KGltcGwoKSktPmhyZWYoKSk7CisgICAgZWxzZQorICAgICAg
ICByZXR1cm4gRE9NRWxlbWVudDo6dG9TdHJpbmcoZXhlYyk7Cit9CisKK3N0YXRpYyBIVE1MRm9y
bUVsZW1lbnRJbXBsICpnZXRGb3JtKEhUTUxFbGVtZW50SW1wbCAqZWxlbWVudCkKK3sKKyAgICBp
ZiAoZWxlbWVudC0+aXNHZW5lcmljRm9ybUVsZW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsICo+KGVsZW1lbnQpLT5mb3JtKCk7Cisg
ICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpsYWJlbCgpKSkKKyAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PEhUTUxMYWJlbEVsZW1lbnRJbXBsICo+KGVsZW1lbnQpLT5mb3Jt
KCk7CisgICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvYmplY3QoKSkpCisg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MT2JqZWN0RWxlbWVudEltcGwgKj4oZWxlbWVu
dCktPmZvcm0oKTsKKworICAgIHJldHVybiAwOworfQorCit2b2lkIEtKUzo6SFRNTEVsZW1lbnQ6
OnB1c2hFdmVudEhhbmRsZXJTY29wZShFeGVjU3RhdGUgKmV4ZWMsIFNjb3BlQ2hhaW4gJnNjb3Bl
KSBjb25zdAoreworICBIVE1MRWxlbWVudEltcGwgKmVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1M
RWxlbWVudEltcGwgKj4oaW1wbCgpKTsKKworICAvLyBUaGUgZG9jdW1lbnQgaXMgcHV0IG9uIGZp
cnN0LCBmYWxsIGJhY2sgdG8gc2VhcmNoaW5nIGl0IG9ubHkgYWZ0ZXIgdGhlIGVsZW1lbnQgYW5k
IGZvcm0uCisgIHNjb3BlLnB1c2goc3RhdGljX2Nhc3Q8T2JqZWN0SW1wICo+KGdldERPTU5vZGUo
ZXhlYywgZWxlbWVudC0+b3duZXJEb2N1bWVudCgpKSkpOwogCiAgIC8vIFRoZSBmb3JtIGlzIG5l
eHQsIHNlYXJjaGVkIGJlZm9yZSB0aGUgZG9jdW1lbnQsIGJ1dCBhZnRlciB0aGUgZWxlbWVudCBp
dHNlbGYuCiAgIApAQCAtMjE0Miw3ICsyMjk2LDcgQEAgdm9pZCBLSlM6OkhUTUxFbGVtZW50Ojpw
dXNoRXZlbnRIYW5kbGVyUwogICAgIHNjb3BlLnB1c2goc3RhdGljX2Nhc3Q8T2JqZWN0SW1wICo+
KGdldERPTU5vZGUoZXhlYywgZm9ybSkpKTsKICAgZWxzZSB7CiAgICAgTm9kZUltcGwgKmZvcm0g
PSBlbGVtZW50LT5wYXJlbnROb2RlKCk7Ci0gICAgd2hpbGUgKGZvcm0gJiYgZm9ybS0+aWQoKSAh
PSBJRF9GT1JNKQorICAgIHdoaWxlIChmb3JtICYmICFmb3JtLT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6Zm9ybSgpKSkKICAgICAgIGZvcm0gPSBmb3JtLT5wYXJlbnROb2RlKCk7CiAgICAgCiAgICAg
aWYgKGZvcm0pCkBAIC0yMTYyLDE4OCArMjMxNiwxNzMgQEAgSFRNTEVsZW1lbnRGdW5jdGlvbjo6
SFRNTEVsZW1lbnRGdW5jdGlvbgogCiBWYWx1ZSBLSlM6OkhUTUxFbGVtZW50RnVuY3Rpb246OnRy
eUNhbGwoRXhlY1N0YXRlICpleGVjLCBPYmplY3QgJnRoaXNPYmosIGNvbnN0IExpc3QgJmFyZ3Mp
CiB7Ci0gIGlmICghdGhpc09iai5pbmhlcml0cygmS0pTOjpIVE1MRWxlbWVudDo6aW5mbykpIHsK
LSAgICBPYmplY3QgZXJyID0gRXJyb3I6OmNyZWF0ZShleGVjLFR5cGVFcnJvcik7Ci0gICAgZXhl
Yy0+c2V0RXhjZXB0aW9uKGVycik7Ci0gICAgcmV0dXJuIGVycjsKLSAgfQotICBrZERlYnVnKCkg
PDwgIktKUzo6SFRNTEVsZW1lbnRGdW5jdGlvbjo6dHJ5Q2FsbCAiIDw8IGVuZGw7Ci0gIERPTUV4
Y2VwdGlvblRyYW5zbGF0b3IgZXhjZXB0aW9uKGV4ZWMpOwotICBIVE1MRWxlbWVudEltcGwgJmVs
ZW1lbnQgPSAqc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KHN0YXRpY19jYXN0PEhUTUxF
bGVtZW50ICo+KHRoaXNPYmouaW1wKCkpLT5pbXBsKCkpOwotCi0gIHN3aXRjaCAoZWxlbWVudC5p
ZCgpKSB7Ci0gICAgY2FzZSBJRF9GT1JNOiB7Ci0gICAgICBIVE1MRm9ybUVsZW1lbnRJbXBsICZm
b3JtID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAg
IGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpGb3JtU3VibWl0KSB7Ci0gICAgICAgIGZvcm0u
c3VibWl0KCk7Ci0gICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKLSAgICAgIH0KLSAgICAgIGVs
c2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OkZvcm1SZXNldCkgewotICAgICAgICBmb3Jt
LnJlc2V0KCk7Ci0gICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKLSAgICAgIH0KKyAgICBpZiAo
IXRoaXNPYmouaW5oZXJpdHMoJktKUzo6SFRNTEVsZW1lbnQ6OmluZm8pKSB7CisgICAgICAgIE9i
amVjdCBlcnIgPSBFcnJvcjo6Y3JlYXRlKGV4ZWMsVHlwZUVycm9yKTsKKyAgICAgICAgZXhlYy0+
c2V0RXhjZXB0aW9uKGVycik7CisgICAgICAgIHJldHVybiBlcnI7CiAgICAgfQotICAgIGJyZWFr
OwotICAgIGNhc2UgSURfU0VMRUNUOiB7Ci0gICAgICBIVE1MU2VsZWN0RWxlbWVudEltcGwgJnNl
bGVjdCA9IHN0YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAg
ICAgIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpTZWxlY3RBZGQpIHsKLSAgICAgICAgc2Vs
ZWN0LmFkZCh0b0hUTUxFbGVtZW50KGFyZ3NbMF0pLCB0b0hUTUxFbGVtZW50KGFyZ3NbMV0pKTsK
LSAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoaWQg
PT0gS0pTOjpIVE1MRWxlbWVudDo6U2VsZWN0UmVtb3ZlKSB7Ci0gICAgICAgIHNlbGVjdC5yZW1v
dmUoaW50KGFyZ3NbMF0udG9OdW1iZXIoZXhlYykpKTsKLSAgICAgICAgcmV0dXJuIFVuZGVmaW5l
ZCgpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6U2Vs
ZWN0Qmx1cikgewotICAgICAgICBzZWxlY3QuYmx1cigpOwotICAgICAgICByZXR1cm4gVW5kZWZp
bmVkKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpT
ZWxlY3RGb2N1cykgewotICAgICAgICBzZWxlY3QuZm9jdXMoKTsKLSAgICAgICAgcmV0dXJuIFVu
ZGVmaW5lZCgpOwotICAgICAgfQorICAgIGtkRGVidWcoKSA8PCAiS0pTOjpIVE1MRWxlbWVudEZ1
bmN0aW9uOjp0cnlDYWxsICIgPDwgZW5kbDsKKyAgICBET01FeGNlcHRpb25UcmFuc2xhdG9yIGV4
Y2VwdGlvbihleGVjKTsKKyAgICBIVE1MRWxlbWVudEltcGwgJmVsZW1lbnQgPSAqc3RhdGljX2Nh
c3Q8SFRNTEVsZW1lbnRJbXBsICo+KHN0YXRpY19jYXN0PEhUTUxFbGVtZW50ICo+KHRoaXNPYmou
aW1wKCkpLT5pbXBsKCkpOworCisgICAgaWYgKGVsZW1lbnQuaGFzTG9jYWxOYW1lKEhUTUxOYW1l
czo6Zm9ybSgpKSkgeworICAgICAgICBIVE1MRm9ybUVsZW1lbnRJbXBsICZmb3JtID0gc3RhdGlj
X2Nhc3Q8SFRNTEZvcm1FbGVtZW50SW1wbCAmPihlbGVtZW50KTsKKyAgICAgICAgaWYgKGlkID09
IEtKUzo6SFRNTEVsZW1lbnQ6OkZvcm1TdWJtaXQpIHsKKyAgICAgICAgICAgIGZvcm0uc3VibWl0
KCk7CisgICAgICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CisgICAgICAgIH0KKyAgICAgICAg
ZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6Rm9ybVJlc2V0KSB7CisgICAgICAgICAg
ICBmb3JtLnJlc2V0KCk7CisgICAgICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CisgICAgICAg
IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9JTlBVVDogewotICAgICAgSFRNTElu
cHV0RWxlbWVudEltcGwgJmlucHV0ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudEltcGwg
Jj4oZWxlbWVudCk7Ci0gICAgICBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6SW5wdXRCbHVy
KSB7Ci0gICAgICAgIGlucHV0LmJsdXIoKTsKLSAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwot
ICAgICAgfQotICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6SW5wdXRGb2N1
cykgewotICAgICAgICBpbnB1dC5mb2N1cygpOwotICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7
Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpJbnB1dFNl
bGVjdCkgewotICAgICAgICBpbnB1dC5zZWxlY3QoKTsKLSAgICAgICAgcmV0dXJuIFVuZGVmaW5l
ZCgpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6SW5w
dXRDbGljaykgewotICAgICAgICBpbnB1dC5jbGljaygpOwotICAgICAgICByZXR1cm4gVW5kZWZp
bmVkKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpJ
bnB1dFNldFNlbGVjdGlvblJhbmdlKSB7Ci0gICAgICAgIGlucHV0LnNldFNlbGVjdGlvblJhbmdl
KGFyZ3NbMF0udG9JbnQzMihleGVjKSwgYXJnc1sxXS50b0ludDMyKGV4ZWMpKTsKLSAgICAgICAg
cmV0dXJuIFVuZGVmaW5lZCgpOwotICAgICAgfQorICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFzTG9j
YWxOYW1lKEhUTUxOYW1lczo6c2VsZWN0KCkpKSB7CisgICAgICAgIEhUTUxTZWxlY3RFbGVtZW50
SW1wbCAmc2VsZWN0ID0gc3RhdGljX2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnRJbXBsICY+KGVsZW1l
bnQpOworICAgICAgICBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6U2VsZWN0QWRkKSB7Cisg
ICAgICAgICAgICBzZWxlY3QuYWRkKHRvSFRNTEVsZW1lbnQoYXJnc1swXSksIHRvSFRNTEVsZW1l
bnQoYXJnc1sxXSkpOworICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAgICAgICB9
CisgICAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlNlbGVjdFJlbW92ZSkg
eworICAgICAgICAgICAgc2VsZWN0LnJlbW92ZShpbnQoYXJnc1swXS50b051bWJlcihleGVjKSkp
OworICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAgICAgICB9CisgICAgICAgIGVs
c2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlNlbGVjdEJsdXIpIHsKKyAgICAgICAgICAg
IHNlbGVjdC5ibHVyKCk7CisgICAgICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CisgICAgICAg
IH0KKyAgICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6U2VsZWN0Rm9jdXMp
IHsKKyAgICAgICAgICAgIHNlbGVjdC5mb2N1cygpOworICAgICAgICAgICAgcmV0dXJuIFVuZGVm
aW5lZCgpOworICAgICAgICB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfTEFCRUw6
IHsKLSAgICAgIEhUTUxMYWJlbEVsZW1lbnRJbXBsICZsYWJlbCA9IHN0YXRpY19jYXN0PEhUTUxM
YWJlbEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgCi0gICAgICBpZiAoaWQgPT0gS0pT
OjpIVE1MRWxlbWVudDo6TGFiZWxGb2N1cykgewotICAgICAgICAgIGxhYmVsLmZvY3VzKCk7Ci0g
ICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwotICAgICAgfQorICAgIGVsc2UgaWYgKGVsZW1l
bnQuaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6aW5wdXQoKSkpIHsKKyAgICAgICAgSFRNTElucHV0
RWxlbWVudEltcGwgJmlucHV0ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudEltcGwgJj4o
ZWxlbWVudCk7CisgICAgICAgIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpJbnB1dEJsdXIp
IHsKKyAgICAgICAgICAgIGlucHV0LmJsdXIoKTsKKyAgICAgICAgICAgIHJldHVybiBVbmRlZmlu
ZWQoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50
OjpJbnB1dEZvY3VzKSB7CisgICAgICAgICAgICBpbnB1dC5mb2N1cygpOworICAgICAgICAgICAg
cmV0dXJuIFVuZGVmaW5lZCgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGlkID09IEtK
Uzo6SFRNTEVsZW1lbnQ6OklucHV0U2VsZWN0KSB7CisgICAgICAgICAgICBpbnB1dC5zZWxlY3Qo
KTsKKyAgICAgICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKKyAgICAgICAgfQorICAgICAgICBl
bHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpJbnB1dENsaWNrKSB7CisgICAgICAgICAg
ICBpbnB1dC5jbGljaygpOworICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAgICAg
ICB9CisgICAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OklucHV0U2V0U2Vs
ZWN0aW9uUmFuZ2UpIHsKKyAgICAgICAgICAgIGlucHV0LnNldFNlbGVjdGlvblJhbmdlKGFyZ3Nb
MF0udG9JbnQzMihleGVjKSwgYXJnc1sxXS50b0ludDMyKGV4ZWMpKTsKKyAgICAgICAgICAgIHJl
dHVybiBVbmRlZmluZWQoKTsKKyAgICAgICAgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNl
IElEX0xFR0VORDogewotICAgICAgSFRNTExlZ2VuZEVsZW1lbnRJbXBsICZsZWdlbmQgPSBzdGF0
aWNfY2FzdDxIVE1MTGVnZW5kRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICAgIAotICAg
ICAgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OkxlZ2VuZEZvY3VzKSB7Ci0gICAgICAgICAg
bGVnZW5kLmZvY3VzKCk7Ci0gICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwotICAgICAgfQor
ICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6YnV0dG9uKCkpKSB7
CisgICAgICAgIEhUTUxCdXR0b25FbGVtZW50SW1wbCAmYnV0dG9uID0gc3RhdGljX2Nhc3Q8SFRN
TEJ1dHRvbkVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgICAgICBpZiAoaWQgPT0gS0pTOjpI
VE1MRWxlbWVudDo6QnV0dG9uQmx1cikgeworICAgICAgICAgICAgYnV0dG9uLmJsdXIoKTsKKyAg
ICAgICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlm
IChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpCdXR0b25Gb2N1cykgeworICAgICAgICAgICAgYnV0
dG9uLmZvY3VzKCk7CisgICAgICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CisgICAgICAgIH0K
ICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9CVVRUT046IHsKLSAgICAgIEhUTUxCdXR0
b25FbGVtZW50SW1wbCAmYnV0dG9uID0gc3RhdGljX2Nhc3Q8SFRNTEJ1dHRvbkVsZW1lbnRJbXBs
ICY+KGVsZW1lbnQpOwotICAgICAgCi0gICAgICBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6
QnV0dG9uQmx1cikgewotICAgICAgICBidXR0b24uYmx1cigpOwotICAgICAgICByZXR1cm4gVW5k
ZWZpbmVkKCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50
OjpCdXR0b25Gb2N1cykgewotICAgICAgICBidXR0b24uZm9jdXMoKTsKLSAgICAgICAgcmV0dXJu
IFVuZGVmaW5lZCgpOwotICAgICAgfQorICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFzTG9jYWxOYW1l
KEhUTUxOYW1lczo6bGFiZWwoKSkpIHsKKyAgICAgICAgSFRNTExhYmVsRWxlbWVudEltcGwgJmxh
YmVsID0gc3RhdGljX2Nhc3Q8SFRNTExhYmVsRWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAg
ICAgIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpMYWJlbEZvY3VzKSB7CisgICAgICAgICAg
ICBsYWJlbC5mb2N1cygpOworICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAgICAg
ICB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfVEVYVEFSRUE6IHsKLSAgICAgIEhU
TUxUZXh0QXJlYUVsZW1lbnRJbXBsICZ0ZXh0YXJlYSA9IHN0YXRpY19jYXN0PEhUTUxUZXh0QXJl
YUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1l
bnQ6OlRleHRBcmVhQmx1cikgewotICAgICAgICB0ZXh0YXJlYS5ibHVyKCk7Ci0gICAgICAgIHJl
dHVybiBVbmRlZmluZWQoKTsKLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRN
TEVsZW1lbnQ6OlRleHRBcmVhRm9jdXMpIHsKLSAgICAgICAgdGV4dGFyZWEuZm9jdXMoKTsKLSAg
ICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoaWQgPT0g
S0pTOjpIVE1MRWxlbWVudDo6VGV4dEFyZWFTZWxlY3QpIHsKLSAgICAgICAgdGV4dGFyZWEuc2Vs
ZWN0KCk7Ci0gICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKLSAgICAgIH0KLSAgICAgIGVsc2Ug
aWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRleHRBcmVhU2V0U2VsZWN0aW9uUmFuZ2UpIHsK
LSAgICAgICAgdGV4dGFyZWEuc2V0U2VsZWN0aW9uUmFuZ2UoYXJnc1swXS50b0ludDMyKGV4ZWMp
LCBhcmdzWzFdLnRvSW50MzIoZXhlYykpOwotICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0g
ICAgICB9CisgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpsZWdl
bmQoKSkpIHsKKyAgICAgICAgSFRNTExlZ2VuZEVsZW1lbnRJbXBsICZsZWdlbmQgPSBzdGF0aWNf
Y2FzdDxIVE1MTGVnZW5kRWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgICAgIGlmIChpZCA9
PSBLSlM6OkhUTUxFbGVtZW50OjpMZWdlbmRGb2N1cykgeworICAgICAgICAgICAgbGVnZW5kLmZv
Y3VzKCk7CisgICAgICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CisgICAgICAgIH0KICAgICB9
Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9BOiB7Ci0gICAgICBIVE1MQW5jaG9yRWxlbWVudElt
cGwgJmFuY2hvciA9IHN0YXRpY19jYXN0PEhUTUxBbmNob3JFbGVtZW50SW1wbCAmPihlbGVtZW50
KTsKLSAgICAgIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpBbmNob3JCbHVyKSB7Ci0gICAg
ICAgIGFuY2hvci5ibHVyKCk7Ci0gICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKLSAgICAgIH0K
LSAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OkFuY2hvckZvY3VzKSB7Ci0g
ICAgICAgIGFuY2hvci5mb2N1cygpOwotICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAg
ICB9IAotICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6QW5jaG9yVG9TdHJp
bmcpIHsKLQlyZXR1cm4gU3RyaW5nKHRoaXNPYmoudG9TdHJpbmcoZXhlYykpOwotICAgICAgfQor
ICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dGV4dGFyZWEoKSkp
IHsKKyAgICAgICAgSFRNTFRleHRBcmVhRWxlbWVudEltcGwgJnRleHRhcmVhID0gc3RhdGljX2Nh
c3Q8SFRNTFRleHRBcmVhRWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgICAgIGlmIChpZCA9
PSBLSlM6OkhUTUxFbGVtZW50OjpUZXh0QXJlYUJsdXIpIHsKKyAgICAgICAgICAgIHRleHRhcmVh
LmJsdXIoKTsKKyAgICAgICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUZXh0QXJlYUZvY3VzKSB7Cisg
ICAgICAgICAgICB0ZXh0YXJlYS5mb2N1cygpOworICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5l
ZCgpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6
OlRleHRBcmVhU2VsZWN0KSB7CisgICAgICAgICAgICB0ZXh0YXJlYS5zZWxlY3QoKTsKKyAgICAg
ICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChp
ZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUZXh0QXJlYVNldFNlbGVjdGlvblJhbmdlKSB7CisgICAg
ICAgICAgICB0ZXh0YXJlYS5zZXRTZWxlY3Rpb25SYW5nZShhcmdzWzBdLnRvSW50MzIoZXhlYyks
IGFyZ3NbMV0udG9JbnQzMihleGVjKSk7CisgICAgICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7
CisgICAgICAgIH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9UQUJMRTogewotICAg
ICAgSFRNTFRhYmxlRWxlbWVudEltcGwgJnRhYmxlID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlRWxl
bWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6
VGFibGVDcmVhdGVUSGVhZCkKLSAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyx0YWJsZS5j
cmVhdGVUSGVhZCgpKTsKLSAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRh
YmxlRGVsZXRlVEhlYWQpIHsKLSAgICAgICAgdGFibGUuZGVsZXRlVEhlYWQoKTsKLSAgICAgICAg
cmV0dXJuIFVuZGVmaW5lZCgpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpI
VE1MRWxlbWVudDo6VGFibGVDcmVhdGVURm9vdCkKLSAgICAgICAgcmV0dXJuIGdldERPTU5vZGUo
ZXhlYyx0YWJsZS5jcmVhdGVURm9vdCgpKTsKLSAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRN
TEVsZW1lbnQ6OlRhYmxlRGVsZXRlVEZvb3QpIHsKLSAgICAgICAgdGFibGUuZGVsZXRlVEZvb3Qo
KTsKLSAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwotICAgICAgfQotICAgICAgZWxzZSBpZiAo
aWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6VGFibGVDcmVhdGVDYXB0aW9uKQotICAgICAgICByZXR1
cm4gZ2V0RE9NTm9kZShleGVjLHRhYmxlLmNyZWF0ZUNhcHRpb24oKSk7Ci0gICAgICBlbHNlIGlm
IChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUYWJsZURlbGV0ZUNhcHRpb24pIHsKLSAgICAgICAg
dGFibGUuZGVsZXRlQ2FwdGlvbigpOwotICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7Ci0gICAg
ICB9Ci0gICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUYWJsZUluc2VydFJv
dykKLSAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyx0YWJsZS5pbnNlcnRSb3coYXJnc1sw
XS50b0ludDMyKGV4ZWMpLCBleGNlcHRpb24pKTsKLSAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6
SFRNTEVsZW1lbnQ6OlRhYmxlRGVsZXRlUm93KSB7Ci0gICAgICAgIHRhYmxlLmRlbGV0ZVJvdyhh
cmdzWzBdLnRvSW50MzIoZXhlYyksIGV4Y2VwdGlvbik7Ci0gICAgICAgIHJldHVybiBVbmRlZmlu
ZWQoKTsKLSAgICAgIH0KKyAgICBlbHNlIGlmIChlbGVtZW50Lmhhc0xvY2FsTmFtZShIVE1MTmFt
ZXM6OmEoKSkpIHsKKyAgICAgICAgSFRNTEFuY2hvckVsZW1lbnRJbXBsICZhbmNob3IgPSBzdGF0
aWNfY2FzdDxIVE1MQW5jaG9yRWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgICAgIGlmIChp
ZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpBbmNob3JCbHVyKSB7CisgICAgICAgICAgICBhbmNob3Iu
Ymx1cigpOworICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAgICAgICB9CisgICAg
ICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OkFuY2hvckZvY3VzKSB7CisgICAg
ICAgICAgICBhbmNob3IuZm9jdXMoKTsKKyAgICAgICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsK
KyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpBbmNo
b3JUb1N0cmluZykKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcodGhpc09iai50b1N0cmluZyhl
eGVjKSk7CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfVEhFQUQ6Ci0gICAgY2FzZSBJ
RF9UQk9EWToKLSAgICBjYXNlIElEX1RGT09UOiB7Ci0gICAgICBIVE1MVGFibGVTZWN0aW9uRWxl
bWVudEltcGwgJnRhYmxlU2VjdGlvbiA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZVNlY3Rpb25FbGVt
ZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpU
YWJsZVNlY3Rpb25JbnNlcnRSb3cpCi0gICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsIHRh
YmxlU2VjdGlvbi5pbnNlcnRSb3coYXJnc1swXS50b0ludDMyKGV4ZWMpLCBleGNlcHRpb24pKTsK
LSAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRhYmxlU2VjdGlvbkRlbGV0
ZVJvdykgewotICAgICAgICB0YWJsZVNlY3Rpb24uZGVsZXRlUm93KGFyZ3NbMF0udG9JbnQzMihl
eGVjKSwgZXhjZXB0aW9uKTsKLSAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwotICAgICAgfQor
ICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dGFibGUoKSkpIHsK
KyAgICAgICAgSFRNTFRhYmxlRWxlbWVudEltcGwgJnRhYmxlID0gc3RhdGljX2Nhc3Q8SFRNTFRh
YmxlRWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgICAgIGlmIChpZCA9PSBLSlM6OkhUTUxF
bGVtZW50OjpUYWJsZUNyZWF0ZVRIZWFkKQorICAgICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUo
ZXhlYyx0YWJsZS5jcmVhdGVUSGVhZCgpKTsKKyAgICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpI
VE1MRWxlbWVudDo6VGFibGVEZWxldGVUSGVhZCkgeworICAgICAgICAgICAgdGFibGUuZGVsZXRl
VEhlYWQoKTsKKyAgICAgICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKKyAgICAgICAgfQorICAg
ICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpUYWJsZUNyZWF0ZVRGb290KQor
ICAgICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyx0YWJsZS5jcmVhdGVURm9vdCgpKTsK
KyAgICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6VGFibGVEZWxldGVURm9v
dCkgeworICAgICAgICAgICAgdGFibGUuZGVsZXRlVEZvb3QoKTsKKyAgICAgICAgICAgIHJldHVy
biBVbmRlZmluZWQoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChpZCA9PSBLSlM6OkhU
TUxFbGVtZW50OjpUYWJsZUNyZWF0ZUNhcHRpb24pCisgICAgICAgICAgICByZXR1cm4gZ2V0RE9N
Tm9kZShleGVjLHRhYmxlLmNyZWF0ZUNhcHRpb24oKSk7CisgICAgICAgIGVsc2UgaWYgKGlkID09
IEtKUzo6SFRNTEVsZW1lbnQ6OlRhYmxlRGVsZXRlQ2FwdGlvbikgeworICAgICAgICAgICAgdGFi
bGUuZGVsZXRlQ2FwdGlvbigpOworICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOworICAg
ICAgICB9CisgICAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRhYmxlSW5z
ZXJ0Um93KQorICAgICAgICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyx0YWJsZS5pbnNlcnRS
b3coYXJnc1swXS50b0ludDMyKGV4ZWMpLCBleGNlcHRpb24pKTsKKyAgICAgICAgZWxzZSBpZiAo
aWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6VGFibGVEZWxldGVSb3cpIHsKKyAgICAgICAgICAgIHRh
YmxlLmRlbGV0ZVJvdyhhcmdzWzBdLnRvSW50MzIoZXhlYyksIGV4Y2VwdGlvbik7CisgICAgICAg
ICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CisgICAgICAgIH0KICAgICB9Ci0gICAgYnJlYWs7Ci0g
ICAgY2FzZSBJRF9UUjogewotICAgICAgSFRNTFRhYmxlUm93RWxlbWVudEltcGwgJnRhYmxlUm93
ID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlUm93RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAg
ICBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6VGFibGVSb3dJbnNlcnRDZWxsKQotICAgICAg
ICByZXR1cm4gZ2V0RE9NTm9kZShleGVjLHRhYmxlUm93Lmluc2VydENlbGwoYXJnc1swXS50b0lu
dDMyKGV4ZWMpLCBleGNlcHRpb24pKTsKLSAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6SFRNTEVs
ZW1lbnQ6OlRhYmxlUm93RGVsZXRlQ2VsbCkgewotICAgICAgICB0YWJsZVJvdy5kZWxldGVDZWxs
KGFyZ3NbMF0udG9JbnQzMihleGVjKSwgZXhjZXB0aW9uKTsKLSAgICAgICAgcmV0dXJuIFVuZGVm
aW5lZCgpOwotICAgICAgfQorICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFzTG9jYWxOYW1lKEhUTUxO
YW1lczo6dGhlYWQoKSkgfHwKKyAgICAgICAgICAgICBlbGVtZW50Lmhhc0xvY2FsTmFtZShIVE1M
TmFtZXM6OnRib2R5KCkpIHx8CisgICAgICAgICAgICAgZWxlbWVudC5oYXNMb2NhbE5hbWUoSFRN
TE5hbWVzOjp0Zm9vdCgpKSkgeworICAgICAgICBIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGwg
JnRhYmxlU2VjdGlvbiA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbCAm
PihlbGVtZW50KTsKKyAgICAgICAgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6OlRhYmxlU2Vj
dGlvbkluc2VydFJvdykKKyAgICAgICAgICAgIHJldHVybiBnZXRET01Ob2RlKGV4ZWMsIHRhYmxl
U2VjdGlvbi5pbnNlcnRSb3coYXJnc1swXS50b0ludDMyKGV4ZWMpLCBleGNlcHRpb24pKTsKKyAg
ICAgICAgZWxzZSBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6VGFibGVTZWN0aW9uRGVsZXRl
Um93KSB7CisgICAgICAgICAgICB0YWJsZVNlY3Rpb24uZGVsZXRlUm93KGFyZ3NbMF0udG9JbnQz
MihleGVjKSwgZXhjZXB0aW9uKTsKKyAgICAgICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmIChlbGVtZW50Lmhhc0xvY2FsTmFtZShIVE1MTmFt
ZXM6OnRyKCkpKSB7CisgICAgICAgIEhUTUxUYWJsZVJvd0VsZW1lbnRJbXBsICZ0YWJsZVJvdyA9
IHN0YXRpY19jYXN0PEhUTUxUYWJsZVJvd0VsZW1lbnRJbXBsICY+KGVsZW1lbnQpOworICAgICAg
ICBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6VGFibGVSb3dJbnNlcnRDZWxsKQorICAgICAg
ICAgICAgcmV0dXJuIGdldERPTU5vZGUoZXhlYyx0YWJsZVJvdy5pbnNlcnRDZWxsKGFyZ3NbMF0u
dG9JbnQzMihleGVjKSwgZXhjZXB0aW9uKSk7CisgICAgICAgIGVsc2UgaWYgKGlkID09IEtKUzo6
SFRNTEVsZW1lbnQ6OlRhYmxlUm93RGVsZXRlQ2VsbCkgeworICAgICAgICAgICAgdGFibGVSb3cu
ZGVsZXRlQ2VsbChhcmdzWzBdLnRvSW50MzIoZXhlYyksIGV4Y2VwdGlvbik7CisgICAgICAgICAg
ICByZXR1cm4gVW5kZWZpbmVkKCk7CisgICAgICAgIH0KICAgICB9Ci0gICAgY2FzZSBJRF9NQVJR
VUVFOiB7CisgICAgZWxzZSBpZiAoZWxlbWVudC5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjptYXJx
dWVlKCkpKSB7CiAgICAgICAgIGlmIChpZCA9PSBLSlM6OkhUTUxFbGVtZW50OjpNYXJxdWVlU3Rh
cnQgJiYgZWxlbWVudC5yZW5kZXJlcigpICYmIAogICAgICAgICAgICAgZWxlbWVudC5yZW5kZXJl
cigpLT5sYXllcigpICYmCiAgICAgICAgICAgICBlbGVtZW50LnJlbmRlcmVyKCktPmxheWVyKCkt
Pm1hcnF1ZWUoKSkgewpAQCAtMjM1MSwxNCArMjQ5MCwxNCBAQCBWYWx1ZSBLSlM6OkhUTUxFbGVt
ZW50RnVuY3Rpb246OnRyeUNhbGwoCiAgICAgICAgICAgICByZXR1cm4gVW5kZWZpbmVkKCk7CiAg
ICAgICAgIH0KICAgICAgICAgaWYgKGlkID09IEtKUzo6SFRNTEVsZW1lbnQ6Ok1hcnF1ZWVTdG9w
ICYmIGVsZW1lbnQucmVuZGVyZXIoKSAmJiAKLSAgICAgICAgICAgICAgICAgZWxlbWVudC5yZW5k
ZXJlcigpLT5sYXllcigpICYmCi0gICAgICAgICAgICAgICAgIGVsZW1lbnQucmVuZGVyZXIoKS0+
bGF5ZXIoKS0+bWFycXVlZSgpKSB7CisgICAgICAgICAgICBlbGVtZW50LnJlbmRlcmVyKCktPmxh
eWVyKCkgJiYKKyAgICAgICAgICAgIGVsZW1lbnQucmVuZGVyZXIoKS0+bGF5ZXIoKS0+bWFycXVl
ZSgpKSB7CiAgICAgICAgICAgICBlbGVtZW50LnJlbmRlcmVyKCktPmxheWVyKCktPm1hcnF1ZWUo
KS0+c3RvcCgpOwogICAgICAgICAgICAgcmV0dXJuIFVuZGVmaW5lZCgpOwogICAgICAgICB9Ci0g
ICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBjYXNlIElEX0NBTlZBUzogeworI2lmIEFQUExFX0NI
QU5HRVMKKyAgICBlbHNlIGlmIChlbGVtZW50Lmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmNhbnZh
cygpKSkgewogICAgICAgICBpZiAoaWQgPT0gS0pTOjpIVE1MRWxlbWVudDo6R2V0Q29udGV4dCkg
ewogICAgICAgICAgICAgaWYgKGFyZ3Muc2l6ZSgpID09IDAgfHwgKGFyZ3Muc2l6ZSgpID09IDEg
JiYgYXJnc1swXS50b1N0cmluZyhleGVjKS5xc3RyaW5nKCkubG93ZXIoKSA9PSAiMmQiKSkgewog
ICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QobmV3IENvbnRleHQyRCgmZWxlbWVudCkpOwpA
QCAtMjM2Niw3NDIgKzI1MDUsNzY0IEBAIFZhbHVlIEtKUzo6SFRNTEVsZW1lbnRGdW5jdGlvbjo6
dHJ5Q2FsbCgKICAgICAgICAgICAgIHJldHVybiBVbmRlZmluZWQoKTsKICAgICAgICAgfQogICAg
IH0KLSAgICAKLSAgICBicmVhazsKLSAgfQorI2VuZGlmCiAKLSAgcmV0dXJuIFVuZGVmaW5lZCgp
OworICAgIHJldHVybiBVbmRlZmluZWQoKTsKIH0KIAogdm9pZCBLSlM6OkhUTUxFbGVtZW50Ojp0
cnlQdXQoRXhlY1N0YXRlICpleGVjLCBjb25zdCBJZGVudGlmaWVyICZwcm9wZXJ0eU5hbWUsIGNv
bnN0IFZhbHVlJiB2YWx1ZSwgaW50IGF0dHIpCiB7CiAjaWZkZWYgS0pTX1ZFUkJPU0UKLSAgRE9N
OjpET01TdHJpbmcgc3RyID0gdmFsdWUuaXNBKE51bGxUeXBlKSA/IERPTTo6RE9NU3RyaW5nKCkg
OiB2YWx1ZS50b1N0cmluZyhleGVjKS5zdHJpbmcoKTsKKyAgICBET006OkRPTVN0cmluZyBzdHIg
PSB2YWx1ZS5pc0EoTnVsbFR5cGUpID8gRE9NOjpET01TdHJpbmcoKSA6IHZhbHVlLnRvU3RyaW5n
KGV4ZWMpLnN0cmluZygpOwogI2VuZGlmCi0gIEhUTUxFbGVtZW50SW1wbCAmZWxlbWVudCA9ICpz
dGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwgKj4oaW1wbCgpKTsKKyAgICBIVE1MRWxlbWVudElt
cGwgJmVsZW1lbnQgPSAqc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KGltcGwoKSk7CiAj
aWZkZWYgS0pTX1ZFUkJPU0UKLSAga2REZWJ1Zyg2MDcwKSA8PCAiS0pTOjpIVE1MRWxlbWVudDo6
dHJ5UHV0ICIgPDwgcHJvcGVydHlOYW1lLnFzdHJpbmcoKQotICAgICAgICAgICAgICAgIDw8ICIg
dGhpc1RhZz0iIDw8IGVsZW1lbnQudGFnTmFtZSgpLnN0cmluZygpCi0gICAgICAgICAgICAgICAg
PDwgIiBzdHI9IiA8PCBzdHIuc3RyaW5nKCkgPDwgZW5kbDsKKyAgICBrZERlYnVnKDYwNzApIDw8
ICJLSlM6OkhUTUxFbGVtZW50Ojp0cnlQdXQgIiA8PCBwcm9wZXJ0eU5hbWUucXN0cmluZygpCisg
ICAgICAgICAgICAgICAgICA8PCAiIHRoaXNUYWc9IiA8PCBlbGVtZW50LnRhZ05hbWUoKS5zdHJp
bmcoKQorICAgICAgICAgICAgICAgICAgPDwgIiBzdHI9IiA8PCBzdHIuc3RyaW5nKCkgPDwgZW5k
bDsKICNlbmRpZgotICAvLyBGaXJzdCBsb29rIGF0IGR5bmFtaWMgcHJvcGVydGllcwotICBzd2l0
Y2ggKGVsZW1lbnQuaWQoKSkgewotICAgIGNhc2UgSURfU0VMRUNUOiB7Ci0gICAgICBIVE1MU2Vs
ZWN0RWxlbWVudEltcGwgJnNlbGVjdCA9IHN0YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50SW1w
bCAmPihlbGVtZW50KTsKLSAgICAgIGJvb2wgb2s7Ci0gICAgICAvKnVpbnQgdSA9Ki8gcHJvcGVy
dHlOYW1lLnRvVUxvbmcoJm9rKTsKLSAgICAgIGlmIChvaykgewotICAgICAgICBPYmplY3QgY29s
bCA9IE9iamVjdDo6ZHluYW1pY0Nhc3QoIGdldFNlbGVjdEhUTUxDb2xsZWN0aW9uKGV4ZWMsIHNl
bGVjdC5vcHRpb25zSFRNTENvbGxlY3Rpb24oKS5nZXQoKSwgJnNlbGVjdCkgKTsKLSAgICAgICAg
aWYgKCAhY29sbC5pc051bGwoKSApCi0gICAgICAgICAgY29sbC5wdXQoZXhlYyxwcm9wZXJ0eU5h
bWUsdmFsdWUpOwotICAgICAgICByZXR1cm47Ci0gICAgICB9CisgICAgLy8gRmlyc3QgbG9vayBh
dCBkeW5hbWljIHByb3BlcnRpZXMKKyAgICBpZiAoZWxlbWVudC5oYXNMb2NhbE5hbWUoSFRNTE5h
bWVzOjpzZWxlY3QoKSkpIHsKKyAgICAgICAgSFRNTFNlbGVjdEVsZW1lbnRJbXBsICZzZWxlY3Qg
PSBzdGF0aWNfY2FzdDxIVE1MU2VsZWN0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7CisgICAgICAg
IGJvb2wgb2s7CisgICAgICAgIC8qdWludCB1ID0qLyBwcm9wZXJ0eU5hbWUudG9VTG9uZygmb2sp
OworICAgICAgICBpZiAob2spIHsKKyAgICAgICAgICAgIE9iamVjdCBjb2xsID0gT2JqZWN0Ojpk
eW5hbWljQ2FzdCggZ2V0U2VsZWN0SFRNTENvbGxlY3Rpb24oZXhlYywgc2VsZWN0Lm9wdGlvbnNI
VE1MQ29sbGVjdGlvbigpLmdldCgpLCAmc2VsZWN0KSApOworICAgICAgICAgICAgaWYgKCFjb2xs
LmlzTnVsbCgpKQorICAgICAgICAgICAgICAgIGNvbGwucHV0KGV4ZWMscHJvcGVydHlOYW1lLHZh
bHVlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAgIH0KICNpZiBBUFBMRV9D
SEFOR0VTCi0gICAgY2FzZSBJRF9FTUJFRDoKLSAgICBjYXNlIElEX09CSkVDVDoKLSAgICBjYXNl
IElEX0FQUExFVDogeworICAgIGVsc2UgaWYgKGVsZW1lbnQuaGFzTG9jYWxOYW1lKEhUTUxOYW1l
czo6ZW1iZWQoKSkgfHwKKyAgICAgICAgICAgICBlbGVtZW50Lmhhc0xvY2FsTmFtZShIVE1MTmFt
ZXM6Om9iamVjdCgpKSB8fAorICAgICAgICAgICAgIGVsZW1lbnQuaGFzTG9jYWxOYW1lKEhUTUxO
YW1lczo6YXBwbGV0KCkpKSB7CiAJVmFsdWUgcnVudGltZU9iamVjdCA9IGdldFJ1bnRpbWVPYmpl
Y3QoZXhlYywmZWxlbWVudCk7CiAJaWYgKCFydW50aW1lT2JqZWN0LmlzTnVsbCgpKSB7CiAJICAg
IE9iamVjdEltcCAqaW1wID0gc3RhdGljX2Nhc3Q8T2JqZWN0SW1wICo+KHJ1bnRpbWVPYmplY3Qu
aW1wKCkpOwotCSAgICBpZiAoaW1wLT5jYW5QdXQoZXhlYywgcHJvcGVydHlOYW1lKSkgeworCSAg
ICBpZiAoaW1wLT5jYW5QdXQoZXhlYywgcHJvcGVydHlOYW1lKSkKIAkJcmV0dXJuIGltcC0+cHV0
IChleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlKTsKLQkgICAgfQogCX0KICAgICB9Ci0gICAgICBi
cmVhazsKICNlbmRpZgotICAgIGJyZWFrOwotICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gIH0K
IAotICBjb25zdCBIYXNoVGFibGUqIHRhYmxlID0gY2xhc3NJbmZvKCktPnByb3BIYXNoVGFibGU7
IC8vIGdldCB0aGUgcmlnaHQgaGFzaHRhYmxlCi0gIGNvbnN0IEhhc2hFbnRyeSogZW50cnkgPSBM
b29rdXA6OmZpbmRFbnRyeSh0YWJsZSwgcHJvcGVydHlOYW1lKTsKLSAgaWYgKGVudHJ5KSB7Ci0g
ICAgaWYgKGVudHJ5LT5hdHRyICYgRnVuY3Rpb24pIC8vIGZ1bmN0aW9uOiBwdXQgYXMgb3ZlcnJp
ZGUgcHJvcGVydHkKLSAgICB7Ci0gICAgICBPYmplY3RJbXA6OnB1dChleGVjLCBwcm9wZXJ0eU5h
bWUsIHZhbHVlLCBhdHRyKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgZWxzZSBpZiAoKGVu
dHJ5LT5hdHRyICYgUmVhZE9ubHkpID09IDApIC8vIGxldCBET01PYmplY3RMb29rdXBQdXQgcHJp
bnQgdGhlIHdhcm5pbmcgaWYgbm90Ci0gICAgewotICAgICAgcHV0VmFsdWUoZXhlYywgZW50cnkt
PnZhbHVlLCB2YWx1ZSwgYXR0cik7Ci0gICAgICByZXR1cm47CisgICAgY29uc3QgSGFzaFRhYmxl
KiB0YWJsZSA9IGNsYXNzSW5mbygpLT5wcm9wSGFzaFRhYmxlOyAvLyBnZXQgdGhlIHJpZ2h0IGhh
c2h0YWJsZQorICAgIGNvbnN0IEhhc2hFbnRyeSogZW50cnkgPSBMb29rdXA6OmZpbmRFbnRyeSh0
YWJsZSwgcHJvcGVydHlOYW1lKTsKKyAgICBpZiAoZW50cnkpIHsKKyAgICAgICAgaWYgKGVudHJ5
LT5hdHRyICYgRnVuY3Rpb24pIHsgLy8gZnVuY3Rpb246IHB1dCBhcyBvdmVycmlkZSBwcm9wZXJ0
eQorICAgICAgICAgICAgT2JqZWN0SW1wOjpwdXQoZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwg
YXR0cik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAo
KGVudHJ5LT5hdHRyICYgUmVhZE9ubHkpID09IDApIHsgLy8gbGV0IERPTU9iamVjdExvb2t1cFB1
dCBwcmludCB0aGUgd2FybmluZyBpZiBub3QKKyAgICAgICAgICAgIHB1dFZhbHVlKGV4ZWMsIGVu
dHJ5LT52YWx1ZSwgdmFsdWUsIGF0dHIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CiAgICAgfQotICB9Ci0gIERPTU9iamVjdExvb2t1cFB1dDxLSlM6OkhUTUxFbGVtZW50LCBET01F
bGVtZW50PihleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBhdHRyLCAmSFRNTEVsZW1lbnRUYWJs
ZSwgdGhpcyk7CisKKyAgICBET01PYmplY3RMb29rdXBQdXQ8S0pTOjpIVE1MRWxlbWVudCwgRE9N
RWxlbWVudD4oZXhlYywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgYXR0ciwgJkhUTUxFbGVtZW50VGFi
bGUsIHRoaXMpOwogfQogCi12b2lkIEhUTUxFbGVtZW50OjpwdXRWYWx1ZShFeGVjU3RhdGUgKmV4
ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBpbnQpCit2b2lkIEhUTUxFbGVtZW50
OjpodG1sU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFs
dWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCiB7Ci0gIERPTUV4Y2VwdGlvblRyYW5zbGF0
b3IgZXhjZXB0aW9uKGV4ZWMpOwotICBET006OkRPTVN0cmluZyBzdHIgPSB2YWx1ZS5pc0EoTnVs
bFR5cGUpID8gRE9NOjpET01TdHJpbmcoKSA6IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLnN0cmluZygp
OwotICBIVE1MRWxlbWVudEltcGwgJmVsZW1lbnQgPSAqc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJ
bXBsICo+KGltcGwoKSk7Ci0jaWZkZWYgS0pTX1ZFUkJPU0UKLSAga2REZWJ1Zyg2MDcwKSA8PCAi
S0pTOjpIVE1MRWxlbWVudDo6cHV0VmFsdWUgIgotICAgICAgICAgICAgICAgIDw8ICIgdGhpc1Rh
Zz0iIDw8IGVsZW1lbnQudGFnTmFtZSgpLnN0cmluZygpCi0gICAgICAgICAgICAgICAgPDwgIiB0
b2tlbj0iIDw8IHRva2VuIDw8IGVuZGw7Ci0jZW5kaWYKKyAgICBIVE1MSGVhZEVsZW1lbnRJbXBs
ICZoZWFkID0gKnN0YXRpY19jYXN0PEhUTUxIZWFkRWxlbWVudEltcGwqPihpbXBsKCkpOworICAg
IGlmICh0b2tlbiA9PSBIZWFkUHJvZmlsZSkgCisgICAgICAgIGhlYWQuc2V0UHJvZmlsZShzdHIp
OworfQogCi0gIHN3aXRjaCAoZWxlbWVudC5pZCgpKSB7Ci0gIGNhc2UgSURfSFRNTDogewotICAg
ICAgSFRNTEh0bWxFbGVtZW50SW1wbCAmaHRtbCA9IHN0YXRpY19jYXN0PEhUTUxIdG1sRWxlbWVu
dEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIEh0
bWxWZXJzaW9uOiAgICAgICAgIHsgaHRtbC5zZXRWZXJzaW9uKHN0cik7IHJldHVybjsgfQotICAg
ICAgfQotICB9Ci0gIGJyZWFrOwotICBjYXNlIElEX0hFQUQ6IHsKLSAgICBIVE1MSGVhZEVsZW1l
bnRJbXBsICZoZWFkID0gc3RhdGljX2Nhc3Q8SFRNTEhlYWRFbGVtZW50SW1wbCAmPihlbGVtZW50
KTsKK3ZvaWQgSFRNTEVsZW1lbnQ6OmhlYWRTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAg
ICBIVE1MSGVhZEVsZW1lbnRJbXBsICZoZWFkID0gKnN0YXRpY19jYXN0PEhUTUxIZWFkRWxlbWVu
dEltcGwqPihpbXBsKCkpOworICAgIGlmICh0b2tlbiA9PSBIZWFkUHJvZmlsZSkgCisgICAgICAg
IGhlYWQuc2V0UHJvZmlsZShzdHIpOworfQorCit2b2lkIEhUTUxFbGVtZW50OjpsaW5rU2V0dGVy
KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERP
TTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTExpbmtFbGVtZW50SW1wbCAmbGluayA9ICpz
dGF0aWNfY2FzdDxIVE1MTGlua0VsZW1lbnRJbXBsKj4oaW1wbCgpKTsKICAgICBzd2l0Y2ggKHRv
a2VuKSB7Ci0gICAgY2FzZSBIZWFkUHJvZmlsZTogICAgICAgICB7IGhlYWQuc2V0UHJvZmlsZShz
dHIpOyByZXR1cm47IH0KLSAgICB9Ci0gIH0KLSAgYnJlYWs7Ci0gIGNhc2UgSURfTElOSzogewot
ICAgIEhUTUxMaW5rRWxlbWVudEltcGwgJmxpbmsgPSBzdGF0aWNfY2FzdDxIVE1MTGlua0VsZW1l
bnRJbXBsICY+KGVsZW1lbnQpOwotICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgTGlu
a0Rpc2FibGVkOiAgICAgICAgeyBsaW5rLnNldERpc2FibGVkKHZhbHVlLnRvQm9vbGVhbihleGVj
KSk7IHJldHVybjsgfQotICAgICAgY2FzZSBMaW5rQ2hhcnNldDogICAgICAgICB7IGxpbmsuc2V0
Q2hhcnNldChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgTGlua0hyZWY6ICAgICAgICAgICAg
eyBsaW5rLnNldEhyZWYoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIExpbmtIcmVmTGFuZzog
ICAgICAgIHsgbGluay5zZXRIcmVmbGFuZyhzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgTGlu
a01lZGlhOiAgICAgICAgICAgeyBsaW5rLnNldE1lZGlhKHN0cik7IHJldHVybjsgfQotICAgICAg
Y2FzZSBMaW5rUmVsOiAgICAgICAgICAgICB7IGxpbmsuc2V0UmVsKHN0cik7IHJldHVybjsgfQot
ICAgICAgY2FzZSBMaW5rUmV2OiAgICAgICAgICAgICB7IGxpbmsuc2V0UmV2KHN0cik7IHJldHVy
bjsgfQotICAgICAgY2FzZSBMaW5rVGFyZ2V0OiAgICAgICAgICB7IGxpbmsuc2V0VGFyZ2V0KHN0
cik7IHJldHVybjsgfQotICAgICAgY2FzZSBMaW5rVHlwZTogICAgICAgICAgICB7IGxpbmsuc2V0
VHlwZShzdHIpOyByZXR1cm47IH0KLSAgICAgIH0KLSAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2Fz
ZSBJRF9USVRMRTogewotICAgICAgSFRNTFRpdGxlRWxlbWVudEltcGwgJnRpdGxlID0gc3RhdGlj
X2Nhc3Q8SFRNTFRpdGxlRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRv
a2VuKSB7Ci0gICAgICBjYXNlIFRpdGxlVGV4dDogICAgICAgICAgICAgICAgIHsgdGl0bGUuc2V0
VGV4dChzdHIpOyByZXR1cm47IH0KLSAgICAgIH0KLSAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2Fz
ZSBJRF9NRVRBOiB7Ci0gICAgICBIVE1MTWV0YUVsZW1lbnRJbXBsICZtZXRhID0gc3RhdGljX2Nh
c3Q8SFRNTE1ldGFFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4p
IHsKLSAgICAgIGNhc2UgTWV0YUNvbnRlbnQ6ICAgICAgICAgeyBtZXRhLnNldENvbnRlbnQoc3Ry
KTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIE1ldGFIdHRwRXF1aXY6ICAgICAgIHsgbWV0YS5zZXRI
dHRwRXF1aXYoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIE1ldGFOYW1lOiAgICAgICAgICAg
IHsgbWV0YS5zZXROYW1lKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBNZXRhU2NoZW1lOiAg
ICAgICAgICB7IG1ldGEuc2V0U2NoZW1lKHN0cik7IHJldHVybjsgfQotICAgICAgfQotICAgIH0K
LSAgICBicmVhazsKLSAgICBjYXNlIElEX0JBU0U6IHsKLSAgICAgIEhUTUxCYXNlRWxlbWVudElt
cGwgJmJhc2UgPSBzdGF0aWNfY2FzdDxIVE1MQmFzZUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwot
ICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgY2FzZSBCYXNlSHJlZjogICAgICAgICAgICB7
IGJhc2Uuc2V0SHJlZihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQmFzZVRhcmdldDogICAg
ICAgICAgeyBiYXNlLnNldFRhcmdldChzdHIpOyByZXR1cm47IH0KLSAgICAgIH0KLSAgICB9Ci0g
ICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9JU0lOREVYOiB7Ci0gICAgICBIVE1MSXNJbmRleEVsZW1l
bnRJbXBsICZpc2luZGV4ID0gc3RhdGljX2Nhc3Q8SFRNTElzSW5kZXhFbGVtZW50SW1wbCAmPihl
bGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIC8vIHJlYWQtb25seTogZm9y
bQotICAgICAgY2FzZSBJc0luZGV4UHJvbXB0OiAgICAgICAgICAgICAgIHsgaXNpbmRleC5zZXRQ
cm9tcHQoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICB9Ci0gICAgfQotICAgIGJyZWFrOwotICAgIGNh
c2UgSURfU1RZTEU6IHsKLSAgICAgIEhUTUxTdHlsZUVsZW1lbnRJbXBsICZzdHlsZSA9IHN0YXRp
Y19jYXN0PEhUTUxTdHlsZUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0
b2tlbikgewotICAgICAgY2FzZSBTdHlsZURpc2FibGVkOiAgICAgICAgeyBzdHlsZS5zZXREaXNh
YmxlZCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgU3R5bGVN
ZWRpYTogICAgICAgICAgIHsgc3R5bGUuc2V0TWVkaWEoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBj
YXNlIFN0eWxlVHlwZTogICAgICAgICAgICB7IHN0eWxlLnNldFR5cGUoc3RyKTsgcmV0dXJuOyB9
Ci0gICAgICB9Ci0gICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfQk9EWTogewotICAgICAg
SFRNTEJvZHlFbGVtZW50SW1wbCAmYm9keSA9IHN0YXRpY19jYXN0PEhUTUxCb2R5RWxlbWVudElt
cGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIEJvZHlB
TGluazogICAgICAgICAgIHsgYm9keS5zZXRBTGluayhzdHIpOyByZXR1cm47IH0KLSAgICAgIGNh
c2UgQm9keUJhY2tncm91bmQ6ICAgICAgeyBib2R5LnNldEJhY2tncm91bmQoc3RyKTsgcmV0dXJu
OyB9Ci0gICAgICBjYXNlIEJvZHlCZ0NvbG9yOiAgICAgICAgIHsgYm9keS5zZXRCZ0NvbG9yKHN0
cik7IHJldHVybjsgfQotICAgICAgY2FzZSBCb2R5TGluazogICAgICAgICAgICB7IGJvZHkuc2V0
TGluayhzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQm9keVRleHQ6ICAgICAgICAgICAgeyBi
b2R5LnNldFRleHQoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEJvZHlWTGluazogICAgICAg
ICAgIHsgYm9keS5zZXRWTGluayhzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQm9keVNjcm9s
bExlZnQ6Ci0gICAgICBjYXNlIEJvZHlTY3JvbGxUb3A6IHsKLSAgICAgICAgICBRU2Nyb2xsVmll
dyogc3ZpZXcgPSBib2R5Lm93bmVyRG9jdW1lbnQoKS0+dmlldygpOwotICAgICAgICAgIGlmIChz
dmlldykgewotICAgICAgICAgICAgICAvLyBVcGRhdGUgdGhlIGRvY3VtZW50J3MgbGF5b3V0IGJl
Zm9yZSB3ZSBjb21wdXRlIHRoZXNlIGF0dHJpYnV0ZXMuCi0gICAgICAgICAgICAgIGlmIChEb2N1
bWVudEltcGwqIGRvYyA9IGJvZHkuZ2V0RG9jdW1lbnQoKSkKLSAgICAgICAgICAgICAgICAgIGRv
Yy0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7Ci0gICAgICAgICAgICAg
IGlmICh0b2tlbiA9PSBCb2R5U2Nyb2xsTGVmdCkKLSAgICAgICAgICAgICAgICAgIHN2aWV3LT5z
ZXRDb250ZW50c1Bvcyh2YWx1ZS50b0ludDMyKGV4ZWMpLCBzdmlldy0+Y29udGVudHNZKCkpOwot
ICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICBzdmlldy0+c2V0Q29udGVudHNQ
b3Moc3ZpZXctPmNvbnRlbnRzWCgpLCB2YWx1ZS50b0ludDMyKGV4ZWMpKTsKLSAgICAgICAgICB9
Ci0gICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIGJyZWFr
OwotICAgIGNhc2UgSURfRk9STTogewotICAgICAgSFRNTEZvcm1FbGVtZW50SW1wbCAmZm9ybSA9
IHN0YXRpY19jYXN0PEhUTUxGb3JtRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0
Y2ggKHRva2VuKSB7Ci0gICAgICAvLyByZWFkLW9ubHk6IGVsZW1lbnRzCi0gICAgICAvLyByZWFk
LW9ubHk6IGxlbmd0aAotICAgICAgY2FzZSBGb3JtTmFtZTogICAgICAgICAgICB7IGZvcm0uc2V0
TmFtZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgRm9ybUFjY2VwdENoYXJzZXQ6ICAgeyBm
b3JtLnNldEFjY2VwdENoYXJzZXQoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEZvcm1BY3Rp
b246ICAgICAgICAgIHsgZm9ybS5zZXRBY3Rpb24oc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNl
IEZvcm1FbmNUeXBlOiAgICAgICAgIHsgZm9ybS5zZXRFbmN0eXBlKHN0cik7IHJldHVybjsgfQot
ICAgICAgY2FzZSBGb3JtTWV0aG9kOiAgICAgICAgICB7IGZvcm0uc2V0TWV0aG9kKHN0cik7IHJl
dHVybjsgfQotICAgICAgY2FzZSBGb3JtVGFyZ2V0OiAgICAgICAgICB7IGZvcm0uc2V0VGFyZ2V0
KHN0cik7IHJldHVybjsgfQotICAgICAgfQotICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElE
X1NFTEVDVDogewotICAgICAgSFRNTFNlbGVjdEVsZW1lbnRJbXBsICZzZWxlY3QgPSBzdGF0aWNf
Y2FzdDxIVE1MU2VsZWN0RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRv
a2VuKSB7Ci0gICAgICAvLyByZWFkLW9ubHk6IHR5cGUKLSAgICAgIGNhc2UgU2VsZWN0U2VsZWN0
ZWRJbmRleDogICB7IHNlbGVjdC5zZXRTZWxlY3RlZEluZGV4KHZhbHVlLnRvSW50MzIoZXhlYykp
OyByZXR1cm47IH0KLSAgICAgIGNhc2UgU2VsZWN0VmFsdWU6ICAgICAgICAgICB7IHNlbGVjdC5z
ZXRWYWx1ZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgU2VsZWN0TGVuZ3RoOiAgICAgICAg
ICB7IC8vIHJlYWQtb25seSBhY2NvcmRpbmcgdG8gdGhlIE5TIHNwZWMsIGJ1dCB3ZWJwYWdlcyBu
ZWVkIGl0IHdyaXRlYWJsZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBPYmplY3QgY29sbCA9IE9iamVjdDo6ZHluYW1pY0Nhc3QoIGdldFNlbGVjdEhUTUxDb2xsZWN0
aW9uKGV4ZWMsIHNlbGVjdC5vcHRpb25zSFRNTENvbGxlY3Rpb24oKS5nZXQoKSwgJnNlbGVjdCkg
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAhY29sbC5p
c051bGwoKSApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29s
bC5wdXQoZXhlYyxsZW5ndGhQcm9wZXJ0eU5hbWUsdmFsdWUpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAvLyByZWFkLW9ubHk6IGZvcm0KLSAgICAgIC8vIHJlYWQt
b25seTogb3B0aW9ucwotICAgICAgY2FzZSBTZWxlY3REaXNhYmxlZDogICAgICAgIHsgc2VsZWN0
LnNldERpc2FibGVkKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2Fz
ZSBTZWxlY3RNdWx0aXBsZTogICAgICAgIHsgc2VsZWN0LnNldE11bHRpcGxlKHZhbHVlLnRvQm9v
bGVhbihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBTZWxlY3ROYW1lOiAgICAgICAgICAg
IHsgc2VsZWN0LnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFNlbGVjdFNpemU6
ICAgICAgICAgICAgeyBzZWxlY3Quc2V0U2l6ZSh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJu
OyB9Ci0gICAgICBjYXNlIFNlbGVjdFRhYkluZGV4OiAgICAgICAgeyBzZWxlY3Quc2V0VGFiSW5k
ZXgodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQotICAgICAgfQotICAgIH0KLSAgICBi
cmVhazsKLSAgICBjYXNlIElEX09QVEdST1VQOiB7Ci0gICAgICBIVE1MT3B0R3JvdXBFbGVtZW50
SW1wbCAmb3B0Z3JvdXAgPSBzdGF0aWNfY2FzdDxIVE1MT3B0R3JvdXBFbGVtZW50SW1wbCAmPihl
bGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgT3B0R3JvdXBEaXNh
YmxlZDogICAgICAgIHsgb3B0Z3JvdXAuc2V0RGlzYWJsZWQodmFsdWUudG9Cb29sZWFuKGV4ZWMp
KTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIE9wdEdyb3VwTGFiZWw6ICAgICAgICAgICB7IG9wdGdy
b3VwLnNldExhYmVsKHN0cik7IHJldHVybjsgfQotICAgICAgfQotICAgIH0KLSAgICBicmVhazsK
LSAgICBjYXNlIElEX09QVElPTjogewotICAgICAgSFRNTE9wdGlvbkVsZW1lbnRJbXBsICZvcHRp
b24gPSBzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAg
ICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICAvLyByZWFkLW9ubHk6IGZvcm0KLSAgICAgIGNhc2Ug
T3B0aW9uRGVmYXVsdFNlbGVjdGVkOiB7IG9wdGlvbi5zZXREZWZhdWx0U2VsZWN0ZWQodmFsdWUu
dG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIE9wdGlvblRleHQ6ICAgICAg
ICAgICAgeyBvcHRpb24uc2V0VGV4dChzdHIsIGV4Y2VwdGlvbik7IHJldHVybjsgfQotICAgICAg
Ly8gcmVhZC1vbmx5OiBpbmRleAotICAgICAgY2FzZSBPcHRpb25EaXNhYmxlZDogICAgICAgIHsg
b3B0aW9uLnNldERpc2FibGVkKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQotICAg
ICAgY2FzZSBPcHRpb25MYWJlbDogICAgICAgICAgIHsgb3B0aW9uLnNldExhYmVsKHN0cik7IHJl
dHVybjsgfQotICAgICAgY2FzZSBPcHRpb25TZWxlY3RlZDogICAgICAgIHsgb3B0aW9uLnNldFNl
bGVjdGVkKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBPcHRp
b25WYWx1ZTogICAgICAgICAgIHsgb3B0aW9uLnNldFZhbHVlKHN0cik7IHJldHVybjsgfQotICAg
ICAgfQorICAgICAgICBjYXNlIExpbmtEaXNhYmxlZDogICAgICAgIHsgbGluay5zZXREaXNhYmxl
ZCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBMaW5rQ2hh
cnNldDogICAgICAgICB7IGxpbmsuc2V0Q2hhcnNldChzdHIpOyByZXR1cm47IH0KKyAgICAgICAg
Y2FzZSBMaW5rSHJlZjogICAgICAgICAgICB7IGxpbmsuc2V0SHJlZihzdHIpOyByZXR1cm47IH0K
KyAgICAgICAgY2FzZSBMaW5rSHJlZkxhbmc6ICAgICAgICB7IGxpbmsuc2V0SHJlZmxhbmcoc3Ry
KTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgTGlua01lZGlhOiAgICAgICAgICAgeyBsaW5rLnNl
dE1lZGlhKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIExpbmtSZWw6ICAgICAgICAgICAg
IHsgbGluay5zZXRSZWwoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgTGlua1JldjogICAg
ICAgICAgICAgeyBsaW5rLnNldFJldihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBMaW5r
VGFyZ2V0OiAgICAgICAgICB7IGxpbmsuc2V0VGFyZ2V0KHN0cik7IHJldHVybjsgfQorICAgICAg
ICBjYXNlIExpbmtUeXBlOiAgICAgICAgICAgIHsgbGluay5zZXRUeXBlKHN0cik7IHJldHVybjsg
fQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0lOUFVUOiB7Ci0gICAgICBIVE1MSW5w
dXRFbGVtZW50SW1wbCAmaW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50SW1wbCAm
PihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgSW5wdXREZWZh
dWx0VmFsdWU6ICAgIHsgaW5wdXQuc2V0RGVmYXVsdFZhbHVlKHN0cik7IHJldHVybjsgfQotICAg
ICAgY2FzZSBJbnB1dERlZmF1bHRDaGVja2VkOiAgeyBpbnB1dC5zZXREZWZhdWx0Q2hlY2tlZCh2
YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KLSAgICAgIC8vIHJlYWQtb25seTogZm9y
bQotICAgICAgY2FzZSBJbnB1dEFjY2VwdDogICAgICAgICAgeyBpbnB1dC5zZXRBY2NlcHQoc3Ry
KTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElucHV0QWNjZXNzS2V5OiAgICAgICB7IGlucHV0LnNl
dEFjY2Vzc0tleShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSW5wdXRBbGlnbjogICAgICAg
ICAgIHsgaW5wdXQuc2V0QWxpZ24oc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElucHV0QWx0
OiAgICAgICAgICAgICB7IGlucHV0LnNldEFsdChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2Ug
SW5wdXRDaGVja2VkOiAgICAgICAgIHsgaW5wdXQuc2V0Q2hlY2tlZCh2YWx1ZS50b0Jvb2xlYW4o
ZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSW5wdXREaXNhYmxlZDogICAgICAgIHsgaW5w
dXQuc2V0RGlzYWJsZWQodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBj
YXNlIElucHV0TWF4TGVuZ3RoOiAgICAgICB7IGlucHV0LnNldE1heExlbmd0aCh2YWx1ZS50b0lu
dDMyKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElucHV0TmFtZTogICAgICAgICAgICB7
IGlucHV0LnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElucHV0UmVhZE9ubHk6
ICAgICAgICB7IGlucHV0LnNldFJlYWRPbmx5KHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVy
bjsgfQotICAgICAgY2FzZSBJbnB1dFNlbGVjdGlvblN0YXJ0OiAgeyBpbnB1dC5zZXRTZWxlY3Rp
b25TdGFydCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElucHV0
U2VsZWN0aW9uRW5kOiAgICB7IGlucHV0LnNldFNlbGVjdGlvbkVuZCh2YWx1ZS50b0ludDMyKGV4
ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElucHV0U2l6ZTogICAgICAgICAgICB7IGlucHV0
LnNldFNpemUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElucHV0U3JjOiAgICAgICAgICAg
ICB7IGlucHV0LnNldFNyYyhzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSW5wdXRUYWJJbmRl
eDogICAgICAgIHsgaW5wdXQuc2V0VGFiSW5kZXgodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVy
bjsgfQotICAgICAgY2FzZSBJbnB1dFR5cGU6ICAgICAgICAgICAgeyBpbnB1dC5zZXRUeXBlKHN0
cik7IHJldHVybjsgfQotICAgICAgY2FzZSBJbnB1dFVzZU1hcDogICAgICAgICAgeyBpbnB1dC5z
ZXRVc2VNYXAoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElucHV0VmFsdWU6ICAgICAgICAg
ICB7IGlucHV0LnNldFZhbHVlKHN0cik7IHJldHVybjsgfQotICAgICAgfQotICAgIH0KLSAgICBi
cmVhazsKLSAgICBjYXNlIElEX1RFWFRBUkVBOiB7Ci0gICAgICBIVE1MVGV4dEFyZWFFbGVtZW50
SW1wbCAmdGV4dGFyZWEgPSBzdGF0aWNfY2FzdDxIVE1MVGV4dEFyZWFFbGVtZW50SW1wbCAmPihl
bGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgVGV4dEFyZWFEZWZh
dWx0VmFsdWU6ICAgIHsgdGV4dGFyZWEuc2V0RGVmYXVsdFZhbHVlKHN0cik7IHJldHVybjsgfQot
ICAgICAgLy8gcmVhZC1vbmx5OiBmb3JtCi0gICAgICBjYXNlIFRleHRBcmVhQWNjZXNzS2V5OiAg
ICAgICB7IHRleHRhcmVhLnNldEFjY2Vzc0tleShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2Ug
VGV4dEFyZWFDb2xzOiAgICAgICAgICAgIHsgdGV4dGFyZWEuc2V0Q29scyh2YWx1ZS50b0ludDMy
KGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRleHRBcmVhRGlzYWJsZWQ6ICAgICAgICB7
IHRleHRhcmVhLnNldERpc2FibGVkKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQot
ICAgICAgY2FzZSBUZXh0QXJlYU5hbWU6ICAgICAgICAgICAgeyB0ZXh0YXJlYS5zZXROYW1lKHN0
cik7IHJldHVybjsgfQotICAgICAgY2FzZSBUZXh0QXJlYVJlYWRPbmx5OiAgICAgICAgeyB0ZXh0
YXJlYS5zZXRSZWFkT25seSh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KLSAgICAg
IGNhc2UgVGV4dEFyZWFSb3dzOiAgICAgICAgICAgIHsgdGV4dGFyZWEuc2V0Um93cyh2YWx1ZS50
b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRleHRBcmVhU2VsZWN0aW9uU3Rh
cnQ6ICB7IHRleHRhcmVhLnNldFNlbGVjdGlvblN0YXJ0KHZhbHVlLnRvSW50MzIoZXhlYykpOyBy
ZXR1cm47IH0KLSAgICAgIGNhc2UgVGV4dEFyZWFTZWxlY3Rpb25FbmQ6ICAgIHsgdGV4dGFyZWEu
c2V0U2VsZWN0aW9uRW5kKHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNh
c2UgVGV4dEFyZWFUYWJJbmRleDogICAgICAgIHsgdGV4dGFyZWEuc2V0VGFiSW5kZXgodmFsdWUu
dG9JbnQzMihleGVjKSk7IHJldHVybjsgfQotICAgICAgLy8gcmVhZC1vbmx5OiB0eXBlCi0gICAg
ICBjYXNlIFRleHRBcmVhVmFsdWU6ICAgICAgICAgICB7IHRleHRhcmVhLnNldFZhbHVlKHN0cik7
IHJldHVybjsgfQotICAgICAgfQotICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0JVVFRP
TjogewotICAgICAgSFRNTEJ1dHRvbkVsZW1lbnRJbXBsICZidXR0b24gPSBzdGF0aWNfY2FzdDxI
VE1MQnV0dG9uRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7
Ci0gICAgICAvLyByZWFkLW9ubHk6IGZvcm0KLSAgICAgIGNhc2UgQnV0dG9uQWNjZXNzS2V5OiAg
ICAgICB7IGJ1dHRvbi5zZXRBY2Nlc3NLZXkoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEJ1
dHRvbkRpc2FibGVkOiAgICAgICAgeyBidXR0b24uc2V0RGlzYWJsZWQodmFsdWUudG9Cb29sZWFu
KGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEJ1dHRvbk5hbWU6ICAgICAgICAgICAgeyBi
dXR0b24uc2V0TmFtZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQnV0dG9uVGFiSW5kZXg6
ICAgICAgICB7IGJ1dHRvbi5zZXRUYWJJbmRleCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJu
OyB9Ci0gICAgICAvLyByZWFkLW9ubHk6IHR5cGUKLSAgICAgIGNhc2UgQnV0dG9uVmFsdWU6ICAg
ICAgICAgICB7IGJ1dHRvbi5zZXRWYWx1ZShzdHIpOyByZXR1cm47IH0KLSAgICAgIH0KLSAgICB9
Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9MQUJFTDogewotICAgICAgSFRNTExhYmVsRWxlbWVu
dEltcGwgJmxhYmVsID0gc3RhdGljX2Nhc3Q8SFRNTExhYmVsRWxlbWVudEltcGwgJj4oZWxlbWVu
dCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICAvLyByZWFkLW9ubHk6IGZvcm0KLSAg
ICAgIGNhc2UgTGFiZWxBY2Nlc3NLZXk6ICAgICAgIHsgbGFiZWwuc2V0QWNjZXNzS2V5KHN0cik7
IHJldHVybjsgfQotICAgICAgY2FzZSBMYWJlbEh0bWxGb3I6ICAgICAgICAgeyBsYWJlbC5zZXRI
dG1sRm9yKHN0cik7IHJldHVybjsgfQotICAgICAgfQotICAgIH0KLSAgICBicmVhazsKLSAgICBj
YXNlIElEX0xFR0VORDogewotICAgICAgSFRNTExlZ2VuZEVsZW1lbnRJbXBsICZsZWdlbmQgPSBz
dGF0aWNfY2FzdDxIVE1MTGVnZW5kRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0
Y2ggKHRva2VuKSB7Ci0gICAgICAvLyByZWFkLW9ubHk6IGZvcm0KLSAgICAgIGNhc2UgTGVnZW5k
QWNjZXNzS2V5OiAgICAgICB7IGxlZ2VuZC5zZXRBY2Nlc3NLZXkoc3RyKTsgcmV0dXJuOyB9Ci0g
ICAgICBjYXNlIExlZ2VuZEFsaWduOiAgICAgICAgICAgeyBsZWdlbmQuc2V0QWxpZ24oc3RyKTsg
cmV0dXJuOyB9Ci0gICAgICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OnRpdGxlU2V0dGVyKEV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6
RE9NU3RyaW5nJiBzdHIpCit7CisgICAgIEhUTUxUaXRsZUVsZW1lbnRJbXBsJiB0aXRsZSA9ICpz
dGF0aWNfY2FzdDxIVE1MVGl0bGVFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgIGlmICh0b2tl
biA9PSBUaXRsZVRleHQpCisgICAgICAgIHRpdGxlLnNldFRleHQoc3RyKTsKK30KKwordm9pZCBI
VE1MRWxlbWVudDo6bWV0YVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3Qg
VmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxNZXRh
RWxlbWVudEltcGwmIG1ldGEgPSAqc3RhdGljX2Nhc3Q8SFRNTE1ldGFFbGVtZW50SW1wbCo+KGlt
cGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNlIE1ldGFDb250ZW50OiAg
ICAgICAgIHsgbWV0YS5zZXRDb250ZW50KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIE1l
dGFIdHRwRXF1aXY6ICAgICAgIHsgbWV0YS5zZXRIdHRwRXF1aXYoc3RyKTsgcmV0dXJuOyB9Cisg
ICAgICAgIGNhc2UgTWV0YU5hbWU6ICAgICAgICAgICAgeyBtZXRhLnNldE5hbWUoc3RyKTsgcmV0
dXJuOyB9CisgICAgICAgIGNhc2UgTWV0YVNjaGVtZTogICAgICAgICAgeyBtZXRhLnNldFNjaGVt
ZShzdHIpOyByZXR1cm47IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9VTDogewot
ICAgICAgSFRNTFVMaXN0RWxlbWVudEltcGwgJnVMaXN0ID0gc3RhdGljX2Nhc3Q8SFRNTFVMaXN0
RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBj
YXNlIFVMaXN0Q29tcGFjdDogICAgICAgICB7IHVMaXN0LnNldENvbXBhY3QodmFsdWUudG9Cb29s
ZWFuKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFVMaXN0VHlwZTogICAgICAgICAgICB7
IHVMaXN0LnNldFR5cGUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICB9Cit9CisKK3ZvaWQgSFRNTEVs
ZW1lbnQ6OmJhc2VTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVl
JiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MQmFzZUVsZW1l
bnRJbXBsJiBiYXNlID0gKnN0YXRpY19jYXN0PEhUTUxCYXNlRWxlbWVudEltcGwqPihpbXBsKCkp
OworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBCYXNlSHJlZjogICAgICAgICAg
ICB7IGJhc2Uuc2V0SHJlZihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBCYXNlVGFyZ2V0
OiAgICAgICAgICB7IGJhc2Uuc2V0VGFyZ2V0KHN0cik7IHJldHVybjsgfQogICAgIH0KLSAgICBi
cmVhazsKLSAgICBjYXNlIElEX09MOiB7Ci0gICAgICBIVE1MT0xpc3RFbGVtZW50SW1wbCAmb0xp
c3QgPSBzdGF0aWNfY2FzdDxIVE1MT0xpc3RFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAg
IHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgT0xpc3RDb21wYWN0OiAgICAgICAgIHsgb0xp
c3Quc2V0Q29tcGFjdCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNh
c2UgT0xpc3RTdGFydDogICAgICAgICAgIHsgb0xpc3Quc2V0U3RhcnQodmFsdWUudG9JbnQzMihl
eGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBPTGlzdFR5cGU6ICAgICAgICAgICAgeyBvTGlz
dC5zZXRUeXBlKHN0cik7IHJldHVybjsgfQotICAgICAgfQorfQorCit2b2lkIEhUTUxFbGVtZW50
Ojppc0luZGV4U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYg
dmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTElzSW5kZXhFbGVt
ZW50SW1wbCYgaXNpbmRleCA9ICpzdGF0aWNfY2FzdDxIVE1MSXNJbmRleEVsZW1lbnRJbXBsKj4o
aW1wbCgpKTsKKyAgICBpZiAodG9rZW4gPT0gSXNJbmRleFByb21wdCkKKyAgICAgICAgaXNpbmRl
eC5zZXRQcm9tcHQoc3RyKTsKK30KKwordm9pZCBIVE1MRWxlbWVudDo6c3R5bGVTZXR0ZXIoRXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpE
T01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MU3R5bGVFbGVtZW50SW1wbCYgc3R5bGUgPSAqc3Rh
dGljX2Nhc3Q8SFRNTFN0eWxlRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9r
ZW4pIHsKKyAgICAgICAgY2FzZSBTdHlsZURpc2FibGVkOiAgICAgICAgeyBzdHlsZS5zZXREaXNh
YmxlZCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBTdHls
ZU1lZGlhOiAgICAgICAgICAgeyBzdHlsZS5zZXRNZWRpYShzdHIpOyByZXR1cm47IH0KKyAgICAg
ICAgY2FzZSBTdHlsZVR5cGU6ICAgICAgICAgICAgeyBzdHlsZS5zZXRUeXBlKHN0cik7IHJldHVy
bjsgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0RMOiB7Ci0gICAgICBIVE1MRExp
c3RFbGVtZW50SW1wbCAmZExpc3QgPSBzdGF0aWNfY2FzdDxIVE1MRExpc3RFbGVtZW50SW1wbCAm
PihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgRExpc3RDb21w
YWN0OiAgICAgICAgIHsgZExpc3Quc2V0Q29tcGFjdCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyBy
ZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6Ym9keVNldHRlcihFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRP
TVN0cmluZyYgc3RyKQoreworICAgIEhUTUxCb2R5RWxlbWVudEltcGwmIGJvZHkgPSAqc3RhdGlj
X2Nhc3Q8SFRNTEJvZHlFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikg
eworICAgICAgICBjYXNlIEJvZHlBTGluazogICAgICAgICAgIHsgYm9keS5zZXRBTGluayhzdHIp
OyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBCb2R5QmFja2dyb3VuZDogICAgICB7IGJvZHkuc2V0
QmFja2dyb3VuZChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBCb2R5QmdDb2xvcjogICAg
ICAgICB7IGJvZHkuc2V0QmdDb2xvcihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBCb2R5
TGluazogICAgICAgICAgICB7IGJvZHkuc2V0TGluayhzdHIpOyByZXR1cm47IH0KKyAgICAgICAg
Y2FzZSBCb2R5VGV4dDogICAgICAgICAgICB7IGJvZHkuc2V0VGV4dChzdHIpOyByZXR1cm47IH0K
KyAgICAgICAgY2FzZSBCb2R5Vkxpbms6ICAgICAgICAgICB7IGJvZHkuc2V0Vkxpbmsoc3RyKTsg
cmV0dXJuOyB9CisgICAgICAgIGNhc2UgQm9keVNjcm9sbExlZnQ6CisgICAgICAgIGNhc2UgQm9k
eVNjcm9sbFRvcDogeworICAgICAgICAgICAgUVNjcm9sbFZpZXcqIHN2aWV3ID0gYm9keS5vd25l
ckRvY3VtZW50KCktPnZpZXcoKTsKKyAgICAgICAgICAgIGlmIChzdmlldykgeworICAgICAgICAg
ICAgICAgIC8vIFVwZGF0ZSB0aGUgZG9jdW1lbnQncyBsYXlvdXQgYmVmb3JlIHdlIGNvbXB1dGUg
dGhlc2UgYXR0cmlidXRlcy4KKyAgICAgICAgICAgICAgICBpZiAoRG9jdW1lbnRJbXBsKiBkb2Mg
PSBib2R5LmdldERvY3VtZW50KCkpCisgICAgICAgICAgICAgICAgICAgIGRvYy0+dXBkYXRlTGF5
b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CisgICAgICAgICAgICAgICAgaWYgKHRva2Vu
ID09IEJvZHlTY3JvbGxMZWZ0KQorICAgICAgICAgICAgICAgICAgICBzdmlldy0+c2V0Q29udGVu
dHNQb3ModmFsdWUudG9JbnQzMihleGVjKSwgc3ZpZXctPmNvbnRlbnRzWSgpKTsKKyAgICAgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHN2aWV3LT5zZXRDb250ZW50c1Bvcyhz
dmlldy0+Y29udGVudHNYKCksIHZhbHVlLnRvSW50MzIoZXhlYykpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNh
c2UgSURfRElSOiB7Ci0gICAgICBIVE1MRGlyZWN0b3J5RWxlbWVudEltcGwgJmRpcmVjdG9yeSA9
IHN0YXRpY19jYXN0PEhUTUxEaXJlY3RvcnlFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAg
IHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgRGlyZWN0b3J5Q29tcGFjdDogICAgIHsgZGly
ZWN0b3J5LnNldENvbXBhY3QodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAg
ICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OmZvcm1TZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBp
bnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikK
K3sKKyAgICBIVE1MRm9ybUVsZW1lbnRJbXBsJiBmb3JtID0gKnN0YXRpY19jYXN0PEhUTUxGb3Jt
RWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgLy8g
cmVhZC1vbmx5OiBlbGVtZW50cworICAgICAgICAvLyByZWFkLW9ubHk6IGxlbmd0aAorICAgICAg
ICBjYXNlIEZvcm1OYW1lOiAgICAgICAgICAgIHsgZm9ybS5zZXROYW1lKHN0cik7IHJldHVybjsg
fQorICAgICAgICBjYXNlIEZvcm1BY2NlcHRDaGFyc2V0OiAgIHsgZm9ybS5zZXRBY2NlcHRDaGFy
c2V0KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEZvcm1BY3Rpb246ICAgICAgICAgIHsg
Zm9ybS5zZXRBY3Rpb24oc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgRm9ybUVuY1R5cGU6
ICAgICAgICAgeyBmb3JtLnNldEVuY3R5cGUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2Ug
Rm9ybU1ldGhvZDogICAgICAgICAgeyBmb3JtLnNldE1ldGhvZChzdHIpOyByZXR1cm47IH0KKyAg
ICAgICAgY2FzZSBGb3JtVGFyZ2V0OiAgICAgICAgICB7IGZvcm0uc2V0VGFyZ2V0KHN0cik7IHJl
dHVybjsgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX01FTlU6IHsKLSAgICAgIEhU
TUxNZW51RWxlbWVudEltcGwgJm1lbnUgPSBzdGF0aWNfY2FzdDxIVE1MTWVudUVsZW1lbnRJbXBs
ICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgY2FzZSBNZW51Q29t
cGFjdDogICAgICAgICB7IG1lbnUuc2V0Q29tcGFjdCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyBy
ZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6c2VsZWN0U2V0dGVyKEV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6
RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTFNlbGVjdEVsZW1lbnRJbXBsJiBzZWxlY3QgPSAq
c3RhdGljX2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2gg
KHRva2VuKSB7CisgICAgICAgIC8vIHJlYWQtb25seTogdHlwZQorICAgICAgICBjYXNlIFNlbGVj
dFNlbGVjdGVkSW5kZXg6ICAgeyBzZWxlY3Quc2V0U2VsZWN0ZWRJbmRleCh2YWx1ZS50b0ludDMy
KGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgU2VsZWN0VmFsdWU6ICAgICAgICAgICB7
IHNlbGVjdC5zZXRWYWx1ZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBTZWxlY3RMZW5n
dGg6ICAgICAgICAgIHsgLy8gcmVhZC1vbmx5IGFjY29yZGluZyB0byB0aGUgTlMgc3BlYywgYnV0
IHdlYnBhZ2VzIG5lZWQgaXQgd3JpdGVhYmxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIE9iamVjdCBjb2xsID0gT2JqZWN0OjpkeW5hbWljQ2FzdCggZ2V0U2VsZWN0
SFRNTENvbGxlY3Rpb24oZXhlYywgc2VsZWN0Lm9wdGlvbnNIVE1MQ29sbGVjdGlvbigpLmdldCgp
LCAmc2VsZWN0KSApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoICFjb2xsLmlzTnVsbCgpICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb2xsLnB1dChleGVjLGxlbmd0aFByb3BlcnR5TmFtZSx2YWx1ZSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgLy8gcmVhZC1vbmx5OiBmb3JtCisgICAg
ICAgIC8vIHJlYWQtb25seTogb3B0aW9ucworICAgICAgICBjYXNlIFNlbGVjdERpc2FibGVkOiAg
ICAgICAgeyBzZWxlY3Quc2V0RGlzYWJsZWQodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJu
OyB9CisgICAgICAgIGNhc2UgU2VsZWN0TXVsdGlwbGU6ICAgICAgICB7IHNlbGVjdC5zZXRNdWx0
aXBsZSh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBTZWxl
Y3ROYW1lOiAgICAgICAgICAgIHsgc2VsZWN0LnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9CisgICAg
ICAgIGNhc2UgU2VsZWN0U2l6ZTogICAgICAgICAgICB7IHNlbGVjdC5zZXRTaXplKHZhbHVlLnRv
SW50MzIoZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBTZWxlY3RUYWJJbmRleDogICAg
ICAgIHsgc2VsZWN0LnNldFRhYkluZGV4KHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0K
ICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9MSTogewotICAgICAgSFRNTExJRWxlbWVu
dEltcGwgJmxpID0gc3RhdGljX2Nhc3Q8SFRNTExJRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0g
ICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIExJVHlwZTogICAgICAgICAgICB7IGxp
LnNldFR5cGUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIExJVmFsdWU6ICAgICAgICAgICB7
IGxpLnNldFZhbHVlKHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KLSAgICAgIH0KK30K
Kwordm9pZCBIVE1MRWxlbWVudDo6b3B0R3JvdXBTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sK
KyAgICBIVE1MT3B0R3JvdXBFbGVtZW50SW1wbCYgb3B0Z3JvdXAgPSAqc3RhdGljX2Nhc3Q8SFRN
TE9wdEdyb3VwRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAg
ICAgICAgY2FzZSBPcHRHcm91cERpc2FibGVkOiAgICAgICAgeyBvcHRncm91cC5zZXREaXNhYmxl
ZCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBPcHRHcm91
cExhYmVsOiAgICAgICAgICAgeyBvcHRncm91cC5zZXRMYWJlbChzdHIpOyByZXR1cm47IH0KICAg
ICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9ESVY6IHsKLSAgICAgIEhUTUxEaXZFbGVtZW50
SW1wbCAmZGl2ID0gc3RhdGljX2Nhc3Q8SFRNTERpdkVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwot
ICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgY2FzZSBEaXZBbGlnbjogICAgICAgICAgIHsg
ZGl2LnNldEFsaWduKHN0cik7IHJldHVybjsgfQotICAgICAgfQorfQorCit2b2lkIEhUTUxFbGVt
ZW50OjpvcHRpb25TZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVl
JiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBET01FeGNlcHRpb25U
cmFuc2xhdG9yIGV4Y2VwdGlvbihleGVjKTsKKyAgICBIVE1MT3B0aW9uRWxlbWVudEltcGwmIG9w
dGlvbiA9ICpzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudEltcGwqPihpbXBsKCkpOworICAg
IHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgLy8gcmVhZC1vbmx5OiBmb3JtCisgICAgICAgIGNh
c2UgT3B0aW9uRGVmYXVsdFNlbGVjdGVkOiB7IG9wdGlvbi5zZXREZWZhdWx0U2VsZWN0ZWQodmFs
dWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgT3B0aW9uVGV4dDog
ICAgICAgICAgICB7IG9wdGlvbi5zZXRUZXh0KHN0ciwgZXhjZXB0aW9uKTsgcmV0dXJuOyB9Cisg
ICAgICAgIC8vIHJlYWQtb25seTogaW5kZXgKKyAgICAgICAgY2FzZSBPcHRpb25EaXNhYmxlZDog
ICAgICAgIHsgb3B0aW9uLnNldERpc2FibGVkKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVy
bjsgfQorICAgICAgICBjYXNlIE9wdGlvbkxhYmVsOiAgICAgICAgICAgeyBvcHRpb24uc2V0TGFi
ZWwoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgT3B0aW9uU2VsZWN0ZWQ6ICAgICAgICB7
IG9wdGlvbi5zZXRTZWxlY3RlZCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KKyAg
ICAgICAgY2FzZSBPcHRpb25WYWx1ZTogICAgICAgICAgIHsgb3B0aW9uLnNldFZhbHVlKHN0cik7
IHJldHVybjsgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX1A6IHsKLSAgICAgIEhU
TUxQYXJhZ3JhcGhFbGVtZW50SW1wbCAmcGFyYWdyYXBoID0gc3RhdGljX2Nhc3Q8SFRNTFBhcmFn
cmFwaEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAg
ICAgY2FzZSBQYXJhZ3JhcGhBbGlnbjogICAgIHsgcGFyYWdyYXBoLnNldEFsaWduKHN0cik7IHJl
dHVybjsgfQotICAgICAgfQorfQorCit2b2lkIEhUTUxFbGVtZW50OjppbnB1dFNldHRlcihFeGVj
U3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRP
TVN0cmluZyYgc3RyKQoreworICAgIEhUTUxJbnB1dEVsZW1lbnRJbXBsJiBpbnB1dCA9ICpzdGF0
aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tl
bikgeworICAgICAgICBjYXNlIElucHV0RGVmYXVsdFZhbHVlOiAgICB7IGlucHV0LnNldERlZmF1
bHRWYWx1ZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJbnB1dERlZmF1bHRDaGVja2Vk
OiAgeyBpbnB1dC5zZXREZWZhdWx0Q2hlY2tlZCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1
cm47IH0KKyAgICAgICAgLy8gcmVhZC1vbmx5OiBmb3JtCisgICAgICAgIGNhc2UgSW5wdXRBY2Nl
cHQ6ICAgICAgICAgIHsgaW5wdXQuc2V0QWNjZXB0KHN0cik7IHJldHVybjsgfQorICAgICAgICBj
YXNlIElucHV0QWNjZXNzS2V5OiAgICAgICB7IGlucHV0LnNldEFjY2Vzc0tleShzdHIpOyByZXR1
cm47IH0KKyAgICAgICAgY2FzZSBJbnB1dEFsaWduOiAgICAgICAgICAgeyBpbnB1dC5zZXRBbGln
bihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJbnB1dEFsdDogICAgICAgICAgICAgeyBp
bnB1dC5zZXRBbHQoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgSW5wdXRDaGVja2VkOiAg
ICAgICAgIHsgaW5wdXQuc2V0Q2hlY2tlZCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47
IH0KKyAgICAgICAgY2FzZSBJbnB1dERpc2FibGVkOiAgICAgICAgeyBpbnB1dC5zZXREaXNhYmxl
ZCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJbnB1dE1h
eExlbmd0aDogICAgICAgeyBpbnB1dC5zZXRNYXhMZW5ndGgodmFsdWUudG9JbnQzMihleGVjKSk7
IHJldHVybjsgfQorICAgICAgICBjYXNlIElucHV0TmFtZTogICAgICAgICAgICB7IGlucHV0LnNl
dE5hbWUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgSW5wdXRSZWFkT25seTogICAgICAg
IHsgaW5wdXQuc2V0UmVhZE9ubHkodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9Cisg
ICAgICAgIGNhc2UgSW5wdXRTaXplOiAgICAgICAgICAgIHsgaW5wdXQuc2V0U2l6ZShzdHIpOyBy
ZXR1cm47IH0KKyAgICAgICAgY2FzZSBJbnB1dFNlbGVjdGlvblN0YXJ0OiAgeyBpbnB1dC5zZXRT
ZWxlY3Rpb25TdGFydCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNh
c2UgSW5wdXRTZWxlY3Rpb25FbmQ6ICAgIHsgaW5wdXQuc2V0U2VsZWN0aW9uRW5kKHZhbHVlLnRv
SW50MzIoZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJbnB1dFNyYzogICAgICAgICAg
ICAgeyBpbnB1dC5zZXRTcmMoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgSW5wdXRUYWJJ
bmRleDogICAgICAgIHsgaW5wdXQuc2V0VGFiSW5kZXgodmFsdWUudG9JbnQzMihleGVjKSk7IHJl
dHVybjsgfQorICAgICAgICBjYXNlIElucHV0VHlwZTogICAgICAgICAgICB7IGlucHV0LnNldFR5
cGUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgSW5wdXRVc2VNYXA6ICAgICAgICAgIHsg
aW5wdXQuc2V0VXNlTWFwKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIElucHV0VmFsdWU6
ICAgICAgICAgICB7IGlucHV0LnNldFZhbHVlKHN0cik7IHJldHVybjsgfQogICAgIH0KLSAgICBi
cmVhazsKLSAgICBjYXNlIElEX0gxOgotICAgIGNhc2UgSURfSDI6Ci0gICAgY2FzZSBJRF9IMzoK
LSAgICBjYXNlIElEX0g0OgotICAgIGNhc2UgSURfSDU6Ci0gICAgY2FzZSBJRF9INjogewotICAg
ICAgSFRNTEhlYWRpbmdFbGVtZW50SW1wbCAmaGVhZGluZyA9IHN0YXRpY19jYXN0PEhUTUxIZWFk
aW5nRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAg
ICBjYXNlIEhlYWRpbmdBbGlnbjogICAgICAgICB7IGhlYWRpbmcuc2V0QWxpZ24oc3RyKTsgcmV0
dXJuOyB9Ci0gICAgICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OnRleHRBcmVhU2V0dGVyKEV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6
RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTFRleHRBcmVhRWxlbWVudEltcGwmIHRleHRhcmVh
ID0gKnN0YXRpY19jYXN0PEhUTUxUZXh0QXJlYUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBz
d2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgVGV4dEFyZWFEZWZhdWx0VmFsdWU6ICAgIHsg
dGV4dGFyZWEuc2V0RGVmYXVsdFZhbHVlKHN0cik7IHJldHVybjsgfQorICAgICAgICAvLyByZWFk
LW9ubHk6IGZvcm0KKyAgICAgICAgY2FzZSBUZXh0QXJlYUFjY2Vzc0tleTogICAgICAgeyB0ZXh0
YXJlYS5zZXRBY2Nlc3NLZXkoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGV4dEFyZWFD
b2xzOiAgICAgICAgICAgIHsgdGV4dGFyZWEuc2V0Q29scyh2YWx1ZS50b0ludDMyKGV4ZWMpKTsg
cmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGV4dEFyZWFEaXNhYmxlZDogICAgICAgIHsgdGV4dGFy
ZWEuc2V0RGlzYWJsZWQodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAg
IGNhc2UgVGV4dEFyZWFOYW1lOiAgICAgICAgICAgIHsgdGV4dGFyZWEuc2V0TmFtZShzdHIpOyBy
ZXR1cm47IH0KKyAgICAgICAgY2FzZSBUZXh0QXJlYVJlYWRPbmx5OiAgICAgICAgeyB0ZXh0YXJl
YS5zZXRSZWFkT25seSh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAg
Y2FzZSBUZXh0QXJlYVJvd3M6ICAgICAgICAgICAgeyB0ZXh0YXJlYS5zZXRSb3dzKHZhbHVlLnRv
SW50MzIoZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUZXh0QXJlYVNlbGVjdGlvblN0
YXJ0OiAgeyB0ZXh0YXJlYS5zZXRTZWxlY3Rpb25TdGFydCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsg
cmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGV4dEFyZWFTZWxlY3Rpb25FbmQ6ICAgIHsgdGV4dGFy
ZWEuc2V0U2VsZWN0aW9uRW5kKHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KKyAgICAg
ICAgY2FzZSBUZXh0QXJlYVRhYkluZGV4OiAgICAgICAgeyB0ZXh0YXJlYS5zZXRUYWJJbmRleCh2
YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIC8vIHJlYWQtb25seTogdHlw
ZQorICAgICAgICBjYXNlIFRleHRBcmVhVmFsdWU6ICAgICAgICAgICB7IHRleHRhcmVhLnNldFZh
bHVlKHN0cik7IHJldHVybjsgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0JMT0NL
UVVPVEU6IHsKLSAgICAgIEhUTUxCbG9ja3F1b3RlRWxlbWVudEltcGwgJmJsb2NrcXVvdGUgPSBz
dGF0aWNfY2FzdDxIVE1MQmxvY2txdW90ZUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAg
c3dpdGNoICh0b2tlbikgewotICAgICAgY2FzZSBCbG9ja1F1b3RlQ2l0ZTogICAgICAgeyBibG9j
a3F1b3RlLnNldENpdGUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICB9Cit9CisKK3ZvaWQgSFRNTEVs
ZW1lbnQ6OmJ1dHRvblNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFs
dWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxCdXR0b25F
bGVtZW50SW1wbCYgYnV0dG9uID0gKnN0YXRpY19jYXN0PEhUTUxCdXR0b25FbGVtZW50SW1wbCo+
KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICAvLyByZWFkLW9ubHk6IGZv
cm0KKyAgICAgICAgY2FzZSBCdXR0b25BY2Nlc3NLZXk6ICAgICAgIHsgYnV0dG9uLnNldEFjY2Vz
c0tleShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBCdXR0b25EaXNhYmxlZDogICAgICAg
IHsgYnV0dG9uLnNldERpc2FibGVkKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQor
ICAgICAgICBjYXNlIEJ1dHRvbk5hbWU6ICAgICAgICAgICAgeyBidXR0b24uc2V0TmFtZShzdHIp
OyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBCdXR0b25UYWJJbmRleDogICAgICAgIHsgYnV0dG9u
LnNldFRhYkluZGV4KHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgLy8g
cmVhZC1vbmx5OiB0eXBlCisgICAgICAgIGNhc2UgQnV0dG9uVmFsdWU6ICAgICAgICAgICB7IGJ1
dHRvbi5zZXRWYWx1ZShzdHIpOyByZXR1cm47IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2Fz
ZSBJRF9ROiB7Ci0gICAgICBIVE1MUXVvdGVFbGVtZW50SW1wbCAmcXVvdGUgPSBzdGF0aWNfY2Fz
dDxIVE1MUXVvdGVFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4p
IHsKLSAgICAgIGNhc2UgUXVvdGVDaXRlOiAgICAgICAgICAgIHsgcXVvdGUuc2V0Q2l0ZShzdHIp
OyByZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6bGFiZWxTZXR0ZXIo
RXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9N
OjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MTGFiZWxFbGVtZW50SW1wbCYgbGFiZWwgPSAq
c3RhdGljX2Nhc3Q8SFRNTExhYmVsRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAo
dG9rZW4pIHsKKyAgICAgICAgLy8gcmVhZC1vbmx5OiBmb3JtCisgICAgICAgIGNhc2UgTGFiZWxB
Y2Nlc3NLZXk6ICAgICAgIHsgbGFiZWwuc2V0QWNjZXNzS2V5KHN0cik7IHJldHVybjsgfQorICAg
ICAgICBjYXNlIExhYmVsSHRtbEZvcjogICAgICAgICB7IGxhYmVsLnNldEh0bWxGb3Ioc3RyKTsg
cmV0dXJuOyB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfUFJFOiB7Ci0gICAgICBI
VE1MUHJlRWxlbWVudEltcGwgJnByZSA9IHN0YXRpY19jYXN0PEhUTUxQcmVFbGVtZW50SW1wbCAm
PihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgUHJlV2lkdGg6
ICAgICAgICAgICB7IHByZS5zZXRXaWR0aCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9
Ci0gICAgICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OmZpZWxkU2V0U2V0dGVyKEV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3Ry
aW5nJiBzdHIpCit7Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OmxlZ2VuZFNldHRlcihFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0
cmluZyYgc3RyKQoreworICAgIEhUTUxMZWdlbmRFbGVtZW50SW1wbCYgbGVnZW5kID0gKnN0YXRp
Y19jYXN0PEhUTUxMZWdlbmRFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tl
bikgeworICAgICAgICAvLyByZWFkLW9ubHk6IGZvcm0KKyAgICAgICAgY2FzZSBMZWdlbmRBY2Nl
c3NLZXk6ICAgICAgIHsgbGVnZW5kLnNldEFjY2Vzc0tleShzdHIpOyByZXR1cm47IH0KKyAgICAg
ICAgY2FzZSBMZWdlbmRBbGlnbjogICAgICAgICAgIHsgbGVnZW5kLnNldEFsaWduKHN0cik7IHJl
dHVybjsgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0JSOiB7Ci0gICAgICBIVE1M
QlJFbGVtZW50SW1wbCAmYnIgPSBzdGF0aWNfY2FzdDxIVE1MQlJFbGVtZW50SW1wbCAmPihlbGVt
ZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgQlJDbGVhcjogICAgICAg
ICAgIHsgYnIuc2V0Q2xlYXIoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICB9Cit9CisKK3ZvaWQgSFRN
TEVsZW1lbnQ6OnVMaXN0U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBW
YWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTFVMaXN0
RWxlbWVudEltcGwmIHVMaXN0ID0gKnN0YXRpY19jYXN0PEhUTUxVTGlzdEVsZW1lbnRJbXBsKj4o
aW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgVUxpc3RDb21wYWN0
OiAgICAgICAgIHsgdUxpc3Quc2V0Q29tcGFjdCh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1
cm47IH0KKyAgICAgICAgY2FzZSBVTGlzdFR5cGU6ICAgICAgICAgICAgeyB1TGlzdC5zZXRUeXBl
KHN0cik7IHJldHVybjsgfQogICAgIH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0JBU0VGT05U
OiB7Ci0gICAgICBIVE1MQmFzZUZvbnRFbGVtZW50SW1wbCAmYmFzZUZvbnQgPSBzdGF0aWNfY2Fz
dDxIVE1MQmFzZUZvbnRFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9r
ZW4pIHsKLSAgICAgIGNhc2UgQmFzZUZvbnRDb2xvcjogICAgICAgICAgIHsgYmFzZUZvbnQuc2V0
Q29sb3Ioc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEJhc2VGb250RmFjZTogICAgICAgICAg
ICB7IGJhc2VGb250LnNldEZhY2Uoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEJhc2VGb250
U2l6ZTogICAgICAgICAgICB7IGJhc2VGb250LnNldFNpemUoc3RyKTsgcmV0dXJuOyB9Ci0gICAg
ICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6Om9MaXN0U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywg
aW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIp
Cit7CisgICAgSFRNTE9MaXN0RWxlbWVudEltcGwmIG9MaXN0ID0gKnN0YXRpY19jYXN0PEhUTUxP
TGlzdEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAg
IGNhc2UgT0xpc3RDb21wYWN0OiAgICAgICAgIHsgb0xpc3Quc2V0Q29tcGFjdCh2YWx1ZS50b0Jv
b2xlYW4oZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBPTGlzdFN0YXJ0OiAgICAgICAg
ICAgeyBvTGlzdC5zZXRTdGFydCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAg
ICAgIGNhc2UgT0xpc3RUeXBlOiAgICAgICAgICAgIHsgb0xpc3Quc2V0VHlwZShzdHIpOyByZXR1
cm47IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9GT05UOiB7Ci0gICAgICBIVE1M
Rm9udEVsZW1lbnRJbXBsICZmb250ID0gc3RhdGljX2Nhc3Q8SFRNTEZvbnRFbGVtZW50SW1wbCAm
PihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgRm9udENvbG9y
OiAgICAgICAgICAgeyBmb250LnNldENvbG9yKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBG
b250RmFjZTogICAgICAgICAgICB7IGZvbnQuc2V0RmFjZShzdHIpOyByZXR1cm47IH0KLSAgICAg
IGNhc2UgRm9udFNpemU6ICAgICAgICAgICAgeyBmb250LnNldFNpemUoc3RyKTsgcmV0dXJuOyB9
Ci0gICAgICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OmRMaXN0U2V0dGVyKEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5n
JiBzdHIpCit7CisgICAgSFRNTERMaXN0RWxlbWVudEltcGwmIGRMaXN0ID0gKnN0YXRpY19jYXN0
PEhUTUxETGlzdEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBpZiAodG9rZW4gPT0gRExpc3RD
b21wYWN0KQorICAgICAgICBkTGlzdC5zZXRDb21wYWN0KHZhbHVlLnRvQm9vbGVhbihleGVjKSk7
Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OmRpclNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQorewor
ICAgIEhUTUxEaXJlY3RvcnlFbGVtZW50SW1wbCYgZGlyZWN0b3J5ID0gKnN0YXRpY19jYXN0PEhU
TUxEaXJlY3RvcnlFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IERpcmVj
dG9yeUNvbXBhY3QpCisgICAgICAgIGRpcmVjdG9yeS5zZXRDb21wYWN0KHZhbHVlLnRvQm9vbGVh
bihleGVjKSk7Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6Om1lbnVTZXR0ZXIoRXhlY1N0YXRlICpl
eGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcm
IHN0cikKK3sKKyAgICBIVE1MTWVudUVsZW1lbnRJbXBsJiBtZW51ID0gKnN0YXRpY19jYXN0PEhU
TUxNZW51RWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIGlmICh0b2tlbiA9PSBNZW51Q29tcGFj
dCkKKyAgICAgICAgbWVudS5zZXRDb21wYWN0KHZhbHVlLnRvQm9vbGVhbihleGVjKSk7Cit9CisK
K3ZvaWQgSFRNTEVsZW1lbnQ6OmxpU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBj
b25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRN
TExJRWxlbWVudEltcGwmIGxpID0gKnN0YXRpY19jYXN0PEhUTUxMSUVsZW1lbnRJbXBsKj4oaW1w
bCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgTElUeXBlOiAgICAgICAg
ICAgIHsgbGkuc2V0VHlwZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBMSVZhbHVlOiAg
ICAgICAgICAgeyBsaS5zZXRWYWx1ZSh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CiAg
ICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfSFI6IHsKLSAgICAgIEhUTUxIUkVsZW1lbnRJ
bXBsICZociA9IHN0YXRpY19jYXN0PEhUTUxIUkVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAg
ICAgc3dpdGNoICh0b2tlbikgewotICAgICAgY2FzZSBIUkFsaWduOiAgICAgICAgICAgeyBoci5z
ZXRBbGlnbihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSFJOb1NoYWRlOiAgICAgICAgIHsg
aHIuc2V0Tm9TaGFkZSh2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNh
c2UgSFJTaXplOiAgICAgICAgICAgIHsgaHIuc2V0U2l6ZShzdHIpOyByZXR1cm47IH0KLSAgICAg
IGNhc2UgSFJXaWR0aDogICAgICAgICAgIHsgaHIuc2V0V2lkdGgoc3RyKTsgcmV0dXJuOyB9Ci0g
ICAgICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OmRpdlNldHRlcihFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3Ry
KQoreworICAgIEhUTUxEaXZFbGVtZW50SW1wbCYgZGl2ID0gKnN0YXRpY19jYXN0PEhUTUxEaXZF
bGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgaWYgKHRva2VuID09IERpdkFsaWduKQorICAgICAg
ICBkaXYuc2V0QWxpZ24oc3RyKTsKK30KKwordm9pZCBIVE1MRWxlbWVudDo6cGFyYWdyYXBoU2V0
dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0
IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTFBhcmFncmFwaEVsZW1lbnRJbXBsJiBw
YXJhZ3JhcGggPSAqc3RhdGljX2Nhc3Q8SFRNTFBhcmFncmFwaEVsZW1lbnRJbXBsKj4oaW1wbCgp
KTsKKyAgICBpZiAodG9rZW4gPT0gUGFyYWdyYXBoQWxpZ24pCisgICAgICAgIHBhcmFncmFwaC5z
ZXRBbGlnbihzdHIpOworfQorCit2b2lkIEhUTUxFbGVtZW50OjpoZWFkaW5nU2V0dGVyKEV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9N
U3RyaW5nJiBzdHIpCit7CisgICAgSFRNTEhlYWRpbmdFbGVtZW50SW1wbCYgaGVhZGluZyA9ICpz
dGF0aWNfY2FzdDxIVE1MSGVhZGluZ0VsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBpZiAodG9r
ZW4gPT0gSGVhZGluZ0FsaWduKQorICAgICAgICBoZWFkaW5nLnNldEFsaWduKHN0cik7Cit9CisK
K3ZvaWQgSFRNTEVsZW1lbnQ6OmJsb2NrUXVvdGVTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sK
KyAgICBIVE1MQmxvY2txdW90ZUVsZW1lbnRJbXBsJiBibG9ja1F1b3RlID0gKnN0YXRpY19jYXN0
PEhUTUxCbG9ja3F1b3RlRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIGlmICh0b2tlbiA9PSBC
bG9ja1F1b3RlQ2l0ZSkKKyAgICAgICAgYmxvY2tRdW90ZS5zZXRDaXRlKHN0cik7Cit9CisKK3Zv
aWQgSFRNTEVsZW1lbnQ6OnF1b3RlU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBj
b25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRN
TFF1b3RlRWxlbWVudEltcGwmIHF1b3RlID0gKnN0YXRpY19jYXN0PEhUTUxRdW90ZUVsZW1lbnRJ
bXBsKj4oaW1wbCgpKTsKKyAgICBpZiAodG9rZW4gPT0gUXVvdGVDaXRlKQorICAgICAgICBxdW90
ZS5zZXRDaXRlKHN0cik7Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OnByZVNldHRlcihFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0
cmluZyYgc3RyKQoreworICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgJ3dyYXAnIHdoZW4g
d2hpdGUtc3BhY2U6IHByZS13cmFwIGlzIGltcGxlbWVudGVkLgorICAgIEhUTUxQcmVFbGVtZW50
SW1wbCYgcHJlID0gKnN0YXRpY19jYXN0PEhUTUxQcmVFbGVtZW50SW1wbCo+KGltcGwoKSk7Cisg
ICAgaWYgKHRva2VuID09IFByZVdpZHRoKQorICAgICAgICBwcmUuc2V0V2lkdGgodmFsdWUudG9J
bnQzMihleGVjKSk7Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OmJyU2V0dGVyKEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5n
JiBzdHIpCit7CisgICAgSFRNTEJSRWxlbWVudEltcGwmIGJyID0gKnN0YXRpY19jYXN0PEhUTUxC
UkVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBpZiAodG9rZW4gPT0gQlJDbGVhcikKKyAgICAg
ICAgYnIuc2V0Q2xlYXIoc3RyKTsKK30KKwordm9pZCBIVE1MRWxlbWVudDo6YmFzZUZvbnRTZXR0
ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3Qg
RE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MQmFzZUZvbnRFbGVtZW50SW1wbCYgYmFz
ZUZvbnQgPSAqc3RhdGljX2Nhc3Q8SFRNTEJhc2VGb250RWxlbWVudEltcGwqPihpbXBsKCkpOwor
ICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBCYXNlRm9udENvbG9yOiAgICAgICAg
ICAgeyBiYXNlRm9udC5zZXRDb2xvcihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBCYXNl
Rm9udEZhY2U6ICAgICAgICAgICAgeyBiYXNlRm9udC5zZXRGYWNlKHN0cik7IHJldHVybjsgfQor
ICAgICAgICBjYXNlIEJhc2VGb250U2l6ZTogICAgICAgICAgICB7IGJhc2VGb250LnNldFNpemUo
c3RyKTsgcmV0dXJuOyB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfSU5TOgotICAg
IGNhc2UgSURfREVMOiB7Ci0gICAgICBIVE1MTW9kRWxlbWVudEltcGwgJm1vZCA9IHN0YXRpY19j
YXN0PEhUTUxNb2RFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4p
IHsKLSAgICAgIGNhc2UgTW9kQ2l0ZTogICAgICAgICAgICB7IG1vZC5zZXRDaXRlKHN0cik7IHJl
dHVybjsgfQotICAgICAgY2FzZSBNb2REYXRlVGltZTogICAgICAgIHsgbW9kLnNldERhdGVUaW1l
KHN0cik7IHJldHVybjsgfQotICAgICAgfQorfQorCit2b2lkIEhUTUxFbGVtZW50Ojpmb250U2V0
dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0
IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTEZvbnRFbGVtZW50SW1wbCYgZm9udCA9
ICpzdGF0aWNfY2FzdDxIVE1MRm9udEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2gg
KHRva2VuKSB7CisgICAgICAgIGNhc2UgRm9udENvbG9yOiAgICAgICAgICAgeyBmb250LnNldENv
bG9yKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEZvbnRGYWNlOiAgICAgICAgICAgIHsg
Zm9udC5zZXRGYWNlKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEZvbnRTaXplOiAgICAg
ICAgICAgIHsgZm9udC5zZXRTaXplKHN0cik7IHJldHVybjsgfQogICAgIH0KLSAgICBicmVhazsK
LSAgICBjYXNlIElEX0E6IHsKLSAgICAgIEhUTUxBbmNob3JFbGVtZW50SW1wbCAmYW5jaG9yID0g
c3RhdGljX2Nhc3Q8SFRNTEFuY2hvckVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dp
dGNoICh0b2tlbikgewotICAgICAgY2FzZSBBbmNob3JBY2Nlc3NLZXk6ICAgICAgIHsgYW5jaG9y
LnNldEFjY2Vzc0tleShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQW5jaG9yQ2hhcnNldDog
ICAgICAgICB7IGFuY2hvci5zZXRDaGFyc2V0KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBB
bmNob3JDb29yZHM6ICAgICAgICAgIHsgYW5jaG9yLnNldENvb3JkcyhzdHIpOyByZXR1cm47IH0K
LSAgICAgIGNhc2UgQW5jaG9ySHJlZjogICAgICAgICAgICB7IGFuY2hvci5zZXRIcmVmKHN0cik7
IHJldHVybjsgfQotICAgICAgY2FzZSBBbmNob3JIcmVmTGFuZzogICAgICAgIHsgYW5jaG9yLnNl
dEhyZWZsYW5nKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBBbmNob3JOYW1lOiAgICAgICAg
ICAgIHsgYW5jaG9yLnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEFuY2hvclJl
bDogICAgICAgICAgICAgeyBhbmNob3Iuc2V0UmVsKHN0cik7IHJldHVybjsgfQotICAgICAgY2Fz
ZSBBbmNob3JSZXY6ICAgICAgICAgICAgIHsgYW5jaG9yLnNldFJldihzdHIpOyByZXR1cm47IH0K
LSAgICAgIGNhc2UgQW5jaG9yU2hhcGU6ICAgICAgICAgICB7IGFuY2hvci5zZXRTaGFwZShzdHIp
OyByZXR1cm47IH0KLSAgICAgIGNhc2UgQW5jaG9yVGFiSW5kZXg6ICAgICAgICB7IGFuY2hvci5z
ZXRUYWJJbmRleCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEFu
Y2hvclRhcmdldDogICAgICAgICAgeyBhbmNob3Iuc2V0VGFyZ2V0KHN0cik7IHJldHVybjsgfQot
ICAgICAgY2FzZSBBbmNob3JUeXBlOiAgICAgICAgICAgIHsgYW5jaG9yLnNldFR5cGUoc3RyKTsg
cmV0dXJuOyB9Ci0gICAgICB9Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OmhyU2V0dGVyKEV4ZWNT
dGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9N
U3RyaW5nJiBzdHIpCit7CisgICAgSFRNTEhSRWxlbWVudEltcGwmIGhyID0gKnN0YXRpY19jYXN0
PEhUTUxIUkVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAg
ICAgIGNhc2UgSFJBbGlnbjogICAgICAgICAgIHsgaHIuc2V0QWxpZ24oc3RyKTsgcmV0dXJuOyB9
CisgICAgICAgIGNhc2UgSFJOb1NoYWRlOiAgICAgICAgIHsgaHIuc2V0Tm9TaGFkZSh2YWx1ZS50
b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBIUlNpemU6ICAgICAgICAg
ICAgeyBoci5zZXRTaXplKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEhSV2lkdGg6ICAg
ICAgICAgICB7IGhyLnNldFdpZHRoKHN0cik7IHJldHVybjsgfQogICAgIH0KLSAgICBicmVhazsK
LSAgICBjYXNlIElEX0lNRzogewotICAgICAgSFRNTEltYWdlRWxlbWVudEltcGwgJmltYWdlID0g
c3RhdGljX2Nhc3Q8SFRNTEltYWdlRWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0
Y2ggKHRva2VuKSB7Ci0gICAgICBjYXNlIEltYWdlTmFtZTogICAgICAgICAgICB7IGltYWdlLnNl
dE5hbWUoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEltYWdlQWxpZ246ICAgICAgICAgICB7
IGltYWdlLnNldEFsaWduKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBJbWFnZUFsdDogICAg
ICAgICAgICAgeyBpbWFnZS5zZXRBbHQoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEltYWdl
Qm9yZGVyOiAgICAgICAgICB7IGltYWdlLnNldEJvcmRlcih2YWx1ZS50b0ludDMyKGV4ZWMpKTsg
cmV0dXJuOyB9Ci0gICAgICBjYXNlIEltYWdlSGVpZ2h0OiAgICAgICAgICB7IGltYWdlLnNldEhl
aWdodCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEltYWdlSHNw
YWNlOiAgICAgICAgICB7IGltYWdlLnNldEhzcGFjZSh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0
dXJuOyB9Ci0gICAgICBjYXNlIEltYWdlSXNNYXA6ICAgICAgICAgICB7IGltYWdlLnNldElzTWFw
KHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBJbWFnZUxvbmdE
ZXNjOiAgICAgICAgeyBpbWFnZS5zZXRMb25nRGVzYyhzdHIpOyByZXR1cm47IH0KLSAgICAgIGNh
c2UgSW1hZ2VTcmM6ICAgICAgICAgICAgIHsgaW1hZ2Uuc2V0U3JjKHN0cik7IHJldHVybjsgfQot
ICAgICAgY2FzZSBJbWFnZVVzZU1hcDogICAgICAgICAgeyBpbWFnZS5zZXRVc2VNYXAoc3RyKTsg
cmV0dXJuOyB9Ci0gICAgICBjYXNlIEltYWdlVnNwYWNlOiAgICAgICAgICB7IGltYWdlLnNldFZz
cGFjZSh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEltYWdlV2lk
dGg6ICAgICAgICAgICB7IGltYWdlLnNldFdpZHRoKHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1
cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6bW9kU2V0dGVyKEV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3Ry
aW5nJiBzdHIpCit7CisgICAgSFRNTE1vZEVsZW1lbnRJbXBsJiBtb2QgPSAqc3RhdGljX2Nhc3Q8
SFRNTE1vZEVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAg
ICAgIGNhc2UgTW9kQ2l0ZTogICAgICAgICAgICB7IG1vZC5zZXRDaXRlKHN0cik7IHJldHVybjsg
fQorICAgICAgICBjYXNlIE1vZERhdGVUaW1lOiAgICAgICAgeyBtb2Quc2V0RGF0ZVRpbWUoc3Ry
KTsgcmV0dXJuOyB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfT0JKRUNUOiB7Ci0g
ICAgICBIVE1MT2JqZWN0RWxlbWVudEltcGwgJm9iamVjdCA9IHN0YXRpY19jYXN0PEhUTUxPYmpl
Y3RFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAg
IC8vIHJlYWQtb25seTogZm9ybQotICAgICAgY2FzZSBPYmplY3RDb2RlOiAgICAgICAgICAgICAg
ICAgeyBvYmplY3Quc2V0Q29kZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgT2JqZWN0QWxp
Z246ICAgICAgICAgICB7IG9iamVjdC5zZXRBbGlnbihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNh
c2UgT2JqZWN0QXJjaGl2ZTogICAgICAgICB7IG9iamVjdC5zZXRBcmNoaXZlKHN0cik7IHJldHVy
bjsgfQotICAgICAgY2FzZSBPYmplY3RCb3JkZXI6ICAgICAgICAgIHsgb2JqZWN0LnNldEJvcmRl
cihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgT2JqZWN0Q29kZUJhc2U6ICAgICAgICB7IG9i
amVjdC5zZXRDb2RlQmFzZShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgT2JqZWN0Q29kZVR5
cGU6ICAgICAgICB7IG9iamVjdC5zZXRDb2RlVHlwZShzdHIpOyByZXR1cm47IH0KLSAgICAgIC8v
IHJlYWQtb25seTogT2JqZWN0Q29udGVudERvY3VtZW50Ci0gICAgICBjYXNlIE9iamVjdERhdGE6
ICAgICAgICAgICAgeyBvYmplY3Quc2V0RGF0YShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2Ug
T2JqZWN0RGVjbGFyZTogICAgICAgICB7IG9iamVjdC5zZXREZWNsYXJlKHZhbHVlLnRvQm9vbGVh
bihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBPYmplY3RIZWlnaHQ6ICAgICAgICAgIHsg
b2JqZWN0LnNldEhlaWdodChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgT2JqZWN0SHNwYWNl
OiAgICAgICAgICB7IG9iamVjdC5zZXRIc3BhY2Uoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNl
IE9iamVjdE5hbWU6ICAgICAgICAgICAgeyBvYmplY3Quc2V0TmFtZShzdHIpOyByZXR1cm47IH0K
LSAgICAgIGNhc2UgT2JqZWN0U3RhbmRieTogICAgICAgICB7IG9iamVjdC5zZXRTdGFuZGJ5KHN0
cik7IHJldHVybjsgfQotICAgICAgY2FzZSBPYmplY3RUYWJJbmRleDogICAgICAgIHsgb2JqZWN0
LnNldFRhYkluZGV4KHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2Ug
T2JqZWN0VHlwZTogICAgICAgICAgICB7IG9iamVjdC5zZXRUeXBlKHN0cik7IHJldHVybjsgfQot
ICAgICAgY2FzZSBPYmplY3RVc2VNYXA6ICAgICAgICAgIHsgb2JqZWN0LnNldFVzZU1hcChzdHIp
OyByZXR1cm47IH0KLSAgICAgIGNhc2UgT2JqZWN0VnNwYWNlOiAgICAgICAgICB7IG9iamVjdC5z
ZXRWc3BhY2Uoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIE9iamVjdFdpZHRoOiAgICAgICAg
ICAgeyBvYmplY3Quc2V0V2lkdGgoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICB9Cit9CisKK3ZvaWQg
SFRNTEVsZW1lbnQ6OmFuY2hvclNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29u
c3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxB
bmNob3JFbGVtZW50SW1wbCYgYW5jaG9yID0gKnN0YXRpY19jYXN0PEhUTUxBbmNob3JFbGVtZW50
SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNlIEFuY2hv
ckFjY2Vzc0tleTogICAgICAgeyBhbmNob3Iuc2V0QWNjZXNzS2V5KHN0cik7IHJldHVybjsgfQor
ICAgICAgICBjYXNlIEFuY2hvckNoYXJzZXQ6ICAgICAgICAgeyBhbmNob3Iuc2V0Q2hhcnNldChz
dHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBBbmNob3JDb29yZHM6ICAgICAgICAgIHsgYW5j
aG9yLnNldENvb3JkcyhzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBBbmNob3JIcmVmOiAg
ICAgICAgICAgIHsgYW5jaG9yLnNldEhyZWYoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2Ug
QW5jaG9ySHJlZkxhbmc6ICAgICAgICB7IGFuY2hvci5zZXRIcmVmbGFuZyhzdHIpOyByZXR1cm47
IH0KKyAgICAgICAgY2FzZSBBbmNob3JOYW1lOiAgICAgICAgICAgIHsgYW5jaG9yLnNldE5hbWUo
c3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQW5jaG9yUmVsOiAgICAgICAgICAgICB7IGFu
Y2hvci5zZXRSZWwoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQW5jaG9yUmV2OiAgICAg
ICAgICAgICB7IGFuY2hvci5zZXRSZXYoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQW5j
aG9yU2hhcGU6ICAgICAgICAgICB7IGFuY2hvci5zZXRTaGFwZShzdHIpOyByZXR1cm47IH0KKyAg
ICAgICAgY2FzZSBBbmNob3JUYWJJbmRleDogICAgICAgIHsgYW5jaG9yLnNldFRhYkluZGV4KHZh
bHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBBbmNob3JUYXJnZXQ6
ICAgICAgICAgIHsgYW5jaG9yLnNldFRhcmdldChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2Fz
ZSBBbmNob3JUeXBlOiAgICAgICAgICAgIHsgYW5jaG9yLnNldFR5cGUoc3RyKTsgcmV0dXJuOyB9
CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfUEFSQU06IHsKLSAgICAgIEhUTUxQYXJh
bUVsZW1lbnRJbXBsICZwYXJhbSA9IHN0YXRpY19jYXN0PEhUTUxQYXJhbUVsZW1lbnRJbXBsICY+
KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgY2FzZSBQYXJhbU5hbWU6
ICAgICAgICAgICAgeyBwYXJhbS5zZXROYW1lKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBQ
YXJhbVR5cGU6ICAgICAgICAgICAgeyBwYXJhbS5zZXRUeXBlKHN0cik7IHJldHVybjsgfQotICAg
ICAgY2FzZSBQYXJhbVZhbHVlOiAgICAgICAgICAgeyBwYXJhbS5zZXRWYWx1ZShzdHIpOyByZXR1
cm47IH0KLSAgICAgIGNhc2UgUGFyYW1WYWx1ZVR5cGU6ICAgICAgIHsgcGFyYW0uc2V0VmFsdWVU
eXBlKHN0cik7IHJldHVybjsgfQotICAgICAgfQorfQorCit2b2lkIEhUTUxFbGVtZW50OjppbWFn
ZVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBj
b25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxJbWFnZUVsZW1lbnRJbXBsJiBp
bWFnZSA9ICpzdGF0aWNfY2FzdDxIVE1MSW1hZ2VFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAg
c3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNlIEltYWdlTmFtZTogICAgICAgICAgICB7IGlt
YWdlLnNldE5hbWUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgSW1hZ2VBbGlnbjogICAg
ICAgICAgIHsgaW1hZ2Uuc2V0QWxpZ24oc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgSW1h
Z2VBbHQ6ICAgICAgICAgICAgIHsgaW1hZ2Uuc2V0QWx0KHN0cik7IHJldHVybjsgfQorICAgICAg
ICBjYXNlIEltYWdlQm9yZGVyOiAgICAgICAgICB7IGltYWdlLnNldEJvcmRlcih2YWx1ZS50b0lu
dDMyKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgSW1hZ2VIZWlnaHQ6ICAgICAgICAg
IHsgaW1hZ2Uuc2V0SGVpZ2h0KHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KKyAgICAg
ICAgY2FzZSBJbWFnZUhzcGFjZTogICAgICAgICAgeyBpbWFnZS5zZXRIc3BhY2UodmFsdWUudG9J
bnQzMihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIEltYWdlSXNNYXA6ICAgICAgICAg
ICB7IGltYWdlLnNldElzTWFwKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQorICAg
ICAgICBjYXNlIEltYWdlTG9uZ0Rlc2M6ICAgICAgICB7IGltYWdlLnNldExvbmdEZXNjKHN0cik7
IHJldHVybjsgfQorICAgICAgICBjYXNlIEltYWdlU3JjOiAgICAgICAgICAgICB7IGltYWdlLnNl
dFNyYyhzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJbWFnZVVzZU1hcDogICAgICAgICAg
eyBpbWFnZS5zZXRVc2VNYXAoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgSW1hZ2VWc3Bh
Y2U6ICAgICAgICAgIHsgaW1hZ2Uuc2V0VnNwYWNlKHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1
cm47IH0KKyAgICAgICAgY2FzZSBJbWFnZVdpZHRoOiAgICAgICAgICAgeyBpbWFnZS5zZXRXaWR0
aCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9CiAgICAgfQotICAgIGJyZWFrOwotICAg
IGNhc2UgSURfQVBQTEVUOiB7Ci0gICAgICBIVE1MQXBwbGV0RWxlbWVudEltcGwgJmFwcGxldCA9
IHN0YXRpY19jYXN0PEhUTUxBcHBsZXRFbGVtZW50SW1wbCAmPihlbGVtZW50KTsKLSAgICAgIHN3
aXRjaCAodG9rZW4pIHsKLSAgICAgIGNhc2UgQXBwbGV0QWxpZ246ICAgICAgICAgICB7IGFwcGxl
dC5zZXRBbGlnbihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQXBwbGV0QWx0OiAgICAgICAg
ICAgICB7IGFwcGxldC5zZXRBbHQoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEFwcGxldEFy
Y2hpdmU6ICAgICAgICAgeyBhcHBsZXQuc2V0QXJjaGl2ZShzdHIpOyByZXR1cm47IH0KLSAgICAg
IGNhc2UgQXBwbGV0Q29kZTogICAgICAgICAgICB7IGFwcGxldC5zZXRDb2RlKHN0cik7IHJldHVy
bjsgfQotICAgICAgY2FzZSBBcHBsZXRDb2RlQmFzZTogICAgICAgIHsgYXBwbGV0LnNldENvZGVC
YXNlKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBBcHBsZXRIZWlnaHQ6ICAgICAgICAgIHsg
YXBwbGV0LnNldEhlaWdodChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQXBwbGV0SHNwYWNl
OiAgICAgICAgICB7IGFwcGxldC5zZXRIc3BhY2Uoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNl
IEFwcGxldE5hbWU6ICAgICAgICAgICAgeyBhcHBsZXQuc2V0TmFtZShzdHIpOyByZXR1cm47IH0K
LSAgICAgIGNhc2UgQXBwbGV0T2JqZWN0OiAgICAgICAgICB7IGFwcGxldC5zZXRPYmplY3Qoc3Ry
KTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEFwcGxldFZzcGFjZTogICAgICAgICAgeyBhcHBsZXQu
c2V0VnNwYWNlKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBBcHBsZXRXaWR0aDogICAgICAg
ICAgIHsgYXBwbGV0LnNldFdpZHRoKHN0cik7IHJldHVybjsgfQotICAgICAgfQorfQorCit2b2lk
IEhUTUxFbGVtZW50OjpvYmplY3RTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNv
bnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1M
T2JqZWN0RWxlbWVudEltcGwmIG9iamVjdCA9ICpzdGF0aWNfY2FzdDxIVE1MT2JqZWN0RWxlbWVu
dEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgLy8gcmVhZC1v
bmx5OiBmb3JtCisgICAgICAgIGNhc2UgT2JqZWN0Q29kZTogICAgICAgICAgICB7IG9iamVjdC5z
ZXRDb2RlKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIE9iamVjdEFsaWduOiAgICAgICAg
ICAgeyBvYmplY3Quc2V0QWxpZ24oc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgT2JqZWN0
QXJjaGl2ZTogICAgICAgICB7IG9iamVjdC5zZXRBcmNoaXZlKHN0cik7IHJldHVybjsgfQorICAg
ICAgICBjYXNlIE9iamVjdEJvcmRlcjogICAgICAgICAgeyBvYmplY3Quc2V0Qm9yZGVyKHN0cik7
IHJldHVybjsgfQorICAgICAgICBjYXNlIE9iamVjdENvZGVCYXNlOiAgICAgICAgeyBvYmplY3Qu
c2V0Q29kZUJhc2Uoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgT2JqZWN0Q29kZVR5cGU6
ICAgICAgICB7IG9iamVjdC5zZXRDb2RlVHlwZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgLy8g
cmVhZC1vbmx5OiBPYmplY3RDb250ZW50RG9jdW1lbnQKKyAgICAgICAgY2FzZSBPYmplY3REYXRh
OiAgICAgICAgICAgIHsgb2JqZWN0LnNldERhdGEoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNh
c2UgT2JqZWN0RGVjbGFyZTogICAgICAgICB7IG9iamVjdC5zZXREZWNsYXJlKHZhbHVlLnRvQm9v
bGVhbihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIE9iamVjdEhlaWdodDogICAgICAg
ICAgeyBvYmplY3Quc2V0SGVpZ2h0KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIE9iamVj
dEhzcGFjZTogICAgICAgICAgeyBvYmplY3Quc2V0SHNwYWNlKHN0cik7IHJldHVybjsgfQorICAg
ICAgICBjYXNlIE9iamVjdE5hbWU6ICAgICAgICAgICAgeyBvYmplY3Quc2V0TmFtZShzdHIpOyBy
ZXR1cm47IH0KKyAgICAgICAgY2FzZSBPYmplY3RTdGFuZGJ5OiAgICAgICAgIHsgb2JqZWN0LnNl
dFN0YW5kYnkoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgT2JqZWN0VGFiSW5kZXg6ICAg
ICAgICB7IG9iamVjdC5zZXRUYWJJbmRleCh2YWx1ZS50b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9
CisgICAgICAgIGNhc2UgT2JqZWN0VHlwZTogICAgICAgICAgICB7IG9iamVjdC5zZXRUeXBlKHN0
cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIE9iamVjdFVzZU1hcDogICAgICAgICAgeyBvYmpl
Y3Quc2V0VXNlTWFwKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIE9iamVjdFZzcGFjZTog
ICAgICAgICAgeyBvYmplY3Quc2V0VnNwYWNlKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNl
IE9iamVjdFdpZHRoOiAgICAgICAgICAgeyBvYmplY3Quc2V0V2lkdGgoc3RyKTsgcmV0dXJuOyB9
CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfTUFQOiB7Ci0gICAgICBIVE1MTWFwRWxl
bWVudEltcGwgJm1hcCA9IHN0YXRpY19jYXN0PEhUTUxNYXBFbGVtZW50SW1wbCAmPihlbGVtZW50
KTsKLSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIC8vIHJlYWQtb25seTogYXJlYXMKLSAg
ICAgIGNhc2UgTWFwTmFtZTogICAgICAgICAgICAgICAgIHsgbWFwLnNldE5hbWUoc3RyKTsgcmV0
dXJuOyB9Ci0gICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6cGFyYW1TZXR0ZXIoRXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01T
dHJpbmcmIHN0cikKK3sKKyAgICBIVE1MUGFyYW1FbGVtZW50SW1wbCYgcGFyYW0gPSAqc3RhdGlj
X2Nhc3Q8SFRNTFBhcmFtRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4p
IHsKKyAgICAgICAgY2FzZSBQYXJhbU5hbWU6ICAgICAgICAgICAgeyBwYXJhbS5zZXROYW1lKHN0
cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFBhcmFtVHlwZTogICAgICAgICAgICB7IHBhcmFt
LnNldFR5cGUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgUGFyYW1WYWx1ZTogICAgICAg
ICAgIHsgcGFyYW0uc2V0VmFsdWUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgUGFyYW1W
YWx1ZVR5cGU6ICAgICAgIHsgcGFyYW0uc2V0VmFsdWVUeXBlKHN0cik7IHJldHVybjsgfQogICAg
IH0KLSAgICBicmVhazsKLSAgICBjYXNlIElEX0FSRUE6IHsKLSAgICAgIEhUTUxBcmVhRWxlbWVu
dEltcGwgJmFyZWEgPSBzdGF0aWNfY2FzdDxIVE1MQXJlYUVsZW1lbnRJbXBsICY+KGVsZW1lbnQp
OwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgY2FzZSBBcmVhQWNjZXNzS2V5OiAgICAg
ICB7IGFyZWEuc2V0QWNjZXNzS2V5KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBBcmVhQWx0
OiAgICAgICAgICAgICB7IGFyZWEuc2V0QWx0KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBB
cmVhQ29vcmRzOiAgICAgICAgICB7IGFyZWEuc2V0Q29vcmRzKHN0cik7IHJldHVybjsgfQotICAg
ICAgY2FzZSBBcmVhSHJlZjogICAgICAgICAgICB7IGFyZWEuc2V0SHJlZihzdHIpOyByZXR1cm47
IH0KLSAgICAgIGNhc2UgQXJlYU5vSHJlZjogICAgICAgICAgeyBhcmVhLnNldE5vSHJlZih2YWx1
ZS50b0Jvb2xlYW4oZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgQXJlYVNoYXBlOiAgICAg
ICAgICAgeyBhcmVhLnNldFNoYXBlKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBBcmVhVGFi
SW5kZXg6ICAgICAgICB7IGFyZWEuc2V0VGFiSW5kZXgodmFsdWUudG9JbnQzMihleGVjKSk7IHJl
dHVybjsgfQotICAgICAgY2FzZSBBcmVhVGFyZ2V0OiAgICAgICAgICB7IGFyZWEuc2V0VGFyZ2V0
KHN0cik7IHJldHVybjsgfQotICAgICAgfQorfQorCit2b2lkIEhUTUxFbGVtZW50OjphcHBsZXRT
ZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29u
c3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MQXBwbGV0RWxlbWVudEltcGwmIGFw
cGxldCA9ICpzdGF0aWNfY2FzdDxIVE1MQXBwbGV0RWxlbWVudEltcGwqPihpbXBsKCkpOworICAg
IHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAgY2FzZSBBcHBsZXRBbGlnbjogICAgICAgICAgIHsg
YXBwbGV0LnNldEFsaWduKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEFwcGxldEFsdDog
ICAgICAgICAgICAgeyBhcHBsZXQuc2V0QWx0KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNl
IEFwcGxldEFyY2hpdmU6ICAgICAgICAgeyBhcHBsZXQuc2V0QXJjaGl2ZShzdHIpOyByZXR1cm47
IH0KKyAgICAgICAgY2FzZSBBcHBsZXRDb2RlOiAgICAgICAgICAgIHsgYXBwbGV0LnNldENvZGUo
c3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQXBwbGV0Q29kZUJhc2U6ICAgICAgICB7IGFw
cGxldC5zZXRDb2RlQmFzZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBBcHBsZXRIZWln
aHQ6ICAgICAgICAgIHsgYXBwbGV0LnNldEhlaWdodChzdHIpOyByZXR1cm47IH0KKyAgICAgICAg
Y2FzZSBBcHBsZXRIc3BhY2U6ICAgICAgICAgIHsgYXBwbGV0LnNldEhzcGFjZShzdHIpOyByZXR1
cm47IH0KKyAgICAgICAgY2FzZSBBcHBsZXROYW1lOiAgICAgICAgICAgIHsgYXBwbGV0LnNldE5h
bWUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQXBwbGV0T2JqZWN0OiAgICAgICAgICB7
IGFwcGxldC5zZXRPYmplY3Qoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQXBwbGV0VnNw
YWNlOiAgICAgICAgICB7IGFwcGxldC5zZXRWc3BhY2Uoc3RyKTsgcmV0dXJuOyB9CisgICAgICAg
IGNhc2UgQXBwbGV0V2lkdGg6ICAgICAgICAgICB7IGFwcGxldC5zZXRXaWR0aChzdHIpOyByZXR1
cm47IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9TQ1JJUFQ6IHsKLSAgICAgIEhU
TUxTY3JpcHRFbGVtZW50SW1wbCAmc2NyaXB0ID0gc3RhdGljX2Nhc3Q8SFRNTFNjcmlwdEVsZW1l
bnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgY2FzZSBT
Y3JpcHRUZXh0OiAgICAgICAgICAgIHsgc2NyaXB0LnNldFRleHQoc3RyKTsgcmV0dXJuOyB9Ci0g
ICAgICBjYXNlIFNjcmlwdEh0bWxGb3I6ICAgICAgICAgeyBzY3JpcHQuc2V0SHRtbEZvcihzdHIp
OyByZXR1cm47IH0KLSAgICAgIGNhc2UgU2NyaXB0RXZlbnQ6ICAgICAgICAgICB7IHNjcmlwdC5z
ZXRFdmVudChzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgU2NyaXB0Q2hhcnNldDogICAgICAg
ICB7IHNjcmlwdC5zZXRDaGFyc2V0KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBTY3JpcHRE
ZWZlcjogICAgICAgICAgIHsgc2NyaXB0LnNldERlZmVyKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7
IHJldHVybjsgfQotICAgICAgY2FzZSBTY3JpcHRTcmM6ICAgICAgICAgICAgIHsgc2NyaXB0LnNl
dFNyYyhzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgU2NyaXB0VHlwZTogICAgICAgICAgICB7
IHNjcmlwdC5zZXRUeXBlKHN0cik7IHJldHVybjsgfQotICAgICAgfQorfQorCit2b2lkIEhUTUxF
bGVtZW50OjptYXBTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVl
JiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MTWFwRWxlbWVu
dEltcGwmIG1hcCA9ICpzdGF0aWNfY2FzdDxIVE1MTWFwRWxlbWVudEltcGwqPihpbXBsKCkpOwor
ICAgIGlmICh0b2tlbiA9PSBNYXBOYW1lKQorICAgICAgICAvLyByZWFkLW9ubHk6IGFyZWFzCisg
ICAgICAgIG1hcC5zZXROYW1lKHN0cik7Cit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OmFyZWFTZXR0
ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3Qg
RE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MQXJlYUVsZW1lbnRJbXBsJiBhcmVhID0g
KnN0YXRpY19jYXN0PEhUTUxBcmVhRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAo
dG9rZW4pIHsKKyAgICAgICAgY2FzZSBBcmVhQWNjZXNzS2V5OiAgICAgICB7IGFyZWEuc2V0QWNj
ZXNzS2V5KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEFyZWFBbHQ6ICAgICAgICAgICAg
IHsgYXJlYS5zZXRBbHQoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgQXJlYUNvb3Jkczog
ICAgICAgICAgeyBhcmVhLnNldENvb3JkcyhzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBB
cmVhSHJlZjogICAgICAgICAgICB7IGFyZWEuc2V0SHJlZihzdHIpOyByZXR1cm47IH0KKyAgICAg
ICAgY2FzZSBBcmVhTm9IcmVmOiAgICAgICAgICB7IGFyZWEuc2V0Tm9IcmVmKHZhbHVlLnRvQm9v
bGVhbihleGVjKSk7IHJldHVybjsgfQorICAgICAgICBjYXNlIEFyZWFTaGFwZTogICAgICAgICAg
IHsgYXJlYS5zZXRTaGFwZShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBBcmVhVGFiSW5k
ZXg6ICAgICAgICB7IGFyZWEuc2V0VGFiSW5kZXgodmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVy
bjsgfQorICAgICAgICBjYXNlIEFyZWFUYXJnZXQ6ICAgICAgICAgIHsgYXJlYS5zZXRUYXJnZXQo
c3RyKTsgcmV0dXJuOyB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfVEFCTEU6IHsK
LSAgICAgIEhUTUxUYWJsZUVsZW1lbnRJbXBsICZ0YWJsZSA9IHN0YXRpY19jYXN0PEhUTUxUYWJs
ZUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAg
Y2FzZSBUYWJsZUNhcHRpb246ICAgICAgICAgeyB0YWJsZS5zZXRDYXB0aW9uKHRvSFRNTFRhYmxl
Q2FwdGlvbkVsZW1lbnQodmFsdWUpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlVEhlYWQ6
ICAgICAgICAgICB7IHRhYmxlLnNldFRIZWFkKHRvSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQodmFs
dWUpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlVEZvb3Q6ICAgICAgICAgICB7IHRhYmxl
LnNldFRGb290KHRvSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQodmFsdWUpKTsgcmV0dXJuOyB9Ci0g
ICAgICAvLyByZWFkLW9ubHk6IHJvd3MKLSAgICAgIC8vIHJlYWQtb25seTogdGJvZGllcwotICAg
ICAgY2FzZSBUYWJsZUFsaWduOiAgICAgICAgICAgeyB0YWJsZS5zZXRBbGlnbihzdHIpOyByZXR1
cm47IH0KLSAgICAgIGNhc2UgVGFibGVCZ0NvbG9yOiAgICAgICAgIHsgdGFibGUuc2V0QmdDb2xv
cihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVCb3JkZXI6ICAgICAgICAgIHsgdGFi
bGUuc2V0Qm9yZGVyKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJsZUNlbGxQYWRkaW5n
OiAgICAgeyB0YWJsZS5zZXRDZWxsUGFkZGluZyhzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2Ug
VGFibGVDZWxsU3BhY2luZzogICAgIHsgdGFibGUuc2V0Q2VsbFNwYWNpbmcoc3RyKTsgcmV0dXJu
OyB9Ci0gICAgICBjYXNlIFRhYmxlRnJhbWU6ICAgICAgICAgICB7IHRhYmxlLnNldEZyYW1lKHN0
cik7IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJsZVJ1bGVzOiAgICAgICAgICAgeyB0YWJsZS5z
ZXRSdWxlcyhzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVTdW1tYXJ5OiAgICAgICAg
IHsgdGFibGUuc2V0U3VtbWFyeShzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVXaWR0
aDogICAgICAgICAgIHsgdGFibGUuc2V0V2lkdGgoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICB9Cit9
CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OnNjcmlwdFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0
b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQorewor
ICAgIEhUTUxTY3JpcHRFbGVtZW50SW1wbCYgc2NyaXB0ID0gKnN0YXRpY19jYXN0PEhUTUxTY3Jp
cHRFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICBj
YXNlIFNjcmlwdFRleHQ6ICAgICAgICAgICAgeyBzY3JpcHQuc2V0VGV4dChzdHIpOyByZXR1cm47
IH0KKyAgICAgICAgY2FzZSBTY3JpcHRIdG1sRm9yOiAgICAgICAgIHsgc2NyaXB0LnNldEh0bWxG
b3Ioc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgU2NyaXB0RXZlbnQ6ICAgICAgICAgICB7
IHNjcmlwdC5zZXRFdmVudChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBTY3JpcHRDaGFy
c2V0OiAgICAgICAgIHsgc2NyaXB0LnNldENoYXJzZXQoc3RyKTsgcmV0dXJuOyB9CisgICAgICAg
IGNhc2UgU2NyaXB0RGVmZXI6ICAgICAgICAgICB7IHNjcmlwdC5zZXREZWZlcih2YWx1ZS50b0Jv
b2xlYW4oZXhlYykpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBTY3JpcHRTcmM6ICAgICAgICAg
ICAgIHsgc2NyaXB0LnNldFNyYyhzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBTY3JpcHRU
eXBlOiAgICAgICAgICAgIHsgc2NyaXB0LnNldFR5cGUoc3RyKTsgcmV0dXJuOyB9CiAgICAgfQot
ICAgIGJyZWFrOwotICAgIGNhc2UgSURfQ0FQVElPTjogewotICAgICAgSFRNTFRhYmxlQ2FwdGlv
bkVsZW1lbnRJbXBsICZ0YWJsZUNhcHRpb24gPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVDYXB0aW9u
RWxlbWVudEltcGwgJj4oZWxlbWVudCk7Ci0gICAgICBzd2l0Y2ggKHRva2VuKSB7Ci0gICAgICBj
YXNlIFRhYmxlQWxpZ246ICAgICAgICAgICB7IHRhYmxlQ2FwdGlvbi5zZXRBbGlnbihzdHIpOyBy
ZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6dGFibGVTZXR0ZXIoRXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpE
T01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MVGFibGVFbGVtZW50SW1wbCYgdGFibGUgPSAqc3Rh
dGljX2Nhc3Q8SFRNTFRhYmxlRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9r
ZW4pIHsKKyAgICAgICAgY2FzZSBUYWJsZUNhcHRpb246ICAgICAgICAgeyB0YWJsZS5zZXRDYXB0
aW9uKHRvSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQodmFsdWUpKTsgcmV0dXJuOyB9CisgICAgICAg
IGNhc2UgVGFibGVUSGVhZDogICAgICAgICAgIHsgdGFibGUuc2V0VEhlYWQodG9IVE1MVGFibGVT
ZWN0aW9uRWxlbWVudCh2YWx1ZSkpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZVRGb290
OiAgICAgICAgICAgeyB0YWJsZS5zZXRURm9vdCh0b0hUTUxUYWJsZVNlY3Rpb25FbGVtZW50KHZh
bHVlKSk7IHJldHVybjsgfQorICAgICAgICAvLyByZWFkLW9ubHk6IHJvd3MKKyAgICAgICAgLy8g
cmVhZC1vbmx5OiB0Ym9kaWVzCisgICAgICAgIGNhc2UgVGFibGVBbGlnbjogICAgICAgICAgIHsg
dGFibGUuc2V0QWxpZ24oc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGFibGVCZ0NvbG9y
OiAgICAgICAgIHsgdGFibGUuc2V0QmdDb2xvcihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2Fz
ZSBUYWJsZUJvcmRlcjogICAgICAgICAgeyB0YWJsZS5zZXRCb3JkZXIoc3RyKTsgcmV0dXJuOyB9
CisgICAgICAgIGNhc2UgVGFibGVDZWxsUGFkZGluZzogICAgIHsgdGFibGUuc2V0Q2VsbFBhZGRp
bmcoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGFibGVDZWxsU3BhY2luZzogICAgIHsg
dGFibGUuc2V0Q2VsbFNwYWNpbmcoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGFibGVG
cmFtZTogICAgICAgICAgIHsgdGFibGUuc2V0RnJhbWUoc3RyKTsgcmV0dXJuOyB9CisgICAgICAg
IGNhc2UgVGFibGVSdWxlczogICAgICAgICAgIHsgdGFibGUuc2V0UnVsZXMoc3RyKTsgcmV0dXJu
OyB9CisgICAgICAgIGNhc2UgVGFibGVTdW1tYXJ5OiAgICAgICAgIHsgdGFibGUuc2V0U3VtbWFy
eShzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZVdpZHRoOiAgICAgICAgICAgeyB0
YWJsZS5zZXRXaWR0aChzdHIpOyByZXR1cm47IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2Fz
ZSBJRF9DT0w6IHsKLSAgICAgIEhUTUxUYWJsZUNvbEVsZW1lbnRJbXBsICZ0YWJsZUNvbCA9IHN0
YXRpY19jYXN0PEhUTUxUYWJsZUNvbEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dp
dGNoICh0b2tlbikgewotICAgICAgY2FzZSBUYWJsZUNvbEFsaWduOiAgICAgICAgICAgeyB0YWJs
ZUNvbC5zZXRBbGlnbihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVDb2xDaDogICAg
ICAgICAgICAgIHsgdGFibGVDb2wuc2V0Q2goc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRh
YmxlQ29sQ2hPZmY6ICAgICAgICAgICB7IHRhYmxlQ29sLnNldENoT2ZmKHN0cik7IHJldHVybjsg
fQotICAgICAgY2FzZSBUYWJsZUNvbFNwYW46ICAgICAgICAgICAgeyB0YWJsZUNvbC5zZXRTcGFu
KHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVDb2xWQWxp
Z246ICAgICAgICAgIHsgdGFibGVDb2wuc2V0VkFsaWduKHN0cik7IHJldHVybjsgfQotICAgICAg
Y2FzZSBUYWJsZUNvbFdpZHRoOiAgICAgICAgICAgeyB0YWJsZUNvbC5zZXRXaWR0aChzdHIpOyBy
ZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6dGFibGVDYXB0aW9uU2V0
dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0
IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnRJbXBs
JiB0YWJsZUNhcHRpb24gPSAqc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnRJbXBs
Kj4oaW1wbCgpKTsKKyAgICBpZiAodG9rZW4gPT0gVGFibGVDYXB0aW9uQWxpZ24pCisgICAgICAg
IHRhYmxlQ2FwdGlvbi5zZXRBbGlnbihzdHIpOworfQorCit2b2lkIEhUTUxFbGVtZW50Ojp0YWJs
ZUNvbFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVl
LCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxUYWJsZUNvbEVsZW1lbnRJ
bXBsJiB0YWJsZUNvbCA9ICpzdGF0aWNfY2FzdDxIVE1MVGFibGVDb2xFbGVtZW50SW1wbCo+KGlt
cGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNlIFRhYmxlQ29sQWxpZ246
ICAgICAgICAgICB7IHRhYmxlQ29sLnNldEFsaWduKHN0cik7IHJldHVybjsgfQorICAgICAgICBj
YXNlIFRhYmxlQ29sQ2g6ICAgICAgICAgICAgICB7IHRhYmxlQ29sLnNldENoKHN0cik7IHJldHVy
bjsgfQorICAgICAgICBjYXNlIFRhYmxlQ29sQ2hPZmY6ICAgICAgICAgICB7IHRhYmxlQ29sLnNl
dENoT2ZmKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxlQ29sU3BhbjogICAgICAg
ICAgICB7IHRhYmxlQ29sLnNldFNwYW4odmFsdWUudG9JbnQzMihleGVjKSk7IHJldHVybjsgfQor
ICAgICAgICBjYXNlIFRhYmxlQ29sVkFsaWduOiAgICAgICAgICB7IHRhYmxlQ29sLnNldFZBbGln
bihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZUNvbFdpZHRoOiAgICAgICAgICAg
eyB0YWJsZUNvbC5zZXRXaWR0aChzdHIpOyByZXR1cm47IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0g
ICAgY2FzZSBJRF9USEVBRDoKLSAgICBjYXNlIElEX1RCT0RZOgotICAgIGNhc2UgSURfVEZPT1Q6
IHsKLSAgICAgIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbCAmdGFibGVTZWN0aW9uID0gc3Rh
dGljX2Nhc3Q8SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAg
c3dpdGNoICh0b2tlbikgewotICAgICAgY2FzZSBUYWJsZVNlY3Rpb25BbGlnbjogICAgICAgICAg
IHsgdGFibGVTZWN0aW9uLnNldEFsaWduKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJs
ZVNlY3Rpb25DaDogICAgICAgICAgICAgIHsgdGFibGVTZWN0aW9uLnNldENoKHN0cik7IHJldHVy
bjsgfQotICAgICAgY2FzZSBUYWJsZVNlY3Rpb25DaE9mZjogICAgICAgICAgIHsgdGFibGVTZWN0
aW9uLnNldENoT2ZmKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJsZVNlY3Rpb25WQWxp
Z246ICAgICAgICAgIHsgdGFibGVTZWN0aW9uLnNldFZBbGlnbihzdHIpOyByZXR1cm47IH0KLSAg
ICAgIC8vIHJlYWQtb25seTogcm93cwotICAgICAgfQorfQorCit2b2lkIEhUTUxFbGVtZW50Ojp0
YWJsZVNlY3Rpb25TZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVl
JiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MVGFibGVTZWN0
aW9uRWxlbWVudEltcGwmIHRhYmxlU2VjdGlvbiA9ICpzdGF0aWNfY2FzdDxIVE1MVGFibGVTZWN0
aW9uRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4pIHsKKyAgICAgICAg
Y2FzZSBUYWJsZVNlY3Rpb25BbGlnbjogICAgICAgICAgIHsgdGFibGVTZWN0aW9uLnNldEFsaWdu
KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxlU2VjdGlvbkNoOiAgICAgICAgICAg
ICAgeyB0YWJsZVNlY3Rpb24uc2V0Q2goc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGFi
bGVTZWN0aW9uQ2hPZmY6ICAgICAgICAgICB7IHRhYmxlU2VjdGlvbi5zZXRDaE9mZihzdHIpOyBy
ZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZVNlY3Rpb25WQWxpZ246ICAgICAgICAgIHsgdGFi
bGVTZWN0aW9uLnNldFZBbGlnbihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgLy8gcmVhZC1vbmx5
OiByb3dzCiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfVFI6IHsKLSAgICAgIEhUTUxU
YWJsZVJvd0VsZW1lbnRJbXBsICZ0YWJsZVJvdyA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZVJvd0Vs
ZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgLy8g
cmVhZC1vbmx5OiByb3dJbmRleAotICAgICAgLy8gcmVhZC1vbmx5OiBzZWN0aW9uUm93SW5kZXgK
LSAgICAgIC8vIHJlYWQtb25seTogY2VsbHMKLSAgICAgIGNhc2UgVGFibGVSb3dBbGlnbjogICAg
ICAgICAgIHsgdGFibGVSb3cuc2V0QWxpZ24oc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRh
YmxlUm93QmdDb2xvcjogICAgICAgICB7IHRhYmxlUm93LnNldEJnQ29sb3Ioc3RyKTsgcmV0dXJu
OyB9Ci0gICAgICBjYXNlIFRhYmxlUm93Q2g6ICAgICAgICAgICAgICB7IHRhYmxlUm93LnNldENo
KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJsZVJvd0NoT2ZmOiAgICAgICAgICAgeyB0
YWJsZVJvdy5zZXRDaE9mZihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVSb3dWQWxp
Z246ICAgICAgICAgIHsgdGFibGVSb3cuc2V0VkFsaWduKHN0cik7IHJldHVybjsgfQotICAgICAg
fQorfQorCit2b2lkIEhUTUxFbGVtZW50Ojp0YWJsZVJvd1NldHRlcihFeGVjU3RhdGUgKmV4ZWMs
IGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3Ry
KQoreworICAgIEhUTUxUYWJsZVJvd0VsZW1lbnRJbXBsJiB0YWJsZVJvdyA9ICpzdGF0aWNfY2Fz
dDxIVE1MVGFibGVSb3dFbGVtZW50SW1wbCo+KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikg
eworICAgICAgICAvLyByZWFkLW9ubHk6IHJvd0luZGV4CisgICAgICAgIC8vIHJlYWQtb25seTog
c2VjdGlvblJvd0luZGV4CisgICAgICAgIC8vIHJlYWQtb25seTogY2VsbHMKKyAgICAgICAgY2Fz
ZSBUYWJsZVJvd0FsaWduOiAgICAgICAgICAgeyB0YWJsZVJvdy5zZXRBbGlnbihzdHIpOyByZXR1
cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZVJvd0JnQ29sb3I6ICAgICAgICAgeyB0YWJsZVJvdy5z
ZXRCZ0NvbG9yKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxlUm93Q2g6ICAgICAg
ICAgICAgICB7IHRhYmxlUm93LnNldENoKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRh
YmxlUm93Q2hPZmY6ICAgICAgICAgICB7IHRhYmxlUm93LnNldENoT2ZmKHN0cik7IHJldHVybjsg
fQorICAgICAgICBjYXNlIFRhYmxlUm93VkFsaWduOiAgICAgICAgICB7IHRhYmxlUm93LnNldFZB
bGlnbihzdHIpOyByZXR1cm47IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9USDoK
LSAgICBjYXNlIElEX1REOiB7Ci0gICAgICBIVE1MVGFibGVDZWxsRWxlbWVudEltcGwgJnRhYmxl
Q2VsbCA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbCAmPihlbGVtZW50KTsK
LSAgICAgIHN3aXRjaCAodG9rZW4pIHsKLSAgICAgIC8vIHJlYWQtb25seTogY2VsbEluZGV4Ci0g
ICAgICBjYXNlIFRhYmxlQ2VsbEFiYnI6ICAgICAgICAgICAgeyB0YWJsZUNlbGwuc2V0QWJicihz
dHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVDZWxsQWxpZ246ICAgICAgICAgICB7IHRh
YmxlQ2VsbC5zZXRBbGlnbihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgVGFibGVDZWxsQXhp
czogICAgICAgICAgICB7IHRhYmxlQ2VsbC5zZXRBeGlzKHN0cik7IHJldHVybjsgfQotICAgICAg
Y2FzZSBUYWJsZUNlbGxCZ0NvbG9yOiAgICAgICAgIHsgdGFibGVDZWxsLnNldEJnQ29sb3Ioc3Ry
KTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlQ2VsbENoOiAgICAgICAgICAgICAgeyB0YWJs
ZUNlbGwuc2V0Q2goc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlQ2VsbENoT2ZmOiAg
ICAgICAgICAgeyB0YWJsZUNlbGwuc2V0Q2hPZmYoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNl
IFRhYmxlQ2VsbENvbFNwYW46ICAgICAgICAgeyB0YWJsZUNlbGwuc2V0Q29sU3Bhbih2YWx1ZS50
b0ludDMyKGV4ZWMpKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlQ2VsbEhlYWRlcnM6ICAg
ICAgICAgeyB0YWJsZUNlbGwuc2V0SGVhZGVycyhzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2Ug
VGFibGVDZWxsSGVpZ2h0OiAgICAgICAgICB7IHRhYmxlQ2VsbC5zZXRIZWlnaHQoc3RyKTsgcmV0
dXJuOyB9Ci0gICAgICBjYXNlIFRhYmxlQ2VsbE5vV3JhcDogICAgICAgICAgeyB0YWJsZUNlbGwu
c2V0Tm9XcmFwKHZhbHVlLnRvQm9vbGVhbihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBU
YWJsZUNlbGxSb3dTcGFuOiAgICAgICAgIHsgdGFibGVDZWxsLnNldFJvd1NwYW4odmFsdWUudG9J
bnQzMihleGVjKSk7IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJsZUNlbGxTY29wZTogICAgICAg
ICAgIHsgdGFibGVDZWxsLnNldFNjb3BlKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBUYWJs
ZUNlbGxWQWxpZ246ICAgICAgICAgIHsgdGFibGVDZWxsLnNldFZBbGlnbihzdHIpOyByZXR1cm47
IH0KLSAgICAgIGNhc2UgVGFibGVDZWxsV2lkdGg6ICAgICAgICAgICB7IHRhYmxlQ2VsbC5zZXRX
aWR0aChzdHIpOyByZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6dGFi
bGVDZWxsU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFs
dWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpCit7CisgICAgSFRNTFRhYmxlQ2VsbEVsZW1l
bnRJbXBsJiB0YWJsZUNlbGwgPSAqc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBs
Kj4oaW1wbCgpKTsKKyAgICBzd2l0Y2ggKHRva2VuKSB7CisgICAgICAgIC8vIHJlYWQtb25seTog
Y2VsbEluZGV4CisgICAgICAgIGNhc2UgVGFibGVDZWxsQWJicjogICAgICAgICAgICB7IHRhYmxl
Q2VsbC5zZXRBYmJyKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxlQ2VsbEFsaWdu
OiAgICAgICAgICAgeyB0YWJsZUNlbGwuc2V0QWxpZ24oc3RyKTsgcmV0dXJuOyB9CisgICAgICAg
IGNhc2UgVGFibGVDZWxsQXhpczogICAgICAgICAgICB7IHRhYmxlQ2VsbC5zZXRBeGlzKHN0cik7
IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxlQ2VsbEJnQ29sb3I6ICAgICAgICAgeyB0YWJs
ZUNlbGwuc2V0QmdDb2xvcihzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBUYWJsZUNlbGxD
aDogICAgICAgICAgICAgIHsgdGFibGVDZWxsLnNldENoKHN0cik7IHJldHVybjsgfQorICAgICAg
ICBjYXNlIFRhYmxlQ2VsbENoT2ZmOiAgICAgICAgICAgeyB0YWJsZUNlbGwuc2V0Q2hPZmYoc3Ry
KTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGFibGVDZWxsQ29sU3BhbjogICAgICAgICB7IHRh
YmxlQ2VsbC5zZXRDb2xTcGFuKHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0KKyAgICAg
ICAgY2FzZSBUYWJsZUNlbGxIZWFkZXJzOiAgICAgICAgIHsgdGFibGVDZWxsLnNldEhlYWRlcnMo
c3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGFibGVDZWxsSGVpZ2h0OiAgICAgICAgICB7
IHRhYmxlQ2VsbC5zZXRIZWlnaHQoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGFibGVD
ZWxsTm9XcmFwOiAgICAgICAgICB7IHRhYmxlQ2VsbC5zZXROb1dyYXAodmFsdWUudG9Cb29sZWFu
KGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgVGFibGVDZWxsUm93U3BhbjogICAgICAg
ICB7IHRhYmxlQ2VsbC5zZXRSb3dTcGFuKHZhbHVlLnRvSW50MzIoZXhlYykpOyByZXR1cm47IH0K
KyAgICAgICAgY2FzZSBUYWJsZUNlbGxTY29wZTogICAgICAgICAgIHsgdGFibGVDZWxsLnNldFNj
b3BlKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRhYmxlQ2VsbFZBbGlnbjogICAgICAg
ICAgeyB0YWJsZUNlbGwuc2V0VkFsaWduKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIFRh
YmxlQ2VsbFdpZHRoOiAgICAgICAgICAgeyB0YWJsZUNlbGwuc2V0V2lkdGgoc3RyKTsgcmV0dXJu
OyB9CiAgICAgfQotICAgIGJyZWFrOwotICAgIGNhc2UgSURfRlJBTUVTRVQ6IHsKLSAgICAgIEhU
TUxGcmFtZVNldEVsZW1lbnRJbXBsICZmcmFtZVNldCA9IHN0YXRpY19jYXN0PEhUTUxGcmFtZVNl
dEVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAg
Y2FzZSBGcmFtZVNldENvbHM6ICAgICAgICAgICAgeyBmcmFtZVNldC5zZXRDb2xzKHN0cik7IHJl
dHVybjsgfQotICAgICAgY2FzZSBGcmFtZVNldFJvd3M6ICAgICAgICAgICAgeyBmcmFtZVNldC5z
ZXRSb3dzKHN0cik7IHJldHVybjsgfQotICAgICAgfQorfQorCit2b2lkIEhUTUxFbGVtZW50Ojpm
cmFtZVNldFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZh
bHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIEhUTUxGcmFtZVNldEVsZW1l
bnRJbXBsJiBmcmFtZVNldCA9ICpzdGF0aWNfY2FzdDxIVE1MRnJhbWVTZXRFbGVtZW50SW1wbCo+
KGltcGwoKSk7CisgICAgc3dpdGNoICh0b2tlbikgeworICAgICAgICBjYXNlIEZyYW1lU2V0Q29s
czogICAgICAgICAgICB7IGZyYW1lU2V0LnNldENvbHMoc3RyKTsgcmV0dXJuOyB9CisgICAgICAg
IGNhc2UgRnJhbWVTZXRSb3dzOiAgICAgICAgICAgIHsgZnJhbWVTZXQuc2V0Um93cyhzdHIpOyBy
ZXR1cm47IH0KICAgICB9Ci0gICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9GUkFNRTogewotICAgICAg
SFRNTEZyYW1lRWxlbWVudEltcGwgJmZyYW1lRWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxGcmFt
ZUVsZW1lbnRJbXBsICY+KGVsZW1lbnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAg
IC8vIHJlYWQtb25seTogRnJhbWVDb250ZW50RG9jdW1lbnQ6Ci0gICAgICBjYXNlIEZyYW1lRnJh
bWVCb3JkZXI6ICAgICB7IGZyYW1lRWxlbWVudC5zZXRGcmFtZUJvcmRlcihzdHIpOyByZXR1cm47
IH0KLSAgICAgIGNhc2UgRnJhbWVMb25nRGVzYzogICAgICAgIHsgZnJhbWVFbGVtZW50LnNldExv
bmdEZXNjKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBGcmFtZU1hcmdpbkhlaWdodDogICAg
eyBmcmFtZUVsZW1lbnQuc2V0TWFyZ2luSGVpZ2h0KHN0cik7IHJldHVybjsgfQotICAgICAgY2Fz
ZSBGcmFtZU1hcmdpbldpZHRoOiAgICAgeyBmcmFtZUVsZW1lbnQuc2V0TWFyZ2luV2lkdGgoc3Ry
KTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEZyYW1lTmFtZTogICAgICAgICAgICB7IGZyYW1lRWxl
bWVudC5zZXROYW1lKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBGcmFtZU5vUmVzaXplOiAg
ICAgICAgeyBmcmFtZUVsZW1lbnQuc2V0Tm9SZXNpemUodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsg
cmV0dXJuOyB9Ci0gICAgICBjYXNlIEZyYW1lU2Nyb2xsaW5nOiAgICAgICB7IGZyYW1lRWxlbWVu
dC5zZXRTY3JvbGxpbmcoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIEZyYW1lU3JjOiAgICAg
ICAgICAgICB7IGZyYW1lRWxlbWVudC5zZXRTcmMoc3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNl
IEZyYW1lTG9jYXRpb246ICAgICAgICB7IGZyYW1lRWxlbWVudC5zZXRMb2NhdGlvbihzdHIpOyBy
ZXR1cm47IH0KLSAgICAgIH0KK30KKwordm9pZCBIVE1MRWxlbWVudDo6ZnJhbWVTZXR0ZXIoRXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpE
T01TdHJpbmcmIHN0cikKK3sKKyAgICBIVE1MRnJhbWVFbGVtZW50SW1wbCYgZnJhbWVFbGVtZW50
ID0gKnN0YXRpY19jYXN0PEhUTUxGcmFtZUVsZW1lbnRJbXBsKj4oaW1wbCgpKTsKKyAgICBzd2l0
Y2ggKHRva2VuKSB7CisgICAgICAgIC8vIHJlYWQtb25seTogRnJhbWVDb250ZW50RG9jdW1lbnQ6
CisgICAgICAgIGNhc2UgRnJhbWVGcmFtZUJvcmRlcjogICAgIHsgZnJhbWVFbGVtZW50LnNldEZy
YW1lQm9yZGVyKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEZyYW1lTG9uZ0Rlc2M6ICAg
ICAgICB7IGZyYW1lRWxlbWVudC5zZXRMb25nRGVzYyhzdHIpOyByZXR1cm47IH0KKyAgICAgICAg
Y2FzZSBGcmFtZU1hcmdpbkhlaWdodDogICAgeyBmcmFtZUVsZW1lbnQuc2V0TWFyZ2luSGVpZ2h0
KHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEZyYW1lTWFyZ2luV2lkdGg6ICAgICB7IGZy
YW1lRWxlbWVudC5zZXRNYXJnaW5XaWR0aChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBG
cmFtZU5hbWU6ICAgICAgICAgICAgeyBmcmFtZUVsZW1lbnQuc2V0TmFtZShzdHIpOyByZXR1cm47
IH0KKyAgICAgICAgY2FzZSBGcmFtZU5vUmVzaXplOiAgICAgICAgeyBmcmFtZUVsZW1lbnQuc2V0
Tm9SZXNpemUodmFsdWUudG9Cb29sZWFuKGV4ZWMpKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2Ug
RnJhbWVTY3JvbGxpbmc6ICAgICAgIHsgZnJhbWVFbGVtZW50LnNldFNjcm9sbGluZyhzdHIpOyBy
ZXR1cm47IH0KKyAgICAgICAgY2FzZSBGcmFtZVNyYzogICAgICAgICAgICAgeyBmcmFtZUVsZW1l
bnQuc2V0U3JjKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIEZyYW1lTG9jYXRpb246ICAg
ICAgICB7IGZyYW1lRWxlbWVudC5zZXRMb2NhdGlvbihzdHIpOyByZXR1cm47IH0KICAgICB9Ci0g
ICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9JRlJBTUU6IHsKLSAgICAgIEhUTUxJRnJhbWVFbGVtZW50
SW1wbCAmaUZyYW1lID0gc3RhdGljX2Nhc3Q8SFRNTElGcmFtZUVsZW1lbnRJbXBsICY+KGVsZW1l
bnQpOwotICAgICAgc3dpdGNoICh0b2tlbikgewotICAgICAgY2FzZSBJRnJhbWVBbGlnbjogICAg
ICAgICAgIHsgaUZyYW1lLnNldEFsaWduKHN0cik7IHJldHVybjsgfQotICAgICAgLy8gcmVhZC1v
bmx5OiBJRnJhbWVDb250ZW50RG9jdW1lbnQKLSAgICAgIGNhc2UgSUZyYW1lRnJhbWVCb3JkZXI6
ICAgICB7IGlGcmFtZS5zZXRGcmFtZUJvcmRlcihzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2Ug
SUZyYW1lSGVpZ2h0OiAgICAgICAgICB7IGlGcmFtZS5zZXRIZWlnaHQoc3RyKTsgcmV0dXJuOyB9
Ci0gICAgICBjYXNlIElGcmFtZUxvbmdEZXNjOiAgICAgICAgeyBpRnJhbWUuc2V0TG9uZ0Rlc2Mo
c3RyKTsgcmV0dXJuOyB9Ci0gICAgICBjYXNlIElGcmFtZU1hcmdpbkhlaWdodDogICAgeyBpRnJh
bWUuc2V0TWFyZ2luSGVpZ2h0KHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBJRnJhbWVNYXJn
aW5XaWR0aDogICAgIHsgaUZyYW1lLnNldE1hcmdpbldpZHRoKHN0cik7IHJldHVybjsgfQotICAg
ICAgY2FzZSBJRnJhbWVOYW1lOiAgICAgICAgICAgIHsgaUZyYW1lLnNldE5hbWUoc3RyKTsgcmV0
dXJuOyB9Ci0gICAgICBjYXNlIElGcmFtZVNjcm9sbGluZzogICAgICAgeyBpRnJhbWUuc2V0U2Ny
b2xsaW5nKHN0cik7IHJldHVybjsgfQotICAgICAgY2FzZSBJRnJhbWVTcmM6ICAgICAgICAgICAg
IHsgaUZyYW1lLnNldFNyYyhzdHIpOyByZXR1cm47IH0KLSAgICAgIGNhc2UgSUZyYW1lV2lkdGg6
ICAgICAgICAgICB7IGlGcmFtZS5zZXRXaWR0aChzdHIpOyByZXR1cm47IH0KLSAgICAgIH0KLSAg
ICAgIGJyZWFrOworfQorCit2b2lkIEhUTUxFbGVtZW50OjppRnJhbWVTZXR0ZXIoRXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJp
bmcmIHN0cikKK3sKKyAgICBIVE1MSUZyYW1lRWxlbWVudEltcGwmIGlGcmFtZSA9ICpzdGF0aWNf
Y2FzdDxIVE1MSUZyYW1lRWxlbWVudEltcGwqPihpbXBsKCkpOworICAgIHN3aXRjaCAodG9rZW4p
IHsKKyAgICAgICAgY2FzZSBJRnJhbWVBbGlnbjogICAgICAgICAgIHsgaUZyYW1lLnNldEFsaWdu
KHN0cik7IHJldHVybjsgfQorICAgICAgICAvLyByZWFkLW9ubHk6IElGcmFtZUNvbnRlbnREb2N1
bWVudAorICAgICAgICBjYXNlIElGcmFtZUZyYW1lQm9yZGVyOiAgICAgeyBpRnJhbWUuc2V0RnJh
bWVCb3JkZXIoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgSUZyYW1lSGVpZ2h0OiAgICAg
ICAgICB7IGlGcmFtZS5zZXRIZWlnaHQoc3RyKTsgcmV0dXJuOyB9CisgICAgICAgIGNhc2UgSUZy
YW1lTG9uZ0Rlc2M6ICAgICAgICB7IGlGcmFtZS5zZXRMb25nRGVzYyhzdHIpOyByZXR1cm47IH0K
KyAgICAgICAgY2FzZSBJRnJhbWVNYXJnaW5IZWlnaHQ6ICAgIHsgaUZyYW1lLnNldE1hcmdpbkhl
aWdodChzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJRnJhbWVNYXJnaW5XaWR0aDogICAg
IHsgaUZyYW1lLnNldE1hcmdpbldpZHRoKHN0cik7IHJldHVybjsgfQorICAgICAgICBjYXNlIElG
cmFtZU5hbWU6ICAgICAgICAgICAgeyBpRnJhbWUuc2V0TmFtZShzdHIpOyByZXR1cm47IH0KKyAg
ICAgICAgY2FzZSBJRnJhbWVTY3JvbGxpbmc6ICAgICAgIHsgaUZyYW1lLnNldFNjcm9sbGluZyhz
dHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJRnJhbWVTcmM6ICAgICAgICAgICAgIHsgaUZy
YW1lLnNldFNyYyhzdHIpOyByZXR1cm47IH0KKyAgICAgICAgY2FzZSBJRnJhbWVXaWR0aDogICAg
ICAgICAgIHsgaUZyYW1lLnNldFdpZHRoKHN0cik7IHJldHVybjsgfQogICAgIH0KLSAgfQorfQog
Ci0gIC8vIGdlbmVyaWMgcHJvcGVydGllcwotICBzd2l0Y2ggKHRva2VuKSB7Ci0gIGNhc2UgRWxl
bWVudElkOgotICAgIGVsZW1lbnQuc2V0SWQoc3RyKTsKLSAgICByZXR1cm47Ci0gIGNhc2UgRWxl
bWVudFRpdGxlOgotICAgIGVsZW1lbnQuc2V0VGl0bGUoc3RyKTsKLSAgICByZXR1cm47Ci0gIGNh
c2UgRWxlbWVudExhbmc6Ci0gICAgZWxlbWVudC5zZXRMYW5nKHN0cik7Ci0gICAgcmV0dXJuOwot
ICBjYXNlIEVsZW1lbnREaXI6Ci0gICAgZWxlbWVudC5zZXREaXIoc3RyKTsKLSAgICByZXR1cm47
Ci0gIGNhc2UgRWxlbWVudENsYXNzTmFtZToKLSAgICBlbGVtZW50LnNldENsYXNzTmFtZShzdHIp
OwotICAgIHJldHVybjsKLSAgY2FzZSBFbGVtZW50SW5uZXJIVE1MOgotICAgIGVsZW1lbnQuc2V0
SW5uZXJIVE1MKHN0ciwgZXhjZXB0aW9uKTsKLSAgICByZXR1cm47Ci0gIGNhc2UgRWxlbWVudElu
bmVyVGV4dDoKLSAgICBlbGVtZW50LnNldElubmVyVGV4dChzdHIsIGV4Y2VwdGlvbik7Ci0gICAg
cmV0dXJuOwotICBjYXNlIEVsZW1lbnRPdXRlckhUTUw6Ci0gICAgZWxlbWVudC5zZXRPdXRlckhU
TUwoc3RyLCBleGNlcHRpb24pOwotICAgIHJldHVybjsKLSAgY2FzZSBFbGVtZW50T3V0ZXJUZXh0
OgotICAgIGVsZW1lbnQuc2V0T3V0ZXJUZXh0KHN0ciwgZXhjZXB0aW9uKTsKLSAgICByZXR1cm47
Ci0gIGNhc2UgRWxlbWVudENvbnRlbnRFZGl0YWJsZToKLSAgICBlbGVtZW50LnNldENvbnRlbnRF
ZGl0YWJsZShzdHIpOwotICAgIHJldHVybjsKLSAgZGVmYXVsdDoKLSAgICBrZFdhcm5pbmcoKSA8
PCAiS0pTOjpIVE1MRWxlbWVudDo6cHV0VmFsdWUgdW5oYW5kbGVkIHRva2VuICIgPDwgdG9rZW4g
PDwgIiB0aGlzVGFnPSIgPDwgZWxlbWVudC50YWdOYW1lKCkuc3RyaW5nKCkgPDwgIiBzdHI9IiA8
PCBzdHIuc3RyaW5nKCkgPDwgZW5kbDsKLSAgfQordm9pZCBIVE1MRWxlbWVudDo6bWFycXVlZVNl
dHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25z
dCBET006OkRPTVN0cmluZyYgc3RyKQoreworICAgIC8vIEZJWE1FOiBGaW5kIG91dCB3aGF0IFdp
bklFIHN1cHBvcnRzIGFuZCBpbXBsZW1lbnQgaXQuCit9CisKK3ZvaWQgSFRNTEVsZW1lbnQ6OnB1
dFZhbHVlKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGlu
dCkKK3sKKyAgICBET01FeGNlcHRpb25UcmFuc2xhdG9yIGV4Y2VwdGlvbihleGVjKTsKKyAgICBE
T006OkRPTVN0cmluZyBzdHIgPSB2YWx1ZS5pc0EoTnVsbFR5cGUpID8gRE9NOjpET01TdHJpbmco
KSA6IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLnN0cmluZygpOworIAorICAgIC8vIENoZWNrIG91ciBz
ZXQgb2YgZ2VuZXJpYyBwcm9wZXJ0aWVzIGZpcnN0LgorICAgIEhUTUxFbGVtZW50SW1wbCAmZWxl
bWVudCA9ICpzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwgKj4oaW1wbCgpKTsKKyAgICBzd2l0
Y2ggKHRva2VuKSB7CisgICAgICAgIGNhc2UgRWxlbWVudElkOgorICAgICAgICAgICAgZWxlbWVu
dC5zZXRJZChzdHIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIEVsZW1lbnRU
aXRsZToKKyAgICAgICAgICAgIGVsZW1lbnQuc2V0VGl0bGUoc3RyKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgY2FzZSBFbGVtZW50TGFuZzoKKyAgICAgICAgICAgIGVsZW1lbnQuc2V0
TGFuZyhzdHIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIEVsZW1lbnREaXI6
CisgICAgICAgICAgICBlbGVtZW50LnNldERpcihzdHIpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICBjYXNlIEVsZW1lbnRDbGFzc05hbWU6CisgICAgICAgICAgICBlbGVtZW50LnNldENs
YXNzTmFtZShzdHIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBjYXNlIEVsZW1lbnRJ
bm5lckhUTUw6CisgICAgICAgICAgICBlbGVtZW50LnNldElubmVySFRNTChzdHIsIGV4Y2VwdGlv
bik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNhc2UgRWxlbWVudElubmVyVGV4dDoK
KyAgICAgICAgICAgIGVsZW1lbnQuc2V0SW5uZXJUZXh0KHN0ciwgZXhjZXB0aW9uKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBFbGVtZW50T3V0ZXJIVE1MOgorICAgICAgICAg
ICAgZWxlbWVudC5zZXRPdXRlckhUTUwoc3RyLCBleGNlcHRpb24pOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICBjYXNlIEVsZW1lbnRPdXRlclRleHQ6CisgICAgICAgICAgICBlbGVtZW50
LnNldE91dGVyVGV4dChzdHIsIGV4Y2VwdGlvbik7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIGNhc2UgRWxlbWVudENvbnRlbnRFZGl0YWJsZToKKyAgICAgICAgICAgIGVsZW1lbnQuc2V0
Q29udGVudEVkaXRhYmxlKHN0cik7CisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
Ly8gTm93IGNoZWNrIGZvciBwcm9wZXJ0aWVzIHRoYXQgYXBwbHkgdG8gYSBzcGVjaWZpYyBlbGVt
ZW50IHR5cGUuCisgICAgY29uc3QgQWNjZXNzb3JzKiBpbmZvID0gZ2V0U2V0SW5mbygpOworICAg
IGlmIChpbmZvICYmIGluZm8tPm1fc2V0dGVyKQorICAgICAgICByZXR1cm4gKHRoaXMtPiooaW5m
by0+bV9zZXR0ZXIpKShleGVjLCB0b2tlbiwgdmFsdWUsIHN0cik7ICAKIH0KIAogSFRNTEVsZW1l
bnRJbXBsICp0b0hUTUxFbGVtZW50KFZhbHVlSW1wICp2YWwpCkBAIC0zMTEzLDIzICszMjc0LDE3
IEBAIEhUTUxFbGVtZW50SW1wbCAqdG9IVE1MRWxlbWVudChWYWx1ZUltcCAKIAogSFRNTFRhYmxl
Q2FwdGlvbkVsZW1lbnRJbXBsICp0b0hUTUxUYWJsZUNhcHRpb25FbGVtZW50KFZhbHVlSW1wICp2
YWwpCiB7Ci0gICAgaWYgKEhUTUxFbGVtZW50SW1wbCAqZSA9IHRvSFRNTEVsZW1lbnQodmFsKSkK
LSAgICAgICAgc3dpdGNoIChlLT5pZCgpKSB7Ci0gICAgICAgICAgICBjYXNlIElEX0NBUFRJT046
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxUYWJsZUNhcHRpb25FbGVt
ZW50SW1wbCAqPihlKTsKLSAgICAgICAgfQorICAgIEhUTUxFbGVtZW50SW1wbCAqZSA9IHRvSFRN
TEVsZW1lbnQodmFsKTsKKyAgICBpZiAoZSAmJiBlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Y2Fw
dGlvbigpKSkKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxUYWJsZUNhcHRpb25FbGVt
ZW50SW1wbCAqPihlKTsKICAgICByZXR1cm4gMDsKIH0KIAogSFRNTFRhYmxlU2VjdGlvbkVsZW1l
bnRJbXBsICp0b0hUTUxUYWJsZVNlY3Rpb25FbGVtZW50KFZhbHVlSW1wICp2YWwpCiB7Ci0gICAg
aWYgKEhUTUxFbGVtZW50SW1wbCAqZSA9IHRvSFRNTEVsZW1lbnQodmFsKSkKLSAgICAgICAgc3dp
dGNoIChlLT5pZCgpKSB7Ci0gICAgICAgICAgICBjYXNlIElEX1RIRUFEOgotICAgICAgICAgICAg
Y2FzZSBJRF9UQk9EWToKLSAgICAgICAgICAgIGNhc2UgSURfVEZPT1Q6Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbCAqPihlKTsK
LSAgICAgICAgfQorICAgIEhUTUxFbGVtZW50SW1wbCAqZSA9IHRvSFRNTEVsZW1lbnQodmFsKTsK
KyAgICBpZiAoZSAmJiAoZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRoZWFkKCkpIHx8IGUtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjp0Ym9keSgpKSB8fCBlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
dGZvb3QoKSkpKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlU2VjdGlvbkVs
ZW1lbnRJbXBsICo+KGUpOwogICAgIHJldHVybiAwOwogfQogCkBAIC0zMTc4LDEwICszMzMzLDEw
IEBAIFZhbHVlIEtKUzo6SFRNTENvbGxlY3Rpb246OnRyeUdldChFeGVjU3QKICAgZWxzZSBpZiAo
cHJvcGVydHlOYW1lID09ICJzZWxlY3RlZEluZGV4IikgewogICAgIC8vIE5PTi1TVEFOREFSRCBv
cHRpb25zLnNlbGVjdGVkSW5kZXgKICAgICBOb2RlSW1wbCAqb3B0aW9uID0gY29sbGVjdGlvbi5p
dGVtKDApOwotICAgIGlmIChvcHRpb24tPmlkKCkgPT0gSURfT1BUSU9OKSB7CisgICAgaWYgKG9w
dGlvbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9wdGlvbigpKSkgewogICAgICAgTm9kZUltcGwg
KnNlbGVjdCA9IG9wdGlvbjsKICAgICAgIHdoaWxlICgoc2VsZWN0ID0gc2VsZWN0LT5wYXJlbnRO
b2RlKCkpKQotICAgICAgICBpZiAoc2VsZWN0LT5pZCgpID09IElEX1NFTEVDVCkKKyAgICAgICAg
aWYgKHNlbGVjdC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnNlbGVjdCgpKSkKIAkgIHJldHVybiBO
dW1iZXIoc3RhdGljX2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnRJbXBsICo+KHNlbGVjdCktPnNlbGVj
dGVkSW5kZXgoKSk7CiAgICAgfQogICAgIHJldHVybiBVbmRlZmluZWQoKTsKQEAgLTMzNjksNyAr
MzUyNCw3IEBAIHZvaWQgS0pTOjpIVE1MU2VsZWN0Q29sbGVjdGlvbjo6dHJ5UHV0KEUKIAogICAv
LyBpcyB2IGFuIG9wdGlvbiBlbGVtZW50ID8KICAgTm9kZUltcGwgKm9wdGlvbiA9IHRvTm9kZSh2
YWx1ZSk7Ci0gIGlmICghb3B0aW9uIHx8IG9wdGlvbi0+aWQoKSAhPSBJRF9PUFRJT04pCisgIGlm
ICghb3B0aW9uIHx8ICFvcHRpb24tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvcHRpb24oKSkpCiAg
ICAgcmV0dXJuOwogCiAgIGludCBleGNlcHRpb24gPSAwOwpJbmRleDoga2h0bWwvZWNtYS9ranNf
aHRtbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VjbWEv
a2pzX2h0bWwuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40OQpkaWZmIC11IC1wIC1yMS40OSBr
aHRtbC9lY21hL2tqc19odG1sLmgKLS0tIGtodG1sL2VjbWEva2pzX2h0bWwuaAkzIEp1bCAyMDA1
IDEwOjQ3OjU2IC0wMDAwCTEuNDkKKysrIGtodG1sL2VjbWEva2pzX2h0bWwuaAk5IEp1bCAyMDA1
IDAyOjQyOjQ3IC0wMDAwCkBAIC04NSw2ICs4NSwxMzEgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAg
ICBjYXB0aW9uX2luZm8sIGNvbF9pbmZvLCB0YWJsZXNlY3Rpb25faW5mbywgdHJfaW5mbywKICAg
ICAgIHRhYmxlY2VsbF9pbmZvLCBmcmFtZVNldF9pbmZvLCBmcmFtZV9pbmZvLCBpRnJhbWVfaW5m
bywgbWFycXVlZV9pbmZvOwogCisgICAgLy8gRklYTUU6IE1pZ2h0IG1ha2Ugc2Vuc2UgdG8gY29t
YmluZSB0aGlzIHdpdGggQ2xhc3NJbmZvIHNvbWUgZGF5LgorICAgIHR5cGVkZWYgVmFsdWUgKEhU
TUxFbGVtZW50OjoqR2V0dGVyRnVuY3Rpb24pKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuKSBj
b25zdDsKKyAgICB0eXBlZGVmIHZvaWQgKEhUTUxFbGVtZW50OjoqU2V0dGVyRnVuY3Rpb24pKEV4
ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6
RE9NU3RyaW5nJiBzdHIpOworICAgIHN0cnVjdCBBY2Nlc3NvcnMgeyBHZXR0ZXJGdW5jdGlvbiBt
X2dldHRlcjsgU2V0dGVyRnVuY3Rpb24gbV9zZXR0ZXI7IH07CisgICAgY29uc3QgQWNjZXNzb3Jz
KiBnZXRTZXRJbmZvKCkgY29uc3Q7CisgICAgc3RhdGljIGNvbnN0IEFjY2Vzc29ycyBodG1sX2Fj
Y2Vzc29ycywgaGVhZF9hY2Nlc3NvcnMsIGxpbmtfYWNjZXNzb3JzLCB0aXRsZV9hY2Nlc3NvcnMs
CisgICAgICBtZXRhX2FjY2Vzc29ycywgYmFzZV9hY2Nlc3NvcnMsIGlzSW5kZXhfYWNjZXNzb3Jz
LCBzdHlsZV9hY2Nlc3NvcnMsIGJvZHlfYWNjZXNzb3JzLCBmb3JtX2FjY2Vzc29ycywKKyAgICAg
IHNlbGVjdF9hY2Nlc3NvcnMsIG9wdEdyb3VwX2FjY2Vzc29ycywgb3B0aW9uX2FjY2Vzc29ycywg
aW5wdXRfYWNjZXNzb3JzLCB0ZXh0QXJlYV9hY2Nlc3NvcnMsCisgICAgICBidXR0b25fYWNjZXNz
b3JzLCBsYWJlbF9hY2Nlc3NvcnMsIGZpZWxkU2V0X2FjY2Vzc29ycywgbGVnZW5kX2FjY2Vzc29y
cywgdWxfYWNjZXNzb3JzLCBvbF9hY2Nlc3NvcnMsCisgICAgICBkbF9hY2Nlc3NvcnMsIGRpcl9h
Y2Nlc3NvcnMsIG1lbnVfYWNjZXNzb3JzLCBsaV9hY2Nlc3NvcnMsIGRpdl9hY2Nlc3NvcnMsIHBf
YWNjZXNzb3JzLCBoZWFkaW5nX2FjY2Vzc29ycywKKyAgICAgIGJsb2NrUXVvdGVfYWNjZXNzb3Jz
LCBxX2FjY2Vzc29ycywgcHJlX2FjY2Vzc29ycywgYnJfYWNjZXNzb3JzLCBiYXNlRm9udF9hY2Nl
c3NvcnMsIGZvbnRfYWNjZXNzb3JzLAorICAgICAgaHJfYWNjZXNzb3JzLCBtb2RfYWNjZXNzb3Jz
LCBhX2FjY2Vzc29ycywgY2FudmFzX2FjY2Vzc29ycywgaW1nX2FjY2Vzc29ycywgb2JqZWN0X2Fj
Y2Vzc29ycywgcGFyYW1fYWNjZXNzb3JzLAorICAgICAgYXBwbGV0X2FjY2Vzc29ycywgbWFwX2Fj
Y2Vzc29ycywgYXJlYV9hY2Nlc3NvcnMsIHNjcmlwdF9hY2Nlc3NvcnMsIHRhYmxlX2FjY2Vzc29y
cywKKyAgICAgIGNhcHRpb25fYWNjZXNzb3JzLCBjb2xfYWNjZXNzb3JzLCB0YWJsZXNlY3Rpb25f
YWNjZXNzb3JzLCB0cl9hY2Nlc3NvcnMsCisgICAgICB0YWJsZWNlbGxfYWNjZXNzb3JzLCBmcmFt
ZVNldF9hY2Nlc3NvcnMsIGZyYW1lX2FjY2Vzc29ycywgaUZyYW1lX2FjY2Vzc29ycywgbWFycXVl
ZV9hY2Nlc3NvcnM7CisKKyAgICBWYWx1ZSBodG1sR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50
IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBodG1sU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50
IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOwor
ICAgIFZhbHVlIGhlYWRHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0Owor
ICAgIHZvaWQgIGhlYWRTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZh
bHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgbGlua0dl
dHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgbGlua1Nl
dHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25z
dCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSB0aXRsZUdldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgdGl0bGVTZXR0ZXIoRXhlY1N0YXRl
ICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJp
bmcmIHN0cik7CisgICAgVmFsdWUgbWV0YUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tl
bikgY29uc3Q7CisgICAgdm9pZCAgbWV0YVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tl
biwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBW
YWx1ZSBiYXNlR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2
b2lkICBiYXNlU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYg
dmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIGlzSW5kZXhHZXR0
ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGlzSW5kZXhT
ZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29u
c3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgc3R5bGVHZXR0ZXIoRXhlY1N0YXRl
KiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIHN0eWxlU2V0dGVyKEV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3Ry
aW5nJiBzdHIpOworICAgIFZhbHVlIGJvZHlHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9r
ZW4pIGNvbnN0OworICAgIHZvaWQgIGJvZHlTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9r
ZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAg
VmFsdWUgZm9ybUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAg
dm9pZCAgZm9ybVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUm
IHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBzZWxlY3RHZXR0
ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIHNlbGVjdFNl
dHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25z
dCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBvcHRHcm91cEdldHRlcihFeGVjU3Rh
dGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgb3B0R3JvdXBTZXR0ZXIoRXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpE
T01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgb3B0aW9uR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywg
aW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBvcHRpb25TZXR0ZXIoRXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0
cik7CisgICAgVmFsdWUgaW5wdXRHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNv
bnN0OworICAgIHZvaWQgIGlucHV0U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBj
b25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVl
IHRleHRBcmVhR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2
b2lkICB0ZXh0QXJlYVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFs
dWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBidXR0b25H
ZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGJ1dHRv
blNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBj
b25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBsYWJlbEdldHRlcihFeGVjU3Rh
dGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgbGFiZWxTZXR0ZXIoRXhlY1N0
YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01T
dHJpbmcmIHN0cik7CisgICAgVmFsdWUgZmllbGRTZXRHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBp
bnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGZpZWxkU2V0U2V0dGVyKEV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBz
dHIpOworICAgIFZhbHVlIGxlZ2VuZEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikg
Y29uc3Q7CisgICAgdm9pZCAgbGVnZW5kU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
LCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZh
bHVlIHVMaXN0R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2
b2lkICB1TGlzdFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUm
IHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBvTGlzdEdldHRl
cihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgb0xpc3RTZXR0
ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3Qg
RE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgZExpc3RHZXR0ZXIoRXhlY1N0YXRlKiBl
eGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGRMaXN0U2V0dGVyKEV4ZWNTdGF0ZSAq
ZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5n
JiBzdHIpOworICAgIFZhbHVlIGRpckdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikg
Y29uc3Q7CisgICAgdm9pZCAgZGlyU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBj
b25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVl
IG1lbnVHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQg
IG1lbnVTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1
ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgbGlHZXR0ZXIoRXhlY1N0
YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGxpU2V0dGVyKEV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3Ry
aW5nJiBzdHIpOworICAgIFZhbHVlIGRpdkdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tl
bikgY29uc3Q7CisgICAgdm9pZCAgZGl2U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2Vu
LCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZh
bHVlIHBhcmFncmFwaEdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7Cisg
ICAgdm9pZCAgcGFyYWdyYXBoU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25z
dCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIGhl
YWRpbmdHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQg
IGhlYWRpbmdTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2
YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgYmxvY2tRdW90ZUdl
dHRlcihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgYmxvY2tR
dW90ZVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVl
LCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBxdW90ZUdldHRlcihFeGVj
U3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgcXVvdGVTZXR0ZXIoRXhl
Y1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpE
T01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgcHJlR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50
IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBwcmVTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7Cisg
ICAgVmFsdWUgYnJHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAg
IHZvaWQgIGJyU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYg
dmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIGJhc2VGb250R2V0
dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBiYXNlRm9u
dFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBj
b25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBmb250R2V0dGVyKEV4ZWNTdGF0
ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBmb250U2V0dGVyKEV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3Ry
aW5nJiBzdHIpOworICAgIFZhbHVlIGhyR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2Vu
KSBjb25zdDsKKyAgICB2b2lkICBoclNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwg
Y29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1
ZSBtb2RHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQg
IG1vZFNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVl
LCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBhbmNob3JHZXR0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGFuY2hvclNldHRlcihF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006
OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBpbWFnZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMs
IGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgaW1hZ2VTZXR0ZXIoRXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0
cik7CisgICAgVmFsdWUgb2JqZWN0R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBj
b25zdDsKKyAgICB2b2lkICBvYmplY3RTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4s
IGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFs
dWUgcGFyYW1HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZv
aWQgIHBhcmFtU2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYg
dmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIGFwcGxldEdldHRl
cihFeGVjU3RhdGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgYXBwbGV0U2V0
dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0
IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIG1hcEdldHRlcihFeGVjU3RhdGUqIGV4
ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgbWFwU2V0dGVyKEV4ZWNTdGF0ZSAqZXhl
YywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBz
dHIpOworICAgIFZhbHVlIGFyZWFHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNv
bnN0OworICAgIHZvaWQgIGFyZWFTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNv
bnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUg
c2NyaXB0R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lk
ICBzY3JpcHRTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2
YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7CisgICAgVmFsdWUgdGFibGVHZXR0ZXIo
RXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIHRhYmxlU2V0dGVy
KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERP
TTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIHRhYmxlQ2FwdGlvbkdldHRlcihFeGVjU3Rh
dGUqIGV4ZWMsIGludCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgdGFibGVDYXB0aW9uU2V0dGVy
KEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERP
TTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVlIHRhYmxlQ29sR2V0dGVyKEV4ZWNTdGF0ZSog
ZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICB0YWJsZUNvbFNldHRlcihFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0
cmluZyYgc3RyKTsKKyAgICBWYWx1ZSB0YWJsZVNlY3Rpb25HZXR0ZXIoRXhlY1N0YXRlKiBleGVj
LCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIHRhYmxlU2VjdGlvblNldHRlcihFeGVjU3Rh
dGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBET006OkRPTVN0
cmluZyYgc3RyKTsKKyAgICBWYWx1ZSB0YWJsZVJvd0dldHRlcihFeGVjU3RhdGUqIGV4ZWMsIGlu
dCB0b2tlbikgY29uc3Q7CisgICAgdm9pZCAgdGFibGVSb3dTZXR0ZXIoRXhlY1N0YXRlICpleGVj
LCBpbnQgdG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0
cik7CisgICAgVmFsdWUgdGFibGVDZWxsR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2Vu
KSBjb25zdDsKKyAgICB2b2lkICB0YWJsZUNlbGxTZXR0ZXIoRXhlY1N0YXRlICpleGVjLCBpbnQg
dG9rZW4sIGNvbnN0IFZhbHVlJiB2YWx1ZSwgY29uc3QgRE9NOjpET01TdHJpbmcmIHN0cik7Cisg
ICAgVmFsdWUgZnJhbWVTZXRHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0
OworICAgIHZvaWQgIGZyYW1lU2V0U2V0dGVyKEV4ZWNTdGF0ZSAqZXhlYywgaW50IHRva2VuLCBj
b25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3RyaW5nJiBzdHIpOworICAgIFZhbHVl
IGZyYW1lR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lk
ICBmcmFtZVNldHRlcihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZh
bHVlLCBjb25zdCBET006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBpRnJhbWVHZXR0ZXIo
RXhlY1N0YXRlKiBleGVjLCBpbnQgdG9rZW4pIGNvbnN0OworICAgIHZvaWQgIGlGcmFtZVNldHRl
cihFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbiwgY29uc3QgVmFsdWUmIHZhbHVlLCBjb25zdCBE
T006OkRPTVN0cmluZyYgc3RyKTsKKyAgICBWYWx1ZSBtYXJxdWVlR2V0dGVyKEV4ZWNTdGF0ZSog
ZXhlYywgaW50IHRva2VuKSBjb25zdDsKKyAgICB2b2lkICBtYXJxdWVlU2V0dGVyKEV4ZWNTdGF0
ZSAqZXhlYywgaW50IHRva2VuLCBjb25zdCBWYWx1ZSYgdmFsdWUsIGNvbnN0IERPTTo6RE9NU3Ry
aW5nJiBzdHIpOworCiAgICAgZW51bSB7IEh0bWxWZXJzaW9uLCBIZWFkUHJvZmlsZSwgTGlua0hy
ZWYsIExpbmtSZWwsIExpbmtNZWRpYSwKICAgICAgICAgICAgTGlua0NoYXJzZXQsIExpbmtEaXNh
YmxlZCwgTGlua0hyZWZMYW5nLCBMaW5rUmV2LCBMaW5rVGFyZ2V0LCBMaW5rVHlwZSwKICAgICAg
ICAgICAgTGlua1NoZWV0LCBUaXRsZVRleHQsIE1ldGFOYW1lLCBNZXRhSHR0cEVxdWl2LCBNZXRh
Q29udGVudCwgTWV0YVNjaGVtZSwKSW5kZXg6IGtodG1sL2VjbWEva2pzX3dpbmRvdy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWNtYS9ranNfd2luZG93
LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNjIKZGlmZiAtdSAtcCAtcjEuMTYyIGtodG1s
L2VjbWEva2pzX3dpbmRvdy5jcHAKLS0tIGtodG1sL2VjbWEva2pzX3dpbmRvdy5jcHAJMyBKdWwg
MjAwNSAxMDo0Nzo1NiAtMDAwMAkxLjE2MgorKysga2h0bWwvZWNtYS9ranNfd2luZG93LmNwcAk5
IEp1bCAyMDA1IDAyOjQyOjQ5IC0wMDAwCkBAIC02OCw3ICs2OCw2IEBACiAjaW5jbHVkZSAiaHRt
bC9odG1sX2RvY3VtZW50aW1wbC5oIgogI2luY2x1ZGUgImNzcy9jc3NfcnVsZWltcGwuaCIKICNp
bmNsdWRlICJjc3MvY3NzX3N0eWxlc2hlZXRpbXBsLmgiCi0jaW5jbHVkZSAibWlzYy9odG1sdGFn
cy5oIgogCiAvLyBNdXN0IGluY2x1ZGUgPGNtYXRoPiBpbnN0ZWFkIG9mIDxtYXRoLmg+IGJlY2F1
c2Ugb2YgYSBidWcgaW4gdGhlCiAvLyBnY2MgMy4zIGxpYnJhcnkgdmVyc2lvbiBvZiA8bWF0aC5o
PiB3aGVyZSBpZiB5b3UgaW5jbHVkZSBib3RoCkluZGV4OiBraHRtbC9lZGl0aW5nL2FwcGx5X3N0
eWxlX2NvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2to
dG1sL2VkaXRpbmcvYXBwbHlfc3R5bGVfY29tbWFuZC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuNApkaWZmIC11IC1wIC1yMS40IGtodG1sL2VkaXRpbmcvYXBwbHlfc3R5bGVfY29tbWFuZC5j
cHAKLS0tIGtodG1sL2VkaXRpbmcvYXBwbHlfc3R5bGVfY29tbWFuZC5jcHAJNSBKdWwgMjAwNSAy
MzoyMTowNyAtMDAwMAkxLjQKKysrIGtodG1sL2VkaXRpbmcvYXBwbHlfc3R5bGVfY29tbWFuZC5j
cHAJOSBKdWwgMjAwNSAwMjo0Mjo1MCAtMDAwMApAQCAtMzMsNyArMzMsNyBAQAogI2luY2x1ZGUg
ImNzcy9jc3Nwcm9wZXJ0aWVzLmgiCiAjaW5jbHVkZSAiZG9tL2RvbV9zdHJpbmcuaCIKICNpbmNs
dWRlICJodG1sL2h0bWxfZWxlbWVudGltcGwuaCIKLSNpbmNsdWRlICJtaXNjL2h0bWx0YWdzLmgi
CisjaW5jbHVkZSAiaHRtbG5hbWVzLmgiCiAjaW5jbHVkZSAibWlzYy9odG1sYXR0cnMuaCIKICNp
bmNsdWRlICJyZW5kZXJpbmcvcmVuZGVyX29iamVjdC5oIgogI2luY2x1ZGUgInhtbC9kb21fZG9j
aW1wbC5oIgpAQCAtNjUsNiArNjUsNyBAQCB1c2luZyBET006Ok5vZGVJbXBsOwogdXNpbmcgRE9N
OjpQb3NpdGlvbjsKIHVzaW5nIERPTTo6UmFuZ2VJbXBsOwogdXNpbmcgRE9NOjpUZXh0SW1wbDsK
K3VzaW5nIERPTTo6SFRNTE5hbWVzOwogCiBuYW1lc3BhY2Uga2h0bWwgewogCkBAIC0yNDksMTIg
KzI1MCwxMiBAQCBib29sIGlzU3R5bGVTcGFuKGNvbnN0IE5vZGVJbXBsICpub2RlKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICBjb25zdCBIVE1MRWxlbWVudEltcGwgKmVsZW0gPSBzdGF0
aWNfY2FzdDxjb25zdCBIVE1MRWxlbWVudEltcGwgKj4obm9kZSk7Ci0gICAgcmV0dXJuIGVsZW0t
PmlkKCkgPT0gSURfU1BBTiAmJiBlbGVtLT5nZXRBdHRyaWJ1dGUoQVRUUl9DTEFTUykgPT0gc3R5
bGVTcGFuQ2xhc3NTdHJpbmcoKTsKKyAgICByZXR1cm4gZWxlbS0+aGFzTG9jYWxOYW1lKEhUTUxO
YW1lczo6c3BhbigpKSAmJiBlbGVtLT5nZXRBdHRyaWJ1dGUoQVRUUl9DTEFTUykgPT0gc3R5bGVT
cGFuQ2xhc3NTdHJpbmcoKTsKIH0KIAogc3RhdGljIGJvb2wgaXNFbXB0eVN0eWxlU3Bhbihjb25z
dCBOb2RlSW1wbCAqbm9kZSkKIHsKLSAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPmlzSFRNTEVsZW1l
bnQoKSB8fCBub2RlLT5pZCgpICE9IElEX1NQQU4pCisgICAgaWYgKCFub2RlIHx8ICFub2RlLT5p
c0hUTUxFbGVtZW50KCkgfHwgIW5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzcGFuKCkpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBjb25zdCBIVE1MRWxlbWVudEltcGwgKmVsZW0g
PSBzdGF0aWNfY2FzdDxjb25zdCBIVE1MRWxlbWVudEltcGwgKj4obm9kZSk7CkBAIC0yNjQsNyAr
MjY1LDcgQEAgc3RhdGljIGJvb2wgaXNFbXB0eVN0eWxlU3Bhbihjb25zdCBOb2RlSQogCiBzdGF0
aWMgYm9vbCBpc0VtcHR5Rm9udFRhZyhjb25zdCBOb2RlSW1wbCAqbm9kZSkKIHsKLSAgICBpZiAo
IW5vZGUgfHwgbm9kZS0+aWQoKSAhPSBJRF9GT05UKQorICAgIGlmICghbm9kZSB8fCAhbm9kZS0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZvbnQoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgIGNvbnN0IEVsZW1lbnRJbXBsICplbGVtID0gc3RhdGljX2Nhc3Q8Y29uc3QgRWxlbWVudElt
cGwgKj4obm9kZSk7CkBAIC0yNzUsNyArMjc2LDcgQEAgc3RhdGljIGJvb2wgaXNFbXB0eUZvbnRU
YWcoY29uc3QgTm9kZUltcAogc3RhdGljIEVsZW1lbnRJbXBsICpjcmVhdGVGb250RWxlbWVudChE
b2N1bWVudEltcGwgKmRvY3VtZW50KQogewogICAgIGludCBleGNlcHRpb25Db2RlID0gMDsKLSAg
ICBFbGVtZW50SW1wbCAqZm9udE5vZGUgPSBkb2N1bWVudC0+Y3JlYXRlSFRNTEVsZW1lbnQoImZv
bnQiLCBleGNlcHRpb25Db2RlKTsKKyAgICBFbGVtZW50SW1wbCAqZm9udE5vZGUgPSBkb2N1bWVu
dC0+Y3JlYXRlRWxlbWVudE5TKEhUTUxOYW1lczo6eGh0bWxOYW1lc3BhY2VVUkkoKSwgImZvbnQi
LCBleGNlcHRpb25Db2RlKTsKICAgICBBU1NFUlQoZXhjZXB0aW9uQ29kZSA9PSAwKTsKICAgICBm
b250Tm9kZS0+c2V0QXR0cmlidXRlKEFUVFJfQ0xBU1MsIHN0eWxlU3BhbkNsYXNzU3RyaW5nKCkp
OwogICAgIHJldHVybiBmb250Tm9kZTsKQEAgLTI4NCw3ICsyODUsNyBAQCBzdGF0aWMgRWxlbWVu
dEltcGwgKmNyZWF0ZUZvbnRFbGVtZW50KERvCiBFbGVtZW50SW1wbCAqY3JlYXRlU3R5bGVTcGFu
RWxlbWVudChEb2N1bWVudEltcGwgKmRvY3VtZW50KQogewogICAgIGludCBleGNlcHRpb25Db2Rl
ID0gMDsKLSAgICBFbGVtZW50SW1wbCAqc3R5bGVFbGVtZW50ID0gZG9jdW1lbnQtPmNyZWF0ZUhU
TUxFbGVtZW50KCJTUEFOIiwgZXhjZXB0aW9uQ29kZSk7CisgICAgRWxlbWVudEltcGwgKnN0eWxl
RWxlbWVudCA9IGRvY3VtZW50LT5jcmVhdGVFbGVtZW50TlMoSFRNTE5hbWVzOjp4aHRtbE5hbWVz
cGFjZVVSSSgpLCAic3BhbiIsIGV4Y2VwdGlvbkNvZGUpOwogICAgIEFTU0VSVChleGNlcHRpb25D
b2RlID09IDApOwogICAgIHN0eWxlRWxlbWVudC0+c2V0QXR0cmlidXRlKEFUVFJfQ0xBU1MsIHN0
eWxlU3BhbkNsYXNzU3RyaW5nKCkpOwogICAgIHJldHVybiBzdHlsZUVsZW1lbnQ7CkBAIC01ODYs
NyArNTg3LDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJbmxpbmVTdHlsZQogICAg
ICAgICAgICAgICAgICAgICAvLyB0aGUgY3VycmVudCBncm91cC4KICAgICAgICAgICAgICAgICAg
ICAgaWYgKG5vZGUgPT0gZW5kLm5vZGUoKSB8fCAKICAgICAgICAgICAgICAgICAgICAgICAgIHJ1
blN0YXJ0LT5wYXJlbnROb2RlKCkgIT0gbmV4dC0+cGFyZW50Tm9kZSgpIHx8IAotICAgICAgICAg
ICAgICAgICAgICAgICAgKG5leHQtPmlzSFRNTEVsZW1lbnQoKSAmJiBuZXh0LT5pZCgpICE9IElE
X0JSKSB8fCAKKyAgICAgICAgICAgICAgICAgICAgICAgIChuZXh0LT5pc0VsZW1lbnROb2RlKCkg
JiYgIW5leHQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpicigpKSkgfHwgCiAgICAgICAgICAgICAg
ICAgICAgICAgICAobmV4dC0+cmVuZGVyZXIoKSAmJiAhbmV4dC0+cmVuZGVyZXIoKS0+aXNJbmxp
bmUoKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAg
ICAgbm9kZSA9IG5leHQ7CkBAIC02MTEsMTEgKzYxMiwxMSBAQCBib29sIEFwcGx5U3R5bGVDb21t
YW5kOjppc0hUTUxTdHlsZU5vZGUoCiAgICAgZm9yIChRVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxD
U1NQcm9wZXJ0eT4gaXQgPSBzdHlsZS0+dmFsdWVzSXRlcmF0b3IoKTsgaXQgIT0gZW5kOyArK2l0
KSB7CiAgICAgICAgIHN3aXRjaCAoKCppdCkuaWQoKSkgewogICAgICAgICAgICAgY2FzZSBDU1Nf
UFJPUF9GT05UX1dFSUdIVDoKLSAgICAgICAgICAgICAgICBpZiAoZWxlbS0+aWQoKSA9PSBJRF9C
KQorICAgICAgICAgICAgICAgIGlmIChlbGVtLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpiKCkp
KQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIGNhc2UgQ1NTX1BST1BfRk9OVF9TVFlMRToKLSAgICAgICAgICAgICAg
ICBpZiAoZWxlbS0+aWQoKSA9PSBJRF9JKQorICAgICAgICAgICAgICAgIGlmIChlbGVtLT5oYXNM
b2NhbE5hbWUoSFRNTE5hbWVzOjppKCkpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgfQogICAgIH0KQEAgLTYzOCw3ICs2MzksNyBAQCB2b2lkIEFwcGx5U3R5bGVD
b21tYW5kOjpyZW1vdmVIVE1MRm9udFN0CiAgICAgQVNTRVJUKHN0eWxlKTsKICAgICBBU1NFUlQo
ZWxlbSk7CiAKLSAgICBpZiAoZWxlbS0+aWQoKSAhPSBJRF9GT05UKQorICAgIGlmICghZWxlbS0+
aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6Zm9udCgpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
aW50IGV4Y2VwdGlvbkNvZGUgPSAwOwpAQCAtMTA0Nyw3ICsxMDQ4LDcgQEAgc3RhdGljIGJvb2wg
YXJlSWRlbnRpY2FsRWxlbWVudHMoTm9kZUltcAogICAgIEVsZW1lbnRJbXBsICpmaXJzdEVsZW1l
bnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50SW1wbCAqPihmaXJzdCk7CiAgICAgRWxlbWVudEltcGwg
KnNlY29uZEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50SW1wbCAqPihzZWNvbmQpOwogICAg
IAotICAgIGlmIChmaXJzdEVsZW1lbnQtPmlkKCkgIT0gc2Vjb25kRWxlbWVudC0+aWQoKSkKKyAg
ICBpZiAoIWZpcnN0RWxlbWVudC0+dGFnTmFtZSgpLm1hdGNoZXMoc2Vjb25kRWxlbWVudC0+dGFn
TmFtZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgTmFtZWRBdHRyTWFwSW1wbCAq
Zmlyc3RNYXAgPSBmaXJzdEVsZW1lbnQtPmF0dHJpYnV0ZXMoKTsKQEAgLTExMjksNyArMTEzMCw3
IEBAIGJvb2wgQXBwbHlTdHlsZUNvbW1hbmQ6Om1lcmdlRW5kV2l0aE5leHQKICAgICAgICAgZW5k
T2Zmc2V0ID0gcGFyZW50TGFzdE9mZnNldDsKICAgICB9CiAKLSAgICBpZiAoIWVuZE5vZGUtPmlz
RWxlbWVudE5vZGUoKSB8fCBlbmROb2RlLT5pZCgpID09IElEX0JSKQorICAgIGlmICghZW5kTm9k
ZS0+aXNFbGVtZW50Tm9kZSgpIHx8IGVuZE5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpicigp
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgTm9kZUltcGwgKm5leHRTaWJsaW5nID0g
ZW5kTm9kZS0+bmV4dFNpYmxpbmcoKTsKQEAgLTEyNzQsMTQgKzEyNzUsMTQgQEAgdm9pZCBBcHBs
eVN0eWxlQ29tbWFuZDo6YWRkSW5saW5lU3R5bGVJZgogICAgIH0KIAogICAgIGlmIChzdHlsZUNo
YW5nZS5hcHBseUJvbGQoKSkgewotICAgICAgICBFbGVtZW50SW1wbCAqYm9sZEVsZW1lbnQgPSBk
b2N1bWVudCgpLT5jcmVhdGVIVE1MRWxlbWVudCgiQiIsIGV4Y2VwdGlvbkNvZGUpOworICAgICAg
ICBFbGVtZW50SW1wbCAqYm9sZEVsZW1lbnQgPSBkb2N1bWVudCgpLT5jcmVhdGVFbGVtZW50TlMo
SFRNTE5hbWVzOjp4aHRtbE5hbWVzcGFjZVVSSSgpLCAiYiIsIGV4Y2VwdGlvbkNvZGUpOwogICAg
ICAgICBBU1NFUlQoZXhjZXB0aW9uQ29kZSA9PSAwKTsKICAgICAgICAgaW5zZXJ0Tm9kZUJlZm9y
ZShib2xkRWxlbWVudCwgc3RhcnROb2RlKTsKICAgICAgICAgc3Vycm91bmROb2RlUmFuZ2VXaXRo
RWxlbWVudChzdGFydE5vZGUsIGVuZE5vZGUsIGJvbGRFbGVtZW50KTsKICAgICB9CiAKICAgICBp
ZiAoc3R5bGVDaGFuZ2UuYXBwbHlJdGFsaWMoKSkgewotICAgICAgICBFbGVtZW50SW1wbCAqaXRh
bGljRWxlbWVudCA9IGRvY3VtZW50KCktPmNyZWF0ZUhUTUxFbGVtZW50KCJJIiwgZXhjZXB0aW9u
Q29kZSk7CisgICAgICAgIEVsZW1lbnRJbXBsICppdGFsaWNFbGVtZW50ID0gZG9jdW1lbnQoKS0+
Y3JlYXRlRWxlbWVudE5TKEhUTUxOYW1lczo6eGh0bWxOYW1lc3BhY2VVUkkoKSwgImkiLCBleGNl
cHRpb25Db2RlKTsKICAgICAgICAgQVNTRVJUKGV4Y2VwdGlvbkNvZGUgPT0gMCk7CiAgICAgICAg
IGluc2VydE5vZGVCZWZvcmUoaXRhbGljRWxlbWVudCwgc3RhcnROb2RlKTsKICAgICAgICAgc3Vy
cm91bmROb2RlUmFuZ2VXaXRoRWxlbWVudChzdGFydE5vZGUsIGVuZE5vZGUsIGl0YWxpY0VsZW1l
bnQpOwpJbmRleDoga2h0bWwvZWRpdGluZy9icmVha19ibG9ja3F1b3RlX2NvbW1hbmQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VkaXRpbmcvYnJlYWtf
YmxvY2txdW90ZV9jb21tYW5kLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXUg
LXAgLXIxLjEga2h0bWwvZWRpdGluZy9icmVha19ibG9ja3F1b3RlX2NvbW1hbmQuY3BwCi0tLSBr
aHRtbC9lZGl0aW5nL2JyZWFrX2Jsb2NrcXVvdGVfY29tbWFuZC5jcHAJMjQgTWF5IDIwMDUgMDc6
MjE6NDcgLTAwMDAJMS4xCisrKyBraHRtbC9lZGl0aW5nL2JyZWFrX2Jsb2NrcXVvdGVfY29tbWFu
ZC5jcHAJOSBKdWwgMjAwNSAwMjo0Mjo1MSAtMDAwMApAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1
ZGUgImh0bWxlZGl0aW5nLmgiCiAjaW5jbHVkZSAidmlzaWJsZV9wb3NpdGlvbi5oIgogCi0jaW5j
bHVkZSAibWlzYy9odG1sdGFncy5oIgorI2luY2x1ZGUgImh0bWxuYW1lcy5oIgogI2luY2x1ZGUg
InhtbC9kb21fZWxlbWVudGltcGwuaCIKICNpbmNsdWRlICJ4bWwvZG9tX3RleHRpbXBsLmgiCiAK
QEAgLTQzLDYgKzQzLDcgQEAgdXNpbmcgRE9NOjpFbGVtZW50SW1wbDsKIHVzaW5nIERPTTo6Tm9k
ZUltcGw7CiB1c2luZyBET006OlBvc2l0aW9uOwogdXNpbmcgRE9NOjpUZXh0SW1wbDsKK3VzaW5n
IERPTTo6SFRNTE5hbWVzOwogCiBuYW1lc3BhY2Uga2h0bWwgewogCkBAIC0xNDYsNyArMTQ3LDcg
QEAgdm9pZCBCcmVha0Jsb2NrcXVvdGVDb21tYW5kOjpkb0FwcGx5KCkKICAgICAgICAgYm9vbCBz
dGFydElzQlIgPSBmYWxzZTsKICAgICAgICAgaWYgKHN0YXJ0Tm9kZSAhPSB0b3BCbG9ja3F1b3Rl
KSB7CiAgICAgICAgICAgICBOb2RlSW1wbCAqbiA9IHN0YXJ0Tm9kZTsKLSAgICAgICAgICAgIHN0
YXJ0SXNCUiA9IG4tPmlkKCkgPT0gSURfQlI7CisgICAgICAgICAgICBzdGFydElzQlIgPSBuLT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6YnIoKSk7CiAgICAgICAgICAgICBpZiAoc3RhcnRJc0JSKQog
ICAgICAgICAgICAgICAgIG4gPSBuLT5uZXh0U2libGluZygpOwogICAgICAgICAgICAgd2hpbGUg
KG4pIHsKSW5kZXg6IGtodG1sL2VkaXRpbmcvY29tcG9zaXRlX2VkaXRfY29tbWFuZC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWRpdGluZy9jb21wb3Np
dGVfZWRpdF9jb21tYW5kLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zCmRpZmYgLXUgLXAg
LXIxLjMga2h0bWwvZWRpdGluZy9jb21wb3NpdGVfZWRpdF9jb21tYW5kLmNwcAotLS0ga2h0bWwv
ZWRpdGluZy9jb21wb3NpdGVfZWRpdF9jb21tYW5kLmNwcAkyNCBNYXkgMjAwNSAwNzoyMTo0NyAt
MDAwMAkxLjMKKysrIGtodG1sL2VkaXRpbmcvY29tcG9zaXRlX2VkaXRfY29tbWFuZC5jcHAJOSBK
dWwgMjAwNSAwMjo0Mjo1MSAtMDAwMApAQCAtNDcsNyArNDcsNyBAQAogI2luY2x1ZGUgIndyYXBf
Y29udGVudHNfaW5fZHVtbXlfc3Bhbl9jb21tYW5kLmgiCiAKICNpbmNsdWRlICJtaXNjL2h0bWxh
dHRycy5oIgotI2luY2x1ZGUgIm1pc2MvaHRtbHRhZ3MuaCIKKyNpbmNsdWRlICJodG1sbmFtZXMu
aCIKICNpbmNsdWRlICJyZW5kZXJpbmcvcmVuZGVyX3RleHQuaCIKICNpbmNsdWRlICJ4bWwvZG9t
Ml9yYW5nZWltcGwuaCIKICNpbmNsdWRlICJ4bWwvZG9tX3RleHRpbXBsLmgiCkBAIC02Nyw2ICs2
Nyw3IEBAIHVzaW5nIERPTTo6Tm9kZUltcGw7CiB1c2luZyBET006OlBvc2l0aW9uOwogdXNpbmcg
RE9NOjpSYW5nZUltcGw7CiB1c2luZyBET006OlRleHRJbXBsOwordXNpbmcgRE9NOjpIVE1MTmFt
ZXM7CiAKIG5hbWVzcGFjZSBraHRtbCB7CiAKQEAgLTEyNywxNCArMTI4LDE0IEBAIHZvaWQgQ29t
cG9zaXRlRWRpdENvbW1hbmQ6Omluc2VydFBhcmFncmEKIAogdm9pZCBDb21wb3NpdGVFZGl0Q29t
bWFuZDo6aW5zZXJ0Tm9kZUJlZm9yZShOb2RlSW1wbCAqaW5zZXJ0Q2hpbGQsIE5vZGVJbXBsICpy
ZWZDaGlsZCkKIHsKLSAgICBBU1NFUlQocmVmQ2hpbGQtPmlkKCkgIT0gSURfQk9EWSk7CisgICAg
QVNTRVJUKCFyZWZDaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJvZHkoKSkpOwogICAgIEVk
aXRDb21tYW5kUHRyIGNtZChuZXcgSW5zZXJ0Tm9kZUJlZm9yZUNvbW1hbmQoZG9jdW1lbnQoKSwg
aW5zZXJ0Q2hpbGQsIHJlZkNoaWxkKSk7CiAgICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoY21k
KTsKIH0KIAogdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6aW5zZXJ0Tm9kZUFmdGVyKE5vZGVJ
bXBsICppbnNlcnRDaGlsZCwgTm9kZUltcGwgKnJlZkNoaWxkKQogewotICAgIEFTU0VSVChyZWZD
aGlsZC0+aWQoKSAhPSBJRF9CT0RZKTsKKyAgICBBU1NFUlQoIXJlZkNoaWxkLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6Ym9keSgpKSk7CiAgICAgaWYgKHJlZkNoaWxkLT5wYXJlbnROb2RlKCktPmxh
c3RDaGlsZCgpID09IHJlZkNoaWxkKSB7CiAgICAgICAgIGFwcGVuZE5vZGUoaW5zZXJ0Q2hpbGQs
IHJlZkNoaWxkLT5wYXJlbnROb2RlKCkpOwogICAgIH0KQEAgLTU0NSw3ICs1NDYsNyBAQCB2b2lk
IENvbXBvc2l0ZUVkaXRDb21tYW5kOjptb3ZlUGFyYWdyYXBoCiAgICAgLy8gICAgICAgYWRkaXRp
b25hbCBsZXZlbCBvZiBxdW90aW5nLgogICAgIE5vZGVJbXBsICpzdGFydEJsb2NrID0gcGFyYWdy
YXBoU3RhcnQubm9kZSgpLT5lbmNsb3NpbmdCbG9ja0Zsb3dFbGVtZW50KCk7CiAgICAgTm9kZUlt
cGwgKm5ld0Jsb2NrID0gMDsKLSAgICBpZiAoc3RhcnRCbG9jay0+aWQoKSA9PSBJRF9CT0RZIHx8
IChpc01haWxCbG9ja3F1b3RlKHN0YXJ0QmxvY2spICYmIHBhcmFncmFwaFN0YXJ0Lm5vZGUoKSAh
PSBzdGFydEJsb2NrKSkKKyAgICBpZiAoc3RhcnRCbG9jay0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
OmJvZHkoKSkgfHwgKGlzTWFpbEJsb2NrcXVvdGUoc3RhcnRCbG9jaykgJiYgcGFyYWdyYXBoU3Rh
cnQubm9kZSgpICE9IHN0YXJ0QmxvY2spKQogICAgICAgICBuZXdCbG9jayA9IGNyZWF0ZURlZmF1
bHRQYXJhZ3JhcGhFbGVtZW50KGRvY3VtZW50KCkpOwogICAgIGVsc2UKICAgICAgICAgbmV3Qmxv
Y2sgPSBzdGFydEJsb2NrLT5jbG9uZU5vZGUoZmFsc2UpOwpAQCAtNTU1LDEwICs1NTYsMTAgQEAg
dm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6bW92ZVBhcmFncmFwaAogICAgICAgICBtb3ZlTm9k
ZSA9IG1vdmVOb2RlLT50cmF2ZXJzZU5leHROb2RlKCk7CiAgICAgTm9kZUltcGwgKmVuZE5vZGUg
PSBwYXJhZ3JhcGhFbmQubm9kZSgpOwogCi0gICAgaWYgKHBhcmFncmFwaFN0YXJ0Lm5vZGUoKS0+
aWQoKSA9PSBJRF9CT0RZKSB7CisgICAgaWYgKHBhcmFncmFwaFN0YXJ0Lm5vZGUoKS0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OmJvZHkoKSkpIHsKICAgICAgICAgaW5zZXJ0Tm9kZUF0KG5ld0Jsb2Nr
LCBwYXJhZ3JhcGhTdGFydC5ub2RlKCksIDApOwogICAgIH0KLSAgICBlbHNlIGlmIChwYXJhZ3Jh
cGhTdGFydC5ub2RlKCktPmlkKCkgPT0gSURfQlIpIHsKKyAgICBlbHNlIGlmIChwYXJhZ3JhcGhT
dGFydC5ub2RlKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpicigpKSkgewogICAgICAgICBpbnNl
cnROb2RlQWZ0ZXIobmV3QmxvY2ssIHBhcmFncmFwaFN0YXJ0Lm5vZGUoKSk7CiAgICAgfQogICAg
IGVsc2UgewpAQCAtNTc4LDcgKzU3OSw3IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6Om1v
dmVQYXJhZ3JhcGgKIEVsZW1lbnRJbXBsICpjcmVhdGVCbG9ja1BsYWNlaG9sZGVyRWxlbWVudChE
b2N1bWVudEltcGwgKmRvY3VtZW50KQogewogICAgIGludCBleGNlcHRpb25Db2RlID0gMDsKLSAg
ICBFbGVtZW50SW1wbCAqYnJlYWtOb2RlID0gZG9jdW1lbnQtPmNyZWF0ZUhUTUxFbGVtZW50KCJi
ciIsIGV4Y2VwdGlvbkNvZGUpOworICAgIEVsZW1lbnRJbXBsICpicmVha05vZGUgPSBkb2N1bWVu
dC0+Y3JlYXRlRWxlbWVudE5TKEhUTUxOYW1lczo6eGh0bWxOYW1lc3BhY2VVUkkoKSwgImJyIiwg
ZXhjZXB0aW9uQ29kZSk7CiAgICAgQVNTRVJUKGV4Y2VwdGlvbkNvZGUgPT0gMCk7CiAgICAgYnJl
YWtOb2RlLT5zZXRBdHRyaWJ1dGUoQVRUUl9DTEFTUywgYmxvY2tQbGFjZWhvbGRlckNsYXNzU3Ry
aW5nKCkpOwogICAgIHJldHVybiBicmVha05vZGU7CkluZGV4OiBraHRtbC9lZGl0aW5nL2RlbGV0
ZV9zZWxlY3Rpb25fY29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dl
YkNvcmUva2h0bWwvZWRpdGluZy9kZWxldGVfc2VsZWN0aW9uX2NvbW1hbmQuY3BwLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjQKZGlmZiAtdSAtcCAtcjEuNCBraHRtbC9lZGl0aW5nL2RlbGV0ZV9z
ZWxlY3Rpb25fY29tbWFuZC5jcHAKLS0tIGtodG1sL2VkaXRpbmcvZGVsZXRlX3NlbGVjdGlvbl9j
b21tYW5kLmNwcAk1IEp1bCAyMDA1IDIzOjIxOjA3IC0wMDAwCTEuNAorKysga2h0bWwvZWRpdGlu
Zy9kZWxldGVfc2VsZWN0aW9uX2NvbW1hbmQuY3BwCTkgSnVsIDIwMDUgMDI6NDI6NTIgLTAwMDAK
QEAgLTI4LDcgKzI4LDcgQEAKICNpbmNsdWRlICJjc3MvY3NzX2NvbXB1dGVkc3R5bGUuaCIKICNp
bmNsdWRlICJodG1sZWRpdGluZy5oIgogI2luY2x1ZGUgImtodG1sX3BhcnQuaCIKLSNpbmNsdWRl
ICJtaXNjL2h0bWx0YWdzLmgiCisjaW5jbHVkZSAiaHRtbG5hbWVzLmgiCiAjaW5jbHVkZSAicmVu
ZGVyaW5nL3JlbmRlcl9saW5lLmgiCiAjaW5jbHVkZSAicmVuZGVyaW5nL3JlbmRlcl9vYmplY3Qu
aCIKICNpbmNsdWRlICJ2aXNpYmxlX3RleHQuaCIKQEAgLTUzLDYgKzUzLDcgQEAgdXNpbmcgRE9N
OjpOb2RlSW1wbDsKIHVzaW5nIERPTTo6UG9zaXRpb247CiB1c2luZyBET006OlJhbmdlSW1wbDsK
IHVzaW5nIERPTTo6VGV4dEltcGw7Cit1c2luZyBET006OkhUTUxOYW1lczsKIAogbmFtZXNwYWNl
IGtodG1sIHsKIApAQCAtNjEsOSArNjIsMTMgQEAgc3RhdGljIGJvb2wgaXNMaXN0U3RydWN0dXJl
Tm9kZShjb25zdCBObwogICAgIC8vIEZJWE1FOiBJcnJpdGF0aW5nIHRoYXQgd2UgY2FuIGdldCBh
d2F5IHdpdGgganVzdCBnb2luZyBhdCB0aGUgcmVuZGVyIHRyZWUgZm9yIGlzVGFibGVTdHJ1Y3R1
cmVOb2RlLAogICAgIC8vIGJ1dCBoZXJlIHdlIGFsc28gaGF2ZSB0byBwZWVrIGF0IHRoZSB0eXBl
IG9mIERPTSBub2RlPwogICAgIFJlbmRlck9iamVjdCAqciA9IG5vZGUtPnJlbmRlcmVyKCk7Ci0g
ICAgTm9kZUltcGw6OklkIG5vZGVJRCA9IG5vZGUtPmlkKCk7CiAgICAgcmV0dXJuIChyICYmIHIt
PmlzTGlzdEl0ZW0oKSkKLSAgICAgICAgfHwgKG5vZGVJRCA9PSBJRF9PTCB8fCBub2RlSUQgPT0g
SURfVUwgfHwgbm9kZUlEID09IElEX0REIHx8IG5vZGVJRCA9PSBJRF9EVCB8fCBub2RlSUQgPT0g
SURfRElSIHx8IG5vZGVJRCA9PSBJRF9NRU5VKTsKKyAgICAgICAgfHwgbm9kZS0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6Om9sKCkpCisgICAgICAgIHx8IG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVz
Ojp1bCgpKQorICAgICAgICB8fCBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZGQoKSkKKyAg
ICAgICAgfHwgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmR0KCkpCisgICAgICAgIHx8IG5v
ZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpkaXIoKSkKKyAgICAgICAgfHwgbm9kZS0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6Om1lbnUoKSk7CiB9CiAKIHN0YXRpYyBpbnQgbWF4RGVlcE9mZnNldChO
b2RlSW1wbCAqbikKQEAgLTI3Nyw4ICsyODIsOCBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1h
bmQ6OnNhdmVUeXBpbmdTCiBib29sIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmhhbmRsZVNwZWNp
YWxDYXNlQlJEZWxldGUoKQogewogICAgIC8vIENoZWNrIGZvciBzcGVjaWFsLWNhc2Ugd2hlcmUg
dGhlIHNlbGVjdGlvbiBjb250YWlucyBvbmx5IGEgQlIgb24gYSBsaW5lIGJ5IGl0c2VsZiBhZnRl
ciBhbm90aGVyIEJSLgotICAgIGJvb2wgdXBzdHJlYW1TdGFydElzQlIgPSBtX3N0YXJ0Tm9kZS0+
aWQoKSA9PSBJRF9CUjsKLSAgICBib29sIGRvd25zdHJlYW1TdGFydElzQlIgPSBtX2Rvd25zdHJl
YW1TdGFydC5ub2RlKCktPmlkKCkgPT0gSURfQlI7CisgICAgYm9vbCB1cHN0cmVhbVN0YXJ0SXNC
UiA9IG1fc3RhcnROb2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YnIoKSk7CisgICAgYm9vbCBk
b3duc3RyZWFtU3RhcnRJc0JSID0gbV9kb3duc3RyZWFtU3RhcnQubm9kZSgpLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6YnIoKSk7CiAgICAgYm9vbCBpc0JST25MaW5lQnlJdHNlbGYgPSB1cHN0cmVh
bVN0YXJ0SXNCUiAmJiBkb3duc3RyZWFtU3RhcnRJc0JSICYmIG1fZG93bnN0cmVhbVN0YXJ0Lm5v
ZGUoKSA9PSBtX3Vwc3RyZWFtRW5kLm5vZGUoKTsKICAgICBpZiAoaXNCUk9uTGluZUJ5SXRzZWxm
KSB7CiAgICAgICAgIHJlbW92ZU5vZGUobV9kb3duc3RyZWFtU3RhcnQubm9kZSgpKTsKQEAgLTMy
NiwxMSArMzMxLDExIEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6aGFuZGxlR2VuZXIK
ICAgICAvLyBlbmQgb2YgYSBibG9jayBvdGhlciB0aGFuIHRoZSBibG9jayBjb250YWluaW5nIHRo
ZSBzZWxlY3Rpb24gc3RhcnQsIHRoZW4gZG8gbm90IGRlbGV0ZSB0aGUgCiAgICAgLy8gc3RhcnQg
YmxvY2ssIG90aGVyd2lzZSBkZWxldGUgdGhlIHN0YXJ0IGJsb2NrLgogICAgIC8vIEEgc2ltaWxh
ciBjYXNlIGlzIHByb3ZpZGVkIHRvIGNvdmVyIHNlbGVjdGlvbnMgc3RhcnRpbmcgaW4gQlIgZWxl
bWVudHMuCi0gICAgaWYgKHN0YXJ0T2Zmc2V0ID09IDEgJiYgbV9zdGFydE5vZGUgJiYgbV9zdGFy
dE5vZGUtPmlkKCkgPT0gSURfQlIpIHsKKyAgICBpZiAoc3RhcnRPZmZzZXQgPT0gMSAmJiBtX3N0
YXJ0Tm9kZSAmJiBtX3N0YXJ0Tm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJyKCkpKSB7CiAg
ICAgICAgIHNldFN0YXJ0Tm9kZShtX3N0YXJ0Tm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpKTsKICAg
ICAgICAgc3RhcnRPZmZzZXQgPSAwOwogICAgIH0KLSAgICBpZiAobV9zdGFydEJsb2NrICE9IG1f
ZW5kQmxvY2sgJiYgc3RhcnRPZmZzZXQgPT0gMCAmJiBtX3N0YXJ0Tm9kZSAmJiBtX3N0YXJ0Tm9k
ZS0+aWQoKSA9PSBJRF9CUiAmJiBlbmRBdEVuZE9mQmxvY2spIHsKKyAgICBpZiAobV9zdGFydEJs
b2NrICE9IG1fZW5kQmxvY2sgJiYgc3RhcnRPZmZzZXQgPT0gMCAmJiBtX3N0YXJ0Tm9kZSAmJiBt
X3N0YXJ0Tm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJyKCkpICYmIGVuZEF0RW5kT2ZCbG9j
aykgewogICAgICAgICAvLyBEb24ndCBkZWxldGUgdGhlIEJSIGVsZW1lbnQKICAgICAgICAgc2V0
U3RhcnROb2RlKG1fc3RhcnROb2RlLT50cmF2ZXJzZU5leHROb2RlKCkpOwogICAgIH0KQEAgLTU1
Miw3ICs1NTcsNyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6Om1vdmVOb2Rlc0FmCiAg
ICAgICAgIE5vZGVJbXBsICptb3ZlTm9kZSA9IG5vZGU7CiAgICAgICAgIG5vZGUgPSBub2RlLT5u
ZXh0U2libGluZygpOwogICAgICAgICByZW1vdmVOb2RlKG1vdmVOb2RlKTsKLSAgICAgICAgaWYg
KG1vdmVOb2RlLT5pZCgpID09IElEX0JSICYmICFtb3ZlTm9kZS0+cmVuZGVyZXIoKSkgeworICAg
ICAgICBpZiAobW92ZU5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpicigpKSAmJiAhbW92ZU5v
ZGUtPnJlbmRlcmVyKCkpIHsKICAgICAgICAgICAgIC8vIEp1c3QgcmVtb3ZlIHRoaXMgbm9kZSwg
YW5kIGRvbid0IHB1dCBpdCBiYWNrLgogICAgICAgICAgICAgLy8gSWYgdGhlIEJSIHdhcyBub3Qg
cmVuZGVyZWQgKHNpbmNlIGl0IHdhcyBhdCB0aGUgZW5kIG9mIGEgYmxvY2ssIGZvciBpbnN0YW5j
ZSksIAogICAgICAgICAgICAgLy8gcHV0dGluZyBpdCBiYWNrIGluIHRoZSBkb2N1bWVudCBtaWdo
dCBtYWtlIGl0IGFwcGVhciwgYW5kIHRoYXQgaXMgbm90IGRlc2lyYWJsZS4KQEAgLTU2Myw3ICs1
NjgsNyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6Om1vdmVOb2Rlc0FmCiAgICAgICAg
IGVsc2UKICAgICAgICAgICAgIGluc2VydE5vZGVBZnRlcihtb3ZlTm9kZSwgcmVmTm9kZSk7CiAg
ICAgICAgIHJlZk5vZGUgPSBtb3ZlTm9kZTsKLSAgICAgICAgaWYgKG1vdmVOb2RlLT5pZCgpID09
IElEX0JSKQorICAgICAgICBpZiAobW92ZU5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpicigp
KSkKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KIApJbmRleDoga2h0bWwvZWRpdGluZy9odG1s
ZWRpdGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwv
ZWRpdGluZy9odG1sZWRpdGluZy5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjQ5CmRpZmYg
LXUgLXAgLXIxLjI0OSBraHRtbC9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAotLS0ga2h0bWwvZWRp
dGluZy9odG1sZWRpdGluZy5jcHAJNSBKdWwgMjAwNSAyMzoyMTowOCAtMDAwMAkxLjI0OQorKysg
a2h0bWwvZWRpdGluZy9odG1sZWRpdGluZy5jcHAJOSBKdWwgMjAwNSAwMjo0Mjo1MiAtMDAwMApA
QCAtNDIsNyArNDIsNyBAQAogI2luY2x1ZGUgImh0bWxfaW1hZ2VpbXBsLmgiCiAjaW5jbHVkZSAi
aHRtbF9pbnRlcmNoYW5nZS5oIgogI2luY2x1ZGUgImh0bWxhdHRycy5oIgotI2luY2x1ZGUgImh0
bWx0YWdzLmgiCisjaW5jbHVkZSAiaHRtbG5hbWVzLmgiCiAjaW5jbHVkZSAia2h0bWxfcGFydC5o
IgogI2luY2x1ZGUgImtodG1sX3BhcnQuaCIKICNpbmNsdWRlICJraHRtbHZpZXcuaCIKQEAgLTgx
LDYgKzgxLDcgQEAgdXNpbmcgRE9NOjpQb3NpdGlvbjsKIHVzaW5nIERPTTo6UmFuZ2VJbXBsOwog
dXNpbmcgRE9NOjpUZXh0SW1wbDsKIHVzaW5nIERPTTo6VHJlZVdhbGtlckltcGw7Cit1c2luZyBE
T006OkhUTUxOYW1lczsKIAogI2lmIEFQUExFX0NIQU5HRVMKICNpbmNsdWRlICJLV1FBc3NlcnRp
b25zLmgiCkBAIC0xMzEsMTAgKzEzMiwxMCBAQCBib29sIGlzU3BlY2lhbEVsZW1lbnQoTm9kZUlt
cGwgKm4pCiAgICAgaWYgKCFuLT5pc0hUTUxFbGVtZW50KCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIGlmIChuLT5pZCgpID09IElEX0EgJiYgbi0+aXNMaW5rKCkpCisgICAgaWYgKG4t
PmlzTGluaygpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGlmIChuLT5pZCgpID09IElE
X1VMIHx8IG4tPmlkKCkgPT0gSURfT0wgfHwgbi0+aWQoKSA9PSBJRF9ETCkKKyAgICBpZiAobi0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OnVsKCkpIHx8IG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpv
bCgpKSB8fCBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZGwoKSkpCiAgICAgICAgIHJldHVybiB0
cnVlOwogCiAgICAgUmVuZGVyT2JqZWN0ICpyZW5kZXJlciA9IG4tPnJlbmRlcmVyKCk7CkBAIC0y
NjcsNyArMjY4LDcgQEAgRWxlbWVudEltcGwgKmNyZWF0ZURlZmF1bHRQYXJhZ3JhcGhFbGVtZQog
ICAgIC8vIFdlIHdvdWxkIG5lZWQgdGhpcyBtYXJnaW4temVyb2luZyBjb2RlIGJhY2sgaWYgd2Ug
ZXZlciByZXR1cm4gdG8gdXNpbmcgPHA+IGVsZW1lbnRzIGZvciBkZWZhdWx0IHBhcmFncmFwaHMu
CiAgICAgLy8gc3RhdGljIGNvbnN0IERPTVN0cmluZyBkZWZhdWx0UGFyYWdyYXBoU3R5bGUoIm1h
cmdpbi10b3A6IDA7IG1hcmdpbi1ib3R0b206IDAiKTsgICAgCiAgICAgaW50IGV4Y2VwdGlvbkNv
ZGUgPSAwOwotICAgIEVsZW1lbnRJbXBsICplbGVtZW50ID0gZG9jdW1lbnQtPmNyZWF0ZUhUTUxF
bGVtZW50KCJkaXYiLCBleGNlcHRpb25Db2RlKTsKKyAgICBFbGVtZW50SW1wbCAqZWxlbWVudCA9
IGRvY3VtZW50LT5jcmVhdGVFbGVtZW50TlMoSFRNTE5hbWVzOjp4aHRtbE5hbWVzcGFjZVVSSSgp
LCAiZGl2IiwgZXhjZXB0aW9uQ29kZSk7CiAgICAgQVNTRVJUKGV4Y2VwdGlvbkNvZGUgPT0gMCk7
CiAgICAgcmV0dXJuIGVsZW1lbnQ7CiB9CkBAIC0yNzUsNyArMjc2LDcgQEAgRWxlbWVudEltcGwg
KmNyZWF0ZURlZmF1bHRQYXJhZ3JhcGhFbGVtZQogRWxlbWVudEltcGwgKmNyZWF0ZUJyZWFrRWxl
bWVudChEb2N1bWVudEltcGwgKmRvY3VtZW50KQogewogICAgIGludCBleGNlcHRpb25Db2RlID0g
MDsKLSAgICBFbGVtZW50SW1wbCAqYnJlYWtOb2RlID0gZG9jdW1lbnQtPmNyZWF0ZUhUTUxFbGVt
ZW50KCJiciIsIGV4Y2VwdGlvbkNvZGUpOworICAgIEVsZW1lbnRJbXBsICpicmVha05vZGUgPSBk
b2N1bWVudC0+Y3JlYXRlRWxlbWVudE5TKEhUTUxOYW1lczo6eGh0bWxOYW1lc3BhY2VVUkkoKSwg
ImJyIiwgZXhjZXB0aW9uQ29kZSk7CiAgICAgQVNTRVJUKGV4Y2VwdGlvbkNvZGUgPT0gMCk7CiAg
ICAgcmV0dXJuIGJyZWFrTm9kZTsKIH0KQEAgLTMwMyw3ICszMDQsNyBAQCBOb2RlSW1wbCAqbmVh
cmVzdE1haWxCbG9ja3F1b3RlKGNvbnN0IE5vCiAKIGJvb2wgaXNNYWlsQmxvY2txdW90ZShjb25z
dCBOb2RlSW1wbCAqbm9kZSkKIHsKLSAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPnJlbmRlcmVyKCkg
fHwgIW5vZGUtPmlzRWxlbWVudE5vZGUoKSAmJiBub2RlLT5pZCgpICE9IElEX0JMT0NLUVVPVEUp
CisgICAgaWYgKCFub2RlIHx8ICFub2RlLT5yZW5kZXJlcigpIHx8ICFub2RlLT5pc0VsZW1lbnRO
b2RlKCkgJiYgIW5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpibG9ja3F1b3RlKCkpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAogICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25z
dCBFbGVtZW50SW1wbCAqPihub2RlKS0+Z2V0QXR0cmlidXRlKCJ0eXBlIikgPT0gImNpdGUiOwpJ
bmRleDoga2h0bWwvZWRpdGluZy9pbnNlcnRfbGluZV9icmVha19jb21tYW5kLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL2luc2VydF9saW5l
X2JyZWFrX2NvbW1hbmQuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEKZGlmZiAtdSAtcCAt
cjEuMSBraHRtbC9lZGl0aW5nL2luc2VydF9saW5lX2JyZWFrX2NvbW1hbmQuY3BwCi0tLSBraHRt
bC9lZGl0aW5nL2luc2VydF9saW5lX2JyZWFrX2NvbW1hbmQuY3BwCTI0IE1heSAyMDA1IDA3OjIx
OjQ3IC0wMDAwCTEuMQorKysga2h0bWwvZWRpdGluZy9pbnNlcnRfbGluZV9icmVha19jb21tYW5k
LmNwcAk5IEp1bCAyMDA1IDAyOjQyOjUyIC0wMDAwCkBAIC0yOSw3ICsyOSw3IEBACiAjaW5jbHVk
ZSAidmlzaWJsZV9wb3NpdGlvbi5oIgogI2luY2x1ZGUgInZpc2libGVfdW5pdHMuaCIKIAotI2lu
Y2x1ZGUgIm1pc2MvaHRtbHRhZ3MuaCIKKyNpbmNsdWRlICJodG1sbmFtZXMuaCIKICNpbmNsdWRl
ICJ4bWwvZG9tX2RvY2ltcGwuaCIKICNpbmNsdWRlICJ4bWwvZG9tX2VsZW1lbnRpbXBsLmgiCiAj
aW5jbHVkZSAieG1sL2RvbTJfcmFuZ2VpbXBsLmgiCkBAIC01MCw2ICs1MCw3IEBAIHVzaW5nIERP
TTo6Tm9kZUltcGw7CiB1c2luZyBET006OlBvc2l0aW9uOwogdXNpbmcgRE9NOjpUZXh0SW1wbDsK
IHVzaW5nIERPTTo6Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25JbXBsOwordXNpbmcgRE9NOjpI
VE1MTmFtZXM7CiAKIG5hbWVzcGFjZSBraHRtbCB7CiAKQEAgLTExMSwxMyArMTEyLDEzIEBAIHZv
aWQgSW5zZXJ0TGluZUJyZWFrQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgICAgIC8vIFRoaXMgbWFr
ZXMgdGhlICJyZWFsIiBCUiB3ZSB3YW50IHRvIGluc2VydCBhcHBlYXIgaW4gdGhlIHJlbmRlcmlu
ZyB3aXRob3V0IGFueSAKICAgICAgICAgLy8gc2lnbmlmaWNhbnQgc2lkZSBlZmZlY3RzIChhbmQg
bm8gcmVhbCB3b3JyaWVzIGVpdGhlciBzaW5jZSB5b3UgY2FuJ3QgYXJyb3cgcGFzdCAKICAgICAg
ICAgLy8gdGhpcyBleHRyYSBvbmUuCi0gICAgICAgIGlmIChwb3Mubm9kZSgpLT5pZCgpID09IElE
X0JSICYmIHBvcy5vZmZzZXQoKSA9PSAwKSB7CisgICAgICAgIGlmIChwb3Mubm9kZSgpLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6YnIoKSkgJiYgcG9zLm9mZnNldCgpID09IDApIHsKICAgICAgICAg
ICAgIC8vIEFscmVhZHkgcGxhY2VkIGluIGEgdHJhaWxpbmcgQlIuIEluc2VydCAicmVhbCIgQlIg
YmVmb3JlIGl0IGFuZCBsZWF2ZSB0aGUgc2VsZWN0aW9uIGFsb25lLgogICAgICAgICAgICAgaW5z
ZXJ0Tm9kZUJlZm9yZShub2RlVG9JbnNlcnQsIHBvcy5ub2RlKCkpOwogICAgICAgICB9CiAgICAg
ICAgIGVsc2UgewogICAgICAgICAgICAgTm9kZUltcGwgKm5leHQgPSBwb3Mubm9kZSgpLT50cmF2
ZXJzZU5leHROb2RlKCk7Ci0gICAgICAgICAgICBib29sIGhhc1RyYWlsaW5nQlIgPSBuZXh0ICYm
IG5leHQtPmlkKCkgPT0gSURfQlIgJiYgcG9zLm5vZGUoKS0+ZW5jbG9zaW5nQmxvY2tGbG93RWxl
bWVudCgpID09IG5leHQtPmVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQoKTsKKyAgICAgICAgICAg
IGJvb2wgaGFzVHJhaWxpbmdCUiA9IG5leHQgJiYgbmV4dC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
OmJyKCkpICYmIHBvcy5ub2RlKCktPmVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQoKSA9PSBuZXh0
LT5lbmNsb3NpbmdCbG9ja0Zsb3dFbGVtZW50KCk7CiAgICAgICAgICAgICBpbnNlcnROb2RlQWZ0
ZXJQb3NpdGlvbihub2RlVG9JbnNlcnQsIHBvcyk7CiAgICAgICAgICAgICBpZiAoaGFzVHJhaWxp
bmdCUikgewogICAgICAgICAgICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihTZWxlY3Rpb24oUG9z
aXRpb24obmV4dCwgMCksIERPV05TVFJFQU0pKTsKSW5kZXg6IGtodG1sL2VkaXRpbmcvaW5zZXJ0
X3BhcmFncmFwaF9zZXBhcmF0b3JfY29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1dlYkNvcmUva2h0bWwvZWRpdGluZy9pbnNlcnRfcGFyYWdyYXBoX3NlcGFyYXRvcl9j
b21tYW5kLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXUgLXAgLXIxLjEga2h0
bWwvZWRpdGluZy9pbnNlcnRfcGFyYWdyYXBoX3NlcGFyYXRvcl9jb21tYW5kLmNwcAotLS0ga2h0
bWwvZWRpdGluZy9pbnNlcnRfcGFyYWdyYXBoX3NlcGFyYXRvcl9jb21tYW5kLmNwcAkyNCBNYXkg
MjAwNSAwNzoyMTo0NyAtMDAwMAkxLjEKKysrIGtodG1sL2VkaXRpbmcvaW5zZXJ0X3BhcmFncmFw
aF9zZXBhcmF0b3JfY29tbWFuZC5jcHAJOSBKdWwgMjAwNSAwMjo0Mjo1MiAtMDAwMApAQCAtMzEs
NyArMzEsNyBAQAogCiAjaW5jbHVkZSAiY3NzL2Nzc19jb21wdXRlZHN0eWxlLmgiCiAjaW5jbHVk
ZSAiY3NzL2Nzc192YWx1ZWltcGwuaCIKLSNpbmNsdWRlICJtaXNjL2h0bWx0YWdzLmgiCisjaW5j
bHVkZSAiaHRtbG5hbWVzLmgiCiAjaW5jbHVkZSAieG1sL2RvbV9kb2NpbXBsLmgiCiAjaW5jbHVk
ZSAieG1sL2RvbV9lbGVtZW50aW1wbC5oIgogI2luY2x1ZGUgInhtbC9kb21fdGV4dGltcGwuaCIK
QEAgLTUwLDYgKzUwLDcgQEAgdXNpbmcgRE9NOjpFbGVtZW50SW1wbDsKIHVzaW5nIERPTTo6Tm9k
ZUltcGw7CiB1c2luZyBET006OlBvc2l0aW9uOwogdXNpbmcgRE9NOjpUZXh0SW1wbDsKK3VzaW5n
IERPTTo6SFRNTE5hbWVzOwogCiBuYW1lc3BhY2Uga2h0bWwgewogCkBAIC0yMTMsNyArMjE0LDcg
QEAgdm9pZCBJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kOjpkbwogICAgIC8vIHRoZW4g
dGhpcyA8YnI+IHdpbGwgY29sbGFwc2UgYXdheSB3aGVuIHdlIGFkZCBhIGJsb2NrIGFmdGVyIGl0
LiBBZGQgYW4gZXh0cmEgPGJyPi4KICAgICBpZiAoIWRvY3VtZW50KCktPmluU3RyaWN0TW9kZSgp
KSB7CiAgICAgICAgIFBvc2l0aW9uIHVwc3RyZWFtUG9zID0gcG9zLnVwc3RyZWFtKCk7Ci0gICAg
ICAgIGlmICh1cHN0cmVhbVBvcy5ub2RlKCktPmlkKCkgPT0gSURfQlIpCisgICAgICAgIGlmICh1
cHN0cmVhbVBvcy5ub2RlKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpicigpKSkKICAgICAgICAg
ICAgIGluc2VydE5vZGVBZnRlcihjcmVhdGVCcmVha0VsZW1lbnQoZG9jdW1lbnQoKSksIHVwc3Ry
ZWFtUG9zLm5vZGUoKSk7CiAgICAgfQogICAgIApJbmRleDoga2h0bWwvZWRpdGluZy9tYXJrdXAu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VkaXRpbmcv
bWFya3VwLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yMwpkaWZmIC11IC1wIC1yMS4yMyBr
aHRtbC9lZGl0aW5nL21hcmt1cC5jcHAKLS0tIGtodG1sL2VkaXRpbmcvbWFya3VwLmNwcAk1IEp1
bCAyMDA1IDIzOjIxOjA4IC0wMDAwCTEuMjMKKysrIGtodG1sL2VkaXRpbmcvbWFya3VwLmNwcAk5
IEp1bCAyMDA1IDAyOjQyOjUzIC0wMDAwCkBAIC0zNiw4ICszNiw3IEBACiAjaW5jbHVkZSAieG1s
L2RvbTJfcmFuZ2VpbXBsLmgiCiAjaW5jbHVkZSAicmVuZGVyaW5nL3JlbmRlcl90ZXh0LmgiCiAj
aW5jbHVkZSAibWlzYy9odG1sYXR0cnMuaCIKLSNpbmNsdWRlICJtaXNjL2h0bWx0YWdzLmgiCi0j
aW5jbHVkZSAiaHRtbC9kdGQuaCIKKyNpbmNsdWRlICJodG1sbmFtZXMuaCIKIAogdXNpbmcgRE9N
OjpBdHRyaWJ1dGVJbXBsOwogdXNpbmcgRE9NOjpDb21tZW50SW1wbDsKQEAgLTQ3LDkgKzQ2LDkg
QEAgdXNpbmcgRE9NOjpEb2N1bWVudEZyYWdtZW50SW1wbDsKIHVzaW5nIERPTTo6RG9jdW1lbnRJ
bXBsOwogdXNpbmcgRE9NOjpET01TdHJpbmc7CiB1c2luZyBET006OkVsZW1lbnRJbXBsOwotdXNp
bmcgRE9NOjpGT1JCSURERU47Ci11c2luZyBET006OmVuZFRhZ1JlcXVpcmVtZW50OwordXNpbmcg
RE9NOjpUYWdTdGF0dXNGb3JiaWRkZW47CiB1c2luZyBET006OkhUTUxFbGVtZW50SW1wbDsKK3Vz
aW5nIERPTTo6SFRNTE5hbWVzOwogdXNpbmcgRE9NOjpOYW1lZEF0dHJNYXBJbXBsOwogdXNpbmcg
RE9NOjpOb2RlOwogdXNpbmcgRE9NOjpOb2RlSW1wbDsKQEAgLTE3NywxMyArMTc2LDExIEBAIHN0
YXRpYyBRU3RyaW5nIHN0YXJ0TWFya3VwKGNvbnN0IE5vZGVJbXAKICAgICBzd2l0Y2ggKHR5cGUp
IHsKICAgICAgICAgY2FzZSBOb2RlOjpURVhUX05PREU6IHsKICAgICAgICAgICAgIGlmIChub2Rl
LT5wYXJlbnROb2RlKCkpIHsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPnBhcmVudE5v
ZGUoKS0+aWQoKSkgewotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX1BSRToKLSAgICAgICAg
ICAgICAgICAgICAgY2FzZSBJRF9TQ1JJUFQ6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURf
U1RZTEU6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfVEVYVEFSRUE6Ci0gICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gc3RyaW5nVmFsdWVGb3JSYW5nZShub2RlLCByYW5nZSk7Ci0g
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChub2RlLT5wYXJlbnROb2RlKCkt
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpwcmUoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgbm9k
ZS0+cGFyZW50Tm9kZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c2NyaXB0KCkpIHx8CisgICAg
ICAgICAgICAgICAgICAgIG5vZGUtPnBhcmVudE5vZGUoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
OnN0eWxlKCkpIHx8CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnBhcmVudE5vZGUoKS0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OnRleHRhcmVhKCkpKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gc3RyaW5nVmFsdWVGb3JSYW5nZShub2RlLCByYW5nZSk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBRU3RyaW5nIG1hcmt1cCA9IGFubm90YXRlID8gZXNjYXBlSFRNTChyZW5kZXJlZFRl
eHQobm9kZSwgcmFuZ2UpKSA6IGVzY2FwZUhUTUwoc3RyaW5nVmFsdWVGb3JSYW5nZShub2RlLCBy
YW5nZSkpOyAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKGRlZmF1bHRTdHlsZSkgewpAQCAt
MjQ4LDkgKzI0NSwxMyBAQCBzdGF0aWMgUVN0cmluZyBzdGFydE1hcmt1cChjb25zdCBOb2RlSW1w
CiAKIHN0YXRpYyBRU3RyaW5nIGVuZE1hcmt1cChjb25zdCBOb2RlSW1wbCAqbm9kZSkKIHsKLSAg
ICBpZiAoKCFub2RlLT5pc0hUTUxFbGVtZW50KCkgfHwgZW5kVGFnUmVxdWlyZW1lbnQobm9kZS0+
aWQoKSkgIT0gRk9SQklEREVOKSAmJiBub2RlLT5ub2RlVHlwZSgpICE9IE5vZGU6OlRFWFRfTk9E
RSAmJiBub2RlLT5ub2RlVHlwZSgpICE9IE5vZGU6OkRPQ1VNRU5UX05PREUpIHsKLSAgICAgICAg
cmV0dXJuICI8LyIgKyBub2RlLT5ub2RlTmFtZSgpLnN0cmluZygpICsgIj4iOworICAgIGJvb2wg
aGFzRW5kVGFnID0gbm9kZS0+aXNFbGVtZW50Tm9kZSgpOworICAgIGlmIChub2RlLT5pc0hUTUxF
bGVtZW50KCkpIHsKKyAgICAgICAgY29uc3QgSFRNTEVsZW1lbnRJbXBsKiBodG1sRWx0ID0gc3Rh
dGljX2Nhc3Q8Y29uc3QgSFRNTEVsZW1lbnRJbXBsKj4obm9kZSk7CisgICAgICAgIGhhc0VuZFRh
ZyA9IChodG1sRWx0LT5lbmRUYWdSZXF1aXJlbWVudCgpICE9IFRhZ1N0YXR1c0ZvcmJpZGRlbik7
CiAgICAgfQorICAgIGlmIChoYXNFbmRUYWcpCisgICAgICAgIHJldHVybiAiPC8iICsgbm9kZS0+
bm9kZU5hbWUoKS5zdHJpbmcoKSArICI+IjsKICAgICByZXR1cm4gIiI7CiB9CiAKQEAgLTI2NSw4
ICsyNjYsMTQgQEAgc3RhdGljIFFTdHJpbmcgbWFya3VwKGNvbnN0IE5vZGVJbXBsICpzdAogICAg
ICAgICAgICAgICAgIG5vZGVzLT5hcHBlbmQoY3VycmVudCk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBtZSArPSBzdGFydE1hcmt1cChjdXJyZW50LCAwLCBEb05vdEFubm90YXRlRm9ySW50
ZXJjaGFuZ2UsIDApOwotICAgICAgICB9ICAgICAgICAKLSAgICAgICAgaWYgKCFjdXJyZW50LT5p
c0hUTUxFbGVtZW50KCkgfHwgZW5kVGFnUmVxdWlyZW1lbnQoY3VycmVudC0+aWQoKSkgIT0gRk9S
QklEREVOKSB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgY29udGFpbmVyID0g
dHJ1ZTsKKyAgICAgICAgaWYgKGN1cnJlbnQtPmlzSFRNTEVsZW1lbnQoKSkgeworICAgICAgICAg
ICAgY29uc3QgSFRNTEVsZW1lbnRJbXBsKiBoID0gc3RhdGljX2Nhc3Q8Y29uc3QgSFRNTEVsZW1l
bnRJbXBsKj4oY3VycmVudCk7CisgICAgICAgICAgICBjb250YWluZXIgPSBoLT5lbmRUYWdSZXF1
aXJlbWVudCgpICE9IFRhZ1N0YXR1c0ZvcmJpZGRlbjsKKyAgICAgICAgfQorICAgICAgICBpZiAo
Y29udGFpbmVyKSB7CiAgICAgICAgICAgICAvLyBwcmludCBjaGlsZHJlbgogICAgICAgICAgICAg
aWYgKE5vZGVJbXBsICpuID0gY3VycmVudC0+Zmlyc3RDaGlsZCgpKSB7CiAgICAgICAgICAgICAg
ICAgbWUgKz0gbWFya3VwKG4sIGZhbHNlLCB0cnVlLCBub2Rlcyk7CkBAIC00MTQsOSArNDIxLDkg
QEAgUVN0cmluZyBjcmVhdGVNYXJrdXAoY29uc3QgUmFuZ2VJbXBsICpyYQogICAgICAgICAgICAg
fQogICAgICAgICAgICAgYm9vbCBicmVha0F0RW5kID0gZmFsc2U7CiAgICAgICAgICAgICBpZiAo
Y29tbW9uQW5jZXN0b3JCbG9jayA9PSBhbmNlc3RvcikgewotICAgICAgICAgICAgICAgIE5vZGVJ
bXBsOjpJZCBpZCA9IGFuY2VzdG9yLT5pZCgpOwogICAgICAgICAgICAgICAgIC8vIEluY2x1ZGUg
YW5jZXN0b3JzIHRoYXQgYXJlIHJlcXVpcmVkIHRvIHJldGFpbiB0aGUgYXBwZWFyYW5jZSBvZiB0
aGUgY29waWVkIG1hcmt1cC4KLSAgICAgICAgICAgICAgICBpZiAoaWQgPT0gSURfUFJFIHx8IGlk
ID09IElEX1RBQkxFIHx8IGlkID09IElEX09MIHx8IGlkID09IElEX1VMKSB7CisgICAgICAgICAg
ICAgICAgaWYgKGFuY2VzdG9yLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6cHJlKCkpIHx8IGFuY2Vz
dG9yLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGFibGUoKSkgfHwKKyAgICAgICAgICAgICAgICAg
ICAgYW5jZXN0b3ItPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvbCgpKSB8fCBhbmNlc3Rvci0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OnVsKCkpKSB7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrQXRF
bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwpAQCAtNTM5LDcgKzU0Niw3IEBAIERPTTo6RG9jdW1lbnRGcmFnbWVudEltcGwgKmNy
ZWF0ZUZyYWdtZW4KICAgICAgICAgICAgIEVsZW1lbnRJbXBsICplbGVtZW50OwogICAgICAgICAg
ICAgaWYgKHMuaXNFbXB0eSgpICYmIGxpc3QuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAg
Ly8gRm9yIGxhc3QgbGluZSwgdXNlIHRoZSAibWFnaWMgQlIiIHJhdGhlciB0aGFuIGEgUC4KLSAg
ICAgICAgICAgICAgICBlbGVtZW50ID0gZG9jdW1lbnQtPmNyZWF0ZUhUTUxFbGVtZW50KCJiciIs
IGV4Y2VwdGlvbkNvZGUpOworICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBkb2N1bWVudC0+Y3Jl
YXRlRWxlbWVudE5TKEhUTUxOYW1lczo6eGh0bWxOYW1lc3BhY2VVUkkoKSwgImJyIiwgZXhjZXB0
aW9uQ29kZSk7CiAgICAgICAgICAgICAgICAgQVNTRVJUKGV4Y2VwdGlvbkNvZGUgPT0gMCk7CiAg
ICAgICAgICAgICAgICAgZWxlbWVudC0+cmVmKCk7CiAgICAgICAgICAgICAgICAgZWxlbWVudC0+
c2V0QXR0cmlidXRlKEFUVFJfQ0xBU1MsIEFwcGxlSW50ZXJjaGFuZ2VOZXdsaW5lKTsgICAgICAg
ICAgICAKSW5kZXg6IGtodG1sL2VkaXRpbmcvcmVwbGFjZV9zZWxlY3Rpb25fY29tbWFuZC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvZWRpdGluZy9yZXBs
YWNlX3NlbGVjdGlvbl9jb21tYW5kLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40CmRpZmYg
LXUgLXAgLXIxLjQga2h0bWwvZWRpdGluZy9yZXBsYWNlX3NlbGVjdGlvbl9jb21tYW5kLmNwcAot
LS0ga2h0bWwvZWRpdGluZy9yZXBsYWNlX3NlbGVjdGlvbl9jb21tYW5kLmNwcAk1IEp1bCAyMDA1
IDIzOjIxOjA4IC0wMDAwCTEuNAorKysga2h0bWwvZWRpdGluZy9yZXBsYWNlX3NlbGVjdGlvbl9j
b21tYW5kLmNwcAk5IEp1bCAyMDA1IDAyOjQyOjU0IC0wMDAwCkBAIC0yNyw3ICsyNyw3IEBACiAK
ICNpbmNsdWRlICJ2aXNpYmxlX3Bvc2l0aW9uLmgiCiAjaW5jbHVkZSAibWlzYy9odG1sYXR0cnMu
aCIKLSNpbmNsdWRlICJtaXNjL2h0bWx0YWdzLmgiCisjaW5jbHVkZSAiaHRtbG5hbWVzLmgiCiAj
aW5jbHVkZSAieG1sL2RvbV9kb2NpbXBsLmgiCiAjaW5jbHVkZSAiaHRtbF9pbnRlcmNoYW5nZS5o
IgogI2luY2x1ZGUgInhtbC9kb21fdGV4dGltcGwuaCIKQEAgLTU4LDYgKzU4LDcgQEAgdXNpbmcg
RE9NOjpET01TdHJpbmc7CiB1c2luZyBET006OkhUTUxFbGVtZW50SW1wbDsKIHVzaW5nIERPTTo6
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25JbXBsOwogdXNpbmcgRE9NOjpQb3NpdGlvbjsKK3Vz
aW5nIERPTTo6SFRNTE5hbWVzOwogCiBuYW1lc3BhY2Uga2h0bWwgewogCkBAIC0xNjcsMzAgKzE2
OCwxNCBAQCBzdGF0aWMgYm9vbCBpc1Byb2JhYmx5QmxvY2soY29uc3QgTm9kZUltCiAgICAgaWYg
KCFub2RlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgc3dpdGNoIChub2RlLT5p
ZCgpKSB7Ci0gICAgICAgIGNhc2UgSURfQkxPQ0tRVU9URToKLSAgICAgICAgY2FzZSBJRF9ERDoK
LSAgICAgICAgY2FzZSBJRF9ESVY6Ci0gICAgICAgIGNhc2UgSURfREw6Ci0gICAgICAgIGNhc2Ug
SURfRFQ6Ci0gICAgICAgIGNhc2UgSURfSDE6Ci0gICAgICAgIGNhc2UgSURfSDI6Ci0gICAgICAg
IGNhc2UgSURfSDM6Ci0gICAgICAgIGNhc2UgSURfSDQ6Ci0gICAgICAgIGNhc2UgSURfSDU6Ci0g
ICAgICAgIGNhc2UgSURfSDY6Ci0gICAgICAgIGNhc2UgSURfSFI6Ci0gICAgICAgIGNhc2UgSURf
TEk6Ci0gICAgICAgIGNhc2UgSURfT0w6Ci0gICAgICAgIGNhc2UgSURfUDoKLSAgICAgICAgY2Fz
ZSBJRF9QUkU6Ci0gICAgICAgIGNhc2UgSURfVEQ6Ci0gICAgICAgIGNhc2UgSURfVEg6Ci0gICAg
ICAgIGNhc2UgSURfVUw6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0g
ICAgcmV0dXJuIGZhbHNlOworICAgIC8vIEZJWE1FOiBUaGlzIGZ1bmN0aW9uIHNlZW1zIHJlYWxs
eSBicm9rZW4gdG8gbWUuICBJdCBpc24ndCBldmVuIGluY2x1ZGluZyBhbGwgdGhlIGJsb2NrLWxl
dmVsIGVsZW1lbnRzLgorICAgIHJldHVybiAobm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJs
b2NrcXVvdGUoKSkgfHwgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmRkKCkpIHx8IG5vZGUt
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpkaXYoKSkgfHwKKyAgICAgICAgICAgIG5vZGUtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjpkbCgpKSB8fCBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZHQo
KSkgfHwgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmgxKCkpIHx8CisgICAgICAgICAgICBu
b2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDIoKSkgfHwgbm9kZS0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OmgzKCkpIHx8IG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoNCgpKSB8fAorICAg
ICAgICAgICAgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omg1KCkpIHx8IG5vZGUtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjpoNigpKSB8fCBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aHIo
KSkgfHwKKyAgICAgICAgICAgIG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpsaSgpKSB8fCBu
b2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b2woKSkgfHwgbm9kZS0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OnAoKSkgfHwKKyAgICAgICAgICAgIG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpw
cmUoKSkgfHwgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRkKCkpIHx8IG5vZGUtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjp0aCgpKSB8fAorICAgICAgICAgICAgbm9kZS0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OnVsKCkpKTsKIH0KIAogc3RhdGljIGJvb2wgaXNNYWlsUGFzdGVBc1F1b3RhdGlv
bk5vZGUoY29uc3QgTm9kZUltcGwgKm5vZGUpCkBAIC0yMTQsMTYgKzE5OSw4IEBAIHN0YXRpYyBi
b29sIGlzUHJvYmFibHlUYWJsZVN0cnVjdHVyZU5vZGUKICAgICBpZiAoIW5vZGUpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAKLSAgICBzd2l0Y2ggKG5vZGUtPmlkKCkpIHsKLSAgICAgICAg
Y2FzZSBJRF9UQUJMRToKLSAgICAgICAgY2FzZSBJRF9UQk9EWToKLSAgICAgICAgY2FzZSBJRF9U
RDoKLSAgICAgICAgY2FzZSBJRF9URk9PVDoKLSAgICAgICAgY2FzZSBJRF9USEVBRDoKLSAgICAg
ICAgY2FzZSBJRF9UUjoKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1
cm4gZmFsc2U7CisgICAgcmV0dXJuIChub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGFibGUo
KSkgfHwgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRib2R5KCkpIHx8IG5vZGUtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjp0ZCgpKSB8fAorICAgICAgICAgICAgbm9kZS0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OnRmb290KCkpIHx8IG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0aGVhZCgp
KSB8fCBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dHIoKSkpOwogfQogCiB2b2lkIFJlcGxh
Y2VtZW50RnJhZ21lbnQ6OnBydW5lRW1wdHlOb2RlcygpCkBAIC0yNTAsNyArMjI3LDcgQEAgdm9p
ZCBSZXBsYWNlbWVudEZyYWdtZW50OjpwcnVuZUVtcHR5Tm9kZQogYm9vbCBSZXBsYWNlbWVudEZy
YWdtZW50Ojppc0ludGVyY2hhbmdlTmV3bGluZU5vZGUoY29uc3QgTm9kZUltcGwgKm5vZGUpCiB7
CiAgICAgc3RhdGljIERPTVN0cmluZyBpbnRlcmNoYW5nZU5ld2xpbmVDbGFzc1N0cmluZyhBcHBs
ZUludGVyY2hhbmdlTmV3bGluZSk7Ci0gICAgcmV0dXJuIG5vZGUgJiYgbm9kZS0+aWQoKSA9PSBJ
RF9CUiAmJiBzdGF0aWNfY2FzdDxjb25zdCBFbGVtZW50SW1wbCAqPihub2RlKS0+Z2V0QXR0cmli
dXRlKEFUVFJfQ0xBU1MpID09IGludGVyY2hhbmdlTmV3bGluZUNsYXNzU3RyaW5nOworICAgIHJl
dHVybiBub2RlICYmIG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpicigpKSAmJiBzdGF0aWNf
Y2FzdDxjb25zdCBFbGVtZW50SW1wbCAqPihub2RlKS0+Z2V0QXR0cmlidXRlKEFUVFJfQ0xBU1Mp
ID09IGludGVyY2hhbmdlTmV3bGluZUNsYXNzU3RyaW5nOwogfQogCiBib29sIFJlcGxhY2VtZW50
RnJhZ21lbnQ6OmlzSW50ZXJjaGFuZ2VDb252ZXJ0ZWRTcGFjZVNwYW4oY29uc3QgTm9kZUltcGwg
Km5vZGUpCkBAIC01MDcsMTggKzQ4NCwxOSBAQCB2b2lkIFJlcGxhY2VtZW50RnJhZ21lbnQ6OnJl
bW92ZVN0eWxlTm9kCiAgICAgICAgIE5vZGVJbXBsICpuZXh0ID0gbm9kZS0+dHJhdmVyc2VOZXh0
Tm9kZSgpOwogICAgICAgICAvLyBUaGlzIGxpc3Qgb2YgdGFncyBjaGFuZ2UgdGhlIGFwcGVhcmFu
Y2Ugb2YgY29udGVudAogICAgICAgICAvLyBpbiB3YXlzIHdlIGNhbiBhZGQgYmFjayBvbiBsYXRl
ciB3aXRoIENTUywgaWYgbmVjZXNzYXJ5LgotICAgICAgICBpZiAobm9kZS0+aWQoKSA9PSBJRF9C
IHx8IAotICAgICAgICAgICAgbm9kZS0+aWQoKSA9PSBJRF9CSUcgfHwgCi0gICAgICAgICAgICBu
b2RlLT5pZCgpID09IElEX0NFTlRFUiB8fCAKLSAgICAgICAgICAgIG5vZGUtPmlkKCkgPT0gSURf
Rk9OVCB8fCAKLSAgICAgICAgICAgIG5vZGUtPmlkKCkgPT0gSURfSSB8fCAKLSAgICAgICAgICAg
IG5vZGUtPmlkKCkgPT0gSURfUyB8fCAKLSAgICAgICAgICAgIG5vZGUtPmlkKCkgPT0gSURfU01B
TEwgfHwgCi0gICAgICAgICAgICBub2RlLT5pZCgpID09IElEX1NUUklLRSB8fCAKLSAgICAgICAg
ICAgIG5vZGUtPmlkKCkgPT0gSURfU1VCIHx8IAotICAgICAgICAgICAgbm9kZS0+aWQoKSA9PSBJ
RF9TVVAgfHwgCi0gICAgICAgICAgICBub2RlLT5pZCgpID09IElEX1RUIHx8IAotICAgICAgICAg
ICAgbm9kZS0+aWQoKSA9PSBJRF9VIHx8IAorICAgICAgICAvLyAgRklYTUU6IFRoaXMgbGlzdCBp
cyBpbmNvbXBsZXRlCisgICAgICAgIGlmIChub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Yigp
KSB8fCAKKyAgICAgICAgICAgIG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpiaWcoKSkgfHwg
CisgICAgICAgICAgICBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Y2VudGVyKCkpIHx8IAor
ICAgICAgICAgICAgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZvbnQoKSkgfHwgCisgICAg
ICAgICAgICBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aSgpKSB8fCAKKyAgICAgICAgICAg
IG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzKCkpIHx8IAorICAgICAgICAgICAgbm9kZS0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OnNtYWxsKCkpIHx8IAorICAgICAgICAgICAgbm9kZS0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OnN0cmlrZSgpKSB8fCAKKyAgICAgICAgICAgIG5vZGUtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjpzdWIoKSkgfHwgCisgICAgICAgICAgICBub2RlLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6c3VwKCkpIHx8IAorICAgICAgICAgICAgbm9kZS0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OnR0KCkpIHx8IAorICAgICAgICAgICAgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
OnUoKSkgfHwgCiAgICAgICAgICAgICBpc1N0eWxlU3Bhbihub2RlKSkgewogICAgICAgICAgICAg
cmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbihub2RlKTsKICAgICAgICAgfQpAQCAtNzQ0LDcg
KzcyMiw3IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkoKQogICAgIGlm
ICghbGluZVBsYWNlaG9sZGVyKSB7CiAgICAgICAgIFBvc2l0aW9uIGRvd25zdHJlYW0gPSBzdGFy
dFBvcy5kb3duc3RyZWFtKCk7CiAgICAgICAgIGRvd25zdHJlYW0gPSBwb3NpdGlvbk91dHNpZGVD
b250YWluaW5nU3BlY2lhbEVsZW1lbnQoZG93bnN0cmVhbSk7Ci0gICAgICAgIGlmIChkb3duc3Ry
ZWFtLm5vZGUoKS0+aWQoKSA9PSBJRF9CUiAmJiBkb3duc3RyZWFtLm9mZnNldCgpID09IDAgJiYg
CisgICAgICAgIGlmIChkb3duc3RyZWFtLm5vZGUoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJy
KCkpICYmIGRvd25zdHJlYW0ub2Zmc2V0KCkgPT0gMCAmJiAKICAgICAgICAgICAgIG1fZnJhZ21l
bnQuaGFzSW50ZXJjaGFuZ2VOZXdsaW5lQXRFbmQoKSAmJgogICAgICAgICAgICAgaXNTdGFydE9m
TGluZShWaXNpYmxlUG9zaXRpb24oZG93bnN0cmVhbSwgVlBfREVGQVVMVF9BRkZJTklUWSkpKQog
ICAgICAgICAgICAgbGluZVBsYWNlaG9sZGVyID0gZG93bnN0cmVhbS5ub2RlKCk7CkBAIC05MDYs
MTIgKzg4NCwxMiBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KCkKICAg
ICAgICAgfQogICAgIH0gCiAgICAgZWxzZSB7Ci0gICAgICAgIGlmIChtX2xhc3ROb2RlSW5zZXJ0
ZWQgJiYgbV9sYXN0Tm9kZUluc2VydGVkLT5pZCgpID09IElEX0JSICYmICFkb2N1bWVudCgpLT5p
blN0cmljdE1vZGUoKSkgeworICAgICAgICBpZiAobV9sYXN0Tm9kZUluc2VydGVkICYmIG1fbGFz
dE5vZGVJbnNlcnRlZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJyKCkpICYmICFkb2N1bWVudCgp
LT5pblN0cmljdE1vZGUoKSkgewogICAgICAgICAgICAgZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0
KCk7CiAgICAgICAgICAgICBWaXNpYmxlUG9zaXRpb24gcG9zKFBvc2l0aW9uKG1fbGFzdE5vZGVJ
bnNlcnRlZCwgMSksIERPV05TVFJFQU0pOwogICAgICAgICAgICAgaWYgKGlzRW5kT2ZCbG9jayhw
b3MpKSB7CiAgICAgICAgICAgICAgICAgTm9kZUltcGwgKm5leHQgPSBtX2xhc3ROb2RlSW5zZXJ0
ZWQtPnRyYXZlcnNlTmV4dE5vZGUoKTsKLSAgICAgICAgICAgICAgICBib29sIGhhc1RyYWlsaW5n
QlIgPSBuZXh0ICYmIG5leHQtPmlkKCkgPT0gSURfQlIgJiYgbV9sYXN0Tm9kZUluc2VydGVkLT5l
bmNsb3NpbmdCbG9ja0Zsb3dFbGVtZW50KCkgPT0gbmV4dC0+ZW5jbG9zaW5nQmxvY2tGbG93RWxl
bWVudCgpOworICAgICAgICAgICAgICAgIGJvb2wgaGFzVHJhaWxpbmdCUiA9IG5leHQgJiYgbmV4
dC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJyKCkpICYmIG1fbGFzdE5vZGVJbnNlcnRlZC0+ZW5j
bG9zaW5nQmxvY2tGbG93RWxlbWVudCgpID09IG5leHQtPmVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1l
bnQoKTsKICAgICAgICAgICAgICAgICBpZiAoIWhhc1RyYWlsaW5nQlIpIHsKICAgICAgICAgICAg
ICAgICAgICAgLy8gSW5zZXJ0IGFuICJleHRyYSIgQlIgYXQgdGhlIGVuZCBvZiB0aGUgYmxvY2su
IAogICAgICAgICAgICAgICAgICAgICBpbnNlcnROb2RlQmVmb3JlKGNyZWF0ZUJyZWFrRWxlbWVu
dChkb2N1bWVudCgpKSwgbV9sYXN0Tm9kZUluc2VydGVkKTsKQEAgLTkzOCw3ICs5MTYsNyBAQCB2
b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KCkKICAgICAgICAgICAgICAgICBp
bnNlcnROb2RlQWZ0ZXIobm9kZSwgcmVmTm9kZSk7CiAgICAgICAgICAgICAgICAgcmVmTm9kZSA9
IG5vZGU7CiAgICAgICAgICAgICAgICAgLy8gV2Ugd2FudCB0byBtb3ZlIHRoZSBmaXJzdCBCUiB3
ZSBzZWUsIHNvIGNoZWNrIGZvciB0aGF0IGhlcmUuCi0gICAgICAgICAgICAgICAgaWYgKG5vZGUt
PmlkKCkgPT0gSURfQlIpCisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjpicigpKSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgbm9kZSA9IG5leHQ7CiAgICAgICAgICAgICB9CkBAIC0xMDg2LDcgKzEwNjQsNyBAQCB2b2lk
IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjp1cGRhdGVOb2RlCiAgICAgCiAgICAgLy8gdXBkYXRl
IG1fbGFzdE5vZGVJbnNlcnRlZAogICAgIE5vZGVJbXBsICpvbGQgPSBtX2xhc3ROb2RlSW5zZXJ0
ZWQ7Ci0gICAgbV9sYXN0Tm9kZUluc2VydGVkID0gbm9kZS0+bGFzdERlc2NlbmRlbnQoKTsKKyAg
ICBtX2xhc3ROb2RlSW5zZXJ0ZWQgPSBub2RlLT5sYXN0RGVzY2VuZGFudCgpOwogICAgIG1fbGFz
dE5vZGVJbnNlcnRlZC0+cmVmKCk7CiAgICAgaWYgKG9sZCkKICAgICAgICAgb2xkLT5kZXJlZigp
OwpJbmRleDoga2h0bWwvZWRpdGluZy9zZWxlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VkaXRpbmcvc2VsZWN0aW9uLmNwcCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS44OQpkaWZmIC11IC1wIC1yMS44OSBraHRtbC9lZGl0aW5nL3NlbGVjdGlv
bi5jcHAKLS0tIGtodG1sL2VkaXRpbmcvc2VsZWN0aW9uLmNwcAkyMyBKdW4gMjAwNSAxOTo0Nzo0
OCAtMDAwMAkxLjg5CisrKyBraHRtbC9lZGl0aW5nL3NlbGVjdGlvbi5jcHAJOSBKdWwgMjAwNSAw
Mjo0Mjo1NSAtMDAwMApAQCAtMzMsNyArMzMsNiBAQAogI2luY2x1ZGUgImRvbS9kb21fc3RyaW5n
LmgiCiAjaW5jbHVkZSAia2h0bWxfcGFydC5oIgogI2luY2x1ZGUgImtodG1sdmlldy5oIgotI2lu
Y2x1ZGUgIm1pc2MvaHRtbHRhZ3MuaCIKICNpbmNsdWRlICJyZW5kZXJpbmcvcmVuZGVyX29iamVj
dC5oIgogI2luY2x1ZGUgInJlbmRlcmluZy9yZW5kZXJfc3R5bGUuaCIKICNpbmNsdWRlICJyZW5k
ZXJpbmcvcmVuZGVyX3RleHQuaCIKQEAgLTkzOCw3ICs5MzcsNyBAQCB2b2lkIFNlbGVjdGlvbjo6
ZGVidWdSZW5kZXJlcihSZW5kZXJPYmplCiB7CiAgICAgaWYgKHItPm5vZGUoKS0+aXNFbGVtZW50
Tm9kZSgpKSB7CiAgICAgICAgIEVsZW1lbnRJbXBsICplbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxl
bWVudEltcGwgKj4oci0+bm9kZSgpKTsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICIlcyVzXG4i
LCBzZWxlY3RlZCA/ICI9PT4gIiA6ICIgICAgIiwgZWxlbWVudC0+dGFnTmFtZSgpLnN0cmluZygp
LmxhdGluMSgpKTsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICIlcyVzXG4iLCBzZWxlY3RlZCA/
ICI9PT4gIiA6ICIgICAgIiwgZWxlbWVudC0+bG9jYWxOYW1lKCkuc3RyaW5nKCkubGF0aW4xKCkp
OwogICAgIH0KICAgICBlbHNlIGlmIChyLT5pc1RleHQoKSkgewogICAgICAgICBSZW5kZXJUZXh0
ICp0ZXh0UmVuZGVyZXIgPSBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0ICo+KHIpOwpJbmRleDoga2h0
bWwvZWRpdGluZy92aXNpYmxlX3Bvc2l0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL3Zpc2libGVfcG9zaXRpb24uY3BwLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjUxCmRpZmYgLXUgLXAgLXIxLjUxIGtodG1sL2VkaXRpbmcvdmlzaWJs
ZV9wb3NpdGlvbi5jcHAKLS0tIGtodG1sL2VkaXRpbmcvdmlzaWJsZV9wb3NpdGlvbi5jcHAJMjMg
SnVuIDIwMDUgMTk6NDc6NDkgLTAwMDAJMS41MQorKysga2h0bWwvZWRpdGluZy92aXNpYmxlX3Bv
c2l0aW9uLmNwcAk5IEp1bCAyMDA1IDAyOjQyOjU1IC0wMDAwCkBAIC0yNiw3ICsyNiw3IEBACiAj
aW5jbHVkZSAidmlzaWJsZV9wb3NpdGlvbi5oIgogI2luY2x1ZGUgInZpc2libGVfdW5pdHMuaCIK
IAotI2luY2x1ZGUgIm1pc2MvaHRtbHRhZ3MuaCIKKyNpbmNsdWRlICJodG1sbmFtZXMuaCIKICNp
bmNsdWRlICJyZW5kZXJpbmcvcmVuZGVyX2xpbmUuaCIKICNpbmNsdWRlICJyZW5kZXJpbmcvcmVu
ZGVyX29iamVjdC5oIgogI2luY2x1ZGUgInJlbmRlcmluZy9yZW5kZXJfdGV4dC5oIgpAQCAtNTAs
NiArNTAsNyBAQCB1c2luZyBET006OlBvc2l0aW9uOwogdXNpbmcgRE9NOjpSYW5nZTsKIHVzaW5n
IERPTTo6UmFuZ2VJbXBsOwogdXNpbmcgRE9NOjpUZXh0SW1wbDsKK3VzaW5nIERPTTo6SFRNTE5h
bWVzOwogCiBuYW1lc3BhY2Uga2h0bWwgewogCkBAIC03NCw3ICs3NSw3IEBAIHZvaWQgVmlzaWJs
ZVBvc2l0aW9uOjppbml0KGNvbnN0IFBvc2l0aW8KICAgICBtX2FmZmluaXR5ID0gYWZmaW5pdHk7
CiAKICAgICAvLyBGb3IgPGJyPiAwLCBpdCdzIGltcG9ydGFudCBub3QgdG8gbW92ZSBwYXN0IHRo
ZSA8YnI+LgotICAgIGlmIChwb3Mubm9kZSgpICYmIHBvcy5ub2RlKCktPmlkKCkgPT0gSURfQlIg
JiYgcG9zLm9mZnNldCgpID09IDApCisgICAgaWYgKHBvcy5ub2RlKCkgJiYgcG9zLm5vZGUoKS0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJyKCkpICYmIHBvcy5vZmZzZXQoKSA9PSAwKQogICAgICAg
ICBpbml0VXBzdHJlYW0ocG9zKTsKICAgICBlbHNlCiAgICAgICAgIGluaXREb3duc3RyZWFtKHBv
cyk7CkBAIC0yNzQsNyArMjc1LDcgQEAgYm9vbCBWaXNpYmxlUG9zaXRpb246OmlzQ2FuZGlkYXRl
KGNvbnN0IAogICAgIH0KICAgICAKICAgICBpZiAocmVuZGVyZXItPmlzQmxvY2tGbG93KCkgJiYg
KCFyZW5kZXJlci0+Zmlyc3RDaGlsZCgpIHx8ICFwb3Mubm9kZSgpLT5maXJzdENoaWxkKCkpICYm
IAotICAgICAgIChyZW5kZXJlci0+aGVpZ2h0KCkgfHwgcG9zLm5vZGUoKS0+aWQoKSA9PSBJRF9C
T0RZKSkgeworICAgICAgIChyZW5kZXJlci0+aGVpZ2h0KCkgfHwgcG9zLm5vZGUoKS0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OmJvZHkoKSkpKSB7CiAgICAgICAgIC8vIHJldHVybiB0cnVlIGZvciBv
ZmZzZXQgMCBpbnRvIHJlbmRlcmVkIGJsb2NrcyB0aGF0IGFyZSBlbXB0eSBvZiByZW5kZXJlZCBr
aWRzLCBidXQgaGF2ZSBhIGhlaWdodAogICAgICAgICByZXR1cm4gcG9zLm9mZnNldCgpID09IDA7
CiAgICAgfQpAQCAtMzU5LDcgKzM2MCw3IEBAIGxvbmcgVmlzaWJsZVBvc2l0aW9uOjptYXhPZmZz
ZXQoY29uc3QgTm8KIAogYm9vbCBWaXNpYmxlUG9zaXRpb246OmlzQXRvbWljTm9kZShjb25zdCBO
b2RlSW1wbCAqbm9kZSkKIHsKLSAgICByZXR1cm4gbm9kZSAmJiAoIW5vZGUtPmhhc0NoaWxkTm9k
ZXMoKSB8fCAobm9kZS0+aWQoKSA9PSBJRF9PQkpFQ1QgJiYgbm9kZS0+cmVuZGVyZXIoKSAmJiBu
b2RlLT5yZW5kZXJlcigpLT5pc1JlcGxhY2VkKCkpKTsKKyAgICByZXR1cm4gbm9kZSAmJiAoIW5v
ZGUtPmhhc0NoaWxkTm9kZXMoKSB8fCAobm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9iamVj
dCgpKSAmJiBub2RlLT5yZW5kZXJlcigpICYmIG5vZGUtPnJlbmRlcmVyKCktPmlzUmVwbGFjZWQo
KSkpOwogfQogCiBRQ2hhciBWaXNpYmxlUG9zaXRpb246OmNoYXJhY3RlcigpIGNvbnN0CkluZGV4
OiBraHRtbC9lZGl0aW5nL3Zpc2libGVfdGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1dlYkNvcmUva2h0bWwvZWRpdGluZy92aXNpYmxlX3RleHQuY3BwLHYKcmV0cmlldmlu
ZyByZXZpc2lvbiAxLjI3CmRpZmYgLXUgLXAgLXIxLjI3IGtodG1sL2VkaXRpbmcvdmlzaWJsZV90
ZXh0LmNwcAotLS0ga2h0bWwvZWRpdGluZy92aXNpYmxlX3RleHQuY3BwCTEzIE1heSAyMDA1IDE2
OjQ4OjUxIC0wMDAwCTEuMjcKKysrIGtodG1sL2VkaXRpbmcvdmlzaWJsZV90ZXh0LmNwcAk5IEp1
bCAyMDA1IDAyOjQyOjU2IC0wMDAwCkBAIC0yNSw3ICsyNSw3IEBACiAKICNpbmNsdWRlICJ2aXNp
YmxlX3RleHQuaCIKIAotI2luY2x1ZGUgIm1pc2MvaHRtbHRhZ3MuaCIKKyNpbmNsdWRlICJodG1s
bmFtZXMuaCIKICNpbmNsdWRlICJyZW5kZXJpbmcvcmVuZGVyX3RleHQuaCIKICNpbmNsdWRlICJ4
bWwvZG9tX25vZGVpbXBsLmgiCiAjaW5jbHVkZSAieG1sL2RvbV9wb3NpdGlvbi5oIgpAQCAtMzcs
NiArMzcsNyBAQCB1c2luZyBET006Ok5vZGU7CiB1c2luZyBET006Ok5vZGVJbXBsOwogdXNpbmcg
RE9NOjpvZmZzZXRJbkNoYXJhY3RlcnM7CiB1c2luZyBET006OlJhbmdlSW1wbDsKK3VzaW5nIERP
TTo6SFRNTE5hbWVzOwogCiAvLyBGSVhNRTogVGhlc2UgY2xhc3NlcyBzaG91bGQgcHJvYmFibHkg
dXNlIHRoZSByZW5kZXIgdHJlZSBhbmQgbm90IHRoZSBET00gdHJlZSwgc2luY2UgZWxlbWVudHMg
Y291bGQKIC8vIGJlIGhpZGRlbiB1c2luZyBDU1MsIG9yIGFkZGl0aW9uYWwgZ2VuZXJhdGVkIGNv
bnRlbnQgY291bGQgYmUgYWRkZWQuICBGb3Igbm93LCB3ZSBqdXN0IG1ha2Ugc3VyZQpAQCAtMzM2
LDQxICszMzcsMjUgQEAgYm9vbCBUZXh0SXRlcmF0b3I6OmhhbmRsZVJlcGxhY2VkRWxlbWVudAog
CiBib29sIFRleHRJdGVyYXRvcjo6aGFuZGxlTm9uVGV4dE5vZGUoKQogewotICAgIHN3aXRjaCAo
bV9ub2RlLT5pZCgpKSB7Ci0gICAgICAgIGNhc2UgSURfQlI6IHsKLSAgICAgICAgICAgIGVtaXRD
aGFyYWN0ZXIoJ1xuJywgbV9ub2RlLT5wYXJlbnROb2RlKCksIG1fbm9kZSwgMCwgMSk7Ci0gICAg
ICAgICAgICBicmVhazsKKyAgICBpZiAobV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YnIo
KSkpIHsKKyAgICAgICAgZW1pdENoYXJhY3RlcignXG4nLCBtX25vZGUtPnBhcmVudE5vZGUoKSwg
bV9ub2RlLCAwLCAxKTsKKyAgICB9IGVsc2UgaWYgKG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OnRkKCkpIHx8IG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRoKCkpKSB7CisgICAg
ICAgIGlmIChtX2xhc3RDaGFyYWN0ZXIgIT0gJ1xuJyAmJiBtX2xhc3RUZXh0Tm9kZSkgeworICAg
ICAgICAgICAgZW1pdENoYXJhY3RlcignXHQnLCBtX2xhc3RUZXh0Tm9kZS0+cGFyZW50Tm9kZSgp
LCBtX2xhc3RUZXh0Tm9kZSwgMCwgMSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKG1fbm9k
ZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJsb2NrcXVvdGUoKSkgfHwgbV9ub2RlLT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6ZGQoKSkgfHwKKyAgICAgICAgICAgICAgIG1fbm9kZS0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OmRpdigpKSB8fAorICAgICAgICAgICAgICAgbV9ub2RlLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6ZGwoKSkgfHwgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZHQoKSkg
fHwgCisgICAgICAgICAgICAgICBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoMSgpKSB8
fCBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoMigpKSB8fAorICAgICAgICAgICAgICAg
bV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDMoKSkgfHwgbV9ub2RlLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6aDQoKSkgfHwKKyAgICAgICAgICAgICAgIG1fbm9kZS0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6Omg1KCkpIHx8IG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omg2KCkpIHx8
CisgICAgICAgICAgICAgICBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpocigpKSB8fCBt
X25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpsaSgpKSB8fAorICAgICAgICAgICAgICAgbV9u
b2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b2woKSkgfHwgbV9ub2RlLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6cCgpKSB8fAorICAgICAgICAgICAgICAgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6cHJlKCkpIHx8IG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRyKCkpIHx8Cisg
ICAgICAgICAgICAgICBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp1bCgpKSkgeworICAg
ICAgICBpZiAobV9sYXN0Q2hhcmFjdGVyICE9ICdcbicgJiYgbV9sYXN0VGV4dE5vZGUpIHsKKyAg
ICAgICAgICAgIGVtaXRDaGFyYWN0ZXIoJ1xuJywgbV9sYXN0VGV4dE5vZGUtPnBhcmVudE5vZGUo
KSwgbV9sYXN0VGV4dE5vZGUsIDAsIDEpOwogICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBJRF9U
RDoKLSAgICAgICAgY2FzZSBJRF9USDoKLSAgICAgICAgICAgIGlmIChtX2xhc3RDaGFyYWN0ZXIg
IT0gJ1xuJyAmJiBtX2xhc3RUZXh0Tm9kZSkgewotICAgICAgICAgICAgICAgIGVtaXRDaGFyYWN0
ZXIoJ1x0JywgbV9sYXN0VGV4dE5vZGUtPnBhcmVudE5vZGUoKSwgbV9sYXN0VGV4dE5vZGUsIDAs
IDEpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBJ
RF9CTE9DS1FVT1RFOgotICAgICAgICBjYXNlIElEX0REOgotICAgICAgICBjYXNlIElEX0RJVjoK
LSAgICAgICAgY2FzZSBJRF9ETDoKLSAgICAgICAgY2FzZSBJRF9EVDoKLSAgICAgICAgY2FzZSBJ
RF9IMToKLSAgICAgICAgY2FzZSBJRF9IMjoKLSAgICAgICAgY2FzZSBJRF9IMzoKLSAgICAgICAg
Y2FzZSBJRF9INDoKLSAgICAgICAgY2FzZSBJRF9INToKLSAgICAgICAgY2FzZSBJRF9INjoKLSAg
ICAgICAgY2FzZSBJRF9IUjoKLSAgICAgICAgY2FzZSBJRF9MSToKLSAgICAgICAgY2FzZSBJRF9P
TDoKLSAgICAgICAgY2FzZSBJRF9QOgotICAgICAgICBjYXNlIElEX1BSRToKLSAgICAgICAgY2Fz
ZSBJRF9UUjoKLSAgICAgICAgY2FzZSBJRF9VTDoKLSAgICAgICAgICAgIGlmIChtX2xhc3RDaGFy
YWN0ZXIgIT0gJ1xuJyAmJiBtX2xhc3RUZXh0Tm9kZSkgewotICAgICAgICAgICAgICAgIGVtaXRD
aGFyYWN0ZXIoJ1xuJywgbV9sYXN0VGV4dE5vZGUtPnBhcmVudE5vZGUoKSwgbV9sYXN0VGV4dE5v
ZGUsIDAsIDEpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAg
ICAgcmV0dXJuIHRydWU7CkBAIC0zODEsNDkgKzM2NiwzNyBAQCB2b2lkIFRleHRJdGVyYXRvcjo6
ZXhpdE5vZGUoKQogICAgIGJvb2wgZW5kTGluZSA9IGZhbHNlOwogICAgIGJvb2wgYWRkTmV3bGlu
ZSA9IGZhbHNlOwogCi0gICAgc3dpdGNoIChtX25vZGUtPmlkKCkpIHsKLSAgICAgICAgY2FzZSBJ
RF9CTE9DS1FVT1RFOgotICAgICAgICBjYXNlIElEX0REOgotICAgICAgICBjYXNlIElEX0RJVjoK
LSAgICAgICAgY2FzZSBJRF9ETDoKLSAgICAgICAgY2FzZSBJRF9EVDoKLSAgICAgICAgY2FzZSBJ
RF9IUjoKLSAgICAgICAgY2FzZSBJRF9MSToKLSAgICAgICAgY2FzZSBJRF9PTDoKLSAgICAgICAg
Y2FzZSBJRF9QUkU6Ci0gICAgICAgIGNhc2UgSURfVFI6Ci0gICAgICAgIGNhc2UgSURfVUw6Ci0g
ICAgICAgICAgICBlbmRMaW5lID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAg
IGNhc2UgSURfSDE6Ci0gICAgICAgIGNhc2UgSURfSDI6Ci0gICAgICAgIGNhc2UgSURfSDM6Ci0g
ICAgICAgIGNhc2UgSURfSDQ6Ci0gICAgICAgIGNhc2UgSURfSDU6Ci0gICAgICAgIGNhc2UgSURf
SDY6Ci0gICAgICAgIGNhc2UgSURfUDogewotICAgICAgICAgICAgZW5kTGluZSA9IHRydWU7Ci0K
LSAgICAgICAgICAgIC8vIEluIGNlcnRhaW4gY2FzZXMsIGVtaXQgYSBuZXcgbmV3bGluZSBjaGFy
YWN0ZXIgZm9yIHRoaXMgbm9kZQotICAgICAgICAgICAgLy8gcmVnYXJkbGVzcyBvZiB3aGV0aGVy
IHdlIGVtaXQgYW5vdGhlciBvbmUuCi0gICAgICAgICAgICAvLyBGSVhNRTogU29tZSBkYXkgd2Ug
Y291bGQgZG8gdGhpcyBmb3Igb3RoZXIgdGFncy4KLSAgICAgICAgICAgIC8vIEhvd2V2ZXIsIGRv
aW5nIGl0IGp1c3QgZm9yIHRoZSB0YWdzIGFib3ZlIG1ha2VzIGl0IG1vcmUgbGlrZWx5Ci0gICAg
ICAgICAgICAvLyB3ZSdsbCBlbmQgdXAgZ2V0dGluZyB0aGUgcmlnaHQgcmVzdWx0IHdpdGhvdXQg
bWFyZ2luIGNvbGxhcHNpbmcuCi0gICAgICAgICAgICAvLyBGb3IgZXhhbXBsZTogPGRpdj48cD50
ZXh0PC9wPjwvZGl2PiB3aWxsIHdvcmsgcmlnaHQgZXZlbiBpZiBib3RoCi0gICAgICAgICAgICAv
LyB0aGUgPGRpdj4gYW5kIHRoZSA8cD4gaGF2ZSBib3R0b20gbWFyZ2lucy4KLSAgICAgICAgICAg
IFJlbmRlck9iamVjdCAqcmVuZGVyZXIgPSBtX25vZGUtPnJlbmRlcmVyKCk7Ci0gICAgICAgICAg
ICBpZiAocmVuZGVyZXIpIHsKLSAgICAgICAgICAgICAgICBSZW5kZXJTdHlsZSAqc3R5bGUgPSBy
ZW5kZXJlci0+c3R5bGUoKTsKLSAgICAgICAgICAgICAgICBpZiAoc3R5bGUpIHsKLSAgICAgICAg
ICAgICAgICAgICAgaW50IGJvdHRvbU1hcmdpbiA9IHJlbmRlcmVyLT5jb2xsYXBzZWRNYXJnaW5C
b3R0b20oKTsKLSAgICAgICAgICAgICAgICAgICAgaW50IGZvbnRTaXplID0gc3R5bGUtPmh0bWxG
b250KCkuZ2V0Rm9udERlZigpLmNvbXB1dGVkUGl4ZWxTaXplKCk7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChib3R0b21NYXJnaW4gKiAyID49IGZvbnRTaXplKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBhZGROZXdsaW5lID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgfQorICAgIGlm
IChtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpibG9ja3F1b3RlKCkpIHx8IG1fbm9kZS0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OmRkKCkpIHx8CisgICAgICAgICAgICAgICBtX25vZGUtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjpkaXYoKSkgfHwKKyAgICAgICAgICAgICAgIG1fbm9kZS0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OmRsKCkpIHx8IG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
OmR0KCkpIHx8IAorICAgICAgICAgICAgICAgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
aHIoKSkgfHwgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6bGkoKSkgfHwKKyAgICAgICAg
ICAgICAgIG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9sKCkpIHx8CisgICAgICAgICAg
ICAgICBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpwcmUoKSkgfHwgbV9ub2RlLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6dHIoKSkgfHwKKyAgICAgICAgICAgICAgIG1fbm9kZS0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OnVsKCkpKQorICAgICAgICBlbmRMaW5lID0gdHJ1ZTsKKyAgICBlbHNl
IGlmIChtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoMSgpKSB8fCBtX25vZGUtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjpoMigpKSB8fAorICAgICAgICAgICAgIG1fbm9kZS0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OmgzKCkpIHx8IG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omg0KCkp
IHx8CisgICAgICAgICAgICAgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDUoKSkgfHwg
bV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDYoKSkgfHwKKyAgICAgICAgICAgICBtX25v
ZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpwKCkpKSB7CisgICAgICAgIGVuZExpbmUgPSB0cnVl
OworCisgICAgICAgIC8vIEluIGNlcnRhaW4gY2FzZXMsIGVtaXQgYSBuZXcgbmV3bGluZSBjaGFy
YWN0ZXIgZm9yIHRoaXMgbm9kZQorICAgICAgICAvLyByZWdhcmRsZXNzIG9mIHdoZXRoZXIgd2Ug
ZW1pdCBhbm90aGVyIG9uZS4KKyAgICAgICAgLy8gRklYTUU6IFNvbWUgZGF5IHdlIGNvdWxkIGRv
IHRoaXMgZm9yIG90aGVyIHRhZ3MuCisgICAgICAgIC8vIEhvd2V2ZXIsIGRvaW5nIGl0IGp1c3Qg
Zm9yIHRoZSB0YWdzIGFib3ZlIG1ha2VzIGl0IG1vcmUgbGlrZWx5CisgICAgICAgIC8vIHdlJ2xs
IGVuZCB1cCBnZXR0aW5nIHRoZSByaWdodCByZXN1bHQgd2l0aG91dCBtYXJnaW4gY29sbGFwc2lu
Zy4KKyAgICAgICAgLy8gRm9yIGV4YW1wbGU6IDxkaXY+PHA+dGV4dDwvcD48L2Rpdj4gd2lsbCB3
b3JrIHJpZ2h0IGV2ZW4gaWYgYm90aAorICAgICAgICAvLyB0aGUgPGRpdj4gYW5kIHRoZSA8cD4g
aGF2ZSBib3R0b20gbWFyZ2lucy4KKyAgICAgICAgUmVuZGVyT2JqZWN0ICpyZW5kZXJlciA9IG1f
bm9kZS0+cmVuZGVyZXIoKTsKKyAgICAgICAgaWYgKHJlbmRlcmVyKSB7CisgICAgICAgICAgICBS
ZW5kZXJTdHlsZSAqc3R5bGUgPSByZW5kZXJlci0+c3R5bGUoKTsKKyAgICAgICAgICAgIGlmIChz
dHlsZSkgeworICAgICAgICAgICAgICAgIGludCBib3R0b21NYXJnaW4gPSByZW5kZXJlci0+Y29s
bGFwc2VkTWFyZ2luQm90dG9tKCk7CisgICAgICAgICAgICAgICAgaW50IGZvbnRTaXplID0gc3R5
bGUtPmh0bWxGb250KCkuZ2V0Rm9udERlZigpLmNvbXB1dGVkUGl4ZWxTaXplKCk7CisgICAgICAg
ICAgICAgICAgaWYgKGJvdHRvbU1hcmdpbiAqIDIgPj0gZm9udFNpemUpIHsKKyAgICAgICAgICAg
ICAgICAgICAgYWRkTmV3bGluZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfQotICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTY2MCwzNCAr
NjMzLDIyIEBAIGJvb2wgU2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvcjo6aGEKIAogYm9v
bCBTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yOjpoYW5kbGVOb25UZXh0Tm9kZSgpCiB7
Ci0gICAgc3dpdGNoIChtX25vZGUtPmlkKCkpIHsKLSAgICAgICAgY2FzZSBJRF9CUjoKLSAgICAg
ICAgICAgIGVtaXROZXdsaW5lRm9yQlJPclRleHQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIElEX1REOgotICAgICAgICBjYXNlIElEX1RIOgotICAgICAgICBjYXNlIElEX0JM
T0NLUVVPVEU6Ci0gICAgICAgIGNhc2UgSURfREQ6Ci0gICAgICAgIGNhc2UgSURfRElWOgotICAg
ICAgICBjYXNlIElEX0RMOgotICAgICAgICBjYXNlIElEX0RUOgotICAgICAgICBjYXNlIElEX0gx
OgotICAgICAgICBjYXNlIElEX0gyOgotICAgICAgICBjYXNlIElEX0gzOgotICAgICAgICBjYXNl
IElEX0g0OgotICAgICAgICBjYXNlIElEX0g1OgotICAgICAgICBjYXNlIElEX0g2OgotICAgICAg
ICBjYXNlIElEX0hSOgotICAgICAgICBjYXNlIElEX1A6Ci0gICAgICAgIGNhc2UgSURfUFJFOgot
ICAgICAgICBjYXNlIElEX1RSOgotICAgICAgICBjYXNlIElEX09MOgotICAgICAgICBjYXNlIElE
X1VMOgotICAgICAgICBjYXNlIElEX0xJOgotICAgICAgICAgICAgLy8gRW1pdCBhIHNwYWNlIHRv
ICJicmVhayB1cCIgY29udGVudC4gQW55IHdvcmQgYnJlYWsKLSAgICAgICAgICAgIC8vIGNoYXJh
Y3RlciB3aWxsIGRvLgotICAgICAgICAgICAgZW1pdENoYXJhY3RlcignICcsIG1fbm9kZSwgMCwg
MCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICBpZiAobV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6YnIoKSkpCisgICAgICAgIGVtaXROZXdsaW5lRm9yQlJPclRleHQoKTsKKyAgICBlbHNl
IGlmIChtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0ZCAoKSkgfHwgbV9ub2RlLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6dGgoKSkgfHwKKyAgICAgICAgICAgICBtX25vZGUtPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjpibG9ja3F1b3RlKCkpIHx8IG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OmRkKCkpIHx8CisgICAgICAgICAgICAgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
ZGl2KCkpIHx8CisgICAgICAgICAgICAgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZGwo
KSkgfHwgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZHQoKSkgfHwgCisgICAgICAgICAg
ICAgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDEoKSkgfHwgbV9ub2RlLT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6aDIoKSkgfHwKKyAgICAgICAgICAgICBtX25vZGUtPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjpoMygpKSB8fCBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoNCgpKSB8
fAorICAgICAgICAgICAgIG1fbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omg1KCkpIHx8IG1f
bm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omg2KCkpIHx8CisgICAgICAgICAgICAgbV9ub2Rl
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aHIoKSkgfHwgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6bGkoKSkgfHwKKyAgICAgICAgICAgICBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjpvbCgpKSB8fCBtX25vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpwKCkpIHx8CisgICAgICAg
ICAgICAgbV9ub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6cHJlKCkpIHx8IG1fbm9kZS0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OnRyKCkpIHx8CisgICAgICAgICAgICAgbV9ub2RlLT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6dWwoKSkpIHsKKyAgICAgICAgLy8gRW1pdCBhIHNwYWNlIHRvICJicmVh
ayB1cCIgY29udGVudC4gQW55IHdvcmQgYnJlYWsKKyAgICAgICAgLy8gY2hhcmFjdGVyIHdpbGwg
ZG8uCisgICAgICAgIGVtaXRDaGFyYWN0ZXIoJyAnLCBtX25vZGUsIDAsIDApOwogICAgIH0KIAog
ICAgIHJldHVybiB0cnVlOwpJbmRleDoga2h0bWwvZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9lZGl0aW5nL3Zpc2li
bGVfdW5pdHMuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjM0CmRpZmYgLXUgLXAgLXIxLjM0
IGtodG1sL2VkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAKLS0tIGtodG1sL2VkaXRpbmcvdmlzaWJs
ZV91bml0cy5jcHAJMjYgTWF5IDIwMDUgMjA6MzA6MTIgLTAwMDAJMS4zNAorKysga2h0bWwvZWRp
dGluZy92aXNpYmxlX3VuaXRzLmNwcAk5IEp1bCAyMDA1IDAyOjQyOjU2IC0wMDAwCkBAIC0yNyw3
ICsyNyw3IEBACiAKICNpbmNsdWRlIDxxc3RyaW5nLmg+CiAKLSNpbmNsdWRlICJodG1sdGFncy5o
IgorI2luY2x1ZGUgImh0bWxuYW1lcy5oIgogI2luY2x1ZGUgIm1pc2MvaGVscGVyLmgiCiAjaW5j
bHVkZSAicmVuZGVyaW5nL3JlbmRlcl90ZXh0LmgiCiAjaW5jbHVkZSAicmVuZGVyaW5nL3JlbmRl
cl9ibG9jay5oIgpAQCAtNDEsNiArNDEsNyBAQCB1c2luZyBET006OkVsZW1lbnRJbXBsOwogdXNp
bmcgRE9NOjpOb2RlSW1wbDsKIHVzaW5nIERPTTo6UG9zaXRpb247CiB1c2luZyBET006OlJhbmdl
SW1wbDsKK3VzaW5nIERPTTo6SFRNTE5hbWVzOwogCiBuYW1lc3BhY2Uga2h0bWwgewogCkBAIC0z
MzIsNyArMzMzLDcgQEAgVmlzaWJsZVBvc2l0aW9uIGVuZE9mTGluZShjb25zdCBWaXNpYmxlUAog
ICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CiAKICAgICBsb25nIGVuZE9mZnNldCA9
IDE7Ci0gICAgaWYgKGVuZE5vZGUtPmlkKCkgPT0gSURfQlIpIHsKKyAgICBpZiAoZW5kTm9kZS0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJyKCkpKSB7CiAgICAgICAgIGVuZE9mZnNldCA9IDA7CiAg
ICAgfSBlbHNlIGlmIChlbmRCb3gtPmlzSW5saW5lVGV4dEJveCgpKSB7CiAgICAgICAgIElubGlu
ZVRleHRCb3ggKmVuZFRleHRCb3ggPSBzdGF0aWNfY2FzdDxJbmxpbmVUZXh0Qm94ICo+KGVuZEJv
eCk7CkluZGV4OiBraHRtbC9odG1sL2R0ZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZToga2h0bWwv
aHRtbC9kdGQuY3BwCmRpZmYgLU4ga2h0bWwvaHRtbC9kdGQuY3BwCi0tLSBraHRtbC9odG1sL2R0
ZC5jcHAJMTIgQXByIDIwMDUgMjI6NDk6NDEgLTAwMDAJMS4zOAorKysgL2Rldi9udWxsCTEgSmFu
IDE5NzAgMDA6MDA6MDAgLTAwMDAKQEAgLTEsOTg5ICswLDAgQEAKLS8qKgotICogVGhpcyBmaWxl
IGlzIHBhcnQgb2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgotICoKLSAqIChDKSAx
OTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgQXBw
bGUgQ29tcHV0ZXIsIEluYy4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
Ci0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCi0gKiBCb3N0b24sIE1BIDAyMTExLTEzMDcs
IFVTQS4KLSAqCi0gKi8KLQotI2luY2x1ZGUgImh0bWwvZHRkLmgiCi0jaW5jbHVkZSAibWlzYy9o
dG1saGFzaGVzLmgiCi0KLXVzaW5nIG5hbWVzcGFjZSBET007Ci0KLSNpbmNsdWRlIDxrZGVidWcu
aD4KLQotLy8gcHJpb3JpdHkgb2YgdGFncy4gQ2xvc2luZyB0YWdzIG9mIGhpZ2hlciBwcmlvcml0
eSBjbG9zZSB0YWdzIG9mIGxvd2VyCi0vLyBwcmlvcml0eS4KLS8vIFVwZGF0ZSB0aGlzIGxpc3Qs
IHdoZW5ldmVyIHlvdSBjaGFuZ2UgaHRtbHRhZ3MuKgotLy8KLS8vIDAgZWxlbWVudHMgd2l0aCBm
b3JiaWRkZW4gY2xvc2UgdGFnIGFuZCB0ZXh0LiBUaGV5IGRvbid0IGdldCBwdXNoZWQKLS8vICAg
dG8gdGhlIHN0YWNrLgotLy8gMSBpbmxpbmUgZWxlbWVudHMKLS8vIDIgZm9ybSBlbGVtZW50cwot
Ly8gMyByZWd1bGFyIGJsb2NrIGxldmVsIGVsZW1lbnRzCi0vLyA0IGxpc3RzIChPTCBVTCBESVIg
TUVOVSkKLS8vIDUgVEQgVEggU0VMRUNUCi0vLyA2IFRSCi0vLyA3IHRib2R5IHRoZWFkIHRmb290
IGNhcHRpb24gIG9iamVjdAotLy8gOCB0YWJsZQotLy8gOSBib2R5IGZyYW1lc2V0Ci0vLyAxMCBo
dG1sCi1jb25zdCB1bnNpZ25lZCBzaG9ydCBET006OnRhZ1ByaW9yaXR5QXJyYXlbXSA9IHsKLSAg
ICAwLCAvLyAwCi0gICAgMSwgLy8gSURfQSA9PSAxCi0gICAgMSwgLy8gSURfQUJCUgotICAgIDEs
IC8vIElEX0FDUk9OWU0KLSAgICAzLCAvLyBJRF9BRERSRVNTCi0gICAgMSwgLy8gSURfQVBQTEVU
Ci0gICAgMCwgLy8gSURfQVJFQQotICAgIDEsIC8vIElEX0IKLSAgICAwLCAvLyBJRF9CQVNFCi0g
ICAgMCwgLy8gSURfQkFTRUZPTlQKLSAgICAxLCAvLyBJRF9CRE8KLSAgICAxLCAvLyBJRF9CSUcK
LSAgICA1LCAvLyBJRF9CTE9DS1FVT1RFCi0gICAxMCwgLy8gSURfQk9EWQotICAgIDAsIC8vIElE
X0JSCi0gICAgMSwgLy8gSURfQlVUVE9OCi0gICAgMCwgLy8gSURfQ0FOVkFTCi0gICAgNSwgLy8g
SURfQ0FQVElPTgotICAgIDUsIC8vIElEX0NFTlRFUgotICAgIDEsIC8vIElEX0NJVEUKLSAgICAx
LCAvLyBJRF9DT0RFCi0gICAgMCwgLy8gSURfQ09MCi0gICAgMSwgLy8gSURfQ09MR1JPVVAKLSAg
ICAzLCAvLyBJRF9ERAotICAgIDEsIC8vIElEX0RFTAotICAgIDEsIC8vIElEX0RGTgotICAgIDUs
IC8vIElEX0RJUgotICAgIDUsIC8vIElEX0RJVgotICAgIDUsIC8vIElEX0RMCi0gICAgMywgLy8g
SURfRFQKLSAgICAxLCAvLyBJRF9FTQotICAgIDAsIC8vIElEX0VNQkVECi0gICAgMywgLy8gSURf
RklFTERTRVQKLSAgICAxLCAvLyBJRF9GT05UCi0gICAgMywgLy8gSURfRk9STQotICAgIDAsIC8v
IElEX0ZSQU1FCi0gICAxMCwvLyBJRF9GUkFNRVNFVAotICAgIDUsIC8vIElEX0gxCi0gICAgNSwg
Ly8gSURfSDIKLSAgICA1LCAvLyBJRF9IMwotICAgIDUsIC8vIElEX0g0Ci0gICAgNSwgLy8gSURf
SDUKLSAgICA1LCAvLyBJRF9INgotICAgMTAsLy8gSURfSEVBRAotICAgIDAsIC8vIElEX0hSCi0g
ICAxMSwvLyBJRF9IVE1MCi0gICAgMSwgLy8gSURfSQotICAgIDEsIC8vIElEX0lGUkFNRQotICAg
IDAsIC8vIElEX0lNRwotICAgIDAsIC8vIElEX0lOUFVUCi0gICAgMSwgLy8gSURfSU5TCi0gICAg
MCwgLy8gSURfSVNJTkRFWAotICAgIDEsIC8vIElEX0tCRAotICAgIDAsIC8vIElEX0tFWUdFTgot
ICAgIDUsIC8vIElEX0xBQkVMCi0gICAgMSwgLy8gSURfTEFZRVIKLSAgICAxLCAvLyBJRF9MRUdF
TkQKLSAgICAzLCAvLyBJRF9MSQotICAgIDAsIC8vIElEX0xJTksKLSAgICAxLCAvLyBJRF9NQVAK
LSAgICAzLCAvLyBJRF9NQVJRVUVFCi0gICAgNSwgLy8gSURfTUVOVQotICAgIDAsIC8vIElEX01F
VEEKLSAgICA1LCAvLyBJRF9OT0JSCi0gICAxMCwvLyBJRF9OT0VNQkVECi0gICAxMCwvLyBJRF9O
T0ZSQU1FUwotICAgIDMsIC8vIElEX05PU0NSSVBUCi0gICAgMSwgLy8gSURfTk9MQVlFUgotICAg
IDcsIC8vIElEX09CSkVDVAotICAgIDUsIC8vIElEX09MCi0gICAgMSwgLy8gSURfT1BUR1JPVVAK
LSAgICAyLCAvLyBJRF9PUFRJT04KLSAgICAzLCAvLyBJRF9QCi0gICAgMCwgLy8gSURfUEFSQU0K
LSAgICA1LCAvLyBJRF9QTEFJTlRFWFQKLSAgICA1LCAvLyBJRF9QUkUKLSAgICAxLCAvLyBJRF9R
Ci0gICAgMSwgLy8gSURfUwotICAgIDEsIC8vIElEX1NBTVAKLSAgICAxLCAvLyBJRF9TQ1JJUFQK
LSAgICA2LCAvLyBJRF9TRUxFQ1QKLSAgICAxLCAvLyBJRF9TTUFMTAotICAgIDEsIC8vIElEX1NQ
QU4KLSAgICAxLCAvLyBJRF9TVFJJS0UKLSAgICAxLCAvLyBJRF9TVFJPTkcKLSAgICAxLCAvLyBJ
RF9TVFlMRQotICAgIDEsIC8vIElEX1NVQgotICAgIDEsIC8vIElEX1NVUAotICAgIDksLy8gSURf
VEFCTEUKLSAgICA4LCAvLyBJRF9UQk9EWQotICAgIDYsIC8vIElEX1RECi0gICAgMSwgLy8gSURf
VEVYVEFSRUEKLSAgICA4LCAvLyBJRF9URk9PVAotICAgIDYsIC8vIElEX1RICi0gICAgOCwgLy8g
SURfVEhFQUQKLSAgICAxLCAvLyBJRF9USVRMRQotICAgIDcsIC8vIElEX1RSCi0gICAgMSwgLy8g
SURfVFQKLSAgICAxLCAvLyBJRF9VCi0gICAgNSwgLy8gSURfVUwKLSAgICAxLCAvLyBJRF9WQVIK
LSAgICAxLCAvLyBJRF9XQlIKLSAgICA1LCAvLyBJRF9YTVAKLSAgICAwLCAvLyBJRF9URVhUCi19
OwotCi1jb25zdCB0YWdTdGF0dXMgRE9NOjplbmRUYWdBcnJheVtdID0gewotICAgIFJFUVVJUkVE
LCAgLy8gMAotICAgIFJFUVVJUkVELCAgLy8gSURfQSA9PSAxCi0gICAgUkVRVUlSRUQsICAvLyBJ
RF9BQkJSCi0gICAgUkVRVUlSRUQsICAvLyBJRF9BQ1JPTllNCi0gICAgUkVRVUlSRUQsICAvLyBJ
RF9BRERSRVNTCi0gICAgUkVRVUlSRUQsICAvLyBJRF9BUFBMRVQKLSAgICBGT1JCSURERU4sIC8v
IElEX0FSRUEKLSAgICBSRVFVSVJFRCwgIC8vIElEX0IKLSAgICBGT1JCSURERU4sIC8vIElEX0JB
U0UKLSAgICBGT1JCSURERU4sIC8vIElEX0JBU0VGT05UCi0gICAgUkVRVUlSRUQsICAvLyBJRF9C
RE8KLSAgICBSRVFVSVJFRCwgIC8vIElEX0JJRwotICAgIFJFUVVJUkVELCAgLy8gSURfQkxPQ0tR
VU9URQotICAgIFJFUVVJUkVELCAgLy8gSURfQk9EWQotICAgIEZPUkJJRERFTiwgLy8gSURfQlIK
LSAgICBSRVFVSVJFRCwgIC8vIElEX0JVVFRPTgotICAgIEZPUkJJRERFTiwgLy8gSURfQ0FOVkFT
Ci0gICAgUkVRVUlSRUQsICAvLyBJRF9DQVBUSU9OCi0gICAgUkVRVUlSRUQsICAvLyBJRF9DRU5U
RVIKLSAgICBSRVFVSVJFRCwgIC8vIElEX0NJVEUKLSAgICBSRVFVSVJFRCwgIC8vIElEX0NPREUK
LSAgICBGT1JCSURERU4sIC8vIElEX0NPTAotICAgIE9QVElPTkFMLCAgLy8gSURfQ09MR1JPVVAK
LSAgICBPUFRJT05BTCwgIC8vIElEX0RECi0gICAgUkVRVUlSRUQsICAvLyBJRF9ERUwKLSAgICBS
RVFVSVJFRCwgIC8vIElEX0RGTgotICAgIFJFUVVJUkVELCAgLy8gSURfRElSCi0gICAgUkVRVUlS
RUQsICAvLyBJRF9ESVYKLSAgICBSRVFVSVJFRCwgIC8vIElEX0RMCi0gICAgT1BUSU9OQUwsICAv
LyBJRF9EVAotICAgIFJFUVVJUkVELCAgLy8gSURfRU0KLSAgICBSRVFVSVJFRCwgIC8vIElEX0VN
QkVECi0gICAgUkVRVUlSRUQsICAvLyBJRF9GSUVMRFNFVAotICAgIFJFUVVJUkVELCAgLy8gSURf
Rk9OVAotICAgIFJFUVVJUkVELCAgLy8gSURfRk9STQotICAgIEZPUkJJRERFTiwgLy8gSURfRlJB
TUUKLSAgICBSRVFVSVJFRCwgIC8vIElEX0ZSQU1FU0VUCi0gICAgUkVRVUlSRUQsICAvLyBJRF9I
MQotICAgIFJFUVVJUkVELCAgLy8gSURfSDIKLSAgICBSRVFVSVJFRCwgIC8vIElEX0gzCi0gICAg
UkVRVUlSRUQsICAvLyBJRF9INAotICAgIFJFUVVJUkVELCAgLy8gSURfSDUKLSAgICBSRVFVSVJF
RCwgIC8vIElEX0g2Ci0gICAgT1BUSU9OQUwsICAvLyBJRF9IRUFECi0gICAgRk9SQklEREVOLCAv
LyBJRF9IUgotICAgIFJFUVVJUkVELCAgLy8gSURfSFRNTAotICAgIFJFUVVJUkVELCAgLy8gSURf
SQotICAgIFJFUVVJUkVELCAgLy8gSURfSUZSQU1FCi0gICAgRk9SQklEREVOLCAvLyBJRF9JTUcK
LSAgICBGT1JCSURERU4sIC8vIElEX0lOUFVUCi0gICAgUkVRVUlSRUQsICAvLyBJRF9JTlMKLSAg
ICBGT1JCSURERU4sIC8vIElEX0lTSU5ERVgKLSAgICBSRVFVSVJFRCwgIC8vIElEX0tCRAotICAg
IFJFUVVJUkVELCAgLy8gSURfS0VZR0VOCi0gICAgUkVRVUlSRUQsICAvLyBJRF9MQUJFTAotICAg
IFJFUVVJUkVELCAgLy8gSURfTEFZRVIKLSAgICBSRVFVSVJFRCwgIC8vIElEX0xFR0VORAotICAg
IE9QVElPTkFMLCAgLy8gSURfTEkKLSAgICBGT1JCSURERU4sIC8vIElEX0xJTksKLSAgICBSRVFV
SVJFRCwgIC8vIElEX01BUAotICAgIFJFUVVJUkVELCAgLy8gSURfTUFSUVVFRQotICAgIFJFUVVJ
UkVELCAgLy8gSURfTUVOVQotICAgIEZPUkJJRERFTiwgLy8gSURfTUVUQQotICAgIFJFUVVJUkVE
LCAgLy8gSURfTk9CUgotICAgIFJFUVVJUkVELCAgLy8gSURfTk9FTUJFRAotICAgIFJFUVVJUkVE
LCAgLy8gSURfTk9GUkFNRVMKLSAgICBSRVFVSVJFRCwgIC8vIElEX05PU0NSSVBUCi0gICAgUkVR
VUlSRUQsICAvLyBJRF9OT0xBWUVSCi0gICAgUkVRVUlSRUQsICAvLyBJRF9PQkpFQ1QKLSAgICBS
RVFVSVJFRCwgIC8vIElEX09MCi0gICAgUkVRVUlSRUQsICAvLyBJRF9PUFRHUk9VUAotICAgIE9Q
VElPTkFMLCAgLy8gSURfT1BUSU9OCi0gICAgT1BUSU9OQUwsICAvLyBJRF9QCi0gICAgRk9SQklE
REVOLCAvLyBJRF9QQVJBTQotICAgIFJFUVVJUkVELCAgLy8gSURfUExBSU5URVhUCi0gICAgUkVR
VUlSRUQsICAvLyBJRF9QUkUKLSAgICBSRVFVSVJFRCwgIC8vIElEX1EKLSAgICBSRVFVSVJFRCwg
IC8vIElEX1MKLSAgICBSRVFVSVJFRCwgIC8vIElEX1NBTVAKLSAgICBSRVFVSVJFRCwgIC8vIElE
X1NDUklQVAotICAgIFJFUVVJUkVELCAgLy8gSURfU0VMRUNUCi0gICAgUkVRVUlSRUQsICAvLyBJ
RF9TTUFMTAotICAgIFJFUVVJUkVELCAgLy8gSURfU1BBTgotICAgIFJFUVVJUkVELCAgLy8gSURf
U1RSSUtFCi0gICAgUkVRVUlSRUQsICAvLyBJRF9TVFJPTkcKLSAgICBSRVFVSVJFRCwgIC8vIElE
X1NUWUxFCi0gICAgUkVRVUlSRUQsICAvLyBJRF9TVUIKLSAgICBSRVFVSVJFRCwgIC8vIElEX1NV
UAotICAgIFJFUVVJUkVELCAgLy8gSURfVEFCTEUKLSAgICBPUFRJT05BTCwgIC8vIElEX1RCT0RZ
Ci0gICAgT1BUSU9OQUwsICAvLyBJRF9URAotICAgIFJFUVVJUkVELCAgLy8gSURfVEVYVEFSRUEK
LSAgICBPUFRJT05BTCwgIC8vIElEX1RGT09UCi0gICAgT1BUSU9OQUwsICAvLyBJRF9USAotICAg
IE9QVElPTkFMLCAgLy8gSURfVEhFQUQKLSAgICBSRVFVSVJFRCwgIC8vIElEX1RJVExFCi0gICAg
T1BUSU9OQUwsICAvLyBJRF9UUgotICAgIFJFUVVJUkVELCAgLy8gSURfVFQKLSAgICBSRVFVSVJF
RCwgIC8vIElEX1UKLSAgICBSRVFVSVJFRCwgIC8vIElEX1VMCi0gICAgUkVRVUlSRUQsICAvLyBJ
RF9WQVIKLSAgICBSRVFVSVJFRCwgIC8vIElEX1dCUgotICAgIFJFUVVJUkVELCAgLy8gSURfWE1Q
Ci0gICAgUkVRVUlSRUQgICAvLyBJRF9URVhUCi19OwotCi0KLXN0YXRpYyBjb25zdCB1c2hvcnQg
dGFnX2xpc3RfMFtdID0gewotICAgIElEX1RFWFQsCi0gICAgSURfVFQsCi0gICAgSURfSSwKLSAg
ICBJRF9CLAotICAgIElEX1UsCi0gICAgSURfUywKLSAgICBJRF9TVFJJS0UsCi0gICAgSURfQklH
LAotICAgIElEX1NNQUxMLAotICAgIElEX0VNLAotICAgIElEX1NUUk9ORywKLSAgICBJRF9ERk4s
Ci0gICAgSURfQ09ERSwKLSAgICBJRF9TQU1QLAotICAgIElEX0tCRCwKLSAgICBJRF9WQVIsCi0g
ICAgSURfQ0lURSwKLSAgICBJRF9BQkJSLAotICAgIElEX0FDUk9OWU0sCi0gICAgSURfQSwKLSAg
ICBJRF9DQU5WQVMsCi0gICAgSURfSU1HLAotICAgIElEX0FQUExFVCwKLSAgICBJRF9PQkpFQ1Qs
Ci0gICAgSURfRU1CRUQsCi0gICAgSURfRk9OVCwKLSAgICBJRF9CQVNFRk9OVCwKLSAgICBJRF9C
UiwKLSAgICBJRF9TQ1JJUFQsCi0gICAgSURfTUFQLAotICAgIElEX1EsCi0gICAgSURfU1VCLAot
ICAgIElEX1NVUCwKLSAgICBJRF9TUEFOLAotICAgIElEX0JETywKLSAgICBJRF9JRlJBTUUsCi0g
ICAgSURfSU5QVVQsCi0gICAgSURfU0VMRUNULAotICAgIElEX1RFWFRBUkVBLAotICAgIElEX0xB
QkVMLAotICAgIElEX0JVVFRPTiwKLSAgICBJRF9JTlMsCi0gICAgSURfREVMLAotICAgIElEX0NP
TU1FTlQsCi0gICAgSURfTk9CUiwKLSAgICBJRF9XQlIsCi0gICAgMAotfTsKLQotc3RhdGljIGNv
bnN0IHVzaG9ydCB0YWdfbGlzdF8xW10gPSB7Ci0gICAgSURfVEVYVCwKLSAgICBJRF9QLAotICAg
IElEX0gxLAotICAgIElEX0gyLAotICAgIElEX0gzLAotICAgIElEX0g0LAotICAgIElEX0g1LAot
ICAgIElEX0g2LAotICAgIElEX1VMLAotICAgIElEX09MLAotICAgIElEX0RJUiwKLSAgICBJRF9N
RU5VLAotICAgIElEX1BSRSwKLSAgICBJRF9QTEFJTlRFWFQsCi0gICAgSURfREwsCi0gICAgSURf
RElWLAotICAgIElEX0xBWUVSLAotICAgIElEX0NFTlRFUiwKLSAgICBJRF9OT1NDUklQVCwKLSAg
ICBJRF9OT0ZSQU1FUywKLSAgICBJRF9CTE9DS1FVT1RFLAotICAgIElEX0ZPUk0sCi0gICAgSURf
SVNJTkRFWCwKLSAgICBJRF9IUiwKLSAgICBJRF9UQUJMRSwKLSAgICBJRF9GSUVMRFNFVCwKLSAg
ICBJRF9BRERSRVNTLAotICAgIElEX1RULAotICAgIElEX0ksCi0gICAgSURfQiwKLSAgICBJRF9V
LAotICAgIElEX1MsCi0gICAgSURfU1RSSUtFLAotICAgIElEX0JJRywKLSAgICBJRF9TTUFMTCwK
LSAgICBJRF9FTSwKLSAgICBJRF9TVFJPTkcsCi0gICAgSURfREZOLAotICAgIElEX0NPREUsCi0g
ICAgSURfU0FNUCwKLSAgICBJRF9LQkQsCi0gICAgSURfVkFSLAotICAgIElEX0NJVEUsCi0gICAg
SURfQUJCUiwKLSAgICBJRF9BQ1JPTllNLAotICAgIElEX0EsCi0gICAgSURfQ0FOVkFTLAotICAg
IElEX0lNRywKLSAgICBJRF9BUFBMRVQsCi0gICAgSURfT0JKRUNULAotICAgIElEX0VNQkVELAot
ICAgIElEX0ZPTlQsCi0gICAgSURfQkFTRUZPTlQsCi0gICAgSURfQlIsCi0gICAgSURfU0NSSVBU
LAotICAgIElEX01BUCwKLSAgICBJRF9RLAotICAgIElEX1NVQiwKLSAgICBJRF9TVVAsCi0gICAg
SURfU1BBTiwKLSAgICBJRF9CRE8sCi0gICAgSURfSUZSQU1FLAotICAgIElEX0lOUFVULAotICAg
IElEX0tFWUdFTiwKLSAgICBJRF9TRUxFQ1QsCi0gICAgSURfVEVYVEFSRUEsCi0gICAgSURfTEFC
RUwsCi0gICAgSURfQlVUVE9OLAotICAgIElEX0NPTU1FTlQsCi0gICAgSURfTEksCi0gICAgSURf
RFQsCi0gICAgSURfREQsCi0gICAgSURfWE1QLAotICAgIElEX0lOUywKLSAgICBJRF9ERUwsCi0g
ICAgSURfTk9CUiwKLSAgICBJRF9XQlIsCi0gICAgSURfTUFSUVVFRSwKLSAgICAwCi19OwotCi1z
dGF0aWMgY29uc3QgdXNob3J0IHRhZ19saXN0XzJbXSA9IHsKLSAgICBJRF9DT01NRU5ULAotICAg
IDAKLX07Ci0KLXN0YXRpYyBjb25zdCB1c2hvcnQgdGFnX2xpc3RfM1tdID0gewotICAgIElEX1RF
WFQsCi0gICAgSURfUCwKLSAgICBJRF9IMSwKLSAgICBJRF9IMiwKLSAgICBJRF9IMywKLSAgICBJ
RF9INCwKLSAgICBJRF9INSwKLSAgICBJRF9INiwKLSAgICBJRF9VTCwKLSAgICBJRF9PTCwKLSAg
ICBJRF9ESVIsCi0gICAgSURfTUVOVSwKLSAgICBJRF9QUkUsCi0gICAgSURfUExBSU5URVhULAot
ICAgIElEX0RMLAotICAgIElEX0RJViwKLSAgICBJRF9MQVlFUiwKLSAgICBJRF9DRU5URVIsCi0g
ICAgSURfTk9TQ1JJUFQsCi0gICAgSURfTk9GUkFNRVMsCi0gICAgSURfQkxPQ0tRVU9URSwKLSAg
ICBJRF9GT1JNLAotICAgIElEX0lTSU5ERVgsCi0gICAgSURfSFIsCi0gICAgSURfVEFCTEUsCi0g
ICAgSURfRklFTERTRVQsCi0gICAgSURfQUREUkVTUywKLSAgICBJRF9DT01NRU5ULAotICAgIElE
X0xJLAotICAgIElEX1hNUCwKLSAgICBJRF9NQVJRVUVFLAotICAgIDAKLX07Ci0KLXN0YXRpYyBj
b25zdCB1c2hvcnQgdGFnX2xpc3RfNFtdID0gewotICAgIElEX1RFWFQsCi0gICAgSURfUEFSQU0s
Ci0gICAgSURfUCwKLSAgICBJRF9IMSwKLSAgICBJRF9IMiwKLSAgICBJRF9IMywKLSAgICBJRF9I
NCwKLSAgICBJRF9INSwKLSAgICBJRF9INiwKLSAgICBJRF9VTCwKLSAgICBJRF9PTCwKLSAgICBJ
RF9ESVIsCi0gICAgSURfTUVOVSwKLSAgICBJRF9QUkUsCi0gICAgSURfUExBSU5URVhULAotICAg
IElEX0RMLAotICAgIElEX0RJViwKLSAgICBJRF9MQVlFUiwKLSAgICBJRF9DRU5URVIsCi0gICAg
SURfTk9TQ1JJUFQsCi0gICAgSURfTk9GUkFNRVMsCi0gICAgSURfQkxPQ0tRVU9URSwKLSAgICBJ
RF9GT1JNLAotICAgIElEX0lTSU5ERVgsCi0gICAgSURfSFIsCi0gICAgSURfVEFCTEUsCi0gICAg
SURfRklFTERTRVQsCi0gICAgSURfQUREUkVTUywKLSAgICBJRF9URVhULAotICAgIElEX1RULAot
ICAgIElEX0ksCi0gICAgSURfQiwKLSAgICBJRF9VLAotICAgIElEX1MsCi0gICAgSURfU1RSSUtF
LAotICAgIElEX0JJRywKLSAgICBJRF9TTUFMTCwKLSAgICBJRF9FTSwKLSAgICBJRF9TVFJPTkcs
Ci0gICAgSURfREZOLAotICAgIElEX0NPREUsCi0gICAgSURfU0FNUCwKLSAgICBJRF9LQkQsCi0g
ICAgSURfVkFSLAotICAgIElEX0NJVEUsCi0gICAgSURfQUJCUiwKLSAgICBJRF9BQ1JPTllNLAot
ICAgIElEX0EsCi0gICAgSURfQ0FOVkFTLAotICAgIElEX0lNRywKLSAgICBJRF9BUFBMRVQsCi0g
ICAgSURfT0JKRUNULAotICAgIElEX0VNQkVELAotICAgIElEX0ZPTlQsCi0gICAgSURfQkFTRUZP
TlQsCi0gICAgSURfQlIsCi0gICAgSURfU0NSSVBULAotICAgIElEX01BUCwKLSAgICBJRF9RLAot
ICAgIElEX1NVQiwKLSAgICBJRF9TVVAsCi0gICAgSURfU1BBTiwKLSAgICBJRF9CRE8sCi0gICAg
SURfSUZSQU1FLAotICAgIElEX0lOUFVULAotICAgIElEX1NFTEVDVCwKLSAgICBJRF9URVhUQVJF
QSwKLSAgICBJRF9MQUJFTCwKLSAgICBJRF9CVVRUT04sCi0gICAgSURfQ09NTUVOVCwKLSAgICBJ
RF9MSSwKLSAgICBJRF9YTVAsCi0gICAgSURfTUFSUVVFRSwKLSAgICAwCi19OwotCi1zdGF0aWMg
Y29uc3QgdXNob3J0IHRhZ19saXN0XzdbXSA9IHsKLSAgICBJRF9URVhULAotICAgIElEX09QVEdS
T1VQLAotICAgIElEX09QVElPTiwKLSAgICBJRF9DT01NRU5ULAotICAgIElEX1NDUklQVCwKLSAg
ICAwCi19OwotCi1zdGF0aWMgY29uc3QgdXNob3J0IHRhZ19saXN0XzlbXSA9IHsKLSAgICBJRF9U
SCwKLSAgICBJRF9URCwKLSAgICBJRF9DT01NRU5ULAotICAgIDAKLX07Ci0KLXN0YXRpYyBjb25z
dCB1c2hvcnQgdGFnX2xpc3RfMTBbXSA9IHsKLSAgICBJRF9GUkFNRVNFVCwKLSAgICBJRF9GUkFN
RSwKLSAgICBJRF9DT01NRU5ULAotICAgIDAKLX07Ci0KLXN0YXRpYyBjb25zdCB1c2hvcnQgdGFn
X2xpc3RfMTFbXSA9IHsKLSAgICBJRF9URVhULAotICAgIElEX1NDUklQVCwKLSAgICBJRF9TVFlM
RSwKLSAgICBJRF9NRVRBLAotICAgIElEX0xJTkssCi0gICAgSURfQ09NTUVOVCwKLSAgICAwCi19
OwotCi1ib29sIGNoZWNrX2FycmF5KHVzaG9ydCBjaGlsZCwgY29uc3QgdXNob3J0ICp0YWdMaXN0
KQotewotICAgIGludCBpID0gMDsKLSAgICB3aGlsZSh0YWdMaXN0W2ldICE9IDApCi0gICAgewot
ICAgICAgICBpZih0YWdMaXN0W2ldID09IGNoaWxkKSByZXR1cm4gdHJ1ZTsKLSAgICBpKys7Ci0g
ICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotCi1ib29sIERPTTo6Y2hlY2tDaGlsZCh1c2hv
cnQgdGFnSUQsIHVzaG9ydCBjaGlsZElELCBib29sIHN0cmljdCkKLXsKLSAgICAvL2tkRGVidWco
IDYwMzAgKSA8PCAiY2hlY2tDaGlsZDogIiA8PCB0YWdJRCA8PCAiLyIgPDwgY2hpbGRJRCA8PCBl
bmRsOwotCi0gICAgLy8gIyMjIGFsbG93IGNvbW1lbnRzIGluc2lkZSBBTlkgbm9kZSB0aGF0IGNh
biBjb250YWluIGNoaWxkcmVuCi0KLSAgICAvLyBUcmVhdCBjdXN0b20gZWxlbWVudHMgdGhlIHNh
bWUgYXMgPHNwYW4+LgotICAgIGlmICh0YWdJRCA+IElEX0xBU1RfVEFHKQotICAgICAgICB0YWdJ
RCA9IElEX1NQQU47Ci0gICAgaWYgKGNoaWxkSUQgPiBJRF9MQVNUX1RBRykKLSAgICAgICAgY2hp
bGRJRCA9IElEX1NQQU47Ci0KLSAgICBzd2l0Y2godGFnSUQpCi0gICAgewotICAgIGNhc2UgSURf
VFQ6Ci0gICAgY2FzZSBJRF9JOgotICAgIGNhc2UgSURfQjoKLSAgICBjYXNlIElEX1U6Ci0gICAg
Y2FzZSBJRF9TOgotICAgIGNhc2UgSURfU1RSSUtFOgotICAgIGNhc2UgSURfQklHOgotICAgIGNh
c2UgSURfU01BTEw6Ci0gICAgY2FzZSBJRF9FTToKLSAgICBjYXNlIElEX1NUUk9ORzoKLSAgICBj
YXNlIElEX0RGTjoKLSAgICBjYXNlIElEX0NPREU6Ci0gICAgY2FzZSBJRF9TQU1QOgotICAgIGNh
c2UgSURfS0JEOgotICAgIGNhc2UgSURfVkFSOgotICAgIGNhc2UgSURfQ0lURToKLSAgICBjYXNl
IElEX0FCQlI6Ci0gICAgY2FzZSBJRF9BQ1JPTllNOgotICAgIGNhc2UgSURfU1VCOgotICAgIGNh
c2UgSURfU1VQOgotICAgIGNhc2UgSURfQkRPOgotICAgIGNhc2UgSURfUToKLSAgICBjYXNlIElE
X0xFR0VORDoKLSAgICBjYXNlIElEX0ZPTlQ6Ci0gICAgY2FzZSBJRF9BOgotICAgIGNhc2UgSURf
Tk9CUjoKLSAgICBjYXNlIElEX1dCUjoKLSAgICAgICAgcmV0dXJuIGNoZWNrX2FycmF5KGNoaWxk
SUQsIHRhZ19saXN0XzEpOwotICAgIGNhc2UgSURfUDoKLSAgICAgICAgLy8gUDogKCBfMCB8IFRB
QkxFICkgKgotICAgICAgICByZXR1cm4gY2hlY2tfYXJyYXkoY2hpbGRJRCwgdGFnX2xpc3RfMCkg
fHwgKCFzdHJpY3QgJiYgY2hpbGRJRCA9PSBJRF9UQUJMRSk7Ci0gICAgY2FzZSBJRF9IMToKLSAg
ICBjYXNlIElEX0gyOgotICAgIGNhc2UgSURfSDM6Ci0gICAgY2FzZSBJRF9INDoKLSAgICBjYXNl
IElEX0g1OgotICAgIGNhc2UgSURfSDY6Ci0gICAgICAgIHJldHVybiBjaGVja19hcnJheShjaGls
ZElELCB0YWdfbGlzdF8xKSAmJiAoY2hpbGRJRCA8IElEX0gxIHx8IGNoaWxkSUQgPiBJRF9INik7
Ci0gICAgY2FzZSBJRF9CQVNFRk9OVDoKLSAgICBjYXNlIElEX0JSOgotICAgIGNhc2UgSURfQVJF
QToKLSAgICBjYXNlIElEX0xJTks6Ci0gICAgY2FzZSBJRF9DQU5WQVM6Ci0gICAgY2FzZSBJRF9J
TUc6Ci0gICAgY2FzZSBJRF9QQVJBTToKLSAgICBjYXNlIElEX0hSOgotICAgIGNhc2UgSURfSU5Q
VVQ6Ci0gICAgY2FzZSBJRF9DT0w6Ci0gICAgY2FzZSBJRF9GUkFNRToKLSAgICBjYXNlIElEX0lT
SU5ERVg6Ci0gICAgY2FzZSBJRF9CQVNFOgotICAgIGNhc2UgSURfTUVUQToKLSAgICBjYXNlIElE
X0NPTU1FTlQ6Ci0gICAgICAgIC8vIEJBU0VGT05UOiBFTVBUWQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgY2FzZSBJRF9CT0RZOgotICAgICAgICAvLyBCT0RZOiBfMSAqICsgXzIKLSAgICAg
ICAgcmV0dXJuIGNoZWNrX2FycmF5KGNoaWxkSUQsIHRhZ19saXN0XzEpIHx8IGNoZWNrX2FycmF5
KGNoaWxkSUQsIHRhZ19saXN0XzIpOwotICAgIGNhc2UgSURfQUREUkVTUzoKLSAgICAgICAgLy8g
QUREUkVTUzogKCBfMCB8IFAgKSAqCi0gICAgICAgIHJldHVybiBjaGVja19hcnJheShjaGlsZElE
LCB0YWdfbGlzdF8wKSB8fCBjaGlsZElEID09IElEX1A7Ci0gICAgY2FzZSBJRF9MSToKLSAgICBj
YXNlIElEX0RUOgotICAgIGNhc2UgSURfRElWOgotICAgIGNhc2UgSURfU1BBTjoKLSAgICBjYXNl
IElEX0xBWUVSOgotICAgIGNhc2UgSURfQ0VOVEVSOgotICAgIGNhc2UgSURfQkxPQ0tRVU9URToK
LSAgICBjYXNlIElEX0lOUzoKLSAgICBjYXNlIElEX0RFTDoKLSAgICBjYXNlIElEX0REOgotICAg
IGNhc2UgSURfVEg6Ci0gICAgY2FzZSBJRF9URDoKLSAgICBjYXNlIElEX0lGUkFNRToKLSAgICBj
YXNlIElEX05PRlJBTUVTOgotICAgIGNhc2UgSURfTk9TQ1JJUFQ6Ci0gICAgY2FzZSBJRF9DQVBU
SU9OOgotICAgIGNhc2UgSURfTUFSUVVFRToKLSAgICBjYXNlIElEX1VMOgotICAgIGNhc2UgSURf
T0w6Ci0gICAgY2FzZSBJRF9ESVI6Ci0gICAgY2FzZSBJRF9NRU5VOgotICAgICAgICAvLyBESVY6
IF8xICoKLSAgICAgICAgcmV0dXJuIGNoZWNrX2FycmF5KGNoaWxkSUQsIHRhZ19saXN0XzEpOwot
ICAgIGNhc2UgSURfTUFQOgotCS8vIFdlIGFjY2VwdCBTQ1JJUFQgaW4gY2xpZW50LXNpZGUgaW1h
Z2UgbWFwcyBhcyBhbiBleHRlbnNpb24gdG8gdGhlIERURC4KLSAgICAgICAgLy8gTUFQOiAoIF8z
ICsgfCBBUkVBICsgfCBTQ1JJUFQgKyApCi0gICAgICAgIHJldHVybiBjaGVja19hcnJheShjaGls
ZElELCB0YWdfbGlzdF8zKSB8fAotCSAgICBjaGlsZElEID09IElEX0FSRUEgfHwKLQkgICAgY2hp
bGRJRCA9PSBJRF9TQ1JJUFQ7Ci0gICAgY2FzZSBJRF9PQkpFQ1Q6Ci0gICAgY2FzZSBJRF9FTUJF
RDoKLSAgICBjYXNlIElEX0FQUExFVDoKLSAgICAgICAgLy8gT0JKRUNUOiBfNCAqCi0gICAgICAg
IHJldHVybiBjaGVja19hcnJheShjaGlsZElELCB0YWdfbGlzdF80KTsKLSAgICBjYXNlIElEX1BS
RToKLSAgICBjYXNlIElEX1hNUDoKLSAgICBjYXNlIElEX1BMQUlOVEVYVDoKLSAgICAgICAgLy8g
UFJFOiBfMCAqIC0gXzUKLSAgICAgICAgcmV0dXJuIGNoZWNrX2FycmF5KGNoaWxkSUQsIHRhZ19s
aXN0XzEpOwotICAgIGNhc2UgSURfREw6Ci0gICAgICAgIC8vIERMOiBfNiArCi0gICAgICAgIHJl
dHVybiBjaGVja19hcnJheShjaGlsZElELCB0YWdfbGlzdF8xKTsKLSAgICBjYXNlIElEX0ZPUk06
Ci0gICAgICAgIC8vIEZPUk06IF8xICogLSBGT1JNCi0gICAgICAgIHJldHVybiBjaGVja19hcnJh
eShjaGlsZElELCB0YWdfbGlzdF8xKTsKLSAgICBjYXNlIElEX0xBQkVMOgotICAgICAgICAvLyBM
QUJFTDogXzEgKiAtIExBQkVMCi0gICAgICAgIHJldHVybiBjaGVja19hcnJheShjaGlsZElELCB0
YWdfbGlzdF8xKTsKLSAgICAgICAgLy8gS0VZR0VOIGRvZXMgbm90IHJlYWxseSBhbGxvdyBhbnkg
Y2hpbGRzCi0gICAgICAgIC8vIGZyb20gb3V0c2lkZSwganVzdCBuZWVkIHRoaXMgdG8gYmUgYWJs
ZQotICAgICAgICAvLyB0byBhZGQgdGhlIGtleWxlbmd0aHMgb3Vyc2VsZgotICAgICAgICAvLyBZ
ZXMsIGNvbnNpZGVyIGl0IGEgaGFjayAoRGlyaykKLSAgICBjYXNlIElEX0tFWUdFTjoKLSAgICBj
YXNlIElEX1NFTEVDVDoKLSAgICAgICAgLy8gU0VMRUNUOiBfNyArCi0gICAgICAgIHJldHVybiBj
aGVja19hcnJheShjaGlsZElELCB0YWdfbGlzdF83KTsKLSAgICBjYXNlIElEX09QVEdST1VQOgot
ICAgICAgICAvLyBPUFRHUk9VUDogT1BUSU9OICsKLSAgICAgICAgaWYoY2hpbGRJRCA9PSBJRF9P
UFRJT04pIHJldHVybiB0cnVlOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgY2FzZSBJRF9P
UFRJT046Ci0gICAgY2FzZSBJRF9URVhUQVJFQToKLSAgICBjYXNlIElEX1RJVExFOgotICAgIGNh
c2UgSURfU1RZTEU6Ci0gICAgY2FzZSBJRF9TQ1JJUFQ6Ci0gICAgICAgIC8vIE9QVElPTjogVEVY
VAotICAgICAgICBpZihjaGlsZElEID09IElEX1RFWFQpIHJldHVybiB0cnVlOwotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgY2FzZSBJRF9GSUVMRFNFVDoKLSAgICAgICAgLy8gRklFTERTRVQ6
ICggVEVYVCAsIExFR0VORCAsIF8xICogKQotICAgICAgICBpZihjaGlsZElEID09IElEX1RFWFQp
IHJldHVybiB0cnVlOwotICAgICAgICBpZihjaGlsZElEID09IElEX0xFR0VORCkgcmV0dXJuIHRy
dWU7Ci0gICAgICAgIHJldHVybiBjaGVja19hcnJheShjaGlsZElELCB0YWdfbGlzdF8xKTsKLSAg
ICBjYXNlIElEX0JVVFRPTjoKLSAgICAgICAgLy8gQlVUVE9OOiBfMSAqIC0gXzgKLSAgICAgICAg
cmV0dXJuIGNoZWNrX2FycmF5KGNoaWxkSUQsIHRhZ19saXN0XzEpOwotICAgIGNhc2UgSURfVEFC
TEU6Ci0gICAgICAgIC8vIFRBQkxFOiAoIENBUFRJT04gPyAsICggQ09MICogfCBDT0xHUk9VUCAq
ICkgLCBUSEVBRCA/ICwgVEZPT1QgPyAsIFRCT0RZICsgKQotICAgICAgICBzd2l0Y2goY2hpbGRJ
RCkKLSAgICAgICAgewotICAgICAgICBjYXNlIElEX0NBUFRJT046Ci0gICAgICAgIGNhc2UgSURf
Q09MOgotICAgICAgICBjYXNlIElEX0NPTEdST1VQOgotICAgICAgICBjYXNlIElEX1RIRUFEOgot
ICAgICAgICBjYXNlIElEX1RGT09UOgotICAgICAgICBjYXNlIElEX1RCT0RZOgotICAgICAgICBj
YXNlIElEX1RFWFQ6Ci0gICAgICAgIGNhc2UgSURfRk9STToKLSAgICAgICAgY2FzZSBJRF9DT01N
RU5UOgotICAgICAgICBjYXNlIElEX1NDUklQVDoKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0g
ICAgY2FzZSBJRF9USEVBRDoKLSAgICBjYXNlIElEX1RGT09UOgotICAgIGNhc2UgSURfVEJPRFk6
Ci0gICAgICAgIC8vIFRIRUFEOiBUUiArCi0gICAgICAgIGlmKGNoaWxkSUQgPT0gSURfRk9STSB8
fCBjaGlsZElEID09IElEX1RSIHx8IGNoaWxkSUQgPT0gSURfQ09NTUVOVCB8fAotICAgICAgICAg
ICBjaGlsZElEID09IElEX1NDUklQVCkgCi0gICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgY2FzZSBJRF9DT0xHUk9VUDoKLSAgICAgICAgLy8gQ09MR1JP
VVA6IENPTCAqCi0gICAgICAgIGlmKGNoaWxkSUQgPT0gSURfQ09MIHx8IGNoaWxkSUQgPT0gSURf
Q09NTUVOVCkgcmV0dXJuIHRydWU7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBjYXNlIElE
X1RSOgotICAgICAgICAvLyBUUjogXzkgKwotICAgICAgICBpZiAoY2hpbGRJRCA9PSBJRF9TQ1JJ
UFQgfHwgY2hpbGRJRCA9PSBJRF9GT1JNKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgIHJldHVybiBjaGVja19hcnJheShjaGlsZElELCB0YWdfbGlzdF85KTsKLSAgICBjYXNlIElE
X0ZSQU1FU0VUOgotICAgICAgICAvLyBGUkFNRVNFVDogKCBfMTAgKyAmIE5PRlJBTUVTID8gKQot
ICAgICAgICByZXR1cm4gY2hlY2tfYXJyYXkoY2hpbGRJRCwgdGFnX2xpc3RfMTApOwotICAgICAg
ICByZXR1cm4gKGNoaWxkSUQgPT0gSURfTk9GUkFNRVMpOwotICAgIGNhc2UgSURfSEVBRDoKLSAg
ICAgICAgLy8gSEVBRDogKCBUSVRMRSAmIElTSU5ERVggPyAmIEJBU0UgPyApICsgXzExCi0gICAg
ICAgIGlmKGNoaWxkSUQgPT0gSURfVElUTEUgfHwgY2hpbGRJRCA9PSBJRF9JU0lOREVYIHx8IGNo
aWxkSUQgPT0gSURfQkFTRSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICByZXR1
cm4gY2hlY2tfYXJyYXkoY2hpbGRJRCwgdGFnX2xpc3RfMTEpOwotICAgIGNhc2UgSURfSFRNTDoK
LSAgICAgICAgLy8gSFRNTDogKCBIRUFEICwgQ09NTUVOVCwgKCBCT0RZIHwgKCBGUkFNRVNFVCAm
IE5PRlJBTUVTID8gKSApICkKLSAgICAgICAgc3dpdGNoKGNoaWxkSUQpCi0gICAgICAgIHsKLSAg
ICAgICAgY2FzZSBJRF9IRUFEOgotICAgICAgICBjYXNlIElEX0NPTU1FTlQ6Ci0gICAgICAgIGNh
c2UgSURfQk9EWToKLSAgICAgICAgY2FzZSBJRF9GUkFNRVNFVDoKLSAgICAgICAgY2FzZSBJRF9O
T0ZSQU1FUzoKLSAgICAgICAgY2FzZSBJRF9TQ1JJUFQ6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
fQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGtkRGVidWcoIDYwMzAgKSA8PCAidW5oYW5kbGVkIHRh
ZyBpbiBkdGQuY3BwOmNoZWNrQ2hpbGQoKTogdGFnSUQ9IiA8PCB0YWdJRCA8PCAiISIgPDwgZW5k
bDsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotdm9pZCBET006OmFkZEZvcmJp
ZGRlbihpbnQgdGFnSWQsIHVzaG9ydCAqZm9yYmlkZGVuVGFncykKLXsKLSAgICBzd2l0Y2godGFn
SWQpCi0gICAgewotICAgIGNhc2UgSURfTEFCRUw6Ci0gICAgICAgIGZvcmJpZGRlblRhZ3NbSURf
TEFCRUxdKys7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSURfQlVUVE9OOgotICAgICAgICBm
b3JiaWRkZW5UYWdzW0lEX0FdKys7Ci0gICAgICAgIGZvcmJpZGRlblRhZ3NbSURfSU5QVVRdKys7
Ci0gICAgICAgIGZvcmJpZGRlblRhZ3NbSURfU0VMRUNUXSsrOwotICAgICAgICBmb3JiaWRkZW5U
YWdzW0lEX1RFWFRBUkVBXSsrOwotICAgICAgICBmb3JiaWRkZW5UYWdzW0lEX0xBQkVMXSsrOwot
ICAgICAgICBmb3JiaWRkZW5UYWdzW0lEX0JVVFRPTl0rKzsKLSAgICAgICAgZm9yYmlkZGVuVGFn
c1tJRF9GT1JNXSsrOwotICAgICAgICBmb3JiaWRkZW5UYWdzW0lEX0lTSU5ERVhdKys7Ci0gICAg
ICAgIGZvcmJpZGRlblRhZ3NbSURfRklFTERTRVRdKys7Ci0gICAgICAgIGZvcmJpZGRlblRhZ3Nb
SURfSUZSQU1FXSsrOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVh
azsKLSAgICB9Ci19Ci0KLXZvaWQgRE9NOjpyZW1vdmVGb3JiaWRkZW4oaW50IHRhZ0lkLCB1c2hv
cnQgKmZvcmJpZGRlblRhZ3MpCi17Ci0gICAgc3dpdGNoKHRhZ0lkKQotICAgIHsKLSAgICBjYXNl
IElEX0xBQkVMOgotICAgICAgICBmb3JiaWRkZW5UYWdzW0lEX0xBQkVMXS0tOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIElEX0JVVFRPTjoKLSAgICAgICAgZm9yYmlkZGVuVGFnc1tJRF9BXS0t
OwotICAgICAgICBmb3JiaWRkZW5UYWdzW0lEX0lOUFVUXS0tOwotICAgICAgICBmb3JiaWRkZW5U
YWdzW0lEX1NFTEVDVF0tLTsKLSAgICAgICAgZm9yYmlkZGVuVGFnc1tJRF9URVhUQVJFQV0tLTsK
LSAgICAgICAgZm9yYmlkZGVuVGFnc1tJRF9MQUJFTF0tLTsKLSAgICAgICAgZm9yYmlkZGVuVGFn
c1tJRF9CVVRUT05dLS07Ci0gICAgICAgIGZvcmJpZGRlblRhZ3NbSURfRk9STV0tLTsKLSAgICAg
ICAgZm9yYmlkZGVuVGFnc1tJRF9JU0lOREVYXS0tOwotICAgICAgICBmb3JiaWRkZW5UYWdzW0lE
X0ZJRUxEU0VUXS0tOwotICAgICAgICBmb3JiaWRkZW5UYWdzW0lEX0lGUkFNRV0tLTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi0KLSNp
ZiAwCi0KLQotc3RydWN0IGF0dHJfcHJpdiB7Ci0gICAgYXR0cl9wcml2KCkgeyBpZCA9IGxlbiA9
IDAsIHZhbCA9IDA7IH0KLSAgICBhdHRyX3ByaXYodXNob3J0IGksIGNvbnN0IFFDaGFyICp2LCB1
c2hvcnQgbCkKLSAgICB7IGlkID1pOyBsZW4gPSBsLCB2YWwgPSB2OyB9Ci0gICAgdXNob3J0IGlk
OwotICAgIGNvbnN0IFFDaGFyICp2YWw7Ci0gICAgdXNob3J0IGxlbjsKLX07Ci0KLURPTVN0cmlu
ZyBmaW5kX2F0dHIodXNob3J0IGlkLCBjb25zdCBhdHRyX3ByaXYgKmF0dHJzKQotewotICAgIGlu
dCBpID0gMDsKLSAgICB3aGlsZShhdHRyc1tpXS5pZCAhPSAwKQotICAgIHsKLSAgICAgICAgaWYo
YXR0cnNbaV0uaWQgPT0gaWQpCi0gICAgICAgICAgICByZXR1cm4gRE9NU3RyaW5nKGF0dHJzW2ld
LnZhbCwgYXR0cnNbaV0ubGVuKTsKLSAgICAgICAgaSsrOwotICAgIH0KLSAgICByZXR1cm4gRE9N
U3RyaW5nKCk7Ci19Ci0KLXN0YXRpYyBjb25zdCBRQ2hhciB2YWx1ZV8xXzAgW10gPSB7ICdOJywn
TycsJ04nLCdFJyB9OwotCi1hdHRyX3ByaXYgYXR0cl9saXN0XzFbXSA9IHsKLSAgICBhdHRyX3By
aXYoQVRUUl9DTEVBUiwgdmFsdWVfMV8wLCA0KQotfTsKLQotc3RhdGljIGNvbnN0IFFDaGFyIHZh
bHVlXzJfMCBbXSA9IHsgJ1InLCdFJywnQycsJ1QnIH07Ci0KLWF0dHJfcHJpdiBhdHRyX2xpc3Rf
MltdID0gewotICAgIGF0dHJfcHJpdihBVFRSX1NIQVBFLCB2YWx1ZV8yXzAsIDQpCi19OwotCi1z
dGF0aWMgY29uc3QgUUNoYXIgdmFsdWVfM18wIFtdID0geyAnUicsJ0UnLCdDJywnVCcgfTsKLQot
YXR0cl9wcml2IGF0dHJfbGlzdF8zW10gPSB7Ci0gICAgYXR0cl9wcml2KEFUVFJfU0hBUEUsIHZh
bHVlXzNfMCwgNCkKLX07Ci0KLXN0YXRpYyBjb25zdCBRQ2hhciB2YWx1ZV80XzAgW10gPSB7ICdE
JywnQScsJ1QnLCdBJyB9OwotCi1hdHRyX3ByaXYgYXR0cl9saXN0XzRbXSA9IHsKLSAgICBhdHRy
X3ByaXYoQVRUUl9WQUxVRVRZUEUsIHZhbHVlXzRfMCwgNCkKLX07Ci0KLXN0YXRpYyBjb25zdCBR
Q2hhciB2YWx1ZV81XzAgW10gPSB7ICdHJywnRScsJ1QnIH07Ci1zdGF0aWMgY29uc3QgUUNoYXIg
dmFsdWVfNV8xIFtdID0geyAnQScsJ1AnLCdQJywnTCcsJ0knLCdDJywnQScsJ1QnLCdJJywnTycs
J04nLCcvJywnWCcsJy0nLCdXJywnVycsJ1cnLCctJywnRicsJ08nLCdSJywnTScsJy0nLCdVJywn
UicsJ0wnLCdFJywnTicsJ0MnLCdPJywnRCcsJ0UnLCdEJyB9OwotCi1hdHRyX3ByaXYgYXR0cl9s
aXN0XzVbXSA9IHsKLSAgICBhdHRyX3ByaXYoQVRUUl9NRVRIT0QsIHZhbHVlXzVfMCwgMyksCi0g
ICAgYXR0cl9wcml2KEFUVFJfRU5DVFlQRSwgdmFsdWVfNV8xLCAzMykKLX07Ci0KLXN0YXRpYyBj
b25zdCBRQ2hhciB2YWx1ZV82XzAgW10gPSB7ICdUJywnRScsJ1gnLCdUJyB9OwotCi1hdHRyX3By
aXYgYXR0cl9saXN0XzZbXSA9IHsKLSAgICBhdHRyX3ByaXYoQVRUUl9UWVBFLCB2YWx1ZV82XzAs
IDQpCi19OwotCi1zdGF0aWMgY29uc3QgUUNoYXIgdmFsdWVfN18wIFtdID0geyAnUycsJ1UnLCdC
JywnTScsJ0knLCdUJyB9OwotCi1hdHRyX3ByaXYgYXR0cl9saXN0XzdbXSA9IHsKLSAgICBhdHRy
X3ByaXYoQVRUUl9UWVBFLCB2YWx1ZV83XzAsIDYpCi19OwotCi1zdGF0aWMgY29uc3QgUUNoYXIg
dmFsdWVfOF8wIFtdID0geyAnMScgfTsKLQotYXR0cl9wcml2IGF0dHJfbGlzdF84W10gPSB7Ci0g
ICAgYXR0cl9wcml2KEFUVFJfU1BBTiwgdmFsdWVfOF8wLCAxKQotfTsKLQotc3RhdGljIGNvbnN0
IFFDaGFyIHZhbHVlXzlfMCBbXSA9IHsgJzEnIH07Ci0KLWF0dHJfcHJpdiBhdHRyX2xpc3RfOVtd
ID0gewotICAgIGF0dHJfcHJpdihBVFRSX1NQQU4sIHZhbHVlXzlfMCwgMSkKLX07Ci0KLXN0YXRp
YyBjb25zdCBRQ2hhciB2YWx1ZV8xMF8wIFtdID0geyAnMScgfTsKLXN0YXRpYyBjb25zdCBRQ2hh
ciB2YWx1ZV8xMF8xIFtdID0geyAnMScgfTsKLQotYXR0cl9wcml2IGF0dHJfbGlzdF8xMFtdID0g
ewotICAgIGF0dHJfcHJpdihBVFRSX1JPV1NQQU4sIHZhbHVlXzEwXzAsIDEpLAotICAgIGF0dHJf
cHJpdihBVFRSX0NPTFNQQU4sIHZhbHVlXzEwXzEsIDEpCi19OwotCi1zdGF0aWMgY29uc3QgUUNo
YXIgdmFsdWVfMTFfMCBbXSA9IHsgJzEnIH07Ci1zdGF0aWMgY29uc3QgUUNoYXIgdmFsdWVfMTFf
MSBbXSA9IHsgJ0EnLCdVJywnVCcsJ08nIH07Ci0KLWF0dHJfcHJpdiBhdHRyX2xpc3RfMTFbXSA9
IHsKLSAgICBhdHRyX3ByaXYoQVRUUl9GUkFNRUJPUkRFUiwgdmFsdWVfMTFfMCwgMSksCi0gICAg
YXR0cl9wcml2KEFUVFJfU0NST0xMSU5HLCB2YWx1ZV8xMV8xLCA0KQotfTsKLQotc3RhdGljIGNv
bnN0IFFDaGFyIHZhbHVlXzEyXzAgW10gPSB7ICcxJyB9Owotc3RhdGljIGNvbnN0IFFDaGFyIHZh
bHVlXzEyXzEgW10gPSB7ICdBJywnVScsJ1QnLCdPJyB9OwotCi1hdHRyX3ByaXYgYXR0cl9saXN0
XzEyW10gPSB7Ci0gICAgYXR0cl9wcml2KEFUVFJfRlJBTUVCT1JERVIsIHZhbHVlXzEyXzAsIDEp
LAotICAgIGF0dHJfcHJpdihBVFRSX1NDUk9MTElORywgdmFsdWVfMTJfMSwgNCkKLX07Ci0KLXN0
YXRpYyBjb25zdCBRQ2hhciB2YWx1ZV8xM18wIFtdID0geyAnLScsJy8nLCcvJywnVycsJzMnLCdD
JywnLycsJy8nLCdEJywnVCcsJ0QnIH07Ci1zdGF0aWMgY29uc3QgUUNoYXIgdmFsdWVfMTNfMSBb
XSA9IHsgJ1QnLCdSJywnQScsJ04nLCdTJywnSScsJ1QnLCdJJywnTycsJ04nLCdBJywnTCcsJy8n
LCcvJywnRScsJ04nIH07Ci0KLWF0dHJfcHJpdiBhdHRyX2xpc3RfMTNbXSA9IHsKLSAgICBhdHRy
X3ByaXYoQVRUUl9WRVJTSU9OLCB2YWx1ZV8xM18wLCAxMSksCi0gICAgYXR0cl9wcml2KEFUVFJf
SFRNTCwgdmFsdWVfMTNfMSwgMTYpCi19OwotCi1ET01TdHJpbmcgRE9NOjpmaW5kRGVmQXR0ck5v
bmUodXNob3J0KQotewotICAgIHJldHVybiBET01TdHJpbmcoKTsKLX07Ci1ET01TdHJpbmcgRE9N
OjpmaW5kRGVmQXR0ckJSKHVzaG9ydCBpZCkKLXsKLSAgICByZXR1cm4gZmluZF9hdHRyKGlkLCBh
dHRyX2xpc3RfMSk7Ci19Ci1ET01TdHJpbmcgRE9NOjpmaW5kRGVmQXR0ckEodXNob3J0IGlkKQot
ewotICAgIHJldHVybiBmaW5kX2F0dHIoaWQsIGF0dHJfbGlzdF8yKTsKLX0KLURPTVN0cmluZyBE
T006OmZpbmREZWZBdHRyQVJFQSh1c2hvcnQgaWQpCi17Ci0gICAgcmV0dXJuIGZpbmRfYXR0cihp
ZCwgYXR0cl9saXN0XzMpOwotfQotRE9NU3RyaW5nIERPTTo6ZmluZERlZkF0dHJQQVJBTSh1c2hv
cnQgaWQpCi17Ci0gICAgcmV0dXJuIGZpbmRfYXR0cihpZCwgYXR0cl9saXN0XzQpOwotfQotRE9N
U3RyaW5nIERPTTo6ZmluZERlZkF0dHJGT1JNKHVzaG9ydCBpZCkKLXsKLSAgICByZXR1cm4gZmlu
ZF9hdHRyKGlkLCBhdHRyX2xpc3RfNSk7Ci19Ci1ET01TdHJpbmcgRE9NOjpmaW5kRGVmQXR0cklO
UFVUKHVzaG9ydCBpZCkKLXsKLSAgICByZXR1cm4gZmluZF9hdHRyKGlkLCBhdHRyX2xpc3RfNik7
Ci19Ci1ET01TdHJpbmcgRE9NOjpmaW5kRGVmQXR0ckJVVFRPTih1c2hvcnQgaWQpCi17Ci0gICAg
cmV0dXJuIGZpbmRfYXR0cihpZCwgYXR0cl9saXN0XzcpOwotfQotRE9NU3RyaW5nIERPTTo6Zmlu
ZERlZkF0dHJDT0xHUk9VUCh1c2hvcnQgaWQpCi17Ci0gICAgcmV0dXJuIGZpbmRfYXR0cihpZCwg
YXR0cl9saXN0XzgpOwotfQotRE9NU3RyaW5nIERPTTo6ZmluZERlZkF0dHJDT0wodXNob3J0IGlk
KQotewotICAgIHJldHVybiBmaW5kX2F0dHIoaWQsIGF0dHJfbGlzdF85KTsKLX0KLURPTVN0cmlu
ZyBET006OmZpbmREZWZBdHRyVEgodXNob3J0IGlkKQotewotICAgIHJldHVybiBmaW5kX2F0dHIo
aWQsIGF0dHJfbGlzdF8xMCk7Ci19Ci1ET01TdHJpbmcgRE9NOjpmaW5kRGVmQXR0ckZSQU1FKHVz
aG9ydCBpZCkKLXsKLSAgICByZXR1cm4gZmluZF9hdHRyKGlkLCBhdHRyX2xpc3RfMTEpOwotfQot
RE9NU3RyaW5nIERPTTo6ZmluZERlZkF0dHJJRlJBTUUodXNob3J0IGlkKQotewotICAgIHJldHVy
biBmaW5kX2F0dHIoaWQsIGF0dHJfbGlzdF8xMik7Ci19Ci1ET01TdHJpbmcgRE9NOjpmaW5kRGVm
QXR0ckhUTUwodXNob3J0IGlkKQotewotICAgIHJldHVybiBmaW5kX2F0dHIoaWQsIGF0dHJfbGlz
dF8xMyk7Ci19Ci0KLSNlbmRpZgpJbmRleDoga2h0bWwvaHRtbC9kdGQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiBraHRtbC9odG1sL2R0ZC5oCmRpZmYgLU4ga2h0bWwvaHRtbC9kdGQuaAotLS0ga2h0
bWwvaHRtbC9kdGQuaAkxMiBBcHIgMjAwNSAyMjo0OTo0MSAtMDAwMAkxLjUKKysrIC9kZXYvbnVs
bAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCkBAIC0xLDU4ICswLDAgQEAKLS8qCi0gKiBUaGlz
IGZpbGUgaXMgcGFydCBvZiB0aGUgRE9NIGltcGxlbWVudGF0aW9uIGZvciBLREUuCi0gKgotICog
KEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKLSAqCi0gKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwot
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
LSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoK
LSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCi0gKiBCb3N0
b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KLSAqCi0gKi8KLSNpZm5kZWYgX0RPTV9kdGRfaF8KLSNk
ZWZpbmUgX0RPTV9kdGRfaF8KLQotI2luY2x1ZGUgImRvbS9kb21fc3RyaW5nLmgiCi0jaW5jbHVk
ZSAibWlzYy9odG1sdGFncy5oIgotCi1uYW1lc3BhY2UgRE9NCi17Ci0KLXZvaWQgYWRkRm9yYmlk
ZGVuKGludCB0YWdJZCwgdXNob3J0ICpmb3JiaWRkZW5UYWdzKTsKLXZvaWQgcmVtb3ZlRm9yYmlk
ZGVuKGludCB0YWdJZCwgdXNob3J0ICpmb3JiaWRkZW5UYWdzKTsKLQotZW51bSB0YWdTdGF0dXMg
eyBPUFRJT05BTCwgUkVRVUlSRUQsIEZPUkJJRERFTiB9OwotCi1ib29sIGNoZWNrQ2hpbGQodXNo
b3J0IHRhZ0lELCB1c2hvcnQgY2hpbGRJRCwgYm9vbCBzdHJpY3QpOwotCi1leHRlcm4gY29uc3Qg
dW5zaWduZWQgc2hvcnQgdGFnUHJpb3JpdHlBcnJheVtdOwotZXh0ZXJuIGNvbnN0IHRhZ1N0YXR1
cyBlbmRUYWdBcnJheVtdOwotCi1pbmxpbmUgdW5zaWduZWQgc2hvcnQgdGFnUHJpb3JpdHkoUV9V
SU5UMzIgdGFnSWQpCi17Ci0gICAgLy8gVHJlYXQgY3VzdG9tIGVsZW1lbnRzIHRoZSBzYW1lIGFz
IDxzcGFuPjsgYWxzbyBkb24ndCByZWFkIHBhc3QgdGhlIGVuZCBvZiB0aGUgYXJyYXkuCi0gICAg
aWYgKHRhZ0lkID4gSURfTEFTVF9UQUcpCi0gICAgICAgIHJldHVybiB0YWdQcmlvcml0eUFycmF5
W0lEX1NQQU5dOwotICAgIHJldHVybiB0YWdQcmlvcml0eUFycmF5W3RhZ0lkXTsKLX0KLQotaW5s
aW5lIHRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudChRX1VJTlQzMiB0YWdJZCkKLXsKLSAgICAv
LyBUcmVhdCBjdXN0b20gZWxlbWVudHMgdGhlIHNhbWUgYXMgPHNwYW4+OyBhbHNvIGRvbid0IHJl
YWQgcGFzdCB0aGUgZW5kIG9mIHRoZSBhcnJheS4KLSAgICBpZiAodGFnSWQgPiBJRF9MQVNUX1RB
RykKLSAgICAgICAgcmV0dXJuIGVuZFRhZ0FycmF5W0lEX1NQQU5dOwotICAgIHJldHVybiBlbmRU
YWdBcnJheVt0YWdJZF07Ci19Ci0KLX0gLy9uYW1lc3BhY2UgRE9NCi0jZW5kaWYKSW5kZXg6IGto
dG1sL2h0bWwvaHRtbF9iYXNlaW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sX2Jhc2VpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS43MgpkaWZmIC11IC1wIC1yMS43MiBraHRtbC9odG1sL2h0bWxfYmFzZWltcGwuY3BwCi0t
LSBraHRtbC9odG1sL2h0bWxfYmFzZWltcGwuY3BwCTEyIE1heSAyMDA1IDE3OjExOjIxIC0wMDAw
CTEuNzIKKysrIGtodG1sL2h0bWwvaHRtbF9iYXNlaW1wbC5jcHAJOSBKdWwgMjAwNSAwMjo0Mjo1
NyAtMDAwMApAQCAtNDgsNyArNDgsNyBAQCB1c2luZyBuYW1lc3BhY2UgRE9NOwogdXNpbmcgbmFt
ZXNwYWNlIGtodG1sOwogCiBIVE1MQm9keUVsZW1lbnRJbXBsOjpIVE1MQm9keUVsZW1lbnRJbXBs
KERvY3VtZW50UHRyICpkb2MpCi0gICAgOiBIVE1MRWxlbWVudEltcGwoZG9jKSwgbV9saW5rRGVj
bCgwKQorICAgIDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6Ym9keSgpLCBkb2MpLCBtX2xp
bmtEZWNsKDApCiB7CiB9CiAKQEAgLTYxLDExICs2MSw2IEBAIEhUTUxCb2R5RWxlbWVudEltcGw6
On5IVE1MQm9keUVsZW1lbnRJbXAKICAgICB9CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MQm9keUVs
ZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0JPRFk7Ci19Ci0KIHZvaWQg
SFRNTEJvZHlFbGVtZW50SW1wbDo6Y3JlYXRlTGlua0RlY2woKQogewogICAgIG1fbGlua0RlY2wg
PSBuZXcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25JbXBsOwpAQCAtMjg5LDcgKzI4NCwxOCBA
QCB2b2lkIEhUTUxCb2R5RWxlbWVudEltcGw6OnNldFZMaW5rKGNvbnN0CiAvLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCiAKIEhUTUxGcmFtZUVsZW1lbnRJbXBsOjpIVE1MRnJhbWVFbGVtZW50SW1wbChEb2N1
bWVudFB0ciAqZG9jKQotICAgIDogSFRNTEVsZW1lbnRJbXBsKGRvYykKKyAgICA6IEhUTUxFbGVt
ZW50SW1wbChIVE1MTmFtZXM6OmZyYW1lKCksIGRvYykKK3sKKyAgICBpbml0KCk7Cit9CisKK0hU
TUxGcmFtZUVsZW1lbnRJbXBsOjpIVE1MRnJhbWVFbGVtZW50SW1wbChjb25zdCBRdWFsaWZpZWRO
YW1lJiB0YWdOYW1lLCBEb2N1bWVudFB0ciAqZG9jKQorICAgIDogSFRNTEVsZW1lbnRJbXBsKHRh
Z05hbWUsIGRvYykKK3sKKyAgICBpbml0KCk7Cit9CisKK3ZvaWQgSFRNTEZyYW1lRWxlbWVudElt
cGw6OmluaXQoKQogewogICAgIG1fZnJhbWVCb3JkZXIgPSB0cnVlOwogICAgIG1fZnJhbWVCb3Jk
ZXJTZXQgPSBmYWxzZTsKQEAgLTMwMywxMSArMzA5LDYgQEAgSFRNTEZyYW1lRWxlbWVudEltcGw6
On5IVE1MRnJhbWVFbGVtZW50SQogewogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTEZyYW1lRWxlbWVu
dEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfRlJBTUU7Ci19Ci0KIGJvb2wgSFRN
TEZyYW1lRWxlbWVudEltcGw6OmlzVVJMQWxsb3dlZChjb25zdCBBdG9taWNTdHJpbmcgJlVSTFN0
cmluZykgY29uc3QKIHsKICAgICBpZiAoVVJMU3RyaW5nLmlzRW1wdHkoKSkgewpAQCAtNDgyLDcg
KzQ4Myw3IEBAIHZvaWQgSFRNTEZyYW1lRWxlbWVudEltcGw6OmF0dGFjaCgpCiAKICAgICAvLyBp
bmhlcml0IGRlZmF1bHQgc2V0dGluZ3MgZnJvbSBwYXJlbnQgZnJhbWVzZXQKICAgICBmb3IgKE5v
ZGVJbXBsICpub2RlID0gcGFyZW50Tm9kZSgpOyBub2RlOyBub2RlID0gbm9kZS0+cGFyZW50Tm9k
ZSgpKQotICAgICAgICBpZiAobm9kZS0+aWQoKSA9PSBJRF9GUkFNRVNFVCkgeworICAgICAgICBp
ZiAobm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZyYW1lc2V0KCkpKSB7CiAgICAgICAgICAg
ICBIVE1MRnJhbWVTZXRFbGVtZW50SW1wbCogZnJhbWVzZXQgPSBzdGF0aWNfY2FzdDxIVE1MRnJh
bWVTZXRFbGVtZW50SW1wbCo+KG5vZGUpOwogICAgICAgICAgICAgaWYgKCFtX2ZyYW1lQm9yZGVy
U2V0KQogICAgICAgICAgICAgICAgIG1fZnJhbWVCb3JkZXIgPSBmcmFtZXNldC0+ZnJhbWVCb3Jk
ZXIoKTsKQEAgLTY2MSw3ICs2NjIsNyBAQCB2b2lkIEhUTUxGcmFtZUVsZW1lbnRJbXBsOjpzZXRT
cmMoY29uc3QgCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxGcmFtZVNldEVsZW1lbnRJbXBs
OjpIVE1MRnJhbWVTZXRFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAgIDogSFRNTEVs
ZW1lbnRJbXBsKGRvYykKKyAgICA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6OmZyYW1lc2V0
KCksIGRvYykKIHsKICAgICAvLyBkZWZhdWx0IHZhbHVlIGZvciByb3dzIGFuZCBjb2xzLi4uCiAg
ICAgbV90b3RhbFJvd3MgPSAxOwpAQCAtNjg1LDkgKzY4NiwxMSBAQCBIVE1MRnJhbWVTZXRFbGVt
ZW50SW1wbDo6fkhUTUxGcmFtZVNldEVsCiAgICAgICAgIGRlbGV0ZSBbXSBtX2NvbHM7CiB9CiAK
LU5vZGVJbXBsOjpJZCBIVE1MRnJhbWVTZXRFbGVtZW50SW1wbDo6aWQoKSBjb25zdAorYm9vbCBI
VE1MRnJhbWVTZXRFbGVtZW50SW1wbDo6Y2hlY2tEVEQoY29uc3QgTm9kZUltcGwqIG5ld0NoaWxk
KQogewotICAgIHJldHVybiBJRF9GUkFNRVNFVDsKKyAgICAvLyBGSVhNRTogT2xkIGNvZGUgaGFk
IGFkamFjZW50IGRvdWJsZSByZXR1cm5zIGFuZCBzZWVtZWQgdG8gd2FudCB0byBkbyBzb21ldGhp
bmcgd2l0aCBOT0ZSQU1FUyAoYnV0IGRpZG4ndCkuCisgICAgLy8gV2hhdCBpcyB0aGUgY29ycmVj
dCBiZWhhdmlvcj8KKyAgICByZXR1cm4gbmV3Q2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpm
cmFtZXNldCgpKSB8fCBuZXdDaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZyYW1lKCkpOwog
fQogCiB2b2lkIEhUTUxGcmFtZVNldEVsZW1lbnRJbXBsOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShN
YXBwZWRBdHRyaWJ1dGVJbXBsICphdHRyKQpAQCAtNzUyLDggKzc1NSw3IEBAIHZvaWQgSFRNTEZy
YW1lU2V0RWxlbWVudEltcGw6OmF0dGFjaCgpCiAgICAgSFRNTEVsZW1lbnRJbXBsKiBub2RlID0g
c3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsKj4ocGFyZW50Tm9kZSgpKTsKICAgICB3aGlsZShu
b2RlKQogICAgIHsKLSAgICAgICAgaWYobm9kZS0+aWQoKSA9PSBJRF9GUkFNRVNFVCkKLSAgICAg
ICAgeworICAgICAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZyYW1lc2V0KCkp
KSB7CiAgICAgICAgICAgICBIVE1MRnJhbWVTZXRFbGVtZW50SW1wbCogZnJhbWVzZXQgPSBzdGF0
aWNfY2FzdDxIVE1MRnJhbWVTZXRFbGVtZW50SW1wbCo+KG5vZGUpOwogICAgICAgICAgICAgaWYo
IWZyYW1lQm9yZGVyU2V0KSAgZnJhbWVib3JkZXIgPSBmcmFtZXNldC0+ZnJhbWVCb3JkZXIoKTsK
ICAgICAgICAgICAgIGlmKCFub3Jlc2l6ZSkgIG5vcmVzaXplID0gZnJhbWVzZXQtPm5vUmVzaXpl
KCk7CkBAIC04MTcsNyArODE5LDcgQEAgdm9pZCBIVE1MRnJhbWVTZXRFbGVtZW50SW1wbDo6c2V0
Um93cyhjbwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MSGVhZEVsZW1lbnRJbXBsOjpIVE1M
SGVhZEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0gICAgOiBIVE1MRWxlbWVudEltcGwo
ZG9jKQorICAgIDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6aGVhZCgpLCBkb2MpCiB7CiB9
CiAKQEAgLTgyNSwxMSArODI3LDYgQEAgSFRNTEhlYWRFbGVtZW50SW1wbDo6fkhUTUxIZWFkRWxl
bWVudEltcAogewogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTEhlYWRFbGVtZW50SW1wbDo6aWQoKSBj
b25zdAotewotICAgIHJldHVybiBJRF9IRUFEOwotfQotCiBET01TdHJpbmcgSFRNTEhlYWRFbGVt
ZW50SW1wbDo6cHJvZmlsZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGdldEF0dHJpYnV0ZShBVFRS
X1BST0ZJTEUpOwpAQCAtODQwLDEwICs4MzcsMTggQEAgdm9pZCBIVE1MSGVhZEVsZW1lbnRJbXBs
OjpzZXRQcm9maWxlKGNvbgogICAgIHNldEF0dHJpYnV0ZShBVFRSX1BST0ZJTEUsIHZhbHVlKTsK
IH0KIAorYm9vbCBIVE1MSGVhZEVsZW1lbnRJbXBsOjpjaGVja0RURChjb25zdCBOb2RlSW1wbCog
bmV3Q2hpbGQpCit7CisgICAgcmV0dXJuIG5ld0NoaWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
dGl0bGUoKSkgfHwgbmV3Q2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppc2luZGV4KCkpIHx8
CisgICAgICAgICAgIG5ld0NoaWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YmFzZSgpKSB8fCBu
ZXdDaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnNjcmlwdCgpKSB8fAorICAgICAgICAgICBu
ZXdDaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnN0eWxlKCkpIHx8IG5ld0NoaWxkLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6bWV0YSgpKSB8fAorICAgICAgICAgICBuZXdDaGlsZC0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OmxpbmsoKSkgfHwgbmV3Q2hpbGQtPmlzVGV4dE5vZGUoKTsKK30KKwog
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MSHRtbEVsZW1lbnRJbXBsOjpIVE1MSHRtbEVsZW1l
bnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0gICAgOiBIVE1MRWxlbWVudEltcGwoZG9jKQorICAg
IDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6aHRtbCgpLCBkb2MpCiB7CiB9CiAKQEAgLTg1
MSwxMSArODU2LDYgQEAgSFRNTEh0bWxFbGVtZW50SW1wbDo6fkhUTUxIdG1sRWxlbWVudEltcAog
ewogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTEh0bWxFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewot
ICAgIHJldHVybiBJRF9IVE1MOwotfQotCiBET01TdHJpbmcgSFRNTEh0bWxFbGVtZW50SW1wbDo6
dmVyc2lvbigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGdldEF0dHJpYnV0ZShBVFRSX1ZFUlNJT04p
OwpAQCAtODY2LDkgKzg2NiwxNyBAQCB2b2lkIEhUTUxIdG1sRWxlbWVudEltcGw6OnNldFZlcnNp
b24oY29uCiAgICAgc2V0QXR0cmlidXRlKEFUVFJfVkVSU0lPTiwgdmFsdWUpOwogfQogCitib29s
IEhUTUxIdG1sRWxlbWVudEltcGw6OmNoZWNrRFREKGNvbnN0IE5vZGVJbXBsKiBuZXdDaGlsZCkK
K3sKKyAgICAvLyBGSVhNRTogV2h5IGlzIDxzY3JpcHQ+IGFsbG93ZWQgaGVyZT8KKyAgICByZXR1
cm4gbmV3Q2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoZWFkKCkpIHx8IG5ld0NoaWxkLT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6Ym9keSgpKSB8fAorICAgICAgICAgICBuZXdDaGlsZC0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OmZyYW1lc2V0KCkpIHx8IG5ld0NoaWxkLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6bm9mcmFtZXMoKSkgfHwKKyAgICAgICAgICAgbmV3Q2hpbGQtPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjpzY3JpcHQoKSk7Cit9CisKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSFRNTElG
cmFtZUVsZW1lbnRJbXBsOjpIVE1MSUZyYW1lRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykg
OiBIVE1MRnJhbWVFbGVtZW50SW1wbChkb2MpCitIVE1MSUZyYW1lRWxlbWVudEltcGw6OkhUTUxJ
RnJhbWVFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKSA6IEhUTUxGcmFtZUVsZW1lbnRJbXBs
KEhUTUxOYW1lczo6aWZyYW1lKCksIGRvYykKIHsKICAgICBtX2ZyYW1lQm9yZGVyID0gZmFsc2U7
CiAgICAgbV9tYXJnaW5XaWR0aCA9IC0xOwpAQCAtODgwLDExICs4ODgsNiBAQCBIVE1MSUZyYW1l
RWxlbWVudEltcGw6On5IVE1MSUZyYW1lRWxlbWVuCiB7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1M
SUZyYW1lRWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfSUZSQU1FOwot
fQotCiBib29sIEhUTUxJRnJhbWVFbGVtZW50SW1wbDo6bWFwVG9FbnRyeShOb2RlSW1wbDo6SWQg
YXR0ciwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3QKIHsKICAgICBzd2l0Y2gg
KGF0dHIpIHsKSW5kZXg6IGtodG1sL2h0bWwvaHRtbF9iYXNlaW1wbC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbF9iYXNlaW1wbC5oLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjI3CmRpZmYgLXUgLXAgLXIxLjI3IGtodG1sL2h0bWwvaHRtbF9i
YXNlaW1wbC5oCi0tLSBraHRtbC9odG1sL2h0bWxfYmFzZWltcGwuaAkxMSBNYXkgMjAwNSAwNTo0
OTozNCAtMDAwMAkxLjI3CisrKyBraHRtbC9odG1sL2h0bWxfYmFzZWltcGwuaAk5IEp1bCAyMDA1
IDAyOjQyOjU3IC0wMDAwCkBAIC0yNiw3ICsyNiw2IEBACiAjaWZuZGVmIEhUTUxfQkFTRUlNUExf
SAogI2RlZmluZSBIVE1MX0JBU0VJTVBMX0gKIAotI2luY2x1ZGUgImh0bWwvZHRkLmgiCiAjaW5j
bHVkZSAiaHRtbC9odG1sX2VsZW1lbnRpbXBsLmgiCiAjaW5jbHVkZSAibWlzYy9raHRtbGxheW91
dC5oIgogCkBAIC01NSw4ICs1NCw5IEBAIHB1YmxpYzoKICAgICBIVE1MQm9keUVsZW1lbnRJbXBs
KERvY3VtZW50UHRyICpkb2MpOwogICAgIH5IVE1MQm9keUVsZW1lbnRJbXBsKCk7CiAKLSAgICB2
aXJ0dWFsIElkIGlkKCkgY29uc3Q7Ci0KKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFn
UmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQorICAgIHZp
cnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMTA7IH0KKyAgICAKICAgICB2
aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShOb2RlSW1wbDo6SWQgYXR0ciwgTWFwcGVkQXR0cmlidXRl
RW50cnkmIHJlc3VsdCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmli
dXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKik7CiAKQEAgLTkyLDExICs5MiwxNCBAQCBjbGFzcyBI
VE1MRnJhbWVFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MCiAKIHB1YmxpYzoKICAgICBIVE1MRnJh
bWVFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKTsKLQorICAgIEhUTUxGcmFtZUVsZW1lbnRJ
bXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50UHRyKiBkb2MpOwogICAg
IH5IVE1MRnJhbWVFbGVtZW50SW1wbCgpOwogCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0Owor
ICAgIHZvaWQgaW5pdCgpOwogCisgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVp
cmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzRm9yYmlkZGVuOyB9CisgICAgdmlydHVh
bCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAwOyB9CisgIAogICAgIHZpcnR1YWwg
dm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICopOwogICAgIHZp
cnR1YWwgdm9pZCBhdHRhY2goKTsKICAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoKCk7CkBAIC0xNjgs
MTAgKzE3MSwxMSBAQCBjbGFzcyBIVE1MRnJhbWVTZXRFbGVtZW50SW1wbCA6IHB1YmxpYyBICiAg
ICAgZnJpZW5kIGNsYXNzIGtodG1sOjpSZW5kZXJGcmFtZVNldDsKIHB1YmxpYzoKICAgICBIVE1M
RnJhbWVTZXRFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKTsKLQogICAgIH5IVE1MRnJhbWVT
ZXRFbGVtZW50SW1wbCgpOwogCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OworICAgIHZpcnR1
YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0
YXR1c1JlcXVpcmVkOyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJl
dHVybiAxMDsgfQorICAgIHZpcnR1YWwgYm9vbCBjaGVja0RURChjb25zdCBOb2RlSW1wbCogbmV3
Q2hpbGQpOwogCiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0
dHJpYnV0ZUltcGwgKik7CiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaCgpOwpAQCAtMjE2LDEwICsy
MjAsMTEgQEAgY2xhc3MgSFRNTEhlYWRFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MRQogewogcHVi
bGljOgogICAgIEhUTUxIZWFkRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYyk7Ci0KICAgICB+
SFRNTEhlYWRFbGVtZW50SW1wbCgpOwogCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OworICAg
IHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJu
IFRhZ1N0YXR1c09wdGlvbmFsOyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25z
dCB7IHJldHVybiAxMDsgfQorICAgIHZpcnR1YWwgYm9vbCBjaGVja0RURChjb25zdCBOb2RlSW1w
bCogbmV3Q2hpbGQpOwogCiAgICAgRE9NU3RyaW5nIHByb2ZpbGUoKSBjb25zdDsKICAgICB2b2lk
IHNldFByb2ZpbGUoY29uc3QgRE9NU3RyaW5nICYpOwpAQCAtMjMzLDcgKzIzOCw5IEBAIHB1Ymxp
YzoKICAgICBIVE1MSHRtbEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpOwogICAgIH5IVE1M
SHRtbEVsZW1lbnRJbXBsKCk7CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CisgICAgdmly
dHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFn
U3RhdHVzUmVxdWlyZWQ7IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsg
cmV0dXJuIDExOyB9CisgICAgdmlydHVhbCBib29sIGNoZWNrRFREKGNvbnN0IE5vZGVJbXBsKiBu
ZXdDaGlsZCk7CiAKICAgICBET01TdHJpbmcgdmVyc2lvbigpIGNvbnN0OwogICAgIHZvaWQgc2V0
VmVyc2lvbihjb25zdCBET01TdHJpbmcgJik7CkBAIC0yNDYsMTAgKzI1MywxMCBAQCBjbGFzcyBI
VE1MSUZyYW1lRWxlbWVudEltcGwgOiBwdWJsaWMgSFRNCiB7CiBwdWJsaWM6CiAgICAgSFRNTElG
cmFtZUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpOwotCiAgICAgfkhUTUxJRnJhbWVFbGVt
ZW50SW1wbCgpOwogCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OworICAgIHZpcnR1YWwgSFRN
TFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1Jl
cXVpcmVkOyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAx
OyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShOb2RlSW1wbDo6SWQgYXR0ciwgTWFw
cGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNl
TWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIpOwpJbmRleDoga2h0bWwv
aHRtbC9odG1sX2Jsb2NraW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dl
YkNvcmUva2h0bWwvaHRtbC9odG1sX2Jsb2NraW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9u
IDEuMTcKZGlmZiAtdSAtcCAtcjEuMTcga2h0bWwvaHRtbC9odG1sX2Jsb2NraW1wbC5jcHAKLS0t
IGtodG1sL2h0bWwvaHRtbF9ibG9ja2ltcGwuY3BwCTExIE1heSAyMDA1IDA1OjQ5OjM0IC0wMDAw
CTEuMTcKKysrIGtodG1sL2h0bWwvaHRtbF9ibG9ja2ltcGwuY3BwCTkgSnVsIDIwMDUgMDI6NDI6
NTggLTAwMDAKQEAgLTM3LDcgKzM3LDcgQEAgdXNpbmcgbmFtZXNwYWNlIGtodG1sOwogdXNpbmcg
bmFtZXNwYWNlIERPTTsKIAogSFRNTEJsb2NrcXVvdGVFbGVtZW50SW1wbDo6SFRNTEJsb2NrcXVv
dGVFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAgIDogSFRNTEVsZW1lbnRJbXBsKGRv
YykKKyAgICA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6OmJsb2NrcXVvdGUoKSwgZG9jKQog
ewogfQogCkBAIC00NSwxMSArNDUsNiBAQCBIVE1MQmxvY2txdW90ZUVsZW1lbnRJbXBsOjp+SFRN
TEJsb2NrcXVvCiB7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MQmxvY2txdW90ZUVsZW1lbnRJbXBs
OjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0JMT0NLUVVPVEU7Ci19Ci0KIERPTVN0cmlu
ZyBIVE1MQmxvY2txdW90ZUVsZW1lbnRJbXBsOjpjaXRlKCkgY29uc3QKIHsKICAgICByZXR1cm4g
Z2V0QXR0cmlidXRlKEFUVFJfQ0lURSk7CkBAIC02Myw3ICs1OCw3IEBAIHZvaWQgSFRNTEJsb2Nr
cXVvdGVFbGVtZW50SW1wbDo6c2V0Q2l0ZSgKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogSFRNTERp
dkVsZW1lbnRJbXBsOjpIVE1MRGl2RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgICA6
IEhUTUxFbGVtZW50SW1wbChkb2MpCisgICAgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjpk
aXYoKSwgZG9jKQogewogfQogCkBAIC03MSwxMSArNjYsNiBAQCBIVE1MRGl2RWxlbWVudEltcGw6
On5IVE1MRGl2RWxlbWVudEltcGwoCiB7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MRGl2RWxlbWVu
dEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfRElWOwotfQotCiBib29sIEhUTUxE
aXZFbGVtZW50SW1wbDo6bWFwVG9FbnRyeShOb2RlSW1wbDo6SWQgYXR0ciwgTWFwcGVkQXR0cmli
dXRlRW50cnkmIHJlc3VsdCkgY29uc3QKIHsKICAgICBpZiAoYXR0ciA9PSBBVFRSX0FMSUdOKSB7
CkBAIC0xMjAsNyArMTEwLDcgQEAgdm9pZCBIVE1MRGl2RWxlbWVudEltcGw6OnNldEFsaWduKGNv
bnN0IAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MSFJFbGVtZW50SW1wbDo6SFRNTEhSRWxl
bWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50SW1wbChkb2MpCisg
ICAgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjpocigpLCBkb2MpCiB7CiB9CiAKQEAgLTEy
OCwxMSArMTE4LDYgQEAgSFRNTEhSRWxlbWVudEltcGw6On5IVE1MSFJFbGVtZW50SW1wbCgpCiB7
CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MSFJFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAg
IHJldHVybiBJRF9IUjsKLX0KLQogYm9vbCBIVE1MSFJFbGVtZW50SW1wbDo6bWFwVG9FbnRyeShO
b2RlSW1wbDo6SWQgYXR0ciwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3QKIHsK
ICAgICBzd2l0Y2ggKGF0dHIpIHsKQEAgLTI1MiwxMSArMjM3LDIxIEBAIHZvaWQgSFRNTEhSRWxl
bWVudEltcGw6OnNldFdpZHRoKGNvbnN0IEQKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1IVE1M
SGVhZGluZ0VsZW1lbnRJbXBsOjpIVE1MSGVhZGluZ0VsZW1lbnRJbXBsKERvY3VtZW50UHRyICpk
b2MsIHVzaG9ydCBfdGFnaWQpCi0gICAgOiBIVE1MR2VuZXJpY0VsZW1lbnRJbXBsKGRvYywgX3Rh
Z2lkKQorSFRNTEhlYWRpbmdFbGVtZW50SW1wbDo6SFRNTEhlYWRpbmdFbGVtZW50SW1wbChjb25z
dCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudFB0ciAqZG9jKQorICAgIDogSFRNTEVs
ZW1lbnRJbXBsKHRhZ05hbWUsIGRvYykKIHsKIH0KIAorYm9vbCBIVE1MSGVhZGluZ0VsZW1lbnRJ
bXBsOjpjaGVja0RURChjb25zdCBOb2RlSW1wbCogbmV3Q2hpbGQpCit7CisgICAgaWYgKG5ld0No
aWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDEoKSkgfHwgbmV3Q2hpbGQtPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjpoMigpKSB8fAorICAgICAgICBuZXdDaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OmgzKCkpIHx8IG5ld0NoaWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDQoKSkgfHwKKyAg
ICAgICAgbmV3Q2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoNSgpKSB8fCBuZXdDaGlsZC0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6Omg2KCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICByZXR1cm4gaW5FaXRoZXJUYWdMaXN0KG5ld0NoaWxkKTsKK30KKwogRE9NU3RyaW5nIEhUTUxI
ZWFkaW5nRWxlbWVudEltcGw6OmFsaWduKCkgY29uc3QKIHsKICAgICByZXR1cm4gZ2V0QXR0cmli
dXRlKEFUVFJfQUxJR04pOwpAQCAtMjcwLDEzICsyNjUsMTMgQEAgdm9pZCBIVE1MSGVhZGluZ0Vs
ZW1lbnRJbXBsOjpzZXRBbGlnbihjbwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MUGFyYWdy
YXBoRWxlbWVudEltcGw6OkhUTUxQYXJhZ3JhcGhFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9j
KQotICAgIDogSFRNTEVsZW1lbnRJbXBsKGRvYykKKyAgICA6IEhUTUxFbGVtZW50SW1wbChIVE1M
TmFtZXM6OnAoKSwgZG9jKQogewogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTFBhcmFncmFwaEVsZW1l
bnRJbXBsOjppZCgpIGNvbnN0Citib29sIEhUTUxQYXJhZ3JhcGhFbGVtZW50SW1wbDo6Y2hlY2tE
VEQoY29uc3QgTm9kZUltcGwqIG5ld0NoaWxkKQogewotICAgIHJldHVybiBJRF9QOworICAgIHJl
dHVybiBpbklubGluZVRhZ0xpc3QobmV3Q2hpbGQpIHx8IChnZXREb2N1bWVudCgpLT5pbkNvbXBh
dE1vZGUoKSAmJiBuZXdDaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRhYmxlKCkpKTsKIH0K
IAogYm9vbCBIVE1MUGFyYWdyYXBoRWxlbWVudEltcGw6Om1hcFRvRW50cnkoTm9kZUltcGw6Oklk
IGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0CkBAIC0zMjIsOCArMzE3
LDggQEAgdm9pZCBIVE1MUGFyYWdyYXBoRWxlbWVudEltcGw6OnNldEFsaWduKAogCiAvLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCiAKLUhUTUxQcmVFbGVtZW50SW1wbDo6SFRNTFByZUVsZW1lbnRJbXBsKERv
Y3VtZW50UHRyICpkb2MsIHVuc2lnbmVkIHNob3J0IF90YWdpZCkKLSAgICA6IEhUTUxHZW5lcmlj
RWxlbWVudEltcGwoZG9jLCBfdGFnaWQpCitIVE1MUHJlRWxlbWVudEltcGw6OkhUTUxQcmVFbGVt
ZW50SW1wbChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudFB0ciAqZG9jKQor
ICAgIDogSFRNTEVsZW1lbnRJbXBsKHRhZ05hbWUsIGRvYykKIHsKIH0KIApAQCAtMzQzLDE2ICsz
MzgsMTEgQEAgdm9pZCBIVE1MUHJlRWxlbWVudEltcGw6OnNldFdpZHRoKGxvbmcgdwogY29uc3Qg
aW50IGRlZmF1bHRNaW5pbXVtRGVsYXkgPSA2MDsKIAogSFRNTE1hcnF1ZWVFbGVtZW50SW1wbDo6
SFRNTE1hcnF1ZWVFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotOiBIVE1MRWxlbWVudElt
cGwoZG9jKSwKKzogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6bWFycXVlZSgpLCBkb2MpLAog
ICBtX21pbmltdW1EZWxheShkZWZhdWx0TWluaW11bURlbGF5KQogewogfQogCi1Ob2RlSW1wbDo6
SWQgSFRNTE1hcnF1ZWVFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9N
QVJRVUVFOwotfQotCiBib29sIEhUTUxNYXJxdWVlRWxlbWVudEltcGw6Om1hcFRvRW50cnkoTm9k
ZUltcGw6OklkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0CiB7CiAg
ICAgc3dpdGNoIChhdHRyKSB7CkBAIC00MzQsMTkgKzQyNCwzIEBAIHZvaWQgSFRNTE1hcnF1ZWVF
bGVtZW50SW1wbDo6cGFyc2VNYXBwZWQKICAgICAgICAgICAgIEhUTUxFbGVtZW50SW1wbDo6cGFy
c2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CiAgICAgfQogfQotCi0vLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LQotSFRNTExheWVyRWxlbWVudEltcGw6OkhUTUxMYXllckVsZW1lbnRJbXBsKERvY3VtZW50UHRy
ICpkb2MpCi0gICAgOiBIVE1MRGl2RWxlbWVudEltcGwoIGRvYyApCi17Ci19Ci0KLUhUTUxMYXll
ckVsZW1lbnRJbXBsOjp+SFRNTExheWVyRWxlbWVudEltcGwoKQotewotfQotCi1Ob2RlSW1wbDo6
SWQgSFRNTExheWVyRWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfTEFZ
RVI7Ci19CkluZGV4OiBraHRtbC9odG1sL2h0bWxfYmxvY2tpbXBsLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sX2Jsb2NraW1wbC5oLHYKcmV0
cmlldmluZyByZXZpc2lvbiAxLjkKZGlmZiAtdSAtcCAtcjEuOSBraHRtbC9odG1sL2h0bWxfYmxv
Y2tpbXBsLmgKLS0tIGtodG1sL2h0bWwvaHRtbF9ibG9ja2ltcGwuaAkxMSBNYXkgMjAwNSAwNTo0
OTozNCAtMDAwMAkxLjkKKysrIGtodG1sL2h0bWwvaHRtbF9ibG9ja2ltcGwuaAk5IEp1bCAyMDA1
IDAyOjQyOjU4IC0wMDAwCkBAIC0yNiw3ICsyNiw2IEBACiAjZGVmaW5lIEhUTUxfQkxPQ0tJTVBM
X0gKIAogI2luY2x1ZGUgImh0bWxfZWxlbWVudGltcGwuaCIKLSNpbmNsdWRlICJkdGQuaCIKIAog
bmFtZXNwYWNlIERPTSB7CiAKQEAgLTQwLDggKzM5LDkgQEAgcHVibGljOgogICAgIEhUTUxCbG9j
a3F1b3RlRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYyk7CiAgICAgfkhUTUxCbG9ja3F1b3Rl
RWxlbWVudEltcGwoKTsKIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKLQorICAgIHZpcnR1
YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0
YXR1c1JlcXVpcmVkOyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJl
dHVybiA1OyB9CisgICAgCiAgICAgRE9NU3RyaW5nIGNpdGUoKSBjb25zdDsKICAgICB2b2lkIHNl
dENpdGUoY29uc3QgRE9NU3RyaW5nICYpOwogfTsKQEAgLTU1LDggKzU1LDkgQEAgY2xhc3MgSFRN
TERpdkVsZW1lbnRJbXBsIDogcHVibGljIEhUTUxFbAogcHVibGljOgogICAgIEhUTUxEaXZFbGVt
ZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKTsKICAgICB+SFRNTERpdkVsZW1lbnRJbXBsKCk7Ci0K
LSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CisgICAgCisgICAgdmlydHVhbCBIVE1MVGFnU3Rh
dHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzUmVxdWlyZWQ7
IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDU7IH0KICAg
ICAKICAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVF
bnRyeSYgcmVzdWx0KSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1
dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqdG9rZW4pOwpAQCAtNzIsOCArNzMsOSBAQCBjbGFzcyBI
VE1MSFJFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MRWxlCiBwdWJsaWM6CiAgICAgSFRNTEhSRWxl
bWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYyk7CiAgICAgfkhUTUxIUkVsZW1lbnRJbXBsKCk7Ci0K
LSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CisgICAgCisgICAgdmlydHVhbCBIVE1MVGFnU3Rh
dHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzRm9yYmlkZGVu
OyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAwOyB9CiAg
ICAgCiAgICAgdmlydHVhbCBib29sIG1hcFRvRW50cnkoSWQgYXR0ciwgTWFwcGVkQXR0cmlidXRl
RW50cnkmIHJlc3VsdCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmli
dXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKik7CkBAIC05MywxMCArOTUsMTQgQEAgcHVibGljOgog
CiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLWNsYXNzIEhUTUxIZWFkaW5nRWxlbWVudEltcGwgOiBw
dWJsaWMgSFRNTEdlbmVyaWNFbGVtZW50SW1wbAorY2xhc3MgSFRNTEhlYWRpbmdFbGVtZW50SW1w
bCA6IHB1YmxpYyBIVE1MRWxlbWVudEltcGwKIHsKIHB1YmxpYzoKLSAgICBIVE1MSGVhZGluZ0Vs
ZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIHVzaG9ydCBfdGFnaWQpOworICAgIEhUTUxIZWFk
aW5nRWxlbWVudEltcGwoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnRQdHIg
KmRvYyk7CisKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBj
b25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQorICAgIHZpcnR1YWwgaW50IHRhZ1By
aW9yaXR5KCkgY29uc3QgeyByZXR1cm4gNTsgfQorICAgIHZpcnR1YWwgYm9vbCBjaGVja0RURChj
b25zdCBOb2RlSW1wbCogbmV3Q2hpbGQpOwogCiAgICAgRE9NU3RyaW5nIGFsaWduKCkgY29uc3Q7
CiAgICAgdm9pZCBzZXRBbGlnbihjb25zdCBET01TdHJpbmcgJik7CkBAIC0xMDQsMjEgKzExMCwx
NyBAQCBwdWJsaWM6CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotLyoKLSAqIHdlcmUgbm90IHVz
aW5nIEhUTUxFbGVtZW50SW1wbCBhcyBwYXJlbnQgY2xhc3MsIHNpbmNlIGEKLSAqIHBhcmFncmFw
aCBzaG91bGQgYmUgYWJsZSB0byBmbG93IGFyb3VuZCBhbGlnbmVkIG9iamVjdHMuIFRodXMKLSAq
IGEgPHA+IGVsZW1lbnQgaGFzIHRvIGJlIGlubGluZSwgYW5kIGlzIHJlbmRlcmVkIGJ5Ci0gKiBI
VE1MQmxvY2tJbXBsOjpjYWxjUGFyYWdyYXBoCi0gKi8KIGNsYXNzIEhUTUxQYXJhZ3JhcGhFbGVt
ZW50SW1wbCA6IHB1YmxpYyBIVE1MRWxlbWVudEltcGwKIHsKIHB1YmxpYzoKICAgICBIVE1MUGFy
YWdyYXBoRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYyk7CiAKKyAgICB2aXJ0dWFsIEhUTUxU
YWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNPcHRp
b25hbDsgfQorICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMzsg
fQorICAgIHZpcnR1YWwgYm9vbCBjaGVja0RURChjb25zdCBOb2RlSW1wbCogbmV3Q2hpbGQpOwor
CiAgICAgdmlydHVhbCBib29sIG1hcFRvRW50cnkoSWQgYXR0ciwgTWFwcGVkQXR0cmlidXRlRW50
cnkmIHJlc3VsdCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRl
KE1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIpOwotICAgIAotICAgIHZpcnR1YWwgSWQgaWQoKSBj
b25zdDsKIAogICAgIERPTVN0cmluZyBhbGlnbigpIGNvbnN0OwogICAgIHZvaWQgc2V0QWxpZ24o
Y29uc3QgRE9NU3RyaW5nICYpOwpAQCAtMTI2LDEzICsxMjgsMTYgQEAgcHVibGljOgogCiAvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCiAKLWNsYXNzIEhUTUxQcmVFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1M
R2VuZXJpY0VsZW1lbnRJbXBsCitjbGFzcyBIVE1MUHJlRWxlbWVudEltcGwgOiBwdWJsaWMgSFRN
TEVsZW1lbnRJbXBsCiB7CiBwdWJsaWM6Ci0gICAgSFRNTFByZUVsZW1lbnRJbXBsKERvY3VtZW50
UHRyICpkb2MsIHVzaG9ydCBfdGFnaWQpOworICAgIEhUTUxQcmVFbGVtZW50SW1wbChjb25zdCBR
dWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudFB0ciAqZG9jKTsKKworICAgIHZpcnR1YWwg
SFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1
c1JlcXVpcmVkOyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVy
biA1OyB9CiAKICAgICBsb25nIHdpZHRoKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRXaWR0aCggbG9u
ZyB3ICk7CisgICAgdm9pZCBzZXRXaWR0aChsb25nIHcpOwogfTsKIAogLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQpAQCAtMTQxLDkgKzE0NiwxMCBAQCBjbGFzcyBIVE1MTWFycXVlZUVsZW1lbnRJbXBsIDog
cHVibGljIEhUCiB7CiBwdWJsaWM6CiAgICAgSFRNTE1hcnF1ZWVFbGVtZW50SW1wbChEb2N1bWVu
dFB0ciAqZG9jKTsKLQotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKICAgICAKKyAgICB2aXJ0
dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdT
dGF0dXNSZXF1aXJlZDsgfQorICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyBy
ZXR1cm4gMzsgfQorCiAgICAgdmlydHVhbCBib29sIG1hcFRvRW50cnkoSWQgYXR0ciwgTWFwcGVk
QXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFw
cGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKnRva2VuKTsKIApAQCAtMTUzLDE4ICsx
NTksNSBAQCBwcml2YXRlOgogICAgIGludCBtX21pbmltdW1EZWxheTsKIH07CiAKLS8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLQotY2xhc3MgSFRNTExheWVyRWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTERp
dkVsZW1lbnRJbXBsCi17Ci1wdWJsaWM6Ci0gICAgSFRNTExheWVyRWxlbWVudEltcGwoIERvY3Vt
ZW50UHRyICpkb2MgKTsKLSAgICB+SFRNTExheWVyRWxlbWVudEltcGwoKTsKLQotICAgIHZpcnR1
YWwgSWQgaWQoKSBjb25zdDsKLQotICAgIGJvb2wgZml4ZWQ7Ci19OwotCiB9OyAvL25hbWVzcGFj
ZQogI2VuZGlmCkluZGV4OiBraHRtbC9odG1sL2h0bWxfY2FudmFzaW1wbC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sX2NhbnZhc2ltcGwu
Y3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjMKZGlmZiAtdSAtcCAtcjEuMyBraHRtbC9odG1s
L2h0bWxfY2FudmFzaW1wbC5jcHAKLS0tIGtodG1sL2h0bWwvaHRtbF9jYW52YXNpbXBsLmNwcAkx
MSBNYXkgMjAwNSAwNTo0OTozNCAtMDAwMAkxLjMKKysrIGtodG1sL2h0bWwvaHRtbF9jYW52YXNp
bXBsLmNwcAk5IEp1bCAyMDA1IDAyOjQyOjU4IC0wMDAwCkBAIC01NSw3ICs1NSw3IEBAIHVzaW5n
IG5hbWVzcGFjZSBraHRtbDsKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogSFRNTENhbnZhc0VsZW1l
bnRJbXBsOjpIVE1MQ2FudmFzRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgICA6IEhU
TUxJbWFnZUVsZW1lbnRJbXBsKGRvYykKKyAgICA6IEhUTUxJbWFnZUVsZW1lbnRJbXBsKEhUTUxO
YW1lczo6Y2FudmFzKCksIGRvYykKIHsKIH0KIApAQCAtNjMsMTEgKzYzLDYgQEAgSFRNTENhbnZh
c0VsZW1lbnRJbXBsOjp+SFRNTENhbnZhc0VsZW1lbgogewogfQogCi1Ob2RlSW1wbDo6SWQgSFRN
TENhbnZhc0VsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0NBTlZBUzsK
LX0KLQogYm9vbCBIVE1MQ2FudmFzRWxlbWVudEltcGw6Om1hcFRvRW50cnkoTm9kZUltcGw6Oklk
IGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IEhUTUxJbWFnZUVsZW1lbnRJbXBsOjptYXBUb0VudHJ5KGF0dHIsIHJlc3VsdCk7CkluZGV4OiBr
aHRtbC9odG1sL2h0bWxfY2FudmFzaW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbF9jYW52YXNpbXBsLmgsdgpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuMgpkaWZmIC11IC1wIC1yMS4yIGtodG1sL2h0bWwvaHRtbF9jYW52YXNpbXBsLmgKLS0t
IGtodG1sL2h0bWwvaHRtbF9jYW52YXNpbXBsLmgJMTEgTWF5IDIwMDUgMDU6NDk6MzQgLTAwMDAJ
MS4yCisrKyBraHRtbC9odG1sL2h0bWxfY2FudmFzaW1wbC5oCTkgSnVsIDIwMDUgMDI6NDI6NTgg
LTAwMDAKQEAgLTQzLDExICs0Myw4IEBAIGNsYXNzIEhUTUxDYW52YXNFbGVtZW50SW1wbAogewog
cHVibGljOgogICAgIEhUTUxDYW52YXNFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKTsKLQog
ICAgIH5IVE1MQ2FudmFzRWxlbWVudEltcGwoKTsKIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25z
dDsKLQogICAgIHZpcnR1YWwgYm9vbCBtYXBUb0VudHJ5KE5vZGVJbXBsOjpJZCBhdHRyLCBNYXBw
ZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VN
YXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqKTsKIApJbmRleDoga2h0bWwvaHRt
bC9odG1sX2RvY3VtZW50aW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dl
YkNvcmUva2h0bWwvaHRtbC9odG1sX2RvY3VtZW50aW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuNjAKZGlmZiAtdSAtcCAtcjEuNjAga2h0bWwvaHRtbC9odG1sX2RvY3VtZW50aW1wbC5j
cHAKLS0tIGtodG1sL2h0bWwvaHRtbF9kb2N1bWVudGltcGwuY3BwCTExIE1heSAyMDA1IDAwOjU4
OjI4IC0wMDAwCTEuNjAKKysrIGtodG1sL2h0bWwvaHRtbF9kb2N1bWVudGltcGwuY3BwCTkgSnVs
IDIwMDUgMDI6NDI6NTggLTAwMDAKQEAgLTYwLDYgKzYwLDcgQEAKICNpbmNsdWRlICJodG1sL2h0
bWxfbWlzY2ltcGwuaCIKICNpbmNsdWRlICJodG1sL2h0bWxfaW1hZ2VpbXBsLmgiCiAjaW5jbHVk
ZSAiaHRtbC9odG1sX2Zvcm1pbXBsLmgiCisjaW5jbHVkZSAiaHRtbGZhY3RvcnkuaCIKIAogI2lu
Y2x1ZGUgImtodG1sdmlldy5oIgogI2luY2x1ZGUgImtodG1sX3BhcnQuaCIKQEAgLTI0NiwxMiAr
MjQ3LDE0IEBAIFRva2VuaXplciAqSFRNTERvY3VtZW50SW1wbDo6Y3JlYXRlVG9rZW4KIGJvb2wg
SFRNTERvY3VtZW50SW1wbDo6Y2hpbGRBbGxvd2VkKCBOb2RlSW1wbCAqbmV3Q2hpbGQgKQogewog
ICAgIC8vICMjIyBzdXBwb3J0IGNvbW1lbnRzLiBldGMgYXMgYSBjaGlsZAotICAgIHJldHVybiAo
bmV3Q2hpbGQtPmlkKCkgPT0gSURfSFRNTCB8fCBuZXdDaGlsZC0+aWQoKSA9PSBJRF9DT01NRU5U
KTsKKyAgICByZXR1cm4gKG5ld0NoaWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aHRtbCgpKSB8
fCBuZXdDaGlsZC0+aXNDb21tZW50Tm9kZSgpKTsKIH0KIAotRWxlbWVudEltcGwgKkhUTUxEb2N1
bWVudEltcGw6OmNyZWF0ZUVsZW1lbnQoIGNvbnN0IERPTVN0cmluZyAmbmFtZSwgaW50ICZleGNl
cHRpb25jb2RlICkKK0VsZW1lbnRJbXBsICpIVE1MRG9jdW1lbnRJbXBsOjpjcmVhdGVFbGVtZW50
KGNvbnN0IERPTVN0cmluZyAmbmFtZSwgaW50ICZleGNlcHRpb25jb2RlKQogewotICAgIHJldHVy
biBjcmVhdGVIVE1MRWxlbWVudChuYW1lLCBleGNlcHRpb25jb2RlKTsKKyAgICAvLyBEbyBub3Qg
Y2hlY2sgbmFtZSB2YWxpZGl0eS4gIE90aGVyIGJyb3dzZXJzIGRvbid0LCBhbmQgaXQgdGFrZXMg
dGltZS4KKyAgICBET01TdHJpbmcgbG93ZXJOYW1lKG5hbWUubG93ZXIoKSk7CisgICAgcmV0dXJu
IEhUTUxFbGVtZW50RmFjdG9yeTo6Y3JlYXRlSFRNTEVsZW1lbnQoQXRvbWljU3RyaW5nKGxvd2Vy
TmFtZSksIHRoaXMsIDAsIGZhbHNlKTsKIH0KIAogdm9pZCBIVE1MRG9jdW1lbnRJbXBsOjpzbG90
SGlzdG9yeUNoYW5nZWQoKQpJbmRleDoga2h0bWwvaHRtbC9odG1sX2RvY3VtZW50aW1wbC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbF9kb2N1
bWVudGltcGwuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yOQpkaWZmIC11IC1wIC1yMS4yOSBr
aHRtbC9odG1sL2h0bWxfZG9jdW1lbnRpbXBsLmgKLS0tIGtodG1sL2h0bWwvaHRtbF9kb2N1bWVu
dGltcGwuaAkxMSBNYXkgMjAwNSAwMDo1ODoyOCAtMDAwMAkxLjI5CisrKyBraHRtbC9odG1sL2h0
bWxfZG9jdW1lbnRpbXBsLmgJOSBKdWwgMjAwNSAwMjo0Mjo1OCAtMDAwMApAQCAtMzQsNyArMzQs
NyBAQCBjbGFzcyBRU3RyaW5nOwogCiBuYW1lc3BhY2UgRE9NIHsKIAotICAgIGNsYXNzIEhUTUxF
bGVtZW50SW1wbDsKK2NsYXNzIEhUTUxFbGVtZW50SW1wbDsKIAogY2xhc3MgSFRNTERvY3VtZW50
SW1wbCA6IHB1YmxpYyBET006OkRvY3VtZW50SW1wbCwgcHVibGljIGtodG1sOjpDYWNoZWRPYmpl
Y3RDbGllbnQKIHsKSW5kZXg6IGtodG1sL2h0bWwvaHRtbF9lbGVtZW50aW1wbC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sX2VsZW1lbnRp
bXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS44NwpkaWZmIC11IC1wIC1yMS44NyBraHRt
bC9odG1sL2h0bWxfZWxlbWVudGltcGwuY3BwCi0tLSBraHRtbC9odG1sL2h0bWxfZWxlbWVudGlt
cGwuY3BwCTEzIE1heSAyMDA1IDE2OjQ4OjUxIC0wMDAwCTEuODcKKysrIGtodG1sL2h0bWwvaHRt
bF9lbGVtZW50aW1wbC5jcHAJOSBKdWwgMjAwNSAwMjo0Mjo1OSAtMDAwMApAQCAtMjgsMTIgKzI4
LDEzIEBACiAvLyNkZWZpbmUgRVZFTlRfREVCVUcKIC8vI2RlZmluZSBVTlNVUFBPUlRFRF9BVFRS
CiAKLSNpbmNsdWRlICJodG1sL2R0ZC5oIgogI2luY2x1ZGUgImh0bWwvaHRtbF9lbGVtZW50aW1w
bC5oIgogI2luY2x1ZGUgImh0bWwvaHRtbF9kb2N1bWVudGltcGwuaCIKICNpbmNsdWRlICJodG1s
L2h0bWx0b2tlbml6ZXIuaCIKKyNpbmNsdWRlICJodG1sZmFjdG9yeS5oIgogCiAjaW5jbHVkZSAi
bWlzYy9odG1saGFzaGVzLmgiCisjaW5jbHVkZSAibWlzYy9oYXNoc2V0LmgiCiAjaW5jbHVkZSAi
ZWRpdGluZy92aXNpYmxlX3RleHQuaCIKIAogI2luY2x1ZGUgImtodG1sdmlldy5oIgpAQCAtNTgs
OCArNTksOCBAQCB1c2luZyBuYW1lc3BhY2Uga2h0bWw7CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1IVE1M
RWxlbWVudEltcGw6OkhUTUxFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAgIDogU3R5
bGVkRWxlbWVudEltcGwoZG9jKQorSFRNTEVsZW1lbnRJbXBsOjpIVE1MRWxlbWVudEltcGwoY29u
c3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnRQdHIgKmRvYykKKyAgICA6IFN0eWxl
ZEVsZW1lbnRJbXBsKHRhZ05hbWUsIGRvYykKIHsKIH0KIApAQCAtNjcsNTEgKzY4LDQwIEBAIEhU
TUxFbGVtZW50SW1wbDo6fkhUTUxFbGVtZW50SW1wbCgpCiB7CiB9CiAKLWJvb2wgSFRNTEVsZW1l
bnRJbXBsOjppc0lubGluZSgpIGNvbnN0CitET01TdHJpbmcgSFRNTEVsZW1lbnRJbXBsOjpub2Rl
TmFtZSgpIGNvbnN0CiB7Ci0gICAgaWYgKHJlbmRlcmVyKCkpCi0gICAgICAgIHJldHVybiBFbGVt
ZW50SW1wbDo6aXNJbmxpbmUoKTsKLSAgICAKLSAgICBzd2l0Y2goaWQoKSkgewotICAgICAgICBj
YXNlIElEX0E6Ci0gICAgICAgIGNhc2UgSURfRk9OVDoKLSAgICAgICAgY2FzZSBJRF9UVDoKLSAg
ICAgICAgY2FzZSBJRF9VOgotICAgICAgICBjYXNlIElEX0I6Ci0gICAgICAgIGNhc2UgSURfSToK
LSAgICAgICAgY2FzZSBJRF9TOgotICAgICAgICBjYXNlIElEX1NUUklLRToKLSAgICAgICAgY2Fz
ZSBJRF9CSUc6Ci0gICAgICAgIGNhc2UgSURfU01BTEw6Ci0gICAgCi0gICAgICAgICAgICAvLyAl
cGhyYXNlCi0gICAgICAgIGNhc2UgSURfRU06Ci0gICAgICAgIGNhc2UgSURfU1RST05HOgotICAg
ICAgICBjYXNlIElEX0RGTjoKLSAgICAgICAgY2FzZSBJRF9DT0RFOgotICAgICAgICBjYXNlIElE
X1NBTVA6Ci0gICAgICAgIGNhc2UgSURfS0JEOgotICAgICAgICBjYXNlIElEX1ZBUjoKLSAgICAg
ICAgY2FzZSBJRF9DSVRFOgotICAgICAgICBjYXNlIElEX0FCQlI6Ci0gICAgICAgIGNhc2UgSURf
QUNST05ZTToKKyAgICAvLyBGSVhNRTogV291bGQgYmUgbmljZSB0byBoYXZlIGFuIGF0b21pY3N0
cmluZyBsb29rdXAgYmFzZWQgb2ZmIHVwcGVyY2FzZSBjaGFycyB0aGF0IGRvZXMgbm90IGhhdmUg
dG8gY29weQorICAgIC8vIHRoZSBzdHJpbmcgb24gYSBoaXQgaW4gdGhlIGhhc2guCisgICAgaWYg
KGdldERvY3VtZW50KCktPmlzSFRNTERvY3VtZW50KCkpCisgICAgICAgIHJldHVybiBtX3RhZ05h
bWUubG9jYWxOYW1lKCkuaW1wbGVtZW50YXRpb24oKS0+dXBwZXIoKTsKKyAgICByZXR1cm4gRWxl
bWVudEltcGw6Om5vZGVOYW1lKCk7Cit9CiAgICAgCi0gICAgICAgICAgICAvLyAlc3BlY2lhbAot
ICAgICAgICBjYXNlIElEX1NVQjoKLSAgICAgICAgY2FzZSBJRF9TVVA6Ci0gICAgICAgIGNhc2Ug
SURfU1BBTjoKLSAgICAgICAgY2FzZSBJRF9OT0JSOgotICAgICAgICBjYXNlIElEX1dCUjoKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICByZXR1cm4gRWxlbWVudEltcGw6OmlzSW5saW5lKCk7Ci0gICAgfQorSFRNTFRh
Z1N0YXR1cyBIVE1MRWxlbWVudEltcGw6OmVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QKK3sKKyAg
ICBpZiAoaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6ZHQoKSkgfHwgaGFzTG9jYWxOYW1lKEhUTUxO
YW1lczo6ZGQoKSkpCisgICAgICAgIHJldHVybiBUYWdTdGF0dXNPcHRpb25hbDsKKworICAgIC8v
IFNhbWUgdmFsdWVzIGFzIDxzcGFuPi4gIFRoaXMgd2F5IGN1c3RvbSB0YWcgbmFtZSBlbGVtZW50
cyB3aWxsIGJlaGF2ZSBsaWtlIGlubGluZSBzcGFucy4KKyAgICByZXR1cm4gVGFnU3RhdHVzUmVx
dWlyZWQ7Cit9CisKK2ludCBIVE1MRWxlbWVudEltcGw6OnRhZ1ByaW9yaXR5KCkgY29uc3QKK3sK
KyAgICBpZiAoaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6YWRkcmVzcygpKSB8fCBoYXNMb2NhbE5h
bWUoSFRNTE5hbWVzOjpkZCgpKSB8fCBoYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpkdCgpKSB8fCBo
YXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpub3NjcmlwdCgpKSkKKyAgICAgICAgcmV0dXJuIDM7Cisg
ICAgaWYgKGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmNlbnRlcigpKSB8fCBoYXNMb2NhbE5hbWUo
SFRNTE5hbWVzOjpub2JyKCkpKQorICAgICAgICByZXR1cm4gNTsKKyAgICBpZiAoaGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6bm9lbWJlZCgpKSB8fCBoYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpub2Zy
YW1lcygpKSkKKyAgICAgICAgcmV0dXJuIDEwOworCisgICAgLy8gU2FtZSB2YWx1ZXMgYXMgPHNw
YW4+LiAgVGhpcyB3YXkgY3VzdG9tIHRhZyBuYW1lIGVsZW1lbnRzIHdpbGwgYmVoYXZlIGxpa2Ug
aW5saW5lIHNwYW5zLgorICAgIHJldHVybiAxOwogfQogCiBOb2RlSW1wbCAqSFRNTEVsZW1lbnRJ
bXBsOjpjbG9uZU5vZGUoYm9vbCBkZWVwKQogewotICAgIEhUTUxFbGVtZW50SW1wbCAqY2xvbmUg
PSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwgKj4oZ2V0RG9jdW1lbnQoKS0+Y3JlYXRlSFRN
TEVsZW1lbnQobG9jYWxOYW1lUGFydChpZCgpKSkpOworICAgIEhUTUxFbGVtZW50SW1wbCAqY2xv
bmUgPSBIVE1MRWxlbWVudEZhY3Rvcnk6OmNyZWF0ZUhUTUxFbGVtZW50KGxvY2FsTmFtZSgpLCBn
ZXREb2N1bWVudCgpLCAwLCBmYWxzZSk7CiAgICAgaWYgKCFjbG9uZSkKICAgICAgICAgcmV0dXJu
IDA7CiAKQEAgLTMyNSwyNiArMzE1LDE3IEBAIERPTVN0cmluZyBIVE1MRWxlbWVudEltcGw6Om91
dGVyVGV4dCgpIGMKIERvY3VtZW50RnJhZ21lbnRJbXBsICpIVE1MRWxlbWVudEltcGw6OmNyZWF0
ZUNvbnRleHR1YWxGcmFnbWVudChjb25zdCBET01TdHJpbmcgJmh0bWwpCiB7CiAgICAgLy8gdGhl
IGZvbGxvd2luZyBpcyBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIGRlZmluaXRpb24gYXMgdXNlZCBi
eSBJRQotICAgIGlmKCBlbmRUYWdSZXF1aXJlbWVudChpZCgpKSA9PSBGT1JCSURERU4gKQotICAg
ICAgICByZXR1cm4gTlVMTDsKLSAgICAvLyBJRSBkaXNhbGxvd3MgaW5uZXJIVE1MIG9uIGlubGlu
ZSBlbGVtZW50cy4gSSBkb24ndCBzZWUgd2h5IHdlIHNob3VsZCBoYXZlIHRoaXMgcmVzdHJpY3Rp
b24sIGFzIG91cgotICAgIC8vIGRodG1sIGVuZ2luZSBjYW4gY29wZSB3aXRoIGl0LiBMYXJzCi0g
ICAgLy9pZiAoIGlzSW5saW5lKCkgKSByZXR1cm4gZmFsc2U7Ci0gICAgc3dpdGNoKCBpZCgpICkg
ewotICAgICAgICBjYXNlIElEX0NPTDoKLSAgICAgICAgY2FzZSBJRF9DT0xHUk9VUDoKLSAgICAg
ICAgY2FzZSBJRF9GUkFNRVNFVDoKLSAgICAgICAgY2FzZSBJRF9IRUFEOgotICAgICAgICBjYXNl
IElEX1NUWUxFOgotICAgICAgICBjYXNlIElEX1RJVExFOgotICAgICAgICAgICAgcmV0dXJuIE5V
TEw7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgaWYg
KCAhZ2V0RG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSApCi0gICAgICAgIHJldHVybiBOVUxM
OworICAgIGlmIChlbmRUYWdSZXF1aXJlbWVudCgpID09IFRhZ1N0YXR1c0ZvcmJpZGRlbikKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6Y29sKCkp
IHx8IGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmNvbGdyb3VwKCkpIHx8IGhhc0xvY2FsTmFtZShI
VE1MTmFtZXM6OmZyYW1lc2V0KCkpIHx8CisgICAgICAgIGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6
OmhlYWQoKSkgfHwgaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6c3R5bGUoKSkgfHwgaGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6dGl0bGUoKSkpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKCFn
ZXREb2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpKQorICAgICAgICByZXR1cm4gMDsKIAotICAg
IERvY3VtZW50RnJhZ21lbnRJbXBsICpmcmFnbWVudCA9IG5ldyBEb2N1bWVudEZyYWdtZW50SW1w
bCggZG9jUHRyKCkgKTsKKyAgICBEb2N1bWVudEZyYWdtZW50SW1wbCAqZnJhZ21lbnQgPSBuZXcg
RG9jdW1lbnRGcmFnbWVudEltcGwoZG9jUHRyKCkpOwogICAgIGZyYWdtZW50LT5yZWYoKTsKICAg
ICB7CiAgICAgICAgIEhUTUxUb2tlbml6ZXIgdG9rKGRvY1B0cigpLCBmcmFnbWVudCk7CkBAIC0z
NTgsMTQgKzMzOSwxNCBAQCBEb2N1bWVudEZyYWdtZW50SW1wbCAqSFRNTEVsZW1lbnRJbXBsOjpj
CiAgICAgaW50IGlnbm9yZWRFeGNlcHRpb25Db2RlOwogCiAgICAgLy8gd2UgbmVlZCB0byBwb3Ag
PGh0bWw+IGFuZCA8Ym9keT4gZWxlbWVudHMgYW5kIHJlbW92ZSA8aGVhZD4gdG8KLSAgICAvLyBh
Y2NvbWFkYXRlIGZvbGtzIHBhc3NpbmcgY29tcGxldGUgSFRNTCBkb2N1bWVudHMgdG8gbWFrZSB0
aGUKKyAgICAvLyBhY2NvbW1vZGF0ZSBmb2xrcyBwYXNzaW5nIGNvbXBsZXRlIEhUTUwgZG9jdW1l
bnRzIHRvIG1ha2UgdGhlCiAgICAgLy8gY2hpbGQgb2YgYW4gZWxlbWVudC4KIAogICAgIE5vZGVJ
bXBsICpuZXh0Tm9kZTsKICAgICBmb3IgKE5vZGVJbXBsICpub2RlID0gZnJhZ21lbnQtPmZpcnN0
Q2hpbGQoKTsgbm9kZSAhPSBOVUxMOyBub2RlID0gbmV4dE5vZGUpIHsKICAgICAgICAgbmV4dE5v
ZGUgPSBub2RlLT5uZXh0U2libGluZygpOwogCW5vZGUtPnJlZigpOwotICAgICAgICBpZiAobm9k
ZS0+aWQoKSA9PSBJRF9IVE1MIHx8IG5vZGUtPmlkKCkgPT0gSURfQk9EWSkgeworICAgICAgICBp
ZiAobm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omh0bWwoKSkgfHwgbm9kZS0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OmJvZHkoKSkpIHsKIAkgICAgTm9kZUltcGwgKmZpcnN0Q2hpbGQgPSBub2Rl
LT5maXJzdENoaWxkKCk7CiAgICAgICAgICAgICBpZiAoZmlyc3RDaGlsZCAhPSBOVUxMKSB7CiAg
ICAgICAgICAgICAgICAgbmV4dE5vZGUgPSBmaXJzdENoaWxkOwpAQCAtMzc5LDkgKzM2MCw5IEBA
IERvY3VtZW50RnJhZ21lbnRJbXBsICpIVE1MRWxlbWVudEltcGw6OmMKICAgICAgICAgICAgICAg
ICBjaGlsZC0+ZGVyZWYoKTsKIAkgICAgfQogICAgICAgICAgICAgZnJhZ21lbnQtPnJlbW92ZUNo
aWxkKG5vZGUsIGlnbm9yZWRFeGNlcHRpb25Db2RlKTsKLQl9IGVsc2UgaWYgKG5vZGUtPmlkKCkg
PT0gSURfSEVBRCkgeworCX0gZWxzZSBpZiAobm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omhl
YWQoKSkpCiAJICAgIGZyYWdtZW50LT5yZW1vdmVDaGlsZChub2RlLCBpZ25vcmVkRXhjZXB0aW9u
Q29kZSk7Ci0JfQorCiAgICAgICAgIC8vIEltcG9ydGFudCB0byBkbyB0aGlzIGRlcmVmIGFmdGVy
IHJlbW92ZUNoaWxkLCBiZWNhdXNlIGlmIHRoZSBvbmx5IHRoaW5nCiAgICAgICAgIC8vIGtlZXBp
bmcgYSBub2RlIGFyb3VuZCBpcyBhIHBhcmVudCB0aGF0IGlzIG5vbi0wLCByZW1vdmVDaGlsZCB3
aWxsIG5vdAogICAgICAgICAvLyBkZWxldGUgdGhlIG5vZGUuIFRoaXMgd29ya3MgZmluZSBpbiBK
YXZhU2NyaXB0IGJlY2F1c2UgdGhlcmUncyBhbHdheXMKQEAgLTQwMCw3ICszODEsNyBAQCBEb2N1
bWVudEZyYWdtZW50SW1wbCAqSFRNTEVsZW1lbnRJbXBsOjpjCiAKIHZvaWQgSFRNTEVsZW1lbnRJ
bXBsOjpzZXRJbm5lckhUTUwoY29uc3QgRE9NU3RyaW5nICZodG1sLCBpbnQgJmV4Y2VwdGlvbikK
IHsKLSAgICBEb2N1bWVudEZyYWdtZW50SW1wbCAqZnJhZ21lbnQgPSBjcmVhdGVDb250ZXh0dWFs
RnJhZ21lbnQoIGh0bWwgKTsKKyAgICBEb2N1bWVudEZyYWdtZW50SW1wbCAqZnJhZ21lbnQgPSBj
cmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoaHRtbCk7CiAgICAgaWYgKGZyYWdtZW50ID09IE5VTEwp
IHsKIAlleGNlcHRpb24gPSBET01FeGNlcHRpb246Ok5PX01PRElGSUNBVElPTl9BTExPV0VEX0VS
UjsKICAgICAgICAgcmV0dXJuOwpAQCAtNDE4LDcgKzM5OSw3IEBAIHZvaWQgSFRNTEVsZW1lbnRJ
bXBsOjpzZXRPdXRlckhUTUwoY29uc3QKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBIVE1M
RWxlbWVudEltcGwgKnBhcmVudCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCAqPihwKTsK
LSAgICBEb2N1bWVudEZyYWdtZW50SW1wbCAqZnJhZ21lbnQgPSBwYXJlbnQtPmNyZWF0ZUNvbnRl
eHR1YWxGcmFnbWVudCggaHRtbCApOworICAgIERvY3VtZW50RnJhZ21lbnRJbXBsICpmcmFnbWVu
dCA9IHBhcmVudC0+Y3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KGh0bWwpOwogCiAgICAgaWYgKCFm
cmFnbWVudCkgewogCWV4Y2VwdGlvbiA9IERPTUV4Y2VwdGlvbjo6Tk9fTU9ESUZJQ0FUSU9OX0FM
TE9XRURfRVJSOwpAQCAtNDM0LDI5ICs0MTUsMTcgQEAgdm9pZCBIVE1MRWxlbWVudEltcGw6OnNl
dE91dGVySFRNTChjb25zdAogdm9pZCBIVE1MRWxlbWVudEltcGw6OnNldElubmVyVGV4dChjb25z
dCBET01TdHJpbmcgJnRleHQsIGludCAmZXhjZXB0aW9uKQogewogICAgIC8vIGZvbGxvd2luZyB0
aGUgSUUgc3BlY3MuCi0gICAgaWYgKGVuZFRhZ1JlcXVpcmVtZW50KGlkKCkpID09IEZPUkJJRERF
TikgeworICAgIGlmIChlbmRUYWdSZXF1aXJlbWVudCgpID09IFRhZ1N0YXR1c0ZvcmJpZGRlbikg
ewogCWV4Y2VwdGlvbiA9IERPTUV4Y2VwdGlvbjo6Tk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJS
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgLy8gSUUgZGlzYWxsb3dzIGlubmVyVGV4
dCBvbiBpbmxpbmUgZWxlbWVudHMuIEkgZG9uJ3Qgc2VlIHdoeSB3ZSBzaG91bGQgaGF2ZSB0aGlz
IHJlc3RyaWN0aW9uLCBhcyBvdXIKLSAgICAvLyBkaHRtbCBlbmdpbmUgY2FuIGNvcGUgd2l0aCBp
dC4gTGFycwotICAgIC8vaWYgKCBpc0lubGluZSgpICkgcmV0dXJuIGZhbHNlOwotICAgIHN3aXRj
aCggaWQoKSApIHsKLSAgICAgICAgY2FzZSBJRF9DT0w6Ci0gICAgICAgIGNhc2UgSURfQ09MR1JP
VVA6Ci0gICAgICAgIGNhc2UgSURfRlJBTUVTRVQ6Ci0gICAgICAgIGNhc2UgSURfSEVBRDoKLSAg
ICAgICAgY2FzZSBJRF9IVE1MOgotICAgICAgICBjYXNlIElEX1RBQkxFOgotICAgICAgICBjYXNl
IElEX1RCT0RZOgotICAgICAgICBjYXNlIElEX1RGT09UOgotICAgICAgICBjYXNlIElEX1RIRUFE
OgotICAgICAgICBjYXNlIElEX1RSOgotICAgICAgICAgICAgZXhjZXB0aW9uID0gRE9NRXhjZXB0
aW9uOjpOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsKKyAgICBpZiAoaGFzTG9jYWxOYW1l
KEhUTUxOYW1lczo6Y29sKCkpIHx8IGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmNvbGdyb3VwKCkp
IHx8IGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmZyYW1lc2V0KCkpIHx8CisgICAgICAgIGhhc0xv
Y2FsTmFtZShIVE1MTmFtZXM6OmhlYWQoKSkgfHwgaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6aHRt
bCgpKSB8fCBoYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0YWJsZSgpKSB8fCAKKyAgICAgICAgaGFz
TG9jYWxOYW1lKEhUTUxOYW1lczo6dGJvZHkoKSkgfHwgaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6
dGZvb3QoKSkgfHwgaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dGhlYWQoKSkgfHwKKyAgICAgICAg
aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dHIoKSkpIHsKKyAgICAgICAgZXhjZXB0aW9uID0gRE9N
RXhjZXB0aW9uOjpOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI7CisgICAgICAgIHJldHVybjsK
ICAgICB9CiAKICAgICByZW1vdmVDaGlsZHJlbigpOwpAQCAtNDY2LDI1ICs0MzUsMTcgQEAgdm9p
ZCBIVE1MRWxlbWVudEltcGw6OnNldElubmVyVGV4dChjb25zdAogdm9pZCBIVE1MRWxlbWVudElt
cGw6OnNldE91dGVyVGV4dChjb25zdCBET01TdHJpbmcgJnRleHQsIGludCAmZXhjZXB0aW9uKQog
ewogICAgIC8vIGZvbGxvd2luZyB0aGUgSUUgc3BlY3MuCi0gICAgaWYoIGVuZFRhZ1JlcXVpcmVt
ZW50KGlkKCkpID09IEZPUkJJRERFTiApIHsKKyAgICBpZiAoZW5kVGFnUmVxdWlyZW1lbnQoKSA9
PSBUYWdTdGF0dXNGb3JiaWRkZW4pIHsKIAlleGNlcHRpb24gPSBET01FeGNlcHRpb246Ok5PX01P
RElGSUNBVElPTl9BTExPV0VEX0VSUjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBzd2l0
Y2goIGlkKCkgKSB7Ci0gICAgICAgIGNhc2UgSURfQ09MOgotICAgICAgICBjYXNlIElEX0NPTEdS
T1VQOgotICAgICAgICBjYXNlIElEX0ZSQU1FU0VUOgotICAgICAgICBjYXNlIElEX0hFQUQ6Ci0g
ICAgICAgIGNhc2UgSURfSFRNTDoKLSAgICAgICAgY2FzZSBJRF9UQUJMRToKLSAgICAgICAgY2Fz
ZSBJRF9UQk9EWToKLSAgICAgICAgY2FzZSBJRF9URk9PVDoKLSAgICAgICAgY2FzZSBJRF9USEVB
RDoKLSAgICAgICAgY2FzZSBJRF9UUjoKLSAgICAgICAgICAgIGV4Y2VwdGlvbiA9IERPTUV4Y2Vw
dGlvbjo6Tk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7CisKKyAgICBpZiAoaGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6Y29sKCkpIHx8IGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmNvbGdyb3Vw
KCkpIHx8IGhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmZyYW1lc2V0KCkpIHx8CisgICAgICAgIGhh
c0xvY2FsTmFtZShIVE1MTmFtZXM6OmhlYWQoKSkgfHwgaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6
aHRtbCgpKSB8fCBoYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0YWJsZSgpKSB8fCAKKyAgICAgICAg
aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dGJvZHkoKSkgfHwgaGFzTG9jYWxOYW1lKEhUTUxOYW1l
czo6dGZvb3QoKSkgfHwgaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dGhlYWQoKSkgfHwKKyAgICAg
ICAgaGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dHIoKSkpIHsKKyAgICAgICAgZXhjZXB0aW9uID0g
RE9NRXhjZXB0aW9uOjpOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI7CisgICAgICAgIHJldHVy
bjsKICAgICB9CiAKICAgICBOb2RlSW1wbCAqcGFyZW50ID0gcGFyZW50Tm9kZSgpOwpAQCAtNTI1
LDE3ICs0ODYsNiBAQCB2b2lkIEhUTUxFbGVtZW50SW1wbDo6c2V0T3V0ZXJUZXh0KGNvbnN0CiAg
ICAgfQogfQogCi0KLURPTVN0cmluZyBIVE1MRWxlbWVudEltcGw6Om5hbWVzcGFjZVVSSSgpIGNv
bnN0Ci17Ci0gICAgLy8gRm9yIEhUTUwgZG9jdW1lbnRzLCB3ZSB0cmVhdCBIVE1MIGVsZW1lbnRz
IGFzIGhhdmluZyBubyBuYW1lc3BhY2UuIEJ1dCBmb3IgWE1MIGRvY3VtZW50cwotICAgIC8vIHRo
ZSBlbGVtZW50cyBoYXZlIHRoZSBuYW1lc3BhY2UgZGVmaW5lZCBpbiB0aGUgWEhUTUwgc3BlYwot
ICAgIGlmIChnZXREb2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpKQotICAgICAgICByZXR1cm4g
RE9NU3RyaW5nKCk7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gWEhUTUxfTkFNRVNQQUNFOwot
fQotCiB2b2lkIEhUTUxFbGVtZW50SW1wbDo6YWRkSFRNTEFsaWdubWVudChNYXBwZWRBdHRyaWJ1
dGVJbXBsKiBhdHRyKQogewogICAgIC8vcURlYnVnKCJhbGlnbm1lbnQgaXMgJXMiLCBhbGlnbm1l
bnQuc3RyaW5nKCkubGF0aW4xKCkgKTsKQEAgLTY4Miw5ICs2MzIsOSBAQCBET01TdHJpbmcgSFRN
TEVsZW1lbnRJbXBsOjp0b1N0cmluZygpIGNvCiAJRE9NU3RyaW5nIHJlc3VsdCA9IG9wZW5UYWdT
dGFydFRvU3RyaW5nKCk7CiAJcmVzdWx0ICs9ICI+IjsKIAotCWlmIChlbmRUYWdSZXF1aXJlbWVu
dChpZCgpKSA9PSBSRVFVSVJFRCkgeworCWlmIChlbmRUYWdSZXF1aXJlbWVudCgpID09IFRhZ1N0
YXR1c1JlcXVpcmVkKSB7CiAJICAgIHJlc3VsdCArPSAiPC8iOwotCSAgICByZXN1bHQgKz0gdGFn
TmFtZSgpOworCSAgICByZXN1bHQgKz0gbm9kZU5hbWUoKTsKIAkgICAgcmVzdWx0ICs9ICI+IjsK
IAl9CiAKQEAgLTY5NCw3ICs2NDQsNyBAQCBET01TdHJpbmcgSFRNTEVsZW1lbnRJbXBsOjp0b1N0
cmluZygpIGNvCiAgICAgcmV0dXJuIEVsZW1lbnRJbXBsOjp0b1N0cmluZygpOwogfQogCi1ET01T
dHJpbmcgSFRNTEVsZW1lbnRJbXBsOjppZERPTSgpIGNvbnN0CitET01TdHJpbmcgSFRNTEVsZW1l
bnRJbXBsOjppZCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGdldEF0dHJpYnV0ZShBVFRSX0lEKTsK
IH0KQEAgLTc0OSwxNSArNjk5LDI4NSBAQCBTaGFyZWRQdHI8SFRNTENvbGxlY3Rpb25JbXBsPiBI
VE1MRWxlbWVuCiAgICAgcmV0dXJuIFNoYXJlZFB0cjxIVE1MQ29sbGVjdGlvbkltcGw+KG5ldyBI
VE1MQ29sbGVjdGlvbkltcGwodGhpcywgSFRNTENvbGxlY3Rpb25JbXBsOjpOT0RFX0NISUxEUkVO
KSk7CiB9CiAKLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIERPTSBTZWN0aW9uIDEuMS4xCitib29s
IEhUTUxFbGVtZW50SW1wbDo6Y2hpbGRBbGxvd2VkKE5vZGVJbXBsICpuZXdDaGlsZCkKK3sKKyAg
ICBpZiAoIUVsZW1lbnRJbXBsOjpjaGlsZEFsbG93ZWQobmV3Q2hpbGQpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAvLyBGb3IgWE1MIGRvY3VtZW50cywgd2UgYXJlIG5vbi12YWxpZGF0
aW5nIGFuZCBkbyBub3QgY2hlY2sgYWdhaW5zdCBhIERURCwgZXZlbiBmb3IgSFRNTCBlbGVtZW50
cy4KKyAgICBpZiAoIWdldERvY3VtZW50KCktPmlzSFRNTERvY3VtZW50KCkpCisgICAgICAgIHJl
dHVybiB0cnVlOworCisgICAgLy8gRnV0dXJlLXByb29mIGZvciBYTUwgY29udGVudCBpbnNpZGUg
SFRNTCBkb2N1bWVudHMgKHdlIG1heSBhbGxvdyB0aGlzIHNvbWUgZGF5KS4KKyAgICBpZiAobmV3
Q2hpbGQtPmlzRWxlbWVudE5vZGUoKSAmJiAhbmV3Q2hpbGQtPmlzSFRNTEVsZW1lbnQoKSkKKyAg
ICAgICAgcmV0dXJuIHRydWU7CiAKLUhUTUxHZW5lcmljRWxlbWVudEltcGw6OkhUTUxHZW5lcmlj
RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgdXNob3J0IGkpCi0gICAgOiBIVE1MRWxlbWVu
dEltcGwoZG9jKQorICAgIC8vIEVsZW1lbnRzIHdpdGggZm9yYmlkZGVuIHRhZyBzdGF0dXMgY2Fu
IG5ldmVyIGhhdmUgY2hpbGRyZW4KKyAgICBpZiAoZW5kVGFnUmVxdWlyZW1lbnQoKSA9PSBUYWdT
dGF0dXNGb3JiaWRkZW4pCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIENvbW1lbnQg
bm9kZXMgYXJlIGFsd2F5cyBhbGxvd2VkLgorICAgIGlmIChuZXdDaGlsZC0+aXNDb21tZW50Tm9k
ZSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIE5vdyBjYWxsIGNoZWNrRFRELgor
ICAgIHJldHVybiBjaGVja0RURChuZXdDaGlsZCk7Cit9CisKKy8vIERURCBTdHVmZgorLy8gVGhp
cyB1bmZvcnR1bmF0ZSBmdW5jdGlvbiBpcyBvbmx5IG5lZWRlZCB3aGVuIGNoZWNraW5nIGFnYWlu
c3QgdGhlIERURC4gIE90aGVyIGxhbmd1YWdlcyAobGlrZSBTVkcpIHdvbid0IG5lZWQgdGhpcy4K
K2Jvb2wgSFRNTEVsZW1lbnRJbXBsOjppc1JlY29nbml6ZWRUYWdOYW1lKGNvbnN0IFF1YWxpZmll
ZE5hbWUmIHRhZ05hbWUpCit7CisgICAgc3RhdGljIEhhc2hTZXQ8RE9NU3RyaW5nSW1wbCosIFBv
aW50ZXJIYXNoPERPTVN0cmluZ0ltcGwqPiA+IHRhZ0xpc3Q7CisgICAgaWYgKHRhZ0xpc3QuaXNF
bXB0eSgpKSB7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6YSgpKTsKKyAgICAg
ICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjphYmJyKCkpOworICAgICAgICB0YWdMaXN0Lmlu
c2VydChIVE1MTmFtZXM6OmFjcm9ueW0oKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxO
YW1lczo6YWRkcmVzcygpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjphcHBs
ZXQoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6YXJlYSgpKTsKKyAgICAg
ICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpiKCkpOworICAgICAgICB0YWdMaXN0Lmluc2Vy
dChIVE1MTmFtZXM6OmJhc2UoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6
YmFzZWZvbnQoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6YmRvKCkpOwor
ICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmJpZygpKTsKKyAgICAgICAgdGFnTGlz
dC5pbnNlcnQoSFRNTE5hbWVzOjpibG9ja3F1b3RlKCkpOworICAgICAgICB0YWdMaXN0Lmluc2Vy
dChIVE1MTmFtZXM6OmJvZHkoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6
YnIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6YnV0dG9uKCkpOworICAg
ICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmNhbnZhcygpKTsKKyAgICAgICAgdGFnTGlz
dC5pbnNlcnQoSFRNTE5hbWVzOjpjYXB0aW9uKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChI
VE1MTmFtZXM6OmNlbnRlcigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpj
aXRlKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmNvZGUoKSk7CisgICAg
ICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6Y29sKCkpOworICAgICAgICB0YWdMaXN0Lmlu
c2VydChIVE1MTmFtZXM6OmNvbGdyb3VwKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1M
TmFtZXM6OmRkKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmRlbCgpKTsK
KyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpkZm4oKSk7CisgICAgICAgIHRhZ0xp
c3QuaW5zZXJ0KEhUTUxOYW1lczo6ZGlyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1M
TmFtZXM6OmRpdigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpkbCgpKTsK
KyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpkdCgpKTsKKyAgICAgICAgdGFnTGlz
dC5pbnNlcnQoSFRNTE5hbWVzOjplbSgpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5h
bWVzOjplbWJlZCgpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpmaWVsZHNl
dCgpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpmb250KCkpOworICAgICAg
ICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmZvcm0oKSk7CisgICAgICAgIHRhZ0xpc3QuaW5z
ZXJ0KEhUTUxOYW1lczo6ZnJhbWUoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1l
czo6ZnJhbWVzZXQoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6aGVhZCgp
KTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpoMSgpKTsKKyAgICAgICAgdGFn
TGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpoMigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRN
TE5hbWVzOjpoMygpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpoNCgpKTsK
KyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpoNSgpKTsKKyAgICAgICAgdGFnTGlz
dC5pbnNlcnQoSFRNTE5hbWVzOjpoNigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5h
bWVzOjpocigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpodG1sKCkpOwor
ICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmkoKSk7CisgICAgICAgIHRhZ0xpc3Qu
aW5zZXJ0KEhUTUxOYW1lczo6aWZyYW1lKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1M
TmFtZXM6OmltZygpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjppbnB1dCgp
KTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjppbnMoKSk7CisgICAgICAgIHRh
Z0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6aXNpbmRleCgpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNl
cnQoSFRNTE5hbWVzOjprYmQoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6
a2V5Z2VuKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmxhYmVsKCkpOwor
ICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmxheWVyKCkpOworICAgICAgICB0YWdM
aXN0Lmluc2VydChIVE1MTmFtZXM6OmxlZ2VuZCgpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQo
SFRNTE5hbWVzOjpsaSgpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpsaW5r
KCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6Om1hcCgpKTsKKyAgICAgICAg
dGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjptYXJxdWVlKCkpOworICAgICAgICB0YWdMaXN0Lmlu
c2VydChIVE1MTmFtZXM6Om1lbnUoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1l
czo6bWV0YSgpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpub2JyKCkpOwor
ICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6Om5vZW1iZWQoKSk7CisgICAgICAgIHRh
Z0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6bm9mcmFtZXMoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5z
ZXJ0KEhUTUxOYW1lczo6bm9sYXllcigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5h
bWVzOjpub3NjcmlwdCgpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpvYmpl
Y3QoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6b2woKSk7CisgICAgICAg
IHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6b3B0Z3JvdXAoKSk7CisgICAgICAgIHRhZ0xpc3Qu
aW5zZXJ0KEhUTUxOYW1lczo6b3B0aW9uKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1M
TmFtZXM6OnAoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6cGFyYW0oKSk7
CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6cGxhaW50ZXh0KCkpOworICAgICAg
ICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnByZSgpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNl
cnQoSFRNTE5hbWVzOjpxKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnMo
KSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6c2FtcCgpKTsKKyAgICAgICAg
dGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpzY3JpcHQoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5z
ZXJ0KEhUTUxOYW1lczo6c2VsZWN0KCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFt
ZXM6OnNtYWxsKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnNwYW4oKSk7
CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6c3RyaWtlKCkpOworICAgICAgICB0
YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnN0cm9uZygpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNl
cnQoSFRNTE5hbWVzOjpzdHlsZSgpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVz
OjpzdWIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6c3VwKCkpOworICAg
ICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnRhYmxlKCkpOworICAgICAgICB0YWdMaXN0
Lmluc2VydChIVE1MTmFtZXM6OnRib2R5KCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1M
TmFtZXM6OnRkKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnRleHRhcmVh
KCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnRmb290KCkpOworICAgICAg
ICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnRoKCkpOworICAgICAgICB0YWdMaXN0Lmluc2Vy
dChIVE1MTmFtZXM6OnRoZWFkKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6
OnRpdGxlKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnRyKCkpOworICAg
ICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnR0KCkpOworICAgICAgICB0YWdMaXN0Lmlu
c2VydChIVE1MTmFtZXM6OnUoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6
dWwoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6dmFyKCkpOworICAgICAg
ICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OndicigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNl
cnQoSFRNTE5hbWVzOjp4bXAoKSk7CisgICAgfQorCisgICAgcmV0dXJuIHRhZ0xpc3QuY29udGFp
bnModGFnTmFtZSk7Cit9CisKKy8vIFRoZSB0ZXJtcyBpbmxpbmUgYW5kIGJsb2NrIGFyZSB1c2Vk
IGhlcmUgbG9vc2VseS4gIERvbid0IG1ha2UgdGhlIG1pc3Rha2Ugb2YgYXNzdW1pbmcgYWxsIGlu
bGluZXMgb3IgYWxsIGJsb2NrcworLy8gbmVlZCB0byBiZSBpbiB0aGVzZSB0d28gbGlzdHMuCitI
YXNoU2V0PERPTVN0cmluZ0ltcGwqLCBQb2ludGVySGFzaDxET01TdHJpbmdJbXBsKj4gPiogaW5s
aW5lVGFnTGlzdCgpIHsKKyAgICBzdGF0aWMgSGFzaFNldDxET01TdHJpbmdJbXBsKiwgUG9pbnRl
ckhhc2g8RE9NU3RyaW5nSW1wbCo+ID4gdGFnTGlzdDsKKyAgICBpZiAodGFnTGlzdC5pc0VtcHR5
KCkpIHsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjp0dCgpKTsKKyAgICAgICAg
dGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjppKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChI
VE1MTmFtZXM6OmIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6dSgpKTsK
KyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpzKCkpOworICAgICAgICB0YWdMaXN0
Lmluc2VydChIVE1MTmFtZXM6OnN0cmlrZSgpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRN
TE5hbWVzOjpiaWcoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6c21hbGwo
KSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6ZW0oKSk7CisgICAgICAgIHRh
Z0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6c3Ryb25nKCkpOworICAgICAgICB0YWdMaXN0Lmluc2Vy
dChIVE1MTmFtZXM6OmRmbigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpj
b2RlKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnNhbXAoKSk7CisgICAg
ICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6a2JkKCkpOworICAgICAgICB0YWdMaXN0Lmlu
c2VydChIVE1MTmFtZXM6OnZhcigpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVz
OjpjaXRlKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmFiYnIoKSk7Cisg
ICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6YWNyb255bSgpKTsKKyAgICAgICAgdGFn
TGlzdC5pbnNlcnQoSFRNTE5hbWVzOjphKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1M
TmFtZXM6OmNhbnZhcygpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjppbWco
KSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6YXBwbGV0KCkpOworICAgICAg
ICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6Om9iamVjdCgpKTsKKyAgICAgICAgdGFnTGlzdC5p
bnNlcnQoSFRNTE5hbWVzOjplbWJlZCgpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5h
bWVzOjpmb250KCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmJhc2Vmb250
KCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmJyKCkpOworICAgICAgICB0
YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnNjcmlwdCgpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNl
cnQoSFRNTE5hbWVzOjptYXAoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6
cSgpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpzdWIoKSk7CisgICAgICAg
IHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6c3VwKCkpOworICAgICAgICB0YWdMaXN0Lmluc2Vy
dChIVE1MTmFtZXM6OnNwYW4oKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6
YmRvKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmlmcmFtZSgpKTsKKyAg
ICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjppbnB1dCgpKTsKKyAgICAgICAgdGFnTGlz
dC5pbnNlcnQoSFRNTE5hbWVzOjprZXlnZW4oKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhU
TUxOYW1lczo6c2VsZWN0KCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnRl
eHRhcmVhKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmxhYmVsKCkpOwor
ICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmJ1dHRvbigpKTsKKyAgICAgICAgdGFn
TGlzdC5pbnNlcnQoSFRNTE5hbWVzOjppbnMoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhU
TUxOYW1lczo6ZGVsKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6Om5vYnIo
KSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6d2JyKCkpOworICAgIH0KKyAg
ICByZXR1cm4gJnRhZ0xpc3Q7Cit9CisKK0hhc2hTZXQ8RE9NU3RyaW5nSW1wbCosIFBvaW50ZXJI
YXNoPERPTVN0cmluZ0ltcGwqPiA+KiBibG9ja1RhZ0xpc3QoKSB7CisgICAgc3RhdGljIEhhc2hT
ZXQ8RE9NU3RyaW5nSW1wbCosIFBvaW50ZXJIYXNoPERPTVN0cmluZ0ltcGwqPiA+IHRhZ0xpc3Q7
CisgICAgaWYgKHRhZ0xpc3QuaXNFbXB0eSgpKSB7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhU
TUxOYW1lczo6cCgpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpoMSgpKTsK
KyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpoMigpKTsKKyAgICAgICAgdGFnTGlz
dC5pbnNlcnQoSFRNTE5hbWVzOjpoMygpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5h
bWVzOjpoNCgpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpoNSgpKTsKKyAg
ICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpoNigpKTsKKyAgICAgICAgdGFnTGlzdC5p
bnNlcnQoSFRNTE5hbWVzOjp1bCgpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVz
OjpvbCgpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpkaXIoKSk7CisgICAg
ICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6bWVudSgpKTsKKyAgICAgICAgdGFnTGlzdC5p
bnNlcnQoSFRNTE5hbWVzOjpwcmUoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1l
czo6cGxhaW50ZXh0KCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnhtcCgp
KTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpkbCgpKTsKKyAgICAgICAgdGFn
TGlzdC5pbnNlcnQoSFRNTE5hbWVzOjpkaXYoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhU
TUxOYW1lczo6bGF5ZXIoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6Y2Vu
dGVyKCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6Om5vc2NyaXB0KCkpOwor
ICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6Om5vZnJhbWVzKCkpOworICAgICAgICB0
YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmJsb2NrcXVvdGUoKSk7CisgICAgICAgIHRhZ0xpc3Qu
aW5zZXJ0KEhUTUxOYW1lczo6Zm9ybSgpKTsKKyAgICAgICAgdGFnTGlzdC5pbnNlcnQoSFRNTE5h
bWVzOjppc2luZGV4KCkpOworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmhyKCkp
OworICAgICAgICB0YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OnRhYmxlKCkpOworICAgICAgICB0
YWdMaXN0Lmluc2VydChIVE1MTmFtZXM6OmZpZWxkc2V0KCkpOworICAgICAgICB0YWdMaXN0Lmlu
c2VydChIVE1MTmFtZXM6OmFkZHJlc3MoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxO
YW1lczo6bGkoKSk7CisgICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6ZGQoKSk7Cisg
ICAgICAgIHRhZ0xpc3QuaW5zZXJ0KEhUTUxOYW1lczo6ZHQoKSk7CisgICAgICAgIHRhZ0xpc3Qu
aW5zZXJ0KEhUTUxOYW1lczo6bWFycXVlZSgpKTsKKyAgICB9CisgICAgcmV0dXJuICZ0YWdMaXN0
OworfQorCitib29sIEhUTUxFbGVtZW50SW1wbDo6aW5FaXRoZXJUYWdMaXN0KGNvbnN0IE5vZGVJ
bXBsKiBuZXdDaGlsZCkKIHsKLSAgICBtX2VsZW1lbnRJZCA9IGk7CisgICAgaWYgKG5ld0NoaWxk
LT5pc1RleHROb2RlKCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAKKyAgICBpZiAo
bmV3Q2hpbGQtPmlzSFRNTEVsZW1lbnQoKSkgeworICAgICAgICBjb25zdCBIVE1MRWxlbWVudElt
cGwqIGNoaWxkID0gc3RhdGljX2Nhc3Q8Y29uc3QgSFRNTEVsZW1lbnRJbXBsKj4obmV3Q2hpbGQp
OworICAgICAgICBpZiAoaW5saW5lVGFnTGlzdCgpLT5jb250YWlucyhjaGlsZC0+dGFnTmFtZSgp
KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoYmxvY2tUYWdMaXN0KCkt
PmNvbnRhaW5zKGNoaWxkLT50YWdOYW1lKCkpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIHJldHVybiAhaXNSZWNvZ25pemVkVGFnTmFtZShjaGlsZC0+dGFnTmFtZSgpKTsgLy8g
QWNjZXB0IGN1c3RvbSBodG1sIHRhZ3MKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K2Jvb2wgSFRNTEVsZW1lbnRJbXBsOjppbklubGluZVRhZ0xpc3QoY29uc3QgTm9kZUltcGwqIG5l
d0NoaWxkKQoreworICAgIGlmIChuZXdDaGlsZC0+aXNUZXh0Tm9kZSgpKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKworICAgIGlmIChuZXdDaGlsZC0+aXNIVE1MRWxlbWVudCgpKSB7CisgICAgICAg
IGNvbnN0IEhUTUxFbGVtZW50SW1wbCogY2hpbGQgPSBzdGF0aWNfY2FzdDxjb25zdCBIVE1MRWxl
bWVudEltcGwqPihuZXdDaGlsZCk7CisgICAgICAgIGlmIChpbmxpbmVUYWdMaXN0KCktPmNvbnRh
aW5zKGNoaWxkLT50YWdOYW1lKCkpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IHJldHVybiAhaXNSZWNvZ25pemVkVGFnTmFtZShjaGlsZC0+dGFnTmFtZSgpKTsgLy8gQWNjZXB0
IGN1c3RvbSBodG1sIHRhZ3MKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKLU5vZGVJ
bXBsOjpJZCBIVE1MR2VuZXJpY0VsZW1lbnRJbXBsOjppZCgpIGNvbnN0Citib29sIEhUTUxFbGVt
ZW50SW1wbDo6aW5CbG9ja1RhZ0xpc3QoY29uc3QgTm9kZUltcGwqIG5ld0NoaWxkKQogewotICAg
IHJldHVybiBtX2VsZW1lbnRJZDsKKyAgICBpZiAobmV3Q2hpbGQtPmlzVGV4dE5vZGUoKSkKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAKKyAgICBpZiAobmV3Q2hpbGQtPmlzSFRN
TEVsZW1lbnQoKSkgeworICAgICAgICBjb25zdCBIVE1MRWxlbWVudEltcGwqIGNoaWxkID0gc3Rh
dGljX2Nhc3Q8Y29uc3QgSFRNTEVsZW1lbnRJbXBsKj4obmV3Q2hpbGQpOworICAgICAgICByZXR1
cm4gKGJsb2NrVGFnTGlzdCgpLT5jb250YWlucyhjaGlsZC0+dGFnTmFtZSgpKSk7CisgICAgfQor
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEhUTUxFbGVtZW50SW1wbDo6Y2hlY2tEVEQo
Y29uc3QgTm9kZUltcGwqIG5ld0NoaWxkKQoreworICAgIGlmIChoYXNUYWdOYW1lKEhUTUxOYW1l
czo6YWRkcmVzcygpKSAmJiBuZXdDaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnAoKSkpCisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBpbkVpdGhlclRhZ0xpc3QobmV3Q2hpbGQp
OwogfQpJbmRleDoga2h0bWwvaHRtbC9odG1sX2VsZW1lbnRpbXBsLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sX2VsZW1lbnRpbXBsLmgsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuMzUKZGlmZiAtdSAtcCAtcjEuMzUga2h0bWwvaHRtbC9odG1s
X2VsZW1lbnRpbXBsLmgKLS0tIGtodG1sL2h0bWwvaHRtbF9lbGVtZW50aW1wbC5oCTExIE1heSAy
MDA1IDA1OjQ5OjM0IC0wMDAwCTEuMzUKKysrIGtodG1sL2h0bWwvaHRtbF9lbGVtZW50aW1wbC5o
CTkgSnVsIDIwMDUgMDI6NDI6NTkgLTAwMDAKQEAgLTI1LDI3ICsyNSwyNiBAQAogI2RlZmluZSBI
VE1MX0VMRU1FTlRJTVBMX0gKIAogI2luY2x1ZGUgInhtbC9kb21fZWxlbWVudGltcGwuaCIKLSNp
bmNsdWRlIDxxcHRyZGljdC5oPgorI2luY2x1ZGUgImh0bWxuYW1lcy5oIgogCiBuYW1lc3BhY2Ug
RE9NIHsKIAogY2xhc3MgRG9jdW1lbnRGcmFnbWVudEltcGw7CiBjbGFzcyBET01TdHJpbmc7CiBj
bGFzcyBIVE1MQ29sbGVjdGlvbkltcGw7Ci0gICAgCisKK2VudW0gSFRNTFRhZ1N0YXR1cyB7IFRh
Z1N0YXR1c09wdGlvbmFsLCBUYWdTdGF0dXNSZXF1aXJlZCwgVGFnU3RhdHVzRm9yYmlkZGVuIH07
CisgICAgICAgICAgICAgICAgICAgICAgIAogY2xhc3MgSFRNTEVsZW1lbnRJbXBsIDogcHVibGlj
IFN0eWxlZEVsZW1lbnRJbXBsCiB7CiBwdWJsaWM6Ci0gICAgSFRNTEVsZW1lbnRJbXBsKERvY3Vt
ZW50UHRyICpkb2MpOwotCisgICAgSFRNTEVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUm
IHRhZ05hbWUsIERvY3VtZW50UHRyICpkb2MpOwogICAgIHZpcnR1YWwgfkhUTUxFbGVtZW50SW1w
bCgpOwogCiAgICAgdmlydHVhbCBib29sIGlzSFRNTEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0
cnVlOyB9CiAKLSAgICB2aXJ0dWFsIGJvb2wgaXNJbmxpbmUoKSBjb25zdDsKLSAgICAgCi0gICAg
dmlydHVhbCBJZCBpZCgpIGNvbnN0ID0gMDsKLSAgICAKKyAgICB2aXJ0dWFsIERPTVN0cmluZyBu
b2RlTmFtZSgpIGNvbnN0OworCiAgICAgdmlydHVhbCBib29sIG1hcFRvRW50cnkoSWQgYXR0ciwg
TWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHBh
cnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwqIGF0dHIpOwogCkBAIC01Myw3
ICs1Miw3IEBAIHB1YmxpYzoKIAogICAgIFNoYXJlZFB0cjxIVE1MQ29sbGVjdGlvbkltcGw+IGNo
aWxkcmVuKCk7CiAgICAgCi0gICAgRE9NU3RyaW5nIGlkRE9NKCkgY29uc3Q7IC8vIHJlbmFtZSB0
byBpZCBhZnRlciBlbGltaW5hdGluZyBOb2RlSW1wbDo6aWQgc29tZSBkYXkKKyAgICBET01TdHJp
bmcgaWQoKSBjb25zdDsKICAgICB2b2lkIHNldElkKGNvbnN0IERPTVN0cmluZyAmdmFsdWUpOwog
ICAgIERPTVN0cmluZyB0aXRsZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0VGl0bGUoY29uc3QgRE9N
U3RyaW5nICZ2YWx1ZSk7CkBAIC03Myw4ICs3Miw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldE91
dGVySFRNTChjb25zdCBET01TdHJpbmcgJmh0bWwsIGludCAmZXhjZXB0aW9uKTsKICAgICB2b2lk
IHNldElubmVyVGV4dChjb25zdCBET01TdHJpbmcgJnRleHQsIGludCAmZXhjZXB0aW9uKTsKICAg
ICB2b2lkIHNldE91dGVyVGV4dChjb25zdCBET01TdHJpbmcgJnRleHQsIGludCAmZXhjZXB0aW9u
KTsKLQotICAgIHZpcnR1YWwgRE9NU3RyaW5nIG5hbWVzcGFjZVVSSSgpIGNvbnN0OwogICAgIAog
ICAgIHZpcnR1YWwgYm9vbCBpc0ZvY3VzYWJsZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBp
c0NvbnRlbnRFZGl0YWJsZSgpIGNvbnN0OwpAQCAtODksMjIgKzg2LDIzIEBAIHB1YmxpYzoKIAog
ICAgIHZpcnR1YWwgRE9NU3RyaW5nIHRvU3RyaW5nKCkgY29uc3Q7CiAKKyAgICB2aXJ0dWFsIEhU
TUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCB0
YWdQcmlvcml0eSgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBjaGlsZEFsbG93ZWQoTm9kZUlt
cGwqIG5ld0NoaWxkKTsgLy8gRXJyb3ItY2hlY2tpbmcgZHVyaW5nIHBhcnNpbmcgdGhhdCBjaGVj
a3MgdGhlIERURAorCisgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNoZWNrIHRoZSBEVEQgZm9y
IGEgZ2l2ZW4gY2hpbGQgbm9kZS4KKyAgICB2aXJ0dWFsIGJvb2wgY2hlY2tEVEQoY29uc3QgTm9k
ZUltcGwqIG5ld0NoaWxkKTsKKyAgICBzdGF0aWMgYm9vbCBpbkVpdGhlclRhZ0xpc3QoY29uc3Qg
Tm9kZUltcGwqIG5ld0NoaWxkKTsKKyAgICBzdGF0aWMgYm9vbCBpbklubGluZVRhZ0xpc3QoY29u
c3QgTm9kZUltcGwqIG5ld0NoaWxkKTsKKyAgICBzdGF0aWMgYm9vbCBpbkJsb2NrVGFnTGlzdChj
b25zdCBOb2RlSW1wbCogbmV3Q2hpbGQpOworICAgIHN0YXRpYyBib29sIGlzUmVjb2duaXplZFRh
Z05hbWUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSk7CisKIHByb3RlY3RlZDoKIAogICAg
IC8vIGZvciBJTUcsIE9CSkVDVCBhbmQgQVBQTEVUCiAgICAgdm9pZCBhZGRIVE1MQWxpZ25tZW50
KE1hcHBlZEF0dHJpYnV0ZUltcGwqIGh0bWxBdHRyKTsKIH07CiAKLWNsYXNzIEhUTUxHZW5lcmlj
RWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTEVsZW1lbnRJbXBsCi17Ci1wdWJsaWM6Ci0gICAgSFRN
TEdlbmVyaWNFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCB1c2hvcnQgZWxlbWVudElkKTsK
LSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7Ci0KLXByb3RlY3RlZDoKLSAgICB1c2hvcnQgbV9l
bGVtZW50SWQ7Ci19OwotCiB9IC8vbmFtZXNwYWNlCiAKICNlbmRpZgpJbmRleDoga2h0bWwvaHRt
bC9odG1sX2Zvcm1pbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29y
ZS9raHRtbC9odG1sL2h0bWxfZm9ybWltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE3
MApkaWZmIC11IC1wIC1yMS4xNzAga2h0bWwvaHRtbC9odG1sX2Zvcm1pbXBsLmNwcAotLS0ga2h0
bWwvaHRtbC9odG1sX2Zvcm1pbXBsLmNwcAkyOSBKdW4gMjAwNSAyMDoxNDo1NyAtMDAwMAkxLjE3
MAorKysga2h0bWwvaHRtbC9odG1sX2Zvcm1pbXBsLmNwcAk5IEp1bCAyMDA1IDAyOjQzOjAyIC0w
MDAwCkBAIC0xMDMsNyArMTAzLDcgQEAgcHJpdmF0ZToKIH07CiAKIEhUTUxGb3JtRWxlbWVudElt
cGw6OkhUTUxGb3JtRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgICA6IEhUTUxFbGVt
ZW50SW1wbChkb2MpCisgICAgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjpmb3JtKCksIGRv
YykKIHsKICAgICBjb2xsZWN0aW9uSW5mbyA9IDA7CiAgICAgbV9wb3N0ID0gZmFsc2U7CkBAIC0x
MzAsMTEgKzEzMCw2IEBAIEhUTUxGb3JtRWxlbWVudEltcGw6On5IVE1MRm9ybUVsZW1lbnRJbXAK
ICAgICAgICAgaW1nRWxlbWVudHNbaV0tPm1fZm9ybSA9IDA7CiB9CiAKLU5vZGVJbXBsOjpJZCBI
VE1MRm9ybUVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0ZPUk07Ci19
Ci0KICNpZiBBUFBMRV9DSEFOR0VTCiAKIGJvb2wgSFRNTEZvcm1FbGVtZW50SW1wbDo6Zm9ybVdv
dWxkSGF2ZVNlY3VyZVN1Ym1pc3Npb24oY29uc3QgRE9NU3RyaW5nICZ1cmwpCkBAIC0xOTIsNyAr
MTg3LDcgQEAgdm9pZCBIVE1MRm9ybUVsZW1lbnRJbXBsOjpzdWJtaXRDbGljaygpCiB7CiAgICAg
Ym9vbCBzdWJtaXRGb3VuZCA9IGZhbHNlOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBm
b3JtRWxlbWVudHMuY291bnQoKTsgKytpKSB7Ci0gICAgICAgIGlmIChmb3JtRWxlbWVudHNbaV0t
PmlkKCkgPT0gSURfSU5QVVQpIHsKKyAgICAgICAgaWYgKGZvcm1FbGVtZW50c1tpXS0+aGFzTG9j
YWxOYW1lKEhUTUxOYW1lczo6aW5wdXQoKSkpIHsKICAgICAgICAgICAgIEhUTUxJbnB1dEVsZW1l
bnRJbXBsICplbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudEltcGwgKj4oZm9y
bUVsZW1lbnRzW2ldKTsKICAgICAgICAgICAgIGlmIChlbGVtZW50LT5pc1N1Y2Nlc3NmdWxTdWJt
aXRCdXR0b24oKSAmJiBlbGVtZW50LT5yZW5kZXJlcigpKSB7CiAgICAgICAgICAgICAgICAgc3Vi
bWl0Rm91bmQgPSB0cnVlOwpAQCAtMzk5LDcgKzM5NCw3IEBAIGJvb2wgSFRNTEZvcm1FbGVtZW50
SW1wbDo6Zm9ybURhdGEoRm9ybUQKIAogICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGUgY3Vy
cmVudCB0eXBlIGlzIEZJTEUsIHRoZW4gd2UgYWxzbyBuZWVkIHRvCiAgICAgICAgICAgICAgICAg
ICAgIC8vIGluY2x1ZGUgdGhlIGZpbGVuYW1lCi0gICAgICAgICAgICAgICAgICAgIGlmIChjdXJy
ZW50LT5ub2RlVHlwZSgpID09IE5vZGU6OkVMRU1FTlRfTk9ERSAmJiBjdXJyZW50LT5pZCgpID09
IElEX0lOUFVUICYmCisgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50LT5oYXNMb2NhbE5h
bWUoSFRNTE5hbWVzOjppbnB1dCgpKSAmJgogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8SFRNTElucHV0RWxlbWVudEltcGwqPihjdXJyZW50KS0+aW5wdXRUeXBlKCkgPT0gSFRN
TElucHV0RWxlbWVudEltcGw6OkZJTEUpCiAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgIFFTdHJpbmcgcGF0aCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1l
bnRJbXBsKj4oY3VycmVudCktPnZhbHVlKCkuc3RyaW5nKCk7CkBAIC01NDcsNyArNTQyLDcgQEAg
dm9pZCBIVE1MRm9ybUVsZW1lbnRJbXBsOjpzdWJtaXQoIGJvb2wgYQogI2lmIEFQUExFX0NIQU5H
RVMKICAgICAgICAgLy8gT3VyIGFwcCBuZWVkcyB0byBnZXQgZm9ybSB2YWx1ZXMgZm9yIHBhc3N3
b3JkIGZpZWxkcyBmb3IgZG9pbmcgcGFzc3dvcmQgYXV0b2NvbXBsZXRlLAogICAgICAgICAvLyBz
byB3ZSBhcmUgbW9yZSBsZW5pZW50IGluIHB1c2hpbmcgdmFsdWVzLCBhbmQgbGV0IHRoZSBhcHAg
ZGVjaWRlIHdoYXQgdG8gc2F2ZSB3aGVuLgotICAgICAgICBpZiAoY3VycmVudC0+aWQoKSA9PSBJ
RF9JTlBVVCkgeworICAgICAgICBpZiAoY3VycmVudC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6
aW5wdXQoKSkpIHsKICAgICAgICAgICAgIEhUTUxJbnB1dEVsZW1lbnRJbXBsICppbnB1dCA9IHN0
YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnRJbXBsKj4oY3VycmVudCk7CiAgICAgICAgICAgICBp
ZiAoaW5wdXQtPmlucHV0VHlwZSgpID09IEhUTUxJbnB1dEVsZW1lbnRJbXBsOjpURVhUCiAgICAg
ICAgICAgICAgICAgfHwgaW5wdXQtPmlucHV0VHlwZSgpID09ICBIVE1MSW5wdXRFbGVtZW50SW1w
bDo6UEFTU1dPUkQKQEAgLTcwOSw3ICs3MDQsNyBAQCB2b2lkIEhUTUxGb3JtRWxlbWVudEltcGw6
OnJhZGlvQ2xpY2tlZCggCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZvcm1FbGVt
ZW50cy5jb3VudCgpOyArK2kpIHsKICAgICAgICAgSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwg
KmN1cnJlbnQgPSBmb3JtRWxlbWVudHNbaV07Ci0gICAgICAgIGlmIChjdXJyZW50LT5pZCgpID09
IElEX0lOUFVUICYmCisgICAgICAgIGlmIChjdXJyZW50LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVz
OjppbnB1dCgpKSAmJgogICAgICAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudElt
cGwqPihjdXJyZW50KS0+aW5wdXRUeXBlKCkgPT0gSFRNTElucHV0RWxlbWVudEltcGw6OlJBRElP
ICYmCiAgICAgICAgICAgICBjdXJyZW50ICE9IGNhbGxlciAmJiBjdXJyZW50LT5mb3JtKCkgPT0g
Y2FsbGVyLT5mb3JtKCkgJiYgY3VycmVudC0+bmFtZSgpID09IGNhbGxlci0+bmFtZSgpKSB7CiAg
ICAgICAgICAgICBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50SW1wbCo+KGN1cnJlbnQpLT5z
ZXRDaGVja2VkKGZhbHNlKTsKQEAgLTg2NCw4ICs4NTksOCBAQCB2b2lkIEhUTUxGb3JtRWxlbWVu
dEltcGw6OnNldFRhcmdldChjb25zCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSFRNTEdlbmVy
aWNGb3JtRWxlbWVudEltcGw6OkhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKERvY3VtZW50UHRy
ICpkb2MsIEhUTUxGb3JtRWxlbWVudEltcGwgKmYpCi0gICAgOiBIVE1MRWxlbWVudEltcGwoZG9j
KQorSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGw6OkhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBs
KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50UHRyICpkb2MsIEhUTUxGb3Jt
RWxlbWVudEltcGwgKmYpCisgICAgOiBIVE1MRWxlbWVudEltcGwodGFnTmFtZSwgZG9jKQogewog
ICAgIG1fZGlzYWJsZWQgPSBtX3JlYWRPbmx5ID0gZmFsc2U7CiAgICAgbV9kb3JtYW50ID0gZmFs
c2U7CkBAIC05NjcsOSArOTYyLDggQEAgdm9pZCBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbDo6
cmVtb3ZlZAogSFRNTEZvcm1FbGVtZW50SW1wbCAqSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGw6
OmdldEZvcm0oKSBjb25zdAogewogICAgIE5vZGVJbXBsICpwID0gcGFyZW50Tm9kZSgpOwotICAg
IHdoaWxlKHApCi0gICAgewotICAgICAgICBpZiggcC0+aWQoKSA9PSBJRF9GT1JNICkKKyAgICB3
aGlsZShwKSB7CisgICAgICAgIGlmIChwLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Zm9ybSgpKSkK
ICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnRJbXBsICo+KHAp
OwogICAgICAgICBwID0gcC0+cGFyZW50Tm9kZSgpOwogICAgIH0KQEAgLTExODksNyArMTE4Myw3
IEBAIHZvaWQgSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGw6OnNldFRhYkkKIC8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KIAogSFRNTEJ1dHRvbkVsZW1lbnRJbXBsOjpIVE1MQnV0dG9uRWxlbWVudEltcGwo
RG9jdW1lbnRQdHIgKmRvYywgSFRNTEZvcm1FbGVtZW50SW1wbCAqZikKLSAgICA6IEhUTUxHZW5l
cmljRm9ybUVsZW1lbnRJbXBsKGRvYywgZikKKyAgICA6IEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJ
bXBsKEhUTUxOYW1lczo6YnV0dG9uKCksIGRvYywgZikKIHsKICAgICBtX3R5cGUgPSBTVUJNSVQ7
CiAgICAgbV9kaXJ0eSA9IHRydWU7CkBAIC0xMjAwLDExICsxMTk0LDYgQEAgSFRNTEJ1dHRvbkVs
ZW1lbnRJbXBsOjp+SFRNTEJ1dHRvbkVsZW1lbgogewogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTEJ1
dHRvbkVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0JVVFRPTjsKLX0K
LQogRE9NU3RyaW5nIEhUTUxCdXR0b25FbGVtZW50SW1wbDo6dHlwZSgpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIGdldEF0dHJpYnV0ZShBVFRSX1RZUEUpOwpAQCAtMTMyNiw3ICsxMzE1LDcgQEAgdm9p
ZCBIVE1MQnV0dG9uRWxlbWVudEltcGw6OnNldFZhbHVlKGNvbgogLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQogCiBIVE1MRmllbGRTZXRFbGVtZW50SW1wbDo6SFRNTEZpZWxkU2V0RWxlbWVudEltcGwoRG9j
dW1lbnRQdHIgKmRvYywgSFRNTEZvcm1FbGVtZW50SW1wbCAqZikKLSAgIDogSFRNTEdlbmVyaWNG
b3JtRWxlbWVudEltcGwoZG9jLCBmKQorICAgOiBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbChI
VE1MTmFtZXM6OmZpZWxkc2V0KCksIGRvYywgZikKIHsKIH0KIApAQCAtMTMzNCwxNCArMTMyMywx
NCBAQCBIVE1MRmllbGRTZXRFbGVtZW50SW1wbDo6fkhUTUxGaWVsZFNldEVsCiB7CiB9CiAKLWJv
b2wgSFRNTEZpZWxkU2V0RWxlbWVudEltcGw6OmlzRm9jdXNhYmxlKCkgY29uc3QKK2Jvb2wgSFRN
TEZpZWxkU2V0RWxlbWVudEltcGw6OmNoZWNrRFREKGNvbnN0IE5vZGVJbXBsKiBuZXdDaGlsZCkK
IHsKLSAgICByZXR1cm4gZmFsc2U7CisJcmV0dXJuIG5ld0NoaWxkLT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6bGVnZW5kKCkpIHx8IEhUTUxFbGVtZW50SW1wbDo6Y2hlY2tEVEQobmV3Q2hpbGQpOwog
fQogCi1Ob2RlSW1wbDo6SWQgSFRNTEZpZWxkU2V0RWxlbWVudEltcGw6OmlkKCkgY29uc3QKK2Jv
b2wgSFRNTEZpZWxkU2V0RWxlbWVudEltcGw6OmlzRm9jdXNhYmxlKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gSURfRklFTERTRVQ7CisgICAgcmV0dXJuIGZhbHNlOwogfQogCiBET01TdHJpbmcgSFRN
TEZpZWxkU2V0RWxlbWVudEltcGw6OnR5cGUoKSBjb25zdApAQCAtMTM1Nyw4ICsxMzQ2LDIxIEBA
IFJlbmRlck9iamVjdCogSFRNTEZpZWxkU2V0RWxlbWVudEltcGw6OmMKIC8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KIAogSFRNTElucHV0RWxlbWVudEltcGw6OkhUTUxJbnB1dEVsZW1lbnRJbXBsKERvY3Vt
ZW50UHRyICpkb2MsIEhUTUxGb3JtRWxlbWVudEltcGwgKmYpCi0gICAgOiBIVE1MR2VuZXJpY0Zv
cm1FbGVtZW50SW1wbChkb2MsIGYpLCBtX2ltYWdlTG9hZGVyKDApLCBtX3ZhbHVlTWF0Y2hlc1Jl
bmRlcmVyKGZhbHNlKQorICAgIDogSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwoSFRNTE5hbWVz
OjppbnB1dCgpLCBkb2MsIGYpCit7CisgICAgaW5pdCgpOworfQorCitIVE1MSW5wdXRFbGVtZW50
SW1wbDo6SFRNTElucHV0RWxlbWVudEltcGwoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwg
RG9jdW1lbnRQdHIgKmRvYywgSFRNTEZvcm1FbGVtZW50SW1wbCAqZikKKyAgICA6IEhUTUxHZW5l
cmljRm9ybUVsZW1lbnRJbXBsKHRhZ05hbWUsIGRvYywgZikKIHsKKyAgICBpbml0KCk7Cit9CisK
K3ZvaWQgSFRNTElucHV0RWxlbWVudEltcGw6OmluaXQoKQoreworICAgIG1faW1hZ2VMb2FkZXIg
PSAwOworICAgIG1fdmFsdWVNYXRjaGVzUmVuZGVyZXIgPSBmYWxzZTsKICAgICBtX3R5cGUgPSBU
RVhUOwogICAgIG1fbWF4TGVuID0gLTE7CiAgICAgbV9zaXplID0gMjA7CkBAIC0xMzc2LDggKzEz
NzgsOCBAQCBIVE1MSW5wdXRFbGVtZW50SW1wbDo6SFRNTElucHV0RWxlbWVudEltCiAKICAgICBt
X21heFJlc3VsdHMgPSAtMTsKIAotICAgIGlmICggbV9mb3JtICkKLSAgICAgICAgbV9hdXRvY29t
cGxldGUgPSBmLT5hdXRvQ29tcGxldGUoKTsKKyAgICBpZiAobV9mb3JtKQorICAgICAgICBtX2F1
dG9jb21wbGV0ZSA9IG1fZm9ybS0+YXV0b0NvbXBsZXRlKCk7CiB9CiAKIEhUTUxJbnB1dEVsZW1l
bnRJbXBsOjp+SFRNTElucHV0RWxlbWVudEltcGwoKQpAQCAtMTM4NiwxMSArMTM4OCw2IEBAIEhU
TUxJbnB1dEVsZW1lbnRJbXBsOjp+SFRNTElucHV0RWxlbWVudEkKICAgICBkZWxldGUgbV9pbWFn
ZUxvYWRlcjsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxJbnB1dEVsZW1lbnRJbXBsOjppZCgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIElEX0lOUFVUOwotfQotCiB2b2lkIEhUTUxJbnB1dEVsZW1lbnRJ
bXBsOjpzZXRUeXBlKGNvbnN0IERPTVN0cmluZyYgdCkKIHsKICAgICB0eXBlRW51bSBuZXdUeXBl
OwpAQCAtMjQ2OCw3ICsyNDY1LDcgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50SW1wbDo6c2V0VXNl
TWFwKGNvbgogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MTGFiZWxFbGVtZW50SW1wbDo6SFRN
TExhYmVsRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50SW1w
bChkb2MpCisgICAgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjpsYWJlbCgpLCBkb2MpCiB7
CiB9CiAKQEAgLTI0ODEsMTEgKzI0NzgsNiBAQCBib29sIEhUTUxMYWJlbEVsZW1lbnRJbXBsOjpp
c0ZvY3VzYWJsZSgpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTExh
YmVsRWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfTEFCRUw7Ci19Ci0K
IHZvaWQgSFRNTExhYmVsRWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0
dHJpYnV0ZUltcGwgKmF0dHIpCiB7CiAgICAgc3dpdGNoKGF0dHItPmlkKCkpCkBAIC0yNTM5LDcg
KzI1MzEsNyBAQCB2b2lkIEhUTUxMYWJlbEVsZW1lbnRJbXBsOjphY2Nlc3NLZXlBY3RpCiBIVE1M
Rm9ybUVsZW1lbnRJbXBsICpIVE1MTGFiZWxFbGVtZW50SW1wbDo6Zm9ybSgpCiB7CiAgICAgZm9y
IChOb2RlSW1wbCAqcCA9IHBhcmVudE5vZGUoKTsgcCAhPSAwOyBwID0gcC0+cGFyZW50Tm9kZSgp
KSB7Ci0gICAgICAgIGlmIChwLT5pZCgpID09IElEX0ZPUk0pCisgICAgICAgIGlmIChwLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6Zm9ybSgpKSkKICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxIVE1MRm9ybUVsZW1lbnRJbXBsICo+KHApOwogICAgIH0KICAgICAKQEAgLTI1NjksNyArMjU2
MSw3IEBAIHZvaWQgSFRNTExhYmVsRWxlbWVudEltcGw6OnNldEh0bWxGb3IoY28KIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KIAogSFRNTExlZ2VuZEVsZW1lbnRJbXBsOjpIVE1MTGVnZW5kRWxlbWVudElt
cGwoRG9jdW1lbnRQdHIgKmRvYywgSFRNTEZvcm1FbGVtZW50SW1wbCAqZikKLTogSFRNTEdlbmVy
aWNGb3JtRWxlbWVudEltcGwoZG9jLCBmKQorOiBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbChI
VE1MTmFtZXM6OmxlZ2VuZCgpLCBkb2MsIGYpCiB7CiB9CiAKQEAgLTI1ODIsMTEgKzI1NzQsNiBA
QCBib29sIEhUTUxMZWdlbmRFbGVtZW50SW1wbDo6aXNGb2N1c2FibGUoCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTExlZ2VuZEVsZW1lbnRJbXBsOjppZCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIElEX0xFR0VORDsKLX0KLQogUmVuZGVyT2JqZWN0KiBIVE1MTGVnZW5k
RWxlbWVudEltcGw6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiBhcmVuYSwgUmVuZGVyU3R5
bGUqIHN0eWxlKQogewogICAgIHJldHVybiBuZXcgKGFyZW5hKSBSZW5kZXJMZWdlbmQodGhpcyk7
CkBAIC0yNjIxLDcgKzI2MDgsNyBAQCBFbGVtZW50SW1wbCAqSFRNTExlZ2VuZEVsZW1lbnRJbXBs
Ojpmb3JtCiB7CiAgICAgLy8gQ2hlY2sgaWYgdGhlcmUncyBhIGZpZWxkc2V0IGJlbG9uZ2luZyB0
byB0aGlzIGxlZ2VuZC4KICAgICBOb2RlSW1wbCAqZmllbGRzZXQgPSBwYXJlbnROb2RlKCk7Ci0g
ICAgd2hpbGUgKGZpZWxkc2V0ICYmIGZpZWxkc2V0LT5pZCgpICE9IElEX0ZJRUxEU0VUKQorICAg
IHdoaWxlIChmaWVsZHNldCAmJiAhZmllbGRzZXQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpmaWVs
ZHNldCgpKSkKICAgICAgICAgZmllbGRzZXQgPSBmaWVsZHNldC0+cGFyZW50Tm9kZSgpOwogICAg
IGlmICghZmllbGRzZXQpCiAgICAgICAgIHJldHVybiAwOwpAQCAtMjYzMiw3ICsyNjE5LDcgQEAg
RWxlbWVudEltcGwgKkhUTUxMZWdlbmRFbGVtZW50SW1wbDo6Zm9ybQogICAgIHdoaWxlICgobm9k
ZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoZmllbGRzZXQpKSkgewogICAgICAgICBpZiAobm9k
ZS0+aXNIVE1MRWxlbWVudCgpKSB7CiAgICAgICAgICAgICBIVE1MRWxlbWVudEltcGwgKmVsZW1l
bnQgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwgKj4obm9kZSk7Ci0gICAgICAgICAgICBp
ZiAoZWxlbWVudC0+aWQoKSAhPSBJRF9MRUdFTkQgJiYgZWxlbWVudC0+aXNHZW5lcmljRm9ybUVs
ZW1lbnQoKSkKKyAgICAgICAgICAgIGlmICghZWxlbWVudC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1l
czo6bGVnZW5kKCkpICYmIGVsZW1lbnQtPmlzR2VuZXJpY0Zvcm1FbGVtZW50KCkpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAgICAgICAgIH0KICAgICB9CkBAIC0yNjU1LDggKzI2
NDIsMjAgQEAgdm9pZCBIVE1MTGVnZW5kRWxlbWVudEltcGw6OmFjY2Vzc0tleUFjdAogLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQogCiBIVE1MU2VsZWN0RWxlbWVudEltcGw6OkhUTUxTZWxlY3RFbGVtZW50
SW1wbChEb2N1bWVudFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmKQotICAgIDogSFRN
TEdlbmVyaWNGb3JtRWxlbWVudEltcGwoZG9jLCBmKSwgbV9vcHRpb25zKDApCisgICAgOiBIVE1M
R2VuZXJpY0Zvcm1FbGVtZW50SW1wbChIVE1MTmFtZXM6OnNlbGVjdCgpLCBkb2MsIGYpLCBtX29w
dGlvbnMoMCkKIHsKKyAgICBpbml0KCk7Cit9CisKK0hUTUxTZWxlY3RFbGVtZW50SW1wbDo6SFRN
TFNlbGVjdEVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50
UHRyICpkb2MsIEhUTUxGb3JtRWxlbWVudEltcGwgKmYpCisgICAgOiBIVE1MR2VuZXJpY0Zvcm1F
bGVtZW50SW1wbCh0YWdOYW1lLCBkb2MsIGYpLCBtX29wdGlvbnMoMCkKK3sKKyAgICBpbml0KCk7
Cit9CisKK3ZvaWQgSFRNTFNlbGVjdEVsZW1lbnRJbXBsOjppbml0KCkKK3sKKyAgICBtX29wdGlv
bnMgPSAwOwogICAgIG1fbXVsdGlwbGUgPSBmYWxzZTsKICAgICBtX3JlY2FsY0xpc3RJdGVtcyA9
IGZhbHNlOwogICAgIC8vIDAgbWVhbnMgaW52YWxpZCAoaS5lLiBub3Qgc2V0KQpAQCAtMjY3Myw5
ICsyNjcyLDEwIEBAIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6fkhUTUxTZWxlY3RFbGVtZW4KICAg
ICB9CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MU2VsZWN0RWxlbWVudEltcGw6OmlkKCkgY29uc3QK
K2Jvb2wgSFRNTFNlbGVjdEVsZW1lbnRJbXBsOjpjaGVja0RURChjb25zdCBOb2RlSW1wbCogbmV3
Q2hpbGQpCiB7Ci0gICAgcmV0dXJuIElEX1NFTEVDVDsKKwlyZXR1cm4gbmV3Q2hpbGQtPmlzVGV4
dE5vZGUoKSB8fCBuZXdDaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9wdGlvbigpKSB8fCBu
ZXdDaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9wdGdyb3VwKCkpIHx8CisJCSAgIG5ld0No
aWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c2NyaXB0KCkpOwogfQogCiB2b2lkIEhUTUxTZWxl
Y3RFbGVtZW50SW1wbDo6cmVjYWxjU3R5bGUoIFN0eWxlQ2hhbmdlIGNoICkKQEAgLTI2OTksNyAr
MjY5OSw3IEBAIGxvbmcgSFRNTFNlbGVjdEVsZW1lbnRJbXBsOjpzZWxlY3RlZEluZGUKICAgICB1
aW50IG8gPSAwOwogICAgIFFNZW1BcnJheTxIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbCo+IGl0
ZW1zID0gbGlzdEl0ZW1zKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBpdGVt
cy5zaXplKCk7IGkrKykgewotICAgICAgICBpZiAoaXRlbXNbaV0tPmlkKCkgPT0gSURfT1BUSU9O
KSB7CisgICAgICAgIGlmIChpdGVtc1tpXS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b3B0aW9u
KCkpKSB7CiAgICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnRJbXBs
Kj4oaXRlbXNbaV0pLT5zZWxlY3RlZCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBvOwogICAg
ICAgICAgICAgbysrOwpAQCAtMjcxNSw3ICsyNzE1LDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVu
dEltcGw6OnNldFNlbGVjdGVkSQogICAgIFFNZW1BcnJheTxIVE1MR2VuZXJpY0Zvcm1FbGVtZW50
SW1wbCo+IGl0ZW1zID0gbGlzdEl0ZW1zKCk7CiAgICAgaW50IGxpc3RJbmRleDsKICAgICBmb3Ig
KGxpc3RJbmRleCA9IDA7IGxpc3RJbmRleCA8IGludChpdGVtcy5zaXplKCkpOyBsaXN0SW5kZXgr
KykgewotICAgICAgICBpZiAoaXRlbXNbbGlzdEluZGV4XS0+aWQoKSA9PSBJRF9PUFRJT04pCisg
ICAgICAgIGlmIChpdGVtc1tsaXN0SW5kZXhdLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvcHRp
b24oKSkpCiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudEltcGwqPihp
dGVtc1tsaXN0SW5kZXhdKS0+c2V0U2VsZWN0ZWQoZmFsc2UpOwogICAgIH0KICAgICBsaXN0SW5k
ZXggPSBvcHRpb25Ub0xpc3RJbmRleChpbmRleCk7CkBAIC0yNzMxLDcgKzI3MzEsNyBAQCBsb25n
IEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6bGVuZ3RoKCkgY29uCiAgICAgdWludCBpOwogICAgIFFN
ZW1BcnJheTxIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbCo+IGl0ZW1zID0gbGlzdEl0ZW1zKCk7
CiAgICAgZm9yIChpID0gMDsgaSA8IGl0ZW1zLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIGlmIChp
dGVtc1tpXS0+aWQoKSA9PSBJRF9PUFRJT04pCisgICAgICAgIGlmIChpdGVtc1tpXS0+aGFzTG9j
YWxOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpKQogICAgICAgICAgICAgbGVuKys7CiAgICAgfQog
ICAgIHJldHVybiBsZW47CkBAIC0yNzM5LDcgKzI3MzksNyBAQCBsb25nIEhUTUxTZWxlY3RFbGVt
ZW50SW1wbDo6bGVuZ3RoKCkgY29uCiAKIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnRJbXBsOjphZGQo
IEhUTUxFbGVtZW50SW1wbCAqZWxlbWVudCwgSFRNTEVsZW1lbnRJbXBsICpiZWZvcmUgKQogewot
ICAgIGlmICghZWxlbWVudCB8fCBlbGVtZW50LT5pZCgpICE9IElEX09QVElPTikKKyAgICBpZiAo
IWVsZW1lbnQgfHwgIWVsZW1lbnQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9wdGlvbigpKSkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgaW50IGV4Y2VwdGlvbmNvZGUgPSAwOwpAQCAtMjc3Mywx
MyArMjc3MywxMiBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6Zm9jdXMoKQogICAgIGdl
dERvY3VtZW50KCktPnNldEZvY3VzTm9kZSh0aGlzKTsKIH0KIAotRE9NU3RyaW5nIEhUTUxTZWxl
Y3RFbGVtZW50SW1wbDo6dmFsdWUoICkKK0RPTVN0cmluZyBIVE1MU2VsZWN0RWxlbWVudEltcGw6
OnZhbHVlKCkKIHsKICAgICB1aW50IGk7CiAgICAgUU1lbUFycmF5PEhUTUxHZW5lcmljRm9ybUVs
ZW1lbnRJbXBsKj4gaXRlbXMgPSBsaXN0SXRlbXMoKTsKICAgICBmb3IgKGkgPSAwOyBpIDwgaXRl
bXMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgaWYgKCBpdGVtc1tpXS0+aWQoKSA9PSBJRF9PUFRJ
T04KLSAgICAgICAgICAgICYmIHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50SW1wbCo+KGl0
ZW1zW2ldKS0+c2VsZWN0ZWQoKSkKKyAgICAgICAgaWYgKGl0ZW1zW2ldLT5oYXNMb2NhbE5hbWUo
SFRNTE5hbWVzOjpvcHRpb24oKSkgJiYgc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnRJbXBs
Kj4oaXRlbXNbaV0pLT5zZWxlY3RlZCgpKQogICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PEhUTUxPcHRpb25FbGVtZW50SW1wbCo+KGl0ZW1zW2ldKS0+dmFsdWUoKTsKICAgICB9CiAgICAg
cmV0dXJuIERPTVN0cmluZygiIik7CkBAIC0yNzkzLDEzICsyNzkyLDEzIEBAIHZvaWQgSFRNTFNl
bGVjdEVsZW1lbnRJbXBsOjpzZXRWYWx1ZShjb24KICAgICAvLyBhbmQgbWFrZSBpdCB0aGUgY3Vy
cmVudCBzZWxlY3Rpb24uCiAgICAgUU1lbUFycmF5PEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBs
Kj4gaXRlbXMgPSBsaXN0SXRlbXMoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaXRl
bXMuc2l6ZSgpOyBpKyspCi0gICAgICAgIGlmIChpdGVtc1tpXS0+aWQoKSA9PSBJRF9PUFRJT04g
JiYgc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnRJbXBsKj4oaXRlbXNbaV0pLT52YWx1ZSgp
ID09IHZhbHVlKSB7CisgICAgICAgIGlmIChpdGVtc1tpXS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1l
czo6b3B0aW9uKCkpICYmIHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50SW1wbCo+KGl0ZW1z
W2ldKS0+dmFsdWUoKSA9PSB2YWx1ZSkgewogICAgICAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTE9w
dGlvbkVsZW1lbnRJbXBsKj4oaXRlbXNbaV0pLT5zZXRTZWxlY3RlZCh0cnVlKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogfQogCi1RU3RyaW5nIEhUTUxTZWxlY3RFbGVtZW50SW1w
bDo6c3RhdGUoICkKK1FTdHJpbmcgSFRNTFNlbGVjdEVsZW1lbnRJbXBsOjpzdGF0ZSgpCiB7CiAj
aWYgIUFQUExFX0NIQU5HRVMKICAgICBRU3RyaW5nIHN0YXRlOwpAQCAtMjgxMiw3ICsyODExLDcg
QEAgUVN0cmluZyBIVE1MU2VsZWN0RWxlbWVudEltcGw6OnN0YXRlKCApCiAgICAgUUNoYXIgc3Rh
dGVDaGFyc1tsXTsKICAgICAKICAgICBmb3IoaW50IGkgPSAwOyBpIDwgbDsgaSsrKQotICAgICAg
ICBpZihpdGVtc1tpXS0+aWQoKSA9PSBJRF9PUFRJT04gJiYgc3RhdGljX2Nhc3Q8SFRNTE9wdGlv
bkVsZW1lbnRJbXBsKj4oaXRlbXNbaV0pLT5zZWxlY3RlZCgpKQorICAgICAgICBpZihpdGVtc1tp
XS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpICYmIHN0YXRpY19jYXN0PEhUTUxP
cHRpb25FbGVtZW50SW1wbCo+KGl0ZW1zW2ldKS0+c2VsZWN0ZWQoKSkKICAgICAgICAgICAgIHN0
YXRlQ2hhcnNbaV0gPSAnWCc7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHN0YXRlQ2hhcnNb
aV0gPSAnLic7CkBAIC0yODQ5LDcgKzI4NDgsNyBAQCB2b2lkIEhUTUxTZWxlY3RFbGVtZW50SW1w
bDo6cmVzdG9yZVN0YXRlCiAKICAgICBpbnQgbCA9IGl0ZW1zLmNvdW50KCk7CiAgICAgZm9yKGlu
dCBpID0gMDsgaSA8IGw7IGkrKykgewotICAgICAgICBpZihpdGVtc1tpXS0+aWQoKSA9PSBJRF9P
UFRJT04pIHsKKyAgICAgICAgaWYoaXRlbXNbaV0tPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9w
dGlvbigpKSkgewogICAgICAgICAgICAgSFRNTE9wdGlvbkVsZW1lbnRJbXBsKiBvZSA9IHN0YXRp
Y19jYXN0PEhUTUxPcHRpb25FbGVtZW50SW1wbCo+KGl0ZW1zW2ldKTsKICAgICAgICAgICAgIG9l
LT5zZXRTZWxlY3RlZChzdGF0ZVtpXSA9PSAnWCcpOwogICAgICAgICB9CkBAIC0yOTQxLDcgKzI5
NDAsNyBAQCBib29sIEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6YXBwZW5kRm9ybURhCiAKICAgICB1
aW50IGk7CiAgICAgZm9yIChpID0gMDsgaSA8IGl0ZW1zLnNpemUoKTsgaSsrKSB7Ci0gICAgICAg
IGlmIChpdGVtc1tpXS0+aWQoKSA9PSBJRF9PUFRJT04pIHsKKyAgICAgICAgaWYgKGl0ZW1zW2ld
LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvcHRpb24oKSkpIHsKICAgICAgICAgICAgIEhUTUxP
cHRpb25FbGVtZW50SW1wbCAqb3B0aW9uID0gc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnRJ
bXBsKj4oaXRlbXNbaV0pOwogICAgICAgICAgICAgaWYgKG9wdGlvbi0+c2VsZWN0ZWQoKSkgewog
ICAgICAgICAgICAgICAgIGVuY29kZWRfdmFsdWVzLmFwcGVuZERhdGEobmFtZSgpLCBvcHRpb24t
PnZhbHVlKCkpOwpAQCAtMjk1NCw3ICsyOTUzLDcgQEAgYm9vbCBIVE1MU2VsZWN0RWxlbWVudElt
cGw6OmFwcGVuZEZvcm1EYQogICAgIC8vIGluIGFueSBjYXNlLiBvdGhlcndpc2Ugd2UgaGF2ZSBu
byBjb25zaXN0ZW5jeSB3aXRoIHRoZSBET00gaW50ZXJmYWNlLiBGSVhNRSEKICAgICAvLyB3ZSBy
ZXR1cm4gdGhlIGZpcnN0IG9uZSBpZiBpdCB3YXMgYSBjb21ib2JveCBzZWxlY3QKICAgICBpZiAo
IXN1Y2Nlc3NmdWwgJiYgIW1fbXVsdGlwbGUgJiYgbV9zaXplIDw9IDEgJiYgaXRlbXMuc2l6ZSgp
ICYmCi0gICAgICAgIChpdGVtc1swXS0+aWQoKSA9PSBJRF9PUFRJT04pICkgeworICAgICAgICAo
aXRlbXNbMF0tPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9wdGlvbigpKSkpIHsKICAgICAgICAg
SFRNTE9wdGlvbkVsZW1lbnRJbXBsICpvcHRpb24gPSBzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxl
bWVudEltcGwqPihpdGVtc1swXSk7CiAgICAgICAgIGlmIChvcHRpb24tPnZhbHVlKCkuaXNOdWxs
KCkpCiAgICAgICAgICAgICBlbmNvZGVkX3ZhbHVlcy5hcHBlbmREYXRhKG5hbWUoKSwgb3B0aW9u
LT50ZXh0KCkuc3RyaW5nKCkuc3RyaXBXaGl0ZVNwYWNlKCkpOwpAQCAtMjk3Nyw3ICsyOTc2LDcg
QEAgaW50IEhUTUxTZWxlY3RFbGVtZW50SW1wbDo6b3B0aW9uVG9MaXN0SQogICAgIGZvciAoOwog
ICAgICAgICAgb3B0aW9uSW5kZXgyIDwgaW50KGl0ZW1zLnNpemUoKSkgJiYgb3B0aW9uSW5kZXgy
IDw9IG9wdGlvbkluZGV4OwogICAgICAgICAgbGlzdEluZGV4KyspIHsgLy8gbm90IGEgdHlwbyEK
LSAgICAgICAgaWYgKGl0ZW1zW2xpc3RJbmRleF0tPmlkKCkgPT0gSURfT1BUSU9OKQorICAgICAg
ICBpZiAoaXRlbXNbbGlzdEluZGV4XS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkp
KQogICAgICAgICAgICAgb3B0aW9uSW5kZXgyKys7CiAgICAgfQogICAgIGxpc3RJbmRleC0tOwpA
QCAtMjk4OCwxMyArMjk4NywxMyBAQCBpbnQgSFRNTFNlbGVjdEVsZW1lbnRJbXBsOjpsaXN0VG9P
cHRpb25JCiB7CiAgICAgUU1lbUFycmF5PEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKj4gaXRl
bXMgPSBsaXN0SXRlbXMoKTsKICAgICBpZiAobGlzdEluZGV4IDwgMCB8fCBsaXN0SW5kZXggPj0g
aW50KGl0ZW1zLnNpemUoKSkgfHwKLSAgICAgICAgaXRlbXNbbGlzdEluZGV4XS0+aWQoKSAhPSBJ
RF9PUFRJT04pCisgICAgICAgICFpdGVtc1tsaXN0SW5kZXhdLT5oYXNMb2NhbE5hbWUoSFRNTE5h
bWVzOjpvcHRpb24oKSkpCiAgICAgICAgIHJldHVybiAtMTsKIAogICAgIGludCBvcHRpb25JbmRl
eCA9IDA7IC8vIGFjdHVhbCBpbmRleCBvZiBvcHRpb24gbm90IGNvdW50aW5nIE9QVEdST1VQIGVu
dHJpZXMgdGhhdCBtYXkgYmUgaW4gbGlzdAogICAgIGludCBpOwogICAgIGZvciAoaSA9IDA7IGkg
PCBsaXN0SW5kZXg7IGkrKykKLSAgICAgICAgaWYgKGl0ZW1zW2ldLT5pZCgpID09IElEX09QVElP
TikKKyAgICAgICAgaWYgKGl0ZW1zW2ldLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvcHRpb24o
KSkpCiAgICAgICAgICAgICBvcHRpb25JbmRleCsrOwogICAgIHJldHVybiBvcHRpb25JbmRleDsK
IH0KQEAgLTMwMjAsMTMgKzMwMTksMTMgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudEltcGw6OnJl
Y2FsY0xpc3RJdAogICAgIG1fbGlzdEl0ZW1zLnJlc2l6ZSgwKTsKICAgICBIVE1MT3B0aW9uRWxl
bWVudEltcGwqIGZvdW5kU2VsZWN0ZWQgPSAwOwogICAgIHdoaWxlKGN1cnJlbnQpIHsKLSAgICAg
ICAgaWYgKGN1cnJlbnQtPmlkKCkgPT0gSURfT1BUR1JPVVAgJiYgY3VycmVudC0+Zmlyc3RDaGls
ZCgpKSB7CisgICAgICAgIGlmIChjdXJyZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b3B0Z3Jv
dXAoKSkgJiYgY3VycmVudC0+Zmlyc3RDaGlsZCgpKSB7CiAgICAgICAgICAgICAvLyAjIyMgd2hh
dCBpZiBvcHRncm91cCBjb250YWlucyBqdXN0IGNvbW1lbnRzPyBkb24ndCB3YW50IG9uZSBvZiBu
byBvcHRpb25zIGluIGl0Li4uCiAgICAgICAgICAgICBtX2xpc3RJdGVtcy5yZXNpemUobV9saXN0
SXRlbXMuc2l6ZSgpKzEpOwogICAgICAgICAgICAgbV9saXN0SXRlbXNbbV9saXN0SXRlbXMuc2l6
ZSgpLTFdID0gc3RhdGljX2Nhc3Q8SFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwqPihjdXJyZW50
KTsKICAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT5maXJzdENoaWxkKCk7CiAgICAgICAg
IH0KLSAgICAgICAgaWYgKGN1cnJlbnQtPmlkKCkgPT0gSURfT1BUSU9OKSB7CisgICAgICAgIGlm
IChjdXJyZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpKSB7CiAgICAgICAgICAg
ICBtX2xpc3RJdGVtcy5yZXNpemUobV9saXN0SXRlbXMuc2l6ZSgpKzEpOwogICAgICAgICAgICAg
bV9saXN0SXRlbXNbbV9saXN0SXRlbXMuc2l6ZSgpLTFdID0gc3RhdGljX2Nhc3Q8SFRNTEdlbmVy
aWNGb3JtRWxlbWVudEltcGwqPihjdXJyZW50KTsKICAgICAgICAgICAgIGlmICghZm91bmRTZWxl
Y3RlZCAmJiAhbV9tdWx0aXBsZSAmJiBtX3NpemUgPD0gMSkgewpAQCAtMzA2OCw3ICszMDY3LDcg
QEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudEltcGw6OnJlc2V0KCkKICAgICBRTWVtQXJyYXk8SFRN
TEdlbmVyaWNGb3JtRWxlbWVudEltcGwqPiBpdGVtcyA9IGxpc3RJdGVtcygpOwogICAgIHVpbnQg
aTsKICAgICBmb3IgKGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgaWYg
KGl0ZW1zW2ldLT5pZCgpID09IElEX09QVElPTikgeworICAgICAgICBpZiAoaXRlbXNbaV0tPmhh
c0xvY2FsTmFtZShIVE1MTmFtZXM6Om9wdGlvbigpKSkgewogICAgICAgICAgICAgSFRNTE9wdGlv
bkVsZW1lbnRJbXBsICpvcHRpb24gPSBzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudEltcGwq
PihpdGVtc1tpXSk7CiAgICAgICAgICAgICBib29sIHNlbGVjdGVkID0gKCFvcHRpb24tPmdldEF0
dHJpYnV0ZShBVFRSX1NFTEVDVEVEKS5pc051bGwoKSk7CiAgICAgICAgICAgICBvcHRpb24tPnNl
dFNlbGVjdGVkKHNlbGVjdGVkKTsKQEAgLTMwODYsNyArMzA4NSw3IEBAIHZvaWQgSFRNTFNlbGVj
dEVsZW1lbnRJbXBsOjpub3RpZnlPcHRpb24KICAgICAgICAgUU1lbUFycmF5PEhUTUxHZW5lcmlj
Rm9ybUVsZW1lbnRJbXBsKj4gaXRlbXMgPSBsaXN0SXRlbXMoKTsKICAgICAgICAgdWludCBpOwog
ICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgICAg
IGlmIChpdGVtc1tpXS0+aWQoKSA9PSBJRF9PUFRJT04pCisgICAgICAgICAgICBpZiAoaXRlbXNb
aV0tPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9wdGlvbigpKSkKICAgICAgICAgICAgICAgICBz
dGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudEltcGwqPihpdGVtc1tpXSktPm1fc2VsZWN0ZWQg
PSAoaXRlbXNbaV0gPT0gc2VsZWN0ZWRPcHRpb24pOwogICAgICAgICB9CiAgICAgfQpAQCAtMzEz
Myw3ICszMTMyLDcgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudEltcGw6OnNldFNpemUobG9uZwog
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MS2V5Z2VuRWxlbWVudEltcGw6OkhUTUxLZXlnZW5F
bGVtZW50SW1wbChEb2N1bWVudFB0ciogZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsKiBmKQotICAg
IDogSFRNTFNlbGVjdEVsZW1lbnRJbXBsKGRvYywgZikKKyAgICA6IEhUTUxTZWxlY3RFbGVtZW50
SW1wbChIVE1MTmFtZXM6OmtleWdlbigpLCBkb2MsIGYpCiB7CiAgICAgUVN0cmluZ0xpc3Qga2V5
cyA9IEtTU0xLZXlHZW46OnN1cHBvcnRlZEtleVNpemVzKCk7CiAgICAgZm9yIChRU3RyaW5nTGlz
dDo6SXRlcmF0b3IgaSA9IGtleXMuYmVnaW4oKTsgaSAhPSBrZXlzLmVuZCgpOyArK2kpIHsKQEAg
LTMxNDMsMTEgKzMxNDIsNiBAQCBIVE1MS2V5Z2VuRWxlbWVudEltcGw6OkhUTUxLZXlnZW5FbGVt
ZW50CiAgICAgfQogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTEtleWdlbkVsZW1lbnRJbXBsOjppZCgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0tFWUdFTjsKLX0KLQogRE9NU3RyaW5nIEhUTUxLZXln
ZW5FbGVtZW50SW1wbDo6dHlwZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuICJrZXlnZW4iOwpAQCAt
MzIwMiw3ICszMTk2LDcgQEAgYm9vbCBIVE1MS2V5Z2VuRWxlbWVudEltcGw6OmFwcGVuZEZvcm1E
YQogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MT3B0R3JvdXBFbGVtZW50SW1wbDo6SFRNTE9w
dEdyb3VwRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgSFRNTEZvcm1FbGVtZW50SW1wbCAq
ZikKLSAgICA6IEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKGRvYywgZikKKyAgICA6IEhUTUxH
ZW5lcmljRm9ybUVsZW1lbnRJbXBsKEhUTUxOYW1lczo6b3B0Z3JvdXAoKSwgZG9jLCBmKQogewog
fQogCkBAIC0zMjE1LDExICszMjA5LDYgQEAgYm9vbCBIVE1MT3B0R3JvdXBFbGVtZW50SW1wbDo6
aXNGb2N1c2FibAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxPcHRH
cm91cEVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX09QVEdST1VQOwot
fQotCiBET01TdHJpbmcgSFRNTE9wdEdyb3VwRWxlbWVudEltcGw6OnR5cGUoKSBjb25zdAogewog
ICAgIHJldHVybiAib3B0Z3JvdXAiOwpAQCAtMzI3Myw3ICszMjYyLDcgQEAgdm9pZCBIVE1MT3B0
R3JvdXBFbGVtZW50SW1wbDo6cGFyc2VNYXBwZQogdm9pZCBIVE1MT3B0R3JvdXBFbGVtZW50SW1w
bDo6cmVjYWxjU2VsZWN0T3B0aW9ucygpCiB7CiAgICAgTm9kZUltcGwgKnNlbGVjdCA9IHBhcmVu
dE5vZGUoKTsKLSAgICB3aGlsZSAoc2VsZWN0ICYmIHNlbGVjdC0+aWQoKSAhPSBJRF9TRUxFQ1Qp
CisgICAgd2hpbGUgKHNlbGVjdCAmJiAhc2VsZWN0LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c2Vs
ZWN0KCkpKQogICAgICAgICBzZWxlY3QgPSBzZWxlY3QtPnBhcmVudE5vZGUoKTsKICAgICBpZiAo
c2VsZWN0KQogICAgICAgICBzdGF0aWNfY2FzdDxIVE1MU2VsZWN0RWxlbWVudEltcGwqPihzZWxl
Y3QpLT5zZXRSZWNhbGNMaXN0SXRlbXMoKTsKQEAgLTMyOTIsNyArMzI4MSw3IEBAIHZvaWQgSFRN
TE9wdEdyb3VwRWxlbWVudEltcGw6OnNldExhYmVsKGMKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAog
SFRNTE9wdGlvbkVsZW1lbnRJbXBsOjpIVE1MT3B0aW9uRWxlbWVudEltcGwoRG9jdW1lbnRQdHIg
KmRvYywgSFRNTEZvcm1FbGVtZW50SW1wbCAqZikKLSAgICA6IEhUTUxHZW5lcmljRm9ybUVsZW1l
bnRJbXBsKGRvYywgZikKKyAgICA6IEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKEhUTUxOYW1l
czo6b3B0aW9uKCksIGRvYywgZikKIHsKICAgICBtX3NlbGVjdGVkID0gZmFsc2U7CiB9CkBAIC0z
MzAyLDExICszMjkxLDYgQEAgYm9vbCBIVE1MT3B0aW9uRWxlbWVudEltcGw6OmlzRm9jdXNhYmxl
KAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxPcHRpb25FbGVtZW50
SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9PUFRJT047Ci19Ci0KIERPTVN0cmlu
ZyBIVE1MT3B0aW9uRWxlbWVudEltcGw6OnR5cGUoKSBjb25zdAogewogICAgIHJldHVybiAib3B0
aW9uIjsKQEAgLTMzNTMsOCArMzMzNyw3IEBAIGxvbmcgSFRNTE9wdGlvbkVsZW1lbnRJbXBsOjpp
bmRleCgpIGNvbnMKICAgICBpbnQgbCA9IGl0ZW1zLmNvdW50KCk7CiAgICAgaW50IG9wdGlvbklu
ZGV4ID0gMDsKICAgICBmb3IoaW50IGkgPSAwOyBpIDwgbDsgaSsrKSB7Ci0gICAgICAgIGlmKGl0
ZW1zW2ldLT5pZCgpID09IElEX09QVElPTikKLSAgICAgICAgeworICAgICAgICBpZiAoaXRlbXNb
aV0tPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9wdGlvbigpKSkgewogICAgICAgICAgICAgaWYg
KHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50SW1wbCo+KGl0ZW1zW2ldKSA9PSB0aGlzKQog
ICAgICAgICAgICAgICAgIHJldHVybiBvcHRpb25JbmRleDsKICAgICAgICAgICAgIG9wdGlvbklu
ZGV4Kys7CkBAIC0zNDE5LDcgKzM0MDIsNyBAQCB2b2lkIEhUTUxPcHRpb25FbGVtZW50SW1wbDo6
Y2hpbGRyZW5DaGFuCiBIVE1MU2VsZWN0RWxlbWVudEltcGwgKkhUTUxPcHRpb25FbGVtZW50SW1w
bDo6Z2V0U2VsZWN0KCkgY29uc3QKIHsKICAgICBOb2RlSW1wbCAqc2VsZWN0ID0gcGFyZW50Tm9k
ZSgpOwotICAgIHdoaWxlIChzZWxlY3QgJiYgc2VsZWN0LT5pZCgpICE9IElEX1NFTEVDVCkKKyAg
ICB3aGlsZSAoc2VsZWN0ICYmICFzZWxlY3QtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzZWxlY3Qo
KSkpCiAgICAgICAgIHNlbGVjdCA9IHNlbGVjdC0+cGFyZW50Tm9kZSgpOwogICAgIHJldHVybiBz
dGF0aWNfY2FzdDxIVE1MU2VsZWN0RWxlbWVudEltcGwqPihzZWxlY3QpOwogfQpAQCAtMzQ0Nyw3
ICszNDMwLDcgQEAgdm9pZCBIVE1MT3B0aW9uRWxlbWVudEltcGw6OnNldExhYmVsKGNvbgogLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MVGV4dEFyZWFFbGVtZW50SW1wbDo6SFRNTFRleHRBcmVh
RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgSFRNTEZvcm1FbGVtZW50SW1wbCAqZikKLSAg
ICA6IEhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKGRvYywgZiksIG1fdmFsdWVJc1ZhbGlkKGZh
bHNlKSwgbV92YWx1ZU1hdGNoZXNSZW5kZXJlcihmYWxzZSkKKyAgICA6IEhUTUxHZW5lcmljRm9y
bUVsZW1lbnRJbXBsKEhUTUxOYW1lczo6dGV4dGFyZWEoKSwgZG9jLCBmKSwgbV92YWx1ZUlzVmFs
aWQoZmFsc2UpLCBtX3ZhbHVlTWF0Y2hlc1JlbmRlcmVyKGZhbHNlKQogewogICAgIC8vIERURCBy
ZXF1aXJlcyByb3dzICYgY29scyBiZSBzcGVjaWZpZWQsIGJ1dCB3ZSB3aWxsIHByb3ZpZGUgcmVh
c29uYWJsZSBkZWZhdWx0cwogICAgIG1fcm93cyA9IDI7CkBAIC0zNDYwLDExICszNDQzLDYgQEAg
SFRNTFRleHRBcmVhRWxlbWVudEltcGw6On5IVE1MVGV4dEFyZWFFbAogICAgIGlmIChnZXREb2N1
bWVudCgpKSBnZXREb2N1bWVudCgpLT5kZXJlZ2lzdGVyTWFpbnRhaW5zU3RhdGUodGhpcyk7CiB9
CiAKLU5vZGVJbXBsOjpJZCBIVE1MVGV4dEFyZWFFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewot
ICAgIHJldHVybiBJRF9URVhUQVJFQTsKLX0KLQogRE9NU3RyaW5nIEhUTUxUZXh0QXJlYUVsZW1l
bnRJbXBsOjp0eXBlKCkgY29uc3QKIHsKICAgICByZXR1cm4gInRleHRhcmVhIjsKQEAgLTM3MTQs
MTcgKzM2OTIsMTIgQEAgdm9pZCBIVE1MVGV4dEFyZWFFbGVtZW50SW1wbDo6c2V0Um93cyhsbwog
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MSXNJbmRleEVsZW1lbnRJbXBsOjpIVE1MSXNJbmRl
eEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIEhUTUxGb3JtRWxlbWVudEltcGwgKmYpCi0g
ICAgOiBIVE1MSW5wdXRFbGVtZW50SW1wbChkb2MsIGYpCisgICAgOiBIVE1MSW5wdXRFbGVtZW50
SW1wbChIVE1MTmFtZXM6OmlzaW5kZXgoKSwgZG9jLCBmKQogewogICAgIG1fdHlwZSA9IFRFWFQ7
CiAgICAgc2V0T3ZlcnJpZGVOYW1lKCJpc2luZGV4Iik7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1M
SXNJbmRleEVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0lTSU5ERVg7
Ci19Ci0KIHZvaWQgSFRNTElzSW5kZXhFbGVtZW50SW1wbDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUo
TWFwcGVkQXR0cmlidXRlSW1wbCogYXR0cikKIHsKICAgICBzd2l0Y2goYXR0ci0+aWQoKSkKSW5k
ZXg6IGtodG1sL2h0bWwvaHRtbF9mb3JtaW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbF9mb3JtaW1wbC5oLHYKcmV0cmlldmluZyByZXZp
c2lvbiAxLjc1CmRpZmYgLXUgLXAgLXIxLjc1IGtodG1sL2h0bWwvaHRtbF9mb3JtaW1wbC5oCi0t
LSBraHRtbC9odG1sL2h0bWxfZm9ybWltcGwuaAkyNCBKdW4gMjAwNSAwNTo1MzoyNyAtMDAwMAkx
Ljc1CisrKyBraHRtbC9odG1sL2h0bWxfZm9ybWltcGwuaAk5IEp1bCAyMDA1IDAyOjQzOjAyIC0w
MDAwCkBAIC02Nyw3ICs2Nyw4IEBAIHB1YmxpYzoKICAgICBIVE1MRm9ybUVsZW1lbnRJbXBsKERv
Y3VtZW50UHRyICpkb2MpOwogICAgIHZpcnR1YWwgfkhUTUxGb3JtRWxlbWVudEltcGwoKTsKIAot
ICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5k
VGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQorICAg
IHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMzsgfQogCiAgICAgdmly
dHVhbCB2b2lkIGF0dGFjaCgpOwogICAgIHZpcnR1YWwgdm9pZCBkZXRhY2goKTsKQEAgLTE2MSw5
ICsxNjIsMTIgQEAgY2xhc3MgSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwgOiBwdWJsaQogICAg
IGZyaWVuZCBjbGFzcyBraHRtbDo6UmVuZGVyRm9ybUVsZW1lbnQ7CiAKIHB1YmxpYzoKLSAgICBI
VE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1l
bnRJbXBsICpmID0gMCk7CisgICAgSFRNTEdlbmVyaWNGb3JtRWxlbWVudEltcGwoY29uc3QgUXVh
bGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnRQdHIgKmRvYywgSFRNTEZvcm1FbGVtZW50SW1w
bCAqZiA9IDApOwogICAgIHZpcnR1YWwgfkhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsKCk7CiAK
KyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJl
dHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQorICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkg
Y29uc3QgeyByZXR1cm4gMTsgfQorCiAgICAgSFRNTEZvcm1FbGVtZW50SW1wbCAqZm9ybSgpIHsg
cmV0dXJuIG1fZm9ybTsgfQogCiAgICAgdmlydHVhbCBET01TdHJpbmcgdHlwZSgpIGNvbnN0ID0g
MDsKQEAgLTIzNSw3ICsyMzksNiBAQCBjbGFzcyBIVE1MQnV0dG9uRWxlbWVudEltcGwgOiBwdWJs
aWMgSFRNCiB7CiBwdWJsaWM6CiAgICAgSFRNTEJ1dHRvbkVsZW1lbnRJbXBsKERvY3VtZW50UHRy
ICpkb2MsIEhUTUxGb3JtRWxlbWVudEltcGwgKmYgPSAwKTsKLQogICAgIHZpcnR1YWwgfkhUTUxC
dXR0b25FbGVtZW50SW1wbCgpOwogCiAgICAgZW51bSB0eXBlRW51bSB7CkBAIC0yNDQsNyArMjQ3
LDYgQEAgcHVibGljOgogICAgICAgICBCVVRUT04KICAgICB9OwogCi0gICAgdmlydHVhbCBJZCBp
ZCgpIGNvbnN0OwogICAgIERPTVN0cmluZyB0eXBlKCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZv
aWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqYXR0cik7CkBAIC0y
ODAsMTEgKzI4MiwxMSBAQCBjbGFzcyBIVE1MRmllbGRTZXRFbGVtZW50SW1wbCA6IHB1YmxpYyBI
CiB7CiBwdWJsaWM6CiAgICAgSFRNTEZpZWxkU2V0RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRv
YywgSFRNTEZvcm1FbGVtZW50SW1wbCAqZiA9IDApOwotCiAgICAgdmlydHVhbCB+SFRNTEZpZWxk
U2V0RWxlbWVudEltcGwoKTsKLQotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKICAgICAKKyAg
ICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDM7IH0KKyAgICB2aXJ0
dWFsIGJvb2wgY2hlY2tEVEQoY29uc3QgTm9kZUltcGwqIG5ld0NoaWxkKTsKKwogICAgIHZpcnR1
YWwgYm9vbCBpc0ZvY3VzYWJsZSgpIGNvbnN0OwogICAgIAogICAgIHZpcnR1YWwga2h0bWw6OlJl
bmRlck9iamVjdCAqY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEgKiwga2h0bWw6OlJlbmRlclN0
eWxlICopOwpAQCAtMzI2LDkgKzMyOCwxMiBAQCBwdWJsaWM6CiAgICAgfTsKIAogICAgIEhUTUxJ
bnB1dEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIEhUTUxGb3JtRWxlbWVudEltcGwgKmYg
PSAwKTsKKyAgICBIVE1MSW5wdXRFbGVtZW50SW1wbChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdO
YW1lLCBEb2N1bWVudFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmID0gMCk7CiAgICAg
dmlydHVhbCB+SFRNTElucHV0RWxlbWVudEltcGwoKTsKKyAgICB2b2lkIGluaXQoKTsKIAotICAg
IHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFn
UmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNGb3JiaWRkZW47IH0KKyAgICB2
aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KIAogICAgIHZpcnR1
YWwgYm9vbCBpc0VudW1lcmF0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIGlucHV0VHlwZSgpICE9IElN
QUdFOyB9CiAKQEAgLTQ1OSw5ICs0NjQsOSBAQCBwdWJsaWM6CiAgICAgSFRNTExhYmVsRWxlbWVu
dEltcGwoRG9jdW1lbnRQdHIgKmRvYyk7CiAgICAgdmlydHVhbCB+SFRNTExhYmVsRWxlbWVudElt
cGwoKTsKIAorICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gNTsg
fQorCiAgICAgdmlydHVhbCBib29sIGlzRm9jdXNhYmxlKCkgY29uc3Q7Ci0gICAgCi0gICAgdmly
dHVhbCBJZCBpZCgpIGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmli
dXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIpOwogCkBAIC00OTYsNyArNTAxLDYgQEAgcHVi
bGljOgogCiAgICAgdmlydHVhbCBib29sIGlzRm9jdXNhYmxlKCkgY29uc3Q7CiAgICAgCi0gICAg
dmlydHVhbCBJZCBpZCgpIGNvbnN0OwogICAgIHZpcnR1YWwga2h0bWw6OlJlbmRlck9iamVjdCAq
Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEgKiwga2h0bWw6OlJlbmRlclN0eWxlICopOwogCiAg
ICAgdmlydHVhbCBET01TdHJpbmcgdHlwZSgpIGNvbnN0OwpAQCAtNTI1LDkgKzUyOSwxMyBAQCBj
bGFzcyBIVE1MU2VsZWN0RWxlbWVudEltcGwgOiBwdWJsaWMgSFRNCiAKIHB1YmxpYzoKICAgICBI
VE1MU2VsZWN0RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgSFRNTEZvcm1FbGVtZW50SW1w
bCAqZiA9IDApOworICAgIEhUTUxTZWxlY3RFbGVtZW50SW1wbChjb25zdCBRdWFsaWZpZWROYW1l
JiB0YWdOYW1lLCBEb2N1bWVudFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmID0gMCk7
CiAgICAgfkhUTUxTZWxlY3RFbGVtZW50SW1wbCgpOworICAgIHZvaWQgaW5pdCgpOworCisgICAg
dmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiA2OyB9CisgICAgdmlydHVh
bCBib29sIGNoZWNrRFREKGNvbnN0IE5vZGVJbXBsKiBuZXdDaGlsZCk7CiAKLSAgICB2aXJ0dWFs
IElkIGlkKCkgY29uc3Q7CiAgICAgRE9NU3RyaW5nIHR5cGUoKSBjb25zdDsKIAogICAgIHZpcnR1
YWwgdm9pZCByZWNhbGNTdHlsZSggU3R5bGVDaGFuZ2UgKTsKQEAgLTYxNCw3ICs2MjIsNyBAQCBj
bGFzcyBIVE1MS2V5Z2VuRWxlbWVudEltcGwgOiBwdWJsaWMgSFRNCiBwdWJsaWM6CiAgICAgSFRN
TEtleWdlbkVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIEhUTUxGb3JtRWxlbWVudEltcGwg
KmYgPSAwKTsKIAotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCB0
YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KIAogICAgIERPTVN0cmluZyB0eXBlKCkg
Y29uc3Q7CiAKQEAgLTYzNiw3ICs2NDQsOCBAQCBwdWJsaWM6CiAgICAgSFRNTE9wdEdyb3VwRWxl
bWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgSFRNTEZvcm1FbGVtZW50SW1wbCAqZiA9IDApOwog
ICAgIHZpcnR1YWwgfkhUTUxPcHRHcm91cEVsZW1lbnRJbXBsKCk7CiAKLSAgICB2aXJ0dWFsIElk
IGlkKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGNoZWNrRFREKGNvbnN0IE5vZGVJbXBsKiBu
ZXdDaGlsZCkgeyByZXR1cm4gbmV3Q2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvcHRpb24o
KSk7IH0KKwogICAgIERPTVN0cmluZyB0eXBlKCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIGJvb2wg
aXNGb2N1c2FibGUoKSBjb25zdDsKQEAgLTY2NCw5ICs2NzMsMTIgQEAgY2xhc3MgSFRNTE9wdGlv
bkVsZW1lbnRJbXBsIDogcHVibGljIEhUTQogcHVibGljOgogICAgIEhUTUxPcHRpb25FbGVtZW50
SW1wbChEb2N1bWVudFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmID0gMCk7CiAKKyAg
ICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVy
biBUYWdTdGF0dXNPcHRpb25hbDsgfQorICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29u
c3QgeyByZXR1cm4gMjsgfQorICAgIHZpcnR1YWwgYm9vbCBjaGVja0RURChjb25zdCBOb2RlSW1w
bCogbmV3Q2hpbGQpIHsgcmV0dXJuIG5ld0NoaWxkLT5pc1RleHROb2RlKCk7IH0KKwogICAgIHZp
cnR1YWwgYm9vbCBpc0ZvY3VzYWJsZSgpIGNvbnN0OwotICAgIAotICAgIHZpcnR1YWwgSWQgaWQo
KSBjb25zdDsKKwogICAgIERPTVN0cmluZyB0eXBlKCkgY29uc3Q7CiAKICAgICBET01TdHJpbmcg
dGV4dCgpIGNvbnN0OwpAQCAtNzE0LDEwICs3MjYsOSBAQCBwdWJsaWM6CiAgICAgSFRNTFRleHRB
cmVhRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgSFRNTEZvcm1FbGVtZW50SW1wbCAqZiA9
IDApOwogICAgIH5IVE1MVGV4dEFyZWFFbGVtZW50SW1wbCgpOwogCi0gICAgdmlydHVhbCBJZCBp
ZCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBjaGVja0RURChjb25zdCBOb2RlSW1wbCogbmV3
Q2hpbGQpIHsgcmV0dXJuIG5ld0NoaWxkLT5pc1RleHROb2RlKCk7IH0KIAogICAgIGxvbmcgY29s
cygpIGNvbnN0IHsgcmV0dXJuIG1fY29sczsgfQotCiAgICAgbG9uZyByb3dzKCkgY29uc3QgeyBy
ZXR1cm4gbV9yb3dzOyB9CiAKICAgICBXcmFwTWV0aG9kIHdyYXAoKSBjb25zdCB7IHJldHVybiBt
X3dyYXA7IH0KQEAgLTc4NSw3ICs3OTYsOCBAQCBjbGFzcyBIVE1MSXNJbmRleEVsZW1lbnRJbXBs
IDogcHVibGljIEhUCiBwdWJsaWM6CiAgICAgSFRNTElzSW5kZXhFbGVtZW50SW1wbChEb2N1bWVu
dFB0ciAqZG9jLCBIVE1MRm9ybUVsZW1lbnRJbXBsICpmID0gMCk7CiAKLSAgICB2aXJ0dWFsIElk
IGlkKCkgY29uc3Q7CisgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50
KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzRm9yYmlkZGVuOyB9CisgICAgdmlydHVhbCBpbnQg
dGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAwOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFy
c2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqYXR0cik7CiAKSW5kZXg6IGto
dG1sL2h0bWwvaHRtbF9oZWFkaW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sX2hlYWRpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS41MApkaWZmIC11IC1wIC1yMS41MCBraHRtbC9odG1sL2h0bWxfaGVhZGltcGwuY3BwCi0t
LSBraHRtbC9odG1sL2h0bWxfaGVhZGltcGwuY3BwCTIyIEp1biAyMDA1IDE4OjIyOjAxIC0wMDAw
CTEuNTAKKysrIGtodG1sL2h0bWwvaHRtbF9oZWFkaW1wbC5jcHAJOSBKdWwgMjAwNSAwMjo0Mzow
MyAtMDAwMApAQCAtNDYsNyArNDYsNyBAQCB1c2luZyBuYW1lc3BhY2UgRE9NOwogdXNpbmcgbmFt
ZXNwYWNlIGtodG1sOwogCiBIVE1MQmFzZUVsZW1lbnRJbXBsOjpIVE1MQmFzZUVsZW1lbnRJbXBs
KERvY3VtZW50UHRyICpkb2MpCi0gICAgOiBIVE1MRWxlbWVudEltcGwoZG9jKQorICAgIDogSFRN
TEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6YmFzZSgpLCBkb2MpCiB7CiB9CiAKQEAgLTU0LDExICs1
NCw2IEBAIEhUTUxCYXNlRWxlbWVudEltcGw6On5IVE1MQmFzZUVsZW1lbnRJbXAKIHsKIH0KIAot
Tm9kZUltcGw6OklkIEhUTUxCYXNlRWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gSURfQkFTRTsKLX0KLQogdm9pZCBIVE1MQmFzZUVsZW1lbnRJbXBsOjpwYXJzZU1hcHBlZEF0
dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICphdHRyKQogewogICAgIHN3aXRjaChhdHRyLT5p
ZCgpKQpAQCAtMTE5LDcgKzExNCw3IEBAIHZvaWQgSFRNTEJhc2VFbGVtZW50SW1wbDo6c2V0VGFy
Z2V0KGNvbnMKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogSFRNTExpbmtFbGVtZW50SW1wbDo6SFRN
TExpbmtFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAgIDogSFRNTEVsZW1lbnRJbXBs
KGRvYykKKyAgICA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6OmxpbmsoKSwgZG9jKQogewog
ICAgIG1fc2hlZXQgPSAwOwogICAgIG1fbG9hZGluZyA9IGZhbHNlOwpAQCAtMTM0LDExICsxMjks
NiBAQCBIVE1MTGlua0VsZW1lbnRJbXBsOjp+SFRNTExpbmtFbGVtZW50SW1wCiAgICAgaWYobV9j
YWNoZWRTaGVldCkgbV9jYWNoZWRTaGVldC0+ZGVyZWYodGhpcyk7CiB9CiAKLU5vZGVJbXBsOjpJ
ZCBIVE1MTGlua0VsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX0xJTks7
Ci19Ci0KIHZvaWQgSFRNTExpbmtFbGVtZW50SW1wbDo6c2V0RGlzYWJsZWRTdGF0ZShib29sIF9k
aXNhYmxlZCkKIHsKICAgICBpbnQgb2xkRGlzYWJsZWRTdGF0ZSA9IG1fZGlzYWJsZWRTdGF0ZTsK
QEAgLTQyMyw3ICs0MTMsNyBAQCB2b2lkIEhUTUxMaW5rRWxlbWVudEltcGw6OnNldFR5cGUoY29u
c3QgCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSFRNTE1ldGFFbGVtZW50SW1wbDo6SFRNTE1l
dGFFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKSA6IEhUTUxFbGVtZW50SW1wbChkb2MpCitI
VE1MTWV0YUVsZW1lbnRJbXBsOjpIVE1MTWV0YUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2Mp
IDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6bWV0YSgpLCBkb2MpCiB7CiB9CiAKQEAgLTQz
MSwxMSArNDIxLDYgQEAgSFRNTE1ldGFFbGVtZW50SW1wbDo6fkhUTUxNZXRhRWxlbWVudEltcAog
ewogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTE1ldGFFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewot
ICAgIHJldHVybiBJRF9NRVRBOwotfQotCiB2b2lkIEhUTUxNZXRhRWxlbWVudEltcGw6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIpCiB7CiAgICAgc3dpdGNo
KGF0dHItPmlkKCkpCkBAIC01MTIsNyArNDk3LDcgQEAgdm9pZCBIVE1MTWV0YUVsZW1lbnRJbXBs
OjpzZXRTY2hlbWUoY29ucwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MU2NyaXB0RWxlbWVu
dEltcGw6OkhUTUxTY3JpcHRFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAgIDogSFRN
TEVsZW1lbnRJbXBsKGRvYyksIG1fY2FjaGVkU2NyaXB0KDApLCBtX2NyZWF0ZWRCeVBhcnNlcihm
YWxzZSksIG1fZXZhbHVhdGVkKGZhbHNlKQorICAgIDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1l
czo6c2NyaXB0KCksIGRvYyksIG1fY2FjaGVkU2NyaXB0KDApLCBtX2NyZWF0ZWRCeVBhcnNlcihm
YWxzZSksIG1fZXZhbHVhdGVkKGZhbHNlKQogewogfQogCkBAIC01MjIsMTEgKzUwNyw2IEBAIEhU
TUxTY3JpcHRFbGVtZW50SW1wbDo6fkhUTUxTY3JpcHRFbGVtZW4KICAgICAgICAgbV9jYWNoZWRT
Y3JpcHQtPmRlcmVmKHRoaXMpOwogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTFNjcmlwdEVsZW1lbnRJ
bXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX1NDUklQVDsKLX0KLQogYm9vbCBIVE1M
U2NyaXB0RWxlbWVudEltcGw6OmlzVVJMQXR0cmlidXRlKEF0dHJpYnV0ZUltcGwgKmF0dHIpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIGF0dHItPmlkKCkgPT0gQVRUUl9TUkM7CkBAIC02OTcsNyArNjc3
LDcgQEAgdm9pZCBIVE1MU2NyaXB0RWxlbWVudEltcGw6OnNldFR5cGUoY29ucwogCiAvLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCiAKLUhUTUxTdHlsZUVsZW1lbnRJbXBsOjpIVE1MU3R5bGVFbGVtZW50SW1w
bChEb2N1bWVudFB0ciAqZG9jKSA6IEhUTUxFbGVtZW50SW1wbChkb2MpCitIVE1MU3R5bGVFbGVt
ZW50SW1wbDo6SFRNTFN0eWxlRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykgOiBIVE1MRWxl
bWVudEltcGwoSFRNTE5hbWVzOjpzdHlsZSgpLCBkb2MpCiB7CiAgICAgbV9zaGVldCA9IDA7CiAg
ICAgbV9sb2FkaW5nID0gZmFsc2U7CkBAIC03MDgsMTEgKzY4OCw2IEBAIEhUTUxTdHlsZUVsZW1l
bnRJbXBsOjp+SFRNTFN0eWxlRWxlbWVudEkKICAgICBpZihtX3NoZWV0KSBtX3NoZWV0LT5kZXJl
ZigpOwogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTFN0eWxlRWxlbWVudEltcGw6OmlkKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gSURfU1RZTEU7Ci19Ci0KIC8vIG90aGVyIHN0dWZmLi4uCiB2b2lkIEhU
TUxTdHlsZUVsZW1lbnRJbXBsOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJ
bXBsICphdHRyKQogewpAQCAtODI0LDcgKzc5OSw3IEBAIHZvaWQgSFRNTFN0eWxlRWxlbWVudElt
cGw6OnNldFR5cGUoY29uc3QKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogSFRNTFRpdGxlRWxlbWVu
dEltcGw6OkhUTUxUaXRsZUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0gICAgOiBIVE1M
RWxlbWVudEltcGwoZG9jKSwgbV90aXRsZSgiIikKKyAgICA6IEhUTUxFbGVtZW50SW1wbChIVE1M
TmFtZXM6OnRpdGxlKCksIGRvYyksIG1fdGl0bGUoIiIpCiB7CiB9CiAKQEAgLTgzMiwxMSArODA3
LDYgQEAgSFRNTFRpdGxlRWxlbWVudEltcGw6On5IVE1MVGl0bGVFbGVtZW50SQogewogfQogCi1O
b2RlSW1wbDo6SWQgSFRNTFRpdGxlRWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gSURfVElUTEU7Ci19Ci0KIHZvaWQgSFRNTFRpdGxlRWxlbWVudEltcGw6Omluc2VydGVkSW50
b0RvY3VtZW50KCkKIHsKICAgICBIVE1MRWxlbWVudEltcGw6Omluc2VydGVkSW50b0RvY3VtZW50
KCk7CkluZGV4OiBraHRtbC9odG1sL2h0bWxfaGVhZGltcGwuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfaGVhZGltcGwuaCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS4yMApkaWZmIC11IC1wIC1yMS4yMCBraHRtbC9odG1sL2h0bWxfaGVhZGlt
cGwuaAotLS0ga2h0bWwvaHRtbC9odG1sX2hlYWRpbXBsLmgJMTkgSnVuIDIwMDUgMDU6NDQ6Mjgg
LTAwMDAJMS4yMAorKysga2h0bWwvaHRtbC9odG1sX2hlYWRpbXBsLmgJOSBKdWwgMjAwNSAwMjo0
MzowMyAtMDAwMApAQCAtNDksMTAgKzQ5LDEyIEBAIHB1YmxpYzoKICAgICBIVE1MQmFzZUVsZW1l
bnRJbXBsKERvY3VtZW50UHRyICpkb2MpOwogICAgIH5IVE1MQmFzZUVsZW1lbnRJbXBsKCk7CiAK
KyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJl
dHVybiBUYWdTdGF0dXNGb3JiaWRkZW47IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgp
IGNvbnN0IHsgcmV0dXJuIDA7IH0KKwogICAgIERPTVN0cmluZyBocmVmKCkgY29uc3QgeyByZXR1
cm4gbV9ocmVmOyB9CiAgICAgRE9NU3RyaW5nIHRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIG1fdGFy
Z2V0OyB9CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHBh
cnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIpOwogICAgIHZpcnR1
YWwgdm9pZCBpbnNlcnRlZEludG9Eb2N1bWVudCgpOwogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVk
RnJvbURvY3VtZW50KCk7CkBAIC03Nyw3ICs3OSw4IEBAIHB1YmxpYzoKICAgICBIVE1MTGlua0Vs
ZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpOwogICAgIH5IVE1MTGlua0VsZW1lbnRJbXBsKCk7
CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CisgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVz
IGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzRm9yYmlkZGVuOyB9
CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAwOyB9CiAKICAg
ICBib29sIGRpc2FibGVkKCkgY29uc3Q7CiAgICAgdm9pZCBzZXREaXNhYmxlZChib29sKTsKQEAg
LTE1MiwxMCArMTU1LDExIEBAIGNsYXNzIEhUTUxNZXRhRWxlbWVudEltcGwgOiBwdWJsaWMgSFRN
TEUKIHsKIHB1YmxpYzoKICAgICBIVE1MTWV0YUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2Mp
OwotCiAgICAgfkhUTUxNZXRhRWxlbWVudEltcGwoKTsKIAotICAgIHZpcnR1YWwgSWQgaWQoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25z
dCB7IHJldHVybiBUYWdTdGF0dXNGb3JiaWRkZW47IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQcmlv
cml0eSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICphdHRyKTsKICAgICB2aXJ0dWFsIHZvaWQg
aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKIApAQCAtMTg1LDEzICsxODksMTcgQEAgY2xhc3MgSFRN
TFNjcmlwdEVsZW1lbnRJbXBsIDogcHVibGljIEhUTQogcHVibGljOgogICAgIEhUTUxTY3JpcHRF
bGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKTsKICAgICB+SFRNTFNjcmlwdEVsZW1lbnRJbXBs
KCk7Ci0gICAgCisKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQo
KSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQorICAgIHZpcnR1YWwgaW50IHRh
Z1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMTsgfQorICAgIHZpcnR1YWwgYm9vbCBjaGVja0RU
RChjb25zdCBOb2RlSW1wbCogbmV3Q2hpbGQpIHsgcmV0dXJuIG5ld0NoaWxkLT5pc1RleHROb2Rl
KCk7IH0KKwogICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9Eb2N1bWVudCgpOwogICAgIHZp
cnR1YWwgdm9pZCByZW1vdmVkRnJvbURvY3VtZW50KCk7CiAgICAgdmlydHVhbCB2b2lkIG5vdGlm
eUZpbmlzaGVkKGtodG1sOjpDYWNoZWRPYmplY3QgKmZpbmlzaGVkT2JqKTsKKwogICAgIHZpcnR1
YWwgdm9pZCBjaGlsZHJlbkNoYW5nZWQoKTsKLSAgICAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29u
c3Q7CisKICAgICB2aXJ0dWFsIGJvb2wgaXNVUkxBdHRyaWJ1dGUoQXR0cmlidXRlSW1wbCAqYXR0
cikgY29uc3Q7CiAKICAgICB2b2lkIHNldENyZWF0ZWRCeVBhcnNlcihib29sIGNyZWF0ZWRCeVBh
cnNlcikgeyBtX2NyZWF0ZWRCeVBhcnNlciA9IGNyZWF0ZWRCeVBhcnNlcjsgfQpAQCAtMjMzLDcg
KzI0MSw5IEBAIHB1YmxpYzoKICAgICBIVE1MU3R5bGVFbGVtZW50SW1wbChEb2N1bWVudFB0ciAq
ZG9jKTsKICAgICB+SFRNTFN0eWxlRWxlbWVudEltcGwoKTsKIAotICAgIHZpcnR1YWwgSWQgaWQo
KSBjb25zdDsKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBj
b25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQorICAgIHZpcnR1YWwgaW50IHRhZ1By
aW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMTsgfQorICAgIHZpcnR1YWwgYm9vbCBjaGVja0RURChj
b25zdCBOb2RlSW1wbCogbmV3Q2hpbGQpIHsgcmV0dXJuIG5ld0NoaWxkLT5pc1RleHROb2RlKCk7
IH0KIAogICAgIFN0eWxlU2hlZXRJbXBsICpzaGVldCgpIGNvbnN0IHsgcmV0dXJuIG1fc2hlZXQ7
IH0KIApAQCAtMjY4LDEwICsyNzgsOSBAQCBjbGFzcyBIVE1MVGl0bGVFbGVtZW50SW1wbCA6IHB1
YmxpYyBIVE1MCiB7CiBwdWJsaWM6CiAgICAgSFRNTFRpdGxlRWxlbWVudEltcGwoRG9jdW1lbnRQ
dHIgKmRvYyk7Ci0KICAgICB+SFRNTFRpdGxlRWxlbWVudEltcGwoKTsKIAotICAgIHZpcnR1YWwg
SWQgaWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgY2hlY2tEVEQoY29uc3QgTm9kZUltcGwq
IG5ld0NoaWxkKSB7IHJldHVybiBuZXdDaGlsZC0+aXNUZXh0Tm9kZSgpOyB9CiAKICAgICB2aXJ0
dWFsIHZvaWQgaW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3Zl
ZEZyb21Eb2N1bWVudCgpOwpJbmRleDoga2h0bWwvaHRtbC9odG1sX2ltYWdlaW1wbC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sX2ltYWdl
aW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNDMKZGlmZiAtdSAtcCAtcjEuNDMga2h0
bWwvaHRtbC9odG1sX2ltYWdlaW1wbC5jcHAKLS0tIGtodG1sL2h0bWwvaHRtbF9pbWFnZWltcGwu
Y3BwCTIxIEp1biAyMDA1IDIyOjI3OjU1IC0wMDAwCTEuNDMKKysrIGtodG1sL2h0bWwvaHRtbF9p
bWFnZWltcGwuY3BwCTkgSnVsIDIwMDUgMDI6NDM6MDMgLTAwMDAKQEAgLTUxLDcgKzUxLDcgQEAK
IHVzaW5nIG5hbWVzcGFjZSBET007CiB1c2luZyBuYW1lc3BhY2Uga2h0bWw7CiAKLS8vI2RlZmlu
ZSBJTlNUUlVNRU5UX0xBWU9VVF9TQ0hFRFVMSU5HIDEKKy8vICNkZWZpbmUgSU5TVFJVTUVOVF9M
QVlPVVRfU0NIRURVTElORyAxCiAKIEhUTUxJbWFnZUxvYWRlcjo6SFRNTEltYWdlTG9hZGVyKEVs
ZW1lbnRJbXBsKiBlbHQpCiA6bV9lbGVtZW50KGVsdCksIG1faW1hZ2UoMCksIG1fZmlyZWRMb2Fk
KHRydWUpLCBtX2ltYWdlQ29tcGxldGUodHJ1ZSkKQEAgLTc1LDcgKzc1LDcgQEAgdm9pZCBIVE1M
SW1hZ2VMb2FkZXI6OnVwZGF0ZUZyb21FbGVtZW50KAogICAgICAgICByZXR1cm47CiAKICAgICBB
dG9taWNTdHJpbmcgYXR0cjsKLSAgICBpZiAoZWxlbWVudCgpLT5pZCgpID09IElEX09CSkVDVCkK
KyAgICBpZiAoZWxlbWVudCgpLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvYmplY3QoKSkpCiAg
ICAgICAgIGF0dHIgPSBlbGVtZW50KCktPmdldEF0dHJpYnV0ZShBVFRSX0RBVEEpOwogICAgIGVs
c2UKICAgICAgICAgYXR0ciA9IGVsZW1lbnQoKS0+Z2V0QXR0cmlidXRlKEFUVFJfU1JDKTsKQEAg
LTg2LDYgKzg2LDEwIEBAIHZvaWQgSFRNTEltYWdlTG9hZGVyOjp1cGRhdGVGcm9tRWxlbWVudCgK
ICAgICAgICAgbmV3SW1hZ2UgPSBlbGVtZW50KCktPmdldERvY3VtZW50KCktPmRvY0xvYWRlcigp
LT5yZXF1ZXN0SW1hZ2Uoa2h0bWw6OnBhcnNlVVJMKGF0dHIpKTsKIAogICAgIGlmIChuZXdJbWFn
ZSAhPSBtX2ltYWdlKSB7CisjaWZkZWYgSU5TVFJVTUVOVF9MQVlPVVRfU0NIRURVTElORworICAg
ICAgICBpZiAoIWRvY3VtZW50LT5vd25lckVsZW1lbnQoKSAmJiBuZXdJbWFnZSkKKyAgICAgICAg
ICAgIHByaW50ZigiSW1hZ2UgcmVxdWVzdGVkIGF0ICVkXG4iLCBlbGVtZW50KCktPmdldERvY3Vt
ZW50KCktPmVsYXBzZWRUaW1lKCkpOworI2VuZGlmCiAgICAgICAgIG1fZmlyZWRMb2FkID0gZmFs
c2U7CiAgICAgICAgIG1faW1hZ2VDb21wbGV0ZSA9IGZhbHNlOwogICAgICAgICBDYWNoZWRJbWFn
ZSogb2xkSW1hZ2UgPSBtX2ltYWdlOwpAQCAtMTMzLDIxICsxMzcsMjEgQEAgdm9pZCBIVE1MSW1h
Z2VMb2FkZXI6Om5vdGlmeUZpbmlzaGVkKENhYwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBIVE1M
SW1hZ2VFbGVtZW50SW1wbDo6SFRNTEltYWdlRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywg
SFRNTEZvcm1FbGVtZW50SW1wbCAqZikKLSAgICA6IEhUTUxFbGVtZW50SW1wbChkb2MpLCBtX2lt
YWdlTG9hZGVyKHRoaXMpLCBpc21hcChmYWxzZSksIG1fZm9ybShmKQorICAgIDogSFRNTEVsZW1l
bnRJbXBsKEhUTUxOYW1lczo6aW1nKCksIGRvYyksIG1faW1hZ2VMb2FkZXIodGhpcyksIGlzbWFw
KGZhbHNlKSwgbV9mb3JtKGYpCiB7CiAgICAgaWYgKG1fZm9ybSkKICAgICAgICAgbV9mb3JtLT5y
ZWdpc3RlckltZ0VsZW1lbnQodGhpcyk7CiB9CiAKLUhUTUxJbWFnZUVsZW1lbnRJbXBsOjp+SFRN
TEltYWdlRWxlbWVudEltcGwoKQorSFRNTEltYWdlRWxlbWVudEltcGw6OkhUTUxJbWFnZUVsZW1l
bnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50UHRyICpkb2MpCisg
ICAgOiBIVE1MRWxlbWVudEltcGwodGFnTmFtZSwgZG9jKSwgbV9pbWFnZUxvYWRlcih0aGlzKSwg
aXNtYXAoZmFsc2UpLCBtX2Zvcm0oMCkKIHsKLSAgICBpZiAobV9mb3JtKQotICAgICAgICBtX2Zv
cm0tPnJlbW92ZUltZ0VsZW1lbnQodGhpcyk7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MSW1hZ2VF
bGVtZW50SW1wbDo6aWQoKSBjb25zdAorSFRNTEltYWdlRWxlbWVudEltcGw6On5IVE1MSW1hZ2VF
bGVtZW50SW1wbCgpCiB7Ci0gICAgcmV0dXJuIElEX0lNRzsKKyAgICBpZiAobV9mb3JtKQorICAg
ICAgICBtX2Zvcm0tPnJlbW92ZUltZ0VsZW1lbnQodGhpcyk7CiB9CiAKIGJvb2wgSFRNTEltYWdl
RWxlbWVudEltcGw6Om1hcFRvRW50cnkoTm9kZUltcGw6OklkIGF0dHIsIE1hcHBlZEF0dHJpYnV0
ZUVudHJ5JiByZXN1bHQpIGNvbnN0CkBAIC01MjgsNyArNTMyLDcgQEAgbG9uZyBIVE1MSW1hZ2VF
bGVtZW50SW1wbDo6eSgpIGNvbnN0CiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEhUTUxNYXBFbGVt
ZW50SW1wbDo6SFRNTE1hcEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0gICAgOiBIVE1M
RWxlbWVudEltcGwoZG9jKQorICAgIDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6bWFwKCks
IGRvYykKIHsKIH0KIApAQCAtNTM4LDkgKzU0MiwxMSBAQCBIVE1MTWFwRWxlbWVudEltcGw6On5I
VE1MTWFwRWxlbWVudEltcGwoCiAgICAgICAgIGdldERvY3VtZW50KCktPnJlbW92ZUltYWdlTWFw
KHRoaXMpOwogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTE1hcEVsZW1lbnRJbXBsOjppZCgpIGNvbnN0
Citib29sIEhUTUxNYXBFbGVtZW50SW1wbDo6Y2hlY2tEVEQoY29uc3QgTm9kZUltcGwqIG5ld0No
aWxkKQogewotICAgIHJldHVybiBJRF9NQVA7CisgICAgLy8gRklYTUU6IFRoaXMgc2VlbXMgcmVh
bGx5IG9kZCwgYWxsb3dpbmcgb25seSBibG9ja3MgaW5zaWRlIG1hcC4KKyAgICByZXR1cm4gbmV3
Q2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjphcmVhKCkpIHx8IG5ld0NoaWxkLT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6c2NyaXB0KCkpIHx8CisgICAgICAgICAgIGluQmxvY2tUYWdMaXN0KG5l
d0NoaWxkKTsKIH0KIAogYm9vbApAQCAtNTUyLDMyICs1NTgsMjggQEAgSFRNTE1hcEVsZW1lbnRJ
bXBsOjptYXBNb3VzZUV2ZW50KGludCB4XwogICAgIFFQdHJTdGFjazxOb2RlSW1wbD4gbm9kZVN0
YWNrOwogCiAgICAgTm9kZUltcGwgKmN1cnJlbnQgPSBmaXJzdENoaWxkKCk7Ci0gICAgd2hpbGUo
MSkKLSAgICB7Ci0gICAgICAgIGlmKCFjdXJyZW50KQotICAgICAgICB7CisgICAgd2hpbGUgKDEp
IHsKKyAgICAgICAgaWYgKCFjdXJyZW50KSB7CiAgICAgICAgICAgICBpZihub2RlU3RhY2suaXNF
bXB0eSgpKSBicmVhazsKICAgICAgICAgICAgIGN1cnJlbnQgPSBub2RlU3RhY2sucG9wKCk7CiAg
ICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC0+bmV4dFNpYmxpbmcoKTsKICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIGlmKGN1cnJlbnQtPmlkKCk9PUlEX0FSRUEp
Ci0gICAgICAgIHsKKyAgICAgICAgCisgICAgICAgIGlmIChjdXJyZW50LT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6YXJlYSgpKSkgewogICAgICAgICAgICAgLy9jb3V0IDw8ICJhcmVhIGZvdW5kICIg
PDwgZW5kbDsKLSAgICAgICAgICAgIEhUTUxBcmVhRWxlbWVudEltcGwqIGFyZWE9c3RhdGljX2Nh
c3Q8SFRNTEFyZWFFbGVtZW50SW1wbCo+KGN1cnJlbnQpOworICAgICAgICAgICAgSFRNTEFyZWFF
bGVtZW50SW1wbCogYXJlYSA9IHN0YXRpY19jYXN0PEhUTUxBcmVhRWxlbWVudEltcGwqPihjdXJy
ZW50KTsKICAgICAgICAgICAgIGlmIChhcmVhLT5tYXBNb3VzZUV2ZW50KHhfLHlfLHdpZHRoXyxo
ZWlnaHRfLCBpbmZvKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQor
ICAgICAgICAKICAgICAgICAgTm9kZUltcGwgKmNoaWxkID0gY3VycmVudC0+Zmlyc3RDaGlsZCgp
OwotICAgICAgICBpZihjaGlsZCkKLSAgICAgICAgeworICAgICAgICBpZiAoY2hpbGQpIHsKICAg
ICAgICAgICAgIG5vZGVTdGFjay5wdXNoKGN1cnJlbnQpOwogICAgICAgICAgICAgY3VycmVudCA9
IGNoaWxkOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKLSAgICAgICAgewogICAgICAgICAgICAg
Y3VycmVudCA9IGN1cnJlbnQtPm5leHRTaWJsaW5nKCk7Ci0gICAgICAgIH0KICAgICB9CiAKICAg
ICByZXR1cm4gZmFsc2U7CkBAIC02MjIsNyArNjI0LDcgQEAgdm9pZCBIVE1MTWFwRWxlbWVudElt
cGw6OnNldE5hbWUoY29uc3QgRAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MQXJlYUVsZW1l
bnRJbXBsOjpIVE1MQXJlYUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0gICAgOiBIVE1M
QW5jaG9yRWxlbWVudEltcGwoZG9jKQorICAgIDogSFRNTEFuY2hvckVsZW1lbnRJbXBsKEhUTUxO
YW1lczo6YXJlYSgpLCBkb2MpCiB7CiAgICAgbV9jb29yZHM9MDsKICAgICBtX2Nvb3Jkc0xlbiA9
IDA7CkBAIC02MzUsMTEgKzYzNyw2IEBAIEhUTUxBcmVhRWxlbWVudEltcGw6On5IVE1MQXJlYUVs
ZW1lbnRJbXAKICAgICBpZiAobV9jb29yZHMpIGRlbGV0ZSBbXSBtX2Nvb3JkczsKIH0KIAotTm9k
ZUltcGw6OklkIEhUTUxBcmVhRWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
SURfQVJFQTsKLX0KLQogdm9pZCBIVE1MQXJlYUVsZW1lbnRJbXBsOjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICphdHRyKQogewogICAgIHN3aXRjaCAoYXR0ci0+aWQo
KSkKSW5kZXg6IGtodG1sL2h0bWwvaHRtbF9pbWFnZWltcGwuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfaW1hZ2VpbXBsLmgsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuMjEKZGlmZiAtdSAtcCAtcjEuMjEga2h0bWwvaHRtbC9odG1sX2ltYWdl
aW1wbC5oCi0tLSBraHRtbC9odG1sL2h0bWxfaW1hZ2VpbXBsLmgJMTEgTWF5IDIwMDUgMDU6NDk6
MzQgLTAwMDAJMS4yMQorKysga2h0bWwvaHRtbC9odG1sX2ltYWdlaW1wbC5oCTkgSnVsIDIwMDUg
MDI6NDM6MDQgLTAwMDAKQEAgLTc1LDkgKzc1LDExIEBAIGNsYXNzIEhUTUxJbWFnZUVsZW1lbnRJ
bXBsCiAgICAgZnJpZW5kIGNsYXNzIEhUTUxGb3JtRWxlbWVudEltcGw7CiBwdWJsaWM6CiAgICAg
SFRNTEltYWdlRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgSFRNTEZvcm1FbGVtZW50SW1w
bCAqZiA9IDApOworICAgIEhUTUxJbWFnZUVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUm
IHRhZ05hbWUsIERvY3VtZW50UHRyKiBkb2MpOwogICAgIH5IVE1MSW1hZ2VFbGVtZW50SW1wbCgp
OwogCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0OworICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1
cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c0ZvcmJpZGRlbjsg
fQorICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMDsgfQogCiAg
ICAgdmlydHVhbCBib29sIG1hcFRvRW50cnkoTm9kZUltcGw6OklkIGF0dHIsIE1hcHBlZEF0dHJp
YnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0
dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICopOwpAQCAtMTYxLDcgKzE2Myw4IEBAIHB1Ymxp
YzoKICAgICBIVE1MQXJlYUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpOwogICAgIH5IVE1M
QXJlYUVsZW1lbnRJbXBsKCk7CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CisgICAgdmly
dHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFn
U3RhdHVzRm9yYmlkZGVuOyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7
IHJldHVybiAwOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFw
cGVkQXR0cmlidXRlSW1wbCAqYXR0cik7CiAKQEAgLTIxMiwxMCArMjE1LDExIEBAIGNsYXNzIEhU
TUxNYXBFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MRWwKIHsKIHB1YmxpYzoKICAgICBIVE1MTWFw
RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYyk7Ci0KICAgICB+SFRNTE1hcEVsZW1lbnRJbXBs
KCk7CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CisgICAgdmlydHVhbCBIVE1MVGFnU3Rh
dHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzUmVxdWlyZWQ7
IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDE7IH0KKyAg
ICB2aXJ0dWFsIGJvb2wgY2hlY2tEVEQoY29uc3QgTm9kZUltcGwqIG5ld0NoaWxkKTsKIAogICAg
IHZpcnR1YWwgRE9NU3RyaW5nIGdldE5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KIApJ
bmRleDoga2h0bWwvaHRtbC9odG1sX2lubGluZWltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbF9pbmxpbmVpbXBsLmNwcCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS40MgpkaWZmIC11IC1wIC1yMS40MiBraHRtbC9odG1sL2h0bWxfaW5s
aW5laW1wbC5jcHAKLS0tIGtodG1sL2h0bWwvaHRtbF9pbmxpbmVpbXBsLmNwcAkxMSBNYXkgMjAw
NSAwNTo0OTozNCAtMDAwMAkxLjQyCisrKyBraHRtbC9odG1sL2h0bWxfaW5saW5laW1wbC5jcHAJ
OSBKdWwgMjAwNSAwMjo0MzowNCAtMDAwMApAQCAtNDUsNyArNDUsMTMgQEAgdXNpbmcgbmFtZXNw
YWNlIGtodG1sOwogbmFtZXNwYWNlIERPTSB7CiAKIEhUTUxBbmNob3JFbGVtZW50SW1wbDo6SFRN
TEFuY2hvckVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0gICAgOiBIVE1MRWxlbWVudElt
cGwoZG9jKQorICAgIDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6YSgpLCBkb2MpCit7Cisg
ICAgbV9oYXNUYXJnZXQgPSBmYWxzZTsKK30KKworSFRNTEFuY2hvckVsZW1lbnRJbXBsOjpIVE1M
QW5jaG9yRWxlbWVudEltcGwoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnRQ
dHIgKmRvYykKKyAgICA6IEhUTUxFbGVtZW50SW1wbCh0YWdOYW1lLCBkb2MpCiB7CiAgICAgbV9o
YXNUYXJnZXQgPSBmYWxzZTsKIH0KQEAgLTEwNCwxMSArMTEwLDYgQEAgYm9vbCBIVE1MQW5jaG9y
RWxlbWVudEltcGw6OmlzS2V5Ym9hcmRGbwogICAgIHJldHVybiBnZXREb2N1bWVudCgpLT5wYXJ0
KCktPnRhYnNUb0xpbmtzKCk7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MQW5jaG9yRWxlbWVudElt
cGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfQTsKLX0KLQogdm9pZCBIVE1MQW5jaG9y
RWxlbWVudEltcGw6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnRJbXBsICpldnQpCiB7CiAgICAg
Ly8gUmVhY3Qgb24gY2xpY2tzIGFuZCBvbiBrZXlwcmVzc2VzLgpAQCAtMTUyLDcgKzE1Myw3IEBA
IHZvaWQgSFRNTEFuY2hvckVsZW1lbnRJbXBsOjpkZWZhdWx0RXZlbnQKICAgICAgICAgaWYgKCBl
ICYmIGUtPmJ1dHRvbigpID09IDEgKQogICAgICAgICAgICAgdXRhcmdldCA9ICJfYmxhbmsiOwog
Ci0gICAgICAgIGlmICggZXZ0LT50YXJnZXQoKS0+aWQoKSA9PSBJRF9JTUcgKSB7CisgICAgICAg
IGlmIChldnQtPnRhcmdldCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW1nKCkpKSB7CiAgICAg
ICAgICAgICBIVE1MSW1hZ2VFbGVtZW50SW1wbCogaW1nID0gc3RhdGljX2Nhc3Q8SFRNTEltYWdl
RWxlbWVudEltcGwqPiggZXZ0LT50YXJnZXQoKSApOwogICAgICAgICAgICAgaWYgKCBpbWcgJiYg
aW1nLT5pc1NlcnZlck1hcCgpICkKICAgICAgICAgICAgIHsKQEAgLTM4Miw3ICszODMsNyBAQCB2
b2lkIEhUTUxBbmNob3JFbGVtZW50SW1wbDo6Zm9jdXMoKQogCiAvLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CiAKLUhUTUxCUkVsZW1lbnRJbXBsOjpIVE1MQlJFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9j
KSA6IEhUTUxFbGVtZW50SW1wbChkb2MpCitIVE1MQlJFbGVtZW50SW1wbDo6SFRNTEJSRWxlbWVu
dEltcGwoRG9jdW1lbnRQdHIgKmRvYykgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjpicigp
LCBkb2MpCiB7CiB9CiAKQEAgLTM5MCwxMSArMzkxLDYgQEAgSFRNTEJSRWxlbWVudEltcGw6On5I
VE1MQlJFbGVtZW50SW1wbCgpCiB7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MQlJFbGVtZW50SW1w
bDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9CUjsKLX0KLQogYm9vbCBIVE1MQlJFbGVt
ZW50SW1wbDo6bWFwVG9FbnRyeShOb2RlSW1wbDo6SWQgYXR0ciwgTWFwcGVkQXR0cmlidXRlRW50
cnkmIHJlc3VsdCkgY29uc3QKIHsKICAgICBpZiAoYXR0ciA9PSBBVFRSX0NMRUFSKSB7CkBAIC00
NDUsNyArNDQxLDcgQEAgdm9pZCBIVE1MQlJFbGVtZW50SW1wbDo6c2V0Q2xlYXIoY29uc3QgRAog
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MRm9udEVsZW1lbnRJbXBsOjpIVE1MRm9udEVsZW1l
bnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0gICAgOiBIVE1MRWxlbWVudEltcGwoZG9jKQorICAg
IDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6Zm9udCgpLCBkb2MpCiB7CiB9CiAKQEAgLTQ1
MywxMSArNDQ5LDYgQEAgSFRNTEZvbnRFbGVtZW50SW1wbDo6fkhUTUxGb250RWxlbWVudEltcAog
ewogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTEZvbnRFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewot
ICAgIHJldHVybiBJRF9GT05UOwotfQotCiAvLyBBbGxvd3MgbGVhZGluZyBzcGFjZXMuCiAvLyBB
bGxvd3MgdHJhaWxpbmcgbm9ubnVtZXJpYyBjaGFyYWN0ZXJzLgogLy8gUmV0dXJucyAxMCBmb3Ig
YW55IHNpemUgZ3JlYXRlciB0aGFuIDkuCkBAIC01OTAsOCArNTgxLDggQEAgdm9pZCBIVE1MRm9u
dEVsZW1lbnRJbXBsOjpzZXRTaXplKGNvbnN0IAogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUhU
TUxNb2RFbGVtZW50SW1wbDo6SFRNTE1vZEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIHVz
aG9ydCBlbGVtZW50SWQpCi0gICAgOiBIVE1MR2VuZXJpY0VsZW1lbnRJbXBsKGRvYywgZWxlbWVu
dElkKQorSFRNTE1vZEVsZW1lbnRJbXBsOjpIVE1MTW9kRWxlbWVudEltcGwoY29uc3QgUXVhbGlm
aWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnRQdHIgKmRvYykKKyAgICA6IEhUTUxFbGVtZW50SW1w
bCh0YWdOYW1lLCBkb2MpCiB7CiB9CiAKQEAgLTYxOCwxNSArNjA5LDEwIEBAIHZvaWQgSFRNTE1v
ZEVsZW1lbnRJbXBsOjpzZXREYXRlVGltZShjb24KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogSFRN
TFF1b3RlRWxlbWVudEltcGw6OkhUTUxRdW90ZUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2Mp
Ci0gICAgOiBIVE1MRWxlbWVudEltcGwoZG9jKQorICAgIDogSFRNTEVsZW1lbnRJbXBsKEhUTUxO
YW1lczo6cSgpLCBkb2MpCiB7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MUXVvdGVFbGVtZW50SW1w
bDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9ROwotfQotICAgIAogRE9NU3RyaW5nIEhU
TUxRdW90ZUVsZW1lbnRJbXBsOjpjaXRlKCkgY29uc3QKIHsKICAgICByZXR1cm4gZ2V0QXR0cmli
dXRlKEFUVFJfQ0lURSk7CkluZGV4OiBraHRtbC9odG1sL2h0bWxfaW5saW5laW1wbC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbF9pbmxpbmVp
bXBsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTkKZGlmZiAtdSAtcCAtcjEuMTkga2h0bWwv
aHRtbC9odG1sX2lubGluZWltcGwuaAotLS0ga2h0bWwvaHRtbC9odG1sX2lubGluZWltcGwuaAkx
MSBNYXkgMjAwNSAwNTo0OTozNCAtMDAwMAkxLjE5CisrKyBraHRtbC9odG1sL2h0bWxfaW5saW5l
aW1wbC5oCTkgSnVsIDIwMDUgMDI6NDM6MDQgLTAwMDAKQEAgLTM0LDEyICszNCwxNSBAQCBjbGFz
cyBIVE1MQW5jaG9yRWxlbWVudEltcGwgOiBwdWJsaWMgSFRNCiB7CiBwdWJsaWM6CiAgICAgSFRN
TEFuY2hvckVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpOworICAgIEhUTUxBbmNob3JFbGVt
ZW50SW1wbChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudFB0ciogZG9jKTsK
ICAgICB+SFRNTEFuY2hvckVsZW1lbnRJbXBsKCk7CiAKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0
dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsg
fQorICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMTsgfQorCiAg
ICAgdmlydHVhbCBib29sIGlzTW91c2VGb2N1c2FibGUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJv
b2wgaXNLZXlib2FyZEZvY3VzYWJsZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBpc0ZvY3Vz
YWJsZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZv
aWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqYXR0cik7CiAgICAg
dmlydHVhbCB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnRJbXBsICpldnQpOwogICAgIHZp
cnR1YWwgdm9pZCBhY2Nlc3NLZXlBY3Rpb24oYm9vbCBmdWxsQWN0aW9uKTsKQEAgLTk3LDkgKzEw
MCwxMCBAQCBjbGFzcyBIVE1MQlJFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MRWxlCiBwdWJsaWM6
CiAgICAgSFRNTEJSRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYyk7CiAgICAgfkhUTUxCUkVs
ZW1lbnRJbXBsKCk7Ci0KLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CiAgICAgCisgICAgdmly
dHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFn
U3RhdHVzRm9yYmlkZGVuOyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7
IHJldHVybiAwOyB9CisKICAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShJZCBhdHRyLCBNYXBw
ZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VN
YXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqYXR0cik7CiAgICAgCkBAIC0xMTYs
OSArMTIwLDEwIEBAIGNsYXNzIEhUTUxGb250RWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTEUKIHB1
YmxpYzoKICAgICBIVE1MRm9udEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpOwogICAgIH5I
VE1MRm9udEVsZW1lbnRJbXBsKCk7Ci0KLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CiAgICAg
CisgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyBy
ZXR1cm4gVGFnU3RhdHVzUmVxdWlyZWQ7IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgp
IGNvbnN0IHsgcmV0dXJuIDE7IH0KKwogICAgIHZpcnR1YWwgYm9vbCBtYXBUb0VudHJ5KElkIGF0
dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9p
ZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICphdHRyKTsKIApAQCAt
MTM0LDEwICsxMzksMTMgQEAgcHVibGljOgogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLWNsYXNz
IEhUTUxNb2RFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MR2VuZXJpY0VsZW1lbnRJbXBsCitjbGFz
cyBIVE1MTW9kRWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTEVsZW1lbnRJbXBsCiB7CiBwdWJsaWM6
Ci0gICAgSFRNTE1vZEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIHVzaG9ydCBlbGVtZW50
SWQpOworICAgIEhUTUxNb2RFbGVtZW50SW1wbChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1l
LCBEb2N1bWVudFB0ciAqZG9jKTsKKworICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdS
ZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9CisgICAgdmly
dHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAxOyB9CiAKICAgICBET01TdHJp
bmcgY2l0ZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0Q2l0ZShjb25zdCBET01TdHJpbmcgJik7CkBA
IC0xNTIsOSArMTYwLDEwIEBAIGNsYXNzIEhUTUxRdW90ZUVsZW1lbnRJbXBsIDogcHVibGljIEhU
TUwKIHsKIHB1YmxpYzoKICAgICBIVE1MUXVvdGVFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9j
KTsKLQotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKICAgICAKKyAgICB2aXJ0dWFsIEhUTUxU
YWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1
aXJlZDsgfQorICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMTsg
fQorCiAgICAgRE9NU3RyaW5nIGNpdGUoKSBjb25zdDsKICAgICB2b2lkIHNldENpdGUoY29uc3Qg
RE9NU3RyaW5nICYpOwogfTsKSW5kZXg6IGtodG1sL2h0bWwvaHRtbF9saXN0aW1wbC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sX2xpc3Rp
bXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS45CmRpZmYgLXUgLXAgLXIxLjkga2h0bWwv
aHRtbC9odG1sX2xpc3RpbXBsLmNwcAotLS0ga2h0bWwvaHRtbC9odG1sX2xpc3RpbXBsLmNwcAkx
MSBNYXkgMjAwNSAwNTo0OTozNCAtMDAwMAkxLjkKKysrIGtodG1sL2h0bWwvaHRtbF9saXN0aW1w
bC5jcHAJOSBKdWwgMjAwNSAwMjo0MzowNCAtMDAwMApAQCAtMzIsMTEgKzMyLDYgQEAgdXNpbmcg
bmFtZXNwYWNlIGtodG1sOwogCiBuYW1lc3BhY2UgRE9NIHsKIAotTm9kZUltcGw6OklkIEhUTUxV
TGlzdEVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX1VMOwotfQotCiBi
b29sIEhUTUxVTGlzdEVsZW1lbnRJbXBsOjptYXBUb0VudHJ5KE5vZGVJbXBsOjpJZCBhdHRyLCBN
YXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdAogewogICAgIHN3aXRjaCAoYXR0cikg
ewpAQCAtODQsMTEgKzc5LDYgQEAgdm9pZCBIVE1MVUxpc3RFbGVtZW50SW1wbDo6c2V0VHlwZShj
b25zdAogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLU5vZGVJbXBsOjpJZCBIVE1MRGlyZWN0b3J5
RWxlbWVudEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfRElSOwotfQotCiBib29s
IEhUTUxEaXJlY3RvcnlFbGVtZW50SW1wbDo6Y29tcGFjdCgpIGNvbnN0CiB7CiAgICAgcmV0dXJu
ICFnZXRBdHRyaWJ1dGUoQVRUUl9DT01QQUNUKS5pc051bGwoKTsKQEAgLTEwMSwxMSArOTEsNiBA
QCB2b2lkIEhUTUxEaXJlY3RvcnlFbGVtZW50SW1wbDo6c2V0Q29tcGFjCiAKIC8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KIAotTm9kZUltcGw6OklkIEhUTUxNZW51RWxlbWVudEltcGw6OmlkKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gSURfTUVOVTsKLX0KLQogYm9vbCBIVE1MTWVudUVsZW1lbnRJbXBsOjpj
b21wYWN0KCkgY29uc3QKIHsKICAgICByZXR1cm4gIWdldEF0dHJpYnV0ZShBVFRSX0NPTVBBQ1Qp
LmlzTnVsbCgpOwpAQCAtMTE4LDExICsxMDMsNiBAQCB2b2lkIEhUTUxNZW51RWxlbWVudEltcGw6
OnNldENvbXBhY3QoYm9vCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotTm9kZUltcGw6OklkIEhU
TUxPTGlzdEVsZW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIElEX09MOwotfQot
CiBib29sIEhUTUxPTGlzdEVsZW1lbnRJbXBsOjptYXBUb0VudHJ5KE5vZGVJbXBsOjpJZCBhdHRy
LCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdAogewogICAgIHN3aXRjaCAoYXR0
cikgewpAQCAtMTUzLDkgKzEzMywxMCBAQCB2b2lkIEhUTUxPTGlzdEVsZW1lbnRJbXBsOjpwYXJz
ZU1hcHBlZEF0CiAgICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9MSVNU
X1NUWUxFX1RZUEUsIENTU19WQUxfREVDSU1BTCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
QVRUUl9TVEFSVDoKLSAgICAgICAgICAgIF9zdGFydCA9ICFhdHRyLT5pc051bGwoKSA/IGF0dHIt
PnZhbHVlKCkudG9JbnQoKSA6IDE7CisgICAgICAgIF9zdGFydCA9ICFhdHRyLT5pc051bGwoKSA/
IGF0dHItPnZhbHVlKCkudG9JbnQoKSA6IDE7CisgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6
Ci0gICAgICAgIEhUTUxVTGlzdEVsZW1lbnRJbXBsOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRy
KTsKKyAgICAgICAgSFRNTEVsZW1lbnRJbXBsOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsK
ICAgICB9CiB9CiAKQEAgLTE4NiwxMSArMTY3LDYgQEAgdm9pZCBIVE1MT0xpc3RFbGVtZW50SW1w
bDo6c2V0VHlwZShjb25zdAogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLU5vZGVJbXBsOjpJZCBI
VE1MTElFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJRF9MSTsKLX0KLQog
Ym9vbCBIVE1MTElFbGVtZW50SW1wbDo6bWFwVG9FbnRyeShOb2RlSW1wbDo6SWQgYXR0ciwgTWFw
cGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3QKIHsKICAgICBzd2l0Y2ggKGF0dHIpIHsK
QEAgLTI1MiwxMSArMjI4LDggQEAgdm9pZCBIVE1MTElFbGVtZW50SW1wbDo6YXR0YWNoKCkKICAg
ICAgICAgTm9kZUltcGwgKmxpc3ROb2RlID0gMDsKICAgICAgICAgTm9kZUltcGwgKm4gPSB0aGlz
OwogICAgICAgICB3aGlsZSAoIWxpc3ROb2RlICYmIChuID0gbi0+cGFyZW50Tm9kZSgpKSkgewot
ICAgICAgICAgICAgc3dpdGNoIChuLT5pZCgpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBJRF9V
TDoKLSAgICAgICAgICAgICAgICBjYXNlIElEX09MOgotICAgICAgICAgICAgICAgICAgICBsaXN0
Tm9kZSA9IG47Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobi0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OnVsKCkpIHx8IG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvbCgpKSkKKyAgICAg
ICAgICAgICAgICBsaXN0Tm9kZSA9IG47CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8v
IElmIHdlIGFyZSBub3QgaW4gYSBsaXN0LCB0ZWxsIHRoZSByZW5kZXJlciBzbyBpdCBjYW4gcG9z
aXRpb24gdXMgaW5zaWRlLgpAQCAtMjY1LDcgKzIzOCw3IEBAIHZvaWQgSFRNTExJRWxlbWVudElt
cGw6OmF0dGFjaCgpCiAgICAgICAgICAgICByZW5kZXItPnNldE5vdEluTGlzdCh0cnVlKTsKIAog
CS8vIElmIHdlIGFyZSBmaXJzdCwgYW5kIHRoZSBPTCBoYXMgYSBzdGFydCBhdHRyLCBzZXQgdGhl
IHZhbHVlLgotCWlmIChsaXN0Tm9kZSAmJiBsaXN0Tm9kZS0+aWQoKSA9PSBJRF9PTCAmJiAhbV9y
ZW5kZXItPnByZXZpb3VzU2libGluZygpKSB7CisJaWYgKGxpc3ROb2RlICYmIGxpc3ROb2RlLT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6b2woKSkgJiYgIW1fcmVuZGVyLT5wcmV2aW91c1NpYmxpbmco
KSkgewogCSAgICBIVE1MT0xpc3RFbGVtZW50SW1wbCAqb2wgPSBzdGF0aWNfY2FzdDxIVE1MT0xp
c3RFbGVtZW50SW1wbCAqPihsaXN0Tm9kZSk7CiAgICAgICAgICAgICByZW5kZXItPnNldFZhbHVl
KG9sLT5zdGFydCgpKTsKIAl9CkBAIC0yOTUsMTIgKzI2OCw4IEBAIHZvaWQgSFRNTExJRWxlbWVu
dEltcGw6OnNldFZhbHVlKGxvbmcgdmEKIHsKICAgICBzZXRBdHRyaWJ1dGUoQVRUUl9WQUxVRSwg
UVN0cmluZzo6bnVtYmVyKHZhbHVlKSk7CiB9Ci0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLU5vZGVJ
bXBsOjpJZCBIVE1MRExpc3RFbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAgIHJldHVybiBJ
RF9ETDsKLX0KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogYm9vbCBIVE1MRExpc3RFbGVtZW50SW1w
bDo6Y29tcGFjdCgpIGNvbnN0CiB7CkluZGV4OiBraHRtbC9odG1sL2h0bWxfbGlzdGltcGwuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfbGlz
dGltcGwuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS43CmRpZmYgLXUgLXAgLXIxLjcga2h0bWwv
aHRtbC9odG1sX2xpc3RpbXBsLmgKLS0tIGtodG1sL2h0bWwvaHRtbF9saXN0aW1wbC5oCTExIE1h
eSAyMDA1IDA1OjQ5OjM0IC0wMDAwCTEuNworKysga2h0bWwvaHRtbC9odG1sX2xpc3RpbXBsLmgJ
OSBKdWwgMjAwNSAwMjo0MzowNCAtMDAwMApAQCAtMzUsMTAgKzM1LDExIEBAIG5hbWVzcGFjZSBE
T00KIGNsYXNzIEhUTUxVTGlzdEVsZW1lbnRJbXBsIDogcHVibGljIEhUTUxFbGVtZW50SW1wbAog
ewogcHVibGljOgotICAgIEhUTUxVTGlzdEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpIDog
SFRNTEVsZW1lbnRJbXBsKGRvYykge30KKyAgICBIVE1MVUxpc3RFbGVtZW50SW1wbChEb2N1bWVu
dFB0ciAqZG9jKSA6IEhUTUxFbGVtZW50SW1wbChIVE1MTmFtZXM6OnVsKCksIGRvYykge30KICAg
ICB2aXJ0dWFsIH5IVE1MVUxpc3RFbGVtZW50SW1wbCgpIHt9CiAKLSAgICB2aXJ0dWFsIElkIGlk
KCkgY29uc3Q7CisgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkg
Y29uc3QgeyByZXR1cm4gVGFnU3RhdHVzUmVxdWlyZWQ7IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQ
cmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDU7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBtYXBUb0Vu
dHJ5KElkIGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0OwogICAgIHZp
cnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICopOwpA
QCAtNTcsOSArNTgsMTAgQEAgcHVibGljOgogY2xhc3MgSFRNTERpcmVjdG9yeUVsZW1lbnRJbXBs
IDogcHVibGljIEhUTUxFbGVtZW50SW1wbAogewogcHVibGljOgotICAgIEhUTUxEaXJlY3RvcnlF
bGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKSA6IEhUTUxFbGVtZW50SW1wbChkb2MpIHt9Cisg
ICAgSFRNTERpcmVjdG9yeUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpIDogSFRNTEVsZW1l
bnRJbXBsKEhUTUxOYW1lczo6ZGlyKCksIGRvYykge30KIAotICAgIHZpcnR1YWwgSWQgaWQoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25z
dCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQorICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9y
aXR5KCkgY29uc3QgeyByZXR1cm4gNTsgfQogCiAgICAgYm9vbCBjb21wYWN0KCkgY29uc3Q7CiAg
ICAgdm9pZCBzZXRDb21wYWN0KGJvb2wpOwpAQCAtNzAsOSArNzIsMTAgQEAgcHVibGljOgogY2xh
c3MgSFRNTE1lbnVFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MRWxlbWVudEltcGwKIHsKIHB1Ymxp
YzoKLSAgICBIVE1MTWVudUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpIDogSFRNTEVsZW1l
bnRJbXBsKGRvYykge30KKyAgICBIVE1MTWVudUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2Mp
IDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6bWVudSgpLCBkb2MpIHt9CiAKLSAgICB2aXJ0
dWFsIElkIGlkKCkgY29uc3Q7CisgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVp
cmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzUmVxdWlyZWQ7IH0KKyAgICB2aXJ0dWFs
IGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDU7IH0KIAogICAgIGJvb2wgY29tcGFj
dCgpIGNvbnN0OwogICAgIHZvaWQgc2V0Q29tcGFjdChib29sKTsKQEAgLTgwLDE0ICs4MywxNSBA
QCBwdWJsaWM6CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotY2xhc3MgSFRNTE9MaXN0RWxlbWVu
dEltcGwgOiBwdWJsaWMgSFRNTFVMaXN0RWxlbWVudEltcGwKK2NsYXNzIEhUTUxPTGlzdEVsZW1l
bnRJbXBsIDogcHVibGljIEhUTUxFbGVtZW50SW1wbAogewogcHVibGljOgogICAgIEhUTUxPTGlz
dEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0gICAgICAgIDogSFRNTFVMaXN0RWxlbWVu
dEltcGwoZG9jKSB7IF9zdGFydCA9IDE7IH0KLQotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsK
KyAgICAgICAgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjpvbCgpLCBkb2MpIHsgX3N0YXJ0
ID0gMTsgfQogICAgIAorICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVu
dCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9CisgICAgdmlydHVhbCBpbnQg
dGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiA1OyB9CisKICAgICB2aXJ0dWFsIGJvb2wgbWFw
VG9FbnRyeShJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdDsKICAg
ICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAq
KTsKIApAQCAtMTEwLDEwICsxMTQsMTEgQEAgY2xhc3MgSFRNTExJRWxlbWVudEltcGwgOiBwdWJs
aWMgSFRNTEVsZQogewogcHVibGljOgogICAgIEhUTUxMSUVsZW1lbnRJbXBsKERvY3VtZW50UHRy
ICpkb2MpCi0gICAgICAgIDogSFRNTEVsZW1lbnRJbXBsKGRvYykgeyBpc1ZhbHVlZCA9IGZhbHNl
OyB9CisgICAgICAgIDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6bGkoKSwgZG9jKSB7IGlz
VmFsdWVkID0gZmFsc2U7IH0KICAgICB2aXJ0dWFsIH5IVE1MTElFbGVtZW50SW1wbCgpIHt9CiAK
LSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CisgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVu
ZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzT3B0aW9uYWw7IH0KKyAg
ICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDM7IH0KIAogICAgIHZp
cnR1YWwgYm9vbCBtYXBUb0VudHJ5KE5vZGVJbXBsOjpJZCBhdHRyLCBNYXBwZWRBdHRyaWJ1dGVF
bnRyeSYgcmVzdWx0KSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1
dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqYXR0cik7CkBAIC0xMzYsMTAgKzE0MSwxMSBAQCBwcml2
YXRlOgogY2xhc3MgSFRNTERMaXN0RWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTEVsZW1lbnRJbXBs
CiB7CiBwdWJsaWM6Ci0gICAgSFRNTERMaXN0RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykg
OiBIVE1MRWxlbWVudEltcGwoZG9jKSB7fQorICAgIEhUTUxETGlzdEVsZW1lbnRJbXBsKERvY3Vt
ZW50UHRyICpkb2MpIDogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6ZGwoKSwgZG9jKSB7fQog
ICAgIHZpcnR1YWwgfkhUTUxETGlzdEVsZW1lbnRJbXBsKCkge30KIAotICAgIHZpcnR1YWwgSWQg
aWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQo
KSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQorICAgIHZpcnR1YWwgaW50IHRh
Z1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gNTsgfQogCiAgICAgYm9vbCBjb21wYWN0KCkgY29u
c3Q7CiAgICAgdm9pZCBzZXRDb21wYWN0KGJvb2wpOwpJbmRleDoga2h0bWwvaHRtbC9odG1sX21p
c2NpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9o
dG1sL2h0bWxfbWlzY2ltcGwuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjI2CmRpZmYgLXUg
LXAgLXIxLjI2IGtodG1sL2h0bWwvaHRtbF9taXNjaW1wbC5jcHAKLS0tIGtodG1sL2h0bWwvaHRt
bF9taXNjaW1wbC5jcHAJMTEgSnVuIDIwMDUgMDk6NTE6MDEgLTAwMDAJMS4yNgorKysga2h0bWwv
aHRtbC9odG1sX21pc2NpbXBsLmNwcAk5IEp1bCAyMDA1IDAyOjQzOjA1IC0wMDAwCkBAIC0zNSwx
NSArMzUsMTAgQEAKIG5hbWVzcGFjZSBET00gewogCiBIVE1MQmFzZUZvbnRFbGVtZW50SW1wbDo6
SFRNTEJhc2VGb250RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgICA6IEhUTUxFbGVt
ZW50SW1wbChkb2MpCisgICAgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjpiYXNlZm9udCgp
LCBkb2MpCiB7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MQmFzZUZvbnRFbGVtZW50SW1wbDo6aWQo
KSBjb25zdAotewotICAgIHJldHVybiBJRF9CQVNFRk9OVDsKLX0KLQogRE9NU3RyaW5nIEhUTUxC
YXNlRm9udEVsZW1lbnRJbXBsOjpjb2xvcigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGdldEF0dHJp
YnV0ZShBVFRSX0NPTE9SKTsKQEAgLTE0MSw3MiArMTM2LDcyIEBAIE5vZGVJbXBsICpIVE1MQ29s
bGVjdGlvbkltcGw6OnRyYXZlcnNlTmUKICAgICAgICAgICAgIEhUTUxFbGVtZW50SW1wbCAqZSA9
IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCAqPihjdXJyZW50KTsKICAgICAgICAgICAgIHN3
aXRjaCh0eXBlKSB7CiAgICAgICAgICAgICBjYXNlIERPQ19JTUFHRVM6Ci0gICAgICAgICAgICAg
ICAgaWYoZS0+aWQoKSA9PSBJRF9JTUcpCisgICAgICAgICAgICAgICAgaWYgKGUtPmhhc0xvY2Fs
TmFtZShIVE1MTmFtZXM6OmltZygpKSkKICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVl
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBET0NfRk9STVM6Ci0g
ICAgICAgICAgICAgICAgaWYoZS0+aWQoKSA9PSBJRF9GT1JNKQorICAgICAgICAgICAgICAgIGlm
KGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmZvcm0oKSkpCiAgICAgICAgICAgICAgICAgICAg
IGZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2Ug
RE9DX05BTUVBQkxFX0lURU1TOgotICAgICAgICAgICAgICAgIGlmKGUtPmlkKCkgPT0gSURfSU1H
KQorICAgICAgICAgICAgICAgIGlmIChlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjppbWcoKSkp
CiAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBpZihl
LT5pZCgpID09IElEX0ZPUk0pCisgICAgICAgICAgICAgICAgaWYgKGUtPmhhc0xvY2FsTmFtZShI
VE1MTmFtZXM6OmZvcm0oKSkpCiAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAg
ICAgICAgICAgICAgICBpZihlLT5pZCgpID09IElEX0FQUExFVCkKKyAgICAgICAgICAgICAgICBp
ZiAoZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6YXBwbGV0KCkpKQogICAgICAgICAgICAgICAg
ICAgICBmb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgaWYoZS0+aWQoKSA9PSBJRF9FTUJF
RCkKKyAgICAgICAgICAgICAgICBpZiAoZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6ZW1iZWQo
KSkpCiAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBp
ZihlLT5pZCgpID09IElEX09CSkVDVCkKKyAgICAgICAgICAgICAgICBpZiAoZS0+aGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6b2JqZWN0KCkpKQogICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRy
dWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFRBQkxFX1RCT0RJ
RVM6Ci0gICAgICAgICAgICAgICAgaWYoZS0+aWQoKSA9PSBJRF9UQk9EWSkKKyAgICAgICAgICAg
ICAgICBpZiAoZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dGJvZHkoKSkpCiAgICAgICAgICAg
ICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBlbHNlIGlmKGUtPmlkKCkg
PT0gSURfVEFCTEUpCisgICAgICAgICAgICAgICAgZWxzZSBpZiAoZS0+aGFzTG9jYWxOYW1lKEhU
TUxOYW1lczo6dGFibGUoKSkpCiAgICAgICAgICAgICAgICAgICAgIGRlZXAgPSBmYWxzZTsKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgVFJfQ0VMTFM6Ci0gICAgICAg
ICAgICAgICAgaWYoZS0+aWQoKSA9PSBJRF9URCB8fCBlLT5pZCgpID09IElEX1RIKQorICAgICAg
ICAgICAgICAgIGlmIChlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0ZCgpKSB8fCBlLT5oYXNM
b2NhbE5hbWUoSFRNTE5hbWVzOjp0aCgpKSkKICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0
cnVlOwotICAgICAgICAgICAgICAgIGVsc2UgaWYoZS0+aWQoKSA9PSBJRF9UQUJMRSkKKyAgICAg
ICAgICAgICAgICBlbHNlIGlmIChlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0YWJsZSgpKSkK
ICAgICAgICAgICAgICAgICAgICAgZGVlcCA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgY2FzZSBUQUJMRV9ST1dTOgogICAgICAgICAgICAgY2FzZSBUU0VDVElP
Tl9ST1dTOgotICAgICAgICAgICAgICAgIGlmKGUtPmlkKCkgPT0gSURfVFIpCisgICAgICAgICAg
ICAgICAgaWYgKGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnRyKCkpKQogICAgICAgICAgICAg
ICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZihlLT5pZCgpID09
IElEX1RBQkxFKQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKGUtPmhhc0xvY2FsTmFtZShIVE1M
TmFtZXM6OnRhYmxlKCkpKQogICAgICAgICAgICAgICAgICAgICBkZWVwID0gZmFsc2U7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFNFTEVDVF9PUFRJT05TOgotICAg
ICAgICAgICAgICAgIGlmKGUtPmlkKCkgPT0gSURfT1BUSU9OKQorICAgICAgICAgICAgICAgIGlm
IChlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvcHRpb24oKSkpCiAgICAgICAgICAgICAgICAg
ICAgIGZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNh
c2UgTUFQX0FSRUFTOgotICAgICAgICAgICAgICAgIGlmKGUtPmlkKCkgPT0gSURfQVJFQSkKKyAg
ICAgICAgICAgICAgICBpZiAoZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6YXJlYSgpKSkKICAg
ICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgY2FzZSBET0NfQVBQTEVUUzogICAvLyBhbGwgT0JKRUNUIGFuZCBBUFBMRVQg
ZWxlbWVudHMKLSAgICAgICAgICAgICAgICBpZihlLT5pZCgpID09IElEX09CSkVDVCB8fCBlLT5p
ZCgpID09IElEX0FQUExFVCkKKyAgICAgICAgICAgICAgICBpZiAoZS0+aGFzTG9jYWxOYW1lKEhU
TUxOYW1lczo6b2JqZWN0KCkpIHx8IGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmFwcGxldCgp
KSkKICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgY2FzZSBET0NfRU1CRURTOiAgIC8vIGFsbCBFTUJFRCBlbGVtZW50
cwotICAgICAgICAgICAgICAgIGlmKGUtPmlkKCkgPT0gSURfRU1CRUQpCisgICAgICAgICAgICAg
ICAgaWYgKGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmVtYmVkKCkpKQogICAgICAgICAgICAg
ICAgICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICBjYXNlIERPQ19PQkpFQ1RTOiAgIC8vIGFsbCBPQkpFQ1QgZWxlbWVudHMKLSAgICAgICAgICAg
ICAgICBpZihlLT5pZCgpID09IElEX09CSkVDVCkKKyAgICAgICAgICAgICAgICBpZiAoZS0+aGFz
TG9jYWxOYW1lKEhUTUxOYW1lczo6b2JqZWN0KCkpKQogICAgICAgICAgICAgICAgICAgICBmb3Vu
ZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIERPQ19M
SU5LUzogICAgIC8vIGFsbCBBIF9hbmRfIEFSRUEgZWxlbWVudHMgd2l0aCBhIHZhbHVlIGZvciBo
cmVmCi0gICAgICAgICAgICAgICAgaWYoZS0+aWQoKSA9PSBJRF9BIHx8IGUtPmlkKCkgPT0gSURf
QVJFQSkKLSAgICAgICAgICAgICAgICAgICAgaWYoIWUtPmdldEF0dHJpYnV0ZShBVFRSX0hSRUYp
LmlzTnVsbCgpKQorICAgICAgICAgICAgICAgIGlmIChlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVz
OjphKCkpIHx8IGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmFyZWEoKSkpCisgICAgICAgICAg
ICAgICAgICAgIGlmICghZS0+Z2V0QXR0cmlidXRlKEFUVFJfSFJFRikuaXNOdWxsKCkpCiAgICAg
ICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICBjYXNlIERPQ19BTkNIT1JTOiAgICAgIC8vIGFsbCBBIGVsZW1lbnRzIHdp
dGggYSB2YWx1ZSBmb3IgbmFtZSBvciBhbiBpZCBhdHRyaWJ1dGUKLSAgICAgICAgICAgICAgICBp
ZihlLT5pZCgpID09IElEX0EpCi0gICAgICAgICAgICAgICAgICAgIGlmKCFlLT5nZXRBdHRyaWJ1
dGUoQVRUUl9OQU1FKS5pc051bGwoKSkKKyAgICAgICAgICAgICAgICBpZiAoZS0+aGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6YSgpKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFlLT5nZXRBdHRy
aWJ1dGUoQVRUUl9OQU1FKS5pc051bGwoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5k
ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgRE9DX0FM
TDoKQEAgLTIxOSw5ICsyMTQsOSBAQCBOb2RlSW1wbCAqSFRNTENvbGxlY3Rpb25JbXBsOjp0cmF2
ZXJzZU5lCiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGtkRGVidWcoIDYw
MzAgKSA8PCAiRXJyb3IgaW4gSFRNTENvbGxlY3Rpb24sIHdyb25nIHRhZ0lkISIgPDwgZW5kbDsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChmb3VuZCkgeworCisgICAgICAgICAgICBp
ZiAoZm91bmQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7Ci0gICAgICAgICAgICB9
CiAgICAgICAgICAgICBpZiAoZGVlcCkgewogICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJy
ZW50LT50cmF2ZXJzZU5leHROb2RlKG1fYmFzZS5nZXQoKSk7CiAgICAgICAgICAgICAgICAgY29u
dGludWU7CkBAIC0yOTgsMjkgKzI5MywzMSBAQCBOb2RlSW1wbCAqSFRNTENvbGxlY3Rpb25JbXBs
OjpuZXh0SXRlbSgpCiAKIGJvb2wgSFRNTENvbGxlY3Rpb25JbXBsOjpjaGVja0Zvck5hbWVNYXRj
aChOb2RlSW1wbCAqbm9kZSwgYm9vbCBjaGVja05hbWUsIGNvbnN0IERPTVN0cmluZyAmbmFtZSwg
Ym9vbCBjYXNlU2Vuc2l0aXZlKSBjb25zdAogewotICAgIEVsZW1lbnRJbXBsICplID0gc3RhdGlj
X2Nhc3Q8RWxlbWVudEltcGwgKj4obm9kZSk7CisgICAgaWYgKCFub2RlLT5pc0hUTUxFbGVtZW50
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBIVE1MRWxlbWVudEltcGwgKmUg
PSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwqPihub2RlKTsKICAgICBpZiAoY2FzZVNlbnNp
dGl2ZSkgewogICAgICAgICBpZiAoY2hlY2tOYW1lKSB7CiAgICAgICAgICAgICAvLyBkb2N1bWVu
dC5hbGwgcmV0dXJucyBvbmx5IGltYWdlcywgZm9ybXMsIGFwcGxldHMsIG9iamVjdHMgYW5kIGVt
YmVkcwogICAgICAgICAgICAgLy8gYnkgbmFtZSAodGhvdWdoIGV2ZXJ5dGhpbmcgYnkgaWQpCiAg
ICAgICAgICAgICBpZiAodHlwZSA9PSBET0NfQUxMICYmIAotICAgICAgICAgICAgICAgICEoZS0+
aWQoKSA9PSBJRF9JTUcgfHwgZS0+aWQoKSA9PSBJRF9GT1JNIHx8Ci0gICAgICAgICAgICAgICAg
ICBlLT5pZCgpID09IElEX0FQUExFVCB8fCBlLT5pZCgpID09IElEX09CSkVDVCB8fAotICAgICAg
ICAgICAgICAgICAgZS0+aWQoKSA9PSBJRF9FTUJFRCkpCisgICAgICAgICAgICAgICAgIShlLT5o
YXNMb2NhbE5hbWUoSFRNTE5hbWVzOjppbWcoKSkgfHwgZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1l
czo6Zm9ybSgpKSB8fAorICAgICAgICAgICAgICAgICAgZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1l
czo6YXBwbGV0KCkpIHx8IGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9iamVjdCgpKSB8fAor
ICAgICAgICAgICAgICAgICAgZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6ZW1iZWQoKSkpKQog
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAgICAgcmV0dXJuIGUtPmdl
dEF0dHJpYnV0ZShBVFRSX05BTUUpID09IG5hbWUgJiYgZS0+Z2V0QXR0cmlidXRlKEFUVFJfSUQp
ICE9IG5hbWU7Ci0gICAgICAgIH0gZWxzZSB7CisgICAgICAgIH0gZWxzZQogICAgICAgICAgICAg
cmV0dXJuIGUtPmdldEF0dHJpYnV0ZShBVFRSX0lEKSA9PSBuYW1lOwotICAgICAgICB9CiAgICAg
fSBlbHNlIHsKICAgICAgICAgaWYgKGNoZWNrTmFtZSkgewogICAgICAgICAgICAgLy8gZG9jdW1l
bnQuYWxsIHJldHVybnMgb25seSBpbWFnZXMsIGZvcm1zLCBhcHBsZXRzLCBvYmplY3RzIGFuZCBl
bWJlZHMKICAgICAgICAgICAgIC8vIGJ5IG5hbWUgKHRob3VnaCBldmVyeXRoaW5nIGJ5IGlkKQog
ICAgICAgICAgICAgaWYgKHR5cGUgPT0gRE9DX0FMTCAmJiAKLSAgICAgICAgICAgICAgICAhKGUt
PmlkKCkgPT0gSURfSU1HIHx8IGUtPmlkKCkgPT0gSURfRk9STSB8fAotICAgICAgICAgICAgICAg
ICAgZS0+aWQoKSA9PSBJRF9BUFBMRVQgfHwgZS0+aWQoKSA9PSBJRF9PQkpFQ1QgfHwKLSAgICAg
ICAgICAgICAgICAgIGUtPmlkKCkgPT0gSURfRU1CRUQpKQorICAgICAgICAgICAgICAgICEoZS0+
aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6aW1nKCkpIHx8IGUtPmhhc0xvY2FsTmFtZShIVE1MTmFt
ZXM6OmZvcm0oKSkgfHwKKyAgICAgICAgICAgICAgICAgIGUtPmhhc0xvY2FsTmFtZShIVE1MTmFt
ZXM6OmFwcGxldCgpKSB8fCBlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvYmplY3QoKSkgfHwK
KyAgICAgICAgICAgICAgICAgIGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmVtYmVkKCkpKSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgICAgIHJldHVybiBlLT5n
ZXRBdHRyaWJ1dGUoQVRUUl9OQU1FKS5kb21TdHJpbmcoKS5sb3dlcigpID09IG5hbWUubG93ZXIo
KSAmJgpAQCAtMzc5LDcgKzM3Niw5IEBAIHZvaWQgSFRNTENvbGxlY3Rpb25JbXBsOjp1cGRhdGVO
YW1lQ2FjaGUKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIGZvciAoTm9kZUltcGwgKm4gPSB0
cmF2ZXJzZU5leHRJdGVtKG1fYmFzZS5nZXQoKSk7IG47IG4gPSB0cmF2ZXJzZU5leHRJdGVtKG4p
KSB7Ci0gICAgICAgIEVsZW1lbnRJbXBsICplID0gc3RhdGljX2Nhc3Q8RWxlbWVudEltcGwgKj4o
bik7CisgICAgICAgIGlmICghbi0+aXNIVE1MRWxlbWVudCgpKQorICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIEhUTUxFbGVtZW50SW1wbCogZSA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50
SW1wbCo+KG4pOwogICAgICAgICBRU3RyaW5nIGlkQXR0ciA9IGUtPmdldEF0dHJpYnV0ZShBVFRS
X0lEKS5zdHJpbmcoKTsKICAgICAgICAgUVN0cmluZyBuYW1lQXR0ciA9IGUtPmdldEF0dHJpYnV0
ZShBVFRSX05BTUUpLnN0cmluZygpOwogICAgICAgICBpZiAoIWlkQXR0ci5pc0VtcHR5KCkpIHsK
QEAgLTM5Myw5ICszOTIsOSBAQCB2b2lkIEhUTUxDb2xsZWN0aW9uSW1wbDo6dXBkYXRlTmFtZUNh
Y2hlCiAgICAgICAgIH0KICAgICAgICAgaWYgKCFuYW1lQXR0ci5pc0VtcHR5KCkgJiYgaWRBdHRy
ICE9IG5hbWVBdHRyCiAgICAgICAgICAgICAmJiAodHlwZSAhPSBET0NfQUxMIHx8IAotICAgICAg
ICAgICAgICAgIChlLT5pZCgpID09IElEX0lNRyB8fCBlLT5pZCgpID09IElEX0ZPUk0gfHwKLSAg
ICAgICAgICAgICAgICAgZS0+aWQoKSA9PSBJRF9BUFBMRVQgfHwgZS0+aWQoKSA9PSBJRF9PQkpF
Q1QgfHwKLSAgICAgICAgICAgICAgICAgZS0+aWQoKSA9PSBJRF9FTUJFRCkpKSB7CisgICAgICAg
ICAgICAgICAgKGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmltZygpKSB8fCBlLT5oYXNMb2Nh
bE5hbWUoSFRNTE5hbWVzOjpmb3JtKCkpIHx8CisgICAgICAgICAgICAgICAgIGUtPmhhc0xvY2Fs
TmFtZShIVE1MTmFtZXM6OmFwcGxldCgpKSB8fCBlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpv
YmplY3QoKSkgfHwKKyAgICAgICAgICAgICAgICAgZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6
ZW1iZWQoKSkpKSkgewogICAgICAgICAgICAgLy8gYWRkIHRvIG5hbWUgY2FjaGUKICAgICAgICAg
ICAgIFFQdHJWZWN0b3I8Tm9kZUltcGw+ICpuYW1lVmVjdG9yID0gaW5mby0+bmFtZUNhY2hlLmZp
bmQobmFtZUF0dHIpOwogICAgICAgICAgICAgaWYgKCFuYW1lVmVjdG9yKSB7CkBAIC01MzIsMTIg
KzUzMSwxMCBAQCBOb2RlSW1wbCogSFRNTEZvcm1Db2xsZWN0aW9uSW1wbDo6Z2V0TmFtCiAKIE5v
ZGVJbXBsKiBIVE1MRm9ybUNvbGxlY3Rpb25JbXBsOjpnZXROYW1lZEZvcm1JdGVtKGludCBhdHRy
X2lkLCBjb25zdCBET01TdHJpbmcmIG5hbWUsIGludCBkdXBsaWNhdGVOdW1iZXIsIGJvb2wgY2Fz
ZVNlbnNpdGl2ZSkgY29uc3QKIHsKLSAgICBpZihtX2Jhc2UtPm5vZGVUeXBlKCkgPT0gTm9kZTo6
RUxFTUVOVF9OT0RFKQotICAgIHsKKyAgICBpZiAobV9iYXNlLT5ub2RlVHlwZSgpID09IE5vZGU6
OkVMRU1FTlRfTk9ERSkgewogICAgICAgICBIVE1MRWxlbWVudEltcGwqIGJhc2VFbGVtZW50ID0g
c3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsKj4obV9iYXNlLmdldCgpKTsKICAgICAgICAgYm9v
bCBmb3VuZElucHV0RWxlbWVudHMgPSBmYWxzZTsKLSAgICAgICAgaWYoYmFzZUVsZW1lbnQtPmlk
KCkgPT0gSURfRk9STSkKLSAgICAgICAgeworICAgICAgICBpZiAoYmFzZUVsZW1lbnQtPmhhc0xv
Y2FsTmFtZShIVE1MTmFtZXM6OmZvcm0oKSkpIHsKICAgICAgICAgICAgIEhUTUxGb3JtRWxlbWVu
dEltcGwqIGYgPSBzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnRJbXBsKj4oYmFzZUVsZW1lbnQp
OwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGYtPmZvcm1FbGVtZW50cy5j
b3VudCgpOyArK2kpIHsKICAgICAgICAgICAgICAgICBIVE1MR2VuZXJpY0Zvcm1FbGVtZW50SW1w
bCogZSA9IGYtPmZvcm1FbGVtZW50c1tpXTsKQEAgLTU1Nyw4ICs1NTQsNyBAQCBOb2RlSW1wbCog
SFRNTEZvcm1Db2xsZWN0aW9uSW1wbDo6Z2V0TmFtCiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
IAotICAgICAgICBpZiAoICFmb3VuZElucHV0RWxlbWVudHMgKQotICAgICAgICB7CisgICAgICAg
IGlmICghZm91bmRJbnB1dEVsZW1lbnRzKSB7CiAgICAgICAgICAgICBIVE1MRm9ybUVsZW1lbnRJ
bXBsKiBmID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50SW1wbCo+KGJhc2VFbGVtZW50KTsK
IAogICAgICAgICAgICAgZm9yKHVuc2lnbmVkIGkgPSAwOyBpIDwgZi0+aW1nRWxlbWVudHMuY291
bnQoKTsgKytpKQpAQCAtNjUwLDcgKzY0Niw3IEBAIHZvaWQgSFRNTEZvcm1Db2xsZWN0aW9uSW1w
bDo6dXBkYXRlTmFtZUMKIAogICAgIFFEaWN0PGNoYXI+IGZvdW5kSW5wdXRFbGVtZW50czsKIAot
ICAgIGlmIChtX2Jhc2UtPmlkKCkgIT0gSURfRk9STSkgeworICAgIGlmICghbV9iYXNlLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6Zm9ybSgpKSkgewogICAgICAgICBpbmZvLT5oYXNOYW1lQ2FjaGUg
PSB0cnVlOwogICAgICAgICByZXR1cm47CiAgICAgfQpJbmRleDoga2h0bWwvaHRtbC9odG1sX21p
c2NpbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvaHRt
bC9odG1sX21pc2NpbXBsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTYKZGlmZiAtdSAtcCAt
cjEuMTYga2h0bWwvaHRtbC9odG1sX21pc2NpbXBsLmgKLS0tIGtodG1sL2h0bWwvaHRtbF9taXNj
aW1wbC5oCTExIE1heSAyMDA1IDAwOjU4OjI4IC0wMDAwCTEuMTYKKysrIGtodG1sL2h0bWwvaHRt
bF9taXNjaW1wbC5oCTkgSnVsIDIwMDUgMDI6NDM6MDUgLTAwMDAKQEAgLTM5LDcgKzM5LDggQEAg
Y2xhc3MgSFRNTEJhc2VGb250RWxlbWVudEltcGwgOiBwdWJsaWMgSAogcHVibGljOgogICAgIEhU
TUxCYXNlRm9udEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpOwogCi0gICAgdmlydHVhbCBJ
ZCBpZCgpIGNvbnN0OworICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVu
dCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c0ZvcmJpZGRlbjsgfQorICAgIHZpcnR1YWwgaW50
IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMDsgfQogCiAgICAgRE9NU3RyaW5nIGNvbG9y
KCkgY29uc3Q7CiAgICAgdm9pZCBzZXRDb2xvcihjb25zdCBET01TdHJpbmcgJik7CkluZGV4OiBr
aHRtbC9odG1sL2h0bWxfb2JqZWN0aW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sX29iamVjdGltcGwuY3BwLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjY3CmRpZmYgLXUgLXAgLXIxLjY3IGtodG1sL2h0bWwvaHRtbF9vYmplY3RpbXBs
LmNwcAotLS0ga2h0bWwvaHRtbC9odG1sX29iamVjdGltcGwuY3BwCTI5IEp1biAyMDA1IDE3OjUw
OjI0IC0wMDAwCTEuNjcKKysrIGtodG1sL2h0bWwvaHRtbF9vYmplY3RpbXBsLmNwcAk5IEp1bCAy
MDA1IDAyOjQzOjA2IC0wMDAwCkBAIC01OCw3ICs1OCw3IEBAIG5hbWVzcGFjZSBET00gewogLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MQXBwbGV0RWxlbWVudEltcGw6OkhUTUxBcHBsZXRFbGVt
ZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICA6IEhUTUxFbGVtZW50SW1wbChkb2MpCisgIDog
SFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6YXBwbGV0KCksIGRvYykKIHsKICAgICBhcHBsZXRJ
bnN0YW5jZSA9IDA7CiAgICAgbV9hbGxQYXJhbXNBdmFpbGFibGUgPSBmYWxzZTsKQEAgLTY5LDkg
KzY5LDkgQEAgSFRNTEFwcGxldEVsZW1lbnRJbXBsOjp+SFRNTEFwcGxldEVsZW1lbgogICAgIGRl
bGV0ZSBhcHBsZXRJbnN0YW5jZTsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxBcHBsZXRFbGVtZW50
SW1wbDo6aWQoKSBjb25zdAorYm9vbCBIVE1MQXBwbGV0RWxlbWVudEltcGw6OmNoZWNrRFREKGNv
bnN0IE5vZGVJbXBsKiBuZXdDaGlsZCkKIHsKLSAgICByZXR1cm4gSURfQVBQTEVUOworICAgIHJl
dHVybiBuZXdDaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnBhcmFtKCkpIHx8IEhUTUxFbGVt
ZW50SW1wbDo6Y2hlY2tEVEQobmV3Q2hpbGQpOwogfQogCiBib29sIEhUTUxBcHBsZXRFbGVtZW50
SW1wbDo6bWFwVG9FbnRyeShOb2RlSW1wbDo6SWQgYXR0ciwgTWFwcGVkQXR0cmlidXRlRW50cnkm
IHJlc3VsdCkgY29uc3QKQEAgLTM1MywxNiArMzUzLDE2IEBAIHZvaWQgSFRNTEFwcGxldEVsZW1l
bnRJbXBsOjpzZXRXaWR0aChjb24KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogSFRNTEVtYmVkRWxl
bWVudEltcGw6OkhUTUxFbWJlZEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0gICAgOiBI
VE1MRWxlbWVudEltcGwoZG9jKSwgZW1iZWRJbnN0YW5jZSgwKQorICAgIDogSFRNTEVsZW1lbnRJ
bXBsKEhUTUxOYW1lczo6ZW1iZWQoKSwgZG9jKSwgZW1iZWRJbnN0YW5jZSgwKQoge30KIAogSFRN
TEVtYmVkRWxlbWVudEltcGw6On5IVE1MRW1iZWRFbGVtZW50SW1wbCgpCiB7CiB9CiAKLU5vZGVJ
bXBsOjpJZCBIVE1MRW1iZWRFbGVtZW50SW1wbDo6aWQoKSBjb25zdAorYm9vbCBIVE1MRW1iZWRF
bGVtZW50SW1wbDo6Y2hlY2tEVEQoY29uc3QgTm9kZUltcGwqIG5ld0NoaWxkKQogewotICAgIHJl
dHVybiBJRF9FTUJFRDsKKyAgICByZXR1cm4gbmV3Q2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjpwYXJhbSgpKSB8fCBIVE1MRWxlbWVudEltcGw6OmNoZWNrRFREKG5ld0NoaWxkKTsKIH0KIAog
I2lmIEFQUExFX0NIQU5HRVMKQEAgLTQ3OSw3ICs0NzksNyBAQCBib29sIEhUTUxFbWJlZEVsZW1l
bnRJbXBsOjpyZW5kZXJlcklzTmVlCiAgICAgS0hUTUxQYXJ0ICpwYXJ0ID0gZ2V0RG9jdW1lbnQo
KS0+cGFydCgpOwogICAgIGlmICghcGFydCkKIAlyZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHBh
cnQtPnBsdWdpbnNFbmFibGVkKCkgJiYgcGFyZW50Tm9kZSgpLT5pZCgpICE9IElEX09CSkVDVDsK
KyAgICByZXR1cm4gcGFydC0+cGx1Z2luc0VuYWJsZWQoKSAmJiAhcGFyZW50Tm9kZSgpLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6b2JqZWN0KCkpOwogfQogCiBSZW5kZXJPYmplY3QgKkhUTUxFbWJl
ZEVsZW1lbnRJbXBsOjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSAqYXJlbmEsIFJlbmRlclN0
eWxlICpzdHlsZSkKQEAgLTUwNCw5ICs1MDQsOSBAQCBib29sIEhUTUxFbWJlZEVsZW1lbnRJbXBs
Ojppc1VSTEF0dHJpYnV0CiAKIEhUTUxPYmplY3RFbGVtZW50SW1wbDo6SFRNTE9iamVjdEVsZW1l
bnRJbXBsKERvY3VtZW50UHRyICpkb2MpIAogI2lmIEFQUExFX0NIQU5HRVMKLTogSFRNTEVsZW1l
bnRJbXBsKGRvYyksIG1faW1hZ2VMb2FkZXIoMCksIG9iamVjdEluc3RhbmNlKDApCis6IEhUTUxF
bGVtZW50SW1wbChIVE1MTmFtZXM6Om9iamVjdCgpLCBkb2MpLCBtX2ltYWdlTG9hZGVyKDApLCBv
YmplY3RJbnN0YW5jZSgwKQogI2Vsc2UKLTogSFRNTEVsZW1lbnRJbXBsKGRvYyksIG1faW1hZ2VM
b2FkZXIoMCkKKzogSFRNTEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6b2JqZWN0KCksIGRvYyksIG1f
aW1hZ2VMb2FkZXIoMCkKICNlbmRpZgogewogICAgIG5lZWRXaWRnZXRVcGRhdGUgPSBmYWxzZTsK
QEAgLTUxOCw5ICs1MTgsOSBAQCBIVE1MT2JqZWN0RWxlbWVudEltcGw6On5IVE1MT2JqZWN0RWxl
bWVuCiAgICAgZGVsZXRlIG1faW1hZ2VMb2FkZXI7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MT2Jq
ZWN0RWxlbWVudEltcGw6OmlkKCkgY29uc3QKK2Jvb2wgSFRNTE9iamVjdEVsZW1lbnRJbXBsOjpj
aGVja0RURChjb25zdCBOb2RlSW1wbCogbmV3Q2hpbGQpCiB7Ci0gICAgcmV0dXJuIElEX09CSkVD
VDsKKyAgICByZXR1cm4gbmV3Q2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpwYXJhbSgpKSB8
fCBIVE1MRWxlbWVudEltcGw6OmNoZWNrRFREKG5ld0NoaWxkKTsKIH0KIAogI2lmIEFQUExFX0NI
QU5HRVMKQEAgLTU1NSw3ICs1NTUsNyBAQCBLSlM6OkJpbmRpbmdzOjpJbnN0YW5jZSAqSFRNTE9i
amVjdEVsZW1lCiBIVE1MRm9ybUVsZW1lbnRJbXBsICpIVE1MT2JqZWN0RWxlbWVudEltcGw6OmZv
cm0oKSBjb25zdAogewogICAgIGZvciAoTm9kZUltcGwgKnAgPSBwYXJlbnROb2RlKCk7IHAgIT0g
MDsgcCA9IHAtPnBhcmVudE5vZGUoKSkgewotICAgICAgICBpZiAocC0+aWQoKSA9PSBJRF9GT1JN
KQorICAgICAgICBpZiAocC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZvcm0oKSkpCiAgICAgICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50SW1wbCAqPihwKTsKICAgICB9
CiAgICAgCkBAIC05NTAsNyArOTUwLDcgQEAgdm9pZCBIVE1MT2JqZWN0RWxlbWVudEltcGw6OnNl
dFdpZHRoKGNvbgogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBIVE1MUGFyYW1FbGVtZW50SW1wbDo6
SFRNTFBhcmFtRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50
SW1wbChkb2MpCisgICAgOiBIVE1MRWxlbWVudEltcGwoSFRNTE5hbWVzOjpwYXJhbSgpLCBkb2Mp
CiB7CiB9CiAKQEAgLTk1OCwxMSArOTU4LDYgQEAgSFRNTFBhcmFtRWxlbWVudEltcGw6On5IVE1M
UGFyYW1FbGVtZW50SQogewogfQogCi1Ob2RlSW1wbDo6SWQgSFRNTFBhcmFtRWxlbWVudEltcGw6
OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfUEFSQU07Ci19Ci0KIHZvaWQgSFRNTFBhcmFt
RWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0
dHIpCiB7CiAgICAgc3dpdGNoKCBhdHRyLT5pZCgpICkKSW5kZXg6IGtodG1sL2h0bWwvaHRtbF9v
YmplY3RpbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwv
aHRtbC9odG1sX29iamVjdGltcGwuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zMQpkaWZmIC11
IC1wIC1yMS4zMSBraHRtbC9odG1sL2h0bWxfb2JqZWN0aW1wbC5oCi0tLSBraHRtbC9odG1sL2h0
bWxfb2JqZWN0aW1wbC5oCTExIE1heSAyMDA1IDA1OjQ5OjM0IC0wMDAwCTEuMzEKKysrIGtodG1s
L2h0bWwvaHRtbF9vYmplY3RpbXBsLmgJOSBKdWwgMjAwNSAwMjo0MzowNiAtMDAwMApAQCAtNDIs
MTEgKzQyLDEyIEBAIGNsYXNzIEhUTUxBcHBsZXRFbGVtZW50SW1wbCA6IHB1YmxpYyBIVE0KIHsK
IHB1YmxpYzoKICAgICBIVE1MQXBwbGV0RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYyk7Ci0K
ICAgICB+SFRNTEFwcGxldEVsZW1lbnRJbXBsKCk7CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29u
c3Q7Ci0KKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25z
dCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQorICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9y
aXR5KCkgY29uc3QgeyByZXR1cm4gMTsgfQorICAgIHZpcnR1YWwgYm9vbCBjaGVja0RURChjb25z
dCBOb2RlSW1wbCogbmV3Q2hpbGQpOworCQogICAgIHZpcnR1YWwgYm9vbCBtYXBUb0VudHJ5KElk
IGF0dHIsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0OwogICAgIHZpcnR1YWwg
dm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICp0b2tlbik7CiAg
ICAgCkBAIC0xMTIsMTAgKzExMywxMSBAQCBjbGFzcyBIVE1MRW1iZWRFbGVtZW50SW1wbCA6IHB1
YmxpYyBIVE1MCiB7CiBwdWJsaWM6CiAgICAgSFRNTEVtYmVkRWxlbWVudEltcGwoRG9jdW1lbnRQ
dHIgKmRvYyk7Ci0KICAgICB+SFRNTEVtYmVkRWxlbWVudEltcGwoKTsKIAotICAgIHZpcnR1YWwg
SWQgaWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1l
bnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQorICAgIHZpcnR1YWwgaW50
IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgYm9vbCBjaGVj
a0RURChjb25zdCBOb2RlSW1wbCogbmV3Q2hpbGQpOwogCiAgICAgdmlydHVhbCBib29sIG1hcFRv
RW50cnkoSWQgYXR0ciwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3Q7CiAgICAg
dmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0
dHIpOwpAQCAtMTQ2LDEwICsxNDgsMTEgQEAgY2xhc3MgSFRNTE9iamVjdEVsZW1lbnRJbXBsIDog
cHVibGljIEhUTQogewogcHVibGljOgogICAgIEhUTUxPYmplY3RFbGVtZW50SW1wbChEb2N1bWVu
dFB0ciAqZG9jKTsKLQogICAgIH5IVE1MT2JqZWN0RWxlbWVudEltcGwoKTsKIAotICAgIHZpcnR1
YWwgSWQgaWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWly
ZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQorICAgIHZpcnR1YWwg
aW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gNzsgfQorICAgIHZpcnR1YWwgYm9vbCBj
aGVja0RURChjb25zdCBOb2RlSW1wbCogbmV3Q2hpbGQpOwogCiAgICAgSFRNTEZvcm1FbGVtZW50
SW1wbCAqZm9ybSgpIGNvbnN0OwogCkBAIC0yNDcsMTAgKzI1MCwxMCBAQCBjbGFzcyBIVE1MUGFy
YW1FbGVtZW50SW1wbCA6IHB1YmxpYyBIVE1MCiAgICAgZnJpZW5kIGNsYXNzIEhUTUxBcHBsZXRF
bGVtZW50SW1wbDsKIHB1YmxpYzoKICAgICBIVE1MUGFyYW1FbGVtZW50SW1wbChEb2N1bWVudFB0
ciAqZG9jKTsKLQogICAgIH5IVE1MUGFyYW1FbGVtZW50SW1wbCgpOwogCi0gICAgdmlydHVhbCBJ
ZCBpZCgpIGNvbnN0OworICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVu
dCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c0ZvcmJpZGRlbjsgfQorICAgIHZpcnR1YWwgaW50
IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMDsgfQogCiAgICAgdmlydHVhbCB2b2lkIHBh
cnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKnRva2VuKTsKIApJbmRleDog
a2h0bWwvaHRtbC9odG1sX3RhYmxlaW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L1dlYkNvcmUva2h0bWwvaHRtbC9odG1sX3RhYmxlaW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuNTMKZGlmZiAtdSAtcCAtcjEuNTMga2h0bWwvaHRtbC9odG1sX3RhYmxlaW1wbC5j
cHAKLS0tIGtodG1sL2h0bWwvaHRtbF90YWJsZWltcGwuY3BwCTE3IEp1biAyMDA1IDIxOjU1OjM5
IC0wMDAwCTEuNTMKKysrIGtodG1sL2h0bWwvaHRtbF90YWJsZWltcGwuY3BwCTkgSnVsIDIwMDUg
MDI6NDM6MDcgLTAwMDAKQEAgLTUxLDcgKzUxLDcgQEAgdXNpbmcgbmFtZXNwYWNlIGtodG1sOwog
bmFtZXNwYWNlIERPTSB7CiAKIEhUTUxUYWJsZUVsZW1lbnRJbXBsOjpIVE1MVGFibGVFbGVtZW50
SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICA6IEhUTUxFbGVtZW50SW1wbChkb2MpCisgIDogSFRN
TEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6dGFibGUoKSwgZG9jKQogewogICAgIHRDYXB0aW9uID0g
MDsKICAgICBoZWFkID0gMDsKQEAgLTczLDkgKzczLDEzIEBAIEhUTUxUYWJsZUVsZW1lbnRJbXBs
Ojp+SFRNTFRhYmxlRWxlbWVudEkKIHsKIH0KIAotTm9kZUltcGw6OklkIEhUTUxUYWJsZUVsZW1l
bnRJbXBsOjppZCgpIGNvbnN0Citib29sIEhUTUxUYWJsZUVsZW1lbnRJbXBsOjpjaGVja0RURChj
b25zdCBOb2RlSW1wbCogbmV3Q2hpbGQpCiB7Ci0gICAgcmV0dXJuIElEX1RBQkxFOworICAgIHJl
dHVybiBuZXdDaGlsZC0+aXNUZXh0Tm9kZSgpIHx8IG5ld0NoaWxkLT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6Y2FwdGlvbigpKSB8fAorICAgICAgICAgICBuZXdDaGlsZC0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OmNvbCgpKSB8fCBuZXdDaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmNvbGdyb3Vw
KCkpIHx8CisgICAgICAgICAgIG5ld0NoaWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGhlYWQo
KSkgfHwgbmV3Q2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0Zm9vdCgpKSB8fAorICAgICAg
ICAgICBuZXdDaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRib2R5KCkpIHx8IG5ld0NoaWxk
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Zm9ybSgpKSB8fAorICAgICAgICAgICBuZXdDaGlsZC0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OnNjcmlwdCgpKTsKIH0KIAogTm9kZUltcGwqIEhUTUxUYWJs
ZUVsZW1lbnRJbXBsOjpzZXRDYXB0aW9uKCBIVE1MVGFibGVDYXB0aW9uRWxlbWVudEltcGwgKmMg
KQpAQCAtMTQ2LDcgKzE1MCw3IEBAIEhUTUxFbGVtZW50SW1wbCAqSFRNTFRhYmxlRWxlbWVudElt
cGw6OmMKICAgICBpZighaGVhZCkKICAgICB7CiAgICAgICAgIGludCBleGNlcHRpb25jb2RlID0g
MDsKLSAgICAgICAgaGVhZCA9IG5ldyBIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGwoZG9jUHRy
KCksIElEX1RIRUFELCB0cnVlIC8qIGltcGxpY2l0ICovKTsKKyAgICAgICAgaGVhZCA9IG5ldyBI
VE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGwoSFRNTE5hbWVzOjp0aGVhZCgpLCBkb2NQdHIoKSwg
dHJ1ZSAvKiBpbXBsaWNpdCAqLyk7CiAgICAgICAgIGlmKGZvb3QpCiAgICAgICAgICAgICBpbnNl
cnRCZWZvcmUoIGhlYWQsIGZvb3QsIGV4Y2VwdGlvbmNvZGUgKTsKICAgICAgICAgZWxzZSBpZihm
aXJzdEJvZHkpCkBAIC0xNzEsNyArMTc1LDcgQEAgSFRNTEVsZW1lbnRJbXBsICpIVE1MVGFibGVF
bGVtZW50SW1wbDo6YwogICAgIGlmKCFmb290KQogICAgIHsKICAgICAgICAgaW50IGV4Y2VwdGlv
bmNvZGUgPSAwOwotICAgICAgICBmb290ID0gbmV3IEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1w
bChkb2NQdHIoKSwgSURfVEZPT1QsIHRydWUgLyppbXBsaWNpdCAqLyk7CisgICAgICAgIGZvb3Qg
PSBuZXcgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsKEhUTUxOYW1lczo6dGZvb3QoKSwgZG9j
UHRyKCksIHRydWUgLyppbXBsaWNpdCAqLyk7CiAgICAgICAgIGlmKGZpcnN0Qm9keSkKICAgICAg
ICAgICAgIGluc2VydEJlZm9yZSggZm9vdCwgZmlyc3RCb2R5LCBleGNlcHRpb25jb2RlICk7CiAg
ICAgICAgIGVsc2UKQEAgLTIxNiw3ICsyMjAsNyBAQCBIVE1MRWxlbWVudEltcGwgKkhUTUxUYWJs
ZUVsZW1lbnRJbXBsOjppCiAgICAgLy8gKG5vdGU6IHRoaXMgaXMgZGlmZmVyZW50IGZyb20gImlm
IHRoZSB0YWJsZSBoYXMgbm8gc2VjdGlvbnMiLCBzaW5jZSB3ZSBjYW4gaGF2ZQogICAgIC8vIDxU
QUJMRT48VFI+KQogICAgIGlmKCFmaXJzdEJvZHkgJiYgIWhlYWQgJiYgIWZvb3QgJiYgIWhhc0No
aWxkTm9kZXMoKSkKLSAgICAgICAgc2V0VEJvZHkoIG5ldyBIVE1MVGFibGVTZWN0aW9uRWxlbWVu
dEltcGwoZG9jUHRyKCksIElEX1RCT0RZLCB0cnVlIC8qIGltcGxpY2l0ICovKSApOworICAgICAg
ICBzZXRUQm9keSggbmV3IEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbChIVE1MTmFtZXM6OnRi
b2R5KCksIGRvY1B0cigpLCB0cnVlIC8qIGltcGxpY2l0ICovKSApOwogCiAgICAgLy9rZERlYnVn
KDYwMzApIDw8IGtfZnVuY2luZm8gPDwgaW5kZXggPDwgZW5kbDsKICAgICAvLyBJRSB0cmVhdHMg
aW5kZXg9LTEgYXMgZGVmYXVsdCB2YWx1ZSBtZWFuaW5nICdhcHBlbmQgYWZ0ZXIgbGFzdCcKQEAg
LTIzMCw3ICsyMzQsOCBAQCBIVE1MRWxlbWVudEltcGwgKkhUTUxUYWJsZUVsZW1lbnRJbXBsOjpp
CiAgICAgewogCS8vIHRoZXJlIGNvdWxkIGJlIDIgdGZvb3QgZWxlbWVudHMgaW4gdGhlIHRhYmxl
LiBPbmx5IHRoZSBmaXJzdCBvbmUgaXMgdGhlICJmb290IiwgdGhhdCdzIHdoeSB3ZSBoYXZlIHRo
ZSBtb3JlCiAJLy8gY29tcGxpY2F0ZWQgaWYgc3RhdGVtZW50IGJlbG93LgotICAgICAgICBpZiAo
IG5vZGUgIT0gZm9vdCAmJiAobm9kZS0+aWQoKSA9PSBJRF9USEVBRCB8fCBub2RlLT5pZCgpID09
IElEX1RGT09UIHx8IG5vZGUtPmlkKCkgPT0gSURfVEJPRFkpICkKKyAgICAgICAgaWYgKG5vZGUg
IT0gZm9vdCAmJiAobm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRoZWFkKCkpIHx8IG5vZGUt
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0Zm9vdCgpKSB8fCAKKyAgICAgICAgICAgIG5vZGUtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjp0Ym9keSgpKSkpCiAgICAgICAgIHsKICAgICAgICAgICAgIHNl
Y3Rpb24gPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGwgKj4obm9kZSk7
CiAgICAgICAgICAgICBsYXN0U2VjdGlvbiA9IHNlY3Rpb247CkBAIC0yNzYsOCArMjgxLDggQEAg
dm9pZCBIVE1MVGFibGVFbGVtZW50SW1wbDo6ZGVsZXRlUm93KCBsbwogICAgIGJvb2wgZm91bmQg
PSBmYWxzZTsKICAgICBmb3IgKCA7IG5vZGUgOyBub2RlID0gbm9kZS0+bmV4dFNpYmxpbmcoKSAp
CiAgICAgewotICAgICAgICBpZiAoIG5vZGUgIT0gZm9vdCAmJiAobm9kZS0+aWQoKSA9PSBJRF9U
SEVBRCB8fCBub2RlLT5pZCgpID09IElEX1RGT09UIHx8IG5vZGUtPmlkKCkgPT0gSURfVEJPRFkp
ICkKLSAgICAgICAgeworICAgICAgICBpZiAobm9kZSAhPSBmb290ICYmIChub2RlLT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6dGhlYWQoKSkgfHwgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRm
b290KCkpIHx8IAorICAgICAgICAgICAgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRib2R5
KCkpKSkgewogICAgICAgICAgICAgc2VjdGlvbiA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZVNlY3Rp
b25FbGVtZW50SW1wbCAqPihub2RlKTsKICAgICAgICAgICAgIGxhc3RTZWN0aW9uID0gc2VjdGlv
bjsKICAgICAgICAgICAgIGludCByb3dzID0gc2VjdGlvbi0+bnVtUm93cygpOwpAQCAtMzA5LDcg
KzMxNCw3IEBAIE5vZGVJbXBsICpIVE1MVGFibGVFbGVtZW50SW1wbDo6YWRkQ2hpbGQKICAgICBr
ZERlYnVnKCA2MDMwICkgPDwgbm9kZU5hbWUoKS5zdHJpbmcoKSA8PCAiKFRhYmxlKTo6YWRkQ2hp
bGQoICIgPDwgY2hpbGQtPm5vZGVOYW1lKCkuc3RyaW5nKCkgPDwgIiApIiA8PCBlbmRsOwogI2Vu
ZGlmCiAKLSAgICBpZiAoY2hpbGQtPmlkKCkgPT0gSURfRk9STSkgeworICAgIGlmIChjaGlsZC0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZvcm0oKSkpIHsKICAgICAgICAgLy8gRmlyc3QgYWRkIHRo
ZSBjaGlsZC4KICAgICAgICAgSFRNTEVsZW1lbnRJbXBsOjphZGRDaGlsZChjaGlsZCk7CiAgICAg
ICAgIC8vIE5vdyBzaW1wbHkgcmV0dXJuIG91cnNlbHZlcyBhcyB0aGUgbmV3bm9kZS4gIFRoaXMg
aGFzIHRoZSBlZmZlY3Qgb2YKQEAgLTMzNywyOCArMzQyLDE1IEBAIE5vZGVJbXBsICpIVE1MVGFi
bGVFbGVtZW50SW1wbDo6YWRkQ2hpbGQKIAogICAgIGludCBleGNlcHRpb25jb2RlID0gMDsKICAg
ICBOb2RlSW1wbCAqcmV0dmFsID0gYXBwZW5kQ2hpbGQoIGNoaWxkLCBleGNlcHRpb25jb2RlICk7
Ci0gICAgaWYgKCByZXR2YWwgKSB7Ci0Jc3dpdGNoKGNoaWxkLT5pZCgpKSB7Ci0JY2FzZSBJRF9D
QVBUSU9OOgotCSAgICBpZiAoICF0Q2FwdGlvbiApCi0JCXRDYXB0aW9uID0gc3RhdGljX2Nhc3Q8
SFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnRJbXBsICo+KGNoaWxkKTsKLQkgICAgYnJlYWs7Ci0JY2Fz
ZSBJRF9DT0w6Ci0JY2FzZSBJRF9DT0xHUk9VUDoKLQkgICAgYnJlYWs7Ci0JY2FzZSBJRF9USEVB
RDoKLQkgICAgaWYgKCAhaGVhZCApCi0JCWhlYWQgPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVTZWN0
aW9uRWxlbWVudEltcGwgKj4oY2hpbGQpOwotCSAgICBicmVhazsKLQljYXNlIElEX1RGT09UOgot
CSAgICBpZiAoICFmb290ICkKLQkJZm9vdCA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZVNlY3Rpb25F
bGVtZW50SW1wbCAqPihjaGlsZCk7Ci0JICAgIGJyZWFrOwotCWNhc2UgSURfVEJPRFk6Ci0JICAg
IGlmICggIWZpcnN0Qm9keSApCi0JCWZpcnN0Qm9keSA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZVNl
Y3Rpb25FbGVtZW50SW1wbCAqPihjaGlsZCk7Ci0JICAgIGJyZWFrOwotCX0KKyAgICBpZiAocmV0
dmFsKSB7CisgICAgICAgIGlmICghdENhcHRpb24gJiYgY2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjpjYXB0aW9uKCkpKQorICAgICAgICAgICAgdENhcHRpb24gPSBzdGF0aWNfY2FzdDxIVE1M
VGFibGVDYXB0aW9uRWxlbWVudEltcGwgKj4oY2hpbGQpOworICAgICAgICBlbHNlIGlmICghaGVh
ZCAmJiBjaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRoZWFkKCkpKQorICAgICAgICAgICAg
aGVhZCA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbCAqPihjaGlsZCk7
CisgICAgICAgIGVsc2UgaWYgKCFmb290ICYmIGNoaWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
dGZvb3QoKSkpCisgICAgICAgICAgICBmb290ID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlU2VjdGlv
bkVsZW1lbnRJbXBsICo+KGNoaWxkKTsKKwllbHNlIGlmICghZmlyc3RCb2R5ICYmIGNoaWxkLT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6dGJvZHkoKSkpCisJICAgIGZpcnN0Qm9keSA9IHN0YXRpY19j
YXN0PEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbCAqPihjaGlsZCk7CiAgICAgfQogICAgIHJl
dHVybiByZXR2YWw7CiB9CkBAIC04MDIsMTcgKzc5NCwxNiBAQCB2b2lkIEhUTUxUYWJsZVBhcnRF
bGVtZW50SW1wbDo6cGFyc2VNYXBwCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSFRNTFRhYmxl
U2VjdGlvbkVsZW1lbnRJbXBsOjpIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGwoRG9jdW1lbnRQ
dHIgKmRvYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVzaG9ydCB0YWdpZCwgYm9vbCBpbXBsaWNpdCkKLSAgICA6IEhUTUxUYWJsZVBh
cnRFbGVtZW50SW1wbChkb2MpCitIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGw6OkhUTUxUYWJs
ZVNlY3Rpb25FbGVtZW50SW1wbChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVu
dFB0ciAqZG9jLCBib29sIGltcGxpY2l0KQorICAgIDogSFRNTFRhYmxlUGFydEVsZW1lbnRJbXBs
KHRhZ05hbWUsIGRvYykKIHsKLSAgICBfaWQgPSB0YWdpZDsKICAgICBtX2ltcGxpY2l0ID0gaW1w
bGljaXQ7CiB9CiAKLU5vZGVJbXBsOjpJZCBIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGw6Omlk
KCkgY29uc3QKK2Jvb2wgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsOjpjaGVja0RURChjb25z
dCBOb2RlSW1wbCogbmV3Q2hpbGQpCiB7Ci0gICAgcmV0dXJuIF9pZDsKKyAgICByZXR1cm4gbmV3
Q2hpbGQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0cigpKSB8fCBuZXdDaGlsZC0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OmZvcm0oKSkgfHwKKyAgICAgICAgICAgbmV3Q2hpbGQtPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjpzY3JpcHQoKSk7CiB9CiAKIE5vZGVJbXBsICpIVE1MVGFibGVTZWN0aW9uRWxl
bWVudEltcGw6OmFkZENoaWxkKE5vZGVJbXBsICpjaGlsZCkKQEAgLTgyMSw3ICs4MTIsNyBAQCBO
b2RlSW1wbCAqSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsOjphCiAgICAga2REZWJ1ZyggNjAz
MCApIDw8IG5vZGVOYW1lKCkuc3RyaW5nKCkgPDwgIihUYm9keSk6OmFkZENoaWxkKCAiIDw8IGNo
aWxkLT5ub2RlTmFtZSgpLnN0cmluZygpIDw8ICIgKSIgPDwgZW5kbDsKICNlbmRpZgogCi0gICAg
aWYgKGNoaWxkLT5pZCgpID09IElEX0ZPUk0pIHsKKyAgICBpZiAoY2hpbGQtPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjpmb3JtKCkpKSB7CiAgICAgICAgIC8vIEZpcnN0IGFkZCB0aGUgY2hpbGQuCiAg
ICAgICAgIEhUTUxFbGVtZW50SW1wbDo6YWRkQ2hpbGQoY2hpbGQpOwogICAgICAgICAvLyBOb3cg
c2ltcGx5IHJldHVybiBvdXJzZWx2ZXMgYXMgdGhlIG5ld25vZGUuICBUaGlzIGhhcyB0aGUgZWZm
ZWN0IG9mCkBAIC04NzcsNyArODY4LDcgQEAgaW50IEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1w
bDo6bnVtUm93cwogICAgIGludCByb3dzID0gMDsKICAgICBjb25zdCBOb2RlSW1wbCAqbiA9IGZp
cnN0Q2hpbGQoKTsKICAgICB3aGlsZSAobikgewotICAgICAgICBpZiAobi0+aWQoKSA9PSBJRF9U
UikKKyAgICAgICAgaWYgKG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0cigpKSkKICAgICAgICAg
ICAgIHJvd3MrKzsKICAgICAgICAgbiA9IG4tPm5leHRTaWJsaW5nKCk7CiAgICAgfQpAQCAtOTMy
LDkgKzkyMywxMCBAQCBTaGFyZWRQdHI8SFRNTENvbGxlY3Rpb25JbXBsPiBIVE1MVGFibGVTCiAK
IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotTm9kZUltcGw6OklkIEhUTUxUYWJsZVJvd0VsZW1lbnRJ
bXBsOjppZCgpIGNvbnN0Citib29sIEhUTUxUYWJsZVJvd0VsZW1lbnRJbXBsOjpjaGVja0RURChj
b25zdCBOb2RlSW1wbCogbmV3Q2hpbGQpCiB7Ci0gICAgcmV0dXJuIElEX1RSOworICAgIHJldHVy
biBuZXdDaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRkKCkpIHx8IG5ld0NoaWxkLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6dGgoKSkgfHwKKyAgICAgICAgICAgbmV3Q2hpbGQtPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjpmb3JtKCkpIHx8IG5ld0NoaWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
c2NyaXB0KCkpOwogfQogCiBOb2RlSW1wbCAqSFRNTFRhYmxlUm93RWxlbWVudEltcGw6OmFkZENo
aWxkKE5vZGVJbXBsICpjaGlsZCkKQEAgLTk0Myw3ICs5MzUsNyBAQCBOb2RlSW1wbCAqSFRNTFRh
YmxlUm93RWxlbWVudEltcGw6OmFkZENoCiAgICAga2REZWJ1ZyggNjAzMCApIDw8IG5vZGVOYW1l
KCkuc3RyaW5nKCkgPDwgIihUcm93KTo6YWRkQ2hpbGQoICIgPDwgY2hpbGQtPm5vZGVOYW1lKCku
c3RyaW5nKCkgPDwgIiApIiA8PCBlbmRsOwogI2VuZGlmCiAKLSAgICBpZiAoY2hpbGQtPmlkKCkg
PT0gSURfRk9STSkgeworICAgIGlmIChjaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZvcm0o
KSkpIHsKICAgICAgICAgLy8gRmlyc3QgYWRkIHRoZSBjaGlsZC4KICAgICAgICAgSFRNTEVsZW1l
bnRJbXBsOjphZGRDaGlsZChjaGlsZCk7CiAgICAgICAgIC8vIE5vdyBzaW1wbHkgcmV0dXJuIG91
cnNlbHZlcyBhcyB0aGUgbmV3bm9kZS4gIFRoaXMgaGFzIHRoZSBlZmZlY3Qgb2YKQEAgLTk1OCwx
NiArOTUwLDE2IEBAIGxvbmcgSFRNTFRhYmxlUm93RWxlbWVudEltcGw6OnJvd0luZGV4KCkKICAg
ICBpbnQgckluZGV4ID0gMDsKIAogICAgIE5vZGVJbXBsICp0YWJsZSA9IHBhcmVudE5vZGUoKTsK
LSAgICBpZiAoICF0YWJsZSApCisgICAgaWYgKCF0YWJsZSkKIAlyZXR1cm4gLTE7CiAgICAgdGFi
bGUgPSB0YWJsZS0+cGFyZW50Tm9kZSgpOwotICAgIGlmICggIXRhYmxlIHx8IHRhYmxlLT5pZCgp
ICE9IElEX1RBQkxFICkKKyAgICBpZiAoIXRhYmxlIHx8ICF0YWJsZS0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OnRhYmxlKCkpKQogCXJldHVybiAtMTsKIAogICAgIEhUTUxUYWJsZVNlY3Rpb25FbGVt
ZW50SW1wbCAqZm9vdCA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZUVsZW1lbnRJbXBsICo+KHRhYmxl
KS0+dEZvb3QoKTsKICAgICBOb2RlSW1wbCAqbm9kZSA9IHRhYmxlLT5maXJzdENoaWxkKCk7Ci0g
ICAgd2hpbGUgKCBub2RlICkgewotICAgICAgICBpZiAoIG5vZGUgIT0gZm9vdCAmJiAobm9kZS0+
aWQoKSA9PSBJRF9USEVBRCB8fCBub2RlLT5pZCgpID09IElEX1RGT09UIHx8IG5vZGUtPmlkKCkg
PT0gSURfVEJPRFkpICkgeworICAgIHdoaWxlIChub2RlKSB7CisgICAgICAgIGlmIChub2RlICE9
IGZvb3QgJiYgKG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0aGVhZCgpKSB8fCBub2RlLT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6dGZvb3QoKSkgfHwgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OnRib2R5KCkpKSkgewogCSAgICBIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGwqIHNlY3Rp
b24gPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGwgKj4obm9kZSk7CiAJ
ICAgIGNvbnN0IE5vZGVJbXBsICpyb3cgPSBzZWN0aW9uLT5maXJzdENoaWxkKCk7CiAJICAgIHdo
aWxlICggcm93ICkgewpAQCAtOTk2LDcgKzk4OCw3IEBAIGxvbmcgSFRNTFRhYmxlUm93RWxlbWVu
dEltcGw6OnNlY3Rpb25Sb3cKICAgICBjb25zdCBOb2RlSW1wbCAqbiA9IHRoaXM7CiAgICAgZG8g
ewogICAgICAgICBuID0gbi0+cHJldmlvdXNTaWJsaW5nKCk7Ci0gICAgICAgIGlmIChuICYmIG4t
PmlzRWxlbWVudE5vZGUoKSAmJiBuLT5pZCgpID09IElEX1RSKQorICAgICAgICBpZiAobiAmJiBu
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dHIoKSkpCiAgICAgICAgICAgICBySW5kZXgrKzsKICAg
ICB9CiAgICAgd2hpbGUgKG4pOwpAQCAtMTAxMyw3ICsxMDA1LDcgQEAgSFRNTEVsZW1lbnRJbXBs
ICpIVE1MVGFibGVSb3dFbGVtZW50SW1wbAogICAgICAgICBleGNlcHRpb25jb2RlID0gRE9NRXhj
ZXB0aW9uOjpJTkRFWF9TSVpFX0VSUjsgLy8gcGVyIHRoZSBET00KICAgICBlbHNlCiAgICAgewot
ICAgICAgICBjID0gbmV3IEhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbChkb2NQdHIoKSwgSURfVEQp
OworICAgICAgICBjID0gbmV3IEhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbChIVE1MTmFtZXM6OnRk
KCksIGRvY1B0cigpKTsKICAgICAgICAgaWYobnVtQ2VsbHMgPT0gaW5kZXggfHwgaW5kZXggPT0g
LTEpCiAgICAgICAgICAgICBhcHBlbmRDaGlsZChjLCBleGNlcHRpb25jb2RlKTsKICAgICAgICAg
ZWxzZSB7CkBAIC0xMTAzLDE1ICsxMDk1LDE0IEBAIHZvaWQgSFRNTFRhYmxlUm93RWxlbWVudElt
cGw6OnNldFZBbGlnbigKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1IVE1MVGFibGVDZWxsRWxl
bWVudEltcGw6OkhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCBpbnQg
dGFnKQotICA6IEhUTUxUYWJsZVBhcnRFbGVtZW50SW1wbChkb2MpCitIVE1MVGFibGVDZWxsRWxl
bWVudEltcGw6OkhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbChjb25zdCBRdWFsaWZpZWROYW1lJiB0
YWdOYW1lLCBEb2N1bWVudFB0ciAqZG9jKQorICA6IEhUTUxUYWJsZVBhcnRFbGVtZW50SW1wbCh0
YWdOYW1lLCBkb2MpCiB7Ci0gIF9jb2wgPSAtMTsKLSAgX3JvdyA9IC0xOwotICBjU3BhbiA9IHJT
cGFuID0gMTsKLSAgX2lkID0gdGFnOwotICByb3dIZWlnaHQgPSAwOwotICBtX3NvbGlkID0gZmFs
c2U7CisgICAgX2NvbCA9IC0xOworICAgIF9yb3cgPSAtMTsKKyAgICBjU3BhbiA9IHJTcGFuID0g
MTsKKyAgICByb3dIZWlnaHQgPSAwOworICAgIG1fc29saWQgPSBmYWxzZTsKIH0KIAogSFRNTFRh
YmxlQ2VsbEVsZW1lbnRJbXBsOjp+SFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsKCkKQEAgLTExMjIs
NyArMTExMyw3IEBAIGxvbmcgSFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsOjpjZWxsSW5kZXgKIHsK
ICAgICBpbnQgaW5kZXggPSAwOwogICAgIGZvciAoY29uc3QgTm9kZUltcGwgKiBub2RlID0gcHJl
dmlvdXNTaWJsaW5nKCk7IG5vZGU7IG5vZGUgPSBub2RlLT5wcmV2aW91c1NpYmxpbmcoKSkgewot
ICAgICAgICBpZiAobm9kZS0+aWQoKSA9PSBJRF9URCB8fCBub2RlLT5pZCgpID09IElEX1RIKQor
ICAgICAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRkKCkpIHx8IG5vZGUtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjp0aCgpKSkKICAgICAgICAgICAgIGluZGV4Kys7CiAgICAgfQog
ICAgIApAQCAtMTE4OSw5ICsxMTgwLDkgQEAgdm9pZCBIVE1MVGFibGVDZWxsRWxlbWVudEltcGw6
OnBhcnNlTWFwcAogLy8gdXNlZCBieSB0YWJsZSBjZWxscyB0byBzaGFyZSBzdHlsZSBkZWNscyBj
cmVhdGVkIGJ5IHRoZSBlbmNsb3NpbmcgdGFibGUuCiBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bkltcGwqIEhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbDo6YWRkaXRpb25hbEF0dHJpYnV0ZVN0eWxl
RGVjbCgpCiB7Ci0gICAgSFRNTEVsZW1lbnRJbXBsKiBwID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1l
bnRJbXBsKj4ocGFyZW50Tm9kZSgpKTsKLSAgICB3aGlsZShwICYmIHAtPmlkKCkgIT0gSURfVEFC
TEUpCi0gICAgICAgIHAgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwqPihwLT5wYXJlbnRO
b2RlKCkpOworICAgIE5vZGVJbXBsKiBwID0gcGFyZW50Tm9kZSgpOworICAgIHdoaWxlIChwICYm
ICFwLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGFibGUoKSkpCisgICAgICAgIHAgPSBwLT5wYXJl
bnROb2RlKCk7CiAKICAgICBpZiAocCkgewogICAgICAgICBIVE1MVGFibGVFbGVtZW50SW1wbCog
dGFibGUgPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVFbGVtZW50SW1wbCo+KHApOwpAQCAtMTIwMSwx
NSArMTE5Miw2IEBAIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uSW1wbCogSFRNTFRhYmwKICAg
ICByZXR1cm4gMDsKIH0KIAotdm9pZCBIVE1MVGFibGVDZWxsRWxlbWVudEltcGw6OmF0dGFjaCgp
Ci17Ci0gICAgSFRNTEVsZW1lbnRJbXBsKiBwID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBs
Kj4ocGFyZW50Tm9kZSgpKTsKLSAgICB3aGlsZShwICYmIHAtPmlkKCkgIT0gSURfVEFCTEUpCi0g
ICAgICAgIHAgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwqPihwLT5wYXJlbnROb2RlKCkp
OwotCi0gICAgSFRNTFRhYmxlUGFydEVsZW1lbnRJbXBsOjphdHRhY2goKTsKLX0KLQogYm9vbCBI
VE1MVGFibGVDZWxsRWxlbWVudEltcGw6OmlzVVJMQXR0cmlidXRlKEF0dHJpYnV0ZUltcGwgKmF0
dHIpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGF0dHItPmlkKCkgPT0gQVRUUl9CQUNLR1JPVU5EOwpA
QCAtMTM0NywxNiArMTMyOSwxMCBAQCB2b2lkIEhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbDo6c2V0
V2lkdGgoCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSFRNTFRhYmxlQ29sRWxlbWVudEltcGw6
OkhUTUxUYWJsZUNvbEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIHVzaG9ydCBpKQotICAg
IDogSFRNTFRhYmxlUGFydEVsZW1lbnRJbXBsKGRvYykKK0hUTUxUYWJsZUNvbEVsZW1lbnRJbXBs
OjpIVE1MVGFibGVDb2xFbGVtZW50SW1wbChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBE
b2N1bWVudFB0ciAqZG9jKQorICAgIDogSFRNTFRhYmxlUGFydEVsZW1lbnRJbXBsKHRhZ05hbWUs
IGRvYykKIHsKLSAgICBfaWQgPSBpOwotICAgIF9zcGFuID0gKF9pZCA9PSBJRF9DT0xHUk9VUCA/
IDAgOiAxKTsKLX0KLQotTm9kZUltcGw6OklkIEhUTUxUYWJsZUNvbEVsZW1lbnRJbXBsOjppZCgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIF9pZDsKKyAgICBfc3BhbiA9ICh0YWdOYW1lLm1hdGNoZXMo
SFRNTE5hbWVzOjpjb2xncm91cCgpKSA/IDAgOiAxKTsKIH0KIAogYm9vbCBIVE1MVGFibGVDb2xF
bGVtZW50SW1wbDo6bWFwVG9FbnRyeShOb2RlSW1wbDo6SWQgYXR0ciwgTWFwcGVkQXR0cmlidXRl
RW50cnkmIHJlc3VsdCkgY29uc3QKQEAgLTE0NDcsMTEgKzE0MjMsNiBAQCB2b2lkIEhUTUxUYWJs
ZUNvbEVsZW1lbnRJbXBsOjpzZXRXaWR0aChjCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotTm9k
ZUltcGw6OklkIEhUTUxUYWJsZUNhcHRpb25FbGVtZW50SW1wbDo6aWQoKSBjb25zdAotewotICAg
IHJldHVybiBJRF9DQVBUSU9OOwotfQotCiBib29sIEhUTUxUYWJsZUNhcHRpb25FbGVtZW50SW1w
bDo6bWFwVG9FbnRyeShOb2RlSW1wbDo6SWQgYXR0ciwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJl
c3VsdCkgY29uc3QKIHsKICAgICBpZiAoYXR0ciA9PSBBVFRSX0FMSUdOKSB7CkluZGV4OiBraHRt
bC9odG1sL2h0bWxfdGFibGVpbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dl
YkNvcmUva2h0bWwvaHRtbC9odG1sX3RhYmxlaW1wbC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjIxCmRpZmYgLXUgLXAgLXIxLjIxIGtodG1sL2h0bWwvaHRtbF90YWJsZWltcGwuaAotLS0ga2h0
bWwvaHRtbC9odG1sX3RhYmxlaW1wbC5oCTE3IEp1biAyMDA1IDIxOjU1OjM5IC0wMDAwCTEuMjEK
KysrIGtodG1sL2h0bWwvaHRtbF90YWJsZWltcGwuaAk5IEp1bCAyMDA1IDAyOjQzOjA3IC0wMDAw
CkBAIC02Miw3ICs2Miw5IEBAIHB1YmxpYzoKICAgICBIVE1MVGFibGVFbGVtZW50SW1wbChEb2N1
bWVudFB0ciAqZG9jKTsKICAgICB+SFRNTFRhYmxlRWxlbWVudEltcGwoKTsKIAotICAgIHZpcnR1
YWwgSWQgaWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWly
ZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQorICAgIHZpcnR1YWwg
aW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gOTsgfQorICAgIHZpcnR1YWwgYm9vbCBj
aGVja0RURChjb25zdCBOb2RlSW1wbCogbmV3Q2hpbGQpOwogCiAgICAgSFRNTFRhYmxlQ2FwdGlv
bkVsZW1lbnRJbXBsICpjYXB0aW9uKCkgY29uc3QgeyByZXR1cm4gdENhcHRpb247IH0KICAgICBO
b2RlSW1wbCAqc2V0Q2FwdGlvbiggSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnRJbXBsICogKTsKQEAg
LTE0Nyw4ICsxNDksOCBAQCBjbGFzcyBIVE1MVGFibGVQYXJ0RWxlbWVudEltcGwgOiBwdWJsaWMg
CiAKIHsKIHB1YmxpYzoKLSAgICBIVE1MVGFibGVQYXJ0RWxlbWVudEltcGwoRG9jdW1lbnRQdHIg
KmRvYykKLSAgICAgICAgOiBIVE1MRWxlbWVudEltcGwoZG9jKQorICAgIEhUTUxUYWJsZVBhcnRF
bGVtZW50SW1wbChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudFB0ciAqZG9j
KQorICAgICAgICA6IEhUTUxFbGVtZW50SW1wbCh0YWdOYW1lLCBkb2MpCiAgICAgICAgIHsgfQog
CiAgICAgdmlydHVhbCBib29sIG1hcFRvRW50cnkoTm9kZUltcGw6OklkIGF0dHIsIE1hcHBlZEF0
dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0OwpAQCAtMTYwLDkgKzE2MiwxMSBAQCBwdWJsaWM6
CiBjbGFzcyBIVE1MVGFibGVTZWN0aW9uRWxlbWVudEltcGwgOiBwdWJsaWMgSFRNTFRhYmxlUGFy
dEVsZW1lbnRJbXBsCiB7CiBwdWJsaWM6Ci0gICAgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBs
KERvY3VtZW50UHRyICpkb2MsIHVzaG9ydCB0YWdpZCwgYm9vbCBpbXBsaWNpdCk7CisgICAgSFRN
TFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERv
Y3VtZW50UHRyICpkb2MsIGJvb2wgaW1wbGljaXQpOwogCi0gICAgdmlydHVhbCBJZCBpZCgpIGNv
bnN0OworICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0
IHsgcmV0dXJuIFRhZ1N0YXR1c09wdGlvbmFsOyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3Jp
dHkoKSBjb25zdCB7IHJldHVybiA4OyB9CisgICAgdmlydHVhbCBib29sIGNoZWNrRFREKGNvbnN0
IE5vZGVJbXBsKiBuZXdDaGlsZCk7CiAKICAgICB2aXJ0dWFsIE5vZGVJbXBsICphZGRDaGlsZChO
b2RlSW1wbCAqY2hpbGQpOwogICAgIApAQCAtMTg0LDkgKzE4OCw2IEBAIHB1YmxpYzoKICAgICB2
b2lkIHNldFZBbGlnbiggY29uc3QgRE9NU3RyaW5nICYgKTsKIAogICAgIGtodG1sOjpTaGFyZWRQ
dHI8SFRNTENvbGxlY3Rpb25JbXBsPiByb3dzKCk7Ci0KLXByb3RlY3RlZDoKLSAgICB1c2hvcnQg
X2lkOwogfTsKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTk1LDEwICsxOTYsMTIgQEAgY2xh
c3MgSFRNTFRhYmxlUm93RWxlbWVudEltcGwgOiBwdWJsaWMgSAogewogcHVibGljOgogICAgIEhU
TUxUYWJsZVJvd0VsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MpCi0gICAgICAgIDogSFRNTFRh
YmxlUGFydEVsZW1lbnRJbXBsKGRvYykge30KLQotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsK
KyAgICAgICAgOiBIVE1MVGFibGVQYXJ0RWxlbWVudEltcGwoSFRNTE5hbWVzOjp0cigpLCBkb2Mp
IHt9CiAKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25z
dCB7IHJldHVybiBUYWdTdGF0dXNPcHRpb25hbDsgfQorICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9y
aXR5KCkgY29uc3QgeyByZXR1cm4gNzsgfQorICAgIHZpcnR1YWwgYm9vbCBjaGVja0RURChjb25z
dCBOb2RlSW1wbCogbmV3Q2hpbGQpOworCQogICAgIHZpcnR1YWwgTm9kZUltcGwgKmFkZENoaWxk
KE5vZGVJbXBsICpjaGlsZCk7CiAgICAgCiAgICAgbG9uZyByb3dJbmRleCgpIGNvbnN0OwpAQCAt
MjM4LDEwICsyNDEsMTIgQEAgcHJvdGVjdGVkOgogY2xhc3MgSFRNTFRhYmxlQ2VsbEVsZW1lbnRJ
bXBsIDogcHVibGljIEhUTUxUYWJsZVBhcnRFbGVtZW50SW1wbAogewogcHVibGljOgotICAgIEhU
TUxUYWJsZUNlbGxFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCBpbnQgdGFnSWQpOworICAg
IEhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBE
b2N1bWVudFB0ciAqZG9jKTsKICAgICB+SFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsKCk7CiAKLSAg
ICAvLyAjIyMgRklYIHRoZXNlIHR3by4uLgorICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRU
YWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c09wdGlvbmFsOyB9CisgICAg
dmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiA2OyB9CisKICAgICBsb25n
IGNlbGxJbmRleCgpIGNvbnN0OwogCiAgICAgaW50IGNvbCgpIGNvbnN0IHsgcmV0dXJuIF9jb2w7
IH0KQEAgLTI1MSwxNCArMjU2LDEwIEBAIHB1YmxpYzoKIAogICAgIGludCBjb2xTcGFuKCkgY29u
c3QgeyByZXR1cm4gY1NwYW47IH0KICAgICBpbnQgcm93U3BhbigpIGNvbnN0IHsgcmV0dXJuIHJT
cGFuOyB9Ci0gICAgCi0gICAgdmlydHVhbCBJZCBpZCgpIGNvbnN0IHsgcmV0dXJuIF9pZDsgfQot
ICAgIAorCiAgICAgdmlydHVhbCBib29sIG1hcFRvRW50cnkoTm9kZUltcGw6OklkIGF0dHIsIE1h
cHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICphdHRyKTsKIAotICAgIHZpcnR1
YWwgdm9pZCBhdHRhY2goKTsKLQogICAgIC8vIHVzZWQgYnkgdGFibGUgY2VsbHMgdG8gc2hhcmUg
c3R5bGUgZGVjbHMgY3JlYXRlZCBieSB0aGUgZW5jbG9zaW5nIHRhYmxlLgogICAgIHZpcnR1YWwg
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb25JbXBsKiBhZGRpdGlvbmFsQXR0cmlidXRlU3R5bGVE
ZWNsKCk7CiAgICAgCkBAIC0zMTEsNyArMzEyLDYgQEAgcHJvdGVjdGVkOgogICAgIGludCBfY29s
OwogICAgIGludCByU3BhbjsKICAgICBpbnQgY1NwYW47Ci0gICAgaW50IF9pZDsKICAgICBpbnQg
cm93SGVpZ2h0OwogICAgIGJvb2wgbV9zb2xpZCAgICAgICAgOiAxOwogfTsKQEAgLTMyMSwxMCAr
MzIxLDExIEBAIHByb3RlY3RlZDoKIGNsYXNzIEhUTUxUYWJsZUNvbEVsZW1lbnRJbXBsIDogcHVi
bGljIEhUTUxUYWJsZVBhcnRFbGVtZW50SW1wbAogewogcHVibGljOgotICAgIEhUTUxUYWJsZUNv
bEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIHVzaG9ydCBpKTsKLQotICAgIHZpcnR1YWwg
SWQgaWQoKSBjb25zdDsKKyAgICBIVE1MVGFibGVDb2xFbGVtZW50SW1wbChjb25zdCBRdWFsaWZp
ZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudFB0ciAqZG9jKTsKIAorICAgIHZpcnR1YWwgSFRNTFRh
Z1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIGhhc0xvY2FsTmFtZShI
VE1MTmFtZXM6OmNvbCgpKSA/IFRhZ1N0YXR1c0ZvcmJpZGRlbiA6IFRhZ1N0YXR1c09wdGlvbmFs
OyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiBoYXNMb2Nh
bE5hbWUoSFRNTE5hbWVzOjpjb2woKSkgPyAwIDogMTsgfQorICAgIHZpcnR1YWwgYm9vbCBjaGVj
a0RURChjb25zdCBOb2RlSW1wbCogbmV3Q2hpbGQpIHsgcmV0dXJuIGhhc0xvY2FsTmFtZShIVE1M
TmFtZXM6OmNvbGdyb3VwKCkpICYmIG5ld0NoaWxkLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Y29s
KCkpOyB9CiAgICAgdm9pZCBzZXRUYWJsZShIVE1MVGFibGVFbGVtZW50SW1wbCAqdCkgeyB0YWJs
ZSA9IHQ7IH0KIAogICAgIC8vIG92ZXJyaWRlcwpAQCAtMzUxLDEwICszNTIsNiBAQCBwdWJsaWM6
CiAgICAgdm9pZCBzZXRXaWR0aCggY29uc3QgRE9NU3RyaW5nICYgKTsKIAogcHJvdGVjdGVkOgot
ICAgIC8vIGNvdWxkIGJlIElEX0NPTCBvciBJRF9DT0xHUk9VUCAuLi4gVGhlIERPTSBpcyBub3Qg
cXVpdGUgY2xlYXIgb24KLSAgICAvLyB0aGlzLCBidXQgc2luY2UgYm90aCBlbGVtZW50cyB3b3Jr
IHF1aXRlIHNpbWlsYXIsIHdlIHVzZSBvbmUKLSAgICAvLyBET01FbGVtZW50IGZvciB0aGVtLi4u
Ci0gICAgdXNob3J0IF9pZDsKICAgICBpbnQgX3NwYW47CiAgICAgSFRNTFRhYmxlRWxlbWVudElt
cGwgKnRhYmxlOwogfTsKQEAgLTM2NSw5ICszNjIsMTAgQEAgY2xhc3MgSFRNTFRhYmxlQ2FwdGlv
bkVsZW1lbnRJbXBsIDogcHVibAogewogcHVibGljOgogICAgIEhUTUxUYWJsZUNhcHRpb25FbGVt
ZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAgICAgICA6IEhUTUxUYWJsZVBhcnRFbGVtZW50
SW1wbChkb2MpIHt9CisgICAgICAgIDogSFRNTFRhYmxlUGFydEVsZW1lbnRJbXBsKEhUTUxOYW1l
czo6Y2FwdGlvbigpLCBkb2MpIHt9CiAKLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3Q7CisgICAg
dmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4g
VGFnU3RhdHVzUmVxdWlyZWQ7IH0KKyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0
IHsgcmV0dXJuIDU7IH0KICAgICAKICAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShOb2RlSW1w
bDo6SWQgYXR0ciwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3Q7CiAgICAgdmly
dHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIp
OwpJbmRleDoga2h0bWwvaHRtbC9odG1sZmFjdG9yeS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
a2h0bWwvaHRtbC9odG1sZmFjdG9yeS5jcHAKZGlmZiAtTiBraHRtbC9odG1sL2h0bWxmYWN0b3J5
LmNwcAotLS0gL2Rldi9udWxsCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIGtodG1sL2h0
bWwvaHRtbGZhY3RvcnkuY3BwCTkgSnVsIDIwMDUgMDI6NDM6MDcgLTAwMDAKQEAgLTAsMCArMSw0
MjQgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgSFRNTCBET00gaW1wbGVtZW50
YXRpb24gZm9yIEtERS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIs
IEluYy4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUg
UGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisg
Ki8KKworI2luY2x1ZGUgImh0bWxmYWN0b3J5LmgiCisjaW5jbHVkZSAiZG9tX2RvY2ltcGwuaCIK
KworI2luY2x1ZGUgImh0bWwvaHRtbF9iYXNlaW1wbC5oIgorI2luY2x1ZGUgImh0bWwvaHRtbF9i
bG9ja2ltcGwuaCIKKyNpbmNsdWRlICJodG1sL2h0bWxfY2FudmFzaW1wbC5oIgorI2luY2x1ZGUg
Imh0bWwvaHRtbF9kb2N1bWVudGltcGwuaCIKKyNpbmNsdWRlICJodG1sL2h0bWxfZm9ybWltcGwu
aCIKKyNpbmNsdWRlICJodG1sL2h0bWxfaGVhZGltcGwuaCIKKyNpbmNsdWRlICJodG1sL2h0bWxf
aW1hZ2VpbXBsLmgiCisjaW5jbHVkZSAiaHRtbC9odG1sX2xpc3RpbXBsLmgiCisjaW5jbHVkZSAi
aHRtbC9odG1sX21pc2NpbXBsLmgiCisjaW5jbHVkZSAiaHRtbC9odG1sX3RhYmxlaW1wbC5oIgor
I2luY2x1ZGUgImh0bWwvaHRtbF9vYmplY3RpbXBsLmgiCisKKyNpbmNsdWRlICJtaXNjL3BvaW50
ZXJoYXNoLmgiCisKK3VzaW5nIGtodG1sOjpQb2ludGVySGFzaDsKK3VzaW5nIGtodG1sOjpIYXNo
TWFwOworCituYW1lc3BhY2UgRE9NCit7CisKK3R5cGVkZWYgSFRNTEVsZW1lbnRJbXBsKiAoKkNv
bnN0cnVjdG9yRnVuYykoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lLCBEb2N1bWVudFB0ciog
ZG9jUHRyLCBIVE1MRm9ybUVsZW1lbnRJbXBsKiBmb3JtLCBib29sIGNyZWF0ZWRCeVBhcnNlcik7
Cit0eXBlZGVmIEhhc2hNYXA8RE9NU3RyaW5nSW1wbCAqLCB2b2lkKiwgUG9pbnRlckhhc2g8RE9N
U3RyaW5nSW1wbCAqPiA+IEZ1bmN0aW9uTWFwOworc3RhdGljIEZ1bmN0aW9uTWFwKiBnRnVuY3Rp
b25NYXA7CisKK0hUTUxFbGVtZW50SW1wbCogaHRtbENvbnN0cnVjdG9yKGNvbnN0IEF0b21pY1N0
cmluZyYgdGFnTmFtZSwgRG9jdW1lbnRQdHIqIGRvY1B0ciwgSFRNTEZvcm1FbGVtZW50SW1wbCog
Zm9ybSwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCit7CisgICAgcmV0dXJuIG5ldyBIVE1MSHRtbEVs
ZW1lbnRJbXBsKGRvY1B0cik7Cit9CisKK0hUTUxFbGVtZW50SW1wbCogaGVhZENvbnN0cnVjdG9y
KGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSwgRG9jdW1lbnRQdHIqIGRvY1B0ciwgSFRNTEZv
cm1FbGVtZW50SW1wbCogZm9ybSwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCit7CisgICAgcmV0dXJu
IG5ldyBIVE1MSGVhZEVsZW1lbnRJbXBsKGRvY1B0cik7Cit9CisKK0hUTUxFbGVtZW50SW1wbCog
Ym9keUNvbnN0cnVjdG9yKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSwgRG9jdW1lbnRQdHIq
IGRvY1B0ciwgSFRNTEZvcm1FbGVtZW50SW1wbCogZm9ybSwgYm9vbCBjcmVhdGVkQnlQYXJzZXIp
Cit7CisgICAgcmV0dXJuIG5ldyBIVE1MQm9keUVsZW1lbnRJbXBsKGRvY1B0cik7Cit9CisKK0hU
TUxFbGVtZW50SW1wbCogYmFzZUNvbnN0cnVjdG9yKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFt
ZSwgRG9jdW1lbnRQdHIqIGRvY1B0ciwgSFRNTEZvcm1FbGVtZW50SW1wbCogZm9ybSwgYm9vbCBj
cmVhdGVkQnlQYXJzZXIpCit7CisgICAgcmV0dXJuIG5ldyBIVE1MQmFzZUVsZW1lbnRJbXBsKGRv
Y1B0cik7Cit9CisKK0hUTUxFbGVtZW50SW1wbCogbGlua0NvbnN0cnVjdG9yKGNvbnN0IEF0b21p
Y1N0cmluZyYgdGFnTmFtZSwgRG9jdW1lbnRQdHIqIGRvY1B0ciwgSFRNTEZvcm1FbGVtZW50SW1w
bCogZm9ybSwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCit7CisgICAgcmV0dXJuIG5ldyBIVE1MTGlu
a0VsZW1lbnRJbXBsKGRvY1B0cik7Cit9CisKK0hUTUxFbGVtZW50SW1wbCogbWV0YUNvbnN0cnVj
dG9yKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSwgRG9jdW1lbnRQdHIqIGRvY1B0ciwgSFRN
TEZvcm1FbGVtZW50SW1wbCogZm9ybSwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCit7CisgICAgcmV0
dXJuIG5ldyBIVE1MTWV0YUVsZW1lbnRJbXBsKGRvY1B0cik7Cit9CisKK0hUTUxFbGVtZW50SW1w
bCogc3R5bGVDb25zdHJ1Y3Rvcihjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUsIERvY3VtZW50
UHRyKiBkb2NQdHIsIEhUTUxGb3JtRWxlbWVudEltcGwqIGZvcm0sIGJvb2wgY3JlYXRlZEJ5UGFy
c2VyKQoreworICAgIHJldHVybiBuZXcgSFRNTFN0eWxlRWxlbWVudEltcGwoZG9jUHRyKTsKK30K
KworSFRNTEVsZW1lbnRJbXBsKiB0aXRsZUNvbnN0cnVjdG9yKGNvbnN0IEF0b21pY1N0cmluZyYg
dGFnTmFtZSwgRG9jdW1lbnRQdHIqIGRvY1B0ciwgSFRNTEZvcm1FbGVtZW50SW1wbCogZm9ybSwg
Ym9vbCBjcmVhdGVkQnlQYXJzZXIpCit7CisgICAgcmV0dXJuIG5ldyBIVE1MVGl0bGVFbGVtZW50
SW1wbChkb2NQdHIpOworfQorCitIVE1MRWxlbWVudEltcGwqIGZyYW1lQ29uc3RydWN0b3IoY29u
c3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lLCBEb2N1bWVudFB0ciogZG9jUHRyLCBIVE1MRm9ybUVs
ZW1lbnRJbXBsKiBmb3JtLCBib29sIGNyZWF0ZWRCeVBhcnNlcikKK3sKKyAgICByZXR1cm4gbmV3
IEhUTUxGcmFtZUVsZW1lbnRJbXBsKGRvY1B0cik7Cit9CisKK0hUTUxFbGVtZW50SW1wbCogZnJh
bWVzZXRDb25zdHJ1Y3Rvcihjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUsIERvY3VtZW50UHRy
KiBkb2NQdHIsIEhUTUxGb3JtRWxlbWVudEltcGwqIGZvcm0sIGJvb2wgY3JlYXRlZEJ5UGFyc2Vy
KQoreworICAgIHJldHVybiBuZXcgSFRNTEZyYW1lU2V0RWxlbWVudEltcGwoZG9jUHRyKTsKK30K
KworSFRNTEVsZW1lbnRJbXBsKiBpZnJhbWVDb25zdHJ1Y3Rvcihjb25zdCBBdG9taWNTdHJpbmcm
IHRhZ05hbWUsIERvY3VtZW50UHRyKiBkb2NQdHIsIEhUTUxGb3JtRWxlbWVudEltcGwqIGZvcm0s
IGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQoreworICAgIHJldHVybiBuZXcgSFRNTElGcmFtZUVsZW1l
bnRJbXBsKGRvY1B0cik7Cit9CisKK0hUTUxFbGVtZW50SW1wbCogZm9ybUNvbnN0cnVjdG9yKGNv
bnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSwgRG9jdW1lbnRQdHIqIGRvY1B0ciwgSFRNTEZvcm1F
bGVtZW50SW1wbCogZm9ybSwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCit7CisgICAgcmV0dXJuIG5l
dyBIVE1MRm9ybUVsZW1lbnRJbXBsKGRvY1B0cik7Cit9CisKK0hUTUxFbGVtZW50SW1wbCogYnV0
dG9uQ29uc3RydWN0b3IoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lLCBEb2N1bWVudFB0ciog
ZG9jUHRyLCBIVE1MRm9ybUVsZW1lbnRJbXBsKiBmb3JtLCBib29sIGNyZWF0ZWRCeVBhcnNlcikK
K3sKKyAgICByZXR1cm4gbmV3IEhUTUxCdXR0b25FbGVtZW50SW1wbChkb2NQdHIsIGZvcm0pOwor
fQorCitIVE1MRWxlbWVudEltcGwqIGlucHV0Q29uc3RydWN0b3IoY29uc3QgQXRvbWljU3RyaW5n
JiB0YWdOYW1lLCBEb2N1bWVudFB0ciogZG9jUHRyLCBIVE1MRm9ybUVsZW1lbnRJbXBsKiBmb3Jt
LCBib29sIGNyZWF0ZWRCeVBhcnNlcikKK3sKKyAgICByZXR1cm4gbmV3IEhUTUxJbnB1dEVsZW1l
bnRJbXBsKGRvY1B0ciwgZm9ybSk7Cit9CisKK0hUTUxFbGVtZW50SW1wbCogaXNpbmRleENvbnN0
cnVjdG9yKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSwgRG9jdW1lbnRQdHIqIGRvY1B0ciwg
SFRNTEZvcm1FbGVtZW50SW1wbCogZm9ybSwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCit7CisgICAg
cmV0dXJuIG5ldyBIVE1MSXNJbmRleEVsZW1lbnRJbXBsKGRvY1B0ciwgZm9ybSk7Cit9CisKK0hU
TUxFbGVtZW50SW1wbCogZmllbGRzZXRDb25zdHJ1Y3Rvcihjb25zdCBBdG9taWNTdHJpbmcmIHRh
Z05hbWUsIERvY3VtZW50UHRyKiBkb2NQdHIsIEhUTUxGb3JtRWxlbWVudEltcGwqIGZvcm0sIGJv
b2wgY3JlYXRlZEJ5UGFyc2VyKQoreworICAgIHJldHVybiBuZXcgSFRNTEZpZWxkU2V0RWxlbWVu
dEltcGwoZG9jUHRyLCBmb3JtKTsKK30KKworSFRNTEVsZW1lbnRJbXBsKiBsYWJlbENvbnN0cnVj
dG9yKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSwgRG9jdW1lbnRQdHIqIGRvY1B0ciwgSFRN
TEZvcm1FbGVtZW50SW1wbCogZm9ybSwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCit7CisgICAgcmV0
dXJuIG5ldyBIVE1MTGFiZWxFbGVtZW50SW1wbChkb2NQdHIpOworfQorCitIVE1MRWxlbWVudElt
cGwqIGxlZ2VuZENvbnN0cnVjdG9yKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSwgRG9jdW1l
bnRQdHIqIGRvY1B0ciwgSFRNTEZvcm1FbGVtZW50SW1wbCogZm9ybSwgYm9vbCBjcmVhdGVkQnlQ
YXJzZXIpCit7CisgICAgcmV0dXJuIG5ldyBIVE1MTGVnZW5kRWxlbWVudEltcGwoZG9jUHRyLCBm
b3JtKTsKK30KKworSFRNTEVsZW1lbnRJbXBsKiBvcHRncm91cENvbnN0cnVjdG9yKGNvbnN0IEF0
b21pY1N0cmluZyYgdGFnTmFtZSwgRG9jdW1lbnRQdHIqIGRvY1B0ciwgSFRNTEZvcm1FbGVtZW50
SW1wbCogZm9ybSwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCit7CisgICAgcmV0dXJuIG5ldyBIVE1M
T3B0R3JvdXBFbGVtZW50SW1wbChkb2NQdHIsIGZvcm0pOworfQorCitIVE1MRWxlbWVudEltcGwq
IG9wdGlvbkNvbnN0cnVjdG9yKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSwgRG9jdW1lbnRQ
dHIqIGRvY1B0ciwgSFRNTEZvcm1FbGVtZW50SW1wbCogZm9ybSwgYm9vbCBjcmVhdGVkQnlQYXJz
ZXIpCit7CisgICAgcmV0dXJuIG5ldyBIVE1MT3B0aW9uRWxlbWVudEltcGwoZG9jUHRyLCBmb3Jt
KTsKK30KKworSFRNTEVsZW1lbnRJbXBsKiBzZWxlY3RDb25zdHJ1Y3Rvcihjb25zdCBBdG9taWNT
dHJpbmcmIHRhZ05hbWUsIERvY3VtZW50UHRyKiBkb2NQdHIsIEhUTUxGb3JtRWxlbWVudEltcGwq
IGZvcm0sIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQoreworICAgIHJldHVybiBuZXcgSFRNTFNlbGVj
dEVsZW1lbnRJbXBsKGRvY1B0ciwgZm9ybSk7Cit9CisKK0hUTUxFbGVtZW50SW1wbCogdGV4dGFy
ZWFDb25zdHJ1Y3Rvcihjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUsIERvY3VtZW50UHRyKiBk
b2NQdHIsIEhUTUxGb3JtRWxlbWVudEltcGwqIGZvcm0sIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQor
eworICAgIHJldHVybiBuZXcgSFRNTFRleHRBcmVhRWxlbWVudEltcGwoZG9jUHRyLCBmb3JtKTsK
K30KKworSFRNTEVsZW1lbnRJbXBsKiBkbENvbnN0cnVjdG9yKGNvbnN0IEF0b21pY1N0cmluZyYg
dGFnTmFtZSwgRG9jdW1lbnRQdHIqIGRvY1B0ciwgSFRNTEZvcm1FbGVtZW50SW1wbCogZm9ybSwg
Ym9vbCBjcmVhdGVkQnlQYXJzZXIpCit7CisgICAgcmV0dXJuIG5ldyBIVE1MRExpc3RFbGVtZW50
SW1wbChkb2NQdHIpOworfQorCitIVE1MRWxlbWVudEltcGwqIHVsQ29uc3RydWN0b3IoY29uc3Qg
QXRvbWljU3RyaW5nJiB0YWdOYW1lLCBEb2N1bWVudFB0ciogZG9jUHRyLCBIVE1MRm9ybUVsZW1l
bnRJbXBsKiBmb3JtLCBib29sIGNyZWF0ZWRCeVBhcnNlcikKK3sKKyAgICByZXR1cm4gbmV3IEhU
TUxVTGlzdEVsZW1lbnRJbXBsKGRvY1B0cik7Cit9CisKK0hUTUxFbGVtZW50SW1wbCogb2xDb25z
dHJ1Y3Rvcihjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUsIERvY3VtZW50UHRyKiBkb2NQdHIs
IEhUTUxGb3JtRWxlbWVudEltcGwqIGZvcm0sIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQoreworICAg
IHJldHVybiBuZXcgSFRNTE9MaXN0RWxlbWVudEltcGwoZG9jUHRyKTsKK30KKworSFRNTEVsZW1l
bnRJbXBsKiBkaXJDb25zdHJ1Y3Rvcihjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUsIERvY3Vt
ZW50UHRyKiBkb2NQdHIsIEhUTUxGb3JtRWxlbWVudEltcGwqIGZvcm0sIGJvb2wgY3JlYXRlZEJ5
UGFyc2VyKQoreworICAgIHJldHVybiBuZXcgSFRNTERpcmVjdG9yeUVsZW1lbnRJbXBsKGRvY1B0
cik7Cit9CisKK0hUTUxFbGVtZW50SW1wbCogbWVudUNvbnN0cnVjdG9yKGNvbnN0IEF0b21pY1N0
cmluZyYgdGFnTmFtZSwgRG9jdW1lbnRQdHIqIGRvY1B0ciwgSFRNTEZvcm1FbGVtZW50SW1wbCog
Zm9ybSwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCit7CisgICAgcmV0dXJuIG5ldyBIVE1MTWVudUVs
ZW1lbnRJbXBsKGRvY1B0cik7Cit9CisKK0hUTUxFbGVtZW50SW1wbCogbGlDb25zdHJ1Y3Rvcihj
b25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUsIERvY3VtZW50UHRyKiBkb2NQdHIsIEhUTUxGb3Jt
RWxlbWVudEltcGwqIGZvcm0sIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQoreworICAgIHJldHVybiBu
ZXcgSFRNTExJRWxlbWVudEltcGwoZG9jUHRyKTsKK30KKworSFRNTEVsZW1lbnRJbXBsKiBibG9j
a3F1b3RlQ29uc3RydWN0b3IoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lLCBEb2N1bWVudFB0
ciogZG9jUHRyLCBIVE1MRm9ybUVsZW1lbnRJbXBsKiBmb3JtLCBib29sIGNyZWF0ZWRCeVBhcnNl
cikKK3sKKyAgICByZXR1cm4gbmV3IEhUTUxCbG9ja3F1b3RlRWxlbWVudEltcGwoZG9jUHRyKTsK
K30KKworSFRNTEVsZW1lbnRJbXBsKiBkaXZDb25zdHJ1Y3Rvcihjb25zdCBBdG9taWNTdHJpbmcm
IHRhZ05hbWUsIERvY3VtZW50UHRyKiBkb2NQdHIsIEhUTUxGb3JtRWxlbWVudEltcGwqIGZvcm0s
IGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQoreworICAgIHJldHVybiBuZXcgSFRNTERpdkVsZW1lbnRJ
bXBsKGRvY1B0cik7Cit9CisKK0hUTUxFbGVtZW50SW1wbCogaGVhZGluZ0NvbnN0cnVjdG9yKGNv
bnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSwgRG9jdW1lbnRQdHIqIGRvY1B0ciwgSFRNTEZvcm1F
bGVtZW50SW1wbCogZm9ybSwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCit7CisgICAgcmV0dXJuIG5l
dyBIVE1MSGVhZGluZ0VsZW1lbnRJbXBsKFF1YWxpZmllZE5hbWUobnVsbEF0b20sIHRhZ05hbWUs
IEhUTUxOYW1lczo6eGh0bWxOYW1lc3BhY2VVUkkoKSksIGRvY1B0cik7Cit9CisKK0hUTUxFbGVt
ZW50SW1wbCogaHJDb25zdHJ1Y3Rvcihjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUsIERvY3Vt
ZW50UHRyKiBkb2NQdHIsIEhUTUxGb3JtRWxlbWVudEltcGwqIGZvcm0sIGJvb2wgY3JlYXRlZEJ5
UGFyc2VyKQoreworICAgIHJldHVybiBuZXcgSFRNTEhSRWxlbWVudEltcGwoZG9jUHRyKTsKK30K
KworSFRNTEVsZW1lbnRJbXBsKiBwYXJhZ3JhcGhDb25zdHJ1Y3Rvcihjb25zdCBBdG9taWNTdHJp
bmcmIHRhZ05hbWUsIERvY3VtZW50UHRyKiBkb2NQdHIsIEhUTUxGb3JtRWxlbWVudEltcGwqIGZv
cm0sIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQoreworICAgIHJldHVybiBuZXcgSFRNTFBhcmFncmFw
aEVsZW1lbnRJbXBsKGRvY1B0cik7Cit9CisKK0hUTUxFbGVtZW50SW1wbCogcHJlQ29uc3RydWN0
b3IoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lLCBEb2N1bWVudFB0ciogZG9jUHRyLCBIVE1M
Rm9ybUVsZW1lbnRJbXBsKiBmb3JtLCBib29sIGNyZWF0ZWRCeVBhcnNlcikKK3sKKyAgICByZXR1
cm4gbmV3IEhUTUxQcmVFbGVtZW50SW1wbChRdWFsaWZpZWROYW1lKG51bGxBdG9tLCB0YWdOYW1l
LCBIVE1MTmFtZXM6OnhodG1sTmFtZXNwYWNlVVJJKCkpLCBkb2NQdHIpOworfQorCitIVE1MRWxl
bWVudEltcGwqIGJhc2Vmb250Q29uc3RydWN0b3IoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1l
LCBEb2N1bWVudFB0ciogZG9jUHRyLCBIVE1MRm9ybUVsZW1lbnRJbXBsKiBmb3JtLCBib29sIGNy
ZWF0ZWRCeVBhcnNlcikKK3sKKyAgICByZXR1cm4gbmV3IEhUTUxCYXNlRm9udEVsZW1lbnRJbXBs
KGRvY1B0cik7Cit9CisKK0hUTUxFbGVtZW50SW1wbCogZm9udENvbnN0cnVjdG9yKGNvbnN0IEF0
b21pY1N0cmluZyYgdGFnTmFtZSwgRG9jdW1lbnRQdHIqIGRvY1B0ciwgSFRNTEZvcm1FbGVtZW50
SW1wbCogZm9ybSwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCit7CisgICAgcmV0dXJuIG5ldyBIVE1M
Rm9udEVsZW1lbnRJbXBsKGRvY1B0cik7Cit9CisKK0hUTUxFbGVtZW50SW1wbCogbW9kQ29uc3Ry
dWN0b3IoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lLCBEb2N1bWVudFB0ciogZG9jUHRyLCBI
VE1MRm9ybUVsZW1lbnRJbXBsKiBmb3JtLCBib29sIGNyZWF0ZWRCeVBhcnNlcikKK3sKKyAgICBy
ZXR1cm4gbmV3IEhUTUxNb2RFbGVtZW50SW1wbChRdWFsaWZpZWROYW1lKG51bGxBdG9tLCB0YWdO
YW1lLCBIVE1MTmFtZXM6OnhodG1sTmFtZXNwYWNlVVJJKCkpLCBkb2NQdHIpOworfQorCitIVE1M
RWxlbWVudEltcGwqIGFuY2hvckNvbnN0cnVjdG9yKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFt
ZSwgRG9jdW1lbnRQdHIqIGRvY1B0ciwgSFRNTEZvcm1FbGVtZW50SW1wbCogZm9ybSwgYm9vbCBj
cmVhdGVkQnlQYXJzZXIpCit7CisgICAgcmV0dXJuIG5ldyBIVE1MQW5jaG9yRWxlbWVudEltcGwo
ZG9jUHRyKTsKK30KKworSFRNTEVsZW1lbnRJbXBsKiBpbWFnZUNvbnN0cnVjdG9yKGNvbnN0IEF0
b21pY1N0cmluZyYgdGFnTmFtZSwgRG9jdW1lbnRQdHIqIGRvY1B0ciwgSFRNTEZvcm1FbGVtZW50
SW1wbCogZm9ybSwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCit7CisgICAgcmV0dXJuIG5ldyBIVE1M
SW1hZ2VFbGVtZW50SW1wbChkb2NQdHIsIGZvcm0pOworfQorCitIVE1MRWxlbWVudEltcGwqIG1h
cENvbnN0cnVjdG9yKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSwgRG9jdW1lbnRQdHIqIGRv
Y1B0ciwgSFRNTEZvcm1FbGVtZW50SW1wbCogZm9ybSwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCit7
CisgICAgcmV0dXJuIG5ldyBIVE1MTWFwRWxlbWVudEltcGwoZG9jUHRyKTsKK30KKworSFRNTEVs
ZW1lbnRJbXBsKiBhcmVhQ29uc3RydWN0b3IoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lLCBE
b2N1bWVudFB0ciogZG9jUHRyLCBIVE1MRm9ybUVsZW1lbnRJbXBsKiBmb3JtLCBib29sIGNyZWF0
ZWRCeVBhcnNlcikKK3sKKyAgICByZXR1cm4gbmV3IEhUTUxBcmVhRWxlbWVudEltcGwoZG9jUHRy
KTsKK30KKworSFRNTEVsZW1lbnRJbXBsKiBjYW52YXNDb25zdHJ1Y3Rvcihjb25zdCBBdG9taWNT
dHJpbmcmIHRhZ05hbWUsIERvY3VtZW50UHRyKiBkb2NQdHIsIEhUTUxGb3JtRWxlbWVudEltcGwq
IGZvcm0sIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQoreworICAgIHJldHVybiBuZXcgSFRNTENhbnZh
c0VsZW1lbnRJbXBsKGRvY1B0cik7Cit9CisKK0hUTUxFbGVtZW50SW1wbCogYXBwbGV0Q29uc3Ry
dWN0b3IoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lLCBEb2N1bWVudFB0ciogZG9jUHRyLCBI
VE1MRm9ybUVsZW1lbnRJbXBsKiBmb3JtLCBib29sIGNyZWF0ZWRCeVBhcnNlcikKK3sKKyAgICBy
ZXR1cm4gbmV3IEhUTUxBcHBsZXRFbGVtZW50SW1wbChkb2NQdHIpOworfQorCitIVE1MRWxlbWVu
dEltcGwqIGVtYmVkQ29uc3RydWN0b3IoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lLCBEb2N1
bWVudFB0ciogZG9jUHRyLCBIVE1MRm9ybUVsZW1lbnRJbXBsKiBmb3JtLCBib29sIGNyZWF0ZWRC
eVBhcnNlcikKK3sKKyAgICByZXR1cm4gbmV3IEhUTUxFbWJlZEVsZW1lbnRJbXBsKGRvY1B0cik7
Cit9CisKK0hUTUxFbGVtZW50SW1wbCogb2JqZWN0Q29uc3RydWN0b3IoY29uc3QgQXRvbWljU3Ry
aW5nJiB0YWdOYW1lLCBEb2N1bWVudFB0ciogZG9jUHRyLCBIVE1MRm9ybUVsZW1lbnRJbXBsKiBm
b3JtLCBib29sIGNyZWF0ZWRCeVBhcnNlcikKK3sKKyAgICByZXR1cm4gbmV3IEhUTUxPYmplY3RF
bGVtZW50SW1wbChkb2NQdHIpOworfQorCitIVE1MRWxlbWVudEltcGwqIHBhcmFtQ29uc3RydWN0
b3IoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lLCBEb2N1bWVudFB0ciogZG9jUHRyLCBIVE1M
Rm9ybUVsZW1lbnRJbXBsKiBmb3JtLCBib29sIGNyZWF0ZWRCeVBhcnNlcikKK3sKKyAgICByZXR1
cm4gbmV3IEhUTUxQYXJhbUVsZW1lbnRJbXBsKGRvY1B0cik7Cit9CisKK0hUTUxFbGVtZW50SW1w
bCogc2NyaXB0Q29uc3RydWN0b3IoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lLCBEb2N1bWVu
dFB0ciogZG9jUHRyLCBIVE1MRm9ybUVsZW1lbnRJbXBsKiBmb3JtLCBib29sIGNyZWF0ZWRCeVBh
cnNlcikKK3sKKyAgICBIVE1MU2NyaXB0RWxlbWVudEltcGwqIHNjcmlwdCA9IG5ldyBIVE1MU2Ny
aXB0RWxlbWVudEltcGwoZG9jUHRyKTsKKyAgICBzY3JpcHQtPnNldENyZWF0ZWRCeVBhcnNlcihj
cmVhdGVkQnlQYXJzZXIpOworICAgIHJldHVybiBzY3JpcHQ7Cit9CisKK0hUTUxFbGVtZW50SW1w
bCogdGFibGVDb25zdHJ1Y3Rvcihjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUsIERvY3VtZW50
UHRyKiBkb2NQdHIsIEhUTUxGb3JtRWxlbWVudEltcGwqIGZvcm0sIGJvb2wgY3JlYXRlZEJ5UGFy
c2VyKQoreworICAgIHJldHVybiBuZXcgSFRNTFRhYmxlRWxlbWVudEltcGwoZG9jUHRyKTsKK30K
KworSFRNTEVsZW1lbnRJbXBsKiB0YWJsZUNhcHRpb25Db25zdHJ1Y3Rvcihjb25zdCBBdG9taWNT
dHJpbmcmIHRhZ05hbWUsIERvY3VtZW50UHRyKiBkb2NQdHIsIEhUTUxGb3JtRWxlbWVudEltcGwq
IGZvcm0sIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQoreworICAgIHJldHVybiBuZXcgSFRNTFRhYmxl
Q2FwdGlvbkVsZW1lbnRJbXBsKGRvY1B0cik7Cit9CisKK0hUTUxFbGVtZW50SW1wbCogdGFibGVD
b2xDb25zdHJ1Y3Rvcihjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUsIERvY3VtZW50UHRyKiBk
b2NQdHIsIEhUTUxGb3JtRWxlbWVudEltcGwqIGZvcm0sIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQor
eworICAgIHJldHVybiBuZXcgSFRNTFRhYmxlQ29sRWxlbWVudEltcGwoUXVhbGlmaWVkTmFtZShu
dWxsQXRvbSwgdGFnTmFtZSwgSFRNTE5hbWVzOjp4aHRtbE5hbWVzcGFjZVVSSSgpKSwgZG9jUHRy
KTsKK30KKworSFRNTEVsZW1lbnRJbXBsKiB0YWJsZVJvd0NvbnN0cnVjdG9yKGNvbnN0IEF0b21p
Y1N0cmluZyYgdGFnTmFtZSwgRG9jdW1lbnRQdHIqIGRvY1B0ciwgSFRNTEZvcm1FbGVtZW50SW1w
bCogZm9ybSwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCit7CisgICAgcmV0dXJuIG5ldyBIVE1MVGFi
bGVSb3dFbGVtZW50SW1wbChkb2NQdHIpOworfQorCitIVE1MRWxlbWVudEltcGwqIHRhYmxlQ2Vs
bENvbnN0cnVjdG9yKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSwgRG9jdW1lbnRQdHIqIGRv
Y1B0ciwgSFRNTEZvcm1FbGVtZW50SW1wbCogZm9ybSwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCit7
CisgICAgcmV0dXJuIG5ldyBIVE1MVGFibGVDZWxsRWxlbWVudEltcGwoUXVhbGlmaWVkTmFtZShu
dWxsQXRvbSwgdGFnTmFtZSwgSFRNTE5hbWVzOjp4aHRtbE5hbWVzcGFjZVVSSSgpKSwgZG9jUHRy
KTsKK30KKworSFRNTEVsZW1lbnRJbXBsKiB0YWJsZVNlY3Rpb25Db25zdHJ1Y3Rvcihjb25zdCBB
dG9taWNTdHJpbmcmIHRhZ05hbWUsIERvY3VtZW50UHRyKiBkb2NQdHIsIEhUTUxGb3JtRWxlbWVu
dEltcGwqIGZvcm0sIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQoreworICAgIHJldHVybiBuZXcgSFRN
TFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsKFF1YWxpZmllZE5hbWUobnVsbEF0b20sIHRhZ05hbWUs
IEhUTUxOYW1lczo6eGh0bWxOYW1lc3BhY2VVUkkoKSksIGRvY1B0ciwgZmFsc2UpOworfQorCitI
VE1MRWxlbWVudEltcGwqIGJyQ29uc3RydWN0b3IoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1l
LCBEb2N1bWVudFB0ciogZG9jUHRyLCBIVE1MRm9ybUVsZW1lbnRJbXBsKiBmb3JtLCBib29sIGNy
ZWF0ZWRCeVBhcnNlcikKK3sKKyAgICByZXR1cm4gbmV3IEhUTUxCUkVsZW1lbnRJbXBsKGRvY1B0
cik7Cit9CisKK0hUTUxFbGVtZW50SW1wbCogcXVvdGVDb25zdHJ1Y3Rvcihjb25zdCBBdG9taWNT
dHJpbmcmIHRhZ05hbWUsIERvY3VtZW50UHRyKiBkb2NQdHIsIEhUTUxGb3JtRWxlbWVudEltcGwq
IGZvcm0sIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQoreworICAgIHJldHVybiBuZXcgSFRNTFF1b3Rl
RWxlbWVudEltcGwoZG9jUHRyKTsKK30KKworSFRNTEVsZW1lbnRJbXBsKiBtYXJxdWVlQ29uc3Ry
dWN0b3IoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lLCBEb2N1bWVudFB0ciogZG9jUHRyLCBI
VE1MRm9ybUVsZW1lbnRJbXBsKiBmb3JtLCBib29sIGNyZWF0ZWRCeVBhcnNlcikKK3sKKyAgICBy
ZXR1cm4gbmV3IEhUTUxNYXJxdWVlRWxlbWVudEltcGwoZG9jUHRyKTsKK30KKworSFRNTEVsZW1l
bnRJbXBsKiBIVE1MRWxlbWVudEZhY3Rvcnk6OmNyZWF0ZUhUTUxFbGVtZW50KGNvbnN0IEF0b21p
Y1N0cmluZyYgdGFnTmFtZSwgRG9jdW1lbnRJbXBsKiBkb2MsIEhUTUxGb3JtRWxlbWVudEltcGwq
IGZvcm0sIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQoreworICAgIGlmICghZG9jKQorICAgICAgICBy
ZXR1cm4gMDsgLy8gRG9uJ3QgYWxsb3cgZWxlbWVudHMgdG8gZXZlciBiZSBtYWRlIHdpdGhvdXQg
aGF2aW5nIGEgZG9jLgorCisgICAgRG9jdW1lbnRQdHIqIGRvY1B0ciA9IGRvYy0+ZG9jUHRyKCk7
CisgICAgaWYgKCFnRnVuY3Rpb25NYXApIHsKKyAgICAgICAgLy8gQ3JlYXRlIHRoZSB0YWJsZS4K
KyAgICAgICAgZ0Z1bmN0aW9uTWFwID0gbmV3IEZ1bmN0aW9uTWFwOworICAgICAgICAKKyAgICAg
ICAgLy8gUG9wdWxhdGUgaXQgd2l0aCBjb25zdHJ1Y3RvciBmdW5jdGlvbnMuCisgICAgICAgIGdG
dW5jdGlvbk1hcC0+aW5zZXJ0KEhUTUxOYW1lczo6aHRtbCgpLCAodm9pZCopJmh0bWxDb25zdHJ1
Y3Rvcik7CisgICAgICAgIGdGdW5jdGlvbk1hcC0+aW5zZXJ0KEhUTUxOYW1lczo6aGVhZCgpLCAo
dm9pZCopJmhlYWRDb25zdHJ1Y3Rvcik7CisgICAgICAgIGdGdW5jdGlvbk1hcC0+aW5zZXJ0KEhU
TUxOYW1lczo6Ym9keSgpLCAodm9pZCopJmJvZHlDb25zdHJ1Y3Rvcik7CisgICAgICAgIGdGdW5j
dGlvbk1hcC0+aW5zZXJ0KEhUTUxOYW1lczo6YmFzZSgpLCAodm9pZCopJmJhc2VDb25zdHJ1Y3Rv
cik7CisgICAgICAgIGdGdW5jdGlvbk1hcC0+aW5zZXJ0KEhUTUxOYW1lczo6bGluaygpLCAodm9p
ZCopJmxpbmtDb25zdHJ1Y3Rvcik7CisgICAgICAgIGdGdW5jdGlvbk1hcC0+aW5zZXJ0KEhUTUxO
YW1lczo6bWV0YSgpLCAodm9pZCopJm1ldGFDb25zdHJ1Y3Rvcik7CisgICAgICAgIGdGdW5jdGlv
bk1hcC0+aW5zZXJ0KEhUTUxOYW1lczo6c3R5bGUoKSwgKHZvaWQqKSZzdHlsZUNvbnN0cnVjdG9y
KTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLT5pbnNlcnQoSFRNTE5hbWVzOjp0aXRsZSgpLCAodm9p
ZCopJnRpdGxlQ29uc3RydWN0b3IpOworICAgICAgICBnRnVuY3Rpb25NYXAtPmluc2VydChIVE1M
TmFtZXM6OmZyYW1lKCksICh2b2lkKikmZnJhbWVDb25zdHJ1Y3Rvcik7CisgICAgICAgIGdGdW5j
dGlvbk1hcC0+aW5zZXJ0KEhUTUxOYW1lczo6ZnJhbWVzZXQoKSwgKHZvaWQqKSZmcmFtZXNldENv
bnN0cnVjdG9yKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLT5pbnNlcnQoSFRNTE5hbWVzOjppZnJh
bWUoKSwgKHZvaWQqKSZpZnJhbWVDb25zdHJ1Y3Rvcik7CisgICAgICAgIGdGdW5jdGlvbk1hcC0+
aW5zZXJ0KEhUTUxOYW1lczo6Zm9ybSgpLCAodm9pZCopJmZvcm1Db25zdHJ1Y3Rvcik7CisgICAg
ICAgIGdGdW5jdGlvbk1hcC0+aW5zZXJ0KEhUTUxOYW1lczo6YnV0dG9uKCksICh2b2lkKikmYnV0
dG9uQ29uc3RydWN0b3IpOworICAgICAgICBnRnVuY3Rpb25NYXAtPmluc2VydChIVE1MTmFtZXM6
OmlucHV0KCksICh2b2lkKikmaW5wdXRDb25zdHJ1Y3Rvcik7CisgICAgICAgIGdGdW5jdGlvbk1h
cC0+aW5zZXJ0KEhUTUxOYW1lczo6aXNpbmRleCgpLCAodm9pZCopJmlzaW5kZXhDb25zdHJ1Y3Rv
cik7CisgICAgICAgIGdGdW5jdGlvbk1hcC0+aW5zZXJ0KEhUTUxOYW1lczo6ZmllbGRzZXQoKSwg
KHZvaWQqKSZmaWVsZHNldENvbnN0cnVjdG9yKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLT5pbnNl
cnQoSFRNTE5hbWVzOjpsYWJlbCgpLCAodm9pZCopJmxhYmVsQ29uc3RydWN0b3IpOworICAgICAg
ICBnRnVuY3Rpb25NYXAtPmluc2VydChIVE1MTmFtZXM6OmxlZ2VuZCgpLCAodm9pZCopJmxlZ2Vu
ZENvbnN0cnVjdG9yKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLT5pbnNlcnQoSFRNTE5hbWVzOjpv
cHRncm91cCgpLCAodm9pZCopJm9wdGdyb3VwQ29uc3RydWN0b3IpOworICAgICAgICBnRnVuY3Rp
b25NYXAtPmluc2VydChIVE1MTmFtZXM6Om9wdGlvbigpLCAodm9pZCopJm9wdGlvbkNvbnN0cnVj
dG9yKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLT5pbnNlcnQoSFRNTE5hbWVzOjpzZWxlY3QoKSwg
KHZvaWQqKSZzZWxlY3RDb25zdHJ1Y3Rvcik7CisgICAgICAgIGdGdW5jdGlvbk1hcC0+aW5zZXJ0
KEhUTUxOYW1lczo6dGV4dGFyZWEoKSwgKHZvaWQqKSZ0ZXh0YXJlYUNvbnN0cnVjdG9yKTsKKyAg
ICAgICAgZ0Z1bmN0aW9uTWFwLT5pbnNlcnQoSFRNTE5hbWVzOjpkbCgpLCAodm9pZCopJmRsQ29u
c3RydWN0b3IpOworICAgICAgICBnRnVuY3Rpb25NYXAtPmluc2VydChIVE1MTmFtZXM6Om9sKCks
ICh2b2lkKikmb2xDb25zdHJ1Y3Rvcik7CisgICAgICAgIGdGdW5jdGlvbk1hcC0+aW5zZXJ0KEhU
TUxOYW1lczo6dWwoKSwgKHZvaWQqKSZ1bENvbnN0cnVjdG9yKTsKKyAgICAgICAgZ0Z1bmN0aW9u
TWFwLT5pbnNlcnQoSFRNTE5hbWVzOjpkaXIoKSwgKHZvaWQqKSZkaXJDb25zdHJ1Y3Rvcik7Cisg
ICAgICAgIGdGdW5jdGlvbk1hcC0+aW5zZXJ0KEhUTUxOYW1lczo6bWVudSgpLCAodm9pZCopJm1l
bnVDb25zdHJ1Y3Rvcik7CisgICAgICAgIGdGdW5jdGlvbk1hcC0+aW5zZXJ0KEhUTUxOYW1lczo6
bGkoKSwgKHZvaWQqKSZsaUNvbnN0cnVjdG9yKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLT5pbnNl
cnQoSFRNTE5hbWVzOjpibG9ja3F1b3RlKCksICh2b2lkKikmYmxvY2txdW90ZUNvbnN0cnVjdG9y
KTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLT5pbnNlcnQoSFRNTE5hbWVzOjpkaXYoKSwgKHZvaWQq
KSZkaXZDb25zdHJ1Y3Rvcik7CisgICAgICAgIGdGdW5jdGlvbk1hcC0+aW5zZXJ0KEhUTUxOYW1l
czo6aDEoKSwgKHZvaWQqKSZoZWFkaW5nQ29uc3RydWN0b3IpOworICAgICAgICBnRnVuY3Rpb25N
YXAtPmluc2VydChIVE1MTmFtZXM6OmgyKCksICh2b2lkKikmaGVhZGluZ0NvbnN0cnVjdG9yKTsK
KyAgICAgICAgZ0Z1bmN0aW9uTWFwLT5pbnNlcnQoSFRNTE5hbWVzOjpoMygpLCAodm9pZCopJmhl
YWRpbmdDb25zdHJ1Y3Rvcik7CisgICAgICAgIGdGdW5jdGlvbk1hcC0+aW5zZXJ0KEhUTUxOYW1l
czo6aDQoKSwgKHZvaWQqKSZoZWFkaW5nQ29uc3RydWN0b3IpOworICAgICAgICBnRnVuY3Rpb25N
YXAtPmluc2VydChIVE1MTmFtZXM6Omg1KCksICh2b2lkKikmaGVhZGluZ0NvbnN0cnVjdG9yKTsK
KyAgICAgICAgZ0Z1bmN0aW9uTWFwLT5pbnNlcnQoSFRNTE5hbWVzOjpoNigpLCAodm9pZCopJmhl
YWRpbmdDb25zdHJ1Y3Rvcik7CisgICAgICAgIGdGdW5jdGlvbk1hcC0+aW5zZXJ0KEhUTUxOYW1l
czo6aHIoKSwgKHZvaWQqKSZockNvbnN0cnVjdG9yKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLT5p
bnNlcnQoSFRNTE5hbWVzOjpwKCksICh2b2lkKikmcGFyYWdyYXBoQ29uc3RydWN0b3IpOworICAg
ICAgICBnRnVuY3Rpb25NYXAtPmluc2VydChIVE1MTmFtZXM6OnByZSgpLCAodm9pZCopJnByZUNv
bnN0cnVjdG9yKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLT5pbnNlcnQoSFRNTE5hbWVzOjp4bXAo
KSwgKHZvaWQqKSZwcmVDb25zdHJ1Y3Rvcik7CisgICAgICAgIGdGdW5jdGlvbk1hcC0+aW5zZXJ0
KEhUTUxOYW1lczo6YmFzZWZvbnQoKSwgKHZvaWQqKSZiYXNlZm9udENvbnN0cnVjdG9yKTsKKyAg
ICAgICAgZ0Z1bmN0aW9uTWFwLT5pbnNlcnQoSFRNTE5hbWVzOjpmb250KCksICh2b2lkKikmZm9u
dENvbnN0cnVjdG9yKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLT5pbnNlcnQoSFRNTE5hbWVzOjpk
ZWwoKSwgKHZvaWQqKSZtb2RDb25zdHJ1Y3Rvcik7CisgICAgICAgIGdGdW5jdGlvbk1hcC0+aW5z
ZXJ0KEhUTUxOYW1lczo6aW5zKCksICh2b2lkKikmbW9kQ29uc3RydWN0b3IpOworICAgICAgICBn
RnVuY3Rpb25NYXAtPmluc2VydChIVE1MTmFtZXM6OmEoKSwgKHZvaWQqKSZhbmNob3JDb25zdHJ1
Y3Rvcik7CisgICAgICAgIGdGdW5jdGlvbk1hcC0+aW5zZXJ0KEhUTUxOYW1lczo6aW1nKCksICh2
b2lkKikmaW1hZ2VDb25zdHJ1Y3Rvcik7CisgICAgICAgIGdGdW5jdGlvbk1hcC0+aW5zZXJ0KEhU
TUxOYW1lczo6bWFwKCksICh2b2lkKikmbWFwQ29uc3RydWN0b3IpOworICAgICAgICBnRnVuY3Rp
b25NYXAtPmluc2VydChIVE1MTmFtZXM6OmFyZWEoKSwgKHZvaWQqKSZhcmVhQ29uc3RydWN0b3Ip
OworICAgICAgICBnRnVuY3Rpb25NYXAtPmluc2VydChIVE1MTmFtZXM6OmNhbnZhcygpLCAodm9p
ZCopJmNhbnZhc0NvbnN0cnVjdG9yKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLT5pbnNlcnQoSFRN
TE5hbWVzOjphcHBsZXQoKSwgKHZvaWQqKSZhcHBsZXRDb25zdHJ1Y3Rvcik7CisgICAgICAgIGdG
dW5jdGlvbk1hcC0+aW5zZXJ0KEhUTUxOYW1lczo6ZW1iZWQoKSwgKHZvaWQqKSZlbWJlZENvbnN0
cnVjdG9yKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLT5pbnNlcnQoSFRNTE5hbWVzOjpvYmplY3Qo
KSwgKHZvaWQqKSZvYmplY3RDb25zdHJ1Y3Rvcik7CisgICAgICAgIGdGdW5jdGlvbk1hcC0+aW5z
ZXJ0KEhUTUxOYW1lczo6cGFyYW0oKSwgKHZvaWQqKSZwYXJhbUNvbnN0cnVjdG9yKTsKKyAgICAg
ICAgZ0Z1bmN0aW9uTWFwLT5pbnNlcnQoSFRNTE5hbWVzOjpzY3JpcHQoKSwgKHZvaWQqKSZzY3Jp
cHRDb25zdHJ1Y3Rvcik7CisgICAgICAgIGdGdW5jdGlvbk1hcC0+aW5zZXJ0KEhUTUxOYW1lczo6
dGFibGUoKSwgKHZvaWQqKSZ0YWJsZUNvbnN0cnVjdG9yKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFw
LT5pbnNlcnQoSFRNTE5hbWVzOjpjYXB0aW9uKCksICh2b2lkKikmdGFibGVDYXB0aW9uQ29uc3Ry
dWN0b3IpOworICAgICAgICBnRnVuY3Rpb25NYXAtPmluc2VydChIVE1MTmFtZXM6OmNvbGdyb3Vw
KCksICh2b2lkKikmdGFibGVDb2xDb25zdHJ1Y3Rvcik7CisgICAgICAgIGdGdW5jdGlvbk1hcC0+
aW5zZXJ0KEhUTUxOYW1lczo6Y29sKCksICh2b2lkKikmdGFibGVDb2xDb25zdHJ1Y3Rvcik7Cisg
ICAgICAgIGdGdW5jdGlvbk1hcC0+aW5zZXJ0KEhUTUxOYW1lczo6dHIoKSwgKHZvaWQqKSZ0YWJs
ZVJvd0NvbnN0cnVjdG9yKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLT5pbnNlcnQoSFRNTE5hbWVz
Ojp0ZCgpLCAodm9pZCopJnRhYmxlQ2VsbENvbnN0cnVjdG9yKTsKKyAgICAgICAgZ0Z1bmN0aW9u
TWFwLT5pbnNlcnQoSFRNTE5hbWVzOjp0aCgpLCAodm9pZCopJnRhYmxlQ2VsbENvbnN0cnVjdG9y
KTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLT5pbnNlcnQoSFRNTE5hbWVzOjp0aGVhZCgpLCAodm9p
ZCopJnRhYmxlU2VjdGlvbkNvbnN0cnVjdG9yKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLT5pbnNl
cnQoSFRNTE5hbWVzOjp0Ym9keSgpLCAodm9pZCopJnRhYmxlU2VjdGlvbkNvbnN0cnVjdG9yKTsK
KyAgICAgICAgZ0Z1bmN0aW9uTWFwLT5pbnNlcnQoSFRNTE5hbWVzOjp0Zm9vdCgpLCAodm9pZCop
JnRhYmxlU2VjdGlvbkNvbnN0cnVjdG9yKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLT5pbnNlcnQo
SFRNTE5hbWVzOjpicigpLCAodm9pZCopJmJyQ29uc3RydWN0b3IpOworICAgICAgICBnRnVuY3Rp
b25NYXAtPmluc2VydChIVE1MTmFtZXM6OnEoKSwgKHZvaWQqKSZxdW90ZUNvbnN0cnVjdG9yKTsK
KyAgICAgICAgZ0Z1bmN0aW9uTWFwLT5pbnNlcnQoSFRNTE5hbWVzOjptYXJxdWVlKCksICh2b2lk
KikmbWFycXVlZUNvbnN0cnVjdG9yKTsKKyAgICB9CisgICAgCisgICAgdm9pZCogcmVzdWx0ID0g
Z0Z1bmN0aW9uTWFwLT5nZXQodGFnTmFtZS5pbXBsZW1lbnRhdGlvbigpKTsKKyAgICBpZiAocmVz
dWx0KSB7CisgICAgICAgIENvbnN0cnVjdG9yRnVuYyBmdW5jID0gKENvbnN0cnVjdG9yRnVuYyly
ZXN1bHQ7CisgICAgICAgIHJldHVybiAoZnVuYykodGFnTmFtZSwgZG9jUHRyLCBmb3JtLCBjcmVh
dGVkQnlQYXJzZXIpOworICAgIH0KKyAKKyAgICAvLyBlbGVtZW50cyB3aXRoIG5vIHNwZWNpYWwg
cmVwcmVzZW50YXRpb24gaW4gdGhlIERPTQorICAgIHJldHVybiBuZXcgSFRNTEVsZW1lbnRJbXBs
KFF1YWxpZmllZE5hbWUobnVsbEF0b20sIHRhZ05hbWUsIEhUTUxOYW1lczo6eGh0bWxOYW1lc3Bh
Y2VVUkkoKSksIGRvY1B0cik7CisKK30KKworfQorCkluZGV4OiBraHRtbC9odG1sL2h0bWxmYWN0
b3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZToga2h0bWwvaHRtbC9odG1sZmFjdG9yeS5oCmRpZmYg
LU4ga2h0bWwvaHRtbC9odG1sZmFjdG9yeS5oCi0tLSAvZGV2L251bGwJMSBKYW4gMTk3MCAwMDow
MDowMCAtMDAwMAorKysga2h0bWwvaHRtbC9odG1sZmFjdG9yeS5oCTkgSnVsIDIwMDUgMDI6NDM6
MDcgLTAwMDAKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRo
ZSBIVE1MIERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgorICoKKyAqIENvcHlyaWdodCAoQykg
MjAwNSBBcHBsZSBDb21wdXRlciwgSW5jLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIx
MTEtMTMwNywgVVNBLgorICoKKyAqLworI2lmbmRlZiBIVE1MRUxFTUVOVEZBQ1RPUllfSAorI2Rl
ZmluZSBIVE1MRUxFTUVOVEZBQ1RPUllfSAorCituYW1lc3BhY2UgRE9NCit7CisKK2NsYXNzIEVs
ZW1lbnRJbXBsOworY2xhc3MgRG9jdW1lbnRJbXBsOworY2xhc3MgSFRNTEVsZW1lbnRJbXBsOwor
Y2xhc3MgSFRNTEZvcm1FbGVtZW50SW1wbDsKK2NsYXNzIFF1YWxpZmllZE5hbWU7CitjbGFzcyBB
dG9taWNTdHJpbmc7CisKKy8vIFRoZSBpZGVhIGJlaGluZCB0aGlzIGNsYXNzIGlzIHRoYXQgdGhl
cmUgd2lsbCBldmVudHVhbGx5IGJlIGEgbWFwcGluZyBmcm9tIG5hbWVzcGFjZSBVUklzIHRvIEVs
ZW1lbnRGYWN0b3JpZXMgdGhhdCBjYW4gZGlzcGVuc2UKKy8vIGVsZW1lbnRzLiAgSW4gYSBjb21w
b3VuZCBkb2N1bWVudCB3b3JsZCwgdGhlIGdlbmVyaWMgY3JlYXRlRWxlbWVudCBmdW5jdGlvbiAo
d2lsbCBlbmQgdXAgYmVpbmcgdmlydHVhbCkgd2lsbCBiZSBjYWxsZWQuCitjbGFzcyBIVE1MRWxl
bWVudEZhY3RvcnkKK3sKK3B1YmxpYzoKKyAgICBFbGVtZW50SW1wbCogY3JlYXRlRWxlbWVudChj
b25zdCBRdWFsaWZpZWROYW1lJiBxTmFtZSwgRG9jdW1lbnRJbXBsKiBkb2MsIGJvb2wgY3JlYXRl
ZEJ5UGFyc2VyID0gdHJ1ZSk7CisgICAgc3RhdGljIEhUTUxFbGVtZW50SW1wbCogY3JlYXRlSFRN
TEVsZW1lbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lLCBEb2N1bWVudEltcGwqIGRvYywg
SFRNTEZvcm1FbGVtZW50SW1wbCogZm9ybSA9IDAsIGJvb2wgY3JlYXRlZEJ5UGFyc2VyID0gdHJ1
ZSk7Cit9OworCit9CisKKyNlbmRpZgpJbmRleDoga2h0bWwvaHRtbC9odG1sbmFtZXMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbG5hbWVz
LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yCmRpZmYgLXUgLXAgLXIxLjIga2h0bWwvaHRt
bC9odG1sbmFtZXMuY3BwCi0tLSBraHRtbC9odG1sL2h0bWxuYW1lcy5jcHAJMTYgSnVuIDIwMDUg
MjA6MzM6NTcgLTAwMDAJMS4yCisrKyBraHRtbC9odG1sL2h0bWxuYW1lcy5jcHAJOSBKdWwgMjAw
NSAwMjo0MzowOCAtMDAwMApAQCAtMjAsNTUxICsyMCwyMzUgQEAKICAqCiAgKi8KIAorI2RlZmlu
ZSBLSFRNTF9IVE1MTkFNRVNfSElERV9HTE9CQUxTIDEKKworI2luY2x1ZGUgPHFwdHJkaWN0Lmg+
CiAjaW5jbHVkZSAiaHRtbG5hbWVzLmgiCiAjaW5jbHVkZSAiZG9tX3FuYW1lLmgiCiAKIG5hbWVz
cGFjZSBET00gewogCi1jb25zdCBBdG9taWNTdHJpbmcmIEhUTUxOYW1lczo6eGh0bWxOYW1lc3Bh
Y2VVUkkoKQotewotICAgIHN0YXRpYyBBdG9taWNTdHJpbmcgeGh0bWxOUygiaHR0cDovL3d3dy53
My5vcmcvMTk5OS94aHRtbCIpOwotICAgIHJldHVybiB4aHRtbE5TOwotfQotCi0KLS8vIFRhZyBu
YW1lcy4KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6YSgpCi17Ci0gICAgc3RhdGlj
IFF1YWxpZmllZE5hbWUgYShudWxsQXRvbSwgImEiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKLSAg
ICByZXR1cm4gYTsKLX0KLQotY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjphZGRyZXNz
KCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBhZGRyZXNzKG51bGxBdG9tLCAiYWRkcmVz
cyIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiBhZGRyZXNzOwotfQotCi1jb25z
dCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OmFwcGxldCgpCi17Ci0gICAgc3RhdGljIFF1YWxp
ZmllZE5hbWUgYXBwbGV0KG51bGxBdG9tLCAiYXBwbGV0IiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7
Ci0gICAgcmV0dXJuIGFwcGxldDsKLX0KLQotY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVz
OjphcmVhKCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBhcmVhKG51bGxBdG9tLCAiYXJl
YSIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiBhcmVhOwotfQotCi1jb25zdCBR
dWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OmIoKQotewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1l
IGIobnVsbEF0b20sICJiIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJuIGI7Ci19
Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6YmFzZSgpCi17Ci0gICAgc3RhdGlj
IFF1YWxpZmllZE5hbWUgYmFzZShudWxsQXRvbSwgImJhc2UiLCB4aHRtbE5hbWVzcGFjZVVSSSgp
KTsKLSAgICByZXR1cm4gYmFzZTsKLX0KLQotY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVz
OjpiYXNlZm9udCgpCi17Ci0gICAgc3RhdGljIFF1YWxpZmllZE5hbWUgYmFzZWZvbnQobnVsbEF0
b20sICJiYXNlZm9udCIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiBiYXNlZm9u
dDsKLX0KLQotY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpiaWcoKQotewotICAgIHN0
YXRpYyBRdWFsaWZpZWROYW1lIGJpZyhudWxsQXRvbSwgImJpZyIsIHhodG1sTmFtZXNwYWNlVVJJ
KCkpOwotICAgIHJldHVybiBiaWc7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1l
czo6YmxvY2txdW90ZSgpCi17Ci0gICAgc3RhdGljIFF1YWxpZmllZE5hbWUgYmxvY2txdW90ZShu
dWxsQXRvbSwgImJsb2NrcXVvdGUiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4g
YmxvY2txdW90ZTsKLX0KLQotY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpib2R5KCkK
LXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBib2R5KG51bGxBdG9tLCAiYm9keSIsIHhodG1s
TmFtZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiBib2R5OwotfQotCi1jb25zdCBRdWFsaWZpZWRO
YW1lJiBIVE1MTmFtZXM6OmJyKCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBicihudWxs
QXRvbSwgImJyIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJuIGJyOwotfQotCi1j
b25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OmJ1dHRvbigpCi17Ci0gICAgc3RhdGljIFF1
YWxpZmllZE5hbWUgYnV0dG9uKG51bGxBdG9tLCAiYnV0dG9uIiwgeGh0bWxOYW1lc3BhY2VVUkko
KSk7Ci0gICAgcmV0dXJuIGJ1dHRvbjsKLX0KLQotY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5h
bWVzOjpjYW52YXMoKQotewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIGNhbnZhcyhudWxsQXRv
bSwgImNhbnZhcyIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiBjYW52YXM7Ci19
Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6Y2FwdGlvbigpCi17Ci0gICAgc3Rh
dGljIFF1YWxpZmllZE5hbWUgY2FwdGlvbihudWxsQXRvbSwgImNhcHRpb24iLCB4aHRtbE5hbWVz
cGFjZVVSSSgpKTsKLSAgICByZXR1cm4gY2FwdGlvbjsKLX0KLQotY29uc3QgUXVhbGlmaWVkTmFt
ZSYgSFRNTE5hbWVzOjpjZW50ZXIoKQotewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIGNlbnRl
cihudWxsQXRvbSwgImNlbnRlciIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiBj
ZW50ZXI7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6Y29kZSgpCi17Ci0g
ICAgc3RhdGljIFF1YWxpZmllZE5hbWUgY29kZShudWxsQXRvbSwgImNvZGUiLCB4aHRtbE5hbWVz
cGFjZVVSSSgpKTsKLSAgICByZXR1cm4gY29kZTsKLX0KLQotY29uc3QgUXVhbGlmaWVkTmFtZSYg
SFRNTE5hbWVzOjpjb2woKQotewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIGNvbChudWxsQXRv
bSwgImNvbCIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiBjb2w7Ci19Cit2b2lk
KiB4aHRtbE5hbWVzcGFjZVVSSUF0b21bKHNpemVvZihBdG9taWNTdHJpbmcpICsgc2l6ZW9mKHZv
aWQqKSAtIDEpIC8gc2l6ZW9mKHZvaWQqKV07CiAKLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxO
YW1lczo6Y29sZ3JvdXAoKQotewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIGNvbGdyb3VwKG51
bGxBdG9tLCAiY29sZ3JvdXAiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4gY29s
Z3JvdXA7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6ZGQoKQotewotICAg
IHN0YXRpYyBRdWFsaWZpZWROYW1lIGRkKG51bGxBdG9tLCAiZGQiLCB4aHRtbE5hbWVzcGFjZVVS
SSgpKTsKLSAgICByZXR1cm4gZGQ7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1l
czo6ZGVsKCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBkZWwobnVsbEF0b20sICJkZWwi
LCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4gZGVsOwotfQotCi1jb25zdCBRdWFs
aWZpZWROYW1lJiBIVE1MTmFtZXM6OmRmbigpCi17Ci0gICAgc3RhdGljIFF1YWxpZmllZE5hbWUg
ZGZuKG51bGxBdG9tLCAiZGZuIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJuIGRm
bjsKLX0KLQotY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpkaXIoKQotewotICAgIHN0
YXRpYyBRdWFsaWZpZWROYW1lIGRpcihudWxsQXRvbSwgImRpciIsIHhodG1sTmFtZXNwYWNlVVJJ
KCkpOwotICAgIHJldHVybiBkaXI7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1l
czo6ZGl2KCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBkaXYobnVsbEF0b20sICJkaXYi
LCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4gZGl2OwotfQotCi1jb25zdCBRdWFs
aWZpZWROYW1lJiBIVE1MTmFtZXM6OmRsKCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBk
bChudWxsQXRvbSwgImRsIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJuIGRsOwot
fQotCi1jb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OmR0KCkKLXsKLSAgICBzdGF0aWMg
UXVhbGlmaWVkTmFtZSBkdChudWxsQXRvbSwgImR0IiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0g
ICAgcmV0dXJuIGR0OwotfQotCi1jb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OmVtKCkK
LXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBlbShudWxsQXRvbSwgImVtIiwgeGh0bWxOYW1l
c3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJuIGVtOwotfQotCi1jb25zdCBRdWFsaWZpZWROYW1lJiBI
VE1MTmFtZXM6OmVtYmVkKCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBlbWJlZChudWxs
QXRvbSwgImVtYmVkIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJuIGVtYmVkOwot
fQotCi1jb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OmZpZWxkc2V0KCkKLXsKLSAgICBz
dGF0aWMgUXVhbGlmaWVkTmFtZSBmaWVsZHNldChudWxsQXRvbSwgImZpZWxkc2V0IiwgeGh0bWxO
YW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJuIGZpZWxkc2V0OwotfQotCi1jb25zdCBRdWFsaWZp
ZWROYW1lJiBIVE1MTmFtZXM6OmZvbnQoKQotewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIGZv
bnQobnVsbEF0b20sICJmb250IiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJuIGZv
bnQ7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6Zm9ybSgpCi17Ci0gICAg
c3RhdGljIFF1YWxpZmllZE5hbWUgZm9ybShudWxsQXRvbSwgImZvcm0iLCB4aHRtbE5hbWVzcGFj
ZVVSSSgpKTsKLSAgICByZXR1cm4gZm9ybTsKLX0KLQotY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRN
TE5hbWVzOjpmcmFtZSgpCi17Ci0gICAgc3RhdGljIFF1YWxpZmllZE5hbWUgZnJhbWUobnVsbEF0
b20sICJmcmFtZSIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiBmcmFtZTsKLX0K
LQotY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpmcmFtZXNldCgpCi17Ci0gICAgc3Rh
dGljIFF1YWxpZmllZE5hbWUgZnJhbWVzZXQobnVsbEF0b20sICJmcmFtZXNldCIsIHhodG1sTmFt
ZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiBmcmFtZXNldDsKLX0KLQotY29uc3QgUXVhbGlmaWVk
TmFtZSYgSFRNTE5hbWVzOjpoZWFkKCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBoZWFk
KG51bGxBdG9tLCAiaGVhZCIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiBoZWFk
OwotfQotCi1jb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OmgxKCkKLXsKLSAgICBzdGF0
aWMgUXVhbGlmaWVkTmFtZSBoMShudWxsQXRvbSwgImgxIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7
Ci0gICAgcmV0dXJuIGgxOwotfQotCi1jb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6Omgy
KCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBoMihudWxsQXRvbSwgImgyIiwgeGh0bWxO
YW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJuIGgyOwotfQotCi1jb25zdCBRdWFsaWZpZWROYW1l
JiBIVE1MTmFtZXM6OmgzKCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBoMyhudWxsQXRv
bSwgImgzIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJuIGgzOwotfQotCi1jb25z
dCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6Omg0KCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVk
TmFtZSBoNChudWxsQXRvbSwgImg0IiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJu
IGg0OwotfQotCi1jb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6Omg1KCkKLXsKLSAgICBz
dGF0aWMgUXVhbGlmaWVkTmFtZSBoNShudWxsQXRvbSwgImg1IiwgeGh0bWxOYW1lc3BhY2VVUkko
KSk7Ci0gICAgcmV0dXJuIGg1OwotfQotCi1jb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6
Omg2KCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBoNihudWxsQXRvbSwgImg2IiwgeGh0
bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJuIGg2OwotfQotCi1jb25zdCBRdWFsaWZpZWRO
YW1lJiBIVE1MTmFtZXM6OmhyKCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBocihudWxs
QXRvbSwgImhyIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJuIGhyOwotfQotCi1j
b25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6Omh0bWwoKQotewotICAgIHN0YXRpYyBRdWFs
aWZpZWROYW1lIGh0bWwobnVsbEF0b20sICJodG1sIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0g
ICAgcmV0dXJuIGh0bWw7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6aSgp
Ci17Ci0gICAgc3RhdGljIFF1YWxpZmllZE5hbWUgaShudWxsQXRvbSwgImkiLCB4aHRtbE5hbWVz
cGFjZVVSSSgpKTsKLSAgICByZXR1cm4gaTsKLX0KLQotY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRN
TE5hbWVzOjppZnJhbWUoKQotewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIGlmcmFtZShudWxs
QXRvbSwgImlmcmFtZSIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiBpZnJhbWU7
Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6aW1nKCkKLXsKLSAgICBzdGF0
aWMgUXVhbGlmaWVkTmFtZSBpbWcobnVsbEF0b20sICJpbWciLCB4aHRtbE5hbWVzcGFjZVVSSSgp
KTsKLSAgICByZXR1cm4gaW1nOwotfQotCi1jb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6
OmlucHV0KCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBpbnB1dChudWxsQXRvbSwgImlu
cHV0IiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJuIGlucHV0OwotfQotCi1jb25z
dCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OmlucygpCi17Ci0gICAgc3RhdGljIFF1YWxpZmll
ZE5hbWUgaW5zKG51bGxBdG9tLCAiaW5zIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0
dXJuIGluczsKLX0KLQotY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjppc2luZGV4KCkK
LXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBpc2luZGV4KG51bGxBdG9tLCAiaXNpbmRleCIs
IHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiBpc2luZGV4OwotfQotCi1jb25zdCBR
dWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OmtiZCgpCi17Ci0gICAgc3RhdGljIFF1YWxpZmllZE5h
bWUga2JkKG51bGxBdG9tLCAia2JkIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJu
IGtiZDsKLX0KLQotY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjprZXlnZW4oKQotewot
ICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIGtleWdlbihudWxsQXRvbSwgImtleWdlbiIsIHhodG1s
TmFtZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiBrZXlnZW47Ci19Ci0KLWNvbnN0IFF1YWxpZmll
ZE5hbWUmIEhUTUxOYW1lczo6bGFiZWwoKQotewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIGxh
YmVsKG51bGxBdG9tLCAibGFiZWwiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4g
bGFiZWw7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6bGVnZW5kKCkKLXsK
LSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBsZWdlbmQobnVsbEF0b20sICJsZWdlbmQiLCB4aHRt
bE5hbWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4gbGVnZW5kOwotfQotCi1jb25zdCBRdWFsaWZp
ZWROYW1lJiBIVE1MTmFtZXM6OmxpKCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBsaShu
dWxsQXRvbSwgImxpIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJuIGxpOwotfQot
Ci1jb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OmxpbmsoKQotewotICAgIHN0YXRpYyBR
dWFsaWZpZWROYW1lIGxpbmsobnVsbEF0b20sICJsaW5rIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7
Ci0gICAgcmV0dXJuIGxpbms7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6
bWFwKCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBtYXAobnVsbEF0b20sICJtYXAiLCB4
aHRtbE5hbWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4gbWFwOwotfQotCi1jb25zdCBRdWFsaWZp
ZWROYW1lJiBIVE1MTmFtZXM6Om1hcnF1ZWUoKQotewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1l
IG1hcnF1ZWUobnVsbEF0b20sICJtYXJxdWVlIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAg
cmV0dXJuIG1hcnF1ZWU7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6bWVu
dSgpCi17Ci0gICAgc3RhdGljIFF1YWxpZmllZE5hbWUgbWVudShudWxsQXRvbSwgIm1lbnUiLCB4
aHRtbE5hbWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4gbWVudTsKLX0KLQotY29uc3QgUXVhbGlm
aWVkTmFtZSYgSFRNTE5hbWVzOjptZXRhKCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBt
ZXRhKG51bGxBdG9tLCAibWV0YSIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiBt
ZXRhOwotfQotCi1jb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6Om5vZW1iZWQoKQotewot
ICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIG5vZW1iZWQobnVsbEF0b20sICJub2VtYmVkIiwgeGh0
bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJuIG5vZW1iZWQ7Ci19Ci0KLWNvbnN0IFF1YWxp
ZmllZE5hbWUmIEhUTUxOYW1lczo6bm9mcmFtZXMoKQotewotICAgIHN0YXRpYyBRdWFsaWZpZWRO
YW1lIG5vZnJhbWVzKG51bGxBdG9tLCAibm9mcmFtZXMiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsK
LSAgICByZXR1cm4gbm9mcmFtZXM7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1l
czo6bm9zY3JpcHQoKQotewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIG5vc2NyaXB0KG51bGxB
dG9tLCAibm9zY3JpcHQiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4gbm9zY3Jp
cHQ7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6b2JqZWN0KCkKLXsKLSAg
ICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBvYmplY3QobnVsbEF0b20sICJvYmplY3QiLCB4aHRtbE5h
bWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4gb2JqZWN0OwotfQotCi1jb25zdCBRdWFsaWZpZWRO
YW1lJiBIVE1MTmFtZXM6Om9sKCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBvbChudWxs
QXRvbSwgIm9sIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJuIG9sOwotfQotCi1j
b25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6Om9wdGdyb3VwKCkKLXsKLSAgICBzdGF0aWMg
UXVhbGlmaWVkTmFtZSBvcHRncm91cChudWxsQXRvbSwgIm9wdGdyb3VwIiwgeGh0bWxOYW1lc3Bh
Y2VVUkkoKSk7Ci0gICAgcmV0dXJuIG9wdGdyb3VwOwotfQotCi1jb25zdCBRdWFsaWZpZWROYW1l
JiBIVE1MTmFtZXM6OnAoKQotewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIHAobnVsbEF0b20s
ICJwIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJuIHA7Ci19Ci0KLWNvbnN0IFF1
YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6cGFyYW0oKQotewotICAgIHN0YXRpYyBRdWFsaWZpZWRO
YW1lIHBhcmFtKG51bGxBdG9tLCAicGFyYW0iLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKLSAgICBy
ZXR1cm4gcGFyYW07Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6cHJlKCkK
LXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSBwcmUobnVsbEF0b20sICJwcmUiLCB4aHRtbE5h
bWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4gcHJlOwotfQotCi1jb25zdCBRdWFsaWZpZWROYW1l
JiBIVE1MTmFtZXM6OnEoKQotewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIHEobnVsbEF0b20s
ICJxIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJuIHE7Ci19Ci0KLWNvbnN0IFF1
YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6cygpCi17Ci0gICAgc3RhdGljIFF1YWxpZmllZE5hbWUg
cyhudWxsQXRvbSwgInMiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4gczsKLX0K
LQotY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpzYW1wKCkKLXsKLSAgICBzdGF0aWMg
UXVhbGlmaWVkTmFtZSBzYW1wKG51bGxBdG9tLCAic2FtcCIsIHhodG1sTmFtZXNwYWNlVVJJKCkp
OwotICAgIHJldHVybiBzYW1wOwotfQotCi1jb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6
OnNjcmlwdCgpCi17Ci0gICAgc3RhdGljIFF1YWxpZmllZE5hbWUgc2NyaXB0KG51bGxBdG9tLCAi
c2NyaXB0IiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJuIHNjcmlwdDsKLX0KLQot
Y29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpzZWxlY3QoKQotewotICAgIHN0YXRpYyBR
dWFsaWZpZWROYW1lIHNlbGVjdChudWxsQXRvbSwgInNlbGVjdCIsIHhodG1sTmFtZXNwYWNlVVJJ
KCkpOwotICAgIHJldHVybiBzZWxlY3Q7Ci19Ci0KLWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxO
YW1lczo6c21hbGwoKQotewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIHNtYWxsKG51bGxBdG9t
LCAic21hbGwiLCB4aHRtbE5hbWVzcGFjZVVSSSgpKTsKLSAgICByZXR1cm4gc21hbGw7Ci19Ci0K
LWNvbnN0IFF1YWxpZmllZE5hbWUmIEhUTUxOYW1lczo6c3RyaWtlKCkKLXsKLSAgICBzdGF0aWMg
UXVhbGlmaWVkTmFtZSBzdHJpa2UobnVsbEF0b20sICJzdHJpa2UiLCB4aHRtbE5hbWVzcGFjZVVS
SSgpKTsKLSAgICByZXR1cm4gc3RyaWtlOwotfQotCi1jb25zdCBRdWFsaWZpZWROYW1lJiBIVE1M
TmFtZXM6OnN0cm9uZygpCi17Ci0gICAgc3RhdGljIFF1YWxpZmllZE5hbWUgc3Ryb25nKG51bGxB
dG9tLCAic3Ryb25nIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJuIHN0cm9uZzsK
LX0KLQotY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjpzdHlsZSgpCi17Ci0gICAgc3Rh
dGljIFF1YWxpZmllZE5hbWUgc3R5bGUobnVsbEF0b20sICJzdHlsZSIsIHhodG1sTmFtZXNwYWNl
VVJJKCkpOwotICAgIHJldHVybiBzdHlsZTsKLX0KLQotY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRN
TE5hbWVzOjp0YWJsZSgpCi17Ci0gICAgc3RhdGljIFF1YWxpZmllZE5hbWUgdGFibGUobnVsbEF0
b20sICJ0YWJsZSIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiB0YWJsZTsKLX0K
LQotY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjp0Ym9keSgpCi17Ci0gICAgc3RhdGlj
IFF1YWxpZmllZE5hbWUgdGJvZHkobnVsbEF0b20sICJ0Ym9keSIsIHhodG1sTmFtZXNwYWNlVVJJ
KCkpOwotICAgIHJldHVybiB0Ym9keTsKLX0KLQotY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5h
bWVzOjp0ZCgpCi17Ci0gICAgc3RhdGljIFF1YWxpZmllZE5hbWUgdGQobnVsbEF0b20sICJ0ZCIs
IHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiB0ZDsKLX0KLQotY29uc3QgUXVhbGlm
aWVkTmFtZSYgSFRNTE5hbWVzOjp0ZXh0YXJlYSgpCi17Ci0gICAgc3RhdGljIFF1YWxpZmllZE5h
bWUgdGV4dGFyZWEobnVsbEF0b20sICJ0ZXh0YXJlYSIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwot
ICAgIHJldHVybiB0ZXh0YXJlYTsKLX0KLQotY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVz
Ojp0Zm9vdCgpCi17Ci0gICAgc3RhdGljIFF1YWxpZmllZE5hbWUgdGZvb3QobnVsbEF0b20sICJ0
Zm9vdCIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiB0Zm9vdDsKLX0KLQotY29u
c3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjp0aCgpCi17Ci0gICAgc3RhdGljIFF1YWxpZmll
ZE5hbWUgdGgobnVsbEF0b20sICJ0aCIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAgIHJldHVy
biB0aDsKLX0KLQotY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjp0aGVhZCgpCi17Ci0g
ICAgc3RhdGljIFF1YWxpZmllZE5hbWUgdGhlYWQobnVsbEF0b20sICJ0aGVhZCIsIHhodG1sTmFt
ZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiB0aGVhZDsKLX0KLQotY29uc3QgUXVhbGlmaWVkTmFt
ZSYgSFRNTE5hbWVzOjp0aXRsZSgpCi17Ci0gICAgc3RhdGljIFF1YWxpZmllZE5hbWUgdGl0bGUo
bnVsbEF0b20sICJ0aXRsZSIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiB0aXRs
ZTsKLX0KLQotY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjp0cigpCi17Ci0gICAgc3Rh
dGljIFF1YWxpZmllZE5hbWUgdHIobnVsbEF0b20sICJ0ciIsIHhodG1sTmFtZXNwYWNlVVJJKCkp
OwotICAgIHJldHVybiB0cjsKLX0KLQotY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVzOjp0
dCgpCi17Ci0gICAgc3RhdGljIFF1YWxpZmllZE5hbWUgdHQobnVsbEF0b20sICJ0dCIsIHhodG1s
TmFtZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiB0dDsKLX0KLQotY29uc3QgUXVhbGlmaWVkTmFt
ZSYgSFRNTE5hbWVzOjp1KCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFtZSB1KG51bGxBdG9t
LCAidSIsIHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiB1OwotfQotCi1jb25zdCBR
dWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OnVsKCkKLXsKLSAgICBzdGF0aWMgUXVhbGlmaWVkTmFt
ZSB1bChudWxsQXRvbSwgInVsIiwgeGh0bWxOYW1lc3BhY2VVUkkoKSk7Ci0gICAgcmV0dXJuIHVs
OwotfQotCi1jb25zdCBRdWFsaWZpZWROYW1lJiBIVE1MTmFtZXM6OnZhcigpCi17Ci0gICAgc3Rh
dGljIFF1YWxpZmllZE5hbWUgdmFyKG51bGxBdG9tLCAidmFyIiwgeGh0bWxOYW1lc3BhY2VVUkko
KSk7Ci0gICAgcmV0dXJuIHZhcjsKLX0KLQotY29uc3QgUXVhbGlmaWVkTmFtZSYgSFRNTE5hbWVz
Ojp4bXAoKQotewotICAgIHN0YXRpYyBRdWFsaWZpZWROYW1lIHhtcChudWxsQXRvbSwgInhtcCIs
IHhodG1sTmFtZXNwYWNlVVJJKCkpOwotICAgIHJldHVybiB4bXA7CisvLyBEZWZpbmUgYSBRdWFs
aWZpZWROYW1lLXNpemVkIGFycmF5IG9mIHBvaW50ZXJzIHRvIGF2b2lkIHN0YXRpYyBpbml0aWFs
aXphdGlvbi4KKy8vIFVzZSBhbiBhcnJheSBvZiBwb2ludGVycyBpbnN0ZWFkIG9mIGFuIGFycmF5
IG9mIGNoYXIgaW4gY2FzZSB0aGVyZSBpcyBzb21lIGFsaWdubWVudCBpc3N1ZS4KKyNkZWZpbmUg
REVGSU5FX0dMT0JBTChuYW1lKSBcCisgICAgdm9pZCogbmFtZSAjIyBRTmFtZVsoc2l6ZW9mKFF1
YWxpZmllZE5hbWUpICsgc2l6ZW9mKHZvaWQqKSAtIDEpIC8gc2l6ZW9mKHZvaWQqKV07CisKK0RF
RklORV9HTE9CQUwoYSkKK0RFRklORV9HTE9CQUwoYWJicikKK0RFRklORV9HTE9CQUwoYWNyb255
bSkKK0RFRklORV9HTE9CQUwoYWRkcmVzcykKK0RFRklORV9HTE9CQUwoYXBwbGV0KQorREVGSU5F
X0dMT0JBTChhcmVhKQorREVGSU5FX0dMT0JBTChiKQorREVGSU5FX0dMT0JBTChiYXNlKQorREVG
SU5FX0dMT0JBTChiYXNlZm9udCkKK0RFRklORV9HTE9CQUwoYmRvKQorREVGSU5FX0dMT0JBTChi
aWcpCitERUZJTkVfR0xPQkFMKGJsb2NrcXVvdGUpCitERUZJTkVfR0xPQkFMKGJvZHkpCitERUZJ
TkVfR0xPQkFMKGJyKQorREVGSU5FX0dMT0JBTChidXR0b24pCitERUZJTkVfR0xPQkFMKGNhbnZh
cykKK0RFRklORV9HTE9CQUwoY2FwdGlvbikKK0RFRklORV9HTE9CQUwoY2VudGVyKQorREVGSU5F
X0dMT0JBTChjaXRlKQorREVGSU5FX0dMT0JBTChjb2RlKQorREVGSU5FX0dMT0JBTChjb2wpCitE
RUZJTkVfR0xPQkFMKGNvbGdyb3VwKQorREVGSU5FX0dMT0JBTChkZCkKK0RFRklORV9HTE9CQUwo
ZGVsKQorREVGSU5FX0dMT0JBTChkZm4pCitERUZJTkVfR0xPQkFMKGRpcikKK0RFRklORV9HTE9C
QUwoZGl2KQorREVGSU5FX0dMT0JBTChkbCkKK0RFRklORV9HTE9CQUwoZHQpCitERUZJTkVfR0xP
QkFMKGVtKQorREVGSU5FX0dMT0JBTChlbWJlZCkKK0RFRklORV9HTE9CQUwoZmllbGRzZXQpCitE
RUZJTkVfR0xPQkFMKGZvbnQpCitERUZJTkVfR0xPQkFMKGZvcm0pCitERUZJTkVfR0xPQkFMKGZy
YW1lKQorREVGSU5FX0dMT0JBTChmcmFtZXNldCkKK0RFRklORV9HTE9CQUwoaGVhZCkKK0RFRklO
RV9HTE9CQUwoaDEpCitERUZJTkVfR0xPQkFMKGgyKQorREVGSU5FX0dMT0JBTChoMykKK0RFRklO
RV9HTE9CQUwoaDQpCitERUZJTkVfR0xPQkFMKGg1KQorREVGSU5FX0dMT0JBTChoNikKK0RFRklO
RV9HTE9CQUwoaHIpCitERUZJTkVfR0xPQkFMKGh0bWwpCitERUZJTkVfR0xPQkFMKGkpCitERUZJ
TkVfR0xPQkFMKGlmcmFtZSkKK0RFRklORV9HTE9CQUwoaW1nKQorREVGSU5FX0dMT0JBTChpbnB1
dCkKK0RFRklORV9HTE9CQUwoaW5zKQorREVGSU5FX0dMT0JBTChpc2luZGV4KQorREVGSU5FX0dM
T0JBTChrYmQpCitERUZJTkVfR0xPQkFMKGtleWdlbikKK0RFRklORV9HTE9CQUwobGFiZWwpCitE
RUZJTkVfR0xPQkFMKGxheWVyKQorREVGSU5FX0dMT0JBTChsZWdlbmQpCitERUZJTkVfR0xPQkFM
KGxpKQorREVGSU5FX0dMT0JBTChsaW5rKQorREVGSU5FX0dMT0JBTChtYXApCitERUZJTkVfR0xP
QkFMKG1hcnF1ZWUpCitERUZJTkVfR0xPQkFMKG1lbnUpCitERUZJTkVfR0xPQkFMKG1ldGEpCitE
RUZJTkVfR0xPQkFMKG5vYnIpCitERUZJTkVfR0xPQkFMKG5vZW1iZWQpCitERUZJTkVfR0xPQkFM
KG5vZnJhbWVzKQorREVGSU5FX0dMT0JBTChub2xheWVyKQorREVGSU5FX0dMT0JBTChub3Njcmlw
dCkKK0RFRklORV9HTE9CQUwob2JqZWN0KQorREVGSU5FX0dMT0JBTChvbCkKK0RFRklORV9HTE9C
QUwob3B0Z3JvdXApCitERUZJTkVfR0xPQkFMKG9wdGlvbikKK0RFRklORV9HTE9CQUwocCkKK0RF
RklORV9HTE9CQUwocGFyYW0pCitERUZJTkVfR0xPQkFMKHBsYWludGV4dCkKK0RFRklORV9HTE9C
QUwocHJlKQorREVGSU5FX0dMT0JBTChxKQorREVGSU5FX0dMT0JBTChzKQorREVGSU5FX0dMT0JB
TChzYW1wKQorREVGSU5FX0dMT0JBTChzY3JpcHQpCitERUZJTkVfR0xPQkFMKHNlbGVjdCkKK0RF
RklORV9HTE9CQUwoc21hbGwpCitERUZJTkVfR0xPQkFMKHNwYW4pCitERUZJTkVfR0xPQkFMKHN0
cmlrZSkKK0RFRklORV9HTE9CQUwoc3Ryb25nKQorREVGSU5FX0dMT0JBTChzdHlsZSkKK0RFRklO
RV9HTE9CQUwoc3ViKQorREVGSU5FX0dMT0JBTChzdXApCitERUZJTkVfR0xPQkFMKHRhYmxlKQor
REVGSU5FX0dMT0JBTCh0Ym9keSkKK0RFRklORV9HTE9CQUwodGQpCitERUZJTkVfR0xPQkFMKHRl
eHRhcmVhKQorREVGSU5FX0dMT0JBTCh0Zm9vdCkKK0RFRklORV9HTE9CQUwodGgpCitERUZJTkVf
R0xPQkFMKHRoZWFkKQorREVGSU5FX0dMT0JBTCh0aXRsZSkKK0RFRklORV9HTE9CQUwodHIpCitE
RUZJTkVfR0xPQkFMKHR0KQorREVGSU5FX0dMT0JBTCh1KQorREVGSU5FX0dMT0JBTCh1bCkKK0RF
RklORV9HTE9CQUwodmFyKQorREVGSU5FX0dMT0JBTCh3YnIpCitERUZJTkVfR0xPQkFMKHhtcCkK
Kwordm9pZCBIVE1MTmFtZXM6OmluaXQoKQoreworICAgIHN0YXRpYyBib29sIGluaXRpYWxpemVk
OworICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKKyAgICAgICAgLy8gVXNlIHBsYWNlbWVudCBuZXcg
dG8gaW5pdGlhbGl6ZSB0aGUgZ2xvYmFscy4KKyAgICAgICAgc3RhdGljIEF0b21pY1N0cmluZyB4
aHRtbE5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIik7CisgICAgICAgIG5ldyAoJnho
dG1sTmFtZXNwYWNlVVJJQXRvbSkgQXRvbWljU3RyaW5nKHhodG1sTlMpOworICAgICAgICBuZXcg
KCZhUU5hbWUpIFF1YWxpZmllZE5hbWUobnVsbEF0b20sICJhIiwgeGh0bWxOUyk7CisgICAgICAg
IG5ldyAoJmFiYnJRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgImFiYnIiLCB4aHRtbE5T
KTsKKyAgICAgICAgbmV3ICgmYWNyb255bVFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAi
YWNyb255bSIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZhZGRyZXNzUU5hbWUpIFF1YWxpZmll
ZE5hbWUobnVsbEF0b20sICJhZGRyZXNzIiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJmFwcGxl
dFFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAiYXBwbGV0IiwgeGh0bWxOUyk7CisgICAg
ICAgIG5ldyAoJmFyZWFRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgImFyZWEiLCB4aHRt
bE5TKTsKKyAgICAgICAgbmV3ICgmYlFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAiYiIs
IHhodG1sTlMpOworICAgICAgICBuZXcgKCZiYXNlUU5hbWUpIFF1YWxpZmllZE5hbWUobnVsbEF0
b20sICJiYXNlIiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJmJhc2Vmb250UU5hbWUpIFF1YWxp
ZmllZE5hbWUobnVsbEF0b20sICJiYXNlZm9udCIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZi
ZG9RTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgImJkbyIsIHhodG1sTlMpOworICAgICAg
ICBuZXcgKCZiaWdRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgImJpZyIsIHhodG1sTlMp
OworICAgICAgICBuZXcgKCZibG9ja3F1b3RlUU5hbWUpIFF1YWxpZmllZE5hbWUobnVsbEF0b20s
ICJibG9ja3F1b3RlIiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJmJvZHlRTmFtZSkgUXVhbGlm
aWVkTmFtZShudWxsQXRvbSwgImJvZHkiLCB4aHRtbE5TKTsKKyAgICAgICAgbmV3ICgmYnJRTmFt
ZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgImJyIiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAo
JmJ1dHRvblFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAiYnV0dG9uIiwgeGh0bWxOUyk7
CisgICAgICAgIG5ldyAoJmNhbnZhc1FOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAiY2Fu
dmFzIiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJmNhcHRpb25RTmFtZSkgUXVhbGlmaWVkTmFt
ZShudWxsQXRvbSwgImNhcHRpb24iLCB4aHRtbE5TKTsKKyAgICAgICAgbmV3ICgmY2VudGVyUU5h
bWUpIFF1YWxpZmllZE5hbWUobnVsbEF0b20sICJjZW50ZXIiLCB4aHRtbE5TKTsKKyAgICAgICAg
bmV3ICgmY2l0ZVFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAiY2l0ZSIsIHhodG1sTlMp
OworICAgICAgICBuZXcgKCZjb2RlUU5hbWUpIFF1YWxpZmllZE5hbWUobnVsbEF0b20sICJjb2Rl
IiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJmNvbFFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxB
dG9tLCAiY29sIiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJmNvbGdyb3VwUU5hbWUpIFF1YWxp
ZmllZE5hbWUobnVsbEF0b20sICJjb2xncm91cCIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZk
ZFFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAiZGQiLCB4aHRtbE5TKTsKKyAgICAgICAg
bmV3ICgmZGVsUU5hbWUpIFF1YWxpZmllZE5hbWUobnVsbEF0b20sICJkZWwiLCB4aHRtbE5TKTsK
KyAgICAgICAgbmV3ICgmZGZuUU5hbWUpIFF1YWxpZmllZE5hbWUobnVsbEF0b20sICJkZm4iLCB4
aHRtbE5TKTsKKyAgICAgICAgbmV3ICgmZGlyUU5hbWUpIFF1YWxpZmllZE5hbWUobnVsbEF0b20s
ICJkaXIiLCB4aHRtbE5TKTsKKyAgICAgICAgbmV3ICgmZGl2UU5hbWUpIFF1YWxpZmllZE5hbWUo
bnVsbEF0b20sICJkaXYiLCB4aHRtbE5TKTsKKyAgICAgICAgbmV3ICgmZGxRTmFtZSkgUXVhbGlm
aWVkTmFtZShudWxsQXRvbSwgImRsIiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJmR0UU5hbWUp
IFF1YWxpZmllZE5hbWUobnVsbEF0b20sICJkdCIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZl
bVFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAiZW0iLCB4aHRtbE5TKTsKKyAgICAgICAg
bmV3ICgmZW1iZWRRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgImVtYmVkIiwgeGh0bWxO
Uyk7CisgICAgICAgIG5ldyAoJmZpZWxkc2V0UU5hbWUpIFF1YWxpZmllZE5hbWUobnVsbEF0b20s
ICJmaWVsZHNldCIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZmb250UU5hbWUpIFF1YWxpZmll
ZE5hbWUobnVsbEF0b20sICJmb250IiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJmZvcm1RTmFt
ZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgImZvcm0iLCB4aHRtbE5TKTsKKyAgICAgICAgbmV3
ICgmZnJhbWVRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgImZyYW1lIiwgeGh0bWxOUyk7
CisgICAgICAgIG5ldyAoJmZyYW1lc2V0UU5hbWUpIFF1YWxpZmllZE5hbWUobnVsbEF0b20sICJm
cmFtZXNldCIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZoZWFkUU5hbWUpIFF1YWxpZmllZE5h
bWUobnVsbEF0b20sICJoZWFkIiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJmgxUU5hbWUpIFF1
YWxpZmllZE5hbWUobnVsbEF0b20sICJoMSIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZoMlFO
YW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAiaDIiLCB4aHRtbE5TKTsKKyAgICAgICAgbmV3
ICgmaDNRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgImgzIiwgeGh0bWxOUyk7CisgICAg
ICAgIG5ldyAoJmg0UU5hbWUpIFF1YWxpZmllZE5hbWUobnVsbEF0b20sICJoNCIsIHhodG1sTlMp
OworICAgICAgICBuZXcgKCZoNVFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAiaDUiLCB4
aHRtbE5TKTsKKyAgICAgICAgbmV3ICgmaDZRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwg
Img2IiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJmhyUU5hbWUpIFF1YWxpZmllZE5hbWUobnVs
bEF0b20sICJociIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZodG1sUU5hbWUpIFF1YWxpZmll
ZE5hbWUobnVsbEF0b20sICJodG1sIiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJmlRTmFtZSkg
UXVhbGlmaWVkTmFtZShudWxsQXRvbSwgImkiLCB4aHRtbE5TKTsKKyAgICAgICAgbmV3ICgmaWZy
YW1lUU5hbWUpIFF1YWxpZmllZE5hbWUobnVsbEF0b20sICJpZnJhbWUiLCB4aHRtbE5TKTsKKyAg
ICAgICAgbmV3ICgmaW1nUU5hbWUpIFF1YWxpZmllZE5hbWUobnVsbEF0b20sICJpbWciLCB4aHRt
bE5TKTsKKyAgICAgICAgbmV3ICgmaW5wdXRRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwg
ImlucHV0IiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJmluc1FOYW1lKSBRdWFsaWZpZWROYW1l
KG51bGxBdG9tLCAiaW5zIiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJmlzaW5kZXhRTmFtZSkg
UXVhbGlmaWVkTmFtZShudWxsQXRvbSwgImlzaW5kZXgiLCB4aHRtbE5TKTsKKyAgICAgICAgbmV3
ICgma2JkUU5hbWUpIFF1YWxpZmllZE5hbWUobnVsbEF0b20sICJrYmQiLCB4aHRtbE5TKTsKKyAg
ICAgICAgbmV3ICgma2V5Z2VuUU5hbWUpIFF1YWxpZmllZE5hbWUobnVsbEF0b20sICJrZXlnZW4i
LCB4aHRtbE5TKTsKKyAgICAgICAgbmV3ICgmbGFiZWxRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxs
QXRvbSwgImxhYmVsIiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJmxheWVyUU5hbWUpIFF1YWxp
ZmllZE5hbWUobnVsbEF0b20sICJsYXllciIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZsZWdl
bmRRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgImxlZ2VuZCIsIHhodG1sTlMpOworICAg
ICAgICBuZXcgKCZsaVFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAibGkiLCB4aHRtbE5T
KTsKKyAgICAgICAgbmV3ICgmbGlua1FOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAibGlu
ayIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZtYXBRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxs
QXRvbSwgIm1hcCIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZtYXJxdWVlUU5hbWUpIFF1YWxp
ZmllZE5hbWUobnVsbEF0b20sICJtYXJxdWVlIiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJm1l
bnVRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgIm1lbnUiLCB4aHRtbE5TKTsKKyAgICAg
ICAgbmV3ICgmbWV0YVFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAibWV0YSIsIHhodG1s
TlMpOworICAgICAgICBuZXcgKCZub2JyUU5hbWUpIFF1YWxpZmllZE5hbWUobnVsbEF0b20sICJu
b2JyIiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJm5vZW1iZWRRTmFtZSkgUXVhbGlmaWVkTmFt
ZShudWxsQXRvbSwgIm5vZW1iZWQiLCB4aHRtbE5TKTsKKyAgICAgICAgbmV3ICgmbm9mcmFtZXNR
TmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgIm5vZnJhbWVzIiwgeGh0bWxOUyk7CisgICAg
ICAgIG5ldyAoJm5vbGF5ZXJRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgIm5vbGF5ZXIi
LCB4aHRtbE5TKTsKKyAgICAgICAgbmV3ICgmbm9zY3JpcHRRTmFtZSkgUXVhbGlmaWVkTmFtZShu
dWxsQXRvbSwgIm5vc2NyaXB0IiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJm9iamVjdFFOYW1l
KSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAib2JqZWN0IiwgeGh0bWxOUyk7CisgICAgICAgIG5l
dyAoJm9sUU5hbWUpIFF1YWxpZmllZE5hbWUobnVsbEF0b20sICJvbCIsIHhodG1sTlMpOworICAg
ICAgICBuZXcgKCZvcHRncm91cFFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAib3B0Z3Jv
dXAiLCB4aHRtbE5TKTsKKyAgICAgICAgbmV3ICgmb3B0aW9uUU5hbWUpIFF1YWxpZmllZE5hbWUo
bnVsbEF0b20sICJvcHRpb24iLCB4aHRtbE5TKTsKKyAgICAgICAgbmV3ICgmcFFOYW1lKSBRdWFs
aWZpZWROYW1lKG51bGxBdG9tLCAicCIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZwYXJhbVFO
YW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAicGFyYW0iLCB4aHRtbE5TKTsKKyAgICAgICAg
bmV3ICgmcGxhaW50ZXh0UU5hbWUpIFF1YWxpZmllZE5hbWUobnVsbEF0b20sICJwbGFpbnRleHQi
LCB4aHRtbE5TKTsKKyAgICAgICAgbmV3ICgmcHJlUU5hbWUpIFF1YWxpZmllZE5hbWUobnVsbEF0
b20sICJwcmUiLCB4aHRtbE5TKTsKKyAgICAgICAgbmV3ICgmcVFOYW1lKSBRdWFsaWZpZWROYW1l
KG51bGxBdG9tLCAicSIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZzUU5hbWUpIFF1YWxpZmll
ZE5hbWUobnVsbEF0b20sICJzIiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJnNhbXBRTmFtZSkg
UXVhbGlmaWVkTmFtZShudWxsQXRvbSwgInNhbXAiLCB4aHRtbE5TKTsKKyAgICAgICAgbmV3ICgm
c2NyaXB0UU5hbWUpIFF1YWxpZmllZE5hbWUobnVsbEF0b20sICJzY3JpcHQiLCB4aHRtbE5TKTsK
KyAgICAgICAgbmV3ICgmc2VsZWN0UU5hbWUpIFF1YWxpZmllZE5hbWUobnVsbEF0b20sICJzZWxl
Y3QiLCB4aHRtbE5TKTsKKyAgICAgICAgbmV3ICgmc21hbGxRTmFtZSkgUXVhbGlmaWVkTmFtZShu
dWxsQXRvbSwgInNtYWxsIiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJnNwYW5RTmFtZSkgUXVh
bGlmaWVkTmFtZShudWxsQXRvbSwgInNwYW4iLCB4aHRtbE5TKTsKKyAgICAgICAgbmV3ICgmc3Ry
aWtlUU5hbWUpIFF1YWxpZmllZE5hbWUobnVsbEF0b20sICJzdHJpa2UiLCB4aHRtbE5TKTsKKyAg
ICAgICAgbmV3ICgmc3Ryb25nUU5hbWUpIFF1YWxpZmllZE5hbWUobnVsbEF0b20sICJzdHJvbmci
LCB4aHRtbE5TKTsKKyAgICAgICAgbmV3ICgmc3R5bGVRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxs
QXRvbSwgInN0eWxlIiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJnN1YlFOYW1lKSBRdWFsaWZp
ZWROYW1lKG51bGxBdG9tLCAic3ViIiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJnN1cFFOYW1l
KSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAic3VwIiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAo
JnRhYmxlUU5hbWUpIFF1YWxpZmllZE5hbWUobnVsbEF0b20sICJ0YWJsZSIsIHhodG1sTlMpOwor
ICAgICAgICBuZXcgKCZ0Ym9keVFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAidGJvZHki
LCB4aHRtbE5TKTsKKyAgICAgICAgbmV3ICgmdGRRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRv
bSwgInRkIiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJnRleHRhcmVhUU5hbWUpIFF1YWxpZmll
ZE5hbWUobnVsbEF0b20sICJ0ZXh0YXJlYSIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZ0Zm9v
dFFOYW1lKSBRdWFsaWZpZWROYW1lKG51bGxBdG9tLCAidGZvb3QiLCB4aHRtbE5TKTsKKyAgICAg
ICAgbmV3ICgmdGhRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgInRoIiwgeGh0bWxOUyk7
CisgICAgICAgIG5ldyAoJnRoZWFkUU5hbWUpIFF1YWxpZmllZE5hbWUobnVsbEF0b20sICJ0aGVh
ZCIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZ0aXRsZVFOYW1lKSBRdWFsaWZpZWROYW1lKG51
bGxBdG9tLCAidGl0bGUiLCB4aHRtbE5TKTsKKyAgICAgICAgbmV3ICgmdHJRTmFtZSkgUXVhbGlm
aWVkTmFtZShudWxsQXRvbSwgInRyIiwgeGh0bWxOUyk7CisgICAgICAgIG5ldyAoJnR0UU5hbWUp
IFF1YWxpZmllZE5hbWUobnVsbEF0b20sICJ0dCIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZ1
UU5hbWUpIFF1YWxpZmllZE5hbWUobnVsbEF0b20sICJ1IiwgeGh0bWxOUyk7CisgICAgICAgIG5l
dyAoJnVsUU5hbWUpIFF1YWxpZmllZE5hbWUobnVsbEF0b20sICJ1bCIsIHhodG1sTlMpOworICAg
ICAgICBuZXcgKCZ2YXJRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgInZhciIsIHhodG1s
TlMpOworICAgICAgICBuZXcgKCZ3YnJRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgIndi
ciIsIHhodG1sTlMpOworICAgICAgICBuZXcgKCZ4bXBRTmFtZSkgUXVhbGlmaWVkTmFtZShudWxs
QXRvbSwgInhtcCIsIHhodG1sTlMpOworICAgICAgICBpbml0aWFsaXplZCA9IHRydWU7CisgICAg
fQogfQogCiB9CkluZGV4OiBraHRtbC9odG1sL2h0bWxuYW1lcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbG5hbWVzLmgsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuMgpkaWZmIC11IC1wIC1yMS4yIGtodG1sL2h0bWwvaHRtbG5hbWVzLmgKLS0t
IGtodG1sL2h0bWwvaHRtbG5hbWVzLmgJMTYgSnVuIDIwMDUgMjA6MzM6NTcgLTAwMDAJMS4yCisr
KyBraHRtbC9odG1sL2h0bWxuYW1lcy5oCTkgSnVsIDIwMDUgMDI6NDM6MDggLTAwMDAKQEAgLTIy
LDExMiArMjIsMjQyIEBACiAjaWZuZGVmIEhUTUxOQU1FU19ICiAjZGVmaW5lIEhUTUxOQU1FU19I
CiAKLSNpbmNsdWRlICJ4bWwvZG9tX2VsZW1lbnRpbXBsLmgiCisjaW5jbHVkZSAiZG9tX3FuYW1l
LmgiCiAKIG5hbWVzcGFjZSBET00KIHsKIAogY2xhc3MgUXVhbGlmaWVkTmFtZTsKIAorLy8gVGhl
IGdsb2JhbHMuCisvLyBEZWZpbmUgZXh0ZXJuYWwgZ2xvYmFsIHZhcmlhYmxlcyBmb3IgYWxsIEhU
TUwgbmFtZXMgYWJvdmUuCisjaWYgIUtIVE1MX0hUTUxOQU1FU19ISURFX0dMT0JBTFMKKyAgICBl
eHRlcm4gY29uc3QgQXRvbWljU3RyaW5nICB4aHRtbE5hbWVzcGFjZVVSSUF0b207CisgICAgZXh0
ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgYVFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZp
ZWROYW1lIGFiYnJRTmFtZTsKKyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSBhY3Jvbnlt
UU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgYWRkcmVzc1FOYW1lOworICAg
IGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIGFwcGxldFFOYW1lOworICAgIGV4dGVybiBjb25z
dCBRdWFsaWZpZWROYW1lIGFyZWFRTmFtZTsKKyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFt
ZSBiUU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgYmFzZVFOYW1lOworICAg
IGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIGJhc2Vmb250UU5hbWU7CisgICAgZXh0ZXJuIGNv
bnN0IFF1YWxpZmllZE5hbWUgYmRvUU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5h
bWUgYmlnUU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgYmxvY2txdW90ZVFO
YW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIGJvZHlRTmFtZTsKKyAgICBleHRl
cm4gY29uc3QgUXVhbGlmaWVkTmFtZSBiclFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZp
ZWROYW1lIGJ1dHRvblFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIGNhbnZh
c1FOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIGNhcHRpb25RTmFtZTsKKyAg
ICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSBjZW50ZXJRTmFtZTsKKyAgICBleHRlcm4gY29u
c3QgUXVhbGlmaWVkTmFtZSBjaXRlUU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5h
bWUgY29kZVFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIGNvbFFOYW1lOwor
ICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIGNvbGdyb3VwUU5hbWU7CisgICAgZXh0ZXJu
IGNvbnN0IFF1YWxpZmllZE5hbWUgZGRRTmFtZTsKKyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVk
TmFtZSBkZWxRTmFtZTsKKyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSBkZm5RTmFtZTsK
KyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSBkaXJRTmFtZTsKKyAgICBleHRlcm4gY29u
c3QgUXVhbGlmaWVkTmFtZSBkaXZRTmFtZTsKKyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFt
ZSBkbFFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIGR0UU5hbWU7CisgICAg
ZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgZW1RTmFtZTsKKyAgICBleHRlcm4gY29uc3QgUXVh
bGlmaWVkTmFtZSBlbWJlZFFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIGZp
ZWxkc2V0UU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgZm9udFFOYW1lOwor
ICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIGZvcm1RTmFtZTsKKyAgICBleHRlcm4gY29u
c3QgUXVhbGlmaWVkTmFtZSBmcmFtZVFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWRO
YW1lIGZyYW1lc2V0UU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgaGVhZFFO
YW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIGgxUU5hbWU7CisgICAgZXh0ZXJu
IGNvbnN0IFF1YWxpZmllZE5hbWUgaDJRTmFtZTsKKyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVk
TmFtZSBoM1FOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIGg0UU5hbWU7Cisg
ICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgaDVRTmFtZTsKKyAgICBleHRlcm4gY29uc3Qg
UXVhbGlmaWVkTmFtZSBoNlFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIGhy
UU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgaHRtbFFOYW1lOworICAgIGV4
dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIGlRTmFtZTsKKyAgICBleHRlcm4gY29uc3QgUXVhbGlm
aWVkTmFtZSBpZnJhbWVRTmFtZTsKKyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSBpbWdR
TmFtZTsKKyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSBpbnB1dFFOYW1lOworICAgIGV4
dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIGluc1FOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFs
aWZpZWROYW1lIGlzaW5kZXhRTmFtZTsKKyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSBr
YmRRTmFtZTsKKyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSBrZXlnZW5RTmFtZTsKKyAg
ICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSBsYWJlbFFOYW1lOworICAgIGV4dGVybiBjb25z
dCBRdWFsaWZpZWROYW1lIGxheWVyUU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5h
bWUgbGVnZW5kUU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgbGlRTmFtZTsK
KyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSBsaW5rUU5hbWU7CisgICAgZXh0ZXJuIGNv
bnN0IFF1YWxpZmllZE5hbWUgbWFwUU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5h
bWUgbWFycXVlZVFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIG1lbnVRTmFt
ZTsKKyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSBtZXRhUU5hbWU7CisgICAgZXh0ZXJu
IGNvbnN0IFF1YWxpZmllZE5hbWUgbm9iclFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZp
ZWROYW1lIG5vZW1iZWRRTmFtZTsKKyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSBub2Zy
YW1lc1FOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIG5vbGF5ZXJRTmFtZTsK
KyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSBub3NjcmlwdFFOYW1lOworICAgIGV4dGVy
biBjb25zdCBRdWFsaWZpZWROYW1lIG9iamVjdFFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFs
aWZpZWROYW1lIG9sUU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgb3B0Z3Jv
dXBRTmFtZTsKKyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSBvcHRpb25RTmFtZTsKKyAg
ICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSBwUU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1
YWxpZmllZE5hbWUgcGFyYW1RTmFtZTsKKyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSBw
bGFpbnRleHRRTmFtZTsKKyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSBwcmVRTmFtZTsK
KyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSBxUU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0
IFF1YWxpZmllZE5hbWUgc1FOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIHNh
bXBRTmFtZTsKKyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSBzY3JpcHRRTmFtZTsKKyAg
ICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSBzZWxlY3RRTmFtZTsKKyAgICBleHRlcm4gY29u
c3QgUXVhbGlmaWVkTmFtZSBzbWFsbFFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWRO
YW1lIHNwYW5RTmFtZTsKKyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSBzdHJpa2VRTmFt
ZTsKKyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSBzdHJvbmdRTmFtZTsKKyAgICBleHRl
cm4gY29uc3QgUXVhbGlmaWVkTmFtZSBzdHlsZVFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFs
aWZpZWROYW1lIHN1YlFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIHN1cFFO
YW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIHRhYmxlUU5hbWU7CisgICAgZXh0
ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgdGJvZHlRTmFtZTsKKyAgICBleHRlcm4gY29uc3QgUXVh
bGlmaWVkTmFtZSB0ZFFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIHRleHRh
cmVhUU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgdGZvb3RRTmFtZTsKKyAg
ICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSB0aFFOYW1lOworICAgIGV4dGVybiBjb25zdCBR
dWFsaWZpZWROYW1lIHRoZWFkUU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUg
dGl0bGVRTmFtZTsKKyAgICBleHRlcm4gY29uc3QgUXVhbGlmaWVkTmFtZSB0clFOYW1lOworICAg
IGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIHR0UU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1
YWxpZmllZE5hbWUgdVFOYW1lOworICAgIGV4dGVybiBjb25zdCBRdWFsaWZpZWROYW1lIHVsUU5h
bWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmllZE5hbWUgdmFyUU5hbWU7CisgICAgZXh0ZXJu
IGNvbnN0IFF1YWxpZmllZE5hbWUgd2JyUU5hbWU7CisgICAgZXh0ZXJuIGNvbnN0IFF1YWxpZmll
ZE5hbWUgeG1wUU5hbWU7CisKKyNlbmRpZgorCisvLyBGSVhNRTogTWFrZSB0aGlzIGEgbmFtZXNw
YWNlIGluc3RlYWQgb2YgYSBjbGFzcy4KIGNsYXNzIEhUTUxOYW1lcwogewogcHVibGljOgorI2lm
ICFLSFRNTF9IVE1MTkFNRVNfSElERV9HTE9CQUxTCiAgICAgLy8gVGhlIG5hbWVzcGFjZSBVUkku
Ci0gICAgc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyYgeGh0bWxOYW1lc3BhY2VVUkkoKTsKKyAg
ICBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiB4aHRtbE5hbWVzcGFjZVVSSSgpIHsgcmV0dXJu
IHhodG1sTmFtZXNwYWNlVVJJQXRvbTsgfQogICAgIAotICAgIC8vIEZ1bGwgdGFnIG5hbWVzLgot
ICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBhKCk7Ci0gICAgc3RhdGljIGNvbnN0IFF1
YWxpZmllZE5hbWUmIGFkZHJlc3MoKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYg
YXBwbGV0KCk7Ci0gICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGFyZWEoKTsKLSAgICBz
dGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgYigpOwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZp
ZWROYW1lJiBiYXNlKCk7Ci0gICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGJhc2Vmb250
KCk7Ci0gICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGJpZygpOwotICAgIHN0YXRpYyBj
b25zdCBRdWFsaWZpZWROYW1lJiBibG9ja3F1b3RlKCk7Ci0gICAgc3RhdGljIGNvbnN0IFF1YWxp
ZmllZE5hbWUmIGJvZHkoKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgYnIoKTsK
LSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgYnV0dG9uKCk7Ci0gICAgc3RhdGljIGNv
bnN0IFF1YWxpZmllZE5hbWUmIGNhbnZhcygpOwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWRO
YW1lJiBjYXB0aW9uKCk7Ci0gICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGNlbnRlcigp
OwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBjb2RlKCk7Ci0gICAgc3RhdGljIGNv
bnN0IFF1YWxpZmllZE5hbWUmIGNvbCgpOwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1l
JiBjb2xncm91cCgpOwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBkZCgpOwotICAg
IHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBkZWwoKTsKLSAgICBzdGF0aWMgY29uc3QgUXVh
bGlmaWVkTmFtZSYgZGZuKCk7Ci0gICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGRpcigp
OwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBkaXYoKTsKLSAgICBzdGF0aWMgY29u
c3QgUXVhbGlmaWVkTmFtZSYgZGwoKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYg
ZHQoKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgZW0oKTsKLSAgICBzdGF0aWMg
Y29uc3QgUXVhbGlmaWVkTmFtZSYgZW1iZWQoKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVk
TmFtZSYgZmllbGRzZXQoKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgZm9udCgp
OwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBmb3JtKCk7Ci0gICAgc3RhdGljIGNv
bnN0IFF1YWxpZmllZE5hbWUmIGZyYW1lKCk7Ci0gICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5h
bWUmIGZyYW1lc2V0KCk7Ci0gICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGhlYWQoKTsK
LSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgaDEoKTsKLSAgICBzdGF0aWMgY29uc3Qg
UXVhbGlmaWVkTmFtZSYgaDIoKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgaDMo
KTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgaDQoKTsKLSAgICBzdGF0aWMgY29u
c3QgUXVhbGlmaWVkTmFtZSYgaDUoKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYg
aDYoKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgaHIoKTsKLSAgICBzdGF0aWMg
Y29uc3QgUXVhbGlmaWVkTmFtZSYgaHRtbCgpOwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWRO
YW1lJiBpKCk7Ci0gICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGlmcmFtZSgpOwotICAg
IHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBpbWcoKTsKLSAgICBzdGF0aWMgY29uc3QgUXVh
bGlmaWVkTmFtZSYgaW5wdXQoKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgaW5z
KCk7Ci0gICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGlzaW5kZXgoKTsKLSAgICBzdGF0
aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYga2JkKCk7Ci0gICAgc3RhdGljIGNvbnN0IFF1YWxpZmll
ZE5hbWUmIGtleWdlbigpOwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBsYWJlbCgp
OwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBsZWdlbmQoKTsKLSAgICBzdGF0aWMg
Y29uc3QgUXVhbGlmaWVkTmFtZSYgbGkoKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFt
ZSYgbGluaygpOwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBtYXAoKTsKLSAgICBz
dGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgbWFycXVlZSgpOwotICAgIHN0YXRpYyBjb25zdCBR
dWFsaWZpZWROYW1lJiBtZW51KCk7Ci0gICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIG1l
dGEoKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgbm9lbWJlZCgpOwotICAgIHN0
YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBub2ZyYW1lcygpOwotICAgIHN0YXRpYyBjb25zdCBR
dWFsaWZpZWROYW1lJiBub3NjcmlwdCgpOwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1l
JiBvYmplY3QoKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgb2woKTsKLSAgICBz
dGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgb3B0Z3JvdXAoKTsKLSAgICBzdGF0aWMgY29uc3Qg
UXVhbGlmaWVkTmFtZSYgb3B0aW9uKCk7Ci0gICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUm
IHAoKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgcGFyYW0oKTsKLSAgICBzdGF0
aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgcHJlKCk7Ci0gICAgc3RhdGljIGNvbnN0IFF1YWxpZmll
ZE5hbWUmIHEoKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgcygpOwotICAgIHN0
YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBzYW1wKCk7Ci0gICAgc3RhdGljIGNvbnN0IFF1YWxp
ZmllZE5hbWUmIHNjcmlwdCgpOwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBzZWxl
Y3QoKTsKLSAgICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgc21hbGwoKTsKLSAgICBzdGF0
aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgc3RyaWtlKCk7Ci0gICAgc3RhdGljIGNvbnN0IFF1YWxp
ZmllZE5hbWUmIHN0cm9uZygpOwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBzdHls
ZSgpOwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiB0YWJsZSgpOwotICAgIHN0YXRp
YyBjb25zdCBRdWFsaWZpZWROYW1lJiB0Ym9keSgpOwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZp
ZWROYW1lJiB0ZCgpOwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiB0ZXh0YXJlYSgp
OwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiB0Zm9vdCgpOwotICAgIHN0YXRpYyBj
b25zdCBRdWFsaWZpZWROYW1lJiB0aCgpOwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1l
JiB0aGVhZCgpOwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiB0aXRsZSgpOwotICAg
IHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiB0cigpOwotICAgIHN0YXRpYyBjb25zdCBRdWFs
aWZpZWROYW1lJiB0dCgpOwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiB1KCk7Ci0g
ICAgc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIHVsKCk7Ci0gICAgc3RhdGljIGNvbnN0IFF1
YWxpZmllZE5hbWUmIHZhcigpOwotICAgIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiB4bXAo
KTsKKy8vIEZ1bGwgdGFnIG5hbWVzLgorI2RlZmluZSBERUZJTkVfR0VUVEVSKG5hbWUpIFwKKyAg
ICBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSgpIHsgcmV0dXJuIG5hbWUgIyMgUU5h
bWU7IH0KKworICAgIERFRklORV9HRVRURVIoYSkKKyAgICBERUZJTkVfR0VUVEVSKGFiYnIpCisg
ICAgREVGSU5FX0dFVFRFUihhY3JvbnltKQorICAgIERFRklORV9HRVRURVIoYWRkcmVzcykKKyAg
ICBERUZJTkVfR0VUVEVSKGFwcGxldCkKKyAgICBERUZJTkVfR0VUVEVSKGFyZWEpCisgICAgREVG
SU5FX0dFVFRFUihiKQorICAgIERFRklORV9HRVRURVIoYmFzZSkKKyAgICBERUZJTkVfR0VUVEVS
KGJhc2Vmb250KQorICAgIERFRklORV9HRVRURVIoYmRvKQorICAgIERFRklORV9HRVRURVIoYmln
KQorICAgIERFRklORV9HRVRURVIoYmxvY2txdW90ZSkKKyAgICBERUZJTkVfR0VUVEVSKGJvZHkp
CisgICAgREVGSU5FX0dFVFRFUihicikKKyAgICBERUZJTkVfR0VUVEVSKGJ1dHRvbikKKyAgICBE
RUZJTkVfR0VUVEVSKGNhbnZhcykKKyAgICBERUZJTkVfR0VUVEVSKGNhcHRpb24pCisgICAgREVG
SU5FX0dFVFRFUihjZW50ZXIpCisgICAgREVGSU5FX0dFVFRFUihjaXRlKQorICAgIERFRklORV9H
RVRURVIoY29kZSkKKyAgICBERUZJTkVfR0VUVEVSKGNvbCkKKyAgICBERUZJTkVfR0VUVEVSKGNv
bGdyb3VwKQorICAgIERFRklORV9HRVRURVIoZGQpCisgICAgREVGSU5FX0dFVFRFUihkZWwpCisg
ICAgREVGSU5FX0dFVFRFUihkZm4pCisgICAgREVGSU5FX0dFVFRFUihkaXIpCisgICAgREVGSU5F
X0dFVFRFUihkaXYpCisgICAgREVGSU5FX0dFVFRFUihkbCkKKyAgICBERUZJTkVfR0VUVEVSKGR0
KQorICAgIERFRklORV9HRVRURVIoZW0pCisgICAgREVGSU5FX0dFVFRFUihlbWJlZCkKKyAgICBE
RUZJTkVfR0VUVEVSKGZpZWxkc2V0KQorICAgIERFRklORV9HRVRURVIoZm9udCkKKyAgICBERUZJ
TkVfR0VUVEVSKGZvcm0pCisgICAgREVGSU5FX0dFVFRFUihmcmFtZSkKKyAgICBERUZJTkVfR0VU
VEVSKGZyYW1lc2V0KQorICAgIERFRklORV9HRVRURVIoaGVhZCkKKyAgICBERUZJTkVfR0VUVEVS
KGgxKQorICAgIERFRklORV9HRVRURVIoaDIpCisgICAgREVGSU5FX0dFVFRFUihoMykKKyAgICBE
RUZJTkVfR0VUVEVSKGg0KQorICAgIERFRklORV9HRVRURVIoaDUpCisgICAgREVGSU5FX0dFVFRF
UihoNikKKyAgICBERUZJTkVfR0VUVEVSKGhyKQorICAgIERFRklORV9HRVRURVIoaHRtbCkKKyAg
ICBERUZJTkVfR0VUVEVSKGkpCisgICAgREVGSU5FX0dFVFRFUihpZnJhbWUpCisgICAgREVGSU5F
X0dFVFRFUihpbWcpCisgICAgREVGSU5FX0dFVFRFUihpbnB1dCkKKyAgICBERUZJTkVfR0VUVEVS
KGlucykKKyAgICBERUZJTkVfR0VUVEVSKGlzaW5kZXgpCisgICAgREVGSU5FX0dFVFRFUihrYmQp
CisgICAgREVGSU5FX0dFVFRFUihrZXlnZW4pCisgICAgREVGSU5FX0dFVFRFUihsYWJlbCkKKyAg
ICBERUZJTkVfR0VUVEVSKGxheWVyKQorICAgIERFRklORV9HRVRURVIobGVnZW5kKQorICAgIERF
RklORV9HRVRURVIobGkpCisgICAgREVGSU5FX0dFVFRFUihsaW5rKQorICAgIERFRklORV9HRVRU
RVIobWFwKQorICAgIERFRklORV9HRVRURVIobWFycXVlZSkKKyAgICBERUZJTkVfR0VUVEVSKG1l
bnUpCisgICAgREVGSU5FX0dFVFRFUihtZXRhKQorICAgIERFRklORV9HRVRURVIobm9icikKKyAg
ICBERUZJTkVfR0VUVEVSKG5vZW1iZWQpCisgICAgREVGSU5FX0dFVFRFUihub2ZyYW1lcykKKyAg
ICBERUZJTkVfR0VUVEVSKG5vbGF5ZXIpCisgICAgREVGSU5FX0dFVFRFUihub3NjcmlwdCkKKyAg
ICBERUZJTkVfR0VUVEVSKG9iamVjdCkKKyAgICBERUZJTkVfR0VUVEVSKG9sKQorICAgIERFRklO
RV9HRVRURVIob3B0Z3JvdXApCisgICAgREVGSU5FX0dFVFRFUihvcHRpb24pCisgICAgREVGSU5F
X0dFVFRFUihwKQorICAgIERFRklORV9HRVRURVIocGFyYW0pCisgICAgREVGSU5FX0dFVFRFUihw
bGFpbnRleHQpCisgICAgREVGSU5FX0dFVFRFUihwcmUpCisgICAgREVGSU5FX0dFVFRFUihxKQor
ICAgIERFRklORV9HRVRURVIocykKKyAgICBERUZJTkVfR0VUVEVSKHNhbXApCisgICAgREVGSU5F
X0dFVFRFUihzY3JpcHQpCisgICAgREVGSU5FX0dFVFRFUihzZWxlY3QpCisgICAgREVGSU5FX0dF
VFRFUihzbWFsbCkKKyAgICBERUZJTkVfR0VUVEVSKHNwYW4pCisgICAgREVGSU5FX0dFVFRFUihz
dHJpa2UpCisgICAgREVGSU5FX0dFVFRFUihzdHJvbmcpCisgICAgREVGSU5FX0dFVFRFUihzdHls
ZSkKKyAgICBERUZJTkVfR0VUVEVSKHN1YikKKyAgICBERUZJTkVfR0VUVEVSKHN1cCkKKyAgICBE
RUZJTkVfR0VUVEVSKHRhYmxlKQorICAgIERFRklORV9HRVRURVIodGJvZHkpCisgICAgREVGSU5F
X0dFVFRFUih0ZCkKKyAgICBERUZJTkVfR0VUVEVSKHRleHRhcmVhKQorICAgIERFRklORV9HRVRU
RVIodGZvb3QpCisgICAgREVGSU5FX0dFVFRFUih0aCkKKyAgICBERUZJTkVfR0VUVEVSKHRoZWFk
KQorICAgIERFRklORV9HRVRURVIodGl0bGUpCisgICAgREVGSU5FX0dFVFRFUih0cikKKyAgICBE
RUZJTkVfR0VUVEVSKHR0KQorICAgIERFRklORV9HRVRURVIodSkKKyAgICBERUZJTkVfR0VUVEVS
KHVsKQorICAgIERFRklORV9HRVRURVIodmFyKQorICAgIERFRklORV9HRVRURVIod2JyKQorICAg
IERFRklORV9HRVRURVIoeG1wKQogCiAgICAgLy8gQXR0cmlidXRlIG5hbWVzLgorI2VuZGlmCisK
KyAgICAvLyBJbml0IHJvdXRpbmUKKyAgICBzdGF0aWMgdm9pZCBpbml0KCk7CiB9OwogCiB9Cklu
ZGV4OiBraHRtbC9odG1sL2h0bWxwYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbHBhcnNlci5jcHAsdgpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuOTYKZGlmZiAtdSAtcCAtcjEuOTYga2h0bWwvaHRtbC9odG1scGFyc2VyLmNwcAotLS0g
a2h0bWwvaHRtbC9odG1scGFyc2VyLmNwcAkxMSBNYXkgMjAwNSAwMDo1ODoyOCAtMDAwMAkxLjk2
CisrKyBraHRtbC9odG1sL2h0bWxwYXJzZXIuY3BwCTkgSnVsIDIwMDUgMDI6NDM6MDkgLTAwMDAK
QEAgLTQ0LDkgKzQ0LDEyIEBACiAjaW5jbHVkZSAiaHRtbC9odG1sX21pc2NpbXBsLmgiCiAjaW5j
bHVkZSAiaHRtbC9odG1sX3RhYmxlaW1wbC5oIgogI2luY2x1ZGUgImh0bWwvaHRtbF9vYmplY3Rp
bXBsLmgiCisjaW5jbHVkZSAiaHRtbGZhY3RvcnkuaCIKICNpbmNsdWRlICJ4bWwvZG9tX3RleHRp
bXBsLmgiCiAjaW5jbHVkZSAieG1sL2RvbV9ub2RlaW1wbC5oIgogI2luY2x1ZGUgIm1pc2MvaHRt
bGhhc2hlcy5oIgorI2luY2x1ZGUgIm1pc2MvbWFpbl90aHJlYWRfbWFsbG9jLmgiCisjaW5jbHVk
ZSAibWlzYy9oYXNoc2V0LmgiCiAjaW5jbHVkZSAiaHRtbC9odG1sdG9rZW5pemVyLmgiCiAjaW5j
bHVkZSAia2h0bWx2aWV3LmgiCiAjaW5jbHVkZSAia2h0bWxfcGFydC5oIgpAQCAtNTUsNiArNTgs
OCBAQAogCiAjaW5jbHVkZSAicmVuZGVyaW5nL3JlbmRlcl9vYmplY3QuaCIKIAorI2luY2x1ZGUg
Im1pc2MvcG9pbnRlcmhhc2guaCIKKwogI2luY2x1ZGUgPGtkZWJ1Zy5oPgogI2luY2x1ZGUgPGts
b2NhbGUuaD4KIApAQCAtNjksMjQgKzc0LDI2IEBAIHVzaW5nIG5hbWVzcGFjZSBraHRtbDsKIGNs
YXNzIEhUTUxTdGFja0VsZW0KIHsKIHB1YmxpYzoKLSAgICBIVE1MU3RhY2tFbGVtKCBpbnQgX2lk
LAotICAgICAgICAgICAgICAgICAgIGludCBfbGV2ZWwsCi0gICAgICAgICAgICAgICAgICAgRE9N
OjpOb2RlSW1wbCAqX25vZGUsCi0gICAgICAgICAgICAgICAgICAgSFRNTFN0YWNrRWxlbSAqIF9u
ZXh0CisgICAgSFRNTFN0YWNrRWxlbShjb25zdCBBdG9taWNTdHJpbmcmIF90YWdOYW1lLAorICAg
ICAgICAgICAgICAgICAgaW50IF9sZXZlbCwKKyAgICAgICAgICAgICAgICAgIERPTTo6Tm9kZUlt
cGwgKl9ub2RlLAorICAgICAgICAgICAgICAgICAgSFRNTFN0YWNrRWxlbSAqIF9uZXh0CiAgICAg
ICAgICkKICAgICAgICAgOgotICAgICAgICBpZChfaWQpLAorICAgICAgICB0YWdOYW1lKF90YWdO
YW1lKSwKICAgICAgICAgbGV2ZWwoX2xldmVsKSwKICAgICAgICAgc3RyYXlUYWJsZUNvbnRlbnQo
ZmFsc2UpLAogICAgICAgICBub2RlKF9ub2RlKSwKICAgICAgICAgbmV4dChfbmV4dCkKICAgICAg
ICAgeyB9CiAKLSAgICBpbnQgICAgICAgaWQ7Ci0gICAgaW50ICAgICAgIGxldmVsOwotICAgIGJv
b2wgICAgICBzdHJheVRhYmxlQ29udGVudDsKLSAgICBOb2RlSW1wbCAqbm9kZTsKLSAgICBIVE1M
U3RhY2tFbGVtICpuZXh0OworICAgIE1BSU5fVEhSRUFEX0FMTE9DQVRFRDsKKworICAgIEF0b21p
Y1N0cmluZyB0YWdOYW1lOworICAgIGludCBsZXZlbDsKKyAgICBib29sIHN0cmF5VGFibGVDb250
ZW50OworICAgIE5vZGVJbXBsKiBub2RlOworICAgIEhUTUxTdGFja0VsZW0qIG5leHQ7CiB9Owog
CiAvKioKQEAgLTExMiwxNCArMTE5LDkgQEAgcHVibGljOgogICogICAgZWxlbWVudCBvciBpZ25v
cmUgdGhlIHRhZy4KICAqCiAgKi8KLUtIVE1MUGFyc2VyOjpLSFRNTFBhcnNlcihLSFRNTFZpZXcg
Kl9wYXJlbnQsIERvY3VtZW50UHRyICpkb2MsIGJvb2wgaW5jbHVkZXNDb21tZW50cykgCitIVE1M
UGFyc2VyOjpIVE1MUGFyc2VyKEtIVE1MVmlldyAqX3BhcmVudCwgRG9jdW1lbnRQdHIgKmRvYywg
Ym9vbCBpbmNsdWRlc0NvbW1lbnRzKSAKICAgICA6IGN1cnJlbnQoMCksIGN1cnJlbnRJc1JlZmVy
ZW5jZWQoZmFsc2UpLCBpbmNsdWRlc0NvbW1lbnRzSW5ET00oaW5jbHVkZXNDb21tZW50cykKIHsK
LSAgICAvL2tkRGVidWcoIDYwMzUgKSA8PCAicGFyc2VyIGNvbnN0cnVjdG9yIiA8PCBlbmRsOwot
I2lmIFNQRUVEX0RFQlVHID4gMAotICAgIHF0LnN0YXJ0KCk7Ci0jZW5kaWYKLQogICAgIEhUTUxX
aWRnZXQgICAgPSBfcGFyZW50OwogICAgIGRvY3VtZW50ICAgICAgPSBkb2M7CiAgICAgZG9jdW1l
bnQtPnJlZigpOwpAQCAtMTI5LDcgKzEzMSw3IEBAIEtIVE1MUGFyc2VyOjpLSFRNTFBhcnNlcihL
SFRNTFZpZXcgKl9wYXIKICAgICByZXNldCgpOwogfQogCi1LSFRNTFBhcnNlcjo6S0hUTUxQYXJz
ZXIoRE9NOjpEb2N1bWVudEZyYWdtZW50SW1wbCAqaSwgRG9jdW1lbnRQdHIgKmRvYywgYm9vbCBp
bmNsdWRlc0NvbW1lbnRzKQorSFRNTFBhcnNlcjo6SFRNTFBhcnNlcihET006OkRvY3VtZW50RnJh
Z21lbnRJbXBsICppLCBEb2N1bWVudFB0ciAqZG9jLCBib29sIGluY2x1ZGVzQ29tbWVudHMpCiAg
ICAgOiBjdXJyZW50KDApLCBjdXJyZW50SXNSZWZlcmVuY2VkKGZhbHNlKSwgaW5jbHVkZXNDb21t
ZW50c0luRE9NKGluY2x1ZGVzQ29tbWVudHMpCiB7CiAgICAgSFRNTFdpZGdldCA9IDA7CkBAIC0x
NDMsMTIgKzE0NSw4IEBAIEtIVE1MUGFyc2VyOjpLSFRNTFBhcnNlcihET006OkRvY3VtZW50RnIK
ICAgICBpbkJvZHkgPSB0cnVlOwogfQogCi1LSFRNTFBhcnNlcjo6fktIVE1MUGFyc2VyKCkKK0hU
TUxQYXJzZXI6On5IVE1MUGFyc2VyKCkKIHsKLSNpZiBTUEVFRF9ERUJVRyA+IDAKLSAgICBrZERl
YnVnKCApIDw8ICJUSU1FOiBwYXJzaW5nIHRpbWUgd2FzID0gIiA8PCBxdC5lbGFwc2VkKCkgPDwg
ZW5kbDsKLSNlbmRpZgotCiAgICAgZnJlZUJsb2NrKCk7CiAKICAgICBzZXRDdXJyZW50KDApOwpA
QCAtMTU5LDE1ICsxNTcsMTIgQEAgS0hUTUxQYXJzZXI6On5LSFRNTFBhcnNlcigpCiAgICAgICAg
IGlzaW5kZXgtPmRlcmVmKCk7CiB9CiAKLXZvaWQgS0hUTUxQYXJzZXI6OnJlc2V0KCkKK3ZvaWQg
SFRNTFBhcnNlcjo6cmVzZXQoKQogewogICAgIHNldEN1cnJlbnQoZG9jKCkpOwogCiAgICAgZnJl
ZUJsb2NrKCk7CiAKLSAgICAvLyBiZWZvcmUgcGFyc2luZywgbm8gdGFncyBhcmUgZm9yYmlkZGVu
Ci0gICAgbWVtc2V0KGZvcmJpZGRlblRhZywgMCwgc2l6ZW9mKGZvcmJpZGRlblRhZykpOwotCiAg
ICAgaW5Cb2R5ID0gZmFsc2U7CiAgICAgaGF2ZUZyYW1lU2V0ID0gZmFsc2U7CiAgICAgaGF2ZUNv
bnRlbnQgPSBmYWxzZTsKQEAgLTE4MCwxMCArMTc1LDEwIEBAIHZvaWQgS0hUTUxQYXJzZXI6OnJl
c2V0KCkKICAgICBlbmQgPSBmYWxzZTsKICAgICBpc2luZGV4ID0gMDsKICAgICAKLSAgICBkaXNj
YXJkX3VudGlsID0gMDsKKyAgICBkaXNjYXJkX3VudGlsID0gbnVsbEF0b207CiB9CiAKLXZvaWQg
S0hUTUxQYXJzZXI6OnNldEN1cnJlbnQoRE9NOjpOb2RlSW1wbCAqbmV3Q3VycmVudCkgCit2b2lk
IEhUTUxQYXJzZXI6OnNldEN1cnJlbnQoRE9NOjpOb2RlSW1wbCAqbmV3Q3VycmVudCkgCiB7CiAg
ICAgYm9vbCBuZXdDdXJyZW50SXNSZWZlcmVuY2VkID0gbmV3Q3VycmVudCAmJiBuZXdDdXJyZW50
ICE9IGRvYygpOwogICAgIGlmIChuZXdDdXJyZW50SXNSZWZlcmVuY2VkKSAKQEAgLTE5NCwxNDQg
KzE4OSwxMDggQEAgdm9pZCBLSFRNTFBhcnNlcjo6c2V0Q3VycmVudChET006Ok5vZGVJbQogICAg
IGN1cnJlbnRJc1JlZmVyZW5jZWQgPSBuZXdDdXJyZW50SXNSZWZlcmVuY2VkOwogfQogCi12b2lk
IEtIVE1MUGFyc2VyOjpwYXJzZVRva2VuKFRva2VuICp0KQordm9pZCBIVE1MUGFyc2VyOjpwYXJz
ZVRva2VuKFRva2VuICp0KQogewotICAgIGlmKGRpc2NhcmRfdW50aWwpIHsKLSAgICAgICAgaWYo
dC0+aWQgPT0gZGlzY2FyZF91bnRpbCkKLSAgICAgICAgICAgIGRpc2NhcmRfdW50aWwgPSAwOwor
ICAgIGlmICghZGlzY2FyZF91bnRpbC5pc051bGwoKSkgeworICAgICAgICBpZiAodC0+dGFnTmFt
ZSA9PSBkaXNjYXJkX3VudGlsICYmICF0LT5iZWdpblRhZykKKyAgICAgICAgICAgIGRpc2NhcmRf
dW50aWwgPSBudWxsQXRvbTsKIAogICAgICAgICAvLyBkbyBub3Qgc2tpcCA8L2lmcmFtZT4KLSAg
ICAgICAgaWYgKCBkaXNjYXJkX3VudGlsIHx8IGN1cnJlbnQtPmlkKCkgKyBJRF9DTE9TRV9UQUcg
IT0gdC0+aWQgKQorICAgICAgICBpZiAoIWRpc2NhcmRfdW50aWwuaXNOdWxsKCkgfHwgKGN1cnJl
bnQtPmxvY2FsTmFtZSgpICE9IHQtPnRhZ05hbWUpKQogICAgICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotI2lmZGVmIFBBUlNFUl9ERUJVRwotICAgIGtkRGVidWcoIDYwMzUgKSA8PCAiXG5cbj09
PiBwYXJzZXI6IHByb2Nlc3NpbmcgdG9rZW4gIiA8PCBnZXRUYWdOYW1lKHQtPmlkKS5zdHJpbmco
KSA8PCAiKCIgPDwgdC0+aWQgPDwgIikiCi0gICAgICAgICAgICAgICAgICAgIDw8ICIgY3VycmVu
dCA9ICIgPDwgZ2V0VGFnTmFtZShjdXJyZW50LT5pZCgpKS5zdHJpbmcoKSA8PCAiKCIgPDwgY3Vy
cmVudC0+aWQoKSA8PCAiKSIgPDwgZW5kbDsKLSAgICBrZERlYnVnKDYwMzUpIDw8ICIgaW5Cb2R5
PSIgPDwgaW5Cb2R5IDw8ICIgaGF2ZUZyYW1lU2V0PSIgPDwgaGF2ZUZyYW1lU2V0IDw8IGVuZGw7
Ci0jZW5kaWYKKyAgICAvLyBBcHBhcmVudGx5IHNvbWUgc2l0ZXMgdXNlIDwvYnI+IGluc3RlYWQg
b2YgPGJyPi4gIEJlIGNvbXBhdGlibGUgd2l0aCBJRSBhbmQgRmlyZWZveCBhbmQgdHJlYXQgdGhp
cyBsaWtlIDxicj4uCisgICAgaWYgKHQtPmlzQ2xvc2VUYWcoSFRNTE5hbWVzOjpicigpKSAmJiBk
b2MoKS0+aW5Db21wYXRNb2RlKCkpCisgICAgICAgIHQtPmJlZ2luVGFnID0gdHJ1ZTsKIAotICAg
IC8vIGhvbHkgc2hpdC4gYXBwYXJlbnRseSBzb21lIHNpdGVzIHVzZSA8L2JyPiBpbnN0ZWFkIG9m
IDxicj4KLSAgICAvLyBiZSBjb21wYXRpYmxlIHdpdGggSUUgYW5kIE5TCi0gICAgaWYgKHQtPmlk
ID09IElEX0JSICsgSURfQ0xPU0VfVEFHICYmIGRvYygpLT5pbkNvbXBhdE1vZGUoKSkKLSAgICAg
ICAgdC0+aWQgPSBJRF9CUjsKLQotICAgIGlmICh0LT5pZCA+IElEX0NMT1NFX1RBRykKLSAgICB7
CisgICAgaWYgKCF0LT5iZWdpblRhZykgewogICAgICAgICBwcm9jZXNzQ2xvc2VUYWcodCk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICAvLyBpZ25vcmUgc3BhY2VzLCBpZiB3ZSdyZSBu
b3QgaW5zaWRlIGEgcGFyYWdyYXBoIG9yIG90aGVyIGlubGluZSBjb2RlCi0gICAgaWYoIHQtPmlk
ID09IElEX1RFWFQgJiYgdC0+dGV4dCApIHsKLSAgICAgICAgaWYoaW5Cb2R5ICYmICFza2lwTW9k
ZSgpICYmIGN1cnJlbnQtPmlkKCkgIT0gSURfU1RZTEUgCi0gICAgICAgICAgICAmJiBjdXJyZW50
LT5pZCgpICE9IElEX1RJVExFICYmIGN1cnJlbnQtPmlkKCkgIT0gSURfU0NSSVBUICYmCi0gICAg
ICAgICAgICAhdC0+dGV4dC0+Y29udGFpbnNPbmx5V2hpdGVzcGFjZSgpKSAKKyAgICBpZiAodC0+
dGFnTmFtZSA9PSB0ZXh0QXRvbSAmJiB0LT50ZXh0KSB7CisgICAgICAgIGlmIChpbkJvZHkgJiYg
IXNraXBNb2RlKCkgJiYgY3VycmVudC0+bG9jYWxOYW1lKCkgIT0gSFRNTE5hbWVzOjpzdHlsZSgp
ICYmIGN1cnJlbnQtPmxvY2FsTmFtZSgpICE9IEhUTUxOYW1lczo6dGl0bGUoKSAmJiAKKyAgICAg
ICAgICAgIGN1cnJlbnQtPmxvY2FsTmFtZSgpICE9IEhUTUxOYW1lczo6c2NyaXB0KCkgJiYgIXQt
PnRleHQtPmNvbnRhaW5zT25seVdoaXRlc3BhY2UoKSkgCiAgICAgICAgICAgICBoYXZlQ29udGVu
dCA9IHRydWU7Ci0jaWZkZWYgUEFSU0VSX0RFQlVHCi0gICAgICAgIGtkRGVidWcoNjAzNSkgPDwg
Imxlbmd0aD0iPDwgdC0+dGV4dC0+bCA8PCAiIHRleHQ9JyIgPDwgUUNvbnN0U3RyaW5nKHQtPnRl
eHQtPnMsIHQtPnRleHQtPmwpLnN0cmluZygpIDw8ICInIiA8PCBlbmRsOwotI2VuZGlmCiAgICAg
fQogCi0gICAgTm9kZUltcGwgKm4gPSBnZXRFbGVtZW50KHQpOworICAgIE5vZGVJbXBsICpuID0g
Z2V0Tm9kZSh0KTsKICAgICAvLyBqdXN0IHRvIGJlIHN1cmUsIGFuZCB0byBjYXRjaCBjdXJyZW50
bHkgdW5pbXBsZW1lbnRlZCBzdHVmZgotICAgIGlmKCFuKQorICAgIGlmICghbikKICAgICAgICAg
cmV0dXJuOwogCiAgICAgU2hhcmVkUHRyPE5vZGVJbXBsPiBwcm90ZWN0Tm9kZShuKTsKIAogICAg
IC8vIHNldCBhdHRyaWJ1dGVzCi0gICAgaWYobi0+aXNFbGVtZW50Tm9kZSgpKQotICAgIHsKLSAg
ICAgICAgRWxlbWVudEltcGwgKmUgPSBzdGF0aWNfY2FzdDxFbGVtZW50SW1wbCAqPihuKTsKKyAg
ICBpZiAobi0+aXNIVE1MRWxlbWVudCgpKSB7CisgICAgICAgIEhUTUxFbGVtZW50SW1wbCAqZSA9
IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCo+KG4pOwogICAgICAgICBlLT5zZXRBdHRyaWJ1
dGVNYXAodC0+YXR0cnMpOwogCiAgICAgICAgIC8vIHRha2UgY2FyZSBvZiBvcHRpb25hbCBjbG9z
ZSB0YWdzCi0gICAgICAgIGlmKGVuZFRhZ1JlcXVpcmVtZW50KGUtPmlkKCkpID09IERPTTo6T1BU
SU9OQUwpCi0gICAgICAgICAgICBwb3BCbG9jayh0LT5pZCk7CisgICAgICAgIGlmIChlLT5lbmRU
YWdSZXF1aXJlbWVudCgpID09IFRhZ1N0YXR1c09wdGlvbmFsKQorICAgICAgICAgICAgcG9wQmxv
Y2sodC0+dGFnTmFtZSk7CiAgICAgICAgICAgICAKLSAgICAgICAgaWYgKGlzSGVhZGVyVGFnKHQt
PmlkKSkKKyAgICAgICAgaWYgKGlzSGVhZGVyVGFnKHQtPnRhZ05hbWUpKQogICAgICAgICAgICAg
Ly8gRG8gbm90IGFsbG93IHR3byBoZWFkZXIgdGFncyB0byBiZSBuZXN0ZWQgaWYgdGhlIGludGVy
dmVuaW5nIHRhZ3MgYXJlIGlubGluZXMuCiAgICAgICAgICAgICBwb3BOZXN0ZWRIZWFkZXJUYWco
KTsKICAgICB9CiAKLSAgICAvLyBpZiB0aGlzIHRhZyBpcyBmb3JiaWRkZW4gaW5zaWRlIHRoZSBj
dXJyZW50IGNvbnRleHQsIHBvcAotICAgIC8vIGJsb2NrcyB1bnRpbCB3ZSBhcmUgYWxsb3dlZCB0
byBhZGQgaXQuLi4KLSAgICB3aGlsZSAoYmxvY2tTdGFjayAmJiB0LT5pZCA8PSBJRF9MQVNUX1RB
RyAmJiBmb3JiaWRkZW5UYWdbdC0+aWRdKSB7Ci0jaWZkZWYgUEFSU0VSX0RFQlVHCi0gICAgICAg
IGtkRGVidWcoIDYwMzUgKSA8PCAidC0+aWQ6ICIgPDwgdC0+aWQgPDwgIiBpcyBmb3JiaWRkZW4g
Oi0oICIgPDwgZW5kbDsKLSNlbmRpZgotICAgICAgICBwb3BPbmVCbG9jaygpOwotICAgIH0KLQot
ICAgIGlmICghaW5zZXJ0Tm9kZShuLCB0LT5mbGF0KSkgCi0gICAgeworICAgIGlmICghaW5zZXJ0
Tm9kZShuLCB0LT5mbGF0KSkgewogICAgICAgICAvLyB3ZSBjb3VsZG4ndCBpbnNlcnQgdGhlIG5v
ZGUuLi4KLSAgICAgICAgCi0gICAgICAgIGlmKG4tPmlzRWxlbWVudE5vZGUoKSkKLSAgICAgICAg
ewotICAgICAgICAgICAgRWxlbWVudEltcGwgKmUgPSBzdGF0aWNfY2FzdDxFbGVtZW50SW1wbCAq
PihuKTsKKyAgICAgICAgaWYgKG4tPmlzRWxlbWVudE5vZGUoKSkgeworICAgICAgICAgICAgRWxl
bWVudEltcGwqIGUgPSBzdGF0aWNfY2FzdDxFbGVtZW50SW1wbCo+KG4pOwogICAgICAgICAgICAg
ZS0+c2V0QXR0cmlidXRlTWFwKDApOwogICAgICAgICB9CiAgICAgICAgICAgICAKLSNpZmRlZiBQ
QVJTRVJfREVCVUcKLSAgICAgICAga2REZWJ1ZyggNjAzNSApIDw8ICJpbnNlcnROb2RlIGZhaWxl
ZCBjdXJyZW50PSIgPDwgY3VycmVudC0+aWQoKSA8PCAiLCBuZXc9IiA8PCBuLT5pZCgpIDw8ICIh
IiA8PCBlbmRsOwotI2VuZGlmCiAgICAgICAgIGlmIChtYXAgPT0gbikKLSAgICAgICAgewotI2lm
ZGVmIFBBUlNFUl9ERUJVRwotICAgICAgICAgICAga2REZWJ1ZyggNjAzNSApIDw8ICIgIC0tPiBy
ZXNldHRpbmcgbWFwISIgPDwgZW5kbDsKLSNlbmRpZgogICAgICAgICAgICAgbWFwID0gMDsKLSAg
ICAgICAgfQorCiAgICAgICAgIGlmIChmb3JtID09IG4pCi0gICAgICAgIHsKLSNpZmRlZiBQQVJT
RVJfREVCVUcKLSAgICAgICAgICAgIGtkRGVidWcoIDYwMzUgKSA8PCAiICAgLS0+IHJlc2V0dGlu
ZyBmb3JtISIgPDwgZW5kbDsKLSNlbmRpZgogICAgICAgICAgICAgZm9ybSA9IDA7Ci0gICAgICAg
IH0KICAgICB9CiB9CiAKLXN0YXRpYyBib29sIGlzVGFibGVSZWxhdGVkVGFnKGludCBpZCkKK3N0
YXRpYyBib29sIGlzVGFibGVTZWN0aW9uKE5vZGVJbXBsKiBuKQogewotICAgIHJldHVybiAoaWQg
PT0gSURfVFIgfHwgaWQgPT0gSURfVEQgfHwgaWQgPT0gSURfVEFCTEUgfHwgaWQgPT0gSURfVEJP
RFkgfHwgaWQgPT0gSURfVEZPT1QgfHwgaWQgPT0gSURfVEhFQUQgfHwKLSAgICAgICAgICAgIGlk
ID09IElEX1RIKTsKKyAgICByZXR1cm4gbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRib2R5KCkp
IHx8IG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0Zm9vdCgpKSB8fCBuLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6dGhlYWQoKSk7CiB9CiAKLWJvb2wgS0hUTUxQYXJzZXI6Omluc2VydE5vZGUoTm9k
ZUltcGwgKm4sIGJvb2wgZmxhdCkKK3N0YXRpYyBib29sIGlzVGFibGVQYXJ0KE5vZGVJbXBsKiBu
KQogewotICAgIFNoYXJlZFB0cjxOb2RlSW1wbD4gcHJvdGVjdE5vZGUobik7CisgICAgcmV0dXJu
IG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0cigpKSB8fCBuLT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6dGQoKSkgfHwgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRoKCkpIHx8CisgICAgICAgICAg
IGlzVGFibGVTZWN0aW9uKG4pOworfQogCi0gICAgaW50IGlkID0gbi0+aWQoKTsKK3N0YXRpYyBi
b29sIGlzVGFibGVSZWxhdGVkKE5vZGVJbXBsKiBuKQoreworICAgIHJldHVybiBuLT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6dGFibGUoKSkgfHwgaXNUYWJsZVBhcnQobik7Cit9CisKK2Jvb2wgSFRN
TFBhcnNlcjo6aW5zZXJ0Tm9kZShOb2RlSW1wbCAqbiwgYm9vbCBmbGF0KQoreworICAgIFNoYXJl
ZFB0cjxOb2RlSW1wbD4gcHJvdGVjdE5vZGUobik7CiAKKyAgICBjb25zdCBBdG9taWNTdHJpbmcm
IGxvY2FsTmFtZSA9IG4tPmxvY2FsTmFtZSgpOworICAgIGludCB0YWdQcmlvcml0eSA9IG4tPmlz
SFRNTEVsZW1lbnQoKSA/IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCo+KG4pLT50YWdQcmlv
cml0eSgpIDogMDsKKyAgICAgICAgCiAgICAgLy8gbGV0J3MgYmUgc3R1cGlkIGFuZCBqdXN0IHRy
eSB0byBpbnNlcnQgaXQuCi0gICAgLy8gdGhpcyBzaG91bGQgd29yayBpZiB0aGUgZG9jdW1lbnQg
aXMgd2VsbGZvcm1lZAotI2lmZGVmIFBBUlNFUl9ERUJVRwotICAgIE5vZGVJbXBsICp0bXAgPSBj
dXJyZW50OwotI2VuZGlmCisgICAgLy8gdGhpcyBzaG91bGQgd29yayBpZiB0aGUgZG9jdW1lbnQg
aXMgd2VsbC1mb3JtZWQKICAgICBOb2RlSW1wbCAqbmV3Tm9kZSA9IGN1cnJlbnQtPmFkZENoaWxk
KG4pOwotICAgIGlmICggbmV3Tm9kZSApIHsKLSNpZmRlZiBQQVJTRVJfREVCVUcKLSAgICAgICAg
a2REZWJ1ZyggNjAzNSApIDw8ICJhZGRlZCAiIDw8IG4tPm5vZGVOYW1lKCkuc3RyaW5nKCkgPDwg
IiB0byAiIDw8IHRtcC0+bm9kZU5hbWUoKS5zdHJpbmcoKSA8PCAiLCBuZXcgY3VycmVudD0iIDw8
IG5ld05vZGUtPm5vZGVOYW1lKCkuc3RyaW5nKCkgPDwgZW5kbDsKLSNlbmRpZgotICAgICAgICAv
LyBkb24ndCBwdXNoIGVsZW1lbnRzIHdpdGhvdXQgZW5kIHRhZyBvbiB0aGUgc3RhY2sKLSAgICAg
ICAgaWYodGFnUHJpb3JpdHkoaWQpICE9IDAgJiYgIWZsYXQpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHB1c2hCbG9jayhpZCwgdGFnUHJpb3JpdHkoaWQpKTsKKyAgICBpZiAobmV3Tm9kZSkgewor
ICAgICAgICAvLyBkb24ndCBwdXNoIGVsZW1lbnRzIHdpdGhvdXQgZW5kIHRhZ3MgKGUuZy4sIDxp
bWc+KSBvbiB0aGUgc3RhY2sKKyAgICAgICAgaWYgKHRhZ1ByaW9yaXR5ID4gMCAmJiAhZmxhdCkg
eworICAgICAgICAgICAgcHVzaEJsb2NrKGxvY2FsTmFtZSwgdGFnUHJpb3JpdHkpOwogICAgICAg
ICAgICAgaWYgKG5ld05vZGUgPT0gY3VycmVudCkKLSAgICAgICAgICAgICAgICBwb3BCbG9jayhp
ZCk7CisgICAgICAgICAgICAgICAgcG9wQmxvY2sobG9jYWxOYW1lKTsKICAgICAgICAgICAgIGVs
c2UKICAgICAgICAgICAgICAgICBzZXRDdXJyZW50KG5ld05vZGUpOwotI2lmIFNQRUVEX0RFQlVH
IDwgMgotICAgICAgICAgICAgaWYoIW4tPmF0dGFjaGVkKCkgJiYgSFRNTFdpZGdldCkKKyAgICAg
ICAgICAgIGlmICghbi0+YXR0YWNoZWQoKSAmJiBIVE1MV2lkZ2V0KQogICAgICAgICAgICAgICAg
IG4tPmF0dGFjaCgpOwotI2VuZGlmCiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7Ci0jaWYgU1BF
RURfREVCVUcgPCAyCi0gICAgICAgICAgICBpZighbi0+YXR0YWNoZWQoKSAmJiBIVE1MV2lkZ2V0
KQorICAgICAgICAgICAgaWYgKCFuLT5hdHRhY2hlZCgpICYmIEhUTUxXaWRnZXQpCiAgICAgICAg
ICAgICAgICAgbi0+YXR0YWNoKCk7CiAgICAgICAgICAgICBpZiAobi0+bWFpbnRhaW5zU3RhdGUo
KSkgewogICAgICAgICAgICAgICAgIGRvYygpLT5yZWdpc3Rlck1haW50YWluc1N0YXRlKG4pOwpA
QCAtMzQwLDEwNCArMjk5LDg2IEBAIGJvb2wgS0hUTUxQYXJzZXI6Omluc2VydE5vZGUoTm9kZUlt
cGwgKm4KICAgICAgICAgICAgICAgICAgICAgbi0+cmVzdG9yZVN0YXRlKHN0YXRlcyk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBuLT5jbG9zZVJlbmRlcmVyKCk7Ci0jZW5kaWYKICAgICAg
ICAgfQogCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0gZWxzZSB7Ci0jaWZkZWYgUEFSU0VS
X0RFQlVHCi0gICAgICAgIGtkRGVidWcoIDYwMzUgKSA8PCAiQURESU5HIE5PREUgRkFJTEVEISEh
ISBjdXJyZW50ID0gIiA8PCBjdXJyZW50LT5ub2RlTmFtZSgpLnN0cmluZygpIDw8ICIsIG5ldyA9
ICIgPDwgbi0+bm9kZU5hbWUoKS5zdHJpbmcoKSA8PCBlbmRsOwotI2VuZGlmCi0gICAgICAgIC8v
IGVycm9yIGhhbmRsaW5nLi4uCi0gICAgICAgIEhUTUxFbGVtZW50SW1wbCAqZTsKLSAgICAgICAg
Ym9vbCBoYW5kbGVkID0gZmFsc2U7Ci0KLSAgICAgICAgLy8gc3dpdGNoIGFjY29yZGluZyB0byB0
aGUgZWxlbWVudCB0byBpbnNlcnQKLSAgICAgICAgc3dpdGNoKGlkKQotICAgICAgICB7Ci0gICAg
ICAgIGNhc2UgSURfVFI6Ci0gICAgICAgIGNhc2UgSURfVEg6Ci0gICAgICAgIGNhc2UgSURfVEQ6
Ci0gICAgICAgICAgICBpZiAoaW5TdHJheVRhYmxlQ29udGVudCAmJiAhaXNUYWJsZVJlbGF0ZWRU
YWcoY3VycmVudC0+aWQoKSkpIHsKKyAgICB9IGVsc2UKKyAgICAgICAgcmV0dXJuIGhhbmRsZUVy
cm9yKG4sIGZsYXQsIGxvY2FsTmFtZSwgdGFnUHJpb3JpdHkpOyAvLyBUcnkgdG8gaGFuZGxlIHRo
ZSBlcnJvci4KK30KKworYm9vbCBIVE1MUGFyc2VyOjpoYW5kbGVFcnJvcihOb2RlSW1wbCogbiwg
Ym9vbCBmbGF0LCBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSwgaW50IHRhZ1ByaW9yaXR5
KQoreworICAgIC8vIEVycm9yIGhhbmRsaW5nIGNvZGUuICBUaGlzIGlzIGp1c3QgYWQgaG9jIGhh
bmRsaW5nIG9mIHNwZWNpZmljIHBhcmVudC9jaGlsZCBjb21iaW5hdGlvbnMuCisgICAgSFRNTEVs
ZW1lbnRJbXBsICplOworICAgIGJvb2wgaGFuZGxlZCA9IGZhbHNlOworCisgICAgLy8gMS4gQ2hl
Y2sgb3V0IHRoZSBlbGVtZW50J3MgdGFnIG5hbWUgdG8gZGVjaWRlIGhvdyB0byBkZWFsIHdpdGgg
ZXJyb3JzLgorICAgIGlmIChuLT5pc1RleHROb2RlKCkpIHsKKyAgICAgICAgaWYgKGN1cnJlbnQt
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzZWxlY3QoKSkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfSBlbHNlIGlmIChuLT5pc0hUTUxFbGVtZW50KCkpIHsKKyAgICAgICAgSFRNTEVs
ZW1lbnRJbXBsKiBoID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsKj4obik7CisgICAgICAg
IGlmIChoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0cigpKSB8fCBoLT5oYXNMb2NhbE5hbWUo
SFRNTE5hbWVzOjp0aCgpKSB8fAorICAgICAgICAgICAgaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1l
czo6dGQoKSkpIHsKKyAgICAgICAgICAgIGlmIChpblN0cmF5VGFibGVDb250ZW50ICYmICFpc1Rh
YmxlUmVsYXRlZChjdXJyZW50KSkgewogICAgICAgICAgICAgICAgIC8vIHBvcCBvdXQgdG8gdGhl
IG5lYXJlc3QgZW5jbG9zaW5nIHRhYmxlLXJlbGF0ZWQgdGFnLgotICAgICAgICAgICAgICAgIHdo
aWxlIChibG9ja1N0YWNrICYmICFpc1RhYmxlUmVsYXRlZFRhZyhjdXJyZW50LT5pZCgpKSkKKyAg
ICAgICAgICAgICAgICB3aGlsZSAoYmxvY2tTdGFjayAmJiAhaXNUYWJsZVJlbGF0ZWQoY3VycmVu
dCkpCiAgICAgICAgICAgICAgICAgICAgIHBvcE9uZUJsb2NrKCk7CiAgICAgICAgICAgICAgICAg
cmV0dXJuIGluc2VydE5vZGUobik7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBJRF9DT01NRU5UOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgSURfSEVBRDoKLSAgICAgICAgICAgIC8vICMjIyBhbGxsb3cgbm90IGhhdmluZyA8SFRNTD4g
aW4gYXQgYWxsLCBhcyBwZXIgSFRNTCBzcGVjCi0gICAgICAgICAgICBpZiAoIWN1cnJlbnQtPmlz
RG9jdW1lbnROb2RlKCkgJiYgY3VycmVudC0+aWQoKSAhPSBJRF9IVE1MICkKKyAgICAgICAgfSBl
bHNlIGlmIChoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpoZWFkKCkpKSB7CisgICAgICAgICAg
ICBpZiAoIWN1cnJlbnQtPmlzRG9jdW1lbnROb2RlKCkgJiYgIWN1cnJlbnQtPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjpodG1sKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgLy8gV2UgY2FuIGRlYWwgd2l0aCBhIGJhc2UsIG1l
dGEgYW5kIGxpbmsgZWxlbWVudCBpbiB0aGUgYm9keSwgYnkganVzdCBhZGRpbmcgdGhlIGVsZW1l
bnQgdG8gaGVhZC4KLSAgICAgICAgY2FzZSBJRF9NRVRBOgotICAgICAgICBjYXNlIElEX0xJTks6
Ci0gICAgICAgIGNhc2UgSURfQkFTRToKLSAgICAgICAgICAgIGlmKCAhaGVhZCApCisgICAgICAg
IH0gZWxzZSBpZiAoaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6bWV0YSgpKSB8fCBoLT5oYXNM
b2NhbE5hbWUoSFRNTE5hbWVzOjpsaW5rKCkpIHx8IGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6
OmJhc2UoKSkpIHsKKyAgICAgICAgICAgIGlmICghaGVhZCkKICAgICAgICAgICAgICAgICBjcmVh
dGVIZWFkKCk7Ci0gICAgICAgICAgICBpZiggaGVhZCApIHsKLSAgICAgICAgICAgICAgICBpZiAo
IGhlYWQtPmFkZENoaWxkKG4pICkgewotI2lmIFNQRUVEX0RFQlVHIDwgMgotICAgICAgICAgICAg
ICAgICAgICBpZighbi0+YXR0YWNoZWQoKSAmJiBIVE1MV2lkZ2V0KQorICAgICAgICAgICAgaWYg
KGhlYWQpIHsKKyAgICAgICAgICAgICAgICBpZiAoaGVhZC0+YWRkQ2hpbGQobikpIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCFuLT5hdHRhY2hlZCgpICYmIEhUTUxXaWRnZXQpCiAgICAgICAg
ICAgICAgICAgICAgICAgICBuLT5hdHRhY2goKTsKLSNlbmRpZgogICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLQkJfSBlbHNlIHsKLQkJICAgIHJldHVybiBmYWxzZTsKLQkJfQorICAg
ICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJRF9IVE1MOgor
ICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Omh0bWwoKSkpIHsK
ICAgICAgICAgICAgIGlmICghY3VycmVudC0+aXNEb2N1bWVudE5vZGUoKSApIHsKLQkJaWYgKCBk
b2MoKS0+Zmlyc3RDaGlsZCgpLT5pZCgpID09IElEX0hUTUwpIHsKLQkJICAgIC8vIHdlIGhhdmUg
YW5vdGhlciA8SFRNTD4gZWxlbWVudC4uLi4gYXBwbHkgYXR0cmlidXRlcyB0byBleGlzdGluZyBv
bmUKLQkJICAgIC8vIG1ha2Ugc3VyZSB3ZSBkb24ndCBvdmVyd3JpdGUgYWxyZWFkeSBleGlzdGlu
ZyBhdHRyaWJ1dGVzCi0JCSAgICBOYW1lZEF0dHJNYXBJbXBsICptYXAgPSBzdGF0aWNfY2FzdDxF
bGVtZW50SW1wbCo+KG4pLT5hdHRyaWJ1dGVzKHRydWUpOwotCQkgICAgTmFtZWRBdHRyTWFwSW1w
bCAqYm1hcCA9IHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsKj4oZG9jKCktPmZpcnN0Q2hpbGQoKSkt
PmF0dHJpYnV0ZXMoZmFsc2UpOwotCQkgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7Ci0JCSAgICBm
b3IgKHVuc2lnbmVkIGxvbmcgbCA9IDA7IG1hcCAmJiBsIDwgbWFwLT5sZW5ndGgoKTsgKytsKSB7
Ci0JCQlBdHRyaWJ1dGVJbXBsKiBpdCA9IG1hcC0+YXR0cmlidXRlSXRlbShsKTsKLQkJCWNoYW5n
ZWQgPSAhYm1hcC0+Z2V0QXR0cmlidXRlSXRlbShpdC0+aWQoKSk7Ci0JCQlibWFwLT5pbnNlcnRB
dHRyaWJ1dGUoaXQtPmNsb25lKGZhbHNlKSk7Ci0JCSAgICB9Ci0JCSAgICBpZiAoIGNoYW5nZWQg
KQotCQkJZG9jKCktPnJlY2FsY1N0eWxlKCBOb2RlSW1wbDo6SW5oZXJpdCApOwotCQl9CisgICAg
ICAgICAgICAgICAgaWYgKGRvYygpLT5maXJzdENoaWxkKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjpodG1sKCkpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIHdlIGhhdmUgYW5vdGhlciA8SFRN
TD4gZWxlbWVudC4uLi4gYXBwbHkgYXR0cmlidXRlcyB0byBleGlzdGluZyBvbmUKKyAgICAgICAg
ICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHdlIGRvbid0IG92ZXJ3cml0ZSBhbHJlYWR5IGV4aXN0
aW5nIGF0dHJpYnV0ZXMKKyAgICAgICAgICAgICAgICAgICAgTmFtZWRBdHRyTWFwSW1wbCAqbWFw
ID0gc3RhdGljX2Nhc3Q8RWxlbWVudEltcGwqPihuKS0+YXR0cmlidXRlcyh0cnVlKTsKKyAgICAg
ICAgICAgICAgICAgICAgTmFtZWRBdHRyTWFwSW1wbCAqYm1hcCA9IHN0YXRpY19jYXN0PEVsZW1l
bnRJbXBsKj4oZG9jKCktPmZpcnN0Q2hpbGQoKSktPmF0dHJpYnV0ZXMoZmFsc2UpOworICAgICAg
ICAgICAgICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBsb25nIGwgPSAwOyBtYXAgJiYgbCA8IG1hcC0+bGVuZ3RoKCk7ICsrbCkg
eworICAgICAgICAgICAgICAgICAgICAgICAgQXR0cmlidXRlSW1wbCogaXQgPSBtYXAtPmF0dHJp
YnV0ZUl0ZW0obCk7CisgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gIWJtYXAtPmdl
dEF0dHJpYnV0ZUl0ZW0oaXQtPmlkKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgYm1hcC0+
aW5zZXJ0QXR0cmlidXRlKGl0LT5jbG9uZShmYWxzZSkpOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIGlmIChjaGFuZ2VkKQorICAgICAgICAgICAgICAgICAgICAg
ICAgZG9jKCktPnJlY2FsY1N0eWxlKE5vZGVJbXBsOjpJbmhlcml0KTsKKyAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCSAgICB9Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBJRF9USVRMRToKLSAgICAgICAgY2FzZSBJRF9TVFlMRToKLSAg
ICAgICAgICAgIGlmICggIWhlYWQgKQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYg
KGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnRpdGxlKCkpIHx8IGgtPmhhc0xvY2FsTmFtZShI
VE1MTmFtZXM6OnN0eWxlKCkpKSB7CisgICAgICAgICAgICBpZiAoIWhlYWQpCiAgICAgICAgICAg
ICAgICAgY3JlYXRlSGVhZCgpOwotICAgICAgICAgICAgaWYgKCBoZWFkICkgeworICAgICAgICAg
ICAgaWYgKGhlYWQpIHsKICAgICAgICAgICAgICAgICBET006Ok5vZGVJbXBsICpuZXdOb2RlID0g
aGVhZC0+YWRkQ2hpbGQobik7Ci0gICAgICAgICAgICAgICAgaWYgKCBuZXdOb2RlICkgewotICAg
ICAgICAgICAgICAgICAgICBwdXNoQmxvY2soaWQsIHRhZ1ByaW9yaXR5KGlkKSk7CisgICAgICAg
ICAgICAgICAgaWYgKG5ld05vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgcHVzaEJsb2NrKGxv
Y2FsTmFtZSwgdGFnUHJpb3JpdHkpOwogICAgICAgICAgICAgICAgICAgICBzZXRDdXJyZW50KG5l
d05vZGUpOwotI2lmIFNQRUVEX0RFQlVHIDwgMgotCQkgICAgaWYoIW4tPmF0dGFjaGVkKCkgJiYg
SFRNTFdpZGdldCkKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFuLT5hdHRhY2hlZCgpICYmIEhU
TUxXaWRnZXQpCiAgICAgICAgICAgICAgICAgICAgICAgICBuLT5hdHRhY2goKTsKLSNlbmRpZgog
ICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0jaWZkZWYgUEFSU0VSX0RFQlVHCi0gICAgICAgICAg
ICAgICAgICAgIGtkRGVidWcoIDYwMzUgKSA8PCAiYWRkaW5nIHN0eWxlIGJlZm9yZSB0byBib2R5
IGZhaWxlZCEhISEiIDw8IGVuZGw7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgZGlzY2Fy
ZF91bnRpbCA9IElEX1NUWUxFICsgSURfQ0xPU0VfVEFHOworICAgICAgICAgICAgICAgICAgICBz
ZXRTa2lwTW9kZShIVE1MTmFtZXM6OnN0eWxlKCkpOwogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICAgICAgfSBlbHNlIGlmKGluQm9keSkgewotICAgICAgICAgICAgICAgIGRpc2Nh
cmRfdW50aWwgPSBJRF9TVFlMRSArIElEX0NMT1NFX1RBRzsKKyAgICAgICAgICAgICAgICBzZXRT
a2lwTW9kZShIVE1MTmFtZXM6OnN0eWxlKCkpOwogICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgLy8gU0NS
SVBUIGFuZCBPQkpFQ1QgYXJlIGFsbG93ZWQgaW4gdGhlIGJvZHkuCi0gICAgICAgIGNhc2UgSURf
Qk9EWToKLSAgICAgICAgICAgIGlmKGluQm9keSAmJiBkb2MoKS0+Ym9keSgpKSB7CisgICAgICAg
IH0gZWxzZSBpZiAoaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6Ym9keSgpKSkgeworICAgICAg
ICAgICAgaWYgKGluQm9keSAmJiBkb2MoKS0+Ym9keSgpKSB7CiAgICAgICAgICAgICAgICAgLy8g
d2UgaGF2ZSBhbm90aGVyIDxCT0RZPiBlbGVtZW50Li4uLiBhcHBseSBhdHRyaWJ1dGVzIHRvIGV4
aXN0aW5nIG9uZQogICAgICAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB3ZSBkb24ndCBvdmVyd3Jp
dGUgYWxyZWFkeSBleGlzdGluZyBhdHRyaWJ1dGVzCiAgICAgICAgICAgICAgICAgLy8gc29tZSBz
aXRlcyB1c2UgPGJvZHkgYmdjb2xvcj1yaWdodGNvbG9yPi4uLjxib2R5IGJnY29sb3I9d3Jvbmdj
b2xvcj4KQEAgLTQ0OSw2NjEgKzM5MCw1ODcgQEAgYm9vbCBLSFRNTFBhcnNlcjo6aW5zZXJ0Tm9k
ZShOb2RlSW1wbCAqbgogICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gIWJtYXAtPmdldEF0
dHJpYnV0ZUl0ZW0oaXQtPmlkKCkpOwogICAgICAgICAgICAgICAgICAgICBibWFwLT5pbnNlcnRB
dHRyaWJ1dGUoaXQtPmNsb25lKGZhbHNlKSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGlmICggY2hhbmdlZCApCi0gICAgICAgICAgICAgICAgICAgIGRvYygpLT5yZWNhbGNT
dHlsZSggTm9kZUltcGw6OkluaGVyaXQgKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoIGN1cnJl
bnQtPmlzRG9jdW1lbnROb2RlKCkgKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIC8vIHRo
ZSBmb2xsb3dpbmcgaXMgYSBoYWNrIHRvIG1vdmUgbm9uIHJlbmRlcmVkIGVsZW1lbnRzCi0gICAg
ICAgICAgICAvLyBvdXRzaWRlIG9mIHRhYmxlcy4KLSAgICAgICAgICAgIC8vIG5lZWRlZCBmb3Ig
YnJva2VuIGNvbnN0cnVjdHMgbGlrZSA8dGFibGU+PGZvcm0gLi4uPjx0cj4uLi4uCi0gICAgICAg
IGNhc2UgSURfSU5QVVQ6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEVsZW1lbnRJbXBsICplID0g
c3RhdGljX2Nhc3Q8RWxlbWVudEltcGwgKj4obik7Ci0gICAgICAgICAgICBET01TdHJpbmcgdHlw
ZSA9IGUtPmdldEF0dHJpYnV0ZShBVFRSX1RZUEUpOwotCi0gICAgICAgICAgICBpZiAoIHN0cmNh
c2VjbXAoIHR5cGUsICJoaWRkZW4iICkgPT0gMCAmJiBmb3JtKSB7CisgICAgICAgICAgICAgICAg
aWYgKGNoYW5nZWQpCisgICAgICAgICAgICAgICAgICAgIGRvYygpLT5yZWNhbGNTdHlsZShOb2Rl
SW1wbDo6SW5oZXJpdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoIWN1cnJlbnQtPmlzRG9jdW1lbnROb2RlKCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xv
Y2FsTmFtZShIVE1MTmFtZXM6OmlucHV0KCkpKSB7CisgICAgICAgICAgICBET01TdHJpbmcgdHlw
ZSA9IGgtPmdldEF0dHJpYnV0ZShBVFRSX1RZUEUpOworICAgICAgICAgICAgaWYgKHN0cmNhc2Vj
bXAodHlwZSwgImhpZGRlbiIpID09IDAgJiYgZm9ybSkgewogICAgICAgICAgICAgICAgIGZvcm0t
PmFkZENoaWxkKG4pOwotI2lmIFNQRUVEX0RFQlVHIDwgMgotICAgICAgICAgICAgICAgIGlmKCFu
LT5hdHRhY2hlZCgpICYmIEhUTUxXaWRnZXQpCisgICAgICAgICAgICAgICAgaWYgKCFuLT5hdHRh
Y2hlZCgpICYmIEhUTUxXaWRnZXQpCiAgICAgICAgICAgICAgICAgICAgIG4tPmF0dGFjaCgpOwot
I2VuZGlmCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIElEX1RFWFQ6Ci0gICAgICAg
ICAgICAvLyBpZ25vcmUgdGV4dCBpbnNpZGUgdGhlIGZvbGxvd2luZyBlbGVtZW50cy4KLSAgICAg
ICAgICAgIHN3aXRjaChjdXJyZW50LT5pZCgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
Y2FzZSBJRF9TRUxFQ1Q6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICA7Ci0gICAgICAgICAgICAgICAgLy8gZmFsbCB0
aHJvdWdoISEKLSAgICAgICAgICAgIH07Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBJRF9ERDoKLSAgICAgICAgY2FzZSBJRF9EVDoKKyAgICAgICAgfSBlbHNlIGlmIChoLT5oYXNM
b2NhbE5hbWUoSFRNTE5hbWVzOjpkZCgpKSB8fCBoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpk
dCgpKSkgewogICAgICAgICAgICAgZSA9IG5ldyBIVE1MRExpc3RFbGVtZW50SW1wbChkb2N1bWVu
dCk7Ci0gICAgICAgICAgICBpZiAoIGluc2VydE5vZGUoZSkgKSB7CisgICAgICAgICAgICBpZiAo
aW5zZXJ0Tm9kZShlKSkgewogICAgICAgICAgICAgICAgIGluc2VydE5vZGUobik7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBJRF9BUkVBOgotICAgICAgICB7Ci0gICAgICAgICAgICBpZihtYXApCi0g
ICAgICAgICAgICB7CisgICAgICAgIH0gZWxzZSBpZiAoaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1l
czo6YXJlYSgpKSkgeworICAgICAgICAgICAgaWYgKG1hcCkgewogICAgICAgICAgICAgICAgIG1h
cC0+YWRkQ2hpbGQobik7Ci0jaWYgU1BFRURfREVCVUcgPCAyCi0gICAgICAgICAgICAgICAgaWYo
IW4tPmF0dGFjaGVkKCkgJiYgSFRNTFdpZGdldCkKKyAgICAgICAgICAgICAgICBpZiAoIW4tPmF0
dGFjaGVkKCkgJiYgSFRNTFdpZGdldCkKICAgICAgICAgICAgICAgICAgICAgbi0+YXR0YWNoKCk7
Ci0jZW5kaWYKICAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBjYXNlIElEX0NBUFRJT046IHsK
LSAgICAgICAgICAgIHN3aXRjaCAoY3VycmVudC0+aWQoKSkgewotICAgICAgICAgICAgICAgIGNh
c2UgSURfVEhFQUQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBJRF9UQk9EWToKLSAgICAgICAgICAg
ICAgICBjYXNlIElEX1RGT09UOgotICAgICAgICAgICAgICAgIGNhc2UgSURfVFI6Ci0gICAgICAg
ICAgICAgICAgY2FzZSBJRF9USDoKLSAgICAgICAgICAgICAgICBjYXNlIElEX1REOiB7Ci0gICAg
ICAgICAgICAgICAgICAgIE5vZGVJbXBsKiB0c2VjdGlvbiA9IGN1cnJlbnQ7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChjdXJyZW50LT5pZCgpID09IElEX1RSKQotICAgICAgICAgICAgICAgICAg
ICAgICAgdHNlY3Rpb24gPSBjdXJyZW50LT5wYXJlbnQoKTsKLSAgICAgICAgICAgICAgICAgICAg
ZWxzZSBpZiAoY3VycmVudC0+aWQoKSA9PSBJRF9URCB8fCBjdXJyZW50LT5pZCgpID09IElEX1RI
KQotICAgICAgICAgICAgICAgICAgICAgICAgdHNlY3Rpb24gPSBjdXJyZW50LT5wYXJlbnQoKS0+
cGFyZW50KCk7Ci0gICAgICAgICAgICAgICAgICAgIE5vZGVJbXBsKiB0YWJsZSA9IHRzZWN0aW9u
LT5wYXJlbnQoKTsKLSAgICAgICAgICAgICAgICAgICAgaW50IGV4Y2VwdGlvbmNvZGUgPSAwOwot
ICAgICAgICAgICAgICAgICAgICB0YWJsZS0+aW5zZXJ0QmVmb3JlKG4sIHRzZWN0aW9uLCBleGNl
cHRpb25jb2RlKTsKLSAgICAgICAgICAgICAgICAgICAgcHVzaEJsb2NrKGlkLCB0YWdQcmlvcml0
eShpZCkpOwotICAgICAgICAgICAgICAgICAgICBzZXRDdXJyZW50KG4pOwotICAgICAgICAgICAg
ICAgICAgICBpblN0cmF5VGFibGVDb250ZW50Kys7Ci0gICAgICAgICAgICAgICAgICAgIGJsb2Nr
U3RhY2stPnN0cmF5VGFibGVDb250ZW50ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2Fs
TmFtZShIVE1MTmFtZXM6OmNhcHRpb24oKSkpIHsKKyAgICAgICAgICAgIGlmIChpc1RhYmxlUGFy
dChjdXJyZW50KSkgeworICAgICAgICAgICAgICAgIE5vZGVJbXBsKiB0c2VjdGlvbiA9IGN1cnJl
bnQ7CisgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0
cigpKSkKKyAgICAgICAgICAgICAgICAgICAgdHNlY3Rpb24gPSBjdXJyZW50LT5wYXJlbnQoKTsK
KyAgICAgICAgICAgICAgICBlbHNlIGlmIChjdXJyZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
dGQoKSkgfHwgY3VycmVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRoKCkpKQorICAgICAgICAg
ICAgICAgICAgICB0c2VjdGlvbiA9IGN1cnJlbnQtPnBhcmVudCgpLT5wYXJlbnQoKTsKKyAgICAg
ICAgICAgICAgICBOb2RlSW1wbCogdGFibGUgPSB0c2VjdGlvbi0+cGFyZW50KCk7CisgICAgICAg
ICAgICAgICAgaW50IGV4Y2VwdGlvbmNvZGUgPSAwOworICAgICAgICAgICAgICAgIHRhYmxlLT5p
bnNlcnRCZWZvcmUobiwgdHNlY3Rpb24sIGV4Y2VwdGlvbmNvZGUpOworICAgICAgICAgICAgICAg
IHB1c2hCbG9jayhsb2NhbE5hbWUsIHRhZ1ByaW9yaXR5KTsKKyAgICAgICAgICAgICAgICBzZXRD
dXJyZW50KG4pOworICAgICAgICAgICAgICAgIGluU3RyYXlUYWJsZUNvbnRlbnQrKzsKKyAgICAg
ICAgICAgICAgICBibG9ja1N0YWNrLT5zdHJheVRhYmxlQ29udGVudCA9IHRydWU7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICBjYXNlIElEX1RIRUFEOgotICAgICAgICBjYXNlIElEX1RCT0RZ
OgotICAgICAgICBjYXNlIElEX1RGT09UOgotICAgICAgICBjYXNlIElEX0NPTEdST1VQOiB7Ci0g
ICAgICAgICAgICBpZiAoaXNUYWJsZVJlbGF0ZWRUYWcoY3VycmVudC0+aWQoKSkpIHsKLSAgICAg
ICAgICAgICAgICB3aGlsZSAoYmxvY2tTdGFjayAmJiBjdXJyZW50LT5pZCgpICE9IElEX1RBQkxF
ICYmIGlzVGFibGVSZWxhdGVkVGFnKGN1cnJlbnQtPmlkKCkpKQorICAgICAgICB9IGVsc2UgaWYg
KGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnRoZWFkKCkpIHx8IGgtPmhhc0xvY2FsTmFtZShI
VE1MTmFtZXM6OnRib2R5KCkpIHx8CisgICAgICAgICAgICAgICAgICAgaC0+aGFzTG9jYWxOYW1l
KEhUTUxOYW1lczo6dGZvb3QoKSkgfHwgaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6Y29sZ3Jv
dXAoKSkpIHsKKyAgICAgICAgICAgIGlmIChpc1RhYmxlUmVsYXRlZChjdXJyZW50KSkgeworICAg
ICAgICAgICAgICAgIHdoaWxlIChibG9ja1N0YWNrICYmIGlzVGFibGVQYXJ0KGN1cnJlbnQpKQog
ICAgICAgICAgICAgICAgICAgICBwb3BPbmVCbG9jaygpOwogICAgICAgICAgICAgICAgIHJldHVy
biBpbnNlcnROb2RlKG4pOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIHN3aXRjaCBv
biB0aGUgY3VycmVudGx5IGFjdGl2ZSBlbGVtZW50Ci0gICAgICAgIHN3aXRjaChjdXJyZW50LT5p
ZCgpKQotICAgICAgICB7Ci0gICAgICAgIGNhc2UgSURfSFRNTDoKLSAgICAgICAgICAgIHN3aXRj
aChpZCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIGNhc2UgSURfU0NSSVBUOgotICAgICAg
ICAgICAgY2FzZSBJRF9TVFlMRToKLSAgICAgICAgICAgIGNhc2UgSURfTUVUQToKLSAgICAgICAg
ICAgIGNhc2UgSURfTElOSzoKLSAgICAgICAgICAgIGNhc2UgSURfT0JKRUNUOgotICAgICAgICAg
ICAgY2FzZSBJRF9FTUJFRDoKLSAgICAgICAgICAgIGNhc2UgSURfVElUTEU6Ci0gICAgICAgICAg
ICBjYXNlIElEX0lTSU5ERVg6Ci0gICAgICAgICAgICBjYXNlIElEX0JBU0U6Ci0gICAgICAgICAg
ICAgICAgaWYoIWhlYWQpIHsKKyAgICB9CisgICAgCisgICAgLy8gMi4gTmV4dCB3ZSBleGFtaW5l
IG91ciBjdXJyZW50bHkgYWN0aXZlIGVsZW1lbnQgdG8gZG8gc29tZSBmdXJ0aGVyIGVycm9yIGhh
bmRsaW5nLgorICAgIGlmIChjdXJyZW50LT5pc0hUTUxFbGVtZW50KCkpIHsKKyAgICAgICAgSFRN
TEVsZW1lbnRJbXBsKiBoID0gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsKj4oY3VycmVudCk7
CisgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgY3VycmVudFRhZ05hbWUgPSBjdXJyZW50LT5s
b2NhbE5hbWUoKTsKKyAgICAgICAgaWYgKGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Omh0bWwo
KSkpIHsKKyAgICAgICAgICAgIEhUTUxFbGVtZW50SW1wbCogZWx0ID0gbi0+aXNIVE1MRWxlbWVu
dCgpID8gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsKj4obikgOiAwOworICAgICAgICAgICAg
aWYgKGVsdCAmJiAoZWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpzY3JpcHQoKSkgfHwgZWx0
LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpzdHlsZSgpKSB8fAorICAgICAgICAgICAgICAgIGVs
dC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6bWV0YSgpKSB8fCBlbHQtPmhhc0xvY2FsTmFtZShI
VE1MTmFtZXM6OmxpbmsoKSkgfHwKKyAgICAgICAgICAgICAgICBlbHQtPmhhc0xvY2FsTmFtZShI
VE1MTmFtZXM6Om9iamVjdCgpKSB8fCBlbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmVtYmVk
KCkpIHx8CisgICAgICAgICAgICAgICAgZWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0aXRs
ZSgpKSB8fCBlbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmlzaW5kZXgoKSkgfHwKKyAgICAg
ICAgICAgICAgICBlbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmJhc2UoKSkpKSB7CisgICAg
ICAgICAgICAgICAgaWYgKCFoZWFkKSB7CiAgICAgICAgICAgICAgICAgICAgIGhlYWQgPSBuZXcg
SFRNTEhlYWRFbGVtZW50SW1wbChkb2N1bWVudCk7CiAgICAgICAgICAgICAgICAgICAgIGUgPSBo
ZWFkOwogICAgICAgICAgICAgICAgICAgICBpbnNlcnROb2RlKGUpOwogICAgICAgICAgICAgICAg
ICAgICBoYW5kbGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBjYXNlIElEX1RFWFQ6IHsKLSAgICAgICAgICAgICAgICBUZXh0
SW1wbCAqdCA9IHN0YXRpY19jYXN0PFRleHRJbXBsICo+KG4pOwotICAgICAgICAgICAgICAgIGlm
ICh0LT5jb250YWluc09ubHlXaGl0ZXNwYWNlKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgICAgICAgICAvKiBGYWxsIHRocm91Z2ggdG8gZGVmYXVsdCAqLwor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAobi0+aXNUZXh0Tm9kZSgp
KSB7CisgICAgICAgICAgICAgICAgICAgIFRleHRJbXBsICp0ID0gc3RhdGljX2Nhc3Q8VGV4dElt
cGwgKj4obik7CisgICAgICAgICAgICAgICAgICAgIGlmICh0LT5jb250YWluc09ubHlXaGl0ZXNw
YWNlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisJCQkJfQorCQkJ
CWlmICghaGF2ZUZyYW1lU2V0KSB7CisJCQkJCWUgPSBuZXcgSFRNTEJvZHlFbGVtZW50SW1wbChk
b2N1bWVudCk7CisJCQkJCXN0YXJ0Qm9keSgpOworCQkJCQlpbnNlcnROb2RlKGUpOworCQkJCQlo
YW5kbGVkID0gdHJ1ZTsKKwkJCQl9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgICAgIGlmICggaGF2ZUZyYW1lU2V0ICkgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgZSA9IG5ldyBIVE1MQm9keUVsZW1lbnRJbXBsKGRvY3VtZW50KTsKLSAgICAgICAgICAg
ICAgICBzdGFydEJvZHkoKTsKLSAgICAgICAgICAgICAgICBpbnNlcnROb2RlKGUpOwotICAgICAg
ICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSURfSEVBRDoKLSAgICAg
ICAgICAgIC8vIHdlIGNhbiBnZXQgaGVyZSBvbmx5IGlmIHRoZSBlbGVtZW50IGlzIG5vdCBhbGxv
d2VkIGluIGhlYWQuCi0gICAgICAgICAgICBpZiAoaWQgPT0gSURfSFRNTCkKKyAgICAgICAgfSBl
bHNlIGlmIChoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpoZWFkKCkpKSB7CisgICAgICAgICAg
ICBpZiAobi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omh0bWwoKSkpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gVGhp
cyBtZWFucyB0aGUgYm9keSBzdGFydHMgaGVyZS4uLgotICAgICAgICAgICAgICAgIGlmICggaGF2
ZUZyYW1lU2V0ICkgYnJlYWs7Ci0gICAgICAgICAgICAgICAgcG9wQmxvY2soSURfSEVBRCk7Ci0g
ICAgICAgICAgICAgICAgZSA9IG5ldyBIVE1MQm9keUVsZW1lbnRJbXBsKGRvY3VtZW50KTsKLSAg
ICAgICAgICAgICAgICBzdGFydEJvZHkoKTsKLSAgICAgICAgICAgICAgICBpbnNlcnROb2RlKGUp
OwotICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIGlmICgh
aGF2ZUZyYW1lU2V0KSB7CisgICAgICAgICAgICAgICAgICAgIHBvcEJsb2NrKGN1cnJlbnRUYWdO
YW1lKTsKKyAgICAgICAgICAgICAgICAgICAgZSA9IG5ldyBIVE1MQm9keUVsZW1lbnRJbXBsKGRv
Y3VtZW50KTsKKyAgICAgICAgICAgICAgICAgICAgc3RhcnRCb2R5KCk7CisgICAgICAgICAgICAg
ICAgICAgIGluc2VydE5vZGUoZSk7CisgICAgICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVl
OworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIElEX0JPRFk6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJ
RF9DQVBUSU9OOgorICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6
OmNhcHRpb24oKSkpIHsKICAgICAgICAgICAgIC8vIElsbGVnYWwgY29udGVudCBpbiBhIGNhcHRp
b24uIENsb3NlIHRoZSBjYXB0aW9uIGFuZCB0cnkgYWdhaW4uCi0gICAgICAgICAgICBwb3BCbG9j
ayhJRF9DQVBUSU9OKTsKLSAgICAgICAgICAgIHN3aXRjaCggaWQgKSB7Ci0gICAgICAgICAgICBj
YXNlIElEX1RIRUFEOgotICAgICAgICAgICAgY2FzZSBJRF9URk9PVDoKLSAgICAgICAgICAgIGNh
c2UgSURfVEJPRFk6Ci0gICAgICAgICAgICBjYXNlIElEX1RSOgotICAgICAgICAgICAgY2FzZSBJ
RF9URDoKLSAgICAgICAgICAgIGNhc2UgSURfVEg6CisgICAgICAgICAgICBwb3BCbG9jayhjdXJy
ZW50VGFnTmFtZSk7CisgICAgICAgICAgICBpZiAoaXNUYWJsZVBhcnQobikpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGluc2VydE5vZGUobiwgZmxhdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJRF9UQUJMRToKLSAgICAgICAgY2FzZSBJRF9USEVB
RDoKLSAgICAgICAgY2FzZSBJRF9URk9PVDoKLSAgICAgICAgY2FzZSBJRF9UQk9EWToKLSAgICAg
ICAgY2FzZSBJRF9UUjoKLSAgICAgICAgICAgIHN3aXRjaChpZCkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgIGNhc2UgSURfVEFCTEU6Ci0gICAgICAgICAgICAgICAgcG9wQmxvY2soSURfVEFC
TEUpOyAvLyBlbmQgdGhlIHRhYmxlCisgICAgICAgIH0gZWxzZSBpZiAoaC0+aGFzTG9jYWxOYW1l
KEhUTUxOYW1lczo6dGFibGUoKSkgfHwgaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dHIoKSkg
fHwgaXNUYWJsZVNlY3Rpb24oaCkpIHsKKyAgICAgICAgICAgIGlmIChuLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6dGFibGUoKSkpIHsKKyAgICAgICAgICAgICAgICBwb3BCbG9jayhsb2NhbE5hbWUp
OyAvLyBlbmQgdGhlIHRhYmxlCiAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7ICAgICAg
Ly8gLi4uYW5kIHN0YXJ0IGEgbmV3IG9uZQotICAgICAgICAgICAgICAgIGJyZWFrOwotCSAgICBj
YXNlIElEX1RFWFQ6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgVGV4dEltcGwgKnQg
PSBzdGF0aWNfY2FzdDxUZXh0SW1wbCAqPihuKTsKLSAgICAgICAgICAgICAgICBpZiAodC0+Y29u
dGFpbnNPbmx5V2hpdGVzcGFjZSgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgICAgICAgICAgRE9NU3RyaW5nSW1wbCAqaSA9IHQtPnN0cmluZygpOwotICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGludCBwb3MgPSAwOwotICAgICAgICAgICAgICAgIHdoaWxlKHBv
cyA8IGktPmwgJiYgKCAqKGktPnMrcG9zKSA9PSBRQ2hhcignICcpIHx8Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICooaS0+cytwb3MpID09IFFDaGFyKDB4YTApKSkgcG9z
Kys7Ci0gICAgICAgICAgICAgICAgaWYocG9zID09IGktPmwpCi0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBOb2RlSW1wbCAqbm9kZSA9IGN1cnJlbnQ7Ci0gICAgICAgICAg
ICAgICAgTm9kZUltcGwgKnBhcmVudCA9IG5vZGUtPnBhcmVudE5vZGUoKTsKLQotICAgICAgICAg
ICAgICAgIE5vZGVJbXBsICpwYXJlbnRwYXJlbnQgPSBwYXJlbnQtPnBhcmVudE5vZGUoKTsKLQot
ICAgICAgICAgICAgICAgIGlmIChuLT5pc1RleHROb2RlKCkgfHwKLSAgICAgICAgICAgICAgICAg
ICAgKCBub2RlLT5pZCgpID09IElEX1RSICYmCi0gICAgICAgICAgICAgICAgICAgICAoIHBhcmVu
dC0+aWQoKSA9PSBJRF9USEVBRCB8fAotICAgICAgICAgICAgICAgICAgICAgIHBhcmVudC0+aWQo
KSA9PSBJRF9UQk9EWSB8fAotICAgICAgICAgICAgICAgICAgICAgIHBhcmVudC0+aWQoKSA9PSBJ
RF9URk9PVCApICYmIHBhcmVudHBhcmVudC0+aWQoKSA9PSBJRF9UQUJMRSApIHx8Ci0gICAgICAg
ICAgICAgICAgICAgICggIWNoZWNrQ2hpbGQoSURfVFIsIGlkLCAhZG9jKCktPmluQ29tcGF0TW9k
ZSgpKSAmJiAoIG5vZGUtPmlkKCkgPT0gSURfVEhFQUQgfHwgbm9kZS0+aWQoKSA9PSBJRF9UQk9E
WSB8fCBub2RlLT5pZCgpID09IElEX1RGT09UICkgJiYKLSAgICAgICAgICAgICAgICAgICAgIHBh
cmVudC0+aWQoKSA9PSBJRF9UQUJMRSApKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgbm9kZSA9IChub2RlLT5pZCgpID09IElEX1RBQkxFKSA/IG5vZGUgOgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICgobm9kZS0+aWQoKSA9PSBJRF9UUikgPyBwYXJlbnRwYXJl
bnQgOiBwYXJlbnQpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBib29s
IHBvc3NpYmx5TW92ZVN0cmF5Q29udGVudCA9IHRydWU7CisgICAgICAgICAgICAgICAgaW50IGV4
Y2VwdGlvbkNvZGUgPSAwOworICAgICAgICAgICAgICAgIGlmIChuLT5pc1RleHROb2RlKCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgVGV4dEltcGwgKnQgPSBzdGF0aWNfY2FzdDxUZXh0SW1wbCAq
PihuKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHQtPmNvbnRhaW5zT25seVdoaXRlc3BhY2Uo
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAg
ICAgICAgRE9NU3RyaW5nSW1wbCAqaSA9IHQtPnN0cmluZygpOworICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBpbnQgcG9zID0gMDsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHBvcyA8
IGktPmwgJiYgKCooaS0+cytwb3MpID09IFFDaGFyKCcgJykgfHwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICooaS0+cytwb3MpID09IFFDaGFyKDB4YTApKSkgcG9z
Kys7CisgICAgICAgICAgICAgICAgICAgIGlmIChwb3MgPT0gaS0+bCkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHBvc3NpYmx5TW92ZVN0cmF5Q29udGVudCA9IGZhbHNlOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBpZiAocG9zc2libHlNb3ZlU3RyYXlDb250ZW50KSB7Cisg
ICAgICAgICAgICAgICAgICAgIE5vZGVJbXBsICpub2RlID0gY3VycmVudDsKICAgICAgICAgICAg
ICAgICAgICAgTm9kZUltcGwgKnBhcmVudCA9IG5vZGUtPnBhcmVudE5vZGUoKTsKLSAgICAgICAg
ICAgICAgICAgICAgaW50IGV4Y2VwdGlvbmNvZGUgPSAwOwotICAgICAgICAgICAgICAgICAgICBw
YXJlbnQtPmluc2VydEJlZm9yZSggbiwgbm9kZSwgZXhjZXB0aW9uY29kZSApOwotICAgICAgICAg
ICAgICAgICAgICBpZiAoIGV4Y2VwdGlvbmNvZGUgKSB7Ci0jaWZkZWYgUEFSU0VSX0RFQlVHCi0g
ICAgICAgICAgICAgICAgICAgICAgICBrZERlYnVnKCA2MDM1ICkgPDwgImFkZGluZyBjb250ZW50
IGJlZm9yZSB0YWJsZSBmYWlsZWQhIiA8PCBlbmRsOwotI2VuZGlmCi0gICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgTm9kZUltcGwgKmdyYW5kcGFyZW50
ID0gcGFyZW50LT5wYXJlbnROb2RlKCk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKG4tPmlz
VGV4dE5vZGUoKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgKGgtPmhhc0xvY2FsTmFtZShI
VE1MTmFtZXM6OnRyKCkpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgaXNUYWJsZVNlY3Rp
b24ocGFyZW50KSAmJiBncmFuZHBhcmVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRhYmxlKCkp
KSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICgoIW4tPmhhc1RhZ05hbWUoSFRNTE5hbWVz
Ojp0ZCgpKSAmJiAhbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRoKCkpICYmCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAhbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZvcm0oKSkgJiYgIW4t
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzY3JpcHQoKSkpICYmIGlzVGFibGVTZWN0aW9uKG5vZGUp
ICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6dGFibGUoKSkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBub2RlID0gKG5vZGUtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjp0YWJsZSgpKSkgPyBub2RlIDoKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKChub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dHIoKSkpID8gZ3Jh
bmRwYXJlbnQgOiBwYXJlbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgTm9kZUltcGwgKnBh
cmVudCA9IG5vZGUtPnBhcmVudE5vZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVu
dC0+aW5zZXJ0QmVmb3JlKG4sIG5vZGUsIGV4Y2VwdGlvbkNvZGUpOworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCFleGNlcHRpb25Db2RlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKG4tPmlzSFRNTEVsZW1lbnQoKSAmJiB0YWdQcmlvcml0eSA+IDAgJiYgCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICFmbGF0ICYmIHN0YXRpY19jYXN0PEhUTUxFbGVtZW50
SW1wbCo+KG4pLT5lbmRUYWdSZXF1aXJlbWVudCgpICE9IFRhZ1N0YXR1c0ZvcmJpZGRlbikKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHB1c2hCbG9jayhsb2NhbE5hbWUsIHRhZ1ByaW9yaXR5KTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2V0Q3VycmVudChuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW5TdHJheVRhYmxlQ29udGVudCsrOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBibG9ja1N0YWNrLT5zdHJheVRhYmxlQ29udGVudCA9IHRydWU7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChuLT5pc0VsZW1lbnROb2RlKCkgJiYgdGFnUHJpb3JpdHkoaWQp
ICE9IDAgJiYgCi0gICAgICAgICAgICAgICAgICAgICAgICAhZmxhdCAmJiBlbmRUYWdSZXF1aXJl
bWVudChpZCkgIT0gRE9NOjpGT1JCSURERU4pCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHB1c2hCbG9jayhpZCwgdGFnUHJpb3JpdHkoaWQpKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHNldEN1cnJlbnQobik7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpblN0cmF5VGFibGVDb250ZW50Kys7Ci0gICAgICAgICAgICAgICAgICAgICAgICBibG9ja1N0
YWNrLT5zdHJheVRhYmxlQ29udGVudCA9IHRydWU7CisKKyAgICAgICAgICAgICAgICAgICAgaWYg
KCFleGNlcHRpb25Db2RlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudC0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRyKCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGUgPSBuZXcgSFRNTFRhYmxlQ2VsbEVsZW1lbnRJbXBsKEhUTUxOYW1lczo6dGQoKSwgZG9jdW1l
bnQpOworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY3VycmVudC0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OnRhYmxlKCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUgPSBu
ZXcgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsKEhUTUxOYW1lczo6dGJvZHkoKSwgZG9jdW1l
bnQsIHRydWUpOyAvLyBpbXBsaWNpdCAKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlID0gbmV3IEhUTUxUYWJsZVJvd0VsZW1lbnRJbXBs
KGRvY3VtZW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAg
ICAgICAgaW5zZXJ0Tm9kZShlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0
cnVlOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICggY3VycmVudC0+
aWQoKSA9PSBJRF9UUiApCi0gICAgICAgICAgICAgICAgICAgIGUgPSBuZXcgSFRNTFRhYmxlQ2Vs
bEVsZW1lbnRJbXBsKGRvY3VtZW50LCBJRF9URCk7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAo
IGN1cnJlbnQtPmlkKCkgPT0gSURfVEFCTEUgKQotICAgICAgICAgICAgICAgICAgICBlID0gbmV3
IEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50SW1wbCggZG9jdW1lbnQsIElEX1RCT0RZLCB0cnVlIC8q
IGltcGxpY2l0ICovICk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAg
ICBlID0gbmV3IEhUTUxUYWJsZVJvd0VsZW1lbnRJbXBsKCBkb2N1bWVudCApOwotICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgIGluc2VydE5vZGUoZSk7Ci0gICAgICAgICAgICAgICAg
aGFuZGxlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9IC8v
IGVuZCBkZWZhdWx0Ci0gICAgICAgICAgICB9IC8vIGVuZCBzd2l0Y2gKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIElEX09CSkVDVDoKLSAgICAgICAgICAgIGRpc2NhcmRfdW50aWwg
PSBJRF9PQkpFQ1QgKyBJRF9DTE9TRV9UQUc7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZSBpZiAoaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6b2JqZWN0KCkpKSB7Cisg
ICAgICAgICAgICBzZXRTa2lwTW9kZShIVE1MTmFtZXM6Om9iamVjdCgpKTsKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgY2FzZSBJRF9VTDoKLSAgICAgICAgY2FzZSBJRF9PTDoK
LSAgICAgICAgY2FzZSBJRF9ESVI6Ci0gICAgICAgIGNhc2UgSURfTUVOVToKKyAgICAgICAgfSBl
bHNlIGlmIChoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp1bCgpKSB8fCBoLT5oYXNMb2NhbE5h
bWUoSFRNTE5hbWVzOjpvbCgpKSB8fAorICAgICAgICAgICAgICAgICBoLT5oYXNMb2NhbE5hbWUo
SFRNTE5hbWVzOjpkaXIoKSkgfHwgaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6bWVudSgpKSkg
ewogICAgICAgICAgICAgZSA9IG5ldyBIVE1MRGl2RWxlbWVudEltcGwoZG9jdW1lbnQpOwogICAg
ICAgICAgICAgaW5zZXJ0Tm9kZShlKTsKICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIElEX0RMOgotICAgICAgICAgICAgICAg
IHBvcEJsb2NrKElEX0RMKTsKLSAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgSURfRFQ6Ci0gICAgICAgICAgICAg
ICAgcG9wQmxvY2soSURfRFQpOwotICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElEX1NFTEVDVDoKLSAgICAgICAgICAg
IGlmKCBuLT5pc0lubGluZSgpICkKKyAgICAgICAgfSBlbHNlIGlmIChoLT5oYXNMb2NhbE5hbWUo
SFRNTE5hbWVzOjpkbCgpKSB8fCBoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpkdCgpKSkgewor
ICAgICAgICAgICAgcG9wQmxvY2soY3VycmVudFRhZ05hbWUpOworICAgICAgICAgICAgaGFuZGxl
ZCA9IHRydWU7CisgICAgICAgIH0gZWxzZSBpZiAoaC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6
c2VsZWN0KCkpKSB7CisgICAgICAgICAgICBpZiAoaXNJbmxpbmUobikpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSURfUDoK
LSAgICAgICAgY2FzZSBJRF9IMToKLSAgICAgICAgY2FzZSBJRF9IMjoKLSAgICAgICAgY2FzZSBJ
RF9IMzoKLSAgICAgICAgY2FzZSBJRF9INDoKLSAgICAgICAgY2FzZSBJRF9INToKLSAgICAgICAg
Y2FzZSBJRF9INjoKLSAgICAgICAgICAgIGlmKCFuLT5pc0lubGluZSgpKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIHBvcEJsb2NrKGN1cnJlbnQtPmlkKCkpOworICAgICAgICB9IGVs
c2UgaWYgKGgtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnAoKSkgfHwgaXNIZWFkZXJUYWcoY3Vy
cmVudFRhZ05hbWUpKSB7CisgICAgICAgICAgICBpZiAoIWlzSW5saW5lKG4pKSB7CisgICAgICAg
ICAgICAgICAgcG9wQmxvY2soY3VycmVudFRhZ05hbWUpOwogICAgICAgICAgICAgICAgIGhhbmRs
ZWQgPSB0cnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgSURfT1BUSU9OOgotICAgICAgICBjYXNlIElEX09QVEdST1VQOgotICAgICAgICAgICAgaWYg
KGlkID09IElEX09QVEdST1VQKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHBvcEJs
b2NrKGN1cnJlbnQtPmlkKCkpOworICAgICAgICB9IGVsc2UgaWYgKGgtPmhhc0xvY2FsTmFtZShI
VE1MTmFtZXM6Om9wdGlvbigpKSB8fCBoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpvcHRncm91
cCgpKSkgeworICAgICAgICAgICAgaWYgKGxvY2FsTmFtZSA9PSBIVE1MTmFtZXM6Om9wdGdyb3Vw
KCkpIHsKKyAgICAgICAgICAgICAgICBwb3BCbG9jayhjdXJyZW50VGFnTmFtZSk7CiAgICAgICAg
ICAgICAgICAgaGFuZGxlZCA9IHRydWU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNl
IGlmKGlkID09IElEX1NFTEVDVCkKLSAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGVsc2UgaWYg
KGxvY2FsTmFtZSA9PSBIVE1MTmFtZXM6OnNlbGVjdCgpKSB7CiAgICAgICAgICAgICAgICAgLy8g
SUUgdHJlYXRzIGEgbmVzdGVkIHNlbGVjdCBhcyA8L3NlbGVjdD4uIExldCdzIGRvIHRoZSBzYW1l
Ci0gICAgICAgICAgICAgICAgcG9wQmxvY2soIElEX1NFTEVDVCApOwotICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIHBvcEJsb2NrKGxvY2FsTmFtZSk7CiAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIC8vIGhlYWQgZWxlbWVudHMgaW4g
dGhlIGJvZHkgc2hvdWxkIGJlIGlnbm9yZWQuCi0gICAgICAgIGNhc2UgSURfQUREUkVTUzoKLSAg
ICAgICAgICAgIHBvcEJsb2NrKElEX0FERFJFU1MpOworICAgICAgICB9IGVsc2UgaWYgKGgtPmhh
c0xvY2FsTmFtZShIVE1MTmFtZXM6OmFkZHJlc3MoKSkpIHsKKyAgICAgICAgICAgIHBvcEJsb2Nr
KGN1cnJlbnRUYWdOYW1lKTsKICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSURfQ09MR1JPVVA6Ci0gICAgICAgICAgICBpZiAoaWQg
IT0gSURfVEVYVCkgewotICAgICAgICAgICAgICAgIHBvcEJsb2NrKElEX0NPTEdST1VQKTsKKyAg
ICAgICAgfSBlbHNlIGlmIChoLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpjb2xncm91cCgpKSkg
eworICAgICAgICAgICAgaWYgKCFuLT5pc1RleHROb2RlKCkpIHsKKyAgICAgICAgICAgICAgICBw
b3BCbG9jayhjdXJyZW50VGFnTmFtZSk7CiAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7
CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJRF9GT05U
OgotICAgICAgICAgICAgcG9wQmxvY2soSURfRk9OVCk7CisgICAgICAgIH0gZWxzZSBpZiAoaC0+
aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6Zm9udCgpKSkgeworICAgICAgICAgICAgcG9wQmxvY2so
Y3VycmVudFRhZ05hbWUpOwogICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGlmKGN1cnJlbnQtPmlzRG9j
dW1lbnROb2RlKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYoY3VycmVudC0+
Zmlyc3RDaGlsZCgpID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgZSA9IG5ldyBIVE1MSHRt
bEVsZW1lbnRJbXBsKGRvY3VtZW50KTsKLSAgICAgICAgICAgICAgICAgICAgaW5zZXJ0Tm9kZShl
KTsKLSAgICAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZihjdXJyZW50LT5pc0lubGluZSgp
KQotICAgICAgICAgICAgeworICAgICAgICB9IGVsc2UgaWYgKCFoLT5oYXNMb2NhbE5hbWUoSFRN
TE5hbWVzOjpib2R5KCkpKSB7CisgICAgICAgICAgICBpZiAoaXNJbmxpbmUoY3VycmVudCkpIHsK
ICAgICAgICAgICAgICAgICBwb3BJbmxpbmVCbG9ja3MoKTsKICAgICAgICAgICAgICAgICBoYW5k
bGVkID0gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotCi0gICAgICAgIC8vIGlmIHdl
IGNvdWxkbid0IGhhbmRsZSB0aGUgZXJyb3IsIGp1c3QgcmV0aHJvdyB0aGUgZXhjZXB0aW9uLi4u
Ci0gICAgICAgIGlmKCFoYW5kbGVkKQotICAgICAgICB7Ci0gICAgICAgICAgICAvL2tkRGVidWco
IDYwMzUgKSA8PCAiRXhjZXB0aW9uIGhhbmRsZXIgZmFpbGVkIGluIEhUTUxQQXJzZXI6Omluc2Vy
dE5vZGUoKSIgPDwgZW5kbDsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
ZWxzZSBpZiAoY3VycmVudC0+aXNEb2N1bWVudE5vZGUoKSkgeworICAgICAgICBpZiAoY3VycmVu
dC0+Zmlyc3RDaGlsZCgpID09IDApIHsKKyAgICAgICAgICAgIGUgPSBuZXcgSFRNTEh0bWxFbGVt
ZW50SW1wbChkb2N1bWVudCk7CisgICAgICAgICAgICBpbnNlcnROb2RlKGUpOworICAgICAgICAg
ICAgaGFuZGxlZCA9IHRydWU7CiAgICAgICAgIH0KLQotICAgICAgICByZXR1cm4gaW5zZXJ0Tm9k
ZShuKTsKICAgICB9CisKKyAgICAvLyAzLiBJZiB3ZSBjb3VsZG4ndCBoYW5kbGUgdGhlIGVycm9y
LCBqdXN0IHJldHVybiBmYWxzZSBhbmQgYXR0ZW1wdCB0byBlcnJvci1jb3JyZWN0IGFnYWluLgor
ICAgIGlmICghaGFuZGxlZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBpbnNl
cnROb2RlKG4pOwogfQogCi1Ob2RlSW1wbCAqS0hUTUxQYXJzZXI6OmdldEVsZW1lbnQoVG9rZW4q
IHQpCit0eXBlZGVmIGJvb2wgKEhUTUxQYXJzZXI6OipDcmVhdGVFcnJvckNoZWNrRnVuYykoVG9r
ZW4qIHQsIE5vZGVJbXBsKiYpOwordHlwZWRlZiBIYXNoTWFwPERPTVN0cmluZ0ltcGwgKiwgQ3Jl
YXRlRXJyb3JDaGVja0Z1bmMsIFBvaW50ZXJIYXNoPERPTVN0cmluZ0ltcGwgKj4gPiBGdW5jdGlv
bk1hcDsKKworYm9vbCBIVE1MUGFyc2VyOjp0ZXh0Q3JlYXRlRXJyb3JDaGVjayhUb2tlbiogdCwg
Tm9kZUltcGwqJiByZXN1bHQpCiB7Ci0gICAgc3dpdGNoICh0LT5pZCkKLSAgICB7Ci0gICAgY2Fz
ZSBJRF9IRUFEOgotICAgICAgICBpZiAoIWhlYWQgJiYgY3VycmVudC0+aWQoKSA9PSBJRF9IVE1M
KSB7Ci0gICAgICAgICAgICBoZWFkID0gbmV3IEhUTUxIZWFkRWxlbWVudEltcGwoZG9jdW1lbnQp
OwotICAgICAgICAgICAgcmV0dXJuIGhlYWQ7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgY2FzZSBJRF9CT0RZOgotICAgICAgICAvLyBib2R5IG5vIGxvbmdlciBhbGxvd2VkIGlm
IHdlIGhhdmUgYSBmcmFtZXNldAotICAgICAgICBpZiAoaGF2ZUZyYW1lU2V0KQotICAgICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgICAgIHBvcEJsb2NrKElEX0hFQUQpOwotICAgICAgICBzdGFydEJv
ZHkoKTsKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MQm9keUVsZW1lbnRJbXBsKGRvY3VtZW50KTsK
LQotLy8gZnJhbWVzCi0gICAgY2FzZSBJRF9GUkFNRVNFVDoKLSAgICAgICAgcG9wQmxvY2soSURf
SEVBRCk7Ci0gICAgICAgIGlmIChpbkJvZHkgJiYgIWhhdmVGcmFtZVNldCAmJiAhaGF2ZUNvbnRl
bnQpIHsKLSAgICAgICAgICAgIHBvcEJsb2NrKElEX0JPRFkpOwotICAgICAgICAgICAgLy8gIyMj
IGFjdHVhbGx5IGZvciBJRSBkb2N1bWVudC5ib2R5IHJldHVybnMgdGhlIG5vdyBoaWRkZW4gImJv
ZHkiIGVsZW1lbnQKLSAgICAgICAgICAgIC8vIHdlIGNhbid0IGltcGxlbWVudCB0aGF0IGJlaGF2
aW91ciBub3cgYmVjYXVzZSBpdCBjb3VsZCBjYXVzZSB0b28gbWFueQotICAgICAgICAgICAgLy8g
cmVncmVzc2lvbnMgYW5kIHRoZSBoZWFkYWNoZXMgYXJlIG5vdCB3b3J0aCB0aGUgd29yayBhcyBs
b25nIGFzIHRoZXJlIGlzCi0gICAgICAgICAgICAvLyBubyBzaXRlIGFjdHVhbGx5IHJlbHlpbmcg
b24gdGhhdCBkZXRhaWwgKERpcmspCi0gICAgICAgICAgICBpZiAoZG9jKCktPmJvZHkoKSkKLSAg
ICAgICAgICAgICAgICBkb2MoKS0+Ym9keSgpLT5zZXRBdHRyaWJ1dGUoQVRUUl9TVFlMRSwgImRp
c3BsYXk6bm9uZSIpOwotICAgICAgICAgICAgaW5Cb2R5ID0gZmFsc2U7Ci0gICAgICAgIH0KLSAg
ICAgICAgaWYgKChoYXZlQ29udGVudCB8fCBoYXZlRnJhbWVTZXQpICYmIGN1cnJlbnQtPmlkKCkg
PT0gSURfSFRNTCkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBoYXZlRnJhbWVTZXQg
PSB0cnVlOwotICAgICAgICBzdGFydEJvZHkoKTsKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MRnJh
bWVTZXRFbGVtZW50SW1wbChkb2N1bWVudCk7CisgICAgcmVzdWx0ID0gbmV3IFRleHRJbXBsKGRv
Y3VtZW50LCB0LT50ZXh0KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CiAKK2Jvb2wgSFRNTFBhcnNl
cjo6Y29tbWVudENyZWF0ZUVycm9yQ2hlY2soVG9rZW4qIHQsIE5vZGVJbXBsKiYgcmVzdWx0KQor
eworICAgIGlmIChpbmNsdWRlc0NvbW1lbnRzSW5ET00pCisgICAgICAgIHJlc3VsdCA9IG5ldyBD
b21tZW50SW1wbChkb2N1bWVudCwgdC0+dGV4dCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCiti
b29sIEhUTUxQYXJzZXI6OmhlYWRDcmVhdGVFcnJvckNoZWNrKFRva2VuKiB0LCBOb2RlSW1wbCom
IHJlc3VsdCkKK3sKKyAgICByZXR1cm4gKCFoZWFkIHx8IGN1cnJlbnQtPmxvY2FsTmFtZSgpID09
IEhUTUxOYW1lczo6aHRtbCgpKTsKK30KKworYm9vbCBIVE1MUGFyc2VyOjpib2R5Q3JlYXRlRXJy
b3JDaGVjayhUb2tlbiogdCwgTm9kZUltcGwqJiByZXN1bHQpCit7CisgICAgLy8gYm9keSBubyBs
b25nZXIgYWxsb3dlZCBpZiB3ZSBoYXZlIGEgZnJhbWVzZXQKKyAgICBpZiAoaGF2ZUZyYW1lU2V0
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcG9wQmxvY2soSFRNTE5hbWVzOjpoZWFkKCkp
OworICAgIHN0YXJ0Qm9keSgpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEhUTUxQYXJz
ZXI6OmZyYW1lc2V0Q3JlYXRlRXJyb3JDaGVjayhUb2tlbiogdCwgTm9kZUltcGwqJiByZXN1bHQp
Cit7CisgICAgcG9wQmxvY2soSFRNTE5hbWVzOjpoZWFkKCkpOworICAgIGlmIChpbkJvZHkgJiYg
IWhhdmVGcmFtZVNldCAmJiAhaGF2ZUNvbnRlbnQpIHsKKyAgICAgICAgcG9wQmxvY2soSFRNTE5h
bWVzOjpib2R5KCkpOworICAgICAgICAvLyAjIyMgYWN0dWFsbHkgZm9yIElFIGRvY3VtZW50LmJv
ZHkgcmV0dXJucyB0aGUgbm93IGhpZGRlbiAiYm9keSIgZWxlbWVudAorICAgICAgICAvLyB3ZSBj
YW4ndCBpbXBsZW1lbnQgdGhhdCBiZWhhdmlvdXIgbm93IGJlY2F1c2UgaXQgY291bGQgY2F1c2Ug
dG9vIG1hbnkKKyAgICAgICAgLy8gcmVncmVzc2lvbnMgYW5kIHRoZSBoZWFkYWNoZXMgYXJlIG5v
dCB3b3J0aCB0aGUgd29yayBhcyBsb25nIGFzIHRoZXJlIGlzCisgICAgICAgIC8vIG5vIHNpdGUg
YWN0dWFsbHkgcmVseWluZyBvbiB0aGF0IGRldGFpbCAoRGlyaykKKyAgICAgICAgaWYgKGRvYygp
LT5ib2R5KCkpCisgICAgICAgICAgICBkb2MoKS0+Ym9keSgpLT5zZXRBdHRyaWJ1dGUoQVRUUl9T
VFlMRSwgImRpc3BsYXk6bm9uZSIpOworICAgICAgICBpbkJvZHkgPSBmYWxzZTsKKyAgICB9Cisg
ICAgaWYgKChoYXZlQ29udGVudCB8fCBoYXZlRnJhbWVTZXQpICYmIGN1cnJlbnQtPmxvY2FsTmFt
ZSgpID09IEhUTUxOYW1lczo6aHRtbCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaGF2
ZUZyYW1lU2V0ID0gdHJ1ZTsKKyAgICBzdGFydEJvZHkoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBIVE1MUGFyc2VyOjppZnJhbWVDcmVhdGVFcnJvckNoZWNrKFRva2VuKiB0LCBOb2Rl
SW1wbComIHJlc3VsdCkKK3sKICAgICAvLyBhIGJpdCBvZiBhIHNwZWNpYWwgY2FzZSwgc2luY2Ug
dGhlIGZyYW1lIGlzIGlubGluZWQKLSAgICBjYXNlIElEX0lGUkFNRToKLSAgICAgICAgZGlzY2Fy
ZF91bnRpbCA9IElEX0lGUkFNRSArIElEX0NMT1NFX1RBRzsKLSAgICAgICAgYnJlYWs7Ci0KLS8v
IGZvcm0gZWxlbWVudHMKLSAgICBjYXNlIElEX0ZPUk06Ci0gICAgICAgIC8vIE9ubHkgY3JlYXRl
IGEgbmV3IGZvcm0gaWYgd2UncmUgbm90IGFscmVhZHkgaW5zaWRlIG9uZS4KLSAgICAgICAgLy8g
VGhpcyBpcyBjb25zaXN0ZW50IHdpdGggb3RoZXIgYnJvd3NlcnMnIGJlaGF2aW9yLgotICAgICAg
ICBpZiAoZm9ybSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBmb3JtID0gbmV3IEhU
TUxGb3JtRWxlbWVudEltcGwoZG9jdW1lbnQpOwotICAgICAgICByZXR1cm4gZm9ybTsKLSAgICBj
YXNlIElEX0JVVFRPTjoKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MQnV0dG9uRWxlbWVudEltcGwo
ZG9jdW1lbnQsIGZvcm0pOwotICAgIGNhc2UgSURfRklFTERTRVQ6Ci0gICAgICAgIHJldHVybiBu
ZXcgSFRNTEZpZWxkU2V0RWxlbWVudEltcGwoZG9jdW1lbnQsIGZvcm0pOwotICAgIGNhc2UgSURf
SU5QVVQ6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTElucHV0RWxlbWVudEltcGwoZG9jdW1lbnQs
IGZvcm0pOwotICAgIGNhc2UgSURfSVNJTkRFWDogewotICAgICAgICBOb2RlSW1wbCAqbiA9IGhh
bmRsZUlzaW5kZXgodCk7Ci0gICAgICAgIGlmICghaW5Cb2R5KSB7Ci0gICAgICAgICAgICBpZiAo
aXNpbmRleCkKLSAgICAgICAgICAgICAgICBpc2luZGV4LT5kZXJlZigpOwotICAgICAgICAgICAg
aXNpbmRleCA9IG47Ci0gICAgICAgICAgICBpc2luZGV4LT5yZWYoKTsKLSAgICAgICAgICAgIHJl
dHVybiAwOwotICAgICAgICB9CisgICAgc2V0U2tpcE1vZGUoSFRNTE5hbWVzOjppZnJhbWUoKSk7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgSFRNTFBhcnNlcjo6Zm9ybUNyZWF0ZUVycm9y
Q2hlY2soVG9rZW4qIHQsIE5vZGVJbXBsKiYgcmVzdWx0KQoreworICAgIC8vIE9ubHkgY3JlYXRl
IGEgbmV3IGZvcm0gaWYgd2UncmUgbm90IGFscmVhZHkgaW5zaWRlIG9uZS4KKyAgICAvLyBUaGlz
IGlzIGNvbnNpc3RlbnQgd2l0aCBvdGhlciBicm93c2VycycgYmVoYXZpb3IuCisgICAgcmV0dXJu
ICFmb3JtOworfQorCitib29sIEhUTUxQYXJzZXI6OmlzaW5kZXhDcmVhdGVFcnJvckNoZWNrKFRv
a2VuKiB0LCBOb2RlSW1wbComIHJlc3VsdCkKK3sKKyAgICBOb2RlSW1wbCAqbiA9IGhhbmRsZUlz
aW5kZXgodCk7CisgICAgaWYgKCFpbkJvZHkpIHsKKyAgICAgICAgaWYgKGlzaW5kZXgpCisgICAg
ICAgICAgICBpc2luZGV4LT5kZXJlZigpOworICAgICAgICBpc2luZGV4ID0gbjsKKyAgICAgICAg
aXNpbmRleC0+cmVmKCk7CisgICAgfSBlbHNlIHsKICAgICAgICAgdC0+ZmxhdCA9IHRydWU7Ci0g
ICAgICAgIHJldHVybiBuOworICAgICAgICByZXN1bHQgPSBuOwogICAgIH0KLSAgICBjYXNlIElE
X0tFWUdFTjoKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MS2V5Z2VuRWxlbWVudEltcGwoZG9jdW1l
bnQsIGZvcm0pOwotICAgIGNhc2UgSURfTEVHRU5EOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxM
ZWdlbmRFbGVtZW50SW1wbChkb2N1bWVudCwgZm9ybSk7Ci0gICAgY2FzZSBJRF9PUFRHUk9VUDoK
LSAgICAgICAgcmV0dXJuIG5ldyBIVE1MT3B0R3JvdXBFbGVtZW50SW1wbChkb2N1bWVudCwgZm9y
bSk7Ci0gICAgY2FzZSBJRF9PUFRJT046Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTE9wdGlvbkVs
ZW1lbnRJbXBsKGRvY3VtZW50LCBmb3JtKTsKLSAgICBjYXNlIElEX1NFTEVDVDoKLSAgICAgICAg
aW5TZWxlY3QgPSB0cnVlOwotICAgICAgICByZXR1cm4gbmV3IEhUTUxTZWxlY3RFbGVtZW50SW1w
bChkb2N1bWVudCwgZm9ybSk7Ci0gICAgY2FzZSBJRF9URVhUQVJFQToKLSAgICAgICAgcmV0dXJu
IG5ldyBIVE1MVGV4dEFyZWFFbGVtZW50SW1wbChkb2N1bWVudCwgZm9ybSk7Ci0KLS8vIGxpc3Rz
Ci0gICAgY2FzZSBJRF9ERDoKLSAgICAgICAgcG9wQmxvY2soSURfRFQpOwotICAgICAgICBwb3BC
bG9jayhJRF9ERCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSURfRFQ6Ci0gICAgICAgIHBv
cEJsb2NrKElEX0REKTsKLSAgICAgICAgcG9wQmxvY2soSURfRFQpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIElEX0xJOgotICAgICAgICBwb3BCbG9jayhJRF9MSSk7Ci0gICAgICAgIGJyZWFr
OwotCi0vLyBhbmNob3IKLSAgICBjYXNlIElEX0E6Ci0gICAgICAgIC8vIE5ldmVyIGFsbG93IG5l
c3RlZCA8YT5zLgotICAgICAgICBwb3BCbG9jayhJRF9BKTsKLSAgICAgICAgYnJlYWs7Ci0KLS8v
IGltYWdlcwotICAgIGNhc2UgSURfSU1HOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxJbWFnZUVs
ZW1lbnRJbXBsKGRvY3VtZW50LCBmb3JtKTsKLSAgICBjYXNlIElEX01BUDoKLSAgICAgICAgbWFw
ID0gbmV3IEhUTUxNYXBFbGVtZW50SW1wbChkb2N1bWVudCk7Ci0gICAgICAgIHJldHVybiBtYXA7
Ci0KLS8vIHRhYmxlcwotICAgIGNhc2UgSURfVFI6Ci0gICAgICAgIHBvcEJsb2NrKElEX1RSKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJRF9URDoKLSAgICBjYXNlIElEX1RIOgotICAgICAg
ICBwb3BCbG9jayhJRF9USCk7Ci0gICAgICAgIHBvcEJsb2NrKElEX1REKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBJRF9UQk9EWToKLSAgICBjYXNlIElEX1RIRUFEOgotICAgIGNhc2UgSURf
VEZPT1Q6Ci0gICAgICAgIHBvcEJsb2NrKElEX1RIRUFEKTsKLSAgICAgICAgcG9wQmxvY2soSURf
VEJPRFkpOwotICAgICAgICBwb3BCbG9jayhJRF9URk9PVCk7Ci0gICAgICAgIGJyZWFrOwotCi0v
LyBlbGVtZW50cyB3aXRoIG5vIHNwZWNpYWwgcmVwcmVzZW50YXRpb24gaW4gdGhlIERPTQotICAg
IGNhc2UgSURfVFQ6Ci0gICAgY2FzZSBJRF9VOgotICAgIGNhc2UgSURfQjoKLSAgICBjYXNlIElE
X0k6Ci0gICAgY2FzZSBJRF9TOgotICAgIGNhc2UgSURfU1RSSUtFOgotICAgIGNhc2UgSURfQklH
OgotICAgIGNhc2UgSURfU01BTEw6Ci0gICAgICAgIGlmICghYWxsb3dOZXN0ZWRSZWR1bmRhbnRU
YWcodC0+aWQpKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIGJyZWFrOwotCi0gICAg
Y2FzZSBJRF9OT0JSOgotICAgIGNhc2UgSURfV0JSOgotICAgICAgICBwb3BCbG9jayh0LT5pZCk7
IC8vIERvbid0IGFsbG93IG5lc3RlZCA8bm9icj4gb3IgPHdicj4KLSAgICAgICAgYnJlYWs7Ci0K
LS8vIHRoZXNlIGFyZSBzcGVjaWFsLCBhbmQgbm9ybWFsbHkgbm90IHJlbmRlcmVkCi0gICAgY2Fz
ZSBJRF9OT0VNQkVEOgotICAgICAgICBkaXNjYXJkX3VudGlsID0gSURfTk9FTUJFRCArIElEX0NM
T1NFX1RBRzsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgY2FzZSBJRF9OT0ZSQU1FUzoKLSAgICAg
ICAgZGlzY2FyZF91bnRpbCA9IElEX05PRlJBTUVTICsgSURfQ0xPU0VfVEFHOwotICAgICAgICBy
ZXR1cm4gMDsKLSAgICBjYXNlIElEX05PU0NSSVBUOgotICAgICAgICBpZiAoSFRNTFdpZGdldCAm
JiBIVE1MV2lkZ2V0LT5wYXJ0KCktPmpTY3JpcHRFbmFibGVkKCkpCi0gICAgICAgICAgICBkaXNj
YXJkX3VudGlsID0gSURfTk9TQ1JJUFQgKyBJRF9DTE9TRV9UQUc7Ci0gICAgICAgIHJldHVybiAw
OwotICAgIGNhc2UgSURfTk9MQVlFUjoKLSAgICAgICAgLy9kaXNjYXJkX3VudGlsID0gSURfTk9M
QVlFUiArIElEX0NMT1NFX1RBRzsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgY2FzZSBJRF9URVhU
OgotICAgICAgICByZXR1cm4gbmV3IFRleHRJbXBsKGRvY3VtZW50LCB0LT50ZXh0KTsKLSAgICBj
YXNlIElEX0NPTU1FTlQ6Ci0gICAgICAgIGlmICghaW5jbHVkZXNDb21tZW50c0luRE9NKQotICAg
ICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBJRF9TQ1JJUFQ6
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEhUTUxTY3JpcHRFbGVtZW50SW1wbCAqc2NyaXB0RWxl
bWVudCA9IG5ldyBIVE1MU2NyaXB0RWxlbWVudEltcGwoZG9jdW1lbnQpOwotICAgICAgICAgICAg
c2NyaXB0RWxlbWVudC0+c2V0Q3JlYXRlZEJ5UGFyc2VyKHRydWUpOwotICAgICAgICAgICAgcmV0
dXJuIHNjcmlwdEVsZW1lbnQ7Ci0gICAgICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jv
b2wgSFRNTFBhcnNlcjo6c2VsZWN0Q3JlYXRlRXJyb3JDaGVjayhUb2tlbiogdCwgTm9kZUltcGwq
JiByZXN1bHQpCit7CisgICAgaW5TZWxlY3QgPSB0cnVlOworICAgIHJldHVybiB0cnVlOworfQor
Citib29sIEhUTUxQYXJzZXI6OmRkQ3JlYXRlRXJyb3JDaGVjayhUb2tlbiogdCwgTm9kZUltcGwq
JiByZXN1bHQpCit7CisgICAgcG9wQmxvY2soSFRNTE5hbWVzOjpkdCgpKTsKKyAgICBwb3BCbG9j
ayhIVE1MTmFtZXM6OmRkKCkpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEhUTUxQYXJz
ZXI6OmR0Q3JlYXRlRXJyb3JDaGVjayhUb2tlbiogdCwgTm9kZUltcGwqJiByZXN1bHQpCit7Cisg
ICAgcG9wQmxvY2soSFRNTE5hbWVzOjpkZCgpKTsKKyAgICBwb3BCbG9jayhIVE1MTmFtZXM6OmR0
KCkpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEhUTUxQYXJzZXI6Om5lc3RlZENyZWF0
ZUVycm9yQ2hlY2soVG9rZW4qIHQsIE5vZGVJbXBsKiYgcmVzdWx0KQoreworICAgIHBvcEJsb2Nr
KHQtPnRhZ05hbWUpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEhUTUxQYXJzZXI6Om5l
c3RlZFN0eWxlQ3JlYXRlRXJyb3JDaGVjayhUb2tlbiogdCwgTm9kZUltcGwqJiByZXN1bHQpCit7
CisgICAgcmV0dXJuIGFsbG93TmVzdGVkUmVkdW5kYW50VGFnKHQtPnRhZ05hbWUpOworfQorCiti
b29sIEhUTUxQYXJzZXI6OnRhYmxlQ2VsbENyZWF0ZUVycm9yQ2hlY2soVG9rZW4qIHQsIE5vZGVJ
bXBsKiYgcmVzdWx0KQoreworICAgIHBvcEJsb2NrKEhUTUxOYW1lczo6dGQoKSk7CisgICAgcG9w
QmxvY2soSFRNTE5hbWVzOjp0aCgpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBIVE1M
UGFyc2VyOjp0YWJsZVNlY3Rpb25DcmVhdGVFcnJvckNoZWNrKFRva2VuKiB0LCBOb2RlSW1wbCom
IHJlc3VsdCkKK3sKKyAgICBwb3BCbG9jayhIVE1MTmFtZXM6OnRoZWFkKCkpOworICAgIHBvcEJs
b2NrKEhUTUxOYW1lczo6dGJvZHkoKSk7CisgICAgcG9wQmxvY2soSFRNTE5hbWVzOjp0Zm9vdCgp
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBIVE1MUGFyc2VyOjpub2VtYmVkQ3JlYXRl
RXJyb3JDaGVjayhUb2tlbiogdCwgTm9kZUltcGwqJiByZXN1bHQpCit7CisgICAgc2V0U2tpcE1v
ZGUoSFRNTE5hbWVzOjpub2VtYmVkKCkpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBI
VE1MUGFyc2VyOjpub2ZyYW1lc0NyZWF0ZUVycm9yQ2hlY2soVG9rZW4qIHQsIE5vZGVJbXBsKiYg
cmVzdWx0KQoreworICAgIHNldFNraXBNb2RlKEhUTUxOYW1lczo6bm9mcmFtZXMoKSk7CisgICAg
cmV0dXJuIGZhbHNlOworfQorCitib29sIEhUTUxQYXJzZXI6Om5vc2NyaXB0Q3JlYXRlRXJyb3JD
aGVjayhUb2tlbiogdCwgTm9kZUltcGwqJiByZXN1bHQpCit7CisgICAgaWYgKEhUTUxXaWRnZXQg
JiYgSFRNTFdpZGdldC0+cGFydCgpLT5qU2NyaXB0RW5hYmxlZCgpKQorICAgICAgICBzZXRTa2lw
TW9kZShIVE1MTmFtZXM6Om5vc2NyaXB0KCkpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9v
bCBIVE1MUGFyc2VyOjpub2xheWVyQ3JlYXRlRXJyb3JDaGVjayhUb2tlbiogdCwgTm9kZUltcGwq
JiByZXN1bHQpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitOb2RlSW1wbCAqSFRNTFBhcnNl
cjo6Z2V0Tm9kZShUb2tlbiogdCkKK3sKKyAgICAvLyBJbml0IG91ciBlcnJvciBoYW5kbGluZyB0
YWJsZS4KKyAgICBzdGF0aWMgRnVuY3Rpb25NYXAgZ0Z1bmN0aW9uTWFwOworICAgIGlmIChnRnVu
Y3Rpb25NYXAuaXNFbXB0eSgpKSB7CisgICAgICAgIGdGdW5jdGlvbk1hcC5pbnNlcnQodGV4dEF0
b20uaW1wbGVtZW50YXRpb24oKSwgJkhUTUxQYXJzZXI6OnRleHRDcmVhdGVFcnJvckNoZWNrKTsK
KyAgICAgICAgZ0Z1bmN0aW9uTWFwLmluc2VydChjb21tZW50QXRvbS5pbXBsZW1lbnRhdGlvbigp
LCAmSFRNTFBhcnNlcjo6Y29tbWVudENyZWF0ZUVycm9yQ2hlY2spOworICAgICAgICBnRnVuY3Rp
b25NYXAuaW5zZXJ0KEhUTUxOYW1lczo6aGVhZCgpLCAmSFRNTFBhcnNlcjo6aGVhZENyZWF0ZUVy
cm9yQ2hlY2spOworICAgICAgICBnRnVuY3Rpb25NYXAuaW5zZXJ0KEhUTUxOYW1lczo6Ym9keSgp
LCAmSFRNTFBhcnNlcjo6Ym9keUNyZWF0ZUVycm9yQ2hlY2spOworICAgICAgICBnRnVuY3Rpb25N
YXAuaW5zZXJ0KEhUTUxOYW1lczo6ZnJhbWVzZXQoKSwgJkhUTUxQYXJzZXI6OmZyYW1lc2V0Q3Jl
YXRlRXJyb3JDaGVjayk7CisgICAgICAgIGdGdW5jdGlvbk1hcC5pbnNlcnQoSFRNTE5hbWVzOjpp
ZnJhbWUoKSwgJkhUTUxQYXJzZXI6OmlmcmFtZUNyZWF0ZUVycm9yQ2hlY2spOworICAgICAgICBn
RnVuY3Rpb25NYXAuaW5zZXJ0KEhUTUxOYW1lczo6Zm9ybSgpLCAmSFRNTFBhcnNlcjo6Zm9ybUNy
ZWF0ZUVycm9yQ2hlY2spOworICAgICAgICBnRnVuY3Rpb25NYXAuaW5zZXJ0KEhUTUxOYW1lczo6
aXNpbmRleCgpLCAmSFRNTFBhcnNlcjo6aXNpbmRleENyZWF0ZUVycm9yQ2hlY2spOworICAgICAg
ICBnRnVuY3Rpb25NYXAuaW5zZXJ0KEhUTUxOYW1lczo6c2VsZWN0KCksICZIVE1MUGFyc2VyOjpz
ZWxlY3RDcmVhdGVFcnJvckNoZWNrKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLmluc2VydChIVE1M
TmFtZXM6OmRkKCksICZIVE1MUGFyc2VyOjpkZENyZWF0ZUVycm9yQ2hlY2spOworICAgICAgICBn
RnVuY3Rpb25NYXAuaW5zZXJ0KEhUTUxOYW1lczo6ZHQoKSwgJkhUTUxQYXJzZXI6OmR0Q3JlYXRl
RXJyb3JDaGVjayk7CisgICAgICAgIGdGdW5jdGlvbk1hcC5pbnNlcnQoSFRNTE5hbWVzOjpsaSgp
LCAmSFRNTFBhcnNlcjo6bmVzdGVkQ3JlYXRlRXJyb3JDaGVjayk7CisgICAgICAgIGdGdW5jdGlv
bk1hcC5pbnNlcnQoSFRNTE5hbWVzOjphKCksICZIVE1MUGFyc2VyOjpuZXN0ZWRDcmVhdGVFcnJv
ckNoZWNrKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLmluc2VydChIVE1MTmFtZXM6Om5vYnIoKSwg
JkhUTUxQYXJzZXI6Om5lc3RlZENyZWF0ZUVycm9yQ2hlY2spOworICAgICAgICBnRnVuY3Rpb25N
YXAuaW5zZXJ0KEhUTUxOYW1lczo6d2JyKCksICZIVE1MUGFyc2VyOjpuZXN0ZWRDcmVhdGVFcnJv
ckNoZWNrKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLmluc2VydChIVE1MTmFtZXM6OnRyKCksICZI
VE1MUGFyc2VyOjpuZXN0ZWRDcmVhdGVFcnJvckNoZWNrKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFw
Lmluc2VydChIVE1MTmFtZXM6OnRkKCksICZIVE1MUGFyc2VyOjp0YWJsZUNlbGxDcmVhdGVFcnJv
ckNoZWNrKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLmluc2VydChIVE1MTmFtZXM6OnRoKCksICZI
VE1MUGFyc2VyOjp0YWJsZUNlbGxDcmVhdGVFcnJvckNoZWNrKTsKKyAgICAgICAgZ0Z1bmN0aW9u
TWFwLmluc2VydChIVE1MTmFtZXM6OnRib2R5KCksICZIVE1MUGFyc2VyOjp0YWJsZVNlY3Rpb25D
cmVhdGVFcnJvckNoZWNrKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLmluc2VydChIVE1MTmFtZXM6
OnRoZWFkKCksICZIVE1MUGFyc2VyOjp0YWJsZVNlY3Rpb25DcmVhdGVFcnJvckNoZWNrKTsKKyAg
ICAgICAgZ0Z1bmN0aW9uTWFwLmluc2VydChIVE1MTmFtZXM6OnRmb290KCksICZIVE1MUGFyc2Vy
Ojp0YWJsZVNlY3Rpb25DcmVhdGVFcnJvckNoZWNrKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLmlu
c2VydChIVE1MTmFtZXM6OnR0KCksICZIVE1MUGFyc2VyOjpuZXN0ZWRTdHlsZUNyZWF0ZUVycm9y
Q2hlY2spOworICAgICAgICBnRnVuY3Rpb25NYXAuaW5zZXJ0KEhUTUxOYW1lczo6dSgpLCAmSFRN
TFBhcnNlcjo6bmVzdGVkU3R5bGVDcmVhdGVFcnJvckNoZWNrKTsKKyAgICAgICAgZ0Z1bmN0aW9u
TWFwLmluc2VydChIVE1MTmFtZXM6OmIoKSwgJkhUTUxQYXJzZXI6Om5lc3RlZFN0eWxlQ3JlYXRl
RXJyb3JDaGVjayk7CisgICAgICAgIGdGdW5jdGlvbk1hcC5pbnNlcnQoSFRNTE5hbWVzOjppKCks
ICZIVE1MUGFyc2VyOjpuZXN0ZWRTdHlsZUNyZWF0ZUVycm9yQ2hlY2spOworICAgICAgICBnRnVu
Y3Rpb25NYXAuaW5zZXJ0KEhUTUxOYW1lczo6cygpLCAmSFRNTFBhcnNlcjo6bmVzdGVkU3R5bGVD
cmVhdGVFcnJvckNoZWNrKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLmluc2VydChIVE1MTmFtZXM6
OnN0cmlrZSgpLCAmSFRNTFBhcnNlcjo6bmVzdGVkU3R5bGVDcmVhdGVFcnJvckNoZWNrKTsKKyAg
ICAgICAgZ0Z1bmN0aW9uTWFwLmluc2VydChIVE1MTmFtZXM6OmJpZygpLCAmSFRNTFBhcnNlcjo6
bmVzdGVkU3R5bGVDcmVhdGVFcnJvckNoZWNrKTsKKyAgICAgICAgZ0Z1bmN0aW9uTWFwLmluc2Vy
dChIVE1MTmFtZXM6OnNtYWxsKCksICZIVE1MUGFyc2VyOjpuZXN0ZWRTdHlsZUNyZWF0ZUVycm9y
Q2hlY2spOworICAgICAgICBnRnVuY3Rpb25NYXAuaW5zZXJ0KEhUTUxOYW1lczo6bm9lbWJlZCgp
LCAmSFRNTFBhcnNlcjo6bm9lbWJlZENyZWF0ZUVycm9yQ2hlY2spOworICAgICAgICBnRnVuY3Rp
b25NYXAuaW5zZXJ0KEhUTUxOYW1lczo6bm9mcmFtZXMoKSwgJkhUTUxQYXJzZXI6Om5vZnJhbWVz
Q3JlYXRlRXJyb3JDaGVjayk7CisgICAgICAgIGdGdW5jdGlvbk1hcC5pbnNlcnQoSFRNTE5hbWVz
Ojpub3NjcmlwdCgpLCAmSFRNTFBhcnNlcjo6bm9zY3JpcHRDcmVhdGVFcnJvckNoZWNrKTsKKyAg
ICAgICAgZ0Z1bmN0aW9uTWFwLmluc2VydChIVE1MTmFtZXM6Om5vbGF5ZXIoKSwgJkhUTUxQYXJz
ZXI6Om5vbGF5ZXJDcmVhdGVFcnJvckNoZWNrKTsKICAgICB9CiAKLSAgICByZXR1cm4gZG9jdW1l
bnQtPmRvY3VtZW50KCktPmNyZWF0ZUhUTUxFbGVtZW50KHQtPmlkKTsKKyAgICBib29sIHByb2Nl
ZWQgPSB0cnVlOworICAgIE5vZGVJbXBsKiByZXN1bHQgPSAwOworICAgIENyZWF0ZUVycm9yQ2hl
Y2tGdW5jIGVycm9yQ2hlY2tGdW5jID0gZ0Z1bmN0aW9uTWFwLmdldCh0LT50YWdOYW1lLmltcGxl
bWVudGF0aW9uKCkpOworICAgIGlmIChlcnJvckNoZWNrRnVuYykKKyAgICAgICAgcHJvY2VlZCA9
ICh0aGlzLT4qKGVycm9yQ2hlY2tGdW5jKSkodCwgcmVzdWx0KTsKKworICAgIGlmIChwcm9jZWVk
KSB7CisgICAgICAgIHJlc3VsdCA9IEhUTUxFbGVtZW50RmFjdG9yeTo6Y3JlYXRlSFRNTEVsZW1l
bnQodC0+dGFnTmFtZSwgZG9jKCksIGZvcm0pOworICAgICAgICBpZiAodC0+dGFnTmFtZSA9PSBI
VE1MTmFtZXM6OmZvcm0oKSkKKyAgICAgICAgICAgIGZvcm0gPSBzdGF0aWNfY2FzdDxIVE1MRm9y
bUVsZW1lbnRJbXBsKj4ocmVzdWx0KTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAog
I2RlZmluZSBNQVhfUkVEVU5EQU5UIDIwCiAKLWJvb2wgS0hUTUxQYXJzZXI6OmFsbG93TmVzdGVk
UmVkdW5kYW50VGFnKGludCBfaWQpCitib29sIEhUTUxQYXJzZXI6OmFsbG93TmVzdGVkUmVkdW5k
YW50VGFnKGNvbnN0IEF0b21pY1N0cmluZyYgX3RhZ05hbWUpCiB7CiAgICAgLy8gd3d3LmxpY2Vv
LmVkdS5teCBpcyBhbiBleGFtcGxlIG9mIGEgc2l0ZSB0aGF0IGFjaGlldmVzIGEgbGV2ZWwgb2Yg
bmVzdGluZyBvZgogICAgIC8vIGFib3V0IDE1MDAgdGFncywgYWxsIGZyb20gYSBidW5jaCBvZiA8
Yj5zLiAgV2Ugd2lsbCBvbmx5IGFsbG93IGF0IG1vc3QgMjAKICAgICAvLyBuZXN0ZWQgdGFncyBv
ZiB0aGUgc2FtZSB0eXBlIGJlZm9yZSBqdXN0IGlnbm9yaW5nIHRoZW0gYWxsIHRvZ2V0aGVyLgog
ICAgIGludCBpID0gMDsKICAgICBmb3IgKEhUTUxTdGFja0VsZW0qIGN1cnIgPSBibG9ja1N0YWNr
OwotICAgICAgICAgaSA8IE1BWF9SRURVTkRBTlQgJiYgY3VyciAmJiBjdXJyLT5pZCA9PSBfaWQ7
CisgICAgICAgICBpIDwgTUFYX1JFRFVOREFOVCAmJiBjdXJyICYmIGN1cnItPnRhZ05hbWUgPT0g
X3RhZ05hbWU7CiAgICAgICAgICBjdXJyID0gY3Vyci0+bmV4dCwgaSsrKTsKICAgICByZXR1cm4g
aSAhPSBNQVhfUkVEVU5EQU5UOwogfQogCi12b2lkIEtIVE1MUGFyc2VyOjpwcm9jZXNzQ2xvc2VU
YWcoVG9rZW4gKnQpCit2b2lkIEhUTUxQYXJzZXI6OnByb2Nlc3NDbG9zZVRhZyhUb2tlbiAqdCkK
IHsKLSAgICAvLyBzdXBwb3J0IGZvciByZWFsbHkgYnJva2VuIGh0bWwuIENhbid0IGJlbGlldmUg
SSdtIHN1cHBvcnRpbmcgc3VjaCBjcmFwIChsYXJzKQotICAgIHN3aXRjaCh0LT5pZCkKLSAgICB7
Ci0gICAgY2FzZSBJRF9IVE1MK0lEX0NMT1NFX1RBRzoKLSAgICBjYXNlIElEX0JPRFkrSURfQ0xP
U0VfVEFHOgotICAgICAgICAvLyB3ZSBuZXZlciBjbG9zZSB0aGUgYm9keSB0YWcsIHNpbmNlIHNv
bWUgc3R1cGlkIHdlYiBwYWdlcyBjbG9zZSBpdCBiZWZvcmUgdGhlIGFjdHVhbCBlbmQgb2YgdGhl
IGRvYy4KLSAgICAgICAgLy8gbGV0J3MgcmVseSBvbiB0aGUgZW5kKCkgY2FsbCB0byBjbG9zZSB0
aGluZ3MuCisgICAgLy8gU3VwcG9ydCBmb3IgcmVhbGx5IGJyb2tlbiBodG1sLgorICAgIC8vIHdl
IG5ldmVyIGNsb3NlIHRoZSBib2R5IHRhZywgc2luY2Ugc29tZSBzdHVwaWQgd2ViIHBhZ2VzIGNs
b3NlIGl0IGJlZm9yZSB0aGUgYWN0dWFsIGVuZCBvZiB0aGUgZG9jLgorICAgIC8vIGxldCdzIHJl
bHkgb24gdGhlIGVuZCgpIGNhbGwgdG8gY2xvc2UgdGhpbmdzLgorICAgIGlmICh0LT50YWdOYW1l
ID09IEhUTUxOYW1lczo6aHRtbCgpIHx8IHQtPnRhZ05hbWUgPT0gSFRNTE5hbWVzOjpib2R5KCkp
CiAgICAgICAgIHJldHVybjsKLSAgICBjYXNlIElEX0ZPUk0rSURfQ0xPU0VfVEFHOgorICAgIAor
ICAgIGlmICh0LT50YWdOYW1lID09IEhUTUxOYW1lczo6Zm9ybSgpKQogICAgICAgICBmb3JtID0g
MDsKLSAgICAgICAgLy8gdGhpcyBvbmUgaXMgdG8gZ2V0IHRoZSByaWdodCBzdHlsZSBvbiB0aGUg
Ym9keSBlbGVtZW50Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSURfTUFQK0lEX0NMT1NFX1RB
RzoKKyAgICBlbHNlIGlmICh0LT50YWdOYW1lID09IEhUTUxOYW1lczo6bWFwKCkpCiAgICAgICAg
IG1hcCA9IDA7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSURfU0VMRUNUK0lEX0NMT1NFX1RB
RzoKKyAgICBlbHNlIGlmICh0LT50YWdOYW1lID09IEhUTUxOYW1lczo6c2VsZWN0KCkpCiAgICAg
ICAgIGluU2VsZWN0ID0gZmFsc2U7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLQotI2lmZGVmIFBBUlNFUl9ERUJVRwotICAgIGtkRGVidWcoIDYw
MzUgKSA8PCAiYWRkZWQgdGhlIGZvbGxvd2luZyBjaGlsZHMgdG8gIiA8PCBjdXJyZW50LT5ub2Rl
TmFtZSgpLnN0cmluZygpIDw8IGVuZGw7Ci0gICAgTm9kZUltcGwgKmNoaWxkID0gY3VycmVudC0+
Zmlyc3RDaGlsZCgpOwotICAgIHdoaWxlKGNoaWxkICE9IDApCi0gICAgewotICAgICAgICBrZERl
YnVnKCA2MDM1ICkgPDwgIiAgICAiIDw8IGNoaWxkLT5ub2RlTmFtZSgpLnN0cmluZygpIDw8IGVu
ZGw7Ci0gICAgICAgIGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCk7Ci0gICAgfQotI2VuZGlm
CisgICAgICAgIAogICAgIEhUTUxTdGFja0VsZW0qIG9sZEVsZW0gPSBibG9ja1N0YWNrOwotICAg
IHBvcEJsb2NrKHQtPmlkLUlEX0NMT1NFX1RBRyk7Ci0gICAgaWYgKG9sZEVsZW0gPT0gYmxvY2tT
dGFjayAmJiB0LT5pZCA9PSBJRF9QK0lEX0NMT1NFX1RBRykgeworICAgIHBvcEJsb2NrKHQtPnRh
Z05hbWUpOworICAgIGlmIChvbGRFbGVtID09IGJsb2NrU3RhY2sgJiYgdC0+dGFnTmFtZSA9PSBI
VE1MTmFtZXM6OnAoKSkgewogICAgICAgICAvLyBXZSBlbmNvdW50ZXJlZCBhIHN0cmF5IDwvcD4u
ICBBbWF6aW5nbHkgR2Vja28sIFdpbklFLCBhbmQgTWFjSUUgYWxsIHRyZWF0CiAgICAgICAgIC8v
IHRoaXMgYXMgYSB2YWxpZCBicmVhaywgaS5lLiwgPHA+PC9wPi4gIFNvIGdvIGFoZWFkIGFuZCBt
YWtlIHRoZSBlbXB0eQogICAgICAgICAvLyBwYXJhZ3JhcGguCi0gICAgICAgIHQtPmlkLT1JRF9D
TE9TRV9UQUc7CisgICAgICAgIHQtPmJlZ2luVGFnID0gdHJ1ZTsKICAgICAgICAgcGFyc2VUb2tl
bih0KTsKLSAgICAgICAgcG9wQmxvY2soSURfUCk7CisgICAgICAgIHBvcEJsb2NrKHQtPnRhZ05h
bWUpOwogICAgIH0KICNpZmRlZiBQQVJTRVJfREVCVUcKICAgICBrZERlYnVnKCA2MDM1ICkgPDwg
ImNsb3NlVGFnIC0tPiBjdXJyZW50ID0gIiA8PCBjdXJyZW50LT5ub2RlTmFtZSgpLnN0cmluZygp
IDw8IGVuZGw7CiAjZW5kaWYKIH0KIAotYm9vbCBLSFRNTFBhcnNlcjo6aXNIZWFkZXJUYWcoaW50
IF9pZCkKK2Jvb2wgSFRNTFBhcnNlcjo6aXNIZWFkZXJUYWcoY29uc3QgQXRvbWljU3RyaW5nJiB0
YWdOYW1lKQogewotICAgIHN3aXRjaCAoX2lkKSB7Ci0gICAgICAgIGNhc2UgSURfSDE6Ci0gICAg
ICAgIGNhc2UgSURfSDI6Ci0gICAgICAgIGNhc2UgSURfSDM6Ci0gICAgICAgIGNhc2UgSURfSDQ6
Ci0gICAgICAgIGNhc2UgSURfSDU6Ci0gICAgICAgIGNhc2UgSURfSDY6Ci0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBzdGF0aWMgSGFzaFNldDxET01TdHJpbmdJbXBsKiwgUG9pbnRlckhhc2g8RE9NU3RyaW5n
SW1wbCo+ID4gaGVhZGVyVGFnczsKKyAgICBpZiAoaGVhZGVyVGFncy5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgaGVhZGVyVGFncy5pbnNlcnQoSFRNTE5hbWVzOjpoMSgpKTsKKyAgICAgICAgaGVhZGVy
VGFncy5pbnNlcnQoSFRNTE5hbWVzOjpoMigpKTsKKyAgICAgICAgaGVhZGVyVGFncy5pbnNlcnQo
SFRNTE5hbWVzOjpoMygpKTsKKyAgICAgICAgaGVhZGVyVGFncy5pbnNlcnQoSFRNTE5hbWVzOjpo
NCgpKTsKKyAgICAgICAgaGVhZGVyVGFncy5pbnNlcnQoSFRNTE5hbWVzOjpoNSgpKTsKKyAgICAg
ICAgaGVhZGVyVGFncy5pbnNlcnQoSFRNTE5hbWVzOjpoNigpKTsKICAgICB9CisgICAgCisgICAg
cmV0dXJuIGhlYWRlclRhZ3MuY29udGFpbnModGFnTmFtZS5pbXBsZW1lbnRhdGlvbigpKTsKIH0K
IAotdm9pZCBLSFRNTFBhcnNlcjo6cG9wTmVzdGVkSGVhZGVyVGFnKCkKK3ZvaWQgSFRNTFBhcnNl
cjo6cG9wTmVzdGVkSGVhZGVyVGFnKCkKIHsKICAgICAvLyBUaGlzIGZ1bmN0aW9uIG9ubHkgY2Fy
ZXMgYWJvdXQgY2hlY2tpbmcgZm9yIG5lc3RlZCBoZWFkZXJzIHRoYXQgaGF2ZSBvbmx5IGlubGlu
ZXMgaW4gYmV0d2VlbiB0aGVtLgogICAgIE5vZGVJbXBsKiBjdXJyTm9kZSA9IGN1cnJlbnQ7CiAg
ICAgZm9yIChIVE1MU3RhY2tFbGVtKiBjdXJyID0gYmxvY2tTdGFjazsgY3VycjsgY3VyciA9IGN1
cnItPm5leHQpIHsKLSAgICAgICAgaWYgKGlzSGVhZGVyVGFnKGN1cnItPmlkKSkgewotICAgICAg
ICAgICAgcG9wQmxvY2soY3Vyci0+aWQpOworICAgICAgICBpZiAoaXNIZWFkZXJUYWcoY3Vyci0+
dGFnTmFtZSkpIHsKKyAgICAgICAgICAgIHBvcEJsb2NrKGN1cnItPnRhZ05hbWUpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGlmIChjdXJyTm9kZSAmJiAhY3Vyck5v
ZGUtPmlzSW5saW5lKCkpCisgICAgICAgIGlmIChjdXJyTm9kZSAmJiAhaXNJbmxpbmUoY3Vyck5v
ZGUpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBjdXJyTm9kZSA9IGN1cnItPm5vZGU7
CiAgICAgfQogfQogCi1ib29sIEtIVE1MUGFyc2VyOjppc1Jlc2lkdWFsU3R5bGVUYWcoaW50IF9p
ZCkKK2Jvb2wgSFRNTFBhcnNlcjo6aXNJbmxpbmUoRE9NOjpOb2RlSW1wbCogbm9kZSkgY29uc3QK
IHsKLSAgICBzd2l0Y2ggKF9pZCkgewotICAgICAgICBjYXNlIElEX0E6Ci0gICAgICAgIGNhc2Ug
SURfRk9OVDoKLSAgICAgICAgY2FzZSBJRF9UVDoKLSAgICAgICAgY2FzZSBJRF9VOgotICAgICAg
ICBjYXNlIElEX0I6Ci0gICAgICAgIGNhc2UgSURfSToKLSAgICAgICAgY2FzZSBJRF9TOgotICAg
ICAgICBjYXNlIElEX1NUUklLRToKLSAgICAgICAgY2FzZSBJRF9CSUc6Ci0gICAgICAgIGNhc2Ug
SURfU01BTEw6Ci0gICAgICAgIGNhc2UgSURfRU06Ci0gICAgICAgIGNhc2UgSURfU1RST05HOgot
ICAgICAgICBjYXNlIElEX0RGTjoKLSAgICAgICAgY2FzZSBJRF9DT0RFOgotICAgICAgICBjYXNl
IElEX1NBTVA6Ci0gICAgICAgIGNhc2UgSURfS0JEOgotICAgICAgICBjYXNlIElEX1ZBUjoKKyAg
ICBpZiAobm9kZS0+aXNUZXh0Tm9kZSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlm
IChub2RlLT5pc0hUTUxFbGVtZW50KCkpIHsKKyAgICAgICAgSFRNTEVsZW1lbnRJbXBsKiBlID0g
c3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsKj4obm9kZSk7CisgICAgICAgIGlmIChlLT5oYXNM
b2NhbE5hbWUoSFRNTE5hbWVzOjphKCkpIHx8IGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmZv
bnQoKSkgfHwgZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6dHQoKSkgfHwKKyAgICAgICAgICAg
IGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnUoKSkgfHwgZS0+aGFzTG9jYWxOYW1lKEhUTUxO
YW1lczo6YigpKSB8fCBlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjppKCkpIHx8CisgICAgICAg
ICAgICBlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpzKCkpIHx8IGUtPmhhc0xvY2FsTmFtZShI
VE1MTmFtZXM6OnN0cmlrZSgpKSB8fCBlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpiaWcoKSkg
fHwKKyAgICAgICAgICAgIGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnNtYWxsKCkpIHx8IGUt
Pmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmVtKCkpIHx8IGUtPmhhc0xvY2FsTmFtZShIVE1MTmFt
ZXM6OnN0cm9uZygpKSB8fAorICAgICAgICAgICAgZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6
ZGZuKCkpIHx8IGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmNvZGUoKSkgfHwgZS0+aGFzTG9j
YWxOYW1lKEhUTUxOYW1lczo6c2FtcCgpKSB8fAorICAgICAgICAgICAgZS0+aGFzTG9jYWxOYW1l
KEhUTUxOYW1lczo6a2JkKCkpIHx8IGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnZhcigpKSB8
fCBlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpjaXRlKCkpIHx8CisgICAgICAgICAgICBlLT5o
YXNMb2NhbE5hbWUoSFRNTE5hbWVzOjphYmJyKCkpIHx8IGUtPmhhc0xvY2FsTmFtZShIVE1MTmFt
ZXM6OmFjcm9ueW0oKSkgfHwgZS0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6c3ViKCkpIHx8Cisg
ICAgICAgICAgICBlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpzdXAoKSkgfHwgZS0+aGFzTG9j
YWxOYW1lKEhUTUxOYW1lczo6c3BhbigpKSB8fCBlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpu
b2JyKCkpIHx8CisgICAgICAgICAgICBlLT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp3YnIoKSkp
CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CisgICAgCisgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29s
IEtIVE1MUGFyc2VyOjppc0FmZmVjdGVkQnlSZXNpZHVhbFN0eWxlKGludCBfaWQpCitib29sIEhU
TUxQYXJzZXI6OmlzUmVzaWR1YWxTdHlsZVRhZyhjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUp
CiB7Ci0gICAgaWYgKGlzUmVzaWR1YWxTdHlsZVRhZyhfaWQpKQotICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICBzdGF0aWMgSGFzaFNldDxET01TdHJpbmdJbXBsKiwgUG9pbnRlckhhc2g8RE9NU3Ry
aW5nSW1wbCo+ID4gcmVzaWR1YWxTdHlsZVRhZ3M7CisgICAgaWYgKHJlc2lkdWFsU3R5bGVUYWdz
LmlzRW1wdHkoKSkgeworICAgICAgICByZXNpZHVhbFN0eWxlVGFncy5pbnNlcnQoSFRNTE5hbWVz
OjphKCkpOworICAgICAgICByZXNpZHVhbFN0eWxlVGFncy5pbnNlcnQoSFRNTE5hbWVzOjpmb250
KCkpOworICAgICAgICByZXNpZHVhbFN0eWxlVGFncy5pbnNlcnQoSFRNTE5hbWVzOjp0dCgpKTsK
KyAgICAgICAgcmVzaWR1YWxTdHlsZVRhZ3MuaW5zZXJ0KEhUTUxOYW1lczo6dSgpKTsKKyAgICAg
ICAgcmVzaWR1YWxTdHlsZVRhZ3MuaW5zZXJ0KEhUTUxOYW1lczo6YigpKTsKKyAgICAgICAgcmVz
aWR1YWxTdHlsZVRhZ3MuaW5zZXJ0KEhUTUxOYW1lczo6aSgpKTsKKyAgICAgICAgcmVzaWR1YWxT
dHlsZVRhZ3MuaW5zZXJ0KEhUTUxOYW1lczo6cygpKTsKKyAgICAgICAgcmVzaWR1YWxTdHlsZVRh
Z3MuaW5zZXJ0KEhUTUxOYW1lczo6c3RyaWtlKCkpOworICAgICAgICByZXNpZHVhbFN0eWxlVGFn
cy5pbnNlcnQoSFRNTE5hbWVzOjpiaWcoKSk7CisgICAgICAgIHJlc2lkdWFsU3R5bGVUYWdzLmlu
c2VydChIVE1MTmFtZXM6OnNtYWxsKCkpOworICAgICAgICByZXNpZHVhbFN0eWxlVGFncy5pbnNl
cnQoSFRNTE5hbWVzOjplbSgpKTsKKyAgICAgICAgcmVzaWR1YWxTdHlsZVRhZ3MuaW5zZXJ0KEhU
TUxOYW1lczo6c3Ryb25nKCkpOworICAgICAgICByZXNpZHVhbFN0eWxlVGFncy5pbnNlcnQoSFRN
TE5hbWVzOjpkZm4oKSk7CisgICAgICAgIHJlc2lkdWFsU3R5bGVUYWdzLmluc2VydChIVE1MTmFt
ZXM6OmNvZGUoKSk7CisgICAgICAgIHJlc2lkdWFsU3R5bGVUYWdzLmluc2VydChIVE1MTmFtZXM6
OnNhbXAoKSk7CisgICAgICAgIHJlc2lkdWFsU3R5bGVUYWdzLmluc2VydChIVE1MTmFtZXM6Omti
ZCgpKTsKKyAgICAgICAgcmVzaWR1YWxTdHlsZVRhZ3MuaW5zZXJ0KEhUTUxOYW1lczo6dmFyKCkp
OworICAgIH0KICAgICAKLSAgICBzd2l0Y2ggKF9pZCkgewotICAgICAgICBjYXNlIElEX1A6Ci0g
ICAgICAgIGNhc2UgSURfRElWOgotICAgICAgICBjYXNlIElEX0JMT0NLUVVPVEU6Ci0gICAgICAg
IGNhc2UgSURfQUREUkVTUzoKLSAgICAgICAgY2FzZSBJRF9IMToKLSAgICAgICAgY2FzZSBJRF9I
MjoKLSAgICAgICAgY2FzZSBJRF9IMzoKLSAgICAgICAgY2FzZSBJRF9INDoKLSAgICAgICAgY2Fz
ZSBJRF9INToKLSAgICAgICAgY2FzZSBJRF9INjoKLSAgICAgICAgY2FzZSBJRF9DRU5URVI6Ci0g
ICAgICAgIGNhc2UgSURfVUw6Ci0gICAgICAgIGNhc2UgSURfT0w6Ci0gICAgICAgIGNhc2UgSURf
TEk6Ci0gICAgICAgIGNhc2UgSURfREw6Ci0gICAgICAgIGNhc2UgSURfRFQ6Ci0gICAgICAgIGNh
c2UgSURfREQ6Ci0gICAgICAgIGNhc2UgSURfUFJFOgotICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJu
IHJlc2lkdWFsU3R5bGVUYWdzLmNvbnRhaW5zKHRhZ05hbWUuaW1wbGVtZW50YXRpb24oKSk7Cit9
CisKK2Jvb2wgSFRNTFBhcnNlcjo6aXNBZmZlY3RlZEJ5UmVzaWR1YWxTdHlsZShjb25zdCBBdG9t
aWNTdHJpbmcmIHRhZ05hbWUpCit7CisgICAgaWYgKGlzUmVzaWR1YWxTdHlsZVRhZyh0YWdOYW1l
KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBzdGF0aWMgSGFzaFNldDxET01TdHJpbmdJ
bXBsKiwgUG9pbnRlckhhc2g8RE9NU3RyaW5nSW1wbCo+ID4gYWZmZWN0ZWRCbG9ja1RhZ3M7Cisg
ICAgaWYgKGFmZmVjdGVkQmxvY2tUYWdzLmlzRW1wdHkoKSkgeworICAgICAgICBhZmZlY3RlZEJs
b2NrVGFncy5pbnNlcnQoSFRNTE5hbWVzOjpoMSgpKTsKKyAgICAgICAgYWZmZWN0ZWRCbG9ja1Rh
Z3MuaW5zZXJ0KEhUTUxOYW1lczo6aDIoKSk7CisgICAgICAgIGFmZmVjdGVkQmxvY2tUYWdzLmlu
c2VydChIVE1MTmFtZXM6OmgzKCkpOworICAgICAgICBhZmZlY3RlZEJsb2NrVGFncy5pbnNlcnQo
SFRNTE5hbWVzOjpoNCgpKTsKKyAgICAgICAgYWZmZWN0ZWRCbG9ja1RhZ3MuaW5zZXJ0KEhUTUxO
YW1lczo6aDUoKSk7CisgICAgICAgIGFmZmVjdGVkQmxvY2tUYWdzLmluc2VydChIVE1MTmFtZXM6
Omg2KCkpOworICAgICAgICBhZmZlY3RlZEJsb2NrVGFncy5pbnNlcnQoSFRNTE5hbWVzOjpwKCkp
OworICAgICAgICBhZmZlY3RlZEJsb2NrVGFncy5pbnNlcnQoSFRNTE5hbWVzOjpkaXYoKSk7Cisg
ICAgICAgIGFmZmVjdGVkQmxvY2tUYWdzLmluc2VydChIVE1MTmFtZXM6OmJsb2NrcXVvdGUoKSk7
CisgICAgICAgIGFmZmVjdGVkQmxvY2tUYWdzLmluc2VydChIVE1MTmFtZXM6OmFkZHJlc3MoKSk7
CisgICAgICAgIGFmZmVjdGVkQmxvY2tUYWdzLmluc2VydChIVE1MTmFtZXM6OmNlbnRlcigpKTsK
KyAgICAgICAgYWZmZWN0ZWRCbG9ja1RhZ3MuaW5zZXJ0KEhUTUxOYW1lczo6dWwoKSk7CisgICAg
ICAgIGFmZmVjdGVkQmxvY2tUYWdzLmluc2VydChIVE1MTmFtZXM6Om9sKCkpOworICAgICAgICBh
ZmZlY3RlZEJsb2NrVGFncy5pbnNlcnQoSFRNTE5hbWVzOjpsaSgpKTsKKyAgICAgICAgYWZmZWN0
ZWRCbG9ja1RhZ3MuaW5zZXJ0KEhUTUxOYW1lczo6ZGwoKSk7CisgICAgICAgIGFmZmVjdGVkQmxv
Y2tUYWdzLmluc2VydChIVE1MTmFtZXM6OmR0KCkpOworICAgICAgICBhZmZlY3RlZEJsb2NrVGFn
cy5pbnNlcnQoSFRNTE5hbWVzOjpkZCgpKTsKKyAgICAgICAgYWZmZWN0ZWRCbG9ja1RhZ3MuaW5z
ZXJ0KEhUTUxOYW1lczo6cHJlKCkpOwogICAgIH0KKyAgICAKKyAgICByZXR1cm4gYWZmZWN0ZWRC
bG9ja1RhZ3MuY29udGFpbnModGFnTmFtZS5pbXBsZW1lbnRhdGlvbigpKTsKIH0KIAotdm9pZCBL
SFRNTFBhcnNlcjo6aGFuZGxlUmVzaWR1YWxTdHlsZUNsb3NlVGFnQWNyb3NzQmxvY2tzKEhUTUxT
dGFja0VsZW0qIGVsZW0pCit2b2lkIEhUTUxQYXJzZXI6OmhhbmRsZVJlc2lkdWFsU3R5bGVDbG9z
ZVRhZ0Fjcm9zc0Jsb2NrcyhIVE1MU3RhY2tFbGVtKiBlbGVtKQogewogICAgIC8vIEZpbmQgdGhl
IGVsZW1lbnQgdGhhdCBjcm9zc2VzIG92ZXIgdG8gYSBoaWdoZXIgbGV2ZWwuICAgRm9yIG5vdywg
aWYgdGhlcmUgaXMgbW9yZSB0aGFuCiAgICAgLy8gb25lLCB3ZSB3aWxsIGp1c3QgZ2l2ZSB1cCBh
bmQgbm90IGF0dGVtcHQgYW55IHNvcnQgb2YgY29ycmVjdGlvbi4gIEl0J3MgaGlnaGx5IHVubGlr
ZWx5IHRoYXQKQEAgLTExMjUsNyArOTkyLDcgQEAgdm9pZCBLSFRNTFBhcnNlcjo6aGFuZGxlUmVz
aWR1YWxTdHlsZUNsbwogICAgICAgICBjdXJyID0gY3Vyci0+bmV4dDsKICAgICB9CiAKLSAgICBp
ZiAoIWN1cnIgfHwgIW1heEVsZW0gfHwgIWlzQWZmZWN0ZWRCeVJlc2lkdWFsU3R5bGUobWF4RWxl
bS0+aWQpKSByZXR1cm47CisgICAgaWYgKCFjdXJyIHx8ICFtYXhFbGVtIHx8ICFpc0FmZmVjdGVk
QnlSZXNpZHVhbFN0eWxlKG1heEVsZW0tPnRhZ05hbWUpKSByZXR1cm47CiAKICAgICBOb2RlSW1w
bCogcmVzaWR1YWxFbGVtID0gcHJldi0+bm9kZTsKICAgICBOb2RlSW1wbCogYmxvY2tFbGVtID0g
cHJldk1heEVsZW0gPyBwcmV2TWF4RWxlbS0+bm9kZSA6IGN1cnJlbnQ7CkBAIC0xMTQ3LDcgKzEw
MTQsNyBAQCB2b2lkIEtIVE1MUGFyc2VyOjpoYW5kbGVSZXNpZHVhbFN0eWxlQ2xvCiAgICAgICAg
IEhUTUxTdGFja0VsZW0qIHByZXZFbGVtID0gbWF4RWxlbTsKICAgICAgICAgd2hpbGUgKGN1cnJF
bGVtICE9IGVsZW0pIHsKICAgICAgICAgICAgIEhUTUxTdGFja0VsZW0qIG5leHRFbGVtID0gY3Vy
ckVsZW0tPm5leHQ7Ci0gICAgICAgICAgICBpZiAoIWlzUmVzaWR1YWxTdHlsZVRhZyhjdXJyRWxl
bS0+aWQpKSB7CisgICAgICAgICAgICBpZiAoIWlzUmVzaWR1YWxTdHlsZVRhZyhjdXJyRWxlbS0+
dGFnTmFtZSkpIHsKICAgICAgICAgICAgICAgICBwcmV2RWxlbS0+bmV4dCA9IG5leHRFbGVtOwog
ICAgICAgICAgICAgICAgIHByZXZFbGVtLT5ub2RlID0gY3VyckVsZW0tPm5vZGU7CiAgICAgICAg
ICAgICAgICAgZGVsZXRlIGN1cnJFbGVtOwpAQCAtMTE2OSw3ICsxMDM2LDcgQEAgdm9pZCBLSFRN
TFBhcnNlcjo6aGFuZGxlUmVzaWR1YWxTdHlsZUNsbwogICAgICAgICBOb2RlSW1wbCogY3Vyck5v
ZGUgPSAwOwogICAgICAgICBjdXJyRWxlbSA9IG1heEVsZW07CiAgICAgICAgIHdoaWxlIChjdXJy
RWxlbS0+bm9kZSAhPSByZXNpZHVhbEVsZW0pIHsKLSAgICAgICAgICAgIGlmIChpc1Jlc2lkdWFs
U3R5bGVUYWcoY3VyckVsZW0tPm5vZGUtPmlkKCkpKSB7CisgICAgICAgICAgICBpZiAoaXNSZXNp
ZHVhbFN0eWxlVGFnKGN1cnJFbGVtLT5ub2RlLT5sb2NhbE5hbWUoKSkpIHsKICAgICAgICAgICAg
ICAgICAvLyBDcmVhdGUgYSBjbG9uZSBvZiB0aGlzIGVsZW1lbnQuCiAgICAgICAgICAgICAgICAg
Y3Vyck5vZGUgPSBjdXJyRWxlbS0+bm9kZS0+Y2xvbmVOb2RlKGZhbHNlKTsKIApAQCAtMTI0NSw3
ICsxMTEyLDcgQEAgdm9pZCBLSFRNTFBhcnNlcjo6aGFuZGxlUmVzaWR1YWxTdHlsZUNsbwogICAg
ICAgICAvLyBXZSB3aWxsIGFjdHVhbGx5IHNjaGVkdWxlIHRoaXMgdGFnIGZvciByZW9wZW5pbmcK
ICAgICAgICAgLy8gYWZ0ZXIgd2UgY29tcGxldGUgdGhlIGNsb3NlIG9mIHRoaXMgZW50aXJlIGJs
b2NrLgogICAgICAgICBOb2RlSW1wbCogY3Vyck5vZGUgPSBjdXJyZW50OwotICAgICAgICBpZiAo
aXNSZXNpZHVhbFN0eWxlVGFnKGN1cnItPmlkKSkgeworICAgICAgICBpZiAoaXNSZXNpZHVhbFN0
eWxlVGFnKGN1cnItPnRhZ05hbWUpKSB7CiAgICAgICAgICAgICAvLyBXZSd2ZSBvdmVybG9hZGVk
IHRoZSB1c2Ugb2Ygc3RhY2sgZWxlbWVudHMgYW5kIGFyZSBqdXN0IHJldXNpbmcgdGhlCiAgICAg
ICAgICAgICAvLyBzdHJ1Y3Qgd2l0aCBhIHNsaWdodGx5IGRpZmZlcmVudCBtZWFuaW5nIHRvIHRo
ZSB2YXJpYWJsZXMuICBJbnN0ZWFkIG9mIGNoYWluaW5nCiAgICAgICAgICAgICAvLyBmcm9tIGlu
bmVybW9zdCB0byBvdXRlcm1vc3QsIHdlIGJ1aWxkIHVwIGEgbGlzdCBvZiBhbGwgdGhlIHRhZ3Mg
d2UgbmVlZCB0byByZW9wZW4KQEAgLTEyNjksNyArMTEzNiw3IEBAIHZvaWQgS0hUTUxQYXJzZXI6
OmhhbmRsZVJlc2lkdWFsU3R5bGVDbG8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBpZiBpdCBiZWNvbWVzIG5lY2Vzc2FyeSB0byBkbyBzby4K
IH0KIAotdm9pZCBLSFRNTFBhcnNlcjo6cmVvcGVuUmVzaWR1YWxTdHlsZVRhZ3MoSFRNTFN0YWNr
RWxlbSogZWxlbSwgRE9NOjpOb2RlSW1wbCogbWFsZm9ybWVkVGFibGVQYXJlbnQpCit2b2lkIEhU
TUxQYXJzZXI6OnJlb3BlblJlc2lkdWFsU3R5bGVUYWdzKEhUTUxTdGFja0VsZW0qIGVsZW0sIERP
TTo6Tm9kZUltcGwqIG1hbGZvcm1lZFRhYmxlUGFyZW50KQogewogICAgIC8vIExvb3AgZm9yIGVh
Y2ggdGFnIHRoYXQgbmVlZHMgdG8gYmUgcmVvcGVuZWQuCiAgICAgd2hpbGUgKGVsZW0pIHsKQEAg
LTEyODYsNyArMTE1Myw3IEBAIHZvaWQgS0hUTUxQYXJzZXI6OnJlb3BlblJlc2lkdWFsU3R5bGVU
YWcKICAgICAgICAgLy8gRklYTUU6IElzIGl0IHJlYWxseSBPSyB0byBpZ25vcmUgdGhlIGV4Y2Vw
dGlvbnMgaGVyZT8KIAogICAgICAgICAvLyBOb3cgcHVzaCBhIG5ldyBzdGFjayBlbGVtZW50IGZv
ciB0aGlzIG5vZGUgd2UganVzdCBjcmVhdGVkLgotICAgICAgICBwdXNoQmxvY2soZWxlbS0+aWQs
IGVsZW0tPmxldmVsKTsKKyAgICAgICAgcHVzaEJsb2NrKGVsZW0tPnRhZ05hbWUsIGVsZW0tPmxl
dmVsKTsKIAogICAgICAgICAvLyBTZXQgb3VyIHN0cmF5VGFibGVDb250ZW50IGJvb2xlYW4gaWYg
bmVlZGVkLCBzbyB0aGF0IHRoZSByZW9wZW5lZCB0YWcgYWxzbyBrbm93cwogICAgICAgICAvLyB0
aGF0IGl0IGlzIGluc2lkZSBhIG1hbGZvcm1lZCB0YWJsZS4KQEAgLTEzMDcsMzUgKzExNzQsMjEg
QEAgdm9pZCBLSFRNTFBhcnNlcjo6cmVvcGVuUmVzaWR1YWxTdHlsZVRhZwogICAgIH0KIH0KIAot
dm9pZCBLSFRNTFBhcnNlcjo6cHVzaEJsb2NrKGludCBfaWQsIGludCBfbGV2ZWwpCit2b2lkIEhU
TUxQYXJzZXI6OnB1c2hCbG9jayhjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUsIGludCBfbGV2
ZWwpCiB7Ci0gICAgSFRNTFN0YWNrRWxlbSAqRWxlbSA9IG5ldyBIVE1MU3RhY2tFbGVtKF9pZCwg
X2xldmVsLCBjdXJyZW50LCBibG9ja1N0YWNrKTsKLQorICAgIEhUTUxTdGFja0VsZW0gKkVsZW0g
PSBuZXcgSFRNTFN0YWNrRWxlbSh0YWdOYW1lLCBfbGV2ZWwsIGN1cnJlbnQsIGJsb2NrU3RhY2sp
OwogICAgIGJsb2NrU3RhY2sgPSBFbGVtOwotICAgIGFkZEZvcmJpZGRlbihfaWQsIGZvcmJpZGRl
blRhZyk7CiB9CiAKLXZvaWQgS0hUTUxQYXJzZXI6OnBvcEJsb2NrKCBpbnQgX2lkICkKK3ZvaWQg
SFRNTFBhcnNlcjo6cG9wQmxvY2soY29uc3QgQXRvbWljU3RyaW5nJiBfdGFnTmFtZSkKIHsKICAg
ICBIVE1MU3RhY2tFbGVtICpFbGVtID0gYmxvY2tTdGFjazsKICAgICAKICAgICBpbnQgbWF4TGV2
ZWwgPSAwOwogCi0jaWZkZWYgUEFSU0VSX0RFQlVHCi0gICAga2REZWJ1ZyggNjAzNSApIDw8ICJw
b3BCbG9jaygiIDw8IGdldFRhZ05hbWUoX2lkKS5zdHJpbmcoKSA8PCAiKSIgPDwgZW5kbDsKLSAg
ICB3aGlsZShFbGVtKSB7Ci0gICAgICAgIGtkRGVidWcoIDYwMzUpIDw8ICIgICA+ICIgPDwgZ2V0
VGFnTmFtZShFbGVtLT5pZCkuc3RyaW5nKCkgPDwgZW5kbDsKLSAgICAgICAgRWxlbSA9IEVsZW0t
Pm5leHQ7Ci0gICAgfQotICAgIEVsZW0gPSBibG9ja1N0YWNrOwotI2VuZGlmCi0KLSAgICB3aGls
ZSggRWxlbSAmJiAoRWxlbS0+aWQgIT0gX2lkKSkKLSAgICB7CisgICAgd2hpbGUgKEVsZW0gJiYg
KEVsZW0tPnRhZ05hbWUgIT0gX3RhZ05hbWUpKSB7CiAgICAgICAgIGlmIChtYXhMZXZlbCA8IEVs
ZW0tPmxldmVsKQotICAgICAgICB7CiAgICAgICAgICAgICBtYXhMZXZlbCA9IEVsZW0tPmxldmVs
OwotICAgICAgICB9CiAgICAgICAgIEVsZW0gPSBFbGVtLT5uZXh0OwogICAgIH0KIApAQCAtMTM0
NSwyMCArMTE5OCwxOCBAQCB2b2lkIEtIVE1MUGFyc2VyOjpwb3BCbG9jayggaW50IF9pZCApCiAg
ICAgaWYgKG1heExldmVsID4gRWxlbS0+bGV2ZWwpIHsKICAgICAgICAgLy8gV2UgZGlkbid0IG1h
dGNoIGJlY2F1c2UgdGhlIHRhZyBpcyBpbiBhIGRpZmZlcmVudCBzY29wZSwgZS5nLiwKICAgICAg
ICAgLy8gPGI+PHA+Rm9vPC9iPi4gIFRyeSB0byBjb3JyZWN0IHRoZSBwcm9ibGVtLgotICAgICAg
ICBpZiAoIWlzUmVzaWR1YWxTdHlsZVRhZyhfaWQpKQorICAgICAgICBpZiAoIWlzUmVzaWR1YWxT
dHlsZVRhZyhfdGFnTmFtZSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIHJldHVybiBo
YW5kbGVSZXNpZHVhbFN0eWxlQ2xvc2VUYWdBY3Jvc3NCbG9ja3MoRWxlbSk7CiAgICAgfQogCi0g
ICAgYm9vbCBpc0FmZmVjdGVkQnlTdHlsZSA9IGlzQWZmZWN0ZWRCeVJlc2lkdWFsU3R5bGUoRWxl
bS0+aWQpOworICAgIGJvb2wgaXNBZmZlY3RlZEJ5U3R5bGUgPSBpc0FmZmVjdGVkQnlSZXNpZHVh
bFN0eWxlKEVsZW0tPnRhZ05hbWUpOwogICAgIEhUTUxTdGFja0VsZW0qIHJlc2lkdWFsU3R5bGVT
dGFjayA9IDA7CiAgICAgTm9kZUltcGwqIG1hbGZvcm1lZFRhYmxlUGFyZW50ID0gMDsKICAgICAK
ICAgICBFbGVtID0gYmxvY2tTdGFjazsKLSAgICB3aGlsZSAoRWxlbSkKLSAgICB7Ci0gICAgICAg
IGlmIChFbGVtLT5pZCA9PSBfaWQpCi0gICAgICAgIHsKKyAgICB3aGlsZSAoRWxlbSkgeworICAg
ICAgICBpZiAoRWxlbS0+dGFnTmFtZSA9PSBfdGFnTmFtZSkgewogICAgICAgICAgICAgaW50IHN0
cmF5VGFibGUgPSBpblN0cmF5VGFibGVDb250ZW50OwogICAgICAgICAgICAgcG9wT25lQmxvY2so
KTsKICAgICAgICAgICAgIEVsZW0gPSAwOwpAQCAtMTM2OSwxNCArMTIyMCwxMyBAQCB2b2lkIEtI
VE1MUGFyc2VyOjpwb3BCbG9jayggaW50IF9pZCApCiAgICAgICAgICAgICAvLyBtdXN0IGFsc28g
a25vdyB0aGF0IGl0IGlzIHRoZSByb290IG9mIG1hbGZvcm1lZCBjb250ZW50IGluc2lkZSBhIDx0
Ym9keT4vPHRyPi4KICAgICAgICAgICAgIGlmIChzdHJheVRhYmxlICYmIChpblN0cmF5VGFibGVD
b250ZW50IDwgc3RyYXlUYWJsZSkgJiYgcmVzaWR1YWxTdHlsZVN0YWNrKSB7CiAgICAgICAgICAg
ICAgICAgTm9kZUltcGwqIGN1cnIgPSBjdXJyZW50OwotICAgICAgICAgICAgICAgIHdoaWxlIChj
dXJyICYmIGN1cnItPmlkKCkgIT0gSURfVEFCTEUpCisgICAgICAgICAgICAgICAgd2hpbGUgKGN1
cnIgJiYgIWN1cnItPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0YWJsZSgpKSkKICAgICAgICAgICAg
ICAgICAgICAgY3VyciA9IGN1cnItPnBhcmVudE5vZGUoKTsKICAgICAgICAgICAgICAgICBtYWxm
b3JtZWRUYWJsZVBhcmVudCA9IGN1cnIgPyBjdXJyLT5wYXJlbnROb2RlKCkgOiAwOwogICAgICAg
ICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAg
aWYgKEVsZW0tPmlkID09IElEX0ZPUk0gJiYgZm9ybSkKKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICBpZiAoZm9ybSAmJiBFbGVtLT50YWdOYW1lID09IEhUTUxOYW1lczo6Zm9ybSgpKQogICAg
ICAgICAgICAgICAgIC8vIEEgPGZvcm0+IGlzIGJlaW5nIGNsb3NlZCBwcmVtYXR1cmVseSAoYW5k
IHRoaXMgaXMKICAgICAgICAgICAgICAgICAvLyBtYWxmb3JtZWQgSFRNTCkuICBTZXQgYW4gYXR0
cmlidXRlIG9uIHRoZSBmb3JtIHRvIGNsZWFyIG91dCBpdHMKICAgICAgICAgICAgICAgICAvLyBi
b3R0b20gbWFyZ2luLgpAQCAtMTM4NSw3ICsxMjM1LDcgQEAgdm9pZCBLSFRNTFBhcnNlcjo6cG9w
QmxvY2soIGludCBfaWQgKQogICAgICAgICAgICAgLy8gU2NoZWR1bGUgdGhpcyB0YWcgZm9yIHJl
b3BlbmluZwogICAgICAgICAgICAgLy8gYWZ0ZXIgd2UgY29tcGxldGUgdGhlIGNsb3NlIG9mIHRo
aXMgZW50aXJlIGJsb2NrLgogICAgICAgICAgICAgTm9kZUltcGwqIGN1cnJOb2RlID0gY3VycmVu
dDsKLSAgICAgICAgICAgIGlmIChpc0FmZmVjdGVkQnlTdHlsZSAmJiBpc1Jlc2lkdWFsU3R5bGVU
YWcoRWxlbS0+aWQpKSB7CisgICAgICAgICAgICBpZiAoaXNBZmZlY3RlZEJ5U3R5bGUgJiYgaXNS
ZXNpZHVhbFN0eWxlVGFnKEVsZW0tPnRhZ05hbWUpKSB7CiAgICAgICAgICAgICAgICAgLy8gV2Un
dmUgb3ZlcmxvYWRlZCB0aGUgdXNlIG9mIHN0YWNrIGVsZW1lbnRzIGFuZCBhcmUganVzdCByZXVz
aW5nIHRoZQogICAgICAgICAgICAgICAgIC8vIHN0cnVjdCB3aXRoIGEgc2xpZ2h0bHkgZGlmZmVy
ZW50IG1lYW5pbmcgdG8gdGhlIHZhcmlhYmxlcy4gIEluc3RlYWQgb2YgY2hhaW5pbmcKICAgICAg
ICAgICAgICAgICAvLyBmcm9tIGlubmVybW9zdCB0byBvdXRlcm1vc3QsIHdlIGJ1aWxkIHVwIGEg
bGlzdCBvZiBhbGwgdGhlIHRhZ3Mgd2UgbmVlZCB0byByZW9wZW4KQEAgLTE0MDgsMTkgKzEyNTgs
MTQgQEAgdm9pZCBLSFRNTFBhcnNlcjo6cG9wQmxvY2soIGludCBfaWQgKQogICAgIHJlb3BlblJl
c2lkdWFsU3R5bGVUYWdzKHJlc2lkdWFsU3R5bGVTdGFjaywgbWFsZm9ybWVkVGFibGVQYXJlbnQp
OwogfQogCi12b2lkIEtIVE1MUGFyc2VyOjpwb3BPbmVCbG9jayhib29sIGRlbEJsb2NrKQordm9p
ZCBIVE1MUGFyc2VyOjpwb3BPbmVCbG9jayhib29sIGRlbEJsb2NrKQogewogICAgIEhUTUxTdGFj
a0VsZW0gKkVsZW0gPSBibG9ja1N0YWNrOwogCiAgICAgLy8gd2Ugc2hvdWxkIG5ldmVyIGdldCBo
ZXJlLCBidXQgc29tZSBiYWQgaHRtbCBtaWdodCBjYXVzZSBpdC4KLSNpZm5kZWYgUEFSU0VSX0RF
QlVHCi0gICAgaWYoIUVsZW0pIHJldHVybjsKLSNlbHNlCi0gICAga2REZWJ1ZyggNjAzNSApIDw8
ICJwb3BwaW5nIGJsb2NrOiAiIDw8IGdldFRhZ05hbWUoRWxlbS0+aWQpLnN0cmluZygpIDw8ICIo
IiA8PCBFbGVtLT5pZCA8PCAiKSIgPDwgZW5kbDsKLSNlbmRpZgotCi0jaWYgU1BFRURfREVCVUcg
PCAxCi0gICAgaWYoKEVsZW0tPm5vZGUgIT0gY3VycmVudCkpIHsKKyAgICBpZiAoIUVsZW0pIHJl
dHVybjsKKyAgICAKKyAgICBpZiAoKEVsZW0tPm5vZGUgIT0gY3VycmVudCkpIHsKICAgICAgICAg
aWYgKGN1cnJlbnQtPm1haW50YWluc1N0YXRlKCkgJiYgZG9jKCkpewogICAgICAgICAgICAgZG9j
KCktPnJlZ2lzdGVyTWFpbnRhaW5zU3RhdGUoY3VycmVudCk7CiAgICAgICAgICAgICBRU3RyaW5n
TGlzdCAmc3RhdGVzID0gZG9jKCktPnJlc3RvcmVTdGF0ZSgpOwpAQCAtMTQzMSw5ICsxMjc2LDYg
QEAgdm9pZCBLSFRNTFBhcnNlcjo6cG9wT25lQmxvY2soYm9vbCBkZWxCbAogICAgICAgICAvLyBB
IGZldyBlbGVtZW50cyAoPGFwcGxldD4sIDxvYmplY3Q+KSBuZWVkIHRvIGtub3cgd2hlbiBhbGwg
Y2hpbGQgZWxlbWVudHMgKDxwYXJhbT5zKSBhcmUgYXZhaWxhYmxlOgogICAgICAgICBjdXJyZW50
LT5jbG9zZVJlbmRlcmVyKCk7CiAgICAgfQotI2VuZGlmCi0KLSAgICByZW1vdmVGb3JiaWRkZW4o
RWxlbS0+aWQsIGZvcmJpZGRlblRhZyk7CiAKICAgICBibG9ja1N0YWNrID0gRWxlbS0+bmV4dDsK
ICAgICBzZXRDdXJyZW50KEVsZW0tPm5vZGUpOwpAQCAtMTQ0NSwxOSArMTI4NywxOSBAQCB2b2lk
IEtIVE1MUGFyc2VyOjpwb3BPbmVCbG9jayhib29sIGRlbEJsCiAgICAgICAgIGRlbGV0ZSBFbGVt
OwogfQogCi12b2lkIEtIVE1MUGFyc2VyOjpwb3BJbmxpbmVCbG9ja3MoKQordm9pZCBIVE1MUGFy
c2VyOjpwb3BJbmxpbmVCbG9ja3MoKQogewotICAgIHdoaWxlIChibG9ja1N0YWNrICYmIGN1cnJl
bnQtPmlzSW5saW5lKCkpCisgICAgd2hpbGUgKGJsb2NrU3RhY2sgJiYgaXNJbmxpbmUoY3VycmVu
dCkpCiAgICAgICAgIHBvcE9uZUJsb2NrKCk7CiB9CiAKLXZvaWQgS0hUTUxQYXJzZXI6OmZyZWVC
bG9jaygpCit2b2lkIEhUTUxQYXJzZXI6OmZyZWVCbG9jaygpCiB7CiAgICAgd2hpbGUgKGJsb2Nr
U3RhY2spCiAgICAgICAgIHBvcE9uZUJsb2NrKCk7CiB9CiAKLXZvaWQgS0hUTUxQYXJzZXI6OmNy
ZWF0ZUhlYWQoKQordm9pZCBIVE1MUGFyc2VyOjpjcmVhdGVIZWFkKCkKIHsKICAgICBpZihoZWFk
IHx8ICFkb2MoKS0+Zmlyc3RDaGlsZCgpKQogICAgICAgICByZXR1cm47CkBAIC0xNDc0LDcgKzEz
MTYsNyBAQCB2b2lkIEtIVE1MUGFyc2VyOjpjcmVhdGVIZWFkKCkKICAgICB9CiB9CiAKLU5vZGVJ
bXBsICpLSFRNTFBhcnNlcjo6aGFuZGxlSXNpbmRleCggVG9rZW4gKnQgKQorTm9kZUltcGwgKkhU
TUxQYXJzZXI6OmhhbmRsZUlzaW5kZXgoIFRva2VuICp0ICkKIHsKICAgICBOb2RlSW1wbCAqbjsK
ICAgICBIVE1MRm9ybUVsZW1lbnRJbXBsICpteWZvcm0gPSBmb3JtOwpAQCAtMTUwNCw3ICsxMzQ2
LDcgQEAgTm9kZUltcGwgKktIVE1MUGFyc2VyOjpoYW5kbGVJc2luZGV4KCBUbwogICAgIHJldHVy
biBuOwogfQogCi12b2lkIEtIVE1MUGFyc2VyOjpzdGFydEJvZHkoKQordm9pZCBIVE1MUGFyc2Vy
OjpzdGFydEJvZHkoKQogewogICAgIGlmKGluQm9keSkgcmV0dXJuOwogCkBAIC0xNTE2LDcgKzEz
NTgsNyBAQCB2b2lkIEtIVE1MUGFyc2VyOjpzdGFydEJvZHkoKQogICAgIH0KIH0KIAotdm9pZCBL
SFRNTFBhcnNlcjo6ZmluaXNoZWQoKQordm9pZCBIVE1MUGFyc2VyOjpmaW5pc2hlZCgpCiB7CiAg
ICAgLy8gSW4gdGhlIGNhc2Ugb2YgYSBjb21wbGV0ZWx5IGVtcHR5IGRvY3VtZW50LCBoZXJlJ3Mg
dGhlIHBsYWNlIHRvIGNyZWF0ZSB0aGUgSFRNTCBlbGVtZW50LgogICAgIGlmIChjdXJyZW50LT5p
c0RvY3VtZW50Tm9kZSgpICYmIGN1cnJlbnQtPmZpcnN0Q2hpbGQoKSA9PSAwKSB7CkluZGV4OiBr
aHRtbC9odG1sL2h0bWxwYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2Vi
Q29yZS9raHRtbC9odG1sL2h0bWxwYXJzZXIuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yNwpk
aWZmIC11IC1wIC1yMS4yNyBraHRtbC9odG1sL2h0bWxwYXJzZXIuaAotLS0ga2h0bWwvaHRtbC9o
dG1scGFyc2VyLmgJNiBKYW4gMjAwNSAyMToxMzoxNiAtMDAwMAkxLjI3CisrKyBraHRtbC9odG1s
L2h0bWxwYXJzZXIuaAk5IEp1bCAyMDA1IDAyOjQzOjA5IC0wMDAwCkBAIC0yOSwxOSArMjksOSBA
QAogI2lmbmRlZiBIVE1MUEFSU0VSX0gKICNkZWZpbmUgSFRNTFBBUlNFUl9ICiAKLS8vIDAgYWxs
Ci0vLyAxIGRvbXRyZWUgKyByZW5kZXJ0cmVlICsgc3R5bGVGb3JFbGVtZW50LCBubyBsYXlvdXRp
bmcKLS8vIDIgZG9tdHJlZSBvbmx5Ci0jZGVmaW5lIFNQRUVEX0RFQlVHIDAKLQotI2lmZGVmIFNQ
RUVEX0RFQlVHCi0jaW5jbHVkZSA8cWRhdGV0aW1lLmg+Ci0jZW5kaWYKLQogI2luY2x1ZGUgImRv
bS9kb21fc3RyaW5nLmgiCiAjaW5jbHVkZSAieG1sL2RvbV9ub2RlaW1wbC5oIgogI2luY2x1ZGUg
Imh0bWwvaHRtbF9kb2N1bWVudGltcGwuaCIKLSNpbmNsdWRlICJtaXNjL2h0bWx0YWdzLmgiCiAK
IGNsYXNzIEtIVE1MVmlldzsKIGNsYXNzIEhUTUxTdGFja0VsZW07CkBAIC02MSwxOCArNTEsMTYg
QEAgbmFtZXNwYWNlIGtodG1sIHsKICAgICBjbGFzcyBUb2tlbjsKIH07CiAKLWNsYXNzIEtIVE1M
UGFyc2VyOwotCiAvKioKICAqIFRoZSBwYXJzZXIgZm9yIGh0bWwuIEl0IHJlY2VpdmVzIGEgc3Ry
ZWFtIG9mIHRva2VucyBmcm9tIHRoZSBIVE1MVG9rZW5pemVyLCBhbmQKICAqIGJ1aWxkcyB1cCB0
aGUgRG9jdW1lbnQgc3RydWN0dXJlIGZvcm0gaXQuCiAgKi8KLWNsYXNzIEtIVE1MUGFyc2VyCitj
bGFzcyBIVE1MUGFyc2VyCiB7CiBwdWJsaWM6Ci0gICAgS0hUTUxQYXJzZXIoS0hUTUxWaWV3ICp3
LCBET006OkRvY3VtZW50UHRyICppLCBib29sIGluY2x1ZGVzQ29tbWVudHM9ZmFsc2UpOwotICAg
IEtIVE1MUGFyc2VyKERPTTo6RG9jdW1lbnRGcmFnbWVudEltcGwgKmZyYWcsIERPTTo6RG9jdW1l
bnRQdHIgKmRvYywgYm9vbCBpbmNsdWRlc0NvbW1lbnRzPWZhbHNlKTsKLSAgICB2aXJ0dWFsIH5L
SFRNTFBhcnNlcigpOworICAgIEhUTUxQYXJzZXIoS0hUTUxWaWV3ICp3LCBET006OkRvY3VtZW50
UHRyICppLCBib29sIGluY2x1ZGVzQ29tbWVudHM9ZmFsc2UpOworICAgIEhUTUxQYXJzZXIoRE9N
OjpEb2N1bWVudEZyYWdtZW50SW1wbCAqZnJhZywgRE9NOjpEb2N1bWVudFB0ciAqZG9jLCBib29s
IGluY2x1ZGVzQ29tbWVudHM9ZmFsc2UpOworICAgIHZpcnR1YWwgfkhUTUxQYXJzZXIoKTsKIAog
ICAgIC8qKgogICAgICAqIHBhcnNlcyBvbmUgdG9rZW4gZGVsaXZlcmVkIGJ5IHRoZSB0b2tlbml6
ZXIKQEAgLTg5LDcgKzc3LDcgQEAgcHVibGljOgogICAgICAqLwogICAgIHZvaWQgcmVzZXQoKTsK
IAotICAgIGJvb2wgc2tpcE1vZGUoKSBjb25zdCB7IHJldHVybiAoZGlzY2FyZF91bnRpbCAhPSAw
KTsgfQorICAgIGJvb2wgc2tpcE1vZGUoKSBjb25zdCB7IHJldHVybiAhZGlzY2FyZF91bnRpbC5p
c051bGwoKTsgfQogICAgIGJvb2wgbm9TcGFjZXMoKSBjb25zdCB7IHJldHVybiAhaW5Cb2R5OyB9
CiAgICAgYm9vbCBzZWxlY3RNb2RlKCkgY29uc3QgeyByZXR1cm4gaW5TZWxlY3Q7IH0KIApAQCAt
OTcsNDggKzg1LDcwIEBAIHB1YmxpYzoKICAgICBET006OkRvY3VtZW50UHRyICpkb2NQdHIoKSBj
b25zdCB7IHJldHVybiBkb2N1bWVudDsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgdm9pZCBzZXRDdXJy
ZW50KERPTTo6Tm9kZUltcGwgKm5ld0N1cnJlbnQpOworICAgIHZvaWQgc2V0Q3VycmVudChET006
Ok5vZGVJbXBsKiBuZXdDdXJyZW50KTsKKyAgICB2b2lkIHNldFNraXBNb2RlKGNvbnN0IERPTTo6
UXVhbGlmaWVkTmFtZSYgcU5hbWUpIHsgZGlzY2FyZF91bnRpbCA9IHFOYW1lLmxvY2FsTmFtZSgp
OyB9CiAKICAgICBLSFRNTFZpZXcgKkhUTUxXaWRnZXQ7CiAgICAgRE9NOjpEb2N1bWVudFB0ciAq
ZG9jdW1lbnQ7CiAKICAgICAvKgotICAgICAqIGdlbmVyYXRlIGFuIGVsZW1lbnQgZnJvbSB0aGUg
dG9rZW4KKyAgICAgKiBnZW5lcmF0ZSBhIG5vZGUgZnJvbSB0aGUgdG9rZW4KICAgICAgKi8KLSAg
ICBET006Ok5vZGVJbXBsICpnZXRFbGVtZW50KGtodG1sOjpUb2tlbiAqKTsKKyAgICBET006Ok5v
ZGVJbXBsICpnZXROb2RlKGtodG1sOjpUb2tlbiAqKTsKKyAgICBib29sIHRleHRDcmVhdGVFcnJv
ckNoZWNrKGtodG1sOjpUb2tlbiosIERPTTo6Tm9kZUltcGwqJik7CisgICAgYm9vbCBjb21tZW50
Q3JlYXRlRXJyb3JDaGVjayhraHRtbDo6VG9rZW4qLCBET006Ok5vZGVJbXBsKiYpOworICAgIGJv
b2wgaGVhZENyZWF0ZUVycm9yQ2hlY2soa2h0bWw6OlRva2VuKiwgRE9NOjpOb2RlSW1wbComKTsK
KyAgICBib29sIGJvZHlDcmVhdGVFcnJvckNoZWNrKGtodG1sOjpUb2tlbiosIERPTTo6Tm9kZUlt
cGwqJik7CisgICAgYm9vbCBmcmFtZXNldENyZWF0ZUVycm9yQ2hlY2soa2h0bWw6OlRva2VuKiwg
RE9NOjpOb2RlSW1wbComKTsKKyAgICBib29sIGlmcmFtZUNyZWF0ZUVycm9yQ2hlY2soa2h0bWw6
OlRva2VuKiwgRE9NOjpOb2RlSW1wbComKTsKKyAgICBib29sIGZvcm1DcmVhdGVFcnJvckNoZWNr
KGtodG1sOjpUb2tlbiosIERPTTo6Tm9kZUltcGwqJik7CisgICAgYm9vbCBpc2luZGV4Q3JlYXRl
RXJyb3JDaGVjayhraHRtbDo6VG9rZW4qLCBET006Ok5vZGVJbXBsKiYpOworICAgIGJvb2wgc2Vs
ZWN0Q3JlYXRlRXJyb3JDaGVjayhraHRtbDo6VG9rZW4qLCBET006Ok5vZGVJbXBsKiYpOworICAg
IGJvb2wgZGRDcmVhdGVFcnJvckNoZWNrKGtodG1sOjpUb2tlbiosIERPTTo6Tm9kZUltcGwqJik7
CisgICAgYm9vbCBkdENyZWF0ZUVycm9yQ2hlY2soa2h0bWw6OlRva2VuKiwgRE9NOjpOb2RlSW1w
bComKTsKKyAgICBib29sIG5lc3RlZENyZWF0ZUVycm9yQ2hlY2soa2h0bWw6OlRva2VuKiwgRE9N
OjpOb2RlSW1wbComKTsKKyAgICBib29sIG5lc3RlZFN0eWxlQ3JlYXRlRXJyb3JDaGVjayhraHRt
bDo6VG9rZW4qLCBET006Ok5vZGVJbXBsKiYpOworICAgIGJvb2wgdGFibGVDZWxsQ3JlYXRlRXJy
b3JDaGVjayhraHRtbDo6VG9rZW4qLCBET006Ok5vZGVJbXBsKiYpOworICAgIGJvb2wgdGFibGVT
ZWN0aW9uQ3JlYXRlRXJyb3JDaGVjayhraHRtbDo6VG9rZW4qLCBET006Ok5vZGVJbXBsKiYpOwor
ICAgIGJvb2wgbm9lbWJlZENyZWF0ZUVycm9yQ2hlY2soa2h0bWw6OlRva2VuKiwgRE9NOjpOb2Rl
SW1wbComKTsKKyAgICBib29sIG5vc2NyaXB0Q3JlYXRlRXJyb3JDaGVjayhraHRtbDo6VG9rZW4q
LCBET006Ok5vZGVJbXBsKiYpOworICAgIGJvb2wgbm9mcmFtZXNDcmVhdGVFcnJvckNoZWNrKGto
dG1sOjpUb2tlbiosIERPTTo6Tm9kZUltcGwqJik7CisgICAgYm9vbCBub2xheWVyQ3JlYXRlRXJy
b3JDaGVjayhraHRtbDo6VG9rZW4qLCBET006Ok5vZGVJbXBsKiYpOwogCiAgICAgdm9pZCBwcm9j
ZXNzQ2xvc2VUYWcoa2h0bWw6OlRva2VuICopOwogCiAgICAgYm9vbCBpbnNlcnROb2RlKERPTTo6
Tm9kZUltcGwgKm4sIGJvb2wgZmxhdCA9IGZhbHNlKTsKKyAgICBib29sIGhhbmRsZUVycm9yKERP
TTo6Tm9kZUltcGwqIG4sIGJvb2wgZmxhdCwgY29uc3QgRE9NOjpBdG9taWNTdHJpbmcmIGxvY2Fs
TmFtZSwgaW50IHRhZ1ByaW9yaXR5KTsKKyAgICAKKyAgICAvLyBUaGUgY3VycmVudGx5IGFjdGl2
ZSBlbGVtZW50ICh0aGUgb25lIG5ldyBlbGVtZW50cyB3aWxsIGJlIGFkZGVkIHRvKS4gIENhbiBi
ZSBhIERvY3VtZW50RnJhZ21lbnQsIGEgRG9jdW1lbnQgb3IgYW4gRWxlbWVudC4KKyAgICBET006
Ok5vZGVJbXBsKiBjdXJyZW50OwogCi0gICAgLyoKLSAgICAgKiBUaGUgY3VycmVudGx5IGFjdGl2
ZSBlbGVtZW50ICh0aGUgb25lIG5ldyBlbGVtZW50cyB3aWxsIGJlIGFkZGVkIHRvKQotICAgICAq
LwotICAgIERPTTo6Tm9kZUltcGwgKmN1cnJlbnQ7CiAgICAgYm9vbCBjdXJyZW50SXNSZWZlcmVu
Y2VkOwogCiAgICAgSFRNTFN0YWNrRWxlbSAqYmxvY2tTdGFjazsKIAotICAgIHZvaWQgcHVzaEJs
b2NrKCBpbnQgX2lkLCBpbnQgX2xldmVsKTsKLQotICAgIHZvaWQgcG9wQmxvY2soIGludCBfaWQg
KTsKKyAgICB2b2lkIHB1c2hCbG9jayhjb25zdCBET006OkF0b21pY1N0cmluZyYgdGFnTmFtZSwg
aW50IF9sZXZlbCk7CisgICAgdm9pZCBwb3BCbG9jayhjb25zdCBET006OkF0b21pY1N0cmluZyYg
dGFnTmFtZSk7CisgICAgdm9pZCBwb3BCbG9jayhjb25zdCBET006OlF1YWxpZmllZE5hbWUmIHFO
YW1lKSB7IHJldHVybiBwb3BCbG9jayhxTmFtZS5sb2NhbE5hbWUoKSk7IH0gLy8gQ29udmVuaWVu
Y2UgZnVuY3Rpb24gZm9yIHJlYWRhYmlsaXR5LgogICAgIHZvaWQgcG9wT25lQmxvY2soYm9vbCBk
ZWxCbG9jayA9IHRydWUpOwogICAgIHZvaWQgcG9wSW5saW5lQmxvY2tzKCk7CiAKLSAgICB2b2lk
IGZyZWVCbG9jayggdm9pZCk7CisgICAgdm9pZCBmcmVlQmxvY2soKTsKIAogICAgIHZvaWQgY3Jl
YXRlSGVhZCgpOwogCi0gICAgYm9vbCBpc1Jlc2lkdWFsU3R5bGVUYWcoaW50IF9pZCk7Ci0gICAg
Ym9vbCBpc0FmZmVjdGVkQnlSZXNpZHVhbFN0eWxlKGludCBfaWQpOworICAgIGJvb2wgaXNSZXNp
ZHVhbFN0eWxlVGFnKGNvbnN0IERPTTo6QXRvbWljU3RyaW5nJiB0YWdOYW1lKTsKKyAgICBib29s
IGlzQWZmZWN0ZWRCeVJlc2lkdWFsU3R5bGUoY29uc3QgRE9NOjpBdG9taWNTdHJpbmcmIHRhZ05h
bWUpOwogICAgIHZvaWQgaGFuZGxlUmVzaWR1YWxTdHlsZUNsb3NlVGFnQWNyb3NzQmxvY2tzKEhU
TUxTdGFja0VsZW0qIGVsZW0pOwogICAgIHZvaWQgcmVvcGVuUmVzaWR1YWxTdHlsZVRhZ3MoSFRN
TFN0YWNrRWxlbSogZWxlbSwgRE9NOjpOb2RlSW1wbCogbWFsZm9ybWVkVGFibGVQYXJlbnQpOwog
Ci0gICAgYm9vbCBhbGxvd05lc3RlZFJlZHVuZGFudFRhZyhpbnQgX2lkKTsKKyAgICBib29sIGFs
bG93TmVzdGVkUmVkdW5kYW50VGFnKGNvbnN0IERPTTo6QXRvbWljU3RyaW5nJiB0YWdOYW1lKTsK
ICAgICAKLSAgICBzdGF0aWMgYm9vbCBpc0hlYWRlclRhZyhpbnQgX2lkKTsKKyAgICBzdGF0aWMg
Ym9vbCBpc0hlYWRlclRhZyhjb25zdCBET006OkF0b21pY1N0cmluZyYgdGFnTmFtZSk7CiAgICAg
dm9pZCBwb3BOZXN0ZWRIZWFkZXJUYWcoKTsKIAorICAgIGJvb2wgaXNJbmxpbmUoRE9NOjpOb2Rl
SW1wbCogbm9kZSkgY29uc3Q7CisgICAgCiAgICAgLyoKICAgICAgKiBjdXJyZW50bHkgYWN0aXZl
IGZvcm0KICAgICAgKi8KQEAgLTE3NSwxOCArMTg1LDEyIEBAIHByb3RlY3RlZDoKICAgICAvKgog
ICAgICAqIHRlbGxzIHRoZSBwYXJzZXIgdG8gZGlzY2FyZCBhbGwgdGFncywgdW50aWwgaXQgcmVh
Y2hlcyB0aGUgb25lIHNwZWNpZmllZAogICAgICAqLwotICAgIGludCBkaXNjYXJkX3VudGlsOwor
ICAgIERPTTo6QXRvbWljU3RyaW5nIGRpc2NhcmRfdW50aWw7CiAKICAgICBib29sIGhlYWRMb2Fk
ZWQ7CiAgICAgaW50IGluU3RyYXlUYWJsZUNvbnRlbnQ7CiAKICAgICBib29sIGluY2x1ZGVzQ29t
bWVudHNJbkRPTTsKLSAgICAKLSAgICB1c2hvcnQgZm9yYmlkZGVuVGFnW0lEX0xBU1RfVEFHICsg
MV07Ci0gICAgCi0jaWYgU1BFRURfREVCVUcgPiAwCi0gICAgUVRpbWUgcXQ7Ci0jZW5kaWYKIH07
Ci0KKyAgICAKICNlbmRpZiAvLyBIVE1MUEFSU0VSX0gKSW5kZXg6IGtodG1sL2h0bWwvaHRtbHRv
a2VuaXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwv
aHRtbC9odG1sdG9rZW5pemVyLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS45NQpkaWZmIC11
IC1wIC1yMS45NSBraHRtbC9odG1sL2h0bWx0b2tlbml6ZXIuY3BwCi0tLSBraHRtbC9odG1sL2h0
bWx0b2tlbml6ZXIuY3BwCTUgSnVsIDIwMDUgMjM6MjE6MTAgLTAwMDAJMS45NQorKysga2h0bWwv
aHRtbC9odG1sdG9rZW5pemVyLmNwcAk5IEp1bCAyMDA1IDAyOjQzOjExIC0wMDAwCkBAIC0zOSw3
ICszOSw2IEBACiAjaW5jbHVkZSAiaHRtbC9odG1sdG9rZW5pemVyLmgiCiAjaW5jbHVkZSAiaHRt
bC9odG1sX2RvY3VtZW50aW1wbC5oIgogI2luY2x1ZGUgImh0bWwvaHRtbHBhcnNlci5oIgotI2lu
Y2x1ZGUgImh0bWwvZHRkLmgiCiAKICNpbmNsdWRlICJtaXNjL2xvYWRlci5oIgogI2luY2x1ZGUg
Im1pc2MvaHRtbGhhc2hlcy5oIgpAQCAtNjMsNyArNjIsMTAgQEAgdXNpbmcgRE9NOjpET01TdHJp
bmc7CiB1c2luZyBET006OkRPTVN0cmluZ0ltcGw7CiB1c2luZyBET006OkRvY3VtZW50SW1wbDsK
IHVzaW5nIERPTTo6ZW1wdHlBdG9tOwotdXNpbmcgRE9NOjplbmRUYWdSZXF1aXJlbWVudDsKK3Vz
aW5nIERPTTo6Y29tbWVudEF0b207Cit1c2luZyBET006Om51bGxBdG9tOwordXNpbmcgRE9NOjp0
ZXh0QXRvbTsKK3VzaW5nIERPTTo6SFRNTE5hbWVzOwogCiAvLyB0dXJuIG9mZiBpbmxpbmluZyB0
byB2b2lkIHdhcm5pbmcgd2l0aCBuZXdlciBnY2MKICN1bmRlZiBfX2lubGluZQpAQCAtMjM5LDcg
KzI0MSw3IEBAIEhUTUxUb2tlbml6ZXI6OkhUTUxUb2tlbml6ZXIoRE9NOjpEb2N1bWUKICAgICBz
Y3JpcHRDb2RlID0gMDsKICAgICBzY3JpcHRDb2RlU2l6ZSA9IHNjcmlwdENvZGVNYXhTaXplID0g
c2NyaXB0Q29kZVJlc3luYyA9IDA7CiAgICAgY2hhcnNldHMgPSBLR2xvYmFsOjpjaGFyc2V0cygp
OwotICAgIHBhcnNlciA9IG5ldyBLSFRNTFBhcnNlcihfdmlldywgX2RvYywgaW5jbHVkZXNDb21t
ZW50cyk7CisgICAgcGFyc2VyID0gbmV3IEhUTUxQYXJzZXIoX3ZpZXcsIF9kb2MsIGluY2x1ZGVz
Q29tbWVudHMpOwogICAgIG1fZXhlY3V0aW5nU2NyaXB0ID0gMDsKICAgICBsb2FkaW5nRXh0U2Ny
aXB0ID0gZmFsc2U7CiAgICAgb25Ib2xkID0gZmFsc2U7CkBAIC0yNTksNyArMjYxLDcgQEAgSFRN
TFRva2VuaXplcjo6SFRNTFRva2VuaXplcihET006OkRvY3VtZQogICAgIHNjcmlwdENvZGUgPSAw
OwogICAgIHNjcmlwdENvZGVTaXplID0gc2NyaXB0Q29kZU1heFNpemUgPSBzY3JpcHRDb2RlUmVz
eW5jID0gMDsKICAgICBjaGFyc2V0cyA9IEtHbG9iYWw6OmNoYXJzZXRzKCk7Ci0gICAgcGFyc2Vy
ID0gbmV3IEtIVE1MUGFyc2VyKGksIF9kb2MsIGluY2x1ZGVzQ29tbWVudHMpOworICAgIHBhcnNl
ciA9IG5ldyBIVE1MUGFyc2VyKGksIF9kb2MsIGluY2x1ZGVzQ29tbWVudHMpOwogICAgIG1fZXhl
Y3V0aW5nU2NyaXB0ID0gMDsKICAgICBsb2FkaW5nRXh0U2NyaXB0ID0gZmFsc2U7CiAgICAgb25I
b2xkID0gZmFsc2U7CkBAIC00NTEsMTAgKzQ1MywxMCBAQCB2b2lkIEhUTUxUb2tlbml6ZXI6OnBh
cnNlU3BlY2lhbChUb2tlbml6CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBw
cm9jZXNzTGlzdGluZyhUb2tlbml6ZXJTdHJpbmcoc2NyaXB0Q29kZSwgc2NyaXB0Q29kZVNpemUp
KTsKICAgICAgICAgICAgICAgICBwcm9jZXNzVG9rZW4oKTsKLSAgICAgICAgICAgICAgICBpZiAo
IHN0eWxlICkgICAgICAgICB7IGN1cnJUb2tlbi5pZCA9IElEX1NUWUxFICsgSURfQ0xPU0VfVEFH
OyB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoIHRleHRhcmVhICkgeyBjdXJyVG9rZW4uaWQg
PSBJRF9URVhUQVJFQSArIElEX0NMT1NFX1RBRzsgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYg
KCB0aXRsZSApIHsgY3VyclRva2VuLmlkID0gSURfVElUTEUgKyBJRF9DTE9TRV9UQUc7IH0KLSAg
ICAgICAgICAgICAgICBlbHNlIGlmICggeG1wICkgIHsgY3VyclRva2VuLmlkID0gSURfWE1QICsg
SURfQ0xPU0VfVEFHOyB9CisgICAgICAgICAgICAgICAgaWYgKCBzdHlsZSApICAgICAgICAgeyBj
dXJyVG9rZW4udGFnTmFtZSA9IEhUTUxOYW1lczo6c3R5bGUoKS5sb2NhbE5hbWUoKTsgY3VyclRv
a2VuLmJlZ2luVGFnID0gZmFsc2U7IH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmICggdGV4dGFy
ZWEgKSB7IGN1cnJUb2tlbi50YWdOYW1lID0gSFRNTE5hbWVzOjp0ZXh0YXJlYSgpLmxvY2FsTmFt
ZSgpOyBjdXJyVG9rZW4uYmVnaW5UYWcgPSBmYWxzZTsgfQorICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKCB0aXRsZSApIHsgY3VyclRva2VuLnRhZ05hbWUgPSBIVE1MTmFtZXM6OnRpdGxlKCkubG9j
YWxOYW1lKCk7IGN1cnJUb2tlbi5iZWdpblRhZyA9IGZhbHNlOyB9CisgICAgICAgICAgICAgICAg
ZWxzZSBpZiAoIHhtcCApICB7IGN1cnJUb2tlbi50YWdOYW1lID0gSFRNTE5hbWVzOjp4bXAoKS5s
b2NhbE5hbWUoKTsgY3VyclRva2VuLmJlZ2luVGFnID0gZmFsc2U7IH0KICAgICAgICAgICAgICAg
ICBwcm9jZXNzVG9rZW4oKTsKICAgICAgICAgICAgICAgICBzdHlsZSA9IHNjcmlwdCA9IHN0eWxl
ID0gdGV4dGFyZWEgPSB0aXRsZSA9IHhtcCA9IGZhbHNlOwogICAgICAgICAgICAgICAgIHRxdW90
ZSA9IE5vUXVvdGU7CkBAIC01MjQsNyArNTI2LDggQEAgdm9pZCBIVE1MVG9rZW5pemVyOjpzY3Jp
cHRIYW5kbGVyKCkKICAgICBwcm9jZXNzTGlzdGluZyhUb2tlbml6ZXJTdHJpbmcoc2NyaXB0Q29k
ZSwgc2NyaXB0Q29kZVNpemUpKTsKICAgICBRU3RyaW5nIGV4U2NyaXB0KCBidWZmZXIsIGRlc3Qt
YnVmZmVyICk7CiAgICAgcHJvY2Vzc1Rva2VuKCk7Ci0gICAgY3VyclRva2VuLmlkID0gSURfU0NS
SVBUICsgSURfQ0xPU0VfVEFHOworICAgIGN1cnJUb2tlbi50YWdOYW1lID0gSFRNTE5hbWVzOjpz
Y3JpcHQoKS5sb2NhbE5hbWUoKTsKKyAgICBjdXJyVG9rZW4uYmVnaW5UYWcgPSBmYWxzZTsKICAg
ICBwcm9jZXNzVG9rZW4oKTsKIAogICAgIFRva2VuaXplclN0cmluZyAqc2F2ZWRQcmVwZW5kaW5n
U3JjID0gY3VycmVudFByZXBlbmRpbmdTcmM7CkBAIC03MDEsMTAgKzcwNCwxMiBAQCB2b2lkIEhU
TUxUb2tlbml6ZXI6OnBhcnNlQ29tbWVudChUb2tlbml6CiAgICAgICAgICAgICAgICAgICAgICAg
ICBjaGVja1NjcmlwdEJ1ZmZlcigpOwogICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0Q29k
ZVsgc2NyaXB0Q29kZVNpemUgXSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHRD
b2RlWyBzY3JpcHRDb2RlU2l6ZSArIDEgXSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBj
dXJyVG9rZW4uaWQgPSBJRF9DT01NRU5UOworICAgICAgICAgICAgICAgICAgICAgICAgY3VyclRv
a2VuLnRhZ05hbWUgPSBjb21tZW50QXRvbTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJU
b2tlbi5iZWdpblRhZyA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzTGlz
dGluZyhUb2tlbml6ZXJTdHJpbmcoc2NyaXB0Q29kZSwgc2NyaXB0Q29kZVNpemUgLSBlbmRDaGFy
c0NvdW50KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzVG9rZW4oKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGN1cnJUb2tlbi5pZCA9IElEX0NPTU1FTlQgKyBJRF9DTE9TRV9U
QUc7CisgICAgICAgICAgICAgICAgICAgICAgICBjdXJyVG9rZW4udGFnTmFtZSA9IGNvbW1lbnRB
dG9tOworICAgICAgICAgICAgICAgICAgICAgICAgY3VyclRva2VuLmJlZ2luVGFnID0gZmFsc2U7
CiAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzVG9rZW4oKTsKICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICAgICBzY3JpcHRDb2RlU2l6ZSA9IDA7CkBAIC0xMDIy
LDEwICsxMDI3LDEyIEBAIHZvaWQgSFRNTFRva2VuaXplcjo6cGFyc2VUYWcoVG9rZW5pemVyU3QK
ICAgICAgICAgICAgICAgICAgICAgZmluaXNoID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIC8vIFVzZSB0b2xvd2Vy
KCkgaW5zdGVhZCBvZiB8IDB4MjAgdG8gbG93ZXJjYXNlIHRoZSBjaGFyIGJlY2F1c2UgdGhlcmUg
aXMgbm8gCi0gICAgICAgICAgICAgICAgLy8gcGVyZm9ybWFuY2UgZ2FpbiBpbiB1c2luZyB8IDB4
MjAgc2luY2UgdG9sb3dlcigpIGlzIG9wdGltaXplZCBhbmQgCi0gICAgICAgICAgICAgICAgLy8g
fCAweDIwIHR1cm5zIGNoYXJhY3RlcnMgc3VjaCBhcyAnXycgaW50byBqdW5rLgotICAgICAgICAg
ICAgICAgIGNCdWZmZXJbY0J1ZmZlclBvcysrXSA9IHRvbG93ZXIoY3VyY2hhcik7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gdG9sb3dlcigpIHNob3dzIHVwIG9uIHByb2Zp
bGVzLiBUaGlzIGlzIGZhc3RlciEKKyAgICAgICAgICAgICAgICBpZiAoY3VyY2hhciA+PSAnQScg
JiYgY3VyY2hhciA8PSAnWicpCisgICAgICAgICAgICAgICAgICAgIGNCdWZmZXJbY0J1ZmZlclBv
cysrXSA9IGN1cmNoYXIgKyAoJ2EnIC0gJ0EnKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgICAgIGNCdWZmZXJbY0J1ZmZlclBvcysrXSA9IGN1cmNoYXI7CiAgICAgICAg
ICAgICAgICAgKytzcmM7CiAgICAgICAgICAgICB9CiAKQEAgLTEwNDcsMjcgKzEwNTQsMTMgQEAg
dm9pZCBIVE1MVG9rZW5pemVyOjpwYXJzZVRhZyhUb2tlbml6ZXJTdAogICAgICAgICAgICAgICAg
ICAgICAvLyBTdGFydCBUYWcKICAgICAgICAgICAgICAgICAgICAgYmVnaW5UYWcgPSB0cnVlOwog
Ci0gICAgICAgICAgICAgICAgLy8gQWNjZXB0IGVtcHR5IHhtbCB0YWdzIGxpa2UgPGJyLz4uICBX
ZSB0cmltIG9mZiB0aGUgIi8iIHNvIHRoYXQgd2hlbiB3ZSBjYWxsCi0gICAgICAgICAgICAgICAg
Ly8gZ2V0VGFnSUQsIHdlJ2xsIGxvb2sgdXAgImJyIiBhcyB0aGUgdGFnIG5hbWUgYW5kIG5vdCAi
YnIvIi4KKyAgICAgICAgICAgICAgICAvLyBJZ25vcmUgdGhlIC8gaW4gZmFrZSB4bWwgdGFncyBs
aWtlIDxici8+LiAgV2UgdHJpbSBvZmYgdGhlICIvIiBzbyB0aGF0IHdlJ2xsIGdldCAiYnIiIGFz
IHRoZSB0YWcgbmFtZSBhbmQgbm90ICJici8iLgogICAgICAgICAgICAgICAgIGlmKGxlbiA+IDEg
JiYgcHRyW2xlbi0xXSA9PSAnLycgKQogICAgICAgICAgICAgICAgICAgICBwdHJbLS1sZW5dID0g
J1wwJzsKIAotICAgICAgICAgICAgICAgIC8vIExvb2sgdXAgdGhlIHRhZ0lEIGZvciB0aGUgc3Bl
Y2lmaWVkIHRhZyBuYW1lIChub3cgdGhhdCB3ZSd2ZSBzaGF2ZWQgb2ZmIGFueQotICAgICAgICAg
ICAgICAgIC8vIGludmFsaWQgLyB0aGF0IG1pZ2h0IGhhdmUgZm9sbG93ZWQgdGhlIG5hbWUpLgot
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHRhZ0lEID0gZ2V0VGFnSUQocHRyLCBsZW4p
OwotICAgICAgICAgICAgICAgIGlmICghdGFnSUQpIHsKLSAgICAgICAgICAgICAgICAgICAgRE9N
U3RyaW5nIHRhZ05hbWUocHRyKTsKLSAgICAgICAgICAgICAgICAgICAgRG9jdW1lbnRJbXBsICpk
b2MgPSBwYXJzZXItPmRvY1B0cigpLT5kb2N1bWVudCgpOwotICAgICAgICAgICAgICAgICAgICBp
ZiAoZG9jLT5pc1ZhbGlkTmFtZSh0YWdOYW1lKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHRh
Z0lEID0gcGFyc2VyLT5kb2NQdHIoKS0+ZG9jdW1lbnQoKS0+dGFnSWQoMCwgdGFnTmFtZS5pbXBs
ZW1lbnRhdGlvbigpLCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGlmICh0YWdJRCkgewotI2lmZGVmIFRPS0VOX0RFQlVHCi0gICAgICAgICAgICAgICAgICAgIFFD
U3RyaW5nIHRtcChwdHIsIGxlbisxKTsKLSAgICAgICAgICAgICAgICAgICAga2REZWJ1ZyggNjAz
NiApIDw8ICJmb3VuZCB0YWcgaWQ9IiA8PCB0YWdJRCA8PCAiOiAiIDw8IHRtcC5kYXRhKCkgPDwg
ZW5kbDsKLSNlbmRpZgotICAgICAgICAgICAgICAgICAgICBjdXJyVG9rZW4uaWQgPSBiZWdpblRh
ZyA/IHRhZ0lEIDogdGFnSUQgKyBJRF9DTE9TRV9UQUc7Ci0gICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIC8vIE5vdyB0aGF0IHdlJ3ZlIHNoYXZlZCBvZmYgYW55IGludmFsaWQgLyB0
aGF0IG1pZ2h0IGhhdmUgZm9sbG93ZWQgdGhlIG5hbWUpLCBtYWtlIHRoZSB0YWcuCisgICAgICAg
ICAgICAgICAgY3VyclRva2VuLnRhZ05hbWUgPSBBdG9taWNTdHJpbmcocHRyKTsKKyAgICAgICAg
ICAgICAgICBjdXJyVG9rZW4uYmVnaW5UYWcgPSBiZWdpblRhZzsKICAgICAgICAgICAgICAgICBk
ZXN0ID0gYnVmZmVyOwogICAgICAgICAgICAgICAgIHRhZyA9IFNlYXJjaEF0dHJpYnV0ZTsKICAg
ICAgICAgICAgICAgICBjQnVmZmVyUG9zID0gMDsKQEAgLTExMTgsMTUgKzExMTEsNiBAQCB2b2lk
IEhUTUxUb2tlbml6ZXI6OnBhcnNlVGFnKFRva2VuaXplclN0CiAgICAgICAgICAgICAgICAgICAg
ICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyTmFtZSA9IFFTdHJp
bmc6OmZyb21MYXRpbjEoUUNTdHJpbmcoY0J1ZmZlciwgY0J1ZmZlclBvcysxKS5kYXRhKCkpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJOYW1lUHJlc2VudCA9ICFhdHRyTmFtZS5p
c0VtcHR5KCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgZGVs
aWJlcmF0ZSBxdWlyayB0byBtYXRjaCBNb3ppbGxhIGFuZCBPcGVyYS4gIFdlIGhhdmUgdG8gZG8g
dGhpcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNpbmNlIHNpdGVzIHRoYXQgdXNl
IHRoZSAic3RhbmRhcmRzLWNvbXBsaWFudCIgcGF0aCBzb21ldGltZXMgc2VuZAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIDxzY3JpcHQgc3JjPSJmb28uanMiLz4uICBCb3RoIE1veiBh
bmQgT3BlcmEgd2lsbCBob25vciB0aGlzLCBkZXNwaXRlIGl0Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gYmVpbmcgYm9ndXMgSFRNTC4gIFRoZXkgZG8gbm90IGhvbm9yIHRoZSAiLyIg
Zm9yIG90aGVyIHRhZ3MuICBUaGlzIGJlaGF2aW9yCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gYWxzbyBkZXZpYXRlcyBmcm9tIFdpbklFLCBidXQgaW4gdGhpcyBjYXNlIHdlJ2xsIGp1
c3QgY29weSBNb3ogYW5kIE9wZXJhLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChj
dXJyVG9rZW4uaWQgPT0gSURfU0NSSVBUICYmIGN1cmNoYXIgPT0gJz4nICYmCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGF0dHJOYW1lID09ICIvIikKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY3VyclRva2VuLmZsYXQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAg
ICBkZXN0ID0gYnVmZmVyOwpAQCAtMTE0MiwxMCArMTEyNiwxMiBAQCB2b2lkIEhUTUxUb2tlbml6
ZXI6OnBhcnNlVGFnKFRva2VuaXplclN0CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAvLyBVc2UgdG9sb3dlcigpIGluc3RlYWQgb2YgfCAweDIwIHRvIGxvd2VyY2FzZSB0aGUgY2hh
ciBiZWNhdXNlIHRoZXJlIGlzIG5vIAotICAgICAgICAgICAgICAgIC8vIHBlcmZvcm1hbmNlIGdh
aW4gaW4gdXNpbmcgfCAweDIwIHNpbmNlIHRvbG93ZXIoKSBpcyBvcHRpbWl6ZWQgYW5kIAotICAg
ICAgICAgICAgICAgIC8vIHwgMHgyMCB0dXJucyBjaGFyYWN0ZXJzIHN1Y2ggYXMgJ18nIGludG8g
anVuay4KLSAgICAgICAgICAgICAgICBjQnVmZmVyW2NCdWZmZXJQb3MrK10gPSB0b2xvd2VyKGN1
cmNoYXIpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIHRvbG93ZXIoKSBz
aG93cyB1cCBvbiBwcm9maWxlcy4gVGhpcyBpcyBmYXN0ZXIhCisgICAgICAgICAgICAgICAgaWYg
KGN1cmNoYXIgPj0gJ0EnICYmIGN1cmNoYXIgPD0gJ1onKQorICAgICAgICAgICAgICAgICAgICBj
QnVmZmVyW2NCdWZmZXJQb3MrK10gPSBjdXJjaGFyICsgKCdhJyAtICdBJyk7CisgICAgICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBjQnVmZmVyW2NCdWZmZXJQb3MrK10gPSBj
dXJjaGFyOwogICAgICAgICAgICAgICAgICsrc3JjOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgaWYgKCBjQnVmZmVyUG9zID09IENCVUZMRU4gKSB7CkBAIC0xMzI4LDE4ICsxMzE0LDE1IEBA
IHZvaWQgSFRNTFRva2VuaXplcjo6cGFyc2VUYWcoVG9rZW5pemVyU3QKICAgICAgICAgICAgIGlm
ICgqc3JjICE9ICc8JykKICAgICAgICAgICAgICAgICArK3NyYzsKIAotICAgICAgICAgICAgaWYg
KCAhY3VyclRva2VuLmlkICkgLy9zdG9wIGlmIHRhZyBpcyB1bmtub3duCisgICAgICAgICAgICBp
ZiAoY3VyclRva2VuLnRhZ05hbWUgPT0gbnVsbEF0b20pIC8vc3RvcCBpZiB0YWcgaXMgdW5rbm93
bgogICAgICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICAgICAgdWludCB0YWdJRCA9IGN1
cnJUb2tlbi5pZDsKKyAgICAgICAgICAgIEF0b21pY1N0cmluZyB0YWdOYW1lID0gY3VyclRva2Vu
LnRhZ05hbWU7CiAjaWYgZGVmaW5lZChUT0tFTl9ERUJVRykgJiYgVE9LRU5fREVCVUcgPiAwCiAg
ICAgICAgICAgICBrZERlYnVnKCA2MDM2ICkgPDwgImFwcGVuZGluZyBUYWc6ICIgPDwgdGFnSUQg
PDwgZW5kbDsKICNlbmRpZgotICAgICAgICAgICAgYm9vbCBiZWdpblRhZyA9ICFjdXJyVG9rZW4u
ZmxhdCAmJiAodGFnSUQgPD0gSURfQ0xPU0VfVEFHKTsKLQotICAgICAgICAgICAgaWYgKHRhZ0lE
ID4gSURfQ0xPU0VfVEFHKQotICAgICAgICAgICAgICAgIHRhZ0lEIC09IElEX0NMT1NFX1RBRzsK
LSAgICAgICAgICAgIGVsc2UgaWYgKHRhZ0lEID09IElEX1NDUklQVCkgeworICAgICAgICAgICAg
Ym9vbCBiZWdpblRhZyA9ICFjdXJyVG9rZW4uZmxhdCAmJiBjdXJyVG9rZW4uYmVnaW5UYWc7Cisg
ICAgICAgICAgICBpZiAoYmVnaW5UYWcgJiYgY3VyclRva2VuLnRhZ05hbWUgPT0gSFRNTE5hbWVz
OjpzY3JpcHQoKSkgewogICAgICAgICAgICAgICAgIEF0dHJpYnV0ZUltcGwqIGEgPSAwOwogICAg
ICAgICAgICAgICAgIGJvb2wgZm91bmRUeXBlQXR0cmlidXRlID0gZmFsc2U7CiAgICAgICAgICAg
ICAgICAgc2NyaXB0U3JjID0gUVN0cmluZzo6bnVsbDsKQEAgLTE0MTQsNzEgKzEzOTcsNDkgQEAg
dm9pZCBIVE1MVG9rZW5pemVyOjpwYXJzZVRhZyhUb2tlbml6ZXJTdAogCiAgICAgICAgICAgICBw
cm9jZXNzVG9rZW4oKTsKIAotICAgICAgICAgICAgLy8gd2UgaGF2ZSB0byB0YWtlIGNhcmUgdG8g
Y2xvc2UgdGhlIHByZSBibG9jayBpbgotICAgICAgICAgICAgLy8gY2FzZSB3ZSBlbmNvdW50ZXIg
YW4gdW5hbGxvd2VkIGVsZW1lbnQuLi4uCi0gICAgICAgICAgICBpZihwcmUgJiYgYmVnaW5UYWcg
JiYgIURPTTo6Y2hlY2tDaGlsZChJRF9QUkUsIHRhZ0lELCAhcGFyc2VyLT5kb2MoKS0+aW5Db21w
YXRNb2RlKCkpKSB7Ci0gICAgICAgICAgICAgICAga2REZWJ1Zyg2MDM2KSA8PCAiIG5vdCBhbGxv
d2VkIGluIDxwcmU+ICIgPDwgKGludCl0YWdJRCA8PCBlbmRsOwotICAgICAgICAgICAgICAgIHBy
ZSA9IGZhbHNlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBzd2l0Y2goIHRhZ0lEICkg
ewotICAgICAgICAgICAgY2FzZSBJRF9QUkU6CisgICAgICAgICAgICBpZiAodGFnTmFtZSA9PSBI
VE1MTmFtZXM6OnByZSgpKSB7CiAgICAgICAgICAgICAgICAgcHJlUG9zID0gMDsKICAgICAgICAg
ICAgICAgICBwcmUgPSBiZWdpblRhZzsKICAgICAgICAgICAgICAgICBkaXNjYXJkID0gTEZEaXNj
YXJkOyAvLyBEaXNjYXJkIHRoZSBmaXJzdCBMRiBhZnRlciB3ZSBvcGVuIGEgcHJlLgotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBJRF9TQ1JJUFQ6CisgICAgICAgICAg
ICB9IGVsc2UgaWYgKHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpzY3JpcHQoKSkgewogICAgICAgICAg
ICAgICAgIGlmIChiZWdpblRhZykgewogICAgICAgICAgICAgICAgICAgICBzZWFyY2hTdG9wcGVy
ID0gc2NyaXB0RW5kOwogICAgICAgICAgICAgICAgICAgICBzZWFyY2hTdG9wcGVyTGVuID0gODsK
ICAgICAgICAgICAgICAgICAgICAgc2NyaXB0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAg
cGFyc2VTcGVjaWFsKHNyYyk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVs
c2UgaWYgKHRhZ0lEIDw9IElEX0NMT1NFX1RBRykgeyAvLyBIYW5kbGUgPHNjcmlwdCBzcmM9ImZv
byIvPgotICAgICAgICAgICAgICAgICAgICBzY3JpcHQgPSB0cnVlOwotICAgICAgICAgICAgICAg
ICAgICBzY3JpcHRIYW5kbGVyKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBJRF9TVFlMRToKKyAgICAgICAgICAgIH0gZWxzZSBp
ZiAodGFnTmFtZSA9PSBIVE1MTmFtZXM6OnN0eWxlKCkpIHsKICAgICAgICAgICAgICAgICBpZiAo
YmVnaW5UYWcpIHsKICAgICAgICAgICAgICAgICAgICAgc2VhcmNoU3RvcHBlciA9IHN0eWxlRW5k
OwogICAgICAgICAgICAgICAgICAgICBzZWFyY2hTdG9wcGVyTGVuID0gNzsKICAgICAgICAgICAg
ICAgICAgICAgc3R5bGUgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBwYXJzZVNwZWNpYWwo
c3JjKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICBjYXNlIElEX1RFWFRBUkVBOgorICAgICAgICAgICAgfSBlbHNlIGlmICh0YWdOYW1lID09
IEhUTUxOYW1lczo6dGV4dGFyZWEoKSkgewogICAgICAgICAgICAgICAgIGlmKGJlZ2luVGFnKSB7
CiAgICAgICAgICAgICAgICAgICAgIHNlYXJjaFN0b3BwZXIgPSB0ZXh0YXJlYUVuZDsKICAgICAg
ICAgICAgICAgICAgICAgc2VhcmNoU3RvcHBlckxlbiA9IDEwOwogICAgICAgICAgICAgICAgICAg
ICB0ZXh0YXJlYSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIHBhcnNlU3BlY2lhbChzcmMp
OwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IGNhc2UgSURfVElUTEU6Ci0gICAgICAgICAgICAgICAgaWYgKGJlZ2luVGFnKSB7CisgICAgICAg
ICAgICB9IGVsc2UgaWYgKHRhZ05hbWUgPT0gSFRNTE5hbWVzOjp0aXRsZSgpKSB7CisgICAgICAg
ICAgICAgICAgIGlmIChiZWdpblRhZykgewogICAgICAgICAgICAgICAgICAgICBzZWFyY2hTdG9w
cGVyID0gdGl0bGVFbmQ7CiAgICAgICAgICAgICAgICAgICAgIHNlYXJjaFN0b3BwZXJMZW4gPSA3
OwogICAgICAgICAgICAgICAgICAgICB0aXRsZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAg
IHBhcnNlU3BlY2lhbChzcmMpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGNhc2UgSURfWE1QOgorICAgICAgICAgICAgfSBlbHNlIGlmICh0
YWdOYW1lID09IEhUTUxOYW1lczo6eG1wKCkpIHsKICAgICAgICAgICAgICAgICBpZiAoYmVnaW5U
YWcpIHsKICAgICAgICAgICAgICAgICAgICAgc2VhcmNoU3RvcHBlciA9IHhtcEVuZDsKICAgICAg
ICAgICAgICAgICAgICAgc2VhcmNoU3RvcHBlckxlbiA9IDU7CiAgICAgICAgICAgICAgICAgICAg
IHhtcCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIHBhcnNlU3BlY2lhbChzcmMpOwogICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2Ug
SURfU0VMRUNUOgorICAgICAgICAgICAgfSBlbHNlIGlmICh0YWdOYW1lID09IEhUTUxOYW1lczo6
c2VsZWN0KCkpCiAgICAgICAgICAgICAgICAgc2VsZWN0ID0gYmVnaW5UYWc7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIElEX1BMQUlOVEVYVDoKKyAgICAgICAgICAg
IGVsc2UgaWYgKHRhZ05hbWUgPT0gSFRNTE5hbWVzOjpwbGFpbnRleHQoKSkKICAgICAgICAgICAg
ICAgICBwbGFpbnRleHQgPSBiZWdpblRhZzsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIH0KLQogICAgICAgICAgICAgcmV0dXJuOyAvLyBGaW5pc2hlZCBwYXJzaW5nIHRhZyEK
ICAgICAgICAgfQogICAgICAgICB9IC8vIGVuZCBzd2l0Y2gKQEAgLTE5ODksMTAgKzE5NTAsMTAg
QEAgdm9pZCBIVE1MVG9rZW5pemVyOjpwcm9jZXNzVG9rZW4oKQogI2VuZGlmCiAgICAgICAgIGN1
cnJUb2tlbi50ZXh0ID0gbmV3IERPTVN0cmluZ0ltcGwoIGJ1ZmZlciwgZGVzdCAtIGJ1ZmZlciAp
OwogICAgICAgICBjdXJyVG9rZW4udGV4dC0+cmVmKCk7Ci0gICAgICAgIGlmIChjdXJyVG9rZW4u
aWQgIT0gSURfQ09NTUVOVCkKLSAgICAgICAgICAgIGN1cnJUb2tlbi5pZCA9IElEX1RFWFQ7Cisg
ICAgICAgIGlmIChjdXJyVG9rZW4udGFnTmFtZSAhPSBjb21tZW50QXRvbSkKKyAgICAgICAgICAg
IGN1cnJUb2tlbi50YWdOYW1lID0gdGV4dEF0b207CiAgICAgfQotICAgIGVsc2UgaWYoIWN1cnJU
b2tlbi5pZCkgeworICAgIGVsc2UgaWYgKGN1cnJUb2tlbi50YWdOYW1lID09IG51bGxBdG9tKSB7
CiAgICAgICAgIGN1cnJUb2tlbi5yZXNldCgpOwogICAgICAgICBpZiAoanNQcm94eSkKICAgICAg
ICAgICAgIGpzUHJveHktPnNldEV2ZW50SGFuZGxlckxpbmVubyhsaW5lbm8rc3JjLmxpbmVDb3Vu
dCgpKTsKSW5kZXg6IGtodG1sL2h0bWwvaHRtbHRva2VuaXplci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbHRva2VuaXplci5oLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjM2CmRpZmYgLXUgLXAgLXIxLjM2IGtodG1sL2h0bWwvaHRtbHRva2Vu
aXplci5oCi0tLSBraHRtbC9odG1sL2h0bWx0b2tlbml6ZXIuaAk1IEp1bCAyMDA1IDIzOjIxOjEw
IC0wMDAwCTEuMzYKKysrIGtodG1sL2h0bWwvaHRtbHRva2VuaXplci5oCTkgSnVsIDIwMDUgMDI6
NDM6MTEgLTAwMDAKQEAgLTM0LDggKzM0LDYgQEAKICNpbmNsdWRlIDxxcHRycXVldWUuaD4KIAog
I2luY2x1ZGUgIm1pc2MvbG9hZGVyX2NsaWVudC5oIgotI2luY2x1ZGUgIm1pc2MvaHRtbHRhZ3Mu
aCIKLSNpbmNsdWRlICJ4bWwvZG9tX3N0cmluZ2ltcGwuaCIKICNpbmNsdWRlICJ4bWwveG1sX3Rv
a2VuaXplci5oIgogI2luY2x1ZGUgImh0bWwvaHRtbF9lbGVtZW50aW1wbC5oIgogI2luY2x1ZGUg
InhtbC9kb21fZG9jaW1wbC5oIgpAQCAtNDcsNyArNDUsNyBAQAogI2VuZGlmCiAKIGNsYXNzIEtD
aGFyc2V0czsKLWNsYXNzIEtIVE1MUGFyc2VyOworY2xhc3MgSFRNTFBhcnNlcjsKIGNsYXNzIEtI
VE1MVmlldzsKIAogbmFtZXNwYWNlIERPTSB7CkBAIC03MCwyMiArNjgsMjQgQEAgY2xhc3MgVG9r
ZW4KIHsKIHB1YmxpYzoKICAgICBUb2tlbigpIHsKLSAgICAgICAgaWQgPSAwOwogICAgICAgICBh
dHRycyA9IDA7CiAgICAgICAgIHRleHQgPSAwOworICAgICAgICBiZWdpblRhZyA9IHRydWU7CiAg
ICAgICAgIGZsYXQgPSBmYWxzZTsKICAgICAgICAgLy9xRGVidWcoIm5ldyB0b2tlbiwgY3JlYXRp
bmcgJTA4bHgiLCBhdHRycyk7CiAgICAgfQorCiAgICAgflRva2VuKCkgewotICAgICAgICBpZihh
dHRycykgYXR0cnMtPmRlcmVmKCk7Ci0gICAgICAgIGlmKHRleHQpIHRleHQtPmRlcmVmKCk7Cisg
ICAgICAgIGlmIChhdHRycykgYXR0cnMtPmRlcmVmKCk7CisgICAgICAgIGlmICh0ZXh0KSB0ZXh0
LT5kZXJlZigpOwogICAgIH0KKwogICAgIHZvaWQgYWRkQXR0cmlidXRlKERPTTo6RG9jdW1lbnRJ
bXBsKiBkb2MsIFFDaGFyKiBidWZmZXIsIGNvbnN0IFFTdHJpbmcmIGF0dHJOYW1lLCBjb25zdCBE
T006OkF0b21pY1N0cmluZyYgdikKICAgICB7CiAgICAgICAgIERPTTo6QXR0cmlidXRlSW1wbCog
YSA9IDA7Ci0gICAgICAgIGlmKGJ1ZmZlci0+dW5pY29kZSgpKQorICAgICAgICBpZiAoYnVmZmVy
LT51bmljb2RlKCkpCiAgICAgICAgICAgICBhID0gbmV3IERPTTo6TWFwcGVkQXR0cmlidXRlSW1w
bChidWZmZXItPnVuaWNvZGUoKSwgdik7Ci0gICAgICAgIGVsc2UgaWYgKCAhYXR0ck5hbWUuaXNF
bXB0eSgpICYmIGF0dHJOYW1lICE9ICIvIiApCisgICAgICAgIGVsc2UgaWYgKCFhdHRyTmFtZS5p
c0VtcHR5KCkgJiYgYXR0ck5hbWUgIT0gIi8iKQogICAgICAgICAgICAgYSA9IG5ldyBET006Ok1h
cHBlZEF0dHJpYnV0ZUltcGwoZG9jLT5hdHRySWQoMCwgRE9NOjpET01TdHJpbmcoYXR0ck5hbWUp
LmltcGxlbWVudGF0aW9uKCksIGZhbHNlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHYpOwogCkBAIC05NywyMyArOTcsMzMgQEAgcHVibGljOgogICAgICAg
ICAgICAgYXR0cnMtPmluc2VydEF0dHJpYnV0ZShhKTsKICAgICAgICAgfQogICAgIH0KKworICAg
IGJvb2wgaXNPcGVuVGFnKGNvbnN0IERPTTo6UXVhbGlmaWVkTmFtZSYgZnVsbE5hbWUpIGNvbnN0
IHsgcmV0dXJuIGJlZ2luVGFnICYmIGZ1bGxOYW1lLmxvY2FsTmFtZSgpID09IHRhZ05hbWU7IH0K
KyAgICBib29sIGlzQ2xvc2VUYWcoY29uc3QgRE9NOjpRdWFsaWZpZWROYW1lJiBmdWxsTmFtZSkg
Y29uc3QgeyByZXR1cm4gIWJlZ2luVGFnICYmIGZ1bGxOYW1lLmxvY2FsTmFtZSgpID09IHRhZ05h
bWU7IH0KKwogICAgIHZvaWQgcmVzZXQoKQogICAgIHsKLSAgICAgICAgaWYoYXR0cnMpIHsKKyAg
ICAgICAgaWYgKGF0dHJzKSB7CiAgICAgICAgICAgICBhdHRycy0+ZGVyZWYoKTsKICAgICAgICAg
ICAgIGF0dHJzID0gMDsKICAgICAgICAgfQotICAgICAgICBpZCA9IDA7Ci0gICAgICAgIGlmKHRl
eHQpIHsKKyAgICAgICAgCisgICAgICAgIHRhZ05hbWUgPSBET006Om51bGxBdG9tOworICAgICAg
ICAKKyAgICAgICAgaWYgKHRleHQpIHsKICAgICAgICAgICAgIHRleHQtPmRlcmVmKCk7CiAgICAg
ICAgICAgICB0ZXh0ID0gMDsKICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYmVnaW5UYWcg
PSB0cnVlOwogICAgICAgICBmbGF0ID0gZmFsc2U7CiAgICAgfQorCiAgICAgRE9NOjpOYW1lZE1h
cHBlZEF0dHJNYXBJbXBsKiBhdHRyczsKICAgICBET006OkRPTVN0cmluZ0ltcGwqIHRleHQ7Ci0g
ICAgdXNob3J0IGlkOwotICAgIGJvb2wgZmxhdDsKKyAgICBET006OkF0b21pY1N0cmluZyB0YWdO
YW1lOworICAgIGJvb2wgYmVnaW5UYWcgOiAxOworICAgIGJvb2wgZmxhdCA6IDE7CiB9OwogCiAv
LyBUaGUgY291bnQgb2Ygc3BhY2VzIHVzZWQgZm9yIGVhY2ggdGFiLgpAQCAtMzY4LDcgKzM3OCw3
IEBAIHByb3RlY3RlZDoKICAgICBUb2tlbml6ZXJTdHJpbmcgc3JjOwogCiAgICAgS0NoYXJzZXRz
ICpjaGFyc2V0czsKLSAgICBLSFRNTFBhcnNlciAqcGFyc2VyOworICAgIEhUTUxQYXJzZXIgKnBh
cnNlcjsKIAogICAgIFFHdWFyZGVkUHRyPEtIVE1MVmlldz4gdmlldzsKICAgICAKSW5kZXg6IGto
dG1sL21pc2MvZGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNv
cmUva2h0bWwvbWlzYy9kZWNvZGVyLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zNQpkaWZm
IC11IC1wIC1yMS4zNSBraHRtbC9taXNjL2RlY29kZXIuY3BwCi0tLSBraHRtbC9taXNjL2RlY29k
ZXIuY3BwCTI4IEp1biAyMDA1IDE4OjQ3OjEyIC0wMDAwCTEuMzUKKysrIGtodG1sL21pc2MvZGVj
b2Rlci5jcHAJOSBKdWwgMjAwNSAwMjo0MzoxMyAtMDAwMApAQCAtNDEsNiArNDEsMTIgQEAgdXNp
bmcgbmFtZXNwYWNlIGtodG1sOwogI2luY2x1ZGUgPGtkZWJ1Zy5oPgogI2luY2x1ZGUgPGtsb2Nh
bGUuaD4KIAorI2luY2x1ZGUgImh0bWxuYW1lcy5oIgorCit1c2luZyBET006OkF0b21pY1N0cmlu
ZzsKK3VzaW5nIERPTTo6SFRNTE5hbWVzOwordXNpbmcgRE9NOjpudWxsQXRvbTsKKwogY2xhc3Mg
S2FuamlDb2RlCiB7CiBwdWJsaWM6CkBAIC01MjYsMTIgKzUzMiw4IEBAIFFTdHJpbmcgRGVjb2Rl
cjo6ZGVjb2RlKGNvbnN0IGNoYXIgKmRhdGEKICAgICAgICAgICAgICAgICAgICAgICAgIGxlbisr
OwogICAgICAgICAgICAgICAgICAgICB9CiAJCSAgICB0bXBbbGVuXSA9IDA7Ci0gICAgICAgICAg
ICAgICAgICAgIGludCBpZCA9IGtodG1sOjpnZXRUYWdJRCh0bXAsIGxlbik7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmKGVuZCkgaWQgKz0gSURfQ0xPU0VfVEFHOwotCi0gICAgICAgICAgICAgICAg
ICAgIHN3aXRjaCggaWQgKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfTUVUQToKLSAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBBdG9taWNTdHJpbmcgdGFn
KHRtcCk7CisgICAgICAgICAgICAgICAgICAgIGlmICghZW5kICYmIHRhZyA9PSBIVE1MTmFtZXM6
Om1ldGEoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm91bmQgYSBtZXRhIHRhZy4u
LgogICAgICAgICAgICAgICAgICAgICAgICAgLy9wdHIgKz0gNTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGNoYXIgKiBlbmQgPSBwdHI7CkBAIC01NzAsMjggKzU3MiwxMSBAQCBRU3Ry
aW5nIERlY29kZXI6OmRlY29kZShjb25zdCBjaGFyICpkYXRhCiAKIAkJCSAgICBwb3MgPSBlbmRw
b3MgKyAxOwogCQkJfQotCQkgICAgfQotICAgICAgICAgICAgICAgICAgICBjYXNlIChJRF9NRVRB
K0lEX0NMT1NFX1RBRyk6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfU0NSSVBUOgotICAg
ICAgICAgICAgICAgICAgICBjYXNlIChJRF9TQ1JJUFQrSURfQ0xPU0VfVEFHKToKLSAgICAgICAg
ICAgICAgICAgICAgY2FzZSBJRF9OT1NDUklQVDoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAo
SURfTk9TQ1JJUFQrSURfQ0xPU0VfVEFHKToKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9T
VFlMRToKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAoSURfU1RZTEUrSURfQ0xPU0VfVEFHKToK
LSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9MSU5LOgotICAgICAgICAgICAgICAgICAgICBj
YXNlIChJRF9MSU5LK0lEX0NMT1NFX1RBRyk6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURf
T0JKRUNUOgotICAgICAgICAgICAgICAgICAgICBjYXNlIChJRF9PQkpFQ1QrSURfQ0xPU0VfVEFH
KToKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9USVRMRToKLSAgICAgICAgICAgICAgICAg
ICAgY2FzZSAoSURfVElUTEUrSURfQ0xPU0VfVEFHKToKLSAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBJRF9CQVNFOgotICAgICAgICAgICAgICAgICAgICBjYXNlIChJRF9CQVNFK0lEX0NMT1NFX1RB
Ryk6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfSFRNTDoKLSAgICAgICAgICAgICAgICAg
ICAgY2FzZSBJRF9IRUFEOgotICAgICAgICAgICAgICAgICAgICBjYXNlIDA6Ci0gICAgICAgICAg
ICAgICAgICAgIGNhc2UgKDAgKyBJRF9DTE9TRV9UQUcgKToKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorCQkgICAgfSBlbHNlIGlm
ICh0YWcgIT0gSFRNTE5hbWVzOjpzY3JpcHQoKSAmJiB0YWcgIT0gSFRNTE5hbWVzOjpub3Njcmlw
dCgpICYmIHRhZyAhPSBIVE1MTmFtZXM6OnN0eWxlKCkgJiYKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0YWcgIT0gSFRNTE5hbWVzOjpsaW5rKCkgJiYgdGFnICE9IEhUTUxOYW1lczo6
bWV0YSgpICYmIHRhZyAhPSBIVE1MTmFtZXM6Om9iamVjdCgpICYmCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdGFnICE9IEhUTUxOYW1lczo6dGl0bGUoKSAmJiB0YWcgIT0gSFRNTE5h
bWVzOjpiYXNlKCkgJiYgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVuZCB8fCB0
YWcgIT0gSFRNTE5hbWVzOjpodG1sKCkpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKGVuZCB8fCB0YWcgIT0gSFRNTE5hbWVzOjpoZWFkKCkpICYmIGlzYWxwaGEodG1wWzBdKSkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgYm9keSA9IHRydWU7CiAjaWZkZWYgREVDT0RFX0RF
QlVHCiAJCQlrZERlYnVnKCA2MDA1ICkgPDwgIkRlY29kZXI6IG5vIGNoYXJzZXQgZm91bmQuIElk
PSIgPDwgaWQgPDwgZW5kbDsKSW5kZXg6IGtodG1sL21pc2MvaGFzaG1hcC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
UkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL21pc2MvaGFzaG1hcC5oLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjEKZGlmZiAtdSAtcCAtcjEuMSBraHRtbC9taXNjL2hhc2htYXAuaAot
LS0ga2h0bWwvbWlzYy9oYXNobWFwLmgJNiBKdWwgMjAwNSAwMToyODo0MiAtMDAwMAkxLjEKKysr
IGtodG1sL21pc2MvaGFzaG1hcC5oCTkgSnVsIDIwMDUgMDI6NDM6MTMgLTAwMDAKQEAgLTc1LDkg
Kzc1LDkgQEAgY2xhc3MgSGFzaE1hcCB7CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5
cGVuYW1lIE1hcHBlZCwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgS2V5VHJhaXRz
LCB0eXBlbmFtZSBNYXBwZWRUcmFpdHM+Ci1pbnQgSGFzaE1hcDxLZXksIE1hcHBlZCwgSGFzaEZ1
bmN0aW9ucywgS2V5VHJhaXRzLCBNYXBwZWRUcmFpdHM+OjpzaXplKCkgY29uc3QKK2lubGluZSBp
bnQgSGFzaE1hcDxLZXksIE1hcHBlZCwgSGFzaEZ1bmN0aW9ucywgS2V5VHJhaXRzLCBNYXBwZWRU
cmFpdHM+OjpzaXplKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9pbXBsLmNvdW50KCk7IAorICAg
IHJldHVybiBtX2ltcGwuc2l6ZSgpOyAKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBl
bmFtZSBNYXBwZWQsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIEtleVRyYWl0cywg
dHlwZW5hbWUgTWFwcGVkVHJhaXRzPgpAQCAtODcsMzEgKzg3LDMxIEBAIGludCBIYXNoTWFwPEtl
eSwgTWFwcGVkLCBIYXNoRnVuY3Rpb25zLCAKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0
eXBlbmFtZSBNYXBwZWQsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIEtleVRyYWl0
cywgdHlwZW5hbWUgTWFwcGVkVHJhaXRzPgotYm9vbCBIYXNoTWFwPEtleSwgTWFwcGVkLCBIYXNo
RnVuY3Rpb25zLCBLZXlUcmFpdHMsIE1hcHBlZFRyYWl0cz46OmlzRW1wdHkoKSBjb25zdAoraW5s
aW5lIGJvb2wgSGFzaE1hcDxLZXksIE1hcHBlZCwgSGFzaEZ1bmN0aW9ucywgS2V5VHJhaXRzLCBN
YXBwZWRUcmFpdHM+Ojppc0VtcHR5KCkgY29uc3QKIHsKICAgICByZXR1cm4gc2l6ZSgpID09IDA7
CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgTWFwcGVkLCB0eXBlbmFtZSBI
YXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIE1hcHBlZFRyYWl0cz4K
LXR5cGVuYW1lIEhhc2hNYXA8S2V5LCBNYXBwZWQsIEhhc2hGdW5jdGlvbnMsIEtleVRyYWl0cywg
TWFwcGVkVHJhaXRzPjo6aXRlcmF0b3IgSGFzaE1hcDxLZXksIE1hcHBlZCwgSGFzaEZ1bmN0aW9u
cywgS2V5VHJhaXRzLCBNYXBwZWRUcmFpdHM+OjpiZWdpbigpCitpbmxpbmUgdHlwZW5hbWUgSGFz
aE1hcDxLZXksIE1hcHBlZCwgSGFzaEZ1bmN0aW9ucywgS2V5VHJhaXRzLCBNYXBwZWRUcmFpdHM+
OjppdGVyYXRvciBIYXNoTWFwPEtleSwgTWFwcGVkLCBIYXNoRnVuY3Rpb25zLCBLZXlUcmFpdHMs
IE1hcHBlZFRyYWl0cz46OmJlZ2luKCkKIHsKICAgICByZXR1cm4gbV9pbXBsLmJlZ2luKCk7CiB9
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgTWFwcGVkLCB0eXBlbmFtZSBIYXNo
RnVuY3Rpb25zLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIE1hcHBlZFRyYWl0cz4KLXR5
cGVuYW1lIEhhc2hNYXA8S2V5LCBNYXBwZWQsIEhhc2hGdW5jdGlvbnMsIEtleVRyYWl0cywgTWFw
cGVkVHJhaXRzPjo6aXRlcmF0b3IgSGFzaE1hcDxLZXksIE1hcHBlZCwgSGFzaEZ1bmN0aW9ucywg
S2V5VHJhaXRzLCBNYXBwZWRUcmFpdHM+OjplbmQoKQoraW5saW5lIHR5cGVuYW1lIEhhc2hNYXA8
S2V5LCBNYXBwZWQsIEhhc2hGdW5jdGlvbnMsIEtleVRyYWl0cywgTWFwcGVkVHJhaXRzPjo6aXRl
cmF0b3IgSGFzaE1hcDxLZXksIE1hcHBlZCwgSGFzaEZ1bmN0aW9ucywgS2V5VHJhaXRzLCBNYXBw
ZWRUcmFpdHM+OjplbmQoKQogewogICAgIHJldHVybiBtX2ltcGwuZW5kKCk7CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgTWFwcGVkLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25z
LCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIE1hcHBlZFRyYWl0cz4KLXR5cGVuYW1lIEhh
c2hNYXA8S2V5LCBNYXBwZWQsIEhhc2hGdW5jdGlvbnMsIEtleVRyYWl0cywgTWFwcGVkVHJhaXRz
Pjo6Y29uc3RfaXRlcmF0b3IgSGFzaE1hcDxLZXksIE1hcHBlZCwgSGFzaEZ1bmN0aW9ucywgS2V5
VHJhaXRzLCBNYXBwZWRUcmFpdHM+OjpiZWdpbigpIGNvbnN0CitpbmxpbmUgdHlwZW5hbWUgSGFz
aE1hcDxLZXksIE1hcHBlZCwgSGFzaEZ1bmN0aW9ucywgS2V5VHJhaXRzLCBNYXBwZWRUcmFpdHM+
Ojpjb25zdF9pdGVyYXRvciBIYXNoTWFwPEtleSwgTWFwcGVkLCBIYXNoRnVuY3Rpb25zLCBLZXlU
cmFpdHMsIE1hcHBlZFRyYWl0cz46OmJlZ2luKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9pbXBs
LmJlZ2luKCk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgTWFwcGVkLCB0
eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBLZXlUcmFpdHMsIHR5cGVuYW1lIE1hcHBl
ZFRyYWl0cz4KLXR5cGVuYW1lIEhhc2hNYXA8S2V5LCBNYXBwZWQsIEhhc2hGdW5jdGlvbnMsIEtl
eVRyYWl0cywgTWFwcGVkVHJhaXRzPjo6Y29uc3RfaXRlcmF0b3IgSGFzaE1hcDxLZXksIE1hcHBl
ZCwgSGFzaEZ1bmN0aW9ucywgS2V5VHJhaXRzLCBNYXBwZWRUcmFpdHM+OjplbmQoKSBjb25zdAor
aW5saW5lIHR5cGVuYW1lIEhhc2hNYXA8S2V5LCBNYXBwZWQsIEhhc2hGdW5jdGlvbnMsIEtleVRy
YWl0cywgTWFwcGVkVHJhaXRzPjo6Y29uc3RfaXRlcmF0b3IgSGFzaE1hcDxLZXksIE1hcHBlZCwg
SGFzaEZ1bmN0aW9ucywgS2V5VHJhaXRzLCBNYXBwZWRUcmFpdHM+OjplbmQoKSBjb25zdAogewog
ICAgIHJldHVybiBtX2ltcGwuZW5kKCk7CiB9CkBAIC0xNDgsNyArMTQ4LDcgQEAgc3RkOjpwYWly
PHR5cGVuYW1lIEhhc2hNYXA8S2V5LCBNYXBwZWQsIAogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBL
ZXksIHR5cGVuYW1lIE1hcHBlZCwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgS2V5
VHJhaXRzLCB0eXBlbmFtZSBNYXBwZWRUcmFpdHM+Ci1NYXBwZWQgSGFzaE1hcDxLZXksIE1hcHBl
ZCwgSGFzaEZ1bmN0aW9ucywgS2V5VHJhaXRzLCBNYXBwZWRUcmFpdHM+OjpnZXQoY29uc3QgS2V5
VHlwZSAma2V5KSBjb25zdAoraW5saW5lIE1hcHBlZCBIYXNoTWFwPEtleSwgTWFwcGVkLCBIYXNo
RnVuY3Rpb25zLCBLZXlUcmFpdHMsIE1hcHBlZFRyYWl0cz46OmdldChjb25zdCBLZXlUeXBlICZr
ZXkpIGNvbnN0CiB7CiAgICAgY29uc3RfaXRlcmF0b3IgaXQgPSBmaW5kKGtleSk7CiAgICAgaWYg
KGl0ID09IGVuZCgpKQpJbmRleDoga2h0bWwvbWlzYy9oYXNoc2V0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvbWlzYy9oYXNoc2V0LmgsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuNQpkaWZmIC11IC1wIC1yMS41IGtodG1sL21pc2MvaGFzaHNldC5oCi0tLSBr
aHRtbC9taXNjL2hhc2hzZXQuaAk3IEp1bCAyMDA1IDA1OjQyOjI2IC0wMDAwCTEuNQorKysga2h0
bWwvbWlzYy9oYXNoc2V0LmgJOSBKdWwgMjAwNSAwMjo0MzoxMyAtMDAwMApAQCAtODIsNyArODIs
NyBAQCBjbGFzcyBIYXNoU2V0IHsKIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBl
bmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHM+Ci1pbnQgSGFzaFNldDxWYWx1ZSwg
SGFzaEZ1bmN0aW9ucywgVHJhaXRzPjo6c2l6ZSgpIGNvbnN0CitpbmxpbmUgaW50IEhhc2hTZXQ8
VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46OnNpemUoKSBjb25zdAogewogICAgIHJldHVy
biBtX2ltcGwuc2l6ZSgpOyAKIH0KQEAgLTk0LDMxICs5NCwzMSBAQCBpbnQgSGFzaFNldDxWYWx1
ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0
eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHM+Ci1ib29sIEhhc2hTZXQ8VmFs
dWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46OmlzRW1wdHkoKSBjb25zdAoraW5saW5lIGJvb2wg
SGFzaFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzPjo6aXNFbXB0eSgpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIHNpemUoKSA9PSAwOyAKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUs
IHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cz4KLXR5cGVuYW1lIEhhc2hT
ZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46Oml0ZXJhdG9yIEhhc2hTZXQ8VmFsdWUs
IEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46OmJlZ2luKCkKK2lubGluZSB0eXBlbmFtZSBIYXNoU2V0
PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHM+OjppdGVyYXRvciBIYXNoU2V0PFZhbHVlLCBI
YXNoRnVuY3Rpb25zLCBUcmFpdHM+OjpiZWdpbigpCiB7CiAgICAgcmV0dXJuIG1faW1wbC5iZWdp
bigpOyAKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hGdW5jdGlv
bnMsIHR5cGVuYW1lIFRyYWl0cz4KLXR5cGVuYW1lIEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlv
bnMsIFRyYWl0cz46Oml0ZXJhdG9yIEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0
cz46OmVuZCgpCitpbmxpbmUgdHlwZW5hbWUgSGFzaFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywg
VHJhaXRzPjo6aXRlcmF0b3IgSGFzaFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzPjo6
ZW5kKCkKIHsKICAgICByZXR1cm4gbV9pbXBsLmVuZCgpOyAKIH0KIAogdGVtcGxhdGU8dHlwZW5h
bWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cz4KLXR5cGVu
YW1lIEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46OmNvbnN0X2l0ZXJhdG9y
IEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46OmJlZ2luKCkgY29uc3QKK2lu
bGluZSB0eXBlbmFtZSBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHM+Ojpjb25z
dF9pdGVyYXRvciBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHM+OjpiZWdpbigp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIG1faW1wbC5iZWdpbigpOyAKIH0KIAogdGVtcGxhdGU8dHlw
ZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cz4KLXR5
cGVuYW1lIEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46OmNvbnN0X2l0ZXJh
dG9yIEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46OmVuZCgpIGNvbnN0Citp
bmxpbmUgdHlwZW5hbWUgSGFzaFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzPjo6Y29u
c3RfaXRlcmF0b3IgSGFzaFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzPjo6ZW5kKCkg
Y29uc3QKIHsKICAgICByZXR1cm4gbV9pbXBsLmVuZCgpOyAKIH0KQEAgLTEzNiw3ICsxMzYsNyBA
QCB0eXBlbmFtZSBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUCiB9CiAKIHRlbXBsYXRl
PHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHM+
Ci1ib29sIEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46OmNvbnRhaW5zKGNv
bnN0IFZhbHVlVHlwZSYgdmFsdWUpIGNvbnN0CitpbmxpbmUgYm9vbCBIYXNoU2V0PFZhbHVlLCBI
YXNoRnVuY3Rpb25zLCBUcmFpdHM+Ojpjb250YWlucyhjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKSBj
b25zdAogewogICAgIHJldHVybiBtX2ltcGwuY29udGFpbnModmFsdWUpOyAKIH0KSW5kZXg6IGto
dG1sL21pc2MvaGFzaHRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNv
cmUva2h0bWwvbWlzYy9oYXNodGFibGUuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS43CmRpZmYg
LXUgLXAgLXIxLjcga2h0bWwvbWlzYy9oYXNodGFibGUuaAotLS0ga2h0bWwvbWlzYy9oYXNodGFi
bGUuaAk4IEp1bCAyMDA1IDA1OjE5OjIwIC0wMDAwCTEuNworKysga2h0bWwvbWlzYy9oYXNodGFi
bGUuaAk5IEp1bCAyMDA1IDAyOjQzOjEzIC0wMDAwCkBAIC0yOCw3ICsyOCw3IEBACiAKIG5hbWVz
cGFjZSBraHRtbCB7CiAKLSNkZWZpbmUgRFVNUF9IQVNIVEFCTEVfU1RBVFMgMQorI2RlZmluZSBE
VU1QX0hBU0hUQUJMRV9TVEFUUyAwCiAjZGVmaW5lIENIRUNLX0hBU0hUQUJMRV9DT05TSVNURU5D
WSAwCiAKICNpZiBEVU1QX0hBU0hUQUJMRV9TVEFUUwpAQCAtNjYsNiArNjYsMTMgQEAgY2xhc3Mg
SGFzaFRhYmxlSXRlcmF0b3IgewogCiAgICAgZnJpZW5kIGNsYXNzIEhhc2hUYWJsZTxLZXksIFZh
bHVlLCBFeHRyYWN0S2V5LCBIYXNoRnVuY3Rpb25zLCBUcmFpdHM+OwogICAgIAorICAgIHZvaWQg
c2tpcEVtcHR5QnVja2V0cygpIAorICAgIHsKKyAgICAgICAgd2hpbGUgKG1fcG9zaXRpb24gIT0g
bV9lbmRQb3NpdGlvbiAmJiAoSGFzaFRhYmxlVHlwZTo6aXNFbXB0eU9yRGVsZXRlZEJ1Y2tldCgq
bV9wb3NpdGlvbikpKSB7CisgICAgICAgICAgICArK21fcG9zaXRpb247CisgICAgICAgIH0KKyAg
ICB9CisKICAgICBIYXNoVGFibGVJdGVyYXRvcihQb2ludGVyVHlwZSBwb3NpdGlvbiwgUG9pbnRl
clR5cGUgZW5kUG9zaXRpb24pIAogICAgICAgICA6IG1fcG9zaXRpb24ocG9zaXRpb24pLCBtX2Vu
ZFBvc2l0aW9uKGVuZFBvc2l0aW9uKSAKICAgICB7IApAQCAtOTksMTQgKzEwNiw3IEBAIGNsYXNz
IEhhc2hUYWJsZUl0ZXJhdG9yIHsKICAgICAgICAgcmV0dXJuIG1fcG9zaXRpb24gIT0gb3RoZXIu
bV9wb3NpdGlvbjsgCiAgICAgfQogCi1wcml2YXRlOgotICAgIHZvaWQgc2tpcEVtcHR5QnVja2V0
cygpIAotICAgIHsKLSAgICAgICAgd2hpbGUgKG1fcG9zaXRpb24gIT0gbV9lbmRQb3NpdGlvbiAm
JiAoSGFzaFRhYmxlVHlwZTo6aXNFbXB0eU9yRGVsZXRlZEJ1Y2tldCgqbV9wb3NpdGlvbikpKSB7
Ci0gICAgICAgICAgICArK21fcG9zaXRpb247Ci0gICAgICAgIH0KLSAgICB9Ci0KKyBwcml2YXRl
OgogICAgIFBvaW50ZXJUeXBlIG1fcG9zaXRpb247CiAgICAgUG9pbnRlclR5cGUgbV9lbmRQb3Np
dGlvbjsKIH07CkBAIC0yNzEsMTEgKzI3MSwxMSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5
cGVuYW1lIFZhbHVlLCBLCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBIYXNoVChjb25z
dCBUJiksIGJvb2wgRXF1YWxUKGNvbnN0IEtleSYsIGNvbnN0IFQmKT4KIGlubGluZSB0eXBlbmFt
ZSBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdEtleSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRz
Pjo6RnVsbExvb2t1cFR5cGUgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RLZXksIEhhc2hG
dW5jdGlvbnMsIFRyYWl0cz46Omxvb2t1cChjb25zdCBUJiBrZXkpCiB7Ci0gICAgaWYgKCFtX3Rh
YmxlKQotICAgICAgICByZXR1cm4gbWFrZUxvb2t1cFJlc3VsdCgwLCBmYWxzZSwgMCk7CisgICAg
YXNzZXJ0KG1fdGFibGUpOwogICAgIAogICAgIHVuc2lnbmVkIGggPSBIYXNoVChrZXkpOwotICAg
IGludCBpID0gaCAmIG1fdGFibGVTaXplTWFzazsKKyAgICBpbnQgc2l6ZU1hc2sgPSBtX3RhYmxl
U2l6ZU1hc2s7CisgICAgaW50IGkgPSBoICYgc2l6ZU1hc2s7CiAgICAgaW50IGsgPSAwOwogCiAj
aWYgRFVNUF9IQVNIVEFCTEVfU1RBVFMKQEAgLTI4Myw5ICsyODMsMTAgQEAgaW5saW5lIHR5cGVu
YW1lIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeAogICAgIGludCBwcm9iZUNvdW50ID0gMDsKICNl
bmRpZgogICAgIAorICAgIFZhbHVlVHlwZSAqdGFibGUgPSBtX3RhYmxlOwogICAgIFZhbHVlVHlw
ZSAqZW50cnk7CiAgICAgVmFsdWVUeXBlICpkZWxldGVkRW50cnkgPSAwOwotICAgIHdoaWxlICgh
aXNFbXB0eUJ1Y2tldCgqKGVudHJ5ID0gbV90YWJsZSArIGkpKSkgeworICAgIHdoaWxlICghaXNF
bXB0eUJ1Y2tldCgqKGVudHJ5ID0gdGFibGUgKyBpKSkpIHsKICAgICAgICAgaWYgKGlzRGVsZXRl
ZEJ1Y2tldCgqZW50cnkpKQogICAgICAgICAgICAgZGVsZXRlZEVudHJ5ID0gZW50cnk7CiAgICAg
ICAgIGVsc2UgaWYgKEVxdWFsVChleHRyYWN0S2V5KCplbnRyeSksIGtleSkpCkBAIC0yOTUsOCAr
Mjk2LDggQEAgaW5saW5lIHR5cGVuYW1lIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeAogICAgICAg
ICArK3Byb2JlQ291bnQ7CiAjZW5kaWYKICAgICAgICAgaWYgKGsgPT0gMCkKLSAgICAgICAgICAg
IGsgPSAxIHwgKGggJSBtX3RhYmxlU2l6ZU1hc2spOwotICAgICAgICBpID0gKGkgKyBrKSAmIG1f
dGFibGVTaXplTWFzazsKKyAgICAgICAgICAgIGsgPSAxIHwgKGggJSBzaXplTWFzayk7CisgICAg
ICAgIGkgPSAoaSArIGspICYgc2l6ZU1hc2s7CiAgICAgfQogCiAgICAgcmV0dXJuIG1ha2VMb29r
dXBSZXN1bHQoZGVsZXRlZEVudHJ5ID8gZGVsZXRlZEVudHJ5IDogZW50cnksIGZhbHNlLCBoKTsK
QEAgLTM1NSw2ICszNTYsOSBAQCBpbmxpbmUgdm9pZCBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0
cmFjCiB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCBLZXkgRXh0cmFjdEtl
eShjb25zdCBWYWx1ZSAmKSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRz
PgogaW5saW5lIHR5cGVuYW1lIEhhc2hUYWJsZTxLZXksIFZhbHVlLCBFeHRyYWN0S2V5LCBIYXNo
RnVuY3Rpb25zLCBUcmFpdHM+OjppdGVyYXRvciBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFj
dEtleSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzPjo6ZmluZChjb25zdCBLZXkmIGtleSkKIHsKKyAg
ICBpZiAoIW1fdGFibGUpCisgICAgICAgIHJldHVybiBlbmQoKTsKKwogICAgIExvb2t1cFR5cGUg
cmVzdWx0ID0gbG9va3VwKGtleSk7CiAgICAgaWYgKCFyZXN1bHQuc2Vjb25kKQogICAgICAgICBy
ZXR1cm4gZW5kKCk7CkBAIC0zNjQsNiArMzY4LDkgQEAgaW5saW5lIHR5cGVuYW1lIEhhc2hUYWJs
ZTxLZXksIFZhbHVlLCBFeAogdGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwg
S2V5IEV4dHJhY3RLZXkoY29uc3QgVmFsdWUgJiksIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5
cGVuYW1lIFRyYWl0cz4KIGlubGluZSB0eXBlbmFtZSBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0
cmFjdEtleSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzPjo6Y29uc3RfaXRlcmF0b3IgSGFzaFRhYmxl
PEtleSwgVmFsdWUsIEV4dHJhY3RLZXksIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46OmZpbmQoY29u
c3QgS2V5JiBrZXkpIGNvbnN0CiB7CisgICAgaWYgKCFtX3RhYmxlKQorICAgICAgICByZXR1cm4g
ZW5kKCk7CisKICAgICBMb29rdXBUeXBlIHJlc3VsdCA9IGNvbnN0X2Nhc3Q8SGFzaFRhYmxlICo+
KHRoaXMpLT5sb29rdXAoa2V5KTsKICAgICBpZiAoIXJlc3VsdC5zZWNvbmQpCiAgICAgICAgIHJl
dHVybiBlbmQoKTsKQEAgLTM3Myw2ICszODAsOSBAQCBpbmxpbmUgdHlwZW5hbWUgSGFzaFRhYmxl
PEtleSwgVmFsdWUsIEV4CiB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCBL
ZXkgRXh0cmFjdEtleShjb25zdCBWYWx1ZSAmKSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlw
ZW5hbWUgVHJhaXRzPgogaW5saW5lIGJvb2wgSGFzaFRhYmxlPEtleSwgVmFsdWUsIEV4dHJhY3RL
ZXksIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46OmNvbnRhaW5zKGNvbnN0IEtleVR5cGUmIGtleSkg
Y29uc3QgCiB7CisgICAgaWYgKCFtX3RhYmxlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAg
ICByZXR1cm4gY29uc3RfY2FzdDxIYXNoVGFibGUgKj4odGhpcyktPmxvb2t1cChrZXkpLnNlY29u
ZDsKIH0KIApAQCAtMzk4LDYgKzQwOCw5IEBAIGlubGluZSB2b2lkIEhhc2hUYWJsZTxLZXksIFZh
bHVlLCBFeHRyYWMKIHRlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIEtleSBF
eHRyYWN0S2V5KGNvbnN0IFZhbHVlICYpLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFt
ZSBUcmFpdHM+CiBpbmxpbmUgdm9pZCBIYXNoVGFibGU8S2V5LCBWYWx1ZSwgRXh0cmFjdEtleSwg
SGFzaEZ1bmN0aW9ucywgVHJhaXRzPjo6cmVtb3ZlKGNvbnN0IEtleVR5cGUmIGtleSkKIHsgCisg
ICAgaWYgKCFtX3RhYmxlKQorICAgICAgICByZXR1cm47CisKICAgICByZW1vdmUobG9va3VwKGtl
eSkuZmlyc3QpOyAKIH0KIApJbmRleDoga2h0bWwvbWlzYy9odG1saGFzaGVzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9taXNjL2h0bWxoYXNoZXMuY3Bw
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEwCmRpZmYgLXUgLXAgLXIxLjEwIGtodG1sL21pc2Mv
aHRtbGhhc2hlcy5jcHAKLS0tIGtodG1sL21pc2MvaHRtbGhhc2hlcy5jcHAJNSBKYW4gMjAwNSAy
Mjo1Njo0NiAtMDAwMAkxLjEwCisrKyBraHRtbC9taXNjL2h0bWxoYXNoZXMuY3BwCTkgSnVsIDIw
MDUgMDI6NDM6MTMgLTAwMDAKQEAgLTI1LDIyICsyNSwxMyBAQAogLy8gdHVybiBvZmYgaW5saW5p
bmcgdG8gdm9pZCB3YXJuaW5nIHdpdGggbmV3ZXIgZ2NjCiAjdW5kZWYgX19pbmxpbmUKICNkZWZp
bmUgX19pbmxpbmUKLSNpbmNsdWRlICJodG1sdGFncy5jIgogI2luY2x1ZGUgImh0bWxhdHRycy5j
IgogI3VuZGVmIF9faW5saW5lCiAKLXVuc2lnbmVkIHNob3J0IGtodG1sOjpnZXRUYWdJRChjb25z
dCBjaGFyICp0YWdTdHIsIGludCBsZW4pCit1bnNpZ25lZCBzaG9ydCBraHRtbDo6Z2V0QXR0cklE
KGNvbnN0IGNoYXIgKmF0dHJTdHIsIGludCBsZW4pCiB7Ci0gICAgY29uc3Qgc3RydWN0IHRhZ3Mg
KnRhZ1B0ciA9IGZpbmRUYWcodGFnU3RyLCBsZW4pOwotICAgIGlmICghdGFnUHRyKQorICAgIGNv
bnN0IHN0cnVjdCBhdHRycyAqYXR0clB0ciA9IGZpbmRBdHRyKGF0dHJTdHIsIGxlbik7CisgICAg
aWYgKCFhdHRyUHRyKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gdGFnUHRyLT5pZDsK
LX0KLQotdW5zaWduZWQgc2hvcnQga2h0bWw6OmdldEF0dHJJRChjb25zdCBjaGFyICp0YWdTdHIs
IGludCBsZW4pCi17Ci0gICAgY29uc3Qgc3RydWN0IGF0dHJzICp0YWdQdHIgPSBmaW5kQXR0cih0
YWdTdHIsIGxlbik7Ci0gICAgaWYgKCF0YWdQdHIpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJl
dHVybiB0YWdQdHItPmlkOworICAgIHJldHVybiBhdHRyUHRyLT5pZDsKIH0KSW5kZXg6IGtodG1s
L21pc2MvaHRtbGhhc2hlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3Jl
L2todG1sL21pc2MvaHRtbGhhc2hlcy5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjYKZGlmZiAt
dSAtcCAtcjEuNiBraHRtbC9taXNjL2h0bWxoYXNoZXMuaAotLS0ga2h0bWwvbWlzYy9odG1saGFz
aGVzLmgJNSBKYW4gMjAwNSAyMjo1Njo0NiAtMDAwMAkxLjYKKysrIGtodG1sL21pc2MvaHRtbGhh
c2hlcy5oCTkgSnVsIDIwMDUgMDI6NDM6MTMgLTAwMDAKQEAgLTIzLDEyICsyMywxMCBAQAogI2lm
bmRlZiBIVE1MSEFTSEVTX0gKICNkZWZpbmUgSFRNTEhBU0hFU19ICiAKLSNpbmNsdWRlICJodG1s
dGFncy5oIgogI2luY2x1ZGUgImh0bWxhdHRycy5oIgogCiBuYW1lc3BhY2Uga2h0bWwKIHsKLSAg
dW5zaWduZWQgc2hvcnQgZ2V0VGFnSUQoY29uc3QgY2hhciAqdGFnU3RyLCBpbnQgbGVuKTsKICAg
dW5zaWduZWQgc2hvcnQgZ2V0QXR0cklEKGNvbnN0IGNoYXIgKnRhZ1N0ciwgaW50IGxlbik7CiB9
CiAKSW5kZXg6IGtodG1sL3JlbmRlcmluZy9iaWRpLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9yZW5kZXJpbmcvYmlkaS5jcHAsdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuMTMzCmRpZmYgLXUgLXAgLXIxLjEzMyBraHRtbC9yZW5kZXJpbmcvYmlkaS5jcHAK
LS0tIGtodG1sL3JlbmRlcmluZy9iaWRpLmNwcAk2IEp1bCAyMDA1IDAwOjIxOjQ3IC0wMDAwCTEu
MTMzCisrKyBraHRtbC9yZW5kZXJpbmcvYmlkaS5jcHAJOSBKdWwgMjAwNSAwMjo0MzoxNSAtMDAw
MApAQCAtMzYwLDEwICszNjAsOSBAQCBpbmxpbmUgUUNoYXI6OkRpcmVjdGlvbiBCaWRpSXRlcmF0
b3I6OmRpCiAgICAgaWYgKCFvYmotPmlzVGV4dCgpKQogICAgICAgICByZXR1cm4gUUNoYXI6OkRp
ck9OOwogCi0gICAgUmVuZGVyVGV4dCAqcmVuZGVyVHh0ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4
dCAqPiggb2JqICk7Ci0gICAgaWYgKCBwb3MgPj0gcmVuZGVyVHh0LT5zdHJpbmdMZW5ndGgoKSAp
CisgICAgUmVuZGVyVGV4dCAqcmVuZGVyVHh0ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCAqPihv
YmopOworICAgIGlmIChwb3MgPj0gcmVuZGVyVHh0LT5zdHJpbmdMZW5ndGgoKSkKICAgICAgICAg
cmV0dXJuIFFDaGFyOjpEaXJPTjsKLSAgICAgICAgCiAgICAgcmV0dXJuIHJlbmRlclR4dC0+dGV4
dCgpW3Bvc10uZGlyZWN0aW9uKCk7CiB9CiAKSW5kZXg6IGtodG1sL3JlbmRlcmluZy9icmVha19s
aW5lcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvcmVu
ZGVyaW5nL2JyZWFrX2xpbmVzLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xOQpkaWZmIC11
IC1wIC1yMS4xOSBraHRtbC9yZW5kZXJpbmcvYnJlYWtfbGluZXMuY3BwCi0tLSBraHRtbC9yZW5k
ZXJpbmcvYnJlYWtfbGluZXMuY3BwCTUgSnVsIDIwMDUgMjM6MjE6MTEgLTAwMDAJMS4xOQorKysg
a2h0bWwvcmVuZGVyaW5nL2JyZWFrX2xpbmVzLmNwcAk5IEp1bCAyMDA1IDAyOjQzOjE1IC0wMDAw
CkBAIC0xMTIsNyArMTEyLDggQEAgYm9vbCBpc0JyZWFrYWJsZShjb25zdCBRQ2hhciAqcywgaW50
IHBvcwogICAgIGlmIChsYXN0Q2ggPT0gJy0nIHx8IGxhc3RDaCA9PSAnPycpCiAgICAgICAgIHJl
dHVybiB0cnVlOwogCi0gICAgcmV0dXJuIGMtPmRpcmVjdGlvbigpID09IFFDaGFyOjpEaXJXUzsK
KyAgICAvLyBObyBvdGhlciBhc2NpaSBjaGFycyBhcmUgYnJlYWthYmxlLgorICAgIHJldHVybiBm
YWxzZTsKICNlbmRpZiAgICAKIH0KIApJbmRleDoga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9hcHBs
ZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3JlbmRl
cmluZy9yZW5kZXJfYXBwbGV0LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zMApkaWZmIC11
IC1wIC1yMS4zMCBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2FwcGxldC5jcHAKLS0tIGtodG1sL3Jl
bmRlcmluZy9yZW5kZXJfYXBwbGV0LmNwcAkxMCBNYXkgMjAwNSAxODo0MjowMyAtMDAwMAkxLjMw
CisrKyBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2FwcGxldC5jcHAJOSBKdWwgMjAwNSAwMjo0Mzox
NSAtMDAwMApAQCAtMzYsNyArMzYsNiBAQAogI2lmbmRlZiBRX1dTX1FXUyAvLyBXZSBkb24ndCBo
YXZlIEphdmEgaW4gUXQgRW1iZWRkZWQKIAogI2luY2x1ZGUgImphdmEva2phdmFhcHBsZXR3aWRn
ZXQuaCIKLSNpbmNsdWRlICJtaXNjL2h0bWx0YWdzLmgiCiAjaW5jbHVkZSAiaHRtbC9odG1sX29i
amVjdGltcGwuaCIKIAogdXNpbmcgbmFtZXNwYWNlIGtodG1sOwpAQCAtMTAzLDcgKzEwMiw3IEBA
IHZvaWQgUmVuZGVyQXBwbGV0OjpjcmVhdGVXaWRnZXRJZk5lY2Vzc2EKICAgICAgICAgICAgICAg
ICAgICAgICAgICBtX2hlaWdodCAtIGJvcmRlclRvcCgpIC0gYm9yZGVyQm90dG9tKCkgLSBwYWRk
aW5nVG9wKCkgLSBwYWRkaW5nQm90dG9tKCk7CiAgICAgICAgICAgICBOb2RlSW1wbCAqY2hpbGQg
PSBlbGVtZW50KCktPmZpcnN0Q2hpbGQoKTsKICAgICAgICAgICAgIHdoaWxlIChjaGlsZCkgewot
ICAgICAgICAgICAgICAgIGlmIChjaGlsZC0+aWQoKSA9PSBJRF9QQVJBTSkgeworICAgICAgICAg
ICAgICAgIGlmIChjaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnBhcmFtKCkpKSB7CiAgICAg
ICAgICAgICAgICAgICAgIEhUTUxQYXJhbUVsZW1lbnRJbXBsICpwID0gc3RhdGljX2Nhc3Q8SFRN
TFBhcmFtRWxlbWVudEltcGwgKj4oY2hpbGQpOwogICAgICAgICAgICAgICAgICAgICBtX2FyZ3Mu
aW5zZXJ0KHAtPm5hbWUoKS5zdHJpbmcoKSwgcC0+dmFsdWUoKS5zdHJpbmcoKSk7CiAgICAgICAg
ICAgICAgICAgfQpJbmRleDoga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9ibG9jay5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9i
bG9jay5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTg2CmRpZmYgLXUgLXAgLXIxLjE4NiBr
aHRtbC9yZW5kZXJpbmcvcmVuZGVyX2Jsb2NrLmNwcAotLS0ga2h0bWwvcmVuZGVyaW5nL3JlbmRl
cl9ibG9jay5jcHAJNSBKdWwgMjAwNSAyMzoyMToxMSAtMDAwMAkxLjE4NgorKysga2h0bWwvcmVu
ZGVyaW5nL3JlbmRlcl9ibG9jay5jcHAJOSBKdWwgMjAwNSAwMjo0MzoxOCAtMDAwMApAQCAtNDAs
NyArNDAsNiBAQAogCiAjaW5jbHVkZSAia2h0bWx2aWV3LmgiCiAjaW5jbHVkZSAia2h0bWxfcGFy
dC5oIgotI2luY2x1ZGUgImh0bWx0YWdzLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBET007CiAKQEAg
LTQ3NSw3ICs0NzQsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9jayhib29sIHJlbGF5
CiAgICAgICAgIG1fdG9wTWFyZ2luUXVpcmsgPSBzdHlsZSgpLT5tYXJnaW5Ub3AoKS5xdWlyazsK
ICAgICAgICAgbV9ib3R0b21NYXJnaW5RdWlyayA9IHN0eWxlKCktPm1hcmdpbkJvdHRvbSgpLnF1
aXJrOwogCi0gICAgICAgIGlmIChlbGVtZW50KCkgJiYgZWxlbWVudCgpLT5pZCgpID09IElEX0ZP
Uk0gJiYgZWxlbWVudCgpLT5pc01hbGZvcm1lZCgpKQorICAgICAgICBpZiAoZWxlbWVudCgpICYm
IGVsZW1lbnQoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZvcm0oKSkgJiYgZWxlbWVudCgpLT5p
c01hbGZvcm1lZCgpKQogICAgICAgICAgICAgLy8gU2VlIGlmIHRoaXMgZm9ybSBpcyBtYWxmb3Jt
ZWQgKGkuZS4sIHVuY2xvc2VkKS4gSWYgc28sIGRvbid0IGdpdmUgdGhlIGZvcm0KICAgICAgICAg
ICAgIC8vIGEgYm90dG9tIG1hcmdpbi4KICAgICAgICAgICAgIG1fbWF4Qm90dG9tUG9zTWFyZ2lu
ID0gbV9tYXhCb3R0b21OZWdNYXJnaW4gPSAwOwpJbmRleDoga2h0bWwvcmVuZGVyaW5nL3JlbmRl
cl9ib3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3Jl
bmRlcmluZy9yZW5kZXJfYm94LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNTQKZGlmZiAt
dSAtcCAtcjEuMTU0IGtodG1sL3JlbmRlcmluZy9yZW5kZXJfYm94LmNwcAotLS0ga2h0bWwvcmVu
ZGVyaW5nL3JlbmRlcl9ib3guY3BwCTExIEp1biAyMDA1IDA1OjAxOjE3IC0wMDAwCTEuMTU0Cisr
KyBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2JveC5jcHAJOSBKdWwgMjAwNSAwMjo0MzoxOSAtMDAw
MApAQCAtMjU2LDcgKzI1Niw3IEBAIHZvaWQgUmVuZGVyQm94OjpwYWludFJvb3RCb3hEZWNvcmF0
aW9ucygKICAgICAgICAgLy8gYW5vbnltb3VzIGJsb2NrcyBjcmVhdGVkIGJ5IGlubGluZSA8Ym9k
eT4gdGFncyBldGMuICBXZSBjYW4gbG9jYXRlIHRoZSA8Ym9keT4KICAgICAgICAgLy8gcmVuZGVy
IG9iamVjdCB2ZXJ5IGVhc2lseSB2aWEgdGhlIERPTS4KICAgICAgICAgSFRNTEVsZW1lbnRJbXBs
KiBib2R5ID0gZG9jdW1lbnQoKS0+Ym9keSgpOwotICAgICAgICBSZW5kZXJPYmplY3QqIGJvZHlP
YmplY3QgPSAoYm9keSAmJiBib2R5LT5pZCgpID09IElEX0JPRFkpID8gYm9keS0+cmVuZGVyZXIo
KSA6IDA7CisgICAgICAgIFJlbmRlck9iamVjdCogYm9keU9iamVjdCA9IChib2R5ICYmIGJvZHkt
Pmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmJvZHkoKSkpID8gYm9keS0+cmVuZGVyZXIoKSA6IDA7
CiAgICAgICAgIGlmIChib2R5T2JqZWN0KSB7CiAgICAgICAgICAgICBiZ0xheWVyID0gYm9keU9i
amVjdC0+c3R5bGUoKS0+YmFja2dyb3VuZExheWVycygpOwogICAgICAgICAgICAgYmdDb2xvciA9
IGJvZHlPYmplY3QtPnN0eWxlKCktPmJhY2tncm91bmRDb2xvcigpOwpAQCAtMzY5LDcgKzM2OSw3
IEBAIHZvaWQgUmVuZGVyQm94OjpwYWludEJhY2tncm91bmRFeHRlbmRlZCgKICAgICAgICAgYm9v
bCBpc1RyYW5zcGFyZW50OwogICAgICAgICBET006Ok5vZGVJbXBsKiBlbHQgPSBkb2N1bWVudCgp
LT5vd25lckVsZW1lbnQoKTsKICAgICAgICAgaWYgKGVsdCkgewotICAgICAgICAgICAgaWYgKGVs
dC0+aWQoKSA9PSBJRF9GUkFNRSkKKyAgICAgICAgICAgIGlmIChlbHQtPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjpmcmFtZSgpKSkKICAgICAgICAgICAgICAgICBpc1RyYW5zcGFyZW50ID0gZmFsc2U7
CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAvLyBMb2NhdGUgdGhlIDxib2R5
PiBlbGVtZW50IHVzaW5nIHRoZSBET00uICBUaGlzIGlzIGVhc2llciB0aGFuIHRyeWluZwpAQCAt
Mzc3LDcgKzM3Nyw3IEBAIHZvaWQgUmVuZGVyQm94OjpwYWludEJhY2tncm91bmRFeHRlbmRlZCgK
ICAgICAgICAgICAgICAgICAvLyBhbm9ueW1vdXMgYmxvY2tzIGNyZWF0ZWQgYnkgaW5saW5lIDxi
b2R5PiB0YWdzIGV0Yy4gIFdlIGNhbiBsb2NhdGUgdGhlIDxib2R5PgogICAgICAgICAgICAgICAg
IC8vIHJlbmRlciBvYmplY3QgdmVyeSBlYXNpbHkgdmlhIHRoZSBET00uCiAgICAgICAgICAgICAg
ICAgSFRNTEVsZW1lbnRJbXBsKiBib2R5ID0gZG9jdW1lbnQoKS0+Ym9keSgpOwotICAgICAgICAg
ICAgICAgIGlzVHJhbnNwYXJlbnQgPSAhYm9keSB8fCBib2R5LT5pZCgpICE9IElEX0ZSQU1FU0VU
OyAvLyBDYW4ndCBzY3JvbGwgYSBmcmFtZXNldCBkb2N1bWVudCBhbnl3YXkuCisgICAgICAgICAg
ICAgICAgaXNUcmFuc3BhcmVudCA9ICFib2R5IHx8ICFib2R5LT5oYXNMb2NhbE5hbWUoSFRNTE5h
bWVzOjpmcmFtZXNldCgpKTsgLy8gQ2FuJ3Qgc2Nyb2xsIGEgZnJhbWVzZXQgZG9jdW1lbnQgYW55
d2F5LgogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGlzVHJhbnNw
YXJlbnQgPSBjYW52YXMoKS0+dmlldygpLT5pc1RyYW5zcGFyZW50KCk7CkluZGV4OiBraHRtbC9y
ZW5kZXJpbmcvcmVuZGVyX2NhbnZhc2ltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvV2ViQ29yZS9raHRtbC9yZW5kZXJpbmcvcmVuZGVyX2NhbnZhc2ltYWdlLmNwcCx2CnJl
dHJpZXZpbmcgcmV2aXNpb24gMS4xMQpkaWZmIC11IC1wIC1yMS4xMSBraHRtbC9yZW5kZXJpbmcv
cmVuZGVyX2NhbnZhc2ltYWdlLmNwcAotLS0ga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9jYW52YXNp
bWFnZS5jcHAJMjUgTWF5IDIwMDUgMDE6MzM6MjIgLTAwMDAJMS4xMQorKysga2h0bWwvcmVuZGVy
aW5nL3JlbmRlcl9jYW52YXNpbWFnZS5jcHAJOSBKdWwgMjAwNSAwMjo0MzoxOSAtMDAwMApAQCAt
MzcsMTAgKzM3LDggQEAKICNpbmNsdWRlICJjc3MvY3NzaGVscGVyLmgiCiAjaW5jbHVkZSAibWlz
Yy9oZWxwZXIuaCIKICNpbmNsdWRlICJtaXNjL2h0bWxhdHRycy5oIgotI2luY2x1ZGUgIm1pc2Mv
aHRtbHRhZ3MuaCIKICNpbmNsdWRlICJodG1sL2h0bWxfZm9ybWltcGwuaCIKICNpbmNsdWRlICJo
dG1sL2h0bWxfY2FudmFzaW1wbC5oIgotI2luY2x1ZGUgImh0bWwvZHRkLmgiCiAjaW5jbHVkZSAi
eG1sL2RvbTJfZXZlbnRzaW1wbC5oIgogI2luY2x1ZGUgImh0bWwvaHRtbF9kb2N1bWVudGltcGwu
aCIKICNpbmNsdWRlIDxtYXRoLmg+CkBAIC0xODYsNyArMTg0LDcgQEAgdm9pZCBSZW5kZXJDYW52
YXNJbWFnZTo6cGFpbnQoUGFpbnRJbmZvJgogICAgIH0KICAgICAKICAgICBpZiAoZHJhd25JbWFn
ZSgpKSB7Ci0gICAgICAgIEhUTUxDYW52YXNFbGVtZW50SW1wbCogaSA9IChlbGVtZW50KCkgJiYg
ZWxlbWVudCgpLT5pZCgpID09IElEX0NBTlZBUykgPyBzdGF0aWNfY2FzdDxIVE1MQ2FudmFzRWxl
bWVudEltcGwqPihlbGVtZW50KCkpIDogMDsKKyAgICAgICAgSFRNTENhbnZhc0VsZW1lbnRJbXBs
KiBpID0gKGVsZW1lbnQoKSAmJiBlbGVtZW50KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpjYW52
YXMoKSkpID8gc3RhdGljX2Nhc3Q8SFRNTENhbnZhc0VsZW1lbnRJbXBsKj4oZWxlbWVudCgpKSA6
IDA7CiAgICAgICAgIGludCBvbGRPcGVyYXRpb24gPSAwOwogICAgICAgICBpZiAoaSAmJiAhaS0+
Y29tcG9zaXRlT3BlcmF0b3IoKS5pc051bGwoKSl7CiAgICAgICAgICAgICBvbGRPcGVyYXRpb24g
PSBRUGFpbnRlcjo6Z2V0Q29tcG9zaXRlT3BlcmF0aW9uKHAtPmN1cnJlbnRDb250ZXh0KCkpOwpJ
bmRleDoga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9jYW52YXNpbWFnZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT
IGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3JlbmRlcmluZy9yZW5kZXJfY2FudmFzaW1h
Z2UuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zCmRpZmYgLXUgLXAgLXIxLjMga2h0bWwvcmVu
ZGVyaW5nL3JlbmRlcl9jYW52YXNpbWFnZS5oCi0tLSBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2Nh
bnZhc2ltYWdlLmgJNCBTZXAgMjAwNCAxOTo1OTo1OCAtMDAwMAkxLjMKKysrIGtodG1sL3JlbmRl
cmluZy9yZW5kZXJfY2FudmFzaW1hZ2UuaAk5IEp1bCAyMDA1IDAyOjQzOjIwIC0wMDAwCkBAIC0y
Niw3ICsyNiw2IEBACiAjaWZuZGVmIFJFTkRFUl9DQU5WQVNJTUFHRV9ICiAjZGVmaW5lIFJFTkRF
Ul9DQU5WQVNJTUFHRV9ICiAKLSNpbmNsdWRlICJodG1sL2R0ZC5oIgogI2luY2x1ZGUgImh0bWwv
aHRtbF9lbGVtZW50aW1wbC5oIgogI2luY2x1ZGUgInJlbmRlcmluZy9yZW5kZXJfaW1hZ2UuaCIK
ICNpbmNsdWRlICJkb20vZG9tX3N0cmluZy5oIgpJbmRleDoga2h0bWwvcmVuZGVyaW5nL3JlbmRl
cl9jb250YWluZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2to
dG1sL3JlbmRlcmluZy9yZW5kZXJfY29udGFpbmVyLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24g
MS42NgpkaWZmIC11IC1wIC1yMS42NiBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2NvbnRhaW5lci5j
cHAKLS0tIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfY29udGFpbmVyLmNwcAkxNCBGZWIgMjAwNSAx
ODoxOToxOCAtMDAwMAkxLjY2CisrKyBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2NvbnRhaW5lci5j
cHAJOSBKdWwgMjAwNSAwMjo0MzoyMCAtMDAwMApAQCAtMjI2LDEyICsyMjYsMTIgQEAgdm9pZCBS
ZW5kZXJDb250YWluZXI6OnVwZGF0ZVBzZXVkb0NoaWxkKAogCiAgICAgLy8gRm9yIDxxPjxwLz48
L3E+LCBpZiB0aGlzIG9iamVjdCBpcyB0aGUgaW5saW5lIGNvbnRpbnVhdGlvbiBvZiB0aGUgPHE+
LCB3ZSBvbmx5IHdhbnQgdG8gZ2VuZXJhdGUKICAgICAvLyA6YWZ0ZXIgY29udGVudCBhbmQgbm90
IDpiZWZvcmUgY29udGVudC4KLSAgICBpZiAodHlwZSA9PSBSZW5kZXJTdHlsZTo6QkVGT1JFICYm
IGlzSW5saW5lQ29udGludWF0aW9uKCkpCisgICAgaWYgKG5ld0NvbnRlbnRXYW50ZWQgJiYgdHlw
ZSA9PSBSZW5kZXJTdHlsZTo6QkVGT1JFICYmIGlzSW5saW5lQ29udGludWF0aW9uKCkpCiAgICAg
ICAgIG5ld0NvbnRlbnRXYW50ZWQgPSBmYWxzZTsKIAogICAgIC8vIFNpbWlsYXJseSwgaWYgd2Un
cmUgdGhlIGJlZ2lubmluZyBvZiBhIDxxPiwgYW5kIHRoZXJlJ3MgYW4gaW5saW5lIGNvbnRpbnVh
dGlvbiBmb3Igb3VyIG9iamVjdCwKICAgICAvLyB0aGVuIHdlIGRvbid0IGdlbmVyYXRlIHRoZSA6
YWZ0ZXIgY29udGVudC4KLSAgICBpZiAodHlwZSA9PSBSZW5kZXJTdHlsZTo6QUZURVIgJiYgaXNS
ZW5kZXJJbmxpbmUoKSAmJiBjb250aW51YXRpb24oKSkKKyAgICBpZiAobmV3Q29udGVudFdhbnRl
ZCAmJiB0eXBlID09IFJlbmRlclN0eWxlOjpBRlRFUiAmJiBpc1JlbmRlcklubGluZSgpICYmIGNv
bnRpbnVhdGlvbigpKQogICAgICAgICBuZXdDb250ZW50V2FudGVkID0gZmFsc2U7CiAgICAgCiAg
ICAgLy8gSWYgd2UgZG9uJ3Qgd2FudCBnZW5lcmF0ZWQgY29udGVudCBhbnkgbG9uZ2VyLCBvciBp
ZiB3ZSBoYXZlIGdlbmVyYXRlZCBjb250ZW50LCBidXQgaXQncyBubyBsb25nZXIKSW5kZXg6IGto
dG1sL3JlbmRlcmluZy9yZW5kZXJfZmxvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L1dlYkNvcmUva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9mbG93LmNwcCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS4xNjAKZGlmZiAtdSAtcCAtcjEuMTYwIGtodG1sL3JlbmRlcmluZy9yZW5kZXJf
Zmxvdy5jcHAKLS0tIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfZmxvdy5jcHAJMTEgTWF5IDIwMDUg
MDI6MTA6MTAgLTAwMDAJMS4xNjAKKysrIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfZmxvdy5jcHAJ
OSBKdWwgMjAwNSAwMjo0MzoyMSAtMDAwMApAQCAtNDAsNyArNDAsNiBAQAogI2luY2x1ZGUgInJl
bmRlcl9saW5lLmgiCiAKICNpbmNsdWRlICJraHRtbHZpZXcuaCIKLSNpbmNsdWRlICJodG1sdGFn
cy5oIgogCiB1c2luZyBuYW1lc3BhY2UgRE9NOwogdXNpbmcgbmFtZXNwYWNlIGtodG1sOwpAQCAt
NjU0LDcgKzY1Myw3IEBAIHZvaWQgUmVuZGVyRmxvdzo6YWRkRm9jdXNSaW5nUmVjdHMoUVBhaW4K
ICAgICAvLyBPbmx5IHBhaW50IGZvY3VzIHJpbmcgYXJvdW5kIG91dGVybW9zdCBjb250ZW50ZWRp
dGFibGUgZWxlbWVudC4KICAgICAvLyBCdXQgc2tpcCB0aGUgYm9keSBlbGVtZW50IGlmIGl0IGlz
IG91dGVybW9zdC4KICAgICBpZiAoZWxlbWVudCgpICYmIGVsZW1lbnQoKS0+aXNDb250ZW50RWRp
dGFibGUoKSkgewotICAgICAgICBpZiAoZWxlbWVudCgpLT5wYXJlbnROb2RlKCkgJiYgIWVsZW1l
bnQoKS0+cGFyZW50Tm9kZSgpLT5pc0NvbnRlbnRFZGl0YWJsZSgpICYmIGVsZW1lbnQoKS0+aWQo
KSAhPSBJRF9CT0RZKQorICAgICAgICBpZiAoZWxlbWVudCgpLT5wYXJlbnROb2RlKCkgJiYgIWVs
ZW1lbnQoKS0+cGFyZW50Tm9kZSgpLT5pc0NvbnRlbnRFZGl0YWJsZSgpICYmICFlbGVtZW50KCkt
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpib2R5KCkpKQogICAgICAgICAgICAgcC0+YWRkRm9jdXNS
aW5nUmVjdChfdHgsIF90eSwgd2lkdGgoKSwgaGVpZ2h0KCkpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQpJbmRleDoga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9mb3JtLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9yZW5kZXJpbmcvcmVuZGVyX2Zvcm0uY3Bw
LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEwOApkaWZmIC11IC1wIC1yMS4xMDgga2h0bWwvcmVu
ZGVyaW5nL3JlbmRlcl9mb3JtLmNwcAotLS0ga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9mb3JtLmNw
cAkyNCBKdW4gMjAwNSAwNTo1MzoyOCAtMDAwMAkxLjEwOAorKysga2h0bWwvcmVuZGVyaW5nL3Jl
bmRlcl9mb3JtLmNwcAk5IEp1bCAyMDA1IDAyOjQzOjIyIC0wMDAwCkBAIC03OTcsNyArNzk3LDcg
QEAgUmVuZGVyT2JqZWN0KiBSZW5kZXJGaWVsZHNldDo6ZmluZExlZ2VuZAogewogICAgIGZvciAo
UmVuZGVyT2JqZWN0KiBsZWdlbmQgPSBmaXJzdENoaWxkKCk7IGxlZ2VuZDsgbGVnZW5kID0gbGVn
ZW5kLT5uZXh0U2libGluZygpKSB7CiAgICAgICBpZiAoIWxlZ2VuZC0+aXNGbG9hdGluZ09yUG9z
aXRpb25lZCgpICYmIGxlZ2VuZC0+ZWxlbWVudCgpICYmCi0gICAgICAgICAgbGVnZW5kLT5lbGVt
ZW50KCktPmlkKCkgPT0gSURfTEVHRU5EKQorICAgICAgICAgIGxlZ2VuZC0+ZWxlbWVudCgpLT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6bGVnZW5kKCkpKQogICAgICAgICByZXR1cm4gbGVnZW5kOwog
ICAgIH0KICAgICByZXR1cm4gMDsKQEAgLTExOTEsNyArMTE5MSw3IEBAIHZvaWQgUmVuZGVyU2Vs
ZWN0Ojp1cGRhdGVGcm9tRWxlbWVudCgpCiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxLQ29tYm9C
b3gqPihtX3dpZGdldCktPmNsZWFyKCk7CiAKICAgICAgICAgZm9yIChsaXN0SW5kZXggPSAwOyBs
aXN0SW5kZXggPCBpbnQobGlzdEl0ZW1zLnNpemUoKSk7IGxpc3RJbmRleCsrKSB7Ci0gICAgICAg
ICAgICBpZiAobGlzdEl0ZW1zW2xpc3RJbmRleF0tPmlkKCkgPT0gSURfT1BUR1JPVVApIHsKKyAg
ICAgICAgICAgIGlmIChsaXN0SXRlbXNbbGlzdEluZGV4XS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
Om9wdGdyb3VwKCkpKSB7CiAgICAgICAgICAgICAgICAgUVN0cmluZyBsYWJlbCA9IGxpc3RJdGVt
c1tsaXN0SW5kZXhdLT5nZXRBdHRyaWJ1dGUoQVRUUl9MQUJFTCkuc3RyaW5nKCk7CiAgICAgICAg
ICAgICAgICAgbGFiZWwucmVwbGFjZShRQ2hhcignXFwnKSwgYmFja3NsYXNoQXNDdXJyZW5jeVN5
bWJvbCgpKTsKIApAQCAtMTIxNSwxNCArMTIxNSwxNCBAQCB2b2lkIFJlbmRlclNlbGVjdDo6dXBk
YXRlRnJvbUVsZW1lbnQoKQogICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxLQ29tYm9C
b3gqPihtX3dpZGdldCktPmluc2VydEl0ZW0obGFiZWwsIGxpc3RJbmRleCk7CiAjZW5kaWYKICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGxpc3RJdGVtc1tsaXN0SW5kZXhdLT5p
ZCgpID09IElEX09QVElPTikgeworICAgICAgICAgICAgZWxzZSBpZiAobGlzdEl0ZW1zW2xpc3RJ
bmRleF0tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvcHRpb24oKSkpIHsKICAgICAgICAgICAgICAg
ICBRU3RyaW5nIGl0ZW1UZXh0ID0gc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnRJbXBsKj4o
bGlzdEl0ZW1zW2xpc3RJbmRleF0pLT50ZXh0KCkuc3RyaW5nKCk7CiAgICAgICAgICAgICAgICAg
aXRlbVRleHQucmVwbGFjZShRQ2hhcignXFwnKSwgYmFja3NsYXNoQXNDdXJyZW5jeVN5bWJvbCgp
KTsKIAogICAgICAgICAgICAgICAgIC8vIEluIFdpbklFLCBsZWFkaW5nIGFuZCB0cmFpbGluZyB3
aGl0ZXNwYWNlIGlzIGlnbm9yZWQgaW4gb3B0aW9ucy4gV2UgbWF0Y2ggdGhpcyBiZWhhdmlvci4K
ICAgICAgICAgICAgICAgICBpdGVtVGV4dCA9IGl0ZW1UZXh0LnN0cmlwV2hpdGVTcGFjZSgpOwog
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChsaXN0SXRlbXNbbGlzdEluZGV4
XS0+cGFyZW50Tm9kZSgpLT5pZCgpID09IElEX09QVEdST1VQKQorICAgICAgICAgICAgICAgIGlm
IChsaXN0SXRlbXNbbGlzdEluZGV4XS0+cGFyZW50Tm9kZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6b3B0Z3JvdXAoKSkpCiAgICAgICAgICAgICAgICAgICAgIGl0ZW1UZXh0LnByZXBlbmQoIiAg
ICAiKTsKIAogI2lmIEFQUExFX0NIQU5HRVMKQEAgLTEzNDgsNyArMTM0OCw3IEBAIHZvaWQgUmVu
ZGVyU2VsZWN0OjpsYXlvdXQoICkKIAogICAgIGJvb2wgZm91bmRPcHRpb24gPSBmYWxzZTsKICAg
ICBmb3IgKHVpbnQgaSA9IDA7IGkgPCBsaXN0SXRlbXMuc2l6ZSgpICYmICFmb3VuZE9wdGlvbjsg
aSsrKQotCWZvdW5kT3B0aW9uID0gKGxpc3RJdGVtc1tpXS0+aWQoKSA9PSBJRF9PUFRJT04pOwor
CWZvdW5kT3B0aW9uID0gKGxpc3RJdGVtc1tpXS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9wdGlv
bigpKSk7CiAKICAgICBtX3dpZGdldC0+c2V0RW5hYmxlZChmb3VuZE9wdGlvbiAmJiAhIGVsZW1l
bnQoKS0+ZGlzYWJsZWQoKSk7CiB9CkBAIC0xMzYyLDEyICsxMzYyLDEyIEBAIHZvaWQgUmVuZGVy
U2VsZWN0OjpzbG90U2VsZWN0ZWQoaW50IGluZGUKICAgICBRTWVtQXJyYXk8SFRNTEdlbmVyaWNG
b3JtRWxlbWVudEltcGwqPiBsaXN0SXRlbXMgPSBlbGVtZW50KCktPmxpc3RJdGVtcygpOwogICAg
IGlmKGluZGV4ID49IDAgJiYgaW5kZXggPCBpbnQobGlzdEl0ZW1zLnNpemUoKSkpCiAgICAgewot
ICAgICAgICBib29sIGZvdW5kID0gKCBsaXN0SXRlbXNbaW5kZXhdLT5pZCgpID09IElEX09QVElP
TiApOworICAgICAgICBib29sIGZvdW5kID0gKGxpc3RJdGVtc1tpbmRleF0tPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjpvcHRpb24oKSkpOwogCiAgICAgICAgIGlmICggIWZvdW5kICkgewogICAgICAg
ICAgICAgLy8gdGhpcyBvbmUgaXMgbm90IHNlbGVjdGFibGUsICB3ZSBuZWVkIHRvIGZpbmQgYW4g
b3B0aW9uIGVsZW1lbnQKICAgICAgICAgICAgIHdoaWxlICggKCB1bnNpZ25lZCApIGluZGV4IDwg
bGlzdEl0ZW1zLnNpemUoKSApIHsKLSAgICAgICAgICAgICAgICBpZiAoIGxpc3RJdGVtc1tpbmRl
eF0tPmlkKCkgPT0gSURfT1BUSU9OICkgeworICAgICAgICAgICAgICAgIGlmIChsaXN0SXRlbXNb
aW5kZXhdLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpKSB7CiAgICAgICAgICAgICAg
ICAgICAgIGZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgfQpAQCAtMTM3Niw3ICsxMzc2LDcgQEAgdm9pZCBSZW5kZXJTZWxlY3Q6OnNsb3RT
ZWxlY3RlZChpbnQgaW5kZQogCiAgICAgICAgICAgICBpZiAoICFmb3VuZCApIHsKICAgICAgICAg
ICAgICAgICB3aGlsZSAoIGluZGV4ID49IDAgKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgg
bGlzdEl0ZW1zW2luZGV4XS0+aWQoKSA9PSBJRF9PUFRJT04gKSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChsaXN0SXRlbXNbaW5kZXhdLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkp
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMTM5MCw3ICsxMzkw
LDcgQEAgdm9pZCBSZW5kZXJTZWxlY3Q6OnNsb3RTZWxlY3RlZChpbnQgaW5kZQogICAgICAgICAg
ICAgICAgIHN0YXRpY19jYXN0PENvbWJvQm94V2lkZ2V0Kj4oIG1fd2lkZ2V0ICktPnNldEN1cnJl
bnRJdGVtKCBpbmRleCApOwogCiAgICAgICAgICAgICBmb3IgKCB1bnNpZ25lZCBpbnQgaSA9IDA7
IGkgPCBsaXN0SXRlbXMuc2l6ZSgpOyArK2kgKQotICAgICAgICAgICAgICAgIGlmICggbGlzdEl0
ZW1zW2ldLT5pZCgpID09IElEX09QVElPTiAmJiBpICE9ICh1bnNpZ25lZCBpbnQpIGluZGV4ICkK
KyAgICAgICAgICAgICAgICBpZiAobGlzdEl0ZW1zW2ldLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
b3B0aW9uKCkpICYmIGkgIT0gKHVuc2lnbmVkIGludCkgaW5kZXgpCiAgICAgICAgICAgICAgICAg
ICAgIHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50SW1wbCo+KCBsaXN0SXRlbXNbaV0gKS0+
bV9zZWxlY3RlZCA9IGZhbHNlOwogCiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxIVE1MT3B0aW9u
RWxlbWVudEltcGwqPihsaXN0SXRlbXNbaW5kZXhdKS0+bV9zZWxlY3RlZCA9IHRydWU7CkBAIC0x
NDExLDcgKzE0MTEsNyBAQCB2b2lkIFJlbmRlclNlbGVjdDo6c2xvdFNlbGVjdGlvbkNoYW5nZWQo
CiAgICAgZm9yICggdW5zaWduZWQgaSA9IDA7IGkgPCBsaXN0SXRlbXMuY291bnQoKTsgaSsrICkK
ICAgICAgICAgLy8gZG9uJ3QgdXNlIHNldFNlbGVjdGVkKCkgaGVyZSBiZWNhdXNlIGl0IHdpbGwg
Y2F1c2UgdXMgdG8gYmUgY2FsbGVkCiAgICAgICAgIC8vIGFnYWluIHdpdGggdXBkYXRlU2VsZWN0
aW9uLgotICAgICAgICBpZiAoIGxpc3RJdGVtc1tpXS0+aWQoKSA9PSBJRF9PUFRJT04gKQorICAg
ICAgICBpZiAobGlzdEl0ZW1zW2ldLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpKQog
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTE9wdGlvbkVsZW1lbnRJbXBsKj4oIGxpc3RJdGVt
c1tpXSApCiAgICAgICAgICAgICAgICAgLT5tX3NlbGVjdGVkID0gc3RhdGljX2Nhc3Q8S0xpc3RC
b3gqPiggbV93aWRnZXQgKS0+aXNTZWxlY3RlZCggaSApOwogCkBAIC0xNDUzLDcgKzE0NTMsNyBA
QCB2b2lkIFJlbmRlclNlbGVjdDo6dXBkYXRlU2VsZWN0aW9uKCkKICAgICAgICAgLy8gaWYgbXVs
dGktc2VsZWN0LCB3ZSBzZWxlY3Qgb25seSB0aGUgbmV3IHNlbGVjdGVkIGluZGV4CiAgICAgICAg
IEtMaXN0Qm94ICpsaXN0Qm94ID0gc3RhdGljX2Nhc3Q8S0xpc3RCb3gqPihtX3dpZGdldCk7CiAg
ICAgICAgIGZvciAoaSA9IDA7IGkgPCBpbnQobGlzdEl0ZW1zLnNpemUoKSk7IGkrKykKLSAgICAg
ICAgICAgIGxpc3RCb3gtPnNldFNlbGVjdGVkKGksbGlzdEl0ZW1zW2ldLT5pZCgpID09IElEX09Q
VElPTiAmJgorICAgICAgICAgICAgbGlzdEJveC0+c2V0U2VsZWN0ZWQoaSwgbGlzdEl0ZW1zW2ld
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpICYmCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50SW1wbCo+KGxpc3RJdGVt
c1tpXSktPnNlbGVjdGVkKCkpOwogICAgIH0KICAgICBlbHNlIHsKQEAgLTE0NjEsNyArMTQ2MSw3
IEBAIHZvaWQgUmVuZGVyU2VsZWN0Ojp1cGRhdGVTZWxlY3Rpb24oKQogICAgICAgICB1bnNpZ25l
ZCBmaXJzdE9wdGlvbiA9IGxpc3RJdGVtcy5zaXplKCk7CiAgICAgICAgIGkgPSBsaXN0SXRlbXMu
c2l6ZSgpOwogICAgICAgICB3aGlsZSAoaS0tKQotICAgICAgICAgICAgaWYgKGxpc3RJdGVtc1tp
XS0+aWQoKSA9PSBJRF9PUFRJT04pIHsKKyAgICAgICAgICAgIGlmIChsaXN0SXRlbXNbaV0tPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjpvcHRpb24oKSkpIHsKICAgICAgICAgICAgICAgICBpZiAoZm91
bmQpCiAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEhUTUxPcHRpb25FbGVtZW50SW1w
bCo+KGxpc3RJdGVtc1tpXSktPm1fc2VsZWN0ZWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBl
bHNlIGlmIChzdGF0aWNfY2FzdDxIVE1MT3B0aW9uRWxlbWVudEltcGwqPihsaXN0SXRlbXNbaV0p
LT5zZWxlY3RlZCgpKSB7CkluZGV4OiBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2ZyYW1lcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvcmVuZGVyaW5nL3Jl
bmRlcl9mcmFtZXMuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjY5CmRpZmYgLXUgLXAgLXIx
LjY5IGtodG1sL3JlbmRlcmluZy9yZW5kZXJfZnJhbWVzLmNwcAotLS0ga2h0bWwvcmVuZGVyaW5n
L3JlbmRlcl9mcmFtZXMuY3BwCTEwIE1heSAyMDA1IDE4OjQyOjA0IC0wMDAwCTEuNjkKKysrIGto
dG1sL3JlbmRlcmluZy9yZW5kZXJfZnJhbWVzLmNwcAk5IEp1bCAyMDA1IDAyOjQzOjIzIC0wMDAw
CkBAIC0zNCw3ICszNCw2IEBACiAjaW5jbHVkZSAibWlzYy9odG1sYXR0cnMuaCIKICNpbmNsdWRl
ICJ4bWwvZG9tMl9ldmVudHNpbXBsLmgiCiAjaW5jbHVkZSAieG1sL2RvbV9kb2NpbXBsLmgiCi0j
aW5jbHVkZSAibWlzYy9odG1sdGFncy5oIgogI2luY2x1ZGUgImtodG1sdmlldy5oIgogI2luY2x1
ZGUgImtodG1sX3BhcnQuaCIKICNpbmNsdWRlICJyZW5kZXJfYXJlbmEuaCIKQEAgLTY2OSwxNyAr
NjY4LDE3IEBAIHZvaWQgUmVuZGVyUGFydE9iamVjdDo6dXBkYXRlV2lkZ2V0KCkKIAogICBzZXRO
ZWVkc0xheW91dEFuZE1pbk1heFJlY2FsYygpOwogCi0gIGlmIChlbGVtZW50KCktPmlkKCkgPT0g
SURfT0JKRUNUKSB7CisgIGlmIChlbGVtZW50KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvYmpl
Y3QoKSkpIHsKIAogICAgICAgSFRNTE9iamVjdEVsZW1lbnRJbXBsICpvID0gc3RhdGljX2Nhc3Q8
SFRNTE9iamVjdEVsZW1lbnRJbXBsICo+KGVsZW1lbnQoKSk7CiAKICAgICAgIC8vIENoZWNrIGZv
ciBhIGNoaWxkIEVNQkVEIHRhZy4KICAgICAgIEhUTUxFbWJlZEVsZW1lbnRJbXBsICplbWJlZCA9
IDA7CiAgICAgICBmb3IgKE5vZGVJbXBsICpjaGlsZCA9IG8tPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7
ICkgewotICAgICAgICAgIGlmIChjaGlsZC0+aWQoKSA9PSBJRF9FTUJFRCkgeworICAgICAgICAg
IGlmIChjaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmVtYmVkKCkpKSB7CiAgICAgICAgICAg
ICAgIGVtYmVkID0gc3RhdGljX2Nhc3Q8SFRNTEVtYmVkRWxlbWVudEltcGwgKj4oIGNoaWxkICk7
CiAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0gZWxzZSBpZiAoY2hpbGQtPmlkKCkg
PT0gSURfT0JKRUNUKSB7CisgICAgICAgICAgfSBlbHNlIGlmIChjaGlsZC0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6Om9iamVjdCgpKSkgewogICAgICAgICAgICAgICBjaGlsZCA9IGNoaWxkLT5uZXh0
U2libGluZygpOyAgICAgICAgIC8vIERvbid0IGRlc2NlbmQgaW50byBuZXN0ZWQgT0JKRUNUIHRh
Z3MKICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICBjaGlsZCA9IGNoaWxkLT50cmF2
ZXJzZU5leHROb2RlKG8pOyAgIC8vIE90aGVyd2lzZSBkZXNjZW5kIChFTUJFRHMgbWF5IGJlIGlu
c2lkZSBDT01NRU5UIHRhZ3MpCkBAIC03MTksNyArNzE4LDcgQEAgdm9pZCBSZW5kZXJQYXJ0T2Jq
ZWN0Ojp1cGRhdGVXaWRnZXQoKQogICAgICAgLy8gR2V0IHRoZSBhdHRyaWJ1dGVzIGZyb20gdGhl
IHBhcmFtcyBpZiB0aGVyZSBpcyBubyBFTUJFRCB0YWcuCiAgICAgICBOb2RlSW1wbCAqY2hpbGQg
PSBvLT5maXJzdENoaWxkKCk7CiAgICAgICB3aGlsZSAoY2hpbGQgJiYgKHVybC5pc0VtcHR5KCkg
fHwgc2VydmljZVR5cGUuaXNFbXB0eSgpIHx8ICFlbWJlZCkpIHsKLSAgICAgICAgICBpZiAoY2hp
bGQtPmlkKCkgPT0gSURfUEFSQU0pIHsKKyAgICAgICAgICBpZiAoY2hpbGQtPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjpwYXJhbSgpKSkgewogICAgICAgICAgICAgICBIVE1MUGFyYW1FbGVtZW50SW1w
bCAqcCA9IHN0YXRpY19jYXN0PEhUTUxQYXJhbUVsZW1lbnRJbXBsICo+KCBjaGlsZCApOwogICAg
ICAgICAgICAgICBRU3RyaW5nIG5hbWUgPSBwLT5uYW1lKCkuc3RyaW5nKCkubG93ZXIoKTsKICAg
ICAgICAgICAgICAgaWYgKHVybC5pc0VtcHR5KCkgJiYgKG5hbWUgPT0gInNyYyIgfHwgbmFtZSA9
PSAibW92aWUiIHx8IG5hbWUgPT0gImNvZGUiIHx8IG5hbWUgPT0gInVybCIpKSB7CkBAIC04MTAs
MTQgKzgwOSwxNCBAQCB2b2lkIFJlbmRlclBhcnRPYmplY3Q6OnVwZGF0ZVdpZGdldCgpCiAgICAg
ICAvLyBGaW5kIG91dCBpZiB3ZSBzdXBwb3J0IGZhbGxiYWNrIGNvbnRlbnQuCiAgICAgICBtX2hh
c0ZhbGxiYWNrQ29udGVudCA9IGZhbHNlOwogICAgICAgZm9yIChOb2RlSW1wbCAqY2hpbGQgPSBv
LT5maXJzdENoaWxkKCk7IGNoaWxkICYmICFtX2hhc0ZhbGxiYWNrQ29udGVudDsgY2hpbGQgPSBj
aGlsZC0+bmV4dFNpYmxpbmcoKSkgewotICAgICAgICAgIGlmICgoIWNoaWxkLT5pc1RleHROb2Rl
KCkgJiYgY2hpbGQtPmlkKCkgIT0gSURfRU1CRUQgJiYgY2hpbGQtPmlkKCkgIT0gSURfUEFSQU0p
IHx8IC8vIERpc2NvdW50IDxlbWJlZD4gYW5kIDxwYXJhbT4KKyAgICAgICAgICBpZiAoKCFjaGls
ZC0+aXNUZXh0Tm9kZSgpICYmICFjaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmVtYmVkKCkp
ICYmICFjaGlsZC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnBhcmFtKCkpKSB8fCAvLyBEaXNjb3Vu
dCA8ZW1iZWQ+IGFuZCA8cGFyYW0+CiAgICAgICAgICAgICAgIChjaGlsZC0+aXNUZXh0Tm9kZSgp
ICYmICFjaGlsZC0+Y29udGFpbnNPbmx5V2hpdGVzcGFjZSgpKSkKICAgICAgICAgICAgICAgbV9o
YXNGYWxsYmFja0NvbnRlbnQgPSB0cnVlOwogICAgICAgfQogICAgICAgYm9vbCBzdWNjZXNzID0g
cGFydC0+cmVxdWVzdE9iamVjdCggdGhpcywgdXJsLCBzZXJ2aWNlVHlwZSwgcGFyYW1OYW1lcywg
cGFyYW1WYWx1ZXMgKTsKICAgICAgIGlmICghc3VjY2VzcyAmJiBtX2hhc0ZhbGxiYWNrQ29udGVu
dCkKICAgICAgICAgICBvLT5yZW5kZXJGYWxsYmFja0NvbnRlbnQoKTsKLSAgfSBlbHNlIGlmICgg
ZWxlbWVudCgpLT5pZCgpID09IElEX0VNQkVEICkgeworICB9IGVsc2UgaWYgKGVsZW1lbnQoKS0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OmVtYmVkKCkpKSB7CiAKICAgICAgIEhUTUxFbWJlZEVsZW1l
bnRJbXBsICpvID0gc3RhdGljX2Nhc3Q8SFRNTEVtYmVkRWxlbWVudEltcGwgKj4oZWxlbWVudCgp
KTsKICAgICAgIHVybCA9IG8tPnVybDsKQEAgLTg0NCw3ICs4NDMsNyBAQCB2b2lkIFJlbmRlclBh
cnRPYmplY3Q6OnVwZGF0ZVdpZGdldCgpCiAgICAgICB9CiAgICAgICBwYXJ0LT5yZXF1ZXN0T2Jq
ZWN0KCB0aGlzLCB1cmwsIHNlcnZpY2VUeXBlLCBwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcyApOwog
ICB9IGVsc2UgewotICAgICAgYXNzZXJ0KGVsZW1lbnQoKS0+aWQoKSA9PSBJRF9JRlJBTUUpOwor
ICAgICAgYXNzZXJ0KGVsZW1lbnQoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmlmcmFtZSgpKSk7
CiAgICAgICBIVE1MSUZyYW1lRWxlbWVudEltcGwgKm8gPSBzdGF0aWNfY2FzdDxIVE1MSUZyYW1l
RWxlbWVudEltcGwgKj4oZWxlbWVudCgpKTsKICAgICAgIHVybCA9IG8tPm1fVVJMLnN0cmluZygp
OwogICAgICAgaWYgKHVybC5pc0VtcHR5KCkpIHsKQEAgLTg5MCw3ICs4ODksNyBAQCB2b2lkIFJl
bmRlclBhcnRPYmplY3Q6OnNsb3RWaWV3Q2xlYXJlZCgpCiAgICAgICBRU2Nyb2xsVmlldzo6U2Ny
b2xsQmFyTW9kZSBzY3JvbGwgPSBRU2Nyb2xsVmlldzo6QXV0bzsKICAgICAgIGludCBtYXJnaW53
ID0gLTE7CiAgICAgICBpbnQgbWFyZ2luaCA9IC0xOwotICAgICAgaWYgKCBlbGVtZW50KCktPmlk
KCkgPT0gSURfSUZSQU1FKSB7CisgICAgICBpZiAoZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6aWZyYW1lKCkpKSB7CiAJICBIVE1MSUZyYW1lRWxlbWVudEltcGwgKmZyYW1lID0gc3Rh
dGljX2Nhc3Q8SFRNTElGcmFtZUVsZW1lbnRJbXBsICo+KGVsZW1lbnQoKSk7CiAJICBpZihmcmFt
ZS0+bV9mcmFtZUJvcmRlcikKIAkgICAgICBmcmFtZVN0eWxlID0gUUZyYW1lOjpCb3g7CkBAIC05
MTAsNyArOTA5LDcgQEAgdm9pZCBSZW5kZXJQYXJ0T2JqZWN0OjpzbG90Vmlld0NsZWFyZWQoKQog
ICAgICAgICAgIGtkRGVidWcoNjAzMSkgPDwgImZyYW1lIGlzIGEgS0hUTUx2aWV3ISIgPDwgZW5k
bDsKICNlbmRpZgogICAgICAgICAgIEtIVE1MVmlldyAqaHRtbFZpZXcgPSBzdGF0aWNfY2FzdDxL
SFRNTFZpZXcgKj4odmlldyk7Ci0gICAgICAgICAgaHRtbFZpZXctPnNldElnbm9yZVdoZWVsRXZl
bnRzKCBlbGVtZW50KCktPmlkKCkgPT0gSURfSUZSQU1FICk7CisgICAgICAgICAgaHRtbFZpZXct
PnNldElnbm9yZVdoZWVsRXZlbnRzKGVsZW1lbnQoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omlm
cmFtZSgpKSk7CiAgICAgICAgICAgaWYobWFyZ2ludyAhPSAtMSkgaHRtbFZpZXctPnNldE1hcmdp
bldpZHRoKG1hcmdpbncpOwogICAgICAgICAgIGlmKG1hcmdpbmggIT0gLTEpIGh0bWxWaWV3LT5z
ZXRNYXJnaW5IZWlnaHQobWFyZ2luaCk7CiAgICAgICAgIH0KSW5kZXg6IGtodG1sL3JlbmRlcmlu
Zy9yZW5kZXJfaW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3Jl
L2todG1sL3JlbmRlcmluZy9yZW5kZXJfaW1hZ2UuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
Ljc3CmRpZmYgLXUgLXAgLXIxLjc3IGtodG1sL3JlbmRlcmluZy9yZW5kZXJfaW1hZ2UuY3BwCi0t
LSBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2ltYWdlLmNwcAk1IEp1bCAyMDA1IDIzOjIxOjExIC0w
MDAwCTEuNzcKKysrIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfaW1hZ2UuY3BwCTkgSnVsIDIwMDUg
MDI6NDM6MjMgLTAwMDAKQEAgLTM3LDEwICszNyw4IEBACiAjaW5jbHVkZSAiY3NzL2Nzc2hlbHBl
ci5oIgogI2luY2x1ZGUgIm1pc2MvaGVscGVyLmgiCiAjaW5jbHVkZSAibWlzYy9odG1sYXR0cnMu
aCIKLSNpbmNsdWRlICJtaXNjL2h0bWx0YWdzLmgiCiAjaW5jbHVkZSAiaHRtbC9odG1sX2Zvcm1p
bXBsLmgiCiAjaW5jbHVkZSAiaHRtbC9odG1sX2ltYWdlaW1wbC5oIgotI2luY2x1ZGUgImh0bWwv
ZHRkLmgiCiAjaW5jbHVkZSAieG1sL2RvbTJfZXZlbnRzaW1wbC5oIgogI2luY2x1ZGUgImh0bWwv
aHRtbF9kb2N1bWVudGltcGwuaCIKICNpbmNsdWRlIDxtYXRoLmg+CkBAIC00MTksNyArNDE3LDcg
QEAgdm9pZCBSZW5kZXJJbWFnZTo6cGFpbnQoUGFpbnRJbmZvJiBpLCBpbgogCiAKIC8vICAgICAg
ICAgICAgIHAtPmRyYXdQaXhtYXAoIG9mZnMueCgpLCB5LCBwaXgsIHJlY3QueCgpLCByZWN0Lnko
KSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpICk7Ci0gICAgICAgICAgICAgSFRNTEltYWdl
RWxlbWVudEltcGwqIGkgPSAoZWxlbWVudCgpICYmIGVsZW1lbnQoKS0+aWQoKSA9PSBJRF9JTUcp
ID8gc3RhdGljX2Nhc3Q8SFRNTEltYWdlRWxlbWVudEltcGwqPihlbGVtZW50KCkpIDogMDsKKyAg
ICAgICAgICAgICBIVE1MSW1hZ2VFbGVtZW50SW1wbCogaSA9IChlbGVtZW50KCkgJiYgZWxlbWVu
dCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW1nKCkpKSA/IHN0YXRpY19jYXN0PEhUTUxJbWFn
ZUVsZW1lbnRJbXBsKj4oZWxlbWVudCgpKSA6IDA7CiAgICAgICAgICAgICAgaWYgKGkgJiYgIWkt
PmNvbXBvc2l0ZU9wZXJhdG9yKCkuaXNOdWxsKCkpewogICAgICAgICAgICAgICAgIHAtPmRyYXdQ
aXhtYXAgKG9mZnMsIHBpeCwgcmVjdCwgaS0+Y29tcG9zaXRlT3BlcmF0b3IoKSk7CiAgICAgICAg
ICAgICAgfQpAQCAtNDg2LDcgKzQ4NCw3IEBAIHZvaWQgUmVuZGVySW1hZ2U6OmxheW91dCgpCiAK
IEhUTUxNYXBFbGVtZW50SW1wbCogUmVuZGVySW1hZ2U6OmltYWdlTWFwKCkKIHsKLSAgICBIVE1M
SW1hZ2VFbGVtZW50SW1wbCogaSA9IGVsZW1lbnQoKS0+aWQoKSA9PSBJRF9JTUcgPyBzdGF0aWNf
Y2FzdDxIVE1MSW1hZ2VFbGVtZW50SW1wbCo+KGVsZW1lbnQoKSkgOiAwOworICAgIEhUTUxJbWFn
ZUVsZW1lbnRJbXBsKiBpID0gZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW1nKCkp
ID8gc3RhdGljX2Nhc3Q8SFRNTEltYWdlRWxlbWVudEltcGwqPihlbGVtZW50KCkpIDogMDsKICAg
ICByZXR1cm4gaSA/IGktPmdldERvY3VtZW50KCktPmdldEltYWdlTWFwKGktPmltYWdlTWFwKCkp
IDogMDsKIH0KIApAQCAtNTEyLDkgKzUxMCw5IEBAIGJvb2wgUmVuZGVySW1hZ2U6Om5vZGVBdFBv
aW50KE5vZGVJbmZvJiAKIAogdm9pZCBSZW5kZXJJbWFnZTo6dXBkYXRlQWx0VGV4dCgpCiB7Ci0g
ICAgaWYgKGVsZW1lbnQoKS0+aWQoKSA9PSBJRF9JTlBVVCkKKyAgICBpZiAoZWxlbWVudCgpLT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6aW5wdXQoKSkpCiAgICAgICAgIGFsdCA9IHN0YXRpY19jYXN0
PEhUTUxJbnB1dEVsZW1lbnRJbXBsKj4oZWxlbWVudCgpKS0+YWx0VGV4dCgpOwotICAgIGVsc2Ug
aWYgKGVsZW1lbnQoKS0+aWQoKSA9PSBJRF9JTUcpCisgICAgZWxzZSBpZiAoZWxlbWVudCgpLT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6aW1nKCkpKQogICAgICAgICBhbHQgPSBzdGF0aWNfY2FzdDxI
VE1MSW1hZ2VFbGVtZW50SW1wbCo+KGVsZW1lbnQoKSktPmFsdFRleHQoKTsKIH0KIApJbmRleDog
a2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9pbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9XZWJDb3JlL2todG1sL3JlbmRlcmluZy9yZW5kZXJfaW1hZ2UuaCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS4yNwpkaWZmIC11IC1wIC1yMS4yNyBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2lt
YWdlLmgKLS0tIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfaW1hZ2UuaAkyNSBGZWIgMjAwNSAwMDoy
NToxMiAtMDAwMAkxLjI3CisrKyBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2ltYWdlLmgJOSBKdWwg
MjAwNSAwMjo0MzoyMyAtMDAwMApAQCAtMjMsNyArMjMsNiBAQAogI2lmbmRlZiBSRU5ERVJfSU1B
R0VfSAogI2RlZmluZSBSRU5ERVJfSU1BR0VfSAogCi0jaW5jbHVkZSAiaHRtbC9kdGQuaCIKICNp
bmNsdWRlICJodG1sL2h0bWxfZWxlbWVudGltcGwuaCIKICNpbmNsdWRlICJyZW5kZXJpbmcvcmVu
ZGVyX3JlcGxhY2VkLmgiCiAjaW5jbHVkZSAiZG9tL2RvbV9zdHJpbmcuaCIKSW5kZXg6IGtodG1s
L3JlbmRlcmluZy9yZW5kZXJfbGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9XZWJDb3JlL2todG1sL3JlbmRlcmluZy9yZW5kZXJfbGF5ZXIuY3BwLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjk2CmRpZmYgLXUgLXAgLXIxLjk2IGtodG1sL3JlbmRlcmluZy9yZW5kZXJfbGF5
ZXIuY3BwCi0tLSBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2xheWVyLmNwcAkxMCBNYXkgMjAwNSAy
MjoyNTowNCAtMDAwMAkxLjk2CisrKyBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2xheWVyLmNwcAk5
IEp1bCAyMDA1IDAyOjQzOjI0IC0wMDAwCkBAIC00OSw3ICs0OSw2IEBACiAjaW5jbHVkZSAicmVu
ZGVyX2FyZW5hLmgiCiAjaW5jbHVkZSAieG1sL2RvbV9kb2NpbXBsLmgiCiAjaW5jbHVkZSAieG1s
L2RvbTJfZXZlbnRzaW1wbC5oIgotI2luY2x1ZGUgIm1pc2MvaHRtbHRhZ3MuaCIKICNpbmNsdWRl
ICJodG1sL2h0bWxfYmxvY2tpbXBsLmgiCiAKICNpbmNsdWRlIDxxc2Nyb2xsYmFyLmg+CkBAIC0x
NDY3LDcgKzE0NjYsNyBAQCBpbnQgTWFycXVlZTo6bWFycXVlZVNwZWVkKCkgY29uc3QKIHsKICAg
ICBpbnQgcmVzdWx0ID0gbV9sYXllci0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+bWFycXVlZVNwZWVk
KCk7CiAgICAgRE9NOjpOb2RlSW1wbCogZWx0ID0gbV9sYXllci0+cmVuZGVyZXIoKS0+ZWxlbWVu
dCgpOwotICAgIGlmIChlbHQgJiYgZWx0LT5pZCgpID09IElEX01BUlFVRUUpIHsKKyAgICBpZiAo
ZWx0ICYmIGVsdC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om1hcnF1ZWUoKSkpIHsKICAgICAgICAg
SFRNTE1hcnF1ZWVFbGVtZW50SW1wbCogbWFycXVlZUVsdCA9IHN0YXRpY19jYXN0PEhUTUxNYXJx
dWVlRWxlbWVudEltcGwqPihlbHQpOwogICAgICAgICByZXN1bHQgPSBrTWF4KHJlc3VsdCwgbWFy
cXVlZUVsdC0+bWluaW11bURlbGF5KCkpOwogICAgIH0KSW5kZXg6IGtodG1sL3JlbmRlcmluZy9y
ZW5kZXJfbGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0
bWwvcmVuZGVyaW5nL3JlbmRlcl9saW5lLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40Mwpk
aWZmIC11IC1wIC1yMS40MyBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2xpbmUuY3BwCi0tLSBraHRt
bC9yZW5kZXJpbmcvcmVuZGVyX2xpbmUuY3BwCTUgSnVsIDIwMDUgMjM6MjE6MTIgLTAwMDAJMS40
MworKysga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9saW5lLmNwcAk5IEp1bCAyMDA1IDAyOjQzOjI2
IC0wMDAwCkBAIC0zNyw3ICszNyw2IEBACiAjaW5jbHVkZSAicmVuZGVyX2xpbmUuaCIKIAogI2lu
Y2x1ZGUgImtodG1sdmlldy5oIgotI2luY2x1ZGUgImh0bWx0YWdzLmgiCiAKIHVzaW5nIG5hbWVz
cGFjZSBET007CiAKSW5kZXg6IGtodG1sL3JlbmRlcmluZy9yZW5kZXJfbGlzdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9s
aXN0LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS42MgpkaWZmIC11IC1wIC1yMS42MiBraHRt
bC9yZW5kZXJpbmcvcmVuZGVyX2xpc3QuY3BwCi0tLSBraHRtbC9yZW5kZXJpbmcvcmVuZGVyX2xp
c3QuY3BwCTUgSnVsIDIwMDUgMjM6MjE6MTIgLTAwMDAJMS42MgorKysga2h0bWwvcmVuZGVyaW5n
L3JlbmRlcl9saXN0LmNwcAk5IEp1bCAyMDA1IDAyOjQzOjI2IC0wMDAwCkBAIC0yNiw3ICsyNiw4
IEBACiAjaW5jbHVkZSAicmVuZGVyaW5nL3JlbmRlcl9jYW52YXMuaCIKIAogI2luY2x1ZGUgInht
bC9kb21fZG9jaW1wbC5oIgotI2luY2x1ZGUgIm1pc2MvaHRtbHRhZ3MuaCIKKworI2luY2x1ZGUg
Imh0bWxuYW1lcy5oIgogCiAjaW5jbHVkZSA8cXBhaW50ZXIuaD4KIApAQCAtMzcsNiArMzgsNyBA
QAogLy8jZGVmaW5lIEJPWF9ERUJVRwogCiB1c2luZyBET006OkRvY3VtZW50SW1wbDsKK3VzaW5n
IERPTTo6SFRNTE5hbWVzOwogdXNpbmcgbmFtZXNwYWNlIGtodG1sOwogCiBjb25zdCBpbnQgY01h
cmtlclBhZGRpbmcgPSA3OwpAQCAtMjEzLDcgKzIxNSw3IEBAIHN0YXRpYyBSZW5kZXJPYmplY3Qq
IGdldFBhcmVudE9mRmlyc3RMaW4KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICAg
ICAgaWYgKGN1cnJDaGlsZC0+c3R5bGUoKS0+aHRtbEhhY2tzKCkgJiYgY3VyckNoaWxkLT5lbGVt
ZW50KCkgJiYKLSAgICAgICAgICAgIChjdXJyQ2hpbGQtPmVsZW1lbnQoKS0+aWQoKSA9PSBJRF9V
TCB8fCBjdXJyQ2hpbGQtPmVsZW1lbnQoKS0+aWQoKSA9PSBJRF9PTCkpCisgICAgICAgICAgICAo
Y3VyckNoaWxkLT5lbGVtZW50KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp1bCgpKXx8IGN1cnJD
aGlsZC0+ZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b2woKSkpKQogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgUmVuZGVyT2JqZWN0KiBsaW5lQm94ID0g
Z2V0UGFyZW50T2ZGaXJzdExpbmVCb3goY3VyckNoaWxkLCBtYXJrZXIpOwpJbmRleDoga2h0bWwv
cmVuZGVyaW5nL3JlbmRlcl9vYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9XZWJDb3JlL2todG1sL3JlbmRlcmluZy9yZW5kZXJfb2JqZWN0LmNwcCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS4xOTcKZGlmZiAtdSAtcCAtcjEuMTk3IGtodG1sL3JlbmRlcmluZy9yZW5kZXJf
b2JqZWN0LmNwcAotLS0ga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9vYmplY3QuY3BwCTUgSnVsIDIw
MDUgMjM6MjE6MTIgLTAwMDAJMS4xOTcKKysrIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfb2JqZWN0
LmNwcAk5IEp1bCAyMDA1IDAyOjQzOjI4IC0wMDAwCkBAIC00Myw2ICs0Myw3IEBACiAjaW5jbHVk
ZSAicmVuZGVyX2lubGluZS5oIgogI2luY2x1ZGUgInJlbmRlcl9ibG9jay5oIgogI2luY2x1ZGUg
InJlbmRlcl9mbGV4Ym94LmgiCisjaW5jbHVkZSAiaHRtbG5hbWVzLmgiCiAKICNpZiBBUFBMRV9D
SEFOR0VTCiAvLyBGb3IgYWNjZXNzaWJpbGl0eQpAQCAtMTc1LDE3ICsxNzYsMTcgQEAgYm9vbCBS
ZW5kZXJPYmplY3Q6OmlzUm9vdCgpIGNvbnN0CiAKIGJvb2wgUmVuZGVyT2JqZWN0Ojppc0JvZHko
KSBjb25zdAogewotICAgIHJldHVybiBlbGVtZW50KCkgJiYgZWxlbWVudCgpLT5yZW5kZXJlcigp
ID09IHRoaXMgJiYgZWxlbWVudCgpLT5pZCgpID09IElEX0JPRFk7CisgICAgcmV0dXJuIGVsZW1l
bnQoKSAmJiBlbGVtZW50KCktPnJlbmRlcmVyKCkgPT0gdGhpcyAmJiBlbGVtZW50KCktPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjpib2R5KCkpOwogfQogCiBib29sIFJlbmRlck9iamVjdDo6aXNIUigp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIGVsZW1lbnQoKSAmJiBlbGVtZW50KCktPmlkKCkgPT0gSURf
SFI7CisgICAgcmV0dXJuIGVsZW1lbnQoKSAmJiBlbGVtZW50KCktPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjpocigpKTsKIH0KIAogYm9vbCBSZW5kZXJPYmplY3Q6OmlzSFRNTE1hcnF1ZWUoKSBjb25z
dAogewotICAgIHJldHVybiBlbGVtZW50KCkgJiYgZWxlbWVudCgpLT5yZW5kZXJlcigpID09IHRo
aXMgJiYgZWxlbWVudCgpLT5pZCgpID09IElEX01BUlFVRUU7CisgICAgcmV0dXJuIGVsZW1lbnQo
KSAmJiBlbGVtZW50KCktPnJlbmRlcmVyKCkgPT0gdGhpcyAmJiBlbGVtZW50KCktPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjptYXJxdWVlKCkpOwogfQogCiBib29sIFJlbmRlck9iamVjdDo6Y2FuSGF2
ZUNoaWxkcmVuKCkgY29uc3QKQEAgLTczNyw3ICs3MzgsNyBAQCBib29sIFJlbmRlck9iamVjdDo6
c2l6ZXNUb01heFdpZHRoKCkgY29uCiAgICAgLy8gYnV0IHRoZXkgYWxsb3cgdGV4dCB0byBzaXQg
b24gdGhlIHNhbWUgbGluZSBhcyB0aGUgbWFycXVlZS4KICAgICBpZiAoaXNGbG9hdGluZygpIHx8
IChpc0NvbXBhY3QoKSAmJiBpc0lubGluZSgpKSB8fCAKICAgICAgICAgKGlzSW5saW5lQmxvY2tP
cklubGluZVRhYmxlKCkgJiYgIWlzSFRNTE1hcnF1ZWUoKSkgfHwKLSAgICAgICAgKGVsZW1lbnQo
KSAmJiAoZWxlbWVudCgpLT5pZCgpID09IElEX0JVVFRPTiB8fCBlbGVtZW50KCktPmlkKCkgPT0g
SURfTEVHRU5EKSkpCisgICAgICAgIChlbGVtZW50KCkgJiYgKGVsZW1lbnQoKS0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OmJ1dHRvbigpKSB8fCBlbGVtZW50KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjpsZWdlbmQoKSkpKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgCiAgICAgLy8gQ2hpbGRy
ZW4gb2YgYSBob3Jpem9udGFsIG1hcnF1ZWUgZG8gbm90IGZpbGwgdGhlIGNvbnRhaW5lciBieSBk
ZWZhdWx0LgpAQCAtMTMyNiw3ICsxMzI3LDcgQEAgUVN0cmluZyBSZW5kZXJPYmplY3Q6OmluZm9y
bWF0aW9uKCkgY29ucwogICAgIGlmIChlbGVtZW50KCkgJiYgZWxlbWVudCgpLT5hY3RpdmUoKSkg
dHMgPDwgImFjdCAiOwogICAgIGlmIChlbGVtZW50KCkgJiYgZWxlbWVudCgpLT5pc0xpbmsoKSkg
dHMgPDwgImFuY2hvciAiOwogICAgIGlmIChlbGVtZW50KCkgJiYgZWxlbWVudCgpLT5mb2N1c2Vk
KCkpIHRzIDw8ICJmb2N1cyAiOwotICAgIGlmIChlbGVtZW50KCkpIHRzIDw8ICIgPCIgPDwgIGdl
dFRhZ05hbWUoZWxlbWVudCgpLT5pZCgpKS5zdHJpbmcoKSA8PCAiPiI7CisgICAgaWYgKGVsZW1l
bnQoKSkgdHMgPDwgIiA8IiA8PCAgZWxlbWVudCgpLT5sb2NhbE5hbWUoKS5zdHJpbmcoKSA8PCAi
PiI7CiAgICAgdHMgPDwgIiAoIiA8PCB4UG9zKCkgPDwgIiwiIDw8IHlQb3MoKSA8PCAiLCIgPDwg
d2lkdGgoKSA8PCAiLCIgPDwgaGVpZ2h0KCkgPDwgIikiCiAJPDwgKGlzVGFibGVDZWxsKCkgPwog
CSAgICAoIFFTdHJpbmc6OmZyb21MYXRpbjEoIiBbcj0iKSArCkBAIC0xNTU2LDcgKzE1NTcsNyBA
QCB2b2lkIFJlbmRlck9iamVjdDo6c2V0U3R5bGUoUmVuZGVyU3R5bGUgCiAgICAgICAgIC8vIFRo
ZSBiYWNrZ3JvdW5kIG9mIHRoZSByb290IGVsZW1lbnQgb3IgdGhlIGJvZHkgZWxlbWVudCBjb3Vs
ZCBwcm9wYWdhdGUgdXAgdG8KICAgICAgICAgLy8gdGhlIGNhbnZhcy4gIEp1c3QgZGlydHkgdGhl
IGVudGlyZSBjYW52YXMgd2hlbiBvdXIgc3R5bGUgY2hhbmdlcyBzdWJzdGFudGlhbGx5LgogICAg
ICAgICBpZiAoZCA+PSBSZW5kZXJTdHlsZTo6UmVwYWludCAmJiBlbGVtZW50KCkgJiYKLSAgICAg
ICAgICAgIChlbGVtZW50KCktPmlkKCkgPT0gSURfSFRNTCB8fCBlbGVtZW50KCktPmlkKCkgPT0g
SURfQk9EWSkpCisgICAgICAgICAgICAoZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
aHRtbCgpKSB8fCBlbGVtZW50KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpib2R5KCkpKSkKICAg
ICAgICAgICAgIGNhbnZhcygpLT5yZXBhaW50KCk7CiAgICAgICAgIGVsc2UgaWYgKG1fcGFyZW50
ICYmICFpc1RleHQoKSkgewogICAgICAgICAgICAgLy8gRG8gYSByZXBhaW50IHdpdGggdGhlIG9s
ZCBzdHlsZSBmaXJzdCwgZS5nLiwgZm9yIGV4YW1wbGUgaWYgd2UgZ28gZnJvbQpAQCAtMjE4OCw3
ICsyMTg5LDcgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OmdldFRleHREZWNvcmF0aW9uQ29sbwogICAg
ICAgICBpZiAoY3VyciAmJiBjdXJyLT5pc1JlbmRlckJsb2NrKCkgJiYgY3Vyci0+Y29udGludWF0
aW9uKCkpCiAgICAgICAgICAgICBjdXJyID0gY3Vyci0+Y29udGludWF0aW9uKCk7CiAgICAgfSB3
aGlsZSAoY3VyciAmJiBkZWNvcmF0aW9ucyAmJiAoIXF1aXJrc01vZGUgfHwgIWN1cnItPmVsZW1l
bnQoKSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjdXJyLT5lbGVt
ZW50KCktPmlkKCkgIT0gSURfQSAmJiBjdXJyLT5lbGVtZW50KCktPmlkKCkgIT0gSURfRk9OVCkp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIWN1cnItPmVsZW1lbnQo
KS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmEoKSkgJiYgIWN1cnItPmVsZW1lbnQoKS0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OmZvbnQoKSkpKSk7CiAKICAgICAvLyBJZiB3ZSBiYWlsZWQgb3V0LCB1
c2UgdGhlIGVsZW1lbnQgd2UgYmFpbGVkIG91dCBhdCAodHlwaWNhbGx5IGEgPGZvbnQ+IG9yIDxh
PiBlbGVtZW50KS4KICAgICBpZiAoZGVjb3JhdGlvbnMgJiYgY3VycikgewpAQCAtMjMyMiw3ICsy
MzIzLDcgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OnNldFBpeG1hcChjb25zdCBRUGl4bQogICAgIC8v
IHdvdWxkIGF2b2lkIHB1dHRpbmcgdGhpcyBmdW5jdGlvbiBhbmQgdGhlIENhY2hlZE9iamVjdENs
aWVudCBiYXNlIGNsYXNzIGludG8gUmVuZGVyT2JqZWN0LgogCiAgICAgaWYgKGltYWdlICYmIGlt
YWdlLT5waXhtYXBfc2l6ZSgpID09IGltYWdlLT52YWxpZF9yZWN0KCkuc2l6ZSgpICYmIHBhcmVu
dCgpKSB7Ci0gICAgICAgIGlmIChjYW52YXMoKSAmJiBlbGVtZW50KCkgJiYgKGVsZW1lbnQoKS0+
aWQoKSA9PSBJRF9IVE1MIHx8IGVsZW1lbnQoKS0+aWQoKSA9PSBJRF9CT0RZKSkKKyAgICAgICAg
aWYgKGNhbnZhcygpICYmIGVsZW1lbnQoKSAmJiAoZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6aHRtbCgpKSB8fCBlbGVtZW50KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpib2R5KCkp
KSkKICAgICAgICAgICAgIGNhbnZhcygpLT5yZXBhaW50KCk7ICAgIC8vIHJlcGFpbnQgdGhlIGVu
dGlyZSBjYW52YXMgc2luY2UgdGhlIGJhY2tncm91bmQgZ2V0cyBwcm9wYWdhdGVkIHVwCiAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgIHJlcGFpbnQoKTsgICAgICAgICAgICAgIC8vIHJlcGFpbnQg
b2JqZWN0LCB3aGljaCBpcyBhIGJveCBvciBhIGNvbnRhaW5lciB3aXRoIGJveGVzIGluc2lkZSBp
dApJbmRleDoga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9zdHlsZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9zdHlsZS5jcHAs
dgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNjYKZGlmZiAtdSAtcCAtcjEuNjYga2h0bWwvcmVuZGVy
aW5nL3JlbmRlcl9zdHlsZS5jcHAKLS0tIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfc3R5bGUuY3Bw
CTExIEp1biAyMDA1IDAxOjU4OjAyIC0wMDAwCTEuNjYKKysrIGtodG1sL3JlbmRlcmluZy9yZW5k
ZXJfc3R5bGUuY3BwCTkgSnVsIDIwMDUgMDI6NDM6MjggLTAwMDAKQEAgLTYwNyw2ICs2MDcsOSBA
QCB2b2lkIFJlbmRlclN0eWxlOjpzZXRIYXNQc2V1ZG9TdHlsZShQc2V1CiAKIFJlbmRlclN0eWxl
KiBSZW5kZXJTdHlsZTo6Z2V0UHNldWRvU3R5bGUoUHNldWRvSWQgcGlkKQogeworICAgIGlmICgh
cHNldWRvU3R5bGUpCisgICAgICAgIHJldHVybiAwOworCiAgICAgUmVuZGVyU3R5bGUgKnBzID0g
MDsKICAgICBpZiAobm9uaW5oZXJpdGVkX2ZsYWdzLl9zdHlsZVR5cGU9PU5PUFNFVURPKSB7CiAJ
cHMgPSBwc2V1ZG9TdHlsZTsKSW5kZXg6IGtodG1sL3JlbmRlcmluZy9yZW5kZXJfc3R5bGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9yZW5kZXJpbmcvcmVu
ZGVyX3N0eWxlLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuODIKZGlmZiAtdSAtcCAtcjEuODIg
a2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9zdHlsZS5oCi0tLSBraHRtbC9yZW5kZXJpbmcvcmVuZGVy
X3N0eWxlLmgJMTIgTWF5IDIwMDUgMTc6MTE6MjIgLTAwMDAJMS44MgorKysga2h0bWwvcmVuZGVy
aW5nL3JlbmRlcl9zdHlsZS5oCTkgSnVsIDIwMDUgMDI6NDM6MzAgLTAwMDAKQEAgLTI5OSw4ICsy
OTksMTAgQEAgY2xhc3MgU3R5bGVTdXJyb3VuZERhdGEgOiBwdWJsaWMgU2hhcmVkPAogewogcHVi
bGljOgogICAgIFN0eWxlU3Vycm91bmREYXRhKCk7CisgICAgU3R5bGVTdXJyb3VuZERhdGEoY29u
c3QgU3R5bGVTdXJyb3VuZERhdGEmIG8pOworICAgIAorICAgIE1BSU5fVEhSRUFEX0FMTE9DQVRF
RDsKIAotICAgIFN0eWxlU3Vycm91bmREYXRhKGNvbnN0IFN0eWxlU3Vycm91bmREYXRhJiBvICk7
CiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFN0eWxlU3Vycm91bmREYXRhJiBvKSBjb25zdDsK
ICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgU3R5bGVTdXJyb3VuZERhdGEmIG8pIGNvbnN0IHsK
ICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gbyk7CkBAIC0zMjAsOSArMzIyLDkgQEAgY2xhc3Mg
U3R5bGVCb3hEYXRhIDogcHVibGljIFNoYXJlZDxTdHlsZQogewogcHVibGljOgogICAgIFN0eWxl
Qm94RGF0YSgpOworICAgIFN0eWxlQm94RGF0YShjb25zdCBTdHlsZUJveERhdGEmIG8pOwogCi0g
ICAgU3R5bGVCb3hEYXRhKGNvbnN0IFN0eWxlQm94RGF0YSYgbyApOwotCisgICAgTUFJTl9USFJF
QURfQUxMT0NBVEVEOwogCiAgICAgLy8gY29weSBhbmQgYXNzaWdubWVudAogLy8gICAgU3R5bGVC
b3hEYXRhKGNvbnN0IFN0eWxlQm94RGF0YSAmb3RoZXIpOwpAQCAtMzk5LDExICs0MDEsMTEgQEAg
Y2xhc3MgU3R5bGVWaXN1YWxEYXRhIDogcHVibGljIFNoYXJlZDxTdAogewogcHVibGljOgogICAg
IFN0eWxlVmlzdWFsRGF0YSgpOwotCiAgICAgflN0eWxlVmlzdWFsRGF0YSgpOwotCiAgICAgU3R5
bGVWaXN1YWxEYXRhKGNvbnN0IFN0eWxlVmlzdWFsRGF0YSYgbyApOwogCisgICAgTUFJTl9USFJF
QURfQUxMT0NBVEVEOworCiAgICAgYm9vbCBvcGVyYXRvcj09KCBjb25zdCBTdHlsZVZpc3VhbERh
dGEgJm8gKSBjb25zdCB7CiAJcmV0dXJuICggY2xpcCA9PSBvLmNsaXAgJiYKICAgICAgICAgICAg
ICAgICAgaGFzQ2xpcCA9PSBvLmhhc0NsaXAgJiYKQEAgLTUyMSw2ICs1MjMsOCBAQCBwdWJsaWM6
CiAgICAgflN0eWxlQmFja2dyb3VuZERhdGEoKSB7fQogICAgIFN0eWxlQmFja2dyb3VuZERhdGEo
Y29uc3QgU3R5bGVCYWNrZ3JvdW5kRGF0YSYgbyApOwogCisgICAgTUFJTl9USFJFQURfQUxMT0NB
VEVEOworCiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFN0eWxlQmFja2dyb3VuZERhdGEmIG8p
IGNvbnN0OwogICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBTdHlsZUJhY2tncm91bmREYXRhICZv
KSBjb25zdCB7CiAJcmV0dXJuICEoKnRoaXMgPT0gbyk7CkBAIC01NDMsNiArNTQ3LDggQEAgcHVi
bGljOgogICAgIFN0eWxlTWFycXVlZURhdGEoKTsKICAgICBTdHlsZU1hcnF1ZWVEYXRhKGNvbnN0
IFN0eWxlTWFycXVlZURhdGEmIG8pOwogICAgIAorICAgIE1BSU5fVEhSRUFEX0FMTE9DQVRFRDsK
KwogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTdHlsZU1hcnF1ZWVEYXRhJiBvKSBjb25zdDsK
ICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgU3R5bGVNYXJxdWVlRGF0YSYgbykgY29uc3Qgewog
ICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvKTsKQEAgLTU3MSw2ICs1NzcsOCBAQCBwdWJsaWM6
CiAgICAgU3R5bGVGbGV4aWJsZUJveERhdGEoKTsKICAgICBTdHlsZUZsZXhpYmxlQm94RGF0YShj
b25zdCBTdHlsZUZsZXhpYmxlQm94RGF0YSYgbyk7CiAKKyAgICBNQUlOX1RIUkVBRF9BTExPQ0FU
RUQ7CisKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgU3R5bGVGbGV4aWJsZUJveERhdGEmIG8p
IGNvbnN0OwogICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBTdHlsZUZsZXhpYmxlQm94RGF0YSAm
bykgY29uc3QgewogICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvKTsKQEAgLTY3Nyw2ICs2ODUs
OCBAQCBwdWJsaWM6CiAgICAgflN0eWxlQ1NTM05vbkluaGVyaXRlZERhdGEoKTsKICAgICBTdHls
ZUNTUzNOb25Jbmhlcml0ZWREYXRhKGNvbnN0IFN0eWxlQ1NTM05vbkluaGVyaXRlZERhdGEmIG8p
OwogCisgICAgTUFJTl9USFJFQURfQUxMT0NBVEVEOworCiAjaWZuZGVmIEtIVE1MX05PX1hCTAog
ICAgIGJvb2wgYmluZGluZ3NFcXVpdmFsZW50KGNvbnN0IFN0eWxlQ1NTM05vbkluaGVyaXRlZERh
dGEmIG8pIGNvbnN0OwogI2VuZGlmCkBAIC03MTUsNiArNzI1LDggQEAgcHVibGljOgogICAgIH5T
dHlsZUNTUzNJbmhlcml0ZWREYXRhKCk7CiAgICAgU3R5bGVDU1MzSW5oZXJpdGVkRGF0YShjb25z
dCBTdHlsZUNTUzNJbmhlcml0ZWREYXRhJiBvKTsKIAorICAgIE1BSU5fVEhSRUFEX0FMTE9DQVRF
RDsKKwogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTdHlsZUNTUzNJbmhlcml0ZWREYXRhJiBv
KSBjb25zdDsKICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgU3R5bGVDU1MzSW5oZXJpdGVkRGF0
YSAmbykgY29uc3QgewogICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvKTsKQEAgLTc2OSw2ICs3
ODEsOCBAQCBwdWJsaWM6CiAgICAgflN0eWxlSW5oZXJpdGVkRGF0YSgpOwogICAgIFN0eWxlSW5o
ZXJpdGVkRGF0YShjb25zdCBTdHlsZUluaGVyaXRlZERhdGEmIG8gKTsKIAorICAgIE1BSU5fVEhS
RUFEX0FMTE9DQVRFRDsKKyAgICAKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgU3R5bGVJbmhl
cml0ZWREYXRhJiBvKSBjb25zdDsKICAgICBib29sIG9wZXJhdG9yICE9ICggY29uc3QgU3R5bGVJ
bmhlcml0ZWREYXRhICZvICkgY29uc3QgewogCXJldHVybiAhKCp0aGlzID09IG8pOwpJbmRleDog
a2h0bWwvcmVuZGVyaW5nL3JlbmRlcl90YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2
cy9yb290L1dlYkNvcmUva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl90YWJsZS5jcHAsdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuMTI2CmRpZmYgLXUgLXAgLXIxLjEyNiBraHRtbC9yZW5kZXJpbmcvcmVu
ZGVyX3RhYmxlLmNwcAotLS0ga2h0bWwvcmVuZGVyaW5nL3JlbmRlcl90YWJsZS5jcHAJMTEgTWF5
IDIwMDUgMDI6MTA6MTAgLTAwMDAJMS4xMjYKKysrIGtodG1sL3JlbmRlcmluZy9yZW5kZXJfdGFi
bGUuY3BwCTkgSnVsIDIwMDUgMDI6NDM6MzEgLTAwMDAKQEAgLTMxLDggKzMxLDggQEAKICNpbmNs
dWRlICJyZW5kZXJpbmcvcmVuZGVyX3RhYmxlLmgiCiAjaW5jbHVkZSAicmVuZGVyaW5nL3RhYmxl
X2xheW91dC5oIgogI2luY2x1ZGUgImh0bWwvaHRtbF90YWJsZWltcGwuaCIKLSNpbmNsdWRlICJt
aXNjL2h0bWx0YWdzLmgiCiAjaW5jbHVkZSAibWlzYy9odG1sYXR0cnMuaCIKKyNpbmNsdWRlICJo
dG1sbmFtZXMuaCIKICNpbmNsdWRlICJ4bWwvZG9tX2RvY2ltcGwuaCIKIAogI2luY2x1ZGUgPGtn
bG9iYWwuaD4KQEAgLTExMiw3ICsxMTIsNyBAQCB2b2lkIFJlbmRlclRhYmxlOjphZGRDaGlsZChS
ZW5kZXJPYmplY3QgCiAjZW5kaWYKICAgICBSZW5kZXJPYmplY3QgKm8gPSBjaGlsZDsKIAotICAg
IGlmIChjaGlsZC0+ZWxlbWVudCgpICYmIGNoaWxkLT5lbGVtZW50KCktPmlkKCkgPT0gSURfRk9S
TSkgeworICAgIGlmIChjaGlsZC0+ZWxlbWVudCgpICYmIGNoaWxkLT5lbGVtZW50KCktPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjpmb3JtKCkpKSB7CiAgICAgICAgIFJlbmRlckNvbnRhaW5lcjo6YWRk
Q2hpbGQoY2hpbGQsYmVmb3JlQ2hpbGQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMjYy
LDcgKzI2Miw3IEBAIHZvaWQgUmVuZGVyVGFibGU6OmxheW91dCgpCiAKICAgICBSZW5kZXJPYmpl
Y3QgKmNoaWxkID0gZmlyc3RDaGlsZCgpOwogICAgIHdoaWxlKCBjaGlsZCApIHsKLQlpZiAoIGNo
aWxkLT5uZWVkc0xheW91dCgpICYmICEoY2hpbGQtPmVsZW1lbnQoKSAmJiBjaGlsZC0+ZWxlbWVu
dCgpLT5pZCgpID09IElEX0ZPUk0pKQorCWlmICggY2hpbGQtPm5lZWRzTGF5b3V0KCkgJiYgIShj
aGlsZC0+ZWxlbWVudCgpICYmIGNoaWxkLT5lbGVtZW50KCktPmhhc1RhZ05hbWUoSFRNTE5hbWVz
Ojpmb3JtKCkpKSkKIAkgICAgY2hpbGQtPmxheW91dCgpOwogCWlmICggY2hpbGQtPmlzVGFibGVT
ZWN0aW9uKCkgKSB7CiAJICAgIHN0YXRpY19jYXN0PFJlbmRlclRhYmxlU2VjdGlvbiAqPihjaGls
ZCktPmNhbGNSb3dIZWlnaHQoKTsKQEAgLTg0OSw3ICs4NDksNyBAQCB2b2lkIFJlbmRlclRhYmxl
U2VjdGlvbjo6YWRkQ2hpbGQoUmVuZGVyCiAjZW5kaWYKICAgICBSZW5kZXJPYmplY3QgKnJvdyA9
IGNoaWxkOwogCi0gICAgaWYgKGNoaWxkLT5lbGVtZW50KCkgJiYgY2hpbGQtPmVsZW1lbnQoKS0+
aWQoKSA9PSBJRF9GT1JNKSB7CisgICAgaWYgKGNoaWxkLT5lbGVtZW50KCkgJiYgY2hpbGQtPmVs
ZW1lbnQoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZvcm0oKSkpIHsKICAgICAgICAgUmVuZGVy
Q29udGFpbmVyOjphZGRDaGlsZChjaGlsZCxiZWZvcmVDaGlsZCk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CkBAIC0xNDk1LDcgKzE0OTUsNyBAQCB2b2lkIFJlbmRlclRhYmxlUm93OjphZGRDaGls
ZChSZW5kZXJPYmplCiAgICAga2REZWJ1ZyggNjA0MCApIDw8IHJlbmRlck5hbWUoKSA8PCAiKFRh
YmxlUm93KTo6YWRkQ2hpbGQoICIgPDwgY2hpbGQtPnJlbmRlck5hbWUoKSA8PCAiICkiICA8PCAi
LCAiIDw8CiAgICAgICAgICAgICAgICAgICAgICAgIChiZWZvcmVDaGlsZCA/IGJlZm9yZUNoaWxk
LT5yZW5kZXJOYW1lKCkgOiAiMCIpIDw8ICIgKSIgPDwgZW5kbDsKICNlbmRpZgotICAgIGlmIChj
aGlsZC0+ZWxlbWVudCgpICYmIGNoaWxkLT5lbGVtZW50KCktPmlkKCkgPT0gSURfRk9STSkgewor
ICAgIGlmIChjaGlsZC0+ZWxlbWVudCgpICYmIGNoaWxkLT5lbGVtZW50KCktPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjpmb3JtKCkpKSB7CiAgICAgICAgIFJlbmRlckNvbnRhaW5lcjo6YWRkQ2hpbGQo
Y2hpbGQsYmVmb3JlQ2hpbGQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTYwNiw3ICsx
NjA2LDcgQEAgdm9pZCBSZW5kZXJUYWJsZUNlbGw6OnVwZGF0ZUZyb21FbGVtZW50KAogICAgIGlu
dCBvbGRSU3BhbiA9IHJTcGFuOwogICAgIGludCBvbGRDU3BhbiA9IGNTcGFuOwogICAgIERPTTo6
Tm9kZUltcGwqIG5vZGUgPSBlbGVtZW50KCk7Ci0gICAgaWYgKG5vZGUgJiYgKG5vZGUtPmlkKCkg
PT0gSURfVEQgfHwgbm9kZS0+aWQoKSA9PSBJRF9USCkpIHsKKyAgICBpZiAobm9kZSAmJiAobm9k
ZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRkKCkpIHx8IG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjp0aCgpKSkpIHsKICAgICAgICAgRE9NOjpIVE1MVGFibGVDZWxsRWxlbWVudEltcGwgKnRj
ID0gc3RhdGljX2Nhc3Q8RE9NOjpIVE1MVGFibGVDZWxsRWxlbWVudEltcGwgKj4obm9kZSk7CiAg
ICAgICAgIGNTcGFuID0gdGMtPmNvbFNwYW4oKTsKICAgICAgICAgclNwYW4gPSB0Yy0+cm93U3Bh
bigpOwpAQCAtMjI5MCw3ICsyMjkwLDcgQEAgdm9pZCBSZW5kZXJUYWJsZUNvbDo6dXBkYXRlRnJv
bUVsZW1lbnQoKQogewogICAgIGludCBvbGRTcGFuID0gX3NwYW47CiAgICAgRE9NOjpOb2RlSW1w
bCAqbm9kZSA9IGVsZW1lbnQoKTsKLSAgICBpZiAobm9kZSAmJiAobm9kZS0+aWQoKSA9PSBJRF9D
T0wgfHwgbm9kZS0+aWQoKSA9PSBJRF9DT0xHUk9VUCkpIHsKKyAgICBpZiAobm9kZSAmJiAobm9k
ZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmNvbCgpKSB8fCBub2RlLT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6Y29sZ3JvdXAoKSkpKSB7CiAgICAgICAgIERPTTo6SFRNTFRhYmxlQ29sRWxlbWVudElt
cGwgKnRjID0gc3RhdGljX2Nhc3Q8RE9NOjpIVE1MVGFibGVDb2xFbGVtZW50SW1wbCAqPihub2Rl
KTsKICAgICAgICAgX3NwYW4gPSB0Yy0+c3BhbigpOwogICAgIH0gCkluZGV4OiBraHRtbC94bWwv
ZG9tMl9yYW5nZWltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3Jl
L2todG1sL3htbC9kb20yX3JhbmdlaW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNDAK
ZGlmZiAtdSAtcCAtcjEuNDAga2h0bWwveG1sL2RvbTJfcmFuZ2VpbXBsLmNwcAotLS0ga2h0bWwv
eG1sL2RvbTJfcmFuZ2VpbXBsLmNwcAkxMyBNYXkgMjAwNSAxNjo0ODo1MSAtMDAwMAkxLjQwCisr
KyBraHRtbC94bWwvZG9tMl9yYW5nZWltcGwuY3BwCTkgSnVsIDIwMDUgMDI6NDM6MzMgLTAwMDAK
QEAgLTI5LDcgKzI5LDYgQEAKICNpbmNsdWRlICJkb21fdGV4dGltcGwuaCIKICNpbmNsdWRlICJk
b21feG1saW1wbC5oIgogI2luY2x1ZGUgImh0bWwvaHRtbF9lbGVtZW50aW1wbC5oIgotI2luY2x1
ZGUgIm1pc2MvaHRtbHRhZ3MuaCIKICNpbmNsdWRlICJlZGl0aW5nL21hcmt1cC5oIgogI2luY2x1
ZGUgImVkaXRpbmcvdmlzaWJsZV9wb3NpdGlvbi5oIgogI2luY2x1ZGUgImVkaXRpbmcvdmlzaWJs
ZV91bml0cy5oIgpJbmRleDoga2h0bWwveG1sL2RvbTJfdHJhdmVyc2FsaW1wbC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwveG1sL2RvbTJfdHJhdmVyc2Fs
aW1wbC5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTAKZGlmZiAtdSAtcCAtcjEuMTAga2h0
bWwveG1sL2RvbTJfdHJhdmVyc2FsaW1wbC5jcHAKLS0tIGtodG1sL3htbC9kb20yX3RyYXZlcnNh
bGltcGwuY3BwCTEwIE1heSAyMDA1IDIxOjU5OjE0IC0wMDAwCTEuMTAKKysrIGtodG1sL3htbC9k
b20yX3RyYXZlcnNhbGltcGwuY3BwCTkgSnVsIDIwMDUgMDI6NDM6MzMgLTAwMDAKQEAgLTI2LDgg
KzI2LDYgQEAKICNpbmNsdWRlICJkb20vZG9tX2V4Y2VwdGlvbi5oIgogI2luY2x1ZGUgInhtbC9k
b21fZG9jaW1wbC5oIgogCi0jaW5jbHVkZSAiaHRtbHRhZ3MuaCIKLQogbmFtZXNwYWNlIERPTSB7
CiAKIE5vZGVGaWx0ZXJJbXBsOjpOb2RlRmlsdGVySW1wbChOb2RlRmlsdGVyQ29uZGl0aW9uICpj
b25kaXRpb24pCkluZGV4OiBraHRtbC94bWwvZG9tX2F0b21pY3N0cmluZy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwveG1sL2RvbV9hdG9taWNzdHJpbmcu
Y3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjkKZGlmZiAtdSAtcCAtcjEuOSBraHRtbC94bWwv
ZG9tX2F0b21pY3N0cmluZy5jcHAKLS0tIGtodG1sL3htbC9kb21fYXRvbWljc3RyaW5nLmNwcAk4
IEp1bCAyMDA1IDA1OjE5OjIxIC0wMDAwCTEuOQorKysga2h0bWwveG1sL2RvbV9hdG9taWNzdHJp
bmcuY3BwCTkgSnVsIDIwMDUgMDI6NDM6MzMgLTAwMDAKQEAgLTI2LDEzICsyNiw3IEBACiAvLyBw
b3J0YWJsZSwgYW5kIGl0IHdvdWxkIGJlIGdvb2QgdG8gZmlndXJlIG91dCBhIDEwMCUgY2xlYW4g
d2F5IHRoYXQgc3RpbGwgYXZvaWRzIGNvZGUgdGhhdAogLy8gcnVucyBhdCBpbml0IHRpbWUuCiAK
LSNpZiBBUFBMRV9DSEFOR0VTCi0jZGVmaW5lIEFWT0lEX1NUQVRJQ19DT05TVFJVQ1RPUlMgMQot
I2VuZGlmCi0KLSNpZiBBVk9JRF9TVEFUSUNfQ09OU1RSVUNUT1JTCiAjZGVmaW5lIEtIVE1MX0FU
T01JQ1NUUklOR19ISURFX0dMT0JBTFMgMQotI2VuZGlmCiAKICNpbmNsdWRlICJkb21fYXRvbWlj
c3RyaW5nLmgiCiAjaW5jbHVkZSAieG1sL2RvbV9zdHJpbmdpbXBsLmgiCkBAIC01MSw5ICs0NSw2
IEBAIGlubGluZSB1bnNpZ25lZCBoYXNoKGNvbnN0IGNoYXIqIGNvbnN0JiAKIAogaW5saW5lIGJv
b2wgZXF1YWwoRE9NU3RyaW5nSW1wbCogY29uc3QmIHIsIGNvbnN0IGNoYXIqIGNvbnN0JiBzKQog
ewotICAgIGlmICghciAmJiAhcykgcmV0dXJuIHRydWU7Ci0gICAgaWYgKCFyIHx8ICFzKSByZXR1
cm4gZmFsc2U7Ci0KICAgICBpbnQgbGVuZ3RoID0gci0+bDsKICAgICBjb25zdCBRQ2hhciAqZCA9
IHItPnM7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgIT0gbGVuZ3RoOyArK2kpCkBAIC0xMDAsMTcg
KzkxLDEzIEBAIGlubGluZSB1bnNpZ25lZCBoYXNoKGNvbnN0IFFDaGFyQnVmZmVyJiAKIAogaW5s
aW5lIGJvb2wgZXF1YWwoRE9NU3RyaW5nSW1wbCogY29uc3QmIHN0ciwgY29uc3QgUUNoYXJCdWZm
ZXIgJmJ1ZikKIHsKLSAgICBjb25zdCB1aW50MzJfdCAqc3RyQ2hhcnMgPSByZWludGVycHJldF9j
YXN0PGNvbnN0IHVpbnQzMl90ICo+KHN0ci0+cyk7Ci0gICAgY29uc3QgdWludDMyX3QgKmJ1ZkNo
YXJzID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCAqPihidWYucyk7Ci0KLSAgICBp
ZiAoIXN0ckNoYXJzICYmICFidWZDaGFycykgcmV0dXJuIHRydWU7Ci0gICAgaWYgKCFzdHJDaGFy
cyB8fCAhYnVmQ2hhcnMpIHJldHVybiBmYWxzZTsKLSAgICAKICAgICB1aW50IHN0ckxlbmd0aCA9
IHN0ci0+bDsKICAgICB1aW50IGJ1Zkxlbmd0aCA9IGJ1Zi5sZW5ndGg7CiAgICAgaWYgKHN0ckxl
bmd0aCAhPSBidWZMZW5ndGgpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIGNvbnN0IHVp
bnQzMl90ICpzdHJDaGFycyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDMyX3QgKj4oc3Ry
LT5zKTsKKyAgICBjb25zdCB1aW50MzJfdCAqYnVmQ2hhcnMgPSByZWludGVycHJldF9jYXN0PGNv
bnN0IHVpbnQzMl90ICo+KGJ1Zi5zKTsKICAgICAKICAgICB1aW50IGhhbGZMZW5ndGggPSBzdHJM
ZW5ndGggPj4gMTsKICAgICBmb3IgKHVpbnQgaSA9IDA7IGkgIT0gaGFsZkxlbmd0aDsgKytpKSB7
CkBAIC0xNjUsNDIgKzE1MiwzMCBAQCB2b2lkIEF0b21pY1N0cmluZzo6cmVtb3ZlKERPTVN0cmlu
Z0ltcGwgCiAgICAgc3RyaW5nVGFibGUucmVtb3ZlKHIpOwogfQogCi0vLyBHbG9iYWwgY29uc3Rh
bnRzIGZvciBwcm9wZXJ0eSBuYW1lIHN0cmluZ3MuCi0KLSNpZiAhQVZPSURfU1RBVElDX0NPTlNU
UlVDVE9SUwotICAgIC8vIERlZmluZSBhbiBBdG9taWNTdHJpbmcgaW4gdGhlIG5vcm1hbCB3YXku
Ci0gICAgI2RlZmluZSBERUZJTkVfR0xPQkFMKG5hbWUsIHN0cmluZykgZXh0ZXJuIGNvbnN0IEF0
b21pY1N0cmluZyBuYW1lICMjIEF0b20oc3RyaW5nKTsKLQotICAgIGV4dGVybiBjb25zdCBBdG9t
aWNTdHJpbmcgbnVsbEF0b207Ci0gICAgZXh0ZXJuIGNvbnN0IEF0b21pY1N0cmluZyBlbXB0eUF0
b207Ci0jZWxzZQotICAgIC8vIERlZmluZSBhbiBBdG9taWNTdHJpbmctc2l6ZWQgYXJyYXkgb2Yg
cG9pbnRlcnMgdG8gYXZvaWQgc3RhdGljIGluaXRpYWxpemF0aW9uLgotICAgIC8vIFVzZSBhbiBh
cnJheSBvZiBwb2ludGVycyBpbnN0ZWFkIG9mIGFuIGFycmF5IG9mIGNoYXIgaW4gY2FzZSB0aGVy
ZSBpcyBzb21lIGFsaWdubWVudCBpc3N1ZS4KLSAgICAjZGVmaW5lIERFRklORV9HTE9CQUwobmFt
ZSwgc3RyaW5nKSBcCi0gICAgICAgIHZvaWQgKiBuYW1lICMjIEF0b21bKHNpemVvZihBdG9taWNT
dHJpbmcpICsgc2l6ZW9mKHZvaWQgKikgLSAxKSAvIHNpemVvZih2b2lkICopXTsKLQotICAgIERF
RklORV9HTE9CQUwobnVsbCwgaWdub3JlZCkKLSAgICBERUZJTkVfR0xPQkFMKGVtcHR5LCBpZ25v
cmVkKQotI2VuZGlmCi0KLSNkZWZpbmUgQ0FMTF9ERUZJTkVfR0xPQkFMKG5hbWUpIERFRklORV9H
TE9CQUwobmFtZSwgI25hbWUpCi1LSFRNTF9BVE9NSUNTVFJJTkdfRUFDSF9HTE9CQUwoQ0FMTF9E
RUZJTkVfR0xPQkFMKQorLy8gRGVmaW5lIGFuIEF0b21pY1N0cmluZy1zaXplZCBhcnJheSBvZiBw
b2ludGVycyB0byBhdm9pZCBzdGF0aWMgaW5pdGlhbGl6YXRpb24uCisvLyBVc2UgYW4gYXJyYXkg
b2YgcG9pbnRlcnMgaW5zdGVhZCBvZiBhbiBhcnJheSBvZiBjaGFyIGluIGNhc2UgdGhlcmUgaXMg
c29tZSBhbGlnbm1lbnQgaXNzdWUuCisjZGVmaW5lIERFRklORV9HTE9CQUwobmFtZSkgXAorICAg
IHZvaWQqIG5hbWUgIyMgQXRvbVsoc2l6ZW9mKEF0b21pY1N0cmluZykgKyBzaXplb2Yodm9pZCop
IC0gMSkgLyBzaXplb2Yodm9pZCopXTsKKworREVGSU5FX0dMT0JBTChudWxsKQorREVGSU5FX0dM
T0JBTChlbXB0eSkKK0RFRklORV9HTE9CQUwodGV4dCkKK0RFRklORV9HTE9CQUwoY29tbWVudCkK
K0RFRklORV9HTE9CQUwoc3RhcikKIAogdm9pZCBBdG9taWNTdHJpbmc6OmluaXQoKQogewotI2lm
IEFWT0lEX1NUQVRJQ19DT05TVFJVQ1RPUlMKICAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXplZDsK
ICAgICBpZiAoIWluaXRpYWxpemVkKSB7CiAgICAgICAgIC8vIFVzZSBwbGFjZW1lbnQgbmV3IHRv
IGluaXRpYWxpemUgdGhlIGdsb2JhbHMuCiAgICAgICAgIG5ldyAoJm51bGxBdG9tKSBBdG9taWNT
dHJpbmc7CiAgICAgICAgIG5ldyAoJmVtcHR5QXRvbSkgQXRvbWljU3RyaW5nKCIiKTsKLSAgICAg
ICAgCi0gICAgICAgICNkZWZpbmUgUExBQ0VNRU5UX05FV19HTE9CQUwobmFtZSwgc3RyaW5nKSBu
ZXcgKCZuYW1lICMjIFByb3BlcnR5TmFtZSkgQXRvbWljU3RyaW5nKHN0cmluZyk7Ci0gICAgICAg
ICNkZWZpbmUgQ0FMTF9QTEFDRU1FTlRfTkVXX0dMT0JBTChuYW1lKSBQTEFDRU1FTlRfTkVXX0dM
T0JBTChuYW1lLCAjbmFtZSkKLSAgICAgICAgS0hUTUxfQVRPTUlDU1RSSU5HX0VBQ0hfR0xPQkFM
KENBTExfUExBQ0VNRU5UX05FV19HTE9CQUwpCisgICAgICAgIG5ldyAoJnRleHRBdG9tKSBBdG9t
aWNTdHJpbmcoIiN0ZXh0Iik7CisgICAgICAgIG5ldyAoJmNvbW1lbnRBdG9tKSBBdG9taWNTdHJp
bmcoIiNjb21tZW50Iik7CisgICAgICAgIG5ldyAoJnN0YXJBdG9tKSBBdG9taWNTdHJpbmcoIioi
KTsKKwogICAgICAgICBpbml0aWFsaXplZCA9IHRydWU7CiAgICAgfQotI2VuZGlmCiB9CiAKIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBBdG9taWNTdHJpbmcgJmEsIGNvbnN0IERPTVN0cmluZyAmYikK
SW5kZXg6IGtodG1sL3htbC9kb21fYXRvbWljc3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
L2N2cy9yb290L1dlYkNvcmUva2h0bWwveG1sL2RvbV9hdG9taWNzdHJpbmcuaCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS40CmRpZmYgLXUgLXAgLXIxLjQga2h0bWwveG1sL2RvbV9hdG9taWNzdHJp
bmcuaAotLS0ga2h0bWwveG1sL2RvbV9hdG9taWNzdHJpbmcuaAkyOCBKdW4gMjAwNSAwMTo1NDoz
NCAtMDAwMAkxLjQKKysrIGtodG1sL3htbC9kb21fYXRvbWljc3RyaW5nLmgJOSBKdWwgMjAwNSAw
Mjo0MzozMyAtMDAwMApAQCAtNTUsNyArNTUsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBwZXJjZW50
YWdlKGludCAmX3BlcmNlbnRhZ2UpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nLnBlcmNlbnRhZ2Uo
X3BlcmNlbnRhZ2UpOyB9CiAgICAga2h0bWw6Okxlbmd0aCogdG9MZW5ndGhBcnJheShpbnQmIGxl
bikgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcudG9MZW5ndGhBcnJheShsZW4pOyB9CiAgICAga2h0
bWw6Okxlbmd0aCogdG9Db29yZHNBcnJheShpbnQmIGxlbikgY29uc3QgeyByZXR1cm4gbV9zdHJp
bmcudG9Db29yZHNBcnJheShsZW4pOyB9Ci0gICAgCisKICAgICBib29sIGlzTnVsbCgpIGNvbnN0
IHsgcmV0dXJuIG1fc3RyaW5nLmlzTnVsbCgpOyB9CiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3Qg
eyByZXR1cm4gbV9zdHJpbmcuaXNFbXB0eSgpOyB9CiAKQEAgLTEwOSwxNiArMTA5LDE0IEBAIGlu
bGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgQXRvbWljU3RyaW4KIAogLy8gTGlzdCBvZiBwcm9w
ZXJ0eSBuYW1lcywgcGFzc2VkIHRvIGEgbWFjcm8gc28gd2UgY2FuIGRvIHNldCB0aGVtIHVwIHZh
cmlvdXMKIC8vIHdheXMgd2l0aG91dCByZXBlYXRpbmcgdGhlIGxpc3QuCi0jZGVmaW5lIEtIVE1M
X0FUT01JQ1NUUklOR19FQUNIX0dMT0JBTChtYWNybykKIAotICAgIC8vIERlZmluZSBleHRlcm5h
bCBnbG9iYWwgdmFyaWFibGVzIGZvciBhbGwgcHJvcGVydHkgbmFtZXMgYWJvdmUgKGFuZCBvbmUg
bW9yZSkuCisvLyBEZWZpbmUgZXh0ZXJuYWwgZ2xvYmFsIHZhcmlhYmxlcyBmb3IgdGhlIGNvbW1v
bmx5IHVzZWQgYXRvbWljIHN0cmluZ3MuCiAjaWYgIUtIVE1MX0FUT01JQ1NUUklOR19ISURFX0dM
T0JBTFMKICAgICBleHRlcm4gY29uc3QgQXRvbWljU3RyaW5nIG51bGxBdG9tOwogICAgIGV4dGVy
biBjb25zdCBBdG9taWNTdHJpbmcgZW1wdHlBdG9tOwotI2RlZmluZSBLSFRNTF9BVE9NSUNTVFJJ
TkdfREVDTEFSRV9HTE9CQUwobmFtZSkgZXh0ZXJuIGNvbnN0IEF0b21pY1N0cmluZyBuYW1lICMj
IFByb3BlcnR5TmFtZTsKLSAgICBLSFRNTF9BVE9NSUNTVFJJTkdfRUFDSF9HTE9CQUwoS0hUTUxf
QVRPTUlDU1RSSU5HX0RFQ0xBUkVfR0xPQkFMKQotICAgIEtIVE1MX0FUT01JQ1NUUklOR19ERUNM
QVJFX0dMT0JBTChzcGVjaWFsUHJvdG90eXBlKQotI3VuZGVmIEtIVE1MX0FUT01JQ1NUUklOR19E
RUNMQVJFX0dMT0JBTAorICAgIGV4dGVybiBjb25zdCBBdG9taWNTdHJpbmcgdGV4dEF0b207Cisg
ICAgZXh0ZXJuIGNvbnN0IEF0b21pY1N0cmluZyBjb21tZW50QXRvbTsKKyAgICBleHRlcm4gY29u
c3QgQXRvbWljU3RyaW5nIHN0YXJBdG9tOwogI2VuZGlmCiAgICAgICAgIAogYm9vbCBvcGVyYXRv
cj09KGNvbnN0IEF0b21pY1N0cmluZyAmYSwgY29uc3QgRE9NU3RyaW5nICZiKTsKSW5kZXg6IGto
dG1sL3htbC9kb21fZG9jaW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dl
YkNvcmUva2h0bWwveG1sL2RvbV9kb2NpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4y
MzEKZGlmZiAtdSAtcCAtcjEuMjMxIGtodG1sL3htbC9kb21fZG9jaW1wbC5jcHAKLS0tIGtodG1s
L3htbC9kb21fZG9jaW1wbC5jcHAJMyBKdWwgMjAwNSAxMDowNTowOCAtMDAwMAkxLjIzMQorKysg
a2h0bWwveG1sL2RvbV9kb2NpbXBsLmNwcAk5IEp1bCAyMDA1IDAyOjQzOjM1IC0wMDAwCkBAIC0z
NCw4ICszNCw2IEBACiAjaW5jbHVkZSAieG1sL2RvbTJfdmlld3NpbXBsLmgiCiAjaW5jbHVkZSAi
eG1sL3htbF90b2tlbml6ZXIuaCIKIAotI2luY2x1ZGUgInhtbF9uYW1lc3BhY2VfdGFibGUuaCIK
LQogI2luY2x1ZGUgImNzcy9jc3NoZWxwZXIuaCIKICNpbmNsdWRlICJjc3MvY3Nzc3R5bGVzZWxl
Y3Rvci5oIgogI2luY2x1ZGUgImNzcy9jc3Nfc3R5bGVzaGVldGltcGwuaCIKQEAgLTY1LDE3ICs2
MywxMSBAQAogI2luY2x1ZGUgImtodG1sX3NldHRpbmdzLmgiCiAjaW5jbHVkZSAia2h0bWxwYXJ0
X3AuaCIKIAotI2luY2x1ZGUgImh0bWwvaHRtbF9iYXNlaW1wbC5oIgotI2luY2x1ZGUgImh0bWwv
aHRtbF9ibG9ja2ltcGwuaCIKLSNpbmNsdWRlICJodG1sL2h0bWxfY2FudmFzaW1wbC5oIgorLy8g
RklYTUU6IFdlIHdhbnQgdG8gY3V0IHRoZSByZW1haW5pbmcgSFRNTCBkZXBlbmRlbmNpZXMgc28g
dGhhdCB3ZSBkb24ndCBuZWVkIHRvIGluY2x1ZGUgdGhlc2UgZmlsZXMuCiAjaW5jbHVkZSAiaHRt
bC9odG1sX2RvY3VtZW50aW1wbC5oIgotI2luY2x1ZGUgImh0bWwvaHRtbF9mb3JtaW1wbC5oIgog
I2luY2x1ZGUgImh0bWwvaHRtbF9oZWFkaW1wbC5oIgogI2luY2x1ZGUgImh0bWwvaHRtbF9pbWFn
ZWltcGwuaCIKLSNpbmNsdWRlICJodG1sL2h0bWxfbGlzdGltcGwuaCIKLSNpbmNsdWRlICJodG1s
L2h0bWxfbWlzY2ltcGwuaCIKLSNpbmNsdWRlICJodG1sL2h0bWxfdGFibGVpbXBsLmgiCi0jaW5j
bHVkZSAiaHRtbC9odG1sX29iamVjdGltcGwuaCIKKyNpbmNsdWRlICJodG1sZmFjdG9yeS5oIgog
CiAjaW5jbHVkZSAiY3NzdmFsdWVzLmgiCiAKQEAgLTUwNCw5ICs0OTYsOSBAQCBFbGVtZW50SW1w
bCAqRG9jdW1lbnRJbXBsOjpkb2N1bWVudEVsZW1lCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEVs
ZW1lbnRJbXBsKj4obik7CiB9CiAKLUVsZW1lbnRJbXBsICpEb2N1bWVudEltcGw6OmNyZWF0ZUVs
ZW1lbnQoIGNvbnN0IERPTVN0cmluZyAmbmFtZSwgaW50ICZleGNlcHRpb25jb2RlICkKK0VsZW1l
bnRJbXBsICpEb2N1bWVudEltcGw6OmNyZWF0ZUVsZW1lbnQoY29uc3QgRE9NU3RyaW5nICZuYW1l
LCBpbnQgJmV4Y2VwdGlvbkNvZGUpCiB7Ci0gICAgcmV0dXJuIG5ldyBYTUxFbGVtZW50SW1wbCgg
ZG9jdW1lbnQsIG5hbWUuaW1wbGVtZW50YXRpb24oKSApOworICAgIHJldHVybiBjcmVhdGVFbGVt
ZW50TlMoZW1wdHlBdG9tLCBuYW1lLCBleGNlcHRpb25Db2RlKTsKIH0KIAogRG9jdW1lbnRGcmFn
bWVudEltcGwgKkRvY3VtZW50SW1wbDo6Y3JlYXRlRG9jdW1lbnRGcmFnbWVudCggICkKQEAgLTU3
MywxMCArNTY1LDggQEAgTm9kZUltcGwgKkRvY3VtZW50SW1wbDo6aW1wb3J0Tm9kZShOb2RlSQog
ICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUNvbW1lbnQoaW1wb3J0ZWROb2RlLT5ub2RlVmFsdWUo
KSk7CiAgICAgICAgIGNhc2UgTm9kZTo6RUxFTUVOVF9OT0RFOiB7CiAgICAgICAgICAgICBFbGVt
ZW50SW1wbCAqb2xkRWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsICo+KGltcG9ydGVk
Tm9kZSk7Ci0gICAgICAgICAgICBEb2N1bWVudEltcGwgKm9sZERvYyA9IG9sZEVsZW1lbnQtPmdl
dERvY3VtZW50KCk7Ci0gICAgICAgICAgICBzdGF0aWMgRE9NU3RyaW5nIEhUTUxOYW1lc3BhY2Uo
WEhUTUxfTkFNRVNQQUNFKTsKLSAgICAgICAgICAgIERPTVN0cmluZyBlbGVtZW50TmFtZXNwYWNl
ID0gb2xkRWxlbWVudC0+aXNIVE1MRWxlbWVudCgpID8gSFRNTE5hbWVzcGFjZSA6IG9sZEVsZW1l
bnQtPm5hbWVzcGFjZVVSSSgpOwotICAgICAgICAgICAgRWxlbWVudEltcGwgKm5ld0VsZW1lbnQg
PSBjcmVhdGVFbGVtZW50TlMoZWxlbWVudE5hbWVzcGFjZS5pbXBsZW1lbnRhdGlvbigpLCBvbGRF
bGVtZW50LT50YWdOYW1lKCksIGV4Y2VwdGlvbmNvZGUpOworICAgICAgICAgICAgLy8gRklYTUU6
IFByZWZpeCBpcyBsb3N0LiAgSXMgdGhhdCByaWdodD8KKyAgICAgICAgICAgIEVsZW1lbnRJbXBs
ICpuZXdFbGVtZW50ID0gY3JlYXRlRWxlbWVudE5TKG9sZEVsZW1lbnQtPm5hbWVzcGFjZVVSSSgp
LCBvbGRFbGVtZW50LT5sb2NhbE5hbWUoKSwgZXhjZXB0aW9uY29kZSk7CiAgICAgICAgICAgICBp
ZiAoZXhjZXB0aW9uY29kZSAhPSAwKQogICAgICAgICAgICAgICAgIHJldHVybiAwOwogCkBAIC01
OTcsNyArNTg3LDggQEAgTm9kZUltcGwgKkRvY3VtZW50SW1wbDo6aW1wb3J0Tm9kZShOb2RlSQog
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gIyMjIGV4dHJhY3QgYW5kIHNldCBuZXcgcHJlZml4
CiAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICBOb2RlSW1wbDo6
SWQgbm9kZUlkID0gYXR0cklkKG9sZERvYy0+bmFtZXNwYWNlVVJJKGF0dHItPmF0dHJJbXBsKCkt
PmlkKCkpLCBsb2NhbE5hbWUuaW1wbGVtZW50YXRpb24oKSwgZmFsc2UgLyogYWxsb2NhdGUgKi8p
OworICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogTG9zZSB0aGUgbmFtZXNwYWNlIGhlcmUg
Zm9yIG5vdy4gIFRoaXMgY29kZSB3aWxsIGNoYW5nZSBzb29uIGFueXdheS4KKyAgICAgICAgICAg
ICAgICAgICAgTm9kZUltcGw6OklkIG5vZGVJZCA9IGF0dHJJZCgwLCBsb2NhbE5hbWUuaW1wbGVt
ZW50YXRpb24oKSwgZmFsc2UgLyogYWxsb2NhdGUgKi8pOwogICAgICAgICAgICAgICAgICAgICBu
ZXdFbGVtZW50LT5zZXRBdHRyaWJ1dGUobm9kZUlkLCB2YWx1ZS5pbXBsZW1lbnRhdGlvbigpLCBl
eGNlcHRpb25jb2RlKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGV4Y2VwdGlvbmNvZGUgIT0g
MCkgewogICAgICAgICAgICAgICAgICAgICAgICAgbmV3RWxlbWVudC0+ZGVyZWYoKTsKQEAgLTYz
NiwyOCArNjI3LDM2IEBAIE5vZGVJbXBsICpEb2N1bWVudEltcGw6OmltcG9ydE5vZGUoTm9kZUkK
IAogRWxlbWVudEltcGwgKkRvY3VtZW50SW1wbDo6Y3JlYXRlRWxlbWVudE5TKCBjb25zdCBET01T
dHJpbmcgJl9uYW1lc3BhY2VVUkksIGNvbnN0IERPTVN0cmluZyAmX3F1YWxpZmllZE5hbWUsIGlu
dCAmZXhjZXB0aW9uY29kZSkKIHsKLSAgICBFbGVtZW50SW1wbCAqZSA9IDA7Ci0gICAgUVN0cmlu
ZyBxTmFtZSA9IF9xdWFsaWZpZWROYW1lLnN0cmluZygpOwotICAgIGludCBjb2xvblBvcyA9IHFO
YW1lLmZpbmQoJzonLDApOwotCi0gICAgaWYgKF9uYW1lc3BhY2VVUkkgPT0gWEhUTUxfTkFNRVNQ
QUNFKSB7Ci0gICAgICAgIC8vIFVzZXIgcmVxdWVzdGVkIGFuIGVsZW1lbnQgaW4gdGhlIFhIVE1M
IG5hbWVzcGFjZSAtIHRoaXMgbWVhbnMgd2UgY3JlYXRlIGEgc3BlY2lmaWMgZWxlbWVudAotICAg
ICAgICAvLyAoZWxlbWVudHMgbm90IGluIHRoaXMgbmFtZXNwYWNlIGFyZSB0cmVhdGVkIGFzIG5v
cm1hbCBYTUwgZWxlbWVudHMpCi0gICAgICAgIGUgPSBjcmVhdGVIVE1MRWxlbWVudChxTmFtZS5t
aWQoY29sb25Qb3MrMSksIGV4Y2VwdGlvbmNvZGUpOwotICAgICAgICBpZiAoZXhjZXB0aW9uY29k
ZSkKKyAgICAvLyBTcGxpdCB0aGUgbmFtZS4KKyAgICBpbnQgZXhjZXB0aW9uQ29kZSA9IDA7Cisg
ICAgRWxlbWVudEltcGwqIGUgPSAwOworICAgIERPTVN0cmluZyBwcmVmaXgsIGxvY2FsTmFtZTsK
KyAgICBpbnQgY29sb25Qb3MgPSBfcXVhbGlmaWVkTmFtZS5maW5kKCc6Jyk7CisgICAgaWYgKGNv
bG9uUG9zID49IDApIHsKKyAgICAgICAgcHJlZml4ID0gX3F1YWxpZmllZE5hbWUuc3Vic3RyaW5n
KDAsIGNvbG9uUG9zKTsKKyAgICAgICAgbG9jYWxOYW1lID0gX3F1YWxpZmllZE5hbWUuc3Vic3Ry
aW5nKGNvbG9uUG9zKzEsIF9xdWFsaWZpZWROYW1lLmxlbmd0aCgpIC0gY29sb25Qb3MpOworICAg
IH0KKyAgICBlbHNlCisgICAgICAgIGxvY2FsTmFtZSA9IF9xdWFsaWZpZWROYW1lOworICAgIAor
ICAgIC8vIEZJWE1FOiBVc2UgcmVnaXN0ZXJlZCBuYW1lc3BhY2VzIGFuZCBsb29rIHVwIGluIGEg
aGFzaCB0byBmaW5kIHRoZSByaWdodCBmYWN0b3J5LgorICAgIGlmIChfbmFtZXNwYWNlVVJJID09
IEhUTUxOYW1lczo6eGh0bWxOYW1lc3BhY2VVUkkoKSkgeworICAgICAgICAvLyBGSVhNRTogUmVh
bGx5IHNob3VsZCBvbmx5IGJlIGRvbmUgZnJvbSB0aGUgcHVibGljIERPTSBBUEkuICBJbnRlcm5h
bCBjYWxsZXJzIGtub3cgdGhlIG5hbWUgaXMgdmFsaWQuCisgICAgICAgIGlmICghaXNWYWxpZE5h
bWUobG9jYWxOYW1lKSkgeworICAgICAgICAgICAgZXhjZXB0aW9uY29kZSA9IERPTUV4Y2VwdGlv
bjo6SU5WQUxJRF9DSEFSQUNURVJfRVJSOwogICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAg
IGlmIChlICYmIGNvbG9uUG9zID49IDApIHsKLSAgICAgICAgICAgIGUtPnNldFByZWZpeChxTmFt
ZS5sZWZ0KGNvbG9uUG9zKSwgZXhjZXB0aW9uY29kZSk7Ci0gICAgICAgICAgICBpZiAoZXhjZXB0
aW9uY29kZSkgewotICAgICAgICAgICAgICAgIGRlbGV0ZSBlOworICAgICAgICB9CisgICAgICAg
IGUgPSBIVE1MRWxlbWVudEZhY3Rvcnk6OmNyZWF0ZUhUTUxFbGVtZW50KEF0b21pY1N0cmluZyhs
b2NhbE5hbWUpLCB0aGlzLCAwLCBmYWxzZSk7CisgICAgICAgIGlmIChlICYmICFwcmVmaXguaXNO
dWxsKCkpIHsKKyAgICAgICAgICAgIGUtPnNldFByZWZpeChBdG9taWNTdHJpbmcocHJlZml4KSwg
ZXhjZXB0aW9uQ29kZSk7CisgICAgICAgICAgICBpZiAoZXhjZXB0aW9uQ29kZSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLQorICAg
IAogICAgIGlmICghZSkKLSAgICAgICAgZSA9IG5ldyBYTUxFbGVtZW50SW1wbCggZG9jdW1lbnQs
IF9xdWFsaWZpZWROYW1lLmltcGxlbWVudGF0aW9uKCksIF9uYW1lc3BhY2VVUkkuaW1wbGVtZW50
YXRpb24oKSApOwotCisgICAgICAgIGUgPSBuZXcgRWxlbWVudEltcGwoUXVhbGlmaWVkTmFtZShB
dG9taWNTdHJpbmcocHJlZml4KSwgQXRvbWljU3RyaW5nKGxvY2FsTmFtZSksIEF0b21pY1N0cmlu
ZyhfbmFtZXNwYWNlVVJJKSksIGRvY3VtZW50KTsKKyAgICAKICAgICByZXR1cm4gZTsKIH0KIApA
QCAtODExLDIyMCArODEwLDYgQEAgdW5zaWduZWQgc2hvcnQgRG9jdW1lbnRJbXBsOjpub2RlVHlw
ZSgpIAogICAgIHJldHVybiBOb2RlOjpET0NVTUVOVF9OT0RFOwogfQogCi1FbGVtZW50SW1wbCAq
RG9jdW1lbnRJbXBsOjpjcmVhdGVIVE1MRWxlbWVudCggY29uc3QgRE9NU3RyaW5nICZuYW1lLCBp
bnQgJmV4Y2VwdGlvbmNvZGUgKQotewotICAgIGlmICghaXNWYWxpZE5hbWUobmFtZSkpIHsKLSAg
ICAgICAgZXhjZXB0aW9uY29kZSA9IERPTUV4Y2VwdGlvbjo6SU5WQUxJRF9DSEFSQUNURVJfRVJS
OwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgcmV0dXJuIGNyZWF0ZUhUTUxFbGVtZW50
KHRhZ0lkKDAsIG5hbWUuaW1wbGVtZW50YXRpb24oKSwgZmFsc2UpKTsKLX0KLQotRWxlbWVudElt
cGwgKkRvY3VtZW50SW1wbDo6Y3JlYXRlSFRNTEVsZW1lbnQodW5zaWduZWQgc2hvcnQgdGFnSUQp
Ci17Ci0gICAgc3dpdGNoICh0YWdJRCkKLSAgICB7Ci0gICAgY2FzZSBJRF9IVE1MOgotICAgICAg
ICByZXR1cm4gbmV3IEhUTUxIdG1sRWxlbWVudEltcGwoZG9jUHRyKCkpOwotICAgIGNhc2UgSURf
SEVBRDoKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MSGVhZEVsZW1lbnRJbXBsKGRvY1B0cigpKTsK
LSAgICBjYXNlIElEX0JPRFk6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTEJvZHlFbGVtZW50SW1w
bChkb2NQdHIoKSk7Ci0KLS8vIGhlYWQgZWxlbWVudHMKLSAgICBjYXNlIElEX0JBU0U6Ci0gICAg
ICAgIHJldHVybiBuZXcgSFRNTEJhc2VFbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0gICAgY2FzZSBJ
RF9MSU5LOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxMaW5rRWxlbWVudEltcGwoZG9jUHRyKCkp
OwotICAgIGNhc2UgSURfTUVUQToKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MTWV0YUVsZW1lbnRJ
bXBsKGRvY1B0cigpKTsKLSAgICBjYXNlIElEX1NUWUxFOgotICAgICAgICByZXR1cm4gbmV3IEhU
TUxTdHlsZUVsZW1lbnRJbXBsKGRvY1B0cigpKTsKLSAgICBjYXNlIElEX1RJVExFOgotICAgICAg
ICByZXR1cm4gbmV3IEhUTUxUaXRsZUVsZW1lbnRJbXBsKGRvY1B0cigpKTsKLQotLy8gZnJhbWVz
Ci0gICAgY2FzZSBJRF9GUkFNRToKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MRnJhbWVFbGVtZW50
SW1wbChkb2NQdHIoKSk7Ci0gICAgY2FzZSBJRF9GUkFNRVNFVDoKLSAgICAgICAgcmV0dXJuIG5l
dyBIVE1MRnJhbWVTZXRFbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0gICAgY2FzZSBJRF9JRlJBTUU6
Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTElGcmFtZUVsZW1lbnRJbXBsKGRvY1B0cigpKTsKLQot
Ly8gZm9ybSBlbGVtZW50cwotLy8gIyMjIEZJWE1FOiB3ZSBuZWVkIGEgd2F5IHRvIHNldCBmb3Jt
IGRlcGVuZGVuY3kgYWZ0ZXIgd2UgaGF2ZSBtYWRlIHRoZSBmb3JtIGVsZW1lbnRzCi0gICAgY2Fz
ZSBJRF9GT1JNOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxGb3JtRWxlbWVudEltcGwoZG9jUHRy
KCkpOwotICAgIGNhc2UgSURfQlVUVE9OOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxCdXR0b25F
bGVtZW50SW1wbChkb2NQdHIoKSk7Ci0gICAgY2FzZSBJRF9GSUVMRFNFVDoKLSAgICAgICAgcmV0
dXJuIG5ldyBIVE1MRmllbGRTZXRFbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0gICAgY2FzZSBJRF9J
TlBVVDoKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MSW5wdXRFbGVtZW50SW1wbChkb2NQdHIoKSk7
Ci0gICAgY2FzZSBJRF9JU0lOREVYOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxJc0luZGV4RWxl
bWVudEltcGwoZG9jUHRyKCkpOwotICAgIGNhc2UgSURfTEFCRUw6Ci0gICAgICAgIHJldHVybiBu
ZXcgSFRNTExhYmVsRWxlbWVudEltcGwoZG9jUHRyKCkpOwotICAgIGNhc2UgSURfTEVHRU5EOgot
ICAgICAgICByZXR1cm4gbmV3IEhUTUxMZWdlbmRFbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0gICAg
Y2FzZSBJRF9PUFRHUk9VUDoKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MT3B0R3JvdXBFbGVtZW50
SW1wbChkb2NQdHIoKSk7Ci0gICAgY2FzZSBJRF9PUFRJT046Ci0gICAgICAgIHJldHVybiBuZXcg
SFRNTE9wdGlvbkVsZW1lbnRJbXBsKGRvY1B0cigpKTsKLSAgICBjYXNlIElEX1NFTEVDVDoKLSAg
ICAgICAgcmV0dXJuIG5ldyBIVE1MU2VsZWN0RWxlbWVudEltcGwoZG9jUHRyKCkpOwotICAgIGNh
c2UgSURfVEVYVEFSRUE6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTFRleHRBcmVhRWxlbWVudElt
cGwoZG9jUHRyKCkpOwotCi0vLyBsaXN0cwotICAgIGNhc2UgSURfREw6Ci0gICAgICAgIHJldHVy
biBuZXcgSFRNTERMaXN0RWxlbWVudEltcGwoZG9jUHRyKCkpOwotICAgIGNhc2UgSURfREQ6Ci0g
ICAgICAgIHJldHVybiBuZXcgSFRNTEdlbmVyaWNFbGVtZW50SW1wbChkb2NQdHIoKSwgdGFnSUQp
OwotICAgIGNhc2UgSURfRFQ6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTEdlbmVyaWNFbGVtZW50
SW1wbChkb2NQdHIoKSwgdGFnSUQpOwotICAgIGNhc2UgSURfVUw6Ci0gICAgICAgIHJldHVybiBu
ZXcgSFRNTFVMaXN0RWxlbWVudEltcGwoZG9jUHRyKCkpOwotICAgIGNhc2UgSURfT0w6Ci0gICAg
ICAgIHJldHVybiBuZXcgSFRNTE9MaXN0RWxlbWVudEltcGwoZG9jUHRyKCkpOwotICAgIGNhc2Ug
SURfRElSOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxEaXJlY3RvcnlFbGVtZW50SW1wbChkb2NQ
dHIoKSk7Ci0gICAgY2FzZSBJRF9NRU5VOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxNZW51RWxl
bWVudEltcGwoZG9jUHRyKCkpOwotICAgIGNhc2UgSURfTEk6Ci0gICAgICAgIHJldHVybiBuZXcg
SFRNTExJRWxlbWVudEltcGwoZG9jUHRyKCkpOwotCi0vLyBmb3JtYXR0aW5nIGVsZW1lbnRzIChi
bG9jaykKLSAgICBjYXNlIElEX0JMT0NLUVVPVEU6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTEJs
b2NrcXVvdGVFbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0gICAgY2FzZSBJRF9ESVY6Ci0gICAgICAg
IHJldHVybiBuZXcgSFRNTERpdkVsZW1lbnRJbXBsKGRvY1B0cigpKTsKLSAgICBjYXNlIElEX0gx
OgotICAgIGNhc2UgSURfSDI6Ci0gICAgY2FzZSBJRF9IMzoKLSAgICBjYXNlIElEX0g0OgotICAg
IGNhc2UgSURfSDU6Ci0gICAgY2FzZSBJRF9INjoKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MSGVh
ZGluZ0VsZW1lbnRJbXBsKGRvY1B0cigpLCB0YWdJRCk7Ci0gICAgY2FzZSBJRF9IUjoKLSAgICAg
ICAgcmV0dXJuIG5ldyBIVE1MSFJFbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0gICAgY2FzZSBJRF9Q
OgotICAgICAgICByZXR1cm4gbmV3IEhUTUxQYXJhZ3JhcGhFbGVtZW50SW1wbChkb2NQdHIoKSk7
Ci0gICAgY2FzZSBJRF9QUkU6Ci0gICAgY2FzZSBJRF9YTVA6Ci0gICAgY2FzZSBJRF9QTEFJTlRF
WFQ6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTFByZUVsZW1lbnRJbXBsKGRvY1B0cigpLCB0YWdJ
RCk7Ci0gICAgY2FzZSBJRF9MQVlFUjoKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MTGF5ZXJFbGVt
ZW50SW1wbChkb2NQdHIoKSk7Ci0KLS8vIGZvbnQgc3R1ZmYKLSAgICBjYXNlIElEX0JBU0VGT05U
OgotICAgICAgICByZXR1cm4gbmV3IEhUTUxCYXNlRm9udEVsZW1lbnRJbXBsKGRvY1B0cigpKTsK
LSAgICBjYXNlIElEX0ZPTlQ6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTEZvbnRFbGVtZW50SW1w
bChkb2NQdHIoKSk7Ci0KLS8vIGlucy9kZWwKLSAgICBjYXNlIElEX0RFTDoKLSAgICBjYXNlIElE
X0lOUzoKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MTW9kRWxlbWVudEltcGwoZG9jUHRyKCksIHRh
Z0lEKTsKLQotLy8gYW5jaG9yCi0gICAgY2FzZSBJRF9BOgotICAgICAgICByZXR1cm4gbmV3IEhU
TUxBbmNob3JFbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0KLS8vIGltYWdlcwotICAgIGNhc2UgSURf
SU1HOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxJbWFnZUVsZW1lbnRJbXBsKGRvY1B0cigpKTsK
LSAgICBjYXNlIElEX01BUDoKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MTWFwRWxlbWVudEltcGwo
ZG9jUHRyKCkpOwotICAgIGNhc2UgSURfQVJFQToKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MQXJl
YUVsZW1lbnRJbXBsKGRvY1B0cigpKTsKLSAgICBjYXNlIElEX0NBTlZBUzoKLSAgICAgICAgcmV0
dXJuIG5ldyBIVE1MQ2FudmFzRWxlbWVudEltcGwoZG9jUHRyKCkpOwotCi0vLyBvYmplY3RzLCBh
cHBsZXRzIGFuZCBzY3JpcHRzCi0gICAgY2FzZSBJRF9BUFBMRVQ6Ci0gICAgICAgIHJldHVybiBu
ZXcgSFRNTEFwcGxldEVsZW1lbnRJbXBsKGRvY1B0cigpKTsKLSAgICBjYXNlIElEX0VNQkVEOgot
ICAgICAgICByZXR1cm4gbmV3IEhUTUxFbWJlZEVsZW1lbnRJbXBsKGRvY1B0cigpKTsKLSAgICBj
YXNlIElEX09CSkVDVDoKLSAgICAgICAgcmV0dXJuIG5ldyBIVE1MT2JqZWN0RWxlbWVudEltcGwo
ZG9jUHRyKCkpOwotICAgIGNhc2UgSURfUEFSQU06Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTFBh
cmFtRWxlbWVudEltcGwoZG9jUHRyKCkpOwotICAgIGNhc2UgSURfU0NSSVBUOgotICAgICAgICBy
ZXR1cm4gbmV3IEhUTUxTY3JpcHRFbGVtZW50SW1wbChkb2NQdHIoKSk7Ci0KLS8vIHRhYmxlcwot
ICAgIGNhc2UgSURfVEFCTEU6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTFRhYmxlRWxlbWVudElt
cGwoZG9jUHRyKCkpOwotICAgIGNhc2UgSURfQ0FQVElPTjoKLSAgICAgICAgcmV0dXJuIG5ldyBI
VE1MVGFibGVDYXB0aW9uRWxlbWVudEltcGwoZG9jUHRyKCkpOwotICAgIGNhc2UgSURfQ09MR1JP
VVA6Ci0gICAgY2FzZSBJRF9DT0w6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTFRhYmxlQ29sRWxl
bWVudEltcGwoZG9jUHRyKCksIHRhZ0lEKTsKLSAgICBjYXNlIElEX1RSOgotICAgICAgICByZXR1
cm4gbmV3IEhUTUxUYWJsZVJvd0VsZW1lbnRJbXBsKGRvY1B0cigpKTsKLSAgICBjYXNlIElEX1RE
OgotICAgIGNhc2UgSURfVEg6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTFRhYmxlQ2VsbEVsZW1l
bnRJbXBsKGRvY1B0cigpLCB0YWdJRCk7Ci0gICAgY2FzZSBJRF9USEVBRDoKLSAgICBjYXNlIElE
X1RCT0RZOgotICAgIGNhc2UgSURfVEZPT1Q6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTFRhYmxl
U2VjdGlvbkVsZW1lbnRJbXBsKGRvY1B0cigpLCB0YWdJRCwgZmFsc2UpOwotCi0vLyBpbmxpbmUg
ZWxlbWVudHMKLSAgICBjYXNlIElEX0JSOgotICAgICAgICByZXR1cm4gbmV3IEhUTUxCUkVsZW1l
bnRJbXBsKGRvY1B0cigpKTsKLSAgICBjYXNlIElEX1E6Ci0gICAgICAgIHJldHVybiBuZXcgSFRN
TFF1b3RlRWxlbWVudEltcGwoZG9jUHRyKCkpOwotCi0gICAgY2FzZSBJRF9NQVJRVUVFOgotICAg
ICAgICByZXR1cm4gbmV3IEhUTUxNYXJxdWVlRWxlbWVudEltcGwoZG9jUHRyKCkpOwotICAgCi0v
LyBlbGVtZW50cyB3aXRoIG5vIHNwZWNpYWwgcmVwcmVzZW50YXRpb24gaW4gdGhlIERPTQotCi0v
LyBibG9jazoKLSAgICBjYXNlIElEX0FERFJFU1M6Ci0gICAgY2FzZSBJRF9DRU5URVI6Ci0KLS8v
IGlubGluZQotICAgICAgICAvLyAlZm9udHN0eWxlCi0gICAgY2FzZSBJRF9UVDoKLSAgICBjYXNl
IElEX1U6Ci0gICAgY2FzZSBJRF9COgotICAgIGNhc2UgSURfSToKLSAgICBjYXNlIElEX1M6Ci0g
ICAgY2FzZSBJRF9TVFJJS0U6Ci0gICAgY2FzZSBJRF9CSUc6Ci0gICAgY2FzZSBJRF9TTUFMTDoK
LQotICAgICAgICAvLyAlcGhyYXNlCi0gICAgY2FzZSBJRF9FTToKLSAgICBjYXNlIElEX1NUUk9O
RzoKLSAgICBjYXNlIElEX0RGTjoKLSAgICBjYXNlIElEX0NPREU6Ci0gICAgY2FzZSBJRF9TQU1Q
OgotICAgIGNhc2UgSURfS0JEOgotICAgIGNhc2UgSURfVkFSOgotICAgIGNhc2UgSURfQ0lURToK
LSAgICBjYXNlIElEX0FCQlI6Ci0gICAgY2FzZSBJRF9BQ1JPTllNOgotCi0gICAgICAgIC8vICVz
cGVjaWFsCi0gICAgY2FzZSBJRF9TVUI6Ci0gICAgY2FzZSBJRF9TVVA6Ci0gICAgY2FzZSBJRF9T
UEFOOgotICAgIGNhc2UgSURfTk9CUjoKLSAgICBjYXNlIElEX1dCUjoKLQotICAgIGNhc2UgSURf
QkRPOgotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTEdlbmVyaWNFbGVtZW50
SW1wbChkb2NQdHIoKSwgdGFnSUQpOwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCiBRU3Ry
aW5nIERvY3VtZW50SW1wbDo6bmV4dFN0YXRlKCkKIHsKICAgIFFTdHJpbmcgc3RhdGU7CkBAIC0x
NDY0LDEwICsxMjQ5LDEwIEBAIEhUTUxFbGVtZW50SW1wbCogRG9jdW1lbnRJbXBsOjpib2R5KCkK
ICAgICAvLyB0cnkgdG8gcHJlZmVyIGEgRlJBTUVTRVQgZWxlbWVudCBvdmVyIEJPRFkKICAgICBO
b2RlSW1wbCogYm9keSA9IDA7CiAgICAgZm9yIChOb2RlSW1wbCogaSA9IGRlLT5maXJzdENoaWxk
KCk7IGk7IGkgPSBpLT5uZXh0U2libGluZygpKSB7Ci0gICAgICAgIGlmIChpLT5pZCgpID09IElE
X0ZSQU1FU0VUKQorICAgICAgICBpZiAoaS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZyYW1lc2V0
KCkpKQogICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCo+KGkp
OwogICAgICAgICAKLSAgICAgICAgaWYgKGktPmlkKCkgPT0gSURfQk9EWSkKKyAgICAgICAgaWYg
KGktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpib2R5KCkpKQogICAgICAgICAgICAgYm9keSA9IGk7
CiAgICAgfQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudEltcGwgKj4oYm9keSk7
CkBAIC0xNTk3LDcgKzEzODIsNyBAQCBib29sIERvY3VtZW50SW1wbDo6c2hvdWxkU2NoZWR1bGVM
YXlvdXQoCiAgICAgLy8gKGMpIHdlIGhhdmUgYSA8Ym9keT4KICAgICByZXR1cm4gKHJlbmRlcmVy
KCkgJiYgcmVuZGVyZXIoKS0+bmVlZHNMYXlvdXQoKSAmJiBoYXZlU3R5bGVzaGVldHNMb2FkZWQo
KSAmJgogICAgICAgICAgICAgZG9jdW1lbnRFbGVtZW50KCkgJiYgZG9jdW1lbnRFbGVtZW50KCkt
PnJlbmRlcmVyKCkgJiYKLSAgICAgICAgICAgIChkb2N1bWVudEVsZW1lbnQoKS0+aWQoKSAhPSBJ
RF9IVE1MIHx8IGJvZHkoKSkpOworICAgICAgICAgICAgKCFkb2N1bWVudEVsZW1lbnQoKS0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6Omh0bWwoKSkgfHwgYm9keSgpKSk7CiB9CiAKIGludCBEb2N1bWVu
dEltcGw6Om1pbmltdW1MYXlvdXREZWxheSgpCkBAIC0xNzIxLDQyICsxNTA2LDYgQEAgdm9pZCBE
b2N1bWVudEltcGw6OmRldGVybWluZVBhcnNlTW9kZSggYwogICAgIGtkRGVidWcoNjAyMCkgPDwg
IiB1c2luZyBzdHJpY3QgcGFyc2VNb2RlIiA8PCBlbmRsOwogfQogCi0vLyBQbGVhc2Ugc2VlIGlm
IHRoZXJlYHMgYSBwb3NzaWJpbGl0eSB0byBtZXJnZSB0aGF0IGNvZGUKLS8vIHdpdGggdGhlIG5l
eHQgZnVuY3Rpb24gYW5kIGdldEVsZW1lbnRCeUlEKCkuCi1Ob2RlSW1wbCAqRG9jdW1lbnRJbXBs
OjpmaW5kRWxlbWVudCggSWQgaWQgKQotewotICAgIFFQdHJTdGFjazxOb2RlSW1wbD4gbm9kZVN0
YWNrOwotICAgIE5vZGVJbXBsICpjdXJyZW50ID0gX2ZpcnN0OwotCi0gICAgd2hpbGUoMSkKLSAg
ICB7Ci0gICAgICAgIGlmKCFjdXJyZW50KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZihub2Rl
U3RhY2suaXNFbXB0eSgpKSBicmVhazsKLSAgICAgICAgICAgIGN1cnJlbnQgPSBub2RlU3RhY2su
cG9wKCk7Ci0gICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC0+bmV4dFNpYmxpbmcoKTsKLSAg
ICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmKGN1cnJlbnQt
PmlkKCkgPT0gaWQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7Ci0KLSAgICAgICAg
ICAgIE5vZGVJbXBsICpjaGlsZCA9IGN1cnJlbnQtPmZpcnN0Q2hpbGQoKTsKLSAgICAgICAgICAg
IGlmKGNoaWxkKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG5vZGVTdGFjay5wdXNo
KGN1cnJlbnQpOwotICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBjaGlsZDsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjdXJy
ZW50ID0gY3VycmVudC0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCiBOb2RlSW1wbCAqRG9jdW1lbnRJbXBsOjpuZXh0
Rm9jdXNOb2RlKE5vZGVJbXBsICpmcm9tTm9kZSkKIHsKICAgICB1bnNpZ25lZCBzaG9ydCBmcm9t
VGFiSW5kZXg7CkBAIC0yMTM3LDcgKzE4ODYsNyBAQCBOb2RlSW1wbDo6SWQgRG9jdW1lbnRJbXBs
OjphdHRySWQoRE9NU3RyCiAKICAgICAvLyBGaXJzdCBzZWUgaWYgaXQncyBhIEhUTUwgYXR0cmli
dXRlIG5hbWUKICAgICBRQ29uc3RTdHJpbmcgbihfbmFtZS0+cywgX25hbWUtPmwpOwotICAgIGlm
ICghX25hbWVzcGFjZVVSSSB8fCAhc3RyY2FzZWNtcChfbmFtZXNwYWNlVVJJLCBYSFRNTF9OQU1F
U1BBQ0UpKSB7CisgICAgaWYgKCFfbmFtZXNwYWNlVVJJKSB7CiAgICAgICAgIC8vIHdlJ3JlIGlu
IEhUTUwgbmFtZXNwYWNlIGlmIHdlIGtub3cgdGhlIHRhZy4KICAgICAgICAgLy8geGh0bWwgaXMg
bG93ZXIgY2FzZSAtIGNhc2Ugc2Vuc2l0aXZlLCBlYXN5IHRvIGltcGxlbWVudAogICAgICAgICBp
ZiAoIGh0bWxNb2RlKCkgPT0gWEh0bWwgJiYgKGlkID0gZ2V0QXR0cklEKG4uc3RyaW5nKCkuYXNj
aWkoKSwgX25hbWUtPmwpKSApCkBAIC0yMTUxLDEyICsxOTAwLDEzIEBAIE5vZGVJbXBsOjpJZCBE
b2N1bWVudEltcGw6OmF0dHJJZChET01TdHIKIAogICAgIC8vIG5vdyBsZXRzIGZpbmQgb3V0IHRo
ZSBuYW1lc3BhY2UKICAgICBRX1VJTlQxNiBucyA9IG5vTmFtZXNwYWNlOworICAgIC8qIEZJWE1F
OiBKdXN0IGJyZWFrIG5hbWVzcGFjZWQgYXR0cmlidXRlcyBmb3Igbm93LiAgV2lsbCBmaXggaW4g
bmV4dCBzdGFnZSBvZiBRdWFsaWZpZWROYW1lIGNvbnZlcnNpb24uCiAgICAgaWYgKF9uYW1lc3Bh
Y2VVUkkpIHsKICAgICAgICAgRE9NU3RyaW5nIG5zVShfbmFtZXNwYWNlVVJJKTsKICAgICAgICAg
aW50IG5zSUQgPSBYbWxOYW1lc3BhY2VUYWJsZTo6Z2V0TmFtZXNwYWNlSUQobnNVLCByZWFkb25s
eSk7CiAgICAgICAgIGlmIChuc0lEICE9IC0xKQogICAgICAgICAgICAgbnMgPSAoUV9VSU5UMTYp
bnNJRDsKLSAgICB9CisgICAgfSovCiAgICAgCiAgICAgLy8gTG9vayBpbiB0aGUgbV9hdHRyTmFt
ZXMgYXJyYXkgZm9yIHRoZSBuYW1lCiAgICAgLy8gIyMjIHllYWgsIHRoaXMgaXMgbGFtZS4gdXNl
IGEgZGljdGlvbmFyeSAvIG1hcCBpbnN0ZWFkCkBAIC0yMjA3LDk1ICsxOTU3LDYgQEAgRE9NU3Ry
aW5nIERvY3VtZW50SW1wbDo6YXR0ck5hbWUoTm9kZUltcAogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKLU5vZGVJbXBsOjpJZCBEb2N1bWVudEltcGw6OnRhZ0lkKERPTVN0cmluZ0ltcGwqIF9uYW1l
c3BhY2VVUkksIERPTVN0cmluZ0ltcGwgKl9uYW1lLCBib29sIHJlYWRvbmx5KQotewotICAgIGlm
ICghX25hbWUpIHJldHVybiAwOwotICAgIC8vIEVhY2ggZG9jdW1lbnQgbWFpbnRhaW5zIGEgbWFw
cGluZyBvZiB0YWcgbmFtZSAtPiBpZCBmb3IgZXZlcnkgdGFnIG5hbWUgZW5jb3VudGVyZWQKLSAg
ICAvLyBpbiB0aGUgZG9jdW1lbnQuCi0gICAgTm9kZUltcGw6OklkIGlkID0gMDsKLQotICAgIC8v
IEZpcnN0IHNlZSBpZiBpdCdzIGEgSFRNTCBlbGVtZW50IG5hbWUKLSAgICBRQ29uc3RTdHJpbmcg
bihfbmFtZS0+cywgX25hbWUtPmwpOwotICAgIGlmICghX25hbWVzcGFjZVVSSSB8fCAhc3RyY2Fz
ZWNtcChfbmFtZXNwYWNlVVJJLCBYSFRNTF9OQU1FU1BBQ0UpKSB7Ci0gICAgICAgIC8vIHdlJ3Jl
IGluIEhUTUwgbmFtZXNwYWNlIGlmIHdlIGtub3cgdGhlIHRhZy4KLSAgICAgICAgLy8geGh0bWwg
aXMgbG93ZXIgY2FzZSAtIGNhc2Ugc2Vuc2l0aXZlLCBlYXN5IHRvIGltcGxlbWVudAotICAgICAg
ICBpZiAoIGh0bWxNb2RlKCkgPT0gWEh0bWwgJiYgKGlkID0gZ2V0VGFnSUQobi5zdHJpbmcoKS5h
c2NpaSgpLCBfbmFtZS0+bCkpICkKLSAgICAgICAgICAgIHJldHVybiBpZDsKLSAgICAgICAgLy8g
Y29tcGF0aWJpbGl0eTogdXBwZXIgY2FzZSAtIGNhc2UgaW5zZW5zaXRpdmUKLSAgICAgICAgaWYg
KCBodG1sTW9kZSgpICE9IFhIdG1sICYmIChpZCA9IGdldFRhZ0lEKG4uc3RyaW5nKCkubG93ZXIo
KS5hc2NpaSgpLCBfbmFtZS0+bCApKSApCi0gICAgICAgICAgICByZXR1cm4gaWQ7Ci0KLSAgICAg
ICAgLy8gb2ssIHRoZSBmYXN0IHBhdGggZGlkbid0IHdvcmsgb3V0LCB3ZSBuZWVkIHRoZSBmdWxs
IGNoZWNrCi0gICAgfQotCi0gICAgLy8gbm93IGxldHMgZmluZCBvdXQgdGhlIG5hbWVzcGFjZQot
ICAgIFFfVUlOVDE2IG5zID0gbm9OYW1lc3BhY2U7Ci0gICAgaWYgKF9uYW1lc3BhY2VVUkkpIHsK
LSAgICAgICAgRE9NU3RyaW5nIG5zVShfbmFtZXNwYWNlVVJJKTsKLSAgICAgICAgaW50IG5zSUQg
PSBYbWxOYW1lc3BhY2VUYWJsZTo6Z2V0TmFtZXNwYWNlSUQobnNVLCByZWFkb25seSk7Ci0gICAg
ICAgIGlmIChuc0lEICE9IC0xKQotICAgICAgICAgICAgbnMgPSAoUV9VSU5UMTYpbnNJRDsKLSAg
ICB9Ci0KLSAgICAvLyBMb29rIGluIHRoZSBtX2VsZW1lbnROYW1lcyBhcnJheSBmb3IgdGhlIG5h
bWUKLSAgICAvLyAjIyMgeWVhaCwgdGhpcyBpcyBsYW1lLiB1c2UgYSBkaWN0aW9uYXJ5IC8gbWFw
IGluc3RlYWQKLSAgICBET01TdHJpbmcgbm1lKG4uc3RyaW5nKCkpOwotICAgIC8vIGNvbXBhdGli
aWxpdHkgbW9kZSBoYXMgdG8gc3RvcmUgdXBwZXIgY2FzZQotICAgIGlmIChodG1sTW9kZSgpICE9
IFhIdG1sKSBubWUgPSBubWUudXBwZXIoKTsKLSAgICBmb3IgKGlkID0gMDsgaWQgPCBtX2VsZW1l
bnROYW1lQ291bnQ7IGlkKyspCi0gICAgICAgIGlmIChET01TdHJpbmcobV9lbGVtZW50TmFtZXNb
aWRdKSA9PSBubWUpCi0gICAgICAgICAgICByZXR1cm4gbWFrZUlkKG5zLCBJRF9MQVNUX1RBRyAr
IDEgKyBpZCk7Ci0KLSAgICAvLyB1bmtub3duCi0gICAgaWYgKHJlYWRvbmx5KSByZXR1cm4gMDsK
LQotICAgIC8vIE5hbWUgbm90IGZvdW5kIGluIG1fZWxlbWVudE5hbWVzLCBzbyBsZXQncyBhZGQg
aXQKLSAgICBpZiAobV9lbGVtZW50TmFtZUNvdW50KzEgPiBtX2VsZW1lbnROYW1lQWxsb2MpIHsK
LSAgICAgICAgbV9lbGVtZW50TmFtZUFsbG9jICs9IDEwMDsKLSAgICAgICAgRE9NU3RyaW5nSW1w
bCAqKm5ld05hbWVzID0gbmV3IERPTVN0cmluZ0ltcGwqIFttX2VsZW1lbnROYW1lQWxsb2NdOwot
ICAgICAgICAvLyAjIyMgeWVhaCwgdGhpcyBpcyBsYW1lLiB1c2UgYSBkaWN0aW9uYXJ5IC8gbWFw
IGluc3RlYWQKLSAgICAgICAgaWYgKG1fZWxlbWVudE5hbWVzKSB7Ci0gICAgICAgICAgICB1bnNp
Z25lZCBzaG9ydCBpOwotICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG1fZWxlbWVudE5hbWVD
b3VudDsgaSsrKQotICAgICAgICAgICAgICAgIG5ld05hbWVzW2ldID0gbV9lbGVtZW50TmFtZXNb
aV07Ci0gICAgICAgICAgICBkZWxldGUgW10gbV9lbGVtZW50TmFtZXM7Ci0gICAgICAgIH0KLSAg
ICAgICAgbV9lbGVtZW50TmFtZXMgPSBuZXdOYW1lczsKLSAgICB9Ci0KLSAgICBpZCA9IG1fZWxl
bWVudE5hbWVDb3VudCsrOwotICAgIG1fZWxlbWVudE5hbWVzW2lkXSA9IG5tZS5pbXBsZW1lbnRh
dGlvbigpOwotICAgIG1fZWxlbWVudE5hbWVzW2lkXS0+cmVmKCk7Ci0KLSAgICByZXR1cm4gbWFr
ZUlkKG5zLCBJRF9MQVNUX1RBRyArIDEgKyBpZCk7Ci19Ci0KLURPTVN0cmluZyBEb2N1bWVudElt
cGw6OnRhZ05hbWUoTm9kZUltcGw6OklkIF9pZCkgY29uc3QKLXsKLSAgICBpZiAobG9jYWxOYW1l
UGFydChfaWQpID4gSURfTEFTVF9UQUcpCi0gICAgICAgIHJldHVybiBtX2VsZW1lbnROYW1lc1ts
b2NhbE5hbWVQYXJ0KF9pZCkgLSAoSURfTEFTVF9UQUcgKyAxKV07Ci0gICAgZWxzZSB7Ci0gICAg
ICAgIC8vICMjIyBwdXQgdGhlbSBpbiBhIGNhY2hlCi0gICAgICAgIGlmIChodG1sTW9kZSgpID09
IFhIdG1sKQotICAgICAgICAgICAgcmV0dXJuIGdldFRhZ05hbWUoX2lkKS5sb3dlcigpOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gZ2V0VGFnTmFtZShfaWQpOwotICAgIH0KLX0K
LQotCi1ET01TdHJpbmdJbXBsKiBEb2N1bWVudEltcGw6Om5hbWVzcGFjZVVSSShOb2RlSW1wbDo6
SWQgX2lkKSBjb25zdAotewotICAgIGlmIChfaWQgPD0gSURfTEFTVF9UQUcpCi0gICAgICAgIHJl
dHVybiBodG1sTW9kZSgpID09IFhIdG1sID8gWG1sTmFtZXNwYWNlVGFibGU6OmdldE5hbWVzcGFj
ZVVSSSh4aHRtbE5hbWVzcGFjZSkuaW1wbGVtZW50YXRpb24oKSA6IDA7Ci0KLSAgICB1bnNpZ25l
ZCBzaG9ydCBucyA9IF9pZCA+PiAxNjsKLQotICAgIGlmICghbnMpIHJldHVybiAwOwotCi0gICAg
cmV0dXJuIFhtbE5hbWVzcGFjZVRhYmxlOjpnZXROYW1lc3BhY2VVUkkobnMpLmltcGxlbWVudGF0
aW9uKCk7Ci19Ci0KIFN0eWxlU2hlZXRMaXN0SW1wbCogRG9jdW1lbnRJbXBsOjpzdHlsZVNoZWV0
cygpCiB7CiAgICAgcmV0dXJuIG1fc3R5bGVTaGVldHM7CkBAIC0yNDE5LDExICsyMDgwLDExIEBA
IHZvaWQgRG9jdW1lbnRJbXBsOjpyZWNhbGNTdHlsZVNlbGVjdG9yKCkKICAgICAgICAgICAgIH0K
IAogICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKG4tPmlzSFRNTEVsZW1lbnQoKSAmJiAobi0+
aWQoKSA9PSBJRF9MSU5LIHx8IG4tPmlkKCkgPT0gSURfU1RZTEUpKSB7Ci0gICAgICAgICAgICBF
bGVtZW50SW1wbCAqZSA9IHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsICo+KG4pOworICAgICAgICBl
bHNlIGlmIChuLT5pc0hUTUxFbGVtZW50KCkgJiYgKG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjps
aW5rKCkpIHx8IG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzdHlsZSgpKSkpIHsKKyAgICAgICAg
ICAgIEhUTUxFbGVtZW50SW1wbCAqZSA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCAqPihu
KTsKICAgICAgICAgICAgIFFTdHJpbmcgdGl0bGUgPSBlLT5nZXRBdHRyaWJ1dGUoIEFUVFJfVElU
TEUgKS5zdHJpbmcoKTsKICAgICAgICAgICAgIGJvb2wgZW5hYmxlZFZpYVNjcmlwdCA9IGZhbHNl
OwotICAgICAgICAgICAgaWYgKG4tPmlkKCkgPT0gSURfTElOSykgeworICAgICAgICAgICAgaWYg
KGUtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmxpbmsoKSkpIHsKICAgICAgICAgICAgICAgICAv
LyA8TElOSz4gZWxlbWVudAogICAgICAgICAgICAgICAgIEhUTUxMaW5rRWxlbWVudEltcGwqIGwg
PSBzdGF0aWNfY2FzdDxIVE1MTGlua0VsZW1lbnRJbXBsKj4obik7CiAgICAgICAgICAgICAgICAg
aWYgKGwtPmlzTG9hZGluZygpIHx8IGwtPmlzRGlzYWJsZWQoKSkKQEAgLTI0MzUsNyArMjA5Niw3
IEBAIHZvaWQgRG9jdW1lbnRJbXBsOjpyZWNhbGNTdHlsZVNlbGVjdG9yKCkKIAogICAgICAgICAg
ICAgLy8gR2V0IHRoZSBjdXJyZW50IHByZWZlcnJlZCBzdHlsZXNldC4gIFRoaXMgaXMgdGhlCiAg
ICAgICAgICAgICAvLyBzZXQgb2Ygc2hlZXRzIHRoYXQgd2lsbCBiZSBlbmFibGVkLgotICAgICAg
ICAgICAgaWYgKCBuLT5pZCgpID09IElEX0xJTksgKQorICAgICAgICAgICAgaWYgKGUtPmhhc0xv
Y2FsTmFtZShIVE1MTmFtZXM6OmxpbmsoKSkpCiAgICAgICAgICAgICAgICAgc2hlZXQgPSBzdGF0
aWNfY2FzdDxIVE1MTGlua0VsZW1lbnRJbXBsKj4obiktPnNoZWV0KCk7CiAgICAgICAgICAgICBl
bHNlCiAgICAgICAgICAgICAgICAgLy8gPFNUWUxFPiBlbGVtZW50CkBAIC0yNDUyLDcgKzIxMTMs
NyBAQCB2b2lkIERvY3VtZW50SW1wbDo6cmVjYWxjU3R5bGVTZWxlY3RvcigpCiAgICAgICAgICAg
ICAgICAgICAgIC8vIHVzIGFzIHRoZSBwcmVmZXJyZWQgc2V0LiAgT3RoZXJ3aXNlLCBqdXN0IGln
bm9yZQogICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIHNoZWV0LgogICAgICAgICAgICAgICAg
ICAgICBRU3RyaW5nIHJlbCA9IGUtPmdldEF0dHJpYnV0ZSggQVRUUl9SRUwgKS5zdHJpbmcoKTsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKG4tPmlkKCkgPT0gSURfU1RZTEUgfHwgIXJlbC5jb250
YWlucygiYWx0ZXJuYXRlIikpCisgICAgICAgICAgICAgICAgICAgIGlmIChlLT5oYXNMb2NhbE5h
bWUoSFRNTE5hbWVzOjpzdHlsZSgpKSB8fCAhcmVsLmNvbnRhaW5zKCJhbHRlcm5hdGUiKSkKICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fcHJlZmVycmVkU3R5bGVzaGVldFNldCA9IHZpZXcoKS0+
cGFydCgpLT5kLT5tX3NoZWV0VXNlZCA9IHRpdGxlOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgICAKQEAgLTI0NzEsNyArMjEzMiw3IEBAIHZvaWQgRG9jdW1lbnRJbXBs
OjpyZWNhbGNTdHlsZVNlbGVjdG9yKCkKICAgICAKICAgICAgICAgLy8gRm9yIEhUTUwgZG9jdW1l
bnRzLCBzdHlsZXNoZWV0cyBhcmUgbm90IGFsbG93ZWQgd2l0aGluL2FmdGVyIHRoZSA8Qk9EWT4g
dGFnLiBTbyB3ZQogICAgICAgICAvLyBjYW4gc3RvcCBzZWFyY2hpbmcgaGVyZS4KLSAgICAgICAg
aWYgKGlzSFRNTERvY3VtZW50KCkgJiYgbi0+aWQoKSA9PSBJRF9CT0RZKQorICAgICAgICBpZiAo
aXNIVE1MRG9jdW1lbnQoKSAmJiBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Ym9keSgpKSkKICAg
ICAgICAgICAgIGJyZWFrOwogICAgIH0KIApJbmRleDoga2h0bWwveG1sL2RvbV9kb2NpbXBsLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwveG1sL2RvbV9kb2Np
bXBsLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTE1CmRpZmYgLXUgLXAgLXIxLjExNSBraHRt
bC94bWwvZG9tX2RvY2ltcGwuaAotLS0ga2h0bWwveG1sL2RvbV9kb2NpbXBsLmgJMjIgSnVuIDIw
MDUgMTg6MjI6MDIgLTAwMDAJMS4xMTUKKysrIGtodG1sL3htbC9kb21fZG9jaW1wbC5oCTkgSnVs
IDIwMDUgMDI6NDM6MzYgLTAwMDAKQEAgLTE3Nyw3ICsxNzcsNyBAQCBwdWJsaWM6CiAKICAgICBE
T01JbXBsZW1lbnRhdGlvbkltcGwgKmltcGxlbWVudGF0aW9uKCkgY29uc3Q7CiAgICAgdmlydHVh
bCBFbGVtZW50SW1wbCAqZG9jdW1lbnRFbGVtZW50KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBFbGVt
ZW50SW1wbCAqY3JlYXRlRWxlbWVudCAoIGNvbnN0IERPTVN0cmluZyAmdGFnTmFtZSwgaW50ICZl
eGNlcHRpb25jb2RlICk7CisgICAgdmlydHVhbCBFbGVtZW50SW1wbCAqY3JlYXRlRWxlbWVudChj
b25zdCBET01TdHJpbmcgJnRhZ05hbWUsIGludCAmZXhjZXB0aW9uY29kZSk7CiAgICAgRG9jdW1l
bnRGcmFnbWVudEltcGwgKmNyZWF0ZURvY3VtZW50RnJhZ21lbnQgKCk7CiAgICAgVGV4dEltcGwg
KmNyZWF0ZVRleHROb2RlICggY29uc3QgRE9NU3RyaW5nICZkYXRhICk7CiAgICAgQ29tbWVudElt
cGwgKmNyZWF0ZUNvbW1lbnQgKCBjb25zdCBET01TdHJpbmcgJmRhdGEgKTsKQEAgLTE4OCw3ICsx
ODgsNyBAQCBwdWJsaWM6CiAgICAgQXR0ckltcGwgKmNyZWF0ZUF0dHJpYnV0ZU5TKGNvbnN0IERP
TVN0cmluZyAmbmFtZXNwYWNlVVJJLCBjb25zdCBET01TdHJpbmcgJnF1YWxpZmllZE5hbWUsIGlu
dCAmZXhjZXB0aW9uKTsKICAgICBFbnRpdHlSZWZlcmVuY2VJbXBsICpjcmVhdGVFbnRpdHlSZWZl
cmVuY2UgKCBjb25zdCBET01TdHJpbmcgJm5hbWUgKTsKICAgICBOb2RlSW1wbCAqaW1wb3J0Tm9k
ZSggTm9kZUltcGwgKmltcG9ydGVkTm9kZSwgYm9vbCBkZWVwLCBpbnQgJmV4Y2VwdGlvbmNvZGUg
KTsKLSAgICB2aXJ0dWFsIEVsZW1lbnRJbXBsICpjcmVhdGVFbGVtZW50TlMgKCBjb25zdCBET01T
dHJpbmcgJl9uYW1lc3BhY2VVUkksIGNvbnN0IERPTVN0cmluZyAmX3F1YWxpZmllZE5hbWUsIGlu
dCAmZXhjZXB0aW9uY29kZSApOworICAgIHZpcnR1YWwgRWxlbWVudEltcGwgKmNyZWF0ZUVsZW1l
bnROUyhjb25zdCBET01TdHJpbmcgJl9uYW1lc3BhY2VVUkksIGNvbnN0IERPTVN0cmluZyAmX3F1
YWxpZmllZE5hbWUsIGludCAmZXhjZXB0aW9uY29kZSk7CiAgICAgRWxlbWVudEltcGwgKmdldEVs
ZW1lbnRCeUlkICggY29uc3QgRE9NU3RyaW5nICZlbGVtZW50SWQgKSBjb25zdDsKICAgICBFbGVt
ZW50SW1wbCAqZWxlbWVudEZyb21Qb2ludCAoIGNvbnN0IGludCBfeCwgY29uc3QgaW50IF95ICkg
Y29uc3Q7CiAKQEAgLTIxOCw5ICsyMTgsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlz
RG9jdW1lbnROb2RlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBp
c0hUTUxEb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICBFbGVtZW50SW1w
bCAqY3JlYXRlSFRNTEVsZW1lbnQoY29uc3QgRE9NU3RyaW5nICZ0YWdOYW1lLCBpbnQgJmV4Y2Vw
dGlvbmNvZGUpOwotICAgIEVsZW1lbnRJbXBsICpjcmVhdGVIVE1MRWxlbWVudCh1bnNpZ25lZCBz
aG9ydCB0YWdJRCk7Ci0KICAgICBraHRtbDo6Q1NTU3R5bGVTZWxlY3RvciAqc3R5bGVTZWxlY3Rv
cigpIHsgcmV0dXJuIG1fc3R5bGVTZWxlY3RvcjsgfQogCiAgICAgRWxlbWVudEltcGwgKkRvY3Vt
ZW50SW1wbDo6Z2V0RWxlbWVudEJ5QWNjZXNzS2V5KCBjb25zdCBET01TdHJpbmcgJmtleSApOwpA
QCAtMzg3LDkgKzM4NCw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlc2V0VmlzaXRlZExpbmtDb2xv
cigpOwogICAgIHZvaWQgcmVzZXRBY3RpdmVMaW5rQ29sb3IoKTsKICAgICAKLSAgICAvLyBpbnRl
cm5hbAotICAgIE5vZGVJbXBsICpmaW5kRWxlbWVudCggSWQgaWQgKTsKLQogICAgIGJvb2wgcHJl
cGFyZU1vdXNlRXZlbnQoIGJvb2wgcmVhZG9ubHksIGludCB4LCBpbnQgeSwgTW91c2VFdmVudCAq
ZXYgKTsKIAogICAgIHZpcnR1YWwgYm9vbCBjaGlsZEFsbG93ZWQoIE5vZGVJbXBsICpuZXdDaGls
ZCApOwpAQCAtMzk5LDE2ICszOTMsOSBAQCBwdWJsaWM6CiAgICAgLy8gIyMjIHRoaW5rIGFib3V0
IGltcGxlbWVudGluZyByZWYnY291bnRpbmcgZm9yIHRoZSBpZCdzCiAgICAgLy8gaW4gb3JkZXIg
dG8gYmUgYWJsZSB0byByZWFzc2lnbiB0aG9zZSB0aGF0IGFyZSBubyBsb25nZXIgaW4gdXNlCiAg
ICAgLy8gKGNvdWxkIG1ha2UgcHJvYmxlbXMgd2hlbiBpdCBpcyBzdGlsbCBrZXB0IHNvbWV3aGVy
ZSBhcm91bmQsIGkuZS4gc3R5bGVzZWxlY3RvcikKLSAgICBOb2RlSW1wbDo6SWQgdGFnSWQoRE9N
U3RyaW5nSW1wbCogX25hbWVzcGFjZVVSSSwgRE9NU3RyaW5nSW1wbCAqX25hbWUsIGJvb2wgcmVh
ZG9ubHkpOwotICAgIERPTVN0cmluZyB0YWdOYW1lKE5vZGVJbXBsOjpJZCBfaWQpIGNvbnN0Owot
CiAgICAgTm9kZUltcGw6OklkIGF0dHJJZChET01TdHJpbmdJbXBsKiBfbmFtZXNwYWNlVVJJLCBE
T01TdHJpbmdJbXBsICpfbmFtZSwgYm9vbCByZWFkb25seSk7CiAgICAgRE9NU3RyaW5nIGF0dHJO
YW1lKE5vZGVJbXBsOjpJZCBfaWQpIGNvbnN0OwogCi0gICAgLy8gdGhlIG5hbWVzcGFjZSB1cmkg
aXMgbWFwcGVkIHRvIHRoZSBzYW1lIGlkIGZvciBib3RoCi0gICAgLy8gdGFnbmFtZXMgYXMgd2Vs
bCBhcyBhdHRyaWJ1dGVzLgotICAgIERPTVN0cmluZ0ltcGwqIG5hbWVzcGFjZVVSSShOb2RlSW1w
bDo6SWQgX2lkKSBjb25zdDsKLQogICAgIFN0eWxlU2hlZXRMaXN0SW1wbCogc3R5bGVTaGVldHMo
KTsKIAogICAgIC8qIE5ld2x5IHByb3Bvc2VkIENTUzMgbWVjaGFuaXNtIGZvciBzZWxlY3Rpbmcg
YWx0ZXJuYXRlCkluZGV4OiBraHRtbC94bWwvZG9tX2VsZW1lbnRpbXBsLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC94bWwvZG9tX2VsZW1lbnRpbXBsLmNw
cCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS42NwpkaWZmIC11IC1wIC1yMS42NyBraHRtbC94bWwv
ZG9tX2VsZW1lbnRpbXBsLmNwcAotLS0ga2h0bWwveG1sL2RvbV9lbGVtZW50aW1wbC5jcHAJMTEg
TWF5IDIwMDUgMDU6NDk6MzUgLTAwMDAJMS42NworKysga2h0bWwveG1sL2RvbV9lbGVtZW50aW1w
bC5jcHAJOSBKdWwgMjAwNSAwMjo0MzozNyAtMDAwMApAQCAtMzMsNyArMzMsNiBAQAogCiAjaW5j
bHVkZSAia2h0bWxfcGFydC5oIgogCi0jaW5jbHVkZSAiaHRtbC9kdGQuaCIKICNpbmNsdWRlICJo
dG1sL2h0bWxwYXJzZXIuaCIKIAogI2luY2x1ZGUgInJlbmRlcmluZy9yZW5kZXJfY2FudmFzLmgi
CkBAIC05MCwxOCArODksMTggQEAgdW5zaWduZWQgc2hvcnQgQXR0ckltcGw6Om5vZGVUeXBlKCkg
Y29ucwogICAgIHJldHVybiBOb2RlOjpBVFRSSUJVVEVfTk9ERTsKIH0KIAotRE9NU3RyaW5nIEF0
dHJJbXBsOjpwcmVmaXgoKSBjb25zdAorY29uc3QgQXRvbWljU3RyaW5nJiBBdHRySW1wbDo6cHJl
Zml4KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9hdHRyaWJ1dGUtPnByZWZpeCgpOwogfQogCi12
b2lkIEF0dHJJbXBsOjpzZXRQcmVmaXgoY29uc3QgRE9NU3RyaW5nICZfcHJlZml4LCBpbnQgJmV4
Y2VwdGlvbmNvZGUgKQordm9pZCBBdHRySW1wbDo6c2V0UHJlZml4KGNvbnN0IEF0b21pY1N0cmlu
ZyAmX3ByZWZpeCwgaW50ICZleGNlcHRpb25jb2RlICkKIHsKICAgICBjaGVja1NldFByZWZpeChf
cHJlZml4LCBleGNlcHRpb25jb2RlKTsKICAgICBpZiAoZXhjZXB0aW9uY29kZSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgbV9hdHRyaWJ1dGUtPnNldFByZWZpeChfcHJlZml4LmltcGxlbWVudGF0
aW9uKCkpOworICAgIG1fYXR0cmlidXRlLT5zZXRQcmVmaXgoX3ByZWZpeCk7CiB9CiAKIERPTVN0
cmluZyBBdHRySW1wbDo6bm9kZVZhbHVlKCkgY29uc3QKQEAgLTIwMiwxMSArMjAxLDEwIEBAIERP
TVN0cmluZyBBdHRySW1wbDo6dmFsdWUoKSBjb25zdAogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAK
LUVsZW1lbnRJbXBsOjpFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKQotICAgIDogQ29udGFp
bmVyTm9kZUltcGwoZG9jKQorRWxlbWVudEltcGw6OkVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmll
ZE5hbWUmIHFOYW1lLCBEb2N1bWVudFB0ciAqZG9jKQorICAgIDogQ29udGFpbmVyTm9kZUltcGwo
ZG9jKSwgbV90YWdOYW1lKHFOYW1lKQogewogICAgIG5hbWVkQXR0ck1hcCA9IDA7Ci0gICAgbV9w
cmVmaXggPSAwOwogfQogCiBFbGVtZW50SW1wbDo6fkVsZW1lbnRJbXBsKCkKQEAgLTIxNSw5ICsy
MTMsMjIgQEAgRWxlbWVudEltcGw6On5FbGVtZW50SW1wbCgpCiAgICAgICAgIG5hbWVkQXR0ck1h
cC0+ZGV0YWNoRnJvbUVsZW1lbnQoKTsKICAgICAgICAgbmFtZWRBdHRyTWFwLT5kZXJlZigpOwog
ICAgIH0KK30KIAotICAgIGlmIChtX3ByZWZpeCkKLSAgICAgICAgbV9wcmVmaXgtPmRlcmVmKCk7
CitOb2RlSW1wbCAqRWxlbWVudEltcGw6OmNsb25lTm9kZShib29sIGRlZXApCit7CisgICAgaW50
IGV4Y2VwdGlvbkNvZGUgPSAwOworICAgIEVsZW1lbnRJbXBsICpjbG9uZSA9IGdldERvY3VtZW50
KCktPmNyZWF0ZUVsZW1lbnROUyhuYW1lc3BhY2VVUkkoKSwgbm9kZU5hbWUoKSwgZXhjZXB0aW9u
Q29kZSk7CisgICAgYXNzZXJ0KCFleGNlcHRpb25Db2RlKTsKKyAgICAKKyAgICAvLyBjbG9uZSBh
dHRyaWJ1dGVzCisgICAgaWYgKG5hbWVkQXR0ck1hcCkKKyAgICAgICAgKmNsb25lLT5hdHRyaWJ1
dGVzKCkgPSAqbmFtZWRBdHRyTWFwOworCisgICAgaWYgKGRlZXApCisgICAgICAgIGNsb25lQ2hp
bGROb2RlcyhjbG9uZSk7CisKKyAgICByZXR1cm4gY2xvbmU7CiB9CiAKIHZvaWQgRWxlbWVudElt
cGw6OnJlbW92ZUF0dHJpYnV0ZSggTm9kZUltcGw6OklkIGlkLCBpbnQgJmV4Y2VwdGlvbmNvZGUg
KQpAQCAtMzUxLDM2ICszNjIsMjQgQEAgdm9pZCBFbGVtZW50SW1wbDo6c2V0QXR0cmlidXRlTWFw
KCBOYW1lZAogYm9vbCBFbGVtZW50SW1wbDo6aGFzQXR0cmlidXRlcygpIGNvbnN0CiB7CiAgICAg
dXBkYXRlU3R5bGVBdHRyaWJ1dGVJZk5lZWRlZCgpOwotCiAgICAgcmV0dXJuIG5hbWVkQXR0ck1h
cCAmJiBuYW1lZEF0dHJNYXAtPmxlbmd0aCgpID4gMDsKIH0KIAogRE9NU3RyaW5nIEVsZW1lbnRJ
bXBsOjpub2RlTmFtZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHRhZ05hbWUoKTsKLX0KLQotRE9N
U3RyaW5nIEVsZW1lbnRJbXBsOjp0YWdOYW1lKCkgY29uc3QKLXsKLSAgICBET01TdHJpbmcgdG4g
PSBnZXREb2N1bWVudCgpLT50YWdOYW1lKGlkKCkpOwotCi0gICAgaWYgKG1fcHJlZml4KQotICAg
ICAgICByZXR1cm4gRE9NU3RyaW5nKG1fcHJlZml4KSArICI6IiArIHRuOwotCisgICAgRE9NU3Ry
aW5nIHRuID0gbV90YWdOYW1lLmxvY2FsTmFtZSgpOworICAgIGlmIChtX3RhZ05hbWUuaGFzUHJl
Zml4KCkpCisgICAgICAgIHJldHVybiBET01TdHJpbmcobV90YWdOYW1lLnByZWZpeCgpKSArICI6
IiArIHRuOwogICAgIHJldHVybiB0bjsKIH0KIAotdm9pZCBFbGVtZW50SW1wbDo6c2V0UHJlZml4
KCBjb25zdCBET01TdHJpbmcgJl9wcmVmaXgsIGludCAmZXhjZXB0aW9uY29kZSApCit2b2lkIEVs
ZW1lbnRJbXBsOjpzZXRQcmVmaXgoY29uc3QgQXRvbWljU3RyaW5nICZfcHJlZml4LCBpbnQgJmV4
Y2VwdGlvbmNvZGUpCiB7CiAgICAgY2hlY2tTZXRQcmVmaXgoX3ByZWZpeCwgZXhjZXB0aW9uY29k
ZSk7CiAgICAgaWYgKGV4Y2VwdGlvbmNvZGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICht
X3ByZWZpeCkKLSAgICAgICAgbV9wcmVmaXgtPmRlcmVmKCk7Ci0gICAgbV9wcmVmaXggPSBfcHJl
Zml4LmltcGxlbWVudGF0aW9uKCk7Ci0gICAgaWYgKG1fcHJlZml4KQotICAgICAgICBtX3ByZWZp
eC0+cmVmKCk7CisgICAgbV90YWdOYW1lLnNldFByZWZpeChfcHJlZml4KTsKIH0KIAogdm9pZCBF
bGVtZW50SW1wbDo6Y3JlYXRlQXR0cmlidXRlTWFwKCkgY29uc3QKQEAgLTUyMSwxOCArNTIwLDYg
QEAgdm9pZCBFbGVtZW50SW1wbDo6cmVjYWxjU3R5bGUoIFN0eWxlQ2hhbgogICAgIHNldEhhc0No
YW5nZWRDaGlsZCggZmFsc2UgKTsKIH0KIAotLy8gRE9NIFNlY3Rpb24gMS4xLjEKLWJvb2wgRWxl
bWVudEltcGw6OmNoaWxkQWxsb3dlZCggTm9kZUltcGwgKm5ld0NoaWxkICkKLXsKLSAgICBpZiAo
IWNoaWxkVHlwZUFsbG93ZWQobmV3Q2hpbGQtPm5vZGVUeXBlKCkpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICAvLyBGb3IgWE1MIGRvY3VtZW50cywgd2UgYXJlIG5vbi12YWxpZGF0aW5n
IGFuZCBkbyBub3QgY2hlY2sgYWdhaW5zdCBhIERURCwgZXZlbiBmb3IgSFRNTCBlbGVtZW50cy4K
LSAgICBpZiAoZ2V0RG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSkKLSAgICAgICAgcmV0dXJu
IGNoZWNrQ2hpbGQoaWQoKSwgbmV3Q2hpbGQtPmlkKCksICFnZXREb2N1bWVudCgpLT5pbkNvbXBh
dE1vZGUoKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIGJvb2wgRWxlbWVudEltcGw6OmNoaWxk
VHlwZUFsbG93ZWQoIHVuc2lnbmVkIHNob3J0IHR5cGUgKQogewogICAgIHN3aXRjaCAodHlwZSkg
ewpAQCAtNTY5LDcgKzU1Niw3IEBAIHZvaWQgRWxlbWVudEltcGw6OmRpc3BhdGNoQXR0ckFkZGl0
aW9uRXYKIAogRE9NU3RyaW5nIEVsZW1lbnRJbXBsOjpvcGVuVGFnU3RhcnRUb1N0cmluZygpIGNv
bnN0CiB7Ci0gICAgRE9NU3RyaW5nIHJlc3VsdCA9IERPTVN0cmluZygiPCIpICsgdGFnTmFtZSgp
OworICAgIERPTVN0cmluZyByZXN1bHQgPSBET01TdHJpbmcoIjwiKSArIG5vZGVOYW1lKCk7CiAK
ICAgICBOYW1lZEF0dHJNYXBJbXBsICphdHRyTWFwID0gYXR0cmlidXRlcyh0cnVlKTsKIApAQCAt
NjEwLDcgKzU5Nyw3IEBAIERPTVN0cmluZyBFbGVtZW50SW1wbDo6dG9TdHJpbmcoKSBjb25zdAog
CX0KIAogCXJlc3VsdCArPSAiPC8iOwotCXJlc3VsdCArPSB0YWdOYW1lKCk7CisJcmVzdWx0ICs9
IG5vZGVOYW1lKCk7CiAJcmVzdWx0ICs9ICI+IjsKICAgICB9IGVsc2UgewogCXJlc3VsdCArPSAi
IC8+IjsKQEAgLTc1OSwxMiArNzQ2LDcgQEAgQ1NTU3R5bGVEZWNsYXJhdGlvbkltcGwgKkVsZW1l
bnRJbXBsOjpzdAogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVhNTEVsZW1lbnRJbXBsOjpYTUxF
bGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jLCBET01TdHJpbmdJbXBsICpfdGFnTmFtZSkKLSAg
ICA6IEVsZW1lbnRJbXBsKGRvYykKLXsKLSAgICBtX2lkID0gZG9jLT5kb2N1bWVudCgpLT50YWdJ
ZCgwIC8qIG5vIG5hbWVzcGFjZSAqLywgX3RhZ05hbWUsICBmYWxzZSAvKiBhbGxvY2F0ZSAqLyk7
Ci19Ci0KKy8qCiBYTUxFbGVtZW50SW1wbDo6WE1MRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRv
YywgRE9NU3RyaW5nSW1wbCAqX3F1YWxpZmllZE5hbWUsIERPTVN0cmluZ0ltcGwgKl9uYW1lc3Bh
Y2VVUkkpCiAgICAgOiBFbGVtZW50SW1wbChkb2MpCiB7CkBAIC03ODAsNDkgKzc2MiwyNCBAQCBY
TUxFbGVtZW50SW1wbDo6WE1MRWxlbWVudEltcGwoRG9jdW1lbnRQCiAgICAgICAgIERPTVN0cmlu
Z0ltcGwqIGxvY2FsTmFtZSA9IF9xdWFsaWZpZWROYW1lLT5jb3B5KCk7CiAgICAgICAgIGxvY2Fs
TmFtZS0+cmVmKCk7CiAgICAgICAgIGxvY2FsTmFtZS0+cmVtb3ZlKDAsY29sb25wb3MrMSk7Ci0g
ICAgICAgIG1faWQgPSBkb2MtPmRvY3VtZW50KCktPnRhZ0lkKF9uYW1lc3BhY2VVUkksIGxvY2Fs
TmFtZSwgZmFsc2UgLyogYWxsb2NhdGUgKi8pOworICAgICAgICBtX2lkID0gZG9jLT5kb2N1bWVu
dCgpLT50YWdJZChfbmFtZXNwYWNlVVJJLCBsb2NhbE5hbWUsIGZhbHNlKTsKICAgICAgICAgbG9j
YWxOYW1lLT5kZXJlZigpOwotICAgICAgICBtX3ByZWZpeCA9IF9xdWFsaWZpZWROYW1lLT5jb3B5
KCk7Ci0gICAgICAgIG1fcHJlZml4LT5yZWYoKTsKLSAgICAgICAgbV9wcmVmaXgtPnRydW5jYXRl
KGNvbG9ucG9zKTsKKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgdGVtcG9y
YXJ5IHNpdHVhdGlvbiBmb3Igc3RhZ2Ugb25lIG9mIHRoZSBRdWFsaWZpZWROYW1lIHBhdGNoLiAg
VGhpcyBpcyBhbHNvIGEgcmVhbGx5IHN0dXBpZCB3YXkgdG8KKyAgICAgICAgLy8gaGF2ZSB0byBo
YW5kbGUgdGhlIHByZWZpeC4gIFdheSB0b28gbXVjaCBjb3B5aW5nLiAgV2Ugc2hvdWxkIG1ha2Ug
c3VyZSB0aGUgWE1MIHRva2VuaXplciBoYXMgZG9uZSB0aGUgc3BsaXQKKyAgICAgICAgLy8gYWxy
ZWFkeSBpbnRvIHByZWZpeCBhbmQgbG9jYWxOYW1lLgorICAgICAgICBET01TdHJpbmdJbXBsKiBw
cmVmaXggPSBfcXVhbGlmaWVkTmFtZS0+Y29weSgpOworICAgICAgICBwcmVmaXgtPnJlZigpOwor
ICAgICAgICBwcmVmaXgtPnRydW5jYXRlKGNvbG9ucG9zKTsKKyAgICAgICAgbV90YWdOYW1lID0g
UXVhbGlmaWVkTmFtZShwcmVmaXgsIG51bGxBdG9tLCBudWxsQXRvbSk7CisgICAgICAgIHByZWZp
eC0+ZGVyZWYoKTsKICAgICB9Ci0gICAgZWxzZSB7CisgICAgZWxzZQogICAgICAgICAvLyBubyBw
cmVmaXgKLSAgICAgICAgbV9pZCA9IGRvYy0+ZG9jdW1lbnQoKS0+dGFnSWQoX25hbWVzcGFjZVVS
SSwgX3F1YWxpZmllZE5hbWUsIGZhbHNlIC8qIGFsbG9jYXRlICovKTsKLSAgICAgICAgbV9wcmVm
aXggPSAwOwotICAgIH0KKyAgICAgICAgbV9pZCA9IGRvYy0+ZG9jdW1lbnQoKS0+dGFnSWQoX25h
bWVzcGFjZVVSSSwgX3F1YWxpZmllZE5hbWUsIGZhbHNlKTsKIH0KIAotWE1MRWxlbWVudEltcGw6
On5YTUxFbGVtZW50SW1wbCgpCi17Ci19Ci0KLURPTVN0cmluZyBYTUxFbGVtZW50SW1wbDo6bG9j
YWxOYW1lKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0RG9jdW1lbnQoKS0+dGFnTmFtZShtX2lk
KTsKLX0KLQotRE9NU3RyaW5nIFhNTEVsZW1lbnRJbXBsOjpuYW1lc3BhY2VVUkkoKSBjb25zdAot
ewotICAgIHJldHVybiBnZXREb2N1bWVudCgpLT5uYW1lc3BhY2VVUkkobV9pZCk7Ci19Ci0KLU5v
ZGVJbXBsICpYTUxFbGVtZW50SW1wbDo6Y2xvbmVOb2RlICggYm9vbCBkZWVwICkKLXsKLSAgICAv
LyAjIyMgd2UgbG9zZSBuYW1lc3BhY2UgaGVyZSBGSVhNRQotICAgIC8vIHNob3VsZCBwYXNzIGlk
IGFyb3VuZAotICAgIFhNTEVsZW1lbnRJbXBsICpjbG9uZSA9IG5ldyBYTUxFbGVtZW50SW1wbChk
b2NQdHIoKSwgZ2V0RG9jdW1lbnQoKS0+dGFnTmFtZShtX2lkKS5pbXBsZW1lbnRhdGlvbigpKTsK
LSAgICBjbG9uZS0+bV9pZCA9IG1faWQ7Ci0KLSAgICAvLyBjbG9uZSBhdHRyaWJ1dGVzCi0gICAg
aWYgKG5hbWVkQXR0ck1hcCkKLSAgICAgICAgKmNsb25lLT5hdHRyaWJ1dGVzKGZhbHNlKSA9ICpu
YW1lZEF0dHJNYXA7Ci0KLSAgICBpZiAoZGVlcCkKLSAgICAgICAgY2xvbmVDaGlsZE5vZGVzKGNs
b25lKTsKLQotICAgIHJldHVybiBjbG9uZTsKLX0KKyovCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
IApAQCAtMTI3MCw4ICsxMjI3LDggQEAgdm9pZCBOYW1lZE1hcHBlZEF0dHJNYXBJbXBsOjpwYXJz
ZUNsYXNzQQogICAgIH0KIH0KIAotU3R5bGVkRWxlbWVudEltcGw6OlN0eWxlZEVsZW1lbnRJbXBs
KERvY3VtZW50UHRyICpkb2MpCi0gICAgOiBFbGVtZW50SW1wbChkb2MpCitTdHlsZWRFbGVtZW50
SW1wbDo6U3R5bGVkRWxlbWVudEltcGwoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgRG9jdW1l
bnRQdHIgKmRvYykKKyAgICA6IEVsZW1lbnRJbXBsKG5hbWUsIGRvYykKIHsKICAgICBtX2lubGlu
ZVN0eWxlRGVjbCA9IDA7CiAgICAgbV9pc1N0eWxlQXR0cmlidXRlVmFsaWQgPSB0cnVlOwpJbmRl
eDoga2h0bWwveG1sL2RvbV9lbGVtZW50aW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9XZWJDb3JlL2todG1sL3htbC9kb21fZWxlbWVudGltcGwuaCx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS40MQpkaWZmIC11IC1wIC1yMS40MSBraHRtbC94bWwvZG9tX2VsZW1lbnRpbXBsLmgK
LS0tIGtodG1sL3htbC9kb21fZWxlbWVudGltcGwuaAkxMiBNYXkgMjAwNSAxNzoxMToyMiAtMDAw
MAkxLjQxCisrKyBraHRtbC94bWwvZG9tX2VsZW1lbnRpbXBsLmgJOSBKdWwgMjAwNSAwMjo0Mzoz
OCAtMDAwMApAQCAtMjMsMTMgKzIzLDE0IEBACiAgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVT
QS4KICAqCiAgKi8KLSNpZm5kZWYgX0RPTV9FTEVNRU5USW1wbF9oXwotI2RlZmluZSBfRE9NX0VM
RU1FTlRJbXBsX2hfCisjaWZuZGVmIF9ET01fRUxFTUVOVElNUExfaF8KKyNkZWZpbmUgX0RPTV9F
TEVNRU5USU1QTF9oXwogCiAjaW5jbHVkZSAiZG9tX25vZGVpbXBsLmgiCiAjaW5jbHVkZSAieG1s
L2RvbV9zdHJpbmdpbXBsLmgiCiAjaW5jbHVkZSAibWlzYy9zaGFyZWQuaCIKICNpbmNsdWRlICJj
c3MvY3NzX3ZhbHVlaW1wbC5oIgorI2luY2x1ZGUgImRvbV9xbmFtZS5oIgogCiAjaWYgQVBQTEVf
Q0hBTkdFUwogI2lmZGVmIF9fT0JKQ19fCkBAIC0xMjgsOCArMTI5LDggQEAgcHVibGljOgogICAg
IC8vIERPTSBtZXRob2RzIG92ZXJyaWRkZW4gZnJvbSAgcGFyZW50IGNsYXNzZXMKICAgICB2aXJ0
dWFsIERPTVN0cmluZyBub2RlTmFtZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgdW5zaWduZWQgc2hv
cnQgbm9kZVR5cGUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIERPTVN0cmluZyBwcmVmaXgoKSBjb25z
dDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0UHJlZml4KGNvbnN0IERPTVN0cmluZyAmX3ByZWZpeCwg
aW50ICZleGNlcHRpb25jb2RlICk7CisgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIHBy
ZWZpeCgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRQcmVmaXgoY29uc3QgQXRvbWljU3Ry
aW5nICZfcHJlZml4LCBpbnQgJmV4Y2VwdGlvbmNvZGUgKTsKIAogICAgIHZpcnR1YWwgRE9NU3Ry
aW5nIG5vZGVWYWx1ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBzZXROb2RlVmFsdWUoIGNv
bnN0IERPTVN0cmluZyAmLCBpbnQgJmV4Y2VwdGlvbmNvZGUgKTsKQEAgLTE1Niw3ICsxNTcsNyBA
QCBjbGFzcyBFbGVtZW50SW1wbCA6IHB1YmxpYyBDb250YWluZXJOb2RlCiAgICAgZnJpZW5kIGNs
YXNzIE5vZGVJbXBsOwogICAgIGZyaWVuZCBjbGFzcyBraHRtbDo6Q1NTU3R5bGVTZWxlY3RvcjsK
IHB1YmxpYzoKLSAgICBFbGVtZW50SW1wbChEb2N1bWVudFB0ciAqZG9jKTsKKyAgICBFbGVtZW50
SW1wbChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudFB0ciAqZG9jKTsKICAg
ICB+RWxlbWVudEltcGwoKTsKIAogICAgIC8vIFVzZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgd2hl
dGhlciBvciBub3QgYW4gZWxlbWVudCBoYXMgYSBnaXZlbiBDU1MgY2xhc3MuCkBAIC0xODYsMTUg
KzE4NywyMiBAQCBwdWJsaWM6CiAgICAgU2hhcmVkUHRyPEF0dHJJbXBsPiBzZXRBdHRyaWJ1dGVO
b2RlTlMoQXR0ckltcGwgKm5ld0F0dHIsIGludCAmZXhjZXB0aW9uKSB7IHJldHVybiBzZXRBdHRy
aWJ1dGVOb2RlKG5ld0F0dHIsIGV4Y2VwdGlvbik7IH0KICAgICBTaGFyZWRQdHI8QXR0ckltcGw+
IHJlbW92ZUF0dHJpYnV0ZU5vZGUoQXR0ckltcGwgKm9sZEF0dHIsIGludCAmZXhjZXB0aW9uKTsK
ICAgICAKLSAgICBET01TdHJpbmcgcHJlZml4KCkgY29uc3QgeyByZXR1cm4gbV9wcmVmaXg7IH0K
LSAgICB2b2lkIHNldFByZWZpeChjb25zdCBET01TdHJpbmcgJl9wcmVmaXgsIGludCAmZXhjZXB0
aW9uY29kZSApOwotCiAgICAgdmlydHVhbCBDU1NTdHlsZURlY2xhcmF0aW9uSW1wbCAqc3R5bGUo
KTsKIAorICAgIHZpcnR1YWwgY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSgpIGNvbnN0IHsg
cmV0dXJuIG1fdGFnTmFtZTsgfQorICAgIHZpcnR1YWwgYm9vbCBoYXNUYWdOYW1lKGNvbnN0IFF1
YWxpZmllZE5hbWUmIHRhZ05hbWUpIGNvbnN0IHsgcmV0dXJuIG1fdGFnTmFtZS5tYXRjaGVzKHRh
Z05hbWUpOyB9CisgICAgCisgICAgLy8gQSBmYXN0IGZ1bmN0aW9uIGZvciBjaGVja2luZyB0aGUg
bG9jYWwgbmFtZSBhZ2FpbnN0IGFub3RoZXIgYXRvbWljIHN0cmluZy4KKyAgICBib29sIGhhc0xv
Y2FsTmFtZShjb25zdCBBdG9taWNTdHJpbmcmIG90aGVyKSBjb25zdCB7IHJldHVybiBtX3RhZ05h
bWUubG9jYWxOYW1lKCkgPT0gb3RoZXI7IH0KKworICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3Ry
aW5nJiBsb2NhbE5hbWUoKSBjb25zdCB7IHJldHVybiBtX3RhZ05hbWUubG9jYWxOYW1lKCk7IH0K
KyAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4KCkgY29uc3QgeyByZXR1cm4g
bV90YWdOYW1lLnByZWZpeCgpOyB9CisgICAgdmlydHVhbCB2b2lkIHNldFByZWZpeChjb25zdCBB
dG9taWNTdHJpbmcgJl9wcmVmaXgsIGludCAmZXhjZXB0aW9uY29kZSk7CisgICAgdmlydHVhbCBj
b25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFnTmFt
ZS5uYW1lc3BhY2VVUkkoKTsgfQorICAgIAogICAgIC8vIERPTSBtZXRob2RzIG92ZXJyaWRkZW4g
ZnJvbSAgcGFyZW50IGNsYXNzZXMKLSAgICB2aXJ0dWFsIERPTVN0cmluZyB0YWdOYW1lKCkgY29u
c3Q7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCBub2RlVHlwZSgpIGNvbnN0OwotICAgIHZp
cnR1YWwgTm9kZUltcGwgKmNsb25lTm9kZSAoIGJvb2wgZGVlcCApID0gMDsKKyAgICB2aXJ0dWFs
IE5vZGVJbXBsICpjbG9uZU5vZGUoYm9vbCBkZWVwKTsKICAgICB2aXJ0dWFsIERPTVN0cmluZyBu
b2RlTmFtZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBpc0VsZW1lbnROb2RlKCkgY29uc3Qg
eyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9Eb2N1bWVudCgp
OwpAQCAtMjIxLDcgKzIyOSw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcmVjYWxjU3R5
bGUoIFN0eWxlQ2hhbmdlID0gTm9DaGFuZ2UgKTsKIAogICAgIHZpcnR1YWwgdm9pZCBtb3VzZUV2
ZW50SGFuZGxlciggTW91c2VFdmVudCAqLypldiovLCBib29sIC8qaW5zaWRlKi8gKSB7fTsKLSAg
ICB2aXJ0dWFsIGJvb2wgY2hpbGRBbGxvd2VkKCBOb2RlSW1wbCAqbmV3Q2hpbGQgKTsKICAgICB2
aXJ0dWFsIGJvb2wgY2hpbGRUeXBlQWxsb3dlZCggdW5zaWduZWQgc2hvcnQgdHlwZSApOwogIAog
ICAgIHZpcnR1YWwgQXR0cmlidXRlSW1wbCogY3JlYXRlQXR0cmlidXRlKElkIGlkLCBET01TdHJp
bmdJbXBsKiB2YWx1ZSk7CkBAIC0yNTQsMjkgKzI2MSw3IEBAIHByaXZhdGU6CiAKIHByb3RlY3Rl
ZDogLy8gbWVtYmVyIHZhcmlhYmxlcwogICAgIG11dGFibGUgTmFtZWRBdHRyTWFwSW1wbCAqbmFt
ZWRBdHRyTWFwOwotICAgIERPTVN0cmluZ0ltcGwgKm1fcHJlZml4OwotfTsKLQotCi1jbGFzcyBY
TUxFbGVtZW50SW1wbCA6IHB1YmxpYyBFbGVtZW50SW1wbAotewotCi1wdWJsaWM6Ci0gICAgWE1M
RWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgRE9NU3RyaW5nSW1wbCAqX3RhZ05hbWUpOwot
ICAgIFhNTEVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIERPTVN0cmluZ0ltcGwgKl9xdWFs
aWZpZWROYW1lLCBET01TdHJpbmdJbXBsICpfbmFtZXNwYWNlVVJJKTsKLSAgICB+WE1MRWxlbWVu
dEltcGwoKTsKLQotICAgIC8vIERPTSBtZXRob2RzIG92ZXJyaWRkZW4gZnJvbSAgcGFyZW50IGNs
YXNzZXMKLSAgICB2aXJ0dWFsIERPTVN0cmluZyBuYW1lc3BhY2VVUkkoKSBjb25zdDsKLSAgICB2
aXJ0dWFsIERPTVN0cmluZyBsb2NhbE5hbWUoKSBjb25zdDsKLSAgICB2aXJ0dWFsIE5vZGVJbXBs
ICpjbG9uZU5vZGUgKCBib29sIGRlZXAgKTsKLQotICAgIC8vIE90aGVyIG1ldGhvZHMgKG5vdCBw
YXJ0IG9mIERPTSkKLSAgICB2aXJ0dWFsIGJvb2wgaXNYTUxFbGVtZW50Tm9kZSgpIGNvbnN0IHsg
cmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIElkIGlkKCkgY29uc3QgeyByZXR1cm4gbV9pZDsg
fQotCi1wcm90ZWN0ZWQ6Ci0gICAgSWQgbV9pZDsKKyAgICBRdWFsaWZpZWROYW1lIG1fdGFnTmFt
ZTsKIH07CiAKIC8vIHRoZSBtYXAgb2YgYXR0cmlidXRlcyBvZiBhbiBlbGVtZW50CkBAIC00MTQs
NyArMzk5LDcgQEAgcHJpdmF0ZToKIGNsYXNzIFN0eWxlZEVsZW1lbnRJbXBsIDogcHVibGljIEVs
ZW1lbnRJbXBsCiB7CiBwdWJsaWM6Ci0gICAgU3R5bGVkRWxlbWVudEltcGwoRG9jdW1lbnRQdHIg
KmRvYyk7CisgICAgU3R5bGVkRWxlbWVudEltcGwoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFt
ZSwgRG9jdW1lbnRQdHIgKmRvYyk7CiAgICAgdmlydHVhbCB+U3R5bGVkRWxlbWVudEltcGwoKTsK
IAogICAgIHZpcnR1YWwgYm9vbCBpc1N0eWxlZEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0cnVl
OyB9CkluZGV4OiBraHRtbC94bWwvZG9tX25vZGVpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl
OiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC94bWwvZG9tX25vZGVpbXBsLmNwcCx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS4xNTYKZGlmZiAtdSAtcCAtcjEuMTU2IGtodG1sL3htbC9kb21fbm9kZWlt
cGwuY3BwCi0tLSBraHRtbC94bWwvZG9tX25vZGVpbXBsLmNwcAkyMyBKdW4gMjAwNSAxOTo0Nzo1
MCAtMDAwMAkxLjE1NgorKysga2h0bWwveG1sL2RvbV9ub2RlaW1wbC5jcHAJOSBKdWwgMjAwNSAw
Mjo0MzozOSAtMDAwMApAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgImRvbS9kb21fZXhjZXB0
aW9uLmgiCiAjaW5jbHVkZSAiZG9tL2RvbTJfZXZlbnRzLmgiCiAjaW5jbHVkZSAibWlzYy9odG1s
YXR0cnMuaCIKLSNpbmNsdWRlICJtaXNjL2h0bWx0YWdzLmgiCiAjaW5jbHVkZSAieG1sL2RvbV9l
bGVtZW50aW1wbC5oIgogI2luY2x1ZGUgInhtbC9kb21fdGV4dGltcGwuaCIKICNpbmNsdWRlICJ4
bWwvZG9tMl9ldmVudHNpbXBsLmgiCkBAIC01MCw3ICs0OSw4IEBACiAjaW5jbHVkZSAia2h0bWx2
aWV3LmgiCiAjaW5jbHVkZSAia2h0bWxfcGFydC5oIgogCi0jaW5jbHVkZSAiaHRtbC9kdGQuaCIK
Ky8vIEZJWE1FOiBTaG91bGQgbm90IGhhdmUgdG8gaW5jbHVkZSB0aGlzLiAgQ3V0IHRoZSBIVE1M
IGRlcGVuZGVuY3khCisjaW5jbHVkZSAiaHRtbG5hbWVzLmgiCiAKICNpZm5kZWYgS0hUTUxfTk9f
WEJMCiAjaW5jbHVkZSAieGJsL3hibF9iaW5kaW5nX21hbmFnZXIuaCIKQEAgLTY0LDkgKzY0LDMw
IEBACiAjZGVmaW5lIExPRyhjaGFubmVsLCBmb3JtYXRBbmRBcmdzLi4uKSAoKHZvaWQpMCkKICNl
bmRpZgogCi11c2luZyBuYW1lc3BhY2UgRE9NOwogdXNpbmcgbmFtZXNwYWNlIGtodG1sOwogCitu
YW1lc3BhY2UgRE9NIHsKKy8qKgorICogTm9kZUxpc3Qgd2hpY2ggbGlzdHMgYWxsIE5vZGVzIGlu
IGEgZG9jdW1lbnQgd2l0aCBhIGdpdmVuIHRhZyBuYW1lCisgKi8KK2NsYXNzIFRhZ05vZGVMaXN0
SW1wbCA6IHB1YmxpYyBOb2RlTGlzdEltcGwKK3sKK3B1YmxpYzoKKyAgICBUYWdOb2RlTGlzdElt
cGwoTm9kZUltcGwgKm4sIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBB
dG9taWNTdHJpbmcmIGxvY2FsTmFtZSk7CisKKyAgICAvLyBET00gbWV0aG9kcyBvdmVycmlkZGVu
IGZyb20gIHBhcmVudCBjbGFzc2VzCisgICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGxlbmd0aCgp
IGNvbnN0OworICAgIHZpcnR1YWwgTm9kZUltcGwgKml0ZW0gKHVuc2lnbmVkIGxvbmcgaW5kZXgp
IGNvbnN0OworCisgICAgLy8gT3RoZXIgbWV0aG9kcyAobm90IHBhcnQgb2YgRE9NKQorCitwcm90
ZWN0ZWQ6CisgICAgdmlydHVhbCBib29sIG5vZGVNYXRjaGVzKE5vZGVJbXBsICp0ZXN0Tm9kZSkg
Y29uc3Q7CisKKyAgICBBdG9taWNTdHJpbmcgbV9uYW1lc3BhY2VVUkk7CisgICAgQXRvbWljU3Ry
aW5nIG1fbG9jYWxOYW1lOworfTsKKwogTm9kZUltcGw6Ok5vZGVJbXBsKERvY3VtZW50UHRyICpk
b2MpCiAgICAgOiBkb2N1bWVudChkb2MpLAogICAgICAgbV9wcmV2aW91cygwKSwKQEAgLTE1NCw3
ICsxNzUsNyBAQCBOb2RlSW1wbCAqTm9kZUltcGw6Omxhc3RDaGlsZCgpIGNvbnN0CiAgIHJldHVy
biAwOwogfQogCi1Ob2RlSW1wbCAqTm9kZUltcGw6Omxhc3REZXNjZW5kZW50KCkgY29uc3QKK05v
ZGVJbXBsICpOb2RlSW1wbDo6bGFzdERlc2NlbmRhbnQoKSBjb25zdAogewogICAgIE5vZGVJbXBs
ICpuID0gY29uc3RfY2FzdDxOb2RlSW1wbCAqPih0aGlzKTsKICAgICB3aGlsZSAobiAmJiBuLT5s
YXN0Q2hpbGQoKSkKQEAgLTIzOSwxMyArMjYwLDEzIEBAIHZvaWQgTm9kZUltcGw6Om5vcm1hbGl6
ZSAoKQogICAgIH0KIH0KIAotRE9NU3RyaW5nIE5vZGVJbXBsOjpwcmVmaXgoKSBjb25zdAorY29u
c3QgQXRvbWljU3RyaW5nJiBOb2RlSW1wbDo6cHJlZml4KCkgY29uc3QKIHsKICAgICAvLyBGb3Ig
bm9kZXMgb3RoZXIgdGhhbiBlbGVtZW50cyBhbmQgYXR0cmlidXRlcywgdGhlIHByZWZpeCBpcyBh
bHdheXMgbnVsbAotICAgIHJldHVybiBET01TdHJpbmcoKTsKKyAgICByZXR1cm4gbnVsbEF0b207
CiB9CiAKLXZvaWQgTm9kZUltcGw6OnNldFByZWZpeChjb25zdCBET01TdHJpbmcgJi8qX3ByZWZp
eCovLCBpbnQgJmV4Y2VwdGlvbmNvZGUgKQordm9pZCBOb2RlSW1wbDo6c2V0UHJlZml4KGNvbnN0
IEF0b21pY1N0cmluZyAmLypfcHJlZml4Ki8sIGludCAmZXhjZXB0aW9uY29kZSApCiB7CiAgICAg
Ly8gVGhlIHNwZWMgc2F5cyB0aGF0IGZvciBub2RlcyBvdGhlciB0aGFuIGVsZW1lbnRzIGFuZCBh
dHRyaWJ1dGVzLCBwcmVmaXggaXMgYWx3YXlzIG51bGwuCiAgICAgLy8gSXQgZG9lcyBub3Qgc2F5
IHdoYXQgdG8gZG8gd2hlbiB0aGUgdXNlciB0cmllcyB0byBzZXQgdGhlIHByZWZpeCBvbiBhbm90
aGVyIHR5cGUgb2YKQEAgLTI1MywxNCArMjc0LDE0IEBAIHZvaWQgTm9kZUltcGw6OnNldFByZWZp
eChjb25zdCBET01TdHJpbmcKICAgICBleGNlcHRpb25jb2RlID0gRE9NRXhjZXB0aW9uOjpOQU1F
U1BBQ0VfRVJSOwogfQogCi1ET01TdHJpbmcgTm9kZUltcGw6OmxvY2FsTmFtZSgpIGNvbnN0Citj
b25zdCBBdG9taWNTdHJpbmcmIE5vZGVJbXBsOjpsb2NhbE5hbWUoKSBjb25zdAogewotICAgIHJl
dHVybiBET01TdHJpbmcoKTsKKyAgICByZXR1cm4gZW1wdHlBdG9tOwogfQogCi1ET01TdHJpbmcg
Tm9kZUltcGw6Om5hbWVzcGFjZVVSSSgpIGNvbnN0Citjb25zdCBBdG9taWNTdHJpbmcmIE5vZGVJ
bXBsOjpuYW1lc3BhY2VVUkkoKSBjb25zdAogewotICAgIHJldHVybiBET01TdHJpbmcoKTsKKyAg
ICByZXR1cm4gZW1wdHlBdG9tOwogfQogCiB2b2lkIE5vZGVJbXBsOjpzZXRGaXJzdENoaWxkKE5v
ZGVJbXBsICopCkBAIC0zMDYsMTIgKzMyNyw2IEBAIHZvaWQgTm9kZUltcGw6OnNldENoYW5nZWQo
Ym9vbCBiKQogICAgIH0KIH0KIAotYm9vbCBOb2RlSW1wbDo6aXNJbmxpbmUoKSBjb25zdAotewot
ICAgIGlmIChtX3JlbmRlcikgcmV0dXJuIG1fcmVuZGVyLT5zdHlsZSgpLT5kaXNwbGF5KCkgPT0g
a2h0bWw6OklOTElORTsKLSAgICByZXR1cm4gIWlzRWxlbWVudE5vZGUoKTsKLX0KLQogYm9vbCBO
b2RlSW1wbDo6aXNGb2N1c2FibGUoKSBjb25zdAogewogICAgIHJldHVybiBmYWxzZTsKQEAgLTEw
MDYsNDMgKzEwMjEsMzQgQEAgTm9kZUltcGwgKk5vZGVJbXBsOjp0cmF2ZXJzZVByZXZpb3VzTm9k
ZQogICAgIHJldHVybiAwOwogfQogCi12b2lkIE5vZGVJbXBsOjpjaGVja1NldFByZWZpeChjb25z
dCBET01TdHJpbmcgJl9wcmVmaXgsIGludCAmZXhjZXB0aW9uY29kZSkKK3ZvaWQgTm9kZUltcGw6
OmNoZWNrU2V0UHJlZml4KGNvbnN0IEF0b21pY1N0cmluZyAmX3ByZWZpeCwgaW50ICZleGNlcHRp
b25jb2RlKQogewogICAgIC8vIFBlcmZvcm0gZXJyb3IgY2hlY2tpbmcgYXMgcmVxdWlyZWQgYnkg
c3BlYyBmb3Igc2V0dGluZyBOb2RlLnByZWZpeC4gVXNlZCBieQogICAgIC8vIEVsZW1lbnRJbXBs
OjpzZXRQcmVmaXgoKSBhbmQgQXR0ckltcGw6OnNldFByZWZpeCgpCiAKLSNpZiAwCi0gICAgLy8g
RklYTUU6IEFkZCB0aGlzIGNoZWNrIChidXQgbm90IGluIGEgd2F5IHRoYXQgZGVwZW5kcyBvbiB0
aGUgQysrIERPTSEpCi0gICAgLy8gSU5WQUxJRF9DSEFSQUNURVJfRVJSOiBSYWlzZWQgaWYgdGhl
IHNwZWNpZmllZCBwcmVmaXggY29udGFpbnMgYW4gaWxsZWdhbCBjaGFyYWN0ZXIuCi0gICAgaWYg
KCFFbGVtZW50OjpraHRtbFZhbGlkUHJlZml4KF9wcmVmaXgpKSB7Ci0gICAgICAgIGV4Y2VwdGlv
bmNvZGUgPSBET01FeGNlcHRpb246OklOVkFMSURfQ0hBUkFDVEVSX0VSUjsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSNlbmRpZgotCisgICAgLy8gRklYTUU6IEltcGxlbWVudCBzdXBwb3J0IGZv
ciBJTlZBTElEX0NIQVJBQ1RFUl9FUlI6IFJhaXNlZCBpZiB0aGUgc3BlY2lmaWVkIHByZWZpeCBj
b250YWlucyBhbiBpbGxlZ2FsIGNoYXJhY3Rlci4KKyAgICAKICAgICAvLyBOT19NT0RJRklDQVRJ
T05fQUxMT1dFRF9FUlI6IFJhaXNlZCBpZiB0aGlzIG5vZGUgaXMgcmVhZG9ubHkuCiAgICAgaWYg
KGlzUmVhZE9ubHkoKSkgewogICAgICAgICBleGNlcHRpb25jb2RlID0gRE9NRXhjZXB0aW9uOjpO
T19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICAvLyBOQU1FU1BBQ0VfRVJSOiAtIFJhaXNlZCBpZiB0aGUgc3BlY2lmaWVkIHByZWZpeCBpcyBt
YWxmb3JtZWQKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IE5BTUVTUEFDRV9FUlI6IC0gUmFpc2Vk
IGlmIHRoZSBzcGVjaWZpZWQgcHJlZml4IGlzIG1hbGZvcm1lZAorICAgIC8vIFdlIGhhdmUgdG8g
Y29tbWVudCB0aGlzIG91dCwgc2luY2UgaXQncyB1c2VkIGZvciBhdHRyaWJ1dGVzIGFuZCB0YWcg
bmFtZXMsIGFuZCB3ZSd2ZSBvbmx5CisgICAgLy8gc3dpdGNoZWQgb25lIG92ZXIuCisgICAgLyoK
ICAgICAvLyAtIGlmIHRoZSBuYW1lc3BhY2VVUkkgb2YgdGhpcyBub2RlIGlzIG51bGwsCiAgICAg
Ly8gLSBpZiB0aGUgc3BlY2lmaWVkIHByZWZpeCBpcyAieG1sIiBhbmQgdGhlIG5hbWVzcGFjZVVS
SSBvZiB0aGlzIG5vZGUgaXMgZGlmZmVyZW50IGZyb20KICAgICAvLyAgICJodHRwOi8vd3d3Lncz
Lm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLAogICAgIC8vIC0gaWYgdGhpcyBub2RlIGlzIGFuIGF0
dHJpYnV0ZSBhbmQgdGhlIHNwZWNpZmllZCBwcmVmaXggaXMgInhtbG5zIiBhbmQKICAgICAvLyAg
IHRoZSBuYW1lc3BhY2VVUkkgb2YgdGhpcyBub2RlIGlzIGRpZmZlcmVudCBmcm9tICJodHRwOi8v
d3d3LnczLm9yZy8yMDAwL3htbG5zLyIsCiAgICAgLy8gLSBvciBpZiB0aGlzIG5vZGUgaXMgYW4g
YXR0cmlidXRlIGFuZCB0aGUgcXVhbGlmaWVkTmFtZSBvZiB0aGlzIG5vZGUgaXMgInhtbG5zIiBb
TmFtZXNwYWNlc10uCi0gICAgaWYgKAotI2lmIDAKLSAgICAgICAgLy8gRklYTUU6IEFkZCB0aGlz
IGNoZWNrIChidXQgbm90IGluIGEgd2F5IHRoYXQgZGVwZW5kcyBvbiB0aGUgQysrIERPTSEpCi0g
ICAgICAgIEVsZW1lbnQ6OmtodG1sTWFsZm9ybWVkUHJlZml4KF9wcmVmaXgpIHx8Ci0jZW5kaWYK
LSAgICAgICAgKG5hbWVzcGFjZVBhcnQoaWQoKSkgPT0gbm9OYW1lc3BhY2UgJiYgaWQoKSA+IElE
X0xBU1RfVEFHKSB8fAorICAgIGlmICgobmFtZXNwYWNlUGFydChpZCgpKSA9PSBub05hbWVzcGFj
ZSAmJiBpZCgpID4gSURfTEFTVF9UQUcpIHx8CiAgICAgICAgIChfcHJlZml4ID09ICJ4bWwiICYm
IERPTVN0cmluZyhnZXREb2N1bWVudCgpLT5uYW1lc3BhY2VVUkkoaWQoKSkpICE9ICJodHRwOi8v
d3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiKSkgewogICAgICAgICBleGNlcHRpb25jb2Rl
ID0gRE9NRXhjZXB0aW9uOjpOQU1FU1BBQ0VfRVJSOwogICAgICAgICByZXR1cm47Ci0gICAgfQor
ICAgIH0qLwogfQogCiB2b2lkIE5vZGVJbXBsOjpjaGVja0FkZENoaWxkKE5vZGVJbXBsICpuZXdD
aGlsZCwgaW50ICZleGNlcHRpb25jb2RlKQpAQCAtMTI4Myw5ICsxMjg5LDEwIEBAIFJlbmRlck9i
amVjdCAqIE5vZGVJbXBsOjpuZXh0UmVuZGVyZXIoKQogICAgIHJldHVybiAwOwogfQogCisvLyBG
SVhNRTogVGhpcyBjb2RlIGlzIHVzZWQgYnkgZWRpdGluZy4gIFNlZW1zIGxpa2UgaXQgY291bGQg
bW92ZSBvdmVyIHRoZXJlIGFuZCBub3QgcG9sbHV0ZSBOb2RlSW1wbC4KIGJvb2wgTm9kZUltcGw6
OmlzQXRvbWljTm9kZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuICFoYXNDaGlsZE5vZGVzKCkgfHwg
KGlkKCkgPT0gSURfT0JKRUNUICYmIHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+aXNSZXBsYWNl
ZCgpKTsKKyAgICByZXR1cm4gIWhhc0NoaWxkTm9kZXMoKSB8fCAocmVuZGVyZXIoKSAmJiByZW5k
ZXJlcigpLT5pc1dpZGdldCgpKTsKIH0KIAogTm9kZUltcGwgKk5vZGVJbXBsOjpwcmV2aW91c05v
ZGVDb25zaWRlcmluZ0F0b21pY05vZGVzKCkgY29uc3QKQEAgLTE0MDIsMTMgKzE0MDksMTUgQEAg
bG9uZyBOb2RlSW1wbDo6bWF4T2Zmc2V0KCkgY29uc3QKICAgICByZXR1cm4gMTsKIH0KIAorLy8g
RklYTUU6IFNob3VsZG4ndCB0aGVzZSBmdW5jdGlvbnMgYmUgaW4gdGhlIGVkaXRpbmcgY29kZT8g
IENvZGUgdGhhdCBhc2tzIHF1ZXN0aW9ucyBhYm91dCBIVE1MIGluIHRoZSBjb3JlIERPTSBjbGFz
cworLy8gaXMgb2J2aW91c2x5IG1pc3BsYWNlZC4KIC8vIG1ldGhvZCBmb3IgZWRpdGluZyBtYWRu
ZXNzLCB3aGljaCBhbGxvd3MgQlIsMSBhcyBhIHBvc2l0aW9uLCB0aG91Z2ggdGhhdCBpcyBpbmNv
cnJlY3QKIGxvbmcgTm9kZUltcGw6Om1heERlZXBPZmZzZXQoKSBjb25zdAogewogICAgIGlmIChv
ZmZzZXRJbkNoYXJhY3RlcnMobm9kZVR5cGUoKSkpCiAgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxjb25zdCBUZXh0SW1wbCo+KHRoaXMpLT5sZW5ndGgoKTsKICAgICAgICAgCi0gICAgaWYgKGlk
KCkgPT0gSURfQlIgfHwgKHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+aXNSZXBsYWNlZCgpKSkK
KyAgICBpZiAoaGFzVGFnTmFtZShIVE1MTmFtZXM6OmJyKCkpIHx8IChyZW5kZXJlcigpICYmIHJl
bmRlcmVyKCktPmlzUmVwbGFjZWQoKSkpCiAgICAgICAgIHJldHVybiAxOwogCiAgICAgcmV0dXJu
IGNoaWxkTm9kZUNvdW50KCk7CkBAIC0xNDY0LDcgKzE0NzMsNyBAQCBFbGVtZW50SW1wbCAqTm9k
ZUltcGw6OmVuY2xvc2luZ0Jsb2NrRmxvCiAgICAgICAgIG4gPSBuLT5wYXJlbnROb2RlKCk7CiAg
ICAgICAgIGlmICghbikKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBpZiAobi0+aXNCbG9j
a0Zsb3dPclRhYmxlKCkgfHwgbi0+aWQoKSA9PSBJRF9CT0RZKQorICAgICAgICBpZiAobi0+aXNC
bG9ja0Zsb3dPclRhYmxlKCkgfHwgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJvZHkoKSkpCiAg
ICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RWxlbWVudEltcGwgKj4obik7CiAgICAgfQog
ICAgIHJldHVybiAwOwpAQCAtMTQ4MCw3ICsxNDg5LDcgQEAgRWxlbWVudEltcGwgKk5vZGVJbXBs
OjplbmNsb3NpbmdCbG9ja0ZsbwogICAgICAgICBuID0gbi0+cGFyZW50Tm9kZSgpOwogICAgICAg
ICBpZiAoIW4pCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgaWYgKG4tPmlzQmxvY2tGbG93
KCkgfHwgbi0+aWQoKSA9PSBJRF9CT0RZKQorICAgICAgICBpZiAobi0+aXNCbG9ja0Zsb3coKSB8
fCBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Ym9keSgpKSkKICAgICAgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxFbGVtZW50SW1wbCAqPihuKTsKICAgICB9CiAgICAgcmV0dXJuIDA7CkBAIC0x
NDkzLDcgKzE1MDIsNyBAQCBFbGVtZW50SW1wbCAqTm9kZUltcGw6OmVuY2xvc2luZ0lubGluZUVs
CiAKICAgICB3aGlsZSAoMSkgewogICAgICAgICBwID0gbi0+cGFyZW50Tm9kZSgpOwotICAgICAg
ICBpZiAoIXAgfHwgcC0+aXNCbG9ja0Zsb3coKSB8fCBwLT5pZCgpID09IElEX0JPRFkpCisgICAg
ICAgIGlmICghcCB8fCBwLT5pc0Jsb2NrRmxvdygpIHx8IHAtPmhhc1RhZ05hbWUoSFRNTE5hbWVz
Ojpib2R5KCkpKQogICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsICo+
KG4pOwogICAgICAgICAvLyBBbHNvIHN0b3AgaWYgYW55IHByZXZpb3VzIHNpYmxpbmcgaXMgYSBi
bG9jawogICAgICAgICBmb3IgKE5vZGVJbXBsICpzaWJsaW5nID0gbi0+cHJldmlvdXNTaWJsaW5n
KCk7IHNpYmxpbmc7IHNpYmxpbmcgPSBzaWJsaW5nLT5wcmV2aW91c1NpYmxpbmcoKSkgewpAQCAt
MTUxMiw3ICsxNTIxLDcgQEAgRWxlbWVudEltcGwgKk5vZGVJbXBsOjpyb290RWRpdGFibGVFbGVt
ZQogICAgICAgICByZXR1cm4gMDsKIAogICAgIE5vZGVJbXBsICpuID0gY29uc3RfY2FzdDxOb2Rl
SW1wbCAqPih0aGlzKTsKLSAgICBpZiAobi0+aWQoKSA9PSBJRF9CT0RZKQorICAgIGlmIChuLT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6Ym9keSgpKSkKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PEVsZW1lbnRJbXBsICo+KG4pOwogCiAgICAgTm9kZUltcGwgKnJlc3VsdCA9IG4tPmlzRWRpdGFi
bGVCbG9jaygpID8gbiA6IDA7CkBAIC0xNTIwLDcgKzE1MjksNyBAQCBFbGVtZW50SW1wbCAqTm9k
ZUltcGw6OnJvb3RFZGl0YWJsZUVsZW1lCiAgICAgICAgIG4gPSBuLT5wYXJlbnROb2RlKCk7CiAg
ICAgICAgIGlmICghbiB8fCAhbi0+aXNDb250ZW50RWRpdGFibGUoKSkKICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBpZiAobi0+aWQoKSA9PSBJRF9CT0RZKSB7CisgICAgICAgIGlmIChuLT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6Ym9keSgpKSkgewogICAgICAgICAgICAgcmVzdWx0ID0gbjsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0xNTQwLDYgKzE1NDksOCBAQCBib29s
IE5vZGVJbXBsOjppblNhbWVDb250YWluaW5nQmxvY2tGbG93CiAgICAgcmV0dXJuIG4gPyBlbmNs
b3NpbmdCbG9ja0Zsb3dFbGVtZW50KCkgPT0gbi0+ZW5jbG9zaW5nQmxvY2tGbG93RWxlbWVudCgp
IDogZmFsc2U7CiB9CiAKKy8vIEZJWE1FOiBFbmQgb2Ygb2J2aW91c2x5IG1pc3BsYWNlZCBIVE1M
IGVkaXRpbmcgZnVuY3Rpb25zLiAgVHJ5IHRvIG1vdmUgdGhlc2Ugb3V0IG9mIE5vZGVJbXBsLgor
CiB2b2lkIE5vZGVJbXBsOjphZGRFdmVudExpc3RlbmVyKGNvbnN0IERPTVN0cmluZyAmdHlwZSwg
RXZlbnRMaXN0ZW5lciAqbGlzdGVuZXIsIGJvb2wgdXNlQ2FwdHVyZSkKIHsKICAgICBhZGRFdmVu
dExpc3RlbmVyKEV2ZW50SW1wbDo6dHlwZVRvSWQodHlwZSksIGxpc3RlbmVyLCB1c2VDYXB0dXJl
KTsKQEAgLTE1NTAsMjUgKzE1NjEsMTUgQEAgdm9pZCBOb2RlSW1wbDo6cmVtb3ZlRXZlbnRMaXN0
ZW5lcihjb25zdAogICAgIHJlbW92ZUV2ZW50TGlzdGVuZXIoRXZlbnRJbXBsOjp0eXBlVG9JZCh0
eXBlKSwgbGlzdGVuZXIsIHVzZUNhcHR1cmUpOwogfQogCi1TaGFyZWRQdHI8Tm9kZUxpc3RJbXBs
PiBOb2RlSW1wbDo6Z2V0RWxlbWVudHNCeVRhZ05hbWVOUyAoIGNvbnN0IERPTVN0cmluZyAmbmFt
ZXNwYWNlVVJJLCBjb25zdCBET01TdHJpbmcgJmxvY2FsTmFtZSApCitTaGFyZWRQdHI8Tm9kZUxp
c3RJbXBsPiBOb2RlSW1wbDo6Z2V0RWxlbWVudHNCeVRhZ05hbWVOUyhjb25zdCBET01TdHJpbmcg
Jm5hbWVzcGFjZVVSSSwgY29uc3QgRE9NU3RyaW5nICZsb2NhbE5hbWUpCiB7Ci0gICAgaWYgKGxv
Y2FsTmFtZS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIFNoYXJlZFB0cjxOb2RlTGlzdEltcGw+
KCk7Ci0KLSAgICBJZCBpZE1hc2sgPSBuYW1lc3BhY2VNYXNrIHwgbG9jYWxOYW1lTWFzazsKLSAg
ICBpZiAobG9jYWxOYW1lWzBdID09ICcqJykKLSAgICAgICAgaWRNYXNrICY9IH5sb2NhbE5hbWVN
YXNrOwotICAgIGlmIChuYW1lc3BhY2VVUkkuaXNOdWxsKCkgfHwgbmFtZXNwYWNlVVJJWzBdID09
ICcqJykKLSAgICAgICAgaWRNYXNrICY9IH5uYW1lc3BhY2VNYXNrOwotCi0gICAgSWQgaWQgPSAw
OyAvLyAwIG1lYW5zICJhbGwgaXRlbXMiCi0gICAgaWYgKChpZE1hc2sgJiBsb2NhbE5hbWVNYXNr
KSB8fCAhbmFtZXNwYWNlVVJJLmlzTnVsbCgpKSB7IC8vIG5vdCBnZXRFbGVtZW50c0J5VGFnTmFt
ZSgiKiIpCi0gICAgICAgIGlkID0gZ2V0RG9jdW1lbnQoKS0+dGFnSWQobmFtZXNwYWNlVVJJLmlt
cGxlbWVudGF0aW9uKCksIGxvY2FsTmFtZS5pbXBsZW1lbnRhdGlvbigpLCB0cnVlKTsKLSAgICAg
ICAgaWYgKCAhaWQgKSAvLyBub3QgZm91bmQgLT4gd2Ugd2FudCB0byByZXR1cm4gYW4gZW1wdHkg
bGlzdCwgbm90ICJhbGwgaXRlbXMiCi0gICAgICAgICAgICBpZCA9IChJZCktMTsgLy8gSEFDSy4g
SEVBRCBoYXMgYSBjbGVhbmVyIGltcGxlbWVudGF0aW9uIG9mIFRhZ05vZGVMaXN0SW1wbCBpdCBz
ZWVtcy4KLSAgICB9Ci0KLSAgICByZXR1cm4gU2hhcmVkUHRyPE5vZGVMaXN0SW1wbD4obmV3IFRh
Z05vZGVMaXN0SW1wbCh0aGlzLCBpZCwgaWRNYXNrKSk7CisgICAgaWYgKG5hbWVzcGFjZVVSSS5p
c051bGwoKSB8fCBsb2NhbE5hbWUuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBTaGFyZWRQdHI8
Tm9kZUxpc3RJbXBsPigpOyAvLyBGSVhNRTogV2hvIGNhcmVzIGFib3V0IHRoaXMgYWRkaXRpb25h
bCBjaGVjaz8KKyAgICAKKyAgICBET01TdHJpbmcgbmFtZSA9IGxvY2FsTmFtZTsKKyAgICBpZiAo
Z2V0RG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSkKKyAgICAgICAgbmFtZSA9IGxvY2FsTmFt
ZS5sb3dlcigpOworICAgIHJldHVybiBTaGFyZWRQdHI8Tm9kZUxpc3RJbXBsPihuZXcgVGFnTm9k
ZUxpc3RJbXBsKHRoaXMsIEF0b21pY1N0cmluZyhuYW1lc3BhY2VVUkkpLCBBdG9taWNTdHJpbmco
bmFtZSkpKTsKIH0KIAogYm9vbCBOb2RlSW1wbDo6aXNTdXBwb3J0ZWQoY29uc3QgRE9NU3RyaW5n
ICZmZWF0dXJlLCBjb25zdCBET01TdHJpbmcgJnZlcnNpb24pCkBAIC0xNTkyLDEzICsxNTkzLDYg
QEAgTmFtZWRBdHRyTWFwSW1wbCAqTm9kZUltcGw6OmF0dHJpYnV0ZXMoKQogICAgIHJldHVybiAw
OwogfQogCi0jaWYgQVBQTEVfQ0hBTkdFUwotTm9kZUltcGw6OklkIE5vZGVJbXBsOjppZGVudGlm
aWVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gaWQoKTsKLX0KLSNlbmRpZgotCiAjaWZuZGVmIE5E
RUJVRwogCiBzdGF0aWMgdm9pZCBhcHBlbmRBdHRyaWJ1dGVEZXNjKGNvbnN0IE5vZGVJbXBsICpu
b2RlLCBRU3RyaW5nICZzdHJpbmcsIE5vZGVJbXBsOjpJZCBhdHRySUQsIFFTdHJpbmcgYXR0ckRl
c2MpCkBAIC0xNjM4LDcgKzE2MzIsNyBAQCB2b2lkIE5vZGVJbXBsOjpzaG93VHJlZUFuZE1hcmso
Tm9kZUltcGwgCiB7CiAgICAgTm9kZUltcGwgKnJvb3ROb2RlOwogICAgIE5vZGVJbXBsICpub2Rl
ID0gKE5vZGVJbXBsICopdGhpczsKLSAgICB3aGlsZShub2RlLT5wYXJlbnROb2RlKCkgIT0gTlVM
TCAmJiBub2RlLT5pZCgpICE9IElEX0JPRFkpCisgICAgd2hpbGUgKG5vZGUtPnBhcmVudE5vZGUo
KSAmJiAhbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJvZHkoKSkpCiAgICAgICAgIG5vZGUg
PSBub2RlLT5wYXJlbnROb2RlKCk7CiAgICAgcm9vdE5vZGUgPSBub2RlOwogCQpAQCAtMjA5NCwx
MSArMjA4OCw4IEBAIE5vZGVJbXBsICpDb250YWluZXJOb2RlSW1wbDo6YWRkQ2hpbGQoTm8KICAg
ICBTaGFyZWRQdHI8Tm9kZUltcGw+IHByb3RlY3ROZXdDaGlsZChuZXdDaGlsZCk7IC8vIG1ha2Ug
c3VyZSB0aGUgbmV3IGNoaWxkIGlzIHJlZidkIGFuZCBkZXJlZidkIHNvIHdlIGRvbid0IGxlYWsg
aXQKIAogICAgIC8vIHNob3J0IGNoZWNrIGZvciBjb25zaXN0ZW5jeSB3aXRoIERURAotICAgIGlm
KCFpc1hNTEVsZW1lbnROb2RlKCkgJiYgIW5ld0NoaWxkLT5pc1hNTEVsZW1lbnROb2RlKCkgJiYg
IWNoaWxkQWxsb3dlZChuZXdDaGlsZCkpCi0gICAgewotICAgICAgICAvL2tkRGVidWcoIDYwMjAg
KSA8PCAiQWRkQ2hpbGQgZmFpbGVkISBpZD0iIDw8IGlkKCkgPDwgIiwgY2hpbGQtPmlkPSIgPDwg
bmV3Q2hpbGQtPmlkKCkgPDwgZW5kbDsKKyAgICBpZiAoZ2V0RG9jdW1lbnQoKS0+aXNIVE1MRG9j
dW1lbnQoKSAmJiAhY2hpbGRBbGxvd2VkKG5ld0NoaWxkKSkKICAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgfQogCiAgICAgLy8ganVzdCBhZGQgaXQuLi4KICAgICBuZXdDaGlsZC0+c2V0UGFyZW50KHRo
aXMpOwpAQCAtMjUzNiwxMCArMjUyNywxMCBAQCBib29sIENoaWxkTm9kZUxpc3RJbXBsOjpub2Rl
TWF0Y2hlcyhOb2RlCiAgICAgcmV0dXJuIHRlc3ROb2RlLT5wYXJlbnROb2RlKCkgPT0gcm9vdE5v
ZGU7CiB9CiAKLVRhZ05vZGVMaXN0SW1wbDo6VGFnTm9kZUxpc3RJbXBsKE5vZGVJbXBsICpuLCBO
b2RlSW1wbDo6SWQgX2lkLCBOb2RlSW1wbDo6SWQgX2lkTWFzayApCitUYWdOb2RlTGlzdEltcGw6
OlRhZ05vZGVMaXN0SW1wbChOb2RlSW1wbCAqbiwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3Bh
Y2VVUkksIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lKQogICAgIDogTm9kZUxpc3RJbXBs
KG4pLCAKLSAgICAgIG1faWQoX2lkICYgX2lkTWFzayksIAotICAgICAgbV9pZE1hc2soX2lkTWFz
aykKKyAgICAgIG1fbmFtZXNwYWNlVVJJKG5hbWVzcGFjZVVSSSksIAorICAgICAgbV9sb2NhbE5h
bWUobG9jYWxOYW1lKQogewogfQogCkBAIC0yNTQ4LDE1ICsyNTM5LDIwIEBAIHVuc2lnbmVkIGxv
bmcgVGFnTm9kZUxpc3RJbXBsOjpsZW5ndGgoKSAKICAgICByZXR1cm4gcmVjdXJzaXZlTGVuZ3Ro
KCk7CiB9CiAKLU5vZGVJbXBsICpUYWdOb2RlTGlzdEltcGw6Oml0ZW0gKCB1bnNpZ25lZCBsb25n
IGluZGV4ICkgY29uc3QKK05vZGVJbXBsICpUYWdOb2RlTGlzdEltcGw6Oml0ZW0odW5zaWduZWQg
bG9uZyBpbmRleCkgY29uc3QKIHsKLSAgICByZXR1cm4gcmVjdXJzaXZlSXRlbSggaW5kZXggKTsK
KyAgICByZXR1cm4gcmVjdXJzaXZlSXRlbShpbmRleCk7CiB9CiAKLWJvb2wgVGFnTm9kZUxpc3RJ
bXBsOjpub2RlTWF0Y2hlcyggTm9kZUltcGwgKnRlc3ROb2RlICkgY29uc3QKK2Jvb2wgVGFnTm9k
ZUxpc3RJbXBsOjpub2RlTWF0Y2hlcyhOb2RlSW1wbCAqdGVzdE5vZGUpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuICggdGVzdE5vZGUtPmlzRWxlbWVudE5vZGUoKSAmJgotICAgICAgICAgICAgICh0ZXN0
Tm9kZS0+aWQoKSAmIG1faWRNYXNrKSA9PSBtX2lkKTsKKyAgICBpZiAoIXRlc3ROb2RlLT5pc0Vs
ZW1lbnROb2RlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChtX25hbWVzcGFj
ZVVSSSAhPSBzdGFyQXRvbSAmJiBtX25hbWVzcGFjZVVSSSAhPSB0ZXN0Tm9kZS0+bmFtZXNwYWNl
VVJJKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gbV9sb2NhbE5h
bWUgPT0gc3RhckF0b20gfHwgbV9sb2NhbE5hbWUgPT0gdGVzdE5vZGUtPmxvY2FsTmFtZSgpOwog
fQogCiBOYW1lTm9kZUxpc3RJbXBsOjpOYW1lTm9kZUxpc3RJbXBsKE5vZGVJbXBsICpuLCBjb25z
dCBET01TdHJpbmcgJnQgKQpAQCAtMjU5NSwxMDYgKzI1OTEsNCBAQCBTaGFyZWRQdHI8Tm9kZUlt
cGw+IE5hbWVkTm9kZU1hcEltcGw6OnJlCiAgICAgcmV0dXJuIHJlbW92ZU5hbWVkSXRlbShtYXBJ
ZChuYW1lc3BhY2VVUkksIGxvY2FsTmFtZSwgdHJ1ZSksIGV4Y2VwdGlvbik7CiB9CiAKLS8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gIyMjIHVudXNlZAotI2lmIDAKLUdlbmVyaWNST05hbWVk
Tm9kZU1hcEltcGw6OkdlbmVyaWNST05hbWVkTm9kZU1hcEltcGwoRG9jdW1lbnRQdHIqIGRvYykK
LSAgICA6IE5hbWVkTm9kZU1hcEltcGwoKQotewotICAgIG1fZG9jID0gZG9jLT5kb2N1bWVudCgp
OwotICAgIG1fY29udGVudHMgPSBuZXcgUVB0ckxpc3Q8Tm9kZUltcGw+OwotfQotCi1HZW5lcmlj
Uk9OYW1lZE5vZGVNYXBJbXBsOjp+R2VuZXJpY1JPTmFtZWROb2RlTWFwSW1wbCgpCi17Ci0gICAg
d2hpbGUgKG1fY29udGVudHMtPmNvdW50KCkgPiAwKQotICAgICAgICBtX2NvbnRlbnRzLT50YWtl
KDApLT5kZXJlZigpOwotCi0gICAgZGVsZXRlIG1fY29udGVudHM7Ci19Ci0KLU5vZGVJbXBsICpH
ZW5lcmljUk9OYW1lZE5vZGVNYXBJbXBsOjpnZXROYW1lZEl0ZW0gKCBjb25zdCBET01TdHJpbmcg
Jm5hbWUsIGludCAmLypleGNlcHRpb25jb2RlKi8gKSBjb25zdAotewotICAgIFFQdHJMaXN0SXRl
cmF0b3I8Tm9kZUltcGw+IGl0KCptX2NvbnRlbnRzKTsKLSAgICBmb3IgKDsgaXQuY3VycmVudCgp
OyArK2l0KQotICAgICAgICBpZiAoaXQuY3VycmVudCgpLT5ub2RlTmFtZSgpID09IG5hbWUpCi0g
ICAgICAgICAgICByZXR1cm4gaXQuY3VycmVudCgpOwotICAgIHJldHVybiAwOwogfQotCi1Ob2Rl
IEdlbmVyaWNST05hbWVkTm9kZU1hcEltcGw6OnNldE5hbWVkSXRlbSAoIGNvbnN0IE5vZGUgJi8q
YXJnKi8sIGludCAmZXhjZXB0aW9uY29kZSApCi17Ci0gICAgLy8gY2FuJ3QgbW9kaWZ5IHRoaXMg
bGlzdCB0aHJvdWdoIHN0YW5kYXJkIERPTSBmdW5jdGlvbnMKLSAgICAvLyBOT19NT0RJRklDQVRJ
T05fQUxMT1dFRF9FUlI6IFJhaXNlZCBpZiB0aGlzIG1hcCBpcyByZWFkb25seQotICAgIGV4Y2Vw
dGlvbmNvZGUgPSBET01FeGNlcHRpb246Ok5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUjsKLSAg
ICByZXR1cm4gMDsKLX0KLQotTm9kZSBHZW5lcmljUk9OYW1lZE5vZGVNYXBJbXBsOjpyZW1vdmVO
YW1lZEl0ZW0gKCBjb25zdCBET01TdHJpbmcgJi8qbmFtZSovLCBpbnQgJmV4Y2VwdGlvbmNvZGUg
KQotewotICAgIC8vIGNhbid0IG1vZGlmeSB0aGlzIGxpc3QgdGhyb3VnaCBzdGFuZGFyZCBET00g
ZnVuY3Rpb25zCi0gICAgLy8gTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOiBSYWlzZWQgaWYg
dGhpcyBtYXAgaXMgcmVhZG9ubHkKLSAgICBleGNlcHRpb25jb2RlID0gRE9NRXhjZXB0aW9uOjpO
T19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlI7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLU5vZGVJbXBs
ICpHZW5lcmljUk9OYW1lZE5vZGVNYXBJbXBsOjppdGVtICggdW5zaWduZWQgbG9uZyBpbmRleCAp
IGNvbnN0Ci17Ci0gICAgLy8gIyMjIGNoZWNrIHRoaXMgd2hlbiBjYWxsaW5nIGZyb20gamF2YXNj
cmlwdCB1c2luZyAtMSA9IDJec2l6ZW9mKGludCktMQotICAgIC8vIChhbHNvIGZvciBvdGhlciBz
aW1pbGFyIG1ldGhvZHMpCi0gICAgaWYgKGluZGV4ID49IG1fY29udGVudHMtPmNvdW50KCkpCi0g
ICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIG1fY29udGVudHMtPmF0KGluZGV4KTsKLX0K
LQotdW5zaWduZWQgbG9uZyBHZW5lcmljUk9OYW1lZE5vZGVNYXBJbXBsOjpsZW5ndGgoICApIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1fY29udGVudHMtPmNvdW50KCk7Ci19Ci0KLU5vZGVJbXBsICpH
ZW5lcmljUk9OYW1lZE5vZGVNYXBJbXBsOjpnZXROYW1lZEl0ZW1OUyggY29uc3QgRE9NU3RyaW5n
ICZuYW1lc3BhY2VVUkksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IERPTVN0cmluZyAmbG9jYWxOYW1lLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgJi8qZXhjZXB0aW9uY29k
ZSovICkgY29uc3QKLXsKLSAgICBOb2RlSW1wbDo6SWQgc2VhcmNoSWQgPSBtX2RvYy0+dGFnSWQo
bmFtZXNwYWNlVVJJLmltcGxlbWVudGF0aW9uKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbE5hbWUuaW1wbGVtZW50YXRpb24oKSwgdHJ1
ZSk7Ci0KLSAgICBRUHRyTGlzdEl0ZXJhdG9yPE5vZGVJbXBsPiBpdCgqbV9jb250ZW50cyk7Ci0g
ICAgZm9yICg7IGl0LmN1cnJlbnQoKTsgKytpdCkKLSAgICAgICAgaWYgKGl0LmN1cnJlbnQoKS0+
aWQoKSA9PSBzZWFyY2hJZCkKLSAgICAgICAgICAgIHJldHVybiBpdC5jdXJyZW50KCk7Ci0KLSAg
ICByZXR1cm4gMDsKLX0KLQotTm9kZUltcGwgKkdlbmVyaWNST05hbWVkTm9kZU1hcEltcGw6OnNl
dE5hbWVkSXRlbU5TKCBOb2RlSW1wbCAqLyphcmcqLywgaW50ICZleGNlcHRpb25jb2RlICkKLXsK
LSAgICAvLyBjYW4ndCBtb2RpZnkgdGhpcyBsaXN0IHRocm91Z2ggc3RhbmRhcmQgRE9NIGZ1bmN0
aW9ucwotICAgIC8vIE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUjogUmFpc2VkIGlmIHRoaXMg
bWFwIGlzIHJlYWRvbmx5Ci0gICAgZXhjZXB0aW9uY29kZSA9IERPTUV4Y2VwdGlvbjo6Tk9fTU9E
SUZJQ0FUSU9OX0FMTE9XRURfRVJSOwotICAgIHJldHVybiAwOwotfQotCi1Ob2RlSW1wbCAqR2Vu
ZXJpY1JPTmFtZWROb2RlTWFwSW1wbDo6cmVtb3ZlTmFtZWRJdGVtTlMoIGNvbnN0IERPTVN0cmlu
ZyAmLypuYW1lc3BhY2VVUkkqLywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgRE9NU3RyaW5nICYvKmxvY2FsTmFtZSovLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
JmV4Y2VwdGlvbmNvZGUgKQotewotICAgIC8vIGNhbid0IG1vZGlmeSB0aGlzIGxpc3QgdGhyb3Vn
aCBzdGFuZGFyZCBET00gZnVuY3Rpb25zCi0gICAgZXhjZXB0aW9uY29kZSA9IERPTUV4Y2VwdGlv
bjo6Tk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOwotICAgIHJldHVybiAwOwotfQotCi12b2lk
IEdlbmVyaWNST05hbWVkTm9kZU1hcEltcGw6OmFkZE5vZGUoTm9kZUltcGwgKm4pCi17Ci0gICAg
Ly8gVGhlIHNwZWMgc2F5cyB0aGF0IGluIHRoZSBjYXNlIG9mIGR1cGxpY2F0ZXMgd2Ugb25seSBr
ZWVwIHRoZSBmaXJzdCBvbmUKLSAgICBpbnQgZXhjZXB0aW9uY29kZSA9IDA7Ci0gICAgaWYgKGdl
dE5hbWVkSXRlbShuLT5ub2RlTmFtZSgpLGV4Y2VwdGlvbmNvZGUpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBuLT5yZWYoKTsKLSAgICBtX2NvbnRlbnRzLT5hcHBlbmQobik7Ci19Ci0KLSNlbmRp
ZgpJbmRleDoga2h0bWwveG1sL2RvbV9ub2RlaW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9XZWJDb3JlL2todG1sL3htbC9kb21fbm9kZWltcGwuaCx2CnJldHJpZXZpbmcgcmV2
aXNpb24gMS44NwpkaWZmIC11IC1wIC1yMS44NyBraHRtbC94bWwvZG9tX25vZGVpbXBsLmgKLS0t
IGtodG1sL3htbC9kb21fbm9kZWltcGwuaAkyMyBKdW4gMjAwNSAxOTo0Nzo1MCAtMDAwMAkxLjg3
CisrKyBraHRtbC94bWwvZG9tX25vZGVpbXBsLmgJOSBKdWwgMjAwNSAwMjo0Mzo0MCAtMDAwMApA
QCAtNTksMTEgKzU5LDkgQEAgY2xhc3MgRXZlbnRJbXBsOwogY2xhc3MgRXZlbnRMaXN0ZW5lcjsK
IGNsYXNzIE5vZGVMaXN0SW1wbDsKIGNsYXNzIE5hbWVkQXR0ck1hcEltcGw7CitjbGFzcyBRdWFs
aWZpZWROYW1lOwogY2xhc3MgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXI7CiAKLS8vIFRoZSBuYW1l
c3BhY2UgdXNlZCBmb3IgWEhUTUwgZWxlbWVudHMKLSNkZWZpbmUgWEhUTUxfTkFNRVNQQUNFICJo
dHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIgotCiBjb25zdCBRX1VJTlQxNiBub05hbWVzcGFj
ZSA9IDA7CiBjb25zdCBRX1VJTlQxNiBhbnlOYW1lc3BhY2UgPSAxOwogY29uc3QgUV9VSU5UMTYg
eGh0bWxOYW1lc3BhY2UgPSAyOwpAQCAtMTAyLDYgKzEwMCw3IEBAIHB1YmxpYzoKICAgICBNQUlO
X1RIUkVBRF9BTExPQ0FURUQ7CiAKICAgICAvLyBET00gbWV0aG9kcyAmIGF0dHJpYnV0ZXMgZm9y
IE5vZGUKKyAgICB2aXJ0dWFsIGJvb2wgaGFzVGFnTmFtZShjb25zdCBRdWFsaWZpZWROYW1lJiB0
YWdOYW1lKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgRE9NU3RyaW5nIG5v
ZGVOYW1lKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgRE9NU3RyaW5nIG5vZGVWYWx1ZSgpIGNv
bnN0OwogICAgIHZpcnR1YWwgdm9pZCBzZXROb2RlVmFsdWUoIGNvbnN0IERPTVN0cmluZyAmX25v
ZGVWYWx1ZSwgaW50ICZleGNlcHRpb25jb2RlICk7CkBAIC0xMjIsMTQgKzEyMSwxNCBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZShpbnQgJmV4Y2VwdGlvbmNvZGUpOwogICAgIHZp
cnR1YWwgYm9vbCBoYXNDaGlsZE5vZGVzICggICkgY29uc3Q7CiAgICAgdmlydHVhbCBOb2RlSW1w
bCAqY2xvbmVOb2RlICggYm9vbCBkZWVwICkgPSAwOwotICAgIHZpcnR1YWwgRE9NU3RyaW5nIGxv
Y2FsTmFtZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgRE9NU3RyaW5nIG5hbWVzcGFjZVVSSSgpIGNv
bnN0OwotICAgIHZpcnR1YWwgRE9NU3RyaW5nIHByZWZpeCgpIGNvbnN0OwotICAgIHZpcnR1YWwg
dm9pZCBzZXRQcmVmaXgoY29uc3QgRE9NU3RyaW5nICZfcHJlZml4LCBpbnQgJmV4Y2VwdGlvbmNv
ZGUgKTsKKyAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lKCkgY29uc3Q7
CisgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSgpIGNvbnN0Owor
ICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0UHJlZml4KGNvbnN0IEF0b21pY1N0cmluZyAmX3ByZWZpeCwgaW50ICZleGNl
cHRpb25jb2RlKTsKICAgICB2b2lkIG5vcm1hbGl6ZSAoKTsKICAgICBzdGF0aWMgYm9vbCBpc1N1
cHBvcnRlZChjb25zdCBET01TdHJpbmcgJmZlYXR1cmUsIGNvbnN0IERPTVN0cmluZyAmdmVyc2lv
bik7CiAKLSAgICBOb2RlSW1wbCAqbGFzdERlc2NlbmRlbnQoKSBjb25zdDsKKyAgICBOb2RlSW1w
bCAqbGFzdERlc2NlbmRhbnQoKSBjb25zdDsKIAogICAgIC8vIE90aGVyIG1ldGhvZHMgKG5vdCBw
YXJ0IG9mIERPTSkKICAgICB2aXJ0dWFsIGJvb2wgaXNFbGVtZW50Tm9kZSgpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CkBAIC0xMzcsOCArMTM2LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9v
bCBpc1N0eWxlZEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwg
Ym9vbCBpc0F0dHJpYnV0ZU5vZGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1
YWwgYm9vbCBpc1RleHROb2RlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFs
IGJvb2wgaXNDb21tZW50Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVh
bCBib29sIGlzRG9jdW1lbnROb2RlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0
dWFsIGJvb2wgaXNYTUxFbGVtZW50Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAg
Ym9vbCBpc0Jsb2NrRmxvdygpIGNvbnN0OwogICAgIGJvb2wgaXNCbG9ja0Zsb3dPclRhYmxlKCkg
Y29uc3Q7CiAgICAgCkBAIC0xODgsMzUgKzE4NywxOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBpblNh
bWVSb290RWRpdGFibGVFbGVtZW50KE5vZGVJbXBsICopOwogICAgIGJvb2wgaW5TYW1lQ29udGFp
bmluZ0Jsb2NrRmxvd0VsZW1lbnQoTm9kZUltcGwgKik7CiAgICAgCi0gICAgLy8gdXNlZCBieSB0
aGUgcGFyc2VyLiBEb2Vzbid0IGRvIGFzIG1hbnkgZXJyb3IgY2hlY2tpbmdzIGFzCi0gICAgLy8g
YXBwZW5kQ2hpbGQoKSwgYW5kIHJldHVybnMgdGhlIG5vZGUgaW50byB3aGljaCB3aWxsIGJlIHBh
cnNlZCBuZXh0LgorICAgIC8vIHVzZWQgYnkgdGhlIHBhcnNlci4gQ2hlY2tzIGFnYWluc3QgdGhl
IERURCwgdW5saWtlIERPTSBvcGVyYXRpb25zIGxpa2UKKyAgICAvLyBhcHBlbmRDaGlsZCgpLCBh
bmQgcmV0dXJucyB0aGUgbmV3IGNvbnRhaW5lciBub2RlIGZvciBmdXR1cmUgaW5zZXJ0aW9ucyBh
cyB5b3UgcGFyc2UuCiAgICAgdmlydHVhbCBOb2RlSW1wbCAqYWRkQ2hpbGQoTm9kZUltcGwgKm5l
d0NoaWxkKTsKICAgICAKICAgICAvLyBjYWxsZWQgYnkgdGhlIHBhcnNlciB3aGVuIHRoaXMgZWxl
bWVudCdzIGNsb3NlIHRhZyBpcyByZWFjaGVkLAogICAgIC8vIHNpZ25hbGxpbmcgdGhhdCBhbGwg
Y2hpbGQgdGFncyBoYXZlIGJlZW4gcGFyc2VkIGFuZCBhZGRlZC4KICAgICAvLyBUaGlzIGlzIG9u
bHkgbmVlZGVkIGZvciA8YXBwbGV0PiBhbmQgPG9iamVjdD4gZWxlbWVudHMsIHdoaWNoIGNhbid0
IGxheSB0aGVtc2VsdmVzIG91dAogICAgIC8vIHVudGlsIHRoZXkga25vdyBhbGwgb2YgdGhlaXIg
bmVzdGVkIDxwYXJhbT5zLiBbMzYwMzE5MSwgNDA0MDg0OF0KLSAgICB2aXJ0dWFsIHZvaWQgY2xv
c2VSZW5kZXJlcigpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBjbG9zZVJlbmRlcmVyKCkge30KKwor
ICAgIHR5cGVkZWYgUV9VSU5UMzIgSWQ7IC8vIEZJWE1FOiBZYW5rIHRoaXMgb25jZSBhdHRyaWJ1
dGVzIGFyZSBhbHNvIHN3aXRjaGVkIG92ZXIuCiAKLSAgICB0eXBlZGVmIFFfVUlOVDMyIElkOwot
ICAgIC8vIGlkKCkgaXMgdXNlZCB0byBlYXNpbHkgYW5kIGV4YWN0bHkgaWRlbnRpZnkgYSBub2Rl
LiBJdAotICAgIC8vIGlzIG9wdGltaXplZCBmb3IgcXVpY2sgY29tcGFyaXNvbiBhbmQgbG93IG1l
bW9yeSBjb25zdW1wdGlvbi4KLSAgICAvLyBpdHMgdmFsdWUgZGVwZW5kcyBvbiB0aGUgb3duZXIg
ZG9jdW1lbnQgb2YgdGhlIG5vZGUgYW5kIGlzCi0gICAgLy8gY2F0ZWdvcml6ZWQgaW4gdGhlIGZv
bGxvd2luZyB3YXk6Ci0gICAgLy8gMS4uSURfTEFTVF9UQUc6IHRoZSBub2RlIGluaGVyaXRzIEhU
TUxFbGVtZW50SW1wbCBhbmQgaXMKLSAgICAvLyAgICAgICAgICAgICAgICAgcGFydCBvZiB0aGUg
SFRNTCBuYW1lc3BhY2UuCi0gICAgLy8gICAgICAgICAgICAgICAgIFRoZSBIVE1MIG5hbWVzcGFj
ZSBpcyBlaXRoZXIgdGhlIGdsb2JhbAotICAgIC8vICAgICAgICAgICAgICAgICBvbmUgKG5vIG5h
bWVzcGFjZSkgb3IgdGhlIFhIVE1MIG5hbWVzcGFjZQotICAgIC8vICAgICAgICAgICAgICAgICBk
ZXBlbmRpbmcgb24gdGhlIG93bmVyIGRvY3VtZW50J3MgZG9jdHlwZQotICAgIC8vIElEX0xBU1Rf
VEFHKzEuLjB4ZmZmZjogbm9uLUhUTUwgZWxlbWVudHMgaW4gdGhlIGdsb2JhbCBuYW1lc3BhY2UK
LSAgICAvLyBvdGhlcnMgICAgICAgbm9uLUhUTUwgZWxlbWVudHMgaW4gYSBuYW1lc3BhY2UuCi0g
ICAgLy8gICAgICAgICAgICAgICAgIHRoZSB1cHBlciAxNiBiaXQgaWRlbnRpZnkgdGhlIG5hbWVz
cGFjZQotICAgIC8vICAgICAgICAgICAgICAgICB0aGUgbG93ZXIgMTYgYml0IGlkZW50aWZ5IHRo
ZSBsb2NhbCBwYXJ0IG9mIHRoZQotICAgIC8vICAgICAgICAgICAgICAgICBxdWFsaWZpZWQgZWxl
bWVudCBuYW1lLgotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdCB7IHJldHVybiAwOyB9OwotI2lm
IEFQUExFX0NIQU5HRVMKLSAgICBJZCBpZGVudGlmaWVyKCkgY29uc3Q7Ci0jZW5kaWYKICAgICBl
bnVtIE1vdXNlRXZlbnRUeXBlIHsKICAgICAgICAgTW91c2VQcmVzcywKICAgICAgICAgTW91c2VS
ZWxlYXNlLApAQCAtMjc4LDggKzI2MCw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNL
ZXlib2FyZEZvY3VzYWJsZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBpc01vdXNlRm9jdXNh
YmxlKCkgY29uc3Q7CiAgICAgCi0gICAgdmlydHVhbCBib29sIGlzSW5saW5lKCkgY29uc3Q7Ci0g
ICAgCiAgICAgdmlydHVhbCBib29sIGlzQ29udGVudEVkaXRhYmxlKCkgY29uc3Q7CiAgICAgdmly
dHVhbCBRUmVjdCBnZXRSZWN0KCkgY29uc3Q7CiAKQEAgLTM2OSwxMSArMzQ5LDE1IEBAIHB1Ymxp
YzoKICAgICBraHRtbDo6UmVuZGVyT2JqZWN0ICpwcmV2aW91c1JlbmRlcmVyKCk7CiAgICAgdm9p
ZCBzZXRSZW5kZXJlcihraHRtbDo6UmVuZGVyT2JqZWN0KiByZW5kZXJlcikgeyBtX3JlbmRlciA9
IHJlbmRlcmVyOyB9CiAgICAgCi0gICAgdm9pZCBjaGVja1NldFByZWZpeChjb25zdCBET01TdHJp
bmcgJl9wcmVmaXgsIGludCAmZXhjZXB0aW9uY29kZSk7Ci0gICAgdm9pZCBjaGVja0FkZENoaWxk
KE5vZGVJbXBsICpuZXdDaGlsZCwgaW50ICZleGNlcHRpb25jb2RlKTsKKyAgICB2b2lkIGNoZWNr
U2V0UHJlZml4KGNvbnN0IEF0b21pY1N0cmluZyAmX3ByZWZpeCwgaW50ICZleGNlcHRpb25jb2Rl
KTsKICAgICBib29sIGlzQW5jZXN0b3IoY29uc3QgTm9kZUltcGwgKikgY29uc3Q7Ci0gICAgdmly
dHVhbCBib29sIGNoaWxkQWxsb3dlZCggTm9kZUltcGwgKm5ld0NoaWxkICk7CiAKKwkvLyBUaGVz
ZSB0d28gbWV0aG9kcyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiAgVGhlIGZvcm1lciBpcyB1c2Vk
IHRvIGRvIHN0cmljdCBlcnJvci1jaGVja2luZworCS8vIHdoZW4gYWRkaW5nIGNoaWxkcmVuIHZp
YSB0aGUgcHVibGljIERPTSBBUEkgKGUuZy4sIGFwcGVuZENoaWxkKCkpLiAgVGhlIGxhdHRlciBp
cyBjYWxsZWQgb25seSB3aGVuIHBhcnNpbmcsIAorCS8vIHRvIHNhbml0eS1jaGVjayBhZ2FpbnN0
IHRoZSBEVEQgZm9yIGVycm9yIHJlY292ZXJ5LgorCXZvaWQgY2hlY2tBZGRDaGlsZChOb2RlSW1w
bCAqbmV3Q2hpbGQsIGludCAmZXhjZXB0aW9uY29kZSk7ICAgIC8vIEVycm9yLWNoZWNraW5nIHdo
ZW4gYWRkaW5nIHZpYSB0aGUgRE9NIEFQSQorCXZpcnR1YWwgYm9vbCBjaGlsZEFsbG93ZWQoTm9k
ZUltcGwgKm5ld0NoaWxkKTsJCQkJICAgLy8gRXJyb3ItY2hlY2tpbmcgZHVyaW5nIHBhcnNpbmcg
dGhhdCBjaGVja3MgdGhlIERURAorCQogICAgIHZpcnR1YWwgbG9uZyBtYXhPZmZzZXQoKSBjb25z
dDsKICAgICBsb25nIG1heERlZXBPZmZzZXQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGxvbmcgY2Fy
ZXRNaW5PZmZzZXQoKSBjb25zdDsKQEAgLTQ4MSw3ICs0NjUsNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBub3RpZnlOb2RlTGlzdHNTdWJ0cmVlTW9kaWZpZWQoKTsKICAgICB2b2lkIG5vdGlmeUxvY2Fs
Tm9kZUxpc3RzU3VidHJlZU1vZGlmaWVkKCk7CiAKLSAgICBTaGFyZWRQdHI8Tm9kZUxpc3RJbXBs
PiBnZXRFbGVtZW50c0J5VGFnTmFtZShjb25zdCBET01TdHJpbmcgJm5hbWUpIHsgcmV0dXJuIGdl
dEVsZW1lbnRzQnlUYWdOYW1lTlMoRE9NU3RyaW5nKCksIG5hbWUpOyB9CisgICAgU2hhcmVkUHRy
PE5vZGVMaXN0SW1wbD4gZ2V0RWxlbWVudHNCeVRhZ05hbWUoY29uc3QgRE9NU3RyaW5nICZuYW1l
KSB7IHJldHVybiBnZXRFbGVtZW50c0J5VGFnTmFtZU5TKCIqIiwgbmFtZSk7IH0KICAgICBTaGFy
ZWRQdHI8Tm9kZUxpc3RJbXBsPiBnZXRFbGVtZW50c0J5VGFnTmFtZU5TKGNvbnN0IERPTVN0cmlu
ZyAmbmFtZXNwYWNlVVJJLCBjb25zdCBET01TdHJpbmcgJmxvY2FsTmFtZSk7CiAKIHByaXZhdGU6
IC8vIG1lbWJlcnMKQEAgLTYxOCwzMCArNjAyLDYgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwg
Ym9vbCBub2RlTWF0Y2hlcyggTm9kZUltcGwgKnRlc3ROb2RlICkgY29uc3Q7CiB9OwogCi0KLS8q
KgotICogTm9kZUxpc3Qgd2hpY2ggbGlzdHMgYWxsIE5vZGVzIGluIGEgZG9jdW1lbnQgd2l0aCBh
IGdpdmVuIHRhZyBuYW1lCi0gKi8KLWNsYXNzIFRhZ05vZGVMaXN0SW1wbCA6IHB1YmxpYyBOb2Rl
TGlzdEltcGwKLXsKLXB1YmxpYzoKLSAgICBUYWdOb2RlTGlzdEltcGwoIE5vZGVJbXBsICpuLCBO
b2RlSW1wbDo6SWQgdGFnSWQsIE5vZGVJbXBsOjpJZCB0YWdJZE1hc2sgKTsKLQotICAgIC8vIERP
TSBtZXRob2RzIG92ZXJyaWRkZW4gZnJvbSAgcGFyZW50IGNsYXNzZXMKLQotICAgIHZpcnR1YWwg
dW5zaWduZWQgbG9uZyBsZW5ndGgoKSBjb25zdDsKLSAgICB2aXJ0dWFsIE5vZGVJbXBsICppdGVt
ICggdW5zaWduZWQgbG9uZyBpbmRleCApIGNvbnN0OwotCi0gICAgLy8gT3RoZXIgbWV0aG9kcyAo
bm90IHBhcnQgb2YgRE9NKQotCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCBib29sIG5vZGVNYXRj
aGVzKCBOb2RlSW1wbCAqdGVzdE5vZGUgKSBjb25zdDsKLQotICAgIE5vZGVJbXBsOjpJZCBtX2lk
OwotICAgIE5vZGVJbXBsOjpJZCBtX2lkTWFzazsKLX07Ci0KLQogLyoqCiAgKiBOb2RlTGlzdCB3
aGljaCBsaXN0cyBhbGwgTm9kZXMgaW4gYSBFbGVtZW50IHdpdGggYSBnaXZlbiAibmFtZT0iIHRh
ZwogICovCkluZGV4OiBraHRtbC94bWwvZG9tX3Bvc2l0aW9uLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm
aWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC94bWwvZG9tX3Bvc2l0aW9uLmNwcCx2CnJldHJp
ZXZpbmcgcmV2aXNpb24gMS43MQpkaWZmIC11IC1wIC1yMS43MSBraHRtbC94bWwvZG9tX3Bvc2l0
aW9uLmNwcAotLS0ga2h0bWwveG1sL2RvbV9wb3NpdGlvbi5jcHAJMjEgSnVuIDIwMDUgMTg6MTE6
MTAgLTAwMDAJMS43MQorKysga2h0bWwveG1sL2RvbV9wb3NpdGlvbi5jcHAJOSBKdWwgMjAwNSAw
Mjo0Mzo0MCAtMDAwMApAQCAtMzUsNyArMzUsNiBAQAogI2luY2x1ZGUgImRvbTJfcmFuZ2VpbXBs
LmgiCiAjaW5jbHVkZSAiZG9tMl92aWV3c2ltcGwuaCIKICNpbmNsdWRlICJoZWxwZXIuaCIKLSNp
bmNsdWRlICJodG1sdGFncy5oIgogI2luY2x1ZGUgInRleHRfYWZmaW5pdHkuaCIKICNpbmNsdWRl
ICJ2aXNpYmxlX3Bvc2l0aW9uLmgiCiAjaW5jbHVkZSAidmlzaWJsZV91bml0cy5oIgpAQCAtNDUs
NiArNDQsNyBAQAogI2luY2x1ZGUgInJlbmRlcmluZy9yZW5kZXJfc3R5bGUuaCIKICNpbmNsdWRl
ICJyZW5kZXJpbmcvcmVuZGVyX3RleHQuaCIKICNpbmNsdWRlICJlZGl0aW5nL3Zpc2libGVfdGV4
dC5oIgorI2luY2x1ZGUgImh0bWxuYW1lcy5oIgogCiAjaWYgQVBQTEVfQ0hBTkdFUwogI2luY2x1
ZGUgIktXUUFzc2VydGlvbnMuaCIKQEAgLTQ0MCw3ICs0NDAsNyBAQCBQb3NpdGlvbiBQb3NpdGlv
bjo6ZG93bnN0cmVhbSgpIGNvbnN0CiAKICAgICAgICAgLy8gc3RvcCBiZWZvcmUgZ29pbmcgYWJv
dmUgdGhlIGJvZHksIHVwIGludG8gdGhlIGhlYWQKICAgICAgICAgLy8gcmV0dXJuIHRoZSBsYXN0
IHZpc2libGUgc3RyZWFtZXIgcG9zaXRpb24KLSAgICAgICAgaWYgKGN1cnJlbnROb2RlLT5pZCgp
ID09IElEX0JPRFkgJiYgY3VycmVudE9mZnNldCA+PSAoaW50KSBjdXJyZW50Tm9kZS0+Y2hpbGRO
b2RlQ291bnQoKSkKKyAgICAgICAgaWYgKGN1cnJlbnROb2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6Ym9keSgpKSAmJiBjdXJyZW50T2Zmc2V0ID49IChpbnQpIGN1cnJlbnROb2RlLT5jaGlsZE5v
ZGVDb3VudCgpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgLy8g
bGltaXQgdHJhdmVyc2FsIHRvIGJsb2NrIG9yIHRhYmxlIGVuY2xvc2luZyB0aGUgb3JpZ2luYWwg
ZWxlbWVudApAQCAtNjk0LDcgKzY5NCw3IEBAIGJvb2wgUG9zaXRpb246OnJlbmRlcnNJbkRpZmZl
cmVudFBvc2l0aW8KICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIGlmIChub2RlKCkg
PT0gcG9zLm5vZGUoKSkgewotICAgICAgICBpZiAobm9kZSgpLT5pZCgpID09IElEX0JSKQorICAg
ICAgICBpZiAobm9kZSgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YnIoKSkpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgaWYgKG9mZnNldCgpID09IHBvcy5vZmZzZXQoKSkK
QEAgLTcwNiwxMCArNzA2LDEwIEBAIGJvb2wgUG9zaXRpb246OnJlbmRlcnNJbkRpZmZlcmVudFBv
c2l0aW8KICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBpZiAobm9kZSgpLT5pZCgpID09IElE
X0JSICYmIHBvcy5pblJlbmRlcmVkQ29udGVudCgpKQorICAgIGlmIChub2RlKCktPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjpicigpKSAmJiBwb3MuaW5SZW5kZXJlZENvbnRlbnQoKSkKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgCi0gICAgaWYgKHBvcy5ub2RlKCktPmlkKCkg
PT0gSURfQlIgJiYgaW5SZW5kZXJlZENvbnRlbnQoKSkKKyAgICBpZiAocG9zLm5vZGUoKS0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OmJyKCkpICYmIGluUmVuZGVyZWRDb250ZW50KCkpCiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgIAogICAgIGlmIChub2RlKCktPmVuY2xvc2lu
Z0Jsb2NrRmxvd0VsZW1lbnQoKSAhPSBwb3Mubm9kZSgpLT5lbmNsb3NpbmdCbG9ja0Zsb3dFbGVt
ZW50KCkpCkBAIC03NjQsNyArNzY0LDcgQEAgUG9zaXRpb24gUG9zaXRpb246OmxlYWRpbmdXaGl0
ZXNwYWNlUG9zaQogICAgIGlmIChpc051bGwoKSkKICAgICAgICAgcmV0dXJuIFBvc2l0aW9uKCk7
CiAgICAgCi0gICAgaWYgKHVwc3RyZWFtKCkubm9kZSgpLT5pZCgpID09IElEX0JSKQorICAgIGlm
ICh1cHN0cmVhbSgpLm5vZGUoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJyKCkpKQogICAgICAg
ICByZXR1cm4gUG9zaXRpb24oKTsKIAogICAgIFBvc2l0aW9uIHByZXYgPSBwcmV2aW91c0NoYXJh
Y3RlclBvc2l0aW9uKGFmZmluaXR5KTsKQEAgLTc5NCw3ICs3OTQsNyBAQCBQb3NpdGlvbiBQb3Np
dGlvbjo6dHJhaWxpbmdXaGl0ZXNwYWNlUG9zCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAo
ZG93bnN0cmVhbSgpLm5vZGUoKS0+aWQoKSA9PSBJRF9CUikKKyAgICBpZiAoZG93bnN0cmVhbSgp
Lm5vZGUoKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJyKCkpKQogICAgICAgICByZXR1cm4gUG9z
aXRpb24oKTsKIAogICAgIFBvc2l0aW9uIG5leHQgPSBuZXh0Q2hhcmFjdGVyUG9zaXRpb24oYWZm
aW5pdHkpOwpJbmRleDoga2h0bWwveG1sL2RvbV9xbmFtZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwveG1sL2RvbV9xbmFtZS5jcHAsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuMgpkaWZmIC11IC1wIC1yMS4yIGtodG1sL3htbC9kb21fcW5hbWUuY3BwCi0t
LSBraHRtbC94bWwvZG9tX3FuYW1lLmNwcAkxNiBKdW4gMjAwNSAyMTowNjo0NiAtMDAwMAkxLjIK
KysrIGtodG1sL3htbC9kb21fcW5hbWUuY3BwCTkgSnVsIDIwMDUgMDI6NDM6NDAgLTAwMDAKQEAg
LTE5LDQ4ICsxOSw5OCBAQAogICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCiAgKi8KIAot
I2luY2x1ZGUgPHFwdHJkaWN0Lmg+CiAjaW5jbHVkZSAiZG9tX3FuYW1lLmgiCisjaW5jbHVkZSAi
bWlzYy9oYXNoc2V0LmgiCisKK3VzaW5nIGtodG1sOjpIYXNoU2V0OwogCiBuYW1lc3BhY2UgRE9N
IHsKIAotc3RhdGljIFFQdHJEaWN0PFFQdHJEaWN0PFFQdHJEaWN0PFF1YWxpZmllZE5hbWU6OlF1
YWxpZmllZE5hbWVJbXBsPiA+ID4qIGdOYW1lQ2FjaGUgPSAwOworc3RydWN0IFF1YWxpZmllZE5h
bWVDb21wb25lbnRzIHsKKyAgICBET01TdHJpbmdJbXBsICptX3ByZWZpeDsKKyAgICBET01TdHJp
bmdJbXBsICptX2xvY2FsTmFtZTsKKyAgICBET01TdHJpbmdJbXBsICptX25hbWVzcGFjZTsKK307
CiAKLVF1YWxpZmllZE5hbWU6OlF1YWxpZmllZE5hbWUoY29uc3QgQXRvbWljU3RyaW5nJiBwLCBj
b25zdCBBdG9taWNTdHJpbmcmIGwsIGNvbnN0IEF0b21pY1N0cmluZyYgbikKKy8vIEdvbGRlbiBy
YXRpbyAtIGFyYml0cmFyeSBzdGFydCB2YWx1ZSB0byBhdm9pZCBtYXBwaW5nIGFsbCAwJ3MgdG8g
YWxsIDAncworc3RhdGljIGNvbnN0IHVuc2lnbmVkIFBISSA9IDB4OWUzNzc5YjlVOworICAgIAor
aW5saW5lIHVuc2lnbmVkIGhhc2hDb21wb25lbnRzKGNvbnN0IFF1YWxpZmllZE5hbWVDb21wb25l
bnRzJiBidWYpCiB7Ci0gICAgLy8gT2J0YWluIGFuIGFwcHJvcHJpYXRlIGlubmVyIGZyb20gb3Vy
IGRpY3Rpb25hcnkuCi0gICAgUVB0ckRpY3Q8UVB0ckRpY3Q8UXVhbGlmaWVkTmFtZUltcGw+ID4q
IG5hbWVzcGFjZURpY3QgPSAwOwotICAgIFFQdHJEaWN0PFF1YWxpZmllZE5hbWVJbXBsPiogcHJl
Zml4RGljdCA9IDA7Ci0gICAgaWYgKGdOYW1lQ2FjaGUpIHsKLSAgICAgICAgbmFtZXNwYWNlRGlj
dCA9IGdOYW1lQ2FjaGUtPmZpbmQoKHZvaWQqKShuLmltcGxlbWVudGF0aW9uKCkpKTsKLSAgICAg
ICAgaWYgKG5hbWVzcGFjZURpY3QpIHsKLSAgICAgICAgICAgIHByZWZpeERpY3QgPSBuYW1lc3Bh
Y2VEaWN0LT5maW5kKCh2b2lkKilwLmltcGxlbWVudGF0aW9uKCkpOwotICAgICAgICAgICAgaWYg
KHByZWZpeERpY3QpCi0gICAgICAgICAgICAgICAgbV9pbXBsID0gcHJlZml4RGljdC0+ZmluZCgo
dm9pZCopbC5pbXBsZW1lbnRhdGlvbigpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICgh
bV9pbXBsKSB7Ci0gICAgICAgIG1faW1wbCA9IG5ldyBRdWFsaWZpZWROYW1lSW1wbChwLCBsLCBu
KTsKLQotICAgICAgICAvLyBQdXQgdGhlIG9iamVjdCBpbnRvIHRoZSBoYXNoLgotICAgICAgICBp
ZiAoIWdOYW1lQ2FjaGUpCi0gICAgICAgICAgICBnTmFtZUNhY2hlID0gbmV3IFFQdHJEaWN0PFFQ
dHJEaWN0PFFQdHJEaWN0PFF1YWxpZmllZE5hbWVJbXBsPiA+ID47Ci0gICAgICAgIAotICAgICAg
ICBpZiAoIW5hbWVzcGFjZURpY3QpIHsKLSAgICAgICAgICAgIG5hbWVzcGFjZURpY3QgPSBuZXcg
UVB0ckRpY3Q8UVB0ckRpY3Q8UXVhbGlmaWVkTmFtZUltcGw+ID47Ci0gICAgICAgICAgICBuYW1l
c3BhY2VEaWN0LT5zZXRBdXRvRGVsZXRlKHRydWUpOwotICAgICAgICAgICAgZ05hbWVDYWNoZS0+
aW5zZXJ0KCh2b2lkKiluLmltcGxlbWVudGF0aW9uKCksIG5hbWVzcGFjZURpY3QpOwotICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoIXByZWZpeERpY3QpIHsKLSAgICAgICAgICAgIHBy
ZWZpeERpY3QgPSBuZXcgUVB0ckRpY3Q8UXVhbGlmaWVkTmFtZUltcGw+OwotICAgICAgICAgICAg
bmFtZXNwYWNlRGljdC0+aW5zZXJ0KCh2b2lkKilwLmltcGxlbWVudGF0aW9uKCksIHByZWZpeERp
Y3QpOwotICAgICAgICB9CisgICAgdW5zaWduZWQgbCA9IHNpemVvZihRdWFsaWZpZWROYW1lQ29t
cG9uZW50cykgLyBzaXplb2YodWludDE2X3QpOworICAgIGNvbnN0IHVpbnQxNl90ICpzID0gcmVp
bnRlcnByZXRfY2FzdDxjb25zdCB1aW50MTZfdCo+KCZidWYpOworICAgIHVpbnQzMl90IGhhc2gg
PSBQSEk7CisgICAgdWludDMyX3QgdG1wOwogICAgICAgICAKLSAgICAgICAgcHJlZml4RGljdC0+
aW5zZXJ0KCh2b2lkKilsLmltcGxlbWVudGF0aW9uKCksIG1faW1wbCk7CisgICAgaW50IHJlbSA9
IGwgJiAxOworICAgIGwgPj49IDE7CisgICAgICAgIAorICAgIC8vIE1haW4gbG9vcAorICAgIGZv
ciAoOyBsID4gMDsgbC0tKSB7CisgICAgICAgIGhhc2ggKz0gc1swXTsKKyAgICAgICAgdG1wID0g
KHNbMV0gPDwgMTEpIF4gaGFzaDsKKyAgICAgICAgaGFzaCA9IChoYXNoIDw8IDE2KSBeIHRtcDsK
KyAgICAgICAgcyArPSAyOworICAgICAgICBoYXNoICs9IGhhc2ggPj4gMTE7CiAgICAgfQogICAg
IAorICAgIC8vIEhhbmRsZSBlbmQgY2FzZQorICAgIGlmIChyZW0pIHsKKyAgICAgICAgaGFzaCAr
PSBzWzBdOworICAgICAgICBoYXNoIF49IGhhc2ggPDwgMTE7CisgICAgICAgIGhhc2ggKz0gaGFz
aCA+PiAxNzsKKyAgICB9CisgICAgICAgIAorICAgIC8vIEZvcmNlICJhdmFsYW5jaGluZyIgb2Yg
ZmluYWwgMTI3IGJpdHMKKyAgICBoYXNoIF49IGhhc2ggPDwgMzsKKyAgICBoYXNoICs9IGhhc2gg
Pj4gNTsKKyAgICBoYXNoIF49IGhhc2ggPDwgMjsKKyAgICBoYXNoICs9IGhhc2ggPj4gMTU7Cisg
ICAgaGFzaCBePSBoYXNoIDw8IDEwOworICAgICAgICAKKyAgICAvLyB0aGlzIGF2b2lkcyBldmVy
IHJldHVybmluZyBhIGhhc2ggY29kZSBvZiAwLCBzaW5jZSB0aGF0IGlzIHVzZWQgdG8KKyAgICAv
LyBzaWduYWwgImhhc2ggbm90IGNvbXB1dGVkIHlldCIsIHVzaW5nIGEgdmFsdWUgdGhhdCBpcyBs
aWtlbHkgdG8gYmUKKyAgICAvLyBlZmZlY3RpdmVseSB0aGUgc2FtZSBhcyAwIHdoZW4gdGhlIGxv
dyBiaXRzIGFyZSBtYXNrZWQKKyAgICBpZiAoaGFzaCA9PSAwKQorICAgICAgICBoYXNoID0gMHg4
MDAwMDAwMDsKKyAgICAgICAgCisgICAgcmV0dXJuIGhhc2g7Cit9CisKK3N0cnVjdCBRTmFtZUhh
c2ggeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFF1YWxpZmllZE5hbWU6OlF1YWxp
ZmllZE5hbWVJbXBsICpuYW1lKSB7ICAgIAorICAgICAgICBRdWFsaWZpZWROYW1lQ29tcG9uZW50
cyBjb21wb25lbnRzID0geyBuYW1lLT5tX3ByZWZpeC5pbXBsZW1lbnRhdGlvbigpLCAKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZS0+bV9sb2NhbE5h
bWUuaW1wbGVtZW50YXRpb24oKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5hbWUtPm1fbmFtZXNwYWNlLmltcGxlbWVudGF0aW9uKCkgfTsKKyAgICAg
ICAgcmV0dXJuIGhhc2hDb21wb25lbnRzKGNvbXBvbmVudHMpOworICAgIH0KKyAgICBzdGF0aWMg
Ym9vbCBlcXVhbChjb25zdCBRdWFsaWZpZWROYW1lOjpRdWFsaWZpZWROYW1lSW1wbCAqYSwgY29u
c3QgUXVhbGlmaWVkTmFtZTo6UXVhbGlmaWVkTmFtZUltcGwgKmIpIHsgcmV0dXJuIGEgPT0gYjsg
fQorfTsKKwordHlwZWRlZiBIYXNoU2V0PFF1YWxpZmllZE5hbWU6OlF1YWxpZmllZE5hbWVJbXBs
KiwgUU5hbWVIYXNoPiBRTmFtZVNldDsKKworc3RhdGljIFFOYW1lU2V0ICpnTmFtZUNhY2hlOwor
CitpbmxpbmUgYm9vbCBlcXVhbENvbXBvbmVudHMoUXVhbGlmaWVkTmFtZTo6UXVhbGlmaWVkTmFt
ZUltcGwqIGNvbnN0JiBuYW1lLCBjb25zdCBRdWFsaWZpZWROYW1lQ29tcG9uZW50cyAmY29tcG9u
ZW50cykKK3sKKyAgICByZXR1cm4gY29tcG9uZW50cy5tX2xvY2FsTmFtZSA9PSBuYW1lLT5tX2xv
Y2FsTmFtZS5pbXBsZW1lbnRhdGlvbigpICYmCisgICAgICAgICAgIGNvbXBvbmVudHMubV9uYW1l
c3BhY2UgPT0gbmFtZS0+bV9uYW1lc3BhY2UuaW1wbGVtZW50YXRpb24oKSAmJgorICAgICAgICAg
ICBjb21wb25lbnRzLm1fcHJlZml4ID09IG5hbWUtPm1fcHJlZml4LmltcGxlbWVudGF0aW9uKCk7
Cit9CisKK2lubGluZSBRdWFsaWZpZWROYW1lOjpRdWFsaWZpZWROYW1lSW1wbCAqY29udmVydENv
bXBvbmVudHMoY29uc3QgUXVhbGlmaWVkTmFtZUNvbXBvbmVudHMmIGNvbXBvbmVudHMsIHVuc2ln
bmVkIGhhc2gpCit7CisgICAgcmV0dXJuIG5ldyBRdWFsaWZpZWROYW1lOjpRdWFsaWZpZWROYW1l
SW1wbChjb21wb25lbnRzLm1fcHJlZml4LCBjb21wb25lbnRzLm1fbG9jYWxOYW1lLCBjb21wb25l
bnRzLm1fbmFtZXNwYWNlKTsKK30KKworCitRdWFsaWZpZWROYW1lOjpRdWFsaWZpZWROYW1lKGNv
bnN0IEF0b21pY1N0cmluZyYgcCwgY29uc3QgQXRvbWljU3RyaW5nJiBsLCBjb25zdCBBdG9taWNT
dHJpbmcmIG4pCisgICAgOiBtX2ltcGwoMCkKK3sKKyAgICBpZiAoIWdOYW1lQ2FjaGUpCisgICAg
ICAgIGdOYW1lQ2FjaGUgPSBuZXcgUU5hbWVTZXQ7CisgICAgUXVhbGlmaWVkTmFtZUNvbXBvbmVu
dHMgY29tcG9uZW50cyA9IHsgcC5pbXBsZW1lbnRhdGlvbigpLCBsLmltcGxlbWVudGF0aW9uKCks
IG4uaW1wbGVtZW50YXRpb24oKSB9OworICAgIG1faW1wbCA9ICpnTmFtZUNhY2hlLT5pbnNlcnQ8
UXVhbGlmaWVkTmFtZUNvbXBvbmVudHMsIGhhc2hDb21wb25lbnRzLCBlcXVhbENvbXBvbmVudHMs
IGNvbnZlcnRDb21wb25lbnRzPihjb21wb25lbnRzKS5maXJzdDsgICAgCiAgICAgcmVmKCk7CiB9
CiAKQEAgLTg4LDMxICsxMzgsMTYgQEAgY29uc3QgUXVhbGlmaWVkTmFtZSYgUXVhbGlmaWVkTmFt
ZTo6b3BlcgogCiB2b2lkIFF1YWxpZmllZE5hbWU6OmRlcmVmKCkKIHsKLSAgICBpZiAobV9pbXBs
LT5yZWZDb3VudCgpID09IDEpIHsKLSAgICAgICAgLy8gQmVmb3JlIGRlY3JlbWVudGluZyB0aGUg
cmVmIHRvIDAsIHJlbW92ZSBvdXJzZWx2ZXMgZnJvbSB0aGUgaGFzaCB0YWJsZS4KLSAgICAgICAg
UVB0ckRpY3Q8UVB0ckRpY3Q8UXVhbGlmaWVkTmFtZUltcGw+ID4qIG5hbWVzcGFjZURpY3QgPSAw
OwotICAgICAgICBRUHRyRGljdDxRdWFsaWZpZWROYW1lSW1wbD4qIHByZWZpeERpY3QgPSAwOwot
ICAgICAgICBpZiAoZ05hbWVDYWNoZSkgewotICAgICAgICAgICAgbmFtZXNwYWNlRGljdCA9IGdO
YW1lQ2FjaGUtPmZpbmQoKHZvaWQqKShuYW1lc3BhY2VVUkkoKS5pbXBsZW1lbnRhdGlvbigpKSk7
Ci0gICAgICAgICAgICBpZiAobmFtZXNwYWNlRGljdCkgewotICAgICAgICAgICAgICAgIHByZWZp
eERpY3QgPSBuYW1lc3BhY2VEaWN0LT5maW5kKCh2b2lkKilwcmVmaXgoKS5pbXBsZW1lbnRhdGlv
bigpKTsKLSAgICAgICAgICAgICAgICBpZiAocHJlZml4RGljdCkKLSAgICAgICAgICAgICAgICAg
ICAgcHJlZml4RGljdC0+cmVtb3ZlKCh2b2lkKilsb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigp
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICAKKyAgICBpZiAobV9pbXBs
LT5oYXNPbmVSZWYoKSkKKyAgICAgICAgZ05hbWVDYWNoZS0+cmVtb3ZlKG1faW1wbCk7CisgICAg
ICAgIAogICAgIG1faW1wbC0+ZGVyZWYoKTsKIH0KIAotYm9vbCBvcGVyYXRvcj09KGNvbnN0IEF0
b21pY1N0cmluZyYgYSwgY29uc3QgUXVhbGlmaWVkTmFtZSYgcSkKLXsgCi0gICAgcmV0dXJuIGEg
PT0gcS5sb2NhbE5hbWUoKTsKLX0KLQotYm9vbCBvcGVyYXRvcj09KGNvbnN0IFF1YWxpZmllZE5h
bWUmIHEsIGNvbnN0IEF0b21pY1N0cmluZyYgYSkKK3ZvaWQgUXVhbGlmaWVkTmFtZTo6c2V0UHJl
Zml4KGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4KQogewotICAgIHJldHVybiBhID09IHEubG9j
YWxOYW1lKCk7CisgICAgUXVhbGlmaWVkTmFtZSBvdGhlcihwcmVmaXgsIGxvY2FsTmFtZSgpLCBu
YW1lc3BhY2VVUkkoKSk7CisgICAgKnRoaXMgPSBvdGhlcjsKIH0KIAogfQpJbmRleDoga2h0bWwv
eG1sL2RvbV9xbmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2to
dG1sL3htbC9kb21fcW5hbWUuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yCmRpZmYgLXUgLXAg
LXIxLjIga2h0bWwveG1sL2RvbV9xbmFtZS5oCi0tLSBraHRtbC94bWwvZG9tX3FuYW1lLmgJMTYg
SnVuIDIwMDUgMjE6MDY6NDYgLTAwMDAJMS4yCisrKyBraHRtbC94bWwvZG9tX3FuYW1lLmgJOSBK
dWwgMjAwNSAwMjo0Mzo0MSAtMDAwMApAQCAtMzIsOSArMzIsNiBAQCBwdWJsaWM6CiAgICAgcHVi
bGljOgogICAgICAgICBRdWFsaWZpZWROYW1lSW1wbChjb25zdCBBdG9taWNTdHJpbmcmIHAsIGNv
bnN0IEF0b21pY1N0cmluZyYgbCwgY29uc3QgQXRvbWljU3RyaW5nJiBuKSA6bV9wcmVmaXgocCks
IG1fbG9jYWxOYW1lKGwpLCBtX25hbWVzcGFjZShuKSB7fQogCi0gICAgICAgIGZyaWVuZCBjbGFz
cyBRdWFsaWZpZWROYW1lOwotCi0gICAgcHJpdmF0ZToKICAgICAgICAgQXRvbWljU3RyaW5nIG1f
cHJlZml4OwogICAgICAgICBBdG9taWNTdHJpbmcgbV9sb2NhbE5hbWU7CiAgICAgICAgIEF0b21p
Y1N0cmluZyBtX25hbWVzcGFjZTsKQEAgLTQ3LDEzICs0NCwxOSBAQCBwdWJsaWM6CiAgICAgUXVh
bGlmaWVkTmFtZShjb25zdCBRdWFsaWZpZWROYW1lJiBvdGhlcik7CiAgICAgY29uc3QgUXVhbGlm
aWVkTmFtZSYgb3BlcmF0b3I9KGNvbnN0IFF1YWxpZmllZE5hbWUmIG90aGVyKTsKIAotICAgIERP
TVN0cmluZ0ltcGwqIGxvY2FsTmFtZVB0cigpIGNvbnN0IHsgcmV0dXJuIGxvY2FsTmFtZSgpLmlt
cGxlbWVudGF0aW9uKCk7IH0KKyAgICAvLyBJbXBsaWNpdCBjb252ZXJzaW9uIG9wZXJhdG9ycy4g
IFdoZW4gd2UncmUgdHVybmVkIGludG8gYW4gQXRvbWljU3RyaW5nIG9yIHRvIGEgRE9NU3RyaW5n
SW1wbCosIHdlIGp1c3QgdXNlIHRoZQorICAgIC8vIGxvY2FsTmFtZSBjb21wb25lbnQuICBCZSBj
YXJlZnVsIHdpdGggdGhlc2UhCisgICAgb3BlcmF0b3IgY29uc3QgQXRvbWljU3RyaW5nJigpIGNv
bnN0IHsgcmV0dXJuIGxvY2FsTmFtZSgpOyB9CisgICAgb3BlcmF0b3IgRE9NU3RyaW5nSW1wbCoo
KSBjb25zdCB7IHJldHVybiBsb2NhbE5hbWUoKS5pbXBsZW1lbnRhdGlvbigpOyB9CiAgICAgCiAg
ICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFF1YWxpZmllZE5hbWUmIG90aGVyKSBjb25zdCB7IHJl
dHVybiBtX2ltcGwgPT0gb3RoZXIubV9pbXBsOyB9CiAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IFF1YWxpZmllZE5hbWUmIG90aGVyKSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09IG90aGVyKTsg
fQogCiAgICAgYm9vbCBtYXRjaGVzKGNvbnN0IFF1YWxpZmllZE5hbWUmIG90aGVyKSBjb25zdCB7
IHJldHVybiBtX2ltcGwgPT0gb3RoZXIubV9pbXBsIHx8IChsb2NhbE5hbWUoKSA9PSBvdGhlci5s
b2NhbE5hbWUoKSAmJiBuYW1lc3BhY2VVUkkoKSA9PSBvdGhlci5uYW1lc3BhY2VVUkkoKSk7IH0K
IAorICAgIGJvb2wgaGFzUHJlZml4KCkgY29uc3QgeyByZXR1cm4gbV9pbXBsLT5tX3ByZWZpeCAh
PSBudWxsQXRvbTsgfQorICAgIHZvaWQgc2V0UHJlZml4KGNvbnN0IEF0b21pY1N0cmluZyYgcHJl
Zml4KTsKKwogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4KCkgY29uc3QgeyByZXR1cm4g
bV9pbXBsLT5tX3ByZWZpeDsgfQogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lKCkg
Y29uc3QgeyByZXR1cm4gbV9pbXBsLT5tX2xvY2FsTmFtZTsgfQogICAgIGNvbnN0IEF0b21pY1N0
cmluZyYgbmFtZXNwYWNlVVJJKCkgY29uc3QgeyByZXR1cm4gbV9pbXBsLT5tX25hbWVzcGFjZTsg
fQpAQCAtNjYsMTEgKzY5LDEwIEBAIHByaXZhdGU6CiAgICAgUXVhbGlmaWVkTmFtZUltcGwqIG1f
aW1wbDsKIH07CiAKLWJvb2wgb3BlcmF0b3I9PShjb25zdCBBdG9taWNTdHJpbmcmIGEsIGNvbnN0
IFF1YWxpZmllZE5hbWUmIHEpOworaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBdG9taWNT
dHJpbmcmIGEsIGNvbnN0IFF1YWxpZmllZE5hbWUmIHEpIHsgcmV0dXJuIGEgPT0gcS5sb2NhbE5h
bWUoKTsgfQogaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBBdG9taWNTdHJpbmcmIGEsIGNv
bnN0IFF1YWxpZmllZE5hbWUmIHEpIHsgcmV0dXJuIGEgIT0gcS5sb2NhbE5hbWUoKTsgfQotYm9v
bCBvcGVyYXRvcj09KGNvbnN0IFF1YWxpZmllZE5hbWUmIHEsIGNvbnN0IEF0b21pY1N0cmluZyYg
YSk7CitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFF1YWxpZmllZE5hbWUmIHEsIGNvbnN0
IEF0b21pY1N0cmluZyYgYSkgeyByZXR1cm4gYSA9PSBxLmxvY2FsTmFtZSgpOyB9CiBpbmxpbmUg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IFF1YWxpZmllZE5hbWUmIHEsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgYSkgeyByZXR1cm4gYSAhPSBxLmxvY2FsTmFtZSgpOyB9CiAKLQogfQogI2VuZGlmCkluZGV4
OiBraHRtbC94bWwvZG9tX3RleHRpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvV2ViQ29yZS9raHRtbC94bWwvZG9tX3RleHRpbXBsLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNp
b24gMS4yMwpkaWZmIC11IC1wIC1yMS4yMyBraHRtbC94bWwvZG9tX3RleHRpbXBsLmNwcAotLS0g
a2h0bWwveG1sL2RvbV90ZXh0aW1wbC5jcHAJMTkgT2N0IDIwMDQgMjM6MDQ6MjkgLTAwMDAJMS4y
MworKysga2h0bWwveG1sL2RvbV90ZXh0aW1wbC5jcHAJOSBKdWwgMjAwNSAwMjo0Mzo0MSAtMDAw
MApAQCAtMzA0LDkgKzMwNCwxNCBAQCBDb21tZW50SW1wbDo6fkNvbW1lbnRJbXBsKCkKIHsKIH0K
IAorY29uc3QgQXRvbWljU3RyaW5nJiBDb21tZW50SW1wbDo6bG9jYWxOYW1lKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gY29tbWVudEF0b207Cit9CisKIERPTVN0cmluZyBDb21tZW50SW1wbDo6bm9k
ZU5hbWUoKSBjb25zdAogewotICAgIHJldHVybiAiI2NvbW1lbnQiOworICAgIHJldHVybiBjb21t
ZW50QXRvbS5zdHJpbmcoKTsKIH0KIAogdW5zaWduZWQgc2hvcnQgQ29tbWVudEltcGw6Om5vZGVU
eXBlKCkgY29uc3QKQEAgLTMxOSwxMSArMzI0LDYgQEAgTm9kZUltcGwgKkNvbW1lbnRJbXBsOjpj
bG9uZU5vZGUoYm9vbCAvKgogICAgIHJldHVybiBnZXREb2N1bWVudCgpLT5jcmVhdGVDb21tZW50
KCBzdHIgKTsKIH0KIAotTm9kZUltcGw6OklkIENvbW1lbnRJbXBsOjppZCgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIElEX0NPTU1FTlQ7Ci19Ci0KIC8vIERPTSBTZWN0aW9uIDEuMS4xCiBib29sIENv
bW1lbnRJbXBsOjpjaGlsZFR5cGVBbGxvd2VkKCB1bnNpZ25lZCBzaG9ydCAvKnR5cGUqLyApCiB7
CkBAIC0zOTQsOSArMzk0LDE0IEBAIFRleHRJbXBsICpUZXh0SW1wbDo6c3BsaXRUZXh0KCBjb25z
dCB1bnMKICAgICByZXR1cm4gbmV3VGV4dDsKIH0KIAorY29uc3QgQXRvbWljU3RyaW5nJiBUZXh0
SW1wbDo6bG9jYWxOYW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gdGV4dEF0b207Cit9CisKIERP
TVN0cmluZyBUZXh0SW1wbDo6bm9kZU5hbWUoKSBjb25zdAogewotICByZXR1cm4gIiN0ZXh0IjsK
KyAgICByZXR1cm4gdGV4dEF0b20uc3RyaW5nKCk7CiB9CiAKIHVuc2lnbmVkIHNob3J0IFRleHRJ
bXBsOjpub2RlVHlwZSgpIGNvbnN0CkBAIC00NjIsMTEgKzQ2Nyw2IEBAIHZvaWQgVGV4dEltcGw6
OmF0dGFjaCgpCiAgICAgQ2hhcmFjdGVyRGF0YUltcGw6OmF0dGFjaCgpOwogfQogCi1Ob2RlSW1w
bDo6SWQgVGV4dEltcGw6OmlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gSURfVEVYVDsKLX0KLQog
dm9pZCBUZXh0SW1wbDo6cmVjYWxjU3R5bGUoIFN0eWxlQ2hhbmdlIGNoYW5nZSApCiB7CiAvLyAg
ICAgIHFEZWJ1ZygidGV4dEltcGw6OnJlY2FsY1N0eWxlIik7CkluZGV4OiBraHRtbC94bWwvZG9t
X3RleHRpbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwv
eG1sL2RvbV90ZXh0aW1wbC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE2CmRpZmYgLXUgLXAg
LXIxLjE2IGtodG1sL3htbC9kb21fdGV4dGltcGwuaAotLS0ga2h0bWwveG1sL2RvbV90ZXh0aW1w
bC5oCTEwIE1heSAyMDA1IDIxOjU5OjE1IC0wMDAwCTEuMTYKKysrIGtodG1sL3htbC9kb21fdGV4
dGltcGwuaAk5IEp1bCAyMDA1IDAyOjQzOjQxIC0wMDAwCkBAIC05NSwxMyArOTUsMTMgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgfkNvbW1lbnRJbXBsKCk7CiAKICAgICAvLyBET00gbWV0aG9kcyBv
dmVycmlkZGVuIGZyb20gIHBhcmVudCBjbGFzc2VzCisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBs
b2NhbE5hbWUoKSBjb25zdDsKICAgICB2aXJ0dWFsIERPTVN0cmluZyBub2RlTmFtZSgpIGNvbnN0
OwogICAgIHZpcnR1YWwgdW5zaWduZWQgc2hvcnQgbm9kZVR5cGUoKSBjb25zdDsKICAgICB2aXJ0
dWFsIE5vZGVJbXBsICpjbG9uZU5vZGUoYm9vbCBkZWVwKTsKIAogICAgIC8vIE90aGVyIG1ldGhv
ZHMgKG5vdCBwYXJ0IG9mIERPTSkKLQotICAgIHZpcnR1YWwgSWQgaWQoKSBjb25zdDsKKyAgICB2
aXJ0dWFsIGJvb2wgaXNDb21tZW50Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICB2
aXJ0dWFsIGJvb2wgY2hpbGRUeXBlQWxsb3dlZCggdW5zaWduZWQgc2hvcnQgdHlwZSApOwogCiAg
ICAgdmlydHVhbCBET01TdHJpbmcgdG9TdHJpbmcoKSBjb25zdDsKQEAgLTEyMSw2ICsxMjEsNyBA
QCBwdWJsaWM6CiAgICAgVGV4dEltcGwgKnNwbGl0VGV4dCAoIGNvbnN0IHVuc2lnbmVkIGxvbmcg
b2Zmc2V0LCBpbnQgJmV4Y2VwdGlvbmNvZGUgKTsKIAogICAgIC8vIERPTSBtZXRob2RzIG92ZXJy
aWRkZW4gZnJvbSAgcGFyZW50IGNsYXNzZXMKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2Fs
TmFtZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgRE9NU3RyaW5nIG5vZGVOYW1lKCkgY29uc3Q7CiAg
ICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCBub2RlVHlwZSgpIGNvbnN0OwogICAgIHZpcnR1YWwg
Tm9kZUltcGwgKmNsb25lTm9kZShib29sIGRlZXApOwpAQCAtMTI4LDcgKzEyOSw2IEBAIHB1Ymxp
YzoKICAgICAvLyBPdGhlciBtZXRob2RzIChub3QgcGFydCBvZiBET00pCiAKICAgICB2aXJ0dWFs
IGJvb2wgaXNUZXh0Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIElk
IGlkKCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaCgpOwogICAgIHZpcnR1YWwgYm9v
bCByZW5kZXJlcklzTmVlZGVkKGtodG1sOjpSZW5kZXJTdHlsZSAqKTsKICAgICB2aXJ0dWFsIGto
dG1sOjpSZW5kZXJPYmplY3QgKmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hICosIGtodG1sOjpS
ZW5kZXJTdHlsZSAqKTsKSW5kZXg6IGtodG1sL3htbC94bWxfdG9rZW5pemVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC94bWwveG1sX3Rva2VuaXplci5j
cHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzEKZGlmZiAtdSAtcCAtcjEuMzEga2h0bWwveG1s
L3htbF90b2tlbml6ZXIuY3BwCi0tLSBraHRtbC94bWwveG1sX3Rva2VuaXplci5jcHAJNCBNYXkg
MjAwNSAyMToxMToyMyAtMDAwMAkxLjMxCisrKyBraHRtbC94bWwveG1sX3Rva2VuaXplci5jcHAJ
OSBKdWwgMjAwNSAwMjo0Mzo0MiAtMDAwMApAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgInht
bC9kb21feG1saW1wbC5oIgogI2luY2x1ZGUgImh0bWwvaHRtbF9oZWFkaW1wbC5oIgogI2luY2x1
ZGUgImh0bWwvaHRtbF90YWJsZWltcGwuaCIKLSNpbmNsdWRlICJtaXNjL2h0bWx0YWdzLmgiCisj
aW5jbHVkZSAiaHRtbG5hbWVzLmgiCiAjaW5jbHVkZSAibWlzYy9odG1sYXR0cnMuaCIKICNpbmNs
dWRlICJtaXNjL2xvYWRlci5oIgogCkBAIC00NCw2ICs0NCw3IEBAIHVzaW5nIERPTTo6RG9jdW1l
bnRJbXBsOwogdXNpbmcgRE9NOjpEb2N1bWVudFB0cjsKIHVzaW5nIERPTTo6RE9NU3RyaW5nOwog
dXNpbmcgRE9NOjpFbGVtZW50SW1wbDsKK3VzaW5nIERPTTo6SFRNTE5hbWVzOwogdXNpbmcgRE9N
OjpIVE1MU2NyaXB0RWxlbWVudEltcGw7CiB1c2luZyBET006OkhUTUxUYWJsZVNlY3Rpb25FbGVt
ZW50SW1wbDsKIHVzaW5nIERPTTo6Tm9kZTsKQEAgLTMyMiwxOCArMzIzLDE4IEBAIHZvaWQgWE1M
VG9rZW5pemVyOjpzdGFydEVsZW1lbnQoY29uc3QgeG0KICAgICAvLyBGSVhNRTogVGhpcyBoYWNr
IGVuc3VyZXMgaW1wbGljaXQgdGFibGUgYm9kaWVzIGdldCBjb25zdHJ1Y3RlZCBpbiBYSFRNTCBh
bmQgWE1MIGZpbGVzLgogICAgIC8vIFdlIHdhbnQgdG8gY29uc29saWRhdGUgdGhpcyB3aXRoIHRo
ZSBIVE1MIHBhcnNlciBhbmQgSFRNTCBET00gY29kZSBhdCBzb21lIHBvaW50LgogICAgIC8vIEZv
ciBub3csIGl0J3MgdG9vIHJpc2t5IHRvIHJpcCB0aGF0IGNvZGUgdXAuCi0gICAgaWYgKG1fY3Vy
cmVudE5vZGUtPmlkKCkgPT0gSURfVEFCTEUgJiYKLSAgICAgICAgbmV3RWxlbWVudC0+aWQoKSA9
PSBJRF9UUiAmJgorICAgIGlmIChtX2N1cnJlbnROb2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
dGFibGUoKSkgJiYKKyAgICAgICAgbmV3RWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRy
KCkpICYmCiAgICAgICAgIG1fY3VycmVudE5vZGUtPmlzSFRNTEVsZW1lbnQoKSAmJiBuZXdFbGVt
ZW50LT5pc0hUTUxFbGVtZW50KCkpIHsKICAgICAgICAgTm9kZUltcGwqIGltcGxpY2l0VEJvZHkg
PQotICAgICAgICAgICBuZXcgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnRJbXBsKCBtX2RvYywgSURf
VEJPRFksIHRydWUgLyogaW1wbGljaXQgKi8gKTsKKyAgICAgICAgICAgbmV3IEhUTUxUYWJsZVNl
Y3Rpb25FbGVtZW50SW1wbChIVE1MTmFtZXM6OnRib2R5KCksIG1fZG9jLCB0cnVlIC8qIGltcGxp
Y2l0ICovKTsKICAgICAgICAgbV9jdXJyZW50Tm9kZS0+YWRkQ2hpbGQoaW1wbGljaXRUQm9keSk7
CiAgICAgICAgIGlmIChtX3ZpZXcgJiYgIWltcGxpY2l0VEJvZHktPmF0dGFjaGVkKCkpCiAgICAg
ICAgICAgICBpbXBsaWNpdFRCb2R5LT5hdHRhY2goKTsKICAgICAgICAgbV9jdXJyZW50Tm9kZSA9
IGltcGxpY2l0VEJvZHk7CiAgICAgfQogCi0gICAgaWYgKG5ld0VsZW1lbnQtPmlkKCkgPT0gSURf
U0NSSVBUKQorICAgIGlmIChuZXdFbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c2NyaXB0
KCkpKQogICAgICAgICBzdGF0aWNfY2FzdDxIVE1MU2NyaXB0RWxlbWVudEltcGwgKj4obmV3RWxl
bWVudCktPnNldENyZWF0ZWRCeVBhcnNlcih0cnVlKTsKIAogICAgIGlmIChtX2N1cnJlbnROb2Rl
LT5hZGRDaGlsZChuZXdFbGVtZW50KSkgewpAQCAtNjExLDMwICs2MTIsMzAgQEAgdm9pZCBYTUxU
b2tlbml6ZXI6Omluc2VydEVycm9yTWVzc2FnZUJsbwogICAgIERvY3VtZW50SW1wbCAqZG9jID0g
bV9kb2MtPmRvY3VtZW50KCk7CiAgICAgTm9kZUltcGwqIHJvb3QgPSBkb2MtPmRvY3VtZW50RWxl
bWVudCgpOwogICAgIGlmICghcm9vdCkgewotICAgICAgICByb290ID0gZG9jLT5jcmVhdGVFbGVt
ZW50TlMoWEhUTUxfTkFNRVNQQUNFLCAiaHRtbCIsIGV4Y2VwdGlvbmNvZGUpOwotICAgICAgICBO
b2RlSW1wbCogYm9keSA9IGRvYy0+Y3JlYXRlRWxlbWVudE5TKFhIVE1MX05BTUVTUEFDRSwgImJv
ZHkiLCBleGNlcHRpb25jb2RlKTsKKyAgICAgICAgcm9vdCA9IGRvYy0+Y3JlYXRlRWxlbWVudE5T
KEhUTUxOYW1lczo6eGh0bWxOYW1lc3BhY2VVUkkoKSwgImh0bWwiLCBleGNlcHRpb25jb2RlKTsK
KyAgICAgICAgTm9kZUltcGwqIGJvZHkgPSBkb2MtPmNyZWF0ZUVsZW1lbnROUyhIVE1MTmFtZXM6
OnhodG1sTmFtZXNwYWNlVVJJKCksICJib2R5IiwgZXhjZXB0aW9uY29kZSk7CiAgICAgICAgIHJv
b3QtPmFwcGVuZENoaWxkKGJvZHksIGV4Y2VwdGlvbmNvZGUpOwogICAgICAgICBkb2MtPmFwcGVu
ZENoaWxkKHJvb3QsIGV4Y2VwdGlvbmNvZGUpOwogICAgICAgICByb290ID0gYm9keTsKICAgICB9
CiAKLSAgICBFbGVtZW50SW1wbCogcmVwb3J0RWxlbWVudCA9IGRvYy0+Y3JlYXRlRWxlbWVudE5T
KFhIVE1MX05BTUVTUEFDRSwgInBhcnNlcmVycm9yIiwgZXhjZXB0aW9uY29kZSk7CisgICAgRWxl
bWVudEltcGwqIHJlcG9ydEVsZW1lbnQgPSBkb2MtPmNyZWF0ZUVsZW1lbnROUyhIVE1MTmFtZXM6
OnhodG1sTmFtZXNwYWNlVVJJKCksICJwYXJzZXJlcnJvciIsIGV4Y2VwdGlvbmNvZGUpOwogICAg
IHJlcG9ydEVsZW1lbnQtPnNldEF0dHJpYnV0ZShBVFRSX1NUWUxFLCAid2hpdGUtc3BhY2U6IHBy
ZTsgYm9yZGVyOiAycHggc29saWQgI2M3NzsgcGFkZGluZzogMCAxZW0gMCAxZW07IG1hcmdpbjog
MWVtOyBiYWNrZ3JvdW5kLWNvbG9yOiAjZmRkOyBjb2xvcjogYmxhY2siKTsKLSAgICBFbGVtZW50
SW1wbCogaDMgPSBkb2MtPmNyZWF0ZUVsZW1lbnROUyhYSFRNTF9OQU1FU1BBQ0UsICJoMyIsIGV4
Y2VwdGlvbmNvZGUpOworICAgIEVsZW1lbnRJbXBsKiBoMyA9IGRvYy0+Y3JlYXRlRWxlbWVudE5T
KEhUTUxOYW1lczo6eGh0bWxOYW1lc3BhY2VVUkkoKSwgImgzIiwgZXhjZXB0aW9uY29kZSk7CiAg
ICAgaDMtPmFwcGVuZENoaWxkKGRvYy0+Y3JlYXRlVGV4dE5vZGUoIlRoaXMgcGFnZSBjb250YWlu
cyB0aGUgZm9sbG93aW5nIGVycm9yczoiKSwgZXhjZXB0aW9uY29kZSk7CiAgICAgcmVwb3J0RWxl
bWVudC0+YXBwZW5kQ2hpbGQoaDMsIGV4Y2VwdGlvbmNvZGUpOwotICAgIEVsZW1lbnRJbXBsKiBm
aXhlZCA9IGRvYy0+Y3JlYXRlRWxlbWVudE5TKFhIVE1MX05BTUVTUEFDRSwgImRpdiIsIGV4Y2Vw
dGlvbmNvZGUpOworICAgIEVsZW1lbnRJbXBsKiBmaXhlZCA9IGRvYy0+Y3JlYXRlRWxlbWVudE5T
KEhUTUxOYW1lczo6eGh0bWxOYW1lc3BhY2VVUkkoKSwgImRpdiIsIGV4Y2VwdGlvbmNvZGUpOwog
ICAgIGZpeGVkLT5zZXRBdHRyaWJ1dGUoQVRUUl9TVFlMRSwgImZvbnQtZmFtaWx5Om1vbm9zcGFj
ZTtmb250LXNpemU6MTJweCIpOwogICAgIE5vZGVJbXBsKiB0ZXh0Tm9kZSA9IGRvYy0+Y3JlYXRl
VGV4dE5vZGUobV9lcnJvck1lc3NhZ2VzKTsKICAgICBmaXhlZC0+YXBwZW5kQ2hpbGQodGV4dE5v
ZGUsIGV4Y2VwdGlvbmNvZGUpOwogICAgIHJlcG9ydEVsZW1lbnQtPmFwcGVuZENoaWxkKGZpeGVk
LCBleGNlcHRpb25jb2RlKTsKLSAgICBoMyA9IGRvYy0+Y3JlYXRlRWxlbWVudE5TKFhIVE1MX05B
TUVTUEFDRSwgImgzIiwgZXhjZXB0aW9uY29kZSk7CisgICAgaDMgPSBkb2MtPmNyZWF0ZUVsZW1l
bnROUyhIVE1MTmFtZXM6OnhodG1sTmFtZXNwYWNlVVJJKCksICJoMyIsIGV4Y2VwdGlvbmNvZGUp
OwogICAgIHJlcG9ydEVsZW1lbnQtPmFwcGVuZENoaWxkKGgzLCBleGNlcHRpb25jb2RlKTsKICAg
ICAKICAgICBoMy0+YXBwZW5kQ2hpbGQoZG9jLT5jcmVhdGVUZXh0Tm9kZSgiQmVsb3cgaXMgYSBy
ZW5kZXJpbmcgb2YgdGhlIHBhZ2UgdXAgdG8gdGhlIGZpcnN0IGVycm9yLiIpLCBleGNlcHRpb25j
b2RlKTsKICNpZmRlZiBLSFRNTF9YU0xUCiAgICAgaWYgKGRvYy0+dHJhbnNmb3JtU291cmNlRG9j
dW1lbnQoKSkgewotICAgICAgICBFbGVtZW50SW1wbCogcGFyID0gZG9jLT5jcmVhdGVFbGVtZW50
TlMoWEhUTUxfTkFNRVNQQUNFLCAicCIsIGV4Y2VwdGlvbmNvZGUpOworICAgICAgICBFbGVtZW50
SW1wbCogcGFyID0gZG9jLT5jcmVhdGVFbGVtZW50TlMoSFRNTE5hbWVzOjp4aHRtbE5hbWVzcGFj
ZVVSSSgpLCAicCIsIGV4Y2VwdGlvbmNvZGUpOwogICAgICAgICByZXBvcnRFbGVtZW50LT5hcHBl
bmRDaGlsZChwYXIsIGV4Y2VwdGlvbmNvZGUpOwogICAgICAgICBwYXItPnNldEF0dHJpYnV0ZShB
VFRSX1NUWUxFLCAid2hpdGUtc3BhY2U6IG5vcm1hbCIpOwogICAgICAgICBwYXItPmFwcGVuZENo
aWxkKGRvYy0+Y3JlYXRlVGV4dE5vZGUoIlRoaXMgZG9jdW1lbnQgd2FzIGNyZWF0ZWQgYXMgdGhl
IHJlc3VsdCBvZiBhbiBYU0wgdHJhbnNmb3JtYXRpb24uIFRoZSBsaW5lIGFuZCBjb2x1bW4gbnVt
YmVycyBnaXZlbiBhcmUgZnJvbSB0aGUgdHJhbnNmb3JtZWQgcmVzdWx0LiIpLCBleGNlcHRpb25j
b2RlKTsKQEAgLTY1MCw3ICs2NTEsNyBAQCB2b2lkIFhNTFRva2VuaXplcjo6YWRkU2NyaXB0cyhO
b2RlSW1wbCAqCiAgICAgLy8gUmVjdXJzaXZlbHkgZ28gdGhyb3VnaCB0aGUgZW50aXJlIGRvY3Vt
ZW50IHRyZWUsIGxvb2tpbmcgZm9yIGh0bWwgPHNjcmlwdD4gdGFncy4gRm9yIGVhY2ggb2YgdGhl
c2UKICAgICAvLyB0aGF0IGlzIGZvdW5kLCBhZGQgaXQgdG8gdGhlIG1fc2NyaXB0cyBsaXN0IGZy
b20gd2hpY2ggdGhleSB3aWxsIGJlIGV4ZWN1dGVkCiAKLSAgICBpZiAobi0+aWQoKSA9PSBJRF9T
Q1JJUFQpIHsKKyAgICBpZiAobi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnNjcmlwdCgpKSkgewog
ICAgICAgICBtX3NjcmlwdHMuYXBwZW5kKHN0YXRpY19jYXN0PEhUTUxTY3JpcHRFbGVtZW50SW1w
bCo+KG4pKTsKICAgICB9CiAKSW5kZXg6IGt3cS9ET00ubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog
L2N2cy9yb290L1dlYkNvcmUva3dxL0RPTS5tbSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zNgpk
aWZmIC11IC1wIC1yMS4zNiBrd3EvRE9NLm1tCi0tLSBrd3EvRE9NLm1tCTE5IE1heSAyMDA1IDE4
OjMyOjI3IC0wMDAwCTEuMzYKKysrIGt3cS9ET00ubW0JOSBKdWwgMjAwNSAwMjo0Mzo0MyAtMDAw
MApAQCAtNDQsNyArNDQsNiBAQAogI2ltcG9ydCAiZG9tX3RleHRpbXBsLmgiCiAjaW1wb3J0ICJk
b21feG1saW1wbC5oIgogI2ltcG9ydCAiaHRtbF9lbGVtZW50aW1wbC5oIgotI2ltcG9ydCAiaHRt
bHRhZ3MuaCIKIAogI2ltcG9ydCAia2h0bWxfcGFydC5oIgogCkBAIC03Miw2ICs3MSw3IEBAIHVz
aW5nIERPTTo6RWxlbWVudEltcGw7CiB1c2luZyBET006OkVudGl0eUltcGw7CiB1c2luZyBET006
OkZpbHRlck5vZGU7CiB1c2luZyBET006OkhUTUxFbGVtZW50SW1wbDsKK3VzaW5nIERPTTo6SFRN
TE5hbWVzOwogdXNpbmcgRE9NOjpOYW1lZE5vZGVNYXBJbXBsOwogdXNpbmcgRE9NOjpOb2RlOwog
dXNpbmcgRE9NOjpOb2RlRmlsdGVyOwpAQCAtMzM4LDcgKzMzOCw4IEBAIHVzaW5nIGtodG1sOjpT
aGFyZWRQdHI7CiAgICAgQVNTRVJUKHByZWZpeCk7CiAKICAgICBpbnQgZXhjZXB0aW9uQ29kZSA9
IDA7Ci0gICAgW3NlbGYgX25vZGVJbXBsXS0+c2V0UHJlZml4KHByZWZpeCwgZXhjZXB0aW9uQ29k
ZSk7CisgICAgRE9NU3RyaW5nIHByZWZpeFN0cihwcmVmaXgpOworICAgIFtzZWxmIF9ub2RlSW1w
bF0tPnNldFByZWZpeChwcmVmaXhTdHIuaW1wbGVtZW50YXRpb24oKSwgZXhjZXB0aW9uQ29kZSk7
CiAgICAgcmFpc2VPbkRPTUVycm9yKGV4Y2VwdGlvbkNvZGUpOwogfQogCkBAIC0zOTksMTU0ICs0
MDAsMTIzIEBAIHVzaW5nIGtodG1sOjpTaGFyZWRQdHI7CiAgICAgc3dpdGNoIChpbXBsLT5ub2Rl
VHlwZSgpKSB7CiAgICAgICAgIGNhc2UgTm9kZTo6RUxFTUVOVF9OT0RFOgogICAgICAgICAgICAg
aWYgKGltcGwtPmlzSFRNTEVsZW1lbnQoKSkgewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBU
aGVyZSBhcmUgbm8gaWRlbnRpZmllcnMgZm9yIEhUTUxIZWFkaW5nRWxlbWVudCwgSFRNTE1vZEVs
ZW1lbnQsIAotICAgICAgICAgICAgICAgIC8vIEhUTUxUYWJsZUNhcHRpb25FbGVtZW50LCBIVE1M
VGFibGVDb2xFbGVtZW50LCBIVE1MVGFibGVTZWN0aW9uRWxlbWVudC4KLSAgICAgICAgICAgICAg
ICAvLyBGaW5kIG90aGVyIHdheXMgdG8gaWRlbnRpZnkgdGhlbS4KLSAgICAgICAgICAgICAgICBz
d2l0Y2ggKGltcGwtPmlkZW50aWZpZXIoKSkgewotICAgICAgICAgICAgICAgICAgICBjYXNlIElE
X0hUTUw6Ci0gICAgICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTEh0
bWxFbGVtZW50IGNsYXNzXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgICAgICBjYXNlIElEX0hFQUQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICB3cmFw
cGVyQ2xhc3MgPSBbRE9NSFRNTEhlYWRFbGVtZW50IGNsYXNzXTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0xJTks6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTExpbmtFbGVtZW50IGNsYXNz
XTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBj
YXNlIElEX1RJVExFOgotICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RP
TUhUTUxUaXRsZUVsZW1lbnQgY2xhc3NdOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfTUVUQToKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MTWV0YUVsZW1lbnQgY2xhc3NdOwotICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfQkFTRToK
LSAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MQmFzZUVsZW1l
bnQgY2xhc3NdOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgICAgIGNhc2UgSURfSVNJTkRFWDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJD
bGFzcyA9IFtET01IVE1MSXNJbmRleEVsZW1lbnQgY2xhc3NdOwotICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfU1RZTEU6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTFN0eWxlRWxlbWVudCBjbGFz
c107Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAg
Y2FzZSBJRF9CT0RZOgotICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RP
TUhUTUxCb2R5RWxlbWVudCBjbGFzc107Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9GT1JNOgotICAgICAgICAgICAgICAgICAgICAg
ICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxGb3JtRWxlbWVudCBjbGFzc107Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9TRUxFQ1Q6
Ci0gICAgICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTFNlbGVjdEVs
ZW1lbnQgY2xhc3NdOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgICAgIGNhc2UgSURfT1BUR1JPVVA6Ci0gICAgICAgICAgICAgICAgICAgICAgICB3cmFw
cGVyQ2xhc3MgPSBbRE9NSFRNTE9wdEdyb3VwRWxlbWVudCBjbGFzc107Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9PUFRJT046Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTE9wdGlvbkVsZW1l
bnQgY2xhc3NdOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgICAgIGNhc2UgSURfSU5QVVQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xh
c3MgPSBbRE9NSFRNTElucHV0RWxlbWVudCBjbGFzc107Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9URVhUQVJFQToKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MVGV4dEFyZWFFbGVtZW50IGNs
YXNzXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
ICBjYXNlIElEX0JVVFRPTjoKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9
IFtET01IVE1MQnV0dG9uRWxlbWVudCBjbGFzc107Ci0gICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9MQUJFTDoKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MTGFiZWxFbGVtZW50IGNsYXNzXTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAgCi0gICAgICAgICAgICAgICAgICAgIGNhc2Ug
SURfRklFTERTRVQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9N
SFRNTEZpZWxkU2V0RWxlbWVudCBjbGFzc107Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsgICAgICAKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9MRUdFTkQ6Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTExlZ2VuZEVsZW1lbnQgY2xhc3Nd
OwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNh
c2UgSURfVUw6Ci0gICAgICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRN
TFVMaXN0RWxlbWVudCBjbGFzc107Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICAgICAgY2FzZSBJRF9PTDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHdy
YXBwZXJDbGFzcyA9IFtET01IVE1MT0xpc3RFbGVtZW50IGNsYXNzXTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0RMOgotICAgICAg
ICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxETGlzdEVsZW1lbnQgY2xh
c3NdOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAg
IGNhc2UgSURfRElSOgotICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RP
TUhUTUxEaXJlY3RvcnlFbGVtZW50IGNsYXNzXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX01FTlU6Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTE1lbnVFbGVtZW50IGNsYXNzXTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0xJ
OgotICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxMSUVsZW1l
bnQgY2xhc3NdOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgICAgIGNhc2UgSURfRElWOgotICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNz
ID0gW0RPTUhUTUxEaXZFbGVtZW50IGNsYXNzXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX1A6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTFBhcmFncmFwaEVsZW1lbnQgY2xhc3NdOwotICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURf
UToKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MUXVvdGVF
bGVtZW50IGNsYXNzXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgICAgICBjYXNlIElEX1BSRToKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJD
bGFzcyA9IFtET01IVE1MUHJlRWxlbWVudCBjbGFzc107Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9CUjoKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MQlJFbGVtZW50IGNsYXNzXTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX0JB
U0VGT05UOgotICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxG
b250RWxlbWVudCBjbGFzc107Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICAgICAgY2FzZSBJRF9GT05UOgotICAgICAgICAgICAgICAgICAgICAgICAgd3Jh
cHBlckNsYXNzID0gW0RPTUhUTUxGb250RWxlbWVudCBjbGFzc107Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9IUjoKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MSFJFbGVtZW50IGNsYXNzXTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNl
IElEX0E6Ci0gICAgICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTEFu
Y2hvckVsZW1lbnQgY2xhc3NdOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgICAgIGNhc2UgSURfSU1HOgotICAgICAgICAgICAgICAgICAgICAgICAgd3Jh
cHBlckNsYXNzID0gW0RPTUhUTUxJbWFnZUVsZW1lbnQgY2xhc3NdOwotICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfT0JKRUNUOgotICAg
ICAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxPYmplY3RFbGVtZW50
IGNsYXNzXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
ICAgICBjYXNlIElEX1BBUkFNOgotICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNz
ID0gW0RPTUhUTUxQYXJhbUVsZW1lbnQgY2xhc3NdOwotICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfQVBQTEVUOgotICAgICAgICAgICAg
ICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxBcHBsZXRFbGVtZW50IGNsYXNzXTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNl
IElEX01BUDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1M
TWFwRWxlbWVudCBjbGFzc107Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICAgICAgY2FzZSBJRF9BUkVBOgotICAgICAgICAgICAgICAgICAgICAgICAgd3Jh
cHBlckNsYXNzID0gW0RPTUhUTUxBcmVhRWxlbWVudCBjbGFzc107Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9TQ1JJUFQ6Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTFNjcmlwdEVsZW1lbnQg
Y2xhc3NdOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ICAgIGNhc2UgSURfVEFCTEU6Ci0gICAgICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3Mg
PSBbRE9NSFRNTFRhYmxlRWxlbWVudCBjbGFzc107Ci0gICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9URDoKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MVGFibGVDZWxsRWxlbWVudCBjbGFzc107Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJ
RF9UUjoKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MVGFi
bGVSb3dFbGVtZW50IGNsYXNzXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICBjYXNlIElEX0ZSQU1FU0VUOgotICAgICAgICAgICAgICAgICAgICAg
ICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxGcmFtZVNldEVsZW1lbnQgY2xhc3NdOwotICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfRlJB
TUU6Ci0gICAgICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTEZyYW1l
RWxlbWVudCBjbGFzc107Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICAgICAgY2FzZSBJRF9JRlJBTUU6Ci0gICAgICAgICAgICAgICAgICAgICAgICB3cmFw
cGVyQ2xhc3MgPSBbRE9NSFRNTElGcmFtZUVsZW1lbnQgY2xhc3NdOwotICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTEVsZW1lbnQgY2xhc3NdOwotICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogUmVmbGVjdCBtYXJxdWVl
IG9uY2UgdGhlIEFQSSBoYXMgYmVlbiBkZXRlcm1pbmVkLgorICAgICAgICAgICAgICAgIC8vIEZJ
WE1FOiBXZSBjb3VsZCBtYWtlIHRoZSBIVE1MIGNsYXNzZXMgaGFuZCBiYWNrIHRoZWlyIGNsYXNz
IG5hbWVzIGFuZCB0aGVuIHVzZSB0aGF0IHRvIG1ha2UKKyAgICAgICAgICAgICAgICAvLyB0aGUg
YXBwcm9wcmlhdGUgT2JqLUMgY2xhc3MgZnJvbSB0aGUgc3RyaW5nLgorICAgICAgICAgICAgICAg
IEhUTUxFbGVtZW50SW1wbCogaHRtbEVsdCA9IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCo+
KGltcGwpOworICAgICAgICAgICAgICAgIGlmIChodG1sRWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5h
bWVzOjpodG1sKCkpKQorICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRN
TEh0bWxFbGVtZW50IGNsYXNzXTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChodG1sRWx0LT5o
YXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpoZWFkKCkpKQorICAgICAgICAgICAgICAgICAgICB3cmFw
cGVyQ2xhc3MgPSBbRE9NSFRNTEhlYWRFbGVtZW50IGNsYXNzXTsKKyAgICAgICAgICAgICAgICBl
bHNlIGlmIChodG1sRWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpsaW5rKCkpKQorICAgICAg
ICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTExpbmtFbGVtZW50IGNsYXNzXTsK
KyAgICAgICAgICAgICAgICBlbHNlIGlmIChodG1sRWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVz
Ojp0aXRsZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxU
aXRsZUVsZW1lbnQgY2xhc3NdOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGh0bWxFbHQtPmhh
c0xvY2FsTmFtZShIVE1MTmFtZXM6Om1ldGEoKSkpCisgICAgICAgICAgICAgICAgICAgIHdyYXBw
ZXJDbGFzcyA9IFtET01IVE1MTWV0YUVsZW1lbnQgY2xhc3NdOworICAgICAgICAgICAgICAgIGVs
c2UgaWYgKGh0bWxFbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmJhc2UoKSkpCisgICAgICAg
ICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MQmFzZUVsZW1lbnQgY2xhc3NdOwor
ICAgICAgICAgICAgICAgIGVsc2UgaWYgKGh0bWxFbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6
OmlzaW5kZXgoKSkpCisgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1M
SXNJbmRleEVsZW1lbnQgY2xhc3NdOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGh0bWxFbHQt
Pmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnN0eWxlKCkpKQorICAgICAgICAgICAgICAgICAgICB3
cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTFN0eWxlRWxlbWVudCBjbGFzc107CisgICAgICAgICAgICAg
ICAgZWxzZSBpZiAoaHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6Ym9keSgpKSkKKyAg
ICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxCb2R5RWxlbWVudCBjbGFz
c107CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxO
YW1lczo6Zm9ybSgpKSkKKyAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhU
TUxGb3JtRWxlbWVudCBjbGFzc107CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaHRtbEVsdC0+
aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6c2VsZWN0KCkpKQorICAgICAgICAgICAgICAgICAgICB3
cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTFNlbGVjdEVsZW1lbnQgY2xhc3NdOworICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKGh0bWxFbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9wdGdyb3VwKCkp
KQorICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTE9wdEdyb3VwRWxl
bWVudCBjbGFzc107CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaHRtbEVsdC0+aGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6b3B0aW9uKCkpKQorICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xh
c3MgPSBbRE9NSFRNTE9wdGlvbkVsZW1lbnQgY2xhc3NdOworICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKGh0bWxFbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmlucHV0KCkpKQorICAgICAgICAg
ICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTElucHV0RWxlbWVudCBjbGFzc107Cisg
ICAgICAgICAgICAgICAgZWxzZSBpZiAoaHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6
dGV4dGFyZWEoKSkpCisgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1M
VGV4dEFyZWFFbGVtZW50IGNsYXNzXTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChodG1sRWx0
LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpidXR0b24oKSkpCisgICAgICAgICAgICAgICAgICAg
IHdyYXBwZXJDbGFzcyA9IFtET01IVE1MQnV0dG9uRWxlbWVudCBjbGFzc107CisgICAgICAgICAg
ICAgICAgZWxzZSBpZiAoaHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6bGFiZWwoKSkp
CisgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MTGFiZWxFbGVtZW50
IGNsYXNzXTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChodG1sRWx0LT5oYXNMb2NhbE5hbWUo
SFRNTE5hbWVzOjpmaWVsZHNldCgpKSkKKyAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNz
ID0gW0RPTUhUTUxGaWVsZFNldEVsZW1lbnQgY2xhc3NdOworICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKGh0bWxFbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmxlZ2VuZCgpKSkKKyAgICAgICAg
ICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxMZWdlbmRFbGVtZW50IGNsYXNzXTsK
KyAgICAgICAgICAgICAgICBlbHNlIGlmIChodG1sRWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVz
Ojp1bCgpKSkKKyAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxVTGlz
dEVsZW1lbnQgY2xhc3NdOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGh0bWxFbHQtPmhhc0xv
Y2FsTmFtZShIVE1MTmFtZXM6Om9sKCkpKSAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MT0xpc3RFbGVtZW50IGNsYXNzXTsK
KyAgICAgICAgICAgICAgICBlbHNlIGlmIChodG1sRWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVz
OjpkbCgpKSkKKyAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxETGlz
dEVsZW1lbnQgY2xhc3NdOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGh0bWxFbHQtPmhhc0xv
Y2FsTmFtZShIVE1MTmFtZXM6OmRpcigpKSkKKyAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNs
YXNzID0gW0RPTUhUTUxEaXJlY3RvcnlFbGVtZW50IGNsYXNzXTsKKyAgICAgICAgICAgICAgICBl
bHNlIGlmIChodG1sRWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjptZW51KCkpKQorICAgICAg
ICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTE1lbnVFbGVtZW50IGNsYXNzXTsK
KyAgICAgICAgICAgICAgICBlbHNlIGlmIChodG1sRWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVz
OjpsaSgpKSkKKyAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxMSUVs
ZW1lbnQgY2xhc3NdOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGh0bWxFbHQtPmhhc0xvY2Fs
TmFtZShIVE1MTmFtZXM6OmRpdigpKSkKKyAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNz
ID0gW0RPTUhUTUxEaXZFbGVtZW50IGNsYXNzXTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmICho
dG1sRWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpwKCkpKQorICAgICAgICAgICAgICAgICAg
ICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTFBhcmFncmFwaEVsZW1lbnQgY2xhc3NdOworICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKGh0bWxFbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmgxKCkp
IHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxO
YW1lczo6aDIoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICBodG1sRWx0LT5oYXNMb2Nh
bE5hbWUoSFRNTE5hbWVzOjpoMygpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWxF
bHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Omg0KCkpIHx8CisgICAgICAgICAgICAgICAgICAg
ICAgICAgaHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6aDUoKSkgfHwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICBodG1sRWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpoNigpKSkK
KyAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxIZWFkaW5nRWxlbWVu
dCBjbGFzc107CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaHRtbEVsdC0+aGFzTG9jYWxOYW1l
KEhUTUxOYW1lczo6cSgpKSkKKyAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RP
TUhUTUxRdW90ZUVsZW1lbnQgY2xhc3NdOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGh0bWxF
bHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnByZSgpKSkKKyAgICAgICAgICAgICAgICAgICAg
d3JhcHBlckNsYXNzID0gW0RPTUhUTUxQcmVFbGVtZW50IGNsYXNzXTsKKyAgICAgICAgICAgICAg
ICBlbHNlIGlmIChodG1sRWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpicigpKSkKKyAgICAg
ICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxCUkVsZW1lbnQgY2xhc3NdOwor
ICAgICAgICAgICAgICAgIGVsc2UgaWYgKGh0bWxFbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6
OmJhc2Vmb250KCkpKQorICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRN
TEJhc2VGb250RWxlbWVudCBjbGFzc107CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaHRtbEVs
dC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6Zm9udCgpKSkKKyAgICAgICAgICAgICAgICAgICAg
d3JhcHBlckNsYXNzID0gW0RPTUhUTUxGb250RWxlbWVudCBjbGFzc107CisgICAgICAgICAgICAg
ICAgZWxzZSBpZiAoaHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6aHIoKSkpCisgICAg
ICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MSFJFbGVtZW50IGNsYXNzXTsK
KyAgICAgICAgICAgICAgICBlbHNlIGlmIChodG1sRWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVz
OjphKCkpKQorICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTEFuY2hv
ckVsZW1lbnQgY2xhc3NdOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGh0bWxFbHQtPmhhc0xv
Y2FsTmFtZShIVE1MTmFtZXM6OmltZygpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgIGh0
bWxFbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmNhbnZhcygpKSkKKyAgICAgICAgICAgICAg
ICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxJbWFnZUVsZW1lbnQgY2xhc3NdOworICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKGh0bWxFbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6Om9iamVj
dCgpKSkKKyAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxPYmplY3RF
bGVtZW50IGNsYXNzXTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChodG1sRWx0LT5oYXNMb2Nh
bE5hbWUoSFRNTE5hbWVzOjpwYXJhbSgpKSkKKyAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNs
YXNzID0gW0RPTUhUTUxQYXJhbUVsZW1lbnQgY2xhc3NdOworICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKGh0bWxFbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OmFwcGxldCgpKSkKKyAgICAgICAg
ICAgICAgICAgICAgd3JhcHBlckNsYXNzID0gW0RPTUhUTUxBcHBsZXRFbGVtZW50IGNsYXNzXTsK
KyAgICAgICAgICAgICAgICBlbHNlIGlmIChodG1sRWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVz
OjptYXAoKSkpCisgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MTWFw
RWxlbWVudCBjbGFzc107CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaHRtbEVsdC0+aGFzTG9j
YWxOYW1lKEhUTUxOYW1lczo6YXJlYSgpKSkKKyAgICAgICAgICAgICAgICAgICAgd3JhcHBlckNs
YXNzID0gW0RPTUhUTUxBcmVhRWxlbWVudCBjbGFzc107CisgICAgICAgICAgICAgICAgZWxzZSBp
ZiAoaHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6c2NyaXB0KCkpKQorICAgICAgICAg
ICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTFNjcmlwdEVsZW1lbnQgY2xhc3NdOwor
ICAgICAgICAgICAgICAgIGVsc2UgaWYgKGh0bWxFbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6
OnRhYmxlKCkpKQorICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTFRh
YmxlRWxlbWVudCBjbGFzc107CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaHRtbEVsdC0+aGFz
TG9jYWxOYW1lKEhUTUxOYW1lczo6dGhlYWQoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICBodG1sRWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjp0Ym9keSgpKSB8fAorICAgICAgICAg
ICAgICAgICAgICAgICAgIGh0bWxFbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnRmb290KCkp
KQorICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTFRhYmxlU2VjdGlv
bkVsZW1lbnQgY2xhc3NdOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGh0bWxFbHQtPmhhc0xv
Y2FsTmFtZShIVE1MTmFtZXM6OnRkKCkpKQorICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xh
c3MgPSBbRE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQgY2xhc3NdOworICAgICAgICAgICAgICAgIGVs
c2UgaWYgKGh0bWxFbHQtPmhhc0xvY2FsTmFtZShIVE1MTmFtZXM6OnRyKCkpKQorICAgICAgICAg
ICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTFRhYmxlUm93RWxlbWVudCBjbGFzc107
CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1l
czo6Y29sKCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbEVsdC0+aGFzTG9jYWxO
YW1lKEhUTUxOYW1lczo6Y29sZ3JvdXAoKSkpCisgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJD
bGFzcyA9IFtET01IVE1MVGFibGVDb2xFbGVtZW50IGNsYXNzXTsKKyAgICAgICAgICAgICAgICBl
bHNlIGlmIChodG1sRWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjpjYXB0aW9uKCkpKQorICAg
ICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTFRhYmxlQ2FwdGlvbkVsZW1l
bnQgY2xhc3NdOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGh0bWxFbHQtPmhhc0xvY2FsTmFt
ZShIVE1MTmFtZXM6OmZyYW1lc2V0KCkpKQorICAgICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xh
c3MgPSBbRE9NSFRNTEZyYW1lU2V0RWxlbWVudCBjbGFzc107CisgICAgICAgICAgICAgICAgZWxz
ZSBpZiAoaHRtbEVsdC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6ZnJhbWUoKSkpCisgICAgICAg
ICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1MRnJhbWVFbGVtZW50IGNsYXNzXTsK
KyAgICAgICAgICAgICAgICBlbHNlIGlmIChodG1sRWx0LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVz
OjppZnJhbWUoKSkpCisgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01IVE1M
SUZyYW1lRWxlbWVudCBjbGFzc107CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NSFRNTEVsZW1lbnQgY2xhc3NdOwogICAgICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NRWxlbWVudCBj
bGFzc107CiAgICAgICAgICAgICB9CkBAIC0xMjY4LDcgKzEyMzgsNyBAQCB1c2luZyBraHRtbDo6
U2hhcmVkUHRyOwogCiAtIChOU1N0cmluZyAqKXRhZ05hbWUKIHsKLSAgICByZXR1cm4gW3NlbGYg
X2VsZW1lbnRJbXBsXS0+dGFnTmFtZSgpOworICAgIHJldHVybiBbc2VsZiBfZWxlbWVudEltcGxd
LT5ub2RlTmFtZSgpOwogfQogCiAtIChET01OYW1lZE5vZGVNYXAgKilhdHRyaWJ1dGVzCkluZGV4
OiBrd3EvRE9NSFRNTC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9r
d3EvRE9NSFRNTC5tbSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xOApkaWZmIC11IC1wIC1yMS4x
OCBrd3EvRE9NSFRNTC5tbQotLS0ga3dxL0RPTUhUTUwubW0JMTMgTWF5IDIwMDUgMTY6NDg6NTEg
LTAwMDAJMS4xOAorKysga3dxL0RPTUhUTUwubW0JOSBKdWwgMjAwNSAwMjo0Mzo0NSAtMDAwMApA
QCAtNzQsNyArNzQsNiBAQCB1c2luZyBET006OkhUTUxGb3JtQ29sbGVjdGlvbkltcGw7CiB1c2lu
ZyBET006OkhUTUxGb3JtRWxlbWVudEltcGw7CiB1c2luZyBET006OkhUTUxGcmFtZUVsZW1lbnRJ
bXBsOwogdXNpbmcgRE9NOjpIVE1MRnJhbWVTZXRFbGVtZW50SW1wbDsKLXVzaW5nIERPTTo6SFRN
TEdlbmVyaWNFbGVtZW50SW1wbDsKIHVzaW5nIERPTTo6SFRNTEdlbmVyaWNGb3JtRWxlbWVudElt
cGw7CiB1c2luZyBET006OkhUTUxIZWFkRWxlbWVudEltcGw7CiB1c2luZyBET006OkhUTUxIZWFk
aW5nRWxlbWVudEltcGw7CkBAIC0xOTA1LDkgKzE5MDQsOSBAQCB1c2luZyBET006Ok5vZGVJbXBs
OwogCiBAaW1wbGVtZW50YXRpb24gRE9NSFRNTFF1b3RlRWxlbWVudAogCi0tIChIVE1MR2VuZXJp
Y0VsZW1lbnRJbXBsICopX3F1b3RlRWxlbWVudEltcGwKKy0gKEhUTUxFbGVtZW50SW1wbCAqKV9x
dW90ZUVsZW1lbnRJbXBsCiB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxHZW5lcmljRWxl
bWVudEltcGwgKj4oRE9NX2Nhc3Q8Tm9kZUltcGwgKj4oX2ludGVybmFsKSk7CisgICAgcmV0dXJu
IHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCAqPihET01fY2FzdDxOb2RlSW1wbCAqPihfaW50
ZXJuYWwpKTsKIH0KIAogLSAoTlNTdHJpbmcgKiljaXRlCkluZGV4OiBrd3EvS1dRQWNjT2JqZWN0
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9LV1FBY2NPYmpl
Y3QubW0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNjgKZGlmZiAtdSAtcCAtcjEuNjgga3dxL0tX
UUFjY09iamVjdC5tbQotLS0ga3dxL0tXUUFjY09iamVjdC5tbQk1IEp1biAyMDA1IDA3OjA2OjUy
IC0wMDAwCTEuNjgKKysrIGt3cS9LV1FBY2NPYmplY3QubW0JOSBKdWwgMjAwNSAwMjo0Mzo0NyAt
MDAwMApAQCAtNDgsNyArNDgsNiBAQAogI2ltcG9ydCAiZG9tMl9ldmVudHNpbXBsLmgiCiAjaW1w
b3J0ICJkb20yX3JhbmdlLmgiCiAjaW1wb3J0ICJodG1sYXR0cnMuaCIKLSNpbXBvcnQgImh0bWx0
YWdzLmgiCiAjaW1wb3J0ICJraHRtbHZpZXcuaCIKICNpbXBvcnQgImtodG1sX3BhcnQuaCIKICNp
bXBvcnQgInJlbmRlcl9jYW52YXMuaCIKQEAgLTc3LDYgKzc2LDcgQEAgdXNpbmcgRE9NOjpIVE1M
Q29sbGVjdGlvbkltcGw7CiB1c2luZyBET006OkhUTUxFbGVtZW50SW1wbDsKIHVzaW5nIERPTTo6
SFRNTElucHV0RWxlbWVudEltcGw7CiB1c2luZyBET006OkhUTUxNYXBFbGVtZW50SW1wbDsKK3Vz
aW5nIERPTTo6SFRNTE5hbWVzOwogdXNpbmcgRE9NOjpOb2RlOwogdXNpbmcgRE9NOjpOb2RlSW1w
bDsKIHVzaW5nIERPTTo6UG9zaXRpb247CkBAIC0zNjYsNyArMzY2LDcgQEAgdXNpbmcga2h0bWw6
OlZpc2libGVQb3NpdGlvbjsKICAgICB9CiAgICAgaWYgKG1fcmVuZGVyZXItPmlzTGlzdE1hcmtl
cigpKQogICAgICAgICByZXR1cm4gQCJBWExpc3RNYXJrZXIiOwotICAgIGlmIChtX3JlbmRlcmVy
LT5lbGVtZW50KCkgJiYgbV9yZW5kZXJlci0+ZWxlbWVudCgpLT5pZGVudGlmaWVyKCkgPT0gSURf
QlVUVE9OKQorICAgIGlmIChtX3JlbmRlcmVyLT5lbGVtZW50KCkgJiYgbV9yZW5kZXJlci0+ZWxl
bWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YnV0dG9uKCkpKQogICAgICAgICByZXR1cm4g
TlNBY2Nlc3NpYmlsaXR5QnV0dG9uUm9sZTsKICAgICBpZiAobV9yZW5kZXJlci0+aXNUZXh0KCkp
CiAgICAgICAgIHJldHVybiBOU0FjY2Vzc2liaWxpdHlTdGF0aWNUZXh0Um9sZTsKQEAgLTUzMiw3
ICs1MzIsNyBAQCB1c2luZyBraHRtbDo6VmlzaWJsZVBvc2l0aW9uOwogICAgIGlmICghbV9yZW5k
ZXJlciB8fCBtX2FyZWFFbGVtZW50IHx8ICFtX3JlbmRlcmVyLT5lbGVtZW50KCkpCiAgICAgICAg
IHJldHVybiBuaWw7CiAgICAgCi0gICAgaWYgKG1fcmVuZGVyZXItPmVsZW1lbnQoKS0+aXNIVE1M
RWxlbWVudCgpICYmIG1fcmVuZGVyZXItPmVsZW1lbnQoKS0+aWRlbnRpZmllcigpID09IElEX0JV
VFRPTikKKyAgICBpZiAobV9yZW5kZXJlci0+ZWxlbWVudCgpLT5pc0hUTUxFbGVtZW50KCkgJiYg
bV9yZW5kZXJlci0+ZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YnV0dG9uKCkpKQog
ICAgICAgICByZXR1cm4gW3NlbGYgdGV4dFVuZGVyRWxlbWVudF07CiAgICAgaWYgKG1fcmVuZGVy
ZXItPmVsZW1lbnQoKS0+aXNMaW5rKCkpCiAgICAgICAgIHJldHVybiBbc2VsZiB0ZXh0VW5kZXJF
bGVtZW50XTsKQEAgLTYyMiw3ICs2MjIsNyBAQCBzdGF0aWMgUVJlY3QgYm91bmRpbmdCb3hSZWN0
KFJlbmRlck9iamVjCiAgICAgcmV0dXJuICghbV9yZW5kZXJlci0+aXNMaXN0TWFya2VyKCkgJiYg
IW1fcmVuZGVyZXItPmlzQ2FudmFzKCkgJiYgCiAgICAgICAgICAgICAhbV9yZW5kZXJlci0+aXNJ
bWFnZSgpICYmCiAgICAgICAgICAgICAhKG1fcmVuZGVyZXItPmVsZW1lbnQoKSAmJiBtX3JlbmRl
cmVyLT5lbGVtZW50KCktPmlzSFRNTEVsZW1lbnQoKSAmJgotICAgICAgICAgICAgICBtX3JlbmRl
cmVyLT5lbGVtZW50KCktPmlkZW50aWZpZXIoKSA9PSBJRF9CVVRUT04pKTsKKyAgICAgICAgICAg
ICAgbV9yZW5kZXJlci0+ZWxlbWVudCgpLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YnV0dG9uKCkp
KSk7CiB9CiAKIC0gKE5TQXJyYXkgKilhY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXMKSW5kZXg6
IGt3cS9LV1FET01Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiBrd3EvS1dRRE9NTm9kZS5j
cHAKZGlmZiAtTiBrd3EvS1dRRE9NTm9kZS5jcHAKLS0tIGt3cS9LV1FET01Ob2RlLmNwcAkxMSBK
dWwgMjAwMyAxNjoyNDozNyAtMDAwMAkxLjkKKysrIC9kZXYvbnVsbAkxIEphbiAxOTcwIDAwOjAw
OjAwIC0wMDAwCkBAIC0xLDM0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgQXBw
bGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUg
IktXUURPTU5vZGUuaCIKLQotdXNpbmcgRE9NOjpOb2RlSW1wbDsKLQotLy8gVGhpcyBuZWVkcyB0
byBiZSBpbiBhIEMrKyBzb3VyY2UgZmlsZSBiZWNhdXNlIGlkIGlzIGEgcmVzZXJ2ZWQgd29yZCBp
biBPYmplY3RpdmUtQysrLgotTm9kZUltcGw6OklkIGlkRnJvbU5vZGUoTm9kZUltcGwgKm5vZGUp
Ci17Ci0gICAgcmV0dXJuIG5vZGUtPmlkKCk7Ci19CkluZGV4OiBrd3EvS1dRRE9NTm9kZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KUkNTIGZpbGU6IGt3cS9LV1FET01Ob2RlLmgKZGlmZiAtTiBrd3EvS1dRRE9NTm9k
ZS5oCi0tLSBrd3EvS1dRRE9NTm9kZS5oCTExIEp1bCAyMDAzIDE2OjI0OjM3IC0wMDAwCTEuNQor
KysgL2Rldi9udWxsCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKQEAgLTEsMjggKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwMyBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiZG9tX25vZGVpbXBsLmgiCi0KLURPTTo6Tm9k
ZUltcGw6OklkIGlkRnJvbU5vZGUoRE9NOjpOb2RlSW1wbCAqKTsKSW5kZXg6IGt3cS9LV1FGb250
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva3dxL0tXUUZvbnQuaCx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zMQpkaWZmIC11IC1wIC1yMS4zMSBrd3EvS1dRRm9udC5o
Ci0tLSBrd3EvS1dRRm9udC5oCTQgQXByIDIwMDMgMTY6NTY6MDIgLTAwMDAJMS4zMQorKysga3dx
L0tXUUZvbnQuaAk5IEp1bCAyMDA1IDAyOjQzOjQ3IC0wMDAwCkBAIC0zNyw2ICszNyw3IEBAIGNs
YXNzIE5TRm9udDsKIGNsYXNzIFFGb250IHsKIHB1YmxpYzoKICAgICBlbnVtIFdlaWdodCB7IE5v
cm1hbCA9IDUwLCBCb2xkID0gNjMgfTsKKyAgICBlbnVtIFBpdGNoIHsgVW5rbm93biwgRml4ZWQs
IFZhcmlhYmxlIH07CiAKICAgICBRRm9udCgpOwogICAgIH5RRm9udCgpOwpAQCAtNjEsNyArNjIs
OCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRQaXhlbFNpemUoZmxvYXQgcyk7CiAgICAgaW50IHBp
eGVsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIChpbnQpX3NpemU7IH0KIAotICAgIGJvb2wgaXNGaXhl
ZFBpdGNoKCkgY29uc3Q7CisgICAgYm9vbCBpc0ZpeGVkUGl0Y2goKSBjb25zdCB7IGlmIChfcGl0
Y2ggPT0gVW5rbm93bikgZGV0ZXJtaW5lUGl0Y2goKTsgcmV0dXJuIF9waXRjaCA9PSBGaXhlZDsg
fTsKKyAgICB2b2lkIGRldGVybWluZVBpdGNoKCkgY29uc3Q7CiAgICAgCiAgICAgdm9pZCBzZXRQ
cmludGVyRm9udChib29sKTsKICAgICBib29sIGlzUHJpbnRlckZvbnQoKSBjb25zdCB7IHJldHVy
biBfaXNQcmludGVyRm9udDsgfQpAQCAtNzksNyArODEsOCBAQCBwcml2YXRlOgogICAgIEtXUUZv
bnRGYW1pbHkgX2ZhbWlseTsKICAgICBpbnQgX3RyYWl0OwogICAgIGZsb2F0IF9zaXplOwotICAg
IGJvb2wgX2lzUHJpbnRlckZvbnQ7CisgICAgYm9vbCBfaXNQcmludGVyRm9udCA6IDE7CisgICAg
bXV0YWJsZSBQaXRjaCBfcGl0Y2ggOiAyOwogICAgIG11dGFibGUgTlNGb250ICpfTlNGb250Owog
fTsKIApJbmRleDoga3dxL0tXUUZvbnQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290
L1dlYkNvcmUva3dxL0tXUUZvbnQubW0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNDUKZGlmZiAt
dSAtcCAtcjEuNDUga3dxL0tXUUZvbnQubW0KLS0tIGt3cS9LV1FGb250Lm1tCTkgTWFyIDIwMDUg
MjI6MzA6MjUgLTAwMDAJMS40NQorKysga3dxL0tXUUZvbnQubW0JOSBKdWwgMjAwNSAwMjo0Mzo0
NyAtMDAwMApAQCAtMzQsNiArMzQsNyBAQCBRRm9udDo6UUZvbnQoKQogICAgIDogX3RyYWl0KDAp
CiAgICAgLCBfc2l6ZSgxMi4wKQogICAgICwgX2lzUHJpbnRlckZvbnQoZmFsc2UpCisgICAgLCBf
cGl0Y2goVW5rbm93bikKICAgICAsIF9OU0ZvbnQoMCkKIHsKIH0KQEAgLTQ4LDYgKzQ5LDcgQEAg
UUZvbnQ6OlFGb250KGNvbnN0IFFGb250ICZvdGhlcikKICAgICAsIF90cmFpdChvdGhlci5fdHJh
aXQpCiAgICAgLCBfc2l6ZShvdGhlci5fc2l6ZSkKICAgICAsIF9pc1ByaW50ZXJGb250KG90aGVy
Ll9pc1ByaW50ZXJGb250KQorICAgICwgX3BpdGNoKG90aGVyLl9waXRjaCkKICAgICAsIF9OU0Zv
bnQoS1dRUmV0YWluKG90aGVyLl9OU0ZvbnQpKQogewogfQpAQCAtNTgsNiArNjAsNyBAQCBRRm9u
dCAmUUZvbnQ6Om9wZXJhdG9yPShjb25zdCBRRm9udCAmb3RoCiAgICAgX3RyYWl0ID0gb3RoZXIu
X3RyYWl0OwogICAgIF9zaXplID0gb3RoZXIuX3NpemU7CiAgICAgX2lzUHJpbnRlckZvbnQgPSBv
dGhlci5faXNQcmludGVyRm9udDsKKyAgICBfcGl0Y2ggPSBvdGhlci5fcGl0Y2g7CiAgICAgS1dR
UmV0YWluKG90aGVyLl9OU0ZvbnQpOwogICAgIEtXUVJlbGVhc2UoX05TRm9udCk7CiAgICAgX05T
Rm9udCA9IG90aGVyLl9OU0ZvbnQ7CkBAIC0xNDYsMjEgKzE0OSwyMyBAQCBib29sIFFGb250Ojpi
b2xkKCkgY29uc3QKICAgICByZXR1cm4gX3RyYWl0ICYgTlNCb2xkRm9udE1hc2s7CiB9CiAKLWJv
b2wgUUZvbnQ6OmlzRml4ZWRQaXRjaCgpIGNvbnN0Cit2b2lkIFFGb250OjpkZXRlcm1pbmVQaXRj
aCgpIGNvbnN0CiB7CiAgICAgS1dRX0JMT0NLX0VYQ0VQVElPTlM7Ci0gICAgcmV0dXJuIFtbV2Vi
Q29yZVRleHRSZW5kZXJlckZhY3Rvcnkgc2hhcmVkRmFjdG9yeV0gaXNGb250Rml4ZWRQaXRjaDog
Z2V0TlNGb250KCldOworICAgIGlmIChbW1dlYkNvcmVUZXh0UmVuZGVyZXJGYWN0b3J5IHNoYXJl
ZEZhY3RvcnldIGlzRm9udEZpeGVkUGl0Y2g6IGdldE5TRm9udCgpXSkKKyAgICAgICAgX3BpdGNo
ID0gRml4ZWQ7CisgICAgZWxzZQorICAgICAgICBfcGl0Y2ggPSBWYXJpYWJsZTsKICAgICBLV1Ff
VU5CTE9DS19FWENFUFRJT05TOwotICAgIHJldHVybiBmYWxzZTsKIH0KIAotCiBib29sIFFGb250
OjpvcGVyYXRvcj09KGNvbnN0IFFGb250ICZjb21wYXJlRm9udCkgY29uc3QKIHsKICAgICByZXR1
cm4gX2ZhbWlseSA9PSBjb21wYXJlRm9udC5fZmFtaWx5CiAgICAgICAgICYmIF90cmFpdCA9PSBj
b21wYXJlRm9udC5fdHJhaXQKICAgICAgICAgJiYgX3NpemUgPT0gY29tcGFyZUZvbnQuX3NpemUK
LSAgICAgICAgJiYgX2lzUHJpbnRlckZvbnQgPT0gY29tcGFyZUZvbnQuX2lzUHJpbnRlckZvbnQ7
CisgICAgICAgICYmIF9pc1ByaW50ZXJGb250ID09IGNvbXBhcmVGb250Ll9pc1ByaW50ZXJGb250
CisgICAgICAgICYmIF9waXRjaCA9PSBjb21wYXJlRm9udC5fcGl0Y2g7CiB9CiAKIE5TRm9udCAq
UUZvbnQ6OmdldE5TRm9udCgpIGNvbnN0CkluZGV4OiBrd3EvS1dRS0hUTUxQYXJ0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3EvS1dRS0hUTUxQYXJ0LmNwcCx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS45CmRpZmYgLXUgLXAgLXIxLjkga3dxL0tXUUtIVE1MUGFy
dC5jcHAKLS0tIGt3cS9LV1FLSFRNTFBhcnQuY3BwCTI3IE1hciAyMDAzIDAxOjU3OjQ3IC0wMDAw
CTEuOQorKysga3dxL0tXUUtIVE1MUGFydC5jcHAJOSBKdWwgMjAwNSAwMjo0Mzo0NyAtMDAwMApA
QCAtMzIsMTMgKzMyLDE1IEBACiAKIHVzaW5nIERPTTo6RG9jdW1lbnRJbXBsOwogdXNpbmcgRE9N
OjpIVE1MRG9jdW1lbnRJbXBsOwordXNpbmcgRE9NOjpIVE1MTmFtZXM7CiB1c2luZyBET006Ok5v
ZGVJbXBsOwogCisvLyBGSVhNRTogV2hhdCBvbiBlYXJ0aCBpcyB0aGlzIHNpbmdsZSB0aW55IGZp
bGUgd2l0aCBvbmx5IHRoaXMgbWV0aG9kIGRvaW5nIGhlcmU/CiBib29sIEtXUUtIVE1MUGFydDo6
aXNGcmFtZVNldCgpIGNvbnN0CiB7CiAgICAgRG9jdW1lbnRJbXBsICpkb2N1bWVudCA9IGQtPm1f
ZG9jOwogICAgIGlmICghZG9jdW1lbnQgfHwgIWRvY3VtZW50LT5pc0hUTUxEb2N1bWVudCgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgTm9kZUltcGwgKmJvZHkgPSBzdGF0aWNfY2FzdDxI
VE1MRG9jdW1lbnRJbXBsICo+KGRvY3VtZW50KS0+Ym9keSgpOwotICAgIHJldHVybiBib2R5ICYm
IGJvZHktPnJlbmRlcmVyKCkgJiYgYm9keS0+aWQoKSA9PSBJRF9GUkFNRVNFVDsKKyAgICByZXR1
cm4gYm9keSAmJiBib2R5LT5yZW5kZXJlcigpICYmIGJvZHktPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjpmcmFtZXNldCgpKTsKIH0KSW5kZXg6IGt3cS9LV1FLSFRNTFBhcnQubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva3dxL0tXUUtIVE1MUGFydC5tbSx2CnJldHJpZXZp
bmcgcmV2aXNpb24gMS42NDMKZGlmZiAtdSAtcCAtcjEuNjQzIGt3cS9LV1FLSFRNTFBhcnQubW0K
LS0tIGt3cS9LV1FLSFRNTFBhcnQubW0JMjYgTWF5IDIwMDUgMjA6MzA6MTIgLTAwMDAJMS42NDMK
KysrIGt3cS9LV1FLSFRNTFBhcnQubW0JOSBKdWwgMjAwNSAwMjo0Mzo1MSAtMDAwMApAQCAtMjgs
NyArMjgsNiBAQAogI2ltcG9ydCAiRE9NSW50ZXJuYWwuaCIKIAogI2ltcG9ydCAiS1dRQ2xpcGJv
YXJkLmgiCi0jaW1wb3J0ICJLV1FET01Ob2RlLmgiCiAjaW1wb3J0ICJLV1FEdW1teVZpZXcuaCIK
ICNpbXBvcnQgIktXUUVkaXRDb21tYW5kLmgiCiAjaW1wb3J0ICJLV1FFeGNlcHRpb25zLmgiCkBA
IC0xMDAsNiArOTksNyBAQCB1c2luZyBET006OkhUTUxFbGVtZW50SW1wbDsKIHVzaW5nIERPTTo6
SFRNTEZvcm1FbGVtZW50SW1wbDsKIHVzaW5nIERPTTo6SFRNTEZyYW1lRWxlbWVudEltcGw7CiB1
c2luZyBET006OkhUTUxHZW5lcmljRm9ybUVsZW1lbnRJbXBsOwordXNpbmcgRE9NOjpIVE1MTmFt
ZXM7CiB1c2luZyBET006OkhUTUxUYWJsZUNlbGxFbGVtZW50SW1wbDsKIHVzaW5nIERPTTo6Tm9k
ZTsKIHVzaW5nIERPTTo6Tm9kZUltcGw7CkBAIC0zNjEsMTMgKzM2MSwxMiBAQCBzdGF0aWMgSFRN
TEZvcm1FbGVtZW50SW1wbCAqc2NhbkZvckZvcm0oCiB7CiAgICAgTm9kZUltcGwgKm47CiAgICAg
Zm9yIChuID0gc3RhcnQ7IG47IG4gPSBuLT50cmF2ZXJzZU5leHROb2RlKCkpIHsKLSAgICAgICAg
Tm9kZUltcGw6OklkIG5vZGVJRCA9IGlkRnJvbU5vZGUobik7Ci0gICAgICAgIGlmIChub2RlSUQg
PT0gSURfRk9STSkgeworICAgICAgICBpZiAobi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZvcm0o
KSkpIHsKICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnRJbXBs
ICo+KG4pOwogICAgICAgICB9IGVsc2UgaWYgKG4tPmlzSFRNTEVsZW1lbnQoKQogICAgICAgICAg
ICAgICAgICAgICYmIHN0YXRpY19jYXN0PEhUTUxFbGVtZW50SW1wbCAqPihuKS0+aXNHZW5lcmlj
Rm9ybUVsZW1lbnQoKSkgewogICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxHZW5l
cmljRm9ybUVsZW1lbnRJbXBsICo+KG4pLT5mb3JtKCk7Ci0gICAgICAgIH0gZWxzZSBpZiAobm9k
ZUlEID09IElEX0ZSQU1FIHx8IG5vZGVJRCA9PSBJRF9JRlJBTUUpIHsKKyAgICAgICAgfSBlbHNl
IGlmIChuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZnJhbWUoKSkgfHwgbi0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OmlmcmFtZSgpKSkgewogICAgICAgICAgICAgTm9kZUltcGwgKmNoaWxkRG9jID0g
c3RhdGljX2Nhc3Q8SFRNTEZyYW1lRWxlbWVudEltcGwgKj4obiktPmNvbnRlbnREb2N1bWVudCgp
OwogICAgICAgICAgICAgSFRNTEZvcm1FbGVtZW50SW1wbCAqZnJhbWVSZXN1bHQgPSBzY2FuRm9y
Rm9ybShjaGlsZERvYyk7CiAgICAgICAgICAgICBpZiAoZnJhbWVSZXN1bHQpIHsKQEAgLTM5MCw3
ICszODksNyBAQCBIVE1MRm9ybUVsZW1lbnRJbXBsICpLV1FLSFRNTFBhcnQ6OmN1cnJlCiAgICAg
Ly8gdHJ5IHdhbGtpbmcgdXAgdGhlIG5vZGUgdHJlZSB0byBmaW5kIGEgZm9ybSBlbGVtZW50CiAg
ICAgTm9kZUltcGwgKm47CiAgICAgZm9yIChuID0gc3RhcnQ7IG47IG4gPSBuLT5wYXJlbnROb2Rl
KCkpIHsKLSAgICAgICAgaWYgKGlkRnJvbU5vZGUobikgPT0gSURfRk9STSkgeworICAgICAgICBp
ZiAobi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZvcm0oKSkpIHsKICAgICAgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxIVE1MRm9ybUVsZW1lbnRJbXBsICo+KG4pOwogICAgICAgICB9IGVsc2Ug
aWYgKG4tPmlzSFRNTEVsZW1lbnQoKQogICAgICAgICAgICAgICAgICAgICYmIHN0YXRpY19jYXN0
PEhUTUxFbGVtZW50SW1wbCAqPihuKS0+aXNHZW5lcmljRm9ybUVsZW1lbnQoKSkgewpAQCAtNDg5
LDggKzQ4OCw3IEBAIE5TU3RyaW5nICpLV1FLSFRNTFBhcnQ6OnNlYXJjaEZvckxhYmVsc0EKICAg
ICAgICAgaWYgKGFib3ZlQ2VsbCkgewogICAgICAgICAgICAgLy8gc2VhcmNoIHdpdGhpbiB0aGUg
YWJvdmUgY2VsbCB3ZSBmb3VuZCBmb3IgYSBtYXRjaAogICAgICAgICAgICAgZm9yIChOb2RlSW1w
bCAqbiA9IGFib3ZlQ2VsbC0+Zmlyc3RDaGlsZCgpOyBuOyBuID0gbi0+dHJhdmVyc2VOZXh0Tm9k
ZShhYm92ZUNlbGwpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGlkRnJvbU5vZGUobikgPT0gSURf
VEVYVAotICAgICAgICAgICAgICAgICAgICAmJiBuLT5yZW5kZXJlcigpICYmIG4tPnJlbmRlcmVy
KCktPnN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFKQorICAgICAgICAgICAgICAgIGlm
IChuLT5pc1RleHROb2RlKCkgJiYgbi0+cmVuZGVyZXIoKSAmJiBuLT5yZW5kZXJlcigpLT5zdHls
ZSgpLT52aXNpYmlsaXR5KCkgPT0gVklTSUJMRSkKICAgICAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgICAgIC8vIEZvciBlYWNoIHRleHQgY2h1bmssIHJ1biB0aGUgcmVnZXhwCiAgICAg
ICAgICAgICAgICAgICAgIFFTdHJpbmcgbm9kZVN0cmluZyA9IG4tPm5vZGVWYWx1ZSgpLnN0cmlu
ZygpOwpAQCAtNTI1LDIzICs1MjMsMjEgQEAgTlNTdHJpbmcgKktXUUtIVE1MUGFydDo6c2VhcmNo
Rm9yTGFiZWxzQgogICAgICAgICAgbiAmJiBsZW5ndGhTZWFyY2hlZCA8IGNoYXJzU2VhcmNoZWRU
aHJlc2hvbGQ7CiAgICAgICAgICBuID0gbi0+dHJhdmVyc2VQcmV2aW91c05vZGUoKSkKICAgICB7
Ci0gICAgICAgIE5vZGVJbXBsOjpJZCBub2RlSUQgPSBpZEZyb21Ob2RlKG4pOwotICAgICAgICBp
ZiAobm9kZUlEID09IElEX0ZPUk0KKyAgICAgICAgaWYgKG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVz
Ojpmb3JtKCkpCiAgICAgICAgICAgICB8fCAobi0+aXNIVE1MRWxlbWVudCgpCiAgICAgICAgICAg
ICAgICAgJiYgc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnRJbXBsICo+KG4pLT5pc0dlbmVyaWNGb3Jt
RWxlbWVudCgpKSkKICAgICAgICAgewogICAgICAgICAgICAgLy8gV2UgaGl0IGFub3RoZXIgZm9y
bSBlbGVtZW50IG9yIHRoZSBzdGFydCBvZiB0aGUgZm9ybSAtIGJhaWwgb3V0CiAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfSBlbHNlIGlmIChub2RlSUQgPT0gSURfVEQgJiYgIXN0YXJ0aW5n
VGFibGVDZWxsKSB7CisgICAgICAgIH0gZWxzZSBpZiAobi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
OnRkKCkpICYmICFzdGFydGluZ1RhYmxlQ2VsbCkgewogICAgICAgICAgICAgc3RhcnRpbmdUYWJs
ZUNlbGwgPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVDZWxsRWxlbWVudEltcGwgKj4obik7Ci0gICAg
ICAgIH0gZWxzZSBpZiAobm9kZUlEID09IElEX1RSICYmIHN0YXJ0aW5nVGFibGVDZWxsKSB7Cisg
ICAgICAgIH0gZWxzZSBpZiAobi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRyKCkpICYmIHN0YXJ0
aW5nVGFibGVDZWxsKSB7CiAgICAgICAgICAgICBOU1N0cmluZyAqcmVzdWx0ID0gc2VhcmNoRm9y
TGFiZWxzQWJvdmVDZWxsKHJlZ0V4cCwgc3RhcnRpbmdUYWJsZUNlbGwpOwogICAgICAgICAgICAg
aWYgKHJlc3VsdCkgewogICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBzZWFyY2hlZENlbGxBYm92ZSA9IHRydWU7Ci0gICAgICAgIH0gZWxz
ZSBpZiAobm9kZUlEID09IElEX1RFWFQKLSAgICAgICAgICAgICAgICAgICAmJiBuLT5yZW5kZXJl
cigpICYmIG4tPnJlbmRlcmVyKCktPnN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFKQor
ICAgICAgICB9IGVsc2UgaWYgKG4tPmlzVGV4dE5vZGUoKSAmJiBuLT5yZW5kZXJlcigpICYmIG4t
PnJlbmRlcmVyKCktPnN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFKQogICAgICAgICB7
CiAgICAgICAgICAgICAvLyBGb3IgZWFjaCB0ZXh0IGNodW5rLCBydW4gdGhlIHJlZ2V4cAogICAg
ICAgICAgICAgUVN0cmluZyBub2RlU3RyaW5nID0gbi0+bm9kZVZhbHVlKCkuc3RyaW5nKCk7CkBA
IC0yODQ4LDE0ICsyODQ0LDEwIEBAIE5TRmlsZVdyYXBwZXIgKktXUUtIVE1MUGFydDo6ZmlsZVdy
YXBwZXIKIAogc3RhdGljIEVsZW1lbnRJbXBsICpsaXN0UGFyZW50KEVsZW1lbnRJbXBsICppdGVt
KQogewotICAgIC8vIEljayEgIEF2b2lkIHVzZSBvZiBpdGVtLT5pZCgpIHdoaWNoIGNvbmZ1c2Vz
IE9iakMrKy4KLSAgICB1bnNpZ25lZCBzaG9ydCBfaWQgPSBpdGVtLT5pZGVudGlmaWVyKCk7Ci0g
ICAgCi0gICAgd2hpbGUgKF9pZCAhPSBJRF9VTCAmJiBfaWQgIT0gSURfT0wpIHsKKyAgICB3aGls
ZSAoIWl0ZW0tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp1bCgpKSAmJiAhaXRlbS0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6Om9sKCkpKSB7CiAgICAgICAgIGl0ZW0gPSBzdGF0aWNfY2FzdDxFbGVtZW50
SW1wbCAqPihpdGVtLT5wYXJlbnROb2RlKCkpOwogICAgICAgICBpZiAoIWl0ZW0pCiAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgX2lkID0gaXRlbS0+aWRlbnRpZmllcigpOwogICAgIH0KICAg
ICByZXR1cm4gaXRlbTsKIH0KQEAgLTI4NjgsNyArMjg2MCw3IEBAIHN0YXRpYyBOb2RlSW1wbCog
aXNUZXh0Rmlyc3RJbkxpc3RJdGVtKE4KICAgICB3aGlsZSAocGFyKSB7CiAgICAgICAgIGlmIChw
YXItPmZpcnN0Q2hpbGQoKSAhPSBlKQogICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIGlm
IChwYXItPmlkZW50aWZpZXIoKSA9PSBJRF9MSSkKKyAgICAgICAgaWYgKHBhci0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OmxpKCkpKQogICAgICAgICAgICAgcmV0dXJuIHBhcjsKICAgICAgICAgZSA9
IHBhcjsKICAgICAgICAgcGFyID0gcGFyLT5wYXJlbnROb2RlKCk7CkBAIC0zMDIyLDEwOSArMzAx
NCw5NSBAQCBOU0F0dHJpYnV0ZWRTdHJpbmcgKktXUUtIVE1MUGFydDo6YXR0cmliCiAgICAgICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgb3VyIHNpbXBsZSBIVE1M
IC0+IEFTQ0lJIHRyYW5zZm9ybWF0aW9uOgogICAgICAgICAgICAgICAgIFFTdHJpbmcgdGV4dDsK
LSAgICAgICAgICAgICAgICBOb2RlSW1wbDo6SWQgX2lkID0gbi0+aWRlbnRpZmllcigpOwotICAg
ICAgICAgICAgICAgIHN3aXRjaChfaWQpIHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9B
OgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm90ZSB0aGUgc3RhcnQgb2YgdGhlIDxhPiBl
bGVtZW50LiAgV2Ugd2lsbCBhZGQgdGhlIE5TTGlua0F0dHJpYnV0ZU5hbWUKLSAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIGF0dHJpYnV0ZSB0byB0aGUgYXR0cmlidXRlZCBzdHJpbmcgd2hlbiBu
YXZpZ2F0aW5nIHRvIHRoZSBuZXh0IHNpYmxpbmcgCi0gICAgICAgICAgICAgICAgICAgICAgICAv
LyBvZiB0aGlzIG5vZGUuCi0gICAgICAgICAgICAgICAgICAgICAgICBsaW5rU3RhcnRMb2NhdGlv
biA9IFtyZXN1bHQgbGVuZ3RoXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtTdGFydE5v
ZGUgPSBzdGF0aWNfY2FzdDxFbGVtZW50SW1wbCo+KG4pOwotICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0KLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9CUjoKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHRleHQgKz0gIlxuIjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGhhc05l
d0xpbmUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgCi0gICAg
ICAgICAgICAgICAgICAgIGNhc2UgSURfTEk6Ci0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgUVN0cmluZyBsaXN0VGV4dDsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBFbGVtZW50SW1wbCAqaXRlbVBhcmVudCA9IGxpc3RQYXJlbnQoc3Rh
dGljX2Nhc3Q8RWxlbWVudEltcGwgKj4obikpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaGFzTmV3TGluZSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbGlzdFRleHQgKz0gJ1xuJzsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBoYXNOZXdMaW5lID0gdHJ1ZTsKLSAgICAKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBsaXN0SXRlbXMuYXBwZW5kKHN0YXRpY19jYXN0PEVsZW1lbnRJbXBsKj4obikp
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3RJdGVtSW5mbyBpbmZvOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGluZm8uc3RhcnQgPSBbcmVzdWx0IGxlbmd0aF07Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW5mby5lbmQgPSAwOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGxpc3RJdGVtTG9jYXRpb25zLmFwcGVuZCAoaW5mbyk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdFRleHQgKz0g
J1x0JzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbVBhcmVudCAmJiByZW5k
ZXJlci0+aXNMaXN0SXRlbSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJl
bmRlckxpc3RJdGVtICpsaXN0UmVuZGVyZXIgPSBzdGF0aWNfY2FzdDxSZW5kZXJMaXN0SXRlbSo+
KHJlbmRlcmVyKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhNYXJrZXJX
aWR0aCA9IE1BWChbZm9udCBwb2ludFNpemVdLCBtYXhNYXJrZXJXaWR0aCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaChzdHlsZS0+bGlzdFN0eWxlVHlwZSgpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIGtodG1sOjpESVNDOgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RUZXh0ICs9ICgoUUNoYXIp
QlVMTEVUX0NIQVIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBraHRtbDo6Q0lS
Q0xFOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RUZXh0ICs9
ICgoUUNoYXIpQ0lSQ0xFX0NIQVIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBr
aHRtbDo6U1FVQVJFOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxp
c3RUZXh0ICs9ICgoUUNoYXIpU1FVQVJFX0NIQVIpOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2FzZSBraHRtbDo6TE5PTkU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFTdHJpbmcgbWFya2Vy
ID0gbGlzdFJlbmRlcmVyLT5tYXJrZXJTdHJpbmdWYWx1ZSgpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGxpc3RUZXh0ICs9IG1hcmtlcjsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBVc2UgQXBwS2l0IG1ldHJpY3MuICBXaWxsIGJl
IHJlbmRlcmVkIGJ5IEFwcEtpdC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmbG9hdCBtYXJrZXJXaWR0aCA9IFtmb250IHdpZHRoT2ZTdHJpbmc6IG1hcmtlci5nZXRO
U1N0cmluZygpXTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhN
YXJrZXJXaWR0aCA9IE1BWChtYXJrZXJXaWR0aCwgbWF4TWFya2VyV2lkdGgpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKG4tPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjphKCkpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIE5vdGUgdGhlIHN0
YXJ0IG9mIHRoZSA8YT4gZWxlbWVudC4gIFdlIHdpbGwgYWRkIHRoZSBOU0xpbmtBdHRyaWJ1dGVO
YW1lCisgICAgICAgICAgICAgICAgICAgIC8vIGF0dHJpYnV0ZSB0byB0aGUgYXR0cmlidXRlZCBz
dHJpbmcgd2hlbiBuYXZpZ2F0aW5nIHRvIHRoZSBuZXh0IHNpYmxpbmcgCisgICAgICAgICAgICAg
ICAgICAgIC8vIG9mIHRoaXMgbm9kZS4KKyAgICAgICAgICAgICAgICAgICAgbGlua1N0YXJ0TG9j
YXRpb24gPSBbcmVzdWx0IGxlbmd0aF07CisgICAgICAgICAgICAgICAgICAgIGxpbmtTdGFydE5v
ZGUgPSBzdGF0aWNfY2FzdDxFbGVtZW50SW1wbCo+KG4pOworICAgICAgICAgICAgICAgIH0gZWxz
ZSBpZiAobi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJyKCkpKSB7CisgICAgICAgICAgICAgICAg
ICAgIHRleHQgKz0gIlxuIjsKKyAgICAgICAgICAgICAgICAgICAgaGFzTmV3TGluZSA9IHRydWU7
CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6bGko
KSkpIHsKKyAgICAgICAgICAgICAgICAgICAgUVN0cmluZyBsaXN0VGV4dDsKKyAgICAgICAgICAg
ICAgICAgICAgRWxlbWVudEltcGwgKml0ZW1QYXJlbnQgPSBsaXN0UGFyZW50KHN0YXRpY19jYXN0
PEVsZW1lbnRJbXBsICo+KG4pKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgICAgIGlmICghaGFzTmV3TGluZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RUZXh0
ICs9ICdcbic7CisgICAgICAgICAgICAgICAgICAgIGhhc05ld0xpbmUgPSB0cnVlOwogCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RUZXh0ICs9ICcgJzsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbGlzdFRleHQgKz0gJ1x0JzsKLSAgICAKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgTlNNdXRhYmxlRGljdGlvbmFyeSAqYXR0cnM7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnMgPSBbW05TTXV0YWJs
ZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBbYXR0cnMgc2V0T2JqZWN0OmZvbnQgZm9yS2V5Ok5TRm9udEF0dHJpYnV0ZU5hbWVdOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3R5bGUgJiYgc3R5bGUtPmNvbG9yKCku
aXNWYWxpZCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHJzIHNl
dE9iamVjdDpzdHlsZS0+Y29sb3IoKS5nZXROU0NvbG9yKCkgZm9yS2V5Ok5TRm9yZWdyb3VuZENv
bG9yQXR0cmlidXRlTmFtZV07Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChz
dHlsZSAmJiBzdHlsZS0+YmFja2dyb3VuZENvbG9yKCkuaXNWYWxpZCgpKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHJzIHNldE9iamVjdDpzdHlsZS0+YmFja2dyb3Vu
ZENvbG9yKCkuZ2V0TlNDb2xvcigpIGZvcktleTpOU0JhY2tncm91bmRDb2xvckF0dHJpYnV0ZU5h
bWVdOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5TQXR0
cmlidXRlZFN0cmluZyAqcGFydGlhbFN0cmluZyA9IFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9j
XSBpbml0V2l0aFN0cmluZzpsaXN0VGV4dC5nZXROU1N0cmluZygpIGF0dHJpYnV0ZXM6YXR0cnNd
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0cnMgcmVsZWFzZV07Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXN1bHQgYXBwZW5kQXR0cmlidXRlZFN0cmlu
ZzogcGFydGlhbFN0cmluZ107ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBbcGFydGlhbFN0cmluZyByZWxlYXNlXTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGxpc3RJdGVtcy5hcHBlbmQoc3RhdGljX2Nh
c3Q8RWxlbWVudEltcGwqPihuKSk7CisgICAgICAgICAgICAgICAgICAgIExpc3RJdGVtSW5mbyBp
bmZvOworICAgICAgICAgICAgICAgICAgICBpbmZvLnN0YXJ0ID0gW3Jlc3VsdCBsZW5ndGhdOwor
ICAgICAgICAgICAgICAgICAgICBpbmZvLmVuZCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGxp
c3RJdGVtTG9jYXRpb25zLmFwcGVuZCAoaW5mbyk7CisgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgICAgICBsaXN0VGV4dCArPSAnXHQnOworICAgICAgICAgICAgICAgICAgICBp
ZiAoaXRlbVBhcmVudCAmJiByZW5kZXJlci0+aXNMaXN0SXRlbSgpKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBSZW5kZXJMaXN0SXRlbSAqbGlzdFJlbmRlcmVyID0gc3RhdGljX2Nhc3Q8UmVu
ZGVyTGlzdEl0ZW0qPihyZW5kZXJlcik7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIG1heE1h
cmtlcldpZHRoID0gTUFYKFtmb250IHBvaW50U2l6ZV0sIG1heE1hcmtlcldpZHRoKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHN3aXRjaChzdHlsZS0+bGlzdFN0eWxlVHlwZSgpKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBraHRtbDo6RElTQzoKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbGlzdFRleHQgKz0gKChRQ2hhcilCVUxMRVRfQ0hBUik7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNhc2Uga2h0bWw6OkNJUkNMRToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbGlzdFRleHQgKz0gKChRQ2hhcilDSVJDTEVfQ0hBUik7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Uga2h0
bWw6OlNRVUFSRToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdFRleHQgKz0g
KChRQ2hhcilTUVVBUkVfQ0hBUik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Uga2h0bWw6OkxOT05FOgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRU3RyaW5n
IG1hcmtlciA9IGxpc3RSZW5kZXJlci0+bWFya2VyU3RyaW5nVmFsdWUoKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbGlzdFRleHQgKz0gbWFya2VyOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBVc2UgQXBwS2l0IG1ldHJpY3MuICBXaWxsIGJlIHJlbmRlcmVk
IGJ5IEFwcEtpdC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgbWFya2Vy
V2lkdGggPSBbZm9udCB3aWR0aE9mU3RyaW5nOiBtYXJrZXIuZ2V0TlNTdHJpbmcoKV07CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heE1hcmtlcldpZHRoID0gTUFYKG1hcmtlcldp
ZHRoLCBtYXhNYXJrZXJXaWR0aCk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX09M
OgotICAgICAgICAgICAgICAgICAgICBjYXNlIElEX1VMOgorICAgICAgICAgICAgICAgICAgICAg
ICAgbGlzdFRleHQgKz0gJyAnOworICAgICAgICAgICAgICAgICAgICAgICAgbGlzdFRleHQgKz0g
J1x0JzsKKworICAgICAgICAgICAgICAgICAgICAgICAgTlNNdXRhYmxlRGljdGlvbmFyeSAqYXR0
cnM7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzID0gW1tOU011dGFibGVEaWN0aW9u
YXJ5IGFsbG9jXSBpbml0XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFthdHRycyBzZXRPYmpl
Y3Q6Zm9udCBmb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoc3R5bGUgJiYgc3R5bGUtPmNvbG9yKCkuaXNWYWxpZCgpKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFthdHRycyBzZXRPYmplY3Q6c3R5bGUtPmNvbG9yKCkuZ2V0TlNDb2xv
cigpIGZvcktleTpOU0ZvcmVncm91bmRDb2xvckF0dHJpYnV0ZU5hbWVdOworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHN0eWxlICYmIHN0eWxlLT5iYWNrZ3JvdW5kQ29sb3IoKS5pc1ZhbGlk
KCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHJzIHNldE9iamVjdDpzdHlsZS0+
YmFja2dyb3VuZENvbG9yKCkuZ2V0TlNDb2xvcigpIGZvcktleTpOU0JhY2tncm91bmRDb2xvckF0
dHJpYnV0ZU5hbWVdOworCisgICAgICAgICAgICAgICAgICAgICAgICBOU0F0dHJpYnV0ZWRTdHJp
bmcgKnBhcnRpYWxTdHJpbmcgPSBbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhT
dHJpbmc6bGlzdFRleHQuZ2V0TlNTdHJpbmcoKSBhdHRyaWJ1dGVzOmF0dHJzXTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIFthdHRycyByZWxlYXNlXTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IFtyZXN1bHQgYXBwZW5kQXR0cmlidXRlZFN0cmluZzogcGFydGlhbFN0cmluZ107ICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgW3BhcnRpYWxTdHJpbmcgcmVsZWFzZV07
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobi0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9sKCkpIHx8IG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp1
bCgpKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNOZXdMaW5lKQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRleHQgKz0gIlxuIjsKICAgICAgICAgICAgICAgICAgICAg
ICAgIGhhc05ld0xpbmUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0K
LSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9URDoKLSAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBJRF9USDoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9IUjoKLSAgICAgICAgICAgICAg
ICAgICAgY2FzZSBJRF9ERDoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9ETDoKLSAgICAg
ICAgICAgICAgICAgICAgY2FzZSBJRF9EVDoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9Q
UkU6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSURfQkxPQ0tRVU9URToKLSAgICAgICAgICAg
ICAgICAgICAgY2FzZSBJRF9ESVY6CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobi0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRkKCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRoKCkpIHx8CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmhyKCkpIHx8CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmRkKCkpIHx8
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
OmRsKCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OmR0KCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OnByZSgpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpibG9ja3F1b3RlKCkpIHx8CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmRpdigpKSkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNOZXdMaW5lKQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRleHQgKz0gJ1xuJzsKICAgICAgICAgICAgICAgICAgICAgICAgIGhhc05l
d0xpbmUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgICAgIGNhc2UgSURfUDoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9UUjoKLSAg
ICAgICAgICAgICAgICAgICAgY2FzZSBJRF9IMToKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJ
RF9IMjoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9IMzoKLSAgICAgICAgICAgICAgICAg
ICAgY2FzZSBJRF9INDoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBJRF9INToKLSAgICAgICAg
ICAgICAgICAgICAgY2FzZSBJRF9INjogeworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYg
KG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpwKCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRyKCkpIHx8CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmgxKCkpIHx8CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmgyKCkp
IHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OmgzKCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6Omg0KCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbi0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6Omg1KCkpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omg2KCkpKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIWhhc05ld0xpbmUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4
dCArPSAnXG4nOwogICAgICAgICAgICAgICAgICAgICAgICAgCkBAIC0zMTM5LDEwICszMTE3LDgg
QEAgTlNBdHRyaWJ1dGVkU3RyaW5nICpLV1FLSFRNTFBhcnQ6OmF0dHJpYgogICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
ICAgICAgICBoYXNOZXdMaW5lID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICAgICAgY2FzZSBJRF9JTUc6CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYg
KG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppbWcoKSkpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChwZW5kaW5nU3R5bGVkU3BhY2UgIT0gbmlsKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGxpbmtTdGFydExvY2F0aW9uID09IFtyZXN1bHQgbGVuZ3RoXSkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICArK2xpbmtTdGFydExvY2F0aW9uOwpAQCAtMzE1
Niw4ICszMTMyLDkgQEAgTlNBdHRyaWJ1dGVkU3RyaW5nICpLV1FLSFRNTFBhcnQ6OmF0dHJpYgog
ICAgICAgICAgICAgICAgICAgICAgICAgTlNBdHRyaWJ1dGVkU3RyaW5nICppU3RyaW5nID0gW05T
QXR0cmlidXRlZFN0cmluZyBhdHRyaWJ1dGVkU3RyaW5nV2l0aEF0dGFjaG1lbnQ6YXR0YWNobWVu
dF07CiAgICAgICAgICAgICAgICAgICAgICAgICBbcmVzdWx0IGFwcGVuZEF0dHJpYnV0ZWRTdHJp
bmc6IGlTdHJpbmddOwogICAgICAgICAgICAgICAgICAgICAgICAgW2F0dGFjaG1lbnQgcmVsZWFz
ZV07Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgICAgIE5TQXR0cmlidXRlZFN0cmlu
ZyAqcGFydGlhbFN0cmluZyA9IFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0
cmluZzp0ZXh0LmdldE5TU3RyaW5nKCldOwogICAgICAgICAgICAgICAgIFtyZXN1bHQgYXBwZW5k
QXR0cmlidXRlZFN0cmluZzogcGFydGlhbFN0cmluZ107CiAgICAgICAgICAgICAgICAgW3BhcnRp
YWxTdHJpbmcgcmVsZWFzZV07CkBAIC0zMTc5LDcxICszMTU2LDYwIEBAIE5TQXR0cmlidXRlZFN0
cmluZyAqS1dRS0hUTUxQYXJ0OjphdHRyaWIKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIG5leHQgPSBuLT5uZXh0U2libGluZygpOwogCi0gICAgICAgICAgICBOb2RlSW1wbDo6
SWQgX2lkID0gbi0+aWRlbnRpZmllcigpOwotICAgICAgICAgICAgc3dpdGNoKF9pZCkgewotICAg
ICAgICAgICAgICAgIGNhc2UgSURfQToKLSAgICAgICAgICAgICAgICAgICAgLy8gRW5kIG9mIGEg
PGE+IGVsZW1lbnQuICBDcmVhdGUgYW4gYXR0cmlidXRlZCBzdHJpbmcgTlNMaW5rQXR0cmlidXRl
TmFtZSBhdHRyaWJ1dGUKLSAgICAgICAgICAgICAgICAgICAgLy8gZm9yIHRoZSByYW5nZSBvZiB0
aGUgbGluay4gIE5vdGUgdGhhdCB3ZSBjcmVhdGUgdGhlIGF0dHJpYnV0ZWQgc3RyaW5nIGZyb20g
dGhlIERPTSwgd2hpY2gKLSAgICAgICAgICAgICAgICAgICAgLy8gd2lsbCBoYXZlIGNvcnJlY3Rl
ZCBhbnkgaWxsZWdhbGx5IG5lc3RlZCA8YT4gZWxlbWVudHMuCi0gICAgICAgICAgICAgICAgICAg
IGlmIChsaW5rU3RhcnROb2RlICYmIG4gPT0gbGlua1N0YXJ0Tm9kZSl7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBET01TdHJpbmcgaHJlZiA9IHBhcnNlVVJMKGxpbmtTdGFydE5vZGUtPmdldEF0
dHJpYnV0ZShBVFRSX0hSRUYpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIEtVUkwga1VSTCA9
IEtXUShsaW5rU3RhcnROb2RlLT5nZXREb2N1bWVudCgpLT5wYXJ0KCkpLT5jb21wbGV0ZVVSTCho
cmVmLnN0cmluZygpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
ICAgICAgICAgTlNVUkwgKlVSTCA9IGtVUkwuZ2V0TlNVUkwoKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIFtyZXN1bHQgYWRkQXR0cmlidXRlOk5TTGlua0F0dHJpYnV0ZU5hbWUgdmFsdWU6VVJM
IHJhbmdlOk5TTWFrZVJhbmdlKGxpbmtTdGFydExvY2F0aW9uLCBbcmVzdWx0IGxlbmd0aF0tbGlu
a1N0YXJ0TG9jYXRpb24pXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtTdGFydE5vZGUg
PSAwOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgaWYgKG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjphKCkpKSB7CisgICAgICAg
ICAgICAgICAgLy8gRW5kIG9mIGEgPGE+IGVsZW1lbnQuICBDcmVhdGUgYW4gYXR0cmlidXRlZCBz
dHJpbmcgTlNMaW5rQXR0cmlidXRlTmFtZSBhdHRyaWJ1dGUKKyAgICAgICAgICAgICAgICAvLyBm
b3IgdGhlIHJhbmdlIG9mIHRoZSBsaW5rLiAgTm90ZSB0aGF0IHdlIGNyZWF0ZSB0aGUgYXR0cmli
dXRlZCBzdHJpbmcgZnJvbSB0aGUgRE9NLCB3aGljaAorICAgICAgICAgICAgICAgIC8vIHdpbGwg
aGF2ZSBjb3JyZWN0ZWQgYW55IGlsbGVnYWxseSBuZXN0ZWQgPGE+IGVsZW1lbnRzLgorICAgICAg
ICAgICAgICAgIGlmIChsaW5rU3RhcnROb2RlICYmIG4gPT0gbGlua1N0YXJ0Tm9kZSkgeworICAg
ICAgICAgICAgICAgICAgICBET01TdHJpbmcgaHJlZiA9IHBhcnNlVVJMKGxpbmtTdGFydE5vZGUt
PmdldEF0dHJpYnV0ZShBVFRSX0hSRUYpKTsKKyAgICAgICAgICAgICAgICAgICAgS1VSTCBrVVJM
ID0gS1dRKGxpbmtTdGFydE5vZGUtPmdldERvY3VtZW50KCktPnBhcnQoKSktPmNvbXBsZXRlVVJM
KGhyZWYuc3RyaW5nKCkpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAg
ICAgTlNVUkwgKlVSTCA9IGtVUkwuZ2V0TlNVUkwoKTsKKyAgICAgICAgICAgICAgICAgICAgW3Jl
c3VsdCBhZGRBdHRyaWJ1dGU6TlNMaW5rQXR0cmlidXRlTmFtZSB2YWx1ZTpVUkwgcmFuZ2U6TlNN
YWtlUmFuZ2UobGlua1N0YXJ0TG9jYXRpb24sIFtyZXN1bHQgbGVuZ3RoXS1saW5rU3RhcnRMb2Nh
dGlvbildOworICAgICAgICAgICAgICAgICAgICBsaW5rU3RhcnROb2RlID0gMDsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChuLT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6b2woKSkgfHwgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnVsKCkpKSB7
CisgICAgICAgICAgICAgICAgaWYgKCFoYXNOZXdMaW5lKQorICAgICAgICAgICAgICAgICAgICB0
ZXh0ICs9ICdcbic7CisgICAgICAgICAgICAgICAgaGFzTmV3TGluZSA9IHRydWU7CisgICAgICAg
ICAgICB9IGVsc2UgaWYgKG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpsaSgpKSkgewogICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIGNhc2UgSURfT0w6Ci0gICAgICAgICAgICAgICAg
Y2FzZSBJRF9VTDoKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNOZXdMaW5lKQotICAgICAg
ICAgICAgICAgICAgICAgICAgdGV4dCArPSAnXG4nOwotICAgICAgICAgICAgICAgICAgICBoYXNO
ZXdMaW5lID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAg
ICAgICBjYXNlIElEX0xJOgotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgaSwgY291bnQgPSBsaXN0SXRlbXMuY291bnQoKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKXsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAobGlzdEl0ZW1zLmF0KGkpID09IG4pewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBsaXN0SXRlbUxvY2F0aW9uc1tpXS5lbmQgPSBbcmVzdWx0IGxlbmd0aF07
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBpbnQgaSwgY291bnQgPSBsaXN0SXRlbXMuY291bnQoKTsKKyAgICAgICAgICAgICAgICBmb3Ig
KGkgPSAwOyBpIDwgY291bnQ7IGkrKyl7CisgICAgICAgICAgICAgICAgICAgIGlmIChsaXN0SXRl
bXMuYXQoaSkgPT0gbil7CisgICAgICAgICAgICAgICAgICAgICAgICBsaXN0SXRlbUxvY2F0aW9u
c1tpXS5lbmQgPSBbcmVzdWx0IGxlbmd0aF07CisgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoIWhhc05l
d0xpbmUpCi0gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0ICs9ICdcbic7Ci0gICAgICAgICAg
ICAgICAgICAgIGhhc05ld0xpbmUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LQotICAgICAgICAgICAgICAgIGNhc2UgSURfVEQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBJRF9U
SDoKLSAgICAgICAgICAgICAgICBjYXNlIElEX0hSOgotICAgICAgICAgICAgICAgIGNhc2UgSURf
REQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBJRF9ETDoKLSAgICAgICAgICAgICAgICBjYXNlIElE
X0RUOgotICAgICAgICAgICAgICAgIGNhc2UgSURfUFJFOgotICAgICAgICAgICAgICAgIGNhc2Ug
SURfQkxPQ0tRVU9URToKLSAgICAgICAgICAgICAgICBjYXNlIElEX0RJVjoKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKCFoYXNOZXdMaW5lKQotICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCAr
PSAnXG4nOwotICAgICAgICAgICAgICAgICAgICBoYXNOZXdMaW5lID0gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBJRF9QOgotICAgICAgICAg
ICAgICAgIGNhc2UgSURfVFI6Ci0gICAgICAgICAgICAgICAgY2FzZSBJRF9IMToKLSAgICAgICAg
ICAgICAgICBjYXNlIElEX0gyOgotICAgICAgICAgICAgICAgIGNhc2UgSURfSDM6Ci0gICAgICAg
ICAgICAgICAgY2FzZSBJRF9INDoKLSAgICAgICAgICAgICAgICBjYXNlIElEX0g1OgotICAgICAg
ICAgICAgICAgIGNhc2UgSURfSDY6Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaGFzTmV3TGlu
ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHRleHQgKz0gJ1xuJzsKLSAgICAgICAgICAgICAg
ICAgICAgLy8gQW4gZXh0cmEgbmV3bGluZSBpcyBuZWVkZWQgYXQgdGhlIHN0YXJ0LCBub3QgdGhl
IGVuZCwgb2YgdGhlc2UgdHlwZXMgb2YgdGFncywKLSAgICAgICAgICAgICAgICAgICAgLy8gc28g
ZG9uJ3QgYWRkIGFub3RoZXIgaGVyZS4KLSAgICAgICAgICAgICAgICAgICAgaGFzTmV3TGluZSA9
IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBpZiAoIWhhc05ld0xpbmUpCisgICAgICAgICAgICAgICAgICAgIHRleHQg
Kz0gJ1xuJzsKKyAgICAgICAgICAgICAgICBoYXNOZXdMaW5lID0gdHJ1ZTsKKyAgICAgICAgICAg
IH0gZWxzZSBpZiAobi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRkKCkpIHx8CisgICAgICAgICAg
ICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0aCgpKSB8fAorICAgICAgICAg
ICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aHIoKSkgfHwKKyAgICAgICAg
ICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmRkKCkpIHx8CisgICAgICAg
ICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpkbCgpKSB8fAorICAgICAg
ICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZHQoKSkgfHwKKyAgICAg
ICAgICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnByZSgpKSB8fAorICAg
ICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YmxvY2txdW90ZSgp
KSB8fAorICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZGl2
KCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFoYXNOZXdMaW5lKQorICAgICAgICAgICAgICAg
ICAgICB0ZXh0ICs9ICdcbic7CisgICAgICAgICAgICAgICAgaGFzTmV3TGluZSA9IHRydWU7Cisg
ICAgICAgICAgICB9IGVsc2UgaWYgKG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpwKCkpIHx8Cisg
ICAgICAgICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0cigpKSB8fAor
ICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDEoKSkgfHwK
KyAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmgyKCkpIHx8
CisgICAgICAgICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoMygpKSB8
fAorICAgICAgICAgICAgICAgICAgICAgICBuLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aDQoKSkg
fHwKKyAgICAgICAgICAgICAgICAgICAgICAgbi0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omg1KCkp
IHx8CisgICAgICAgICAgICAgICAgICAgICAgIG4tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoNigp
KSkgeworICAgICAgICAgICAgICAgIGlmICghaGFzTmV3TGluZSkKKyAgICAgICAgICAgICAgICAg
ICAgdGV4dCArPSAnXG4nOworICAgICAgICAgICAgICAgIC8vIEFuIGV4dHJhIG5ld2xpbmUgaXMg
bmVlZGVkIGF0IHRoZSBzdGFydCwgbm90IHRoZSBlbmQsIG9mIHRoZXNlIHR5cGVzIG9mIHRhZ3Ms
CisgICAgICAgICAgICAgICAgLy8gc28gZG9uJ3QgYWRkIGFub3RoZXIgaGVyZS4KKyAgICAgICAg
ICAgICAgICBoYXNOZXdMaW5lID0gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAog
ICAgICAgICAgICAgTlNBdHRyaWJ1dGVkU3RyaW5nICpwYXJ0aWFsU3RyaW5nID0gW1tOU0F0dHJp
YnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOnRleHQuZ2V0TlNTdHJpbmcoKV07CkBA
IC0zNDc2LDcgKzM0NDIsNyBAQCBSZW5kZXJTdHlsZSAqS1dRS0hUTUxQYXJ0OjpzdHlsZUZvclNl
bGVjCiAgICAgICAgIHJldHVybiBub2RlLT5yZW5kZXJlcigpLT5zdHlsZSgpOwogCiAgICAgaW50
IGV4Y2VwdGlvbkNvZGUgPSAwOwotICAgIEVsZW1lbnRJbXBsICpzdHlsZUVsZW1lbnQgPSB4bWxE
b2NJbXBsKCktPmNyZWF0ZUhUTUxFbGVtZW50KCJzcGFuIiwgZXhjZXB0aW9uQ29kZSk7CisgICAg
RWxlbWVudEltcGwgKnN0eWxlRWxlbWVudCA9IHhtbERvY0ltcGwoKS0+Y3JlYXRlRWxlbWVudE5T
KEhUTUxOYW1lczo6eGh0bWxOYW1lc3BhY2VVUkkoKSwgInNwYW4iLCBleGNlcHRpb25Db2RlKTsK
ICAgICBBU1NFUlQoZXhjZXB0aW9uQ29kZSA9PSAwKTsKIAogICAgIHN0eWxlRWxlbWVudC0+cmVm
KCk7CkBAIC0zNzAzLDcgKzM2NjksNyBAQCB2b2lkIEtXUUtIVE1MUGFydDo6c2V0U2VsZWN0aW9u
RnJvbU5vbmUoCiAgICAgICAgIHdoaWxlIChub2RlKSB7CiAgICAgICAgICAgICAvLyBMb29rIGZv
ciBhIGJsb2NrIGZsb3csIGJ1dCBza2lwIG92ZXIgdGhlIEhUTUwgZWxlbWVudCwgc2luY2Ugd2Ug
cmVhbGx5CiAgICAgICAgICAgICAvLyB3YW50IHRvIGdldCBhdCBsZWFzdCBhcyBmYXIgYXMgdGhl
IHRoZSBCT0RZIGVsZW1lbnQgaW4gYSBkb2N1bWVudC4KLSAgICAgICAgICAgIGlmIChub2RlLT5p
c0Jsb2NrRmxvdygpICYmIG5vZGUtPmlkZW50aWZpZXIoKSAhPSBJRF9IVE1MKQorICAgICAgICAg
ICAgaWYgKG5vZGUtPmlzQmxvY2tGbG93KCkgJiYgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
Omh0bWwoKSkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBub2RlID0gbm9k
ZS0+dHJhdmVyc2VOZXh0Tm9kZSgpOwogICAgICAgICB9CkluZGV4OiBrd3EvS1dRUmVuZGVyVHJl
ZURlYnVnLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3EvS1dR
UmVuZGVyVHJlZURlYnVnLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS40MQpkaWZmIC11IC1w
IC1yMS40MSBrd3EvS1dRUmVuZGVyVHJlZURlYnVnLmNwcAotLS0ga3dxL0tXUVJlbmRlclRyZWVE
ZWJ1Zy5jcHAJMTYgTWF5IDIwMDUgMjI6MDM6NDggLTAwMDAJMS40MQorKysga3dxL0tXUVJlbmRl
clRyZWVEZWJ1Zy5jcHAJOSBKdWwgMjAwNSAwMjo0Mzo1MSAtMDAwMApAQCAtMjcsNyArMjcsNiBA
QAogCiAjaW5jbHVkZSAiZG9tX2RvY2ltcGwuaCIKICNpbmNsdWRlICJkb21fcG9zaXRpb24uaCIK
LSNpbmNsdWRlICJodG1sdGFncy5oIgogI2luY2x1ZGUgImpzZWRpdGluZy5oIgogI2luY2x1ZGUg
ImtodG1sdmlldy5oIgogI2luY2x1ZGUgInJlbmRlcl9jYW52YXMuaCIKQEAgLTExNiw5ICsxMTUs
MTMgQEAgc3RhdGljIFFTdHJpbmcgZ2V0VGFnTmFtZShOb2RlSW1wbCAqbikKIHsKICAgICBpZiAo
bi0+aXNEb2N1bWVudE5vZGUoKSkKICAgICAgICAgcmV0dXJuICIiOwotICAgIGlmIChuLT5pZCgp
IDw9IElEX0xBU1RfVEFHKQotICAgICAgICByZXR1cm4gZ2V0VGFnTmFtZShuLT5pZCgpKS5zdHJp
bmcoKTsKLSAgICByZXR1cm4gbi0+bm9kZU5hbWUoKS5zdHJpbmcoKTsKKyAgICBpZiAobi0+aXNU
ZXh0Tm9kZSgpKQorICAgICAgICByZXR1cm4gIlRFWFQiOyAvLyBGSVhNRTogUmVtb3ZlIG9uY2Ug
dGhlIGxheW91dCB0ZXN0cyBhcmUgcmVhZHkgdG8gY2hhbmdlLgorICAgIGlmIChuLT5pc0NvbW1l
bnROb2RlKCkpCisgICAgICAgIHJldHVybiAiQ09NTUVOVCI7CisgICAgaWYgKG4tPmlzSFRNTEVs
ZW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIG4tPm5vZGVOYW1lKCkudXBwZXIoKS5zdHJpbmcoKTsg
Ly8gRklYTUU6IFdlIHdhbnQgdG8gZHVtcCB0aGUgcmVhbCBET00gbmFtZSwgbm90IGFuIHVwcGVy
Y2FzZSBuYW1lLgorICAgIHJldHVybiBuLT5ub2RlTmFtZSgpLnN0cmluZygpOyAKIH0KIAogc3Rh
dGljIFFUZXh0U3RyZWFtICZvcGVyYXRvcjw8KFFUZXh0U3RyZWFtICZ0cywgY29uc3QgUmVuZGVy
T2JqZWN0ICZvKQpJbmRleDoga3dxL1dlYkNvcmVCcmlkZ2UubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2N2cy9yb290L1dlYkNvcmUva3dxL1dlYkNvcmVCcmlkZ2UubW0sdgpyZXRyaWV2aW5nIHJl
dmlzaW9uIDEuMzk2CmRpZmYgLXUgLXAgLXIxLjM5NiBrd3EvV2ViQ29yZUJyaWRnZS5tbQotLS0g
a3dxL1dlYkNvcmVCcmlkZ2UubW0JMTQgSnVuIDIwMDUgMDA6MjM6NDUgLTAwMDAJMS4zOTYKKysr
IGt3cS9XZWJDb3JlQnJpZGdlLm1tCTkgSnVsIDIwMDUgMDI6NDM6NTIgLTAwMDAKQEAgLTM5LDcg
KzM5LDYgQEAKICNpbXBvcnQgImh0bWxfaW1hZ2VpbXBsLmgiCiAjaW1wb3J0ICJodG1sYXR0cnMu
aCIKICNpbXBvcnQgImh0bWxlZGl0aW5nLmgiCi0jaW1wb3J0ICJodG1sdGFncy5oIgogI2ltcG9y
dCAia2h0bWxfcGFydC5oIgogI2ltcG9ydCAia2h0bWx2aWV3LmgiCiAjaW1wb3J0ICJranNfcHJv
eHkuaCIKQEAgLTY3LDcgKzY2LDYgQEAKICNpbXBvcnQgIktXUUFzc2VydGlvbnMuaCIKICNpbXBv
cnQgIktXUUNoYXJzZXRzLmgiCiAjaW1wb3J0ICJLV1FDbGlwYm9hcmQuaCIKLSNpbXBvcnQgIktX
UURPTU5vZGUuaCIKICNpbXBvcnQgIktXUUVkaXRDb21tYW5kLmgiCiAjaW1wb3J0ICJLV1FGb250
LmgiCiAjaW1wb3J0ICJLV1FGb3VuZGF0aW9uRXh0cmFzLmgiCkBAIC0xMDAsNiArOTgsNyBAQCB1
c2luZyBET006OkhUTUxGb3JtRWxlbWVudEltcGw7CiB1c2luZyBET006OkhUTUxHZW5lcmljRm9y
bUVsZW1lbnRJbXBsOwogdXNpbmcgRE9NOjpIVE1MSW1hZ2VFbGVtZW50SW1wbDsKIHVzaW5nIERP
TTo6SFRNTElucHV0RWxlbWVudEltcGw7Cit1c2luZyBET006OkhUTUxOYW1lczsKIHVzaW5nIERP
TTo6Tm9kZUltcGw7CiB1c2luZyBET006OlBvc2l0aW9uOwogdXNpbmcgRE9NOjpSYW5nZUltcGw7
CkBAIC05MTMsNyArOTEyLDcgQEAgc3RhdGljIE5TVmlldyAqdmlld0ZvckVsZW1lbnQoRWxlbWVu
dEltcAogc3RhdGljIEhUTUxJbnB1dEVsZW1lbnRJbXBsICppbnB1dEVsZW1lbnRGcm9tRE9NRWxl
bWVudChET01FbGVtZW50ICplbGVtZW50KQogewogICAgIE5vZGVJbXBsICpub2RlID0gW2VsZW1l
bnQgX25vZGVJbXBsXTsKLSAgICBpZiAobm9kZSAmJiBpZEZyb21Ob2RlKG5vZGUpID09IElEX0lO
UFVUKSB7CisgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppbnB1dCgpKSkgewog
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudEltcGwgKj4obm9kZSk7
CiAgICAgfQogICAgIHJldHVybiBuaWw7CkBAIC05MjYsNyArOTI1LDcgQEAgc3RhdGljIEhUTUxG
b3JtRWxlbWVudEltcGwgKmZvcm1FbGVtZW50RgogICAgIC8vIG1hcHMuZ29vZ2xlLmNvbSBjcmFz
aGVzIG90aGVyd2lzZSBiZWNhdXNlIGl0IGlzIGFuIHhzbHQgZmlsZQogICAgIC8vIHRoYXQgY29u
dGFpbnMgPGZvcm0+IGVsZW1lbnRzIHRoYXQgYXJlbid0IGluIGFueSBuYW1lc3BhY2UsIHNvCiAg
ICAgLy8gdGhleSBjb21lIG91dCBhcyBnZW5lcmljIENNTCBlbGVtZW50cwotICAgIGlmIChub2Rl
ICYmIG5vZGUtPmlzSFRNTEVsZW1lbnQoKSAmJiBpZEZyb21Ob2RlKG5vZGUpID09IElEX0ZPUk0p
IHsKKyAgICBpZiAobm9kZSAmJiBub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Zm9ybSgpKSkg
ewogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTEZvcm1FbGVtZW50SW1wbCAqPihub2Rl
KTsKICAgICB9CiAgICAgcmV0dXJuIG5pbDsKQEAgLTEwOTYsNyArMTA5NSw3IEBAIHN0YXRpYyBI
VE1MRm9ybUVsZW1lbnRJbXBsICpmb3JtRWxlbWVudEYKICAgICAKICAgICAgICAgICAgIC8vIEZJ
WE1FOiBDb2RlIGNvcGllZCBmcm9tIFJlbmRlckltYWdlOjp1cGRhdGVGcm9tRWxlbWVudDsgc2hv
dWxkIHNoYXJlLgogICAgICAgICAgICAgRE9NU3RyaW5nIGF0dHI7Ci0gICAgICAgICAgICBpZiAo
aWRGcm9tTm9kZShpKSA9PSBJRF9PQkpFQ1QpIHsKKyAgICAgICAgICAgIGlmIChpLT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6b2JqZWN0KCkpKSB7CiAgICAgICAgICAgICAgICAgYXR0ciA9IGktPmdl
dEF0dHJpYnV0ZShBVFRSX0RBVEEpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
ICAgICBhdHRyID0gaS0+Z2V0QXR0cmlidXRlKEFUVFJfU1JDKTsKQEAgLTExMDgsOSArMTEwNyw5
IEBAIHN0YXRpYyBIVE1MRm9ybUVsZW1lbnRJbXBsICpmb3JtRWxlbWVudEYKICAgICAgICAgICAg
IAogICAgICAgICAgICAgLy8gRklYTUU6IENvZGUgY29waWVkIGZyb20gUmVuZGVySW1hZ2U6OnVw
ZGF0ZUZyb21FbGVtZW50OyBzaG91bGQgc2hhcmUuCiAgICAgICAgICAgICBET01TdHJpbmcgYWx0
OwotICAgICAgICAgICAgaWYgKGlkRnJvbU5vZGUoaSkgPT0gSURfSU5QVVQpCisgICAgICAgICAg
ICBpZiAoaS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmlucHV0KCkpKQogICAgICAgICAgICAgICAg
IGFsdCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnRJbXBsICo+KGkpLT5hbHRUZXh0KCk7
Ci0gICAgICAgICAgICBlbHNlIGlmIChpZEZyb21Ob2RlKGkpID09IElEX0lNRykKKyAgICAgICAg
ICAgIGVsc2UgaWYgKGktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppbWcoKSkpCiAgICAgICAgICAg
ICAgICAgYWx0ID0gc3RhdGljX2Nhc3Q8SFRNTEltYWdlRWxlbWVudEltcGwgKj4oaSktPmFsdFRl
eHQoKTsKICAgICAgICAgICAgIGlmICghYWx0LmlzTnVsbCgpKSB7CiAgICAgICAgICAgICAgICAg
UVN0cmluZyBhbHRUZXh0ID0gYWx0LnN0cmluZygpOwpJbmRleDogbGF5b3V0LXRlc3RzL2Zhc3Qv
ZG9tL2Nzcy1kb20tcmVhZC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L1dlYkNvcmUvbGF5b3V0LXRlc3RzL2Zhc3QvZG9tL2Nzcy1kb20tcmVhZC1leHBlY3RlZC50
eHQsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMQpkaWZmIC11IC1wIC1yMS4xIGxheW91dC10ZXN0
cy9mYXN0L2RvbS9jc3MtZG9tLXJlYWQtZXhwZWN0ZWQudHh0Ci0tLSBsYXlvdXQtdGVzdHMvZmFz
dC9kb20vY3NzLWRvbS1yZWFkLWV4cGVjdGVkLnR4dAkxOSBKdW4gMjAwNSAwNjozODowOSAtMDAw
MAkxLjEKKysrIGxheW91dC10ZXN0cy9mYXN0L2RvbS9jc3MtZG9tLXJlYWQtZXhwZWN0ZWQudHh0
CTkgSnVsIDIwMDUgMDI6NDM6NTUgLTAwMDAKQEAgLTksNSArOSw1IEBAIFNlcmlhbGl6ZWQgc3R5
bGUsIHVzaW5nIENTUyBET006CiAudHdvIHsgZGlzcGxheTogaW5saW5lOyB9CiAudGhyZWUgeyBk
aXNwbGF5OiBsaXN0LWl0ZW07IGxpc3Qtc3R5bGUtdHlwZTogc3F1YXJlOyBtYXJnaW4tbGVmdDog
M2VtOyB9CiAuZm91ciB7IGRpc3BsYXk6IG5vbmU7IGNvbG9yOiByZWQ7IH0KLUkgeyBkaXNwbGF5
OiBibG9jazsgfQoraSB7IGRpc3BsYXk6IGJsb2NrOyB9CiAKSW5kZXg6IGxheW91dC10ZXN0cy9m
YXN0L292ZXJmbG93LzAwMy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9y
b290L1dlYkNvcmUvbGF5b3V0LXRlc3RzL2Zhc3Qvb3ZlcmZsb3cvMDAzLWV4cGVjdGVkLnR4dCx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMApkaWZmIC11IC1wIC1yMS4xMCBsYXlvdXQtdGVzdHMv
ZmFzdC9vdmVyZmxvdy8wMDMtZXhwZWN0ZWQudHh0Ci0tLSBsYXlvdXQtdGVzdHMvZmFzdC9vdmVy
Zmxvdy8wMDMtZXhwZWN0ZWQudHh0CTExIEZlYiAyMDA1IDIyOjU5OjA3IC0wMDAwCTEuMTAKKysr
IGxheW91dC10ZXN0cy9mYXN0L292ZXJmbG93LzAwMy1leHBlY3RlZC50eHQJOSBKdWwgMjAwNSAw
Mjo0Mzo1NSAtMDAwMApAQCAtNCwxNCArNCwxNCBAQCBsYXllciBhdCAoMTAsMTApIHNpemUgNzgw
eDMwMgogICBSZW5kZXJCbG9jayB7ZmFrZX0gYXQgKDEwLDEwKSBzaXplIDc4MHgzMDIgW2JnY29s
b3I9I0ZGRkYwMF0KIGxheWVyIGF0ICgxMCwxMCkgc2l6ZSAyODJ4MzAyIGNsaXAgYXQgKDExLDEx
KSBzaXplIDI2NXgzMDAgc2Nyb2xsSGVpZ2h0IDEyOTIKICAgUmVuZGVyQmxvY2sge2NoYW5uZWx9
IGF0ICgwLDApIHNpemUgMjgyeDMwMiBbYmdjb2xvcj0jRUVFRUVFXSBbYm9yZGVyOiAoMXB4IHNv
bGlkICMwMDAwMDApXQotICAgIFJlbmRlckJsb2NrIHtUSVRMRX0gYXQgKDExLDExKSBzaXplIDI1
NXgxOQorICAgIFJlbmRlckJsb2NrIHt0aXRsZX0gYXQgKDExLDExKSBzaXplIDI1NXgxOQogICAg
ICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQgKDAsMCkgc2l6ZSAxNTR4MTkKICAgICAgICAgdGV4dCBy
dW4gYXQgKDAsMCkgd2lkdGggMTU0OiAic2NvdHRhbmRyZXcuY29tIgogICAgIFJlbmRlckJsb2Nr
IHtkZXNjcmlwdGlvbn0gYXQgKDExLDQwKSBzaXplIDI1NXgxMgogICAgICAgUmVuZGVyVGV4dCB7
VEVYVH0gYXQgKDAsMCkgc2l6ZSAxOTF4MTIKICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lk
dGggMTkxOiAiREhUTUwsIERPTSBhbmQgSmF2YVNjcmlwdCBOZXdzIgogICAgIFJlbmRlckJsb2Nr
IHtpdGVtfSBhdCAoMSw2Mikgc2l6ZSAyNjV4OTcgW2JnY29sb3I9I0ZGRkZGRl0gW2JvcmRlcjog
KDFweCBzb2xpZCAjQ0NDQ0NDKSBub25lICgxcHggc29saWQgI0NDQ0NDQykgbm9uZV0KLSAgICAg
IFJlbmRlcklubGluZSB7VElUTEV9IGF0ICgwLDApIHNpemUgMjMzeDE1CisgICAgICBSZW5kZXJJ
bmxpbmUge3RpdGxlfSBhdCAoMCwwKSBzaXplIDIzM3gxNQogICAgICAgICBSZW5kZXJUZXh0IHtU
RVhUfSBhdCAoMTAsMTEpIHNpemUgMjMzeDE1CiAgICAgICAgICAgdGV4dCBydW4gYXQgKDEwLDEx
KSB3aWR0aCAyMzM6ICJESFRNTCBBbmltYXRpb24gQXJyYXkgR2VuZXJhdG9yIgogICAgICAgUmVu
ZGVyVGV4dCB7VEVYVH0gYXQgKDAsMCkgc2l6ZSAweDAKQEAgLTI0LDcgKzI0LDcgQEAgbGF5ZXIg
YXQgKDEwLDEwKSBzaXplIDI4MngzMDIgY2xpcCBhdCAoMQogICAgICAgUmVuZGVyVGV4dCB7VEVY
VH0gYXQgKDAsMCkgc2l6ZSAweDAKICAgICAgIFJlbmRlclRleHQge1RFWFR9IGF0ICgwLDApIHNp
emUgMHgwCiAgICAgUmVuZGVyQmxvY2sge2l0ZW19IGF0ICgxLDE2OSkgc2l6ZSAyNjV4ODIgW2Jn
Y29sb3I9I0ZGRkZGRl0gW2JvcmRlcjogKDFweCBzb2xpZCAjQ0NDQ0NDKSBub25lICgxcHggc29s
aWQgI0NDQ0NDQykgbm9uZV0KLSAgICAgIFJlbmRlcklubGluZSB7VElUTEV9IGF0ICgwLDApIHNp
emUgMTc3eDE1CisgICAgICBSZW5kZXJJbmxpbmUge3RpdGxlfSBhdCAoMCwwKSBzaXplIDE3N3gx
NQogICAgICAgICBSZW5kZXJUZXh0IHtURVhUfSBhdCAoMTAsMTEpIHNpemUgMTc3eDE1CiAgICAg
ICAgICAgdGV4dCBydW4gYXQgKDEwLDExKSB3aWR0aCAxNzc6ICJET00gYW5kIEV4dGVuZGVkIEVu
dHJpZXMiCiAgICAgICBSZW5kZXJUZXh0IHtURVhUfSBhdCAoMTg3LDExKSBzaXplIDR4MTUKQEAg
LTM4LDcgKzM4LDcgQEAgbGF5ZXIgYXQgKDEwLDEwKSBzaXplIDI4MngzMDIgY2xpcCBhdCAoMQog
ICAgICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQgKDAsMCkgc2l6ZSAweDAKICAgICAgIFJlbmRlclRl
eHQge1RFWFR9IGF0ICgwLDApIHNpemUgMHgwCiAgICAgUmVuZGVyQmxvY2sge2l0ZW19IGF0ICgx
LDI2MSkgc2l6ZSAyNjV4ODIgW2JnY29sb3I9I0ZGRkZGRl0gW2JvcmRlcjogKDFweCBzb2xpZCAj
Q0NDQ0NDKSBub25lICgxcHggc29saWQgI0NDQ0NDQykgbm9uZV0KLSAgICAgIFJlbmRlcklubGlu
ZSB7VElUTEV9IGF0ICgwLDApIHNpemUgMTY0eDE1CisgICAgICBSZW5kZXJJbmxpbmUge3RpdGxl
fSBhdCAoMCwwKSBzaXplIDE2NHgxNQogICAgICAgICBSZW5kZXJUZXh0IHtURVhUfSBhdCAoMTAs
MTEpIHNpemUgMTY0eDE1CiAgICAgICAgICAgdGV4dCBydW4gYXQgKDEwLDExKSB3aWR0aCAxNjQ6
ICJjZWxsc3BhY2luZyBhbmQgdGhlIERPTSIKICAgICAgIFJlbmRlclRleHQge1RFWFR9IGF0ICgx
NzQsMTEpIHNpemUgNHgxNQpAQCAtNTIsNyArNTIsNyBAQCBsYXllciBhdCAoMTAsMTApIHNpemUg
MjgyeDMwMiBjbGlwIGF0ICgxCiAgICAgICBSZW5kZXJUZXh0IHtURVhUfSBhdCAoMCwwKSBzaXpl
IDB4MAogICAgICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQgKDAsMCkgc2l6ZSAweDAKICAgICBSZW5k
ZXJCbG9jayB7aXRlbX0gYXQgKDEsMzUzKSBzaXplIDI2NXg5NyBbYmdjb2xvcj0jRkZGRkZGXSBb
Ym9yZGVyOiAoMXB4IHNvbGlkICNDQ0NDQ0MpIG5vbmUgKDFweCBzb2xpZCAjQ0NDQ0NDKSBub25l
XQotICAgICAgUmVuZGVySW5saW5lIHtUSVRMRX0gYXQgKDAsMCkgc2l6ZSAxNzd4MTUKKyAgICAg
IFJlbmRlcklubGluZSB7dGl0bGV9IGF0ICgwLDApIHNpemUgMTc3eDE1CiAgICAgICAgIFJlbmRl
clRleHQge1RFWFR9IGF0ICgxMCwxMSkgc2l6ZSAxNzd4MTUKICAgICAgICAgICB0ZXh0IHJ1biBh
dCAoMTAsMTEpIHdpZHRoIDE3NzogImNvbnRlbnRlZGl0YWJsZSBmb3IgTW96aWxsYSIKICAgICAg
IFJlbmRlclRleHQge1RFWFR9IGF0ICgxODcsMTEpIHNpemUgNHgxNQpAQCAtNjcsNyArNjcsNyBA
QCBsYXllciBhdCAoMTAsMTApIHNpemUgMjgyeDMwMiBjbGlwIGF0ICgxCiAgICAgICBSZW5kZXJU
ZXh0IHtURVhUfSBhdCAoMCwwKSBzaXplIDB4MAogICAgICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQg
KDAsMCkgc2l6ZSAweDAKICAgICBSZW5kZXJCbG9jayB7aXRlbX0gYXQgKDEsNDYwKSBzaXplIDI2
NXg4MiBbYmdjb2xvcj0jRkZGRkZGXSBbYm9yZGVyOiAoMXB4IHNvbGlkICNDQ0NDQ0MpIG5vbmUg
KDFweCBzb2xpZCAjQ0NDQ0NDKSBub25lXQotICAgICAgUmVuZGVySW5saW5lIHtUSVRMRX0gYXQg
KDAsMCkgc2l6ZSAxODJ4MzAKKyAgICAgIFJlbmRlcklubGluZSB7dGl0bGV9IGF0ICgwLDApIHNp
emUgMTgyeDMwCiAgICAgICAgIFJlbmRlclRleHQge1RFWFR9IGF0ICgxMCwxMSkgc2l6ZSAxODJ4
MzAKICAgICAgICAgICB0ZXh0IHJ1biBhdCAoMTAsMTEpIHdpZHRoIDE4MjogIkRIVE1MIFRpbWVs
aW5lL0tleWZyYW1lIgogICAgICAgICAgIHRleHQgcnVuIGF0ICgxMCwyNikgd2lkdGggNjk6ICJB
bmltYXRpb24iCkBAIC04MSw3ICs4MSw3IEBAIGxheWVyIGF0ICgxMCwxMCkgc2l6ZSAyODJ4MzAy
IGNsaXAgYXQgKDEKICAgICAgIFJlbmRlclRleHQge1RFWFR9IGF0ICgwLDApIHNpemUgMHgwCiAg
ICAgICBSZW5kZXJUZXh0IHtURVhUfSBhdCAoMCwwKSBzaXplIDB4MAogICAgIFJlbmRlckJsb2Nr
IHtpdGVtfSBhdCAoMSw1NTIpIHNpemUgMjY1eDk3IFtiZ2NvbG9yPSNGRkZGRkZdIFtib3JkZXI6
ICgxcHggc29saWQgI0NDQ0NDQykgbm9uZSAoMXB4IHNvbGlkICNDQ0NDQ0MpIG5vbmVdCi0gICAg
ICBSZW5kZXJJbmxpbmUge1RJVExFfSBhdCAoMCwwKSBzaXplIDE1N3gzMAorICAgICAgUmVuZGVy
SW5saW5lIHt0aXRsZX0gYXQgKDAsMCkgc2l6ZSAxNTd4MzAKICAgICAgICAgUmVuZGVyVGV4dCB7
VEVYVH0gYXQgKDEwLDExKSBzaXplIDE1N3gzMAogICAgICAgICAgIHRleHQgcnVuIGF0ICgxMCwx
MSkgd2lkdGggMTU3OiAiRHluQVBJIDIuOSBhbmQgTW96aWxsYSIKICAgICAgICAgICB0ZXh0IHJ1
biBhdCAoMTAsMjYpIHdpZHRoIDEyNDogImNvbXBhdGliaWxpdHkgcG9ydHMiCkBAIC05Niw3ICs5
Niw3IEBAIGxheWVyIGF0ICgxMCwxMCkgc2l6ZSAyODJ4MzAyIGNsaXAgYXQgKDEKICAgICAgIFJl
bmRlclRleHQge1RFWFR9IGF0ICgwLDApIHNpemUgMHgwCiAgICAgICBSZW5kZXJUZXh0IHtURVhU
fSBhdCAoMCwwKSBzaXplIDB4MAogICAgIFJlbmRlckJsb2NrIHtpdGVtfSBhdCAoMSw2NTkpIHNp
emUgMjY1eDY3IFtiZ2NvbG9yPSNGRkZGRkZdIFtib3JkZXI6ICgxcHggc29saWQgI0NDQ0NDQykg
bm9uZSAoMXB4IHNvbGlkICNDQ0NDQ0MpIG5vbmVdCi0gICAgICBSZW5kZXJJbmxpbmUge1RJVExF
fSBhdCAoMCwwKSBzaXplIDE1NHgxNQorICAgICAgUmVuZGVySW5saW5lIHt0aXRsZX0gYXQgKDAs
MCkgc2l6ZSAxNTR4MTUKICAgICAgICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQgKDEwLDExKSBzaXpl
IDE1NHgxNQogICAgICAgICAgIHRleHQgcnVuIGF0ICgxMCwxMSkgd2lkdGggMTU0OiAiIWxpbmVE
cmF3IGJvb2ttYXJrbGV0IgogICAgICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQgKDE2NCwxMSkgc2l6
ZSA0eDE1CkBAIC0xMDksNyArMTA5LDcgQEAgbGF5ZXIgYXQgKDEwLDEwKSBzaXplIDI4MngzMDIg
Y2xpcCBhdCAoMQogICAgICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQgKDAsMCkgc2l6ZSAweDAKICAg
ICAgIFJlbmRlclRleHQge1RFWFR9IGF0ICgwLDApIHNpemUgMHgwCiAgICAgUmVuZGVyQmxvY2sg
e2l0ZW19IGF0ICgxLDczNikgc2l6ZSAyNjV4OTcgW2JnY29sb3I9I0ZGRkZGRl0gW2JvcmRlcjog
KDFweCBzb2xpZCAjQ0NDQ0NDKSBub25lICgxcHggc29saWQgI0NDQ0NDQykgbm9uZV0KLSAgICAg
IFJlbmRlcklubGluZSB7VElUTEV9IGF0ICgwLDApIHNpemUgMjAxeDE1CisgICAgICBSZW5kZXJJ
bmxpbmUge3RpdGxlfSBhdCAoMCwwKSBzaXplIDIwMXgxNQogICAgICAgICBSZW5kZXJUZXh0IHtU
RVhUfSBhdCAoMTAsMTEpIHNpemUgMjAxeDE1CiAgICAgICAgICAgdGV4dCBydW4gYXQgKDEwLDEx
KSB3aWR0aCAyMDE6ICJNb3ppbGxhLCBESFRNTCBhbmQgRE9NIGxpbmtzIgogICAgICAgUmVuZGVy
VGV4dCB7VEVYVH0gYXQgKDIxMSwxMSkgc2l6ZSA0eDE1CkBAIC0xMjQsNyArMTI0LDcgQEAgbGF5
ZXIgYXQgKDEwLDEwKSBzaXplIDI4MngzMDIgY2xpcCBhdCAoMQogICAgICAgUmVuZGVyVGV4dCB7
VEVYVH0gYXQgKDAsMCkgc2l6ZSAweDAKICAgICAgIFJlbmRlclRleHQge1RFWFR9IGF0ICgwLDAp
IHNpemUgMHgwCiAgICAgUmVuZGVyQmxvY2sge2l0ZW19IGF0ICgxLDg0Mykgc2l6ZSAyNjV4Njcg
W2JnY29sb3I9I0ZGRkZGRl0gW2JvcmRlcjogKDFweCBzb2xpZCAjQ0NDQ0NDKSBub25lICgxcHgg
c29saWQgI0NDQ0NDQykgbm9uZV0KLSAgICAgIFJlbmRlcklubGluZSB7VElUTEV9IGF0ICgwLDAp
IHNpemUgMTAzeDE1CisgICAgICBSZW5kZXJJbmxpbmUge3RpdGxlfSBhdCAoMCwwKSBzaXplIDEw
M3gxNQogICAgICAgICBSZW5kZXJUZXh0IHtURVhUfSBhdCAoMTAsMTEpIHNpemUgMTAzeDE1CiAg
ICAgICAgICAgdGV4dCBydW4gYXQgKDEwLDExKSB3aWR0aCAxMDM6ICJNb3ppbGxhIDEuMCBSQzIi
CiAgICAgICBSZW5kZXJUZXh0IHtURVhUfSBhdCAoMTEzLDExKSBzaXplIDR4MTUKQEAgLTEzNyw3
ICsxMzcsNyBAQCBsYXllciBhdCAoMTAsMTApIHNpemUgMjgyeDMwMiBjbGlwIGF0ICgxCiAgICAg
ICBSZW5kZXJUZXh0IHtURVhUfSBhdCAoMCwwKSBzaXplIDB4MAogICAgICAgUmVuZGVyVGV4dCB7
VEVYVH0gYXQgKDAsMCkgc2l6ZSAweDAKICAgICBSZW5kZXJCbG9jayB7aXRlbX0gYXQgKDEsOTIw
KSBzaXplIDI2NXg5NyBbYmdjb2xvcj0jRkZGRkZGXSBbYm9yZGVyOiAoMXB4IHNvbGlkICNDQ0ND
Q0MpIG5vbmUgKDFweCBzb2xpZCAjQ0NDQ0NDKSBub25lXQotICAgICAgUmVuZGVySW5saW5lIHtU
SVRMRX0gYXQgKDAsMCkgc2l6ZSAyMzZ4MzAKKyAgICAgIFJlbmRlcklubGluZSB7dGl0bGV9IGF0
ICgwLDApIHNpemUgMjM2eDMwCiAgICAgICAgIFJlbmRlclRleHQge1RFWFR9IGF0ICgxMCwxMSkg
c2l6ZSAyMzZ4MzAKICAgICAgICAgICB0ZXh0IHJ1biBhdCAoMTAsMTEpIHdpZHRoIDIzNjogImph
dmFzY3JpcHQ6IGlzIGRlcHJlY2F0ZWQuIERvbid0IHVzZSIKICAgICAgICAgICB0ZXh0IHJ1biBh
dCAoMTAsMjYpIHdpZHRoIDEzOiAiaXQuIgpAQCAtMTUyLDcgKzE1Miw3IEBAIGxheWVyIGF0ICgx
MCwxMCkgc2l6ZSAyODJ4MzAyIGNsaXAgYXQgKDEKICAgICAgIFJlbmRlclRleHQge1RFWFR9IGF0
ICgwLDApIHNpemUgMHgwCiAgICAgICBSZW5kZXJUZXh0IHtURVhUfSBhdCAoMCwwKSBzaXplIDB4
MAogICAgIFJlbmRlckJsb2NrIHtpdGVtfSBhdCAoMSwxMDI3KSBzaXplIDI2NXg2NyBbYmdjb2xv
cj0jRkZGRkZGXSBbYm9yZGVyOiAoMXB4IHNvbGlkICNDQ0NDQ0MpIG5vbmUgKDFweCBzb2xpZCAj
Q0NDQ0NDKSBub25lXQotICAgICAgUmVuZGVySW5saW5lIHtUSVRMRX0gYXQgKDAsMCkgc2l6ZSAx
NzZ4MTUKKyAgICAgIFJlbmRlcklubGluZSB7dGl0bGV9IGF0ICgwLDApIHNpemUgMTc2eDE1CiAg
ICAgICAgIFJlbmRlclRleHQge1RFWFR9IGF0ICgxMCwxMSkgc2l6ZSAxNzZ4MTUKICAgICAgICAg
ICB0ZXh0IHJ1biBhdCAoMTAsMTEpIHdpZHRoIDE3NjogIkNvbmRpdGlvbmFsIFNjcmlwdCBMb2Fk
aW5nIgogICAgICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQgKDAsMCkgc2l6ZSAweDAKQEAgLTE2Myw3
ICsxNjMsNyBAQCBsYXllciBhdCAoMTAsMTApIHNpemUgMjgyeDMwMiBjbGlwIGF0ICgxCiAgICAg
ICBSZW5kZXJUZXh0IHtURVhUfSBhdCAoMCwwKSBzaXplIDB4MAogICAgICAgUmVuZGVyVGV4dCB7
VEVYVH0gYXQgKDAsMCkgc2l6ZSAweDAKICAgICBSZW5kZXJCbG9jayB7aXRlbX0gYXQgKDEsMTEw
NCkgc2l6ZSAyNjV4ODIgW2JnY29sb3I9I0ZGRkZGRl0gW2JvcmRlcjogKDFweCBzb2xpZCAjQ0ND
Q0NDKSBub25lICgxcHggc29saWQgI0NDQ0NDQykgbm9uZV0KLSAgICAgIFJlbmRlcklubGluZSB7
VElUTEV9IGF0ICgwLDApIHNpemUgMTE1eDE1CisgICAgICBSZW5kZXJJbmxpbmUge3RpdGxlfSBh
dCAoMCwwKSBzaXplIDExNXgxNQogICAgICAgICBSZW5kZXJUZXh0IHtURVhUfSBhdCAoMTAsMTEp
IHNpemUgMTE1eDE1CiAgICAgICAgICAgdGV4dCBydW4gYXQgKDEwLDExKSB3aWR0aCAxMTU6ICJT
dG9yaWVzIGFuZCBUb29scyIKICAgICAgIFJlbmRlclRleHQge1RFWFR9IGF0ICgxMjUsMTEpIHNp
emUgNHgxNQpAQCAtMTc3LDcgKzE3Nyw3IEBAIGxheWVyIGF0ICgxMCwxMCkgc2l6ZSAyODJ4MzAy
IGNsaXAgYXQgKDEKICAgICAgIFJlbmRlclRleHQge1RFWFR9IGF0ICgwLDApIHNpemUgMHgwCiAg
ICAgICBSZW5kZXJUZXh0IHtURVhUfSBhdCAoMCwwKSBzaXplIDB4MAogICAgIFJlbmRlckJsb2Nr
IHtpdGVtfSBhdCAoMSwxMTk2KSBzaXplIDI2NXg5NyBbYmdjb2xvcj0jRkZGRkZGXSBbYm9yZGVy
OiAoMXB4IHNvbGlkICNDQ0NDQ0MpIG5vbmUgKDFweCBzb2xpZCAjQ0NDQ0NDKSBub25lXQotICAg
ICAgUmVuZGVySW5saW5lIHtUSVRMRX0gYXQgKDAsMCkgc2l6ZSAxNjZ4MTUKKyAgICAgIFJlbmRl
cklubGluZSB7dGl0bGV9IGF0ICgwLDApIHNpemUgMTY2eDE1CiAgICAgICAgIFJlbmRlclRleHQg
e1RFWFR9IGF0ICgxMCwxMSkgc2l6ZSAxNjZ4MTUKICAgICAgICAgICB0ZXh0IHJ1biBhdCAoMTAs
MTEpIHdpZHRoIDE2NjogIldob2xlIExvdHRvIEdlY2tvIExpbmtzIgogICAgICAgUmVuZGVyVGV4
dCB7VEVYVH0gYXQgKDE3NiwxMSkgc2l6ZSA0eDE1CkluZGV4OiBsYXlvdXQtdGVzdHMvZmFzdC90
b2tlbml6ZXIvMDAyLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3Qv
V2ViQ29yZS9sYXlvdXQtdGVzdHMvZmFzdC90b2tlbml6ZXIvMDAyLWV4cGVjdGVkLnR4dCx2CnJl
dHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYgLXUgLXAgLXIxLjEgbGF5b3V0LXRlc3RzL2Zhc3Qv
dG9rZW5pemVyLzAwMi1leHBlY3RlZC50eHQKLS0tIGxheW91dC10ZXN0cy9mYXN0L3Rva2VuaXpl
ci8wMDItZXhwZWN0ZWQudHh0CTI2IEp1bCAyMDA0IDIyOjQ1OjUxIC0wMDAwCTEuMQorKysgbGF5
b3V0LXRlc3RzL2Zhc3QvdG9rZW5pemVyLzAwMi1leHBlY3RlZC50eHQJOSBKdWwgMjAwNSAwMjo0
Mzo1NiAtMDAwMApAQCAtMSw3ICsxLDcgQEAKIGxheWVyIGF0ICgwLDApIHNpemUgODAweDYwMAog
ICBSZW5kZXJDYW52YXMgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCi1sYXllciBhdCAoMCwwKSBzaXpl
IDgwMHgzNAotICBSZW5kZXJCbG9jayB7SFRNTH0gYXQgKDAsMCkgc2l6ZSA4MDB4MzQKLSAgICBS
ZW5kZXJCb2R5IHtCT0RZfSBhdCAoOCw4KSBzaXplIDc4NHgxOAorbGF5ZXIgYXQgKDAsMCkgc2l6
ZSA4MDB4NjAwCisgIFJlbmRlckJsb2NrIHtIVE1MfSBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAg
ICBSZW5kZXJCb2R5IHtCT0RZfSBhdCAoOCw4KSBzaXplIDc4NHg1ODQKICAgICAgIFJlbmRlclRl
eHQge1RFWFR9IGF0ICgwLDApIHNpemUgMzE1eDE4CiAgICAgICAgIHRleHQgcnVuIGF0ICgwLDAp
IHdpZHRoIDMxNTogInlvdSBzaG91bGRuJ3Qgc2VlIGEgcmFuZG9tIGNoaW5lc2UgY2hhcmFjdGVy
IGhlcmUiCkluZGV4OiBsYXlvdXQtdGVzdHMvZmFzdC90b2tlbml6ZXIvZXh0ZXJuYWwtc2NyaXB0
LWRvY3VtZW50LXdyaXRlLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jv
b3QvV2ViQ29yZS9sYXlvdXQtdGVzdHMvZmFzdC90b2tlbml6ZXIvZXh0ZXJuYWwtc2NyaXB0LWRv
Y3VtZW50LXdyaXRlLWV4cGVjdGVkLnR4dCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xCmRpZmYg
LXUgLXAgLXIxLjEgbGF5b3V0LXRlc3RzL2Zhc3QvdG9rZW5pemVyL2V4dGVybmFsLXNjcmlwdC1k
b2N1bWVudC13cml0ZS1leHBlY3RlZC50eHQKLS0tIGxheW91dC10ZXN0cy9mYXN0L3Rva2VuaXpl
ci9leHRlcm5hbC1zY3JpcHQtZG9jdW1lbnQtd3JpdGUtZXhwZWN0ZWQudHh0CTE5IE9jdCAyMDA0
IDE5OjAxOjE1IC0wMDAwCTEuMQorKysgbGF5b3V0LXRlc3RzL2Zhc3QvdG9rZW5pemVyL2V4dGVy
bmFsLXNjcmlwdC1kb2N1bWVudC13cml0ZS1leHBlY3RlZC50eHQJOSBKdWwgMjAwNSAwMjo0Mzo1
NiAtMDAwMApAQCAtNCw1ICs0LDUgQEAgbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4MzQKICAgUmVu
ZGVyQmxvY2sge0hUTUx9IGF0ICgwLDApIHNpemUgODAweDM0CiAgICAgUmVuZGVyQm9keSB7Qk9E
WX0gYXQgKDgsOCkgc2l6ZSA3ODR4MTgKICAgICAgIFJlbmRlcklubGluZSB7U1BBTn0gYXQgKDAs
MCkgc2l6ZSAweDAKLSAgICAgIFJlbmRlclRleHQge1RFWFR9IGF0ICgwLDApIHNpemUgMjI2eDE4
Ci0gICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDIyNjogIlRoaXMgc2hvdWxkIGJlIGEg
c3BhbjogW29iamVjdCBzcGFuXSIKKyAgICAgIFJlbmRlclRleHQge1RFWFR9IGF0ICgwLDApIHNp
emUgMjM5eDE4CisgICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDIzOTogIlRoaXMgc2hv
dWxkIGJlIGEgc3BhbjogW29iamVjdCBTUEFOXSIKSW5kZXg6IGxheW91dC10ZXN0cy9mYXN0L3Rv
a2VuaXplci9zY3JpcHRfZXh0cmFfY2xvc2UtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnMvcm9vdC9XZWJDb3JlL2xheW91dC10ZXN0cy9mYXN0L3Rva2VuaXplci9zY3JpcHRf
ZXh0cmFfY2xvc2UtZXhwZWN0ZWQudHh0LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjUKZGlmZiAt
dSAtcCAtcjEuNSBsYXlvdXQtdGVzdHMvZmFzdC90b2tlbml6ZXIvc2NyaXB0X2V4dHJhX2Nsb3Nl
LWV4cGVjdGVkLnR4dAotLS0gbGF5b3V0LXRlc3RzL2Zhc3QvdG9rZW5pemVyL3NjcmlwdF9leHRy
YV9jbG9zZS1leHBlY3RlZC50eHQJNiBKdWwgMjAwNSAxODo0OTowNiAtMDAwMAkxLjUKKysrIGxh
eW91dC10ZXN0cy9mYXN0L3Rva2VuaXplci9zY3JpcHRfZXh0cmFfY2xvc2UtZXhwZWN0ZWQudHh0
CTkgSnVsIDIwMDUgMDI6NDM6NTYgLTAwMDAKQEAgLTYsNyArNiw2IEBAIGxheWVyIGF0ICgwLDAp
IHNpemUgODAweDYwMAogICAgICAgUmVuZGVyVGV4dCB7VEVYVH0gYXQgKDAsMCkgc2l6ZSA1NXgx
OAogICAgICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCA1NTogIlRFU1QuLi4gIgogICAgICAg
UmVuZGVyVGV4dCB7VEVYVH0gYXQgKDAsMCkgc2l6ZSAweDAKLSAgICAgIFJlbmRlclRleHQge1RF
WFR9IGF0ICgwLDApIHNpemUgMHgwCiAgICAgICBSZW5kZXJUZXh0IHtURVhUfSBhdCAoNTUsMCkg
c2l6ZSAyMzJ4MTgKICAgICAgICAgdGV4dCBydW4gYXQgKDU1LDApIHdpZHRoIDY5OiAiUEFTU0VE
LiAiCiAgICAgICAgIHRleHQgcnVuIGF0ICgxMjQsMCkgd2lkdGggMTYzOiAiVGhpcyB0ZXh0IHNo
b3VsZCBzaG93IHVwLiIKSW5kZXg6IGxheW91dC10ZXN0cy9mYXN0L3Rva2VuaXplci9zY3JpcHRf
cXVpcmstZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IGxheW91dC10ZXN0cy9mYXN0
L3Rva2VuaXplci9zY3JpcHRfcXVpcmstZXhwZWN0ZWQudHh0CmRpZmYgLU4gbGF5b3V0LXRlc3Rz
L2Zhc3QvdG9rZW5pemVyL3NjcmlwdF9xdWlyay1leHBlY3RlZC50eHQKLS0tIGxheW91dC10ZXN0
cy9mYXN0L3Rva2VuaXplci9zY3JpcHRfcXVpcmstZXhwZWN0ZWQudHh0CTE3IEp1biAyMDA1IDIw
OjAwOjExIC0wMDAwCTEuMQorKysgL2Rldi9udWxsCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAK
QEAgLTEsOSArMCwwIEBACi1sYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKLSAgUmVuZGVyQ2Fu
dmFzIGF0ICgwLDApIHNpemUgODAweDYwMAotbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCi0g
IFJlbmRlckJsb2NrIHtIVE1MfSBhdCAoMCwwKSBzaXplIDgwMHg2MDAKLSAgICBSZW5kZXJCb2R5
IHtCT0RZfSBhdCAoOCw4KSBzaXplIDc4NHg1ODQKLSAgICAgIFJlbmRlclRleHQge1RFWFR9IGF0
ICgwLDApIHNpemUgMjc1eDE4Ci0gICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDExMjog
IlRFU1QgUEFTU0VELiAiCi0gICAgICAgIHRleHQgcnVuIGF0ICgxMTIsMCkgd2lkdGggMTYzOiAi
VGhpcyB0ZXh0IHNob3VsZCBzaG93IHVwLiIKLSAgICAgIFJlbmRlclRleHQge1RFWFR9IGF0ICgw
LDApIHNpemUgMHgwCkluZGV4OiBsYXlvdXQtdGVzdHMvZmFzdC90b2tlbml6ZXIvc2NyaXB0X3F1
aXJrLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogbGF5b3V0LXRlc3RzL2Zhc3QvdG9rZW5pemVy
L3NjcmlwdF9xdWlyay5odG1sCmRpZmYgLU4gbGF5b3V0LXRlc3RzL2Zhc3QvdG9rZW5pemVyL3Nj
cmlwdF9xdWlyay5odG1sCi0tLSBsYXlvdXQtdGVzdHMvZmFzdC90b2tlbml6ZXIvc2NyaXB0X3F1
aXJrLmh0bWwJMTcgSnVuIDIwMDUgMjA6MDA6MTEgLTAwMDAJMS4xCisrKyAvZGV2L251bGwJMSBK
YW4gMTk3MCAwMDowMDowMCAtMDAwMApAQCAtMSw2ICswLDAgQEAKLTxodG1sPgotPGJvZHk+Ci08
c2NyaXB0IHNyYz0icmVzb3VyY2VzL2VtcHR5X3NjcmlwdC5qcyIgLz4KLVRFU1QgUEFTU0VELiAg
VGhpcyB0ZXh0IHNob3VsZCBzaG93IHVwLgotPC9ib2R5PgotPC9odG1sClwgTm8gbmV3bGluZSBh
dCBlbmQgb2YgZmlsZQo=
</data>
<flag name="review"
          id="201"
          type_id="1"
          status="+"
          setter="mjs"
    />
          </attachment>
      

    </bug>

</bugzilla>